diff --git a/Colabs/GroceryDataset_Model_Training.ipynb b/Colabs/GroceryDataset_Model_Training.ipynb
index 50aaf3e..9b56f89 100644
--- a/Colabs/GroceryDataset_Model_Training.ipynb
+++ b/Colabs/GroceryDataset_Model_Training.ipynb
@@ -1,1123 +1,962 @@
{
- "nbformat": 4,
- "nbformat_minor": 0,
- "metadata": {
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "colab_type": "text",
+ "id": "view-in-github"
+ },
+ "source": [
+ ""
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "FiKnGzM6uTnn"
+ },
+ "source": [
+ "This notebooks trains a [MobileDet](https://arxiv.org/abs/2004.14525) model to detect products from shelf images of grocery stores. MobileDet is more parameter efficient than MobileNetV2-based detectors. It was specifically designed in order to enhance inference latency of object detectors running on edge devices without sacrificing performance. "
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "s0aiwT-Bt1oS"
+ },
+ "source": [
+ "## Initial setup"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
"colab": {
- "name": "GroceryDataset_Model_Training.ipynb",
- "provenance": [],
- "collapsed_sections": [],
- "mount_file_id": "1fO79QDq0skXhak8UqeDavwe5cjv6LBw4",
- "authorship_tag": "ABX9TyMawxXN1GnIL3BLEWYdg9r3",
- "include_colab_link": true
- },
- "kernelspec": {
- "name": "python3",
- "display_name": "Python 3"
+ "base_uri": "https://localhost:8080/"
},
- "accelerator": "GPU"
- },
- "cells": [
+ "id": "gW1nMJS4w2v5",
+ "outputId": "b94112e0-05f5-4651-a379-8abbbaa967c4"
+ },
+ "outputs": [
{
- "cell_type": "markdown",
- "metadata": {
- "id": "view-in-github",
- "colab_type": "text"
- },
- "source": [
- ""
- ]
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Sat Jan 16 12:26:13 2021 \n",
+ "+-----------------------------------------------------------------------------+\n",
+ "| NVIDIA-SMI 460.27.04 Driver Version: 418.67 CUDA Version: 10.1 |\n",
+ "|-------------------------------+----------------------+----------------------+\n",
+ "| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |\n",
+ "| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |\n",
+ "| | | MIG M. |\n",
+ "|===============================+======================+======================|\n",
+ "| 0 Tesla T4 Off | 00000000:00:04.0 Off | 0 |\n",
+ "| N/A 52C P8 12W / 70W | 0MiB / 15079MiB | 0% Default |\n",
+ "| | | ERR! |\n",
+ "+-------------------------------+----------------------+----------------------+\n",
+ " \n",
+ "+-----------------------------------------------------------------------------+\n",
+ "| Processes: |\n",
+ "| GPU GI CI PID Type Process name GPU Memory |\n",
+ "| ID ID Usage |\n",
+ "|=============================================================================|\n",
+ "| No running processes found |\n",
+ "+-----------------------------------------------------------------------------+\n"
+ ]
+ }
+ ],
+ "source": [
+ "# Which GPU?\n",
+ "!nvidia-smi"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "id": "SqftfSzXxBYL"
+ },
+ "outputs": [],
+ "source": [
+ "# Install TFOD API (TF 1)\n",
+ "%tensorflow_version 1.x\n",
+ "import tensorflow as tf \n",
+ "print(tf.__version__)\n",
+ "\n",
+ "!git clone https://github.com/tensorflow/models.git\n",
+ "\n",
+ "% cd models/research\n",
+ "!pip install --upgrade pip\n",
+ "# Compile protos.\n",
+ "!protoc object_detection/protos/*.proto --python_out=.\n",
+ "# Install TensorFlow Object Detection API.\n",
+ "!cp object_detection/packages/tf1/setup.py .\n",
+ "!python -m pip install --use-feature=2020-resolver ."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "kwmIQJmFt-Pg"
+ },
+ "source": [
+ "## Gather data sources and other training related files\n",
+ "\n",
+ "Now, we retrieve the TFRecords, configuration file, `.pbtxt` file. We also download the pre-trained model weights along with its configuration file. "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "id": "H9CjJe0m28fb"
+ },
+ "outputs": [],
+ "source": [
+ "from google.colab import drive\n",
+ "drive.mount('/content/drive')"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
},
+ "id": "MkQt5nX73Fn5",
+ "outputId": "32e12f32-7f48-4188-8812-1a9dcd2909d4"
+ },
+ "outputs": [
{
- "cell_type": "markdown",
- "metadata": {
- "id": "FiKnGzM6uTnn"
- },
- "source": [
- "This notebooks trains a [MobileDet](https://arxiv.org/abs/2004.14525) model to detect products from shelf images of grocery stores. MobileDet is more parameter efficient than MobileNetV2-based detectors. It was specifically designed in order to enhance inference latency of object detectors running on edge devices without sacrificing performance. "
- ]
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "-rw------- 1 root root 101M Jan 16 12:26 /content/test.record\n",
+ "-rw------- 1 root root 456M Jan 16 12:26 /content/train.record\n"
+ ]
+ }
+ ],
+ "source": [
+ "!cp -r /content/drive/MyDrive/product-detection/*.record .\n",
+ "!cp -r /content/drive/MyDrive/product-detection/*.pbtxt .\n",
+ "!mv *.record /content/\n",
+ "!mv *.pbtxt /content/\n",
+ "!ls -lh /content/*.record"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "Pg6vWn9Eu7Lt"
+ },
+ "source": [
+ "TFOD API usually expects a configuration file where a developer specifies all the hyperparameters along with the data paths. I created the following configuration files referring to the guidelines [here](https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/configuring_jobs.md). "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "id": "_IZnVJH9Kvxb"
+ },
+ "outputs": [],
+ "source": [
+ "!wget -q https://gist.githubusercontent.com/sayakpaul/f179fb8150c064f27c8a84a3a0cdefa0/raw/589b1967a5c7a800e22eea45c01138900736cc2d/ssdlite_mobiledet_dsp_320x320_products_sync_4x4.config"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
},
+ "id": "nMoQ_O5OK2Wi",
+ "outputId": "3c75f6a1-e368-4e0e-8455-1728055443a7"
+ },
+ "outputs": [
{
- "cell_type": "markdown",
- "metadata": {
- "id": "s0aiwT-Bt1oS"
- },
- "source": [
- "## Initial setup"
- ]
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "ssdlite_mobiledet_dsp_320x320_coco_2020_05_19/\n",
+ "ssdlite_mobiledet_dsp_320x320_coco_2020_05_19/fp32/\n",
+ "ssdlite_mobiledet_dsp_320x320_coco_2020_05_19/fp32/model.ckpt-400000.data-00000-of-00001\n",
+ "ssdlite_mobiledet_dsp_320x320_coco_2020_05_19/fp32/model.ckpt-400000.index\n",
+ "ssdlite_mobiledet_dsp_320x320_coco_2020_05_19/fp32/model.ckpt-400000.meta\n",
+ "ssdlite_mobiledet_dsp_320x320_coco_2020_05_19/fp32/tflite_graph.pbtxt\n",
+ "ssdlite_mobiledet_dsp_320x320_coco_2020_05_19/fp32/tflite_graph.pb\n",
+ "ssdlite_mobiledet_dsp_320x320_coco_2020_05_19/fp32/pipeline.config\n",
+ "ssdlite_mobiledet_dsp_320x320_coco_2020_05_19/fp32/model.tflite\n",
+ "ssdlite_mobiledet_dsp_320x320_coco_2020_05_19/uint8/\n",
+ "ssdlite_mobiledet_dsp_320x320_coco_2020_05_19/uint8/model.ckpt-400000.data-00000-of-00001\n",
+ "ssdlite_mobiledet_dsp_320x320_coco_2020_05_19/uint8/model.ckpt-400000.index\n",
+ "ssdlite_mobiledet_dsp_320x320_coco_2020_05_19/uint8/model.ckpt-400000.meta\n",
+ "ssdlite_mobiledet_dsp_320x320_coco_2020_05_19/uint8/tflite_graph.pbtxt\n",
+ "ssdlite_mobiledet_dsp_320x320_coco_2020_05_19/uint8/tflite_graph.pb\n",
+ "ssdlite_mobiledet_dsp_320x320_coco_2020_05_19/uint8/pipeline.config\n",
+ "ssdlite_mobiledet_dsp_320x320_coco_2020_05_19/uint8/model.tflite\n"
+ ]
+ }
+ ],
+ "source": [
+ "#@title Download model checkpoint and untar it\n",
+ "!wget -q http://download.tensorflow.org/models/object_detection/ssdlite_mobiledet_dsp_320x320_coco_2020_05_19.tar.gz\n",
+ "!tar -xvf ssdlite_mobiledet_dsp_320x320_coco_2020_05_19.tar.gz"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "ryneXspSvqgx"
+ },
+ "source": [
+ "## Model training"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "id": "LhvgmOJMLEvq"
+ },
+ "outputs": [],
+ "source": [
+ "#@markdown **Note**: This script interleaves both training and evaluation. Before starting training verify the paths carefully. If you run into out-of-memory problems, then simply reduce the batch size inside the configuration file and start over. \n",
+ "PIPELINE_CONFIG_PATH=\"/content/models/research/ssdlite_mobiledet_dsp_320x320_products_sync_4x4.config\"\n",
+ "MODEL_DIR=\"/content/models/research/ssdlite_mobiledet_dsp_320x320_coco_2020_05_19/fp32/\"\n",
+ "\n",
+ "!python object_detection/model_main.py \\\n",
+ " --pipeline_config_path={PIPELINE_CONFIG_PATH} \\\n",
+ " --model_dir={MODEL_DIR} \\\n",
+ " --alsologtostderr"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "6mUFh87-d-Gk"
+ },
+ "source": [
+ "Training takes about **2.5 hours** on a Tesla T4. To keep the notebook clean, I have removed the outputs. Here are some snippets - \n",
+ "\n",
+ "```shell\n",
+ "INFO:tensorflow:global_step/sec: 1.51478\n",
+ "I0116 14:43:28.403008 140409006634880 basic_session_run_hooks.py:692] global_step/sec: 1.51478\n",
+ "INFO:tensorflow:loss = 0.289738, step = 9032 (66.016 sec)\n",
+ "I0116 14:43:28.404469 140409006634880 basic_session_run_hooks.py:260] loss = 0.289738, step = 9032 (66.016 sec)\n",
+ "INFO:tensorflow:global_step/sec: 1.49223\n",
+ "I0116 14:44:35.416763 140409006634880 basic_session_run_hooks.py:692] global_step/sec: 1.49223\n",
+ "INFO:tensorflow:loss = 0.26625738, step = 9132 (67.014 sec)\n",
+ "I0116 14:44:35.418235 140409006634880 basic_session_run_hooks.py:260] loss = 0.26625738, step = 9132 (67.014 sec)\n",
+ "INFO:tensorflow:global_step/sec: 1.55216\n",
+ "I0116 14:45:39.843287 140409006634880 basic_session_run_hooks.py:692] global_step/sec: 1.55216\n",
+ "INFO:tensorflow:loss = 0.2920295, step = 9232 (64.427 sec)\n",
+ "I0116 14:45:39.844861 140409006634880 basic_session_run_hooks.py:260] loss = 0.2920295, step = 9232 (64.427 sec)\n",
+ "INFO:tensorflow:global_step/sec: 1.55722\n",
+ "I0116 14:46:44.060229 140409006634880 basic_session_run_hooks.py:692] global_step/sec: 1.55722\n",
+ "INFO:tensorflow:loss = 0.27517703, step = 9332 (64.217 sec)\n",
+ "I0116 14:46:44.061845 140409006634880 basic_session_run_hooks.py:260] loss = 0.27517703, step = 9332 (64.217 sec)\n",
+ "```\n",
+ "\n",
+ "Training completed with the following loss - `Loss for final step: 0.27454737`. In order to use the model later, we can take the tained model checkpoints and convert them to single a frozen inference graph. "
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "nij2yHOov4ZD"
+ },
+ "source": [
+ "## Generate final graph"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "id": "xYf4UlwxiSu-"
+ },
+ "outputs": [],
+ "source": [
+ "!python object_detection/export_inference_graph.py \\\n",
+ " --pipeline_config_path=$PIPELINE_CONFIG_PATH \\\n",
+ " --trained_checkpoint_prefix=/content/models/research/ssdlite_mobiledet_dsp_320x320_coco_2020_05_19/fp32/model.ckpt-10000 \\\n",
+ " --output_directory=$MODEL_DIR \\"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
},
+ "id": "JEGtgDeqjlc-",
+ "outputId": "aae4950c-230f-40c2-8fe7-3507abb4474c"
+ },
+ "outputs": [
{
- "cell_type": "code",
- "metadata": {
- "colab": {
- "base_uri": "https://localhost:8080/"
- },
- "id": "gW1nMJS4w2v5",
- "outputId": "b94112e0-05f5-4651-a379-8abbbaa967c4"
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "-rw-r--r-- 1 root root 26M Jan 16 15:11 /content/models/research/ssdlite_mobiledet_dsp_320x320_coco_2020_05_19/fp32/frozen_inference_graph.pb\n",
+ "-rw-r----- 1 475825 89939 28M May 19 2020 /content/models/research/ssdlite_mobiledet_dsp_320x320_coco_2020_05_19/fp32/tflite_graph.pb\n"
+ ]
+ }
+ ],
+ "source": [
+ "!ls -lh /content/models/research/ssdlite_mobiledet_dsp_320x320_coco_2020_05_19/fp32/*.pb"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "qxQ9numRtsk-"
+ },
+ "source": [
+ "We can also view model's training proress in TensorBoard. "
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "tHeoeh6XwE90"
+ },
+ "source": [
+ "## View model's training progress in TensorBoard"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 800,
+ "resources": {
+ "http://localhost:6006/": {
+ "data": "PCFkb2N0eXBlIGh0bWw+PCEtLQpAbGljZW5zZQpDb3B5cmlnaHQgMjAxNiBUaGUgVGVuc29yRmxvdyBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgoKTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CnlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CgogICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCgpVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCmRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCldJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgpTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCmxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotLT48bWV0YSBjaGFyc2V0PSJ1dGYtOCI+Cjx0aXRsZT5UZW5zb3JCb2FyZDwvdGl0bGU+CjxsaW5rIHJlbD0ic2hvcnRjdXQgaWNvbiIgaHJlZj0iZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFNUUFBQURFQ0FNQUFBRDNlSDVaQUFBQUJHZEJUVUVBQUxHUEMveGhCUUFBQUFGelVrZENBSzdPSE9rQUFBRC9VRXhVUmZGbEtmYUVMdkZtS2ZOeUsvNjdOdldBTGY2OE52NjlOdk54Sy8yME5meXlOUDIyTmZOMEsvSnJLdnFoTXYyek5mMjVOZjI0TmYyM05mZU9ML3l6TlB5dk5QSm9LdmlXTVBtZU1mTjFLL1dCTGZlUEwvRm5LZmVNTC9xbE12UjdMUG1jTWZlTEwvYUpMdlI1TFBGb0tmSnVLdlIzTFA2Nk52eXdOUGVOTC9WL0xmYUlMdjIxTmYyNk5mTnpLL052Sy9SNkxQbWFNZnl4TlBxZk12VitMZnVyTS9pU01QbWJNZkp2S3ZtZE1mdW1NL3FpTXZtWk1meXROUEpxS3Z5c05QTjJLL2lZTVBOd0svdXBNL0p0S3ZKc0t2aVZNUGFITHZhR0x2SnBLdlI4TFBhS0x2cWtNdnVxTS9hRkx2UjRMUHVvTS9pVE1QV0RMZmlSTVBtWU1YUzBuZ2tBQUFMb1NVUkJWSGphN2RybmN0cEFGSWJoRlVJU1NLSjNNS1lhMCt5NHhUVzk5MzcvMTVKa0pobFRqaHJTckhSbXZ1Zi9hczZMMFlMRkNnRUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU1CSjZuamVucXNwemduUHJzckdYOVpwaTJ0Q3JtbmM2K2RZTnRoVlk1V3BNbXhRTFdQZE1zT3VZVnd6TmozZWkydDNtUXdhVjQzQkpQRENTMk5iSjVhRWV1WC8rOXFjalFPdGZGSWtJa3J2WTJnNE1WY21PQnNGV2Jvd0tPL2tOeWo2MmdScEpjRGFQQmx4THIxQjB6ZEcwQy84THpiSmlKcnNodXZ5MWd6bEE5K3JEOG1Ja3V5SUpqRkUzL2Rxbll3b1NtN0lVRVBvRC93dXQ4aUlndVNJRGpsRnhlL3lmWEw1dnVTSTIxQlRaTExoWG9PSUxNTzhIeHdhL0w4YkkwTGZtVWRoR293YjJadlQwZTU3cEZORGdCMDZJbFZ5am1tSUJsMlQvbmw5Unc2U0Q5R2dTRy9RMHVRa2FXM1hobW92S1EzZUZRNE4yVW85T1ExZUZac05lcmY3dlArck80cmhtWTFMZzN2RlZvUDgrOEJYZzFzRm53Ym5DazROVGhXOEd1aUtCRGRrVlZ0VE5Gdk5lbFZzTnFUYnlXbklPTTJvZVRSb3lXdndtcEpIZy91Y1hCcmNKdVhUNER3cnB3WmkydnkwVkN4OFl0WGcvRDJiVTRPZml1UTNlRmZFMktENGJmQ3FpTE5COTkzZ1hzR2x3YTJDVDROekJhY0dJVlE2WXNpcFFkaDB4RWRPRFVLakl4clNwODhvblo4emJiRkxnMURvaUZPNUJYdkRHdjJNeTkvSmhVVDhKVVpUSTB5RGFOSExCeklidnFURE5ZaFVpVncva2RqUTFrTTJDSEZEUGpLVytLenlSVEYwZy9nYTl3OXkrZkFOUXB4dlg4Q1UrTnk3RlVXRGVGM1krZzNsUk9JZjRrMFVEWDllQ3l2TzUzMVB5WWhIZ2E5enZQWkpVNWI3M1kvZVhqOEh2OUQ0OG42SGFGNUxiY2pSdDhUWlR0ZGE1TTFEZlhuYmtYMUMwU0hDRkt6UUI1RmU4b3A0R05HTkhhdnZaRVNiVndUNXI2VzF4eXVDUEJZM1k5WWdEcXprbkgvZTNZZk56enVMMzBsMEllYnJaNWtLdHVESVh0MW44NjhFVDZrZjMvNDl0THZyQ2NaeUY4UHUyMTVkQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFjUEliTnJCaE9hQlh1Y29BQUFBQVNVVk9SSzVDWUlJPSI+CjxsaW5rIHJlbD0iYXBwbGUtdG91Y2gtaWNvbiIgaHJlZj0iZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFNUUFBQURFQ0FNQUFBRDNlSDVaQUFBQUJHZEJUVUVBQUxHUEMveGhCUUFBQUFGelVrZENBSzdPSE9rQUFBRC9VRXhVUmZGbEtmYUVMdkZtS2ZOeUsvNjdOdldBTGY2OE52NjlOdk54Sy8yME5meXlOUDIyTmZOMEsvSnJLdnFoTXYyek5mMjVOZjI0TmYyM05mZU9ML3l6TlB5dk5QSm9LdmlXTVBtZU1mTjFLL1dCTGZlUEwvRm5LZmVNTC9xbE12UjdMUG1jTWZlTEwvYUpMdlI1TFBGb0tmSnVLdlIzTFA2Nk52eXdOUGVOTC9WL0xmYUlMdjIxTmYyNk5mTnpLL052Sy9SNkxQbWFNZnl4TlBxZk12VitMZnVyTS9pU01QbWJNZkp2S3ZtZE1mdW1NL3FpTXZtWk1meXROUEpxS3Z5c05QTjJLL2lZTVBOd0svdXBNL0p0S3ZKc0t2aVZNUGFITHZhR0x2SnBLdlI4TFBhS0x2cWtNdnVxTS9hRkx2UjRMUHVvTS9pVE1QV0RMZmlSTVBtWU1YUzBuZ2tBQUFMb1NVUkJWSGphN2RybmN0cEFGSWJoRlVJU1NLSjNNS1lhMCt5NHhUVzk5MzcvMTVKa0pobFRqaHJTckhSbXZ1Zi9hczZMMFlMRkNnRUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU1CSjZuamVucXNwemduUHJzckdYOVpwaTJ0Q3JtbmM2K2RZTnRoVlk1V3BNbXhRTFdQZE1zT3VZVnd6TmozZWkydDNtUXdhVjQzQkpQRENTMk5iSjVhRWV1WC8rOXFjalFPdGZGSWtJa3J2WTJnNE1WY21PQnNGV2Jvd0tPL2tOeWo2MmdScEpjRGFQQmx4THIxQjB6ZEcwQy84THpiSmlKcnNodXZ5MWd6bEE5K3JEOG1Ja3V5SUpqRkUzL2Rxbll3b1NtN0lVRVBvRC93dXQ4aUlndVNJRGpsRnhlL3lmWEw1dnVTSTIxQlRaTExoWG9PSUxNTzhIeHdhL0w4YkkwTGZtVWRoR293YjJadlQwZTU3cEZORGdCMDZJbFZ5am1tSUJsMlQvbmw5Unc2U0Q5R2dTRy9RMHVRa2FXM1hobW92S1EzZUZRNE4yVW85T1ExZUZac05lcmY3dlArck80cmhtWTFMZzN2RlZvUDgrOEJYZzFzRm53Ym5DazROVGhXOEd1aUtCRGRrVlZ0VE5Gdk5lbFZzTnFUYnlXbklPTTJvZVRSb3lXdndtcEpIZy91Y1hCcmNKdVhUNER3cnB3WmkydnkwVkN4OFl0WGcvRDJiVTRPZml1UTNlRmZFMktENGJmQ3FpTE5COTkzZ1hzR2x3YTJDVDROekJhY0dJVlE2WXNpcFFkaDB4RWRPRFVLakl4clNwODhvblo4emJiRkxnMURvaUZPNUJYdkRHdjJNeTkvSmhVVDhKVVpUSTB5RGFOSExCeklidnFURE5ZaFVpVncva2RqUTFrTTJDSEZEUGpLVytLenlSVEYwZy9nYTl3OXkrZkFOUXB4dlg4Q1UrTnk3RlVXRGVGM1krZzNsUk9JZjRrMFVEWDllQ3l2TzUzMVB5WWhIZ2E5enZQWkpVNWI3M1kvZVhqOEh2OUQ0OG42SGFGNUxiY2pSdDhUWlR0ZGE1TTFEZlhuYmtYMUMwU0hDRkt6UUI1RmU4b3A0R05HTkhhdnZaRVNiVndUNXI2VzF4eXVDUEJZM1k5WWdEcXprbkgvZTNZZk56enVMMzBsMEllYnJaNWtLdHVESVh0MW44NjhFVDZrZjMvNDl0THZyQ2NaeUY4UHUyMTVkQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFjUEliTnJCaE9hQlh1Y29BQUFBQVNVVk9SSzVDWUlJPSI+CjxzY3JpcHQ+Ly8gQ29weXJpZ2h0IDIwMTQgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLy8KLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLy8gICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAovLwovLyBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLy8KLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQovLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAovLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLy8gICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCgohZnVuY3Rpb24oYSxiKXt2YXIgYz17fSxkPXt9LGU9e30sZj1udWxsOyFmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGMoYSl7aWYoIm51bWJlciI9PXR5cGVvZiBhKXJldHVybiBhO3ZhciBiPXt9O2Zvcih2YXIgYyBpbiBhKWJbY109YVtjXTtyZXR1cm4gYn1mdW5jdGlvbiBkKCl7dGhpcy5fZGVsYXk9MCx0aGlzLl9lbmREZWxheT0wLHRoaXMuX2ZpbGw9Im5vbmUiLHRoaXMuX2l0ZXJhdGlvblN0YXJ0PTAsdGhpcy5faXRlcmF0aW9ucz0xLHRoaXMuX2R1cmF0aW9uPTAsdGhpcy5fcGxheWJhY2tSYXRlPTEsdGhpcy5fZGlyZWN0aW9uPSJub3JtYWwiLHRoaXMuX2Vhc2luZz0ibGluZWFyIix0aGlzLl9lYXNpbmdGdW5jdGlvbj13fWZ1bmN0aW9uIGUoKXtyZXR1cm4gYS5pc0RlcHJlY2F0ZWQoIkludmFsaWQgdGltaW5nIGlucHV0cyIsIjIwMTYtMDMtMDIiLCJUeXBlRXJyb3IgZXhjZXB0aW9ucyB3aWxsIGJlIHRocm93biBpbnN0ZWFkLiIsITApfWZ1bmN0aW9uIGYoYixjLGUpe3ZhciBmPW5ldyBkO3JldHVybiBjJiYoZi5maWxsPSJib3RoIixmLmR1cmF0aW9uPSJhdXRvIiksIm51bWJlciIhPXR5cGVvZiBifHxpc05hTihiKT92b2lkIDAhPT1iJiZPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhiKS5mb3JFYWNoKGZ1bmN0aW9uKGMpe2lmKCJhdXRvIiE9YltjXSl7aWYoKCJudW1iZXIiPT10eXBlb2YgZltjXXx8ImR1cmF0aW9uIj09YykmJigibnVtYmVyIiE9dHlwZW9mIGJbY118fGlzTmFOKGJbY10pKSlyZXR1cm47aWYoImZpbGwiPT1jJiYtMT09dS5pbmRleE9mKGJbY10pKXJldHVybjtpZigiZGlyZWN0aW9uIj09YyYmLTE9PXYuaW5kZXhPZihiW2NdKSlyZXR1cm47aWYoInBsYXliYWNrUmF0ZSI9PWMmJjEhPT1iW2NdJiZhLmlzRGVwcmVjYXRlZCgiQW5pbWF0aW9uRWZmZWN0VGltaW5nLnBsYXliYWNrUmF0ZSIsIjIwMTQtMTEtMjgiLCJVc2UgQW5pbWF0aW9uLnBsYXliYWNrUmF0ZSBpbnN0ZWFkLiIpKXJldHVybjtmW2NdPWJbY119fSk6Zi5kdXJhdGlvbj1iLGZ9ZnVuY3Rpb24gZyhhKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGEmJihhPWlzTmFOKGEpP3tkdXJhdGlvbjowfTp7ZHVyYXRpb246YX0pLGF9ZnVuY3Rpb24gaChiLGMpe3JldHVybiBiPWEubnVtZXJpY1RpbWluZ1RvT2JqZWN0KGIpLGYoYixjKX1mdW5jdGlvbiBpKGEsYixjLGQpe3JldHVybiAwPmF8fGE+MXx8MD5jfHxjPjE/dzpmdW5jdGlvbihlKXtmdW5jdGlvbiBmKGEsYixjKXtyZXR1cm4gMyphKigxLWMpKigxLWMpKmMrMypiKigxLWMpKmMqYytjKmMqY31pZigwPT1lfHwxPT1lKXJldHVybiBlO2Zvcih2YXIgZz0wLGg9MTs7KXt2YXIgaT0oZytoKS8yLGo9ZihhLGMsaSk7aWYoTWF0aC5hYnMoZS1qKTwxZS00KXJldHVybiBmKGIsZCxpKTtlPmo/Zz1pOmg9aX19fWZ1bmN0aW9uIGooYSxiKXtyZXR1cm4gZnVuY3Rpb24oYyl7aWYoYz49MSlyZXR1cm4gMTt2YXIgZD0xL2E7cmV0dXJuIGMrPWIqZCxjLWMlZH19ZnVuY3Rpb24gayhhKXtCfHwoQj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKS5zdHlsZSksQi5hbmltYXRpb25UaW1pbmdGdW5jdGlvbj0iIixCLmFuaW1hdGlvblRpbWluZ0Z1bmN0aW9uPWE7dmFyIGI9Qi5hbmltYXRpb25UaW1pbmdGdW5jdGlvbjtpZigiIj09YiYmZSgpKXRocm93IG5ldyBUeXBlRXJyb3IoYSsiIGlzIG5vdCBhIHZhbGlkIHZhbHVlIGZvciBlYXNpbmciKTt2YXIgYz1ELmV4ZWMoYik7aWYoYylyZXR1cm4gaS5hcHBseSh0aGlzLGMuc2xpY2UoMSkubWFwKE51bWJlcikpO3ZhciBkPUUuZXhlYyhiKTtpZihkKXJldHVybiBqKE51bWJlcihkWzFdKSx7c3RhcnQ6eCxtaWRkbGU6eSxlbmQ6en1bZFsyXV0pO3ZhciBmPUFbYl07cmV0dXJuIGY/Zjp3fWZ1bmN0aW9uIGwoYSl7cmV0dXJuIE1hdGguYWJzKG0oYSkvYS5wbGF5YmFja1JhdGUpfWZ1bmN0aW9uIG0oYSl7cmV0dXJuIGEuZHVyYXRpb24qYS5pdGVyYXRpb25zfWZ1bmN0aW9uIG4oYSxiLGMpe3JldHVybiBudWxsPT1iP0Y6YjxjLmRlbGF5P0c6Yj49Yy5kZWxheSthP0g6SX1mdW5jdGlvbiBvKGEsYixjLGQsZSl7c3dpdGNoKGQpe2Nhc2UgRzpyZXR1cm4iYmFja3dhcmRzIj09Ynx8ImJvdGgiPT1iPzA6bnVsbDtjYXNlIEk6cmV0dXJuIGMtZTtjYXNlIEg6cmV0dXJuImZvcndhcmRzIj09Ynx8ImJvdGgiPT1iP2E6bnVsbDtjYXNlIEY6cmV0dXJuIG51bGx9fWZ1bmN0aW9uIHAoYSxiLGMsZCl7cmV0dXJuKGQucGxheWJhY2tSYXRlPDA/Yi1hOmIpKmQucGxheWJhY2tSYXRlK2N9ZnVuY3Rpb24gcShhLGIsYyxkLGUpe3JldHVybiBjPT09MS8wfHxjPT09LSgxLzApfHxjLWQ9PWImJmUuaXRlcmF0aW9ucyYmKGUuaXRlcmF0aW9ucytlLml0ZXJhdGlvblN0YXJ0KSUxPT0wP2E6YyVhfWZ1bmN0aW9uIHIoYSxiLGMsZCl7cmV0dXJuIDA9PT1jPzA6Yj09YT9kLml0ZXJhdGlvblN0YXJ0K2QuaXRlcmF0aW9ucy0xOk1hdGguZmxvb3IoYy9hKX1mdW5jdGlvbiBzKGEsYixjLGQpe3ZhciBlPWElMj49MSxmPSJub3JtYWwiPT1kLmRpcmVjdGlvbnx8ZC5kaXJlY3Rpb249PShlPyJhbHRlcm5hdGUtcmV2ZXJzZSI6ImFsdGVybmF0ZSIpLGc9Zj9jOmItYyxoPWcvYjtyZXR1cm4gYipkLl9lYXNpbmdGdW5jdGlvbihoKX1mdW5jdGlvbiB0KGEsYixjKXt2YXIgZD1uKGEsYixjKSxlPW8oYSxjLmZpbGwsYixkLGMuZGVsYXkpO2lmKG51bGw9PT1lKXJldHVybiBudWxsO2lmKDA9PT1hKXJldHVybiBkPT09Rz8wOjE7dmFyIGY9Yy5pdGVyYXRpb25TdGFydCpjLmR1cmF0aW9uLGc9cChhLGUsZixjKSxoPXEoYy5kdXJhdGlvbixtKGMpLGcsZixjKSxpPXIoYy5kdXJhdGlvbixoLGcsYyk7cmV0dXJuIHMoaSxjLmR1cmF0aW9uLGgsYykvYy5kdXJhdGlvbn12YXIgdT0iYmFja3dhcmRzfGZvcndhcmRzfGJvdGh8bm9uZSIuc3BsaXQoInwiKSx2PSJyZXZlcnNlfGFsdGVybmF0ZXxhbHRlcm5hdGUtcmV2ZXJzZSIuc3BsaXQoInwiKSx3PWZ1bmN0aW9uKGEpe3JldHVybiBhfTtkLnByb3RvdHlwZT17X3NldE1lbWJlcjpmdW5jdGlvbihiLGMpe3RoaXNbIl8iK2JdPWMsdGhpcy5fZWZmZWN0JiYodGhpcy5fZWZmZWN0Ll90aW1pbmdJbnB1dFtiXT1jLHRoaXMuX2VmZmVjdC5fdGltaW5nPWEubm9ybWFsaXplVGltaW5nSW5wdXQodGhpcy5fZWZmZWN0Ll90aW1pbmdJbnB1dCksdGhpcy5fZWZmZWN0LmFjdGl2ZUR1cmF0aW9uPWEuY2FsY3VsYXRlQWN0aXZlRHVyYXRpb24odGhpcy5fZWZmZWN0Ll90aW1pbmcpLHRoaXMuX2VmZmVjdC5fYW5pbWF0aW9uJiZ0aGlzLl9lZmZlY3QuX2FuaW1hdGlvbi5fcmVidWlsZFVuZGVybHlpbmdBbmltYXRpb24oKSl9LGdldCBwbGF5YmFja1JhdGUoKXtyZXR1cm4gdGhpcy5fcGxheWJhY2tSYXRlfSxzZXQgZGVsYXkoYSl7dGhpcy5fc2V0TWVtYmVyKCJkZWxheSIsYSl9LGdldCBkZWxheSgpe3JldHVybiB0aGlzLl9kZWxheX0sc2V0IGVuZERlbGF5KGEpe3RoaXMuX3NldE1lbWJlcigiZW5kRGVsYXkiLGEpfSxnZXQgZW5kRGVsYXkoKXtyZXR1cm4gdGhpcy5fZW5kRGVsYXl9LHNldCBmaWxsKGEpe3RoaXMuX3NldE1lbWJlcigiZmlsbCIsYSl9LGdldCBmaWxsKCl7cmV0dXJuIHRoaXMuX2ZpbGx9LHNldCBpdGVyYXRpb25TdGFydChhKXtpZigoaXNOYU4oYSl8fDA+YSkmJmUoKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJpdGVyYXRpb25TdGFydCBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIG51bWJlciwgcmVjZWl2ZWQ6ICIrdGltaW5nLml0ZXJhdGlvblN0YXJ0KTt0aGlzLl9zZXRNZW1iZXIoIml0ZXJhdGlvblN0YXJ0IixhKX0sZ2V0IGl0ZXJhdGlvblN0YXJ0KCl7cmV0dXJuIHRoaXMuX2l0ZXJhdGlvblN0YXJ0fSxzZXQgZHVyYXRpb24oYSl7aWYoImF1dG8iIT1hJiYoaXNOYU4oYSl8fDA+YSkmJmUoKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJkdXJhdGlvbiBtdXN0IGJlIG5vbi1uZWdhdGl2ZSBvciBhdXRvLCByZWNlaXZlZDogIithKTt0aGlzLl9zZXRNZW1iZXIoImR1cmF0aW9uIixhKX0sZ2V0IGR1cmF0aW9uKCl7cmV0dXJuIHRoaXMuX2R1cmF0aW9ufSxzZXQgZGlyZWN0aW9uKGEpe3RoaXMuX3NldE1lbWJlcigiZGlyZWN0aW9uIixhKX0sZ2V0IGRpcmVjdGlvbigpe3JldHVybiB0aGlzLl9kaXJlY3Rpb259LHNldCBlYXNpbmcoYSl7dGhpcy5fZWFzaW5nRnVuY3Rpb249ayhhKSx0aGlzLl9zZXRNZW1iZXIoImVhc2luZyIsYSl9LGdldCBlYXNpbmcoKXtyZXR1cm4gdGhpcy5fZWFzaW5nfSxzZXQgaXRlcmF0aW9ucyhhKXtpZigoaXNOYU4oYSl8fDA+YSkmJmUoKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJpdGVyYXRpb25zIG11c3QgYmUgbm9uLW5lZ2F0aXZlLCByZWNlaXZlZDogIithKTt0aGlzLl9zZXRNZW1iZXIoIml0ZXJhdGlvbnMiLGEpfSxnZXQgaXRlcmF0aW9ucygpe3JldHVybiB0aGlzLl9pdGVyYXRpb25zfX07dmFyIHg9MSx5PS41LHo9MCxBPXtlYXNlOmkoLjI1LC4xLC4yNSwxKSwiZWFzZS1pbiI6aSguNDIsMCwxLDEpLCJlYXNlLW91dCI6aSgwLDAsLjU4LDEpLCJlYXNlLWluLW91dCI6aSguNDIsMCwuNTgsMSksInN0ZXAtc3RhcnQiOmooMSx4KSwic3RlcC1taWRkbGUiOmooMSx5KSwic3RlcC1lbmQiOmooMSx6KX0sQj1udWxsLEM9IlxccyooLT9cXGQrXFwuP1xcZCp8LT9cXC5cXGQrKVxccyoiLEQ9bmV3IFJlZ0V4cCgiY3ViaWMtYmV6aWVyXFwoIitDKyIsIitDKyIsIitDKyIsIitDKyJcXCkiKSxFPS9zdGVwc1woXHMqKFxkKylccyosXHMqKHN0YXJ0fG1pZGRsZXxlbmQpXHMqXCkvLEY9MCxHPTEsSD0yLEk9MzthLmNsb25lVGltaW5nSW5wdXQ9YyxhLm1ha2VUaW1pbmc9ZixhLm51bWVyaWNUaW1pbmdUb09iamVjdD1nLGEubm9ybWFsaXplVGltaW5nSW5wdXQ9aCxhLmNhbGN1bGF0ZUFjdGl2ZUR1cmF0aW9uPWwsYS5jYWxjdWxhdGVUaW1lRnJhY3Rpb249dCxhLmNhbGN1bGF0ZVBoYXNlPW4sYS50b1RpbWluZ0Z1bmN0aW9uPWt9KGMsZiksZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjKGEsYil7cmV0dXJuIGEgaW4gaj9qW2FdW2JdfHxiOmJ9ZnVuY3Rpb24gZChhLGIsZCl7dmFyIGU9Z1thXTtpZihlKXtoLnN0eWxlW2FdPWI7Zm9yKHZhciBmIGluIGUpe3ZhciBpPWVbZl0saj1oLnN0eWxlW2ldO2RbaV09YyhpLGopfX1lbHNlIGRbYV09YyhhLGIpfWZ1bmN0aW9uIGUoYSl7dmFyIGI9W107Zm9yKHZhciBjIGluIGEpaWYoIShjIGluWyJlYXNpbmciLCJvZmZzZXQiLCJjb21wb3NpdGUiXSkpe3ZhciBkPWFbY107QXJyYXkuaXNBcnJheShkKXx8KGQ9W2RdKTtmb3IodmFyIGUsZj1kLmxlbmd0aCxnPTA7Zj5nO2crKyllPXt9LCJvZmZzZXQiaW4gYT9lLm9mZnNldD1hLm9mZnNldDoxPT1mP2Uub2Zmc2V0PTE6ZS5vZmZzZXQ9Zy8oZi0xKSwiZWFzaW5nImluIGEmJihlLmVhc2luZz1hLmVhc2luZyksImNvbXBvc2l0ZSJpbiBhJiYoZS5jb21wb3NpdGU9YS5jb21wb3NpdGUpLGVbY109ZFtnXSxiLnB1c2goZSl9cmV0dXJuIGIuc29ydChmdW5jdGlvbihhLGIpe3JldHVybiBhLm9mZnNldC1iLm9mZnNldH0pLGJ9ZnVuY3Rpb24gZihhKXtmdW5jdGlvbiBiKCl7dmFyIGE9Yy5sZW5ndGg7bnVsbD09Y1thLTFdLm9mZnNldCYmKGNbYS0xXS5vZmZzZXQ9MSksYT4xJiZudWxsPT1jWzBdLm9mZnNldCYmKGNbMF0ub2Zmc2V0PTApO2Zvcih2YXIgYj0wLGQ9Y1swXS5vZmZzZXQsZT0xO2E+ZTtlKyspe3ZhciBmPWNbZV0ub2Zmc2V0O2lmKG51bGwhPWYpe2Zvcih2YXIgZz0xO2UtYj5nO2crKyljW2IrZ10ub2Zmc2V0PWQrKGYtZCkqZy8oZS1iKTtiPWUsZD1mfX19aWYobnVsbD09YSlyZXR1cm5bXTt3aW5kb3cuU3ltYm9sJiZTeW1ib2wuaXRlcmF0b3ImJkFycmF5LnByb3RvdHlwZS5mcm9tJiZhW1N5bWJvbC5pdGVyYXRvcl0mJihhPUFycmF5LmZyb20oYSkpLEFycmF5LmlzQXJyYXkoYSl8fChhPWUoYSkpO2Zvcih2YXIgYz1hLm1hcChmdW5jdGlvbihhKXt2YXIgYj17fTtmb3IodmFyIGMgaW4gYSl7dmFyIGU9YVtjXTtpZigib2Zmc2V0Ij09Yyl7aWYobnVsbCE9ZSYmKGU9TnVtYmVyKGUpLCFpc0Zpbml0ZShlKSkpdGhyb3cgbmV3IFR5cGVFcnJvcigia2V5ZnJhbWUgb2Zmc2V0cyBtdXN0IGJlIG51bWJlcnMuIil9ZWxzZXtpZigiY29tcG9zaXRlIj09Yyl0aHJvd3t0eXBlOkRPTUV4Y2VwdGlvbi5OT1RfU1VQUE9SVEVEX0VSUixuYW1lOiJOb3RTdXBwb3J0ZWRFcnJvciIsbWVzc2FnZToiYWRkIGNvbXBvc2l0aW5nIGlzIG5vdCBzdXBwb3J0ZWQifTtlPSIiK2V9ZChjLGUsYil9cmV0dXJuIHZvaWQgMD09Yi5vZmZzZXQmJihiLm9mZnNldD1udWxsKSxifSksZj0hMCxnPS0oMS8wKSxoPTA7aDxjLmxlbmd0aDtoKyspe3ZhciBpPWNbaF0ub2Zmc2V0O2lmKG51bGwhPWkpe2lmKGc+aSl0aHJvd3tjb2RlOkRPTUV4Y2VwdGlvbi5JTlZBTElEX01PRElGSUNBVElPTl9FUlIsbmFtZToiSW52YWxpZE1vZGlmaWNhdGlvbkVycm9yIixtZXNzYWdlOiJLZXlmcmFtZXMgYXJlIG5vdCBsb29zZWx5IHNvcnRlZCBieSBvZmZzZXQuIFNvcnQgb3Igc3BlY2lmeSBvZmZzZXRzLiJ9O2c9aX1lbHNlIGY9ITF9cmV0dXJuIGM9Yy5maWx0ZXIoZnVuY3Rpb24oYSl7cmV0dXJuIGEub2Zmc2V0Pj0wJiZhLm9mZnNldDw9MX0pLGZ8fGIoKSxjfXZhciBnPXtiYWNrZ3JvdW5kOlsiYmFja2dyb3VuZEltYWdlIiwiYmFja2dyb3VuZFBvc2l0aW9uIiwiYmFja2dyb3VuZFNpemUiLCJiYWNrZ3JvdW5kUmVwZWF0IiwiYmFja2dyb3VuZEF0dGFjaG1lbnQiLCJiYWNrZ3JvdW5kT3JpZ2luIiwiYmFja2dyb3VuZENsaXAiLCJiYWNrZ3JvdW5kQ29sb3IiXSxib3JkZXI6WyJib3JkZXJUb3BDb2xvciIsImJvcmRlclRvcFN0eWxlIiwiYm9yZGVyVG9wV2lkdGgiLCJib3JkZXJSaWdodENvbG9yIiwiYm9yZGVyUmlnaHRTdHlsZSIsImJvcmRlclJpZ2h0V2lkdGgiLCJib3JkZXJCb3R0b21Db2xvciIsImJvcmRlckJvdHRvbVN0eWxlIiwiYm9yZGVyQm90dG9tV2lkdGgiLCJib3JkZXJMZWZ0Q29sb3IiLCJib3JkZXJMZWZ0U3R5bGUiLCJib3JkZXJMZWZ0V2lkdGgiXSxib3JkZXJCb3R0b206WyJib3JkZXJCb3R0b21XaWR0aCIsImJvcmRlckJvdHRvbVN0eWxlIiwiYm9yZGVyQm90dG9tQ29sb3IiXSxib3JkZXJDb2xvcjpbImJvcmRlclRvcENvbG9yIiwiYm9yZGVyUmlnaHRDb2xvciIsImJvcmRlckJvdHRvbUNvbG9yIiwiYm9yZGVyTGVmdENvbG9yIl0sYm9yZGVyTGVmdDpbImJvcmRlckxlZnRXaWR0aCIsImJvcmRlckxlZnRTdHlsZSIsImJvcmRlckxlZnRDb2xvciJdLGJvcmRlclJhZGl1czpbImJvcmRlclRvcExlZnRSYWRpdXMiLCJib3JkZXJUb3BSaWdodFJhZGl1cyIsImJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzIiwiYm9yZGVyQm90dG9tTGVmdFJhZGl1cyJdLGJvcmRlclJpZ2h0OlsiYm9yZGVyUmlnaHRXaWR0aCIsImJvcmRlclJpZ2h0U3R5bGUiLCJib3JkZXJSaWdodENvbG9yIl0sYm9yZGVyVG9wOlsiYm9yZGVyVG9wV2lkdGgiLCJib3JkZXJUb3BTdHlsZSIsImJvcmRlclRvcENvbG9yIl0sYm9yZGVyV2lkdGg6WyJib3JkZXJUb3BXaWR0aCIsImJvcmRlclJpZ2h0V2lkdGgiLCJib3JkZXJCb3R0b21XaWR0aCIsImJvcmRlckxlZnRXaWR0aCJdLGZsZXg6WyJmbGV4R3JvdyIsImZsZXhTaHJpbmsiLCJmbGV4QmFzaXMiXSxmb250OlsiZm9udEZhbWlseSIsImZvbnRTaXplIiwiZm9udFN0eWxlIiwiZm9udFZhcmlhbnQiLCJmb250V2VpZ2h0IiwibGluZUhlaWdodCJdLG1hcmdpbjpbIm1hcmdpblRvcCIsIm1hcmdpblJpZ2h0IiwibWFyZ2luQm90dG9tIiwibWFyZ2luTGVmdCJdLG91dGxpbmU6WyJvdXRsaW5lQ29sb3IiLCJvdXRsaW5lU3R5bGUiLCJvdXRsaW5lV2lkdGgiXSxwYWRkaW5nOlsicGFkZGluZ1RvcCIsInBhZGRpbmdSaWdodCIsInBhZGRpbmdCb3R0b20iLCJwYWRkaW5nTGVmdCJdfSxoPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIsImRpdiIpLGk9e3RoaW46IjFweCIsbWVkaXVtOiIzcHgiLHRoaWNrOiI1cHgifSxqPXtib3JkZXJCb3R0b21XaWR0aDppLGJvcmRlckxlZnRXaWR0aDppLGJvcmRlclJpZ2h0V2lkdGg6aSxib3JkZXJUb3BXaWR0aDppLGZvbnRTaXplOnsieHgtc21hbGwiOiI2MCUiLCJ4LXNtYWxsIjoiNzUlIixzbWFsbDoiODklIixtZWRpdW06IjEwMCUiLGxhcmdlOiIxMjAlIiwieC1sYXJnZSI6IjE1MCUiLCJ4eC1sYXJnZSI6IjIwMCUifSxmb250V2VpZ2h0Ontub3JtYWw6IjQwMCIsYm9sZDoiNzAwIn0sb3V0bGluZVdpZHRoOmksdGV4dFNoYWRvdzp7bm9uZToiMHB4IDBweCAwcHggdHJhbnNwYXJlbnQifSxib3hTaGFkb3c6e25vbmU6IjBweCAwcHggMHB4IDBweCB0cmFuc3BhcmVudCJ9fTthLmNvbnZlcnRUb0FycmF5Rm9ybT1lLGEubm9ybWFsaXplS2V5ZnJhbWVzPWZ9KGMsZiksZnVuY3Rpb24oYSl7dmFyIGI9e307YS5pc0RlcHJlY2F0ZWQ9ZnVuY3Rpb24oYSxjLGQsZSl7dmFyIGY9ZT8iYXJlIjoiaXMiLGc9bmV3IERhdGUsaD1uZXcgRGF0ZShjKTtyZXR1cm4gaC5zZXRNb250aChoLmdldE1vbnRoKCkrMyksaD5nPyhhIGluIGJ8fGNvbnNvbGUud2FybigiV2ViIEFuaW1hdGlvbnM6ICIrYSsiICIrZisiIGRlcHJlY2F0ZWQgYW5kIHdpbGwgc3RvcCB3b3JraW5nIG9uICIraC50b0RhdGVTdHJpbmcoKSsiLiAiK2QpLGJbYV09ITAsITEpOiEwfSxhLmRlcHJlY2F0ZWQ9ZnVuY3Rpb24oYixjLGQsZSl7dmFyIGY9ZT8iYXJlIjoiaXMiO2lmKGEuaXNEZXByZWNhdGVkKGIsYyxkLGUpKXRocm93IG5ldyBFcnJvcihiKyIgIitmKyIgbm8gbG9uZ2VyIHN1cHBvcnRlZC4gIitkKX19KGMpLGZ1bmN0aW9uKCl7aWYoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmFuaW1hdGUpe3ZhciBhPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5hbmltYXRlKFtdLDApLGI9ITA7aWYoYSYmKGI9ITEsInBsYXl8Y3VycmVudFRpbWV8cGF1c2V8cmV2ZXJzZXxwbGF5YmFja1JhdGV8Y2FuY2VsfGZpbmlzaHxzdGFydFRpbWV8cGxheVN0YXRlIi5zcGxpdCgifCIpLmZvckVhY2goZnVuY3Rpb24oYyl7dm9pZCAwPT09YVtjXSYmKGI9ITApfSkpLCFiKXJldHVybn0hZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIGQoYSl7Zm9yKHZhciBiPXt9LGM9MDtjPGEubGVuZ3RoO2MrKylmb3IodmFyIGQgaW4gYVtjXSlpZigib2Zmc2V0IiE9ZCYmImVhc2luZyIhPWQmJiJjb21wb3NpdGUiIT1kKXt2YXIgZT17b2Zmc2V0OmFbY10ub2Zmc2V0LGVhc2luZzphW2NdLmVhc2luZyx2YWx1ZTphW2NdW2RdfTtiW2RdPWJbZF18fFtdLGJbZF0ucHVzaChlKX1mb3IodmFyIGYgaW4gYil7dmFyIGc9YltmXTtpZigwIT1nWzBdLm9mZnNldHx8MSE9Z1tnLmxlbmd0aC0xXS5vZmZzZXQpdGhyb3d7dHlwZTpET01FeGNlcHRpb24uTk9UX1NVUFBPUlRFRF9FUlIsbmFtZToiTm90U3VwcG9ydGVkRXJyb3IiLG1lc3NhZ2U6IlBhcnRpYWwga2V5ZnJhbWVzIGFyZSBub3Qgc3VwcG9ydGVkIn19cmV0dXJuIGJ9ZnVuY3Rpb24gZShjKXt2YXIgZD1bXTtmb3IodmFyIGUgaW4gYylmb3IodmFyIGY9Y1tlXSxnPTA7ZzxmLmxlbmd0aC0xO2crKyl7dmFyIGg9ZltnXS5vZmZzZXQsaT1mW2crMV0ub2Zmc2V0LGo9ZltnXS52YWx1ZSxrPWZbZysxXS52YWx1ZSxsPWZbZ10uZWFzaW5nO2g9PWkmJigxPT1pP2o9azprPWopLGQucHVzaCh7c3RhcnRUaW1lOmgsZW5kVGltZTppLGVhc2luZzphLnRvVGltaW5nRnVuY3Rpb24obD9sOiJsaW5lYXIiKSxwcm9wZXJ0eTplLGludGVycG9sYXRpb246Yi5wcm9wZXJ0eUludGVycG9sYXRpb24oZSxqLGspfSl9cmV0dXJuIGQuc29ydChmdW5jdGlvbihhLGIpe3JldHVybiBhLnN0YXJ0VGltZS1iLnN0YXJ0VGltZX0pLGR9Yi5jb252ZXJ0RWZmZWN0SW5wdXQ9ZnVuY3Rpb24oYyl7dmFyIGY9YS5ub3JtYWxpemVLZXlmcmFtZXMoYyksZz1kKGYpLGg9ZShnKTtyZXR1cm4gZnVuY3Rpb24oYSxjKXtpZihudWxsIT1jKWguZmlsdGVyKGZ1bmN0aW9uKGEpe3JldHVybiAwPj1jJiYwPT1hLnN0YXJ0VGltZXx8Yz49MSYmMT09YS5lbmRUaW1lfHxjPj1hLnN0YXJ0VGltZSYmYzw9YS5lbmRUaW1lfSkuZm9yRWFjaChmdW5jdGlvbihkKXt2YXIgZT1jLWQuc3RhcnRUaW1lLGY9ZC5lbmRUaW1lLWQuc3RhcnRUaW1lLGc9MD09Zj8wOmQuZWFzaW5nKGUvZik7Yi5hcHBseShhLGQucHJvcGVydHksZC5pbnRlcnBvbGF0aW9uKGcpKX0pO2Vsc2UgZm9yKHZhciBkIGluIGcpIm9mZnNldCIhPWQmJiJlYXNpbmciIT1kJiYiY29tcG9zaXRlIiE9ZCYmYi5jbGVhcihhLGQpfX19KGMsZCxmKSxmdW5jdGlvbihhLGIsYyl7ZnVuY3Rpb24gZChhKXtyZXR1cm4gYS5yZXBsYWNlKC8tKC4pL2csZnVuY3Rpb24oYSxiKXtyZXR1cm4gYi50b1VwcGVyQ2FzZSgpfSl9ZnVuY3Rpb24gZShhLGIsYyl7aFtjXT1oW2NdfHxbXSxoW2NdLnB1c2goW2EsYl0pfWZ1bmN0aW9uIGYoYSxiLGMpe2Zvcih2YXIgZj0wO2Y8Yy5sZW5ndGg7ZisrKXt2YXIgZz1jW2ZdO2UoYSxiLGQoZykpfX1mdW5jdGlvbiBnKGMsZSxmKXt2YXIgZz1jOy8tLy50ZXN0KGMpJiYhYS5pc0RlcHJlY2F0ZWQoIkh5cGhlbmF0ZWQgcHJvcGVydHkgbmFtZXMiLCIyMDE2LTAzLTIyIiwiVXNlIGNhbWVsQ2FzZSBpbnN0ZWFkLiIsITApJiYoZz1kKGMpKSwiaW5pdGlhbCIhPWUmJiJpbml0aWFsIiE9Znx8KCJpbml0aWFsIj09ZSYmKGU9aVtnXSksImluaXRpYWwiPT1mJiYoZj1pW2ddKSk7Zm9yKHZhciBqPWU9PWY/W106aFtnXSxrPTA7aiYmazxqLmxlbmd0aDtrKyspe3ZhciBsPWpba11bMF0oZSksbT1qW2tdWzBdKGYpO2lmKHZvaWQgMCE9PWwmJnZvaWQgMCE9PW0pe3ZhciBuPWpba11bMV0obCxtKTtpZihuKXt2YXIgbz1iLkludGVycG9sYXRpb24uYXBwbHkobnVsbCxuKTtyZXR1cm4gZnVuY3Rpb24oYSl7cmV0dXJuIDA9PWE/ZToxPT1hP2Y6byhhKX19fX1yZXR1cm4gYi5JbnRlcnBvbGF0aW9uKCExLCEwLGZ1bmN0aW9uKGEpe3JldHVybiBhP2Y6ZX0pfXZhciBoPXt9O2IuYWRkUHJvcGVydGllc0hhbmRsZXI9Zjt2YXIgaT17YmFja2dyb3VuZENvbG9yOiJ0cmFuc3BhcmVudCIsYmFja2dyb3VuZFBvc2l0aW9uOiIwJSAwJSIsYm9yZGVyQm90dG9tQ29sb3I6ImN1cnJlbnRDb2xvciIsYm9yZGVyQm90dG9tTGVmdFJhZGl1czoiMHB4Iixib3JkZXJCb3R0b21SaWdodFJhZGl1czoiMHB4Iixib3JkZXJCb3R0b21XaWR0aDoiM3B4Iixib3JkZXJMZWZ0Q29sb3I6ImN1cnJlbnRDb2xvciIsYm9yZGVyTGVmdFdpZHRoOiIzcHgiLGJvcmRlclJpZ2h0Q29sb3I6ImN1cnJlbnRDb2xvciIsYm9yZGVyUmlnaHRXaWR0aDoiM3B4Iixib3JkZXJTcGFjaW5nOiIycHgiLGJvcmRlclRvcENvbG9yOiJjdXJyZW50Q29sb3IiLGJvcmRlclRvcExlZnRSYWRpdXM6IjBweCIsYm9yZGVyVG9wUmlnaHRSYWRpdXM6IjBweCIsYm9yZGVyVG9wV2lkdGg6IjNweCIsYm90dG9tOiJhdXRvIixjbGlwOiJyZWN0KDBweCwgMHB4LCAwcHgsIDBweCkiLGNvbG9yOiJibGFjayIsZm9udFNpemU6IjEwMCUiLGZvbnRXZWlnaHQ6IjQwMCIsaGVpZ2h0OiJhdXRvIixsZWZ0OiJhdXRvIixsZXR0ZXJTcGFjaW5nOiJub3JtYWwiLGxpbmVIZWlnaHQ6IjEyMCUiLG1hcmdpbkJvdHRvbToiMHB4IixtYXJnaW5MZWZ0OiIwcHgiLG1hcmdpblJpZ2h0OiIwcHgiLG1hcmdpblRvcDoiMHB4IixtYXhIZWlnaHQ6Im5vbmUiLG1heFdpZHRoOiJub25lIixtaW5IZWlnaHQ6IjBweCIsbWluV2lkdGg6IjBweCIsb3BhY2l0eToiMS4wIixvdXRsaW5lQ29sb3I6ImludmVydCIsb3V0bGluZU9mZnNldDoiMHB4IixvdXRsaW5lV2lkdGg6IjNweCIscGFkZGluZ0JvdHRvbToiMHB4IixwYWRkaW5nTGVmdDoiMHB4IixwYWRkaW5nUmlnaHQ6IjBweCIscGFkZGluZ1RvcDoiMHB4IixyaWdodDoiYXV0byIsdGV4dEluZGVudDoiMHB4Iix0ZXh0U2hhZG93OiIwcHggMHB4IDBweCB0cmFuc3BhcmVudCIsdG9wOiJhdXRvIix0cmFuc2Zvcm06IiIsdmVydGljYWxBbGlnbjoiMHB4Iix2aXNpYmlsaXR5OiJ2aXNpYmxlIix3aWR0aDoiYXV0byIsd29yZFNwYWNpbmc6Im5vcm1hbCIsekluZGV4OiJhdXRvIn07Yi5wcm9wZXJ0eUludGVycG9sYXRpb249Z30oYyxkLGYpLGZ1bmN0aW9uKGEsYixjKXtmdW5jdGlvbiBkKGIpe3ZhciBjPWEuY2FsY3VsYXRlQWN0aXZlRHVyYXRpb24oYiksZD1mdW5jdGlvbihkKXtyZXR1cm4gYS5jYWxjdWxhdGVUaW1lRnJhY3Rpb24oYyxkLGIpfTtyZXR1cm4gZC5fdG90YWxEdXJhdGlvbj1iLmRlbGF5K2MrYi5lbmREZWxheSxkLl9pc0N1cnJlbnQ9ZnVuY3Rpb24oZCl7dmFyIGU9YS5jYWxjdWxhdGVQaGFzZShjLGQsYik7cmV0dXJuIGU9PT1QaGFzZUFjdGl2ZXx8ZT09PVBoYXNlQmVmb3JlfSxkfWIuS2V5ZnJhbWVFZmZlY3Q9ZnVuY3Rpb24oYyxlLGYsZyl7dmFyIGgsaT1kKGEubm9ybWFsaXplVGltaW5nSW5wdXQoZikpLGo9Yi5jb252ZXJ0RWZmZWN0SW5wdXQoZSksaz1mdW5jdGlvbigpe2ooYyxoKX07cmV0dXJuIGsuX3VwZGF0ZT1mdW5jdGlvbihhKXtyZXR1cm4gaD1pKGEpLG51bGwhPT1ofSxrLl9jbGVhcj1mdW5jdGlvbigpe2ooYyxudWxsKX0say5faGFzU2FtZVRhcmdldD1mdW5jdGlvbihhKXtyZXR1cm4gYz09PWF9LGsuX2lzQ3VycmVudD1pLl9pc0N1cnJlbnQsay5fdG90YWxEdXJhdGlvbj1pLl90b3RhbER1cmF0aW9uLGsuX2lkPWcsa30sYi5OdWxsRWZmZWN0PWZ1bmN0aW9uKGEpe3ZhciBiPWZ1bmN0aW9uKCl7YSYmKGEoKSxhPW51bGwpfTtyZXR1cm4gYi5fdXBkYXRlPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LGIuX3RvdGFsRHVyYXRpb249MCxiLl9pc0N1cnJlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sYi5faGFzU2FtZVRhcmdldD1mdW5jdGlvbigpe3JldHVybiExfSxifX0oYyxkLGYpLGZ1bmN0aW9uKGEsYil7YS5hcHBseT1mdW5jdGlvbihiLGMsZCl7Yi5zdHlsZVthLnByb3BlcnR5TmFtZShjKV09ZH0sYS5jbGVhcj1mdW5jdGlvbihiLGMpe2Iuc3R5bGVbYS5wcm9wZXJ0eU5hbWUoYyldPSIifX0oZCxmKSxmdW5jdGlvbihhKXt3aW5kb3cuRWxlbWVudC5wcm90b3R5cGUuYW5pbWF0ZT1mdW5jdGlvbihiLGMpe3ZhciBkPSIiO3JldHVybiBjJiZjLmlkJiYoZD1jLmlkKSxhLnRpbWVsaW5lLl9wbGF5KGEuS2V5ZnJhbWVFZmZlY3QodGhpcyxiLGMsZCkpfX0oZCksZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjKGEsYixkKXtpZigibnVtYmVyIj09dHlwZW9mIGEmJiJudW1iZXIiPT10eXBlb2YgYilyZXR1cm4gYSooMS1kKStiKmQ7aWYoImJvb2xlYW4iPT10eXBlb2YgYSYmImJvb2xlYW4iPT10eXBlb2YgYilyZXR1cm4uNT5kP2E6YjtpZihhLmxlbmd0aD09Yi5sZW5ndGgpe2Zvcih2YXIgZT1bXSxmPTA7ZjxhLmxlbmd0aDtmKyspZS5wdXNoKGMoYVtmXSxiW2ZdLGQpKTtyZXR1cm4gZX10aHJvdyJNaXNtYXRjaGVkIGludGVycG9sYXRpb24gYXJndW1lbnRzICIrYSsiOiIrYn1hLkludGVycG9sYXRpb249ZnVuY3Rpb24oYSxiLGQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZChjKGEsYixlKSl9fX0oZCxmKSxmdW5jdGlvbihhLGIsYyl7YS5zZXF1ZW5jZU51bWJlcj0wO3ZhciBkPWZ1bmN0aW9uKGEsYixjKXt0aGlzLnRhcmdldD1hLHRoaXMuY3VycmVudFRpbWU9Yix0aGlzLnRpbWVsaW5lVGltZT1jLHRoaXMudHlwZT0iZmluaXNoIix0aGlzLmJ1YmJsZXM9ITEsdGhpcy5jYW5jZWxhYmxlPSExLHRoaXMuY3VycmVudFRhcmdldD1hLHRoaXMuZGVmYXVsdFByZXZlbnRlZD0hMSx0aGlzLmV2ZW50UGhhc2U9RXZlbnQuQVRfVEFSR0VULHRoaXMudGltZVN0YW1wPURhdGUubm93KCl9O2IuQW5pbWF0aW9uPWZ1bmN0aW9uKGIpe3RoaXMuaWQ9IiIsYiYmYi5faWQmJih0aGlzLmlkPWIuX2lkKSx0aGlzLl9zZXF1ZW5jZU51bWJlcj1hLnNlcXVlbmNlTnVtYmVyKyssdGhpcy5fY3VycmVudFRpbWU9MCx0aGlzLl9zdGFydFRpbWU9bnVsbCx0aGlzLl9wYXVzZWQ9ITEsdGhpcy5fcGxheWJhY2tSYXRlPTEsdGhpcy5faW5UaW1lbGluZT0hMCx0aGlzLl9maW5pc2hlZEZsYWc9ITAsdGhpcy5vbmZpbmlzaD1udWxsLHRoaXMuX2ZpbmlzaEhhbmRsZXJzPVtdLHRoaXMuX2VmZmVjdD1iLHRoaXMuX2luRWZmZWN0PXRoaXMuX2VmZmVjdC5fdXBkYXRlKDApLHRoaXMuX2lkbGU9ITAsdGhpcy5fY3VycmVudFRpbWVQZW5kaW5nPSExfSxiLkFuaW1hdGlvbi5wcm90b3R5cGU9e19lbnN1cmVBbGl2ZTpmdW5jdGlvbigpe3RoaXMucGxheWJhY2tSYXRlPDAmJjA9PT10aGlzLmN1cnJlbnRUaW1lP3RoaXMuX2luRWZmZWN0PXRoaXMuX2VmZmVjdC5fdXBkYXRlKC0xKTp0aGlzLl9pbkVmZmVjdD10aGlzLl9lZmZlY3QuX3VwZGF0ZSh0aGlzLmN1cnJlbnRUaW1lKSx0aGlzLl9pblRpbWVsaW5lfHwhdGhpcy5faW5FZmZlY3QmJnRoaXMuX2ZpbmlzaGVkRmxhZ3x8KHRoaXMuX2luVGltZWxpbmU9ITAsYi50aW1lbGluZS5fYW5pbWF0aW9ucy5wdXNoKHRoaXMpKX0sX3RpY2tDdXJyZW50VGltZTpmdW5jdGlvbihhLGIpe2EhPXRoaXMuX2N1cnJlbnRUaW1lJiYodGhpcy5fY3VycmVudFRpbWU9YSx0aGlzLl9pc0ZpbmlzaGVkJiYhYiYmKHRoaXMuX2N1cnJlbnRUaW1lPXRoaXMuX3BsYXliYWNrUmF0ZT4wP3RoaXMuX3RvdGFsRHVyYXRpb246MCksdGhpcy5fZW5zdXJlQWxpdmUoKSl9LGdldCBjdXJyZW50VGltZSgpe3JldHVybiB0aGlzLl9pZGxlfHx0aGlzLl9jdXJyZW50VGltZVBlbmRpbmc/bnVsbDp0aGlzLl9jdXJyZW50VGltZX0sc2V0IGN1cnJlbnRUaW1lKGEpe2E9K2EsaXNOYU4oYSl8fChiLnJlc3RhcnQoKSx0aGlzLl9wYXVzZWR8fG51bGw9PXRoaXMuX3N0YXJ0VGltZXx8KHRoaXMuX3N0YXJ0VGltZT10aGlzLl90aW1lbGluZS5jdXJyZW50VGltZS1hL3RoaXMuX3BsYXliYWNrUmF0ZSksdGhpcy5fY3VycmVudFRpbWVQZW5kaW5nPSExLHRoaXMuX2N1cnJlbnRUaW1lIT1hJiYodGhpcy5fdGlja0N1cnJlbnRUaW1lKGEsITApLGIuaW52YWxpZGF0ZUVmZmVjdHMoKSkpfSxnZXQgc3RhcnRUaW1lKCl7cmV0dXJuIHRoaXMuX3N0YXJ0VGltZX0sc2V0IHN0YXJ0VGltZShhKXthPSthLGlzTmFOKGEpfHx0aGlzLl9wYXVzZWR8fHRoaXMuX2lkbGV8fCh0aGlzLl9zdGFydFRpbWU9YSx0aGlzLl90aWNrQ3VycmVudFRpbWUoKHRoaXMuX3RpbWVsaW5lLmN1cnJlbnRUaW1lLXRoaXMuX3N0YXJ0VGltZSkqdGhpcy5wbGF5YmFja1JhdGUpLGIuaW52YWxpZGF0ZUVmZmVjdHMoKSl9LGdldCBwbGF5YmFja1JhdGUoKXtyZXR1cm4gdGhpcy5fcGxheWJhY2tSYXRlfSxzZXQgcGxheWJhY2tSYXRlKGEpe2lmKGEhPXRoaXMuX3BsYXliYWNrUmF0ZSl7dmFyIGI9dGhpcy5jdXJyZW50VGltZTt0aGlzLl9wbGF5YmFja1JhdGU9YSx0aGlzLl9zdGFydFRpbWU9bnVsbCwicGF1c2VkIiE9dGhpcy5wbGF5U3RhdGUmJiJpZGxlIiE9dGhpcy5wbGF5U3RhdGUmJnRoaXMucGxheSgpLG51bGwhPWImJih0aGlzLmN1cnJlbnRUaW1lPWIpfX0sZ2V0IF9pc0ZpbmlzaGVkKCl7cmV0dXJuIXRoaXMuX2lkbGUmJih0aGlzLl9wbGF5YmFja1JhdGU+MCYmdGhpcy5fY3VycmVudFRpbWU+PXRoaXMuX3RvdGFsRHVyYXRpb258fHRoaXMuX3BsYXliYWNrUmF0ZTwwJiZ0aGlzLl9jdXJyZW50VGltZTw9MCl9LGdldCBfdG90YWxEdXJhdGlvbigpe3JldHVybiB0aGlzLl9lZmZlY3QuX3RvdGFsRHVyYXRpb259LGdldCBwbGF5U3RhdGUoKXtyZXR1cm4gdGhpcy5faWRsZT8iaWRsZSI6bnVsbD09dGhpcy5fc3RhcnRUaW1lJiYhdGhpcy5fcGF1c2VkJiYwIT10aGlzLnBsYXliYWNrUmF0ZXx8dGhpcy5fY3VycmVudFRpbWVQZW5kaW5nPyJwZW5kaW5nIjp0aGlzLl9wYXVzZWQ/InBhdXNlZCI6dGhpcy5faXNGaW5pc2hlZD8iZmluaXNoZWQiOiJydW5uaW5nIn0scGxheTpmdW5jdGlvbigpe3RoaXMuX3BhdXNlZD0hMSwodGhpcy5faXNGaW5pc2hlZHx8dGhpcy5faWRsZSkmJih0aGlzLl9jdXJyZW50VGltZT10aGlzLl9wbGF5YmFja1JhdGU+MD8wOnRoaXMuX3RvdGFsRHVyYXRpb24sdGhpcy5fc3RhcnRUaW1lPW51bGwpLHRoaXMuX2ZpbmlzaGVkRmxhZz0hMSx0aGlzLl9pZGxlPSExLHRoaXMuX2Vuc3VyZUFsaXZlKCksYi5pbnZhbGlkYXRlRWZmZWN0cygpfSxwYXVzZTpmdW5jdGlvbigpe3RoaXMuX2lzRmluaXNoZWR8fHRoaXMuX3BhdXNlZHx8dGhpcy5faWRsZXx8KHRoaXMuX2N1cnJlbnRUaW1lUGVuZGluZz0hMCksdGhpcy5fc3RhcnRUaW1lPW51bGwsdGhpcy5fcGF1c2VkPSEwfSxmaW5pc2g6ZnVuY3Rpb24oKXt0aGlzLl9pZGxlfHwodGhpcy5jdXJyZW50VGltZT10aGlzLl9wbGF5YmFja1JhdGU+MD90aGlzLl90b3RhbER1cmF0aW9uOjAsdGhpcy5fc3RhcnRUaW1lPXRoaXMuX3RvdGFsRHVyYXRpb24tdGhpcy5jdXJyZW50VGltZSx0aGlzLl9jdXJyZW50VGltZVBlbmRpbmc9ITEsYi5pbnZhbGlkYXRlRWZmZWN0cygpKX0sY2FuY2VsOmZ1bmN0aW9uKCl7dGhpcy5faW5FZmZlY3QmJih0aGlzLl9pbkVmZmVjdD0hMSx0aGlzLl9pZGxlPSEwLHRoaXMuX2ZpbmlzaGVkRmxhZz0hMCx0aGlzLmN1cnJlbnRUaW1lPTAsdGhpcy5fc3RhcnRUaW1lPW51bGwsdGhpcy5fZWZmZWN0Ll91cGRhdGUobnVsbCksYi5pbnZhbGlkYXRlRWZmZWN0cygpKX0scmV2ZXJzZTpmdW5jdGlvbigpe3RoaXMucGxheWJhY2tSYXRlKj0tMSx0aGlzLnBsYXkoKX0sYWRkRXZlbnRMaXN0ZW5lcjpmdW5jdGlvbihhLGIpeyJmdW5jdGlvbiI9PXR5cGVvZiBiJiYiZmluaXNoIj09YSYmdGhpcy5fZmluaXNoSGFuZGxlcnMucHVzaChiKX0scmVtb3ZlRXZlbnRMaXN0ZW5lcjpmdW5jdGlvbihhLGIpe2lmKCJmaW5pc2giPT1hKXt2YXIgYz10aGlzLl9maW5pc2hIYW5kbGVycy5pbmRleE9mKGIpO2M+PTAmJnRoaXMuX2ZpbmlzaEhhbmRsZXJzLnNwbGljZShjLDEpfX0sX2ZpcmVFdmVudHM6ZnVuY3Rpb24oYSl7aWYodGhpcy5faXNGaW5pc2hlZCl7aWYoIXRoaXMuX2ZpbmlzaGVkRmxhZyl7dmFyIGI9bmV3IGQodGhpcyx0aGlzLl9jdXJyZW50VGltZSxhKSxjPXRoaXMuX2ZpbmlzaEhhbmRsZXJzLmNvbmNhdCh0aGlzLm9uZmluaXNoP1t0aGlzLm9uZmluaXNoXTpbXSk7c2V0VGltZW91dChmdW5jdGlvbigpe2MuZm9yRWFjaChmdW5jdGlvbihhKXthLmNhbGwoYi50YXJnZXQsYil9KX0sMCksdGhpcy5fZmluaXNoZWRGbGFnPSEwfX1lbHNlIHRoaXMuX2ZpbmlzaGVkRmxhZz0hMX0sX3RpY2s6ZnVuY3Rpb24oYSxiKXt0aGlzLl9pZGxlfHx0aGlzLl9wYXVzZWR8fChudWxsPT10aGlzLl9zdGFydFRpbWU/YiYmKHRoaXMuc3RhcnRUaW1lPWEtdGhpcy5fY3VycmVudFRpbWUvdGhpcy5wbGF5YmFja1JhdGUpOnRoaXMuX2lzRmluaXNoZWR8fHRoaXMuX3RpY2tDdXJyZW50VGltZSgoYS10aGlzLl9zdGFydFRpbWUpKnRoaXMucGxheWJhY2tSYXRlKSksYiYmKHRoaXMuX2N1cnJlbnRUaW1lUGVuZGluZz0hMSx0aGlzLl9maXJlRXZlbnRzKGEpKX0sZ2V0IF9uZWVkc1RpY2soKXtyZXR1cm4gdGhpcy5wbGF5U3RhdGUgaW57cGVuZGluZzoxLHJ1bm5pbmc6MX18fCF0aGlzLl9maW5pc2hlZEZsYWd9fX0oYyxkLGYpLGZ1bmN0aW9uKGEsYixjKXtmdW5jdGlvbiBkKGEpe3ZhciBiPWo7aj1bXSxhPHAuY3VycmVudFRpbWUmJihhPXAuY3VycmVudFRpbWUpLGgoYSwhMCksYi5mb3JFYWNoKGZ1bmN0aW9uKGIpe2JbMV0oYSl9KSxnKCksbD12b2lkIDB9ZnVuY3Rpb24gZShhLGIpe3JldHVybiBhLl9zZXF1ZW5jZU51bWJlci1iLl9zZXF1ZW5jZU51bWJlcn1mdW5jdGlvbiBmKCl7dGhpcy5fYW5pbWF0aW9ucz1bXSx0aGlzLmN1cnJlbnRUaW1lPXdpbmRvdy5wZXJmb3JtYW5jZSYmcGVyZm9ybWFuY2Uubm93P3BlcmZvcm1hbmNlLm5vdygpOjB9ZnVuY3Rpb24gZygpe28uZm9yRWFjaChmdW5jdGlvbihhKXthKCl9KSxvLmxlbmd0aD0wfWZ1bmN0aW9uIGgoYSxjKXtuPSExO3ZhciBkPWIudGltZWxpbmU7ZC5jdXJyZW50VGltZT1hLGQuX2FuaW1hdGlvbnMuc29ydChlKSxtPSExO3ZhciBmPWQuX2FuaW1hdGlvbnM7ZC5fYW5pbWF0aW9ucz1bXTt2YXIgZz1bXSxoPVtdO2Y9Zi5maWx0ZXIoZnVuY3Rpb24oYil7Yi5fdGljayhhLGMpLGIuX2luRWZmZWN0P2gucHVzaChiLl9lZmZlY3QpOmcucHVzaChiLl9lZmZlY3QpLGIuX25lZWRzVGljayYmKG09ITApO3ZhciBkPWIuX2luRWZmZWN0fHxiLl9uZWVkc1RpY2s7cmV0dXJuIGIuX2luVGltZWxpbmU9ZCxkfSksby5wdXNoLmFwcGx5KG8sZyksby5wdXNoLmFwcGx5KG8saCksZC5fYW5pbWF0aW9ucy5wdXNoLmFwcGx5KGQuX2FuaW1hdGlvbnMsZiksbSYmcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uKCl7fSl9dmFyIGk9d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSxqPVtdLGs9MDt3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lPWZ1bmN0aW9uKGEpe3ZhciBiPWsrKztyZXR1cm4gMD09ai5sZW5ndGgmJmkoZCksai5wdXNoKFtiLGFdKSxifSx3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWU9ZnVuY3Rpb24oYSl7ai5mb3JFYWNoKGZ1bmN0aW9uKGIpe2JbMF09PWEmJihiWzFdPWZ1bmN0aW9uKCl7fSl9KX0sZi5wcm90b3R5cGU9e19wbGF5OmZ1bmN0aW9uKGMpe2MuX3RpbWluZz1hLm5vcm1hbGl6ZVRpbWluZ0lucHV0KGMudGltaW5nKTt2YXIgZD1uZXcgYi5BbmltYXRpb24oYyk7cmV0dXJuIGQuX2lkbGU9ITEsZC5fdGltZWxpbmU9dGhpcyx0aGlzLl9hbmltYXRpb25zLnB1c2goZCksYi5yZXN0YXJ0KCksYi5pbnZhbGlkYXRlRWZmZWN0cygpLGR9fTt2YXIgbD12b2lkIDAsbT0hMSxuPSExO2IucmVzdGFydD1mdW5jdGlvbigpe3JldHVybiBtfHwobT0hMCxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24oKXt9KSxuPSEwKSxufSxiLmludmFsaWRhdGVFZmZlY3RzPWZ1bmN0aW9uKCl7aChiLnRpbWVsaW5lLmN1cnJlbnRUaW1lLCExKSxnKCl9O3ZhciBvPVtdLHA9bmV3IGY7Yi50aW1lbGluZT1wfShjLGQsZiksZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYihhLGIpe3ZhciBjPWEuZXhlYyhiKTtyZXR1cm4gYz8oYz1hLmlnbm9yZUNhc2U/Y1swXS50b0xvd2VyQ2FzZSgpOmNbMF0sW2MsYi5zdWJzdHIoYy5sZW5ndGgpXSk6dm9pZCAwfWZ1bmN0aW9uIGMoYSxiKXtiPWIucmVwbGFjZSgvXlxzKi8sIiIpO3ZhciBjPWEoYik7cmV0dXJuIGM/W2NbMF0sY1sxXS5yZXBsYWNlKC9eXHMqLywiIildOnZvaWQgMH1mdW5jdGlvbiBkKGEsZCxlKXthPWMuYmluZChudWxsLGEpO2Zvcih2YXIgZj1bXTs7KXt2YXIgZz1hKGUpO2lmKCFnKXJldHVybltmLGVdO2lmKGYucHVzaChnWzBdKSxlPWdbMV0sZz1iKGQsZSksIWd8fCIiPT1nWzFdKXJldHVybltmLGVdO2U9Z1sxXX19ZnVuY3Rpb24gZShhLGIpe2Zvcih2YXIgYz0wLGQ9MDtkPGIubGVuZ3RoJiYoIS9cc3wsLy50ZXN0KGJbZF0pfHwwIT1jKTtkKyspaWYoIigiPT1iW2RdKWMrKztlbHNlIGlmKCIpIj09YltkXSYmKGMtLSwwPT1jJiZkKyssMD49YykpYnJlYWs7dmFyIGU9YShiLnN1YnN0cigwLGQpKTtyZXR1cm4gdm9pZCAwPT1lP3ZvaWQgMDpbZSxiLnN1YnN0cihkKV19ZnVuY3Rpb24gZihhLGIpe2Zvcih2YXIgYz1hLGQ9YjtjJiZkOyljPmQ/YyU9ZDpkJT1jO3JldHVybiBjPWEqYi8oYytkKX1mdW5jdGlvbiBnKGEpe3JldHVybiBmdW5jdGlvbihiKXt2YXIgYz1hKGIpO3JldHVybiBjJiYoY1swXT12b2lkIDApLGN9fWZ1bmN0aW9uIGgoYSxiKXtyZXR1cm4gZnVuY3Rpb24oYyl7dmFyIGQ9YShjKTtyZXR1cm4gZD9kOltiLGNdfX1mdW5jdGlvbiBpKGIsYyl7Zm9yKHZhciBkPVtdLGU9MDtlPGIubGVuZ3RoO2UrKyl7dmFyIGY9YS5jb25zdW1lVHJpbW1lZChiW2VdLGMpO2lmKCFmfHwiIj09ZlswXSlyZXR1cm47dm9pZCAwIT09ZlswXSYmZC5wdXNoKGZbMF0pLGM9ZlsxXX1yZXR1cm4iIj09Yz9kOnZvaWQgMH1mdW5jdGlvbiBqKGEsYixjLGQsZSl7Zm9yKHZhciBnPVtdLGg9W10saT1bXSxqPWYoZC5sZW5ndGgsZS5sZW5ndGgpLGs9MDtqPms7aysrKXt2YXIgbD1iKGRbayVkLmxlbmd0aF0sZVtrJWUubGVuZ3RoXSk7aWYoIWwpcmV0dXJuO2cucHVzaChsWzBdKSxoLnB1c2gobFsxXSksaS5wdXNoKGxbMl0pfXJldHVybltnLGgsZnVuY3Rpb24oYil7dmFyIGQ9Yi5tYXAoZnVuY3Rpb24oYSxiKXtyZXR1cm4gaVtiXShhKX0pLmpvaW4oYyk7cmV0dXJuIGE/YShkKTpkfV19ZnVuY3Rpb24gayhhLGIsYyl7Zm9yKHZhciBkPVtdLGU9W10sZj1bXSxnPTAsaD0wO2g8Yy5sZW5ndGg7aCsrKWlmKCJmdW5jdGlvbiI9PXR5cGVvZiBjW2hdKXt2YXIgaT1jW2hdKGFbZ10sYltnKytdKTtkLnB1c2goaVswXSksZS5wdXNoKGlbMV0pLGYucHVzaChpWzJdKX1lbHNlIWZ1bmN0aW9uKGEpe2QucHVzaCghMSksZS5wdXNoKCExKSxmLnB1c2goZnVuY3Rpb24oKXtyZXR1cm4gY1thXX0pfShoKTtyZXR1cm5bZCxlLGZ1bmN0aW9uKGEpe2Zvcih2YXIgYj0iIixjPTA7YzxhLmxlbmd0aDtjKyspYis9ZltjXShhW2NdKTtyZXR1cm4gYn1dfWEuY29uc3VtZVRva2VuPWIsYS5jb25zdW1lVHJpbW1lZD1jLGEuY29uc3VtZVJlcGVhdGVkPWQsYS5jb25zdW1lUGFyZW50aGVzaXNlZD1lLGEuaWdub3JlPWcsYS5vcHRpb25hbD1oLGEuY29uc3VtZUxpc3Q9aSxhLm1lcmdlTmVzdGVkUmVwZWF0ZWQ9ai5iaW5kKG51bGwsbnVsbCksYS5tZXJnZVdyYXBwZWROZXN0ZWRSZXBlYXRlZD1qLGEubWVyZ2VMaXN0PWt9KGQpLGZ1bmN0aW9uKGEpe2Z1bmN0aW9uIGIoYil7ZnVuY3Rpb24gYyhiKXt2YXIgYz1hLmNvbnN1bWVUb2tlbigvXmluc2V0L2ksYik7aWYoYylyZXR1cm4gZC5pbnNldD0hMCxjO3ZhciBjPWEuY29uc3VtZUxlbmd0aE9yUGVyY2VudChiKTtpZihjKXJldHVybiBkLmxlbmd0aHMucHVzaChjWzBdKSxjO3ZhciBjPWEuY29uc3VtZUNvbG9yKGIpO3JldHVybiBjPyhkLmNvbG9yPWNbMF0sYyk6dm9pZCAwfXZhciBkPXtpbnNldDohMSxsZW5ndGhzOltdLGNvbG9yOm51bGx9LGU9YS5jb25zdW1lUmVwZWF0ZWQoYywvXi8sYik7cmV0dXJuIGUmJmVbMF0ubGVuZ3RoP1tkLGVbMV1dOnZvaWQgMH1mdW5jdGlvbiBjKGMpe3ZhciBkPWEuY29uc3VtZVJlcGVhdGVkKGIsL14sLyxjKTtyZXR1cm4gZCYmIiI9PWRbMV0/ZFswXTp2b2lkIDB9ZnVuY3Rpb24gZChiLGMpe2Zvcig7Yi5sZW5ndGhzLmxlbmd0aDxNYXRoLm1heChiLmxlbmd0aHMubGVuZ3RoLGMubGVuZ3Rocy5sZW5ndGgpOyliLmxlbmd0aHMucHVzaCh7cHg6MH0pO2Zvcig7Yy5sZW5ndGhzLmxlbmd0aDxNYXRoLm1heChiLmxlbmd0aHMubGVuZ3RoLGMubGVuZ3Rocy5sZW5ndGgpOyljLmxlbmd0aHMucHVzaCh7cHg6MH0pO2lmKGIuaW5zZXQ9PWMuaW5zZXQmJiEhYi5jb2xvcj09ISFjLmNvbG9yKXtmb3IodmFyIGQsZT1bXSxmPVtbXSwwXSxnPVtbXSwwXSxoPTA7aDxiLmxlbmd0aHMubGVuZ3RoO2grKyl7dmFyIGk9YS5tZXJnZURpbWVuc2lvbnMoYi5sZW5ndGhzW2hdLGMubGVuZ3Roc1toXSwyPT1oKTtmWzBdLnB1c2goaVswXSksZ1swXS5wdXNoKGlbMV0pLGUucHVzaChpWzJdKX1pZihiLmNvbG9yJiZjLmNvbG9yKXt2YXIgaj1hLm1lcmdlQ29sb3JzKGIuY29sb3IsYy5jb2xvcik7ZlsxXT1qWzBdLGdbMV09alsxXSxkPWpbMl19cmV0dXJuW2YsZyxmdW5jdGlvbihhKXtmb3IodmFyIGM9Yi5pbnNldD8iaW5zZXQgIjoiICIsZj0wO2Y8ZS5sZW5ndGg7ZisrKWMrPWVbZl0oYVswXVtmXSkrIiAiO3JldHVybiBkJiYoYys9ZChhWzFdKSksY31dfX1mdW5jdGlvbiBlKGIsYyxkLGUpe2Z1bmN0aW9uIGYoYSl7cmV0dXJue2luc2V0OmEsY29sb3I6WzAsMCwwLDBdLGxlbmd0aHM6W3tweDowfSx7cHg6MH0se3B4OjB9LHtweDowfV19fWZvcih2YXIgZz1bXSxoPVtdLGk9MDtpPGQubGVuZ3RofHxpPGUubGVuZ3RoO2krKyl7dmFyIGo9ZFtpXXx8ZihlW2ldLmluc2V0KSxrPWVbaV18fGYoZFtpXS5pbnNldCk7Zy5wdXNoKGopLGgucHVzaChrKX1yZXR1cm4gYS5tZXJnZU5lc3RlZFJlcGVhdGVkKGIsYyxnLGgpfXZhciBmPWUuYmluZChudWxsLGQsIiwgIik7YS5hZGRQcm9wZXJ0aWVzSGFuZGxlcihjLGYsWyJib3gtc2hhZG93IiwidGV4dC1zaGFkb3ciXSl9KGQpLGZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gYyhhKXtyZXR1cm4gYS50b0ZpeGVkKDMpLnJlcGxhY2UoIi4wMDAiLCIiKX1mdW5jdGlvbiBkKGEsYixjKXtyZXR1cm4gTWF0aC5taW4oYixNYXRoLm1heChhLGMpKX1mdW5jdGlvbiBlKGEpe3JldHVybi9eXHMqWy0rXT8oXGQqXC4pP1xkK1xzKiQvLnRlc3QoYSk/TnVtYmVyKGEpOnZvaWQgMH1mdW5jdGlvbiBmKGEsYil7cmV0dXJuW2EsYixjXX1mdW5jdGlvbiBnKGEsYil7cmV0dXJuIDAhPWE/aSgwLDEvMCkoYSxiKTp2b2lkIDB9ZnVuY3Rpb24gaChhLGIpe3JldHVyblthLGIsZnVuY3Rpb24oYSl7cmV0dXJuIE1hdGgucm91bmQoZCgxLDEvMCxhKSl9XX1mdW5jdGlvbiBpKGEsYil7cmV0dXJuIGZ1bmN0aW9uKGUsZil7cmV0dXJuW2UsZixmdW5jdGlvbihlKXtyZXR1cm4gYyhkKGEsYixlKSl9XX19ZnVuY3Rpb24gaihhLGIpe3JldHVyblthLGIsTWF0aC5yb3VuZF19YS5jbGFtcD1kLGEuYWRkUHJvcGVydGllc0hhbmRsZXIoZSxpKDAsMS8wKSxbImJvcmRlci1pbWFnZS13aWR0aCIsImxpbmUtaGVpZ2h0Il0pLGEuYWRkUHJvcGVydGllc0hhbmRsZXIoZSxpKDAsMSksWyJvcGFjaXR5Iiwic2hhcGUtaW1hZ2UtdGhyZXNob2xkIl0pLGEuYWRkUHJvcGVydGllc0hhbmRsZXIoZSxnLFsiZmxleC1ncm93IiwiZmxleC1zaHJpbmsiXSksYS5hZGRQcm9wZXJ0aWVzSGFuZGxlcihlLGgsWyJvcnBoYW5zIiwid2lkb3dzIl0pLGEuYWRkUHJvcGVydGllc0hhbmRsZXIoZSxqLFsiei1pbmRleCJdKSxhLnBhcnNlTnVtYmVyPWUsYS5tZXJnZU51bWJlcnM9ZixhLm51bWJlclRvU3RyaW5nPWN9KGQsZiksZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjKGEsYil7cmV0dXJuInZpc2libGUiPT1hfHwidmlzaWJsZSI9PWI/WzAsMSxmdW5jdGlvbihjKXtyZXR1cm4gMD49Yz9hOmM+PTE/YjoidmlzaWJsZSJ9XTp2b2lkIDB9YS5hZGRQcm9wZXJ0aWVzSGFuZGxlcihTdHJpbmcsYyxbInZpc2liaWxpdHkiXSl9KGQpLGZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gYyhhKXthPWEudHJpbSgpLGYuZmlsbFN0eWxlPSIjMDAwIixmLmZpbGxTdHlsZT1hO3ZhciBiPWYuZmlsbFN0eWxlO2lmKGYuZmlsbFN0eWxlPSIjZmZmIixmLmZpbGxTdHlsZT1hLGI9PWYuZmlsbFN0eWxlKXtmLmZpbGxSZWN0KDAsMCwxLDEpO3ZhciBjPWYuZ2V0SW1hZ2VEYXRhKDAsMCwxLDEpLmRhdGE7Zi5jbGVhclJlY3QoMCwwLDEsMSk7dmFyIGQ9Y1szXS8yNTU7cmV0dXJuW2NbMF0qZCxjWzFdKmQsY1syXSpkLGRdfX1mdW5jdGlvbiBkKGIsYyl7cmV0dXJuW2IsYyxmdW5jdGlvbihiKXtmdW5jdGlvbiBjKGEpe3JldHVybiBNYXRoLm1heCgwLE1hdGgubWluKDI1NSxhKSl9aWYoYlszXSlmb3IodmFyIGQ9MDszPmQ7ZCsrKWJbZF09TWF0aC5yb3VuZChjKGJbZF0vYlszXSkpO3JldHVybiBiWzNdPWEubnVtYmVyVG9TdHJpbmcoYS5jbGFtcCgwLDEsYlszXSkpLCJyZ2JhKCIrYi5qb2luKCIsIikrIikifV19dmFyIGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiwiY2FudmFzIik7ZS53aWR0aD1lLmhlaWdodD0xO3ZhciBmPWUuZ2V0Q29udGV4dCgiMmQiKTthLmFkZFByb3BlcnRpZXNIYW5kbGVyKGMsZCxbImJhY2tncm91bmQtY29sb3IiLCJib3JkZXItYm90dG9tLWNvbG9yIiwiYm9yZGVyLWxlZnQtY29sb3IiLCJib3JkZXItcmlnaHQtY29sb3IiLCJib3JkZXItdG9wLWNvbG9yIiwiY29sb3IiLCJvdXRsaW5lLWNvbG9yIiwidGV4dC1kZWNvcmF0aW9uLWNvbG9yIl0pLGEuY29uc3VtZUNvbG9yPWEuY29uc3VtZVBhcmVudGhlc2lzZWQuYmluZChudWxsLGMpLGEubWVyZ2VDb2xvcnM9ZH0oZCxmKSxmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGMoYSxiKXtpZihiPWIudHJpbSgpLnRvTG93ZXJDYXNlKCksIjAiPT1iJiYicHgiLnNlYXJjaChhKT49MClyZXR1cm57cHg6MH07aWYoL15bXihdKiR8XmNhbGMvLnRlc3QoYikpe2I9Yi5yZXBsYWNlKC9jYWxjXCgvZywiKCIpO3ZhciBjPXt9O2I9Yi5yZXBsYWNlKGEsZnVuY3Rpb24oYSl7cmV0dXJuIGNbYV09bnVsbCwiVSIrYX0pO2Zvcih2YXIgZD0iVSgiK2Euc291cmNlKyIpIixlPWIucmVwbGFjZSgvWy0rXT8oXGQqXC4pP1xkKy9nLCJOIikucmVwbGFjZShuZXcgUmVnRXhwKCJOIitkLCJnIiksIkQiKS5yZXBsYWNlKC9cc1srLV1ccy9nLCJPIikucmVwbGFjZSgvXHMvZywiIiksZj1bL05cKihEKS9nLC8oTnxEKVsqXC9dTi9nLC8oTnxEKU9cMS9nLC9cKChOfEQpXCkvZ10sZz0wO2c8Zi5sZW5ndGg7KWZbZ10udGVzdChlKT8oZT1lLnJlcGxhY2UoZltnXSwiJDEiKSxnPTApOmcrKztpZigiRCI9PWUpe2Zvcih2YXIgaCBpbiBjKXt2YXIgaT1ldmFsKGIucmVwbGFjZShuZXcgUmVnRXhwKCJVIitoLCJnIiksIiIpLnJlcGxhY2UobmV3IFJlZ0V4cChkLCJnIiksIiowIikpO2lmKCFpc0Zpbml0ZShpKSlyZXR1cm47Y1toXT1pfXJldHVybiBjfX19ZnVuY3Rpb24gZChhLGIpe3JldHVybiBlKGEsYiwhMCl9ZnVuY3Rpb24gZShiLGMsZCl7dmFyIGUsZj1bXTtmb3IoZSBpbiBiKWYucHVzaChlKTtmb3IoZSBpbiBjKWYuaW5kZXhPZihlKTwwJiZmLnB1c2goZSk7cmV0dXJuIGI9Zi5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIGJbYV18fDB9KSxjPWYubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBjW2FdfHwwfSksW2IsYyxmdW5jdGlvbihiKXt2YXIgYz1iLm1hcChmdW5jdGlvbihjLGUpe3JldHVybiAxPT1iLmxlbmd0aCYmZCYmKGM9TWF0aC5tYXgoYywwKSksYS5udW1iZXJUb1N0cmluZyhjKStmW2VdfSkuam9pbigiICsgIik7cmV0dXJuIGIubGVuZ3RoPjE/ImNhbGMoIitjKyIpIjpjfV19dmFyIGY9InB4fGVtfGV4fGNofHJlbXx2d3x2aHx2bWlufHZtYXh8Y218bW18aW58cHR8cGMiLGc9Yy5iaW5kKG51bGwsbmV3IFJlZ0V4cChmLCJnIikpLGg9Yy5iaW5kKG51bGwsbmV3IFJlZ0V4cChmKyJ8JSIsImciKSksaT1jLmJpbmQobnVsbCwvZGVnfHJhZHxncmFkfHR1cm4vZyk7YS5wYXJzZUxlbmd0aD1nLGEucGFyc2VMZW5ndGhPclBlcmNlbnQ9aCxhLmNvbnN1bWVMZW5ndGhPclBlcmNlbnQ9YS5jb25zdW1lUGFyZW50aGVzaXNlZC5iaW5kKG51bGwsaCksYS5wYXJzZUFuZ2xlPWksYS5tZXJnZURpbWVuc2lvbnM9ZTt2YXIgaj1hLmNvbnN1bWVQYXJlbnRoZXNpc2VkLmJpbmQobnVsbCxnKSxrPWEuY29uc3VtZVJlcGVhdGVkLmJpbmQodm9pZCAwLGosL14vKSxsPWEuY29uc3VtZVJlcGVhdGVkLmJpbmQodm9pZCAwLGssL14sLyk7YS5jb25zdW1lU2l6ZVBhaXJMaXN0PWw7dmFyIG09ZnVuY3Rpb24oYSl7dmFyIGI9bChhKTtyZXR1cm4gYiYmIiI9PWJbMV0/YlswXTp2b2lkIDB9LG49YS5tZXJnZU5lc3RlZFJlcGVhdGVkLmJpbmQodm9pZCAwLGQsIiAiKSxvPWEubWVyZ2VOZXN0ZWRSZXBlYXRlZC5iaW5kKHZvaWQgMCxuLCIsIik7YS5tZXJnZU5vbk5lZ2F0aXZlU2l6ZVBhaXI9bixhLmFkZFByb3BlcnRpZXNIYW5kbGVyKG0sbyxbImJhY2tncm91bmQtc2l6ZSJdKSxhLmFkZFByb3BlcnRpZXNIYW5kbGVyKGgsZCxbImJvcmRlci1ib3R0b20td2lkdGgiLCJib3JkZXItaW1hZ2Utd2lkdGgiLCJib3JkZXItbGVmdC13aWR0aCIsImJvcmRlci1yaWdodC13aWR0aCIsImJvcmRlci10b3Atd2lkdGgiLCJmbGV4LWJhc2lzIiwiZm9udC1zaXplIiwiaGVpZ2h0IiwibGluZS1oZWlnaHQiLCJtYXgtaGVpZ2h0IiwibWF4LXdpZHRoIiwib3V0bGluZS13aWR0aCIsIndpZHRoIl0pLGEuYWRkUHJvcGVydGllc0hhbmRsZXIoaCxlLFsiYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1cyIsImJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzIiwiYm9yZGVyLXRvcC1sZWZ0LXJhZGl1cyIsImJvcmRlci10b3AtcmlnaHQtcmFkaXVzIiwiYm90dG9tIiwibGVmdCIsImxldHRlci1zcGFjaW5nIiwibWFyZ2luLWJvdHRvbSIsIm1hcmdpbi1sZWZ0IiwibWFyZ2luLXJpZ2h0IiwibWFyZ2luLXRvcCIsIm1pbi1oZWlnaHQiLCJtaW4td2lkdGgiLCJvdXRsaW5lLW9mZnNldCIsInBhZGRpbmctYm90dG9tIiwicGFkZGluZy1sZWZ0IiwicGFkZGluZy1yaWdodCIsInBhZGRpbmctdG9wIiwicGVyc3BlY3RpdmUiLCJyaWdodCIsInNoYXBlLW1hcmdpbiIsInRleHQtaW5kZW50IiwidG9wIiwidmVydGljYWwtYWxpZ24iLCJ3b3JkLXNwYWNpbmciXSl9KGQsZiksZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjKGIpe3JldHVybiBhLmNvbnN1bWVMZW5ndGhPclBlcmNlbnQoYil8fGEuY29uc3VtZVRva2VuKC9eYXV0by8sYil9ZnVuY3Rpb24gZChiKXt2YXIgZD1hLmNvbnN1bWVMaXN0KFthLmlnbm9yZShhLmNvbnN1bWVUb2tlbi5iaW5kKG51bGwsL15yZWN0LykpLGEuaWdub3JlKGEuY29uc3VtZVRva2VuLmJpbmQobnVsbCwvXlwoLykpLGEuY29uc3VtZVJlcGVhdGVkLmJpbmQobnVsbCxjLC9eLC8pLGEuaWdub3JlKGEuY29uc3VtZVRva2VuLmJpbmQobnVsbCwvXlwpLykpXSxiKTtyZXR1cm4gZCYmND09ZFswXS5sZW5ndGg/ZFswXTp2b2lkIDB9ZnVuY3Rpb24gZShiLGMpe3JldHVybiJhdXRvIj09Ynx8ImF1dG8iPT1jP1shMCwhMSxmdW5jdGlvbihkKXt2YXIgZT1kP2I6YztpZigiYXV0byI9PWUpcmV0dXJuImF1dG8iO3ZhciBmPWEubWVyZ2VEaW1lbnNpb25zKGUsZSk7cmV0dXJuIGZbMl0oZlswXSl9XTphLm1lcmdlRGltZW5zaW9ucyhiLGMpfWZ1bmN0aW9uIGYoYSl7cmV0dXJuInJlY3QoIithKyIpIn12YXIgZz1hLm1lcmdlV3JhcHBlZE5lc3RlZFJlcGVhdGVkLmJpbmQobnVsbCxmLGUsIiwgIik7YS5wYXJzZUJveD1kLGEubWVyZ2VCb3hlcz1nLGEuYWRkUHJvcGVydGllc0hhbmRsZXIoZCxnLFsiY2xpcCJdKX0oZCxmKSxmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGMoYSl7cmV0dXJuIGZ1bmN0aW9uKGIpe3ZhciBjPTA7cmV0dXJuIGEubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBhPT09az9iW2MrK106YX0pfX1mdW5jdGlvbiBkKGEpe3JldHVybiBhfWZ1bmN0aW9uIGUoYil7aWYoYj1iLnRvTG93ZXJDYXNlKCkudHJpbSgpLCJub25lIj09YilyZXR1cm5bXTtmb3IodmFyIGMsZD0vXHMqKFx3KylcKChbXildKilcKS9nLGU9W10sZj0wO2M9ZC5leGVjKGIpOyl7aWYoYy5pbmRleCE9ZilyZXR1cm47Zj1jLmluZGV4K2NbMF0ubGVuZ3RoO3ZhciBnPWNbMV0saD1uW2ddO2lmKCFoKXJldHVybjt2YXIgaT1jWzJdLnNwbGl0KCIsIiksaj1oWzBdO2lmKGoubGVuZ3RoPGkubGVuZ3RoKXJldHVybjtmb3IodmFyIGs9W10sbz0wO288ai5sZW5ndGg7bysrKXt2YXIgcCxxPWlbb10scj1qW29dO2lmKHA9cT97QTpmdW5jdGlvbihiKXtyZXR1cm4iMCI9PWIudHJpbSgpP206YS5wYXJzZUFuZ2xlKGIpfSxOOmEucGFyc2VOdW1iZXIsVDphLnBhcnNlTGVuZ3RoT3JQZXJjZW50LEw6YS5wYXJzZUxlbmd0aH1bci50b1VwcGVyQ2FzZSgpXShxKTp7YTptLG46a1swXSx0Omx9W3JdLHZvaWQgMD09PXApcmV0dXJuO2sucHVzaChwKX1pZihlLnB1c2goe3Q6ZyxkOmt9KSxkLmxhc3RJbmRleD09Yi5sZW5ndGgpcmV0dXJuIGV9fWZ1bmN0aW9uIGYoYSl7cmV0dXJuIGEudG9GaXhlZCg2KS5yZXBsYWNlKCIuMDAwMDAwIiwiIil9ZnVuY3Rpb24gZyhiLGMpe2lmKGIuZGVjb21wb3NpdGlvblBhaXIhPT1jKXtiLmRlY29tcG9zaXRpb25QYWlyPWM7dmFyIGQ9YS5tYWtlTWF0cml4RGVjb21wb3NpdGlvbihiKX1pZihjLmRlY29tcG9zaXRpb25QYWlyIT09Yil7Yy5kZWNvbXBvc2l0aW9uUGFpcj1iO3ZhciBlPWEubWFrZU1hdHJpeERlY29tcG9zaXRpb24oYyl9cmV0dXJuIG51bGw9PWRbMF18fG51bGw9PWVbMF0/W1shMV0sWyEwXSxmdW5jdGlvbihhKXtyZXR1cm4gYT9jWzBdLmQ6YlswXS5kfV06KGRbMF0ucHVzaCgwKSxlWzBdLnB1c2goMSksW2QsZSxmdW5jdGlvbihiKXt2YXIgYz1hLnF1YXQoZFswXVszXSxlWzBdWzNdLGJbNV0pLGc9YS5jb21wb3NlTWF0cml4KGJbMF0sYlsxXSxiWzJdLGMsYls0XSksaD1nLm1hcChmKS5qb2luKCIsIik7cmV0dXJuIGh9XSl9ZnVuY3Rpb24gaChhKXtyZXR1cm4gYS5yZXBsYWNlKC9beHldLywiIil9ZnVuY3Rpb24gaShhKXtyZXR1cm4gYS5yZXBsYWNlKC8oeHx5fHp8M2QpPyQvLCIzZCIpfWZ1bmN0aW9uIGooYixjKXt2YXIgZD1hLm1ha2VNYXRyaXhEZWNvbXBvc2l0aW9uJiYhMCxlPSExO2lmKCFiLmxlbmd0aHx8IWMubGVuZ3RoKXtiLmxlbmd0aHx8KGU9ITAsYj1jLGM9W10pO2Zvcih2YXIgZj0wO2Y8Yi5sZW5ndGg7ZisrKXt2YXIgaj1iW2ZdLnQsaz1iW2ZdLmQsbD0ic2NhbGUiPT1qLnN1YnN0cigwLDUpPzE6MDtjLnB1c2goe3Q6aixkOmsubWFwKGZ1bmN0aW9uKGEpe2lmKCJudW1iZXIiPT10eXBlb2YgYSlyZXR1cm4gbDt2YXIgYj17fTtmb3IodmFyIGMgaW4gYSliW2NdPWw7cmV0dXJuIGJ9KX0pfX12YXIgbT1mdW5jdGlvbihhLGIpe3JldHVybiJwZXJzcGVjdGl2ZSI9PWEmJiJwZXJzcGVjdGl2ZSI9PWJ8fCgibWF0cml4Ij09YXx8Im1hdHJpeDNkIj09YSkmJigibWF0cml4Ij09Ynx8Im1hdHJpeDNkIj09Yil9LG89W10scD1bXSxxPVtdO2lmKGIubGVuZ3RoIT1jLmxlbmd0aCl7aWYoIWQpcmV0dXJuO3ZhciByPWcoYixjKTtvPVtyWzBdXSxwPVtyWzFdXSxxPVtbIm1hdHJpeCIsW3JbMl1dXV19ZWxzZSBmb3IodmFyIGY9MDtmPGIubGVuZ3RoO2YrKyl7dmFyIGoscz1iW2ZdLnQsdD1jW2ZdLnQsdT1iW2ZdLmQsdj1jW2ZdLmQsdz1uW3NdLHg9blt0XTtpZihtKHMsdCkpe2lmKCFkKXJldHVybjt2YXIgcj1nKFtiW2ZdXSxbY1tmXV0pO28ucHVzaChyWzBdKSxwLnB1c2goclsxXSkscS5wdXNoKFsibWF0cml4IixbclsyXV1dKX1lbHNle2lmKHM9PXQpaj1zO2Vsc2UgaWYod1syXSYmeFsyXSYmaChzKT09aCh0KSlqPWgocyksdT13WzJdKHUpLHY9eFsyXSh2KTtlbHNle2lmKCF3WzFdfHwheFsxXXx8aShzKSE9aSh0KSl7aWYoIWQpcmV0dXJuO3ZhciByPWcoYixjKTtvPVtyWzBdXSxwPVtyWzFdXSxxPVtbIm1hdHJpeCIsW3JbMl1dXV07YnJlYWt9aj1pKHMpLHU9d1sxXSh1KSx2PXhbMV0odil9Zm9yKHZhciB5PVtdLHo9W10sQT1bXSxCPTA7Qjx1Lmxlbmd0aDtCKyspe3ZhciBDPSJudW1iZXIiPT10eXBlb2YgdVtCXT9hLm1lcmdlTnVtYmVyczphLm1lcmdlRGltZW5zaW9ucyxyPUModVtCXSx2W0JdKTt5W0JdPXJbMF0seltCXT1yWzFdLEEucHVzaChyWzJdKX1vLnB1c2goeSkscC5wdXNoKHopLHEucHVzaChbaixBXSl9fWlmKGUpe3ZhciBEPW87bz1wLHA9RH1yZXR1cm5bbyxwLGZ1bmN0aW9uKGEpe3JldHVybiBhLm1hcChmdW5jdGlvbihhLGIpe3ZhciBjPWEubWFwKGZ1bmN0aW9uKGEsYyl7cmV0dXJuIHFbYl1bMV1bY10oYSl9KS5qb2luKCIsIik7cmV0dXJuIm1hdHJpeCI9PXFbYl1bMF0mJjE2PT1jLnNwbGl0KCIsIikubGVuZ3RoJiYocVtiXVswXT0ibWF0cml4M2QiKSxxW2JdWzBdKyIoIitjKyIpIn0pLmpvaW4oIiAiKX1dfXZhciBrPW51bGwsbD17cHg6MH0sbT17ZGVnOjB9LG49e21hdHJpeDpbIk5OTk5OTiIsW2ssaywwLDAsayxrLDAsMCwwLDAsMSwwLGssaywwLDFdLGRdLG1hdHJpeDNkOlsiTk5OTk5OTk5OTk5OTk5OTiIsZF0scm90YXRlOlsiQSJdLHJvdGF0ZXg6WyJBIl0scm90YXRleTpbIkEiXSxyb3RhdGV6OlsiQSJdLHJvdGF0ZTNkOlsiTk5OQSJdLHBlcnNwZWN0aXZlOlsiTCJdLHNjYWxlOlsiTm4iLGMoW2ssaywxXSksZF0sc2NhbGV4OlsiTiIsYyhbaywxLDFdKSxjKFtrLDFdKV0sc2NhbGV5OlsiTiIsYyhbMSxrLDFdKSxjKFsxLGtdKV0sc2NhbGV6OlsiTiIsYyhbMSwxLGtdKV0sc2NhbGUzZDpbIk5OTiIsZF0sc2tldzpbIkFhIixudWxsLGRdLHNrZXd4OlsiQSIsbnVsbCxjKFtrLG1dKV0sc2tld3k6WyJBIixudWxsLGMoW20sa10pXSx0cmFuc2xhdGU6WyJUdCIsYyhbayxrLGxdKSxkXSx0cmFuc2xhdGV4OlsiVCIsYyhbayxsLGxdKSxjKFtrLGxdKV0sdHJhbnNsYXRleTpbIlQiLGMoW2wsayxsXSksYyhbbCxrXSldLHRyYW5zbGF0ZXo6WyJMIixjKFtsLGwsa10pXSx0cmFuc2xhdGUzZDpbIlRUTCIsZF19O2EuYWRkUHJvcGVydGllc0hhbmRsZXIoZSxqLFsidHJhbnNmb3JtIl0pfShkLGYpLGZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gYyhhLGIpe2IuY29uY2F0KFthXSkuZm9yRWFjaChmdW5jdGlvbihiKXtiIGluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZSYmKGRbYV09Yil9KX12YXIgZD17fTtjKCJ0cmFuc2Zvcm0iLFsid2Via2l0VHJhbnNmb3JtIiwibXNUcmFuc2Zvcm0iXSksYygidHJhbnNmb3JtT3JpZ2luIixbIndlYmtpdFRyYW5zZm9ybU9yaWdpbiJdKSxjKCJwZXJzcGVjdGl2ZSIsWyJ3ZWJraXRQZXJzcGVjdGl2ZSJdKSxjKCJwZXJzcGVjdGl2ZU9yaWdpbiIsWyJ3ZWJraXRQZXJzcGVjdGl2ZU9yaWdpbiJdKSxhLnByb3BlcnR5TmFtZT1mdW5jdGlvbihhKXtyZXR1cm4gZFthXXx8YX19KGQsZil9KCksIWZ1bmN0aW9uKCl7aWYodm9pZCAwPT09ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IikuYW5pbWF0ZShbXSkub25jYW5jZWwpe3ZhciBhO2lmKHdpbmRvdy5wZXJmb3JtYW5jZSYmcGVyZm9ybWFuY2Uubm93KXZhciBhPWZ1bmN0aW9uKCl7cmV0dXJuIHBlcmZvcm1hbmNlLm5vdygpfTtlbHNlIHZhciBhPWZ1bmN0aW9uKCl7cmV0dXJuIERhdGUubm93KCl9O3ZhciBiPWZ1bmN0aW9uKGEsYixjKXt0aGlzLnRhcmdldD1hLHRoaXMuY3VycmVudFRpbWU9Yix0aGlzLnRpbWVsaW5lVGltZT1jLHRoaXMudHlwZT0iY2FuY2VsIix0aGlzLmJ1YmJsZXM9ITEsdGhpcy5jYW5jZWxhYmxlPSExLHRoaXMuY3VycmVudFRhcmdldD1hLHRoaXMuZGVmYXVsdFByZXZlbnRlZD0hMSx0aGlzLmV2ZW50UGhhc2U9RXZlbnQuQVRfVEFSR0VULHRoaXMudGltZVN0YW1wPURhdGUubm93KCl9LGM9d2luZG93LkVsZW1lbnQucHJvdG90eXBlLmFuaW1hdGU7d2luZG93LkVsZW1lbnQucHJvdG90eXBlLmFuaW1hdGU9ZnVuY3Rpb24oZCxlKXt2YXIgZj1jLmNhbGwodGhpcyxkLGUpO2YuX2NhbmNlbEhhbmRsZXJzPVtdLGYub25jYW5jZWw9bnVsbDt2YXIgZz1mLmNhbmNlbDtmLmNhbmNlbD1mdW5jdGlvbigpe2cuY2FsbCh0aGlzKTt2YXIgYz1uZXcgYih0aGlzLG51bGwsYSgpKSxkPXRoaXMuX2NhbmNlbEhhbmRsZXJzLmNvbmNhdCh0aGlzLm9uY2FuY2VsP1t0aGlzLm9uY2FuY2VsXTpbXSk7c2V0VGltZW91dChmdW5jdGlvbigpe2QuZm9yRWFjaChmdW5jdGlvbihhKXthLmNhbGwoYy50YXJnZXQsYyl9KX0sMCl9O3ZhciBoPWYuYWRkRXZlbnRMaXN0ZW5lcjtmLmFkZEV2ZW50TGlzdGVuZXI9ZnVuY3Rpb24oYSxiKXsiZnVuY3Rpb24iPT10eXBlb2YgYiYmImNhbmNlbCI9PWE/dGhpcy5fY2FuY2VsSGFuZGxlcnMucHVzaChiKTpoLmNhbGwodGhpcyxhLGIpfTt2YXIgaT1mLnJlbW92ZUV2ZW50TGlzdGVuZXI7cmV0dXJuIGYucmVtb3ZlRXZlbnRMaXN0ZW5lcj1mdW5jdGlvbihhLGIpe2lmKCJjYW5jZWwiPT1hKXt2YXIgYz10aGlzLl9jYW5jZWxIYW5kbGVycy5pbmRleE9mKGIpO2M+PTAmJnRoaXMuX2NhbmNlbEhhbmRsZXJzLnNwbGljZShjLDEpfWVsc2UgaS5jYWxsKHRoaXMsYSxiKX0sZn19fSgpLGZ1bmN0aW9uKGEpe3ZhciBiPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxjPW51bGwsZD0hMTt0cnl7dmFyIGU9Z2V0Q29tcHV0ZWRTdHlsZShiKS5nZXRQcm9wZXJ0eVZhbHVlKCJvcGFjaXR5IiksZj0iMCI9PWU/IjEiOiIwIjtjPWIuYW5pbWF0ZSh7b3BhY2l0eTpbZixmXX0se2R1cmF0aW9uOjF9KSxjLmN1cnJlbnRUaW1lPTAsZD1nZXRDb21wdXRlZFN0eWxlKGIpLmdldFByb3BlcnR5VmFsdWUoIm9wYWNpdHkiKT09Zn1jYXRjaChnKXt9ZmluYWxseXtjJiZjLmNhbmNlbCgpfWlmKCFkKXt2YXIgaD13aW5kb3cuRWxlbWVudC5wcm90b3R5cGUuYW5pbWF0ZTt3aW5kb3cuRWxlbWVudC5wcm90b3R5cGUuYW5pbWF0ZT1mdW5jdGlvbihiLGMpe3JldHVybiB3aW5kb3cuU3ltYm9sJiZTeW1ib2wuaXRlcmF0b3ImJkFycmF5LnByb3RvdHlwZS5mcm9tJiZiW1N5bWJvbC5pdGVyYXRvcl0mJihiPUFycmF5LmZyb20oYikpLEFycmF5LmlzQXJyYXkoYil8fG51bGw9PT1ifHwoYj1hLmNvbnZlcnRUb0FycmF5Rm9ybShiKSksaC5jYWxsKHRoaXMsYixjKX19fShjKSwhZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIGQoYSl7dmFyIGI9d2luZG93LmRvY3VtZW50LnRpbWVsaW5lO2IuY3VycmVudFRpbWU9YSxiLl9kaXNjYXJkQW5pbWF0aW9ucygpLDA9PWIuX2FuaW1hdGlvbnMubGVuZ3RoP2Y9ITE6cmVxdWVzdEFuaW1hdGlvbkZyYW1lKGQpOwp9dmFyIGU9d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZTt3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lPWZ1bmN0aW9uKGEpe3JldHVybiBlKGZ1bmN0aW9uKGIpe3dpbmRvdy5kb2N1bWVudC50aW1lbGluZS5fdXBkYXRlQW5pbWF0aW9uc1Byb21pc2VzKCksYShiKSx3aW5kb3cuZG9jdW1lbnQudGltZWxpbmUuX3VwZGF0ZUFuaW1hdGlvbnNQcm9taXNlcygpfSl9LGIuQW5pbWF0aW9uVGltZWxpbmU9ZnVuY3Rpb24oKXt0aGlzLl9hbmltYXRpb25zPVtdLHRoaXMuY3VycmVudFRpbWU9dm9pZCAwfSxiLkFuaW1hdGlvblRpbWVsaW5lLnByb3RvdHlwZT17Z2V0QW5pbWF0aW9uczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kaXNjYXJkQW5pbWF0aW9ucygpLHRoaXMuX2FuaW1hdGlvbnMuc2xpY2UoKX0sX3VwZGF0ZUFuaW1hdGlvbnNQcm9taXNlczpmdW5jdGlvbigpe2IuYW5pbWF0aW9uc1dpdGhQcm9taXNlcz1iLmFuaW1hdGlvbnNXaXRoUHJvbWlzZXMuZmlsdGVyKGZ1bmN0aW9uKGEpe3JldHVybiBhLl91cGRhdGVQcm9taXNlcygpfSl9LF9kaXNjYXJkQW5pbWF0aW9uczpmdW5jdGlvbigpe3RoaXMuX3VwZGF0ZUFuaW1hdGlvbnNQcm9taXNlcygpLHRoaXMuX2FuaW1hdGlvbnM9dGhpcy5fYW5pbWF0aW9ucy5maWx0ZXIoZnVuY3Rpb24oYSl7cmV0dXJuImZpbmlzaGVkIiE9YS5wbGF5U3RhdGUmJiJpZGxlIiE9YS5wbGF5U3RhdGV9KX0sX3BsYXk6ZnVuY3Rpb24oYSl7dmFyIGM9bmV3IGIuQW5pbWF0aW9uKGEsdGhpcyk7cmV0dXJuIHRoaXMuX2FuaW1hdGlvbnMucHVzaChjKSxiLnJlc3RhcnRXZWJBbmltYXRpb25zTmV4dFRpY2soKSxjLl91cGRhdGVQcm9taXNlcygpLGMuX2FuaW1hdGlvbi5wbGF5KCksYy5fdXBkYXRlUHJvbWlzZXMoKSxjfSxwbGF5OmZ1bmN0aW9uKGEpe3JldHVybiBhJiZhLnJlbW92ZSgpLHRoaXMuX3BsYXkoYSl9fTt2YXIgZj0hMTtiLnJlc3RhcnRXZWJBbmltYXRpb25zTmV4dFRpY2s9ZnVuY3Rpb24oKXtmfHwoZj0hMCxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZCkpfTt2YXIgZz1uZXcgYi5BbmltYXRpb25UaW1lbGluZTtiLnRpbWVsaW5lPWc7dHJ5e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh3aW5kb3cuZG9jdW1lbnQsInRpbWVsaW5lIix7Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBnfX0pfWNhdGNoKGgpe310cnl7d2luZG93LmRvY3VtZW50LnRpbWVsaW5lPWd9Y2F0Y2goaCl7fX0oYyxlLGYpLGZ1bmN0aW9uKGEsYixjKXtiLmFuaW1hdGlvbnNXaXRoUHJvbWlzZXM9W10sYi5BbmltYXRpb249ZnVuY3Rpb24oYixjKXtpZih0aGlzLmlkPSIiLGImJmIuX2lkJiYodGhpcy5pZD1iLl9pZCksdGhpcy5lZmZlY3Q9YixiJiYoYi5fYW5pbWF0aW9uPXRoaXMpLCFjKXRocm93IG5ldyBFcnJvcigiQW5pbWF0aW9uIHdpdGggbnVsbCB0aW1lbGluZSBpcyBub3Qgc3VwcG9ydGVkIik7dGhpcy5fdGltZWxpbmU9Yyx0aGlzLl9zZXF1ZW5jZU51bWJlcj1hLnNlcXVlbmNlTnVtYmVyKyssdGhpcy5faG9sZFRpbWU9MCx0aGlzLl9wYXVzZWQ9ITEsdGhpcy5faXNHcm91cD0hMSx0aGlzLl9hbmltYXRpb249bnVsbCx0aGlzLl9jaGlsZEFuaW1hdGlvbnM9W10sdGhpcy5fY2FsbGJhY2s9bnVsbCx0aGlzLl9vbGRQbGF5U3RhdGU9ImlkbGUiLHRoaXMuX3JlYnVpbGRVbmRlcmx5aW5nQW5pbWF0aW9uKCksdGhpcy5fYW5pbWF0aW9uLmNhbmNlbCgpLHRoaXMuX3VwZGF0ZVByb21pc2VzKCl9LGIuQW5pbWF0aW9uLnByb3RvdHlwZT17X3VwZGF0ZVByb21pc2VzOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5fb2xkUGxheVN0YXRlLGI9dGhpcy5wbGF5U3RhdGU7cmV0dXJuIHRoaXMuX3JlYWR5UHJvbWlzZSYmYiE9PWEmJigiaWRsZSI9PWI/KHRoaXMuX3JlamVjdFJlYWR5UHJvbWlzZSgpLHRoaXMuX3JlYWR5UHJvbWlzZT12b2lkIDApOiJwZW5kaW5nIj09YT90aGlzLl9yZXNvbHZlUmVhZHlQcm9taXNlKCk6InBlbmRpbmciPT1iJiYodGhpcy5fcmVhZHlQcm9taXNlPXZvaWQgMCkpLHRoaXMuX2ZpbmlzaGVkUHJvbWlzZSYmYiE9PWEmJigiaWRsZSI9PWI/KHRoaXMuX3JlamVjdEZpbmlzaGVkUHJvbWlzZSgpLHRoaXMuX2ZpbmlzaGVkUHJvbWlzZT12b2lkIDApOiJmaW5pc2hlZCI9PWI/dGhpcy5fcmVzb2x2ZUZpbmlzaGVkUHJvbWlzZSgpOiJmaW5pc2hlZCI9PWEmJih0aGlzLl9maW5pc2hlZFByb21pc2U9dm9pZCAwKSksdGhpcy5fb2xkUGxheVN0YXRlPXRoaXMucGxheVN0YXRlLHRoaXMuX3JlYWR5UHJvbWlzZXx8dGhpcy5fZmluaXNoZWRQcm9taXNlfSxfcmVidWlsZFVuZGVybHlpbmdBbmltYXRpb246ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVQcm9taXNlcygpO3ZhciBhLGMsZCxlLGY9ISF0aGlzLl9hbmltYXRpb247ZiYmKGE9dGhpcy5wbGF5YmFja1JhdGUsYz10aGlzLl9wYXVzZWQsZD10aGlzLnN0YXJ0VGltZSxlPXRoaXMuY3VycmVudFRpbWUsdGhpcy5fYW5pbWF0aW9uLmNhbmNlbCgpLHRoaXMuX2FuaW1hdGlvbi5fd3JhcHBlcj1udWxsLHRoaXMuX2FuaW1hdGlvbj1udWxsKSwoIXRoaXMuZWZmZWN0fHx0aGlzLmVmZmVjdCBpbnN0YW5jZW9mIHdpbmRvdy5LZXlmcmFtZUVmZmVjdCkmJih0aGlzLl9hbmltYXRpb249Yi5uZXdVbmRlcmx5aW5nQW5pbWF0aW9uRm9yS2V5ZnJhbWVFZmZlY3QodGhpcy5lZmZlY3QpLGIuYmluZEFuaW1hdGlvbkZvcktleWZyYW1lRWZmZWN0KHRoaXMpKSwodGhpcy5lZmZlY3QgaW5zdGFuY2VvZiB3aW5kb3cuU2VxdWVuY2VFZmZlY3R8fHRoaXMuZWZmZWN0IGluc3RhbmNlb2Ygd2luZG93Lkdyb3VwRWZmZWN0KSYmKHRoaXMuX2FuaW1hdGlvbj1iLm5ld1VuZGVybHlpbmdBbmltYXRpb25Gb3JHcm91cCh0aGlzLmVmZmVjdCksYi5iaW5kQW5pbWF0aW9uRm9yR3JvdXAodGhpcykpLHRoaXMuZWZmZWN0JiZ0aGlzLmVmZmVjdC5fb25zYW1wbGUmJmIuYmluZEFuaW1hdGlvbkZvckN1c3RvbUVmZmVjdCh0aGlzKSxmJiYoMSE9YSYmKHRoaXMucGxheWJhY2tSYXRlPWEpLG51bGwhPT1kP3RoaXMuc3RhcnRUaW1lPWQ6bnVsbCE9PWU/dGhpcy5jdXJyZW50VGltZT1lOm51bGwhPT10aGlzLl9ob2xkVGltZSYmKHRoaXMuY3VycmVudFRpbWU9dGhpcy5faG9sZFRpbWUpLGMmJnRoaXMucGF1c2UoKSksdGhpcy5fdXBkYXRlUHJvbWlzZXMoKX0sX3VwZGF0ZUNoaWxkcmVuOmZ1bmN0aW9uKCl7aWYodGhpcy5lZmZlY3QmJiJpZGxlIiE9dGhpcy5wbGF5U3RhdGUpe3ZhciBhPXRoaXMuZWZmZWN0Ll90aW1pbmcuZGVsYXk7dGhpcy5fY2hpbGRBbmltYXRpb25zLmZvckVhY2goZnVuY3Rpb24oYyl7dGhpcy5fYXJyYW5nZUNoaWxkcmVuKGMsYSksdGhpcy5lZmZlY3QgaW5zdGFuY2VvZiB3aW5kb3cuU2VxdWVuY2VFZmZlY3QmJihhKz1iLmdyb3VwQ2hpbGREdXJhdGlvbihjLmVmZmVjdCkpfS5iaW5kKHRoaXMpKX19LF9zZXRFeHRlcm5hbEFuaW1hdGlvbjpmdW5jdGlvbihhKXtpZih0aGlzLmVmZmVjdCYmdGhpcy5faXNHcm91cClmb3IodmFyIGI9MDtiPHRoaXMuZWZmZWN0LmNoaWxkcmVuLmxlbmd0aDtiKyspdGhpcy5lZmZlY3QuY2hpbGRyZW5bYl0uX2FuaW1hdGlvbj1hLHRoaXMuX2NoaWxkQW5pbWF0aW9uc1tiXS5fc2V0RXh0ZXJuYWxBbmltYXRpb24oYSl9LF9jb25zdHJ1Y3RDaGlsZEFuaW1hdGlvbnM6ZnVuY3Rpb24oKXtpZih0aGlzLmVmZmVjdCYmdGhpcy5faXNHcm91cCl7dmFyIGE9dGhpcy5lZmZlY3QuX3RpbWluZy5kZWxheTt0aGlzLl9yZW1vdmVDaGlsZEFuaW1hdGlvbnMoKSx0aGlzLmVmZmVjdC5jaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uKGMpe3ZhciBkPXdpbmRvdy5kb2N1bWVudC50aW1lbGluZS5fcGxheShjKTt0aGlzLl9jaGlsZEFuaW1hdGlvbnMucHVzaChkKSxkLnBsYXliYWNrUmF0ZT10aGlzLnBsYXliYWNrUmF0ZSx0aGlzLl9wYXVzZWQmJmQucGF1c2UoKSxjLl9hbmltYXRpb249dGhpcy5lZmZlY3QuX2FuaW1hdGlvbix0aGlzLl9hcnJhbmdlQ2hpbGRyZW4oZCxhKSx0aGlzLmVmZmVjdCBpbnN0YW5jZW9mIHdpbmRvdy5TZXF1ZW5jZUVmZmVjdCYmKGErPWIuZ3JvdXBDaGlsZER1cmF0aW9uKGMpKX0uYmluZCh0aGlzKSl9fSxfYXJyYW5nZUNoaWxkcmVuOmZ1bmN0aW9uKGEsYil7bnVsbD09PXRoaXMuc3RhcnRUaW1lP2EuY3VycmVudFRpbWU9dGhpcy5jdXJyZW50VGltZS1iL3RoaXMucGxheWJhY2tSYXRlOmEuc3RhcnRUaW1lIT09dGhpcy5zdGFydFRpbWUrYi90aGlzLnBsYXliYWNrUmF0ZSYmKGEuc3RhcnRUaW1lPXRoaXMuc3RhcnRUaW1lK2IvdGhpcy5wbGF5YmFja1JhdGUpfSxnZXQgdGltZWxpbmUoKXtyZXR1cm4gdGhpcy5fdGltZWxpbmV9LGdldCBwbGF5U3RhdGUoKXtyZXR1cm4gdGhpcy5fYW5pbWF0aW9uP3RoaXMuX2FuaW1hdGlvbi5wbGF5U3RhdGU6ImlkbGUifSxnZXQgZmluaXNoZWQoKXtyZXR1cm4gd2luZG93LlByb21pc2U/KHRoaXMuX2ZpbmlzaGVkUHJvbWlzZXx8KC0xPT1iLmFuaW1hdGlvbnNXaXRoUHJvbWlzZXMuaW5kZXhPZih0aGlzKSYmYi5hbmltYXRpb25zV2l0aFByb21pc2VzLnB1c2godGhpcyksdGhpcy5fZmluaXNoZWRQcm9taXNlPW5ldyBQcm9taXNlKGZ1bmN0aW9uKGEsYil7dGhpcy5fcmVzb2x2ZUZpbmlzaGVkUHJvbWlzZT1mdW5jdGlvbigpe2EodGhpcyl9LHRoaXMuX3JlamVjdEZpbmlzaGVkUHJvbWlzZT1mdW5jdGlvbigpe2Ioe3R5cGU6RE9NRXhjZXB0aW9uLkFCT1JUX0VSUixuYW1lOiJBYm9ydEVycm9yIn0pfX0uYmluZCh0aGlzKSksImZpbmlzaGVkIj09dGhpcy5wbGF5U3RhdGUmJnRoaXMuX3Jlc29sdmVGaW5pc2hlZFByb21pc2UoKSksdGhpcy5fZmluaXNoZWRQcm9taXNlKTooY29uc29sZS53YXJuKCJBbmltYXRpb24gUHJvbWlzZXMgcmVxdWlyZSBKYXZhU2NyaXB0IFByb21pc2UgY29uc3RydWN0b3IiKSxudWxsKX0sZ2V0IHJlYWR5KCl7cmV0dXJuIHdpbmRvdy5Qcm9taXNlPyh0aGlzLl9yZWFkeVByb21pc2V8fCgtMT09Yi5hbmltYXRpb25zV2l0aFByb21pc2VzLmluZGV4T2YodGhpcykmJmIuYW5pbWF0aW9uc1dpdGhQcm9taXNlcy5wdXNoKHRoaXMpLHRoaXMuX3JlYWR5UHJvbWlzZT1uZXcgUHJvbWlzZShmdW5jdGlvbihhLGIpe3RoaXMuX3Jlc29sdmVSZWFkeVByb21pc2U9ZnVuY3Rpb24oKXthKHRoaXMpfSx0aGlzLl9yZWplY3RSZWFkeVByb21pc2U9ZnVuY3Rpb24oKXtiKHt0eXBlOkRPTUV4Y2VwdGlvbi5BQk9SVF9FUlIsbmFtZToiQWJvcnRFcnJvciJ9KX19LmJpbmQodGhpcykpLCJwZW5kaW5nIiE9PXRoaXMucGxheVN0YXRlJiZ0aGlzLl9yZXNvbHZlUmVhZHlQcm9taXNlKCkpLHRoaXMuX3JlYWR5UHJvbWlzZSk6KGNvbnNvbGUud2FybigiQW5pbWF0aW9uIFByb21pc2VzIHJlcXVpcmUgSmF2YVNjcmlwdCBQcm9taXNlIGNvbnN0cnVjdG9yIiksbnVsbCl9LGdldCBvbmZpbmlzaCgpe3JldHVybiB0aGlzLl9hbmltYXRpb24ub25maW5pc2h9LHNldCBvbmZpbmlzaChhKXsiZnVuY3Rpb24iPT10eXBlb2YgYT90aGlzLl9hbmltYXRpb24ub25maW5pc2g9ZnVuY3Rpb24oYil7Yi50YXJnZXQ9dGhpcyxhLmNhbGwodGhpcyxiKX0uYmluZCh0aGlzKTp0aGlzLl9hbmltYXRpb24ub25maW5pc2g9YX0sZ2V0IG9uY2FuY2VsKCl7cmV0dXJuIHRoaXMuX2FuaW1hdGlvbi5vbmNhbmNlbH0sc2V0IG9uY2FuY2VsKGEpeyJmdW5jdGlvbiI9PXR5cGVvZiBhP3RoaXMuX2FuaW1hdGlvbi5vbmNhbmNlbD1mdW5jdGlvbihiKXtiLnRhcmdldD10aGlzLGEuY2FsbCh0aGlzLGIpfS5iaW5kKHRoaXMpOnRoaXMuX2FuaW1hdGlvbi5vbmNhbmNlbD1hfSxnZXQgY3VycmVudFRpbWUoKXt0aGlzLl91cGRhdGVQcm9taXNlcygpO3ZhciBhPXRoaXMuX2FuaW1hdGlvbi5jdXJyZW50VGltZTtyZXR1cm4gdGhpcy5fdXBkYXRlUHJvbWlzZXMoKSxhfSxzZXQgY3VycmVudFRpbWUoYSl7dGhpcy5fdXBkYXRlUHJvbWlzZXMoKSx0aGlzLl9hbmltYXRpb24uY3VycmVudFRpbWU9aXNGaW5pdGUoYSk/YTpNYXRoLnNpZ24oYSkqTnVtYmVyLk1BWF9WQUxVRSx0aGlzLl9yZWdpc3RlcigpLHRoaXMuX2ZvckVhY2hDaGlsZChmdW5jdGlvbihiLGMpe2IuY3VycmVudFRpbWU9YS1jfSksdGhpcy5fdXBkYXRlUHJvbWlzZXMoKX0sZ2V0IHN0YXJ0VGltZSgpe3JldHVybiB0aGlzLl9hbmltYXRpb24uc3RhcnRUaW1lfSxzZXQgc3RhcnRUaW1lKGEpe3RoaXMuX3VwZGF0ZVByb21pc2VzKCksdGhpcy5fYW5pbWF0aW9uLnN0YXJ0VGltZT1pc0Zpbml0ZShhKT9hOk1hdGguc2lnbihhKSpOdW1iZXIuTUFYX1ZBTFVFLHRoaXMuX3JlZ2lzdGVyKCksdGhpcy5fZm9yRWFjaENoaWxkKGZ1bmN0aW9uKGIsYyl7Yi5zdGFydFRpbWU9YStjfSksdGhpcy5fdXBkYXRlUHJvbWlzZXMoKX0sZ2V0IHBsYXliYWNrUmF0ZSgpe3JldHVybiB0aGlzLl9hbmltYXRpb24ucGxheWJhY2tSYXRlfSxzZXQgcGxheWJhY2tSYXRlKGEpe3RoaXMuX3VwZGF0ZVByb21pc2VzKCk7dmFyIGI9dGhpcy5jdXJyZW50VGltZTt0aGlzLl9hbmltYXRpb24ucGxheWJhY2tSYXRlPWEsdGhpcy5fZm9yRWFjaENoaWxkKGZ1bmN0aW9uKGIpe2IucGxheWJhY2tSYXRlPWF9KSwicGF1c2VkIiE9dGhpcy5wbGF5U3RhdGUmJiJpZGxlIiE9dGhpcy5wbGF5U3RhdGUmJnRoaXMucGxheSgpLG51bGwhPT1iJiYodGhpcy5jdXJyZW50VGltZT1iKSx0aGlzLl91cGRhdGVQcm9taXNlcygpfSxwbGF5OmZ1bmN0aW9uKCl7dGhpcy5fdXBkYXRlUHJvbWlzZXMoKSx0aGlzLl9wYXVzZWQ9ITEsdGhpcy5fYW5pbWF0aW9uLnBsYXkoKSwtMT09dGhpcy5fdGltZWxpbmUuX2FuaW1hdGlvbnMuaW5kZXhPZih0aGlzKSYmdGhpcy5fdGltZWxpbmUuX2FuaW1hdGlvbnMucHVzaCh0aGlzKSx0aGlzLl9yZWdpc3RlcigpLGIuYXdhaXRTdGFydFRpbWUodGhpcyksdGhpcy5fZm9yRWFjaENoaWxkKGZ1bmN0aW9uKGEpe3ZhciBiPWEuY3VycmVudFRpbWU7YS5wbGF5KCksYS5jdXJyZW50VGltZT1ifSksdGhpcy5fdXBkYXRlUHJvbWlzZXMoKX0scGF1c2U6ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVQcm9taXNlcygpLHRoaXMuY3VycmVudFRpbWUmJih0aGlzLl9ob2xkVGltZT10aGlzLmN1cnJlbnRUaW1lKSx0aGlzLl9hbmltYXRpb24ucGF1c2UoKSx0aGlzLl9yZWdpc3RlcigpLHRoaXMuX2ZvckVhY2hDaGlsZChmdW5jdGlvbihhKXthLnBhdXNlKCl9KSx0aGlzLl9wYXVzZWQ9ITAsdGhpcy5fdXBkYXRlUHJvbWlzZXMoKX0sZmluaXNoOmZ1bmN0aW9uKCl7dGhpcy5fdXBkYXRlUHJvbWlzZXMoKSx0aGlzLl9hbmltYXRpb24uZmluaXNoKCksdGhpcy5fcmVnaXN0ZXIoKSx0aGlzLl91cGRhdGVQcm9taXNlcygpfSxjYW5jZWw6ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVQcm9taXNlcygpLHRoaXMuX2FuaW1hdGlvbi5jYW5jZWwoKSx0aGlzLl9yZWdpc3RlcigpLHRoaXMuX3JlbW92ZUNoaWxkQW5pbWF0aW9ucygpLHRoaXMuX3VwZGF0ZVByb21pc2VzKCl9LHJldmVyc2U6ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVQcm9taXNlcygpO3ZhciBhPXRoaXMuY3VycmVudFRpbWU7dGhpcy5fYW5pbWF0aW9uLnJldmVyc2UoKSx0aGlzLl9mb3JFYWNoQ2hpbGQoZnVuY3Rpb24oYSl7YS5yZXZlcnNlKCl9KSxudWxsIT09YSYmKHRoaXMuY3VycmVudFRpbWU9YSksdGhpcy5fdXBkYXRlUHJvbWlzZXMoKX0sYWRkRXZlbnRMaXN0ZW5lcjpmdW5jdGlvbihhLGIpe3ZhciBjPWI7ImZ1bmN0aW9uIj09dHlwZW9mIGImJihjPWZ1bmN0aW9uKGEpe2EudGFyZ2V0PXRoaXMsYi5jYWxsKHRoaXMsYSl9LmJpbmQodGhpcyksYi5fd3JhcHBlcj1jKSx0aGlzLl9hbmltYXRpb24uYWRkRXZlbnRMaXN0ZW5lcihhLGMpfSxyZW1vdmVFdmVudExpc3RlbmVyOmZ1bmN0aW9uKGEsYil7dGhpcy5fYW5pbWF0aW9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoYSxiJiZiLl93cmFwcGVyfHxiKX0sX3JlbW92ZUNoaWxkQW5pbWF0aW9uczpmdW5jdGlvbigpe2Zvcig7dGhpcy5fY2hpbGRBbmltYXRpb25zLmxlbmd0aDspdGhpcy5fY2hpbGRBbmltYXRpb25zLnBvcCgpLmNhbmNlbCgpfSxfZm9yRWFjaENoaWxkOmZ1bmN0aW9uKGIpe3ZhciBjPTA7aWYodGhpcy5lZmZlY3QuY2hpbGRyZW4mJnRoaXMuX2NoaWxkQW5pbWF0aW9ucy5sZW5ndGg8dGhpcy5lZmZlY3QuY2hpbGRyZW4ubGVuZ3RoJiZ0aGlzLl9jb25zdHJ1Y3RDaGlsZEFuaW1hdGlvbnMoKSx0aGlzLl9jaGlsZEFuaW1hdGlvbnMuZm9yRWFjaChmdW5jdGlvbihhKXtiLmNhbGwodGhpcyxhLGMpLHRoaXMuZWZmZWN0IGluc3RhbmNlb2Ygd2luZG93LlNlcXVlbmNlRWZmZWN0JiYoYys9YS5lZmZlY3QuYWN0aXZlRHVyYXRpb24pfS5iaW5kKHRoaXMpKSwicGVuZGluZyIhPXRoaXMucGxheVN0YXRlKXt2YXIgZD10aGlzLmVmZmVjdC5fdGltaW5nLGU9dGhpcy5jdXJyZW50VGltZTtudWxsIT09ZSYmKGU9YS5jYWxjdWxhdGVUaW1lRnJhY3Rpb24oYS5jYWxjdWxhdGVBY3RpdmVEdXJhdGlvbihkKSxlLGQpKSwobnVsbD09ZXx8aXNOYU4oZSkpJiZ0aGlzLl9yZW1vdmVDaGlsZEFuaW1hdGlvbnMoKX19fSx3aW5kb3cuQW5pbWF0aW9uPWIuQW5pbWF0aW9ufShjLGUsZiksZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIGQoYil7dGhpcy5fZnJhbWVzPWEubm9ybWFsaXplS2V5ZnJhbWVzKGIpfWZ1bmN0aW9uIGUoKXtmb3IodmFyIGE9ITE7aS5sZW5ndGg7KXt2YXIgYj1pLnNoaWZ0KCk7Yi5fdXBkYXRlQ2hpbGRyZW4oKSxhPSEwfXJldHVybiBhfXZhciBmPWZ1bmN0aW9uKGEpe2lmKGEuX2FuaW1hdGlvbj12b2lkIDAsYSBpbnN0YW5jZW9mIHdpbmRvdy5TZXF1ZW5jZUVmZmVjdHx8YSBpbnN0YW5jZW9mIHdpbmRvdy5Hcm91cEVmZmVjdClmb3IodmFyIGI9MDtiPGEuY2hpbGRyZW4ubGVuZ3RoO2IrKylmKGEuY2hpbGRyZW5bYl0pfTtiLnJlbW92ZU11bHRpPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj1bXSxjPTA7YzxhLmxlbmd0aDtjKyspe3ZhciBkPWFbY107ZC5fcGFyZW50PygtMT09Yi5pbmRleE9mKGQuX3BhcmVudCkmJmIucHVzaChkLl9wYXJlbnQpLGQuX3BhcmVudC5jaGlsZHJlbi5zcGxpY2UoZC5fcGFyZW50LmNoaWxkcmVuLmluZGV4T2YoZCksMSksZC5fcGFyZW50PW51bGwsZihkKSk6ZC5fYW5pbWF0aW9uJiZkLl9hbmltYXRpb24uZWZmZWN0PT1kJiYoZC5fYW5pbWF0aW9uLmNhbmNlbCgpLGQuX2FuaW1hdGlvbi5lZmZlY3Q9bmV3IEtleWZyYW1lRWZmZWN0KG51bGwsW10pLGQuX2FuaW1hdGlvbi5fY2FsbGJhY2smJihkLl9hbmltYXRpb24uX2NhbGxiYWNrLl9hbmltYXRpb249bnVsbCksZC5fYW5pbWF0aW9uLl9yZWJ1aWxkVW5kZXJseWluZ0FuaW1hdGlvbigpLGYoZCkpfWZvcihjPTA7YzxiLmxlbmd0aDtjKyspYltjXS5fcmVidWlsZCgpfSxiLktleWZyYW1lRWZmZWN0PWZ1bmN0aW9uKGIsYyxlLGYpe3JldHVybiB0aGlzLnRhcmdldD1iLHRoaXMuX3BhcmVudD1udWxsLGU9YS5udW1lcmljVGltaW5nVG9PYmplY3QoZSksdGhpcy5fdGltaW5nSW5wdXQ9YS5jbG9uZVRpbWluZ0lucHV0KGUpLHRoaXMuX3RpbWluZz1hLm5vcm1hbGl6ZVRpbWluZ0lucHV0KGUpLHRoaXMudGltaW5nPWEubWFrZVRpbWluZyhlLCExLHRoaXMpLHRoaXMudGltaW5nLl9lZmZlY3Q9dGhpcywiZnVuY3Rpb24iPT10eXBlb2YgYz8oYS5kZXByZWNhdGVkKCJDdXN0b20gS2V5ZnJhbWVFZmZlY3QiLCIyMDE1LTA2LTIyIiwiVXNlIEtleWZyYW1lRWZmZWN0Lm9uc2FtcGxlIGluc3RlYWQuIiksdGhpcy5fbm9ybWFsaXplZEtleWZyYW1lcz1jKTp0aGlzLl9ub3JtYWxpemVkS2V5ZnJhbWVzPW5ldyBkKGMpLHRoaXMuX2tleWZyYW1lcz1jLHRoaXMuYWN0aXZlRHVyYXRpb249YS5jYWxjdWxhdGVBY3RpdmVEdXJhdGlvbih0aGlzLl90aW1pbmcpLHRoaXMuX2lkPWYsdGhpc30sYi5LZXlmcmFtZUVmZmVjdC5wcm90b3R5cGU9e2dldEZyYW1lczpmdW5jdGlvbigpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLl9ub3JtYWxpemVkS2V5ZnJhbWVzP3RoaXMuX25vcm1hbGl6ZWRLZXlmcmFtZXM6dGhpcy5fbm9ybWFsaXplZEtleWZyYW1lcy5fZnJhbWVzfSxzZXQgb25zYW1wbGUoYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMuZ2V0RnJhbWVzKCkpdGhyb3cgbmV3IEVycm9yKCJTZXR0aW5nIG9uc2FtcGxlIG9uIGN1c3RvbSBlZmZlY3QgS2V5ZnJhbWVFZmZlY3QgaXMgbm90IHN1cHBvcnRlZC4iKTt0aGlzLl9vbnNhbXBsZT1hLHRoaXMuX2FuaW1hdGlvbiYmdGhpcy5fYW5pbWF0aW9uLl9yZWJ1aWxkVW5kZXJseWluZ0FuaW1hdGlvbigpfSxnZXQgcGFyZW50KCl7cmV0dXJuIHRoaXMuX3BhcmVudH0sY2xvbmU6ZnVuY3Rpb24oKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5nZXRGcmFtZXMoKSl0aHJvdyBuZXcgRXJyb3IoIkNsb25pbmcgY3VzdG9tIGVmZmVjdHMgaXMgbm90IHN1cHBvcnRlZC4iKTt2YXIgYj1uZXcgS2V5ZnJhbWVFZmZlY3QodGhpcy50YXJnZXQsW10sYS5jbG9uZVRpbWluZ0lucHV0KHRoaXMuX3RpbWluZ0lucHV0KSx0aGlzLl9pZCk7cmV0dXJuIGIuX25vcm1hbGl6ZWRLZXlmcmFtZXM9dGhpcy5fbm9ybWFsaXplZEtleWZyYW1lcyxiLl9rZXlmcmFtZXM9dGhpcy5fa2V5ZnJhbWVzLGJ9LHJlbW92ZTpmdW5jdGlvbigpe2IucmVtb3ZlTXVsdGkoW3RoaXNdKX19O3ZhciBnPUVsZW1lbnQucHJvdG90eXBlLmFuaW1hdGU7RWxlbWVudC5wcm90b3R5cGUuYW5pbWF0ZT1mdW5jdGlvbihhLGMpe3ZhciBkPSIiO3JldHVybiBjJiZjLmlkJiYoZD1jLmlkKSxiLnRpbWVsaW5lLl9wbGF5KG5ldyBiLktleWZyYW1lRWZmZWN0KHRoaXMsYSxjLGQpKX07dmFyIGg9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiwiZGl2Iik7Yi5uZXdVbmRlcmx5aW5nQW5pbWF0aW9uRm9yS2V5ZnJhbWVFZmZlY3Q9ZnVuY3Rpb24oYSl7aWYoYSl7dmFyIGI9YS50YXJnZXR8fGgsYz1hLl9rZXlmcmFtZXM7ImZ1bmN0aW9uIj09dHlwZW9mIGMmJihjPVtdKTt2YXIgZD1hLl90aW1pbmdJbnB1dDtkLmlkPWEuX2lkfWVsc2UgdmFyIGI9aCxjPVtdLGQ9MDtyZXR1cm4gZy5hcHBseShiLFtjLGRdKX0sYi5iaW5kQW5pbWF0aW9uRm9yS2V5ZnJhbWVFZmZlY3Q9ZnVuY3Rpb24oYSl7YS5lZmZlY3QmJiJmdW5jdGlvbiI9PXR5cGVvZiBhLmVmZmVjdC5fbm9ybWFsaXplZEtleWZyYW1lcyYmYi5iaW5kQW5pbWF0aW9uRm9yQ3VzdG9tRWZmZWN0KGEpfTt2YXIgaT1bXTtiLmF3YWl0U3RhcnRUaW1lPWZ1bmN0aW9uKGEpe251bGw9PT1hLnN0YXJ0VGltZSYmYS5faXNHcm91cCYmKDA9PWkubGVuZ3RoJiZyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZSksaS5wdXNoKGEpKX07dmFyIGo9d2luZG93LmdldENvbXB1dGVkU3R5bGU7T2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdywiZ2V0Q29tcHV0ZWRTdHlsZSIse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHZhbHVlOmZ1bmN0aW9uKCl7d2luZG93LmRvY3VtZW50LnRpbWVsaW5lLl91cGRhdGVBbmltYXRpb25zUHJvbWlzZXMoKTt2YXIgYT1qLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZSgpJiYoYT1qLmFwcGx5KHRoaXMsYXJndW1lbnRzKSksd2luZG93LmRvY3VtZW50LnRpbWVsaW5lLl91cGRhdGVBbmltYXRpb25zUHJvbWlzZXMoKSxhfX0pLHdpbmRvdy5LZXlmcmFtZUVmZmVjdD1iLktleWZyYW1lRWZmZWN0LHdpbmRvdy5FbGVtZW50LnByb3RvdHlwZS5nZXRBbmltYXRpb25zPWZ1bmN0aW9uKCl7cmV0dXJuIGRvY3VtZW50LnRpbWVsaW5lLmdldEFuaW1hdGlvbnMoKS5maWx0ZXIoZnVuY3Rpb24oYSl7cmV0dXJuIG51bGwhPT1hLmVmZmVjdCYmYS5lZmZlY3QudGFyZ2V0PT10aGlzfS5iaW5kKHRoaXMpKX19KGMsZSxmKSxmdW5jdGlvbihhLGIsYyl7ZnVuY3Rpb24gZChhKXthLl9yZWdpc3RlcmVkfHwoYS5fcmVnaXN0ZXJlZD0hMCxnLnB1c2goYSksaHx8KGg9ITAscmVxdWVzdEFuaW1hdGlvbkZyYW1lKGUpKSl9ZnVuY3Rpb24gZShhKXt2YXIgYj1nO2c9W10sYi5zb3J0KGZ1bmN0aW9uKGEsYil7cmV0dXJuIGEuX3NlcXVlbmNlTnVtYmVyLWIuX3NlcXVlbmNlTnVtYmVyfSksYj1iLmZpbHRlcihmdW5jdGlvbihhKXthKCk7dmFyIGI9YS5fYW5pbWF0aW9uP2EuX2FuaW1hdGlvbi5wbGF5U3RhdGU6ImlkbGUiO3JldHVybiJydW5uaW5nIiE9YiYmInBlbmRpbmciIT1iJiYoYS5fcmVnaXN0ZXJlZD0hMSksYS5fcmVnaXN0ZXJlZH0pLGcucHVzaC5hcHBseShnLGIpLGcubGVuZ3RoPyhoPSEwLHJlcXVlc3RBbmltYXRpb25GcmFtZShlKSk6aD0hMX12YXIgZj0oZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiwiZGl2IiksMCk7Yi5iaW5kQW5pbWF0aW9uRm9yQ3VzdG9tRWZmZWN0PWZ1bmN0aW9uKGIpe3ZhciBjLGU9Yi5lZmZlY3QudGFyZ2V0LGc9ImZ1bmN0aW9uIj09dHlwZW9mIGIuZWZmZWN0LmdldEZyYW1lcygpO2M9Zz9iLmVmZmVjdC5nZXRGcmFtZXMoKTpiLmVmZmVjdC5fb25zYW1wbGU7dmFyIGg9Yi5lZmZlY3QudGltaW5nLGk9bnVsbDtoPWEubm9ybWFsaXplVGltaW5nSW5wdXQoaCk7dmFyIGo9ZnVuY3Rpb24oKXt2YXIgZD1qLl9hbmltYXRpb24/ai5fYW5pbWF0aW9uLmN1cnJlbnRUaW1lOm51bGw7bnVsbCE9PWQmJihkPWEuY2FsY3VsYXRlVGltZUZyYWN0aW9uKGEuY2FsY3VsYXRlQWN0aXZlRHVyYXRpb24oaCksZCxoKSxpc05hTihkKSYmKGQ9bnVsbCkpLGQhPT1pJiYoZz9jKGQsZSxiLmVmZmVjdCk6YyhkLGIuZWZmZWN0LGIuZWZmZWN0Ll9hbmltYXRpb24pKSxpPWR9O2ouX2FuaW1hdGlvbj1iLGouX3JlZ2lzdGVyZWQ9ITEsai5fc2VxdWVuY2VOdW1iZXI9ZisrLGIuX2NhbGxiYWNrPWosZChqKX07dmFyIGc9W10saD0hMTtiLkFuaW1hdGlvbi5wcm90b3R5cGUuX3JlZ2lzdGVyPWZ1bmN0aW9uKCl7dGhpcy5fY2FsbGJhY2smJmQodGhpcy5fY2FsbGJhY2spfX0oYyxlLGYpLGZ1bmN0aW9uKGEsYixjKXtmdW5jdGlvbiBkKGEpe3JldHVybiBhLl90aW1pbmcuZGVsYXkrYS5hY3RpdmVEdXJhdGlvbithLl90aW1pbmcuZW5kRGVsYXl9ZnVuY3Rpb24gZShiLGMsZCl7dGhpcy5faWQ9ZCx0aGlzLl9wYXJlbnQ9bnVsbCx0aGlzLmNoaWxkcmVuPWJ8fFtdLHRoaXMuX3JlcGFyZW50KHRoaXMuY2hpbGRyZW4pLGM9YS5udW1lcmljVGltaW5nVG9PYmplY3QoYyksdGhpcy5fdGltaW5nSW5wdXQ9YS5jbG9uZVRpbWluZ0lucHV0KGMpLHRoaXMuX3RpbWluZz1hLm5vcm1hbGl6ZVRpbWluZ0lucHV0KGMsITApLHRoaXMudGltaW5nPWEubWFrZVRpbWluZyhjLCEwLHRoaXMpLHRoaXMudGltaW5nLl9lZmZlY3Q9dGhpcywiYXV0byI9PT10aGlzLl90aW1pbmcuZHVyYXRpb24mJih0aGlzLl90aW1pbmcuZHVyYXRpb249dGhpcy5hY3RpdmVEdXJhdGlvbil9d2luZG93LlNlcXVlbmNlRWZmZWN0PWZ1bmN0aW9uKCl7ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LHdpbmRvdy5Hcm91cEVmZmVjdD1mdW5jdGlvbigpe2UuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxlLnByb3RvdHlwZT17X2lzQW5jZXN0b3I6ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPXRoaXM7bnVsbCE9PWI7KXtpZihiPT1hKXJldHVybiEwO2I9Yi5fcGFyZW50fXJldHVybiExfSxfcmVidWlsZDpmdW5jdGlvbigpe2Zvcih2YXIgYT10aGlzO2E7KSJhdXRvIj09PWEudGltaW5nLmR1cmF0aW9uJiYoYS5fdGltaW5nLmR1cmF0aW9uPWEuYWN0aXZlRHVyYXRpb24pLGE9YS5fcGFyZW50O3RoaXMuX2FuaW1hdGlvbiYmdGhpcy5fYW5pbWF0aW9uLl9yZWJ1aWxkVW5kZXJseWluZ0FuaW1hdGlvbigpfSxfcmVwYXJlbnQ6ZnVuY3Rpb24oYSl7Yi5yZW1vdmVNdWx0aShhKTtmb3IodmFyIGM9MDtjPGEubGVuZ3RoO2MrKylhW2NdLl9wYXJlbnQ9dGhpc30sX3B1dENoaWxkOmZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjPWI/IkNhbm5vdCBhcHBlbmQgYW4gYW5jZXN0b3Igb3Igc2VsZiI6IkNhbm5vdCBwcmVwZW5kIGFuIGFuY2VzdG9yIG9yIHNlbGYiLGQ9MDtkPGEubGVuZ3RoO2QrKylpZih0aGlzLl9pc0FuY2VzdG9yKGFbZF0pKXRocm93e3R5cGU6RE9NRXhjZXB0aW9uLkhJRVJBUkNIWV9SRVFVRVNUX0VSUixuYW1lOiJIaWVyYXJjaHlSZXF1ZXN0RXJyb3IiLG1lc3NhZ2U6Y307Zm9yKHZhciBkPTA7ZDxhLmxlbmd0aDtkKyspYj90aGlzLmNoaWxkcmVuLnB1c2goYVtkXSk6dGhpcy5jaGlsZHJlbi51bnNoaWZ0KGFbZF0pO3RoaXMuX3JlcGFyZW50KGEpLHRoaXMuX3JlYnVpbGQoKX0sYXBwZW5kOmZ1bmN0aW9uKCl7dGhpcy5fcHV0Q2hpbGQoYXJndW1lbnRzLCEwKX0scHJlcGVuZDpmdW5jdGlvbigpe3RoaXMuX3B1dENoaWxkKGFyZ3VtZW50cywhMSl9LGdldCBwYXJlbnQoKXtyZXR1cm4gdGhpcy5fcGFyZW50fSxnZXQgZmlyc3RDaGlsZCgpe3JldHVybiB0aGlzLmNoaWxkcmVuLmxlbmd0aD90aGlzLmNoaWxkcmVuWzBdOm51bGx9LGdldCBsYXN0Q2hpbGQoKXtyZXR1cm4gdGhpcy5jaGlsZHJlbi5sZW5ndGg/dGhpcy5jaGlsZHJlblt0aGlzLmNoaWxkcmVuLmxlbmd0aC0xXTpudWxsfSxjbG9uZTpmdW5jdGlvbigpe2Zvcih2YXIgYj1hLmNsb25lVGltaW5nSW5wdXQodGhpcy5fdGltaW5nSW5wdXQpLGM9W10sZD0wO2Q8dGhpcy5jaGlsZHJlbi5sZW5ndGg7ZCsrKWMucHVzaCh0aGlzLmNoaWxkcmVuW2RdLmNsb25lKCkpO3JldHVybiB0aGlzIGluc3RhbmNlb2YgR3JvdXBFZmZlY3Q/bmV3IEdyb3VwRWZmZWN0KGMsYik6bmV3IFNlcXVlbmNlRWZmZWN0KGMsYil9LHJlbW92ZTpmdW5jdGlvbigpe2IucmVtb3ZlTXVsdGkoW3RoaXNdKX19LHdpbmRvdy5TZXF1ZW5jZUVmZmVjdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlLnByb3RvdHlwZSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdy5TZXF1ZW5jZUVmZmVjdC5wcm90b3R5cGUsImFjdGl2ZUR1cmF0aW9uIix7Z2V0OmZ1bmN0aW9uKCl7dmFyIGE9MDtyZXR1cm4gdGhpcy5jaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uKGIpe2ErPWQoYil9KSxNYXRoLm1heChhLDApfX0pLHdpbmRvdy5Hcm91cEVmZmVjdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlLnByb3RvdHlwZSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdy5Hcm91cEVmZmVjdC5wcm90b3R5cGUsImFjdGl2ZUR1cmF0aW9uIix7Z2V0OmZ1bmN0aW9uKCl7dmFyIGE9MDtyZXR1cm4gdGhpcy5jaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uKGIpe2E9TWF0aC5tYXgoYSxkKGIpKX0pLGF9fSksYi5uZXdVbmRlcmx5aW5nQW5pbWF0aW9uRm9yR3JvdXA9ZnVuY3Rpb24oYyl7dmFyIGQsZT1udWxsLGY9ZnVuY3Rpb24oYil7dmFyIGM9ZC5fd3JhcHBlcjtyZXR1cm4gYyYmInBlbmRpbmciIT1jLnBsYXlTdGF0ZSYmYy5lZmZlY3Q/bnVsbD09Yj92b2lkIGMuX3JlbW92ZUNoaWxkQW5pbWF0aW9ucygpOjA9PWImJmMucGxheWJhY2tSYXRlPDAmJihlfHwoZT1hLm5vcm1hbGl6ZVRpbWluZ0lucHV0KGMuZWZmZWN0LnRpbWluZykpLGI9YS5jYWxjdWxhdGVUaW1lRnJhY3Rpb24oYS5jYWxjdWxhdGVBY3RpdmVEdXJhdGlvbihlKSwtMSxlKSxpc05hTihiKXx8bnVsbD09Yik/KGMuX2ZvckVhY2hDaGlsZChmdW5jdGlvbihhKXthLmN1cnJlbnRUaW1lPS0xfSksdm9pZCBjLl9yZW1vdmVDaGlsZEFuaW1hdGlvbnMoKSk6dm9pZCAwOnZvaWQgMH0sZz1uZXcgS2V5ZnJhbWVFZmZlY3QobnVsbCxbXSxjLl90aW1pbmcsYy5faWQpO3JldHVybiBnLm9uc2FtcGxlPWYsZD1iLnRpbWVsaW5lLl9wbGF5KGcpfSxiLmJpbmRBbmltYXRpb25Gb3JHcm91cD1mdW5jdGlvbihhKXthLl9hbmltYXRpb24uX3dyYXBwZXI9YSxhLl9pc0dyb3VwPSEwLGIuYXdhaXRTdGFydFRpbWUoYSksYS5fY29uc3RydWN0Q2hpbGRBbmltYXRpb25zKCksYS5fc2V0RXh0ZXJuYWxBbmltYXRpb24oYSl9LGIuZ3JvdXBDaGlsZER1cmF0aW9uPWR9KGMsZSxmKSxiWyJ0cnVlIl09YX0oe30sZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30oKSk7Cjwvc2NyaXB0PjxzY3JpcHQ+LyoqCkBsaWNlbnNlIEBub2NvbXBpbGUKQ29weXJpZ2h0IChjKSAyMDE4IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dApUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dApUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQKQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28Kc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKKi8KKGZ1bmN0aW9uKCl7LyoKCiBDb3B5cmlnaHQgKGMpIDIwMTYgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dAogVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQKIFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dAogQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28KIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiovCid1c2Ugc3RyaWN0Jzt2YXIgbixwPSJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93JiZ3aW5kb3c9PT10aGlzP3RoaXM6InVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWwmJm51bGwhPWdsb2JhbD9nbG9iYWw6dGhpcyxhYT0iZnVuY3Rpb24iPT10eXBlb2YgT2JqZWN0LmRlZmluZVByb3BlcnRpZXM/T2JqZWN0LmRlZmluZVByb3BlcnR5OmZ1bmN0aW9uKGEsYixjKXthIT1BcnJheS5wcm90b3R5cGUmJmEhPU9iamVjdC5wcm90b3R5cGUmJihhW2JdPWMudmFsdWUpfTtmdW5jdGlvbiBiYSgpe2JhPWZ1bmN0aW9uKCl7fTtwLlN5bWJvbHx8KHAuU3ltYm9sPWNhKX12YXIgY2E9ZnVuY3Rpb24oKXt2YXIgYT0wO3JldHVybiBmdW5jdGlvbihiKXtyZXR1cm4ianNjb21wX3N5bWJvbF8iKyhifHwiIikrYSsrfX0oKTsKZnVuY3Rpb24gZGEoKXtiYSgpO3ZhciBhPXAuU3ltYm9sLml0ZXJhdG9yO2F8fChhPXAuU3ltYm9sLml0ZXJhdG9yPXAuU3ltYm9sKCJpdGVyYXRvciIpKTsiZnVuY3Rpb24iIT10eXBlb2YgQXJyYXkucHJvdG90eXBlW2FdJiZhYShBcnJheS5wcm90b3R5cGUsYSx7Y29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIGVhKHRoaXMpfX0pO2RhPWZ1bmN0aW9uKCl7fX1mdW5jdGlvbiBlYShhKXt2YXIgYj0wO3JldHVybiBmYShmdW5jdGlvbigpe3JldHVybiBiPGEubGVuZ3RoP3tkb25lOiExLHZhbHVlOmFbYisrXX06e2RvbmU6ITB9fSl9ZnVuY3Rpb24gZmEoYSl7ZGEoKTthPXtuZXh0OmF9O2FbcC5TeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9O3JldHVybiBhfWZ1bmN0aW9uIGlhKGEpe2RhKCk7dmFyIGI9YVtTeW1ib2wuaXRlcmF0b3JdO3JldHVybiBiP2IuY2FsbChhKTplYShhKX0KZnVuY3Rpb24gamEoYSl7Zm9yKHZhciBiLGM9W107IShiPWEubmV4dCgpKS5kb25lOyljLnB1c2goYi52YWx1ZSk7cmV0dXJuIGN9CihmdW5jdGlvbigpe2lmKCFmdW5jdGlvbigpe3ZhciBhPWRvY3VtZW50LmNyZWF0ZUV2ZW50KCJFdmVudCIpO2EuaW5pdEV2ZW50KCJmb28iLCEwLCEwKTthLnByZXZlbnREZWZhdWx0KCk7cmV0dXJuIGEuZGVmYXVsdFByZXZlbnRlZH0oKSl7dmFyIGE9RXZlbnQucHJvdG90eXBlLnByZXZlbnREZWZhdWx0O0V2ZW50LnByb3RvdHlwZS5wcmV2ZW50RGVmYXVsdD1mdW5jdGlvbigpe3RoaXMuY2FuY2VsYWJsZSYmKGEuY2FsbCh0aGlzKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiZGVmYXVsdFByZXZlbnRlZCIse2dldDpmdW5jdGlvbigpe3JldHVybiEwfSxjb25maWd1cmFibGU6ITB9KSl9fXZhciBiPS9UcmlkZW50Ly50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO2lmKCF3aW5kb3cuQ3VzdG9tRXZlbnR8fGImJiJmdW5jdGlvbiIhPT10eXBlb2Ygd2luZG93LkN1c3RvbUV2ZW50KXdpbmRvdy5DdXN0b21FdmVudD1mdW5jdGlvbihhLGIpe2I9Ynx8e307dmFyIGM9ZG9jdW1lbnQuY3JlYXRlRXZlbnQoIkN1c3RvbUV2ZW50Iik7CmMuaW5pdEN1c3RvbUV2ZW50KGEsISFiLmJ1YmJsZXMsISFiLmNhbmNlbGFibGUsYi5kZXRhaWwpO3JldHVybiBjfSx3aW5kb3cuQ3VzdG9tRXZlbnQucHJvdG90eXBlPXdpbmRvdy5FdmVudC5wcm90b3R5cGU7aWYoIXdpbmRvdy5FdmVudHx8YiYmImZ1bmN0aW9uIiE9PXR5cGVvZiB3aW5kb3cuRXZlbnQpe3ZhciBjPXdpbmRvdy5FdmVudDt3aW5kb3cuRXZlbnQ9ZnVuY3Rpb24oYSxiKXtiPWJ8fHt9O3ZhciBjPWRvY3VtZW50LmNyZWF0ZUV2ZW50KCJFdmVudCIpO2MuaW5pdEV2ZW50KGEsISFiLmJ1YmJsZXMsISFiLmNhbmNlbGFibGUpO3JldHVybiBjfTtpZihjKWZvcih2YXIgZCBpbiBjKXdpbmRvdy5FdmVudFtkXT1jW2RdO3dpbmRvdy5FdmVudC5wcm90b3R5cGU9Yy5wcm90b3R5cGV9aWYoIXdpbmRvdy5Nb3VzZUV2ZW50fHxiJiYiZnVuY3Rpb24iIT09dHlwZW9mIHdpbmRvdy5Nb3VzZUV2ZW50KXtiPXdpbmRvdy5Nb3VzZUV2ZW50O3dpbmRvdy5Nb3VzZUV2ZW50PWZ1bmN0aW9uKGEsCmIpe2I9Ynx8e307dmFyIGM9ZG9jdW1lbnQuY3JlYXRlRXZlbnQoIk1vdXNlRXZlbnQiKTtjLmluaXRNb3VzZUV2ZW50KGEsISFiLmJ1YmJsZXMsISFiLmNhbmNlbGFibGUsYi52aWV3fHx3aW5kb3csYi5kZXRhaWwsYi5zY3JlZW5YLGIuc2NyZWVuWSxiLmNsaWVudFgsYi5jbGllbnRZLGIuY3RybEtleSxiLmFsdEtleSxiLnNoaWZ0S2V5LGIubWV0YUtleSxiLmJ1dHRvbixiLnJlbGF0ZWRUYXJnZXQpO3JldHVybiBjfTtpZihiKWZvcihkIGluIGIpd2luZG93Lk1vdXNlRXZlbnRbZF09YltkXTt3aW5kb3cuTW91c2VFdmVudC5wcm90b3R5cGU9Yi5wcm90b3R5cGV9QXJyYXkuZnJvbXx8KEFycmF5LmZyb209ZnVuY3Rpb24oYSl7cmV0dXJuW10uc2xpY2UuY2FsbChhKX0pO09iamVjdC5hc3NpZ258fChPYmplY3QuYXNzaWduPWZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjPVtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLGQ9MCxlO2Q8Yy5sZW5ndGg7ZCsrKWlmKGU9Y1tkXSlmb3IodmFyIGY9CmEsbT1lLHE9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMobSkseD0wO3g8cS5sZW5ndGg7eCsrKWU9cVt4XSxmW2VdPW1bZV07cmV0dXJuIGF9KX0pKHdpbmRvdy5XZWJDb21wb25lbnRzKTsoZnVuY3Rpb24oKXtmdW5jdGlvbiBhKCl7fWZ1bmN0aW9uIGIoYSxiKXtpZighYS5jaGlsZE5vZGVzLmxlbmd0aClyZXR1cm5bXTtzd2l0Y2goYS5ub2RlVHlwZSl7Y2FzZSBOb2RlLkRPQ1VNRU5UX05PREU6cmV0dXJuIHVhLmNhbGwoYSxiKTtjYXNlIE5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERTpyZXR1cm4gbGIuY2FsbChhLGIpO2RlZmF1bHQ6cmV0dXJuIFUuY2FsbChhLGIpfX12YXIgYz0idW5kZWZpbmVkIj09PXR5cGVvZiBIVE1MVGVtcGxhdGVFbGVtZW50LGQ9IShkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkuY2xvbmVOb2RlKClpbnN0YW5jZW9mIERvY3VtZW50RnJhZ21lbnQpLGU9ITE7L1RyaWRlbnQvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkmJmZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShhLGIpe2lmKGEgaW5zdGFuY2VvZiBEb2N1bWVudEZyYWdtZW50KWZvcih2YXIgZDtkPWEuZmlyc3RDaGlsZDspYy5jYWxsKHRoaXMsZCxiKTtlbHNlIGMuY2FsbCh0aGlzLAphLGIpO3JldHVybiBhfWU9ITA7dmFyIGI9Tm9kZS5wcm90b3R5cGUuY2xvbmVOb2RlO05vZGUucHJvdG90eXBlLmNsb25lTm9kZT1mdW5jdGlvbihhKXthPWIuY2FsbCh0aGlzLGEpO3RoaXMgaW5zdGFuY2VvZiBEb2N1bWVudEZyYWdtZW50JiYoYS5fX3Byb3RvX189RG9jdW1lbnRGcmFnbWVudC5wcm90b3R5cGUpO3JldHVybiBhfTtEb2N1bWVudEZyYWdtZW50LnByb3RvdHlwZS5xdWVyeVNlbGVjdG9yQWxsPUhUTUxFbGVtZW50LnByb3RvdHlwZS5xdWVyeVNlbGVjdG9yQWxsO0RvY3VtZW50RnJhZ21lbnQucHJvdG90eXBlLnF1ZXJ5U2VsZWN0b3I9SFRNTEVsZW1lbnQucHJvdG90eXBlLnF1ZXJ5U2VsZWN0b3I7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRG9jdW1lbnRGcmFnbWVudC5wcm90b3R5cGUse25vZGVUeXBlOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gTm9kZS5ET0NVTUVOVF9GUkFHTUVOVF9OT0RFfSxjb25maWd1cmFibGU6ITB9LGxvY2FsTmFtZTp7Z2V0OmZ1bmN0aW9uKCl7fSwKY29uZmlndXJhYmxlOiEwfSxub2RlTmFtZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIiNkb2N1bWVudC1mcmFnbWVudCJ9LGNvbmZpZ3VyYWJsZTohMH19KTt2YXIgYz1Ob2RlLnByb3RvdHlwZS5pbnNlcnRCZWZvcmU7Tm9kZS5wcm90b3R5cGUuaW5zZXJ0QmVmb3JlPWE7dmFyIGQ9Tm9kZS5wcm90b3R5cGUuYXBwZW5kQ2hpbGQ7Tm9kZS5wcm90b3R5cGUuYXBwZW5kQ2hpbGQ9ZnVuY3Rpb24oYil7YiBpbnN0YW5jZW9mIERvY3VtZW50RnJhZ21lbnQ/YS5jYWxsKHRoaXMsYixudWxsKTpkLmNhbGwodGhpcyxiKTtyZXR1cm4gYn07dmFyIGY9Tm9kZS5wcm90b3R5cGUucmVtb3ZlQ2hpbGQsZz1Ob2RlLnByb3RvdHlwZS5yZXBsYWNlQ2hpbGQ7Tm9kZS5wcm90b3R5cGUucmVwbGFjZUNoaWxkPWZ1bmN0aW9uKGIsYyl7YiBpbnN0YW5jZW9mIERvY3VtZW50RnJhZ21lbnQ/KGEuY2FsbCh0aGlzLGIsYyksZi5jYWxsKHRoaXMsYykpOmcuY2FsbCh0aGlzLGIsYyk7cmV0dXJuIGN9O0RvY3VtZW50LnByb3RvdHlwZS5jcmVhdGVEb2N1bWVudEZyYWdtZW50PQpmdW5jdGlvbigpe3ZhciBhPXRoaXMuY3JlYXRlRWxlbWVudCgiZGYiKTthLl9fcHJvdG9fXz1Eb2N1bWVudEZyYWdtZW50LnByb3RvdHlwZTtyZXR1cm4gYX07dmFyIGg9RG9jdW1lbnQucHJvdG90eXBlLmltcG9ydE5vZGU7RG9jdW1lbnQucHJvdG90eXBlLmltcG9ydE5vZGU9ZnVuY3Rpb24oYSxiKXtiPWguY2FsbCh0aGlzLGEsYnx8ITEpO2EgaW5zdGFuY2VvZiBEb2N1bWVudEZyYWdtZW50JiYoYi5fX3Byb3RvX189RG9jdW1lbnRGcmFnbWVudC5wcm90b3R5cGUpO3JldHVybiBifX0oKTt2YXIgZj1Ob2RlLnByb3RvdHlwZS5jbG9uZU5vZGUsZz1Eb2N1bWVudC5wcm90b3R5cGUuY3JlYXRlRWxlbWVudCxoPURvY3VtZW50LnByb3RvdHlwZS5pbXBvcnROb2RlLGs9Tm9kZS5wcm90b3R5cGUucmVtb3ZlQ2hpbGQsbD1Ob2RlLnByb3RvdHlwZS5hcHBlbmRDaGlsZCxtPU5vZGUucHJvdG90eXBlLnJlcGxhY2VDaGlsZCxxPURPTVBhcnNlci5wcm90b3R5cGUucGFyc2VGcm9tU3RyaW5nLAp4PU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iod2luZG93LkhUTUxFbGVtZW50LnByb3RvdHlwZSwiaW5uZXJIVE1MIil8fHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbm5lckhUTUx9LHNldDpmdW5jdGlvbihhKXt0aGlzLmlubmVySFRNTD1hfX0sTT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHdpbmRvdy5Ob2RlLnByb3RvdHlwZSwiY2hpbGROb2RlcyIpfHx7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2hpbGROb2Rlc319LFU9RWxlbWVudC5wcm90b3R5cGUucXVlcnlTZWxlY3RvckFsbCx1YT1Eb2N1bWVudC5wcm90b3R5cGUucXVlcnlTZWxlY3RvckFsbCxsYj1Eb2N1bWVudEZyYWdtZW50LnByb3RvdHlwZS5xdWVyeVNlbGVjdG9yQWxsLG1iPWZ1bmN0aW9uKCl7aWYoIWMpe3ZhciBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIiksYj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZW1wbGF0ZSIpO2IuY29udGVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSk7CmEuY29udGVudC5hcHBlbmRDaGlsZChiKTthPWEuY2xvbmVOb2RlKCEwKTtyZXR1cm4gMD09PWEuY29udGVudC5jaGlsZE5vZGVzLmxlbmd0aHx8MD09PWEuY29udGVudC5maXJzdENoaWxkLmNvbnRlbnQuY2hpbGROb2Rlcy5sZW5ndGh8fGR9fSgpO2lmKGMpe3ZhciBTPWRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCgidGVtcGxhdGUiKSxDPSEwLFY9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtWLnRleHRDb250ZW50PSJ0ZW1wbGF0ZXtkaXNwbGF5Om5vbmU7fSI7dmFyIGhhPWRvY3VtZW50LmhlYWQ7aGEuaW5zZXJ0QmVmb3JlKFYsaGEuZmlyc3RFbGVtZW50Q2hpbGQpO2EucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoSFRNTEVsZW1lbnQucHJvdG90eXBlKTt2YXIgdmE9IWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLmhhc093blByb3BlcnR5KCJpbm5lckhUTUwiKTthLkc9ZnVuY3Rpb24oYil7aWYoIWIuY29udGVudCYmYi5uYW1lc3BhY2VVUkk9PT0KZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50Lm5hbWVzcGFjZVVSSSl7Yi5jb250ZW50PVMuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO2Zvcih2YXIgYztjPWIuZmlyc3RDaGlsZDspbC5jYWxsKGIuY29udGVudCxjKTtpZih2YSliLl9fcHJvdG9fXz1hLnByb3RvdHlwZTtlbHNlIGlmKGIuY2xvbmVOb2RlPWZ1bmN0aW9uKGIpe3JldHVybiBhLmEodGhpcyxiKX0sQyl0cnl7UChiKSxXKGIpfWNhdGNoKFRnKXtDPSExfWEuQyhiLmNvbnRlbnQpfX07dmFyIFg9e29wdGlvbjpbInNlbGVjdCJdLHRoZWFkOlsidGFibGUiXSxjb2w6WyJjb2xncm91cCIsInRhYmxlIl0sdHI6WyJ0Ym9keSIsInRhYmxlIl0sdGg6WyJ0ciIsInRib2R5IiwidGFibGUiXSx0ZDpbInRyIiwidGJvZHkiLCJ0YWJsZSJdfSxQPWZ1bmN0aW9uKGIpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShiLCJpbm5lckhUTUwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbmIodGhpcyl9LHNldDpmdW5jdGlvbihiKXt2YXIgYz1YWygvPChbYS16XVteL1wwPlx4MjBcdFxyXG5cZl0rKS9pLmV4ZWMoYil8fApbIiIsIiJdKVsxXS50b0xvd2VyQ2FzZSgpXTtpZihjKWZvcih2YXIgZD0wO2Q8Yy5sZW5ndGg7ZCsrKWI9IjwiK2NbZF0rIj4iK2IrIjwvIitjW2RdKyI+IjtTLmJvZHkuaW5uZXJIVE1MPWI7Zm9yKGEuQyhTKTt0aGlzLmNvbnRlbnQuZmlyc3RDaGlsZDspay5jYWxsKHRoaXMuY29udGVudCx0aGlzLmNvbnRlbnQuZmlyc3RDaGlsZCk7Yj1TLmJvZHk7aWYoYylmb3IoZD0wO2Q8Yy5sZW5ndGg7ZCsrKWI9Yi5sYXN0Q2hpbGQ7Zm9yKDtiLmZpcnN0Q2hpbGQ7KWwuY2FsbCh0aGlzLmNvbnRlbnQsYi5maXJzdENoaWxkKX0sY29uZmlndXJhYmxlOiEwfSl9LFc9ZnVuY3Rpb24oYSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGEsIm91dGVySFRNTCIse2dldDpmdW5jdGlvbigpe3JldHVybiI8dGVtcGxhdGU+Iit0aGlzLmlubmVySFRNTCsiPC90ZW1wbGF0ZT4ifSxzZXQ6ZnVuY3Rpb24oYSl7aWYodGhpcy5wYXJlbnROb2RlKXtTLmJvZHkuaW5uZXJIVE1MPWE7Zm9yKGE9dGhpcy5vd25lckRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtTLmJvZHkuZmlyc3RDaGlsZDspbC5jYWxsKGEsClMuYm9keS5maXJzdENoaWxkKTttLmNhbGwodGhpcy5wYXJlbnROb2RlLGEsdGhpcyl9ZWxzZSB0aHJvdyBFcnJvcigiRmFpbGVkIHRvIHNldCB0aGUgJ291dGVySFRNTCcgcHJvcGVydHkgb24gJ0VsZW1lbnQnOiBUaGlzIGVsZW1lbnQgaGFzIG5vIHBhcmVudCBub2RlLiIpO30sY29uZmlndXJhYmxlOiEwfSl9O1AoYS5wcm90b3R5cGUpO1coYS5wcm90b3R5cGUpO2EuQz1mdW5jdGlvbihjKXtjPWIoYywidGVtcGxhdGUiKTtmb3IodmFyIGQ9MCxlPWMubGVuZ3RoLGY7ZDxlJiYoZj1jW2RdKTtkKyspYS5HKGYpfTtkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIixmdW5jdGlvbigpe2EuQyhkb2N1bWVudCl9KTtEb2N1bWVudC5wcm90b3R5cGUuY3JlYXRlRWxlbWVudD1mdW5jdGlvbigpe3ZhciBiPWcuYXBwbHkodGhpcyxhcmd1bWVudHMpOyJ0ZW1wbGF0ZSI9PT1iLmxvY2FsTmFtZSYmYS5HKGIpO3JldHVybiBifTtET01QYXJzZXIucHJvdG90eXBlLnBhcnNlRnJvbVN0cmluZz0KZnVuY3Rpb24oKXt2YXIgYj1xLmFwcGx5KHRoaXMsYXJndW1lbnRzKTthLkMoYik7cmV0dXJuIGJ9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MRWxlbWVudC5wcm90b3R5cGUsImlubmVySFRNTCIse2dldDpmdW5jdGlvbigpe3JldHVybiBuYih0aGlzKX0sc2V0OmZ1bmN0aW9uKGIpe3guc2V0LmNhbGwodGhpcyxiKTthLkModGhpcyl9LGNvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwfSk7dmFyIFZlPS9bJlx1MDBBMCJdL2cseWM9L1smXHUwMEEwPD5dL2csemM9ZnVuY3Rpb24oYSl7c3dpdGNoKGEpe2Nhc2UgIiYiOnJldHVybiImYW1wOyI7Y2FzZSAiPCI6cmV0dXJuIiZsdDsiO2Nhc2UgIj4iOnJldHVybiImZ3Q7IjtjYXNlICciJzpyZXR1cm4iJnF1b3Q7IjtjYXNlICJcdTAwYTAiOnJldHVybiImbmJzcDsifX07Vj1mdW5jdGlvbihhKXtmb3IodmFyIGI9e30sYz0wO2M8YS5sZW5ndGg7YysrKWJbYVtjXV09ITA7cmV0dXJuIGJ9O3ZhciBXZT1WKCJhcmVhIGJhc2UgYnIgY29sIGNvbW1hbmQgZW1iZWQgaHIgaW1nIGlucHV0IGtleWdlbiBsaW5rIG1ldGEgcGFyYW0gc291cmNlIHRyYWNrIHdiciIuc3BsaXQoIiAiKSksClhlPVYoInN0eWxlIHNjcmlwdCB4bXAgaWZyYW1lIG5vZW1iZWQgbm9mcmFtZXMgcGxhaW50ZXh0IG5vc2NyaXB0Ii5zcGxpdCgiICIpKSxuYj1mdW5jdGlvbihhLGIpeyJ0ZW1wbGF0ZSI9PT1hLmxvY2FsTmFtZSYmKGE9YS5jb250ZW50KTtmb3IodmFyIGM9IiIsZD1iP2IoYSk6TS5nZXQuY2FsbChhKSxlPTAsZj1kLmxlbmd0aCxnO2U8ZiYmKGc9ZFtlXSk7ZSsrKXthOnt2YXIgaD1nO3ZhciBrPWE7dmFyIGw9Yjtzd2l0Y2goaC5ub2RlVHlwZSl7Y2FzZSBOb2RlLkVMRU1FTlRfTk9ERTpmb3IodmFyIFA9aC5sb2NhbE5hbWUsbT0iPCIrUCxXPWguYXR0cmlidXRlcyxxPTA7az1XW3FdO3ErKyltKz0iICIray5uYW1lKyc9Iicray52YWx1ZS5yZXBsYWNlKFZlLHpjKSsnIic7bSs9Ij4iO2g9V2VbUF0/bTptK25iKGgsbCkrIjwvIitQKyI+IjticmVhayBhO2Nhc2UgTm9kZS5URVhUX05PREU6aD1oLmRhdGE7aD1rJiZYZVtrLmxvY2FsTmFtZV0/aDpoLnJlcGxhY2UoeWMsemMpO2JyZWFrIGE7CmNhc2UgTm9kZS5DT01NRU5UX05PREU6aD0iXHgzYyEtLSIraC5kYXRhKyItLVx4M2UiO2JyZWFrIGE7ZGVmYXVsdDp0aHJvdyB3aW5kb3cuY29uc29sZS5lcnJvcihoKSxFcnJvcigibm90IGltcGxlbWVudGVkIik7fX1jKz1ofXJldHVybiBjfX1pZihjfHxtYil7YS5hPWZ1bmN0aW9uKGEsYil7dmFyIGM9Zi5jYWxsKGEsITEpO3RoaXMuRyYmdGhpcy5HKGMpO2ImJihsLmNhbGwoYy5jb250ZW50LGYuY2FsbChhLmNvbnRlbnQsITApKSxvYihjLmNvbnRlbnQsYS5jb250ZW50KSk7cmV0dXJuIGN9O3ZhciBvYj1mdW5jdGlvbihjLGQpe2lmKGQucXVlcnlTZWxlY3RvckFsbCYmKGQ9YihkLCJ0ZW1wbGF0ZSIpLDAhPT1kLmxlbmd0aCkpe2M9YihjLCJ0ZW1wbGF0ZSIpO2Zvcih2YXIgZT0wLGY9Yy5sZW5ndGgsZyxoO2U8ZjtlKyspaD1kW2VdLGc9Y1tlXSxhJiZhLkcmJmEuRyhoKSxtLmNhbGwoZy5wYXJlbnROb2RlLFllLmNhbGwoaCwhMCksZyl9fSxZZT1Ob2RlLnByb3RvdHlwZS5jbG9uZU5vZGU9CmZ1bmN0aW9uKGIpe2lmKCFlJiZkJiZ0aGlzIGluc3RhbmNlb2YgRG9jdW1lbnRGcmFnbWVudClpZihiKXZhciBjPVplLmNhbGwodGhpcy5vd25lckRvY3VtZW50LHRoaXMsITApO2Vsc2UgcmV0dXJuIHRoaXMub3duZXJEb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7ZWxzZSB0aGlzLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUmJiJ0ZW1wbGF0ZSI9PT10aGlzLmxvY2FsTmFtZSYmdGhpcy5uYW1lc3BhY2VVUkk9PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5uYW1lc3BhY2VVUkk/Yz1hLmEodGhpcyxiKTpjPWYuY2FsbCh0aGlzLGIpO2ImJm9iKGMsdGhpcyk7cmV0dXJuIGN9LFplPURvY3VtZW50LnByb3RvdHlwZS5pbXBvcnROb2RlPWZ1bmN0aW9uKGMsZCl7ZD1kfHwhMTtpZigidGVtcGxhdGUiPT09Yy5sb2NhbE5hbWUpcmV0dXJuIGEuYShjLGQpO3ZhciBlPWguY2FsbCh0aGlzLGMsZCk7aWYoZCl7b2IoZSxjKTtjPWIoZSwnc2NyaXB0Om5vdChbdHlwZV0pLHNjcmlwdFt0eXBlPSJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0Il0sc2NyaXB0W3R5cGU9InRleHQvamF2YXNjcmlwdCJdJyk7CmZvcih2YXIgZixrPTA7azxjLmxlbmd0aDtrKyspe2Y9Y1trXTtkPWcuY2FsbChkb2N1bWVudCwic2NyaXB0Iik7ZC50ZXh0Q29udGVudD1mLnRleHRDb250ZW50O2Zvcih2YXIgbD1mLmF0dHJpYnV0ZXMsUD0wLFc7UDxsLmxlbmd0aDtQKyspVz1sW1BdLGQuc2V0QXR0cmlidXRlKFcubmFtZSxXLnZhbHVlKTttLmNhbGwoZi5wYXJlbnROb2RlLGQsZil9fXJldHVybiBlfX1jJiYod2luZG93LkhUTUxUZW1wbGF0ZUVsZW1lbnQ9YSl9KSgpO3ZhciBrYT1zZXRUaW1lb3V0O2Z1bmN0aW9uIGxhKCl7fWZ1bmN0aW9uIG1hKGEsYil7cmV0dXJuIGZ1bmN0aW9uKCl7YS5hcHBseShiLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIHIoYSl7aWYoISh0aGlzIGluc3RhbmNlb2YgcikpdGhyb3cgbmV3IFR5cGVFcnJvcigiUHJvbWlzZXMgbXVzdCBiZSBjb25zdHJ1Y3RlZCB2aWEgbmV3Iik7aWYoImZ1bmN0aW9uIiE9PXR5cGVvZiBhKXRocm93IG5ldyBUeXBlRXJyb3IoIm5vdCBhIGZ1bmN0aW9uIik7dGhpcy51PTA7dGhpcy5tYT0hMTt0aGlzLmg9dm9pZCAwO3RoaXMuST1bXTtuYShhLHRoaXMpfQpmdW5jdGlvbiBvYShhLGIpe2Zvcig7Mz09PWEudTspYT1hLmg7MD09PWEudT9hLkkucHVzaChiKTooYS5tYT0hMCxwYShmdW5jdGlvbigpe3ZhciBjPTE9PT1hLnU/Yi5OYTpiLk9hO2lmKG51bGw9PT1jKSgxPT09YS51P3FhOnJhKShiLmdhLGEuaCk7ZWxzZXt0cnl7dmFyIGQ9YyhhLmgpfWNhdGNoKGUpe3JhKGIuZ2EsZSk7cmV0dXJufXFhKGIuZ2EsZCl9fSkpfWZ1bmN0aW9uIHFhKGEsYil7dHJ5e2lmKGI9PT1hKXRocm93IG5ldyBUeXBlRXJyb3IoIkEgcHJvbWlzZSBjYW5ub3QgYmUgcmVzb2x2ZWQgd2l0aCBpdHNlbGYuIik7aWYoYiYmKCJvYmplY3QiPT09dHlwZW9mIGJ8fCJmdW5jdGlvbiI9PT10eXBlb2YgYikpe3ZhciBjPWIudGhlbjtpZihiIGluc3RhbmNlb2Ygcil7YS51PTM7YS5oPWI7c2EoYSk7cmV0dXJufWlmKCJmdW5jdGlvbiI9PT10eXBlb2YgYyl7bmEobWEoYyxiKSxhKTtyZXR1cm59fWEudT0xO2EuaD1iO3NhKGEpfWNhdGNoKGQpe3JhKGEsZCl9fQpmdW5jdGlvbiByYShhLGIpe2EudT0yO2EuaD1iO3NhKGEpfWZ1bmN0aW9uIHNhKGEpezI9PT1hLnUmJjA9PT1hLkkubGVuZ3RoJiZwYShmdW5jdGlvbigpe2EubWF8fCJ1bmRlZmluZWQiIT09dHlwZW9mIGNvbnNvbGUmJmNvbnNvbGUmJmNvbnNvbGUud2FybigiUG9zc2libGUgVW5oYW5kbGVkIFByb21pc2UgUmVqZWN0aW9uOiIsYS5oKX0pO2Zvcih2YXIgYj0wLGM9YS5JLmxlbmd0aDtiPGM7YisrKW9hKGEsYS5JW2JdKTthLkk9bnVsbH1mdW5jdGlvbiB0YShhLGIsYyl7dGhpcy5OYT0iZnVuY3Rpb24iPT09dHlwZW9mIGE/YTpudWxsO3RoaXMuT2E9ImZ1bmN0aW9uIj09PXR5cGVvZiBiP2I6bnVsbDt0aGlzLmdhPWN9ZnVuY3Rpb24gbmEoYSxiKXt2YXIgYz0hMTt0cnl7YShmdW5jdGlvbihhKXtjfHwoYz0hMCxxYShiLGEpKX0sZnVuY3Rpb24oYSl7Y3x8KGM9ITAscmEoYixhKSl9KX1jYXRjaChkKXtjfHwoYz0hMCxyYShiLGQpKX19CnIucHJvdG90eXBlWyJjYXRjaCJdPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnRoZW4obnVsbCxhKX07ci5wcm90b3R5cGUudGhlbj1mdW5jdGlvbihhLGIpe3ZhciBjPW5ldyB0aGlzLmNvbnN0cnVjdG9yKGxhKTtvYSh0aGlzLG5ldyB0YShhLGIsYykpO3JldHVybiBjfTtyLnByb3RvdHlwZVsiZmluYWxseSJdPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuY29uc3RydWN0b3I7cmV0dXJuIHRoaXMudGhlbihmdW5jdGlvbihjKXtyZXR1cm4gYi5yZXNvbHZlKGEoKSkudGhlbihmdW5jdGlvbigpe3JldHVybiBjfSl9LGZ1bmN0aW9uKGMpe3JldHVybiBiLnJlc29sdmUoYSgpKS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIGIucmVqZWN0KGMpfSl9KX07CmZ1bmN0aW9uIHdhKGEpe3JldHVybiBuZXcgcihmdW5jdGlvbihiLGMpe2Z1bmN0aW9uIGQoYSxnKXt0cnl7aWYoZyYmKCJvYmplY3QiPT09dHlwZW9mIGd8fCJmdW5jdGlvbiI9PT10eXBlb2YgZykpe3ZhciBoPWcudGhlbjtpZigiZnVuY3Rpb24iPT09dHlwZW9mIGgpe2guY2FsbChnLGZ1bmN0aW9uKGIpe2QoYSxiKX0sYyk7cmV0dXJufX1lW2FdPWc7MD09PS0tZiYmYihlKX1jYXRjaChtKXtjKG0pfX1pZighYXx8InVuZGVmaW5lZCI9PT10eXBlb2YgYS5sZW5ndGgpdGhyb3cgbmV3IFR5cGVFcnJvcigiUHJvbWlzZS5hbGwgYWNjZXB0cyBhbiBhcnJheSIpO3ZhciBlPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGEpO2lmKDA9PT1lLmxlbmd0aClyZXR1cm4gYihbXSk7Zm9yKHZhciBmPWUubGVuZ3RoLGc9MDtnPGUubGVuZ3RoO2crKylkKGcsZVtnXSl9KX0KZnVuY3Rpb24geGEoYSl7cmV0dXJuIGEmJiJvYmplY3QiPT09dHlwZW9mIGEmJmEuY29uc3RydWN0b3I9PT1yP2E6bmV3IHIoZnVuY3Rpb24oYil7YihhKX0pfWZ1bmN0aW9uIHlhKGEpe3JldHVybiBuZXcgcihmdW5jdGlvbihiLGMpe2MoYSl9KX1mdW5jdGlvbiB6YShhKXtyZXR1cm4gbmV3IHIoZnVuY3Rpb24oYixjKXtmb3IodmFyIGQ9MCxlPWEubGVuZ3RoO2Q8ZTtkKyspYVtkXS50aGVuKGIsYyl9KX12YXIgcGE9ImZ1bmN0aW9uIj09PXR5cGVvZiBzZXRJbW1lZGlhdGUmJmZ1bmN0aW9uKGEpe3NldEltbWVkaWF0ZShhKX18fGZ1bmN0aW9uKGEpe2thKGEsMCl9Oy8qCgpDb3B5cmlnaHQgKGMpIDIwMTcgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgpUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0ClRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0ClRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dApDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbwpzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAoqLwppZighd2luZG93LlByb21pc2Upe3dpbmRvdy5Qcm9taXNlPXI7ci5wcm90b3R5cGUudGhlbj1yLnByb3RvdHlwZS50aGVuO3IuYWxsPXdhO3IucmFjZT16YTtyLnJlc29sdmU9eGE7ci5yZWplY3Q9eWE7dmFyIEFhPWRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIiKSxCYT1bXTsobmV3IE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24oKXtmb3IodmFyIGE9QmEubGVuZ3RoLGI9MDtiPGE7YisrKUJhW2JdKCk7QmEuc3BsaWNlKDAsYSl9KSkub2JzZXJ2ZShBYSx7Y2hhcmFjdGVyRGF0YTohMH0pO3BhPWZ1bmN0aW9uKGEpe0JhLnB1c2goYSk7QWEudGV4dENvbnRlbnQ9MDxBYS50ZXh0Q29udGVudC5sZW5ndGg/IiI6ImEifX07KGZ1bmN0aW9uKGEpe2Z1bmN0aW9uIGIoYSxiKXtpZigiZnVuY3Rpb24iPT09dHlwZW9mIHdpbmRvdy5DdXN0b21FdmVudClyZXR1cm4gbmV3IEN1c3RvbUV2ZW50KGEsYik7dmFyIGM9ZG9jdW1lbnQuY3JlYXRlRXZlbnQoIkN1c3RvbUV2ZW50Iik7Yy5pbml0Q3VzdG9tRXZlbnQoYSwhIWIuYnViYmxlcywhIWIuY2FuY2VsYWJsZSxiLmRldGFpbCk7cmV0dXJuIGN9ZnVuY3Rpb24gYyhhKXtpZihNKXJldHVybiBhLm93bmVyRG9jdW1lbnQhPT1kb2N1bWVudD9hLm93bmVyRG9jdW1lbnQ6bnVsbDt2YXIgYj1hLl9faW1wb3J0RG9jO2lmKCFiJiZhLnBhcmVudE5vZGUpe2I9YS5wYXJlbnROb2RlO2lmKCJmdW5jdGlvbiI9PT10eXBlb2YgYi5jbG9zZXN0KWI9Yi5jbG9zZXN0KCJsaW5rW3JlbD1pbXBvcnRdIik7ZWxzZSBmb3IoOyFoKGIpJiYoYj1iLnBhcmVudE5vZGUpOyk7YS5fX2ltcG9ydERvYz1ifXJldHVybiBifWZ1bmN0aW9uIGQoYSl7dmFyIGI9bShkb2N1bWVudCwibGlua1tyZWw9aW1wb3J0XTpub3QoW2ltcG9ydC1kZXBlbmRlbmN5XSkiKSwKYz1iLmxlbmd0aDtjP3EoYixmdW5jdGlvbihiKXtyZXR1cm4gZyhiLGZ1bmN0aW9uKCl7MD09PS0tYyYmYSgpfSl9KTphKCl9ZnVuY3Rpb24gZShhKXtmdW5jdGlvbiBiKCl7ImxvYWRpbmciIT09ZG9jdW1lbnQucmVhZHlTdGF0ZSYmZG9jdW1lbnQuYm9keSYmKGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInJlYWR5c3RhdGVjaGFuZ2UiLGIpLGEoKSl9ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigicmVhZHlzdGF0ZWNoYW5nZSIsYik7YigpfWZ1bmN0aW9uIGYoYSl7ZShmdW5jdGlvbigpe3JldHVybiBkKGZ1bmN0aW9uKCl7cmV0dXJuIGEmJmEoKX0pfSl9ZnVuY3Rpb24gZyhhLGIpe2lmKGEuX19sb2FkZWQpYiYmYigpO2Vsc2UgaWYoInNjcmlwdCI9PT1hLmxvY2FsTmFtZSYmIWEuc3JjfHwic3R5bGUiPT09YS5sb2NhbE5hbWUmJiFhLmZpcnN0Q2hpbGQpYS5fX2xvYWRlZD0hMCxiJiZiKCk7ZWxzZXt2YXIgYz1mdW5jdGlvbihkKXthLnJlbW92ZUV2ZW50TGlzdGVuZXIoZC50eXBlLApjKTthLl9fbG9hZGVkPSEwO2ImJmIoKX07YS5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixjKTtoYSYmInN0eWxlIj09PWEubG9jYWxOYW1lfHxhLmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIixjKX19ZnVuY3Rpb24gaChhKXtyZXR1cm4gYS5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFJiYibGluayI9PT1hLmxvY2FsTmFtZSYmImltcG9ydCI9PT1hLnJlbH1mdW5jdGlvbiBrKCl7dmFyIGE9dGhpczt0aGlzLmE9e307dGhpcy5iPTA7dGhpcy5jPW5ldyBNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uKGIpe3JldHVybiBhLkphKGIpfSk7dGhpcy5jLm9ic2VydmUoZG9jdW1lbnQuaGVhZCx7Y2hpbGRMaXN0OiEwLHN1YnRyZWU6ITB9KTt0aGlzLmxvYWRJbXBvcnRzKGRvY3VtZW50KX1mdW5jdGlvbiBsKGEpe3EobShhLCJ0ZW1wbGF0ZSIpLGZ1bmN0aW9uKGEpe3EobShhLmNvbnRlbnQsJ3NjcmlwdDpub3QoW3R5cGVdKSxzY3JpcHRbdHlwZT0iYXBwbGljYXRpb24vamF2YXNjcmlwdCJdLHNjcmlwdFt0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiXSxzY3JpcHRbdHlwZT0ibW9kdWxlIl0nKSwKZnVuY3Rpb24oYSl7dmFyIGI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7cShhLmF0dHJpYnV0ZXMsZnVuY3Rpb24oYSl7cmV0dXJuIGIuc2V0QXR0cmlidXRlKGEubmFtZSxhLnZhbHVlKX0pO2IudGV4dENvbnRlbnQ9YS50ZXh0Q29udGVudDthLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKGIsYSl9KTtsKGEuY29udGVudCl9KX1mdW5jdGlvbiBtKGEsYil7cmV0dXJuIGEuY2hpbGROb2Rlcy5sZW5ndGg/YS5xdWVyeVNlbGVjdG9yQWxsKGIpOlV9ZnVuY3Rpb24gcShhLGIsYyl7dmFyIGQ9YT9hLmxlbmd0aDowLGU9Yz8tMToxO2ZvcihjPWM/ZC0xOjA7YzxkJiYwPD1jO2MrPWUpYihhW2NdLGMpfXZhciB4PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImxpbmsiKSxNPSJpbXBvcnQiaW4geCxVPXgucXVlcnlTZWxlY3RvckFsbCgiKiIpLHVhPW51bGw7ITE9PT0iY3VycmVudFNjcmlwdCJpbiBkb2N1bWVudCYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGRvY3VtZW50LCJjdXJyZW50U2NyaXB0IiwKe2dldDpmdW5jdGlvbigpe3JldHVybiB1YXx8KCJjb21wbGV0ZSIhPT1kb2N1bWVudC5yZWFkeVN0YXRlP2RvY3VtZW50LnNjcmlwdHNbZG9jdW1lbnQuc2NyaXB0cy5sZW5ndGgtMV06bnVsbCl9LGNvbmZpZ3VyYWJsZTohMH0pO3ZhciBsYj0vKHVybFwoKShbXildKikoXCkpL2csbWI9LyhAaW1wb3J0W1xzXSsoPyF1cmxcKCkpKFteO10qKSg7KS9nLFM9Lyg8bGlua1tePl0qKShyZWw9Wyd8Il0/c3R5bGVzaGVldFsnfCJdP1tePl0qPikvZyxDPXtFYTpmdW5jdGlvbihhLGIpe2EuaHJlZiYmYS5zZXRBdHRyaWJ1dGUoImhyZWYiLEMuWChhLmdldEF0dHJpYnV0ZSgiaHJlZiIpLGIpKTthLnNyYyYmYS5zZXRBdHRyaWJ1dGUoInNyYyIsQy5YKGEuZ2V0QXR0cmlidXRlKCJzcmMiKSxiKSk7aWYoInN0eWxlIj09PWEubG9jYWxOYW1lKXt2YXIgYz1DLnFhKGEudGV4dENvbnRlbnQsYixsYik7YS50ZXh0Q29udGVudD1DLnFhKGMsYixtYil9fSxxYTpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIGEucmVwbGFjZShjLApmdW5jdGlvbihhLGMsZCxlKXthPWQucmVwbGFjZSgvWyInXS9nLCIiKTtiJiYoYT1DLlgoYSxiKSk7cmV0dXJuIGMrIiciK2ErIiciK2V9KX0sWDpmdW5jdGlvbihhLGIpe2lmKHZvaWQgMD09PUMuYWEpe0MuYWE9ITE7dHJ5e3ZhciBjPW5ldyBVUkwoImIiLCJodHRwOi8vYSIpO2MucGF0aG5hbWU9ImMlMjBkIjtDLmFhPSJodHRwOi8vYS9jJTIwZCI9PT1jLmhyZWZ9Y2F0Y2goeWMpe319aWYoQy5hYSlyZXR1cm4obmV3IFVSTChhLGIpKS5ocmVmO2M9Qy54YTtjfHwoYz1kb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoInRlbXAiKSxDLnhhPWMsYy5qYT1jLmNyZWF0ZUVsZW1lbnQoImJhc2UiKSxjLmhlYWQuYXBwZW5kQ2hpbGQoYy5qYSksYy5pYT1jLmNyZWF0ZUVsZW1lbnQoImEiKSk7Yy5qYS5ocmVmPWI7Yy5pYS5ocmVmPWE7cmV0dXJuIGMuaWEuaHJlZnx8YX19LFY9e2FzeW5jOiEwLGxvYWQ6ZnVuY3Rpb24oYSxiLGMpe2lmKGEpaWYoYS5tYXRjaCgvXmRhdGE6Lykpe2E9CmEuc3BsaXQoIiwiKTt2YXIgZD1hWzFdO2Q9LTE8YVswXS5pbmRleE9mKCI7YmFzZTY0Iik/YXRvYihkKTpkZWNvZGVVUklDb21wb25lbnQoZCk7YihkKX1lbHNle3ZhciBlPW5ldyBYTUxIdHRwUmVxdWVzdDtlLm9wZW4oIkdFVCIsYSxWLmFzeW5jKTtlLm9ubG9hZD1mdW5jdGlvbigpe3ZhciBhPWUucmVzcG9uc2VVUkx8fGUuZ2V0UmVzcG9uc2VIZWFkZXIoIkxvY2F0aW9uIik7YSYmMD09PWEuaW5kZXhPZigiLyIpJiYoYT0obG9jYXRpb24ub3JpZ2lufHxsb2NhdGlvbi5wcm90b2NvbCsiLy8iK2xvY2F0aW9uLmhvc3QpK2EpO3ZhciBkPWUucmVzcG9uc2V8fGUucmVzcG9uc2VUZXh0OzMwND09PWUuc3RhdHVzfHwwPT09ZS5zdGF0dXN8fDIwMDw9ZS5zdGF0dXMmJjMwMD5lLnN0YXR1cz9iKGQsYSk6YyhkKX07ZS5zZW5kKCl9ZWxzZSBjKCJlcnJvcjogaHJlZiBtdXN0IGJlIHNwZWNpZmllZCIpfX0saGE9L1RyaWRlbnQvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCl8fC9FZGdlXC9cZC4vaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpOwprLnByb3RvdHlwZS5sb2FkSW1wb3J0cz1mdW5jdGlvbihhKXt2YXIgYj10aGlzO2E9bShhLCJsaW5rW3JlbD1pbXBvcnRdIik7cShhLGZ1bmN0aW9uKGEpe3JldHVybiBiLmcoYSl9KX07ay5wcm90b3R5cGUuZz1mdW5jdGlvbihhKXt2YXIgYj10aGlzLGM9YS5ocmVmO2lmKHZvaWQgMCE9PXRoaXMuYVtjXSl7dmFyIGQ9dGhpcy5hW2NdO2QmJmQuX19sb2FkZWQmJihhLl9faW1wb3J0PWQsdGhpcy5mKGEpKX1lbHNlIHRoaXMuYisrLHRoaXMuYVtjXT0icGVuZGluZyIsVi5sb2FkKGMsZnVuY3Rpb24oYSxkKXthPWIuS2EoYSxkfHxjKTtiLmFbY109YTtiLmItLTtiLmxvYWRJbXBvcnRzKGEpO2IubCgpfSxmdW5jdGlvbigpe2IuYVtjXT1udWxsO2IuYi0tO2IubCgpfSl9O2sucHJvdG90eXBlLkthPWZ1bmN0aW9uKGEsYil7aWYoIWEpcmV0dXJuIGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtoYSYmKGE9YS5yZXBsYWNlKFMsZnVuY3Rpb24oYSxiLGMpe3JldHVybi0xPT09CmEuaW5kZXhPZigidHlwZT0iKT9iKyIgdHlwZT1pbXBvcnQtZGlzYWJsZSAiK2M6YX0pKTt2YXIgYz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZW1wbGF0ZSIpO2MuaW5uZXJIVE1MPWE7aWYoYy5jb250ZW50KWE9Yy5jb250ZW50LGwoYSk7ZWxzZSBmb3IoYT1kb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7Yy5maXJzdENoaWxkOylhLmFwcGVuZENoaWxkKGMuZmlyc3RDaGlsZCk7aWYoYz1hLnF1ZXJ5U2VsZWN0b3IoImJhc2UiKSliPUMuWChjLmdldEF0dHJpYnV0ZSgiaHJlZiIpLGIpLGMucmVtb3ZlQXR0cmlidXRlKCJocmVmIik7Yz1tKGEsJ2xpbmtbcmVsPWltcG9ydF0sbGlua1tyZWw9c3R5bGVzaGVldF1baHJlZl1bdHlwZT1pbXBvcnQtZGlzYWJsZV0sc3R5bGU6bm90KFt0eXBlXSksbGlua1tyZWw9c3R5bGVzaGVldF1baHJlZl06bm90KFt0eXBlXSksc2NyaXB0Om5vdChbdHlwZV0pLHNjcmlwdFt0eXBlPSJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0Il0sc2NyaXB0W3R5cGU9InRleHQvamF2YXNjcmlwdCJdLHNjcmlwdFt0eXBlPSJtb2R1bGUiXScpOwp2YXIgZD0wO3EoYyxmdW5jdGlvbihhKXtnKGEpO0MuRWEoYSxiKTthLnNldEF0dHJpYnV0ZSgiaW1wb3J0LWRlcGVuZGVuY3kiLCIiKTtpZigic2NyaXB0Ij09PWEubG9jYWxOYW1lJiYhYS5zcmMmJmEudGV4dENvbnRlbnQpe2lmKCJtb2R1bGUiPT09YS50eXBlKXRocm93IEVycm9yKCJJbmxpbmUgbW9kdWxlIHNjcmlwdHMgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gSFRNTCBJbXBvcnRzLiIpO2Euc2V0QXR0cmlidXRlKCJzcmMiLCJkYXRhOnRleHQvamF2YXNjcmlwdDtjaGFyc2V0PXV0Zi04LCIrZW5jb2RlVVJJQ29tcG9uZW50KGEudGV4dENvbnRlbnQrKCJcbi8vIyBzb3VyY2VVUkw9IitiKyhkPyItIitkOiIiKSsiLmpzXG4iKSkpO2EudGV4dENvbnRlbnQ9IiI7ZCsrfX0pO3JldHVybiBhfTtrLnByb3RvdHlwZS5sPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcztpZighdGhpcy5iKXt0aGlzLmMuZGlzY29ubmVjdCgpO3RoaXMuZmxhdHRlbihkb2N1bWVudCk7dmFyIGI9ITEsYz0hMSxkPWZ1bmN0aW9uKCl7YyYmCmImJihhLmxvYWRJbXBvcnRzKGRvY3VtZW50KSxhLmJ8fChhLmMub2JzZXJ2ZShkb2N1bWVudC5oZWFkLHtjaGlsZExpc3Q6ITAsc3VidHJlZTohMH0pLGEuZGEoKSkpfTt0aGlzLk1hKGZ1bmN0aW9uKCl7Yz0hMDtkKCl9KTt0aGlzLkxhKGZ1bmN0aW9uKCl7Yj0hMDtkKCl9KX19O2sucHJvdG90eXBlLmZsYXR0ZW49ZnVuY3Rpb24oYSl7dmFyIGI9dGhpczthPW0oYSwibGlua1tyZWw9aW1wb3J0XSIpO3EoYSxmdW5jdGlvbihhKXt2YXIgYz1iLmFbYS5ocmVmXTsoYS5fX2ltcG9ydD1jKSYmYy5ub2RlVHlwZT09PU5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERSYmKGIuYVthLmhyZWZdPWEsYS5yZWFkeVN0YXRlPSJsb2FkaW5nIixhLl9faW1wb3J0PWEsYi5mbGF0dGVuKGMpLGEuYXBwZW5kQ2hpbGQoYykpfSl9O2sucHJvdG90eXBlLkxhPWZ1bmN0aW9uKGEpe2Z1bmN0aW9uIGIoZSl7aWYoZTxkKXt2YXIgZj1jW2VdLGg9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7Zi5yZW1vdmVBdHRyaWJ1dGUoImltcG9ydC1kZXBlbmRlbmN5Iik7CnEoZi5hdHRyaWJ1dGVzLGZ1bmN0aW9uKGEpe3JldHVybiBoLnNldEF0dHJpYnV0ZShhLm5hbWUsYS52YWx1ZSl9KTt1YT1oO2YucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQoaCxmKTtnKGgsZnVuY3Rpb24oKXt1YT1udWxsO2IoZSsxKX0pfWVsc2UgYSgpfXZhciBjPW0oZG9jdW1lbnQsInNjcmlwdFtpbXBvcnQtZGVwZW5kZW5jeV0iKSxkPWMubGVuZ3RoO2IoMCl9O2sucHJvdG90eXBlLk1hPWZ1bmN0aW9uKGEpe3ZhciBiPW0oZG9jdW1lbnQsInN0eWxlW2ltcG9ydC1kZXBlbmRlbmN5XSxsaW5rW3JlbD1zdHlsZXNoZWV0XVtpbXBvcnQtZGVwZW5kZW5jeV0iKSxkPWIubGVuZ3RoO2lmKGQpe3ZhciBlPWhhJiYhIWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoImxpbmtbcmVsPXN0eWxlc2hlZXRdW2hyZWZdW3R5cGU9aW1wb3J0LWRpc2FibGVdIik7cShiLGZ1bmN0aW9uKGIpe2coYixmdW5jdGlvbigpe2IucmVtb3ZlQXR0cmlidXRlKCJpbXBvcnQtZGVwZW5kZW5jeSIpOzA9PT0tLWQmJgphKCl9KTtpZihlJiZiLnBhcmVudE5vZGUhPT1kb2N1bWVudC5oZWFkKXt2YXIgZj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KGIubG9jYWxOYW1lKTtmLl9fYXBwbGllZEVsZW1lbnQ9YjtmLnNldEF0dHJpYnV0ZSgidHlwZSIsImltcG9ydC1wbGFjZWhvbGRlciIpO2IucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZixiLm5leHRTaWJsaW5nKTtmb3IoZj1jKGIpO2YmJmMoZik7KWY9YyhmKTtmLnBhcmVudE5vZGUhPT1kb2N1bWVudC5oZWFkJiYoZj1udWxsKTtkb2N1bWVudC5oZWFkLmluc2VydEJlZm9yZShiLGYpO2IucmVtb3ZlQXR0cmlidXRlKCJ0eXBlIil9fSl9ZWxzZSBhKCl9O2sucHJvdG90eXBlLmRhPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcyxiPW0oZG9jdW1lbnQsImxpbmtbcmVsPWltcG9ydF0iKTtxKGIsZnVuY3Rpb24oYil7cmV0dXJuIGEuZihiKX0sITApfTtrLnByb3RvdHlwZS5mPWZ1bmN0aW9uKGEpe2EuX19sb2FkZWR8fChhLl9fbG9hZGVkPSEwLGEuaW1wb3J0JiYoYS5pbXBvcnQucmVhZHlTdGF0ZT0KImNvbXBsZXRlIiksYS5kaXNwYXRjaEV2ZW50KGIoYS5pbXBvcnQ/ImxvYWQiOiJlcnJvciIse2J1YmJsZXM6ITEsY2FuY2VsYWJsZTohMSxkZXRhaWw6dm9pZCAwfSkpKX07ay5wcm90b3R5cGUuSmE9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcztxKGEsZnVuY3Rpb24oYSl7cmV0dXJuIHEoYS5hZGRlZE5vZGVzLGZ1bmN0aW9uKGEpe2EmJmEubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERSYmKGgoYSk/Yi5nKGEpOmIubG9hZEltcG9ydHMoYSkpfSl9KX07dmFyIHZhPW51bGw7aWYoTSl4PW0oZG9jdW1lbnQsImxpbmtbcmVsPWltcG9ydF0iKSxxKHgsZnVuY3Rpb24oYSl7YS5pbXBvcnQmJiJsb2FkaW5nIj09PWEuaW1wb3J0LnJlYWR5U3RhdGV8fChhLl9fbG9hZGVkPSEwKX0pLHg9ZnVuY3Rpb24oYSl7YT1hLnRhcmdldDtoKGEpJiYoYS5fX2xvYWRlZD0hMCl9LGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLHgsITApLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIiwKeCwhMCk7ZWxzZXt2YXIgWD1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE5vZGUucHJvdG90eXBlLCJiYXNlVVJJIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KCghWHx8WC5jb25maWd1cmFibGU/Tm9kZTpFbGVtZW50KS5wcm90b3R5cGUsImJhc2VVUkkiLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgYT1oKHRoaXMpP3RoaXM6Yyh0aGlzKTtyZXR1cm4gYT9hLmhyZWY6WCYmWC5nZXQ/WC5nZXQuY2FsbCh0aGlzKTooZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiYmFzZSIpfHx3aW5kb3cubG9jYXRpb24pLmhyZWZ9LGNvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxMaW5rRWxlbWVudC5wcm90b3R5cGUsImltcG9ydCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9faW1wb3J0fHxudWxsfSxjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMH0pO2UoZnVuY3Rpb24oKXt2YT1uZXcga30pfWYoZnVuY3Rpb24oKXtyZXR1cm4gZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChiKCJIVE1MSW1wb3J0c0xvYWRlZCIsCntjYW5jZWxhYmxlOiEwLGJ1YmJsZXM6ITAsZGV0YWlsOnZvaWQgMH0pKX0pO2EudXNlTmF0aXZlPU07YS53aGVuUmVhZHk9ZjthLmltcG9ydEZvckVsZW1lbnQ9YzthLmxvYWRJbXBvcnRzPWZ1bmN0aW9uKGEpe3ZhJiZ2YS5sb2FkSW1wb3J0cyhhKX19KSh3aW5kb3cuSFRNTEltcG9ydHM9d2luZG93LkhUTUxJbXBvcnRzfHx7fSk7LyoKCiBDb3B5cmlnaHQgKGMpIDIwMTQgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dAogVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQKIFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dAogQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28KIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiovCndpbmRvdy5XZWJDb21wb25lbnRzPXdpbmRvdy5XZWJDb21wb25lbnRzfHx7ZmxhZ3M6e319O3ZhciBDYT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdzY3JpcHRbc3JjKj0id2ViY29tcG9uZW50cy1saXRlLmpzIl0nKSxEYT0vd2MtKC4rKS8sdD17fTtpZighdC5ub09wdHMpe2xvY2F0aW9uLnNlYXJjaC5zbGljZSgxKS5zcGxpdCgiJiIpLmZvckVhY2goZnVuY3Rpb24oYSl7YT1hLnNwbGl0KCI9Iik7dmFyIGI7YVswXSYmKGI9YVswXS5tYXRjaChEYSkpJiYodFtiWzFdXT1hWzFdfHwhMCl9KTtpZihDYSlmb3IodmFyIEVhPTAsRmE9dm9pZCAwO0ZhPUNhLmF0dHJpYnV0ZXNbRWFdO0VhKyspInNyYyIhPT1GYS5uYW1lJiYodFtGYS5uYW1lXT1GYS52YWx1ZXx8ITApO2lmKHQubG9nJiZ0LmxvZy5zcGxpdCl7dmFyIEdhPXQubG9nLnNwbGl0KCIsIik7dC5sb2c9e307R2EuZm9yRWFjaChmdW5jdGlvbihhKXt0LmxvZ1thXT0hMH0pfWVsc2UgdC5sb2c9e319CndpbmRvdy5XZWJDb21wb25lbnRzLmZsYWdzPXQ7dmFyIEhhPXQuc2hhZHlkb207SGEmJih3aW5kb3cuU2hhZHlET009d2luZG93LlNoYWR5RE9NfHx7fSx3aW5kb3cuU2hhZHlET00uZm9yY2U9SGEpO3ZhciBJYT10LnJlZ2lzdGVyfHx0LmNlO0lhJiZ3aW5kb3cuY3VzdG9tRWxlbWVudHMmJih3aW5kb3cuY3VzdG9tRWxlbWVudHMuZm9yY2VQb2x5ZmlsbD1JYSk7LyoKCkNvcHlyaWdodCAoYykgMjAxNiBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuClRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQKVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQKVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0CkNvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvCnN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiovCmZ1bmN0aW9uIEphKCl7dGhpcy5wYT10aGlzLnJvb3Q9bnVsbDt0aGlzLlQ9ITE7dGhpcy5EPXRoaXMuUD10aGlzLmNhPXRoaXMuYXNzaWduZWRTbG90PXRoaXMuYXNzaWduZWROb2Rlcz10aGlzLkg9bnVsbDt0aGlzLmNoaWxkTm9kZXM9dGhpcy5uZXh0U2libGluZz10aGlzLnByZXZpb3VzU2libGluZz10aGlzLmxhc3RDaGlsZD10aGlzLmZpcnN0Q2hpbGQ9dGhpcy5wYXJlbnROb2RlPXRoaXMuSz12b2lkIDA7dGhpcy5rYT10aGlzLmxhPSExO3RoaXMuTz17fX1KYS5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJue319O2Z1bmN0aW9uIHUoYSl7YS5fX3NoYWR5fHwoYS5fX3NoYWR5PW5ldyBKYSk7cmV0dXJuIGEuX19zaGFkeX1mdW5jdGlvbiB2KGEpe3JldHVybiBhJiZhLl9fc2hhZHl9O3ZhciB3PXdpbmRvdy5TaGFkeURPTXx8e307dy5HYT0hKCFFbGVtZW50LnByb3RvdHlwZS5hdHRhY2hTaGFkb3d8fCFOb2RlLnByb3RvdHlwZS5nZXRSb290Tm9kZSk7dmFyIEthPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTm9kZS5wcm90b3R5cGUsImZpcnN0Q2hpbGQiKTt3Lm09ISEoS2EmJkthLmNvbmZpZ3VyYWJsZSYmS2EuZ2V0KTt3LmVhPXcuZm9yY2V8fCF3LkdhO3cuSj13Lm5vUGF0Y2h8fCExO3cub2E9dy5wcmVmZXJQZXJmb3JtYW5jZTtmdW5jdGlvbiB5KGEpe3JldHVybihhPXYoYSkpJiZ2b2lkIDAhPT1hLmZpcnN0Q2hpbGR9ZnVuY3Rpb24geihhKXtyZXR1cm4iU2hhZHlSb290Ij09PWEuemF9ZnVuY3Rpb24gTGEoYSl7cmV0dXJuKGE9KGE9dihhKSkmJmEucm9vdCkmJk1hKGEpfQp2YXIgTmE9RWxlbWVudC5wcm90b3R5cGUsT2E9TmEubWF0Y2hlc3x8TmEubWF0Y2hlc1NlbGVjdG9yfHxOYS5tb3pNYXRjaGVzU2VsZWN0b3J8fE5hLm1zTWF0Y2hlc1NlbGVjdG9yfHxOYS5vTWF0Y2hlc1NlbGVjdG9yfHxOYS53ZWJraXRNYXRjaGVzU2VsZWN0b3IsUGE9ZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIiIpLFFhPTAsUmE9W107KG5ldyBNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uKCl7Zm9yKDtSYS5sZW5ndGg7KXRyeXtSYS5zaGlmdCgpKCl9Y2F0Y2goYSl7dGhyb3cgUGEudGV4dENvbnRlbnQ9UWErKyxhO319KSkub2JzZXJ2ZShQYSx7Y2hhcmFjdGVyRGF0YTohMH0pO2Z1bmN0aW9uIFNhKGEpe1JhLnB1c2goYSk7UGEudGV4dENvbnRlbnQ9UWErK312YXIgVGE9ISFkb2N1bWVudC5jb250YWlucztmdW5jdGlvbiBVYShhLGIpe2Zvcig7Yjspe2lmKGI9PWEpcmV0dXJuITA7Yj1iLl9fc2hhZHlfcGFyZW50Tm9kZX1yZXR1cm4hMX0KZnVuY3Rpb24gVmEoYSl7Zm9yKHZhciBiPWEubGVuZ3RoLTE7MDw9YjtiLS0pe3ZhciBjPWFbYl0sZD1jLmdldEF0dHJpYnV0ZSgiaWQiKXx8Yy5nZXRBdHRyaWJ1dGUoIm5hbWUiKTtkJiYibGVuZ3RoIiE9PWQmJmlzTmFOKGQpJiYoYVtkXT1jKX1hLml0ZW09ZnVuY3Rpb24oYil7cmV0dXJuIGFbYl19O2EubmFtZWRJdGVtPWZ1bmN0aW9uKGIpe2lmKCJsZW5ndGgiIT09YiYmaXNOYU4oYikmJmFbYl0pcmV0dXJuIGFbYl07Zm9yKHZhciBjPWlhKGEpLGQ9Yy5uZXh0KCk7IWQuZG9uZTtkPWMubmV4dCgpKWlmKGQ9ZC52YWx1ZSwoZC5nZXRBdHRyaWJ1dGUoImlkIil8fGQuZ2V0QXR0cmlidXRlKCJuYW1lIikpPT1iKXJldHVybiBkO3JldHVybiBudWxsfTtyZXR1cm4gYX0KZnVuY3Rpb24gQShhLGIsYyxkKXtjPXZvaWQgMD09PWM/IiI6Yztmb3IodmFyIGUgaW4gYil7dmFyIGY9YltlXTtpZighKGQmJjA8PWQuaW5kZXhPZihlKSkpe2YuY29uZmlndXJhYmxlPSEwO3ZhciBnPWMrZTtpZihmLnZhbHVlKWFbZ109Zi52YWx1ZTtlbHNlIHRyeXtPYmplY3QuZGVmaW5lUHJvcGVydHkoYSxnLGYpfWNhdGNoKGgpe319fX1mdW5jdGlvbiBCKGEpe3ZhciBiPXt9O09iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGEpLmZvckVhY2goZnVuY3Rpb24oYyl7YltjXT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGEsYyl9KTtyZXR1cm4gYn07dmFyIFdhPVtdLFhhO2Z1bmN0aW9uIFlhKGEpe1hhfHwoWGE9ITAsU2EoWmEpKTtXYS5wdXNoKGEpfWZ1bmN0aW9uIFphKCl7WGE9ITE7Zm9yKHZhciBhPSEhV2EubGVuZ3RoO1dhLmxlbmd0aDspV2Euc2hpZnQoKSgpO3JldHVybiBhfVphLmxpc3Q9V2E7ZnVuY3Rpb24gJGEoKXt0aGlzLmE9ITE7dGhpcy5hZGRlZE5vZGVzPVtdO3RoaXMucmVtb3ZlZE5vZGVzPVtdO3RoaXMuUz1uZXcgU2V0fWZ1bmN0aW9uIGFiKGEpe2EuYXx8KGEuYT0hMCxTYShmdW5jdGlvbigpe2EuZmx1c2goKX0pKX0kYS5wcm90b3R5cGUuZmx1c2g9ZnVuY3Rpb24oKXtpZih0aGlzLmEpe3RoaXMuYT0hMTt2YXIgYT10aGlzLnRha2VSZWNvcmRzKCk7YS5sZW5ndGgmJnRoaXMuUy5mb3JFYWNoKGZ1bmN0aW9uKGIpe2IoYSl9KX19OyRhLnByb3RvdHlwZS50YWtlUmVjb3Jkcz1mdW5jdGlvbigpe2lmKHRoaXMuYWRkZWROb2Rlcy5sZW5ndGh8fHRoaXMucmVtb3ZlZE5vZGVzLmxlbmd0aCl7dmFyIGE9W3thZGRlZE5vZGVzOnRoaXMuYWRkZWROb2RlcyxyZW1vdmVkTm9kZXM6dGhpcy5yZW1vdmVkTm9kZXN9XTt0aGlzLmFkZGVkTm9kZXM9W107dGhpcy5yZW1vdmVkTm9kZXM9W107cmV0dXJuIGF9cmV0dXJuW119OwpmdW5jdGlvbiBiYihhLGIpe3ZhciBjPXUoYSk7Yy5IfHwoYy5IPW5ldyAkYSk7Yy5ILlMuYWRkKGIpO3ZhciBkPWMuSDtyZXR1cm57eWE6YixGOmQsQWE6YSx0YWtlUmVjb3JkczpmdW5jdGlvbigpe3JldHVybiBkLnRha2VSZWNvcmRzKCl9fX1mdW5jdGlvbiBjYihhKXt2YXIgYj1hJiZhLkY7YiYmKGIuUy5kZWxldGUoYS55YSksYi5TLnNpemV8fCh1KGEuQWEpLkg9bnVsbCkpfQpmdW5jdGlvbiBkYihhLGIpe3ZhciBjPWIuZ2V0Um9vdE5vZGUoKTtyZXR1cm4gYS5tYXAoZnVuY3Rpb24oYSl7dmFyIGI9Yz09PWEudGFyZ2V0LmdldFJvb3ROb2RlKCk7aWYoYiYmYS5hZGRlZE5vZGVzKXtpZihiPUFycmF5LmZyb20oYS5hZGRlZE5vZGVzKS5maWx0ZXIoZnVuY3Rpb24oYSl7cmV0dXJuIGM9PT1hLmdldFJvb3ROb2RlKCl9KSxiLmxlbmd0aClyZXR1cm4gYT1PYmplY3QuY3JlYXRlKGEpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShhLCJhZGRlZE5vZGVzIix7dmFsdWU6Yixjb25maWd1cmFibGU6ITB9KSxhfWVsc2UgaWYoYilyZXR1cm4gYX0pLmZpbHRlcihmdW5jdGlvbihhKXtyZXR1cm4gYX0pfTt2YXIgZWI9L1smXHUwMEEwIl0vZyxmYj0vWyZcdTAwQTA8Pl0vZztmdW5jdGlvbiBnYihhKXtzd2l0Y2goYSl7Y2FzZSAiJiI6cmV0dXJuIiZhbXA7IjtjYXNlICI8IjpyZXR1cm4iJmx0OyI7Y2FzZSAiPiI6cmV0dXJuIiZndDsiO2Nhc2UgJyInOnJldHVybiImcXVvdDsiO2Nhc2UgIlx1MDBhMCI6cmV0dXJuIiZuYnNwOyJ9fWZ1bmN0aW9uIGhiKGEpe2Zvcih2YXIgYj17fSxjPTA7YzxhLmxlbmd0aDtjKyspYlthW2NdXT0hMDtyZXR1cm4gYn12YXIgaWI9aGIoImFyZWEgYmFzZSBiciBjb2wgY29tbWFuZCBlbWJlZCBociBpbWcgaW5wdXQga2V5Z2VuIGxpbmsgbWV0YSBwYXJhbSBzb3VyY2UgdHJhY2sgd2JyIi5zcGxpdCgiICIpKSxqYj1oYigic3R5bGUgc2NyaXB0IHhtcCBpZnJhbWUgbm9lbWJlZCBub2ZyYW1lcyBwbGFpbnRleHQgbm9zY3JpcHQiLnNwbGl0KCIgIikpOwpmdW5jdGlvbiBrYihhLGIpeyJ0ZW1wbGF0ZSI9PT1hLmxvY2FsTmFtZSYmKGE9YS5jb250ZW50KTtmb3IodmFyIGM9IiIsZD1iP2IoYSk6YS5jaGlsZE5vZGVzLGU9MCxmPWQubGVuZ3RoLGc9dm9pZCAwO2U8ZiYmKGc9ZFtlXSk7ZSsrKXthOnt2YXIgaD1nO3ZhciBrPWEsbD1iO3N3aXRjaChoLm5vZGVUeXBlKXtjYXNlIE5vZGUuRUxFTUVOVF9OT0RFOms9aC5sb2NhbE5hbWU7Zm9yKHZhciBtPSI8IitrLHE9aC5hdHRyaWJ1dGVzLHg9MCxNO009cVt4XTt4KyspbSs9IiAiK00ubmFtZSsnPSInK00udmFsdWUucmVwbGFjZShlYixnYikrJyInO20rPSI+IjtoPWliW2tdP206bStrYihoLGwpKyI8LyIraysiPiI7YnJlYWsgYTtjYXNlIE5vZGUuVEVYVF9OT0RFOmg9aC5kYXRhO2g9ayYmamJbay5sb2NhbE5hbWVdP2g6aC5yZXBsYWNlKGZiLGdiKTticmVhayBhO2Nhc2UgTm9kZS5DT01NRU5UX05PREU6aD0iXHgzYyEtLSIraC5kYXRhKyItLVx4M2UiO2JyZWFrIGE7ZGVmYXVsdDp0aHJvdyB3aW5kb3cuY29uc29sZS5lcnJvcihoKSwKRXJyb3IoIm5vdCBpbXBsZW1lbnRlZCIpO319Yys9aH1yZXR1cm4gY307dmFyIHBiPXcubSxxYj17cXVlcnlTZWxlY3RvcjpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5fX3NoYWR5X25hdGl2ZV9xdWVyeVNlbGVjdG9yKGEpfSxxdWVyeVNlbGVjdG9yQWxsOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLl9fc2hhZHlfbmF0aXZlX3F1ZXJ5U2VsZWN0b3JBbGwoYSl9fSxyYj17fTtmdW5jdGlvbiBzYihhKXtyYlthXT1mdW5jdGlvbihiKXtyZXR1cm4gYlsiX19zaGFkeV9uYXRpdmVfIithXX19ZnVuY3Rpb24gdGIoYSxiKXtBKGEsYiwiX19zaGFkeV9uYXRpdmVfIik7Zm9yKHZhciBjIGluIGIpc2IoYyl9ZnVuY3Rpb24gRChhLGIpe2I9dm9pZCAwPT09Yj9bXTpiO2Zvcih2YXIgYz0wO2M8Yi5sZW5ndGg7YysrKXt2YXIgZD1iW2NdLGU9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihhLGQpO2UmJihPYmplY3QuZGVmaW5lUHJvcGVydHkoYSwiX19zaGFkeV9uYXRpdmVfIitkLGUpLGUudmFsdWU/cWJbZF18fChxYltkXT1lLnZhbHVlKTpzYihkKSl9fQp2YXIgRT1kb2N1bWVudC5jcmVhdGVUcmVlV2Fsa2VyKGRvY3VtZW50LE5vZGVGaWx0ZXIuU0hPV19BTEwsbnVsbCwhMSksRj1kb2N1bWVudC5jcmVhdGVUcmVlV2Fsa2VyKGRvY3VtZW50LE5vZGVGaWx0ZXIuU0hPV19FTEVNRU5ULG51bGwsITEpLHViPWRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCgiaW5lcnQiKTtmdW5jdGlvbiB2YihhKXtmb3IodmFyIGI7Yj1hLl9fc2hhZHlfbmF0aXZlX2ZpcnN0Q2hpbGQ7KWEuX19zaGFkeV9uYXRpdmVfcmVtb3ZlQ2hpbGQoYil9dmFyIHdiPVsiZmlyc3RFbGVtZW50Q2hpbGQiLCJsYXN0RWxlbWVudENoaWxkIiwiY2hpbGRyZW4iLCJjaGlsZEVsZW1lbnRDb3VudCJdLHhiPVsicXVlcnlTZWxlY3RvciIsInF1ZXJ5U2VsZWN0b3JBbGwiXTsKZnVuY3Rpb24geWIoKXt2YXIgYT1bImRpc3BhdGNoRXZlbnQiLCJhZGRFdmVudExpc3RlbmVyIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciJdO3dpbmRvdy5FdmVudFRhcmdldD9EKHdpbmRvdy5FdmVudFRhcmdldC5wcm90b3R5cGUsYSk6KEQoTm9kZS5wcm90b3R5cGUsYSksRChXaW5kb3cucHJvdG90eXBlLGEpKTtwYj9EKE5vZGUucHJvdG90eXBlLCJwYXJlbnROb2RlIGZpcnN0Q2hpbGQgbGFzdENoaWxkIHByZXZpb3VzU2libGluZyBuZXh0U2libGluZyBjaGlsZE5vZGVzIHBhcmVudEVsZW1lbnQgdGV4dENvbnRlbnQiLnNwbGl0KCIgIikpOnRiKE5vZGUucHJvdG90eXBlLHtwYXJlbnROb2RlOntnZXQ6ZnVuY3Rpb24oKXtFLmN1cnJlbnROb2RlPXRoaXM7cmV0dXJuIEUucGFyZW50Tm9kZSgpfX0sZmlyc3RDaGlsZDp7Z2V0OmZ1bmN0aW9uKCl7RS5jdXJyZW50Tm9kZT10aGlzO3JldHVybiBFLmZpcnN0Q2hpbGQoKX19LGxhc3RDaGlsZDp7Z2V0OmZ1bmN0aW9uKCl7RS5jdXJyZW50Tm9kZT0KdGhpcztyZXR1cm4gRS5sYXN0Q2hpbGQoKX19LHByZXZpb3VzU2libGluZzp7Z2V0OmZ1bmN0aW9uKCl7RS5jdXJyZW50Tm9kZT10aGlzO3JldHVybiBFLnByZXZpb3VzU2libGluZygpfX0sbmV4dFNpYmxpbmc6e2dldDpmdW5jdGlvbigpe0UuY3VycmVudE5vZGU9dGhpcztyZXR1cm4gRS5uZXh0U2libGluZygpfX0sY2hpbGROb2Rlczp7Z2V0OmZ1bmN0aW9uKCl7dmFyIGE9W107RS5jdXJyZW50Tm9kZT10aGlzO2Zvcih2YXIgYz1FLmZpcnN0Q2hpbGQoKTtjOylhLnB1c2goYyksYz1FLm5leHRTaWJsaW5nKCk7cmV0dXJuIGF9fSxwYXJlbnRFbGVtZW50OntnZXQ6ZnVuY3Rpb24oKXtGLmN1cnJlbnROb2RlPXRoaXM7cmV0dXJuIEYucGFyZW50Tm9kZSgpfX0sdGV4dENvbnRlbnQ6e2dldDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLm5vZGVUeXBlKXtjYXNlIE5vZGUuRUxFTUVOVF9OT0RFOmNhc2UgTm9kZS5ET0NVTUVOVF9GUkFHTUVOVF9OT0RFOmZvcih2YXIgYT1kb2N1bWVudC5jcmVhdGVUcmVlV2Fsa2VyKHRoaXMsCk5vZGVGaWx0ZXIuU0hPV19URVhULG51bGwsITEpLGM9IiIsZDtkPWEubmV4dE5vZGUoKTspYys9ZC5ub2RlVmFsdWU7cmV0dXJuIGM7ZGVmYXVsdDpyZXR1cm4gdGhpcy5ub2RlVmFsdWV9fSxzZXQ6ZnVuY3Rpb24oYSl7aWYoInVuZGVmaW5lZCI9PT10eXBlb2YgYXx8bnVsbD09PWEpYT0iIjtzd2l0Y2godGhpcy5ub2RlVHlwZSl7Y2FzZSBOb2RlLkVMRU1FTlRfTk9ERTpjYXNlIE5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERTp2Yih0aGlzKTsoMDxhLmxlbmd0aHx8dGhpcy5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFKSYmdGhpcy5fX3NoYWR5X25hdGl2ZV9pbnNlcnRCZWZvcmUoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoYSksdm9pZCAwKTticmVhaztkZWZhdWx0OnRoaXMubm9kZVZhbHVlPWF9fX19KTtEKE5vZGUucHJvdG90eXBlLCJhcHBlbmRDaGlsZCBpbnNlcnRCZWZvcmUgcmVtb3ZlQ2hpbGQgcmVwbGFjZUNoaWxkIGNsb25lTm9kZSBjb250YWlucyIuc3BsaXQoIiAiKSk7CmE9e2ZpcnN0RWxlbWVudENoaWxkOntnZXQ6ZnVuY3Rpb24oKXtGLmN1cnJlbnROb2RlPXRoaXM7cmV0dXJuIEYuZmlyc3RDaGlsZCgpfX0sbGFzdEVsZW1lbnRDaGlsZDp7Z2V0OmZ1bmN0aW9uKCl7Ri5jdXJyZW50Tm9kZT10aGlzO3JldHVybiBGLmxhc3RDaGlsZCgpfX0sY2hpbGRyZW46e2dldDpmdW5jdGlvbigpe3ZhciBhPVtdO0YuY3VycmVudE5vZGU9dGhpcztmb3IodmFyIGM9Ri5maXJzdENoaWxkKCk7YzspYS5wdXNoKGMpLGM9Ri5uZXh0U2libGluZygpO3JldHVybiBWYShhKX19LGNoaWxkRWxlbWVudENvdW50OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jaGlsZHJlbj90aGlzLmNoaWxkcmVuLmxlbmd0aDowfX19O3BiPyhEKEVsZW1lbnQucHJvdG90eXBlLHdiKSxEKEVsZW1lbnQucHJvdG90eXBlLFsicHJldmlvdXNFbGVtZW50U2libGluZyIsIm5leHRFbGVtZW50U2libGluZyIsImlubmVySFRNTCJdKSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEhUTUxFbGVtZW50LnByb3RvdHlwZSwKImNoaWxkcmVuIikmJkQoSFRNTEVsZW1lbnQucHJvdG90eXBlLFsiY2hpbGRyZW4iXSksT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihIVE1MRWxlbWVudC5wcm90b3R5cGUsImlubmVySFRNTCIpJiZEKEhUTUxFbGVtZW50LnByb3RvdHlwZSxbImlubmVySFRNTCJdKSk6KHRiKEVsZW1lbnQucHJvdG90eXBlLGEpLHRiKEVsZW1lbnQucHJvdG90eXBlLHtwcmV2aW91c0VsZW1lbnRTaWJsaW5nOntnZXQ6ZnVuY3Rpb24oKXtGLmN1cnJlbnROb2RlPXRoaXM7cmV0dXJuIEYucHJldmlvdXNTaWJsaW5nKCl9fSxuZXh0RWxlbWVudFNpYmxpbmc6e2dldDpmdW5jdGlvbigpe0YuY3VycmVudE5vZGU9dGhpcztyZXR1cm4gRi5uZXh0U2libGluZygpfX0saW5uZXJIVE1MOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4ga2IodGhpcyxmdW5jdGlvbihhKXtyZXR1cm4gYS5fX3NoYWR5X25hdGl2ZV9jaGlsZE5vZGVzfSl9LHNldDpmdW5jdGlvbihhKXt2YXIgYj0idGVtcGxhdGUiPT09dGhpcy5sb2NhbE5hbWU/CnRoaXMuY29udGVudDp0aGlzO3ZiKGIpO3ZhciBkPXRoaXMubG9jYWxOYW1lfHwiZGl2IjtkPXRoaXMubmFtZXNwYWNlVVJJJiZ0aGlzLm5hbWVzcGFjZVVSSSE9PXViLm5hbWVzcGFjZVVSST91Yi5jcmVhdGVFbGVtZW50TlModGhpcy5uYW1lc3BhY2VVUkksZCk6dWIuY3JlYXRlRWxlbWVudChkKTtkLmlubmVySFRNTD1hO2ZvcihhPSJ0ZW1wbGF0ZSI9PT10aGlzLmxvY2FsTmFtZT9kLmNvbnRlbnQ6ZDtkPWEuX19zaGFkeV9uYXRpdmVfZmlyc3RDaGlsZDspYi5fX3NoYWR5X25hdGl2ZV9pbnNlcnRCZWZvcmUoZCx2b2lkIDApfX19KSk7RChFbGVtZW50LnByb3RvdHlwZSwic2V0QXR0cmlidXRlIGdldEF0dHJpYnV0ZSBoYXNBdHRyaWJ1dGUgcmVtb3ZlQXR0cmlidXRlIGZvY3VzIGJsdXIiLnNwbGl0KCIgIikpO0QoRWxlbWVudC5wcm90b3R5cGUseGIpO0QoSFRNTEVsZW1lbnQucHJvdG90eXBlLFsiZm9jdXMiLCJibHVyIiwiY29udGFpbnMiXSk7cGImJkQoSFRNTEVsZW1lbnQucHJvdG90eXBlLApbInBhcmVudEVsZW1lbnQiLCJjaGlsZHJlbiIsImlubmVySFRNTCJdKTt3aW5kb3cuSFRNTFRlbXBsYXRlRWxlbWVudCYmRCh3aW5kb3cuSFRNTFRlbXBsYXRlRWxlbWVudC5wcm90b3R5cGUsWyJpbm5lckhUTUwiXSk7cGI/RChEb2N1bWVudEZyYWdtZW50LnByb3RvdHlwZSx3Yik6dGIoRG9jdW1lbnRGcmFnbWVudC5wcm90b3R5cGUsYSk7RChEb2N1bWVudEZyYWdtZW50LnByb3RvdHlwZSx4Yik7cGI/KEQoRG9jdW1lbnQucHJvdG90eXBlLHdiKSxEKERvY3VtZW50LnByb3RvdHlwZSxbImFjdGl2ZUVsZW1lbnQiXSkpOnRiKERvY3VtZW50LnByb3RvdHlwZSxhKTtEKERvY3VtZW50LnByb3RvdHlwZSxbImltcG9ydE5vZGUiLCJnZXRFbGVtZW50QnlJZCJdKTtEKERvY3VtZW50LnByb3RvdHlwZSx4Yil9O3ZhciB6Yj1CKHtnZXQgY2hpbGROb2Rlcygpe3JldHVybiB0aGlzLl9fc2hhZHlfY2hpbGROb2Rlc30sZ2V0IGZpcnN0Q2hpbGQoKXtyZXR1cm4gdGhpcy5fX3NoYWR5X2ZpcnN0Q2hpbGR9LGdldCBsYXN0Q2hpbGQoKXtyZXR1cm4gdGhpcy5fX3NoYWR5X2xhc3RDaGlsZH0sZ2V0IHRleHRDb250ZW50KCl7cmV0dXJuIHRoaXMuX19zaGFkeV90ZXh0Q29udGVudH0sc2V0IHRleHRDb250ZW50KGEpe3RoaXMuX19zaGFkeV90ZXh0Q29udGVudD1hfSxnZXQgY2hpbGRFbGVtZW50Q291bnQoKXtyZXR1cm4gdGhpcy5fX3NoYWR5X2NoaWxkRWxlbWVudENvdW50fSxnZXQgY2hpbGRyZW4oKXtyZXR1cm4gdGhpcy5fX3NoYWR5X2NoaWxkcmVufSxnZXQgZmlyc3RFbGVtZW50Q2hpbGQoKXtyZXR1cm4gdGhpcy5fX3NoYWR5X2ZpcnN0RWxlbWVudENoaWxkfSxnZXQgbGFzdEVsZW1lbnRDaGlsZCgpe3JldHVybiB0aGlzLl9fc2hhZHlfbGFzdEVsZW1lbnRDaGlsZH0sZ2V0IGlubmVySFRNTCgpe3JldHVybiB0aGlzLl9fc2hhZHlfaW5uZXJIVE1MfSwKc2V0IGlubmVySFRNTChhKXtyZXR1cm4gdGhpcy5fX3NoYWR5X2lubmVySFRNTD1hfSxnZXQgc2hhZG93Um9vdCgpe3JldHVybiB0aGlzLl9fc2hhZHlfc2hhZG93Um9vdH19KSxBYj1CKHtnZXQgcGFyZW50RWxlbWVudCgpe3JldHVybiB0aGlzLl9fc2hhZHlfcGFyZW50RWxlbWVudH0sZ2V0IHBhcmVudE5vZGUoKXtyZXR1cm4gdGhpcy5fX3NoYWR5X3BhcmVudE5vZGV9LGdldCBuZXh0U2libGluZygpe3JldHVybiB0aGlzLl9fc2hhZHlfbmV4dFNpYmxpbmd9LGdldCBwcmV2aW91c1NpYmxpbmcoKXtyZXR1cm4gdGhpcy5fX3NoYWR5X3ByZXZpb3VzU2libGluZ30sZ2V0IG5leHRFbGVtZW50U2libGluZygpe3JldHVybiB0aGlzLl9fc2hhZHlfbmV4dEVsZW1lbnRTaWJsaW5nfSxnZXQgcHJldmlvdXNFbGVtZW50U2libGluZygpe3JldHVybiB0aGlzLl9fc2hhZHlfcHJldmlvdXNFbGVtZW50U2libGluZ30sZ2V0IGNsYXNzTmFtZSgpe3JldHVybiB0aGlzLl9fc2hhZHlfY2xhc3NOYW1lfSwKc2V0IGNsYXNzTmFtZShhKXtyZXR1cm4gdGhpcy5fX3NoYWR5X2NsYXNzTmFtZT1hfX0pLEJiO2ZvcihCYiBpbiB6Yil6YltCYl0uZW51bWVyYWJsZT0hMTtmb3IodmFyIENiIGluIEFiKUFiW0NiXS5lbnVtZXJhYmxlPSExO3ZhciBEYj13Lm18fHcuSixFYj1EYj9mdW5jdGlvbigpe306ZnVuY3Rpb24oYSl7dmFyIGI9dShhKTtiLmxhfHwoYi5sYT0hMCxBKGEsQWIpKX0sRmI9RGI/ZnVuY3Rpb24oKXt9OmZ1bmN0aW9uKGEpe3ZhciBiPXUoYSk7Yi5rYXx8KGIua2E9ITAsQShhLHpiKSl9O3ZhciBHYj0iX19ldmVudFdyYXBwZXJzIitEYXRlLm5vdygpLEhiPWZ1bmN0aW9uKCl7dmFyIGE9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihFdmVudC5wcm90b3R5cGUsImNvbXBvc2VkIik7cmV0dXJuIGE/ZnVuY3Rpb24oYil7cmV0dXJuIGEuZ2V0LmNhbGwoYil9Om51bGx9KCksSWI9e2JsdXI6ITAsZm9jdXM6ITAsZm9jdXNpbjohMCxmb2N1c291dDohMCxjbGljazohMCxkYmxjbGljazohMCxtb3VzZWRvd246ITAsbW91c2VlbnRlcjohMCxtb3VzZWxlYXZlOiEwLG1vdXNlbW92ZTohMCxtb3VzZW91dDohMCxtb3VzZW92ZXI6ITAsbW91c2V1cDohMCx3aGVlbDohMCxiZWZvcmVpbnB1dDohMCxpbnB1dDohMCxrZXlkb3duOiEwLGtleXVwOiEwLGNvbXBvc2l0aW9uc3RhcnQ6ITAsY29tcG9zaXRpb251cGRhdGU6ITAsY29tcG9zaXRpb25lbmQ6ITAsdG91Y2hzdGFydDohMCx0b3VjaGVuZDohMCx0b3VjaG1vdmU6ITAsdG91Y2hjYW5jZWw6ITAscG9pbnRlcm92ZXI6ITAsCnBvaW50ZXJlbnRlcjohMCxwb2ludGVyZG93bjohMCxwb2ludGVybW92ZTohMCxwb2ludGVydXA6ITAscG9pbnRlcmNhbmNlbDohMCxwb2ludGVyb3V0OiEwLHBvaW50ZXJsZWF2ZTohMCxnb3Rwb2ludGVyY2FwdHVyZTohMCxsb3N0cG9pbnRlcmNhcHR1cmU6ITAsZHJhZ3N0YXJ0OiEwLGRyYWc6ITAsZHJhZ2VudGVyOiEwLGRyYWdsZWF2ZTohMCxkcmFnb3ZlcjohMCxkcm9wOiEwLGRyYWdlbmQ6ITAsRE9NQWN0aXZhdGU6ITAsRE9NRm9jdXNJbjohMCxET01Gb2N1c091dDohMCxrZXlwcmVzczohMH0sSmI9e0RPTUF0dHJNb2RpZmllZDohMCxET01BdHRyaWJ1dGVOYW1lQ2hhbmdlZDohMCxET01DaGFyYWN0ZXJEYXRhTW9kaWZpZWQ6ITAsRE9NRWxlbWVudE5hbWVDaGFuZ2VkOiEwLERPTU5vZGVJbnNlcnRlZDohMCxET01Ob2RlSW5zZXJ0ZWRJbnRvRG9jdW1lbnQ6ITAsRE9NTm9kZVJlbW92ZWQ6ITAsRE9NTm9kZVJlbW92ZWRGcm9tRG9jdW1lbnQ6ITAsRE9NU3VidHJlZU1vZGlmaWVkOiEwfTsKZnVuY3Rpb24gS2IoYSl7cmV0dXJuIGEgaW5zdGFuY2VvZiBOb2RlP2EuX19zaGFkeV9nZXRSb290Tm9kZSgpOmF9ZnVuY3Rpb24gTGIoYSxiKXt2YXIgYz1bXSxkPWE7Zm9yKGE9S2IoYSk7ZDspYy5wdXNoKGQpLGQuX19zaGFkeV9hc3NpZ25lZFNsb3Q/ZD1kLl9fc2hhZHlfYXNzaWduZWRTbG90OmQubm9kZVR5cGU9PT1Ob2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREUmJmQuaG9zdCYmKGJ8fGQhPT1hKT9kPWQuaG9zdDpkPWQuX19zaGFkeV9wYXJlbnROb2RlO2NbYy5sZW5ndGgtMV09PT1kb2N1bWVudCYmYy5wdXNoKHdpbmRvdyk7cmV0dXJuIGN9ZnVuY3Rpb24gTWIoYSl7YS5fX2NvbXBvc2VkUGF0aHx8KGEuX19jb21wb3NlZFBhdGg9TGIoYS50YXJnZXQsITApKTtyZXR1cm4gYS5fX2NvbXBvc2VkUGF0aH0KZnVuY3Rpb24gTmIoYSxiKXtpZigheilyZXR1cm4gYTthPUxiKGEsITApO2Zvcih2YXIgYz0wLGQsZT12b2lkIDAsZixnPXZvaWQgMDtjPGIubGVuZ3RoO2MrKylpZihkPWJbY10sZj1LYihkKSxmIT09ZSYmKGc9YS5pbmRleE9mKGYpLGU9ZiksIXooZil8fC0xPGcpcmV0dXJuIGR9ZnVuY3Rpb24gT2IoYSl7ZnVuY3Rpb24gYihiLGQpe2I9bmV3IGEoYixkKTtiLl9fY29tcG9zZWQ9ZCYmISFkLmNvbXBvc2VkO3JldHVybiBifWIuX19wcm90b19fPWE7Yi5wcm90b3R5cGU9YS5wcm90b3R5cGU7cmV0dXJuIGJ9dmFyIFBiPXtmb2N1czohMCxibHVyOiEwfTtmdW5jdGlvbiBRYihhKXtyZXR1cm4gYS5fX3RhcmdldCE9PWEudGFyZ2V0fHxhLl9fcmVsYXRlZFRhcmdldCE9PWEucmVsYXRlZFRhcmdldH0KZnVuY3Rpb24gUmIoYSxiLGMpe2lmKGM9Yi5fX2hhbmRsZXJzJiZiLl9faGFuZGxlcnNbYS50eXBlXSYmYi5fX2hhbmRsZXJzW2EudHlwZV1bY10pZm9yKHZhciBkPTAsZTsoZT1jW2RdKSYmKCFRYihhKXx8YS50YXJnZXQhPT1hLnJlbGF0ZWRUYXJnZXQpJiYoZS5jYWxsKGIsYSksIWEuX19pbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQpO2QrKyk7fQpmdW5jdGlvbiBTYihhKXt2YXIgYj1hLmNvbXBvc2VkUGF0aCgpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShhLCJjdXJyZW50VGFyZ2V0Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGR9LGNvbmZpZ3VyYWJsZTohMH0pO2Zvcih2YXIgYz1iLmxlbmd0aC0xOzA8PWM7Yy0tKXt2YXIgZD1iW2NdO1JiKGEsZCwiY2FwdHVyZSIpO2lmKGEuWilyZXR1cm59T2JqZWN0LmRlZmluZVByb3BlcnR5KGEsImV2ZW50UGhhc2UiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gRXZlbnQuQVRfVEFSR0VUfX0pO3ZhciBlO2ZvcihjPTA7YzxiLmxlbmd0aDtjKyspe2Q9YltjXTt2YXIgZj12KGQpO2Y9ZiYmZi5yb290O2lmKDA9PT1jfHxmJiZmPT09ZSlpZihSYihhLGQsImJ1YmJsZSIpLGQhPT13aW5kb3cmJihlPWQuX19zaGFkeV9nZXRSb290Tm9kZSgpKSxhLlopYnJlYWt9fQpmdW5jdGlvbiBUYihhLGIsYyxkLGUsZil7Zm9yKHZhciBnPTA7ZzxhLmxlbmd0aDtnKyspe3ZhciBoPWFbZ10saz1oLnR5cGUsbD1oLmNhcHR1cmUsbT1oLm9uY2UscT1oLnBhc3NpdmU7aWYoYj09PWgubm9kZSYmYz09PWsmJmQ9PT1sJiZlPT09bSYmZj09PXEpcmV0dXJuIGd9cmV0dXJuLTF9CmZ1bmN0aW9uIFViKGEsYixjKXtpZihiKXt2YXIgZD10eXBlb2YgYjtpZigiZnVuY3Rpb24iPT09ZHx8Im9iamVjdCI9PT1kKWlmKCJvYmplY3QiIT09ZHx8Yi5oYW5kbGVFdmVudCYmImZ1bmN0aW9uIj09PXR5cGVvZiBiLmhhbmRsZUV2ZW50KXtpZihKYlthXSlyZXR1cm4gdGhpcy5fX3NoYWR5X25hdGl2ZV9hZGRFdmVudExpc3RlbmVyKGEsYixjKTtpZihjJiYib2JqZWN0Ij09PXR5cGVvZiBjKXt2YXIgZT0hIWMuY2FwdHVyZTt2YXIgZj0hIWMub25jZTt2YXIgZz0hIWMucGFzc2l2ZX1lbHNlIGU9ISFjLGc9Zj0hMTt2YXIgaD1jJiZjLiR8fHRoaXMsaz1iW0diXTtpZihrKXtpZigtMTxUYihrLGgsYSxlLGYsZykpcmV0dXJufWVsc2UgYltHYl09W107az1mdW5jdGlvbihlKXtmJiZ0aGlzLl9fc2hhZHlfcmVtb3ZlRXZlbnRMaXN0ZW5lcihhLGIsYyk7ZS5fX3RhcmdldHx8VmIoZSk7aWYoaCE9PXRoaXMpe3ZhciBnPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwiY3VycmVudFRhcmdldCIpOwpPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiY3VycmVudFRhcmdldCIse2dldDpmdW5jdGlvbigpe3JldHVybiBofSxjb25maWd1cmFibGU6ITB9KX1lLl9fcHJldmlvdXNDdXJyZW50VGFyZ2V0PWUuY3VycmVudFRhcmdldDtpZigheihoKXx8LTEhPWUuY29tcG9zZWRQYXRoKCkuaW5kZXhPZihoKSlpZihlLmNvbXBvc2VkfHwtMTxlLmNvbXBvc2VkUGF0aCgpLmluZGV4T2YoaCkpaWYoUWIoZSkmJmUudGFyZ2V0PT09ZS5yZWxhdGVkVGFyZ2V0KWUuZXZlbnRQaGFzZT09PUV2ZW50LkJVQkJMSU5HX1BIQVNFJiZlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO2Vsc2UgaWYoZS5ldmVudFBoYXNlPT09RXZlbnQuQ0FQVFVSSU5HX1BIQVNFfHxlLmJ1YmJsZXN8fGUudGFyZ2V0PT09aHx8aCBpbnN0YW5jZW9mIFdpbmRvdyl7dmFyIGs9ImZ1bmN0aW9uIj09PWQ/Yi5jYWxsKGgsZSk6Yi5oYW5kbGVFdmVudCYmYi5oYW5kbGVFdmVudChlKTtoIT09dGhpcyYmKGc/KE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLAoiY3VycmVudFRhcmdldCIsZyksZz1udWxsKTpkZWxldGUgZS5jdXJyZW50VGFyZ2V0KTtyZXR1cm4ga319O2JbR2JdLnB1c2goe25vZGU6aCx0eXBlOmEsY2FwdHVyZTplLG9uY2U6ZixwYXNzaXZlOmcsWWE6a30pO1BiW2FdPyh0aGlzLl9faGFuZGxlcnM9dGhpcy5fX2hhbmRsZXJzfHx7fSx0aGlzLl9faGFuZGxlcnNbYV09dGhpcy5fX2hhbmRsZXJzW2FdfHx7Y2FwdHVyZTpbXSxidWJibGU6W119LHRoaXMuX19oYW5kbGVyc1thXVtlPyJjYXB0dXJlIjoiYnViYmxlIl0ucHVzaChrKSk6dGhpcy5fX3NoYWR5X25hdGl2ZV9hZGRFdmVudExpc3RlbmVyKGEsayxjKX19fQpmdW5jdGlvbiBXYihhLGIsYyl7aWYoYil7aWYoSmJbYV0pcmV0dXJuIHRoaXMuX19zaGFkeV9uYXRpdmVfcmVtb3ZlRXZlbnRMaXN0ZW5lcihhLGIsYyk7aWYoYyYmIm9iamVjdCI9PT10eXBlb2YgYyl7dmFyIGQ9ISFjLmNhcHR1cmU7dmFyIGU9ISFjLm9uY2U7dmFyIGY9ISFjLnBhc3NpdmV9ZWxzZSBkPSEhYyxmPWU9ITE7dmFyIGc9YyYmYy4kfHx0aGlzLGg9dm9pZCAwO3ZhciBrPW51bGw7dHJ5e2s9YltHYl19Y2F0Y2gobCl7fWsmJihlPVRiKGssZyxhLGQsZSxmKSwtMTxlJiYoaD1rLnNwbGljZShlLDEpWzBdLllhLGsubGVuZ3RofHwoYltHYl09dm9pZCAwKSkpO3RoaXMuX19zaGFkeV9uYXRpdmVfcmVtb3ZlRXZlbnRMaXN0ZW5lcihhLGh8fGIsYyk7aCYmUGJbYV0mJnRoaXMuX19oYW5kbGVycyYmdGhpcy5fX2hhbmRsZXJzW2FdJiYoYT10aGlzLl9faGFuZGxlcnNbYV1bZD8iY2FwdHVyZSI6ImJ1YmJsZSJdLGg9YS5pbmRleE9mKGgpLC0xPGgmJmEuc3BsaWNlKGgsMSkpfX0KZnVuY3Rpb24gWGIoKXtmb3IodmFyIGEgaW4gUGIpd2luZG93Ll9fc2hhZHlfbmF0aXZlX2FkZEV2ZW50TGlzdGVuZXIoYSxmdW5jdGlvbihhKXthLl9fdGFyZ2V0fHwoVmIoYSksU2IoYSkpfSwhMCl9CnZhciBZYj1CKHtnZXQgY29tcG9zZWQoKXt2b2lkIDA9PT10aGlzLl9fY29tcG9zZWQmJihIYj90aGlzLl9fY29tcG9zZWQ9ImZvY3VzaW4iPT09dGhpcy50eXBlfHwiZm9jdXNvdXQiPT09dGhpcy50eXBlfHxIYih0aGlzKTohMSE9PXRoaXMuaXNUcnVzdGVkJiYodGhpcy5fX2NvbXBvc2VkPUliW3RoaXMudHlwZV0pKTtyZXR1cm4gdGhpcy5fX2NvbXBvc2VkfHwhMX0sY29tcG9zZWRQYXRoOmZ1bmN0aW9uKCl7dGhpcy5fX2NvbXBvc2VkUGF0aHx8KHRoaXMuX19jb21wb3NlZFBhdGg9TGIodGhpcy5fX3RhcmdldCx0aGlzLmNvbXBvc2VkKSk7cmV0dXJuIHRoaXMuX19jb21wb3NlZFBhdGh9LGdldCB0YXJnZXQoKXtyZXR1cm4gTmIodGhpcy5jdXJyZW50VGFyZ2V0fHx0aGlzLl9fcHJldmlvdXNDdXJyZW50VGFyZ2V0LHRoaXMuY29tcG9zZWRQYXRoKCkpfSxnZXQgcmVsYXRlZFRhcmdldCgpe2lmKCF0aGlzLl9fcmVsYXRlZFRhcmdldClyZXR1cm4gbnVsbDt0aGlzLl9fcmVsYXRlZFRhcmdldENvbXBvc2VkUGF0aHx8Cih0aGlzLl9fcmVsYXRlZFRhcmdldENvbXBvc2VkUGF0aD1MYih0aGlzLl9fcmVsYXRlZFRhcmdldCwhMCkpO3JldHVybiBOYih0aGlzLmN1cnJlbnRUYXJnZXR8fHRoaXMuX19wcmV2aW91c0N1cnJlbnRUYXJnZXQsdGhpcy5fX3JlbGF0ZWRUYXJnZXRDb21wb3NlZFBhdGgpfSxzdG9wUHJvcGFnYXRpb246ZnVuY3Rpb24oKXtFdmVudC5wcm90b3R5cGUuc3RvcFByb3BhZ2F0aW9uLmNhbGwodGhpcyk7dGhpcy5aPSEwfSxzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb246ZnVuY3Rpb24oKXtFdmVudC5wcm90b3R5cGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uLmNhbGwodGhpcyk7dGhpcy5aPXRoaXMuX19pbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ9ITB9fSk7CmZ1bmN0aW9uIFZiKGEpe2EuX190YXJnZXQ9YS50YXJnZXQ7YS5fX3JlbGF0ZWRUYXJnZXQ9YS5yZWxhdGVkVGFyZ2V0O2lmKHcubSl7dmFyIGI9T2JqZWN0LmdldFByb3RvdHlwZU9mKGEpO2lmKCFPYmplY3QuaGFzT3duUHJvcGVydHkoYiwiX19zaGFkeV9wYXRjaGVkUHJvdG8iKSl7dmFyIGM9T2JqZWN0LmNyZWF0ZShiKTtjLl9fc2hhZHlfc291cmNlUHJvdG89YjtBKGMsWWIpO2IuX19zaGFkeV9wYXRjaGVkUHJvdG89Y31hLl9fcHJvdG9fXz1iLl9fc2hhZHlfcGF0Y2hlZFByb3RvfWVsc2UgQShhLFliKX12YXIgWmI9T2IoRXZlbnQpLCRiPU9iKEN1c3RvbUV2ZW50KSxhYz1PYihNb3VzZUV2ZW50KTsKZnVuY3Rpb24gYmMoKXtpZighSGImJk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoRXZlbnQucHJvdG90eXBlLCJpc1RydXN0ZWQiKSl7dmFyIGE9ZnVuY3Rpb24oKXt2YXIgYT1uZXcgTW91c2VFdmVudCgiY2xpY2siLHtidWJibGVzOiEwLGNhbmNlbGFibGU6ITAsY29tcG9zZWQ6ITB9KTt0aGlzLl9fc2hhZHlfZGlzcGF0Y2hFdmVudChhKX07RWxlbWVudC5wcm90b3R5cGUuY2xpY2s/RWxlbWVudC5wcm90b3R5cGUuY2xpY2s9YTpIVE1MRWxlbWVudC5wcm90b3R5cGUuY2xpY2smJihIVE1MRWxlbWVudC5wcm90b3R5cGUuY2xpY2s9YSl9fXZhciBjYz1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhEb2N1bWVudC5wcm90b3R5cGUpLmZpbHRlcihmdW5jdGlvbihhKXtyZXR1cm4ib24iPT09YS5zdWJzdHJpbmcoMCwyKX0pO2Z1bmN0aW9uIGRjKGEsYil7cmV0dXJue2luZGV4OmEsTDpbXSxSOmJ9fQpmdW5jdGlvbiBlYyhhLGIsYyxkKXt2YXIgZT0wLGY9MCxnPTAsaD0wLGs9TWF0aC5taW4oYi1lLGQtZik7aWYoMD09ZSYmMD09ZilhOntmb3IoZz0wO2c8aztnKyspaWYoYVtnXSE9PWNbZ10pYnJlYWsgYTtnPWt9aWYoYj09YS5sZW5ndGgmJmQ9PWMubGVuZ3RoKXtoPWEubGVuZ3RoO2Zvcih2YXIgbD1jLmxlbmd0aCxtPTA7bTxrLWcmJmZjKGFbLS1oXSxjWy0tbF0pOyltKys7aD1tfWUrPWc7Zis9ZztiLT1oO2QtPWg7aWYoMD09Yi1lJiYwPT1kLWYpcmV0dXJuW107aWYoZT09Yil7Zm9yKGI9ZGMoZSwwKTtmPGQ7KWIuTC5wdXNoKGNbZisrXSk7cmV0dXJuW2JdfWlmKGY9PWQpcmV0dXJuW2RjKGUsYi1lKV07az1lO2c9ZjtkPWQtZysxO2g9Yi1rKzE7Yj1BcnJheShkKTtmb3IobD0wO2w8ZDtsKyspYltsXT1BcnJheShoKSxiW2xdWzBdPWw7Zm9yKGw9MDtsPGg7bCsrKWJbMF1bbF09bDtmb3IobD0xO2w8ZDtsKyspZm9yKG09MTttPGg7bSsrKWlmKGFbayttLTFdPT09Y1tnK2wtMV0pYltsXVttXT0KYltsLTFdW20tMV07ZWxzZXt2YXIgcT1iW2wtMV1bbV0rMSx4PWJbbF1bbS0xXSsxO2JbbF1bbV09cTx4P3E6eH1rPWIubGVuZ3RoLTE7Zz1iWzBdLmxlbmd0aC0xO2Q9YltrXVtnXTtmb3IoYT1bXTswPGt8fDA8ZzspMD09az8oYS5wdXNoKDIpLGctLSk6MD09Zz8oYS5wdXNoKDMpLGstLSk6KGg9YltrLTFdW2ctMV0sbD1iW2stMV1bZ10sbT1iW2tdW2ctMV0scT1sPG0/bDxoP2w6aDptPGg/bTpoLHE9PWg/KGg9PWQ/YS5wdXNoKDApOihhLnB1c2goMSksZD1oKSxrLS0sZy0tKTpxPT1sPyhhLnB1c2goMyksay0tLGQ9bCk6KGEucHVzaCgyKSxnLS0sZD1tKSk7YS5yZXZlcnNlKCk7Yj12b2lkIDA7az1bXTtmb3IoZz0wO2c8YS5sZW5ndGg7ZysrKXN3aXRjaChhW2ddKXtjYXNlIDA6YiYmKGsucHVzaChiKSxiPXZvaWQgMCk7ZSsrO2YrKzticmVhaztjYXNlIDE6Ynx8KGI9ZGMoZSwwKSk7Yi5SKys7ZSsrO2IuTC5wdXNoKGNbZl0pO2YrKzticmVhaztjYXNlIDI6Ynx8KGI9ZGMoZSwwKSk7CmIuUisrO2UrKzticmVhaztjYXNlIDM6Ynx8KGI9ZGMoZSwwKSksYi5MLnB1c2goY1tmXSksZisrfWImJmsucHVzaChiKTtyZXR1cm4ga31mdW5jdGlvbiBmYyhhLGIpe3JldHVybiBhPT09Yn07ZnVuY3Rpb24gZ2MoYSxiLGMpe0ViKGEpO2M9Y3x8bnVsbDt2YXIgZD11KGEpLGU9dShiKSxmPWM/dShjKTpudWxsO2QucHJldmlvdXNTaWJsaW5nPWM/Zi5wcmV2aW91c1NpYmxpbmc6Yi5fX3NoYWR5X2xhc3RDaGlsZDtpZihmPXYoZC5wcmV2aW91c1NpYmxpbmcpKWYubmV4dFNpYmxpbmc9YTtpZihmPXYoZC5uZXh0U2libGluZz1jKSlmLnByZXZpb3VzU2libGluZz1hO2QucGFyZW50Tm9kZT1iO2M/Yz09PWUuZmlyc3RDaGlsZCYmKGUuZmlyc3RDaGlsZD1hKTooZS5sYXN0Q2hpbGQ9YSxlLmZpcnN0Q2hpbGR8fChlLmZpcnN0Q2hpbGQ9YSkpO2UuY2hpbGROb2Rlcz1udWxsfQpmdW5jdGlvbiBoYyhhLGIsYyl7RmIoYik7dmFyIGQ9dShiKTt2b2lkIDAhPT1kLmZpcnN0Q2hpbGQmJihkLmNoaWxkTm9kZXM9bnVsbCk7aWYoYS5ub2RlVHlwZT09PU5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERSl7ZD1hLl9fc2hhZHlfY2hpbGROb2Rlcztmb3IodmFyIGU9MDtlPGQubGVuZ3RoO2UrKylnYyhkW2VdLGIsYyk7YT11KGEpO2I9dm9pZCAwIT09YS5maXJzdENoaWxkP251bGw6dm9pZCAwO2EuZmlyc3RDaGlsZD1hLmxhc3RDaGlsZD1iO2EuY2hpbGROb2Rlcz1ifWVsc2UgZ2MoYSxiLGMpfQpmdW5jdGlvbiBpYyhhLGIpe3ZhciBjPXUoYSk7Yj11KGIpO2E9PT1iLmZpcnN0Q2hpbGQmJihiLmZpcnN0Q2hpbGQ9Yy5uZXh0U2libGluZyk7YT09PWIubGFzdENoaWxkJiYoYi5sYXN0Q2hpbGQ9Yy5wcmV2aW91c1NpYmxpbmcpO2E9Yy5wcmV2aW91c1NpYmxpbmc7dmFyIGQ9Yy5uZXh0U2libGluZzthJiYodShhKS5uZXh0U2libGluZz1kKTtkJiYodShkKS5wcmV2aW91c1NpYmxpbmc9YSk7Yy5wYXJlbnROb2RlPWMucHJldmlvdXNTaWJsaW5nPWMubmV4dFNpYmxpbmc9dm9pZCAwO3ZvaWQgMCE9PWIuY2hpbGROb2RlcyYmKGIuY2hpbGROb2Rlcz1udWxsKX0KZnVuY3Rpb24gamMoYSl7dmFyIGI9dShhKTtpZih2b2lkIDA9PT1iLmZpcnN0Q2hpbGQpe2IuY2hpbGROb2Rlcz1udWxsO3ZhciBjPWIuZmlyc3RDaGlsZD1hLl9fc2hhZHlfbmF0aXZlX2ZpcnN0Q2hpbGR8fG51bGw7Yi5sYXN0Q2hpbGQ9YS5fX3NoYWR5X25hdGl2ZV9sYXN0Q2hpbGR8fG51bGw7RmIoYSk7Yj1jO2ZvcihjPXZvaWQgMDtiO2I9Yi5fX3NoYWR5X25hdGl2ZV9uZXh0U2libGluZyl7dmFyIGQ9dShiKTtkLnBhcmVudE5vZGU9YTtkLm5leHRTaWJsaW5nPWIuX19zaGFkeV9uYXRpdmVfbmV4dFNpYmxpbmd8fG51bGw7ZC5wcmV2aW91c1NpYmxpbmc9Y3x8bnVsbDtjPWI7RWIoYil9fX07dmFyIGtjPW51bGw7ZnVuY3Rpb24gRygpe2tjfHwoa2M9d2luZG93LlNoYWR5Q1NTJiZ3aW5kb3cuU2hhZHlDU1MuU2NvcGluZ1NoaW0pO3JldHVybiBrY3x8bnVsbH1mdW5jdGlvbiBsYyhhLGIpe3ZhciBjPUcoKTtjJiZjLnVuc2NvcGVOb2RlKGEsYil9ZnVuY3Rpb24gbWMoYSxiKXt2YXIgYz1HKCk7aWYoIWMpcmV0dXJuITA7aWYoYS5ub2RlVHlwZT09PU5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERSl7Yz0hMDthPWEuX19zaGFkeV9jaGlsZE5vZGVzO2Zvcih2YXIgZD0wO2MmJmQ8YS5sZW5ndGg7ZCsrKWM9YyYmbWMoYVtkXSxiKTtyZXR1cm4gY31yZXR1cm4gYS5ub2RlVHlwZSE9PU5vZGUuRUxFTUVOVF9OT0RFPyEwOmMuY3VycmVudFNjb3BlRm9yTm9kZShhKT09PWJ9ZnVuY3Rpb24gbmMoYSl7aWYoYS5ub2RlVHlwZSE9PU5vZGUuRUxFTUVOVF9OT0RFKXJldHVybiIiO3ZhciBiPUcoKTtyZXR1cm4gYj9iLmN1cnJlbnRTY29wZUZvck5vZGUoYSk6IiJ9CmZ1bmN0aW9uIG9jKGEsYil7aWYoYSl7YS5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFJiZiKGEpO2E9YS5fX3NoYWR5X2NoaWxkTm9kZXM7Zm9yKHZhciBjPTAsZDtjPGEubGVuZ3RoO2MrKylkPWFbY10sZC5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFJiZvYyhkLGIpfX07dmFyIHBjPXdpbmRvdy5kb2N1bWVudCxxYz13Lm9hLHJjPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTm9kZS5wcm90b3R5cGUsImlzQ29ubmVjdGVkIiksc2M9cmMmJnJjLmdldDtmdW5jdGlvbiB0YyhhKXtmb3IodmFyIGI7Yj1hLl9fc2hhZHlfZmlyc3RDaGlsZDspYS5fX3NoYWR5X3JlbW92ZUNoaWxkKGIpfWZ1bmN0aW9uIHVjKGEpe3ZhciBiPXYoYSk7aWYoYiYmdm9pZCAwIT09Yi5LKXtiPWEuX19zaGFkeV9jaGlsZE5vZGVzO2Zvcih2YXIgYz0wLGQ9Yi5sZW5ndGgsZT12b2lkIDA7YzxkJiYoZT1iW2NdKTtjKyspdWMoZSl9aWYoYT12KGEpKWEuSz12b2lkIDB9ZnVuY3Rpb24gdmMoYSl7dmFyIGI9YTthJiYic2xvdCI9PT1hLmxvY2FsTmFtZSYmKGI9KGI9KGI9dihhKSkmJmIuRCkmJmIubGVuZ3RoP2JbMF06dmMoYS5fX3NoYWR5X25leHRTaWJsaW5nKSk7cmV0dXJuIGJ9CmZ1bmN0aW9uIHdjKGEsYixjKXtpZihhPShhPXYoYSkpJiZhLkgpYiYmYS5hZGRlZE5vZGVzLnB1c2goYiksYyYmYS5yZW1vdmVkTm9kZXMucHVzaChjKSxhYihhKX0KdmFyIENjPUIoe2dldCBwYXJlbnROb2RlKCl7dmFyIGE9dih0aGlzKTthPWEmJmEucGFyZW50Tm9kZTtyZXR1cm4gdm9pZCAwIT09YT9hOnRoaXMuX19zaGFkeV9uYXRpdmVfcGFyZW50Tm9kZX0sZ2V0IGZpcnN0Q2hpbGQoKXt2YXIgYT12KHRoaXMpO2E9YSYmYS5maXJzdENoaWxkO3JldHVybiB2b2lkIDAhPT1hP2E6dGhpcy5fX3NoYWR5X25hdGl2ZV9maXJzdENoaWxkfSxnZXQgbGFzdENoaWxkKCl7dmFyIGE9dih0aGlzKTthPWEmJmEubGFzdENoaWxkO3JldHVybiB2b2lkIDAhPT1hP2E6dGhpcy5fX3NoYWR5X25hdGl2ZV9sYXN0Q2hpbGR9LGdldCBuZXh0U2libGluZygpe3ZhciBhPXYodGhpcyk7YT1hJiZhLm5leHRTaWJsaW5nO3JldHVybiB2b2lkIDAhPT1hP2E6dGhpcy5fX3NoYWR5X25hdGl2ZV9uZXh0U2libGluZ30sZ2V0IHByZXZpb3VzU2libGluZygpe3ZhciBhPXYodGhpcyk7YT1hJiZhLnByZXZpb3VzU2libGluZztyZXR1cm4gdm9pZCAwIT09YT9hOnRoaXMuX19zaGFkeV9uYXRpdmVfcHJldmlvdXNTaWJsaW5nfSwKZ2V0IGNoaWxkTm9kZXMoKXtpZih5KHRoaXMpKXt2YXIgYT12KHRoaXMpO2lmKCFhLmNoaWxkTm9kZXMpe2EuY2hpbGROb2Rlcz1bXTtmb3IodmFyIGI9dGhpcy5fX3NoYWR5X2ZpcnN0Q2hpbGQ7YjtiPWIuX19zaGFkeV9uZXh0U2libGluZylhLmNoaWxkTm9kZXMucHVzaChiKX12YXIgYz1hLmNoaWxkTm9kZXN9ZWxzZSBjPXRoaXMuX19zaGFkeV9uYXRpdmVfY2hpbGROb2RlcztjLml0ZW09ZnVuY3Rpb24oYSl7cmV0dXJuIGNbYV19O3JldHVybiBjfSxnZXQgcGFyZW50RWxlbWVudCgpe3ZhciBhPXYodGhpcyk7KGE9YSYmYS5wYXJlbnROb2RlKSYmYS5ub2RlVHlwZSE9PU5vZGUuRUxFTUVOVF9OT0RFJiYoYT1udWxsKTtyZXR1cm4gdm9pZCAwIT09YT9hOnRoaXMuX19zaGFkeV9uYXRpdmVfcGFyZW50RWxlbWVudH0sZ2V0IGlzQ29ubmVjdGVkKCl7aWYoc2MmJnNjLmNhbGwodGhpcykpcmV0dXJuITA7aWYodGhpcy5ub2RlVHlwZT09Tm9kZS5ET0NVTUVOVF9GUkFHTUVOVF9OT0RFKXJldHVybiExOwp2YXIgYT10aGlzLm93bmVyRG9jdW1lbnQ7aWYoVGEpe2lmKGEuX19zaGFkeV9uYXRpdmVfY29udGFpbnModGhpcykpcmV0dXJuITB9ZWxzZSBpZihhLmRvY3VtZW50RWxlbWVudCYmYS5kb2N1bWVudEVsZW1lbnQuX19zaGFkeV9uYXRpdmVfY29udGFpbnModGhpcykpcmV0dXJuITA7Zm9yKGE9dGhpczthJiYhKGEgaW5zdGFuY2VvZiBEb2N1bWVudCk7KWE9YS5fX3NoYWR5X3BhcmVudE5vZGV8fCh6KGEpP2EuaG9zdDp2b2lkIDApO3JldHVybiEhKGEmJmEgaW5zdGFuY2VvZiBEb2N1bWVudCl9LGdldCB0ZXh0Q29udGVudCgpe2lmKHkodGhpcykpe2Zvcih2YXIgYT1bXSxiPTAsYz10aGlzLl9fc2hhZHlfY2hpbGROb2RlcyxkO2Q9Y1tiXTtiKyspZC5ub2RlVHlwZSE9PU5vZGUuQ09NTUVOVF9OT0RFJiZhLnB1c2goZC5fX3NoYWR5X3RleHRDb250ZW50KTtyZXR1cm4gYS5qb2luKCIiKX1yZXR1cm4gdGhpcy5fX3NoYWR5X25hdGl2ZV90ZXh0Q29udGVudH0sc2V0IHRleHRDb250ZW50KGEpe2lmKCJ1bmRlZmluZWQiPT09CnR5cGVvZiBhfHxudWxsPT09YSlhPSIiO3N3aXRjaCh0aGlzLm5vZGVUeXBlKXtjYXNlIE5vZGUuRUxFTUVOVF9OT0RFOmNhc2UgTm9kZS5ET0NVTUVOVF9GUkFHTUVOVF9OT0RFOmlmKCF5KHRoaXMpJiZ3Lm0pe3ZhciBiPXRoaXMuX19zaGFkeV9maXJzdENoaWxkOyhiIT10aGlzLl9fc2hhZHlfbGFzdENoaWxkfHxiJiZiLm5vZGVUeXBlIT1Ob2RlLlRFWFRfTk9ERSkmJnRjKHRoaXMpO3RoaXMuX19zaGFkeV9uYXRpdmVfdGV4dENvbnRlbnQ9YX1lbHNlIHRjKHRoaXMpLCgwPGEubGVuZ3RofHx0aGlzLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUpJiZ0aGlzLl9fc2hhZHlfaW5zZXJ0QmVmb3JlKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGEpKTticmVhaztkZWZhdWx0OnRoaXMubm9kZVZhbHVlPWF9fSxpbnNlcnRCZWZvcmU6ZnVuY3Rpb24oYSxiKXtpZih0aGlzLm93bmVyRG9jdW1lbnQhPT1wYyYmYS5vd25lckRvY3VtZW50IT09cGMpcmV0dXJuIHRoaXMuX19zaGFkeV9uYXRpdmVfaW5zZXJ0QmVmb3JlKGEsCmIpLGE7aWYoYT09PXRoaXMpdGhyb3cgRXJyb3IoIkZhaWxlZCB0byBleGVjdXRlICdhcHBlbmRDaGlsZCcgb24gJ05vZGUnOiBUaGUgbmV3IGNoaWxkIGVsZW1lbnQgY29udGFpbnMgdGhlIHBhcmVudC4iKTtpZihiKXt2YXIgYz12KGIpO2M9YyYmYy5wYXJlbnROb2RlO2lmKHZvaWQgMCE9PWMmJmMhPT10aGlzfHx2b2lkIDA9PT1jJiZiLl9fc2hhZHlfbmF0aXZlX3BhcmVudE5vZGUhPT10aGlzKXRocm93IEVycm9yKCJGYWlsZWQgdG8gZXhlY3V0ZSAnaW5zZXJ0QmVmb3JlJyBvbiAnTm9kZSc6IFRoZSBub2RlIGJlZm9yZSB3aGljaCB0aGUgbmV3IG5vZGUgaXMgdG8gYmUgaW5zZXJ0ZWQgaXMgbm90IGEgY2hpbGQgb2YgdGhpcyBub2RlLiIpO31pZihiPT09YSlyZXR1cm4gYTt2YXIgZD1bXSxlPShjPXhjKHRoaXMpKT9jLmhvc3QubG9jYWxOYW1lOm5jKHRoaXMpLGY9YS5fX3NoYWR5X3BhcmVudE5vZGU7aWYoZil7dmFyIGc9bmMoYSk7Zi5fX3NoYWR5X3JlbW92ZUNoaWxkKGEsISFjfHwKIXhjKGEpKX1mPSEwO3ZhciBoPSghcWN8fHZvaWQgMD09PWEuX19ub0luc2VydGlvblBvaW50KSYmIW1jKGEsZSksaz1jJiYhYS5fX25vSW5zZXJ0aW9uUG9pbnQmJighcWN8fGEubm9kZVR5cGU9PT1Ob2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREUpO2lmKGt8fGgpaCYmKGc9Z3x8bmMoYSkpLG9jKGEsZnVuY3Rpb24oYSl7ayYmInNsb3QiPT09YS5sb2NhbE5hbWUmJmQucHVzaChhKTtpZihoKXt2YXIgYj1nO0coKSYmKGImJmxjKGEsYiksKGI9RygpKSYmYi5zY29wZU5vZGUoYSxlKSl9fSk7aWYoInNsb3QiPT09dGhpcy5sb2NhbE5hbWV8fGQubGVuZ3RoKWQubGVuZ3RoJiYoYy5jPWMuY3x8W10sYy5hPWMuYXx8W10sYy5iPWMuYnx8e30sYy5jLnB1c2guYXBwbHkoYy5jLGQgaW5zdGFuY2VvZiBBcnJheT9kOmphKGlhKGQpKSkpLGMmJkFjKGMpO3kodGhpcykmJihoYyhhLHRoaXMsYiksYz12KHRoaXMpLExhKHRoaXMpPyhBYyhjLnJvb3QpLGY9ITEpOmMucm9vdCYmKGY9ITEpKTtmPwooYz16KHRoaXMpP3RoaXMuaG9zdDp0aGlzLGI/KGI9dmMoYiksYy5fX3NoYWR5X25hdGl2ZV9pbnNlcnRCZWZvcmUoYSxiKSk6Yy5fX3NoYWR5X25hdGl2ZV9hcHBlbmRDaGlsZChhKSk6YS5vd25lckRvY3VtZW50IT09dGhpcy5vd25lckRvY3VtZW50JiZ0aGlzLm93bmVyRG9jdW1lbnQuYWRvcHROb2RlKGEpO3djKHRoaXMsYSk7cmV0dXJuIGF9LGFwcGVuZENoaWxkOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLl9fc2hhZHlfaW5zZXJ0QmVmb3JlKGEpfSxyZW1vdmVDaGlsZDpmdW5jdGlvbihhLGIpe2I9dm9pZCAwPT09Yj8hMTpiO2lmKHRoaXMub3duZXJEb2N1bWVudCE9PXBjKXJldHVybiB0aGlzLl9fc2hhZHlfbmF0aXZlX3JlbW92ZUNoaWxkKGEpO2lmKGEuX19zaGFkeV9wYXJlbnROb2RlIT09dGhpcyl0aHJvdyBFcnJvcigiVGhlIG5vZGUgdG8gYmUgcmVtb3ZlZCBpcyBub3QgYSBjaGlsZCBvZiB0aGlzIG5vZGU6ICIrYSk7dmFyIGM9eGMoYSksZD1jJiZCYyhjLGEpLGU9dih0aGlzKTsKaWYoeSh0aGlzKSYmKGljKGEsdGhpcyksTGEodGhpcykpKXtBYyhlLnJvb3QpO3ZhciBmPSEwfWlmKEcoKSYmIWImJmMpe3ZhciBnPW5jKGEpO29jKGEsZnVuY3Rpb24oYSl7bGMoYSxnKX0pfXVjKGEpO2MmJigoYj10aGlzJiYic2xvdCI9PT10aGlzLmxvY2FsTmFtZSkmJihmPSEwKSwoZHx8YikmJkFjKGMpKTtmfHwoZj16KHRoaXMpP3RoaXMuaG9zdDp0aGlzLCghZS5yb290JiYic2xvdCIhPT1hLmxvY2FsTmFtZXx8Zj09PWEuX19zaGFkeV9uYXRpdmVfcGFyZW50Tm9kZSkmJmYuX19zaGFkeV9uYXRpdmVfcmVtb3ZlQ2hpbGQoYSkpO3djKHRoaXMsbnVsbCxhKTtyZXR1cm4gYX0scmVwbGFjZUNoaWxkOmZ1bmN0aW9uKGEsYil7dGhpcy5fX3NoYWR5X2luc2VydEJlZm9yZShhLGIpO3RoaXMuX19zaGFkeV9yZW1vdmVDaGlsZChiKTtyZXR1cm4gYX0sY2xvbmVOb2RlOmZ1bmN0aW9uKGEpe2lmKCJ0ZW1wbGF0ZSI9PXRoaXMubG9jYWxOYW1lKXJldHVybiB0aGlzLl9fc2hhZHlfbmF0aXZlX2Nsb25lTm9kZShhKTsKdmFyIGI9dGhpcy5fX3NoYWR5X25hdGl2ZV9jbG9uZU5vZGUoITEpO2lmKGEmJmIubm9kZVR5cGUhPT1Ob2RlLkFUVFJJQlVURV9OT0RFKXthPXRoaXMuX19zaGFkeV9jaGlsZE5vZGVzO2Zvcih2YXIgYz0wLGQ7YzxhLmxlbmd0aDtjKyspZD1hW2NdLl9fc2hhZHlfY2xvbmVOb2RlKCEwKSxiLl9fc2hhZHlfYXBwZW5kQ2hpbGQoZCl9cmV0dXJuIGJ9LGdldFJvb3ROb2RlOmZ1bmN0aW9uKGEpe2lmKHRoaXMmJnRoaXMubm9kZVR5cGUpe3ZhciBiPXUodGhpcyksYz1iLks7dm9pZCAwPT09YyYmKHoodGhpcyk/KGM9dGhpcyxiLks9Yyk6KGM9KGM9dGhpcy5fX3NoYWR5X3BhcmVudE5vZGUpP2MuX19zaGFkeV9nZXRSb290Tm9kZShhKTp0aGlzLGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5fX3NoYWR5X25hdGl2ZV9jb250YWlucyh0aGlzKSYmKGIuSz1jKSkpO3JldHVybiBjfX0sY29udGFpbnM6ZnVuY3Rpb24oYSl7cmV0dXJuIFVhKHRoaXMsYSl9fSk7ZnVuY3Rpb24gRGMoYSxiLGMpe3ZhciBkPVtdO0VjKGEuX19zaGFkeV9jaGlsZE5vZGVzLGIsYyxkKTtyZXR1cm4gZH1mdW5jdGlvbiBFYyhhLGIsYyxkKXtmb3IodmFyIGU9MCxmPWEubGVuZ3RoLGc9dm9pZCAwO2U8ZiYmKGc9YVtlXSk7ZSsrKXt2YXIgaDtpZihoPWcubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERSl7aD1nO3ZhciBrPWIsbD1jLG09ZCxxPWsoaCk7cSYmbS5wdXNoKGgpO2wmJmwocSk/aD1xOihFYyhoLl9fc2hhZHlfY2hpbGROb2RlcyxrLGwsbSksaD12b2lkIDApfWlmKGgpYnJlYWt9fQp2YXIgRmM9Qih7Z2V0IGZpcnN0RWxlbWVudENoaWxkKCl7dmFyIGE9dih0aGlzKTtpZihhJiZ2b2lkIDAhPT1hLmZpcnN0Q2hpbGQpe2ZvcihhPXRoaXMuX19zaGFkeV9maXJzdENoaWxkO2EmJmEubm9kZVR5cGUhPT1Ob2RlLkVMRU1FTlRfTk9ERTspYT1hLl9fc2hhZHlfbmV4dFNpYmxpbmc7cmV0dXJuIGF9cmV0dXJuIHRoaXMuX19zaGFkeV9uYXRpdmVfZmlyc3RFbGVtZW50Q2hpbGR9LGdldCBsYXN0RWxlbWVudENoaWxkKCl7dmFyIGE9dih0aGlzKTtpZihhJiZ2b2lkIDAhPT1hLmxhc3RDaGlsZCl7Zm9yKGE9dGhpcy5fX3NoYWR5X2xhc3RDaGlsZDthJiZhLm5vZGVUeXBlIT09Tm9kZS5FTEVNRU5UX05PREU7KWE9YS5fX3NoYWR5X3ByZXZpb3VzU2libGluZztyZXR1cm4gYX1yZXR1cm4gdGhpcy5fX3NoYWR5X25hdGl2ZV9sYXN0RWxlbWVudENoaWxkfSxnZXQgY2hpbGRyZW4oKXtyZXR1cm4geSh0aGlzKT9WYShBcnJheS5wcm90b3R5cGUuZmlsdGVyLmNhbGwodGhpcy5fX3NoYWR5X2NoaWxkTm9kZXMsCmZ1bmN0aW9uKGEpe3JldHVybiBhLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREV9KSk6dGhpcy5fX3NoYWR5X25hdGl2ZV9jaGlsZHJlbn0sZ2V0IGNoaWxkRWxlbWVudENvdW50KCl7dmFyIGE9dGhpcy5fX3NoYWR5X2NoaWxkcmVuO3JldHVybiBhP2EubGVuZ3RoOjB9fSksR2M9Qih7cXVlcnlTZWxlY3RvcjpmdW5jdGlvbihhKXtyZXR1cm4gRGModGhpcyxmdW5jdGlvbihiKXtyZXR1cm4gT2EuY2FsbChiLGEpfSxmdW5jdGlvbihhKXtyZXR1cm4hIWF9KVswXXx8bnVsbH0scXVlcnlTZWxlY3RvckFsbDpmdW5jdGlvbihhLGIpe2lmKGIpe2I9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5fX3NoYWR5X25hdGl2ZV9xdWVyeVNlbGVjdG9yQWxsKGEpKTt2YXIgYz10aGlzLl9fc2hhZHlfZ2V0Um9vdE5vZGUoKTtyZXR1cm4gYi5maWx0ZXIoZnVuY3Rpb24oYSl7cmV0dXJuIGEuX19zaGFkeV9nZXRSb290Tm9kZSgpPT1jfSl9cmV0dXJuIERjKHRoaXMsZnVuY3Rpb24oYil7cmV0dXJuIE9hLmNhbGwoYiwKYSl9KX19KSxIYz13Lm9hP09iamVjdC5hc3NpZ24oe30sRmMpOkZjO09iamVjdC5hc3NpZ24oRmMsR2MpO3ZhciBJYz1CKHtnZXRFbGVtZW50QnlJZDpmdW5jdGlvbihhKXtyZXR1cm4iIj09PWE/bnVsbDpEYyh0aGlzLGZ1bmN0aW9uKGIpe3JldHVybiBiLmlkPT1hfSxmdW5jdGlvbihhKXtyZXR1cm4hIWF9KVswXXx8bnVsbH19KTt2YXIgSmM9Qih7Z2V0IGFjdGl2ZUVsZW1lbnQoKXt2YXIgYT13Lm0/ZG9jdW1lbnQuX19zaGFkeV9uYXRpdmVfYWN0aXZlRWxlbWVudDpkb2N1bWVudC5hY3RpdmVFbGVtZW50O2lmKCFhfHwhYS5ub2RlVHlwZSlyZXR1cm4gbnVsbDt2YXIgYj0hIXoodGhpcyk7aWYoISh0aGlzPT09ZG9jdW1lbnR8fGImJnRoaXMuaG9zdCE9PWEmJnRoaXMuaG9zdC5fX3NoYWR5X25hdGl2ZV9jb250YWlucyhhKSkpcmV0dXJuIG51bGw7Zm9yKGI9eGMoYSk7YiYmYiE9PXRoaXM7KWE9Yi5ob3N0LGI9eGMoYSk7cmV0dXJuIHRoaXM9PT1kb2N1bWVudD9iP251bGw6YTpiPT09dGhpcz9hOm51bGx9fSk7dmFyIEtjPWRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCgiaW5lcnQiKSxMYz1CKHtnZXQgaW5uZXJIVE1MKCl7cmV0dXJuIHkodGhpcyk/a2IoInRlbXBsYXRlIj09PXRoaXMubG9jYWxOYW1lP3RoaXMuY29udGVudDp0aGlzLGZ1bmN0aW9uKGEpe3JldHVybiBhLl9fc2hhZHlfY2hpbGROb2Rlc30pOnRoaXMuX19zaGFkeV9uYXRpdmVfaW5uZXJIVE1MfSxzZXQgaW5uZXJIVE1MKGEpe2lmKCJ0ZW1wbGF0ZSI9PT10aGlzLmxvY2FsTmFtZSl0aGlzLl9fc2hhZHlfbmF0aXZlX2lubmVySFRNTD1hO2Vsc2V7dGModGhpcyk7dmFyIGI9dGhpcy5sb2NhbE5hbWV8fCJkaXYiO2I9dGhpcy5uYW1lc3BhY2VVUkkmJnRoaXMubmFtZXNwYWNlVVJJIT09S2MubmFtZXNwYWNlVVJJP0tjLmNyZWF0ZUVsZW1lbnROUyh0aGlzLm5hbWVzcGFjZVVSSSxiKTpLYy5jcmVhdGVFbGVtZW50KGIpO2Zvcih3Lm0/Yi5fX3NoYWR5X25hdGl2ZV9pbm5lckhUTUw9YTpiLmlubmVySFRNTD0KYTthPWIuX19zaGFkeV9maXJzdENoaWxkOyl0aGlzLl9fc2hhZHlfaW5zZXJ0QmVmb3JlKGEpfX19KTt2YXIgTWM9Qih7YWRkRXZlbnRMaXN0ZW5lcjpmdW5jdGlvbihhLGIsYyl7Im9iamVjdCIhPT10eXBlb2YgYyYmKGM9e2NhcHR1cmU6ISFjfSk7Yy4kPXRoaXM7dGhpcy5ob3N0Ll9fc2hhZHlfYWRkRXZlbnRMaXN0ZW5lcihhLGIsYyl9LHJlbW92ZUV2ZW50TGlzdGVuZXI6ZnVuY3Rpb24oYSxiLGMpeyJvYmplY3QiIT09dHlwZW9mIGMmJihjPXtjYXB0dXJlOiEhY30pO2MuJD10aGlzO3RoaXMuaG9zdC5fX3NoYWR5X3JlbW92ZUV2ZW50TGlzdGVuZXIoYSxiLGMpfX0pO2Z1bmN0aW9uIE5jKGEsYil7QShhLE1jLGIpO0EoYSxKYyxiKTtBKGEsTGMsYik7QShhLEZjLGIpO3cuSiYmIWI/KEEoYSxDYyxiKSxBKGEsSWMsYikpOncubXx8KEEoYSxBYiksQShhLHpiKSl9O3ZhciBPYz17fSxQYz13LmRlZmVyQ29ubmVjdGlvbkNhbGxiYWNrcyYmImxvYWRpbmciPT09ZG9jdW1lbnQucmVhZHlTdGF0ZSxRYztmdW5jdGlvbiBSYyhhKXt2YXIgYj1bXTtkbyBiLnVuc2hpZnQoYSk7d2hpbGUoYT1hLl9fc2hhZHlfcGFyZW50Tm9kZSk7cmV0dXJuIGJ9CmZ1bmN0aW9uIFNjKGEsYixjKXtpZihhIT09T2MpdGhyb3cgbmV3IFR5cGVFcnJvcigiSWxsZWdhbCBjb25zdHJ1Y3RvciIpO3RoaXMuemE9IlNoYWR5Um9vdCI7dGhpcy5ob3N0PWI7dGhpcy5tb2RlPWMmJmMubW9kZTtqYyhiKTthPXUoYik7YS5yb290PXRoaXM7YS5wYT0iY2xvc2VkIiE9PXRoaXMubW9kZT90aGlzOm51bGw7YT11KHRoaXMpO2EuZmlyc3RDaGlsZD1hLmxhc3RDaGlsZD1hLnBhcmVudE5vZGU9YS5uZXh0U2libGluZz1hLnByZXZpb3VzU2libGluZz1udWxsO2EuY2hpbGROb2Rlcz1bXTt0aGlzLmJhPXRoaXMuQj0hMTt0aGlzLmM9dGhpcy5iPXRoaXMuYT1udWxsO2lmKHcucHJlZmVyUGVyZm9ybWFuY2UpZm9yKDthPWIuX19zaGFkeV9uYXRpdmVfZmlyc3RDaGlsZDspYi5fX3NoYWR5X25hdGl2ZV9yZW1vdmVDaGlsZChhKTtlbHNlIEFjKHRoaXMpfWZ1bmN0aW9uIEFjKGEpe2EuQnx8KGEuQj0hMCxZYShmdW5jdGlvbigpe3JldHVybiBUYyhhKX0pKX0KZnVuY3Rpb24gVGMoYSl7dmFyIGI7aWYoYj1hLkIpe2Zvcih2YXIgYzthOylhOnthLkImJihjPWEpLGI9YTthPWIuaG9zdC5fX3NoYWR5X2dldFJvb3ROb2RlKCk7aWYoeihhKSYmKGI9dihiLmhvc3QpKSYmMDxiLk4pYnJlYWsgYTthPXZvaWQgMH1iPWN9KGM9YikmJmMuX3JlbmRlclNlbGYoKX0KU2MucHJvdG90eXBlLl9yZW5kZXJTZWxmPWZ1bmN0aW9uKCl7dmFyIGE9UGM7UGM9ITA7dGhpcy5CPSExO2lmKHRoaXMuYSl7VWModGhpcyk7Zm9yKHZhciBiPTAsYztiPHRoaXMuYS5sZW5ndGg7YisrKXtjPXRoaXMuYVtiXTt2YXIgZD12KGMpLGU9ZC5hc3NpZ25lZE5vZGVzO2QuYXNzaWduZWROb2Rlcz1bXTtkLkQ9W107aWYoZC5jYT1lKWZvcihkPTA7ZDxlLmxlbmd0aDtkKyspe3ZhciBmPXYoZVtkXSk7Zi5QPWYuYXNzaWduZWRTbG90O2YuYXNzaWduZWRTbG90PT09YyYmKGYuYXNzaWduZWRTbG90PW51bGwpfX1mb3IoYj10aGlzLmhvc3QuX19zaGFkeV9maXJzdENoaWxkO2I7Yj1iLl9fc2hhZHlfbmV4dFNpYmxpbmcpVmModGhpcyxiKTtmb3IoYj0wO2I8dGhpcy5hLmxlbmd0aDtiKyspe2M9dGhpcy5hW2JdO2U9dihjKTtpZighZS5hc3NpZ25lZE5vZGVzLmxlbmd0aClmb3IoZD1jLl9fc2hhZHlfZmlyc3RDaGlsZDtkO2Q9ZC5fX3NoYWR5X25leHRTaWJsaW5nKVZjKHRoaXMsCmQsYyk7KGQ9KGQ9dihjLl9fc2hhZHlfcGFyZW50Tm9kZSkpJiZkLnJvb3QpJiYoTWEoZCl8fGQuQikmJmQuX3JlbmRlclNlbGYoKTtXYyh0aGlzLGUuRCxlLmFzc2lnbmVkTm9kZXMpO2lmKGQ9ZS5jYSl7Zm9yKGY9MDtmPGQubGVuZ3RoO2YrKyl2KGRbZl0pLlA9bnVsbDtlLmNhPW51bGw7ZC5sZW5ndGg+ZS5hc3NpZ25lZE5vZGVzLmxlbmd0aCYmKGUuVD0hMCl9ZS5UJiYoZS5UPSExLFhjKHRoaXMsYykpfWM9dGhpcy5hO2I9W107Zm9yKGU9MDtlPGMubGVuZ3RoO2UrKylkPWNbZV0uX19zaGFkeV9wYXJlbnROb2RlLChmPXYoZCkpJiZmLnJvb3R8fCEoMD5iLmluZGV4T2YoZCkpfHxiLnB1c2goZCk7Zm9yKGM9MDtjPGIubGVuZ3RoO2MrKyl7Zj1iW2NdO2U9Zj09PXRoaXM/dGhpcy5ob3N0OmY7ZD1bXTtmPWYuX19zaGFkeV9jaGlsZE5vZGVzO2Zvcih2YXIgZz0wO2c8Zi5sZW5ndGg7ZysrKXt2YXIgaD1mW2ddO2lmKCJzbG90Ij09aC5sb2NhbE5hbWUpe2g9dihoKS5EO2Zvcih2YXIgaz0KMDtrPGgubGVuZ3RoO2srKylkLnB1c2goaFtrXSl9ZWxzZSBkLnB1c2goaCl9Zj1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChlLl9fc2hhZHlfbmF0aXZlX2NoaWxkTm9kZXMpO2c9ZWMoZCxkLmxlbmd0aCxmLGYubGVuZ3RoKTtrPWg9MDtmb3IodmFyIGw9dm9pZCAwO2g8Zy5sZW5ndGgmJihsPWdbaF0pO2grKyl7Zm9yKHZhciBtPTAscT12b2lkIDA7bTxsLkwubGVuZ3RoJiYocT1sLkxbbV0pO20rKylxLl9fc2hhZHlfbmF0aXZlX3BhcmVudE5vZGU9PT1lJiZlLl9fc2hhZHlfbmF0aXZlX3JlbW92ZUNoaWxkKHEpLGYuc3BsaWNlKGwuaW5kZXgraywxKTtrLT1sLlJ9az0wO2ZvcihsPXZvaWQgMDtrPGcubGVuZ3RoJiYobD1nW2tdKTtrKyspZm9yKGg9ZltsLmluZGV4XSxtPWwuaW5kZXg7bTxsLmluZGV4K2wuUjttKyspcT1kW21dLGUuX19zaGFkeV9uYXRpdmVfaW5zZXJ0QmVmb3JlKHEsaCksZi5zcGxpY2UobSwwLHEpfX1pZighdy5wcmVmZXJQZXJmb3JtYW5jZSYmIXRoaXMuYmEpZm9yKGI9CnRoaXMuaG9zdC5fX3NoYWR5X2NoaWxkTm9kZXMsYz0wLGU9Yi5sZW5ndGg7YzxlO2MrKylkPWJbY10sZj12KGQpLGQuX19zaGFkeV9uYXRpdmVfcGFyZW50Tm9kZSE9PXRoaXMuaG9zdHx8InNsb3QiIT09ZC5sb2NhbE5hbWUmJmYuYXNzaWduZWRTbG90fHx0aGlzLmhvc3QuX19zaGFkeV9uYXRpdmVfcmVtb3ZlQ2hpbGQoZCk7dGhpcy5iYT0hMDtQYz1hO1FjJiZRYygpfTtmdW5jdGlvbiBWYyhhLGIsYyl7dmFyIGQ9dShiKSxlPWQuUDtkLlA9bnVsbDtjfHwoYz0oYT1hLmJbYi5fX3NoYWR5X3Nsb3R8fCJfX2NhdGNoYWxsIl0pJiZhWzBdKTtjPyh1KGMpLmFzc2lnbmVkTm9kZXMucHVzaChiKSxkLmFzc2lnbmVkU2xvdD1jKTpkLmFzc2lnbmVkU2xvdD12b2lkIDA7ZSE9PWQuYXNzaWduZWRTbG90JiZkLmFzc2lnbmVkU2xvdCYmKHUoZC5hc3NpZ25lZFNsb3QpLlQ9ITApfQpmdW5jdGlvbiBXYyhhLGIsYyl7Zm9yKHZhciBkPTAsZT12b2lkIDA7ZDxjLmxlbmd0aCYmKGU9Y1tkXSk7ZCsrKWlmKCJzbG90Ij09ZS5sb2NhbE5hbWUpe3ZhciBmPXYoZSkuYXNzaWduZWROb2RlcztmJiZmLmxlbmd0aCYmV2MoYSxiLGYpfWVsc2UgYi5wdXNoKGNbZF0pfWZ1bmN0aW9uIFhjKGEsYil7Yi5fX3NoYWR5X25hdGl2ZV9kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgic2xvdGNoYW5nZSIpKTtiPXYoYik7Yi5hc3NpZ25lZFNsb3QmJlhjKGEsYi5hc3NpZ25lZFNsb3QpfQpmdW5jdGlvbiBVYyhhKXtpZihhLmMmJmEuYy5sZW5ndGgpe2Zvcih2YXIgYj1hLmMsYyxkPTA7ZDxiLmxlbmd0aDtkKyspe3ZhciBlPWJbZF07amMoZSk7dmFyIGY9ZS5fX3NoYWR5X3BhcmVudE5vZGU7amMoZik7Zj12KGYpO2YuTj0oZi5OfHwwKSsxO2Y9WWMoZSk7YS5iW2ZdPyhjPWN8fHt9LGNbZl09ITAsYS5iW2ZdLnB1c2goZSkpOmEuYltmXT1bZV07YS5hLnB1c2goZSl9aWYoYylmb3IodmFyIGcgaW4gYylhLmJbZ109WmMoYS5iW2ddKTthLmM9W119fWZ1bmN0aW9uIFljKGEpe3ZhciBiPWEubmFtZXx8YS5nZXRBdHRyaWJ1dGUoIm5hbWUiKXx8Il9fY2F0Y2hhbGwiO3JldHVybiBhLndhPWJ9CmZ1bmN0aW9uIFpjKGEpe3JldHVybiBhLnNvcnQoZnVuY3Rpb24oYSxjKXthPVJjKGEpO2Zvcih2YXIgYj1SYyhjKSxlPTA7ZTxhLmxlbmd0aDtlKyspe2M9YVtlXTt2YXIgZj1iW2VdO2lmKGMhPT1mKXJldHVybiBhPUFycmF5LmZyb20oYy5fX3NoYWR5X3BhcmVudE5vZGUuX19zaGFkeV9jaGlsZE5vZGVzKSxhLmluZGV4T2YoYyktYS5pbmRleE9mKGYpfX0pfQpmdW5jdGlvbiBCYyhhLGIpe2lmKGEuYSl7VWMoYSk7dmFyIGM9YS5iLGQ7Zm9yKGQgaW4gYylmb3IodmFyIGU9Y1tkXSxmPTA7ZjxlLmxlbmd0aDtmKyspe3ZhciBnPWVbZl07aWYoVWEoYixnKSl7ZS5zcGxpY2UoZiwxKTt2YXIgaD1hLmEuaW5kZXhPZihnKTswPD1oJiYoYS5hLnNwbGljZShoLDEpLChoPXYoZy5fX3NoYWR5X3BhcmVudE5vZGUpKSYmaC5OJiZoLk4tLSk7Zi0tO2c9dihnKTtpZihoPWcuRClmb3IodmFyIGs9MDtrPGgubGVuZ3RoO2srKyl7dmFyIGw9aFtrXSxtPWwuX19zaGFkeV9uYXRpdmVfcGFyZW50Tm9kZTttJiZtLl9fc2hhZHlfbmF0aXZlX3JlbW92ZUNoaWxkKGwpfWcuRD1bXTtnLmFzc2lnbmVkTm9kZXM9W107aD0hMH19cmV0dXJuIGh9fWZ1bmN0aW9uIE1hKGEpe1VjKGEpO3JldHVybiEoIWEuYXx8IWEuYS5sZW5ndGgpfQooZnVuY3Rpb24oYSl7YS5fX3Byb3RvX189RG9jdW1lbnRGcmFnbWVudC5wcm90b3R5cGU7TmMoYSwiX19zaGFkeV8iKTtOYyhhKTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhhLHtub2RlVHlwZTp7dmFsdWU6Tm9kZS5ET0NVTUVOVF9GUkFHTUVOVF9OT0RFLGNvbmZpZ3VyYWJsZTohMH0sbm9kZU5hbWU6e3ZhbHVlOiIjZG9jdW1lbnQtZnJhZ21lbnQiLGNvbmZpZ3VyYWJsZTohMH0sbm9kZVZhbHVlOnt2YWx1ZTpudWxsLGNvbmZpZ3VyYWJsZTohMH19KTtbImxvY2FsTmFtZSIsIm5hbWVzcGFjZVVSSSIsInByZWZpeCJdLmZvckVhY2goZnVuY3Rpb24oYil7T2JqZWN0LmRlZmluZVByb3BlcnR5KGEsYix7dmFsdWU6dm9pZCAwLGNvbmZpZ3VyYWJsZTohMH0pfSk7WyJvd25lckRvY3VtZW50IiwiYmFzZVVSSSIsImlzQ29ubmVjdGVkIl0uZm9yRWFjaChmdW5jdGlvbihiKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoYSxiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ob3N0W2JdfSwKY29uZmlndXJhYmxlOiEwfSl9KX0pKFNjLnByb3RvdHlwZSk7CmlmKHdpbmRvdy5jdXN0b21FbGVtZW50cyYmdy5lYSYmIXcucHJlZmVyUGVyZm9ybWFuY2Upe3ZhciAkYz1uZXcgTWFwO1FjPWZ1bmN0aW9uKCl7dmFyIGE9W107JGMuZm9yRWFjaChmdW5jdGlvbihiLGMpe2EucHVzaChbYyxiXSl9KTskYy5jbGVhcigpO2Zvcih2YXIgYj0wO2I8YS5sZW5ndGg7YisrKXt2YXIgYz1hW2JdWzBdO2FbYl1bMV0/Yy51YSgpOmMudmEoKX19O1BjJiZkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJyZWFkeXN0YXRlY2hhbmdlIixmdW5jdGlvbigpe1BjPSExO1FjKCl9LHtvbmNlOiEwfSk7dmFyIGFkPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD0wLGU9Il9faXNDb25uZWN0ZWQiK2QrKztpZihifHxjKWEucHJvdG90eXBlLmNvbm5lY3RlZENhbGxiYWNrPWEucHJvdG90eXBlLnVhPWZ1bmN0aW9uKCl7UGM/JGMuc2V0KHRoaXMsITApOnRoaXNbZV18fCh0aGlzW2VdPSEwLGImJmIuY2FsbCh0aGlzKSl9LGEucHJvdG90eXBlLmRpc2Nvbm5lY3RlZENhbGxiYWNrPQphLnByb3RvdHlwZS52YT1mdW5jdGlvbigpe1BjP3RoaXMuaXNDb25uZWN0ZWR8fCRjLnNldCh0aGlzLCExKTp0aGlzW2VdJiYodGhpc1tlXT0hMSxjJiZjLmNhbGwodGhpcykpfTtyZXR1cm4gYX0sYmQ9d2luZG93LmN1c3RvbUVsZW1lbnRzLmRlZmluZTtPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LkN1c3RvbUVsZW1lbnRSZWdpc3RyeS5wcm90b3R5cGUsImRlZmluZSIse3ZhbHVlOmZ1bmN0aW9uKGEsYil7dmFyIGM9Yi5wcm90b3R5cGUuY29ubmVjdGVkQ2FsbGJhY2ssZD1iLnByb3RvdHlwZS5kaXNjb25uZWN0ZWRDYWxsYmFjaztiZC5jYWxsKHdpbmRvdy5jdXN0b21FbGVtZW50cyxhLGFkKGIsYyxkKSk7Yi5wcm90b3R5cGUuY29ubmVjdGVkQ2FsbGJhY2s9YztiLnByb3RvdHlwZS5kaXNjb25uZWN0ZWRDYWxsYmFjaz1kfX0pfWZ1bmN0aW9uIHhjKGEpe2E9YS5fX3NoYWR5X2dldFJvb3ROb2RlKCk7aWYoeihhKSlyZXR1cm4gYX07ZnVuY3Rpb24gY2QoYSl7dGhpcy5ub2RlPWF9bj1jZC5wcm90b3R5cGU7bi5hZGRFdmVudExpc3RlbmVyPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfYWRkRXZlbnRMaXN0ZW5lcihhLGIsYyl9O24ucmVtb3ZlRXZlbnRMaXN0ZW5lcj1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIHRoaXMubm9kZS5fX3NoYWR5X3JlbW92ZUV2ZW50TGlzdGVuZXIoYSxiLGMpfTtuLmFwcGVuZENoaWxkPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLm5vZGUuX19zaGFkeV9hcHBlbmRDaGlsZChhKX07bi5pbnNlcnRCZWZvcmU9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfaW5zZXJ0QmVmb3JlKGEsYil9O24ucmVtb3ZlQ2hpbGQ9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMubm9kZS5fX3NoYWR5X3JlbW92ZUNoaWxkKGEpfTtuLnJlcGxhY2VDaGlsZD1mdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLm5vZGUuX19zaGFkeV9yZXBsYWNlQ2hpbGQoYSxiKX07Cm4uY2xvbmVOb2RlPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLm5vZGUuX19zaGFkeV9jbG9uZU5vZGUoYSl9O24uZ2V0Um9vdE5vZGU9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMubm9kZS5fX3NoYWR5X2dldFJvb3ROb2RlKGEpfTtuLmNvbnRhaW5zPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLm5vZGUuX19zaGFkeV9jb250YWlucyhhKX07bi5kaXNwYXRjaEV2ZW50PWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLm5vZGUuX19zaGFkeV9kaXNwYXRjaEV2ZW50KGEpfTtuLnNldEF0dHJpYnV0ZT1mdW5jdGlvbihhLGIpe3RoaXMubm9kZS5fX3NoYWR5X3NldEF0dHJpYnV0ZShhLGIpfTtuLmdldEF0dHJpYnV0ZT1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfbmF0aXZlX2dldEF0dHJpYnV0ZShhKX07bi5oYXNBdHRyaWJ1dGU9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMubm9kZS5fX3NoYWR5X25hdGl2ZV9oYXNBdHRyaWJ1dGUoYSl9O24ucmVtb3ZlQXR0cmlidXRlPWZ1bmN0aW9uKGEpe3RoaXMubm9kZS5fX3NoYWR5X3JlbW92ZUF0dHJpYnV0ZShhKX07Cm4uYXR0YWNoU2hhZG93PWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLm5vZGUuX19zaGFkeV9hdHRhY2hTaGFkb3coYSl9O24uZm9jdXM9ZnVuY3Rpb24oKXt0aGlzLm5vZGUuX19zaGFkeV9uYXRpdmVfZm9jdXMoKX07bi5ibHVyPWZ1bmN0aW9uKCl7dGhpcy5ub2RlLl9fc2hhZHlfYmx1cigpfTtuLmltcG9ydE5vZGU9ZnVuY3Rpb24oYSxiKXtpZih0aGlzLm5vZGUubm9kZVR5cGU9PT1Ob2RlLkRPQ1VNRU5UX05PREUpcmV0dXJuIHRoaXMubm9kZS5fX3NoYWR5X2ltcG9ydE5vZGUoYSxiKX07bi5nZXRFbGVtZW50QnlJZD1mdW5jdGlvbihhKXtpZih0aGlzLm5vZGUubm9kZVR5cGU9PT1Ob2RlLkRPQ1VNRU5UX05PREUpcmV0dXJuIHRoaXMubm9kZS5fX3NoYWR5X2dldEVsZW1lbnRCeUlkKGEpfTtuLnF1ZXJ5U2VsZWN0b3I9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMubm9kZS5fX3NoYWR5X3F1ZXJ5U2VsZWN0b3IoYSl9OwpuLnF1ZXJ5U2VsZWN0b3JBbGw9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfcXVlcnlTZWxlY3RvckFsbChhLGIpfTtuLmFzc2lnbmVkTm9kZXM9ZnVuY3Rpb24oYSl7aWYoInNsb3QiPT09dGhpcy5ub2RlLmxvY2FsTmFtZSlyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfYXNzaWduZWROb2RlcyhhKX07CnAuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoY2QucHJvdG90eXBlLHthY3RpdmVFbGVtZW50Ontjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtpZih6KHRoaXMubm9kZSl8fHRoaXMubm9kZS5ub2RlVHlwZT09PU5vZGUuRE9DVU1FTlRfTk9ERSlyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfYWN0aXZlRWxlbWVudH19LF9hY3RpdmVFbGVtZW50Ontjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hY3RpdmVFbGVtZW50fX0saG9zdDp7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7aWYoeih0aGlzLm5vZGUpKXJldHVybiB0aGlzLm5vZGUuaG9zdH19LHBhcmVudE5vZGU6e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGUuX19zaGFkeV9wYXJlbnROb2RlfX0sZmlyc3RDaGlsZDp7Y29uZmlndXJhYmxlOiEwLAplbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGUuX19zaGFkeV9maXJzdENoaWxkfX0sbGFzdENoaWxkOntjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfbGFzdENoaWxkfX0sbmV4dFNpYmxpbmc6e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGUuX19zaGFkeV9uZXh0U2libGluZ319LHByZXZpb3VzU2libGluZzp7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZS5fX3NoYWR5X3ByZXZpb3VzU2libGluZ319LGNoaWxkTm9kZXM6e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGUuX19zaGFkeV9jaGlsZE5vZGVzfX0scGFyZW50RWxlbWVudDp7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsCmdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGUuX19zaGFkeV9wYXJlbnRFbGVtZW50fX0sZmlyc3RFbGVtZW50Q2hpbGQ6e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGUuX19zaGFkeV9maXJzdEVsZW1lbnRDaGlsZH19LGxhc3RFbGVtZW50Q2hpbGQ6e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGUuX19zaGFkeV9sYXN0RWxlbWVudENoaWxkfX0sbmV4dEVsZW1lbnRTaWJsaW5nOntjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfbmV4dEVsZW1lbnRTaWJsaW5nfX0scHJldmlvdXNFbGVtZW50U2libGluZzp7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZS5fX3NoYWR5X3ByZXZpb3VzRWxlbWVudFNpYmxpbmd9fSwKY2hpbGRyZW46e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGUuX19zaGFkeV9jaGlsZHJlbn19LGNoaWxkRWxlbWVudENvdW50Ontjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfY2hpbGRFbGVtZW50Q291bnR9fSxzaGFkb3dSb290Ontjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfc2hhZG93Um9vdH19LGFzc2lnbmVkU2xvdDp7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZS5fX3NoYWR5X2Fzc2lnbmVkU2xvdH19LGlzQ29ubmVjdGVkOntjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfaXNDb25uZWN0ZWR9fSxpbm5lckhUTUw6e2NvbmZpZ3VyYWJsZTohMCwKZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfaW5uZXJIVE1MfSxzZXQ6ZnVuY3Rpb24oYSl7dGhpcy5ub2RlLl9fc2hhZHlfaW5uZXJIVE1MPWF9fSx0ZXh0Q29udGVudDp7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZS5fX3NoYWR5X3RleHRDb250ZW50fSxzZXQ6ZnVuY3Rpb24oYSl7dGhpcy5ub2RlLl9fc2hhZHlfdGV4dENvbnRlbnQ9YX19LHNsb3Q6e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGUuX19zaGFkeV9zbG90fSxzZXQ6ZnVuY3Rpb24oYSl7dGhpcy5ub2RlLl9fc2hhZHlfc2xvdD1hfX19KTsKY2MuZm9yRWFjaChmdW5jdGlvbihhKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoY2QucHJvdG90eXBlLGEse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGVbIl9fc2hhZHlfIithXX0sc2V0OmZ1bmN0aW9uKGIpe3RoaXMubm9kZVsiX19zaGFkeV8iK2FdPWJ9LGNvbmZpZ3VyYWJsZTohMH0pfSk7dmFyIGRkPW5ldyBXZWFrTWFwO2Z1bmN0aW9uIGVkKGEpe2lmKHooYSl8fGEgaW5zdGFuY2VvZiBjZClyZXR1cm4gYTt2YXIgYj1kZC5nZXQoYSk7Ynx8KGI9bmV3IGNkKGEpLGRkLnNldChhLGIpKTtyZXR1cm4gYn07dmFyIGZkPUIoe2Rpc3BhdGNoRXZlbnQ6ZnVuY3Rpb24oYSl7WmEoKTtyZXR1cm4gdGhpcy5fX3NoYWR5X25hdGl2ZV9kaXNwYXRjaEV2ZW50KGEpfSxhZGRFdmVudExpc3RlbmVyOlViLHJlbW92ZUV2ZW50TGlzdGVuZXI6V2J9KTt2YXIgZ2Q9Qih7Z2V0IGFzc2lnbmVkU2xvdCgpe3ZhciBhPXRoaXMuX19zaGFkeV9wYXJlbnROb2RlOyhhPWEmJmEuX19zaGFkeV9zaGFkb3dSb290KSYmVGMoYSk7cmV0dXJuKGE9dih0aGlzKSkmJmEuYXNzaWduZWRTbG90fHxudWxsfX0pO3ZhciBoZD13aW5kb3cuZG9jdW1lbnQ7ZnVuY3Rpb24gaWQoYSxiKXtpZigic2xvdCI9PT1iKWE9YS5fX3NoYWR5X3BhcmVudE5vZGUsTGEoYSkmJkFjKHYoYSkucm9vdCk7ZWxzZSBpZigic2xvdCI9PT1hLmxvY2FsTmFtZSYmIm5hbWUiPT09YiYmKGI9eGMoYSkpKXtpZihiLmEpe1VjKGIpO3ZhciBjPWEud2EsZD1ZYyhhKTtpZihkIT09Yyl7Yz1iLmJbY107dmFyIGU9Yy5pbmRleE9mKGEpOzA8PWUmJmMuc3BsaWNlKGUsMSk7Yz1iLmJbZF18fChiLmJbZF09W10pO2MucHVzaChhKTsxPGMubGVuZ3RoJiYoYi5iW2RdPVpjKGMpKX19QWMoYil9fQp2YXIgamQ9Qih7Z2V0IHByZXZpb3VzRWxlbWVudFNpYmxpbmcoKXt2YXIgYT12KHRoaXMpO2lmKGEmJnZvaWQgMCE9PWEucHJldmlvdXNTaWJsaW5nKXtmb3IoYT10aGlzLl9fc2hhZHlfcHJldmlvdXNTaWJsaW5nO2EmJmEubm9kZVR5cGUhPT1Ob2RlLkVMRU1FTlRfTk9ERTspYT1hLl9fc2hhZHlfcHJldmlvdXNTaWJsaW5nO3JldHVybiBhfXJldHVybiB0aGlzLl9fc2hhZHlfbmF0aXZlX3ByZXZpb3VzRWxlbWVudFNpYmxpbmd9LGdldCBuZXh0RWxlbWVudFNpYmxpbmcoKXt2YXIgYT12KHRoaXMpO2lmKGEmJnZvaWQgMCE9PWEubmV4dFNpYmxpbmcpe2ZvcihhPXRoaXMuX19zaGFkeV9uZXh0U2libGluZzthJiZhLm5vZGVUeXBlIT09Tm9kZS5FTEVNRU5UX05PREU7KWE9YS5fX3NoYWR5X25leHRTaWJsaW5nO3JldHVybiBhfXJldHVybiB0aGlzLl9fc2hhZHlfbmF0aXZlX25leHRFbGVtZW50U2libGluZ30sZ2V0IHNsb3QoKXtyZXR1cm4gdGhpcy5nZXRBdHRyaWJ1dGUoInNsb3QiKX0sCnNldCBzbG90KGEpe3RoaXMuX19zaGFkeV9zZXRBdHRyaWJ1dGUoInNsb3QiLGEpfSxnZXQgc2hhZG93Um9vdCgpe3ZhciBhPXYodGhpcyk7cmV0dXJuIGEmJmEucGF8fG51bGx9LGdldCBjbGFzc05hbWUoKXtyZXR1cm4gdGhpcy5nZXRBdHRyaWJ1dGUoImNsYXNzIil8fCIifSxzZXQgY2xhc3NOYW1lKGEpe3RoaXMuX19zaGFkeV9zZXRBdHRyaWJ1dGUoImNsYXNzIixhKX0sc2V0QXR0cmlidXRlOmZ1bmN0aW9uKGEsYil7aWYodGhpcy5vd25lckRvY3VtZW50IT09aGQpdGhpcy5fX3NoYWR5X25hdGl2ZV9zZXRBdHRyaWJ1dGUoYSxiKTtlbHNle3ZhciBjOyhjPUcoKSkmJiJjbGFzcyI9PT1hPyhjLnNldEVsZW1lbnRDbGFzcyh0aGlzLGIpLGM9ITApOmM9ITE7Y3x8KHRoaXMuX19zaGFkeV9uYXRpdmVfc2V0QXR0cmlidXRlKGEsYiksaWQodGhpcyxhKSl9fSxyZW1vdmVBdHRyaWJ1dGU6ZnVuY3Rpb24oYSl7dGhpcy5fX3NoYWR5X25hdGl2ZV9yZW1vdmVBdHRyaWJ1dGUoYSk7aWQodGhpcywKYSl9LGF0dGFjaFNoYWRvdzpmdW5jdGlvbihhKXtpZighdGhpcyl0aHJvdyBFcnJvcigiTXVzdCBwcm92aWRlIGEgaG9zdC4iKTtpZighYSl0aHJvdyBFcnJvcigiTm90IGVub3VnaCBhcmd1bWVudHMuIik7cmV0dXJuIG5ldyBTYyhPYyx0aGlzLGEpfX0pO3ZhciBrZD1CKHtibHVyOmZ1bmN0aW9uKCl7dmFyIGE9dih0aGlzKTsoYT0oYT1hJiZhLnJvb3QpJiZhLmFjdGl2ZUVsZW1lbnQpP2EuX19zaGFkeV9ibHVyKCk6dGhpcy5fX3NoYWR5X25hdGl2ZV9ibHVyKCl9fSk7Y2MuZm9yRWFjaChmdW5jdGlvbihhKXtrZFthXT17c2V0OmZ1bmN0aW9uKGIpe3ZhciBjPXUodGhpcyksZD1hLnN1YnN0cmluZygyKTtjLk9bYV0mJnRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihkLGMuT1thXSk7dGhpcy5fX3NoYWR5X2FkZEV2ZW50TGlzdGVuZXIoZCxiKTtjLk9bYV09Yn0sZ2V0OmZ1bmN0aW9uKCl7dmFyIGI9dih0aGlzKTtyZXR1cm4gYiYmYi5PW2FdfSxjb25maWd1cmFibGU6ITB9fSk7dmFyIGxkPUIoe2Fzc2lnbmVkTm9kZXM6ZnVuY3Rpb24oYSl7aWYoInNsb3QiPT09dGhpcy5sb2NhbE5hbWUpe3ZhciBiPXRoaXMuX19zaGFkeV9nZXRSb290Tm9kZSgpO2ImJnooYikmJlRjKGIpO3JldHVybihiPXYodGhpcykpPyhhJiZhLmZsYXR0ZW4/Yi5EOmIuYXNzaWduZWROb2Rlcyl8fFtdOltdfX19KTt2YXIgbWQ9d2luZG93LmRvY3VtZW50LG5kPUIoe2ltcG9ydE5vZGU6ZnVuY3Rpb24oYSxiKXtpZihhLm93bmVyRG9jdW1lbnQhPT1tZHx8InRlbXBsYXRlIj09PWEubG9jYWxOYW1lKXJldHVybiB0aGlzLl9fc2hhZHlfbmF0aXZlX2ltcG9ydE5vZGUoYSxiKTt2YXIgYz10aGlzLl9fc2hhZHlfbmF0aXZlX2ltcG9ydE5vZGUoYSwhMSk7aWYoYil7YT1hLl9fc2hhZHlfY2hpbGROb2RlcztiPTA7Zm9yKHZhciBkO2I8YS5sZW5ndGg7YisrKWQ9dGhpcy5fX3NoYWR5X2ltcG9ydE5vZGUoYVtiXSwhMCksYy5fX3NoYWR5X2FwcGVuZENoaWxkKGQpfXJldHVybiBjfX0pO3ZhciBvZD1CKHthZGRFdmVudExpc3RlbmVyOlViLmJpbmQod2luZG93KSxyZW1vdmVFdmVudExpc3RlbmVyOldiLmJpbmQod2luZG93KX0pO3ZhciBwZD17fTtPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEhUTUxFbGVtZW50LnByb3RvdHlwZSwicGFyZW50RWxlbWVudCIpJiYocGQucGFyZW50RWxlbWVudD1DYy5wYXJlbnRFbGVtZW50KTtPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEhUTUxFbGVtZW50LnByb3RvdHlwZSwiY29udGFpbnMiKSYmKHBkLmNvbnRhaW5zPUNjLmNvbnRhaW5zKTtPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEhUTUxFbGVtZW50LnByb3RvdHlwZSwiY2hpbGRyZW4iKSYmKHBkLmNoaWxkcmVuPUZjLmNoaWxkcmVuKTtPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEhUTUxFbGVtZW50LnByb3RvdHlwZSwiaW5uZXJIVE1MIikmJihwZC5pbm5lckhUTUw9TGMuaW5uZXJIVE1MKTtPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEhUTUxFbGVtZW50LnByb3RvdHlwZSwiY2xhc3NOYW1lIikmJihwZC5jbGFzc05hbWU9amQuY2xhc3NOYW1lKTsKdmFyIHFkPXtFdmVudFRhcmdldDpbZmRdLE5vZGU6W0NjLHdpbmRvdy5FdmVudFRhcmdldD9udWxsOmZkXSxUZXh0OltnZF0sRWxlbWVudDpbamQsRmMsZ2QsIXcubXx8ImlubmVySFRNTCJpbiBFbGVtZW50LnByb3RvdHlwZT9MYzpudWxsLHdpbmRvdy5IVE1MU2xvdEVsZW1lbnQ/bnVsbDpsZF0sSFRNTEVsZW1lbnQ6W2tkLHBkXSxIVE1MU2xvdEVsZW1lbnQ6W2xkXSxEb2N1bWVudEZyYWdtZW50OltIYyxJY10sRG9jdW1lbnQ6W25kLEhjLEljLEpjXSxXaW5kb3c6W29kXX0scmQ9dy5tP251bGw6WyJpbm5lckhUTUwiLCJ0ZXh0Q29udGVudCJdO2Z1bmN0aW9uIHNkKGEpe3ZhciBiPWE/bnVsbDpyZCxjPXt9LGQ7Zm9yKGQgaW4gcWQpYy5XPXdpbmRvd1tkXSYmd2luZG93W2RdLnByb3RvdHlwZSxxZFtkXS5mb3JFYWNoKGZ1bmN0aW9uKGMpe3JldHVybiBmdW5jdGlvbihkKXtyZXR1cm4gYy5XJiZkJiZBKGMuVyxkLGEsYil9fShjKSksYz17VzpjLld9fTtpZih3LmVhKXt2YXIgU2hhZHlET009e2luVXNlOncuZWEscGF0Y2g6ZnVuY3Rpb24oYSl7RmIoYSk7RWIoYSk7cmV0dXJuIGF9LGlzU2hhZHlSb290OnosZW5xdWV1ZTpZYSxmbHVzaDpaYSxmbHVzaEluaXRpYWw6ZnVuY3Rpb24oYSl7IWEuYmEmJmEuQiYmVGMoYSl9LHNldHRpbmdzOncsZmlsdGVyTXV0YXRpb25zOmRiLG9ic2VydmVDaGlsZHJlbjpiYix1bm9ic2VydmVDaGlsZHJlbjpjYixkZWZlckNvbm5lY3Rpb25DYWxsYmFja3M6dy5kZWZlckNvbm5lY3Rpb25DYWxsYmFja3MscHJlZmVyUGVyZm9ybWFuY2U6dy5wcmVmZXJQZXJmb3JtYW5jZSxoYW5kbGVzRHluYW1pY1Njb3Bpbmc6ITAsd3JhcDp3Lko/ZWQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGF9LFdyYXBwZXI6Y2QsY29tcG9zZWRQYXRoOk1iLG5vUGF0Y2g6dy5KLG5hdGl2ZU1ldGhvZHM6cWIsbmF0aXZlVHJlZTpyYn07d2luZG93LlNoYWR5RE9NPVNoYWR5RE9NO3liKCk7c2QoIl9fc2hhZHlfIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KGRvY3VtZW50LAoiX2FjdGl2ZUVsZW1lbnQiLEpjLmFjdGl2ZUVsZW1lbnQpO0EoV2luZG93LnByb3RvdHlwZSxvZCwiX19zaGFkeV8iKTt3Lkp8fChzZCgpLGJjKCkpO1hiKCk7d2luZG93LkV2ZW50PVpiO3dpbmRvdy5DdXN0b21FdmVudD0kYjt3aW5kb3cuTW91c2VFdmVudD1hYzt3aW5kb3cuU2hhZG93Um9vdD1TY307dmFyIHRkPW5ldyBTZXQoImFubm90YXRpb24teG1sIGNvbG9yLXByb2ZpbGUgZm9udC1mYWNlIGZvbnQtZmFjZS1zcmMgZm9udC1mYWNlLXVyaSBmb250LWZhY2UtZm9ybWF0IGZvbnQtZmFjZS1uYW1lIG1pc3NpbmctZ2x5cGgiLnNwbGl0KCIgIikpO2Z1bmN0aW9uIHVkKGEpe3ZhciBiPXRkLmhhcyhhKTthPS9eW2Etel1bLjAtOV9hLXpdKi1bXC0uMC05X2Etel0qJC8udGVzdChhKTtyZXR1cm4hYiYmYX1mdW5jdGlvbiBIKGEpe3ZhciBiPWEuaXNDb25uZWN0ZWQ7aWYodm9pZCAwIT09YilyZXR1cm4gYjtmb3IoO2EmJiEoYS5fX0NFX2lzSW1wb3J0RG9jdW1lbnR8fGEgaW5zdGFuY2VvZiBEb2N1bWVudCk7KWE9YS5wYXJlbnROb2RlfHwod2luZG93LlNoYWRvd1Jvb3QmJmEgaW5zdGFuY2VvZiBTaGFkb3dSb290P2EuaG9zdDp2b2lkIDApO3JldHVybiEoIWF8fCEoYS5fX0NFX2lzSW1wb3J0RG9jdW1lbnR8fGEgaW5zdGFuY2VvZiBEb2N1bWVudCkpfQpmdW5jdGlvbiB2ZChhLGIpe2Zvcig7YiYmYiE9PWEmJiFiLm5leHRTaWJsaW5nOyliPWIucGFyZW50Tm9kZTtyZXR1cm4gYiYmYiE9PWE/Yi5uZXh0U2libGluZzpudWxsfQpmdW5jdGlvbiB3ZChhLGIsYyl7Yz12b2lkIDA9PT1jP25ldyBTZXQ6Yztmb3IodmFyIGQ9YTtkOyl7aWYoZC5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFKXt2YXIgZT1kO2IoZSk7dmFyIGY9ZS5sb2NhbE5hbWU7aWYoImxpbmsiPT09ZiYmImltcG9ydCI9PT1lLmdldEF0dHJpYnV0ZSgicmVsIikpe2Q9ZS5pbXBvcnQ7aWYoZCBpbnN0YW5jZW9mIE5vZGUmJiFjLmhhcyhkKSlmb3IoYy5hZGQoZCksZD1kLmZpcnN0Q2hpbGQ7ZDtkPWQubmV4dFNpYmxpbmcpd2QoZCxiLGMpO2Q9dmQoYSxlKTtjb250aW51ZX1lbHNlIGlmKCJ0ZW1wbGF0ZSI9PT1mKXtkPXZkKGEsZSk7Y29udGludWV9aWYoZT1lLl9fQ0Vfc2hhZG93Um9vdClmb3IoZT1lLmZpcnN0Q2hpbGQ7ZTtlPWUubmV4dFNpYmxpbmcpd2QoZSxiLGMpfWQ9ZC5maXJzdENoaWxkP2QuZmlyc3RDaGlsZDp2ZChhLGQpfX1mdW5jdGlvbiBJKGEsYixjKXthW2JdPWN9O2Z1bmN0aW9uIHhkKCl7dGhpcy5hPW5ldyBNYXA7dGhpcy5nPW5ldyBNYXA7dGhpcy5mPVtdO3RoaXMuYz0hMX1mdW5jdGlvbiB5ZChhLGIsYyl7YS5hLnNldChiLGMpO2EuZy5zZXQoYy5jb25zdHJ1Y3RvckZ1bmN0aW9uLGMpfWZ1bmN0aW9uIHpkKGEsYil7YS5jPSEwO2EuZi5wdXNoKGIpfWZ1bmN0aW9uIEFkKGEsYil7YS5jJiZ3ZChiLGZ1bmN0aW9uKGIpe3JldHVybiBhLmIoYil9KX14ZC5wcm90b3R5cGUuYj1mdW5jdGlvbihhKXtpZih0aGlzLmMmJiFhLl9fQ0VfcGF0Y2hlZCl7YS5fX0NFX3BhdGNoZWQ9ITA7Zm9yKHZhciBiPTA7Yjx0aGlzLmYubGVuZ3RoO2IrKyl0aGlzLmZbYl0oYSl9fTtmdW5jdGlvbiBKKGEsYil7dmFyIGM9W107d2QoYixmdW5jdGlvbihhKXtyZXR1cm4gYy5wdXNoKGEpfSk7Zm9yKGI9MDtiPGMubGVuZ3RoO2IrKyl7dmFyIGQ9Y1tiXTsxPT09ZC5fX0NFX3N0YXRlP2EuY29ubmVjdGVkQ2FsbGJhY2soZCk6QmQoYSxkKX19CmZ1bmN0aW9uIEsoYSxiKXt2YXIgYz1bXTt3ZChiLGZ1bmN0aW9uKGEpe3JldHVybiBjLnB1c2goYSl9KTtmb3IoYj0wO2I8Yy5sZW5ndGg7YisrKXt2YXIgZD1jW2JdOzE9PT1kLl9fQ0Vfc3RhdGUmJmEuZGlzY29ubmVjdGVkQ2FsbGJhY2soZCl9fQpmdW5jdGlvbiBMKGEsYixjKXtjPXZvaWQgMD09PWM/e306Yzt2YXIgZD1jLlhhfHxuZXcgU2V0LGU9Yy5ZfHxmdW5jdGlvbihiKXtyZXR1cm4gQmQoYSxiKX0sZj1bXTt3ZChiLGZ1bmN0aW9uKGIpe2lmKCJsaW5rIj09PWIubG9jYWxOYW1lJiYiaW1wb3J0Ij09PWIuZ2V0QXR0cmlidXRlKCJyZWwiKSl7dmFyIGM9Yi5pbXBvcnQ7YyBpbnN0YW5jZW9mIE5vZGUmJihjLl9fQ0VfaXNJbXBvcnREb2N1bWVudD0hMCxjLl9fQ0VfaGFzUmVnaXN0cnk9ITApO2MmJiJjb21wbGV0ZSI9PT1jLnJlYWR5U3RhdGU/Yy5fX0NFX2RvY3VtZW50TG9hZEhhbmRsZWQ9ITA6Yi5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixmdW5jdGlvbigpe3ZhciBjPWIuaW1wb3J0O2lmKCFjLl9fQ0VfZG9jdW1lbnRMb2FkSGFuZGxlZCl7Yy5fX0NFX2RvY3VtZW50TG9hZEhhbmRsZWQ9ITA7dmFyIGY9bmV3IFNldChkKTtmLmRlbGV0ZShjKTtMKGEsYyx7WGE6ZixZOmV9KX19KX1lbHNlIGYucHVzaChiKX0sZCk7aWYoYS5jKWZvcihiPQowO2I8Zi5sZW5ndGg7YisrKWEuYihmW2JdKTtmb3IoYj0wO2I8Zi5sZW5ndGg7YisrKWUoZltiXSl9CmZ1bmN0aW9uIEJkKGEsYil7aWYodm9pZCAwPT09Yi5fX0NFX3N0YXRlKXt2YXIgYz1iLm93bmVyRG9jdW1lbnQ7aWYoYy5kZWZhdWx0Vmlld3x8Yy5fX0NFX2lzSW1wb3J0RG9jdW1lbnQmJmMuX19DRV9oYXNSZWdpc3RyeSlpZihjPWEuYS5nZXQoYi5sb2NhbE5hbWUpKXtjLmNvbnN0cnVjdGlvblN0YWNrLnB1c2goYik7dmFyIGQ9Yy5jb25zdHJ1Y3RvckZ1bmN0aW9uO3RyeXt0cnl7aWYobmV3IGQhPT1iKXRocm93IEVycm9yKCJUaGUgY3VzdG9tIGVsZW1lbnQgY29uc3RydWN0b3IgZGlkIG5vdCBwcm9kdWNlIHRoZSBlbGVtZW50IGJlaW5nIHVwZ3JhZGVkLiIpO31maW5hbGx5e2MuY29uc3RydWN0aW9uU3RhY2sucG9wKCl9fWNhdGNoKGcpe3Rocm93IGIuX19DRV9zdGF0ZT0yLGc7fWIuX19DRV9zdGF0ZT0xO2IuX19DRV9kZWZpbml0aW9uPWM7aWYoYy5hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2spZm9yKGM9Yy5vYnNlcnZlZEF0dHJpYnV0ZXMsZD0wO2Q8Yy5sZW5ndGg7ZCsrKXt2YXIgZT0KY1tkXSxmPWIuZ2V0QXR0cmlidXRlKGUpO251bGwhPT1mJiZhLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhiLGUsbnVsbCxmLG51bGwpfUgoYikmJmEuY29ubmVjdGVkQ2FsbGJhY2soYil9fX14ZC5wcm90b3R5cGUuY29ubmVjdGVkQ2FsbGJhY2s9ZnVuY3Rpb24oYSl7dmFyIGI9YS5fX0NFX2RlZmluaXRpb247Yi5jb25uZWN0ZWRDYWxsYmFjayYmYi5jb25uZWN0ZWRDYWxsYmFjay5jYWxsKGEpfTt4ZC5wcm90b3R5cGUuZGlzY29ubmVjdGVkQ2FsbGJhY2s9ZnVuY3Rpb24oYSl7dmFyIGI9YS5fX0NFX2RlZmluaXRpb247Yi5kaXNjb25uZWN0ZWRDYWxsYmFjayYmYi5kaXNjb25uZWN0ZWRDYWxsYmFjay5jYWxsKGEpfTsKeGQucHJvdG90eXBlLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaz1mdW5jdGlvbihhLGIsYyxkLGUpe3ZhciBmPWEuX19DRV9kZWZpbml0aW9uO2YuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrJiYtMTxmLm9ic2VydmVkQXR0cmlidXRlcy5pbmRleE9mKGIpJiZmLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjay5jYWxsKGEsYixjLGQsZSl9O2Z1bmN0aW9uIENkKGEpe3ZhciBiPWRvY3VtZW50O3RoaXMuYj1hO3RoaXMuYT1iO3RoaXMuRj12b2lkIDA7TCh0aGlzLmIsdGhpcy5hKTsibG9hZGluZyI9PT10aGlzLmEucmVhZHlTdGF0ZSYmKHRoaXMuRj1uZXcgTXV0YXRpb25PYnNlcnZlcih0aGlzLmMuYmluZCh0aGlzKSksdGhpcy5GLm9ic2VydmUodGhpcy5hLHtjaGlsZExpc3Q6ITAsc3VidHJlZTohMH0pKX1mdW5jdGlvbiBEZChhKXthLkYmJmEuRi5kaXNjb25uZWN0KCl9Q2QucHJvdG90eXBlLmM9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5hLnJlYWR5U3RhdGU7ImludGVyYWN0aXZlIiE9PWImJiJjb21wbGV0ZSIhPT1ifHxEZCh0aGlzKTtmb3IoYj0wO2I8YS5sZW5ndGg7YisrKWZvcih2YXIgYz1hW2JdLmFkZGVkTm9kZXMsZD0wO2Q8Yy5sZW5ndGg7ZCsrKUwodGhpcy5iLGNbZF0pfTtmdW5jdGlvbiBFZCgpe3ZhciBhPXRoaXM7dGhpcy5hPXRoaXMuaD12b2lkIDA7dGhpcy5iPW5ldyBQcm9taXNlKGZ1bmN0aW9uKGIpe2EuYT1iO2EuaCYmYihhLmgpfSl9RWQucHJvdG90eXBlLnJlc29sdmU9ZnVuY3Rpb24oYSl7aWYodGhpcy5oKXRocm93IEVycm9yKCJBbHJlYWR5IHJlc29sdmVkLiIpO3RoaXMuaD1hO3RoaXMuYSYmdGhpcy5hKGEpfTtmdW5jdGlvbiBOKGEpe3RoaXMuYz0hMTt0aGlzLmE9YTt0aGlzLmw9bmV3IE1hcDt0aGlzLmY9ZnVuY3Rpb24oYSl7cmV0dXJuIGEoKX07dGhpcy5iPSExO3RoaXMuZz1bXTt0aGlzLmRhPW5ldyBDZChhKX1uPU4ucHJvdG90eXBlOwpuLnNhPWZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcztpZighKGIgaW5zdGFuY2VvZiBGdW5jdGlvbikpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ3VzdG9tIGVsZW1lbnQgY29uc3RydWN0b3JzIG11c3QgYmUgZnVuY3Rpb25zLiIpO2lmKCF1ZChhKSl0aHJvdyBuZXcgU3ludGF4RXJyb3IoIlRoZSBlbGVtZW50IG5hbWUgJyIrYSsiJyBpcyBub3QgdmFsaWQuIik7aWYodGhpcy5hLmEuZ2V0KGEpKXRocm93IEVycm9yKCJBIGN1c3RvbSBlbGVtZW50IHdpdGggbmFtZSAnIithKyInIGhhcyBhbHJlYWR5IGJlZW4gZGVmaW5lZC4iKTtpZih0aGlzLmMpdGhyb3cgRXJyb3IoIkEgY3VzdG9tIGVsZW1lbnQgaXMgYWxyZWFkeSBiZWluZyBkZWZpbmVkLiIpO3RoaXMuYz0hMDt0cnl7dmFyIGQ9ZnVuY3Rpb24oYSl7dmFyIGI9ZVthXTtpZih2b2lkIDAhPT1iJiYhKGIgaW5zdGFuY2VvZiBGdW5jdGlvbikpdGhyb3cgRXJyb3IoIlRoZSAnIithKyInIGNhbGxiYWNrIG11c3QgYmUgYSBmdW5jdGlvbi4iKTsKcmV0dXJuIGJ9LGU9Yi5wcm90b3R5cGU7aWYoIShlIGluc3RhbmNlb2YgT2JqZWN0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJUaGUgY3VzdG9tIGVsZW1lbnQgY29uc3RydWN0b3IncyBwcm90b3R5cGUgaXMgbm90IGFuIG9iamVjdC4iKTt2YXIgZj1kKCJjb25uZWN0ZWRDYWxsYmFjayIpO3ZhciBnPWQoImRpc2Nvbm5lY3RlZENhbGxiYWNrIik7dmFyIGg9ZCgiYWRvcHRlZENhbGxiYWNrIik7dmFyIGs9ZCgiYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrIik7dmFyIGw9Yi5vYnNlcnZlZEF0dHJpYnV0ZXN8fFtdfWNhdGNoKG0pe3JldHVybn1maW5hbGx5e3RoaXMuYz0hMX1iPXtsb2NhbE5hbWU6YSxjb25zdHJ1Y3RvckZ1bmN0aW9uOmIsY29ubmVjdGVkQ2FsbGJhY2s6ZixkaXNjb25uZWN0ZWRDYWxsYmFjazpnLGFkb3B0ZWRDYWxsYmFjazpoLGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjazprLG9ic2VydmVkQXR0cmlidXRlczpsLGNvbnN0cnVjdGlvblN0YWNrOltdfTt5ZCh0aGlzLmEsCmEsYik7dGhpcy5nLnB1c2goYik7dGhpcy5ifHwodGhpcy5iPSEwLHRoaXMuZihmdW5jdGlvbigpe3JldHVybiBGZChjKX0pKX07bi5ZPWZ1bmN0aW9uKGEpe0wodGhpcy5hLGEpfTsKZnVuY3Rpb24gRmQoYSl7aWYoITEhPT1hLmIpe2EuYj0hMTtmb3IodmFyIGI9YS5nLGM9W10sZD1uZXcgTWFwLGU9MDtlPGIubGVuZ3RoO2UrKylkLnNldChiW2VdLmxvY2FsTmFtZSxbXSk7TChhLmEsZG9jdW1lbnQse1k6ZnVuY3Rpb24oYil7aWYodm9pZCAwPT09Yi5fX0NFX3N0YXRlKXt2YXIgZT1iLmxvY2FsTmFtZSxmPWQuZ2V0KGUpO2Y/Zi5wdXNoKGIpOmEuYS5hLmdldChlKSYmYy5wdXNoKGIpfX19KTtmb3IoZT0wO2U8Yy5sZW5ndGg7ZSsrKUJkKGEuYSxjW2VdKTtmb3IoOzA8Yi5sZW5ndGg7KXt2YXIgZj1iLnNoaWZ0KCk7ZT1mLmxvY2FsTmFtZTtmPWQuZ2V0KGYubG9jYWxOYW1lKTtmb3IodmFyIGc9MDtnPGYubGVuZ3RoO2crKylCZChhLmEsZltnXSk7KGU9YS5sLmdldChlKSkmJmUucmVzb2x2ZSh2b2lkIDApfX19bi5nZXQ9ZnVuY3Rpb24oYSl7aWYoYT10aGlzLmEuYS5nZXQoYSkpcmV0dXJuIGEuY29uc3RydWN0b3JGdW5jdGlvbn07Cm4udGE9ZnVuY3Rpb24oYSl7aWYoIXVkKGEpKXJldHVybiBQcm9taXNlLnJlamVjdChuZXcgU3ludGF4RXJyb3IoIiciK2ErIicgaXMgbm90IGEgdmFsaWQgY3VzdG9tIGVsZW1lbnQgbmFtZS4iKSk7dmFyIGI9dGhpcy5sLmdldChhKTtpZihiKXJldHVybiBiLmI7Yj1uZXcgRWQ7dGhpcy5sLnNldChhLGIpO3RoaXMuYS5hLmdldChhKSYmIXRoaXMuZy5zb21lKGZ1bmN0aW9uKGIpe3JldHVybiBiLmxvY2FsTmFtZT09PWF9KSYmYi5yZXNvbHZlKHZvaWQgMCk7cmV0dXJuIGIuYn07bi5QYT1mdW5jdGlvbihhKXtEZCh0aGlzLmRhKTt2YXIgYj10aGlzLmY7dGhpcy5mPWZ1bmN0aW9uKGMpe3JldHVybiBhKGZ1bmN0aW9uKCl7cmV0dXJuIGIoYyl9KX19O3dpbmRvdy5DdXN0b21FbGVtZW50UmVnaXN0cnk9TjtOLnByb3RvdHlwZS5kZWZpbmU9Ti5wcm90b3R5cGUuc2E7Ti5wcm90b3R5cGUudXBncmFkZT1OLnByb3RvdHlwZS5ZO04ucHJvdG90eXBlLmdldD1OLnByb3RvdHlwZS5nZXQ7Ck4ucHJvdG90eXBlLndoZW5EZWZpbmVkPU4ucHJvdG90eXBlLnRhO04ucHJvdG90eXBlLnBvbHlmaWxsV3JhcEZsdXNoQ2FsbGJhY2s9Ti5wcm90b3R5cGUuUGE7dmFyIEdkPXdpbmRvdy5Eb2N1bWVudC5wcm90b3R5cGUuY3JlYXRlRWxlbWVudCxIZD13aW5kb3cuRG9jdW1lbnQucHJvdG90eXBlLmNyZWF0ZUVsZW1lbnROUyxJZD13aW5kb3cuRG9jdW1lbnQucHJvdG90eXBlLmltcG9ydE5vZGUsSmQ9d2luZG93LkRvY3VtZW50LnByb3RvdHlwZS5wcmVwZW5kLEtkPXdpbmRvdy5Eb2N1bWVudC5wcm90b3R5cGUuYXBwZW5kLExkPXdpbmRvdy5Eb2N1bWVudEZyYWdtZW50LnByb3RvdHlwZS5wcmVwZW5kLE1kPXdpbmRvdy5Eb2N1bWVudEZyYWdtZW50LnByb3RvdHlwZS5hcHBlbmQsTmQ9d2luZG93Lk5vZGUucHJvdG90eXBlLmNsb25lTm9kZSxPZD13aW5kb3cuTm9kZS5wcm90b3R5cGUuYXBwZW5kQ2hpbGQsUGQ9d2luZG93Lk5vZGUucHJvdG90eXBlLmluc2VydEJlZm9yZSxRZD13aW5kb3cuTm9kZS5wcm90b3R5cGUucmVtb3ZlQ2hpbGQsUmQ9d2luZG93Lk5vZGUucHJvdG90eXBlLnJlcGxhY2VDaGlsZCxTZD1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHdpbmRvdy5Ob2RlLnByb3RvdHlwZSwKInRleHRDb250ZW50IiksVGQ9d2luZG93LkVsZW1lbnQucHJvdG90eXBlLmF0dGFjaFNoYWRvdyxVZD1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHdpbmRvdy5FbGVtZW50LnByb3RvdHlwZSwiaW5uZXJIVE1MIiksVmQ9d2luZG93LkVsZW1lbnQucHJvdG90eXBlLmdldEF0dHJpYnV0ZSxXZD13aW5kb3cuRWxlbWVudC5wcm90b3R5cGUuc2V0QXR0cmlidXRlLFhkPXdpbmRvdy5FbGVtZW50LnByb3RvdHlwZS5yZW1vdmVBdHRyaWJ1dGUsWWQ9d2luZG93LkVsZW1lbnQucHJvdG90eXBlLmdldEF0dHJpYnV0ZU5TLFpkPXdpbmRvdy5FbGVtZW50LnByb3RvdHlwZS5zZXRBdHRyaWJ1dGVOUywkZD13aW5kb3cuRWxlbWVudC5wcm90b3R5cGUucmVtb3ZlQXR0cmlidXRlTlMsYWU9d2luZG93LkVsZW1lbnQucHJvdG90eXBlLmluc2VydEFkamFjZW50RWxlbWVudCxiZT13aW5kb3cuRWxlbWVudC5wcm90b3R5cGUuaW5zZXJ0QWRqYWNlbnRIVE1MLGNlPXdpbmRvdy5FbGVtZW50LnByb3RvdHlwZS5wcmVwZW5kLApkZT13aW5kb3cuRWxlbWVudC5wcm90b3R5cGUuYXBwZW5kLGVlPXdpbmRvdy5FbGVtZW50LnByb3RvdHlwZS5iZWZvcmUsZmU9d2luZG93LkVsZW1lbnQucHJvdG90eXBlLmFmdGVyLGdlPXdpbmRvdy5FbGVtZW50LnByb3RvdHlwZS5yZXBsYWNlV2l0aCxoZT13aW5kb3cuRWxlbWVudC5wcm90b3R5cGUucmVtb3ZlLGllPXdpbmRvdy5IVE1MRWxlbWVudCxqZT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHdpbmRvdy5IVE1MRWxlbWVudC5wcm90b3R5cGUsImlubmVySFRNTCIpLGtlPXdpbmRvdy5IVE1MRWxlbWVudC5wcm90b3R5cGUuaW5zZXJ0QWRqYWNlbnRFbGVtZW50LGxlPXdpbmRvdy5IVE1MRWxlbWVudC5wcm90b3R5cGUuaW5zZXJ0QWRqYWNlbnRIVE1MO3ZhciBtZT1uZXcgZnVuY3Rpb24oKXt9O2Z1bmN0aW9uIG5lKCl7dmFyIGE9b2U7d2luZG93LkhUTUxFbGVtZW50PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYigpe3ZhciBiPXRoaXMuY29uc3RydWN0b3IsZD1hLmcuZ2V0KGIpO2lmKCFkKXRocm93IEVycm9yKCJUaGUgY3VzdG9tIGVsZW1lbnQgYmVpbmcgY29uc3RydWN0ZWQgd2FzIG5vdCByZWdpc3RlcmVkIHdpdGggYGN1c3RvbUVsZW1lbnRzYC4iKTt2YXIgZT1kLmNvbnN0cnVjdGlvblN0YWNrO2lmKDA9PT1lLmxlbmd0aClyZXR1cm4gZT1HZC5jYWxsKGRvY3VtZW50LGQubG9jYWxOYW1lKSxPYmplY3Quc2V0UHJvdG90eXBlT2YoZSxiLnByb3RvdHlwZSksZS5fX0NFX3N0YXRlPTEsZS5fX0NFX2RlZmluaXRpb249ZCxhLmIoZSksZTtkPWUubGVuZ3RoLTE7dmFyIGY9ZVtkXTtpZihmPT09bWUpdGhyb3cgRXJyb3IoIlRoZSBIVE1MRWxlbWVudCBjb25zdHJ1Y3RvciB3YXMgZWl0aGVyIGNhbGxlZCByZWVudHJhbnRseSBmb3IgdGhpcyBjb25zdHJ1Y3RvciBvciBjYWxsZWQgbXVsdGlwbGUgdGltZXMuIik7CmVbZF09bWU7T2JqZWN0LnNldFByb3RvdHlwZU9mKGYsYi5wcm90b3R5cGUpO2EuYihmKTtyZXR1cm4gZn1iLnByb3RvdHlwZT1pZS5wcm90b3R5cGU7T2JqZWN0LmRlZmluZVByb3BlcnR5KGIucHJvdG90eXBlLCJjb25zdHJ1Y3RvciIse3dyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLHZhbHVlOmJ9KTtyZXR1cm4gYn0oKX07ZnVuY3Rpb24gcGUoYSxiLGMpe2Z1bmN0aW9uIGQoYil7cmV0dXJuIGZ1bmN0aW9uKGMpe2Zvcih2YXIgZD1bXSxlPTA7ZTxhcmd1bWVudHMubGVuZ3RoOysrZSlkW2VdPWFyZ3VtZW50c1tlXTtlPVtdO2Zvcih2YXIgZj1bXSxsPTA7bDxkLmxlbmd0aDtsKyspe3ZhciBtPWRbbF07bSBpbnN0YW5jZW9mIEVsZW1lbnQmJkgobSkmJmYucHVzaChtKTtpZihtIGluc3RhbmNlb2YgRG9jdW1lbnRGcmFnbWVudClmb3IobT1tLmZpcnN0Q2hpbGQ7bTttPW0ubmV4dFNpYmxpbmcpZS5wdXNoKG0pO2Vsc2UgZS5wdXNoKG0pfWIuYXBwbHkodGhpcyxkKTtmb3IoZD0wO2Q8Zi5sZW5ndGg7ZCsrKUsoYSxmW2RdKTtpZihIKHRoaXMpKWZvcihkPTA7ZDxlLmxlbmd0aDtkKyspZj1lW2RdLGYgaW5zdGFuY2VvZiBFbGVtZW50JiZKKGEsZil9fXZvaWQgMCE9PWMuViYmKGIucHJlcGVuZD1kKGMuVikpO3ZvaWQgMCE9PWMuYXBwZW5kJiYoYi5hcHBlbmQ9ZChjLmFwcGVuZCkpfTtmdW5jdGlvbiBxZSgpe3ZhciBhPW9lO0koRG9jdW1lbnQucHJvdG90eXBlLCJjcmVhdGVFbGVtZW50IixmdW5jdGlvbihiKXtpZih0aGlzLl9fQ0VfaGFzUmVnaXN0cnkpe3ZhciBjPWEuYS5nZXQoYik7aWYoYylyZXR1cm4gbmV3IGMuY29uc3RydWN0b3JGdW5jdGlvbn1iPUdkLmNhbGwodGhpcyxiKTthLmIoYik7cmV0dXJuIGJ9KTtJKERvY3VtZW50LnByb3RvdHlwZSwiaW1wb3J0Tm9kZSIsZnVuY3Rpb24oYixjKXtiPUlkLmNhbGwodGhpcyxiLCEhYyk7dGhpcy5fX0NFX2hhc1JlZ2lzdHJ5P0woYSxiKTpBZChhLGIpO3JldHVybiBifSk7SShEb2N1bWVudC5wcm90b3R5cGUsImNyZWF0ZUVsZW1lbnROUyIsZnVuY3Rpb24oYixjKXtpZih0aGlzLl9fQ0VfaGFzUmVnaXN0cnkmJihudWxsPT09Ynx8Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPT09Yikpe3ZhciBkPWEuYS5nZXQoYyk7aWYoZClyZXR1cm4gbmV3IGQuY29uc3RydWN0b3JGdW5jdGlvbn1iPUhkLmNhbGwodGhpcywKYixjKTthLmIoYik7cmV0dXJuIGJ9KTtwZShhLERvY3VtZW50LnByb3RvdHlwZSx7VjpKZCxhcHBlbmQ6S2R9KX07ZnVuY3Rpb24gcmUoKXtmdW5jdGlvbiBhKGEsZCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGEsInRleHRDb250ZW50Iix7ZW51bWVyYWJsZTpkLmVudW1lcmFibGUsY29uZmlndXJhYmxlOiEwLGdldDpkLmdldCxzZXQ6ZnVuY3Rpb24oYSl7aWYodGhpcy5ub2RlVHlwZT09PU5vZGUuVEVYVF9OT0RFKWQuc2V0LmNhbGwodGhpcyxhKTtlbHNle3ZhciBjPXZvaWQgMDtpZih0aGlzLmZpcnN0Q2hpbGQpe3ZhciBlPXRoaXMuY2hpbGROb2RlcyxoPWUubGVuZ3RoO2lmKDA8aCYmSCh0aGlzKSl7Yz1BcnJheShoKTtmb3IodmFyIGs9MDtrPGg7aysrKWNba109ZVtrXX19ZC5zZXQuY2FsbCh0aGlzLGEpO2lmKGMpZm9yKGE9MDthPGMubGVuZ3RoO2ErKylLKGIsY1thXSl9fX0pfXZhciBiPW9lO0koTm9kZS5wcm90b3R5cGUsImluc2VydEJlZm9yZSIsZnVuY3Rpb24oYSxkKXtpZihhIGluc3RhbmNlb2YgRG9jdW1lbnRGcmFnbWVudCl7dmFyIGM9QXJyYXkucHJvdG90eXBlLnNsaWNlLmFwcGx5KGEuY2hpbGROb2Rlcyk7CmE9UGQuY2FsbCh0aGlzLGEsZCk7aWYoSCh0aGlzKSlmb3IoZD0wO2Q8Yy5sZW5ndGg7ZCsrKUooYixjW2RdKTtyZXR1cm4gYX1jPUgoYSk7ZD1QZC5jYWxsKHRoaXMsYSxkKTtjJiZLKGIsYSk7SCh0aGlzKSYmSihiLGEpO3JldHVybiBkfSk7SShOb2RlLnByb3RvdHlwZSwiYXBwZW5kQ2hpbGQiLGZ1bmN0aW9uKGEpe2lmKGEgaW5zdGFuY2VvZiBEb2N1bWVudEZyYWdtZW50KXt2YXIgYz1BcnJheS5wcm90b3R5cGUuc2xpY2UuYXBwbHkoYS5jaGlsZE5vZGVzKTthPU9kLmNhbGwodGhpcyxhKTtpZihIKHRoaXMpKWZvcih2YXIgZT0wO2U8Yy5sZW5ndGg7ZSsrKUooYixjW2VdKTtyZXR1cm4gYX1jPUgoYSk7ZT1PZC5jYWxsKHRoaXMsYSk7YyYmSyhiLGEpO0godGhpcykmJkooYixhKTtyZXR1cm4gZX0pO0koTm9kZS5wcm90b3R5cGUsImNsb25lTm9kZSIsZnVuY3Rpb24oYSl7YT1OZC5jYWxsKHRoaXMsISFhKTt0aGlzLm93bmVyRG9jdW1lbnQuX19DRV9oYXNSZWdpc3RyeT9MKGIsYSk6CkFkKGIsYSk7cmV0dXJuIGF9KTtJKE5vZGUucHJvdG90eXBlLCJyZW1vdmVDaGlsZCIsZnVuY3Rpb24oYSl7dmFyIGM9SChhKSxlPVFkLmNhbGwodGhpcyxhKTtjJiZLKGIsYSk7cmV0dXJuIGV9KTtJKE5vZGUucHJvdG90eXBlLCJyZXBsYWNlQ2hpbGQiLGZ1bmN0aW9uKGEsZCl7aWYoYSBpbnN0YW5jZW9mIERvY3VtZW50RnJhZ21lbnQpe3ZhciBjPUFycmF5LnByb3RvdHlwZS5zbGljZS5hcHBseShhLmNoaWxkTm9kZXMpO2E9UmQuY2FsbCh0aGlzLGEsZCk7aWYoSCh0aGlzKSlmb3IoSyhiLGQpLGQ9MDtkPGMubGVuZ3RoO2QrKylKKGIsY1tkXSk7cmV0dXJuIGF9Yz1IKGEpO3ZhciBmPVJkLmNhbGwodGhpcyxhLGQpLGc9SCh0aGlzKTtnJiZLKGIsZCk7YyYmSyhiLGEpO2cmJkooYixhKTtyZXR1cm4gZn0pO1NkJiZTZC5nZXQ/YShOb2RlLnByb3RvdHlwZSxTZCk6emQoYixmdW5jdGlvbihiKXthKGIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe2Zvcih2YXIgYT0KW10sYj0wO2I8dGhpcy5jaGlsZE5vZGVzLmxlbmd0aDtiKyspYS5wdXNoKHRoaXMuY2hpbGROb2Rlc1tiXS50ZXh0Q29udGVudCk7cmV0dXJuIGEuam9pbigiIil9LHNldDpmdW5jdGlvbihhKXtmb3IoO3RoaXMuZmlyc3RDaGlsZDspUWQuY2FsbCh0aGlzLHRoaXMuZmlyc3RDaGlsZCk7T2QuY2FsbCh0aGlzLGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGEpKX19KX0pfTtmdW5jdGlvbiBzZShhKXtmdW5jdGlvbiBiKGIpe3JldHVybiBmdW5jdGlvbihjKXtmb3IodmFyIGQ9W10sZT0wO2U8YXJndW1lbnRzLmxlbmd0aDsrK2UpZFtlXT1hcmd1bWVudHNbZV07ZT1bXTtmb3IodmFyIGg9W10saz0wO2s8ZC5sZW5ndGg7aysrKXt2YXIgbD1kW2tdO2wgaW5zdGFuY2VvZiBFbGVtZW50JiZIKGwpJiZoLnB1c2gobCk7aWYobCBpbnN0YW5jZW9mIERvY3VtZW50RnJhZ21lbnQpZm9yKGw9bC5maXJzdENoaWxkO2w7bD1sLm5leHRTaWJsaW5nKWUucHVzaChsKTtlbHNlIGUucHVzaChsKX1iLmFwcGx5KHRoaXMsZCk7Zm9yKGQ9MDtkPGgubGVuZ3RoO2QrKylLKGEsaFtkXSk7aWYoSCh0aGlzKSlmb3IoZD0wO2Q8ZS5sZW5ndGg7ZCsrKWg9ZVtkXSxoIGluc3RhbmNlb2YgRWxlbWVudCYmSihhLGgpfX12YXIgYz1FbGVtZW50LnByb3RvdHlwZTt2b2lkIDAhPT1lZSYmKGMuYmVmb3JlPWIoZWUpKTt2b2lkIDAhPT1lZSYmKGMuYWZ0ZXI9YihmZSkpO3ZvaWQgMCE9PWdlJiYKSShjLCJyZXBsYWNlV2l0aCIsZnVuY3Rpb24oYil7Zm9yKHZhciBjPVtdLGQ9MDtkPGFyZ3VtZW50cy5sZW5ndGg7KytkKWNbZF09YXJndW1lbnRzW2RdO2Q9W107Zm9yKHZhciBnPVtdLGg9MDtoPGMubGVuZ3RoO2grKyl7dmFyIGs9Y1toXTtrIGluc3RhbmNlb2YgRWxlbWVudCYmSChrKSYmZy5wdXNoKGspO2lmKGsgaW5zdGFuY2VvZiBEb2N1bWVudEZyYWdtZW50KWZvcihrPWsuZmlyc3RDaGlsZDtrO2s9ay5uZXh0U2libGluZylkLnB1c2goayk7ZWxzZSBkLnB1c2goayl9aD1IKHRoaXMpO2dlLmFwcGx5KHRoaXMsYyk7Zm9yKGM9MDtjPGcubGVuZ3RoO2MrKylLKGEsZ1tjXSk7aWYoaClmb3IoSyhhLHRoaXMpLGM9MDtjPGQubGVuZ3RoO2MrKylnPWRbY10sZyBpbnN0YW5jZW9mIEVsZW1lbnQmJkooYSxnKX0pO3ZvaWQgMCE9PWhlJiZJKGMsInJlbW92ZSIsZnVuY3Rpb24oKXt2YXIgYj1IKHRoaXMpO2hlLmNhbGwodGhpcyk7YiYmSyhhLHRoaXMpfSl9O2Z1bmN0aW9uIHRlKCl7ZnVuY3Rpb24gYShhLGIpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShhLCJpbm5lckhUTUwiLHtlbnVtZXJhYmxlOmIuZW51bWVyYWJsZSxjb25maWd1cmFibGU6ITAsZ2V0OmIuZ2V0LHNldDpmdW5jdGlvbihhKXt2YXIgYz10aGlzLGU9dm9pZCAwO0godGhpcykmJihlPVtdLHdkKHRoaXMsZnVuY3Rpb24oYSl7YSE9PWMmJmUucHVzaChhKX0pKTtiLnNldC5jYWxsKHRoaXMsYSk7aWYoZSlmb3IodmFyIGY9MDtmPGUubGVuZ3RoO2YrKyl7dmFyIGc9ZVtmXTsxPT09Zy5fX0NFX3N0YXRlJiZkLmRpc2Nvbm5lY3RlZENhbGxiYWNrKGcpfXRoaXMub3duZXJEb2N1bWVudC5fX0NFX2hhc1JlZ2lzdHJ5P0woZCx0aGlzKTpBZChkLHRoaXMpO3JldHVybiBhfX0pfWZ1bmN0aW9uIGIoYSxiKXtJKGEsImluc2VydEFkamFjZW50RWxlbWVudCIsZnVuY3Rpb24oYSxjKXt2YXIgZT1IKGMpO2E9Yi5jYWxsKHRoaXMsYSxjKTtlJiZLKGQsYyk7SChhKSYmSihkLGMpO3JldHVybiBhfSl9CmZ1bmN0aW9uIGMoYSxiKXtmdW5jdGlvbiBjKGEsYil7Zm9yKHZhciBjPVtdO2EhPT1iO2E9YS5uZXh0U2libGluZyljLnB1c2goYSk7Zm9yKGI9MDtiPGMubGVuZ3RoO2IrKylMKGQsY1tiXSl9SShhLCJpbnNlcnRBZGphY2VudEhUTUwiLGZ1bmN0aW9uKGEsZCl7YT1hLnRvTG93ZXJDYXNlKCk7aWYoImJlZm9yZWJlZ2luIj09PWEpe3ZhciBlPXRoaXMucHJldmlvdXNTaWJsaW5nO2IuY2FsbCh0aGlzLGEsZCk7YyhlfHx0aGlzLnBhcmVudE5vZGUuZmlyc3RDaGlsZCx0aGlzKX1lbHNlIGlmKCJhZnRlcmJlZ2luIj09PWEpZT10aGlzLmZpcnN0Q2hpbGQsYi5jYWxsKHRoaXMsYSxkKSxjKHRoaXMuZmlyc3RDaGlsZCxlKTtlbHNlIGlmKCJiZWZvcmVlbmQiPT09YSllPXRoaXMubGFzdENoaWxkLGIuY2FsbCh0aGlzLGEsZCksYyhlfHx0aGlzLmZpcnN0Q2hpbGQsbnVsbCk7ZWxzZSBpZigiYWZ0ZXJlbmQiPT09YSllPXRoaXMubmV4dFNpYmxpbmcsYi5jYWxsKHRoaXMsYSxkKSxjKHRoaXMubmV4dFNpYmxpbmcsCmUpO2Vsc2UgdGhyb3cgbmV3IFN5bnRheEVycm9yKCJUaGUgdmFsdWUgcHJvdmlkZWQgKCIrU3RyaW5nKGEpKyIpIGlzIG5vdCBvbmUgb2YgJ2JlZm9yZWJlZ2luJywgJ2FmdGVyYmVnaW4nLCAnYmVmb3JlZW5kJywgb3IgJ2FmdGVyZW5kJy4iKTt9KX12YXIgZD1vZTtUZCYmSShFbGVtZW50LnByb3RvdHlwZSwiYXR0YWNoU2hhZG93IixmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5fX0NFX3NoYWRvd1Jvb3Q9YT1UZC5jYWxsKHRoaXMsYSl9KTtVZCYmVWQuZ2V0P2EoRWxlbWVudC5wcm90b3R5cGUsVWQpOmplJiZqZS5nZXQ/YShIVE1MRWxlbWVudC5wcm90b3R5cGUsamUpOnpkKGQsZnVuY3Rpb24oYil7YShiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gTmQuY2FsbCh0aGlzLCEwKS5pbm5lckhUTUx9LHNldDpmdW5jdGlvbihhKXt2YXIgYj0idGVtcGxhdGUiPT09dGhpcy5sb2NhbE5hbWUsYz1iP3RoaXMuY29udGVudDp0aGlzLGQ9SGQuY2FsbChkb2N1bWVudCwKdGhpcy5uYW1lc3BhY2VVUkksdGhpcy5sb2NhbE5hbWUpO2ZvcihkLmlubmVySFRNTD1hOzA8Yy5jaGlsZE5vZGVzLmxlbmd0aDspUWQuY2FsbChjLGMuY2hpbGROb2Rlc1swXSk7Zm9yKGE9Yj9kLmNvbnRlbnQ6ZDswPGEuY2hpbGROb2Rlcy5sZW5ndGg7KU9kLmNhbGwoYyxhLmNoaWxkTm9kZXNbMF0pfX0pfSk7SShFbGVtZW50LnByb3RvdHlwZSwic2V0QXR0cmlidXRlIixmdW5jdGlvbihhLGIpe2lmKDEhPT10aGlzLl9fQ0Vfc3RhdGUpcmV0dXJuIFdkLmNhbGwodGhpcyxhLGIpO3ZhciBjPVZkLmNhbGwodGhpcyxhKTtXZC5jYWxsKHRoaXMsYSxiKTtiPVZkLmNhbGwodGhpcyxhKTtkLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayh0aGlzLGEsYyxiLG51bGwpfSk7SShFbGVtZW50LnByb3RvdHlwZSwic2V0QXR0cmlidXRlTlMiLGZ1bmN0aW9uKGEsYixjKXtpZigxIT09dGhpcy5fX0NFX3N0YXRlKXJldHVybiBaZC5jYWxsKHRoaXMsYSxiLGMpO3ZhciBlPVlkLmNhbGwodGhpcyxhLApiKTtaZC5jYWxsKHRoaXMsYSxiLGMpO2M9WWQuY2FsbCh0aGlzLGEsYik7ZC5hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2sodGhpcyxiLGUsYyxhKX0pO0koRWxlbWVudC5wcm90b3R5cGUsInJlbW92ZUF0dHJpYnV0ZSIsZnVuY3Rpb24oYSl7aWYoMSE9PXRoaXMuX19DRV9zdGF0ZSlyZXR1cm4gWGQuY2FsbCh0aGlzLGEpO3ZhciBiPVZkLmNhbGwodGhpcyxhKTtYZC5jYWxsKHRoaXMsYSk7bnVsbCE9PWImJmQuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKHRoaXMsYSxiLG51bGwsbnVsbCl9KTtJKEVsZW1lbnQucHJvdG90eXBlLCJyZW1vdmVBdHRyaWJ1dGVOUyIsZnVuY3Rpb24oYSxiKXtpZigxIT09dGhpcy5fX0NFX3N0YXRlKXJldHVybiAkZC5jYWxsKHRoaXMsYSxiKTt2YXIgYz1ZZC5jYWxsKHRoaXMsYSxiKTskZC5jYWxsKHRoaXMsYSxiKTt2YXIgZT1ZZC5jYWxsKHRoaXMsYSxiKTtjIT09ZSYmZC5hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2sodGhpcyxiLGMsZSxhKX0pO2tlP2IoSFRNTEVsZW1lbnQucHJvdG90eXBlLAprZSk6YWU/YihFbGVtZW50LnByb3RvdHlwZSxhZSk6Y29uc29sZS53YXJuKCJDdXN0b20gRWxlbWVudHM6IGBFbGVtZW50I2luc2VydEFkamFjZW50RWxlbWVudGAgd2FzIG5vdCBwYXRjaGVkLiIpO2xlP2MoSFRNTEVsZW1lbnQucHJvdG90eXBlLGxlKTpiZT9jKEVsZW1lbnQucHJvdG90eXBlLGJlKTpjb25zb2xlLndhcm4oIkN1c3RvbSBFbGVtZW50czogYEVsZW1lbnQjaW5zZXJ0QWRqYWNlbnRIVE1MYCB3YXMgbm90IHBhdGNoZWQuIik7cGUoZCxFbGVtZW50LnByb3RvdHlwZSx7VjpjZSxhcHBlbmQ6ZGV9KTtzZShkKX07dmFyIHVlPXdpbmRvdy5jdXN0b21FbGVtZW50cztpZighdWV8fHVlLmZvcmNlUG9seWZpbGx8fCJmdW5jdGlvbiIhPXR5cGVvZiB1ZS5kZWZpbmV8fCJmdW5jdGlvbiIhPXR5cGVvZiB1ZS5nZXQpe3ZhciBvZT1uZXcgeGQ7bmUoKTtxZSgpO3BlKG9lLERvY3VtZW50RnJhZ21lbnQucHJvdG90eXBlLHtWOkxkLGFwcGVuZDpNZH0pO3JlKCk7dGUoKTtkb2N1bWVudC5fX0NFX2hhc1JlZ2lzdHJ5PSEwO3ZhciBjdXN0b21FbGVtZW50cz1uZXcgTihvZSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdywiY3VzdG9tRWxlbWVudHMiLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx2YWx1ZTpjdXN0b21FbGVtZW50c30pfTtmdW5jdGlvbiB2ZSgpe3RoaXMuZW5kPXRoaXMuc3RhcnQ9MDt0aGlzLnJ1bGVzPXRoaXMucGFyZW50PXRoaXMucHJldmlvdXM9bnVsbDt0aGlzLmNzc1RleHQ9dGhpcy5wYXJzZWRDc3NUZXh0PSIiO3RoaXMuYXRSdWxlPSExO3RoaXMudHlwZT0wO3RoaXMucGFyc2VkU2VsZWN0b3I9dGhpcy5zZWxlY3Rvcj10aGlzLmtleWZyYW1lc05hbWU9IiJ9CmZ1bmN0aW9uIHdlKGEpe2E9YS5yZXBsYWNlKHhlLCIiKS5yZXBsYWNlKHllLCIiKTt2YXIgYj16ZSxjPWEsZD1uZXcgdmU7ZC5zdGFydD0wO2QuZW5kPWMubGVuZ3RoO2Zvcih2YXIgZT1kLGY9MCxnPWMubGVuZ3RoO2Y8ZztmKyspaWYoInsiPT09Y1tmXSl7ZS5ydWxlc3x8KGUucnVsZXM9W10pO3ZhciBoPWUsaz1oLnJ1bGVzW2gucnVsZXMubGVuZ3RoLTFdfHxudWxsO2U9bmV3IHZlO2Uuc3RhcnQ9ZisxO2UucGFyZW50PWg7ZS5wcmV2aW91cz1rO2gucnVsZXMucHVzaChlKX1lbHNlIn0iPT09Y1tmXSYmKGUuZW5kPWYrMSxlPWUucGFyZW50fHxkKTtyZXR1cm4gYihkLGEpfQpmdW5jdGlvbiB6ZShhLGIpe3ZhciBjPWIuc3Vic3RyaW5nKGEuc3RhcnQsYS5lbmQtMSk7YS5wYXJzZWRDc3NUZXh0PWEuY3NzVGV4dD1jLnRyaW0oKTthLnBhcmVudCYmKGM9Yi5zdWJzdHJpbmcoYS5wcmV2aW91cz9hLnByZXZpb3VzLmVuZDphLnBhcmVudC5zdGFydCxhLnN0YXJ0LTEpLGM9QWUoYyksYz1jLnJlcGxhY2UoQmUsIiAiKSxjPWMuc3Vic3RyaW5nKGMubGFzdEluZGV4T2YoIjsiKSsxKSxjPWEucGFyc2VkU2VsZWN0b3I9YS5zZWxlY3Rvcj1jLnRyaW0oKSxhLmF0UnVsZT0wPT09Yy5pbmRleE9mKCJAIiksYS5hdFJ1bGU/MD09PWMuaW5kZXhPZigiQG1lZGlhIik/YS50eXBlPUNlOmMubWF0Y2goRGUpJiYoYS50eXBlPUVlLGEua2V5ZnJhbWVzTmFtZT1hLnNlbGVjdG9yLnNwbGl0KEJlKS5wb3AoKSk6YS50eXBlPTA9PT1jLmluZGV4T2YoIi0tIik/RmU6R2UpO2lmKGM9YS5ydWxlcylmb3IodmFyIGQ9MCxlPWMubGVuZ3RoLGY9dm9pZCAwO2Q8ZSYmKGY9Y1tkXSk7ZCsrKXplKGYsCmIpO3JldHVybiBhfWZ1bmN0aW9uIEFlKGEpe3JldHVybiBhLnJlcGxhY2UoL1xcKFswLTlhLWZdezEsNn0pXHMvZ2ksZnVuY3Rpb24oYSxjKXthPWM7Zm9yKGM9Ni1hLmxlbmd0aDtjLS07KWE9IjAiK2E7cmV0dXJuIlxcIithfSl9CmZ1bmN0aW9uIEhlKGEsYixjKXtjPXZvaWQgMD09PWM/IiI6Yzt2YXIgZD0iIjtpZihhLmNzc1RleHR8fGEucnVsZXMpe3ZhciBlPWEucnVsZXMsZjtpZihmPWUpZj1lWzBdLGY9IShmJiZmLnNlbGVjdG9yJiYwPT09Zi5zZWxlY3Rvci5pbmRleE9mKCItLSIpKTtpZihmKXtmPTA7Zm9yKHZhciBnPWUubGVuZ3RoLGg9dm9pZCAwO2Y8ZyYmKGg9ZVtmXSk7ZisrKWQ9SGUoaCxiLGQpfWVsc2UgYj9iPWEuY3NzVGV4dDooYj1hLmNzc1RleHQsYj1iLnJlcGxhY2UoSWUsIiIpLnJlcGxhY2UoSmUsIiIpLGI9Yi5yZXBsYWNlKEtlLCIiKS5yZXBsYWNlKExlLCIiKSksKGQ9Yi50cmltKCkpJiYoZD0iICAiK2QrIlxuIil9ZCYmKGEuc2VsZWN0b3ImJihjKz1hLnNlbGVjdG9yKyIge1xuIiksYys9ZCxhLnNlbGVjdG9yJiYoYys9In1cblxuIikpO3JldHVybiBjfQp2YXIgR2U9MSxFZT03LENlPTQsRmU9MUUzLHhlPS9cL1wqW14qXSpcKisoW14vKl1bXipdKlwqKykqXC8vZ2ltLHllPS9AaW1wb3J0W147XSo7L2dpbSxJZT0vKD86XlteO1wtXHN9XSspPy0tW147e31dKj86W157fTtdKj8oPzpbO1xuXXwkKS9naW0sSmU9Lyg/Ol5bXjtcLVxzfV0rKT8tLVteO3t9XSo/Oltee307XSo/e1tefV0qP30oPzpbO1xuXXwkKT8vZ2ltLEtlPS9AYXBwbHlccypcKD9bXik7XSpcKT9ccyooPzpbO1xuXXwkKT8vZ2ltLExlPS9bXjs6XSo/OlteO10qP3ZhclwoW147XSpcKSg/Ols7XG5dfCQpPy9naW0sRGU9L15AW15cc10qa2V5ZnJhbWVzLyxCZT0vXHMrL2c7dmFyIE89ISh3aW5kb3cuU2hhZHlET00mJndpbmRvdy5TaGFkeURPTS5pblVzZSksTWU7ZnVuY3Rpb24gTmUoYSl7TWU9YSYmYS5zaGltY3NzcHJvcGVydGllcz8hMTpPfHwhKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0FwcGxlV2ViS2l0XC82MDF8RWRnZVwvMTUvKXx8IXdpbmRvdy5DU1N8fCFDU1Muc3VwcG9ydHN8fCFDU1Muc3VwcG9ydHMoImJveC1zaGFkb3ciLCIwIDAgMCB2YXIoLS1mb28pIikpfXZhciBPZTt3aW5kb3cuU2hhZHlDU1MmJnZvaWQgMCE9PXdpbmRvdy5TaGFkeUNTUy5jc3NCdWlsZCYmKE9lPXdpbmRvdy5TaGFkeUNTUy5jc3NCdWlsZCk7dmFyIFBlPSEoIXdpbmRvdy5TaGFkeUNTU3x8IXdpbmRvdy5TaGFkeUNTUy5kaXNhYmxlUnVudGltZSk7CndpbmRvdy5TaGFkeUNTUyYmdm9pZCAwIT09d2luZG93LlNoYWR5Q1NTLm5hdGl2ZUNzcz9NZT13aW5kb3cuU2hhZHlDU1MubmF0aXZlQ3NzOndpbmRvdy5TaGFkeUNTUz8oTmUod2luZG93LlNoYWR5Q1NTKSx3aW5kb3cuU2hhZHlDU1M9dm9pZCAwKTpOZSh3aW5kb3cuV2ViQ29tcG9uZW50cyYmd2luZG93LldlYkNvbXBvbmVudHMuZmxhZ3MpO3ZhciBRPU1lLFFlPU9lO3ZhciBSZT0vKD86XnxbO1xze11ccyopKC0tW1x3LV0qPylccyo6XHMqKD86KCg/OicoPzpcXCd8LikqPyd8Iig/OlxcInwuKSo/InxcKFteKV0qP1wpfFtefTt7XSkrKXxceyhbXn1dKilcfSg/Oig/PVs7XHN9XSl8JCkpL2dpLFNlPS8oPzpefFxXKylAYXBwbHlccypcKD8oW14pO1xuXSopXCk/L2dpLFRlPS8oLS1bXHctXSspXHMqKFs6LDspXXwkKS9naSxVZT0vKGFuaW1hdGlvblxzKjopfChhbmltYXRpb24tbmFtZVxzKjopLywkZT0vQG1lZGlhXHMoLiopLyxhZj0vXHtbXn1dKlx9L2c7dmFyIGJmPW5ldyBTZXQ7ZnVuY3Rpb24gY2YoYSxiKXtpZighYSlyZXR1cm4iIjsic3RyaW5nIj09PXR5cGVvZiBhJiYoYT13ZShhKSk7YiYmZGYoYSxiKTtyZXR1cm4gSGUoYSxRKX1mdW5jdGlvbiBlZihhKXshYS5fX2Nzc1J1bGVzJiZhLnRleHRDb250ZW50JiYoYS5fX2Nzc1J1bGVzPXdlKGEudGV4dENvbnRlbnQpKTtyZXR1cm4gYS5fX2Nzc1J1bGVzfHxudWxsfWZ1bmN0aW9uIGZmKGEpe3JldHVybiEhYS5wYXJlbnQmJmEucGFyZW50LnR5cGU9PT1FZX1mdW5jdGlvbiBkZihhLGIsYyxkKXtpZihhKXt2YXIgZT0hMSxmPWEudHlwZTtpZihkJiZmPT09Q2Upe3ZhciBnPWEuc2VsZWN0b3IubWF0Y2goJGUpO2cmJih3aW5kb3cubWF0Y2hNZWRpYShnWzFdKS5tYXRjaGVzfHwoZT0hMCkpfWY9PT1HZT9iKGEpOmMmJmY9PT1FZT9jKGEpOmY9PT1GZSYmKGU9ITApO2lmKChhPWEucnVsZXMpJiYhZSlmb3IoZT0wLGY9YS5sZW5ndGgsZz12b2lkIDA7ZTxmJiYoZz1hW2VdKTtlKyspZGYoZyxiLGMsZCl9fQpmdW5jdGlvbiBnZihhLGIsYyxkKXt2YXIgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO2ImJmUuc2V0QXR0cmlidXRlKCJzY29wZSIsYik7ZS50ZXh0Q29udGVudD1hO2hmKGUsYyxkKTtyZXR1cm4gZX12YXIgamY9bnVsbDtmdW5jdGlvbiBrZihhKXthPWRvY3VtZW50LmNyZWF0ZUNvbW1lbnQoIiBTaGFkeSBET00gc3R5bGVzIGZvciAiK2ErIiAiKTt2YXIgYj1kb2N1bWVudC5oZWFkO2IuaW5zZXJ0QmVmb3JlKGEsKGpmP2pmLm5leHRTaWJsaW5nOm51bGwpfHxiLmZpcnN0Q2hpbGQpO3JldHVybiBqZj1hfWZ1bmN0aW9uIGhmKGEsYixjKXtiPWJ8fGRvY3VtZW50LmhlYWQ7Yi5pbnNlcnRCZWZvcmUoYSxjJiZjLm5leHRTaWJsaW5nfHxiLmZpcnN0Q2hpbGQpO2pmP2EuY29tcGFyZURvY3VtZW50UG9zaXRpb24oamYpPT09Tm9kZS5ET0NVTUVOVF9QT1NJVElPTl9QUkVDRURJTkcmJihqZj1hKTpqZj1hfQpmdW5jdGlvbiBsZihhLGIpe2Zvcih2YXIgYz0wLGQ9YS5sZW5ndGg7YjxkO2IrKylpZigiKCI9PT1hW2JdKWMrKztlbHNlIGlmKCIpIj09PWFbYl0mJjA9PT0tLWMpcmV0dXJuIGI7cmV0dXJuLTF9ZnVuY3Rpb24gbWYoYSxiKXt2YXIgYz1hLmluZGV4T2YoInZhcigiKTtpZigtMT09PWMpcmV0dXJuIGIoYSwiIiwiIiwiIik7dmFyIGQ9bGYoYSxjKzMpLGU9YS5zdWJzdHJpbmcoYys0LGQpO2M9YS5zdWJzdHJpbmcoMCxjKTthPW1mKGEuc3Vic3RyaW5nKGQrMSksYik7ZD1lLmluZGV4T2YoIiwiKTtyZXR1cm4tMT09PWQ/YihjLGUudHJpbSgpLCIiLGEpOmIoYyxlLnN1YnN0cmluZygwLGQpLnRyaW0oKSxlLnN1YnN0cmluZyhkKzEpLnRyaW0oKSxhKX1mdW5jdGlvbiBuZihhLGIpe08/YS5zZXRBdHRyaWJ1dGUoImNsYXNzIixiKTp3aW5kb3cuU2hhZHlET00ubmF0aXZlTWV0aG9kcy5zZXRBdHRyaWJ1dGUuY2FsbChhLCJjbGFzcyIsYil9CnZhciBvZj13aW5kb3cuU2hhZHlET00mJndpbmRvdy5TaGFkeURPTS53cmFwfHxmdW5jdGlvbihhKXtyZXR1cm4gYX07ZnVuY3Rpb24gcGYoYSl7dmFyIGI9YS5sb2NhbE5hbWUsYz0iIjtiPy0xPGIuaW5kZXhPZigiLSIpfHwoYz1iLGI9YS5nZXRBdHRyaWJ1dGUmJmEuZ2V0QXR0cmlidXRlKCJpcyIpfHwiIik6KGI9YS5pcyxjPWEuZXh0ZW5kcyk7cmV0dXJue2lzOmIsTTpjfX1mdW5jdGlvbiBxZihhKXtmb3IodmFyIGI9W10sYz0iIixkPTA7MDw9ZCYmZDxhLmxlbmd0aDtkKyspaWYoIigiPT09YVtkXSl7dmFyIGU9bGYoYSxkKTtjKz1hLnNsaWNlKGQsZSsxKTtkPWV9ZWxzZSIsIj09PWFbZF0/KGIucHVzaChjKSxjPSIiKTpjKz1hW2RdO2MmJmIucHVzaChjKTtyZXR1cm4gYn0KZnVuY3Rpb24gcmYoYSl7aWYodm9pZCAwIT09UWUpcmV0dXJuIFFlO2lmKHZvaWQgMD09PWEuX19jc3NCdWlsZCl7dmFyIGI9YS5nZXRBdHRyaWJ1dGUoImNzcy1idWlsZCIpO2lmKGIpYS5fX2Nzc0J1aWxkPWI7ZWxzZXthOntiPSJ0ZW1wbGF0ZSI9PT1hLmxvY2FsTmFtZT9hLmNvbnRlbnQuZmlyc3RDaGlsZDphLmZpcnN0Q2hpbGQ7aWYoYiBpbnN0YW5jZW9mIENvbW1lbnQmJihiPWIudGV4dENvbnRlbnQudHJpbSgpLnNwbGl0KCI6IiksImNzcy1idWlsZCI9PT1iWzBdKSl7Yj1iWzFdO2JyZWFrIGF9Yj0iIn1pZigiIiE9PWIpe3ZhciBjPSJ0ZW1wbGF0ZSI9PT1hLmxvY2FsTmFtZT9hLmNvbnRlbnQuZmlyc3RDaGlsZDphLmZpcnN0Q2hpbGQ7Yy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGMpfWEuX19jc3NCdWlsZD1ifX1yZXR1cm4gYS5fX2Nzc0J1aWxkfHwiIn0KZnVuY3Rpb24gc2YoYSl7YT12b2lkIDA9PT1hPyIiOmE7cmV0dXJuIiIhPT1hJiZRP08/InNoYWRvdyI9PT1hOiJzaGFkeSI9PT1hOiExfTtmdW5jdGlvbiB0Zigpe31mdW5jdGlvbiB1ZihhLGIpe3ZmKFIsYSxmdW5jdGlvbihhKXt3ZihhLGJ8fCIiKX0pfWZ1bmN0aW9uIHZmKGEsYixjKXtiLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUmJmMoYik7dmFyIGQ7InRlbXBsYXRlIj09PWIubG9jYWxOYW1lP2Q9KGIuY29udGVudHx8Yi5fY29udGVudHx8YikuY2hpbGROb2RlczpkPWIuY2hpbGRyZW58fGIuY2hpbGROb2RlcztpZihkKWZvcihiPTA7YjxkLmxlbmd0aDtiKyspdmYoYSxkW2JdLGMpfQpmdW5jdGlvbiB3ZihhLGIsYyl7aWYoYilpZihhLmNsYXNzTGlzdCljPyhhLmNsYXNzTGlzdC5yZW1vdmUoInN0eWxlLXNjb3BlIiksYS5jbGFzc0xpc3QucmVtb3ZlKGIpKTooYS5jbGFzc0xpc3QuYWRkKCJzdHlsZS1zY29wZSIpLGEuY2xhc3NMaXN0LmFkZChiKSk7ZWxzZSBpZihhLmdldEF0dHJpYnV0ZSl7dmFyIGQ9YS5nZXRBdHRyaWJ1dGUoImNsYXNzIik7Yz9kJiYoYj1kLnJlcGxhY2UoInN0eWxlLXNjb3BlIiwiIikucmVwbGFjZShiLCIiKSxuZihhLGIpKTpuZihhLChkP2QrIiAiOiIiKSsic3R5bGUtc2NvcGUgIitiKX19ZnVuY3Rpb24geGYoYSxiLGMpe3ZmKFIsYSxmdW5jdGlvbihhKXt3ZihhLGIsITApO3dmKGEsYyl9KX1mdW5jdGlvbiB5ZihhLGIpe3ZmKFIsYSxmdW5jdGlvbihhKXt3ZihhLGJ8fCIiLCEwKX0pfQpmdW5jdGlvbiB6ZihhLGIsYyxkLGUpe3ZhciBmPVI7ZT12b2lkIDA9PT1lPyIiOmU7IiI9PT1lJiYoT3x8InNoYWR5Ij09PSh2b2lkIDA9PT1kPyIiOmQpP2U9Y2YoYixjKTooYT1wZihhKSxlPUFmKGYsYixhLmlzLGEuTSxjKSsiXG5cbiIpKTtyZXR1cm4gZS50cmltKCl9ZnVuY3Rpb24gQWYoYSxiLGMsZCxlKXt2YXIgZj1CZihjLGQpO2M9Yz8iLiIrYzoiIjtyZXR1cm4gY2YoYixmdW5jdGlvbihiKXtiLmN8fChiLnNlbGVjdG9yPWIuaj1DZihhLGIsYS5iLGMsZiksYi5jPSEwKTtlJiZlKGIsYyxmKX0pfWZ1bmN0aW9uIEJmKGEsYil7cmV0dXJuIGI/Iltpcz0iK2ErIl0iOmF9CmZ1bmN0aW9uIENmKGEsYixjLGQsZSl7dmFyIGY9cWYoYi5zZWxlY3Rvcik7aWYoIWZmKGIpKXtiPTA7Zm9yKHZhciBnPWYubGVuZ3RoLGg9dm9pZCAwO2I8ZyYmKGg9ZltiXSk7YisrKWZbYl09Yy5jYWxsKGEsaCxkLGUpfXJldHVybiBmLmZpbHRlcihmdW5jdGlvbihhKXtyZXR1cm4hIWF9KS5qb2luKCIsIil9ZnVuY3Rpb24gRGYoYSl7cmV0dXJuIGEucmVwbGFjZShFZixmdW5jdGlvbihhLGMsZCl7LTE8ZC5pbmRleE9mKCIrIik/ZD1kLnJlcGxhY2UoL1wrL2csIl9fXyIpOi0xPGQuaW5kZXhPZigiX19fIikmJihkPWQucmVwbGFjZSgvX19fL2csIisiKSk7cmV0dXJuIjoiK2MrIigiK2QrIikifSl9CmZ1bmN0aW9uIEZmKGEpe2Zvcih2YXIgYj1bXSxjO2M9YS5tYXRjaChHZik7KXt2YXIgZD1jLmluZGV4LGU9bGYoYSxkKTtpZigtMT09PWUpdGhyb3cgRXJyb3IoYy5pbnB1dCsiIHNlbGVjdG9yIG1pc3NpbmcgJyknIik7Yz1hLnNsaWNlKGQsZSsxKTthPWEucmVwbGFjZShjLCJcdWUwMDAiKTtiLnB1c2goYyl9cmV0dXJue2hhOmEsbWF0Y2hlczpifX1mdW5jdGlvbiBIZihhLGIpe3ZhciBjPWEuc3BsaXQoIlx1ZTAwMCIpO3JldHVybiBiLnJlZHVjZShmdW5jdGlvbihhLGIsZil7cmV0dXJuIGErYitjW2YrMV19LGNbMF0pfQp0Zi5wcm90b3R5cGUuYj1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9ITE7YT1hLnRyaW0oKTt2YXIgZT1FZi50ZXN0KGEpO2UmJihhPWEucmVwbGFjZShFZixmdW5jdGlvbihhLGIsYyl7cmV0dXJuIjoiK2IrIigiK2MucmVwbGFjZSgvXHMvZywiIikrIikifSksYT1EZihhKSk7dmFyIGY9R2YudGVzdChhKTtpZihmKXt2YXIgZz1GZihhKTthPWcuaGE7Zz1nLm1hdGNoZXN9YT1hLnJlcGxhY2UoSWYsIjpob3N0ICQxIik7YT1hLnJlcGxhY2UoSmYsZnVuY3Rpb24oYSxlLGYpe2R8fChhPUtmKGYsZSxiLGMpLGQ9ZHx8YS5zdG9wLGU9YS5DYSxmPWEudmFsdWUpO3JldHVybiBlK2Z9KTtmJiYoYT1IZihhLGcpKTtlJiYoYT1EZihhKSk7cmV0dXJuIGF9OwpmdW5jdGlvbiBLZihhLGIsYyxkKXt2YXIgZT1hLmluZGV4T2YoIjo6c2xvdHRlZCIpOzA8PWEuaW5kZXhPZigiOmhvc3QiKT9hPUxmKGEsZCk6MCE9PWUmJihhPWM/TWYoYSxjKTphKTtjPSExOzA8PWUmJihiPSIiLGM9ITApO2lmKGMpe3ZhciBmPSEwO2MmJihhPWEucmVwbGFjZShOZixmdW5jdGlvbihhLGIpe3JldHVybiIgPiAiK2J9KSl9YT1hLnJlcGxhY2UoT2YsZnVuY3Rpb24oYSxiLGMpe3JldHVybidbZGlyPSInK2MrJyJdICcrYisiLCAiK2IrJ1tkaXI9IicrYysnIl0nfSk7cmV0dXJue3ZhbHVlOmEsQ2E6YixzdG9wOmZ9fQpmdW5jdGlvbiBNZihhLGIpe2E9YS5zcGxpdCgvKFxbLis/XF0pLyk7Zm9yKHZhciBjPVtdLGQ9MDtkPGEubGVuZ3RoO2QrKylpZigxPT09ZCUyKWMucHVzaChhW2RdKTtlbHNle3ZhciBlPWFbZF07aWYoIiIhPT1lfHxkIT09YS5sZW5ndGgtMSllPWUuc3BsaXQoIjoiKSxlWzBdKz1iLGMucHVzaChlLmpvaW4oIjoiKSl9cmV0dXJuIGMuam9pbigiIil9ZnVuY3Rpb24gTGYoYSxiKXt2YXIgYz1hLm1hdGNoKFBmKTtyZXR1cm4oYz1jJiZjWzJdLnRyaW0oKXx8IiIpP2NbMF0ubWF0Y2goUWYpP2EucmVwbGFjZShQZixmdW5jdGlvbihhLGMsZil7cmV0dXJuIGIrZn0pOmMuc3BsaXQoUWYpWzBdPT09Yj9jOiJzaG91bGRfbm90X21hdGNoIjphLnJlcGxhY2UoIjpob3N0IixiKX1mdW5jdGlvbiBSZihhKXsiOnJvb3QiPT09YS5zZWxlY3RvciYmKGEuc2VsZWN0b3I9Imh0bWwiKX0KdGYucHJvdG90eXBlLmM9ZnVuY3Rpb24oYSl7cmV0dXJuIGEubWF0Y2goIjpob3N0Iik/IiI6YS5tYXRjaCgiOjpzbG90dGVkIik/dGhpcy5iKGEsIjpub3QoLnN0eWxlLXNjb3BlKSIpOk1mKGEudHJpbSgpLCI6bm90KC5zdHlsZS1zY29wZSkiKX07cC5PYmplY3QuZGVmaW5lUHJvcGVydGllcyh0Zi5wcm90b3R5cGUse2E6e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiJzdHlsZS1zY29wZSJ9fX0pOwp2YXIgRWY9LzoobnRoWy1cd10rKVwoKFteKV0rKVwpLyxKZj0vKF58W1xzPit+XSspKCg/OlxbLis/XF18W15ccz4rfj1bXSkrKS9nLFFmPS9bWy46IypdLyxJZj0vXig6OnNsb3R0ZWQpLyxQZj0vKDpob3N0KSg/OlwoKCg/OlwoW14pKF0qXCl8W14pKF0qKSs/KVwpKS8sTmY9Lyg/Ojo6c2xvdHRlZCkoPzpcKCgoPzpcKFteKShdKlwpfFteKShdKikrPylcKSkvLE9mPS8oLiopOmRpclwoKD86KGx0cnxydGwpKVwpLyxHZj0vOig/Om1hdGNoZXN8YW55fC0oPzp3ZWJraXR8bW96KS1hbnkpLyxSPW5ldyB0ZjtmdW5jdGlvbiBTZihhLGIsYyxkLGUpe3RoaXMuQT1hfHxudWxsO3RoaXMuYj1ifHxudWxsO3RoaXMuZmE9Y3x8W107dGhpcy5vPW51bGw7dGhpcy5jc3NCdWlsZD1lfHwiIjt0aGlzLk09ZHx8IiI7dGhpcy5hPXRoaXMucz10aGlzLnc9bnVsbH1mdW5jdGlvbiBUKGEpe3JldHVybiBhP2EuX19zdHlsZUluZm86bnVsbH1mdW5jdGlvbiBUZihhLGIpe3JldHVybiBhLl9fc3R5bGVJbmZvPWJ9U2YucHJvdG90eXBlLmM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5BfTtTZi5wcm90b3R5cGUuX2dldFN0eWxlUnVsZXM9U2YucHJvdG90eXBlLmM7ZnVuY3Rpb24gVWYoYSl7dmFyIGI9dGhpcy5tYXRjaGVzfHx0aGlzLm1hdGNoZXNTZWxlY3Rvcnx8dGhpcy5tb3pNYXRjaGVzU2VsZWN0b3J8fHRoaXMubXNNYXRjaGVzU2VsZWN0b3J8fHRoaXMub01hdGNoZXNTZWxlY3Rvcnx8dGhpcy53ZWJraXRNYXRjaGVzU2VsZWN0b3I7cmV0dXJuIGImJmIuY2FsbCh0aGlzLGEpfXZhciBWZj1uYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKCJUcmlkZW50Iik7ZnVuY3Rpb24gV2YoKXt9ZnVuY3Rpb24gWGYoYSl7dmFyIGI9e30sYz1bXSxkPTA7ZGYoYSxmdW5jdGlvbihhKXtZZihhKTthLmluZGV4PWQrKzthPWEuaS5jc3NUZXh0O2Zvcih2YXIgYztjPVRlLmV4ZWMoYSk7KXt2YXIgZT1jWzFdOyI6IiE9PWNbMl0mJihiW2VdPSEwKX19LGZ1bmN0aW9uKGEpe2MucHVzaChhKX0pO2EuYj1jO2E9W107Zm9yKHZhciBlIGluIGIpYS5wdXNoKGUpO3JldHVybiBhfQpmdW5jdGlvbiBZZihhKXtpZighYS5pKXt2YXIgYj17fSxjPXt9O1pmKGEsYykmJihiLnY9YyxhLnJ1bGVzPW51bGwpO2IuY3NzVGV4dD1hLnBhcnNlZENzc1RleHQucmVwbGFjZShhZiwiIikucmVwbGFjZShSZSwiIik7YS5pPWJ9fWZ1bmN0aW9uIFpmKGEsYil7dmFyIGM9YS5pO2lmKGMpe2lmKGMudilyZXR1cm4gT2JqZWN0LmFzc2lnbihiLGMudiksITB9ZWxzZXtjPWEucGFyc2VkQ3NzVGV4dDtmb3IodmFyIGQ7YT1SZS5leGVjKGMpOyl7ZD0oYVsyXXx8YVszXSkudHJpbSgpO2lmKCJpbmhlcml0IiE9PWR8fCJ1bnNldCIhPT1kKWJbYVsxXS50cmltKCldPWQ7ZD0hMH1yZXR1cm4gZH19CmZ1bmN0aW9uICRmKGEsYixjKXtiJiYoYj0wPD1iLmluZGV4T2YoIjsiKT9hZyhhLGIsYyk6bWYoYixmdW5jdGlvbihiLGUsZixnKXtpZighZSlyZXR1cm4gYitnOyhlPSRmKGEsY1tlXSxjKSkmJiJpbml0aWFsIiE9PWU/ImFwcGx5LXNoaW0taW5oZXJpdCI9PT1lJiYoZT0iaW5oZXJpdCIpOmU9JGYoYSxjW2ZdfHxmLGMpfHxmO3JldHVybiBiKyhlfHwiIikrZ30pKTtyZXR1cm4gYiYmYi50cmltKCl8fCIifQpmdW5jdGlvbiBhZyhhLGIsYyl7Yj1iLnNwbGl0KCI7Iik7Zm9yKHZhciBkPTAsZSxmO2Q8Yi5sZW5ndGg7ZCsrKWlmKGU9YltkXSl7U2UubGFzdEluZGV4PTA7aWYoZj1TZS5leGVjKGUpKWU9JGYoYSxjW2ZbMV1dLGMpO2Vsc2UgaWYoZj1lLmluZGV4T2YoIjoiKSwtMSE9PWYpe3ZhciBnPWUuc3Vic3RyaW5nKGYpO2c9Zy50cmltKCk7Zz0kZihhLGcsYyl8fGc7ZT1lLnN1YnN0cmluZygwLGYpK2d9YltkXT1lJiZlLmxhc3RJbmRleE9mKCI7Iik9PT1lLmxlbmd0aC0xP2Uuc2xpY2UoMCwtMSk6ZXx8IiJ9cmV0dXJuIGIuam9pbigiOyIpfQpmdW5jdGlvbiBiZyhhLGIpe3ZhciBjPXt9LGQ9W107ZGYoYSxmdW5jdGlvbihhKXthLml8fFlmKGEpO3ZhciBlPWEuanx8YS5wYXJzZWRTZWxlY3RvcjtiJiZhLmkudiYmZSYmVWYuY2FsbChiLGUpJiYoWmYoYSxjKSxhPWEuaW5kZXgsZT1wYXJzZUludChhLzMyLDEwKSxkW2VdPShkW2VdfHwwKXwxPDxhJTMyKX0sbnVsbCwhMCk7cmV0dXJue3Y6YyxrZXk6ZH19CmZ1bmN0aW9uIGNnKGEsYixjLGQpe2IuaXx8WWYoYik7aWYoYi5pLnYpe3ZhciBlPXBmKGEpO2E9ZS5pcztlPWUuTTtlPWE/QmYoYSxlKToiaHRtbCI7dmFyIGY9Yi5wYXJzZWRTZWxlY3RvcixnPSI6aG9zdCA+ICoiPT09Znx8Imh0bWwiPT09ZixoPTA9PT1mLmluZGV4T2YoIjpob3N0IikmJiFnOyJzaGFkeSI9PT1jJiYoZz1mPT09ZSsiID4gKi4iK2V8fC0xIT09Zi5pbmRleE9mKCJodG1sIiksaD0hZyYmMD09PWYuaW5kZXhPZihlKSk7aWYoZ3x8aCljPWUsaCYmKGIuanx8KGIuaj1DZihSLGIsUi5iLGE/Ii4iK2E6IiIsZSkpLGM9Yi5qfHxlKSxkKHtoYTpjLElhOmgsWmE6Z30pfX1mdW5jdGlvbiBkZyhhLGIsYyl7dmFyIGQ9e30sZT17fTtkZihiLGZ1bmN0aW9uKGIpe2NnKGEsYixjLGZ1bmN0aW9uKGMpe1VmLmNhbGwoYS5fZWxlbWVudHx8YSxjLmhhKSYmKGMuSWE/WmYoYixkKTpaZihiLGUpKX0pfSxudWxsLCEwKTtyZXR1cm57UmE6ZSxIYTpkfX0KZnVuY3Rpb24gZWcoYSxiLGMsZCl7dmFyIGU9cGYoYiksZj1CZihlLmlzLGUuTSksZz1uZXcgUmVnRXhwKCIoPzpefFteLiNbOl0pIisoYi5leHRlbmRzPyJcXCIrZi5zbGljZSgwLC0xKSsiXFxdIjpmKSsiKCR8Wy46W1xccz4rfl0pIiksaD1UKGIpO2U9aC5BO2g9aC5jc3NCdWlsZDt2YXIgaz1mZyhlLGQpO3JldHVybiB6ZihiLGUsZnVuY3Rpb24oYil7dmFyIGU9IiI7Yi5pfHxZZihiKTtiLmkuY3NzVGV4dCYmKGU9YWcoYSxiLmkuY3NzVGV4dCxjKSk7Yi5jc3NUZXh0PWU7aWYoIU8mJiFmZihiKSYmYi5jc3NUZXh0KXt2YXIgaD1lPWIuY3NzVGV4dDtudWxsPT1iLm5hJiYoYi5uYT1VZS50ZXN0KGUpKTtpZihiLm5hKWlmKG51bGw9PWIuVSl7Yi5VPVtdO2Zvcih2YXIgbCBpbiBrKWg9a1tsXSxoPWgoZSksZSE9PWgmJihlPWgsYi5VLnB1c2gobCkpfWVsc2V7Zm9yKGw9MDtsPGIuVS5sZW5ndGg7KytsKWg9a1tiLlVbbF1dLGU9aChlKTtoPWV9Yi5jc3NUZXh0PWg7Yi5qPWIuanx8CmIuc2VsZWN0b3I7ZT0iLiIrZDtsPXFmKGIuaik7aD0wO2Zvcih2YXIgTT1sLmxlbmd0aCxVPXZvaWQgMDtoPE0mJihVPWxbaF0pO2grKylsW2hdPVUubWF0Y2goZyk/VS5yZXBsYWNlKGYsZSk6ZSsiICIrVTtiLnNlbGVjdG9yPWwuam9pbigiLCIpfX0saCl9ZnVuY3Rpb24gZmcoYSxiKXthPWEuYjt2YXIgYz17fTtpZighTyYmYSlmb3IodmFyIGQ9MCxlPWFbZF07ZDxhLmxlbmd0aDtlPWFbKytkXSl7dmFyIGY9ZSxnPWI7Zi5mPW5ldyBSZWdFeHAoIlxcYiIrZi5rZXlmcmFtZXNOYW1lKyIoPyFcXEJ8LSkiLCJnIik7Zi5hPWYua2V5ZnJhbWVzTmFtZSsiLSIrZztmLmo9Zi5qfHxmLnNlbGVjdG9yO2Yuc2VsZWN0b3I9Zi5qLnJlcGxhY2UoZi5rZXlmcmFtZXNOYW1lLGYuYSk7Y1tlLmtleWZyYW1lc05hbWVdPWdnKGUpfXJldHVybiBjfWZ1bmN0aW9uIGdnKGEpe3JldHVybiBmdW5jdGlvbihiKXtyZXR1cm4gYi5yZXBsYWNlKGEuZixhLmEpfX0KZnVuY3Rpb24gaGcoYSxiKXt2YXIgYz1pZyxkPWVmKGEpO2EudGV4dENvbnRlbnQ9Y2YoZCxmdW5jdGlvbihhKXt2YXIgZD1hLmNzc1RleHQ9YS5wYXJzZWRDc3NUZXh0O2EuaSYmYS5pLmNzc1RleHQmJihkPWQucmVwbGFjZShJZSwiIikucmVwbGFjZShKZSwiIiksYS5jc3NUZXh0PWFnKGMsZCxiKSl9KX1wLk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFdmLnByb3RvdHlwZSx7YTp7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIngtc2NvcGUifX19KTt2YXIgaWc9bmV3IFdmO3ZhciBqZz17fSxrZz13aW5kb3cuY3VzdG9tRWxlbWVudHM7aWYoa2cmJiFPJiYhUGUpe3ZhciBsZz1rZy5kZWZpbmU7a2cuZGVmaW5lPWZ1bmN0aW9uKGEsYixjKXtqZ1thXXx8KGpnW2FdPWtmKGEpKTtsZy5jYWxsKGtnLGEsYixjKX19O2Z1bmN0aW9uIG1nKCl7dGhpcy5jYWNoZT17fX1tZy5wcm90b3R5cGUuc3RvcmU9ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9dGhpcy5jYWNoZVthXXx8W107ZS5wdXNoKHt2OmIsc3R5bGVFbGVtZW50OmMsczpkfSk7MTAwPGUubGVuZ3RoJiZlLnNoaWZ0KCk7dGhpcy5jYWNoZVthXT1lfTtmdW5jdGlvbiBuZygpe312YXIgb2c9bmV3IFJlZ0V4cChSLmErIlxccyooW15cXHNdKikiKTtmdW5jdGlvbiBwZyhhKXtyZXR1cm4oYT0oYS5jbGFzc0xpc3QmJmEuY2xhc3NMaXN0LnZhbHVlP2EuY2xhc3NMaXN0LnZhbHVlOmEuZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIikubWF0Y2gob2cpKT9hWzFdOiIifWZ1bmN0aW9uIHFnKGEpe3ZhciBiPW9mKGEpLmdldFJvb3ROb2RlKCk7cmV0dXJuIGI9PT1hfHxiPT09YS5vd25lckRvY3VtZW50PyIiOihhPWIuaG9zdCk/cGYoYSkuaXM6IiJ9CmZ1bmN0aW9uIHJnKGEpe2Zvcih2YXIgYj0wO2I8YS5sZW5ndGg7YisrKXt2YXIgYz1hW2JdO2lmKGMudGFyZ2V0IT09ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50JiZjLnRhcmdldCE9PWRvY3VtZW50LmhlYWQpZm9yKHZhciBkPTA7ZDxjLmFkZGVkTm9kZXMubGVuZ3RoO2QrKyl7dmFyIGU9Yy5hZGRlZE5vZGVzW2RdO2lmKGUubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERSl7dmFyIGY9ZS5nZXRSb290Tm9kZSgpLGc9cGcoZSk7aWYoZyYmZj09PWUub3duZXJEb2N1bWVudCYmKCJzdHlsZSIhPT1lLmxvY2FsTmFtZSYmInRlbXBsYXRlIiE9PWUubG9jYWxOYW1lfHwiIj09PXJmKGUpKSl5ZihlLGcpO2Vsc2UgaWYoZiBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QpZm9yKGY9cWcoZSksZiE9PWcmJnhmKGUsZyxmKSxlPXdpbmRvdy5TaGFkeURPTS5uYXRpdmVNZXRob2RzLnF1ZXJ5U2VsZWN0b3JBbGwuY2FsbChlLCI6bm90KC4iK1IuYSsiKSIpLGc9MDtnPGUubGVuZ3RoO2crKyl7Zj1lW2ddOwp2YXIgaD1xZyhmKTtoJiZ3ZihmLGgpfX19fX0KaWYoIShPfHx3aW5kb3cuU2hhZHlET00mJndpbmRvdy5TaGFkeURPTS5oYW5kbGVzRHluYW1pY1Njb3BpbmcpKXt2YXIgc2c9bmV3IE11dGF0aW9uT2JzZXJ2ZXIocmcpLHRnPWZ1bmN0aW9uKGEpe3NnLm9ic2VydmUoYSx7Y2hpbGRMaXN0OiEwLHN1YnRyZWU6ITB9KX07aWYod2luZG93LmN1c3RvbUVsZW1lbnRzJiYhd2luZG93LmN1c3RvbUVsZW1lbnRzLnBvbHlmaWxsV3JhcEZsdXNoQ2FsbGJhY2spdGcoZG9jdW1lbnQpO2Vsc2V7dmFyIHVnPWZ1bmN0aW9uKCl7dGcoZG9jdW1lbnQuYm9keSl9O3dpbmRvdy5IVE1MSW1wb3J0cz93aW5kb3cuSFRNTEltcG9ydHMud2hlblJlYWR5KHVnKTpyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24oKXtpZigibG9hZGluZyI9PT1kb2N1bWVudC5yZWFkeVN0YXRlKXt2YXIgYT1mdW5jdGlvbigpe3VnKCk7ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigicmVhZHlzdGF0ZWNoYW5nZSIsYSl9O2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInJlYWR5c3RhdGVjaGFuZ2UiLAphKX1lbHNlIHVnKCl9KX1uZz1mdW5jdGlvbigpe3JnKHNnLnRha2VSZWNvcmRzKCkpfX12YXIgdmc9bmc7dmFyIHdnPXt9O3ZhciB4Zz1Qcm9taXNlLnJlc29sdmUoKTtmdW5jdGlvbiB5ZyhhKXtpZihhPXdnW2FdKWEuX2FwcGx5U2hpbUN1cnJlbnRWZXJzaW9uPWEuX2FwcGx5U2hpbUN1cnJlbnRWZXJzaW9ufHwwLGEuX2FwcGx5U2hpbVZhbGlkYXRpbmdWZXJzaW9uPWEuX2FwcGx5U2hpbVZhbGlkYXRpbmdWZXJzaW9ufHwwLGEuX2FwcGx5U2hpbU5leHRWZXJzaW9uPShhLl9hcHBseVNoaW1OZXh0VmVyc2lvbnx8MCkrMX1mdW5jdGlvbiB6ZyhhKXtyZXR1cm4gYS5fYXBwbHlTaGltQ3VycmVudFZlcnNpb249PT1hLl9hcHBseVNoaW1OZXh0VmVyc2lvbn1mdW5jdGlvbiBBZyhhKXthLl9hcHBseVNoaW1WYWxpZGF0aW5nVmVyc2lvbj1hLl9hcHBseVNoaW1OZXh0VmVyc2lvbjthLl92YWxpZGF0aW5nfHwoYS5fdmFsaWRhdGluZz0hMCx4Zy50aGVuKGZ1bmN0aW9uKCl7YS5fYXBwbHlTaGltQ3VycmVudFZlcnNpb249YS5fYXBwbHlTaGltTmV4dFZlcnNpb247YS5fdmFsaWRhdGluZz0hMX0pKX07dmFyIEJnPXt9LENnPW5ldyBtZztmdW5jdGlvbiBZKCl7dGhpcy5sPXt9O3RoaXMuYz1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7dmFyIGE9bmV3IHZlO2EucnVsZXM9W107dGhpcy5mPVRmKHRoaXMuYyxuZXcgU2YoYSkpO3RoaXMuZz0hMTt0aGlzLmI9dGhpcy5hPW51bGx9bj1ZLnByb3RvdHlwZTtuLmZsdXNoPWZ1bmN0aW9uKCl7dmcoKX07bi5GYT1mdW5jdGlvbihhKXtyZXR1cm4gZWYoYSl9O24uVmE9ZnVuY3Rpb24oYSl7cmV0dXJuIGNmKGEpfTtuLnByZXBhcmVUZW1wbGF0ZT1mdW5jdGlvbihhLGIsYyl7dGhpcy5wcmVwYXJlVGVtcGxhdGVEb20oYSxiKTt0aGlzLnByZXBhcmVUZW1wbGF0ZVN0eWxlcyhhLGIsYyl9OwpuLnByZXBhcmVUZW1wbGF0ZVN0eWxlcz1mdW5jdGlvbihhLGIsYyl7aWYoIWEuX3ByZXBhcmVkJiYhUGUpe098fGpnW2JdfHwoamdbYl09a2YoYikpO2EuX3ByZXBhcmVkPSEwO2EubmFtZT1iO2EuZXh0ZW5kcz1jO3dnW2JdPWE7dmFyIGQ9cmYoYSksZT1zZihkKTtjPXtpczpiLGV4dGVuZHM6Y307Zm9yKHZhciBmPVtdLGc9YS5jb250ZW50LnF1ZXJ5U2VsZWN0b3JBbGwoInN0eWxlIiksaD0wO2g8Zy5sZW5ndGg7aCsrKXt2YXIgaz1nW2hdO2lmKGsuaGFzQXR0cmlidXRlKCJzaGFkeS11bnNjb3BlZCIpKXtpZighTyl7dmFyIGw9ay50ZXh0Q29udGVudDtiZi5oYXMobCl8fChiZi5hZGQobCksbD1rLmNsb25lTm9kZSghMCksZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChsKSk7ay5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGspfX1lbHNlIGYucHVzaChrLnRleHRDb250ZW50KSxrLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoayl9Zj1mLmpvaW4oIiIpLnRyaW0oKSsoQmdbYl18fCIiKTsKRGcodGhpcyk7aWYoIWUpe2lmKGc9IWQpZz1TZS50ZXN0KGYpfHxSZS50ZXN0KGYpLFNlLmxhc3RJbmRleD0wLFJlLmxhc3RJbmRleD0wO2g9d2UoZik7ZyYmUSYmdGhpcy5hJiZ0aGlzLmEudHJhbnNmb3JtUnVsZXMoaCxiKTthLl9zdHlsZUFzdD1ofWc9W107UXx8KGc9WGYoYS5fc3R5bGVBc3QpKTtpZighZy5sZW5ndGh8fFEpaD1PP2EuY29udGVudDpudWxsLGI9amdbYl18fG51bGwsZD16ZihjLGEuX3N0eWxlQXN0LG51bGwsZCxlP2Y6IiIpLGQ9ZC5sZW5ndGg/Z2YoZCxjLmlzLGgsYik6bnVsbCxhLl9zdHlsZT1kO2EuYT1nfX07bi5RYT1mdW5jdGlvbihhLGIpe0JnW2JdPWEuam9pbigiICIpfTtuLnByZXBhcmVUZW1wbGF0ZURvbT1mdW5jdGlvbihhLGIpe2lmKCFQZSl7dmFyIGM9cmYoYSk7T3x8InNoYWR5Ij09PWN8fGEuX2RvbVByZXBhcmVkfHwoYS5fZG9tUHJlcGFyZWQ9ITAsdWYoYS5jb250ZW50LGIpKX19OwpmdW5jdGlvbiBFZyhhKXt2YXIgYj1wZihhKSxjPWIuaXM7Yj1iLk07dmFyIGQ9amdbY118fG51bGwsZT13Z1tjXTtpZihlKXtjPWUuX3N0eWxlQXN0O3ZhciBmPWUuYTtlPXJmKGUpO2I9bmV3IFNmKGMsZCxmLGIsZSk7VGYoYSxiKTtyZXR1cm4gYn19ZnVuY3Rpb24gRmcoYSl7IWEuYiYmd2luZG93LlNoYWR5Q1NTJiZ3aW5kb3cuU2hhZHlDU1MuQ3VzdG9tU3R5bGVJbnRlcmZhY2UmJihhLmI9d2luZG93LlNoYWR5Q1NTLkN1c3RvbVN0eWxlSW50ZXJmYWNlLGEuYi50cmFuc2Zvcm1DYWxsYmFjaz1mdW5jdGlvbihiKXthLnJhKGIpfSxhLmIudmFsaWRhdGVDYWxsYmFjaz1mdW5jdGlvbigpe3JlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbigpeyhhLmIuZW5xdWV1ZWR8fGEuZykmJmEuZmx1c2hDdXN0b21TdHlsZXMoKX0pfSl9CmZ1bmN0aW9uIERnKGEpeyFhLmEmJndpbmRvdy5TaGFkeUNTUyYmd2luZG93LlNoYWR5Q1NTLkFwcGx5U2hpbSYmKGEuYT13aW5kb3cuU2hhZHlDU1MuQXBwbHlTaGltLGEuYS5pbnZhbGlkQ2FsbGJhY2s9eWcpO0ZnKGEpfQpuLmZsdXNoQ3VzdG9tU3R5bGVzPWZ1bmN0aW9uKCl7aWYoIVBlJiYoRGcodGhpcyksdGhpcy5iKSl7dmFyIGE9dGhpcy5iLnByb2Nlc3NTdHlsZXMoKTtpZih0aGlzLmIuZW5xdWV1ZWQmJiFzZih0aGlzLmYuY3NzQnVpbGQpKXtpZihRKXtpZighdGhpcy5mLmNzc0J1aWxkKWZvcih2YXIgYj0wO2I8YS5sZW5ndGg7YisrKXt2YXIgYz10aGlzLmIuZ2V0U3R5bGVGb3JDdXN0b21TdHlsZShhW2JdKTtpZihjJiZRJiZ0aGlzLmEpe3ZhciBkPWVmKGMpO0RnKHRoaXMpO3RoaXMuYS50cmFuc2Zvcm1SdWxlcyhkKTtjLnRleHRDb250ZW50PWNmKGQpfX19ZWxzZXtHZyh0aGlzLHRoaXMuYyx0aGlzLmYpO2ZvcihiPTA7YjxhLmxlbmd0aDtiKyspKGM9dGhpcy5iLmdldFN0eWxlRm9yQ3VzdG9tU3R5bGUoYVtiXSkpJiZoZyhjLHRoaXMuZi53KTt0aGlzLmcmJnRoaXMuc3R5bGVEb2N1bWVudCgpfXRoaXMuYi5lbnF1ZXVlZD0hMX19fTsKbi5zdHlsZUVsZW1lbnQ9ZnVuY3Rpb24oYSxiKXtpZihQZSl7aWYoYil7VChhKXx8VGYoYSxuZXcgU2YobnVsbCkpO3ZhciBjPVQoYSk7Yy5vPWMub3x8e307T2JqZWN0LmFzc2lnbihjLm8sYik7SGcodGhpcyxhLGMpfX1lbHNlIGlmKGM9VChhKXx8RWcoYSkpaWYoYSE9PXRoaXMuYyYmKHRoaXMuZz0hMCksYiYmKGMubz1jLm98fHt9LE9iamVjdC5hc3NpZ24oYy5vLGIpKSxRKUhnKHRoaXMsYSxjKTtlbHNlIGlmKHRoaXMuZmx1c2goKSxHZyh0aGlzLGEsYyksYy5mYSYmYy5mYS5sZW5ndGgpe2I9cGYoYSkuaXM7dmFyIGQ7YTp7aWYoZD1DZy5jYWNoZVtiXSlmb3IodmFyIGU9ZC5sZW5ndGgtMTswPD1lO2UtLSl7dmFyIGY9ZFtlXTtiOnt2YXIgZz1jLmZhO2Zvcih2YXIgaD0wO2g8Zy5sZW5ndGg7aCsrKXt2YXIgaz1nW2hdO2lmKGYudltrXSE9PWMud1trXSl7Zz0hMTticmVhayBifX1nPSEwfWlmKGcpe2Q9ZjticmVhayBhfX1kPXZvaWQgMH1nPWQ/ZC5zdHlsZUVsZW1lbnQ6bnVsbDsKZT1jLnM7KGY9ZCYmZC5zKXx8KGY9dGhpcy5sW2JdPSh0aGlzLmxbYl18fDApKzEsZj1iKyItIitmKTtjLnM9ZjtmPWMucztoPWlnO2g9Zz9nLnRleHRDb250ZW50fHwiIjplZyhoLGEsYy53LGYpO2s9VChhKTt2YXIgbD1rLmE7bCYmIU8mJmwhPT1nJiYobC5fdXNlQ291bnQtLSwwPj1sLl91c2VDb3VudCYmbC5wYXJlbnROb2RlJiZsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobCkpO08/ay5hPyhrLmEudGV4dENvbnRlbnQ9aCxnPWsuYSk6aCYmKGc9Z2YoaCxmLGEuc2hhZG93Um9vdCxrLmIpKTpnP2cucGFyZW50Tm9kZXx8KFZmJiYtMTxoLmluZGV4T2YoIkBtZWRpYSIpJiYoZy50ZXh0Q29udGVudD1oKSxoZihnLG51bGwsay5iKSk6aCYmKGc9Z2YoaCxmLG51bGwsay5iKSk7ZyYmKGcuX3VzZUNvdW50PWcuX3VzZUNvdW50fHwwLGsuYSE9ZyYmZy5fdXNlQ291bnQrKyxrLmE9Zyk7Zj1nO098fChnPWMucyxrPWg9YS5nZXRBdHRyaWJ1dGUoImNsYXNzIil8fCIiLGUmJihrPWgucmVwbGFjZShuZXcgUmVnRXhwKCJcXHMqeC1zY29wZVxccyoiKwplKyJcXHMqIiwiZyIpLCIgIikpLGsrPShrPyIgIjoiIikrIngtc2NvcGUgIitnLGghPT1rJiZuZihhLGspKTtkfHxDZy5zdG9yZShiLGMudyxmLGMucyl9fTsKZnVuY3Rpb24gSGcoYSxiLGMpe3ZhciBkPXBmKGIpLmlzO2lmKGMubyl7dmFyIGU9Yy5vLGY7Zm9yKGYgaW4gZSludWxsPT09Zj9iLnN0eWxlLnJlbW92ZVByb3BlcnR5KGYpOmIuc3R5bGUuc2V0UHJvcGVydHkoZixlW2ZdKX1lPXdnW2RdO2lmKCEoIWUmJmIhPT1hLmN8fGUmJiIiIT09cmYoZSkpJiZlJiZlLl9zdHlsZSYmIXpnKGUpKXtpZih6ZyhlKXx8ZS5fYXBwbHlTaGltVmFsaWRhdGluZ1ZlcnNpb24hPT1lLl9hcHBseVNoaW1OZXh0VmVyc2lvbilEZyhhKSxhLmEmJmEuYS50cmFuc2Zvcm1SdWxlcyhlLl9zdHlsZUFzdCxkKSxlLl9zdHlsZS50ZXh0Q29udGVudD16ZihiLGMuQSksQWcoZSk7TyYmKGE9Yi5zaGFkb3dSb290KSYmKGE9YS5xdWVyeVNlbGVjdG9yKCJzdHlsZSIpKSYmKGEudGV4dENvbnRlbnQ9emYoYixjLkEpKTtjLkE9ZS5fc3R5bGVBc3R9fQpmdW5jdGlvbiBJZyhhLGIpe3JldHVybihiPW9mKGIpLmdldFJvb3ROb2RlKCkuaG9zdCk/VChiKXx8RWcoYik/YjpJZyhhLGIpOmEuY31mdW5jdGlvbiBHZyhhLGIsYyl7dmFyIGQ9SWcoYSxiKSxlPVQoZCksZj1lLnc7ZD09PWEuY3x8Znx8KEdnKGEsZCxlKSxmPWUudyk7YT1PYmplY3QuY3JlYXRlKGZ8fG51bGwpO2Q9ZGcoYixjLkEsYy5jc3NCdWlsZCk7Yj1iZyhlLkEsYikudjtPYmplY3QuYXNzaWduKGEsZC5IYSxiLGQuUmEpO2I9Yy5vO2Zvcih2YXIgZyBpbiBiKWlmKChlPWJbZ10pfHwwPT09ZSlhW2ddPWU7Zz1pZztiPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGEpO2ZvcihlPTA7ZTxiLmxlbmd0aDtlKyspZD1iW2VdLGFbZF09JGYoZyxhW2RdLGEpO2Mudz1hfW4uc3R5bGVEb2N1bWVudD1mdW5jdGlvbihhKXt0aGlzLnN0eWxlU3VidHJlZSh0aGlzLmMsYSl9OwpuLnN0eWxlU3VidHJlZT1mdW5jdGlvbihhLGIpe3ZhciBjPW9mKGEpLGQ9Yy5zaGFkb3dSb290OyhkfHxhPT09dGhpcy5jKSYmdGhpcy5zdHlsZUVsZW1lbnQoYSxiKTtpZihhPWQmJihkLmNoaWxkcmVufHxkLmNoaWxkTm9kZXMpKWZvcihjPTA7YzxhLmxlbmd0aDtjKyspdGhpcy5zdHlsZVN1YnRyZWUoYVtjXSk7ZWxzZSBpZihjPWMuY2hpbGRyZW58fGMuY2hpbGROb2Rlcylmb3IoYT0wO2E8Yy5sZW5ndGg7YSsrKXRoaXMuc3R5bGVTdWJ0cmVlKGNbYV0pfTsKbi5yYT1mdW5jdGlvbihhKXt2YXIgYj10aGlzLGM9cmYoYSk7YyE9PXRoaXMuZi5jc3NCdWlsZCYmKHRoaXMuZi5jc3NCdWlsZD1jKTtpZighc2YoYykpe3ZhciBkPWVmKGEpO2RmKGQsZnVuY3Rpb24oYSl7aWYoTylSZihhKTtlbHNle3ZhciBkPVI7YS5zZWxlY3Rvcj1hLnBhcnNlZFNlbGVjdG9yO1JmKGEpO2Euc2VsZWN0b3I9YS5qPUNmKGQsYSxkLmMsdm9pZCAwLHZvaWQgMCl9USYmIiI9PT1jJiYoRGcoYiksYi5hJiZiLmEudHJhbnNmb3JtUnVsZShhKSl9KTtRP2EudGV4dENvbnRlbnQ9Y2YoZCk6dGhpcy5mLkEucnVsZXMucHVzaChkKX19O24uZ2V0Q29tcHV0ZWRTdHlsZVZhbHVlPWZ1bmN0aW9uKGEsYil7dmFyIGM7UXx8KGM9KFQoYSl8fFQoSWcodGhpcyxhKSkpLndbYl0pO3JldHVybihjPWN8fHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGEpLmdldFByb3BlcnR5VmFsdWUoYikpP2MudHJpbSgpOiIifTsKbi5VYT1mdW5jdGlvbihhLGIpe3ZhciBjPW9mKGEpLmdldFJvb3ROb2RlKCk7Yj1iP2Iuc3BsaXQoL1xzLyk6W107Yz1jLmhvc3QmJmMuaG9zdC5sb2NhbE5hbWU7aWYoIWMpe3ZhciBkPWEuZ2V0QXR0cmlidXRlKCJjbGFzcyIpO2lmKGQpe2Q9ZC5zcGxpdCgvXHMvKTtmb3IodmFyIGU9MDtlPGQubGVuZ3RoO2UrKylpZihkW2VdPT09Ui5hKXtjPWRbZSsxXTticmVha319fWMmJmIucHVzaChSLmEsYyk7UXx8KGM9VChhKSkmJmMucyYmYi5wdXNoKGlnLmEsYy5zKTtuZihhLGIuam9pbigiICIpKX07bi5CYT1mdW5jdGlvbihhKXtyZXR1cm4gVChhKX07bi5UYT1mdW5jdGlvbihhLGIpe3dmKGEsYil9O24uV2E9ZnVuY3Rpb24oYSxiKXt3ZihhLGIsITApfTtuLlNhPWZ1bmN0aW9uKGEpe3JldHVybiBxZyhhKX07bi5EYT1mdW5jdGlvbihhKXtyZXR1cm4gcGcoYSl9O1kucHJvdG90eXBlLmZsdXNoPVkucHJvdG90eXBlLmZsdXNoO1kucHJvdG90eXBlLnByZXBhcmVUZW1wbGF0ZT1ZLnByb3RvdHlwZS5wcmVwYXJlVGVtcGxhdGU7ClkucHJvdG90eXBlLnN0eWxlRWxlbWVudD1ZLnByb3RvdHlwZS5zdHlsZUVsZW1lbnQ7WS5wcm90b3R5cGUuc3R5bGVEb2N1bWVudD1ZLnByb3RvdHlwZS5zdHlsZURvY3VtZW50O1kucHJvdG90eXBlLnN0eWxlU3VidHJlZT1ZLnByb3RvdHlwZS5zdHlsZVN1YnRyZWU7WS5wcm90b3R5cGUuZ2V0Q29tcHV0ZWRTdHlsZVZhbHVlPVkucHJvdG90eXBlLmdldENvbXB1dGVkU3R5bGVWYWx1ZTtZLnByb3RvdHlwZS5zZXRFbGVtZW50Q2xhc3M9WS5wcm90b3R5cGUuVWE7WS5wcm90b3R5cGUuX3N0eWxlSW5mb0Zvck5vZGU9WS5wcm90b3R5cGUuQmE7WS5wcm90b3R5cGUudHJhbnNmb3JtQ3VzdG9tU3R5bGVGb3JEb2N1bWVudD1ZLnByb3RvdHlwZS5yYTtZLnByb3RvdHlwZS5nZXRTdHlsZUFzdD1ZLnByb3RvdHlwZS5GYTtZLnByb3RvdHlwZS5zdHlsZUFzdFRvU3RyaW5nPVkucHJvdG90eXBlLlZhO1kucHJvdG90eXBlLmZsdXNoQ3VzdG9tU3R5bGVzPVkucHJvdG90eXBlLmZsdXNoQ3VzdG9tU3R5bGVzOwpZLnByb3RvdHlwZS5zY29wZU5vZGU9WS5wcm90b3R5cGUuVGE7WS5wcm90b3R5cGUudW5zY29wZU5vZGU9WS5wcm90b3R5cGUuV2E7WS5wcm90b3R5cGUuc2NvcGVGb3JOb2RlPVkucHJvdG90eXBlLlNhO1kucHJvdG90eXBlLmN1cnJlbnRTY29wZUZvck5vZGU9WS5wcm90b3R5cGUuRGE7WS5wcm90b3R5cGUucHJlcGFyZUFkb3B0ZWRDc3NUZXh0PVkucHJvdG90eXBlLlFhO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFkucHJvdG90eXBlLHtuYXRpdmVTaGFkb3c6e2dldDpmdW5jdGlvbigpe3JldHVybiBPfX0sbmF0aXZlQ3NzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gUX19fSk7dmFyIFo9bmV3IFksSmcsS2c7d2luZG93LlNoYWR5Q1NTJiYoSmc9d2luZG93LlNoYWR5Q1NTLkFwcGx5U2hpbSxLZz13aW5kb3cuU2hhZHlDU1MuQ3VzdG9tU3R5bGVJbnRlcmZhY2UpOwp3aW5kb3cuU2hhZHlDU1M9e1Njb3BpbmdTaGltOloscHJlcGFyZVRlbXBsYXRlOmZ1bmN0aW9uKGEsYixjKXtaLmZsdXNoQ3VzdG9tU3R5bGVzKCk7Wi5wcmVwYXJlVGVtcGxhdGUoYSxiLGMpfSxwcmVwYXJlVGVtcGxhdGVEb206ZnVuY3Rpb24oYSxiKXtaLnByZXBhcmVUZW1wbGF0ZURvbShhLGIpfSxwcmVwYXJlVGVtcGxhdGVTdHlsZXM6ZnVuY3Rpb24oYSxiLGMpe1ouZmx1c2hDdXN0b21TdHlsZXMoKTtaLnByZXBhcmVUZW1wbGF0ZVN0eWxlcyhhLGIsYyl9LHN0eWxlU3VidHJlZTpmdW5jdGlvbihhLGIpe1ouZmx1c2hDdXN0b21TdHlsZXMoKTtaLnN0eWxlU3VidHJlZShhLGIpfSxzdHlsZUVsZW1lbnQ6ZnVuY3Rpb24oYSl7Wi5mbHVzaEN1c3RvbVN0eWxlcygpO1ouc3R5bGVFbGVtZW50KGEpfSxzdHlsZURvY3VtZW50OmZ1bmN0aW9uKGEpe1ouZmx1c2hDdXN0b21TdHlsZXMoKTtaLnN0eWxlRG9jdW1lbnQoYSl9LGZsdXNoQ3VzdG9tU3R5bGVzOmZ1bmN0aW9uKCl7Wi5mbHVzaEN1c3RvbVN0eWxlcygpfSwKZ2V0Q29tcHV0ZWRTdHlsZVZhbHVlOmZ1bmN0aW9uKGEsYil7cmV0dXJuIFouZ2V0Q29tcHV0ZWRTdHlsZVZhbHVlKGEsYil9LG5hdGl2ZUNzczpRLG5hdGl2ZVNoYWRvdzpPLGNzc0J1aWxkOlFlLGRpc2FibGVSdW50aW1lOlBlfTtKZyYmKHdpbmRvdy5TaGFkeUNTUy5BcHBseVNoaW09SmcpO0tnJiYod2luZG93LlNoYWR5Q1NTLkN1c3RvbVN0eWxlSW50ZXJmYWNlPUtnKTt2YXIgTGc9d2luZG93LmN1c3RvbUVsZW1lbnRzLE1nPXdpbmRvdy5IVE1MSW1wb3J0cyxOZz13aW5kb3cuSFRNTFRlbXBsYXRlRWxlbWVudDt3aW5kb3cuV2ViQ29tcG9uZW50cz13aW5kb3cuV2ViQ29tcG9uZW50c3x8e307aWYoTGcmJkxnLnBvbHlmaWxsV3JhcEZsdXNoQ2FsbGJhY2spe3ZhciBPZyxQZz1mdW5jdGlvbigpe2lmKE9nKXtOZy5DJiZOZy5DKHdpbmRvdy5kb2N1bWVudCk7dmFyIGE9T2c7T2c9bnVsbDthKCk7cmV0dXJuITB9fSxRZz1NZy53aGVuUmVhZHk7TGcucG9seWZpbGxXcmFwRmx1c2hDYWxsYmFjayhmdW5jdGlvbihhKXtPZz1hO1FnKFBnKX0pO01nLndoZW5SZWFkeT1mdW5jdGlvbihhKXtRZyhmdW5jdGlvbigpe1BnKCk/TWcud2hlblJlYWR5KGEpOmEoKX0pfX0KTWcud2hlblJlYWR5KGZ1bmN0aW9uKCl7cmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uKCl7d2luZG93LldlYkNvbXBvbmVudHMucmVhZHk9ITA7ZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoIldlYkNvbXBvbmVudHNSZWFkeSIse2J1YmJsZXM6ITB9KSl9KX0pO3ZhciBSZz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO1JnLnRleHRDb250ZW50PSJib2R5IHt0cmFuc2l0aW9uOiBvcGFjaXR5IGVhc2UtaW4gMC4yczsgfSBcbmJvZHlbdW5yZXNvbHZlZF0ge29wYWNpdHk6IDA7IGRpc3BsYXk6IGJsb2NrOyBvdmVyZmxvdzogaGlkZGVuOyBwb3NpdGlvbjogcmVsYXRpdmU7IH0gXG4iO3ZhciBTZz1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJoZWFkIik7U2cuaW5zZXJ0QmVmb3JlKFJnLFNnLmZpcnN0Q2hpbGQpO30pLmNhbGwodGhpcyk7CgoKPC9zY3JpcHQ+PHNjcmlwdD4oZnVuY3Rpb24oKXsvKgoKQ29weXJpZ2h0IChjKSAyMDE3IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dApUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dApUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQKQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28Kc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKKi8KJ3VzZSBzdHJpY3QnO3ZhciBsPSEod2luZG93LlNoYWR5RE9NJiZ3aW5kb3cuU2hhZHlET00uaW5Vc2UpLHA7ZnVuY3Rpb24gcihhKXtwPWEmJmEuc2hpbWNzc3Byb3BlcnRpZXM/ITE6bHx8IShuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9BcHBsZVdlYktpdFwvNjAxfEVkZ2VcLzE1Lyl8fCF3aW5kb3cuQ1NTfHwhQ1NTLnN1cHBvcnRzfHwhQ1NTLnN1cHBvcnRzKCJib3gtc2hhZG93IiwiMCAwIDAgdmFyKC0tZm9vKSIpKX12YXIgdDt3aW5kb3cuU2hhZHlDU1MmJnZvaWQgMCE9PXdpbmRvdy5TaGFkeUNTUy5jc3NCdWlsZCYmKHQ9d2luZG93LlNoYWR5Q1NTLmNzc0J1aWxkKTt2YXIgYWE9ISghd2luZG93LlNoYWR5Q1NTfHwhd2luZG93LlNoYWR5Q1NTLmRpc2FibGVSdW50aW1lKTsKd2luZG93LlNoYWR5Q1NTJiZ2b2lkIDAhPT13aW5kb3cuU2hhZHlDU1MubmF0aXZlQ3NzP3A9d2luZG93LlNoYWR5Q1NTLm5hdGl2ZUNzczp3aW5kb3cuU2hhZHlDU1M/KHIod2luZG93LlNoYWR5Q1NTKSx3aW5kb3cuU2hhZHlDU1M9dm9pZCAwKTpyKHdpbmRvdy5XZWJDb21wb25lbnRzJiZ3aW5kb3cuV2ViQ29tcG9uZW50cy5mbGFncyk7dmFyIHU9cCx2PXQ7ZnVuY3Rpb24gdygpe3RoaXMuZW5kPXRoaXMuc3RhcnQ9MDt0aGlzLnJ1bGVzPXRoaXMucGFyZW50PXRoaXMucHJldmlvdXM9bnVsbDt0aGlzLmNzc1RleHQ9dGhpcy5wYXJzZWRDc3NUZXh0PSIiO3RoaXMuYXRSdWxlPSExO3RoaXMudHlwZT0wO3RoaXMucGFyc2VkU2VsZWN0b3I9dGhpcy5zZWxlY3Rvcj10aGlzLmtleWZyYW1lc05hbWU9IiJ9CmZ1bmN0aW9uIHgoYSl7YT1hLnJlcGxhY2UoYmEsIiIpLnJlcGxhY2UoY2EsIiIpO3ZhciBiPXksYz1hLGU9bmV3IHc7ZS5zdGFydD0wO2UuZW5kPWMubGVuZ3RoO2Zvcih2YXIgZD1lLGY9MCxnPWMubGVuZ3RoO2Y8ZztmKyspaWYoInsiPT09Y1tmXSl7ZC5ydWxlc3x8KGQucnVsZXM9W10pO3ZhciBoPWQsaz1oLnJ1bGVzW2gucnVsZXMubGVuZ3RoLTFdfHxudWxsO2Q9bmV3IHc7ZC5zdGFydD1mKzE7ZC5wYXJlbnQ9aDtkLnByZXZpb3VzPWs7aC5ydWxlcy5wdXNoKGQpfWVsc2UifSI9PT1jW2ZdJiYoZC5lbmQ9ZisxLGQ9ZC5wYXJlbnR8fGUpO3JldHVybiBiKGUsYSl9CmZ1bmN0aW9uIHkoYSxiKXt2YXIgYz1iLnN1YnN0cmluZyhhLnN0YXJ0LGEuZW5kLTEpO2EucGFyc2VkQ3NzVGV4dD1hLmNzc1RleHQ9Yy50cmltKCk7YS5wYXJlbnQmJihjPWIuc3Vic3RyaW5nKGEucHJldmlvdXM/YS5wcmV2aW91cy5lbmQ6YS5wYXJlbnQuc3RhcnQsYS5zdGFydC0xKSxjPWRhKGMpLGM9Yy5yZXBsYWNlKHosIiAiKSxjPWMuc3Vic3RyaW5nKGMubGFzdEluZGV4T2YoIjsiKSsxKSxjPWEucGFyc2VkU2VsZWN0b3I9YS5zZWxlY3Rvcj1jLnRyaW0oKSxhLmF0UnVsZT0wPT09Yy5pbmRleE9mKCJAIiksYS5hdFJ1bGU/MD09PWMuaW5kZXhPZigiQG1lZGlhIik/YS50eXBlPUE6Yy5tYXRjaChlYSkmJihhLnR5cGU9QixhLmtleWZyYW1lc05hbWU9YS5zZWxlY3Rvci5zcGxpdCh6KS5wb3AoKSk6YS50eXBlPTA9PT1jLmluZGV4T2YoIi0tIik/QzpEKTtpZihjPWEucnVsZXMpZm9yKHZhciBlPTAsZD1jLmxlbmd0aCxmPXZvaWQgMDtlPGQmJihmPWNbZV0pO2UrKyl5KGYsYik7CnJldHVybiBhfWZ1bmN0aW9uIGRhKGEpe3JldHVybiBhLnJlcGxhY2UoL1xcKFswLTlhLWZdezEsNn0pXHMvZ2ksZnVuY3Rpb24oYSxjKXthPWM7Zm9yKGM9Ni1hLmxlbmd0aDtjLS07KWE9IjAiK2E7cmV0dXJuIlxcIithfSl9CmZ1bmN0aW9uIEUoYSxiLGMpe2M9dm9pZCAwPT09Yz8iIjpjO3ZhciBlPSIiO2lmKGEuY3NzVGV4dHx8YS5ydWxlcyl7dmFyIGQ9YS5ydWxlcyxmO2lmKGY9ZClmPWRbMF0sZj0hKGYmJmYuc2VsZWN0b3ImJjA9PT1mLnNlbGVjdG9yLmluZGV4T2YoIi0tIikpO2lmKGYpe2Y9MDtmb3IodmFyIGc9ZC5sZW5ndGgsaD12b2lkIDA7ZjxnJiYoaD1kW2ZdKTtmKyspZT1FKGgsYixlKX1lbHNlIGI/Yj1hLmNzc1RleHQ6KGI9YS5jc3NUZXh0LGI9Yi5yZXBsYWNlKGZhLCIiKS5yZXBsYWNlKGhhLCIiKSxiPWIucmVwbGFjZShpYSwiIikucmVwbGFjZShqYSwiIikpLChlPWIudHJpbSgpKSYmKGU9IiAgIitlKyJcbiIpfWUmJihhLnNlbGVjdG9yJiYoYys9YS5zZWxlY3RvcisiIHtcbiIpLGMrPWUsYS5zZWxlY3RvciYmKGMrPSJ9XG5cbiIpKTtyZXR1cm4gY30KdmFyIEQ9MSxCPTcsQT00LEM9MUUzLGJhPS9cL1wqW14qXSpcKisoW14vKl1bXipdKlwqKykqXC8vZ2ltLGNhPS9AaW1wb3J0W147XSo7L2dpbSxmYT0vKD86XlteO1wtXHN9XSspPy0tW147e31dKj86W157fTtdKj8oPzpbO1xuXXwkKS9naW0saGE9Lyg/Ol5bXjtcLVxzfV0rKT8tLVteO3t9XSo/Oltee307XSo/e1tefV0qP30oPzpbO1xuXXwkKT8vZ2ltLGlhPS9AYXBwbHlccypcKD9bXik7XSpcKT9ccyooPzpbO1xuXXwkKT8vZ2ltLGphPS9bXjs6XSo/OlteO10qP3ZhclwoW147XSpcKSg/Ols7XG5dfCQpPy9naW0sZWE9L15AW15cc10qa2V5ZnJhbWVzLyx6PS9ccysvZzt2YXIgRz0vKD86XnxbO1xze11ccyopKC0tW1x3LV0qPylccyo6XHMqKD86KCg/OicoPzpcXCd8LikqPyd8Iig/OlxcInwuKSo/InxcKFteKV0qP1wpfFtefTt7XSkrKXxceyhbXn1dKilcfSg/Oig/PVs7XHN9XSl8JCkpL2dpLEg9Lyg/Ol58XFcrKUBhcHBseVxzKlwoPyhbXik7XG5dKilcKT8vZ2ksa2E9L0BtZWRpYVxzKC4qKS87dmFyIEk9bmV3IFNldDtmdW5jdGlvbiBKKGEpe2lmKCFhKXJldHVybiIiOyJzdHJpbmciPT09dHlwZW9mIGEmJihhPXgoYSkpO3JldHVybiBFKGEsdSl9ZnVuY3Rpb24gSyhhKXshYS5fX2Nzc1J1bGVzJiZhLnRleHRDb250ZW50JiYoYS5fX2Nzc1J1bGVzPXgoYS50ZXh0Q29udGVudCkpO3JldHVybiBhLl9fY3NzUnVsZXN8fG51bGx9ZnVuY3Rpb24gTChhLGIsYyxlKXtpZihhKXt2YXIgZD0hMSxmPWEudHlwZTtpZihlJiZmPT09QSl7dmFyIGc9YS5zZWxlY3Rvci5tYXRjaChrYSk7ZyYmKHdpbmRvdy5tYXRjaE1lZGlhKGdbMV0pLm1hdGNoZXN8fChkPSEwKSl9Zj09PUQ/YihhKTpjJiZmPT09Qj9jKGEpOmY9PT1DJiYoZD0hMCk7aWYoKGE9YS5ydWxlcykmJiFkKWZvcihkPTAsZj1hLmxlbmd0aCxnPXZvaWQgMDtkPGYmJihnPWFbZF0pO2QrKylMKGcsYixjLGUpfX0KZnVuY3Rpb24gTShhLGIpe3ZhciBjPWEuaW5kZXhPZigidmFyKCIpO2lmKC0xPT09YylyZXR1cm4gYihhLCIiLCIiLCIiKTthOnt2YXIgZT0wO3ZhciBkPWMrMztmb3IodmFyIGY9YS5sZW5ndGg7ZDxmO2QrKylpZigiKCI9PT1hW2RdKWUrKztlbHNlIGlmKCIpIj09PWFbZF0mJjA9PT0tLWUpYnJlYWsgYTtkPS0xfWU9YS5zdWJzdHJpbmcoYys0LGQpO2M9YS5zdWJzdHJpbmcoMCxjKTthPU0oYS5zdWJzdHJpbmcoZCsxKSxiKTtkPWUuaW5kZXhPZigiLCIpO3JldHVybi0xPT09ZD9iKGMsZS50cmltKCksIiIsYSk6YihjLGUuc3Vic3RyaW5nKDAsZCkudHJpbSgpLGUuc3Vic3RyaW5nKGQrMSkudHJpbSgpLGEpfQpmdW5jdGlvbiBOKGEpe2lmKHZvaWQgMCE9PXYpcmV0dXJuIHY7aWYodm9pZCAwPT09YS5fX2Nzc0J1aWxkKXt2YXIgYj1hLmdldEF0dHJpYnV0ZSgiY3NzLWJ1aWxkIik7aWYoYilhLl9fY3NzQnVpbGQ9YjtlbHNle2E6e2I9InRlbXBsYXRlIj09PWEubG9jYWxOYW1lP2EuY29udGVudC5maXJzdENoaWxkOmEuZmlyc3RDaGlsZDtpZihiIGluc3RhbmNlb2YgQ29tbWVudCYmKGI9Yi50ZXh0Q29udGVudC50cmltKCkuc3BsaXQoIjoiKSwiY3NzLWJ1aWxkIj09PWJbMF0pKXtiPWJbMV07YnJlYWsgYX1iPSIifWlmKCIiIT09Yil7dmFyIGM9InRlbXBsYXRlIj09PWEubG9jYWxOYW1lP2EuY29udGVudC5maXJzdENoaWxkOmEuZmlyc3RDaGlsZDtjLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoYyl9YS5fX2Nzc0J1aWxkPWJ9fXJldHVybiBhLl9fY3NzQnVpbGR8fCIifTt2YXIgbGE9LztccyovbSxtYT0vXlxzKihpbml0aWFsKXwoaW5oZXJpdClccyokLyxPPS9ccyohaW1wb3J0YW50LztmdW5jdGlvbiBQKCl7dGhpcy5hPXt9fVAucHJvdG90eXBlLnNldD1mdW5jdGlvbihhLGIpe2E9YS50cmltKCk7dGhpcy5hW2FdPXtoOmIsaTp7fX19O1AucHJvdG90eXBlLmdldD1mdW5jdGlvbihhKXthPWEudHJpbSgpO3JldHVybiB0aGlzLmFbYV18fG51bGx9O3ZhciBRPW51bGw7ZnVuY3Rpb24gUigpe3RoaXMuYj10aGlzLmM9bnVsbDt0aGlzLmE9bmV3IFB9Ui5wcm90b3R5cGUubz1mdW5jdGlvbihhKXthPUgudGVzdChhKXx8Ry50ZXN0KGEpO0gubGFzdEluZGV4PTA7Ry5sYXN0SW5kZXg9MDtyZXR1cm4gYX07ClIucHJvdG90eXBlLm09ZnVuY3Rpb24oYSxiKXtpZih2b2lkIDA9PT1hLl9nYXRoZXJlZFN0eWxlKXt2YXIgYz1bXTtmb3IodmFyIGU9YS5jb250ZW50LnF1ZXJ5U2VsZWN0b3JBbGwoInN0eWxlIiksZD0wO2Q8ZS5sZW5ndGg7ZCsrKXt2YXIgZj1lW2RdO2lmKGYuaGFzQXR0cmlidXRlKCJzaGFkeS11bnNjb3BlZCIpKXtpZighbCl7dmFyIGc9Zi50ZXh0Q29udGVudDtJLmhhcyhnKXx8KEkuYWRkKGcpLGc9Zi5jbG9uZU5vZGUoITApLGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoZykpO2YucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChmKX19ZWxzZSBjLnB1c2goZi50ZXh0Q29udGVudCksZi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGYpfShjPWMuam9pbigiIikudHJpbSgpKT8oZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpLGUudGV4dENvbnRlbnQ9YyxhLmNvbnRlbnQuaW5zZXJ0QmVmb3JlKGUsYS5jb250ZW50LmZpcnN0Q2hpbGQpLGM9ZSk6Yz1udWxsO2EuX2dhdGhlcmVkU3R5bGU9CmN9cmV0dXJuKGE9YS5fZ2F0aGVyZWRTdHlsZSk/dGhpcy5qKGEsYik6bnVsbH07Ui5wcm90b3R5cGUuaj1mdW5jdGlvbihhLGIpe2I9dm9pZCAwPT09Yj8iIjpiO3ZhciBjPUsoYSk7dGhpcy5sKGMsYik7YS50ZXh0Q29udGVudD1KKGMpO3JldHVybiBjfTtSLnByb3RvdHlwZS5mPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMsYz1LKGEpO0woYyxmdW5jdGlvbihhKXsiOnJvb3QiPT09YS5zZWxlY3RvciYmKGEuc2VsZWN0b3I9Imh0bWwiKTtiLmcoYSl9KTthLnRleHRDb250ZW50PUooYyk7cmV0dXJuIGN9O1IucHJvdG90eXBlLmw9ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzO3RoaXMuYz1iO0woYSxmdW5jdGlvbihhKXtjLmcoYSl9KTt0aGlzLmM9bnVsbH07Ui5wcm90b3R5cGUuZz1mdW5jdGlvbihhKXthLmNzc1RleHQ9bmEodGhpcyxhLnBhcnNlZENzc1RleHQsYSk7Ijpyb290Ij09PWEuc2VsZWN0b3ImJihhLnNlbGVjdG9yPSI6aG9zdCA+ICoiKX07CmZ1bmN0aW9uIG5hKGEsYixjKXtiPWIucmVwbGFjZShHLGZ1bmN0aW9uKGIsZCxmLGcpe3JldHVybiBvYShhLGIsZCxmLGcsYyl9KTtyZXR1cm4gUyhhLGIsYyl9ZnVuY3Rpb24gcGEoYSxiKXtmb3IodmFyIGM9YjtjLnBhcmVudDspYz1jLnBhcmVudDt2YXIgZT17fSxkPSExO0woYyxmdW5jdGlvbihjKXsoZD1kfHxjPT09Yil8fGMuc2VsZWN0b3I9PT1iLnNlbGVjdG9yJiZPYmplY3QuYXNzaWduKGUsVChhLGMucGFyc2VkQ3NzVGV4dCkpfSk7cmV0dXJuIGV9CmZ1bmN0aW9uIFMoYSxiLGMpe2Zvcih2YXIgZTtlPUguZXhlYyhiKTspe3ZhciBkPWVbMF0sZj1lWzFdO2U9ZS5pbmRleDt2YXIgZz1iLnNsaWNlKDAsZStkLmluZGV4T2YoIkBhcHBseSIpKTtiPWIuc2xpY2UoZStkLmxlbmd0aCk7dmFyIGg9Yz9wYShhLGMpOnt9O09iamVjdC5hc3NpZ24oaCxUKGEsZykpO2Q9dm9pZCAwO3ZhciBrPWE7Zj1mLnJlcGxhY2UobGEsIiIpO3ZhciBuPVtdO3ZhciBtPWsuYS5nZXQoZik7bXx8KGsuYS5zZXQoZix7fSksbT1rLmEuZ2V0KGYpKTtpZihtKXtrLmMmJihtLmlbay5jXT0hMCk7dmFyIHE9bS5oO2ZvcihkIGluIHEpaz1oJiZoW2RdLG09W2QsIjogdmFyKCIsZiwiXy1fIixkXSxrJiZtLnB1c2goIiwiLGsucmVwbGFjZShPLCIiKSksbS5wdXNoKCIpIiksTy50ZXN0KHFbZF0pJiZtLnB1c2goIiAhaW1wb3J0YW50Iiksbi5wdXNoKG0uam9pbigiIikpfWQ9bi5qb2luKCI7ICIpO2I9ZytkK2I7SC5sYXN0SW5kZXg9ZStkLmxlbmd0aH1yZXR1cm4gYn0KZnVuY3Rpb24gVChhLGIsYyl7Yz12b2lkIDA9PT1jPyExOmM7Yj1iLnNwbGl0KCI7Iik7Zm9yKHZhciBlLGQsZj17fSxnPTAsaDtnPGIubGVuZ3RoO2crKylpZihlPWJbZ10paWYoaD1lLnNwbGl0KCI6IiksMTxoLmxlbmd0aCl7ZT1oWzBdLnRyaW0oKTtkPWguc2xpY2UoMSkuam9pbigiOiIpO2lmKGMpe3ZhciBrPWE7aD1lO3ZhciBuPW1hLmV4ZWMoZCk7biYmKG5bMV0/KGsuYnx8KGsuYj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJtZXRhIiksay5iLnNldEF0dHJpYnV0ZSgiYXBwbHktc2hpbS1tZWFzdXJlIiwiIiksay5iLnN0eWxlLmFsbD0iaW5pdGlhbCIsZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChrLmIpKSxoPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGsuYikuZ2V0UHJvcGVydHlWYWx1ZShoKSk6aD0iYXBwbHktc2hpbS1pbmhlcml0IixkPWgpfWZbZV09ZH1yZXR1cm4gZn1mdW5jdGlvbiBxYShhLGIpe2lmKFEpZm9yKHZhciBjIGluIGIuaSljIT09YS5jJiZRKGMpfQpmdW5jdGlvbiBvYShhLGIsYyxlLGQsZil7ZSYmTShlLGZ1bmN0aW9uKGIsYyl7YyYmYS5hLmdldChjKSYmKGQ9IkBhcHBseSAiK2MrIjsiKX0pO2lmKCFkKXJldHVybiBiO3ZhciBnPVMoYSwiIitkLGYpO2Y9Yi5zbGljZSgwLGIuaW5kZXhPZigiLS0iKSk7dmFyIGg9Zz1UKGEsZywhMCksaz1hLmEuZ2V0KGMpLG49ayYmay5oO24/aD1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUobiksZyk6YS5hLnNldChjLGgpO3ZhciBtPVtdLHEsWj0hMTtmb3IocSBpbiBoKXt2YXIgRj1nW3FdO3ZvaWQgMD09PUYmJihGPSJpbml0aWFsIik7IW58fHEgaW4gbnx8KFo9ITApO20ucHVzaChjKyJfLV8iK3ErIjogIitGKX1aJiZxYShhLGspO2smJihrLmg9aCk7ZSYmKGY9YisiOyIrZik7cmV0dXJuIGYrbS5qb2luKCI7ICIpKyI7In1SLnByb3RvdHlwZS5kZXRlY3RNaXhpbj1SLnByb3RvdHlwZS5vO1IucHJvdG90eXBlLnRyYW5zZm9ybVN0eWxlPVIucHJvdG90eXBlLmo7ClIucHJvdG90eXBlLnRyYW5zZm9ybUN1c3RvbVN0eWxlPVIucHJvdG90eXBlLmY7Ui5wcm90b3R5cGUudHJhbnNmb3JtUnVsZXM9Ui5wcm90b3R5cGUubDtSLnByb3RvdHlwZS50cmFuc2Zvcm1SdWxlPVIucHJvdG90eXBlLmc7Ui5wcm90b3R5cGUudHJhbnNmb3JtVGVtcGxhdGU9Ui5wcm90b3R5cGUubTtSLnByb3RvdHlwZS5fc2VwYXJhdG9yPSJfLV8iO09iamVjdC5kZWZpbmVQcm9wZXJ0eShSLnByb3RvdHlwZSwiaW52YWxpZENhbGxiYWNrIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFF9LHNldDpmdW5jdGlvbihhKXtRPWF9fSk7dmFyIFU9e307dmFyIHJhPVByb21pc2UucmVzb2x2ZSgpO2Z1bmN0aW9uIHNhKGEpe2lmKGE9VVthXSlhLl9hcHBseVNoaW1DdXJyZW50VmVyc2lvbj1hLl9hcHBseVNoaW1DdXJyZW50VmVyc2lvbnx8MCxhLl9hcHBseVNoaW1WYWxpZGF0aW5nVmVyc2lvbj1hLl9hcHBseVNoaW1WYWxpZGF0aW5nVmVyc2lvbnx8MCxhLl9hcHBseVNoaW1OZXh0VmVyc2lvbj0oYS5fYXBwbHlTaGltTmV4dFZlcnNpb258fDApKzF9ZnVuY3Rpb24gdGEoYSl7cmV0dXJuIGEuX2FwcGx5U2hpbUN1cnJlbnRWZXJzaW9uPT09YS5fYXBwbHlTaGltTmV4dFZlcnNpb259ZnVuY3Rpb24gdWEoYSl7YS5fYXBwbHlTaGltVmFsaWRhdGluZ1ZlcnNpb249YS5fYXBwbHlTaGltTmV4dFZlcnNpb247YS5fdmFsaWRhdGluZ3x8KGEuX3ZhbGlkYXRpbmc9ITAscmEudGhlbihmdW5jdGlvbigpe2EuX2FwcGx5U2hpbUN1cnJlbnRWZXJzaW9uPWEuX2FwcGx5U2hpbU5leHRWZXJzaW9uO2EuX3ZhbGlkYXRpbmc9ITF9KSl9O3ZhciBWPW5ldyBSO2Z1bmN0aW9uIFcoKXt0aGlzLmE9bnVsbDtWLmludmFsaWRDYWxsYmFjaz1zYX1mdW5jdGlvbiBYKGEpeyFhLmEmJndpbmRvdy5TaGFkeUNTUy5DdXN0b21TdHlsZUludGVyZmFjZSYmKGEuYT13aW5kb3cuU2hhZHlDU1MuQ3VzdG9tU3R5bGVJbnRlcmZhY2UsYS5hLnRyYW5zZm9ybUNhbGxiYWNrPWZ1bmN0aW9uKGEpe1YuZihhKX0sYS5hLnZhbGlkYXRlQ2FsbGJhY2s9ZnVuY3Rpb24oKXtyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24oKXthLmEuZW5xdWV1ZWQmJmEuZmx1c2hDdXN0b21TdHlsZXMoKX0pfSl9Vy5wcm90b3R5cGUucHJlcGFyZVRlbXBsYXRlPWZ1bmN0aW9uKGEsYil7WCh0aGlzKTsiIj09PU4oYSkmJihVW2JdPWEsYj1WLm0oYSxiKSxhLl9zdHlsZUFzdD1iKX07ClcucHJvdG90eXBlLmZsdXNoQ3VzdG9tU3R5bGVzPWZ1bmN0aW9uKCl7WCh0aGlzKTtpZih0aGlzLmEpe3ZhciBhPXRoaXMuYS5wcm9jZXNzU3R5bGVzKCk7aWYodGhpcy5hLmVucXVldWVkKXtmb3IodmFyIGI9MDtiPGEubGVuZ3RoO2IrKyl7dmFyIGM9dGhpcy5hLmdldFN0eWxlRm9yQ3VzdG9tU3R5bGUoYVtiXSk7YyYmVi5mKGMpfXRoaXMuYS5lbnF1ZXVlZD0hMX19fTsKVy5wcm90b3R5cGUuc3R5bGVTdWJ0cmVlPWZ1bmN0aW9uKGEsYil7WCh0aGlzKTtpZihiKWZvcih2YXIgYyBpbiBiKW51bGw9PT1jP2Euc3R5bGUucmVtb3ZlUHJvcGVydHkoYyk6YS5zdHlsZS5zZXRQcm9wZXJ0eShjLGJbY10pO2lmKGEuc2hhZG93Um9vdClmb3IodGhpcy5zdHlsZUVsZW1lbnQoYSksYT1hLnNoYWRvd1Jvb3QuY2hpbGRyZW58fGEuc2hhZG93Um9vdC5jaGlsZE5vZGVzLGI9MDtiPGEubGVuZ3RoO2IrKyl0aGlzLnN0eWxlU3VidHJlZShhW2JdKTtlbHNlIGZvcihhPWEuY2hpbGRyZW58fGEuY2hpbGROb2RlcyxiPTA7YjxhLmxlbmd0aDtiKyspdGhpcy5zdHlsZVN1YnRyZWUoYVtiXSl9OwpXLnByb3RvdHlwZS5zdHlsZUVsZW1lbnQ9ZnVuY3Rpb24oYSl7WCh0aGlzKTt2YXIgYj1hLmxvY2FsTmFtZSxjO2I/LTE8Yi5pbmRleE9mKCItIik/Yz1iOmM9YS5nZXRBdHRyaWJ1dGUmJmEuZ2V0QXR0cmlidXRlKCJpcyIpfHwiIjpjPWEuaXM7Yj1VW2NdO2lmKCEoYiYmIiIhPT1OKGIpfHwhYnx8dGEoYikpKXtpZih0YShiKXx8Yi5fYXBwbHlTaGltVmFsaWRhdGluZ1ZlcnNpb24hPT1iLl9hcHBseVNoaW1OZXh0VmVyc2lvbil0aGlzLnByZXBhcmVUZW1wbGF0ZShiLGMpLHVhKGIpO2lmKGE9YS5zaGFkb3dSb290KWlmKGE9YS5xdWVyeVNlbGVjdG9yKCJzdHlsZSIpKWEuX19jc3NSdWxlcz1iLl9zdHlsZUFzdCxhLnRleHRDb250ZW50PUooYi5fc3R5bGVBc3QpfX07Vy5wcm90b3R5cGUuc3R5bGVEb2N1bWVudD1mdW5jdGlvbihhKXtYKHRoaXMpO3RoaXMuc3R5bGVTdWJ0cmVlKGRvY3VtZW50LmJvZHksYSl9OwppZighd2luZG93LlNoYWR5Q1NTfHwhd2luZG93LlNoYWR5Q1NTLlNjb3BpbmdTaGltKXt2YXIgWT1uZXcgVyx2YT13aW5kb3cuU2hhZHlDU1MmJndpbmRvdy5TaGFkeUNTUy5DdXN0b21TdHlsZUludGVyZmFjZTt3aW5kb3cuU2hhZHlDU1M9e3ByZXBhcmVUZW1wbGF0ZTpmdW5jdGlvbihhLGIpe1kuZmx1c2hDdXN0b21TdHlsZXMoKTtZLnByZXBhcmVUZW1wbGF0ZShhLGIpfSxwcmVwYXJlVGVtcGxhdGVTdHlsZXM6ZnVuY3Rpb24oYSxiLGMpe3dpbmRvdy5TaGFkeUNTUy5wcmVwYXJlVGVtcGxhdGUoYSxiLGMpfSxwcmVwYXJlVGVtcGxhdGVEb206ZnVuY3Rpb24oKXt9LHN0eWxlU3VidHJlZTpmdW5jdGlvbihhLGIpe1kuZmx1c2hDdXN0b21TdHlsZXMoKTtZLnN0eWxlU3VidHJlZShhLGIpfSxzdHlsZUVsZW1lbnQ6ZnVuY3Rpb24oYSl7WS5mbHVzaEN1c3RvbVN0eWxlcygpO1kuc3R5bGVFbGVtZW50KGEpfSxzdHlsZURvY3VtZW50OmZ1bmN0aW9uKGEpe1kuZmx1c2hDdXN0b21TdHlsZXMoKTsKWS5zdHlsZURvY3VtZW50KGEpfSxnZXRDb21wdXRlZFN0eWxlVmFsdWU6ZnVuY3Rpb24oYSxiKXtyZXR1cm4oYT13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShhKS5nZXRQcm9wZXJ0eVZhbHVlKGIpKT9hLnRyaW0oKToiIn0sZmx1c2hDdXN0b21TdHlsZXM6ZnVuY3Rpb24oKXtZLmZsdXNoQ3VzdG9tU3R5bGVzKCl9LG5hdGl2ZUNzczp1LG5hdGl2ZVNoYWRvdzpsLGNzc0J1aWxkOnYsZGlzYWJsZVJ1bnRpbWU6YWF9O3ZhJiYod2luZG93LlNoYWR5Q1NTLkN1c3RvbVN0eWxlSW50ZXJmYWNlPXZhKX13aW5kb3cuU2hhZHlDU1MuQXBwbHlTaGltPVY7fSkuY2FsbCh0aGlzKTsKCgo8L3NjcmlwdD48c2NyaXB0PgooZnVuY3Rpb24oKSB7CiAgJ3VzZSBzdHJpY3QnOwoKICBjb25zdCB1c2VyUG9seW1lciA9IHdpbmRvdy5Qb2x5bWVyOwoKICAvKioKICAgKiBAbmFtZXNwYWNlIFBvbHltZXIKICAgKiBAc3VtbWFyeSBQb2x5bWVyIGlzIGEgbGlnaHR3ZWlnaHQgbGlicmFyeSBidWlsdCBvbiB0b3Agb2YgdGhlIHdlYgogICAqICAgc3RhbmRhcmRzLWJhc2VkIFdlYiBDb21wb25lbnRzIEFQSSdzLCBhbmQgbWFrZXMgaXQgZWFzeSB0byBidWlsZCB5b3VyCiAgICogICBvd24gY3VzdG9tIEhUTUwgZWxlbWVudHMuCiAgICogQHBhcmFtIHshUG9seW1lckluaXR9IGluZm8gUHJvdG90eXBlIGZvciB0aGUgY3VzdG9tIGVsZW1lbnQuIEl0IG11c3QgY29udGFpbgogICAqICAgYW4gYGlzYCBwcm9wZXJ0eSB0byBzcGVjaWZ5IHRoZSBlbGVtZW50IG5hbWUuIE90aGVyIHByb3BlcnRpZXMgcG9wdWxhdGUKICAgKiAgIHRoZSBlbGVtZW50IHByb3RvdHlwZS4gVGhlIGBwcm9wZXJ0aWVzYCwgYG9ic2VydmVyc2AsIGBob3N0QXR0cmlidXRlc2AsCiAgICogICBhbmQgYGxpc3RlbmVyc2AgcHJvcGVydGllcyBhcmUgcHJvY2Vzc2VkIHRvIGNyZWF0ZSBlbGVtZW50IGZlYXR1cmVzLgogICAqIEByZXR1cm4geyFPYmplY3R9IFJldHVybnMgYSBjdXN0b20gZWxlbWVudCBjbGFzcyBmb3IgdGhlIGdpdmVuIHByb3ZpZGVkCiAgICogICBwcm90b3R5cGUgYGluZm9gIG9iamVjdC4gVGhlIG5hbWUgb2YgdGhlIGVsZW1lbnQgaWYgZ2l2ZW4gYnkgYGluZm8uaXNgLgogICAqLwogIHdpbmRvdy5Qb2x5bWVyID0gZnVuY3Rpb24oaW5mbykgewogICAgcmV0dXJuIHdpbmRvdy5Qb2x5bWVyLl9wb2x5bWVyRm4oaW5mbyk7CiAgfTsKCiAgLy8gc3VwcG9ydCB1c2VyIHNldHRpbmdzIG9uIHRoZSBQb2x5bWVyIG9iamVjdAogIGlmICh1c2VyUG9seW1lcikgewogICAgT2JqZWN0LmFzc2lnbihQb2x5bWVyLCB1c2VyUG9seW1lcik7CiAgfQoKICAvLyBUbyBiZSBwbHVnZ2VkIGJ5IGxlZ2FjeSBpbXBsZW1lbnRhdGlvbiBpZiBsb2FkZWQKICAvKiBlc2xpbnQtZGlzYWJsZSB2YWxpZC1qc2RvYyAqLwogIC8qKgogICAqIEBwYXJhbSB7IVBvbHltZXJJbml0fSBpbmZvIFByb3RvdHlwZSBmb3IgdGhlIGN1c3RvbSBlbGVtZW50LiBJdCBtdXN0IGNvbnRhaW4KICAgKiAgIGFuIGBpc2AgcHJvcGVydHkgdG8gc3BlY2lmeSB0aGUgZWxlbWVudCBuYW1lLiBPdGhlciBwcm9wZXJ0aWVzIHBvcHVsYXRlCiAgICogICB0aGUgZWxlbWVudCBwcm90b3R5cGUuIFRoZSBgcHJvcGVydGllc2AsIGBvYnNlcnZlcnNgLCBgaG9zdEF0dHJpYnV0ZXNgLAogICAqICAgYW5kIGBsaXN0ZW5lcnNgIHByb3BlcnRpZXMgYXJlIHByb2Nlc3NlZCB0byBjcmVhdGUgZWxlbWVudCBmZWF0dXJlcy4KICAgKiBAcmV0dXJuIHshT2JqZWN0fSBSZXR1cm5zIGEgY3VzdG9tIGVsZW1lbnQgY2xhc3MgZm9yIHRoZSBnaXZlbiBwcm92aWRlZAogICAqICAgcHJvdG90eXBlIGBpbmZvYCBvYmplY3QuIFRoZSBuYW1lIG9mIHRoZSBlbGVtZW50IGlmIGdpdmVuIGJ5IGBpbmZvLmlzYC4KICAgKi8KICB3aW5kb3cuUG9seW1lci5fcG9seW1lckZuID0gZnVuY3Rpb24oaW5mbykgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzCiAgICB0aHJvdyBuZXcgRXJyb3IoJ0xvYWQgcG9seW1lci5odG1sIHRvIHVzZSB0aGUgUG9seW1lcigpIGZ1bmN0aW9uLicpOwogIH07CiAgLyogZXNsaW50LWVuYWJsZSAqLwoKICB3aW5kb3cuUG9seW1lci52ZXJzaW9uID0gJzIuNy4wJzsKCiAgLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi8KICAvKgogIFdoZW4gdXNpbmcgQ2xvc3VyZSBDb21waWxlciwgSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eShwcm9wZXJ0eSwgb2JqZWN0KSBpcyByZXBsYWNlZCBieSB0aGUgbXVuZ2VkIG5hbWUgZm9yIG9iamVjdFtwcm9wZXJ0eV0KICBXZSBjYW5ub3QgYWxpYXMgdGhpcyBmdW5jdGlvbiwgc28gd2UgaGF2ZSB0byB1c2UgYSBzbWFsbCBzaGltIHRoYXQgaGFzIHRoZSBzYW1lIGJlaGF2aW9yIHdoZW4gbm90IGNvbXBpbGluZy4KICAqLwogIHdpbmRvdy5KU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5ID0gZnVuY3Rpb24ocHJvcCwgb2JqKSB7CiAgICByZXR1cm4gcHJvcDsKICB9OwogIC8qIGVzbGludC1lbmFibGUgKi8KCn0pKCk7Cjwvc2NyaXB0PjxzY3JpcHQ+CgogIChmdW5jdGlvbigpIHsKICAgICd1c2Ugc3RyaWN0JzsKCiAgICBsZXQgQ1NTX1VSTF9SWCA9IC8odXJsXCgpKFteKV0qKShcKSkvZzsKICAgIGxldCBBQlNfVVJMID0gLyheXC8pfCheIyl8KF5bXHctXGRdKjopLzsKICAgIGxldCB3b3JraW5nVVJMOwogICAgbGV0IHJlc29sdmVEb2M7CiAgICAvKioKICAgICAqIFJlc29sdmVzIHRoZSBnaXZlbiBVUkwgYWdhaW5zdCB0aGUgcHJvdmlkZWQgYGJhc2VVcmknLgogICAgICogCiAgICAgKiBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBwZXJmb3JtcyBubyByZXNvbHV0aW9uIGZvciBVUkxzIHRoYXQgc3RhcnQKICAgICAqIHdpdGggYC9gIChhYnNvbHV0ZSBVUkxzKSBvciBgI2AgKGhhc2ggaWRlbnRpZmllcnMpLiAgRm9yIGdlbmVyYWwgcHVycG9zZQogICAgICogVVJMIHJlc29sdXRpb24sIHVzZSBgd2luZG93LlVSTGAuCiAgICAgKgogICAgICogQG1lbWJlcm9mIFBvbHltZXIuUmVzb2x2ZVVybAogICAgICogQHBhcmFtIHtzdHJpbmd9IHVybCBJbnB1dCBVUkwgdG8gcmVzb2x2ZQogICAgICogQHBhcmFtIHs/c3RyaW5nPX0gYmFzZVVSSSBCYXNlIFVSSSB0byByZXNvbHZlIHRoZSBVUkwgYWdhaW5zdAogICAgICogQHJldHVybiB7c3RyaW5nfSByZXNvbHZlZCBVUkwKICAgICAqLwogICAgZnVuY3Rpb24gcmVzb2x2ZVVybCh1cmwsIGJhc2VVUkkpIHsKICAgICAgaWYgKHVybCAmJiBBQlNfVVJMLnRlc3QodXJsKSkgewogICAgICAgIHJldHVybiB1cmw7CiAgICAgIH0KICAgICAgLy8gTGF6eSBmZWF0dXJlIGRldGVjdGlvbi4KICAgICAgaWYgKHdvcmtpbmdVUkwgPT09IHVuZGVmaW5lZCkgewogICAgICAgIHdvcmtpbmdVUkwgPSBmYWxzZTsKICAgICAgICB0cnkgewogICAgICAgICAgY29uc3QgdSA9IG5ldyBVUkwoJ2InLCAnaHR0cDovL2EnKTsKICAgICAgICAgIHUucGF0aG5hbWUgPSAnYyUyMGQnOwogICAgICAgICAgd29ya2luZ1VSTCA9ICh1LmhyZWYgPT09ICdodHRwOi8vYS9jJTIwZCcpOwogICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgIC8vIHNpbGVudGx5IGZhaWwKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKCFiYXNlVVJJKSB7CiAgICAgICAgYmFzZVVSSSA9IGRvY3VtZW50LmJhc2VVUkkgfHwgd2luZG93LmxvY2F0aW9uLmhyZWY7CiAgICAgIH0KICAgICAgaWYgKHdvcmtpbmdVUkwpIHsKICAgICAgICByZXR1cm4gKG5ldyBVUkwodXJsLCBiYXNlVVJJKSkuaHJlZjsKICAgICAgfQogICAgICAvLyBGYWxsYmFjayB0byBjcmVhdGluZyBhbiBhbmNob3IgaW50byBhIGRpc2Nvbm5lY3RlZCBkb2N1bWVudC4KICAgICAgaWYgKCFyZXNvbHZlRG9jKSB7CiAgICAgICAgcmVzb2x2ZURvYyA9IGRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCgndGVtcCcpOwogICAgICAgIHJlc29sdmVEb2MuYmFzZSA9IHJlc29sdmVEb2MuY3JlYXRlRWxlbWVudCgnYmFzZScpOwogICAgICAgIHJlc29sdmVEb2MuaGVhZC5hcHBlbmRDaGlsZChyZXNvbHZlRG9jLmJhc2UpOwogICAgICAgIHJlc29sdmVEb2MuYW5jaG9yID0gcmVzb2x2ZURvYy5jcmVhdGVFbGVtZW50KCdhJyk7CiAgICAgICAgcmVzb2x2ZURvYy5ib2R5LmFwcGVuZENoaWxkKHJlc29sdmVEb2MuYW5jaG9yKTsKICAgICAgfQogICAgICByZXNvbHZlRG9jLmJhc2UuaHJlZiA9IGJhc2VVUkk7CiAgICAgIHJlc29sdmVEb2MuYW5jaG9yLmhyZWYgPSB1cmw7CiAgICAgIHJldHVybiByZXNvbHZlRG9jLmFuY2hvci5ocmVmIHx8IHVybDsKCiAgICB9CgogICAgLyoqCiAgICAgKiBSZXNvbHZlcyBhbnkgcmVsYXRpdmUgVVJMJ3MgaW4gdGhlIGdpdmVuIENTUyB0ZXh0IGFnYWluc3QgdGhlIHByb3ZpZGVkCiAgICAgKiBgb3duZXJEb2N1bWVudGAncyBgYmFzZVVSSWAuCiAgICAgKgogICAgICogQG1lbWJlcm9mIFBvbHltZXIuUmVzb2x2ZVVybAogICAgICogQHBhcmFtIHtzdHJpbmd9IGNzc1RleHQgQ1NTIHRleHQgdG8gcHJvY2VzcwogICAgICogQHBhcmFtIHtzdHJpbmd9IGJhc2VVUkkgQmFzZSBVUkkgdG8gcmVzb2x2ZSB0aGUgVVJMIGFnYWluc3QKICAgICAqIEByZXR1cm4ge3N0cmluZ30gUHJvY2Vzc2VkIENTUyB0ZXh0IHdpdGggcmVzb2x2ZWQgVVJMJ3MKICAgICAqLwogICAgZnVuY3Rpb24gcmVzb2x2ZUNzcyhjc3NUZXh0LCBiYXNlVVJJKSB7CiAgICAgIHJldHVybiBjc3NUZXh0LnJlcGxhY2UoQ1NTX1VSTF9SWCwgZnVuY3Rpb24obSwgcHJlLCB1cmwsIHBvc3QpIHsKICAgICAgICByZXR1cm4gcHJlICsgJ1wnJyArCiAgICAgICAgICByZXNvbHZlVXJsKHVybC5yZXBsYWNlKC9bIiddL2csICcnKSwgYmFzZVVSSSkgKwogICAgICAgICAgJ1wnJyArIHBvc3Q7CiAgICAgIH0pOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyBhIHBhdGggZnJvbSBhIGdpdmVuIGB1cmxgLiBUaGUgcGF0aCBpbmNsdWRlcyB0aGUgdHJhaWxpbmcKICAgICAqIGAvYCBmcm9tIHRoZSB1cmwuCiAgICAgKgogICAgICogQG1lbWJlcm9mIFBvbHltZXIuUmVzb2x2ZVVybAogICAgICogQHBhcmFtIHtzdHJpbmd9IHVybCBJbnB1dCBVUkwgdG8gdHJhbnNmb3JtCiAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IHJlc29sdmVkIHBhdGgKICAgICAqLwogICAgZnVuY3Rpb24gcGF0aEZyb21VcmwodXJsKSB7CiAgICAgIHJldHVybiB1cmwuc3Vic3RyaW5nKDAsIHVybC5sYXN0SW5kZXhPZignLycpICsgMSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBNb2R1bGUgd2l0aCB1dGlsaXRpZXMgZm9yIHJlc29sdmluZyByZWxhdGl2ZSBVUkwncy4KICAgICAqCiAgICAgKiBAbmFtZXNwYWNlCiAgICAgKiBAbWVtYmVyb2YgUG9seW1lcgogICAgICogQHN1bW1hcnkgTW9kdWxlIHdpdGggdXRpbGl0aWVzIGZvciByZXNvbHZpbmcgcmVsYXRpdmUgVVJMJ3MuCiAgICAgKi8KICAgIFBvbHltZXIuUmVzb2x2ZVVybCA9IHsKICAgICAgcmVzb2x2ZUNzczogcmVzb2x2ZUNzcywKICAgICAgcmVzb2x2ZVVybDogcmVzb2x2ZVVybCwKICAgICAgcGF0aEZyb21Vcmw6IHBhdGhGcm9tVXJsCiAgICB9OwoKICB9KSgpOwoKPC9zY3JpcHQ+PHNjcmlwdD4KLyoqIEBzdXBwcmVzcyB7ZGVwcmVjYXRlZH0gKi8KKGZ1bmN0aW9uKCkgewogICd1c2Ugc3RyaWN0JzsKCiAgLyoqCiAgICogU2V0cyB0aGUgZ2xvYmFsLCBsZWdhY3kgc2V0dGluZ3MuCiAgICoKICAgKiBAZGVwcmVjYXRlZAogICAqIEBuYW1lc3BhY2UKICAgKiBAbWVtYmVyb2YgUG9seW1lcgogICAqLwogIFBvbHltZXIuU2V0dGluZ3MgPSBQb2x5bWVyLlNldHRpbmdzIHx8IHt9OwoKICBQb2x5bWVyLlNldHRpbmdzLnVzZVNoYWRvdyA9ICEod2luZG93LlNoYWR5RE9NKTsKICBQb2x5bWVyLlNldHRpbmdzLnVzZU5hdGl2ZUNTU1Byb3BlcnRpZXMgPQogICAgQm9vbGVhbighd2luZG93LlNoYWR5Q1NTIHx8IHdpbmRvdy5TaGFkeUNTUy5uYXRpdmVDc3MpOwogIFBvbHltZXIuU2V0dGluZ3MudXNlTmF0aXZlQ3VzdG9tRWxlbWVudHMgPQogICAgISh3aW5kb3cuY3VzdG9tRWxlbWVudHMucG9seWZpbGxXcmFwRmx1c2hDYWxsYmFjayk7CgoKICAvKioKICAgKiBHbG9iYWxseSBzZXR0YWJsZSBwcm9wZXJ0eSB0aGF0IGlzIGF1dG9tYXRpY2FsbHkgYXNzaWduZWQgdG8KICAgKiBgUG9seW1lci5FbGVtZW50TWl4aW5gIGluc3RhbmNlcywgdXNlZnVsIGZvciBiaW5kaW5nIGluIHRlbXBsYXRlcyB0bwogICAqIG1ha2UgVVJMJ3MgcmVsYXRpdmUgdG8gYW4gYXBwbGljYXRpb24ncyByb290LiAgRGVmYXVsdHMgdG8gdGhlIG1haW4KICAgKiBkb2N1bWVudCBVUkwsIGJ1dCBjYW4gYmUgb3ZlcnJpZGRlbiBieSB1c2Vycy4gIEl0IG1heSBiZSB1c2VmdWwgdG8gc2V0CiAgICogYFBvbHltZXIucm9vdFBhdGhgIHRvIHByb3ZpZGUgYSBzdGFibGUgYXBwbGljYXRpb24gbW91bnQgcGF0aCB3aGVuCiAgICogdXNpbmcgY2xpZW50IHNpZGUgcm91dGluZy4KICAgKgogICAqIEBtZW1iZXJvZiBQb2x5bWVyCiAgICovCiAgUG9seW1lci5yb290UGF0aCA9IFBvbHltZXIucm9vdFBhdGggfHwKICAgIFBvbHltZXIuUmVzb2x2ZVVybC5wYXRoRnJvbVVybChkb2N1bWVudC5iYXNlVVJJIHx8IHdpbmRvdy5sb2NhdGlvbi5ocmVmKTsKCiAgLyoqCiAgICogU2V0cyB0aGUgZ2xvYmFsIHJvb3RQYXRoIHByb3BlcnR5IHVzZWQgYnkgYFBvbHltZXIuRWxlbWVudE1peGluYCBhbmQKICAgKiBhdmFpbGFibGUgdmlhIGBQb2x5bWVyLnJvb3RQYXRoYC4KICAgKgogICAqIEBtZW1iZXJvZiBQb2x5bWVyCiAgICogQHBhcmFtIHtzdHJpbmd9IHBhdGggVGhlIG5ldyByb290IHBhdGgKICAgKiBAcmV0dXJuIHt2b2lkfQogICAqLwogIFBvbHltZXIuc2V0Um9vdFBhdGggPSBmdW5jdGlvbihwYXRoKSB7CiAgICBQb2x5bWVyLnJvb3RQYXRoID0gcGF0aDsKICB9OwoKICAvKioKICAgKiBBIGdsb2JhbCBjYWxsYmFjayB1c2VkIHRvIHNhbml0aXplIGFueSB2YWx1ZSBiZWZvcmUgaW5zZXJ0aW5nIGl0IGludG8gdGhlIERPTS4gVGhlIGNhbGxiYWNrIHNpZ25hdHVyZSBpczoKICAgKgogICAqICAgICBQb2x5bWVyID0gewogICAqICAgICAgIHNhbml0aXplRE9NVmFsdWU6IGZ1bmN0aW9uKHZhbHVlLCBuYW1lLCB0eXBlLCBub2RlKSB7IC4uLiB9CiAgICogICAgIH0KICAgKgogICAqIFdoZXJlOgogICAqCiAgICogYHZhbHVlYCBpcyB0aGUgdmFsdWUgdG8gc2FuaXRpemUuCiAgICogYG5hbWVgIGlzIHRoZSBuYW1lIG9mIGFuIGF0dHJpYnV0ZSBvciBwcm9wZXJ0eSAoZm9yIGV4YW1wbGUsIGhyZWYpLgogICAqIGB0eXBlYCBpbmRpY2F0ZXMgd2hlcmUgdGhlIHZhbHVlIGlzIGJlaW5nIGluc2VydGVkOiBvbmUgb2YgcHJvcGVydHksIGF0dHJpYnV0ZSwgb3IgdGV4dC4KICAgKiBgbm9kZWAgaXMgdGhlIG5vZGUgd2hlcmUgdGhlIHZhbHVlIGlzIGJlaW5nIGluc2VydGVkLgogICAqCiAgICogQHR5cGUgeyhmdW5jdGlvbigqLHN0cmluZyxzdHJpbmcsTm9kZSk6Kil8dW5kZWZpbmVkfQogICAqIEBtZW1iZXJvZiBQb2x5bWVyCiAgICovCiAgUG9seW1lci5zYW5pdGl6ZURPTVZhbHVlID0gUG9seW1lci5zYW5pdGl6ZURPTVZhbHVlIHx8IG51bGw7CgogIC8qKgogICAqIFNldHMgdGhlIGdsb2JhbCBzYW5pdGl6ZURPTVZhbHVlIGF2YWlsYWJsZSB2aWEgYFBvbHltZXIuc2FuaXRpemVET01WYWx1ZWAuCiAgICoKICAgKiBAbWVtYmVyb2YgUG9seW1lcgogICAqIEBwYXJhbSB7KGZ1bmN0aW9uKCosc3RyaW5nLHN0cmluZyxOb2RlKToqKXx1bmRlZmluZWR9IG5ld1Nhbml0aXplRE9NVmFsdWUgdGhlIGdsb2JhbCBzYW5pdGl6ZURPTVZhbHVlIGNhbGxiYWNrCiAgICogQHJldHVybiB7dm9pZH0KICAgKi8KICBQb2x5bWVyLnNldFNhbml0aXplRE9NVmFsdWUgPSBmdW5jdGlvbihuZXdTYW5pdGl6ZURPTVZhbHVlKSB7CiAgICBQb2x5bWVyLnNhbml0aXplRE9NVmFsdWUgPSBuZXdTYW5pdGl6ZURPTVZhbHVlOwogIH07CgogIC8qKgogICAqIEdsb2JhbGx5IHNldHRhYmxlIHByb3BlcnR5IHRvIG1ha2UgUG9seW1lciBHZXN0dXJlcyB1c2UgcGFzc2l2ZSBUb3VjaEV2ZW50IGxpc3RlbmVycyB3aGVuIHJlY29nbml6aW5nIGdlc3R1cmVzLgogICAqIFdoZW4gc2V0IHRvIGB0cnVlYCwgZ2VzdHVyZXMgbWFkZSBmcm9tIHRvdWNoIHdpbGwgbm90IGJlIGFibGUgdG8gcHJldmVudCBzY3JvbGxpbmcsIGFsbG93aW5nIGZvciBzbW9vdGhlcgogICAqIHNjcm9sbGluZyBwZXJmb3JtYW5jZS4KICAgKiBEZWZhdWx0cyB0byBgZmFsc2VgIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4KICAgKgogICAqIEBtZW1iZXJvZiBQb2x5bWVyCiAgICovCiAgUG9seW1lci5wYXNzaXZlVG91Y2hHZXN0dXJlcyA9IFBvbHltZXIucGFzc2l2ZVRvdWNoR2VzdHVyZXMgfHwgZmFsc2U7CgogIC8qKgogICAqIFNldHMgYHBhc3NpdmVUb3VjaEdlc3R1cmVzYCBnbG9iYWxseSBmb3IgYWxsIGVsZW1lbnRzIHVzaW5nIFBvbHltZXIgR2VzdHVyZXMuCiAgICoKICAgKiBAbWVtYmVyb2YgUG9seW1lcgogICAqIEBwYXJhbSB7Ym9vbGVhbn0gdXNlUGFzc2l2ZSBlbmFibGUgb3IgZGlzYWJsZSBwYXNzaXZlIHRvdWNoIGdlc3R1cmVzIGdsb2JhbGx5CiAgICogQHJldHVybiB7dm9pZH0KICAgKi8KICBQb2x5bWVyLnNldFBhc3NpdmVUb3VjaEdlc3R1cmVzID0gZnVuY3Rpb24odXNlUGFzc2l2ZSkgewogICAgUG9seW1lci5wYXNzaXZlVG91Y2hHZXN0dXJlcyA9IHVzZVBhc3NpdmU7CiAgfTsKCiAgUG9seW1lci5sZWdhY3lPcHRpbWl6YXRpb25zID0gUG9seW1lci5sZWdhY3lPcHRpbWl6YXRpb25zIHx8CiAgICAgIHdpbmRvdy5Qb2x5bWVyU2V0dGluZ3MgJiYgd2luZG93LlBvbHltZXJTZXR0aW5ncy5sZWdhY3lPcHRpbWl6YXRpb25zIHx8IGZhbHNlOwoKICAvKioKICAgKiBTZXRzIGBsZWdhY3lPcHRpbWl6YXRpb25zYCBnbG9iYWxseSBmb3IgYWxsIGVsZW1lbnRzLiBFbmFibGVzCiAgICogb3B0aW1pemF0aW9ucyB3aGVuIG9ubHkgbGVnYWN5IFBvbHltZXIoKSBzdHlsZSBlbGVtZW50cyBhcmUgdXNlZC4KICAgKgogICAqIEBtZW1iZXJvZiBQb2x5bWVyCiAgICogQHBhcmFtIHtib29sZWFufSB1c2VMZWdhY3lPcHRpbWl6YXRpb25zIGVuYWJsZSBvciBkaXNhYmxlIGxlZ2FjeSBvcHRpbWl6YXRpb25zIGdsb2JhbGx5LgogICAqIEByZXR1cm4ge3ZvaWR9CiAgICovCiAgUG9seW1lci5zZXRMZWdhY3lPcHRpbWl6YXRpb25zID0gZnVuY3Rpb24odXNlTGVnYWN5T3B0aW1pemF0aW9ucykgewogICAgUG9seW1lci5sZWdhY3lPcHRpbWl6YXRpb25zID0gdXNlTGVnYWN5T3B0aW1pemF0aW9uczsKICB9Owp9KSgpOwo8L3NjcmlwdD48c2NyaXB0PgoKKGZ1bmN0aW9uKCkgewoKICAndXNlIHN0cmljdCc7CgogIC8vIHVuaXF1ZSBnbG9iYWwgaWQgZm9yIGRlZHVwaW5nIG1peGlucy4KICBsZXQgZGVkdXBlSWQgPSAwOwoKICAvKioKICAgKiBAY29uc3RydWN0b3IKICAgKiBAZXh0ZW5kcyB7RnVuY3Rpb259CiAgICogQHByaXZhdGUKICAgKi8KICBmdW5jdGlvbiBNaXhpbkZ1bmN0aW9uKCl7fQogIC8qKiBAdHlwZSB7KFdlYWtNYXAgfCB1bmRlZmluZWQpfSAqLwogIE1peGluRnVuY3Rpb24ucHJvdG90eXBlLl9fbWl4aW5BcHBsaWNhdGlvbnM7CiAgLyoqIEB0eXBlIHsoT2JqZWN0IHwgdW5kZWZpbmVkKX0gKi8KICBNaXhpbkZ1bmN0aW9uLnByb3RvdHlwZS5fX21peGluU2V0OwoKICAvKiBlc2xpbnQtZGlzYWJsZSB2YWxpZC1qc2RvYyAqLwogIC8qKgogICAqIFdyYXBzIGFuIEVTNiBjbGFzcyBleHByZXNzaW9uIG1peGluIHN1Y2ggdGhhdCB0aGUgbWl4aW4gaXMgb25seSBhcHBsaWVkCiAgICogaWYgaXQgaGFzIG5vdCBhbHJlYWR5IGJlZW4gYXBwbGllZCBpdHMgYmFzZSBhcmd1bWVudC4gQWxzbyBtZW1vaXplcyBtaXhpbgogICAqIGFwcGxpY2F0aW9ucy4KICAgKgogICAqIEBtZW1iZXJvZiBQb2x5bWVyCiAgICogQHRlbXBsYXRlIFQKICAgKiBAcGFyYW0ge1R9IG1peGluIEVTNiBjbGFzcyBleHByZXNzaW9uIG1peGluIHRvIHdyYXAKICAgKiBAcmV0dXJuIHtUfQogICAqIEBzdXBwcmVzcyB7aW52YWxpZENhc3RzfQogICAqLwogIFBvbHltZXIuZGVkdXBpbmdNaXhpbiA9IGZ1bmN0aW9uKG1peGluKSB7CiAgICBsZXQgbWl4aW5BcHBsaWNhdGlvbnMgPSAvKiogQHR5cGUgeyFNaXhpbkZ1bmN0aW9ufSAqLyhtaXhpbikuX19taXhpbkFwcGxpY2F0aW9uczsKICAgIGlmICghbWl4aW5BcHBsaWNhdGlvbnMpIHsKICAgICAgbWl4aW5BcHBsaWNhdGlvbnMgPSBuZXcgV2Vha01hcCgpOwogICAgICAvKiogQHR5cGUgeyFNaXhpbkZ1bmN0aW9ufSAqLyhtaXhpbikuX19taXhpbkFwcGxpY2F0aW9ucyA9IG1peGluQXBwbGljYXRpb25zOwogICAgfQogICAgLy8gbWFpbnRhaW4gYSB1bmlxdWUgaWQgZm9yIGVhY2ggbWl4aW4KICAgIGxldCBtaXhpbkRlZHVwZUlkID0gZGVkdXBlSWQrKzsKICAgIGZ1bmN0aW9uIGRlZHVwaW5nTWl4aW4oYmFzZSkgewogICAgICBsZXQgYmFzZVNldCA9IC8qKiBAdHlwZSB7IU1peGluRnVuY3Rpb259ICovKGJhc2UpLl9fbWl4aW5TZXQ7CiAgICAgIGlmIChiYXNlU2V0ICYmIGJhc2VTZXRbbWl4aW5EZWR1cGVJZF0pIHsKICAgICAgICByZXR1cm4gYmFzZTsKICAgICAgfQogICAgICBsZXQgbWFwID0gbWl4aW5BcHBsaWNhdGlvbnM7CiAgICAgIGxldCBleHRlbmRlZCA9IG1hcC5nZXQoYmFzZSk7CiAgICAgIGlmICghZXh0ZW5kZWQpIHsKICAgICAgICBleHRlbmRlZCA9IC8qKiBAdHlwZSB7IUZ1bmN0aW9ufSAqLyhtaXhpbikoYmFzZSk7CiAgICAgICAgbWFwLnNldChiYXNlLCBleHRlbmRlZCk7CiAgICAgIH0KICAgICAgLy8gY29weSBpbmhlcml0ZWQgbWl4aW4gc2V0IGZyb20gdGhlIGV4dGVuZGVkIGNsYXNzLCBvciB0aGUgYmFzZSBjbGFzcwogICAgICAvLyBOT1RFOiB3ZSBhdm9pZCB1c2Ugb2YgU2V0IGhlcmUgYmVjYXVzZSBzb21lIGJyb3dzZXIgKElFMTEpCiAgICAgIC8vIGNhbm5vdCBleHRlbmQgYSBiYXNlIFNldCB2aWEgdGhlIGNvbnN0cnVjdG9yLgogICAgICBsZXQgbWl4aW5TZXQgPSBPYmplY3QuY3JlYXRlKC8qKiBAdHlwZSB7IU1peGluRnVuY3Rpb259ICovKGV4dGVuZGVkKS5fX21peGluU2V0IHx8IGJhc2VTZXQgfHwgbnVsbCk7CiAgICAgIG1peGluU2V0W21peGluRGVkdXBlSWRdID0gdHJ1ZTsKICAgICAgLyoqIEB0eXBlIHshTWl4aW5GdW5jdGlvbn0gKi8oZXh0ZW5kZWQpLl9fbWl4aW5TZXQgPSBtaXhpblNldDsKICAgICAgcmV0dXJuIGV4dGVuZGVkOwogICAgfQoKICAgIHJldHVybiAvKiogQHR5cGUge1R9ICovIChkZWR1cGluZ01peGluKTsKICB9OwogIC8qIGVzbGludC1lbmFibGUgdmFsaWQtanNkb2MgKi8KCn0pKCk7Cgo8L3NjcmlwdD48c2NyaXB0PgooZnVuY3Rpb24oKSB7CiAgJ3VzZSBzdHJpY3QnOwoKICBjb25zdCBNT0RVTEVfU1RZTEVfTElOS19TRUxFQ1RPUiA9ICdsaW5rW3JlbD1pbXBvcnRdW3R5cGV+PWNzc10nOwogIGNvbnN0IElOQ0xVREVfQVRUUiA9ICdpbmNsdWRlJzsKICBjb25zdCBTSEFEWV9VTlNDT1BFRF9BVFRSID0gJ3NoYWR5LXVuc2NvcGVkJzsKCiAgZnVuY3Rpb24gaW1wb3J0TW9kdWxlKG1vZHVsZUlkKSB7CiAgICBjb25zdCAvKiogUG9seW1lci5Eb21Nb2R1bGUgKi8gUG9seW1lckRvbU1vZHVsZSA9IGN1c3RvbUVsZW1lbnRzLmdldCgnZG9tLW1vZHVsZScpOwogICAgaWYgKCFQb2x5bWVyRG9tTW9kdWxlKSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgcmV0dXJuIFBvbHltZXJEb21Nb2R1bGUuaW1wb3J0KG1vZHVsZUlkKTsKICB9CgogIGZ1bmN0aW9uIHN0eWxlRm9ySW1wb3J0KGltcG9ydERvYykgewogICAgLy8gTk9URTogcG9seWZpbGwgYWZmb3JkYW5jZS4KICAgIC8vIHVuZGVyIHRoZSBIVE1MSW1wb3J0cyBwb2x5ZmlsbCwgdGhlcmUgd2lsbCBiZSBubyAnYm9keScsCiAgICAvLyBidXQgdGhlIGltcG9ydCBwc2V1ZG8tZG9jIGNhbiBiZSB1c2VkIGRpcmVjdGx5LgogICAgbGV0IGNvbnRhaW5lciA9IGltcG9ydERvYy5ib2R5ID8gaW1wb3J0RG9jLmJvZHkgOiBpbXBvcnREb2M7CiAgICBjb25zdCBpbXBvcnRDc3MgPSBQb2x5bWVyLlJlc29sdmVVcmwucmVzb2x2ZUNzcyhjb250YWluZXIudGV4dENvbnRlbnQsCiAgICAgIGltcG9ydERvYy5iYXNlVVJJKTsKICAgIGNvbnN0IHN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTsKICAgIHN0eWxlLnRleHRDb250ZW50ID0gaW1wb3J0Q3NzOwogICAgcmV0dXJuIHN0eWxlOwogIH0KCiAgLyoqIEB0eXBlZGVmIHt7YXNzZXRwYXRoOiBzdHJpbmd9fSAqLwogIGxldCB0ZW1wbGF0ZVdpdGhBc3NldFBhdGg7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnMKCiAgLyoqCiAgICogTW9kdWxlIHdpdGggdXRpbGl0aWVzIGZvciBjb2xsZWN0aW9uIENTUyB0ZXh0IGZyb20gYDx0ZW1wbGF0ZXM+YCwgZXh0ZXJuYWwKICAgKiBzdHlsZXNoZWV0cywgYW5kIGBkb20tbW9kdWxlYHMuCiAgICoKICAgKiBAbmFtZXNwYWNlCiAgICogQG1lbWJlcm9mIFBvbHltZXIKICAgKiBAc3VtbWFyeSBNb2R1bGUgd2l0aCB1dGlsaXRpZXMgZm9yIGNvbGxlY3Rpb24gQ1NTIHRleHQgZnJvbSB2YXJpb3VzIHNvdXJjZXMuCiAgICovCiAgY29uc3QgU3R5bGVHYXRoZXIgPSB7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGEgbGlzdCBvZiA8c3R5bGU+IGVsZW1lbnRzIGluIGEgc3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2YgYGRvbS1tb2R1bGVgcy4KICAgICAqCiAgICAgKiBAbWVtYmVyb2YgUG9seW1lci5TdHlsZUdhdGhlcgogICAgICogQHBhcmFtIHtzdHJpbmd9IG1vZHVsZUlkcyBMaXN0IG9mIGRvbS1tb2R1bGUgaWQncyB3aXRoaW4gd2hpY2ggdG8KICAgICAqIHNlYXJjaCBmb3IgY3NzLgogICAgICogQHJldHVybiB7IUFycmF5PCFIVE1MU3R5bGVFbGVtZW50Pn0gQXJyYXkgb2YgY29udGFpbmVkIDxzdHlsZT4gZWxlbWVudHMKICAgICAqIEB0aGlzIHtTdHlsZUdhdGhlcn0KICAgICAqLwogICAgIHN0eWxlc0Zyb21Nb2R1bGVzKG1vZHVsZUlkcykgewogICAgICBjb25zdCBtb2R1bGVzID0gbW9kdWxlSWRzLnRyaW0oKS5zcGxpdCgvXHMrLyk7CiAgICAgIGNvbnN0IHN0eWxlcyA9IFtdOwogICAgICBmb3IgKGxldCBpPTA7IGkgPCBtb2R1bGVzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgc3R5bGVzLnB1c2goLi4udGhpcy5zdHlsZXNGcm9tTW9kdWxlKG1vZHVsZXNbaV0pKTsKICAgICAgfQogICAgICByZXR1cm4gc3R5bGVzOwogICAgfSwKCiAgICAvKioKICAgICAqIFJldHVybnMgYSBsaXN0IG9mIDxzdHlsZT4gZWxlbWVudHMgaW4gYSBnaXZlbiBgZG9tLW1vZHVsZWAuCiAgICAgKiBTdHlsZXMgaW4gYSBgZG9tLW1vZHVsZWAgY2FuIGNvbWUgZWl0aGVyIGZyb20gYDxzdHlsZT5gcyB3aXRoaW4gdGhlCiAgICAgKiBmaXJzdCBgPHRlbXBsYXRlPmAsIG9yIGVsc2UgZnJvbSBvbmUgb3IgbW9yZQogICAgICogYDxsaW5rIHJlbD0iaW1wb3J0IiB0eXBlPSJjc3MiPmAgbGlua3Mgb3V0c2lkZSB0aGUgdGVtcGxhdGUuCiAgICAgKgogICAgICogQG1lbWJlcm9mIFBvbHltZXIuU3R5bGVHYXRoZXIKICAgICAqIEBwYXJhbSB7c3RyaW5nfSBtb2R1bGVJZCBkb20tbW9kdWxlIGlkIHRvIGdhdGhlciBzdHlsZXMgZnJvbQogICAgICogQHJldHVybiB7IUFycmF5PCFIVE1MU3R5bGVFbGVtZW50Pn0gQXJyYXkgb2YgY29udGFpbmVkIHN0eWxlcy4KICAgICAqIEB0aGlzIHtTdHlsZUdhdGhlcn0KICAgICAqLwogICAgc3R5bGVzRnJvbU1vZHVsZShtb2R1bGVJZCkgewogICAgICBjb25zdCBtID0gaW1wb3J0TW9kdWxlKG1vZHVsZUlkKTsKCiAgICAgIGlmICghbSkgewogICAgICAgIGNvbnNvbGUud2FybignQ291bGQgbm90IGZpbmQgc3R5bGUgZGF0YSBpbiBtb2R1bGUgbmFtZWQnLCBtb2R1bGVJZCk7CiAgICAgICAgcmV0dXJuIFtdOwogICAgICB9CgogICAgICBpZiAobS5fc3R5bGVzID09PSB1bmRlZmluZWQpIHsKICAgICAgICBjb25zdCBzdHlsZXMgPSBbXTsKICAgICAgICAvLyBtb2R1bGUgaW1wb3J0czogPGxpbmsgcmVsPSJpbXBvcnQiIHR5cGU9ImNzcyI+CiAgICAgICAgc3R5bGVzLnB1c2goLi4udGhpcy5fc3R5bGVzRnJvbU1vZHVsZUltcG9ydHMobSkpOwogICAgICAgIC8vIGluY2x1ZGUgY3NzIGZyb20gdGhlIGZpcnN0IHRlbXBsYXRlIGluIHRoZSBtb2R1bGUKICAgICAgICBjb25zdCB0ZW1wbGF0ZSA9IG0ucXVlcnlTZWxlY3RvcigndGVtcGxhdGUnKTsKICAgICAgICBpZiAodGVtcGxhdGUpIHsKICAgICAgICAgIHN0eWxlcy5wdXNoKC4uLnRoaXMuc3R5bGVzRnJvbVRlbXBsYXRlKHRlbXBsYXRlLAogICAgICAgICAgICAvKiogQHR5cGUge3RlbXBsYXRlV2l0aEFzc2V0UGF0aH0gKi8obSkuYXNzZXRwYXRoKSk7CiAgICAgICAgfQoKICAgICAgICBtLl9zdHlsZXMgPSBzdHlsZXM7CiAgICAgIH0KCiAgICAgIHJldHVybiBtLl9zdHlsZXM7CiAgICB9LAoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgYDxzdHlsZT5gIGVsZW1lbnRzIHdpdGhpbiBhIGdpdmVuIHRlbXBsYXRlLgogICAgICoKICAgICAqIEBtZW1iZXJvZiBQb2x5bWVyLlN0eWxlR2F0aGVyCiAgICAgKiBAcGFyYW0geyFIVE1MVGVtcGxhdGVFbGVtZW50fSB0ZW1wbGF0ZSBUZW1wbGF0ZSB0byBnYXRoZXIgc3R5bGVzIGZyb20KICAgICAqIEBwYXJhbSB7c3RyaW5nfSBiYXNlVVJJIGJhc2VVUkkgZm9yIHN0eWxlIGNvbnRlbnQKICAgICAqIEByZXR1cm4geyFBcnJheTwhSFRNTFN0eWxlRWxlbWVudD59IEFycmF5IG9mIHN0eWxlcwogICAgICogQHRoaXMge1N0eWxlR2F0aGVyfQogICAgICovCiAgICBzdHlsZXNGcm9tVGVtcGxhdGUodGVtcGxhdGUsIGJhc2VVUkkpIHsKICAgICAgaWYgKCF0ZW1wbGF0ZS5fc3R5bGVzKSB7CiAgICAgICAgY29uc3Qgc3R5bGVzID0gW107CiAgICAgICAgLy8gaWYgZWxlbWVudCBpcyBhIHRlbXBsYXRlLCBnZXQgY29udGVudCBmcm9tIGl0cyAuY29udGVudAogICAgICAgIGNvbnN0IGUkID0gdGVtcGxhdGUuY29udGVudC5xdWVyeVNlbGVjdG9yQWxsKCdzdHlsZScpOwogICAgICAgIGZvciAobGV0IGk9MDsgaSA8IGUkLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICBsZXQgZSA9IGUkW2ldOwogICAgICAgICAgLy8gc3VwcG9ydCBzdHlsZSBzaGFyaW5nIGJ5IGFsbG93aW5nIHN0eWxlcyB0byAiaW5jbHVkZSIKICAgICAgICAgIC8vIG90aGVyIGRvbS1tb2R1bGVzIHRoYXQgY29udGFpbiBzdHlsaW5nCiAgICAgICAgICBsZXQgaW5jbHVkZSA9IGUuZ2V0QXR0cmlidXRlKElOQ0xVREVfQVRUUik7CiAgICAgICAgICBpZiAoaW5jbHVkZSkgewogICAgICAgICAgICBzdHlsZXMucHVzaCguLi50aGlzLnN0eWxlc0Zyb21Nb2R1bGVzKGluY2x1ZGUpLmZpbHRlcihmdW5jdGlvbihpdGVtLCBpbmRleCwgc2VsZikgewogICAgICAgICAgICAgIHJldHVybiBzZWxmLmluZGV4T2YoaXRlbSkgPT09IGluZGV4OwogICAgICAgICAgICB9KSk7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoYmFzZVVSSSkgewogICAgICAgICAgICBlLnRleHRDb250ZW50ID0gUG9seW1lci5SZXNvbHZlVXJsLnJlc29sdmVDc3MoZS50ZXh0Q29udGVudCwgYmFzZVVSSSk7CiAgICAgICAgICB9CiAgICAgICAgICBzdHlsZXMucHVzaChlKTsKICAgICAgICB9CiAgICAgICAgdGVtcGxhdGUuX3N0eWxlcyA9IHN0eWxlczsKICAgICAgfQogICAgICByZXR1cm4gdGVtcGxhdGUuX3N0eWxlczsKICAgIH0sCgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGEgbGlzdCBvZiA8c3R5bGU+IGVsZW1lbnRzICBmcm9tIHN0eWxlc2hlZXRzIGxvYWRlZCB2aWEgYDxsaW5rIHJlbD0iaW1wb3J0IiB0eXBlPSJjc3MiPmAgbGlua3Mgd2l0aGluIHRoZSBzcGVjaWZpZWQgYGRvbS1tb2R1bGVgLgogICAgICoKICAgICAqIEBtZW1iZXJvZiBQb2x5bWVyLlN0eWxlR2F0aGVyCiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbW9kdWxlSWQgSWQgb2YgYGRvbS1tb2R1bGVgIHRvIGdhdGhlciBDU1MgZnJvbQogICAgICogQHJldHVybiB7IUFycmF5PCFIVE1MU3R5bGVFbGVtZW50Pn0gQXJyYXkgb2YgY29udGFpbmVkIHN0eWxlcy4KICAgICAqIEB0aGlzIHtTdHlsZUdhdGhlcn0KICAgICAqLwogICAgIHN0eWxlc0Zyb21Nb2R1bGVJbXBvcnRzKG1vZHVsZUlkKSB7CiAgICAgIGxldCBtID0gaW1wb3J0TW9kdWxlKG1vZHVsZUlkKTsKICAgICAgcmV0dXJuIG0gPyB0aGlzLl9zdHlsZXNGcm9tTW9kdWxlSW1wb3J0cyhtKSA6IFtdOwogICAgfSwKCiAgICAvKioKICAgICAqIEBtZW1iZXJvZiBQb2x5bWVyLlN0eWxlR2F0aGVyCiAgICAgKiBAdGhpcyB7U3R5bGVHYXRoZXJ9CiAgICAgKiBAcGFyYW0geyFIVE1MRWxlbWVudH0gbW9kdWxlIGRvbS1tb2R1bGUgZWxlbWVudCB0aGF0IGNvdWxkIGNvbnRhaW4gYDxsaW5rIHJlbD0iaW1wb3J0IiB0eXBlPSJjc3MiPmAgc3R5bGVzCiAgICAgKiBAcmV0dXJuIHshQXJyYXk8IUhUTUxTdHlsZUVsZW1lbnQ+fSBBcnJheSBvZiBjb250YWluZWQgc3R5bGVzCiAgICAgKi8KICAgIF9zdHlsZXNGcm9tTW9kdWxlSW1wb3J0cyhtb2R1bGUpIHsKICAgICAgY29uc3Qgc3R5bGVzID0gW107CiAgICAgIGNvbnN0IHAkID0gbW9kdWxlLnF1ZXJ5U2VsZWN0b3JBbGwoTU9EVUxFX1NUWUxFX0xJTktfU0VMRUNUT1IpOwogICAgICBmb3IgKGxldCBpPTA7IGkgPCBwJC5sZW5ndGg7IGkrKykgewogICAgICAgIGxldCBwID0gcCRbaV07CiAgICAgICAgaWYgKHAuaW1wb3J0KSB7CiAgICAgICAgICBjb25zdCBpbXBvcnREb2MgPSBwLmltcG9ydDsKICAgICAgICAgIGNvbnN0IHVuc2NvcGVkID0gcC5oYXNBdHRyaWJ1dGUoU0hBRFlfVU5TQ09QRURfQVRUUik7CiAgICAgICAgICBpZiAodW5zY29wZWQgJiYgIWltcG9ydERvYy5fdW5zY29wZWRTdHlsZSkgewogICAgICAgICAgICBjb25zdCBzdHlsZSA9IHN0eWxlRm9ySW1wb3J0KGltcG9ydERvYyk7CiAgICAgICAgICAgIHN0eWxlLnNldEF0dHJpYnV0ZShTSEFEWV9VTlNDT1BFRF9BVFRSLCAnJyk7CiAgICAgICAgICAgIGltcG9ydERvYy5fdW5zY29wZWRTdHlsZSA9IHN0eWxlOwogICAgICAgICAgfSBlbHNlIGlmICghaW1wb3J0RG9jLl9zdHlsZSkgewogICAgICAgICAgICBpbXBvcnREb2MuX3N0eWxlID0gc3R5bGVGb3JJbXBvcnQoaW1wb3J0RG9jKTsKICAgICAgICAgIH0KICAgICAgICAgIHN0eWxlcy5wdXNoKHVuc2NvcGVkID8gaW1wb3J0RG9jLl91bnNjb3BlZFN0eWxlIDogaW1wb3J0RG9jLl9zdHlsZSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBzdHlsZXM7CiAgICB9LAoKICAgIC8qKgogICAgICoKICAgICAqIFJldHVybnMgQ1NTIHRleHQgb2Ygc3R5bGVzIGluIGEgc3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2YgYGRvbS1tb2R1bGVgcy4KICAgICAqIE5vdGU6IFRoaXMgbWV0aG9kIGlzIGRlcHJlY2F0ZWQsIHVzZSBgc3R5bGVzRnJvbU1vZHVsZXNgIGluc3RlYWQuCiAgICAgKgogICAgICogQGRlcHJlY2F0ZWQKICAgICAqIEBtZW1iZXJvZiBQb2x5bWVyLlN0eWxlR2F0aGVyCiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbW9kdWxlSWRzIExpc3Qgb2YgZG9tLW1vZHVsZSBpZCdzIHdpdGhpbiB3aGljaCB0bwogICAgICogc2VhcmNoIGZvciBjc3MuCiAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IENvbmNhdGVuYXRlZCBDU1MgY29udGVudCBmcm9tIHNwZWNpZmllZCBgZG9tLW1vZHVsZWBzCiAgICAgKiBAdGhpcyB7U3R5bGVHYXRoZXJ9CiAgICAgKi8KICAgICBjc3NGcm9tTW9kdWxlcyhtb2R1bGVJZHMpIHsKICAgICAgbGV0IG1vZHVsZXMgPSBtb2R1bGVJZHMudHJpbSgpLnNwbGl0KC9ccysvKTsKICAgICAgbGV0IGNzc1RleHQgPSAnJzsKICAgICAgZm9yIChsZXQgaT0wOyBpIDwgbW9kdWxlcy5sZW5ndGg7IGkrKykgewogICAgICAgIGNzc1RleHQgKz0gdGhpcy5jc3NGcm9tTW9kdWxlKG1vZHVsZXNbaV0pOwogICAgICB9CiAgICAgIHJldHVybiBjc3NUZXh0OwogICAgfSwKCiAgICAvKioKICAgICAqIFJldHVybnMgQ1NTIHRleHQgb2Ygc3R5bGVzIGluIGEgZ2l2ZW4gYGRvbS1tb2R1bGVgLiAgQ1NTIGluIGEgYGRvbS1tb2R1bGVgCiAgICAgKiBjYW4gY29tZSBlaXRoZXIgZnJvbSBgPHN0eWxlPmBzIHdpdGhpbiB0aGUgZmlyc3QgYDx0ZW1wbGF0ZT5gLCBvciBlbHNlCiAgICAgKiBmcm9tIG9uZSBvciBtb3JlIGA8bGluayByZWw9ImltcG9ydCIgdHlwZT0iY3NzIj5gIGxpbmtzIG91dHNpZGUgdGhlCiAgICAgKiB0ZW1wbGF0ZS4KICAgICAqCiAgICAgKiBBbnkgYDxzdHlsZXM+YCBwcm9jZXNzZWQgYXJlIHJlbW92ZWQgZnJvbSB0aGVpciBvcmlnaW5hbCBsb2NhdGlvbi4KICAgICAqIE5vdGU6IFRoaXMgbWV0aG9kIGlzIGRlcHJlY2F0ZWQsIHVzZSBgc3R5bGVGcm9tTW9kdWxlYCBpbnN0ZWFkLgogICAgICoKICAgICAqIEBkZXByZWNhdGVkCiAgICAgKiBAbWVtYmVyb2YgUG9seW1lci5TdHlsZUdhdGhlcgogICAgICogQHBhcmFtIHtzdHJpbmd9IG1vZHVsZUlkIGRvbS1tb2R1bGUgaWQgdG8gZ2F0aGVyIHN0eWxlcyBmcm9tCiAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IENvbmNhdGVuYXRlZCBDU1MgY29udGVudCBmcm9tIHNwZWNpZmllZCBgZG9tLW1vZHVsZWAKICAgICAqIEB0aGlzIHtTdHlsZUdhdGhlcn0KICAgICAqLwogICAgY3NzRnJvbU1vZHVsZShtb2R1bGVJZCkgewogICAgICBsZXQgbSA9IGltcG9ydE1vZHVsZShtb2R1bGVJZCk7CiAgICAgIGlmIChtICYmIG0uX2Nzc1RleHQgPT09IHVuZGVmaW5lZCkgewogICAgICAgIC8vIG1vZHVsZSBpbXBvcnRzOiA8bGluayByZWw9ImltcG9ydCIgdHlwZT0iY3NzIj4KICAgICAgICBsZXQgY3NzVGV4dCA9IHRoaXMuX2Nzc0Zyb21Nb2R1bGVJbXBvcnRzKG0pOwogICAgICAgIC8vIGluY2x1ZGUgY3NzIGZyb20gdGhlIGZpcnN0IHRlbXBsYXRlIGluIHRoZSBtb2R1bGUKICAgICAgICBsZXQgdCA9IG0ucXVlcnlTZWxlY3RvcigndGVtcGxhdGUnKTsKICAgICAgICBpZiAodCkgewogICAgICAgICAgY3NzVGV4dCArPSB0aGlzLmNzc0Zyb21UZW1wbGF0ZSh0LAogICAgICAgICAgICAvKiogQHR5cGUge3RlbXBsYXRlV2l0aEFzc2V0UGF0aH0gKi8obSkuYXNzZXRwYXRoKTsKICAgICAgICB9CiAgICAgICAgbS5fY3NzVGV4dCA9IGNzc1RleHQgfHwgbnVsbDsKICAgICAgfQogICAgICBpZiAoIW0pIHsKICAgICAgICBjb25zb2xlLndhcm4oJ0NvdWxkIG5vdCBmaW5kIHN0eWxlIGRhdGEgaW4gbW9kdWxlIG5hbWVkJywgbW9kdWxlSWQpOwogICAgICB9CiAgICAgIHJldHVybiBtICYmIG0uX2Nzc1RleHQgfHwgJyc7CiAgICB9LAoKICAgIC8qKgogICAgICogUmV0dXJucyBDU1MgdGV4dCBvZiBgPHN0eWxlcz5gIHdpdGhpbiBhIGdpdmVuIHRlbXBsYXRlLgogICAgICoKICAgICAqIEFueSBgPHN0eWxlcz5gIHByb2Nlc3NlZCBhcmUgcmVtb3ZlZCBmcm9tIHRoZWlyIG9yaWdpbmFsIGxvY2F0aW9uLgogICAgICogTm90ZTogVGhpcyBtZXRob2QgaXMgZGVwcmVjYXRlZCwgdXNlIGBzdHlsZUZyb21UZW1wbGF0ZWAgaW5zdGVhZC4KICAgICAqCiAgICAgKiBAZGVwcmVjYXRlZAogICAgICogQG1lbWJlcm9mIFBvbHltZXIuU3R5bGVHYXRoZXIKICAgICAqIEBwYXJhbSB7IUhUTUxUZW1wbGF0ZUVsZW1lbnR9IHRlbXBsYXRlIFRlbXBsYXRlIHRvIGdhdGhlciBzdHlsZXMgZnJvbQogICAgICogQHBhcmFtIHtzdHJpbmd9IGJhc2VVUkkgQmFzZSBVUkkgdG8gcmVzb2x2ZSB0aGUgVVJMIGFnYWluc3QKICAgICAqIEByZXR1cm4ge3N0cmluZ30gQ29uY2F0ZW5hdGVkIENTUyBjb250ZW50IGZyb20gc3BlY2lmaWVkIHRlbXBsYXRlCiAgICAgKiBAdGhpcyB7U3R5bGVHYXRoZXJ9CiAgICAgKi8KICAgIGNzc0Zyb21UZW1wbGF0ZSh0ZW1wbGF0ZSwgYmFzZVVSSSkgewogICAgICBsZXQgY3NzVGV4dCA9ICcnOwogICAgICBjb25zdCBlJCA9IHRoaXMuc3R5bGVzRnJvbVRlbXBsYXRlKHRlbXBsYXRlLCBiYXNlVVJJKTsKICAgICAgLy8gaWYgZWxlbWVudCBpcyBhIHRlbXBsYXRlLCBnZXQgY29udGVudCBmcm9tIGl0cyAuY29udGVudAogICAgICBmb3IgKGxldCBpPTA7IGkgPCBlJC5sZW5ndGg7IGkrKykgewogICAgICAgIGxldCBlID0gZSRbaV07CiAgICAgICAgaWYgKGUucGFyZW50Tm9kZSkgewogICAgICAgICAgZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGUpOwogICAgICAgIH0KICAgICAgICBjc3NUZXh0ICs9IGUudGV4dENvbnRlbnQ7CiAgICAgIH0KICAgICAgcmV0dXJuIGNzc1RleHQ7CiAgICB9LAoKICAgIC8qKgogICAgICogUmV0dXJucyBDU1MgdGV4dCBmcm9tIHN0eWxlc2hlZXRzIGxvYWRlZCB2aWEgYDxsaW5rIHJlbD0iaW1wb3J0IiB0eXBlPSJjc3MiPmAKICAgICAqIGxpbmtzIHdpdGhpbiB0aGUgc3BlY2lmaWVkIGBkb20tbW9kdWxlYC4KICAgICAqCiAgICAgKiBOb3RlOiBUaGlzIG1ldGhvZCBpcyBkZXByZWNhdGVkLCB1c2UgYHN0eWxlc0Zyb21Nb2R1bGVJbXBvcnRzYCBpbnN0ZWFkLgogICAgICoKICAgICAqIEBkZXByZWNhdGVkCiAgICAgKgogICAgICogQG1lbWJlcm9mIFBvbHltZXIuU3R5bGVHYXRoZXIKICAgICAqIEBwYXJhbSB7c3RyaW5nfSBtb2R1bGVJZCBJZCBvZiBgZG9tLW1vZHVsZWAgdG8gZ2F0aGVyIENTUyBmcm9tCiAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IENvbmNhdGVuYXRlZCBDU1MgY29udGVudCBmcm9tIGxpbmtzIGluIHNwZWNpZmllZCBgZG9tLW1vZHVsZWAKICAgICAqIEB0aGlzIHtTdHlsZUdhdGhlcn0KICAgICAqLwogICAgY3NzRnJvbU1vZHVsZUltcG9ydHMobW9kdWxlSWQpIHsKICAgICAgbGV0IG0gPSBpbXBvcnRNb2R1bGUobW9kdWxlSWQpOwogICAgICByZXR1cm4gbSA/IHRoaXMuX2Nzc0Zyb21Nb2R1bGVJbXBvcnRzKG0pIDogJyc7CiAgICB9LAoKICAgIC8qKgogICAgICogQGRlcHJlY2F0ZWQKICAgICAqIEBtZW1iZXJvZiBQb2x5bWVyLlN0eWxlR2F0aGVyCiAgICAgKiBAdGhpcyB7U3R5bGVHYXRoZXJ9CiAgICAgKiBAcGFyYW0geyFIVE1MRWxlbWVudH0gbW9kdWxlIGRvbS1tb2R1bGUgZWxlbWVudCB0aGF0IGNvdWxkIGNvbnRhaW4gYDxsaW5rIHJlbD0iaW1wb3J0IiB0eXBlPSJjc3MiPmAgc3R5bGVzCiAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IENvbmNhdGVuYXRlZCBDU1MgY29udGVudCBmcm9tIGxpbmtzIGluIHRoZSBkb20tbW9kdWxlCiAgICAgKi8KICAgICBfY3NzRnJvbU1vZHVsZUltcG9ydHMobW9kdWxlKSB7CiAgICAgIGxldCBjc3NUZXh0ID0gJyc7CiAgICAgIGxldCBzdHlsZXMgPSB0aGlzLl9zdHlsZXNGcm9tTW9kdWxlSW1wb3J0cyhtb2R1bGUpOwogICAgICBmb3IgKGxldCBpPTA7IGkgPCBzdHlsZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICBjc3NUZXh0ICs9IHN0eWxlc1tpXS50ZXh0Q29udGVudDsKICAgICAgfQogICAgICByZXR1cm4gY3NzVGV4dDsKICAgIH0KICB9OwoKICBQb2x5bWVyLlN0eWxlR2F0aGVyID0gU3R5bGVHYXRoZXI7Cn0pKCk7Cjwvc2NyaXB0PjxzY3JpcHQ+CihmdW5jdGlvbigpIHsKICAndXNlIHN0cmljdCc7CgogIGxldCBtb2R1bGVzID0ge307CiAgbGV0IGxjTW9kdWxlcyA9IHt9OwogIGZ1bmN0aW9uIHNldE1vZHVsZShpZCwgbW9kdWxlKSB7CiAgICAvLyBzdG9yZSBpZCBzZXBhcmF0ZSBmcm9tIGxvd2VyY2FzZWQgaWQgc28gdGhhdAogICAgLy8gaW4gYWxsIGNhc2VzIG1peGVkQ2FzZSBpZCB3aWxsIHN0b3JlZCBkaXN0aW5jdGx5CiAgICAvLyBhbmQgbG93ZXJjYXNlIHZlcnNpb24gaXMgYSBmYWxsYmFjawogICAgbW9kdWxlc1tpZF0gPSBsY01vZHVsZXNbaWQudG9Mb3dlckNhc2UoKV0gPSBtb2R1bGU7CiAgfQogIGZ1bmN0aW9uIGZpbmRNb2R1bGUoaWQpIHsKICAgIHJldHVybiBtb2R1bGVzW2lkXSB8fCBsY01vZHVsZXNbaWQudG9Mb3dlckNhc2UoKV07CiAgfQoKICBmdW5jdGlvbiBzdHlsZU91dHNpZGVUZW1wbGF0ZUNoZWNrKGluc3QpIHsKICAgIGlmIChpbnN0LnF1ZXJ5U2VsZWN0b3IoJ3N0eWxlJykpIHsKICAgICAgY29uc29sZS53YXJuKCdkb20tbW9kdWxlICVzIGhhcyBzdHlsZSBvdXRzaWRlIHRlbXBsYXRlJywgaW5zdC5pZCk7CiAgICB9CiAgfQoKICAvKioKICAgKiBUaGUgYGRvbS1tb2R1bGVgIGVsZW1lbnQgcmVnaXN0ZXJzIHRoZSBkb20gaXQgY29udGFpbnMgdG8gdGhlIG5hbWUgZ2l2ZW4KICAgKiBieSB0aGUgbW9kdWxlJ3MgaWQgYXR0cmlidXRlLiBJdCBwcm92aWRlcyBhIHVuaWZpZWQgZGF0YWJhc2Ugb2YgZG9tCiAgICogYWNjZXNzaWJsZSB2aWEgaXRzIHN0YXRpYyBgaW1wb3J0YCBBUEkuCiAgICoKICAgKiBBIGtleSB1c2UgY2FzZSBvZiBgZG9tLW1vZHVsZWAgaXMgZm9yIHByb3ZpZGluZyBjdXN0b20gZWxlbWVudCBgPHRlbXBsYXRlPmBzCiAgICogdmlhIEhUTUwgaW1wb3J0cyB0aGF0IGFyZSBwYXJzZWQgYnkgdGhlIG5hdGl2ZSBIVE1MIHBhcnNlciwgdGhhdCBjYW4gYmUKICAgKiByZWxvY2F0ZWQgZHVyaW5nIGEgYnVuZGxpbmcgcGFzcyBhbmQgc3RpbGwgbG9va2VkIHVwIGJ5IGBpZGAuCiAgICoKICAgKiBFeGFtcGxlOgogICAqCiAgICogICAgIDxkb20tbW9kdWxlIGlkPSJmb28iPgogICAqICAgICAgIDxpbWcgc3JjPSJzdHVmZi5wbmciPgogICAqICAgICA8L2RvbS1tb2R1bGU+CiAgICoKICAgKiBUaGVuIGluIGNvZGUgaW4gc29tZSBvdGhlciBsb2NhdGlvbiB0aGF0IGNhbm5vdCBhY2Nlc3MgdGhlIGRvbS1tb2R1bGUgYWJvdmUKICAgKgogICAqICAgICBsZXQgaW1nID0gY3VzdG9tRWxlbWVudHMuZ2V0KCdkb20tbW9kdWxlJykuaW1wb3J0KCdmb28nLCAnaW1nJyk7CiAgICoKICAgKiBAY3VzdG9tRWxlbWVudAogICAqIEBleHRlbmRzIEhUTUxFbGVtZW50CiAgICogQG1lbWJlcm9mIFBvbHltZXIKICAgKiBAc3VtbWFyeSBDdXN0b20gZWxlbWVudCB0aGF0IHByb3ZpZGVzIGEgcmVnaXN0cnkgb2YgcmVsb2NhdGFibGUgRE9NIGNvbnRlbnQKICAgKiAgIGJ5IGBpZGAgdGhhdCBpcyBhZ25vc3RpYyB0byBidW5kbGluZy4KICAgKiBAdW5yZXN0cmljdGVkCiAgICovCiAgY2xhc3MgRG9tTW9kdWxlIGV4dGVuZHMgSFRNTEVsZW1lbnQgewoKICAgIHN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCkgeyByZXR1cm4gWydpZCddOyB9CgogICAgLyoqCiAgICAgKiBSZXRyaWV2ZXMgdGhlIGVsZW1lbnQgc3BlY2lmaWVkIGJ5IHRoZSBjc3MgYHNlbGVjdG9yYCBpbiB0aGUgbW9kdWxlCiAgICAgKiByZWdpc3RlcmVkIGJ5IGBpZGAuIEZvciBleGFtcGxlLCB0aGlzLmltcG9ydCgnZm9vJywgJ2ltZycpOwogICAgICogQHBhcmFtIHtzdHJpbmd9IGlkIFRoZSBpZCBvZiB0aGUgZG9tLW1vZHVsZSBpbiB3aGljaCB0byBzZWFyY2guCiAgICAgKiBAcGFyYW0ge3N0cmluZz19IHNlbGVjdG9yIFRoZSBjc3Mgc2VsZWN0b3IgYnkgd2hpY2ggdG8gZmluZCB0aGUgZWxlbWVudC4KICAgICAqIEByZXR1cm4ge0VsZW1lbnR9IFJldHVybnMgdGhlIGVsZW1lbnQgd2hpY2ggbWF0Y2hlcyBgc2VsZWN0b3JgIGluIHRoZQogICAgICogbW9kdWxlIHJlZ2lzdGVyZWQgYXQgdGhlIHNwZWNpZmllZCBgaWRgLgogICAgICovCiAgICBzdGF0aWMgaW1wb3J0KGlkLCBzZWxlY3RvcikgewogICAgICBpZiAoaWQpIHsKICAgICAgICBsZXQgbSA9IGZpbmRNb2R1bGUoaWQpOwogICAgICAgIGlmIChtICYmIHNlbGVjdG9yKSB7CiAgICAgICAgICByZXR1cm4gbS5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG07CiAgICAgIH0KICAgICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAgLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi8KICAgIC8qKgogICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgTmFtZSBvZiBhdHRyaWJ1dGUuCiAgICAgKiBAcGFyYW0gez9zdHJpbmd9IG9sZCBPbGQgdmFsdWUgb2YgYXR0cmlidXRlLgogICAgICogQHBhcmFtIHs/c3RyaW5nfSB2YWx1ZSBDdXJyZW50IHZhbHVlIG9mIGF0dHJpYnV0ZS4KICAgICAqIEBwYXJhbSB7P3N0cmluZ30gbmFtZXNwYWNlIEF0dHJpYnV0ZSBuYW1lc3BhY2UuCiAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICovCiAgICBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2sobmFtZSwgb2xkLCB2YWx1ZSwgbmFtZXNwYWNlKSB7CiAgICAgIGlmIChvbGQgIT09IHZhbHVlKSB7CiAgICAgICAgdGhpcy5yZWdpc3RlcigpOwogICAgICB9CiAgICB9CiAgICAvKiBlc2xpbnQtZW5hYmxlIG5vLXVudXNlZC1hcmdzICovCgogICAgLyoqCiAgICAgKiBUaGUgYWJzb2x1dGUgVVJMIG9mIHRoZSBvcmlnaW5hbCBsb2NhdGlvbiBvZiB0aGlzIGBkb20tbW9kdWxlYC4KICAgICAqCiAgICAgKiBUaGlzIHZhbHVlIHdpbGwgZGlmZmVyIGZyb20gdGhpcyBlbGVtZW50J3MgYG93bmVyRG9jdW1lbnRgIGluIHRoZQogICAgICogZm9sbG93aW5nIHdheXM6CiAgICAgKiAtIFRha2VzIGludG8gYWNjb3VudCBhbnkgYGFzc2V0cGF0aGAgYXR0cmlidXRlIGFkZGVkIGR1cmluZyBidW5kbGluZwogICAgICogICB0byBpbmRpY2F0ZSB0aGUgb3JpZ2luYWwgbG9jYXRpb24gcmVsYXRpdmUgdG8gdGhlIGJ1bmRsZWQgbG9jYXRpb24KICAgICAqIC0gVXNlcyB0aGUgSFRNTEltcG9ydHMgcG9seWZpbGwncyBgaW1wb3J0Rm9yRWxlbWVudGAgQVBJIHRvIGVuc3VyZQogICAgICogICB0aGUgcGF0aCBpcyByZWxhdGl2ZSB0byB0aGUgaW1wb3J0IGRvY3VtZW50J3MgbG9jYXRpb24gc2luY2UKICAgICAqICAgYG93bmVyRG9jdW1lbnRgIGlzIG5vdCBjdXJyZW50bHkgcG9seWZpbGxlZAogICAgICovCiAgICBnZXQgYXNzZXRwYXRoKCkgewogICAgICAvLyBEb24ndCBvdmVycmlkZSBleGlzdGluZyBhc3NldHBhdGguCiAgICAgIGlmICghdGhpcy5fX2Fzc2V0cGF0aCkgewogICAgICAgIC8vIG5vdGU6IGFzc2V0cGF0aCBzZXQgdmlhIGFuIGF0dHJpYnV0ZSBtdXN0IGJlIHJlbGF0aXZlIHRvIHRoaXMKICAgICAgICAvLyBlbGVtZW50J3MgbG9jYXRpb247IGFjY29tb2RhdGUgcG9seWZpbGxlZCBIVE1MSW1wb3J0cwogICAgICAgIGNvbnN0IG93bmVyID0gd2luZG93LkhUTUxJbXBvcnRzICYmIEhUTUxJbXBvcnRzLmltcG9ydEZvckVsZW1lbnQgPwogICAgICAgICAgSFRNTEltcG9ydHMuaW1wb3J0Rm9yRWxlbWVudCh0aGlzKSB8fCBkb2N1bWVudCA6IHRoaXMub3duZXJEb2N1bWVudDsKICAgICAgICBjb25zdCB1cmwgPSBQb2x5bWVyLlJlc29sdmVVcmwucmVzb2x2ZVVybCgKICAgICAgICAgIHRoaXMuZ2V0QXR0cmlidXRlKCdhc3NldHBhdGgnKSB8fCAnJywgb3duZXIuYmFzZVVSSSk7CiAgICAgICAgdGhpcy5fX2Fzc2V0cGF0aCA9IFBvbHltZXIuUmVzb2x2ZVVybC5wYXRoRnJvbVVybCh1cmwpOwogICAgICB9CiAgICAgIHJldHVybiB0aGlzLl9fYXNzZXRwYXRoOwogICAgfQoKICAgIC8qKgogICAgICogUmVnaXN0ZXJzIHRoZSBkb20tbW9kdWxlIGF0IGEgZ2l2ZW4gaWQuIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZAogICAgICogd2hlbiBhIGRvbS1tb2R1bGUgaXMgaW1wZXJhdGl2ZWx5IGNyZWF0ZWQuIEZvcgogICAgICogZXhhbXBsZSwgYGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RvbS1tb2R1bGUnKS5yZWdpc3RlcignZm9vJylgLgogICAgICogQHBhcmFtIHtzdHJpbmc9fSBpZCBUaGUgaWQgYXQgd2hpY2ggdG8gcmVnaXN0ZXIgdGhlIGRvbS1tb2R1bGUuCiAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICovCiAgICByZWdpc3RlcihpZCkgewogICAgICBpZCA9IGlkIHx8IHRoaXMuaWQ7CiAgICAgIGlmIChpZCkgewogICAgICAgIC8vIFVuZGVyIHN0cmljdFRlbXBsYXRlUG9saWN5LCByZWplY3QgYW5kIG51bGwgb3V0IGFueSByZS1yZWdpc3RlcmVkCiAgICAgICAgLy8gZG9tLW1vZHVsZSBzaW5jZSBpdCBpcyBhbWJpZ3VvdXMgd2hldGhlciBmaXJzdC1pbiBvciBsYXN0LWluIGlzIHRydXN0ZWQgCiAgICAgICAgaWYgKFBvbHltZXIuc3RyaWN0VGVtcGxhdGVQb2xpY3kgJiYgZmluZE1vZHVsZShpZCkgIT09IHVuZGVmaW5lZCkgewogICAgICAgICAgc2V0TW9kdWxlKGlkLCBudWxsKTsKICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgc3RyaWN0VGVtcGxhdGVQb2xpY3k6IGRvbS1tb2R1bGUgJHtpZH0gcmUtcmVnaXN0ZXJlZGApOwogICAgICAgIH0KICAgICAgICB0aGlzLmlkID0gaWQ7CiAgICAgICAgc2V0TW9kdWxlKGlkLCB0aGlzKTsKICAgICAgICBzdHlsZU91dHNpZGVUZW1wbGF0ZUNoZWNrKHRoaXMpOwogICAgICB9CiAgICB9CiAgfQoKICBEb21Nb2R1bGUucHJvdG90eXBlWydtb2R1bGVzJ10gPSBtb2R1bGVzOwoKICBjdXN0b21FbGVtZW50cy5kZWZpbmUoJ2RvbS1tb2R1bGUnLCBEb21Nb2R1bGUpOwoKICAvKiogQGNvbnN0ICovCiAgUG9seW1lci5Eb21Nb2R1bGUgPSBEb21Nb2R1bGU7Cgp9KSgpOwo8L3NjcmlwdD48c2NyaXB0PgooZnVuY3Rpb24oKSB7CiAgJ3VzZSBzdHJpY3QnOwoKICAvKioKICAgKiBNb2R1bGUgd2l0aCB1dGlsaXRpZXMgZm9yIG1hbmlwdWxhdGluZyBzdHJ1Y3R1cmVkIGRhdGEgcGF0aCBzdHJpbmdzLgogICAqCiAgICogQG5hbWVzcGFjZQogICAqIEBtZW1iZXJvZiBQb2x5bWVyCiAgICogQHN1bW1hcnkgTW9kdWxlIHdpdGggdXRpbGl0aWVzIGZvciBtYW5pcHVsYXRpbmcgc3RydWN0dXJlZCBkYXRhIHBhdGggc3RyaW5ncy4KICAgKi8KICBjb25zdCBQYXRoID0gewoKICAgIC8qKgogICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBzdHJpbmcgaXMgYSBzdHJ1Y3R1cmVkIGRhdGEgcGF0aCAoaGFzIGRvdHMpLgogICAgICoKICAgICAqIEV4YW1wbGU6CiAgICAgKgogICAgICogYGBgCiAgICAgKiBQb2x5bWVyLlBhdGguaXNQYXRoKCdmb28uYmFyLmJheicpIC8vIHRydWUKICAgICAqIFBvbHltZXIuUGF0aC5pc1BhdGgoJ2ZvbycpICAgICAgICAgLy8gZmFsc2UKICAgICAqIGBgYAogICAgICoKICAgICAqIEBtZW1iZXJvZiBQb2x5bWVyLlBhdGgKICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIFBhdGggc3RyaW5nCiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHRoZSBzdHJpbmcgY29udGFpbmVkIG9uZSBvciBtb3JlIGRvdHMKICAgICAqLwogICAgaXNQYXRoOiBmdW5jdGlvbihwYXRoKSB7CiAgICAgIHJldHVybiBwYXRoLmluZGV4T2YoJy4nKSA+PSAwOwogICAgfSwKCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIHJvb3QgcHJvcGVydHkgbmFtZSBmb3IgdGhlIGdpdmVuIHBhdGguCiAgICAgKgogICAgICogRXhhbXBsZToKICAgICAqCiAgICAgKiBgYGAKICAgICAqIFBvbHltZXIuUGF0aC5yb290KCdmb28uYmFyLmJheicpIC8vICdmb28nCiAgICAgKiBQb2x5bWVyLlBhdGgucm9vdCgnZm9vJykgICAgICAgICAvLyAnZm9vJwogICAgICogYGBgCiAgICAgKgogICAgICogQG1lbWJlcm9mIFBvbHltZXIuUGF0aAogICAgICogQHBhcmFtIHtzdHJpbmd9IHBhdGggUGF0aCBzdHJpbmcKICAgICAqIEByZXR1cm4ge3N0cmluZ30gUm9vdCBwcm9wZXJ0eSBuYW1lCiAgICAgKi8KICAgIHJvb3Q6IGZ1bmN0aW9uKHBhdGgpIHsKICAgICAgbGV0IGRvdEluZGV4ID0gcGF0aC5pbmRleE9mKCcuJyk7CiAgICAgIGlmIChkb3RJbmRleCA9PT0gLTEpIHsKICAgICAgICByZXR1cm4gcGF0aDsKICAgICAgfQogICAgICByZXR1cm4gcGF0aC5zbGljZSgwLCBkb3RJbmRleCk7CiAgICB9LAoKICAgIC8qKgogICAgICogR2l2ZW4gYGJhc2VgIGlzIGBmb28uYmFyYCwgYGZvb2AgaXMgYW4gYW5jZXN0b3IsIGBmb28uYmFyYCBpcyBub3QKICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gcGF0aCBpcyBhbiBhbmNlc3RvciBvZiB0aGUgYmFzZSBwYXRoLgogICAgICoKICAgICAqIEV4YW1wbGU6CiAgICAgKgogICAgICogYGBgCiAgICAgKiBQb2x5bWVyLlBhdGguaXNBbmNlc3RvcignZm9vLmJhcicsICdmb28nKSAgICAgICAgIC8vIHRydWUKICAgICAqIFBvbHltZXIuUGF0aC5pc0FuY2VzdG9yKCdmb28uYmFyJywgJ2Zvby5iYXInKSAgICAgLy8gZmFsc2UKICAgICAqIFBvbHltZXIuUGF0aC5pc0FuY2VzdG9yKCdmb28uYmFyJywgJ2Zvby5iYXIuYmF6JykgLy8gZmFsc2UKICAgICAqIGBgYAogICAgICoKICAgICAqIEBtZW1iZXJvZiBQb2x5bWVyLlBhdGgKICAgICAqIEBwYXJhbSB7c3RyaW5nfSBiYXNlIFBhdGggc3RyaW5nIHRvIHRlc3QgYWdhaW5zdC4KICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIFBhdGggc3RyaW5nIHRvIHRlc3QuCiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIGBwYXRoYCBpcyBhbiBhbmNlc3RvciBvZiBgYmFzZWAuCiAgICAgKi8KICAgIGlzQW5jZXN0b3I6IGZ1bmN0aW9uKGJhc2UsIHBhdGgpIHsKICAgICAgLy8gICAgIGJhc2Uuc3RhcnRzV2l0aChwYXRoICsgJy4nKTsKICAgICAgcmV0dXJuIGJhc2UuaW5kZXhPZihwYXRoICsgJy4nKSA9PT0gMDsKICAgIH0sCgogICAgLyoqCiAgICAgKiBHaXZlbiBgYmFzZWAgaXMgYGZvby5iYXJgLCBgZm9vLmJhci5iYXpgIGlzIGFuIGRlc2NlbmRhbnQKICAgICAqCiAgICAgKiBFeGFtcGxlOgogICAgICoKICAgICAqIGBgYAogICAgICogUG9seW1lci5QYXRoLmlzRGVzY2VuZGFudCgnZm9vLmJhcicsICdmb28uYmFyLmJheicpIC8vIHRydWUKICAgICAqIFBvbHltZXIuUGF0aC5pc0Rlc2NlbmRhbnQoJ2Zvby5iYXInLCAnZm9vLmJhcicpICAgICAvLyBmYWxzZQogICAgICogUG9seW1lci5QYXRoLmlzRGVzY2VuZGFudCgnZm9vLmJhcicsICdmb28nKSAgICAgICAgIC8vIGZhbHNlCiAgICAgKiBgYGAKICAgICAqCiAgICAgKiBAbWVtYmVyb2YgUG9seW1lci5QYXRoCiAgICAgKiBAcGFyYW0ge3N0cmluZ30gYmFzZSBQYXRoIHN0cmluZyB0byB0ZXN0IGFnYWluc3QuCiAgICAgKiBAcGFyYW0ge3N0cmluZ30gcGF0aCBQYXRoIHN0cmluZyB0byB0ZXN0LgogICAgICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiBgcGF0aGAgaXMgYSBkZXNjZW5kYW50IG9mIGBiYXNlYC4KICAgICAqLwogICAgaXNEZXNjZW5kYW50OiBmdW5jdGlvbihiYXNlLCBwYXRoKSB7CiAgICAgIC8vICAgICBwYXRoLnN0YXJ0c1dpdGgoYmFzZSArICcuJyk7CiAgICAgIHJldHVybiBwYXRoLmluZGV4T2YoYmFzZSArICcuJykgPT09IDA7CiAgICB9LAoKICAgIC8qKgogICAgICogUmVwbGFjZXMgYSBwcmV2aW91cyBiYXNlIHBhdGggd2l0aCBhIG5ldyBiYXNlIHBhdGgsIHByZXNlcnZpbmcgdGhlCiAgICAgKiByZW1haW5kZXIgb2YgdGhlIHBhdGguCiAgICAgKgogICAgICogVXNlciBtdXN0IGVuc3VyZSBgcGF0aGAgaGFzIGEgcHJlZml4IG9mIGBiYXNlYC4KICAgICAqCiAgICAgKiBFeGFtcGxlOgogICAgICoKICAgICAqIGBgYAogICAgICogUG9seW1lci5QYXRoLnRyYW5zbGF0ZSgnZm9vLmJhcicsICd6b3QnLCAnZm9vLmJhci5iYXonKSAvLyAnem90LmJheicKICAgICAqIGBgYAogICAgICoKICAgICAqIEBtZW1iZXJvZiBQb2x5bWVyLlBhdGgKICAgICAqIEBwYXJhbSB7c3RyaW5nfSBiYXNlIEN1cnJlbnQgYmFzZSBzdHJpbmcgdG8gcmVtb3ZlCiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmV3QmFzZSBOZXcgYmFzZSBzdHJpbmcgdG8gcmVwbGFjZSB3aXRoCiAgICAgKiBAcGFyYW0ge3N0cmluZ30gcGF0aCBQYXRoIHRvIHRyYW5zbGF0ZQogICAgICogQHJldHVybiB7c3RyaW5nfSBUcmFuc2xhdGVkIHN0cmluZwogICAgICovCiAgICB0cmFuc2xhdGU6IGZ1bmN0aW9uKGJhc2UsIG5ld0Jhc2UsIHBhdGgpIHsKICAgICAgcmV0dXJuIG5ld0Jhc2UgKyBwYXRoLnNsaWNlKGJhc2UubGVuZ3RoKTsKICAgIH0sCgogICAgLyoqCiAgICAgKiBAcGFyYW0ge3N0cmluZ30gYmFzZSBQYXRoIHN0cmluZyB0byB0ZXN0IGFnYWluc3QKICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIFBhdGggc3RyaW5nIHRvIHRlc3QKICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgYHBhdGhgIGlzIGVxdWFsIHRvIGBiYXNlYAogICAgICogQHRoaXMge1BhdGh9CiAgICAgKi8KICAgIG1hdGNoZXM6IGZ1bmN0aW9uKGJhc2UsIHBhdGgpIHsKICAgICAgcmV0dXJuIChiYXNlID09PSBwYXRoKSB8fAogICAgICAgICAgICAgdGhpcy5pc0FuY2VzdG9yKGJhc2UsIHBhdGgpIHx8CiAgICAgICAgICAgICB0aGlzLmlzRGVzY2VuZGFudChiYXNlLCBwYXRoKTsKICAgIH0sCgogICAgLyoqCiAgICAgKiBDb252ZXJ0cyBhcnJheS1iYXNlZCBwYXRocyB0byBmbGF0dGVuZWQgcGF0aC4gIFN0cmluZy1iYXNlZCBwYXRocwogICAgICogYXJlIHJldHVybmVkIGFzLWlzLgogICAgICoKICAgICAqIEV4YW1wbGU6CiAgICAgKgogICAgICogYGBgCiAgICAgKiBQb2x5bWVyLlBhdGgubm9ybWFsaXplKFsnZm9vLmJhcicsIDAsICdiYXonXSkgIC8vICdmb28uYmFyLjAuYmF6JwogICAgICogUG9seW1lci5QYXRoLm5vcm1hbGl6ZSgnZm9vLmJhci4wLmJheicpICAgICAgICAvLyAnZm9vLmJhci4wLmJheicKICAgICAqIGBgYAogICAgICoKICAgICAqIEBtZW1iZXJvZiBQb2x5bWVyLlBhdGgKICAgICAqIEBwYXJhbSB7c3RyaW5nIHwgIUFycmF5PHN0cmluZ3xudW1iZXI+fSBwYXRoIElucHV0IHBhdGgKICAgICAqIEByZXR1cm4ge3N0cmluZ30gRmxhdHRlbmVkIHBhdGgKICAgICAqLwogICAgbm9ybWFsaXplOiBmdW5jdGlvbihwYXRoKSB7CiAgICAgIGlmIChBcnJheS5pc0FycmF5KHBhdGgpKSB7CiAgICAgICAgbGV0IHBhcnRzID0gW107CiAgICAgICAgZm9yIChsZXQgaT0wOyBpPHBhdGgubGVuZ3RoOyBpKyspIHsKICAgICAgICAgIGxldCBhcmdzID0gcGF0aFtpXS50b1N0cmluZygpLnNwbGl0KCcuJyk7CiAgICAgICAgICBmb3IgKGxldCBqPTA7IGo8YXJncy5sZW5ndGg7IGorKykgewogICAgICAgICAgICBwYXJ0cy5wdXNoKGFyZ3Nbal0pOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gcGFydHMuam9pbignLicpOwogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiBwYXRoOwogICAgICB9CiAgICB9LAoKICAgIC8qKgogICAgICogU3BsaXRzIGEgcGF0aCBpbnRvIGFuIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLiBBY2NlcHRzIGVpdGhlciBhcnJheXMKICAgICAqIG9mIHBhdGggcGFydHMgb3Igc3RyaW5ncy4KICAgICAqCiAgICAgKiBFeGFtcGxlOgogICAgICoKICAgICAqIGBgYAogICAgICogUG9seW1lci5QYXRoLnNwbGl0KFsnZm9vLmJhcicsIDAsICdiYXonXSkgIC8vIFsnZm9vJywgJ2JhcicsICcwJywgJ2JheiddCiAgICAgKiBQb2x5bWVyLlBhdGguc3BsaXQoJ2Zvby5iYXIuMC5iYXonKSAgICAgICAgLy8gWydmb28nLCAnYmFyJywgJzAnLCAnYmF6J10KICAgICAqIGBgYAogICAgICoKICAgICAqIEBtZW1iZXJvZiBQb2x5bWVyLlBhdGgKICAgICAqIEBwYXJhbSB7c3RyaW5nIHwgIUFycmF5PHN0cmluZ3xudW1iZXI+fSBwYXRoIElucHV0IHBhdGgKICAgICAqIEByZXR1cm4geyFBcnJheTxzdHJpbmc+fSBBcnJheSBvZiBwYXRoIHBhcnRzCiAgICAgKiBAdGhpcyB7UGF0aH0KICAgICAqIEBzdXBwcmVzcyB7Y2hlY2tUeXBlc30KICAgICAqLwogICAgc3BsaXQ6IGZ1bmN0aW9uKHBhdGgpIHsKICAgICAgaWYgKEFycmF5LmlzQXJyYXkocGF0aCkpIHsKICAgICAgICByZXR1cm4gdGhpcy5ub3JtYWxpemUocGF0aCkuc3BsaXQoJy4nKTsKICAgICAgfQogICAgICByZXR1cm4gcGF0aC50b1N0cmluZygpLnNwbGl0KCcuJyk7CiAgICB9LAoKICAgIC8qKgogICAgICogUmVhZHMgYSB2YWx1ZSBmcm9tIGEgcGF0aC4gIElmIGFueSBzdWItcHJvcGVydHkgaW4gdGhlIHBhdGggaXMgYHVuZGVmaW5lZGAsCiAgICAgKiB0aGlzIG1ldGhvZCByZXR1cm5zIGB1bmRlZmluZWRgICh3aWxsIG5ldmVyIHRocm93LgogICAgICoKICAgICAqIEBtZW1iZXJvZiBQb2x5bWVyLlBhdGgKICAgICAqIEBwYXJhbSB7T2JqZWN0fSByb290IE9iamVjdCBmcm9tIHdoaWNoIHRvIGRlcmVmZXJlbmNlIHBhdGggZnJvbQogICAgICogQHBhcmFtIHtzdHJpbmcgfCAhQXJyYXk8c3RyaW5nfG51bWJlcj59IHBhdGggUGF0aCB0byByZWFkCiAgICAgKiBAcGFyYW0ge09iamVjdD19IGluZm8gSWYgYW4gb2JqZWN0IGlzIHByb3ZpZGVkIHRvIGBpbmZvYCwgdGhlIG5vcm1hbGl6ZWQKICAgICAqICAoZmxhdHRlbmVkKSBwYXRoIHdpbGwgYmUgc2V0IHRvIGBpbmZvLnBhdGhgLgogICAgICogQHJldHVybiB7Kn0gVmFsdWUgYXQgcGF0aCwgb3IgYHVuZGVmaW5lZGAgaWYgdGhlIHBhdGggY291bGQgbm90IGJlCiAgICAgKiAgZnVsbHkgZGVyZWZlcmVuY2VkLgogICAgICogQHRoaXMge1BhdGh9CiAgICAgKi8KICAgIGdldDogZnVuY3Rpb24ocm9vdCwgcGF0aCwgaW5mbykgewogICAgICBsZXQgcHJvcCA9IHJvb3Q7CiAgICAgIGxldCBwYXJ0cyA9IHRoaXMuc3BsaXQocGF0aCk7CiAgICAgIC8vIExvb3Agb3ZlciBwYXRoIHBhcnRzWzAuLm4tMV0gYW5kIGRlcmVmZXJlbmNlCiAgICAgIGZvciAobGV0IGk9MDsgaTxwYXJ0cy5sZW5ndGg7IGkrKykgewogICAgICAgIGlmICghcHJvcCkgewogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBsZXQgcGFydCA9IHBhcnRzW2ldOwogICAgICAgIHByb3AgPSBwcm9wW3BhcnRdOwogICAgICB9CiAgICAgIGlmIChpbmZvKSB7CiAgICAgICAgaW5mby5wYXRoID0gcGFydHMuam9pbignLicpOwogICAgICB9CiAgICAgIHJldHVybiBwcm9wOwogICAgfSwKCiAgICAvKioKICAgICAqIFNldHMgYSB2YWx1ZSB0byBhIHBhdGguICBJZiBhbnkgc3ViLXByb3BlcnR5IGluIHRoZSBwYXRoIGlzIGB1bmRlZmluZWRgLAogICAgICogdGhpcyBtZXRob2Qgd2lsbCBuby1vcC4KICAgICAqCiAgICAgKiBAbWVtYmVyb2YgUG9seW1lci5QYXRoCiAgICAgKiBAcGFyYW0ge09iamVjdH0gcm9vdCBPYmplY3QgZnJvbSB3aGljaCB0byBkZXJlZmVyZW5jZSBwYXRoIGZyb20KICAgICAqIEBwYXJhbSB7c3RyaW5nIHwgIUFycmF5PHN0cmluZ3xudW1iZXI+fSBwYXRoIFBhdGggdG8gc2V0CiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFZhbHVlIHRvIHNldCB0byBwYXRoCiAgICAgKiBAcmV0dXJuIHtzdHJpbmcgfCB1bmRlZmluZWR9IFRoZSBub3JtYWxpemVkIHZlcnNpb24gb2YgdGhlIGlucHV0IHBhdGgKICAgICAqIEB0aGlzIHtQYXRofQogICAgICovCiAgICBzZXQ6IGZ1bmN0aW9uKHJvb3QsIHBhdGgsIHZhbHVlKSB7CiAgICAgIGxldCBwcm9wID0gcm9vdDsKICAgICAgbGV0IHBhcnRzID0gdGhpcy5zcGxpdChwYXRoKTsKICAgICAgbGV0IGxhc3QgPSBwYXJ0c1twYXJ0cy5sZW5ndGgtMV07CiAgICAgIGlmIChwYXJ0cy5sZW5ndGggPiAxKSB7CiAgICAgICAgLy8gTG9vcCBvdmVyIHBhdGggcGFydHNbMC4ubi0yXSBhbmQgZGVyZWZlcmVuY2UKICAgICAgICBmb3IgKGxldCBpPTA7IGk8cGFydHMubGVuZ3RoLTE7IGkrKykgewogICAgICAgICAgbGV0IHBhcnQgPSBwYXJ0c1tpXTsKICAgICAgICAgIHByb3AgPSBwcm9wW3BhcnRdOwogICAgICAgICAgaWYgKCFwcm9wKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgLy8gU2V0IHZhbHVlIHRvIG9iamVjdCBhdCBlbmQgb2YgcGF0aAogICAgICAgIHByb3BbbGFzdF0gPSB2YWx1ZTsKICAgICAgfSBlbHNlIHsKICAgICAgICAvLyBTaW1wbGUgcHJvcGVydHkgc2V0CiAgICAgICAgcHJvcFtwYXRoXSA9IHZhbHVlOwogICAgICB9CiAgICAgIHJldHVybiBwYXJ0cy5qb2luKCcuJyk7CiAgICB9CgogIH07CgogIC8qKgogICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gc3RyaW5nIGlzIGEgc3RydWN0dXJlZCBkYXRhIHBhdGggKGhhcyBkb3RzKS4KICAgKgogICAqIFRoaXMgZnVuY3Rpb24gaXMgZGVwcmVjYXRlZC4gIFVzZSBgUG9seW1lci5QYXRoLmlzUGF0aGAgaW5zdGVhZC4KICAgKgogICAqIEV4YW1wbGU6CiAgICoKICAgKiBgYGAKICAgKiBQb2x5bWVyLlBhdGguaXNEZWVwKCdmb28uYmFyLmJheicpIC8vIHRydWUKICAgKiBQb2x5bWVyLlBhdGguaXNEZWVwKCdmb28nKSAgICAgICAgIC8vIGZhbHNlCiAgICogYGBgCiAgICoKICAgKiBAZGVwcmVjYXRlZAogICAqIEBtZW1iZXJvZiBQb2x5bWVyLlBhdGgKICAgKiBAcGFyYW0ge3N0cmluZ30gcGF0aCBQYXRoIHN0cmluZwogICAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhlIHN0cmluZyBjb250YWluZWQgb25lIG9yIG1vcmUgZG90cwogICAqLwogIFBhdGguaXNEZWVwID0gUGF0aC5pc1BhdGg7CgogIFBvbHltZXIuUGF0aCA9IFBhdGg7Cgp9KSgpOwo8L3NjcmlwdD48c2NyaXB0PgooZnVuY3Rpb24oKSB7CiAgJ3VzZSBzdHJpY3QnOwoKICBjb25zdCBjYXNlTWFwID0ge307CiAgY29uc3QgREFTSF9UT19DQU1FTCA9IC8tW2Etel0vZzsKICBjb25zdCBDQU1FTF9UT19EQVNIID0gLyhbQS1aXSkvZzsKCiAgLyoqCiAgICogTW9kdWxlIHdpdGggdXRpbGl0aWVzIGZvciBjb252ZXJ0aW5nIGJldHdlZW4gImRhc2gtY2FzZSIgYW5kICJjYW1lbENhc2UiCiAgICogaWRlbnRpZmllcnMuCiAgICoKICAgKiBAbmFtZXNwYWNlCiAgICogQG1lbWJlcm9mIFBvbHltZXIKICAgKiBAc3VtbWFyeSBNb2R1bGUgdGhhdCBwcm92aWRlcyB1dGlsaXRpZXMgZm9yIGNvbnZlcnRpbmcgYmV0d2VlbiAiZGFzaC1jYXNlIgogICAqICAgYW5kICJjYW1lbENhc2UiLgogICAqLwogIGNvbnN0IENhc2VNYXAgPSB7CgogICAgLyoqCiAgICAgKiBDb252ZXJ0cyAiZGFzaC1jYXNlIiBpZGVudGlmaWVyIChlLmcuIGBmb28tYmFyLWJhemApIHRvICJjYW1lbENhc2UiCiAgICAgKiAoZS5nLiBgZm9vQmFyQmF6YCkuCiAgICAgKgogICAgICogQG1lbWJlcm9mIFBvbHltZXIuQ2FzZU1hcAogICAgICogQHBhcmFtIHtzdHJpbmd9IGRhc2ggRGFzaC1jYXNlIGlkZW50aWZpZXIKICAgICAqIEByZXR1cm4ge3N0cmluZ30gQ2FtZWwtY2FzZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgaWRlbnRpZmllcgogICAgICovCiAgICBkYXNoVG9DYW1lbENhc2UoZGFzaCkgewogICAgICByZXR1cm4gY2FzZU1hcFtkYXNoXSB8fCAoCiAgICAgICAgY2FzZU1hcFtkYXNoXSA9IGRhc2guaW5kZXhPZignLScpIDwgMCA/IGRhc2ggOiBkYXNoLnJlcGxhY2UoREFTSF9UT19DQU1FTCwKICAgICAgICAgIChtKSA9PiBtWzFdLnRvVXBwZXJDYXNlKCkKICAgICAgICApCiAgICAgICk7CiAgICB9LAoKICAgIC8qKgogICAgICogQ29udmVydHMgImNhbWVsQ2FzZSIgaWRlbnRpZmllciAoZS5nLiBgZm9vQmFyQmF6YCkgdG8gImRhc2gtY2FzZSIKICAgICAqIChlLmcuIGBmb28tYmFyLWJhemApLgogICAgICoKICAgICAqIEBtZW1iZXJvZiBQb2x5bWVyLkNhc2VNYXAKICAgICAqIEBwYXJhbSB7c3RyaW5nfSBjYW1lbCBDYW1lbC1jYXNlIGlkZW50aWZpZXIKICAgICAqIEByZXR1cm4ge3N0cmluZ30gRGFzaC1jYXNlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBpZGVudGlmaWVyCiAgICAgKi8KICAgIGNhbWVsVG9EYXNoQ2FzZShjYW1lbCkgewogICAgICByZXR1cm4gY2FzZU1hcFtjYW1lbF0gfHwgKAogICAgICAgIGNhc2VNYXBbY2FtZWxdID0gY2FtZWwucmVwbGFjZShDQU1FTF9UT19EQVNILCAnLSQxJykudG9Mb3dlckNhc2UoKQogICAgICApOwogICAgfQoKICB9OwoKICBQb2x5bWVyLkNhc2VNYXAgPSBDYXNlTWFwOwp9KSgpOwo8L3NjcmlwdD48c2NyaXB0PgooZnVuY3Rpb24oKSB7CgogICd1c2Ugc3RyaWN0JzsKCiAgLy8gTWljcm90YXNrIGltcGxlbWVudGVkIHVzaW5nIE11dGF0aW9uIE9ic2VydmVyCiAgbGV0IG1pY3JvdGFza0N1cnJIYW5kbGUgPSAwOwogIGxldCBtaWNyb3Rhc2tMYXN0SGFuZGxlID0gMDsKICBsZXQgbWljcm90YXNrQ2FsbGJhY2tzID0gW107CiAgbGV0IG1pY3JvdGFza05vZGVDb250ZW50ID0gMDsKICBsZXQgbWljcm90YXNrTm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcnKTsKICBuZXcgd2luZG93Lk11dGF0aW9uT2JzZXJ2ZXIobWljcm90YXNrRmx1c2gpLm9ic2VydmUobWljcm90YXNrTm9kZSwge2NoYXJhY3RlckRhdGE6IHRydWV9KTsKCiAgZnVuY3Rpb24gbWljcm90YXNrRmx1c2goKSB7CiAgICBjb25zdCBsZW4gPSBtaWNyb3Rhc2tDYWxsYmFja3MubGVuZ3RoOwogICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICBsZXQgY2IgPSBtaWNyb3Rhc2tDYWxsYmFja3NbaV07CiAgICAgIGlmIChjYikgewogICAgICAgIHRyeSB7CiAgICAgICAgICBjYigpOwogICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4geyB0aHJvdyBlOyB9KTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIG1pY3JvdGFza0NhbGxiYWNrcy5zcGxpY2UoMCwgbGVuKTsKICAgIG1pY3JvdGFza0xhc3RIYW5kbGUgKz0gbGVuOwogIH0KCiAgLyoqCiAgICogTW9kdWxlIHRoYXQgcHJvdmlkZXMgYSBudW1iZXIgb2Ygc3RyYXRlZ2llcyBmb3IgZW5xdWV1aW5nIGFzeW5jaHJvbm91cwogICAqIHRhc2tzLiAgRWFjaCBzdWItbW9kdWxlIHByb3ZpZGVzIGEgc3RhbmRhcmQgYHJ1bihmbilgIGludGVyZmFjZSB0aGF0IHJldHVybnMgYQogICAqIGhhbmRsZSwgYW5kIGEgYGNhbmNlbChoYW5kbGUpYCBpbnRlcmZhY2UgZm9yIGNhbmNlbGluZyBhc3luYyB0YXNrcyBiZWZvcmUKICAgKiB0aGV5IHJ1bi4KICAgKgogICAqIEBuYW1lc3BhY2UKICAgKiBAbWVtYmVyb2YgUG9seW1lcgogICAqIEBzdW1tYXJ5IE1vZHVsZSB0aGF0IHByb3ZpZGVzIGEgbnVtYmVyIG9mIHN0cmF0ZWdpZXMgZm9yIGVucXVldWluZyBhc3luY2hyb25vdXMKICAgKiB0YXNrcy4KICAgKi8KICBQb2x5bWVyLkFzeW5jID0gewoKICAgIC8qKgogICAgICogQXN5bmMgaW50ZXJmYWNlIHdyYXBwZXIgYXJvdW5kIGBzZXRUaW1lb3V0YC4KICAgICAqCiAgICAgKiBAbmFtZXNwYWNlCiAgICAgKiBAbWVtYmVyb2YgUG9seW1lci5Bc3luYwogICAgICogQHN1bW1hcnkgQXN5bmMgaW50ZXJmYWNlIHdyYXBwZXIgYXJvdW5kIGBzZXRUaW1lb3V0YC4KICAgICAqLwogICAgdGltZU91dDogewogICAgICAvKioKICAgICAgICogUmV0dXJucyBhIHN1Yi1tb2R1bGUgd2l0aCB0aGUgYXN5bmMgaW50ZXJmYWNlIHByb3ZpZGluZyB0aGUgcHJvdmlkZWQKICAgICAgICogZGVsYXkuCiAgICAgICAqCiAgICAgICAqIEBtZW1iZXJvZiBQb2x5bWVyLkFzeW5jLnRpbWVPdXQKICAgICAgICogQHBhcmFtIHtudW1iZXI9fSBkZWxheSBUaW1lIHRvIHdhaXQgYmVmb3JlIGNhbGxpbmcgY2FsbGJhY2tzIGluIG1zCiAgICAgICAqIEByZXR1cm4geyFBc3luY0ludGVyZmFjZX0gQW4gYXN5bmMgdGltZW91dCBpbnRlcmZhY2UKICAgICAgICovCiAgICAgIGFmdGVyKGRlbGF5KSB7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIHJ1bihmbikgeyByZXR1cm4gd2luZG93LnNldFRpbWVvdXQoZm4sIGRlbGF5KTsgfSwKICAgICAgICAgIGNhbmNlbChoYW5kbGUpIHsKICAgICAgICAgICAgd2luZG93LmNsZWFyVGltZW91dChoYW5kbGUpOwogICAgICAgICAgfQogICAgICAgIH07CiAgICAgIH0sCiAgICAgIC8qKgogICAgICAgKiBFbnF1ZXVlcyBhIGZ1bmN0aW9uIGNhbGxlZCBpbiB0aGUgbmV4dCB0YXNrLgogICAgICAgKgogICAgICAgKiBAbWVtYmVyb2YgUG9seW1lci5Bc3luYy50aW1lT3V0CiAgICAgICAqIEBwYXJhbSB7IUZ1bmN0aW9ufSBmbiBDYWxsYmFjayB0byBydW4KICAgICAgICogQHBhcmFtIHtudW1iZXI9fSBkZWxheSBEZWxheSBpbiBtaWxsaXNlY29uZHMKICAgICAgICogQHJldHVybiB7bnVtYmVyfSBIYW5kbGUgdXNlZCBmb3IgY2FuY2VsaW5nIHRhc2sKICAgICAgICovCiAgICAgIHJ1bihmbiwgZGVsYXkpIHsKICAgICAgICByZXR1cm4gd2luZG93LnNldFRpbWVvdXQoZm4sIGRlbGF5KTsKICAgICAgfSwKICAgICAgLyoqCiAgICAgICAqIENhbmNlbHMgYSBwcmV2aW91c2x5IGVucXVldWVkIGB0aW1lT3V0YCBjYWxsYmFjay4KICAgICAgICoKICAgICAgICogQG1lbWJlcm9mIFBvbHltZXIuQXN5bmMudGltZU91dAogICAgICAgKiBAcGFyYW0ge251bWJlcn0gaGFuZGxlIEhhbmRsZSByZXR1cm5lZCBmcm9tIGBydW5gIG9mIGNhbGxiYWNrIHRvIGNhbmNlbAogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKi8KICAgICAgY2FuY2VsKGhhbmRsZSkgewogICAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQoaGFuZGxlKTsKICAgICAgfQogICAgfSwKCiAgICAvKioKICAgICAqIEFzeW5jIGludGVyZmFjZSB3cmFwcGVyIGFyb3VuZCBgcmVxdWVzdEFuaW1hdGlvbkZyYW1lYC4KICAgICAqCiAgICAgKiBAbmFtZXNwYWNlCiAgICAgKiBAbWVtYmVyb2YgUG9seW1lci5Bc3luYwogICAgICogQHN1bW1hcnkgQXN5bmMgaW50ZXJmYWNlIHdyYXBwZXIgYXJvdW5kIGByZXF1ZXN0QW5pbWF0aW9uRnJhbWVgLgogICAgICovCiAgICBhbmltYXRpb25GcmFtZTogewogICAgICAvKioKICAgICAgICogRW5xdWV1ZXMgYSBmdW5jdGlvbiBjYWxsZWQgYXQgYHJlcXVlc3RBbmltYXRpb25GcmFtZWAgdGltaW5nLgogICAgICAgKgogICAgICAgKiBAbWVtYmVyb2YgUG9seW1lci5Bc3luYy5hbmltYXRpb25GcmFtZQogICAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKG51bWJlcik6dm9pZH0gZm4gQ2FsbGJhY2sgdG8gcnVuCiAgICAgICAqIEByZXR1cm4ge251bWJlcn0gSGFuZGxlIHVzZWQgZm9yIGNhbmNlbGluZyB0YXNrCiAgICAgICAqLwogICAgICBydW4oZm4pIHsKICAgICAgICByZXR1cm4gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShmbik7CiAgICAgIH0sCiAgICAgIC8qKgogICAgICAgKiBDYW5jZWxzIGEgcHJldmlvdXNseSBlbnF1ZXVlZCBgYW5pbWF0aW9uRnJhbWVgIGNhbGxiYWNrLgogICAgICAgKgogICAgICAgKiBAbWVtYmVyb2YgUG9seW1lci5Bc3luYy5hbmltYXRpb25GcmFtZQogICAgICAgKiBAcGFyYW0ge251bWJlcn0gaGFuZGxlIEhhbmRsZSByZXR1cm5lZCBmcm9tIGBydW5gIG9mIGNhbGxiYWNrIHRvIGNhbmNlbAogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKi8KICAgICAgY2FuY2VsKGhhbmRsZSkgewogICAgICAgIHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZShoYW5kbGUpOwogICAgICB9CiAgICB9LAoKICAgIC8qKgogICAgICogQXN5bmMgaW50ZXJmYWNlIHdyYXBwZXIgYXJvdW5kIGByZXF1ZXN0SWRsZUNhbGxiYWNrYC4gIEZhbGxzIGJhY2sgdG8KICAgICAqIGBzZXRUaW1lb3V0YCBvbiBicm93c2VycyB0aGF0IGRvIG5vdCBzdXBwb3J0IGByZXF1ZXN0SWRsZUNhbGxiYWNrYC4KICAgICAqCiAgICAgKiBAbmFtZXNwYWNlCiAgICAgKiBAbWVtYmVyb2YgUG9seW1lci5Bc3luYwogICAgICogQHN1bW1hcnkgQXN5bmMgaW50ZXJmYWNlIHdyYXBwZXIgYXJvdW5kIGByZXF1ZXN0SWRsZUNhbGxiYWNrYC4KICAgICAqLwogICAgaWRsZVBlcmlvZDogewogICAgICAvKioKICAgICAgICogRW5xdWV1ZXMgYSBmdW5jdGlvbiBjYWxsZWQgYXQgYHJlcXVlc3RJZGxlQ2FsbGJhY2tgIHRpbWluZy4KICAgICAgICoKICAgICAgICogQG1lbWJlcm9mIFBvbHltZXIuQXN5bmMuaWRsZVBlcmlvZAogICAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKCFJZGxlRGVhZGxpbmUpOnZvaWR9IGZuIENhbGxiYWNrIHRvIHJ1bgogICAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IEhhbmRsZSB1c2VkIGZvciBjYW5jZWxpbmcgdGFzawogICAgICAgKi8KICAgICAgcnVuKGZuKSB7CiAgICAgICAgcmV0dXJuIHdpbmRvdy5yZXF1ZXN0SWRsZUNhbGxiYWNrID8KICAgICAgICAgIHdpbmRvdy5yZXF1ZXN0SWRsZUNhbGxiYWNrKGZuKSA6CiAgICAgICAgICB3aW5kb3cuc2V0VGltZW91dChmbiwgMTYpOwogICAgICB9LAogICAgICAvKioKICAgICAgICogQ2FuY2VscyBhIHByZXZpb3VzbHkgZW5xdWV1ZWQgYGlkbGVQZXJpb2RgIGNhbGxiYWNrLgogICAgICAgKgogICAgICAgKiBAbWVtYmVyb2YgUG9seW1lci5Bc3luYy5pZGxlUGVyaW9kCiAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBoYW5kbGUgSGFuZGxlIHJldHVybmVkIGZyb20gYHJ1bmAgb2YgY2FsbGJhY2sgdG8gY2FuY2VsCiAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAqLwogICAgICBjYW5jZWwoaGFuZGxlKSB7CiAgICAgICAgd2luZG93LmNhbmNlbElkbGVDYWxsYmFjayA/CiAgICAgICAgICB3aW5kb3cuY2FuY2VsSWRsZUNhbGxiYWNrKGhhbmRsZSkgOgogICAgICAgICAgd2luZG93LmNsZWFyVGltZW91dChoYW5kbGUpOwogICAgICB9CiAgICB9LAoKICAgIC8qKgogICAgICogQXN5bmMgaW50ZXJmYWNlIGZvciBlbnF1ZXVpbmcgY2FsbGJhY2tzIHRoYXQgcnVuIGF0IG1pY3JvdGFzayB0aW1pbmcuCiAgICAgKgogICAgICogTm90ZSB0aGF0IG1pY3JvdGFzayB0aW1pbmcgaXMgYWNoaWV2ZWQgdmlhIGEgc2luZ2xlIGBNdXRhdGlvbk9ic2VydmVyYCwKICAgICAqIGFuZCB0aHVzIGNhbGxiYWNrcyBlbnF1ZXVlZCB3aXRoIHRoaXMgQVBJIHdpbGwgYWxsIHJ1biBpbiBhIHNpbmdsZQogICAgICogYmF0Y2gsIGFuZCBub3QgaW50ZXJsZWF2ZWQgd2l0aCBvdGhlciBtaWNyb3Rhc2tzIHN1Y2ggYXMgcHJvbWlzZXMuCiAgICAgKiBQcm9taXNlcyBhcmUgYXZvaWRlZCBhcyBhbiBpbXBsZW1lbnRhdGlvbiBjaG9pY2UgZm9yIHRoZSB0aW1lIGJlaW5nCiAgICAgKiBkdWUgdG8gU2FmYXJpIGJ1Z3MgdGhhdCBjYXVzZSBQcm9taXNlcyB0byBsYWNrIG1pY3JvdGFzayBndWFyYW50ZWVzLgogICAgICoKICAgICAqIEBuYW1lc3BhY2UKICAgICAqIEBtZW1iZXJvZiBQb2x5bWVyLkFzeW5jCiAgICAgKiBAc3VtbWFyeSBBc3luYyBpbnRlcmZhY2UgZm9yIGVucXVldWluZyBjYWxsYmFja3MgdGhhdCBydW4gYXQgbWljcm90YXNrCiAgICAgKiAgIHRpbWluZy4KICAgICAqLwogICAgbWljcm9UYXNrOiB7CgogICAgICAvKioKICAgICAgICogRW5xdWV1ZXMgYSBmdW5jdGlvbiBjYWxsZWQgYXQgbWljcm90YXNrIHRpbWluZy4KICAgICAgICoKICAgICAgICogQG1lbWJlcm9mIFBvbHltZXIuQXN5bmMubWljcm9UYXNrCiAgICAgICAqIEBwYXJhbSB7IUZ1bmN0aW9uPX0gY2FsbGJhY2sgQ2FsbGJhY2sgdG8gcnVuCiAgICAgICAqIEByZXR1cm4ge251bWJlcn0gSGFuZGxlIHVzZWQgZm9yIGNhbmNlbGluZyB0YXNrCiAgICAgICAqLwogICAgICBydW4oY2FsbGJhY2spIHsKICAgICAgICBtaWNyb3Rhc2tOb2RlLnRleHRDb250ZW50ID0gbWljcm90YXNrTm9kZUNvbnRlbnQrKzsKICAgICAgICBtaWNyb3Rhc2tDYWxsYmFja3MucHVzaChjYWxsYmFjayk7CiAgICAgICAgcmV0dXJuIG1pY3JvdGFza0N1cnJIYW5kbGUrKzsKICAgICAgfSwKCiAgICAgIC8qKgogICAgICAgKiBDYW5jZWxzIGEgcHJldmlvdXNseSBlbnF1ZXVlZCBgbWljcm9UYXNrYCBjYWxsYmFjay4KICAgICAgICoKICAgICAgICogQG1lbWJlcm9mIFBvbHltZXIuQXN5bmMubWljcm9UYXNrCiAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBoYW5kbGUgSGFuZGxlIHJldHVybmVkIGZyb20gYHJ1bmAgb2YgY2FsbGJhY2sgdG8gY2FuY2VsCiAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAqLwogICAgICBjYW5jZWwoaGFuZGxlKSB7CiAgICAgICAgY29uc3QgaWR4ID0gaGFuZGxlIC0gbWljcm90YXNrTGFzdEhhbmRsZTsKICAgICAgICBpZiAoaWR4ID49IDApIHsKICAgICAgICAgIGlmICghbWljcm90YXNrQ2FsbGJhY2tzW2lkeF0pIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIGFzeW5jIGhhbmRsZTogJyArIGhhbmRsZSk7CiAgICAgICAgICB9CiAgICAgICAgICBtaWNyb3Rhc2tDYWxsYmFja3NbaWR4XSA9IG51bGw7CiAgICAgICAgfQogICAgICB9CgogICAgfQogIH07Cgp9KSgpOwo8L3NjcmlwdD48c2NyaXB0PgogIChmdW5jdGlvbiAoKSB7CgogICAgJ3VzZSBzdHJpY3QnOwoKICAgIC8qKiBAY29uc3QgeyFBc3luY0ludGVyZmFjZX0gKi8KICAgIGNvbnN0IG1pY3JvdGFzayA9IFBvbHltZXIuQXN5bmMubWljcm9UYXNrOwoKICAgIC8qKgogICAgICogRWxlbWVudCBjbGFzcyBtaXhpbiB0aGF0IHByb3ZpZGVzIGJhc2ljIG1ldGEtcHJvZ3JhbW1pbmcgZm9yIGNyZWF0aW5nIG9uZQogICAgICogb3IgbW9yZSBwcm9wZXJ0eSBhY2Nlc3NvcnMgKGdldHRlci9zZXR0ZXIgcGFpcikgdGhhdCBlbnF1ZXVlIGFuIGFzeW5jCiAgICAgKiAoYmF0Y2hlZCkgYF9wcm9wZXJ0aWVzQ2hhbmdlZGAgY2FsbGJhY2suCiAgICAgKgogICAgICogRm9yIGJhc2ljIHVzYWdlIG9mIHRoaXMgbWl4aW4sIGNhbGwgYE15Q2xhc3MuY3JlYXRlUHJvcGVydGllcyhwcm9wcylgCiAgICAgKiBvbmNlIGF0IGNsYXNzIGRlZmluaXRpb24gdGltZSB0byBjcmVhdGUgcHJvcGVydHkgYWNjZXNzb3JzIGZvciBwcm9wZXJ0aWVzCiAgICAgKiBuYW1lZCBpbiBwcm9wcywgaW1wbGVtZW50IGBfcHJvcGVydGllc0NoYW5nZWRgIHRvIHJlYWN0IGFzIGRlc2lyZWQgdG8KICAgICAqIHByb3BlcnR5IGNoYW5nZXMsIGFuZCBpbXBsZW1lbnQgYHN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKClgIGFuZAogICAgICogaW5jbHVkZSBsb3dlcmNhc2UgdmVyc2lvbnMgb2YgYW55IHByb3BlcnR5IG5hbWVzIHRoYXQgc2hvdWxkIGJlIHNldCBmcm9tCiAgICAgKiBhdHRyaWJ1dGVzLiBMYXN0LCBjYWxsIGB0aGlzLl9lbmFibGVQcm9wZXJ0aWVzKClgIGluIHRoZSBlbGVtZW50J3MKICAgICAqIGBjb25uZWN0ZWRDYWxsYmFja2AgdG8gZW5hYmxlIHRoZSBhY2Nlc3NvcnMuCiAgICAgKgogICAgICogQG1peGluRnVuY3Rpb24KICAgICAqIEBwb2x5bWVyCiAgICAgKiBAbWVtYmVyb2YgUG9seW1lcgogICAgICogQHN1bW1hcnkgRWxlbWVudCBjbGFzcyBtaXhpbiBmb3IgcmVhY3RpbmcgdG8gcHJvcGVydHkgY2hhbmdlcyBmcm9tCiAgICAgKiAgIGdlbmVyYXRlZCBwcm9wZXJ0eSBhY2Nlc3NvcnMuCiAgICAgKi8KICAgIFBvbHltZXIuUHJvcGVydGllc0NoYW5nZWQgPSBQb2x5bWVyLmRlZHVwaW5nTWl4aW4oc3VwZXJDbGFzcyA9PiB7CgogICAgICAvKioKICAgICAgICogQHBvbHltZXIKICAgICAgICogQG1peGluQ2xhc3MKICAgICAgICogQGV4dGVuZHMge3N1cGVyQ2xhc3N9CiAgICAgICAqIEBpbXBsZW1lbnRzIHtQb2x5bWVyX1Byb3BlcnRpZXNDaGFuZ2VkfQogICAgICAgKiBAdW5yZXN0cmljdGVkCiAgICAgICAqLwogICAgICBjbGFzcyBQcm9wZXJ0aWVzQ2hhbmdlZCBleHRlbmRzIHN1cGVyQ2xhc3MgewoKICAgICAgICAvKioKICAgICAgICAgKiBDcmVhdGVzIHByb3BlcnR5IGFjY2Vzc29ycyBmb3IgdGhlIGdpdmVuIHByb3BlcnR5IG5hbWVzLgogICAgICAgICAqIEBwYXJhbSB7IU9iamVjdH0gcHJvcHMgT2JqZWN0IHdob3NlIGtleXMgYXJlIG5hbWVzIG9mIGFjY2Vzc29ycy4KICAgICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgICAqIEBwcm90ZWN0ZWQKICAgICAgICAgKi8KICAgICAgICBzdGF0aWMgY3JlYXRlUHJvcGVydGllcyhwcm9wcykgewogICAgICAgICAgY29uc3QgcHJvdG8gPSB0aGlzLnByb3RvdHlwZTsKICAgICAgICAgIGZvciAobGV0IHByb3AgaW4gcHJvcHMpIHsKICAgICAgICAgICAgLy8gZG9uJ3Qgc3RvbXAgYW4gZXhpc3RpbmcgYWNjZXNzb3IKICAgICAgICAgICAgaWYgKCEocHJvcCBpbiBwcm90bykpIHsKICAgICAgICAgICAgICBwcm90by5fY3JlYXRlUHJvcGVydHlBY2Nlc3Nvcihwcm9wKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLyoqCiAgICAgICAgICogUmV0dXJucyBhbiBhdHRyaWJ1dGUgbmFtZSB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSBnaXZlbiBwcm9wZXJ0eS4KICAgICAgICAgKiBUaGUgYXR0cmlidXRlIG5hbWUgaXMgdGhlIGxvd2VyY2FzZWQgcHJvcGVydHkgbmFtZS4gT3ZlcnJpZGUgdG8KICAgICAgICAgKiBjdXN0b21pemUgdGhpcyBtYXBwaW5nLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eSBQcm9wZXJ0eSB0byBjb252ZXJ0CiAgICAgICAgICogQHJldHVybiB7c3RyaW5nfSBBdHRyaWJ1dGUgbmFtZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBnaXZlbiBwcm9wZXJ0eS4KICAgICAgICAgKgogICAgICAgICAqIEBwcm90ZWN0ZWQKICAgICAgICAgKi8KICAgICAgICBzdGF0aWMgYXR0cmlidXRlTmFtZUZvclByb3BlcnR5KHByb3BlcnR5KSB7CiAgICAgICAgICByZXR1cm4gcHJvcGVydHkudG9Mb3dlckNhc2UoKTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIE92ZXJyaWRlIHBvaW50IHRvIHByb3ZpZGUgYSB0eXBlIHRvIHdoaWNoIHRvIGRlc2VyaWFsaXplIGEgdmFsdWUgdG8KICAgICAgICAgKiBhIGdpdmVuIHByb3BlcnR5LgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIE5hbWUgb2YgcHJvcGVydHkKICAgICAgICAgKgogICAgICAgICAqIEBwcm90ZWN0ZWQKICAgICAgICAgKi8KICAgICAgICBzdGF0aWMgdHlwZUZvclByb3BlcnR5KG5hbWUpIHsgfSAvL2VzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnMKCiAgICAgICAgLyoqCiAgICAgICAgICogQ3JlYXRlcyBhIHNldHRlci9nZXR0ZXIgcGFpciBmb3IgdGhlIG5hbWVkIHByb3BlcnR5IHdpdGggaXRzIG93bgogICAgICAgICAqIGxvY2FsIHN0b3JhZ2UuICBUaGUgZ2V0dGVyIHJldHVybnMgdGhlIHZhbHVlIGluIHRoZSBsb2NhbCBzdG9yYWdlLAogICAgICAgICAqIGFuZCB0aGUgc2V0dGVyIGNhbGxzIGBfc2V0UHJvcGVydHlgLCB3aGljaCB1cGRhdGVzIHRoZSBsb2NhbCBzdG9yYWdlCiAgICAgICAgICogZm9yIHRoZSBwcm9wZXJ0eSBhbmQgZW5xdWV1ZXMgYSBgX3Byb3BlcnRpZXNDaGFuZ2VkYCBjYWxsYmFjay4KICAgICAgICAgKgogICAgICAgICAqIFRoaXMgbWV0aG9kIG1heSBiZSBjYWxsZWQgb24gYSBwcm90b3R5cGUgb3IgYW4gaW5zdGFuY2UuICBDYWxsaW5nCiAgICAgICAgICogdGhpcyBtZXRob2QgbWF5IG92ZXJ3cml0ZSBhIHByb3BlcnR5IHZhbHVlIHRoYXQgYWxyZWFkeSBleGlzdHMgb24KICAgICAgICAgKiB0aGUgcHJvdG90eXBlL2luc3RhbmNlIGJ5IGNyZWF0aW5nIHRoZSBhY2Nlc3Nvci4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eSBOYW1lIG9mIHRoZSBwcm9wZXJ0eQogICAgICAgICAqIEBwYXJhbSB7Ym9vbGVhbj19IHJlYWRPbmx5IFdoZW4gdHJ1ZSwgbm8gc2V0dGVyIGlzIGNyZWF0ZWQ7IHRoZQogICAgICAgICAqICAgcHJvdGVjdGVkIGBfc2V0UHJvcGVydHlgIGZ1bmN0aW9uIG11c3QgYmUgdXNlZCB0byBzZXQgdGhlIHByb3BlcnR5CiAgICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICAgKiBAcHJvdGVjdGVkCiAgICAgICAgICovCiAgICAgICAgX2NyZWF0ZVByb3BlcnR5QWNjZXNzb3IocHJvcGVydHksIHJlYWRPbmx5KSB7CiAgICAgICAgICB0aGlzLl9hZGRQcm9wZXJ0eVRvQXR0cmlidXRlTWFwKHByb3BlcnR5KTsKICAgICAgICAgIGlmICghdGhpcy5oYXNPd25Qcm9wZXJ0eSgnX19kYXRhSGFzQWNjZXNzb3InKSkgewogICAgICAgICAgICB0aGlzLl9fZGF0YUhhc0FjY2Vzc29yID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5fX2RhdGFIYXNBY2Nlc3Nvcik7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoIXRoaXMuX19kYXRhSGFzQWNjZXNzb3JbcHJvcGVydHldKSB7CiAgICAgICAgICAgIHRoaXMuX19kYXRhSGFzQWNjZXNzb3JbcHJvcGVydHldID0gdHJ1ZTsKICAgICAgICAgICAgdGhpcy5fZGVmaW5lUHJvcGVydHlBY2Nlc3Nvcihwcm9wZXJ0eSwgcmVhZE9ubHkpOwogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLyoqCiAgICAgICAgICogQWRkcyB0aGUgZ2l2ZW4gYHByb3BlcnR5YCB0byBhIG1hcCBtYXRjaGluZyBhdHRyaWJ1dGUgbmFtZXMKICAgICAgICAgKiB0byBwcm9wZXJ0eSBuYW1lcywgdXNpbmcgYGF0dHJpYnV0ZU5hbWVGb3JQcm9wZXJ0eWAuIFRoaXMgbWFwIGlzCiAgICAgICAgICogdXNlZCB3aGVuIGRlc2VyaWFsaXppbmcgYXR0cmlidXRlIHZhbHVlcyB0byBwcm9wZXJ0aWVzLgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IE5hbWUgb2YgdGhlIHByb3BlcnR5CiAgICAgICAgICovCiAgICAgICAgX2FkZFByb3BlcnR5VG9BdHRyaWJ1dGVNYXAocHJvcGVydHkpIHsKICAgICAgICAgIGlmICghdGhpcy5oYXNPd25Qcm9wZXJ0eSgnX19kYXRhQXR0cmlidXRlcycpKSB7CiAgICAgICAgICAgIHRoaXMuX19kYXRhQXR0cmlidXRlcyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuX19kYXRhQXR0cmlidXRlcyk7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoIXRoaXMuX19kYXRhQXR0cmlidXRlc1twcm9wZXJ0eV0pIHsKICAgICAgICAgICAgY29uc3QgYXR0ciA9IHRoaXMuY29uc3RydWN0b3IuYXR0cmlidXRlTmFtZUZvclByb3BlcnR5KHByb3BlcnR5KTsKICAgICAgICAgICAgdGhpcy5fX2RhdGFBdHRyaWJ1dGVzW2F0dHJdID0gcHJvcGVydHk7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBEZWZpbmVzIGEgcHJvcGVydHkgYWNjZXNzb3IgZm9yIHRoZSBnaXZlbiBwcm9wZXJ0eS4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkgTmFtZSBvZiB0aGUgcHJvcGVydHkKICAgICAgICAgKiBAcGFyYW0ge2Jvb2xlYW49fSByZWFkT25seSBXaGVuIHRydWUsIG5vIHNldHRlciBpcyBjcmVhdGVkCiAgICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICAgKi8KICAgICAgICAgX2RlZmluZVByb3BlcnR5QWNjZXNzb3IocHJvcGVydHksIHJlYWRPbmx5KSB7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgcHJvcGVydHksIHsKICAgICAgICAgICAgLyogZXNsaW50LWRpc2FibGUgdmFsaWQtanNkb2MgKi8KICAgICAgICAgICAgLyoqIEB0aGlzIHtQcm9wZXJ0aWVzQ2hhbmdlZH0gKi8KICAgICAgICAgICAgZ2V0KCkgewogICAgICAgICAgICAgIHJldHVybiB0aGlzLl9nZXRQcm9wZXJ0eShwcm9wZXJ0eSk7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIC8qKiBAdGhpcyB7UHJvcGVydGllc0NoYW5nZWR9ICovCiAgICAgICAgICAgIHNldDogcmVhZE9ubHkgPyBmdW5jdGlvbiAoKSB7fSA6IGZ1bmN0aW9uICh2YWx1ZSkgewogICAgICAgICAgICAgIHRoaXMuX3NldFByb3BlcnR5KHByb3BlcnR5LCB2YWx1ZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLyogZXNsaW50LWVuYWJsZSAqLwogICAgICAgICAgfSk7CiAgICAgICAgfQoKICAgICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICAgIHN1cGVyKCk7CiAgICAgICAgICB0aGlzLl9fZGF0YUVuYWJsZWQgPSBmYWxzZTsKICAgICAgICAgIHRoaXMuX19kYXRhUmVhZHkgPSBmYWxzZTsKICAgICAgICAgIHRoaXMuX19kYXRhSW52YWxpZCA9IGZhbHNlOwogICAgICAgICAgdGhpcy5fX2RhdGEgPSB7fTsKICAgICAgICAgIHRoaXMuX19kYXRhUGVuZGluZyA9IG51bGw7CiAgICAgICAgICB0aGlzLl9fZGF0YU9sZCA9IG51bGw7CiAgICAgICAgICB0aGlzLl9fZGF0YUluc3RhbmNlUHJvcHMgPSBudWxsOwogICAgICAgICAgdGhpcy5fX3NlcmlhbGl6aW5nID0gZmFsc2U7CiAgICAgICAgICB0aGlzLl9pbml0aWFsaXplUHJvcGVydGllcygpOwogICAgICAgIH0KCiAgICAgICAgLyoqCiAgICAgICAgICogTGlmZWN5Y2xlIGNhbGxiYWNrIGNhbGxlZCB3aGVuIHByb3BlcnRpZXMgYXJlIGVuYWJsZWQgdmlhCiAgICAgICAgICogYF9lbmFibGVQcm9wZXJ0aWVzYC4KICAgICAgICAgKgogICAgICAgICAqIFVzZXJzIG1heSBvdmVycmlkZSB0aGlzIGZ1bmN0aW9uIHRvIGltcGxlbWVudCBiZWhhdmlvciB0aGF0IGlzCiAgICAgICAgICogZGVwZW5kZW50IG9uIHRoZSBlbGVtZW50IGhhdmluZyBpdHMgcHJvcGVydHkgZGF0YSBpbml0aWFsaXplZCwgZS5nLgogICAgICAgICAqIGZyb20gZGVmYXVsdHMgKGluaXRpYWxpemVkIGZyb20gYGNvbnN0cnVjdG9yYCwgYF9pbml0aWFsaXplUHJvcGVydGllc2ApLAogICAgICAgICAqIGBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2tgLCBvciB2YWx1ZXMgcHJvcGFnYXRlZCBmcm9tIGhvc3QgZS5nLiB2aWEKICAgICAgICAgKiBiaW5kaW5ncy4gIGBzdXBlci5yZWFkeSgpYCBtdXN0IGJlIGNhbGxlZCB0byBlbnN1cmUgdGhlIGRhdGEgc3lzdGVtCiAgICAgICAgICogYmVjb21lcyBlbmFibGVkLgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICAgKiBAcHVibGljCiAgICAgICAgICovCiAgICAgICAgcmVhZHkoKSB7CiAgICAgICAgICB0aGlzLl9fZGF0YVJlYWR5ID0gdHJ1ZTsKICAgICAgICAgIHRoaXMuX2ZsdXNoUHJvcGVydGllcygpOwogICAgICAgIH0KCiAgICAgICAgLyoqCiAgICAgICAgICogSW5pdGlhbGl6ZXMgdGhlIGxvY2FsIHN0b3JhZ2UgZm9yIHByb3BlcnR5IGFjY2Vzc29ycy4KICAgICAgICAgKgogICAgICAgICAqIFByb3ZpZGVkIGFzIGFuIG92ZXJyaWRlIHBvaW50IGZvciBwZXJmb3JtaW5nIGFueSBzZXR1cCB3b3JrIHByaW9yCiAgICAgICAgICogdG8gaW5pdGlhbGl6aW5nIHRoZSBwcm9wZXJ0eSBhY2Nlc3NvciBzeXN0ZW0uCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgICAqIEBwcm90ZWN0ZWQKICAgICAgICAgKi8KICAgICAgICBfaW5pdGlhbGl6ZVByb3BlcnRpZXMoKSB7CiAgICAgICAgICAvLyBDYXB0dXJlIGluc3RhbmNlIHByb3BlcnRpZXM7IHRoZXNlIHdpbGwgYmUgc2V0IGludG8gYWNjZXNzb3JzCiAgICAgICAgICAvLyBkdXJpbmcgZmlyc3QgZmx1c2guIERvbid0IHNldCB0aGVtIGhlcmUsIHNpbmNlIHdlIHdhbnQKICAgICAgICAgIC8vIHRoZXNlIHRvIG92ZXJ3cml0ZSBkZWZhdWx0cy9jb25zdHJ1Y3RvciBhc3NpZ25tZW50cwogICAgICAgICAgZm9yIChsZXQgcCBpbiB0aGlzLl9fZGF0YUhhc0FjY2Vzc29yKSB7CiAgICAgICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KHApKSB7CiAgICAgICAgICAgICAgdGhpcy5fX2RhdGFJbnN0YW5jZVByb3BzID0gdGhpcy5fX2RhdGFJbnN0YW5jZVByb3BzIHx8IHt9OwogICAgICAgICAgICAgIHRoaXMuX19kYXRhSW5zdGFuY2VQcm9wc1twXSA9IHRoaXNbcF07CiAgICAgICAgICAgICAgZGVsZXRlIHRoaXNbcF07CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIENhbGxlZCBhdCByZWFkeSB0aW1lIHdpdGggYmFnIG9mIGluc3RhbmNlIHByb3BlcnRpZXMgdGhhdCBvdmVyd3JvdGUKICAgICAgICAgKiBhY2Nlc3NvcnMgd2hlbiB0aGUgZWxlbWVudCB1cGdyYWRlZC4KICAgICAgICAgKgogICAgICAgICAqIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHNldHMgdGhlc2UgcHJvcGVydGllcyBiYWNrIGludG8gdGhlCiAgICAgICAgICogc2V0dGVyIGF0IHJlYWR5IHRpbWUuICBUaGlzIG1ldGhvZCBpcyBwcm92aWRlZCBhcyBhbiBvdmVycmlkZQogICAgICAgICAqIHBvaW50IGZvciBjdXN0b21pemluZyBvciBwcm92aWRpbmcgbW9yZSBlZmZpY2llbnQgaW5pdGlhbGl6YXRpb24uCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gcHJvcHMgQmFnIG9mIHByb3BlcnR5IHZhbHVlcyB0aGF0IHdlcmUgb3ZlcndyaXR0ZW4KICAgICAgICAgKiAgIHdoZW4gY3JlYXRpbmcgcHJvcGVydHkgYWNjZXNzb3JzLgogICAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAgICogQHByb3RlY3RlZAogICAgICAgICAqLwogICAgICAgIF9pbml0aWFsaXplSW5zdGFuY2VQcm9wZXJ0aWVzKHByb3BzKSB7CiAgICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIHByb3BzKTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIFVwZGF0ZXMgdGhlIGxvY2FsIHN0b3JhZ2UgZm9yIGEgcHJvcGVydHkgKHZpYSBgX3NldFBlbmRpbmdQcm9wZXJ0eWApCiAgICAgICAgICogYW5kIGVucXVldWVzIGEgYF9wcm9lcHJ0aWVzQ2hhbmdlZGAgY2FsbGJhY2suCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkgTmFtZSBvZiB0aGUgcHJvcGVydHkKICAgICAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFZhbHVlIHRvIHNldAogICAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAgICogQHByb3RlY3RlZAogICAgICAgICAqLwogICAgICAgIF9zZXRQcm9wZXJ0eShwcm9wZXJ0eSwgdmFsdWUpIHsKICAgICAgICAgIGlmICh0aGlzLl9zZXRQZW5kaW5nUHJvcGVydHkocHJvcGVydHksIHZhbHVlKSkgewogICAgICAgICAgICB0aGlzLl9pbnZhbGlkYXRlUHJvcGVydGllcygpOwogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLyoqCiAgICAgICAgICogUmV0dXJucyB0aGUgdmFsdWUgZm9yIHRoZSBnaXZlbiBwcm9wZXJ0eS4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkgTmFtZSBvZiBwcm9wZXJ0eQogICAgICAgICAqIEByZXR1cm4geyp9IFZhbHVlIGZvciB0aGUgZ2l2ZW4gcHJvcGVydHkKICAgICAgICAgKiBAcHJvdGVjdGVkCiAgICAgICAgICovCiAgICAgICAgX2dldFByb3BlcnR5KHByb3BlcnR5KSB7CiAgICAgICAgICByZXR1cm4gdGhpcy5fX2RhdGFbcHJvcGVydHldOwogICAgICAgIH0KCiAgICAgICAgLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi8KICAgICAgICAvKioKICAgICAgICAgKiBVcGRhdGVzIHRoZSBsb2NhbCBzdG9yYWdlIGZvciBhIHByb3BlcnR5LCByZWNvcmRzIHRoZSBwcmV2aW91cyB2YWx1ZSwKICAgICAgICAgKiBhbmQgYWRkcyBpdCB0byB0aGUgc2V0IG9mICJwZW5kaW5nIGNoYW5nZXMiIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlCiAgICAgICAgICogYF9wcm9wZXJ0aWVzQ2hhbmdlZGAgY2FsbGJhY2suICBUaGlzIG1ldGhvZCBkb2VzIG5vdCBlbnF1ZXVlIHRoZQogICAgICAgICAqIGBfcHJvcGVydGllc0NoYW5nZWRgIGNhbGxiYWNrLgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IE5hbWUgb2YgdGhlIHByb3BlcnR5CiAgICAgICAgICogQHBhcmFtIHsqfSB2YWx1ZSBWYWx1ZSB0byBzZXQKICAgICAgICAgKiBAcGFyYW0ge2Jvb2xlYW49fSBleHQgTm90IHVzZWQgaGVyZTsgYWZmb3JkYW5jZSBmb3IgY2xvc3VyZQogICAgICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IFJldHVybnMgdHJ1ZSBpZiB0aGUgcHJvcGVydHkgY2hhbmdlZAogICAgICAgICAqIEBwcm90ZWN0ZWQKICAgICAgICAgKi8KICAgICAgICBfc2V0UGVuZGluZ1Byb3BlcnR5KHByb3BlcnR5LCB2YWx1ZSwgZXh0KSB7CiAgICAgICAgICBsZXQgb2xkID0gdGhpcy5fX2RhdGFbcHJvcGVydHldOwogICAgICAgICAgbGV0IGNoYW5nZWQgPSB0aGlzLl9zaG91bGRQcm9wZXJ0eUNoYW5nZShwcm9wZXJ0eSwgdmFsdWUsIG9sZCk7CiAgICAgICAgICBpZiAoY2hhbmdlZCkgewogICAgICAgICAgICBpZiAoIXRoaXMuX19kYXRhUGVuZGluZykgewogICAgICAgICAgICAgIHRoaXMuX19kYXRhUGVuZGluZyA9IHt9OwogICAgICAgICAgICAgIHRoaXMuX19kYXRhT2xkID0ge307CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy8gRW5zdXJlIG9sZCBpcyBjYXB0dXJlZCBmcm9tIHRoZSBsYXN0IHR1cm4KICAgICAgICAgICAgaWYgKHRoaXMuX19kYXRhT2xkICYmICEocHJvcGVydHkgaW4gdGhpcy5fX2RhdGFPbGQpKSB7CiAgICAgICAgICAgICAgdGhpcy5fX2RhdGFPbGRbcHJvcGVydHldID0gb2xkOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRoaXMuX19kYXRhW3Byb3BlcnR5XSA9IHZhbHVlOwogICAgICAgICAgICB0aGlzLl9fZGF0YVBlbmRpbmdbcHJvcGVydHldID0gdmFsdWU7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gY2hhbmdlZDsKICAgICAgICB9CiAgICAgICAgLyogZXNsaW50LWVuYWJsZSAqLwoKICAgICAgICAvKioKICAgICAgICAgKiBNYXJrcyB0aGUgcHJvcGVydGllcyBhcyBpbnZhbGlkLCBhbmQgZW5xdWV1ZXMgYW4gYXN5bmMKICAgICAgICAgKiBgX3Byb3BlcnRpZXNDaGFuZ2VkYCBjYWxsYmFjay4KICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAgICogQHByb3RlY3RlZAogICAgICAgICAqLwogICAgICAgIF9pbnZhbGlkYXRlUHJvcGVydGllcygpIHsKICAgICAgICAgIGlmICghdGhpcy5fX2RhdGFJbnZhbGlkICYmIHRoaXMuX19kYXRhUmVhZHkpIHsKICAgICAgICAgICAgdGhpcy5fX2RhdGFJbnZhbGlkID0gdHJ1ZTsKICAgICAgICAgICAgbWljcm90YXNrLnJ1bigoKSA9PiB7CiAgICAgICAgICAgICAgaWYgKHRoaXMuX19kYXRhSW52YWxpZCkgewogICAgICAgICAgICAgICAgdGhpcy5fX2RhdGFJbnZhbGlkID0gZmFsc2U7CiAgICAgICAgICAgICAgICB0aGlzLl9mbHVzaFByb3BlcnRpZXMoKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLyoqCiAgICAgICAgICogQ2FsbCB0byBlbmFibGUgcHJvcGVydHkgYWNjZXNzb3IgcHJvY2Vzc2luZy4gQmVmb3JlIHRoaXMgbWV0aG9kIGlzCiAgICAgICAgICogY2FsbGVkIGFjY2Vzc29yIHZhbHVlcyB3aWxsIGJlIHNldCBidXQgc2lkZSBlZmZlY3RzIGFyZQogICAgICAgICAqIHF1ZXVlZC4gV2hlbiBjYWxsZWQsIGFueSBwZW5kaW5nIHNpZGUgZWZmZWN0cyBvY2N1ciBpbW1lZGlhdGVseS4KICAgICAgICAgKiBGb3IgZWxlbWVudHMsIGdlbmVyYWxseSBgY29ubmVjdGVkQ2FsbGJhY2tgIGlzIGEgbm9ybWFsIHNwb3QgdG8gZG8gc28uCiAgICAgICAgICogSXQgaXMgc2FmZSB0byBjYWxsIHRoaXMgbWV0aG9kIG11bHRpcGxlIHRpbWVzIGFzIGl0IG9ubHkgdHVybnMgb24KICAgICAgICAgKiBwcm9wZXJ0eSBhY2Nlc3NvcnMgb25jZS4KICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAgICogQHByb3RlY3RlZAogICAgICAgICAqLwogICAgICAgIF9lbmFibGVQcm9wZXJ0aWVzKCkgewogICAgICAgICAgaWYgKCF0aGlzLl9fZGF0YUVuYWJsZWQpIHsKICAgICAgICAgICAgdGhpcy5fX2RhdGFFbmFibGVkID0gdHJ1ZTsKICAgICAgICAgICAgaWYgKHRoaXMuX19kYXRhSW5zdGFuY2VQcm9wcykgewogICAgICAgICAgICAgIHRoaXMuX2luaXRpYWxpemVJbnN0YW5jZVByb3BlcnRpZXModGhpcy5fX2RhdGFJbnN0YW5jZVByb3BzKTsKICAgICAgICAgICAgICB0aGlzLl9fZGF0YUluc3RhbmNlUHJvcHMgPSBudWxsOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRoaXMucmVhZHkoKTsKICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIENhbGxzIHRoZSBgX3Byb3BlcnRpZXNDaGFuZ2VkYCBjYWxsYmFjayB3aXRoIHRoZSBjdXJyZW50IHNldCBvZgogICAgICAgICAqIHBlbmRpbmcgY2hhbmdlcyAoYW5kIG9sZCB2YWx1ZXMgcmVjb3JkZWQgd2hlbiBwZW5kaW5nIGNoYW5nZXMgd2VyZQogICAgICAgICAqIHNldCksIGFuZCByZXNldHMgdGhlIHBlbmRpbmcgc2V0IG9mIGNoYW5nZXMuIEdlbmVyYWxseSwgdGhpcyBtZXRob2QKICAgICAgICAgKiBzaG91bGQgbm90IGJlIGNhbGxlZCBpbiB1c2VyIGNvZGUuCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgICAqIEBwcm90ZWN0ZWQKICAgICAgICAgKi8KICAgICAgICBfZmx1c2hQcm9wZXJ0aWVzKCkgewogICAgICAgICAgY29uc3QgcHJvcHMgPSB0aGlzLl9fZGF0YTsKICAgICAgICAgIGNvbnN0IGNoYW5nZWRQcm9wcyA9IHRoaXMuX19kYXRhUGVuZGluZzsKICAgICAgICAgIGNvbnN0IG9sZCA9IHRoaXMuX19kYXRhT2xkOwogICAgICAgICAgaWYgKHRoaXMuX3Nob3VsZFByb3BlcnRpZXNDaGFuZ2UocHJvcHMsIGNoYW5nZWRQcm9wcywgb2xkKSkgewogICAgICAgICAgICB0aGlzLl9fZGF0YVBlbmRpbmcgPSBudWxsOwogICAgICAgICAgICB0aGlzLl9fZGF0YU9sZCA9IG51bGw7CiAgICAgICAgICAgIHRoaXMuX3Byb3BlcnRpZXNDaGFuZ2VkKHByb3BzLCBjaGFuZ2VkUHJvcHMsIG9sZCk7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBDYWxsZWQgaW4gYF9mbHVzaFByb3BlcnRpZXNgIHRvIGRldGVybWluZSBpZiBgX3Byb3BlcnRpZXNDaGFuZ2VkYAogICAgICAgICAqIHNob3VsZCBiZSBjYWxsZWQuIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgdHJ1ZSBpZgogICAgICAgICAqIHByb3BlcnRpZXMgYXJlIHBlbmRpbmcuIE92ZXJyaWRlIHRvIGN1c3RvbWl6ZSB3aGVuCiAgICAgICAgICogYF9wcm9wZXJ0aWVzQ2hhbmdlZGAgaXMgY2FsbGVkLgogICAgICAgICAqIEBwYXJhbSB7IU9iamVjdH0gY3VycmVudFByb3BzIEJhZyBvZiBhbGwgY3VycmVudCBhY2Nlc3NvciB2YWx1ZXMKICAgICAgICAgKiBAcGFyYW0geyFPYmplY3R9IGNoYW5nZWRQcm9wcyBCYWcgb2YgcHJvcGVydGllcyBjaGFuZ2VkIHNpbmNlIHRoZSBsYXN0CiAgICAgICAgICogICBjYWxsIHRvIGBfcHJvcGVydGllc0NoYW5nZWRgCiAgICAgICAgICogQHBhcmFtIHshT2JqZWN0fSBvbGRQcm9wcyBCYWcgb2YgcHJldmlvdXMgdmFsdWVzIGZvciBlYWNoIHByb3BlcnR5CiAgICAgICAgICogICBpbiBgY2hhbmdlZFByb3BzYAogICAgICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IHRydWUgaWYgY2hhbmdlZFByb3BzIGlzIHRydXRoeQogICAgICAgICAqLwogICAgICAgIF9zaG91bGRQcm9wZXJ0aWVzQ2hhbmdlKGN1cnJlbnRQcm9wcywgY2hhbmdlZFByb3BzLCBvbGRQcm9wcykgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzCiAgICAgICAgICByZXR1cm4gQm9vbGVhbihjaGFuZ2VkUHJvcHMpOwogICAgICAgIH0KCiAgICAgICAgLyoqCiAgICAgICAgICogQ2FsbGJhY2sgY2FsbGVkIHdoZW4gYW55IHByb3BlcnRpZXMgd2l0aCBhY2Nlc3NvcnMgY3JlYXRlZCB2aWEKICAgICAgICAgKiBgX2NyZWF0ZVByb3BlcnR5QWNjZXNzb3JgIGhhdmUgYmVlbiBzZXQuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0geyFPYmplY3R9IGN1cnJlbnRQcm9wcyBCYWcgb2YgYWxsIGN1cnJlbnQgYWNjZXNzb3IgdmFsdWVzCiAgICAgICAgICogQHBhcmFtIHshT2JqZWN0fSBjaGFuZ2VkUHJvcHMgQmFnIG9mIHByb3BlcnRpZXMgY2hhbmdlZCBzaW5jZSB0aGUgbGFzdAogICAgICAgICAqICAgY2FsbCB0byBgX3Byb3BlcnRpZXNDaGFuZ2VkYAogICAgICAgICAqIEBwYXJhbSB7IU9iamVjdH0gb2xkUHJvcHMgQmFnIG9mIHByZXZpb3VzIHZhbHVlcyBmb3IgZWFjaCBwcm9wZXJ0eQogICAgICAgICAqICAgaW4gYGNoYW5nZWRQcm9wc2AKICAgICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgICAqIEBwcm90ZWN0ZWQKICAgICAgICAgKi8KICAgICAgICBfcHJvcGVydGllc0NoYW5nZWQoY3VycmVudFByb3BzLCBjaGFuZ2VkUHJvcHMsIG9sZFByb3BzKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnMKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIE1ldGhvZCBjYWxsZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYSBwcm9wZXJ0eSB2YWx1ZSBzaG91bGQgYmUKICAgICAgICAgKiBjb25zaWRlcmVkIGFzIGEgY2hhbmdlIGFuZCBjYXVzZSB0aGUgYF9wcm9wZXJ0aWVzQ2hhbmdlZGAgY2FsbGJhY2sKICAgICAgICAgKiB0byBiZSBlbnF1ZXVlZC4KICAgICAgICAgKgogICAgICAgICAqIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgYHRydWVgIGlmIGEgc3RyaWN0IGVxdWFsaXR5CiAgICAgICAgICogY2hlY2sgZmFpbHMuIFRoZSBtZXRob2QgYWx3YXlzIHJldHVybnMgZmFsc2UgZm9yIGBOYU5gLgogICAgICAgICAqCiAgICAgICAgICogT3ZlcnJpZGUgdGhpcyBtZXRob2QgdG8gZS5nLiBwcm92aWRlIHN0cmljdGVyIGNoZWNraW5nIGZvcgogICAgICAgICAqIE9iamVjdHMvQXJyYXlzIHdoZW4gdXNpbmcgaW1tdXRhYmxlIHBhdHRlcm5zLgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IFByb3BlcnR5IG5hbWUKICAgICAgICAgKiBAcGFyYW0geyp9IHZhbHVlIE5ldyBwcm9wZXJ0eSB2YWx1ZQogICAgICAgICAqIEBwYXJhbSB7Kn0gb2xkIFByZXZpb3VzIHByb3BlcnR5IHZhbHVlCiAgICAgICAgICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB0aGUgcHJvcGVydHkgc2hvdWxkIGJlIGNvbnNpZGVyZWQgYSBjaGFuZ2UKICAgICAgICAgKiAgIGFuZCBlbnF1ZXVlIGEgYF9wcm9lcHJ0aWVzQ2hhbmdlZGAgY2FsbGJhY2sKICAgICAgICAgKiBAcHJvdGVjdGVkCiAgICAgICAgICovCiAgICAgICAgX3Nob3VsZFByb3BlcnR5Q2hhbmdlKHByb3BlcnR5LCB2YWx1ZSwgb2xkKSB7CiAgICAgICAgICByZXR1cm4gKAogICAgICAgICAgICAvLyBTdHJpY3QgZXF1YWxpdHkgY2hlY2sKICAgICAgICAgICAgKG9sZCAhPT0gdmFsdWUgJiYKICAgICAgICAgICAgICAvLyBUaGlzIGVuc3VyZXMgKG9sZD09TmFOLCB2YWx1ZT09TmFOKSBhbHdheXMgcmV0dXJucyBmYWxzZQogICAgICAgICAgICAgIChvbGQgPT09IG9sZCB8fCB2YWx1ZSA9PT0gdmFsdWUpKQogICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIEltcGxlbWVudHMgbmF0aXZlIEN1c3RvbSBFbGVtZW50cyBgYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrYCB0bwogICAgICAgICAqIHNldCBhbiBhdHRyaWJ1dGUgdmFsdWUgdG8gYSBwcm9wZXJ0eSB2aWEgYF9hdHRyaWJ1dGVUb1Byb3BlcnR5YC4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIE5hbWUgb2YgYXR0cmlidXRlIHRoYXQgY2hhbmdlZAogICAgICAgICAqIEBwYXJhbSB7P3N0cmluZ30gb2xkIE9sZCBhdHRyaWJ1dGUgdmFsdWUKICAgICAgICAgKiBAcGFyYW0gez9zdHJpbmd9IHZhbHVlIE5ldyBhdHRyaWJ1dGUgdmFsdWUKICAgICAgICAgKiBAcGFyYW0gez9zdHJpbmd9IG5hbWVzcGFjZSBBdHRyaWJ1dGUgbmFtZXNwYWNlLgogICAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAgICogQHN1cHByZXNzIHttaXNzaW5nUHJvcGVydGllc30gU3VwZXIgbWF5IG9yIG1heSBub3QgaW1wbGVtZW50IHRoZSBjYWxsYmFjawogICAgICAgICAqLwogICAgICAgIGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhuYW1lLCBvbGQsIHZhbHVlLCBuYW1lc3BhY2UpIHsKICAgICAgICAgIGlmIChvbGQgIT09IHZhbHVlKSB7CiAgICAgICAgICAgIHRoaXMuX2F0dHJpYnV0ZVRvUHJvcGVydHkobmFtZSwgdmFsdWUpOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHN1cGVyLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaykgewogICAgICAgICAgICBzdXBlci5hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2sobmFtZSwgb2xkLCB2YWx1ZSwgbmFtZXNwYWNlKTsKICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIERlc2VyaWFsaXplcyBhbiBhdHRyaWJ1dGUgdG8gaXRzIGFzc29jaWF0ZWQgcHJvcGVydHkuCiAgICAgICAgICoKICAgICAgICAgKiBUaGlzIG1ldGhvZCBjYWxscyB0aGUgYF9kZXNlcmlhbGl6ZVZhbHVlYCBtZXRob2QgdG8gY29udmVydCB0aGUgc3RyaW5nIHRvCiAgICAgICAgICogYSB0eXBlZCB2YWx1ZS4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBhdHRyaWJ1dGUgTmFtZSBvZiBhdHRyaWJ1dGUgdG8gZGVzZXJpYWxpemUuCiAgICAgICAgICogQHBhcmFtIHs/c3RyaW5nfSB2YWx1ZSBvZiB0aGUgYXR0cmlidXRlLgogICAgICAgICAqIEBwYXJhbSB7Kj19IHR5cGUgdHlwZSB0byBkZXNlcmlhbGl6ZSB0bywgZGVmYXVsdHMgdG8gdGhlIHZhbHVlCiAgICAgICAgICogcmV0dXJuZWQgZnJvbSBgdHlwZUZvclByb3BlcnR5YAogICAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAgICovCiAgICAgICAgX2F0dHJpYnV0ZVRvUHJvcGVydHkoYXR0cmlidXRlLCB2YWx1ZSwgdHlwZSkgewogICAgICAgICAgaWYgKCF0aGlzLl9fc2VyaWFsaXppbmcpIHsKICAgICAgICAgICAgY29uc3QgbWFwID0gdGhpcy5fX2RhdGFBdHRyaWJ1dGVzOwogICAgICAgICAgICBjb25zdCBwcm9wZXJ0eSA9IG1hcCAmJiBtYXBbYXR0cmlidXRlXSB8fCBhdHRyaWJ1dGU7CiAgICAgICAgICAgIHRoaXNbcHJvcGVydHldID0gdGhpcy5fZGVzZXJpYWxpemVWYWx1ZSh2YWx1ZSwgdHlwZSB8fAogICAgICAgICAgICAgIHRoaXMuY29uc3RydWN0b3IudHlwZUZvclByb3BlcnR5KHByb3BlcnR5KSk7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBTZXJpYWxpemVzIGEgcHJvcGVydHkgdG8gaXRzIGFzc29jaWF0ZWQgYXR0cmlidXRlLgogICAgICAgICAqCiAgICAgICAgICogQHN1cHByZXNzIHtpbnZhbGlkQ2FzdHN9IENsb3N1cmUgY2FuJ3QgZmlndXJlIG91dCBgdGhpc2AgaXMgYW4gZWxlbWVudC4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eSBQcm9wZXJ0eSBuYW1lIHRvIHJlZmxlY3QuCiAgICAgICAgICogQHBhcmFtIHtzdHJpbmc9fSBhdHRyaWJ1dGUgQXR0cmlidXRlIG5hbWUgdG8gcmVmbGVjdCB0by4KICAgICAgICAgKiBAcGFyYW0geyo9fSB2YWx1ZSBQcm9wZXJ0eSB2YWx1ZSB0byByZWZlY3QuCiAgICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICAgKi8KICAgICAgICBfcHJvcGVydHlUb0F0dHJpYnV0ZShwcm9wZXJ0eSwgYXR0cmlidXRlLCB2YWx1ZSkgewogICAgICAgICAgdGhpcy5fX3NlcmlhbGl6aW5nID0gdHJ1ZTsKICAgICAgICAgIHZhbHVlID0gKGFyZ3VtZW50cy5sZW5ndGggPCAzKSA/IHRoaXNbcHJvcGVydHldIDogdmFsdWU7CiAgICAgICAgICB0aGlzLl92YWx1ZVRvTm9kZUF0dHJpYnV0ZSgvKiogQHR5cGUgeyFIVE1MRWxlbWVudH0gKi8odGhpcyksIHZhbHVlLAogICAgICAgICAgICBhdHRyaWJ1dGUgfHwgdGhpcy5jb25zdHJ1Y3Rvci5hdHRyaWJ1dGVOYW1lRm9yUHJvcGVydHkocHJvcGVydHkpKTsKICAgICAgICAgIHRoaXMuX19zZXJpYWxpemluZyA9IGZhbHNlOwogICAgICAgIH0KCiAgICAgICAgLyoqCiAgICAgICAgICogU2V0cyBhIHR5cGVkIHZhbHVlIHRvIGFuIEhUTUwgYXR0cmlidXRlIG9uIGEgbm9kZS4KICAgICAgICAgKgogICAgICAgICAqIFRoaXMgbWV0aG9kIGNhbGxzIHRoZSBgX3NlcmlhbGl6ZVZhbHVlYCBtZXRob2QgdG8gY29udmVydCB0aGUgdHlwZWQKICAgICAgICAgKiB2YWx1ZSB0byBhIHN0cmluZy4gIElmIHRoZSBgX3NlcmlhbGl6ZVZhbHVlYCBtZXRob2QgcmV0dXJucyBgdW5kZWZpbmVkYCwKICAgICAgICAgKiB0aGUgYXR0cmlidXRlIHdpbGwgYmUgcmVtb3ZlZCAodGhpcyBpcyB0aGUgZGVmYXVsdCBmb3IgYm9vbGVhbgogICAgICAgICAqIHR5cGUgYGZhbHNlYCkuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IG5vZGUgRWxlbWVudCB0byBzZXQgYXR0cmlidXRlIHRvLgogICAgICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVmFsdWUgdG8gc2VyaWFsaXplLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBhdHRyaWJ1dGUgQXR0cmlidXRlIG5hbWUgdG8gc2VyaWFsaXplIHRvLgogICAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAgICovCiAgICAgICAgX3ZhbHVlVG9Ob2RlQXR0cmlidXRlKG5vZGUsIHZhbHVlLCBhdHRyaWJ1dGUpIHsKICAgICAgICAgIGNvbnN0IHN0ciA9IHRoaXMuX3NlcmlhbGl6ZVZhbHVlKHZhbHVlKTsKICAgICAgICAgIGlmIChzdHIgPT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICBub2RlLnJlbW92ZUF0dHJpYnV0ZShhdHRyaWJ1dGUpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoYXR0cmlidXRlLCBzdHIpOwogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLyoqCiAgICAgICAgICogQ29udmVydHMgYSB0eXBlZCBKYXZhU2NyaXB0IHZhbHVlIHRvIGEgc3RyaW5nLgogICAgICAgICAqCiAgICAgICAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW4gc2V0dGluZyBKUyBwcm9wZXJ0eSB2YWx1ZXMgdG8KICAgICAgICAgKiBIVE1MIGF0dHJpYnV0ZXMuICBVc2VycyBtYXkgb3ZlcnJpZGUgdGhpcyBtZXRob2QgdG8gcHJvdmlkZQogICAgICAgICAqIHNlcmlhbGl6YXRpb24gZm9yIGN1c3RvbSB0eXBlcy4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgUHJvcGVydHkgdmFsdWUgdG8gc2VyaWFsaXplLgogICAgICAgICAqIEByZXR1cm4ge3N0cmluZyB8IHVuZGVmaW5lZH0gU3RyaW5nIHNlcmlhbGl6ZWQgZnJvbSB0aGUgcHJvdmlkZWQKICAgICAgICAgKiBwcm9wZXJ0eSAgdmFsdWUuCiAgICAgICAgICovCiAgICAgICAgX3NlcmlhbGl6ZVZhbHVlKHZhbHVlKSB7CiAgICAgICAgICBzd2l0Y2ggKHR5cGVvZiB2YWx1ZSkgewogICAgICAgICAgICBjYXNlICdib29sZWFuJzoKICAgICAgICAgICAgICByZXR1cm4gdmFsdWUgPyAnJyA6IHVuZGVmaW5lZDsKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICByZXR1cm4gdmFsdWUgIT0gbnVsbCA/IHZhbHVlLnRvU3RyaW5nKCkgOiB1bmRlZmluZWQ7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBDb252ZXJ0cyBhIHN0cmluZyB0byBhIHR5cGVkIEphdmFTY3JpcHQgdmFsdWUuCiAgICAgICAgICoKICAgICAgICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbiByZWFkaW5nIEhUTUwgYXR0cmlidXRlIHZhbHVlcyB0bwogICAgICAgICAqIEpTIHByb3BlcnRpZXMuICBVc2VycyBtYXkgb3ZlcnJpZGUgdGhpcyBtZXRob2QgdG8gcHJvdmlkZQogICAgICAgICAqIGRlc2VyaWFsaXphdGlvbiBmb3IgY3VzdG9tIGB0eXBlYHMuIFR5cGVzIGZvciBgQm9vbGVhbmAsIGBTdHJpbmdgLAogICAgICAgICAqIGFuZCBgTnVtYmVyYCBjb252ZXJ0IGF0dHJpYnV0ZXMgdG8gdGhlIGV4cGVjdGVkIHR5cGVzLgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHs/c3RyaW5nfSB2YWx1ZSBWYWx1ZSB0byBkZXNlcmlhbGl6ZS4KICAgICAgICAgKiBAcGFyYW0geyo9fSB0eXBlIFR5cGUgdG8gZGVzZXJpYWxpemUgdGhlIHN0cmluZyB0by4KICAgICAgICAgKiBAcmV0dXJuIHsqfSBUeXBlZCB2YWx1ZSBkZXNlcmlhbGl6ZWQgZnJvbSB0aGUgcHJvdmlkZWQgc3RyaW5nLgogICAgICAgICAqLwogICAgICAgIF9kZXNlcmlhbGl6ZVZhbHVlKHZhbHVlLCB0eXBlKSB7CiAgICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICAgICAgICAgY2FzZSBCb29sZWFuOgogICAgICAgICAgICAgIHJldHVybiAodmFsdWUgIT09IG51bGwpOwogICAgICAgICAgICBjYXNlIE51bWJlcjoKICAgICAgICAgICAgICByZXR1cm4gTnVtYmVyKHZhbHVlKTsKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgfQoKICAgICAgcmV0dXJuIFByb3BlcnRpZXNDaGFuZ2VkOwogICAgfSk7CgoKICB9KSgpOwoKPC9zY3JpcHQ+PHNjcmlwdD4KKGZ1bmN0aW9uKCkgewoKICAndXNlIHN0cmljdCc7CgogIGxldCBjYXNlTWFwID0gUG9seW1lci5DYXNlTWFwOwoKICAvLyBTYXZlIG1hcCBvZiBuYXRpdmUgcHJvcGVydGllczsgdGhpcyBmb3JtcyBhIGJsYWNrbGlzdCBvciBwcm9wZXJ0aWVzCiAgLy8gdGhhdCB3b24ndCBoYXZlIHRoZWlyIHZhbHVlcyAic2F2ZWQiIGJ5IGBzYXZlQWNjZXNzb3JWYWx1ZWAsIHNpbmNlCiAgLy8gcmVhZGluZyBmcm9tIGFuIEhUTUxFbGVtZW50IGFjY2Vzc29yIGZyb20gdGhlIGNvbnRleHQgb2YgYSBwcm90b3R5cGUgdGhyb3dzCiAgY29uc3QgbmF0aXZlUHJvcGVydGllcyA9IHt9OwogIGxldCBwcm90byA9IEhUTUxFbGVtZW50LnByb3RvdHlwZTsKICB3aGlsZSAocHJvdG8pIHsKICAgIGxldCBwcm9wcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHByb3RvKTsKICAgIGZvciAobGV0IGk9MDsgaTxwcm9wcy5sZW5ndGg7IGkrKykgewogICAgICBuYXRpdmVQcm9wZXJ0aWVzW3Byb3BzW2ldXSA9IHRydWU7CiAgICB9CiAgICBwcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihwcm90byk7CiAgfQoKICAvKioKICAgKiBVc2VkIHRvIHNhdmUgdGhlIHZhbHVlIG9mIGEgcHJvcGVydHkgdGhhdCB3aWxsIGJlIG92ZXJyaWRkZW4gd2l0aAogICAqIGFuIGFjY2Vzc29yLiBJZiB0aGUgYG1vZGVsYCBpcyBhIHByb3RvdHlwZSwgdGhlIHZhbHVlcyB3aWxsIGJlIHNhdmVkCiAgICogaW4gYF9fZGF0YVByb3RvYCwgYW5kIGl0J3MgdXAgdG8gdGhlIHVzZXIgKG9yIGRvd25zdHJlYW0gbWl4aW4pIHRvCiAgICogZGVjaWRlIGhvdy93aGVuIHRvIHNldCB0aGVzZSB2YWx1ZXMgYmFjayBpbnRvIHRoZSBhY2Nlc3NvcnMuCiAgICogSWYgYG1vZGVsYCBpcyBhbHJlYWR5IGFuIGluc3RhbmNlIChpdCBoYXMgYSBgX19kYXRhYCBwcm9wZXJ0eSksIHRoZW4KICAgKiB0aGUgdmFsdWUgd2lsbCBiZSBzZXQgYXMgYSBwZW5kaW5nIHByb3BlcnR5LCBtZWFuaW5nIHRoZSB1c2VyIHNob3VsZAogICAqIGNhbGwgYF9pbnZhbGlkYXRlUHJvcGVydGllc2Agb3IgYF9mbHVzaFByb3BlcnRpZXNgIHRvIHRha2UgZWZmZWN0CiAgICoKICAgKiBAcGFyYW0ge09iamVjdH0gbW9kZWwgUHJvdG90eXBlIG9yIGluc3RhbmNlCiAgICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IE5hbWUgb2YgcHJvcGVydHkKICAgKiBAcmV0dXJuIHt2b2lkfQogICAqIEBwcml2YXRlCiAgICovCiAgZnVuY3Rpb24gc2F2ZUFjY2Vzc29yVmFsdWUobW9kZWwsIHByb3BlcnR5KSB7CiAgICAvLyBEb24ndCByZWFkL3N0b3JlIHZhbHVlIGZvciBhbnkgbmF0aXZlIHByb3BlcnRpZXMgc2luY2UgdGhleSBjb3VsZCB0aHJvdwogICAgaWYgKCFuYXRpdmVQcm9wZXJ0aWVzW3Byb3BlcnR5XSkgewogICAgICBsZXQgdmFsdWUgPSBtb2RlbFtwcm9wZXJ0eV07CiAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7CiAgICAgICAgaWYgKG1vZGVsLl9fZGF0YSkgewogICAgICAgICAgLy8gQWRkaW5nIGFjY2Vzc29yIHRvIGluc3RhbmNlOyB1cGRhdGUgdGhlIHByb3BlcnR5CiAgICAgICAgICAvLyBJdCBpcyB0aGUgdXNlcidzIHJlc3BvbnNpYmlsaXR5IHRvIGNhbGwgX2ZsdXNoUHJvcGVydGllcwogICAgICAgICAgbW9kZWwuX3NldFBlbmRpbmdQcm9wZXJ0eShwcm9wZXJ0eSwgdmFsdWUpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAvLyBBZGRpbmcgYWNjZXNzb3IgdG8gcHJvdG87IHNhdmUgcHJvdG8ncyB2YWx1ZSBmb3IgaW5zdGFuY2UtdGltZSB1c2UKICAgICAgICAgIGlmICghbW9kZWwuX19kYXRhUHJvdG8pIHsKICAgICAgICAgICAgbW9kZWwuX19kYXRhUHJvdG8gPSB7fTsKICAgICAgICAgIH0gZWxzZSBpZiAoIW1vZGVsLmhhc093blByb3BlcnR5KEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoJ19fZGF0YVByb3RvJywgbW9kZWwpKSkgewogICAgICAgICAgICBtb2RlbC5fX2RhdGFQcm90byA9IE9iamVjdC5jcmVhdGUobW9kZWwuX19kYXRhUHJvdG8pOwogICAgICAgICAgfQogICAgICAgICAgbW9kZWwuX19kYXRhUHJvdG9bcHJvcGVydHldID0gdmFsdWU7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQoKICAvKioKICAgKiBFbGVtZW50IGNsYXNzIG1peGluIHRoYXQgcHJvdmlkZXMgYmFzaWMgbWV0YS1wcm9ncmFtbWluZyBmb3IgY3JlYXRpbmcgb25lCiAgICogb3IgbW9yZSBwcm9wZXJ0eSBhY2Nlc3NvcnMgKGdldHRlci9zZXR0ZXIgcGFpcikgdGhhdCBlbnF1ZXVlIGFuIGFzeW5jCiAgICogKGJhdGNoZWQpIGBfcHJvcGVydGllc0NoYW5nZWRgIGNhbGxiYWNrLgogICAqCiAgICogRm9yIGJhc2ljIHVzYWdlIG9mIHRoaXMgbWl4aW46CiAgICogCiAgICogLSAgIERlY2xhcmUgYXR0cmlidXRlcyB0byBvYnNlcnZlIHZpYSB0aGUgc3RhbmRhcmQgYHN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKClgLiBVc2UKICAgKiAgICAgYGRhc2gtY2FzZWAgYXR0cmlidXRlIG5hbWVzIHRvIHJlcHJlc2VudCBgY2FtZWxDYXNlYCBwcm9wZXJ0eSBuYW1lcy4gCiAgICogLSAgIEltcGxlbWVudCB0aGUgYF9wcm9wZXJ0aWVzQ2hhbmdlZGAgY2FsbGJhY2sgb24gdGhlIGNsYXNzLgogICAqIC0gICBDYWxsIGBNeUNsYXNzLmNyZWF0ZVByb3BlcnRpZXNGb3JBdHRyaWJ1dGVzKClgICoqb25jZSoqIG9uIHRoZSBjbGFzcyB0byBnZW5lcmF0ZSAKICAgKiAgICAgcHJvcGVydHkgYWNjZXNzb3JzIGZvciBlYWNoIG9ic2VydmVkIGF0dHJpYnV0ZS4gVGhpcyBtdXN0IGJlIGNhbGxlZCBiZWZvcmUgdGhlIGZpcnN0IAogICAqICAgICBpbnN0YW5jZSBpcyBjcmVhdGVkLCBmb3IgZXhhbXBsZSwgYnkgY2FsbGluZyBpdCBiZWZvcmUgY2FsbGluZyBgY3VzdG9tRWxlbWVudHMuZGVmaW5lYC4KICAgKiAgICAgSXQgY2FuIGFsc28gYmUgY2FsbGVkIGxhemlseSBmcm9tIHRoZSBlbGVtZW50J3MgYGNvbnN0cnVjdG9yYCwgYXMgbG9uZyBhcyBpdCdzIGd1YXJkZWQgc28KICAgKiAgICAgdGhhdCB0aGUgY2FsbCBpcyBvbmx5IG1hZGUgb25jZSwgd2hlbiB0aGUgZmlyc3QgaW5zdGFuY2UgaXMgY3JlYXRlZC4KICAgKiAtICAgQ2FsbCBgdGhpcy5fZW5hYmxlUHJvcGVydGllcygpYCBpbiB0aGUgZWxlbWVudCdzIGBjb25uZWN0ZWRDYWxsYmFja2AgdG8gZW5hYmxlIAogICAqICAgICB0aGUgYWNjZXNzb3JzLgogICAqCiAgICogQW55IGBvYnNlcnZlZEF0dHJpYnV0ZXNgIHdpbGwgYXV0b21hdGljYWxseSBiZQogICAqIGRlc2VyaWFsaXplZCB2aWEgYGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFja2AgYW5kIHNldCB0byB0aGUgYXNzb2NpYXRlZAogICAqIHByb3BlcnR5IHVzaW5nIGBkYXNoLWNhc2VgLXRvLWBjYW1lbENhc2VgIGNvbnZlbnRpb24uCiAgICoKICAgKiBAbWl4aW5GdW5jdGlvbgogICAqIEBwb2x5bWVyCiAgICogQGFwcGxpZXNNaXhpbiBQb2x5bWVyLlByb3BlcnRpZXNDaGFuZ2VkCiAgICogQG1lbWJlcm9mIFBvbHltZXIKICAgKiBAc3VtbWFyeSBFbGVtZW50IGNsYXNzIG1peGluIGZvciByZWFjdGluZyB0byBwcm9wZXJ0eSBjaGFuZ2VzIGZyb20KICAgKiAgIGdlbmVyYXRlZCBwcm9wZXJ0eSBhY2Nlc3NvcnMuCiAgICovCiAgUG9seW1lci5Qcm9wZXJ0eUFjY2Vzc29ycyA9IFBvbHltZXIuZGVkdXBpbmdNaXhpbihzdXBlckNsYXNzID0+IHsKCiAgICAvKioKICAgICAqIEBjb25zdHJ1Y3RvcgogICAgICogQGV4dGVuZHMge3N1cGVyQ2xhc3N9CiAgICAgKiBAaW1wbGVtZW50cyB7UG9seW1lcl9Qcm9wZXJ0aWVzQ2hhbmdlZH0KICAgICAqIEB1bnJlc3RyaWN0ZWQKICAgICAqIEBwcml2YXRlCiAgICAgKi8KICAgICBjb25zdCBiYXNlID0gUG9seW1lci5Qcm9wZXJ0aWVzQ2hhbmdlZChzdXBlckNsYXNzKTsKCiAgICAvKioKICAgICAqIEBwb2x5bWVyCiAgICAgKiBAbWl4aW5DbGFzcwogICAgICogQGltcGxlbWVudHMge1BvbHltZXJfUHJvcGVydHlBY2Nlc3NvcnN9CiAgICAgKiBAZXh0ZW5kcyB7YmFzZX0KICAgICAqIEB1bnJlc3RyaWN0ZWQKICAgICAqLwogICAgY2xhc3MgUHJvcGVydHlBY2Nlc3NvcnMgZXh0ZW5kcyBiYXNlIHsKCiAgICAgIC8qKgogICAgICAgKiBHZW5lcmF0ZXMgcHJvcGVydHkgYWNjZXNzb3JzIGZvciBhbGwgYXR0cmlidXRlcyBpbiB0aGUgc3RhbmRhcmQKICAgICAgICogc3RhdGljIGBvYnNlcnZlZEF0dHJpYnV0ZXNgIGFycmF5LgogICAgICAgKgogICAgICAgKiBBdHRyaWJ1dGUgbmFtZXMgYXJlIG1hcHBlZCB0byBwcm9wZXJ0eSBuYW1lcyB1c2luZyB0aGUgYGRhc2gtY2FzZWAgdG8KICAgICAgICogYGNhbWVsQ2FzZWAgY29udmVudGlvbgogICAgICAgKgogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKi8KICAgICAgc3RhdGljIGNyZWF0ZVByb3BlcnRpZXNGb3JBdHRyaWJ1dGVzKCkgewogICAgICAgIGxldCBhJCA9IHRoaXMub2JzZXJ2ZWRBdHRyaWJ1dGVzOwogICAgICAgIGZvciAobGV0IGk9MDsgaSA8IGEkLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICB0aGlzLnByb3RvdHlwZS5fY3JlYXRlUHJvcGVydHlBY2Nlc3NvcihjYXNlTWFwLmRhc2hUb0NhbWVsQ2FzZShhJFtpXSkpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIFJldHVybnMgYW4gYXR0cmlidXRlIG5hbWUgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgZ2l2ZW4gcHJvcGVydHkuCiAgICAgICAqIEJ5IGRlZmF1bHQsIGNvbnZlcnRzIGNhbWVsIHRvIGRhc2ggY2FzZSwgZS5nLiBgZm9vQmFyYCB0byBgZm9vLWJhcmAuCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eSBQcm9wZXJ0eSB0byBjb252ZXJ0CiAgICAgICAqIEByZXR1cm4ge3N0cmluZ30gQXR0cmlidXRlIG5hbWUgY29ycmVzcG9uZGluZyB0byB0aGUgZ2l2ZW4gcHJvcGVydHkuCiAgICAgICAqCiAgICAgICAqIEBwcm90ZWN0ZWQKICAgICAgICovCiAgICAgIHN0YXRpYyBhdHRyaWJ1dGVOYW1lRm9yUHJvcGVydHkocHJvcGVydHkpIHsKICAgICAgICByZXR1cm4gY2FzZU1hcC5jYW1lbFRvRGFzaENhc2UocHJvcGVydHkpOwogICAgICB9CgogICAgICAvKioKICAgICAgICogT3ZlcnJpZGVzIFByb3BlcnRpZXNDaGFuZ2VkIGltcGxlbWVudGF0aW9uIHRvIGluaXRpYWxpemUgdmFsdWVzIGZvcgogICAgICAgKiBhY2Nlc3NvcnMgY3JlYXRlZCBmb3IgdmFsdWVzIHRoYXQgYWxyZWFkeSBleGlzdGVkIG9uIHRoZSBlbGVtZW50CiAgICAgICAqIHByb3RvdHlwZS4KICAgICAgICoKICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICogQHByb3RlY3RlZAogICAgICAgKi8KICAgICAgX2luaXRpYWxpemVQcm9wZXJ0aWVzKCkgewogICAgICAgIGlmICh0aGlzLl9fZGF0YVByb3RvKSB7CiAgICAgICAgICB0aGlzLl9pbml0aWFsaXplUHJvdG9Qcm9wZXJ0aWVzKHRoaXMuX19kYXRhUHJvdG8pOwogICAgICAgICAgdGhpcy5fX2RhdGFQcm90byA9IG51bGw7CiAgICAgICAgfQogICAgICAgIHN1cGVyLl9pbml0aWFsaXplUHJvcGVydGllcygpOwogICAgICB9CgogICAgICAvKioKICAgICAgICogQ2FsbGVkIGF0IGluc3RhbmNlIHRpbWUgd2l0aCBiYWcgb2YgcHJvcGVydGllcyB0aGF0IHdlcmUgb3ZlcndyaXR0ZW4KICAgICAgICogYnkgYWNjZXNzb3JzIG9uIHRoZSBwcm90b3R5cGUgd2hlbiBhY2Nlc3NvcnMgd2VyZSBjcmVhdGVkLgogICAgICAgKgogICAgICAgKiBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBzZXRzIHRoZXNlIHByb3BlcnRpZXMgYmFjayBpbnRvIHRoZQogICAgICAgKiBzZXR0ZXIgYXQgaW5zdGFuY2UgdGltZS4gIFRoaXMgbWV0aG9kIGlzIHByb3ZpZGVkIGFzIGFuIG92ZXJyaWRlCiAgICAgICAqIHBvaW50IGZvciBjdXN0b21pemluZyBvciBwcm92aWRpbmcgbW9yZSBlZmZpY2llbnQgaW5pdGlhbGl6YXRpb24uCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wcyBCYWcgb2YgcHJvcGVydHkgdmFsdWVzIHRoYXQgd2VyZSBvdmVyd3JpdHRlbgogICAgICAgKiAgIHdoZW4gY3JlYXRpbmcgcHJvcGVydHkgYWNjZXNzb3JzLgogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKiBAcHJvdGVjdGVkCiAgICAgICAqLwogICAgICBfaW5pdGlhbGl6ZVByb3RvUHJvcGVydGllcyhwcm9wcykgewogICAgICAgIGZvciAobGV0IHAgaW4gcHJvcHMpIHsKICAgICAgICAgIHRoaXMuX3NldFByb3BlcnR5KHAsIHByb3BzW3BdKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBFbnN1cmVzIHRoZSBlbGVtZW50IGhhcyB0aGUgZ2l2ZW4gYXR0cmlidXRlLiBJZiBpdCBkb2VzIG5vdCwKICAgICAgICogYXNzaWducyB0aGUgZ2l2ZW4gdmFsdWUgdG8gdGhlIGF0dHJpYnV0ZS4KICAgICAgICoKICAgICAgICogQHN1cHByZXNzIHtpbnZhbGlkQ2FzdHN9IENsb3N1cmUgY2FuJ3QgZmlndXJlIG91dCBgdGhpc2AgaXMgaW5mYWN0IGFuIGVsZW1lbnQKICAgICAgICoKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IGF0dHJpYnV0ZSBOYW1lIG9mIGF0dHJpYnV0ZSB0byBlbnN1cmUgaXMgc2V0LgogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gdmFsdWUgb2YgdGhlIGF0dHJpYnV0ZS4KICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICovCiAgICAgIF9lbnN1cmVBdHRyaWJ1dGUoYXR0cmlidXRlLCB2YWx1ZSkgewogICAgICAgIGNvbnN0IGVsID0gLyoqIEB0eXBlIHshSFRNTEVsZW1lbnR9ICovKHRoaXMpOwogICAgICAgIGlmICghZWwuaGFzQXR0cmlidXRlKGF0dHJpYnV0ZSkpIHsKICAgICAgICAgIHRoaXMuX3ZhbHVlVG9Ob2RlQXR0cmlidXRlKGVsLCB2YWx1ZSwgYXR0cmlidXRlKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBPdmVycmlkZXMgUHJvcGVydGllc0NoYW5nZWQgaW1wbGVtZW50aW9uIHRvIHNlcmlhbGl6ZSBvYmplY3RzIGFzIEpTT04uCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgUHJvcGVydHkgdmFsdWUgdG8gc2VyaWFsaXplLgogICAgICAgKiBAcmV0dXJuIHtzdHJpbmcgfCB1bmRlZmluZWR9IFN0cmluZyBzZXJpYWxpemVkIGZyb20gdGhlIHByb3ZpZGVkIHByb3BlcnR5IHZhbHVlLgogICAgICAgKi8KICAgICAgX3NlcmlhbGl6ZVZhbHVlKHZhbHVlKSB7CiAgICAgICAgLyogZXNsaW50LWRpc2FibGUgbm8tZmFsbHRocm91Z2ggKi8KICAgICAgICBzd2l0Y2ggKHR5cGVvZiB2YWx1ZSkgewogICAgICAgICAgY2FzZSAnb2JqZWN0JzoKICAgICAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkgewogICAgICAgICAgICAgIHJldHVybiB2YWx1ZS50b1N0cmluZygpOwogICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlKSB7CiAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7CiAgICAgICAgICAgICAgfSBjYXRjaCh4KSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJyc7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgcmV0dXJuIHN1cGVyLl9zZXJpYWxpemVWYWx1ZSh2YWx1ZSk7CiAgICAgICAgfQogICAgICB9CgogICAgICAvKioKICAgICAgICogQ29udmVydHMgYSBzdHJpbmcgdG8gYSB0eXBlZCBKYXZhU2NyaXB0IHZhbHVlLgogICAgICAgKgogICAgICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgUG9seW1lciB3aGVuIHJlYWRpbmcgSFRNTCBhdHRyaWJ1dGUgdmFsdWVzIHRvCiAgICAgICAqIEpTIHByb3BlcnRpZXMuICBVc2VycyBtYXkgb3ZlcnJpZGUgdGhpcyBtZXRob2Qgb24gUG9seW1lciBlbGVtZW50CiAgICAgICAqIHByb3RvdHlwZXMgdG8gcHJvdmlkZSBkZXNlcmlhbGl6YXRpb24gZm9yIGN1c3RvbSBgdHlwZWBzLiAgTm90ZSwKICAgICAgICogdGhlIGB0eXBlYCBhcmd1bWVudCBpcyB0aGUgdmFsdWUgb2YgdGhlIGB0eXBlYCBmaWVsZCBwcm92aWRlZCBpbiB0aGUKICAgICAgICogYHByb3BlcnRpZXNgIGNvbmZpZ3VyYXRpb24gb2JqZWN0IGZvciBhIGdpdmVuIHByb3BlcnR5LCBhbmQgaXMKICAgICAgICogYnkgY29udmVudGlvbiB0aGUgY29uc3RydWN0b3IgZm9yIHRoZSB0eXBlIHRvIGRlc2VyaWFsaXplLgogICAgICAgKgogICAgICAgKgogICAgICAgKiBAcGFyYW0gez9zdHJpbmd9IHZhbHVlIEF0dHJpYnV0ZSB2YWx1ZSB0byBkZXNlcmlhbGl6ZS4KICAgICAgICogQHBhcmFtIHsqPX0gdHlwZSBUeXBlIHRvIGRlc2VyaWFsaXplIHRoZSBzdHJpbmcgdG8uCiAgICAgICAqIEByZXR1cm4geyp9IFR5cGVkIHZhbHVlIGRlc2VyaWFsaXplZCBmcm9tIHRoZSBwcm92aWRlZCBzdHJpbmcuCiAgICAgICAqLwogICAgICBfZGVzZXJpYWxpemVWYWx1ZSh2YWx1ZSwgdHlwZSkgewogICAgICAgIC8qKgogICAgICAgICAqIEB0eXBlIHsqfQogICAgICAgICAqLwogICAgICAgIGxldCBvdXRWYWx1ZTsKICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICAgICAgIGNhc2UgT2JqZWN0OgogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgIG91dFZhbHVlID0gSlNPTi5wYXJzZSgvKiogQHR5cGUge3N0cmluZ30gKi8odmFsdWUpKTsKICAgICAgICAgICAgfSBjYXRjaCh4KSB7CiAgICAgICAgICAgICAgLy8gYWxsb3cgbm9uLUpTT04gbGl0ZXJhbHMgbGlrZSBTdHJpbmdzIGFuZCBOdW1iZXJzCiAgICAgICAgICAgICAgb3V0VmFsdWUgPSB2YWx1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgQXJyYXk6CiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgb3V0VmFsdWUgPSBKU09OLnBhcnNlKC8qKiBAdHlwZSB7c3RyaW5nfSAqLyh2YWx1ZSkpOwogICAgICAgICAgICB9IGNhdGNoKHgpIHsKICAgICAgICAgICAgICBvdXRWYWx1ZSA9IG51bGw7CiAgICAgICAgICAgICAgY29uc29sZS53YXJuKGBQb2x5bWVyOjpBdHRyaWJ1dGVzOiBjb3VsZG4ndCBkZWNvZGUgQXJyYXkgYXMgSlNPTjogJHt2YWx1ZX1gKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgRGF0ZToKICAgICAgICAgICAgb3V0VmFsdWUgPSBpc05hTih2YWx1ZSkgPyBTdHJpbmcodmFsdWUpIDogTnVtYmVyKHZhbHVlKTsKICAgICAgICAgICAgb3V0VmFsdWUgPSBuZXcgRGF0ZShvdXRWYWx1ZSk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgb3V0VmFsdWUgPSBzdXBlci5fZGVzZXJpYWxpemVWYWx1ZSh2YWx1ZSwgdHlwZSk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICByZXR1cm4gb3V0VmFsdWU7CiAgICAgIH0KICAgICAgLyogZXNsaW50LWVuYWJsZSBuby1mYWxsdGhyb3VnaCAqLwoKICAgICAgLyoqCiAgICAgICAqIE92ZXJyaWRlcyBQcm9wZXJ0aWVzQ2hhbmdlZCBpbXBsZW1lbnRhdGlvbiB0byBzYXZlIGV4aXN0aW5nIHByb3RvdHlwZQogICAgICAgKiBwcm9wZXJ0eSB2YWx1ZSBzbyB0aGF0IGl0IGNhbiBiZSByZXNldC4KICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IE5hbWUgb2YgdGhlIHByb3BlcnR5CiAgICAgICAqIEBwYXJhbSB7Ym9vbGVhbj19IHJlYWRPbmx5IFdoZW4gdHJ1ZSwgbm8gc2V0dGVyIGlzIGNyZWF0ZWQKICAgICAgICoKICAgICAgICogV2hlbiBjYWxsaW5nIG9uIGEgcHJvdG90eXBlLCBhbnkgb3ZlcndyaXR0ZW4gdmFsdWVzIGFyZSBzYXZlZCBpbgogICAgICAgKiBgX19kYXRhUHJvdG9gLCBhbmQgaXQgaXMgdXAgdG8gdGhlIHN1YmNsYXNzZXIgdG8gZGVjaWRlIGhvdy93aGVuCiAgICAgICAqIHRvIHNldCB0aG9zZSBwcm9wZXJ0aWVzIGJhY2sgaW50byB0aGUgYWNjZXNzb3IuICBXaGVuIGNhbGxpbmcgb24gYW4KICAgICAgICogaW5zdGFuY2UsIHRoZSBvdmVyd3JpdHRlbiB2YWx1ZSBpcyBzZXQgdmlhIGBfc2V0UGVuZGluZ1Byb3BlcnR5YCwKICAgICAgICogYW5kIHRoZSB1c2VyIHNob3VsZCBjYWxsIGBfaW52YWxpZGF0ZVByb3BlcnRpZXNgIG9yIGBfZmx1c2hQcm9wZXJ0aWVzYAogICAgICAgKiBmb3IgdGhlIHZhbHVlcyB0byB0YWtlIGVmZmVjdC4KICAgICAgICogQHByb3RlY3RlZAogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKi8KICAgICAgX2RlZmluZVByb3BlcnR5QWNjZXNzb3IocHJvcGVydHksIHJlYWRPbmx5KSB7CiAgICAgICAgc2F2ZUFjY2Vzc29yVmFsdWUodGhpcywgcHJvcGVydHkpOwogICAgICAgIHN1cGVyLl9kZWZpbmVQcm9wZXJ0eUFjY2Vzc29yKHByb3BlcnR5LCByZWFkT25seSk7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhpcyBsaWJyYXJ5IGNyZWF0ZWQgYW4gYWNjZXNzb3IgZm9yIHRoZSBnaXZlbiBwcm9wZXJ0eS4KICAgICAgICoKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IFByb3BlcnR5IG5hbWUKICAgICAgICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiBhbiBhY2Nlc3NvciB3YXMgY3JlYXRlZAogICAgICAgKi8KICAgICAgX2hhc0FjY2Vzc29yKHByb3BlcnR5KSB7CiAgICAgICAgcmV0dXJuIHRoaXMuX19kYXRhSGFzQWNjZXNzb3IgJiYgdGhpcy5fX2RhdGFIYXNBY2Nlc3Nvcltwcm9wZXJ0eV07CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHNwZWNpZmllZCBwcm9wZXJ0eSBoYXMgYSBwZW5kaW5nIGNoYW5nZS4KICAgICAgICoKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHByb3AgUHJvcGVydHkgbmFtZQogICAgICAgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHByb3BlcnR5IGhhcyBhIHBlbmRpbmcgY2hhbmdlCiAgICAgICAqIEBwcm90ZWN0ZWQKICAgICAgICovCiAgICAgIF9pc1Byb3BlcnR5UGVuZGluZyhwcm9wKSB7CiAgICAgICAgcmV0dXJuIEJvb2xlYW4odGhpcy5fX2RhdGFQZW5kaW5nICYmIChwcm9wIGluIHRoaXMuX19kYXRhUGVuZGluZykpOwogICAgICB9CgogICAgfQoKICAgIHJldHVybiBQcm9wZXJ0eUFjY2Vzc29yczsKCiAgfSk7Cgp9KSgpOwo8L3NjcmlwdD48c2NyaXB0PgooZnVuY3Rpb24oKSB7CgogICd1c2Ugc3RyaWN0JzsKCiAgY29uc3Qgd2Fsa2VyID0gZG9jdW1lbnQuY3JlYXRlVHJlZVdhbGtlcihkb2N1bWVudCwgTm9kZUZpbHRlci5TSE9XX0FMTCwKICAgICAgbnVsbCwgZmFsc2UpOwoKICAvLyAxLnggYmFja3dhcmRzLWNvbXBhdGlibGUgYXV0by13cmFwcGVyIGZvciB0ZW1wbGF0ZSB0eXBlIGV4dGVuc2lvbnMKICAvLyBUaGlzIGlzIGEgY2xlYXIgbGF5ZXJpbmcgdmlvbGF0aW9uIGFuZCBnaXZlcyBmYXZvcmVkLW5hdGlvbiBzdGF0dXMgdG8KICAvLyBkb20taWYgYW5kIGRvbS1yZXBlYXQgdGVtcGxhdGVzLiAgVGhpcyBpcyBhIGNvbmNlaXQgd2UncmUgY2hvb3NpbmcgdG8ga2VlcAogIC8vIGEuKSB0byBlYXNlIDEueCBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBkdWUgdG8gbG9zcyBvZiBgaXNgLCBhbmQKICAvLyBiLikgdG8gbWFpbnRhaW4gaWYvcmVwZWF0IGNhcGFiaWxpdHkgaW4gcGFyc2VyLWNvbnN0cmFpbmVkIGVsZW1lbnRzCiAgLy8gICAgIChlLmcuIHRhYmxlLCBzZWxlY3QpIGluIGxpZXUgb2YgbmF0aXZlIENFIHR5cGUgZXh0ZW5zaW9ucyB3aXRob3V0CiAgLy8gICAgIG1hc3NpdmUgbmV3IGludmVudGlvbiBpbiB0aGlzIHNwYWNlIChlLmcuIGRpcmVjdGl2ZSBzeXN0ZW0pCiAgY29uc3QgdGVtcGxhdGVFeHRlbnNpb25zID0gewogICAgJ2RvbS1pZic6IHRydWUsCiAgICAnZG9tLXJlcGVhdCc6IHRydWUKICB9OwogIGZ1bmN0aW9uIHdyYXBUZW1wbGF0ZUV4dGVuc2lvbihub2RlKSB7CiAgICBsZXQgaXMgPSBub2RlLmdldEF0dHJpYnV0ZSgnaXMnKTsKICAgIGlmIChpcyAmJiB0ZW1wbGF0ZUV4dGVuc2lvbnNbaXNdKSB7CiAgICAgIGxldCB0ID0gbm9kZTsKICAgICAgdC5yZW1vdmVBdHRyaWJ1dGUoJ2lzJyk7CiAgICAgIG5vZGUgPSB0Lm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudChpcyk7CiAgICAgIHQucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQobm9kZSwgdCk7CiAgICAgIG5vZGUuYXBwZW5kQ2hpbGQodCk7CiAgICAgIHdoaWxlKHQuYXR0cmlidXRlcy5sZW5ndGgpIHsKICAgICAgICBub2RlLnNldEF0dHJpYnV0ZSh0LmF0dHJpYnV0ZXNbMF0ubmFtZSwgdC5hdHRyaWJ1dGVzWzBdLnZhbHVlKTsKICAgICAgICB0LnJlbW92ZUF0dHJpYnV0ZSh0LmF0dHJpYnV0ZXNbMF0ubmFtZSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBub2RlOwogIH0KCiAgZnVuY3Rpb24gZmluZFRlbXBsYXRlTm9kZShyb290LCBub2RlSW5mbykgewogICAgLy8gcmVjdXJzaXZlbHkgYXNjZW5kIHRyZWUgdW50aWwgd2UgaGl0IHJvb3QKICAgIGxldCBwYXJlbnQgPSBub2RlSW5mby5wYXJlbnRJbmZvICYmIGZpbmRUZW1wbGF0ZU5vZGUocm9vdCwgbm9kZUluZm8ucGFyZW50SW5mbyk7CiAgICAvLyB1bndpbmQgdGhlIHN0YWNrLCByZXR1cm5pbmcgdGhlIGluZGV4ZWQgbm9kZSBhdCBlYWNoIGxldmVsCiAgICBpZiAocGFyZW50KSB7CiAgICAgIC8vIG5vdGU6IG1hcmdpbmFsbHkgZmFzdGVyIHRoYW4gaW5kZXhpbmcgdmlhIGNoaWxkTm9kZXMKICAgICAgLy8gKGh0dHA6Ly9qc3BlcmYuY29tL2NoaWxkbm9kZXMtbG9va3VwKQogICAgICB3YWxrZXIuY3VycmVudE5vZGUgPSBwYXJlbnQ7CiAgICAgIGZvciAobGV0IG49d2Fsa2VyLmZpcnN0Q2hpbGQoKSwgaT0wOyBuOyBuPXdhbGtlci5uZXh0U2libGluZygpKSB7CiAgICAgICAgaWYgKG5vZGVJbmZvLnBhcmVudEluZGV4ID09PSBpKyspIHsKICAgICAgICAgIHJldHVybiBuOwogICAgICAgIH0KICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIHJvb3Q7CiAgICB9CiAgfQoKICAvLyBjb25zdHJ1Y3QgYCRgIG1hcCAoZnJvbSBpZCBhbm5vdGF0aW9ucykKICBmdW5jdGlvbiBhcHBseUlkVG9NYXAoaW5zdCwgbWFwLCBub2RlLCBub2RlSW5mbykgewogICAgaWYgKG5vZGVJbmZvLmlkKSB7CiAgICAgIG1hcFtub2RlSW5mby5pZF0gPSBub2RlOwogICAgfQogIH0KCiAgLy8gaW5zdGFsbCBldmVudCBsaXN0ZW5lcnMgKGZyb20gZXZlbnQgYW5ub3RhdGlvbnMpCiAgZnVuY3Rpb24gYXBwbHlFdmVudExpc3RlbmVyKGluc3QsIG5vZGUsIG5vZGVJbmZvKSB7CiAgICBpZiAobm9kZUluZm8uZXZlbnRzICYmIG5vZGVJbmZvLmV2ZW50cy5sZW5ndGgpIHsKICAgICAgZm9yIChsZXQgaj0wLCBlJD1ub2RlSW5mby5ldmVudHMsIGU7IChqPGUkLmxlbmd0aCkgJiYgKGU9ZSRbal0pOyBqKyspIHsKICAgICAgICBpbnN0Ll9hZGRNZXRob2RFdmVudExpc3RlbmVyVG9Ob2RlKG5vZGUsIGUubmFtZSwgZS52YWx1ZSwgaW5zdCk7CiAgICAgIH0KICAgIH0KICB9CgogIC8vIHB1c2ggY29uZmlndXJhdGlvbiByZWZlcmVuY2VzIGF0IGNvbmZpZ3VyZSB0aW1lCiAgZnVuY3Rpb24gYXBwbHlUZW1wbGF0ZUNvbnRlbnQoaW5zdCwgbm9kZSwgbm9kZUluZm8pIHsKICAgIGlmIChub2RlSW5mby50ZW1wbGF0ZUluZm8pIHsKICAgICAgbm9kZS5fdGVtcGxhdGVJbmZvID0gbm9kZUluZm8udGVtcGxhdGVJbmZvOwogICAgfQogIH0KCiAgZnVuY3Rpb24gY3JlYXRlTm9kZUV2ZW50SGFuZGxlcihjb250ZXh0LCBldmVudE5hbWUsIG1ldGhvZE5hbWUpIHsKICAgIC8vIEluc3RhbmNlcyBjYW4gb3B0aW9uYWxseSBoYXZlIGEgX21ldGhvZEhvc3Qgd2hpY2ggYWxsb3dzIHJlZGlyZWN0aW5nIHdoZXJlCiAgICAvLyB0byBmaW5kIG1ldGhvZHMuIEN1cnJlbnRseSB1c2VkIGJ5IGB0ZW1wbGF0aXplYC4KICAgIGNvbnRleHQgPSBjb250ZXh0Ll9tZXRob2RIb3N0IHx8IGNvbnRleHQ7CiAgICBsZXQgaGFuZGxlciA9IGZ1bmN0aW9uKGUpIHsKICAgICAgaWYgKGNvbnRleHRbbWV0aG9kTmFtZV0pIHsKICAgICAgICBjb250ZXh0W21ldGhvZE5hbWVdKGUsIGUuZGV0YWlsKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBjb25zb2xlLndhcm4oJ2xpc3RlbmVyIG1ldGhvZCBgJyArIG1ldGhvZE5hbWUgKyAnYCBub3QgZGVmaW5lZCcpOwogICAgICB9CiAgICB9OwogICAgcmV0dXJuIGhhbmRsZXI7CiAgfQoKICAvKioKICAgKiBFbGVtZW50IG1peGluIHRoYXQgcHJvdmlkZXMgYmFzaWMgdGVtcGxhdGUgcGFyc2luZyBhbmQgc3RhbXBpbmcsIGluY2x1ZGluZwogICAqIHRoZSBmb2xsb3dpbmcgdGVtcGxhdGUtcmVsYXRlZCBmZWF0dXJlcyBmb3Igc3RhbXBlZCB0ZW1wbGF0ZXM6CiAgICoKICAgKiAtIERlY2xhcmF0aXZlIGV2ZW50IGxpc3RlbmVycyAoYG9uLWV2ZW50bmFtZT0ibGlzdGVuZXIiYCkKICAgKiAtIE1hcCBvZiBub2RlIGlkJ3MgdG8gc3RhbXBlZCBub2RlIGluc3RhbmNlcyAoYHRoaXMuJC5pZGApCiAgICogLSBOZXN0ZWQgdGVtcGxhdGUgY29udGVudCBjYWNoaW5nL3JlbW92YWwgYW5kIHJlLWluc3RhbGxhdGlvbiAocGVyZm9ybWFuY2UKICAgKiAgIG9wdGltaXphdGlvbikKICAgKgogICAqIEBtaXhpbkZ1bmN0aW9uCiAgICogQHBvbHltZXIKICAgKiBAbWVtYmVyb2YgUG9seW1lcgogICAqIEBzdW1tYXJ5IEVsZW1lbnQgY2xhc3MgbWl4aW4gdGhhdCBwcm92aWRlcyBiYXNpYyB0ZW1wbGF0ZSBwYXJzaW5nIGFuZCBzdGFtcGluZwogICAqLwogIFBvbHltZXIuVGVtcGxhdGVTdGFtcCA9IFBvbHltZXIuZGVkdXBpbmdNaXhpbihzdXBlckNsYXNzID0+IHsKCiAgICAvKioKICAgICAqIEBwb2x5bWVyCiAgICAgKiBAbWl4aW5DbGFzcwogICAgICogQGltcGxlbWVudHMge1BvbHltZXJfVGVtcGxhdGVTdGFtcH0KICAgICAqLwogICAgY2xhc3MgVGVtcGxhdGVTdGFtcCBleHRlbmRzIHN1cGVyQ2xhc3MgewoKICAgICAgLyoqCiAgICAgICAqIFNjYW5zIGEgdGVtcGxhdGUgdG8gcHJvZHVjZSB0ZW1wbGF0ZSBtZXRhZGF0YS4KICAgICAgICoKICAgICAgICogVGVtcGxhdGUtc3BlY2lmaWMgbWV0YWRhdGEgYXJlIHN0b3JlZCBpbiB0aGUgb2JqZWN0IHJldHVybmVkLCBhbmQgbm9kZS0KICAgICAgICogc3BlY2lmaWMgbWV0YWRhdGEgYXJlIHN0b3JlZCBpbiBvYmplY3RzIGluIGl0cyBmbGF0dGVuZWQgYG5vZGVJbmZvTGlzdGAKICAgICAgICogYXJyYXkuICBPbmx5IG5vZGVzIGluIHRoZSB0ZW1wbGF0ZSB0aGF0IHdlcmUgcGFyc2VkIGFzIG5vZGVzIG9mCiAgICAgICAqIGludGVyZXN0IGNvbnRhaW4gYW4gb2JqZWN0IGluIGBub2RlSW5mb0xpc3RgLiAgRWFjaCBgbm9kZUluZm9gIG9iamVjdAogICAgICAgKiBjb250YWlucyBhbiBgaW5kZXhgIChgY2hpbGROb2Rlc2AgaW5kZXggaW4gcGFyZW50KSBhbmQgb3B0aW9uYWxseQogICAgICAgKiBgcGFyZW50YCwgd2hpY2ggcG9pbnRzIHRvIG5vZGUgaW5mbyBvZiBpdHMgcGFyZW50IChpbmNsdWRpbmcgaXRzIGluZGV4KS4KICAgICAgICoKICAgICAgICogVGhlIHRlbXBsYXRlIG1ldGFkYXRhIG9iamVjdCByZXR1cm5lZCBmcm9tIHRoaXMgbWV0aG9kIGhhcyB0aGUgZm9sbG93aW5nCiAgICAgICAqIHN0cnVjdHVyZSAobWFueSBmaWVsZHMgb3B0aW9uYWwpOgogICAgICAgKgogICAgICAgKiBgYGBqcwogICAgICAgKiAgIHsKICAgICAgICogICAgIC8vIEZsYXR0ZW5lZCBsaXN0IG9mIG5vZGUgbWV0YWRhdGEgKGZvciBub2RlcyB0aGF0IGdlbmVyYXRlZCBtZXRhZGF0YSkKICAgICAgICogICAgIG5vZGVJbmZvTGlzdDogWwogICAgICAgKiAgICAgICB7CiAgICAgICAqICAgICAgICAgLy8gYGlkYCBhdHRyaWJ1dGUgZm9yIGFueSBub2RlcyB3aXRoIGlkJ3MgZm9yIGdlbmVyYXRpbmcgYCRgIG1hcAogICAgICAgKiAgICAgICAgIGlkOiB7c3RyaW5nfSwKICAgICAgICogICAgICAgICAvLyBgb24tZXZlbnQ9ImhhbmRsZXIiYCBtZXRhZGF0YQogICAgICAgKiAgICAgICAgIGV2ZW50czogWwogICAgICAgKiAgICAgICAgICAgewogICAgICAgKiAgICAgICAgICAgICBuYW1lOiB7c3RyaW5nfSwgICAvLyBldmVudCBuYW1lCiAgICAgICAqICAgICAgICAgICAgIHZhbHVlOiB7c3RyaW5nfSwgIC8vIGhhbmRsZXIgbWV0aG9kIG5hbWUKICAgICAgICogICAgICAgICAgIH0sIC4uLgogICAgICAgKiAgICAgICAgIF0sCiAgICAgICAqICAgICAgICAgLy8gTm90ZXMgd2hlbiB0aGUgdGVtcGxhdGUgY29udGFpbmVkIGEgYDxzbG90PmAgZm9yIHNoYWR5IERPTQogICAgICAgKiAgICAgICAgIC8vIG9wdGltaXphdGlvbiBwdXJwb3NlcwogICAgICAgKiAgICAgICAgIGhhc0luc2VydGlvblBvaW50OiB7Ym9vbGVhbn0sCiAgICAgICAqICAgICAgICAgLy8gRm9yIG5lc3RlZCBgPHRlbXBsYXRlPmBgIG5vZGVzLCBuZXN0ZWQgdGVtcGxhdGUgbWV0YWRhdGEKICAgICAgICogICAgICAgICB0ZW1wbGF0ZUluZm86IHtvYmplY3R9LCAvLyBuZXN0ZWQgdGVtcGxhdGUgbWV0YWRhdGEKICAgICAgICogICAgICAgICAvLyBNZXRhZGF0YSB0byBhbGxvdyBlZmZpY2llbnQgcmV0cmlldmFsIG9mIGluc3RhbmNlZCBub2RlCiAgICAgICAqICAgICAgICAgLy8gY29ycmVzcG9uZGluZyB0byB0aGlzIG1ldGFkYXRhCiAgICAgICAqICAgICAgICAgcGFyZW50SW5mbzoge251bWJlcn0sICAgLy8gcmVmZXJlbmNlIHRvIHBhcmVudCBub2RlSW5mbz4KICAgICAgICogICAgICAgICBwYXJlbnRJbmRleDoge251bWJlcn0sICAvLyBpbmRleCBpbiBwYXJlbnQncyBgY2hpbGROb2Rlc2AgY29sbGVjdGlvbgogICAgICAgKiAgICAgICAgIGluZm9JbmRleDoge251bWJlcn0sICAgIC8vIGluZGV4IG9mIHRoaXMgYG5vZGVJbmZvYCBpbiBgdGVtcGxhdGVJbmZvLm5vZGVJbmZvTGlzdGAKICAgICAgICogICAgICAgfSwKICAgICAgICogICAgICAgLi4uCiAgICAgICAqICAgICBdLAogICAgICAgKiAgICAgLy8gV2hlbiB0cnVlLCB0aGUgdGVtcGxhdGUgaGFkIHRoZSBgc3RyaXAtd2hpdGVzcGFjZWAgYXR0cmlidXRlCiAgICAgICAqICAgICAvLyBvciB3YXMgbmVzdGVkIGluIGEgdGVtcGxhdGUgd2l0aCB0aGF0IHNldHRpbmcKICAgICAgICogICAgIHN0cmlwV2hpdGVzcGFjZToge2Jvb2xlYW59LAogICAgICAgKiAgICAgLy8gRm9yIG5lc3RlZCB0ZW1wbGF0ZXMsIG5lc3RlZCB0ZW1wbGF0ZSBjb250ZW50IGlzIG1vdmVkIGludG8KICAgICAgICogICAgIC8vIGEgZG9jdW1lbnQgZnJhZ21lbnQgc3RvcmVkIGhlcmU7IHRoaXMgaXMgYW4gb3B0aW1pemF0aW9uIHRvCiAgICAgICAqICAgICAvLyBhdm9pZCB0aGUgY29zdCBvZiBuZXN0ZWQgdGVtcGxhdGUgY2xvbmluZwogICAgICAgKiAgICAgY29udGVudDoge0RvY3VtZW50RnJhZ21lbnR9CiAgICAgICAqICAgfQogICAgICAgKiBgYGAKICAgICAgICoKICAgICAgICogVGhpcyBtZXRob2Qga2lja3Mgb2ZmIGEgcmVjdXJzaXZlIHRyZWV3YWxrIGFzIGZvbGxvd3M6CiAgICAgICAqCiAgICAgICAqIGBgYAogICAgICAgKiAgICBfcGFyc2VUZW1wbGF0ZSA8LS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogICAgICAgKiAgICAgIF9wYXJzZVRlbXBsYXRlQ29udGVudCAgICAgICAgICAgICAgfAogICAgICAgKiAgICAgICAgX3BhcnNlVGVtcGxhdGVOb2RlICA8LS0tLS0tLS0tLS0tfC0tKwogICAgICAgKiAgICAgICAgICBfcGFyc2VUZW1wbGF0ZU5lc3RlZFRlbXBsYXRlIC0tKyAgfAogICAgICAgKiAgICAgICAgICBfcGFyc2VUZW1wbGF0ZUNoaWxkTm9kZXMgLS0tLS0tLS0tKwogICAgICAgKiAgICAgICAgICBfcGFyc2VUZW1wbGF0ZU5vZGVBdHRyaWJ1dGVzCiAgICAgICAqICAgICAgICAgICAgX3BhcnNlVGVtcGxhdGVOb2RlQXR0cmlidXRlCiAgICAgICAqCiAgICAgICAqIGBgYAogICAgICAgKgogICAgICAgKiBUaGVzZSBtZXRob2RzIG1heSBiZSBvdmVycmlkZGVuIHRvIGFkZCBjdXN0b20gbWV0YWRhdGEgYWJvdXQgdGVtcGxhdGVzCiAgICAgICAqIHRvIGVpdGhlciBgdGVtcGxhdGVJbmZvYCBvciBgbm9kZUluZm9gLgogICAgICAgKgogICAgICAgKiBOb3RlIHRoYXQgdGhpcyBtZXRob2QgbWF5IGJlIGRlc3RydWN0aXZlIHRvIHRoZSB0ZW1wbGF0ZSwgaW4gdGhhdAogICAgICAgKiBlLmcuIGV2ZW50IGFubm90YXRpb25zIG1heSBiZSByZW1vdmVkIGFmdGVyIGJlaW5nIG5vdGVkIGluIHRoZQogICAgICAgKiB0ZW1wbGF0ZSBtZXRhZGF0YS4KICAgICAgICoKICAgICAgICogQHBhcmFtIHshSFRNTFRlbXBsYXRlRWxlbWVudH0gdGVtcGxhdGUgVGVtcGxhdGUgdG8gcGFyc2UKICAgICAgICogQHBhcmFtIHtUZW1wbGF0ZUluZm89fSBvdXRlclRlbXBsYXRlSW5mbyBUZW1wbGF0ZSBtZXRhZGF0YSBmcm9tIHRoZSBvdXRlcgogICAgICAgKiAgIHRlbXBsYXRlLCBmb3IgcGFyc2luZyBuZXN0ZWQgdGVtcGxhdGVzCiAgICAgICAqIEByZXR1cm4geyFUZW1wbGF0ZUluZm99IFBhcnNlZCB0ZW1wbGF0ZSBtZXRhZGF0YQogICAgICAgKi8KICAgICAgc3RhdGljIF9wYXJzZVRlbXBsYXRlKHRlbXBsYXRlLCBvdXRlclRlbXBsYXRlSW5mbykgewogICAgICAgIC8vIHNpbmNlIGEgdGVtcGxhdGUgbWF5IGJlIHJlLXVzZWQsIG1lbW8taXplIG1ldGFkYXRhCiAgICAgICAgaWYgKCF0ZW1wbGF0ZS5fdGVtcGxhdGVJbmZvKSB7CiAgICAgICAgICBsZXQgdGVtcGxhdGVJbmZvID0gdGVtcGxhdGUuX3RlbXBsYXRlSW5mbyA9IHt9OwogICAgICAgICAgdGVtcGxhdGVJbmZvLm5vZGVJbmZvTGlzdCA9IFtdOwogICAgICAgICAgdGVtcGxhdGVJbmZvLnN0cmlwV2hpdGVTcGFjZSA9IFBvbHltZXIubGVnYWN5T3B0aW1pemF0aW9ucyB8fAogICAgICAgICAgICAob3V0ZXJUZW1wbGF0ZUluZm8gJiYgb3V0ZXJUZW1wbGF0ZUluZm8uc3RyaXBXaGl0ZVNwYWNlKSB8fAogICAgICAgICAgICB0ZW1wbGF0ZS5oYXNBdHRyaWJ1dGUoJ3N0cmlwLXdoaXRlc3BhY2UnKTsKICAgICAgICAgIHRoaXMuX3BhcnNlVGVtcGxhdGVDb250ZW50KHRlbXBsYXRlLCB0ZW1wbGF0ZUluZm8sIHtwYXJlbnQ6IG51bGx9KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRlbXBsYXRlLl90ZW1wbGF0ZUluZm87CiAgICAgIH0KCiAgICAgIHN0YXRpYyBfcGFyc2VUZW1wbGF0ZUNvbnRlbnQodGVtcGxhdGUsIHRlbXBsYXRlSW5mbywgbm9kZUluZm8pIHsKICAgICAgICByZXR1cm4gdGhpcy5fcGFyc2VUZW1wbGF0ZU5vZGUodGVtcGxhdGUuY29udGVudCwgdGVtcGxhdGVJbmZvLCBub2RlSW5mbyk7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBQYXJzZXMgdGVtcGxhdGUgbm9kZSBhbmQgYWRkcyB0ZW1wbGF0ZSBhbmQgbm9kZSBtZXRhZGF0YSBiYXNlZCBvbgogICAgICAgKiB0aGUgY3VycmVudCBub2RlLCBhbmQgaXRzIGBjaGlsZE5vZGVzYCBhbmQgYGF0dHJpYnV0ZXNgLgogICAgICAgKgogICAgICAgKiBUaGlzIG1ldGhvZCBtYXkgYmUgb3ZlcnJpZGRlbiB0byBhZGQgY3VzdG9tIG5vZGUgb3IgdGVtcGxhdGUgc3BlY2lmaWMKICAgICAgICogbWV0YWRhdGEgYmFzZWQgb24gdGhpcyBub2RlLgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge05vZGV9IG5vZGUgTm9kZSB0byBwYXJzZQogICAgICAgKiBAcGFyYW0geyFUZW1wbGF0ZUluZm99IHRlbXBsYXRlSW5mbyBUZW1wbGF0ZSBtZXRhZGF0YSBmb3IgY3VycmVudCB0ZW1wbGF0ZQogICAgICAgKiBAcGFyYW0geyFOb2RlSW5mb30gbm9kZUluZm8gTm9kZSBtZXRhZGF0YSBmb3IgY3VycmVudCB0ZW1wbGF0ZS4KICAgICAgICogQHJldHVybiB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSB2aXNpdGVkIG5vZGUgYWRkZWQgbm9kZS1zcGVjaWZpYwogICAgICAgKiAgIG1ldGFkYXRhIHRvIGBub2RlSW5mb2AKICAgICAgICovCiAgICAgIHN0YXRpYyBfcGFyc2VUZW1wbGF0ZU5vZGUobm9kZSwgdGVtcGxhdGVJbmZvLCBub2RlSW5mbykgewogICAgICAgIGxldCBub3RlZDsKICAgICAgICBsZXQgZWxlbWVudCA9IC8qKiBAdHlwZSB7RWxlbWVudH0gKi8obm9kZSk7CiAgICAgICAgaWYgKGVsZW1lbnQubG9jYWxOYW1lID09ICd0ZW1wbGF0ZScgJiYgIWVsZW1lbnQuaGFzQXR0cmlidXRlKCdwcmVzZXJ2ZS1jb250ZW50JykpIHsKICAgICAgICAgIG5vdGVkID0gdGhpcy5fcGFyc2VUZW1wbGF0ZU5lc3RlZFRlbXBsYXRlKGVsZW1lbnQsIHRlbXBsYXRlSW5mbywgbm9kZUluZm8pIHx8IG5vdGVkOwogICAgICAgIH0gZWxzZSBpZiAoZWxlbWVudC5sb2NhbE5hbWUgPT09ICdzbG90JykgewogICAgICAgICAgLy8gRm9yIFNoYWR5RG9tIG9wdGltaXphdGlvbiwgaW5kaWNhdGluZyB0aGVyZSBpcyBhbiBpbnNlcnRpb24gcG9pbnQKICAgICAgICAgIHRlbXBsYXRlSW5mby5oYXNJbnNlcnRpb25Qb2ludCA9IHRydWU7CiAgICAgICAgfQogICAgICAgIHdhbGtlci5jdXJyZW50Tm9kZSA9IGVsZW1lbnQ7CiAgICAgICAgaWYgKHdhbGtlci5maXJzdENoaWxkKCkpIHsKICAgICAgICAgIG5vdGVkID0gdGhpcy5fcGFyc2VUZW1wbGF0ZUNoaWxkTm9kZXMoZWxlbWVudCwgdGVtcGxhdGVJbmZvLCBub2RlSW5mbykgfHwgbm90ZWQ7CiAgICAgICAgfQogICAgICAgIGlmIChlbGVtZW50Lmhhc0F0dHJpYnV0ZXMgJiYgZWxlbWVudC5oYXNBdHRyaWJ1dGVzKCkpIHsKICAgICAgICAgIG5vdGVkID0gdGhpcy5fcGFyc2VUZW1wbGF0ZU5vZGVBdHRyaWJ1dGVzKGVsZW1lbnQsIHRlbXBsYXRlSW5mbywgbm9kZUluZm8pIHx8IG5vdGVkOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbm90ZWQ7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBQYXJzZXMgdGVtcGxhdGUgY2hpbGQgbm9kZXMgZm9yIHRoZSBnaXZlbiByb290IG5vZGUuCiAgICAgICAqCiAgICAgICAqIFRoaXMgbWV0aG9kIGFsc28gd3JhcHMgd2hpdGVsaXN0ZWQgbGVnYWN5IHRlbXBsYXRlIGV4dGVuc2lvbnMKICAgICAgICogKGBpcz0iZG9tLWlmImAgYW5kIGBpcz0iZG9tLXJlcGVhdCJgKSB3aXRoIHRoZWlyIGVxdWl2YWxlbnQgZWxlbWVudAogICAgICAgKiB3cmFwcGVycywgY29sbGFwc2VzIHRleHQgbm9kZXMsIGFuZCBzdHJpcHMgd2hpdGVzcGFjZSBmcm9tIHRoZSB0ZW1wbGF0ZQogICAgICAgKiBpZiB0aGUgYHRlbXBsYXRlSW5mby5zdHJpcFdoaXRlc3BhY2VgIHNldHRpbmcgd2FzIHByb3ZpZGVkLgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge05vZGV9IHJvb3QgUm9vdCBub2RlIHdob3NlIGBjaGlsZE5vZGVzYCB3aWxsIGJlIHBhcnNlZAogICAgICAgKiBAcGFyYW0geyFUZW1wbGF0ZUluZm99IHRlbXBsYXRlSW5mbyBUZW1wbGF0ZSBtZXRhZGF0YSBmb3IgY3VycmVudCB0ZW1wbGF0ZQogICAgICAgKiBAcGFyYW0geyFOb2RlSW5mb30gbm9kZUluZm8gTm9kZSBtZXRhZGF0YSBmb3IgY3VycmVudCB0ZW1wbGF0ZS4KICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICovCiAgICAgIHN0YXRpYyBfcGFyc2VUZW1wbGF0ZUNoaWxkTm9kZXMocm9vdCwgdGVtcGxhdGVJbmZvLCBub2RlSW5mbykgewogICAgICAgIGlmIChyb290LmxvY2FsTmFtZSA9PT0gJ3NjcmlwdCcgfHwgcm9vdC5sb2NhbE5hbWUgPT09ICdzdHlsZScpIHsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgd2Fsa2VyLmN1cnJlbnROb2RlID0gcm9vdDsKICAgICAgICBmb3IgKGxldCBub2RlPXdhbGtlci5maXJzdENoaWxkKCksIHBhcmVudEluZGV4PTAsIG5leHQ7IG5vZGU7IG5vZGU9bmV4dCkgewogICAgICAgICAgLy8gV3JhcCB0ZW1wbGF0ZXMKICAgICAgICAgIGlmIChub2RlLmxvY2FsTmFtZSA9PSAndGVtcGxhdGUnKSB7CiAgICAgICAgICAgIG5vZGUgPSB3cmFwVGVtcGxhdGVFeHRlbnNpb24obm9kZSk7CiAgICAgICAgICB9CiAgICAgICAgICAvLyBjb2xsYXBzZSBhZGphY2VudCB0ZXh0Tm9kZXM6IGZpeGVzIGFuIElFIGlzc3VlIHRoYXQgY2FuIGNhdXNlCiAgICAgICAgICAvLyB0ZXh0IG5vZGVzIHRvIGJlIGluZXhwbGljYWJseSBzcGxpdCA9KAogICAgICAgICAgLy8gbm90ZSB0aGF0IHJvb3Qubm9ybWFsaXplKCkgc2hvdWxkIHdvcmsgYnV0IGRvZXMgbm90IHNvIHdlIGRvIHRoaXMKICAgICAgICAgIC8vIG1hbnVhbGx5LgogICAgICAgICAgd2Fsa2VyLmN1cnJlbnROb2RlID0gbm9kZTsKICAgICAgICAgIG5leHQgPSB3YWxrZXIubmV4dFNpYmxpbmcoKTsKICAgICAgICAgIGlmIChub2RlLm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSkgewogICAgICAgICAgICBsZXQgLyoqIE5vZGUgKi8gbiA9IG5leHQ7CiAgICAgICAgICAgIHdoaWxlIChuICYmIChuLm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSkpIHsKICAgICAgICAgICAgICBub2RlLnRleHRDb250ZW50ICs9IG4udGV4dENvbnRlbnQ7CiAgICAgICAgICAgICAgbmV4dCA9IHdhbGtlci5uZXh0U2libGluZygpOwogICAgICAgICAgICAgIHJvb3QucmVtb3ZlQ2hpbGQobik7CiAgICAgICAgICAgICAgbiA9IG5leHQ7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy8gb3B0aW9uYWxseSBzdHJpcCB3aGl0ZXNwYWNlCiAgICAgICAgICAgIGlmICh0ZW1wbGF0ZUluZm8uc3RyaXBXaGl0ZVNwYWNlICYmICFub2RlLnRleHRDb250ZW50LnRyaW0oKSkgewogICAgICAgICAgICAgIHJvb3QucmVtb3ZlQ2hpbGQobm9kZSk7CiAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGxldCBjaGlsZEluZm8gPSB7IHBhcmVudEluZGV4LCBwYXJlbnRJbmZvOiBub2RlSW5mbyB9OwogICAgICAgICAgaWYgKHRoaXMuX3BhcnNlVGVtcGxhdGVOb2RlKG5vZGUsIHRlbXBsYXRlSW5mbywgY2hpbGRJbmZvKSkgewogICAgICAgICAgICBjaGlsZEluZm8uaW5mb0luZGV4ID0gdGVtcGxhdGVJbmZvLm5vZGVJbmZvTGlzdC5wdXNoKC8qKiBAdHlwZSB7IU5vZGVJbmZvfSAqLyhjaGlsZEluZm8pKSAtIDE7CiAgICAgICAgICB9CiAgICAgICAgICAvLyBJbmNyZW1lbnQgaWYgbm90IHJlbW92ZWQKICAgICAgICAgIHdhbGtlci5jdXJyZW50Tm9kZSA9IG5vZGU7CiAgICAgICAgICBpZiAod2Fsa2VyLnBhcmVudE5vZGUoKSkgewogICAgICAgICAgICBwYXJlbnRJbmRleCsrOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIFBhcnNlcyB0ZW1wbGF0ZSBjb250ZW50IGZvciB0aGUgZ2l2ZW4gbmVzdGVkIGA8dGVtcGxhdGU+YC4KICAgICAgICoKICAgICAgICogTmVzdGVkIHRlbXBsYXRlIGluZm8gaXMgc3RvcmVkIGFzIGB0ZW1wbGF0ZUluZm9gIGluIHRoZSBjdXJyZW50IG5vZGUncwogICAgICAgKiBgbm9kZUluZm9gLiBgdGVtcGxhdGUuY29udGVudGAgaXMgcmVtb3ZlZCBhbmQgc3RvcmVkIGluIGB0ZW1wbGF0ZUluZm9gLgogICAgICAgKiBJdCB3aWxsIHRoZW4gYmUgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBob3N0IHRvIHNldCBpdCBiYWNrIHRvIHRoZQogICAgICAgKiB0ZW1wbGF0ZSBhbmQgZm9yIHVzZXJzIHN0YW1waW5nIG5lc3RlZCB0ZW1wbGF0ZXMgdG8gdXNlIHRoZQogICAgICAgKiBgX2NvbnRlbnRGb3JUZW1wbGF0ZWAgbWV0aG9kIHRvIHJldHJpZXZlIHRoZSBjb250ZW50IGZvciB0aGlzIHRlbXBsYXRlCiAgICAgICAqIChhbiBvcHRpbWl6YXRpb24gdG8gYXZvaWQgdGhlIGNvc3Qgb2YgY2xvbmluZyBuZXN0ZWQgdGVtcGxhdGUgY29udGVudCkuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7SFRNTFRlbXBsYXRlRWxlbWVudH0gbm9kZSBOb2RlIHRvIHBhcnNlIChhIDx0ZW1wbGF0ZT4pCiAgICAgICAqIEBwYXJhbSB7VGVtcGxhdGVJbmZvfSBvdXRlclRlbXBsYXRlSW5mbyBUZW1wbGF0ZSBtZXRhZGF0YSBmb3IgY3VycmVudCB0ZW1wbGF0ZQogICAgICAgKiAgIHRoYXQgaW5jbHVkZXMgdGhlIHRlbXBsYXRlIGBub2RlYAogICAgICAgKiBAcGFyYW0geyFOb2RlSW5mb30gbm9kZUluZm8gTm9kZSBtZXRhZGF0YSBmb3IgY3VycmVudCB0ZW1wbGF0ZS4KICAgICAgICogQHJldHVybiB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSB2aXNpdGVkIG5vZGUgYWRkZWQgbm9kZS1zcGVjaWZpYwogICAgICAgKiAgIG1ldGFkYXRhIHRvIGBub2RlSW5mb2AKICAgICAgICovCiAgICAgIHN0YXRpYyBfcGFyc2VUZW1wbGF0ZU5lc3RlZFRlbXBsYXRlKG5vZGUsIG91dGVyVGVtcGxhdGVJbmZvLCBub2RlSW5mbykgewogICAgICAgIGxldCB0ZW1wbGF0ZUluZm8gPSB0aGlzLl9wYXJzZVRlbXBsYXRlKG5vZGUsIG91dGVyVGVtcGxhdGVJbmZvKTsKICAgICAgICBsZXQgY29udGVudCA9IHRlbXBsYXRlSW5mby5jb250ZW50ID0KICAgICAgICAgIG5vZGUuY29udGVudC5vd25lckRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTsKICAgICAgICBjb250ZW50LmFwcGVuZENoaWxkKG5vZGUuY29udGVudCk7CiAgICAgICAgbm9kZUluZm8udGVtcGxhdGVJbmZvID0gdGVtcGxhdGVJbmZvOwogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CgogICAgICAvKioKICAgICAgICogUGFyc2VzIHRlbXBsYXRlIG5vZGUgYXR0cmlidXRlcyBhbmQgYWRkcyBub2RlIG1ldGFkYXRhIHRvIGBub2RlSW5mb2AKICAgICAgICogZm9yIG5vZGVzIG9mIGludGVyZXN0LgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IG5vZGUgTm9kZSB0byBwYXJzZQogICAgICAgKiBAcGFyYW0ge1RlbXBsYXRlSW5mb30gdGVtcGxhdGVJbmZvIFRlbXBsYXRlIG1ldGFkYXRhIGZvciBjdXJyZW50IHRlbXBsYXRlCiAgICAgICAqIEBwYXJhbSB7Tm9kZUluZm99IG5vZGVJbmZvIE5vZGUgbWV0YWRhdGEgZm9yIGN1cnJlbnQgdGVtcGxhdGUuCiAgICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgdmlzaXRlZCBub2RlIGFkZGVkIG5vZGUtc3BlY2lmaWMKICAgICAgICogICBtZXRhZGF0YSB0byBgbm9kZUluZm9gCiAgICAgICAqLwogICAgICBzdGF0aWMgX3BhcnNlVGVtcGxhdGVOb2RlQXR0cmlidXRlcyhub2RlLCB0ZW1wbGF0ZUluZm8sIG5vZGVJbmZvKSB7CiAgICAgICAgLy8gTWFrZSBjb3B5IG9mIG9yaWdpbmFsIGF0dHJpYnV0ZSBsaXN0LCBzaW5jZSB0aGUgb3JkZXIgbWF5IGNoYW5nZQogICAgICAgIC8vIGFzIGF0dHJpYnV0ZXMgYXJlIGFkZGVkIGFuZCByZW1vdmVkCiAgICAgICAgbGV0IG5vdGVkID0gZmFsc2U7CiAgICAgICAgbGV0IGF0dHJzID0gQXJyYXkuZnJvbShub2RlLmF0dHJpYnV0ZXMpOwogICAgICAgIGZvciAobGV0IGk9YXR0cnMubGVuZ3RoLTEsIGE7IChhPWF0dHJzW2ldKTsgaS0tKSB7CiAgICAgICAgICBub3RlZCA9IHRoaXMuX3BhcnNlVGVtcGxhdGVOb2RlQXR0cmlidXRlKG5vZGUsIHRlbXBsYXRlSW5mbywgbm9kZUluZm8sIGEubmFtZSwgYS52YWx1ZSkgfHwgbm90ZWQ7CiAgICAgICAgfQogICAgICAgIHJldHVybiBub3RlZDsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIFBhcnNlcyBhIHNpbmdsZSB0ZW1wbGF0ZSBub2RlIGF0dHJpYnV0ZSBhbmQgYWRkcyBub2RlIG1ldGFkYXRhIHRvCiAgICAgICAqIGBub2RlSW5mb2AgZm9yIGF0dHJpYnV0ZXMgb2YgaW50ZXJlc3QuCiAgICAgICAqCiAgICAgICAqIFRoaXMgaW1wbGVtZW50YXRpb24gYWRkcyBtZXRhZGF0YSBmb3IgYG9uLWV2ZW50PSJoYW5kbGVyImAgYXR0cmlidXRlcwogICAgICAgKiBhbmQgYGlkYCBhdHRyaWJ1dGVzLgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IG5vZGUgTm9kZSB0byBwYXJzZQogICAgICAgKiBAcGFyYW0geyFUZW1wbGF0ZUluZm99IHRlbXBsYXRlSW5mbyBUZW1wbGF0ZSBtZXRhZGF0YSBmb3IgY3VycmVudCB0ZW1wbGF0ZQogICAgICAgKiBAcGFyYW0geyFOb2RlSW5mb30gbm9kZUluZm8gTm9kZSBtZXRhZGF0YSBmb3IgY3VycmVudCB0ZW1wbGF0ZS4KICAgICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgQXR0cmlidXRlIG5hbWUKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlIEF0dHJpYnV0ZSB2YWx1ZQogICAgICAgKiBAcmV0dXJuIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIHZpc2l0ZWQgbm9kZSBhZGRlZCBub2RlLXNwZWNpZmljCiAgICAgICAqICAgbWV0YWRhdGEgdG8gYG5vZGVJbmZvYAogICAgICAgKi8KICAgICAgc3RhdGljIF9wYXJzZVRlbXBsYXRlTm9kZUF0dHJpYnV0ZShub2RlLCB0ZW1wbGF0ZUluZm8sIG5vZGVJbmZvLCBuYW1lLCB2YWx1ZSkgewogICAgICAgIC8vIGV2ZW50cyAob24tKikKICAgICAgICBpZiAobmFtZS5zbGljZSgwLCAzKSA9PT0gJ29uLScpIHsKICAgICAgICAgIG5vZGUucmVtb3ZlQXR0cmlidXRlKG5hbWUpOwogICAgICAgICAgbm9kZUluZm8uZXZlbnRzID0gbm9kZUluZm8uZXZlbnRzIHx8IFtdOwogICAgICAgICAgbm9kZUluZm8uZXZlbnRzLnB1c2goewogICAgICAgICAgICBuYW1lOiBuYW1lLnNsaWNlKDMpLAogICAgICAgICAgICB2YWx1ZQogICAgICAgICAgfSk7CiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgLy8gc3RhdGljIGlkCiAgICAgICAgZWxzZSBpZiAobmFtZSA9PT0gJ2lkJykgewogICAgICAgICAgbm9kZUluZm8uaWQgPSB2YWx1ZTsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBSZXR1cm5zIHRoZSBgY29udGVudGAgZG9jdW1lbnQgZnJhZ21lbnQgZm9yIGEgZ2l2ZW4gdGVtcGxhdGUuCiAgICAgICAqCiAgICAgICAqIEZvciBuZXN0ZWQgdGVtcGxhdGVzLCBQb2x5bWVyIHBlcmZvcm1zIGFuIG9wdGltaXphdGlvbiB0byBjYWNoZSBuZXN0ZWQKICAgICAgICogdGVtcGxhdGUgY29udGVudCB0byBhdm9pZCB0aGUgY29zdCBvZiBjbG9uaW5nIGRlZXBseSBuZXN0ZWQgdGVtcGxhdGVzLgogICAgICAgKiBUaGlzIG1ldGhvZCByZXRyaWV2ZXMgdGhlIGNhY2hlZCBjb250ZW50IGZvciBhIGdpdmVuIHRlbXBsYXRlLgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge0hUTUxUZW1wbGF0ZUVsZW1lbnR9IHRlbXBsYXRlIFRlbXBsYXRlIHRvIHJldHJpZXZlIGBjb250ZW50YCBmb3IKICAgICAgICogQHJldHVybiB7RG9jdW1lbnRGcmFnbWVudH0gQ29udGVudCBmcmFnbWVudAogICAgICAgKi8KICAgICAgc3RhdGljIF9jb250ZW50Rm9yVGVtcGxhdGUodGVtcGxhdGUpIHsKICAgICAgICBsZXQgdGVtcGxhdGVJbmZvID0gLyoqIEB0eXBlIHtIVE1MVGVtcGxhdGVFbGVtZW50V2l0aEluZm99ICovICh0ZW1wbGF0ZSkuX3RlbXBsYXRlSW5mbzsKICAgICAgICByZXR1cm4gKHRlbXBsYXRlSW5mbyAmJiB0ZW1wbGF0ZUluZm8uY29udGVudCkgfHwgdGVtcGxhdGUuY29udGVudDsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIENsb25lcyB0aGUgcHJvdmlkZWQgdGVtcGxhdGUgY29udGVudCBhbmQgcmV0dXJucyBhIGRvY3VtZW50IGZyYWdtZW50CiAgICAgICAqIGNvbnRhaW5pbmcgdGhlIGNsb25lZCBkb20uCiAgICAgICAqCiAgICAgICAqIFRoZSB0ZW1wbGF0ZSBpcyBwYXJzZWQgKG9uY2UgYW5kIG1lbW9pemVkKSB1c2luZyB0aGlzIGxpYnJhcnkncwogICAgICAgKiB0ZW1wbGF0ZSBwYXJzaW5nIGZlYXR1cmVzLCBhbmQgcHJvdmlkZXMgdGhlIGZvbGxvd2luZyB2YWx1ZS1hZGRlZAogICAgICAgKiBmZWF0dXJlczoKICAgICAgICogKiBBZGRzIGRlY2xhcmF0aXZlIGV2ZW50IGxpc3RlbmVycyBmb3IgYG9uLWV2ZW50PSJoYW5kbGVyImAgYXR0cmlidXRlcwogICAgICAgKiAqIEdlbmVyYXRlcyBhbiAiaWQgbWFwIiBmb3IgYWxsIG5vZGVzIHdpdGggaWQncyB1bmRlciBgJGAgb24gcmV0dXJuZWQKICAgICAgICogICBkb2N1bWVudCBmcmFnbWVudAogICAgICAgKiAqIFBhc3NlcyB0ZW1wbGF0ZSBpbmZvIGluY2x1ZGluZyBgY29udGVudGAgYmFjayB0byB0ZW1wbGF0ZXMgYXMKICAgICAgICogICBgX3RlbXBsYXRlSW5mb2AgKGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIHRvIGF2b2lkIGRlZXAgdGVtcGxhdGUKICAgICAgICogICBjbG9uaW5nKQogICAgICAgKgogICAgICAgKiBOb3RlIHRoYXQgdGhlIG1lbW9pemVkIHRlbXBsYXRlIHBhcnNpbmcgcHJvY2VzcyBpcyBkZXN0cnVjdGl2ZSB0byB0aGUKICAgICAgICogdGVtcGxhdGU6IGF0dHJpYnV0ZXMgZm9yIGJpbmRpbmdzIGFuZCBkZWNsYXJhdGl2ZSBldmVudCBsaXN0ZW5lcnMgYXJlCiAgICAgICAqIHJlbW92ZWQgYWZ0ZXIgYmVpbmcgbm90ZWQgaW4gbm90ZXMsIGFuZCBhbnkgbmVzdGVkIGA8dGVtcGxhdGU+LmNvbnRlbnRgCiAgICAgICAqIGlzIHJlbW92ZWQgYW5kIHN0b3JlZCBpbiBub3RlcyBhcyB3ZWxsLgogICAgICAgKgogICAgICAgKiBAcGFyYW0geyFIVE1MVGVtcGxhdGVFbGVtZW50fSB0ZW1wbGF0ZSBUZW1wbGF0ZSB0byBzdGFtcAogICAgICAgKiBAcmV0dXJuIHshU3RhbXBlZFRlbXBsYXRlfSBDbG9uZWQgdGVtcGxhdGUgY29udGVudAogICAgICAgKi8KICAgICAgX3N0YW1wVGVtcGxhdGUodGVtcGxhdGUpIHsKICAgICAgICAvLyBQb2x5ZmlsbCBzdXBwb3J0OiBib290c3RyYXAgdGhlIHRlbXBsYXRlIGlmIGl0IGhhcyBub3QgYWxyZWFkeSBiZWVuCiAgICAgICAgaWYgKHRlbXBsYXRlICYmICF0ZW1wbGF0ZS5jb250ZW50ICYmCiAgICAgICAgICAgIHdpbmRvdy5IVE1MVGVtcGxhdGVFbGVtZW50ICYmIEhUTUxUZW1wbGF0ZUVsZW1lbnQuZGVjb3JhdGUpIHsKICAgICAgICAgIEhUTUxUZW1wbGF0ZUVsZW1lbnQuZGVjb3JhdGUodGVtcGxhdGUpOwogICAgICAgIH0KICAgICAgICBsZXQgdGVtcGxhdGVJbmZvID0gdGhpcy5jb25zdHJ1Y3Rvci5fcGFyc2VUZW1wbGF0ZSh0ZW1wbGF0ZSk7CiAgICAgICAgbGV0IG5vZGVJbmZvID0gdGVtcGxhdGVJbmZvLm5vZGVJbmZvTGlzdDsKICAgICAgICBsZXQgY29udGVudCA9IHRlbXBsYXRlSW5mby5jb250ZW50IHx8IHRlbXBsYXRlLmNvbnRlbnQ7CiAgICAgICAgbGV0IGRvbSA9IC8qKiBAdHlwZSB7RG9jdW1lbnRGcmFnbWVudH0gKi8gKGRvY3VtZW50LmltcG9ydE5vZGUoY29udGVudCwgdHJ1ZSkpOwogICAgICAgIC8vIE5PVEU6IFNoYWR5RG9tIG9wdGltaXphdGlvbiBpbmRpY2F0aW5nIHRoZXJlIGlzIGFuIGluc2VydGlvbiBwb2ludAogICAgICAgIGRvbS5fX25vSW5zZXJ0aW9uUG9pbnQgPSAhdGVtcGxhdGVJbmZvLmhhc0luc2VydGlvblBvaW50OwogICAgICAgIGxldCBub2RlcyA9IGRvbS5ub2RlTGlzdCA9IG5ldyBBcnJheShub2RlSW5mby5sZW5ndGgpOwogICAgICAgIGRvbS4kID0ge307CiAgICAgICAgZm9yIChsZXQgaT0wLCBsPW5vZGVJbmZvLmxlbmd0aCwgaW5mbzsgKGk8bCkgJiYgKGluZm89bm9kZUluZm9baV0pOyBpKyspIHsKICAgICAgICAgIGxldCBub2RlID0gbm9kZXNbaV0gPSBmaW5kVGVtcGxhdGVOb2RlKGRvbSwgaW5mbyk7CiAgICAgICAgICBhcHBseUlkVG9NYXAodGhpcywgZG9tLiQsIG5vZGUsIGluZm8pOwogICAgICAgICAgYXBwbHlUZW1wbGF0ZUNvbnRlbnQodGhpcywgbm9kZSwgaW5mbyk7CiAgICAgICAgICBhcHBseUV2ZW50TGlzdGVuZXIodGhpcywgbm9kZSwgaW5mbyk7CiAgICAgICAgfQogICAgICAgIGRvbSA9IC8qKiBAdHlwZSB7IVN0YW1wZWRUZW1wbGF0ZX0gKi8oZG9tKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1zZWxmLWFzc2lnbgogICAgICAgIHJldHVybiBkb207CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBBZGRzIGFuIGV2ZW50IGxpc3RlbmVyIGJ5IG1ldGhvZCBuYW1lIGZvciB0aGUgZXZlbnQgcHJvdmlkZWQuCiAgICAgICAqCiAgICAgICAqIFRoaXMgbWV0aG9kIGdlbmVyYXRlcyBhIGhhbmRsZXIgZnVuY3Rpb24gdGhhdCBsb29rcyB1cCB0aGUgbWV0aG9kCiAgICAgICAqIG5hbWUgYXQgaGFuZGxpbmcgdGltZS4KICAgICAgICoKICAgICAgICogQHBhcmFtIHshTm9kZX0gbm9kZSBOb2RlIHRvIGFkZCBsaXN0ZW5lciBvbgogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnROYW1lIE5hbWUgb2YgZXZlbnQKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IG1ldGhvZE5hbWUgTmFtZSBvZiBtZXRob2QKICAgICAgICogQHBhcmFtIHsqPX0gY29udGV4dCBDb250ZXh0IHRoZSBtZXRob2Qgd2lsbCBiZSBjYWxsZWQgb24gKGRlZmF1bHRzCiAgICAgICAqICAgdG8gYG5vZGVgKQogICAgICAgKiBAcmV0dXJuIHtGdW5jdGlvbn0gR2VuZXJhdGVkIGhhbmRsZXIgZnVuY3Rpb24KICAgICAgICovCiAgICAgIF9hZGRNZXRob2RFdmVudExpc3RlbmVyVG9Ob2RlKG5vZGUsIGV2ZW50TmFtZSwgbWV0aG9kTmFtZSwgY29udGV4dCkgewogICAgICAgIGNvbnRleHQgPSBjb250ZXh0IHx8IG5vZGU7CiAgICAgICAgbGV0IGhhbmRsZXIgPSBjcmVhdGVOb2RlRXZlbnRIYW5kbGVyKGNvbnRleHQsIGV2ZW50TmFtZSwgbWV0aG9kTmFtZSk7CiAgICAgICAgdGhpcy5fYWRkRXZlbnRMaXN0ZW5lclRvTm9kZShub2RlLCBldmVudE5hbWUsIGhhbmRsZXIpOwogICAgICAgIHJldHVybiBoYW5kbGVyOwogICAgICB9CgogICAgICAvKioKICAgICAgICogT3ZlcnJpZGUgcG9pbnQgZm9yIGFkZGluZyBjdXN0b20gb3Igc2ltdWxhdGVkIGV2ZW50IGhhbmRsaW5nLgogICAgICAgKgogICAgICAgKiBAcGFyYW0geyFOb2RlfSBub2RlIE5vZGUgdG8gYWRkIGV2ZW50IGxpc3RlbmVyIHRvCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudE5hbWUgTmFtZSBvZiBldmVudAogICAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKCFFdmVudCk6dm9pZH0gaGFuZGxlciBMaXN0ZW5lciBmdW5jdGlvbiB0byBhZGQKICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICovCiAgICAgIF9hZGRFdmVudExpc3RlbmVyVG9Ob2RlKG5vZGUsIGV2ZW50TmFtZSwgaGFuZGxlcikgewogICAgICAgIG5vZGUuYWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIGhhbmRsZXIpOwogICAgICB9CgogICAgICAvKioKICAgICAgICogT3ZlcnJpZGUgcG9pbnQgZm9yIGFkZGluZyBjdXN0b20gb3Igc2ltdWxhdGVkIGV2ZW50IGhhbmRsaW5nLgogICAgICAgKgogICAgICAgKiBAcGFyYW0geyFOb2RlfSBub2RlIE5vZGUgdG8gcmVtb3ZlIGV2ZW50IGxpc3RlbmVyIGZyb20KICAgICAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50TmFtZSBOYW1lIG9mIGV2ZW50CiAgICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24oIUV2ZW50KTp2b2lkfSBoYW5kbGVyIExpc3RlbmVyIGZ1bmN0aW9uIHRvIHJlbW92ZQogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKi8KICAgICAgX3JlbW92ZUV2ZW50TGlzdGVuZXJGcm9tTm9kZShub2RlLCBldmVudE5hbWUsIGhhbmRsZXIpIHsKICAgICAgICBub2RlLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBoYW5kbGVyKTsKICAgICAgfQoKICAgIH0KCiAgICByZXR1cm4gVGVtcGxhdGVTdGFtcDsKCiAgfSk7Cgp9KSgpOwo8L3NjcmlwdD48c2NyaXB0PgooZnVuY3Rpb24oKSB7CgogICd1c2Ugc3RyaWN0JzsKCiAgLyoqIEBjb25zdCB7T2JqZWN0fSAqLwogIGNvbnN0IENhc2VNYXAgPSBQb2x5bWVyLkNhc2VNYXA7CgogIC8vIE1vbm90b25pY2FsbHkgaW5jcmVhc2luZyB1bmlxdWUgSUQgdXNlZCBmb3IgZGUtZHVwaW5nIGVmZmVjdHMgdHJpZ2dlcmVkCiAgLy8gZnJvbSBtdWx0aXBsZSBwcm9wZXJ0aWVzIGluIHRoZSBzYW1lIHR1cm4KICBsZXQgZGVkdXBlSWQgPSAwOwoKICAvKioKICAgKiBQcm9wZXJ0eSBlZmZlY3QgdHlwZXM7IGVmZmVjdHMgYXJlIHN0b3JlZCBvbiB0aGUgcHJvdG90eXBlIHVzaW5nIHRoZXNlIGtleXMKICAgKiBAZW51bSB7c3RyaW5nfQogICAqLwogIGNvbnN0IFRZUEVTID0gewogICAgQ09NUFVURTogJ19fY29tcHV0ZUVmZmVjdHMnLAogICAgUkVGTEVDVDogJ19fcmVmbGVjdEVmZmVjdHMnLAogICAgTk9USUZZOiAnX19ub3RpZnlFZmZlY3RzJywKICAgIFBST1BBR0FURTogJ19fcHJvcGFnYXRlRWZmZWN0cycsCiAgICBPQlNFUlZFOiAnX19vYnNlcnZlRWZmZWN0cycsCiAgICBSRUFEX09OTFk6ICdfX3JlYWRPbmx5JwogIH07CgogIC8qKiBAY29uc3Qge1JlZ0V4cH0gKi8KICBjb25zdCBjYXBpdGFsQXR0cmlidXRlUmVnZXggPSAvW0EtWl0vOwoKICAvKioKICAgKiBAdHlwZWRlZiB7ewogICAqIG5hbWU6IChzdHJpbmcgfCB1bmRlZmluZWQpLAogICAqIHN0cnVjdHVyZWQ6IChib29sZWFuIHwgdW5kZWZpbmVkKSwKICAgKiB3aWxkY2FyZDogKGJvb2xlYW4gfCB1bmRlZmluZWQpCiAgICogfX0KICAgKi8KICBsZXQgRGF0YVRyaWdnZXI7IC8vZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFycwoKICAvKioKICAgKiBAdHlwZWRlZiB7ewogICAqIGluZm86ID8sCiAgICogdHJpZ2dlcjogKCFEYXRhVHJpZ2dlciB8IHVuZGVmaW5lZCksCiAgICogZm46ICghRnVuY3Rpb24gfCB1bmRlZmluZWQpCiAgICogfX0KICAgKi8KICBsZXQgRGF0YUVmZmVjdDsgLy9lc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzCgogIGxldCBQcm9wZXJ0eUVmZmVjdHNUeXBlOyAvL2VzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnMKCiAgLyoqCiAgICogRW5zdXJlcyB0aGF0IHRoZSBtb2RlbCBoYXMgYW4gb3duLXByb3BlcnR5IG1hcCBvZiBlZmZlY3RzIGZvciB0aGUgZ2l2ZW4gdHlwZS4KICAgKiBUaGUgbW9kZWwgbWF5IGJlIGEgcHJvdG90eXBlIG9yIGFuIGluc3RhbmNlLgogICAqCiAgICogUHJvcGVydHkgZWZmZWN0cyBhcmUgc3RvcmVkIGFzIGFycmF5cyBvZiBlZmZlY3RzIGJ5IHByb3BlcnR5IGluIGEgbWFwLAogICAqIGJ5IG5hbWVkIHR5cGUgb24gdGhlIG1vZGVsLiBlLmcuCiAgICoKICAgKiAgIF9fY29tcHV0ZUVmZmVjdHM6IHsKICAgKiAgICAgZm9vOiBbIC4uLiBdLAogICAqICAgICBiYXI6IFsgLi4uIF0KICAgKiAgIH0KICAgKgogICAqIElmIHRoZSBtb2RlbCBkb2VzIG5vdCB5ZXQgaGF2ZSBhbiBlZmZlY3QgbWFwIGZvciB0aGUgdHlwZSwgb25lIGlzIGNyZWF0ZWQKICAgKiBhbmQgcmV0dXJuZWQuICBJZiBpdCBkb2VzLCBidXQgaXQgaXMgbm90IGFuIG93biBwcm9wZXJ0eSAoaS5lLiB0aGUKICAgKiBwcm90b3R5cGUgaGFkIGVmZmVjdHMpLCB0aGUgdGhlIG1hcCBpcyBkZWVwbHkgY2xvbmVkIGFuZCB0aGUgY29weSBpcwogICAqIHNldCBvbiB0aGUgbW9kZWwgYW5kIHJldHVybmVkLCByZWFkeSBmb3IgbmV3IGVmZmVjdHMgdG8gYmUgYWRkZWQuCiAgICoKICAgKiBAcGFyYW0ge09iamVjdH0gbW9kZWwgUHJvdG90eXBlIG9yIGluc3RhbmNlCiAgICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgUHJvcGVydHkgZWZmZWN0IHR5cGUKICAgKiBAcmV0dXJuIHtPYmplY3R9IFRoZSBvd24tcHJvcGVydHkgbWFwIG9mIGVmZmVjdHMgZm9yIHRoZSBnaXZlbiB0eXBlCiAgICogQHByaXZhdGUKICAgKi8KICBmdW5jdGlvbiBlbnN1cmVPd25FZmZlY3RNYXAobW9kZWwsIHR5cGUpIHsKICAgIGxldCBlZmZlY3RzID0gbW9kZWxbdHlwZV07CiAgICBpZiAoIWVmZmVjdHMpIHsKICAgICAgZWZmZWN0cyA9IG1vZGVsW3R5cGVdID0ge307CiAgICB9IGVsc2UgaWYgKCFtb2RlbC5oYXNPd25Qcm9wZXJ0eSh0eXBlKSkgewogICAgICBlZmZlY3RzID0gbW9kZWxbdHlwZV0gPSBPYmplY3QuY3JlYXRlKG1vZGVsW3R5cGVdKTsKICAgICAgZm9yIChsZXQgcCBpbiBlZmZlY3RzKSB7CiAgICAgICAgbGV0IHByb3RvRnggPSBlZmZlY3RzW3BdOwogICAgICAgIGxldCBpbnN0RnggPSBlZmZlY3RzW3BdID0gQXJyYXkocHJvdG9GeC5sZW5ndGgpOwogICAgICAgIGZvciAobGV0IGk9MDsgaTxwcm90b0Z4Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICBpbnN0RnhbaV0gPSBwcm90b0Z4W2ldOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIGVmZmVjdHM7CiAgfQoKICAvLyAtLSBlZmZlY3RzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgLyoqCiAgICogUnVucyBhbGwgZWZmZWN0cyBvZiBhIGdpdmVuIHR5cGUgZm9yIHRoZSBnaXZlbiBzZXQgb2YgcHJvcGVydHkgY2hhbmdlcwogICAqIG9uIGFuIGluc3RhbmNlLgogICAqCiAgICogQHBhcmFtIHshUHJvcGVydHlFZmZlY3RzVHlwZX0gaW5zdCBUaGUgaW5zdGFuY2Ugd2l0aCBlZmZlY3RzIHRvIHJ1bgogICAqIEBwYXJhbSB7T2JqZWN0fSBlZmZlY3RzIE9iamVjdCBtYXAgb2YgcHJvcGVydHktdG8tQXJyYXkgb2YgZWZmZWN0cwogICAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wcyBCYWcgb2YgY3VycmVudCBwcm9wZXJ0eSBjaGFuZ2VzCiAgICogQHBhcmFtIHtPYmplY3Q9fSBvbGRQcm9wcyBCYWcgb2YgcHJldmlvdXMgdmFsdWVzIGZvciBjaGFuZ2VkIHByb3BlcnRpZXMKICAgKiBAcGFyYW0ge2Jvb2xlYW49fSBoYXNQYXRocyBUcnVlIHdpdGggYHByb3BzYCBjb250YWlucyBvbmUgb3IgbW9yZSBwYXRocwogICAqIEBwYXJhbSB7Kj19IGV4dHJhQXJncyBBZGRpdGlvbmFsIG1ldGFkYXRhIHRvIHBhc3MgdG8gZWZmZWN0IGZ1bmN0aW9uCiAgICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiBhbiBlZmZlY3QgcmFuIGZvciB0aGlzIHByb3BlcnR5CiAgICogQHByaXZhdGUKICAgKi8KICBmdW5jdGlvbiBydW5FZmZlY3RzKGluc3QsIGVmZmVjdHMsIHByb3BzLCBvbGRQcm9wcywgaGFzUGF0aHMsIGV4dHJhQXJncykgewogICAgaWYgKGVmZmVjdHMpIHsKICAgICAgbGV0IHJhbiA9IGZhbHNlOwogICAgICBsZXQgaWQgPSBkZWR1cGVJZCsrOwogICAgICBmb3IgKGxldCBwcm9wIGluIHByb3BzKSB7CiAgICAgICAgaWYgKHJ1bkVmZmVjdHNGb3JQcm9wZXJ0eShpbnN0LCBlZmZlY3RzLCBpZCwgcHJvcCwgcHJvcHMsIG9sZFByb3BzLCBoYXNQYXRocywgZXh0cmFBcmdzKSkgewogICAgICAgICAgcmFuID0gdHJ1ZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIHJhbjsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIC8qKgogICAqIFJ1bnMgYSBsaXN0IG9mIGVmZmVjdHMgZm9yIGEgZ2l2ZW4gcHJvcGVydHkuCiAgICoKICAgKiBAcGFyYW0geyFQcm9wZXJ0eUVmZmVjdHNUeXBlfSBpbnN0IFRoZSBpbnN0YW5jZSB3aXRoIGVmZmVjdHMgdG8gcnVuCiAgICogQHBhcmFtIHtPYmplY3R9IGVmZmVjdHMgT2JqZWN0IG1hcCBvZiBwcm9wZXJ0eS10by1BcnJheSBvZiBlZmZlY3RzCiAgICogQHBhcmFtIHtudW1iZXJ9IGRlZHVwZUlkIENvdW50ZXIgdXNlZCBmb3IgZGUtZHVwaW5nIGVmZmVjdHMKICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcCBOYW1lIG9mIGNoYW5nZWQgcHJvcGVydHkKICAgKiBAcGFyYW0geyp9IHByb3BzIENoYW5nZWQgcHJvcGVydGllcwogICAqIEBwYXJhbSB7Kn0gb2xkUHJvcHMgT2xkIHByb3BlcnRpZXMKICAgKiBAcGFyYW0ge2Jvb2xlYW49fSBoYXNQYXRocyBUcnVlIHdpdGggYHByb3BzYCBjb250YWlucyBvbmUgb3IgbW9yZSBwYXRocwogICAqIEBwYXJhbSB7Kj19IGV4dHJhQXJncyBBZGRpdGlvbmFsIG1ldGFkYXRhIHRvIHBhc3MgdG8gZWZmZWN0IGZ1bmN0aW9uCiAgICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiBhbiBlZmZlY3QgcmFuIGZvciB0aGlzIHByb3BlcnR5CiAgICogQHByaXZhdGUKICAgKi8KICBmdW5jdGlvbiBydW5FZmZlY3RzRm9yUHJvcGVydHkoaW5zdCwgZWZmZWN0cywgZGVkdXBlSWQsIHByb3AsIHByb3BzLCBvbGRQcm9wcywgaGFzUGF0aHMsIGV4dHJhQXJncykgewogICAgbGV0IHJhbiA9IGZhbHNlOwogICAgbGV0IHJvb3RQcm9wZXJ0eSA9IGhhc1BhdGhzID8gUG9seW1lci5QYXRoLnJvb3QocHJvcCkgOiBwcm9wOwogICAgbGV0IGZ4cyA9IGVmZmVjdHNbcm9vdFByb3BlcnR5XTsKICAgIGlmIChmeHMpIHsKICAgICAgZm9yIChsZXQgaT0wLCBsPWZ4cy5sZW5ndGgsIGZ4OyAoaTxsKSAmJiAoZng9ZnhzW2ldKTsgaSsrKSB7CiAgICAgICAgaWYgKCghZnguaW5mbyB8fCBmeC5pbmZvLmxhc3RSdW4gIT09IGRlZHVwZUlkKSAmJgogICAgICAgICAgICAoIWhhc1BhdGhzIHx8IHBhdGhNYXRjaGVzVHJpZ2dlcihwcm9wLCBmeC50cmlnZ2VyKSkpIHsKICAgICAgICAgIGlmIChmeC5pbmZvKSB7CiAgICAgICAgICAgIGZ4LmluZm8ubGFzdFJ1biA9IGRlZHVwZUlkOwogICAgICAgICAgfQogICAgICAgICAgZnguZm4oaW5zdCwgcHJvcCwgcHJvcHMsIG9sZFByb3BzLCBmeC5pbmZvLCBoYXNQYXRocywgZXh0cmFBcmdzKTsKICAgICAgICAgIHJhbiA9IHRydWU7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICByZXR1cm4gcmFuOwogIH0KCiAgLyoqCiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIGEgcHJvcGVydHkvcGF0aCB0aGF0IGhhcyBjaGFuZ2VkIG1hdGNoZXMgdGhlIHRyaWdnZXIKICAgKiBjcml0ZXJpYSBmb3IgYW4gZWZmZWN0LiAgQSB0cmlnZ2VyIGlzIGEgZGVzY3JpcHRvciB3aXRoIHRoZSBmb2xsb3dpbmcKICAgKiBzdHJ1Y3R1cmUsIHdoaWNoIG1hdGNoZXMgdGhlIGRlc2NyaXB0b3JzIHJldHVybmVkIGZyb20gYHBhcnNlQXJnYC4KICAgKiBlLmcuIGZvciBgZm9vLmJhci4qYDoKICAgKiBgYGAKICAgKiB0cmlnZ2VyOiB7CiAgICogICBuYW1lOiAnYS5iJywKICAgKiAgIHN0cnVjdHVyZWQ6IHRydWUsCiAgICogICB3aWxkY2FyZDogdHJ1ZQogICAqIH0KICAgKiBgYGAKICAgKiBJZiBubyB0cmlnZ2VyIGlzIGdpdmVuLCB0aGUgcGF0aCBpcyBkZWVtZWQgdG8gbWF0Y2guCiAgICoKICAgKiBAcGFyYW0ge3N0cmluZ30gcGF0aCBQYXRoIG9yIHByb3BlcnR5IHRoYXQgY2hhbmdlZAogICAqIEBwYXJhbSB7RGF0YVRyaWdnZXJ9IHRyaWdnZXIgRGVzY3JpcHRvcgogICAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIHBhdGggbWF0Y2hlZCB0aGUgdHJpZ2dlcgogICAqLwogIGZ1bmN0aW9uIHBhdGhNYXRjaGVzVHJpZ2dlcihwYXRoLCB0cmlnZ2VyKSB7CiAgICBpZiAodHJpZ2dlcikgewogICAgICBsZXQgdHJpZ2dlclBhdGggPSB0cmlnZ2VyLm5hbWU7CiAgICAgIHJldHVybiAodHJpZ2dlclBhdGggPT0gcGF0aCkgfHwKICAgICAgICAodHJpZ2dlci5zdHJ1Y3R1cmVkICYmIFBvbHltZXIuUGF0aC5pc0FuY2VzdG9yKHRyaWdnZXJQYXRoLCBwYXRoKSkgfHwKICAgICAgICAodHJpZ2dlci53aWxkY2FyZCAmJiBQb2x5bWVyLlBhdGguaXNEZXNjZW5kYW50KHRyaWdnZXJQYXRoLCBwYXRoKSk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICB9CgogIC8qKgogICAqIEltcGxlbWVudHMgdGhlICJvYnNlcnZlciIgZWZmZWN0LgogICAqCiAgICogQ2FsbHMgdGhlIG1ldGhvZCB3aXRoIGBpbmZvLm1ldGhvZE5hbWVgIG9uIHRoZSBpbnN0YW5jZSwgcGFzc2luZyB0aGUKICAgKiBuZXcgYW5kIG9sZCB2YWx1ZXMuCiAgICoKICAgKiBAcGFyYW0geyFQcm9wZXJ0eUVmZmVjdHNUeXBlfSBpbnN0IFRoZSBpbnN0YW5jZSB0aGUgZWZmZWN0IHdpbGwgYmUgcnVuIG9uCiAgICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IE5hbWUgb2YgcHJvcGVydHkKICAgKiBAcGFyYW0ge09iamVjdH0gcHJvcHMgQmFnIG9mIGN1cnJlbnQgcHJvcGVydHkgY2hhbmdlcwogICAqIEBwYXJhbSB7T2JqZWN0fSBvbGRQcm9wcyBCYWcgb2YgcHJldmlvdXMgdmFsdWVzIGZvciBjaGFuZ2VkIHByb3BlcnRpZXMKICAgKiBAcGFyYW0gez99IGluZm8gRWZmZWN0IG1ldGFkYXRhCiAgICogQHJldHVybiB7dm9pZH0KICAgKiBAcHJpdmF0ZQogICAqLwogIGZ1bmN0aW9uIHJ1bk9ic2VydmVyRWZmZWN0KGluc3QsIHByb3BlcnR5LCBwcm9wcywgb2xkUHJvcHMsIGluZm8pIHsKICAgIGxldCBmbiA9IHR5cGVvZiBpbmZvLm1ldGhvZCA9PT0gInN0cmluZyIgPyBpbnN0W2luZm8ubWV0aG9kXSA6IGluZm8ubWV0aG9kOwogICAgbGV0IGNoYW5nZWRQcm9wID0gaW5mby5wcm9wZXJ0eTsKICAgIGlmIChmbikgewogICAgICBmbi5jYWxsKGluc3QsIGluc3QuX19kYXRhW2NoYW5nZWRQcm9wXSwgb2xkUHJvcHNbY2hhbmdlZFByb3BdKTsKICAgIH0gZWxzZSBpZiAoIWluZm8uZHluYW1pY0ZuKSB7CiAgICAgIGNvbnNvbGUud2Fybignb2JzZXJ2ZXIgbWV0aG9kIGAnICsgaW5mby5tZXRob2QgKyAnYCBub3QgZGVmaW5lZCcpOwogICAgfQogIH0KCiAgLyoqCiAgICogUnVucyAibm90aWZ5IiBlZmZlY3RzIGZvciBhIHNldCBvZiBjaGFuZ2VkIHByb3BlcnRpZXMuCiAgICoKICAgKiBUaGlzIG1ldGhvZCBkaWZmZXJzIGZyb20gdGhlIGdlbmVyaWMgYHJ1bkVmZmVjdHNgIG1ldGhvZCBpbiB0aGF0IGl0CiAgICogd2lsbCBkaXNwYXRjaCBwYXRoIG5vdGlmaWNhdGlvbiBldmVudHMgaW4gdGhlIGNhc2UgdGhhdCB0aGUgcHJvcGVydHkKICAgKiBjaGFuZ2VkIHdhcyBhIHBhdGggYW5kIHRoZSByb290IHByb3BlcnR5IGZvciB0aGF0IHBhdGggZGlkbid0IGhhdmUgYQogICAqICJub3RpZnkiIGVmZmVjdC4gIFRoaXMgaXMgdG8gbWFpbnRhaW4gMS4wIGJlaGF2aW9yIHRoYXQgZGlkIG5vdCByZXF1aXJlCiAgICogYG5vdGlmeTogdHJ1ZWAgdG8gZW5zdXJlIG9iamVjdCBzdWItcHJvcGVydHkgbm90aWZpY2F0aW9ucyB3ZXJlCiAgICogc2VudC4KICAgKgogICAqIEBwYXJhbSB7IVByb3BlcnR5RWZmZWN0c1R5cGV9IGluc3QgVGhlIGluc3RhbmNlIHdpdGggZWZmZWN0cyB0byBydW4KICAgKiBAcGFyYW0ge09iamVjdH0gbm90aWZ5UHJvcHMgQmFnIG9mIHByb3BlcnRpZXMgdG8gbm90aWZ5CiAgICogQHBhcmFtIHtPYmplY3R9IHByb3BzIEJhZyBvZiBjdXJyZW50IHByb3BlcnR5IGNoYW5nZXMKICAgKiBAcGFyYW0ge09iamVjdH0gb2xkUHJvcHMgQmFnIG9mIHByZXZpb3VzIHZhbHVlcyBmb3IgY2hhbmdlZCBwcm9wZXJ0aWVzCiAgICogQHBhcmFtIHtib29sZWFufSBoYXNQYXRocyBUcnVlIHdpdGggYHByb3BzYCBjb250YWlucyBvbmUgb3IgbW9yZSBwYXRocwogICAqIEByZXR1cm4ge3ZvaWR9CiAgICogQHByaXZhdGUKICAgKi8KICBmdW5jdGlvbiBydW5Ob3RpZnlFZmZlY3RzKGluc3QsIG5vdGlmeVByb3BzLCBwcm9wcywgb2xkUHJvcHMsIGhhc1BhdGhzKSB7CiAgICAvLyBOb3RpZnkKICAgIGxldCBmeHMgPSBpbnN0W1RZUEVTLk5PVElGWV07CiAgICBsZXQgbm90aWZpZWQ7CiAgICBsZXQgaWQgPSBkZWR1cGVJZCsrOwogICAgLy8gVHJ5IG5vcm1hbCBub3RpZnkgZWZmZWN0czsgaWYgbm9uZSwgZmFsbCBiYWNrIHRvIHRyeSBwYXRoIG5vdGlmaWNhdGlvbgogICAgZm9yIChsZXQgcHJvcCBpbiBub3RpZnlQcm9wcykgewogICAgICBpZiAobm90aWZ5UHJvcHNbcHJvcF0pIHsKICAgICAgICBpZiAoZnhzICYmIHJ1bkVmZmVjdHNGb3JQcm9wZXJ0eShpbnN0LCBmeHMsIGlkLCBwcm9wLCBwcm9wcywgb2xkUHJvcHMsIGhhc1BhdGhzKSkgewogICAgICAgICAgbm90aWZpZWQgPSB0cnVlOwogICAgICAgIH0gZWxzZSBpZiAoaGFzUGF0aHMgJiYgbm90aWZ5UGF0aChpbnN0LCBwcm9wLCBwcm9wcykpIHsKICAgICAgICAgIG5vdGlmaWVkID0gdHJ1ZTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIC8vIEZsdXNoIGhvc3QgaWYgd2UgYWN0dWFsbHkgbm90aWZpZWQgYW5kIGhvc3Qgd2FzIGJhdGNoaW5nCiAgICAvLyBBbmQgdGhlIGhvc3QgaGFzIGFscmVhZHkgaW5pdGlhbGl6ZWQgY2xpZW50czsgdGhpcyBwcmV2ZW50cwogICAgLy8gYW4gaXNzdWUgd2l0aCBhIGhvc3Qgb2JzZXJ2aW5nIGRhdGEgY2hhbmdlcyBiZWZvcmUgY2xpZW50cyBhcmUgcmVhZHkuCiAgICBsZXQgaG9zdDsKICAgIGlmIChub3RpZmllZCAmJiAoaG9zdCA9IGluc3QuX19kYXRhSG9zdCkgJiYgaG9zdC5faW52YWxpZGF0ZVByb3BlcnRpZXMpIHsKICAgICAgaG9zdC5faW52YWxpZGF0ZVByb3BlcnRpZXMoKTsKICAgIH0KICB9CgogIC8qKgogICAqIERpc3BhdGNoZXMge3Byb3BlcnR5fS1jaGFuZ2VkIGV2ZW50cyB3aXRoIHBhdGggaW5mb3JtYXRpb24gaW4gdGhlIGRldGFpbAogICAqIG9iamVjdCB0byBpbmRpY2F0ZSBhIHN1Yi1wYXRoIG9mIHRoZSBwcm9wZXJ0eSB3YXMgY2hhbmdlZC4KICAgKgogICAqIEBwYXJhbSB7IVByb3BlcnR5RWZmZWN0c1R5cGV9IGluc3QgVGhlIGVsZW1lbnQgZnJvbSB3aGljaCB0byBmaXJlIHRoZSBldmVudAogICAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIFRoZSBwYXRoIHRoYXQgd2FzIGNoYW5nZWQKICAgKiBAcGFyYW0ge09iamVjdH0gcHJvcHMgQmFnIG9mIGN1cnJlbnQgcHJvcGVydHkgY2hhbmdlcwogICAqIEByZXR1cm4ge2Jvb2xlYW59IFJldHVybnMgdHJ1ZSBpZiB0aGUgcGF0aCB3YXMgbm90aWZpZWQKICAgKiBAcHJpdmF0ZQogICAqLwogIGZ1bmN0aW9uIG5vdGlmeVBhdGgoaW5zdCwgcGF0aCwgcHJvcHMpIHsKICAgIGxldCByb290UHJvcGVydHkgPSBQb2x5bWVyLlBhdGgucm9vdChwYXRoKTsKICAgIGlmIChyb290UHJvcGVydHkgIT09IHBhdGgpIHsKICAgICAgbGV0IGV2ZW50TmFtZSA9IFBvbHltZXIuQ2FzZU1hcC5jYW1lbFRvRGFzaENhc2Uocm9vdFByb3BlcnR5KSArICctY2hhbmdlZCc7CiAgICAgIGRpc3BhdGNoTm90aWZ5RXZlbnQoaW5zdCwgZXZlbnROYW1lLCBwcm9wc1twYXRoXSwgcGF0aCk7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgLyoqCiAgICogRGlzcGF0Y2hlcyB7cHJvcGVydHl9LWNoYW5nZWQgZXZlbnRzIHRvIGluZGljYXRlIGEgcHJvcGVydHkgKG9yIHBhdGgpCiAgICogY2hhbmdlZC4KICAgKgogICAqIEBwYXJhbSB7IVByb3BlcnR5RWZmZWN0c1R5cGV9IGluc3QgVGhlIGVsZW1lbnQgZnJvbSB3aGljaCB0byBmaXJlIHRoZSBldmVudAogICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudE5hbWUgVGhlIG5hbWUgb2YgdGhlIGV2ZW50IHRvIHNlbmQgKCd7cHJvcGVydHl9LWNoYW5nZWQnKQogICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIG9mIHRoZSBjaGFuZ2VkIHByb3BlcnR5CiAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkfSBwYXRoIElmIGEgc3ViLXBhdGggb2YgdGhpcyBwcm9wZXJ0eSBjaGFuZ2VkLCB0aGUgcGF0aAogICAqICAgdGhhdCBjaGFuZ2VkIChvcHRpb25hbCkuCiAgICogQHJldHVybiB7dm9pZH0KICAgKiBAcHJpdmF0ZQogICAqIEBzdXBwcmVzcyB7aW52YWxpZENhc3RzfQogICAqLwogIGZ1bmN0aW9uIGRpc3BhdGNoTm90aWZ5RXZlbnQoaW5zdCwgZXZlbnROYW1lLCB2YWx1ZSwgcGF0aCkgewogICAgbGV0IGRldGFpbCA9IHsKICAgICAgdmFsdWU6IHZhbHVlLAogICAgICBxdWV1ZVByb3BlcnR5OiB0cnVlCiAgICB9OwogICAgaWYgKHBhdGgpIHsKICAgICAgZGV0YWlsLnBhdGggPSBwYXRoOwogICAgfQogICAgLyoqIEB0eXBlIHshSFRNTEVsZW1lbnR9ICovKGluc3QpLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KGV2ZW50TmFtZSwgeyBkZXRhaWwgfSkpOwogIH0KCiAgLyoqCiAgICogSW1wbGVtZW50cyB0aGUgIm5vdGlmeSIgZWZmZWN0LgogICAqCiAgICogRGlzcGF0Y2hlcyBhIG5vbi1idWJibGluZyBldmVudCBuYW1lZCBgaW5mby5ldmVudE5hbWVgIG9uIHRoZSBpbnN0YW5jZQogICAqIHdpdGggYSBkZXRhaWwgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIG5ldyBgdmFsdWVgLgogICAqCiAgICogQHBhcmFtIHshUHJvcGVydHlFZmZlY3RzVHlwZX0gaW5zdCBUaGUgaW5zdGFuY2UgdGhlIGVmZmVjdCB3aWxsIGJlIHJ1biBvbgogICAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eSBOYW1lIG9mIHByb3BlcnR5CiAgICogQHBhcmFtIHtPYmplY3R9IHByb3BzIEJhZyBvZiBjdXJyZW50IHByb3BlcnR5IGNoYW5nZXMKICAgKiBAcGFyYW0ge09iamVjdH0gb2xkUHJvcHMgQmFnIG9mIHByZXZpb3VzIHZhbHVlcyBmb3IgY2hhbmdlZCBwcm9wZXJ0aWVzCiAgICogQHBhcmFtIHs/fSBpbmZvIEVmZmVjdCBtZXRhZGF0YQogICAqIEBwYXJhbSB7Ym9vbGVhbn0gaGFzUGF0aHMgVHJ1ZSB3aXRoIGBwcm9wc2AgY29udGFpbnMgb25lIG9yIG1vcmUgcGF0aHMKICAgKiBAcmV0dXJuIHt2b2lkfQogICAqIEBwcml2YXRlCiAgICovCiAgZnVuY3Rpb24gcnVuTm90aWZ5RWZmZWN0KGluc3QsIHByb3BlcnR5LCBwcm9wcywgb2xkUHJvcHMsIGluZm8sIGhhc1BhdGhzKSB7CiAgICBsZXQgcm9vdFByb3BlcnR5ID0gaGFzUGF0aHMgPyBQb2x5bWVyLlBhdGgucm9vdChwcm9wZXJ0eSkgOiBwcm9wZXJ0eTsKICAgIGxldCBwYXRoID0gcm9vdFByb3BlcnR5ICE9IHByb3BlcnR5ID8gcHJvcGVydHkgOiBudWxsOwogICAgbGV0IHZhbHVlID0gcGF0aCA/IFBvbHltZXIuUGF0aC5nZXQoaW5zdCwgcGF0aCkgOiBpbnN0Ll9fZGF0YVtwcm9wZXJ0eV07CiAgICBpZiAocGF0aCAmJiB2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7CiAgICAgIHZhbHVlID0gcHJvcHNbcHJvcGVydHldOyAgLy8gc3BlY2lmaWNhbGx5IGZvciAuc3BsaWNlcwogICAgfQogICAgZGlzcGF0Y2hOb3RpZnlFdmVudChpbnN0LCBpbmZvLmV2ZW50TmFtZSwgdmFsdWUsIHBhdGgpOwogIH0KCiAgLyoqCiAgICogSGFuZGxlciBmdW5jdGlvbiBmb3IgMi13YXkgbm90aWZpY2F0aW9uIGV2ZW50cy4gUmVjZWl2ZXMgY29udGV4dAogICAqIGluZm9ybWF0aW9uIGNhcHR1cmVkIGluIHRoZSBgYWRkTm90aWZ5TGlzdGVuZXJgIGNsb3N1cmUgZnJvbSB0aGUKICAgKiBgX19ub3RpZnlMaXN0ZW5lcnNgIG1ldGFkYXRhLgogICAqCiAgICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlIG5vdGlmaWVkIHByb3BlcnR5IHRvIHRoZSBob3N0IHByb3BlcnR5IG9yIHBhdGguICBJZgogICAqIHRoZSBldmVudCBjb250YWluZWQgcGF0aCBpbmZvcm1hdGlvbiwgdHJhbnNsYXRlIHRoYXQgcGF0aCB0byB0aGUgaG9zdAogICAqIHNjb3BlJ3MgbmFtZSBmb3IgdGhhdCBwYXRoIGZpcnN0LgogICAqCiAgICogQHBhcmFtIHtDdXN0b21FdmVudH0gZXZlbnQgTm90aWZpY2F0aW9uIGV2ZW50IChlLmcuICc8cHJvcGVydHk+LWNoYW5nZWQnKQogICAqIEBwYXJhbSB7IVByb3BlcnR5RWZmZWN0c1R5cGV9IGluc3QgSG9zdCBlbGVtZW50IGluc3RhbmNlIGhhbmRsaW5nIHRoZSBub3RpZmljYXRpb24gZXZlbnQKICAgKiBAcGFyYW0ge3N0cmluZ30gZnJvbVByb3AgQ2hpbGQgZWxlbWVudCBwcm9wZXJ0eSB0aGF0IHdhcyBib3VuZAogICAqIEBwYXJhbSB7c3RyaW5nfSB0b1BhdGggSG9zdCBwcm9wZXJ0eS9wYXRoIHRoYXQgd2FzIGJvdW5kCiAgICogQHBhcmFtIHtib29sZWFufSBuZWdhdGUgV2hldGhlciB0aGUgYmluZGluZyB3YXMgbmVnYXRlZAogICAqIEByZXR1cm4ge3ZvaWR9CiAgICogQHByaXZhdGUKICAgKi8KICBmdW5jdGlvbiBoYW5kbGVOb3RpZmljYXRpb24oZXZlbnQsIGluc3QsIGZyb21Qcm9wLCB0b1BhdGgsIG5lZ2F0ZSkgewogICAgbGV0IHZhbHVlOwogICAgbGV0IGRldGFpbCA9IC8qKiBAdHlwZSB7T2JqZWN0fSAqLyhldmVudC5kZXRhaWwpOwogICAgbGV0IGZyb21QYXRoID0gZGV0YWlsICYmIGRldGFpbC5wYXRoOwogICAgaWYgKGZyb21QYXRoKSB7CiAgICAgIHRvUGF0aCA9IFBvbHltZXIuUGF0aC50cmFuc2xhdGUoZnJvbVByb3AsIHRvUGF0aCwgZnJvbVBhdGgpOwogICAgICB2YWx1ZSA9IGRldGFpbCAmJiBkZXRhaWwudmFsdWU7CiAgICB9IGVsc2UgewogICAgICB2YWx1ZSA9IGV2ZW50LmN1cnJlbnRUYXJnZXRbZnJvbVByb3BdOwogICAgfQogICAgdmFsdWUgPSBuZWdhdGUgPyAhdmFsdWUgOiB2YWx1ZTsKICAgIGlmICghaW5zdFtUWVBFUy5SRUFEX09OTFldIHx8ICFpbnN0W1RZUEVTLlJFQURfT05MWV1bdG9QYXRoXSkgewogICAgICBpZiAoaW5zdC5fc2V0UGVuZGluZ1Byb3BlcnR5T3JQYXRoKHRvUGF0aCwgdmFsdWUsIHRydWUsIEJvb2xlYW4oZnJvbVBhdGgpKQogICAgICAgICYmICghZGV0YWlsIHx8ICFkZXRhaWwucXVldWVQcm9wZXJ0eSkpIHsKICAgICAgICBpbnN0Ll9pbnZhbGlkYXRlUHJvcGVydGllcygpOwogICAgICB9CiAgICB9CiAgfQoKICAvKioKICAgKiBJbXBsZW1lbnRzIHRoZSAicmVmbGVjdCIgZWZmZWN0LgogICAqCiAgICogU2V0cyB0aGUgYXR0cmlidXRlIG5hbWVkIGBpbmZvLmF0dHJOYW1lYCB0byB0aGUgZ2l2ZW4gcHJvcGVydHkgdmFsdWUuCiAgICoKICAgKiBAcGFyYW0geyFQcm9wZXJ0eUVmZmVjdHNUeXBlfSBpbnN0IFRoZSBpbnN0YW5jZSB0aGUgZWZmZWN0IHdpbGwgYmUgcnVuIG9uCiAgICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IE5hbWUgb2YgcHJvcGVydHkKICAgKiBAcGFyYW0ge09iamVjdH0gcHJvcHMgQmFnIG9mIGN1cnJlbnQgcHJvcGVydHkgY2hhbmdlcwogICAqIEBwYXJhbSB7T2JqZWN0fSBvbGRQcm9wcyBCYWcgb2YgcHJldmlvdXMgdmFsdWVzIGZvciBjaGFuZ2VkIHByb3BlcnRpZXMKICAgKiBAcGFyYW0gez99IGluZm8gRWZmZWN0IG1ldGFkYXRhCiAgICogQHJldHVybiB7dm9pZH0KICAgKiBAcHJpdmF0ZQogICAqLwogIGZ1bmN0aW9uIHJ1blJlZmxlY3RFZmZlY3QoaW5zdCwgcHJvcGVydHksIHByb3BzLCBvbGRQcm9wcywgaW5mbykgewogICAgbGV0IHZhbHVlID0gaW5zdC5fX2RhdGFbcHJvcGVydHldOwogICAgaWYgKFBvbHltZXIuc2FuaXRpemVET01WYWx1ZSkgewogICAgICB2YWx1ZSA9IFBvbHltZXIuc2FuaXRpemVET01WYWx1ZSh2YWx1ZSwgaW5mby5hdHRyTmFtZSwgJ2F0dHJpYnV0ZScsIC8qKiBAdHlwZSB7Tm9kZX0gKi8oaW5zdCkpOwogICAgfQogICAgaW5zdC5fcHJvcGVydHlUb0F0dHJpYnV0ZShwcm9wZXJ0eSwgaW5mby5hdHRyTmFtZSwgdmFsdWUpOwogIH0KCiAgLyoqCiAgICogUnVucyAiY29tcHV0ZWQiIGVmZmVjdHMgZm9yIGEgc2V0IG9mIGNoYW5nZWQgcHJvcGVydGllcy4KICAgKgogICAqIFRoaXMgbWV0aG9kIGRpZmZlcnMgZnJvbSB0aGUgZ2VuZXJpYyBgcnVuRWZmZWN0c2AgbWV0aG9kIGluIHRoYXQgaXQKICAgKiBjb250aW51ZXMgdG8gcnVuIGNvbXB1dGVkIGVmZmVjdHMgYmFzZWQgb24gdGhlIG91dHB1dCBvZiBlYWNoIHBhc3MgdW50aWwKICAgKiB0aGVyZSBhcmUgbm8gbW9yZSBuZXdseSBjb21wdXRlZCBwcm9wZXJ0aWVzLiAgVGhpcyBlbnN1cmVzIHRoYXQgYWxsCiAgICogcHJvcGVydGllcyB0aGF0IHdpbGwgYmUgY29tcHV0ZWQgYnkgdGhlIGluaXRpYWwgc2V0IG9mIGNoYW5nZXMgYXJlCiAgICogY29tcHV0ZWQgYmVmb3JlIG90aGVyIGVmZmVjdHMgKGJpbmRpbmcgcHJvcGFnYXRpb24sIG9ic2VydmVycywgYW5kIG5vdGlmeSkKICAgKiBydW4uCiAgICoKICAgKiBAcGFyYW0geyFQcm9wZXJ0eUVmZmVjdHNUeXBlfSBpbnN0IFRoZSBpbnN0YW5jZSB0aGUgZWZmZWN0IHdpbGwgYmUgcnVuIG9uCiAgICogQHBhcmFtIHshT2JqZWN0fSBjaGFuZ2VkUHJvcHMgQmFnIG9mIGNoYW5nZWQgcHJvcGVydGllcwogICAqIEBwYXJhbSB7IU9iamVjdH0gb2xkUHJvcHMgQmFnIG9mIHByZXZpb3VzIHZhbHVlcyBmb3IgY2hhbmdlZCBwcm9wZXJ0aWVzCiAgICogQHBhcmFtIHtib29sZWFufSBoYXNQYXRocyBUcnVlIHdpdGggYHByb3BzYCBjb250YWlucyBvbmUgb3IgbW9yZSBwYXRocwogICAqIEByZXR1cm4ge3ZvaWR9CiAgICogQHByaXZhdGUKICAgKi8KICBmdW5jdGlvbiBydW5Db21wdXRlZEVmZmVjdHMoaW5zdCwgY2hhbmdlZFByb3BzLCBvbGRQcm9wcywgaGFzUGF0aHMpIHsKICAgIGxldCBjb21wdXRlRWZmZWN0cyA9IGluc3RbVFlQRVMuQ09NUFVURV07CiAgICBpZiAoY29tcHV0ZUVmZmVjdHMpIHsKICAgICAgbGV0IGlucHV0UHJvcHMgPSBjaGFuZ2VkUHJvcHM7CiAgICAgIHdoaWxlIChydW5FZmZlY3RzKGluc3QsIGNvbXB1dGVFZmZlY3RzLCBpbnB1dFByb3BzLCBvbGRQcm9wcywgaGFzUGF0aHMpKSB7CiAgICAgICAgT2JqZWN0LmFzc2lnbihvbGRQcm9wcywgaW5zdC5fX2RhdGFPbGQpOwogICAgICAgIE9iamVjdC5hc3NpZ24oY2hhbmdlZFByb3BzLCBpbnN0Ll9fZGF0YVBlbmRpbmcpOwogICAgICAgIGlucHV0UHJvcHMgPSBpbnN0Ll9fZGF0YVBlbmRpbmc7CiAgICAgICAgaW5zdC5fX2RhdGFQZW5kaW5nID0gbnVsbDsKICAgICAgfQogICAgfQogIH0KCiAgLyoqCiAgICogSW1wbGVtZW50cyB0aGUgImNvbXB1dGVkIHByb3BlcnR5IiBlZmZlY3QgYnkgcnVubmluZyB0aGUgbWV0aG9kIHdpdGggdGhlCiAgICogdmFsdWVzIG9mIHRoZSBhcmd1bWVudHMgc3BlY2lmaWVkIGluIHRoZSBgaW5mb2Agb2JqZWN0IGFuZCBzZXR0aW5nIHRoZQogICAqIHJldHVybiB2YWx1ZSB0byB0aGUgY29tcHV0ZWQgcHJvcGVydHkgc3BlY2lmaWVkLgogICAqCiAgICogQHBhcmFtIHshUHJvcGVydHlFZmZlY3RzVHlwZX0gaW5zdCBUaGUgaW5zdGFuY2UgdGhlIGVmZmVjdCB3aWxsIGJlIHJ1biBvbgogICAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eSBOYW1lIG9mIHByb3BlcnR5CiAgICogQHBhcmFtIHtPYmplY3R9IHByb3BzIEJhZyBvZiBjdXJyZW50IHByb3BlcnR5IGNoYW5nZXMKICAgKiBAcGFyYW0ge09iamVjdH0gb2xkUHJvcHMgQmFnIG9mIHByZXZpb3VzIHZhbHVlcyBmb3IgY2hhbmdlZCBwcm9wZXJ0aWVzCiAgICogQHBhcmFtIHs/fSBpbmZvIEVmZmVjdCBtZXRhZGF0YQogICAqIEByZXR1cm4ge3ZvaWR9CiAgICogQHByaXZhdGUKICAgKi8KICBmdW5jdGlvbiBydW5Db21wdXRlZEVmZmVjdChpbnN0LCBwcm9wZXJ0eSwgcHJvcHMsIG9sZFByb3BzLCBpbmZvKSB7CiAgICBsZXQgcmVzdWx0ID0gcnVuTWV0aG9kRWZmZWN0KGluc3QsIHByb3BlcnR5LCBwcm9wcywgb2xkUHJvcHMsIGluZm8pOwogICAgbGV0IGNvbXB1dGVkUHJvcCA9IGluZm8ubWV0aG9kSW5mbzsKICAgIGlmIChpbnN0Ll9fZGF0YUhhc0FjY2Vzc29yICYmIGluc3QuX19kYXRhSGFzQWNjZXNzb3JbY29tcHV0ZWRQcm9wXSkgewogICAgICBpbnN0Ll9zZXRQZW5kaW5nUHJvcGVydHkoY29tcHV0ZWRQcm9wLCByZXN1bHQsIHRydWUpOwogICAgfSBlbHNlIHsKICAgICAgaW5zdFtjb21wdXRlZFByb3BdID0gcmVzdWx0OwogICAgfQogIH0KCiAgLyoqCiAgICogQ29tcHV0ZXMgcGF0aCBjaGFuZ2VzIGJhc2VkIG9uIHBhdGggbGlua3Mgc2V0IHVwIHVzaW5nIHRoZSBgbGlua1BhdGhzYAogICAqIEFQSS4KICAgKgogICAqIEBwYXJhbSB7IVByb3BlcnR5RWZmZWN0c1R5cGV9IGluc3QgVGhlIGluc3RhbmNlIHdob3NlIHByb3BzIGFyZSBjaGFuZ2luZwogICAqIEBwYXJhbSB7c3RyaW5nIHwgIUFycmF5PChzdHJpbmd8bnVtYmVyKT59IHBhdGggUGF0aCB0aGF0IGhhcyBjaGFuZ2VkCiAgICogQHBhcmFtIHsqfSB2YWx1ZSBWYWx1ZSBvZiBjaGFuZ2VkIHBhdGgKICAgKiBAcmV0dXJuIHt2b2lkfQogICAqIEBwcml2YXRlCiAgICovCiAgZnVuY3Rpb24gY29tcHV0ZUxpbmtlZFBhdGhzKGluc3QsIHBhdGgsIHZhbHVlKSB7CiAgICBsZXQgbGlua3MgPSBpbnN0Ll9fZGF0YUxpbmtlZFBhdGhzOwogICAgaWYgKGxpbmtzKSB7CiAgICAgIGxldCBsaW5rOwogICAgICBmb3IgKGxldCBhIGluIGxpbmtzKSB7CiAgICAgICAgbGV0IGIgPSBsaW5rc1thXTsKICAgICAgICBpZiAoUG9seW1lci5QYXRoLmlzRGVzY2VuZGFudChhLCBwYXRoKSkgewogICAgICAgICAgbGluayA9IFBvbHltZXIuUGF0aC50cmFuc2xhdGUoYSwgYiwgcGF0aCk7CiAgICAgICAgICBpbnN0Ll9zZXRQZW5kaW5nUHJvcGVydHlPclBhdGgobGluaywgdmFsdWUsIHRydWUsIHRydWUpOwogICAgICAgIH0gZWxzZSBpZiAoUG9seW1lci5QYXRoLmlzRGVzY2VuZGFudChiLCBwYXRoKSkgewogICAgICAgICAgbGluayA9IFBvbHltZXIuUGF0aC50cmFuc2xhdGUoYiwgYSwgcGF0aCk7CiAgICAgICAgICBpbnN0Ll9zZXRQZW5kaW5nUHJvcGVydHlPclBhdGgobGluaywgdmFsdWUsIHRydWUsIHRydWUpOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KCiAgLy8gLS0gYmluZGluZ3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAvKioKICAgKiBBZGRzIGJpbmRpbmcgbWV0YWRhdGEgdG8gdGhlIGN1cnJlbnQgYG5vZGVJbmZvYCwgYW5kIGJpbmRpbmcgZWZmZWN0cwogICAqIGZvciBhbGwgcGFydCBkZXBlbmRlbmNpZXMgdG8gYHRlbXBsYXRlSW5mb2AuCiAgICoKICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjb25zdHJ1Y3RvciBDbGFzcyB0aGF0IGBfcGFyc2VUZW1wbGF0ZWAgaXMgY3VycmVudGx5CiAgICogICBydW5uaW5nIG9uCiAgICogQHBhcmFtIHtUZW1wbGF0ZUluZm99IHRlbXBsYXRlSW5mbyBUZW1wbGF0ZSBtZXRhZGF0YSBmb3IgY3VycmVudCB0ZW1wbGF0ZQogICAqIEBwYXJhbSB7Tm9kZUluZm99IG5vZGVJbmZvIE5vZGUgbWV0YWRhdGEgZm9yIGN1cnJlbnQgdGVtcGxhdGUgbm9kZQogICAqIEBwYXJhbSB7c3RyaW5nfSBraW5kIEJpbmRpbmcga2luZCwgZWl0aGVyICdwcm9wZXJ0eScsICdhdHRyaWJ1dGUnLCBvciAndGV4dCcKICAgKiBAcGFyYW0ge3N0cmluZ30gdGFyZ2V0IFRhcmdldCBwcm9wZXJ0eSBuYW1lCiAgICogQHBhcmFtIHshQXJyYXk8IUJpbmRpbmdQYXJ0Pn0gcGFydHMgQXJyYXkgb2YgYmluZGluZyBwYXJ0IG1ldGFkYXRhCiAgICogQHBhcmFtIHtzdHJpbmc9fSBsaXRlcmFsIExpdGVyYWwgdGV4dCBzdXJyb3VuZGluZyBiaW5kaW5nIHBhcnRzIChzcGVjaWZpZWQKICAgKiAgIG9ubHkgZm9yICdwcm9wZXJ0eScgYmluZGluZ3MsIHNpbmNlIHRoZXNlIG11c3QgYmUgaW5pdGlhbGl6ZWQgYXMgcGFydAogICAqICAgb2YgYm9vdC11cCkKICAgKiBAcmV0dXJuIHt2b2lkfQogICAqIEBwcml2YXRlCiAgICovCiAgZnVuY3Rpb24gYWRkQmluZGluZyhjb25zdHJ1Y3RvciwgdGVtcGxhdGVJbmZvLCBub2RlSW5mbywga2luZCwgdGFyZ2V0LCBwYXJ0cywgbGl0ZXJhbCkgewogICAgLy8gQ3JlYXRlIGJpbmRpbmcgbWV0YWRhdGEgYW5kIGFkZCB0byBub2RlSW5mbwogICAgbm9kZUluZm8uYmluZGluZ3MgPSBub2RlSW5mby5iaW5kaW5ncyB8fCBbXTsKICAgIGxldCAvKiogQmluZGluZyAqLyBiaW5kaW5nID0geyBraW5kLCB0YXJnZXQsIHBhcnRzLCBsaXRlcmFsLCBpc0NvbXBvdW5kOiAocGFydHMubGVuZ3RoICE9PSAxKSB9OwogICAgbm9kZUluZm8uYmluZGluZ3MucHVzaChiaW5kaW5nKTsKICAgIC8vIEFkZCBsaXN0ZW5lciBpbmZvIHRvIGJpbmRpbmcgbWV0YWRhdGEKICAgIGlmIChzaG91bGRBZGRMaXN0ZW5lcihiaW5kaW5nKSkgewogICAgICBsZXQge2V2ZW50LCBuZWdhdGV9ID0gYmluZGluZy5wYXJ0c1swXTsKICAgICAgYmluZGluZy5saXN0ZW5lckV2ZW50ID0gZXZlbnQgfHwgKENhc2VNYXAuY2FtZWxUb0Rhc2hDYXNlKHRhcmdldCkgKyAnLWNoYW5nZWQnKTsKICAgICAgYmluZGluZy5saXN0ZW5lck5lZ2F0ZSA9IG5lZ2F0ZTsKICAgIH0KICAgIC8vIEFkZCAicHJvcGFnYXRlIiBwcm9wZXJ0eSBlZmZlY3RzIHRvIHRlbXBsYXRlSW5mbwogICAgbGV0IGluZGV4ID0gdGVtcGxhdGVJbmZvLm5vZGVJbmZvTGlzdC5sZW5ndGg7CiAgICBmb3IgKGxldCBpPTA7IGk8YmluZGluZy5wYXJ0cy5sZW5ndGg7IGkrKykgewogICAgICBsZXQgcGFydCA9IGJpbmRpbmcucGFydHNbaV07CiAgICAgIHBhcnQuY29tcG91bmRJbmRleCA9IGk7CiAgICAgIGFkZEVmZmVjdEZvckJpbmRpbmdQYXJ0KGNvbnN0cnVjdG9yLCB0ZW1wbGF0ZUluZm8sIGJpbmRpbmcsIHBhcnQsIGluZGV4KTsKICAgIH0KICB9CgogIC8qKgogICAqIEFkZHMgcHJvcGVydHkgZWZmZWN0cyB0byB0aGUgZ2l2ZW4gYHRlbXBsYXRlSW5mb2AgZm9yIHRoZSBnaXZlbiBiaW5kaW5nCiAgICogcGFydC4KICAgKgogICAqIEBwYXJhbSB7RnVuY3Rpb259IGNvbnN0cnVjdG9yIENsYXNzIHRoYXQgYF9wYXJzZVRlbXBsYXRlYCBpcyBjdXJyZW50bHkKICAgKiAgIHJ1bm5pbmcgb24KICAgKiBAcGFyYW0ge1RlbXBsYXRlSW5mb30gdGVtcGxhdGVJbmZvIFRlbXBsYXRlIG1ldGFkYXRhIGZvciBjdXJyZW50IHRlbXBsYXRlCiAgICogQHBhcmFtIHshQmluZGluZ30gYmluZGluZyBCaW5kaW5nIG1ldGFkYXRhCiAgICogQHBhcmFtIHshQmluZGluZ1BhcnR9IHBhcnQgQmluZGluZyBwYXJ0IG1ldGFkYXRhCiAgICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IEluZGV4IGludG8gYG5vZGVJbmZvTGlzdGAgZm9yIHRoaXMgbm9kZQogICAqIEByZXR1cm4ge3ZvaWR9CiAgICovCiAgZnVuY3Rpb24gYWRkRWZmZWN0Rm9yQmluZGluZ1BhcnQoY29uc3RydWN0b3IsIHRlbXBsYXRlSW5mbywgYmluZGluZywgcGFydCwgaW5kZXgpIHsKICAgIGlmICghcGFydC5saXRlcmFsKSB7CiAgICAgIGlmIChiaW5kaW5nLmtpbmQgPT09ICdhdHRyaWJ1dGUnICYmIGJpbmRpbmcudGFyZ2V0WzBdID09PSAnLScpIHsKICAgICAgICBjb25zb2xlLndhcm4oJ0Nhbm5vdCBzZXQgYXR0cmlidXRlICcgKyBiaW5kaW5nLnRhcmdldCArCiAgICAgICAgICAnIGJlY2F1c2UgIi0iIGlzIG5vdCBhIHZhbGlkIGF0dHJpYnV0ZSBzdGFydGluZyBjaGFyYWN0ZXInKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBsZXQgZGVwZW5kZW5jaWVzID0gcGFydC5kZXBlbmRlbmNpZXM7CiAgICAgICAgbGV0IGluZm8gPSB7IGluZGV4LCBiaW5kaW5nLCBwYXJ0LCBldmFsdWF0b3I6IGNvbnN0cnVjdG9yIH07CiAgICAgICAgZm9yIChsZXQgaj0wOyBqPGRlcGVuZGVuY2llcy5sZW5ndGg7IGorKykgewogICAgICAgICAgbGV0IHRyaWdnZXIgPSBkZXBlbmRlbmNpZXNbal07CiAgICAgICAgICBpZiAodHlwZW9mIHRyaWdnZXIgPT0gJ3N0cmluZycpIHsKICAgICAgICAgICAgdHJpZ2dlciA9IHBhcnNlQXJnKHRyaWdnZXIpOwogICAgICAgICAgICB0cmlnZ2VyLndpbGRjYXJkID0gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgICAgIGNvbnN0cnVjdG9yLl9hZGRUZW1wbGF0ZVByb3BlcnR5RWZmZWN0KHRlbXBsYXRlSW5mbywgdHJpZ2dlci5yb290UHJvcGVydHksIHsKICAgICAgICAgICAgZm46IHJ1bkJpbmRpbmdFZmZlY3QsCiAgICAgICAgICAgIGluZm8sIHRyaWdnZXIKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KCiAgLyoqCiAgICogSW1wbGVtZW50cyB0aGUgImJpbmRpbmciIChwcm9wZXJ0eS9wYXRoIGJpbmRpbmcpIGVmZmVjdC4KICAgKgogICAqIE5vdGUgdGhhdCBiaW5kaW5nIHN5bnRheCBpcyBvdmVycmlkYWJsZSB2aWEgYF9wYXJzZUJpbmRpbmdzYCBhbmQKICAgKiBgX2V2YWx1YXRlQmluZGluZ2AuICBUaGlzIG1ldGhvZCB3aWxsIGNhbGwgYF9ldmFsdWF0ZUJpbmRpbmdgIGZvciBhbnkKICAgKiBub24tbGl0ZXJhbCBwYXJ0cyByZXR1cm5lZCBmcm9tIGBfcGFyc2VCaW5kaW5nc2AuICBIb3dldmVyLAogICAqIHRoZXJlIGlzIG5vIHN1cHBvcnQgZm9yIF9wYXRoXyBiaW5kaW5ncyB2aWEgY3VzdG9tIGJpbmRpbmcgcGFydHMsCiAgICogYXMgdGhpcyBpcyBzcGVjaWZpYyB0byBQb2x5bWVyJ3MgcGF0aCBiaW5kaW5nIHN5bnRheC4KICAgKgogICAqIEBwYXJhbSB7IVByb3BlcnR5RWZmZWN0c1R5cGV9IGluc3QgVGhlIGluc3RhbmNlIHRoZSBlZmZlY3Qgd2lsbCBiZSBydW4gb24KICAgKiBAcGFyYW0ge3N0cmluZ30gcGF0aCBOYW1lIG9mIHByb3BlcnR5CiAgICogQHBhcmFtIHtPYmplY3R9IHByb3BzIEJhZyBvZiBjdXJyZW50IHByb3BlcnR5IGNoYW5nZXMKICAgKiBAcGFyYW0ge09iamVjdH0gb2xkUHJvcHMgQmFnIG9mIHByZXZpb3VzIHZhbHVlcyBmb3IgY2hhbmdlZCBwcm9wZXJ0aWVzCiAgICogQHBhcmFtIHs/fSBpbmZvIEVmZmVjdCBtZXRhZGF0YQogICAqIEBwYXJhbSB7Ym9vbGVhbn0gaGFzUGF0aHMgVHJ1ZSB3aXRoIGBwcm9wc2AgY29udGFpbnMgb25lIG9yIG1vcmUgcGF0aHMKICAgKiBAcGFyYW0ge0FycmF5fSBub2RlTGlzdCBMaXN0IG9mIG5vZGVzIGFzc29jaWF0ZWQgd2l0aCBgbm9kZUluZm9MaXN0YCB0ZW1wbGF0ZQogICAqICAgbWV0YWRhdGEKICAgKiBAcmV0dXJuIHt2b2lkfQogICAqIEBwcml2YXRlCiAgICovCiAgZnVuY3Rpb24gcnVuQmluZGluZ0VmZmVjdChpbnN0LCBwYXRoLCBwcm9wcywgb2xkUHJvcHMsIGluZm8sIGhhc1BhdGhzLCBub2RlTGlzdCkgewogICAgbGV0IG5vZGUgPSBub2RlTGlzdFtpbmZvLmluZGV4XTsKICAgIGxldCBiaW5kaW5nID0gaW5mby5iaW5kaW5nOwogICAgbGV0IHBhcnQgPSBpbmZvLnBhcnQ7CiAgICAvLyBTdWJwYXRoIG5vdGlmaWNhdGlvbjogdHJhbnNmb3JtIHBhdGggYW5kIHNldCB0byBjbGllbnQKICAgIC8vIGUuZy46IGZvbz0ie3tvYmouc3VifX0iLCBwYXRoOiAnb2JqLnN1Yi5wcm9wJywgc2V0ICdmb28ucHJvcCc9b2JqLnN1Yi5wcm9wCiAgICBpZiAoaGFzUGF0aHMgJiYgcGFydC5zb3VyY2UgJiYgKHBhdGgubGVuZ3RoID4gcGFydC5zb3VyY2UubGVuZ3RoKSAmJgogICAgICAgIChiaW5kaW5nLmtpbmQgPT0gJ3Byb3BlcnR5JykgJiYgIWJpbmRpbmcuaXNDb21wb3VuZCAmJgogICAgICAgIG5vZGUuX19pc1Byb3BlcnR5RWZmZWN0c0NsaWVudCAmJgogICAgICAgIG5vZGUuX19kYXRhSGFzQWNjZXNzb3IgJiYgbm9kZS5fX2RhdGFIYXNBY2Nlc3NvcltiaW5kaW5nLnRhcmdldF0pIHsKICAgICAgbGV0IHZhbHVlID0gcHJvcHNbcGF0aF07CiAgICAgIHBhdGggPSBQb2x5bWVyLlBhdGgudHJhbnNsYXRlKHBhcnQuc291cmNlLCBiaW5kaW5nLnRhcmdldCwgcGF0aCk7CiAgICAgIGlmIChub2RlLl9zZXRQZW5kaW5nUHJvcGVydHlPclBhdGgocGF0aCwgdmFsdWUsIGZhbHNlLCB0cnVlKSkgewogICAgICAgIGluc3QuX2VucXVldWVDbGllbnQobm9kZSk7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGxldCB2YWx1ZSA9IGluZm8uZXZhbHVhdG9yLl9ldmFsdWF0ZUJpbmRpbmcoaW5zdCwgcGFydCwgcGF0aCwgcHJvcHMsIG9sZFByb3BzLCBoYXNQYXRocyk7CiAgICAgIC8vIFByb3BhZ2F0ZSB2YWx1ZSB0byBjaGlsZAogICAgICBhcHBseUJpbmRpbmdWYWx1ZShpbnN0LCBub2RlLCBiaW5kaW5nLCBwYXJ0LCB2YWx1ZSk7CiAgICB9CiAgfQoKICAvKioKICAgKiBTZXRzIHRoZSB2YWx1ZSBmb3IgYW4gImJpbmRpbmciIChiaW5kaW5nKSBlZmZlY3QgdG8gYSBub2RlLAogICAqIGVpdGhlciBhcyBhIHByb3BlcnR5IG9yIGF0dHJpYnV0ZS4KICAgKgogICAqIEBwYXJhbSB7IVByb3BlcnR5RWZmZWN0c1R5cGV9IGluc3QgVGhlIGluc3RhbmNlIG93bmluZyB0aGUgYmluZGluZyBlZmZlY3QKICAgKiBAcGFyYW0ge05vZGV9IG5vZGUgVGFyZ2V0IG5vZGUgZm9yIGJpbmRpbmcKICAgKiBAcGFyYW0geyFCaW5kaW5nfSBiaW5kaW5nIEJpbmRpbmcgbWV0YWRhdGEKICAgKiBAcGFyYW0geyFCaW5kaW5nUGFydH0gcGFydCBCaW5kaW5nIHBhcnQgbWV0YWRhdGEKICAgKiBAcGFyYW0geyp9IHZhbHVlIFZhbHVlIHRvIHNldAogICAqIEByZXR1cm4ge3ZvaWR9CiAgICogQHByaXZhdGUKICAgKi8KICBmdW5jdGlvbiBhcHBseUJpbmRpbmdWYWx1ZShpbnN0LCBub2RlLCBiaW5kaW5nLCBwYXJ0LCB2YWx1ZSkgewogICAgdmFsdWUgPSBjb21wdXRlQmluZGluZ1ZhbHVlKG5vZGUsIHZhbHVlLCBiaW5kaW5nLCBwYXJ0KTsKICAgIGlmIChQb2x5bWVyLnNhbml0aXplRE9NVmFsdWUpIHsKICAgICAgdmFsdWUgPSBQb2x5bWVyLnNhbml0aXplRE9NVmFsdWUodmFsdWUsIGJpbmRpbmcudGFyZ2V0LCBiaW5kaW5nLmtpbmQsIG5vZGUpOwogICAgfQogICAgaWYgKGJpbmRpbmcua2luZCA9PSAnYXR0cmlidXRlJykgewogICAgICAvLyBBdHRyaWJ1dGUgYmluZGluZwogICAgICBpbnN0Ll92YWx1ZVRvTm9kZUF0dHJpYnV0ZSgvKiogQHR5cGUge0VsZW1lbnR9ICovKG5vZGUpLCB2YWx1ZSwgYmluZGluZy50YXJnZXQpOwogICAgfSBlbHNlIHsKICAgICAgLy8gUHJvcGVydHkgYmluZGluZwogICAgICBsZXQgcHJvcCA9IGJpbmRpbmcudGFyZ2V0OwogICAgICBpZiAobm9kZS5fX2lzUHJvcGVydHlFZmZlY3RzQ2xpZW50ICYmCiAgICAgICAgICBub2RlLl9fZGF0YUhhc0FjY2Vzc29yICYmIG5vZGUuX19kYXRhSGFzQWNjZXNzb3JbcHJvcF0pIHsKICAgICAgICBpZiAoIW5vZGVbVFlQRVMuUkVBRF9PTkxZXSB8fCAhbm9kZVtUWVBFUy5SRUFEX09OTFldW3Byb3BdKSB7CiAgICAgICAgICBpZiAobm9kZS5fc2V0UGVuZGluZ1Byb3BlcnR5KHByb3AsIHZhbHVlKSkgewogICAgICAgICAgICBpbnN0Ll9lbnF1ZXVlQ2xpZW50KG5vZGUpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSBlbHNlICB7CiAgICAgICAgaW5zdC5fc2V0VW5tYW5hZ2VkUHJvcGVydHlUb05vZGUobm9kZSwgcHJvcCwgdmFsdWUpOwogICAgICB9CiAgICB9CiAgfQoKICAvKioKICAgKiBUcmFuc2Zvcm1zIGFuICJiaW5kaW5nIiBlZmZlY3QgdmFsdWUgYmFzZWQgb24gY29tcG91bmQgJiBuZWdhdGlvbgogICAqIGVmZmVjdCBtZXRhZGF0YSwgYXMgd2VsbCBhcyBoYW5kbGluZyBmb3Igc3BlY2lhbC1jYXNlIHByb3BlcnRpZXMKICAgKgogICAqIEBwYXJhbSB7Tm9kZX0gbm9kZSBOb2RlIHRoZSB2YWx1ZSB3aWxsIGJlIHNldCB0bwogICAqIEBwYXJhbSB7Kn0gdmFsdWUgVmFsdWUgdG8gc2V0CiAgICogQHBhcmFtIHshQmluZGluZ30gYmluZGluZyBCaW5kaW5nIG1ldGFkYXRhCiAgICogQHBhcmFtIHshQmluZGluZ1BhcnR9IHBhcnQgQmluZGluZyBwYXJ0IG1ldGFkYXRhCiAgICogQHJldHVybiB7Kn0gVHJhbnNmb3JtZWQgdmFsdWUgdG8gc2V0CiAgICogQHByaXZhdGUKICAgKi8KICBmdW5jdGlvbiBjb21wdXRlQmluZGluZ1ZhbHVlKG5vZGUsIHZhbHVlLCBiaW5kaW5nLCBwYXJ0KSB7CiAgICBpZiAoYmluZGluZy5pc0NvbXBvdW5kKSB7CiAgICAgIGxldCBzdG9yYWdlID0gbm9kZS5fX2RhdGFDb21wb3VuZFN0b3JhZ2VbYmluZGluZy50YXJnZXRdOwogICAgICBzdG9yYWdlW3BhcnQuY29tcG91bmRJbmRleF0gPSB2YWx1ZTsKICAgICAgdmFsdWUgPSBzdG9yYWdlLmpvaW4oJycpOwogICAgfQogICAgaWYgKGJpbmRpbmcua2luZCAhPT0gJ2F0dHJpYnV0ZScpIHsKICAgICAgLy8gU29tZSBicm93c2VycyBzZXJpYWxpemUgYHVuZGVmaW5lZGAgdG8gYCJ1bmRlZmluZWQiYAogICAgICBpZiAoYmluZGluZy50YXJnZXQgPT09ICd0ZXh0Q29udGVudCcgfHwKICAgICAgICAgIChiaW5kaW5nLnRhcmdldCA9PT0gJ3ZhbHVlJyAmJgogICAgICAgICAgICAobm9kZS5sb2NhbE5hbWUgPT09ICdpbnB1dCcgfHwgbm9kZS5sb2NhbE5hbWUgPT09ICd0ZXh0YXJlYScpKSkgewogICAgICAgIHZhbHVlID0gdmFsdWUgPT0gdW5kZWZpbmVkID8gJycgOiB2YWx1ZTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHZhbHVlOwogIH0KCiAgLyoqCiAgICogUmV0dXJucyB0cnVlIGlmIGEgYmluZGluZydzIG1ldGFkYXRhIG1lZXRzIGFsbCB0aGUgcmVxdWlyZW1lbnRzIHRvIGFsbG93CiAgICogMi13YXkgYmluZGluZywgYW5kIHRoZXJlZm9yZSBhIGA8cHJvcGVydHk+LWNoYW5nZWRgIGV2ZW50IGxpc3RlbmVyIHNob3VsZCBiZQogICAqIGFkZGVkOgogICAqIC0gdXNlZCBjdXJseSBicmFjZXMKICAgKiAtIGlzIGEgcHJvcGVydHkgKG5vdCBhdHRyaWJ1dGUpIGJpbmRpbmcKICAgKiAtIGlzIG5vdCBhIHRleHRDb250ZW50IGJpbmRpbmcKICAgKiAtIGlzIG5vdCBjb21wb3VuZAogICAqCiAgICogQHBhcmFtIHshQmluZGluZ30gYmluZGluZyBCaW5kaW5nIG1ldGFkYXRhCiAgICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiAyLXdheSBsaXN0ZW5lciBzaG91bGQgYmUgYWRkZWQKICAgKiBAcHJpdmF0ZQogICAqLwogIGZ1bmN0aW9uIHNob3VsZEFkZExpc3RlbmVyKGJpbmRpbmcpIHsKICAgIHJldHVybiBCb29sZWFuKGJpbmRpbmcudGFyZ2V0KSAmJgogICAgICAgICAgIGJpbmRpbmcua2luZCAhPSAnYXR0cmlidXRlJyAmJgogICAgICAgICAgIGJpbmRpbmcua2luZCAhPSAndGV4dCcgJiYKICAgICAgICAgICAhYmluZGluZy5pc0NvbXBvdW5kICYmCiAgICAgICAgICAgYmluZGluZy5wYXJ0c1swXS5tb2RlID09PSAneyc7CiAgfQoKICAvKioKICAgKiBTZXR1cCBjb21wb3VuZCBiaW5kaW5nIHN0b3JhZ2Ugc3RydWN0dXJlcywgbm90aWZ5IGxpc3RlbmVycywgYW5kIGRhdGFIb3N0CiAgICogcmVmZXJlbmNlcyBvbnRvIHRoZSBib3VuZCBub2RlTGlzdC4KICAgKgogICAqIEBwYXJhbSB7IVByb3BlcnR5RWZmZWN0c1R5cGV9IGluc3QgSW5zdGFuY2UgdGhhdCBiYXMgYmVlbiBwcmV2aW91c2x5IGJvdW5kCiAgICogQHBhcmFtIHtUZW1wbGF0ZUluZm99IHRlbXBsYXRlSW5mbyBUZW1wbGF0ZSBtZXRhZGF0YQogICAqIEByZXR1cm4ge3ZvaWR9CiAgICogQHByaXZhdGUKICAgKi8KICBmdW5jdGlvbiBzZXR1cEJpbmRpbmdzKGluc3QsIHRlbXBsYXRlSW5mbykgewogICAgLy8gU2V0dXAgY29tcG91bmQgc3RvcmFnZSwgZGF0YUhvc3QsIGFuZCBub3RpZnkgbGlzdGVuZXJzCiAgICBsZXQge25vZGVMaXN0LCBub2RlSW5mb0xpc3R9ID0gdGVtcGxhdGVJbmZvOwogICAgaWYgKG5vZGVJbmZvTGlzdC5sZW5ndGgpIHsKICAgICAgZm9yIChsZXQgaT0wOyBpIDwgbm9kZUluZm9MaXN0Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgbGV0IGluZm8gPSBub2RlSW5mb0xpc3RbaV07CiAgICAgICAgbGV0IG5vZGUgPSBub2RlTGlzdFtpXTsKICAgICAgICBsZXQgYmluZGluZ3MgPSBpbmZvLmJpbmRpbmdzOwogICAgICAgIGlmIChiaW5kaW5ncykgewogICAgICAgICAgZm9yIChsZXQgaT0wOyBpPGJpbmRpbmdzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGxldCBiaW5kaW5nID0gYmluZGluZ3NbaV07CiAgICAgICAgICAgIHNldHVwQ29tcG91bmRTdG9yYWdlKG5vZGUsIGJpbmRpbmcpOwogICAgICAgICAgICBhZGROb3RpZnlMaXN0ZW5lcihub2RlLCBpbnN0LCBiaW5kaW5nKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgbm9kZS5fX2RhdGFIb3N0ID0gaW5zdDsKICAgICAgfQogICAgfQogIH0KCiAgLyoqCiAgICogSW5pdGlhbGl6ZXMgYF9fZGF0YUNvbXBvdW5kU3RvcmFnZWAgbG9jYWwgc3RvcmFnZSBvbiBhIGJvdW5kIG5vZGUgd2l0aAogICAqIGluaXRpYWwgbGl0ZXJhbCBkYXRhIGZvciBjb21wb3VuZCBiaW5kaW5ncywgYW5kIHNldHMgdGhlIGpvaW5lZAogICAqIGxpdGVyYWwgcGFydHMgdG8gdGhlIGJvdW5kIHByb3BlcnR5LgogICAqCiAgICogV2hlbiBjaGFuZ2VzIHRvIGNvbXBvdW5kIHBhcnRzIG9jY3VyLCB0aGV5IGFyZSBmaXJzdCBzZXQgaW50byB0aGUgY29tcG91bmQKICAgKiBzdG9yYWdlIGFycmF5IGZvciB0aGF0IHByb3BlcnR5LCBhbmQgdGhlbiB0aGUgYXJyYXkgaXMgam9pbmVkIHRvIHJlc3VsdCBpbgogICAqIHRoZSBmaW5hbCB2YWx1ZSBzZXQgdG8gdGhlIHByb3BlcnR5L2F0dHJpYnV0ZS4KICAgKgogICAqIEBwYXJhbSB7Tm9kZX0gbm9kZSBCb3VuZCBub2RlIHRvIGluaXRpYWxpemUKICAgKiBAcGFyYW0ge0JpbmRpbmd9IGJpbmRpbmcgQmluZGluZyBtZXRhZGF0YQogICAqIEByZXR1cm4ge3ZvaWR9CiAgICogQHByaXZhdGUKICAgKi8KICBmdW5jdGlvbiBzZXR1cENvbXBvdW5kU3RvcmFnZShub2RlLCBiaW5kaW5nKSB7CiAgICBpZiAoYmluZGluZy5pc0NvbXBvdW5kKSB7CiAgICAgIC8vIENyZWF0ZSBjb21wb3VuZCBzdG9yYWdlIG1hcAogICAgICBsZXQgc3RvcmFnZSA9IG5vZGUuX19kYXRhQ29tcG91bmRTdG9yYWdlIHx8CiAgICAgICAgKG5vZGUuX19kYXRhQ29tcG91bmRTdG9yYWdlID0ge30pOwogICAgICBsZXQgcGFydHMgPSBiaW5kaW5nLnBhcnRzOwogICAgICAvLyBDb3B5IGxpdGVyYWxzIGZyb20gcGFydHMgaW50byBzdG9yYWdlIGZvciB0aGlzIGJpbmRpbmcKICAgICAgbGV0IGxpdGVyYWxzID0gbmV3IEFycmF5KHBhcnRzLmxlbmd0aCk7CiAgICAgIGZvciAobGV0IGo9MDsgajxwYXJ0cy5sZW5ndGg7IGorKykgewogICAgICAgIGxpdGVyYWxzW2pdID0gcGFydHNbal0ubGl0ZXJhbDsKICAgICAgfQogICAgICBsZXQgdGFyZ2V0ID0gYmluZGluZy50YXJnZXQ7CiAgICAgIHN0b3JhZ2VbdGFyZ2V0XSA9IGxpdGVyYWxzOwogICAgICAvLyBDb25maWd1cmUgcHJvcGVydGllcyB3aXRoIHRoZWlyIGxpdGVyYWwgcGFydHMKICAgICAgaWYgKGJpbmRpbmcubGl0ZXJhbCAmJiBiaW5kaW5nLmtpbmQgPT0gJ3Byb3BlcnR5JykgewogICAgICAgIG5vZGVbdGFyZ2V0XSA9IGJpbmRpbmcubGl0ZXJhbDsKICAgICAgfQogICAgfQogIH0KCiAgLyoqCiAgICogQWRkcyBhIDItd2F5IGJpbmRpbmcgbm90aWZpY2F0aW9uIGV2ZW50IGxpc3RlbmVyIHRvIHRoZSBub2RlIHNwZWNpZmllZAogICAqCiAgICogQHBhcmFtIHtPYmplY3R9IG5vZGUgQ2hpbGQgZWxlbWVudCB0byBhZGQgbGlzdGVuZXIgdG8KICAgKiBAcGFyYW0geyFQcm9wZXJ0eUVmZmVjdHNUeXBlfSBpbnN0IEhvc3QgZWxlbWVudCBpbnN0YW5jZSB0byBoYW5kbGUgbm90aWZpY2F0aW9uIGV2ZW50CiAgICogQHBhcmFtIHtCaW5kaW5nfSBiaW5kaW5nIEJpbmRpbmcgbWV0YWRhdGEKICAgKiBAcmV0dXJuIHt2b2lkfQogICAqIEBwcml2YXRlCiAgICovCiAgZnVuY3Rpb24gYWRkTm90aWZ5TGlzdGVuZXIobm9kZSwgaW5zdCwgYmluZGluZykgewogICAgaWYgKGJpbmRpbmcubGlzdGVuZXJFdmVudCkgewogICAgICBsZXQgcGFydCA9IGJpbmRpbmcucGFydHNbMF07CiAgICAgIG5vZGUuYWRkRXZlbnRMaXN0ZW5lcihiaW5kaW5nLmxpc3RlbmVyRXZlbnQsIGZ1bmN0aW9uKGUpIHsKICAgICAgICBoYW5kbGVOb3RpZmljYXRpb24oZSwgaW5zdCwgYmluZGluZy50YXJnZXQsIHBhcnQuc291cmNlLCBwYXJ0Lm5lZ2F0ZSk7CiAgICAgIH0pOwogICAgfQogIH0KCiAgLy8gLS0gZm9yIG1ldGhvZC1iYXNlZCBlZmZlY3RzIChjb21wbGV4T2JzZXJ2ZXIgJiBjb21wdXRlZCkgLS0tLS0tLS0tLS0tLS0KCiAgLyoqCiAgICogQWRkcyBwcm9wZXJ0eSBlZmZlY3RzIGZvciBlYWNoIGFyZ3VtZW50IGluIHRoZSBtZXRob2Qgc2lnbmF0dXJlIChhbmQKICAgKiBvcHRpb25hbGx5LCBmb3IgdGhlIG1ldGhvZCBuYW1lIGlmIGBkeW5hbWljYCBpcyB0cnVlKSB0aGF0IGNhbGxzIHRoZQogICAqIHByb3ZpZGVkIGVmZmVjdCBmdW5jdGlvbi4KICAgKgogICAqIEBwYXJhbSB7RWxlbWVudCB8IE9iamVjdH0gbW9kZWwgUHJvdG90eXBlIG9yIGluc3RhbmNlCiAgICogQHBhcmFtIHshTWV0aG9kU2lnbmF0dXJlfSBzaWcgTWV0aG9kIHNpZ25hdHVyZSBtZXRhZGF0YQogICAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlIFR5cGUgb2YgcHJvcGVydHkgZWZmZWN0IHRvIGFkZAogICAqIEBwYXJhbSB7RnVuY3Rpb259IGVmZmVjdEZuIEZ1bmN0aW9uIHRvIHJ1biB3aGVuIGFyZ3VtZW50cyBjaGFuZ2UKICAgKiBAcGFyYW0geyo9fSBtZXRob2RJbmZvIEVmZmVjdC1zcGVjaWZpYyBpbmZvcm1hdGlvbiB0byBiZSBpbmNsdWRlZCBpbgogICAqICAgbWV0aG9kIGVmZmVjdCBtZXRhZGF0YQogICAqIEBwYXJhbSB7Ym9vbGVhbnxPYmplY3Q9fSBkeW5hbWljRm4gQm9vbGVhbiBvciBvYmplY3QgbWFwIGluZGljYXRpbmcgd2hldGhlcgogICAqICAgbWV0aG9kIG5hbWVzIHNob3VsZCBiZSBpbmNsdWRlZCBhcyBhIGRlcGVuZGVuY3kgdG8gdGhlIGVmZmVjdC4gTm90ZSwKICAgKiAgIGRlZmF1bHRzIHRvIHRydWUgaWYgdGhlIHNpZ25hdHVyZSBpcyBzdGF0aWMgKHNpZy5zdGF0aWMgaXMgdHJ1ZSkuCiAgICogQHJldHVybiB7dm9pZH0KICAgKiBAcHJpdmF0ZQogICAqLwogIGZ1bmN0aW9uIGNyZWF0ZU1ldGhvZEVmZmVjdChtb2RlbCwgc2lnLCB0eXBlLCBlZmZlY3RGbiwgbWV0aG9kSW5mbywgZHluYW1pY0ZuKSB7CiAgICBkeW5hbWljRm4gPSBzaWcuc3RhdGljIHx8IChkeW5hbWljRm4gJiYKICAgICAgKHR5cGVvZiBkeW5hbWljRm4gIT09ICdvYmplY3QnIHx8IGR5bmFtaWNGbltzaWcubWV0aG9kTmFtZV0pKTsKICAgIGxldCBpbmZvID0gewogICAgICBtZXRob2ROYW1lOiBzaWcubWV0aG9kTmFtZSwKICAgICAgYXJnczogc2lnLmFyZ3MsCiAgICAgIG1ldGhvZEluZm8sCiAgICAgIGR5bmFtaWNGbgogICAgfTsKICAgIGZvciAobGV0IGk9MCwgYXJnOyAoaTxzaWcuYXJncy5sZW5ndGgpICYmIChhcmc9c2lnLmFyZ3NbaV0pOyBpKyspIHsKICAgICAgaWYgKCFhcmcubGl0ZXJhbCkgewogICAgICAgIG1vZGVsLl9hZGRQcm9wZXJ0eUVmZmVjdChhcmcucm9vdFByb3BlcnR5LCB0eXBlLCB7CiAgICAgICAgICBmbjogZWZmZWN0Rm4sIGluZm86IGluZm8sIHRyaWdnZXI6IGFyZwogICAgICAgIH0pOwogICAgICB9CiAgICB9CiAgICBpZiAoZHluYW1pY0ZuKSB7CiAgICAgIG1vZGVsLl9hZGRQcm9wZXJ0eUVmZmVjdChzaWcubWV0aG9kTmFtZSwgdHlwZSwgewogICAgICAgIGZuOiBlZmZlY3RGbiwgaW5mbzogaW5mbwogICAgICB9KTsKICAgIH0KICB9CgogIC8qKgogICAqIENhbGxzIGEgbWV0aG9kIHdpdGggYXJndW1lbnRzIG1hcnNoYWxlZCBmcm9tIHByb3BlcnRpZXMgb24gdGhlIGluc3RhbmNlCiAgICogYmFzZWQgb24gdGhlIG1ldGhvZCBzaWduYXR1cmUgY29udGFpbmVkIGluIHRoZSBlZmZlY3QgbWV0YWRhdGEuCiAgICoKICAgKiBNdWx0aS1wcm9wZXJ0eSBvYnNlcnZlcnMsIGNvbXB1dGVkIHByb3BlcnRpZXMsIGFuZCBpbmxpbmUgY29tcHV0aW5nCiAgICogZnVuY3Rpb25zIGNhbGwgdGhpcyBmdW5jdGlvbiB0byBpbnZva2UgdGhlIG1ldGhvZCwgdGhlbiB1c2UgdGhlIHJldHVybgogICAqIHZhbHVlIGFjY29yZGluZ2x5LgogICAqCiAgICogQHBhcmFtIHshUHJvcGVydHlFZmZlY3RzVHlwZX0gaW5zdCBUaGUgaW5zdGFuY2UgdGhlIGVmZmVjdCB3aWxsIGJlIHJ1biBvbgogICAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eSBOYW1lIG9mIHByb3BlcnR5CiAgICogQHBhcmFtIHtPYmplY3R9IHByb3BzIEJhZyBvZiBjdXJyZW50IHByb3BlcnR5IGNoYW5nZXMKICAgKiBAcGFyYW0ge09iamVjdH0gb2xkUHJvcHMgQmFnIG9mIHByZXZpb3VzIHZhbHVlcyBmb3IgY2hhbmdlZCBwcm9wZXJ0aWVzCiAgICogQHBhcmFtIHs/fSBpbmZvIEVmZmVjdCBtZXRhZGF0YQogICAqIEByZXR1cm4geyp9IFJldHVybnMgdGhlIHJldHVybiB2YWx1ZSBmcm9tIHRoZSBtZXRob2QgaW52b2NhdGlvbgogICAqIEBwcml2YXRlCiAgICovCiAgZnVuY3Rpb24gcnVuTWV0aG9kRWZmZWN0KGluc3QsIHByb3BlcnR5LCBwcm9wcywgb2xkUHJvcHMsIGluZm8pIHsKICAgIC8vIEluc3RhbmNlcyBjYW4gb3B0aW9uYWxseSBoYXZlIGEgX21ldGhvZEhvc3Qgd2hpY2ggYWxsb3dzIHJlZGlyZWN0aW5nIHdoZXJlCiAgICAvLyB0byBmaW5kIG1ldGhvZHMuIEN1cnJlbnRseSB1c2VkIGJ5IGB0ZW1wbGF0aXplYC4KICAgIGxldCBjb250ZXh0ID0gaW5zdC5fbWV0aG9kSG9zdCB8fCBpbnN0OwogICAgbGV0IGZuID0gY29udGV4dFtpbmZvLm1ldGhvZE5hbWVdOwogICAgaWYgKGZuKSB7CiAgICAgIGxldCBhcmdzID0gaW5zdC5fbWFyc2hhbEFyZ3MoaW5mby5hcmdzLCBwcm9wZXJ0eSwgcHJvcHMpOwogICAgICByZXR1cm4gZm4uYXBwbHkoY29udGV4dCwgYXJncyk7CiAgICB9IGVsc2UgaWYgKCFpbmZvLmR5bmFtaWNGbikgewogICAgICBjb25zb2xlLndhcm4oJ21ldGhvZCBgJyArIGluZm8ubWV0aG9kTmFtZSArICdgIG5vdCBkZWZpbmVkJyk7CiAgICB9CiAgfQoKICBjb25zdCBlbXB0eUFycmF5ID0gW107CgogIC8vIFJlZ3VsYXIgZXhwcmVzc2lvbnMgdXNlZCBmb3IgYmluZGluZwogIGNvbnN0IElERU5UICA9ICcoPzonICsgJ1thLXpBLVpfJF1bXFx3LjokXFwtKl0qJyArICcpJzsKICBjb25zdCBOVU1CRVIgPSAnKD86JyArICdbLStdP1swLTldKlxcLj9bMC05XSsoPzpbZUVdWy0rXT9bMC05XSspPycgKyAnKSc7CiAgY29uc3QgU1FVT1RFX1NUUklORyA9ICcoPzonICsgJ1wnKD86W15cJ1xcXFxdfFxcXFwuKSpcJycgKyAnKSc7CiAgY29uc3QgRFFVT1RFX1NUUklORyA9ICcoPzonICsgJyIoPzpbXiJcXFxcXXxcXFxcLikqIicgKyAnKSc7CiAgY29uc3QgU1RSSU5HID0gJyg/OicgKyBTUVVPVEVfU1RSSU5HICsgJ3wnICsgRFFVT1RFX1NUUklORyArICcpJzsKICBjb25zdCBBUkdVTUVOVCA9ICcoPzooJyArIElERU5UICsgJ3wnICsgTlVNQkVSICsgJ3wnICsgIFNUUklORyArICcpXFxzKicgKyAnKSc7CiAgY29uc3QgQVJHVU1FTlRTID0gJyg/OicgKyBBUkdVTUVOVCArICcoPzosXFxzKicgKyBBUkdVTUVOVCArICcpKicgKyAnKSc7CiAgY29uc3QgQVJHVU1FTlRfTElTVCA9ICcoPzonICsgJ1xcKFxccyonICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKD86JyArIEFSR1VNRU5UUyArICc/JyArICcpJyArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcXClcXHMqJyArICcpJzsKICBjb25zdCBCSU5ESU5HID0gJygnICsgSURFTlQgKyAnXFxzKicgKyBBUkdVTUVOVF9MSVNUICsgJz8nICsgJyknOyAvLyBHcm91cCAzCiAgY29uc3QgT1BFTl9CUkFDS0VUID0gJyhcXFtcXFt8e3spJyArICdcXHMqJzsKICBjb25zdCBDTE9TRV9CUkFDS0VUID0gJyg/Ol1dfH19KSc7CiAgY29uc3QgTkVHQVRFID0gJyg/OighKVxccyopPyc7IC8vIEdyb3VwIDIKICBjb25zdCBFWFBSRVNTSU9OID0gT1BFTl9CUkFDS0VUICsgTkVHQVRFICsgQklORElORyArIENMT1NFX0JSQUNLRVQ7CiAgY29uc3QgYmluZGluZ1JlZ2V4ID0gbmV3IFJlZ0V4cChFWFBSRVNTSU9OLCAiZyIpOwoKICAvKioKICAgKiBDcmVhdGUgYSBzdHJpbmcgZnJvbSBiaW5kaW5nIHBhcnRzIG9mIGFsbCB0aGUgbGl0ZXJhbCBwYXJ0cwogICAqCiAgICogQHBhcmFtIHshQXJyYXk8QmluZGluZ1BhcnQ+fSBwYXJ0cyBBbGwgcGFydHMgdG8gc3RyaW5naWZ5CiAgICogQHJldHVybiB7c3RyaW5nfSBTdHJpbmcgbWFkZSBmcm9tIHRoZSBsaXRlcmFsIHBhcnRzCiAgICovCiAgZnVuY3Rpb24gbGl0ZXJhbEZyb21QYXJ0cyhwYXJ0cykgewogICAgbGV0IHMgPSAnJzsKICAgIGZvciAobGV0IGk9MDsgaTxwYXJ0cy5sZW5ndGg7IGkrKykgewogICAgICBsZXQgbGl0ZXJhbCA9IHBhcnRzW2ldLmxpdGVyYWw7CiAgICAgIHMgKz0gbGl0ZXJhbCB8fCAnJzsKICAgIH0KICAgIHJldHVybiBzOwogIH0KCiAgLyoqCiAgICogUGFyc2VzIGFuIGV4cHJlc3Npb24gc3RyaW5nIGZvciBhIG1ldGhvZCBzaWduYXR1cmUsIGFuZCByZXR1cm5zIGEgbWV0YWRhdGEKICAgKiBkZXNjcmliaW5nIHRoZSBtZXRob2QgaW4gdGVybXMgb2YgYG1ldGhvZE5hbWVgLCBgc3RhdGljYCAod2hldGhlciBhbGwgdGhlCiAgICogYXJndW1lbnRzIGFyZSBsaXRlcmFscyksIGFuZCBhbiBhcnJheSBvZiBgYXJnc2AKICAgKgogICAqIEBwYXJhbSB7c3RyaW5nfSBleHByZXNzaW9uIFRoZSBleHByZXNzaW9uIHRvIHBhcnNlCiAgICogQHJldHVybiB7P01ldGhvZFNpZ25hdHVyZX0gVGhlIG1ldGhvZCBtZXRhZGF0YSBvYmplY3QgaWYgYSBtZXRob2QgZXhwcmVzc2lvbiB3YXMKICAgKiAgIGZvdW5kLCBvdGhlcndpc2UgYHVuZGVmaW5lZGAKICAgKiBAcHJpdmF0ZQogICAqLwogIGZ1bmN0aW9uIHBhcnNlTWV0aG9kKGV4cHJlc3Npb24pIHsKICAgIC8vIHRyaWVzIHRvIG1hdGNoIHZhbGlkIGphdmFzY3JpcHQgcHJvcGVydHkgbmFtZXMKICAgIGxldCBtID0gZXhwcmVzc2lvbi5tYXRjaCgvKFteXHNdKz8pXCgoW1xzXFNdKilcKS8pOwogICAgaWYgKG0pIHsKICAgICAgbGV0IG1ldGhvZE5hbWUgPSBtWzFdOwogICAgICBsZXQgc2lnID0geyBtZXRob2ROYW1lLCBzdGF0aWM6IHRydWUsIGFyZ3M6IGVtcHR5QXJyYXkgfTsKICAgICAgaWYgKG1bMl0udHJpbSgpKSB7CiAgICAgICAgLy8gcmVwbGFjZSBlc2NhcGVkIGNvbW1hcyB3aXRoIGNvbW1hIGVudGl0eSwgc3BsaXQgb24gdW4tZXNjYXBlZCBjb21tYXMKICAgICAgICBsZXQgYXJncyA9IG1bMl0ucmVwbGFjZSgvXFwsL2csICcmY29tbWE7Jykuc3BsaXQoJywnKTsKICAgICAgICByZXR1cm4gcGFyc2VBcmdzKGFyZ3MsIHNpZyk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIHNpZzsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICAvKioKICAgKiBQYXJzZXMgYW4gYXJyYXkgb2YgYXJndW1lbnRzIGFuZCBzZXRzIHRoZSBgYXJnc2AgcHJvcGVydHkgb2YgdGhlIHN1cHBsaWVkCiAgICogc2lnbmF0dXJlIG1ldGFkYXRhIG9iamVjdC4gU2V0cyB0aGUgYHN0YXRpY2AgcHJvcGVydHkgdG8gZmFsc2UgaWYgYW55CiAgICogYXJndW1lbnQgaXMgYSBub24tbGl0ZXJhbC4KICAgKgogICAqIEBwYXJhbSB7IUFycmF5PHN0cmluZz59IGFyZ0xpc3QgQXJyYXkgb2YgYXJndW1lbnQgbmFtZXMKICAgKiBAcGFyYW0geyFNZXRob2RTaWduYXR1cmV9IHNpZyBNZXRob2Qgc2lnbmF0dXJlIG1ldGFkYXRhIG9iamVjdAogICAqIEByZXR1cm4geyFNZXRob2RTaWduYXR1cmV9IFRoZSB1cGRhdGVkIHNpZ25hdHVyZSBtZXRhZGF0YSBvYmplY3QKICAgKiBAcHJpdmF0ZQogICAqLwogIGZ1bmN0aW9uIHBhcnNlQXJncyhhcmdMaXN0LCBzaWcpIHsKICAgIHNpZy5hcmdzID0gYXJnTGlzdC5tYXAoZnVuY3Rpb24ocmF3QXJnKSB7CiAgICAgIGxldCBhcmcgPSBwYXJzZUFyZyhyYXdBcmcpOwogICAgICBpZiAoIWFyZy5saXRlcmFsKSB7CiAgICAgICAgc2lnLnN0YXRpYyA9IGZhbHNlOwogICAgICB9CiAgICAgIHJldHVybiBhcmc7CiAgICB9LCB0aGlzKTsKICAgIHJldHVybiBzaWc7CiAgfQoKICAvKioKICAgKiBQYXJzZXMgYW4gaW5kaXZpZHVhbCBhcmd1bWVudCwgYW5kIHJldHVybnMgYW4gYXJndW1lbnQgbWV0YWRhdGEgb2JqZWN0CiAgICogd2l0aCB0aGUgZm9sbG93aW5nIGZpZWxkczoKICAgKgogICAqICAgewogICAqICAgICB2YWx1ZTogJ3Byb3AnLCAgICAgICAgLy8gcHJvcGVydHkvcGF0aCBvciBsaXRlcmFsIHZhbHVlCiAgICogICAgIGxpdGVyYWw6IGZhbHNlLCAgICAgICAvLyB3aGV0aGVyIGFyZ3VtZW50IGlzIGEgbGl0ZXJhbAogICAqICAgICBzdHJ1Y3R1cmVkOiBmYWxzZSwgICAgLy8gd2hldGhlciB0aGUgcHJvcGVydHkgaXMgYSBwYXRoCiAgICogICAgIHJvb3RQcm9wZXJ0eTogJ3Byb3AnLCAvLyB0aGUgcm9vdCBwcm9wZXJ0eSBvZiB0aGUgcGF0aAogICAqICAgICB3aWxkY2FyZDogZmFsc2UgICAgICAgLy8gd2hldGhlciB0aGUgYXJndW1lbnQgd2FzIGEgd2lsZGNhcmQgJy4qJyBwYXRoCiAgICogICB9CiAgICoKICAgKiBAcGFyYW0ge3N0cmluZ30gcmF3QXJnIFRoZSBzdHJpbmcgdmFsdWUgb2YgdGhlIGFyZ3VtZW50CiAgICogQHJldHVybiB7IU1ldGhvZEFyZ30gQXJndW1lbnQgbWV0YWRhdGEgb2JqZWN0CiAgICogQHByaXZhdGUKICAgKi8KICBmdW5jdGlvbiBwYXJzZUFyZyhyYXdBcmcpIHsKICAgIC8vIGNsZWFuIHVwIHdoaXRlc3BhY2UKICAgIGxldCBhcmcgPSByYXdBcmcudHJpbSgpCiAgICAgIC8vIHJlcGxhY2UgY29tbWEgZW50aXR5IHdpdGggY29tbWEKICAgICAgLnJlcGxhY2UoLyZjb21tYTsvZywgJywnKQogICAgICAvLyByZXBhaXIgZXh0cmEgZXNjYXBlIHNlcXVlbmNlczsgbm90ZSBvbmx5IGNvbW1hcyBzdHJpY3RseSBuZWVkCiAgICAgIC8vIGVzY2FwaW5nLCBidXQgd2UgYWxsb3cgYW55IG90aGVyIGNoYXIgdG8gYmUgZXNjYXBlZCBzaW5jZSBpdHMKICAgICAgLy8gbGlrZWx5IHVzZXJzIHdpbGwgZG8gdGhpcwogICAgICAucmVwbGFjZSgvXFwoLikvZywgJ1wkMScpCiAgICAgIDsKICAgIC8vIGJhc2ljIGFyZ3VtZW50IGRlc2NyaXB0b3IKICAgIGxldCBhID0gewogICAgICBuYW1lOiBhcmcsCiAgICAgIHZhbHVlOiAnJywKICAgICAgbGl0ZXJhbDogZmFsc2UKICAgIH07CiAgICAvLyBkZXRlY3QgbGl0ZXJhbCB2YWx1ZSAobXVzdCBiZSBTdHJpbmcgb3IgTnVtYmVyKQogICAgbGV0IGZjID0gYXJnWzBdOwogICAgaWYgKGZjID09PSAnLScpIHsKICAgICAgZmMgPSBhcmdbMV07CiAgICB9CiAgICBpZiAoZmMgPj0gJzAnICYmIGZjIDw9ICc5JykgewogICAgICBmYyA9ICcjJzsKICAgIH0KICAgIHN3aXRjaChmYykgewogICAgICBjYXNlICInIjoKICAgICAgY2FzZSAnIic6CiAgICAgICAgYS52YWx1ZSA9IGFyZy5zbGljZSgxLCAtMSk7CiAgICAgICAgYS5saXRlcmFsID0gdHJ1ZTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAnIyc6CiAgICAgICAgYS52YWx1ZSA9IE51bWJlcihhcmcpOwogICAgICAgIGEubGl0ZXJhbCA9IHRydWU7CiAgICAgICAgYnJlYWs7CiAgICB9CiAgICAvLyBpZiBub3QgbGl0ZXJhbCwgbG9vayBmb3Igc3RydWN0dXJlZCBwYXRoCiAgICBpZiAoIWEubGl0ZXJhbCkgewogICAgICBhLnJvb3RQcm9wZXJ0eSA9IFBvbHltZXIuUGF0aC5yb290KGFyZyk7CiAgICAgIC8vIGRldGVjdCBzdHJ1Y3R1cmVkIHBhdGggKGhhcyBkb3RzKQogICAgICBhLnN0cnVjdHVyZWQgPSBQb2x5bWVyLlBhdGguaXNQYXRoKGFyZyk7CiAgICAgIGlmIChhLnN0cnVjdHVyZWQpIHsKICAgICAgICBhLndpbGRjYXJkID0gKGFyZy5zbGljZSgtMikgPT0gJy4qJyk7CiAgICAgICAgaWYgKGEud2lsZGNhcmQpIHsKICAgICAgICAgIGEubmFtZSA9IGFyZy5zbGljZSgwLCAtMik7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICByZXR1cm4gYTsKICB9CgogIC8vIGRhdGEgYXBpCgogIC8qKgogICAqIFNlbmRzIGFycmF5IHNwbGljZSBub3RpZmljYXRpb25zIChgLnNwbGljZXNgIGFuZCBgLmxlbmd0aGApCiAgICoKICAgKiBOb3RlOiB0aGlzIGltcGxlbWVudGF0aW9uIG9ubHkgYWNjZXB0cyBub3JtYWxpemVkIHBhdGhzCiAgICoKICAgKiBAcGFyYW0geyFQcm9wZXJ0eUVmZmVjdHNUeXBlfSBpbnN0IEluc3RhbmNlIHRvIHNlbmQgbm90aWZpY2F0aW9ucyB0bwogICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0aGUgbXV0YXRpb25zIG9jY3VycmVkIG9uCiAgICogQHBhcmFtIHtzdHJpbmd9IHBhdGggVGhlIHBhdGggdG8gdGhlIGFycmF5IHRoYXQgd2FzIG11dGF0ZWQKICAgKiBAcGFyYW0ge0FycmF5fSBzcGxpY2VzIEFycmF5IG9mIHNwbGljZSByZWNvcmRzCiAgICogQHJldHVybiB7dm9pZH0KICAgKiBAcHJpdmF0ZQogICAqLwogIGZ1bmN0aW9uIG5vdGlmeVNwbGljZXMoaW5zdCwgYXJyYXksIHBhdGgsIHNwbGljZXMpIHsKICAgIGxldCBzcGxpY2VzUGF0aCA9IHBhdGggKyAnLnNwbGljZXMnOwogICAgaW5zdC5ub3RpZnlQYXRoKHNwbGljZXNQYXRoLCB7IGluZGV4U3BsaWNlczogc3BsaWNlcyB9KTsKICAgIGluc3Qubm90aWZ5UGF0aChwYXRoICsgJy5sZW5ndGgnLCBhcnJheS5sZW5ndGgpOwogICAgLy8gTnVsbCBoZXJlIHRvIGFsbG93IHBvdGVudGlhbGx5IGxhcmdlIHNwbGljZSByZWNvcmRzIHRvIGJlIEdDJ2VkLgogICAgaW5zdC5fX2RhdGFbc3BsaWNlc1BhdGhdID0ge2luZGV4U3BsaWNlczogbnVsbH07CiAgfQoKICAvKioKICAgKiBDcmVhdGVzIGEgc3BsaWNlIHJlY29yZCBhbmQgc2VuZHMgYW4gYXJyYXkgc3BsaWNlIG5vdGlmaWNhdGlvbiBmb3IKICAgKiB0aGUgZGVzY3JpYmVkIG11dGF0aW9uCiAgICoKICAgKiBOb3RlOiB0aGlzIGltcGxlbWVudGF0aW9uIG9ubHkgYWNjZXB0cyBub3JtYWxpemVkIHBhdGhzCiAgICoKICAgKiBAcGFyYW0geyFQcm9wZXJ0eUVmZmVjdHNUeXBlfSBpbnN0IEluc3RhbmNlIHRvIHNlbmQgbm90aWZpY2F0aW9ucyB0bwogICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0aGUgbXV0YXRpb25zIG9jY3VycmVkIG9uCiAgICogQHBhcmFtIHtzdHJpbmd9IHBhdGggVGhlIHBhdGggdG8gdGhlIGFycmF5IHRoYXQgd2FzIG11dGF0ZWQKICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXggSW5kZXggYXQgd2hpY2ggdGhlIGFycmF5IG11dGF0aW9uIG9jY3VycmVkCiAgICogQHBhcmFtIHtudW1iZXJ9IGFkZGVkQ291bnQgTnVtYmVyIG9mIGFkZGVkIGl0ZW1zCiAgICogQHBhcmFtIHtBcnJheX0gcmVtb3ZlZCBBcnJheSBvZiByZW1vdmVkIGl0ZW1zCiAgICogQHJldHVybiB7dm9pZH0KICAgKiBAcHJpdmF0ZQogICAqLwogIGZ1bmN0aW9uIG5vdGlmeVNwbGljZShpbnN0LCBhcnJheSwgcGF0aCwgaW5kZXgsIGFkZGVkQ291bnQsIHJlbW92ZWQpIHsKICAgIG5vdGlmeVNwbGljZXMoaW5zdCwgYXJyYXksIHBhdGgsIFt7CiAgICAgIGluZGV4OiBpbmRleCwKICAgICAgYWRkZWRDb3VudDogYWRkZWRDb3VudCwKICAgICAgcmVtb3ZlZDogcmVtb3ZlZCwKICAgICAgb2JqZWN0OiBhcnJheSwKICAgICAgdHlwZTogJ3NwbGljZScKICAgIH1dKTsKICB9CgogIC8qKgogICAqIFJldHVybnMgYW4gdXBwZXItY2FzZWQgdmVyc2lvbiBvZiB0aGUgc3RyaW5nLgogICAqCiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgU3RyaW5nIHRvIHVwcGVyY2FzZQogICAqIEByZXR1cm4ge3N0cmluZ30gVXBwZXJjYXNlZCBzdHJpbmcKICAgKiBAcHJpdmF0ZQogICAqLwogIGZ1bmN0aW9uIHVwcGVyKG5hbWUpIHsKICAgIHJldHVybiBuYW1lWzBdLnRvVXBwZXJDYXNlKCkgKyBuYW1lLnN1YnN0cmluZygxKTsKICB9CgogIC8qKgogICAqIEVsZW1lbnQgY2xhc3MgbWl4aW4gdGhhdCBwcm92aWRlcyBtZXRhLXByb2dyYW1taW5nIGZvciBQb2x5bWVyJ3MgdGVtcGxhdGUKICAgKiBiaW5kaW5nIGFuZCBkYXRhIG9ic2VydmF0aW9uIChjb2xsZWN0aXZlbHksICJwcm9wZXJ0eSBlZmZlY3RzIikgc3lzdGVtLgogICAqCiAgICogVGhpcyBtaXhpbiB1c2VzIHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcga2V5IHN0YXRpYyBtZXRob2RzIGZvciBhZGRpbmcKICAgKiBwcm9wZXJ0eSBlZmZlY3RzIHRvIGFuIGVsZW1lbnQgY2xhc3M6CiAgICogLSBgYWRkUHJvcGVydHlFZmZlY3RgCiAgICogLSBgY3JlYXRlUHJvcGVydHlPYnNlcnZlcmAKICAgKiAtIGBjcmVhdGVNZXRob2RPYnNlcnZlcmAKICAgKiAtIGBjcmVhdGVOb3RpZnlpbmdQcm9wZXJ0eWAKICAgKiAtIGBjcmVhdGVSZWFkT25seVByb3BlcnR5YAogICAqIC0gYGNyZWF0ZVJlZmxlY3RlZFByb3BlcnR5YAogICAqIC0gYGNyZWF0ZUNvbXB1dGVkUHJvcGVydHlgCiAgICogLSBgYmluZFRlbXBsYXRlYAogICAqCiAgICogRWFjaCBtZXRob2QgY3JlYXRlcyBvbmUgb3IgbW9yZSBwcm9wZXJ0eSBhY2Nlc3NvcnMsIGFsb25nIHdpdGggbWV0YWRhdGEKICAgKiB1c2VkIGJ5IHRoaXMgbWl4aW4ncyBpbXBsZW1lbnRhdGlvbiBvZiBgX3Byb3BlcnRpZXNDaGFuZ2VkYCB0byBwZXJmb3JtCiAgICogdGhlIHByb3BlcnR5IGVmZmVjdHMuCiAgICoKICAgKiBVbmRlcnNjb3JlZCB2ZXJzaW9ucyBvZiB0aGUgYWJvdmUgbWV0aG9kcyBhbHNvIGV4aXN0IG9uIHRoZSBlbGVtZW50CiAgICogcHJvdG90eXBlIGZvciBhZGRpbmcgcHJvcGVydHkgZWZmZWN0cyBvbiBpbnN0YW5jZXMgYXQgcnVudGltZS4KICAgKgogICAqIE5vdGUgdGhhdCB0aGlzIG1peGluIG92ZXJyaWRlcyBzZXZlcmFsIGBQcm9wZXJ0eUFjY2Vzc29yc2AgbWV0aG9kcywgaW4KICAgKiBtYW55IGNhc2VzIHRvIG1haW50YWluIGd1YXJhbnRlZXMgcHJvdmlkZWQgYnkgdGhlIFBvbHltZXIgMS54IGZlYXR1cmVzOwogICAqIG5vdGFibHkgaXQgY2hhbmdlcyBwcm9wZXJ0eSBhY2Nlc3NvcnMgdG8gYmUgc3luY2hyb25vdXMgYnkgZGVmYXVsdAogICAqIHdoZXJlYXMgdGhlIGRlZmF1bHQgd2hlbiB1c2luZyBgUHJvcGVydHlBY2Nlc3NvcnNgIHN0YW5kYWxvbmUgaXMgdG8gYmUKICAgKiBhc3luYyBieSBkZWZhdWx0LgogICAqCiAgICogQG1peGluRnVuY3Rpb24KICAgKiBAcG9seW1lcgogICAqIEBhcHBsaWVzTWl4aW4gUG9seW1lci5UZW1wbGF0ZVN0YW1wCiAgICogQGFwcGxpZXNNaXhpbiBQb2x5bWVyLlByb3BlcnR5QWNjZXNzb3JzCiAgICogQG1lbWJlcm9mIFBvbHltZXIKICAgKiBAc3VtbWFyeSBFbGVtZW50IGNsYXNzIG1peGluIHRoYXQgcHJvdmlkZXMgbWV0YS1wcm9ncmFtbWluZyBmb3IgUG9seW1lcidzCiAgICogdGVtcGxhdGUgYmluZGluZyBhbmQgZGF0YSBvYnNlcnZhdGlvbiBzeXN0ZW0uCiAgICovCiAgUG9seW1lci5Qcm9wZXJ0eUVmZmVjdHMgPSBQb2x5bWVyLmRlZHVwaW5nTWl4aW4oc3VwZXJDbGFzcyA9PiB7CgogICAgLyoqCiAgICAgKiBAY29uc3RydWN0b3IKICAgICAqIEBleHRlbmRzIHtzdXBlckNsYXNzfQogICAgICogQGltcGxlbWVudHMge1BvbHltZXJfUHJvcGVydHlBY2Nlc3NvcnN9CiAgICAgKiBAaW1wbGVtZW50cyB7UG9seW1lcl9UZW1wbGF0ZVN0YW1wfQogICAgICogQHVucmVzdHJpY3RlZAogICAgICogQHByaXZhdGUKICAgICAqLwogICAgY29uc3QgcHJvcGVydHlFZmZlY3RzQmFzZSA9IFBvbHltZXIuVGVtcGxhdGVTdGFtcChQb2x5bWVyLlByb3BlcnR5QWNjZXNzb3JzKHN1cGVyQ2xhc3MpKTsKCiAgICAvKioKICAgICAqIEBwb2x5bWVyCiAgICAgKiBAbWl4aW5DbGFzcwogICAgICogQGltcGxlbWVudHMge1BvbHltZXJfUHJvcGVydHlFZmZlY3RzfQogICAgICogQGV4dGVuZHMge3Byb3BlcnR5RWZmZWN0c0Jhc2V9CiAgICAgKiBAdW5yZXN0cmljdGVkCiAgICAgKi8KICAgIGNsYXNzIFByb3BlcnR5RWZmZWN0cyBleHRlbmRzIHByb3BlcnR5RWZmZWN0c0Jhc2UgewoKICAgICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgc3VwZXIoKTsKICAgICAgICAvKiogQHR5cGUge2Jvb2xlYW59ICovCiAgICAgICAgLy8gVXNlZCB0byBpZGVudGlmeSB1c2VycyBvZiB0aGlzIG1peGluLCBhbGEgaW5zdGFuY2VvZgogICAgICAgIHRoaXMuX19pc1Byb3BlcnR5RWZmZWN0c0NsaWVudCA9IHRydWU7CiAgICAgICAgLyoqIEB0eXBlIHtudW1iZXJ9ICovCiAgICAgICAgLy8gTk9URTogdXNlZCB0byB0cmFjayByZS1lbnRyYW50IGNhbGxzIHRvIGBfZmx1c2hQcm9wZXJ0aWVzYAogICAgICAgIC8vIHBhdGggY2hhbmdlcyBkaXJ0eSBjaGVjayBhZ2FpbnN0IGBfX2RhdGFUZW1wYCBvbmx5IGR1cmluZyBvbmUgInR1cm4iCiAgICAgICAgLy8gYW5kIGFyZSBjbGVhcmVkIHdoZW4gYF9fZGF0YUNvdW50ZXJgIHJldHVybnMgdG8gMC4KICAgICAgICB0aGlzLl9fZGF0YUNvdW50ZXIgPSAwOwogICAgICAgIC8qKiBAdHlwZSB7Ym9vbGVhbn0gKi8KICAgICAgICB0aGlzLl9fZGF0YUNsaWVudHNSZWFkeTsKICAgICAgICAvKiogQHR5cGUge0FycmF5fSAqLwogICAgICAgIHRoaXMuX19kYXRhUGVuZGluZ0NsaWVudHM7CiAgICAgICAgLyoqIEB0eXBlIHtPYmplY3R9ICovCiAgICAgICAgdGhpcy5fX2RhdGFUb05vdGlmeTsKICAgICAgICAvKiogQHR5cGUge09iamVjdH0gKi8KICAgICAgICB0aGlzLl9fZGF0YUxpbmtlZFBhdGhzOwogICAgICAgIC8qKiBAdHlwZSB7Ym9vbGVhbn0gKi8KICAgICAgICB0aGlzLl9fZGF0YUhhc1BhdGhzOwogICAgICAgIC8qKiBAdHlwZSB7T2JqZWN0fSAqLwogICAgICAgIHRoaXMuX19kYXRhQ29tcG91bmRTdG9yYWdlOwogICAgICAgIC8qKiBAdHlwZSB7UG9seW1lcl9Qcm9wZXJ0eUVmZmVjdHN9ICovCiAgICAgICAgdGhpcy5fX2RhdGFIb3N0OwogICAgICAgIC8qKiBAdHlwZSB7IU9iamVjdH0gKi8KICAgICAgICB0aGlzLl9fZGF0YVRlbXA7CiAgICAgICAgLyoqIEB0eXBlIHtib29sZWFufSAqLwogICAgICAgIHRoaXMuX19kYXRhQ2xpZW50c0luaXRpYWxpemVkOwogICAgICAgIC8qKiBAdHlwZSB7IU9iamVjdH0gKi8KICAgICAgICB0aGlzLl9fZGF0YTsKICAgICAgICAvKiogQHR5cGUgeyFPYmplY3R9ICovCiAgICAgICAgdGhpcy5fX2RhdGFQZW5kaW5nOwogICAgICAgIC8qKiBAdHlwZSB7IU9iamVjdH0gKi8KICAgICAgICB0aGlzLl9fZGF0YU9sZDsKICAgICAgICAvKiogQHR5cGUge09iamVjdH0gKi8KICAgICAgICB0aGlzLl9fY29tcHV0ZUVmZmVjdHM7CiAgICAgICAgLyoqIEB0eXBlIHtPYmplY3R9ICovCiAgICAgICAgdGhpcy5fX3JlZmxlY3RFZmZlY3RzOwogICAgICAgIC8qKiBAdHlwZSB7T2JqZWN0fSAqLwogICAgICAgIHRoaXMuX19ub3RpZnlFZmZlY3RzOwogICAgICAgIC8qKiBAdHlwZSB7T2JqZWN0fSAqLwogICAgICAgIHRoaXMuX19wcm9wYWdhdGVFZmZlY3RzOwogICAgICAgIC8qKiBAdHlwZSB7T2JqZWN0fSAqLwogICAgICAgIHRoaXMuX19vYnNlcnZlRWZmZWN0czsKICAgICAgICAvKiogQHR5cGUge09iamVjdH0gKi8KICAgICAgICB0aGlzLl9fcmVhZE9ubHk7CiAgICAgICAgLyoqIEB0eXBlIHshVGVtcGxhdGVJbmZvfSAqLwogICAgICAgIHRoaXMuX190ZW1wbGF0ZUluZm87CiAgICAgIH0KCiAgICAgIGdldCBQUk9QRVJUWV9FRkZFQ1RfVFlQRVMoKSB7CiAgICAgICAgcmV0dXJuIFRZUEVTOwogICAgICB9CgogICAgICAvKioKICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICovCiAgICAgIF9pbml0aWFsaXplUHJvcGVydGllcygpIHsKICAgICAgICBzdXBlci5faW5pdGlhbGl6ZVByb3BlcnRpZXMoKTsKICAgICAgICBob3N0U3RhY2sucmVnaXN0ZXJIb3N0KHRoaXMpOwogICAgICAgIHRoaXMuX19kYXRhQ2xpZW50c1JlYWR5ID0gZmFsc2U7CiAgICAgICAgdGhpcy5fX2RhdGFQZW5kaW5nQ2xpZW50cyA9IG51bGw7CiAgICAgICAgdGhpcy5fX2RhdGFUb05vdGlmeSA9IG51bGw7CiAgICAgICAgdGhpcy5fX2RhdGFMaW5rZWRQYXRocyA9IG51bGw7CiAgICAgICAgdGhpcy5fX2RhdGFIYXNQYXRocyA9IGZhbHNlOwogICAgICAgIC8vIE1heSBiZSBzZXQgb24gaW5zdGFuY2UgcHJpb3IgdG8gdXBncmFkZQogICAgICAgIHRoaXMuX19kYXRhQ29tcG91bmRTdG9yYWdlID0gdGhpcy5fX2RhdGFDb21wb3VuZFN0b3JhZ2UgfHwgbnVsbDsKICAgICAgICB0aGlzLl9fZGF0YUhvc3QgPSB0aGlzLl9fZGF0YUhvc3QgfHwgbnVsbDsKICAgICAgICB0aGlzLl9fZGF0YVRlbXAgPSB7fTsKICAgICAgICB0aGlzLl9fZGF0YUNsaWVudHNJbml0aWFsaXplZCA9IGZhbHNlOwogICAgICB9CgogICAgICAvKioKICAgICAgICogT3ZlcnJpZGVzIGBQb2x5bWVyLlByb3BlcnR5QWNjZXNzb3JzYCBpbXBsZW1lbnRhdGlvbiB0byBwcm92aWRlIGEKICAgICAgICogbW9yZSBlZmZpY2llbnQgaW1wbGVtZW50YXRpb24gb2YgaW5pdGlhbGl6aW5nIHByb3BlcnRpZXMgZnJvbQogICAgICAgKiB0aGUgcHJvdG90eXBlIG9uIHRoZSBpbnN0YW5jZS4KICAgICAgICoKICAgICAgICogQG92ZXJyaWRlCiAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wcyBQcm9wZXJ0aWVzIHRvIGluaXRpYWxpemUgb24gdGhlIHByb3RvdHlwZQogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKi8KICAgICAgX2luaXRpYWxpemVQcm90b1Byb3BlcnRpZXMocHJvcHMpIHsKICAgICAgICB0aGlzLl9fZGF0YSA9IE9iamVjdC5jcmVhdGUocHJvcHMpOwogICAgICAgIHRoaXMuX19kYXRhUGVuZGluZyA9IE9iamVjdC5jcmVhdGUocHJvcHMpOwogICAgICAgIHRoaXMuX19kYXRhT2xkID0ge307CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBPdmVycmlkZXMgYFBvbHltZXIuUHJvcGVydHlBY2Nlc3NvcnNgIGltcGxlbWVudGF0aW9uIHRvIGF2b2lkIHNldHRpbmcKICAgICAgICogYF9zZXRQcm9wZXJ0eWAncyBgc2hvdWxkTm90aWZ5OiB0cnVlYC4KICAgICAgICoKICAgICAgICogQG92ZXJyaWRlCiAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wcyBQcm9wZXJ0aWVzIHRvIGluaXRpYWxpemUgb24gdGhlIGluc3RhbmNlCiAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAqLwogICAgICBfaW5pdGlhbGl6ZUluc3RhbmNlUHJvcGVydGllcyhwcm9wcykgewogICAgICAgIGxldCByZWFkT25seSA9IHRoaXNbVFlQRVMuUkVBRF9PTkxZXTsKICAgICAgICBmb3IgKGxldCBwcm9wIGluIHByb3BzKSB7CiAgICAgICAgICBpZiAoIXJlYWRPbmx5IHx8ICFyZWFkT25seVtwcm9wXSkgewogICAgICAgICAgICB0aGlzLl9fZGF0YVBlbmRpbmcgPSB0aGlzLl9fZGF0YVBlbmRpbmcgfHwge307CiAgICAgICAgICAgIHRoaXMuX19kYXRhT2xkID0gdGhpcy5fX2RhdGFPbGQgfHwge307CiAgICAgICAgICAgIHRoaXMuX19kYXRhW3Byb3BdID0gdGhpcy5fX2RhdGFQZW5kaW5nW3Byb3BdID0gcHJvcHNbcHJvcF07CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CgogICAgICAvLyBQcm90b3R5cGUgc2V0dXAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgICAgLyoqCiAgICAgICAqIEVxdWl2YWxlbnQgdG8gc3RhdGljIGBhZGRQcm9wZXJ0eUVmZmVjdGAgQVBJIGJ1dCBjYW4gYmUgY2FsbGVkIG9uCiAgICAgICAqIGFuIGluc3RhbmNlIHRvIGFkZCBlZmZlY3RzIGF0IHJ1bnRpbWUuICBTZWUgdGhhdCBtZXRob2QgZm9yCiAgICAgICAqIGZ1bGwgQVBJIGRvY3MuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eSBQcm9wZXJ0eSB0aGF0IHNob3VsZCB0cmlnZ2VyIHRoZSBlZmZlY3QKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgRWZmZWN0IHR5cGUsIGZyb20gdGhpcy5QUk9QRVJUWV9FRkZFQ1RfVFlQRVMKICAgICAgICogQHBhcmFtIHtPYmplY3Q9fSBlZmZlY3QgRWZmZWN0IG1ldGFkYXRhIG9iamVjdAogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKiBAcHJvdGVjdGVkCiAgICAgICAqLwogICAgICBfYWRkUHJvcGVydHlFZmZlY3QocHJvcGVydHksIHR5cGUsIGVmZmVjdCkgewogICAgICAgIHRoaXMuX2NyZWF0ZVByb3BlcnR5QWNjZXNzb3IocHJvcGVydHksIHR5cGUgPT0gVFlQRVMuUkVBRF9PTkxZKTsKICAgICAgICAvLyBlZmZlY3RzIGFyZSBhY2N1bXVsYXRlZCBpbnRvIGFycmF5cyBwZXIgcHJvcGVydHkgYmFzZWQgb24gdHlwZQogICAgICAgIGxldCBlZmZlY3RzID0gZW5zdXJlT3duRWZmZWN0TWFwKHRoaXMsIHR5cGUpW3Byb3BlcnR5XTsKICAgICAgICBpZiAoIWVmZmVjdHMpIHsKICAgICAgICAgIGVmZmVjdHMgPSB0aGlzW3R5cGVdW3Byb3BlcnR5XSA9IFtdOwogICAgICAgIH0KICAgICAgICBlZmZlY3RzLnB1c2goZWZmZWN0KTsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIFJlbW92ZXMgdGhlIGdpdmVuIHByb3BlcnR5IGVmZmVjdC4KICAgICAgICoKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IFByb3BlcnR5IHRoZSBlZmZlY3Qgd2FzIGFzc29jaWF0ZWQgd2l0aAogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gdHlwZSBFZmZlY3QgdHlwZSwgZnJvbSB0aGlzLlBST1BFUlRZX0VGRkVDVF9UWVBFUwogICAgICAgKiBAcGFyYW0ge09iamVjdD19IGVmZmVjdCBFZmZlY3QgbWV0YWRhdGEgb2JqZWN0IHRvIHJlbW92ZQogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKi8KICAgICAgX3JlbW92ZVByb3BlcnR5RWZmZWN0KHByb3BlcnR5LCB0eXBlLCBlZmZlY3QpIHsKICAgICAgICBsZXQgZWZmZWN0cyA9IGVuc3VyZU93bkVmZmVjdE1hcCh0aGlzLCB0eXBlKVtwcm9wZXJ0eV07CiAgICAgICAgbGV0IGlkeCA9IGVmZmVjdHMuaW5kZXhPZihlZmZlY3QpOwogICAgICAgIGlmIChpZHggPj0gMCkgewogICAgICAgICAgZWZmZWN0cy5zcGxpY2UoaWR4LCAxKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIGN1cnJlbnQgcHJvdG90eXBlL2luc3RhbmNlIGhhcyBhIHByb3BlcnR5IGVmZmVjdAogICAgICAgKiBvZiBhIGNlcnRhaW4gdHlwZS4KICAgICAgICoKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IFByb3BlcnR5IG5hbWUKICAgICAgICogQHBhcmFtIHtzdHJpbmc9fSB0eXBlIEVmZmVjdCB0eXBlLCBmcm9tIHRoaXMuUFJPUEVSVFlfRUZGRUNUX1RZUEVTCiAgICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhlIHByb3RvdHlwZS9pbnN0YW5jZSBoYXMgYW4gZWZmZWN0IG9mIHRoaXMgdHlwZQogICAgICAgKiBAcHJvdGVjdGVkCiAgICAgICAqLwogICAgICBfaGFzUHJvcGVydHlFZmZlY3QocHJvcGVydHksIHR5cGUpIHsKICAgICAgICBsZXQgZWZmZWN0cyA9IHRoaXNbdHlwZV07CiAgICAgICAgcmV0dXJuIEJvb2xlYW4oZWZmZWN0cyAmJiBlZmZlY3RzW3Byb3BlcnR5XSk7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIGN1cnJlbnQgcHJvdG90eXBlL2luc3RhbmNlIGhhcyBhICJyZWFkIG9ubHkiCiAgICAgICAqIGFjY2Vzc29yIGZvciB0aGUgZ2l2ZW4gcHJvcGVydHkuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eSBQcm9wZXJ0eSBuYW1lCiAgICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhlIHByb3RvdHlwZS9pbnN0YW5jZSBoYXMgYW4gZWZmZWN0IG9mIHRoaXMgdHlwZQogICAgICAgKiBAcHJvdGVjdGVkCiAgICAgICAqLwogICAgICBfaGFzUmVhZE9ubHlFZmZlY3QocHJvcGVydHkpIHsKICAgICAgICByZXR1cm4gdGhpcy5faGFzUHJvcGVydHlFZmZlY3QocHJvcGVydHksIFRZUEVTLlJFQURfT05MWSk7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIGN1cnJlbnQgcHJvdG90eXBlL2luc3RhbmNlIGhhcyBhICJub3RpZnkiCiAgICAgICAqIHByb3BlcnR5IGVmZmVjdCBmb3IgdGhlIGdpdmVuIHByb3BlcnR5LgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkgUHJvcGVydHkgbmFtZQogICAgICAgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHRoZSBwcm90b3R5cGUvaW5zdGFuY2UgaGFzIGFuIGVmZmVjdCBvZiB0aGlzIHR5cGUKICAgICAgICogQHByb3RlY3RlZAogICAgICAgKi8KICAgICAgX2hhc05vdGlmeUVmZmVjdChwcm9wZXJ0eSkgewogICAgICAgIHJldHVybiB0aGlzLl9oYXNQcm9wZXJ0eUVmZmVjdChwcm9wZXJ0eSwgVFlQRVMuTk9USUZZKTsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIFJldHVybnMgd2hldGhlciB0aGUgY3VycmVudCBwcm90b3R5cGUvaW5zdGFuY2UgaGFzIGEgInJlZmxlY3QgdG8gYXR0cmlidXRlIgogICAgICAgKiBwcm9wZXJ0eSBlZmZlY3QgZm9yIHRoZSBnaXZlbiBwcm9wZXJ0eS4KICAgICAgICoKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IFByb3BlcnR5IG5hbWUKICAgICAgICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgcHJvdG90eXBlL2luc3RhbmNlIGhhcyBhbiBlZmZlY3Qgb2YgdGhpcyB0eXBlCiAgICAgICAqIEBwcm90ZWN0ZWQKICAgICAgICovCiAgICAgIF9oYXNSZWZsZWN0RWZmZWN0KHByb3BlcnR5KSB7CiAgICAgICAgcmV0dXJuIHRoaXMuX2hhc1Byb3BlcnR5RWZmZWN0KHByb3BlcnR5LCBUWVBFUy5SRUZMRUNUKTsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIFJldHVybnMgd2hldGhlciB0aGUgY3VycmVudCBwcm90b3R5cGUvaW5zdGFuY2UgaGFzIGEgImNvbXB1dGVkIgogICAgICAgKiBwcm9wZXJ0eSBlZmZlY3QgZm9yIHRoZSBnaXZlbiBwcm9wZXJ0eS4KICAgICAgICoKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IFByb3BlcnR5IG5hbWUKICAgICAgICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgcHJvdG90eXBlL2luc3RhbmNlIGhhcyBhbiBlZmZlY3Qgb2YgdGhpcyB0eXBlCiAgICAgICAqIEBwcm90ZWN0ZWQKICAgICAgICovCiAgICAgIF9oYXNDb21wdXRlZEVmZmVjdChwcm9wZXJ0eSkgewogICAgICAgIHJldHVybiB0aGlzLl9oYXNQcm9wZXJ0eUVmZmVjdChwcm9wZXJ0eSwgVFlQRVMuQ09NUFVURSk7CiAgICAgIH0KCiAgICAgIC8vIFJ1bnRpbWUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgICAgLyoqCiAgICAgICAqIFNldHMgYSBwZW5kaW5nIHByb3BlcnR5IG9yIHBhdGguICBJZiB0aGUgcm9vdCBwcm9wZXJ0eSBvZiB0aGUgcGF0aCBpbgogICAgICAgKiBxdWVzdGlvbiBoYWQgbm8gYWNjZXNzb3IsIHRoZSBwYXRoIGlzIHNldCwgb3RoZXJ3aXNlIGl0IGlzIGVucXVldWVkCiAgICAgICAqIHZpYSBgX3NldFBlbmRpbmdQcm9wZXJ0eWAuCiAgICAgICAqCiAgICAgICAqIFRoaXMgZnVuY3Rpb24gaXNvbGF0ZXMgcmVsYXRpdmVseSBleHBlbnNpdmUgZnVuY3Rpb25hbGl0eSBuZWNlc3NhcnkKICAgICAgICogZm9yIHRoZSBwdWJsaWMgQVBJIChgc2V0YCwgYHNldFByb3BlcnRpZXNgLCBgbm90aWZ5UGF0aGAsIGFuZCBwcm9wZXJ0eQogICAgICAgKiBjaGFuZ2UgbGlzdGVuZXJzIHZpYSB7ey4uLn19IGJpbmRpbmdzKSwgc3VjaCB0aGF0IGl0IGlzIG9ubHkgZG9uZQogICAgICAgKiB3aGVuIHBhdGhzIGVudGVyIHRoZSBzeXN0ZW0sIGFuZCBub3QgYXQgZXZlcnkgcHJvcGFnYXRpb24gc3RlcC4gIEl0CiAgICAgICAqIGFsc28gc2V0cyBhIGBfX2RhdGFIYXNQYXRoc2AgZmxhZyBvbiB0aGUgaW5zdGFuY2Ugd2hpY2ggaXMgdXNlZCB0bwogICAgICAgKiBmYXN0LXBhdGggc2xvd2VyIHBhdGgtbWF0Y2hpbmcgY29kZSBpbiB0aGUgcHJvcGVydHkgZWZmZWN0cyBob3N0IHBhdGhzLgogICAgICAgKgogICAgICAgKiBgcGF0aGAgY2FuIGJlIGEgcGF0aCBzdHJpbmcgb3IgYXJyYXkgb2YgcGF0aCBwYXJ0cyBhcyBhY2NlcHRlZCBieSB0aGUKICAgICAgICogcHVibGljIEFQSS4KICAgICAgICoKICAgICAgICogQHBhcmFtIHtzdHJpbmcgfCAhQXJyYXk8bnVtYmVyfHN0cmluZz59IHBhdGggUGF0aCB0byBzZXQKICAgICAgICogQHBhcmFtIHsqfSB2YWx1ZSBWYWx1ZSB0byBzZXQKICAgICAgICogQHBhcmFtIHtib29sZWFuPX0gc2hvdWxkTm90aWZ5IFNldCB0byB0cnVlIGlmIHRoaXMgY2hhbmdlIHNob3VsZAogICAgICAgKiAgY2F1c2UgYSBwcm9wZXJ0eSBub3RpZmljYXRpb24gZXZlbnQgZGlzcGF0Y2gKICAgICAgICogQHBhcmFtIHtib29sZWFuPX0gaXNQYXRoTm90aWZpY2F0aW9uIElmIHRoZSBwYXRoIGJlaW5nIHNldCBpcyBhIHBhdGgKICAgICAgICogICBub3RpZmljYXRpb24gb2YgYW4gYWxyZWFkeSBjaGFuZ2VkIHZhbHVlLCBhcyBvcHBvc2VkIHRvIGEgcmVxdWVzdAogICAgICAgKiAgIHRvIHNldCBhbmQgbm90aWZ5IHRoZSBjaGFuZ2UuICBJbiB0aGUgbGF0dGVyIGBmYWxzZWAgY2FzZSwgYSBkaXJ0eQogICAgICAgKiAgIGNoZWNrIGlzIHBlcmZvcm1lZCBhbmQgdGhlbiB0aGUgdmFsdWUgaXMgc2V0IHRvIHRoZSBwYXRoIGJlZm9yZQogICAgICAgKiAgIGVucXVldWluZyB0aGUgcGVuZGluZyBwcm9wZXJ0eSBjaGFuZ2UuCiAgICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IFJldHVybnMgdHJ1ZSBpZiB0aGUgcHJvcGVydHkvcGF0aCB3YXMgZW5xdWV1ZWQgaW4KICAgICAgICogICB0aGUgcGVuZGluZyBjaGFuZ2VzIGJhZy4KICAgICAgICogQHByb3RlY3RlZAogICAgICAgKi8KICAgICAgX3NldFBlbmRpbmdQcm9wZXJ0eU9yUGF0aChwYXRoLCB2YWx1ZSwgc2hvdWxkTm90aWZ5LCBpc1BhdGhOb3RpZmljYXRpb24pIHsKICAgICAgICBpZiAoaXNQYXRoTm90aWZpY2F0aW9uIHx8CiAgICAgICAgICAgIFBvbHltZXIuUGF0aC5yb290KEFycmF5LmlzQXJyYXkocGF0aCkgPyBwYXRoWzBdIDogcGF0aCkgIT09IHBhdGgpIHsKICAgICAgICAgIC8vIERpcnR5IGNoZWNrIGNoYW5nZXMgYmVpbmcgc2V0IHRvIGEgcGF0aCBhZ2FpbnN0IHRoZSBhY3R1YWwgb2JqZWN0LAogICAgICAgICAgLy8gc2luY2UgdGhpcyBpcyB0aGUgZW50cnkgcG9pbnQgZm9yIHBhdGhzIGludG8gdGhlIHN5c3RlbTsgZnJvbSBoZXJlCiAgICAgICAgICAvLyB0aGUgb25seSBkaXJ0eSBjaGVja3MgYXJlIGFnYWluc3QgdGhlIGBfX2RhdGFUZW1wYCBjYWNoZSB0byBwcmV2ZW50CiAgICAgICAgICAvLyBkdXBsaWNhdGUgd29yayBpbiB0aGUgc2FtZSB0dXJuIG9ubHkuIE5vdGUsIGlmIHRoaXMgd2FzIGEgbm90aWZpY2F0aW9uCiAgICAgICAgICAvLyBvZiBhIGNoYW5nZSBhbHJlYWR5IHNldCB0byBhIHBhdGggKGlzUGF0aE5vdGlmaWNhdGlvbjogdHJ1ZSksCiAgICAgICAgICAvLyB3ZSBhbHdheXMgbGV0IHRoZSBjaGFuZ2UgdGhyb3VnaCBhbmQgc2tpcCB0aGUgYHNldGAgc2luY2UgaXQgd2FzCiAgICAgICAgICAvLyBhbHJlYWR5IGRpcnR5IGNoZWNrZWQgYXQgdGhlIHBvaW50IG9mIGVudHJ5IGFuZCB0aGUgdW5kZXJseWluZwogICAgICAgICAgLy8gb2JqZWN0IGhhcyBhbHJlYWR5IGJlZW4gdXBkYXRlZAogICAgICAgICAgaWYgKCFpc1BhdGhOb3RpZmljYXRpb24pIHsKICAgICAgICAgICAgbGV0IG9sZCA9IFBvbHltZXIuUGF0aC5nZXQodGhpcywgcGF0aCk7CiAgICAgICAgICAgIHBhdGggPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKFBvbHltZXIuUGF0aC5zZXQodGhpcywgcGF0aCwgdmFsdWUpKTsKICAgICAgICAgICAgLy8gVXNlIHByb3BlcnR5LWFjY2Vzc29yJ3Mgc2ltcGxlciBkaXJ0eSBjaGVjawogICAgICAgICAgICBpZiAoIXBhdGggfHwgIXN1cGVyLl9zaG91bGRQcm9wZXJ0eUNoYW5nZShwYXRoLCB2YWx1ZSwgb2xkKSkgewogICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgdGhpcy5fX2RhdGFIYXNQYXRocyA9IHRydWU7CiAgICAgICAgICBpZiAodGhpcy5fc2V0UGVuZGluZ1Byb3BlcnR5KC8qKkB0eXBle3N0cmluZ30qLyhwYXRoKSwgdmFsdWUsIHNob3VsZE5vdGlmeSkpIHsKICAgICAgICAgICAgY29tcHV0ZUxpbmtlZFBhdGhzKHRoaXMsIHBhdGgsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGlmICh0aGlzLl9fZGF0YUhhc0FjY2Vzc29yICYmIHRoaXMuX19kYXRhSGFzQWNjZXNzb3JbcGF0aF0pIHsKICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NldFBlbmRpbmdQcm9wZXJ0eSgvKipAdHlwZXtzdHJpbmd9Ki8ocGF0aCksIHZhbHVlLCBzaG91bGROb3RpZnkpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGhpc1twYXRoXSA9IHZhbHVlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBBcHBsaWVzIGEgdmFsdWUgdG8gYSBub24tUG9seW1lciBlbGVtZW50L25vZGUncyBwcm9wZXJ0eS4KICAgICAgICoKICAgICAgICogVGhlIGltcGxlbWVudGF0aW9uIG1ha2VzIGEgYmVzdC1lZmZvcnQgYXQgYmluZGluZyBpbnRlcm9wOgogICAgICAgKiBTb21lIG5hdGl2ZSBlbGVtZW50IHByb3BlcnRpZXMgaGF2ZSBzaWRlLWVmZmVjdHMgd2hlbgogICAgICAgKiByZS1zZXR0aW5nIHRoZSBzYW1lIHZhbHVlIChlLmcuIHNldHRpbmcgYDxpbnB1dD4udmFsdWVgIHJlc2V0cyB0aGUKICAgICAgICogY3Vyc29yIHBvc2l0aW9uKSwgc28gd2UgZG8gYSBkaXJ0eS1jaGVjayBiZWZvcmUgc2V0dGluZyB0aGUgdmFsdWUuCiAgICAgICAqIEhvd2V2ZXIsIGZvciBiZXR0ZXIgaW50ZXJvcCB3aXRoIG5vbi1Qb2x5bWVyIGN1c3RvbSBlbGVtZW50cyB0aGF0CiAgICAgICAqIGFjY2VwdCBvYmplY3RzLCB3ZSBleHBsaWNpdGx5IHJlLXNldCBvYmplY3QgY2hhbmdlcyBjb21pbmcgZnJvbSB0aGUKICAgICAgICogUG9seW1lciB3b3JsZCAod2hpY2ggbWF5IGluY2x1ZGUgZGVlcCBvYmplY3QgY2hhbmdlcyB3aXRob3V0IHRoZQogICAgICAgKiB0b3AgcmVmZXJlbmNlIGNoYW5naW5nKSwgZXJyaW5nIG9uIHRoZSBzaWRlIG9mIHByb3ZpZGluZyBtb3JlCiAgICAgICAqIGluZm9ybWF0aW9uLgogICAgICAgKgogICAgICAgKiBVc2VycyBtYXkgb3ZlcnJpZGUgdGhpcyBtZXRob2QgdG8gcHJvdmlkZSBhbHRlcm5hdGUgYXBwcm9hY2hlcy4KICAgICAgICoKICAgICAgICogQHBhcmFtIHshTm9kZX0gbm9kZSBUaGUgbm9kZSB0byBzZXQgYSBwcm9wZXJ0eSBvbgogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcCBUaGUgcHJvcGVydHkgdG8gc2V0CiAgICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldAogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKiBAcHJvdGVjdGVkCiAgICAgICAqLwogICAgICBfc2V0VW5tYW5hZ2VkUHJvcGVydHlUb05vZGUobm9kZSwgcHJvcCwgdmFsdWUpIHsKICAgICAgICAvLyBJdCBpcyBhIGp1ZGdtZW50IGNhbGwgdGhhdCByZXNldHRpbmcgcHJpbWl0aXZlcyBpcwogICAgICAgIC8vICJiYWQiIGFuZCByZXNldHRpbmdzIG9iamVjdHMgaXMgYWxzbyAiZ29vZCI7IGFsdGVybmF0aXZlbHkgd2UgY291bGQKICAgICAgICAvLyBpbXBsZW1lbnQgYSB3aGl0ZWxpc3Qgb2YgdGFnICYgcHJvcGVydHkgdmFsdWVzIHRoYXQgc2hvdWxkIG5ldmVyCiAgICAgICAgLy8gYmUgcmVzZXQgKGUuZy4gPGlucHV0Pi52YWx1ZSAmJiA8c2VsZWN0Pi52YWx1ZSkKICAgICAgICBpZiAodmFsdWUgIT09IG5vZGVbcHJvcF0gfHwgdHlwZW9mIHZhbHVlID09ICdvYmplY3QnKSB7CiAgICAgICAgICBub2RlW3Byb3BdID0gdmFsdWU7CiAgICAgICAgfQogICAgICB9CgogICAgICAvKioKICAgICAgICogT3ZlcnJpZGVzIHRoZSBgUHJvcGVydGllc0NoYW5nZWRgIGltcGxlbWVudGF0aW9uIHRvIGludHJvZHVjZSBzcGVjaWFsCiAgICAgICAqIGRpcnR5IGNoZWNrIGxvZ2ljIGRlcGVuZGluZyBvbiB0aGUgcHJvcGVydHkgJiB2YWx1ZSBiZWluZyBzZXQ6CiAgICAgICAqCiAgICAgICAqIDEuIEFueSB2YWx1ZSBzZXQgdG8gYSBwYXRoIChlLmcuICdvYmoucHJvcCc6IDQyIG9yICdvYmoucHJvcCc6IHsuLi59KQogICAgICAgKiAgICBTdG9yZWQgaW4gYF9fZGF0YVRlbXBgLCBkaXJ0eSBjaGVja2VkIGFnYWluc3QgYF9fZGF0YVRlbXBgCiAgICAgICAqIDIuIE9iamVjdCBzZXQgdG8gc2ltcGxlIHByb3BlcnR5IChlLmcuICdwcm9wJzogey4uLn0pCiAgICAgICAqICAgIFN0b3JlZCBpbiBgX19kYXRhVGVtcGAgYW5kIGBfX2RhdGFgLCBkaXJ0eSBjaGVja2VkIGFnYWluc3QKICAgICAgICogICAgYF9fZGF0YVRlbXBgIGJ5IGRlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgYF9zaG91bGRQcm9wZXJ0eUNoYW5nZWAKICAgICAgICogMy4gUHJpbWl0aXZlIHZhbHVlIHNldCB0byBzaW1wbGUgcHJvcGVydHkgKGUuZy4gJ3Byb3AnOiA0MikKICAgICAgICogICAgU3RvcmVkIGluIGBfX2RhdGFgLCBkaXJ0eSBjaGVja2VkIGFnYWluc3QgYF9fZGF0YWAKICAgICAgICoKICAgICAgICogVGhlIGRpcnR5LWNoZWNrIGlzIGltcG9ydGFudCB0byBwcmV2ZW50IGN5Y2xlcyBkdWUgdG8gdHdvLXdheQogICAgICAgKiBub3RpZmljYXRpb24sIGJ1dCBwYXRocyBhbmQgb2JqZWN0cyBhcmUgb25seSBkaXJ0eSBjaGVja2VkIGFnYWluc3QgYW55CiAgICAgICAqIHByZXZpb3VzIHZhbHVlIHNldCBkdXJpbmcgdGhpcyB0dXJuIHZpYSBhICJ0ZW1wb3JhcnkgY2FjaGUiIHRoYXQgaXMKICAgICAgICogY2xlYXJlZCB3aGVuIHRoZSBsYXN0IGBfcHJvcGVydGllc0NoYW5nZWRgIGV4aXRzLiBUaGlzIGlzIHNvOgogICAgICAgKiBhLiBhbnkgY2FjaGVkIGFycmF5IHBhdGhzIChlLmcuICdhcnJheS4zLnByb3AnKSBtYXkgYmUgaW52YWxpZGF0ZWQKICAgICAgICogICAgZHVlIHRvIGFycmF5IG11dGF0aW9ucyBsaWtlIHNoaWZ0L3Vuc2hpZnQvc3BsaWNlOyB0aGlzIGlzIGZpbmUKICAgICAgICogICAgc2luY2UgcGF0aCBjaGFuZ2VzIGFyZSBkaXJ0eS1jaGVja2VkIGF0IHVzZXIgZW50cnkgcG9pbnRzIGxpa2UgYHNldGAKICAgICAgICogYi4gZGlydHktY2hlY2tpbmcgZm9yIG9iamVjdHMgb25seSBsYXN0cyBvbmUgdHVybiB0byBhbGxvdyB0aGUgdXNlcgogICAgICAgKiAgICB0byBtdXRhdGUgdGhlIG9iamVjdCBpbi1wbGFjZSBhbmQgcmUtc2V0IGl0IHdpdGggdGhlIHNhbWUgaWRlbnRpdHkKICAgICAgICogICAgYW5kIGhhdmUgYWxsIHN1Yi1wcm9wZXJ0aWVzIHJlLXByb3BhZ2F0ZWQgaW4gYSBzdWJzZXF1ZW50IHR1cm4uCiAgICAgICAqCiAgICAgICAqIFRoZSB0ZW1wIGNhY2hlIGlzIG5vdCBuZWNlc3NhcmlseSBzdWZmaWNpZW50IHRvIHByZXZlbnQgaW52YWxpZCBhcnJheQogICAgICAgKiBwYXRocywgc2luY2UgYSBzcGxpY2UgY2FuIGhhcHBlbiBkdXJpbmcgdGhlIHNhbWUgdHVybiAod2l0aCBwYXRob2xvZ2ljYWwKICAgICAgICogdXNlciBjb2RlKTsgd2UgY291bGQgaW50cm9kdWNlIGEgImZpeHVwIiBmb3IgdGVtcG9yYXJpbHkgY2FjaGVkIGFycmF5CiAgICAgICAqIHBhdGhzIGlmIG5lZWRlZDogaHR0cHM6Ly9naXRodWIuY29tL1BvbHltZXIvcG9seW1lci9pc3N1ZXMvNDIyNwogICAgICAgKgogICAgICAgKiBAb3ZlcnJpZGUKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IE5hbWUgb2YgdGhlIHByb3BlcnR5CiAgICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVmFsdWUgdG8gc2V0CiAgICAgICAqIEBwYXJhbSB7Ym9vbGVhbj19IHNob3VsZE5vdGlmeSBUcnVlIGlmIHByb3BlcnR5IHNob3VsZCBmaXJlIG5vdGlmaWNhdGlvbgogICAgICAgKiAgIGV2ZW50IChhcHBsaWVzIG9ubHkgZm9yIGBub3RpZnk6IHRydWVgIHByb3BlcnRpZXMpCiAgICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IFJldHVybnMgdHJ1ZSBpZiB0aGUgcHJvcGVydHkgY2hhbmdlZAogICAgICAgKi8KICAgICAgX3NldFBlbmRpbmdQcm9wZXJ0eShwcm9wZXJ0eSwgdmFsdWUsIHNob3VsZE5vdGlmeSkgewogICAgICAgIGxldCBpc1BhdGggPSB0aGlzLl9fZGF0YUhhc1BhdGhzICYmIFBvbHltZXIuUGF0aC5pc1BhdGgocHJvcGVydHkpOwogICAgICAgIGxldCBwcmV2UHJvcHMgPSBpc1BhdGggPyB0aGlzLl9fZGF0YVRlbXAgOiB0aGlzLl9fZGF0YTsKICAgICAgICBpZiAodGhpcy5fc2hvdWxkUHJvcGVydHlDaGFuZ2UocHJvcGVydHksIHZhbHVlLCBwcmV2UHJvcHNbcHJvcGVydHldKSkgewogICAgICAgICAgaWYgKCF0aGlzLl9fZGF0YVBlbmRpbmcpIHsKICAgICAgICAgICAgdGhpcy5fX2RhdGFQZW5kaW5nID0ge307CiAgICAgICAgICAgIHRoaXMuX19kYXRhT2xkID0ge307CiAgICAgICAgICB9CiAgICAgICAgICAvLyBFbnN1cmUgb2xkIGlzIGNhcHR1cmVkIGZyb20gdGhlIGxhc3QgdHVybgogICAgICAgICAgaWYgKCEocHJvcGVydHkgaW4gdGhpcy5fX2RhdGFPbGQpKSB7CiAgICAgICAgICAgIHRoaXMuX19kYXRhT2xkW3Byb3BlcnR5XSA9IHRoaXMuX19kYXRhW3Byb3BlcnR5XTsKICAgICAgICAgIH0KICAgICAgICAgIC8vIFBhdGhzIGFyZSBzdG9yZWQgaW4gdGVtcG9yYXJ5IGNhY2hlIChjbGVhcmVkIGF0IGVuZCBvZiB0dXJuKSwKICAgICAgICAgIC8vIHdoaWNoIGlzIHVzZWQgZm9yIGRpcnR5LWNoZWNraW5nLCBhbGwgb3RoZXJzIHN0b3JlZCBpbiBfX2RhdGEKICAgICAgICAgIGlmIChpc1BhdGgpIHsKICAgICAgICAgICAgdGhpcy5fX2RhdGFUZW1wW3Byb3BlcnR5XSA9IHZhbHVlOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGhpcy5fX2RhdGFbcHJvcGVydHldID0gdmFsdWU7CiAgICAgICAgICB9CiAgICAgICAgICAvLyBBbGwgY2hhbmdlcyBnbyBpbnRvIHBlbmRpbmcgcHJvcGVydHkgYmFnLCBwYXNzZWQgdG8gX3Byb3BlcnRpZXNDaGFuZ2VkCiAgICAgICAgICB0aGlzLl9fZGF0YVBlbmRpbmdbcHJvcGVydHldID0gdmFsdWU7CiAgICAgICAgICAvLyBUcmFjayBwcm9wZXJ0aWVzIHRoYXQgc2hvdWxkIG5vdGlmeSBzZXBhcmF0ZWx5CiAgICAgICAgICBpZiAoaXNQYXRoIHx8ICh0aGlzW1RZUEVTLk5PVElGWV0gJiYgdGhpc1tUWVBFUy5OT1RJRlldW3Byb3BlcnR5XSkpIHsKICAgICAgICAgICAgdGhpcy5fX2RhdGFUb05vdGlmeSA9IHRoaXMuX19kYXRhVG9Ob3RpZnkgfHwge307CiAgICAgICAgICAgIHRoaXMuX19kYXRhVG9Ob3RpZnlbcHJvcGVydHldID0gc2hvdWxkTm90aWZ5OwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIE92ZXJyaWRlcyBiYXNlIGltcGxlbWVudGF0aW9uIHRvIGVuc3VyZSBhbGwgYWNjZXNzb3JzIHNldCBgc2hvdWxkTm90aWZ5YAogICAgICAgKiB0byB0cnVlLCBmb3IgcGVyLXByb3BlcnR5IG5vdGlmaWNhdGlvbiB0cmFja2luZy4KICAgICAgICoKICAgICAgICogQG92ZXJyaWRlCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eSBOYW1lIG9mIHRoZSBwcm9wZXJ0eQogICAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFZhbHVlIHRvIHNldAogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKi8KICAgICAgX3NldFByb3BlcnR5KHByb3BlcnR5LCB2YWx1ZSkgewogICAgICAgIGlmICh0aGlzLl9zZXRQZW5kaW5nUHJvcGVydHkocHJvcGVydHksIHZhbHVlLCB0cnVlKSkgewogICAgICAgICAgdGhpcy5faW52YWxpZGF0ZVByb3BlcnRpZXMoKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBPdmVycmlkZXMgYFByb3BlcnR5QWNjZXNzb3JgJ3MgZGVmYXVsdCBhc3luYyBxdWV1aW5nIG9mCiAgICAgICAqIGBfcHJvcGVydGllc0NoYW5nZWRgOiBpZiBgX19kYXRhUmVhZHlgIGlzIGZhbHNlIChoYXMgbm90IHlldCBiZWVuCiAgICAgICAqIG1hbnVhbGx5IGZsdXNoZWQpLCB0aGUgZnVuY3Rpb24gbm8tb3BzOyBvdGhlcndpc2UgZmx1c2hlcwogICAgICAgKiBgX3Byb3BlcnRpZXNDaGFuZ2VkYCBzeW5jaHJvbm91c2x5LgogICAgICAgKgogICAgICAgKiBAb3ZlcnJpZGUKICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICovCiAgICAgIF9pbnZhbGlkYXRlUHJvcGVydGllcygpIHsKICAgICAgICBpZiAodGhpcy5fX2RhdGFSZWFkeSkgewogICAgICAgICAgdGhpcy5fZmx1c2hQcm9wZXJ0aWVzKCk7CiAgICAgICAgfQogICAgICB9CgogICAgICAvKioKICAgICAgICogRW5xdWV1ZXMgdGhlIGdpdmVuIGNsaWVudCBvbiBhIGxpc3Qgb2YgcGVuZGluZyBjbGllbnRzLCB3aG9zZQogICAgICAgKiBwZW5kaW5nIHByb3BlcnR5IGNoYW5nZXMgY2FuIGxhdGVyIGJlIGZsdXNoZWQgdmlhIGEgY2FsbCB0bwogICAgICAgKiBgX2ZsdXNoQ2xpZW50c2AuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBjbGllbnQgUHJvcGVydHlFZmZlY3RzIGNsaWVudCB0byBlbnF1ZXVlCiAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAqIEBwcm90ZWN0ZWQKICAgICAgICovCiAgICAgIF9lbnF1ZXVlQ2xpZW50KGNsaWVudCkgewogICAgICAgIHRoaXMuX19kYXRhUGVuZGluZ0NsaWVudHMgPSB0aGlzLl9fZGF0YVBlbmRpbmdDbGllbnRzIHx8IFtdOwogICAgICAgIGlmIChjbGllbnQgIT09IHRoaXMpIHsKICAgICAgICAgIHRoaXMuX19kYXRhUGVuZGluZ0NsaWVudHMucHVzaChjbGllbnQpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIE92ZXJyaWRlcyBzdXBlcmNsYXNzIGltcGxlbWVudGF0aW9uLgogICAgICAgKgogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKiBAcHJvdGVjdGVkCiAgICAgICAqLwogICAgICBfZmx1c2hQcm9wZXJ0aWVzKCkgewogICAgICAgIHRoaXMuX19kYXRhQ291bnRlcisrOwogICAgICAgIHN1cGVyLl9mbHVzaFByb3BlcnRpZXMoKTsKICAgICAgICB0aGlzLl9fZGF0YUNvdW50ZXItLTsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIEZsdXNoZXMgYW55IGNsaWVudHMgcHJldmlvdXNseSBlbnF1ZXVlZCB2aWEgYF9lbnF1ZXVlQ2xpZW50YCwgY2F1c2luZwogICAgICAgKiB0aGVpciBgX2ZsdXNoUHJvcGVydGllc2AgbWV0aG9kIHRvIHJ1bi4KICAgICAgICoKICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICogQHByb3RlY3RlZAogICAgICAgKi8KICAgICAgX2ZsdXNoQ2xpZW50cygpIHsKICAgICAgICBpZiAoIXRoaXMuX19kYXRhQ2xpZW50c1JlYWR5KSB7CiAgICAgICAgICB0aGlzLl9fZGF0YUNsaWVudHNSZWFkeSA9IHRydWU7CiAgICAgICAgICB0aGlzLl9yZWFkeUNsaWVudHMoKTsKICAgICAgICAgIC8vIE92ZXJyaWRlIHBvaW50IHdoZXJlIGFjY2Vzc29ycyBhcmUgdHVybmVkIG9uOyBpbXBvcnRhbnRseSwKICAgICAgICAgIC8vIHRoaXMgaXMgYWZ0ZXIgY2xpZW50cyBoYXZlIGZ1bGx5IHJlYWRpZWQsIHByb3ZpZGluZyBhIGd1YXJhbnRlZQogICAgICAgICAgLy8gdGhhdCBhbnkgcHJvcGVydHkgZWZmZWN0cyBvY2N1ciBvbmx5IGFmdGVyIGFsbCBjbGllbnRzIGFyZSByZWFkeS4KICAgICAgICAgIHRoaXMuX19kYXRhUmVhZHkgPSB0cnVlOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aGlzLl9fZW5hYmxlT3JGbHVzaENsaWVudHMoKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC8vIE5PVEU6IFdlIGVuc3VyZSBjbGllbnRzIGVpdGhlciBlbmFibGUgb3IgZmx1c2ggYXMgYXBwcm9wcmlhdGUuIFRoaXMKICAgICAgLy8gaGFuZGxlcyB0d28gY29ybmVyIGNhc2VzOgogICAgICAvLyAoMSkgY2xpZW50cyBmbHVzaCBwcm9wZXJseSB3aGVuIGNvbm5lY3RlZC9lbmFibGVkIGJlZm9yZSB0aGUgaG9zdAogICAgICAvLyBlbmFibGVzOyBlLmcuCiAgICAgIC8vICAgKGEpIFRlbXBsYXRpemUgc3RhbXBzIHdpdGggbm8gcHJvcGVydGllcyBhbmQgZG9lcyBub3QgZmx1c2ggYW5kCiAgICAgIC8vICAgKGIpIHRoZSBpbnN0YW5jZSBpcyBpbnNlcnRlZCBpbnRvIGRvbSBhbmQKICAgICAgLy8gICAoYykgdGhlbiB0aGUgaW5zdGFuY2UgZmx1c2hlcy4KICAgICAgLy8gKDIpIGNsaWVudHMgZW5hYmxlIHByb3Blcmx5IHdoZW4gbm90IGNvbm5lY3RlZC9lbmFibGVkIHdoZW4gdGhlIGhvc3QKICAgICAgLy8gZmx1c2hlczsgZS5nLgogICAgICAvLyAgIChhKSBhIHRlbXBsYXRlIGlzIHJ1bnRpbWUgc3RhbXBlZCBhbmQgbm90IHlldCBjb25uZWN0ZWQvZW5hYmxlZAogICAgICAvLyAgIChiKSBhIGhvc3Qgc2V0cyBhIHByb3BlcnR5LCBjYXVzaW5nIHN0YW1wZWQgZG9tIHRvIGZsdXNoCiAgICAgIC8vICAgKGMpIHRoZSBzdGFtcGVkIGRvbSBlbmFibGVzLgogICAgICBfX2VuYWJsZU9yRmx1c2hDbGllbnRzKCkgewogICAgICAgIGxldCBjbGllbnRzID0gdGhpcy5fX2RhdGFQZW5kaW5nQ2xpZW50czsKICAgICAgICBpZiAoY2xpZW50cykgewogICAgICAgICAgdGhpcy5fX2RhdGFQZW5kaW5nQ2xpZW50cyA9IG51bGw7CiAgICAgICAgICBmb3IgKGxldCBpPTA7IGkgPCBjbGllbnRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGxldCBjbGllbnQgPSBjbGllbnRzW2ldOwogICAgICAgICAgICBpZiAoIWNsaWVudC5fX2RhdGFFbmFibGVkKSB7CiAgICAgICAgICAgICAgY2xpZW50Ll9lbmFibGVQcm9wZXJ0aWVzKCk7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoY2xpZW50Ll9fZGF0YVBlbmRpbmcpIHsKICAgICAgICAgICAgICBjbGllbnQuX2ZsdXNoUHJvcGVydGllcygpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CgogICAgICAvKioKICAgICAgICogUGVyZm9ybSBhbnkgaW5pdGlhbCBzZXR1cCBvbiBjbGllbnQgZG9tLiBDYWxsZWQgYmVmb3JlIHRoZSBmaXJzdAogICAgICAgKiBgX2ZsdXNoUHJvcGVydGllc2AgY2FsbCBvbiBjbGllbnQgZG9tIGFuZCBiZWZvcmUgYW55IGVsZW1lbnQKICAgICAgICogb2JzZXJ2ZXJzIGFyZSBjYWxsZWQuCiAgICAgICAqCiAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAqIEBwcm90ZWN0ZWQKICAgICAgICovCiAgICAgIF9yZWFkeUNsaWVudHMoKSB7CiAgICAgICAgdGhpcy5fX2VuYWJsZU9yRmx1c2hDbGllbnRzKCk7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBTZXRzIGEgYmFnIG9mIHByb3BlcnR5IGNoYW5nZXMgdG8gdGhpcyBpbnN0YW5jZSwgYW5kCiAgICAgICAqIHN5bmNocm9ub3VzbHkgcHJvY2Vzc2VzIGFsbCBlZmZlY3RzIG9mIHRoZSBwcm9wZXJ0aWVzIGFzIGEgYmF0Y2guCiAgICAgICAqCiAgICAgICAqIFByb3BlcnR5IG5hbWVzIG11c3QgYmUgc2ltcGxlIHByb3BlcnRpZXMsIG5vdCBwYXRocy4gIEJhdGNoZWQKICAgICAgICogcGF0aCBwcm9wYWdhdGlvbiBpcyBub3Qgc3VwcG9ydGVkLgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge09iamVjdH0gcHJvcHMgQmFnIG9mIG9uZSBvciBtb3JlIGtleS12YWx1ZSBwYWlycyB3aG9zZSBrZXkgaXMKICAgICAgICogICBhIHByb3BlcnR5IGFuZCB2YWx1ZSBpcyB0aGUgbmV3IHZhbHVlIHRvIHNldCBmb3IgdGhhdCBwcm9wZXJ0eS4KICAgICAgICogQHBhcmFtIHtib29sZWFuPX0gc2V0UmVhZE9ubHkgV2hlbiB0cnVlLCBhbnkgcHJpdmF0ZSB2YWx1ZXMgc2V0IGluCiAgICAgICAqICAgYHByb3BzYCB3aWxsIGJlIHNldC4gQnkgZGVmYXVsdCwgYHNldFByb3BlcnRpZXNgIHdpbGwgbm90IHNldAogICAgICAgKiAgIGByZWFkT25seTogdHJ1ZWAgcm9vdCBwcm9wZXJ0aWVzLgogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKiBAcHVibGljCiAgICAgICAqLwogICAgICBzZXRQcm9wZXJ0aWVzKHByb3BzLCBzZXRSZWFkT25seSkgewogICAgICAgIGZvciAobGV0IHBhdGggaW4gcHJvcHMpIHsKICAgICAgICAgIGlmIChzZXRSZWFkT25seSB8fCAhdGhpc1tUWVBFUy5SRUFEX09OTFldIHx8ICF0aGlzW1RZUEVTLlJFQURfT05MWV1bcGF0aF0pIHsKICAgICAgICAgICAgLy9UT0RPKGtzY2hhYWYpOiBleHBsaWNpdGx5IGRpc2FsbG93IHBhdGhzIGluIHNldFByb3BlcnR5PwogICAgICAgICAgICAvLyB3aWxkY2FyZCBvYnNlcnZlcnMgY3VycmVudGx5IG9ubHkgcGFzcyB0aGUgZmlyc3QgY2hhbmdlZCBwYXRoCiAgICAgICAgICAgIC8vIGluIHRoZSBgaW5mb2Agb2JqZWN0LCBhbmQgeW91IGNvdWxkIGRvIHNvbWUgb2RkIHRoaW5ncyBiYXRjaGluZwogICAgICAgICAgICAvLyBwYXRocywgZS5nLiB7J2Zvby5iYXInOiB7Li4ufSwgJ2Zvbyc6IG51bGx9CiAgICAgICAgICAgIHRoaXMuX3NldFBlbmRpbmdQcm9wZXJ0eU9yUGF0aChwYXRoLCBwcm9wc1twYXRoXSwgdHJ1ZSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHRoaXMuX2ludmFsaWRhdGVQcm9wZXJ0aWVzKCk7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBPdmVycmlkZXMgYFByb3BlcnR5QWNjZXNzb3JzYCBzbyB0aGF0IHByb3BlcnR5IGFjY2Vzc29yCiAgICAgICAqIHNpZGUgZWZmZWN0cyBhcmUgbm90IGVuYWJsZWQgdW50aWwgYWZ0ZXIgY2xpZW50IGRvbSBpcyBmdWxseSByZWFkeS4KICAgICAgICogQWxzbyBjYWxscyBgX2ZsdXNoQ2xpZW50c2AgY2FsbGJhY2sgdG8gZW5zdXJlIGNsaWVudCBkb20gaXMgZW5hYmxlZAogICAgICAgKiB0aGF0IHdhcyBub3QgZW5hYmxlZCBhcyBhIHJlc3VsdCBvZiBmbHVzaGluZyBwcm9wZXJ0aWVzLgogICAgICAgKgogICAgICAgKiBAb3ZlcnJpZGUKICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICovCiAgICAgIHJlYWR5KCkgewogICAgICAgIC8vIEl0IGlzIGltcG9ydGFudCB0aGF0IGBzdXBlci5yZWFkeSgpYCBpcyBub3QgY2FsbGVkIGhlcmUgYXMgaXQKICAgICAgICAvLyBpbW1lZGlhdGVseSB0dXJucyBvbiBhY2Nlc3NvcnMuIEluc3RlYWQsIHdlIHdhaXQgdW50aWwgYHJlYWR5Q2xpZW50c2AKICAgICAgICAvLyB0byBlbmFibGUgYWNjZXNzb3JzIHRvIHByb3ZpZGUgYSBndWFyYW50ZWUgdGhhdCBjbGllbnRzIGFyZSByZWFkeQogICAgICAgIC8vIGJlZm9yZSBwcm9jZXNzaW5nIGFueSBhY2Nlc3NvcnMgc2lkZSBlZmZlY3RzLgogICAgICAgIHRoaXMuX2ZsdXNoUHJvcGVydGllcygpOwogICAgICAgIC8vIElmIG5vIGRhdGEgd2FzIHBlbmRpbmcsIGBfZmx1c2hQcm9wZXJ0aWVzYCB3aWxsIG5vdCBgZmx1c2hDbGllbnRzYAogICAgICAgIC8vIHNvIGVuc3VyZSB0aGlzIGlzIGRvbmUuCiAgICAgICAgaWYgKCF0aGlzLl9fZGF0YUNsaWVudHNSZWFkeSkgewogICAgICAgICAgdGhpcy5fZmx1c2hDbGllbnRzKCk7CiAgICAgICAgfQogICAgICAgIC8vIEJlZm9yZSByZWFkeSwgY2xpZW50IG5vdGlmaWNhdGlvbnMgZG8gbm90IHRyaWdnZXIgX2ZsdXNoUHJvcGVydGllcy4KICAgICAgICAvLyBUaGVyZWZvcmUgYSBmbHVzaCBpcyBuZWNlc3NhcnkgaGVyZSBpZiBkYXRhIGhhcyBiZWVuIHNldC4KICAgICAgICBpZiAodGhpcy5fX2RhdGFQZW5kaW5nKSB7CiAgICAgICAgICB0aGlzLl9mbHVzaFByb3BlcnRpZXMoKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBJbXBsZW1lbnRzIGBQcm9wZXJ0eUFjY2Vzc29yc2AncyBwcm9wZXJ0aWVzIGNoYW5nZWQgY2FsbGJhY2suCiAgICAgICAqCiAgICAgICAqIFJ1bnMgZWFjaCBjbGFzcyBvZiBlZmZlY3RzIGZvciB0aGUgYmF0Y2ggb2YgY2hhbmdlZCBwcm9wZXJ0aWVzIGluCiAgICAgICAqIGEgc3BlY2lmaWMgb3JkZXIgKGNvbXB1dGUsIHByb3BhZ2F0ZSwgcmVmbGVjdCwgb2JzZXJ2ZSwgbm90aWZ5KS4KICAgICAgICoKICAgICAgICogQHBhcmFtIHshT2JqZWN0fSBjdXJyZW50UHJvcHMgQmFnIG9mIGFsbCBjdXJyZW50IGFjY2Vzc29yIHZhbHVlcwogICAgICAgKiBAcGFyYW0geyFPYmplY3R9IGNoYW5nZWRQcm9wcyBCYWcgb2YgcHJvcGVydGllcyBjaGFuZ2VkIHNpbmNlIHRoZSBsYXN0CiAgICAgICAqICAgY2FsbCB0byBgX3Byb3BlcnRpZXNDaGFuZ2VkYAogICAgICAgKiBAcGFyYW0geyFPYmplY3R9IG9sZFByb3BzIEJhZyBvZiBwcmV2aW91cyB2YWx1ZXMgZm9yIGVhY2ggcHJvcGVydHkKICAgICAgICogICBpbiBgY2hhbmdlZFByb3BzYAogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKi8KICAgICAgX3Byb3BlcnRpZXNDaGFuZ2VkKGN1cnJlbnRQcm9wcywgY2hhbmdlZFByb3BzLCBvbGRQcm9wcykgewogICAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAvLyBsZXQgYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGNoYW5nZWRQcm9wcyB8fCB7fSk7CiAgICAgICAgLy8gd2luZG93LmRlYnVnICYmIGNvbnNvbGUuZ3JvdXAodGhpcy5sb2NhbE5hbWUgKyAnIycgKyB0aGlzLmlkICsgJzogJyArIGMpOwogICAgICAgIC8vIGlmICh3aW5kb3cuZGVidWcpIHsgZGVidWdnZXI7IH0KICAgICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgbGV0IGhhc1BhdGhzID0gdGhpcy5fX2RhdGFIYXNQYXRoczsKICAgICAgICB0aGlzLl9fZGF0YUhhc1BhdGhzID0gZmFsc2U7CiAgICAgICAgLy8gQ29tcHV0ZSBwcm9wZXJ0aWVzCiAgICAgICAgcnVuQ29tcHV0ZWRFZmZlY3RzKHRoaXMsIGNoYW5nZWRQcm9wcywgb2xkUHJvcHMsIGhhc1BhdGhzKTsKICAgICAgICAvLyBDbGVhciBub3RpZnkgcHJvcGVydGllcyBwcmlvciB0byBwb3NzaWJsZSByZWVudHJ5IChwcm9wYWdhdGUsIG9ic2VydmUpLAogICAgICAgIC8vIGJ1dCBhZnRlciBjb21wdXRpbmcgZWZmZWN0cyBoYXZlIGEgY2hhbmNlIHRvIGFkZCB0byB0aGVtCiAgICAgICAgbGV0IG5vdGlmeVByb3BzID0gdGhpcy5fX2RhdGFUb05vdGlmeTsKICAgICAgICB0aGlzLl9fZGF0YVRvTm90aWZ5ID0gbnVsbDsKICAgICAgICAvLyBQcm9wYWdhdGUgcHJvcGVydGllcyB0byBjbGllbnRzCiAgICAgICAgdGhpcy5fcHJvcGFnYXRlUHJvcGVydHlDaGFuZ2VzKGNoYW5nZWRQcm9wcywgb2xkUHJvcHMsIGhhc1BhdGhzKTsKICAgICAgICAvLyBGbHVzaCBjbGllbnRzCiAgICAgICAgdGhpcy5fZmx1c2hDbGllbnRzKCk7CiAgICAgICAgLy8gUmVmbGVjdCBwcm9wZXJ0aWVzCiAgICAgICAgcnVuRWZmZWN0cyh0aGlzLCB0aGlzW1RZUEVTLlJFRkxFQ1RdLCBjaGFuZ2VkUHJvcHMsIG9sZFByb3BzLCBoYXNQYXRocyk7CiAgICAgICAgLy8gT2JzZXJ2ZSBwcm9wZXJ0aWVzCiAgICAgICAgcnVuRWZmZWN0cyh0aGlzLCB0aGlzW1RZUEVTLk9CU0VSVkVdLCBjaGFuZ2VkUHJvcHMsIG9sZFByb3BzLCBoYXNQYXRocyk7CiAgICAgICAgLy8gTm90aWZ5IHByb3BlcnRpZXMgdG8gaG9zdAogICAgICAgIGlmIChub3RpZnlQcm9wcykgewogICAgICAgICAgcnVuTm90aWZ5RWZmZWN0cyh0aGlzLCBub3RpZnlQcm9wcywgY2hhbmdlZFByb3BzLCBvbGRQcm9wcywgaGFzUGF0aHMpOwogICAgICAgIH0KICAgICAgICAvLyBDbGVhciB0ZW1wb3JhcnkgY2FjaGUgYXQgZW5kIG9mIHR1cm4KICAgICAgICBpZiAodGhpcy5fX2RhdGFDb3VudGVyID09IDEpIHsKICAgICAgICAgIHRoaXMuX19kYXRhVGVtcCA9IHt9OwogICAgICAgIH0KICAgICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgLy8gd2luZG93LmRlYnVnICYmIGNvbnNvbGUuZ3JvdXBFbmQodGhpcy5sb2NhbE5hbWUgKyAnIycgKyB0aGlzLmlkICsgJzogJyArIGMpOwogICAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIENhbGxlZCB0byBwcm9wYWdhdGUgYW55IHByb3BlcnR5IGNoYW5nZXMgdG8gc3RhbXBlZCB0ZW1wbGF0ZSBub2RlcwogICAgICAgKiBtYW5hZ2VkIGJ5IHRoaXMgZWxlbWVudC4KICAgICAgICoKICAgICAgICogQHBhcmFtIHtPYmplY3R9IGNoYW5nZWRQcm9wcyBCYWcgb2YgY2hhbmdlZCBwcm9wZXJ0aWVzCiAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvbGRQcm9wcyBCYWcgb2YgcHJldmlvdXMgdmFsdWVzIGZvciBjaGFuZ2VkIHByb3BlcnRpZXMKICAgICAgICogQHBhcmFtIHtib29sZWFufSBoYXNQYXRocyBUcnVlIHdpdGggYHByb3BzYCBjb250YWlucyBvbmUgb3IgbW9yZSBwYXRocwogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKiBAcHJvdGVjdGVkCiAgICAgICAqLwogICAgICBfcHJvcGFnYXRlUHJvcGVydHlDaGFuZ2VzKGNoYW5nZWRQcm9wcywgb2xkUHJvcHMsIGhhc1BhdGhzKSB7CiAgICAgICAgaWYgKHRoaXNbVFlQRVMuUFJPUEFHQVRFXSkgewogICAgICAgICAgcnVuRWZmZWN0cyh0aGlzLCB0aGlzW1RZUEVTLlBST1BBR0FURV0sIGNoYW5nZWRQcm9wcywgb2xkUHJvcHMsIGhhc1BhdGhzKTsKICAgICAgICB9CiAgICAgICAgbGV0IHRlbXBsYXRlSW5mbyA9IHRoaXMuX190ZW1wbGF0ZUluZm87CiAgICAgICAgd2hpbGUgKHRlbXBsYXRlSW5mbykgewogICAgICAgICAgcnVuRWZmZWN0cyh0aGlzLCB0ZW1wbGF0ZUluZm8ucHJvcGVydHlFZmZlY3RzLCBjaGFuZ2VkUHJvcHMsIG9sZFByb3BzLAogICAgICAgICAgICBoYXNQYXRocywgdGVtcGxhdGVJbmZvLm5vZGVMaXN0KTsKICAgICAgICAgIHRlbXBsYXRlSW5mbyA9IHRlbXBsYXRlSW5mby5uZXh0VGVtcGxhdGVJbmZvOwogICAgICAgIH0KICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIEFsaWFzZXMgb25lIGRhdGEgcGF0aCBhcyBhbm90aGVyLCBzdWNoIHRoYXQgcGF0aCBub3RpZmljYXRpb25zIGZyb20gb25lCiAgICAgICAqIGFyZSByb3V0ZWQgdG8gdGhlIG90aGVyLgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge3N0cmluZyB8ICFBcnJheTxzdHJpbmd8bnVtYmVyPn0gdG8gVGFyZ2V0IHBhdGggdG8gbGluay4KICAgICAgICogQHBhcmFtIHtzdHJpbmcgfCAhQXJyYXk8c3RyaW5nfG51bWJlcj59IGZyb20gU291cmNlIHBhdGggdG8gbGluay4KICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICogQHB1YmxpYwogICAgICAgKi8KICAgICAgbGlua1BhdGhzKHRvLCBmcm9tKSB7CiAgICAgICAgdG8gPSBQb2x5bWVyLlBhdGgubm9ybWFsaXplKHRvKTsKICAgICAgICBmcm9tID0gUG9seW1lci5QYXRoLm5vcm1hbGl6ZShmcm9tKTsKICAgICAgICB0aGlzLl9fZGF0YUxpbmtlZFBhdGhzID0gdGhpcy5fX2RhdGFMaW5rZWRQYXRocyB8fCB7fTsKICAgICAgICB0aGlzLl9fZGF0YUxpbmtlZFBhdGhzW3RvXSA9IGZyb207CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBSZW1vdmVzIGEgZGF0YSBwYXRoIGFsaWFzIHByZXZpb3VzbHkgZXN0YWJsaXNoZWQgd2l0aCBgX2xpbmtQYXRoc2AuCiAgICAgICAqCiAgICAgICAqIE5vdGUsIHRoZSBwYXRoIHRvIHVubGluayBzaG91bGQgYmUgdGhlIHRhcmdldCAoYHRvYCkgdXNlZCB3aGVuCiAgICAgICAqIGxpbmtpbmcgdGhlIHBhdGhzLgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge3N0cmluZyB8ICFBcnJheTxzdHJpbmd8bnVtYmVyPn0gcGF0aCBUYXJnZXQgcGF0aCB0byB1bmxpbmsuCiAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAqIEBwdWJsaWMKICAgICAgICovCiAgICAgIHVubGlua1BhdGhzKHBhdGgpIHsKICAgICAgICBwYXRoID0gUG9seW1lci5QYXRoLm5vcm1hbGl6ZShwYXRoKTsKICAgICAgICBpZiAodGhpcy5fX2RhdGFMaW5rZWRQYXRocykgewogICAgICAgICAgZGVsZXRlIHRoaXMuX19kYXRhTGlua2VkUGF0aHNbcGF0aF07CiAgICAgICAgfQogICAgICB9CgogICAgICAvKioKICAgICAgICogTm90aWZ5IHRoYXQgYW4gYXJyYXkgaGFzIGNoYW5nZWQuCiAgICAgICAqCiAgICAgICAqIEV4YW1wbGU6CiAgICAgICAqCiAgICAgICAqICAgICB0aGlzLml0ZW1zID0gWyB7bmFtZTogJ0ppbSd9LCB7bmFtZTogJ1RvZGQnfSwge25hbWU6ICdCaWxsJ30gXTsKICAgICAgICogICAgIC4uLgogICAgICAgKiAgICAgdGhpcy5pdGVtcy5zcGxpY2UoMSwgMSwge25hbWU6ICdTYW0nfSk7CiAgICAgICAqICAgICB0aGlzLml0ZW1zLnB1c2goe25hbWU6ICdCb2InfSk7CiAgICAgICAqICAgICB0aGlzLm5vdGlmeVNwbGljZXMoJ2l0ZW1zJywgWwogICAgICAgKiAgICAgICB7IGluZGV4OiAxLCByZW1vdmVkOiBbe25hbWU6ICdUb2RkJ31dLCBhZGRlZENvdW50OiAxLCBvYmplY3Q6IHRoaXMuaXRlbXMsIHR5cGU6ICdzcGxpY2UnIH0sCiAgICAgICAqICAgICAgIHsgaW5kZXg6IDMsIHJlbW92ZWQ6IFtdLCBhZGRlZENvdW50OiAxLCBvYmplY3Q6IHRoaXMuaXRlbXMsIHR5cGU6ICdzcGxpY2UnfQogICAgICAgKiAgICAgXSk7CiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIFBhdGggdGhhdCBzaG91bGQgYmUgbm90aWZpZWQuCiAgICAgICAqIEBwYXJhbSB7QXJyYXl9IHNwbGljZXMgQXJyYXkgb2Ygc3BsaWNlIHJlY29yZHMgaW5kaWNhdGluZyBvcmRlcmVkCiAgICAgICAqICAgY2hhbmdlcyB0aGF0IG9jY3VycmVkIHRvIHRoZSBhcnJheS4gRWFjaCByZWNvcmQgc2hvdWxkIGhhdmUgdGhlCiAgICAgICAqICAgZm9sbG93aW5nIGZpZWxkczoKICAgICAgICogICAgKiBpbmRleDogaW5kZXggYXQgd2hpY2ggdGhlIGNoYW5nZSBvY2N1cnJlZAogICAgICAgKiAgICAqIHJlbW92ZWQ6IGFycmF5IG9mIGl0ZW1zIHRoYXQgd2VyZSByZW1vdmVkIGZyb20gdGhpcyBpbmRleAogICAgICAgKiAgICAqIGFkZGVkQ291bnQ6IG51bWJlciBvZiBuZXcgaXRlbXMgYWRkZWQgYXQgdGhpcyBpbmRleAogICAgICAgKiAgICAqIG9iamVjdDogYSByZWZlcmVuY2UgdG8gdGhlIGFycmF5IGluIHF1ZXN0aW9uCiAgICAgICAqICAgICogdHlwZTogdGhlIHN0cmluZyBsaXRlcmFsICdzcGxpY2UnCiAgICAgICAqCiAgICAgICAqICAgTm90ZSB0aGF0IHNwbGljZSByZWNvcmRzIF9tdXN0XyBiZSBub3JtYWxpemVkIHN1Y2ggdGhhdCB0aGV5IGFyZQogICAgICAgKiAgIHJlcG9ydGVkIGluIGluZGV4IG9yZGVyIChyYXcgcmVzdWx0cyBmcm9tIGBPYmplY3Qub2JzZXJ2ZWAgYXJlIG5vdAogICAgICAgKiAgIG9yZGVyZWQgYW5kIG11c3QgYmUgbm9ybWFsaXplZC9tZXJnZWQgYmVmb3JlIG5vdGlmeWluZykuCiAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAqIEBwdWJsaWMKICAgICAgKi8KICAgICAgbm90aWZ5U3BsaWNlcyhwYXRoLCBzcGxpY2VzKSB7CiAgICAgICAgbGV0IGluZm8gPSB7cGF0aDogJyd9OwogICAgICAgIGxldCBhcnJheSA9IC8qKiBAdHlwZSB7QXJyYXl9ICovKFBvbHltZXIuUGF0aC5nZXQodGhpcywgcGF0aCwgaW5mbykpOwogICAgICAgIG5vdGlmeVNwbGljZXModGhpcywgYXJyYXksIGluZm8ucGF0aCwgc3BsaWNlcyk7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBDb252ZW5pZW5jZSBtZXRob2QgZm9yIHJlYWRpbmcgYSB2YWx1ZSBmcm9tIGEgcGF0aC4KICAgICAgICoKICAgICAgICogTm90ZSwgaWYgYW55IHBhcnQgaW4gdGhlIHBhdGggaXMgdW5kZWZpbmVkLCB0aGlzIG1ldGhvZCByZXR1cm5zCiAgICAgICAqIGB1bmRlZmluZWRgICh0aGlzIG1ldGhvZCBkb2VzIG5vdCB0aHJvdyB3aGVuIGRlcmVmZXJlbmNpbmcgdW5kZWZpbmVkCiAgICAgICAqIHBhdGhzKS4KICAgICAgICoKICAgICAgICogQHBhcmFtIHsoc3RyaW5nfCFBcnJheTwoc3RyaW5nfG51bWJlcik+KX0gcGF0aCBQYXRoIHRvIHRoZSB2YWx1ZQogICAgICAgKiAgIHRvIHJlYWQuICBUaGUgcGF0aCBtYXkgYmUgc3BlY2lmaWVkIGFzIGEgc3RyaW5nIChlLmcuIGBmb28uYmFyLmJhemApCiAgICAgICAqICAgb3IgYW4gYXJyYXkgb2YgcGF0aCBwYXJ0cyAoZS5nLiBgWydmb28uYmFyJywgJ2JheiddYCkuICBOb3RlIHRoYXQKICAgICAgICogICBicmFja2V0ZWQgZXhwcmVzc2lvbnMgYXJlIG5vdCBzdXBwb3J0ZWQ7IHN0cmluZy1iYXNlZCBwYXRoIHBhcnRzCiAgICAgICAqICAgKm11c3QqIGJlIHNlcGFyYXRlZCBieSBkb3RzLiAgTm90ZSB0aGF0IHdoZW4gZGVyZWZlcmVuY2luZyBhcnJheQogICAgICAgKiAgIGluZGljZXMsIHRoZSBpbmRleCBtYXkgYmUgdXNlZCBhcyBhIGRvdHRlZCBwYXJ0IGRpcmVjdGx5CiAgICAgICAqICAgKGUuZy4gYHVzZXJzLjEyLm5hbWVgIG9yIGBbJ3VzZXJzJywgMTIsICduYW1lJ11gKS4KICAgICAgICogQHBhcmFtIHtPYmplY3Q9fSByb290IFJvb3Qgb2JqZWN0IGZyb20gd2hpY2ggdGhlIHBhdGggaXMgZXZhbHVhdGVkLgogICAgICAgKiBAcmV0dXJuIHsqfSBWYWx1ZSBhdCB0aGUgcGF0aCwgb3IgYHVuZGVmaW5lZGAgaWYgYW55IHBhcnQgb2YgdGhlIHBhdGgKICAgICAgICogICBpcyB1bmRlZmluZWQuCiAgICAgICAqIEBwdWJsaWMKICAgICAgICovCiAgICAgIGdldChwYXRoLCByb290KSB7CiAgICAgICAgcmV0dXJuIFBvbHltZXIuUGF0aC5nZXQocm9vdCB8fCB0aGlzLCBwYXRoKTsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIENvbnZlbmllbmNlIG1ldGhvZCBmb3Igc2V0dGluZyBhIHZhbHVlIHRvIGEgcGF0aCBhbmQgbm90aWZ5aW5nIGFueQogICAgICAgKiBlbGVtZW50cyBib3VuZCB0byB0aGUgc2FtZSBwYXRoLgogICAgICAgKgogICAgICAgKiBOb3RlLCBpZiBhbnkgcGFydCBpbiB0aGUgcGF0aCBleGNlcHQgZm9yIHRoZSBsYXN0IGlzIHVuZGVmaW5lZCwKICAgICAgICogdGhpcyBtZXRob2QgZG9lcyBub3RoaW5nICh0aGlzIG1ldGhvZCBkb2VzIG5vdCB0aHJvdyB3aGVuCiAgICAgICAqIGRlcmVmZXJlbmNpbmcgdW5kZWZpbmVkIHBhdGhzKS4KICAgICAgICoKICAgICAgICogQHBhcmFtIHsoc3RyaW5nfCFBcnJheTwoc3RyaW5nfG51bWJlcik+KX0gcGF0aCBQYXRoIHRvIHRoZSB2YWx1ZQogICAgICAgKiAgIHRvIHdyaXRlLiAgVGhlIHBhdGggbWF5IGJlIHNwZWNpZmllZCBhcyBhIHN0cmluZyAoZS5nLiBgJ2Zvby5iYXIuYmF6J2ApCiAgICAgICAqICAgb3IgYW4gYXJyYXkgb2YgcGF0aCBwYXJ0cyAoZS5nLiBgWydmb28uYmFyJywgJ2JheiddYCkuICBOb3RlIHRoYXQKICAgICAgICogICBicmFja2V0ZWQgZXhwcmVzc2lvbnMgYXJlIG5vdCBzdXBwb3J0ZWQ7IHN0cmluZy1iYXNlZCBwYXRoIHBhcnRzCiAgICAgICAqICAgKm11c3QqIGJlIHNlcGFyYXRlZCBieSBkb3RzLiAgTm90ZSB0aGF0IHdoZW4gZGVyZWZlcmVuY2luZyBhcnJheQogICAgICAgKiAgIGluZGljZXMsIHRoZSBpbmRleCBtYXkgYmUgdXNlZCBhcyBhIGRvdHRlZCBwYXJ0IGRpcmVjdGx5CiAgICAgICAqICAgKGUuZy4gYCd1c2Vycy4xMi5uYW1lJ2Agb3IgYFsndXNlcnMnLCAxMiwgJ25hbWUnXWApLgogICAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFZhbHVlIHRvIHNldCBhdCB0aGUgc3BlY2lmaWVkIHBhdGguCiAgICAgICAqIEBwYXJhbSB7T2JqZWN0PX0gcm9vdCBSb290IG9iamVjdCBmcm9tIHdoaWNoIHRoZSBwYXRoIGlzIGV2YWx1YXRlZC4KICAgICAgICogICBXaGVuIHNwZWNpZmllZCwgbm8gbm90aWZpY2F0aW9uIHdpbGwgb2NjdXIuCiAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAqIEBwdWJsaWMKICAgICAgKi8KICAgICAgc2V0KHBhdGgsIHZhbHVlLCByb290KSB7CiAgICAgICAgaWYgKHJvb3QpIHsKICAgICAgICAgIFBvbHltZXIuUGF0aC5zZXQocm9vdCwgcGF0aCwgdmFsdWUpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpZiAoIXRoaXNbVFlQRVMuUkVBRF9PTkxZXSB8fCAhdGhpc1tUWVBFUy5SRUFEX09OTFldWy8qKiBAdHlwZSB7c3RyaW5nfSAqLyhwYXRoKV0pIHsKICAgICAgICAgICAgaWYgKHRoaXMuX3NldFBlbmRpbmdQcm9wZXJ0eU9yUGF0aChwYXRoLCB2YWx1ZSwgdHJ1ZSkpIHsKICAgICAgICAgICAgICB0aGlzLl9pbnZhbGlkYXRlUHJvcGVydGllcygpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CgogICAgICAvKioKICAgICAgICogQWRkcyBpdGVtcyBvbnRvIHRoZSBlbmQgb2YgdGhlIGFycmF5IGF0IHRoZSBwYXRoIHNwZWNpZmllZC4KICAgICAgICoKICAgICAgICogVGhlIGFyZ3VtZW50cyBhZnRlciBgcGF0aGAgYW5kIHJldHVybiB2YWx1ZSBtYXRjaCB0aGF0IG9mCiAgICAgICAqIGBBcnJheS5wcm90b3R5cGUucHVzaGAuCiAgICAgICAqCiAgICAgICAqIFRoaXMgbWV0aG9kIG5vdGlmaWVzIG90aGVyIHBhdGhzIHRvIHRoZSBzYW1lIGFycmF5IHRoYXQgYQogICAgICAgKiBzcGxpY2Ugb2NjdXJyZWQgdG8gdGhlIGFycmF5LgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge3N0cmluZyB8ICFBcnJheTxzdHJpbmd8bnVtYmVyPn0gcGF0aCBQYXRoIHRvIGFycmF5LgogICAgICAgKiBAcGFyYW0gey4uLip9IGl0ZW1zIEl0ZW1zIHRvIHB1c2ggb250byBhcnJheQogICAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IE5ldyBsZW5ndGggb2YgdGhlIGFycmF5LgogICAgICAgKiBAcHVibGljCiAgICAgICAqLwogICAgICBwdXNoKHBhdGgsIC4uLml0ZW1zKSB7CiAgICAgICAgbGV0IGluZm8gPSB7cGF0aDogJyd9OwogICAgICAgIGxldCBhcnJheSA9IC8qKiBAdHlwZSB7QXJyYXl9Ki8oUG9seW1lci5QYXRoLmdldCh0aGlzLCBwYXRoLCBpbmZvKSk7CiAgICAgICAgbGV0IGxlbiA9IGFycmF5Lmxlbmd0aDsKICAgICAgICBsZXQgcmV0ID0gYXJyYXkucHVzaCguLi5pdGVtcyk7CiAgICAgICAgaWYgKGl0ZW1zLmxlbmd0aCkgewogICAgICAgICAgbm90aWZ5U3BsaWNlKHRoaXMsIGFycmF5LCBpbmZvLnBhdGgsIGxlbiwgaXRlbXMubGVuZ3RoLCBbXSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiByZXQ7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBSZW1vdmVzIGFuIGl0ZW0gZnJvbSB0aGUgZW5kIG9mIGFycmF5IGF0IHRoZSBwYXRoIHNwZWNpZmllZC4KICAgICAgICoKICAgICAgICogVGhlIGFyZ3VtZW50cyBhZnRlciBgcGF0aGAgYW5kIHJldHVybiB2YWx1ZSBtYXRjaCB0aGF0IG9mCiAgICAgICAqIGBBcnJheS5wcm90b3R5cGUucG9wYC4KICAgICAgICoKICAgICAgICogVGhpcyBtZXRob2Qgbm90aWZpZXMgb3RoZXIgcGF0aHMgdG8gdGhlIHNhbWUgYXJyYXkgdGhhdCBhCiAgICAgICAqIHNwbGljZSBvY2N1cnJlZCB0byB0aGUgYXJyYXkuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nIHwgIUFycmF5PHN0cmluZ3xudW1iZXI+fSBwYXRoIFBhdGggdG8gYXJyYXkuCiAgICAgICAqIEByZXR1cm4geyp9IEl0ZW0gdGhhdCB3YXMgcmVtb3ZlZC4KICAgICAgICogQHB1YmxpYwogICAgICAgKi8KICAgICAgcG9wKHBhdGgpIHsKICAgICAgICBsZXQgaW5mbyA9IHtwYXRoOiAnJ307CiAgICAgICAgbGV0IGFycmF5ID0gLyoqIEB0eXBlIHtBcnJheX0gKi8oUG9seW1lci5QYXRoLmdldCh0aGlzLCBwYXRoLCBpbmZvKSk7CiAgICAgICAgbGV0IGhhZExlbmd0aCA9IEJvb2xlYW4oYXJyYXkubGVuZ3RoKTsKICAgICAgICBsZXQgcmV0ID0gYXJyYXkucG9wKCk7CiAgICAgICAgaWYgKGhhZExlbmd0aCkgewogICAgICAgICAgbm90aWZ5U3BsaWNlKHRoaXMsIGFycmF5LCBpbmZvLnBhdGgsIGFycmF5Lmxlbmd0aCwgMCwgW3JldF0pOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcmV0OwogICAgICB9CgogICAgICAvKioKICAgICAgICogU3RhcnRpbmcgZnJvbSB0aGUgc3RhcnQgaW5kZXggc3BlY2lmaWVkLCByZW1vdmVzIDAgb3IgbW9yZSBpdGVtcwogICAgICAgKiBmcm9tIHRoZSBhcnJheSBhbmQgaW5zZXJ0cyAwIG9yIG1vcmUgbmV3IGl0ZW1zIGluIHRoZWlyIHBsYWNlLgogICAgICAgKgogICAgICAgKiBUaGUgYXJndW1lbnRzIGFmdGVyIGBwYXRoYCBhbmQgcmV0dXJuIHZhbHVlIG1hdGNoIHRoYXQgb2YKICAgICAgICogYEFycmF5LnByb3RvdHlwZS5zcGxpY2VgLgogICAgICAgKgogICAgICAgKiBUaGlzIG1ldGhvZCBub3RpZmllcyBvdGhlciBwYXRocyB0byB0aGUgc2FtZSBhcnJheSB0aGF0IGEKICAgICAgICogc3BsaWNlIG9jY3VycmVkIHRvIHRoZSBhcnJheS4KICAgICAgICoKICAgICAgICogQHBhcmFtIHtzdHJpbmcgfCAhQXJyYXk8c3RyaW5nfG51bWJlcj59IHBhdGggUGF0aCB0byBhcnJheS4KICAgICAgICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0IEluZGV4IGZyb20gd2hpY2ggdG8gc3RhcnQgcmVtb3ZpbmcvaW5zZXJ0aW5nLgogICAgICAgKiBAcGFyYW0ge251bWJlcn0gZGVsZXRlQ291bnQgTnVtYmVyIG9mIGl0ZW1zIHRvIHJlbW92ZS4KICAgICAgICogQHBhcmFtIHsuLi4qfSBpdGVtcyBJdGVtcyB0byBpbnNlcnQgaW50byBhcnJheS4KICAgICAgICogQHJldHVybiB7QXJyYXl9IEFycmF5IG9mIHJlbW92ZWQgaXRlbXMuCiAgICAgICAqIEBwdWJsaWMKICAgICAgICovCiAgICAgIHNwbGljZShwYXRoLCBzdGFydCwgZGVsZXRlQ291bnQsIC4uLml0ZW1zKSB7CiAgICAgICAgbGV0IGluZm8gPSB7cGF0aCA6ICcnfTsKICAgICAgICBsZXQgYXJyYXkgPSAvKiogQHR5cGUge0FycmF5fSAqLyhQb2x5bWVyLlBhdGguZ2V0KHRoaXMsIHBhdGgsIGluZm8pKTsKICAgICAgICAvLyBOb3JtYWxpemUgZmFuY3kgbmF0aXZlIHNwbGljZSBoYW5kbGluZyBvZiBjcmF6eSBzdGFydCB2YWx1ZXMKICAgICAgICBpZiAoc3RhcnQgPCAwKSB7CiAgICAgICAgICBzdGFydCA9IGFycmF5Lmxlbmd0aCAtIE1hdGguZmxvb3IoLXN0YXJ0KTsKICAgICAgICB9IGVsc2UgaWYgKHN0YXJ0KSB7CiAgICAgICAgICBzdGFydCA9IE1hdGguZmxvb3Ioc3RhcnQpOwogICAgICAgIH0KICAgICAgICAvLyBhcnJheS5zcGxpY2UgZG9lcyBkaWZmZXJlbnQgdGhpbmdzIGJhc2VkIG9uIHRoZSBudW1iZXIgb2YgYXJndW1lbnRzCiAgICAgICAgLy8geW91IHBhc3MgaW4uIFRoZXJlZm9yZSwgYXJyYXkuc3BsaWNlKDApIGFuZCBhcnJheS5zcGxpY2UoMCwgdW5kZWZpbmVkKQogICAgICAgIC8vIGRvIGRpZmZlcmVudCB0aGluZ3MuIEluIHRoZSBmb3JtZXIsIHRoZSB3aG9sZSBhcnJheSBpcyBjbGVhcmVkLiBJbiB0aGUKICAgICAgICAvLyBsYXR0ZXIsIG5vIGl0ZW1zIGFyZSByZW1vdmVkLgogICAgICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB3ZSBuZWVkIHRvIGRldGVjdCB3aGV0aGVyIDEuIG9uZSBvZiB0aGUgYXJndW1lbnRzCiAgICAgICAgLy8gaXMgYWN0dWFsbHkgcGFzc2VkIGluIGFuZCB0aGVuIDIuIGRldGVybWluZSBob3cgbWFueSBhcmd1bWVudHMKICAgICAgICAvLyB3ZSBzaG91bGQgcGFzcyBvbiB0byB0aGUgbmF0aXZlIGFycmF5LnNwbGljZQogICAgICAgIC8vCiAgICAgICAgbGV0IHJldDsKICAgICAgICAvLyBPbWl0IGFueSBhZGRpdGlvbmFsIGFyZ3VtZW50cyBpZiB0aGV5IHdlcmUgbm90IHBhc3NlZCBpbgogICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSB7CiAgICAgICAgICByZXQgPSBhcnJheS5zcGxpY2Uoc3RhcnQpOwogICAgICAgIC8vIEVpdGhlciBzdGFydCB3YXMgdW5kZWZpbmVkIGFuZCB0aGUgb3RoZXJzIHdlcmUgZGVmaW5lZCwgYnV0IGluIHRoaXMKICAgICAgICAvLyBjYXNlIHdlIGNhbiBzYWZlbHkgcGFzcyBvbiBhbGwgYXJndW1lbnRzCiAgICAgICAgLy8KICAgICAgICAvLyBOb3RlOiB0aGlzIGluY2x1ZGVzIHRoZSBjYXNlIHdoZXJlIG5vbmUgb2YgdGhlIGFyZ3VtZW50cyB3ZXJlIHBhc3NlZCBpbiwKICAgICAgICAvLyBlLmcuIHRoaXMuc3BsaWNlKCdhcnJheScpLiBIb3dldmVyLCBpZiBib3RoIHN0YXJ0IGFuZCBkZWxldGVDb3VudAogICAgICAgIC8vIGFyZSB1bmRlZmluZWQsIGFycmF5LnNwbGljZSB3aWxsIG5vdCBtb2RpZnkgdGhlIGFycmF5IChhcyBleHBlY3RlZCkKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmV0ID0gYXJyYXkuc3BsaWNlKHN0YXJ0LCBkZWxldGVDb3VudCwgLi4uaXRlbXMpOwogICAgICAgIH0KICAgICAgICAvLyBBdCB0aGUgZW5kLCBjaGVjayB3aGV0aGVyIGFueSBpdGVtcyB3ZXJlIHBhc3NlZCBpbiAoZS5nLiBpbnNlcnRpb25zKQogICAgICAgIC8vIG9yIGlmIHRoZSByZXR1cm4gYXJyYXkgY29udGFpbnMgaXRlbXMgKGUuZy4gZGVsZXRpb25zKS4KICAgICAgICAvLyBPbmx5IG5vdGlmeSBpZiBpdGVtcyB3ZXJlIGFkZGVkIG9yIGRlbGV0ZWQuCiAgICAgICAgaWYgKGl0ZW1zLmxlbmd0aCB8fCByZXQubGVuZ3RoKSB7CiAgICAgICAgICBub3RpZnlTcGxpY2UodGhpcywgYXJyYXksIGluZm8ucGF0aCwgc3RhcnQsIGl0ZW1zLmxlbmd0aCwgcmV0KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJldDsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIFJlbW92ZXMgYW4gaXRlbSBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgYXJyYXkgYXQgdGhlIHBhdGggc3BlY2lmaWVkLgogICAgICAgKgogICAgICAgKiBUaGUgYXJndW1lbnRzIGFmdGVyIGBwYXRoYCBhbmQgcmV0dXJuIHZhbHVlIG1hdGNoIHRoYXQgb2YKICAgICAgICogYEFycmF5LnByb3RvdHlwZS5wb3BgLgogICAgICAgKgogICAgICAgKiBUaGlzIG1ldGhvZCBub3RpZmllcyBvdGhlciBwYXRocyB0byB0aGUgc2FtZSBhcnJheSB0aGF0IGEKICAgICAgICogc3BsaWNlIG9jY3VycmVkIHRvIHRoZSBhcnJheS4KICAgICAgICoKICAgICAgICogQHBhcmFtIHtzdHJpbmcgfCAhQXJyYXk8c3RyaW5nfG51bWJlcj59IHBhdGggUGF0aCB0byBhcnJheS4KICAgICAgICogQHJldHVybiB7Kn0gSXRlbSB0aGF0IHdhcyByZW1vdmVkLgogICAgICAgKiBAcHVibGljCiAgICAgICAqLwogICAgICBzaGlmdChwYXRoKSB7CiAgICAgICAgbGV0IGluZm8gPSB7cGF0aDogJyd9OwogICAgICAgIGxldCBhcnJheSA9IC8qKiBAdHlwZSB7QXJyYXl9ICovKFBvbHltZXIuUGF0aC5nZXQodGhpcywgcGF0aCwgaW5mbykpOwogICAgICAgIGxldCBoYWRMZW5ndGggPSBCb29sZWFuKGFycmF5Lmxlbmd0aCk7CiAgICAgICAgbGV0IHJldCA9IGFycmF5LnNoaWZ0KCk7CiAgICAgICAgaWYgKGhhZExlbmd0aCkgewogICAgICAgICAgbm90aWZ5U3BsaWNlKHRoaXMsIGFycmF5LCBpbmZvLnBhdGgsIDAsIDAsIFtyZXRdKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJldDsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIEFkZHMgaXRlbXMgb250byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBhcnJheSBhdCB0aGUgcGF0aCBzcGVjaWZpZWQuCiAgICAgICAqCiAgICAgICAqIFRoZSBhcmd1bWVudHMgYWZ0ZXIgYHBhdGhgIGFuZCByZXR1cm4gdmFsdWUgbWF0Y2ggdGhhdCBvZgogICAgICAgKiBgQXJyYXkucHJvdG90eXBlLnB1c2hgLgogICAgICAgKgogICAgICAgKiBUaGlzIG1ldGhvZCBub3RpZmllcyBvdGhlciBwYXRocyB0byB0aGUgc2FtZSBhcnJheSB0aGF0IGEKICAgICAgICogc3BsaWNlIG9jY3VycmVkIHRvIHRoZSBhcnJheS4KICAgICAgICoKICAgICAgICogQHBhcmFtIHtzdHJpbmcgfCAhQXJyYXk8c3RyaW5nfG51bWJlcj59IHBhdGggUGF0aCB0byBhcnJheS4KICAgICAgICogQHBhcmFtIHsuLi4qfSBpdGVtcyBJdGVtcyB0byBpbnNlcnQgaW5mbyBhcnJheQogICAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IE5ldyBsZW5ndGggb2YgdGhlIGFycmF5LgogICAgICAgKiBAcHVibGljCiAgICAgICAqLwogICAgICB1bnNoaWZ0KHBhdGgsIC4uLml0ZW1zKSB7CiAgICAgICAgbGV0IGluZm8gPSB7cGF0aDogJyd9OwogICAgICAgIGxldCBhcnJheSA9IC8qKiBAdHlwZSB7QXJyYXl9ICovKFBvbHltZXIuUGF0aC5nZXQodGhpcywgcGF0aCwgaW5mbykpOwogICAgICAgIGxldCByZXQgPSBhcnJheS51bnNoaWZ0KC4uLml0ZW1zKTsKICAgICAgICBpZiAoaXRlbXMubGVuZ3RoKSB7CiAgICAgICAgICBub3RpZnlTcGxpY2UodGhpcywgYXJyYXksIGluZm8ucGF0aCwgMCwgaXRlbXMubGVuZ3RoLCBbXSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiByZXQ7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBOb3RpZnkgdGhhdCBhIHBhdGggaGFzIGNoYW5nZWQuCiAgICAgICAqCiAgICAgICAqIEV4YW1wbGU6CiAgICAgICAqCiAgICAgICAqICAgICB0aGlzLml0ZW0udXNlci5uYW1lID0gJ0JvYic7CiAgICAgICAqICAgICB0aGlzLm5vdGlmeVBhdGgoJ2l0ZW0udXNlci5uYW1lJyk7CiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIFBhdGggdGhhdCBzaG91bGQgYmUgbm90aWZpZWQuCiAgICAgICAqIEBwYXJhbSB7Kj19IHZhbHVlIFZhbHVlIGF0IHRoZSBwYXRoIChvcHRpb25hbCkuCiAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAqIEBwdWJsaWMKICAgICAgKi8KICAgICAgbm90aWZ5UGF0aChwYXRoLCB2YWx1ZSkgewogICAgICAgIC8qKiBAdHlwZSB7c3RyaW5nfSAqLwogICAgICAgIGxldCBwcm9wUGF0aDsKICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PSAxKSB7CiAgICAgICAgICAvLyBHZXQgdmFsdWUgaWYgbm90IHN1cHBsaWVkCiAgICAgICAgICBsZXQgaW5mbyA9IHtwYXRoOiAnJ307CiAgICAgICAgICB2YWx1ZSA9IFBvbHltZXIuUGF0aC5nZXQodGhpcywgcGF0aCwgaW5mbyk7CiAgICAgICAgICBwcm9wUGF0aCA9IGluZm8ucGF0aDsKICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkocGF0aCkpIHsKICAgICAgICAgIC8vIE5vcm1hbGl6ZSBwYXRoIGlmIG5lZWRlZAogICAgICAgICAgcHJvcFBhdGggPSBQb2x5bWVyLlBhdGgubm9ybWFsaXplKHBhdGgpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBwcm9wUGF0aCA9IC8qKiBAdHlwZXtzdHJpbmd9ICovKHBhdGgpOwogICAgICAgIH0KICAgICAgICBpZiAodGhpcy5fc2V0UGVuZGluZ1Byb3BlcnR5T3JQYXRoKHByb3BQYXRoLCB2YWx1ZSwgdHJ1ZSwgdHJ1ZSkpIHsKICAgICAgICAgIHRoaXMuX2ludmFsaWRhdGVQcm9wZXJ0aWVzKCk7CiAgICAgICAgfQogICAgICB9CgogICAgICAvKioKICAgICAgICogRXF1aXZhbGVudCB0byBzdGF0aWMgYGNyZWF0ZVJlYWRPbmx5UHJvcGVydHlgIEFQSSBidXQgY2FuIGJlIGNhbGxlZCBvbgogICAgICAgKiBhbiBpbnN0YW5jZSB0byBhZGQgZWZmZWN0cyBhdCBydW50aW1lLiAgU2VlIHRoYXQgbWV0aG9kIGZvcgogICAgICAgKiBmdWxsIEFQSSBkb2NzLgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkgUHJvcGVydHkgbmFtZQogICAgICAgKiBAcGFyYW0ge2Jvb2xlYW49fSBwcm90ZWN0ZWRTZXR0ZXIgQ3JlYXRlcyBhIGN1c3RvbSBwcm90ZWN0ZWQgc2V0dGVyCiAgICAgICAqICAgd2hlbiBgdHJ1ZWAuCiAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAqIEBwcm90ZWN0ZWQKICAgICAgICovCiAgICAgIF9jcmVhdGVSZWFkT25seVByb3BlcnR5KHByb3BlcnR5LCBwcm90ZWN0ZWRTZXR0ZXIpIHsKICAgICAgICB0aGlzLl9hZGRQcm9wZXJ0eUVmZmVjdChwcm9wZXJ0eSwgVFlQRVMuUkVBRF9PTkxZKTsKICAgICAgICBpZiAocHJvdGVjdGVkU2V0dGVyKSB7CiAgICAgICAgICB0aGlzWydfc2V0JyArIHVwcGVyKHByb3BlcnR5KV0gPSAvKiogQHRoaXMge1Byb3BlcnR5RWZmZWN0c30gKi9mdW5jdGlvbih2YWx1ZSkgewogICAgICAgICAgICB0aGlzLl9zZXRQcm9wZXJ0eShwcm9wZXJ0eSwgdmFsdWUpOwogICAgICAgICAgfTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBFcXVpdmFsZW50IHRvIHN0YXRpYyBgY3JlYXRlUHJvcGVydHlPYnNlcnZlcmAgQVBJIGJ1dCBjYW4gYmUgY2FsbGVkIG9uCiAgICAgICAqIGFuIGluc3RhbmNlIHRvIGFkZCBlZmZlY3RzIGF0IHJ1bnRpbWUuICBTZWUgdGhhdCBtZXRob2QgZm9yCiAgICAgICAqIGZ1bGwgQVBJIGRvY3MuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eSBQcm9wZXJ0eSBuYW1lCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfGZ1bmN0aW9uKCosKil9IG1ldGhvZCBGdW5jdGlvbiBvciBuYW1lIG9mIG9ic2VydmVyIG1ldGhvZCB0byBjYWxsCiAgICAgICAqIEBwYXJhbSB7Ym9vbGVhbj19IGR5bmFtaWNGbiBXaGV0aGVyIHRoZSBtZXRob2QgbmFtZSBzaG91bGQgYmUgaW5jbHVkZWQgYXMKICAgICAgICogICBhIGRlcGVuZGVuY3kgdG8gdGhlIGVmZmVjdC4KICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICogQHByb3RlY3RlZAogICAgICAgKi8KICAgICAgX2NyZWF0ZVByb3BlcnR5T2JzZXJ2ZXIocHJvcGVydHksIG1ldGhvZCwgZHluYW1pY0ZuKSB7CiAgICAgICAgbGV0IGluZm8gPSB7IHByb3BlcnR5LCBtZXRob2QsIGR5bmFtaWNGbjogQm9vbGVhbihkeW5hbWljRm4pIH07CiAgICAgICAgdGhpcy5fYWRkUHJvcGVydHlFZmZlY3QocHJvcGVydHksIFRZUEVTLk9CU0VSVkUsIHsKICAgICAgICAgIGZuOiBydW5PYnNlcnZlckVmZmVjdCwgaW5mbywgdHJpZ2dlcjoge25hbWU6IHByb3BlcnR5fQogICAgICAgIH0pOwogICAgICAgIGlmIChkeW5hbWljRm4pIHsKICAgICAgICAgIHRoaXMuX2FkZFByb3BlcnR5RWZmZWN0KC8qKiBAdHlwZSB7c3RyaW5nfSAqLyhtZXRob2QpLCBUWVBFUy5PQlNFUlZFLCB7CiAgICAgICAgICAgIGZuOiBydW5PYnNlcnZlckVmZmVjdCwgaW5mbywgdHJpZ2dlcjoge25hbWU6IG1ldGhvZH0KICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIEVxdWl2YWxlbnQgdG8gc3RhdGljIGBjcmVhdGVNZXRob2RPYnNlcnZlcmAgQVBJIGJ1dCBjYW4gYmUgY2FsbGVkIG9uCiAgICAgICAqIGFuIGluc3RhbmNlIHRvIGFkZCBlZmZlY3RzIGF0IHJ1bnRpbWUuICBTZWUgdGhhdCBtZXRob2QgZm9yCiAgICAgICAqIGZ1bGwgQVBJIGRvY3MuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBleHByZXNzaW9uIE1ldGhvZCBleHByZXNzaW9uCiAgICAgICAqIEBwYXJhbSB7Ym9vbGVhbnxPYmplY3Q9fSBkeW5hbWljRm4gQm9vbGVhbiBvciBvYmplY3QgbWFwIGluZGljYXRpbmcKICAgICAgICogICB3aGV0aGVyIG1ldGhvZCBuYW1lcyBzaG91bGQgYmUgaW5jbHVkZWQgYXMgYSBkZXBlbmRlbmN5IHRvIHRoZSBlZmZlY3QuCiAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAqIEBwcm90ZWN0ZWQKICAgICAgICovCiAgICAgIF9jcmVhdGVNZXRob2RPYnNlcnZlcihleHByZXNzaW9uLCBkeW5hbWljRm4pIHsKICAgICAgICBsZXQgc2lnID0gcGFyc2VNZXRob2QoZXhwcmVzc2lvbik7CiAgICAgICAgaWYgKCFzaWcpIHsKICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiTWFsZm9ybWVkIG9ic2VydmVyIGV4cHJlc3Npb24gJyIgKyBleHByZXNzaW9uICsgIiciKTsKICAgICAgICB9CiAgICAgICAgY3JlYXRlTWV0aG9kRWZmZWN0KHRoaXMsIHNpZywgVFlQRVMuT0JTRVJWRSwgcnVuTWV0aG9kRWZmZWN0LCBudWxsLCBkeW5hbWljRm4pOwogICAgICB9CgogICAgICAvKioKICAgICAgICogRXF1aXZhbGVudCB0byBzdGF0aWMgYGNyZWF0ZU5vdGlmeWluZ1Byb3BlcnR5YCBBUEkgYnV0IGNhbiBiZSBjYWxsZWQgb24KICAgICAgICogYW4gaW5zdGFuY2UgdG8gYWRkIGVmZmVjdHMgYXQgcnVudGltZS4gIFNlZSB0aGF0IG1ldGhvZCBmb3IKICAgICAgICogZnVsbCBBUEkgZG9jcy4KICAgICAgICoKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IFByb3BlcnR5IG5hbWUKICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICogQHByb3RlY3RlZAogICAgICAgKi8KICAgICAgX2NyZWF0ZU5vdGlmeWluZ1Byb3BlcnR5KHByb3BlcnR5KSB7CiAgICAgICAgdGhpcy5fYWRkUHJvcGVydHlFZmZlY3QocHJvcGVydHksIFRZUEVTLk5PVElGWSwgewogICAgICAgICAgZm46IHJ1bk5vdGlmeUVmZmVjdCwKICAgICAgICAgIGluZm86IHsKICAgICAgICAgICAgZXZlbnROYW1lOiBDYXNlTWFwLmNhbWVsVG9EYXNoQ2FzZShwcm9wZXJ0eSkgKyAnLWNoYW5nZWQnLAogICAgICAgICAgICBwcm9wZXJ0eTogcHJvcGVydHkKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIEVxdWl2YWxlbnQgdG8gc3RhdGljIGBjcmVhdGVSZWZsZWN0ZWRQcm9wZXJ0eWAgQVBJIGJ1dCBjYW4gYmUgY2FsbGVkIG9uCiAgICAgICAqIGFuIGluc3RhbmNlIHRvIGFkZCBlZmZlY3RzIGF0IHJ1bnRpbWUuICBTZWUgdGhhdCBtZXRob2QgZm9yCiAgICAgICAqIGZ1bGwgQVBJIGRvY3MuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eSBQcm9wZXJ0eSBuYW1lCiAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAqIEBwcm90ZWN0ZWQKICAgICAgICovCiAgICAgIF9jcmVhdGVSZWZsZWN0ZWRQcm9wZXJ0eShwcm9wZXJ0eSkgewogICAgICAgIGxldCBhdHRyID0gdGhpcy5jb25zdHJ1Y3Rvci5hdHRyaWJ1dGVOYW1lRm9yUHJvcGVydHkocHJvcGVydHkpOwogICAgICAgIGlmIChhdHRyWzBdID09PSAnLScpIHsKICAgICAgICAgIGNvbnNvbGUud2FybignUHJvcGVydHkgJyArIHByb3BlcnR5ICsgJyBjYW5ub3QgYmUgcmVmbGVjdGVkIHRvIGF0dHJpYnV0ZSAnICsKICAgICAgICAgICAgYXR0ciArICcgYmVjYXVzZSAiLSIgaXMgbm90IGEgdmFsaWQgc3RhcnRpbmcgYXR0cmlidXRlIG5hbWUuIFVzZSBhIGxvd2VyY2FzZSBmaXJzdCBsZXR0ZXIgZm9yIHRoZSBwcm9wZXJ0eSBpbnN0ZWFkLicpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aGlzLl9hZGRQcm9wZXJ0eUVmZmVjdChwcm9wZXJ0eSwgVFlQRVMuUkVGTEVDVCwgewogICAgICAgICAgICBmbjogcnVuUmVmbGVjdEVmZmVjdCwKICAgICAgICAgICAgaW5mbzogewogICAgICAgICAgICAgIGF0dHJOYW1lOiBhdHRyCiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIEVxdWl2YWxlbnQgdG8gc3RhdGljIGBjcmVhdGVDb21wdXRlZFByb3BlcnR5YCBBUEkgYnV0IGNhbiBiZSBjYWxsZWQgb24KICAgICAgICogYW4gaW5zdGFuY2UgdG8gYWRkIGVmZmVjdHMgYXQgcnVudGltZS4gIFNlZSB0aGF0IG1ldGhvZCBmb3IKICAgICAgICogZnVsbCBBUEkgZG9jcy4KICAgICAgICoKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IE5hbWUgb2YgY29tcHV0ZWQgcHJvcGVydHkgdG8gc2V0CiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBleHByZXNzaW9uIE1ldGhvZCBleHByZXNzaW9uCiAgICAgICAqIEBwYXJhbSB7Ym9vbGVhbnxPYmplY3Q9fSBkeW5hbWljRm4gQm9vbGVhbiBvciBvYmplY3QgbWFwIGluZGljYXRpbmcKICAgICAgICogICB3aGV0aGVyIG1ldGhvZCBuYW1lcyBzaG91bGQgYmUgaW5jbHVkZWQgYXMgYSBkZXBlbmRlbmN5IHRvIHRoZSBlZmZlY3QuCiAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAqIEBwcm90ZWN0ZWQKICAgICAgICovCiAgICAgIF9jcmVhdGVDb21wdXRlZFByb3BlcnR5KHByb3BlcnR5LCBleHByZXNzaW9uLCBkeW5hbWljRm4pIHsKICAgICAgICBsZXQgc2lnID0gcGFyc2VNZXRob2QoZXhwcmVzc2lvbik7CiAgICAgICAgaWYgKCFzaWcpIHsKICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiTWFsZm9ybWVkIGNvbXB1dGVkIGV4cHJlc3Npb24gJyIgKyBleHByZXNzaW9uICsgIiciKTsKICAgICAgICB9CiAgICAgICAgY3JlYXRlTWV0aG9kRWZmZWN0KHRoaXMsIHNpZywgVFlQRVMuQ09NUFVURSwgcnVuQ29tcHV0ZWRFZmZlY3QsIHByb3BlcnR5LCBkeW5hbWljRm4pOwogICAgICB9CgogICAgICAvKioKICAgICAgICogR2F0aGVyIHRoZSBhcmd1bWVudCB2YWx1ZXMgZm9yIGEgbWV0aG9kIHNwZWNpZmllZCBpbiB0aGUgcHJvdmlkZWQgYXJyYXkKICAgICAgICogb2YgYXJndW1lbnQgbWV0YWRhdGEuCiAgICAgICAqCiAgICAgICAqIFRoZSBgcGF0aGAgYW5kIGB2YWx1ZWAgYXJndW1lbnRzIGFyZSB1c2VkIHRvIGZpbGwgaW4gd2lsZGNhcmQgZGVzY3JpcHRvcgogICAgICAgKiB3aGVuIHRoZSBtZXRob2QgaXMgYmVpbmcgY2FsbGVkIGFzIGEgcmVzdWx0IG9mIGEgcGF0aCBub3RpZmljYXRpb24uCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7IUFycmF5PCFNZXRob2RBcmc+fSBhcmdzIEFycmF5IG9mIGFyZ3VtZW50IG1ldGFkYXRhCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIFByb3BlcnR5L3BhdGggbmFtZSB0aGF0IHRyaWdnZXJlZCB0aGUgbWV0aG9kIGVmZmVjdAogICAgICAgKiBAcGFyYW0ge09iamVjdH0gcHJvcHMgQmFnIG9mIGN1cnJlbnQgcHJvcGVydHkgY2hhbmdlcwogICAgICAgKiBAcmV0dXJuIHtBcnJheTwqPn0gQXJyYXkgb2YgYXJndW1lbnQgdmFsdWVzCiAgICAgICAqIEBwcml2YXRlCiAgICAgICAqLwogICAgICBfbWFyc2hhbEFyZ3MoYXJncywgcGF0aCwgcHJvcHMpIHsKICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5fX2RhdGE7CiAgICAgICAgbGV0IHZhbHVlcyA9IFtdOwogICAgICAgIGZvciAobGV0IGk9MCwgbD1hcmdzLmxlbmd0aDsgaTxsOyBpKyspIHsKICAgICAgICAgIGxldCBhcmcgPSBhcmdzW2ldOwogICAgICAgICAgbGV0IG5hbWUgPSBhcmcubmFtZTsKICAgICAgICAgIGxldCB2OwogICAgICAgICAgaWYgKGFyZy5saXRlcmFsKSB7CiAgICAgICAgICAgIHYgPSBhcmcudmFsdWU7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpZiAoYXJnLnN0cnVjdHVyZWQpIHsKICAgICAgICAgICAgICB2ID0gUG9seW1lci5QYXRoLmdldChkYXRhLCBuYW1lKTsKICAgICAgICAgICAgICAvLyB3aGVuIGRhdGEgaXMgbm90IHN0b3JlZCBlLmcuIGBzcGxpY2VzYAogICAgICAgICAgICAgIGlmICh2ID09PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgICAgIHYgPSBwcm9wc1tuYW1lXTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgdiA9IGRhdGFbbmFtZV07CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGlmIChhcmcud2lsZGNhcmQpIHsKICAgICAgICAgICAgLy8gT25seSBzZW5kIHRoZSBhY3R1YWwgcGF0aCBjaGFuZ2VkIGluZm8gaWYgdGhlIGNoYW5nZSB0aGF0CiAgICAgICAgICAgIC8vIGNhdXNlZCB0aGUgb2JzZXJ2ZXIgdG8gcnVuIG1hdGNoZWQgdGhlIHdpbGRjYXJkCiAgICAgICAgICAgIGxldCBiYXNlQ2hhbmdlZCA9IChuYW1lLmluZGV4T2YocGF0aCArICcuJykgPT09IDApOwogICAgICAgICAgICBsZXQgbWF0Y2hlcyA9IChwYXRoLmluZGV4T2YobmFtZSkgPT09IDAgJiYgIWJhc2VDaGFuZ2VkKTsKICAgICAgICAgICAgdmFsdWVzW2ldID0gewogICAgICAgICAgICAgIHBhdGg6IG1hdGNoZXMgPyBwYXRoIDogbmFtZSwKICAgICAgICAgICAgICB2YWx1ZTogbWF0Y2hlcyA/IHByb3BzW3BhdGhdIDogdiwKICAgICAgICAgICAgICBiYXNlOiB2CiAgICAgICAgICAgIH07CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB2YWx1ZXNbaV0gPSB2OwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gdmFsdWVzOwogICAgICB9CgogICAgICAvLyAtLSBzdGF0aWMgY2xhc3MgbWV0aG9kcyAtLS0tLS0tLS0tLS0KCiAgICAgIC8qKgogICAgICAgKiBFbnN1cmVzIGFuIGFjY2Vzc29yIGV4aXN0cyBmb3IgdGhlIHNwZWNpZmllZCBwcm9wZXJ0eSwgYW5kIGFkZHMKICAgICAgICogdG8gYSBsaXN0IG9mICJwcm9wZXJ0eSBlZmZlY3RzIiB0aGF0IHdpbGwgcnVuIHdoZW4gdGhlIGFjY2Vzc29yIGZvcgogICAgICAgKiB0aGUgc3BlY2lmaWVkIHByb3BlcnR5IGlzIHNldC4gIEVmZmVjdHMgYXJlIGdyb3VwZWQgYnkgInR5cGUiLCB3aGljaAogICAgICAgKiByb3VnaGx5IGNvcnJlc3BvbmRzIHRvIGEgcGhhc2UgaW4gZWZmZWN0IHByb2Nlc3NpbmcuICBUaGUgZWZmZWN0CiAgICAgICAqIG1ldGFkYXRhIHNob3VsZCBiZSBpbiB0aGUgZm9sbG93aW5nIGZvcm06CiAgICAgICAqCiAgICAgICAqICAgICB7CiAgICAgICAqICAgICAgIGZuOiBlZmZlY3RGdW5jdGlvbiwgLy8gUmVmZXJlbmNlIHRvIGZ1bmN0aW9uIHRvIGNhbGwgdG8gcGVyZm9ybSBlZmZlY3QKICAgICAgICogICAgICAgaW5mbzogeyAuLi4gfSAgICAgICAvLyBFZmZlY3QgbWV0YWRhdGEgcGFzc2VkIHRvIGZ1bmN0aW9uCiAgICAgICAqICAgICAgIHRyaWdnZXI6IHsgICAgICAgICAgLy8gT3B0aW9uYWwgdHJpZ2dlcmluZyBtZXRhZGF0YTsgaWYgbm90IHByb3ZpZGVkCiAgICAgICAqICAgICAgICAgbmFtZTogc3RyaW5nICAgICAgLy8gdGhlIHByb3BlcnR5IGlzIHRyZWF0ZWQgYXMgYSB3aWxkY2FyZAogICAgICAgKiAgICAgICAgIHN0cnVjdHVyZWQ6IGJvb2xlYW4KICAgICAgICogICAgICAgICB3aWxkY2FyZDogYm9vbGVhbgogICAgICAgKiAgICAgICB9CiAgICAgICAqICAgICB9CiAgICAgICAqCiAgICAgICAqIEVmZmVjdHMgYXJlIGNhbGxlZCBmcm9tIGBfcHJvcGVydGllc0NoYW5nZWRgIGluIHRoZSBmb2xsb3dpbmcgb3JkZXIgYnkKICAgICAgICogdHlwZToKICAgICAgICoKICAgICAgICogMS4gQ09NUFVURQogICAgICAgKiAyLiBQUk9QQUdBVEUKICAgICAgICogMy4gUkVGTEVDVAogICAgICAgKiA0LiBPQlNFUlZFCiAgICAgICAqIDUuIE5PVElGWQogICAgICAgKgogICAgICAgKiBFZmZlY3QgZnVuY3Rpb25zIGFyZSBjYWxsZWQgd2l0aCB0aGUgZm9sbG93aW5nIHNpZ25hdHVyZToKICAgICAgICoKICAgICAgICogICAgIGVmZmVjdEZ1bmN0aW9uKGluc3QsIHBhdGgsIHByb3BzLCBvbGRQcm9wcywgaW5mbywgaGFzUGF0aHMpCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eSBQcm9wZXJ0eSB0aGF0IHNob3VsZCB0cmlnZ2VyIHRoZSBlZmZlY3QKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgRWZmZWN0IHR5cGUsIGZyb20gdGhpcy5QUk9QRVJUWV9FRkZFQ1RfVFlQRVMKICAgICAgICogQHBhcmFtIHtPYmplY3Q9fSBlZmZlY3QgRWZmZWN0IG1ldGFkYXRhIG9iamVjdAogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKiBAcHJvdGVjdGVkCiAgICAgICAqLwogICAgICBzdGF0aWMgYWRkUHJvcGVydHlFZmZlY3QocHJvcGVydHksIHR5cGUsIGVmZmVjdCkgewogICAgICAgIHRoaXMucHJvdG90eXBlLl9hZGRQcm9wZXJ0eUVmZmVjdChwcm9wZXJ0eSwgdHlwZSwgZWZmZWN0KTsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIENyZWF0ZXMgYSBzaW5nbGUtcHJvcGVydHkgb2JzZXJ2ZXIgZm9yIHRoZSBnaXZlbiBwcm9wZXJ0eS4KICAgICAgICoKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IFByb3BlcnR5IG5hbWUKICAgICAgICogQHBhcmFtIHtzdHJpbmd8ZnVuY3Rpb24oKiwqKX0gbWV0aG9kIEZ1bmN0aW9uIG9yIG5hbWUgb2Ygb2JzZXJ2ZXIgbWV0aG9kIHRvIGNhbGwKICAgICAgICogQHBhcmFtIHtib29sZWFuPX0gZHluYW1pY0ZuIFdoZXRoZXIgdGhlIG1ldGhvZCBuYW1lIHNob3VsZCBiZSBpbmNsdWRlZCBhcwogICAgICAgKiAgIGEgZGVwZW5kZW5jeSB0byB0aGUgZWZmZWN0LgogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKiBAcHJvdGVjdGVkCiAgICAgICAqLwogICAgICBzdGF0aWMgY3JlYXRlUHJvcGVydHlPYnNlcnZlcihwcm9wZXJ0eSwgbWV0aG9kLCBkeW5hbWljRm4pIHsKICAgICAgICB0aGlzLnByb3RvdHlwZS5fY3JlYXRlUHJvcGVydHlPYnNlcnZlcihwcm9wZXJ0eSwgbWV0aG9kLCBkeW5hbWljRm4pOwogICAgICB9CgogICAgICAvKioKICAgICAgICogQ3JlYXRlcyBhIG11bHRpLXByb3BlcnR5ICJtZXRob2Qgb2JzZXJ2ZXIiIGJhc2VkIG9uIHRoZSBwcm92aWRlZAogICAgICAgKiBleHByZXNzaW9uLCB3aGljaCBzaG91bGQgYmUgYSBzdHJpbmcgaW4gdGhlIGZvcm0gb2YgYSBub3JtYWwgSmF2YVNjcmlwdAogICAgICAgKiBmdW5jdGlvbiBzaWduYXR1cmU6IGAnbWV0aG9kTmFtZShhcmcxLCBbLi4uLCBhcmduXSknYC4gIEVhY2ggYXJndW1lbnQKICAgICAgICogc2hvdWxkIGNvcnJlc3BvbmQgdG8gYSBwcm9wZXJ0eSBvciBwYXRoIGluIHRoZSBjb250ZXh0IG9mIHRoaXMKICAgICAgICogcHJvdG90eXBlIChvciBpbnN0YW5jZSksIG9yIG1heSBiZSBhIGxpdGVyYWwgc3RyaW5nIG9yIG51bWJlci4KICAgICAgICoKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IGV4cHJlc3Npb24gTWV0aG9kIGV4cHJlc3Npb24KICAgICAgICogQHBhcmFtIHtib29sZWFufE9iamVjdD19IGR5bmFtaWNGbiBCb29sZWFuIG9yIG9iamVjdCBtYXAgaW5kaWNhdGluZwogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKiAgIHdoZXRoZXIgbWV0aG9kIG5hbWVzIHNob3VsZCBiZSBpbmNsdWRlZCBhcyBhIGRlcGVuZGVuY3kgdG8gdGhlIGVmZmVjdC4KICAgICAgICogQHByb3RlY3RlZAogICAgICAgKi8KICAgICAgc3RhdGljIGNyZWF0ZU1ldGhvZE9ic2VydmVyKGV4cHJlc3Npb24sIGR5bmFtaWNGbikgewogICAgICAgIHRoaXMucHJvdG90eXBlLl9jcmVhdGVNZXRob2RPYnNlcnZlcihleHByZXNzaW9uLCBkeW5hbWljRm4pOwogICAgICB9CgogICAgICAvKioKICAgICAgICogQ2F1c2VzIHRoZSBzZXR0ZXIgZm9yIHRoZSBnaXZlbiBwcm9wZXJ0eSB0byBkaXNwYXRjaCBgPHByb3BlcnR5Pi1jaGFuZ2VkYAogICAgICAgKiBldmVudHMgdG8gbm90aWZ5IG9mIGNoYW5nZXMgdG8gdGhlIHByb3BlcnR5LgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkgUHJvcGVydHkgbmFtZQogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKiBAcHJvdGVjdGVkCiAgICAgICAqLwogICAgICBzdGF0aWMgY3JlYXRlTm90aWZ5aW5nUHJvcGVydHkocHJvcGVydHkpIHsKICAgICAgICB0aGlzLnByb3RvdHlwZS5fY3JlYXRlTm90aWZ5aW5nUHJvcGVydHkocHJvcGVydHkpOwogICAgICB9CgogICAgICAvKioKICAgICAgICogQ3JlYXRlcyBhIHJlYWQtb25seSBhY2Nlc3NvciBmb3IgdGhlIGdpdmVuIHByb3BlcnR5LgogICAgICAgKgogICAgICAgKiBUbyBzZXQgdGhlIHByb3BlcnR5LCB1c2UgdGhlIHByb3RlY3RlZCBgX3NldFByb3BlcnR5YCBBUEkuCiAgICAgICAqIFRvIGNyZWF0ZSBhIGN1c3RvbSBwcm90ZWN0ZWQgc2V0dGVyIChlLmcuIGBfc2V0TXlQcm9wKClgIGZvcgogICAgICAgKiBwcm9wZXJ0eSBgbXlQcm9wYCksIHBhc3MgYHRydWVgIGZvciBgcHJvdGVjdGVkU2V0dGVyYC4KICAgICAgICoKICAgICAgICogTm90ZSwgaWYgdGhlIHByb3BlcnR5IHdpbGwgaGF2ZSBvdGhlciBwcm9wZXJ0eSBlZmZlY3RzLCB0aGlzIG1ldGhvZAogICAgICAgKiBzaG91bGQgYmUgY2FsbGVkIGZpcnN0LCBiZWZvcmUgYWRkaW5nIG90aGVyIGVmZmVjdHMuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eSBQcm9wZXJ0eSBuYW1lCiAgICAgICAqIEBwYXJhbSB7Ym9vbGVhbj19IHByb3RlY3RlZFNldHRlciBDcmVhdGVzIGEgY3VzdG9tIHByb3RlY3RlZCBzZXR0ZXIKICAgICAgICogICB3aGVuIGB0cnVlYC4KICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICogQHByb3RlY3RlZAogICAgICAgKi8KICAgICAgc3RhdGljIGNyZWF0ZVJlYWRPbmx5UHJvcGVydHkocHJvcGVydHksIHByb3RlY3RlZFNldHRlcikgewogICAgICAgIHRoaXMucHJvdG90eXBlLl9jcmVhdGVSZWFkT25seVByb3BlcnR5KHByb3BlcnR5LCBwcm90ZWN0ZWRTZXR0ZXIpOwogICAgICB9CgogICAgICAvKioKICAgICAgICogQ2F1c2VzIHRoZSBzZXR0ZXIgZm9yIHRoZSBnaXZlbiBwcm9wZXJ0eSB0byByZWZsZWN0IHRoZSBwcm9wZXJ0eSB2YWx1ZQogICAgICAgKiB0byBhIChkYXNoLWNhc2VkKSBhdHRyaWJ1dGUgb2YgdGhlIHNhbWUgbmFtZS4KICAgICAgICoKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IFByb3BlcnR5IG5hbWUKICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICogQHByb3RlY3RlZAogICAgICAgKi8KICAgICAgc3RhdGljIGNyZWF0ZVJlZmxlY3RlZFByb3BlcnR5KHByb3BlcnR5KSB7CiAgICAgICAgdGhpcy5wcm90b3R5cGUuX2NyZWF0ZVJlZmxlY3RlZFByb3BlcnR5KHByb3BlcnR5KTsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIENyZWF0ZXMgYSBjb21wdXRlZCBwcm9wZXJ0eSB3aG9zZSB2YWx1ZSBpcyBzZXQgdG8gdGhlIHJlc3VsdCBvZiB0aGUKICAgICAgICogbWV0aG9kIGRlc2NyaWJlZCBieSB0aGUgZ2l2ZW4gYGV4cHJlc3Npb25gIGVhY2ggdGltZSBvbmUgb3IgbW9yZQogICAgICAgKiBhcmd1bWVudHMgdG8gdGhlIG1ldGhvZCBjaGFuZ2VzLiAgVGhlIGV4cHJlc3Npb24gc2hvdWxkIGJlIGEgc3RyaW5nCiAgICAgICAqIGluIHRoZSBmb3JtIG9mIGEgbm9ybWFsIEphdmFTY3JpcHQgZnVuY3Rpb24gc2lnbmF0dXJlOgogICAgICAgKiBgJ21ldGhvZE5hbWUoYXJnMSwgWy4uLiwgYXJnbl0pJ2AKICAgICAgICoKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IE5hbWUgb2YgY29tcHV0ZWQgcHJvcGVydHkgdG8gc2V0CiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBleHByZXNzaW9uIE1ldGhvZCBleHByZXNzaW9uCiAgICAgICAqIEBwYXJhbSB7Ym9vbGVhbnxPYmplY3Q9fSBkeW5hbWljRm4gQm9vbGVhbiBvciBvYmplY3QgbWFwIGluZGljYXRpbmcgd2hldGhlcgogICAgICAgKiAgIG1ldGhvZCBuYW1lcyBzaG91bGQgYmUgaW5jbHVkZWQgYXMgYSBkZXBlbmRlbmN5IHRvIHRoZSBlZmZlY3QuCiAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAqIEBwcm90ZWN0ZWQKICAgICAgICovCiAgICAgIHN0YXRpYyBjcmVhdGVDb21wdXRlZFByb3BlcnR5KHByb3BlcnR5LCBleHByZXNzaW9uLCBkeW5hbWljRm4pIHsKICAgICAgICB0aGlzLnByb3RvdHlwZS5fY3JlYXRlQ29tcHV0ZWRQcm9wZXJ0eShwcm9wZXJ0eSwgZXhwcmVzc2lvbiwgZHluYW1pY0ZuKTsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIFBhcnNlcyB0aGUgcHJvdmlkZWQgdGVtcGxhdGUgdG8gZW5zdXJlIGJpbmRpbmcgZWZmZWN0cyBhcmUgY3JlYXRlZAogICAgICAgKiBmb3IgdGhlbSwgYW5kIHRoZW4gZW5zdXJlcyBwcm9wZXJ0eSBhY2Nlc3NvcnMgYXJlIGNyZWF0ZWQgZm9yIGFueQogICAgICAgKiBkZXBlbmRlbnQgcHJvcGVydGllcyBpbiB0aGUgdGVtcGxhdGUuICBCaW5kaW5nIGVmZmVjdHMgZm9yIGJvdW5kCiAgICAgICAqIHRlbXBsYXRlcyBhcmUgc3RvcmVkIGluIGEgbGlua2VkIGxpc3Qgb24gdGhlIGluc3RhbmNlIHNvIHRoYXQKICAgICAgICogdGVtcGxhdGVzIGNhbiBiZSBlZmZpY2llbnRseSBzdGFtcGVkIGFuZCB1bnN0YW1wZWQuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7IUhUTUxUZW1wbGF0ZUVsZW1lbnR9IHRlbXBsYXRlIFRlbXBsYXRlIGNvbnRhaW5pbmcgYmluZGluZwogICAgICAgKiAgIGJpbmRpbmdzCiAgICAgICAqIEByZXR1cm4geyFUZW1wbGF0ZUluZm99IFRlbXBsYXRlIG1ldGFkYXRhIG9iamVjdAogICAgICAgKiBAcHJvdGVjdGVkCiAgICAgICAqLwogICAgICBzdGF0aWMgYmluZFRlbXBsYXRlKHRlbXBsYXRlKSB7CiAgICAgICAgcmV0dXJuIHRoaXMucHJvdG90eXBlLl9iaW5kVGVtcGxhdGUodGVtcGxhdGUpOwogICAgICB9CgogICAgICAvLyAtLSBiaW5kaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICAgIC8qKgogICAgICAgKiBFcXVpdmFsZW50IHRvIHN0YXRpYyBgYmluZFRlbXBsYXRlYCBBUEkgYnV0IGNhbiBiZSBjYWxsZWQgb24KICAgICAgICogYW4gaW5zdGFuY2UgdG8gYWRkIGVmZmVjdHMgYXQgcnVudGltZS4gIFNlZSB0aGF0IG1ldGhvZCBmb3IKICAgICAgICogZnVsbCBBUEkgZG9jcy4KICAgICAgICoKICAgICAgICogVGhpcyBtZXRob2QgbWF5IGJlIGNhbGxlZCBvbiB0aGUgcHJvdG90eXBlIChmb3IgcHJvdG90eXBpY2FsIHRlbXBsYXRlCiAgICAgICAqIGJpbmRpbmcsIHRvIGF2b2lkIGNyZWF0aW5nIGFjY2Vzc29ycyBldmVyeSBpbnN0YW5jZSkgb25jZSBwZXIgcHJvdG90eXBlLAogICAgICAgKiBhbmQgd2lsbCBiZSBjYWxsZWQgd2l0aCBgcnVudGltZUJpbmRpbmc6IHRydWVgIGJ5IGBfc3RhbXBUZW1wbGF0ZWAgdG8KICAgICAgICogY3JlYXRlIGFuZCBsaW5rIGFuIGluc3RhbmNlIG9mIHRoZSB0ZW1wbGF0ZSBtZXRhZGF0YSBhc3NvY2lhdGVkIHdpdGggYQogICAgICAgKiBwYXJ0aWN1bGFyIHN0YW1waW5nLgogICAgICAgKgogICAgICAgKiBAcGFyYW0geyFIVE1MVGVtcGxhdGVFbGVtZW50fSB0ZW1wbGF0ZSBUZW1wbGF0ZSBjb250YWluaW5nIGJpbmRpbmcKICAgICAgICogICBiaW5kaW5ncwogICAgICAgKiBAcGFyYW0ge2Jvb2xlYW49fSBpbnN0YW5jZUJpbmRpbmcgV2hlbiBmYWxzZSAoZGVmYXVsdCksIHBlcmZvcm1zCiAgICAgICAqICAgInByb3RvdHlwaWNhbCIgYmluZGluZyBvZiB0aGUgdGVtcGxhdGUgYW5kIG92ZXJ3cml0ZXMgYW55IHByZXZpb3VzbHkKICAgICAgICogICBib3VuZCB0ZW1wbGF0ZSBmb3IgdGhlIGNsYXNzLiBXaGVuIHRydWUgKGFzIHBhc3NlZCBmcm9tCiAgICAgICAqICAgYF9zdGFtcFRlbXBsYXRlYCksIHRoZSB0ZW1wbGF0ZSBpbmZvIGlzIGluc3RhbmNlZCBhbmQgbGlua2VkIGludG8KICAgICAgICogICB0aGUgbGlzdCBvZiBib3VuZCB0ZW1wbGF0ZXMuCiAgICAgICAqIEByZXR1cm4geyFUZW1wbGF0ZUluZm99IFRlbXBsYXRlIG1ldGFkYXRhIG9iamVjdDsgZm9yIGBydW50aW1lQmluZGluZ2AsCiAgICAgICAqICAgdGhpcyBpcyBhbiBpbnN0YW5jZSBvZiB0aGUgcHJvdG90eXBpY2FsIHRlbXBsYXRlIGluZm8KICAgICAgICogQHByb3RlY3RlZAogICAgICAgKi8KICAgICAgX2JpbmRUZW1wbGF0ZSh0ZW1wbGF0ZSwgaW5zdGFuY2VCaW5kaW5nKSB7CiAgICAgICAgbGV0IHRlbXBsYXRlSW5mbyA9IHRoaXMuY29uc3RydWN0b3IuX3BhcnNlVGVtcGxhdGUodGVtcGxhdGUpOwogICAgICAgIGxldCB3YXNQcmVCb3VuZCA9IHRoaXMuX190ZW1wbGF0ZUluZm8gPT0gdGVtcGxhdGVJbmZvOwogICAgICAgIC8vIE9wdGltaXphdGlvbjogc2luY2UgdGhpcyBpcyBjYWxsZWQgdHdpY2UgZm9yIHByb3RvLWJvdW5kIHRlbXBsYXRlcywKICAgICAgICAvLyBkb24ndCBhdHRlbXB0IHRvIHJlY3JlYXRlIGFjY2Vzc29ycyBpZiB0aGlzIHRlbXBsYXRlIHdhcyBwcmUtYm91bmQKICAgICAgICBpZiAoIXdhc1ByZUJvdW5kKSB7CiAgICAgICAgICBmb3IgKGxldCBwcm9wIGluIHRlbXBsYXRlSW5mby5wcm9wZXJ0eUVmZmVjdHMpIHsKICAgICAgICAgICAgdGhpcy5fY3JlYXRlUHJvcGVydHlBY2Nlc3Nvcihwcm9wKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKGluc3RhbmNlQmluZGluZykgewogICAgICAgICAgLy8gRm9yIGluc3RhbmNlLXRpbWUgYmluZGluZywgY3JlYXRlIGluc3RhbmNlIG9mIHRlbXBsYXRlIG1ldGFkYXRhCiAgICAgICAgICAvLyBhbmQgbGluayBpbnRvIGxpc3Qgb2YgdGVtcGxhdGVzIGlmIG5lY2Vzc2FyeQogICAgICAgICAgdGVtcGxhdGVJbmZvID0gLyoqIEB0eXBlIHshVGVtcGxhdGVJbmZvfSAqLyhPYmplY3QuY3JlYXRlKHRlbXBsYXRlSW5mbykpOwogICAgICAgICAgdGVtcGxhdGVJbmZvLndhc1ByZUJvdW5kID0gd2FzUHJlQm91bmQ7CiAgICAgICAgICBpZiAoIXdhc1ByZUJvdW5kICYmIHRoaXMuX190ZW1wbGF0ZUluZm8pIHsKICAgICAgICAgICAgbGV0IGxhc3QgPSB0aGlzLl9fdGVtcGxhdGVJbmZvTGFzdCB8fCB0aGlzLl9fdGVtcGxhdGVJbmZvOwogICAgICAgICAgICB0aGlzLl9fdGVtcGxhdGVJbmZvTGFzdCA9IGxhc3QubmV4dFRlbXBsYXRlSW5mbyA9IHRlbXBsYXRlSW5mbzsKICAgICAgICAgICAgdGVtcGxhdGVJbmZvLnByZXZpb3VzVGVtcGxhdGVJbmZvID0gbGFzdDsKICAgICAgICAgICAgcmV0dXJuIHRlbXBsYXRlSW5mbzsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRoaXMuX190ZW1wbGF0ZUluZm8gPSB0ZW1wbGF0ZUluZm87CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBBZGRzIGEgcHJvcGVydHkgZWZmZWN0IHRvIHRoZSBnaXZlbiB0ZW1wbGF0ZSBtZXRhZGF0YSwgd2hpY2ggaXMgcnVuCiAgICAgICAqIGF0IHRoZSAicHJvcGFnYXRlIiBzdGFnZSBvZiBgX3Byb3BlcnRpZXNDaGFuZ2VkYCB3aGVuIHRoZSB0ZW1wbGF0ZQogICAgICAgKiBoYXMgYmVlbiBib3VuZCB0byB0aGUgZWxlbWVudCB2aWEgYF9iaW5kVGVtcGxhdGVgLgogICAgICAgKgogICAgICAgKiBUaGUgYGVmZmVjdGAgb2JqZWN0IHNob3VsZCBtYXRjaCB0aGUgZm9ybWF0IGluIGBfYWRkUHJvcGVydHlFZmZlY3RgLgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge09iamVjdH0gdGVtcGxhdGVJbmZvIFRlbXBsYXRlIG1ldGFkYXRhIHRvIGFkZCBlZmZlY3QgdG8KICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHByb3AgUHJvcGVydHkgdGhhdCBzaG91bGQgdHJpZ2dlciB0aGUgZWZmZWN0CiAgICAgICAqIEBwYXJhbSB7T2JqZWN0PX0gZWZmZWN0IEVmZmVjdCBtZXRhZGF0YSBvYmplY3QKICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICogQHByb3RlY3RlZAogICAgICAgKi8KICAgICAgc3RhdGljIF9hZGRUZW1wbGF0ZVByb3BlcnR5RWZmZWN0KHRlbXBsYXRlSW5mbywgcHJvcCwgZWZmZWN0KSB7CiAgICAgICAgbGV0IGhvc3RQcm9wcyA9IHRlbXBsYXRlSW5mby5ob3N0UHJvcHMgPSB0ZW1wbGF0ZUluZm8uaG9zdFByb3BzIHx8IHt9OwogICAgICAgIGhvc3RQcm9wc1twcm9wXSA9IHRydWU7CiAgICAgICAgbGV0IGVmZmVjdHMgPSB0ZW1wbGF0ZUluZm8ucHJvcGVydHlFZmZlY3RzID0gdGVtcGxhdGVJbmZvLnByb3BlcnR5RWZmZWN0cyB8fCB7fTsKICAgICAgICBsZXQgcHJvcEVmZmVjdHMgPSBlZmZlY3RzW3Byb3BdID0gZWZmZWN0c1twcm9wXSB8fCBbXTsKICAgICAgICBwcm9wRWZmZWN0cy5wdXNoKGVmZmVjdCk7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBTdGFtcHMgdGhlIHByb3ZpZGVkIHRlbXBsYXRlIGFuZCBwZXJmb3JtcyBpbnN0YW5jZS10aW1lIHNldHVwIGZvcgogICAgICAgKiBQb2x5bWVyIHRlbXBsYXRlIGZlYXR1cmVzLCBpbmNsdWRpbmcgZGF0YSBiaW5kaW5ncywgZGVjbGFyYXRpdmUgZXZlbnQKICAgICAgICogbGlzdGVuZXJzLCBhbmQgdGhlIGB0aGlzLiRgIG1hcCBvZiBgaWRgJ3MgdG8gbm9kZXMuICBBIGRvY3VtZW50IGZyYWdtZW50CiAgICAgICAqIGlzIHJldHVybmVkIGNvbnRhaW5pbmcgdGhlIHN0YW1wZWQgRE9NLCByZWFkeSBmb3IgaW5zZXJ0aW9uIGludG8gdGhlCiAgICAgICAqIERPTS4KICAgICAgICoKICAgICAgICogVGhpcyBtZXRob2QgbWF5IGJlIGNhbGxlZCBtb3JlIHRoYW4gb25jZTsgaG93ZXZlciBub3RlIHRoYXQgZHVlIHRvCiAgICAgICAqIGBzaGFkeWNzc2AgcG9seWZpbGwgbGltaXRhdGlvbnMsIG9ubHkgc3R5bGVzIGZyb20gdGVtcGxhdGVzIHByZXBhcmVkCiAgICAgICAqIHVzaW5nIGBTaGFkeUNTUy5wcmVwYXJlVGVtcGxhdGVgIHdpbGwgYmUgY29ycmVjdGx5IHBvbHlmaWxsZWQgKHNjb3BlZAogICAgICAgKiB0byB0aGUgc2hhZG93IHJvb3QgYW5kIHN1cHBvcnQgQ1NTIGN1c3RvbSBwcm9wZXJ0aWVzKSwgYW5kIG5vdGUgdGhhdAogICAgICAgKiBgU2hhZHlDU1MucHJlcGFyZVRlbXBsYXRlYCBtYXkgb25seSBiZSBjYWxsZWQgb25jZSBwZXIgZWxlbWVudC4gQXMgc3VjaCwKICAgICAgICogYW55IHN0eWxlcyByZXF1aXJlZCBieSBpbiBydW50aW1lLXN0YW1wZWQgdGVtcGxhdGVzIG11c3QgYmUgaW5jbHVkZWQKICAgICAgICogaW4gdGhlIG1haW4gZWxlbWVudCB0ZW1wbGF0ZS4KICAgICAgICoKICAgICAgICogQHBhcmFtIHshSFRNTFRlbXBsYXRlRWxlbWVudH0gdGVtcGxhdGUgVGVtcGxhdGUgdG8gc3RhbXAKICAgICAgICogQHJldHVybiB7IVN0YW1wZWRUZW1wbGF0ZX0gQ2xvbmVkIHRlbXBsYXRlIGNvbnRlbnQKICAgICAgICogQG92ZXJyaWRlCiAgICAgICAqIEBwcm90ZWN0ZWQKICAgICAgICovCiAgICAgIF9zdGFtcFRlbXBsYXRlKHRlbXBsYXRlKSB7CiAgICAgICAgLy8gRW5zdXJlcyB0aGF0IGNyZWF0ZWQgZG9tIGlzIGBfZW5xdWV1ZUNsaWVudGAnZCB0byB0aGlzIGVsZW1lbnQgc28KICAgICAgICAvLyB0aGF0IGl0IGNhbiBiZSBmbHVzaGVkIG9uIG5leHQgY2FsbCB0byBgX2ZsdXNoUHJvcGVydGllc2AKICAgICAgICBob3N0U3RhY2suYmVnaW5Ib3N0aW5nKHRoaXMpOwogICAgICAgIGxldCBkb20gPSBzdXBlci5fc3RhbXBUZW1wbGF0ZSh0ZW1wbGF0ZSk7CiAgICAgICAgaG9zdFN0YWNrLmVuZEhvc3RpbmcodGhpcyk7CiAgICAgICAgbGV0IHRlbXBsYXRlSW5mbyA9IC8qKiBAdHlwZSB7IVRlbXBsYXRlSW5mb30gKi8odGhpcy5fYmluZFRlbXBsYXRlKHRlbXBsYXRlLCB0cnVlKSk7CiAgICAgICAgLy8gQWRkIHRlbXBsYXRlLWluc3RhbmNlLXNwZWNpZmljIGRhdGEgdG8gaW5zdGFuY2VkIHRlbXBsYXRlSW5mbwogICAgICAgIHRlbXBsYXRlSW5mby5ub2RlTGlzdCA9IGRvbS5ub2RlTGlzdDsKICAgICAgICAvLyBDYXB0dXJlIGNoaWxkIG5vZGVzIHRvIGFsbG93IHVuc3RhbXBpbmcgb2Ygbm9uLXByb3RvdHlwaWNhbCB0ZW1wbGF0ZXMKICAgICAgICBpZiAoIXRlbXBsYXRlSW5mby53YXNQcmVCb3VuZCkgewogICAgICAgICAgbGV0IG5vZGVzID0gdGVtcGxhdGVJbmZvLmNoaWxkTm9kZXMgPSBbXTsKICAgICAgICAgIGZvciAobGV0IG49ZG9tLmZpcnN0Q2hpbGQ7IG47IG49bi5uZXh0U2libGluZykgewogICAgICAgICAgICBub2Rlcy5wdXNoKG4pOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBkb20udGVtcGxhdGVJbmZvID0gdGVtcGxhdGVJbmZvOwogICAgICAgIC8vIFNldHVwIGNvbXBvdW5kIHN0b3JhZ2UsIDItd2F5IGxpc3RlbmVycywgYW5kIGRhdGFIb3N0IGZvciBiaW5kaW5ncwogICAgICAgIHNldHVwQmluZGluZ3ModGhpcywgdGVtcGxhdGVJbmZvKTsKICAgICAgICAvLyBGbHVzaCBwcm9wZXJ0aWVzIGludG8gdGVtcGxhdGUgbm9kZXMgaWYgYWxyZWFkeSBib290ZWQKICAgICAgICBpZiAodGhpcy5fX2RhdGFSZWFkeSkgewogICAgICAgICAgcnVuRWZmZWN0cyh0aGlzLCB0ZW1wbGF0ZUluZm8ucHJvcGVydHlFZmZlY3RzLCB0aGlzLl9fZGF0YSwgbnVsbCwKICAgICAgICAgICAgZmFsc2UsIHRlbXBsYXRlSW5mby5ub2RlTGlzdCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBkb207CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBSZW1vdmVzIGFuZCB1bmJpbmRzIHRoZSBub2RlcyBwcmV2aW91c2x5IGNvbnRhaW5lZCBpbiB0aGUgcHJvdmlkZWQKICAgICAgICogRG9jdW1lbnRGcmFnbWVudCByZXR1cm5lZCBmcm9tIGBfc3RhbXBUZW1wbGF0ZWAuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7IVN0YW1wZWRUZW1wbGF0ZX0gZG9tIERvY3VtZW50RnJhZ21lbnQgcHJldmlvdXNseSByZXR1cm5lZAogICAgICAgKiAgIGZyb20gYF9zdGFtcFRlbXBsYXRlYCBhc3NvY2lhdGVkIHdpdGggdGhlIG5vZGVzIHRvIGJlIHJlbW92ZWQKICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICogQHByb3RlY3RlZAogICAgICAgKi8KICAgICAgX3JlbW92ZUJvdW5kRG9tKGRvbSkgewogICAgICAgIC8vIFVubGluayB0ZW1wbGF0ZSBpbmZvCiAgICAgICAgbGV0IHRlbXBsYXRlSW5mbyA9IGRvbS50ZW1wbGF0ZUluZm87CiAgICAgICAgaWYgKHRlbXBsYXRlSW5mby5wcmV2aW91c1RlbXBsYXRlSW5mbykgewogICAgICAgICAgdGVtcGxhdGVJbmZvLnByZXZpb3VzVGVtcGxhdGVJbmZvLm5leHRUZW1wbGF0ZUluZm8gPQogICAgICAgICAgICB0ZW1wbGF0ZUluZm8ubmV4dFRlbXBsYXRlSW5mbzsKICAgICAgICB9CiAgICAgICAgaWYgKHRlbXBsYXRlSW5mby5uZXh0VGVtcGxhdGVJbmZvKSB7CiAgICAgICAgICB0ZW1wbGF0ZUluZm8ubmV4dFRlbXBsYXRlSW5mby5wcmV2aW91c1RlbXBsYXRlSW5mbyA9CiAgICAgICAgICAgIHRlbXBsYXRlSW5mby5wcmV2aW91c1RlbXBsYXRlSW5mbzsKICAgICAgICB9CiAgICAgICAgaWYgKHRoaXMuX190ZW1wbGF0ZUluZm9MYXN0ID09IHRlbXBsYXRlSW5mbykgewogICAgICAgICAgdGhpcy5fX3RlbXBsYXRlSW5mb0xhc3QgPSB0ZW1wbGF0ZUluZm8ucHJldmlvdXNUZW1wbGF0ZUluZm87CiAgICAgICAgfQogICAgICAgIHRlbXBsYXRlSW5mby5wcmV2aW91c1RlbXBsYXRlSW5mbyA9IHRlbXBsYXRlSW5mby5uZXh0VGVtcGxhdGVJbmZvID0gbnVsbDsKICAgICAgICAvLyBSZW1vdmUgc3RhbXBlZCBub2RlcwogICAgICAgIGxldCBub2RlcyA9IHRlbXBsYXRlSW5mby5jaGlsZE5vZGVzOwogICAgICAgIGZvciAobGV0IGk9MDsgaTxub2Rlcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgbGV0IG5vZGUgPSBub2Rlc1tpXTsKICAgICAgICAgIG5vZGUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChub2RlKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBPdmVycmlkZXMgZGVmYXVsdCBgVGVtcGxhdGVTdGFtcGAgaW1wbGVtZW50YXRpb24gdG8gYWRkIHN1cHBvcnQgZm9yCiAgICAgICAqIHBhcnNpbmcgYmluZGluZ3MgZnJvbSBgVGV4dE5vZGVgJ3MnIGB0ZXh0Q29udGVudGAuICBBIGBiaW5kaW5nc2AKICAgICAgICogYXJyYXkgaXMgYWRkZWQgdG8gYG5vZGVJbmZvYCBhbmQgcG9wdWxhdGVkIHdpdGggYmluZGluZyBtZXRhZGF0YQogICAgICAgKiB3aXRoIGluZm9ybWF0aW9uIGNhcHR1cmluZyB0aGUgYmluZGluZyB0YXJnZXQsIGFuZCBhIGBwYXJ0c2AgYXJyYXkKICAgICAgICogd2l0aCBvbmUgb3IgbW9yZSBtZXRhZGF0YSBvYmplY3RzIGNhcHR1cmluZyB0aGUgc291cmNlKHMpIG9mIHRoZQogICAgICAgKiBiaW5kaW5nLgogICAgICAgKgogICAgICAgKiBAb3ZlcnJpZGUKICAgICAgICogQHBhcmFtIHtOb2RlfSBub2RlIE5vZGUgdG8gcGFyc2UKICAgICAgICogQHBhcmFtIHtUZW1wbGF0ZUluZm99IHRlbXBsYXRlSW5mbyBUZW1wbGF0ZSBtZXRhZGF0YSBmb3IgY3VycmVudCB0ZW1wbGF0ZQogICAgICAgKiBAcGFyYW0ge05vZGVJbmZvfSBub2RlSW5mbyBOb2RlIG1ldGFkYXRhIGZvciBjdXJyZW50IHRlbXBsYXRlIG5vZGUKICAgICAgICogQHJldHVybiB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSB2aXNpdGVkIG5vZGUgYWRkZWQgbm9kZS1zcGVjaWZpYwogICAgICAgKiAgIG1ldGFkYXRhIHRvIGBub2RlSW5mb2AKICAgICAgICogQHByb3RlY3RlZAogICAgICAgKiBAc3VwcHJlc3Mge21pc3NpbmdQcm9wZXJ0aWVzfSBJbnRlcmZhY2VzIGluIGNsb3N1cmUgZG8gbm90IGluaGVyaXQgc3RhdGljcywgYnV0IGNsYXNzZXMgZG8KICAgICAgICovCiAgICAgIHN0YXRpYyBfcGFyc2VUZW1wbGF0ZU5vZGUobm9kZSwgdGVtcGxhdGVJbmZvLCBub2RlSW5mbykgewogICAgICAgIGxldCBub3RlZCA9IHN1cGVyLl9wYXJzZVRlbXBsYXRlTm9kZShub2RlLCB0ZW1wbGF0ZUluZm8sIG5vZGVJbmZvKTsKICAgICAgICBpZiAobm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5URVhUX05PREUpIHsKICAgICAgICAgIGxldCBwYXJ0cyA9IHRoaXMuX3BhcnNlQmluZGluZ3Mobm9kZS50ZXh0Q29udGVudCwgdGVtcGxhdGVJbmZvKTsKICAgICAgICAgIGlmIChwYXJ0cykgewogICAgICAgICAgICAvLyBJbml0aWFsaXplIHRoZSB0ZXh0Q29udGVudCB3aXRoIGFueSBsaXRlcmFsIHBhcnRzCiAgICAgICAgICAgIC8vIE5PVEU6IGRlZmF1bHQgdG8gYSBzcGFjZSBoZXJlIHNvIHRoZSB0ZXh0Tm9kZSByZW1haW5zOyBzb21lIGJyb3dzZXJzCiAgICAgICAgICAgIC8vIChJRSkgb21pdCBhbiBlbXB0eSB0ZXh0Tm9kZSBmb2xsb3dpbmcgY2xvbmVOb2RlL2ltcG9ydE5vZGUuCiAgICAgICAgICAgIG5vZGUudGV4dENvbnRlbnQgPSBsaXRlcmFsRnJvbVBhcnRzKHBhcnRzKSB8fCAnICc7CiAgICAgICAgICAgIGFkZEJpbmRpbmcodGhpcywgdGVtcGxhdGVJbmZvLCBub2RlSW5mbywgJ3RleHQnLCAndGV4dENvbnRlbnQnLCBwYXJ0cyk7CiAgICAgICAgICAgIG5vdGVkID0gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIG5vdGVkOwogICAgICB9CgogICAgICAvKioKICAgICAgICogT3ZlcnJpZGVzIGRlZmF1bHQgYFRlbXBsYXRlU3RhbXBgIGltcGxlbWVudGF0aW9uIHRvIGFkZCBzdXBwb3J0IGZvcgogICAgICAgKiBwYXJzaW5nIGJpbmRpbmdzIGZyb20gYXR0cmlidXRlcy4gIEEgYGJpbmRpbmdzYAogICAgICAgKiBhcnJheSBpcyBhZGRlZCB0byBgbm9kZUluZm9gIGFuZCBwb3B1bGF0ZWQgd2l0aCBiaW5kaW5nIG1ldGFkYXRhCiAgICAgICAqIHdpdGggaW5mb3JtYXRpb24gY2FwdHVyaW5nIHRoZSBiaW5kaW5nIHRhcmdldCwgYW5kIGEgYHBhcnRzYCBhcnJheQogICAgICAgKiB3aXRoIG9uZSBvciBtb3JlIG1ldGFkYXRhIG9iamVjdHMgY2FwdHVyaW5nIHRoZSBzb3VyY2Uocykgb2YgdGhlCiAgICAgICAqIGJpbmRpbmcuCiAgICAgICAqCiAgICAgICAqIEBvdmVycmlkZQogICAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IG5vZGUgTm9kZSB0byBwYXJzZQogICAgICAgKiBAcGFyYW0ge1RlbXBsYXRlSW5mb30gdGVtcGxhdGVJbmZvIFRlbXBsYXRlIG1ldGFkYXRhIGZvciBjdXJyZW50IHRlbXBsYXRlCiAgICAgICAqIEBwYXJhbSB7Tm9kZUluZm99IG5vZGVJbmZvIE5vZGUgbWV0YWRhdGEgZm9yIGN1cnJlbnQgdGVtcGxhdGUgbm9kZQogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBBdHRyaWJ1dGUgbmFtZQogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gdmFsdWUgQXR0cmlidXRlIHZhbHVlCiAgICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgdmlzaXRlZCBub2RlIGFkZGVkIG5vZGUtc3BlY2lmaWMKICAgICAgICogICBtZXRhZGF0YSB0byBgbm9kZUluZm9gCiAgICAgICAqIEBwcm90ZWN0ZWQKICAgICAgICogQHN1cHByZXNzIHttaXNzaW5nUHJvcGVydGllc30gSW50ZXJmYWNlcyBpbiBjbG9zdXJlIGRvIG5vdCBpbmhlcml0IHN0YXRpY3MsIGJ1dCBjbGFzc2VzIGRvCiAgICAgICAqLwogICAgICBzdGF0aWMgX3BhcnNlVGVtcGxhdGVOb2RlQXR0cmlidXRlKG5vZGUsIHRlbXBsYXRlSW5mbywgbm9kZUluZm8sIG5hbWUsIHZhbHVlKSB7CiAgICAgICAgbGV0IHBhcnRzID0gdGhpcy5fcGFyc2VCaW5kaW5ncyh2YWx1ZSwgdGVtcGxhdGVJbmZvKTsKICAgICAgICBpZiAocGFydHMpIHsKICAgICAgICAgIC8vIEF0dHJpYnV0ZSBvciBwcm9wZXJ0eQogICAgICAgICAgbGV0IG9yaWdOYW1lID0gbmFtZTsKICAgICAgICAgIGxldCBraW5kID0gJ3Byb3BlcnR5JzsKICAgICAgICAgIC8vIFRoZSBvbmx5IHdheSB3ZSBzZWUgYSBjYXBpdGFsIGxldHRlciBoZXJlIGlzIGlmIHRoZSBhdHRyIGhhcwogICAgICAgICAgLy8gYSBjYXBpdGFsIGxldHRlciBpbiBpdCBwZXIgc3BlYy4gSW4gdGhpcyBjYXNlLCB0byBtYWtlIHN1cmUKICAgICAgICAgIC8vIHRoaXMgYmluZGluZyB3b3Jrcywgd2UgZ28gYWhlYWQgYW5kIG1ha2UgdGhlIGJpbmRpbmcgdG8gdGhlIGF0dHJpYnV0ZS4KICAgICAgICAgIGlmIChjYXBpdGFsQXR0cmlidXRlUmVnZXgudGVzdChuYW1lKSkgewogICAgICAgICAgICBraW5kID0gJ2F0dHJpYnV0ZSc7CiAgICAgICAgICB9IGVsc2UgaWYgKG5hbWVbbmFtZS5sZW5ndGgtMV0gPT0gJyQnKSB7CiAgICAgICAgICAgIG5hbWUgPSBuYW1lLnNsaWNlKDAsIC0xKTsKICAgICAgICAgICAga2luZCA9ICdhdHRyaWJ1dGUnOwogICAgICAgICAgfQogICAgICAgICAgLy8gSW5pdGlhbGl6ZSBhdHRyaWJ1dGUgYmluZGluZ3Mgd2l0aCBhbnkgbGl0ZXJhbCBwYXJ0cwogICAgICAgICAgbGV0IGxpdGVyYWwgPSBsaXRlcmFsRnJvbVBhcnRzKHBhcnRzKTsKICAgICAgICAgIGlmIChsaXRlcmFsICYmIGtpbmQgPT0gJ2F0dHJpYnV0ZScpIHsKICAgICAgICAgICAgLy8gRW5zdXJlIGEgU2hhZHlDU1MgdGVtcGxhdGUgc2NvcGVkIHN0eWxlIGlzIG5vdCByZW1vdmVkCiAgICAgICAgICAgIC8vIHdoZW4gYSBjbGFzcyQgYmluZGluZydzIGluaXRpYWwgbGl0ZXJhbCB2YWx1ZSBpcyBzZXQuCiAgICAgICAgICAgIGlmIChuYW1lID09ICdjbGFzcycgJiYgbm9kZS5oYXNBdHRyaWJ1dGUoJ2NsYXNzJykpIHsKICAgICAgICAgICAgICBsaXRlcmFsICs9ICcgJyArIG5vZGUuZ2V0QXR0cmlidXRlKG5hbWUpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKG5hbWUsIGxpdGVyYWwpOwogICAgICAgICAgfQogICAgICAgICAgLy8gQ2xlYXIgYXR0cmlidXRlIGJlZm9yZSByZW1vdmluZywgc2luY2UgSUUgd29uJ3QgYWxsb3cgcmVtb3ZpbmcKICAgICAgICAgIC8vIGB2YWx1ZWAgYXR0cmlidXRlIGlmIGl0IHByZXZpb3VzbHkgaGFkIGEgdmFsdWUgKGNhbid0CiAgICAgICAgICAvLyB1bmNvbmRpdGlvbmFsbHkgc2V0ICcnIGJlZm9yZSByZW1vdmluZyBzaW5jZSBhdHRyaWJ1dGVzIHdpdGggYCRgCiAgICAgICAgICAvLyBjYW4ndCBiZSBzZXQgdXNpbmcgc2V0QXR0cmlidXRlKQogICAgICAgICAgaWYgKG5vZGUubG9jYWxOYW1lID09PSAnaW5wdXQnICYmIG9yaWdOYW1lID09PSAndmFsdWUnKSB7CiAgICAgICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKG9yaWdOYW1lLCAnJyk7CiAgICAgICAgICB9CiAgICAgICAgICAvLyBSZW1vdmUgYW5ub3RhdGlvbgogICAgICAgICAgbm9kZS5yZW1vdmVBdHRyaWJ1dGUob3JpZ05hbWUpOwogICAgICAgICAgLy8gQ2FzZSBoYWNrZXJ5OiBhdHRyaWJ1dGVzIGFyZSBsb3dlci1jYXNlLCBidXQgYmluZCB0YXJnZXRzCiAgICAgICAgICAvLyAocHJvcGVydGllcykgYXJlIGNhc2Ugc2Vuc2l0aXZlLiBHYW1iaXQgaXMgdG8gbWFwIGRhc2gtY2FzZSB0bwogICAgICAgICAgLy8gY2FtZWwtY2FzZTogYGZvby1iYXJgIGJlY29tZXMgYGZvb0JhcmAuCiAgICAgICAgICAvLyBBdHRyaWJ1dGUgYmluZGluZ3MgYXJlIGV4Y2VwdGVkLgogICAgICAgICAgaWYgKGtpbmQgPT09ICdwcm9wZXJ0eScpIHsKICAgICAgICAgICAgbmFtZSA9IFBvbHltZXIuQ2FzZU1hcC5kYXNoVG9DYW1lbENhc2UobmFtZSk7CiAgICAgICAgICB9CiAgICAgICAgICBhZGRCaW5kaW5nKHRoaXMsIHRlbXBsYXRlSW5mbywgbm9kZUluZm8sIGtpbmQsIG5hbWUsIHBhcnRzLCBsaXRlcmFsKTsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXR1cm4gc3VwZXIuX3BhcnNlVGVtcGxhdGVOb2RlQXR0cmlidXRlKG5vZGUsIHRlbXBsYXRlSW5mbywgbm9kZUluZm8sIG5hbWUsIHZhbHVlKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBPdmVycmlkZXMgZGVmYXVsdCBgVGVtcGxhdGVTdGFtcGAgaW1wbGVtZW50YXRpb24gdG8gYWRkIHN1cHBvcnQgZm9yCiAgICAgICAqIGJpbmRpbmcgdGhlIHByb3BlcnRpZXMgdGhhdCBhIG5lc3RlZCB0ZW1wbGF0ZSBkZXBlbmRzIG9uIHRvIHRoZSB0ZW1wbGF0ZQogICAgICAgKiBhcyBgX2hvc3RfPHByb3BlcnR5PmAuCiAgICAgICAqCiAgICAgICAqIEBvdmVycmlkZQogICAgICAgKiBAcGFyYW0ge05vZGV9IG5vZGUgTm9kZSB0byBwYXJzZQogICAgICAgKiBAcGFyYW0ge1RlbXBsYXRlSW5mb30gdGVtcGxhdGVJbmZvIFRlbXBsYXRlIG1ldGFkYXRhIGZvciBjdXJyZW50IHRlbXBsYXRlCiAgICAgICAqIEBwYXJhbSB7Tm9kZUluZm99IG5vZGVJbmZvIE5vZGUgbWV0YWRhdGEgZm9yIGN1cnJlbnQgdGVtcGxhdGUgbm9kZQogICAgICAgKiBAcmV0dXJuIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIHZpc2l0ZWQgbm9kZSBhZGRlZCBub2RlLXNwZWNpZmljCiAgICAgICAqICAgbWV0YWRhdGEgdG8gYG5vZGVJbmZvYAogICAgICAgKiBAcHJvdGVjdGVkCiAgICAgICAqIEBzdXBwcmVzcyB7bWlzc2luZ1Byb3BlcnRpZXN9IEludGVyZmFjZXMgaW4gY2xvc3VyZSBkbyBub3QgaW5oZXJpdCBzdGF0aWNzLCBidXQgY2xhc3NlcyBkbwogICAgICAgKi8KICAgICAgc3RhdGljIF9wYXJzZVRlbXBsYXRlTmVzdGVkVGVtcGxhdGUobm9kZSwgdGVtcGxhdGVJbmZvLCBub2RlSW5mbykgewogICAgICAgIGxldCBub3RlZCA9IHN1cGVyLl9wYXJzZVRlbXBsYXRlTmVzdGVkVGVtcGxhdGUobm9kZSwgdGVtcGxhdGVJbmZvLCBub2RlSW5mbyk7CiAgICAgICAgLy8gTWVyZ2UgaG9zdCBwcm9wcyBpbnRvIG91dGVyIHRlbXBsYXRlIGFuZCBhZGQgYmluZGluZ3MKICAgICAgICBsZXQgaG9zdFByb3BzID0gbm9kZUluZm8udGVtcGxhdGVJbmZvLmhvc3RQcm9wczsKICAgICAgICBsZXQgbW9kZSA9ICd7JzsKICAgICAgICBmb3IgKGxldCBzb3VyY2UgaW4gaG9zdFByb3BzKSB7CiAgICAgICAgICBsZXQgcGFydHMgPSBbeyBtb2RlLCBzb3VyY2UsIGRlcGVuZGVuY2llczogW3NvdXJjZV0gfV07CiAgICAgICAgICBhZGRCaW5kaW5nKHRoaXMsIHRlbXBsYXRlSW5mbywgbm9kZUluZm8sICdwcm9wZXJ0eScsICdfaG9zdF8nICsgc291cmNlLCBwYXJ0cyk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBub3RlZDsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIENhbGxlZCB0byBwYXJzZSB0ZXh0IGluIGEgdGVtcGxhdGUgKGVpdGhlciBhdHRyaWJ1dGUgdmFsdWVzIG9yCiAgICAgICAqIHRleHRDb250ZW50KSBpbnRvIGJpbmRpbmcgbWV0YWRhdGEuCiAgICAgICAqCiAgICAgICAqIEFueSBvdmVycmlkZXMgb2YgdGhpcyBtZXRob2Qgc2hvdWxkIHJldHVybiBhbiBhcnJheSBvZiBiaW5kaW5nIHBhcnQKICAgICAgICogbWV0YWRhdGEgIHJlcHJlc2VudGluZyBvbmUgb3IgbW9yZSBiaW5kaW5ncyBmb3VuZCBpbiB0aGUgcHJvdmlkZWQgdGV4dAogICAgICAgKiBhbmQgYW55ICJsaXRlcmFsIiB0ZXh0IGluIGJldHdlZW4uICBBbnkgbm9uLWxpdGVyYWwgcGFydHMgd2lsbCBiZSBwYXNzZWQKICAgICAgICogdG8gYF9ldmFsdWF0ZUJpbmRpbmdgIHdoZW4gYW55IGRlcGVuZGVuY2llcyBjaGFuZ2UuICBUaGUgb25seSByZXF1aXJlZAogICAgICAgKiBmaWVsZHMgb2YgZWFjaCAicGFydCIgaW4gdGhlIHJldHVybmVkIGFycmF5IGFyZSBhcyBmb2xsb3dzOgogICAgICAgKgogICAgICAgKiAtIGBkZXBlbmRlbmNpZXNgIC0gQXJyYXkgY29udGFpbmluZyB0cmlnZ2VyIG1ldGFkYXRhIGZvciBlYWNoIHByb3BlcnR5CiAgICAgICAqICAgdGhhdCBzaG91bGQgdHJpZ2dlciB0aGUgYmluZGluZyB0byB1cGRhdGUKICAgICAgICogLSBgbGl0ZXJhbGAgLSBTdHJpbmcgY29udGFpbmluZyB0ZXh0IGlmIHRoZSBwYXJ0IHJlcHJlc2VudHMgYSBsaXRlcmFsOwogICAgICAgKiAgIGluIHRoaXMgY2FzZSBubyBgZGVwZW5kZW5jaWVzYCBhcmUgbmVlZGVkCiAgICAgICAqCiAgICAgICAqIEFkZGl0aW9uYWwgbWV0YWRhdGEgZm9yIHVzZSBieSBgX2V2YWx1YXRlQmluZGluZ2AgbWF5IGJlIHByb3ZpZGVkIGluCiAgICAgICAqIGVhY2ggcGFydCBvYmplY3QgYXMgbmVlZGVkLgogICAgICAgKgogICAgICAgKiBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBoYW5kbGVzIHRoZSBmb2xsb3dpbmcgdHlwZXMgb2YgYmluZGluZ3MKICAgICAgICogKG9uZSBvciBtb3JlIG1heSBiZSBpbnRlcm1peGVkIHdpdGggbGl0ZXJhbCBzdHJpbmdzKToKICAgICAgICogLSBQcm9wZXJ0eSBiaW5kaW5nOiBgW1twcm9wXV1gCiAgICAgICAqIC0gUGF0aCBiaW5kaW5nOiBgW1tvYmplY3QucHJvcF1dYAogICAgICAgKiAtIE5lZ2F0ZWQgcHJvcGVydHkgb3IgcGF0aCBiaW5kaW5nczogYFtbIXByb3BdXWAgb3IgYFtbIW9iamVjdC5wcm9wXV1gCiAgICAgICAqIC0gVHdvLXdheSBwcm9wZXJ0eSBvciBwYXRoIGJpbmRpbmdzIChzdXBwb3J0cyBuZWdhdGlvbik6CiAgICAgICAqICAgYHt7cHJvcH19YCwgYHt7b2JqZWN0LnByb3B9fWAsIGB7eyFwcm9wfX1gIG9yIGB7eyFvYmplY3QucHJvcH19YAogICAgICAgKiAtIElubGluZSBjb21wdXRlZCBtZXRob2QgKHN1cHBvcnRzIG5lZ2F0aW9uKToKICAgICAgICogICBgW1tjb21wdXRlKGEsICdsaXRlcmFsJywgYildXWAsIGBbWyFjb21wdXRlKGEsICdsaXRlcmFsJywgYildXWAKICAgICAgICoKICAgICAgICogVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gdXNlcyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBmb3IgYmVzdAogICAgICAgKiBwZXJmb3JtYW5jZS4gSG93ZXZlciwgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiB1c2VzIGEgd2hpdGUtbGlzdCBvZgogICAgICAgKiBhbGxvd2VkIGNoYXJhY3RlcnMgaW4gYSBkYXRhLWJpbmRpbmcsIHdoaWNoIGNhdXNlcyBwcm9ibGVtcyBmb3IKICAgICAgICogZGF0YS1iaW5kaW5ncyB0aGF0IGRvIHVzZSBjaGFyYWN0ZXJzIG5vdCBpbiB0aGlzIHdoaXRlLWxpc3QuCiAgICAgICAqCiAgICAgICAqIEluc3RlYWQgb2YgdXBkYXRpbmcgdGhlIHdoaXRlLWxpc3Qgd2l0aCBhbGwgYWxsb3dlZCBjaGFyYWN0ZXJzLAogICAgICAgKiB0aGVyZSBpcyBhIFN0cmljdEJpbmRpbmdQYXJzZXIgKHNlZSBsaWIvbWl4aW5zL3N0cmljdC1iaW5kaW5nLXBhcnNlcikKICAgICAgICogdGhhdCB1c2VzIGEgc3RhdGUgbWFjaGluZSBpbnN0ZWFkLiBUaGlzIHN0YXRlIG1hY2hpbmUgaXMgYWJsZSB0byBoYW5kbGUKICAgICAgICogYWxsIGNoYXJhY3RlcnMuIEhvd2V2ZXIsIGl0IGlzIHNsaWdodGx5IGxlc3MgcGVyZm9ybWFudCwgdGhlcmVmb3JlIHdlCiAgICAgICAqIGV4dHJhY3RlZCBpdCBpbnRvIGEgc2VwYXJhdGUgb3B0aW9uYWwgbWl4aW4uCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IFRleHQgdG8gcGFyc2UgZnJvbSBhdHRyaWJ1dGUgb3IgdGV4dENvbnRlbnQKICAgICAgICogQHBhcmFtIHtPYmplY3R9IHRlbXBsYXRlSW5mbyBDdXJyZW50IHRlbXBsYXRlIG1ldGFkYXRhCiAgICAgICAqIEByZXR1cm4ge0FycmF5PCFCaW5kaW5nUGFydD59IEFycmF5IG9mIGJpbmRpbmcgcGFydCBtZXRhZGF0YQogICAgICAgKiBAcHJvdGVjdGVkCiAgICAgICAqLwogICAgICBzdGF0aWMgX3BhcnNlQmluZGluZ3ModGV4dCwgdGVtcGxhdGVJbmZvKSB7CiAgICAgICAgbGV0IHBhcnRzID0gW107CiAgICAgICAgbGV0IGxhc3RJbmRleCA9IDA7CiAgICAgICAgbGV0IG07CiAgICAgICAgLy8gRXhhbXBsZTogImxpdGVyYWwxe3twcm9wfX1saXRlcmFsMltbIWNvbXB1dGUoZm9vLGJhcildXWZpbmFsIgogICAgICAgIC8vIFJlZ2V4IG1hdGNoZXM6CiAgICAgICAgLy8gICAgICAgIEl0ZXJhdGlvbiAxOiAgSXRlcmF0aW9uIDI6CiAgICAgICAgLy8gbVsxXTogJ3t7JyAgICAgICAgICAnW1snCiAgICAgICAgLy8gbVsyXTogJycgICAgICAgICAgICAnIScKICAgICAgICAvLyBtWzNdOiAncHJvcCcgICAgICAgICdjb21wdXRlKGZvbyxiYXIpJwogICAgICAgIHdoaWxlICgobSA9IGJpbmRpbmdSZWdleC5leGVjKHRleHQpKSAhPT0gbnVsbCkgewogICAgICAgICAgLy8gQWRkIGxpdGVyYWwgcGFydAogICAgICAgICAgaWYgKG0uaW5kZXggPiBsYXN0SW5kZXgpIHsKICAgICAgICAgICAgcGFydHMucHVzaCh7bGl0ZXJhbDogdGV4dC5zbGljZShsYXN0SW5kZXgsIG0uaW5kZXgpfSk7CiAgICAgICAgICB9CiAgICAgICAgICAvLyBBZGQgYmluZGluZyBwYXJ0CiAgICAgICAgICBsZXQgbW9kZSA9IG1bMV1bMF07CiAgICAgICAgICBsZXQgbmVnYXRlID0gQm9vbGVhbihtWzJdKTsKICAgICAgICAgIGxldCBzb3VyY2UgPSBtWzNdLnRyaW0oKTsKICAgICAgICAgIGxldCBjdXN0b21FdmVudCA9IGZhbHNlLCBub3RpZnlFdmVudCA9ICcnLCBjb2xvbiA9IC0xOwogICAgICAgICAgaWYgKG1vZGUgPT0gJ3snICYmIChjb2xvbiA9IHNvdXJjZS5pbmRleE9mKCc6OicpKSA+IDApIHsKICAgICAgICAgICAgbm90aWZ5RXZlbnQgPSBzb3VyY2Uuc3Vic3RyaW5nKGNvbG9uICsgMik7CiAgICAgICAgICAgIHNvdXJjZSA9IHNvdXJjZS5zdWJzdHJpbmcoMCwgY29sb24pOwogICAgICAgICAgICBjdXN0b21FdmVudCA9IHRydWU7CiAgICAgICAgICB9CiAgICAgICAgICBsZXQgc2lnbmF0dXJlID0gcGFyc2VNZXRob2Qoc291cmNlKTsKICAgICAgICAgIGxldCBkZXBlbmRlbmNpZXMgPSBbXTsKICAgICAgICAgIGlmIChzaWduYXR1cmUpIHsKICAgICAgICAgICAgLy8gSW5saW5lIGNvbXB1dGVkIGZ1bmN0aW9uCiAgICAgICAgICAgIGxldCB7YXJncywgbWV0aG9kTmFtZX0gPSBzaWduYXR1cmU7CiAgICAgICAgICAgIGZvciAobGV0IGk9MDsgaTxhcmdzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgbGV0IGFyZyA9IGFyZ3NbaV07CiAgICAgICAgICAgICAgaWYgKCFhcmcubGl0ZXJhbCkgewogICAgICAgICAgICAgICAgZGVwZW5kZW5jaWVzLnB1c2goYXJnKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgbGV0IGR5bmFtaWNGbnMgPSB0ZW1wbGF0ZUluZm8uZHluYW1pY0ZuczsKICAgICAgICAgICAgaWYgKGR5bmFtaWNGbnMgJiYgZHluYW1pY0Zuc1ttZXRob2ROYW1lXSB8fCBzaWduYXR1cmUuc3RhdGljKSB7CiAgICAgICAgICAgICAgZGVwZW5kZW5jaWVzLnB1c2gobWV0aG9kTmFtZSk7CiAgICAgICAgICAgICAgc2lnbmF0dXJlLmR5bmFtaWNGbiA9IHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIC8vIFByb3BlcnR5IG9yIHBhdGgKICAgICAgICAgICAgZGVwZW5kZW5jaWVzLnB1c2goc291cmNlKTsKICAgICAgICAgIH0KICAgICAgICAgIHBhcnRzLnB1c2goewogICAgICAgICAgICBzb3VyY2UsIG1vZGUsIG5lZ2F0ZSwgY3VzdG9tRXZlbnQsIHNpZ25hdHVyZSwgZGVwZW5kZW5jaWVzLAogICAgICAgICAgICBldmVudDogbm90aWZ5RXZlbnQKICAgICAgICAgIH0pOwogICAgICAgICAgbGFzdEluZGV4ID0gYmluZGluZ1JlZ2V4Lmxhc3RJbmRleDsKICAgICAgICB9CiAgICAgICAgLy8gQWRkIGEgZmluYWwgbGl0ZXJhbCBwYXJ0CiAgICAgICAgaWYgKGxhc3RJbmRleCAmJiBsYXN0SW5kZXggPCB0ZXh0Lmxlbmd0aCkgewogICAgICAgICAgbGV0IGxpdGVyYWwgPSB0ZXh0LnN1YnN0cmluZyhsYXN0SW5kZXgpOwogICAgICAgICAgaWYgKGxpdGVyYWwpIHsKICAgICAgICAgICAgcGFydHMucHVzaCh7CiAgICAgICAgICAgICAgbGl0ZXJhbDogbGl0ZXJhbAogICAgICAgICAgICB9KTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKHBhcnRzLmxlbmd0aCkgewogICAgICAgICAgcmV0dXJuIHBhcnRzOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBDYWxsZWQgdG8gZXZhbHVhdGUgYSBwcmV2aW91c2x5IHBhcnNlZCBiaW5kaW5nIHBhcnQgYmFzZWQgb24gYSBzZXQgb2YKICAgICAgICogb25lIG9yIG1vcmUgY2hhbmdlZCBkZXBlbmRlbmNpZXMuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7dGhpc30gaW5zdCBFbGVtZW50IHRoYXQgc2hvdWxkIGJlIHVzZWQgYXMgc2NvcGUgZm9yCiAgICAgICAqICAgYmluZGluZyBkZXBlbmRlbmNpZXMKICAgICAgICogQHBhcmFtIHtCaW5kaW5nUGFydH0gcGFydCBCaW5kaW5nIHBhcnQgbWV0YWRhdGEKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHBhdGggUHJvcGVydHkvcGF0aCB0aGF0IHRyaWdnZXJlZCB0aGlzIGVmZmVjdAogICAgICAgKiBAcGFyYW0ge09iamVjdH0gcHJvcHMgQmFnIG9mIGN1cnJlbnQgcHJvcGVydHkgY2hhbmdlcwogICAgICAgKiBAcGFyYW0ge09iamVjdH0gb2xkUHJvcHMgQmFnIG9mIHByZXZpb3VzIHZhbHVlcyBmb3IgY2hhbmdlZCBwcm9wZXJ0aWVzCiAgICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gaGFzUGF0aHMgVHJ1ZSB3aXRoIGBwcm9wc2AgY29udGFpbnMgb25lIG9yIG1vcmUgcGF0aHMKICAgICAgICogQHJldHVybiB7Kn0gVmFsdWUgdGhlIGJpbmRpbmcgcGFydCBldmFsdWF0ZWQgdG8KICAgICAgICogQHByb3RlY3RlZAogICAgICAgKi8KICAgICAgc3RhdGljIF9ldmFsdWF0ZUJpbmRpbmcoaW5zdCwgcGFydCwgcGF0aCwgcHJvcHMsIG9sZFByb3BzLCBoYXNQYXRocykgewogICAgICAgIGxldCB2YWx1ZTsKICAgICAgICBpZiAocGFydC5zaWduYXR1cmUpIHsKICAgICAgICAgIHZhbHVlID0gcnVuTWV0aG9kRWZmZWN0KGluc3QsIHBhdGgsIHByb3BzLCBvbGRQcm9wcywgcGFydC5zaWduYXR1cmUpOwogICAgICAgIH0gZWxzZSBpZiAocGF0aCAhPSBwYXJ0LnNvdXJjZSkgewogICAgICAgICAgdmFsdWUgPSBQb2x5bWVyLlBhdGguZ2V0KGluc3QsIHBhcnQuc291cmNlKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgaWYgKGhhc1BhdGhzICYmIFBvbHltZXIuUGF0aC5pc1BhdGgocGF0aCkpIHsKICAgICAgICAgICAgdmFsdWUgPSBQb2x5bWVyLlBhdGguZ2V0KGluc3QsIHBhdGgpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdmFsdWUgPSBpbnN0Ll9fZGF0YVtwYXRoXTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKHBhcnQubmVnYXRlKSB7CiAgICAgICAgICB2YWx1ZSA9ICF2YWx1ZTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHZhbHVlOwogICAgICB9CgogICAgfQoKICAgIC8vIG1ha2UgYSB0eXBpbmcgZm9yIGNsb3N1cmUgOlAKICAgIFByb3BlcnR5RWZmZWN0c1R5cGUgPSBQcm9wZXJ0eUVmZmVjdHM7CgogICAgcmV0dXJuIFByb3BlcnR5RWZmZWN0czsKICB9KTsKCiAgLyoqCiAgICogSGVscGVyIGFwaSBmb3IgZW5xdWV1aW5nIGNsaWVudCBkb20gY3JlYXRlZCBieSBhIGhvc3QgZWxlbWVudC4KICAgKgogICAqIEJ5IGRlZmF1bHQgZWxlbWVudHMgYXJlIGZsdXNoZWQgdmlhIGBfZmx1c2hQcm9wZXJ0aWVzYCB3aGVuCiAgICogYGNvbm5lY3RlZENhbGxiYWNrYCBpcyBjYWxsZWQuIEVsZW1lbnRzIGF0dGFjaCB0aGVpciBjbGllbnQgZG9tIHRvCiAgICogdGhlbXNlbHZlcyBhdCBgcmVhZHlgIHRpbWUgd2hpY2ggcmVzdWx0cyBmcm9tIHRoaXMgZmlyc3QgZmx1c2guCiAgICogVGhpcyBwcm92aWRlcyBhbiBvcmRlcmluZyBndWFyYW50ZWUgdGhhdCB0aGUgY2xpZW50IGRvbSBhbiBlbGVtZW50CiAgICogY3JlYXRlcyBpcyBmbHVzaGVkIGJlZm9yZSB0aGUgZWxlbWVudCBpdHNlbGYgKGkuZS4gY2xpZW50IGByZWFkeWAKICAgKiBmaXJlcyBiZWZvcmUgaG9zdCBgcmVhZHlgKS4KICAgKgogICAqIEhvd2V2ZXIsIGlmIGBfZmx1c2hQcm9wZXJ0aWVzYCBpcyBjYWxsZWQgKmJlZm9yZSogYW4gZWxlbWVudCBpcyBjb25uZWN0ZWQsCiAgICogYXMgZm9yIGV4YW1wbGUgYFRlbXBsYXRpemVgIGRvZXMsIHRoaXMgb3JkZXJpbmcgZ3VhcmFudGVlIGNhbm5vdCBiZQogICAqIHNhdGlzZmllZCBiZWNhdXNlIG5vIGVsZW1lbnRzIGFyZSBjb25uZWN0ZWQuIChOb3RlOiBCb3VuZCBlbGVtZW50cyB0aGF0CiAgICogcmVjZWl2ZSBkYXRhIGRvIGJlY29tZSBlbnF1ZXVlZCBjbGllbnRzIGFuZCBhcmUgcHJvcGVybHkgb3JkZXJlZCBidXQKICAgKiB1bmJvdW5kIGVsZW1lbnRzIGFyZSBub3QuKQogICAqCiAgICogVG8gbWFpbnRhaW4gdGhlIGRlc2lyZWQgImNsaWVudCBiZWZvcmUgaG9zdCIgb3JkZXJpbmcgZ3VhcmFudGVlIGZvciB0aGlzCiAgICogY2FzZSB3ZSByZWx5IG9uIHRoZSAiaG9zdCBzdGFjay4gQ2xpZW50IG5vZGVzIHJlZ2lzdGVycyB0aGVtc2VsdmVzIHdpdGgKICAgKiB0aGUgY3JlYXRpbmcgaG9zdCBlbGVtZW50IHdoZW4gY3JlYXRlZC4gVGhpcyBlbnN1cmVzIHRoYXQgYWxsIGNsaWVudCBkb20KICAgKiBpcyByZWFkaWVkIGluIHRoZSBwcm9wZXIgb3JkZXIsIG1haW50YWluaW5nIHRoZSBkZXNpcmVkIGd1YXJhbnRlZS4KICAgKgogICAqIEBwcml2YXRlCiAgICovCiAgbGV0IGhvc3RTdGFjayA9IHsKCiAgICBzdGFjazogW10sCgogICAgLyoqCiAgICAgKiBAcGFyYW0geyp9IGluc3QgSW5zdGFuY2UgdG8gYWRkIHRvIGhvc3RTdGFjawogICAgICogQHJldHVybiB7dm9pZH0KICAgICAqIEB0aGlzIHtob3N0U3RhY2t9CiAgICAgKi8KICAgIHJlZ2lzdGVySG9zdChpbnN0KSB7CiAgICAgIGlmICh0aGlzLnN0YWNrLmxlbmd0aCkgewogICAgICAgIGxldCBob3N0ID0gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aC0xXTsKICAgICAgICBob3N0Ll9lbnF1ZXVlQ2xpZW50KGluc3QpOwogICAgICB9CiAgICB9LAoKICAgIC8qKgogICAgICogQHBhcmFtIHsqfSBpbnN0IEluc3RhbmNlIHRvIGJlZ2luIGhvc3RpbmcKICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgKiBAdGhpcyB7aG9zdFN0YWNrfQogICAgICovCiAgICBiZWdpbkhvc3RpbmcoaW5zdCkgewogICAgICB0aGlzLnN0YWNrLnB1c2goaW5zdCk7CiAgICB9LAoKICAgIC8qKgogICAgICogQHBhcmFtIHsqfSBpbnN0IEluc3RhbmNlIHRvIGVuZCBob3N0aW5nCiAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICogQHRoaXMge2hvc3RTdGFja30KICAgICAqLwogICAgZW5kSG9zdGluZyhpbnN0KSB7CiAgICAgIGxldCBzdGFja0xlbiA9IHRoaXMuc3RhY2subGVuZ3RoOwogICAgICBpZiAoc3RhY2tMZW4gJiYgdGhpcy5zdGFja1tzdGFja0xlbi0xXSA9PSBpbnN0KSB7CiAgICAgICAgdGhpcy5zdGFjay5wb3AoKTsKICAgICAgfQogICAgfQoKICB9OwoKfSkoKTsKPC9zY3JpcHQ+PHNjcmlwdD4KKGZ1bmN0aW9uKCkgewogICd1c2Ugc3RyaWN0JzsKCiAgLyoqCiAgICogUHJvdmlkZXMgYmFzaWMgdHJhY2tpbmcgb2YgZWxlbWVudCBkZWZpbml0aW9ucyAocmVnaXN0cmF0aW9ucykgYW5kCiAgICogaW5zdGFuY2UgY291bnRzLgogICAqCiAgICogQG5hbWVzcGFjZQogICAqIEBzdW1tYXJ5IFByb3ZpZGVzIGJhc2ljIHRyYWNraW5nIG9mIGVsZW1lbnQgZGVmaW5pdGlvbnMgKHJlZ2lzdHJhdGlvbnMpIGFuZAogICAqIGluc3RhbmNlIGNvdW50cy4KICAgKi8KICBQb2x5bWVyLnRlbGVtZXRyeSA9IHsKICAgIC8qKgogICAgICogVG90YWwgbnVtYmVyIG9mIFBvbHltZXIgZWxlbWVudCBpbnN0YW5jZXMgY3JlYXRlZC4KICAgICAqIEB0eXBlIHtudW1iZXJ9CiAgICAgKi8KICAgIGluc3RhbmNlQ291bnQ6IDAsCiAgICAvKioKICAgICAqIEFycmF5IG9mIFBvbHltZXIgZWxlbWVudCBjbGFzc2VzIHRoYXQgaGF2ZSBiZWVuIGZpbmFsaXplZC4KICAgICAqIEB0eXBlIHtBcnJheTxQb2x5bWVyLkVsZW1lbnQ+fQogICAgICovCiAgICByZWdpc3RyYXRpb25zOiBbXSwKICAgIC8qKgogICAgICogQHBhcmFtIHshUG9seW1lckVsZW1lbnRDb25zdHJ1Y3Rvcn0gcHJvdG90eXBlIEVsZW1lbnQgcHJvdG90eXBlIHRvIGxvZwogICAgICogQHRoaXMge3RoaXN9CiAgICAgKiBAcHJpdmF0ZQogICAgICovCiAgICBfcmVnTG9nOiBmdW5jdGlvbihwcm90b3R5cGUpIHsKICAgICAgY29uc29sZS5sb2coJ1snICsgcHJvdG90eXBlLmlzICsgJ106IHJlZ2lzdGVyZWQnKTsKICAgIH0sCiAgICAvKioKICAgICAqIFJlZ2lzdGVycyBhIGNsYXNzIHByb3RvdHlwZSBmb3IgdGVsZW1ldHJ5IHB1cnBvc2VzLgogICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gcHJvdG90eXBlIEVsZW1lbnQgcHJvdG90eXBlIHRvIHJlZ2lzdGVyCiAgICAgKiBAdGhpcyB7dGhpc30KICAgICAqIEBwcm90ZWN0ZWQKICAgICAqLwogICAgcmVnaXN0ZXI6IGZ1bmN0aW9uKHByb3RvdHlwZSkgewogICAgICB0aGlzLnJlZ2lzdHJhdGlvbnMucHVzaChwcm90b3R5cGUpOwogICAgICBQb2x5bWVyLmxvZyAmJiB0aGlzLl9yZWdMb2cocHJvdG90eXBlKTsKICAgIH0sCiAgICAvKioKICAgICAqIExvZ3MgYWxsIGVsZW1lbnRzIHJlZ2lzdGVyZWQgd2l0aCBhbiBgaXNgIHRvIHRoZSBjb25zb2xlLgogICAgICogQHB1YmxpYwogICAgICogQHRoaXMge3RoaXN9CiAgICAgKi8KICAgIGR1bXBSZWdpc3RyYXRpb25zOiBmdW5jdGlvbigpIHsKICAgICAgdGhpcy5yZWdpc3RyYXRpb25zLmZvckVhY2godGhpcy5fcmVnTG9nKTsKICAgIH0KICB9OwoKfSkoKTsKPC9zY3JpcHQ+PHNjcmlwdD4KKGZ1bmN0aW9uKCkgewogICd1c2Ugc3RyaWN0JzsKCiAgLyoqCiAgICogQ3JlYXRlcyBhIGNvcHkgb2YgYHByb3BzYCB3aXRoIGVhY2ggcHJvcGVydHkgbm9ybWFsaXplZCBzdWNoIHRoYXQKICAgKiB1cGdyYWRlZCBpdCBpcyBhbiBvYmplY3Qgd2l0aCBhdCBsZWFzdCBhIHR5cGUgcHJvcGVydHkgeyB0eXBlOiBUeXBlfS4KICAgKgogICAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wcyBQcm9wZXJ0aWVzIHRvIG5vcm1hbGl6ZQogICAqIEByZXR1cm4ge09iamVjdH0gQ29weSBvZiBpbnB1dCBgcHJvcHNgIHdpdGggbm9ybWFsaXplZCBwcm9wZXJ0aWVzIHRoYXQKICAgKiBhcmUgaW4gdGhlIGZvcm0ge3R5cGU6IFR5cGV9CiAgICogQHByaXZhdGUKICAgKi8KICBmdW5jdGlvbiBub3JtYWxpemVQcm9wZXJ0aWVzKHByb3BzKSB7CiAgICBjb25zdCBvdXRwdXQgPSB7fTsKICAgIGZvciAobGV0IHAgaW4gcHJvcHMpIHsKICAgICAgY29uc3QgbyA9IHByb3BzW3BdOwogICAgICBvdXRwdXRbcF0gPSAodHlwZW9mIG8gPT09ICdmdW5jdGlvbicpID8ge3R5cGU6IG99IDogbzsKICAgIH0KICAgIHJldHVybiBvdXRwdXQ7CiAgfQoKICAvKioKICAgKiBNaXhpbiB0aGF0IHByb3ZpZGVzIGEgbWluaW1hbCBzdGFydGluZyBwb2ludCB0byB1c2luZyB0aGUgUHJvcGVydGllc0NoYW5nZWQKICAgKiBtaXhpbiBieSBwcm92aWRpbmcgYSBtZWNoYW5pc20gdG8gZGVjbGFyZSBwcm9wZXJ0aWVzIGluIGEgc3RhdGljCiAgICogZ2V0dGVyIChlLmcuIHN0YXRpYyBnZXQgcHJvcGVydGllcygpIHsgcmV0dXJuIHsgZm9vOiBTdHJpbmcgfSB9KS4gQ2hhbmdlcwogICAqIGFyZSByZXBvcnRlZCB2aWEgdGhlIGBfcHJvcGVydGllc0NoYW5nZWRgIG1ldGhvZC4KICAgKgogICAqIFRoaXMgbWl4aW4gcHJvdmlkZXMgbm8gc3BlY2lmaWMgc3VwcG9ydCBmb3IgcmVuZGVyaW5nLiBVc2VycyBhcmUgZXhwZWN0ZWQKICAgKiB0byBjcmVhdGUgYSBTaGFkb3dSb290IGFuZCBwdXQgY29udGVudCBpbnRvIGl0IGFuZCB1cGRhdGUgaXQgaW4gd2hhdGV2ZXIKICAgKiB3YXkgbWFrZXMgc2Vuc2UuIFRoaXMgY2FuIGJlIGRvbmUgaW4gcmVhY3Rpb24gdG8gcHJvcGVydGllcyBjaGFuZ2luZyBieQogICAqIGltcGxlbWVudGluZyBgX3Byb3BlcnRpZXNDaGFuZ2VkYC4KICAgKgogICAqIEBtaXhpbkZ1bmN0aW9uCiAgICogQHBvbHltZXIKICAgKiBAYXBwbGllc01peGluIFBvbHltZXIuUHJvcGVydGllc0NoYW5nZWQKICAgKiBAbWVtYmVyb2YgUG9seW1lcgogICAqIEBzdW1tYXJ5IE1peGluIHRoYXQgcHJvdmlkZXMgYSBtaW5pbWFsIHN0YXJ0aW5nIHBvaW50IGZvciB1c2luZwogICAqIHRoZSBQcm9wZXJ0aWVzQ2hhbmdlZCBtaXhpbiBieSBwcm92aWRpbmcgYSBkZWNsYXJhdGl2ZSBgcHJvcGVydGllc2Agb2JqZWN0LgogICAqLwogICBQb2x5bWVyLlByb3BlcnRpZXNNaXhpbiA9IFBvbHltZXIuZGVkdXBpbmdNaXhpbihzdXBlckNsYXNzID0+IHsKCiAgICAvKioKICAgICAqIEBjb25zdHJ1Y3RvcgogICAgICogQGV4dGVuZHMge3N1cGVyQ2xhc3N9CiAgICAgKiBAaW1wbGVtZW50cyB7UG9seW1lcl9Qcm9wZXJ0aWVzQ2hhbmdlZH0KICAgICAqIEBwcml2YXRlCiAgICAgKi8KICAgIGNvbnN0IGJhc2UgPSBQb2x5bWVyLlByb3BlcnRpZXNDaGFuZ2VkKHN1cGVyQ2xhc3MpOwoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgc3VwZXIgY2xhc3MgY29uc3RydWN0b3IgZm9yIHRoZSBnaXZlbiBjbGFzcywgaWYgaXQgaXMgYW4KICAgICAqIGluc3RhbmNlIG9mIHRoZSBQcm9wZXJ0aWVzTWl4aW4uCiAgICAgKgogICAgICogQHBhcmFtIHshUHJvcGVydGllc01peGluQ29uc3RydWN0b3J9IGNvbnN0cnVjdG9yIFByb3BlcnRpZXNNaXhpbiBjb25zdHJ1Y3RvcgogICAgICogQHJldHVybiB7UHJvcGVydGllc01peGluQ29uc3RydWN0b3J9IFN1cGVyIGNsYXNzIGNvbnN0cnVjdG9yCiAgICAgKi8KICAgIGZ1bmN0aW9uIHN1cGVyUHJvcGVydGllc0NsYXNzKGNvbnN0cnVjdG9yKSB7CiAgICAgIGNvbnN0IHN1cGVyQ3RvciA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihjb25zdHJ1Y3Rvcik7CgogICAgICAvLyBOb3RlLCB0aGUgYFByb3BlcnRpZXNNaXhpbmAgY2xhc3MgYmVsb3cgb25seSByZWZlcnMgdG8gdGhlIGNsYXNzCiAgICAgIC8vIGdlbmVyYXRlZCBieSB0aGlzIGNhbGwgdG8gdGhlIG1peGluOyB0aGUgaW5zdGFuY2VvZiB0ZXN0IG9ubHkgd29ya3MKICAgICAgLy8gYmVjYXVzZSB0aGUgbWl4aW4gaXMgZGVkdXBlZCBhbmQgZ3VhcmFudGVlZCBvbmx5IHRvIGFwcGx5IG9uY2UsIGhlbmNlCiAgICAgIC8vIGFsbCBjb25zdHJ1Y3RvcnMgaW4gYSBwcm90byBjaGFpbiB3aWxsIHNlZSB0aGUgc2FtZSBgUHJvcGVydGllc01peGluYAogICAgICByZXR1cm4gKHN1cGVyQ3Rvci5wcm90b3R5cGUgaW5zdGFuY2VvZiBQcm9wZXJ0aWVzTWl4aW4pID8KICAgICAgICAvKiogQHR5cGUge1Byb3BlcnRpZXNNaXhpbkNvbnN0cnVjdG9yfSAqLyAoc3VwZXJDdG9yKSA6IG51bGw7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGEgbWVtb2l6ZWQgdmVyc2lvbiBvZiB0aGUgYHByb3BlcnRpZXNgIG9iamVjdCBmb3IgdGhlCiAgICAgKiBnaXZlbiBjbGFzcy4gUHJvcGVydGllcyBub3QgaW4gb2JqZWN0IGZvcm1hdCBhcmUgY29udmVydGVkIHRvIGF0CiAgICAgKiBsZWFzdCB7dHlwZX0uCiAgICAgKgogICAgICogQHBhcmFtIHtQcm9wZXJ0aWVzTWl4aW5Db25zdHJ1Y3Rvcn0gY29uc3RydWN0b3IgUHJvcGVydGllc01peGluIGNvbnN0cnVjdG9yCiAgICAgKiBAcmV0dXJuIHtPYmplY3R9IE1lbW9pemVkIHByb3BlcnRpZXMgb2JqZWN0CiAgICAgKi8KICAgIGZ1bmN0aW9uIG93blByb3BlcnRpZXMoY29uc3RydWN0b3IpIHsKICAgICAgaWYgKCFjb25zdHJ1Y3Rvci5oYXNPd25Qcm9wZXJ0eShKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCdfX293blByb3BlcnRpZXMnLCBjb25zdHJ1Y3RvcikpKSB7CiAgICAgICAgbGV0IHByb3BzID0gbnVsbDsKCiAgICAgICAgaWYgKGNvbnN0cnVjdG9yLmhhc093blByb3BlcnR5KEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoJ3Byb3BlcnRpZXMnLCBjb25zdHJ1Y3RvcikpKSB7CiAgICAgICAgICBjb25zdCBwcm9wZXJ0aWVzID0gY29uc3RydWN0b3IucHJvcGVydGllczsKICAgICAgICAgIAogICAgICAgICAgaWYgKHByb3BlcnRpZXMpIHsKICAgICAgICAgICAgcHJvcHMgPSBub3JtYWxpemVQcm9wZXJ0aWVzKHByb3BlcnRpZXMpOwogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgY29uc3RydWN0b3IuX19vd25Qcm9wZXJ0aWVzID0gcHJvcHM7CiAgICAgIH0KICAgICAgcmV0dXJuIGNvbnN0cnVjdG9yLl9fb3duUHJvcGVydGllczsKICAgIH0KCiAgICAvKioKICAgICAqIEBwb2x5bWVyCiAgICAgKiBAbWl4aW5DbGFzcwogICAgICogQGV4dGVuZHMge2Jhc2V9CiAgICAgKiBAaW1wbGVtZW50cyB7UG9seW1lcl9Qcm9wZXJ0aWVzTWl4aW59CiAgICAgKiBAdW5yZXN0cmljdGVkCiAgICAgKi8KICAgIGNsYXNzIFByb3BlcnRpZXNNaXhpbiBleHRlbmRzIGJhc2UgewoKICAgICAgLyoqCiAgICAgICAqIEltcGxlbWVudHMgc3RhbmRhcmQgY3VzdG9tIGVsZW1lbnRzIGdldHRlciB0byBvYnNlcnZlcyB0aGUgYXR0cmlidXRlcwogICAgICAgKiBsaXN0ZWQgaW4gYHByb3BlcnRpZXNgLgogICAgICAgKiBAc3VwcHJlc3Mge21pc3NpbmdQcm9wZXJ0aWVzfSBJbnRlcmZhY2VzIGluIGNsb3N1cmUgZG8gbm90IGluaGVyaXQgc3RhdGljcywgYnV0IGNsYXNzZXMgZG8KICAgICAgICovCiAgICAgIHN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCkgewogICAgICAgIGlmICghdGhpcy5oYXNPd25Qcm9wZXJ0eSgnX19vYnNlcnZlZEF0dHJpYnV0ZXMnKSkgewogICAgICAgICAgUG9seW1lci50ZWxlbWV0cnkucmVnaXN0ZXIodGhpcy5wcm90b3R5cGUpOwogICAgICAgICAgY29uc3QgcHJvcHMgPSB0aGlzLl9wcm9wZXJ0aWVzOwogICAgICAgICAgdGhpcy5fX29ic2VydmVkQXR0cmlidXRlcyA9IHByb3BzID8gT2JqZWN0LmtleXMocHJvcHMpLm1hcChwID0+IHRoaXMuYXR0cmlidXRlTmFtZUZvclByb3BlcnR5KHApKSA6IFtdOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdGhpcy5fX29ic2VydmVkQXR0cmlidXRlczsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIEZpbmFsaXplcyBhbiBlbGVtZW50IGRlZmluaXRpb24sIGluY2x1ZGluZyBlbnN1cmluZyBhbnkgc3VwZXIgY2xhc3NlcwogICAgICAgKiBhcmUgYWxzbyBmaW5hbGl6ZWQuIFRoaXMgaW5jbHVkZXMgZW5zdXJpbmcgcHJvcGVydHkKICAgICAgICogYWNjZXNzb3JzIGV4aXN0IG9uIHRoZSBlbGVtZW50IHByb3RvdHlwZS4gVGhpcyBtZXRob2QgY2FsbHMKICAgICAgICogYF9maW5hbGl6ZUNsYXNzYCB0byBmaW5hbGl6ZSBlYWNoIGNvbnN0cnVjdG9yIGluIHRoZSBwcm90b3R5cGUgY2hhaW4uCiAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAqLwogICAgICBzdGF0aWMgZmluYWxpemUoKSB7CiAgICAgICAgaWYgKCF0aGlzLmhhc093blByb3BlcnR5KEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoJ19fZmluYWxpemVkJywgdGhpcykpKSB7CiAgICAgICAgICBjb25zdCBzdXBlckN0b3IgPSBzdXBlclByb3BlcnRpZXNDbGFzcygvKiogQHR5cGUge1Byb3BlcnRpZXNNaXhpbkNvbnN0cnVjdG9yfSAqLyh0aGlzKSk7CiAgICAgICAgICBpZiAoc3VwZXJDdG9yKSB7CiAgICAgICAgICAgIHN1cGVyQ3Rvci5maW5hbGl6ZSgpOwogICAgICAgICAgfQogICAgICAgICAgdGhpcy5fX2ZpbmFsaXplZCA9IHRydWU7CiAgICAgICAgICB0aGlzLl9maW5hbGl6ZUNsYXNzKCk7CiAgICAgICAgfQogICAgICB9CgogICAgICAvKioKICAgICAgICogRmluYWxpemUgYW4gZWxlbWVudCBjbGFzcy4gVGhpcyBpbmNsdWRlcyBlbnN1cmluZyBwcm9wZXJ0eQogICAgICAgKiBhY2Nlc3NvcnMgZXhpc3Qgb24gdGhlIGVsZW1lbnQgcHJvdG90eXBlLiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkKICAgICAgICogYGZpbmFsaXplYCBhbmQgZmluYWxpemVzIHRoZSBjbGFzcyBjb25zdHJ1Y3Rvci4KICAgICAgICoKICAgICAgICogQHByb3RlY3RlZAogICAgICAgKi8KICAgICAgc3RhdGljIF9maW5hbGl6ZUNsYXNzKCkgewogICAgICAgIGNvbnN0IHByb3BzID0gb3duUHJvcGVydGllcygvKiogQHR5cGUge1Byb3BlcnRpZXNNaXhpbkNvbnN0cnVjdG9yfSAqLyh0aGlzKSk7CiAgICAgICAgaWYgKHByb3BzKSB7CiAgICAgICAgICB0aGlzLmNyZWF0ZVByb3BlcnRpZXMocHJvcHMpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIFJldHVybnMgYSBtZW1vaXplZCB2ZXJzaW9uIG9mIGFsbCBwcm9wZXJ0aWVzLCBpbmNsdWRpbmcgdGhvc2UgaW5oZXJpdGVkCiAgICAgICAqIGZyb20gc3VwZXIgY2xhc3Nlcy4gUHJvcGVydGllcyBub3QgaW4gb2JqZWN0IGZvcm1hdCBhcmUgY29udmVydGVkIHRvCiAgICAgICAqIGF0IGxlYXN0IHt0eXBlfS4KICAgICAgICoKICAgICAgICogQHJldHVybiB7T2JqZWN0fSBPYmplY3QgY29udGFpbmluZyBwcm9wZXJ0aWVzIGZvciB0aGlzIGNsYXNzCiAgICAgICAqIEBwcm90ZWN0ZWQKICAgICAgICovCiAgICAgIHN0YXRpYyBnZXQgX3Byb3BlcnRpZXMoKSB7CiAgICAgICAgaWYgKCF0aGlzLmhhc093blByb3BlcnR5KAogICAgICAgICAgSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgnX19wcm9wZXJ0aWVzJywgdGhpcykpKSB7CiAgICAgICAgICBjb25zdCBzdXBlckN0b3IgPSBzdXBlclByb3BlcnRpZXNDbGFzcygvKiogQHR5cGUge1Byb3BlcnRpZXNNaXhpbkNvbnN0cnVjdG9yfSAqLyh0aGlzKSk7CiAgICAgICAgICB0aGlzLl9fcHJvcGVydGllcyA9IE9iamVjdC5hc3NpZ24oe30sCiAgICAgICAgICAgIHN1cGVyQ3RvciAmJiBzdXBlckN0b3IuX3Byb3BlcnRpZXMsCiAgICAgICAgICAgIG93blByb3BlcnRpZXMoLyoqIEB0eXBlIHtQcm9wZXJ0aWVzTWl4aW5Db25zdHJ1Y3Rvcn0gKi8odGhpcykpKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRoaXMuX19wcm9wZXJ0aWVzOwogICAgICB9CgogICAgICAvKioKICAgICAgICogT3ZlcnJpZGVzIGBQcm9wZXJ0aWVzQ2hhbmdlZGAgbWV0aG9kIHRvIHJldHVybiB0eXBlIHNwZWNpZmllZCBpbiB0aGUKICAgICAgICogc3RhdGljIGBwcm9wZXJ0aWVzYCBvYmplY3QgZm9yIHRoZSBnaXZlbiBwcm9wZXJ0eS4KICAgICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgTmFtZSBvZiBwcm9wZXJ0eQogICAgICAgKiBAcmV0dXJuIHsqfSBUeXBlIHRvIHdoaWNoIHRvIGRlc2VyaWFsaXplIGF0dHJpYnV0ZQogICAgICAgKgogICAgICAgKiBAcHJvdGVjdGVkCiAgICAgICAqLwogICAgICBzdGF0aWMgdHlwZUZvclByb3BlcnR5KG5hbWUpIHsKICAgICAgICBjb25zdCBpbmZvID0gdGhpcy5fcHJvcGVydGllc1tuYW1lXTsKICAgICAgICByZXR1cm4gaW5mbyAmJiBpbmZvLnR5cGU7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBPdmVycmlkZXMgYFByb3BlcnRpZXNDaGFuZ2VkYCBtZXRob2QgYW5kIGFkZHMgYSBjYWxsIHRvCiAgICAgICAqIGBmaW5hbGl6ZWAgd2hpY2ggbGF6aWx5IGNvbmZpZ3VyZXMgdGhlIGVsZW1lbnQncyBwcm9wZXJ0eSBhY2Nlc3NvcnMuCiAgICAgICAqIEBvdmVycmlkZQogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKi8KICAgICAgX2luaXRpYWxpemVQcm9wZXJ0aWVzKCkgewogICAgICAgIFBvbHltZXIudGVsZW1ldHJ5Lmluc3RhbmNlQ291bnQrKzsKICAgICAgICB0aGlzLmNvbnN0cnVjdG9yLmZpbmFsaXplKCk7CiAgICAgICAgc3VwZXIuX2luaXRpYWxpemVQcm9wZXJ0aWVzKCk7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBDYWxsZWQgd2hlbiB0aGUgZWxlbWVudCBpcyBhZGRlZCB0byBhIGRvY3VtZW50LgogICAgICAgKiBDYWxscyBgX2VuYWJsZVByb3BlcnRpZXNgIHRvIHR1cm4gb24gcHJvcGVydHkgc3lzdGVtIGZyb20KICAgICAgICogYFByb3BlcnRpZXNDaGFuZ2VkYC4KICAgICAgICogQHN1cHByZXNzIHttaXNzaW5nUHJvcGVydGllc30gU3VwZXIgbWF5IG9yIG1heSBub3QgaW1wbGVtZW50IHRoZSBjYWxsYmFjawogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKi8KICAgICAgY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICAgICAgaWYgKHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKSB7CiAgICAgICAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpOwogICAgICAgIH0KICAgICAgICB0aGlzLl9lbmFibGVQcm9wZXJ0aWVzKCk7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBDYWxsZWQgd2hlbiB0aGUgZWxlbWVudCBpcyByZW1vdmVkIGZyb20gYSBkb2N1bWVudAogICAgICAgKiBAc3VwcHJlc3Mge21pc3NpbmdQcm9wZXJ0aWVzfSBTdXBlciBtYXkgb3IgbWF5IG5vdCBpbXBsZW1lbnQgdGhlIGNhbGxiYWNrCiAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAqLwogICAgICBkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHsKICAgICAgICBpZiAoc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2spIHsKICAgICAgICAgIHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7CiAgICAgICAgfQogICAgICB9CgogICAgfQoKICAgIHJldHVybiBQcm9wZXJ0aWVzTWl4aW47CgogIH0pOwoKfSkoKTsKCjwvc2NyaXB0PjxzY3JpcHQ+CihmdW5jdGlvbigpIHsKICAndXNlIHN0cmljdCc7CgogIGNvbnN0IGJ1aWx0Q1NTID0gd2luZG93LlNoYWR5Q1NTICYmIHdpbmRvdy5TaGFkeUNTU1snY3NzQnVpbGQnXTsKCiAgLyoqCiAgICogRWxlbWVudCBjbGFzcyBtaXhpbiB0aGF0IHByb3ZpZGVzIHRoZSBjb3JlIEFQSSBmb3IgUG9seW1lcidzIG1ldGEtcHJvZ3JhbW1pbmcKICAgKiBmZWF0dXJlcyBpbmNsdWRpbmcgdGVtcGxhdGUgc3RhbXBpbmcsIGRhdGEtYmluZGluZywgYXR0cmlidXRlIGRlc2VyaWFsaXphdGlvbiwKICAgKiBhbmQgcHJvcGVydHkgY2hhbmdlIG9ic2VydmF0aW9uLgogICAqCiAgICogU3ViY2xhc3NlcnMgbWF5IHByb3ZpZGUgdGhlIGZvbGxvd2luZyBzdGF0aWMgZ2V0dGVycyB0byByZXR1cm4gbWV0YWRhdGEKICAgKiB1c2VkIHRvIGNvbmZpZ3VyZSBQb2x5bWVyJ3MgZmVhdHVyZXMgZm9yIHRoZSBjbGFzczoKICAgKgogICAqIC0gYHN0YXRpYyBnZXQgaXMoKWA6IFdoZW4gdGhlIHRlbXBsYXRlIGlzIHByb3ZpZGVkIHZpYSBhIGBkb20tbW9kdWxlYCwKICAgKiAgIHVzZXJzIHNob3VsZCByZXR1cm4gdGhlIGBkb20tbW9kdWxlYCBpZCBmcm9tIGEgc3RhdGljIGBpc2AgZ2V0dGVyLiAgSWYKICAgKiAgIG5vIHRlbXBsYXRlIGlzIG5lZWRlZCBvciB0aGUgdGVtcGxhdGUgaXMgcHJvdmlkZWQgZGlyZWN0bHkgdmlhIHRoZQogICAqICAgYHRlbXBsYXRlYCBnZXR0ZXIsIHRoZXJlIGlzIG5vIG5lZWQgdG8gZGVmaW5lIGBpc2AgZm9yIHRoZSBlbGVtZW50LgogICAqCiAgICogLSBgc3RhdGljIGdldCB0ZW1wbGF0ZSgpYDogVXNlcnMgbWF5IHByb3ZpZGUgdGhlIHRlbXBsYXRlIGRpcmVjdGx5IChhcwogICAqICAgb3Bwb3NlZCB0byB2aWEgYGRvbS1tb2R1bGVgKSBieSBpbXBsZW1lbnRpbmcgYSBzdGF0aWMgYHRlbXBsYXRlYCBnZXR0ZXIuCiAgICogICBUaGUgZ2V0dGVyIG1heSByZXR1cm4gYW4gYEhUTUxUZW1wbGF0ZUVsZW1lbnRgIG9yIGEgc3RyaW5nLCB3aGljaCB3aWxsCiAgICogICBhdXRvbWF0aWNhbGx5IGJlIHBhcnNlZCBpbnRvIGEgdGVtcGxhdGUuCiAgICoKICAgKiAtIGBzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKWA6IFNob3VsZCByZXR1cm4gYW4gb2JqZWN0IGRlc2NyaWJpbmcKICAgKiAgIHByb3BlcnR5LXJlbGF0ZWQgbWV0YWRhdGEgdXNlZCBieSBQb2x5bWVyIGZlYXR1cmVzIChrZXk6IHByb3BlcnR5IG5hbWUKICAgKiAgIHZhbHVlOiBvYmplY3QgY29udGFpbmluZyBwcm9wZXJ0eSBtZXRhZGF0YSkuIFZhbGlkIGtleXMgaW4gcGVyLXByb3BlcnR5CiAgICogICBtZXRhZGF0YSBpbmNsdWRlOgogICAqICAgLSBgdHlwZWAgKFN0cmluZ3xOdW1iZXJ8T2JqZWN0fEFycmF5fC4uLik6IFVzZWQgYnkKICAgKiAgICAgYGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFja2AgdG8gZGV0ZXJtaW5lIGhvdyBzdHJpbmctYmFzZWQgYXR0cmlidXRlcwogICAqICAgICBhcmUgZGVzZXJpYWxpemVkIHRvIEphdmFTY3JpcHQgcHJvcGVydHkgdmFsdWVzLgogICAqICAgLSBgbm90aWZ5YCAoYm9vbGVhbik6IENhdXNlcyBhIGNoYW5nZSBpbiB0aGUgcHJvcGVydHkgdG8gZmlyZSBhCiAgICogICAgIG5vbi1idWJibGluZyBldmVudCBjYWxsZWQgYDxwcm9wZXJ0eT4tY2hhbmdlZGAuIEVsZW1lbnRzIHRoYXQgaGF2ZQogICAqICAgICBlbmFibGVkIHR3by13YXkgYmluZGluZyB0byB0aGUgcHJvcGVydHkgdXNlIHRoaXMgZXZlbnQgdG8gb2JzZXJ2ZSBjaGFuZ2VzLgogICAqICAgLSBgcmVhZE9ubHlgIChib29sZWFuKTogQ3JlYXRlcyBhIGdldHRlciBmb3IgdGhlIHByb3BlcnR5LCBidXQgbm8gc2V0dGVyLgogICAqICAgICBUbyBzZXQgYSByZWFkLW9ubHkgcHJvcGVydHksIHVzZSB0aGUgcHJpdmF0ZSBzZXR0ZXIgbWV0aG9kCiAgICogICAgIGBfc2V0UHJvcGVydHkocHJvcGVydHksIHZhbHVlKWAuCiAgICogICAtIGBvYnNlcnZlcmAgKHN0cmluZyk6IE9ic2VydmVyIG1ldGhvZCBuYW1lIHRoYXQgd2lsbCBiZSBjYWxsZWQgd2hlbgogICAqICAgICB0aGUgcHJvcGVydHkgY2hhbmdlcy4gVGhlIGFyZ3VtZW50cyBvZiB0aGUgbWV0aG9kIGFyZQogICAqICAgICBgKHZhbHVlLCBwcmV2aW91c1ZhbHVlKWAuCiAgICogICAtIGBjb21wdXRlZGAgKHN0cmluZyk6IFN0cmluZyBkZXNjcmliaW5nIG1ldGhvZCBhbmQgZGVwZW5kZW50IHByb3BlcnRpZXMKICAgKiAgICAgZm9yIGNvbXB1dGluZyB0aGUgdmFsdWUgb2YgdGhpcyBwcm9wZXJ0eSAoZS5nLiBgJ2NvbXB1dGVGb28oYmFyLCB6b3QpJ2ApLgogICAqICAgICBDb21wdXRlZCBwcm9wZXJ0aWVzIGFyZSByZWFkLW9ubHkgYnkgZGVmYXVsdCBhbmQgY2FuIG9ubHkgYmUgY2hhbmdlZAogICAqICAgICB2aWEgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgY29tcHV0aW5nIG1ldGhvZC4KICAgKgogICAqIC0gYHN0YXRpYyBnZXQgb2JzZXJ2ZXJzKClgOiBBcnJheSBvZiBzdHJpbmdzIGRlc2NyaWJpbmcgbXVsdGktcHJvcGVydHkKICAgKiAgIG9ic2VydmVyIG1ldGhvZHMgYW5kIHRoZWlyIGRlcGVuZGVudCBwcm9wZXJ0aWVzIChlLmcuCiAgICogICBgJ29ic2VydmVBQkMoYSwgYiwgYyknYCkuCiAgICoKICAgKiBUaGUgYmFzZSBjbGFzcyBwcm92aWRlcyBkZWZhdWx0IGltcGxlbWVudGF0aW9ucyBmb3IgdGhlIGZvbGxvd2luZyBzdGFuZGFyZAogICAqIGN1c3RvbSBlbGVtZW50IGxpZmVjeWNsZSBjYWxsYmFja3M7IHVzZXJzIG1heSBvdmVycmlkZSB0aGVzZSwgYnV0IHNob3VsZAogICAqIGNhbGwgdGhlIHN1cGVyIG1ldGhvZCB0byBlbnN1cmUKICAgKiAtIGBjb25zdHJ1Y3RvcmA6IFJ1biB3aGVuIHRoZSBlbGVtZW50IGlzIGNyZWF0ZWQgb3IgdXBncmFkZWQKICAgKiAtIGBjb25uZWN0ZWRDYWxsYmFja2A6IFJ1biBlYWNoIHRpbWUgdGhlIGVsZW1lbnQgaXMgY29ubmVjdGVkIHRvIHRoZQogICAqICAgZG9jdW1lbnQKICAgKiAtIGBkaXNjb25uZWN0ZWRDYWxsYmFja2A6IFJ1biBlYWNoIHRpbWUgdGhlIGVsZW1lbnQgaXMgZGlzY29ubmVjdGVkIGZyb20KICAgKiAgIHRoZSBkb2N1bWVudAogICAqIC0gYGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFja2A6IFJ1biBlYWNoIHRpbWUgYW4gYXR0cmlidXRlIGluCiAgICogICBgb2JzZXJ2ZWRBdHRyaWJ1dGVzYCBpcyBzZXQgb3IgcmVtb3ZlZCAobm90ZTogdGhpcyBlbGVtZW50J3MgZGVmYXVsdAogICAqICAgYG9ic2VydmVkQXR0cmlidXRlc2AgaW1wbGVtZW50YXRpb24gd2lsbCBhdXRvbWF0aWNhbGx5IHJldHVybiBhbiBhcnJheQogICAqICAgb2YgZGFzaC1jYXNlZCBhdHRyaWJ1dGVzIGJhc2VkIG9uIGBwcm9wZXJ0aWVzYCkKICAgKgogICAqIEBtaXhpbkZ1bmN0aW9uCiAgICogQHBvbHltZXIKICAgKiBAYXBwbGllc01peGluIFBvbHltZXIuUHJvcGVydHlFZmZlY3RzCiAgICogQGFwcGxpZXNNaXhpbiBQb2x5bWVyLlByb3BlcnRpZXNNaXhpbgogICAqIEBtZW1iZXJvZiBQb2x5bWVyCiAgICogQHByb3BlcnR5IHJvb3RQYXRoIHtzdHJpbmd9IFNldCB0byB0aGUgdmFsdWUgb2YgYFBvbHltZXIucm9vdFBhdGhgLAogICAqICAgd2hpY2ggZGVmYXVsdHMgdG8gdGhlIG1haW4gZG9jdW1lbnQgcGF0aAogICAqIEBwcm9wZXJ0eSBpbXBvcnRQYXRoIHtzdHJpbmd9IFNldCB0byB0aGUgdmFsdWUgb2YgdGhlIGNsYXNzJ3Mgc3RhdGljCiAgICogICBgaW1wb3J0UGF0aGAgcHJvcGVydHksIHdoaWNoIGRlZmF1bHRzIHRvIHRoZSBwYXRoIG9mIHRoaXMgZWxlbWVudCdzCiAgICogICBgZG9tLW1vZHVsZWAgKHdoZW4gYGlzYCBpcyB1c2VkKSwgYnV0IGNhbiBiZSBvdmVycmlkZGVuIGZvciBvdGhlcgogICAqICAgaW1wb3J0IHN0cmF0ZWdpZXMuCiAgICogQHN1bW1hcnkgRWxlbWVudCBjbGFzcyBtaXhpbiB0aGF0IHByb3ZpZGVzIHRoZSBjb3JlIEFQSSBmb3IgUG9seW1lcidzCiAgICogbWV0YS1wcm9ncmFtbWluZyBmZWF0dXJlcy4KICAgKi8KICBQb2x5bWVyLkVsZW1lbnRNaXhpbiA9IFBvbHltZXIuZGVkdXBpbmdNaXhpbihiYXNlID0+IHsKCiAgICAvKioKICAgICAqIEBjb25zdHJ1Y3RvcgogICAgICogQGV4dGVuZHMge2Jhc2V9CiAgICAgKiBAaW1wbGVtZW50cyB7UG9seW1lcl9Qcm9wZXJ0eUVmZmVjdHN9CiAgICAgKiBAaW1wbGVtZW50cyB7UG9seW1lcl9Qcm9wZXJ0aWVzTWl4aW59CiAgICAgKiBAcHJpdmF0ZQogICAgICovCiAgICBjb25zdCBwb2x5bWVyRWxlbWVudEJhc2UgPSBQb2x5bWVyLlByb3BlcnRpZXNNaXhpbihQb2x5bWVyLlByb3BlcnR5RWZmZWN0cyhiYXNlKSk7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGEgbGlzdCBvZiBwcm9wZXJ0aWVzIHdpdGggZGVmYXVsdCB2YWx1ZXMuCiAgICAgKiBUaGlzIGxpc3QgaXMgY3JlYXRlZCBhcyBhbiBvcHRpbWl6YXRpb24gc2luY2UgaXQgaXMgYSBzdWJzZXQgb2YKICAgICAqIHRoZSBsaXN0IHJldHVybmVkIGZyb20gYF9wcm9wZXJ0aWVzYC4KICAgICAqIFRoaXMgbGlzdCBpcyB1c2VkIGluIGBfaW5pdGlhbGl6ZVByb3BlcnRpZXNgIHRvIHNldCBwcm9wZXJ0eSBkZWZhdWx0cy4KICAgICAqCiAgICAgKiBAcGFyYW0ge1BvbHltZXJFbGVtZW50Q29uc3RydWN0b3J9IGNvbnN0cnVjdG9yIEVsZW1lbnQgY2xhc3MKICAgICAqIEByZXR1cm4ge1BvbHltZXJFbGVtZW50UHJvcGVydGllc30gRmxhdHRlbmVkIHByb3BlcnRpZXMgZm9yIHRoaXMgY2xhc3MKICAgICAqICAgdGhhdCBoYXZlIGRlZmF1bHQgdmFsdWVzCiAgICAgKiBAcHJpdmF0ZQogICAgICovCiAgICBmdW5jdGlvbiBwcm9wZXJ0eURlZmF1bHRzKGNvbnN0cnVjdG9yKSB7CiAgICAgIGlmICghY29uc3RydWN0b3IuaGFzT3duUHJvcGVydHkoCiAgICAgICAgSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgnX19wcm9wZXJ0eURlZmF1bHRzJywgY29uc3RydWN0b3IpKSkgewogICAgICAgIGNvbnN0cnVjdG9yLl9fcHJvcGVydHlEZWZhdWx0cyA9IG51bGw7CiAgICAgICAgbGV0IHByb3BzID0gY29uc3RydWN0b3IuX3Byb3BlcnRpZXM7CiAgICAgICAgZm9yIChsZXQgcCBpbiBwcm9wcykgewogICAgICAgICAgbGV0IGluZm8gPSBwcm9wc1twXTsKICAgICAgICAgIGlmICgndmFsdWUnIGluIGluZm8pIHsKICAgICAgICAgICAgY29uc3RydWN0b3IuX19wcm9wZXJ0eURlZmF1bHRzID0gY29uc3RydWN0b3IuX19wcm9wZXJ0eURlZmF1bHRzIHx8IHt9OwogICAgICAgICAgICBjb25zdHJ1Y3Rvci5fX3Byb3BlcnR5RGVmYXVsdHNbcF0gPSBpbmZvOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gY29uc3RydWN0b3IuX19wcm9wZXJ0eURlZmF1bHRzOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyBhIG1lbW9pemVkIHZlcnNpb24gb2YgdGhlIGBvYnNlcnZlcnNgIGFycmF5LgogICAgICogQHBhcmFtIHtQb2x5bWVyRWxlbWVudENvbnN0cnVjdG9yfSBjb25zdHJ1Y3RvciBFbGVtZW50IGNsYXNzCiAgICAgKiBAcmV0dXJuIHtBcnJheX0gQXJyYXkgY29udGFpbmluZyBvd24gb2JzZXJ2ZXJzIGZvciB0aGUgZ2l2ZW4gY2xhc3MKICAgICAqIEBwcm90ZWN0ZWQKICAgICAqLwogICAgZnVuY3Rpb24gb3duT2JzZXJ2ZXJzKGNvbnN0cnVjdG9yKSB7CiAgICAgIGlmICghY29uc3RydWN0b3IuaGFzT3duUHJvcGVydHkoCiAgICAgICAgSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgnX19vd25PYnNlcnZlcnMnLCBjb25zdHJ1Y3RvcikpKSB7CiAgICAgICAgICBjb25zdHJ1Y3Rvci5fX293bk9ic2VydmVycyA9CiAgICAgICAgICBjb25zdHJ1Y3Rvci5oYXNPd25Qcm9wZXJ0eShKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCdvYnNlcnZlcnMnLCBjb25zdHJ1Y3RvcikpID8KICAgICAgICAgIC8qKiBAdHlwZSB7UG9seW1lckVsZW1lbnRDb25zdHJ1Y3Rvcn0gKi8gKGNvbnN0cnVjdG9yKS5vYnNlcnZlcnMgOiBudWxsOwogICAgICB9CiAgICAgIHJldHVybiBjb25zdHJ1Y3Rvci5fX293bk9ic2VydmVyczsKICAgIH0KCiAgICAvKioKICAgICAqIENyZWF0ZXMgZWZmZWN0cyBmb3IgYSBwcm9wZXJ0eS4KICAgICAqCiAgICAgKiBOb3RlLCBvbmNlIGEgcHJvcGVydHkgaGFzIGJlZW4gc2V0IHRvCiAgICAgKiBgcmVhZE9ubHlgLCBgY29tcHV0ZWRgLCBgcmVmbGVjdFRvQXR0cmlidXRlYCwgb3IgYG5vdGlmeWAKICAgICAqIHRoZXNlIHZhbHVlcyBtYXkgbm90IGJlIGNoYW5nZWQuIEZvciBleGFtcGxlLCBhIHN1YmNsYXNzIGNhbm5vdAogICAgICogYWx0ZXIgdGhlc2Ugc2V0dGluZ3MuIEhvd2V2ZXIsIGFkZGl0aW9uYWwgYG9ic2VydmVyc2AgbWF5IGJlIGFkZGVkCiAgICAgKiBieSBzdWJjbGFzc2VzLgogICAgICoKICAgICAqIFRoZSBpbmZvIG9iamVjdCBzaG91bGQgY29udGFpbiBwcm9wZXJ0eSBtZXRhZGF0YSBhcyBmb2xsb3dzOgogICAgICoKICAgICAqICogYHR5cGVgOiB7ZnVuY3Rpb259IHR5cGUgdG8gd2hpY2ggYW4gYXR0cmlidXRlIG1hdGNoaW5nIHRoZSBwcm9wZXJ0eQogICAgICogaXMgZGVzZXJpYWxpemVkLiBOb3RlIHRoZSBwcm9wZXJ0eSBpcyBjYW1lbC1jYXNlZCBmcm9tIGEgZGFzaC1jYXNlZAogICAgICogYXR0cmlidXRlLiBGb3IgZXhhbXBsZSwgJ2Zvby1iYXInIGF0dHJpYnV0ZSBpcyBkZXNlcmlhbGl6ZWQgdG8gYQogICAgICogcHJvcGVydHkgbmFtZWQgJ2Zvb0JhcicuCiAgICAgKgogICAgICogKiBgcmVhZE9ubHlgOiB7Ym9vbGVhbn0gY3JlYXRlcyBhIHJlYWRPbmx5IHByb3BlcnR5IGFuZAogICAgICogbWFrZXMgYSBwcml2YXRlIHNldHRlciBmb3IgdGhlIHByaXZhdGUgb2YgdGhlIGZvcm0gJ19zZXRGb28nIGZvciBhCiAgICAgKiBwcm9wZXJ0eSAnZm9vJywKICAgICAqCiAgICAgKiAqIGBjb21wdXRlZGA6IHtzdHJpbmd9IGNyZWF0ZXMgYSBjb21wdXRlZCBwcm9wZXJ0eS4gQSBjb21wdXRlZCBwcm9wZXJ0eQogICAgICogaXMgYWxzbyBhdXRvbWF0aWNhbGx5IHNldCB0byBgcmVhZE9ubHk6IHRydWVgLiBUaGUgdmFsdWUgaXMgY2FsY3VsYXRlZAogICAgICogYnkgcnVubmluZyBhIG1ldGhvZCBhbmQgYXJndW1lbnRzIHBhcnNlZCBmcm9tIHRoZSBnaXZlbiBzdHJpbmcuIEZvcgogICAgICogZXhhbXBsZSAnY29tcHV0ZShmb28pJyB3aWxsIGNvbXB1dGUgYSBnaXZlbiBwcm9wZXJ0eSB3aGVuIHRoZQogICAgICogJ2ZvbycgcHJvcGVydHkgY2hhbmdlcyBieSBleGVjdXRpbmcgdGhlICdjb21wdXRlJyBtZXRob2QuIFRoaXMgbWV0aG9kCiAgICAgKiBtdXN0IHJldHVybiB0aGUgY29tcHV0ZWQgdmFsdWUuCiAgICAgKgogICAgICogKiBgcmVmbGVjdFRvQXR0cmlidXRlYDoge2Jvb2xlYW59IElmIHRydWUsIHRoZSBwcm9wZXJ0eSB2YWx1ZSBpcyByZWZsZWN0ZWQKICAgICAqIHRvIGFuIGF0dHJpYnV0ZSBvZiB0aGUgc2FtZSBuYW1lLiBOb3RlLCB0aGUgYXR0cmlidXRlIGlzIGRhc2gtY2FzZWQKICAgICAqIHNvIGEgcHJvcGVydHkgbmFtZWQgJ2Zvb0JhcicgaXMgcmVmbGVjdGVkIGFzICdmb28tYmFyJy4KICAgICAqCiAgICAgKiAqIGBub3RpZnlgOiB7Ym9vbGVhbn0gc2VuZHMgYSBub24tYnViYmxpbmcgbm90aWZpY2F0aW9uIGV2ZW50IHdoZW4KICAgICAqIHRoZSBwcm9wZXJ0eSBjaGFuZ2VzLiBGb3IgZXhhbXBsZSwgYSBwcm9wZXJ0eSBuYW1lZCAnZm9vJyBzZW5kcyBhbgogICAgICogZXZlbnQgbmFtZWQgJ2Zvby1jaGFuZ2VkJyB3aXRoIGBldmVudC5kZXRhaWxgIHNldCB0byB0aGUgdmFsdWUgb2YKICAgICAqIHRoZSBwcm9wZXJ0eS4KICAgICAqCiAgICAgKiAqIG9ic2VydmVyOiB7c3RyaW5nfSBuYW1lIG9mIGEgbWV0aG9kIHRoYXQgcnVucyB3aGVuIHRoZSBwcm9wZXJ0eQogICAgICogY2hhbmdlcy4gVGhlIGFyZ3VtZW50cyBvZiB0aGUgbWV0aG9kIGFyZSAodmFsdWUsIHByZXZpb3VzVmFsdWUpLgogICAgICoKICAgICAqIE5vdGU6IFVzZXJzIG1heSB3YW50IGNvbnRyb2wgb3ZlciBtb2RpZnlpbmcgcHJvcGVydHkKICAgICAqIGVmZmVjdHMgdmlhIHN1YmNsYXNzaW5nLiBGb3IgZXhhbXBsZSwgYSB1c2VyIG1pZ2h0IHdhbnQgdG8gbWFrZSBhCiAgICAgKiByZWZsZWN0VG9BdHRyaWJ1dGUgcHJvcGVydHkgbm90IGRvIHNvIGluIGEgc3ViY2xhc3MuIFdlJ3ZlIGNob3NlbiB0bwogICAgICogZGlzYWJsZSB0aGlzIGJlY2F1c2UgaXQgbGVhZHMgdG8gYWRkaXRpb25hbCBjb21wbGljYXRpb24uCiAgICAgKiBGb3IgZXhhbXBsZSwgYSByZWFkT25seSBlZmZlY3QgZ2VuZXJhdGVzIGEgc3BlY2lhbCBzZXR0ZXIuIElmIGEgc3ViY2xhc3MKICAgICAqIGRpc2FibGVzIHRoZSBlZmZlY3QsIHRoZSBzZXR0ZXIgd291bGQgZmFpbCB1bmV4cGVjdGVkbHkuCiAgICAgKiBCYXNlZCBvbiBmZWVkYmFjaywgd2UgbWF5IHdhbnQgdG8gdHJ5IHRvIG1ha2UgZWZmZWN0cyBtb3JlIG1hbGxlYWJsZQogICAgICogYW5kL29yIHByb3ZpZGUgYW4gYWR2YW5jZWQgYXBpIGZvciBtYW5pcHVsYXRpbmcgdGhlbS4KICAgICAqIEFsc28gY29uc2lkZXIgYWRkaW5nIHdhcm5pbmdzIHdoZW4gYW4gZWZmZWN0IGNhbm5vdCBiZSBjaGFuZ2VkLgogICAgICoKICAgICAqIEBwYXJhbSB7IVBvbHltZXJFbGVtZW50fSBwcm90byBFbGVtZW50IGNsYXNzIHByb3RvdHlwZSB0byBhZGQgYWNjZXNzb3JzCiAgICAgKiAgIGFuZCBlZmZlY3RzIHRvCiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBOYW1lIG9mIHRoZSBwcm9wZXJ0eS4KICAgICAqIEBwYXJhbSB7T2JqZWN0fSBpbmZvIEluZm8gb2JqZWN0IGZyb20gd2hpY2ggdG8gY3JlYXRlIHByb3BlcnR5IGVmZmVjdHMuCiAgICAgKiBTdXBwb3J0ZWQga2V5czoKICAgICAqIEBwYXJhbSB7T2JqZWN0fSBhbGxQcm9wcyBGbGF0dGVuZWQgbWFwIG9mIGFsbCBwcm9wZXJ0aWVzIGRlZmluZWQgaW4gdGhpcwogICAgICogICBlbGVtZW50IChpbmNsdWRpbmcgaW5oZXJpdGVkIHByb3BlcnRpZXMpCiAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICogQHByaXZhdGUKICAgICAqLwogICAgZnVuY3Rpb24gY3JlYXRlUHJvcGVydHlGcm9tQ29uZmlnKHByb3RvLCBuYW1lLCBpbmZvLCBhbGxQcm9wcykgewogICAgICAvLyBjb21wdXRlZCBmb3JjZXMgcmVhZE9ubHkuLi4KICAgICAgaWYgKGluZm8uY29tcHV0ZWQpIHsKICAgICAgICBpbmZvLnJlYWRPbmx5ID0gdHJ1ZTsKICAgICAgfQogICAgICAvLyBOb3RlLCBzaW5jZSBhbGwgY29tcHV0ZWQgcHJvcGVydGllcyBhcmUgcmVhZE9ubHksIHRoaXMgcHJldmVudHMKICAgICAgLy8gYWRkaW5nIGFkZGl0aW9uYWwgY29tcHV0ZWQgcHJvcGVydHkgZWZmZWN0cyAod2hpY2ggbGVhZHMgdG8gYSBjb25mdXNpbmcKICAgICAgLy8gc2V0dXAgd2hlcmUgbXVsdGlwbGUgdHJpZ2dlcnMgZm9yIHNldHRpbmcgYSBwcm9wZXJ0eSkKICAgICAgLy8gV2hpbGUgd2UgZG8gaGF2ZSBgaGFzQ29tcHV0ZWRFZmZlY3RgIHRoaXMgaXMgc2V0IG9uIHRoZSBwcm9wZXJ0eSdzCiAgICAgIC8vIGRlcGVuZGVuY2llcyByYXRoZXIgdGhhbiBpdHNlbGYuCiAgICAgIGlmIChpbmZvLmNvbXB1dGVkICYmICFwcm90by5faGFzUmVhZE9ubHlFZmZlY3QobmFtZSkpIHsKICAgICAgICBwcm90by5fY3JlYXRlQ29tcHV0ZWRQcm9wZXJ0eShuYW1lLCBpbmZvLmNvbXB1dGVkLCBhbGxQcm9wcyk7CiAgICAgIH0KICAgICAgaWYgKGluZm8ucmVhZE9ubHkgJiYgIXByb3RvLl9oYXNSZWFkT25seUVmZmVjdChuYW1lKSkgewogICAgICAgIHByb3RvLl9jcmVhdGVSZWFkT25seVByb3BlcnR5KG5hbWUsICFpbmZvLmNvbXB1dGVkKTsKICAgICAgfQogICAgICBpZiAoaW5mby5yZWZsZWN0VG9BdHRyaWJ1dGUgJiYgIXByb3RvLl9oYXNSZWZsZWN0RWZmZWN0KG5hbWUpKSB7CiAgICAgICAgcHJvdG8uX2NyZWF0ZVJlZmxlY3RlZFByb3BlcnR5KG5hbWUpOwogICAgICB9CiAgICAgIGlmIChpbmZvLm5vdGlmeSAmJiAhcHJvdG8uX2hhc05vdGlmeUVmZmVjdChuYW1lKSkgewogICAgICAgIHByb3RvLl9jcmVhdGVOb3RpZnlpbmdQcm9wZXJ0eShuYW1lKTsKICAgICAgfQogICAgICAvLyBhbHdheXMgYWRkIG9ic2VydmVyCiAgICAgIGlmIChpbmZvLm9ic2VydmVyKSB7CiAgICAgICAgcHJvdG8uX2NyZWF0ZVByb3BlcnR5T2JzZXJ2ZXIobmFtZSwgaW5mby5vYnNlcnZlciwgYWxsUHJvcHNbaW5mby5vYnNlcnZlcl0pOwogICAgICB9CiAgICAgIC8vIGFsd2F5cyBjcmVhdGUgdGhlIG1hcHBpbmcgZnJvbSBhdHRyaWJ1dGUgYmFjayB0byBwcm9wZXJ0eSBmb3IgZGVzZXJpYWxpemF0aW9uLgogICAgICBwcm90by5fYWRkUHJvcGVydHlUb0F0dHJpYnV0ZU1hcChuYW1lKTsKICAgIH0KCiAgICAvKioKICAgICAqIFByb2Nlc3MgYWxsIHN0eWxlIGVsZW1lbnRzIGluIHRoZSBlbGVtZW50IHRlbXBsYXRlLiBTdHlsZXMgd2l0aCB0aGUKICAgICAqIGBpbmNsdWRlYCBhdHRyaWJ1dGUgYXJlIHByb2Nlc3NlZCBzdWNoIHRoYXQgYW55IHN0eWxlcyBpbgogICAgICogdGhlIGFzc29jaWF0ZWQgInN0eWxlIG1vZHVsZXMiIGFyZSBpbmNsdWRlZCBpbiB0aGUgZWxlbWVudCB0ZW1wbGF0ZS4KICAgICAqIEBwYXJhbSB7UG9seW1lckVsZW1lbnRDb25zdHJ1Y3Rvcn0ga2xhc3MgRWxlbWVudCBjbGFzcwogICAgICogQHBhcmFtIHshSFRNTFRlbXBsYXRlRWxlbWVudH0gdGVtcGxhdGUgVGVtcGxhdGUgdG8gcHJvY2VzcwogICAgICogQHBhcmFtIHtzdHJpbmd9IGlzIE5hbWUgb2YgZWxlbWVudAogICAgICogQHBhcmFtIHtzdHJpbmd9IGJhc2VVUkkgQmFzZSBVUkkgZm9yIGVsZW1lbnQKICAgICAqIEBwcml2YXRlCiAgICAgKi8KICAgIGZ1bmN0aW9uIHByb2Nlc3NFbGVtZW50U3R5bGVzKGtsYXNzLCB0ZW1wbGF0ZSwgaXMsIGJhc2VVUkkpIHsKICAgICAgaWYgKCFidWlsdENTUykgewogICAgICAgIGNvbnN0IHRlbXBsYXRlU3R5bGVzID0gdGVtcGxhdGUuY29udGVudC5xdWVyeVNlbGVjdG9yQWxsKCdzdHlsZScpOwogICAgICAgIGNvbnN0IHN0eWxlc1dpdGhJbXBvcnRzID0gUG9seW1lci5TdHlsZUdhdGhlci5zdHlsZXNGcm9tVGVtcGxhdGUodGVtcGxhdGUpOwogICAgICAgIC8vIGluc2VydCBzdHlsZXMgZnJvbSA8bGluayByZWw9ImltcG9ydCIgdHlwZT0iY3NzIj4gYXQgdGhlIHRvcCBvZiB0aGUgdGVtcGxhdGUKICAgICAgICBjb25zdCBsaW5rZWRTdHlsZXMgPSBQb2x5bWVyLlN0eWxlR2F0aGVyLnN0eWxlc0Zyb21Nb2R1bGVJbXBvcnRzKGlzKTsKICAgICAgICBjb25zdCBmaXJzdFRlbXBsYXRlQ2hpbGQgPSB0ZW1wbGF0ZS5jb250ZW50LmZpcnN0RWxlbWVudENoaWxkOwogICAgICAgIGZvciAobGV0IGlkeCA9IDA7IGlkeCA8IGxpbmtlZFN0eWxlcy5sZW5ndGg7IGlkeCsrKSB7CiAgICAgICAgICBsZXQgcyA9IGxpbmtlZFN0eWxlc1tpZHhdOwogICAgICAgICAgcy50ZXh0Q29udGVudCA9IGtsYXNzLl9wcm9jZXNzU3R5bGVUZXh0KHMudGV4dENvbnRlbnQsIGJhc2VVUkkpOwogICAgICAgICAgdGVtcGxhdGUuY29udGVudC5pbnNlcnRCZWZvcmUocywgZmlyc3RUZW1wbGF0ZUNoaWxkKTsKICAgICAgICB9CiAgICAgICAgLy8ga2VlcCB0cmFjayBvZiB0aGUgbGFzdCAiY29uY3JldGUiIHN0eWxlIGluIHRoZSB0ZW1wbGF0ZSB3ZSBoYXZlIGVuY291bnRlcmVkCiAgICAgICAgbGV0IHRlbXBsYXRlU3R5bGVJbmRleCA9IDA7CiAgICAgICAgLy8gZW5zdXJlIGFsbCBnYXRoZXJlZCBzdHlsZXMgYXJlIGFjdHVhbGx5IGluIHRoaXMgdGVtcGxhdGUuCiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHlsZXNXaXRoSW1wb3J0cy5sZW5ndGg7IGkrKykgewogICAgICAgICAgbGV0IHMgPSBzdHlsZXNXaXRoSW1wb3J0c1tpXTsKICAgICAgICAgIGxldCB0ZW1wbGF0ZVN0eWxlID0gdGVtcGxhdGVTdHlsZXNbdGVtcGxhdGVTdHlsZUluZGV4XTsKICAgICAgICAgIC8vIGlmIHRoZSBzdHlsZSBpcyBub3QgaW4gdGhpcyB0ZW1wbGF0ZSwgaXQncyBiZWVuICJpbmNsdWRlZCIgYW5kCiAgICAgICAgICAvLyB3ZSBwdXQgYSBjbG9uZSBvZiBpdCBpbiB0aGUgdGVtcGxhdGUgYmVmb3JlIHRoZSBzdHlsZSB0aGF0IGluY2x1ZGVkIGl0CiAgICAgICAgICBpZiAodGVtcGxhdGVTdHlsZSAhPT0gcykgewogICAgICAgICAgICBzID0gcy5jbG9uZU5vZGUodHJ1ZSk7CiAgICAgICAgICAgIHRlbXBsYXRlU3R5bGUucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUocywgdGVtcGxhdGVTdHlsZSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0ZW1wbGF0ZVN0eWxlSW5kZXgrKzsKICAgICAgICAgIH0KICAgICAgICAgIHMudGV4dENvbnRlbnQgPSBrbGFzcy5fcHJvY2Vzc1N0eWxlVGV4dChzLnRleHRDb250ZW50LCBiYXNlVVJJKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKHdpbmRvdy5TaGFkeUNTUykgewogICAgICAgIHdpbmRvdy5TaGFkeUNTUy5wcmVwYXJlVGVtcGxhdGUodGVtcGxhdGUsIGlzKTsKICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogTG9vayB1cCB0ZW1wbGF0ZSBmcm9tIGRvbS1tb2R1bGUgZm9yIGVsZW1lbnQKICAgICAqCiAgICAgKiBAcGFyYW0geyFzdHJpbmd9IGlzIEVsZW1lbnQgbmFtZSB0byBsb29rIHVwCiAgICAgKiBAcmV0dXJuIHshSFRNTFRlbXBsYXRlRWxlbWVudH0gVGVtcGxhdGUgZm91bmQgaW4gZG9tIG1vZHVsZSwgb3IKICAgICAqICAgdW5kZWZpbmVkIGlmIG5vdCBmb3VuZAogICAgICogQHByb3RlY3RlZAogICAgICovCiAgICBmdW5jdGlvbiBnZXRUZW1wbGF0ZUZyb21Eb21Nb2R1bGUoaXMpIHsKICAgICAgbGV0IHRlbXBsYXRlID0gbnVsbDsKICAgICAgaWYgKGlzICYmIFBvbHltZXIuRG9tTW9kdWxlKSB7CiAgICAgICAgdGVtcGxhdGUgPSBQb2x5bWVyLkRvbU1vZHVsZS5pbXBvcnQoaXMsICd0ZW1wbGF0ZScpOwogICAgICAgIC8vIFVuZGVyIHN0cmljdFRlbXBsYXRlUG9saWN5LCByZXF1aXJlIGFueSBlbGVtZW50IHdpdGggYW4gYGlzYAogICAgICAgIC8vIHNwZWNpZmllZCB0byBoYXZlIGEgZG9tLW1vZHVsZQogICAgICAgIGlmIChQb2x5bWVyLnN0cmljdFRlbXBsYXRlUG9saWN5ICYmICF0ZW1wbGF0ZSkgewogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBzdHJpY3RUZW1wbGF0ZVBvbGljeTogZXhwZWN0aW5nIGRvbS1tb2R1bGUgb3IgbnVsbCB0ZW1wbGF0ZSBmb3IgJHtpc31gKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIHRlbXBsYXRlOwogICAgfQoKICAvKioKICAgICAqIEBwb2x5bWVyCiAgICAgKiBAbWl4aW5DbGFzcwogICAgICogQHVucmVzdHJpY3RlZAogICAgICogQGltcGxlbWVudHMge1BvbHltZXJfRWxlbWVudE1peGlufQogICAgICovCiAgICBjbGFzcyBQb2x5bWVyRWxlbWVudCBleHRlbmRzIHBvbHltZXJFbGVtZW50QmFzZSB7CgogICAgICAvKioKICAgICAgICogT3ZlcnJpZGUgb2YgUHJvcGVydGllc01peGluIF9maW5hbGl6ZUNsYXNzIHRvIGNyZWF0ZSBvYnNlcnZlcnMgYW5kCiAgICAgICAqIGZpbmQgdGhlIHRlbXBsYXRlLgogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKiBAcHJvdGVjdGVkCiAgICAgICAqIEBvdmVycmlkZQogICAgICAgKiBAc3VwcHJlc3Mge21pc3NpbmdQcm9wZXJ0aWVzfSBJbnRlcmZhY2VzIGluIGNsb3N1cmUgZG8gbm90IGluaGVyaXQgc3RhdGljcywgYnV0IGNsYXNzZXMgZG8KICAgICAgICovCiAgICAgIHN0YXRpYyBfZmluYWxpemVDbGFzcygpIHsKICAgICAgICBzdXBlci5fZmluYWxpemVDbGFzcygpOwogICAgICAgIGNvbnN0IG9ic2VydmVycyA9IG93bk9ic2VydmVycyh0aGlzKTsKICAgICAgICBpZiAob2JzZXJ2ZXJzKSB7CiAgICAgICAgICB0aGlzLmNyZWF0ZU9ic2VydmVycyhvYnNlcnZlcnMsIHRoaXMuX3Byb3BlcnRpZXMpOwogICAgICAgIH0KICAgICAgICB0aGlzLl9wcmVwYXJlVGVtcGxhdGUoKTsKICAgICAgfQoKICAgICAgc3RhdGljIF9wcmVwYXJlVGVtcGxhdGUoKSB7CiAgICAgICAgLy8gbm90ZTogY3JlYXRlICJ3b3JraW5nIiB0ZW1wbGF0ZSB0aGF0IGlzIGZpbmFsaXplZCBhdCBpbnN0YW5jZSB0aW1lCiAgICAgICAgbGV0IHRlbXBsYXRlID0gLyoqIEB0eXBlIHtQb2x5bWVyRWxlbWVudENvbnN0cnVjdG9yfSAqLyAodGhpcykudGVtcGxhdGU7CiAgICAgICAgaWYgKHRlbXBsYXRlKSB7CiAgICAgICAgICBpZiAodHlwZW9mIHRlbXBsYXRlID09PSAnc3RyaW5nJykgewogICAgICAgICAgICBsZXQgdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RlbXBsYXRlJyk7CiAgICAgICAgICAgIHQuaW5uZXJIVE1MID0gdGVtcGxhdGU7CiAgICAgICAgICAgIHRlbXBsYXRlID0gdDsKICAgICAgICAgIH0gZWxzZSBpZiAoIVBvbHltZXIubGVnYWN5T3B0aW1pemF0aW9ucykgewogICAgICAgICAgICAgdGVtcGxhdGUgPSB0ZW1wbGF0ZS5jbG9uZU5vZGUodHJ1ZSk7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICB0aGlzLnByb3RvdHlwZS5fdGVtcGxhdGUgPSB0ZW1wbGF0ZTsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIE92ZXJyaWRlIG9mIFByb3BlcnRpZXNDaGFuZ2VkIGNyZWF0ZVByb3BlcnRpZXMgdG8gY3JlYXRlIGFjY2Vzc29ycwogICAgICAgKiBhbmQgcHJvcGVydHkgZWZmZWN0cyBmb3IgYWxsIG9mIHRoZSBwcm9wZXJ0aWVzLgogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKiBAcHJvdGVjdGVkCiAgICAgICAqIEBvdmVycmlkZQogICAgICAgKi8KICAgICAgc3RhdGljIGNyZWF0ZVByb3BlcnRpZXMocHJvcHMpIHsKICAgICAgICBmb3IgKGxldCBwIGluIHByb3BzKSB7CiAgICAgICAgICBjcmVhdGVQcm9wZXJ0eUZyb21Db25maWcodGhpcy5wcm90b3R5cGUsIHAsIHByb3BzW3BdLCBwcm9wcyk7CiAgICAgICAgfQogICAgICB9CgogICAgICAvKioKICAgICAgICogQ3JlYXRlcyBvYnNlcnZlcnMgZm9yIHRoZSBnaXZlbiBgb2JzZXJ2ZXJzYCBhcnJheS4KICAgICAgICogTGV2ZXJhZ2VzIGBQcm9wZXJ0eUVmZmVjdHNgIHRvIGNyZWF0ZSBvYnNlcnZlcnMuCiAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYnNlcnZlcnMgQXJyYXkgb2Ygb2JzZXJ2ZXIgZGVzY3JpcHRvcnMgZm9yCiAgICAgICAqICAgdGhpcyBjbGFzcwogICAgICAgKiBAcGFyYW0ge09iamVjdH0gZHluYW1pY0ZucyBPYmplY3QgY29udGFpbmluZyBrZXlzIGZvciBhbnkgcHJvcGVydGllcwogICAgICAgKiAgIHRoYXQgYXJlIGZ1bmN0aW9ucyBhbmQgc2hvdWxkIHRyaWdnZXIgdGhlIGVmZmVjdCB3aGVuIHRoZSBmdW5jdGlvbgogICAgICAgKiAgIHJlZmVyZW5jZSBpcyBjaGFuZ2VkCiAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAqIEBwcm90ZWN0ZWQKICAgICAgICovCiAgICAgIHN0YXRpYyBjcmVhdGVPYnNlcnZlcnMob2JzZXJ2ZXJzLCBkeW5hbWljRm5zKSB7CiAgICAgICAgY29uc3QgcHJvdG8gPSB0aGlzLnByb3RvdHlwZTsKICAgICAgICBmb3IgKGxldCBpPTA7IGkgPCBvYnNlcnZlcnMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgIHByb3RvLl9jcmVhdGVNZXRob2RPYnNlcnZlcihvYnNlcnZlcnNbaV0sIGR5bmFtaWNGbnMpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIFJldHVybnMgdGhlIHRlbXBsYXRlIHRoYXQgd2lsbCBiZSBzdGFtcGVkIGludG8gdGhpcyBlbGVtZW50J3Mgc2hhZG93IHJvb3QuCiAgICAgICAqCiAgICAgICAqIElmIGEgYHN0YXRpYyBnZXQgaXMoKWAgZ2V0dGVyIGlzIGRlZmluZWQsIHRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uCiAgICAgICAqIHdpbGwgcmV0dXJuIHRoZSBmaXJzdCBgPHRlbXBsYXRlPmAgaW4gYSBgZG9tLW1vZHVsZWAgd2hvc2UgYGlkYAogICAgICAgKiBtYXRjaGVzIHRoaXMgZWxlbWVudCdzIGBpc2AuCiAgICAgICAqCiAgICAgICAqIFVzZXJzIG1heSBvdmVycmlkZSB0aGlzIGdldHRlciB0byByZXR1cm4gYW4gYXJiaXRyYXJ5IHRlbXBsYXRlCiAgICAgICAqIChpbiB3aGljaCBjYXNlIHRoZSBgaXNgIGdldHRlciBpcyB1bm5lY2Vzc2FyeSkuIFRoZSB0ZW1wbGF0ZSByZXR1cm5lZAogICAgICAgKiBtYXkgYmUgZWl0aGVyIGFuIGBIVE1MVGVtcGxhdGVFbGVtZW50YCBvciBhIHN0cmluZyB0aGF0IHdpbGwgYmUKICAgICAgICogYXV0b21hdGljYWxseSBwYXJzZWQgaW50byBhIHRlbXBsYXRlLgogICAgICAgKgogICAgICAgKiBOb3RlIHRoYXQgd2hlbiBzdWJjbGFzc2luZywgaWYgdGhlIHN1cGVyIGNsYXNzIG92ZXJyb2RlIHRoZSBkZWZhdWx0CiAgICAgICAqIGltcGxlbWVudGF0aW9uIGFuZCB0aGUgc3ViY2xhc3Mgd291bGQgbGlrZSB0byBwcm92aWRlIGFuIGFsdGVybmF0ZQogICAgICAgKiB0ZW1wbGF0ZSB2aWEgYSBgZG9tLW1vZHVsZWAsIGl0IHNob3VsZCBvdmVycmlkZSB0aGlzIGdldHRlciBhbmQKICAgICAgICogcmV0dXJuIGBQb2x5bWVyLkRvbU1vZHVsZS5pbXBvcnQodGhpcy5pcywgJ3RlbXBsYXRlJylgLgogICAgICAgKgogICAgICAgKiBJZiBhIHN1YmNsYXNzIHdvdWxkIGxpa2UgdG8gbW9kaWZ5IHRoZSBzdXBlciBjbGFzcyB0ZW1wbGF0ZSwgaXQgc2hvdWxkCiAgICAgICAqIGNsb25lIGl0IHJhdGhlciB0aGFuIG1vZGlmeSBpdCBpbiBwbGFjZS4gIElmIHRoZSBnZXR0ZXIgZG9lcyBleHBlbnNpdmUKICAgICAgICogd29yayBzdWNoIGFzIGNsb25pbmcvbW9kaWZ5aW5nIGEgdGVtcGxhdGUsIGl0IHNob3VsZCBtZW1vaXplIHRoZQogICAgICAgKiB0ZW1wbGF0ZSBmb3IgbWF4aW11bSBwZXJmb3JtYW5jZToKICAgICAgICoKICAgICAgICogICBsZXQgbWVtb2l6ZWRUZW1wbGF0ZTsKICAgICAgICogICBjbGFzcyBNeVN1YkNsYXNzIGV4dGVuZHMgTXlTdXBlckNsYXNzIHsKICAgICAgICogICAgIHN0YXRpYyBnZXQgdGVtcGxhdGUoKSB7CiAgICAgICAqICAgICAgIGlmICghbWVtb2l6ZWRUZW1wbGF0ZSkgewogICAgICAgKiAgICAgICAgIG1lbW9pemVkVGVtcGxhdGUgPSBNeVN1cGVyQ2xhc3MudGVtcGxhdGUuY2xvbmVOb2RlKHRydWUpOwogICAgICAgKiAgICAgICAgIGxldCBzdWJDb250ZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgICAgICAqICAgICAgICAgc3ViQ29udGVudC50ZXh0Q29udGVudCA9ICdUaGlzIGNhbWUgZnJvbSBNeVN1YkNsYXNzJzsKICAgICAgICogICAgICAgICBtZW1vaXplZFRlbXBsYXRlLmNvbnRlbnQuYXBwZW5kQ2hpbGQoc3ViQ29udGVudCk7CiAgICAgICAqICAgICAgIH0KICAgICAgICogICAgICAgcmV0dXJuIG1lbW9pemVkVGVtcGxhdGU7CiAgICAgICAqICAgICB9CiAgICAgICAqICAgfQogICAgICAgKgogICAgICAgKiBAcmV0dXJuIHtIVE1MVGVtcGxhdGVFbGVtZW50fHN0cmluZ30gVGVtcGxhdGUgdG8gYmUgc3RhbXBlZAogICAgICAgKi8KICAgICAgc3RhdGljIGdldCB0ZW1wbGF0ZSgpIHsKICAgICAgICAvLyBFeHBsYW5hdGlvbiBvZiB0ZW1wbGF0ZS1yZWxhdGVkIHByb3BlcnRpZXM6CiAgICAgICAgLy8gLSBjb25zdHJ1Y3Rvci50ZW1wbGF0ZSAodGhpcyBnZXR0ZXIpOiB0aGUgdGVtcGxhdGUgZm9yIHRoZSBjbGFzcy4KICAgICAgICAvLyAgICAgVGhpcyBjYW4gY29tZSBmcm9tIHRoZSBwcm90b3R5cGUgKGZvciBsZWdhY3kgZWxlbWVudHMpLCBmcm9tIGEKICAgICAgICAvLyAgICAgZG9tLW1vZHVsZSwgb3IgZnJvbSB0aGUgc3VwZXIgY2xhc3MncyB0ZW1wbGF0ZSAob3IgY2FuIGJlIG92ZXJyaWRkZW4KICAgICAgICAvLyAgICAgYWx0b2dldGhlciBieSB0aGUgdXNlcikKICAgICAgICAvLyAtIGNvbnN0cnVjdG9yLl90ZW1wbGF0ZTogbWVtb2l6ZWQgdmVyc2lvbiBvZiBjb25zdHJ1Y3Rvci50ZW1wbGF0ZQogICAgICAgIC8vIC0gcHJvdG90eXBlLl90ZW1wbGF0ZTogd29ya2luZyB0ZW1wbGF0ZSBmb3IgdGhlIGVsZW1lbnQsIHdoaWNoIHdpbGwgYmUKICAgICAgICAvLyAgICAgcGFyc2VkIGFuZCBtb2RpZmllZCBpbiBwbGFjZS4gSXQgaXMgYSBjbG9uZWQgdmVyc2lvbiBvZgogICAgICAgIC8vICAgICBjb25zdHJ1Y3Rvci50ZW1wbGF0ZSwgc2F2ZWQgaW4gX2ZpbmFsaXplQ2xhc3MoKS4gTm90ZSB0aGF0IGJlZm9yZQogICAgICAgIC8vICAgICB0aGlzIGdldHRlciBpcyBjYWxsZWQsIGZvciBsZWdhY3kgZWxlbWVudHMgdGhpcyBjb3VsZCBiZSBmcm9tIGEKICAgICAgICAvLyAgICAgX3RlbXBsYXRlIGZpZWxkIG9uIHRoZSBpbmZvIG9iamVjdCBwYXNzZWQgdG8gUG9seW1lcigpLCBhIGJlaGF2aW9yLAogICAgICAgIC8vICAgICBvciBzZXQgaW4gcmVnaXN0ZXJlZCgpOyBvbmNlIHRoZSBzdGF0aWMgZ2V0dGVyIHJ1bnMsIGEgY2xvbmUgb2YgaXQKICAgICAgICAvLyAgICAgd2lsbCBvdmVyd3JpdGUgaXQgb24gdGhlIHByb3RvdHlwZSBhcyB0aGUgd29ya2luZyB0ZW1wbGF0ZS4KICAgICAgICBpZiAoIXRoaXMuaGFzT3duUHJvcGVydHkoSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgnX3RlbXBsYXRlJywgdGhpcykpKSB7CiAgICAgICAgICB0aGlzLl90ZW1wbGF0ZSA9CiAgICAgICAgICAgIC8vIElmIHVzZXIgaGFzIHB1dCB0ZW1wbGF0ZSBvbiBwcm90b3R5cGUgKGUuZy4gaW4gbGVnYWN5IHZpYSByZWdpc3RlcmVkCiAgICAgICAgICAgIC8vIGNhbGxiYWNrIG9yIGluZm8gb2JqZWN0KSwgcHJlZmVyIHRoYXQgZmlyc3QKICAgICAgICAgICAgdGhpcy5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkoSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgnX3RlbXBsYXRlJywgdGhpcy5wcm90b3R5cGUpKSA/CiAgICAgICAgICAgIHRoaXMucHJvdG90eXBlLl90ZW1wbGF0ZSA6CiAgICAgICAgICAgIC8vIExvb2sgaW4gZG9tLW1vZHVsZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBlbGVtZW50J3MgaXMKICAgICAgICAgICAgKGdldFRlbXBsYXRlRnJvbURvbU1vZHVsZSgvKiogQHR5cGUge1BvbHltZXJFbGVtZW50Q29uc3RydWN0b3J9Ki8gKHRoaXMpLmlzKSB8fAogICAgICAgICAgICAvLyBOZXh0IGxvb2sgZm9yIHN1cGVyY2xhc3MgdGVtcGxhdGUgKGNhbGwgdGhlIHN1cGVyIGltcGwgdGhpcwogICAgICAgICAgICAvLyB3YXkgc28gdGhhdCBgdGhpc2AgcG9pbnRzIHRvIHRoZSBzdXBlcmNsYXNzKQogICAgICAgICAgICBPYmplY3QuZ2V0UHJvdG90eXBlT2YoLyoqIEB0eXBlIHtQb2x5bWVyRWxlbWVudENvbnN0cnVjdG9yfSovICh0aGlzKS5wcm90b3R5cGUpLmNvbnN0cnVjdG9yLnRlbXBsYXRlKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRoaXMuX3RlbXBsYXRlOwogICAgICB9CgogICAgICAvKioKICAgICAgICogU2V0IHRoZSB0ZW1wbGF0ZS4KICAgICAgICoKICAgICAgICogQHBhcmFtIHshSFRNTFRlbXBsYXRlRWxlbWVudHxzdHJpbmd9IHZhbHVlIFRlbXBsYXRlIHRvIHNldC4KICAgICAgICovCiAgICAgIHN0YXRpYyBzZXQgdGVtcGxhdGUodmFsdWUpIHsKICAgICAgICB0aGlzLl90ZW1wbGF0ZSA9IHZhbHVlOwogICAgICB9CgogICAgICAvKioKICAgICAgICogUGF0aCBtYXRjaGluZyB0aGUgdXJsIGZyb20gd2hpY2ggdGhlIGVsZW1lbnQgd2FzIGltcG9ydGVkLgogICAgICAgKgogICAgICAgKiBUaGlzIHBhdGggaXMgdXNlZCB0byByZXNvbHZlIHVybCdzIGluIHRlbXBsYXRlIHN0eWxlIGNzc1RleHQuCiAgICAgICAqIFRoZSBgaW1wb3J0UGF0aGAgcHJvcGVydHkgaXMgYWxzbyBzZXQgb24gZWxlbWVudCBpbnN0YW5jZXMgYW5kIGNhbiBiZQogICAgICAgKiB1c2VkIHRvIGNyZWF0ZSBiaW5kaW5ncyByZWxhdGl2ZSB0byB0aGUgaW1wb3J0IHBhdGguCiAgICAgICAqCiAgICAgICAqIEZvciBlbGVtZW50cyBkZWZpbmVkIGluIEVTIG1vZHVsZXMsIHVzZXJzIHNob3VsZCBpbXBsZW1lbnQKICAgICAgICogYHN0YXRpYyBnZXQgaW1wb3J0TWV0YSgpIHsgcmV0dXJuIGltcG9ydC5tZXRhOyB9YCwgYW5kIHRoZSBkZWZhdWx0CiAgICAgICAqIGltcGxlbWVudGF0aW9uIG9mIGBpbXBvcnRQYXRoYCB3aWxsICByZXR1cm4gYGltcG9ydC5tZXRhLnVybGAncyBwYXRoLgogICAgICAgKiBGb3IgZWxlbWVudHMgZGVmaW5lZCBpbiBIVE1MIGltcG9ydHMsIHRoaXMgZ2V0dGVyIHdpbGwgcmV0dXJuIHRoZSBwYXRoCiAgICAgICAqIHRvIHRoZSBkb2N1bWVudCBjb250YWluaW5nIGEgYGRvbS1tb2R1bGVgIGVsZW1lbnQgbWF0Y2hpbmcgdGhpcwogICAgICAgKiBlbGVtZW50J3Mgc3RhdGljIGBpc2AgcHJvcGVydHkuCiAgICAgICAqCiAgICAgICAqIE5vdGUsIHRoaXMgcGF0aCBzaG91bGQgY29udGFpbiBhIHRyYWlsaW5nIGAvYC4KICAgICAgICoKICAgICAgICogQHJldHVybiB7c3RyaW5nfSBUaGUgaW1wb3J0IHBhdGggZm9yIHRoaXMgZWxlbWVudCBjbGFzcwogICAgICAgKiBAc3VwcHJlc3Mge21pc3NpbmdQcm9wZXJ0aWVzfQogICAgICAgKi8KICAgICAgc3RhdGljIGdldCBpbXBvcnRQYXRoKCkgewogICAgICAgIGlmICghdGhpcy5oYXNPd25Qcm9wZXJ0eShKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCdfaW1wb3J0UGF0aCcsIHRoaXMpKSkgewogICAgICAgICAgY29uc3QgbWV0YSA9IHRoaXMuaW1wb3J0TWV0YTsKICAgICAgICAgIGlmIChtZXRhKSB7CiAgICAgICAgICAgIHRoaXMuX2ltcG9ydFBhdGggPSBQb2x5bWVyLlJlc29sdmVVcmwucGF0aEZyb21VcmwobWV0YS51cmwpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgY29uc3QgbW9kdWxlID0gUG9seW1lci5Eb21Nb2R1bGUgJiYgUG9seW1lci5Eb21Nb2R1bGUuaW1wb3J0KC8qKiBAdHlwZSB7UG9seW1lckVsZW1lbnRDb25zdHJ1Y3Rvcn0gKi8gKHRoaXMpLmlzKTsKICAgICAgICAgICAgdGhpcy5faW1wb3J0UGF0aCA9IChtb2R1bGUgJiYgbW9kdWxlLmFzc2V0cGF0aCkgfHwKICAgICAgICAgICAgICBPYmplY3QuZ2V0UHJvdG90eXBlT2YoLyoqIEB0eXBlIHtQb2x5bWVyRWxlbWVudENvbnN0cnVjdG9yfSovICh0aGlzKS5wcm90b3R5cGUpLmNvbnN0cnVjdG9yLmltcG9ydFBhdGg7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiB0aGlzLl9pbXBvcnRQYXRoOwogICAgICB9CgogICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICBzdXBlcigpOwogICAgICAgIC8qKiBAdHlwZSB7SFRNTFRlbXBsYXRlRWxlbWVudH0gKi8KICAgICAgICB0aGlzLl90ZW1wbGF0ZTsKICAgICAgICAvKiogQHR5cGUge3N0cmluZ30gKi8KICAgICAgICB0aGlzLl9pbXBvcnRQYXRoOwogICAgICAgIC8qKiBAdHlwZSB7c3RyaW5nfSAqLwogICAgICAgIHRoaXMucm9vdFBhdGg7CiAgICAgICAgLyoqIEB0eXBlIHtzdHJpbmd9ICovCiAgICAgICAgdGhpcy5pbXBvcnRQYXRoOwogICAgICAgIC8qKiBAdHlwZSB7U3RhbXBlZFRlbXBsYXRlIHwgSFRNTEVsZW1lbnQgfCBTaGFkb3dSb290fSAqLwogICAgICAgIHRoaXMucm9vdDsKICAgICAgICAvKiogQHR5cGUgeyFPYmplY3Q8c3RyaW5nLCAhRWxlbWVudD59ICovCiAgICAgICAgdGhpcy4kOwogICAgICB9CgogICAgICAvKioKICAgICAgICogT3ZlcnJpZGVzIHRoZSBkZWZhdWx0IGBQb2x5bWVyLlByb3BlcnR5QWNjZXNzb3JzYCB0byBlbnN1cmUgY2xhc3MKICAgICAgICogbWV0YXByb2dyYW1taW5nIHJlbGF0ZWQgdG8gcHJvcGVydHkgYWNjZXNzb3JzIGFuZCBlZmZlY3RzIGhhcwogICAgICAgKiBjb21wbGV0ZWQgKGNhbGxzIGBmaW5hbGl6ZWApLgogICAgICAgKgogICAgICAgKiBJdCBhbHNvIGluaXRpYWxpemVzIGFueSBwcm9wZXJ0eSBkZWZhdWx0cyBwcm92aWRlZCB2aWEgYHZhbHVlYCBpbgogICAgICAgKiBgcHJvcGVydGllc2AgbWV0YWRhdGEuCiAgICAgICAqCiAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAqIEBvdmVycmlkZQogICAgICAgKiBAc3VwcHJlc3Mge2ludmFsaWRDYXN0c30KICAgICAgICovCiAgICAgIF9pbml0aWFsaXplUHJvcGVydGllcygpIHsKICAgICAgICB0aGlzLmNvbnN0cnVjdG9yLmZpbmFsaXplKCk7CiAgICAgICAgLy8gbm90ZTogZmluYWxpemUgdGVtcGxhdGUgd2hlbiB3ZSBoYXZlIGFjY2VzcyB0byBgbG9jYWxOYW1lYCB0bwogICAgICAgIC8vIGF2b2lkIGRlcGVuZGVuY2Ugb24gYGlzYCBmb3IgcG9seWZpbGxpbmcgc3R5bGluZy4KICAgICAgICB0aGlzLmNvbnN0cnVjdG9yLl9maW5hbGl6ZVRlbXBsYXRlKC8qKiBAdHlwZSB7IUhUTUxFbGVtZW50fSAqLyh0aGlzKS5sb2NhbE5hbWUpOwogICAgICAgIHN1cGVyLl9pbml0aWFsaXplUHJvcGVydGllcygpOwogICAgICAgIC8vIHNldCBwYXRoIGRlZmF1bHRzCiAgICAgICAgdGhpcy5yb290UGF0aCA9IFBvbHltZXIucm9vdFBhdGg7CiAgICAgICAgdGhpcy5pbXBvcnRQYXRoID0gdGhpcy5jb25zdHJ1Y3Rvci5pbXBvcnRQYXRoOwogICAgICAgIC8vIGFwcGx5IHByb3BlcnR5IGRlZmF1bHRzLi4uCiAgICAgICAgbGV0IHAkID0gcHJvcGVydHlEZWZhdWx0cyh0aGlzLmNvbnN0cnVjdG9yKTsKICAgICAgICBpZiAoIXAkKSB7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGZvciAobGV0IHAgaW4gcCQpIHsKICAgICAgICAgIGxldCBpbmZvID0gcCRbcF07CiAgICAgICAgICAvLyBEb24ndCBzZXQgZGVmYXVsdCB2YWx1ZSBpZiB0aGVyZSBpcyBhbHJlYWR5IGFuIG93biBwcm9wZXJ0eSwgd2hpY2gKICAgICAgICAgIC8vIGhhcHBlbnMgd2hlbiBhIGBwcm9wZXJ0aWVzYCBwcm9wZXJ0eSB3aXRoIGRlZmF1bHQgYnV0IG5vIGVmZmVjdHMgaGFkCiAgICAgICAgICAvLyBhIHByb3BlcnR5IHNldCAoZS5nLiBib3VuZCkgYnkgaXRzIGhvc3QgYmVmb3JlIHVwZ3JhZGUKICAgICAgICAgIGlmICghdGhpcy5oYXNPd25Qcm9wZXJ0eShwKSkgewogICAgICAgICAgICBsZXQgdmFsdWUgPSB0eXBlb2YgaW5mby52YWx1ZSA9PSAnZnVuY3Rpb24nID8KICAgICAgICAgICAgICBpbmZvLnZhbHVlLmNhbGwodGhpcykgOgogICAgICAgICAgICAgIGluZm8udmFsdWU7CiAgICAgICAgICAgIC8vIFNldCB2aWEgYF9zZXRQcm9wZXJ0eWAgaWYgdGhlcmUgaXMgYW4gYWNjZXNzb3IsIHRvIGVuYWJsZQogICAgICAgICAgICAvLyBpbml0aWFsaXppbmcgcmVhZE9ubHkgcHJvcGVydHkgZGVmYXVsdHMKICAgICAgICAgICAgaWYgKHRoaXMuX2hhc0FjY2Vzc29yKHApKSB7CiAgICAgICAgICAgICAgdGhpcy5fc2V0UGVuZGluZ1Byb3BlcnR5KHAsIHZhbHVlLCB0cnVlKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICB0aGlzW3BdID0gdmFsdWU7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBHYXRoZXIgc3R5bGUgdGV4dCBmb3IgYSBzdHlsZSBlbGVtZW50IGluIHRoZSB0ZW1wbGF0ZS4KICAgICAgICoKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IGNzc1RleHQgVGV4dCBjb250YWluaW5nIHN0eWxpbmcgdG8gcHJvY2VzcwogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gYmFzZVVSSSBCYXNlIFVSSSB0byByZWJhc2UgQ1NTIHBhdGhzIGFnYWluc3QKICAgICAgICogQHJldHVybiB7c3RyaW5nfSBUaGUgcHJvY2Vzc2VkIENTUyB0ZXh0CiAgICAgICAqIEBwcm90ZWN0ZWQKICAgICAgICovCiAgICAgIHN0YXRpYyBfcHJvY2Vzc1N0eWxlVGV4dChjc3NUZXh0LCBiYXNlVVJJKSB7CiAgICAgICAgcmV0dXJuIFBvbHltZXIuUmVzb2x2ZVVybC5yZXNvbHZlQ3NzKGNzc1RleHQsIGJhc2VVUkkpOwogICAgICB9CgogICAgICAvKioKICAgICAgKiBDb25maWd1cmVzIGFuIGVsZW1lbnQgYHByb3RvYCB0byBmdW5jdGlvbiB3aXRoIGEgZ2l2ZW4gYHRlbXBsYXRlYC4KICAgICAgKiBUaGUgZWxlbWVudCBuYW1lIGBpc2AgYW5kIGV4dGVuZHMgYGV4dGAgbXVzdCBiZSBzcGVjaWZpZWQgZm9yIFNoYWR5Q1NTCiAgICAgICogc3R5bGUgc2NvcGluZy4KICAgICAgKgogICAgICAqIEBwYXJhbSB7c3RyaW5nfSBpcyBUYWcgbmFtZSAob3IgdHlwZSBleHRlbnNpb24gbmFtZSkgZm9yIHRoaXMgZWxlbWVudAogICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICogQHByb3RlY3RlZAogICAgICAqLwogICAgICBzdGF0aWMgX2ZpbmFsaXplVGVtcGxhdGUoaXMpIHsKICAgICAgICAvKiogQGNvbnN0IHtIVE1MVGVtcGxhdGVFbGVtZW50fSAqLwogICAgICAgIGNvbnN0IHRlbXBsYXRlID0gdGhpcy5wcm90b3R5cGUuX3RlbXBsYXRlOwogICAgICAgIGlmICh0ZW1wbGF0ZSAmJiAhdGVtcGxhdGUuX19wb2x5bWVyRmluYWxpemVkKSB7CiAgICAgICAgICB0ZW1wbGF0ZS5fX3BvbHltZXJGaW5hbGl6ZWQgPSB0cnVlOwogICAgICAgICAgY29uc3QgaW1wb3J0UGF0aCA9IHRoaXMuaW1wb3J0UGF0aDsKICAgICAgICAgIGNvbnN0IGJhc2VVUkkgPSBpbXBvcnRQYXRoID8gUG9seW1lci5SZXNvbHZlVXJsLnJlc29sdmVVcmwoaW1wb3J0UGF0aCkgOiAnJzsKICAgICAgICAgIC8vIGUuZy4gc3VwcG9ydCBgaW5jbHVkZT0ibW9kdWxlLW5hbWUiYCwgYW5kIFNoYWR5Q1NTCiAgICAgICAgICBwcm9jZXNzRWxlbWVudFN0eWxlcyh0aGlzLCB0ZW1wbGF0ZSwgaXMsIGJhc2VVUkkpOwogICAgICAgICAgdGhpcy5wcm90b3R5cGUuX2JpbmRUZW1wbGF0ZSh0ZW1wbGF0ZSk7CiAgICAgICAgfQogICAgICB9CgogICAgICAvKioKICAgICAgICogUHJvdmlkZXMgYSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIHRoZSBzdGFuZGFyZCBDdXN0b20gRWxlbWVudHMKICAgICAgICogYGNvbm5lY3RlZENhbGxiYWNrYC4KICAgICAgICoKICAgICAgICogVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gZW5hYmxlcyB0aGUgcHJvcGVydHkgZWZmZWN0cyBzeXN0ZW0gYW5kCiAgICAgICAqIGZsdXNoZXMgYW55IHBlbmRpbmcgcHJvcGVydGllcywgYW5kIHVwZGF0ZXMgc2hpbW1lZCBDU1MgcHJvcGVydGllcwogICAgICAgKiB3aGVuIHVzaW5nIHRoZSBTaGFkeUNTUyBzY29waW5nL2N1c3RvbSBwcm9wZXJ0aWVzIHBvbHlmaWxsLgogICAgICAgKgogICAgICAgKiBAc3VwcHJlc3Mge21pc3NpbmdQcm9wZXJ0aWVzLCBpbnZhbGlkQ2FzdHN9IFN1cGVyIG1heSBvciBtYXkgbm90IGltcGxlbWVudCB0aGUgY2FsbGJhY2sKICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICovCiAgICAgIGNvbm5lY3RlZENhbGxiYWNrKCkgewogICAgICAgIGlmICh3aW5kb3cuU2hhZHlDU1MgJiYgdGhpcy5fdGVtcGxhdGUpIHsKICAgICAgICAgIHdpbmRvdy5TaGFkeUNTUy5zdHlsZUVsZW1lbnQoLyoqIEB0eXBlIHshSFRNTEVsZW1lbnR9ICovKHRoaXMpKTsKICAgICAgICB9CiAgICAgICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIFN0YW1wcyB0aGUgZWxlbWVudCB0ZW1wbGF0ZS4KICAgICAgICoKICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICogQG92ZXJyaWRlCiAgICAgICAqLwogICAgICByZWFkeSgpIHsKICAgICAgICBpZiAodGhpcy5fdGVtcGxhdGUpIHsKICAgICAgICAgIHRoaXMucm9vdCA9IHRoaXMuX3N0YW1wVGVtcGxhdGUodGhpcy5fdGVtcGxhdGUpOwogICAgICAgICAgdGhpcy4kID0gdGhpcy5yb290LiQ7CiAgICAgICAgfQogICAgICAgIHN1cGVyLnJlYWR5KCk7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBJbXBsZW1lbnRzIGBQcm9wZXJ0eUVmZmVjdHNgJ3MgYF9yZWFkeUNsaWVudHNgIGNhbGwuIEF0dGFjaGVzCiAgICAgICAqIGVsZW1lbnQgZG9tIGJ5IGNhbGxpbmcgYF9hdHRhY2hEb21gIHdpdGggdGhlIGRvbSBzdGFtcGVkIGZyb20gdGhlCiAgICAgICAqIGVsZW1lbnQncyB0ZW1wbGF0ZSB2aWEgYF9zdGFtcFRlbXBsYXRlYC4gTm90ZSB0aGF0IHRoaXMgYWxsb3dzCiAgICAgICAqIGNsaWVudCBkb20gdG8gYmUgYXR0YWNoZWQgdG8gdGhlIGVsZW1lbnQgcHJpb3IgdG8gYW55IG9ic2VydmVycwogICAgICAgKiBydW5uaW5nLgogICAgICAgKgogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKiBAb3ZlcnJpZGUKICAgICAgICovCiAgICAgIF9yZWFkeUNsaWVudHMoKSB7CiAgICAgICAgaWYgKHRoaXMuX3RlbXBsYXRlKSB7CiAgICAgICAgICB0aGlzLnJvb3QgPSB0aGlzLl9hdHRhY2hEb20oLyoqIEB0eXBlIHtTdGFtcGVkVGVtcGxhdGV9ICovKHRoaXMucm9vdCkpOwogICAgICAgIH0KICAgICAgICAvLyBUaGUgc3VwZXIuX3JlYWR5Q2xpZW50cyBoZXJlIHNldHMgdGhlIGNsaWVudHMgaW5pdGlhbGl6ZWQgZmxhZy4KICAgICAgICAvLyBXZSBtdXN0IHdhaXQgdG8gZG8gdGhpcyB1bnRpbCBhZnRlciBjbGllbnQgZG9tIGlzIGNyZWF0ZWQvYXR0YWNoZWQKICAgICAgICAvLyBzbyB0aGF0IHRoaXMgZmxhZyBjYW4gYmUgY2hlY2tlZCB0byBwcmV2ZW50IG5vdGlmaWNhdGlvbnMgZmlyZWQKICAgICAgICAvLyBkdXJpbmcgdGhpcyBwcm9jZXNzIGZyb20gYmVpbmcgaGFuZGxlZCBiZWZvcmUgY2xpZW50cyBhcmUgcmVhZHkuCiAgICAgICAgc3VwZXIuX3JlYWR5Q2xpZW50cygpOwogICAgICB9CgoKICAgICAgLyoqCiAgICAgICAqIEF0dGFjaGVzIGFuIGVsZW1lbnQncyBzdGFtcGVkIGRvbSB0byBpdHNlbGYuIEJ5IGRlZmF1bHQsCiAgICAgICAqIHRoaXMgbWV0aG9kIGNyZWF0ZXMgYSBgc2hhZG93Um9vdGAgYW5kIGFkZHMgdGhlIGRvbSB0byBpdC4KICAgICAgICogSG93ZXZlciwgdGhpcyBtZXRob2QgbWF5IGJlIG92ZXJyaWRkZW4gdG8gYWxsb3cgYW4gZWxlbWVudAogICAgICAgKiB0byBwdXQgaXRzIGRvbSBpbiBhbm90aGVyIGxvY2F0aW9uLgogICAgICAgKgogICAgICAgKiBAdGhyb3dzIHtFcnJvcn0KICAgICAgICogQHN1cHByZXNzIHttaXNzaW5nUmV0dXJufQogICAgICAgKiBAcGFyYW0ge1N0YW1wZWRUZW1wbGF0ZX0gZG9tIHRvIGF0dGFjaCB0byB0aGUgZWxlbWVudC4KICAgICAgICogQHJldHVybiB7U2hhZG93Um9vdH0gbm9kZSB0byB3aGljaCB0aGUgZG9tIGhhcyBiZWVuIGF0dGFjaGVkLgogICAgICAgKi8KICAgICAgX2F0dGFjaERvbShkb20pIHsKICAgICAgICBpZiAodGhpcy5hdHRhY2hTaGFkb3cpIHsKICAgICAgICAgIGlmIChkb20pIHsKICAgICAgICAgICAgaWYgKCF0aGlzLnNoYWRvd1Jvb3QpIHsKICAgICAgICAgICAgICB0aGlzLmF0dGFjaFNoYWRvdyh7bW9kZTogJ29wZW4nfSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdGhpcy5zaGFkb3dSb290LmFwcGVuZENoaWxkKGRvbSk7CiAgICAgICAgICAgIHJldHVybiB0aGlzLnNoYWRvd1Jvb3Q7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTaGFkb3dET00gbm90IGF2YWlsYWJsZS4gJyArCiAgICAgICAgICAgIC8vIFRPRE8oc29ydmVsbCk6IG1vdmUgdG8gY29tcGlsZS10aW1lIGNvbmRpdGlvbmFsIHdoZW4gc3VwcG9ydGVkCiAgICAgICAgICAnUG9seW1lci5FbGVtZW50IGNhbiBjcmVhdGUgZG9tIGFzIGNoaWxkcmVuIGluc3RlYWQgb2YgaW4gJyArCiAgICAgICAgICAnU2hhZG93RE9NIGJ5IHNldHRpbmcgYHRoaXMucm9vdCA9IHRoaXM7XGAgYmVmb3JlIFxgcmVhZHlcYC4nKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBXaGVuIHVzaW5nIHRoZSBTaGFkeUNTUyBzY29waW5nIGFuZCBjdXN0b20gcHJvcGVydHkgc2hpbSwgY2F1c2VzIGFsbAogICAgICAgKiBzaGltbWVkIHN0eWxlcyBpbiB0aGlzIGVsZW1lbnQgKGFuZCBpdHMgc3VidHJlZSkgdG8gYmUgdXBkYXRlZAogICAgICAgKiBiYXNlZCBvbiBjdXJyZW50IGN1c3RvbSBwcm9wZXJ0eSB2YWx1ZXMuCiAgICAgICAqCiAgICAgICAqIFRoZSBvcHRpb25hbCBwYXJhbWV0ZXIgb3ZlcnJpZGVzIGlubGluZSBjdXN0b20gcHJvcGVydHkgc3R5bGVzIHdpdGggYW4KICAgICAgICogb2JqZWN0IG9mIHByb3BlcnRpZXMgd2hlcmUgdGhlIGtleXMgYXJlIENTUyBwcm9wZXJ0aWVzLCBhbmQgdGhlIHZhbHVlcwogICAgICAgKiBhcmUgc3RyaW5ncy4KICAgICAgICoKICAgICAgICogRXhhbXBsZTogYHRoaXMudXBkYXRlU3R5bGVzKHsnLS1jb2xvcic6ICdibHVlJ30pYAogICAgICAgKgogICAgICAgKiBUaGVzZSBwcm9wZXJ0aWVzIGFyZSByZXRhaW5lZCB1bmxlc3MgYSB2YWx1ZSBvZiBgbnVsbGAgaXMgc2V0LgogICAgICAgKgogICAgICAgKiBOb3RlOiBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IHN1cHBvcnQgdXBkYXRpbmcgQ1NTIG1peGlucy4KICAgICAgICogWW91IGNhbiBub3QgZHluYW1pY2FsbHkgY2hhbmdlIHRoZSB2YWx1ZSBvZiBhbiBgQGFwcGx5YC4KICAgICAgICoKICAgICAgICogQHBhcmFtIHtPYmplY3Q9fSBwcm9wZXJ0aWVzIEJhZyBvZiBjdXN0b20gcHJvcGVydHkga2V5L3ZhbHVlcyB0bwogICAgICAgKiAgIGFwcGx5IHRvIHRoaXMgZWxlbWVudC4KICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICogQHN1cHByZXNzIHtpbnZhbGlkQ2FzdHN9CiAgICAgICAqLwogICAgICB1cGRhdGVTdHlsZXMocHJvcGVydGllcykgewogICAgICAgIGlmICh3aW5kb3cuU2hhZHlDU1MpIHsKICAgICAgICAgIHdpbmRvdy5TaGFkeUNTUy5zdHlsZVN1YnRyZWUoLyoqIEB0eXBlIHshSFRNTEVsZW1lbnR9ICovKHRoaXMpLCBwcm9wZXJ0aWVzKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBSZXdyaXRlcyBhIGdpdmVuIFVSTCByZWxhdGl2ZSB0byBhIGJhc2UgVVJMLiBUaGUgYmFzZSBVUkwgZGVmYXVsdHMgdG8KICAgICAgICogdGhlIG9yaWdpbmFsIGxvY2F0aW9uIG9mIHRoZSBkb2N1bWVudCBjb250YWluaW5nIHRoZSBgZG9tLW1vZHVsZWAgZm9yCiAgICAgICAqIHRoaXMgZWxlbWVudC4gVGhpcyBtZXRob2Qgd2lsbCByZXR1cm4gdGhlIHNhbWUgVVJMIGJlZm9yZSBhbmQgYWZ0ZXIKICAgICAgICogYnVuZGxpbmcuCiAgICAgICAqCiAgICAgICAqIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIHBlcmZvcm1zIG5vIHJlc29sdXRpb24gZm9yIFVSTHMgdGhhdCBzdGFydAogICAgICAgKiB3aXRoIGAvYCAoYWJzb2x1dGUgVVJMcykgb3IgYCNgIChoYXNoIGlkZW50aWZpZXJzKS4gIEZvciBnZW5lcmFsIHB1cnBvc2UKICAgICAgICogVVJMIHJlc29sdXRpb24sIHVzZSBgd2luZG93LlVSTGAuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgVVJMIHRvIHJlc29sdmUuCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nPX0gYmFzZSBPcHRpb25hbCBiYXNlIFVSTCB0byByZXNvbHZlIGFnYWluc3QsIGRlZmF1bHRzCiAgICAgICAqIHRvIHRoZSBlbGVtZW50J3MgYGltcG9ydFBhdGhgCiAgICAgICAqIEByZXR1cm4ge3N0cmluZ30gUmV3cml0dGVuIFVSTCByZWxhdGl2ZSB0byBiYXNlCiAgICAgICAqLwogICAgICByZXNvbHZlVXJsKHVybCwgYmFzZSkgewogICAgICAgIGlmICghYmFzZSAmJiB0aGlzLmltcG9ydFBhdGgpIHsKICAgICAgICAgIGJhc2UgPSBQb2x5bWVyLlJlc29sdmVVcmwucmVzb2x2ZVVybCh0aGlzLmltcG9ydFBhdGgpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gUG9seW1lci5SZXNvbHZlVXJsLnJlc29sdmVVcmwodXJsLCBiYXNlKTsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIE92ZXJyaWRlcyBgUHJvcGVydHlBY2Nlc3NvcnNgIHRvIGFkZCBtYXAgb2YgZHluYW1pYyBmdW5jdGlvbnMgb24KICAgICAgICogdGVtcGxhdGUgaW5mbywgZm9yIGNvbnN1bXB0aW9uIGJ5IGBQcm9wZXJ0eUVmZmVjdHNgIHRlbXBsYXRlIGJpbmRpbmcKICAgICAgICogY29kZS4gVGhpcyBtYXAgZGV0ZXJtaW5lcyB3aGljaCBtZXRob2QgdGVtcGxhdGVzIHNob3VsZCBoYXZlIGFjY2Vzc29ycwogICAgICAgKiBjcmVhdGVkIGZvciB0aGVtLgogICAgICAgKgogICAgICAgKiBAb3ZlcnJpZGUKICAgICAgICogQHN1cHByZXNzIHttaXNzaW5nUHJvcGVydGllc30gSW50ZXJmYWNlcyBpbiBjbG9zdXJlIGRvIG5vdCBpbmhlcml0IHN0YXRpY3MsIGJ1dCBjbGFzc2VzIGRvCiAgICAgICAqLwogICAgICBzdGF0aWMgX3BhcnNlVGVtcGxhdGVDb250ZW50KHRlbXBsYXRlLCB0ZW1wbGF0ZUluZm8sIG5vZGVJbmZvKSB7CiAgICAgICAgdGVtcGxhdGVJbmZvLmR5bmFtaWNGbnMgPSB0ZW1wbGF0ZUluZm8uZHluYW1pY0ZucyB8fCB0aGlzLl9wcm9wZXJ0aWVzOwogICAgICAgIHJldHVybiBzdXBlci5fcGFyc2VUZW1wbGF0ZUNvbnRlbnQodGVtcGxhdGUsIHRlbXBsYXRlSW5mbywgbm9kZUluZm8pOwogICAgICB9CgogICAgfQoKICAgIHJldHVybiBQb2x5bWVyRWxlbWVudDsKICB9KTsKCiAgLyoqCiAgICogV2hlbiB1c2luZyB0aGUgU2hhZHlDU1Mgc2NvcGluZyBhbmQgY3VzdG9tIHByb3BlcnR5IHNoaW0sIGNhdXNlcyBhbGwKICAgKiBzaGltbWVkIGBzdHlsZXNgICh2aWEgYGN1c3RvbS1zdHlsZWApIGluIHRoZSBkb2N1bWVudCAoYW5kIGl0cyBzdWJ0cmVlKQogICAqIHRvIGJlIHVwZGF0ZWQgYmFzZWQgb24gY3VycmVudCBjdXN0b20gcHJvcGVydHkgdmFsdWVzLgogICAqCiAgICogVGhlIG9wdGlvbmFsIHBhcmFtZXRlciBvdmVycmlkZXMgaW5saW5lIGN1c3RvbSBwcm9wZXJ0eSBzdHlsZXMgd2l0aCBhbgogICAqIG9iamVjdCBvZiBwcm9wZXJ0aWVzIHdoZXJlIHRoZSBrZXlzIGFyZSBDU1MgcHJvcGVydGllcywgYW5kIHRoZSB2YWx1ZXMKICAgKiBhcmUgc3RyaW5ncy4KICAgKgogICAqIEV4YW1wbGU6IGBQb2x5bWVyLnVwZGF0ZVN0eWxlcyh7Jy0tY29sb3InOiAnYmx1ZSd9KWAKICAgKgogICAqIFRoZXNlIHByb3BlcnRpZXMgYXJlIHJldGFpbmVkIHVubGVzcyBhIHZhbHVlIG9mIGBudWxsYCBpcyBzZXQuCiAgICoKICAgKiBAcGFyYW0ge09iamVjdD19IHByb3BzIEJhZyBvZiBjdXN0b20gcHJvcGVydHkga2V5L3ZhbHVlcyB0bwogICAqICAgYXBwbHkgdG8gdGhlIGRvY3VtZW50LgogICAqIEByZXR1cm4ge3ZvaWR9CiAgICovCiAgUG9seW1lci51cGRhdGVTdHlsZXMgPSBmdW5jdGlvbihwcm9wcykgewogICAgaWYgKHdpbmRvdy5TaGFkeUNTUykgewogICAgICB3aW5kb3cuU2hhZHlDU1Muc3R5bGVEb2N1bWVudChwcm9wcyk7CiAgICB9CiAgfTsKCn0pKCk7Cjwvc2NyaXB0PjxzY3JpcHQ+CihmdW5jdGlvbigpIHsKICAndXNlIHN0cmljdCc7CgogIC8qKgogICAqIEBzdW1tYXJ5IENvbGxhcHNlIG11bHRpcGxlIGNhbGxiYWNrcyBpbnRvIG9uZSBpbnZvY2F0aW9uIGFmdGVyIGEgdGltZXIuCiAgICogQG1lbWJlcm9mIFBvbHltZXIKICAgKi8KICBjbGFzcyBEZWJvdW5jZXIgewogICAgY29uc3RydWN0b3IoKSB7CiAgICAgIHRoaXMuX2FzeW5jTW9kdWxlID0gbnVsbDsKICAgICAgdGhpcy5fY2FsbGJhY2sgPSBudWxsOwogICAgICB0aGlzLl90aW1lciA9IG51bGw7CiAgICB9CiAgICAvKioKICAgICAqIFNldHMgdGhlIHNjaGVkdWxlcjsgdGhhdCBpcywgYSBtb2R1bGUgd2l0aCB0aGUgQXN5bmMgaW50ZXJmYWNlLAogICAgICogYSBjYWxsYmFjayBhbmQgb3B0aW9uYWwgYXJndW1lbnRzIHRvIGJlIHBhc3NlZCB0byB0aGUgcnVuIGZ1bmN0aW9uCiAgICAgKiBmcm9tIHRoZSBhc3luYyBtb2R1bGUuCiAgICAgKgogICAgICogQHBhcmFtIHshQXN5bmNJbnRlcmZhY2V9IGFzeW5jTW9kdWxlIE9iamVjdCB3aXRoIEFzeW5jIGludGVyZmFjZS4KICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24oKX0gY2FsbGJhY2sgQ2FsbGJhY2sgdG8gcnVuLgogICAgICogQHJldHVybiB7dm9pZH0KICAgICAqLwogICAgc2V0Q29uZmlnKGFzeW5jTW9kdWxlLCBjYWxsYmFjaykgewogICAgICB0aGlzLl9hc3luY01vZHVsZSA9IGFzeW5jTW9kdWxlOwogICAgICB0aGlzLl9jYWxsYmFjayA9IGNhbGxiYWNrOwogICAgICB0aGlzLl90aW1lciA9IHRoaXMuX2FzeW5jTW9kdWxlLnJ1bigoKSA9PiB7CiAgICAgICAgdGhpcy5fdGltZXIgPSBudWxsOwogICAgICAgIHRoaXMuX2NhbGxiYWNrKCk7CiAgICAgIH0pOwogICAgfQogICAgLyoqCiAgICAgKiBDYW5jZWxzIGFuIGFjdGl2ZSBkZWJvdW5jZXIgYW5kIHJldHVybnMgYSByZWZlcmVuY2UgdG8gaXRzZWxmLgogICAgICoKICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgKi8KICAgIGNhbmNlbCgpIHsKICAgICAgaWYgKHRoaXMuaXNBY3RpdmUoKSkgewogICAgICAgIHRoaXMuX2FzeW5jTW9kdWxlLmNhbmNlbCh0aGlzLl90aW1lcik7CiAgICAgICAgdGhpcy5fdGltZXIgPSBudWxsOwogICAgICB9CiAgICB9CiAgICAvKioKICAgICAqIEZsdXNoZXMgYW4gYWN0aXZlIGRlYm91bmNlciBhbmQgcmV0dXJucyBhIHJlZmVyZW5jZSB0byBpdHNlbGYuCiAgICAgKgogICAgICogQHJldHVybiB7dm9pZH0KICAgICAqLwogICAgZmx1c2goKSB7CiAgICAgIGlmICh0aGlzLmlzQWN0aXZlKCkpIHsKICAgICAgICB0aGlzLmNhbmNlbCgpOwogICAgICAgIHRoaXMuX2NhbGxiYWNrKCk7CiAgICAgIH0KICAgIH0KICAgIC8qKgogICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBkZWJvdW5jZXIgaXMgYWN0aXZlLgogICAgICoKICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgYWN0aXZlLgogICAgICovCiAgICBpc0FjdGl2ZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuX3RpbWVyICE9IG51bGw7CiAgICB9CiAgICAvKioKICAgICAqIENyZWF0ZXMgYSBkZWJvdW5jZXIgaWYgbm8gZGVib3VuY2VyIGlzIHBhc3NlZCBhcyBhIHBhcmFtZXRlcgogICAgICogb3IgaXQgY2FuY2VscyBhbiBhY3RpdmUgZGVib3VuY2VyIG90aGVyd2lzZS4gVGhlIGZvbGxvd2luZwogICAgICogZXhhbXBsZSBzaG93cyBob3cgYSBkZWJvdW5jZXIgY2FuIGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyB3aXRoaW4gYQogICAgICogbWljcm90YXNrIGFuZCAiZGVib3VuY2VkIiBzdWNoIHRoYXQgdGhlIHByb3ZpZGVkIGNhbGxiYWNrIGZ1bmN0aW9uIGlzCiAgICAgKiBjYWxsZWQgb25jZS4gQWRkIHRoaXMgbWV0aG9kIHRvIGEgY3VzdG9tIGVsZW1lbnQ6CiAgICAgKgogICAgICogX2RlYm91bmNlV29yaygpIHsKICAgICAqICAgdGhpcy5fZGVib3VuY2VKb2IgPSBQb2x5bWVyLkRlYm91bmNlci5kZWJvdW5jZSh0aGlzLl9kZWJvdW5jZUpvYiwKICAgICAqICAgICAgIFBvbHltZXIuQXN5bmMubWljcm9UYXNrLCAoKSA9PiB7CiAgICAgKiAgICAgdGhpcy5fZG9Xb3JrKCk7CiAgICAgKiAgIH0pOwogICAgICogfQogICAgICoKICAgICAqIElmIHRoZSBgX2RlYm91bmNlV29ya2AgbWV0aG9kIGlzIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyB3aXRoaW4gdGhlIHNhbWUKICAgICAqIG1pY3JvdGFzaywgdGhlIGBfZG9Xb3JrYCBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBvbmx5IG9uY2UgYXQgdGhlIG5leHQKICAgICAqIG1pY3JvdGFzayBjaGVja3BvaW50LgogICAgICoKICAgICAqIE5vdGU6IEluIHRlc3RpbmcgaXQgaXMgb2Z0ZW4gY29udmVuaWVudCB0byBhdm9pZCBhc3luY2hyb255LiBUbyBhY2NvbXBsaXNoCiAgICAgKiB0aGlzIHdpdGggYSBkZWJvdW5jZXIsIHlvdSBjYW4gdXNlIGBQb2x5bWVyLmVucXVldWVEZWJvdW5jZXJgIGFuZAogICAgICogYFBvbHltZXIuZmx1c2hgLiBGb3IgZXhhbXBsZSwgZXh0ZW5kIHRoZSBhYm92ZSBleGFtcGxlIGJ5IGFkZGluZwogICAgICogYFBvbHltZXIuZW5xdWV1ZURlYm91bmNlcih0aGlzLl9kZWJvdW5jZUpvYilgIGF0IHRoZSBlbmQgb2YgdGhlCiAgICAgKiBgX2RlYm91bmNlV29ya2AgbWV0aG9kLiBUaGVuIGluIGEgdGVzdCwgY2FsbCBgUG9seW1lci5mbHVzaGAgdG8gZW5zdXJlCiAgICAgKiB0aGUgZGVib3VuY2VyIGhhcyBjb21wbGV0ZWQuCiAgICAgKgogICAgICogQHBhcmFtIHtEZWJvdW5jZXI/fSBkZWJvdW5jZXIgRGVib3VuY2VyIG9iamVjdC4KICAgICAqIEBwYXJhbSB7IUFzeW5jSW50ZXJmYWNlfSBhc3luY01vZHVsZSBPYmplY3Qgd2l0aCBBc3luYyBpbnRlcmZhY2UKICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24oKX0gY2FsbGJhY2sgQ2FsbGJhY2sgdG8gcnVuLgogICAgICogQHJldHVybiB7IURlYm91bmNlcn0gUmV0dXJucyBhIGRlYm91bmNlciBvYmplY3QuCiAgICAgKi8KICAgIHN0YXRpYyBkZWJvdW5jZShkZWJvdW5jZXIsIGFzeW5jTW9kdWxlLCBjYWxsYmFjaykgewogICAgICBpZiAoZGVib3VuY2VyIGluc3RhbmNlb2YgRGVib3VuY2VyKSB7CiAgICAgICAgZGVib3VuY2VyLmNhbmNlbCgpOwogICAgICB9IGVsc2UgewogICAgICAgIGRlYm91bmNlciA9IG5ldyBEZWJvdW5jZXIoKTsKICAgICAgfQogICAgICBkZWJvdW5jZXIuc2V0Q29uZmlnKGFzeW5jTW9kdWxlLCBjYWxsYmFjayk7CiAgICAgIHJldHVybiBkZWJvdW5jZXI7CiAgICB9CiAgfQoKICAvKiogQGNvbnN0ICovCiAgUG9seW1lci5EZWJvdW5jZXIgPSBEZWJvdW5jZXI7Cn0pKCk7Cjwvc2NyaXB0PjxzY3JpcHQ+CihmdW5jdGlvbigpIHsKCiAgJ3VzZSBzdHJpY3QnOwoKICAvLyBkZXRlY3QgbmF0aXZlIHRvdWNoIGFjdGlvbiBzdXBwb3J0CiAgbGV0IEhBU19OQVRJVkVfVEEgPSB0eXBlb2YgZG9jdW1lbnQuaGVhZC5zdHlsZS50b3VjaEFjdGlvbiA9PT0gJ3N0cmluZyc7CiAgbGV0IEdFU1RVUkVfS0VZID0gJ19fcG9seW1lckdlc3R1cmVzJzsKICBsZXQgSEFORExFRF9PQkogPSAnX19wb2x5bWVyR2VzdHVyZXNIYW5kbGVkJzsKICBsZXQgVE9VQ0hfQUNUSU9OID0gJ19fcG9seW1lckdlc3R1cmVzVG91Y2hBY3Rpb24nOwogIC8vIHJhZGl1cyBmb3IgdGFwIGFuZCB0cmFjawogIGxldCBUQVBfRElTVEFOQ0UgPSAyNTsKICBsZXQgVFJBQ0tfRElTVEFOQ0UgPSA1OwogIC8vIG51bWJlciBvZiBsYXN0IE4gdHJhY2sgcG9zaXRpb25zIHRvIGtlZXAKICBsZXQgVFJBQ0tfTEVOR1RIID0gMjsKCiAgLy8gRGlzYWJsaW5nICJtb3VzZSIgaGFuZGxlcnMgZm9yIDI1MDBtcyBpcyBlbm91Z2gKICBsZXQgTU9VU0VfVElNRU9VVCA9IDI1MDA7CiAgbGV0IE1PVVNFX0VWRU5UUyA9IFsnbW91c2Vkb3duJywgJ21vdXNlbW92ZScsICdtb3VzZXVwJywgJ2NsaWNrJ107CiAgLy8gYW4gYXJyYXkgb2YgYml0bWFzayB2YWx1ZXMgZm9yIG1hcHBpbmcgTW91c2VFdmVudC53aGljaCB0byBNb3VzZUV2ZW50LmJ1dHRvbnMKICBsZXQgTU9VU0VfV0hJQ0hfVE9fQlVUVE9OUyA9IFswLCAxLCA0LCAyXTsKICBsZXQgTU9VU0VfSEFTX0JVVFRPTlMgPSAoZnVuY3Rpb24oKSB7CiAgICB0cnkgewogICAgICByZXR1cm4gbmV3IE1vdXNlRXZlbnQoJ3Rlc3QnLCB7YnV0dG9uczogMX0pLmJ1dHRvbnMgPT09IDE7CiAgICB9IGNhdGNoIChlKSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICB9KSgpOwoKICAvKioKICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBQb3NzaWJsZSBtb3VzZSBldmVudCBuYW1lCiAgICogQHJldHVybiB7Ym9vbGVhbn0gdHJ1ZSBpZiBtb3VzZSBldmVudCwgZmFsc2UgaWYgbm90CiAgICovCiAgZnVuY3Rpb24gaXNNb3VzZUV2ZW50KG5hbWUpIHsKICAgIHJldHVybiBNT1VTRV9FVkVOVFMuaW5kZXhPZihuYW1lKSA+IC0xOwogIH0KCiAgLyogZXNsaW50IG5vLWVtcHR5OiBbImVycm9yIiwgeyAiYWxsb3dFbXB0eUNhdGNoIjogdHJ1ZSB9XSAqLwogIC8vIGNoZWNrIGZvciBwYXNzaXZlIGV2ZW50IGxpc3RlbmVycwogIGxldCBTVVBQT1JUU19QQVNTSVZFID0gZmFsc2U7CiAgKGZ1bmN0aW9uKCkgewogICAgdHJ5IHsKICAgICAgbGV0IG9wdHMgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sICdwYXNzaXZlJywge2dldCgpIHtTVVBQT1JUU19QQVNTSVZFID0gdHJ1ZTt9fSk7CiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCd0ZXN0JywgbnVsbCwgb3B0cyk7CiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCd0ZXN0JywgbnVsbCwgb3B0cyk7CiAgICB9IGNhdGNoKGUpIHt9CiAgfSkoKTsKCiAgLyoqCiAgICogR2VuZXJhdGUgc2V0dGluZ3MgZm9yIGV2ZW50IGxpc3RlbmVycywgZGVwZW5kYW50IG9uIGBQb2x5bWVyLnBhc3NpdmVUb3VjaEdlc3R1cmVzYAogICAqCiAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50TmFtZSBFdmVudCBuYW1lIHRvIGRldGVybWluZSBpZiBge3Bhc3NpdmV9YCBvcHRpb24gaXMgbmVlZGVkCiAgICogQHJldHVybiB7e3Bhc3NpdmU6IGJvb2xlYW59IHwgdW5kZWZpbmVkfSBPcHRpb25zIHRvIHVzZSBmb3IgYWRkRXZlbnRMaXN0ZW5lciBhbmQgcmVtb3ZlRXZlbnRMaXN0ZW5lcgogICAqLwogIGZ1bmN0aW9uIFBBU1NJVkVfVE9VQ0goZXZlbnROYW1lKSB7CiAgICBpZiAoaXNNb3VzZUV2ZW50KGV2ZW50TmFtZSkgfHwgZXZlbnROYW1lID09PSAndG91Y2hlbmQnKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmIChIQVNfTkFUSVZFX1RBICYmIFNVUFBPUlRTX1BBU1NJVkUgJiYgUG9seW1lci5wYXNzaXZlVG91Y2hHZXN0dXJlcykgewogICAgICByZXR1cm4ge3Bhc3NpdmU6IHRydWV9OwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuOwogICAgfQogIH0KCiAgLy8gQ2hlY2sgZm9yIHRvdWNoLW9ubHkgZGV2aWNlcwogIGxldCBJU19UT1VDSF9PTkxZID0gbmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvaVAoPzpbb2FdZHxob25lKXxBbmRyb2lkLyk7CgogIGxldCBHZXN0dXJlUmVjb2duaXplciA9IGZ1bmN0aW9uKCl7fTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFycwogIC8qKiBAdHlwZSB7ZnVuY3Rpb24oKTogdm9pZH0gKi8KICBHZXN0dXJlUmVjb2duaXplci5wcm90b3R5cGUucmVzZXQ7CiAgLyoqIEB0eXBlIHtmdW5jdGlvbihNb3VzZUV2ZW50KTogdm9pZCB8IHVuZGVmaW5lZH0gKi8KICBHZXN0dXJlUmVjb2duaXplci5wcm90b3R5cGUubW91c2Vkb3duOwogIC8qKiBAdHlwZSB7KGZ1bmN0aW9uKE1vdXNlRXZlbnQpOiB2b2lkIHwgdW5kZWZpbmVkKX0gKi8KICBHZXN0dXJlUmVjb2duaXplci5wcm90b3R5cGUubW91c2Vtb3ZlOwogIC8qKiBAdHlwZSB7KGZ1bmN0aW9uKE1vdXNlRXZlbnQpOiB2b2lkIHwgdW5kZWZpbmVkKX0gKi8KICBHZXN0dXJlUmVjb2duaXplci5wcm90b3R5cGUubW91c2V1cDsKICAvKiogQHR5cGUgeyhmdW5jdGlvbihUb3VjaEV2ZW50KTogdm9pZCB8IHVuZGVmaW5lZCl9ICovCiAgR2VzdHVyZVJlY29nbml6ZXIucHJvdG90eXBlLnRvdWNoc3RhcnQ7CiAgLyoqIEB0eXBlIHsoZnVuY3Rpb24oVG91Y2hFdmVudCk6IHZvaWQgfCB1bmRlZmluZWQpfSAqLwogIEdlc3R1cmVSZWNvZ25pemVyLnByb3RvdHlwZS50b3VjaG1vdmU7CiAgLyoqIEB0eXBlIHsoZnVuY3Rpb24oVG91Y2hFdmVudCk6IHZvaWQgfCB1bmRlZmluZWQpfSAqLwogIEdlc3R1cmVSZWNvZ25pemVyLnByb3RvdHlwZS50b3VjaGVuZDsKICAvKiogQHR5cGUgeyhmdW5jdGlvbihNb3VzZUV2ZW50KTogdm9pZCB8IHVuZGVmaW5lZCl9ICovCiAgR2VzdHVyZVJlY29nbml6ZXIucHJvdG90eXBlLmNsaWNrOwoKICAvLyBrZWVwIHRyYWNrIG9mIGFueSBsYWJlbHMgaGl0IGJ5IHRoZSBtb3VzZUNhbmNlbGxlcgogIC8qKiBAdHlwZSB7IUFycmF5PCFIVE1MTGFiZWxFbGVtZW50Pn0gKi8KICBjb25zdCBjbGlja2VkTGFiZWxzID0gW107CgogIC8qKiBAdHlwZSB7IU9iamVjdDxib29sZWFuPn0gKi8KICBjb25zdCBsYWJlbGxhYmxlID0gewogICAgJ2J1dHRvbic6IHRydWUsCiAgICAnaW5wdXQnOiB0cnVlLAogICAgJ2tleWdlbic6IHRydWUsCiAgICAnbWV0ZXInOiB0cnVlLAogICAgJ291dHB1dCc6IHRydWUsCiAgICAndGV4dGFyZWEnOiB0cnVlLAogICAgJ3Byb2dyZXNzJzogdHJ1ZSwKICAgICdzZWxlY3QnOiB0cnVlCiAgfTsKCiAgLy8gRGVmaW5lZCBhdCBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9mb3JtLWNvbnRyb2wtaW5mcmFzdHJ1Y3R1cmUuaHRtbCNlbmFibGluZy1hbmQtZGlzYWJsaW5nLWZvcm0tY29udHJvbHM6LXRoZS1kaXNhYmxlZC1hdHRyaWJ1dGUKICAvKiogQHR5cGUgeyFPYmplY3Q8Ym9vbGVhbj59ICovCiAgY29uc3QgY2FuQmVEaXNhYmxlZCA9IHsKICAgICdidXR0b24nOiB0cnVlLAogICAgJ2NvbW1hbmQnOiB0cnVlLAogICAgJ2ZpZWxkc2V0JzogdHJ1ZSwKICAgICdpbnB1dCc6IHRydWUsCiAgICAna2V5Z2VuJzogdHJ1ZSwKICAgICdvcHRncm91cCc6IHRydWUsCiAgICAnb3B0aW9uJzogdHJ1ZSwKICAgICdzZWxlY3QnOiB0cnVlLAogICAgJ3RleHRhcmVhJzogdHJ1ZQogIH07CgogIC8qKgogICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsIEVsZW1lbnQgdG8gY2hlY2sgbGFiZWxsaW5nIHN0YXR1cwogICAqIEByZXR1cm4ge2Jvb2xlYW59IGVsZW1lbnQgY2FuIGhhdmUgbGFiZWxzCiAgICovCiAgZnVuY3Rpb24gY2FuQmVMYWJlbGxlZChlbCkgewogICAgcmV0dXJuIGxhYmVsbGFibGVbZWwubG9jYWxOYW1lXSB8fCBmYWxzZTsKICB9CgogIC8qKgogICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsIEVsZW1lbnQgdGhhdCBtYXkgYmUgbGFiZWxsZWQuCiAgICogQHJldHVybiB7IUFycmF5PCFIVE1MTGFiZWxFbGVtZW50Pn0gUmVsZXZhbnQgbGFiZWwgZm9yIGBlbGAKICAgKi8KICBmdW5jdGlvbiBtYXRjaGluZ0xhYmVscyhlbCkgewogICAgbGV0IGxhYmVscyA9IEFycmF5LmZyb20oLyoqIEB0eXBlIHtIVE1MSW5wdXRFbGVtZW50fSAqLyhlbCkubGFiZWxzIHx8IFtdKTsKICAgIC8vIElFIGRvZXNuJ3QgaGF2ZSBgbGFiZWxzYCBhbmQgU2FmYXJpIGRvZXNuJ3QgcG9wdWxhdGUgYGxhYmVsc2AKICAgIC8vIGlmIGVsZW1lbnQgaXMgaW4gYSBzaGFkb3dyb290LgogICAgLy8gSW4gdGhpcyBpbnN0YW5jZSwgZmluZGluZyB0aGUgbm9uLWFuY2VzdG9yIGxhYmVscyBpcyBlbm91Z2gsCiAgICAvLyBhcyB0aGUgbW91c2VDYW5jZWxsb3IgY29kZSB3aWxsIGhhbmRsZSBhbmNzdG9yIGxhYmVscwogICAgaWYgKCFsYWJlbHMubGVuZ3RoKSB7CiAgICAgIGxhYmVscyA9IFtdOwogICAgICBsZXQgcm9vdCA9IGVsLmdldFJvb3ROb2RlKCk7CiAgICAgIC8vIGlmIHRoZXJlIGlzIGFuIGlkIG9uIGBlbGAsIGNoZWNrIGZvciBhbGwgbGFiZWxzIHdpdGggYSBtYXRjaGluZyBgZm9yYCBhdHRyaWJ1dGUKICAgICAgaWYgKGVsLmlkKSB7CiAgICAgICAgbGV0IG1hdGNoaW5nID0gcm9vdC5xdWVyeVNlbGVjdG9yQWxsKGBsYWJlbFtmb3IgPSAke2VsLmlkfV1gKTsKICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1hdGNoaW5nLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICBsYWJlbHMucHVzaCgvKiogQHR5cGUgeyFIVE1MTGFiZWxFbGVtZW50fSAqLyhtYXRjaGluZ1tpXSkpOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIGxhYmVsczsKICB9CgogIC8vIHRvdWNoIHdpbGwgbWFrZSBzeW50aGV0aWMgbW91c2UgZXZlbnRzCiAgLy8gYHByZXZlbnREZWZhdWx0YCBvbiB0b3VjaGVuZCB3aWxsIGNhbmNlbCB0aGVtLAogIC8vIGJ1dCB0aGlzIGJyZWFrcyBgPGlucHV0PmAgZm9jdXMgYW5kIGxpbmsgY2xpY2tzCiAgLy8gZGlzYWJsZSBtb3VzZSBoYW5kbGVycyBmb3IgTU9VU0VfVElNRU9VVCBtcyBhZnRlcgogIC8vIGEgdG91Y2hlbmQgdG8gaWdub3JlIHN5bnRoZXRpYyBtb3VzZSBldmVudHMKICBsZXQgbW91c2VDYW5jZWxsZXIgPSBmdW5jdGlvbihtb3VzZUV2ZW50KSB7CiAgICAvLyBDaGVjayBmb3Igc291cmNlQ2FwYWJpbGl0aWVzLCB1c2VkIHRvIGRpc3Rpbmd1aXNoIHN5bnRoZXRpYyBldmVudHMKICAgIC8vIGlmIG1vdXNlRXZlbnQgZGlkIG5vdCBjb21lIGZyb20gYSBkZXZpY2UgdGhhdCBmaXJlcyB0b3VjaCBldmVudHMsCiAgICAvLyBpdCB3YXMgbWFkZSBieSBhIHJlYWwgbW91c2UgYW5kIHNob3VsZCBiZSBjb3VudGVkCiAgICAvLyBodHRwOi8vd2ljZy5naXRodWIuaW8vSW5wdXREZXZpY2VDYXBhYmlsaXRpZXMvI2RvbS1pbnB1dGRldmljZWNhcGFiaWxpdGllcy1maXJlc3RvdWNoZXZlbnRzCiAgICBsZXQgc2MgPSBtb3VzZUV2ZW50LnNvdXJjZUNhcGFiaWxpdGllczsKICAgIGlmIChzYyAmJiAhc2MuZmlyZXNUb3VjaEV2ZW50cykgewogICAgICByZXR1cm47CiAgICB9CiAgICAvLyBza2lwIHN5bnRoZXRpYyBtb3VzZSBldmVudHMKICAgIG1vdXNlRXZlbnRbSEFORExFRF9PQkpdID0ge3NraXA6IHRydWV9OwogICAgLy8gZGlzYWJsZSAiZ2hvc3QgY2xpY2tzIgogICAgaWYgKG1vdXNlRXZlbnQudHlwZSA9PT0gJ2NsaWNrJykgewogICAgICBsZXQgY2xpY2tGcm9tTGFiZWwgPSBmYWxzZTsKICAgICAgbGV0IHBhdGggPSBtb3VzZUV2ZW50LmNvbXBvc2VkUGF0aCAmJiBtb3VzZUV2ZW50LmNvbXBvc2VkUGF0aCgpOwogICAgICBpZiAocGF0aCkgewogICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGF0aC5sZW5ndGg7IGkrKykgewogICAgICAgICAgaWYgKHBhdGhbaV0ubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7CiAgICAgICAgICAgIGlmIChwYXRoW2ldLmxvY2FsTmFtZSA9PT0gJ2xhYmVsJykgewogICAgICAgICAgICAgIGNsaWNrZWRMYWJlbHMucHVzaChwYXRoW2ldKTsKICAgICAgICAgICAgfSBlbHNlIGlmIChjYW5CZUxhYmVsbGVkKHBhdGhbaV0pKSB7CiAgICAgICAgICAgICAgbGV0IG93bmVyTGFiZWxzID0gbWF0Y2hpbmdMYWJlbHMocGF0aFtpXSk7CiAgICAgICAgICAgICAgLy8gY2hlY2sgaWYgb25lIG9mIHRoZSBjbGlja2VkIGxhYmVscyBpcyBsYWJlbGxpbmcgdGhpcyBlbGVtZW50CiAgICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBvd25lckxhYmVscy5sZW5ndGg7IGorKykgewogICAgICAgICAgICAgICAgY2xpY2tGcm9tTGFiZWwgPSBjbGlja0Zyb21MYWJlbCB8fCBjbGlja2VkTGFiZWxzLmluZGV4T2Yob3duZXJMYWJlbHNbal0pID4gLTE7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBpZiAocGF0aFtpXSA9PT0gUE9JTlRFUlNUQVRFLm1vdXNlLnRhcmdldCkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIC8vIGlmIG9uZSBvZiB0aGUgY2xpY2tlZCBsYWJlbHMgd2FzIGxhYmVsbGluZyB0aGUgdGFyZ2V0IGVsZW1lbnQsCiAgICAgIC8vIHRoaXMgaXMgbm90IGEgZ2hvc3QgY2xpY2sKICAgICAgaWYgKGNsaWNrRnJvbUxhYmVsKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIG1vdXNlRXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICAgbW91c2VFdmVudC5zdG9wUHJvcGFnYXRpb24oKTsKICAgIH0KICB9OwoKICAvKioKICAgKiBAcGFyYW0ge2Jvb2xlYW49fSBzZXR1cCBUcnVlIHRvIGFkZCwgZmFsc2UgdG8gcmVtb3ZlLgogICAqIEByZXR1cm4ge3ZvaWR9CiAgICovCiAgZnVuY3Rpb24gc2V0dXBUZWFyZG93bk1vdXNlQ2FuY2VsbGVyKHNldHVwKSB7CiAgICBsZXQgZXZlbnRzID0gSVNfVE9VQ0hfT05MWSA/IFsnY2xpY2snXSA6IE1PVVNFX0VWRU5UUzsKICAgIGZvciAobGV0IGkgPSAwLCBlbjsgaSA8IGV2ZW50cy5sZW5ndGg7IGkrKykgewogICAgICBlbiA9IGV2ZW50c1tpXTsKICAgICAgaWYgKHNldHVwKSB7CiAgICAgICAgLy8gcmVzZXQgY2xpY2tMYWJlbHMgYXJyYXkKICAgICAgICBjbGlja2VkTGFiZWxzLmxlbmd0aCA9IDA7CiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihlbiwgbW91c2VDYW5jZWxsZXIsIHRydWUpOwogICAgICB9IGVsc2UgewogICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoZW4sIG1vdXNlQ2FuY2VsbGVyLCB0cnVlKTsKICAgICAgfQogICAgfQogIH0KCiAgZnVuY3Rpb24gaWdub3JlTW91c2UoZSkgewogICAgaWYgKCFQT0lOVEVSU1RBVEUubW91c2UubW91c2VJZ25vcmVKb2IpIHsKICAgICAgc2V0dXBUZWFyZG93bk1vdXNlQ2FuY2VsbGVyKHRydWUpOwogICAgfQogICAgbGV0IHVuc2V0ID0gZnVuY3Rpb24oKSB7CiAgICAgIHNldHVwVGVhcmRvd25Nb3VzZUNhbmNlbGxlcigpOwogICAgICBQT0lOVEVSU1RBVEUubW91c2UudGFyZ2V0ID0gbnVsbDsKICAgICAgUE9JTlRFUlNUQVRFLm1vdXNlLm1vdXNlSWdub3JlSm9iID0gbnVsbDsKICAgIH07CiAgICBQT0lOVEVSU1RBVEUubW91c2UudGFyZ2V0ID0gZS5jb21wb3NlZFBhdGgoKVswXTsKICAgIFBPSU5URVJTVEFURS5tb3VzZS5tb3VzZUlnbm9yZUpvYiA9IFBvbHltZXIuRGVib3VuY2VyLmRlYm91bmNlKAogICAgICAgICAgUE9JTlRFUlNUQVRFLm1vdXNlLm1vdXNlSWdub3JlSm9iCiAgICAgICAgLCBQb2x5bWVyLkFzeW5jLnRpbWVPdXQuYWZ0ZXIoTU9VU0VfVElNRU9VVCkKICAgICAgICAsIHVuc2V0KTsKICB9CgogIC8qKgogICAqIEBwYXJhbSB7TW91c2VFdmVudH0gZXYgZXZlbnQgdG8gdGVzdCBmb3IgbGVmdCBtb3VzZSBidXR0b24gZG93bgogICAqIEByZXR1cm4ge2Jvb2xlYW59IGhhcyBsZWZ0IG1vdXNlIGJ1dHRvbiBkb3duCiAgICovCiAgZnVuY3Rpb24gaGFzTGVmdE1vdXNlQnV0dG9uKGV2KSB7CiAgICBsZXQgdHlwZSA9IGV2LnR5cGU7CiAgICAvLyBleGl0IGVhcmx5IGlmIHRoZSBldmVudCBpcyBub3QgYSBtb3VzZSBldmVudAogICAgaWYgKCFpc01vdXNlRXZlbnQodHlwZSkpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgLy8gZXYuYnV0dG9uIGlzIG5vdCByZWxpYWJsZSBmb3IgbW91c2Vtb3ZlICgwIGlzIG92ZXJsb2FkZWQgYXMgYm90aCBsZWZ0IGJ1dHRvbiBhbmQgbm8gYnV0dG9ucykKICAgIC8vIGluc3RlYWQgd2UgdXNlIGV2LmJ1dHRvbnMgKGJpdG1hc2sgb2YgYnV0dG9ucykgb3IgZmFsbCBiYWNrIHRvIGV2LndoaWNoIChkZXByZWNhdGVkLCAwIGZvciBubyBidXR0b25zLCAxIGZvciBsZWZ0IGJ1dHRvbikKICAgIGlmICh0eXBlID09PSAnbW91c2Vtb3ZlJykgewogICAgICAvLyBhbGxvdyB1bmRlZmluZWQgZm9yIHRlc3RpbmcgZXZlbnRzCiAgICAgIGxldCBidXR0b25zID0gZXYuYnV0dG9ucyA9PT0gdW5kZWZpbmVkID8gMSA6IGV2LmJ1dHRvbnM7CiAgICAgIGlmICgoZXYgaW5zdGFuY2VvZiB3aW5kb3cuTW91c2VFdmVudCkgJiYgIU1PVVNFX0hBU19CVVRUT05TKSB7CiAgICAgICAgYnV0dG9ucyA9IE1PVVNFX1dISUNIX1RPX0JVVFRPTlNbZXYud2hpY2hdIHx8IDA7CiAgICAgIH0KICAgICAgLy8gYnV0dG9ucyBpcyBhIGJpdG1hc2ssIGNoZWNrIHRoYXQgdGhlIGxlZnQgYnV0dG9uIGJpdCBpcyBzZXQgKDEpCiAgICAgIHJldHVybiBCb29sZWFuKGJ1dHRvbnMgJiAxKTsKICAgIH0gZWxzZSB7CiAgICAgIC8vIGFsbG93IHVuZGVmaW5lZCBmb3IgdGVzdGluZyBldmVudHMKICAgICAgbGV0IGJ1dHRvbiA9IGV2LmJ1dHRvbiA9PT0gdW5kZWZpbmVkID8gMCA6IGV2LmJ1dHRvbjsKICAgICAgLy8gZXYuYnV0dG9uIGlzIDAgaW4gbW91c2Vkb3duL21vdXNldXAvY2xpY2sgZm9yIGxlZnQgYnV0dG9uIGFjdGl2YXRpb24KICAgICAgcmV0dXJuIGJ1dHRvbiA9PT0gMDsKICAgIH0KICB9CgogIGZ1bmN0aW9uIGlzU3ludGhldGljQ2xpY2soZXYpIHsKICAgIGlmIChldi50eXBlID09PSAnY2xpY2snKSB7CiAgICAgIC8vIGV2LmRldGFpbCBpcyAwIGZvciBIVE1MRWxlbWVudC5jbGljayBpbiBtb3N0IGJyb3dzZXJzCiAgICAgIGlmIChldi5kZXRhaWwgPT09IDApIHsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgICAvLyBpbiB0aGUgd29yc3QgY2FzZSwgY2hlY2sgdGhhdCB0aGUgeC95IHBvc2l0aW9uIG9mIHRoZSBjbGljayBpcyB3aXRoaW4KICAgICAgLy8gdGhlIGJvdW5kaW5nIGJveCBvZiB0aGUgdGFyZ2V0IG9mIHRoZSBldmVudAogICAgICAvLyBUaGFua3MgSUUgMTAgPjooCiAgICAgIGxldCB0ID0gR2VzdHVyZXMuX2ZpbmRPcmlnaW5hbFRhcmdldChldik7CiAgICAgIC8vIG1ha2Ugc3VyZSB0aGUgdGFyZ2V0IG9mIHRoZSBldmVudCBpcyBhbiBlbGVtZW50IHNvIHdlIGNhbiB1c2UgZ2V0Qm91bmRpbmdDbGllbnRSZWN0LAogICAgICAvLyBpZiBub3QsIGp1c3QgYXNzdW1lIGl0IGlzIGEgc3ludGhldGljIGNsaWNrCiAgICAgIGlmICghdC5ub2RlVHlwZSB8fCAvKiogQHR5cGUge0VsZW1lbnR9ICovKHQpLm5vZGVUeXBlICE9PSBOb2RlLkVMRU1FTlRfTk9ERSkgewogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICAgIGxldCBiY3IgPSAvKiogQHR5cGUge0VsZW1lbnR9ICovKHQpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICAvLyB1c2UgcGFnZSB4L3kgdG8gYWNjb3VudCBmb3Igc2Nyb2xsaW5nCiAgICAgIGxldCB4ID0gZXYucGFnZVgsIHkgPSBldi5wYWdlWTsKICAgICAgLy8gZXYgaXMgYSBzeW50aGV0aWMgY2xpY2sgaWYgdGhlIHBvc2l0aW9uIGlzIG91dHNpZGUgdGhlIGJvdW5kaW5nIGJveCBvZiB0aGUgdGFyZ2V0CiAgICAgIHJldHVybiAhKCh4ID49IGJjci5sZWZ0ICYmIHggPD0gYmNyLnJpZ2h0KSAmJiAoeSA+PSBiY3IudG9wICYmIHkgPD0gYmNyLmJvdHRvbSkpOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgbGV0IFBPSU5URVJTVEFURSA9IHsKICAgIG1vdXNlOiB7CiAgICAgIHRhcmdldDogbnVsbCwKICAgICAgbW91c2VJZ25vcmVKb2I6IG51bGwKICAgIH0sCiAgICB0b3VjaDogewogICAgICB4OiAwLAogICAgICB5OiAwLAogICAgICBpZDogLTEsCiAgICAgIHNjcm9sbERlY2lkZWQ6IGZhbHNlCiAgICB9CiAgfTsKCiAgZnVuY3Rpb24gZmlyc3RUb3VjaEFjdGlvbihldikgewogICAgbGV0IHRhID0gJ2F1dG8nOwogICAgbGV0IHBhdGggPSBldi5jb21wb3NlZFBhdGggJiYgZXYuY29tcG9zZWRQYXRoKCk7CiAgICBpZiAocGF0aCkgewogICAgICBmb3IgKGxldCBpID0gMCwgbjsgaSA8IHBhdGgubGVuZ3RoOyBpKyspIHsKICAgICAgICBuID0gcGF0aFtpXTsKICAgICAgICBpZiAobltUT1VDSF9BQ1RJT05dKSB7CiAgICAgICAgICB0YSA9IG5bVE9VQ0hfQUNUSU9OXTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIHRhOwogIH0KCiAgZnVuY3Rpb24gdHJhY2tEb2N1bWVudChzdGF0ZU9iaiwgbW92ZWZuLCB1cGZuKSB7CiAgICBzdGF0ZU9iai5tb3ZlZm4gPSBtb3ZlZm47CiAgICBzdGF0ZU9iai51cGZuID0gdXBmbjsKICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIG1vdmVmbik7CiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgdXBmbik7CiAgfQoKICBmdW5jdGlvbiB1bnRyYWNrRG9jdW1lbnQoc3RhdGVPYmopIHsKICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHN0YXRlT2JqLm1vdmVmbik7CiAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgc3RhdGVPYmoudXBmbik7CiAgICBzdGF0ZU9iai5tb3ZlZm4gPSBudWxsOwogICAgc3RhdGVPYmoudXBmbiA9IG51bGw7CiAgfQoKICAvLyB1c2UgYSBkb2N1bWVudC13aWRlIHRvdWNoZW5kIGxpc3RlbmVyIHRvIHN0YXJ0IHRoZSBnaG9zdC1jbGljayBwcmV2ZW50aW9uIG1lY2hhbmlzbQogIC8vIFVzZSBwYXNzaXZlIGV2ZW50IGxpc3RlbmVycywgaWYgc3VwcG9ydGVkLCB0byBub3QgYWZmZWN0IHNjcm9sbGluZyBwZXJmb3JtYW5jZQogIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgaWdub3JlTW91c2UsIFNVUFBPUlRTX1BBU1NJVkUgPyB7cGFzc2l2ZTogdHJ1ZX0gOiBmYWxzZSk7CgogIC8qKgogICAqIE1vZHVsZSBmb3IgYWRkaW5nIGxpc3RlbmVycyB0byBhIG5vZGUgZm9yIHRoZSBmb2xsb3dpbmcgbm9ybWFsaXplZAogICAqIGNyb3NzLXBsYXRmb3JtICJnZXN0dXJlIiBldmVudHM6CiAgICogLSBgZG93bmAgLSBtb3VzZSBvciB0b3VjaCB3ZW50IGRvd24KICAgKiAtIGB1cGAgLSBtb3VzZSBvciB0b3VjaCB3ZW50IHVwCiAgICogLSBgdGFwYCAtIG1vdXNlIGNsaWNrIG9yIGZpbmdlciB0YXAKICAgKiAtIGB0cmFja2AgLSBtb3VzZSBkcmFnIG9yIHRvdWNoIG1vdmUKICAgKgogICAqIEBuYW1lc3BhY2UKICAgKiBAbWVtYmVyb2YgUG9seW1lcgogICAqIEBzdW1tYXJ5IE1vZHVsZSBmb3IgYWRkaW5nIGNyb3NzLXBsYXRmb3JtIGdlc3R1cmUgZXZlbnQgbGlzdGVuZXJzLgogICAqLwogIGNvbnN0IEdlc3R1cmVzID0gewogICAgZ2VzdHVyZXM6IHt9LAogICAgcmVjb2duaXplcnM6IFtdLAoKICAgIC8qKgogICAgICogRmluZHMgdGhlIGVsZW1lbnQgcmVuZGVyZWQgb24gdGhlIHNjcmVlbiBhdCB0aGUgcHJvdmlkZWQgY29vcmRpbmF0ZXMuCiAgICAgKgogICAgICogU2ltaWxhciB0byBgZG9jdW1lbnQuZWxlbWVudEZyb21Qb2ludGAsIGJ1dCBwaWVyY2VzIHRocm91Z2gKICAgICAqIHNoYWRvdyByb290cy4KICAgICAqCiAgICAgKiBAbWVtYmVyb2YgUG9seW1lci5HZXN0dXJlcwogICAgICogQHBhcmFtIHtudW1iZXJ9IHggSG9yaXpvbnRhbCBwaXhlbCBjb29yZGluYXRlCiAgICAgKiBAcGFyYW0ge251bWJlcn0geSBWZXJ0aWNhbCBwaXhlbCBjb29yZGluYXRlCiAgICAgKiBAcmV0dXJuIHtFbGVtZW50fSBSZXR1cm5zIHRoZSBkZWVwZXN0IHNoYWRvd1Jvb3QgaW5jbHVzaXZlIGVsZW1lbnQKICAgICAqIGZvdW5kIGF0IHRoZSBzY3JlZW4gcG9zaXRpb24gZ2l2ZW4uCiAgICAgKi8KICAgIGRlZXBUYXJnZXRGaW5kOiBmdW5jdGlvbih4LCB5KSB7CiAgICAgIGxldCBub2RlID0gZG9jdW1lbnQuZWxlbWVudEZyb21Qb2ludCh4LCB5KTsKICAgICAgbGV0IG5leHQgPSBub2RlOwogICAgICAvLyB0aGlzIGNvZGUgcGF0aCBpcyBvbmx5IHRha2VuIHdoZW4gbmF0aXZlIFNoYWRvd0RPTSBpcyB1c2VkCiAgICAgIC8vIGlmIHRoZXJlIGlzIGEgc2hhZG93cm9vdCwgaXQgbWF5IGhhdmUgYSBub2RlIGF0IHgveQogICAgICAvLyBpZiB0aGVyZSBpcyBub3QgYSBzaGFkb3dyb290LCBleGl0IHRoZSBsb29wCiAgICAgIHdoaWxlIChuZXh0ICYmIG5leHQuc2hhZG93Um9vdCAmJiAhd2luZG93LlNoYWR5RE9NKSB7CiAgICAgICAgLy8gaWYgdGhlcmUgaXMgYSBub2RlIGF0IHgveSBpbiB0aGUgc2hhZG93cm9vdCwgbG9vayBkZWVwZXIKICAgICAgICBsZXQgb2xkTmV4dCA9IG5leHQ7CiAgICAgICAgbmV4dCA9IG5leHQuc2hhZG93Um9vdC5lbGVtZW50RnJvbVBvaW50KHgsIHkpOwogICAgICAgIC8vIG9uIFNhZmFyaSwgZWxlbWVudEZyb21Qb2ludCBtYXkgcmV0dXJuIHRoZSBzaGFkb3dSb290IGhvc3QKICAgICAgICBpZiAob2xkTmV4dCA9PT0gbmV4dCkgewogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGlmIChuZXh0KSB7CiAgICAgICAgICBub2RlID0gbmV4dDsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIG5vZGU7CiAgICB9LAogICAgLyoqCiAgICAgKiBhIGNoZWFwZXIgY2hlY2sgdGhhbiBldi5jb21wb3NlZFBhdGgoKVswXTsKICAgICAqCiAgICAgKiBAcHJpdmF0ZQogICAgICogQHBhcmFtIHtFdmVudH0gZXYgRXZlbnQuCiAgICAgKiBAcmV0dXJuIHtFdmVudFRhcmdldH0gUmV0dXJucyB0aGUgZXZlbnQgdGFyZ2V0LgogICAgICovCiAgICBfZmluZE9yaWdpbmFsVGFyZ2V0OiBmdW5jdGlvbihldikgewogICAgICAvLyBzaGFkb3dkb20KICAgICAgaWYgKGV2LmNvbXBvc2VkUGF0aCkgewogICAgICAgIGNvbnN0IHRhcmdldHMgPSAvKiogQHR5cGUgeyFBcnJheTwhRXZlbnRUYXJnZXQ+fSAqLyhldi5jb21wb3NlZFBhdGgoKSk7CiAgICAgICAgLy8gSXQgc2hvdWxkbid0IGJlLCBidXQgc29tZXRpbWVzIHRhcmdldHMgaXMgZW1wdHkgKHdpbmRvdyBvbiBTYWZhcmkpLgogICAgICAgIHJldHVybiB0YXJnZXRzLmxlbmd0aCA+IDAgPyB0YXJnZXRzWzBdIDogZXYudGFyZ2V0OwogICAgICB9CiAgICAgIC8vIHNoYWR5ZG9tCiAgICAgIHJldHVybiBldi50YXJnZXQ7CiAgICB9LAoKICAgIC8qKgogICAgICogQHByaXZhdGUKICAgICAqIEBwYXJhbSB7RXZlbnR9IGV2IEV2ZW50LgogICAgICogQHJldHVybiB7dm9pZH0KICAgICAqLwogICAgX2hhbmRsZU5hdGl2ZTogZnVuY3Rpb24oZXYpIHsKICAgICAgbGV0IGhhbmRsZWQ7CiAgICAgIGxldCB0eXBlID0gZXYudHlwZTsKICAgICAgbGV0IG5vZGUgPSBldi5jdXJyZW50VGFyZ2V0OwogICAgICBsZXQgZ29iaiA9IG5vZGVbR0VTVFVSRV9LRVldOwogICAgICBpZiAoIWdvYmopIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgbGV0IGdzID0gZ29ialt0eXBlXTsKICAgICAgaWYgKCFncykgewogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBpZiAoIWV2W0hBTkRMRURfT0JKXSkgewogICAgICAgIGV2W0hBTkRMRURfT0JKXSA9IHt9OwogICAgICAgIGlmICh0eXBlLnNsaWNlKDAsIDUpID09PSAndG91Y2gnKSB7CiAgICAgICAgICBldiA9IC8qKiBAdHlwZSB7VG91Y2hFdmVudH0gKi8oZXYpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXNlbGYtYXNzaWduCiAgICAgICAgICBsZXQgdCA9IGV2LmNoYW5nZWRUb3VjaGVzWzBdOwogICAgICAgICAgaWYgKHR5cGUgPT09ICd0b3VjaHN0YXJ0JykgewogICAgICAgICAgICAvLyBvbmx5IGhhbmRsZSB0aGUgZmlyc3QgZmluZ2VyCiAgICAgICAgICAgIGlmIChldi50b3VjaGVzLmxlbmd0aCA9PT0gMSkgewogICAgICAgICAgICAgIFBPSU5URVJTVEFURS50b3VjaC5pZCA9IHQuaWRlbnRpZmllcjsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgaWYgKFBPSU5URVJTVEFURS50b3VjaC5pZCAhPT0gdC5pZGVudGlmaWVyKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KICAgICAgICAgIGlmICghSEFTX05BVElWRV9UQSkgewogICAgICAgICAgICBpZiAodHlwZSA9PT0gJ3RvdWNoc3RhcnQnIHx8IHR5cGUgPT09ICd0b3VjaG1vdmUnKSB7CiAgICAgICAgICAgICAgR2VzdHVyZXMuX2hhbmRsZVRvdWNoQWN0aW9uKGV2KTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICBoYW5kbGVkID0gZXZbSEFORExFRF9PQkpdOwogICAgICAvLyB1c2VkIHRvIGlnbm9yZSBzeW50aGV0aWMgbW91c2UgZXZlbnRzCiAgICAgIGlmIChoYW5kbGVkLnNraXApIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgLy8gcmVzZXQgcmVjb2duaXplciBzdGF0ZQogICAgICBmb3IgKGxldCBpID0gMCwgcjsgaSA8IEdlc3R1cmVzLnJlY29nbml6ZXJzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgciA9IEdlc3R1cmVzLnJlY29nbml6ZXJzW2ldOwogICAgICAgIGlmIChnc1tyLm5hbWVdICYmICFoYW5kbGVkW3IubmFtZV0pIHsKICAgICAgICAgIGlmIChyLmZsb3cgJiYgci5mbG93LnN0YXJ0LmluZGV4T2YoZXYudHlwZSkgPiAtMSAmJiByLnJlc2V0KSB7CiAgICAgICAgICAgIHIucmVzZXQoKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgLy8gZW5mb3JjZSBnZXN0dXJlIHJlY29nbml6ZXIgb3JkZXIKICAgICAgZm9yIChsZXQgaSA9IDAsIHI7IGkgPCBHZXN0dXJlcy5yZWNvZ25pemVycy5sZW5ndGg7IGkrKykgewogICAgICAgIHIgPSBHZXN0dXJlcy5yZWNvZ25pemVyc1tpXTsKICAgICAgICBpZiAoZ3Nbci5uYW1lXSAmJiAhaGFuZGxlZFtyLm5hbWVdKSB7CiAgICAgICAgICBoYW5kbGVkW3IubmFtZV0gPSB0cnVlOwogICAgICAgICAgclt0eXBlXShldik7CiAgICAgICAgfQogICAgICB9CiAgICB9LAoKICAgIC8qKgogICAgICogQHByaXZhdGUKICAgICAqIEBwYXJhbSB7VG91Y2hFdmVudH0gZXYgRXZlbnQuCiAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICovCiAgICBfaGFuZGxlVG91Y2hBY3Rpb246IGZ1bmN0aW9uKGV2KSB7CiAgICAgIGxldCB0ID0gZXYuY2hhbmdlZFRvdWNoZXNbMF07CiAgICAgIGxldCB0eXBlID0gZXYudHlwZTsKICAgICAgaWYgKHR5cGUgPT09ICd0b3VjaHN0YXJ0JykgewogICAgICAgIFBPSU5URVJTVEFURS50b3VjaC54ID0gdC5jbGllbnRYOwogICAgICAgIFBPSU5URVJTVEFURS50b3VjaC55ID0gdC5jbGllbnRZOwogICAgICAgIFBPSU5URVJTVEFURS50b3VjaC5zY3JvbGxEZWNpZGVkID0gZmFsc2U7CiAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ3RvdWNobW92ZScpIHsKICAgICAgICBpZiAoUE9JTlRFUlNUQVRFLnRvdWNoLnNjcm9sbERlY2lkZWQpIHsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgUE9JTlRFUlNUQVRFLnRvdWNoLnNjcm9sbERlY2lkZWQgPSB0cnVlOwogICAgICAgIGxldCB0YSA9IGZpcnN0VG91Y2hBY3Rpb24oZXYpOwogICAgICAgIGxldCBwcmV2ZW50ID0gZmFsc2U7CiAgICAgICAgbGV0IGR4ID0gTWF0aC5hYnMoUE9JTlRFUlNUQVRFLnRvdWNoLnggLSB0LmNsaWVudFgpOwogICAgICAgIGxldCBkeSA9IE1hdGguYWJzKFBPSU5URVJTVEFURS50b3VjaC55IC0gdC5jbGllbnRZKTsKICAgICAgICBpZiAoIWV2LmNhbmNlbGFibGUpIHsKICAgICAgICAgIC8vIHNjcm9sbGluZyBpcyBoYXBwZW5pbmcKICAgICAgICB9IGVsc2UgaWYgKHRhID09PSAnbm9uZScpIHsKICAgICAgICAgIHByZXZlbnQgPSB0cnVlOwogICAgICAgIH0gZWxzZSBpZiAodGEgPT09ICdwYW4teCcpIHsKICAgICAgICAgIHByZXZlbnQgPSBkeSA+IGR4OwogICAgICAgIH0gZWxzZSBpZiAodGEgPT09ICdwYW4teScpIHsKICAgICAgICAgIHByZXZlbnQgPSBkeCA+IGR5OwogICAgICAgIH0KICAgICAgICBpZiAocHJldmVudCkgewogICAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgR2VzdHVyZXMucHJldmVudCgndHJhY2snKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0sCgogICAgLyoqCiAgICAgKiBBZGRzIGFuIGV2ZW50IGxpc3RlbmVyIHRvIGEgbm9kZSBmb3IgdGhlIGdpdmVuIGdlc3R1cmUgdHlwZS4KICAgICAqCiAgICAgKiBAbWVtYmVyb2YgUG9seW1lci5HZXN0dXJlcwogICAgICogQHBhcmFtIHshTm9kZX0gbm9kZSBOb2RlIHRvIGFkZCBsaXN0ZW5lciBvbgogICAgICogQHBhcmFtIHtzdHJpbmd9IGV2VHlwZSBHZXN0dXJlIHR5cGU6IGBkb3duYCwgYHVwYCwgYHRyYWNrYCwgb3IgYHRhcGAKICAgICAqIEBwYXJhbSB7IWZ1bmN0aW9uKCFFdmVudCk6dm9pZH0gaGFuZGxlciBFdmVudCBsaXN0ZW5lciBmdW5jdGlvbiB0byBjYWxsCiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBSZXR1cm5zIHRydWUgaWYgYSBnZXN0dXJlIGV2ZW50IGxpc3RlbmVyIHdhcyBhZGRlZC4KICAgICAqIEB0aGlzIHtHZXN0dXJlc30KICAgICAqLwogICAgYWRkTGlzdGVuZXI6IGZ1bmN0aW9uKG5vZGUsIGV2VHlwZSwgaGFuZGxlcikgewogICAgICBpZiAodGhpcy5nZXN0dXJlc1tldlR5cGVdKSB7CiAgICAgICAgdGhpcy5fYWRkKG5vZGUsIGV2VHlwZSwgaGFuZGxlcik7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgICAgcmV0dXJuIGZhbHNlOwogICAgfSwKCiAgICAvKioKICAgICAqIFJlbW92ZXMgYW4gZXZlbnQgbGlzdGVuZXIgZnJvbSBhIG5vZGUgZm9yIHRoZSBnaXZlbiBnZXN0dXJlIHR5cGUuCiAgICAgKgogICAgICogQG1lbWJlcm9mIFBvbHltZXIuR2VzdHVyZXMKICAgICAqIEBwYXJhbSB7IU5vZGV9IG5vZGUgTm9kZSB0byByZW1vdmUgbGlzdGVuZXIgZnJvbQogICAgICogQHBhcmFtIHtzdHJpbmd9IGV2VHlwZSBHZXN0dXJlIHR5cGU6IGBkb3duYCwgYHVwYCwgYHRyYWNrYCwgb3IgYHRhcGAKICAgICAqIEBwYXJhbSB7IWZ1bmN0aW9uKCFFdmVudCk6dm9pZH0gaGFuZGxlciBFdmVudCBsaXN0ZW5lciBmdW5jdGlvbiBwcmV2aW91c2x5IHBhc3NlZCB0bwogICAgICogIGBhZGRMaXN0ZW5lcmAuCiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBSZXR1cm5zIHRydWUgaWYgYSBnZXN0dXJlIGV2ZW50IGxpc3RlbmVyIHdhcyByZW1vdmVkLgogICAgICogQHRoaXMge0dlc3R1cmVzfQogICAgICovCiAgICByZW1vdmVMaXN0ZW5lcjogZnVuY3Rpb24obm9kZSwgZXZUeXBlLCBoYW5kbGVyKSB7CiAgICAgIGlmICh0aGlzLmdlc3R1cmVzW2V2VHlwZV0pIHsKICAgICAgICB0aGlzLl9yZW1vdmUobm9kZSwgZXZUeXBlLCBoYW5kbGVyKTsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgICByZXR1cm4gZmFsc2U7CiAgICB9LAoKICAgIC8qKgogICAgICogYXV0b21hdGUgdGhlIGV2ZW50IGxpc3RlbmVycyBmb3IgdGhlIG5hdGl2ZSBldmVudHMKICAgICAqCiAgICAgKiBAcHJpdmF0ZQogICAgICogQHBhcmFtIHshSFRNTEVsZW1lbnR9IG5vZGUgTm9kZSBvbiB3aGljaCB0byBhZGQgdGhlIGV2ZW50LgogICAgICogQHBhcmFtIHtzdHJpbmd9IGV2VHlwZSBFdmVudCB0eXBlIHRvIGFkZC4KICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24oIUV2ZW50KX0gaGFuZGxlciBFdmVudCBoYW5kbGVyIGZ1bmN0aW9uLgogICAgICogQHJldHVybiB7dm9pZH0KICAgICAqIEB0aGlzIHtHZXN0dXJlc30KICAgICAqLwogICAgX2FkZDogZnVuY3Rpb24obm9kZSwgZXZUeXBlLCBoYW5kbGVyKSB7CiAgICAgIGxldCByZWNvZ25pemVyID0gdGhpcy5nZXN0dXJlc1tldlR5cGVdOwogICAgICBsZXQgZGVwcyA9IHJlY29nbml6ZXIuZGVwczsKICAgICAgbGV0IG5hbWUgPSByZWNvZ25pemVyLm5hbWU7CiAgICAgIGxldCBnb2JqID0gbm9kZVtHRVNUVVJFX0tFWV07CiAgICAgIGlmICghZ29iaikgewogICAgICAgIG5vZGVbR0VTVFVSRV9LRVldID0gZ29iaiA9IHt9OwogICAgICB9CiAgICAgIGZvciAobGV0IGkgPSAwLCBkZXAsIGdkOyBpIDwgZGVwcy5sZW5ndGg7IGkrKykgewogICAgICAgIGRlcCA9IGRlcHNbaV07CiAgICAgICAgLy8gZG9uJ3QgYWRkIG1vdXNlIGhhbmRsZXJzIG9uIGlPUyBiZWNhdXNlIHRoZXkgY2F1c2UgZ3JheSBzZWxlY3Rpb24gb3ZlcmxheXMKICAgICAgICBpZiAoSVNfVE9VQ0hfT05MWSAmJiBpc01vdXNlRXZlbnQoZGVwKSAmJiBkZXAgIT09ICdjbGljaycpIHsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICBnZCA9IGdvYmpbZGVwXTsKICAgICAgICBpZiAoIWdkKSB7CiAgICAgICAgICBnb2JqW2RlcF0gPSBnZCA9IHtfY291bnQ6IDB9OwogICAgICAgIH0KICAgICAgICBpZiAoZ2QuX2NvdW50ID09PSAwKSB7CiAgICAgICAgICBub2RlLmFkZEV2ZW50TGlzdGVuZXIoZGVwLCB0aGlzLl9oYW5kbGVOYXRpdmUsIFBBU1NJVkVfVE9VQ0goZGVwKSk7CiAgICAgICAgfQogICAgICAgIGdkW25hbWVdID0gKGdkW25hbWVdIHx8IDApICsgMTsKICAgICAgICBnZC5fY291bnQgPSAoZ2QuX2NvdW50IHx8IDApICsgMTsKICAgICAgfQogICAgICBub2RlLmFkZEV2ZW50TGlzdGVuZXIoZXZUeXBlLCBoYW5kbGVyKTsKICAgICAgaWYgKHJlY29nbml6ZXIudG91Y2hBY3Rpb24pIHsKICAgICAgICB0aGlzLnNldFRvdWNoQWN0aW9uKG5vZGUsIHJlY29nbml6ZXIudG91Y2hBY3Rpb24pOwogICAgICB9CiAgICB9LAoKICAgIC8qKgogICAgICogYXV0b21hdGUgZXZlbnQgbGlzdGVuZXIgcmVtb3ZhbCBmb3IgbmF0aXZlIGV2ZW50cwogICAgICoKICAgICAqIEBwcml2YXRlCiAgICAgKiBAcGFyYW0geyFIVE1MRWxlbWVudH0gbm9kZSBOb2RlIG9uIHdoaWNoIHRvIHJlbW92ZSB0aGUgZXZlbnQuCiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXZUeXBlIEV2ZW50IHR5cGUgdG8gcmVtb3ZlLgogICAgICogQHBhcmFtIHtmdW5jdGlvbihFdmVudD8pfSBoYW5kbGVyIEV2ZW50IGhhbmRsZXIgZnVuY3Rpb24uCiAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICogQHRoaXMge0dlc3R1cmVzfQogICAgICovCiAgICBfcmVtb3ZlOiBmdW5jdGlvbihub2RlLCBldlR5cGUsIGhhbmRsZXIpIHsKICAgICAgbGV0IHJlY29nbml6ZXIgPSB0aGlzLmdlc3R1cmVzW2V2VHlwZV07CiAgICAgIGxldCBkZXBzID0gcmVjb2duaXplci5kZXBzOwogICAgICBsZXQgbmFtZSA9IHJlY29nbml6ZXIubmFtZTsKICAgICAgbGV0IGdvYmogPSBub2RlW0dFU1RVUkVfS0VZXTsKICAgICAgaWYgKGdvYmopIHsKICAgICAgICBmb3IgKGxldCBpID0gMCwgZGVwLCBnZDsgaSA8IGRlcHMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgIGRlcCA9IGRlcHNbaV07CiAgICAgICAgICBnZCA9IGdvYmpbZGVwXTsKICAgICAgICAgIGlmIChnZCAmJiBnZFtuYW1lXSkgewogICAgICAgICAgICBnZFtuYW1lXSA9IChnZFtuYW1lXSB8fCAxKSAtIDE7CiAgICAgICAgICAgIGdkLl9jb3VudCA9IChnZC5fY291bnQgfHwgMSkgLSAxOwogICAgICAgICAgICBpZiAoZ2QuX2NvdW50ID09PSAwKSB7CiAgICAgICAgICAgICAgbm9kZS5yZW1vdmVFdmVudExpc3RlbmVyKGRlcCwgdGhpcy5faGFuZGxlTmF0aXZlLCBQQVNTSVZFX1RPVUNIKGRlcCkpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIG5vZGUucmVtb3ZlRXZlbnRMaXN0ZW5lcihldlR5cGUsIGhhbmRsZXIpOwogICAgfSwKCiAgICAvKioKICAgICAqIFJlZ2lzdGVycyBhIG5ldyBnZXN0dXJlIGV2ZW50IHJlY29nbml6ZXIgZm9yIGFkZGluZyBuZXcgY3VzdG9tCiAgICAgKiBnZXN0dXJlIGV2ZW50IHR5cGVzLgogICAgICoKICAgICAqIEBtZW1iZXJvZiBQb2x5bWVyLkdlc3R1cmVzCiAgICAgKiBAcGFyYW0geyFHZXN0dXJlUmVjb2duaXplcn0gcmVjb2cgR2VzdHVyZSByZWNvZ25pemVyIGRlc2NyaXB0b3IKICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgKiBAdGhpcyB7R2VzdHVyZXN9CiAgICAgKi8KICAgIHJlZ2lzdGVyOiBmdW5jdGlvbihyZWNvZykgewogICAgICB0aGlzLnJlY29nbml6ZXJzLnB1c2gocmVjb2cpOwogICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlY29nLmVtaXRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgdGhpcy5nZXN0dXJlc1tyZWNvZy5lbWl0c1tpXV0gPSByZWNvZzsKICAgICAgfQogICAgfSwKCiAgICAvKioKICAgICAqIEBwcml2YXRlCiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXZOYW1lIEV2ZW50IG5hbWUuCiAgICAgKiBAcmV0dXJuIHtPYmplY3R9IFJldHVybnMgdGhlIGdlc3R1cmUgZm9yIHRoZSBnaXZlbiBldmVudCBuYW1lLgogICAgICogQHRoaXMge0dlc3R1cmVzfQogICAgICovCiAgICBfZmluZFJlY29nbml6ZXJCeUV2ZW50OiBmdW5jdGlvbihldk5hbWUpIHsKICAgICAgZm9yIChsZXQgaSA9IDAsIHI7IGkgPCB0aGlzLnJlY29nbml6ZXJzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgciA9IHRoaXMucmVjb2duaXplcnNbaV07CiAgICAgICAgZm9yIChsZXQgaiA9IDAsIG47IGogPCByLmVtaXRzLmxlbmd0aDsgaisrKSB7CiAgICAgICAgICBuID0gci5lbWl0c1tqXTsKICAgICAgICAgIGlmIChuID09PSBldk5hbWUpIHsKICAgICAgICAgICAgcmV0dXJuIHI7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBudWxsOwogICAgfSwKCiAgICAvKioKICAgICAqIFNldHMgc2Nyb2xsaW5nIGRpcmVjdGlvbiBvbiBub2RlLgogICAgICoKICAgICAqIFRoaXMgdmFsdWUgaXMgY2hlY2tlZCBvbiBmaXJzdCBtb3ZlLCB0aHVzIGl0IHNob3VsZCBiZSBjYWxsZWQgcHJpb3IgdG8KICAgICAqIGFkZGluZyBldmVudCBsaXN0ZW5lcnMuCiAgICAgKgogICAgICogQG1lbWJlcm9mIFBvbHltZXIuR2VzdHVyZXMKICAgICAqIEBwYXJhbSB7IUVsZW1lbnR9IG5vZGUgTm9kZSB0byBzZXQgdG91Y2ggYWN0aW9uIHNldHRpbmcgb24KICAgICAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZSBUb3VjaCBhY3Rpb24gdmFsdWUKICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgKi8KICAgIHNldFRvdWNoQWN0aW9uOiBmdW5jdGlvbihub2RlLCB2YWx1ZSkgewogICAgICBpZiAoSEFTX05BVElWRV9UQSkgewogICAgICAgIC8vIE5PVEU6IGFkZCB0b3VjaEFjdGlvbiBhc3luYyBzbyB0aGF0IGV2ZW50cyBjYW4gYmUgYWRkZWQgaW4KICAgICAgICAvLyBjdXN0b20gZWxlbWVudCBjb25zdHJ1Y3RvcnMuIE90aGVyd2lzZSB3ZSBydW4gYWZvdWwgb2YgY3VzdG9tCiAgICAgICAgLy8gZWxlbWVudHMgcmVzdHJpY3Rpb24gYWdhaW5zdCBzZXR0aW5ncyBhdHRyaWJ1dGVzIChzdHlsZSkgaW4gdGhlCiAgICAgICAgLy8gY29uc3RydWN0b3IuCiAgICAgICAgUG9seW1lci5Bc3luYy5taWNyb1Rhc2sucnVuKCgpID0+IHsKICAgICAgICAgIG5vZGUuc3R5bGUudG91Y2hBY3Rpb24gPSB2YWx1ZTsKICAgICAgICB9KTsKICAgICAgfQogICAgICBub2RlW1RPVUNIX0FDVElPTl0gPSB2YWx1ZTsKICAgIH0sCgogICAgLyoqCiAgICAgKiBEaXNwYXRjaGVzIGFuIGV2ZW50IG9uIHRoZSBgdGFyZ2V0YCBlbGVtZW50IG9mIGB0eXBlYCB3aXRoIHRoZSBnaXZlbgogICAgICogYGRldGFpbGAuCiAgICAgKiBAcHJpdmF0ZQogICAgICogQHBhcmFtIHshRXZlbnRUYXJnZXR9IHRhcmdldCBUaGUgZWxlbWVudCBvbiB3aGljaCB0byBmaXJlIGFuIGV2ZW50LgogICAgICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgVGhlIHR5cGUgb2YgZXZlbnQgdG8gZmlyZS4KICAgICAqIEBwYXJhbSB7IU9iamVjdD19IGRldGFpbCBUaGUgZGV0YWlsIG9iamVjdCB0byBwb3B1bGF0ZSBvbiB0aGUgZXZlbnQuCiAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICovCiAgICBfZmlyZTogZnVuY3Rpb24odGFyZ2V0LCB0eXBlLCBkZXRhaWwpIHsKICAgICAgbGV0IGV2ID0gbmV3IEV2ZW50KHR5cGUsIHsgYnViYmxlczogdHJ1ZSwgY2FuY2VsYWJsZTogdHJ1ZSwgY29tcG9zZWQ6IHRydWUgfSk7CiAgICAgIGV2LmRldGFpbCA9IGRldGFpbDsKICAgICAgdGFyZ2V0LmRpc3BhdGNoRXZlbnQoZXYpOwogICAgICAvLyBmb3J3YXJkIGBwcmV2ZW50RGVmYXVsdGAgaW4gYSBjbGVhbiB3YXkKICAgICAgaWYgKGV2LmRlZmF1bHRQcmV2ZW50ZWQpIHsKICAgICAgICBsZXQgcHJldmVudGVyID0gZGV0YWlsLnByZXZlbnRlciB8fCBkZXRhaWwuc291cmNlRXZlbnQ7CiAgICAgICAgaWYgKHByZXZlbnRlciAmJiBwcmV2ZW50ZXIucHJldmVudERlZmF1bHQpIHsKICAgICAgICAgIHByZXZlbnRlci5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgIH0KICAgICAgfQogICAgfSwKCiAgICAvKioKICAgICAqIFByZXZlbnRzIHRoZSBkaXNwYXRjaCBhbmQgZGVmYXVsdCBhY3Rpb24gb2YgdGhlIGdpdmVuIGV2ZW50IG5hbWUuCiAgICAgKgogICAgICogQG1lbWJlcm9mIFBvbHltZXIuR2VzdHVyZXMKICAgICAqIEBwYXJhbSB7c3RyaW5nfSBldk5hbWUgRXZlbnQgbmFtZS4KICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgKiBAdGhpcyB7R2VzdHVyZXN9CiAgICAgKi8KICAgIHByZXZlbnQ6IGZ1bmN0aW9uKGV2TmFtZSkgewogICAgICBsZXQgcmVjb2duaXplciA9IHRoaXMuX2ZpbmRSZWNvZ25pemVyQnlFdmVudChldk5hbWUpOwogICAgICBpZiAocmVjb2duaXplci5pbmZvKSB7CiAgICAgICAgcmVjb2duaXplci5pbmZvLnByZXZlbnQgPSB0cnVlOwogICAgICB9CiAgICB9LAoKICAgIC8qKgogICAgICogUmVzZXQgdGhlIDI1MDBtcyB0aW1lb3V0IG9uIHByb2Nlc3NpbmcgbW91c2UgaW5wdXQgYWZ0ZXIgZGV0ZWN0aW5nIHRvdWNoIGlucHV0LgogICAgICoKICAgICAqIFRvdWNoIGlucHV0cyBjcmVhdGUgc3ludGhlc2l6ZWQgbW91c2UgaW5wdXRzIGFueXdoZXJlIGZyb20gMCB0byAyMDAwbXMgYWZ0ZXIgdGhlIHRvdWNoLgogICAgICogVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyB0ZXN0aW5nIHdpdGggc2ltdWxhdGVkIHRvdWNoIGlucHV0cy4KICAgICAqIENhbGxpbmcgdGhpcyBtZXRob2QgaW4gcHJvZHVjdGlvbiBtYXkgY2F1c2UgZHVwbGljYXRlIHRhcHMgb3Igb3RoZXIgR2VzdHVyZXMuCiAgICAgKgogICAgICogQG1lbWJlcm9mIFBvbHltZXIuR2VzdHVyZXMKICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgKi8KICAgIHJlc2V0TW91c2VDYW5jZWxsZXI6IGZ1bmN0aW9uKCkgewogICAgICBpZiAoUE9JTlRFUlNUQVRFLm1vdXNlLm1vdXNlSWdub3JlSm9iKSB7CiAgICAgICAgUE9JTlRFUlNUQVRFLm1vdXNlLm1vdXNlSWdub3JlSm9iLmZsdXNoKCk7CiAgICAgIH0KICAgIH0KICB9OwoKICAvKiBlc2xpbnQtZGlzYWJsZSB2YWxpZC1qc2RvYyAqLwoKICBHZXN0dXJlcy5yZWdpc3Rlcih7CiAgICBuYW1lOiAnZG93bnVwJywKICAgIGRlcHM6IFsnbW91c2Vkb3duJywgJ3RvdWNoc3RhcnQnLCAndG91Y2hlbmQnXSwKICAgIGZsb3c6IHsKICAgICAgc3RhcnQ6IFsnbW91c2Vkb3duJywgJ3RvdWNoc3RhcnQnXSwKICAgICAgZW5kOiBbJ21vdXNldXAnLCAndG91Y2hlbmQnXQogICAgfSwKICAgIGVtaXRzOiBbJ2Rvd24nLCAndXAnXSwKCiAgICBpbmZvOiB7CiAgICAgIG1vdmVmbjogbnVsbCwKICAgICAgdXBmbjogbnVsbAogICAgfSwKCiAgICAvKioKICAgICAqIEB0aGlzIHtHZXN0dXJlUmVjb2duaXplcn0KICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgKi8KICAgIHJlc2V0OiBmdW5jdGlvbigpIHsKICAgICAgdW50cmFja0RvY3VtZW50KHRoaXMuaW5mbyk7CiAgICB9LAoKICAgIC8qKgogICAgICogQHRoaXMge0dlc3R1cmVSZWNvZ25pemVyfQogICAgICogQHBhcmFtIHtNb3VzZUV2ZW50fSBlCiAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICovCiAgICBtb3VzZWRvd246IGZ1bmN0aW9uKGUpIHsKICAgICAgaWYgKCFoYXNMZWZ0TW91c2VCdXR0b24oZSkpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgbGV0IHQgPSBHZXN0dXJlcy5fZmluZE9yaWdpbmFsVGFyZ2V0KGUpOwogICAgICBsZXQgc2VsZiA9IHRoaXM7CiAgICAgIGxldCBtb3ZlZm4gPSBmdW5jdGlvbiBtb3ZlZm4oZSkgewogICAgICAgIGlmICghaGFzTGVmdE1vdXNlQnV0dG9uKGUpKSB7CiAgICAgICAgICBzZWxmLl9maXJlKCd1cCcsIHQsIGUpOwogICAgICAgICAgdW50cmFja0RvY3VtZW50KHNlbGYuaW5mbyk7CiAgICAgICAgfQogICAgICB9OwogICAgICBsZXQgdXBmbiA9IGZ1bmN0aW9uIHVwZm4oZSkgewogICAgICAgIGlmIChoYXNMZWZ0TW91c2VCdXR0b24oZSkpIHsKICAgICAgICAgIHNlbGYuX2ZpcmUoJ3VwJywgdCwgZSk7CiAgICAgICAgfQogICAgICAgIHVudHJhY2tEb2N1bWVudChzZWxmLmluZm8pOwogICAgICB9OwogICAgICB0cmFja0RvY3VtZW50KHRoaXMuaW5mbywgbW92ZWZuLCB1cGZuKTsKICAgICAgdGhpcy5fZmlyZSgnZG93bicsIHQsIGUpOwogICAgfSwKICAgIC8qKgogICAgICogQHRoaXMge0dlc3R1cmVSZWNvZ25pemVyfQogICAgICogQHBhcmFtIHtUb3VjaEV2ZW50fSBlCiAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICovCiAgICB0b3VjaHN0YXJ0OiBmdW5jdGlvbihlKSB7CiAgICAgIHRoaXMuX2ZpcmUoJ2Rvd24nLCBHZXN0dXJlcy5fZmluZE9yaWdpbmFsVGFyZ2V0KGUpLCBlLmNoYW5nZWRUb3VjaGVzWzBdLCBlKTsKICAgIH0sCiAgICAvKioKICAgICAqIEB0aGlzIHtHZXN0dXJlUmVjb2duaXplcn0KICAgICAqIEBwYXJhbSB7VG91Y2hFdmVudH0gZQogICAgICogQHJldHVybiB7dm9pZH0KICAgICAqLwogICAgdG91Y2hlbmQ6IGZ1bmN0aW9uKGUpIHsKICAgICAgdGhpcy5fZmlyZSgndXAnLCBHZXN0dXJlcy5fZmluZE9yaWdpbmFsVGFyZ2V0KGUpLCBlLmNoYW5nZWRUb3VjaGVzWzBdLCBlKTsKICAgIH0sCiAgICAvKioKICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlCiAgICAgKiBAcGFyYW0geyFFdmVudFRhcmdldH0gdGFyZ2V0CiAgICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudAogICAgICogQHBhcmFtIHtGdW5jdGlvbn0gcHJldmVudGVyCiAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICovCiAgICBfZmlyZTogZnVuY3Rpb24odHlwZSwgdGFyZ2V0LCBldmVudCwgcHJldmVudGVyKSB7CiAgICAgIEdlc3R1cmVzLl9maXJlKHRhcmdldCwgdHlwZSwgewogICAgICAgIHg6IGV2ZW50LmNsaWVudFgsCiAgICAgICAgeTogZXZlbnQuY2xpZW50WSwKICAgICAgICBzb3VyY2VFdmVudDogZXZlbnQsCiAgICAgICAgcHJldmVudGVyOiBwcmV2ZW50ZXIsCiAgICAgICAgcHJldmVudDogZnVuY3Rpb24oZSkgewogICAgICAgICAgcmV0dXJuIEdlc3R1cmVzLnByZXZlbnQoZSk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0KICB9KTsKCiAgR2VzdHVyZXMucmVnaXN0ZXIoewogICAgbmFtZTogJ3RyYWNrJywKICAgIHRvdWNoQWN0aW9uOiAnbm9uZScsCiAgICBkZXBzOiBbJ21vdXNlZG93bicsICd0b3VjaHN0YXJ0JywgJ3RvdWNobW92ZScsICd0b3VjaGVuZCddLAogICAgZmxvdzogewogICAgICBzdGFydDogWydtb3VzZWRvd24nLCAndG91Y2hzdGFydCddLAogICAgICBlbmQ6IFsnbW91c2V1cCcsICd0b3VjaGVuZCddCiAgICB9LAogICAgZW1pdHM6IFsndHJhY2snXSwKCiAgICBpbmZvOiB7CiAgICAgIHg6IDAsCiAgICAgIHk6IDAsCiAgICAgIHN0YXRlOiAnc3RhcnQnLAogICAgICBzdGFydGVkOiBmYWxzZSwKICAgICAgbW92ZXM6IFtdLAogICAgICAvKiogQHRoaXMge0dlc3R1cmVSZWNvZ25pemVyfSAqLwogICAgICBhZGRNb3ZlOiBmdW5jdGlvbihtb3ZlKSB7CiAgICAgICAgaWYgKHRoaXMubW92ZXMubGVuZ3RoID4gVFJBQ0tfTEVOR1RIKSB7CiAgICAgICAgICB0aGlzLm1vdmVzLnNoaWZ0KCk7CiAgICAgICAgfQogICAgICAgIHRoaXMubW92ZXMucHVzaChtb3ZlKTsKICAgICAgfSwKICAgICAgbW92ZWZuOiBudWxsLAogICAgICB1cGZuOiBudWxsLAogICAgICBwcmV2ZW50OiBmYWxzZQogICAgfSwKCiAgICAvKioKICAgICAqIEB0aGlzIHtHZXN0dXJlUmVjb2duaXplcn0KICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgKi8KICAgIHJlc2V0OiBmdW5jdGlvbigpIHsKICAgICAgdGhpcy5pbmZvLnN0YXRlID0gJ3N0YXJ0JzsKICAgICAgdGhpcy5pbmZvLnN0YXJ0ZWQgPSBmYWxzZTsKICAgICAgdGhpcy5pbmZvLm1vdmVzID0gW107CiAgICAgIHRoaXMuaW5mby54ID0gMDsKICAgICAgdGhpcy5pbmZvLnkgPSAwOwogICAgICB0aGlzLmluZm8ucHJldmVudCA9IGZhbHNlOwogICAgICB1bnRyYWNrRG9jdW1lbnQodGhpcy5pbmZvKTsKICAgIH0sCgogICAgLyoqCiAgICAgKiBAdGhpcyB7R2VzdHVyZVJlY29nbml6ZXJ9CiAgICAgKiBAcGFyYW0ge251bWJlcn0geAogICAgICogQHBhcmFtIHtudW1iZXJ9IHkKICAgICAqIEByZXR1cm4ge2Jvb2xlYW59CiAgICAgKi8KICAgIGhhc01vdmVkRW5vdWdoOiBmdW5jdGlvbih4LCB5KSB7CiAgICAgIGlmICh0aGlzLmluZm8ucHJldmVudCkgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgICBpZiAodGhpcy5pbmZvLnN0YXJ0ZWQpIHsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgICBsZXQgZHggPSBNYXRoLmFicyh0aGlzLmluZm8ueCAtIHgpOwogICAgICBsZXQgZHkgPSBNYXRoLmFicyh0aGlzLmluZm8ueSAtIHkpOwogICAgICByZXR1cm4gKGR4ID49IFRSQUNLX0RJU1RBTkNFIHx8IGR5ID49IFRSQUNLX0RJU1RBTkNFKTsKICAgIH0sCiAgICAvKioKICAgICAqIEB0aGlzIHtHZXN0dXJlUmVjb2duaXplcn0KICAgICAqIEBwYXJhbSB7TW91c2VFdmVudH0gZQogICAgICogQHJldHVybiB7dm9pZH0KICAgICAqLwogICAgbW91c2Vkb3duOiBmdW5jdGlvbihlKSB7CiAgICAgIGlmICghaGFzTGVmdE1vdXNlQnV0dG9uKGUpKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGxldCB0ID0gR2VzdHVyZXMuX2ZpbmRPcmlnaW5hbFRhcmdldChlKTsKICAgICAgbGV0IHNlbGYgPSB0aGlzOwogICAgICBsZXQgbW92ZWZuID0gZnVuY3Rpb24gbW92ZWZuKGUpIHsKICAgICAgICBsZXQgeCA9IGUuY2xpZW50WCwgeSA9IGUuY2xpZW50WTsKICAgICAgICBpZiAoc2VsZi5oYXNNb3ZlZEVub3VnaCh4LCB5KSkgewogICAgICAgICAgLy8gZmlyc3QgbW92ZSBpcyAnc3RhcnQnLCBzdWJzZXF1ZW50IG1vdmVzIGFyZSAnbW92ZScsIG1vdXNldXAgaXMgJ2VuZCcKICAgICAgICAgIHNlbGYuaW5mby5zdGF0ZSA9IHNlbGYuaW5mby5zdGFydGVkID8gKGUudHlwZSA9PT0gJ21vdXNldXAnID8gJ2VuZCcgOiAndHJhY2snKSA6ICdzdGFydCc7CiAgICAgICAgICBpZiAoc2VsZi5pbmZvLnN0YXRlID09PSAnc3RhcnQnKSB7CiAgICAgICAgICAgIC8vIGlmIGFuZCBvbmx5IGlmIHRyYWNraW5nLCBhbHdheXMgcHJldmVudCB0YXAKICAgICAgICAgICAgR2VzdHVyZXMucHJldmVudCgndGFwJyk7CiAgICAgICAgICB9CiAgICAgICAgICBzZWxmLmluZm8uYWRkTW92ZSh7eDogeCwgeTogeX0pOwogICAgICAgICAgaWYgKCFoYXNMZWZ0TW91c2VCdXR0b24oZSkpIHsKICAgICAgICAgICAgLy8gYWx3YXlzIF9maXJlICJlbmQiCiAgICAgICAgICAgIHNlbGYuaW5mby5zdGF0ZSA9ICdlbmQnOwogICAgICAgICAgICB1bnRyYWNrRG9jdW1lbnQoc2VsZi5pbmZvKTsKICAgICAgICAgIH0KICAgICAgICAgIHNlbGYuX2ZpcmUodCwgZSk7CiAgICAgICAgICBzZWxmLmluZm8uc3RhcnRlZCA9IHRydWU7CiAgICAgICAgfQogICAgICB9OwogICAgICBsZXQgdXBmbiA9IGZ1bmN0aW9uIHVwZm4oZSkgewogICAgICAgIGlmIChzZWxmLmluZm8uc3RhcnRlZCkgewogICAgICAgICAgbW92ZWZuKGUpOwogICAgICAgIH0KCiAgICAgICAgLy8gcmVtb3ZlIHRoZSB0ZW1wb3JhcnkgbGlzdGVuZXJzCiAgICAgICAgdW50cmFja0RvY3VtZW50KHNlbGYuaW5mbyk7CiAgICAgIH07CiAgICAgIC8vIGFkZCB0ZW1wb3JhcnkgZG9jdW1lbnQgbGlzdGVuZXJzIGFzIG1vdXNlIHJldGFyZ2V0cwogICAgICB0cmFja0RvY3VtZW50KHRoaXMuaW5mbywgbW92ZWZuLCB1cGZuKTsKICAgICAgdGhpcy5pbmZvLnggPSBlLmNsaWVudFg7CiAgICAgIHRoaXMuaW5mby55ID0gZS5jbGllbnRZOwogICAgfSwKICAgIC8qKgogICAgICogQHRoaXMge0dlc3R1cmVSZWNvZ25pemVyfQogICAgICogQHBhcmFtIHtUb3VjaEV2ZW50fSBlCiAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICovCiAgICB0b3VjaHN0YXJ0OiBmdW5jdGlvbihlKSB7CiAgICAgIGxldCBjdCA9IGUuY2hhbmdlZFRvdWNoZXNbMF07CiAgICAgIHRoaXMuaW5mby54ID0gY3QuY2xpZW50WDsKICAgICAgdGhpcy5pbmZvLnkgPSBjdC5jbGllbnRZOwogICAgfSwKICAgIC8qKgogICAgICogQHRoaXMge0dlc3R1cmVSZWNvZ25pemVyfQogICAgICogQHBhcmFtIHtUb3VjaEV2ZW50fSBlCiAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICovCiAgICB0b3VjaG1vdmU6IGZ1bmN0aW9uKGUpIHsKICAgICAgbGV0IHQgPSBHZXN0dXJlcy5fZmluZE9yaWdpbmFsVGFyZ2V0KGUpOwogICAgICBsZXQgY3QgPSBlLmNoYW5nZWRUb3VjaGVzWzBdOwogICAgICBsZXQgeCA9IGN0LmNsaWVudFgsIHkgPSBjdC5jbGllbnRZOwogICAgICBpZiAodGhpcy5oYXNNb3ZlZEVub3VnaCh4LCB5KSkgewogICAgICAgIGlmICh0aGlzLmluZm8uc3RhdGUgPT09ICdzdGFydCcpIHsKICAgICAgICAgIC8vIGlmIGFuZCBvbmx5IGlmIHRyYWNraW5nLCBhbHdheXMgcHJldmVudCB0YXAKICAgICAgICAgIEdlc3R1cmVzLnByZXZlbnQoJ3RhcCcpOwogICAgICAgIH0KICAgICAgICB0aGlzLmluZm8uYWRkTW92ZSh7eDogeCwgeTogeX0pOwogICAgICAgIHRoaXMuX2ZpcmUodCwgY3QpOwogICAgICAgIHRoaXMuaW5mby5zdGF0ZSA9ICd0cmFjayc7CiAgICAgICAgdGhpcy5pbmZvLnN0YXJ0ZWQgPSB0cnVlOwogICAgICB9CiAgICB9LAogICAgLyoqCiAgICAgKiBAdGhpcyB7R2VzdHVyZVJlY29nbml6ZXJ9CiAgICAgKiBAcGFyYW0ge1RvdWNoRXZlbnR9IGUKICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgKi8KICAgIHRvdWNoZW5kOiBmdW5jdGlvbihlKSB7CiAgICAgIGxldCB0ID0gR2VzdHVyZXMuX2ZpbmRPcmlnaW5hbFRhcmdldChlKTsKICAgICAgbGV0IGN0ID0gZS5jaGFuZ2VkVG91Y2hlc1swXTsKICAgICAgLy8gb25seSB0cmFja2VuZCBpZiB0cmFjayB3YXMgc3RhcnRlZCBhbmQgbm90IGFib3J0ZWQKICAgICAgaWYgKHRoaXMuaW5mby5zdGFydGVkKSB7CiAgICAgICAgLy8gcmVzZXQgc3RhcnRlZCBzdGF0ZSBvbiB1cAogICAgICAgIHRoaXMuaW5mby5zdGF0ZSA9ICdlbmQnOwogICAgICAgIHRoaXMuaW5mby5hZGRNb3ZlKHt4OiBjdC5jbGllbnRYLCB5OiBjdC5jbGllbnRZfSk7CiAgICAgICAgdGhpcy5fZmlyZSh0LCBjdCwgZSk7CiAgICAgIH0KICAgIH0sCgogICAgLyoqCiAgICAgKiBAdGhpcyB7R2VzdHVyZVJlY29nbml6ZXJ9CiAgICAgKiBAcGFyYW0geyFFdmVudFRhcmdldH0gdGFyZ2V0CiAgICAgKiBAcGFyYW0ge1RvdWNofSB0b3VjaAogICAgICogQHJldHVybiB7dm9pZH0KICAgICAqLwogICAgX2ZpcmU6IGZ1bmN0aW9uKHRhcmdldCwgdG91Y2gpIHsKICAgICAgbGV0IHNlY29uZGxhc3QgPSB0aGlzLmluZm8ubW92ZXNbdGhpcy5pbmZvLm1vdmVzLmxlbmd0aCAtIDJdOwogICAgICBsZXQgbGFzdG1vdmUgPSB0aGlzLmluZm8ubW92ZXNbdGhpcy5pbmZvLm1vdmVzLmxlbmd0aCAtIDFdOwogICAgICBsZXQgZHggPSBsYXN0bW92ZS54IC0gdGhpcy5pbmZvLng7CiAgICAgIGxldCBkeSA9IGxhc3Rtb3ZlLnkgLSB0aGlzLmluZm8ueTsKICAgICAgbGV0IGRkeCwgZGR5ID0gMDsKICAgICAgaWYgKHNlY29uZGxhc3QpIHsKICAgICAgICBkZHggPSBsYXN0bW92ZS54IC0gc2Vjb25kbGFzdC54OwogICAgICAgIGRkeSA9IGxhc3Rtb3ZlLnkgLSBzZWNvbmRsYXN0Lnk7CiAgICAgIH0KICAgICAgR2VzdHVyZXMuX2ZpcmUodGFyZ2V0LCAndHJhY2snLCB7CiAgICAgICAgc3RhdGU6IHRoaXMuaW5mby5zdGF0ZSwKICAgICAgICB4OiB0b3VjaC5jbGllbnRYLAogICAgICAgIHk6IHRvdWNoLmNsaWVudFksCiAgICAgICAgZHg6IGR4LAogICAgICAgIGR5OiBkeSwKICAgICAgICBkZHg6IGRkeCwKICAgICAgICBkZHk6IGRkeSwKICAgICAgICBzb3VyY2VFdmVudDogdG91Y2gsCiAgICAgICAgaG92ZXI6IGZ1bmN0aW9uKCkgewogICAgICAgICAgcmV0dXJuIEdlc3R1cmVzLmRlZXBUYXJnZXRGaW5kKHRvdWNoLmNsaWVudFgsIHRvdWNoLmNsaWVudFkpOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9CgogIH0pOwoKICBHZXN0dXJlcy5yZWdpc3Rlcih7CiAgICBuYW1lOiAndGFwJywKICAgIGRlcHM6IFsnbW91c2Vkb3duJywgJ2NsaWNrJywgJ3RvdWNoc3RhcnQnLCAndG91Y2hlbmQnXSwKICAgIGZsb3c6IHsKICAgICAgc3RhcnQ6IFsnbW91c2Vkb3duJywgJ3RvdWNoc3RhcnQnXSwKICAgICAgZW5kOiBbJ2NsaWNrJywgJ3RvdWNoZW5kJ10KICAgIH0sCiAgICBlbWl0czogWyd0YXAnXSwKICAgIGluZm86IHsKICAgICAgeDogTmFOLAogICAgICB5OiBOYU4sCiAgICAgIHByZXZlbnQ6IGZhbHNlCiAgICB9LAogICAgLyoqCiAgICAgKiBAdGhpcyB7R2VzdHVyZVJlY29nbml6ZXJ9CiAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICovCiAgICByZXNldDogZnVuY3Rpb24oKSB7CiAgICAgIHRoaXMuaW5mby54ID0gTmFOOwogICAgICB0aGlzLmluZm8ueSA9IE5hTjsKICAgICAgdGhpcy5pbmZvLnByZXZlbnQgPSBmYWxzZTsKICAgIH0sCiAgICAvKioKICAgICAqIEB0aGlzIHtHZXN0dXJlUmVjb2duaXplcn0KICAgICAqIEBwYXJhbSB7TW91c2VFdmVudH0gZQogICAgICogQHJldHVybiB7dm9pZH0KICAgICAqLwogICAgc2F2ZTogZnVuY3Rpb24oZSkgewogICAgICB0aGlzLmluZm8ueCA9IGUuY2xpZW50WDsKICAgICAgdGhpcy5pbmZvLnkgPSBlLmNsaWVudFk7CiAgICB9LAogICAgLyoqCiAgICAgKiBAdGhpcyB7R2VzdHVyZVJlY29nbml6ZXJ9CiAgICAgKiBAcGFyYW0ge01vdXNlRXZlbnR9IGUKICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgKi8KICAgIG1vdXNlZG93bjogZnVuY3Rpb24oZSkgewogICAgICBpZiAoaGFzTGVmdE1vdXNlQnV0dG9uKGUpKSB7CiAgICAgICAgdGhpcy5zYXZlKGUpOwogICAgICB9CiAgICB9LAogICAgLyoqCiAgICAgKiBAdGhpcyB7R2VzdHVyZVJlY29nbml6ZXJ9CiAgICAgKiBAcGFyYW0ge01vdXNlRXZlbnR9IGUKICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgKi8KICAgIGNsaWNrOiBmdW5jdGlvbihlKSB7CiAgICAgIGlmIChoYXNMZWZ0TW91c2VCdXR0b24oZSkpIHsKICAgICAgICB0aGlzLmZvcndhcmQoZSk7CiAgICAgIH0KICAgIH0sCiAgICAvKioKICAgICAqIEB0aGlzIHtHZXN0dXJlUmVjb2duaXplcn0KICAgICAqIEBwYXJhbSB7VG91Y2hFdmVudH0gZQogICAgICogQHJldHVybiB7dm9pZH0KICAgICAqLwogICAgdG91Y2hzdGFydDogZnVuY3Rpb24oZSkgewogICAgICB0aGlzLnNhdmUoZS5jaGFuZ2VkVG91Y2hlc1swXSwgZSk7CiAgICB9LAogICAgLyoqCiAgICAgKiBAdGhpcyB7R2VzdHVyZVJlY29nbml6ZXJ9CiAgICAgKiBAcGFyYW0ge1RvdWNoRXZlbnR9IGUKICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgKi8KICAgIHRvdWNoZW5kOiBmdW5jdGlvbihlKSB7CiAgICAgIHRoaXMuZm9yd2FyZChlLmNoYW5nZWRUb3VjaGVzWzBdLCBlKTsKICAgIH0sCiAgICAvKioKICAgICAqIEB0aGlzIHtHZXN0dXJlUmVjb2duaXplcn0KICAgICAqIEBwYXJhbSB7RXZlbnQgfCBUb3VjaH0gZQogICAgICogQHBhcmFtIHtFdmVudD19IHByZXZlbnRlcgogICAgICogQHJldHVybiB7dm9pZH0KICAgICAqLwogICAgZm9yd2FyZDogZnVuY3Rpb24oZSwgcHJldmVudGVyKSB7CiAgICAgIGxldCBkeCA9IE1hdGguYWJzKGUuY2xpZW50WCAtIHRoaXMuaW5mby54KTsKICAgICAgbGV0IGR5ID0gTWF0aC5hYnMoZS5jbGllbnRZIC0gdGhpcy5pbmZvLnkpOwogICAgICAvLyBmaW5kIG9yaWdpbmFsIHRhcmdldCBmcm9tIGBwcmV2ZW50ZXJgIGZvciBUb3VjaEV2ZW50cywgb3IgYGVgIGZvciBNb3VzZUV2ZW50cwogICAgICBsZXQgdCA9IEdlc3R1cmVzLl9maW5kT3JpZ2luYWxUYXJnZXQoLyoqIEB0eXBlIHtFdmVudH0gKi8ocHJldmVudGVyIHx8IGUpKTsKICAgICAgaWYgKCF0IHx8IChjYW5CZURpc2FibGVkWy8qKiBAdHlwZSB7IUhUTUxFbGVtZW50fSAqLyh0KS5sb2NhbE5hbWVdICYmIHQuaGFzQXR0cmlidXRlKCdkaXNhYmxlZCcpKSkgewogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICAvLyBkeCxkeSBjYW4gYmUgTmFOIGlmIGBjbGlja2AgaGFzIGJlZW4gc2ltdWxhdGVkIGFuZCB0aGVyZSB3YXMgbm8gYGRvd25gIGZvciBgc3RhcnRgCiAgICAgIGlmIChpc05hTihkeCkgfHwgaXNOYU4oZHkpIHx8IChkeCA8PSBUQVBfRElTVEFOQ0UgJiYgZHkgPD0gVEFQX0RJU1RBTkNFKSB8fCBpc1N5bnRoZXRpY0NsaWNrKGUpKSB7CiAgICAgICAgLy8gcHJldmVudCB0YXBzIGZyb20gYmVpbmcgZ2VuZXJhdGVkIGlmIGFuIGV2ZW50IGhhcyBjYW5jZWxlZCB0aGVtCiAgICAgICAgaWYgKCF0aGlzLmluZm8ucHJldmVudCkgewogICAgICAgICAgR2VzdHVyZXMuX2ZpcmUodCwgJ3RhcCcsIHsKICAgICAgICAgICAgeDogZS5jbGllbnRYLAogICAgICAgICAgICB5OiBlLmNsaWVudFksCiAgICAgICAgICAgIHNvdXJjZUV2ZW50OiBlLAogICAgICAgICAgICBwcmV2ZW50ZXI6IHByZXZlbnRlcgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfSk7CgogIC8qIGVzbGludC1lbmFibGUgdmFsaWQtanNkb2MgKi8KCiAgLyoqIEBkZXByZWNhdGVkICovCiAgR2VzdHVyZXMuZmluZE9yaWdpbmFsVGFyZ2V0ID0gR2VzdHVyZXMuX2ZpbmRPcmlnaW5hbFRhcmdldDsKCiAgLyoqIEBkZXByZWNhdGVkICovCiAgR2VzdHVyZXMuYWRkID0gR2VzdHVyZXMuYWRkTGlzdGVuZXI7CgogIC8qKiBAZGVwcmVjYXRlZCAqLwogIEdlc3R1cmVzLnJlbW92ZSA9IEdlc3R1cmVzLnJlbW92ZUxpc3RlbmVyOwoKICBQb2x5bWVyLkdlc3R1cmVzID0gR2VzdHVyZXM7Cgp9KSgpOwo8L3NjcmlwdD48c2NyaXB0PgooZnVuY3Rpb24oKSB7CgogICd1c2Ugc3RyaWN0JzsKCiAgLyoqCiAgICogQGNvbnN0IHtQb2x5bWVyLkdlc3R1cmVzfQogICAqLwogIGNvbnN0IGdlc3R1cmVzID0gUG9seW1lci5HZXN0dXJlczsKCiAgLyoqCiAgICogRWxlbWVudCBjbGFzcyBtaXhpbiB0aGF0IHByb3ZpZGVzIEFQSSBmb3IgYWRkaW5nIFBvbHltZXIncyBjcm9zcy1wbGF0Zm9ybQogICAqIGdlc3R1cmUgZXZlbnRzIHRvIG5vZGVzLgogICAqCiAgICogVGhlIEFQSSBpcyBkZXNpZ25lZCB0byBiZSBjb21wYXRpYmxlIHdpdGggb3ZlcnJpZGUgcG9pbnRzIGltcGxlbWVudGVkCiAgICogaW4gYFBvbHltZXIuVGVtcGxhdGVTdGFtcGAgc3VjaCB0aGF0IGRlY2xhcmF0aXZlIGV2ZW50IGxpc3RlbmVycyBpbgogICAqIHRlbXBsYXRlcyB3aWxsIHN1cHBvcnQgZ2VzdHVyZSBldmVudHMgd2hlbiB0aGlzIG1peGluIGlzIGFwcGxpZWQgYWxvbmcgd2l0aAogICAqIGBQb2x5bWVyLlRlbXBsYXRlU3RhbXBgLgogICAqCiAgICogQG1peGluRnVuY3Rpb24KICAgKiBAcG9seW1lcgogICAqIEBtZW1iZXJvZiBQb2x5bWVyCiAgICogQHN1bW1hcnkgRWxlbWVudCBjbGFzcyBtaXhpbiB0aGF0IHByb3ZpZGVzIEFQSSBmb3IgYWRkaW5nIFBvbHltZXIncyBjcm9zcy1wbGF0Zm9ybQogICAqIGdlc3R1cmUgZXZlbnRzIHRvIG5vZGVzCiAgICovCiAgUG9seW1lci5HZXN0dXJlRXZlbnRMaXN0ZW5lcnMgPSBQb2x5bWVyLmRlZHVwaW5nTWl4aW4oc3VwZXJDbGFzcyA9PiB7CgogICAgLyoqCiAgICAgKiBAcG9seW1lcgogICAgICogQG1peGluQ2xhc3MKICAgICAqIEBpbXBsZW1lbnRzIHtQb2x5bWVyX0dlc3R1cmVFdmVudExpc3RlbmVyc30KICAgICAqLwogICAgY2xhc3MgR2VzdHVyZUV2ZW50TGlzdGVuZXJzIGV4dGVuZHMgc3VwZXJDbGFzcyB7CgogICAgICAvKioKICAgICAgICogQWRkIHRoZSBldmVudCBsaXN0ZW5lciB0byB0aGUgbm9kZSBpZiBpdCBpcyBhIGdlc3R1cmVzIGV2ZW50LgogICAgICAgKgogICAgICAgKiBAcGFyYW0geyFOb2RlfSBub2RlIE5vZGUgdG8gYWRkIGV2ZW50IGxpc3RlbmVyIHRvCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudE5hbWUgTmFtZSBvZiBldmVudAogICAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKCFFdmVudCk6dm9pZH0gaGFuZGxlciBMaXN0ZW5lciBmdW5jdGlvbiB0byBhZGQKICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICovCiAgICAgIF9hZGRFdmVudExpc3RlbmVyVG9Ob2RlKG5vZGUsIGV2ZW50TmFtZSwgaGFuZGxlcikgewogICAgICAgIGlmICghZ2VzdHVyZXMuYWRkTGlzdGVuZXIobm9kZSwgZXZlbnROYW1lLCBoYW5kbGVyKSkgewogICAgICAgICAgc3VwZXIuX2FkZEV2ZW50TGlzdGVuZXJUb05vZGUobm9kZSwgZXZlbnROYW1lLCBoYW5kbGVyKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBSZW1vdmUgdGhlIGV2ZW50IGxpc3RlbmVyIHRvIHRoZSBub2RlIGlmIGl0IGlzIGEgZ2VzdHVyZXMgZXZlbnQuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7IU5vZGV9IG5vZGUgTm9kZSB0byByZW1vdmUgZXZlbnQgbGlzdGVuZXIgZnJvbQogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnROYW1lIE5hbWUgb2YgZXZlbnQKICAgICAgICogQHBhcmFtIHtmdW5jdGlvbighRXZlbnQpOnZvaWR9IGhhbmRsZXIgTGlzdGVuZXIgZnVuY3Rpb24gdG8gcmVtb3ZlCiAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAqLwogICAgICBfcmVtb3ZlRXZlbnRMaXN0ZW5lckZyb21Ob2RlKG5vZGUsIGV2ZW50TmFtZSwgaGFuZGxlcikgewogICAgICAgIGlmICghZ2VzdHVyZXMucmVtb3ZlTGlzdGVuZXIobm9kZSwgZXZlbnROYW1lLCBoYW5kbGVyKSkgewogICAgICAgICAgc3VwZXIuX3JlbW92ZUV2ZW50TGlzdGVuZXJGcm9tTm9kZShub2RlLCBldmVudE5hbWUsIGhhbmRsZXIpOwogICAgICAgIH0KICAgICAgfQoKICAgIH0KCiAgICByZXR1cm4gR2VzdHVyZUV2ZW50TGlzdGVuZXJzOwoKICB9KTsKCn0pKCk7Cjwvc2NyaXB0PjxzY3JpcHQ+CiAgKGZ1bmN0aW9uKCkgewogICAgJ3VzZSBzdHJpY3QnOwoKICAgIGNvbnN0IEhPU1RfRElSID0gLzpob3N0XCg6ZGlyXCgobHRyfHJ0bClcKVwpL2c7CiAgICBjb25zdCBIT1NUX0RJUl9SRVBMQUNNRU5UID0gJzpob3N0KFtkaXI9IiQxIl0pJzsKCiAgICBjb25zdCBFTF9ESVIgPSAvKFtcc1x3LSNcLlxbXF1cKl0qKTpkaXJcKChsdHJ8cnRsKVwpL2c7CiAgICBjb25zdCBFTF9ESVJfUkVQTEFDTUVOVCA9ICc6aG9zdChbZGlyPSIkMiJdKSAkMSc7CgogICAgY29uc3QgRElSX0NIRUNLID0gLzpkaXJcKCg/Omx0cnxydGwpXCkvOwogICAgCiAgICBjb25zdCBTSElNX1NIQURPVyA9IEJvb2xlYW4od2luZG93WydTaGFkeURPTSddICYmIHdpbmRvd1snU2hhZHlET00nXVsnaW5Vc2UnXSk7CgogICAgLyoqCiAgICAgKiBAdHlwZSB7IUFycmF5PCFQb2x5bWVyX0Rpck1peGluPn0KICAgICAqLwogICAgY29uc3QgRElSX0lOU1RBTkNFUyA9IFtdOwoKICAgIC8qKiBAdHlwZSB7TXV0YXRpb25PYnNlcnZlcn0gKi8KICAgIGxldCBvYnNlcnZlciA9IG51bGw7CgogICAgbGV0IERPQ1VNRU5UX0RJUiA9ICcnOwoKICAgIGZ1bmN0aW9uIGdldFJUTCgpIHsKICAgICAgRE9DVU1FTlRfRElSID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmdldEF0dHJpYnV0ZSgnZGlyJyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0geyFQb2x5bWVyX0Rpck1peGlufSBpbnN0YW5jZSBJbnN0YW5jZSB0byBzZXQgUlRMIHN0YXR1cyBvbgogICAgICovCiAgICBmdW5jdGlvbiBzZXRSVEwoaW5zdGFuY2UpIHsKICAgICAgaWYgKCFpbnN0YW5jZS5fX2F1dG9EaXJPcHRPdXQpIHsKICAgICAgICBjb25zdCBlbCA9IC8qKiBAdHlwZSB7IUhUTUxFbGVtZW50fSAqLyhpbnN0YW5jZSk7CiAgICAgICAgZWwuc2V0QXR0cmlidXRlKCdkaXInLCBET0NVTUVOVF9ESVIpOwogICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gdXBkYXRlRGlyZWN0aW9uKCkgewogICAgICBnZXRSVEwoKTsKICAgICAgRE9DVU1FTlRfRElSID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmdldEF0dHJpYnV0ZSgnZGlyJyk7CiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgRElSX0lOU1RBTkNFUy5sZW5ndGg7IGkrKykgewogICAgICAgIHNldFJUTChESVJfSU5TVEFOQ0VTW2ldKTsKICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIHRha2VSZWNvcmRzKCkgewogICAgICBpZiAob2JzZXJ2ZXIgJiYgb2JzZXJ2ZXIudGFrZVJlY29yZHMoKS5sZW5ndGgpIHsKICAgICAgICB1cGRhdGVEaXJlY3Rpb24oKTsKICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogRWxlbWVudCBjbGFzcyBtaXhpbiB0aGF0IGFsbG93cyBlbGVtZW50cyB0byB1c2UgdGhlIGA6ZGlyYCBDU1MgU2VsZWN0b3IgdG8gaGF2ZQogICAgICogdGV4dCBkaXJlY3Rpb24gc3BlY2lmaWMgc3R5bGluZy4KICAgICAqCiAgICAgKiBXaXRoIHRoaXMgbWl4aW4sIGFueSBzdHlsZXNoZWV0IHByb3ZpZGVkIGluIHRoZSB0ZW1wbGF0ZSB3aWxsIHRyYW5zZm9ybSBgOmRpcmAgaW50bwogICAgICogYDpob3N0KFtkaXJdKWAgYW5kIHN5bmMgZGlyZWN0aW9uIHdpdGggdGhlIHBhZ2UgdmlhIHRoZSBlbGVtZW50J3MgYGRpcmAgYXR0cmlidXRlLgogICAgICoKICAgICAqIEVsZW1lbnRzIGNhbiBvcHQgb3V0IG9mIHRoZSBnbG9iYWwgcGFnZSB0ZXh0IGRpcmVjdGlvbiBieSBzZXR0aW5nIHRoZSBgZGlyYCBhdHRyaWJ1dGUKICAgICAqIGRpcmVjdGx5IGluIGByZWFkeSgpYCBvciBpbiBIVE1MLgogICAgICoKICAgICAqIENhdmVhdHM6CiAgICAgKiAtIEFwcGxpY2F0aW9ucyBtdXN0IHNldCBgPGh0bWwgZGlyPSJsdHIiPmAgb3IgYDxodG1sIGRpcj0icnRsIj5gIHRvIHN5bmMgZGlyZWN0aW9uCiAgICAgKiAtIEF1dG9tYXRpYyBsZWZ0LXRvLXJpZ2h0IG9yIHJpZ2h0LXRvLWxlZnQgc3R5bGluZyBpcyBzeW5jJ2Qgd2l0aCB0aGUgYDxodG1sPmAgZWxlbWVudCBvbmx5LgogICAgICogLSBDaGFuZ2luZyBgZGlyYCBhdCBydW50aW1lIGlzIHN1cHBvcnRlZC4KICAgICAqIC0gT3B0aW5nIG91dCBvZiB0aGUgZ2xvYmFsIGRpcmVjdGlvbiBzdHlsaW5nIGlzIHBlcm1hbmVudAogICAgICoKICAgICAqIEBtaXhpbkZ1bmN0aW9uCiAgICAgKiBAcG9seW1lcgogICAgICogQGFwcGxpZXNNaXhpbiBQb2x5bWVyLlByb3BlcnR5QWNjZXNzb3JzCiAgICAgKiBAbWVtYmVyb2YgUG9seW1lcgogICAgICovCiAgICBQb2x5bWVyLkRpck1peGluID0gUG9seW1lci5kZWR1cGluZ01peGluKChiYXNlKSA9PiB7CgogICAgICBpZiAoIVNISU1fU0hBRE9XKSB7CiAgICAgICAgaWYgKCFvYnNlcnZlcikgewogICAgICAgICAgZ2V0UlRMKCk7CiAgICAgICAgICBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKHVwZGF0ZURpcmVjdGlvbik7CiAgICAgICAgICBvYnNlcnZlci5vYnNlcnZlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwge2F0dHJpYnV0ZXM6IHRydWUsIGF0dHJpYnV0ZUZpbHRlcjogWydkaXInXX0pOwogICAgICAgIH0KICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIEBjb25zdHJ1Y3RvcgogICAgICAgKiBAZXh0ZW5kcyB7YmFzZX0KICAgICAgICogQGltcGxlbWVudHMge1BvbHltZXJfUHJvcGVydHlBY2Nlc3NvcnN9CiAgICAgICAqIEBwcml2YXRlCiAgICAgICAqLwogICAgICBjb25zdCBlbGVtZW50QmFzZSA9IFBvbHltZXIuUHJvcGVydHlBY2Nlc3NvcnMoYmFzZSk7CgogICAgICAvKioKICAgICAgICogQHBvbHltZXIKICAgICAgICogQG1peGluQ2xhc3MKICAgICAgICogQGltcGxlbWVudHMge1BvbHltZXJfRGlyTWl4aW59CiAgICAgICAqLwogICAgICBjbGFzcyBEaXIgZXh0ZW5kcyBlbGVtZW50QmFzZSB7CgogICAgICAgIC8qKgogICAgICAgICAqIEBvdmVycmlkZQogICAgICAgICAqIEBzdXBwcmVzcyB7bWlzc2luZ1Byb3BlcnRpZXN9IEludGVyZmFjZXMgaW4gY2xvc3VyZSBkbyBub3QgaW5oZXJpdCBzdGF0aWNzLCBidXQgY2xhc3NlcyBkbwogICAgICAgICAqLwogICAgICAgIHN0YXRpYyBfcHJvY2Vzc1N0eWxlVGV4dChjc3NUZXh0LCBiYXNlVVJJKSB7CiAgICAgICAgICBjc3NUZXh0ID0gc3VwZXIuX3Byb2Nlc3NTdHlsZVRleHQoY3NzVGV4dCwgYmFzZVVSSSk7CiAgICAgICAgICBpZiAoIVNISU1fU0hBRE9XICYmIERJUl9DSEVDSy50ZXN0KGNzc1RleHQpKSB7CiAgICAgICAgICAgIGNzc1RleHQgPSB0aGlzLl9yZXBsYWNlRGlySW5Dc3NUZXh0KGNzc1RleHQpOwogICAgICAgICAgICB0aGlzLl9fYWN0aXZhdGVEaXIgPSB0cnVlOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIGNzc1RleHQ7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBSZXBsYWNlIGA6ZGlyYCBpbiB0aGUgZ2l2ZW4gQ1NTIHRleHQKICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IENTUyB0ZXh0IHRvIHJlcGxhY2UgRElSCiAgICAgICAgICogQHJldHVybiB7c3RyaW5nfSBNb2RpZmllZCBDU1MKICAgICAgICAgKi8KICAgICAgICBzdGF0aWMgX3JlcGxhY2VEaXJJbkNzc1RleHQodGV4dCkgewogICAgICAgICAgbGV0IHJlcGxhY2VkVGV4dCA9IHRleHQ7CiAgICAgICAgICByZXBsYWNlZFRleHQgPSByZXBsYWNlZFRleHQucmVwbGFjZShIT1NUX0RJUiwgSE9TVF9ESVJfUkVQTEFDTUVOVCk7CiAgICAgICAgICByZXBsYWNlZFRleHQgPSByZXBsYWNlZFRleHQucmVwbGFjZShFTF9ESVIsIEVMX0RJUl9SRVBMQUNNRU5UKTsKICAgICAgICAgIHJldHVybiByZXBsYWNlZFRleHQ7CiAgICAgICAgfQoKICAgICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICAgIHN1cGVyKCk7CiAgICAgICAgICAvKiogQHR5cGUge2Jvb2xlYW59ICovCiAgICAgICAgICB0aGlzLl9fYXV0b0Rpck9wdE91dCA9IGZhbHNlOwogICAgICAgIH0KCiAgICAgICAgLyoqCiAgICAgICAgICogQHN1cHByZXNzIHtpbnZhbGlkQ2FzdHN9IENsb3N1cmUgZG9lc24ndCB1bmRlcnN0YW5kIHRoYXQgYHRoaXNgIGlzIGFuIEhUTUxFbGVtZW50CiAgICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICAgKi8KICAgICAgICByZWFkeSgpIHsKICAgICAgICAgIHN1cGVyLnJlYWR5KCk7CiAgICAgICAgICB0aGlzLl9fYXV0b0Rpck9wdE91dCA9IC8qKiBAdHlwZSB7IUhUTUxFbGVtZW50fSAqLyh0aGlzKS5oYXNBdHRyaWJ1dGUoJ2RpcicpOwogICAgICAgIH0KCiAgICAgICAgLyoqCiAgICAgICAgICogQHN1cHByZXNzIHttaXNzaW5nUHJvcGVydGllc30gSWYgaXQgZXhpc3RzIG9uIGVsZW1lbnRCYXNlLCBpdCBjYW4gYmUgc3VwZXInZAogICAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAgICovCiAgICAgICAgY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICAgICAgICBpZiAoZWxlbWVudEJhc2UucHJvdG90eXBlLmNvbm5lY3RlZENhbGxiYWNrKSB7CiAgICAgICAgICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAodGhpcy5jb25zdHJ1Y3Rvci5fX2FjdGl2YXRlRGlyKSB7CiAgICAgICAgICAgIHRha2VSZWNvcmRzKCk7CiAgICAgICAgICAgIERJUl9JTlNUQU5DRVMucHVzaCh0aGlzKTsKICAgICAgICAgICAgc2V0UlRMKHRoaXMpOwogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLyoqCiAgICAgICAgICogQHN1cHByZXNzIHttaXNzaW5nUHJvcGVydGllc30gSWYgaXQgZXhpc3RzIG9uIGVsZW1lbnRCYXNlLCBpdCBjYW4gYmUgc3VwZXInZAogICAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAgICovCiAgICAgICAgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICAgICAgICBpZiAoZWxlbWVudEJhc2UucHJvdG90eXBlLmRpc2Nvbm5lY3RlZENhbGxiYWNrKSB7CiAgICAgICAgICAgIHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAodGhpcy5jb25zdHJ1Y3Rvci5fX2FjdGl2YXRlRGlyKSB7CiAgICAgICAgICAgIGNvbnN0IGlkeCA9IERJUl9JTlNUQU5DRVMuaW5kZXhPZih0aGlzKTsKICAgICAgICAgICAgaWYgKGlkeCA+IC0xKSB7CiAgICAgICAgICAgICAgRElSX0lOU1RBTkNFUy5zcGxpY2UoaWR4LCAxKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQoKICAgICAgRGlyLl9fYWN0aXZhdGVEaXIgPSBmYWxzZTsKCiAgICAgIHJldHVybiBEaXI7CiAgICB9KTsKICB9KSgpOwo8L3NjcmlwdD48c2NyaXB0PgoKKGZ1bmN0aW9uKCkgewoKICAndXNlIHN0cmljdCc7CgogIC8vIHJ1biBhIGNhbGxiYWNrIHdoZW4gSFRNTEltcG9ydHMgYXJlIHJlYWR5IG9yIGltbWVkaWF0ZWx5IGlmCiAgLy8gdGhpcyBhcGkgaXMgbm90IGF2YWlsYWJsZS4KICBmdW5jdGlvbiB3aGVuSW1wb3J0c1JlYWR5KGNiKSB7CiAgICBpZiAod2luZG93LkhUTUxJbXBvcnRzKSB7CiAgICAgIEhUTUxJbXBvcnRzLndoZW5SZWFkeShjYik7CiAgICB9IGVsc2UgewogICAgICBjYigpOwogICAgfQogIH0KCiAgLyoqCiAgICogQ29udmVuaWVuY2UgbWV0aG9kIGZvciBpbXBvcnRpbmcgYW4gSFRNTCBkb2N1bWVudCBpbXBlcmF0aXZlbHkuCiAgICoKICAgKiBUaGlzIG1ldGhvZCBjcmVhdGVzIGEgbmV3IGA8bGluayByZWw9ImltcG9ydCI+YCBlbGVtZW50IHdpdGgKICAgKiB0aGUgcHJvdmlkZWQgVVJMIGFuZCBhcHBlbmRzIGl0IHRvIHRoZSBkb2N1bWVudCB0byBzdGFydCBsb2FkaW5nLgogICAqIEluIHRoZSBgb25sb2FkYCBjYWxsYmFjaywgdGhlIGBpbXBvcnRgIHByb3BlcnR5IG9mIHRoZSBgbGlua2AKICAgKiBlbGVtZW50IHdpbGwgY29udGFpbiB0aGUgaW1wb3J0ZWQgZG9jdW1lbnQgY29udGVudHMuCiAgICoKICAgKiBAbWVtYmVyb2YgUG9seW1lcgogICAqIEBwYXJhbSB7c3RyaW5nfSBocmVmIFVSTCB0byBkb2N1bWVudCB0byBsb2FkLgogICAqIEBwYXJhbSB7P2Z1bmN0aW9uKCFFdmVudCk6dm9pZD19IG9ubG9hZCBDYWxsYmFjayB0byBub3RpZnkgd2hlbiBhbiBpbXBvcnQgc3VjY2Vzc2Z1bGx5CiAgICogICBsb2FkZWQuCiAgICogQHBhcmFtIHs/ZnVuY3Rpb24oIUVycm9yRXZlbnQpOnZvaWQ9fSBvbmVycm9yIENhbGxiYWNrIHRvIG5vdGlmeSB3aGVuIGFuIGltcG9ydAogICAqICAgdW5zdWNjZXNzZnVsbHkgbG9hZGVkLgogICAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdEFzeW5jIFRydWUgaWYgdGhlIGltcG9ydCBzaG91bGQgYmUgbG9hZGVkIGBhc3luY2AuCiAgICogICBEZWZhdWx0cyB0byBgZmFsc2VgLgogICAqIEByZXR1cm4geyFIVE1MTGlua0VsZW1lbnR9IFRoZSBsaW5rIGVsZW1lbnQgZm9yIHRoZSBVUkwgdG8gYmUgbG9hZGVkLgogICAqLwogIFBvbHltZXIuaW1wb3J0SHJlZiA9IGZ1bmN0aW9uKGhyZWYsIG9ubG9hZCwgb25lcnJvciwgb3B0QXN5bmMpIHsKICAgIGxldCBsaW5rID0gLyoqIEB0eXBlIHtIVE1MTGlua0VsZW1lbnR9ICovCiAgICAgIChkb2N1bWVudC5oZWFkLnF1ZXJ5U2VsZWN0b3IoJ2xpbmtbaHJlZj0iJyArIGhyZWYgKyAnIl1baW1wb3J0LWhyZWZdJykpOwogICAgaWYgKCFsaW5rKSB7CiAgICAgIGxpbmsgPSAvKiogQHR5cGUge0hUTUxMaW5rRWxlbWVudH0gKi8gKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xpbmsnKSk7CiAgICAgIGxpbmsucmVsID0gJ2ltcG9ydCc7CiAgICAgIGxpbmsuaHJlZiA9IGhyZWY7CiAgICAgIGxpbmsuc2V0QXR0cmlidXRlKCdpbXBvcnQtaHJlZicsICcnKTsKICAgIH0KICAgIC8vIGFsd2F5cyBlbnN1cmUgbGluayBoYXMgYGFzeW5jYCBhdHRyaWJ1dGUgaWYgdXNlciBzcGVjaWZpZWQgb25lLAogICAgLy8gZXZlbiBpZiBpdCB3YXMgcHJldmlvdXNseSBub3QgYXN5bmMuIFRoaXMgaXMgY29uc2lkZXJlZCBsZXNzIGNvbmZ1c2luZy4KICAgIGlmIChvcHRBc3luYykgewogICAgICBsaW5rLnNldEF0dHJpYnV0ZSgnYXN5bmMnLCAnJyk7CiAgICB9CiAgICAvLyBOT1RFOiB0aGUgbGluayBtYXkgbm93IGJlIGluIDMgc3RhdGVzOiAoMSkgcGVuZGluZyBpbnNlcnRpb24sCiAgICAvLyAoMikgaW5mbGlnaHQsICgzKSBhbHJlYWR5IGxvYWRlZC4gSW4gZWFjaCBjYXNlLCB3ZSBuZWVkIHRvIGFkZAogICAgLy8gZXZlbnQgbGlzdGVuZXJzIHRvIHByb2Nlc3MgY2FsbGJhY2tzLgogICAgbGV0IGNsZWFudXAgPSBmdW5jdGlvbigpIHsKICAgICAgbGluay5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkJywgbG9hZExpc3RlbmVyKTsKICAgICAgbGluay5yZW1vdmVFdmVudExpc3RlbmVyKCdlcnJvcicsIGVycm9yTGlzdGVuZXIpOwogICAgfTsKICAgIGxldCBsb2FkTGlzdGVuZXIgPSBmdW5jdGlvbihldmVudCkgewogICAgICBjbGVhbnVwKCk7CiAgICAgIC8vIEluIGNhc2Ugb2YgYSBzdWNjZXNzZnVsIGxvYWQsIGNhY2hlIHRoZSBsb2FkIGV2ZW50IG9uIHRoZSBsaW5rIHNvCiAgICAgIC8vIHRoYXQgaXQgY2FuIGJlIHVzZWQgdG8gc2hvcnQtY2lyY3VpdCB0aGlzIG1ldGhvZCBpbiB0aGUgZnV0dXJlIHdoZW4KICAgICAgLy8gaXQgaXMgY2FsbGVkIHdpdGggdGhlIHNhbWUgaHJlZiBwYXJhbS4KICAgICAgbGluay5fX2R5bmFtaWNJbXBvcnRMb2FkZWQgPSB0cnVlOwogICAgICBpZiAob25sb2FkKSB7CiAgICAgICAgd2hlbkltcG9ydHNSZWFkeSgoKSA9PiB7CiAgICAgICAgICBvbmxvYWQoZXZlbnQpOwogICAgICAgIH0pOwogICAgICB9CiAgICB9OwogICAgbGV0IGVycm9yTGlzdGVuZXIgPSBmdW5jdGlvbihldmVudCkgewogICAgICBjbGVhbnVwKCk7CiAgICAgIC8vIEluIGNhc2Ugb2YgYW4gZXJyb3IsIHJlbW92ZSB0aGUgbGluayBmcm9tIHRoZSBkb2N1bWVudCBzbyB0aGF0IGl0CiAgICAgIC8vIHdpbGwgYmUgYXV0b21hdGljYWxseSBjcmVhdGVkIGFnYWluIHRoZSBuZXh0IHRpbWUgYGltcG9ydEhyZWZgIGlzCiAgICAgIC8vIGNhbGxlZC4KICAgICAgaWYgKGxpbmsucGFyZW50Tm9kZSkgewogICAgICAgIGxpbmsucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChsaW5rKTsKICAgICAgfQogICAgICBpZiAob25lcnJvcikgewogICAgICAgIHdoZW5JbXBvcnRzUmVhZHkoKCkgPT4gewogICAgICAgICAgb25lcnJvcihldmVudCk7CiAgICAgICAgfSk7CiAgICAgIH0KICAgIH07CiAgICBsaW5rLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBsb2FkTGlzdGVuZXIpOwogICAgbGluay5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIGVycm9yTGlzdGVuZXIpOwogICAgaWYgKGxpbmsucGFyZW50Tm9kZSA9PSBudWxsKSB7CiAgICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQobGluayk7CiAgICAvLyBpZiB0aGUgbGluayBhbHJlYWR5IGxvYWRlZCwgZGlzcGF0Y2ggYSBmYWtlIGxvYWQgZXZlbnQKICAgIC8vIHNvIHRoYXQgbGlzdGVuZXJzIGFyZSBjYWxsZWQgYW5kIGdldCBhIHByb3BlciBldmVudCBhcmd1bWVudC4KICAgIH0gZWxzZSBpZiAobGluay5fX2R5bmFtaWNJbXBvcnRMb2FkZWQpIHsKICAgICAgbGluay5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgnbG9hZCcpKTsKICAgIH0KICAgIHJldHVybiBsaW5rOwogIH07Cgp9KSgpOwo8L3NjcmlwdD48c2NyaXB0PgooZnVuY3Rpb24oKSB7CgogICd1c2Ugc3RyaWN0JzsKCiAgbGV0IHNjaGVkdWxlZCA9IGZhbHNlOwogIGxldCBiZWZvcmVSZW5kZXJRdWV1ZSA9IFtdOwogIGxldCBhZnRlclJlbmRlclF1ZXVlID0gW107CgogIGZ1bmN0aW9uIHNjaGVkdWxlKCkgewogICAgc2NoZWR1bGVkID0gdHJ1ZTsKICAgIC8vIGJlZm9yZSBuZXh0IHJlbmRlcgogICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uKCkgewogICAgICBzY2hlZHVsZWQgPSBmYWxzZTsKICAgICAgZmx1c2hRdWV1ZShiZWZvcmVSZW5kZXJRdWV1ZSk7CiAgICAgIC8vIGFmdGVyIHRoZSByZW5kZXIKICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKICAgICAgICBydW5RdWV1ZShhZnRlclJlbmRlclF1ZXVlKTsKICAgICAgfSk7CiAgICB9KTsKICB9CgogIGZ1bmN0aW9uIGZsdXNoUXVldWUocXVldWUpIHsKICAgIHdoaWxlIChxdWV1ZS5sZW5ndGgpIHsKICAgICAgY2FsbE1ldGhvZChxdWV1ZS5zaGlmdCgpKTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIHJ1blF1ZXVlKHF1ZXVlKSB7CiAgICBmb3IgKGxldCBpPTAsIGw9cXVldWUubGVuZ3RoOyBpIDwgbDsgaSsrKSB7CiAgICAgIGNhbGxNZXRob2QocXVldWUuc2hpZnQoKSk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBjYWxsTWV0aG9kKGluZm8pIHsKICAgIGNvbnN0IGNvbnRleHQgPSBpbmZvWzBdOwogICAgY29uc3QgY2FsbGJhY2sgPSBpbmZvWzFdOwogICAgY29uc3QgYXJncyA9IGluZm9bMl07CiAgICB0cnkgewogICAgICBjYWxsYmFjay5hcHBseShjb250ZXh0LCBhcmdzKTsKICAgIH0gY2F0Y2goZSkgewogICAgICBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICB0aHJvdyBlOwogICAgICB9KTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIGZsdXNoKCkgewogICAgd2hpbGUgKGJlZm9yZVJlbmRlclF1ZXVlLmxlbmd0aCB8fCBhZnRlclJlbmRlclF1ZXVlLmxlbmd0aCkgewogICAgICBmbHVzaFF1ZXVlKGJlZm9yZVJlbmRlclF1ZXVlKTsKICAgICAgZmx1c2hRdWV1ZShhZnRlclJlbmRlclF1ZXVlKTsKICAgIH0KICAgIHNjaGVkdWxlZCA9IGZhbHNlOwogIH0KCiAgLyoqCiAgICogTW9kdWxlIGZvciBzY2hlZHVsaW5nIGZsdXNoYWJsZSBwcmUtcmVuZGVyIGFuZCBwb3N0LXJlbmRlciB0YXNrcy4KICAgKgogICAqIEBuYW1lc3BhY2UKICAgKiBAbWVtYmVyb2YgUG9seW1lcgogICAqIEBzdW1tYXJ5IE1vZHVsZSBmb3Igc2NoZWR1bGluZyBmbHVzaGFibGUgcHJlLXJlbmRlciBhbmQgcG9zdC1yZW5kZXIgdGFza3MuCiAgICovCiAgUG9seW1lci5SZW5kZXJTdGF0dXMgPSB7CgogICAgLyoqCiAgICAgKiBFbnF1ZXVlcyBhIGNhbGxiYWNrIHdoaWNoIHdpbGwgYmUgcnVuIGJlZm9yZSB0aGUgbmV4dCByZW5kZXIsIGF0CiAgICAgKiBgcmVxdWVzdEFuaW1hdGlvbkZyYW1lYCB0aW1pbmcuCiAgICAgKgogICAgICogVGhpcyBtZXRob2QgaXMgdXNlZnVsIGZvciBlbnF1ZXVpbmcgd29yayB0aGF0IHJlcXVpcmVzIERPTSBtZWFzdXJlbWVudCwKICAgICAqIHNpbmNlIG1lYXN1cmVtZW50IG1heSBub3QgYmUgcmVsaWFibGUgaW4gY3VzdG9tIGVsZW1lbnQgY2FsbGJhY2tzIGJlZm9yZQogICAgICogdGhlIGZpcnN0IHJlbmRlciwgYXMgd2VsbCBhcyBmb3IgYmF0Y2hpbmcgbWVhc3VyZW1lbnQgdGFza3MgaW4gZ2VuZXJhbC4KICAgICAqCiAgICAgKiBUYXNrcyBpbiB0aGlzIHF1ZXVlIG1heSBiZSBmbHVzaGVkIGJ5IGNhbGxpbmcgYFBvbHltZXIuUmVuZGVyU3RhdHVzLmZsdXNoKClgLgogICAgICoKICAgICAqIEBtZW1iZXJvZiBQb2x5bWVyLlJlbmRlclN0YXR1cwogICAgICogQHBhcmFtIHsqfSBjb250ZXh0IENvbnRleHQgb2JqZWN0IHRoZSBjYWxsYmFjayBmdW5jdGlvbiB3aWxsIGJlIGJvdW5kIHRvCiAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKC4uLiopOnZvaWR9IGNhbGxiYWNrIENhbGxiYWNrIGZ1bmN0aW9uCiAgICAgKiBAcGFyYW0geyFBcnJheT19IGFyZ3MgQW4gYXJyYXkgb2YgYXJndW1lbnRzIHRvIGNhbGwgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHdpdGgKICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgKi8KICAgIGJlZm9yZU5leHRSZW5kZXI6IGZ1bmN0aW9uKGNvbnRleHQsIGNhbGxiYWNrLCBhcmdzKSB7CiAgICAgIGlmICghc2NoZWR1bGVkKSB7CiAgICAgICAgc2NoZWR1bGUoKTsKICAgICAgfQogICAgICBiZWZvcmVSZW5kZXJRdWV1ZS5wdXNoKFtjb250ZXh0LCBjYWxsYmFjaywgYXJnc10pOwogICAgfSwKCiAgICAvKioKICAgICAqIEVucXVldWVzIGEgY2FsbGJhY2sgd2hpY2ggd2lsbCBiZSBydW4gYWZ0ZXIgdGhlIG5leHQgcmVuZGVyLCBlcXVpdmFsZW50CiAgICAgKiB0byBvbmUgdGFzayAoYHNldFRpbWVvdXRgKSBhZnRlciB0aGUgbmV4dCBgcmVxdWVzdEFuaW1hdGlvbkZyYW1lYC4KICAgICAqCiAgICAgKiBUaGlzIG1ldGhvZCBpcyB1c2VmdWwgZm9yIHR1bmluZyB0aGUgZmlyc3QtcmVuZGVyIHBlcmZvcm1hbmNlIG9mIGFuCiAgICAgKiBlbGVtZW50IG9yIGFwcGxpY2F0aW9uIGJ5IGRlZmVycmluZyBub24tY3JpdGljYWwgd29yayB1bnRpbCBhZnRlciB0aGUKICAgICAqIGZpcnN0IHBhaW50LiAgVHlwaWNhbCBub24tcmVuZGVyLWNyaXRpY2FsIHdvcmsgbWF5IGluY2x1ZGUgYWRkaW5nIFVJCiAgICAgKiBldmVudCBsaXN0ZW5lcnMgYW5kIGFyaWEgYXR0cmlidXRlcy4KICAgICAqCiAgICAgKiBAbWVtYmVyb2YgUG9seW1lci5SZW5kZXJTdGF0dXMKICAgICAqIEBwYXJhbSB7Kn0gY29udGV4dCBDb250ZXh0IG9iamVjdCB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gd2lsbCBiZSBib3VuZCB0bwogICAgICogQHBhcmFtIHtmdW5jdGlvbiguLi4qKTp2b2lkfSBjYWxsYmFjayBDYWxsYmFjayBmdW5jdGlvbgogICAgICogQHBhcmFtIHshQXJyYXk9fSBhcmdzIEFuIGFycmF5IG9mIGFyZ3VtZW50cyB0byBjYWxsIHRoZSBjYWxsYmFjayBmdW5jdGlvbiB3aXRoCiAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICovCiAgICBhZnRlck5leHRSZW5kZXI6IGZ1bmN0aW9uKGNvbnRleHQsIGNhbGxiYWNrLCBhcmdzKSB7CiAgICAgIGlmICghc2NoZWR1bGVkKSB7CiAgICAgICAgc2NoZWR1bGUoKTsKICAgICAgfQogICAgICBhZnRlclJlbmRlclF1ZXVlLnB1c2goW2NvbnRleHQsIGNhbGxiYWNrLCBhcmdzXSk7CiAgICB9LAoKICAgIC8qKgogICAgICogRmx1c2hlcyBhbGwgYGJlZm9yZU5leHRSZW5kZXJgIHRhc2tzLCBmb2xsb3dlZCBieSBhbGwgYGFmdGVyTmV4dFJlbmRlcmAKICAgICAqIHRhc2tzLgogICAgICoKICAgICAqIEBtZW1iZXJvZiBQb2x5bWVyLlJlbmRlclN0YXR1cwogICAgICogQHJldHVybiB7dm9pZH0KICAgICAqLwogICAgZmx1c2g6IGZsdXNoCgogIH07Cgp9KSgpOwo8L3NjcmlwdD48c2NyaXB0PgooZnVuY3Rpb24oKSB7CiAgJ3VzZSBzdHJpY3QnOwoKICAvLyB1bnJlc29sdmVkCgogIGZ1bmN0aW9uIHJlc29sdmUoKSB7CiAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUF0dHJpYnV0ZSgndW5yZXNvbHZlZCcpOwogIH0KCiAgaWYgKHdpbmRvdy5XZWJDb21wb25lbnRzKSB7CiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignV2ViQ29tcG9uZW50c1JlYWR5JywgcmVzb2x2ZSk7CiAgfSBlbHNlIHsKICAgIGlmIChkb2N1bWVudC5yZWFkeVN0YXRlID09PSAnaW50ZXJhY3RpdmUnIHx8IGRvY3VtZW50LnJlYWR5U3RhdGUgPT09ICdjb21wbGV0ZScpIHsKICAgICAgcmVzb2x2ZSgpOwogICAgfSBlbHNlIHsKICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLCByZXNvbHZlKTsKICAgIH0KICB9Cgp9KSgpOwo8L3NjcmlwdD48c2NyaXB0PgooZnVuY3Rpb24oKSB7CgogICd1c2Ugc3RyaWN0JzsKCiAgZnVuY3Rpb24gbmV3U3BsaWNlKGluZGV4LCByZW1vdmVkLCBhZGRlZENvdW50KSB7CiAgICByZXR1cm4gewogICAgICBpbmRleDogaW5kZXgsCiAgICAgIHJlbW92ZWQ6IHJlbW92ZWQsCiAgICAgIGFkZGVkQ291bnQ6IGFkZGVkQ291bnQKICAgIH07CiAgfQoKICBjb25zdCBFRElUX0xFQVZFID0gMDsKICBjb25zdCBFRElUX1VQREFURSA9IDE7CiAgY29uc3QgRURJVF9BREQgPSAyOwogIGNvbnN0IEVESVRfREVMRVRFID0gMzsKCiAgLy8gTm90ZTogVGhpcyBmdW5jdGlvbiBpcyAqYmFzZWQqIG9uIHRoZSBjb21wdXRhdGlvbiBvZiB0aGUgTGV2ZW5zaHRlaW4KICAvLyAiZWRpdCIgZGlzdGFuY2UuIFRoZSBvbmUgY2hhbmdlIGlzIHRoYXQgInVwZGF0ZXMiIGFyZSB0cmVhdGVkIGFzIHR3bwogIC8vIGVkaXRzIC0gbm90IG9uZS4gV2l0aCBBcnJheSBzcGxpY2VzLCBhbiB1cGRhdGUgaXMgcmVhbGx5IGEgZGVsZXRlCiAgLy8gZm9sbG93ZWQgYnkgYW4gYWRkLiBCeSByZXRhaW5pbmcgdGhpcywgd2Ugb3B0aW1pemUgZm9yICJrZWVwaW5nIiB0aGUKICAvLyBtYXhpbXVtIGFycmF5IGl0ZW1zIGluIHRoZSBvcmlnaW5hbCBhcnJheS4gRm9yIGV4YW1wbGU6CiAgLy8KICAvLyAgICd4eHh4MTIzJyAtPiAnMTIzeXl5eScKICAvLwogIC8vIFdpdGggMS1lZGl0IHVwZGF0ZXMsIHRoZSBzaG9ydGVzdCBwYXRoIHdvdWxkIGJlIGp1c3QgdG8gdXBkYXRlIGFsbCBzZXZlbgogIC8vIGNoYXJhY3RlcnMuIFdpdGggMi1lZGl0IHVwZGF0ZXMsIHdlIGRlbGV0ZSA0LCBsZWF2ZSAzLCBhbmQgYWRkIDQuIFRoaXMKICAvLyBsZWF2ZXMgdGhlIHN1YnN0cmluZyAnMTIzJyBpbnRhY3QuCiAgZnVuY3Rpb24gY2FsY0VkaXREaXN0YW5jZXMoY3VycmVudCwgY3VycmVudFN0YXJ0LCBjdXJyZW50RW5kLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbGQsIG9sZFN0YXJ0LCBvbGRFbmQpIHsKICAgIC8vICJEZWxldGlvbiIgY29sdW1ucwogICAgbGV0IHJvd0NvdW50ID0gb2xkRW5kIC0gb2xkU3RhcnQgKyAxOwogICAgbGV0IGNvbHVtbkNvdW50ID0gY3VycmVudEVuZCAtIGN1cnJlbnRTdGFydCArIDE7CiAgICBsZXQgZGlzdGFuY2VzID0gbmV3IEFycmF5KHJvd0NvdW50KTsKCiAgICAvLyAiQWRkaXRpb24iIHJvd3MuIEluaXRpYWxpemUgbnVsbCBjb2x1bW4uCiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJvd0NvdW50OyBpKyspIHsKICAgICAgZGlzdGFuY2VzW2ldID0gbmV3IEFycmF5KGNvbHVtbkNvdW50KTsKICAgICAgZGlzdGFuY2VzW2ldWzBdID0gaTsKICAgIH0KCiAgICAvLyBJbml0aWFsaXplIG51bGwgcm93CiAgICBmb3IgKGxldCBqID0gMDsgaiA8IGNvbHVtbkNvdW50OyBqKyspCiAgICAgIGRpc3RhbmNlc1swXVtqXSA9IGo7CgogICAgZm9yIChsZXQgaSA9IDE7IGkgPCByb3dDb3VudDsgaSsrKSB7CiAgICAgIGZvciAobGV0IGogPSAxOyBqIDwgY29sdW1uQ291bnQ7IGorKykgewogICAgICAgIGlmIChlcXVhbHMoY3VycmVudFtjdXJyZW50U3RhcnQgKyBqIC0gMV0sIG9sZFtvbGRTdGFydCArIGkgLSAxXSkpCiAgICAgICAgICBkaXN0YW5jZXNbaV1bal0gPSBkaXN0YW5jZXNbaSAtIDFdW2ogLSAxXTsKICAgICAgICBlbHNlIHsKICAgICAgICAgIGxldCBub3J0aCA9IGRpc3RhbmNlc1tpIC0gMV1bal0gKyAxOwogICAgICAgICAgbGV0IHdlc3QgPSBkaXN0YW5jZXNbaV1baiAtIDFdICsgMTsKICAgICAgICAgIGRpc3RhbmNlc1tpXVtqXSA9IG5vcnRoIDwgd2VzdCA/IG5vcnRoIDogd2VzdDsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gZGlzdGFuY2VzOwogIH0KCiAgLy8gVGhpcyBzdGFydHMgYXQgdGhlIGZpbmFsIHdlaWdodCwgYW5kIHdhbGtzICJiYWNrd2FyZCIgYnkgZmluZGluZwogIC8vIHRoZSBtaW5pbXVtIHByZXZpb3VzIHdlaWdodCByZWN1cnNpdmVseSB1bnRpbCB0aGUgb3JpZ2luIG9mIHRoZSB3ZWlnaHQKICAvLyBtYXRyaXguCiAgZnVuY3Rpb24gc3BsaWNlT3BlcmF0aW9uc0Zyb21FZGl0RGlzdGFuY2VzKGRpc3RhbmNlcykgewogICAgbGV0IGkgPSBkaXN0YW5jZXMubGVuZ3RoIC0gMTsKICAgIGxldCBqID0gZGlzdGFuY2VzWzBdLmxlbmd0aCAtIDE7CiAgICBsZXQgY3VycmVudCA9IGRpc3RhbmNlc1tpXVtqXTsKICAgIGxldCBlZGl0cyA9IFtdOwogICAgd2hpbGUgKGkgPiAwIHx8IGogPiAwKSB7CiAgICAgIGlmIChpID09IDApIHsKICAgICAgICBlZGl0cy5wdXNoKEVESVRfQUREKTsKICAgICAgICBqLS07CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgaWYgKGogPT0gMCkgewogICAgICAgIGVkaXRzLnB1c2goRURJVF9ERUxFVEUpOwogICAgICAgIGktLTsKICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICBsZXQgbm9ydGhXZXN0ID0gZGlzdGFuY2VzW2kgLSAxXVtqIC0gMV07CiAgICAgIGxldCB3ZXN0ID0gZGlzdGFuY2VzW2kgLSAxXVtqXTsKICAgICAgbGV0IG5vcnRoID0gZGlzdGFuY2VzW2ldW2ogLSAxXTsKCiAgICAgIGxldCBtaW47CiAgICAgIGlmICh3ZXN0IDwgbm9ydGgpCiAgICAgICAgbWluID0gd2VzdCA8IG5vcnRoV2VzdCA/IHdlc3QgOiBub3J0aFdlc3Q7CiAgICAgIGVsc2UKICAgICAgICBtaW4gPSBub3J0aCA8IG5vcnRoV2VzdCA/IG5vcnRoIDogbm9ydGhXZXN0OwoKICAgICAgaWYgKG1pbiA9PSBub3J0aFdlc3QpIHsKICAgICAgICBpZiAobm9ydGhXZXN0ID09IGN1cnJlbnQpIHsKICAgICAgICAgIGVkaXRzLnB1c2goRURJVF9MRUFWRSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGVkaXRzLnB1c2goRURJVF9VUERBVEUpOwogICAgICAgICAgY3VycmVudCA9IG5vcnRoV2VzdDsKICAgICAgICB9CiAgICAgICAgaS0tOwogICAgICAgIGotLTsKICAgICAgfSBlbHNlIGlmIChtaW4gPT0gd2VzdCkgewogICAgICAgIGVkaXRzLnB1c2goRURJVF9ERUxFVEUpOwogICAgICAgIGktLTsKICAgICAgICBjdXJyZW50ID0gd2VzdDsKICAgICAgfSBlbHNlIHsKICAgICAgICBlZGl0cy5wdXNoKEVESVRfQUREKTsKICAgICAgICBqLS07CiAgICAgICAgY3VycmVudCA9IG5vcnRoOwogICAgICB9CiAgICB9CgogICAgZWRpdHMucmV2ZXJzZSgpOwogICAgcmV0dXJuIGVkaXRzOwogIH0KCiAgLyoqCiAgICogU3BsaWNlIFByb2plY3Rpb24gZnVuY3Rpb25zOgogICAqCiAgICogQSBzcGxpY2UgbWFwIGlzIGEgcmVwcmVzZW50YXRpb24gb2YgaG93IGEgcHJldmlvdXMgYXJyYXkgb2YgaXRlbXMKICAgKiB3YXMgdHJhbnNmb3JtZWQgaW50byBhIG5ldyBhcnJheSBvZiBpdGVtcy4gQ29uY2VwdHVhbGx5IGl0IGlzIGEgbGlzdCBvZgogICAqIHR1cGxlcyBvZgogICAqCiAgICogICA8aW5kZXgsIHJlbW92ZWQsIGFkZGVkQ291bnQ+CiAgICoKICAgKiB3aGljaCBhcmUga2VwdCBpbiBhc2NlbmRpbmcgaW5kZXggb3JkZXIgb2YuIFRoZSB0dXBsZSByZXByZXNlbnRzIHRoYXQgYXQKICAgKiB0aGUgfGluZGV4fCwgfHJlbW92ZWR8IHNlcXVlbmNlIG9mIGl0ZW1zIHdlcmUgcmVtb3ZlZCwgYW5kIGNvdW50aW5nIGZvcndhcmQKICAgKiBmcm9tIHxpbmRleHwsIHxhZGRlZENvdW50fCBpdGVtcyB3ZXJlIGFkZGVkLgogICAqLwoKICAvKioKICAgKiBMYWNraW5nIGluZGl2aWR1YWwgc3BsaWNlIG11dGF0aW9uIGluZm9ybWF0aW9uLCB0aGUgbWluaW1hbCBzZXQgb2YKICAgKiBzcGxpY2VzIGNhbiBiZSBzeW50aGVzaXplZCBnaXZlbiB0aGUgcHJldmlvdXMgc3RhdGUgYW5kIGZpbmFsIHN0YXRlIG9mIGFuCiAgICogYXJyYXkuIFRoZSBiYXNpYyBhcHByb2FjaCBpcyB0byBjYWxjdWxhdGUgdGhlIGVkaXQgZGlzdGFuY2UgbWF0cml4IGFuZAogICAqIGNob29zZSB0aGUgc2hvcnRlc3QgcGF0aCB0aHJvdWdoIGl0LgogICAqCiAgICogQ29tcGxleGl0eTogTyhsICogcCkKICAgKiAgIGw6IFRoZSBsZW5ndGggb2YgdGhlIGN1cnJlbnQgYXJyYXkKICAgKiAgIHA6IFRoZSBsZW5ndGggb2YgdGhlIG9sZCBhcnJheQogICAqCiAgICogQHBhcmFtIHshQXJyYXl9IGN1cnJlbnQgVGhlIGN1cnJlbnQgImNoYW5nZWQiIGFycmF5IGZvciB3aGljaCB0bwogICAqIGNhbGN1bGF0ZSBzcGxpY2VzLgogICAqIEBwYXJhbSB7bnVtYmVyfSBjdXJyZW50U3RhcnQgU3RhcnRpbmcgaW5kZXggaW4gdGhlIGBjdXJyZW50YCBhcnJheSBmb3IKICAgKiB3aGljaCBzcGxpY2VzIGFyZSBjYWxjdWxhdGVkLgogICAqIEBwYXJhbSB7bnVtYmVyfSBjdXJyZW50RW5kIEVuZGluZyBpbmRleCBpbiB0aGUgYGN1cnJlbnRgIGFycmF5IGZvcgogICAqIHdoaWNoIHNwbGljZXMgYXJlIGNhbGN1bGF0ZWQuCiAgICogQHBhcmFtIHshQXJyYXl9IG9sZCBUaGUgb3JpZ2luYWwgInVuY2hhbmdlZCIgYXJyYXkgdG8gY29tcGFyZSBgY3VycmVudGAKICAgKiBhZ2FpbnN0IHRvIGRldGVybWluZSBzcGxpY2VzLgogICAqIEBwYXJhbSB7bnVtYmVyfSBvbGRTdGFydCBTdGFydGluZyBpbmRleCBpbiB0aGUgYG9sZGAgYXJyYXkgZm9yCiAgICogd2hpY2ggc3BsaWNlcyBhcmUgY2FsY3VsYXRlZC4KICAgKiBAcGFyYW0ge251bWJlcn0gb2xkRW5kIEVuZGluZyBpbmRleCBpbiB0aGUgYG9sZGAgYXJyYXkgZm9yCiAgICogd2hpY2ggc3BsaWNlcyBhcmUgY2FsY3VsYXRlZC4KICAgKiBAcmV0dXJuIHshQXJyYXl9IFJldHVybnMgYW4gYXJyYXkgb2Ygc3BsaWNlIHJlY29yZCBvYmplY3RzLiBFYWNoIG9mIHRoZXNlCiAgICogY29udGFpbnM6IGBpbmRleGAgdGhlIGxvY2F0aW9uIHdoZXJlIHRoZSBzcGxpY2Ugb2NjdXJyZWQ7IGByZW1vdmVkYAogICAqIHRoZSBhcnJheSBvZiByZW1vdmVkIGl0ZW1zIGZyb20gdGhpcyBsb2NhdGlvbjsgYGFkZGVkQ291bnRgIHRoZSBudW1iZXIKICAgKiBvZiBpdGVtcyBhZGRlZCBhdCB0aGlzIGxvY2F0aW9uLgogICAqLwogIGZ1bmN0aW9uIGNhbGNTcGxpY2VzKGN1cnJlbnQsIGN1cnJlbnRTdGFydCwgY3VycmVudEVuZCwKICAgICAgICAgICAgICAgICAgICAgICAgb2xkLCBvbGRTdGFydCwgb2xkRW5kKSB7CiAgICBsZXQgcHJlZml4Q291bnQgPSAwOwogICAgbGV0IHN1ZmZpeENvdW50ID0gMDsKICAgIGxldCBzcGxpY2U7CgogICAgbGV0IG1pbkxlbmd0aCA9IE1hdGgubWluKGN1cnJlbnRFbmQgLSBjdXJyZW50U3RhcnQsIG9sZEVuZCAtIG9sZFN0YXJ0KTsKICAgIGlmIChjdXJyZW50U3RhcnQgPT0gMCAmJiBvbGRTdGFydCA9PSAwKQogICAgICBwcmVmaXhDb3VudCA9IHNoYXJlZFByZWZpeChjdXJyZW50LCBvbGQsIG1pbkxlbmd0aCk7CgogICAgaWYgKGN1cnJlbnRFbmQgPT0gY3VycmVudC5sZW5ndGggJiYgb2xkRW5kID09IG9sZC5sZW5ndGgpCiAgICAgIHN1ZmZpeENvdW50ID0gc2hhcmVkU3VmZml4KGN1cnJlbnQsIG9sZCwgbWluTGVuZ3RoIC0gcHJlZml4Q291bnQpOwoKICAgIGN1cnJlbnRTdGFydCArPSBwcmVmaXhDb3VudDsKICAgIG9sZFN0YXJ0ICs9IHByZWZpeENvdW50OwogICAgY3VycmVudEVuZCAtPSBzdWZmaXhDb3VudDsKICAgIG9sZEVuZCAtPSBzdWZmaXhDb3VudDsKCiAgICBpZiAoY3VycmVudEVuZCAtIGN1cnJlbnRTdGFydCA9PSAwICYmIG9sZEVuZCAtIG9sZFN0YXJ0ID09IDApCiAgICAgIHJldHVybiBbXTsKCiAgICBpZiAoY3VycmVudFN0YXJ0ID09IGN1cnJlbnRFbmQpIHsKICAgICAgc3BsaWNlID0gbmV3U3BsaWNlKGN1cnJlbnRTdGFydCwgW10sIDApOwogICAgICB3aGlsZSAob2xkU3RhcnQgPCBvbGRFbmQpCiAgICAgICAgc3BsaWNlLnJlbW92ZWQucHVzaChvbGRbb2xkU3RhcnQrK10pOwoKICAgICAgcmV0dXJuIFsgc3BsaWNlIF07CiAgICB9IGVsc2UgaWYgKG9sZFN0YXJ0ID09IG9sZEVuZCkKICAgICAgcmV0dXJuIFsgbmV3U3BsaWNlKGN1cnJlbnRTdGFydCwgW10sIGN1cnJlbnRFbmQgLSBjdXJyZW50U3RhcnQpIF07CgogICAgbGV0IG9wcyA9IHNwbGljZU9wZXJhdGlvbnNGcm9tRWRpdERpc3RhbmNlcygKICAgICAgICBjYWxjRWRpdERpc3RhbmNlcyhjdXJyZW50LCBjdXJyZW50U3RhcnQsIGN1cnJlbnRFbmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbGQsIG9sZFN0YXJ0LCBvbGRFbmQpKTsKCiAgICBzcGxpY2UgPSB1bmRlZmluZWQ7CiAgICBsZXQgc3BsaWNlcyA9IFtdOwogICAgbGV0IGluZGV4ID0gY3VycmVudFN0YXJ0OwogICAgbGV0IG9sZEluZGV4ID0gb2xkU3RhcnQ7CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9wcy5sZW5ndGg7IGkrKykgewogICAgICBzd2l0Y2gob3BzW2ldKSB7CiAgICAgICAgY2FzZSBFRElUX0xFQVZFOgogICAgICAgICAgaWYgKHNwbGljZSkgewogICAgICAgICAgICBzcGxpY2VzLnB1c2goc3BsaWNlKTsKICAgICAgICAgICAgc3BsaWNlID0gdW5kZWZpbmVkOwogICAgICAgICAgfQoKICAgICAgICAgIGluZGV4Kys7CiAgICAgICAgICBvbGRJbmRleCsrOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBFRElUX1VQREFURToKICAgICAgICAgIGlmICghc3BsaWNlKQogICAgICAgICAgICBzcGxpY2UgPSBuZXdTcGxpY2UoaW5kZXgsIFtdLCAwKTsKCiAgICAgICAgICBzcGxpY2UuYWRkZWRDb3VudCsrOwogICAgICAgICAgaW5kZXgrKzsKCiAgICAgICAgICBzcGxpY2UucmVtb3ZlZC5wdXNoKG9sZFtvbGRJbmRleF0pOwogICAgICAgICAgb2xkSW5kZXgrKzsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgRURJVF9BREQ6CiAgICAgICAgICBpZiAoIXNwbGljZSkKICAgICAgICAgICAgc3BsaWNlID0gbmV3U3BsaWNlKGluZGV4LCBbXSwgMCk7CgogICAgICAgICAgc3BsaWNlLmFkZGVkQ291bnQrKzsKICAgICAgICAgIGluZGV4Kys7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIEVESVRfREVMRVRFOgogICAgICAgICAgaWYgKCFzcGxpY2UpCiAgICAgICAgICAgIHNwbGljZSA9IG5ld1NwbGljZShpbmRleCwgW10sIDApOwoKICAgICAgICAgIHNwbGljZS5yZW1vdmVkLnB1c2gob2xkW29sZEluZGV4XSk7CiAgICAgICAgICBvbGRJbmRleCsrOwogICAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0KCiAgICBpZiAoc3BsaWNlKSB7CiAgICAgIHNwbGljZXMucHVzaChzcGxpY2UpOwogICAgfQogICAgcmV0dXJuIHNwbGljZXM7CiAgfQoKICBmdW5jdGlvbiBzaGFyZWRQcmVmaXgoY3VycmVudCwgb2xkLCBzZWFyY2hMZW5ndGgpIHsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2VhcmNoTGVuZ3RoOyBpKyspCiAgICAgIGlmICghZXF1YWxzKGN1cnJlbnRbaV0sIG9sZFtpXSkpCiAgICAgICAgcmV0dXJuIGk7CiAgICByZXR1cm4gc2VhcmNoTGVuZ3RoOwogIH0KCiAgZnVuY3Rpb24gc2hhcmVkU3VmZml4KGN1cnJlbnQsIG9sZCwgc2VhcmNoTGVuZ3RoKSB7CiAgICBsZXQgaW5kZXgxID0gY3VycmVudC5sZW5ndGg7CiAgICBsZXQgaW5kZXgyID0gb2xkLmxlbmd0aDsKICAgIGxldCBjb3VudCA9IDA7CiAgICB3aGlsZSAoY291bnQgPCBzZWFyY2hMZW5ndGggJiYgZXF1YWxzKGN1cnJlbnRbLS1pbmRleDFdLCBvbGRbLS1pbmRleDJdKSkKICAgICAgY291bnQrKzsKCiAgICByZXR1cm4gY291bnQ7CiAgfQoKICBmdW5jdGlvbiBjYWxjdWxhdGVTcGxpY2VzKGN1cnJlbnQsIHByZXZpb3VzKSB7CiAgICByZXR1cm4gY2FsY1NwbGljZXMoY3VycmVudCwgMCwgY3VycmVudC5sZW5ndGgsIHByZXZpb3VzLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXMubGVuZ3RoKTsKICB9CgogIGZ1bmN0aW9uIGVxdWFscyhjdXJyZW50VmFsdWUsIHByZXZpb3VzVmFsdWUpIHsKICAgIHJldHVybiBjdXJyZW50VmFsdWUgPT09IHByZXZpb3VzVmFsdWU7CiAgfQoKICAvKioKICAgKiBAbmFtZXNwYWNlCiAgICogQG1lbWJlcm9mIFBvbHltZXIKICAgKiBAc3VtbWFyeSBNb2R1bGUgdGhhdCBwcm92aWRlcyB1dGlsaXRpZXMgZm9yIGRpZmZpbmcgYXJyYXlzLgogICAqLwogIFBvbHltZXIuQXJyYXlTcGxpY2UgPSB7CiAgICAvKioKICAgICAqIFJldHVybnMgYW4gYXJyYXkgb2Ygc3BsaWNlIHJlY29yZHMgaW5kaWNhdGluZyB0aGUgbWluaW11bSBlZGl0cyByZXF1aXJlZAogICAgICogdG8gdHJhbnNmb3JtIHRoZSBgcHJldmlvdXNgIGFycmF5IGludG8gdGhlIGBjdXJyZW50YCBhcnJheS4KICAgICAqCiAgICAgKiBTcGxpY2UgcmVjb3JkcyBhcmUgb3JkZXJlZCBieSBpbmRleCBhbmQgY29udGFpbiB0aGUgZm9sbG93aW5nIGZpZWxkczoKICAgICAqIC0gYGluZGV4YDogaW5kZXggd2hlcmUgZWRpdCBzdGFydGVkCiAgICAgKiAtIGByZW1vdmVkYDogYXJyYXkgb2YgcmVtb3ZlZCBpdGVtcyBmcm9tIHRoaXMgaW5kZXgKICAgICAqIC0gYGFkZGVkQ291bnRgOiBudW1iZXIgb2YgaXRlbXMgYWRkZWQgYXQgdGhpcyBpbmRleAogICAgICoKICAgICAqIFRoaXMgZnVuY3Rpb24gaXMgYmFzZWQgb24gdGhlIExldmVuc2h0ZWluICJtaW5pbXVtIGVkaXQgZGlzdGFuY2UiCiAgICAgKiBhbGdvcml0aG0uIE5vdGUgdGhhdCB1cGRhdGVzIGFyZSB0cmVhdGVkIGFzIHJlbW92YWwgZm9sbG93ZWQgYnkgYWRkaXRpb24uCiAgICAgKgogICAgICogVGhlIHdvcnN0LWNhc2UgdGltZSBjb21wbGV4aXR5IG9mIHRoaXMgYWxnb3JpdGhtIGlzIGBPKGwgKiBwKWAKICAgICAqICAgbDogVGhlIGxlbmd0aCBvZiB0aGUgY3VycmVudCBhcnJheQogICAgICogICBwOiBUaGUgbGVuZ3RoIG9mIHRoZSBwcmV2aW91cyBhcnJheQogICAgICoKICAgICAqIEhvd2V2ZXIsIHRoZSB3b3JzdC1jYXNlIGNvbXBsZXhpdHkgaXMgcmVkdWNlZCBieSBhbiBgTyhuKWAgb3B0aW1pemF0aW9uCiAgICAgKiB0byBkZXRlY3QgYW55IHNoYXJlZCBwcmVmaXggJiBzdWZmaXggYmV0d2VlbiB0aGUgdHdvIGFycmF5cyBhbmQgb25seQogICAgICogcGVyZm9ybSB0aGUgbW9yZSBleHBlbnNpdmUgbWluaW11bSBlZGl0IGRpc3RhbmNlIGNhbGN1bGF0aW9uIG92ZXIgdGhlCiAgICAgKiBub24tc2hhcmVkIHBvcnRpb25zIG9mIHRoZSBhcnJheXMuCiAgICAgKgogICAgICogQGZ1bmN0aW9uCiAgICAgKiBAbWVtYmVyb2YgUG9seW1lci5BcnJheVNwbGljZQogICAgICogQHBhcmFtIHshQXJyYXl9IGN1cnJlbnQgVGhlICJjaGFuZ2VkIiBhcnJheSBmb3Igd2hpY2ggc3BsaWNlcyB3aWxsIGJlCiAgICAgKiBjYWxjdWxhdGVkLgogICAgICogQHBhcmFtIHshQXJyYXl9IHByZXZpb3VzIFRoZSAidW5jaGFuZ2VkIiBvcmlnaW5hbCBhcnJheSB0byBjb21wYXJlCiAgICAgKiBgY3VycmVudGAgYWdhaW5zdCB0byBkZXRlcm1pbmUgdGhlIHNwbGljZXMuCiAgICAgKiBAcmV0dXJuIHshQXJyYXl9IFJldHVybnMgYW4gYXJyYXkgb2Ygc3BsaWNlIHJlY29yZCBvYmplY3RzLiBFYWNoIG9mIHRoZXNlCiAgICAgKiBjb250YWluczogYGluZGV4YCB0aGUgbG9jYXRpb24gd2hlcmUgdGhlIHNwbGljZSBvY2N1cnJlZDsgYHJlbW92ZWRgCiAgICAgKiB0aGUgYXJyYXkgb2YgcmVtb3ZlZCBpdGVtcyBmcm9tIHRoaXMgbG9jYXRpb247IGBhZGRlZENvdW50YCB0aGUgbnVtYmVyCiAgICAgKiBvZiBpdGVtcyBhZGRlZCBhdCB0aGlzIGxvY2F0aW9uLgogICAgICovCiAgICBjYWxjdWxhdGVTcGxpY2VzCiAgfTsKCn0pKCk7Cjwvc2NyaXB0PjxzY3JpcHQ+CihmdW5jdGlvbigpIHsKICAndXNlIHN0cmljdCc7CgogIC8qKgogICAqIFJldHVybnMgdHJ1ZSBpZiBgbm9kZWAgaXMgYSBzbG90IGVsZW1lbnQKICAgKiBAcGFyYW0ge05vZGV9IG5vZGUgTm9kZSB0byB0ZXN0LgogICAqIEByZXR1cm4ge2Jvb2xlYW59IFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gYG5vZGVgIGlzIGEgc2xvdAogICAqIEBwcml2YXRlCiAgICovCiAgZnVuY3Rpb24gaXNTbG90KG5vZGUpIHsKICAgIHJldHVybiAobm9kZS5sb2NhbE5hbWUgPT09ICdzbG90Jyk7CiAgfQoKICAvKioKICAgKiBDbGFzcyB0aGF0IGxpc3RlbnMgZm9yIGNoYW5nZXMgKGFkZGl0aW9ucyBvciByZW1vdmFscykgdG8KICAgKiAiZmxhdHRlbmVkIG5vZGVzIiBvbiBhIGdpdmVuIGBub2RlYC4gVGhlIGxpc3Qgb2YgZmxhdHRlbmVkIG5vZGVzIGNvbnNpc3RzCiAgICogb2YgYSBub2RlJ3MgY2hpbGRyZW4gYW5kLCBmb3IgYW55IGNoaWxkcmVuIHRoYXQgYXJlIGA8c2xvdD5gIGVsZW1lbnRzLAogICAqIHRoZSBleHBhbmRlZCBmbGF0dGVuZWQgbGlzdCBvZiBgYXNzaWduZWROb2Rlc2AuCiAgICogRm9yIGV4YW1wbGUsIGlmIHRoZSBvYnNlcnZlZCBub2RlIGhhcyBjaGlsZHJlbiBgPGE+PC9hPjxzbG90Pjwvc2xvdD48Yj48L2I+YAogICAqIGFuZCB0aGUgYDxzbG90PmAgaGFzIG9uZSBgPGRpdj5gIGFzc2lnbmVkIHRvIGl0LCB0aGVuIHRoZSBmbGF0dGVuZWQKICAgKiBub2RlcyBsaXN0IGlzIGA8YT48L2E+PGRpdj48L2Rpdj48Yj48L2I+YC4gSWYgdGhlIGA8c2xvdD5gIGhhcyBvdGhlcgogICAqIGA8c2xvdD5gIGVsZW1lbnRzIGFzc2lnbmVkIHRvIGl0LCB0aGVzZSBhcmUgZmxhdHRlbmVkIGFzIHdlbGwuCiAgICoKICAgKiBUaGUgcHJvdmlkZWQgYGNhbGxiYWNrYCBpcyBjYWxsZWQgd2hlbmV2ZXIgYW55IGNoYW5nZSB0byB0aGlzIGxpc3QKICAgKiBvZiBmbGF0dGVuZWQgbm9kZXMgb2NjdXJzLCB3aGVyZSBhbiBhZGRpdGlvbiBvciByZW1vdmFsIG9mIGEgbm9kZSBpcwogICAqIGNvbnNpZGVyZWQgYSBjaGFuZ2UuIFRoZSBgY2FsbGJhY2tgIGlzIGNhbGxlZCB3aXRoIG9uZSBhcmd1bWVudCwgYW4gb2JqZWN0CiAgICogY29udGFpbmluZyBhbiBhcnJheSBvZiBhbnkgYGFkZGVkTm9kZXNgIGFuZCBgcmVtb3ZlZE5vZGVzYC4KICAgKgogICAqIE5vdGU6IHRoZSBjYWxsYmFjayBpcyBjYWxsZWQgYXN5bmNocm9ub3VzIHRvIGFueSBjaGFuZ2VzCiAgICogYXQgYSBtaWNyb3Rhc2sgY2hlY2twb2ludC4gVGhpcyBpcyBiZWNhdXNlIG9ic2VydmF0aW9uIGlzIHBlcmZvcm1lZCB1c2luZwogICAqIGBNdXRhdGlvbk9ic2VydmVyYCBhbmQgdGhlIGA8c2xvdD5gIGVsZW1lbnQncyBgc2xvdGNoYW5nZWAgZXZlbnQgd2hpY2gKICAgKiBhcmUgYXN5bmNocm9ub3VzLgogICAqCiAgICogQW4gZXhhbXBsZToKICAgKiBgYGBqcwogICAqIGNsYXNzIFRlc3RTZWxmT2JzZXJ2ZSBleHRlbmRzIFBvbHltZXIuRWxlbWVudCB7CiAgICogICBzdGF0aWMgZ2V0IGlzKCkgeyByZXR1cm4gJ3Rlc3Qtc2VsZi1vYnNlcnZlJzt9CiAgICogICBjb25uZWN0ZWRDYWxsYmFjaygpIHsKICAgKiAgICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTsKICAgKiAgICAgdGhpcy5fb2JzZXJ2ZXIgPSBuZXcgUG9seW1lci5GbGF0dGVuZWROb2Rlc09ic2VydmVyKHRoaXMsIChpbmZvKSA9PiB7CiAgICogICAgICAgdGhpcy5pbmZvID0gaW5mbzsKICAgKiAgICAgfSk7CiAgICogICB9CiAgICogICBkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHsKICAgKiAgICAgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTsKICAgKiAgICAgdGhpcy5fb2JzZXJ2ZXIuZGlzY29ubmVjdCgpOwogICAqICAgfQogICAqIH0KICAgKiBjdXN0b21FbGVtZW50cy5kZWZpbmUoVGVzdFNlbGZPYnNlcnZlLmlzLCBUZXN0U2VsZk9ic2VydmUpOwogICAqIGBgYAogICAqCiAgICogQG1lbWJlcm9mIFBvbHltZXIKICAgKiBAc3VtbWFyeSBDbGFzcyB0aGF0IGxpc3RlbnMgZm9yIGNoYW5nZXMgKGFkZGl0aW9ucyBvciByZW1vdmFscykgdG8KICAgKiAiZmxhdHRlbmVkIG5vZGVzIiBvbiBhIGdpdmVuIGBub2RlYC4KICAgKi8KICBjbGFzcyBGbGF0dGVuZWROb2Rlc09ic2VydmVyIHsKCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIGxpc3Qgb2YgZmxhdHRlbmVkIG5vZGVzIGZvciB0aGUgZ2l2ZW4gYG5vZGVgLgogICAgICogVGhpcyBsaXN0IGNvbnNpc3RzIG9mIGEgbm9kZSdzIGNoaWxkcmVuIGFuZCwgZm9yIGFueSBjaGlsZHJlbgogICAgICogdGhhdCBhcmUgYDxzbG90PmAgZWxlbWVudHMsIHRoZSBleHBhbmRlZCBmbGF0dGVuZWQgbGlzdCBvZiBgYXNzaWduZWROb2Rlc2AuCiAgICAgKiBGb3IgZXhhbXBsZSwgaWYgdGhlIG9ic2VydmVkIG5vZGUgaGFzIGNoaWxkcmVuIGA8YT48L2E+PHNsb3Q+PC9zbG90PjxiPjwvYj5gCiAgICAgKiBhbmQgdGhlIGA8c2xvdD5gIGhhcyBvbmUgYDxkaXY+YCBhc3NpZ25lZCB0byBpdCwgdGhlbiB0aGUgZmxhdHRlbmVkCiAgICAgKiBub2RlcyBsaXN0IGlzIGA8YT48L2E+PGRpdj48L2Rpdj48Yj48L2I+YC4gSWYgdGhlIGA8c2xvdD5gIGhhcyBvdGhlcgogICAgICogYDxzbG90PmAgZWxlbWVudHMgYXNzaWduZWQgdG8gaXQsIHRoZXNlIGFyZSBmbGF0dGVuZWQgYXMgd2VsbC4KICAgICAqCiAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fEhUTUxTbG90RWxlbWVudH0gbm9kZSBUaGUgbm9kZSBmb3Igd2hpY2ggdG8gcmV0dXJuIHRoZSBsaXN0IG9mIGZsYXR0ZW5lZCBub2Rlcy4KICAgICAqIEByZXR1cm4ge0FycmF5fSBUaGUgbGlzdCBvZiBmbGF0dGVuZWQgbm9kZXMgZm9yIHRoZSBnaXZlbiBgbm9kZWAuCiAgICAqLwogICAgc3RhdGljIGdldEZsYXR0ZW5lZE5vZGVzKG5vZGUpIHsKICAgICAgaWYgKGlzU2xvdChub2RlKSkgewogICAgICAgIG5vZGUgPSAvKiogQHR5cGUge0hUTUxTbG90RWxlbWVudH0gKi8obm9kZSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tc2VsZi1hc3NpZ24KICAgICAgICByZXR1cm4gbm9kZS5hc3NpZ25lZE5vZGVzKHtmbGF0dGVuOiB0cnVlfSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIEFycmF5LmZyb20obm9kZS5jaGlsZE5vZGVzKS5tYXAoKG5vZGUpID0+IHsKICAgICAgICAgIGlmIChpc1Nsb3Qobm9kZSkpIHsKICAgICAgICAgICAgbm9kZSA9IC8qKiBAdHlwZSB7SFRNTFNsb3RFbGVtZW50fSAqLyhub2RlKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1zZWxmLWFzc2lnbgogICAgICAgICAgICByZXR1cm4gbm9kZS5hc3NpZ25lZE5vZGVzKHtmbGF0dGVuOiB0cnVlfSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gW25vZGVdOwogICAgICAgICAgfQogICAgICAgIH0pLnJlZHVjZSgoYSwgYikgPT4gYS5jb25jYXQoYiksIFtdKTsKICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIHtFbGVtZW50fSB0YXJnZXQgTm9kZSBvbiB3aGljaCB0byBsaXN0ZW4gZm9yIGNoYW5nZXMuCiAgICAgKiBAcGFyYW0gez9mdW5jdGlvbighRWxlbWVudCwgeyB0YXJnZXQ6ICFFbGVtZW50LCBhZGRlZE5vZGVzOiAhQXJyYXk8IUVsZW1lbnQ+LCByZW1vdmVkTm9kZXM6ICFBcnJheTwhRWxlbWVudD4gfSk6dm9pZH0gY2FsbGJhY2sgRnVuY3Rpb24gY2FsbGVkIHdoZW4gdGhlcmUgYXJlIGFkZGl0aW9ucwogICAgICogb3IgcmVtb3ZhbHMgZnJvbSB0aGUgdGFyZ2V0J3MgbGlzdCBvZiBmbGF0dGVuZWQgbm9kZXMuCiAgICAqLwogICAgY29uc3RydWN0b3IodGFyZ2V0LCBjYWxsYmFjaykgewogICAgICAvKioKICAgICAgICogQHR5cGUge011dGF0aW9uT2JzZXJ2ZXJ9CiAgICAgICAqIEBwcml2YXRlCiAgICAgICAqLwogICAgICB0aGlzLl9zaGFkeUNoaWxkcmVuT2JzZXJ2ZXIgPSBudWxsOwogICAgICAvKioKICAgICAgICogQHR5cGUge011dGF0aW9uT2JzZXJ2ZXJ9CiAgICAgICAqIEBwcml2YXRlCiAgICAgICAqLwogICAgICB0aGlzLl9uYXRpdmVDaGlsZHJlbk9ic2VydmVyID0gbnVsbDsKICAgICAgdGhpcy5fY29ubmVjdGVkID0gZmFsc2U7CiAgICAgIC8qKgogICAgICAgKiBAdHlwZSB7RWxlbWVudH0KICAgICAgICogQHByaXZhdGUKICAgICAgICovCiAgICAgIHRoaXMuX3RhcmdldCA9IHRhcmdldDsKICAgICAgdGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrOwogICAgICB0aGlzLl9lZmZlY3RpdmVOb2RlcyA9IFtdOwogICAgICB0aGlzLl9vYnNlcnZlciA9IG51bGw7CiAgICAgIHRoaXMuX3NjaGVkdWxlZCA9IGZhbHNlOwogICAgICAvKioKICAgICAgICogQHR5cGUge2Z1bmN0aW9uKCl9CiAgICAgICAqIEBwcml2YXRlCiAgICAgICAqLwogICAgICB0aGlzLl9ib3VuZFNjaGVkdWxlID0gKCkgPT4gewogICAgICAgIHRoaXMuX3NjaGVkdWxlKCk7CiAgICAgIH07CiAgICAgIHRoaXMuY29ubmVjdCgpOwogICAgICB0aGlzLl9zY2hlZHVsZSgpOwogICAgfQoKICAgIC8qKgogICAgICogQWN0aXZhdGVzIGFuIG9ic2VydmVyLiBUaGlzIG1ldGhvZCBpcyBhdXRvbWF0aWNhbGx5IGNhbGxlZCB3aGVuCiAgICAgKiBhIGBGbGF0dGVuZWROb2Rlc09ic2VydmVyYCBpcyBjcmVhdGVkLiBJdCBzaG91bGQgb25seSBiZSBjYWxsZWQgdG8KICAgICAqIHJlLWFjdGl2YXRlIGFuIG9ic2VydmVyIHRoYXQgaGFzIGJlZW4gZGVhY3RpdmF0ZWQgdmlhIHRoZSBgZGlzY29ubmVjdGAgbWV0aG9kLgogICAgICoKICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgKi8KICAgIGNvbm5lY3QoKSB7CiAgICAgIGlmIChpc1Nsb3QodGhpcy5fdGFyZ2V0KSkgewogICAgICAgIHRoaXMuX2xpc3RlblNsb3RzKFt0aGlzLl90YXJnZXRdKTsKICAgICAgfSBlbHNlIGlmICh0aGlzLl90YXJnZXQuY2hpbGRyZW4pIHsKICAgICAgICB0aGlzLl9saXN0ZW5TbG90cyh0aGlzLl90YXJnZXQuY2hpbGRyZW4pOwogICAgICAgIGlmICh3aW5kb3cuU2hhZHlET00pIHsKICAgICAgICAgIHRoaXMuX3NoYWR5Q2hpbGRyZW5PYnNlcnZlciA9CiAgICAgICAgICAgIFNoYWR5RE9NLm9ic2VydmVDaGlsZHJlbih0aGlzLl90YXJnZXQsIChtdXRhdGlvbnMpID0+IHsKICAgICAgICAgICAgICB0aGlzLl9wcm9jZXNzTXV0YXRpb25zKG11dGF0aW9ucyk7CiAgICAgICAgICAgIH0pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aGlzLl9uYXRpdmVDaGlsZHJlbk9ic2VydmVyID0KICAgICAgICAgICAgbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKG11dGF0aW9ucykgPT4gewogICAgICAgICAgICAgIHRoaXMuX3Byb2Nlc3NNdXRhdGlvbnMobXV0YXRpb25zKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICB0aGlzLl9uYXRpdmVDaGlsZHJlbk9ic2VydmVyLm9ic2VydmUodGhpcy5fdGFyZ2V0LCB7Y2hpbGRMaXN0OiB0cnVlfSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHRoaXMuX2Nvbm5lY3RlZCA9IHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBEZWFjdGl2YXRlcyB0aGUgZmxhdHRlbmVkIG5vZGVzIG9ic2VydmVyLiBBZnRlciBjYWxsaW5nIHRoaXMgbWV0aG9kCiAgICAgKiB0aGUgb2JzZXJ2ZXIgY2FsbGJhY2sgd2lsbCBub3QgYmUgY2FsbGVkIHdoZW4gY2hhbmdlcyB0byBmbGF0dGVuZWQgbm9kZXMKICAgICAqIG9jY3VyLiBUaGUgYGNvbm5lY3RgIG1ldGhvZCBtYXkgYmUgc3Vic2VxdWVudGx5IGNhbGxlZCB0byByZWFjdGl2YXRlCiAgICAgKiB0aGUgb2JzZXJ2ZXIuCiAgICAgKgogICAgICogQHJldHVybiB7dm9pZH0KICAgICAqLwogICAgZGlzY29ubmVjdCgpIHsKICAgICAgaWYgKGlzU2xvdCh0aGlzLl90YXJnZXQpKSB7CiAgICAgICAgdGhpcy5fdW5saXN0ZW5TbG90cyhbdGhpcy5fdGFyZ2V0XSk7CiAgICAgIH0gZWxzZSBpZiAodGhpcy5fdGFyZ2V0LmNoaWxkcmVuKSB7CiAgICAgICAgdGhpcy5fdW5saXN0ZW5TbG90cyh0aGlzLl90YXJnZXQuY2hpbGRyZW4pOwogICAgICAgIGlmICh3aW5kb3cuU2hhZHlET00gJiYgdGhpcy5fc2hhZHlDaGlsZHJlbk9ic2VydmVyKSB7CiAgICAgICAgICBTaGFkeURPTS51bm9ic2VydmVDaGlsZHJlbih0aGlzLl9zaGFkeUNoaWxkcmVuT2JzZXJ2ZXIpOwogICAgICAgICAgdGhpcy5fc2hhZHlDaGlsZHJlbk9ic2VydmVyID0gbnVsbDsKICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX25hdGl2ZUNoaWxkcmVuT2JzZXJ2ZXIpIHsKICAgICAgICAgIHRoaXMuX25hdGl2ZUNoaWxkcmVuT2JzZXJ2ZXIuZGlzY29ubmVjdCgpOwogICAgICAgICAgdGhpcy5fbmF0aXZlQ2hpbGRyZW5PYnNlcnZlciA9IG51bGw7CiAgICAgICAgfQogICAgICB9CiAgICAgIHRoaXMuX2Nvbm5lY3RlZCA9IGZhbHNlOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiB7dm9pZH0KICAgICAqIEBwcml2YXRlCiAgICAgKi8KICAgIF9zY2hlZHVsZSgpIHsKICAgICAgaWYgKCF0aGlzLl9zY2hlZHVsZWQpIHsKICAgICAgICB0aGlzLl9zY2hlZHVsZWQgPSB0cnVlOwogICAgICAgIFBvbHltZXIuQXN5bmMubWljcm9UYXNrLnJ1bigoKSA9PiB0aGlzLmZsdXNoKCkpOwogICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0ge0FycmF5PE11dGF0aW9uUmVjb3JkPn0gbXV0YXRpb25zIE11dGF0aW9ucyBzaWduYWxlZCBieSB0aGUgbXV0YXRpb24gb2JzZXJ2ZXIKICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgKiBAcHJpdmF0ZQogICAgICovCiAgICBfcHJvY2Vzc011dGF0aW9ucyhtdXRhdGlvbnMpIHsKICAgICAgdGhpcy5fcHJvY2Vzc1Nsb3RNdXRhdGlvbnMobXV0YXRpb25zKTsKICAgICAgdGhpcy5mbHVzaCgpOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIHtBcnJheTxNdXRhdGlvblJlY29yZD59IG11dGF0aW9ucyBNdXRhdGlvbnMgc2lnbmFsZWQgYnkgdGhlIG11dGF0aW9uIG9ic2VydmVyCiAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICogQHByaXZhdGUKICAgICAqLwogICAgX3Byb2Nlc3NTbG90TXV0YXRpb25zKG11dGF0aW9ucykgewogICAgICBpZiAobXV0YXRpb25zKSB7CiAgICAgICAgZm9yIChsZXQgaT0wOyBpIDwgbXV0YXRpb25zLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICBsZXQgbXV0YXRpb24gPSBtdXRhdGlvbnNbaV07CiAgICAgICAgICBpZiAobXV0YXRpb24uYWRkZWROb2RlcykgewogICAgICAgICAgICB0aGlzLl9saXN0ZW5TbG90cyhtdXRhdGlvbi5hZGRlZE5vZGVzKTsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChtdXRhdGlvbi5yZW1vdmVkTm9kZXMpIHsKICAgICAgICAgICAgdGhpcy5fdW5saXN0ZW5TbG90cyhtdXRhdGlvbi5yZW1vdmVkTm9kZXMpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogRmx1c2hlcyB0aGUgb2JzZXJ2ZXIgY2F1c2luZyBhbnkgcGVuZGluZyBjaGFuZ2VzIHRvIGJlIGltbWVkaWF0ZWx5CiAgICAgKiBkZWxpdmVyZWQgdGhlIG9ic2VydmVyIGNhbGxiYWNrLiBCeSBkZWZhdWx0IHRoZXNlIGNoYW5nZXMgYXJlIGRlbGl2ZXJlZAogICAgICogYXN5bmNocm9ub3VzbHkgYXQgdGhlIG5leHQgbWljcm90YXNrIGNoZWNrcG9pbnQuCiAgICAgKgogICAgICogQHJldHVybiB7Ym9vbGVhbn0gUmV0dXJucyB0cnVlIGlmIGFueSBwZW5kaW5nIGNoYW5nZXMgY2F1c2VkIHRoZSBvYnNlcnZlcgogICAgICogY2FsbGJhY2sgdG8gcnVuLgogICAgICovCiAgICBmbHVzaCgpIHsKICAgICAgaWYgKCF0aGlzLl9jb25uZWN0ZWQpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgaWYgKHdpbmRvdy5TaGFkeURPTSkgewogICAgICAgIFNoYWR5RE9NLmZsdXNoKCk7CiAgICAgIH0KICAgICAgaWYgKHRoaXMuX25hdGl2ZUNoaWxkcmVuT2JzZXJ2ZXIpIHsKICAgICAgICB0aGlzLl9wcm9jZXNzU2xvdE11dGF0aW9ucyh0aGlzLl9uYXRpdmVDaGlsZHJlbk9ic2VydmVyLnRha2VSZWNvcmRzKCkpOwogICAgICB9IGVsc2UgaWYgKHRoaXMuX3NoYWR5Q2hpbGRyZW5PYnNlcnZlcikgewogICAgICAgIHRoaXMuX3Byb2Nlc3NTbG90TXV0YXRpb25zKHRoaXMuX3NoYWR5Q2hpbGRyZW5PYnNlcnZlci50YWtlUmVjb3JkcygpKTsKICAgICAgfQogICAgICB0aGlzLl9zY2hlZHVsZWQgPSBmYWxzZTsKICAgICAgbGV0IGluZm8gPSB7CiAgICAgICAgdGFyZ2V0OiB0aGlzLl90YXJnZXQsCiAgICAgICAgYWRkZWROb2RlczogW10sCiAgICAgICAgcmVtb3ZlZE5vZGVzOiBbXQogICAgICB9OwogICAgICBsZXQgbmV3Tm9kZXMgPSB0aGlzLmNvbnN0cnVjdG9yLmdldEZsYXR0ZW5lZE5vZGVzKHRoaXMuX3RhcmdldCk7CiAgICAgIGxldCBzcGxpY2VzID0gUG9seW1lci5BcnJheVNwbGljZS5jYWxjdWxhdGVTcGxpY2VzKG5ld05vZGVzLAogICAgICAgIHRoaXMuX2VmZmVjdGl2ZU5vZGVzKTsKICAgICAgLy8gcHJvY2VzcyByZW1vdmFscwogICAgICBmb3IgKGxldCBpPTAsIHM7IChpPHNwbGljZXMubGVuZ3RoKSAmJiAocz1zcGxpY2VzW2ldKTsgaSsrKSB7CiAgICAgICAgZm9yIChsZXQgaj0wLCBuOyAoaiA8IHMucmVtb3ZlZC5sZW5ndGgpICYmIChuPXMucmVtb3ZlZFtqXSk7IGorKykgewogICAgICAgICAgaW5mby5yZW1vdmVkTm9kZXMucHVzaChuKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgLy8gcHJvY2VzcyBhZGRzCiAgICAgIGZvciAobGV0IGk9MCwgczsgKGk8c3BsaWNlcy5sZW5ndGgpICYmIChzPXNwbGljZXNbaV0pOyBpKyspIHsKICAgICAgICBmb3IgKGxldCBqPXMuaW5kZXg7IGogPCBzLmluZGV4ICsgcy5hZGRlZENvdW50OyBqKyspIHsKICAgICAgICAgIGluZm8uYWRkZWROb2Rlcy5wdXNoKG5ld05vZGVzW2pdKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgLy8gdXBkYXRlIGNhY2hlCiAgICAgIHRoaXMuX2VmZmVjdGl2ZU5vZGVzID0gbmV3Tm9kZXM7CiAgICAgIGxldCBkaWRGbHVzaCA9IGZhbHNlOwogICAgICBpZiAoaW5mby5hZGRlZE5vZGVzLmxlbmd0aCB8fCBpbmZvLnJlbW92ZWROb2Rlcy5sZW5ndGgpIHsKICAgICAgICBkaWRGbHVzaCA9IHRydWU7CiAgICAgICAgdGhpcy5jYWxsYmFjay5jYWxsKHRoaXMuX3RhcmdldCwgaW5mbyk7CiAgICAgIH0KICAgICAgcmV0dXJuIGRpZEZsdXNoOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIHshQXJyYXk8RWxlbWVudHxOb2RlPnwhTm9kZUxpc3Q8Tm9kZT59IG5vZGVMaXN0IE5vZGVzIHRoYXQgY291bGQgY2hhbmdlCiAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICogQHByaXZhdGUKICAgICAqLwogICAgX2xpc3RlblNsb3RzKG5vZGVMaXN0KSB7CiAgICAgIGZvciAobGV0IGk9MDsgaSA8IG5vZGVMaXN0Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgbGV0IG4gPSBub2RlTGlzdFtpXTsKICAgICAgICBpZiAoaXNTbG90KG4pKSB7CiAgICAgICAgICBuLmFkZEV2ZW50TGlzdGVuZXIoJ3Nsb3RjaGFuZ2UnLCB0aGlzLl9ib3VuZFNjaGVkdWxlKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSB7IUFycmF5PEVsZW1lbnR8Tm9kZT58IU5vZGVMaXN0PE5vZGU+fSBub2RlTGlzdCBOb2RlcyB0aGF0IGNvdWxkIGNoYW5nZQogICAgICogQHJldHVybiB7dm9pZH0KICAgICAqIEBwcml2YXRlCiAgICAgKi8KICAgIF91bmxpc3RlblNsb3RzKG5vZGVMaXN0KSB7CiAgICAgIGZvciAobGV0IGk9MDsgaSA8IG5vZGVMaXN0Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgbGV0IG4gPSBub2RlTGlzdFtpXTsKICAgICAgICBpZiAoaXNTbG90KG4pKSB7CiAgICAgICAgICBuLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Nsb3RjaGFuZ2UnLCB0aGlzLl9ib3VuZFNjaGVkdWxlKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgfQoKICBQb2x5bWVyLkZsYXR0ZW5lZE5vZGVzT2JzZXJ2ZXIgPSBGbGF0dGVuZWROb2Rlc09ic2VydmVyOwoKfSkoKTsKPC9zY3JpcHQ+PHNjcmlwdD4KKGZ1bmN0aW9uKCkgewogICd1c2Ugc3RyaWN0JzsKCiAgbGV0IGRlYm91bmNlclF1ZXVlID0gW107CgogIC8qKgogICAqIEFkZHMgYSBgUG9seW1lci5EZWJvdW5jZXJgIHRvIGEgbGlzdCBvZiBnbG9iYWxseSBmbHVzaGFibGUgdGFza3MuCiAgICoKICAgKiBAbWVtYmVyb2YgUG9seW1lcgogICAqIEBwYXJhbSB7IVBvbHltZXIuRGVib3VuY2VyfSBkZWJvdW5jZXIgRGVib3VuY2VyIHRvIGVucXVldWUKICAgKiBAcmV0dXJuIHt2b2lkfQogICAqLwogIFBvbHltZXIuZW5xdWV1ZURlYm91bmNlciA9IGZ1bmN0aW9uKGRlYm91bmNlcikgewogICAgZGVib3VuY2VyUXVldWUucHVzaChkZWJvdW5jZXIpOwogIH07CgogIGZ1bmN0aW9uIGZsdXNoRGVib3VuY2VycygpIHsKICAgIGNvbnN0IGRpZEZsdXNoID0gQm9vbGVhbihkZWJvdW5jZXJRdWV1ZS5sZW5ndGgpOwogICAgd2hpbGUgKGRlYm91bmNlclF1ZXVlLmxlbmd0aCkgewogICAgICB0cnkgewogICAgICAgIGRlYm91bmNlclF1ZXVlLnNoaWZ0KCkuZmx1c2goKTsKICAgICAgfSBjYXRjaChlKSB7CiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICB0aHJvdyBlOwogICAgICAgIH0pOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gZGlkRmx1c2g7CiAgfQoKICAvKioKICAgKiBGb3JjZXMgc2V2ZXJhbCBjbGFzc2VzIG9mIGFzeW5jaHJvbm91c2x5IHF1ZXVlZCB0YXNrcyB0byBmbHVzaDoKICAgKiAtIERlYm91bmNlcnMgYWRkZWQgdmlhIGBlbnF1ZXVlRGVib3VuY2VyYAogICAqIC0gU2hhZHlET00gZGlzdHJpYnV0aW9uCiAgICoKICAgKiBAbWVtYmVyb2YgUG9seW1lcgogICAqIEByZXR1cm4ge3ZvaWR9CiAgICovCiAgUG9seW1lci5mbHVzaCA9IGZ1bmN0aW9uKCkgewogICAgbGV0IHNoYWR5RE9NLCBkZWJvdW5jZXJzOwogICAgZG8gewogICAgICBzaGFkeURPTSA9IHdpbmRvdy5TaGFkeURPTSAmJiBTaGFkeURPTS5mbHVzaCgpOwogICAgICBpZiAod2luZG93LlNoYWR5Q1NTICYmIHdpbmRvdy5TaGFkeUNTUy5TY29waW5nU2hpbSkgewogICAgICAgIHdpbmRvdy5TaGFkeUNTUy5TY29waW5nU2hpbS5mbHVzaCgpOwogICAgICB9CiAgICAgIGRlYm91bmNlcnMgPSBmbHVzaERlYm91bmNlcnMoKTsKICAgIH0gd2hpbGUgKHNoYWR5RE9NIHx8IGRlYm91bmNlcnMpOwogIH07Cgp9KSgpOwo8L3NjcmlwdD48c2NyaXB0PgooZnVuY3Rpb24oKSB7CiAgJ3VzZSBzdHJpY3QnOwoKICBjb25zdCBwID0gRWxlbWVudC5wcm90b3R5cGU7CiAgLyoqCiAgICogQGNvbnN0IHtmdW5jdGlvbih0aGlzOk5vZGUsIHN0cmluZyk6IGJvb2xlYW59CiAgICovCiAgY29uc3Qgbm9ybWFsaXplZE1hdGNoZXNTZWxlY3RvciA9IHAubWF0Y2hlcyB8fCBwLm1hdGNoZXNTZWxlY3RvciB8fAogICAgcC5tb3pNYXRjaGVzU2VsZWN0b3IgfHwgcC5tc01hdGNoZXNTZWxlY3RvciB8fAogICAgcC5vTWF0Y2hlc1NlbGVjdG9yIHx8IHAud2Via2l0TWF0Y2hlc1NlbGVjdG9yOwoKICAvKioKICAgKiBDcm9zcy1wbGF0Zm9ybSBgZWxlbWVudC5tYXRjaGVzYCBzaGltLgogICAqCiAgICogQGZ1bmN0aW9uIG1hdGNoZXNTZWxlY3RvcgogICAqIEBtZW1iZXJvZiBQb2x5bWVyLmRvbQogICAqIEBwYXJhbSB7IU5vZGV9IG5vZGUgTm9kZSB0byBjaGVjayBzZWxlY3RvciBhZ2FpbnN0CiAgICogQHBhcmFtIHtzdHJpbmd9IHNlbGVjdG9yIFNlbGVjdG9yIHRvIG1hdGNoCiAgICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiBub2RlIG1hdGNoZWQgc2VsZWN0b3IKICAgKi8KICBjb25zdCBtYXRjaGVzU2VsZWN0b3IgPSBmdW5jdGlvbihub2RlLCBzZWxlY3RvcikgewogICAgcmV0dXJuIG5vcm1hbGl6ZWRNYXRjaGVzU2VsZWN0b3IuY2FsbChub2RlLCBzZWxlY3Rvcik7CiAgfTsKCiAgLyoqCiAgICogTm9kZSBBUEkgd3JhcHBlciBjbGFzcyByZXR1cm5lZCBmcm9tIGBQb2x5bWVyLmRvbS4odGFyZ2V0KWAgd2hlbgogICAqIGB0YXJnZXRgIGlzIGEgYE5vZGVgLgogICAqCiAgICogQG1lbWJlcm9mIFBvbHltZXIKICAgKi8KICBjbGFzcyBEb21BcGkgewoKICAgIC8qKgogICAgICogQHBhcmFtIHtOb2RlfSBub2RlIE5vZGUgZm9yIHdoaWNoIHRvIGNyZWF0ZSBhIFBvbHltZXIuZG9tIGhlbHBlciBvYmplY3QuCiAgICAgKi8KICAgIGNvbnN0cnVjdG9yKG5vZGUpIHsKICAgICAgdGhpcy5ub2RlID0gbm9kZTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgYW4gaW5zdGFuY2Ugb2YgYFBvbHltZXIuRmxhdHRlbmVkTm9kZXNPYnNlcnZlcmAgdGhhdAogICAgICogbGlzdGVucyBmb3Igbm9kZSBjaGFuZ2VzIG9uIHRoaXMgZWxlbWVudC4KICAgICAqCiAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKCFFbGVtZW50LCB7IHRhcmdldDogIUVsZW1lbnQsIGFkZGVkTm9kZXM6ICFBcnJheTwhRWxlbWVudD4sIHJlbW92ZWROb2RlczogIUFycmF5PCFFbGVtZW50PiB9KTp2b2lkfSBjYWxsYmFjayBDYWxsZWQgd2hlbiBkaXJlY3Qgb3IgZGlzdHJpYnV0ZWQgY2hpbGRyZW4KICAgICAqICAgb2YgdGhpcyBlbGVtZW50IGNoYW5nZXMKICAgICAqIEByZXR1cm4geyFQb2x5bWVyLkZsYXR0ZW5lZE5vZGVzT2JzZXJ2ZXJ9IE9ic2VydmVyIGluc3RhbmNlCiAgICAgKi8KICAgIG9ic2VydmVOb2RlcyhjYWxsYmFjaykgewogICAgICByZXR1cm4gbmV3IFBvbHltZXIuRmxhdHRlbmVkTm9kZXNPYnNlcnZlcih0aGlzLm5vZGUsIGNhbGxiYWNrKTsKICAgIH0KCiAgICAvKioKICAgICAqIERpc2Nvbm5lY3RzIGFuIG9ic2VydmVyIHByZXZpb3VzbHkgY3JlYXRlZCB2aWEgYG9ic2VydmVOb2Rlc2AKICAgICAqCiAgICAgKiBAcGFyYW0geyFQb2x5bWVyLkZsYXR0ZW5lZE5vZGVzT2JzZXJ2ZXJ9IG9ic2VydmVySGFuZGxlIE9ic2VydmVyIGluc3RhbmNlCiAgICAgKiAgIHRvIGRpc2Nvbm5lY3QuCiAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICovCiAgICB1bm9ic2VydmVOb2RlcyhvYnNlcnZlckhhbmRsZSkgewogICAgICBvYnNlcnZlckhhbmRsZS5kaXNjb25uZWN0KCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBQcm92aWRlZCBhcyBhIGJhY2t3YXJkcy1jb21wYXRpYmxlIEFQSSBvbmx5LiAgVGhpcyBtZXRob2QgZG9lcyBub3RoaW5nLgogICAgICogQHJldHVybiB7dm9pZH0KICAgICAqLwogICAgbm90aWZ5T2JzZXJ2ZXIoKSB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBwcm92aWRlZCBub2RlIGlzIGNvbnRhaW5lZCB3aXRoIHRoaXMgZWxlbWVudCdzCiAgICAgKiBsaWdodC1ET00gY2hpbGRyZW4gb3Igc2hhZG93IHJvb3QsIGluY2x1ZGluZyBhbnkgbmVzdGVkIHNoYWRvdyByb290cwogICAgICogb2YgY2hpbGRyZW4gdGhlcmVpbi4KICAgICAqCiAgICAgKiBAcGFyYW0ge05vZGV9IG5vZGUgTm9kZSB0byB0ZXN0CiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIGBub2RlYCBpcyBjb250YWluZWQgd2l0aGluCiAgICAgKiAgIHRoaXMgZWxlbWVudCdzIGxpZ2h0IG9yIHNoYWRvdyBET00uCiAgICAgKi8KICAgIGRlZXBDb250YWlucyhub2RlKSB7CiAgICAgIGlmICh0aGlzLm5vZGUuY29udGFpbnMobm9kZSkpIHsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgICBsZXQgbiA9IG5vZGU7CiAgICAgIGxldCBkb2MgPSBub2RlLm93bmVyRG9jdW1lbnQ7CiAgICAgIC8vIHdhbGsgZnJvbSBub2RlIHRvIGB0aGlzYCBvciBgZG9jdW1lbnRgCiAgICAgIHdoaWxlIChuICYmIG4gIT09IGRvYyAmJiBuICE9PSB0aGlzLm5vZGUpIHsKICAgICAgICAvLyB1c2UgbG9naWNhbCBwYXJlbnRub2RlLCBvciBuYXRpdmUgU2hhZG93Um9vdCBob3N0CiAgICAgICAgbiA9IG4ucGFyZW50Tm9kZSB8fCBuLmhvc3Q7CiAgICAgIH0KICAgICAgcmV0dXJuIG4gPT09IHRoaXMubm9kZTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIHJvb3Qgbm9kZSBvZiB0aGlzIG5vZGUuICBFcXVpdmFsZW50IHRvIGBnZXRSb29kTm9kZSgpYC4KICAgICAqCiAgICAgKiBAcmV0dXJuIHtOb2RlfSBUb3AgbW9zdCBlbGVtZW50IGluIHRoZSBkb20gdHJlZSBpbiB3aGljaCB0aGUgbm9kZQogICAgICogZXhpc3RzLiBJZiB0aGUgbm9kZSBpcyBjb25uZWN0ZWQgdG8gYSBkb2N1bWVudCB0aGlzIGlzIGVpdGhlciBhCiAgICAgKiBzaGFkb3dSb290IG9yIHRoZSBkb2N1bWVudDsgb3RoZXJ3aXNlLCBpdCBtYXkgYmUgdGhlIG5vZGUKICAgICAqIGl0c2VsZiBvciBhIG5vZGUgb3IgZG9jdW1lbnQgZnJhZ21lbnQgY29udGFpbmluZyBpdC4KICAgICAqLwogICAgZ2V0T3duZXJSb290KCkgewogICAgICByZXR1cm4gdGhpcy5ub2RlLmdldFJvb3ROb2RlKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBGb3Igc2xvdCBlbGVtZW50cywgcmV0dXJucyB0aGUgbm9kZXMgYXNzaWduZWQgdG8gdGhlIHNsb3Q7IG90aGVyd2lzZQogICAgICogYW4gZW1wdHkgYXJyYXkuIEl0IGlzIGVxdWl2YWxlbnQgdG8gYDxzbG90Pi5hZGRpZ25lZE5vZGVzKHtmbGF0dGVuOnRydWV9KWAuCiAgICAgKgogICAgICogQHJldHVybiB7IUFycmF5PCFOb2RlPn0gQXJyYXkgb2YgYXNzaWduZWQgbm9kZXMKICAgICAqLwogICAgZ2V0RGlzdHJpYnV0ZWROb2RlcygpIHsKICAgICAgcmV0dXJuICh0aGlzLm5vZGUubG9jYWxOYW1lID09PSAnc2xvdCcpID8KICAgICAgICB0aGlzLm5vZGUuYXNzaWduZWROb2Rlcyh7ZmxhdHRlbjogdHJ1ZX0pIDoKICAgICAgICBbXTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgYW4gYXJyYXkgb2YgYWxsIHNsb3RzIHRoaXMgZWxlbWVudCB3YXMgZGlzdHJpYnV0ZWQgdG8uCiAgICAgKgogICAgICogQHJldHVybiB7IUFycmF5PCFIVE1MU2xvdEVsZW1lbnQ+fSBEZXNjcmlwdGlvbgogICAgICovCiAgICBnZXREZXN0aW5hdGlvbkluc2VydGlvblBvaW50cygpIHsKICAgICAgbGV0IGlwJCA9IFtdOwogICAgICBsZXQgbiA9IHRoaXMubm9kZS5hc3NpZ25lZFNsb3Q7CiAgICAgIHdoaWxlIChuKSB7CiAgICAgICAgaXAkLnB1c2gobik7CiAgICAgICAgbiA9IG4uYXNzaWduZWRTbG90OwogICAgICB9CiAgICAgIHJldHVybiBpcCQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBDYWxscyBgaW1wb3J0Tm9kZWAgb24gdGhlIGBvd25lckRvY3VtZW50YCBmb3IgdGhpcyBub2RlLgogICAgICoKICAgICAqIEBwYXJhbSB7IU5vZGV9IG5vZGUgTm9kZSB0byBpbXBvcnQKICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZGVlcCBUcnVlIGlmIHRoZSBub2RlIHNob3VsZCBiZSBjbG9uZWQgZGVlcGx5IGR1cmluZwogICAgICogICBpbXBvcnQKICAgICAqIEByZXR1cm4ge05vZGV9IENsb25lIG9mIGdpdmVuIG5vZGUgaW1wb3J0ZWQgdG8gdGhpcyBvd25lciBkb2N1bWVudAogICAgICovCiAgICBpbXBvcnROb2RlKG5vZGUsIGRlZXApIHsKICAgICAgbGV0IGRvYyA9IHRoaXMubm9kZSBpbnN0YW5jZW9mIERvY3VtZW50ID8gdGhpcy5ub2RlIDoKICAgICAgICB0aGlzLm5vZGUub3duZXJEb2N1bWVudDsKICAgICAgcmV0dXJuIGRvYy5pbXBvcnROb2RlKG5vZGUsIGRlZXApOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiB7IUFycmF5PCFOb2RlPn0gUmV0dXJucyBhIGZsYXR0ZW5lZCBsaXN0IG9mIGFsbCBjaGlsZCBub2RlcyBhbmQKICAgICAqIG5vZGVzIGFzc2lnbmVkIHRvIGNoaWxkIHNsb3RzLgogICAgICovCiAgICBnZXRFZmZlY3RpdmVDaGlsZE5vZGVzKCkgewogICAgICByZXR1cm4gUG9seW1lci5GbGF0dGVuZWROb2Rlc09ic2VydmVyLmdldEZsYXR0ZW5lZE5vZGVzKHRoaXMubm9kZSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGEgZmlsdGVyZWQgbGlzdCBvZiBmbGF0dGVuZWQgY2hpbGQgZWxlbWVudHMgZm9yIHRoaXMgZWxlbWVudCBiYXNlZAogICAgICogb24gdGhlIGdpdmVuIHNlbGVjdG9yLgogICAgICoKICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzZWxlY3RvciBTZWxlY3RvciB0byBmaWx0ZXIgbm9kZXMgYWdhaW5zdAogICAgICogQHJldHVybiB7IUFycmF5PCFIVE1MRWxlbWVudD59IExpc3Qgb2YgZmxhdHRlbmVkIGNoaWxkIGVsZW1lbnRzCiAgICAgKi8KICAgIHF1ZXJ5RGlzdHJpYnV0ZWRFbGVtZW50cyhzZWxlY3RvcikgewogICAgICBsZXQgYyQgPSB0aGlzLmdldEVmZmVjdGl2ZUNoaWxkTm9kZXMoKTsKICAgICAgbGV0IGxpc3QgPSBbXTsKICAgICAgZm9yIChsZXQgaT0wLCBsPWMkLmxlbmd0aCwgYzsgKGk8bCkgJiYgKGM9YyRbaV0pOyBpKyspIHsKICAgICAgICBpZiAoKGMubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFKSAmJgogICAgICAgICAgICBtYXRjaGVzU2VsZWN0b3IoYywgc2VsZWN0b3IpKSB7CiAgICAgICAgICBsaXN0LnB1c2goYyk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBsaXN0OwogICAgfQoKICAgIC8qKgogICAgICogRm9yIHNoYWRvdyByb290cywgcmV0dXJucyB0aGUgY3VycmVudGx5IGZvY3VzZWQgZWxlbWVudCB3aXRoaW4gdGhpcwogICAgICogc2hhZG93IHJvb3QuCiAgICAgKgogICAgICogQHJldHVybiB7Tm9kZXx1bmRlZmluZWR9IEN1cnJlbnRseSBmb2N1c2VkIGVsZW1lbnQKICAgICAqLwogICAgZ2V0IGFjdGl2ZUVsZW1lbnQoKSB7CiAgICAgIGxldCBub2RlID0gdGhpcy5ub2RlOwogICAgICByZXR1cm4gbm9kZS5fYWN0aXZlRWxlbWVudCAhPT0gdW5kZWZpbmVkID8gbm9kZS5fYWN0aXZlRWxlbWVudCA6IG5vZGUuYWN0aXZlRWxlbWVudDsKICAgIH0KICB9CgogIGZ1bmN0aW9uIGZvcndhcmRNZXRob2RzKHByb3RvLCBtZXRob2RzKSB7CiAgICBmb3IgKGxldCBpPTA7IGkgPCBtZXRob2RzLmxlbmd0aDsgaSsrKSB7CiAgICAgIGxldCBtZXRob2QgPSBtZXRob2RzW2ldOwogICAgICAvKiBlc2xpbnQtZGlzYWJsZSB2YWxpZC1qc2RvYyAqLwogICAgICBwcm90b1ttZXRob2RdID0gLyoqIEB0aGlzIHtEb21BcGl9ICovIGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiB0aGlzLm5vZGVbbWV0aG9kXS5hcHBseSh0aGlzLm5vZGUsIGFyZ3VtZW50cyk7CiAgICAgIH07CiAgICAgIC8qIGVzbGludC1lbmFibGUgKi8KICAgIH0KICB9CgogIGZ1bmN0aW9uIGZvcndhcmRSZWFkT25seVByb3BlcnRpZXMocHJvdG8sIHByb3BlcnRpZXMpIHsKICAgIGZvciAobGV0IGk9MDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHsKICAgICAgbGV0IG5hbWUgPSBwcm9wZXJ0aWVzW2ldOwogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocHJvdG8sIG5hbWUsIHsKICAgICAgICBnZXQ6IGZ1bmN0aW9uKCkgewogICAgICAgICAgY29uc3QgZG9tQXBpID0gLyoqIEB0eXBlIHtEb21BcGl9ICovKHRoaXMpOwogICAgICAgICAgcmV0dXJuIGRvbUFwaS5ub2RlW25hbWVdOwogICAgICAgIH0sCiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCiAgICAgIH0pOwogICAgfQogIH0KCiAgZnVuY3Rpb24gZm9yd2FyZFByb3BlcnRpZXMocHJvdG8sIHByb3BlcnRpZXMpIHsKICAgIGZvciAobGV0IGk9MDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHsKICAgICAgbGV0IG5hbWUgPSBwcm9wZXJ0aWVzW2ldOwogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocHJvdG8sIG5hbWUsIHsKICAgICAgICBnZXQ6IGZ1bmN0aW9uKCkgewogICAgICAgICAgY29uc3QgZG9tQXBpID0gLyoqIEB0eXBlIHtEb21BcGl9ICovKHRoaXMpOwogICAgICAgICAgcmV0dXJuIGRvbUFwaS5ub2RlW25hbWVdOwogICAgICAgIH0sCiAgICAgICAgc2V0OiBmdW5jdGlvbih2YWx1ZSkgewogICAgICAgICAgLyoqIEB0eXBlIHtEb21BcGl9ICovICh0aGlzKS5ub2RlW25hbWVdID0gdmFsdWU7CiAgICAgICAgfSwKICAgICAgICBjb25maWd1cmFibGU6IHRydWUKICAgICAgfSk7CiAgICB9CiAgfQoKICBmb3J3YXJkTWV0aG9kcyhEb21BcGkucHJvdG90eXBlLCBbCiAgICAnY2xvbmVOb2RlJywgJ2FwcGVuZENoaWxkJywgJ2luc2VydEJlZm9yZScsICdyZW1vdmVDaGlsZCcsCiAgICAncmVwbGFjZUNoaWxkJywgJ3NldEF0dHJpYnV0ZScsICdyZW1vdmVBdHRyaWJ1dGUnLAogICAgJ3F1ZXJ5U2VsZWN0b3InLCAncXVlcnlTZWxlY3RvckFsbCcKICBdKTsKCiAgZm9yd2FyZFJlYWRPbmx5UHJvcGVydGllcyhEb21BcGkucHJvdG90eXBlLCBbCiAgICAncGFyZW50Tm9kZScsICdmaXJzdENoaWxkJywgJ2xhc3RDaGlsZCcsCiAgICAnbmV4dFNpYmxpbmcnLCAncHJldmlvdXNTaWJsaW5nJywgJ2ZpcnN0RWxlbWVudENoaWxkJywKICAgICdsYXN0RWxlbWVudENoaWxkJywgJ25leHRFbGVtZW50U2libGluZycsICdwcmV2aW91c0VsZW1lbnRTaWJsaW5nJywKICAgICdjaGlsZE5vZGVzJywgJ2NoaWxkcmVuJywgJ2NsYXNzTGlzdCcKICBdKTsKCiAgZm9yd2FyZFByb3BlcnRpZXMoRG9tQXBpLnByb3RvdHlwZSwgWwogICAgJ3RleHRDb250ZW50JywgJ2lubmVySFRNTCcKICBdKTsKCgogIC8qKgogICAqIEV2ZW50IEFQSSB3cmFwcGVyIGNsYXNzIHJldHVybmVkIGZyb20gYFBvbHltZXIuZG9tLih0YXJnZXQpYCB3aGVuCiAgICogYHRhcmdldGAgaXMgYW4gYEV2ZW50YC4KICAgKi8KICBjbGFzcyBFdmVudEFwaSB7CiAgICBjb25zdHJ1Y3RvcihldmVudCkgewogICAgICB0aGlzLmV2ZW50ID0gZXZlbnQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBmaXJzdCBub2RlIG9uIHRoZSBgY29tcG9zZWRQYXRoYCBvZiB0aGlzIGV2ZW50LgogICAgICoKICAgICAqIEByZXR1cm4geyFFdmVudFRhcmdldH0gVGhlIG5vZGUgdGhpcyBldmVudCB3YXMgZGlzcGF0Y2hlZCB0bwogICAgICovCiAgICBnZXQgcm9vdFRhcmdldCgpIHsKICAgICAgcmV0dXJuIHRoaXMuZXZlbnQuY29tcG9zZWRQYXRoKClbMF07CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBsb2NhbCAocmUtdGFyZ2V0ZWQpIHRhcmdldCBmb3IgdGhpcyBldmVudC4KICAgICAqCiAgICAgKiBAcmV0dXJuIHshRXZlbnRUYXJnZXR9IFRoZSBsb2NhbCAocmUtdGFyZ2V0ZWQpIHRhcmdldCBmb3IgdGhpcyBldmVudC4KICAgICAqLwogICAgZ2V0IGxvY2FsVGFyZ2V0KCkgewogICAgICByZXR1cm4gdGhpcy5ldmVudC50YXJnZXQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBgY29tcG9zZWRQYXRoYCBmb3IgdGhpcyBldmVudC4KICAgICAqIEByZXR1cm4geyFBcnJheTwhRXZlbnRUYXJnZXQ+fSBUaGUgbm9kZXMgdGhpcyBldmVudCBwcm9wYWdhdGVkIHRocm91Z2gKICAgICAqLwogICAgZ2V0IHBhdGgoKSB7CiAgICAgIHJldHVybiB0aGlzLmV2ZW50LmNvbXBvc2VkUGF0aCgpOwogICAgfQogIH0KCiAgUG9seW1lci5Eb21BcGkgPSBEb21BcGk7CgogIC8qKgogICAqIEBmdW5jdGlvbgogICAqIEBwYXJhbSB7Ym9vbGVhbj19IGRlZXAKICAgKiBAcmV0dXJuIHshTm9kZX0KICAgKi8KICBQb2x5bWVyLkRvbUFwaS5wcm90b3R5cGUuY2xvbmVOb2RlOwogIC8qKgogICAqIEBmdW5jdGlvbgogICAqIEBwYXJhbSB7IU5vZGV9IG5vZGUKICAgKiBAcmV0dXJuIHshTm9kZX0KICAgKi8KICBQb2x5bWVyLkRvbUFwaS5wcm90b3R5cGUuYXBwZW5kQ2hpbGQ7CiAgLyoqCiAgICogQGZ1bmN0aW9uCiAgICogQHBhcmFtIHshTm9kZX0gbmV3Q2hpbGQKICAgKiBAcGFyYW0ge05vZGV9IHJlZkNoaWxkCiAgICogQHJldHVybiB7IU5vZGV9CiAgICovCiAgUG9seW1lci5Eb21BcGkucHJvdG90eXBlLmluc2VydEJlZm9yZTsKICAvKioKICAgKiBAZnVuY3Rpb24KICAgKiBAcGFyYW0geyFOb2RlfSBub2RlCiAgICogQHJldHVybiB7IU5vZGV9CiAgICovCiAgUG9seW1lci5Eb21BcGkucHJvdG90eXBlLnJlbW92ZUNoaWxkOwogIC8qKgogICAqIEBmdW5jdGlvbgogICAqIEBwYXJhbSB7IU5vZGV9IG9sZENoaWxkCiAgICogQHBhcmFtIHshTm9kZX0gbmV3Q2hpbGQKICAgKiBAcmV0dXJuIHshTm9kZX0KICAgKi8KICBQb2x5bWVyLkRvbUFwaS5wcm90b3R5cGUucmVwbGFjZUNoaWxkOwogIC8qKgogICAqIEBmdW5jdGlvbgogICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lCiAgICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlCiAgICogQHJldHVybiB7dm9pZH0KICAgKi8KICBQb2x5bWVyLkRvbUFwaS5wcm90b3R5cGUuc2V0QXR0cmlidXRlOwogIC8qKgogICAqIEBmdW5jdGlvbgogICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lCiAgICogQHJldHVybiB7dm9pZH0KICAgKi8KICBQb2x5bWVyLkRvbUFwaS5wcm90b3R5cGUucmVtb3ZlQXR0cmlidXRlOwogIC8qKgogICAqIEBmdW5jdGlvbgogICAqIEBwYXJhbSB7c3RyaW5nfSBzZWxlY3RvcgogICAqIEByZXR1cm4gez9FbGVtZW50fQogICAqLwogIFBvbHltZXIuRG9tQXBpLnByb3RvdHlwZS5xdWVyeVNlbGVjdG9yOwogIC8qKgogICAqIEBmdW5jdGlvbgogICAqIEBwYXJhbSB7c3RyaW5nfSBzZWxlY3RvcgogICAqIEByZXR1cm4geyFOb2RlTGlzdDwhRWxlbWVudD59CiAgICovCiAgUG9seW1lci5Eb21BcGkucHJvdG90eXBlLnF1ZXJ5U2VsZWN0b3JBbGw7CgogIC8qKgogICAqIExlZ2FjeSBET00gYW5kIEV2ZW50IG1hbmlwdWxhdGlvbiBBUEkgd3JhcHBlciBmYWN0b3J5IHVzZWQgdG8gYWJzdHJhY3QKICAgKiBkaWZmZXJlbmNlcyBiZXR3ZWVuIG5hdGl2ZSBTaGFkb3cgRE9NIGFuZCAiU2hhZHkgRE9NIiB3aGVuIHBvbHlmaWxsaW5nIG9uCiAgICogb2xkZXIgYnJvd3NlcnMuCiAgICoKICAgKiBOb3RlIHRoYXQgaW4gUG9seW1lciAyLnggdXNlIG9mIGBQb2x5bWVyLmRvbWAgaXMgbm8gbG9uZ2VyIHJlcXVpcmVkIGFuZAogICAqIGluIHRoZSBtYWpvcml0eSBvZiBjYXNlcyBzaW1wbHkgZmFjYWRlcyBkaXJlY3RseSB0byB0aGUgc3RhbmRhcmQgbmF0aXZlCiAgICogQVBJLgogICAqCiAgICogQG5hbWVzcGFjZQogICAqIEBzdW1tYXJ5IExlZ2FjeSBET00gYW5kIEV2ZW50IG1hbmlwdWxhdGlvbiBBUEkgd3JhcHBlciBmYWN0b3J5IHVzZWQgdG8KICAgKiBhYnN0cmFjdCBkaWZmZXJlbmNlcyBiZXR3ZWVuIG5hdGl2ZSBTaGFkb3cgRE9NIGFuZCAiU2hhZHkgRE9NLiIKICAgKiBAbWVtYmVyb2YgUG9seW1lcgogICAqIEBwYXJhbSB7KE5vZGV8RXZlbnQpPX0gb2JqIE5vZGUgb3IgZXZlbnQgdG8gb3BlcmF0ZSBvbgogICAqIEByZXR1cm4geyFEb21BcGl8IUV2ZW50QXBpfSBXcmFwcGVyIHByb3ZpZGluZyBlaXRoZXIgbm9kZSBBUEkgb3IgZXZlbnQgQVBJCiAgICovCiAgUG9seW1lci5kb20gPSBmdW5jdGlvbihvYmopIHsKICAgIG9iaiA9IG9iaiB8fCBkb2N1bWVudDsKICAgIGlmICghb2JqLl9fZG9tQXBpKSB7CiAgICAgIGxldCBoZWxwZXI7CiAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBFdmVudCkgewogICAgICAgIGhlbHBlciA9IG5ldyBFdmVudEFwaShvYmopOwogICAgICB9IGVsc2UgewogICAgICAgIGhlbHBlciA9IG5ldyBEb21BcGkob2JqKTsKICAgICAgfQogICAgICBvYmouX19kb21BcGkgPSBoZWxwZXI7CiAgICB9CiAgICByZXR1cm4gb2JqLl9fZG9tQXBpOwogIH07CgogIFBvbHltZXIuZG9tLm1hdGNoZXNTZWxlY3RvciA9IG1hdGNoZXNTZWxlY3RvcjsKCiAgLyoqCiAgICogRm9yY2VzIHNldmVyYWwgY2xhc3NlcyBvZiBhc3luY2hyb25vdXNseSBxdWV1ZWQgdGFza3MgdG8gZmx1c2g6CiAgICogLSBEZWJvdW5jZXJzIGFkZGVkIHZpYSBgUG9seW1lci5lbnF1ZXVlRGVib3VuY2VyYAogICAqIC0gU2hhZHlET00gZGlzdHJpYnV0aW9uCiAgICoKICAgKiBUaGlzIG1ldGhvZCBmYWNhZGVzIHRvIGBQb2x5bWVyLmZsdXNoYC4KICAgKgogICAqIEBtZW1iZXJvZiBQb2x5bWVyLmRvbQogICAqLwogIFBvbHltZXIuZG9tLmZsdXNoID0gUG9seW1lci5mbHVzaDsKCiAgLyoqCiAgICogQWRkcyBhIGBQb2x5bWVyLkRlYm91bmNlcmAgdG8gYSBsaXN0IG9mIGdsb2JhbGx5IGZsdXNoYWJsZSB0YXNrcy4KICAgKgogICAqIFRoaXMgbWV0aG9kIGZhY2FkZXMgdG8gYFBvbHltZXIuZW5xdWV1ZURlYm91bmNlcmAuCiAgICoKICAgKiBAbWVtYmVyb2YgUG9seW1lci5kb20KICAgKiBAcGFyYW0geyFQb2x5bWVyLkRlYm91bmNlcn0gZGVib3VuY2VyIERlYm91bmNlciB0byBlbnF1ZXVlCiAgICovCiAgUG9seW1lci5kb20uYWRkRGVib3VuY2VyID0gUG9seW1lci5lbnF1ZXVlRGVib3VuY2VyOwp9KSgpOwo8L3NjcmlwdD48c2NyaXB0PgooZnVuY3Rpb24oKSB7CgogICd1c2Ugc3RyaWN0JzsKCiAgbGV0IHN0eWxlSW50ZXJmYWNlID0gd2luZG93LlNoYWR5Q1NTOwoKICAvKioKICAgKiBFbGVtZW50IGNsYXNzIG1peGluIHRoYXQgcHJvdmlkZXMgUG9seW1lcidzICJsZWdhY3kiIEFQSSBpbnRlbmRlZCB0byBiZQogICAqIGJhY2t3YXJkLWNvbXBhdGlibGUgdG8gdGhlIGdyZWF0ZXN0IGV4dGVudCBwb3NzaWJsZSB3aXRoIHRoZSBBUEkKICAgKiBmb3VuZCBvbiB0aGUgUG9seW1lciAxLnggYFBvbHltZXIuQmFzZWAgcHJvdG90eXBlIGFwcGxpZWQgdG8gYWxsIGVsZW1lbnRzCiAgICogZGVmaW5lZCB1c2luZyB0aGUgYFBvbHltZXIoey4uLn0pYCBmdW5jdGlvbi4KICAgKgogICAqIEBtaXhpbkZ1bmN0aW9uCiAgICogQHBvbHltZXIKICAgKiBAYXBwbGllc01peGluIFBvbHltZXIuRWxlbWVudE1peGluCiAgICogQGFwcGxpZXNNaXhpbiBQb2x5bWVyLkdlc3R1cmVFdmVudExpc3RlbmVycwogICAqIEBwcm9wZXJ0eSBpc0F0dGFjaGVkIHtib29sZWFufSBTZXQgdG8gYHRydWVgIGluIHRoaXMgZWxlbWVudCdzCiAgICogICBgY29ubmVjdGVkQ2FsbGJhY2tgIGFuZCBgZmFsc2VgIGluIGBkaXNjb25uZWN0ZWRDYWxsYmFja2AKICAgKiBAbWVtYmVyb2YgUG9seW1lcgogICAqIEBzdW1tYXJ5IEVsZW1lbnQgY2xhc3MgbWl4aW4gdGhhdCBwcm92aWRlcyBQb2x5bWVyJ3MgImxlZ2FjeSIgQVBJCiAgICovCiAgUG9seW1lci5MZWdhY3lFbGVtZW50TWl4aW4gPSBQb2x5bWVyLmRlZHVwaW5nTWl4aW4oKGJhc2UpID0+IHsKCiAgICAvKioKICAgICAqIEBjb25zdHJ1Y3RvcgogICAgICogQGV4dGVuZHMge2Jhc2V9CiAgICAgKiBAaW1wbGVtZW50cyB7UG9seW1lcl9FbGVtZW50TWl4aW59CiAgICAgKiBAaW1wbGVtZW50cyB7UG9seW1lcl9HZXN0dXJlRXZlbnRMaXN0ZW5lcnN9CiAgICAgKiBAaW1wbGVtZW50cyB7UG9seW1lcl9EaXJNaXhpbn0KICAgICAqIEBwcml2YXRlCiAgICAgKi8KICAgIGNvbnN0IGxlZ2FjeUVsZW1lbnRCYXNlID0gUG9seW1lci5EaXJNaXhpbihQb2x5bWVyLkdlc3R1cmVFdmVudExpc3RlbmVycyhQb2x5bWVyLkVsZW1lbnRNaXhpbihiYXNlKSkpOwoKICAgIC8qKgogICAgICogTWFwIG9mIHNpbXBsZSBuYW1lcyB0byB0b3VjaCBhY3Rpb24gbmFtZXMKICAgICAqIEBkaWN0CiAgICAgKi8KICAgIGNvbnN0IERJUkVDVElPTl9NQVAgPSB7CiAgICAgICd4JzogJ3Bhbi14JywKICAgICAgJ3knOiAncGFuLXknLAogICAgICAnbm9uZSc6ICdub25lJywKICAgICAgJ2FsbCc6ICdhdXRvJwogICAgfTsKCiAgICAvKioKICAgICAqIEBwb2x5bWVyCiAgICAgKiBAbWl4aW5DbGFzcwogICAgICogQGV4dGVuZHMge2xlZ2FjeUVsZW1lbnRCYXNlfQogICAgICogQGltcGxlbWVudHMge1BvbHltZXJfTGVnYWN5RWxlbWVudE1peGlufQogICAgICogQHVucmVzdHJpY3RlZAogICAgICovCiAgICBjbGFzcyBMZWdhY3lFbGVtZW50IGV4dGVuZHMgbGVnYWN5RWxlbWVudEJhc2UgewoKICAgICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgc3VwZXIoKTsKICAgICAgICAvKiogQHR5cGUge2Jvb2xlYW59ICovCiAgICAgICAgdGhpcy5pc0F0dGFjaGVkOwogICAgICAgIC8qKiBAdHlwZSB7V2Vha01hcDwhRWxlbWVudCwgIU9iamVjdDxzdHJpbmcsICFGdW5jdGlvbj4+fSAqLwogICAgICAgIHRoaXMuX19ib3VuZExpc3RlbmVyczsKICAgICAgICAvKiogQHR5cGUge09iamVjdDxzdHJpbmcsIEZ1bmN0aW9uPn0gKi8KICAgICAgICB0aGlzLl9kZWJvdW5jZXJzOwogICAgICB9CgogICAgICAvKioKICAgICAgICogRm9yd2FyZHMgYGltcG9ydE1ldGFgIGZyb20gdGhlIHByb3RvdHlwZSAoaS5lLiBmcm9tIHRoZSBpbmZvIG9iamVjdAogICAgICAgKiBwYXNzZWQgdG8gYFBvbHltZXIoey4uLn0pYCkgdG8gdGhlIHN0YXRpYyBBUEkuCiAgICAgICAqCiAgICAgICAqIEByZXR1cm4geyFPYmplY3R9IFRoZSBgaW1wb3J0Lm1ldGFgIG9iamVjdCBzZXQgb24gdGhlIHByb3RvdHlwZQogICAgICAgKiBAc3VwcHJlc3Mge21pc3NpbmdQcm9wZXJ0aWVzfSBgdGhpc2AgaXMgYWx3YXlzIGluIHRoZSBpbnN0YW5jZSBpbgogICAgICAgKiAgY2xvc3VyZSBmb3Igc29tZSByZWFzb24gZXZlbiBpbiBhIHN0YXRpYyBtZXRob2QsIHJhdGhlciB0aGFuIHRoZSBjbGFzcwogICAgICAgKi8KICAgICAgc3RhdGljIGdldCBpbXBvcnRNZXRhKCkgewogICAgICAgIHJldHVybiB0aGlzLnByb3RvdHlwZS5pbXBvcnRNZXRhOwogICAgICB9CgogICAgICAvKioKICAgICAgICogTGVnYWN5IGNhbGxiYWNrIGNhbGxlZCBkdXJpbmcgdGhlIGBjb25zdHJ1Y3RvcmAsIGZvciBvdmVycmlkaW5nCiAgICAgICAqIGJ5IHRoZSB1c2VyLgogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKi8KICAgICAgY3JlYXRlZCgpIHt9CgogICAgICAvKioKICAgICAgICogUHJvdmlkZXMgYW4gaW1wbGVtZW50YXRpb24gb2YgYGNvbm5lY3RlZENhbGxiYWNrYAogICAgICAgKiB3aGljaCBhZGRzIFBvbHltZXIgbGVnYWN5IEFQSSdzIGBhdHRhY2hlZGAgbWV0aG9kLgogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKiBAb3ZlcnJpZGUKICAgICAgICovCiAgICAgIGNvbm5lY3RlZENhbGxiYWNrKCkgewogICAgICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7CiAgICAgICAgdGhpcy5pc0F0dGFjaGVkID0gdHJ1ZTsKICAgICAgICB0aGlzLmF0dGFjaGVkKCk7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBMZWdhY3kgY2FsbGJhY2sgY2FsbGVkIGR1cmluZyBgY29ubmVjdGVkQ2FsbGJhY2tgLCBmb3Igb3ZlcnJpZGluZwogICAgICAgKiBieSB0aGUgdXNlci4KICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICovCiAgICAgIGF0dGFjaGVkKCkge30KCiAgICAgIC8qKgogICAgICAgKiBQcm92aWRlcyBhbiBpbXBsZW1lbnRhdGlvbiBvZiBgZGlzY29ubmVjdGVkQ2FsbGJhY2tgCiAgICAgICAqIHdoaWNoIGFkZHMgUG9seW1lciBsZWdhY3kgQVBJJ3MgYGRldGFjaGVkYCBtZXRob2QuCiAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAqIEBvdmVycmlkZQogICAgICAgKi8KICAgICAgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICAgICAgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTsKICAgICAgICB0aGlzLmlzQXR0YWNoZWQgPSBmYWxzZTsKICAgICAgICB0aGlzLmRldGFjaGVkKCk7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBMZWdhY3kgY2FsbGJhY2sgY2FsbGVkIGR1cmluZyBgZGlzY29ubmVjdGVkQ2FsbGJhY2tgLCBmb3Igb3ZlcnJpZGluZwogICAgICAgKiBieSB0aGUgdXNlci4KICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICovCiAgICAgIGRldGFjaGVkKCkge30KCiAgICAgIC8qKgogICAgICAgKiBQcm92aWRlcyBhbiBvdmVycmlkZSBpbXBsZW1lbnRhdGlvbiBvZiBgYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrYAogICAgICAgKiB3aGljaCBhZGRzIHRoZSBQb2x5bWVyIGxlZ2FjeSBBUEkncyBgYXR0cmlidXRlQ2hhbmdlZGAgbWV0aG9kLgogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBOYW1lIG9mIGF0dHJpYnV0ZS4KICAgICAgICogQHBhcmFtIHs/c3RyaW5nfSBvbGQgT2xkIHZhbHVlIG9mIGF0dHJpYnV0ZS4KICAgICAgICogQHBhcmFtIHs/c3RyaW5nfSB2YWx1ZSBDdXJyZW50IHZhbHVlIG9mIGF0dHJpYnV0ZS4KICAgICAgICogQHBhcmFtIHs/c3RyaW5nfSBuYW1lc3BhY2UgQXR0cmlidXRlIG5hbWVzcGFjZS4KICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICogQG92ZXJyaWRlCiAgICAgICAqLwogICAgICBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2sobmFtZSwgb2xkLCB2YWx1ZSwgbmFtZXNwYWNlKSB7CiAgICAgICAgaWYgKG9sZCAhPT0gdmFsdWUpIHsKICAgICAgICAgIHN1cGVyLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhuYW1lLCBvbGQsIHZhbHVlLCBuYW1lc3BhY2UpOwogICAgICAgICAgdGhpcy5hdHRyaWJ1dGVDaGFuZ2VkKG5hbWUsIG9sZCwgdmFsdWUpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIExlZ2FjeSBjYWxsYmFjayBjYWxsZWQgZHVyaW5nIGBhdHRyaWJ1dGVDaGFuZ2VkQ2hhbGxiYWNrYCwgZm9yIG92ZXJyaWRpbmcKICAgICAgICogYnkgdGhlIHVzZXIuCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIE5hbWUgb2YgYXR0cmlidXRlLgogICAgICAgKiBAcGFyYW0gez9zdHJpbmd9IG9sZCBPbGQgdmFsdWUgb2YgYXR0cmlidXRlLgogICAgICAgKiBAcGFyYW0gez9zdHJpbmd9IHZhbHVlIEN1cnJlbnQgdmFsdWUgb2YgYXR0cmlidXRlLgogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKi8KICAgICAgYXR0cmlidXRlQ2hhbmdlZChuYW1lLCBvbGQsIHZhbHVlKSB7fSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzCgogICAgICAvKioKICAgICAgICogT3ZlcnJpZGVzIHRoZSBkZWZhdWx0IGBQb2x5bWVyLlByb3BlcnR5RWZmZWN0c2AgaW1wbGVtZW50YXRpb24gdG8KICAgICAgICogYWRkIHN1cHBvcnQgZm9yIGNsYXNzIGluaXRpYWxpemF0aW9uIHZpYSB0aGUgYF9yZWdpc3RlcmVkYCBjYWxsYmFjay4KICAgICAgICogVGhpcyBpcyBjYWxsZWQgb25seSB3aGVuIHRoZSBmaXJzdCBpbnN0YW5jZSBvZiB0aGUgZWxlbWVudCBpcyBjcmVhdGVkLgogICAgICAgKgogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKiBAb3ZlcnJpZGUKICAgICAgICogQHN1cHByZXNzIHtpbnZhbGlkQ2FzdHN9CiAgICAgICAqLwogICAgICBfaW5pdGlhbGl6ZVByb3BlcnRpZXMoKSB7CiAgICAgICAgbGV0IHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpOwogICAgICAgIGlmICghcHJvdG8uaGFzT3duUHJvcGVydHkoJ19faGFzUmVnaXN0ZXJGaW5pc2hlZCcpKSB7CiAgICAgICAgICB0aGlzLl9yZWdpc3RlcmVkKCk7CiAgICAgICAgICAvLyBiYWNrc3RvcCBpbiBjYXNlIHRoZSBgX3JlZ2lzdGVyZWRgIGltcGxlbWVudGF0aW9uIGRvZXMgbm90IHNldCB0aGlzCiAgICAgICAgICBwcm90by5fX2hhc1JlZ2lzdGVyRmluaXNoZWQgPSB0cnVlOwogICAgICAgIH0KICAgICAgICBzdXBlci5faW5pdGlhbGl6ZVByb3BlcnRpZXMoKTsKICAgICAgICB0aGlzLnJvb3QgPSAvKiogQHR5cGUge0hUTUxFbGVtZW50fSAqLyh0aGlzKTsKICAgICAgICB0aGlzLmNyZWF0ZWQoKTsKICAgICAgICAvLyBFbnN1cmUgbGlzdGVuZXJzIGFyZSBhcHBsaWVkIGltbWVkaWF0ZWx5IHNvIHRoYXQgdGhleSBhcmUKICAgICAgICAvLyBhZGRlZCBiZWZvcmUgZGVjbGFyYXRpdmUgZXZlbnQgbGlzdGVuZXJzLiBUaGlzIGFsbG93cyBhbiBlbGVtZW50IHRvCiAgICAgICAgLy8gZGVjb3JhdGUgaXRzZWxmIHZpYSBhbiBldmVudCBwcmlvciB0byBhbnkgZGVjbGFyYXRpdmUgbGlzdGVuZXJzCiAgICAgICAgLy8gc2VlaW5nIHRoZSBldmVudC4gTm90ZSwgdGhpcyBlbnN1cmVzIGNvbXBhdGliaWxpdHkgd2l0aCAxLnggb3JkZXJpbmcuCiAgICAgICAgdGhpcy5fYXBwbHlMaXN0ZW5lcnMoKTsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIENhbGxlZCBhdXRvbWF0aWNhbGx5IHdoZW4gYW4gZWxlbWVudCBpcyBpbml0aWFsaXppbmcuCiAgICAgICAqIFVzZXJzIG1heSBvdmVycmlkZSB0aGlzIG1ldGhvZCB0byBwZXJmb3JtIGNsYXNzIHJlZ2lzdHJhdGlvbiB0aW1lCiAgICAgICAqIHdvcmsuIFRoZSBpbXBsZW1lbnRhdGlvbiBzaG91bGQgZW5zdXJlIHRoZSB3b3JrIGlzIHBlcmZvcm1lZAogICAgICAgKiBvbmx5IG9uY2UgZm9yIHRoZSBjbGFzcy4KICAgICAgICogQHByb3RlY3RlZAogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKi8KICAgICAgX3JlZ2lzdGVyZWQoKSB7fQoKICAgICAgLyoqCiAgICAgICAqIE92ZXJyaWRlcyB0aGUgZGVmYXVsdCBgUG9seW1lci5Qcm9wZXJ0eUVmZmVjdHNgIGltcGxlbWVudGF0aW9uIHRvCiAgICAgICAqIGFkZCBzdXBwb3J0IGZvciBpbnN0YWxsaW5nIGBob3N0QXR0cmlidXRlc2AgYW5kIGBsaXN0ZW5lcnNgLgogICAgICAgKgogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKiBAb3ZlcnJpZGUKICAgICAgICovCiAgICAgIHJlYWR5KCkgewogICAgICAgIHRoaXMuX2Vuc3VyZUF0dHJpYnV0ZXMoKTsKICAgICAgICBzdXBlci5yZWFkeSgpOwogICAgICB9CgogICAgICAvKioKICAgICAgICogRW5zdXJlcyBhbiBlbGVtZW50IGhhcyByZXF1aXJlZCBhdHRyaWJ1dGVzLiBDYWxsZWQgd2hlbiB0aGUgZWxlbWVudAogICAgICAgKiBpcyBiZWluZyByZWFkaWVkIHZpYSBgcmVhZHlgLiBVc2VycyBzaG91bGQgb3ZlcnJpZGUgdG8gc2V0IHRoZQogICAgICAgKiBlbGVtZW50J3MgcmVxdWlyZWQgYXR0cmlidXRlcy4gVGhlIGltcGxlbWVudGF0aW9uIHNob3VsZCBiZSBzdXJlCiAgICAgICAqIHRvIGNoZWNrIGFuZCBub3Qgb3ZlcnJpZGUgZXhpc3RpbmcgYXR0cmlidXRlcyBhZGRlZCBieQogICAgICAgKiB0aGUgdXNlciBvZiB0aGUgZWxlbWVudC4gVHlwaWNhbGx5LCBzZXR0aW5nIGF0dHJpYnV0ZXMgc2hvdWxkIGJlIGxlZnQKICAgICAgICogdG8gdGhlIGVsZW1lbnQgdXNlciBhbmQgbm90IGRvbmUgaGVyZTsgcmVhc29uYWJsZSBleGNlcHRpb25zIGluY2x1ZGUKICAgICAgICogc2V0dGluZyBhcmlhIHJvbGVzIGFuZCBmb2N1c2FiaWxpdHkuCiAgICAgICAqIEBwcm90ZWN0ZWQKICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICovCiAgICAgIF9lbnN1cmVBdHRyaWJ1dGVzKCkge30KCiAgICAgIC8qKgogICAgICAgKiBBZGRzIGVsZW1lbnQgZXZlbnQgbGlzdGVuZXJzLiBDYWxsZWQgd2hlbiB0aGUgZWxlbWVudAogICAgICAgKiBpcyBiZWluZyByZWFkaWVkIHZpYSBgcmVhZHlgLiBVc2VycyBzaG91bGQgb3ZlcnJpZGUgdG8KICAgICAgICogYWRkIGFueSByZXF1aXJlZCBlbGVtZW50IGV2ZW50IGxpc3RlbmVycy4KICAgICAgICogSW4gcGVyZm9ybWFuY2UgY3JpdGljYWwgZWxlbWVudHMsIHRoZSB3b3JrIGRvbmUgaGVyZSBzaG91bGQgYmUga2VwdAogICAgICAgKiB0byBhIG1pbmltdW0gc2luY2UgaXQgaXMgZG9uZSBiZWZvcmUgdGhlIGVsZW1lbnQgaXMgcmVuZGVyZWQuIEluCiAgICAgICAqIHRoZXNlIGVsZW1lbnRzLCBjb25zaWRlciBhZGRpbmcgbGlzdGVuZXJzIGFzeW5jaHJvbm91c2x5IHNvIGFzIG5vdCB0bwogICAgICAgKiBibG9jayByZW5kZXIuCiAgICAgICAqIEBwcm90ZWN0ZWQKICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICovCiAgICAgIF9hcHBseUxpc3RlbmVycygpIHt9CgogICAgICAvKioKICAgICAgICogQ29udmVydHMgYSB0eXBlZCBKYXZhU2NyaXB0IHZhbHVlIHRvIGEgc3RyaW5nLgogICAgICAgKgogICAgICAgKiBOb3RlIHRoaXMgbWV0aG9kIGlzIHByb3ZpZGVkIGFzIGJhY2t3YXJkLWNvbXBhdGlibGUgbGVnYWN5IEFQSQogICAgICAgKiBvbmx5LiAgSXQgaXMgbm90IGRpcmVjdGx5IGNhbGxlZCBieSBhbnkgUG9seW1lciBmZWF0dXJlcy4gVG8gY3VzdG9taXplCiAgICAgICAqIGhvdyBwcm9wZXJ0aWVzIGFyZSBzZXJpYWxpemVkIHRvIGF0dHJpYnV0ZXMgZm9yIGF0dHJpYnV0ZSBiaW5kaW5ncyBhbmQKICAgICAgICogYHJlZmxlY3RUb0F0dHJpYnV0ZTogdHJ1ZWAgcHJvcGVydGllcyBhcyB3ZWxsIGFzIHRoaXMgbWV0aG9kLCBvdmVycmlkZQogICAgICAgKiB0aGUgYF9zZXJpYWxpemVWYWx1ZWAgbWV0aG9kIHByb3ZpZGVkIGJ5IGBQb2x5bWVyLlByb3BlcnR5QWNjZXNzb3JzYC4KICAgICAgICoKICAgICAgICogQHBhcmFtIHsqfSB2YWx1ZSBWYWx1ZSB0byBkZXNlcmlhbGl6ZQogICAgICAgKiBAcmV0dXJuIHtzdHJpbmcgfCB1bmRlZmluZWR9IFNlcmlhbGl6ZWQgdmFsdWUKICAgICAgICovCiAgICAgIHNlcmlhbGl6ZSh2YWx1ZSkgewogICAgICAgIHJldHVybiB0aGlzLl9zZXJpYWxpemVWYWx1ZSh2YWx1ZSk7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBDb252ZXJ0cyBhIHN0cmluZyB0byBhIHR5cGVkIEphdmFTY3JpcHQgdmFsdWUuCiAgICAgICAqCiAgICAgICAqIE5vdGUgdGhpcyBtZXRob2QgaXMgcHJvdmlkZWQgYXMgYmFja3dhcmQtY29tcGF0aWJsZSBsZWdhY3kgQVBJCiAgICAgICAqIG9ubHkuICBJdCBpcyBub3QgZGlyZWN0bHkgY2FsbGVkIGJ5IGFueSBQb2x5bWVyIGZlYXR1cmVzLiAgVG8gY3VzdG9taXplCiAgICAgICAqIGhvdyBhdHRyaWJ1dGVzIGFyZSBkZXNlcmlhbGl6ZWQgdG8gcHJvcGVydGllcyBmb3IgaW4KICAgICAgICogYGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFja2AsIG92ZXJyaWRlIGBfZGVzZXJpYWxpemVWYWx1ZWAgbWV0aG9kCiAgICAgICAqIHByb3ZpZGVkIGJ5IGBQb2x5bWVyLlByb3BlcnR5QWNjZXNzb3JzYC4KICAgICAgICoKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlIFN0cmluZyB0byBkZXNlcmlhbGl6ZQogICAgICAgKiBAcGFyYW0geyp9IHR5cGUgVHlwZSB0byBkZXNlcmlhbGl6ZSB0aGUgc3RyaW5nIHRvCiAgICAgICAqIEByZXR1cm4geyp9IFJldHVybnMgdGhlIGRlc2VyaWFsaXplZCB2YWx1ZSBpbiB0aGUgYHR5cGVgIGdpdmVuLgogICAgICAgKi8KICAgICAgZGVzZXJpYWxpemUodmFsdWUsIHR5cGUpIHsKICAgICAgICByZXR1cm4gdGhpcy5fZGVzZXJpYWxpemVWYWx1ZSh2YWx1ZSwgdHlwZSk7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBTZXJpYWxpemVzIGEgcHJvcGVydHkgdG8gaXRzIGFzc29jaWF0ZWQgYXR0cmlidXRlLgogICAgICAgKgogICAgICAgKiBOb3RlIHRoaXMgbWV0aG9kIGlzIHByb3ZpZGVkIGFzIGJhY2t3YXJkLWNvbXBhdGlibGUgbGVnYWN5IEFQSQogICAgICAgKiBvbmx5LiAgSXQgaXMgbm90IGRpcmVjdGx5IGNhbGxlZCBieSBhbnkgUG9seW1lciBmZWF0dXJlcy4KICAgICAgICoKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IFByb3BlcnR5IG5hbWUgdG8gcmVmbGVjdC4KICAgICAgICogQHBhcmFtIHtzdHJpbmc9fSBhdHRyaWJ1dGUgQXR0cmlidXRlIG5hbWUgdG8gcmVmbGVjdC4KICAgICAgICogQHBhcmFtIHsqPX0gdmFsdWUgUHJvcGVydHkgdmFsdWUgdG8gcmVmbGVjdC4KICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICovCiAgICAgIHJlZmxlY3RQcm9wZXJ0eVRvQXR0cmlidXRlKHByb3BlcnR5LCBhdHRyaWJ1dGUsIHZhbHVlKSB7CiAgICAgICAgdGhpcy5fcHJvcGVydHlUb0F0dHJpYnV0ZShwcm9wZXJ0eSwgYXR0cmlidXRlLCB2YWx1ZSk7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBTZXRzIGEgdHlwZWQgdmFsdWUgdG8gYW4gSFRNTCBhdHRyaWJ1dGUgb24gYSBub2RlLgogICAgICAgKgogICAgICAgKiBOb3RlIHRoaXMgbWV0aG9kIGlzIHByb3ZpZGVkIGFzIGJhY2t3YXJkLWNvbXBhdGlibGUgbGVnYWN5IEFQSQogICAgICAgKiBvbmx5LiAgSXQgaXMgbm90IGRpcmVjdGx5IGNhbGxlZCBieSBhbnkgUG9seW1lciBmZWF0dXJlcy4KICAgICAgICoKICAgICAgICogQHBhcmFtIHsqfSB2YWx1ZSBWYWx1ZSB0byBzZXJpYWxpemUuCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBhdHRyaWJ1dGUgQXR0cmlidXRlIG5hbWUgdG8gc2VyaWFsaXplIHRvLgogICAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IG5vZGUgRWxlbWVudCB0byBzZXQgYXR0cmlidXRlIHRvLgogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKi8KICAgICAgc2VyaWFsaXplVmFsdWVUb0F0dHJpYnV0ZSh2YWx1ZSwgYXR0cmlidXRlLCBub2RlKSB7CiAgICAgICAgdGhpcy5fdmFsdWVUb05vZGVBdHRyaWJ1dGUoLyoqIEB0eXBlIHtFbGVtZW50fSAqLyAobm9kZSB8fCB0aGlzKSwgdmFsdWUsIGF0dHJpYnV0ZSk7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBDb3BpZXMgb3duIHByb3BlcnRpZXMgKGluY2x1ZGluZyBhY2Nlc3NvciBkZXNjcmlwdG9ycykgZnJvbSBhIHNvdXJjZQogICAgICAgKiBvYmplY3QgdG8gYSB0YXJnZXQgb2JqZWN0LgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge09iamVjdH0gcHJvdG90eXBlIFRhcmdldCBvYmplY3QgdG8gY29weSBwcm9wZXJ0aWVzIHRvLgogICAgICAgKiBAcGFyYW0ge09iamVjdH0gYXBpIFNvdXJjZSBvYmplY3QgdG8gY29weSBwcm9wZXJ0aWVzIGZyb20uCiAgICAgICAqIEByZXR1cm4ge09iamVjdH0gcHJvdG90eXBlIG9iamVjdCB0aGF0IHdhcyBwYXNzZWQgYXMgZmlyc3QgYXJndW1lbnQuCiAgICAgICAqLwogICAgICBleHRlbmQocHJvdG90eXBlLCBhcGkpIHsKICAgICAgICBpZiAoIShwcm90b3R5cGUgJiYgYXBpKSkgewogICAgICAgICAgcmV0dXJuIHByb3RvdHlwZSB8fCBhcGk7CiAgICAgICAgfQogICAgICAgIGxldCBuJCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGFwaSk7CiAgICAgICAgZm9yIChsZXQgaT0wLCBuOyAoaTxuJC5sZW5ndGgpICYmIChuPW4kW2ldKTsgaSsrKSB7CiAgICAgICAgICBsZXQgcGQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGFwaSwgbik7CiAgICAgICAgICBpZiAocGQpIHsKICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3RvdHlwZSwgbiwgcGQpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gcHJvdG90eXBlOwogICAgICB9CgogICAgICAvKioKICAgICAgICogQ29waWVzIHByb3BzIGZyb20gYSBzb3VyY2Ugb2JqZWN0IHRvIGEgdGFyZ2V0IG9iamVjdC4KICAgICAgICoKICAgICAgICogTm90ZSwgdGhpcyBtZXRob2QgdXNlcyBhIHNpbXBsZSBgZm9yLi4uaW5gIHN0cmF0ZWd5IGZvciBlbnVtZXJhdGluZwogICAgICAgKiBwcm9wZXJ0aWVzLiAgVG8gZW5zdXJlIG9ubHkgYG93blByb3BlcnRpZXNgIGFyZSBjb3BpZWQgZnJvbSBzb3VyY2UKICAgICAgICogdG8gdGFyZ2V0IGFuZCB0aGF0IGFjY2Vzc29yIGltcGxlbWVudGF0aW9ucyBhcmUgY29waWVkLCB1c2UgYGV4dGVuZGAuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7IU9iamVjdH0gdGFyZ2V0IFRhcmdldCBvYmplY3QgdG8gY29weSBwcm9wZXJ0aWVzIHRvLgogICAgICAgKiBAcGFyYW0geyFPYmplY3R9IHNvdXJjZSBTb3VyY2Ugb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyBmcm9tLgogICAgICAgKiBAcmV0dXJuIHshT2JqZWN0fSBUYXJnZXQgb2JqZWN0IHRoYXQgd2FzIHBhc3NlZCBhcyBmaXJzdCBhcmd1bWVudC4KICAgICAgICovCiAgICAgIG1peGluKHRhcmdldCwgc291cmNlKSB7CiAgICAgICAgZm9yIChsZXQgaSBpbiBzb3VyY2UpIHsKICAgICAgICAgIHRhcmdldFtpXSA9IHNvdXJjZVtpXTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRhcmdldDsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIFNldHMgdGhlIHByb3RvdHlwZSBvZiBhbiBvYmplY3QuCiAgICAgICAqCiAgICAgICAqIE5vdGUgdGhpcyBtZXRob2QgaXMgcHJvdmlkZWQgYXMgYmFja3dhcmQtY29tcGF0aWJsZSBsZWdhY3kgQVBJCiAgICAgICAqIG9ubHkuICBJdCBpcyBub3QgZGlyZWN0bHkgY2FsbGVkIGJ5IGFueSBQb2x5bWVyIGZlYXR1cmVzLgogICAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3Qgb24gd2hpY2ggdG8gc2V0IHRoZSBwcm90b3R5cGUuCiAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBwcm90b3R5cGUgVGhlIHByb3RvdHlwZSB0aGF0IHdpbGwgYmUgc2V0IG9uIHRoZSBnaXZlbgogICAgICAgKiBgb2JqZWN0YC4KICAgICAgICogQHJldHVybiB7T2JqZWN0fSBSZXR1cm5zIHRoZSBnaXZlbiBgb2JqZWN0YCB3aXRoIGl0cyBwcm90b3R5cGUgc2V0CiAgICAgICAqIHRvIHRoZSBnaXZlbiBgcHJvdG90eXBlYCBvYmplY3QuCiAgICAgICAqLwogICAgICBjaGFpbk9iamVjdChvYmplY3QsIHByb3RvdHlwZSkgewogICAgICAgIGlmIChvYmplY3QgJiYgcHJvdG90eXBlICYmIG9iamVjdCAhPT0gcHJvdG90eXBlKSB7CiAgICAgICAgICBvYmplY3QuX19wcm90b19fID0gcHJvdG90eXBlOwogICAgICAgIH0KICAgICAgICByZXR1cm4gb2JqZWN0OwogICAgICB9CgogICAgICAvKiAqKioqIEJlZ2luIFRlbXBsYXRlICoqKiogKi8KCiAgICAgIC8qKgogICAgICAgKiBDYWxscyBgaW1wb3J0Tm9kZWAgb24gdGhlIGBjb250ZW50YCBvZiB0aGUgYHRlbXBsYXRlYCBzcGVjaWZpZWQgYW5kCiAgICAgICAqIHJldHVybnMgYSBkb2N1bWVudCBmcmFnbWVudCBjb250YWluaW5nIHRoZSBpbXBvcnRlZCBjb250ZW50LgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge0hUTUxUZW1wbGF0ZUVsZW1lbnR9IHRlbXBsYXRlIEhUTUwgdGVtcGxhdGUgZWxlbWVudCB0byBpbnN0YW5jZS4KICAgICAgICogQHJldHVybiB7IURvY3VtZW50RnJhZ21lbnR9IERvY3VtZW50IGZyYWdtZW50IGNvbnRhaW5pbmcgdGhlIGltcG9ydGVkCiAgICAgICAqICAgdGVtcGxhdGUgY29udGVudC4KICAgICAgKi8KICAgICAgaW5zdGFuY2VUZW1wbGF0ZSh0ZW1wbGF0ZSkgewogICAgICAgIGxldCBjb250ZW50ID0gdGhpcy5jb25zdHJ1Y3Rvci5fY29udGVudEZvclRlbXBsYXRlKHRlbXBsYXRlKTsKICAgICAgICBsZXQgZG9tID0gLyoqIEB0eXBlIHshRG9jdW1lbnRGcmFnbWVudH0gKi8KICAgICAgICAgIChkb2N1bWVudC5pbXBvcnROb2RlKGNvbnRlbnQsIHRydWUpKTsKICAgICAgICByZXR1cm4gZG9tOwogICAgICB9CgogICAgICAvKiAqKioqIEJlZ2luIEV2ZW50cyAqKioqICovCgoKCiAgICAgIC8qKgogICAgICAgKiBEaXNwYXRjaGVzIGEgY3VzdG9tIGV2ZW50IHdpdGggYW4gb3B0aW9uYWwgZGV0YWlsIHZhbHVlLgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gdHlwZSBOYW1lIG9mIGV2ZW50IHR5cGUuCiAgICAgICAqIEBwYXJhbSB7Kj19IGRldGFpbCBEZXRhaWwgdmFsdWUgY29udGFpbmluZyBldmVudC1zcGVjaWZpYwogICAgICAgKiAgIHBheWxvYWQuCiAgICAgICAqIEBwYXJhbSB7eyBidWJibGVzOiAoYm9vbGVhbnx1bmRlZmluZWQpLCBjYW5jZWxhYmxlOiAoYm9vbGVhbnx1bmRlZmluZWQpLCBjb21wb3NlZDogKGJvb2xlYW58dW5kZWZpbmVkKSB9PX0KICAgICAgICogIG9wdGlvbnMgT2JqZWN0IHNwZWNpZnlpbmcgb3B0aW9ucy4gIFRoZXNlIG1heSBpbmNsdWRlOgogICAgICAgKiAgYGJ1YmJsZXNgIChib29sZWFuLCBkZWZhdWx0cyB0byBgdHJ1ZWApLAogICAgICAgKiAgYGNhbmNlbGFibGVgIChib29sZWFuLCBkZWZhdWx0cyB0byBmYWxzZSksIGFuZAogICAgICAgKiAgYG5vZGVgIG9uIHdoaWNoIHRvIGZpcmUgdGhlIGV2ZW50IChIVE1MRWxlbWVudCwgZGVmYXVsdHMgdG8gYHRoaXNgKS4KICAgICAgICogQHJldHVybiB7IUV2ZW50fSBUaGUgbmV3IGV2ZW50IHRoYXQgd2FzIGZpcmVkLgogICAgICAgKi8KICAgICAgZmlyZSh0eXBlLCBkZXRhaWwsIG9wdGlvbnMpIHsKICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTsKICAgICAgICBkZXRhaWwgPSAoZGV0YWlsID09PSBudWxsIHx8IGRldGFpbCA9PT0gdW5kZWZpbmVkKSA/IHt9IDogZGV0YWlsOwogICAgICAgIGxldCBldmVudCA9IG5ldyBFdmVudCh0eXBlLCB7CiAgICAgICAgICBidWJibGVzOiBvcHRpb25zLmJ1YmJsZXMgPT09IHVuZGVmaW5lZCA/IHRydWUgOiBvcHRpb25zLmJ1YmJsZXMsCiAgICAgICAgICBjYW5jZWxhYmxlOiBCb29sZWFuKG9wdGlvbnMuY2FuY2VsYWJsZSksCiAgICAgICAgICBjb21wb3NlZDogb3B0aW9ucy5jb21wb3NlZCA9PT0gdW5kZWZpbmVkID8gdHJ1ZTogb3B0aW9ucy5jb21wb3NlZAogICAgICAgIH0pOwogICAgICAgIGV2ZW50LmRldGFpbCA9IGRldGFpbDsKICAgICAgICBsZXQgbm9kZSA9IG9wdGlvbnMubm9kZSB8fCB0aGlzOwogICAgICAgIG5vZGUuZGlzcGF0Y2hFdmVudChldmVudCk7CiAgICAgICAgcmV0dXJuIGV2ZW50OwogICAgICB9CgogICAgICAvKioKICAgICAgICogQ29udmVuaWVuY2UgbWV0aG9kIHRvIGFkZCBhbiBldmVudCBsaXN0ZW5lciBvbiBhIGdpdmVuIGVsZW1lbnQsCiAgICAgICAqIGxhdGUgYm91bmQgdG8gYSBuYW1lZCBtZXRob2Qgb24gdGhpcyBlbGVtZW50LgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IG5vZGUgRWxlbWVudCB0byBhZGQgZXZlbnQgbGlzdGVuZXIgdG8uCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudE5hbWUgTmFtZSBvZiBldmVudCB0byBsaXN0ZW4gZm9yLgogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gbWV0aG9kTmFtZSBOYW1lIG9mIGhhbmRsZXIgbWV0aG9kIG9uIGB0aGlzYCB0byBjYWxsLgogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKi8KICAgICAgbGlzdGVuKG5vZGUsIGV2ZW50TmFtZSwgbWV0aG9kTmFtZSkgewogICAgICAgIG5vZGUgPSAvKiogQHR5cGUgeyFFbGVtZW50fSAqLyAobm9kZSB8fCB0aGlzKTsKICAgICAgICBsZXQgaGJsID0gdGhpcy5fX2JvdW5kTGlzdGVuZXJzIHx8CiAgICAgICAgICAodGhpcy5fX2JvdW5kTGlzdGVuZXJzID0gbmV3IFdlYWtNYXAoKSk7CiAgICAgICAgbGV0IGJsID0gaGJsLmdldChub2RlKTsKICAgICAgICBpZiAoIWJsKSB7CiAgICAgICAgICBibCA9IHt9OwogICAgICAgICAgaGJsLnNldChub2RlLCBibCk7CiAgICAgICAgfQogICAgICAgIGxldCBrZXkgPSBldmVudE5hbWUgKyBtZXRob2ROYW1lOwogICAgICAgIGlmICghYmxba2V5XSkgewogICAgICAgICAgYmxba2V5XSA9IHRoaXMuX2FkZE1ldGhvZEV2ZW50TGlzdGVuZXJUb05vZGUoCiAgICAgICAgICAgIG5vZGUsIGV2ZW50TmFtZSwgbWV0aG9kTmFtZSwgdGhpcyk7CiAgICAgICAgfQogICAgICB9CgogICAgICAvKioKICAgICAgICogQ29udmVuaWVuY2UgbWV0aG9kIHRvIHJlbW92ZSBhbiBldmVudCBsaXN0ZW5lciBmcm9tIGEgZ2l2ZW4gZWxlbWVudCwKICAgICAgICogbGF0ZSBib3VuZCB0byBhIG5hbWVkIG1ldGhvZCBvbiB0aGlzIGVsZW1lbnQuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7RWxlbWVudH0gbm9kZSBFbGVtZW50IHRvIHJlbW92ZSBldmVudCBsaXN0ZW5lciBmcm9tLgogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnROYW1lIE5hbWUgb2YgZXZlbnQgdG8gc3RvcCBsaXN0ZW5pbmcgdG8uCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBtZXRob2ROYW1lIE5hbWUgb2YgaGFuZGxlciBtZXRob2Qgb24gYHRoaXNgIHRvIG5vdCBjYWxsCiAgICAgICBhbnltb3JlLgogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKi8KICAgICAgdW5saXN0ZW4obm9kZSwgZXZlbnROYW1lLCBtZXRob2ROYW1lKSB7CiAgICAgICAgbm9kZSA9IC8qKiBAdHlwZSB7IUVsZW1lbnR9ICovIChub2RlIHx8IHRoaXMpOwogICAgICAgIGxldCBibCA9IHRoaXMuX19ib3VuZExpc3RlbmVycyAmJiB0aGlzLl9fYm91bmRMaXN0ZW5lcnMuZ2V0KG5vZGUpOwogICAgICAgIGxldCBrZXkgPSBldmVudE5hbWUgKyBtZXRob2ROYW1lOwogICAgICAgIGxldCBoYW5kbGVyID0gYmwgJiYgYmxba2V5XTsKICAgICAgICBpZiAoaGFuZGxlcikgewogICAgICAgICAgdGhpcy5fcmVtb3ZlRXZlbnRMaXN0ZW5lckZyb21Ob2RlKG5vZGUsIGV2ZW50TmFtZSwgaGFuZGxlcik7CiAgICAgICAgICBibFtrZXldID0gbnVsbDsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBPdmVycmlkZSBzY3JvbGxpbmcgYmVoYXZpb3IgdG8gYWxsIGRpcmVjdGlvbiwgb25lIGRpcmVjdGlvbiwgb3Igbm9uZS4KICAgICAgICoKICAgICAgICogVmFsaWQgc2Nyb2xsIGRpcmVjdGlvbnM6CiAgICAgICAqICAgLSAnYWxsJzogc2Nyb2xsIGluIGFueSBkaXJlY3Rpb24KICAgICAgICogICAtICd4Jzogc2Nyb2xsIG9ubHkgaW4gdGhlICd4JyBkaXJlY3Rpb24KICAgICAgICogICAtICd5Jzogc2Nyb2xsIG9ubHkgaW4gdGhlICd5JyBkaXJlY3Rpb24KICAgICAgICogICAtICdub25lJzogZGlzYWJsZSBzY3JvbGxpbmcgZm9yIHRoaXMgbm9kZQogICAgICAgKgogICAgICAgKiBAcGFyYW0ge3N0cmluZz19IGRpcmVjdGlvbiBEaXJlY3Rpb24gdG8gYWxsb3cgc2Nyb2xsaW5nCiAgICAgICAqIERlZmF1bHRzIHRvIGBhbGxgLgogICAgICAgKiBAcGFyYW0ge0VsZW1lbnQ9fSBub2RlIEVsZW1lbnQgdG8gYXBwbHkgc2Nyb2xsIGRpcmVjdGlvbiBzZXR0aW5nLgogICAgICAgKiBEZWZhdWx0cyB0byBgdGhpc2AuCiAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAqLwogICAgICBzZXRTY3JvbGxEaXJlY3Rpb24oZGlyZWN0aW9uLCBub2RlKSB7CiAgICAgICAgUG9seW1lci5HZXN0dXJlcy5zZXRUb3VjaEFjdGlvbigvKiogQHR5cGUge0VsZW1lbnR9ICovIChub2RlIHx8IHRoaXMpLCBESVJFQ1RJT05fTUFQW2RpcmVjdGlvbl0gfHwgJ2F1dG8nKTsKICAgICAgfQogICAgICAvKiAqKioqIEVuZCBFdmVudHMgKioqKiAqLwoKICAgICAgLyoqCiAgICAgICAqIENvbnZlbmllbmNlIG1ldGhvZCB0byBydW4gYHF1ZXJ5U2VsZWN0b3JgIG9uIHRoaXMgbG9jYWwgRE9NIHNjb3BlLgogICAgICAgKgogICAgICAgKiBUaGlzIGZ1bmN0aW9uIGNhbGxzIGBQb2x5bWVyLmRvbSh0aGlzLnJvb3QpLnF1ZXJ5U2VsZWN0b3Ioc2xjdHIpYC4KICAgICAgICoKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHNsY3RyIFNlbGVjdG9yIHRvIHJ1biBvbiB0aGlzIGxvY2FsIERPTSBzY29wZQogICAgICAgKiBAcmV0dXJuIHtFbGVtZW50fSBFbGVtZW50IGZvdW5kIGJ5IHRoZSBzZWxlY3Rvciwgb3IgbnVsbCBpZiBub3QgZm91bmQuCiAgICAgICAqLwogICAgICAkJChzbGN0cikgewogICAgICAgIHJldHVybiB0aGlzLnJvb3QucXVlcnlTZWxlY3RvcihzbGN0cik7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBSZXR1cm4gdGhlIGVsZW1lbnQgd2hvc2UgbG9jYWwgZG9tIHdpdGhpbiB3aGljaCB0aGlzIGVsZW1lbnQKICAgICAgICogaXMgY29udGFpbmVkLiBUaGlzIGlzIGEgc2hvcnRoYW5kIGZvcgogICAgICAgKiBgdGhpcy5nZXRSb290Tm9kZSgpLmhvc3RgLgogICAgICAgKiBAdGhpcyB7RWxlbWVudH0KICAgICAgICovCiAgICAgIGdldCBkb21Ib3N0KCkgewogICAgICAgIGxldCByb290ID0gdGhpcy5nZXRSb290Tm9kZSgpOwogICAgICAgIHJldHVybiAocm9vdCBpbnN0YW5jZW9mIERvY3VtZW50RnJhZ21lbnQpID8gLyoqIEB0eXBlIHtTaGFkb3dSb290fSAqLyAocm9vdCkuaG9zdCA6IHJvb3Q7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBGb3JjZSB0aGlzIGVsZW1lbnQgdG8gZGlzdHJpYnV0ZSBpdHMgY2hpbGRyZW4gdG8gaXRzIGxvY2FsIGRvbS4KICAgICAgICogVGhpcyBzaG91bGQgbm90IGJlIG5lY2Vzc2FyeSBhcyBvZiBQb2x5bWVyIDIuMC4yIGFuZCBpcyBwcm92aWRlZCBvbmx5CiAgICAgICAqIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4KICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICovCiAgICAgIGRpc3RyaWJ1dGVDb250ZW50KCkgewogICAgICAgIGlmICh3aW5kb3cuU2hhZHlET00gJiYgdGhpcy5zaGFkb3dSb290KSB7CiAgICAgICAgICBTaGFkeURPTS5mbHVzaCgpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIFJldHVybnMgYSBsaXN0IG9mIG5vZGVzIHRoYXQgYXJlIHRoZSBlZmZlY3RpdmUgY2hpbGROb2Rlcy4gVGhlIGVmZmVjdGl2ZQogICAgICAgKiBjaGlsZE5vZGVzIGxpc3QgaXMgdGhlIHNhbWUgYXMgdGhlIGVsZW1lbnQncyBjaGlsZE5vZGVzIGV4Y2VwdCB0aGF0CiAgICAgICAqIGFueSBgPGNvbnRlbnQ+YCBlbGVtZW50cyBhcmUgcmVwbGFjZWQgd2l0aCB0aGUgbGlzdCBvZiBub2RlcyBkaXN0cmlidXRlZAogICAgICAgKiB0byB0aGUgYDxjb250ZW50PmAsIHRoZSByZXN1bHQgb2YgaXRzIGBnZXREaXN0cmlidXRlZE5vZGVzYCBtZXRob2QuCiAgICAgICAqIEByZXR1cm4geyFBcnJheTwhTm9kZT59IExpc3Qgb2YgZWZmZWN0aXZlIGNoaWxkIG5vZGVzLgogICAgICAgKiBAc3VwcHJlc3Mge2ludmFsaWRDYXN0c30gTGVnYWN5RWxlbWVudE1peGluIG11c3QgYmUgYXBwbGllZCB0byBhbiBIVE1MRWxlbWVudAogICAgICAgKi8KICAgICAgZ2V0RWZmZWN0aXZlQ2hpbGROb2RlcygpIHsKICAgICAgICBjb25zdCB0aGlzRWwgPSAvKiogQHR5cGUge0VsZW1lbnR9ICovICh0aGlzKTsKICAgICAgICBjb25zdCBkb21BcGkgPSAvKiogQHR5cGUge1BvbHltZXIuRG9tQXBpfSAqLyhQb2x5bWVyLmRvbSh0aGlzRWwpKTsKICAgICAgICByZXR1cm4gZG9tQXBpLmdldEVmZmVjdGl2ZUNoaWxkTm9kZXMoKTsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIFJldHVybnMgYSBsaXN0IG9mIG5vZGVzIGRpc3RyaWJ1dGVkIHdpdGhpbiB0aGlzIGVsZW1lbnQgdGhhdCBtYXRjaAogICAgICAgKiBgc2VsZWN0b3JgLiBUaGVzZSBjYW4gYmUgZG9tIGNoaWxkcmVuIG9yIGVsZW1lbnRzIGRpc3RyaWJ1dGVkIHRvCiAgICAgICAqIGNoaWxkcmVuIHRoYXQgYXJlIGluc2VydGlvbiBwb2ludHMuCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzZWxlY3RvciBTZWxlY3RvciB0byBydW4uCiAgICAgICAqIEByZXR1cm4geyFBcnJheTwhTm9kZT59IExpc3Qgb2YgZGlzdHJpYnV0ZWQgZWxlbWVudHMgdGhhdCBtYXRjaCBzZWxlY3Rvci4KICAgICAgICogQHN1cHByZXNzIHtpbnZhbGlkQ2FzdHN9IExlZ2FjeUVsZW1lbnRNaXhpbiBtdXN0IGJlIGFwcGxpZWQgdG8gYW4gSFRNTEVsZW1lbnQKICAgICAgICovCiAgICAgIHF1ZXJ5RGlzdHJpYnV0ZWRFbGVtZW50cyhzZWxlY3RvcikgewogICAgICAgIGNvbnN0IHRoaXNFbCA9IC8qKiBAdHlwZSB7RWxlbWVudH0gKi8gKHRoaXMpOwogICAgICAgIGNvbnN0IGRvbUFwaSA9IC8qKiBAdHlwZSB7UG9seW1lci5Eb21BcGl9ICovKFBvbHltZXIuZG9tKHRoaXNFbCkpOwogICAgICAgIHJldHVybiBkb21BcGkucXVlcnlEaXN0cmlidXRlZEVsZW1lbnRzKHNlbGVjdG9yKTsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIFJldHVybnMgYSBsaXN0IG9mIGVsZW1lbnRzIHRoYXQgYXJlIHRoZSBlZmZlY3RpdmUgY2hpbGRyZW4uIFRoZSBlZmZlY3RpdmUKICAgICAgICogY2hpbGRyZW4gbGlzdCBpcyB0aGUgc2FtZSBhcyB0aGUgZWxlbWVudCdzIGNoaWxkcmVuIGV4Y2VwdCB0aGF0CiAgICAgICAqIGFueSBgPGNvbnRlbnQ+YCBlbGVtZW50cyBhcmUgcmVwbGFjZWQgd2l0aCB0aGUgbGlzdCBvZiBlbGVtZW50cwogICAgICAgKiBkaXN0cmlidXRlZCB0byB0aGUgYDxjb250ZW50PmAuCiAgICAgICAqCiAgICAgICAqIEByZXR1cm4geyFBcnJheTwhTm9kZT59IExpc3Qgb2YgZWZmZWN0aXZlIGNoaWxkcmVuLgogICAgICAgKi8KICAgICAgZ2V0RWZmZWN0aXZlQ2hpbGRyZW4oKSB7CiAgICAgICAgbGV0IGxpc3QgPSB0aGlzLmdldEVmZmVjdGl2ZUNoaWxkTm9kZXMoKTsKICAgICAgICByZXR1cm4gbGlzdC5maWx0ZXIoZnVuY3Rpb24oLyoqIEB0eXBlIHshTm9kZX0gKi8gbikgewogICAgICAgICAgcmV0dXJuIChuLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSk7CiAgICAgICAgfSk7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBSZXR1cm5zIGEgc3RyaW5nIG9mIHRleHQgY29udGVudCB0aGF0IGlzIHRoZSBjb25jYXRlbmF0aW9uIG9mIHRoZQogICAgICAgKiB0ZXh0IGNvbnRlbnQncyBvZiB0aGUgZWxlbWVudCdzIGVmZmVjdGl2ZSBjaGlsZE5vZGVzICh0aGUgZWxlbWVudHMKICAgICAgICogcmV0dXJuZWQgYnkgPGEgaHJlZj0iI2dldEVmZmVjdGl2ZUNoaWxkTm9kZXM+Z2V0RWZmZWN0aXZlQ2hpbGROb2RlczwvYT4uCiAgICAgICAqCiAgICAgICAqIEByZXR1cm4ge3N0cmluZ30gTGlzdCBvZiBlZmZlY3RpdmUgY2hpbGRyZW4uCiAgICAgICAqLwogICAgICBnZXRFZmZlY3RpdmVUZXh0Q29udGVudCgpIHsKICAgICAgICBsZXQgY24gPSB0aGlzLmdldEVmZmVjdGl2ZUNoaWxkTm9kZXMoKTsKICAgICAgICBsZXQgdGMgPSBbXTsKICAgICAgICBmb3IgKGxldCBpPTAsIGM7IChjID0gY25baV0pOyBpKyspIHsKICAgICAgICAgIGlmIChjLm5vZGVUeXBlICE9PSBOb2RlLkNPTU1FTlRfTk9ERSkgewogICAgICAgICAgICB0Yy5wdXNoKGMudGV4dENvbnRlbnQpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gdGMuam9pbignJyk7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBSZXR1cm5zIHRoZSBmaXJzdCBlZmZlY3RpdmUgY2hpbGROb2RlIHdpdGhpbiB0aGlzIGVsZW1lbnQgdGhhdAogICAgICAgKiBtYXRjaCBgc2VsZWN0b3JgLiBUaGVzZSBjYW4gYmUgZG9tIGNoaWxkIG5vZGVzIG9yIGVsZW1lbnRzIGRpc3RyaWJ1dGVkCiAgICAgICAqIHRvIGNoaWxkcmVuIHRoYXQgYXJlIGluc2VydGlvbiBwb2ludHMuCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzZWxlY3RvciBTZWxlY3RvciB0byBydW4uCiAgICAgICAqIEByZXR1cm4ge05vZGV9IEZpcnN0IGVmZmVjdGl2ZSBjaGlsZCBub2RlIHRoYXQgbWF0Y2hlcyBzZWxlY3Rvci4KICAgICAgICovCiAgICAgIHF1ZXJ5RWZmZWN0aXZlQ2hpbGRyZW4oc2VsZWN0b3IpIHsKICAgICAgICBsZXQgZSQgPSB0aGlzLnF1ZXJ5RGlzdHJpYnV0ZWRFbGVtZW50cyhzZWxlY3Rvcik7CiAgICAgICAgcmV0dXJuIGUkICYmIGUkWzBdOwogICAgICB9CgogICAgICAvKioKICAgICAgICogUmV0dXJucyBhIGxpc3Qgb2YgZWZmZWN0aXZlIGNoaWxkTm9kZXMgd2l0aGluIHRoaXMgZWxlbWVudCB0aGF0CiAgICAgICAqIG1hdGNoIGBzZWxlY3RvcmAuIFRoZXNlIGNhbiBiZSBkb20gY2hpbGQgbm9kZXMgb3IgZWxlbWVudHMgZGlzdHJpYnV0ZWQKICAgICAgICogdG8gY2hpbGRyZW4gdGhhdCBhcmUgaW5zZXJ0aW9uIHBvaW50cy4KICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHNlbGVjdG9yIFNlbGVjdG9yIHRvIHJ1bi4KICAgICAgICogQHJldHVybiB7IUFycmF5PCFOb2RlPn0gTGlzdCBvZiBlZmZlY3RpdmUgY2hpbGQgbm9kZXMgdGhhdCBtYXRjaCBzZWxlY3Rvci4KICAgICAgICovCiAgICAgIHF1ZXJ5QWxsRWZmZWN0aXZlQ2hpbGRyZW4oc2VsZWN0b3IpIHsKICAgICAgICByZXR1cm4gdGhpcy5xdWVyeURpc3RyaWJ1dGVkRWxlbWVudHMoc2VsZWN0b3IpOwogICAgICB9CgogICAgICAvKioKICAgICAgICogUmV0dXJucyBhIGxpc3Qgb2Ygbm9kZXMgZGlzdHJpYnV0ZWQgdG8gdGhpcyBlbGVtZW50J3MgYDxzbG90PmAuCiAgICAgICAqCiAgICAgICAqIElmIHRoaXMgZWxlbWVudCBjb250YWlucyBtb3JlIHRoYW4gb25lIGA8c2xvdD5gIGluIGl0cyBsb2NhbCBET00sCiAgICAgICAqIGFuIG9wdGlvbmFsIHNlbGVjdG9yIG1heSBiZSBwYXNzZWQgdG8gY2hvb3NlIHRoZSBkZXNpcmVkIGNvbnRlbnQuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nPX0gc2xjdHIgQ1NTIHNlbGVjdG9yIHRvIGNob29zZSB0aGUgZGVzaXJlZAogICAgICAgKiAgIGA8c2xvdD5gLiAgRGVmYXVsdHMgdG8gYGNvbnRlbnRgLgogICAgICAgKiBAcmV0dXJuIHshQXJyYXk8IU5vZGU+fSBMaXN0IG9mIGRpc3RyaWJ1dGVkIG5vZGVzIGZvciB0aGUgYDxzbG90PmAuCiAgICAgICAqLwogICAgICBnZXRDb250ZW50Q2hpbGROb2RlcyhzbGN0cikgewogICAgICAgIGxldCBjb250ZW50ID0gdGhpcy5yb290LnF1ZXJ5U2VsZWN0b3Ioc2xjdHIgfHwgJ3Nsb3QnKTsKICAgICAgICByZXR1cm4gY29udGVudCA/IC8qKiBAdHlwZSB7UG9seW1lci5Eb21BcGl9ICovKFBvbHltZXIuZG9tKGNvbnRlbnQpKS5nZXREaXN0cmlidXRlZE5vZGVzKCkgOiBbXTsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIFJldHVybnMgYSBsaXN0IG9mIGVsZW1lbnQgY2hpbGRyZW4gZGlzdHJpYnV0ZWQgdG8gdGhpcyBlbGVtZW50J3MKICAgICAgICogYDxzbG90PmAuCiAgICAgICAqCiAgICAgICAqIElmIHRoaXMgZWxlbWVudCBjb250YWlucyBtb3JlIHRoYW4gb25lIGA8c2xvdD5gIGluIGl0cwogICAgICAgKiBsb2NhbCBET00sIGFuIG9wdGlvbmFsIHNlbGVjdG9yIG1heSBiZSBwYXNzZWQgdG8gY2hvb3NlIHRoZSBkZXNpcmVkCiAgICAgICAqIGNvbnRlbnQuICBUaGlzIG1ldGhvZCBkaWZmZXJzIGZyb20gYGdldENvbnRlbnRDaGlsZE5vZGVzYCBpbiB0aGF0IG9ubHkKICAgICAgICogZWxlbWVudHMgYXJlIHJldHVybmVkLgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge3N0cmluZz19IHNsY3RyIENTUyBzZWxlY3RvciB0byBjaG9vc2UgdGhlIGRlc2lyZWQKICAgICAgICogICBgPGNvbnRlbnQ+YC4gIERlZmF1bHRzIHRvIGBjb250ZW50YC4KICAgICAgICogQHJldHVybiB7IUFycmF5PCFIVE1MRWxlbWVudD59IExpc3Qgb2YgZGlzdHJpYnV0ZWQgbm9kZXMgZm9yIHRoZQogICAgICAgKiAgIGA8c2xvdD5gLgogICAgICAgKiBAc3VwcHJlc3Mge2ludmFsaWRDYXN0c30KICAgICAgICovCiAgICAgIGdldENvbnRlbnRDaGlsZHJlbihzbGN0cikgewogICAgICAgIGxldCBjaGlsZHJlbiA9IC8qKiBAdHlwZSB7IUFycmF5PCFIVE1MRWxlbWVudD59ICovKHRoaXMuZ2V0Q29udGVudENoaWxkTm9kZXMoc2xjdHIpLmZpbHRlcihmdW5jdGlvbihuKSB7CiAgICAgICAgICByZXR1cm4gKG4ubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFKTsKICAgICAgICB9KSk7CiAgICAgICAgcmV0dXJuIGNoaWxkcmVuOwogICAgICB9CgogICAgICAvKioKICAgICAgICogQ2hlY2tzIHdoZXRoZXIgYW4gZWxlbWVudCBpcyBpbiB0aGlzIGVsZW1lbnQncyBsaWdodCBET00gdHJlZS4KICAgICAgICoKICAgICAgICogQHBhcmFtIHs/Tm9kZX0gbm9kZSBUaGUgZWxlbWVudCB0byBiZSBjaGVja2VkLgogICAgICAgKiBAcmV0dXJuIHtib29sZWFufSB0cnVlIGlmIG5vZGUgaXMgaW4gdGhpcyBlbGVtZW50J3MgbGlnaHQgRE9NIHRyZWUuCiAgICAgICAqIEBzdXBwcmVzcyB7aW52YWxpZENhc3RzfSBMZWdhY3lFbGVtZW50TWl4aW4gbXVzdCBiZSBhcHBsaWVkIHRvIGFuIEhUTUxFbGVtZW50CiAgICAgICAqLwogICAgICBpc0xpZ2h0RGVzY2VuZGFudChub2RlKSB7CiAgICAgICAgY29uc3QgdGhpc05vZGUgPSAvKiogQHR5cGUge05vZGV9ICovICh0aGlzKTsKICAgICAgICByZXR1cm4gdGhpc05vZGUgIT09IG5vZGUgJiYgdGhpc05vZGUuY29udGFpbnMobm9kZSkgJiYKICAgICAgICAgIHRoaXNOb2RlLmdldFJvb3ROb2RlKCkgPT09IG5vZGUuZ2V0Um9vdE5vZGUoKTsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIENoZWNrcyB3aGV0aGVyIGFuIGVsZW1lbnQgaXMgaW4gdGhpcyBlbGVtZW50J3MgbG9jYWwgRE9NIHRyZWUuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7IUVsZW1lbnR9IG5vZGUgVGhlIGVsZW1lbnQgdG8gYmUgY2hlY2tlZC4KICAgICAgICogQHJldHVybiB7Ym9vbGVhbn0gdHJ1ZSBpZiBub2RlIGlzIGluIHRoaXMgZWxlbWVudCdzIGxvY2FsIERPTSB0cmVlLgogICAgICAgKi8KICAgICAgaXNMb2NhbERlc2NlbmRhbnQobm9kZSkgewogICAgICAgIHJldHVybiB0aGlzLnJvb3QgPT09IG5vZGUuZ2V0Um9vdE5vZGUoKTsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIE5vLW9wIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4gVGhpcyBzaG91bGQgbm93IGJlIGhhbmRsZWQgYnkKICAgICAgICogU2hhZHlDc3MgbGlicmFyeS4KICAgICAgICogQHBhcmFtICB7Kn0gY29udGFpbmVyIFVudXNlZAogICAgICAgKiBAcGFyYW0gIHsqfSBzaG91bGRPYnNlcnZlIFVudXNlZAogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKi8KICAgICAgc2NvcGVTdWJ0cmVlKGNvbnRhaW5lciwgc2hvdWxkT2JzZXJ2ZSkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzCiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBSZXR1cm5zIHRoZSBjb21wdXRlZCBzdHlsZSB2YWx1ZSBmb3IgdGhlIGdpdmVuIHByb3BlcnR5LgogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkgVGhlIGNzcyBwcm9wZXJ0eSBuYW1lLgogICAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IFJldHVybnMgdGhlIGNvbXB1dGVkIGNzcyBwcm9wZXJ0eSB2YWx1ZSBmb3IgdGhlIGdpdmVuCiAgICAgICAqIGBwcm9wZXJ0eWAuCiAgICAgICAqIEBzdXBwcmVzcyB7aW52YWxpZENhc3RzfSBMZWdhY3lFbGVtZW50TWl4aW4gbXVzdCBiZSBhcHBsaWVkIHRvIGFuIEhUTUxFbGVtZW50CiAgICAgICAqLwogICAgICBnZXRDb21wdXRlZFN0eWxlVmFsdWUocHJvcGVydHkpIHsKICAgICAgICByZXR1cm4gc3R5bGVJbnRlcmZhY2UuZ2V0Q29tcHV0ZWRTdHlsZVZhbHVlKC8qKiBAdHlwZSB7IUVsZW1lbnR9ICovKHRoaXMpLCBwcm9wZXJ0eSk7CiAgICAgIH0KCiAgICAgIC8vIGRlYm91bmNlCgogICAgICAvKioKICAgICAgICogQ2FsbCBgZGVib3VuY2VgIHRvIGNvbGxhcHNlIG11bHRpcGxlIHJlcXVlc3RzIGZvciBhIG5hbWVkIHRhc2sgaW50bwogICAgICAgKiBvbmUgaW52b2NhdGlvbiB3aGljaCBpcyBtYWRlIGFmdGVyIHRoZSB3YWl0IHRpbWUgaGFzIGVsYXBzZWQgd2l0aAogICAgICAgKiBubyBuZXcgcmVxdWVzdC4gIElmIG5vIHdhaXQgdGltZSBpcyBnaXZlbiwgdGhlIGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkCiAgICAgICAqIGF0IG1pY3JvdGFzayB0aW1pbmcgKGd1YXJhbnRlZWQgYmVmb3JlIHBhaW50KS4KICAgICAgICoKICAgICAgICogICAgIGRlYm91bmNlZENsaWNrQWN0aW9uKGUpIHsKICAgICAgICogICAgICAgLy8gd2lsbCBub3QgY2FsbCBgcHJvY2Vzc0NsaWNrYCBtb3JlIHRoYW4gb25jZSBwZXIgMTAwbXMKICAgICAgICogICAgICAgdGhpcy5kZWJvdW5jZSgnY2xpY2snLCBmdW5jdGlvbigpIHsKICAgICAgICogICAgICAgIHRoaXMucHJvY2Vzc0NsaWNrKCk7CiAgICAgICAqICAgICAgIH0gMTAwKTsKICAgICAgICogICAgIH0KICAgICAgICoKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IGpvYk5hbWUgU3RyaW5nIHRvIGlkZW50aWZ5IHRoZSBkZWJvdW5jZSBqb2IuCiAgICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24oKTp2b2lkfSBjYWxsYmFjayBGdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCAod2l0aCBgdGhpc2AKICAgICAgICogICBjb250ZXh0KSB3aGVuIHRoZSB3YWl0IHRpbWUgZWxhcHNlcy4KICAgICAgICogQHBhcmFtIHtudW1iZXJ9IHdhaXQgT3B0aW9uYWwgd2FpdCB0aW1lIGluIG1pbGxpc2Vjb25kcyAobXMpIGFmdGVyIHRoZQogICAgICAgKiAgIGxhc3Qgc2lnbmFsIHRoYXQgbXVzdCBlbGFwc2UgYmVmb3JlIGludm9raW5nIGBjYWxsYmFja2AKICAgICAgICogQHJldHVybiB7IU9iamVjdH0gUmV0dXJucyBhIGRlYm91bmNlciBvYmplY3Qgb24gd2hpY2ggZXhpc3RzIHRoZQogICAgICAgKiBmb2xsb3dpbmcgbWV0aG9kczogYGlzQWN0aXZlKClgIHJldHVybnMgdHJ1ZSBpZiB0aGUgZGVib3VuY2VyIGlzCiAgICAgICAqIGFjdGl2ZTsgYGNhbmNlbCgpYCBjYW5jZWxzIHRoZSBkZWJvdW5jZXIgaWYgaXQgaXMgYWN0aXZlOwogICAgICAgKiBgZmx1c2goKWAgaW1tZWRpYXRlbHkgaW52b2tlcyB0aGUgZGVib3VuY2VkIGNhbGxiYWNrIGlmIHRoZSBkZWJvdW5jZXIKICAgICAgICogaXMgYWN0aXZlLgogICAgICAgKi8KICAgICAgZGVib3VuY2Uoam9iTmFtZSwgY2FsbGJhY2ssIHdhaXQpIHsKICAgICAgICB0aGlzLl9kZWJvdW5jZXJzID0gdGhpcy5fZGVib3VuY2VycyB8fCB7fTsKICAgICAgICByZXR1cm4gdGhpcy5fZGVib3VuY2Vyc1tqb2JOYW1lXSA9IFBvbHltZXIuRGVib3VuY2VyLmRlYm91bmNlKAogICAgICAgICAgICAgIHRoaXMuX2RlYm91bmNlcnNbam9iTmFtZV0KICAgICAgICAgICAgLCB3YWl0ID4gMCA/IFBvbHltZXIuQXN5bmMudGltZU91dC5hZnRlcih3YWl0KSA6IFBvbHltZXIuQXN5bmMubWljcm9UYXNrCiAgICAgICAgICAgICwgY2FsbGJhY2suYmluZCh0aGlzKSk7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBSZXR1cm5zIHdoZXRoZXIgYSBuYW1lZCBkZWJvdW5jZXIgaXMgYWN0aXZlLgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gam9iTmFtZSBUaGUgbmFtZSBvZiB0aGUgZGVib3VuY2VyIHN0YXJ0ZWQgd2l0aCBgZGVib3VuY2VgCiAgICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIGRlYm91bmNlciBpcyBhY3RpdmUgKGhhcyBub3QgeWV0IGZpcmVkKS4KICAgICAgICovCiAgICAgIGlzRGVib3VuY2VyQWN0aXZlKGpvYk5hbWUpIHsKICAgICAgICB0aGlzLl9kZWJvdW5jZXJzID0gdGhpcy5fZGVib3VuY2VycyB8fCB7fTsKICAgICAgICBsZXQgZGVib3VuY2VyID0gdGhpcy5fZGVib3VuY2Vyc1tqb2JOYW1lXTsKICAgICAgICByZXR1cm4gISEoZGVib3VuY2VyICYmIGRlYm91bmNlci5pc0FjdGl2ZSgpKTsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIEltbWVkaWF0ZWx5IGNhbGxzIHRoZSBkZWJvdW5jZXIgYGNhbGxiYWNrYCBhbmQgaW5hY3RpdmF0ZXMgaXQuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBqb2JOYW1lIFRoZSBuYW1lIG9mIHRoZSBkZWJvdW5jZXIgc3RhcnRlZCB3aXRoIGBkZWJvdW5jZWAKICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICovCiAgICAgIGZsdXNoRGVib3VuY2VyKGpvYk5hbWUpIHsKICAgICAgICB0aGlzLl9kZWJvdW5jZXJzID0gdGhpcy5fZGVib3VuY2VycyB8fCB7fTsKICAgICAgICBsZXQgZGVib3VuY2VyID0gdGhpcy5fZGVib3VuY2Vyc1tqb2JOYW1lXTsKICAgICAgICBpZiAoZGVib3VuY2VyKSB7CiAgICAgICAgICBkZWJvdW5jZXIuZmx1c2goKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBDYW5jZWxzIGFuIGFjdGl2ZSBkZWJvdW5jZXIuICBUaGUgYGNhbGxiYWNrYCB3aWxsIG5vdCBiZSBjYWxsZWQuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBqb2JOYW1lIFRoZSBuYW1lIG9mIHRoZSBkZWJvdW5jZXIgc3RhcnRlZCB3aXRoIGBkZWJvdW5jZWAKICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICovCiAgICAgIGNhbmNlbERlYm91bmNlcihqb2JOYW1lKSB7CiAgICAgICAgdGhpcy5fZGVib3VuY2VycyA9IHRoaXMuX2RlYm91bmNlcnMgfHwge307CiAgICAgICAgbGV0IGRlYm91bmNlciA9IHRoaXMuX2RlYm91bmNlcnNbam9iTmFtZV07CiAgICAgICAgaWYgKGRlYm91bmNlcikgewogICAgICAgICAgZGVib3VuY2VyLmNhbmNlbCgpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIFJ1bnMgYSBjYWxsYmFjayBmdW5jdGlvbiBhc3luY2hyb25vdXNseS4KICAgICAgICoKICAgICAgICogQnkgZGVmYXVsdCAoaWYgbm8gd2FpdFRpbWUgaXMgc3BlY2lmaWVkKSwgYXN5bmMgY2FsbGJhY2tzIGFyZSBydW4gYXQKICAgICAgICogbWljcm90YXNrIHRpbWluZywgd2hpY2ggd2lsbCBvY2N1ciBiZWZvcmUgcGFpbnQuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7IUZ1bmN0aW9ufSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gdG8gcnVuLCBib3VuZCB0byBgdGhpc2AuCiAgICAgICAqIEBwYXJhbSB7bnVtYmVyPX0gd2FpdFRpbWUgVGltZSB0byB3YWl0IGJlZm9yZSBjYWxsaW5nIHRoZQogICAgICAgKiAgIGBjYWxsYmFja2AuICBJZiB1bnNwZWNpZmllZCBvciAwLCB0aGUgY2FsbGJhY2sgd2lsbCBiZSBydW4gYXQgbWljcm90YXNrCiAgICAgICAqICAgdGltaW5nIChiZWZvcmUgcGFpbnQpLgogICAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IEhhbmRsZSB0aGF0IG1heSBiZSB1c2VkIHRvIGNhbmNlbCB0aGUgYXN5bmMgam9iLgogICAgICAgKi8KICAgICAgYXN5bmMoY2FsbGJhY2ssIHdhaXRUaW1lKSB7CiAgICAgICAgcmV0dXJuIHdhaXRUaW1lID4gMCA/IFBvbHltZXIuQXN5bmMudGltZU91dC5ydW4oY2FsbGJhY2suYmluZCh0aGlzKSwgd2FpdFRpbWUpIDoKICAgICAgICAgICAgflBvbHltZXIuQXN5bmMubWljcm9UYXNrLnJ1bihjYWxsYmFjay5iaW5kKHRoaXMpKTsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIENhbmNlbHMgYW4gYXN5bmMgb3BlcmF0aW9uIHN0YXJ0ZWQgd2l0aCBgYXN5bmNgLgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge251bWJlcn0gaGFuZGxlIEhhbmRsZSByZXR1cm5lZCBmcm9tIG9yaWdpbmFsIGBhc3luY2AgY2FsbCB0bwogICAgICAgKiAgIGNhbmNlbC4KICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICovCiAgICAgIGNhbmNlbEFzeW5jKGhhbmRsZSkgewogICAgICAgIGhhbmRsZSA8IDAgPyBQb2x5bWVyLkFzeW5jLm1pY3JvVGFzay5jYW5jZWwofmhhbmRsZSkgOgogICAgICAgICAgICBQb2x5bWVyLkFzeW5jLnRpbWVPdXQuY2FuY2VsKGhhbmRsZSk7CiAgICAgIH0KCiAgICAgIC8vIG90aGVyCgogICAgICAvKioKICAgICAgICogQ29udmVuaWVuY2UgbWV0aG9kIGZvciBjcmVhdGluZyBhbiBlbGVtZW50IGFuZCBjb25maWd1cmluZyBpdC4KICAgICAgICoKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHRhZyBIVE1MIGVsZW1lbnQgdGFnIHRvIGNyZWF0ZS4KICAgICAgICogQHBhcmFtIHtPYmplY3Q9fSBwcm9wcyBPYmplY3Qgb2YgcHJvcGVydGllcyB0byBjb25maWd1cmUgb24gdGhlCiAgICAgICAqICAgIGluc3RhbmNlLgogICAgICAgKiBAcmV0dXJuIHshRWxlbWVudH0gTmV3bHkgY3JlYXRlZCBhbmQgY29uZmlndXJlZCBlbGVtZW50LgogICAgICAgKi8KICAgICAgY3JlYXRlKHRhZywgcHJvcHMpIHsKICAgICAgICBsZXQgZWx0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWcpOwogICAgICAgIGlmIChwcm9wcykgewogICAgICAgICAgaWYgKGVsdC5zZXRQcm9wZXJ0aWVzKSB7CiAgICAgICAgICAgIGVsdC5zZXRQcm9wZXJ0aWVzKHByb3BzKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGZvciAobGV0IG4gaW4gcHJvcHMpIHsKICAgICAgICAgICAgICBlbHRbbl0gPSBwcm9wc1tuXTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gZWx0OwogICAgICB9CgogICAgICAvKioKICAgICAgICogQ29udmVuaWVuY2UgbWV0aG9kIGZvciBpbXBvcnRpbmcgYW4gSFRNTCBkb2N1bWVudCBpbXBlcmF0aXZlbHkuCiAgICAgICAqCiAgICAgICAqIFRoaXMgbWV0aG9kIGNyZWF0ZXMgYSBuZXcgYDxsaW5rIHJlbD0iaW1wb3J0Ij5gIGVsZW1lbnQgd2l0aAogICAgICAgKiB0aGUgcHJvdmlkZWQgVVJMIGFuZCBhcHBlbmRzIGl0IHRvIHRoZSBkb2N1bWVudCB0byBzdGFydCBsb2FkaW5nLgogICAgICAgKiBJbiB0aGUgYG9ubG9hZGAgY2FsbGJhY2ssIHRoZSBgaW1wb3J0YCBwcm9wZXJ0eSBvZiB0aGUgYGxpbmtgCiAgICAgICAqIGVsZW1lbnQgd2lsbCBjb250YWluIHRoZSBpbXBvcnRlZCBkb2N1bWVudCBjb250ZW50cy4KICAgICAgICoKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IGhyZWYgVVJMIHRvIGRvY3VtZW50IHRvIGxvYWQuCiAgICAgICAqIEBwYXJhbSB7P2Z1bmN0aW9uKCFFdmVudCk6dm9pZD19IG9ubG9hZCBDYWxsYmFjayB0byBub3RpZnkgd2hlbiBhbiBpbXBvcnQgc3VjY2Vzc2Z1bGx5CiAgICAgICAqICAgbG9hZGVkLgogICAgICAgKiBAcGFyYW0gez9mdW5jdGlvbighRXJyb3JFdmVudCk6dm9pZD19IG9uZXJyb3IgQ2FsbGJhY2sgdG8gbm90aWZ5IHdoZW4gYW4gaW1wb3J0CiAgICAgICAqICAgdW5zdWNjZXNzZnVsbHkgbG9hZGVkLgogICAgICAgKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRBc3luYyBUcnVlIGlmIHRoZSBpbXBvcnQgc2hvdWxkIGJlIGxvYWRlZCBgYXN5bmNgLgogICAgICAgKiAgIERlZmF1bHRzIHRvIGBmYWxzZWAuCiAgICAgICAqIEByZXR1cm4geyFIVE1MTGlua0VsZW1lbnR9IFRoZSBsaW5rIGVsZW1lbnQgZm9yIHRoZSBVUkwgdG8gYmUgbG9hZGVkLgogICAgICAgKi8KICAgICAgaW1wb3J0SHJlZihocmVmLCBvbmxvYWQsIG9uZXJyb3IsIG9wdEFzeW5jKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnMKICAgICAgICBsZXQgbG9hZEZuID0gb25sb2FkID8gb25sb2FkLmJpbmQodGhpcykgOiBudWxsOwogICAgICAgIGxldCBlcnJvckZuID0gb25lcnJvciA/IG9uZXJyb3IuYmluZCh0aGlzKSA6IG51bGw7CiAgICAgICAgcmV0dXJuIFBvbHltZXIuaW1wb3J0SHJlZihocmVmLCBsb2FkRm4sIGVycm9yRm4sIG9wdEFzeW5jKTsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIFBvbHlmaWxsIGZvciBFbGVtZW50LnByb3RvdHlwZS5tYXRjaGVzLCB3aGljaCBpcyBzb21ldGltZXMgc3RpbGwKICAgICAgICogcHJlZml4ZWQuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzZWxlY3RvciBTZWxlY3RvciB0byB0ZXN0LgogICAgICAgKiBAcGFyYW0geyFFbGVtZW50PX0gbm9kZSBFbGVtZW50IHRvIHRlc3QgdGhlIHNlbGVjdG9yIGFnYWluc3QuCiAgICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIGVsZW1lbnQgbWF0Y2hlcyB0aGUgc2VsZWN0b3IuCiAgICAgICAqLwogICAgICBlbGVtZW50TWF0Y2hlcyhzZWxlY3Rvciwgbm9kZSkgewogICAgICAgIHJldHVybiBQb2x5bWVyLmRvbS5tYXRjaGVzU2VsZWN0b3IoLyoqIEB0eXBlIHshRWxlbWVudH0gKi8gKG5vZGUgfHwgdGhpcyksIHNlbGVjdG9yKTsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIFRvZ2dsZXMgYW4gSFRNTCBhdHRyaWJ1dGUgb24gb3Igb2ZmLgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBIVE1MIGF0dHJpYnV0ZSBuYW1lCiAgICAgICAqIEBwYXJhbSB7Ym9vbGVhbj19IGJvb2wgQm9vbGVhbiB0byBmb3JjZSB0aGUgYXR0cmlidXRlIG9uIG9yIG9mZi4KICAgICAgICogICAgV2hlbiB1bnNwZWNpZmllZCwgdGhlIHN0YXRlIG9mIHRoZSBhdHRyaWJ1dGUgd2lsbCBiZSByZXZlcnNlZC4KICAgICAgICogQHBhcmFtIHtFbGVtZW50PX0gbm9kZSBOb2RlIHRvIHRhcmdldC4gIERlZmF1bHRzIHRvIGB0aGlzYC4KICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICovCiAgICAgIHRvZ2dsZUF0dHJpYnV0ZShuYW1lLCBib29sLCBub2RlKSB7CiAgICAgICAgbm9kZSA9IC8qKiBAdHlwZSB7RWxlbWVudH0gKi8gKG5vZGUgfHwgdGhpcyk7CiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMSkgewogICAgICAgICAgYm9vbCA9ICFub2RlLmhhc0F0dHJpYnV0ZShuYW1lKTsKICAgICAgICB9CiAgICAgICAgaWYgKGJvb2wpIHsKICAgICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKG5hbWUsICcnKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgbm9kZS5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7CiAgICAgICAgfQogICAgICB9CgoKICAgICAgLyoqCiAgICAgICAqIFRvZ2dsZXMgYSBDU1MgY2xhc3Mgb24gb3Igb2ZmLgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBDU1MgY2xhc3MgbmFtZQogICAgICAgKiBAcGFyYW0ge2Jvb2xlYW49fSBib29sIEJvb2xlYW4gdG8gZm9yY2UgdGhlIGNsYXNzIG9uIG9yIG9mZi4KICAgICAgICogICAgV2hlbiB1bnNwZWNpZmllZCwgdGhlIHN0YXRlIG9mIHRoZSBjbGFzcyB3aWxsIGJlIHJldmVyc2VkLgogICAgICAgKiBAcGFyYW0ge0VsZW1lbnQ9fSBub2RlIE5vZGUgdG8gdGFyZ2V0LiAgRGVmYXVsdHMgdG8gYHRoaXNgLgogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKi8KICAgICAgdG9nZ2xlQ2xhc3MobmFtZSwgYm9vbCwgbm9kZSkgewogICAgICAgIG5vZGUgPSAvKiogQHR5cGUge0VsZW1lbnR9ICovIChub2RlIHx8IHRoaXMpOwogICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09IDEpIHsKICAgICAgICAgIGJvb2wgPSAhbm9kZS5jbGFzc0xpc3QuY29udGFpbnMobmFtZSk7CiAgICAgICAgfQogICAgICAgIGlmIChib29sKSB7CiAgICAgICAgICBub2RlLmNsYXNzTGlzdC5hZGQobmFtZSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIG5vZGUuY2xhc3NMaXN0LnJlbW92ZShuYW1lKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBDcm9zcy1wbGF0Zm9ybSBoZWxwZXIgZm9yIHNldHRpbmcgYW4gZWxlbWVudCdzIENTUyBgdHJhbnNmb3JtYCBwcm9wZXJ0eS4KICAgICAgICoKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHRyYW5zZm9ybVRleHQgVHJhbnNmb3JtIHNldHRpbmcuCiAgICAgICAqIEBwYXJhbSB7RWxlbWVudD19IG5vZGUgRWxlbWVudCB0byBhcHBseSB0aGUgdHJhbnNmb3JtIHRvLgogICAgICAgKiBEZWZhdWx0cyB0byBgdGhpc2AKICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICovCiAgICAgIHRyYW5zZm9ybSh0cmFuc2Zvcm1UZXh0LCBub2RlKSB7CiAgICAgICAgbm9kZSA9IC8qKiBAdHlwZSB7RWxlbWVudH0gKi8gKG5vZGUgfHwgdGhpcyk7CiAgICAgICAgbm9kZS5zdHlsZS53ZWJraXRUcmFuc2Zvcm0gPSB0cmFuc2Zvcm1UZXh0OwogICAgICAgIG5vZGUuc3R5bGUudHJhbnNmb3JtID0gdHJhbnNmb3JtVGV4dDsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIENyb3NzLXBsYXRmb3JtIGhlbHBlciBmb3Igc2V0dGluZyBhbiBlbGVtZW50J3MgQ1NTIGB0cmFuc2xhdGUzZGAKICAgICAgICogcHJvcGVydHkuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4IFggb2Zmc2V0LgogICAgICAgKiBAcGFyYW0ge251bWJlcn0geSBZIG9mZnNldC4KICAgICAgICogQHBhcmFtIHtudW1iZXJ9IHogWiBvZmZzZXQuCiAgICAgICAqIEBwYXJhbSB7RWxlbWVudD19IG5vZGUgRWxlbWVudCB0byBhcHBseSB0aGUgdHJhbnNmb3JtIHRvLgogICAgICAgKiBEZWZhdWx0cyB0byBgdGhpc2AuCiAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAqLwogICAgICB0cmFuc2xhdGUzZCh4LCB5LCB6LCBub2RlKSB7CiAgICAgICAgbm9kZSA9IC8qKiBAdHlwZSB7RWxlbWVudH0gKi8gKG5vZGUgfHwgdGhpcyk7CiAgICAgICAgdGhpcy50cmFuc2Zvcm0oJ3RyYW5zbGF0ZTNkKCcgKyB4ICsgJywnICsgeSArICcsJyArIHogKyAnKScsIG5vZGUpOwogICAgICB9CgogICAgICAvKioKICAgICAgICogUmVtb3ZlcyBhbiBpdGVtIGZyb20gYW4gYXJyYXksIGlmIGl0IGV4aXN0cy4KICAgICAgICoKICAgICAgICogSWYgdGhlIGFycmF5IGlzIHNwZWNpZmllZCBieSBwYXRoLCBhIGNoYW5nZSBub3RpZmljYXRpb24gaXMKICAgICAgICogZ2VuZXJhdGVkLCBzbyB0aGF0IG9ic2VydmVycywgZGF0YSBiaW5kaW5ncyBhbmQgY29tcHV0ZWQKICAgICAgICogcHJvcGVydGllcyB3YXRjaGluZyB0aGF0IHBhdGggY2FuIHVwZGF0ZS4KICAgICAgICoKICAgICAgICogSWYgdGhlIGFycmF5IGlzIHBhc3NlZCBkaXJlY3RseSwgKipubyBjaGFuZ2UKICAgICAgICogbm90aWZpY2F0aW9uIGlzIGdlbmVyYXRlZCoqLgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge3N0cmluZyB8ICFBcnJheTxudW1iZXJ8c3RyaW5nPn0gYXJyYXlPclBhdGggUGF0aCB0byBhcnJheSBmcm9tIHdoaWNoIHRvIHJlbW92ZSB0aGUgaXRlbQogICAgICAgKiAgIChvciB0aGUgYXJyYXkgaXRzZWxmKS4KICAgICAgICogQHBhcmFtIHsqfSBpdGVtIEl0ZW0gdG8gcmVtb3ZlLgogICAgICAgKiBAcmV0dXJuIHtBcnJheX0gQXJyYXkgY29udGFpbmluZyBpdGVtIHJlbW92ZWQuCiAgICAgICAqLwogICAgICBhcnJheURlbGV0ZShhcnJheU9yUGF0aCwgaXRlbSkgewogICAgICAgIGxldCBpbmRleDsKICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShhcnJheU9yUGF0aCkpIHsKICAgICAgICAgIGluZGV4ID0gYXJyYXlPclBhdGguaW5kZXhPZihpdGVtKTsKICAgICAgICAgIGlmIChpbmRleCA+PSAwKSB7CiAgICAgICAgICAgIHJldHVybiBhcnJheU9yUGF0aC5zcGxpY2UoaW5kZXgsIDEpOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBsZXQgYXJyID0gUG9seW1lci5QYXRoLmdldCh0aGlzLCBhcnJheU9yUGF0aCk7CiAgICAgICAgICBpbmRleCA9IGFyci5pbmRleE9mKGl0ZW0pOwogICAgICAgICAgaWYgKGluZGV4ID49IDApIHsKICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3BsaWNlKGFycmF5T3JQYXRoLCBpbmRleCwgMSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBudWxsOwogICAgICB9CgogICAgICAvLyBsb2dnaW5nCgogICAgICAvKioKICAgICAgICogRmFjYWRlcyBgY29uc29sZS5sb2dgL2B3YXJuYC9gZXJyb3JgIGFzIG92ZXJyaWRlIHBvaW50LgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gbGV2ZWwgT25lIG9mICdsb2cnLCAnd2FybicsICdlcnJvcicKICAgICAgICogQHBhcmFtIHtBcnJheX0gYXJncyBBcnJheSBvZiBzdHJpbmdzIG9yIG9iamVjdHMgdG8gbG9nCiAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAqLwogICAgICBfbG9nZ2VyKGxldmVsLCBhcmdzKSB7CiAgICAgICAgLy8gYWNjZXB0IFsnZm9vJywgJ2JhciddIGFuZCBbWydmb28nLCAnYmFyJ11dCiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYXJncykgJiYgYXJncy5sZW5ndGggPT09IDEgJiYgQXJyYXkuaXNBcnJheShhcmdzWzBdKSkgewogICAgICAgICAgYXJncyA9IGFyZ3NbMF07CiAgICAgICAgfQogICAgICAgIHN3aXRjaChsZXZlbCkgewogICAgICAgICAgY2FzZSAnbG9nJzoKICAgICAgICAgIGNhc2UgJ3dhcm4nOgogICAgICAgICAgY2FzZSAnZXJyb3InOgogICAgICAgICAgICBjb25zb2xlW2xldmVsXSguLi5hcmdzKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBGYWNhZGVzIGBjb25zb2xlLmxvZ2AgYXMgYW4gb3ZlcnJpZGUgcG9pbnQuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7Li4uKn0gYXJncyBBcnJheSBvZiBzdHJpbmdzIG9yIG9iamVjdHMgdG8gbG9nCiAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAqLwogICAgICBfbG9nKC4uLmFyZ3MpIHsKICAgICAgICB0aGlzLl9sb2dnZXIoJ2xvZycsIGFyZ3MpOwogICAgICB9CgogICAgICAvKioKICAgICAgICogRmFjYWRlcyBgY29uc29sZS53YXJuYCBhcyBhbiBvdmVycmlkZSBwb2ludC4KICAgICAgICoKICAgICAgICogQHBhcmFtIHsuLi4qfSBhcmdzIEFycmF5IG9mIHN0cmluZ3Mgb3Igb2JqZWN0cyB0byBsb2cKICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICovCiAgICAgIF93YXJuKC4uLmFyZ3MpIHsKICAgICAgICB0aGlzLl9sb2dnZXIoJ3dhcm4nLCBhcmdzKTsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIEZhY2FkZXMgYGNvbnNvbGUuZXJyb3JgIGFzIGFuIG92ZXJyaWRlIHBvaW50LgogICAgICAgKgogICAgICAgKiBAcGFyYW0gey4uLip9IGFyZ3MgQXJyYXkgb2Ygc3RyaW5ncyBvciBvYmplY3RzIHRvIGxvZwogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKi8KICAgICAgX2Vycm9yKC4uLmFyZ3MpIHsKICAgICAgICB0aGlzLl9sb2dnZXIoJ2Vycm9yJywgYXJncyk7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBGb3JtYXRzIGEgbWVzc2FnZSB1c2luZyB0aGUgZWxlbWVudCB0eXBlIGFuIGEgbWV0aG9kIG5hbWUuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBtZXRob2ROYW1lIE1ldGhvZCBuYW1lIHRvIGFzc29jaWF0ZSB3aXRoIG1lc3NhZ2UKICAgICAgICogQHBhcmFtIHsuLi4qfSBhcmdzIEFycmF5IG9mIHN0cmluZ3Mgb3Igb2JqZWN0cyB0byBsb2cKICAgICAgICogQHJldHVybiB7QXJyYXl9IEFycmF5IHdpdGggZm9ybWF0dGluZyBpbmZvcm1hdGlvbiBmb3IgYGNvbnNvbGVgCiAgICAgICAqICAgbG9nZ2luZy4KICAgICAgICovCiAgICAgIF9sb2dmKG1ldGhvZE5hbWUsIC4uLmFyZ3MpIHsKICAgICAgICByZXR1cm4gWydbJXM6OiVzXScsIHRoaXMuaXMsIG1ldGhvZE5hbWUsIC4uLmFyZ3NdOwogICAgICB9CgogICAgfQoKICAgIExlZ2FjeUVsZW1lbnQucHJvdG90eXBlLmlzID0gJyc7CgogICAgcmV0dXJuIExlZ2FjeUVsZW1lbnQ7CgogIH0pOwoKfSkoKTsKPC9zY3JpcHQ+PHNjcmlwdD4KCiAgKGZ1bmN0aW9uKCkgewoKICAgICd1c2Ugc3RyaWN0JzsKCiAgICBjb25zdCBsaWZlY3ljbGVQcm9wcyA9IHsKICAgICAgYXR0YWNoZWQ6IHRydWUsCiAgICAgIGRldGFjaGVkOiB0cnVlLAogICAgICByZWFkeTogdHJ1ZSwKICAgICAgY3JlYXRlZDogdHJ1ZSwKICAgICAgYmVmb3JlUmVnaXN0ZXI6IHRydWUsCiAgICAgIHJlZ2lzdGVyZWQ6IHRydWUsCiAgICAgIGF0dHJpYnV0ZUNoYW5nZWQ6IHRydWUsCiAgICAgIGxpc3RlbmVyczogdHJ1ZSwKICAgICAgaG9zdEF0dHJpYnV0ZXM6IHRydWUKICAgIH07CgogICAgY29uc3QgZXhjbHVkZU9uSW5mbyA9IHsKICAgICAgYXR0YWNoZWQ6IHRydWUsCiAgICAgIGRldGFjaGVkOiB0cnVlLAogICAgICByZWFkeTogdHJ1ZSwKICAgICAgY3JlYXRlZDogdHJ1ZSwKICAgICAgYmVmb3JlUmVnaXN0ZXI6IHRydWUsCiAgICAgIHJlZ2lzdGVyZWQ6IHRydWUsCiAgICAgIGF0dHJpYnV0ZUNoYW5nZWQ6IHRydWUsCiAgICAgIGJlaGF2aW9yczogdHJ1ZSwKICAgICAgX25vQWNjZXNzb3JzOiB0cnVlCiAgICB9OwoKICAgIGNvbnN0IGV4Y2x1ZGVPbkJlaGF2aW9ycyA9IE9iamVjdC5hc3NpZ24oewogICAgICBsaXN0ZW5lcnM6IHRydWUsCiAgICAgIGhvc3RBdHRyaWJ1dGVzOiB0cnVlLAogICAgICBwcm9wZXJ0aWVzOiB0cnVlLAogICAgICBvYnNlcnZlcnM6IHRydWUsCiAgICB9LCBleGNsdWRlT25JbmZvKTsKCiAgICBmdW5jdGlvbiBjb3B5UHJvcGVydGllcyhzb3VyY2UsIHRhcmdldCwgZXhjbHVkZVByb3BzKSB7CiAgICAgIGNvbnN0IG5vQWNjZXNzb3JzID0gc291cmNlLl9ub0FjY2Vzc29yczsKICAgICAgZm9yIChsZXQgcCBpbiBzb3VyY2UpIHsKICAgICAgICBpZiAoIShwIGluIGV4Y2x1ZGVQcm9wcykpIHsKICAgICAgICAgIGlmIChub0FjY2Vzc29ycykgewogICAgICAgICAgICB0YXJnZXRbcF0gPSBzb3VyY2VbcF07CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBsZXQgcGQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwgcCk7CiAgICAgICAgICAgIGlmIChwZCkgewogICAgICAgICAgICAgIC8vIGVuc3VyZSBwcm9wZXJ0eSBpcyBjb25maWd1cmFibGUgc28gdGhhdCBhIGxhdGVyIGJlaGF2aW9yIGNhbgogICAgICAgICAgICAgIC8vIHJlLWNvbmZpZ3VyZSBpdC4KICAgICAgICAgICAgICBwZC5jb25maWd1cmFibGUgPSB0cnVlOwogICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIHAsIHBkKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogQXBwbGllcyBhICJsZWdhY3kiIGJlaGF2aW9yIG9yIGFycmF5IG9mIGJlaGF2aW9ycyB0byB0aGUgcHJvdmlkZWQgY2xhc3MuCiAgICAgKgogICAgICogTm90ZTogdGhpcyBtZXRob2Qgd2lsbCBhdXRvbWF0aWNhbGx5IGFsc28gYXBwbHkgdGhlIGBQb2x5bWVyLkxlZ2FjeUVsZW1lbnRNaXhpbmAKICAgICAqIHRvIGVuc3VyZSB0aGF0IGFueSBsZWdhY3kgYmVoYXZpb3JzIGNhbiByZWx5IG9uIGxlZ2FjeSBQb2x5bWVyIEFQSSBvbgogICAgICogdGhlIHVuZGVybHlpbmcgZWxlbWVudC4KICAgICAqCiAgICAgKiBAdGVtcGxhdGUgVAogICAgICogQHBhcmFtIHshT2JqZWN0fCFBcnJheTwhT2JqZWN0Pn0gYmVoYXZpb3JzIEJlaGF2aW9yIG9iamVjdCBvciBhcnJheSBvZiBiZWhhdmlvcnMuCiAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKG5ldzpUKX0ga2xhc3MgRWxlbWVudCBjbGFzcy4KICAgICAqIEByZXR1cm4ge2Z1bmN0aW9uKG5ldzpUKX0gUmV0dXJucyBhIG5ldyBFbGVtZW50IGNsYXNzIGV4dGVuZGVkIGJ5IHRoZQogICAgICogcGFzc2VkIGluIGBiZWhhdmlvcnNgIGFuZCBhbHNvIGJ5IGBQb2x5bWVyLkxlZ2FjeUVsZW1lbnRNaXhpbmAuCiAgICAgKiBAbWVtYmVyb2YgUG9seW1lcgogICAgICogQHN1cHByZXNzIHtpbnZhbGlkQ2FzdHMsIGNoZWNrVHlwZXN9CiAgICAgKi8KICAgIGZ1bmN0aW9uIG1peGluQmVoYXZpb3JzKGJlaGF2aW9ycywga2xhc3MpIHsKICAgICAgcmV0dXJuIEdlbmVyYXRlQ2xhc3NGcm9tSW5mbyh7fSwgUG9seW1lci5MZWdhY3lFbGVtZW50TWl4aW4oa2xhc3MpLCBiZWhhdmlvcnMpOwogICAgfQoKICAgIC8vIE5PVEU6CiAgICAvLyAxLngKICAgIC8vIEJlaGF2aW9ycyB3ZXJlIG1peGVkIGluICppbiByZXZlcnNlIG9yZGVyKiBhbmQgZGUtZHVwZWQgb24gdGhlIGZseS4KICAgIC8vIFRoZSBydWxlIHdhcyB0aGF0IGJlaGF2aW9yIHByb3BlcnRpZXMgd2VyZSBjb3BpZWQgb250byB0aGUgZWxlbWVudAogICAgLy8gcHJvdG90eXBlIGlmIGFuZCBvbmx5IGlmIHRoZSBwcm9wZXJ0eSBkaWQgbm90IGFscmVhZHkgZXhpc3QuCiAgICAvLyBHaXZlbjogUG9seW1lcnsgYmVoYXZpb3JzOiBbQSwgQiwgQywgQSwgQl19LCBwcm9wZXJ0eSBjb3B5IG9yZGVyIHdhczoKICAgIC8vICgxKSwgQiwgKDIpLCBBLCAoMykgQy4gVGhpcyBtZWFucyBwcm90b3R5cGUgcHJvcGVydGllcyB3aW4gb3ZlcgogICAgLy8gQiBwcm9wZXJ0aWVzIHdpbiBvdmVyIEEgd2luIG92ZXIgQy4gVGhpcyBtaXJyb3JzIHdoYXQgd291bGQgaGFwcGVuCiAgICAvLyB3aXRoIGluaGVyaXRhbmNlIGlmIGVsZW1lbnQgZXh0ZW5kZWQgQiBleHRlbmRlZCBBIGV4dGVuZGVkIEMuCiAgICAvLwogICAgLy8gQWdhaW4gZ2l2ZW4sIFBvbHltZXJ7IGJlaGF2aW9yczogW0EsIEIsIEMsIEEsIEJdfSwgdGhlIHJlc3VsdGluZwogICAgLy8gYGJlaGF2aW9yc2AgYXJyYXkgd2FzIFtDLCBBLCBCXS4KICAgIC8vIEJlaGF2aW9yIGxpZmVjeWNsZSBtZXRob2RzIHdlcmUgY2FsbGVkIGluIGJlaGF2aW9yIGFycmF5IG9yZGVyCiAgICAvLyBmb2xsb3dlZCBieSB0aGUgZWxlbWVudCwgZS5nLiAoMSkgQy5jcmVhdGVkLCAoMikgQS5jcmVhdGVkLAogICAgLy8gKDMpIEIuY3JlYXRlZCwgKDQpIGVsZW1lbnQuY3JlYXRlZC4gVGhlcmUgd2FzIG5vIHN1cHBvcnQgZm9yCiAgICAvLyBzdXBlciwgYW5kICJzdXBlci1iZWhhdmlvciIgbWV0aG9kcyB3ZXJlIGNhbGxhYmxlIG9ubHkgYnkgbmFtZSkuCiAgICAvLwogICAgLy8gMi54CiAgICAvLyBCZWhhdmlvcnMgYXJlIG1hZGUgaW50byBwcm9wZXIgbWl4aW5zIHdoaWNoIGxpdmUgaW4gdGhlCiAgICAvLyBlbGVtZW50J3MgcHJvdG90eXBlIGNoYWluLiBCZWhhdmlvcnMgYXJlIHBsYWNlZCBpbiB0aGUgZWxlbWVudCBwcm90b3R5cGUKICAgIC8vIGVsZGVzdCB0byB5b3VuZ2VzdCBhbmQgZGUtZHVwZWQgeW91bmdlc3QgdG8gb2xkZXN0OgogICAgLy8gU28sIGZpcnN0IFtBLCBCLCBDLCBBLCBCXSBiZWNvbWVzIFtDLCBBLCBCXSB0aGVuLAogICAgLy8gdGhlIGVsZW1lbnQgcHJvdG90eXBlIGJlY29tZXMgKG9sZGVzdCkgKDEpIFBvbHltZXIuRWxlbWVudCwgKDIpIGNsYXNzKEMpLAogICAgLy8gKDMpIGNsYXNzKEEpLCAoNCkgY2xhc3MoQiksICg1KSBjbGFzcyhQb2x5bWVyKHsuLi59KSkuCiAgICAvLyBSZXN1bHQ6CiAgICAvLyBUaGlzIG1lYW5zIGVsZW1lbnQgcHJvcGVydGllcyB3aW4gb3ZlciBCIHByb3BlcnRpZXMgd2luIG92ZXIgQSB3aW4KICAgIC8vIG92ZXIgQy4gKHNhbWUgYXMgMS54KQogICAgLy8gSWYgbGlmZWN5Y2xlIGlzIGNhbGxlZCAoc3VwZXIgdGhlbiBtZSksIG9yZGVyIGlzCiAgICAvLyAoMSkgQy5jcmVhdGVkLCAoMikgQS5jcmVhdGVkLCAoMykgQi5jcmVhdGVkLCAoNCkgZWxlbWVudC5jcmVhdGVkCiAgICAvLyAoYWdhaW4gc2FtZSBhcyAxLngpCiAgICBmdW5jdGlvbiBhcHBseUJlaGF2aW9ycyhwcm90bywgYmVoYXZpb3JzLCBsaWZlY3ljbGUpIHsKICAgICAgZm9yIChsZXQgaT0wOyBpPGJlaGF2aW9ycy5sZW5ndGg7IGkrKykgewogICAgICAgIGFwcGx5SW5mbyhwcm90bywgYmVoYXZpb3JzW2ldLCBsaWZlY3ljbGUsIGV4Y2x1ZGVPbkJlaGF2aW9ycyk7CiAgICAgIH0KICAgIH0KCiAgICBmdW5jdGlvbiBhcHBseUluZm8ocHJvdG8sIGluZm8sIGxpZmVjeWNsZSwgZXhjbHVkZVByb3BzKSB7CiAgICAgIGNvcHlQcm9wZXJ0aWVzKGluZm8sIHByb3RvLCBleGNsdWRlUHJvcHMpOwogICAgICBmb3IgKGxldCBwIGluIGxpZmVjeWNsZVByb3BzKSB7CiAgICAgICAgaWYgKGluZm9bcF0pIHsKICAgICAgICAgIGxpZmVjeWNsZVtwXSA9IGxpZmVjeWNsZVtwXSB8fCBbXTsKICAgICAgICAgIGxpZmVjeWNsZVtwXS5wdXNoKGluZm9bcF0pOwogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIHtBcnJheX0gYmVoYXZpb3JzIExpc3Qgb2YgYmVoYXZpb3JzIHRvIGZsYXR0ZW4uCiAgICAgKiBAcGFyYW0ge0FycmF5PX0gbGlzdCBUYXJnZXQgbGlzdCB0byBmbGF0dGVuIGJlaGF2aW9ycyBpbnRvLgogICAgICogQHBhcmFtIHtBcnJheT19IGV4Y2x1ZGUgTGlzdCBvZiBiZWhhdmlvcnMgdG8gZXhjbHVkZSBmcm9tIHRoZSBsaXN0LgogICAgICogQHJldHVybiB7IUFycmF5fSBSZXR1cm5zIHRoZSBsaXN0IG9mIGZsYXR0ZW5lZCBiZWhhdmlvcnMuCiAgICAgKi8KICAgIGZ1bmN0aW9uIGZsYXR0ZW5CZWhhdmlvcnMoYmVoYXZpb3JzLCBsaXN0LCBleGNsdWRlKSB7CiAgICAgIGxpc3QgPSBsaXN0IHx8IFtdOwogICAgICBmb3IgKGxldCBpPWJlaGF2aW9ycy5sZW5ndGgtMTsgaSA+PSAwOyBpLS0pIHsKICAgICAgICBsZXQgYiA9IGJlaGF2aW9yc1tpXTsKICAgICAgICBpZiAoYikgewogICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYikpIHsKICAgICAgICAgICAgZmxhdHRlbkJlaGF2aW9ycyhiLCBsaXN0KTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIC8vIGRlZHVwCiAgICAgICAgICAgIGlmIChsaXN0LmluZGV4T2YoYikgPCAwICYmICghZXhjbHVkZSB8fCBleGNsdWRlLmluZGV4T2YoYikgPCAwKSkgewogICAgICAgICAgICAgIGxpc3QudW5zaGlmdChiKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBjb25zb2xlLndhcm4oJ2JlaGF2aW9yIGlzIG51bGwsIGNoZWNrIGZvciBtaXNzaW5nIG9yIDQwNCBpbXBvcnQnKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIGxpc3Q7CiAgICB9CgogICAgLyogTm90ZSBhYm91dCBjb25zdHJ1Y3Rpb24gYW5kIGV4dGVuc2lvbiBvZiBsZWdhY3kgY2xhc3Nlcy4KICAgICAgW0NoYW5nZWQgaW4gUTQgMjAxOCB0byBvcHRpbWl6ZSBwZXJmb3JtYW5jZS5dCgogICAgICBXaGVuIGNhbGxpbmcgYFBvbHltZXJgIG9yIGBtaXhpbkJlaGF2aW9yc2AsIHRoZSBnZW5lcmF0ZWQgY2xhc3MgYmVsb3cgaXMKICAgICAgbWFkZS4gVGhlIGxpc3Qgb2YgYmVoYXZpb3JzIHdhcyBwcmV2aW91c2x5IG1hZGUgaW50byBvbmUgZ2VuZXJhdGVkIGNsYXNzIHBlcgogICAgICBiZWhhdmlvciwgYnV0IHRoaXMgaXMgbm8gbG9uZ2VyIHRoZSBjYXNlIGFzIGJlaGF2aW9ycyBhcmUgbm93IGNhbGxlZAogICAgICBtYW51YWxseS4gTm90ZSwgdGhlcmUgbWF5ICpzdGlsbCogYmUgbXVsdGlwbGUgZ2VuZXJhdGVkIGNsYXNzZXMgaW4gdGhlCiAgICAgIGVsZW1lbnQncyBwcm90b3R5cGUgY2hhaW4gaWYgZXh0ZW5zaW9uIGlzIHVzZWQgd2l0aCBgbWl4aW5CZWhhdmlvcnNgLgoKICAgICAgVGhlIGdlbmVyYXRlZCBjbGFzcyBpcyBkaXJlY3RseSB0aWVkIHRvIHRoZSBpbmZvIG9iamVjdCBhbmQgYmVoYXZpb3JzCiAgICAgIHVzZWQgdG8gY3JlYXRlIGl0LiBUaGF0IGxpc3Qgb2YgYmVoYXZpb3JzIGlzIGZpbHRlcmVkIHNvIGl0J3Mgb25seSB0aGUKICAgICAgYmVoYXZpb3JzIG5vdCBhY3RpdmUgb24gdGhlIHN1cGVyY2xhc3MuIEluIG9yZGVyIHRvIGNhbGwgdGhyb3VnaCB0byB0aGUKICAgICAgZW50aXJlIGxpc3Qgb2YgbGlmZWN5Y2xlIG1ldGhvZHMsIGl0J3MgaW1wb3J0YW50IHRvIGNhbGwgYHN1cGVyYC4KCiAgICAgIFRoZSBlbGVtZW50J3MgYHByb3BlcnRpZXNgIGFuZCBgb2JzZXJ2ZXJzYCBhcmUgY29udHJvbGxlZCB2aWEgdGhlIGZpbmFsaXphdGlvbgogICAgICBtZWNoYW5pc20gcHJvdmlkZWQgYnkgYFByb3BlcnRpZXNNaXhpbmAuIGBQcm9wZXJ0aWVzYCBhbmQgYG9ic2VydmVyc2AgYXJlCiAgICAgIGNvbGxlY3RlZCBieSBtYW51YWxseSB0cmF2ZXJzaW5nIHRoZSBwcm90b3R5cGUgY2hhaW4gYW5kIG1lcmdpbmcuCgogICAgICBUbyBsaW1pdCBjaGFuZ2VzLCB0aGUgYF9yZWdpc3RlcmVkYCBtZXRob2QgaXMgY2FsbGVkIHZpYSBgX2luaXRpYWxpemVQcm9wZXJ0aWVzYAogICAgICBhbmQgbm90IGBfZmluYWxpemVDbGFzc2AuCiAgICAqLwogICAgLyoqCiAgICAgKiBAcGFyYW0geyFQb2x5bWVySW5pdH0gaW5mbyBQb2x5bWVyIGluZm8gb2JqZWN0CiAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKG5ldzpIVE1MRWxlbWVudCl9IEJhc2UgYmFzZSBjbGFzcyB0byBleHRlbmQgd2l0aCBpbmZvIG9iamVjdAogICAgICogQHBhcmFtIHtPYmplY3R9IGJlaGF2aW9ycyBiZWhhdmlvcnMgdG8gY29weSBpbnRvIHRoZSBlbGVtZW50CiAgICAgKiBAcmV0dXJuIHtmdW5jdGlvbihuZXc6SFRNTEVsZW1lbnQpfSBHZW5lcmF0ZWQgY2xhc3MKICAgICAqIEBzdXBwcmVzcyB7Y2hlY2tUeXBlc30KICAgICAqIEBwcml2YXRlCiAgICAgKi8KICAgIGZ1bmN0aW9uIEdlbmVyYXRlQ2xhc3NGcm9tSW5mbyhpbmZvLCBCYXNlLCBiZWhhdmlvcnMpIHsKCiAgICAgIC8vIG1hbmFnZXMgYmVoYXZpb3IgYW5kIGxpZmVjeWNsZSBwcm9jZXNzaW5nIChmaWxsZWQgaW4gYWZ0ZXIgY2xhc3MgZGVmaW5pdGlvbikKICAgICAgbGV0IGJlaGF2aW9yTGlzdDsKICAgICAgY29uc3QgbGlmZWN5Y2xlID0ge307CgogICAgICAvKiogQHByaXZhdGUgKi8KICAgICAgY2xhc3MgUG9seW1lckdlbmVyYXRlZCBleHRlbmRzIEJhc2UgewoKICAgICAgICAvLyBleHBsaWNpdGx5IG5vdCBjYWxsaW5nIHN1cGVyLl9maW5hbGl6ZUNsYXNzCiAgICAgICAgc3RhdGljIF9maW5hbGl6ZUNsYXNzKCkgewogICAgICAgICAgLy8gaWYgY2FsbGluZyB2aWEgYSBzdWJjbGFzcyB0aGF0IGhhc24ndCBiZWVuIGdlbmVyYXRlZCwgcGFzcyB0aHJvdWdoIHRvIHN1cGVyCiAgICAgICAgICBpZiAoIXRoaXMuaGFzT3duUHJvcGVydHkod2luZG93LkpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoJ2dlbmVyYXRlZEZyb20nLCB0aGlzKSkpIHsKICAgICAgICAgICAgc3VwZXIuX2ZpbmFsaXplQ2xhc3MoKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIC8vIGludGVybGVhdmUgcHJvcGVydGllcyBhbmQgb2JzZXJ2ZXJzIHBlciBiZWhhdmlvciBhbmQgYGluZm9gCiAgICAgICAgICAgIGlmIChiZWhhdmlvckxpc3QpIHsKICAgICAgICAgICAgICBmb3IgKGxldCBpPTAsIGI7IGkgPCBiZWhhdmlvckxpc3QubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgIGIgPSBiZWhhdmlvckxpc3RbaV07CiAgICAgICAgICAgICAgICBpZiAoYi5wcm9wZXJ0aWVzKSB7CiAgICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlUHJvcGVydGllcyhiLnByb3BlcnRpZXMpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKGIub2JzZXJ2ZXJzKSB7CiAgICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlT2JzZXJ2ZXJzKGIub2JzZXJ2ZXJzLCBiLnByb3BlcnRpZXMpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoaW5mby5wcm9wZXJ0aWVzKSB7CiAgICAgICAgICAgICAgdGhpcy5jcmVhdGVQcm9wZXJ0aWVzKGluZm8ucHJvcGVydGllcyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKGluZm8ub2JzZXJ2ZXJzKSB7CiAgICAgICAgICAgICAgdGhpcy5jcmVhdGVPYnNlcnZlcnMoaW5mby5vYnNlcnZlcnMsIGluZm8ucHJvcGVydGllcyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy8gbWFrZSBzdXJlIHRvIHByZXBhcmUgdGhlIGVsZW1lbnQgdGVtcGxhdGUKICAgICAgICAgICAgdGhpcy5fcHJlcGFyZVRlbXBsYXRlKCk7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKSB7CiAgICAgICAgICBjb25zdCBwcm9wZXJ0aWVzID0ge307CiAgICAgICAgICBpZiAoYmVoYXZpb3JMaXN0KSB7CiAgICAgICAgICAgIGZvciAobGV0IGk9MDsgaSA8IGJlaGF2aW9yTGlzdC5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24ocHJvcGVydGllcywgYmVoYXZpb3JMaXN0W2ldLnByb3BlcnRpZXMpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBPYmplY3QuYXNzaWduKHByb3BlcnRpZXMsIGluZm8ucHJvcGVydGllcyk7CiAgICAgICAgICByZXR1cm4gcHJvcGVydGllczsKICAgICAgICB9CgogICAgICAgIHN0YXRpYyBnZXQgb2JzZXJ2ZXJzKCkgewogICAgICAgICAgbGV0IG9ic2VydmVycyA9IFtdOwogICAgICAgICAgaWYgKGJlaGF2aW9yTGlzdCkgewogICAgICAgICAgICBmb3IgKGxldCBpPTAsIGI7IGkgPCBiZWhhdmlvckxpc3QubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICBiID0gYmVoYXZpb3JMaXN0W2ldOwogICAgICAgICAgICAgIGlmIChiLm9ic2VydmVycykgewogICAgICAgICAgICAgICAgb2JzZXJ2ZXJzID0gb2JzZXJ2ZXJzLmNvbmNhdChiLm9ic2VydmVycyk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoaW5mby5vYnNlcnZlcnMpIHsKICAgICAgICAgICAgb2JzZXJ2ZXJzID0gb2JzZXJ2ZXJzLmNvbmNhdChpbmZvLm9ic2VydmVycyk7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gb2JzZXJ2ZXJzOwogICAgICAgIH0KCiAgICAgICAgLyoqCiAgICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICAgKi8KICAgICAgICBjcmVhdGVkKCkgewogICAgICAgICAgc3VwZXIuY3JlYXRlZCgpOwogICAgICAgICAgY29uc3QgbGlzdCA9IGxpZmVjeWNsZS5jcmVhdGVkOwogICAgICAgICAgaWYgKGxpc3QpIHsKICAgICAgICAgICAgZm9yIChsZXQgaT0wOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgIGxpc3RbaV0uY2FsbCh0aGlzKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLyoqCiAgICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICAgKi8KICAgICAgICBfcmVnaXN0ZXJlZCgpIHsKICAgICAgICAgIC8qIE5PVEU6IGBiZWZvcmVSZWdpc3RlcmAgaXMgY2FsbGVkIGhlcmUgZm9yIGJjLCBidXQgdGhlIGJlaGF2aW9yCiAgICAgICAgICAgIGlzIGRpZmZlcmVudCB0aGFuIGluIDEueC4gSW4gMS4wLCB0aGUgbWV0aG9kIHdhcyBjYWxsZWQgKmFmdGVyKgogICAgICAgICAgICBtaXhpbmcgcHJvdG90eXBlcyB0b2dldGhlciBidXQgKmJlZm9yZSogcHJvY2Vzc2luZyBvZiBtZXRhLW9iamVjdHMuCiAgICAgICAgICAgIEhvd2V2ZXIsIGR5bmFtaWMgZWZmZWN0cyBjYW4gc3RpbGwgYmUgc2V0IGhlcmUgYW5kIGNhbiBiZSBkb25lIGVpdGhlcgogICAgICAgICAgICBpbiBgYmVmb3JlUmVnaXN0ZXJgIG9yIGByZWdpc3RlcmVkYC4gSXQgaXMgbm8gbG9uZ2VyIHBvc3NpYmxlIHRvIHNldAogICAgICAgICAgICBgaXNgIGluIGBiZWZvcmVSZWdpc3RlcmAgYXMgeW91IGNvdWxkIGluIDEueC4KICAgICAgICAgICovCiAgICAgICAgICAvLyBvbmx5IHByb2NlZWQgaWYgdGhlIGdlbmVyYXRlZCBjbGFzcycgcHJvdG90eXBlIGhhcyBub3QgYmVlbiByZWdpc3RlcmVkLgogICAgICAgICAgY29uc3QgZ2VuZXJhdGVkUHJvdG8gPSBQb2x5bWVyR2VuZXJhdGVkLnByb3RvdHlwZTsKICAgICAgICAgIGlmICghZ2VuZXJhdGVkUHJvdG8uaGFzT3duUHJvcGVydHkoJ19faGFzUmVnaXN0ZXJGaW5pc2hlZCcpKSB7CiAgICAgICAgICAgIGdlbmVyYXRlZFByb3RvLl9faGFzUmVnaXN0ZXJGaW5pc2hlZCA9IHRydWU7CiAgICAgICAgICAgIC8vIGVuc3VyZSBzdXBlcmNsYXNzIGlzIHJlZ2lzdGVyZWQgZmlyc3QuCiAgICAgICAgICAgIHN1cGVyLl9yZWdpc3RlcmVkKCk7CiAgICAgICAgICAgIC8vIGNvcHkgcHJvcGVydGllcyBvbnRvIHRoZSBnZW5lcmF0ZWQgY2xhc3MgbGF6aWx5IGlmIHdlJ3JlIG9wdGltaXppbmcsCiAgICAgICAgICAgIGlmIChQb2x5bWVyLmxlZ2FjeU9wdGltaXphdGlvbnMpIHsKICAgICAgICAgICAgICBjb3B5UHJvcGVydGllc1RvUHJvdG8oZ2VuZXJhdGVkUHJvdG8pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSBsZWdhY3kgbGlmZWN5Y2xlIGlzIGNhbGxlZCBvbiB0aGUgKmVsZW1lbnQqJ3MgcHJvdG90eXBlCiAgICAgICAgICAgIC8vIGFuZCBub3QgdGhlIGdlbmVyYXRlZCBjbGFzcyBwcm90b3R5cGU7IGlmIHRoZSBlbGVtZW50IGhhcyBiZWVuCiAgICAgICAgICAgIC8vIGV4dGVuZGVkLCB0aGVzZSBhcmUgKm5vdCogdGhlIHNhbWUuCiAgICAgICAgICAgIGNvbnN0IHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpOwogICAgICAgICAgICBsZXQgbGlzdCA9IGxpZmVjeWNsZS5iZWZvcmVSZWdpc3RlcjsKICAgICAgICAgICAgaWYgKGxpc3QpIHsKICAgICAgICAgICAgICBmb3IgKGxldCBpPTA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICBsaXN0W2ldLmNhbGwocHJvdG8pOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBsaXN0ID0gbGlmZWN5Y2xlLnJlZ2lzdGVyZWQ7CiAgICAgICAgICAgIGlmIChsaXN0KSB7CiAgICAgICAgICAgICAgZm9yIChsZXQgaT0wOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgbGlzdFtpXS5jYWxsKHByb3RvKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAgICovCiAgICAgICAgX2FwcGx5TGlzdGVuZXJzKCkgewogICAgICAgICAgc3VwZXIuX2FwcGx5TGlzdGVuZXJzKCk7CiAgICAgICAgICBjb25zdCBsaXN0ID0gbGlmZWN5Y2xlLmxpc3RlbmVyczsKICAgICAgICAgIGlmIChsaXN0KSB7CiAgICAgICAgICAgIGZvciAobGV0IGk9MDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICBjb25zdCBsaXN0ZW5lcnMgPSBsaXN0W2ldOwogICAgICAgICAgICAgIGlmIChsaXN0ZW5lcnMpIHsKICAgICAgICAgICAgICAgIGZvciAobGV0IGwgaW4gbGlzdGVuZXJzKSB7CiAgICAgICAgICAgICAgICAgIHRoaXMuX2FkZE1ldGhvZEV2ZW50TGlzdGVuZXJUb05vZGUodGhpcywgbCwgbGlzdGVuZXJzW2xdKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8vIG5vdGU6IGV4Y2VwdGlvbiB0byAic3VwZXIgdGhlbiBtZSIgcnVsZTsKICAgICAgICAvLyBkbyB3b3JrIGJlZm9yZSBjYWxsaW5nIHN1cGVyIHNvIHRoYXQgc3VwZXIgYXR0cmlidXRlcwogICAgICAgIC8vIG9ubHkgYXBwbHkgaWYgbm90IGFscmVhZHkgc2V0LgogICAgICAgIC8qKgogICAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAgICovCiAgICAgICAgX2Vuc3VyZUF0dHJpYnV0ZXMoKSB7CiAgICAgICAgICBjb25zdCBsaXN0ID0gbGlmZWN5Y2xlLmhvc3RBdHRyaWJ1dGVzOwogICAgICAgICAgaWYgKGxpc3QpIHsKICAgICAgICAgICAgZm9yIChsZXQgaT1saXN0Lmxlbmd0aC0xOyBpID49IDA7IGktLSkgewogICAgICAgICAgICAgIGNvbnN0IGhvc3RBdHRyaWJ1dGVzID0gbGlzdFtpXTsKICAgICAgICAgICAgICBmb3IgKGxldCBhIGluIGhvc3RBdHRyaWJ1dGVzKSB7CiAgICAgICAgICAgICAgICAgIHRoaXMuX2Vuc3VyZUF0dHJpYnV0ZShhLCBob3N0QXR0cmlidXRlc1thXSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIHN1cGVyLl9lbnN1cmVBdHRyaWJ1dGVzKCk7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgICAqLwogICAgICAgIHJlYWR5KCkgewogICAgICAgICAgc3VwZXIucmVhZHkoKTsKICAgICAgICAgIGxldCBsaXN0ID0gbGlmZWN5Y2xlLnJlYWR5OwogICAgICAgICAgaWYgKGxpc3QpIHsKICAgICAgICAgICAgZm9yIChsZXQgaT0wOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgIGxpc3RbaV0uY2FsbCh0aGlzKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLyoqCiAgICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICAgKi8KICAgICAgICBhdHRhY2hlZCgpIHsKICAgICAgICAgIHN1cGVyLmF0dGFjaGVkKCk7CiAgICAgICAgICBsZXQgbGlzdCA9IGxpZmVjeWNsZS5hdHRhY2hlZDsKICAgICAgICAgIGlmIChsaXN0KSB7CiAgICAgICAgICAgIGZvciAobGV0IGk9MDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICBsaXN0W2ldLmNhbGwodGhpcyk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAgICovCiAgICAgICAgZGV0YWNoZWQoKSB7CiAgICAgICAgICBzdXBlci5kZXRhY2hlZCgpOwogICAgICAgICAgbGV0IGxpc3QgPSBsaWZlY3ljbGUuZGV0YWNoZWQ7CiAgICAgICAgICBpZiAobGlzdCkgewogICAgICAgICAgICBmb3IgKGxldCBpPTA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgbGlzdFtpXS5jYWxsKHRoaXMpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBJbXBsZW1lbnRzIG5hdGl2ZSBDdXN0b20gRWxlbWVudHMgYGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFja2AgdG8KICAgICAgICAgKiBzZXQgYW4gYXR0cmlidXRlIHZhbHVlIHRvIGEgcHJvcGVydHkgdmlhIGBfYXR0cmlidXRlVG9Qcm9wZXJ0eWAuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBOYW1lIG9mIGF0dHJpYnV0ZSB0aGF0IGNoYW5nZWQKICAgICAgICAgKiBAcGFyYW0gez9zdHJpbmd9IG9sZCBPbGQgYXR0cmlidXRlIHZhbHVlCiAgICAgICAgICogQHBhcmFtIHs/c3RyaW5nfSB2YWx1ZSBOZXcgYXR0cmlidXRlIHZhbHVlCiAgICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICAgKi8KICAgICAgICBhdHRyaWJ1dGVDaGFuZ2VkKG5hbWUsIG9sZCwgdmFsdWUpIHsKICAgICAgICAgIHN1cGVyLmF0dHJpYnV0ZUNoYW5nZWQoKTsKICAgICAgICAgIGxldCBsaXN0ID0gbGlmZWN5Y2xlLmF0dHJpYnV0ZUNoYW5nZWQ7CiAgICAgICAgICBpZiAobGlzdCkgewogICAgICAgICAgICBmb3IgKGxldCBpPTA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgbGlzdFtpXS5jYWxsKHRoaXMsIG5hbWUsIG9sZCwgdmFsdWUpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CgogICAgICAvLyBhcHBseSBiZWhhdmlvcnMsIG5vdGUgYWN0dWFsIGNvcHlpbmcgaXMgZG9uZSBsYXppbHkgYXQgZmlyc3QgaW5zdGFuY2UgY3JlYXRpb24KICAgICAgaWYgKGJlaGF2aW9ycykgewogICAgICAgIC8vIE5PVEU6IGVuc3VyZSB0aGUgYmVoYXZpb3IgaXMgZXh0ZW5kaW5nIGEgY2xhc3Mgd2l0aAogICAgICAgIC8vIGxlZ2FjeSBlbGVtZW50IGFwaS4gVGhpcyBpcyBuZWNlc3Nhcnkgc2luY2UgYmVoYXZpb3JzIGV4cGVjdCB0byBiZSBhYmxlCiAgICAgICAgLy8gdG8gYWNjZXNzIDEueCBsZWdhY3kgYXBpLgogICAgICAgIGlmICghQXJyYXkuaXNBcnJheShiZWhhdmlvcnMpKSB7CiAgICAgICAgICBiZWhhdmlvcnMgPSBbYmVoYXZpb3JzXTsKICAgICAgICB9CiAgICAgICAgbGV0IHN1cGVyQmVoYXZpb3JzID0gQmFzZS5wcm90b3R5cGUuYmVoYXZpb3JzOwogICAgICAgIC8vIGdldCBmbGF0dGVuZWQsIGRlZHVwZWQgbGlzdCBvZiBiZWhhdmlvcnMgKm5vdCogYWxyZWFkeSBvbiBzdXBlciBjbGFzcwogICAgICAgIGJlaGF2aW9yTGlzdCA9IGZsYXR0ZW5CZWhhdmlvcnMoYmVoYXZpb3JzLCBudWxsLCBzdXBlckJlaGF2aW9ycyk7CiAgICAgICAgUG9seW1lckdlbmVyYXRlZC5wcm90b3R5cGUuYmVoYXZpb3JzID0gc3VwZXJCZWhhdmlvcnMgPwogICAgICAgICAgc3VwZXJCZWhhdmlvcnMuY29uY2F0KGJlaGF2aW9ycykgOiBiZWhhdmlvckxpc3Q7CiAgICAgIH0KCiAgICAgIGNvbnN0IGNvcHlQcm9wZXJ0aWVzVG9Qcm90byA9IChwcm90bykgPT4gewogICAgICAgIGlmIChiZWhhdmlvckxpc3QpIHsKICAgICAgICAgIGFwcGx5QmVoYXZpb3JzKHByb3RvLCBiZWhhdmlvckxpc3QsIGxpZmVjeWNsZSk7CiAgICAgICAgfQogICAgICAgIGFwcGx5SW5mbyhwcm90bywgaW5mbywgbGlmZWN5Y2xlLCBleGNsdWRlT25JbmZvKTsKICAgICAgfTsKCiAgICAgIC8vIGNvcHkgcHJvcGVydGllcyBpZiB3ZSdyZSBub3Qgb3B0aW1pemluZwogICAgICBpZiAoIVBvbHltZXIubGVnYWN5T3B0aW1pemF0aW9ucykgewogICAgICAgIGNvcHlQcm9wZXJ0aWVzVG9Qcm90byhQb2x5bWVyR2VuZXJhdGVkLnByb3RvdHlwZSk7CiAgICAgIH0KCiAgICAgIFBvbHltZXJHZW5lcmF0ZWQuZ2VuZXJhdGVkRnJvbSA9IGluZm87CgogICAgICByZXR1cm4gUG9seW1lckdlbmVyYXRlZDsKICAgIH0KCiAgICAvKioKICAgICAqIEdlbmVyYXRlcyBhIGNsYXNzIHRoYXQgZXh0ZW5kcyBgUG9seW1lci5MZWdhY3lFbGVtZW50YCBiYXNlZCBvbiB0aGUKICAgICAqIHByb3ZpZGVkIGluZm8gb2JqZWN0LiAgTWV0YWRhdGEgb2JqZWN0cyBvbiB0aGUgYGluZm9gIG9iamVjdAogICAgICogKGBwcm9wZXJ0aWVzYCwgYG9ic2VydmVyc2AsIGBsaXN0ZW5lcnNgLCBgYmVoYXZpb3JzYCwgYGlzYCkgYXJlIHVzZWQKICAgICAqIGZvciBQb2x5bWVyJ3MgbWV0YS1wcm9ncmFtbWluZyBzeXN0ZW1zLCBhbmQgYW55IGZ1bmN0aW9ucyBhcmUgY29waWVkCiAgICAgKiB0byB0aGUgZ2VuZXJhdGVkIGNsYXNzLgogICAgICoKICAgICAqIFZhbGlkICJtZXRhZGF0YSIgdmFsdWVzIGFyZSBhcyBmb2xsb3dzOgogICAgICoKICAgICAqIGBpc2A6IFN0cmluZyBwcm92aWRpbmcgdGhlIHRhZyBuYW1lIHRvIHJlZ2lzdGVyIHRoZSBlbGVtZW50IHVuZGVyLiBJbgogICAgICogYWRkaXRpb24sIGlmIGEgYGRvbS1tb2R1bGVgIHdpdGggdGhlIHNhbWUgaWQgZXhpc3RzLCB0aGUgZmlyc3QgdGVtcGxhdGUKICAgICAqIGluIHRoYXQgYGRvbS1tb2R1bGVgIHdpbGwgYmUgc3RhbXBlZCBpbnRvIHRoZSBzaGFkb3cgcm9vdCBvZiB0aGlzIGVsZW1lbnQsCiAgICAgKiB3aXRoIHN1cHBvcnQgZm9yIGRlY2xhcmF0aXZlIGV2ZW50IGxpc3RlbmVycyAoYG9uLS4uLmApLCBQb2x5bWVyIGRhdGEKICAgICAqIGJpbmRpbmdzIChgW1suLi5dXWAgYW5kIGB7ey4uLn19YCksIGFuZCBpZC1iYXNlZCBub2RlIGZpbmRpbmcgaW50bwogICAgICogYHRoaXMuJGAuCiAgICAgKgogICAgICogYHByb3BlcnRpZXNgOiBPYmplY3QgZGVzY3JpYmluZyBwcm9wZXJ0eS1yZWxhdGVkIG1ldGFkYXRhIHVzZWQgYnkgUG9seW1lcgogICAgICogZmVhdHVyZXMgKGtleTogcHJvcGVydHkgbmFtZXMsIHZhbHVlOiBvYmplY3QgY29udGFpbmluZyBwcm9wZXJ0eSBtZXRhZGF0YSkuCiAgICAgKiBWYWxpZCBrZXlzIGluIHBlci1wcm9wZXJ0eSBtZXRhZGF0YSBpbmNsdWRlOgogICAgICogLSBgdHlwZWAgKFN0cmluZ3xOdW1iZXJ8T2JqZWN0fEFycmF5fC4uLik6IFVzZWQgYnkKICAgICAqICAgYGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFja2AgdG8gZGV0ZXJtaW5lIGhvdyBzdHJpbmctYmFzZWQgYXR0cmlidXRlcwogICAgICogICBhcmUgZGVzZXJpYWxpemVkIHRvIEphdmFTY3JpcHQgcHJvcGVydHkgdmFsdWVzLgogICAgICogLSBgbm90aWZ5YCAoYm9vbGVhbik6IENhdXNlcyBhIGNoYW5nZSBpbiB0aGUgcHJvcGVydHkgdG8gZmlyZSBhCiAgICAgKiAgIG5vbi1idWJibGluZyBldmVudCBjYWxsZWQgYDxwcm9wZXJ0eT4tY2hhbmdlZGAuIEVsZW1lbnRzIHRoYXQgaGF2ZQogICAgICogICBlbmFibGVkIHR3by13YXkgYmluZGluZyB0byB0aGUgcHJvcGVydHkgdXNlIHRoaXMgZXZlbnQgdG8gb2JzZXJ2ZSBjaGFuZ2VzLgogICAgICogLSBgcmVhZE9ubHlgIChib29sZWFuKTogQ3JlYXRlcyBhIGdldHRlciBmb3IgdGhlIHByb3BlcnR5LCBidXQgbm8gc2V0dGVyLgogICAgICogICBUbyBzZXQgYSByZWFkLW9ubHkgcHJvcGVydHksIHVzZSB0aGUgcHJpdmF0ZSBzZXR0ZXIgbWV0aG9kCiAgICAgKiAgIGBfc2V0UHJvcGVydHkocHJvcGVydHksIHZhbHVlKWAuCiAgICAgKiAtIGBvYnNlcnZlcmAgKHN0cmluZyk6IE9ic2VydmVyIG1ldGhvZCBuYW1lIHRoYXQgd2lsbCBiZSBjYWxsZWQgd2hlbgogICAgICogICB0aGUgcHJvcGVydHkgY2hhbmdlcy4gVGhlIGFyZ3VtZW50cyBvZiB0aGUgbWV0aG9kIGFyZQogICAgICogICBgKHZhbHVlLCBwcmV2aW91c1ZhbHVlKWAuCiAgICAgKiAtIGBjb21wdXRlZGAgKHN0cmluZyk6IFN0cmluZyBkZXNjcmliaW5nIG1ldGhvZCBhbmQgZGVwZW5kZW50IHByb3BlcnRpZXMKICAgICAqICAgZm9yIGNvbXB1dGluZyB0aGUgdmFsdWUgb2YgdGhpcyBwcm9wZXJ0eSAoZS5nLiBgJ2NvbXB1dGVGb28oYmFyLCB6b3QpJ2ApLgogICAgICogICBDb21wdXRlZCBwcm9wZXJ0aWVzIGFyZSByZWFkLW9ubHkgYnkgZGVmYXVsdCBhbmQgY2FuIG9ubHkgYmUgY2hhbmdlZAogICAgICogICB2aWEgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgY29tcHV0aW5nIG1ldGhvZC4KICAgICAqCiAgICAgKiBgb2JzZXJ2ZXJzYDogQXJyYXkgb2Ygc3RyaW5ncyBkZXNjcmliaW5nIG11bHRpLXByb3BlcnR5IG9ic2VydmVyIG1ldGhvZHMKICAgICAqICBhbmQgdGhlaXIgZGVwZW5kZW50IHByb3BlcnRpZXMgKGUuZy4gYCdvYnNlcnZlQUJDKGEsIGIsIGMpJ2ApLgogICAgICoKICAgICAqIGBsaXN0ZW5lcnNgOiBPYmplY3QgZGVzY3JpYmluZyBldmVudCBsaXN0ZW5lcnMgdG8gYmUgYWRkZWQgdG8gZWFjaAogICAgICogIGluc3RhbmNlIG9mIHRoaXMgZWxlbWVudCAoa2V5OiBldmVudCBuYW1lLCB2YWx1ZTogbWV0aG9kIG5hbWUpLgogICAgICoKICAgICAqIGBiZWhhdmlvcnNgOiBBcnJheSBvZiBhZGRpdGlvbmFsIGBpbmZvYCBvYmplY3RzIGNvbnRhaW5pbmcgbWV0YWRhdGEKICAgICAqIGFuZCBjYWxsYmFja3MgaW4gdGhlIHNhbWUgZm9ybWF0IGFzIHRoZSBgaW5mb2Agb2JqZWN0IGhlcmUgd2hpY2ggYXJlCiAgICAgKiBtZXJnZWQgaW50byB0aGlzIGVsZW1lbnQuCiAgICAgKgogICAgICogYGhvc3RBdHRyaWJ1dGVzYDogT2JqZWN0IGxpc3RpbmcgYXR0cmlidXRlcyB0byBiZSBhcHBsaWVkIHRvIHRoZSBob3N0CiAgICAgKiAgb25jZSBjcmVhdGVkIChrZXk6IGF0dHJpYnV0ZSBuYW1lLCB2YWx1ZTogYXR0cmlidXRlIHZhbHVlKS4gIFZhbHVlcwogICAgICogIGFyZSBzZXJpYWxpemVkIGJhc2VkIG9uIHRoZSB0eXBlIG9mIHRoZSB2YWx1ZS4gIEhvc3QgYXR0cmlidXRlcyBzaG91bGQKICAgICAqICBnZW5lcmFsbHkgYmUgbGltaXRlZCB0byBhdHRyaWJ1dGVzIHN1Y2ggYXMgYHRhYkluZGV4YCBhbmQgYGFyaWEtLi4uYC4KICAgICAqICBBdHRyaWJ1dGVzIGluIGBob3N0QXR0cmlidXRlc2AgYXJlIG9ubHkgYXBwbGllZCBpZiBhIHVzZXItc3VwcGxpZWQKICAgICAqICBhdHRyaWJ1dGUgaXMgbm90IGFscmVhZHkgcHJlc2VudCAoYXR0cmlidXRlcyBpbiBtYXJrdXAgb3ZlcnJpZGUKICAgICAqICBgaG9zdEF0dHJpYnV0ZXNgKS4KICAgICAqCiAgICAgKiBJbiBhZGRpdGlvbiwgdGhlIGZvbGxvd2luZyBQb2x5bWVyLXNwZWNpZmljIGNhbGxiYWNrcyBtYXkgYmUgcHJvdmlkZWQ6CiAgICAgKiAtIGByZWdpc3RlcmVkYDogY2FsbGVkIGFmdGVyIGZpcnN0IGluc3RhbmNlIG9mIHRoaXMgZWxlbWVudCwKICAgICAqIC0gYGNyZWF0ZWRgOiBjYWxsZWQgZHVyaW5nIGBjb25zdHJ1Y3RvcmAKICAgICAqIC0gYGF0dGFjaGVkYDogY2FsbGVkIGR1cmluZyBgY29ubmVjdGVkQ2FsbGJhY2tgCiAgICAgKiAtIGBkZXRhY2hlZGA6IGNhbGxlZCBkdXJpbmcgYGRpc2Nvbm5lY3RlZENhbGxiYWNrYAogICAgICogLSBgcmVhZHlgOiBjYWxsZWQgYmVmb3JlIGZpcnN0IGBhdHRhY2hlZGAsIGFmdGVyIGFsbCBwcm9wZXJ0aWVzIG9mCiAgICAgKiAgIHRoaXMgZWxlbWVudCBoYXZlIGJlZW4gcHJvcGFnYXRlZCB0byBpdHMgdGVtcGxhdGUgYW5kIGFsbCBvYnNlcnZlcnMKICAgICAqICAgaGF2ZSBydW4KICAgICAqCiAgICAgKiBAcGFyYW0geyFQb2x5bWVySW5pdH0gaW5mbyBPYmplY3QgY29udGFpbmluZyBQb2x5bWVyIG1ldGFkYXRhIGFuZCBmdW5jdGlvbnMKICAgICAqICAgdG8gYmVjb21lIGNsYXNzIG1ldGhvZHMuCiAgICAgKiBAdGVtcGxhdGUgVAogICAgICogQHBhcmFtIHtmdW5jdGlvbihUKTpUfSBtaXhpbiBPcHRpb25hbCBtaXhpbiB0byBhcHBseSB0byBsZWdhY3kgYmFzZSBjbGFzcwogICAgICogICBiZWZvcmUgZXh0ZW5kaW5nIHdpdGggUG9seW1lciBtZXRhcHJvZ3JhbW1pbmcuCiAgICAgKiBAcmV0dXJuIHtmdW5jdGlvbihuZXc6SFRNTEVsZW1lbnQpfSBHZW5lcmF0ZWQgY2xhc3MKICAgICAqIEBtZW1iZXJvZiBQb2x5bWVyCiAgICAgKi8KICAgIFBvbHltZXIuQ2xhc3MgPSBmdW5jdGlvbihpbmZvLCBtaXhpbikgewogICAgICBpZiAoIWluZm8pIHsKICAgICAgICBjb25zb2xlLndhcm4oJ1BvbHltZXIuQ2xhc3MgcmVxdWlyZXMgYGluZm9gIGFyZ3VtZW50Jyk7CiAgICAgIH0KICAgICAgbGV0IGtsYXNzID0gbWl4aW4gPyBtaXhpbihQb2x5bWVyLkxlZ2FjeUVsZW1lbnRNaXhpbihIVE1MRWxlbWVudCkpIDoKICAgICAgICAgIFBvbHltZXIuTGVnYWN5RWxlbWVudE1peGluKEhUTUxFbGVtZW50KTsKICAgICAga2xhc3MgPSBHZW5lcmF0ZUNsYXNzRnJvbUluZm8oaW5mbywga2xhc3MsIGluZm8uYmVoYXZpb3JzKTsKICAgICAgaWYgKGluZm8uX2VuYWJsZURpc2FibGVVcGdyYWRlKSB7CiAgICAgICAga2xhc3MgPSBQb2x5bWVyLkRpc2FibGVVcGdyYWRlTWl4aW4oa2xhc3MpOwogICAgICB9CiAgICAgIC8vIGRlY29yYXRlIGtsYXNzIHdpdGggcmVnaXN0cmF0aW9uIGluZm8KICAgICAga2xhc3MuaXMgPSBrbGFzcy5wcm90b3R5cGUuaXMgPSBpbmZvLmlzOwogICAgICByZXR1cm4ga2xhc3M7CiAgICB9OwoKICAgIFBvbHltZXIubWl4aW5CZWhhdmlvcnMgPSBtaXhpbkJlaGF2aW9yczsKCiAgfSkoKTsKCjwvc2NyaXB0PjxzY3JpcHQ+CgogIChmdW5jdGlvbigpIHsKICAgICd1c2Ugc3RyaWN0JzsKCiAgICAvKioKICAgICAqIExlZ2FjeSBjbGFzcyBmYWN0b3J5IGFuZCByZWdpc3RyYXRpb24gaGVscGVyIGZvciBkZWZpbmluZyBQb2x5bWVyCiAgICAgKiBlbGVtZW50cy4KICAgICAqCiAgICAgKiBUaGlzIG1ldGhvZCBpcyBlcXVpdmFsZW50IHRvCiAgICAgKiBgY3VzdG9tRWxlbWVudHMuZGVmaW5lKGluZm8uaXMsIFBvbHltZXIuQ2xhc3MoaW5mbykpO2AKICAgICAqCiAgICAgKiBTZWUgYFBvbHltZXIuQ2xhc3NgIGZvciBkZXRhaWxzIG9uIHZhbGlkIGxlZ2FjeSBtZXRhZGF0YSBmb3JtYXQgZm9yIGBpbmZvYC4KICAgICAqCiAgICAgKiBAZ2xvYmFsCiAgICAgKiBAb3ZlcnJpZGUKICAgICAqIEBmdW5jdGlvbiBQb2x5bWVyCiAgICAgKiBAcGFyYW0geyFQb2x5bWVySW5pdH0gaW5mbyBPYmplY3QgY29udGFpbmluZyBQb2x5bWVyIG1ldGFkYXRhIGFuZCBmdW5jdGlvbnMKICAgICAqICAgdG8gYmVjb21lIGNsYXNzIG1ldGhvZHMuCiAgICAgKiBAcmV0dXJuIHtmdW5jdGlvbihuZXc6IEhUTUxFbGVtZW50KX0gR2VuZXJhdGVkIGNsYXNzCiAgICAgKiBAc3VwcHJlc3Mge2R1cGxpY2F0ZSwgaW52YWxpZENhc3RzLCBjaGVja1R5cGVzfQogICAgICovCiAgICB3aW5kb3cuUG9seW1lci5fcG9seW1lckZuID0gZnVuY3Rpb24oaW5mbykgewogICAgICAvLyBpZiBpbnB1dCBpcyBhIGBjbGFzc2AgKGFrYSBhIGZ1bmN0aW9uIHdpdGggYSBwcm90b3R5cGUpLCB1c2UgdGhlIHByb3RvdHlwZQogICAgICAvLyByZW1lbWJlciB0aGF0IHRoZSBgY29uc3RydWN0b3JgIHdpbGwgbmV2ZXIgYmUgY2FsbGVkCiAgICAgIGxldCBrbGFzczsKICAgICAgaWYgKHR5cGVvZiBpbmZvID09PSAnZnVuY3Rpb24nKSB7CiAgICAgICAga2xhc3MgPSBpbmZvOwogICAgICB9IGVsc2UgewogICAgICAgIGtsYXNzID0gUG9seW1lci5DbGFzcyhpbmZvKTsKICAgICAgfQogICAgICBjdXN0b21FbGVtZW50cy5kZWZpbmUoa2xhc3MuaXMsIC8qKiBAdHlwZSB7IUhUTUxFbGVtZW50fSAqLyhrbGFzcykpOwogICAgICByZXR1cm4ga2xhc3M7CiAgICB9OwoKICB9KSgpOwoKPC9zY3JpcHQ+PHNjcmlwdD4KKGZ1bmN0aW9uKCkgewogICd1c2Ugc3RyaWN0JzsKCiAgLy8gQ29tbW9uIGltcGxlbWVudGF0aW9uIGZvciBtaXhpbiAmIGJlaGF2aW9yCiAgZnVuY3Rpb24gbXV0YWJsZVByb3BlcnR5Q2hhbmdlKGluc3QsIHByb3BlcnR5LCB2YWx1ZSwgb2xkLCBtdXRhYmxlRGF0YSkgewogICAgbGV0IGlzT2JqZWN0OwogICAgaWYgKG11dGFibGVEYXRhKSB7CiAgICAgIGlzT2JqZWN0ID0gKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGwpOwogICAgICAvLyBQdWxsIGBvbGRgIGZvciBPYmplY3RzIGZyb20gdGVtcCBjYWNoZSwgYnV0IHRyZWF0IGBudWxsYCBhcyBhIHByaW1pdGl2ZQogICAgICBpZiAoaXNPYmplY3QpIHsKICAgICAgICBvbGQgPSBpbnN0Ll9fZGF0YVRlbXBbcHJvcGVydHldOwogICAgICB9CiAgICB9CiAgICAvLyBTdHJpY3QgZXF1YWxpdHkgY2hlY2ssIGJ1dCByZXR1cm4gZmFsc2UgZm9yIE5hTj09PU5hTgogICAgbGV0IHNob3VsZENoYW5nZSA9IChvbGQgIT09IHZhbHVlICYmIChvbGQgPT09IG9sZCB8fCB2YWx1ZSA9PT0gdmFsdWUpKTsKICAgIC8vIE9iamVjdHMgYXJlIHN0b3JlZCBpbiB0ZW1wb3JhcnkgY2FjaGUgKGNsZWFyZWQgYXQgZW5kIG9mCiAgICAvLyB0dXJuKSwgd2hpY2ggaXMgdXNlZCBmb3IgZGlydHktY2hlY2tpbmcKICAgIGlmIChpc09iamVjdCAmJiBzaG91bGRDaGFuZ2UpIHsKICAgICAgaW5zdC5fX2RhdGFUZW1wW3Byb3BlcnR5XSA9IHZhbHVlOwogICAgfQogICAgcmV0dXJuIHNob3VsZENoYW5nZTsKICB9CgogIC8qKgogICAqIEVsZW1lbnQgY2xhc3MgbWl4aW4gdG8gc2tpcCBzdHJpY3QgZGlydHktY2hlY2tpbmcgZm9yIG9iamVjdHMgYW5kIGFycmF5cwogICAqIChhbHdheXMgY29uc2lkZXIgdGhlbSB0byBiZSAiZGlydHkiKSwgZm9yIHVzZSBvbiBlbGVtZW50cyB1dGlsaXppbmcKICAgKiBgUG9seW1lci5Qcm9wZXJ0eUVmZmVjdHNgCiAgICoKICAgKiBCeSBkZWZhdWx0LCBgUG9seW1lci5Qcm9wZXJ0eUVmZmVjdHNgIHBlcmZvcm1zIHN0cmljdCBkaXJ0eSBjaGVja2luZyBvbgogICAqIG9iamVjdHMsIHdoaWNoIG1lYW5zIHRoYXQgYW55IGRlZXAgbW9kaWZpY2F0aW9ucyB0byBhbiBvYmplY3Qgb3IgYXJyYXkgd2lsbAogICAqIG5vdCBiZSBwcm9wYWdhdGVkIHVubGVzcyAiaW1tdXRhYmxlIiBkYXRhIHBhdHRlcm5zIGFyZSB1c2VkIChpLmUuIGFsbCBvYmplY3QKICAgKiByZWZlcmVuY2VzIGZyb20gdGhlIHJvb3QgdG8gdGhlIG11dGF0aW9uIHdlcmUgY2hhbmdlZCkuCiAgICoKICAgKiBQb2x5bWVyIGFsc28gcHJvdmlkZXMgYSBwcm9wcmlldGFyeSBkYXRhIG11dGF0aW9uIGFuZCBwYXRoIG5vdGlmaWNhdGlvbiBBUEkKICAgKiAoZS5nLiBgbm90aWZ5UGF0aGAsIGBzZXRgLCBhbmQgYXJyYXkgbXV0YXRpb24gQVBJJ3MpIHRoYXQgYWxsb3cgZWZmaWNpZW50CiAgICogbXV0YXRpb24gYW5kIG5vdGlmaWNhdGlvbiBvZiBkZWVwIGNoYW5nZXMgaW4gYW4gb2JqZWN0IGdyYXBoIHRvIGFsbCBlbGVtZW50cwogICAqIGJvdW5kIHRvIHRoZSBzYW1lIG9iamVjdCBncmFwaC4KICAgKgogICAqIEluIGNhc2VzIHdoZXJlIG5laXRoZXIgaW1tdXRhYmxlIHBhdHRlcm5zIG5vciB0aGUgZGF0YSBtdXRhdGlvbiBBUEkgY2FuIGJlCiAgICogdXNlZCwgYXBwbHlpbmcgdGhpcyBtaXhpbiB3aWxsIGNhdXNlIFBvbHltZXIgdG8gc2tpcCBkaXJ0eSBjaGVja2luZyBmb3IKICAgKiBvYmplY3RzIGFuZCBhcnJheXMgKGFsd2F5cyBjb25zaWRlciB0aGVtIHRvIGJlICJkaXJ0eSIpLiAgVGhpcyBhbGxvd3MgYQogICAqIHVzZXIgdG8gbWFrZSBhIGRlZXAgbW9kaWZpY2F0aW9uIHRvIGEgYm91bmQgb2JqZWN0IGdyYXBoLCBhbmQgdGhlbiBlaXRoZXIKICAgKiBzaW1wbHkgcmUtc2V0IHRoZSBvYmplY3QgKGUuZy4gYHRoaXMuaXRlbXMgPSB0aGlzLml0ZW1zYCkgb3IgY2FsbCBgbm90aWZ5UGF0aGAKICAgKiAoZS5nLiBgdGhpcy5ub3RpZnlQYXRoKCdpdGVtcycpYCkgdG8gdXBkYXRlIHRoZSB0cmVlLiAgTm90ZSB0aGF0IGFsbAogICAqIGVsZW1lbnRzIHRoYXQgd2lzaCB0byBiZSB1cGRhdGVkIGJhc2VkIG9uIGRlZXAgbXV0YXRpb25zIG11c3QgYXBwbHkgdGhpcwogICAqIG1peGluIG9yIG90aGVyd2lzZSBza2lwIHN0cmljdCBkaXJ0eSBjaGVja2luZyBmb3Igb2JqZWN0cy9hcnJheXMuCiAgICogU3BlY2lmaWNhbGx5LCBhbnkgZWxlbWVudHMgaW4gdGhlIGJpbmRpbmcgdHJlZSBiZXR3ZWVuIHRoZSBzb3VyY2Ugb2YgYQogICAqIG11dGF0aW9uIGFuZCB0aGUgY29uc3VtcHRpb24gb2YgaXQgbXVzdCBhcHBseSB0aGlzIG1peGluIG9yIGVuYWJsZSB0aGUKICAgKiBgUG9seW1lci5PcHRpb25hbE11dGFibGVEYXRhYCBtaXhpbi4KICAgKgogICAqIEluIG9yZGVyIHRvIG1ha2UgdGhlIGRpcnR5IGNoZWNrIHN0cmF0ZWd5IGNvbmZpZ3VyYWJsZSwgc2VlCiAgICogYFBvbHltZXIuT3B0aW9uYWxNdXRhYmxlRGF0YWAuCiAgICoKICAgKiBOb3RlLCB0aGUgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzIG9mIHByb3BhZ2F0aW5nIGxhcmdlIG9iamVjdCBncmFwaHMKICAgKiB3aWxsIGJlIHdvcnNlIGFzIG9wcG9zZWQgdG8gdXNpbmcgc3RyaWN0IGRpcnR5IGNoZWNraW5nIHdpdGggaW1tdXRhYmxlCiAgICogcGF0dGVybnMgb3IgUG9seW1lcidzIHBhdGggbm90aWZpY2F0aW9uIEFQSS4KICAgKgogICAqIEBtaXhpbkZ1bmN0aW9uCiAgICogQHBvbHltZXIKICAgKiBAbWVtYmVyb2YgUG9seW1lcgogICAqIEBzdW1tYXJ5IEVsZW1lbnQgY2xhc3MgbWl4aW4gdG8gc2tpcCBzdHJpY3QgZGlydHktY2hlY2tpbmcgZm9yIG9iamVjdHMKICAgKiAgIGFuZCBhcnJheXMKICAgKi8KICBQb2x5bWVyLk11dGFibGVEYXRhID0gUG9seW1lci5kZWR1cGluZ01peGluKHN1cGVyQ2xhc3MgPT4gewoKICAgIC8qKgogICAgICogQHBvbHltZXIKICAgICAqIEBtaXhpbkNsYXNzCiAgICAgKiBAaW1wbGVtZW50cyB7UG9seW1lcl9NdXRhYmxlRGF0YX0KICAgICAqLwogICAgY2xhc3MgTXV0YWJsZURhdGEgZXh0ZW5kcyBzdXBlckNsYXNzIHsKICAgICAgLyoqCiAgICAgICAqIE92ZXJyaWRlcyBgUG9seW1lci5Qcm9wZXJ0eUVmZmVjdHNgIHRvIHByb3ZpZGUgb3B0aW9uIGZvciBza2lwcGluZwogICAgICAgKiBzdHJpY3QgZXF1YWxpdHkgY2hlY2tpbmcgZm9yIE9iamVjdHMgYW5kIEFycmF5cy4KICAgICAgICoKICAgICAgICogVGhpcyBtZXRob2QgcHVsbHMgdGhlIHZhbHVlIHRvIGRpcnR5IGNoZWNrIGFnYWluc3QgZnJvbSB0aGUgYF9fZGF0YVRlbXBgCiAgICAgICAqIGNhY2hlIChyYXRoZXIgdGhhbiB0aGUgbm9ybWFsIGBfX2RhdGFgIGNhY2hlKSBmb3IgT2JqZWN0cy4gIFNpbmNlIHRoZSB0ZW1wCiAgICAgICAqIGNhY2hlIGlzIGNsZWFyZWQgYXQgdGhlIGVuZCBvZiBhIHR1cm4sIHRoaXMgaW1wbGVtZW50YXRpb24gYWxsb3dzCiAgICAgICAqIHNpZGUtZWZmZWN0cyBvZiBkZWVwIG9iamVjdCBjaGFuZ2VzIHRvIGJlIHByb2Nlc3NlZCBieSByZS1zZXR0aW5nIHRoZQogICAgICAgKiBzYW1lIG9iamVjdCAodXNpbmcgdGhlIHRlbXAgY2FjaGUgYXMgYW4gaW4tdHVybiBiYWNrc3RvcCB0byBwcmV2ZW50CiAgICAgICAqIGN5Y2xlcyBkdWUgdG8gMi13YXkgbm90aWZpY2F0aW9uKS4KICAgICAgICoKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IFByb3BlcnR5IG5hbWUKICAgICAgICogQHBhcmFtIHsqfSB2YWx1ZSBOZXcgcHJvcGVydHkgdmFsdWUKICAgICAgICogQHBhcmFtIHsqfSBvbGQgUHJldmlvdXMgcHJvcGVydHkgdmFsdWUKICAgICAgICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB0aGUgcHJvcGVydHkgc2hvdWxkIGJlIGNvbnNpZGVyZWQgYSBjaGFuZ2UKICAgICAgICogQHByb3RlY3RlZAogICAgICAgKi8KICAgICAgX3Nob3VsZFByb3BlcnR5Q2hhbmdlKHByb3BlcnR5LCB2YWx1ZSwgb2xkKSB7CiAgICAgICAgcmV0dXJuIG11dGFibGVQcm9wZXJ0eUNoYW5nZSh0aGlzLCBwcm9wZXJ0eSwgdmFsdWUsIG9sZCwgdHJ1ZSk7CiAgICAgIH0KCiAgICB9CgogICAgcmV0dXJuIE11dGFibGVEYXRhOwoKICB9KTsKCgogIC8qKgogICAqIEVsZW1lbnQgY2xhc3MgbWl4aW4gdG8gYWRkIHRoZSBvcHRpb25hbCBhYmlsaXR5IHRvIHNraXAgc3RyaWN0CiAgICogZGlydHktY2hlY2tpbmcgZm9yIG9iamVjdHMgYW5kIGFycmF5cyAoYWx3YXlzIGNvbnNpZGVyIHRoZW0gdG8gYmUKICAgKiAiZGlydHkiKSBieSBzZXR0aW5nIGEgYG11dGFibGUtZGF0YWAgYXR0cmlidXRlIG9uIGFuIGVsZW1lbnQgaW5zdGFuY2UuCiAgICoKICAgKiBCeSBkZWZhdWx0LCBgUG9seW1lci5Qcm9wZXJ0eUVmZmVjdHNgIHBlcmZvcm1zIHN0cmljdCBkaXJ0eSBjaGVja2luZyBvbgogICAqIG9iamVjdHMsIHdoaWNoIG1lYW5zIHRoYXQgYW55IGRlZXAgbW9kaWZpY2F0aW9ucyB0byBhbiBvYmplY3Qgb3IgYXJyYXkgd2lsbAogICAqIG5vdCBiZSBwcm9wYWdhdGVkIHVubGVzcyAiaW1tdXRhYmxlIiBkYXRhIHBhdHRlcm5zIGFyZSB1c2VkIChpLmUuIGFsbCBvYmplY3QKICAgKiByZWZlcmVuY2VzIGZyb20gdGhlIHJvb3QgdG8gdGhlIG11dGF0aW9uIHdlcmUgY2hhbmdlZCkuCiAgICoKICAgKiBQb2x5bWVyIGFsc28gcHJvdmlkZXMgYSBwcm9wcmlldGFyeSBkYXRhIG11dGF0aW9uIGFuZCBwYXRoIG5vdGlmaWNhdGlvbiBBUEkKICAgKiAoZS5nLiBgbm90aWZ5UGF0aGAsIGBzZXRgLCBhbmQgYXJyYXkgbXV0YXRpb24gQVBJJ3MpIHRoYXQgYWxsb3cgZWZmaWNpZW50CiAgICogbXV0YXRpb24gYW5kIG5vdGlmaWNhdGlvbiBvZiBkZWVwIGNoYW5nZXMgaW4gYW4gb2JqZWN0IGdyYXBoIHRvIGFsbCBlbGVtZW50cwogICAqIGJvdW5kIHRvIHRoZSBzYW1lIG9iamVjdCBncmFwaC4KICAgKgogICAqIEluIGNhc2VzIHdoZXJlIG5laXRoZXIgaW1tdXRhYmxlIHBhdHRlcm5zIG5vciB0aGUgZGF0YSBtdXRhdGlvbiBBUEkgY2FuIGJlCiAgICogdXNlZCwgYXBwbHlpbmcgdGhpcyBtaXhpbiB3aWxsIGFsbG93IFBvbHltZXIgdG8gc2tpcCBkaXJ0eSBjaGVja2luZyBmb3IKICAgKiBvYmplY3RzIGFuZCBhcnJheXMgKGFsd2F5cyBjb25zaWRlciB0aGVtIHRvIGJlICJkaXJ0eSIpLiAgVGhpcyBhbGxvd3MgYQogICAqIHVzZXIgdG8gbWFrZSBhIGRlZXAgbW9kaWZpY2F0aW9uIHRvIGEgYm91bmQgb2JqZWN0IGdyYXBoLCBhbmQgdGhlbiBlaXRoZXIKICAgKiBzaW1wbHkgcmUtc2V0IHRoZSBvYmplY3QgKGUuZy4gYHRoaXMuaXRlbXMgPSB0aGlzLml0ZW1zYCkgb3IgY2FsbCBgbm90aWZ5UGF0aGAKICAgKiAoZS5nLiBgdGhpcy5ub3RpZnlQYXRoKCdpdGVtcycpYCkgdG8gdXBkYXRlIHRoZSB0cmVlLiAgTm90ZSB0aGF0IGFsbAogICAqIGVsZW1lbnRzIHRoYXQgd2lzaCB0byBiZSB1cGRhdGVkIGJhc2VkIG9uIGRlZXAgbXV0YXRpb25zIG11c3QgYXBwbHkgdGhpcwogICAqIG1peGluIG9yIG90aGVyd2lzZSBza2lwIHN0cmljdCBkaXJ0eSBjaGVja2luZyBmb3Igb2JqZWN0cy9hcnJheXMuCiAgICogU3BlY2lmaWNhbGx5LCBhbnkgZWxlbWVudHMgaW4gdGhlIGJpbmRpbmcgdHJlZSBiZXR3ZWVuIHRoZSBzb3VyY2Ugb2YgYQogICAqIG11dGF0aW9uIGFuZCB0aGUgY29uc3VtcHRpb24gb2YgaXQgbXVzdCBlbmFibGUgdGhpcyBtaXhpbiBvciBhcHBseSB0aGUKICAgKiBgUG9seW1lci5NdXRhYmxlRGF0YWAgbWl4aW4uCiAgICoKICAgKiBXaGlsZSB0aGlzIG1peGluIGFkZHMgdGhlIGFiaWxpdHkgdG8gZm9yZ28gT2JqZWN0L0FycmF5IGRpcnR5IGNoZWNraW5nLAogICAqIHRoZSBgbXV0YWJsZURhdGFgIGZsYWcgZGVmYXVsdHMgdG8gZmFsc2UgYW5kIG11c3QgYmUgc2V0IG9uIHRoZSBpbnN0YW5jZS4KICAgKgogICAqIE5vdGUsIHRoZSBwZXJmb3JtYW5jZSBjaGFyYWN0ZXJpc3RpY3Mgb2YgcHJvcGFnYXRpbmcgbGFyZ2Ugb2JqZWN0IGdyYXBocwogICAqIHdpbGwgYmUgd29yc2UgYnkgcmVseWluZyBvbiBgbXV0YWJsZURhdGE6IHRydWVgIGFzIG9wcG9zZWQgdG8gdXNpbmcKICAgKiBzdHJpY3QgZGlydHkgY2hlY2tpbmcgd2l0aCBpbW11dGFibGUgcGF0dGVybnMgb3IgUG9seW1lcidzIHBhdGggbm90aWZpY2F0aW9uCiAgICogQVBJLgogICAqCiAgICogQG1peGluRnVuY3Rpb24KICAgKiBAcG9seW1lcgogICAqIEBtZW1iZXJvZiBQb2x5bWVyCiAgICogQHN1bW1hcnkgRWxlbWVudCBjbGFzcyBtaXhpbiB0byBvcHRpb25hbGx5IHNraXAgc3RyaWN0IGRpcnR5LWNoZWNraW5nCiAgICogICBmb3Igb2JqZWN0cyBhbmQgYXJyYXlzCiAgICovCiAgUG9seW1lci5PcHRpb25hbE11dGFibGVEYXRhID0gUG9seW1lci5kZWR1cGluZ01peGluKHN1cGVyQ2xhc3MgPT4gewoKICAgIC8qKgogICAgICogQG1peGluQ2xhc3MKICAgICAqIEBwb2x5bWVyCiAgICAgKiBAaW1wbGVtZW50cyB7UG9seW1lcl9PcHRpb25hbE11dGFibGVEYXRhfQogICAgICovCiAgICBjbGFzcyBPcHRpb25hbE11dGFibGVEYXRhIGV4dGVuZHMgc3VwZXJDbGFzcyB7CgogICAgICBzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKSB7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIC8qKgogICAgICAgICAgICogSW5zdGFuY2UtbGV2ZWwgZmxhZyBmb3IgY29uZmlndXJpbmcgdGhlIGRpcnR5LWNoZWNraW5nIHN0cmF0ZWd5CiAgICAgICAgICAgKiBmb3IgdGhpcyBlbGVtZW50LiAgV2hlbiB0cnVlLCBPYmplY3RzIGFuZCBBcnJheXMgd2lsbCBza2lwIGRpcnR5CiAgICAgICAgICAgKiBjaGVja2luZywgb3RoZXJ3aXNlIHN0cmljdCBlcXVhbGl0eSBjaGVja2luZyB3aWxsIGJlIHVzZWQuCiAgICAgICAgICAgKi8KICAgICAgICAgIG11dGFibGVEYXRhOiBCb29sZWFuCiAgICAgICAgfTsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIE92ZXJyaWRlcyBgUG9seW1lci5Qcm9wZXJ0eUVmZmVjdHNgIHRvIHByb3ZpZGUgb3B0aW9uIGZvciBza2lwcGluZwogICAgICAgKiBzdHJpY3QgZXF1YWxpdHkgY2hlY2tpbmcgZm9yIE9iamVjdHMgYW5kIEFycmF5cy4KICAgICAgICoKICAgICAgICogV2hlbiBgdGhpcy5tdXRhYmxlRGF0YWAgaXMgdHJ1ZSBvbiB0aGlzIGluc3RhbmNlLCB0aGlzIG1ldGhvZAogICAgICAgKiBwdWxscyB0aGUgdmFsdWUgdG8gZGlydHkgY2hlY2sgYWdhaW5zdCBmcm9tIHRoZSBgX19kYXRhVGVtcGAgY2FjaGUKICAgICAgICogKHJhdGhlciB0aGFuIHRoZSBub3JtYWwgYF9fZGF0YWAgY2FjaGUpIGZvciBPYmplY3RzLiAgU2luY2UgdGhlIHRlbXAKICAgICAgICogY2FjaGUgaXMgY2xlYXJlZCBhdCB0aGUgZW5kIG9mIGEgdHVybiwgdGhpcyBpbXBsZW1lbnRhdGlvbiBhbGxvd3MKICAgICAgICogc2lkZS1lZmZlY3RzIG9mIGRlZXAgb2JqZWN0IGNoYW5nZXMgdG8gYmUgcHJvY2Vzc2VkIGJ5IHJlLXNldHRpbmcgdGhlCiAgICAgICAqIHNhbWUgb2JqZWN0ICh1c2luZyB0aGUgdGVtcCBjYWNoZSBhcyBhbiBpbi10dXJuIGJhY2tzdG9wIHRvIHByZXZlbnQKICAgICAgICogY3ljbGVzIGR1ZSB0byAyLXdheSBub3RpZmljYXRpb24pLgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkgUHJvcGVydHkgbmFtZQogICAgICAgKiBAcGFyYW0geyp9IHZhbHVlIE5ldyBwcm9wZXJ0eSB2YWx1ZQogICAgICAgKiBAcGFyYW0geyp9IG9sZCBQcmV2aW91cyBwcm9wZXJ0eSB2YWx1ZQogICAgICAgKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSBwcm9wZXJ0eSBzaG91bGQgYmUgY29uc2lkZXJlZCBhIGNoYW5nZQogICAgICAgKiBAcHJvdGVjdGVkCiAgICAgICAqLwogICAgICBfc2hvdWxkUHJvcGVydHlDaGFuZ2UocHJvcGVydHksIHZhbHVlLCBvbGQpIHsKICAgICAgICByZXR1cm4gbXV0YWJsZVByb3BlcnR5Q2hhbmdlKHRoaXMsIHByb3BlcnR5LCB2YWx1ZSwgb2xkLCB0aGlzLm11dGFibGVEYXRhKTsKICAgICAgfQogICAgfQoKICAgIHJldHVybiBPcHRpb25hbE11dGFibGVEYXRhOwoKICB9KTsKCiAgLy8gRXhwb3J0IGZvciB1c2UgYnkgbGVnYWN5IGJlaGF2aW9yCiAgUG9seW1lci5NdXRhYmxlRGF0YS5fbXV0YWJsZVByb3BlcnR5Q2hhbmdlID0gbXV0YWJsZVByb3BlcnR5Q2hhbmdlOwoKfSkoKTsKPC9zY3JpcHQ+PHNjcmlwdD4KICAoZnVuY3Rpb24oKSB7CiAgICAndXNlIHN0cmljdCc7CgogICAgLy8gQmFzZSBjbGFzcyBmb3IgSFRNTFRlbXBsYXRlRWxlbWVudCBleHRlbnNpb24gdGhhdCBoYXMgcHJvcGVydHkgZWZmZWN0cwogICAgLy8gbWFjaGluZXJ5IGZvciBwcm9wYWdhdGluZyBob3N0IHByb3BlcnRpZXMgdG8gY2hpbGRyZW4uIFRoaXMgaXMgYW4gRVM1CiAgICAvLyBjbGFzcyBvbmx5IGJlY2F1c2UgQmFiZWwgKGluY29ycmVjdGx5KSByZXF1aXJlcyBzdXBlcigpIGluIHRoZSBjbGFzcwogICAgLy8gY29uc3RydWN0b3IgZXZlbiB0aG91Z2ggbm8gYHRoaXNgIGlzIHVzZWQgYW5kIGl0IHJldHVybnMgYW4gaW5zdGFuY2UuCiAgICBsZXQgbmV3SW5zdGFuY2UgPSBudWxsOwoKICAgIC8qKgogICAgICogQGNvbnN0cnVjdG9yCiAgICAgKiBAZXh0ZW5kcyB7SFRNTFRlbXBsYXRlRWxlbWVudH0KICAgICAqIEBwcml2YXRlCiAgICAgKi8KICAgIGZ1bmN0aW9uIEhUTUxUZW1wbGF0ZUVsZW1lbnRFeHRlbnNpb24oKSB7IHJldHVybiBuZXdJbnN0YW5jZTsgfQogICAgSFRNTFRlbXBsYXRlRWxlbWVudEV4dGVuc2lvbi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEhUTUxUZW1wbGF0ZUVsZW1lbnQucHJvdG90eXBlLCB7CiAgICAgIGNvbnN0cnVjdG9yOiB7CiAgICAgICAgdmFsdWU6IEhUTUxUZW1wbGF0ZUVsZW1lbnRFeHRlbnNpb24sCiAgICAgICAgd3JpdGFibGU6IHRydWUKICAgICAgfQogICAgfSk7CgogICAgLyoqCiAgICAgKiBAY29uc3RydWN0b3IKICAgICAqIEBpbXBsZW1lbnRzIHtQb2x5bWVyX1Byb3BlcnR5RWZmZWN0c30KICAgICAqIEBleHRlbmRzIHtIVE1MVGVtcGxhdGVFbGVtZW50RXh0ZW5zaW9ufQogICAgICogQHByaXZhdGUKICAgICAqLwogICAgY29uc3QgRGF0YVRlbXBsYXRlID0gUG9seW1lci5Qcm9wZXJ0eUVmZmVjdHMoSFRNTFRlbXBsYXRlRWxlbWVudEV4dGVuc2lvbik7CgogICAgLyoqCiAgICAgKiBAY29uc3RydWN0b3IKICAgICAqIEBpbXBsZW1lbnRzIHtQb2x5bWVyX011dGFibGVEYXRhfQogICAgICogQGV4dGVuZHMge0RhdGFUZW1wbGF0ZX0KICAgICAqIEBwcml2YXRlCiAgICAgKi8KICAgIGNvbnN0IE11dGFibGVEYXRhVGVtcGxhdGUgPSBQb2x5bWVyLk11dGFibGVEYXRhKERhdGFUZW1wbGF0ZSk7CgogICAgLy8gQXBwbGllcyBhIERhdGFUZW1wbGF0ZSBzdWJjbGFzcyB0byBhIDx0ZW1wbGF0ZT4gaW5zdGFuY2UKICAgIGZ1bmN0aW9uIHVwZ3JhZGVUZW1wbGF0ZSh0ZW1wbGF0ZSwgY29uc3RydWN0b3IpIHsKICAgICAgbmV3SW5zdGFuY2UgPSB0ZW1wbGF0ZTsKICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHRlbXBsYXRlLCBjb25zdHJ1Y3Rvci5wcm90b3R5cGUpOwogICAgICBuZXcgY29uc3RydWN0b3IoKTsKICAgICAgbmV3SW5zdGFuY2UgPSBudWxsOwogICAgfQoKICAgIC8qKgogICAgICogQmFzZSBjbGFzcyBmb3IgVGVtcGxhdGVJbnN0YW5jZS4KICAgICAqIEBjb25zdHJ1Y3RvcgogICAgICogQGltcGxlbWVudHMge1BvbHltZXJfUHJvcGVydHlFZmZlY3RzfQogICAgICogQHByaXZhdGUKICAgICAqLwogICAgY29uc3QgYmFzZSA9IFBvbHltZXIuUHJvcGVydHlFZmZlY3RzKGNsYXNzIHt9KTsKCiAgICAvKioKICAgICAqIEBwb2x5bWVyCiAgICAgKiBAY3VzdG9tRWxlbWVudAogICAgICogQGFwcGxpZXNNaXhpbiBQb2x5bWVyLlByb3BlcnR5RWZmZWN0cwogICAgICogQHVucmVzdHJpY3RlZAogICAgICovCiAgICBjbGFzcyBUZW1wbGF0ZUluc3RhbmNlQmFzZSBleHRlbmRzIGJhc2UgewogICAgICBjb25zdHJ1Y3Rvcihwcm9wcykgewogICAgICAgIHN1cGVyKCk7CiAgICAgICAgdGhpcy5fY29uZmlndXJlUHJvcGVydGllcyhwcm9wcyk7CiAgICAgICAgdGhpcy5yb290ID0gdGhpcy5fc3RhbXBUZW1wbGF0ZSh0aGlzLl9fZGF0YUhvc3QpOwogICAgICAgIC8vIFNhdmUgbGlzdCBvZiBzdGFtcGVkIGNoaWxkcmVuCiAgICAgICAgbGV0IGNoaWxkcmVuID0gdGhpcy5jaGlsZHJlbiA9IFtdOwogICAgICAgIGZvciAobGV0IG4gPSB0aGlzLnJvb3QuZmlyc3RDaGlsZDsgbjsgbj1uLm5leHRTaWJsaW5nKSB7CiAgICAgICAgICBjaGlsZHJlbi5wdXNoKG4pOwogICAgICAgICAgbi5fX3RlbXBsYXRpemVJbnN0YW5jZSA9IHRoaXM7CiAgICAgICAgfQogICAgICAgIGlmICh0aGlzLl9fdGVtcGxhdGl6ZU93bmVyICYmCiAgICAgICAgICB0aGlzLl9fdGVtcGxhdGl6ZU93bmVyLl9faGlkZVRlbXBsYXRlQ2hpbGRyZW5fXykgewogICAgICAgICAgdGhpcy5fc2hvd0hpZGVDaGlsZHJlbih0cnVlKTsKICAgICAgICB9CiAgICAgICAgLy8gRmx1c2ggcHJvcHMgb25seSB3aGVuIHByb3BzIGFyZSBwYXNzZWQgaWYgaW5zdGFuY2UgcHJvcHMgZXhpc3QKICAgICAgICAvLyBvciB3aGVuIHRoZXJlIGlzbid0IGluc3RhbmNlIHByb3BzLgogICAgICAgIGxldCBvcHRpb25zID0gdGhpcy5fX3RlbXBsYXRpemVPcHRpb25zOwogICAgICAgIGlmICgocHJvcHMgJiYgb3B0aW9ucy5pbnN0YW5jZVByb3BzKSB8fCAhb3B0aW9ucy5pbnN0YW5jZVByb3BzKSB7CiAgICAgICAgICB0aGlzLl9lbmFibGVQcm9wZXJ0aWVzKCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBDb25maWd1cmUgdGhlIGdpdmVuIGBwcm9wc2AgYnkgY2FsbGluZyBgX3NldFBlbmRpbmdQcm9wZXJ0eWAuIEFsc28KICAgICAgICogc2V0cyBhbnkgcHJvcGVydGllcyBzdG9yZWQgaW4gYF9faG9zdFByb3BzYC4KICAgICAgICogQHByaXZhdGUKICAgICAgICogQHBhcmFtIHtPYmplY3R9IHByb3BzIE9iamVjdCBvZiBwcm9wZXJ0eSBuYW1lLXZhbHVlIHBhaXJzIHRvIHNldC4KICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICovCiAgICAgIF9jb25maWd1cmVQcm9wZXJ0aWVzKHByb3BzKSB7CiAgICAgICAgbGV0IG9wdGlvbnMgPSB0aGlzLl9fdGVtcGxhdGl6ZU9wdGlvbnM7CiAgICAgICAgaWYgKG9wdGlvbnMuZm9yd2FyZEhvc3RQcm9wKSB7CiAgICAgICAgICBmb3IgKGxldCBocHJvcCBpbiB0aGlzLl9faG9zdFByb3BzKSB7CiAgICAgICAgICAgIHRoaXMuX3NldFBlbmRpbmdQcm9wZXJ0eShocHJvcCwgdGhpcy5fX2RhdGFIb3N0WydfaG9zdF8nICsgaHByb3BdKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgLy8gQW55IGluc3RhbmNlIHByb3BzIHBhc3NlZCBpbiB0aGUgY29uc3RydWN0b3Igd2lsbCBvdmVyd3JpdGUgaG9zdCBwcm9wczsKICAgICAgICAvLyBub3JtYWxseSB0aGlzIHdvdWxkIGJlIGEgdXNlciBlcnJvciBidXQgd2UgZG9uJ3Qgc3BlY2lmaWNhbGx5IGZpbHRlciB0aGVtCiAgICAgICAgZm9yIChsZXQgaXByb3AgaW4gcHJvcHMpIHsKICAgICAgICAgIHRoaXMuX3NldFBlbmRpbmdQcm9wZXJ0eShpcHJvcCwgcHJvcHNbaXByb3BdKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEZvcndhcmRzIGEgaG9zdCBwcm9wZXJ0eSB0byB0aGlzIGluc3RhbmNlLiAgVGhpcyBtZXRob2Qgc2hvdWxkIGJlCiAgICAgICAqIGNhbGxlZCBvbiBpbnN0YW5jZXMgZnJvbSB0aGUgYG9wdGlvbnMuZm9yd2FyZEhvc3RQcm9wYCBjYWxsYmFjawogICAgICAgKiB0byBwcm9wYWdhdGUgY2hhbmdlcyBvZiBob3N0IHByb3BlcnRpZXMgdG8gZWFjaCBpbnN0YW5jZS4KICAgICAgICoKICAgICAgICogTm90ZSB0aGlzIG1ldGhvZCBlbnF1ZXVlcyB0aGUgY2hhbmdlLCB3aGljaCBhcmUgZmx1c2hlZCBhcyBhIGJhdGNoLgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcCBQcm9wZXJ0eSBvciBwYXRoIG5hbWUKICAgICAgICogQHBhcmFtIHsqfSB2YWx1ZSBWYWx1ZSBvZiB0aGUgcHJvcGVydHkgdG8gZm9yd2FyZAogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKi8KICAgICAgZm9yd2FyZEhvc3RQcm9wKHByb3AsIHZhbHVlKSB7CiAgICAgICAgaWYgKHRoaXMuX3NldFBlbmRpbmdQcm9wZXJ0eU9yUGF0aChwcm9wLCB2YWx1ZSwgZmFsc2UsIHRydWUpKSB7CiAgICAgICAgICB0aGlzLl9fZGF0YUhvc3QuX2VucXVldWVDbGllbnQodGhpcyk7CiAgICAgICAgfQogICAgICB9CgogICAgICAvKioKICAgICAgICogT3ZlcnJpZGUgcG9pbnQgZm9yIGFkZGluZyBjdXN0b20gb3Igc2ltdWxhdGVkIGV2ZW50IGhhbmRsaW5nLgogICAgICAgKgogICAgICAgKiBAcGFyYW0geyFOb2RlfSBub2RlIE5vZGUgdG8gYWRkIGV2ZW50IGxpc3RlbmVyIHRvCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudE5hbWUgTmFtZSBvZiBldmVudAogICAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKCFFdmVudCk6dm9pZH0gaGFuZGxlciBMaXN0ZW5lciBmdW5jdGlvbiB0byBhZGQKICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICovCiAgICAgIF9hZGRFdmVudExpc3RlbmVyVG9Ob2RlKG5vZGUsIGV2ZW50TmFtZSwgaGFuZGxlcikgewogICAgICAgIGlmICh0aGlzLl9tZXRob2RIb3N0ICYmIHRoaXMuX190ZW1wbGF0aXplT3B0aW9ucy5wYXJlbnRNb2RlbCkgewogICAgICAgICAgLy8gSWYgdGhpcyBpbnN0YW5jZSBzaG91bGQgYmUgY29uc2lkZXJlZCBhIHBhcmVudCBtb2RlbCwgZGVjb3JhdGUKICAgICAgICAgIC8vIGV2ZW50cyB0aGlzIHRlbXBsYXRlIGluc3RhbmNlIGFzIGBtb2RlbGAKICAgICAgICAgIHRoaXMuX21ldGhvZEhvc3QuX2FkZEV2ZW50TGlzdGVuZXJUb05vZGUobm9kZSwgZXZlbnROYW1lLCAoZSkgPT4gewogICAgICAgICAgICBlLm1vZGVsID0gdGhpczsKICAgICAgICAgICAgaGFuZGxlcihlKTsKICAgICAgICAgIH0pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAvLyBPdGhlcndpc2UgZGVsZWdhdGUgdG8gdGhlIHRlbXBsYXRlJ3MgaG9zdCAod2hpY2ggY291bGQgYmUpCiAgICAgICAgICAvLyBhbm90aGVyIHRlbXBsYXRlIGluc3RhbmNlCiAgICAgICAgICBsZXQgdGVtcGxhdGVIb3N0ID0gdGhpcy5fX2RhdGFIb3N0Ll9fZGF0YUhvc3Q7CiAgICAgICAgICBpZiAodGVtcGxhdGVIb3N0KSB7CiAgICAgICAgICAgIHRlbXBsYXRlSG9zdC5fYWRkRXZlbnRMaXN0ZW5lclRvTm9kZShub2RlLCBldmVudE5hbWUsIGhhbmRsZXIpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICAvKioKICAgICAgICogU2hvd3Mgb3IgaGlkZXMgdGhlIHRlbXBsYXRlIGluc3RhbmNlIHRvcCBsZXZlbCBjaGlsZCBlbGVtZW50cy4gRm9yCiAgICAgICAqIHRleHQgbm9kZXMsIGB0ZXh0Q29udGVudGAgaXMgcmVtb3ZlZCB3aGlsZSAiaGlkZGVuIiBhbmQgcmVwbGFjZWQgd2hlbgogICAgICAgKiAic2hvd24uIgogICAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGhpZGUgU2V0IHRvIHRydWUgdG8gaGlkZSB0aGUgY2hpbGRyZW47CiAgICAgICAqIHNldCB0byBmYWxzZSB0byBzaG93IHRoZW0uCiAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAqIEBwcm90ZWN0ZWQKICAgICAgICovCiAgICAgIF9zaG93SGlkZUNoaWxkcmVuKGhpZGUpIHsKICAgICAgICBsZXQgYyA9IHRoaXMuY2hpbGRyZW47CiAgICAgICAgZm9yIChsZXQgaT0wOyBpPGMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgIGxldCBuID0gY1tpXTsKICAgICAgICAgIC8vIElnbm9yZSBub24tY2hhbmdlcwogICAgICAgICAgaWYgKEJvb2xlYW4oaGlkZSkgIT0gQm9vbGVhbihuLl9faGlkZVRlbXBsYXRlQ2hpbGRyZW5fXykpIHsKICAgICAgICAgICAgaWYgKG4ubm9kZVR5cGUgPT09IE5vZGUuVEVYVF9OT0RFKSB7CiAgICAgICAgICAgICAgaWYgKGhpZGUpIHsKICAgICAgICAgICAgICAgIG4uX19wb2x5bWVyVGV4dENvbnRlbnRfXyA9IG4udGV4dENvbnRlbnQ7CiAgICAgICAgICAgICAgICBuLnRleHRDb250ZW50ID0gJyc7CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIG4udGV4dENvbnRlbnQgPSBuLl9fcG9seW1lclRleHRDb250ZW50X187CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAvLyByZW1vdmUgYW5kIHJlcGxhY2Ugc2xvdAogICAgICAgICAgICB9IGVsc2UgaWYgKG4ubG9jYWxOYW1lID09PSAnc2xvdCcpIHsKICAgICAgICAgICAgICBpZiAoaGlkZSkgewogICAgICAgICAgICAgICAgbi5fX3BvbHltZXJSZXBsYWNlZF9fID0gZG9jdW1lbnQuY3JlYXRlQ29tbWVudCgnaGlkZGVuLXNsb3QnKTsKICAgICAgICAgICAgICAgIG4ucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQobi5fX3BvbHltZXJSZXBsYWNlZF9fLCBuKTsKICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgY29uc3QgcmVwbGFjZSA9IG4uX19wb2x5bWVyUmVwbGFjZWRfXzsKICAgICAgICAgICAgICAgIGlmIChyZXBsYWNlKSB7CiAgICAgICAgICAgICAgICAgIHJlcGxhY2UucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQobiwgcmVwbGFjZSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICBlbHNlIGlmIChuLnN0eWxlKSB7CiAgICAgICAgICAgICAgaWYgKGhpZGUpIHsKICAgICAgICAgICAgICAgIG4uX19wb2x5bWVyRGlzcGxheV9fID0gbi5zdHlsZS5kaXNwbGF5OwogICAgICAgICAgICAgICAgbi5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBuLnN0eWxlLmRpc3BsYXkgPSBuLl9fcG9seW1lckRpc3BsYXlfXzsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIG4uX19oaWRlVGVtcGxhdGVDaGlsZHJlbl9fID0gaGlkZTsKICAgICAgICAgIGlmIChuLl9zaG93SGlkZUNoaWxkcmVuKSB7CiAgICAgICAgICAgIG4uX3Nob3dIaWRlQ2hpbGRyZW4oaGlkZSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBPdmVycmlkZXMgZGVmYXVsdCBwcm9wZXJ0eS1lZmZlY3RzIGltcGxlbWVudGF0aW9uIHRvIGludGVyY2VwdAogICAgICAgKiB0ZXh0Q29udGVudCBiaW5kaW5ncyB3aGlsZSBjaGlsZHJlbiBhcmUgImhpZGRlbiIgYW5kIGNhY2hlIGluCiAgICAgICAqIHByaXZhdGUgc3RvcmFnZSBmb3IgbGF0ZXIgcmV0cmlldmFsLgogICAgICAgKgogICAgICAgKiBAcGFyYW0geyFOb2RlfSBub2RlIFRoZSBub2RlIHRvIHNldCBhIHByb3BlcnR5IG9uCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wIFRoZSBwcm9wZXJ0eSB0byBzZXQKICAgICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0CiAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAqIEBwcm90ZWN0ZWQKICAgICAgICovCiAgICAgIF9zZXRVbm1hbmFnZWRQcm9wZXJ0eVRvTm9kZShub2RlLCBwcm9wLCB2YWx1ZSkgewogICAgICAgIGlmIChub2RlLl9faGlkZVRlbXBsYXRlQ2hpbGRyZW5fXyAmJgogICAgICAgICAgICBub2RlLm5vZGVUeXBlID09IE5vZGUuVEVYVF9OT0RFICYmIHByb3AgPT0gJ3RleHRDb250ZW50JykgewogICAgICAgICAgbm9kZS5fX3BvbHltZXJUZXh0Q29udGVudF9fID0gdmFsdWU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHN1cGVyLl9zZXRVbm1hbmFnZWRQcm9wZXJ0eVRvTm9kZShub2RlLCBwcm9wLCB2YWx1ZSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBGaW5kIHRoZSBwYXJlbnQgbW9kZWwgb2YgdGhpcyB0ZW1wbGF0ZSBpbnN0YW5jZS4gIFRoZSBwYXJlbnQgbW9kZWwKICAgICAgICogaXMgZWl0aGVyIGFub3RoZXIgdGVtcGxhdGl6ZSBpbnN0YW5jZSB0aGF0IGhhZCBvcHRpb24gYHBhcmVudE1vZGVsOiB0cnVlYCwKICAgICAgICogb3IgZWxzZSB0aGUgaG9zdCBlbGVtZW50LgogICAgICAgKgogICAgICAgKiBAcmV0dXJuIHshUG9seW1lcl9Qcm9wZXJ0eUVmZmVjdHN9IFRoZSBwYXJlbnQgbW9kZWwgb2YgdGhpcyBpbnN0YW5jZQogICAgICAgKi8KICAgICAgZ2V0IHBhcmVudE1vZGVsKCkgewogICAgICAgIGxldCBtb2RlbCA9IHRoaXMuX19wYXJlbnRNb2RlbDsKICAgICAgICBpZiAoIW1vZGVsKSB7CiAgICAgICAgICBsZXQgb3B0aW9uczsKICAgICAgICAgIG1vZGVsID0gdGhpczsKICAgICAgICAgIGRvIHsKICAgICAgICAgICAgLy8gQSB0ZW1wbGF0ZSBpbnN0YW5jZSdzIGBfX2RhdGFIb3N0YCBpcyBhIDx0ZW1wbGF0ZT4KICAgICAgICAgICAgLy8gYG1vZGVsLl9fZGF0YUhvc3QuX19kYXRhSG9zdGAgaXMgdGhlIHRlbXBsYXRlJ3MgaG9zdAogICAgICAgICAgICBtb2RlbCA9IG1vZGVsLl9fZGF0YUhvc3QuX19kYXRhSG9zdDsKICAgICAgICAgIH0gd2hpbGUgKChvcHRpb25zID0gbW9kZWwuX190ZW1wbGF0aXplT3B0aW9ucykgJiYgIW9wdGlvbnMucGFyZW50TW9kZWwpOwogICAgICAgICAgdGhpcy5fX3BhcmVudE1vZGVsID0gbW9kZWw7CiAgICAgICAgfQogICAgICAgIHJldHVybiBtb2RlbDsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIFN0dWIgb2YgSFRNTEVsZW1lbnQncyBgZGlzcGF0Y2hFdmVudGAsIHNvIHRoYXQgZWZmZWN0cyB0aGF0IG1heQogICAgICAgKiBkaXNwYXRjaCBldmVudHMgc2FmZWx5IG5vLW9wLgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudCBFdmVudCB0byBkaXNwYXRjaAogICAgICAgKiBAcmV0dXJuIHtib29sZWFufSBBbHdheXMgdHJ1ZS4KICAgICAgICovCiAgICAgICBkaXNwYXRjaEV2ZW50KGV2ZW50KSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnMKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgIH0KCiAgICAvKiogQHR5cGUgeyFEYXRhVGVtcGxhdGV9ICovCiAgICBUZW1wbGF0ZUluc3RhbmNlQmFzZS5wcm90b3R5cGUuX19kYXRhSG9zdDsKICAgIC8qKiBAdHlwZSB7IVRlbXBsYXRpemVPcHRpb25zfSAqLwogICAgVGVtcGxhdGVJbnN0YW5jZUJhc2UucHJvdG90eXBlLl9fdGVtcGxhdGl6ZU9wdGlvbnM7CiAgICAvKiogQHR5cGUgeyFQb2x5bWVyX1Byb3BlcnR5RWZmZWN0c30gKi8KICAgIFRlbXBsYXRlSW5zdGFuY2VCYXNlLnByb3RvdHlwZS5fbWV0aG9kSG9zdDsKICAgIC8qKiBAdHlwZSB7IU9iamVjdH0gKi8KICAgIFRlbXBsYXRlSW5zdGFuY2VCYXNlLnByb3RvdHlwZS5fX3RlbXBsYXRpemVPd25lcjsKICAgIC8qKiBAdHlwZSB7IU9iamVjdH0gKi8KICAgIFRlbXBsYXRlSW5zdGFuY2VCYXNlLnByb3RvdHlwZS5fX2hvc3RQcm9wczsKCiAgICAvKioKICAgICAqIEBjb25zdHJ1Y3RvcgogICAgICogQGV4dGVuZHMge1RlbXBsYXRlSW5zdGFuY2VCYXNlfQogICAgICogQGltcGxlbWVudHMge1BvbHltZXJfTXV0YWJsZURhdGF9CiAgICAgKiBAcHJpdmF0ZQogICAgICovCiAgICBjb25zdCBNdXRhYmxlVGVtcGxhdGVJbnN0YW5jZUJhc2UgPSBQb2x5bWVyLk11dGFibGVEYXRhKFRlbXBsYXRlSW5zdGFuY2VCYXNlKTsKCiAgICBmdW5jdGlvbiBmaW5kTWV0aG9kSG9zdCh0ZW1wbGF0ZSkgewogICAgICAvLyBUZWNobmljYWxseSB0aGlzIHNob3VsZCBiZSB0aGUgb3duZXIgb2YgdGhlIG91dGVybW9zdCB0ZW1wbGF0ZS4KICAgICAgLy8gSW4gc2hhZG93IGRvbSwgdGhpcyBpcyBhbHdheXMgZ2V0Um9vdE5vZGUoKS5ob3N0LCBidXQgd2UgY2FuCiAgICAgIC8vIGFwcHJveGltYXRlIHRoaXMgdmlhIGNvb3BlcmF0aW9uIHdpdGggb3VyIGRhdGFIb3N0IGFsd2F5cyBzZXR0aW5nCiAgICAgIC8vIGBfbWV0aG9kSG9zdGAgYXMgbG9uZyBhcyB0aGVyZSB3ZXJlIGJpbmRpbmdzIChvciBpZCdzKSBvbiB0aGlzCiAgICAgIC8vIGluc3RhbmNlIGNhdXNpbmcgaXQgdG8gZ2V0IGEgZGF0YUhvc3QuCiAgICAgIGxldCB0ZW1wbGF0ZUhvc3QgPSB0ZW1wbGF0ZS5fX2RhdGFIb3N0OwogICAgICByZXR1cm4gdGVtcGxhdGVIb3N0ICYmIHRlbXBsYXRlSG9zdC5fbWV0aG9kSG9zdCB8fCB0ZW1wbGF0ZUhvc3Q7CiAgICB9CgogICAgLyogZXNsaW50LWRpc2FibGUgdmFsaWQtanNkb2MgKi8KICAgIC8qKgogICAgICogQHN1cHByZXNzIHttaXNzaW5nUHJvcGVydGllc30gY2xhc3MucHJvdG90eXBlIGlzIG5vdCBkZWZpbmVkIGZvciBzb21lIHJlYXNvbgogICAgICovCiAgICBmdW5jdGlvbiBjcmVhdGVUZW1wbGF0aXplckNsYXNzKHRlbXBsYXRlLCB0ZW1wbGF0ZUluZm8sIG9wdGlvbnMpIHsKICAgICAgLy8gQW5vbnltb3VzIGNsYXNzIGNyZWF0ZWQgYnkgdGhlIHRlbXBsYXRpemUKICAgICAgbGV0IGJhc2UgPSBvcHRpb25zLm11dGFibGVEYXRhID8KICAgICAgICBNdXRhYmxlVGVtcGxhdGVJbnN0YW5jZUJhc2UgOiBUZW1wbGF0ZUluc3RhbmNlQmFzZTsKICAgICAgLy8gQWZmb3JkYW5jZSBmb3IgZ2xvYmFsIG1peGlucyBvbnRvIFRlbXBsYXRpemVJbnN0YW5jZQogICAgICBpZiAoUG9seW1lci5UZW1wbGF0aXplLm1peGluKSB7CiAgICAgICAgYmFzZSA9IFBvbHltZXIuVGVtcGxhdGl6ZS5taXhpbihiYXNlKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogQGNvbnN0cnVjdG9yCiAgICAgICAqIEBleHRlbmRzIHtiYXNlfQogICAgICAgKiBAcHJpdmF0ZQogICAgICAgKi8KICAgICAgbGV0IGtsYXNzID0gY2xhc3MgZXh0ZW5kcyBiYXNlIHsgfTsKICAgICAga2xhc3MucHJvdG90eXBlLl9fdGVtcGxhdGl6ZU9wdGlvbnMgPSBvcHRpb25zOwogICAgICBrbGFzcy5wcm90b3R5cGUuX2JpbmRUZW1wbGF0ZSh0ZW1wbGF0ZSk7CiAgICAgIGFkZE5vdGlmeUVmZmVjdHMoa2xhc3MsIHRlbXBsYXRlLCB0ZW1wbGF0ZUluZm8sIG9wdGlvbnMpOwogICAgICByZXR1cm4ga2xhc3M7CiAgICB9CgogICAgLyoqCiAgICAgKiBAc3VwcHJlc3Mge21pc3NpbmdQcm9wZXJ0aWVzfSBjbGFzcy5wcm90b3R5cGUgaXMgbm90IGRlZmluZWQgZm9yIHNvbWUgcmVhc29uCiAgICAgKi8KICAgIGZ1bmN0aW9uIGFkZFByb3BhZ2F0ZUVmZmVjdHModGVtcGxhdGUsIHRlbXBsYXRlSW5mbywgb3B0aW9ucykgewogICAgICBsZXQgdXNlckZvcndhcmRIb3N0UHJvcCA9IG9wdGlvbnMuZm9yd2FyZEhvc3RQcm9wOwogICAgICBpZiAodXNlckZvcndhcmRIb3N0UHJvcCkgewogICAgICAgIC8vIFByb3ZpZGUgZGF0YSBBUEkgYW5kIHByb3BlcnR5IGVmZmVjdHMgb24gbWVtb2l6ZWQgdGVtcGxhdGUgY2xhc3MKICAgICAgICBsZXQga2xhc3MgPSB0ZW1wbGF0ZUluZm8udGVtcGxhdGl6ZVRlbXBsYXRlQ2xhc3M7CiAgICAgICAgaWYgKCFrbGFzcykgewogICAgICAgICAgbGV0IGJhc2UgPSBvcHRpb25zLm11dGFibGVEYXRhID8gTXV0YWJsZURhdGFUZW1wbGF0ZSA6IERhdGFUZW1wbGF0ZTsKICAgICAgICAgIC8qKiBAcHJpdmF0ZSAqLwogICAgICAgICAga2xhc3MgPSB0ZW1wbGF0ZUluZm8udGVtcGxhdGl6ZVRlbXBsYXRlQ2xhc3MgPQogICAgICAgICAgICBjbGFzcyBUZW1wbGF0aXplZFRlbXBsYXRlIGV4dGVuZHMgYmFzZSB7fTsKICAgICAgICAgIC8vIEFkZCB0ZW1wbGF0ZSAtID5pbnN0YW5jZXMgZWZmZWN0cwogICAgICAgICAgLy8gYW5kIGhvc3QgPC0gdGVtcGxhdGUgZWZmZWN0cwogICAgICAgICAgbGV0IGhvc3RQcm9wcyA9IHRlbXBsYXRlSW5mby5ob3N0UHJvcHM7CiAgICAgICAgICBmb3IgKGxldCBwcm9wIGluIGhvc3RQcm9wcykgewogICAgICAgICAgICBrbGFzcy5wcm90b3R5cGUuX2FkZFByb3BlcnR5RWZmZWN0KCdfaG9zdF8nICsgcHJvcCwKICAgICAgICAgICAgICBrbGFzcy5wcm90b3R5cGUuUFJPUEVSVFlfRUZGRUNUX1RZUEVTLlBST1BBR0FURSwKICAgICAgICAgICAgICB7Zm46IGNyZWF0ZUZvcndhcmRIb3N0UHJvcEVmZmVjdChwcm9wLCB1c2VyRm9yd2FyZEhvc3RQcm9wKX0pOwogICAgICAgICAgICBrbGFzcy5wcm90b3R5cGUuX2NyZWF0ZU5vdGlmeWluZ1Byb3BlcnR5KCdfaG9zdF8nICsgcHJvcCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHVwZ3JhZGVUZW1wbGF0ZSh0ZW1wbGF0ZSwga2xhc3MpOwogICAgICAgIC8vIE1peCBhbnkgcHJlLWJvdW5kIGRhdGEgaW50byBfX2RhdGE7IG5vIG5lZWQgdG8gZmx1c2ggdGhpcyB0bwogICAgICAgIC8vIGluc3RhbmNlcyBzaW5jZSB0aGV5IHB1bGwgZnJvbSB0aGUgdGVtcGxhdGUgYXQgaW5zdGFuY2UtdGltZQogICAgICAgIGlmICh0ZW1wbGF0ZS5fX2RhdGFQcm90bykgewogICAgICAgICAgLy8gTm90ZSwgZ2VuZXJhbGx5IGBfX2RhdGFQcm90b2AgY291bGQgYmUgY2hhaW5lZCwgYnV0IGl0J3MgZ3VhcmFudGVlZAogICAgICAgICAgLy8gdG8gbm90IGJlIHNpbmNlIHRoaXMgaXMgYSB2YW5pbGxhIHRlbXBsYXRlIHdlIGp1c3QgYWRkZWQgZWZmZWN0cyB0bwogICAgICAgICAgT2JqZWN0LmFzc2lnbih0ZW1wbGF0ZS5fX2RhdGEsIHRlbXBsYXRlLl9fZGF0YVByb3RvKTsKICAgICAgICB9CiAgICAgICAgLy8gQ2xlYXIgYW55IHBlbmRpbmcgZGF0YSBmb3IgcGVyZm9ybWFuY2UKICAgICAgICB0ZW1wbGF0ZS5fX2RhdGFUZW1wID0ge307CiAgICAgICAgdGVtcGxhdGUuX19kYXRhUGVuZGluZyA9IG51bGw7CiAgICAgICAgdGVtcGxhdGUuX19kYXRhT2xkID0gbnVsbDsKICAgICAgICB0ZW1wbGF0ZS5fZW5hYmxlUHJvcGVydGllcygpOwogICAgICB9CiAgICB9CiAgICAvKiBlc2xpbnQtZW5hYmxlIHZhbGlkLWpzZG9jICovCgogICAgZnVuY3Rpb24gY3JlYXRlRm9yd2FyZEhvc3RQcm9wRWZmZWN0KGhvc3RQcm9wLCB1c2VyRm9yd2FyZEhvc3RQcm9wKSB7CiAgICAgIHJldHVybiBmdW5jdGlvbiBmb3J3YXJkSG9zdFByb3AodGVtcGxhdGUsIHByb3AsIHByb3BzKSB7CiAgICAgICAgdXNlckZvcndhcmRIb3N0UHJvcC5jYWxsKHRlbXBsYXRlLl9fdGVtcGxhdGl6ZU93bmVyLAogICAgICAgICAgcHJvcC5zdWJzdHJpbmcoJ19ob3N0XycubGVuZ3RoKSwgcHJvcHNbcHJvcF0pOwogICAgICB9OwogICAgfQoKICAgIGZ1bmN0aW9uIGFkZE5vdGlmeUVmZmVjdHMoa2xhc3MsIHRlbXBsYXRlLCB0ZW1wbGF0ZUluZm8sIG9wdGlvbnMpIHsKICAgICAgbGV0IGhvc3RQcm9wcyA9IHRlbXBsYXRlSW5mby5ob3N0UHJvcHMgfHwge307CiAgICAgIGZvciAobGV0IGlwcm9wIGluIG9wdGlvbnMuaW5zdGFuY2VQcm9wcykgewogICAgICAgIGRlbGV0ZSBob3N0UHJvcHNbaXByb3BdOwogICAgICAgIGxldCB1c2VyTm90aWZ5SW5zdGFuY2VQcm9wID0gb3B0aW9ucy5ub3RpZnlJbnN0YW5jZVByb3A7CiAgICAgICAgaWYgKHVzZXJOb3RpZnlJbnN0YW5jZVByb3ApIHsKICAgICAgICAgIGtsYXNzLnByb3RvdHlwZS5fYWRkUHJvcGVydHlFZmZlY3QoaXByb3AsCiAgICAgICAgICAgIGtsYXNzLnByb3RvdHlwZS5QUk9QRVJUWV9FRkZFQ1RfVFlQRVMuTk9USUZZLAogICAgICAgICAgICB7Zm46IGNyZWF0ZU5vdGlmeUluc3RhbmNlUHJvcEVmZmVjdChpcHJvcCwgdXNlck5vdGlmeUluc3RhbmNlUHJvcCl9KTsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKG9wdGlvbnMuZm9yd2FyZEhvc3RQcm9wICYmIHRlbXBsYXRlLl9fZGF0YUhvc3QpIHsKICAgICAgICBmb3IgKGxldCBocHJvcCBpbiBob3N0UHJvcHMpIHsKICAgICAgICAgIGtsYXNzLnByb3RvdHlwZS5fYWRkUHJvcGVydHlFZmZlY3QoaHByb3AsCiAgICAgICAgICAgIGtsYXNzLnByb3RvdHlwZS5QUk9QRVJUWV9FRkZFQ1RfVFlQRVMuTk9USUZZLAogICAgICAgICAgICB7Zm46IGNyZWF0ZU5vdGlmeUhvc3RQcm9wRWZmZWN0KCl9KTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICBmdW5jdGlvbiBjcmVhdGVOb3RpZnlJbnN0YW5jZVByb3BFZmZlY3QoaW5zdFByb3AsIHVzZXJOb3RpZnlJbnN0YW5jZVByb3ApIHsKICAgICAgcmV0dXJuIGZ1bmN0aW9uIG5vdGlmeUluc3RhbmNlUHJvcChpbnN0LCBwcm9wLCBwcm9wcykgewogICAgICAgIHVzZXJOb3RpZnlJbnN0YW5jZVByb3AuY2FsbChpbnN0Ll9fdGVtcGxhdGl6ZU93bmVyLAogICAgICAgICAgaW5zdCwgcHJvcCwgcHJvcHNbcHJvcF0pOwogICAgICB9OwogICAgfQoKICAgIGZ1bmN0aW9uIGNyZWF0ZU5vdGlmeUhvc3RQcm9wRWZmZWN0KCkgewogICAgICByZXR1cm4gZnVuY3Rpb24gbm90aWZ5SG9zdFByb3AoaW5zdCwgcHJvcCwgcHJvcHMpIHsKICAgICAgICBpbnN0Ll9fZGF0YUhvc3QuX3NldFBlbmRpbmdQcm9wZXJ0eU9yUGF0aCgnX2hvc3RfJyArIHByb3AsIHByb3BzW3Byb3BdLCB0cnVlLCB0cnVlKTsKICAgICAgfTsKICAgIH0KCiAgICAvKioKICAgICAqIE1vZHVsZSBmb3IgcHJlcGFyaW5nIGFuZCBzdGFtcGluZyBpbnN0YW5jZXMgb2YgdGVtcGxhdGVzIHRoYXQgdXRpbGl6ZQogICAgICogUG9seW1lcidzIGRhdGEtYmluZGluZyBhbmQgZGVjbGFyYXRpdmUgZXZlbnQgbGlzdGVuZXIgZmVhdHVyZXMuCiAgICAgKgogICAgICogRXhhbXBsZToKICAgICAqCiAgICAgKiAgICAgLy8gR2V0IGEgdGVtcGxhdGUgZnJvbSBzb21ld2hlcmUsIGUuZy4gbGlnaHQgRE9NCiAgICAgKiAgICAgbGV0IHRlbXBsYXRlID0gdGhpcy5xdWVyeVNlbGVjdG9yKCd0ZW1wbGF0ZScpOwogICAgICogICAgIC8vIFByZXBhcmUgdGhlIHRlbXBsYXRlCiAgICAgKiAgICAgbGV0IFRlbXBsYXRlQ2xhc3MgPSBQb2x5bWVyLlRlbXBsYXRpemUudGVtcGxhdGl6ZSh0ZW1wbGF0ZSk7CiAgICAgKiAgICAgLy8gSW5zdGFuY2UgdGhlIHRlbXBsYXRlIHdpdGggYW4gaW5pdGlhbCBkYXRhIG1vZGVsCiAgICAgKiAgICAgbGV0IGluc3RhbmNlID0gbmV3IFRlbXBsYXRlQ2xhc3Moe215UHJvcDogJ2luaXRpYWwnfSk7CiAgICAgKiAgICAgLy8gSW5zZXJ0IHRoZSBpbnN0YW5jZSdzIERPTSBzb21ld2hlcmUsIGUuZy4gZWxlbWVudCdzIHNoYWRvdyBET00KICAgICAqICAgICB0aGlzLnNoYWRvd1Jvb3QuYXBwZW5kQ2hpbGQoaW5zdGFuY2Uucm9vdCk7CiAgICAgKiAgICAgLy8gQ2hhbmdpbmcgYSBwcm9wZXJ0eSBvbiB0aGUgaW5zdGFuY2Ugd2lsbCBwcm9wYWdhdGUgdG8gYmluZGluZ3MKICAgICAqICAgICAvLyBpbiB0aGUgdGVtcGxhdGUKICAgICAqICAgICBpbnN0YW5jZS5teVByb3AgPSAnbmV3IHZhbHVlJzsKICAgICAqCiAgICAgKiBUaGUgYG9wdGlvbnNgIGRpY3Rpb25hcnkgcGFzc2VkIHRvIGB0ZW1wbGF0aXplYCBhbGxvd3MgZm9yIGN1c3RvbWl6aW5nCiAgICAgKiBmZWF0dXJlcyBvZiB0aGUgZ2VuZXJhdGVkIHRlbXBsYXRlIGNsYXNzLCBpbmNsdWRpbmcgaG93IG91dGVyLXNjb3BlIGhvc3QKICAgICAqIHByb3BlcnRpZXMgc2hvdWxkIGJlIGZvcndhcmRlZCBpbnRvIHRlbXBsYXRlIGluc3RhbmNlcywgaG93IGFueSBpbnN0YW5jZQogICAgICogcHJvcGVydGllcyBhZGRlZCBpbnRvIHRoZSB0ZW1wbGF0ZSdzIHNjb3BlIHNob3VsZCBiZSBub3RpZmllZCBvdXQgdG8KICAgICAqIHRoZSBob3N0LCBhbmQgd2hldGhlciB0aGUgaW5zdGFuY2Ugc2hvdWxkIGJlIGRlY29yYXRlZCBhcyBhICJwYXJlbnQgbW9kZWwiCiAgICAgKiBvZiBhbnkgZXZlbnQgaGFuZGxlcnMuCiAgICAgKgogICAgICogICAgIC8vIEN1c3RvbWl6ZSBwcm9wZXJ0eSBmb3J3YXJkaW5nIGFuZCBldmVudCBtb2RlbCBkZWNvcmF0aW9uCiAgICAgKiAgICAgbGV0IFRlbXBsYXRlQ2xhc3MgPSBQb2x5bWVyLlRlbXBsYXRpemUudGVtcGxhdGl6ZSh0ZW1wbGF0ZSwgdGhpcywgewogICAgICogICAgICAgcGFyZW50TW9kZWw6IHRydWUsCiAgICAgKiAgICAgICBmb3J3YXJkSG9zdFByb3AocHJvcGVydHksIHZhbHVlKSB7Li4ufSwKICAgICAqICAgICAgIGluc3RhbmNlUHJvcHM6IHsuLi59LAogICAgICogICAgICAgbm90aWZ5SW5zdGFuY2VQcm9wKGluc3RhbmNlLCBwcm9wZXJ0eSwgdmFsdWUpIHsuLi59LAogICAgICogICAgIH0pOwogICAgICoKICAgICAqIEBuYW1lc3BhY2UKICAgICAqIEBtZW1iZXJvZiBQb2x5bWVyCiAgICAgKiBAc3VtbWFyeSBNb2R1bGUgZm9yIHByZXBhcmluZyBhbmQgc3RhbXBpbmcgaW5zdGFuY2VzIG9mIHRlbXBsYXRlcwogICAgICogICB1dGlsaXppbmcgUG9seW1lciB0ZW1wbGF0aW5nIGZlYXR1cmVzLgogICAgICovCiAgICBQb2x5bWVyLlRlbXBsYXRpemUgPSB7CgogICAgICAvKioKICAgICAgICogUmV0dXJucyBhbiBhbm9ueW1vdXMgYFBvbHltZXIuUHJvcGVydHlFZmZlY3RzYCBjbGFzcyBib3VuZCB0byB0aGUKICAgICAgICogYDx0ZW1wbGF0ZT5gIHByb3ZpZGVkLiAgSW5zdGFuY2luZyB0aGUgY2xhc3Mgd2lsbCByZXN1bHQgaW4gdGhlCiAgICAgICAqIHRlbXBsYXRlIGJlaW5nIHN0YW1wZWQgaW50byBhIGRvY3VtZW50IGZyYWdtZW50IHN0b3JlZCBhcyB0aGUgaW5zdGFuY2UncwogICAgICAgKiBgcm9vdGAgcHJvcGVydHksIGFmdGVyIHdoaWNoIGl0IGNhbiBiZSBhcHBlbmRlZCB0byB0aGUgRE9NLgogICAgICAgKgogICAgICAgKiBUZW1wbGF0ZXMgbWF5IHV0aWxpemUgYWxsIFBvbHltZXIgZGF0YS1iaW5kaW5nIGZlYXR1cmVzIGFzIHdlbGwgYXMKICAgICAgICogZGVjbGFyYXRpdmUgZXZlbnQgbGlzdGVuZXJzLiAgRXZlbnQgbGlzdGVuZXJzIGFuZCBpbmxpbmUgY29tcHV0aW5nCiAgICAgICAqIGZ1bmN0aW9ucyBpbiB0aGUgdGVtcGxhdGUgd2lsbCBiZSBjYWxsZWQgb24gdGhlIGhvc3Qgb2YgdGhlIHRlbXBsYXRlLgogICAgICAgKgogICAgICAgKiBUaGUgY29uc3RydWN0b3IgcmV0dXJuZWQgdGFrZXMgYSBzaW5nbGUgYXJndW1lbnQgZGljdGlvbmFyeSBvZiBpbml0aWFsCiAgICAgICAqIHByb3BlcnR5IHZhbHVlcyB0byBwcm9wYWdhdGUgaW50byB0ZW1wbGF0ZSBiaW5kaW5ncy4gIEFkZGl0aW9uYWxseQogICAgICAgKiBob3N0IHByb3BlcnRpZXMgY2FuIGJlIGZvcndhcmRlZCBpbiwgYW5kIGluc3RhbmNlIHByb3BlcnRpZXMgY2FuIGJlCiAgICAgICAqIG5vdGlmaWVkIG91dCBieSBwcm92aWRpbmcgb3B0aW9uYWwgY2FsbGJhY2tzIGluIHRoZSBgb3B0aW9uc2AgZGljdGlvbmFyeS4KICAgICAgICoKICAgICAgICogVmFsaWQgY29uZmlndXJhdGlvbiBpbiBgb3B0aW9uc2AgYXJlIGFzIGZvbGxvd3M6CiAgICAgICAqCiAgICAgICAqIC0gYGZvcndhcmRIb3N0UHJvcChwcm9wZXJ0eSwgdmFsdWUpYDogQ2FsbGVkIHdoZW4gYSBwcm9wZXJ0eSByZWZlcmVuY2VkCiAgICAgICAqICAgaW4gdGhlIHRlbXBsYXRlIGNoYW5nZWQgb24gdGhlIHRlbXBsYXRlJ3MgaG9zdC4gQXMgdGhpcyBsaWJyYXJ5IGRvZXMKICAgICAgICogICBub3QgcmV0YWluIHJlZmVyZW5jZXMgdG8gdGVtcGxhdGVzIGluc3RhbmNlZCBieSB0aGUgdXNlciwgaXQgaXMgdGhlCiAgICAgICAqICAgdGVtcGxhdGl6ZSBvd25lcidzIHJlc3BvbnNpYmlsaXR5IHRvIGZvcndhcmQgaG9zdCBwcm9wZXJ0eSBjaGFuZ2VzIGludG8KICAgICAgICogICB1c2VyLXN0YW1wZWQgaW5zdGFuY2VzLiAgVGhlIGBpbnN0YW5jZS5mb3J3YXJkSG9zdFByb3AocHJvcGVydHksIHZhbHVlKWAKICAgICAgICogICAgbWV0aG9kIG9uIHRoZSBnZW5lcmF0ZWQgY2xhc3Mgc2hvdWxkIGJlIGNhbGxlZCB0byBmb3J3YXJkIGhvc3QKICAgICAgICogICBwcm9wZXJ0aWVzIGludG8gdGhlIHRlbXBsYXRlIHRvIHByZXZlbnQgdW5uZWNlc3NhcnkgcHJvcGVydHktY2hhbmdlZAogICAgICAgKiAgIG5vdGlmaWNhdGlvbnMuIEFueSBwcm9wZXJ0aWVzIHJlZmVyZW5jZWQgaW4gdGhlIHRlbXBsYXRlIHRoYXQgYXJlIG5vdAogICAgICAgKiAgIGRlZmluZWQgaW4gYGluc3RhbmNlUHJvcHNgIHdpbGwgYmUgbm90aWZpZWQgdXAgdG8gdGhlIHRlbXBsYXRlJ3MgaG9zdAogICAgICAgKiAgIGF1dG9tYXRpY2FsbHkuCiAgICAgICAqIC0gYGluc3RhbmNlUHJvcHNgOiBEaWN0aW9uYXJ5IG9mIHByb3BlcnR5IG5hbWVzIHRoYXQgd2lsbCBiZSBhZGRlZAogICAgICAgKiAgIHRvIHRoZSBpbnN0YW5jZSBieSB0aGUgdGVtcGxhdGl6ZSBvd25lci4gIFRoZXNlIHByb3BlcnRpZXMgc2hhZG93IGFueQogICAgICAgKiAgIGhvc3QgcHJvcGVydGllcywgYW5kIGNoYW5nZXMgd2l0aGluIHRoZSB0ZW1wbGF0ZSB0byB0aGVzZSBwcm9wZXJ0aWVzCiAgICAgICAqICAgd2lsbCByZXN1bHQgaW4gYG5vdGlmeUluc3RhbmNlUHJvcGAgYmVpbmcgY2FsbGVkLgogICAgICAgKiAtIGBtdXRhYmxlRGF0YWA6IFdoZW4gYHRydWVgLCB0aGUgZ2VuZXJhdGVkIGNsYXNzIHdpbGwgc2tpcCBzdHJpY3QKICAgICAgICogICBkaXJ0eS1jaGVja2luZyBmb3Igb2JqZWN0cyBhbmQgYXJyYXlzIChhbHdheXMgY29uc2lkZXIgdGhlbSB0byBiZQogICAgICAgKiAgICJkaXJ0eSIpLgogICAgICAgKiAtIGBub3RpZnlJbnN0YW5jZVByb3AoaW5zdGFuY2UsIHByb3BlcnR5LCB2YWx1ZSlgOiBDYWxsZWQgd2hlbgogICAgICAgKiAgIGFuIGluc3RhbmNlIHByb3BlcnR5IGNoYW5nZXMuICBVc2VycyBtYXkgY2hvb3NlIHRvIGNhbGwgYG5vdGlmeVBhdGhgCiAgICAgICAqICAgb24gZS5nLiB0aGUgb3duZXIgdG8gbm90aWZ5IHRoZSBjaGFuZ2UuCiAgICAgICAqIC0gYHBhcmVudE1vZGVsYDogV2hlbiBgdHJ1ZWAsIGV2ZW50cyBoYW5kbGVkIGJ5IGRlY2xhcmF0aXZlIGV2ZW50IGxpc3RlbmVycwogICAgICAgKiAgIChgb24tZXZlbnQ9ImhhbmRsZXIiYCkgd2lsbCBiZSBkZWNvcmF0ZWQgd2l0aCBhIGBtb2RlbGAgcHJvcGVydHkgcG9pbnRpbmcKICAgICAgICogICB0byB0aGUgdGVtcGxhdGUgaW5zdGFuY2UgdGhhdCBzdGFtcGVkIGl0LiAgSXQgd2lsbCBhbHNvIGJlIHJldHVybmVkCiAgICAgICAqICAgZnJvbSBgaW5zdGFuY2UucGFyZW50TW9kZWxgIGluIGNhc2VzIHdoZXJlIHRlbXBsYXRlIGluc3RhbmNlIG5lc3RpbmcKICAgICAgICogICBjYXVzZXMgYW4gaW5uZXIgbW9kZWwgdG8gc2hhZG93IGFuIG91dGVyIG1vZGVsLgogICAgICAgKgogICAgICAgKiBBbGwgY2FsbGJhY2tzIGFyZSBjYWxsZWQgYm91bmQgdG8gdGhlIGBvd25lcmAuIEFueSBjb250ZXh0CiAgICAgICAqIG5lZWRlZCBmb3IgdGhlIGNhbGxiYWNrcyAoc3VjaCBhcyByZWZlcmVuY2VzIHRvIGBpbnN0YW5jZXNgIHN0YW1wZWQpCiAgICAgICAqIHNob3VsZCBiZSBzdG9yZWQgb24gdGhlIGBvd25lcmAgc3VjaCB0aGF0IHRoZXkgY2FuIGJlIHJldHJpZXZlZCB2aWEKICAgICAgICogYHRoaXNgLgogICAgICAgKgogICAgICAgKiBXaGVuIGBvcHRpb25zLmZvcndhcmRIb3N0UHJvcGAgaXMgZGVjbGFyZWQgYXMgYW4gb3B0aW9uLCBhbnkgcHJvcGVydGllcwogICAgICAgKiByZWZlcmVuY2VkIGluIHRoZSB0ZW1wbGF0ZSB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgZm9yd2FyZGVkIGZyb20gdGhlIGhvc3Qgb2YKICAgICAgICogdGhlIGA8dGVtcGxhdGU+YCB0byBpbnN0YW5jZXMsIHdpdGggdGhlIGV4Y2VwdGlvbiBvZiBhbnkgcHJvcGVydGllcyBsaXN0ZWQgaW4KICAgICAgICogdGhlIGBvcHRpb25zLmluc3RhbmNlUHJvcHNgIG9iamVjdC4gIGBpbnN0YW5jZVByb3BzYCBhcmUgYXNzdW1lZCB0byBiZQogICAgICAgKiBtYW5hZ2VkIGJ5IHRoZSBvd25lciBvZiB0aGUgaW5zdGFuY2VzLCBlaXRoZXIgcGFzc2VkIGludG8gdGhlIGNvbnN0cnVjdG9yCiAgICAgICAqIG9yIHNldCBhZnRlciB0aGUgZmFjdC4gIE5vdGUsIGFueSBwcm9wZXJ0aWVzIHBhc3NlZCBpbnRvIHRoZSBjb25zdHJ1Y3RvciB3aWxsCiAgICAgICAqIGFsd2F5cyBiZSBzZXQgdG8gdGhlIGluc3RhbmNlIChyZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhleSB3b3VsZCBub3JtYWxseQogICAgICAgKiBiZSBmb3J3YXJkZWQgZnJvbSB0aGUgaG9zdCkuCiAgICAgICAqCiAgICAgICAqIE5vdGUgdGhhdCBgdGVtcGxhdGl6ZSgpYCBjYW4gYmUgcnVuIG9ubHkgb25jZSBmb3IgYSBnaXZlbiBgPHRlbXBsYXRlPmAuCiAgICAgICAqIEZ1cnRoZXIgY2FsbHMgd2lsbCByZXN1bHQgaW4gYW4gZXJyb3IuIEFsc28sIHRoZXJlIGlzIGEgc3BlY2lhbAogICAgICAgKiBiZWhhdmlvciBpZiB0aGUgdGVtcGxhdGUgd2FzIGR1cGxpY2F0ZWQgdGhyb3VnaCBhIG1lY2hhbmlzbSBzdWNoIGFzCiAgICAgICAqIGA8ZG9tLXJlcGVhdD5gIG9yIGA8dGVzdC1maXh0dXJlPmAuIEluIHRoaXMgY2FzZSwgYWxsIGNhbGxzIHRvCiAgICAgICAqIGB0ZW1wbGF0aXplKClgIHJldHVybiB0aGUgc2FtZSBjbGFzcyBmb3IgYWxsIGR1cGxpY2F0ZXMgb2YgYSB0ZW1wbGF0ZS4KICAgICAgICogVGhlIGNsYXNzIHJldHVybmVkIGZyb20gYHRlbXBsYXRpemUoKWAgaXMgZ2VuZXJhdGVkIG9ubHkgb25jZSB1c2luZwogICAgICAgKiB0aGUgYG9wdGlvbnNgIGZyb20gdGhlIGZpcnN0IGNhbGwuIFRoaXMgbWVhbnMgdGhhdCBhbnkgYG9wdGlvbnNgCiAgICAgICAqIHByb3ZpZGVkIHRvIHN1YnNlcXVlbnQgY2FsbHMgd2lsbCBiZSBpZ25vcmVkLiBUaGVyZWZvcmUsIGl0IGlzIHZlcnkKICAgICAgICogaW1wb3J0YW50IG5vdCB0byBjbG9zZSBvdmVyIGFueSB2YXJpYWJsZXMgaW5zaWRlIHRoZSBjYWxsYmFja3MuIEFsc28sCiAgICAgICAqIGFycm93IGZ1bmN0aW9ucyBtdXN0IGJlIGF2b2lkZWQgYmVjYXVzZSB0aGV5IGJpbmQgdGhlIG91dGVyIGB0aGlzYC4KICAgICAgICogSW5zaWRlIHRoZSBjYWxsYmFja3MsIGFueSBjb250ZXh0dWFsIGluZm9ybWF0aW9uIGNhbiBiZSBhY2Nlc3NlZAogICAgICAgKiB0aHJvdWdoIGB0aGlzYCwgd2hpY2ggcG9pbnRzIHRvIHRoZSBgb3duZXJgLgogICAgICAgKgogICAgICAgKiBAbWVtYmVyb2YgUG9seW1lci5UZW1wbGF0aXplCiAgICAgICAqIEBwYXJhbSB7IUhUTUxUZW1wbGF0ZUVsZW1lbnR9IHRlbXBsYXRlIFRlbXBsYXRlIHRvIHRlbXBsYXRpemUKICAgICAgICogQHBhcmFtIHtQb2x5bWVyX1Byb3BlcnR5RWZmZWN0cz19IG93bmVyIE93bmVyIG9mIHRoZSB0ZW1wbGF0ZSBpbnN0YW5jZXM7CiAgICAgICAqICAgYW55IG9wdGlvbmFsIGNhbGxiYWNrcyB3aWxsIGJlIGJvdW5kIHRvIHRoaXMgb3duZXIuCiAgICAgICAqIEBwYXJhbSB7T2JqZWN0PX0gb3B0aW9ucyBPcHRpb25zIGRpY3Rpb25hcnkgKHNlZSBzdW1tYXJ5IGZvciBkZXRhaWxzKQogICAgICAgKiBAcmV0dXJuIHtmdW5jdGlvbihuZXc6VGVtcGxhdGVJbnN0YW5jZUJhc2UpfSBHZW5lcmF0ZWQgY2xhc3MgYm91bmQgdG8gdGhlIHRlbXBsYXRlCiAgICAgICAqICAgcHJvdmlkZWQKICAgICAgICogQHN1cHByZXNzIHtpbnZhbGlkQ2FzdHN9CiAgICAgICAqLwogICAgICB0ZW1wbGF0aXplKHRlbXBsYXRlLCBvd25lciwgb3B0aW9ucykgewogICAgICAgIC8vIFVuZGVyIHN0cmljdFRlbXBsYXRlUG9saWN5LCB0aGUgdGVtcGxhdGl6ZWQgZWxlbWVudCBtdXN0IGJlIG93bmVkCiAgICAgICAgLy8gYnkgYSAodHJ1c3RlZCkgUG9seW1lciBlbGVtZW50LCBpbmRpY2F0ZWQgYnkgZXhpc3RlbmNlIG9mIF9tZXRob2RIb3N0OwogICAgICAgIC8vIGUuZy4gZm9yIGRvbS1pZiAmIGRvbS1yZXBlYXQgaW4gbWFpbiBkb2N1bWVudCwgX21ldGhvZEhvc3QgaXMgbnVsbAogICAgICAgIGlmIChQb2x5bWVyLnN0cmljdFRlbXBsYXRlUG9saWN5ICYmICFmaW5kTWV0aG9kSG9zdCh0ZW1wbGF0ZSkpIHsKICAgICAgICAgIHRocm93IG5ldyBFcnJvcignc3RyaWN0VGVtcGxhdGVQb2xpY3k6IHRlbXBsYXRlIG93bmVyIG5vdCB0cnVzdGVkJyk7CiAgICAgICAgfQogICAgICAgIG9wdGlvbnMgPSAvKiogQHR5cGUgeyFUZW1wbGF0aXplT3B0aW9uc30gKi8ob3B0aW9ucyB8fCB7fSk7CiAgICAgICAgaWYgKHRlbXBsYXRlLl9fdGVtcGxhdGl6ZU93bmVyKSB7CiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0EgPHRlbXBsYXRlPiBjYW4gb25seSBiZSB0ZW1wbGF0aXplZCBvbmNlJyk7CiAgICAgICAgfQogICAgICAgIHRlbXBsYXRlLl9fdGVtcGxhdGl6ZU93bmVyID0gb3duZXI7CiAgICAgICAgY29uc3QgY3RvciA9IG93bmVyID8gb3duZXIuY29uc3RydWN0b3IgOiBUZW1wbGF0ZUluc3RhbmNlQmFzZTsKICAgICAgICBsZXQgdGVtcGxhdGVJbmZvID0gY3Rvci5fcGFyc2VUZW1wbGF0ZSh0ZW1wbGF0ZSk7CiAgICAgICAgLy8gR2V0IG1lbW9pemVkIGJhc2UgY2xhc3MgZm9yIHRoZSBwcm90b3R5cGljYWwgdGVtcGxhdGUsIHdoaWNoCiAgICAgICAgLy8gaW5jbHVkZXMgcHJvcGVydHkgZWZmZWN0cyBmb3IgYmluZGluZyB0ZW1wbGF0ZSAmIGZvcndhcmRpbmcKICAgICAgICBsZXQgYmFzZUNsYXNzID0gdGVtcGxhdGVJbmZvLnRlbXBsYXRpemVJbnN0YW5jZUNsYXNzOwogICAgICAgIGlmICghYmFzZUNsYXNzKSB7CiAgICAgICAgICBiYXNlQ2xhc3MgPSBjcmVhdGVUZW1wbGF0aXplckNsYXNzKHRlbXBsYXRlLCB0ZW1wbGF0ZUluZm8sIG9wdGlvbnMpOwogICAgICAgICAgdGVtcGxhdGVJbmZvLnRlbXBsYXRpemVJbnN0YW5jZUNsYXNzID0gYmFzZUNsYXNzOwogICAgICAgIH0KICAgICAgICAvLyBIb3N0IHByb3BlcnR5IGZvcndhcmRpbmcgbXVzdCBiZSBpbnN0YWxsZWQgb250byB0ZW1wbGF0ZSBpbnN0YW5jZQogICAgICAgIGFkZFByb3BhZ2F0ZUVmZmVjdHModGVtcGxhdGUsIHRlbXBsYXRlSW5mbywgb3B0aW9ucyk7CiAgICAgICAgLy8gU3ViY2xhc3MgYmFzZSBjbGFzcyBhbmQgYWRkIHJlZmVyZW5jZSBmb3IgdGhpcyBzcGVjaWZpYyB0ZW1wbGF0ZQogICAgICAgIC8qKiBAcHJpdmF0ZSAqLwogICAgICAgIGxldCBrbGFzcyA9IGNsYXNzIFRlbXBsYXRlSW5zdGFuY2UgZXh0ZW5kcyBiYXNlQ2xhc3Mge307CiAgICAgICAga2xhc3MucHJvdG90eXBlLl9tZXRob2RIb3N0ID0gZmluZE1ldGhvZEhvc3QodGVtcGxhdGUpOwogICAgICAgIGtsYXNzLnByb3RvdHlwZS5fX2RhdGFIb3N0ID0gdGVtcGxhdGU7CiAgICAgICAga2xhc3MucHJvdG90eXBlLl9fdGVtcGxhdGl6ZU93bmVyID0gb3duZXI7CiAgICAgICAga2xhc3MucHJvdG90eXBlLl9faG9zdFByb3BzID0gdGVtcGxhdGVJbmZvLmhvc3RQcm9wczsKICAgICAgICBrbGFzcyA9IC8qKiBAdHlwZSB7ZnVuY3Rpb24obmV3OlRlbXBsYXRlSW5zdGFuY2VCYXNlKX0gKi8oa2xhc3MpOyAvL2VzbGludC1kaXNhYmxlLWxpbmUgbm8tc2VsZi1hc3NpZ24KICAgICAgICByZXR1cm4ga2xhc3M7CiAgICAgIH0sCgogICAgICAvKioKICAgICAgICogUmV0dXJucyB0aGUgdGVtcGxhdGUgIm1vZGVsIiBhc3NvY2lhdGVkIHdpdGggYSBnaXZlbiBlbGVtZW50LCB3aGljaAogICAgICAgKiBzZXJ2ZXMgYXMgdGhlIGJpbmRpbmcgc2NvcGUgZm9yIHRoZSB0ZW1wbGF0ZSBpbnN0YW5jZSB0aGUgZWxlbWVudCBpcwogICAgICAgKiBjb250YWluZWQgaW4uIEEgdGVtcGxhdGUgbW9kZWwgaXMgYW4gaW5zdGFuY2Ugb2YKICAgICAgICogYFRlbXBsYXRlSW5zdGFuY2VCYXNlYCwgYW5kIHNob3VsZCBiZSB1c2VkIHRvIG1hbmlwdWxhdGUgZGF0YQogICAgICAgKiBhc3NvY2lhdGVkIHdpdGggdGhpcyB0ZW1wbGF0ZSBpbnN0YW5jZS4KICAgICAgICoKICAgICAgICogRXhhbXBsZToKICAgICAgICoKICAgICAgICogICBsZXQgbW9kZWwgPSBtb2RlbEZvckVsZW1lbnQoZWwpOwogICAgICAgKiAgIGlmIChtb2RlbC5pbmRleCA8IDEwKSB7CiAgICAgICAqICAgICBtb2RlbC5zZXQoJ2l0ZW0uY2hlY2tlZCcsIHRydWUpOwogICAgICAgKiAgIH0KICAgICAgICoKICAgICAgICogQG1lbWJlcm9mIFBvbHltZXIuVGVtcGxhdGl6ZQogICAgICAgKiBAcGFyYW0ge0hUTUxUZW1wbGF0ZUVsZW1lbnR9IHRlbXBsYXRlIFRoZSBtb2RlbCB3aWxsIGJlIHJldHVybmVkIGZvcgogICAgICAgKiAgIGVsZW1lbnRzIHN0YW1wZWQgZnJvbSB0aGlzIHRlbXBsYXRlCiAgICAgICAqIEBwYXJhbSB7Tm9kZT19IG5vZGUgTm9kZSBmb3Igd2hpY2ggdG8gcmV0dXJuIGEgdGVtcGxhdGUgbW9kZWwuCiAgICAgICAqIEByZXR1cm4ge1RlbXBsYXRlSW5zdGFuY2VCYXNlfSBUZW1wbGF0ZSBpbnN0YW5jZSByZXByZXNlbnRpbmcgdGhlCiAgICAgICAqICAgYmluZGluZyBzY29wZSBmb3IgdGhlIGVsZW1lbnQKICAgICAgICovCiAgICAgIG1vZGVsRm9yRWxlbWVudCh0ZW1wbGF0ZSwgbm9kZSkgewogICAgICAgIGxldCBtb2RlbDsKICAgICAgICB3aGlsZSAobm9kZSkgewogICAgICAgICAgLy8gQW4gZWxlbWVudCB3aXRoIGEgX190ZW1wbGF0aXplSW5zdGFuY2UgbWFya3MgdGhlIHRvcCBib3VuZGFyeQogICAgICAgICAgLy8gb2YgYSBzY29wZTsgd2FsayB1cCB1bnRpbCB3ZSBmaW5kIG9uZSwgYW5kIHRoZW4gZW5zdXJlIHRoYXQKICAgICAgICAgIC8vIGl0cyBfX2RhdGFIb3N0IG1hdGNoZXMgYHRoaXNgLCBtZWFuaW5nIHRoaXMgZG9tLXJlcGVhdCBzdGFtcGVkIGl0CiAgICAgICAgICBpZiAoKG1vZGVsID0gbm9kZS5fX3RlbXBsYXRpemVJbnN0YW5jZSkpIHsKICAgICAgICAgICAgLy8gRm91bmQgYW4gZWxlbWVudCBzdGFtcGVkIGJ5IGFub3RoZXIgdGVtcGxhdGU7IGtlZXAgd2Fsa2luZyB1cAogICAgICAgICAgICAvLyBmcm9tIGl0cyBfX2RhdGFIb3N0CiAgICAgICAgICAgIGlmIChtb2RlbC5fX2RhdGFIb3N0ICE9IHRlbXBsYXRlKSB7CiAgICAgICAgICAgICAgbm9kZSA9IG1vZGVsLl9fZGF0YUhvc3Q7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgcmV0dXJuIG1vZGVsOwogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAvLyBTdGlsbCBpbiBhIHRlbXBsYXRlIHNjb3BlLCBrZWVwIGdvaW5nIHVwIHVudGlsCiAgICAgICAgICAgIC8vIGEgX190ZW1wbGF0aXplSW5zdGFuY2UgaXMgZm91bmQKICAgICAgICAgICAgbm9kZSA9IG5vZGUucGFyZW50Tm9kZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgIH07CgogICAgUG9seW1lci5UZW1wbGF0ZUluc3RhbmNlQmFzZSA9IFRlbXBsYXRlSW5zdGFuY2VCYXNlOwoKICB9KSgpOwoKPC9zY3JpcHQ+PHNjcmlwdD4KICAoZnVuY3Rpb24oKSB7CiAgICAndXNlIHN0cmljdCc7CgogICAgbGV0IFRlbXBsYXRlSW5zdGFuY2VCYXNlID0gUG9seW1lci5UZW1wbGF0ZUluc3RhbmNlQmFzZTsgLy8gZXNsaW50LWRpc2FibGUtbGluZQoKICAgIC8qKgogICAgICogQHR5cGVkZWYge3sKICAgICAqICAgX3RlbXBsYXRpemVyVGVtcGxhdGU6IEhUTUxUZW1wbGF0ZUVsZW1lbnQsCiAgICAgKiAgIF9wYXJlbnRNb2RlbDogYm9vbGVhbiwKICAgICAqICAgX2luc3RhbmNlUHJvcHM6IE9iamVjdCwKICAgICAqICAgX2ZvcndhcmRIb3N0UHJvcFYyOiBGdW5jdGlvbiwKICAgICAqICAgX25vdGlmeUluc3RhbmNlUHJvcFYyOiBGdW5jdGlvbiwKICAgICAqICAgY3RvcjogVGVtcGxhdGVJbnN0YW5jZUJhc2UKICAgICAqIH19CiAgICAgKi8KICAgIGxldCBUZW1wbGF0aXplclVzZXI7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUKCiAgICAvKioKICAgICAqIFRoZSBgUG9seW1lci5UZW1wbGF0aXplcmAgYmVoYXZpb3IgYWRkcyBtZXRob2RzIHRvIGdlbmVyYXRlIGluc3RhbmNlcyBvZgogICAgICogdGVtcGxhdGVzIHRoYXQgYXJlIGVhY2ggbWFuYWdlZCBieSBhbiBhbm9ueW1vdXMgYFBvbHltZXIuUHJvcGVydHlFZmZlY3RzYAogICAgICogaW5zdGFuY2Ugd2hlcmUgZGF0YS1iaW5kaW5ncyBpbiB0aGUgc3RhbXBlZCB0ZW1wbGF0ZSBjb250ZW50IGFyZSBib3VuZCB0bwogICAgICogYWNjZXNzb3JzIG9uIGl0c2VsZi4KICAgICAqCiAgICAgKiBUaGlzIGJlaGF2aW9yIGlzIHByb3ZpZGVkIGluIFBvbHltZXIgMi54IGFzIGEgaHlicmlkLWVsZW1lbnQgY29udmVuaWVuY2UKICAgICAqIG9ubHkuICBGb3Igbm9uLWh5YnJpZCB1c2FnZSwgdGhlIGBQb2x5bWVyLlRlbXBsYXRpemVgIGxpYnJhcnkKICAgICAqIHNob3VsZCBiZSB1c2VkIGluc3RlYWQuCiAgICAgKgogICAgICogRXhhbXBsZToKICAgICAqCiAgICAgKiAgICAgLy8gR2V0IGEgdGVtcGxhdGUgZnJvbSBzb21ld2hlcmUsIGUuZy4gbGlnaHQgRE9NCiAgICAgKiAgICAgbGV0IHRlbXBsYXRlID0gdGhpcy5xdWVyeVNlbGVjdG9yKCd0ZW1wbGF0ZScpOwogICAgICogICAgIC8vIFByZXBhcmUgdGhlIHRlbXBsYXRlCiAgICAgKiAgICAgdGhpcy50ZW1wbGF0aXplKHRlbXBsYXRlKTsKICAgICAqICAgICAvLyBJbnN0YW5jZSB0aGUgdGVtcGxhdGUgd2l0aCBhbiBpbml0aWFsIGRhdGEgbW9kZWwKICAgICAqICAgICBsZXQgaW5zdGFuY2UgPSB0aGlzLnN0YW1wKHtteVByb3A6ICdpbml0aWFsJ30pOwogICAgICogICAgIC8vIEluc2VydCB0aGUgaW5zdGFuY2UncyBET00gc29tZXdoZXJlLCBlLmcuIGxpZ2h0IERPTQogICAgICogICAgIFBvbHltZXIuZG9tKHRoaXMpLmFwcGVuZENoaWxkKGluc3RhbmNlLnJvb3QpOwogICAgICogICAgIC8vIENoYW5naW5nIGEgcHJvcGVydHkgb24gdGhlIGluc3RhbmNlIHdpbGwgcHJvcGFnYXRlIHRvIGJpbmRpbmdzCiAgICAgKiAgICAgLy8gaW4gdGhlIHRlbXBsYXRlCiAgICAgKiAgICAgaW5zdGFuY2UubXlQcm9wID0gJ25ldyB2YWx1ZSc7CiAgICAgKgogICAgICogVXNlcnMgb2YgYFRlbXBsYXRpemVyYCBtYXkgbmVlZCB0byBpbXBsZW1lbnQgdGhlIGZvbGxvd2luZyBhYnN0cmFjdAogICAgICogQVBJJ3MgdG8gZGV0ZXJtaW5lIGhvdyBwcm9wZXJ0aWVzIGFuZCBwYXRocyBmcm9tIHRoZSBob3N0IHNob3VsZCBiZQogICAgICogZm9yd2FyZGVkIGludG8gdG8gaW5zdGFuY2VzOgogICAgICoKICAgICAqICAgICBfZm9yd2FyZEhvc3RQcm9wVjI6IGZ1bmN0aW9uKHByb3AsIHZhbHVlKQogICAgICoKICAgICAqIExpa2V3aXNlLCB1c2VycyBtYXkgaW1wbGVtZW50IHRoZXNlIGFkZGl0aW9uYWwgYWJzdHJhY3QgQVBJJ3MgdG8gZGV0ZXJtaW5lCiAgICAgKiBob3cgaW5zdGFuY2Utc3BlY2lmaWMgcHJvcGVydGllcyB0aGF0IGNoYW5nZSBvbiB0aGUgaW5zdGFuY2Ugc2hvdWxkIGJlCiAgICAgKiBmb3J3YXJkZWQgb3V0IHRvIHRoZSBob3N0LCBpZiBuZWNlc3NhcnkuCiAgICAgKgogICAgICogICAgIF9ub3RpZnlJbnN0YW5jZVByb3BWMjogZnVuY3Rpb24oaW5zdCwgcHJvcCwgdmFsdWUpCiAgICAgKgogICAgICogSW4gb3JkZXIgdG8gZGV0ZXJtaW5lIHdoaWNoIHByb3BlcnRpZXMgYXJlIGluc3RhbmNlLXNwZWNpZmljIGFuZCByZXF1aXJlCiAgICAgKiBjdXN0b20gbm90aWZpY2F0aW9uIHZpYSBgX25vdGlmeUluc3RhbmNlUHJvcGAsIGRlZmluZSBhbiBgX2luc3RhbmNlUHJvcHNgCiAgICAgKiBvYmplY3QgY29udGFpbmluZyBrZXlzIGZvciBlYWNoIGluc3RhbmNlIHByb3AsIGZvciBleGFtcGxlOgogICAgICoKICAgICAqICAgICBfaW5zdGFuY2VQcm9wczogewogICAgICogICAgICAgaXRlbTogdHJ1ZSwKICAgICAqICAgICAgIGluZGV4OiB0cnVlCiAgICAgKiAgICAgfQogICAgICoKICAgICAqIEFueSBwcm9wZXJ0aWVzIHVzZWQgaW4gdGhlIHRlbXBsYXRlIHRoYXQgYXJlIG5vdCBkZWZpbmVkIGluIF9pbnN0YW5jZVByb3AKICAgICAqIHdpbGwgYmUgZm9yd2FyZGVkIG91dCB0byB0aGUgVGVtcGxhdGl6ZSBgb3duZXJgIGF1dG9tYXRpY2FsbHkuCiAgICAgKgogICAgICogVXNlcnMgbWF5IGFsc28gaW1wbGVtZW50IHRoZSBmb2xsb3dpbmcgYWJzdHJhY3QgZnVuY3Rpb24gdG8gc2hvdyBvcgogICAgICogaGlkZSBhbnkgRE9NIGdlbmVyYXRlZCB1c2luZyBgc3RhbXBgOgogICAgICoKICAgICAqICAgICBfc2hvd0hpZGVDaGlsZHJlbjogZnVuY3Rpb24oc2hvdWxkSGlkZSkKICAgICAqCiAgICAgKiBOb3RlIHRoYXQgc29tZSBjYWxsYmFja3MgYXJlIHN1ZmZpeGVkIHdpdGggYFYyYCBpbiB0aGUgUG9seW1lciAyLnggYmVoYXZpb3IKICAgICAqIGFzIHRoZSBpbXBsZW1lbnRhdGlvbnMgd2lsbCBuZWVkIHRvIGRpZmZlciBmcm9tIHRoZSBjYWxsYmFja3MgcmVxdWlyZWQKICAgICAqIGJ5IHRoZSAxLnggVGVtcGxhdGl6ZXIgQVBJIGR1ZSB0byBjaGFuZ2VzIGluIHRoZSBgVGVtcGxhdGVJbnN0YW5jZWAgQVBJCiAgICAgKiBiZXR3ZWVuIHZlcnNpb25zIDEueCBhbmQgMi54LgogICAgICoKICAgICAqIEBwb2x5bWVyQmVoYXZpb3IKICAgICAqLwogICAgUG9seW1lci5UZW1wbGF0aXplciA9IHsKCiAgICAgIC8qKgogICAgICAgKiBHZW5lcmF0ZXMgYW4gYW5vbnltb3VzIGBUZW1wbGF0ZUluc3RhbmNlYCBjbGFzcyAoc3RvcmVkIGFzIGB0aGlzLmN0b3JgKQogICAgICAgKiBmb3IgdGhlIHByb3ZpZGVkIHRlbXBsYXRlLiAgVGhpcyBtZXRob2Qgc2hvdWxkIGJlIGNhbGxlZCBvbmNlIHBlcgogICAgICAgKiB0ZW1wbGF0ZSB0byBwcmVwYXJlIGFuIGVsZW1lbnQgZm9yIHN0YW1waW5nIHRoZSB0ZW1wbGF0ZSwgZm9sbG93ZWQKICAgICAgICogYnkgYHN0YW1wYCB0byBjcmVhdGUgbmV3IGluc3RhbmNlcyBvZiB0aGUgdGVtcGxhdGUuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7IUhUTUxUZW1wbGF0ZUVsZW1lbnR9IHRlbXBsYXRlIFRlbXBsYXRlIHRvIHByZXBhcmUKICAgICAgICogQHBhcmFtIHtib29sZWFuPX0gbXV0YWJsZURhdGEgV2hlbiBgdHJ1ZWAsIHRoZSBnZW5lcmF0ZWQgY2xhc3Mgd2lsbCBza2lwCiAgICAgICAqICAgc3RyaWN0IGRpcnR5LWNoZWNraW5nIGZvciBvYmplY3RzIGFuZCBhcnJheXMgKGFsd2F5cyBjb25zaWRlciB0aGVtIHRvCiAgICAgICAqICAgYmUgImRpcnR5IikuIERlZmF1bHRzIHRvIGZhbHNlLgogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKiBAdGhpcyB7VGVtcGxhdGl6ZXJVc2VyfQogICAgICAgKi8KICAgICAgdGVtcGxhdGl6ZSh0ZW1wbGF0ZSwgbXV0YWJsZURhdGEpIHsKICAgICAgICB0aGlzLl90ZW1wbGF0aXplclRlbXBsYXRlID0gdGVtcGxhdGU7CiAgICAgICAgdGhpcy5jdG9yID0gUG9seW1lci5UZW1wbGF0aXplLnRlbXBsYXRpemUodGVtcGxhdGUsIHRoaXMsIHsKICAgICAgICAgIG11dGFibGVEYXRhOiBCb29sZWFuKG11dGFibGVEYXRhKSwKICAgICAgICAgIHBhcmVudE1vZGVsOiB0aGlzLl9wYXJlbnRNb2RlbCwKICAgICAgICAgIGluc3RhbmNlUHJvcHM6IHRoaXMuX2luc3RhbmNlUHJvcHMsCiAgICAgICAgICBmb3J3YXJkSG9zdFByb3A6IHRoaXMuX2ZvcndhcmRIb3N0UHJvcFYyLAogICAgICAgICAgbm90aWZ5SW5zdGFuY2VQcm9wOiB0aGlzLl9ub3RpZnlJbnN0YW5jZVByb3BWMgogICAgICAgIH0pOwogICAgICB9LAoKICAgICAgLyoqCiAgICAgICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIHRlbXBsYXRlIHByZXBhcmVkIGJ5IGB0ZW1wbGF0aXplYC4gIFRoZSBvYmplY3QKICAgICAgICogcmV0dXJuZWQgaXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGFub255bW91cyBjbGFzcyBnZW5lcmF0ZWQgYnkgYHRlbXBsYXRpemVgCiAgICAgICAqIHdob3NlIGByb290YCBwcm9wZXJ0eSBpcyBhIGRvY3VtZW50IGZyYWdtZW50IGNvbnRhaW5pbmcgbmV3bHkgY2xvbmVkCiAgICAgICAqIHRlbXBsYXRlIGNvbnRlbnQsIGFuZCB3aGljaCBoYXMgcHJvcGVydHkgYWNjZXNzb3JzIGNvcnJlc3BvbmRpbmcgdG8KICAgICAgICogcHJvcGVydGllcyByZWZlcmVuY2VkIGluIHRlbXBsYXRlIGJpbmRpbmdzLgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge09iamVjdD19IG1vZGVsIE9iamVjdCBjb250YWluaW5nIGluaXRpYWwgcHJvcGVydHkgdmFsdWVzIHRvCiAgICAgICAqICAgcG9wdWxhdGUgaW50byB0aGUgdGVtcGxhdGUgYmluZGluZ3MuCiAgICAgICAqIEByZXR1cm4ge1RlbXBsYXRlSW5zdGFuY2VCYXNlfSBSZXR1cm5zIHRoZSBjcmVhdGVkIGluc3RhbmNlIG9mCiAgICAgICAqIHRoZSB0ZW1wbGF0ZSBwcmVwYXJlZCBieSBgdGVtcGxhdGl6ZWAuCiAgICAgICAqIEB0aGlzIHtUZW1wbGF0aXplclVzZXJ9CiAgICAgICAqLwogICAgICBzdGFtcChtb2RlbCkgewogICAgICAgIHJldHVybiBuZXcgdGhpcy5jdG9yKG1vZGVsKTsKICAgICAgfSwKCiAgICAgIC8qKgogICAgICAgKiBSZXR1cm5zIHRoZSB0ZW1wbGF0ZSAibW9kZWwiIChgVGVtcGxhdGVJbnN0YW5jZWApIGFzc29jaWF0ZWQgd2l0aAogICAgICAgKiBhIGdpdmVuIGVsZW1lbnQsIHdoaWNoIHNlcnZlcyBhcyB0aGUgYmluZGluZyBzY29wZSBmb3IgdGhlIHRlbXBsYXRlCiAgICAgICAqIGluc3RhbmNlIHRoZSBlbGVtZW50IGlzIGNvbnRhaW5lZCBpbi4gIEEgdGVtcGxhdGUgbW9kZWwgc2hvdWxkIGJlIHVzZWQKICAgICAgICogdG8gbWFuaXB1bGF0ZSBkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHRlbXBsYXRlIGluc3RhbmNlLgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbCBFbGVtZW50IGZvciB3aGljaCB0byByZXR1cm4gYSB0ZW1wbGF0ZSBtb2RlbC4KICAgICAgICogQHJldHVybiB7VGVtcGxhdGVJbnN0YW5jZUJhc2V9IE1vZGVsIHJlcHJlc2VudGluZyB0aGUgYmluZGluZyBzY29wZSBmb3IKICAgICAgICogICB0aGUgZWxlbWVudC4KICAgICAgICogQHRoaXMge1RlbXBsYXRpemVyVXNlcn0KICAgICAgICovCiAgICAgIG1vZGVsRm9yRWxlbWVudChlbCkgewogICAgICAgIHJldHVybiBQb2x5bWVyLlRlbXBsYXRpemUubW9kZWxGb3JFbGVtZW50KHRoaXMuX3RlbXBsYXRpemVyVGVtcGxhdGUsIGVsKTsKICAgICAgfQogICAgfTsKCiAgfSkoKTsKPC9zY3JpcHQ+PHNjcmlwdD4KCiAgKGZ1bmN0aW9uKCkgewogICAgJ3VzZSBzdHJpY3QnOwoKICAgIC8qKgogICAgICogQGNvbnN0cnVjdG9yCiAgICAgKiBAZXh0ZW5kcyB7SFRNTEVsZW1lbnR9CiAgICAgKiBAaW1wbGVtZW50cyB7UG9seW1lcl9Qcm9wZXJ0eUVmZmVjdHN9CiAgICAgKiBAaW1wbGVtZW50cyB7UG9seW1lcl9PcHRpb25hbE11dGFibGVEYXRhfQogICAgICogQGltcGxlbWVudHMge1BvbHltZXJfR2VzdHVyZUV2ZW50TGlzdGVuZXJzfQogICAgICogQHByaXZhdGUKICAgICAqLwogICAgY29uc3QgZG9tQmluZEJhc2UgPQogICAgICBQb2x5bWVyLkdlc3R1cmVFdmVudExpc3RlbmVycygKICAgICAgICBQb2x5bWVyLk9wdGlvbmFsTXV0YWJsZURhdGEoCiAgICAgICAgICBQb2x5bWVyLlByb3BlcnR5RWZmZWN0cyhIVE1MRWxlbWVudCkpKTsKCiAgICAvKioKICAgICAqIEN1c3RvbSBlbGVtZW50IHRvIGFsbG93IHVzaW5nIFBvbHltZXIncyB0ZW1wbGF0ZSBmZWF0dXJlcyAoZGF0YSBiaW5kaW5nLAogICAgICogZGVjbGFyYXRpdmUgZXZlbnQgbGlzdGVuZXJzLCBldGMuKSBpbiB0aGUgbWFpbiBkb2N1bWVudCB3aXRob3V0IGRlZmluaW5nCiAgICAgKiBhIG5ldyBjdXN0b20gZWxlbWVudC4KICAgICAqCiAgICAgKiBgPHRlbXBsYXRlPmAgdGFncyB1dGlsaXppbmcgYmluZGluZ3MgbWF5IGJlIHdyYXBwZWQgd2l0aCB0aGUgYDxkb20tYmluZD5gCiAgICAgKiBlbGVtZW50LCB3aGljaCB3aWxsIGltbWVkaWF0ZWx5IHN0YW1wIHRoZSB3cmFwcGVkIHRlbXBsYXRlIGludG8gdGhlIG1haW4KICAgICAqIGRvY3VtZW50IGFuZCBiaW5kIGVsZW1lbnRzIHRvIHRoZSBgZG9tLWJpbmRgIGVsZW1lbnQgaXRzZWxmIGFzIHRoZQogICAgICogYmluZGluZyBzY29wZS4KICAgICAqCiAgICAgKiBAcG9seW1lcgogICAgICogQGN1c3RvbUVsZW1lbnQKICAgICAqIEBhcHBsaWVzTWl4aW4gUG9seW1lci5Qcm9wZXJ0eUVmZmVjdHMKICAgICAqIEBhcHBsaWVzTWl4aW4gUG9seW1lci5PcHRpb25hbE11dGFibGVEYXRhCiAgICAgKiBAYXBwbGllc01peGluIFBvbHltZXIuR2VzdHVyZUV2ZW50TGlzdGVuZXJzCiAgICAgKiBAZXh0ZW5kcyB7ZG9tQmluZEJhc2V9CiAgICAgKiBAbWVtYmVyb2YgUG9seW1lcgogICAgICogQHN1bW1hcnkgQ3VzdG9tIGVsZW1lbnQgdG8gYWxsb3cgdXNpbmcgUG9seW1lcidzIHRlbXBsYXRlIGZlYXR1cmVzIChkYXRhCiAgICAgKiAgIGJpbmRpbmcsIGRlY2xhcmF0aXZlIGV2ZW50IGxpc3RlbmVycywgZXRjLikgaW4gdGhlIG1haW4gZG9jdW1lbnQuCiAgICAgKi8KICAgIGNsYXNzIERvbUJpbmQgZXh0ZW5kcyBkb21CaW5kQmFzZSB7CgogICAgICBzdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpIHsgcmV0dXJuIFsnbXV0YWJsZS1kYXRhJ107IH0KCiAgICAgIGNvbnN0cnVjdG9yKCkgewogICAgICAgIHN1cGVyKCk7CiAgICAgICAgaWYgKFBvbHltZXIuc3RyaWN0VGVtcGxhdGVQb2xpY3kpIHsKICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgc3RyaWN0VGVtcGxhdGVQb2xpY3k6IGRvbS1iaW5kIG5vdCBhbGxvd2VkYCk7CiAgICAgICAgfQogICAgICAgIHRoaXMucm9vdCA9IG51bGw7CiAgICAgICAgdGhpcy4kID0gbnVsbDsKICAgICAgICB0aGlzLl9fY2hpbGRyZW4gPSBudWxsOwogICAgICB9CgogICAgICAvKiogQHJldHVybiB7dm9pZH0gKi8KICAgICAgYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKCkgewogICAgICAgIC8vIGFzc3VtZXMgb25seSBvbmUgb2JzZXJ2ZWQgYXR0cmlidXRlCiAgICAgICAgdGhpcy5tdXRhYmxlRGF0YSA9IHRydWU7CiAgICAgIH0KCiAgICAgIC8qKiBAcmV0dXJuIHt2b2lkfSAqLwogICAgICBjb25uZWN0ZWRDYWxsYmFjaygpIHsKICAgICAgICB0aGlzLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CiAgICAgICAgdGhpcy5yZW5kZXIoKTsKICAgICAgfQoKICAgICAgLyoqIEByZXR1cm4ge3ZvaWR9ICovCiAgICAgIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkgewogICAgICAgIHRoaXMuX19yZW1vdmVDaGlsZHJlbigpOwogICAgICB9CgogICAgICBfX2luc2VydENoaWxkcmVuKCkgewogICAgICAgIHRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcy5yb290LCB0aGlzKTsKICAgICAgfQoKICAgICAgX19yZW1vdmVDaGlsZHJlbigpIHsKICAgICAgICBpZiAodGhpcy5fX2NoaWxkcmVuKSB7CiAgICAgICAgICBmb3IgKGxldCBpPTA7IGk8dGhpcy5fX2NoaWxkcmVuLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIHRoaXMucm9vdC5hcHBlbmRDaGlsZCh0aGlzLl9fY2hpbGRyZW5baV0pOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIEZvcmNlcyB0aGUgZWxlbWVudCB0byByZW5kZXIgaXRzIGNvbnRlbnQuIFRoaXMgaXMgdHlwaWNhbGx5IG9ubHkKICAgICAgICogbmVjZXNzYXJ5IHRvIGNhbGwgaWYgSFRNTEltcG9ydHMgd2l0aCB0aGUgYXN5bmMgYXR0cmlidXRlIGFyZSB1c2VkLgogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKi8KICAgICAgcmVuZGVyKCkgewogICAgICAgIGxldCB0ZW1wbGF0ZTsKICAgICAgICBpZiAoIXRoaXMuX19jaGlsZHJlbikgewogICAgICAgICAgdGVtcGxhdGUgPSAvKiogQHR5cGUge0hUTUxUZW1wbGF0ZUVsZW1lbnR9ICovKHRlbXBsYXRlIHx8IHRoaXMucXVlcnlTZWxlY3RvcigndGVtcGxhdGUnKSk7CiAgICAgICAgICBpZiAoIXRlbXBsYXRlKSB7CiAgICAgICAgICAgIC8vIFdhaXQgdW50aWwgY2hpbGRMaXN0IGNoYW5nZXMgYW5kIHRlbXBsYXRlIHNob3VsZCBiZSB0aGVyZSBieSB0aGVuCiAgICAgICAgICAgIGxldCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKCgpID0+IHsKICAgICAgICAgICAgICB0ZW1wbGF0ZSA9IC8qKiBAdHlwZSB7SFRNTFRlbXBsYXRlRWxlbWVudH0gKi8odGhpcy5xdWVyeVNlbGVjdG9yKCd0ZW1wbGF0ZScpKTsKICAgICAgICAgICAgICBpZiAodGVtcGxhdGUpIHsKICAgICAgICAgICAgICAgIG9ic2VydmVyLmRpc2Nvbm5lY3QoKTsKICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyKCk7CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignZG9tLWJpbmQgcmVxdWlyZXMgYSA8dGVtcGxhdGU+IGNoaWxkJyk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLCB7Y2hpbGRMaXN0OiB0cnVlfSk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KICAgICAgICAgIHRoaXMucm9vdCA9IHRoaXMuX3N0YW1wVGVtcGxhdGUodGVtcGxhdGUpOwogICAgICAgICAgdGhpcy4kID0gdGhpcy5yb290LiQ7CiAgICAgICAgICB0aGlzLl9fY2hpbGRyZW4gPSBbXTsKICAgICAgICAgIGZvciAobGV0IG49dGhpcy5yb290LmZpcnN0Q2hpbGQ7IG47IG49bi5uZXh0U2libGluZykgewogICAgICAgICAgICB0aGlzLl9fY2hpbGRyZW5bdGhpcy5fX2NoaWxkcmVuLmxlbmd0aF0gPSBuOwogICAgICAgICAgfQogICAgICAgICAgdGhpcy5fZW5hYmxlUHJvcGVydGllcygpOwogICAgICAgIH0KICAgICAgICB0aGlzLl9faW5zZXJ0Q2hpbGRyZW4oKTsKICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdkb20tY2hhbmdlJywgewogICAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICAgICAgfSkpOwogICAgICB9CgogICAgfQoKICAgIGN1c3RvbUVsZW1lbnRzLmRlZmluZSgnZG9tLWJpbmQnLCBEb21CaW5kKTsKCiAgICAvKiogQGNvbnN0ICovCiAgICBQb2x5bWVyLkRvbUJpbmQgPSBEb21CaW5kOwoKICB9KSgpOwoKPC9zY3JpcHQ+PHNjcmlwdD4KICAoZnVuY3Rpb24oKSB7CiAgICAndXNlIHN0cmljdCc7CgogICAgLyoqCiAgICAgKiBDbGFzcyByZXByZXNlbnRpbmcgYSBzdGF0aWMgc3RyaW5nIHZhbHVlIHdoaWNoIGNhbiBiZSB1c2VkIHRvIGZpbHRlcgogICAgICogc3RyaW5ncyBieSBhc3NldGluZyB0aGF0IHRoZXkgaGF2ZSBiZWVuIGNyZWF0ZWQgdmlhIHRoaXMgY2xhc3MuIFRoZQogICAgICogYHZhbHVlYCBwcm9wZXJ0eSByZXR1cm5zIHRoZSBzdHJpbmcgcGFzc2VkIHRvIHRoZSBjb25zdHJ1Y3Rvci4KICAgICAqLwogICAgY2xhc3MgTGl0ZXJhbFN0cmluZyB7CiAgICAgIGNvbnN0cnVjdG9yKHN0cmluZykgewogICAgICAgIC8qKiBAdHlwZSB7c3RyaW5nfSAqLwogICAgICAgIHRoaXMudmFsdWUgPSBzdHJpbmcudG9TdHJpbmcoKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogQHJldHVybiB7c3RyaW5nfSBMaXRlcmFsU3RyaW5nIHN0cmluZyB2YWx1ZQogICAgICAgKi8KICAgICAgdG9TdHJpbmcoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWU7CiAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgT2JqZWN0IHRvIHN0cmluZ2lmeSBpbnRvIEhUTUwKICAgICAqIEByZXR1cm4ge3N0cmluZ30gSFRNTCBzdHJpbmdpZmllZCBmb3JtIG9mIGBvYmpgCiAgICAgKi8KICAgIGZ1bmN0aW9uIGxpdGVyYWxWYWx1ZSh2YWx1ZSkgewogICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBMaXRlcmFsU3RyaW5nKSB7CiAgICAgICAgcmV0dXJuIC8qKiBAdHlwZSB7IUxpdGVyYWxTdHJpbmd9ICovKHZhbHVlKS52YWx1ZTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYG5vbi1saXRlcmFsIHZhbHVlIHBhc3NlZCB0byBQb2x5bWVyLmh0bWxMaXRlcmFsOiAke3ZhbHVlfWApOwogICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIE9iamVjdCB0byBzdHJpbmdpZnkgaW50byBIVE1MCiAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IEhUTUwgc3RyaW5naWZpZWQgZm9ybSBvZiBgb2JqYAogICAgICovCiAgICBmdW5jdGlvbiBodG1sVmFsdWUodmFsdWUpIHsKICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgSFRNTFRlbXBsYXRlRWxlbWVudCkgewogICAgICAgIHJldHVybiAvKiogQHR5cGUgeyFIVE1MVGVtcGxhdGVFbGVtZW50IH0gKi8odmFsdWUpLmlubmVySFRNTDsKICAgICAgfSBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIExpdGVyYWxTdHJpbmcpIHsKICAgICAgICByZXR1cm4gbGl0ZXJhbFZhbHVlKHZhbHVlKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYG5vbi10ZW1wbGF0ZSB2YWx1ZSBwYXNzZWQgdG8gUG9seW1lci5odG1sOiAke3ZhbHVlfWApOwogICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBBIHRlbXBsYXRlIGxpdGVyYWwgdGFnIHRoYXQgY3JlYXRlcyBhbiBIVE1MIDx0ZW1wbGF0ZT4gZWxlbWVudCBmcm9tIHRoZQogICAgICogY29udGVudHMgb2YgdGhlIHN0cmluZy4KICAgICAqCiAgICAgKiBUaGlzIGFsbG93cyB5b3UgdG8gd3JpdGUgYSBQb2x5bWVyIFRlbXBsYXRlIGluIEphdmFTY3JpcHQuCiAgICAgKgogICAgICogVGVtcGxhdGVzIGNhbiBiZSBjb21wb3NlZCBieSBpbnRlcnBvbGF0aW5nIGBIVE1MVGVtcGxhdGVFbGVtZW50YHMgaW4KICAgICAqIGV4cHJlc3Npb25zIGluIHRoZSBKYXZhU2NyaXB0IHRlbXBsYXRlIGxpdGVyYWwuIFRoZSBuZXN0ZWQgdGVtcGxhdGUncwogICAgICogYGlubmVySFRNTGAgaXMgaW5jbHVkZWQgaW4gdGhlIGNvbnRhaW5pbmcgdGVtcGxhdGUuICBUaGUgb25seSBvdGhlcgogICAgICogdmFsdWVzIGFsbG93ZWQgaW4gZXhwcmVzc2lvbnMgYXJlIHRob3NlIHJldHVybmVkIGZyb20gYFBvbHltZXIuaHRtbExpdGVyYWxgCiAgICAgKiB3aGljaCBlbnN1cmVzIG9ubHkgbGl0ZXJhbCB2YWx1ZXMgZnJvbSBKUyBzb3VyY2UgZXZlciByZWFjaCB0aGUgSFRNTCwgdG8KICAgICAqIGd1YXJkIGFnYWluc3QgWFNTIHJpc2tzLgogICAgICoKICAgICAqIEFsbCBvdGhlciB2YWx1ZXMgYXJlIGRpc2FsbG93ZWQgaW4gZXhwcmVzc2lvbnMgdG8gaGVscCBwcmV2ZW50IFhTUwogICAgICogYXR0YWNrczsgaG93ZXZlciwgYFBvbHltZXIuaHRtbExpdGVyYWxgIGNhbiBiZSB1c2VkIHRvIGNvbXBvc2Ugc3RhdGljCiAgICAgKiBzdHJpbmcgdmFsdWVzIGludG8gdGVtcGxhdGVzLiBUaGlzIGlzIHVzZWZ1bCB0byBjb21wb3NlIHN0cmluZ3MgaW50bwogICAgICogcGxhY2VzIHRoYXQgZG8gbm90IGFjY2VwdCBodG1sLCBsaWtlIHRoZSBjc3MgdGV4dCBvZiBhIGBzdHlsZWAKICAgICAqIGVsZW1lbnQuCiAgICAgKgogICAgICogRXhhbXBsZToKICAgICAqCiAgICAgKiAgICAgc3RhdGljIGdldCB0ZW1wbGF0ZSgpIHsKICAgICAqICAgICAgIHJldHVybiBQb2x5bWVyLmh0bWxgCiAgICAgKiAgICAgICAgIDxzdHlsZT46aG9zdHsgY29udGVudDoiLi4uIiB9PC9zdHlsZT4KICAgICAqICAgICAgICAgPGRpdiBjbGFzcz0ic2hhZG93ZWQiPiR7dGhpcy5wYXJ0aWFsVGVtcGxhdGV9PC9kaXY+CiAgICAgKiAgICAgICAgICR7c3VwZXIudGVtcGxhdGV9CiAgICAgKiAgICAgICBgOwogICAgICogICAgIH0KICAgICAqICAgICBzdGF0aWMgZ2V0IHBhcnRpYWxUZW1wbGF0ZSgpIHsgcmV0dXJuIFBvbHltZXIuaHRtbGA8c3Bhbj5QYXJ0aWFsITwvc3Bhbj5gOyB9CiAgICAgKgogICAgICogQG1lbWJlcm9mIFBvbHltZXIKICAgICAqIEBwYXJhbSB7IUlUZW1wbGF0ZUFycmF5fSBzdHJpbmdzIENvbnN0YW50IHBhcnRzIG9mIHRhZ2dlZCB0ZW1wbGF0ZSBsaXRlcmFsCiAgICAgKiBAcGFyYW0gey4uLip9IHZhbHVlcyBWYXJpYWJsZSBwYXJ0cyBvZiB0YWdnZWQgdGVtcGxhdGUgbGl0ZXJhbAogICAgICogQHJldHVybiB7IUhUTUxUZW1wbGF0ZUVsZW1lbnR9IENvbnN0cnVjdGVkIEhUTUxUZW1wbGF0ZUVsZW1lbnQKICAgICAqLwogICAgUG9seW1lci5odG1sID0gZnVuY3Rpb24gaHRtbChzdHJpbmdzLCAuLi52YWx1ZXMpIHsKICAgICAgY29uc3QgdGVtcGxhdGUgPSAvKiogQHR5cGUgeyFIVE1MVGVtcGxhdGVFbGVtZW50fSAqLyhkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZW1wbGF0ZScpKTsKICAgICAgdGVtcGxhdGUuaW5uZXJIVE1MID0gdmFsdWVzLnJlZHVjZSgoYWNjLCB2LCBpZHgpID0+CiAgICAgICAgICBhY2MgKyBodG1sVmFsdWUodikgKyBzdHJpbmdzW2lkeCArIDFdLCBzdHJpbmdzWzBdKTsKICAgICAgcmV0dXJuIHRlbXBsYXRlOwogICAgfTsKCiAgICAvKioKICAgICAqIEFuIGh0bWwgbGl0ZXJhbCB0YWcgdGhhdCBjYW4gYmUgdXNlZCB3aXRoIGBQb2x5bWVyLmh0bWxgIHRvIGNvbXBvc2UuCiAgICAgKiBhIGxpdGVyYWwgc3RyaW5nLgogICAgICoKICAgICAqIEV4YW1wbGU6CiAgICAgKgogICAgICogICAgIHN0YXRpYyBnZXQgdGVtcGxhdGUoKSB7CiAgICAgKiAgICAgICByZXR1cm4gUG9seW1lci5odG1sYAogICAgICogICAgICAgICA8c3R5bGU+CiAgICAgKiAgICAgICAgICAgOmhvc3QgeyBkaXNwbGF5OiBibG9jazsgfQogICAgICogICAgICAgICAgICR7c3R5bGVUZW1wbGF0ZX0KICAgICAqICAgICAgICAgPC9zdHlsZT4KICAgICAqICAgICAgICAgPGRpdiBjbGFzcz0ic2hhZG93ZWQiPiR7c3RhdGljVmFsdWV9PC9kaXY+CiAgICAgKiAgICAgICAgICR7c3VwZXIudGVtcGxhdGV9CiAgICAgKiAgICAgICBgOwogICAgICogICAgIH0KICAgICAqICAgICBzdGF0aWMgZ2V0IHN0eWxlVGVtcGxhdGUoKSB7IHJldHVybiBQb2x5bWVyLmh0bWxMaXRlcmFsYC5zaGFkb3dlZCB7IGJhY2tncm91bmQ6IGdyYXk7IH1gOyB9CiAgICAgKgogICAgICogQG1lbWJlcm9mIFBvbHltZXIKICAgICAqIEBwYXJhbSB7IUlUZW1wbGF0ZUFycmF5fSBzdHJpbmdzIENvbnN0YW50IHBhcnRzIG9mIHRhZ2dlZCB0ZW1wbGF0ZSBsaXRlcmFsCiAgICAgKiBAcGFyYW0gey4uLip9IHZhbHVlcyBWYXJpYWJsZSBwYXJ0cyBvZiB0YWdnZWQgdGVtcGxhdGUgbGl0ZXJhbAogICAgICogQHJldHVybiB7IUxpdGVyYWxTdHJpbmd9IENvbnN0cnVjdGVkIGxpdGVyYWwgc3RyaW5nCiAgICAgKi8KICAgIFBvbHltZXIuaHRtbExpdGVyYWwgPSBmdW5jdGlvbihzdHJpbmdzLCAuLi52YWx1ZXMpIHsKICAgICAgcmV0dXJuIG5ldyBMaXRlcmFsU3RyaW5nKHZhbHVlcy5yZWR1Y2UoKGFjYywgdiwgaWR4KSA9PgogICAgICAgICAgYWNjICsgbGl0ZXJhbFZhbHVlKHYpICsgc3RyaW5nc1tpZHggKyAxXSwgc3RyaW5nc1swXSkpOwogICAgfTsKICB9KSgpOwo8L3NjcmlwdD48c2NyaXB0PgooZnVuY3Rpb24oKSB7CiAgJ3VzZSBzdHJpY3QnOwoKICAvKioKICAgKiBCYXNlIGNsYXNzIHRoYXQgcHJvdmlkZXMgdGhlIGNvcmUgQVBJIGZvciBQb2x5bWVyJ3MgbWV0YS1wcm9ncmFtbWluZwogICAqIGZlYXR1cmVzIGluY2x1ZGluZyB0ZW1wbGF0ZSBzdGFtcGluZywgZGF0YS1iaW5kaW5nLCBhdHRyaWJ1dGUgZGVzZXJpYWxpemF0aW9uLAogICAqIGFuZCBwcm9wZXJ0eSBjaGFuZ2Ugb2JzZXJ2YXRpb24uCiAgICoKICAgKiBAY3VzdG9tRWxlbWVudAogICAqIEBtZW1iZXJvZiBQb2x5bWVyCiAgICogQGNvbnN0cnVjdG9yCiAgICogQGltcGxlbWVudHMge1BvbHltZXJfRWxlbWVudE1peGlufQogICAqIEBleHRlbmRzIHtIVE1MRWxlbWVudH0KICAgKiBAYXBwbGllc01peGluIFBvbHltZXIuRWxlbWVudE1peGluCiAgICogQHN1bW1hcnkgQ3VzdG9tIGVsZW1lbnQgYmFzZSBjbGFzcyB0aGF0IHByb3ZpZGVzIHRoZSBjb3JlIEFQSSBmb3IgUG9seW1lcidzCiAgICogICBrZXkgbWV0YS1wcm9ncmFtbWluZyBmZWF0dXJlcyBpbmNsdWRpbmcgdGVtcGxhdGUgc3RhbXBpbmcsIGRhdGEtYmluZGluZywKICAgKiAgIGF0dHJpYnV0ZSBkZXNlcmlhbGl6YXRpb24sIGFuZCBwcm9wZXJ0eSBjaGFuZ2Ugb2JzZXJ2YXRpb24KICAgKi8KICBQb2x5bWVyLkVsZW1lbnQgPSBQb2x5bWVyLkVsZW1lbnRNaXhpbihIVE1MRWxlbWVudCk7CgogIC8vIE5PVEU6IHRoaXMgaXMgaGVyZSBmb3IgbW9kdWxpemVyIHRvIGV4cG9ydCBgaHRtbGAgZm9yIHRoZSBtb2R1bGUgdmVyc2lvbiBvZiB0aGlzIGZpbGUKICBQb2x5bWVyLmh0bWwgPSBQb2x5bWVyLmh0bWw7Cn0pKCk7Cjwvc2NyaXB0PjxzY3JpcHQ+CihmdW5jdGlvbigpIHsKICAndXNlIHN0cmljdCc7CgogIGxldCBUZW1wbGF0ZUluc3RhbmNlQmFzZSA9IFBvbHltZXIuVGVtcGxhdGVJbnN0YW5jZUJhc2U7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUKCiAgLyoqCiAgICogQGNvbnN0cnVjdG9yCiAgICogQGltcGxlbWVudHMge1BvbHltZXJfT3B0aW9uYWxNdXRhYmxlRGF0YX0KICAgKiBAZXh0ZW5kcyB7UG9seW1lci5FbGVtZW50fQogICAqIEBwcml2YXRlCiAgICovCiAgY29uc3QgZG9tUmVwZWF0QmFzZSA9IFBvbHltZXIuT3B0aW9uYWxNdXRhYmxlRGF0YShQb2x5bWVyLkVsZW1lbnQpOwoKICAvKioKICAgKiBUaGUgYDxkb20tcmVwZWF0PmAgZWxlbWVudCB3aWxsIGF1dG9tYXRpY2FsbHkgc3RhbXAgYW5kIGJpbmRzIG9uZSBpbnN0YW5jZQogICAqIG9mIHRlbXBsYXRlIGNvbnRlbnQgdG8gZWFjaCBvYmplY3QgaW4gYSB1c2VyLXByb3ZpZGVkIGFycmF5LgogICAqIGBkb20tcmVwZWF0YCBhY2NlcHRzIGFuIGBpdGVtc2AgcHJvcGVydHksIGFuZCBvbmUgaW5zdGFuY2Ugb2YgdGhlIHRlbXBsYXRlCiAgICogaXMgc3RhbXBlZCBmb3IgZWFjaCBpdGVtIGludG8gdGhlIERPTSBhdCB0aGUgbG9jYXRpb24gb2YgdGhlIGBkb20tcmVwZWF0YAogICAqIGVsZW1lbnQuICBUaGUgYGl0ZW1gIHByb3BlcnR5IHdpbGwgYmUgc2V0IG9uIGVhY2ggaW5zdGFuY2UncyBiaW5kaW5nCiAgICogc2NvcGUsIHRodXMgdGVtcGxhdGVzIHNob3VsZCBiaW5kIHRvIHN1Yi1wcm9wZXJ0aWVzIG9mIGBpdGVtYC4KICAgKgogICAqIEV4YW1wbGU6CiAgICoKICAgKiBgYGBodG1sCiAgICogPGRvbS1tb2R1bGUgaWQ9ImVtcGxveWVlLWxpc3QiPgogICAqCiAgICogICA8dGVtcGxhdGU+CiAgICoKICAgKiAgICAgPGRpdj4gRW1wbG95ZWUgbGlzdDogPC9kaXY+CiAgICogICAgIDxkb20tcmVwZWF0IGl0ZW1zPSJ7e2VtcGxveWVlc319Ij4KICAgKiAgICAgICA8dGVtcGxhdGU+CiAgICogICAgICAgICA8ZGl2PkZpcnN0IG5hbWU6IDxzcGFuPnt7aXRlbS5maXJzdH19PC9zcGFuPjwvZGl2PgogICAqICAgICAgICAgPGRpdj5MYXN0IG5hbWU6IDxzcGFuPnt7aXRlbS5sYXN0fX08L3NwYW4+PC9kaXY+CiAgICogICAgICAgPC90ZW1wbGF0ZT4KICAgKiAgICAgPC9kb20tcmVwZWF0PgogICAqCiAgICogICA8L3RlbXBsYXRlPgogICAqCiAgICogPC9kb20tbW9kdWxlPgogICAqIGBgYAogICAqCiAgICogV2l0aCB0aGUgZm9sbG93aW5nIGN1c3RvbSBlbGVtZW50IGRlZmluaXRpb246CiAgICoKICAgKiBgYGBqcwogICAqIGNsYXNzIEVtcGxveWVlTGlzdCBleHRlbmRzIFBvbHltZXIuRWxlbWVudCB7CiAgICogICBzdGF0aWMgZ2V0IGlzKCkgeyByZXR1cm4gJ2VtcGxveWVlLWxpc3QnOyB9CiAgICogICBzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKSB7CiAgICogICAgIHJldHVybiB7CiAgICogICAgICAgZW1wbG95ZWVzOiB7CiAgICogICAgICAgICB2YWx1ZSgpIHsKICAgKiAgICAgICAgICAgcmV0dXJuIFsKICAgKiAgICAgICAgICAgICB7Zmlyc3Q6ICdCb2InLCBsYXN0OiAnU21pdGgnfSwKICAgKiAgICAgICAgICAgICB7Zmlyc3Q6ICdTYWxseScsIGxhc3Q6ICdKb2huc29uJ30sCiAgICogICAgICAgICAgICAgLi4uCiAgICogICAgICAgICAgIF07CiAgICogICAgICAgICB9CiAgICogICAgICAgfQogICAqICAgICB9OwogICAqICAgfQogICAqIH0KICAgKiBgYGAKICAgKgogICAqIE5vdGlmaWNhdGlvbnMgZm9yIGNoYW5nZXMgdG8gaXRlbXMgc3ViLXByb3BlcnRpZXMgd2lsbCBiZSBmb3J3YXJkZWQgdG8gdGVtcGxhdGUKICAgKiBpbnN0YW5jZXMsIHdoaWNoIHdpbGwgdXBkYXRlIHZpYSB0aGUgbm9ybWFsIHN0cnVjdHVyZWQgZGF0YSBub3RpZmljYXRpb24gc3lzdGVtLgogICAqCiAgICogTXV0YXRpb25zIHRvIHRoZSBgaXRlbXNgIGFycmF5IGl0c2VsZiBzaG91bGQgYmUgbWFkZSB1c2luZyB0aGUgQXJyYXkKICAgKiBtdXRhdGlvbiBBUEkncyBvbiBgUG9seW1lci5CYXNlYCAoYHB1c2hgLCBgcG9wYCwgYHNwbGljZWAsIGBzaGlmdGAsCiAgICogYHVuc2hpZnRgKSwgYW5kIHRlbXBsYXRlIGluc3RhbmNlcyB3aWxsIGJlIGtlcHQgaW4gc3luYyB3aXRoIHRoZSBkYXRhIGluIHRoZQogICAqIGFycmF5LgogICAqCiAgICogRXZlbnRzIGNhdWdodCBieSBldmVudCBoYW5kbGVycyB3aXRoaW4gdGhlIGBkb20tcmVwZWF0YCB0ZW1wbGF0ZSB3aWxsIGJlCiAgICogZGVjb3JhdGVkIHdpdGggYSBgbW9kZWxgIHByb3BlcnR5LCB3aGljaCByZXByZXNlbnRzIHRoZSBiaW5kaW5nIHNjb3BlIGZvcgogICAqIGVhY2ggdGVtcGxhdGUgaW5zdGFuY2UuICBUaGUgbW9kZWwgaXMgYW4gaW5zdGFuY2Ugb2YgUG9seW1lci5CYXNlLCBhbmQgc2hvdWxkCiAgICogYmUgdXNlZCB0byBtYW5pcHVsYXRlIGRhdGEgb24gdGhlIGluc3RhbmNlLCBmb3IgZXhhbXBsZQogICAqIGBldmVudC5tb2RlbC5zZXQoJ2l0ZW0uY2hlY2tlZCcsIHRydWUpO2AuCiAgICoKICAgKiBBbHRlcm5hdGl2ZWx5LCB0aGUgbW9kZWwgZm9yIGEgdGVtcGxhdGUgaW5zdGFuY2UgZm9yIGFuIGVsZW1lbnQgc3RhbXBlZCBieQogICAqIGEgYGRvbS1yZXBlYXRgIGNhbiBiZSBvYnRhaW5lZCB1c2luZyB0aGUgYG1vZGVsRm9yRWxlbWVudGAgQVBJIG9uIHRoZQogICAqIGBkb20tcmVwZWF0YCB0aGF0IHN0YW1wZWQgaXQsIGZvciBleGFtcGxlCiAgICogYHRoaXMuJC5kb21SZXBlYXQubW9kZWxGb3JFbGVtZW50KGV2ZW50LnRhcmdldCkuc2V0KCdpdGVtLmNoZWNrZWQnLCB0cnVlKTtgLgogICAqIFRoaXMgbWF5IGJlIHVzZWZ1bCBmb3IgbWFuaXB1bGF0aW5nIGluc3RhbmNlIGRhdGEgb2YgZXZlbnQgdGFyZ2V0cyBvYnRhaW5lZAogICAqIGJ5IGV2ZW50IGhhbmRsZXJzIG9uIHBhcmVudHMgb2YgdGhlIGBkb20tcmVwZWF0YCAoZXZlbnQgZGVsZWdhdGlvbikuCiAgICoKICAgKiBBIHZpZXctc3BlY2lmaWMgZmlsdGVyL3NvcnQgbWF5IGJlIGFwcGxpZWQgdG8gZWFjaCBgZG9tLXJlcGVhdGAgYnkgc3VwcGx5aW5nIGEKICAgKiBgZmlsdGVyYCBhbmQvb3IgYHNvcnRgIHByb3BlcnR5LiAgVGhpcyBtYXkgYmUgYSBzdHJpbmcgdGhhdCBuYW1lcyBhIGZ1bmN0aW9uIG9uCiAgICogdGhlIGhvc3QsIG9yIGEgZnVuY3Rpb24gbWF5IGJlIGFzc2lnbmVkIHRvIHRoZSBwcm9wZXJ0eSBkaXJlY3RseS4gIFRoZSBmdW5jdGlvbnMKICAgKiBzaG91bGQgaW1wbGVtZW50ZWQgZm9sbG93aW5nIHRoZSBzdGFuZGFyZCBgQXJyYXlgIGZpbHRlci9zb3J0IEFQSS4KICAgKgogICAqIEluIG9yZGVyIHRvIHJlLXJ1biB0aGUgZmlsdGVyIG9yIHNvcnQgZnVuY3Rpb25zIGJhc2VkIG9uIGNoYW5nZXMgdG8gc3ViLWZpZWxkcwogICAqIG9mIGBpdGVtc2AsIHRoZSBgb2JzZXJ2ZWAgcHJvcGVydHkgbWF5IGJlIHNldCBhcyBhIHNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mCiAgICogYGl0ZW1gIHN1Yi1maWVsZHMgdGhhdCBzaG91bGQgY2F1c2UgYSByZS1maWx0ZXIvc29ydCB3aGVuIG1vZGlmaWVkLiAgSWYKICAgKiB0aGUgZmlsdGVyIG9yIHNvcnQgZnVuY3Rpb24gZGVwZW5kcyBvbiBwcm9wZXJ0aWVzIG5vdCBjb250YWluZWQgaW4gYGl0ZW1zYCwKICAgKiB0aGUgdXNlciBzaG91bGQgb2JzZXJ2ZSBjaGFuZ2VzIHRvIHRob3NlIHByb3BlcnRpZXMgYW5kIGNhbGwgYHJlbmRlcmAgdG8gdXBkYXRlCiAgICogdGhlIHZpZXcgYmFzZWQgb24gdGhlIGRlcGVuZGVuY3kgY2hhbmdlLgogICAqCiAgICogRm9yIGV4YW1wbGUsIGZvciBhbiBgZG9tLXJlcGVhdGAgd2l0aCBhIGZpbHRlciBvZiB0aGUgZm9sbG93aW5nOgogICAqCiAgICogYGBganMKICAgKiBpc0VuZ2luZWVyKGl0ZW0pIHsKICAgKiAgIHJldHVybiBpdGVtLnR5cGUgPT0gJ2VuZ2luZWVyJyB8fCBpdGVtLm1hbmFnZXIudHlwZSA9PSAnZW5naW5lZXInOwogICAqIH0KICAgKiBgYGAKICAgKgogICAqIFRoZW4gdGhlIGBvYnNlcnZlYCBwcm9wZXJ0eSBzaG91bGQgYmUgY29uZmlndXJlZCBhcyBmb2xsb3dzOgogICAqCiAgICogYGBgaHRtbAogICAqIDxkb20tcmVwZWF0IGl0ZW1zPSJ7e2VtcGxveWVlc319IiBmaWx0ZXI9ImlzRW5naW5lZXIiIG9ic2VydmU9InR5cGUgbWFuYWdlci50eXBlIj4KICAgKiBgYGAKICAgKgogICAqIEBjdXN0b21FbGVtZW50CiAgICogQHBvbHltZXIKICAgKiBAbWVtYmVyb2YgUG9seW1lcgogICAqIEBleHRlbmRzIHtkb21SZXBlYXRCYXNlfQogICAqIEBhcHBsaWVzTWl4aW4gUG9seW1lci5PcHRpb25hbE11dGFibGVEYXRhCiAgICogQHN1bW1hcnkgQ3VzdG9tIGVsZW1lbnQgZm9yIHN0YW1waW5nIGluc3RhbmNlIG9mIGEgdGVtcGxhdGUgYm91bmQgdG8KICAgKiAgIGl0ZW1zIGluIGFuIGFycmF5LgogICAqLwogIGNsYXNzIERvbVJlcGVhdCBleHRlbmRzIGRvbVJlcGVhdEJhc2UgewoKICAgIC8vIE5vdCBuZWVkZWQgdG8gZmluZCB0ZW1wbGF0ZTsgY2FuIGJlIHJlbW92ZWQgb25jZSB0aGUgYW5hbHl6ZXIKICAgIC8vIGNhbiBmaW5kIHRoZSB0YWcgbmFtZSBmcm9tIGN1c3RvbUVsZW1lbnRzLmRlZmluZSBjYWxsCiAgICBzdGF0aWMgZ2V0IGlzKCkgeyByZXR1cm4gJ2RvbS1yZXBlYXQnOyB9CgogICAgc3RhdGljIGdldCB0ZW1wbGF0ZSgpIHsgcmV0dXJuIG51bGw7IH0KCiAgICBzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKSB7CgogICAgICAvKioKICAgICAgICogRmlyZWQgd2hlbmV2ZXIgRE9NIGlzIGFkZGVkIG9yIHJlbW92ZWQgYnkgdGhpcyB0ZW1wbGF0ZSAoYnkKICAgICAgICogZGVmYXVsdCwgcmVuZGVyaW5nIG9jY3VycyBsYXppbHkpLiAgVG8gZm9yY2UgaW1tZWRpYXRlIHJlbmRlcmluZywgY2FsbAogICAgICAgKiBgcmVuZGVyYC4KICAgICAgICoKICAgICAgICogQGV2ZW50IGRvbS1jaGFuZ2UKICAgICAgICovCiAgICAgIHJldHVybiB7CgogICAgICAgIC8qKgogICAgICAgICAqIEFuIGFycmF5IGNvbnRhaW5pbmcgaXRlbXMgZGV0ZXJtaW5pbmcgaG93IG1hbnkgaW5zdGFuY2VzIG9mIHRoZSB0ZW1wbGF0ZQogICAgICAgICAqIHRvIHN0YW1wIGFuZCB0aGF0IHRoYXQgZWFjaCB0ZW1wbGF0ZSBpbnN0YW5jZSBzaG91bGQgYmluZCB0by4KICAgICAgICAgKi8KICAgICAgICBpdGVtczogewogICAgICAgICAgdHlwZTogQXJyYXkKICAgICAgICB9LAoKICAgICAgICAvKioKICAgICAgICAgKiBUaGUgbmFtZSBvZiB0aGUgdmFyaWFibGUgdG8gYWRkIHRvIHRoZSBiaW5kaW5nIHNjb3BlIGZvciB0aGUgYXJyYXkKICAgICAgICAgKiBlbGVtZW50IGFzc29jaWF0ZWQgd2l0aCBhIGdpdmVuIHRlbXBsYXRlIGluc3RhbmNlLgogICAgICAgICAqLwogICAgICAgIGFzOiB7CiAgICAgICAgICB0eXBlOiBTdHJpbmcsCiAgICAgICAgICB2YWx1ZTogJ2l0ZW0nCiAgICAgICAgfSwKCiAgICAgICAgLyoqCiAgICAgICAgICogVGhlIG5hbWUgb2YgdGhlIHZhcmlhYmxlIHRvIGFkZCB0byB0aGUgYmluZGluZyBzY29wZSB3aXRoIHRoZSBpbmRleAogICAgICAgICAqIG9mIHRoZSBpbnN0YW5jZSBpbiB0aGUgc29ydGVkIGFuZCBmaWx0ZXJlZCBsaXN0IG9mIHJlbmRlcmVkIGl0ZW1zLgogICAgICAgICAqIE5vdGUsIGZvciB0aGUgaW5kZXggaW4gdGhlIGB0aGlzLml0ZW1zYCBhcnJheSwgdXNlIHRoZSB2YWx1ZSBvZiB0aGUKICAgICAgICAgKiBgaXRlbXNJbmRleEFzYCBwcm9wZXJ0eS4KICAgICAgICAgKi8KICAgICAgICBpbmRleEFzOiB7CiAgICAgICAgICB0eXBlOiBTdHJpbmcsCiAgICAgICAgICB2YWx1ZTogJ2luZGV4JwogICAgICAgIH0sCgogICAgICAgIC8qKgogICAgICAgICAqIFRoZSBuYW1lIG9mIHRoZSB2YXJpYWJsZSB0byBhZGQgdG8gdGhlIGJpbmRpbmcgc2NvcGUgd2l0aCB0aGUgaW5kZXgKICAgICAgICAgKiBvZiB0aGUgaW5zdGFuY2UgaW4gdGhlIGB0aGlzLml0ZW1zYCBhcnJheS4gTm90ZSwgZm9yIHRoZSBpbmRleCBvZgogICAgICAgICAqIHRoaXMgaW5zdGFuY2UgaW4gdGhlIHNvcnRlZCBhbmQgZmlsdGVyZWQgbGlzdCBvZiByZW5kZXJlZCBpdGVtcywKICAgICAgICAgKiB1c2UgdGhlIHZhbHVlIG9mIHRoZSBgaW5kZXhBc2AgcHJvcGVydHkuCiAgICAgICAgICovCiAgICAgICAgaXRlbXNJbmRleEFzOiB7CiAgICAgICAgICB0eXBlOiBTdHJpbmcsCiAgICAgICAgICB2YWx1ZTogJ2l0ZW1zSW5kZXgnCiAgICAgICAgfSwKCiAgICAgICAgLyoqCiAgICAgICAgICogQSBmdW5jdGlvbiB0aGF0IHNob3VsZCBkZXRlcm1pbmUgdGhlIHNvcnQgb3JkZXIgb2YgdGhlIGl0ZW1zLiAgVGhpcwogICAgICAgICAqIHByb3BlcnR5IHNob3VsZCBlaXRoZXIgYmUgcHJvdmlkZWQgYXMgYSBzdHJpbmcsIGluZGljYXRpbmcgYSBtZXRob2QKICAgICAgICAgKiBuYW1lIG9uIHRoZSBlbGVtZW50J3MgaG9zdCwgb3IgZWxzZSBiZSBhbiBhY3R1YWwgZnVuY3Rpb24uICBUaGUKICAgICAgICAgKiBmdW5jdGlvbiBzaG91bGQgbWF0Y2ggdGhlIHNvcnQgZnVuY3Rpb24gcGFzc2VkIHRvIGBBcnJheS5zb3J0YC4KICAgICAgICAgKiBVc2luZyBhIHNvcnQgZnVuY3Rpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgdW5kZXJseWluZyBgaXRlbXNgIGFycmF5LgogICAgICAgICAqLwogICAgICAgIHNvcnQ6IHsKICAgICAgICAgIHR5cGU6IEZ1bmN0aW9uLAogICAgICAgICAgb2JzZXJ2ZXI6ICdfX3NvcnRDaGFuZ2VkJwogICAgICAgIH0sCgogICAgICAgIC8qKgogICAgICAgICAqIEEgZnVuY3Rpb24gdGhhdCBjYW4gYmUgdXNlZCB0byBmaWx0ZXIgaXRlbXMgb3V0IG9mIHRoZSB2aWV3LiAgVGhpcwogICAgICAgICAqIHByb3BlcnR5IHNob3VsZCBlaXRoZXIgYmUgcHJvdmlkZWQgYXMgYSBzdHJpbmcsIGluZGljYXRpbmcgYSBtZXRob2QKICAgICAgICAgKiBuYW1lIG9uIHRoZSBlbGVtZW50J3MgaG9zdCwgb3IgZWxzZSBiZSBhbiBhY3R1YWwgZnVuY3Rpb24uICBUaGUKICAgICAgICAgKiBmdW5jdGlvbiBzaG91bGQgbWF0Y2ggdGhlIHNvcnQgZnVuY3Rpb24gcGFzc2VkIHRvIGBBcnJheS5maWx0ZXJgLgogICAgICAgICAqIFVzaW5nIGEgZmlsdGVyIGZ1bmN0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHVuZGVybHlpbmcgYGl0ZW1zYCBhcnJheS4KICAgICAgICAgKi8KICAgICAgICBmaWx0ZXI6IHsKICAgICAgICAgIHR5cGU6IEZ1bmN0aW9uLAogICAgICAgICAgb2JzZXJ2ZXI6ICdfX2ZpbHRlckNoYW5nZWQnCiAgICAgICAgfSwKCiAgICAgICAgLyoqCiAgICAgICAgICogV2hlbiB1c2luZyBhIGBmaWx0ZXJgIG9yIGBzb3J0YCBmdW5jdGlvbiwgdGhlIGBvYnNlcnZlYCBwcm9wZXJ0eQogICAgICAgICAqIHNob3VsZCBiZSBzZXQgdG8gYSBzcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZiB0aGUgbmFtZXMgb2YgaXRlbQogICAgICAgICAqIHN1Yi1maWVsZHMgdGhhdCBzaG91bGQgdHJpZ2dlciBhIHJlLXNvcnQgb3IgcmUtZmlsdGVyIHdoZW4gY2hhbmdlZC4KICAgICAgICAgKiBUaGVzZSBzaG91bGQgZ2VuZXJhbGx5IGJlIGZpZWxkcyBvZiBgaXRlbWAgdGhhdCB0aGUgc29ydCBvciBmaWx0ZXIKICAgICAgICAgKiBmdW5jdGlvbiBkZXBlbmRzIG9uLgogICAgICAgICAqLwogICAgICAgIG9ic2VydmU6IHsKICAgICAgICAgIHR5cGU6IFN0cmluZywKICAgICAgICAgIG9ic2VydmVyOiAnX19vYnNlcnZlQ2hhbmdlZCcKICAgICAgICB9LAoKICAgICAgICAvKioKICAgICAgICAgKiBXaGVuIHVzaW5nIGEgYGZpbHRlcmAgb3IgYHNvcnRgIGZ1bmN0aW9uLCB0aGUgYGRlbGF5YCBwcm9wZXJ0eQogICAgICAgICAqIGRldGVybWluZXMgYSBkZWJvdW5jZSB0aW1lIGluIG1zIGFmdGVyIGEgY2hhbmdlIHRvIG9ic2VydmVkIGl0ZW0KICAgICAgICAgKiBwcm9wZXJ0aWVzIHRoYXQgbXVzdCBwYXNzIGJlZm9yZSB0aGUgZmlsdGVyIG9yIHNvcnQgaXMgcmUtcnVuLgogICAgICAgICAqIFRoaXMgaXMgdXNlZnVsIGluIHJhdGUtbGltaXRpbmcgc2h1ZmZsaW5nIG9mIHRoZSB2aWV3IHdoZW4KICAgICAgICAgKiBpdGVtIGNoYW5nZXMgbWF5IGJlIGZyZXF1ZW50LgogICAgICAgICAqLwogICAgICAgIGRlbGF5OiBOdW1iZXIsCgogICAgICAgIC8qKgogICAgICAgICAqIENvdW50IG9mIGN1cnJlbnRseSByZW5kZXJlZCBpdGVtcyBhZnRlciBgZmlsdGVyYCAoaWYgYW55KSBoYXMgYmVlbiBhcHBsaWVkLgogICAgICAgICAqIElmICJjaHVua2luZyBtb2RlIiBpcyBlbmFibGVkLCBgcmVuZGVyZWRJdGVtQ291bnRgIGlzIHVwZGF0ZWQgZWFjaCB0aW1lIGEKICAgICAgICAgKiBzZXQgb2YgdGVtcGxhdGUgaW5zdGFuY2VzIGlzIHJlbmRlcmVkLgogICAgICAgICAqCiAgICAgICAgICovCiAgICAgICAgcmVuZGVyZWRJdGVtQ291bnQ6IHsKICAgICAgICAgIHR5cGU6IE51bWJlciwKICAgICAgICAgIG5vdGlmeTogdHJ1ZSwKICAgICAgICAgIHJlYWRPbmx5OiB0cnVlCiAgICAgICAgfSwKCiAgICAgICAgLyoqCiAgICAgICAgICogRGVmaW5lcyBhbiBpbml0aWFsIGNvdW50IG9mIHRlbXBsYXRlIGluc3RhbmNlcyB0byByZW5kZXIgYWZ0ZXIgc2V0dGluZwogICAgICAgICAqIHRoZSBgaXRlbXNgIGFycmF5LCBiZWZvcmUgdGhlIG5leHQgcGFpbnQsIGFuZCBwdXRzIHRoZSBgZG9tLXJlcGVhdGAKICAgICAgICAgKiBpbnRvICJjaHVua2luZyBtb2RlIi4gIFRoZSByZW1haW5pbmcgaXRlbXMgd2lsbCBiZSBjcmVhdGVkIGFuZCByZW5kZXJlZAogICAgICAgICAqIGluY3JlbWVudGFsbHkgYXQgZWFjaCBhbmltYXRpb24gZnJhbWUgdGhlcm9mIHVudGlsIGFsbCBpbnN0YW5jZXMgaGF2ZQogICAgICAgICAqIGJlZW4gcmVuZGVyZWQuCiAgICAgICAgICovCiAgICAgICAgaW5pdGlhbENvdW50OiB7CiAgICAgICAgICB0eXBlOiBOdW1iZXIsCiAgICAgICAgICBvYnNlcnZlcjogJ19faW5pdGlhbGl6ZUNodW5raW5nJwogICAgICAgIH0sCgogICAgICAgIC8qKgogICAgICAgICAqIFdoZW4gYGluaXRpYWxDb3VudGAgaXMgdXNlZCwgdGhpcyBwcm9wZXJ0eSBkZWZpbmVzIGEgZnJhbWUgcmF0ZSAoaW4KICAgICAgICAgKiBmcHMpIHRvIHRhcmdldCBieSB0aHJvdHRsaW5nIHRoZSBudW1iZXIgb2YgaW5zdGFuY2VzIHJlbmRlcmVkIGVhY2gKICAgICAgICAgKiBmcmFtZSB0byBub3QgZXhjZWVkIHRoZSBidWRnZXQgZm9yIHRoZSB0YXJnZXQgZnJhbWUgcmF0ZS4gIFRoZQogICAgICAgICAqIGZyYW1lcmF0ZSBpcyBlZmZlY3RpdmVseSB0aGUgbnVtYmVyIG9mIGByZXF1ZXN0QW5pbWF0aW9uRnJhbWVgcyB0aGF0CiAgICAgICAgICogaXQgdHJpZXMgdG8gYWxsb3cgdG8gYWN0dWFsbHkgZmlyZSBpbiBhIGdpdmVuIHNlY29uZC4gSXQgZG9lcyB0aGlzCiAgICAgICAgICogYnkgbWVhc3VyaW5nIHRoZSB0aW1lIGJldHdlZW4gYHJBRmBzIGFuZCBjb250aW51b3VzbHkgYWRqdXN0aW5nIHRoZQogICAgICAgICAqIG51bWJlciBvZiBpdGVtcyBjcmVhdGVkIGVhY2ggYHJBRmAgdG8gbWFpbnRhaW4gdGhlIHRhcmdldCBmcmFtZXJhdGUuCiAgICAgICAgICogU2V0dGluZyB0aGlzIHRvIGEgaGlnaGVyIG51bWJlciBhbGxvd3MgbG93ZXIgbGF0ZW5jeSBhbmQgaGlnaGVyCiAgICAgICAgICogdGhyb3VnaHB1dCBmb3IgZXZlbnQgaGFuZGxlcnMgYW5kIG90aGVyIHRhc2tzLCBidXQgcmVzdWx0cyBpbiBhCiAgICAgICAgICogbG9uZ2VyIHRpbWUgZm9yIHRoZSByZW1haW5pbmcgaXRlbXMgdG8gY29tcGxldGUgcmVuZGVyaW5nLgogICAgICAgICAqLwogICAgICAgIHRhcmdldEZyYW1lcmF0ZTogewogICAgICAgICAgdHlwZTogTnVtYmVyLAogICAgICAgICAgdmFsdWU6IDIwCiAgICAgICAgfSwKCiAgICAgICAgX3RhcmdldEZyYW1lVGltZTogewogICAgICAgICAgdHlwZTogTnVtYmVyLAogICAgICAgICAgY29tcHV0ZWQ6ICdfX2NvbXB1dGVGcmFtZVRpbWUodGFyZ2V0RnJhbWVyYXRlKScKICAgICAgICB9CgogICAgICB9OwoKICAgIH0KCiAgICBzdGF0aWMgZ2V0IG9ic2VydmVycygpIHsKICAgICAgcmV0dXJuIFsgJ19faXRlbXNDaGFuZ2VkKGl0ZW1zLiopJyBdOwogICAgfQoKICAgIGNvbnN0cnVjdG9yKCkgewogICAgICBzdXBlcigpOwogICAgICB0aGlzLl9faW5zdGFuY2VzID0gW107CiAgICAgIHRoaXMuX19saW1pdCA9IEluZmluaXR5OwogICAgICB0aGlzLl9fcG9vbCA9IFtdOwogICAgICB0aGlzLl9fcmVuZGVyRGVib3VuY2VyID0gbnVsbDsKICAgICAgdGhpcy5fX2l0ZW1zSWR4VG9JbnN0SWR4ID0ge307CiAgICAgIHRoaXMuX19jaHVua0NvdW50ID0gbnVsbDsKICAgICAgdGhpcy5fX2xhc3RDaHVua1RpbWUgPSBudWxsOwogICAgICB0aGlzLl9fc29ydEZuID0gbnVsbDsKICAgICAgdGhpcy5fX2ZpbHRlckZuID0gbnVsbDsKICAgICAgdGhpcy5fX29ic2VydmVQYXRocyA9IG51bGw7CiAgICAgIHRoaXMuX19jdG9yID0gbnVsbDsKICAgICAgdGhpcy5fX2lzRGV0YWNoZWQgPSB0cnVlOwogICAgICB0aGlzLnRlbXBsYXRlID0gbnVsbDsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgKi8KICAgIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkgewogICAgICBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpOwogICAgICB0aGlzLl9faXNEZXRhY2hlZCA9IHRydWU7CiAgICAgIGZvciAobGV0IGk9MDsgaTx0aGlzLl9faW5zdGFuY2VzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgdGhpcy5fX2RldGFjaEluc3RhbmNlKGkpOwogICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICovCiAgICBjb25uZWN0ZWRDYWxsYmFjaygpIHsKICAgICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTsKICAgICAgdGhpcy5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwogICAgICAvLyBvbmx5IHBlcmZvcm0gYXR0YWNobWVudCBpZiB0aGUgZWxlbWVudCB3YXMgcHJldmlvdXNseSBkZXRhY2hlZC4KICAgICAgaWYgKHRoaXMuX19pc0RldGFjaGVkKSB7CiAgICAgICAgdGhpcy5fX2lzRGV0YWNoZWQgPSBmYWxzZTsKICAgICAgICBsZXQgcGFyZW50ID0gdGhpcy5wYXJlbnROb2RlOwogICAgICAgIGZvciAobGV0IGk9MDsgaTx0aGlzLl9faW5zdGFuY2VzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICB0aGlzLl9fYXR0YWNoSW5zdGFuY2UoaSwgcGFyZW50KTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICBfX2Vuc3VyZVRlbXBsYXRpemVkKCkgewogICAgICAvLyBUZW1wbGF0aXppbmcgKGdlbmVyYXRpbmcgdGhlIGluc3RhbmNlIGNvbnN0cnVjdG9yKSBuZWVkcyB0byB3YWl0CiAgICAgIC8vIHVudGlsIHJlYWR5LCBzaW5jZSB3b24ndCBoYXZlIGl0cyB0ZW1wbGF0ZSBjb250ZW50IGhhbmRlZCBiYWNrIHRvCiAgICAgIC8vIGl0IHVudGlsIHRoZW4KICAgICAgaWYgKCF0aGlzLl9fY3RvcikgewogICAgICAgIGxldCB0ZW1wbGF0ZSA9IHRoaXMudGVtcGxhdGUgPSAvKiogQHR5cGUge0hUTUxUZW1wbGF0ZUVsZW1lbnR9ICovKHRoaXMucXVlcnlTZWxlY3RvcigndGVtcGxhdGUnKSk7CiAgICAgICAgaWYgKCF0ZW1wbGF0ZSkgewogICAgICAgICAgLy8gLy8gV2FpdCB1bnRpbCBjaGlsZExpc3QgY2hhbmdlcyBhbmQgdGVtcGxhdGUgc2hvdWxkIGJlIHRoZXJlIGJ5IHRoZW4KICAgICAgICAgIGxldCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKCgpID0+IHsKICAgICAgICAgICAgaWYgKHRoaXMucXVlcnlTZWxlY3RvcigndGVtcGxhdGUnKSkgewogICAgICAgICAgICAgIG9ic2VydmVyLmRpc2Nvbm5lY3QoKTsKICAgICAgICAgICAgICB0aGlzLl9fcmVuZGVyKCk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdkb20tcmVwZWF0IHJlcXVpcmVzIGEgPHRlbXBsYXRlPiBjaGlsZCcpOwogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICAgIG9ic2VydmVyLm9ic2VydmUodGhpcywge2NoaWxkTGlzdDogdHJ1ZX0pOwogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICAvLyBUZW1wbGF0ZSBpbnN0YW5jZSBwcm9wcyB0aGF0IHNob3VsZCBiZSBleGNsdWRlZCBmcm9tIGZvcndhcmRpbmcKICAgICAgICBsZXQgaW5zdGFuY2VQcm9wcyA9IHt9OwogICAgICAgIGluc3RhbmNlUHJvcHNbdGhpcy5hc10gPSB0cnVlOwogICAgICAgIGluc3RhbmNlUHJvcHNbdGhpcy5pbmRleEFzXSA9IHRydWU7CiAgICAgICAgaW5zdGFuY2VQcm9wc1t0aGlzLml0ZW1zSW5kZXhBc10gPSB0cnVlOwogICAgICAgIHRoaXMuX19jdG9yID0gUG9seW1lci5UZW1wbGF0aXplLnRlbXBsYXRpemUodGVtcGxhdGUsIHRoaXMsIHsKICAgICAgICAgIG11dGFibGVEYXRhOiB0aGlzLm11dGFibGVEYXRhLAogICAgICAgICAgcGFyZW50TW9kZWw6IHRydWUsCiAgICAgICAgICBpbnN0YW5jZVByb3BzOiBpbnN0YW5jZVByb3BzLAogICAgICAgICAgLyoqCiAgICAgICAgICAgKiBAdGhpcyB7dGhpc30KICAgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wIFByb3BlcnR5IHRvIHNldAogICAgICAgICAgICogQHBhcmFtIHsqfSB2YWx1ZSBWYWx1ZSB0byBzZXQgcHJvcGVydHkgdG8KICAgICAgICAgICAqLwogICAgICAgICAgZm9yd2FyZEhvc3RQcm9wOiBmdW5jdGlvbihwcm9wLCB2YWx1ZSkgewogICAgICAgICAgICBsZXQgaSQgPSB0aGlzLl9faW5zdGFuY2VzOwogICAgICAgICAgICBmb3IgKGxldCBpPTAsIGluc3Q7IChpPGkkLmxlbmd0aCkgJiYgKGluc3Q9aSRbaV0pOyBpKyspIHsKICAgICAgICAgICAgICBpbnN0LmZvcndhcmRIb3N0UHJvcChwcm9wLCB2YWx1ZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICAvKioKICAgICAgICAgICAqIEB0aGlzIHt0aGlzfQogICAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IGluc3QgSW5zdGFuY2UgdG8gbm90aWZ5CiAgICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcCBQcm9wZXJ0eSB0byBub3RpZnkKICAgICAgICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVmFsdWUgdG8gbm90aWZ5CiAgICAgICAgICAgKi8KICAgICAgICAgIG5vdGlmeUluc3RhbmNlUHJvcDogZnVuY3Rpb24oaW5zdCwgcHJvcCwgdmFsdWUpIHsKICAgICAgICAgICAgaWYgKFBvbHltZXIuUGF0aC5tYXRjaGVzKHRoaXMuYXMsIHByb3ApKSB7CiAgICAgICAgICAgICAgbGV0IGlkeCA9IGluc3RbdGhpcy5pdGVtc0luZGV4QXNdOwogICAgICAgICAgICAgIGlmIChwcm9wID09IHRoaXMuYXMpIHsKICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNbaWR4XSA9IHZhbHVlOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBsZXQgcGF0aCA9IFBvbHltZXIuUGF0aC50cmFuc2xhdGUodGhpcy5hcywgJ2l0ZW1zLicgKyBpZHgsIHByb3ApOwogICAgICAgICAgICAgIHRoaXMubm90aWZ5UGF0aChwYXRoLCB2YWx1ZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfQogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICBfX2dldE1ldGhvZEhvc3QoKSB7CiAgICAgIC8vIFRlY2huaWNhbGx5IHRoaXMgc2hvdWxkIGJlIHRoZSBvd25lciBvZiB0aGUgb3V0ZXJtb3N0IHRlbXBsYXRlLgogICAgICAvLyBJbiBzaGFkb3cgZG9tLCB0aGlzIGlzIGFsd2F5cyBnZXRSb290Tm9kZSgpLmhvc3QsIGJ1dCB3ZSBjYW4KICAgICAgLy8gYXBwcm94aW1hdGUgdGhpcyB2aWEgY29vcGVyYXRpb24gd2l0aCBvdXIgZGF0YUhvc3QgYWx3YXlzIHNldHRpbmcKICAgICAgLy8gYF9tZXRob2RIb3N0YCBhcyBsb25nIGFzIHRoZXJlIHdlcmUgYmluZGluZ3MgKG9yIGlkJ3MpIG9uIHRoaXMKICAgICAgLy8gaW5zdGFuY2UgY2F1c2luZyBpdCB0byBnZXQgYSBkYXRhSG9zdC4KICAgICAgcmV0dXJuIHRoaXMuX19kYXRhSG9zdC5fbWV0aG9kSG9zdCB8fCB0aGlzLl9fZGF0YUhvc3Q7CiAgICB9CgogICAgX19mdW5jdGlvbkZyb21Qcm9wZXJ0eVZhbHVlKGZ1bmN0aW9uT3JNZXRob2ROYW1lKSB7CiAgICAgIGlmICh0eXBlb2YgZnVuY3Rpb25Pck1ldGhvZE5hbWUgPT09ICdzdHJpbmcnKSB7CiAgICAgICAgbGV0IG1ldGhvZE5hbWUgPSBmdW5jdGlvbk9yTWV0aG9kTmFtZTsKICAgICAgICBsZXQgb2JqID0gdGhpcy5fX2dldE1ldGhvZEhvc3QoKTsKICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7IHJldHVybiBvYmpbbWV0aG9kTmFtZV0uYXBwbHkob2JqLCBhcmd1bWVudHMpOyB9OwogICAgICB9CgogICAgICByZXR1cm4gZnVuY3Rpb25Pck1ldGhvZE5hbWU7CiAgICB9CgogICAgX19zb3J0Q2hhbmdlZChzb3J0KSB7CiAgICAgIHRoaXMuX19zb3J0Rm4gPSB0aGlzLl9fZnVuY3Rpb25Gcm9tUHJvcGVydHlWYWx1ZShzb3J0KTsKICAgICAgaWYgKHRoaXMuaXRlbXMpIHsgdGhpcy5fX2RlYm91bmNlUmVuZGVyKHRoaXMuX19yZW5kZXIpOyB9CiAgICB9CgogICAgX19maWx0ZXJDaGFuZ2VkKGZpbHRlcikgewogICAgICB0aGlzLl9fZmlsdGVyRm4gPSB0aGlzLl9fZnVuY3Rpb25Gcm9tUHJvcGVydHlWYWx1ZShmaWx0ZXIpOwogICAgICBpZiAodGhpcy5pdGVtcykgeyB0aGlzLl9fZGVib3VuY2VSZW5kZXIodGhpcy5fX3JlbmRlcik7IH0KICAgIH0KCiAgICBfX2NvbXB1dGVGcmFtZVRpbWUocmF0ZSkgewogICAgICByZXR1cm4gTWF0aC5jZWlsKDEwMDAvcmF0ZSk7CiAgICB9CgogICAgX19pbml0aWFsaXplQ2h1bmtpbmcoKSB7CiAgICAgIGlmICh0aGlzLmluaXRpYWxDb3VudCkgewogICAgICAgIHRoaXMuX19saW1pdCA9IHRoaXMuaW5pdGlhbENvdW50OwogICAgICAgIHRoaXMuX19jaHVua0NvdW50ID0gdGhpcy5pbml0aWFsQ291bnQ7CiAgICAgICAgdGhpcy5fX2xhc3RDaHVua1RpbWUgPSBwZXJmb3JtYW5jZS5ub3coKTsKICAgICAgfQogICAgfQoKICAgIF9fdHJ5UmVuZGVyQ2h1bmsoKSB7CiAgICAgIC8vIERlYm91bmNlZCBzbyB0aGF0IG11bHRpcGxlIGNhbGxzIHRocm91Z2ggYF9yZW5kZXJgIGJldHdlZW4gYW5pbWF0aW9uCiAgICAgIC8vIGZyYW1lcyBvbmx5IHF1ZXVlIG9uZSBuZXcgckFGIChlLmcuIGFycmF5IG11dGF0aW9uICYgY2h1bmtlZCByZW5kZXIpCiAgICAgIGlmICh0aGlzLml0ZW1zICYmIHRoaXMuX19saW1pdCA8IHRoaXMuaXRlbXMubGVuZ3RoKSB7CiAgICAgICAgdGhpcy5fX2RlYm91bmNlUmVuZGVyKHRoaXMuX19yZXF1ZXN0UmVuZGVyQ2h1bmspOwogICAgICB9CiAgICB9CgogICAgX19yZXF1ZXN0UmVuZGVyQ2h1bmsoKSB7CiAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+dGhpcy5fX3JlbmRlckNodW5rKCkpOwogICAgfQoKICAgIF9fcmVuZGVyQ2h1bmsoKSB7CiAgICAgIC8vIFNpbXBsZSBhdXRvIGNodW5rU2l6ZSB0aHJvdHRsaW5nIGFsZ29yaXRobSBiYXNlZCBvbiBmZWVkYmFjayBsb29wOgogICAgICAvLyBtZWFzdXJlIGFjdHVhbCB0aW1lIGJldHdlZW4gZnJhbWVzIGFuZCBzY2FsZSBjaHVuayBjb3VudCBieSByYXRpbwogICAgICAvLyBvZiB0YXJnZXQvYWN0dWFsIGZyYW1lIHRpbWUKICAgICAgbGV0IGN1cnJDaHVua1RpbWUgPSBwZXJmb3JtYW5jZS5ub3coKTsKICAgICAgbGV0IHJhdGlvID0gdGhpcy5fdGFyZ2V0RnJhbWVUaW1lIC8gKGN1cnJDaHVua1RpbWUgLSB0aGlzLl9fbGFzdENodW5rVGltZSk7CiAgICAgIHRoaXMuX19jaHVua0NvdW50ID0gTWF0aC5yb3VuZCh0aGlzLl9fY2h1bmtDb3VudCAqIHJhdGlvKSB8fCAxOwogICAgICB0aGlzLl9fbGltaXQgKz0gdGhpcy5fX2NodW5rQ291bnQ7CiAgICAgIHRoaXMuX19sYXN0Q2h1bmtUaW1lID0gY3VyckNodW5rVGltZTsKICAgICAgdGhpcy5fX2RlYm91bmNlUmVuZGVyKHRoaXMuX19yZW5kZXIpOwogICAgfQoKICAgIF9fb2JzZXJ2ZUNoYW5nZWQoKSB7CiAgICAgIHRoaXMuX19vYnNlcnZlUGF0aHMgPSB0aGlzLm9ic2VydmUgJiYKICAgICAgICB0aGlzLm9ic2VydmUucmVwbGFjZSgnLionLCAnLicpLnNwbGl0KCcgJyk7CiAgICB9CgogICAgX19pdGVtc0NoYW5nZWQoY2hhbmdlKSB7CiAgICAgIGlmICh0aGlzLml0ZW1zICYmICFBcnJheS5pc0FycmF5KHRoaXMuaXRlbXMpKSB7CiAgICAgICAgY29uc29sZS53YXJuKCdkb20tcmVwZWF0IGV4cGVjdGVkIGFycmF5IGZvciBgaXRlbXNgLCBmb3VuZCcsIHRoaXMuaXRlbXMpOwogICAgICB9CiAgICAgIC8vIElmIHBhdGggd2FzIHRvIGFuIGl0ZW0gKGUuZy4gJ2l0ZW1zLjMnIG9yICdpdGVtcy4zLmZvbycpLCBmb3J3YXJkIHRoZQogICAgICAvLyBwYXRoIHRvIHRoYXQgaW5zdGFuY2Ugc3luY2hyb25vdXNseSAocmV0dXJucyBmYWxzZSBmb3Igbm9uLWl0ZW0gcGF0aHMpCiAgICAgIGlmICghdGhpcy5fX2hhbmRsZUl0ZW1QYXRoKGNoYW5nZS5wYXRoLCBjaGFuZ2UudmFsdWUpKSB7CiAgICAgICAgLy8gT3RoZXJ3aXNlLCB0aGUgYXJyYXkgd2FzIHJlc2V0ICgnaXRlbXMnKSBvciBzcGxpY2VkICgnaXRlbXMuc3BsaWNlcycpLAogICAgICAgIC8vIHNvIHF1ZXVlIGEgZnVsbCByZWZyZXNoCiAgICAgICAgdGhpcy5fX2luaXRpYWxpemVDaHVua2luZygpOwogICAgICAgIHRoaXMuX19kZWJvdW5jZVJlbmRlcih0aGlzLl9fcmVuZGVyKTsKICAgICAgfQogICAgfQoKICAgIF9faGFuZGxlT2JzZXJ2ZWRQYXRocyhwYXRoKSB7CiAgICAgIC8vIEhhbmRsZSBjYXNlcyB3aGVyZSBwYXRoIGNoYW5nZXMgc2hvdWxkIGNhdXNlIGEgcmUtc29ydC9maWx0ZXIKICAgICAgaWYgKHRoaXMuX19zb3J0Rm4gfHwgdGhpcy5fX2ZpbHRlckZuKSB7CiAgICAgICAgaWYgKCFwYXRoKSB7CiAgICAgICAgICAvLyBBbHdheXMgcmUtcmVuZGVyIGlmIHRoZSBpdGVtIGl0c2VsZiBjaGFuZ2VkCiAgICAgICAgICB0aGlzLl9fZGVib3VuY2VSZW5kZXIodGhpcy5fX3JlbmRlciwgdGhpcy5kZWxheSk7CiAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9fb2JzZXJ2ZVBhdGhzKSB7CiAgICAgICAgICAvLyBPdGhlcndpc2UsIHJlLXJlbmRlciBpZiB0aGUgcGF0aCBjaGFuZ2VkIG1hdGNoZXMgYW4gb2JzZXJ2ZWQgcGF0aAogICAgICAgICAgbGV0IHBhdGhzID0gdGhpcy5fX29ic2VydmVQYXRoczsKICAgICAgICAgIGZvciAobGV0IGk9MDsgaTxwYXRocy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICBpZiAocGF0aC5pbmRleE9mKHBhdGhzW2ldKSA9PT0gMCkgewogICAgICAgICAgICAgIHRoaXMuX19kZWJvdW5jZVJlbmRlcih0aGlzLl9fcmVuZGVyLCB0aGlzLmRlbGF5KTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIHtmdW5jdGlvbih0aGlzOkRvbVJlcGVhdCl9IGZuIEZ1bmN0aW9uIHRvIGRlYm91bmNlLgogICAgICogQHBhcmFtIHtudW1iZXI9fSBkZWxheSBEZWxheSBpbiBtcyB0byBkZWJvdW5jZSBieS4KICAgICAqLwogICAgX19kZWJvdW5jZVJlbmRlcihmbiwgZGVsYXkgPSAwKSB7CiAgICAgIHRoaXMuX19yZW5kZXJEZWJvdW5jZXIgPSBQb2x5bWVyLkRlYm91bmNlci5kZWJvdW5jZSgKICAgICAgICAgICAgdGhpcy5fX3JlbmRlckRlYm91bmNlcgogICAgICAgICAgLCBkZWxheSA+IDAgPyBQb2x5bWVyLkFzeW5jLnRpbWVPdXQuYWZ0ZXIoZGVsYXkpIDogUG9seW1lci5Bc3luYy5taWNyb1Rhc2sKICAgICAgICAgICwgZm4uYmluZCh0aGlzKSk7CiAgICAgIFBvbHltZXIuZW5xdWV1ZURlYm91bmNlcih0aGlzLl9fcmVuZGVyRGVib3VuY2VyKTsKICAgIH0KCiAgICAvKioKICAgICAqIEZvcmNlcyB0aGUgZWxlbWVudCB0byByZW5kZXIgaXRzIGNvbnRlbnQuIE5vcm1hbGx5IHJlbmRlcmluZyBpcwogICAgICogYXN5bmNocm9ub3VzIHRvIGEgcHJvdm9raW5nIGNoYW5nZS4gVGhpcyBpcyBkb25lIGZvciBlZmZpY2llbmN5IHNvCiAgICAgKiB0aGF0IG11bHRpcGxlIGNoYW5nZXMgdHJpZ2dlciBvbmx5IGEgc2luZ2xlIHJlbmRlci4gVGhlIHJlbmRlciBtZXRob2QKICAgICAqIHNob3VsZCBiZSBjYWxsZWQgaWYsIGZvciBleGFtcGxlLCB0ZW1wbGF0ZSByZW5kZXJpbmcgaXMgcmVxdWlyZWQgdG8KICAgICAqIHZhbGlkYXRlIGFwcGxpY2F0aW9uIHN0YXRlLgogICAgICogQHJldHVybiB7dm9pZH0KICAgICAqLwogICAgcmVuZGVyKCkgewogICAgICAvLyBRdWV1ZSB0aGlzIHJlcGVhdGVyLCB0aGVuIGZsdXNoIGFsbCBpbiBvcmRlcgogICAgICB0aGlzLl9fZGVib3VuY2VSZW5kZXIodGhpcy5fX3JlbmRlcik7CiAgICAgIFBvbHltZXIuZmx1c2goKTsKICAgIH0KCiAgICBfX3JlbmRlcigpIHsKICAgICAgaWYgKCF0aGlzLl9fZW5zdXJlVGVtcGxhdGl6ZWQoKSkgewogICAgICAgIC8vIE5vIHRlbXBsYXRlIGZvdW5kIHlldAogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICB0aGlzLl9fYXBwbHlGdWxsUmVmcmVzaCgpOwogICAgICAvLyBSZXNldCB0aGUgcG9vbAogICAgICAvLyBUT0RPKGtzY2hhYWYpOiBSZXVzZSBwb29sIGFjcm9zcyB0dXJucyBhbmQgbmVzdGVkIHRlbXBsYXRlcwogICAgICAvLyBOb3cgdGhhdCBvYmplY3RzL2FycmF5cyBhcmUgcmUtZXZhbHVhdGVkIHdoZW4gc2V0LCB3ZSBjYW4gc2FmZWx5CiAgICAgIC8vIHJldXNlIHBvb2xlZCBpbnN0YW5jZXMgYWNyb3NzIHR1cm5zLCBob3dldmVyIHdlIHN0aWxsIG5lZWQgdG8gZGVjaWRlCiAgICAgIC8vIHNlbWFudGljcyByZWdhcmRpbmcgaG93IGxvbmcgdG8gaG9sZCwgaG93IG1hbnkgdG8gaG9sZCwgZXRjLgogICAgICB0aGlzLl9fcG9vbC5sZW5ndGggPSAwOwogICAgICAvLyBTZXQgcmVuZGVyZWQgaXRlbSBjb3VudAogICAgICB0aGlzLl9zZXRSZW5kZXJlZEl0ZW1Db3VudCh0aGlzLl9faW5zdGFuY2VzLmxlbmd0aCk7CiAgICAgIC8vIE5vdGlmeSB1c2VycwogICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdkb20tY2hhbmdlJywgewogICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgfSkpOwogICAgICAvLyBDaGVjayB0byBzZWUgaWYgd2UgbmVlZCB0byByZW5kZXIgbW9yZSBpdGVtcwogICAgICB0aGlzLl9fdHJ5UmVuZGVyQ2h1bmsoKTsKICAgIH0KCiAgICBfX2FwcGx5RnVsbFJlZnJlc2goKSB7CiAgICAgIGxldCBpdGVtcyA9IHRoaXMuaXRlbXMgfHwgW107CiAgICAgIGxldCBpc250SWR4VG9JdGVtc0lkeCA9IG5ldyBBcnJheShpdGVtcy5sZW5ndGgpOwogICAgICBmb3IgKGxldCBpPTA7IGk8aXRlbXMubGVuZ3RoOyBpKyspIHsKICAgICAgICBpc250SWR4VG9JdGVtc0lkeFtpXSA9IGk7CiAgICAgIH0KICAgICAgLy8gQXBwbHkgdXNlciBmaWx0ZXIKICAgICAgaWYgKHRoaXMuX19maWx0ZXJGbikgewogICAgICAgIGlzbnRJZHhUb0l0ZW1zSWR4ID0gaXNudElkeFRvSXRlbXNJZHguZmlsdGVyKChpLCBpZHgsIGFycmF5KSA9PgogICAgICAgICAgdGhpcy5fX2ZpbHRlckZuKGl0ZW1zW2ldLCBpZHgsIGFycmF5KSk7CiAgICAgIH0KICAgICAgLy8gQXBwbHkgdXNlciBzb3J0CiAgICAgIGlmICh0aGlzLl9fc29ydEZuKSB7CiAgICAgICAgaXNudElkeFRvSXRlbXNJZHguc29ydCgoYSwgYikgPT4gdGhpcy5fX3NvcnRGbihpdGVtc1thXSwgaXRlbXNbYl0pKTsKICAgICAgfQogICAgICAvLyBpdGVtcy0+aW5zdCBtYXAga2VwdCBmb3IgaXRlbSBwYXRoIGZvcndhcmRpbmcKICAgICAgY29uc3QgaXRlbXNJZHhUb0luc3RJZHggPSB0aGlzLl9faXRlbXNJZHhUb0luc3RJZHggPSB7fTsKICAgICAgbGV0IGluc3RJZHggPSAwOwogICAgICAvLyBHZW5lcmF0ZSBpbnN0YW5jZXMgYW5kIGFzc2lnbiBpdGVtcwogICAgICBjb25zdCBsaW1pdCA9IE1hdGgubWluKGlzbnRJZHhUb0l0ZW1zSWR4Lmxlbmd0aCwgdGhpcy5fX2xpbWl0KTsKICAgICAgZm9yICg7IGluc3RJZHg8bGltaXQ7IGluc3RJZHgrKykgewogICAgICAgIGxldCBpbnN0ID0gdGhpcy5fX2luc3RhbmNlc1tpbnN0SWR4XTsKICAgICAgICBsZXQgaXRlbUlkeCA9IGlzbnRJZHhUb0l0ZW1zSWR4W2luc3RJZHhdOwogICAgICAgIGxldCBpdGVtID0gaXRlbXNbaXRlbUlkeF07CiAgICAgICAgaXRlbXNJZHhUb0luc3RJZHhbaXRlbUlkeF0gPSBpbnN0SWR4OwogICAgICAgIGlmIChpbnN0KSB7CiAgICAgICAgICBpbnN0Ll9zZXRQZW5kaW5nUHJvcGVydHkodGhpcy5hcywgaXRlbSk7CiAgICAgICAgICBpbnN0Ll9zZXRQZW5kaW5nUHJvcGVydHkodGhpcy5pbmRleEFzLCBpbnN0SWR4KTsKICAgICAgICAgIGluc3QuX3NldFBlbmRpbmdQcm9wZXJ0eSh0aGlzLml0ZW1zSW5kZXhBcywgaXRlbUlkeCk7CiAgICAgICAgICBpbnN0Ll9mbHVzaFByb3BlcnRpZXMoKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhpcy5fX2luc2VydEluc3RhbmNlKGl0ZW0sIGluc3RJZHgsIGl0ZW1JZHgpOwogICAgICAgIH0KICAgICAgfQogICAgICAvLyBSZW1vdmUgYW55IGV4dHJhIGluc3RhbmNlcyBmcm9tIHByZXZpb3VzIHN0YXRlCiAgICAgIGZvciAobGV0IGk9dGhpcy5fX2luc3RhbmNlcy5sZW5ndGgtMTsgaT49aW5zdElkeDsgaS0tKSB7CiAgICAgICAgdGhpcy5fX2RldGFjaEFuZFJlbW92ZUluc3RhbmNlKGkpOwogICAgICB9CiAgICB9CgogICAgX19kZXRhY2hJbnN0YW5jZShpZHgpIHsKICAgICAgbGV0IGluc3QgPSB0aGlzLl9faW5zdGFuY2VzW2lkeF07CiAgICAgIGZvciAobGV0IGk9MDsgaTxpbnN0LmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgbGV0IGVsID0gaW5zdC5jaGlsZHJlbltpXTsKICAgICAgICBpbnN0LnJvb3QuYXBwZW5kQ2hpbGQoZWwpOwogICAgICB9CiAgICAgIHJldHVybiBpbnN0OwogICAgfQoKICAgIF9fYXR0YWNoSW5zdGFuY2UoaWR4LCBwYXJlbnQpIHsKICAgICAgbGV0IGluc3QgPSB0aGlzLl9faW5zdGFuY2VzW2lkeF07CiAgICAgIHBhcmVudC5pbnNlcnRCZWZvcmUoaW5zdC5yb290LCB0aGlzKTsKICAgIH0KCiAgICBfX2RldGFjaEFuZFJlbW92ZUluc3RhbmNlKGlkeCkgewogICAgICBsZXQgaW5zdCA9IHRoaXMuX19kZXRhY2hJbnN0YW5jZShpZHgpOwogICAgICBpZiAoaW5zdCkgewogICAgICAgIHRoaXMuX19wb29sLnB1c2goaW5zdCk7CiAgICAgIH0KICAgICAgdGhpcy5fX2luc3RhbmNlcy5zcGxpY2UoaWR4LCAxKTsKICAgIH0KCiAgICBfX3N0YW1wSW5zdGFuY2UoaXRlbSwgaW5zdElkeCwgaXRlbUlkeCkgewogICAgICBsZXQgbW9kZWwgPSB7fTsKICAgICAgbW9kZWxbdGhpcy5hc10gPSBpdGVtOwogICAgICBtb2RlbFt0aGlzLmluZGV4QXNdID0gaW5zdElkeDsKICAgICAgbW9kZWxbdGhpcy5pdGVtc0luZGV4QXNdID0gaXRlbUlkeDsKICAgICAgcmV0dXJuIG5ldyB0aGlzLl9fY3Rvcihtb2RlbCk7CiAgICB9CgogICAgX19pbnNlcnRJbnN0YW5jZShpdGVtLCBpbnN0SWR4LCBpdGVtSWR4KSB7CiAgICAgIGxldCBpbnN0ID0gdGhpcy5fX3Bvb2wucG9wKCk7CiAgICAgIGlmIChpbnN0KSB7CiAgICAgICAgLy8gVE9ETyhrc2NoYWFmKTogSWYgdGhlIHBvb2wgaXMgc2hhcmVkIGFjcm9zcyB0dXJucywgaG9zdFByb3BzCiAgICAgICAgLy8gbmVlZCB0byBiZSByZS1zZXQgdG8gcmV1c2VkIGluc3RhbmNlcyBpbiBhZGRpdGlvbiB0byBpdGVtCiAgICAgICAgaW5zdC5fc2V0UGVuZGluZ1Byb3BlcnR5KHRoaXMuYXMsIGl0ZW0pOwogICAgICAgIGluc3QuX3NldFBlbmRpbmdQcm9wZXJ0eSh0aGlzLmluZGV4QXMsIGluc3RJZHgpOwogICAgICAgIGluc3QuX3NldFBlbmRpbmdQcm9wZXJ0eSh0aGlzLml0ZW1zSW5kZXhBcywgaXRlbUlkeCk7CiAgICAgICAgaW5zdC5fZmx1c2hQcm9wZXJ0aWVzKCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaW5zdCA9IHRoaXMuX19zdGFtcEluc3RhbmNlKGl0ZW0sIGluc3RJZHgsIGl0ZW1JZHgpOwogICAgICB9CiAgICAgIGxldCBiZWZvcmVSb3cgPSB0aGlzLl9faW5zdGFuY2VzW2luc3RJZHggKyAxXTsKICAgICAgbGV0IGJlZm9yZU5vZGUgPSBiZWZvcmVSb3cgPyBiZWZvcmVSb3cuY2hpbGRyZW5bMF0gOiB0aGlzOwogICAgICB0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGluc3Qucm9vdCwgYmVmb3JlTm9kZSk7CiAgICAgIHRoaXMuX19pbnN0YW5jZXNbaW5zdElkeF0gPSBpbnN0OwogICAgICByZXR1cm4gaW5zdDsKICAgIH0KCiAgICAvLyBJbXBsZW1lbnRzIGV4dGVuc2lvbiBwb2ludCBmcm9tIFRlbXBsYXRpemUgbWl4aW4KICAgIC8qKgogICAgICogU2hvd3Mgb3IgaGlkZXMgdGhlIHRlbXBsYXRlIGluc3RhbmNlIHRvcCBsZXZlbCBjaGlsZCBlbGVtZW50cy4gRm9yCiAgICAgKiB0ZXh0IG5vZGVzLCBgdGV4dENvbnRlbnRgIGlzIHJlbW92ZWQgd2hpbGUgImhpZGRlbiIgYW5kIHJlcGxhY2VkIHdoZW4KICAgICAqICJzaG93bi4iCiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGhpZGRlbiBTZXQgdG8gdHJ1ZSB0byBoaWRlIHRoZSBjaGlsZHJlbjsKICAgICAqIHNldCB0byBmYWxzZSB0byBzaG93IHRoZW0uCiAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICogQHByb3RlY3RlZAogICAgICovCiAgICBfc2hvd0hpZGVDaGlsZHJlbihoaWRkZW4pIHsKICAgICAgZm9yIChsZXQgaT0wOyBpPHRoaXMuX19pbnN0YW5jZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICB0aGlzLl9faW5zdGFuY2VzW2ldLl9zaG93SGlkZUNoaWxkcmVuKGhpZGRlbik7CiAgICAgIH0KICAgIH0KCiAgICAvLyBDYWxsZWQgYXMgYSBzaWRlIGVmZmVjdCBvZiBhIGhvc3QgaXRlbXMuPGtleT4uPHBhdGg+IHBhdGggY2hhbmdlLAogICAgLy8gcmVzcG9uc2libGUgZm9yIG5vdGlmeWluZyBpdGVtLjxwYXRoPiBjaGFuZ2VzIHRvIGluc3QgZm9yIGtleQogICAgX19oYW5kbGVJdGVtUGF0aChwYXRoLCB2YWx1ZSkgewogICAgICBsZXQgaXRlbXNQYXRoID0gcGF0aC5zbGljZSg2KTsgLy8gJ2l0ZW1zLicubGVuZ3RoID09IDYKICAgICAgbGV0IGRvdCA9IGl0ZW1zUGF0aC5pbmRleE9mKCcuJyk7CiAgICAgIGxldCBpdGVtc0lkeCA9IGRvdCA8IDAgPyBpdGVtc1BhdGggOiBpdGVtc1BhdGguc3Vic3RyaW5nKDAsIGRvdCk7CiAgICAgIC8vIElmIHBhdGggd2FzIGluZGV4IGludG8gYXJyYXkuLi4KICAgICAgaWYgKGl0ZW1zSWR4ID09IHBhcnNlSW50KGl0ZW1zSWR4LCAxMCkpIHsKICAgICAgICBsZXQgaXRlbVN1YlBhdGggPSBkb3QgPCAwID8gJycgOiBpdGVtc1BhdGguc3Vic3RyaW5nKGRvdCsxKTsKICAgICAgICAvLyBJZiB0aGUgcGF0aCBpcyBvYnNlcnZlZCwgaXQgd2lsbCB0cmlnZ2VyIGEgZnVsbCByZWZyZXNoCiAgICAgICAgdGhpcy5fX2hhbmRsZU9ic2VydmVkUGF0aHMoaXRlbVN1YlBhdGgpOwogICAgICAgIC8vIE5vdGUsIGV2ZW4gaWYgYSBydWxsIHJlZnJlc2ggaXMgdHJpZ2dlcmVkLCBhbHdheXMgZG8gdGhlIHBhdGgKICAgICAgICAvLyBub3RpZmljYXRpb24gYmVjYXVzZSB1bmxlc3MgbXV0YWJsZURhdGEgaXMgdXNlZCBmb3IgZG9tLXJlcGVhdAogICAgICAgIC8vIGFuZCBhbGwgZWxlbWVudHMgaW4gdGhlIGluc3RhbmNlIHN1YnRyZWUsIGEgZnVsbCByZWZyZXNoIG1heQogICAgICAgIC8vIG5vdCB0cmlnZ2VyIHRoZSBwcm9wZXIgdXBkYXRlLgogICAgICAgIGxldCBpbnN0SWR4ID0gdGhpcy5fX2l0ZW1zSWR4VG9JbnN0SWR4W2l0ZW1zSWR4XTsKICAgICAgICBsZXQgaW5zdCA9IHRoaXMuX19pbnN0YW5jZXNbaW5zdElkeF07CiAgICAgICAgaWYgKGluc3QpIHsKICAgICAgICAgIGxldCBpdGVtUGF0aCA9IHRoaXMuYXMgKyAoaXRlbVN1YlBhdGggPyAnLicgKyBpdGVtU3ViUGF0aCA6ICcnKTsKICAgICAgICAgIC8vIFRoaXMgaXMgZWZmZWN0aXZlbHkgYG5vdGlmeVBhdGhgLCBidXQgYXZvaWRzIHNvbWUgb2YgdGhlIG92ZXJoZWFkCiAgICAgICAgICAvLyBvZiB0aGUgcHVibGljIEFQSQogICAgICAgICAgaW5zdC5fc2V0UGVuZGluZ1Byb3BlcnR5T3JQYXRoKGl0ZW1QYXRoLCB2YWx1ZSwgZmFsc2UsIHRydWUpOwogICAgICAgICAgaW5zdC5fZmx1c2hQcm9wZXJ0aWVzKCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBpdGVtIGFzc29jaWF0ZWQgd2l0aCBhIGdpdmVuIGVsZW1lbnQgc3RhbXBlZCBieQogICAgICogdGhpcyBgZG9tLXJlcGVhdGAuCiAgICAgKgogICAgICogTm90ZSwgdG8gbW9kaWZ5IHN1Yi1wcm9wZXJ0aWVzIG9mIHRoZSBpdGVtLAogICAgICogYG1vZGVsRm9yRWxlbWVudChlbCkuc2V0KCdpdGVtLjxzdWItcHJvcD4nLCB2YWx1ZSlgCiAgICAgKiBzaG91bGQgYmUgdXNlZC4KICAgICAqCiAgICAgKiBAcGFyYW0geyFIVE1MRWxlbWVudH0gZWwgRWxlbWVudCBmb3Igd2hpY2ggdG8gcmV0dXJuIHRoZSBpdGVtLgogICAgICogQHJldHVybiB7Kn0gSXRlbSBhc3NvY2lhdGVkIHdpdGggdGhlIGVsZW1lbnQuCiAgICAgKi8KICAgIGl0ZW1Gb3JFbGVtZW50KGVsKSB7CiAgICAgIGxldCBpbnN0YW5jZSA9IHRoaXMubW9kZWxGb3JFbGVtZW50KGVsKTsKICAgICAgcmV0dXJuIGluc3RhbmNlICYmIGluc3RhbmNlW3RoaXMuYXNdOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgaW5zdCBpbmRleCBmb3IgYSBnaXZlbiBlbGVtZW50IHN0YW1wZWQgYnkgdGhpcyBgZG9tLXJlcGVhdGAuCiAgICAgKiBJZiBgc29ydGAgaXMgcHJvdmlkZWQsIHRoZSBpbmRleCB3aWxsIHJlZmxlY3QgdGhlIHNvcnRlZCBvcmRlciAocmF0aGVyCiAgICAgKiB0aGFuIHRoZSBvcmlnaW5hbCBhcnJheSBvcmRlcikuCiAgICAgKgogICAgICogQHBhcmFtIHshSFRNTEVsZW1lbnR9IGVsIEVsZW1lbnQgZm9yIHdoaWNoIHRvIHJldHVybiB0aGUgaW5kZXguCiAgICAgKiBAcmV0dXJuIHs/bnVtYmVyfSBSb3cgaW5kZXggYXNzb2NpYXRlZCB3aXRoIHRoZSBlbGVtZW50IChub3RlIHRoaXMgbWF5CiAgICAgKiAgIG5vdCBjb3JyZXNwb25kIHRvIHRoZSBhcnJheSBpbmRleCBpZiBhIHVzZXIgYHNvcnRgIGlzIGFwcGxpZWQpLgogICAgICovCiAgICBpbmRleEZvckVsZW1lbnQoZWwpIHsKICAgICAgbGV0IGluc3RhbmNlID0gdGhpcy5tb2RlbEZvckVsZW1lbnQoZWwpOwogICAgICByZXR1cm4gaW5zdGFuY2UgJiYgaW5zdGFuY2VbdGhpcy5pbmRleEFzXTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIHRlbXBsYXRlICJtb2RlbCIgYXNzb2NpYXRlZCB3aXRoIGEgZ2l2ZW4gZWxlbWVudCwgd2hpY2gKICAgICAqIHNlcnZlcyBhcyB0aGUgYmluZGluZyBzY29wZSBmb3IgdGhlIHRlbXBsYXRlIGluc3RhbmNlIHRoZSBlbGVtZW50IGlzCiAgICAgKiBjb250YWluZWQgaW4uIEEgdGVtcGxhdGUgbW9kZWwgaXMgYW4gaW5zdGFuY2Ugb2YgYFBvbHltZXIuQmFzZWAsIGFuZAogICAgICogc2hvdWxkIGJlIHVzZWQgdG8gbWFuaXB1bGF0ZSBkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHRlbXBsYXRlIGluc3RhbmNlLgogICAgICoKICAgICAqIEV4YW1wbGU6CiAgICAgKgogICAgICogICBsZXQgbW9kZWwgPSBtb2RlbEZvckVsZW1lbnQoZWwpOwogICAgICogICBpZiAobW9kZWwuaW5kZXggPCAxMCkgewogICAgICogICAgIG1vZGVsLnNldCgnaXRlbS5jaGVja2VkJywgdHJ1ZSk7CiAgICAgKiAgIH0KICAgICAqCiAgICAgKiBAcGFyYW0geyFIVE1MRWxlbWVudH0gZWwgRWxlbWVudCBmb3Igd2hpY2ggdG8gcmV0dXJuIGEgdGVtcGxhdGUgbW9kZWwuCiAgICAgKiBAcmV0dXJuIHtUZW1wbGF0ZUluc3RhbmNlQmFzZX0gTW9kZWwgcmVwcmVzZW50aW5nIHRoZSBiaW5kaW5nIHNjb3BlIGZvcgogICAgICogICB0aGUgZWxlbWVudC4KICAgICAqLwogICAgbW9kZWxGb3JFbGVtZW50KGVsKSB7CiAgICAgIHJldHVybiBQb2x5bWVyLlRlbXBsYXRpemUubW9kZWxGb3JFbGVtZW50KHRoaXMudGVtcGxhdGUsIGVsKTsKICAgIH0KCiAgfQoKICBjdXN0b21FbGVtZW50cy5kZWZpbmUoRG9tUmVwZWF0LmlzLCBEb21SZXBlYXQpOwoKICAvKiogQGNvbnN0ICovCiAgUG9seW1lci5Eb21SZXBlYXQgPSBEb21SZXBlYXQ7Cgp9KSgpOwoKPC9zY3JpcHQ+PHNjcmlwdD4KCihmdW5jdGlvbigpIHsKICAndXNlIHN0cmljdCc7CgogIC8qKgogICAqIFRoZSBgPGRvbS1pZj5gIGVsZW1lbnQgd2lsbCBzdGFtcCBhIGxpZ2h0LWRvbSBgPHRlbXBsYXRlPmAgY2hpbGQgd2hlbgogICAqIHRoZSBgaWZgIHByb3BlcnR5IGJlY29tZXMgdHJ1dGh5LCBhbmQgdGhlIHRlbXBsYXRlIGNhbiB1c2UgUG9seW1lcgogICAqIGRhdGEtYmluZGluZyBhbmQgZGVjbGFyYXRpdmUgZXZlbnQgZmVhdHVyZXMgd2hlbiB1c2VkIGluIHRoZSBjb250ZXh0IG9mCiAgICogYSBQb2x5bWVyIGVsZW1lbnQncyB0ZW1wbGF0ZS4KICAgKgogICAqIFdoZW4gYGlmYCBiZWNvbWVzIGZhbHN5LCB0aGUgc3RhbXBlZCBjb250ZW50IGlzIGhpZGRlbiBidXQgbm90CiAgICogcmVtb3ZlZCBmcm9tIGRvbS4gV2hlbiBgaWZgIHN1YnNlcXVlbnRseSBiZWNvbWVzIHRydXRoeSBhZ2FpbiwgdGhlIGNvbnRlbnQKICAgKiBpcyBzaW1wbHkgcmUtc2hvd24uIFRoaXMgYXBwcm9hY2ggaXMgdXNlZCBkdWUgdG8gaXRzIGZhdm9yYWJsZSBwZXJmb3JtYW5jZQogICAqIGNoYXJhY3RlcmlzdGljczogdGhlIGV4cGVuc2Ugb2YgY3JlYXRpbmcgdGVtcGxhdGUgY29udGVudCBpcyBwYWlkIG9ubHkKICAgKiBvbmNlIGFuZCBsYXppbHkuCiAgICoKICAgKiBTZXQgdGhlIGByZXN0YW1wYCBwcm9wZXJ0eSB0byB0cnVlIHRvIGZvcmNlIHRoZSBzdGFtcGVkIGNvbnRlbnQgdG8gYmUKICAgKiBjcmVhdGVkIC8gZGVzdHJveWVkIHdoZW4gdGhlIGBpZmAgY29uZGl0aW9uIGNoYW5nZXMuCiAgICoKICAgKiBAY3VzdG9tRWxlbWVudAogICAqIEBwb2x5bWVyCiAgICogQGV4dGVuZHMgUG9seW1lci5FbGVtZW50CiAgICogQG1lbWJlcm9mIFBvbHltZXIKICAgKiBAc3VtbWFyeSBDdXN0b20gZWxlbWVudCB0aGF0IGNvbmRpdGlvbmFsbHkgc3RhbXBzIGFuZCBoaWRlcyBvciByZW1vdmVzCiAgICogICB0ZW1wbGF0ZSBjb250ZW50IGJhc2VkIG9uIGEgYm9vbGVhbiBmbGFnLgogICAqLwogIGNsYXNzIERvbUlmIGV4dGVuZHMgUG9seW1lci5FbGVtZW50IHsKCiAgICAvLyBOb3QgbmVlZGVkIHRvIGZpbmQgdGVtcGxhdGU7IGNhbiBiZSByZW1vdmVkIG9uY2UgdGhlIGFuYWx5emVyCiAgICAvLyBjYW4gZmluZCB0aGUgdGFnIG5hbWUgZnJvbSBjdXN0b21FbGVtZW50cy5kZWZpbmUgY2FsbAogICAgc3RhdGljIGdldCBpcygpIHsgcmV0dXJuICdkb20taWYnOyB9CgogICAgc3RhdGljIGdldCB0ZW1wbGF0ZSgpIHsgcmV0dXJuIG51bGw7IH0KCiAgICBzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKSB7CgogICAgICByZXR1cm4gewoKICAgICAgICAvKioKICAgICAgICAgKiBGaXJlZCB3aGVuZXZlciBET00gaXMgYWRkZWQgb3IgcmVtb3ZlZC9oaWRkZW4gYnkgdGhpcyB0ZW1wbGF0ZSAoYnkKICAgICAgICAgKiBkZWZhdWx0LCByZW5kZXJpbmcgb2NjdXJzIGxhemlseSkuICBUbyBmb3JjZSBpbW1lZGlhdGUgcmVuZGVyaW5nLCBjYWxsCiAgICAgICAgICogYHJlbmRlcmAuCiAgICAgICAgICoKICAgICAgICAgKiBAZXZlbnQgZG9tLWNoYW5nZQogICAgICAgICAqLwoKICAgICAgICAvKioKICAgICAgICAgKiBBIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoaXMgdGVtcGxhdGUgc2hvdWxkIHN0YW1wLgogICAgICAgICAqLwogICAgICAgIGlmOiB7CiAgICAgICAgICB0eXBlOiBCb29sZWFuLAogICAgICAgICAgb2JzZXJ2ZXI6ICdfX2RlYm91bmNlUmVuZGVyJwogICAgICAgIH0sCgogICAgICAgIC8qKgogICAgICAgICAqIFdoZW4gdHJ1ZSwgZWxlbWVudHMgd2lsbCBiZSByZW1vdmVkIGZyb20gRE9NIGFuZCBkaXNjYXJkZWQgd2hlbiBgaWZgCiAgICAgICAgICogYmVjb21lcyBmYWxzZSBhbmQgcmUtY3JlYXRlZCBhbmQgYWRkZWQgYmFjayB0byB0aGUgRE9NIHdoZW4gYGlmYAogICAgICAgICAqIGJlY29tZXMgdHJ1ZS4gIEJ5IGRlZmF1bHQsIHN0YW1wZWQgZWxlbWVudHMgd2lsbCBiZSBoaWRkZW4gYnV0IGxlZnQKICAgICAgICAgKiBpbiB0aGUgRE9NIHdoZW4gYGlmYCBiZWNvbWVzIGZhbHNlLCB3aGljaCBpcyBnZW5lcmFsbHkgcmVzdWx0cwogICAgICAgICAqIGluIGJldHRlciBwZXJmb3JtYW5jZS4KICAgICAgICAgKi8KICAgICAgICByZXN0YW1wOiB7CiAgICAgICAgICB0eXBlOiBCb29sZWFuLAogICAgICAgICAgb2JzZXJ2ZXI6ICdfX2RlYm91bmNlUmVuZGVyJwogICAgICAgIH0KCiAgICAgIH07CgogICAgfQoKICAgIGNvbnN0cnVjdG9yKCkgewogICAgICBzdXBlcigpOwogICAgICB0aGlzLl9fcmVuZGVyRGVib3VuY2VyID0gbnVsbDsKICAgICAgdGhpcy5fX2ludmFsaWRQcm9wcyA9IG51bGw7CiAgICAgIHRoaXMuX19pbnN0YW5jZSA9IG51bGw7CiAgICAgIHRoaXMuX2xhc3RJZiA9IGZhbHNlOwogICAgICB0aGlzLl9fY3RvciA9IG51bGw7CiAgICB9CgogICAgX19kZWJvdW5jZVJlbmRlcigpIHsKICAgICAgLy8gUmVuZGVyIGlzIGFzeW5jIGZvciAyIHJlYXNvbnM6CiAgICAgIC8vIDEuIFRvIGVsaW1pbmF0ZSBkb20gY3JlYXRpb24gdHJhc2hpbmcgaWYgdXNlciBjb2RlIHRocmFzaGVzIGBpZmAgaW4gdGhlCiAgICAgIC8vICAgIHNhbWUgdHVybi4gVGhpcyB3YXMgbW9yZSBjb21tb24gaW4gMS54IHdoZXJlIGEgY29tcG91bmQgY29tcHV0ZWQKICAgICAgLy8gICAgcHJvcGVydHkgY291bGQgcmVzdWx0IGluIHRoZSByZXN1bHQgY2hhbmdpbmcgbXVsdGlwbGUgdGltZXMsIGJ1dCBpcwogICAgICAvLyAgICBtaXRpZ2F0ZWQgdG8gYSBsYXJnZSBleHRlbnQgYnkgYmF0Y2hlZCBwcm9wZXJ0eSBwcm9jZXNzaW5nIGluIDIueC4KICAgICAgLy8gMi4gVG8gYXZvaWQgZG91YmxlIG9iamVjdCBwcm9wYWdhdGlvbiB3aGVuIGEgYmFnIGluY2x1ZGluZyB2YWx1ZXMgYm91bmQKICAgICAgLy8gICAgdG8gdGhlIGBpZmAgcHJvcGVydHkgYXMgd2VsbCBhcyBvbmUgb3IgbW9yZSBob3N0UHJvcHMgY291bGQgZW5xdWV1ZQogICAgICAvLyAgICB0aGUgPGRvbS1pZj4gdG8gZmx1c2ggYmVmb3JlIHRoZSA8dGVtcGxhdGU+J3MgaG9zdCBwcm9wZXJ0eQogICAgICAvLyAgICBmb3J3YXJkaW5nLiBJbiB0aGF0IHNjZW5hcmlvIGNyZWF0aW5nIGFuIGluc3RhbmNlIHdvdWxkIHJlc3VsdCBpbgogICAgICAvLyAgICB0aGUgaG9zdCBwcm9wcyBiZWluZyBzZXQgb25jZSwgYW5kIHRoZW4gdGhlIGVucXVldWVkIGNoYW5nZXMgb24gdGhlCiAgICAgIC8vICAgIHRlbXBsYXRlIHdvdWxkIHNldCBwcm9wZXJ0aWVzIGEgc2Vjb25kIHRpbWUsIHBvdGVudGlhbGx5IGNhdXNpbmcgYW4KICAgICAgLy8gICAgb2JqZWN0IHRvIGJlIHNldCB0byBhbiBpbnN0YW5jZSBtb3JlIHRoYW4gb25jZS4gIENyZWF0aW5nIHRoZQogICAgICAvLyAgICBpbnN0YW5jZSBhc3luYyBmcm9tIGZsdXNoaW5nIGRhdGEgZW5zdXJlcyB0aGlzIGRvZXNuJ3QgaGFwcGVuLiBJZgogICAgICAvLyAgICB3ZSB3YW50ZWQgYSBzeW5jIG9wdGlvbiBpbiB0aGUgZnV0dXJlLCBzaW1wbHkgaGF2aW5nIDxkb20taWY+IGZsdXNoCiAgICAgIC8vICAgIChvciBjbGVhcikgaXRzIHRlbXBsYXRlJ3MgcGVuZGluZyBob3N0IHByb3BlcnRpZXMgYmVmb3JlIGNyZWF0aW5nCiAgICAgIC8vICAgIHRoZSBpbnN0YW5jZSB3b3VsZCBhbHNvIGF2b2lkIHRoZSBwcm9ibGVtLgogICAgICB0aGlzLl9fcmVuZGVyRGVib3VuY2VyID0gUG9seW1lci5EZWJvdW5jZXIuZGVib3VuY2UoCiAgICAgICAgICAgIHRoaXMuX19yZW5kZXJEZWJvdW5jZXIKICAgICAgICAgICwgUG9seW1lci5Bc3luYy5taWNyb1Rhc2sKICAgICAgICAgICwgKCkgPT4gdGhpcy5fX3JlbmRlcigpKTsKICAgICAgUG9seW1lci5lbnF1ZXVlRGVib3VuY2VyKHRoaXMuX19yZW5kZXJEZWJvdW5jZXIpOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiB7dm9pZH0KICAgICAqLwogICAgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICAgIHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7CiAgICAgIGlmICghdGhpcy5wYXJlbnROb2RlIHx8CiAgICAgICAgICAodGhpcy5wYXJlbnROb2RlLm5vZGVUeXBlID09IE5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERSAmJgogICAgICAgICAgICF0aGlzLnBhcmVudE5vZGUuaG9zdCkpIHsKICAgICAgICB0aGlzLl9fdGVhcmRvd25JbnN0YW5jZSgpOwogICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICovCiAgICBjb25uZWN0ZWRDYWxsYmFjaygpIHsKICAgICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTsKICAgICAgdGhpcy5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwogICAgICBpZiAodGhpcy5pZikgewogICAgICAgIHRoaXMuX19kZWJvdW5jZVJlbmRlcigpOwogICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBGb3JjZXMgdGhlIGVsZW1lbnQgdG8gcmVuZGVyIGl0cyBjb250ZW50LiBOb3JtYWxseSByZW5kZXJpbmcgaXMKICAgICAqIGFzeW5jaHJvbm91cyB0byBhIHByb3Zva2luZyBjaGFuZ2UuIFRoaXMgaXMgZG9uZSBmb3IgZWZmaWNpZW5jeSBzbwogICAgICogdGhhdCBtdWx0aXBsZSBjaGFuZ2VzIHRyaWdnZXIgb25seSBhIHNpbmdsZSByZW5kZXIuIFRoZSByZW5kZXIgbWV0aG9kCiAgICAgKiBzaG91bGQgYmUgY2FsbGVkIGlmLCBmb3IgZXhhbXBsZSwgdGVtcGxhdGUgcmVuZGVyaW5nIGlzIHJlcXVpcmVkIHRvCiAgICAgKiB2YWxpZGF0ZSBhcHBsaWNhdGlvbiBzdGF0ZS4KICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgKi8KICAgIHJlbmRlcigpIHsKICAgICAgUG9seW1lci5mbHVzaCgpOwogICAgfQoKICAgIF9fcmVuZGVyKCkgewogICAgICBpZiAodGhpcy5pZikgewogICAgICAgIGlmICghdGhpcy5fX2Vuc3VyZUluc3RhbmNlKCkpIHsKICAgICAgICAgIC8vIE5vIHRlbXBsYXRlIGZvdW5kIHlldAogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICB0aGlzLl9zaG93SGlkZUNoaWxkcmVuKCk7CiAgICAgIH0gZWxzZSBpZiAodGhpcy5yZXN0YW1wKSB7CiAgICAgICAgdGhpcy5fX3RlYXJkb3duSW5zdGFuY2UoKTsKICAgICAgfQogICAgICBpZiAoIXRoaXMucmVzdGFtcCAmJiB0aGlzLl9faW5zdGFuY2UpIHsKICAgICAgICB0aGlzLl9zaG93SGlkZUNoaWxkcmVuKCk7CiAgICAgIH0KICAgICAgaWYgKHRoaXMuaWYgIT0gdGhpcy5fbGFzdElmKSB7CiAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnZG9tLWNoYW5nZScsIHsKICAgICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgICBjb21wb3NlZDogdHJ1ZQogICAgICAgIH0pKTsKICAgICAgICB0aGlzLl9sYXN0SWYgPSB0aGlzLmlmOwogICAgICB9CiAgICB9CgogICAgX19lbnN1cmVJbnN0YW5jZSgpIHsKICAgICAgbGV0IHBhcmVudE5vZGUgPSB0aGlzLnBhcmVudE5vZGU7CiAgICAgIC8vIEd1YXJkIGFnYWluc3QgZWxlbWVudCBiZWluZyBkZXRhY2hlZCB3aGlsZSByZW5kZXIgd2FzIHF1ZXVlZAogICAgICBpZiAocGFyZW50Tm9kZSkgewogICAgICAgIGlmICghdGhpcy5fX2N0b3IpIHsKICAgICAgICAgIGxldCB0ZW1wbGF0ZSA9IC8qKiBAdHlwZSB7SFRNTFRlbXBsYXRlRWxlbWVudH0gKi8odGhpcy5xdWVyeVNlbGVjdG9yKCd0ZW1wbGF0ZScpKTsKICAgICAgICAgIGlmICghdGVtcGxhdGUpIHsKICAgICAgICAgICAgLy8gV2FpdCB1bnRpbCBjaGlsZExpc3QgY2hhbmdlcyBhbmQgdGVtcGxhdGUgc2hvdWxkIGJlIHRoZXJlIGJ5IHRoZW4KICAgICAgICAgICAgbGV0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKCkgPT4gewogICAgICAgICAgICAgIGlmICh0aGlzLnF1ZXJ5U2VsZWN0b3IoJ3RlbXBsYXRlJykpIHsKICAgICAgICAgICAgICAgIG9ic2VydmVyLmRpc2Nvbm5lY3QoKTsKICAgICAgICAgICAgICAgIHRoaXMuX19yZW5kZXIoKTsKICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdkb20taWYgcmVxdWlyZXMgYSA8dGVtcGxhdGU+IGNoaWxkJyk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLCB7Y2hpbGRMaXN0OiB0cnVlfSk7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgIH0KICAgICAgICAgIHRoaXMuX19jdG9yID0gUG9seW1lci5UZW1wbGF0aXplLnRlbXBsYXRpemUodGVtcGxhdGUsIHRoaXMsIHsKICAgICAgICAgICAgLy8gZG9tLWlmIHRlbXBsYXRpemVyIGluc3RhbmNlcyByZXF1aXJlIGBtdXRhYmxlOiB0cnVlYCwgYXMKICAgICAgICAgICAgLy8gYF9fc3luY0hvc3RQcm9wZXJ0aWVzYCByZWxpZXMgb24gdGhhdCBiZWhhdmlvciB0byBzeW5jIG9iamVjdHMKICAgICAgICAgICAgbXV0YWJsZURhdGE6IHRydWUsCiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcCBQcm9wZXJ0eSB0byBmb3J3YXJkCiAgICAgICAgICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVmFsdWUgb2YgcHJvcGVydHkKICAgICAgICAgICAgICogQHRoaXMge3RoaXN9CiAgICAgICAgICAgICAqLwogICAgICAgICAgICBmb3J3YXJkSG9zdFByb3A6IGZ1bmN0aW9uKHByb3AsIHZhbHVlKSB7CiAgICAgICAgICAgICAgaWYgKHRoaXMuX19pbnN0YW5jZSkgewogICAgICAgICAgICAgICAgaWYgKHRoaXMuaWYpIHsKICAgICAgICAgICAgICAgICAgdGhpcy5fX2luc3RhbmNlLmZvcndhcmRIb3N0UHJvcChwcm9wLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAvLyBJZiB3ZSBoYXZlIGFuIGluc3RhbmNlIGJ1dCBhcmUgc3F1ZWxjaGluZyBob3N0IHByb3BlcnR5CiAgICAgICAgICAgICAgICAgIC8vIGZvcndhcmRpbmcgZHVlIHRvIGlmIGJlaW5nIGZhbHNlLCBub3RlIHRoZSBpbnZhbGlkYXRlZAogICAgICAgICAgICAgICAgICAvLyBwcm9wZXJ0aWVzIHNvIGBfX3N5bmNIb3N0UHJvcGVydGllc2AgY2FuIHN5bmMgdGhlbSB0aGUgbmV4dAogICAgICAgICAgICAgICAgICAvLyB0aW1lIGBpZmAgYmVjb21lcyB0cnVlCiAgICAgICAgICAgICAgICAgIHRoaXMuX19pbnZhbGlkUHJvcHMgPSB0aGlzLl9faW52YWxpZFByb3BzIHx8IE9iamVjdC5jcmVhdGUobnVsbCk7CiAgICAgICAgICAgICAgICAgIHRoaXMuX19pbnZhbGlkUHJvcHNbUG9seW1lci5QYXRoLnJvb3QocHJvcCldID0gdHJ1ZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICBpZiAoIXRoaXMuX19pbnN0YW5jZSkgewogICAgICAgICAgdGhpcy5fX2luc3RhbmNlID0gbmV3IHRoaXMuX19jdG9yKCk7CiAgICAgICAgICBwYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLl9faW5zdGFuY2Uucm9vdCwgdGhpcyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRoaXMuX19zeW5jSG9zdFByb3BlcnRpZXMoKTsKICAgICAgICAgIGxldCBjJCA9IHRoaXMuX19pbnN0YW5jZS5jaGlsZHJlbjsKICAgICAgICAgIGlmIChjJCAmJiBjJC5sZW5ndGgpIHsKICAgICAgICAgICAgLy8gRGV0ZWN0IGNhc2Ugd2hlcmUgZG9tLWlmIHdhcyByZS1hdHRhY2hlZCBpbiBuZXcgcG9zaXRpb24KICAgICAgICAgICAgbGV0IGxhc3RDaGlsZCA9IHRoaXMucHJldmlvdXNTaWJsaW5nOwogICAgICAgICAgICBpZiAobGFzdENoaWxkICE9PSBjJFtjJC5sZW5ndGgtMV0pIHsKICAgICAgICAgICAgICBmb3IgKGxldCBpPTAsIG47IChpPGMkLmxlbmd0aCkgJiYgKG49YyRbaV0pOyBpKyspIHsKICAgICAgICAgICAgICAgIHBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKG4sIHRoaXMpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICBfX3N5bmNIb3N0UHJvcGVydGllcygpIHsKICAgICAgbGV0IHByb3BzID0gdGhpcy5fX2ludmFsaWRQcm9wczsKICAgICAgaWYgKHByb3BzKSB7CiAgICAgICAgZm9yIChsZXQgcHJvcCBpbiBwcm9wcykgewogICAgICAgICAgdGhpcy5fX2luc3RhbmNlLl9zZXRQZW5kaW5nUHJvcGVydHkocHJvcCwgdGhpcy5fX2RhdGFIb3N0W3Byb3BdKTsKICAgICAgICB9CiAgICAgICAgdGhpcy5fX2ludmFsaWRQcm9wcyA9IG51bGw7CiAgICAgICAgdGhpcy5fX2luc3RhbmNlLl9mbHVzaFByb3BlcnRpZXMoKTsKICAgICAgfQogICAgfQoKICAgIF9fdGVhcmRvd25JbnN0YW5jZSgpIHsKICAgICAgaWYgKHRoaXMuX19pbnN0YW5jZSkgewogICAgICAgIGxldCBjJCA9IHRoaXMuX19pbnN0YW5jZS5jaGlsZHJlbjsKICAgICAgICBpZiAoYyQgJiYgYyQubGVuZ3RoKSB7CiAgICAgICAgICAvLyB1c2UgZmlyc3QgY2hpbGQgcGFyZW50LCBmb3IgY2FzZSB3aGVuIGRvbS1pZiBtYXkgaGF2ZSBiZWVuIGRldGFjaGVkCiAgICAgICAgICBsZXQgcGFyZW50ID0gYyRbMF0ucGFyZW50Tm9kZTsKICAgICAgICAgIC8vIEluc3RhbmNlIGNoaWxkcmVuIG1heSBiZSBkaXNjb25uZWN0ZWQgZnJvbSBwYXJlbnRzIHdoZW4gZG9tLWlmCiAgICAgICAgICAvLyBkZXRhY2hlcyBpZiBhIHRyZWUgd2FzIGlubmVySFRNTCdlZAogICAgICAgICAgaWYgKHBhcmVudCkgewogICAgICAgICAgICBmb3IgKGxldCBpPTAsIG47IChpPGMkLmxlbmd0aCkgJiYgKG49YyRbaV0pOyBpKyspIHsKICAgICAgICAgICAgICBwYXJlbnQucmVtb3ZlQ2hpbGQobik7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgdGhpcy5fX2luc3RhbmNlID0gbnVsbDsKICAgICAgICB0aGlzLl9faW52YWxpZFByb3BzID0gbnVsbDsKICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogU2hvd3Mgb3IgaGlkZXMgdGhlIHRlbXBsYXRlIGluc3RhbmNlIHRvcCBsZXZlbCBjaGlsZCBlbGVtZW50cy4gRm9yCiAgICAgKiB0ZXh0IG5vZGVzLCBgdGV4dENvbnRlbnRgIGlzIHJlbW92ZWQgd2hpbGUgImhpZGRlbiIgYW5kIHJlcGxhY2VkIHdoZW4KICAgICAqICJzaG93bi4iCiAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICogQHByb3RlY3RlZAogICAgICovCiAgICBfc2hvd0hpZGVDaGlsZHJlbigpIHsKICAgICAgbGV0IGhpZGRlbiA9IHRoaXMuX19oaWRlVGVtcGxhdGVDaGlsZHJlbl9fIHx8ICF0aGlzLmlmOwogICAgICBpZiAodGhpcy5fX2luc3RhbmNlKSB7CiAgICAgICAgdGhpcy5fX2luc3RhbmNlLl9zaG93SGlkZUNoaWxkcmVuKGhpZGRlbik7CiAgICAgIH0KICAgIH0KCiAgfQoKICBjdXN0b21FbGVtZW50cy5kZWZpbmUoRG9tSWYuaXMsIERvbUlmKTsKCiAgLyoqIEBjb25zdCAqLwogIFBvbHltZXIuRG9tSWYgPSBEb21JZjsKCn0pKCk7Cjwvc2NyaXB0PjxzY3JpcHQ+CihmdW5jdGlvbigpIHsKICAndXNlIHN0cmljdCc7CgogIC8qKgogICAqIEVsZW1lbnQgbWl4aW4gZm9yIHJlY29yZGluZyBkeW5hbWljIGFzc29jaWF0aW9ucyBiZXR3ZWVuIGl0ZW0gcGF0aHMgaW4gYQogICAqIG1hc3RlciBgaXRlbXNgIGFycmF5IGFuZCBhIGBzZWxlY3RlZGAgYXJyYXkgc3VjaCB0aGF0IHBhdGggY2hhbmdlcyB0byB0aGUKICAgKiBtYXN0ZXIgYXJyYXkgKGF0IHRoZSBob3N0KSBlbGVtZW50IG9yIGVsc2V3aGVyZSB2aWEgZGF0YS1iaW5kaW5nKSBhcmUKICAgKiBjb3JyZWN0bHkgcHJvcGFnYXRlZCB0byBpdGVtcyBpbiB0aGUgc2VsZWN0ZWQgYXJyYXkgYW5kIHZpY2UtdmVyc2EuCiAgICoKICAgKiBUaGUgYGl0ZW1zYCBwcm9wZXJ0eSBhY2NlcHRzIGFuIGFycmF5IG9mIHVzZXIgZGF0YSwgYW5kIHZpYSB0aGUKICAgKiBgc2VsZWN0KGl0ZW0pYCBhbmQgYGRlc2VsZWN0KGl0ZW0pYCBBUEksIHVwZGF0ZXMgdGhlIGBzZWxlY3RlZGAgcHJvcGVydHkKICAgKiB3aGljaCBtYXkgYmUgYm91bmQgdG8gb3RoZXIgcGFydHMgb2YgdGhlIGFwcGxpY2F0aW9uLCBhbmQgYW55IGNoYW5nZXMgdG8KICAgKiBzdWItZmllbGRzIG9mIGBzZWxlY3RlZGAgaXRlbShzKSB3aWxsIGJlIGtlcHQgaW4gc3luYyB3aXRoIGl0ZW1zIGluIHRoZQogICAqIGBpdGVtc2AgYXJyYXkuICBXaGVuIGBtdWx0aWAgaXMgZmFsc2UsIGBzZWxlY3RlZGAgaXMgYSBwcm9wZXJ0eQogICAqIHJlcHJlc2VudGluZyB0aGUgbGFzdCBzZWxlY3RlZCBpdGVtLiAgV2hlbiBgbXVsdGlgIGlzIHRydWUsIGBzZWxlY3RlZGAKICAgKiBpcyBhbiBhcnJheSBvZiBtdWx0aXBseSBzZWxlY3RlZCBpdGVtcy4KICAgKgogICAqIEBwb2x5bWVyCiAgICogQG1peGluRnVuY3Rpb24KICAgKiBAYXBwbGllc01peGluIFBvbHltZXIuRWxlbWVudE1peGluCiAgICogQG1lbWJlcm9mIFBvbHltZXIKICAgKiBAc3VtbWFyeSBFbGVtZW50IG1peGluIGZvciByZWNvcmRpbmcgZHluYW1pYyBhc3NvY2lhdGlvbnMgYmV0d2VlbiBpdGVtIHBhdGhzIGluIGEKICAgKiBtYXN0ZXIgYGl0ZW1zYCBhcnJheSBhbmQgYSBgc2VsZWN0ZWRgIGFycmF5CiAgICovCiAgbGV0IEFycmF5U2VsZWN0b3JNaXhpbiA9IFBvbHltZXIuZGVkdXBpbmdNaXhpbihzdXBlckNsYXNzID0+IHsKCiAgICAvKioKICAgICAqIEBjb25zdHJ1Y3RvcgogICAgICogQGV4dGVuZHMge3N1cGVyQ2xhc3N9CiAgICAgKiBAaW1wbGVtZW50cyB7UG9seW1lcl9FbGVtZW50TWl4aW59CiAgICAgKiBAcHJpdmF0ZQogICAgICovCiAgICBsZXQgZWxlbWVudEJhc2UgPSBQb2x5bWVyLkVsZW1lbnRNaXhpbihzdXBlckNsYXNzKTsKCiAgICAvKioKICAgICAqIEBwb2x5bWVyCiAgICAgKiBAbWl4aW5DbGFzcwogICAgICogQGltcGxlbWVudHMge1BvbHltZXJfQXJyYXlTZWxlY3Rvck1peGlufQogICAgICogQHVucmVzdHJpY3RlZAogICAgICovCiAgICBjbGFzcyBBcnJheVNlbGVjdG9yTWl4aW4gZXh0ZW5kcyBlbGVtZW50QmFzZSB7CgogICAgICBzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKSB7CgogICAgICAgIHJldHVybiB7CgogICAgICAgICAgLyoqCiAgICAgICAgICAgKiBBbiBhcnJheSBjb250YWluaW5nIGl0ZW1zIGZyb20gd2hpY2ggc2VsZWN0aW9uIHdpbGwgYmUgbWFkZS4KICAgICAgICAgICAqLwogICAgICAgICAgaXRlbXM6IHsKICAgICAgICAgICAgdHlwZTogQXJyYXksCiAgICAgICAgICB9LAoKICAgICAgICAgIC8qKgogICAgICAgICAgICogV2hlbiBgdHJ1ZWAsIG11bHRpcGxlIGl0ZW1zIG1heSBiZSBzZWxlY3RlZCBhdCBvbmNlIChpbiB0aGlzIGNhc2UsCiAgICAgICAgICAgKiBgc2VsZWN0ZWRgIGlzIGFuIGFycmF5IG9mIGN1cnJlbnRseSBzZWxlY3RlZCBpdGVtcykuICBXaGVuIGBmYWxzZWAsCiAgICAgICAgICAgKiBvbmx5IG9uZSBpdGVtIG1heSBiZSBzZWxlY3RlZCBhdCBhIHRpbWUuCiAgICAgICAgICAgKi8KICAgICAgICAgIG11bHRpOiB7CiAgICAgICAgICAgIHR5cGU6IEJvb2xlYW4sCiAgICAgICAgICAgIHZhbHVlOiBmYWxzZSwKICAgICAgICAgIH0sCgogICAgICAgICAgLyoqCiAgICAgICAgICAgKiBXaGVuIGBtdWx0aWAgaXMgdHJ1ZSwgdGhpcyBpcyBhbiBhcnJheSB0aGF0IGNvbnRhaW5zIGFueSBzZWxlY3RlZC4KICAgICAgICAgICAqIFdoZW4gYG11bHRpYCBpcyBmYWxzZSwgdGhpcyBpcyB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGl0ZW0sIG9yIGBudWxsYAogICAgICAgICAgICogaWYgbm8gaXRlbSBpcyBzZWxlY3RlZC4KICAgICAgICAgICAqIEB0eXBlIHs/KE9iamVjdHxBcnJheTwhT2JqZWN0Pil9CiAgICAgICAgICAgKi8KICAgICAgICAgIHNlbGVjdGVkOiB7CiAgICAgICAgICAgIHR5cGU6IE9iamVjdCwKICAgICAgICAgICAgbm90aWZ5OiB0cnVlCiAgICAgICAgICB9LAoKICAgICAgICAgIC8qKgogICAgICAgICAgICogV2hlbiBgbXVsdGlgIGlzIGZhbHNlLCB0aGlzIGlzIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgaXRlbSwgb3IgYG51bGxgCiAgICAgICAgICAgKiBpZiBubyBpdGVtIGlzIHNlbGVjdGVkLgogICAgICAgICAgICogQHR5cGUgez9PYmplY3R9CiAgICAgICAgICAgKi8KICAgICAgICAgIHNlbGVjdGVkSXRlbTogewogICAgICAgICAgICB0eXBlOiBPYmplY3QsCiAgICAgICAgICAgIG5vdGlmeTogdHJ1ZQogICAgICAgICAgfSwKCiAgICAgICAgICAvKioKICAgICAgICAgICAqIFdoZW4gYHRydWVgLCBjYWxsaW5nIGBzZWxlY3RgIG9uIGFuIGl0ZW0gdGhhdCBpcyBhbHJlYWR5IHNlbGVjdGVkCiAgICAgICAgICAgKiB3aWxsIGRlc2VsZWN0IHRoZSBpdGVtLgogICAgICAgICAgICovCiAgICAgICAgICB0b2dnbGU6IHsKICAgICAgICAgICAgdHlwZTogQm9vbGVhbiwKICAgICAgICAgICAgdmFsdWU6IGZhbHNlCiAgICAgICAgICB9CgogICAgICAgIH07CiAgICAgIH0KCiAgICAgIHN0YXRpYyBnZXQgb2JzZXJ2ZXJzKCkgewogICAgICAgIHJldHVybiBbJ19fdXBkYXRlU2VsZWN0aW9uKG11bHRpLCBpdGVtcy4qKSddOwogICAgICB9CgogICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICBzdXBlcigpOwogICAgICAgIHRoaXMuX19sYXN0SXRlbXMgPSBudWxsOwogICAgICAgIHRoaXMuX19sYXN0TXVsdGkgPSBudWxsOwogICAgICAgIHRoaXMuX19zZWxlY3RlZE1hcCA9IG51bGw7CiAgICAgIH0KCiAgICAgIF9fdXBkYXRlU2VsZWN0aW9uKG11bHRpLCBpdGVtc0luZm8pIHsKICAgICAgICBsZXQgcGF0aCA9IGl0ZW1zSW5mby5wYXRoOwogICAgICAgIGlmIChwYXRoID09ICdpdGVtcycpIHsKICAgICAgICAgIC8vIENhc2UgMSAtIGl0ZW1zIGFycmF5IGNoYW5nZWQsIHNvIGRpZmYgYWdhaW5zdCBwcmV2aW91cyBhcnJheSBhbmQKICAgICAgICAgIC8vIGRlc2VsZWN0IGFueSByZW1vdmVkIGl0ZW1zIGFuZCBhZGp1c3Qgc2VsZWN0ZWQgaW5kaWNlcwogICAgICAgICAgbGV0IG5ld0l0ZW1zID0gaXRlbXNJbmZvLmJhc2UgfHwgW107CiAgICAgICAgICBsZXQgbGFzdEl0ZW1zID0gdGhpcy5fX2xhc3RJdGVtczsKICAgICAgICAgIGxldCBsYXN0TXVsdGkgPSB0aGlzLl9fbGFzdE11bHRpOwogICAgICAgICAgaWYgKG11bHRpICE9PSBsYXN0TXVsdGkpIHsKICAgICAgICAgICAgdGhpcy5jbGVhclNlbGVjdGlvbigpOwogICAgICAgICAgfQogICAgICAgICAgaWYgKGxhc3RJdGVtcykgewogICAgICAgICAgICBsZXQgc3BsaWNlcyA9IFBvbHltZXIuQXJyYXlTcGxpY2UuY2FsY3VsYXRlU3BsaWNlcyhuZXdJdGVtcywgbGFzdEl0ZW1zKTsKICAgICAgICAgICAgdGhpcy5fX2FwcGx5U3BsaWNlcyhzcGxpY2VzKTsKICAgICAgICAgIH0KICAgICAgICAgIHRoaXMuX19sYXN0SXRlbXMgPSBuZXdJdGVtczsKICAgICAgICAgIHRoaXMuX19sYXN0TXVsdGkgPSBtdWx0aTsKICAgICAgICB9IGVsc2UgaWYgKGl0ZW1zSW5mby5wYXRoID09ICdpdGVtcy5zcGxpY2VzJykgewogICAgICAgICAgLy8gQ2FzZSAyIC0gZ290IHNwZWNpZmljIHNwbGljZSBpbmZvcm1hdGlvbiBkZXNjcmliaW5nIHRoZSBhcnJheSBtdXRhdGlvbjoKICAgICAgICAgIC8vIGRlc2VsZWN0IGFueSByZW1vdmVkIGl0ZW1zIGFuZCBhZGp1c3Qgc2VsZWN0ZWQgaW5kaWNlcwogICAgICAgICAgdGhpcy5fX2FwcGx5U3BsaWNlcyhpdGVtc0luZm8udmFsdWUuaW5kZXhTcGxpY2VzKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgLy8gQ2FzZSAzIC0gYW4gYXJyYXkgZWxlbWVudCB3YXMgY2hhbmdlZCwgc28gZGVzZWxlY3QgdGhlIHByZXZpb3VzCiAgICAgICAgICAvLyBpdGVtIGZvciB0aGF0IGluZGV4IGlmIGl0IHdhcyBwcmV2aW91c2x5IHNlbGVjdGVkCiAgICAgICAgICBsZXQgcGFydCA9IHBhdGguc2xpY2UoJ2l0ZW1zLicubGVuZ3RoKTsKICAgICAgICAgIGxldCBpZHggPSBwYXJzZUludChwYXJ0LCAxMCk7CiAgICAgICAgICBpZiAoKHBhcnQuaW5kZXhPZignLicpIDwgMCkgJiYgcGFydCA9PSBpZHgpIHsKICAgICAgICAgICAgdGhpcy5fX2Rlc2VsZWN0Q2hhbmdlZElkeChpZHgpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQoKICAgICAgX19hcHBseVNwbGljZXMoc3BsaWNlcykgewogICAgICAgIGxldCBzZWxlY3RlZCA9IHRoaXMuX19zZWxlY3RlZE1hcDsKICAgICAgICAvLyBBZGp1c3Qgc2VsZWN0ZWQgaW5kaWNlcyBhbmQgbWFyayByZW1vdmFscwogICAgICAgIGZvciAobGV0IGk9MDsgaTxzcGxpY2VzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICBsZXQgcyA9IHNwbGljZXNbaV07CiAgICAgICAgICBzZWxlY3RlZC5mb3JFYWNoKChpZHgsIGl0ZW0pID0+IHsKICAgICAgICAgICAgaWYgKGlkeCA8IHMuaW5kZXgpIHsKICAgICAgICAgICAgICAvLyBubyBjaGFuZ2UKICAgICAgICAgICAgfSBlbHNlIGlmIChpZHggPj0gcy5pbmRleCArIHMucmVtb3ZlZC5sZW5ndGgpIHsKICAgICAgICAgICAgICAvLyBhZGp1c3QgaW5kZXgKICAgICAgICAgICAgICBzZWxlY3RlZC5zZXQoaXRlbSwgaWR4ICsgcy5hZGRlZENvdW50IC0gcy5yZW1vdmVkLmxlbmd0aCk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgLy8gcmVtb3ZlIGluZGV4CiAgICAgICAgICAgICAgc2VsZWN0ZWQuc2V0KGl0ZW0sIC0xKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgICBmb3IgKGxldCBqPTA7IGo8cy5hZGRlZENvdW50OyBqKyspIHsKICAgICAgICAgICAgbGV0IGlkeCA9IHMuaW5kZXggKyBqOwogICAgICAgICAgICBpZiAoc2VsZWN0ZWQuaGFzKHRoaXMuaXRlbXNbaWR4XSkpIHsKICAgICAgICAgICAgICBzZWxlY3RlZC5zZXQodGhpcy5pdGVtc1tpZHhdLCBpZHgpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIC8vIFVwZGF0ZSBsaW5rZWQgcGF0aHMKICAgICAgICB0aGlzLl9fdXBkYXRlTGlua3MoKTsKICAgICAgICAvLyBSZW1vdmUgc2VsZWN0ZWQgaXRlbXMgdGhhdCB3ZXJlIHJlbW92ZWQgZnJvbSB0aGUgaXRlbXMgYXJyYXkKICAgICAgICBsZXQgc2lkeCA9IDA7CiAgICAgICAgc2VsZWN0ZWQuZm9yRWFjaCgoaWR4LCBpdGVtKSA9PiB7CiAgICAgICAgICBpZiAoaWR4IDwgMCkgewogICAgICAgICAgICBpZiAodGhpcy5tdWx0aSkgewogICAgICAgICAgICAgIHRoaXMuc3BsaWNlKCdzZWxlY3RlZCcsIHNpZHgsIDEpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWQgPSB0aGlzLnNlbGVjdGVkSXRlbSA9IG51bGw7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgc2VsZWN0ZWQuZGVsZXRlKGl0ZW0pOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgc2lkeCsrOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9CgogICAgICBfX3VwZGF0ZUxpbmtzKCkgewogICAgICAgIHRoaXMuX19kYXRhTGlua2VkUGF0aHMgPSB7fTsKICAgICAgICBpZiAodGhpcy5tdWx0aSkgewogICAgICAgICAgbGV0IHNpZHggPSAwOwogICAgICAgICAgdGhpcy5fX3NlbGVjdGVkTWFwLmZvckVhY2goaWR4ID0+IHsKICAgICAgICAgICAgaWYgKGlkeCA+PSAwKSB7CiAgICAgICAgICAgICAgdGhpcy5saW5rUGF0aHMoJ2l0ZW1zLicgKyBpZHgsICdzZWxlY3RlZC4nICsgc2lkeCsrKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRoaXMuX19zZWxlY3RlZE1hcC5mb3JFYWNoKGlkeCA9PiB7CiAgICAgICAgICAgIHRoaXMubGlua1BhdGhzKCdzZWxlY3RlZCcsICdpdGVtcy4nICsgaWR4KTsKICAgICAgICAgICAgdGhpcy5saW5rUGF0aHMoJ3NlbGVjdGVkSXRlbScsICdpdGVtcy4nICsgaWR4KTsKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIENsZWFycyB0aGUgc2VsZWN0aW9uIHN0YXRlLgogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKi8KICAgICAgY2xlYXJTZWxlY3Rpb24oKSB7CiAgICAgICAgLy8gVW5iaW5kIHByZXZpb3VzIHNlbGVjdGlvbgogICAgICAgIHRoaXMuX19kYXRhTGlua2VkUGF0aHMgPSB7fTsKICAgICAgICAvLyBUaGUgc2VsZWN0ZWQgbWFwIHN0b3JlcyAzIHBpZWNlcyBvZiBpbmZvcm1hdGlvbjoKICAgICAgICAvLyBrZXk6IGl0ZW1zIGFycmF5IG9iamVjdAogICAgICAgIC8vIHZhbHVlOiBpdGVtcyBhcnJheSBpbmRleAogICAgICAgIC8vIG9yZGVyOiBzZWxlY3RlZCBhcnJheSBpbmRleAogICAgICAgIHRoaXMuX19zZWxlY3RlZE1hcCA9IG5ldyBNYXAoKTsKICAgICAgICAvLyBJbml0aWFsaXplIHNlbGVjdGlvbgogICAgICAgIHRoaXMuc2VsZWN0ZWQgPSB0aGlzLm11bHRpID8gW10gOiBudWxsOwogICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtID0gbnVsbDsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIFJldHVybnMgd2hldGhlciB0aGUgaXRlbSBpcyBjdXJyZW50bHkgc2VsZWN0ZWQuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7Kn0gaXRlbSBJdGVtIGZyb20gYGl0ZW1zYCBhcnJheSB0byB0ZXN0CiAgICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIGl0ZW0gaXMgc2VsZWN0ZWQKICAgICAgICovCiAgICAgIGlzU2VsZWN0ZWQoaXRlbSkgewogICAgICAgIHJldHVybiB0aGlzLl9fc2VsZWN0ZWRNYXAuaGFzKGl0ZW0pOwogICAgICB9CgogICAgICAvKioKICAgICAgICogUmV0dXJucyB3aGV0aGVyIHRoZSBpdGVtIGlzIGN1cnJlbnRseSBzZWxlY3RlZC4KICAgICAgICoKICAgICAgICogQHBhcmFtIHtudW1iZXJ9IGlkeCBJbmRleCBmcm9tIGBpdGVtc2AgYXJyYXkgdG8gdGVzdAogICAgICAgKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSBpdGVtIGlzIHNlbGVjdGVkCiAgICAgICAqLwogICAgICBpc0luZGV4U2VsZWN0ZWQoaWR4KSB7CiAgICAgICAgcmV0dXJuIHRoaXMuaXNTZWxlY3RlZCh0aGlzLml0ZW1zW2lkeF0pOwogICAgICB9CgogICAgICBfX2Rlc2VsZWN0Q2hhbmdlZElkeChpZHgpIHsKICAgICAgICBsZXQgc2lkeCA9IHRoaXMuX19zZWxlY3RlZEluZGV4Rm9ySXRlbUluZGV4KGlkeCk7CiAgICAgICAgaWYgKHNpZHggPj0gMCkgewogICAgICAgICAgbGV0IGkgPSAwOwogICAgICAgICAgdGhpcy5fX3NlbGVjdGVkTWFwLmZvckVhY2goKGlkeCwgaXRlbSkgPT4gewogICAgICAgICAgICBpZiAoc2lkeCA9PSBpKyspIHsKICAgICAgICAgICAgICB0aGlzLmRlc2VsZWN0KGl0ZW0pOwogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIF9fc2VsZWN0ZWRJbmRleEZvckl0ZW1JbmRleChpZHgpIHsKICAgICAgICBsZXQgc2VsZWN0ZWQgPSB0aGlzLl9fZGF0YUxpbmtlZFBhdGhzWydpdGVtcy4nICsgaWR4XTsKICAgICAgICBpZiAoc2VsZWN0ZWQpIHsKICAgICAgICAgIHJldHVybiBwYXJzZUludChzZWxlY3RlZC5zbGljZSgnc2VsZWN0ZWQuJy5sZW5ndGgpLCAxMCk7CiAgICAgICAgfQogICAgICB9CgogICAgICAvKioKICAgICAgICogRGVzZWxlY3RzIHRoZSBnaXZlbiBpdGVtIGlmIGl0IGlzIGFscmVhZHkgc2VsZWN0ZWQuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7Kn0gaXRlbSBJdGVtIGZyb20gYGl0ZW1zYCBhcnJheSB0byBkZXNlbGVjdAogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKi8KICAgICAgZGVzZWxlY3QoaXRlbSkgewogICAgICAgIGxldCBpZHggPSB0aGlzLl9fc2VsZWN0ZWRNYXAuZ2V0KGl0ZW0pOwogICAgICAgIGlmIChpZHggPj0gMCkgewogICAgICAgICAgdGhpcy5fX3NlbGVjdGVkTWFwLmRlbGV0ZShpdGVtKTsKICAgICAgICAgIGxldCBzaWR4OwogICAgICAgICAgaWYgKHRoaXMubXVsdGkpIHsKICAgICAgICAgICAgc2lkeCA9IHRoaXMuX19zZWxlY3RlZEluZGV4Rm9ySXRlbUluZGV4KGlkeCk7CiAgICAgICAgICB9CiAgICAgICAgICB0aGlzLl9fdXBkYXRlTGlua3MoKTsKICAgICAgICAgIGlmICh0aGlzLm11bHRpKSB7CiAgICAgICAgICAgIHRoaXMuc3BsaWNlKCdzZWxlY3RlZCcsIHNpZHgsIDEpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGhpcy5zZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWRJdGVtID0gbnVsbDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBEZXNlbGVjdHMgdGhlIGdpdmVuIGluZGV4IGlmIGl0IGlzIGFscmVhZHkgc2VsZWN0ZWQuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBpZHggSW5kZXggZnJvbSBgaXRlbXNgIGFycmF5IHRvIGRlc2VsZWN0CiAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAqLwogICAgICBkZXNlbGVjdEluZGV4KGlkeCkgewogICAgICAgIHRoaXMuZGVzZWxlY3QodGhpcy5pdGVtc1tpZHhdKTsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIFNlbGVjdHMgdGhlIGdpdmVuIGl0ZW0uICBXaGVuIGB0b2dnbGVgIGlzIHRydWUsIHRoaXMgd2lsbCBhdXRvbWF0aWNhbGx5CiAgICAgICAqIGRlc2VsZWN0IHRoZSBpdGVtIGlmIGFscmVhZHkgc2VsZWN0ZWQuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7Kn0gaXRlbSBJdGVtIGZyb20gYGl0ZW1zYCBhcnJheSB0byBzZWxlY3QKICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICovCiAgICAgIHNlbGVjdChpdGVtKSB7CiAgICAgICAgdGhpcy5zZWxlY3RJbmRleCh0aGlzLml0ZW1zLmluZGV4T2YoaXRlbSkpOwogICAgICB9CgogICAgICAvKioKICAgICAgICogU2VsZWN0cyB0aGUgZ2l2ZW4gaW5kZXguICBXaGVuIGB0b2dnbGVgIGlzIHRydWUsIHRoaXMgd2lsbCBhdXRvbWF0aWNhbGx5CiAgICAgICAqIGRlc2VsZWN0IHRoZSBpdGVtIGlmIGFscmVhZHkgc2VsZWN0ZWQuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBpZHggSW5kZXggZnJvbSBgaXRlbXNgIGFycmF5IHRvIHNlbGVjdAogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKi8KICAgICAgc2VsZWN0SW5kZXgoaWR4KSB7CiAgICAgICAgbGV0IGl0ZW0gPSB0aGlzLml0ZW1zW2lkeF07CiAgICAgICAgaWYgKCF0aGlzLmlzU2VsZWN0ZWQoaXRlbSkpIHsKICAgICAgICAgIGlmICghdGhpcy5tdWx0aSkgewogICAgICAgICAgICB0aGlzLl9fc2VsZWN0ZWRNYXAuY2xlYXIoKTsKICAgICAgICAgIH0KICAgICAgICAgIHRoaXMuX19zZWxlY3RlZE1hcC5zZXQoaXRlbSwgaWR4KTsKICAgICAgICAgIHRoaXMuX191cGRhdGVMaW5rcygpOwogICAgICAgICAgaWYgKHRoaXMubXVsdGkpIHsKICAgICAgICAgICAgdGhpcy5wdXNoKCdzZWxlY3RlZCcsIGl0ZW0pOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGhpcy5zZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWRJdGVtID0gaXRlbTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKHRoaXMudG9nZ2xlKSB7CiAgICAgICAgICB0aGlzLmRlc2VsZWN0SW5kZXgoaWR4KTsKICAgICAgICB9CiAgICAgIH0KCiAgICB9CgogICAgcmV0dXJuIEFycmF5U2VsZWN0b3JNaXhpbjsKCiAgfSk7CgogIC8vIGV4cG9ydCBtaXhpbgogIFBvbHltZXIuQXJyYXlTZWxlY3Rvck1peGluID0gQXJyYXlTZWxlY3Rvck1peGluOwoKICAvKioKICAgKiBAY29uc3RydWN0b3IKICAgKiBAZXh0ZW5kcyB7UG9seW1lci5FbGVtZW50fQogICAqIEBpbXBsZW1lbnRzIHtQb2x5bWVyX0FycmF5U2VsZWN0b3JNaXhpbn0KICAgKiBAcHJpdmF0ZQogICAqLwogIGxldCBiYXNlQXJyYXlTZWxlY3RvciA9IEFycmF5U2VsZWN0b3JNaXhpbihQb2x5bWVyLkVsZW1lbnQpOwoKICAvKioKICAgKiBFbGVtZW50IGltcGxlbWVudGluZyB0aGUgYFBvbHltZXIuQXJyYXlTZWxlY3RvcmAgbWl4aW4sIHdoaWNoIHJlY29yZHMKICAgKiBkeW5hbWljIGFzc29jaWF0aW9ucyBiZXR3ZWVuIGl0ZW0gcGF0aHMgaW4gYSBtYXN0ZXIgYGl0ZW1zYCBhcnJheSBhbmQgYQogICAqIGBzZWxlY3RlZGAgYXJyYXkgc3VjaCB0aGF0IHBhdGggY2hhbmdlcyB0byB0aGUgbWFzdGVyIGFycmF5IChhdCB0aGUgaG9zdCkKICAgKiBlbGVtZW50IG9yIGVsc2V3aGVyZSB2aWEgZGF0YS1iaW5kaW5nKSBhcmUgY29ycmVjdGx5IHByb3BhZ2F0ZWQgdG8gaXRlbXMKICAgKiBpbiB0aGUgc2VsZWN0ZWQgYXJyYXkgYW5kIHZpY2UtdmVyc2EuCiAgICoKICAgKiBUaGUgYGl0ZW1zYCBwcm9wZXJ0eSBhY2NlcHRzIGFuIGFycmF5IG9mIHVzZXIgZGF0YSwgYW5kIHZpYSB0aGUKICAgKiBgc2VsZWN0KGl0ZW0pYCBhbmQgYGRlc2VsZWN0KGl0ZW0pYCBBUEksIHVwZGF0ZXMgdGhlIGBzZWxlY3RlZGAgcHJvcGVydHkKICAgKiB3aGljaCBtYXkgYmUgYm91bmQgdG8gb3RoZXIgcGFydHMgb2YgdGhlIGFwcGxpY2F0aW9uLCBhbmQgYW55IGNoYW5nZXMgdG8KICAgKiBzdWItZmllbGRzIG9mIGBzZWxlY3RlZGAgaXRlbShzKSB3aWxsIGJlIGtlcHQgaW4gc3luYyB3aXRoIGl0ZW1zIGluIHRoZQogICAqIGBpdGVtc2AgYXJyYXkuICBXaGVuIGBtdWx0aWAgaXMgZmFsc2UsIGBzZWxlY3RlZGAgaXMgYSBwcm9wZXJ0eQogICAqIHJlcHJlc2VudGluZyB0aGUgbGFzdCBzZWxlY3RlZCBpdGVtLiAgV2hlbiBgbXVsdGlgIGlzIHRydWUsIGBzZWxlY3RlZGAKICAgKiBpcyBhbiBhcnJheSBvZiBtdWx0aXBseSBzZWxlY3RlZCBpdGVtcy4KICAgKgogICAqIEV4YW1wbGU6CiAgICoKICAgKiBgYGBodG1sCiAgICogPGRvbS1tb2R1bGUgaWQ9ImVtcGxveWVlLWxpc3QiPgogICAqCiAgICogICA8dGVtcGxhdGU+CiAgICoKICAgKiAgICAgPGRpdj4gRW1wbG95ZWUgbGlzdDogPC9kaXY+CiAgICogICAgIDxkb20tcmVwZWF0IGlkPSJlbXBsb3llZUxpc3QiIGl0ZW1zPSJ7e2VtcGxveWVlc319Ij4KICAgKiAgICAgICA8dGVtcGxhdGU+CiAgICogICAgICAgICA8ZGl2PkZpcnN0IG5hbWU6IDxzcGFuPnt7aXRlbS5maXJzdH19PC9zcGFuPjwvZGl2PgogICAqICAgICAgICAgICA8ZGl2Pkxhc3QgbmFtZTogPHNwYW4+e3tpdGVtLmxhc3R9fTwvc3Bhbj48L2Rpdj4KICAgKiAgICAgICAgICAgPGJ1dHRvbiBvbi1jbGljaz0idG9nZ2xlU2VsZWN0aW9uIj5TZWxlY3Q8L2J1dHRvbj4KICAgKiAgICAgICA8L3RlbXBsYXRlPgogICAqICAgICA8L2RvbS1yZXBlYXQ+CiAgICoKICAgKiAgICAgPGFycmF5LXNlbGVjdG9yIGlkPSJzZWxlY3RvciIgaXRlbXM9Int7ZW1wbG95ZWVzfX0iIHNlbGVjdGVkPSJ7e3NlbGVjdGVkfX0iIG11bHRpIHRvZ2dsZT48L2FycmF5LXNlbGVjdG9yPgogICAqCiAgICogICAgIDxkaXY+IFNlbGVjdGVkIGVtcGxveWVlczogPC9kaXY+CiAgICogICAgIDxkb20tcmVwZWF0IGl0ZW1zPSJ7e3NlbGVjdGVkfX0iPgogICAqICAgICAgIDx0ZW1wbGF0ZT4KICAgKiAgICAgICAgIDxkaXY+Rmlyc3QgbmFtZTogPHNwYW4+e3tpdGVtLmZpcnN0fX08L3NwYW4+PC9kaXY+CiAgICogICAgICAgICA8ZGl2Pkxhc3QgbmFtZTogPHNwYW4+e3tpdGVtLmxhc3R9fTwvc3Bhbj48L2Rpdj4KICAgKiAgICAgICA8L3RlbXBsYXRlPgogICAqICAgICA8L2RvbS1yZXBlYXQ+CiAgICoKICAgKiAgIDwvdGVtcGxhdGU+CiAgICoKICAgKiA8L2RvbS1tb2R1bGU+CiAgICogYGBgCiAgICoKICAgKiBgYGBqcwogICAqY2xhc3MgRW1wbG95ZWVMaXN0IGV4dGVuZHMgUG9seW1lci5FbGVtZW50IHsKICAgKiAgc3RhdGljIGdldCBpcygpIHsgcmV0dXJuICdlbXBsb3llZS1saXN0JzsgfQogICAqICBzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKSB7CiAgICogICAgcmV0dXJuIHsKICAgKiAgICAgIGVtcGxveWVlczogewogICAqICAgICAgICB2YWx1ZSgpIHsKICAgKiAgICAgICAgICByZXR1cm4gWwogICAqICAgICAgICAgICAge2ZpcnN0OiAnQm9iJywgbGFzdDogJ1NtaXRoJ30sCiAgICogICAgICAgICAgICB7Zmlyc3Q6ICdTYWxseScsIGxhc3Q6ICdKb2huc29uJ30sCiAgICogICAgICAgICAgICAuLi4KICAgKiAgICAgICAgICBdOwogICAqICAgICAgICB9CiAgICogICAgICB9CiAgICogICAgfTsKICAgKiAgfQogICAqICB0b2dnbGVTZWxlY3Rpb24oZSkgewogICAqICAgIGxldCBpdGVtID0gdGhpcy4kLmVtcGxveWVlTGlzdC5pdGVtRm9yRWxlbWVudChlLnRhcmdldCk7CiAgICogICAgdGhpcy4kLnNlbGVjdG9yLnNlbGVjdChpdGVtKTsKICAgKiAgfQogICAqfQogICAqIGBgYAogICAqCiAgICogQHBvbHltZXIKICAgKiBAY3VzdG9tRWxlbWVudAogICAqIEBleHRlbmRzIHtiYXNlQXJyYXlTZWxlY3Rvcn0KICAgKiBAYXBwbGllc01peGluIFBvbHltZXIuQXJyYXlTZWxlY3Rvck1peGluCiAgICogQG1lbWJlcm9mIFBvbHltZXIKICAgKiBAc3VtbWFyeSBDdXN0b20gZWxlbWVudCB0aGF0IGxpbmtzIHBhdGhzIGJldHdlZW4gYW4gaW5wdXQgYGl0ZW1zYCBhcnJheSBhbmQKICAgKiAgIGFuIG91dHB1dCBgc2VsZWN0ZWRgIGl0ZW0gb3IgYXJyYXkgYmFzZWQgb24gY2FsbHMgdG8gaXRzIHNlbGVjdGlvbiBBUEkuCiAgICovCiAgY2xhc3MgQXJyYXlTZWxlY3RvciBleHRlbmRzIGJhc2VBcnJheVNlbGVjdG9yIHsKICAgIC8vIE5vdCBuZWVkZWQgdG8gZmluZCB0ZW1wbGF0ZTsgY2FuIGJlIHJlbW92ZWQgb25jZSB0aGUgYW5hbHl6ZXIKICAgIC8vIGNhbiBmaW5kIHRoZSB0YWcgbmFtZSBmcm9tIGN1c3RvbUVsZW1lbnRzLmRlZmluZSBjYWxsCiAgICBzdGF0aWMgZ2V0IGlzKCkgeyByZXR1cm4gJ2FycmF5LXNlbGVjdG9yJzsgfQogIH0KICBjdXN0b21FbGVtZW50cy5kZWZpbmUoQXJyYXlTZWxlY3Rvci5pcywgQXJyYXlTZWxlY3Rvcik7CgogIC8qKiBAY29uc3QgKi8KICBQb2x5bWVyLkFycmF5U2VsZWN0b3IgPSBBcnJheVNlbGVjdG9yOwoKfSkoKTsKCjwvc2NyaXB0PjxzY3JpcHQ+KGZ1bmN0aW9uKCl7LyoKCkNvcHlyaWdodCAoYykgMjAxNyBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuClRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQKVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQKVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0CkNvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvCnN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiovCid1c2Ugc3RyaWN0Jzt2YXIgYz1udWxsLGY9d2luZG93LkhUTUxJbXBvcnRzJiZ3aW5kb3cuSFRNTEltcG9ydHMud2hlblJlYWR5fHxudWxsLGc7ZnVuY3Rpb24gaChhKXtyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24oKXtmP2YoYSk6KGN8fChjPW5ldyBQcm9taXNlKGZ1bmN0aW9uKGEpe2c9YX0pLCJjb21wbGV0ZSI9PT1kb2N1bWVudC5yZWFkeVN0YXRlP2coKTpkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJyZWFkeXN0YXRlY2hhbmdlIixmdW5jdGlvbigpeyJjb21wbGV0ZSI9PT1kb2N1bWVudC5yZWFkeVN0YXRlJiZnKCl9KSksYy50aGVuKGZ1bmN0aW9uKCl7YSYmYSgpfSkpfSl9O3ZhciBrPW51bGwsbD1udWxsO2Z1bmN0aW9uIG0oKXt0aGlzLmN1c3RvbVN0eWxlcz1bXTt0aGlzLmVucXVldWVkPSExO2goZnVuY3Rpb24oKXt3aW5kb3cuU2hhZHlDU1MuZmx1c2hDdXN0b21TdHlsZXMmJndpbmRvdy5TaGFkeUNTUy5mbHVzaEN1c3RvbVN0eWxlcygpfSl9ZnVuY3Rpb24gbihhKXshYS5lbnF1ZXVlZCYmbCYmKGEuZW5xdWV1ZWQ9ITAsaChsKSl9bS5wcm90b3R5cGUuYz1mdW5jdGlvbihhKXthLl9fc2VlbkJ5U2hhZHlDU1N8fChhLl9fc2VlbkJ5U2hhZHlDU1M9ITAsdGhpcy5jdXN0b21TdHlsZXMucHVzaChhKSxuKHRoaXMpKX07bS5wcm90b3R5cGUuYj1mdW5jdGlvbihhKXtpZihhLl9fc2hhZHlDU1NDYWNoZWRTdHlsZSlyZXR1cm4gYS5fX3NoYWR5Q1NTQ2FjaGVkU3R5bGU7dmFyIGI7YS5nZXRTdHlsZT9iPWEuZ2V0U3R5bGUoKTpiPWE7cmV0dXJuIGJ9OwptLnByb3RvdHlwZS5hPWZ1bmN0aW9uKCl7Zm9yKHZhciBhPXRoaXMuY3VzdG9tU3R5bGVzLGI9MDtiPGEubGVuZ3RoO2IrKyl7dmFyIGQ9YVtiXTtpZighZC5fX3NoYWR5Q1NTQ2FjaGVkU3R5bGUpe3ZhciBlPXRoaXMuYihkKTtlJiYoZT1lLl9fYXBwbGllZEVsZW1lbnR8fGUsayYmayhlKSxkLl9fc2hhZHlDU1NDYWNoZWRTdHlsZT1lKX19cmV0dXJuIGF9O20ucHJvdG90eXBlLmFkZEN1c3RvbVN0eWxlPW0ucHJvdG90eXBlLmM7bS5wcm90b3R5cGUuZ2V0U3R5bGVGb3JDdXN0b21TdHlsZT1tLnByb3RvdHlwZS5iO20ucHJvdG90eXBlLnByb2Nlc3NTdHlsZXM9bS5wcm90b3R5cGUuYTsKT2JqZWN0LmRlZmluZVByb3BlcnRpZXMobS5wcm90b3R5cGUse3RyYW5zZm9ybUNhbGxiYWNrOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4ga30sc2V0OmZ1bmN0aW9uKGEpe2s9YX19LHZhbGlkYXRlQ2FsbGJhY2s6e2dldDpmdW5jdGlvbigpe3JldHVybiBsfSxzZXQ6ZnVuY3Rpb24oYSl7dmFyIGI9ITE7bHx8KGI9ITApO2w9YTtiJiZuKHRoaXMpfX19KTtmdW5jdGlvbiBwKGEsYil7Zm9yKHZhciBkIGluIGIpbnVsbD09PWQ/YS5zdHlsZS5yZW1vdmVQcm9wZXJ0eShkKTphLnN0eWxlLnNldFByb3BlcnR5KGQsYltkXSl9O3ZhciBxPSEod2luZG93LlNoYWR5RE9NJiZ3aW5kb3cuU2hhZHlET00uaW5Vc2UpLHI7ZnVuY3Rpb24gdChhKXtyPWEmJmEuc2hpbWNzc3Byb3BlcnRpZXM/ITE6cXx8IShuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9BcHBsZVdlYktpdFwvNjAxfEVkZ2VcLzE1Lyl8fCF3aW5kb3cuQ1NTfHwhQ1NTLnN1cHBvcnRzfHwhQ1NTLnN1cHBvcnRzKCJib3gtc2hhZG93IiwiMCAwIDAgdmFyKC0tZm9vKSIpKX12YXIgdTt3aW5kb3cuU2hhZHlDU1MmJnZvaWQgMCE9PXdpbmRvdy5TaGFkeUNTUy5jc3NCdWlsZCYmKHU9d2luZG93LlNoYWR5Q1NTLmNzc0J1aWxkKTt2YXIgdj0hKCF3aW5kb3cuU2hhZHlDU1N8fCF3aW5kb3cuU2hhZHlDU1MuZGlzYWJsZVJ1bnRpbWUpOwp3aW5kb3cuU2hhZHlDU1MmJnZvaWQgMCE9PXdpbmRvdy5TaGFkeUNTUy5uYXRpdmVDc3M/cj13aW5kb3cuU2hhZHlDU1MubmF0aXZlQ3NzOndpbmRvdy5TaGFkeUNTUz8odCh3aW5kb3cuU2hhZHlDU1MpLHdpbmRvdy5TaGFkeUNTUz12b2lkIDApOnQod2luZG93LldlYkNvbXBvbmVudHMmJndpbmRvdy5XZWJDb21wb25lbnRzLmZsYWdzKTt2YXIgdz1yLHg9dTt2YXIgeT1uZXcgbTt3aW5kb3cuU2hhZHlDU1N8fCh3aW5kb3cuU2hhZHlDU1M9e3ByZXBhcmVUZW1wbGF0ZTpmdW5jdGlvbigpe30scHJlcGFyZVRlbXBsYXRlRG9tOmZ1bmN0aW9uKCl7fSxwcmVwYXJlVGVtcGxhdGVTdHlsZXM6ZnVuY3Rpb24oKXt9LHN0eWxlU3VidHJlZTpmdW5jdGlvbihhLGIpe3kuYSgpO3AoYSxiKX0sc3R5bGVFbGVtZW50OmZ1bmN0aW9uKCl7eS5hKCl9LHN0eWxlRG9jdW1lbnQ6ZnVuY3Rpb24oYSl7eS5hKCk7cChkb2N1bWVudC5ib2R5LGEpfSxnZXRDb21wdXRlZFN0eWxlVmFsdWU6ZnVuY3Rpb24oYSxiKXtyZXR1cm4oYT13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShhKS5nZXRQcm9wZXJ0eVZhbHVlKGIpKT9hLnRyaW0oKToiIn0sZmx1c2hDdXN0b21TdHlsZXM6ZnVuY3Rpb24oKXt9LG5hdGl2ZUNzczp3LG5hdGl2ZVNoYWRvdzpxLGNzc0J1aWxkOngsZGlzYWJsZVJ1bnRpbWU6dn0pO3dpbmRvdy5TaGFkeUNTUy5DdXN0b21TdHlsZUludGVyZmFjZT15O30pLmNhbGwodGhpcyk7CgoKPC9zY3JpcHQ+PHNjcmlwdD4KKGZ1bmN0aW9uKCkgewogICd1c2Ugc3RyaWN0JzsKCiAgY29uc3QgYXR0ciA9ICdpbmNsdWRlJzsKCiAgY29uc3QgQ3VzdG9tU3R5bGVJbnRlcmZhY2UgPSB3aW5kb3cuU2hhZHlDU1MuQ3VzdG9tU3R5bGVJbnRlcmZhY2U7CgogIC8qKgogICAqIEN1c3RvbSBlbGVtZW50IGZvciBkZWZpbmluZyBzdHlsZXMgaW4gdGhlIG1haW4gZG9jdW1lbnQgdGhhdCBjYW4gdGFrZQogICAqIGFkdmFudGFnZSBvZiBbc2hhZHkgRE9NXShodHRwczovL2dpdGh1Yi5jb20vd2ViY29tcG9uZW50cy9zaGFkeWNzcykgc2hpbXMKICAgKiBmb3Igc3R5bGUgZW5jYXBzdWxhdGlvbiwgY3VzdG9tIHByb3BlcnRpZXMsIGFuZCBjdXN0b20gbWl4aW5zLgogICAqCiAgICogLSBEb2N1bWVudCBzdHlsZXMgZGVmaW5lZCBpbiBhIGA8Y3VzdG9tLXN0eWxlPmAgYXJlIHNoaW1tZWQgdG8gZW5zdXJlIHRoZXkKICAgKiAgIGRvIG5vdCBsZWFrIGludG8gbG9jYWwgRE9NIHdoZW4gcnVubmluZyBvbiBicm93c2VycyB3aXRob3V0IG5hdGl2ZQogICAqICAgU2hhZG93IERPTS4KICAgKiAtIEN1c3RvbSBwcm9wZXJ0aWVzIGNhbiBiZSBkZWZpbmVkIGluIGEgYDxjdXN0b20tc3R5bGU+YC4gVXNlIHRoZSBgaHRtbGAgc2VsZWN0b3IKICAgKiAgIHRvIGRlZmluZSBjdXN0b20gcHJvcGVydGllcyB0aGF0IGFwcGx5IHRvIGFsbCBjdXN0b20gZWxlbWVudHMuCiAgICogLSBDdXN0b20gbWl4aW5zIGNhbiBiZSBkZWZpbmVkIGluIGEgYDxjdXN0b20tc3R5bGU+YCwgaWYgeW91IGltcG9ydCB0aGUgb3B0aW9uYWwKICAgKiAgIFthcHBseSBzaGltXShodHRwczovL2dpdGh1Yi5jb20vd2ViY29tcG9uZW50cy9zaGFkeWNzcyNhYm91dC1hcHBseXNoaW0pCiAgICogICAoYHNoYWR5Y3NzL2FwcGx5LXNoaW0uaHRtbGApLgogICAqCiAgICogVG8gdXNlOgogICAqCiAgICogLSBJbXBvcnQgYGN1c3RvbS1zdHlsZS5odG1sYC4KICAgKiAtIFBsYWNlIGEgYDxjdXN0b20tc3R5bGU+YCBlbGVtZW50IGluIHRoZSBtYWluIGRvY3VtZW50LCB3cmFwcGluZyBhbiBpbmxpbmUgYDxzdHlsZT5gIHRhZyB0aGF0CiAgICogICBjb250YWlucyB0aGUgQ1NTIHJ1bGVzIHlvdSB3YW50IHRvIHNoaW0uCiAgICoKICAgKiBGb3IgZXhhbXBsZToKICAgKgogICAqIGBgYGh0bWwKICAgKiA8IS0tIGltcG9ydCBhcHBseSBzaGltLS1vbmx5IHJlcXVpcmVkIGlmIHVzaW5nIG1peGlucyAtLT4KICAgKiA8bGluayByZWw9ImltcG9ydCIgaHJlZj0iYm93ZXJfY29tcG9uZW50cy9zaGFkeWNzcy9hcHBseS1zaGltLmh0bWwiPgogICAqIDwhLS0gaW1wb3J0IGN1c3RvbS1zdHlsZSBlbGVtZW50IC0tPgogICAqIDxsaW5rIHJlbD0iaW1wb3J0IiBocmVmPSJib3dlcl9jb21wb25lbnRzL3BvbHltZXIvbGliL2VsZW1lbnRzL2N1c3RvbS1zdHlsZS5odG1sIj4KICAgKgogICAqIDxjdXN0b20tc3R5bGU+CiAgICogICA8c3R5bGU+CiAgICogICAgIGh0bWwgewogICAqICAgICAgIC0tY3VzdG9tLWNvbG9yOiBibHVlOwogICAqICAgICAgIC0tY3VzdG9tLW1peGluOiB7CiAgICogICAgICAgICBmb250LXdlaWdodDogYm9sZDsKICAgKiAgICAgICAgIGNvbG9yOiByZWQ7CiAgICogICAgICAgfTsKICAgKiAgICAgfQogICAqICAgPC9zdHlsZT4KICAgKiA8L2N1c3RvbS1zdHlsZT4KICAgKiBgYGAKICAgKgogICAqIEBjdXN0b21FbGVtZW50CiAgICogQGV4dGVuZHMgSFRNTEVsZW1lbnQKICAgKiBAbWVtYmVyb2YgUG9seW1lcgogICAqIEBzdW1tYXJ5IEN1c3RvbSBlbGVtZW50IGZvciBkZWZpbmluZyBzdHlsZXMgaW4gdGhlIG1haW4gZG9jdW1lbnQgdGhhdCBjYW4KICAgKiAgIHRha2UgYWR2YW50YWdlIG9mIFBvbHltZXIncyBzdHlsZSBzY29waW5nIGFuZCBjdXN0b20gcHJvcGVydGllcyBzaGltcy4KICAgKi8KICBjbGFzcyBDdXN0b21TdHlsZSBleHRlbmRzIEhUTUxFbGVtZW50IHsKICAgIGNvbnN0cnVjdG9yKCkgewogICAgICBzdXBlcigpOwogICAgICB0aGlzLl9zdHlsZSA9IG51bGw7CiAgICAgIEN1c3RvbVN0eWxlSW50ZXJmYWNlLmFkZEN1c3RvbVN0eWxlKHRoaXMpOwogICAgfQogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBsaWdodC1ET00gYDxzdHlsZT5gIGNoaWxkIHRoaXMgZWxlbWVudCB3cmFwcy4gIFVwb24gZmlyc3QKICAgICAqIGNhbGwgYW55IHN0eWxlIG1vZHVsZXMgcmVmZXJlbmNlZCB2aWEgdGhlIGBpbmNsdWRlYCBhdHRyaWJ1dGUgd2lsbCBiZQogICAgICogY29uY2F0ZW5hdGVkIHRvIHRoaXMgZWxlbWVudCdzIGA8c3R5bGU+YC4KICAgICAqCiAgICAgKiBAcmV0dXJuIHtIVE1MU3R5bGVFbGVtZW50fSBUaGlzIGVsZW1lbnQncyBsaWdodC1ET00gYDxzdHlsZT5gCiAgICAgKi8KICAgIGdldFN0eWxlKCkgewogICAgICBpZiAodGhpcy5fc3R5bGUpIHsKICAgICAgICByZXR1cm4gdGhpcy5fc3R5bGU7CiAgICAgIH0KICAgICAgY29uc3Qgc3R5bGUgPSAvKiogQHR5cGUge0hUTUxTdHlsZUVsZW1lbnR9ICovKHRoaXMucXVlcnlTZWxlY3Rvcignc3R5bGUnKSk7CiAgICAgIGlmICghc3R5bGUpIHsKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfQogICAgICB0aGlzLl9zdHlsZSA9IHN0eWxlOwogICAgICBjb25zdCBpbmNsdWRlID0gc3R5bGUuZ2V0QXR0cmlidXRlKGF0dHIpOwogICAgICBpZiAoaW5jbHVkZSkgewogICAgICAgIHN0eWxlLnJlbW92ZUF0dHJpYnV0ZShhdHRyKTsKICAgICAgICBzdHlsZS50ZXh0Q29udGVudCA9IFBvbHltZXIuU3R5bGVHYXRoZXIuY3NzRnJvbU1vZHVsZXMoaW5jbHVkZSkgKyBzdHlsZS50ZXh0Q29udGVudDsKICAgICAgfQogICAgICAvKgogICAgICBIVE1MIEltcG9ydHMgc3R5bGluZyB0aGUgbWFpbiBkb2N1bWVudCBhcmUgZGVwcmVjYXRlZCBpbiBDaHJvbWUKICAgICAgaHR0cHM6Ly9jcmJ1Zy5jb20vNTIzOTUyCgogICAgICBJZiB0aGlzIGVsZW1lbnQgaXMgbm90IGluIHRoZSBtYWluIGRvY3VtZW50LCB0aGVuIGl0IG11c3QgYmUgaW4gYW4gSFRNTCBJbXBvcnQgZG9jdW1lbnQuCiAgICAgIEluIHRoYXQgY2FzZSwgbW92ZSB0aGUgY3VzdG9tIHN0eWxlIHRvIHRoZSBtYWluIGRvY3VtZW50LgoKICAgICAgVGhlIG9yZGVyaW5nIG9mIGA8Y3VzdG9tLXN0eWxlPmAgc2hvdWxkIHN0YXkgdGhlIHNhbWUgYXMgd2hlbiBsb2FkZWQgYnkgSFRNTCBJbXBvcnRzLCBidXQgdGhlcmUgbWF5IGJlIG9kZAogICAgICBjYXNlcyBvZiBvcmRlcmluZyB3LnIudCB0aGUgbWFpbiBkb2N1bWVudCBzdHlsZXMuCiAgICAgICovCiAgICAgIGlmICh0aGlzLm93bmVyRG9jdW1lbnQgIT09IHdpbmRvdy5kb2N1bWVudCkgewogICAgICAgIHdpbmRvdy5kb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHRoaXMpOwogICAgICB9CiAgICAgIHJldHVybiB0aGlzLl9zdHlsZTsKICAgIH0KICB9CgogIHdpbmRvdy5jdXN0b21FbGVtZW50cy5kZWZpbmUoJ2N1c3RvbS1zdHlsZScsIEN1c3RvbVN0eWxlKTsKCiAgLyoqIEBjb25zdCAqLwogIFBvbHltZXIuQ3VzdG9tU3R5bGUgPSBDdXN0b21TdHlsZTsKfSkoKTsKPC9zY3JpcHQ+PHNjcmlwdD4KKGZ1bmN0aW9uKCkgewogICd1c2Ugc3RyaWN0JzsKCiAgbGV0IG11dGFibGVQcm9wZXJ0eUNoYW5nZTsKICAvKiogQHN1cHByZXNzIHttaXNzaW5nUHJvcGVydGllc30gKi8KICAoKCkgPT4gewogICAgbXV0YWJsZVByb3BlcnR5Q2hhbmdlID0gUG9seW1lci5NdXRhYmxlRGF0YS5fbXV0YWJsZVByb3BlcnR5Q2hhbmdlOwogIH0pKCk7CgogIC8qKgogICAqIExlZ2FjeSBlbGVtZW50IGJlaGF2aW9yIHRvIHNraXAgc3RyaWN0IGRpcnR5LWNoZWNraW5nIGZvciBvYmplY3RzIGFuZCBhcnJheXMsCiAgICogKGFsd2F5cyBjb25zaWRlciB0aGVtIHRvIGJlICJkaXJ0eSIpIGZvciB1c2Ugb24gbGVnYWN5IEFQSSBQb2x5bWVyIGVsZW1lbnRzLgogICAqCiAgICogQnkgZGVmYXVsdCwgYFBvbHltZXIuUHJvcGVydHlFZmZlY3RzYCBwZXJmb3JtcyBzdHJpY3QgZGlydHkgY2hlY2tpbmcgb24KICAgKiBvYmplY3RzLCB3aGljaCBtZWFucyB0aGF0IGFueSBkZWVwIG1vZGlmaWNhdGlvbnMgdG8gYW4gb2JqZWN0IG9yIGFycmF5IHdpbGwKICAgKiBub3QgYmUgcHJvcGFnYXRlZCB1bmxlc3MgImltbXV0YWJsZSIgZGF0YSBwYXR0ZXJucyBhcmUgdXNlZCAoaS5lLiBhbGwgb2JqZWN0CiAgICogcmVmZXJlbmNlcyBmcm9tIHRoZSByb290IHRvIHRoZSBtdXRhdGlvbiB3ZXJlIGNoYW5nZWQpLgogICAqCiAgICogUG9seW1lciBhbHNvIHByb3ZpZGVzIGEgcHJvcHJpZXRhcnkgZGF0YSBtdXRhdGlvbiBhbmQgcGF0aCBub3RpZmljYXRpb24gQVBJCiAgICogKGUuZy4gYG5vdGlmeVBhdGhgLCBgc2V0YCwgYW5kIGFycmF5IG11dGF0aW9uIEFQSSdzKSB0aGF0IGFsbG93IGVmZmljaWVudAogICAqIG11dGF0aW9uIGFuZCBub3RpZmljYXRpb24gb2YgZGVlcCBjaGFuZ2VzIGluIGFuIG9iamVjdCBncmFwaCB0byBhbGwgZWxlbWVudHMKICAgKiBib3VuZCB0byB0aGUgc2FtZSBvYmplY3QgZ3JhcGguCiAgICoKICAgKiBJbiBjYXNlcyB3aGVyZSBuZWl0aGVyIGltbXV0YWJsZSBwYXR0ZXJucyBub3IgdGhlIGRhdGEgbXV0YXRpb24gQVBJIGNhbiBiZQogICAqIHVzZWQsIGFwcGx5aW5nIHRoaXMgbWl4aW4gd2lsbCBjYXVzZSBQb2x5bWVyIHRvIHNraXAgZGlydHkgY2hlY2tpbmcgZm9yCiAgICogb2JqZWN0cyBhbmQgYXJyYXlzIChhbHdheXMgY29uc2lkZXIgdGhlbSB0byBiZSAiZGlydHkiKS4gIFRoaXMgYWxsb3dzIGEKICAgKiB1c2VyIHRvIG1ha2UgYSBkZWVwIG1vZGlmaWNhdGlvbiB0byBhIGJvdW5kIG9iamVjdCBncmFwaCwgYW5kIHRoZW4gZWl0aGVyCiAgICogc2ltcGx5IHJlLXNldCB0aGUgb2JqZWN0IChlLmcuIGB0aGlzLml0ZW1zID0gdGhpcy5pdGVtc2ApIG9yIGNhbGwgYG5vdGlmeVBhdGhgCiAgICogKGUuZy4gYHRoaXMubm90aWZ5UGF0aCgnaXRlbXMnKWApIHRvIHVwZGF0ZSB0aGUgdHJlZS4gIE5vdGUgdGhhdCBhbGwKICAgKiBlbGVtZW50cyB0aGF0IHdpc2ggdG8gYmUgdXBkYXRlZCBiYXNlZCBvbiBkZWVwIG11dGF0aW9ucyBtdXN0IGFwcGx5IHRoaXMKICAgKiBtaXhpbiBvciBvdGhlcndpc2Ugc2tpcCBzdHJpY3QgZGlydHkgY2hlY2tpbmcgZm9yIG9iamVjdHMvYXJyYXlzLgogICAqIFNwZWNpZmljYWxseSwgYW55IGVsZW1lbnRzIGluIHRoZSBiaW5kaW5nIHRyZWUgYmV0d2VlbiB0aGUgc291cmNlIG9mIGEKICAgKiBtdXRhdGlvbiBhbmQgdGhlIGNvbnN1bXB0aW9uIG9mIGl0IG11c3QgYXBwbHkgdGhpcyBiZWhhdmlvciBvciBlbmFibGUgdGhlCiAgICogYFBvbHltZXIuT3B0aW9uYWxNdXRhYmxlRGF0YUJlaGF2aW9yYC4KICAgKgogICAqIEluIG9yZGVyIHRvIG1ha2UgdGhlIGRpcnR5IGNoZWNrIHN0cmF0ZWd5IGNvbmZpZ3VyYWJsZSwgc2VlCiAgICogYFBvbHltZXIuT3B0aW9uYWxNdXRhYmxlRGF0YUJlaGF2aW9yYC4KICAgKgogICAqIE5vdGUsIHRoZSBwZXJmb3JtYW5jZSBjaGFyYWN0ZXJpc3RpY3Mgb2YgcHJvcGFnYXRpbmcgbGFyZ2Ugb2JqZWN0IGdyYXBocwogICAqIHdpbGwgYmUgd29yc2UgYXMgb3Bwb3NlZCB0byB1c2luZyBzdHJpY3QgZGlydHkgY2hlY2tpbmcgd2l0aCBpbW11dGFibGUKICAgKiBwYXR0ZXJucyBvciBQb2x5bWVyJ3MgcGF0aCBub3RpZmljYXRpb24gQVBJLgogICAqCiAgICogQHBvbHltZXJCZWhhdmlvcgogICAqIEBtZW1iZXJvZiBQb2x5bWVyCiAgICogQHN1bW1hcnkgQmVoYXZpb3IgdG8gc2tpcCBzdHJpY3QgZGlydHktY2hlY2tpbmcgZm9yIG9iamVjdHMgYW5kCiAgICogICBhcnJheXMKICAgKi8KICBQb2x5bWVyLk11dGFibGVEYXRhQmVoYXZpb3IgPSB7CgogICAgLyoqCiAgICAgKiBPdmVycmlkZXMgYFBvbHltZXIuUHJvcGVydHlFZmZlY3RzYCB0byBwcm92aWRlIG9wdGlvbiBmb3Igc2tpcHBpbmcKICAgICAqIHN0cmljdCBlcXVhbGl0eSBjaGVja2luZyBmb3IgT2JqZWN0cyBhbmQgQXJyYXlzLgogICAgICoKICAgICAqIFRoaXMgbWV0aG9kIHB1bGxzIHRoZSB2YWx1ZSB0byBkaXJ0eSBjaGVjayBhZ2FpbnN0IGZyb20gdGhlIGBfX2RhdGFUZW1wYAogICAgICogY2FjaGUgKHJhdGhlciB0aGFuIHRoZSBub3JtYWwgYF9fZGF0YWAgY2FjaGUpIGZvciBPYmplY3RzLiAgU2luY2UgdGhlIHRlbXAKICAgICAqIGNhY2hlIGlzIGNsZWFyZWQgYXQgdGhlIGVuZCBvZiBhIHR1cm4sIHRoaXMgaW1wbGVtZW50YXRpb24gYWxsb3dzCiAgICAgKiBzaWRlLWVmZmVjdHMgb2YgZGVlcCBvYmplY3QgY2hhbmdlcyB0byBiZSBwcm9jZXNzZWQgYnkgcmUtc2V0dGluZyB0aGUKICAgICAqIHNhbWUgb2JqZWN0ICh1c2luZyB0aGUgdGVtcCBjYWNoZSBhcyBhbiBpbi10dXJuIGJhY2tzdG9wIHRvIHByZXZlbnQKICAgICAqIGN5Y2xlcyBkdWUgdG8gMi13YXkgbm90aWZpY2F0aW9uKS4KICAgICAqCiAgICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkgUHJvcGVydHkgbmFtZQogICAgICogQHBhcmFtIHsqfSB2YWx1ZSBOZXcgcHJvcGVydHkgdmFsdWUKICAgICAqIEBwYXJhbSB7Kn0gb2xkIFByZXZpb3VzIHByb3BlcnR5IHZhbHVlCiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSBwcm9wZXJ0eSBzaG91bGQgYmUgY29uc2lkZXJlZCBhIGNoYW5nZQogICAgICogQHByb3RlY3RlZAogICAgICovCiAgICBfc2hvdWxkUHJvcGVydHlDaGFuZ2UocHJvcGVydHksIHZhbHVlLCBvbGQpIHsKICAgICAgcmV0dXJuIG11dGFibGVQcm9wZXJ0eUNoYW5nZSh0aGlzLCBwcm9wZXJ0eSwgdmFsdWUsIG9sZCwgdHJ1ZSk7CiAgICB9CiAgfTsKCiAgLyoqCiAgICogTGVnYWN5IGVsZW1lbnQgYmVoYXZpb3IgdG8gYWRkIHRoZSBvcHRpb25hbCBhYmlsaXR5IHRvIHNraXAgc3RyaWN0CiAgICogZGlydHktY2hlY2tpbmcgZm9yIG9iamVjdHMgYW5kIGFycmF5cyAoYWx3YXlzIGNvbnNpZGVyIHRoZW0gdG8gYmUKICAgKiAiZGlydHkiKSBieSBzZXR0aW5nIGEgYG11dGFibGUtZGF0YWAgYXR0cmlidXRlIG9uIGFuIGVsZW1lbnQgaW5zdGFuY2UuCiAgICoKICAgKiBCeSBkZWZhdWx0LCBgUG9seW1lci5Qcm9wZXJ0eUVmZmVjdHNgIHBlcmZvcm1zIHN0cmljdCBkaXJ0eSBjaGVja2luZyBvbgogICAqIG9iamVjdHMsIHdoaWNoIG1lYW5zIHRoYXQgYW55IGRlZXAgbW9kaWZpY2F0aW9ucyB0byBhbiBvYmplY3Qgb3IgYXJyYXkgd2lsbAogICAqIG5vdCBiZSBwcm9wYWdhdGVkIHVubGVzcyAiaW1tdXRhYmxlIiBkYXRhIHBhdHRlcm5zIGFyZSB1c2VkIChpLmUuIGFsbCBvYmplY3QKICAgKiByZWZlcmVuY2VzIGZyb20gdGhlIHJvb3QgdG8gdGhlIG11dGF0aW9uIHdlcmUgY2hhbmdlZCkuCiAgICoKICAgKiBQb2x5bWVyIGFsc28gcHJvdmlkZXMgYSBwcm9wcmlldGFyeSBkYXRhIG11dGF0aW9uIGFuZCBwYXRoIG5vdGlmaWNhdGlvbiBBUEkKICAgKiAoZS5nLiBgbm90aWZ5UGF0aGAsIGBzZXRgLCBhbmQgYXJyYXkgbXV0YXRpb24gQVBJJ3MpIHRoYXQgYWxsb3cgZWZmaWNpZW50CiAgICogbXV0YXRpb24gYW5kIG5vdGlmaWNhdGlvbiBvZiBkZWVwIGNoYW5nZXMgaW4gYW4gb2JqZWN0IGdyYXBoIHRvIGFsbCBlbGVtZW50cwogICAqIGJvdW5kIHRvIHRoZSBzYW1lIG9iamVjdCBncmFwaC4KICAgKgogICAqIEluIGNhc2VzIHdoZXJlIG5laXRoZXIgaW1tdXRhYmxlIHBhdHRlcm5zIG5vciB0aGUgZGF0YSBtdXRhdGlvbiBBUEkgY2FuIGJlCiAgICogdXNlZCwgYXBwbHlpbmcgdGhpcyBtaXhpbiB3aWxsIGFsbG93IFBvbHltZXIgdG8gc2tpcCBkaXJ0eSBjaGVja2luZyBmb3IKICAgKiBvYmplY3RzIGFuZCBhcnJheXMgKGFsd2F5cyBjb25zaWRlciB0aGVtIHRvIGJlICJkaXJ0eSIpLiAgVGhpcyBhbGxvd3MgYQogICAqIHVzZXIgdG8gbWFrZSBhIGRlZXAgbW9kaWZpY2F0aW9uIHRvIGEgYm91bmQgb2JqZWN0IGdyYXBoLCBhbmQgdGhlbiBlaXRoZXIKICAgKiBzaW1wbHkgcmUtc2V0IHRoZSBvYmplY3QgKGUuZy4gYHRoaXMuaXRlbXMgPSB0aGlzLml0ZW1zYCkgb3IgY2FsbCBgbm90aWZ5UGF0aGAKICAgKiAoZS5nLiBgdGhpcy5ub3RpZnlQYXRoKCdpdGVtcycpYCkgdG8gdXBkYXRlIHRoZSB0cmVlLiAgTm90ZSB0aGF0IGFsbAogICAqIGVsZW1lbnRzIHRoYXQgd2lzaCB0byBiZSB1cGRhdGVkIGJhc2VkIG9uIGRlZXAgbXV0YXRpb25zIG11c3QgYXBwbHkgdGhpcwogICAqIG1peGluIG9yIG90aGVyd2lzZSBza2lwIHN0cmljdCBkaXJ0eSBjaGVja2luZyBmb3Igb2JqZWN0cy9hcnJheXMuCiAgICogU3BlY2lmaWNhbGx5LCBhbnkgZWxlbWVudHMgaW4gdGhlIGJpbmRpbmcgdHJlZSBiZXR3ZWVuIHRoZSBzb3VyY2Ugb2YgYQogICAqIG11dGF0aW9uIGFuZCB0aGUgY29uc3VtcHRpb24gb2YgaXQgbXVzdCBlbmFibGUgdGhpcyBiZWhhdmlvciBvciBhcHBseSB0aGUKICAgKiBgUG9seW1lci5PcHRpb25hbE11dGFibGVEYXRhQmVoYXZpb3JgLgogICAqCiAgICogV2hpbGUgdGhpcyBiZWhhdmlvciBhZGRzIHRoZSBhYmlsaXR5IHRvIGZvcmdvIE9iamVjdC9BcnJheSBkaXJ0eSBjaGVja2luZywKICAgKiB0aGUgYG11dGFibGVEYXRhYCBmbGFnIGRlZmF1bHRzIHRvIGZhbHNlIGFuZCBtdXN0IGJlIHNldCBvbiB0aGUgaW5zdGFuY2UuCiAgICoKICAgKiBOb3RlLCB0aGUgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzIG9mIHByb3BhZ2F0aW5nIGxhcmdlIG9iamVjdCBncmFwaHMKICAgKiB3aWxsIGJlIHdvcnNlIGJ5IHJlbHlpbmcgb24gYG11dGFibGVEYXRhOiB0cnVlYCBhcyBvcHBvc2VkIHRvIHVzaW5nCiAgICogc3RyaWN0IGRpcnR5IGNoZWNraW5nIHdpdGggaW1tdXRhYmxlIHBhdHRlcm5zIG9yIFBvbHltZXIncyBwYXRoIG5vdGlmaWNhdGlvbgogICAqIEFQSS4KICAgKgogICAqIEBwb2x5bWVyQmVoYXZpb3IKICAgKiBAbWVtYmVyb2YgUG9seW1lcgogICAqIEBzdW1tYXJ5IEJlaGF2aW9yIHRvIG9wdGlvbmFsbHkgc2tpcCBzdHJpY3QgZGlydHktY2hlY2tpbmcgZm9yIG9iamVjdHMgYW5kCiAgICogICBhcnJheXMKICAgKi8KICBQb2x5bWVyLk9wdGlvbmFsTXV0YWJsZURhdGFCZWhhdmlvciA9IHsKCiAgICBwcm9wZXJ0aWVzOiB7CiAgICAgIC8qKgogICAgICAgKiBJbnN0YW5jZS1sZXZlbCBmbGFnIGZvciBjb25maWd1cmluZyB0aGUgZGlydHktY2hlY2tpbmcgc3RyYXRlZ3kKICAgICAgICogZm9yIHRoaXMgZWxlbWVudC4gIFdoZW4gdHJ1ZSwgT2JqZWN0cyBhbmQgQXJyYXlzIHdpbGwgc2tpcCBkaXJ0eQogICAgICAgKiBjaGVja2luZywgb3RoZXJ3aXNlIHN0cmljdCBlcXVhbGl0eSBjaGVja2luZyB3aWxsIGJlIHVzZWQuCiAgICAgICAqLwogICAgICBtdXRhYmxlRGF0YTogQm9vbGVhbgogICAgfSwKCiAgICAvKioKICAgICAqIE92ZXJyaWRlcyBgUG9seW1lci5Qcm9wZXJ0eUVmZmVjdHNgIHRvIHNraXAgc3RyaWN0IGVxdWFsaXR5IGNoZWNraW5nCiAgICAgKiBmb3IgT2JqZWN0cyBhbmQgQXJyYXlzLgogICAgICoKICAgICAqIFB1bGxzIHRoZSB2YWx1ZSB0byBkaXJ0eSBjaGVjayBhZ2FpbnN0IGZyb20gdGhlIGBfX2RhdGFUZW1wYCBjYWNoZQogICAgICogKHJhdGhlciB0aGFuIHRoZSBub3JtYWwgYF9fZGF0YWAgY2FjaGUpIGZvciBPYmplY3RzLiAgU2luY2UgdGhlIHRlbXAKICAgICAqIGNhY2hlIGlzIGNsZWFyZWQgYXQgdGhlIGVuZCBvZiBhIHR1cm4sIHRoaXMgaW1wbGVtZW50YXRpb24gYWxsb3dzCiAgICAgKiBzaWRlLWVmZmVjdHMgb2YgZGVlcCBvYmplY3QgY2hhbmdlcyB0byBiZSBwcm9jZXNzZWQgYnkgcmUtc2V0dGluZyB0aGUKICAgICAqIHNhbWUgb2JqZWN0ICh1c2luZyB0aGUgdGVtcCBjYWNoZSBhcyBhbiBpbi10dXJuIGJhY2tzdG9wIHRvIHByZXZlbnQKICAgICAqIGN5Y2xlcyBkdWUgdG8gMi13YXkgbm90aWZpY2F0aW9uKS4KICAgICAqCiAgICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkgUHJvcGVydHkgbmFtZQogICAgICogQHBhcmFtIHsqfSB2YWx1ZSBOZXcgcHJvcGVydHkgdmFsdWUKICAgICAqIEBwYXJhbSB7Kn0gb2xkIFByZXZpb3VzIHByb3BlcnR5IHZhbHVlCiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSBwcm9wZXJ0eSBzaG91bGQgYmUgY29uc2lkZXJlZCBhIGNoYW5nZQogICAgICogQHRoaXMge3RoaXN9CiAgICAgKiBAcHJvdGVjdGVkCiAgICAgKi8KICAgIF9zaG91bGRQcm9wZXJ0eUNoYW5nZShwcm9wZXJ0eSwgdmFsdWUsIG9sZCkgewogICAgICByZXR1cm4gbXV0YWJsZVByb3BlcnR5Q2hhbmdlKHRoaXMsIHByb3BlcnR5LCB2YWx1ZSwgb2xkLCB0aGlzLm11dGFibGVEYXRhKTsKICAgIH0KICB9OwoKfSkoKTsKCjwvc2NyaXB0PjxzY3JpcHQ+CiAgLy8gYmMKICBQb2x5bWVyLkJhc2UgPSBQb2x5bWVyLkxlZ2FjeUVsZW1lbnRNaXhpbihIVE1MRWxlbWVudCkucHJvdG90eXBlOwoKICAvLyBOT1RFOiB0aGlzIGlzIGhlcmUgZm9yIG1vZHVsaXplciB0byBleHBvcnQgYGh0bWxgIGZvciB0aGUgbW9kdWxlIHZlcnNpb24gb2YgdGhpcyBmaWxlCiAgUG9seW1lci5odG1sID0gUG9seW1lci5odG1sOwo8L3NjcmlwdD48c2NyaXB0Pi8qCgogTG9kYXNoIDxodHRwczovL2xvZGFzaC5jb20vPgogQ29weXJpZ2h0IEpTIEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9ycyA8aHR0cHM6Ly9qcy5mb3VuZGF0aW9uLz4KIFJlbGVhc2VkIHVuZGVyIE1JVCBsaWNlbnNlIDxodHRwczovL2xvZGFzaC5jb20vbGljZW5zZT4KIEJhc2VkIG9uIFVuZGVyc2NvcmUuanMgMS44LjMgPGh0dHA6Ly91bmRlcnNjb3JlanMub3JnL0xJQ0VOU0U+CiBDb3B5cmlnaHQgSmVyZW15IEFzaGtlbmFzLCBEb2N1bWVudENsb3VkIGFuZCBJbnZlc3RpZ2F0aXZlIFJlcG9ydGVycyAmIEVkaXRvcnMKKi8KKGZ1bmN0aW9uKCl7dmFyIHVuZGVmaW5lZDt2YXIgVkVSU0lPTj0iNC4xNy41Ijt2YXIgTEFSR0VfQVJSQVlfU0laRT0yMDA7dmFyIENPUkVfRVJST1JfVEVYVD0iVW5zdXBwb3J0ZWQgY29yZS1qcyB1c2UuIFRyeSBodHRwczovL25wbXMuaW8vc2VhcmNoP3FceDNkcG9ueWZpbGwuIixGVU5DX0VSUk9SX1RFWFQ9IkV4cGVjdGVkIGEgZnVuY3Rpb24iO3ZhciBIQVNIX1VOREVGSU5FRD0iX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyI7dmFyIE1BWF9NRU1PSVpFX1NJWkU9NTAwO3ZhciBQTEFDRUhPTERFUj0iX19sb2Rhc2hfcGxhY2Vob2xkZXJfXyI7dmFyIENMT05FX0RFRVBfRkxBRz0xLENMT05FX0ZMQVRfRkxBRz0yLENMT05FX1NZTUJPTFNfRkxBRz00O3ZhciBDT01QQVJFX1BBUlRJQUxfRkxBRz0xLENPTVBBUkVfVU5PUkRFUkVEX0ZMQUc9Mjt2YXIgV1JBUF9CSU5EX0ZMQUc9MSxXUkFQX0JJTkRfS0VZX0ZMQUc9MixXUkFQX0NVUlJZX0JPVU5EX0ZMQUc9NCxXUkFQX0NVUlJZX0ZMQUc9CjgsV1JBUF9DVVJSWV9SSUdIVF9GTEFHPTE2LFdSQVBfUEFSVElBTF9GTEFHPTMyLFdSQVBfUEFSVElBTF9SSUdIVF9GTEFHPTY0LFdSQVBfQVJZX0ZMQUc9MTI4LFdSQVBfUkVBUkdfRkxBRz0yNTYsV1JBUF9GTElQX0ZMQUc9NTEyO3ZhciBERUZBVUxUX1RSVU5DX0xFTkdUSD0zMCxERUZBVUxUX1RSVU5DX09NSVNTSU9OPSIuLi4iO3ZhciBIT1RfQ09VTlQ9ODAwLEhPVF9TUEFOPTE2O3ZhciBMQVpZX0ZJTFRFUl9GTEFHPTEsTEFaWV9NQVBfRkxBRz0yLExBWllfV0hJTEVfRkxBRz0zO3ZhciBJTkZJTklUWT0xLzAsTUFYX1NBRkVfSU5URUdFUj05MDA3MTk5MjU0NzQwOTkxLE1BWF9JTlRFR0VSPTEuNzk3NjkzMTM0ODYyMzE1N0UzMDgsTkFOPTAvMDt2YXIgTUFYX0FSUkFZX0xFTkdUSD00Mjk0OTY3Mjk1LE1BWF9BUlJBWV9JTkRFWD1NQVhfQVJSQVlfTEVOR1RILTEsSEFMRl9NQVhfQVJSQVlfTEVOR1RIPU1BWF9BUlJBWV9MRU5HVEg+Pj4xO3ZhciB3cmFwRmxhZ3M9W1siYXJ5IiwKV1JBUF9BUllfRkxBR10sWyJiaW5kIixXUkFQX0JJTkRfRkxBR10sWyJiaW5kS2V5IixXUkFQX0JJTkRfS0VZX0ZMQUddLFsiY3VycnkiLFdSQVBfQ1VSUllfRkxBR10sWyJjdXJyeVJpZ2h0IixXUkFQX0NVUlJZX1JJR0hUX0ZMQUddLFsiZmxpcCIsV1JBUF9GTElQX0ZMQUddLFsicGFydGlhbCIsV1JBUF9QQVJUSUFMX0ZMQUddLFsicGFydGlhbFJpZ2h0IixXUkFQX1BBUlRJQUxfUklHSFRfRkxBR10sWyJyZWFyZyIsV1JBUF9SRUFSR19GTEFHXV07dmFyIGFyZ3NUYWc9IltvYmplY3QgQXJndW1lbnRzXSIsYXJyYXlUYWc9IltvYmplY3QgQXJyYXldIixhc3luY1RhZz0iW29iamVjdCBBc3luY0Z1bmN0aW9uXSIsYm9vbFRhZz0iW29iamVjdCBCb29sZWFuXSIsZGF0ZVRhZz0iW29iamVjdCBEYXRlXSIsZG9tRXhjVGFnPSJbb2JqZWN0IERPTUV4Y2VwdGlvbl0iLGVycm9yVGFnPSJbb2JqZWN0IEVycm9yXSIsZnVuY1RhZz0iW29iamVjdCBGdW5jdGlvbl0iLGdlblRhZz0iW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0iLAptYXBUYWc9IltvYmplY3QgTWFwXSIsbnVtYmVyVGFnPSJbb2JqZWN0IE51bWJlcl0iLG51bGxUYWc9IltvYmplY3QgTnVsbF0iLG9iamVjdFRhZz0iW29iamVjdCBPYmplY3RdIixwcm9taXNlVGFnPSJbb2JqZWN0IFByb21pc2VdIixwcm94eVRhZz0iW29iamVjdCBQcm94eV0iLHJlZ2V4cFRhZz0iW29iamVjdCBSZWdFeHBdIixzZXRUYWc9IltvYmplY3QgU2V0XSIsc3RyaW5nVGFnPSJbb2JqZWN0IFN0cmluZ10iLHN5bWJvbFRhZz0iW29iamVjdCBTeW1ib2xdIix1bmRlZmluZWRUYWc9IltvYmplY3QgVW5kZWZpbmVkXSIsd2Vha01hcFRhZz0iW29iamVjdCBXZWFrTWFwXSIsd2Vha1NldFRhZz0iW29iamVjdCBXZWFrU2V0XSI7dmFyIGFycmF5QnVmZmVyVGFnPSJbb2JqZWN0IEFycmF5QnVmZmVyXSIsZGF0YVZpZXdUYWc9IltvYmplY3QgRGF0YVZpZXddIixmbG9hdDMyVGFnPSJbb2JqZWN0IEZsb2F0MzJBcnJheV0iLGZsb2F0NjRUYWc9IltvYmplY3QgRmxvYXQ2NEFycmF5XSIsCmludDhUYWc9IltvYmplY3QgSW50OEFycmF5XSIsaW50MTZUYWc9IltvYmplY3QgSW50MTZBcnJheV0iLGludDMyVGFnPSJbb2JqZWN0IEludDMyQXJyYXldIix1aW50OFRhZz0iW29iamVjdCBVaW50OEFycmF5XSIsdWludDhDbGFtcGVkVGFnPSJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSIsdWludDE2VGFnPSJbb2JqZWN0IFVpbnQxNkFycmF5XSIsdWludDMyVGFnPSJbb2JqZWN0IFVpbnQzMkFycmF5XSI7dmFyIHJlRW1wdHlTdHJpbmdMZWFkaW5nPS9cYl9fcCBcKz0gJyc7L2cscmVFbXB0eVN0cmluZ01pZGRsZT0vXGIoX19wIFwrPSkgJycgXCsvZyxyZUVtcHR5U3RyaW5nVHJhaWxpbmc9LyhfX2VcKC4qP1wpfFxiX190XCkpIFwrXG4nJzsvZzt2YXIgcmVFc2NhcGVkSHRtbD0vJig/OmFtcHxsdHxndHxxdW90fCMzOSk7L2cscmVVbmVzY2FwZWRIdG1sPS9bJjw+IiddL2cscmVIYXNFc2NhcGVkSHRtbD1SZWdFeHAocmVFc2NhcGVkSHRtbC5zb3VyY2UpLHJlSGFzVW5lc2NhcGVkSHRtbD0KUmVnRXhwKHJlVW5lc2NhcGVkSHRtbC5zb3VyY2UpO3ZhciByZUVzY2FwZT0vPCUtKFtcc1xTXSs/KSU+L2cscmVFdmFsdWF0ZT0vPCUoW1xzXFNdKz8pJT4vZyxyZUludGVycG9sYXRlPS88JT0oW1xzXFNdKz8pJT4vZzt2YXIgcmVJc0RlZXBQcm9wPS9cLnxcWyg/OlteW1xdXSp8KFsiJ10pKD86KD8hXDEpW15cXF18XFwuKSo/XDEpXF0vLHJlSXNQbGFpblByb3A9L15cdyokLyxyZVByb3BOYW1lPS9bXi5bXF1dK3xcWyg/OigtP1xkKyg/OlwuXGQrKT8pfChbIiddKSgoPzooPyFcMilbXlxcXXxcXC4pKj8pXDIpXF18KD89KD86XC58XFtcXSkoPzpcLnxcW1xdfCQpKS9nO3ZhciByZVJlZ0V4cENoYXI9L1tcXF4kLiorPygpW1xde318XS9nLHJlSGFzUmVnRXhwQ2hhcj1SZWdFeHAocmVSZWdFeHBDaGFyLnNvdXJjZSk7dmFyIHJlVHJpbT0vXlxzK3xccyskL2cscmVUcmltU3RhcnQ9L15ccysvLHJlVHJpbUVuZD0vXHMrJC87dmFyIHJlV3JhcENvbW1lbnQ9L1x7KD86XG5cL1wqIFxbd3JhcHBlZCB3aXRoIC4rXF0gXCpcLyk/XG4/LywKcmVXcmFwRGV0YWlscz0vXHtcblwvXCogXFt3cmFwcGVkIHdpdGggKC4rKVxdIFwqLyxyZVNwbGl0RGV0YWlscz0vLD8gJiAvO3ZhciByZUFzY2lpV29yZD0vW15ceDAwLVx4MmZceDNhLVx4NDBceDViLVx4NjBceDdiLVx4N2ZdKy9nO3ZhciByZUVzY2FwZUNoYXI9L1xcKFxcKT8vZzt2YXIgcmVFc1RlbXBsYXRlPS9cJFx7KFteXFx9XSooPzpcXC5bXlxcfV0qKSopXH0vZzt2YXIgcmVGbGFncz0vXHcqJC87dmFyIHJlSXNCYWRIZXg9L15bLStdMHhbMC05YS1mXSskL2k7dmFyIHJlSXNCaW5hcnk9L14wYlswMV0rJC9pO3ZhciByZUlzSG9zdEN0b3I9L15cW29iamVjdCAuKz9Db25zdHJ1Y3RvclxdJC87dmFyIHJlSXNPY3RhbD0vXjBvWzAtN10rJC9pO3ZhciByZUlzVWludD0vXig/OjB8WzEtOV1cZCopJC87dmFyIHJlTGF0aW49L1tceGMwLVx4ZDZceGQ4LVx4ZjZceGY4LVx4ZmZcdTAxMDAtXHUwMTdmXS9nO3ZhciByZU5vTWF0Y2g9LygkXikvO3ZhciByZVVuZXNjYXBlZFN0cmluZz0KL1snXG5cclx1MjAyOFx1MjAyOVxcXS9nO3ZhciByc0FzdHJhbFJhbmdlPSJcXHVkODAwLVxcdWRmZmYiLHJzQ29tYm9NYXJrc1JhbmdlPSJcXHUwMzAwLVxcdTAzNmYiLHJlQ29tYm9IYWxmTWFya3NSYW5nZT0iXFx1ZmUyMC1cXHVmZTJmIixyc0NvbWJvU3ltYm9sc1JhbmdlPSJcXHUyMGQwLVxcdTIwZmYiLHJzQ29tYm9SYW5nZT1yc0NvbWJvTWFya3NSYW5nZStyZUNvbWJvSGFsZk1hcmtzUmFuZ2UrcnNDb21ib1N5bWJvbHNSYW5nZSxyc0RpbmdiYXRSYW5nZT0iXFx1MjcwMC1cXHUyN2JmIixyc0xvd2VyUmFuZ2U9ImEtelxceGRmLVxceGY2XFx4ZjgtXFx4ZmYiLHJzTWF0aE9wUmFuZ2U9IlxceGFjXFx4YjFcXHhkN1xceGY3Iixyc05vbkNoYXJSYW5nZT0iXFx4MDAtXFx4MmZcXHgzYS1cXHg0MFxceDViLVxceDYwXFx4N2ItXFx4YmYiLHJzUHVuY3R1YXRpb25SYW5nZT0iXFx1MjAwMC1cXHUyMDZmIixyc1NwYWNlUmFuZ2U9IiBcXHRcXHgwYlxcZlxceGEwXFx1ZmVmZlxcblxcclxcdTIwMjhcXHUyMDI5XFx1MTY4MFxcdTE4MGVcXHUyMDAwXFx1MjAwMVxcdTIwMDJcXHUyMDAzXFx1MjAwNFxcdTIwMDVcXHUyMDA2XFx1MjAwN1xcdTIwMDhcXHUyMDA5XFx1MjAwYVxcdTIwMmZcXHUyMDVmXFx1MzAwMCIsCnJzVXBwZXJSYW5nZT0iQS1aXFx4YzAtXFx4ZDZcXHhkOC1cXHhkZSIscnNWYXJSYW5nZT0iXFx1ZmUwZVxcdWZlMGYiLHJzQnJlYWtSYW5nZT1yc01hdGhPcFJhbmdlK3JzTm9uQ2hhclJhbmdlK3JzUHVuY3R1YXRpb25SYW5nZStyc1NwYWNlUmFuZ2U7dmFyIHJzQXBvcz0iWydcdTIwMTldIixyc0FzdHJhbD0iWyIrcnNBc3RyYWxSYW5nZSsiXSIscnNCcmVhaz0iWyIrcnNCcmVha1JhbmdlKyJdIixyc0NvbWJvPSJbIityc0NvbWJvUmFuZ2UrIl0iLHJzRGlnaXRzPSJcXGQrIixyc0RpbmdiYXQ9IlsiK3JzRGluZ2JhdFJhbmdlKyJdIixyc0xvd2VyPSJbIityc0xvd2VyUmFuZ2UrIl0iLHJzTWlzYz0iW14iK3JzQXN0cmFsUmFuZ2UrcnNCcmVha1JhbmdlK3JzRGlnaXRzK3JzRGluZ2JhdFJhbmdlK3JzTG93ZXJSYW5nZStyc1VwcGVyUmFuZ2UrIl0iLHJzRml0ej0iXFx1ZDgzY1tcXHVkZmZiLVxcdWRmZmZdIixyc01vZGlmaWVyPSIoPzoiK3JzQ29tYm8rInwiK3JzRml0eisiKSIscnNOb25Bc3RyYWw9CiJbXiIrcnNBc3RyYWxSYW5nZSsiXSIscnNSZWdpb25hbD0iKD86XFx1ZDgzY1tcXHVkZGU2LVxcdWRkZmZdKXsyfSIscnNTdXJyUGFpcj0iW1xcdWQ4MDAtXFx1ZGJmZl1bXFx1ZGMwMC1cXHVkZmZmXSIscnNVcHBlcj0iWyIrcnNVcHBlclJhbmdlKyJdIixyc1pXSj0iXFx1MjAwZCI7dmFyIHJzTWlzY0xvd2VyPSIoPzoiK3JzTG93ZXIrInwiK3JzTWlzYysiKSIscnNNaXNjVXBwZXI9Iig/OiIrcnNVcHBlcisifCIrcnNNaXNjKyIpIixyc09wdENvbnRyTG93ZXI9Iig/OiIrcnNBcG9zKyIoPzpkfGxsfG18cmV8c3x0fHZlKSk/Iixyc09wdENvbnRyVXBwZXI9Iig/OiIrcnNBcG9zKyIoPzpEfExMfE18UkV8U3xUfFZFKSk/IixyZU9wdE1vZD1yc01vZGlmaWVyKyI/Iixyc09wdFZhcj0iWyIrcnNWYXJSYW5nZSsiXT8iLHJzT3B0Sm9pbj0iKD86Iityc1pXSisiKD86IitbcnNOb25Bc3RyYWwscnNSZWdpb25hbCxyc1N1cnJQYWlyXS5qb2luKCJ8IikrIikiK3JzT3B0VmFyK3JlT3B0TW9kKwoiKSoiLHJzT3JkTG93ZXI9IlxcZCooPzoxc3R8Mm5kfDNyZHwoPyFbMTIzXSlcXGR0aCkoP1x4M2RcXGJ8W0EtWl9dKSIscnNPcmRVcHBlcj0iXFxkKig/OjFTVHwyTkR8M1JEfCg/IVsxMjNdKVxcZFRIKSg/XHgzZFxcYnxbYS16X10pIixyc1NlcT1yc09wdFZhcityZU9wdE1vZCtyc09wdEpvaW4scnNFbW9qaT0iKD86IitbcnNEaW5nYmF0LHJzUmVnaW9uYWwscnNTdXJyUGFpcl0uam9pbigifCIpKyIpIityc1NlcSxyc1N5bWJvbD0iKD86IitbcnNOb25Bc3RyYWwrcnNDb21ibysiPyIscnNDb21ibyxyc1JlZ2lvbmFsLHJzU3VyclBhaXIscnNBc3RyYWxdLmpvaW4oInwiKSsiKSI7dmFyIHJlQXBvcz1SZWdFeHAocnNBcG9zLCJnIik7dmFyIHJlQ29tYm9NYXJrPVJlZ0V4cChyc0NvbWJvLCJnIik7dmFyIHJlVW5pY29kZT1SZWdFeHAocnNGaXR6KyIoP1x4M2QiK3JzRml0eisiKXwiK3JzU3ltYm9sK3JzU2VxLCJnIik7dmFyIHJlVW5pY29kZVdvcmQ9UmVnRXhwKFtyc1VwcGVyKyI/IisKcnNMb3dlcisiKyIrcnNPcHRDb250ckxvd2VyKyIoP1x4M2QiK1tyc0JyZWFrLHJzVXBwZXIsIiQiXS5qb2luKCJ8IikrIikiLHJzTWlzY1VwcGVyKyIrIityc09wdENvbnRyVXBwZXIrIig/XHgzZCIrW3JzQnJlYWsscnNVcHBlcityc01pc2NMb3dlciwiJCJdLmpvaW4oInwiKSsiKSIscnNVcHBlcisiPyIrcnNNaXNjTG93ZXIrIisiK3JzT3B0Q29udHJMb3dlcixyc1VwcGVyKyIrIityc09wdENvbnRyVXBwZXIscnNPcmRVcHBlcixyc09yZExvd2VyLHJzRGlnaXRzLHJzRW1vamldLmpvaW4oInwiKSwiZyIpO3ZhciByZUhhc1VuaWNvZGU9UmVnRXhwKCJbIityc1pXSityc0FzdHJhbFJhbmdlK3JzQ29tYm9SYW5nZStyc1ZhclJhbmdlKyJdIik7dmFyIHJlSGFzVW5pY29kZVdvcmQ9L1thLXpdW0EtWl18W0EtWl17Mix9W2Etel18WzAtOV1bYS16QS1aXXxbYS16QS1aXVswLTldfFteYS16QS1aMC05IF0vO3ZhciBjb250ZXh0UHJvcHM9WyJBcnJheSIsIkJ1ZmZlciIsIkRhdGFWaWV3IiwKIkRhdGUiLCJFcnJvciIsIkZsb2F0MzJBcnJheSIsIkZsb2F0NjRBcnJheSIsIkZ1bmN0aW9uIiwiSW50OEFycmF5IiwiSW50MTZBcnJheSIsIkludDMyQXJyYXkiLCJNYXAiLCJNYXRoIiwiT2JqZWN0IiwiUHJvbWlzZSIsIlJlZ0V4cCIsIlNldCIsIlN0cmluZyIsIlN5bWJvbCIsIlR5cGVFcnJvciIsIlVpbnQ4QXJyYXkiLCJVaW50OENsYW1wZWRBcnJheSIsIlVpbnQxNkFycmF5IiwiVWludDMyQXJyYXkiLCJXZWFrTWFwIiwiXyIsImNsZWFyVGltZW91dCIsImlzRmluaXRlIiwicGFyc2VJbnQiLCJzZXRUaW1lb3V0Il07dmFyIHRlbXBsYXRlQ291bnRlcj0tMTt2YXIgdHlwZWRBcnJheVRhZ3M9e307dHlwZWRBcnJheVRhZ3NbZmxvYXQzMlRhZ109dHlwZWRBcnJheVRhZ3NbZmxvYXQ2NFRhZ109dHlwZWRBcnJheVRhZ3NbaW50OFRhZ109dHlwZWRBcnJheVRhZ3NbaW50MTZUYWddPXR5cGVkQXJyYXlUYWdzW2ludDMyVGFnXT10eXBlZEFycmF5VGFnc1t1aW50OFRhZ109dHlwZWRBcnJheVRhZ3NbdWludDhDbGFtcGVkVGFnXT0KdHlwZWRBcnJheVRhZ3NbdWludDE2VGFnXT10eXBlZEFycmF5VGFnc1t1aW50MzJUYWddPXRydWU7dHlwZWRBcnJheVRhZ3NbYXJnc1RhZ109dHlwZWRBcnJheVRhZ3NbYXJyYXlUYWddPXR5cGVkQXJyYXlUYWdzW2FycmF5QnVmZmVyVGFnXT10eXBlZEFycmF5VGFnc1tib29sVGFnXT10eXBlZEFycmF5VGFnc1tkYXRhVmlld1RhZ109dHlwZWRBcnJheVRhZ3NbZGF0ZVRhZ109dHlwZWRBcnJheVRhZ3NbZXJyb3JUYWddPXR5cGVkQXJyYXlUYWdzW2Z1bmNUYWddPXR5cGVkQXJyYXlUYWdzW21hcFRhZ109dHlwZWRBcnJheVRhZ3NbbnVtYmVyVGFnXT10eXBlZEFycmF5VGFnc1tvYmplY3RUYWddPXR5cGVkQXJyYXlUYWdzW3JlZ2V4cFRhZ109dHlwZWRBcnJheVRhZ3Nbc2V0VGFnXT10eXBlZEFycmF5VGFnc1tzdHJpbmdUYWddPXR5cGVkQXJyYXlUYWdzW3dlYWtNYXBUYWddPWZhbHNlO3ZhciBjbG9uZWFibGVUYWdzPXt9O2Nsb25lYWJsZVRhZ3NbYXJnc1RhZ109Y2xvbmVhYmxlVGFnc1thcnJheVRhZ109CmNsb25lYWJsZVRhZ3NbYXJyYXlCdWZmZXJUYWddPWNsb25lYWJsZVRhZ3NbZGF0YVZpZXdUYWddPWNsb25lYWJsZVRhZ3NbYm9vbFRhZ109Y2xvbmVhYmxlVGFnc1tkYXRlVGFnXT1jbG9uZWFibGVUYWdzW2Zsb2F0MzJUYWddPWNsb25lYWJsZVRhZ3NbZmxvYXQ2NFRhZ109Y2xvbmVhYmxlVGFnc1tpbnQ4VGFnXT1jbG9uZWFibGVUYWdzW2ludDE2VGFnXT1jbG9uZWFibGVUYWdzW2ludDMyVGFnXT1jbG9uZWFibGVUYWdzW21hcFRhZ109Y2xvbmVhYmxlVGFnc1tudW1iZXJUYWddPWNsb25lYWJsZVRhZ3Nbb2JqZWN0VGFnXT1jbG9uZWFibGVUYWdzW3JlZ2V4cFRhZ109Y2xvbmVhYmxlVGFnc1tzZXRUYWddPWNsb25lYWJsZVRhZ3Nbc3RyaW5nVGFnXT1jbG9uZWFibGVUYWdzW3N5bWJvbFRhZ109Y2xvbmVhYmxlVGFnc1t1aW50OFRhZ109Y2xvbmVhYmxlVGFnc1t1aW50OENsYW1wZWRUYWddPWNsb25lYWJsZVRhZ3NbdWludDE2VGFnXT1jbG9uZWFibGVUYWdzW3VpbnQzMlRhZ109dHJ1ZTsKY2xvbmVhYmxlVGFnc1tlcnJvclRhZ109Y2xvbmVhYmxlVGFnc1tmdW5jVGFnXT1jbG9uZWFibGVUYWdzW3dlYWtNYXBUYWddPWZhbHNlO3ZhciBkZWJ1cnJlZExldHRlcnM9eyJcdTAwYzAiOiJBIiwiXHUwMGMxIjoiQSIsIlx1MDBjMiI6IkEiLCJcdTAwYzMiOiJBIiwiXHUwMGM0IjoiQSIsIlx1MDBjNSI6IkEiLCJcdTAwZTAiOiJhIiwiXHUwMGUxIjoiYSIsIlx1MDBlMiI6ImEiLCJcdTAwZTMiOiJhIiwiXHUwMGU0IjoiYSIsIlx1MDBlNSI6ImEiLCJcdTAwYzciOiJDIiwiXHUwMGU3IjoiYyIsIlx1MDBkMCI6IkQiLCJcdTAwZjAiOiJkIiwiXHUwMGM4IjoiRSIsIlx1MDBjOSI6IkUiLCJcdTAwY2EiOiJFIiwiXHUwMGNiIjoiRSIsIlx1MDBlOCI6ImUiLCJcdTAwZTkiOiJlIiwiXHUwMGVhIjoiZSIsIlx1MDBlYiI6ImUiLCJcdTAwY2MiOiJJIiwiXHUwMGNkIjoiSSIsIlx1MDBjZSI6IkkiLCJcdTAwY2YiOiJJIiwiXHUwMGVjIjoiaSIsIlx1MDBlZCI6ImkiLCJcdTAwZWUiOiJpIiwKIlx1MDBlZiI6ImkiLCJcdTAwZDEiOiJOIiwiXHUwMGYxIjoibiIsIlx1MDBkMiI6Ik8iLCJcdTAwZDMiOiJPIiwiXHUwMGQ0IjoiTyIsIlx1MDBkNSI6Ik8iLCJcdTAwZDYiOiJPIiwiXHUwMGQ4IjoiTyIsIlx1MDBmMiI6Im8iLCJcdTAwZjMiOiJvIiwiXHUwMGY0IjoibyIsIlx1MDBmNSI6Im8iLCJcdTAwZjYiOiJvIiwiXHUwMGY4IjoibyIsIlx1MDBkOSI6IlUiLCJcdTAwZGEiOiJVIiwiXHUwMGRiIjoiVSIsIlx1MDBkYyI6IlUiLCJcdTAwZjkiOiJ1IiwiXHUwMGZhIjoidSIsIlx1MDBmYiI6InUiLCJcdTAwZmMiOiJ1IiwiXHUwMGRkIjoiWSIsIlx1MDBmZCI6InkiLCJcdTAwZmYiOiJ5IiwiXHUwMGM2IjoiQWUiLCJcdTAwZTYiOiJhZSIsIlx1MDBkZSI6IlRoIiwiXHUwMGZlIjoidGgiLCJcdTAwZGYiOiJzcyIsIlx1MDEwMCI6IkEiLCJcdTAxMDIiOiJBIiwiXHUwMTA0IjoiQSIsIlx1MDEwMSI6ImEiLCJcdTAxMDMiOiJhIiwiXHUwMTA1IjoiYSIsIlx1MDEwNiI6IkMiLCJcdTAxMDgiOiJDIiwKIlx1MDEwYSI6IkMiLCJcdTAxMGMiOiJDIiwiXHUwMTA3IjoiYyIsIlx1MDEwOSI6ImMiLCJcdTAxMGIiOiJjIiwiXHUwMTBkIjoiYyIsIlx1MDEwZSI6IkQiLCJcdTAxMTAiOiJEIiwiXHUwMTBmIjoiZCIsIlx1MDExMSI6ImQiLCJcdTAxMTIiOiJFIiwiXHUwMTE0IjoiRSIsIlx1MDExNiI6IkUiLCJcdTAxMTgiOiJFIiwiXHUwMTFhIjoiRSIsIlx1MDExMyI6ImUiLCJcdTAxMTUiOiJlIiwiXHUwMTE3IjoiZSIsIlx1MDExOSI6ImUiLCJcdTAxMWIiOiJlIiwiXHUwMTFjIjoiRyIsIlx1MDExZSI6IkciLCJcdTAxMjAiOiJHIiwiXHUwMTIyIjoiRyIsIlx1MDExZCI6ImciLCJcdTAxMWYiOiJnIiwiXHUwMTIxIjoiZyIsIlx1MDEyMyI6ImciLCJcdTAxMjQiOiJIIiwiXHUwMTI2IjoiSCIsIlx1MDEyNSI6ImgiLCJcdTAxMjciOiJoIiwiXHUwMTI4IjoiSSIsIlx1MDEyYSI6IkkiLCJcdTAxMmMiOiJJIiwiXHUwMTJlIjoiSSIsIlx1MDEzMCI6IkkiLCJcdTAxMjkiOiJpIiwiXHUwMTJiIjoiaSIsCiJcdTAxMmQiOiJpIiwiXHUwMTJmIjoiaSIsIlx1MDEzMSI6ImkiLCJcdTAxMzQiOiJKIiwiXHUwMTM1IjoiaiIsIlx1MDEzNiI6IksiLCJcdTAxMzciOiJrIiwiXHUwMTM4IjoiayIsIlx1MDEzOSI6IkwiLCJcdTAxM2IiOiJMIiwiXHUwMTNkIjoiTCIsIlx1MDEzZiI6IkwiLCJcdTAxNDEiOiJMIiwiXHUwMTNhIjoibCIsIlx1MDEzYyI6ImwiLCJcdTAxM2UiOiJsIiwiXHUwMTQwIjoibCIsIlx1MDE0MiI6ImwiLCJcdTAxNDMiOiJOIiwiXHUwMTQ1IjoiTiIsIlx1MDE0NyI6Ik4iLCJcdTAxNGEiOiJOIiwiXHUwMTQ0IjoibiIsIlx1MDE0NiI6Im4iLCJcdTAxNDgiOiJuIiwiXHUwMTRiIjoibiIsIlx1MDE0YyI6Ik8iLCJcdTAxNGUiOiJPIiwiXHUwMTUwIjoiTyIsIlx1MDE0ZCI6Im8iLCJcdTAxNGYiOiJvIiwiXHUwMTUxIjoibyIsIlx1MDE1NCI6IlIiLCJcdTAxNTYiOiJSIiwiXHUwMTU4IjoiUiIsIlx1MDE1NSI6InIiLCJcdTAxNTciOiJyIiwiXHUwMTU5IjoiciIsIlx1MDE1YSI6IlMiLAoiXHUwMTVjIjoiUyIsIlx1MDE1ZSI6IlMiLCJcdTAxNjAiOiJTIiwiXHUwMTViIjoicyIsIlx1MDE1ZCI6InMiLCJcdTAxNWYiOiJzIiwiXHUwMTYxIjoicyIsIlx1MDE2MiI6IlQiLCJcdTAxNjQiOiJUIiwiXHUwMTY2IjoiVCIsIlx1MDE2MyI6InQiLCJcdTAxNjUiOiJ0IiwiXHUwMTY3IjoidCIsIlx1MDE2OCI6IlUiLCJcdTAxNmEiOiJVIiwiXHUwMTZjIjoiVSIsIlx1MDE2ZSI6IlUiLCJcdTAxNzAiOiJVIiwiXHUwMTcyIjoiVSIsIlx1MDE2OSI6InUiLCJcdTAxNmIiOiJ1IiwiXHUwMTZkIjoidSIsIlx1MDE2ZiI6InUiLCJcdTAxNzEiOiJ1IiwiXHUwMTczIjoidSIsIlx1MDE3NCI6IlciLCJcdTAxNzUiOiJ3IiwiXHUwMTc2IjoiWSIsIlx1MDE3NyI6InkiLCJcdTAxNzgiOiJZIiwiXHUwMTc5IjoiWiIsIlx1MDE3YiI6IloiLCJcdTAxN2QiOiJaIiwiXHUwMTdhIjoieiIsIlx1MDE3YyI6InoiLCJcdTAxN2UiOiJ6IiwiXHUwMTMyIjoiSUoiLCJcdTAxMzMiOiJpaiIsIlx1MDE1MiI6Ik9lIiwKIlx1MDE1MyI6Im9lIiwiXHUwMTQ5IjoiJ24iLCJcdTAxN2YiOiJzIn07dmFyIGh0bWxFc2NhcGVzPXsiXHgyNiI6Ilx4MjZhbXA7IiwiXHgzYyI6Ilx4MjZsdDsiLCJceDNlIjoiXHgyNmd0OyIsJyInOiJceDI2cXVvdDsiLCInIjoiXHgyNiMzOTsifTt2YXIgaHRtbFVuZXNjYXBlcz17Ilx4MjZhbXA7IjoiXHgyNiIsIlx4MjZsdDsiOiJceDNjIiwiXHgyNmd0OyI6Ilx4M2UiLCJceDI2cXVvdDsiOiciJywiXHgyNiMzOTsiOiInIn07dmFyIHN0cmluZ0VzY2FwZXM9eyJcXCI6IlxcIiwiJyI6IiciLCJcbiI6Im4iLCJcciI6InIiLCJcdTIwMjgiOiJ1MjAyOCIsIlx1MjAyOSI6InUyMDI5In07dmFyIGZyZWVQYXJzZUZsb2F0PXBhcnNlRmxvYXQsZnJlZVBhcnNlSW50PXBhcnNlSW50O3ZhciBmcmVlR2xvYmFsPXR5cGVvZiBnbG9iYWw9PSJvYmplY3QiJiZnbG9iYWwmJmdsb2JhbC5PYmplY3Q9PT1PYmplY3QmJmdsb2JhbDt2YXIgZnJlZVNlbGY9dHlwZW9mIHNlbGY9PSJvYmplY3QiJiYKc2VsZiYmc2VsZi5PYmplY3Q9PT1PYmplY3QmJnNlbGY7dmFyIHJvb3Q9ZnJlZUdsb2JhbHx8ZnJlZVNlbGZ8fEZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCk7dmFyIGZyZWVFeHBvcnRzPXR5cGVvZiBleHBvcnRzPT0ib2JqZWN0IiYmZXhwb3J0cyYmIWV4cG9ydHMubm9kZVR5cGUmJmV4cG9ydHM7dmFyIGZyZWVNb2R1bGU9ZnJlZUV4cG9ydHMmJnR5cGVvZiBtb2R1bGU9PSJvYmplY3QiJiZtb2R1bGUmJiFtb2R1bGUubm9kZVR5cGUmJm1vZHVsZTt2YXIgbW9kdWxlRXhwb3J0cz1mcmVlTW9kdWxlJiZmcmVlTW9kdWxlLmV4cG9ydHM9PT1mcmVlRXhwb3J0czt2YXIgZnJlZVByb2Nlc3M9bW9kdWxlRXhwb3J0cyYmZnJlZUdsb2JhbC5wcm9jZXNzO3ZhciBub2RlVXRpbD1mdW5jdGlvbigpe3RyeXtyZXR1cm4gZnJlZVByb2Nlc3MmJmZyZWVQcm9jZXNzLmJpbmRpbmcmJmZyZWVQcm9jZXNzLmJpbmRpbmcoInV0aWwiKX1jYXRjaChlKXt9fSgpO3ZhciBub2RlSXNBcnJheUJ1ZmZlcj1ub2RlVXRpbCYmCm5vZGVVdGlsLmlzQXJyYXlCdWZmZXIsbm9kZUlzRGF0ZT1ub2RlVXRpbCYmbm9kZVV0aWwuaXNEYXRlLG5vZGVJc01hcD1ub2RlVXRpbCYmbm9kZVV0aWwuaXNNYXAsbm9kZUlzUmVnRXhwPW5vZGVVdGlsJiZub2RlVXRpbC5pc1JlZ0V4cCxub2RlSXNTZXQ9bm9kZVV0aWwmJm5vZGVVdGlsLmlzU2V0LG5vZGVJc1R5cGVkQXJyYXk9bm9kZVV0aWwmJm5vZGVVdGlsLmlzVHlwZWRBcnJheTtmdW5jdGlvbiBhcHBseShmdW5jLHRoaXNBcmcsYXJncyl7c3dpdGNoKGFyZ3MubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnKTtjYXNlIDE6cmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnLGFyZ3NbMF0pO2Nhc2UgMjpyZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcsYXJnc1swXSxhcmdzWzFdKTtjYXNlIDM6cmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnLGFyZ3NbMF0sYXJnc1sxXSxhcmdzWzJdKX1yZXR1cm4gZnVuYy5hcHBseSh0aGlzQXJnLGFyZ3MpfWZ1bmN0aW9uIGFycmF5QWdncmVnYXRvcihhcnJheSwKc2V0dGVyLGl0ZXJhdGVlLGFjY3VtdWxhdG9yKXt2YXIgaW5kZXg9LTEsbGVuZ3RoPWFycmF5PT1udWxsPzA6YXJyYXkubGVuZ3RoO3doaWxlKCsraW5kZXg8bGVuZ3RoKXt2YXIgdmFsdWU9YXJyYXlbaW5kZXhdO3NldHRlcihhY2N1bXVsYXRvcix2YWx1ZSxpdGVyYXRlZSh2YWx1ZSksYXJyYXkpfXJldHVybiBhY2N1bXVsYXRvcn1mdW5jdGlvbiBhcnJheUVhY2goYXJyYXksaXRlcmF0ZWUpe3ZhciBpbmRleD0tMSxsZW5ndGg9YXJyYXk9PW51bGw/MDphcnJheS5sZW5ndGg7d2hpbGUoKytpbmRleDxsZW5ndGgpaWYoaXRlcmF0ZWUoYXJyYXlbaW5kZXhdLGluZGV4LGFycmF5KT09PWZhbHNlKWJyZWFrO3JldHVybiBhcnJheX1mdW5jdGlvbiBhcnJheUVhY2hSaWdodChhcnJheSxpdGVyYXRlZSl7dmFyIGxlbmd0aD1hcnJheT09bnVsbD8wOmFycmF5Lmxlbmd0aDt3aGlsZShsZW5ndGgtLSlpZihpdGVyYXRlZShhcnJheVtsZW5ndGhdLGxlbmd0aCxhcnJheSk9PT1mYWxzZSlicmVhazsKcmV0dXJuIGFycmF5fWZ1bmN0aW9uIGFycmF5RXZlcnkoYXJyYXkscHJlZGljYXRlKXt2YXIgaW5kZXg9LTEsbGVuZ3RoPWFycmF5PT1udWxsPzA6YXJyYXkubGVuZ3RoO3doaWxlKCsraW5kZXg8bGVuZ3RoKWlmKCFwcmVkaWNhdGUoYXJyYXlbaW5kZXhdLGluZGV4LGFycmF5KSlyZXR1cm4gZmFsc2U7cmV0dXJuIHRydWV9ZnVuY3Rpb24gYXJyYXlGaWx0ZXIoYXJyYXkscHJlZGljYXRlKXt2YXIgaW5kZXg9LTEsbGVuZ3RoPWFycmF5PT1udWxsPzA6YXJyYXkubGVuZ3RoLHJlc0luZGV4PTAscmVzdWx0PVtdO3doaWxlKCsraW5kZXg8bGVuZ3RoKXt2YXIgdmFsdWU9YXJyYXlbaW5kZXhdO2lmKHByZWRpY2F0ZSh2YWx1ZSxpbmRleCxhcnJheSkpcmVzdWx0W3Jlc0luZGV4KytdPXZhbHVlfXJldHVybiByZXN1bHR9ZnVuY3Rpb24gYXJyYXlJbmNsdWRlcyhhcnJheSx2YWx1ZSl7dmFyIGxlbmd0aD1hcnJheT09bnVsbD8wOmFycmF5Lmxlbmd0aDtyZXR1cm4hIWxlbmd0aCYmYmFzZUluZGV4T2YoYXJyYXksCnZhbHVlLDApPi0xfWZ1bmN0aW9uIGFycmF5SW5jbHVkZXNXaXRoKGFycmF5LHZhbHVlLGNvbXBhcmF0b3Ipe3ZhciBpbmRleD0tMSxsZW5ndGg9YXJyYXk9PW51bGw/MDphcnJheS5sZW5ndGg7d2hpbGUoKytpbmRleDxsZW5ndGgpaWYoY29tcGFyYXRvcih2YWx1ZSxhcnJheVtpbmRleF0pKXJldHVybiB0cnVlO3JldHVybiBmYWxzZX1mdW5jdGlvbiBhcnJheU1hcChhcnJheSxpdGVyYXRlZSl7dmFyIGluZGV4PS0xLGxlbmd0aD1hcnJheT09bnVsbD8wOmFycmF5Lmxlbmd0aCxyZXN1bHQ9QXJyYXkobGVuZ3RoKTt3aGlsZSgrK2luZGV4PGxlbmd0aClyZXN1bHRbaW5kZXhdPWl0ZXJhdGVlKGFycmF5W2luZGV4XSxpbmRleCxhcnJheSk7cmV0dXJuIHJlc3VsdH1mdW5jdGlvbiBhcnJheVB1c2goYXJyYXksdmFsdWVzKXt2YXIgaW5kZXg9LTEsbGVuZ3RoPXZhbHVlcy5sZW5ndGgsb2Zmc2V0PWFycmF5Lmxlbmd0aDt3aGlsZSgrK2luZGV4PGxlbmd0aClhcnJheVtvZmZzZXQraW5kZXhdPQp2YWx1ZXNbaW5kZXhdO3JldHVybiBhcnJheX1mdW5jdGlvbiBhcnJheVJlZHVjZShhcnJheSxpdGVyYXRlZSxhY2N1bXVsYXRvcixpbml0QWNjdW0pe3ZhciBpbmRleD0tMSxsZW5ndGg9YXJyYXk9PW51bGw/MDphcnJheS5sZW5ndGg7aWYoaW5pdEFjY3VtJiZsZW5ndGgpYWNjdW11bGF0b3I9YXJyYXlbKytpbmRleF07d2hpbGUoKytpbmRleDxsZW5ndGgpYWNjdW11bGF0b3I9aXRlcmF0ZWUoYWNjdW11bGF0b3IsYXJyYXlbaW5kZXhdLGluZGV4LGFycmF5KTtyZXR1cm4gYWNjdW11bGF0b3J9ZnVuY3Rpb24gYXJyYXlSZWR1Y2VSaWdodChhcnJheSxpdGVyYXRlZSxhY2N1bXVsYXRvcixpbml0QWNjdW0pe3ZhciBsZW5ndGg9YXJyYXk9PW51bGw/MDphcnJheS5sZW5ndGg7aWYoaW5pdEFjY3VtJiZsZW5ndGgpYWNjdW11bGF0b3I9YXJyYXlbLS1sZW5ndGhdO3doaWxlKGxlbmd0aC0tKWFjY3VtdWxhdG9yPWl0ZXJhdGVlKGFjY3VtdWxhdG9yLGFycmF5W2xlbmd0aF0sbGVuZ3RoLGFycmF5KTsKcmV0dXJuIGFjY3VtdWxhdG9yfWZ1bmN0aW9uIGFycmF5U29tZShhcnJheSxwcmVkaWNhdGUpe3ZhciBpbmRleD0tMSxsZW5ndGg9YXJyYXk9PW51bGw/MDphcnJheS5sZW5ndGg7d2hpbGUoKytpbmRleDxsZW5ndGgpaWYocHJlZGljYXRlKGFycmF5W2luZGV4XSxpbmRleCxhcnJheSkpcmV0dXJuIHRydWU7cmV0dXJuIGZhbHNlfXZhciBhc2NpaVNpemU9YmFzZVByb3BlcnR5KCJsZW5ndGgiKTtmdW5jdGlvbiBhc2NpaVRvQXJyYXkoc3RyaW5nKXtyZXR1cm4gc3RyaW5nLnNwbGl0KCIiKX1mdW5jdGlvbiBhc2NpaVdvcmRzKHN0cmluZyl7cmV0dXJuIHN0cmluZy5tYXRjaChyZUFzY2lpV29yZCl8fFtdfWZ1bmN0aW9uIGJhc2VGaW5kS2V5KGNvbGxlY3Rpb24scHJlZGljYXRlLGVhY2hGdW5jKXt2YXIgcmVzdWx0O2VhY2hGdW5jKGNvbGxlY3Rpb24sZnVuY3Rpb24odmFsdWUsa2V5LGNvbGxlY3Rpb24pe2lmKHByZWRpY2F0ZSh2YWx1ZSxrZXksY29sbGVjdGlvbikpe3Jlc3VsdD1rZXk7CnJldHVybiBmYWxzZX19KTtyZXR1cm4gcmVzdWx0fWZ1bmN0aW9uIGJhc2VGaW5kSW5kZXgoYXJyYXkscHJlZGljYXRlLGZyb21JbmRleCxmcm9tUmlnaHQpe3ZhciBsZW5ndGg9YXJyYXkubGVuZ3RoLGluZGV4PWZyb21JbmRleCsoZnJvbVJpZ2h0PzE6LTEpO3doaWxlKGZyb21SaWdodD9pbmRleC0tOisraW5kZXg8bGVuZ3RoKWlmKHByZWRpY2F0ZShhcnJheVtpbmRleF0saW5kZXgsYXJyYXkpKXJldHVybiBpbmRleDtyZXR1cm4tMX1mdW5jdGlvbiBiYXNlSW5kZXhPZihhcnJheSx2YWx1ZSxmcm9tSW5kZXgpe3JldHVybiB2YWx1ZT09PXZhbHVlP3N0cmljdEluZGV4T2YoYXJyYXksdmFsdWUsZnJvbUluZGV4KTpiYXNlRmluZEluZGV4KGFycmF5LGJhc2VJc05hTixmcm9tSW5kZXgpfWZ1bmN0aW9uIGJhc2VJbmRleE9mV2l0aChhcnJheSx2YWx1ZSxmcm9tSW5kZXgsY29tcGFyYXRvcil7dmFyIGluZGV4PWZyb21JbmRleC0xLGxlbmd0aD1hcnJheS5sZW5ndGg7d2hpbGUoKytpbmRleDwKbGVuZ3RoKWlmKGNvbXBhcmF0b3IoYXJyYXlbaW5kZXhdLHZhbHVlKSlyZXR1cm4gaW5kZXg7cmV0dXJuLTF9ZnVuY3Rpb24gYmFzZUlzTmFOKHZhbHVlKXtyZXR1cm4gdmFsdWUhPT12YWx1ZX1mdW5jdGlvbiBiYXNlTWVhbihhcnJheSxpdGVyYXRlZSl7dmFyIGxlbmd0aD1hcnJheT09bnVsbD8wOmFycmF5Lmxlbmd0aDtyZXR1cm4gbGVuZ3RoP2Jhc2VTdW0oYXJyYXksaXRlcmF0ZWUpL2xlbmd0aDpOQU59ZnVuY3Rpb24gYmFzZVByb3BlcnR5KGtleSl7cmV0dXJuIGZ1bmN0aW9uKG9iamVjdCl7cmV0dXJuIG9iamVjdD09bnVsbD91bmRlZmluZWQ6b2JqZWN0W2tleV19fWZ1bmN0aW9uIGJhc2VQcm9wZXJ0eU9mKG9iamVjdCl7cmV0dXJuIGZ1bmN0aW9uKGtleSl7cmV0dXJuIG9iamVjdD09bnVsbD91bmRlZmluZWQ6b2JqZWN0W2tleV19fWZ1bmN0aW9uIGJhc2VSZWR1Y2UoY29sbGVjdGlvbixpdGVyYXRlZSxhY2N1bXVsYXRvcixpbml0QWNjdW0sZWFjaEZ1bmMpe2VhY2hGdW5jKGNvbGxlY3Rpb24sCmZ1bmN0aW9uKHZhbHVlLGluZGV4LGNvbGxlY3Rpb24pe2FjY3VtdWxhdG9yPWluaXRBY2N1bT8oaW5pdEFjY3VtPWZhbHNlLHZhbHVlKTppdGVyYXRlZShhY2N1bXVsYXRvcix2YWx1ZSxpbmRleCxjb2xsZWN0aW9uKX0pO3JldHVybiBhY2N1bXVsYXRvcn1mdW5jdGlvbiBiYXNlU29ydEJ5KGFycmF5LGNvbXBhcmVyKXt2YXIgbGVuZ3RoPWFycmF5Lmxlbmd0aDthcnJheS5zb3J0KGNvbXBhcmVyKTt3aGlsZShsZW5ndGgtLSlhcnJheVtsZW5ndGhdPWFycmF5W2xlbmd0aF0udmFsdWU7cmV0dXJuIGFycmF5fWZ1bmN0aW9uIGJhc2VTdW0oYXJyYXksaXRlcmF0ZWUpe3ZhciByZXN1bHQsaW5kZXg9LTEsbGVuZ3RoPWFycmF5Lmxlbmd0aDt3aGlsZSgrK2luZGV4PGxlbmd0aCl7dmFyIGN1cnJlbnQ9aXRlcmF0ZWUoYXJyYXlbaW5kZXhdKTtpZihjdXJyZW50IT09dW5kZWZpbmVkKXJlc3VsdD1yZXN1bHQ9PT11bmRlZmluZWQ/Y3VycmVudDpyZXN1bHQrY3VycmVudH1yZXR1cm4gcmVzdWx0fQpmdW5jdGlvbiBiYXNlVGltZXMobixpdGVyYXRlZSl7dmFyIGluZGV4PS0xLHJlc3VsdD1BcnJheShuKTt3aGlsZSgrK2luZGV4PG4pcmVzdWx0W2luZGV4XT1pdGVyYXRlZShpbmRleCk7cmV0dXJuIHJlc3VsdH1mdW5jdGlvbiBiYXNlVG9QYWlycyhvYmplY3QscHJvcHMpe3JldHVybiBhcnJheU1hcChwcm9wcyxmdW5jdGlvbihrZXkpe3JldHVybltrZXksb2JqZWN0W2tleV1dfSl9ZnVuY3Rpb24gYmFzZVVuYXJ5KGZ1bmMpe3JldHVybiBmdW5jdGlvbih2YWx1ZSl7cmV0dXJuIGZ1bmModmFsdWUpfX1mdW5jdGlvbiBiYXNlVmFsdWVzKG9iamVjdCxwcm9wcyl7cmV0dXJuIGFycmF5TWFwKHByb3BzLGZ1bmN0aW9uKGtleSl7cmV0dXJuIG9iamVjdFtrZXldfSl9ZnVuY3Rpb24gY2FjaGVIYXMoY2FjaGUsa2V5KXtyZXR1cm4gY2FjaGUuaGFzKGtleSl9ZnVuY3Rpb24gY2hhcnNTdGFydEluZGV4KHN0clN5bWJvbHMsY2hyU3ltYm9scyl7dmFyIGluZGV4PS0xLGxlbmd0aD1zdHJTeW1ib2xzLmxlbmd0aDsKd2hpbGUoKytpbmRleDxsZW5ndGgmJmJhc2VJbmRleE9mKGNoclN5bWJvbHMsc3RyU3ltYm9sc1tpbmRleF0sMCk+LTEpO3JldHVybiBpbmRleH1mdW5jdGlvbiBjaGFyc0VuZEluZGV4KHN0clN5bWJvbHMsY2hyU3ltYm9scyl7dmFyIGluZGV4PXN0clN5bWJvbHMubGVuZ3RoO3doaWxlKGluZGV4LS0mJmJhc2VJbmRleE9mKGNoclN5bWJvbHMsc3RyU3ltYm9sc1tpbmRleF0sMCk+LTEpO3JldHVybiBpbmRleH1mdW5jdGlvbiBjb3VudEhvbGRlcnMoYXJyYXkscGxhY2Vob2xkZXIpe3ZhciBsZW5ndGg9YXJyYXkubGVuZ3RoLHJlc3VsdD0wO3doaWxlKGxlbmd0aC0tKWlmKGFycmF5W2xlbmd0aF09PT1wbGFjZWhvbGRlcikrK3Jlc3VsdDtyZXR1cm4gcmVzdWx0fXZhciBkZWJ1cnJMZXR0ZXI9YmFzZVByb3BlcnR5T2YoZGVidXJyZWRMZXR0ZXJzKTt2YXIgZXNjYXBlSHRtbENoYXI9YmFzZVByb3BlcnR5T2YoaHRtbEVzY2FwZXMpO2Z1bmN0aW9uIGVzY2FwZVN0cmluZ0NoYXIoY2hyKXtyZXR1cm4iXFwiKwpzdHJpbmdFc2NhcGVzW2Nocl19ZnVuY3Rpb24gZ2V0VmFsdWUob2JqZWN0LGtleSl7cmV0dXJuIG9iamVjdD09bnVsbD91bmRlZmluZWQ6b2JqZWN0W2tleV19ZnVuY3Rpb24gaGFzVW5pY29kZShzdHJpbmcpe3JldHVybiByZUhhc1VuaWNvZGUudGVzdChzdHJpbmcpfWZ1bmN0aW9uIGhhc1VuaWNvZGVXb3JkKHN0cmluZyl7cmV0dXJuIHJlSGFzVW5pY29kZVdvcmQudGVzdChzdHJpbmcpfWZ1bmN0aW9uIGl0ZXJhdG9yVG9BcnJheShpdGVyYXRvcil7dmFyIGRhdGEscmVzdWx0PVtdO3doaWxlKCEoZGF0YT1pdGVyYXRvci5uZXh0KCkpLmRvbmUpcmVzdWx0LnB1c2goZGF0YS52YWx1ZSk7cmV0dXJuIHJlc3VsdH1mdW5jdGlvbiBtYXBUb0FycmF5KG1hcCl7dmFyIGluZGV4PS0xLHJlc3VsdD1BcnJheShtYXAuc2l6ZSk7bWFwLmZvckVhY2goZnVuY3Rpb24odmFsdWUsa2V5KXtyZXN1bHRbKytpbmRleF09W2tleSx2YWx1ZV19KTtyZXR1cm4gcmVzdWx0fWZ1bmN0aW9uIG92ZXJBcmcoZnVuYywKdHJhbnNmb3JtKXtyZXR1cm4gZnVuY3Rpb24oYXJnKXtyZXR1cm4gZnVuYyh0cmFuc2Zvcm0oYXJnKSl9fWZ1bmN0aW9uIHJlcGxhY2VIb2xkZXJzKGFycmF5LHBsYWNlaG9sZGVyKXt2YXIgaW5kZXg9LTEsbGVuZ3RoPWFycmF5Lmxlbmd0aCxyZXNJbmRleD0wLHJlc3VsdD1bXTt3aGlsZSgrK2luZGV4PGxlbmd0aCl7dmFyIHZhbHVlPWFycmF5W2luZGV4XTtpZih2YWx1ZT09PXBsYWNlaG9sZGVyfHx2YWx1ZT09PVBMQUNFSE9MREVSKXthcnJheVtpbmRleF09UExBQ0VIT0xERVI7cmVzdWx0W3Jlc0luZGV4KytdPWluZGV4fX1yZXR1cm4gcmVzdWx0fWZ1bmN0aW9uIHNhZmVHZXQob2JqZWN0LGtleSl7cmV0dXJuIGtleT09Il9fcHJvdG9fXyI/dW5kZWZpbmVkOm9iamVjdFtrZXldfWZ1bmN0aW9uIHNldFRvQXJyYXkoc2V0KXt2YXIgaW5kZXg9LTEscmVzdWx0PUFycmF5KHNldC5zaXplKTtzZXQuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSl7cmVzdWx0WysraW5kZXhdPXZhbHVlfSk7CnJldHVybiByZXN1bHR9ZnVuY3Rpb24gc2V0VG9QYWlycyhzZXQpe3ZhciBpbmRleD0tMSxyZXN1bHQ9QXJyYXkoc2V0LnNpemUpO3NldC5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlKXtyZXN1bHRbKytpbmRleF09W3ZhbHVlLHZhbHVlXX0pO3JldHVybiByZXN1bHR9ZnVuY3Rpb24gc3RyaWN0SW5kZXhPZihhcnJheSx2YWx1ZSxmcm9tSW5kZXgpe3ZhciBpbmRleD1mcm9tSW5kZXgtMSxsZW5ndGg9YXJyYXkubGVuZ3RoO3doaWxlKCsraW5kZXg8bGVuZ3RoKWlmKGFycmF5W2luZGV4XT09PXZhbHVlKXJldHVybiBpbmRleDtyZXR1cm4tMX1mdW5jdGlvbiBzdHJpY3RMYXN0SW5kZXhPZihhcnJheSx2YWx1ZSxmcm9tSW5kZXgpe3ZhciBpbmRleD1mcm9tSW5kZXgrMTt3aGlsZShpbmRleC0tKWlmKGFycmF5W2luZGV4XT09PXZhbHVlKXJldHVybiBpbmRleDtyZXR1cm4gaW5kZXh9ZnVuY3Rpb24gc3RyaW5nU2l6ZShzdHJpbmcpe3JldHVybiBoYXNVbmljb2RlKHN0cmluZyk/dW5pY29kZVNpemUoc3RyaW5nKToKYXNjaWlTaXplKHN0cmluZyl9ZnVuY3Rpb24gc3RyaW5nVG9BcnJheShzdHJpbmcpe3JldHVybiBoYXNVbmljb2RlKHN0cmluZyk/dW5pY29kZVRvQXJyYXkoc3RyaW5nKTphc2NpaVRvQXJyYXkoc3RyaW5nKX12YXIgdW5lc2NhcGVIdG1sQ2hhcj1iYXNlUHJvcGVydHlPZihodG1sVW5lc2NhcGVzKTtmdW5jdGlvbiB1bmljb2RlU2l6ZShzdHJpbmcpe3ZhciByZXN1bHQ9cmVVbmljb2RlLmxhc3RJbmRleD0wO3doaWxlKHJlVW5pY29kZS50ZXN0KHN0cmluZykpKytyZXN1bHQ7cmV0dXJuIHJlc3VsdH1mdW5jdGlvbiB1bmljb2RlVG9BcnJheShzdHJpbmcpe3JldHVybiBzdHJpbmcubWF0Y2gocmVVbmljb2RlKXx8W119ZnVuY3Rpb24gdW5pY29kZVdvcmRzKHN0cmluZyl7cmV0dXJuIHN0cmluZy5tYXRjaChyZVVuaWNvZGVXb3JkKXx8W119dmFyIHJ1bkluQ29udGV4dD1mdW5jdGlvbiBydW5JbkNvbnRleHQoY29udGV4dCl7Y29udGV4dD1jb250ZXh0PT1udWxsP3Jvb3Q6Xy5kZWZhdWx0cyhyb290Lk9iamVjdCgpLApjb250ZXh0LF8ucGljayhyb290LGNvbnRleHRQcm9wcykpO3ZhciBBcnJheT1jb250ZXh0LkFycmF5LERhdGU9Y29udGV4dC5EYXRlLEVycm9yPWNvbnRleHQuRXJyb3IsRnVuY3Rpb249Y29udGV4dC5GdW5jdGlvbixNYXRoPWNvbnRleHQuTWF0aCxPYmplY3Q9Y29udGV4dC5PYmplY3QsUmVnRXhwPWNvbnRleHQuUmVnRXhwLFN0cmluZz1jb250ZXh0LlN0cmluZyxUeXBlRXJyb3I9Y29udGV4dC5UeXBlRXJyb3I7dmFyIGFycmF5UHJvdG89QXJyYXkucHJvdG90eXBlLGZ1bmNQcm90bz1GdW5jdGlvbi5wcm90b3R5cGUsb2JqZWN0UHJvdG89T2JqZWN0LnByb3RvdHlwZTt2YXIgY29yZUpzRGF0YT1jb250ZXh0WyJfX2NvcmUtanNfc2hhcmVkX18iXTt2YXIgZnVuY1RvU3RyaW5nPWZ1bmNQcm90by50b1N0cmluZzt2YXIgaGFzT3duUHJvcGVydHk9b2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7dmFyIGlkQ291bnRlcj0wO3ZhciBtYXNrU3JjS2V5PWZ1bmN0aW9uKCl7dmFyIHVpZD0KL1teLl0rJC8uZXhlYyhjb3JlSnNEYXRhJiZjb3JlSnNEYXRhLmtleXMmJmNvcmVKc0RhdGEua2V5cy5JRV9QUk9UT3x8IiIpO3JldHVybiB1aWQ/IlN5bWJvbChzcmMpXzEuIit1aWQ6IiJ9KCk7dmFyIG5hdGl2ZU9iamVjdFRvU3RyaW5nPW9iamVjdFByb3RvLnRvU3RyaW5nO3ZhciBvYmplY3RDdG9yU3RyaW5nPWZ1bmNUb1N0cmluZy5jYWxsKE9iamVjdCk7dmFyIG9sZERhc2g9cm9vdC5fO3ZhciByZUlzTmF0aXZlPVJlZ0V4cCgiXiIrZnVuY1RvU3RyaW5nLmNhbGwoaGFzT3duUHJvcGVydHkpLnJlcGxhY2UocmVSZWdFeHBDaGFyLCJcXCRceDI2IikucmVwbGFjZSgvaGFzT3duUHJvcGVydHl8KGZ1bmN0aW9uKS4qPyg/PVxcXCgpfCBmb3IgLis/KD89XFxcXSkvZywiJDEuKj8iKSsiJCIpO3ZhciBCdWZmZXI9bW9kdWxlRXhwb3J0cz9jb250ZXh0LkJ1ZmZlcjp1bmRlZmluZWQsU3ltYm9sPWNvbnRleHQuU3ltYm9sLFVpbnQ4QXJyYXk9Y29udGV4dC5VaW50OEFycmF5LGFsbG9jVW5zYWZlPQpCdWZmZXI/QnVmZmVyLmFsbG9jVW5zYWZlOnVuZGVmaW5lZCxnZXRQcm90b3R5cGU9b3ZlckFyZyhPYmplY3QuZ2V0UHJvdG90eXBlT2YsT2JqZWN0KSxvYmplY3RDcmVhdGU9T2JqZWN0LmNyZWF0ZSxwcm9wZXJ0eUlzRW51bWVyYWJsZT1vYmplY3RQcm90by5wcm9wZXJ0eUlzRW51bWVyYWJsZSxzcGxpY2U9YXJyYXlQcm90by5zcGxpY2Usc3ByZWFkYWJsZVN5bWJvbD1TeW1ib2w/U3ltYm9sLmlzQ29uY2F0U3ByZWFkYWJsZTp1bmRlZmluZWQsc3ltSXRlcmF0b3I9U3ltYm9sP1N5bWJvbC5pdGVyYXRvcjp1bmRlZmluZWQsc3ltVG9TdHJpbmdUYWc9U3ltYm9sP1N5bWJvbC50b1N0cmluZ1RhZzp1bmRlZmluZWQ7dmFyIGRlZmluZVByb3BlcnR5PWZ1bmN0aW9uKCl7dHJ5e3ZhciBmdW5jPWdldE5hdGl2ZShPYmplY3QsImRlZmluZVByb3BlcnR5Iik7ZnVuYyh7fSwiIix7fSk7cmV0dXJuIGZ1bmN9Y2F0Y2goZSl7fX0oKTt2YXIgY3R4Q2xlYXJUaW1lb3V0PWNvbnRleHQuY2xlYXJUaW1lb3V0IT09CnJvb3QuY2xlYXJUaW1lb3V0JiZjb250ZXh0LmNsZWFyVGltZW91dCxjdHhOb3c9RGF0ZSYmRGF0ZS5ub3chPT1yb290LkRhdGUubm93JiZEYXRlLm5vdyxjdHhTZXRUaW1lb3V0PWNvbnRleHQuc2V0VGltZW91dCE9PXJvb3Quc2V0VGltZW91dCYmY29udGV4dC5zZXRUaW1lb3V0O3ZhciBuYXRpdmVDZWlsPU1hdGguY2VpbCxuYXRpdmVGbG9vcj1NYXRoLmZsb29yLG5hdGl2ZUdldFN5bWJvbHM9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyxuYXRpdmVJc0J1ZmZlcj1CdWZmZXI/QnVmZmVyLmlzQnVmZmVyOnVuZGVmaW5lZCxuYXRpdmVJc0Zpbml0ZT1jb250ZXh0LmlzRmluaXRlLG5hdGl2ZUpvaW49YXJyYXlQcm90by5qb2luLG5hdGl2ZUtleXM9b3ZlckFyZyhPYmplY3Qua2V5cyxPYmplY3QpLG5hdGl2ZU1heD1NYXRoLm1heCxuYXRpdmVNaW49TWF0aC5taW4sbmF0aXZlTm93PURhdGUubm93LG5hdGl2ZVBhcnNlSW50PWNvbnRleHQucGFyc2VJbnQsbmF0aXZlUmFuZG9tPQpNYXRoLnJhbmRvbSxuYXRpdmVSZXZlcnNlPWFycmF5UHJvdG8ucmV2ZXJzZTt2YXIgRGF0YVZpZXc9Z2V0TmF0aXZlKGNvbnRleHQsIkRhdGFWaWV3IiksTWFwPWdldE5hdGl2ZShjb250ZXh0LCJNYXAiKSxQcm9taXNlPWdldE5hdGl2ZShjb250ZXh0LCJQcm9taXNlIiksU2V0PWdldE5hdGl2ZShjb250ZXh0LCJTZXQiKSxXZWFrTWFwPWdldE5hdGl2ZShjb250ZXh0LCJXZWFrTWFwIiksbmF0aXZlQ3JlYXRlPWdldE5hdGl2ZShPYmplY3QsImNyZWF0ZSIpO3ZhciBtZXRhTWFwPVdlYWtNYXAmJm5ldyBXZWFrTWFwO3ZhciByZWFsTmFtZXM9e307dmFyIGRhdGFWaWV3Q3RvclN0cmluZz10b1NvdXJjZShEYXRhVmlldyksbWFwQ3RvclN0cmluZz10b1NvdXJjZShNYXApLHByb21pc2VDdG9yU3RyaW5nPXRvU291cmNlKFByb21pc2UpLHNldEN0b3JTdHJpbmc9dG9Tb3VyY2UoU2V0KSx3ZWFrTWFwQ3RvclN0cmluZz10b1NvdXJjZShXZWFrTWFwKTt2YXIgc3ltYm9sUHJvdG89U3ltYm9sPwpTeW1ib2wucHJvdG90eXBlOnVuZGVmaW5lZCxzeW1ib2xWYWx1ZU9mPXN5bWJvbFByb3RvP3N5bWJvbFByb3RvLnZhbHVlT2Y6dW5kZWZpbmVkLHN5bWJvbFRvU3RyaW5nPXN5bWJvbFByb3RvP3N5bWJvbFByb3RvLnRvU3RyaW5nOnVuZGVmaW5lZDtmdW5jdGlvbiBsb2Rhc2godmFsdWUpe2lmKGlzT2JqZWN0TGlrZSh2YWx1ZSkmJiFpc0FycmF5KHZhbHVlKSYmISh2YWx1ZSBpbnN0YW5jZW9mIExhenlXcmFwcGVyKSl7aWYodmFsdWUgaW5zdGFuY2VvZiBMb2Rhc2hXcmFwcGVyKXJldHVybiB2YWx1ZTtpZihoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCJfX3dyYXBwZWRfXyIpKXJldHVybiB3cmFwcGVyQ2xvbmUodmFsdWUpfXJldHVybiBuZXcgTG9kYXNoV3JhcHBlcih2YWx1ZSl9dmFyIGJhc2VDcmVhdGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBvYmplY3QoKXt9cmV0dXJuIGZ1bmN0aW9uKHByb3RvKXtpZighaXNPYmplY3QocHJvdG8pKXJldHVybnt9O2lmKG9iamVjdENyZWF0ZSlyZXR1cm4gb2JqZWN0Q3JlYXRlKHByb3RvKTsKb2JqZWN0LnByb3RvdHlwZT1wcm90bzt2YXIgcmVzdWx0PW5ldyBvYmplY3Q7b2JqZWN0LnByb3RvdHlwZT11bmRlZmluZWQ7cmV0dXJuIHJlc3VsdH19KCk7ZnVuY3Rpb24gYmFzZUxvZGFzaCgpe31mdW5jdGlvbiBMb2Rhc2hXcmFwcGVyKHZhbHVlLGNoYWluQWxsKXt0aGlzLl9fd3JhcHBlZF9fPXZhbHVlO3RoaXMuX19hY3Rpb25zX189W107dGhpcy5fX2NoYWluX189ISFjaGFpbkFsbDt0aGlzLl9faW5kZXhfXz0wO3RoaXMuX192YWx1ZXNfXz11bmRlZmluZWR9bG9kYXNoLnRlbXBsYXRlU2V0dGluZ3M9eyJlc2NhcGUiOnJlRXNjYXBlLCJldmFsdWF0ZSI6cmVFdmFsdWF0ZSwiaW50ZXJwb2xhdGUiOnJlSW50ZXJwb2xhdGUsInZhcmlhYmxlIjoiIiwiaW1wb3J0cyI6eyJfIjpsb2Rhc2h9fTtsb2Rhc2gucHJvdG90eXBlPWJhc2VMb2Rhc2gucHJvdG90eXBlO2xvZGFzaC5wcm90b3R5cGUuY29uc3RydWN0b3I9bG9kYXNoO0xvZGFzaFdyYXBwZXIucHJvdG90eXBlPWJhc2VDcmVhdGUoYmFzZUxvZGFzaC5wcm90b3R5cGUpOwpMb2Rhc2hXcmFwcGVyLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1Mb2Rhc2hXcmFwcGVyO2Z1bmN0aW9uIExhenlXcmFwcGVyKHZhbHVlKXt0aGlzLl9fd3JhcHBlZF9fPXZhbHVlO3RoaXMuX19hY3Rpb25zX189W107dGhpcy5fX2Rpcl9fPTE7dGhpcy5fX2ZpbHRlcmVkX189ZmFsc2U7dGhpcy5fX2l0ZXJhdGVlc19fPVtdO3RoaXMuX190YWtlQ291bnRfXz1NQVhfQVJSQVlfTEVOR1RIO3RoaXMuX192aWV3c19fPVtdfWZ1bmN0aW9uIGxhenlDbG9uZSgpe3ZhciByZXN1bHQ9bmV3IExhenlXcmFwcGVyKHRoaXMuX193cmFwcGVkX18pO3Jlc3VsdC5fX2FjdGlvbnNfXz1jb3B5QXJyYXkodGhpcy5fX2FjdGlvbnNfXyk7cmVzdWx0Ll9fZGlyX189dGhpcy5fX2Rpcl9fO3Jlc3VsdC5fX2ZpbHRlcmVkX189dGhpcy5fX2ZpbHRlcmVkX187cmVzdWx0Ll9faXRlcmF0ZWVzX189Y29weUFycmF5KHRoaXMuX19pdGVyYXRlZXNfXyk7cmVzdWx0Ll9fdGFrZUNvdW50X189dGhpcy5fX3Rha2VDb3VudF9fOwpyZXN1bHQuX192aWV3c19fPWNvcHlBcnJheSh0aGlzLl9fdmlld3NfXyk7cmV0dXJuIHJlc3VsdH1mdW5jdGlvbiBsYXp5UmV2ZXJzZSgpe2lmKHRoaXMuX19maWx0ZXJlZF9fKXt2YXIgcmVzdWx0PW5ldyBMYXp5V3JhcHBlcih0aGlzKTtyZXN1bHQuX19kaXJfXz0tMTtyZXN1bHQuX19maWx0ZXJlZF9fPXRydWV9ZWxzZXtyZXN1bHQ9dGhpcy5jbG9uZSgpO3Jlc3VsdC5fX2Rpcl9fKj0tMX1yZXR1cm4gcmVzdWx0fWZ1bmN0aW9uIGxhenlWYWx1ZSgpe3ZhciBhcnJheT10aGlzLl9fd3JhcHBlZF9fLnZhbHVlKCksZGlyPXRoaXMuX19kaXJfXyxpc0Fycj1pc0FycmF5KGFycmF5KSxpc1JpZ2h0PWRpcjwwLGFyckxlbmd0aD1pc0Fycj9hcnJheS5sZW5ndGg6MCx2aWV3PWdldFZpZXcoMCxhcnJMZW5ndGgsdGhpcy5fX3ZpZXdzX18pLHN0YXJ0PXZpZXcuc3RhcnQsZW5kPXZpZXcuZW5kLGxlbmd0aD1lbmQtc3RhcnQsaW5kZXg9aXNSaWdodD9lbmQ6c3RhcnQtMSxpdGVyYXRlZXM9dGhpcy5fX2l0ZXJhdGVlc19fLAppdGVyTGVuZ3RoPWl0ZXJhdGVlcy5sZW5ndGgscmVzSW5kZXg9MCx0YWtlQ291bnQ9bmF0aXZlTWluKGxlbmd0aCx0aGlzLl9fdGFrZUNvdW50X18pO2lmKCFpc0Fycnx8IWlzUmlnaHQmJmFyckxlbmd0aD09bGVuZ3RoJiZ0YWtlQ291bnQ9PWxlbmd0aClyZXR1cm4gYmFzZVdyYXBwZXJWYWx1ZShhcnJheSx0aGlzLl9fYWN0aW9uc19fKTt2YXIgcmVzdWx0PVtdO291dGVyOndoaWxlKGxlbmd0aC0tJiZyZXNJbmRleDx0YWtlQ291bnQpe2luZGV4Kz1kaXI7dmFyIGl0ZXJJbmRleD0tMSx2YWx1ZT1hcnJheVtpbmRleF07d2hpbGUoKytpdGVySW5kZXg8aXRlckxlbmd0aCl7dmFyIGRhdGE9aXRlcmF0ZWVzW2l0ZXJJbmRleF0saXRlcmF0ZWU9ZGF0YS5pdGVyYXRlZSx0eXBlPWRhdGEudHlwZSxjb21wdXRlZD1pdGVyYXRlZSh2YWx1ZSk7aWYodHlwZT09TEFaWV9NQVBfRkxBRyl2YWx1ZT1jb21wdXRlZDtlbHNlIGlmKCFjb21wdXRlZClpZih0eXBlPT1MQVpZX0ZJTFRFUl9GTEFHKWNvbnRpbnVlIG91dGVyOwplbHNlIGJyZWFrIG91dGVyfXJlc3VsdFtyZXNJbmRleCsrXT12YWx1ZX1yZXR1cm4gcmVzdWx0fUxhenlXcmFwcGVyLnByb3RvdHlwZT1iYXNlQ3JlYXRlKGJhc2VMb2Rhc2gucHJvdG90eXBlKTtMYXp5V3JhcHBlci5wcm90b3R5cGUuY29uc3RydWN0b3I9TGF6eVdyYXBwZXI7ZnVuY3Rpb24gSGFzaChlbnRyaWVzKXt2YXIgaW5kZXg9LTEsbGVuZ3RoPWVudHJpZXM9PW51bGw/MDplbnRyaWVzLmxlbmd0aDt0aGlzLmNsZWFyKCk7d2hpbGUoKytpbmRleDxsZW5ndGgpe3ZhciBlbnRyeT1lbnRyaWVzW2luZGV4XTt0aGlzLnNldChlbnRyeVswXSxlbnRyeVsxXSl9fWZ1bmN0aW9uIGhhc2hDbGVhcigpe3RoaXMuX19kYXRhX189bmF0aXZlQ3JlYXRlP25hdGl2ZUNyZWF0ZShudWxsKTp7fTt0aGlzLnNpemU9MH1mdW5jdGlvbiBoYXNoRGVsZXRlKGtleSl7dmFyIHJlc3VsdD10aGlzLmhhcyhrZXkpJiZkZWxldGUgdGhpcy5fX2RhdGFfX1trZXldO3RoaXMuc2l6ZS09cmVzdWx0PzE6MDsKcmV0dXJuIHJlc3VsdH1mdW5jdGlvbiBoYXNoR2V0KGtleSl7dmFyIGRhdGE9dGhpcy5fX2RhdGFfXztpZihuYXRpdmVDcmVhdGUpe3ZhciByZXN1bHQ9ZGF0YVtrZXldO3JldHVybiByZXN1bHQ9PT1IQVNIX1VOREVGSU5FRD91bmRlZmluZWQ6cmVzdWx0fXJldHVybiBoYXNPd25Qcm9wZXJ0eS5jYWxsKGRhdGEsa2V5KT9kYXRhW2tleV06dW5kZWZpbmVkfWZ1bmN0aW9uIGhhc2hIYXMoa2V5KXt2YXIgZGF0YT10aGlzLl9fZGF0YV9fO3JldHVybiBuYXRpdmVDcmVhdGU/ZGF0YVtrZXldIT09dW5kZWZpbmVkOmhhc093blByb3BlcnR5LmNhbGwoZGF0YSxrZXkpfWZ1bmN0aW9uIGhhc2hTZXQoa2V5LHZhbHVlKXt2YXIgZGF0YT10aGlzLl9fZGF0YV9fO3RoaXMuc2l6ZSs9dGhpcy5oYXMoa2V5KT8wOjE7ZGF0YVtrZXldPW5hdGl2ZUNyZWF0ZSYmdmFsdWU9PT11bmRlZmluZWQ/SEFTSF9VTkRFRklORUQ6dmFsdWU7cmV0dXJuIHRoaXN9SGFzaC5wcm90b3R5cGUuY2xlYXI9aGFzaENsZWFyOwpIYXNoLnByb3RvdHlwZVsiZGVsZXRlIl09aGFzaERlbGV0ZTtIYXNoLnByb3RvdHlwZS5nZXQ9aGFzaEdldDtIYXNoLnByb3RvdHlwZS5oYXM9aGFzaEhhcztIYXNoLnByb3RvdHlwZS5zZXQ9aGFzaFNldDtmdW5jdGlvbiBMaXN0Q2FjaGUoZW50cmllcyl7dmFyIGluZGV4PS0xLGxlbmd0aD1lbnRyaWVzPT1udWxsPzA6ZW50cmllcy5sZW5ndGg7dGhpcy5jbGVhcigpO3doaWxlKCsraW5kZXg8bGVuZ3RoKXt2YXIgZW50cnk9ZW50cmllc1tpbmRleF07dGhpcy5zZXQoZW50cnlbMF0sZW50cnlbMV0pfX1mdW5jdGlvbiBsaXN0Q2FjaGVDbGVhcigpe3RoaXMuX19kYXRhX189W107dGhpcy5zaXplPTB9ZnVuY3Rpb24gbGlzdENhY2hlRGVsZXRlKGtleSl7dmFyIGRhdGE9dGhpcy5fX2RhdGFfXyxpbmRleD1hc3NvY0luZGV4T2YoZGF0YSxrZXkpO2lmKGluZGV4PDApcmV0dXJuIGZhbHNlO3ZhciBsYXN0SW5kZXg9ZGF0YS5sZW5ndGgtMTtpZihpbmRleD09bGFzdEluZGV4KWRhdGEucG9wKCk7CmVsc2Ugc3BsaWNlLmNhbGwoZGF0YSxpbmRleCwxKTstLXRoaXMuc2l6ZTtyZXR1cm4gdHJ1ZX1mdW5jdGlvbiBsaXN0Q2FjaGVHZXQoa2V5KXt2YXIgZGF0YT10aGlzLl9fZGF0YV9fLGluZGV4PWFzc29jSW5kZXhPZihkYXRhLGtleSk7cmV0dXJuIGluZGV4PDA/dW5kZWZpbmVkOmRhdGFbaW5kZXhdWzFdfWZ1bmN0aW9uIGxpc3RDYWNoZUhhcyhrZXkpe3JldHVybiBhc3NvY0luZGV4T2YodGhpcy5fX2RhdGFfXyxrZXkpPi0xfWZ1bmN0aW9uIGxpc3RDYWNoZVNldChrZXksdmFsdWUpe3ZhciBkYXRhPXRoaXMuX19kYXRhX18saW5kZXg9YXNzb2NJbmRleE9mKGRhdGEsa2V5KTtpZihpbmRleDwwKXsrK3RoaXMuc2l6ZTtkYXRhLnB1c2goW2tleSx2YWx1ZV0pfWVsc2UgZGF0YVtpbmRleF1bMV09dmFsdWU7cmV0dXJuIHRoaXN9TGlzdENhY2hlLnByb3RvdHlwZS5jbGVhcj1saXN0Q2FjaGVDbGVhcjtMaXN0Q2FjaGUucHJvdG90eXBlWyJkZWxldGUiXT1saXN0Q2FjaGVEZWxldGU7TGlzdENhY2hlLnByb3RvdHlwZS5nZXQ9Cmxpc3RDYWNoZUdldDtMaXN0Q2FjaGUucHJvdG90eXBlLmhhcz1saXN0Q2FjaGVIYXM7TGlzdENhY2hlLnByb3RvdHlwZS5zZXQ9bGlzdENhY2hlU2V0O2Z1bmN0aW9uIE1hcENhY2hlKGVudHJpZXMpe3ZhciBpbmRleD0tMSxsZW5ndGg9ZW50cmllcz09bnVsbD8wOmVudHJpZXMubGVuZ3RoO3RoaXMuY2xlYXIoKTt3aGlsZSgrK2luZGV4PGxlbmd0aCl7dmFyIGVudHJ5PWVudHJpZXNbaW5kZXhdO3RoaXMuc2V0KGVudHJ5WzBdLGVudHJ5WzFdKX19ZnVuY3Rpb24gbWFwQ2FjaGVDbGVhcigpe3RoaXMuc2l6ZT0wO3RoaXMuX19kYXRhX189eyJoYXNoIjpuZXcgSGFzaCwibWFwIjpuZXcgKE1hcHx8TGlzdENhY2hlKSwic3RyaW5nIjpuZXcgSGFzaH19ZnVuY3Rpb24gbWFwQ2FjaGVEZWxldGUoa2V5KXt2YXIgcmVzdWx0PWdldE1hcERhdGEodGhpcyxrZXkpWyJkZWxldGUiXShrZXkpO3RoaXMuc2l6ZS09cmVzdWx0PzE6MDtyZXR1cm4gcmVzdWx0fWZ1bmN0aW9uIG1hcENhY2hlR2V0KGtleSl7cmV0dXJuIGdldE1hcERhdGEodGhpcywKa2V5KS5nZXQoa2V5KX1mdW5jdGlvbiBtYXBDYWNoZUhhcyhrZXkpe3JldHVybiBnZXRNYXBEYXRhKHRoaXMsa2V5KS5oYXMoa2V5KX1mdW5jdGlvbiBtYXBDYWNoZVNldChrZXksdmFsdWUpe3ZhciBkYXRhPWdldE1hcERhdGEodGhpcyxrZXkpLHNpemU9ZGF0YS5zaXplO2RhdGEuc2V0KGtleSx2YWx1ZSk7dGhpcy5zaXplKz1kYXRhLnNpemU9PXNpemU/MDoxO3JldHVybiB0aGlzfU1hcENhY2hlLnByb3RvdHlwZS5jbGVhcj1tYXBDYWNoZUNsZWFyO01hcENhY2hlLnByb3RvdHlwZVsiZGVsZXRlIl09bWFwQ2FjaGVEZWxldGU7TWFwQ2FjaGUucHJvdG90eXBlLmdldD1tYXBDYWNoZUdldDtNYXBDYWNoZS5wcm90b3R5cGUuaGFzPW1hcENhY2hlSGFzO01hcENhY2hlLnByb3RvdHlwZS5zZXQ9bWFwQ2FjaGVTZXQ7ZnVuY3Rpb24gU2V0Q2FjaGUodmFsdWVzKXt2YXIgaW5kZXg9LTEsbGVuZ3RoPXZhbHVlcz09bnVsbD8wOnZhbHVlcy5sZW5ndGg7dGhpcy5fX2RhdGFfXz1uZXcgTWFwQ2FjaGU7CndoaWxlKCsraW5kZXg8bGVuZ3RoKXRoaXMuYWRkKHZhbHVlc1tpbmRleF0pfWZ1bmN0aW9uIHNldENhY2hlQWRkKHZhbHVlKXt0aGlzLl9fZGF0YV9fLnNldCh2YWx1ZSxIQVNIX1VOREVGSU5FRCk7cmV0dXJuIHRoaXN9ZnVuY3Rpb24gc2V0Q2FjaGVIYXModmFsdWUpe3JldHVybiB0aGlzLl9fZGF0YV9fLmhhcyh2YWx1ZSl9U2V0Q2FjaGUucHJvdG90eXBlLmFkZD1TZXRDYWNoZS5wcm90b3R5cGUucHVzaD1zZXRDYWNoZUFkZDtTZXRDYWNoZS5wcm90b3R5cGUuaGFzPXNldENhY2hlSGFzO2Z1bmN0aW9uIFN0YWNrKGVudHJpZXMpe3ZhciBkYXRhPXRoaXMuX19kYXRhX189bmV3IExpc3RDYWNoZShlbnRyaWVzKTt0aGlzLnNpemU9ZGF0YS5zaXplfWZ1bmN0aW9uIHN0YWNrQ2xlYXIoKXt0aGlzLl9fZGF0YV9fPW5ldyBMaXN0Q2FjaGU7dGhpcy5zaXplPTB9ZnVuY3Rpb24gc3RhY2tEZWxldGUoa2V5KXt2YXIgZGF0YT10aGlzLl9fZGF0YV9fLHJlc3VsdD1kYXRhWyJkZWxldGUiXShrZXkpOwp0aGlzLnNpemU9ZGF0YS5zaXplO3JldHVybiByZXN1bHR9ZnVuY3Rpb24gc3RhY2tHZXQoa2V5KXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5nZXQoa2V5KX1mdW5jdGlvbiBzdGFja0hhcyhrZXkpe3JldHVybiB0aGlzLl9fZGF0YV9fLmhhcyhrZXkpfWZ1bmN0aW9uIHN0YWNrU2V0KGtleSx2YWx1ZSl7dmFyIGRhdGE9dGhpcy5fX2RhdGFfXztpZihkYXRhIGluc3RhbmNlb2YgTGlzdENhY2hlKXt2YXIgcGFpcnM9ZGF0YS5fX2RhdGFfXztpZighTWFwfHxwYWlycy5sZW5ndGg8TEFSR0VfQVJSQVlfU0laRS0xKXtwYWlycy5wdXNoKFtrZXksdmFsdWVdKTt0aGlzLnNpemU9KytkYXRhLnNpemU7cmV0dXJuIHRoaXN9ZGF0YT10aGlzLl9fZGF0YV9fPW5ldyBNYXBDYWNoZShwYWlycyl9ZGF0YS5zZXQoa2V5LHZhbHVlKTt0aGlzLnNpemU9ZGF0YS5zaXplO3JldHVybiB0aGlzfVN0YWNrLnByb3RvdHlwZS5jbGVhcj1zdGFja0NsZWFyO1N0YWNrLnByb3RvdHlwZVsiZGVsZXRlIl09c3RhY2tEZWxldGU7ClN0YWNrLnByb3RvdHlwZS5nZXQ9c3RhY2tHZXQ7U3RhY2sucHJvdG90eXBlLmhhcz1zdGFja0hhcztTdGFjay5wcm90b3R5cGUuc2V0PXN0YWNrU2V0O2Z1bmN0aW9uIGFycmF5TGlrZUtleXModmFsdWUsaW5oZXJpdGVkKXt2YXIgaXNBcnI9aXNBcnJheSh2YWx1ZSksaXNBcmc9IWlzQXJyJiZpc0FyZ3VtZW50cyh2YWx1ZSksaXNCdWZmPSFpc0FyciYmIWlzQXJnJiZpc0J1ZmZlcih2YWx1ZSksaXNUeXBlPSFpc0FyciYmIWlzQXJnJiYhaXNCdWZmJiZpc1R5cGVkQXJyYXkodmFsdWUpLHNraXBJbmRleGVzPWlzQXJyfHxpc0FyZ3x8aXNCdWZmfHxpc1R5cGUscmVzdWx0PXNraXBJbmRleGVzP2Jhc2VUaW1lcyh2YWx1ZS5sZW5ndGgsU3RyaW5nKTpbXSxsZW5ndGg9cmVzdWx0Lmxlbmd0aDtmb3IodmFyIGtleSBpbiB2YWx1ZSlpZigoaW5oZXJpdGVkfHxoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLGtleSkpJiYhKHNraXBJbmRleGVzJiYoa2V5PT0ibGVuZ3RoInx8aXNCdWZmJiYoa2V5PT0KIm9mZnNldCJ8fGtleT09InBhcmVudCIpfHxpc1R5cGUmJihrZXk9PSJidWZmZXIifHxrZXk9PSJieXRlTGVuZ3RoInx8a2V5PT0iYnl0ZU9mZnNldCIpfHxpc0luZGV4KGtleSxsZW5ndGgpKSkpcmVzdWx0LnB1c2goa2V5KTtyZXR1cm4gcmVzdWx0fWZ1bmN0aW9uIGFycmF5U2FtcGxlKGFycmF5KXt2YXIgbGVuZ3RoPWFycmF5Lmxlbmd0aDtyZXR1cm4gbGVuZ3RoP2FycmF5W2Jhc2VSYW5kb20oMCxsZW5ndGgtMSldOnVuZGVmaW5lZH1mdW5jdGlvbiBhcnJheVNhbXBsZVNpemUoYXJyYXksbil7cmV0dXJuIHNodWZmbGVTZWxmKGNvcHlBcnJheShhcnJheSksYmFzZUNsYW1wKG4sMCxhcnJheS5sZW5ndGgpKX1mdW5jdGlvbiBhcnJheVNodWZmbGUoYXJyYXkpe3JldHVybiBzaHVmZmxlU2VsZihjb3B5QXJyYXkoYXJyYXkpKX1mdW5jdGlvbiBhc3NpZ25NZXJnZVZhbHVlKG9iamVjdCxrZXksdmFsdWUpe2lmKHZhbHVlIT09dW5kZWZpbmVkJiYhZXEob2JqZWN0W2tleV0sdmFsdWUpfHwKdmFsdWU9PT11bmRlZmluZWQmJiEoa2V5IGluIG9iamVjdCkpYmFzZUFzc2lnblZhbHVlKG9iamVjdCxrZXksdmFsdWUpfWZ1bmN0aW9uIGFzc2lnblZhbHVlKG9iamVjdCxrZXksdmFsdWUpe3ZhciBvYmpWYWx1ZT1vYmplY3Rba2V5XTtpZighKGhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LGtleSkmJmVxKG9ialZhbHVlLHZhbHVlKSl8fHZhbHVlPT09dW5kZWZpbmVkJiYhKGtleSBpbiBvYmplY3QpKWJhc2VBc3NpZ25WYWx1ZShvYmplY3Qsa2V5LHZhbHVlKX1mdW5jdGlvbiBhc3NvY0luZGV4T2YoYXJyYXksa2V5KXt2YXIgbGVuZ3RoPWFycmF5Lmxlbmd0aDt3aGlsZShsZW5ndGgtLSlpZihlcShhcnJheVtsZW5ndGhdWzBdLGtleSkpcmV0dXJuIGxlbmd0aDtyZXR1cm4tMX1mdW5jdGlvbiBiYXNlQWdncmVnYXRvcihjb2xsZWN0aW9uLHNldHRlcixpdGVyYXRlZSxhY2N1bXVsYXRvcil7YmFzZUVhY2goY29sbGVjdGlvbixmdW5jdGlvbih2YWx1ZSxrZXksY29sbGVjdGlvbil7c2V0dGVyKGFjY3VtdWxhdG9yLAp2YWx1ZSxpdGVyYXRlZSh2YWx1ZSksY29sbGVjdGlvbil9KTtyZXR1cm4gYWNjdW11bGF0b3J9ZnVuY3Rpb24gYmFzZUFzc2lnbihvYmplY3Qsc291cmNlKXtyZXR1cm4gb2JqZWN0JiZjb3B5T2JqZWN0KHNvdXJjZSxrZXlzKHNvdXJjZSksb2JqZWN0KX1mdW5jdGlvbiBiYXNlQXNzaWduSW4ob2JqZWN0LHNvdXJjZSl7cmV0dXJuIG9iamVjdCYmY29weU9iamVjdChzb3VyY2Usa2V5c0luKHNvdXJjZSksb2JqZWN0KX1mdW5jdGlvbiBiYXNlQXNzaWduVmFsdWUob2JqZWN0LGtleSx2YWx1ZSl7aWYoa2V5PT0iX19wcm90b19fIiYmZGVmaW5lUHJvcGVydHkpZGVmaW5lUHJvcGVydHkob2JqZWN0LGtleSx7ImNvbmZpZ3VyYWJsZSI6dHJ1ZSwiZW51bWVyYWJsZSI6dHJ1ZSwidmFsdWUiOnZhbHVlLCJ3cml0YWJsZSI6dHJ1ZX0pO2Vsc2Ugb2JqZWN0W2tleV09dmFsdWV9ZnVuY3Rpb24gYmFzZUF0KG9iamVjdCxwYXRocyl7dmFyIGluZGV4PS0xLGxlbmd0aD1wYXRocy5sZW5ndGgscmVzdWx0PQpBcnJheShsZW5ndGgpLHNraXA9b2JqZWN0PT1udWxsO3doaWxlKCsraW5kZXg8bGVuZ3RoKXJlc3VsdFtpbmRleF09c2tpcD91bmRlZmluZWQ6Z2V0KG9iamVjdCxwYXRoc1tpbmRleF0pO3JldHVybiByZXN1bHR9ZnVuY3Rpb24gYmFzZUNsYW1wKG51bWJlcixsb3dlcix1cHBlcil7aWYobnVtYmVyPT09bnVtYmVyKXtpZih1cHBlciE9PXVuZGVmaW5lZCludW1iZXI9bnVtYmVyPD11cHBlcj9udW1iZXI6dXBwZXI7aWYobG93ZXIhPT11bmRlZmluZWQpbnVtYmVyPW51bWJlcj49bG93ZXI/bnVtYmVyOmxvd2VyfXJldHVybiBudW1iZXJ9ZnVuY3Rpb24gYmFzZUNsb25lKHZhbHVlLGJpdG1hc2ssY3VzdG9taXplcixrZXksb2JqZWN0LHN0YWNrKXt2YXIgcmVzdWx0LGlzRGVlcD1iaXRtYXNrJkNMT05FX0RFRVBfRkxBRyxpc0ZsYXQ9Yml0bWFzayZDTE9ORV9GTEFUX0ZMQUcsaXNGdWxsPWJpdG1hc2smQ0xPTkVfU1lNQk9MU19GTEFHO2lmKGN1c3RvbWl6ZXIpcmVzdWx0PW9iamVjdD8KY3VzdG9taXplcih2YWx1ZSxrZXksb2JqZWN0LHN0YWNrKTpjdXN0b21pemVyKHZhbHVlKTtpZihyZXN1bHQhPT11bmRlZmluZWQpcmV0dXJuIHJlc3VsdDtpZighaXNPYmplY3QodmFsdWUpKXJldHVybiB2YWx1ZTt2YXIgaXNBcnI9aXNBcnJheSh2YWx1ZSk7aWYoaXNBcnIpe3Jlc3VsdD1pbml0Q2xvbmVBcnJheSh2YWx1ZSk7aWYoIWlzRGVlcClyZXR1cm4gY29weUFycmF5KHZhbHVlLHJlc3VsdCl9ZWxzZXt2YXIgdGFnPWdldFRhZyh2YWx1ZSksaXNGdW5jPXRhZz09ZnVuY1RhZ3x8dGFnPT1nZW5UYWc7aWYoaXNCdWZmZXIodmFsdWUpKXJldHVybiBjbG9uZUJ1ZmZlcih2YWx1ZSxpc0RlZXApO2lmKHRhZz09b2JqZWN0VGFnfHx0YWc9PWFyZ3NUYWd8fGlzRnVuYyYmIW9iamVjdCl7cmVzdWx0PWlzRmxhdHx8aXNGdW5jP3t9OmluaXRDbG9uZU9iamVjdCh2YWx1ZSk7aWYoIWlzRGVlcClyZXR1cm4gaXNGbGF0P2NvcHlTeW1ib2xzSW4odmFsdWUsYmFzZUFzc2lnbkluKHJlc3VsdCwKdmFsdWUpKTpjb3B5U3ltYm9scyh2YWx1ZSxiYXNlQXNzaWduKHJlc3VsdCx2YWx1ZSkpfWVsc2V7aWYoIWNsb25lYWJsZVRhZ3NbdGFnXSlyZXR1cm4gb2JqZWN0P3ZhbHVlOnt9O3Jlc3VsdD1pbml0Q2xvbmVCeVRhZyh2YWx1ZSx0YWcsaXNEZWVwKX19c3RhY2t8fChzdGFjaz1uZXcgU3RhY2spO3ZhciBzdGFja2VkPXN0YWNrLmdldCh2YWx1ZSk7aWYoc3RhY2tlZClyZXR1cm4gc3RhY2tlZDtzdGFjay5zZXQodmFsdWUscmVzdWx0KTtpZihpc1NldCh2YWx1ZSkpe3ZhbHVlLmZvckVhY2goZnVuY3Rpb24oc3ViVmFsdWUpe3Jlc3VsdC5hZGQoYmFzZUNsb25lKHN1YlZhbHVlLGJpdG1hc2ssY3VzdG9taXplcixzdWJWYWx1ZSx2YWx1ZSxzdGFjaykpfSk7cmV0dXJuIHJlc3VsdH1pZihpc01hcCh2YWx1ZSkpe3ZhbHVlLmZvckVhY2goZnVuY3Rpb24oc3ViVmFsdWUsa2V5KXtyZXN1bHQuc2V0KGtleSxiYXNlQ2xvbmUoc3ViVmFsdWUsYml0bWFzayxjdXN0b21pemVyLGtleSx2YWx1ZSwKc3RhY2spKX0pO3JldHVybiByZXN1bHR9dmFyIGtleXNGdW5jPWlzRnVsbD9pc0ZsYXQ/Z2V0QWxsS2V5c0luOmdldEFsbEtleXM6aXNGbGF0P2tleXNJbjprZXlzO3ZhciBwcm9wcz1pc0Fycj91bmRlZmluZWQ6a2V5c0Z1bmModmFsdWUpO2FycmF5RWFjaChwcm9wc3x8dmFsdWUsZnVuY3Rpb24oc3ViVmFsdWUsa2V5KXtpZihwcm9wcyl7a2V5PXN1YlZhbHVlO3N1YlZhbHVlPXZhbHVlW2tleV19YXNzaWduVmFsdWUocmVzdWx0LGtleSxiYXNlQ2xvbmUoc3ViVmFsdWUsYml0bWFzayxjdXN0b21pemVyLGtleSx2YWx1ZSxzdGFjaykpfSk7cmV0dXJuIHJlc3VsdH1mdW5jdGlvbiBiYXNlQ29uZm9ybXMoc291cmNlKXt2YXIgcHJvcHM9a2V5cyhzb3VyY2UpO3JldHVybiBmdW5jdGlvbihvYmplY3Qpe3JldHVybiBiYXNlQ29uZm9ybXNUbyhvYmplY3Qsc291cmNlLHByb3BzKX19ZnVuY3Rpb24gYmFzZUNvbmZvcm1zVG8ob2JqZWN0LHNvdXJjZSxwcm9wcyl7dmFyIGxlbmd0aD1wcm9wcy5sZW5ndGg7CmlmKG9iamVjdD09bnVsbClyZXR1cm4hbGVuZ3RoO29iamVjdD1PYmplY3Qob2JqZWN0KTt3aGlsZShsZW5ndGgtLSl7dmFyIGtleT1wcm9wc1tsZW5ndGhdLHByZWRpY2F0ZT1zb3VyY2Vba2V5XSx2YWx1ZT1vYmplY3Rba2V5XTtpZih2YWx1ZT09PXVuZGVmaW5lZCYmIShrZXkgaW4gb2JqZWN0KXx8IXByZWRpY2F0ZSh2YWx1ZSkpcmV0dXJuIGZhbHNlfXJldHVybiB0cnVlfWZ1bmN0aW9uIGJhc2VEZWxheShmdW5jLHdhaXQsYXJncyl7aWYodHlwZW9mIGZ1bmMhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpO3JldHVybiBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZnVuYy5hcHBseSh1bmRlZmluZWQsYXJncyl9LHdhaXQpfWZ1bmN0aW9uIGJhc2VEaWZmZXJlbmNlKGFycmF5LHZhbHVlcyxpdGVyYXRlZSxjb21wYXJhdG9yKXt2YXIgaW5kZXg9LTEsaW5jbHVkZXM9YXJyYXlJbmNsdWRlcyxpc0NvbW1vbj10cnVlLGxlbmd0aD1hcnJheS5sZW5ndGgsCnJlc3VsdD1bXSx2YWx1ZXNMZW5ndGg9dmFsdWVzLmxlbmd0aDtpZighbGVuZ3RoKXJldHVybiByZXN1bHQ7aWYoaXRlcmF0ZWUpdmFsdWVzPWFycmF5TWFwKHZhbHVlcyxiYXNlVW5hcnkoaXRlcmF0ZWUpKTtpZihjb21wYXJhdG9yKXtpbmNsdWRlcz1hcnJheUluY2x1ZGVzV2l0aDtpc0NvbW1vbj1mYWxzZX1lbHNlIGlmKHZhbHVlcy5sZW5ndGg+PUxBUkdFX0FSUkFZX1NJWkUpe2luY2x1ZGVzPWNhY2hlSGFzO2lzQ29tbW9uPWZhbHNlO3ZhbHVlcz1uZXcgU2V0Q2FjaGUodmFsdWVzKX1vdXRlcjp3aGlsZSgrK2luZGV4PGxlbmd0aCl7dmFyIHZhbHVlPWFycmF5W2luZGV4XSxjb21wdXRlZD1pdGVyYXRlZT09bnVsbD92YWx1ZTppdGVyYXRlZSh2YWx1ZSk7dmFsdWU9Y29tcGFyYXRvcnx8dmFsdWUhPT0wP3ZhbHVlOjA7aWYoaXNDb21tb24mJmNvbXB1dGVkPT09Y29tcHV0ZWQpe3ZhciB2YWx1ZXNJbmRleD12YWx1ZXNMZW5ndGg7d2hpbGUodmFsdWVzSW5kZXgtLSlpZih2YWx1ZXNbdmFsdWVzSW5kZXhdPT09CmNvbXB1dGVkKWNvbnRpbnVlIG91dGVyO3Jlc3VsdC5wdXNoKHZhbHVlKX1lbHNlIGlmKCFpbmNsdWRlcyh2YWx1ZXMsY29tcHV0ZWQsY29tcGFyYXRvcikpcmVzdWx0LnB1c2godmFsdWUpfXJldHVybiByZXN1bHR9dmFyIGJhc2VFYWNoPWNyZWF0ZUJhc2VFYWNoKGJhc2VGb3JPd24pO3ZhciBiYXNlRWFjaFJpZ2h0PWNyZWF0ZUJhc2VFYWNoKGJhc2VGb3JPd25SaWdodCx0cnVlKTtmdW5jdGlvbiBiYXNlRXZlcnkoY29sbGVjdGlvbixwcmVkaWNhdGUpe3ZhciByZXN1bHQ9dHJ1ZTtiYXNlRWFjaChjb2xsZWN0aW9uLGZ1bmN0aW9uKHZhbHVlLGluZGV4LGNvbGxlY3Rpb24pe3Jlc3VsdD0hIXByZWRpY2F0ZSh2YWx1ZSxpbmRleCxjb2xsZWN0aW9uKTtyZXR1cm4gcmVzdWx0fSk7cmV0dXJuIHJlc3VsdH1mdW5jdGlvbiBiYXNlRXh0cmVtdW0oYXJyYXksaXRlcmF0ZWUsY29tcGFyYXRvcil7dmFyIGluZGV4PS0xLGxlbmd0aD1hcnJheS5sZW5ndGg7d2hpbGUoKytpbmRleDxsZW5ndGgpe3ZhciB2YWx1ZT0KYXJyYXlbaW5kZXhdLGN1cnJlbnQ9aXRlcmF0ZWUodmFsdWUpO2lmKGN1cnJlbnQhPW51bGwmJihjb21wdXRlZD09PXVuZGVmaW5lZD9jdXJyZW50PT09Y3VycmVudCYmIWlzU3ltYm9sKGN1cnJlbnQpOmNvbXBhcmF0b3IoY3VycmVudCxjb21wdXRlZCkpKXZhciBjb21wdXRlZD1jdXJyZW50LHJlc3VsdD12YWx1ZX1yZXR1cm4gcmVzdWx0fWZ1bmN0aW9uIGJhc2VGaWxsKGFycmF5LHZhbHVlLHN0YXJ0LGVuZCl7dmFyIGxlbmd0aD1hcnJheS5sZW5ndGg7c3RhcnQ9dG9JbnRlZ2VyKHN0YXJ0KTtpZihzdGFydDwwKXN0YXJ0PS1zdGFydD5sZW5ndGg/MDpsZW5ndGgrc3RhcnQ7ZW5kPWVuZD09PXVuZGVmaW5lZHx8ZW5kPmxlbmd0aD9sZW5ndGg6dG9JbnRlZ2VyKGVuZCk7aWYoZW5kPDApZW5kKz1sZW5ndGg7ZW5kPXN0YXJ0PmVuZD8wOnRvTGVuZ3RoKGVuZCk7d2hpbGUoc3RhcnQ8ZW5kKWFycmF5W3N0YXJ0KytdPXZhbHVlO3JldHVybiBhcnJheX1mdW5jdGlvbiBiYXNlRmlsdGVyKGNvbGxlY3Rpb24sCnByZWRpY2F0ZSl7dmFyIHJlc3VsdD1bXTtiYXNlRWFjaChjb2xsZWN0aW9uLGZ1bmN0aW9uKHZhbHVlLGluZGV4LGNvbGxlY3Rpb24pe2lmKHByZWRpY2F0ZSh2YWx1ZSxpbmRleCxjb2xsZWN0aW9uKSlyZXN1bHQucHVzaCh2YWx1ZSl9KTtyZXR1cm4gcmVzdWx0fWZ1bmN0aW9uIGJhc2VGbGF0dGVuKGFycmF5LGRlcHRoLHByZWRpY2F0ZSxpc1N0cmljdCxyZXN1bHQpe3ZhciBpbmRleD0tMSxsZW5ndGg9YXJyYXkubGVuZ3RoO3ByZWRpY2F0ZXx8KHByZWRpY2F0ZT1pc0ZsYXR0ZW5hYmxlKTtyZXN1bHR8fChyZXN1bHQ9W10pO3doaWxlKCsraW5kZXg8bGVuZ3RoKXt2YXIgdmFsdWU9YXJyYXlbaW5kZXhdO2lmKGRlcHRoPjAmJnByZWRpY2F0ZSh2YWx1ZSkpaWYoZGVwdGg+MSliYXNlRmxhdHRlbih2YWx1ZSxkZXB0aC0xLHByZWRpY2F0ZSxpc1N0cmljdCxyZXN1bHQpO2Vsc2UgYXJyYXlQdXNoKHJlc3VsdCx2YWx1ZSk7ZWxzZSBpZighaXNTdHJpY3QpcmVzdWx0W3Jlc3VsdC5sZW5ndGhdPQp2YWx1ZX1yZXR1cm4gcmVzdWx0fXZhciBiYXNlRm9yPWNyZWF0ZUJhc2VGb3IoKTt2YXIgYmFzZUZvclJpZ2h0PWNyZWF0ZUJhc2VGb3IodHJ1ZSk7ZnVuY3Rpb24gYmFzZUZvck93bihvYmplY3QsaXRlcmF0ZWUpe3JldHVybiBvYmplY3QmJmJhc2VGb3Iob2JqZWN0LGl0ZXJhdGVlLGtleXMpfWZ1bmN0aW9uIGJhc2VGb3JPd25SaWdodChvYmplY3QsaXRlcmF0ZWUpe3JldHVybiBvYmplY3QmJmJhc2VGb3JSaWdodChvYmplY3QsaXRlcmF0ZWUsa2V5cyl9ZnVuY3Rpb24gYmFzZUZ1bmN0aW9ucyhvYmplY3QscHJvcHMpe3JldHVybiBhcnJheUZpbHRlcihwcm9wcyxmdW5jdGlvbihrZXkpe3JldHVybiBpc0Z1bmN0aW9uKG9iamVjdFtrZXldKX0pfWZ1bmN0aW9uIGJhc2VHZXQob2JqZWN0LHBhdGgpe3BhdGg9Y2FzdFBhdGgocGF0aCxvYmplY3QpO3ZhciBpbmRleD0wLGxlbmd0aD1wYXRoLmxlbmd0aDt3aGlsZShvYmplY3QhPW51bGwmJmluZGV4PGxlbmd0aClvYmplY3Q9b2JqZWN0W3RvS2V5KHBhdGhbaW5kZXgrK10pXTsKcmV0dXJuIGluZGV4JiZpbmRleD09bGVuZ3RoP29iamVjdDp1bmRlZmluZWR9ZnVuY3Rpb24gYmFzZUdldEFsbEtleXMob2JqZWN0LGtleXNGdW5jLHN5bWJvbHNGdW5jKXt2YXIgcmVzdWx0PWtleXNGdW5jKG9iamVjdCk7cmV0dXJuIGlzQXJyYXkob2JqZWN0KT9yZXN1bHQ6YXJyYXlQdXNoKHJlc3VsdCxzeW1ib2xzRnVuYyhvYmplY3QpKX1mdW5jdGlvbiBiYXNlR2V0VGFnKHZhbHVlKXtpZih2YWx1ZT09bnVsbClyZXR1cm4gdmFsdWU9PT11bmRlZmluZWQ/dW5kZWZpbmVkVGFnOm51bGxUYWc7cmV0dXJuIHN5bVRvU3RyaW5nVGFnJiZzeW1Ub1N0cmluZ1RhZyBpbiBPYmplY3QodmFsdWUpP2dldFJhd1RhZyh2YWx1ZSk6b2JqZWN0VG9TdHJpbmcodmFsdWUpfWZ1bmN0aW9uIGJhc2VHdCh2YWx1ZSxvdGhlcil7cmV0dXJuIHZhbHVlPm90aGVyfWZ1bmN0aW9uIGJhc2VIYXMob2JqZWN0LGtleSl7cmV0dXJuIG9iamVjdCE9bnVsbCYmaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsCmtleSl9ZnVuY3Rpb24gYmFzZUhhc0luKG9iamVjdCxrZXkpe3JldHVybiBvYmplY3QhPW51bGwmJmtleSBpbiBPYmplY3Qob2JqZWN0KX1mdW5jdGlvbiBiYXNlSW5SYW5nZShudW1iZXIsc3RhcnQsZW5kKXtyZXR1cm4gbnVtYmVyPj1uYXRpdmVNaW4oc3RhcnQsZW5kKSYmbnVtYmVyPG5hdGl2ZU1heChzdGFydCxlbmQpfWZ1bmN0aW9uIGJhc2VJbnRlcnNlY3Rpb24oYXJyYXlzLGl0ZXJhdGVlLGNvbXBhcmF0b3Ipe3ZhciBpbmNsdWRlcz1jb21wYXJhdG9yP2FycmF5SW5jbHVkZXNXaXRoOmFycmF5SW5jbHVkZXMsbGVuZ3RoPWFycmF5c1swXS5sZW5ndGgsb3RoTGVuZ3RoPWFycmF5cy5sZW5ndGgsb3RoSW5kZXg9b3RoTGVuZ3RoLGNhY2hlcz1BcnJheShvdGhMZW5ndGgpLG1heExlbmd0aD1JbmZpbml0eSxyZXN1bHQ9W107d2hpbGUob3RoSW5kZXgtLSl7dmFyIGFycmF5PWFycmF5c1tvdGhJbmRleF07aWYob3RoSW5kZXgmJml0ZXJhdGVlKWFycmF5PWFycmF5TWFwKGFycmF5LApiYXNlVW5hcnkoaXRlcmF0ZWUpKTttYXhMZW5ndGg9bmF0aXZlTWluKGFycmF5Lmxlbmd0aCxtYXhMZW5ndGgpO2NhY2hlc1tvdGhJbmRleF09IWNvbXBhcmF0b3ImJihpdGVyYXRlZXx8bGVuZ3RoPj0xMjAmJmFycmF5Lmxlbmd0aD49MTIwKT9uZXcgU2V0Q2FjaGUob3RoSW5kZXgmJmFycmF5KTp1bmRlZmluZWR9YXJyYXk9YXJyYXlzWzBdO3ZhciBpbmRleD0tMSxzZWVuPWNhY2hlc1swXTtvdXRlcjp3aGlsZSgrK2luZGV4PGxlbmd0aCYmcmVzdWx0Lmxlbmd0aDxtYXhMZW5ndGgpe3ZhciB2YWx1ZT1hcnJheVtpbmRleF0sY29tcHV0ZWQ9aXRlcmF0ZWU/aXRlcmF0ZWUodmFsdWUpOnZhbHVlO3ZhbHVlPWNvbXBhcmF0b3J8fHZhbHVlIT09MD92YWx1ZTowO2lmKCEoc2Vlbj9jYWNoZUhhcyhzZWVuLGNvbXB1dGVkKTppbmNsdWRlcyhyZXN1bHQsY29tcHV0ZWQsY29tcGFyYXRvcikpKXtvdGhJbmRleD1vdGhMZW5ndGg7d2hpbGUoLS1vdGhJbmRleCl7dmFyIGNhY2hlPWNhY2hlc1tvdGhJbmRleF07CmlmKCEoY2FjaGU/Y2FjaGVIYXMoY2FjaGUsY29tcHV0ZWQpOmluY2x1ZGVzKGFycmF5c1tvdGhJbmRleF0sY29tcHV0ZWQsY29tcGFyYXRvcikpKWNvbnRpbnVlIG91dGVyfWlmKHNlZW4pc2Vlbi5wdXNoKGNvbXB1dGVkKTtyZXN1bHQucHVzaCh2YWx1ZSl9fXJldHVybiByZXN1bHR9ZnVuY3Rpb24gYmFzZUludmVydGVyKG9iamVjdCxzZXR0ZXIsaXRlcmF0ZWUsYWNjdW11bGF0b3Ipe2Jhc2VGb3JPd24ob2JqZWN0LGZ1bmN0aW9uKHZhbHVlLGtleSxvYmplY3Qpe3NldHRlcihhY2N1bXVsYXRvcixpdGVyYXRlZSh2YWx1ZSksa2V5LG9iamVjdCl9KTtyZXR1cm4gYWNjdW11bGF0b3J9ZnVuY3Rpb24gYmFzZUludm9rZShvYmplY3QscGF0aCxhcmdzKXtwYXRoPWNhc3RQYXRoKHBhdGgsb2JqZWN0KTtvYmplY3Q9cGFyZW50KG9iamVjdCxwYXRoKTt2YXIgZnVuYz1vYmplY3Q9PW51bGw/b2JqZWN0Om9iamVjdFt0b0tleShsYXN0KHBhdGgpKV07cmV0dXJuIGZ1bmM9PW51bGw/dW5kZWZpbmVkOgphcHBseShmdW5jLG9iamVjdCxhcmdzKX1mdW5jdGlvbiBiYXNlSXNBcmd1bWVudHModmFsdWUpe3JldHVybiBpc09iamVjdExpa2UodmFsdWUpJiZiYXNlR2V0VGFnKHZhbHVlKT09YXJnc1RhZ31mdW5jdGlvbiBiYXNlSXNBcnJheUJ1ZmZlcih2YWx1ZSl7cmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkmJmJhc2VHZXRUYWcodmFsdWUpPT1hcnJheUJ1ZmZlclRhZ31mdW5jdGlvbiBiYXNlSXNEYXRlKHZhbHVlKXtyZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSYmYmFzZUdldFRhZyh2YWx1ZSk9PWRhdGVUYWd9ZnVuY3Rpb24gYmFzZUlzRXF1YWwodmFsdWUsb3RoZXIsYml0bWFzayxjdXN0b21pemVyLHN0YWNrKXtpZih2YWx1ZT09PW90aGVyKXJldHVybiB0cnVlO2lmKHZhbHVlPT1udWxsfHxvdGhlcj09bnVsbHx8IWlzT2JqZWN0TGlrZSh2YWx1ZSkmJiFpc09iamVjdExpa2Uob3RoZXIpKXJldHVybiB2YWx1ZSE9PXZhbHVlJiZvdGhlciE9PW90aGVyO3JldHVybiBiYXNlSXNFcXVhbERlZXAodmFsdWUsCm90aGVyLGJpdG1hc2ssY3VzdG9taXplcixiYXNlSXNFcXVhbCxzdGFjayl9ZnVuY3Rpb24gYmFzZUlzRXF1YWxEZWVwKG9iamVjdCxvdGhlcixiaXRtYXNrLGN1c3RvbWl6ZXIsZXF1YWxGdW5jLHN0YWNrKXt2YXIgb2JqSXNBcnI9aXNBcnJheShvYmplY3QpLG90aElzQXJyPWlzQXJyYXkob3RoZXIpLG9ialRhZz1vYmpJc0Fycj9hcnJheVRhZzpnZXRUYWcob2JqZWN0KSxvdGhUYWc9b3RoSXNBcnI/YXJyYXlUYWc6Z2V0VGFnKG90aGVyKTtvYmpUYWc9b2JqVGFnPT1hcmdzVGFnP29iamVjdFRhZzpvYmpUYWc7b3RoVGFnPW90aFRhZz09YXJnc1RhZz9vYmplY3RUYWc6b3RoVGFnO3ZhciBvYmpJc09iaj1vYmpUYWc9PW9iamVjdFRhZyxvdGhJc09iaj1vdGhUYWc9PW9iamVjdFRhZyxpc1NhbWVUYWc9b2JqVGFnPT1vdGhUYWc7aWYoaXNTYW1lVGFnJiZpc0J1ZmZlcihvYmplY3QpKXtpZighaXNCdWZmZXIob3RoZXIpKXJldHVybiBmYWxzZTtvYmpJc0Fycj10cnVlO29iaklzT2JqPQpmYWxzZX1pZihpc1NhbWVUYWcmJiFvYmpJc09iail7c3RhY2t8fChzdGFjaz1uZXcgU3RhY2spO3JldHVybiBvYmpJc0Fycnx8aXNUeXBlZEFycmF5KG9iamVjdCk/ZXF1YWxBcnJheXMob2JqZWN0LG90aGVyLGJpdG1hc2ssY3VzdG9taXplcixlcXVhbEZ1bmMsc3RhY2spOmVxdWFsQnlUYWcob2JqZWN0LG90aGVyLG9ialRhZyxiaXRtYXNrLGN1c3RvbWl6ZXIsZXF1YWxGdW5jLHN0YWNrKX1pZighKGJpdG1hc2smQ09NUEFSRV9QQVJUSUFMX0ZMQUcpKXt2YXIgb2JqSXNXcmFwcGVkPW9iaklzT2JqJiZoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwiX193cmFwcGVkX18iKSxvdGhJc1dyYXBwZWQ9b3RoSXNPYmomJmhhc093blByb3BlcnR5LmNhbGwob3RoZXIsIl9fd3JhcHBlZF9fIik7aWYob2JqSXNXcmFwcGVkfHxvdGhJc1dyYXBwZWQpe3ZhciBvYmpVbndyYXBwZWQ9b2JqSXNXcmFwcGVkP29iamVjdC52YWx1ZSgpOm9iamVjdCxvdGhVbndyYXBwZWQ9b3RoSXNXcmFwcGVkP290aGVyLnZhbHVlKCk6Cm90aGVyO3N0YWNrfHwoc3RhY2s9bmV3IFN0YWNrKTtyZXR1cm4gZXF1YWxGdW5jKG9ialVud3JhcHBlZCxvdGhVbndyYXBwZWQsYml0bWFzayxjdXN0b21pemVyLHN0YWNrKX19aWYoIWlzU2FtZVRhZylyZXR1cm4gZmFsc2U7c3RhY2t8fChzdGFjaz1uZXcgU3RhY2spO3JldHVybiBlcXVhbE9iamVjdHMob2JqZWN0LG90aGVyLGJpdG1hc2ssY3VzdG9taXplcixlcXVhbEZ1bmMsc3RhY2spfWZ1bmN0aW9uIGJhc2VJc01hcCh2YWx1ZSl7cmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkmJmdldFRhZyh2YWx1ZSk9PW1hcFRhZ31mdW5jdGlvbiBiYXNlSXNNYXRjaChvYmplY3Qsc291cmNlLG1hdGNoRGF0YSxjdXN0b21pemVyKXt2YXIgaW5kZXg9bWF0Y2hEYXRhLmxlbmd0aCxsZW5ndGg9aW5kZXgsbm9DdXN0b21pemVyPSFjdXN0b21pemVyO2lmKG9iamVjdD09bnVsbClyZXR1cm4hbGVuZ3RoO29iamVjdD1PYmplY3Qob2JqZWN0KTt3aGlsZShpbmRleC0tKXt2YXIgZGF0YT1tYXRjaERhdGFbaW5kZXhdOwppZihub0N1c3RvbWl6ZXImJmRhdGFbMl0/ZGF0YVsxXSE9PW9iamVjdFtkYXRhWzBdXTohKGRhdGFbMF1pbiBvYmplY3QpKXJldHVybiBmYWxzZX13aGlsZSgrK2luZGV4PGxlbmd0aCl7ZGF0YT1tYXRjaERhdGFbaW5kZXhdO3ZhciBrZXk9ZGF0YVswXSxvYmpWYWx1ZT1vYmplY3Rba2V5XSxzcmNWYWx1ZT1kYXRhWzFdO2lmKG5vQ3VzdG9taXplciYmZGF0YVsyXSl7aWYob2JqVmFsdWU9PT11bmRlZmluZWQmJiEoa2V5IGluIG9iamVjdCkpcmV0dXJuIGZhbHNlfWVsc2V7dmFyIHN0YWNrPW5ldyBTdGFjaztpZihjdXN0b21pemVyKXZhciByZXN1bHQ9Y3VzdG9taXplcihvYmpWYWx1ZSxzcmNWYWx1ZSxrZXksb2JqZWN0LHNvdXJjZSxzdGFjayk7aWYoIShyZXN1bHQ9PT11bmRlZmluZWQ/YmFzZUlzRXF1YWwoc3JjVmFsdWUsb2JqVmFsdWUsQ09NUEFSRV9QQVJUSUFMX0ZMQUd8Q09NUEFSRV9VTk9SREVSRURfRkxBRyxjdXN0b21pemVyLHN0YWNrKTpyZXN1bHQpKXJldHVybiBmYWxzZX19cmV0dXJuIHRydWV9CmZ1bmN0aW9uIGJhc2VJc05hdGl2ZSh2YWx1ZSl7aWYoIWlzT2JqZWN0KHZhbHVlKXx8aXNNYXNrZWQodmFsdWUpKXJldHVybiBmYWxzZTt2YXIgcGF0dGVybj1pc0Z1bmN0aW9uKHZhbHVlKT9yZUlzTmF0aXZlOnJlSXNIb3N0Q3RvcjtyZXR1cm4gcGF0dGVybi50ZXN0KHRvU291cmNlKHZhbHVlKSl9ZnVuY3Rpb24gYmFzZUlzUmVnRXhwKHZhbHVlKXtyZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSYmYmFzZUdldFRhZyh2YWx1ZSk9PXJlZ2V4cFRhZ31mdW5jdGlvbiBiYXNlSXNTZXQodmFsdWUpe3JldHVybiBpc09iamVjdExpa2UodmFsdWUpJiZnZXRUYWcodmFsdWUpPT1zZXRUYWd9ZnVuY3Rpb24gYmFzZUlzVHlwZWRBcnJheSh2YWx1ZSl7cmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkmJmlzTGVuZ3RoKHZhbHVlLmxlbmd0aCkmJiEhdHlwZWRBcnJheVRhZ3NbYmFzZUdldFRhZyh2YWx1ZSldfWZ1bmN0aW9uIGJhc2VJdGVyYXRlZSh2YWx1ZSl7aWYodHlwZW9mIHZhbHVlPT0iZnVuY3Rpb24iKXJldHVybiB2YWx1ZTsKaWYodmFsdWU9PW51bGwpcmV0dXJuIGlkZW50aXR5O2lmKHR5cGVvZiB2YWx1ZT09Im9iamVjdCIpcmV0dXJuIGlzQXJyYXkodmFsdWUpP2Jhc2VNYXRjaGVzUHJvcGVydHkodmFsdWVbMF0sdmFsdWVbMV0pOmJhc2VNYXRjaGVzKHZhbHVlKTtyZXR1cm4gcHJvcGVydHkodmFsdWUpfWZ1bmN0aW9uIGJhc2VLZXlzKG9iamVjdCl7aWYoIWlzUHJvdG90eXBlKG9iamVjdCkpcmV0dXJuIG5hdGl2ZUtleXMob2JqZWN0KTt2YXIgcmVzdWx0PVtdO2Zvcih2YXIga2V5IGluIE9iamVjdChvYmplY3QpKWlmKGhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LGtleSkmJmtleSE9ImNvbnN0cnVjdG9yIilyZXN1bHQucHVzaChrZXkpO3JldHVybiByZXN1bHR9ZnVuY3Rpb24gYmFzZUtleXNJbihvYmplY3Qpe2lmKCFpc09iamVjdChvYmplY3QpKXJldHVybiBuYXRpdmVLZXlzSW4ob2JqZWN0KTt2YXIgaXNQcm90bz1pc1Byb3RvdHlwZShvYmplY3QpLHJlc3VsdD1bXTtmb3IodmFyIGtleSBpbiBvYmplY3QpaWYoIShrZXk9PQoiY29uc3RydWN0b3IiJiYoaXNQcm90b3x8IWhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LGtleSkpKSlyZXN1bHQucHVzaChrZXkpO3JldHVybiByZXN1bHR9ZnVuY3Rpb24gYmFzZUx0KHZhbHVlLG90aGVyKXtyZXR1cm4gdmFsdWU8b3RoZXJ9ZnVuY3Rpb24gYmFzZU1hcChjb2xsZWN0aW9uLGl0ZXJhdGVlKXt2YXIgaW5kZXg9LTEscmVzdWx0PWlzQXJyYXlMaWtlKGNvbGxlY3Rpb24pP0FycmF5KGNvbGxlY3Rpb24ubGVuZ3RoKTpbXTtiYXNlRWFjaChjb2xsZWN0aW9uLGZ1bmN0aW9uKHZhbHVlLGtleSxjb2xsZWN0aW9uKXtyZXN1bHRbKytpbmRleF09aXRlcmF0ZWUodmFsdWUsa2V5LGNvbGxlY3Rpb24pfSk7cmV0dXJuIHJlc3VsdH1mdW5jdGlvbiBiYXNlTWF0Y2hlcyhzb3VyY2Upe3ZhciBtYXRjaERhdGE9Z2V0TWF0Y2hEYXRhKHNvdXJjZSk7aWYobWF0Y2hEYXRhLmxlbmd0aD09MSYmbWF0Y2hEYXRhWzBdWzJdKXJldHVybiBtYXRjaGVzU3RyaWN0Q29tcGFyYWJsZShtYXRjaERhdGFbMF1bMF0sCm1hdGNoRGF0YVswXVsxXSk7cmV0dXJuIGZ1bmN0aW9uKG9iamVjdCl7cmV0dXJuIG9iamVjdD09PXNvdXJjZXx8YmFzZUlzTWF0Y2gob2JqZWN0LHNvdXJjZSxtYXRjaERhdGEpfX1mdW5jdGlvbiBiYXNlTWF0Y2hlc1Byb3BlcnR5KHBhdGgsc3JjVmFsdWUpe2lmKGlzS2V5KHBhdGgpJiZpc1N0cmljdENvbXBhcmFibGUoc3JjVmFsdWUpKXJldHVybiBtYXRjaGVzU3RyaWN0Q29tcGFyYWJsZSh0b0tleShwYXRoKSxzcmNWYWx1ZSk7cmV0dXJuIGZ1bmN0aW9uKG9iamVjdCl7dmFyIG9ialZhbHVlPWdldChvYmplY3QscGF0aCk7cmV0dXJuIG9ialZhbHVlPT09dW5kZWZpbmVkJiZvYmpWYWx1ZT09PXNyY1ZhbHVlP2hhc0luKG9iamVjdCxwYXRoKTpiYXNlSXNFcXVhbChzcmNWYWx1ZSxvYmpWYWx1ZSxDT01QQVJFX1BBUlRJQUxfRkxBR3xDT01QQVJFX1VOT1JERVJFRF9GTEFHKX19ZnVuY3Rpb24gYmFzZU1lcmdlKG9iamVjdCxzb3VyY2Usc3JjSW5kZXgsY3VzdG9taXplcixzdGFjayl7aWYob2JqZWN0PT09CnNvdXJjZSlyZXR1cm47YmFzZUZvcihzb3VyY2UsZnVuY3Rpb24oc3JjVmFsdWUsa2V5KXtpZihpc09iamVjdChzcmNWYWx1ZSkpe3N0YWNrfHwoc3RhY2s9bmV3IFN0YWNrKTtiYXNlTWVyZ2VEZWVwKG9iamVjdCxzb3VyY2Usa2V5LHNyY0luZGV4LGJhc2VNZXJnZSxjdXN0b21pemVyLHN0YWNrKX1lbHNle3ZhciBuZXdWYWx1ZT1jdXN0b21pemVyP2N1c3RvbWl6ZXIoc2FmZUdldChvYmplY3Qsa2V5KSxzcmNWYWx1ZSxrZXkrIiIsb2JqZWN0LHNvdXJjZSxzdGFjayk6dW5kZWZpbmVkO2lmKG5ld1ZhbHVlPT09dW5kZWZpbmVkKW5ld1ZhbHVlPXNyY1ZhbHVlO2Fzc2lnbk1lcmdlVmFsdWUob2JqZWN0LGtleSxuZXdWYWx1ZSl9fSxrZXlzSW4pfWZ1bmN0aW9uIGJhc2VNZXJnZURlZXAob2JqZWN0LHNvdXJjZSxrZXksc3JjSW5kZXgsbWVyZ2VGdW5jLGN1c3RvbWl6ZXIsc3RhY2spe3ZhciBvYmpWYWx1ZT1zYWZlR2V0KG9iamVjdCxrZXkpLHNyY1ZhbHVlPXNhZmVHZXQoc291cmNlLAprZXkpLHN0YWNrZWQ9c3RhY2suZ2V0KHNyY1ZhbHVlKTtpZihzdGFja2VkKXthc3NpZ25NZXJnZVZhbHVlKG9iamVjdCxrZXksc3RhY2tlZCk7cmV0dXJufXZhciBuZXdWYWx1ZT1jdXN0b21pemVyP2N1c3RvbWl6ZXIob2JqVmFsdWUsc3JjVmFsdWUsa2V5KyIiLG9iamVjdCxzb3VyY2Usc3RhY2spOnVuZGVmaW5lZDt2YXIgaXNDb21tb249bmV3VmFsdWU9PT11bmRlZmluZWQ7aWYoaXNDb21tb24pe3ZhciBpc0Fycj1pc0FycmF5KHNyY1ZhbHVlKSxpc0J1ZmY9IWlzQXJyJiZpc0J1ZmZlcihzcmNWYWx1ZSksaXNUeXBlZD0haXNBcnImJiFpc0J1ZmYmJmlzVHlwZWRBcnJheShzcmNWYWx1ZSk7bmV3VmFsdWU9c3JjVmFsdWU7aWYoaXNBcnJ8fGlzQnVmZnx8aXNUeXBlZClpZihpc0FycmF5KG9ialZhbHVlKSluZXdWYWx1ZT1vYmpWYWx1ZTtlbHNlIGlmKGlzQXJyYXlMaWtlT2JqZWN0KG9ialZhbHVlKSluZXdWYWx1ZT1jb3B5QXJyYXkob2JqVmFsdWUpO2Vsc2UgaWYoaXNCdWZmKXtpc0NvbW1vbj0KZmFsc2U7bmV3VmFsdWU9Y2xvbmVCdWZmZXIoc3JjVmFsdWUsdHJ1ZSl9ZWxzZSBpZihpc1R5cGVkKXtpc0NvbW1vbj1mYWxzZTtuZXdWYWx1ZT1jbG9uZVR5cGVkQXJyYXkoc3JjVmFsdWUsdHJ1ZSl9ZWxzZSBuZXdWYWx1ZT1bXTtlbHNlIGlmKGlzUGxhaW5PYmplY3Qoc3JjVmFsdWUpfHxpc0FyZ3VtZW50cyhzcmNWYWx1ZSkpe25ld1ZhbHVlPW9ialZhbHVlO2lmKGlzQXJndW1lbnRzKG9ialZhbHVlKSluZXdWYWx1ZT10b1BsYWluT2JqZWN0KG9ialZhbHVlKTtlbHNlIGlmKCFpc09iamVjdChvYmpWYWx1ZSl8fHNyY0luZGV4JiZpc0Z1bmN0aW9uKG9ialZhbHVlKSluZXdWYWx1ZT1pbml0Q2xvbmVPYmplY3Qoc3JjVmFsdWUpfWVsc2UgaXNDb21tb249ZmFsc2V9aWYoaXNDb21tb24pe3N0YWNrLnNldChzcmNWYWx1ZSxuZXdWYWx1ZSk7bWVyZ2VGdW5jKG5ld1ZhbHVlLHNyY1ZhbHVlLHNyY0luZGV4LGN1c3RvbWl6ZXIsc3RhY2spO3N0YWNrWyJkZWxldGUiXShzcmNWYWx1ZSl9YXNzaWduTWVyZ2VWYWx1ZShvYmplY3QsCmtleSxuZXdWYWx1ZSl9ZnVuY3Rpb24gYmFzZU50aChhcnJheSxuKXt2YXIgbGVuZ3RoPWFycmF5Lmxlbmd0aDtpZighbGVuZ3RoKXJldHVybjtuKz1uPDA/bGVuZ3RoOjA7cmV0dXJuIGlzSW5kZXgobixsZW5ndGgpP2FycmF5W25dOnVuZGVmaW5lZH1mdW5jdGlvbiBiYXNlT3JkZXJCeShjb2xsZWN0aW9uLGl0ZXJhdGVlcyxvcmRlcnMpe3ZhciBpbmRleD0tMTtpdGVyYXRlZXM9YXJyYXlNYXAoaXRlcmF0ZWVzLmxlbmd0aD9pdGVyYXRlZXM6W2lkZW50aXR5XSxiYXNlVW5hcnkoZ2V0SXRlcmF0ZWUoKSkpO3ZhciByZXN1bHQ9YmFzZU1hcChjb2xsZWN0aW9uLGZ1bmN0aW9uKHZhbHVlLGtleSxjb2xsZWN0aW9uKXt2YXIgY3JpdGVyaWE9YXJyYXlNYXAoaXRlcmF0ZWVzLGZ1bmN0aW9uKGl0ZXJhdGVlKXtyZXR1cm4gaXRlcmF0ZWUodmFsdWUpfSk7cmV0dXJueyJjcml0ZXJpYSI6Y3JpdGVyaWEsImluZGV4IjorK2luZGV4LCJ2YWx1ZSI6dmFsdWV9fSk7cmV0dXJuIGJhc2VTb3J0QnkocmVzdWx0LApmdW5jdGlvbihvYmplY3Qsb3RoZXIpe3JldHVybiBjb21wYXJlTXVsdGlwbGUob2JqZWN0LG90aGVyLG9yZGVycyl9KX1mdW5jdGlvbiBiYXNlUGljayhvYmplY3QscGF0aHMpe3JldHVybiBiYXNlUGlja0J5KG9iamVjdCxwYXRocyxmdW5jdGlvbih2YWx1ZSxwYXRoKXtyZXR1cm4gaGFzSW4ob2JqZWN0LHBhdGgpfSl9ZnVuY3Rpb24gYmFzZVBpY2tCeShvYmplY3QscGF0aHMscHJlZGljYXRlKXt2YXIgaW5kZXg9LTEsbGVuZ3RoPXBhdGhzLmxlbmd0aCxyZXN1bHQ9e307d2hpbGUoKytpbmRleDxsZW5ndGgpe3ZhciBwYXRoPXBhdGhzW2luZGV4XSx2YWx1ZT1iYXNlR2V0KG9iamVjdCxwYXRoKTtpZihwcmVkaWNhdGUodmFsdWUscGF0aCkpYmFzZVNldChyZXN1bHQsY2FzdFBhdGgocGF0aCxvYmplY3QpLHZhbHVlKX1yZXR1cm4gcmVzdWx0fWZ1bmN0aW9uIGJhc2VQcm9wZXJ0eURlZXAocGF0aCl7cmV0dXJuIGZ1bmN0aW9uKG9iamVjdCl7cmV0dXJuIGJhc2VHZXQob2JqZWN0LHBhdGgpfX0KZnVuY3Rpb24gYmFzZVB1bGxBbGwoYXJyYXksdmFsdWVzLGl0ZXJhdGVlLGNvbXBhcmF0b3Ipe3ZhciBpbmRleE9mPWNvbXBhcmF0b3I/YmFzZUluZGV4T2ZXaXRoOmJhc2VJbmRleE9mLGluZGV4PS0xLGxlbmd0aD12YWx1ZXMubGVuZ3RoLHNlZW49YXJyYXk7aWYoYXJyYXk9PT12YWx1ZXMpdmFsdWVzPWNvcHlBcnJheSh2YWx1ZXMpO2lmKGl0ZXJhdGVlKXNlZW49YXJyYXlNYXAoYXJyYXksYmFzZVVuYXJ5KGl0ZXJhdGVlKSk7d2hpbGUoKytpbmRleDxsZW5ndGgpe3ZhciBmcm9tSW5kZXg9MCx2YWx1ZT12YWx1ZXNbaW5kZXhdLGNvbXB1dGVkPWl0ZXJhdGVlP2l0ZXJhdGVlKHZhbHVlKTp2YWx1ZTt3aGlsZSgoZnJvbUluZGV4PWluZGV4T2Yoc2Vlbixjb21wdXRlZCxmcm9tSW5kZXgsY29tcGFyYXRvcikpPi0xKXtpZihzZWVuIT09YXJyYXkpc3BsaWNlLmNhbGwoc2Vlbixmcm9tSW5kZXgsMSk7c3BsaWNlLmNhbGwoYXJyYXksZnJvbUluZGV4LDEpfX1yZXR1cm4gYXJyYXl9ZnVuY3Rpb24gYmFzZVB1bGxBdChhcnJheSwKaW5kZXhlcyl7dmFyIGxlbmd0aD1hcnJheT9pbmRleGVzLmxlbmd0aDowLGxhc3RJbmRleD1sZW5ndGgtMTt3aGlsZShsZW5ndGgtLSl7dmFyIGluZGV4PWluZGV4ZXNbbGVuZ3RoXTtpZihsZW5ndGg9PWxhc3RJbmRleHx8aW5kZXghPT1wcmV2aW91cyl7dmFyIHByZXZpb3VzPWluZGV4O2lmKGlzSW5kZXgoaW5kZXgpKXNwbGljZS5jYWxsKGFycmF5LGluZGV4LDEpO2Vsc2UgYmFzZVVuc2V0KGFycmF5LGluZGV4KX19cmV0dXJuIGFycmF5fWZ1bmN0aW9uIGJhc2VSYW5kb20obG93ZXIsdXBwZXIpe3JldHVybiBsb3dlcituYXRpdmVGbG9vcihuYXRpdmVSYW5kb20oKSoodXBwZXItbG93ZXIrMSkpfWZ1bmN0aW9uIGJhc2VSYW5nZShzdGFydCxlbmQsc3RlcCxmcm9tUmlnaHQpe3ZhciBpbmRleD0tMSxsZW5ndGg9bmF0aXZlTWF4KG5hdGl2ZUNlaWwoKGVuZC1zdGFydCkvKHN0ZXB8fDEpKSwwKSxyZXN1bHQ9QXJyYXkobGVuZ3RoKTt3aGlsZShsZW5ndGgtLSl7cmVzdWx0W2Zyb21SaWdodD8KbGVuZ3RoOisraW5kZXhdPXN0YXJ0O3N0YXJ0Kz1zdGVwfXJldHVybiByZXN1bHR9ZnVuY3Rpb24gYmFzZVJlcGVhdChzdHJpbmcsbil7dmFyIHJlc3VsdD0iIjtpZighc3RyaW5nfHxuPDF8fG4+TUFYX1NBRkVfSU5URUdFUilyZXR1cm4gcmVzdWx0O2Rve2lmKG4lMilyZXN1bHQrPXN0cmluZztuPW5hdGl2ZUZsb29yKG4vMik7aWYobilzdHJpbmcrPXN0cmluZ313aGlsZShuKTtyZXR1cm4gcmVzdWx0fWZ1bmN0aW9uIGJhc2VSZXN0KGZ1bmMsc3RhcnQpe3JldHVybiBzZXRUb1N0cmluZyhvdmVyUmVzdChmdW5jLHN0YXJ0LGlkZW50aXR5KSxmdW5jKyIiKX1mdW5jdGlvbiBiYXNlU2FtcGxlKGNvbGxlY3Rpb24pe3JldHVybiBhcnJheVNhbXBsZSh2YWx1ZXMoY29sbGVjdGlvbikpfWZ1bmN0aW9uIGJhc2VTYW1wbGVTaXplKGNvbGxlY3Rpb24sbil7dmFyIGFycmF5PXZhbHVlcyhjb2xsZWN0aW9uKTtyZXR1cm4gc2h1ZmZsZVNlbGYoYXJyYXksYmFzZUNsYW1wKG4sMCxhcnJheS5sZW5ndGgpKX0KZnVuY3Rpb24gYmFzZVNldChvYmplY3QscGF0aCx2YWx1ZSxjdXN0b21pemVyKXtpZighaXNPYmplY3Qob2JqZWN0KSlyZXR1cm4gb2JqZWN0O3BhdGg9Y2FzdFBhdGgocGF0aCxvYmplY3QpO3ZhciBpbmRleD0tMSxsZW5ndGg9cGF0aC5sZW5ndGgsbGFzdEluZGV4PWxlbmd0aC0xLG5lc3RlZD1vYmplY3Q7d2hpbGUobmVzdGVkIT1udWxsJiYrK2luZGV4PGxlbmd0aCl7dmFyIGtleT10b0tleShwYXRoW2luZGV4XSksbmV3VmFsdWU9dmFsdWU7aWYoaW5kZXghPWxhc3RJbmRleCl7dmFyIG9ialZhbHVlPW5lc3RlZFtrZXldO25ld1ZhbHVlPWN1c3RvbWl6ZXI/Y3VzdG9taXplcihvYmpWYWx1ZSxrZXksbmVzdGVkKTp1bmRlZmluZWQ7aWYobmV3VmFsdWU9PT11bmRlZmluZWQpbmV3VmFsdWU9aXNPYmplY3Qob2JqVmFsdWUpP29ialZhbHVlOmlzSW5kZXgocGF0aFtpbmRleCsxXSk/W106e319YXNzaWduVmFsdWUobmVzdGVkLGtleSxuZXdWYWx1ZSk7bmVzdGVkPW5lc3RlZFtrZXldfXJldHVybiBvYmplY3R9CnZhciBiYXNlU2V0RGF0YT0hbWV0YU1hcD9pZGVudGl0eTpmdW5jdGlvbihmdW5jLGRhdGEpe21ldGFNYXAuc2V0KGZ1bmMsZGF0YSk7cmV0dXJuIGZ1bmN9O3ZhciBiYXNlU2V0VG9TdHJpbmc9IWRlZmluZVByb3BlcnR5P2lkZW50aXR5OmZ1bmN0aW9uKGZ1bmMsc3RyaW5nKXtyZXR1cm4gZGVmaW5lUHJvcGVydHkoZnVuYywidG9TdHJpbmciLHsiY29uZmlndXJhYmxlIjp0cnVlLCJlbnVtZXJhYmxlIjpmYWxzZSwidmFsdWUiOmNvbnN0YW50KHN0cmluZyksIndyaXRhYmxlIjp0cnVlfSl9O2Z1bmN0aW9uIGJhc2VTaHVmZmxlKGNvbGxlY3Rpb24pe3JldHVybiBzaHVmZmxlU2VsZih2YWx1ZXMoY29sbGVjdGlvbikpfWZ1bmN0aW9uIGJhc2VTbGljZShhcnJheSxzdGFydCxlbmQpe3ZhciBpbmRleD0tMSxsZW5ndGg9YXJyYXkubGVuZ3RoO2lmKHN0YXJ0PDApc3RhcnQ9LXN0YXJ0Pmxlbmd0aD8wOmxlbmd0aCtzdGFydDtlbmQ9ZW5kPmxlbmd0aD9sZW5ndGg6ZW5kO2lmKGVuZDwwKWVuZCs9Cmxlbmd0aDtsZW5ndGg9c3RhcnQ+ZW5kPzA6ZW5kLXN0YXJ0Pj4+MDtzdGFydD4+Pj0wO3ZhciByZXN1bHQ9QXJyYXkobGVuZ3RoKTt3aGlsZSgrK2luZGV4PGxlbmd0aClyZXN1bHRbaW5kZXhdPWFycmF5W2luZGV4K3N0YXJ0XTtyZXR1cm4gcmVzdWx0fWZ1bmN0aW9uIGJhc2VTb21lKGNvbGxlY3Rpb24scHJlZGljYXRlKXt2YXIgcmVzdWx0O2Jhc2VFYWNoKGNvbGxlY3Rpb24sZnVuY3Rpb24odmFsdWUsaW5kZXgsY29sbGVjdGlvbil7cmVzdWx0PXByZWRpY2F0ZSh2YWx1ZSxpbmRleCxjb2xsZWN0aW9uKTtyZXR1cm4hcmVzdWx0fSk7cmV0dXJuISFyZXN1bHR9ZnVuY3Rpb24gYmFzZVNvcnRlZEluZGV4KGFycmF5LHZhbHVlLHJldEhpZ2hlc3Qpe3ZhciBsb3c9MCxoaWdoPWFycmF5PT1udWxsP2xvdzphcnJheS5sZW5ndGg7aWYodHlwZW9mIHZhbHVlPT0ibnVtYmVyIiYmdmFsdWU9PT12YWx1ZSYmaGlnaDw9SEFMRl9NQVhfQVJSQVlfTEVOR1RIKXt3aGlsZShsb3c8aGlnaCl7dmFyIG1pZD0KbG93K2hpZ2g+Pj4xLGNvbXB1dGVkPWFycmF5W21pZF07aWYoY29tcHV0ZWQhPT1udWxsJiYhaXNTeW1ib2woY29tcHV0ZWQpJiYocmV0SGlnaGVzdD9jb21wdXRlZDw9dmFsdWU6Y29tcHV0ZWQ8dmFsdWUpKWxvdz1taWQrMTtlbHNlIGhpZ2g9bWlkfXJldHVybiBoaWdofXJldHVybiBiYXNlU29ydGVkSW5kZXhCeShhcnJheSx2YWx1ZSxpZGVudGl0eSxyZXRIaWdoZXN0KX1mdW5jdGlvbiBiYXNlU29ydGVkSW5kZXhCeShhcnJheSx2YWx1ZSxpdGVyYXRlZSxyZXRIaWdoZXN0KXt2YWx1ZT1pdGVyYXRlZSh2YWx1ZSk7dmFyIGxvdz0wLGhpZ2g9YXJyYXk9PW51bGw/MDphcnJheS5sZW5ndGgsdmFsSXNOYU49dmFsdWUhPT12YWx1ZSx2YWxJc051bGw9dmFsdWU9PT1udWxsLHZhbElzU3ltYm9sPWlzU3ltYm9sKHZhbHVlKSx2YWxJc1VuZGVmaW5lZD12YWx1ZT09PXVuZGVmaW5lZDt3aGlsZShsb3c8aGlnaCl7dmFyIG1pZD1uYXRpdmVGbG9vcigobG93K2hpZ2gpLzIpLGNvbXB1dGVkPQppdGVyYXRlZShhcnJheVttaWRdKSxvdGhJc0RlZmluZWQ9Y29tcHV0ZWQhPT11bmRlZmluZWQsb3RoSXNOdWxsPWNvbXB1dGVkPT09bnVsbCxvdGhJc1JlZmxleGl2ZT1jb21wdXRlZD09PWNvbXB1dGVkLG90aElzU3ltYm9sPWlzU3ltYm9sKGNvbXB1dGVkKTtpZih2YWxJc05hTil2YXIgc2V0TG93PXJldEhpZ2hlc3R8fG90aElzUmVmbGV4aXZlO2Vsc2UgaWYodmFsSXNVbmRlZmluZWQpc2V0TG93PW90aElzUmVmbGV4aXZlJiYocmV0SGlnaGVzdHx8b3RoSXNEZWZpbmVkKTtlbHNlIGlmKHZhbElzTnVsbClzZXRMb3c9b3RoSXNSZWZsZXhpdmUmJm90aElzRGVmaW5lZCYmKHJldEhpZ2hlc3R8fCFvdGhJc051bGwpO2Vsc2UgaWYodmFsSXNTeW1ib2wpc2V0TG93PW90aElzUmVmbGV4aXZlJiZvdGhJc0RlZmluZWQmJiFvdGhJc051bGwmJihyZXRIaWdoZXN0fHwhb3RoSXNTeW1ib2wpO2Vsc2UgaWYob3RoSXNOdWxsfHxvdGhJc1N5bWJvbClzZXRMb3c9ZmFsc2U7ZWxzZSBzZXRMb3c9CnJldEhpZ2hlc3Q/Y29tcHV0ZWQ8PXZhbHVlOmNvbXB1dGVkPHZhbHVlO2lmKHNldExvdylsb3c9bWlkKzE7ZWxzZSBoaWdoPW1pZH1yZXR1cm4gbmF0aXZlTWluKGhpZ2gsTUFYX0FSUkFZX0lOREVYKX1mdW5jdGlvbiBiYXNlU29ydGVkVW5pcShhcnJheSxpdGVyYXRlZSl7dmFyIGluZGV4PS0xLGxlbmd0aD1hcnJheS5sZW5ndGgscmVzSW5kZXg9MCxyZXN1bHQ9W107d2hpbGUoKytpbmRleDxsZW5ndGgpe3ZhciB2YWx1ZT1hcnJheVtpbmRleF0sY29tcHV0ZWQ9aXRlcmF0ZWU/aXRlcmF0ZWUodmFsdWUpOnZhbHVlO2lmKCFpbmRleHx8IWVxKGNvbXB1dGVkLHNlZW4pKXt2YXIgc2Vlbj1jb21wdXRlZDtyZXN1bHRbcmVzSW5kZXgrK109dmFsdWU9PT0wPzA6dmFsdWV9fXJldHVybiByZXN1bHR9ZnVuY3Rpb24gYmFzZVRvTnVtYmVyKHZhbHVlKXtpZih0eXBlb2YgdmFsdWU9PSJudW1iZXIiKXJldHVybiB2YWx1ZTtpZihpc1N5bWJvbCh2YWx1ZSkpcmV0dXJuIE5BTjtyZXR1cm4rdmFsdWV9CmZ1bmN0aW9uIGJhc2VUb1N0cmluZyh2YWx1ZSl7aWYodHlwZW9mIHZhbHVlPT0ic3RyaW5nIilyZXR1cm4gdmFsdWU7aWYoaXNBcnJheSh2YWx1ZSkpcmV0dXJuIGFycmF5TWFwKHZhbHVlLGJhc2VUb1N0cmluZykrIiI7aWYoaXNTeW1ib2wodmFsdWUpKXJldHVybiBzeW1ib2xUb1N0cmluZz9zeW1ib2xUb1N0cmluZy5jYWxsKHZhbHVlKToiIjt2YXIgcmVzdWx0PXZhbHVlKyIiO3JldHVybiByZXN1bHQ9PSIwIiYmMS92YWx1ZT09LUlORklOSVRZPyItMCI6cmVzdWx0fWZ1bmN0aW9uIGJhc2VVbmlxKGFycmF5LGl0ZXJhdGVlLGNvbXBhcmF0b3Ipe3ZhciBpbmRleD0tMSxpbmNsdWRlcz1hcnJheUluY2x1ZGVzLGxlbmd0aD1hcnJheS5sZW5ndGgsaXNDb21tb249dHJ1ZSxyZXN1bHQ9W10sc2Vlbj1yZXN1bHQ7aWYoY29tcGFyYXRvcil7aXNDb21tb249ZmFsc2U7aW5jbHVkZXM9YXJyYXlJbmNsdWRlc1dpdGh9ZWxzZSBpZihsZW5ndGg+PUxBUkdFX0FSUkFZX1NJWkUpe3ZhciBzZXQ9Cml0ZXJhdGVlP251bGw6Y3JlYXRlU2V0KGFycmF5KTtpZihzZXQpcmV0dXJuIHNldFRvQXJyYXkoc2V0KTtpc0NvbW1vbj1mYWxzZTtpbmNsdWRlcz1jYWNoZUhhcztzZWVuPW5ldyBTZXRDYWNoZX1lbHNlIHNlZW49aXRlcmF0ZWU/W106cmVzdWx0O291dGVyOndoaWxlKCsraW5kZXg8bGVuZ3RoKXt2YXIgdmFsdWU9YXJyYXlbaW5kZXhdLGNvbXB1dGVkPWl0ZXJhdGVlP2l0ZXJhdGVlKHZhbHVlKTp2YWx1ZTt2YWx1ZT1jb21wYXJhdG9yfHx2YWx1ZSE9PTA/dmFsdWU6MDtpZihpc0NvbW1vbiYmY29tcHV0ZWQ9PT1jb21wdXRlZCl7dmFyIHNlZW5JbmRleD1zZWVuLmxlbmd0aDt3aGlsZShzZWVuSW5kZXgtLSlpZihzZWVuW3NlZW5JbmRleF09PT1jb21wdXRlZCljb250aW51ZSBvdXRlcjtpZihpdGVyYXRlZSlzZWVuLnB1c2goY29tcHV0ZWQpO3Jlc3VsdC5wdXNoKHZhbHVlKX1lbHNlIGlmKCFpbmNsdWRlcyhzZWVuLGNvbXB1dGVkLGNvbXBhcmF0b3IpKXtpZihzZWVuIT09cmVzdWx0KXNlZW4ucHVzaChjb21wdXRlZCk7CnJlc3VsdC5wdXNoKHZhbHVlKX19cmV0dXJuIHJlc3VsdH1mdW5jdGlvbiBiYXNlVW5zZXQob2JqZWN0LHBhdGgpe3BhdGg9Y2FzdFBhdGgocGF0aCxvYmplY3QpO29iamVjdD1wYXJlbnQob2JqZWN0LHBhdGgpO3JldHVybiBvYmplY3Q9PW51bGx8fGRlbGV0ZSBvYmplY3RbdG9LZXkobGFzdChwYXRoKSldfWZ1bmN0aW9uIGJhc2VVcGRhdGUob2JqZWN0LHBhdGgsdXBkYXRlcixjdXN0b21pemVyKXtyZXR1cm4gYmFzZVNldChvYmplY3QscGF0aCx1cGRhdGVyKGJhc2VHZXQob2JqZWN0LHBhdGgpKSxjdXN0b21pemVyKX1mdW5jdGlvbiBiYXNlV2hpbGUoYXJyYXkscHJlZGljYXRlLGlzRHJvcCxmcm9tUmlnaHQpe3ZhciBsZW5ndGg9YXJyYXkubGVuZ3RoLGluZGV4PWZyb21SaWdodD9sZW5ndGg6LTE7d2hpbGUoKGZyb21SaWdodD9pbmRleC0tOisraW5kZXg8bGVuZ3RoKSYmcHJlZGljYXRlKGFycmF5W2luZGV4XSxpbmRleCxhcnJheSkpO3JldHVybiBpc0Ryb3A/YmFzZVNsaWNlKGFycmF5LApmcm9tUmlnaHQ/MDppbmRleCxmcm9tUmlnaHQ/aW5kZXgrMTpsZW5ndGgpOmJhc2VTbGljZShhcnJheSxmcm9tUmlnaHQ/aW5kZXgrMTowLGZyb21SaWdodD9sZW5ndGg6aW5kZXgpfWZ1bmN0aW9uIGJhc2VXcmFwcGVyVmFsdWUodmFsdWUsYWN0aW9ucyl7dmFyIHJlc3VsdD12YWx1ZTtpZihyZXN1bHQgaW5zdGFuY2VvZiBMYXp5V3JhcHBlcilyZXN1bHQ9cmVzdWx0LnZhbHVlKCk7cmV0dXJuIGFycmF5UmVkdWNlKGFjdGlvbnMsZnVuY3Rpb24ocmVzdWx0LGFjdGlvbil7cmV0dXJuIGFjdGlvbi5mdW5jLmFwcGx5KGFjdGlvbi50aGlzQXJnLGFycmF5UHVzaChbcmVzdWx0XSxhY3Rpb24uYXJncykpfSxyZXN1bHQpfWZ1bmN0aW9uIGJhc2VYb3IoYXJyYXlzLGl0ZXJhdGVlLGNvbXBhcmF0b3Ipe3ZhciBsZW5ndGg9YXJyYXlzLmxlbmd0aDtpZihsZW5ndGg8MilyZXR1cm4gbGVuZ3RoP2Jhc2VVbmlxKGFycmF5c1swXSk6W107dmFyIGluZGV4PS0xLHJlc3VsdD1BcnJheShsZW5ndGgpOwp3aGlsZSgrK2luZGV4PGxlbmd0aCl7dmFyIGFycmF5PWFycmF5c1tpbmRleF0sb3RoSW5kZXg9LTE7d2hpbGUoKytvdGhJbmRleDxsZW5ndGgpaWYob3RoSW5kZXghPWluZGV4KXJlc3VsdFtpbmRleF09YmFzZURpZmZlcmVuY2UocmVzdWx0W2luZGV4XXx8YXJyYXksYXJyYXlzW290aEluZGV4XSxpdGVyYXRlZSxjb21wYXJhdG9yKX1yZXR1cm4gYmFzZVVuaXEoYmFzZUZsYXR0ZW4ocmVzdWx0LDEpLGl0ZXJhdGVlLGNvbXBhcmF0b3IpfWZ1bmN0aW9uIGJhc2VaaXBPYmplY3QocHJvcHMsdmFsdWVzLGFzc2lnbkZ1bmMpe3ZhciBpbmRleD0tMSxsZW5ndGg9cHJvcHMubGVuZ3RoLHZhbHNMZW5ndGg9dmFsdWVzLmxlbmd0aCxyZXN1bHQ9e307d2hpbGUoKytpbmRleDxsZW5ndGgpe3ZhciB2YWx1ZT1pbmRleDx2YWxzTGVuZ3RoP3ZhbHVlc1tpbmRleF06dW5kZWZpbmVkO2Fzc2lnbkZ1bmMocmVzdWx0LHByb3BzW2luZGV4XSx2YWx1ZSl9cmV0dXJuIHJlc3VsdH1mdW5jdGlvbiBjYXN0QXJyYXlMaWtlT2JqZWN0KHZhbHVlKXtyZXR1cm4gaXNBcnJheUxpa2VPYmplY3QodmFsdWUpPwp2YWx1ZTpbXX1mdW5jdGlvbiBjYXN0RnVuY3Rpb24odmFsdWUpe3JldHVybiB0eXBlb2YgdmFsdWU9PSJmdW5jdGlvbiI/dmFsdWU6aWRlbnRpdHl9ZnVuY3Rpb24gY2FzdFBhdGgodmFsdWUsb2JqZWN0KXtpZihpc0FycmF5KHZhbHVlKSlyZXR1cm4gdmFsdWU7cmV0dXJuIGlzS2V5KHZhbHVlLG9iamVjdCk/W3ZhbHVlXTpzdHJpbmdUb1BhdGgodG9TdHJpbmcodmFsdWUpKX12YXIgY2FzdFJlc3Q9YmFzZVJlc3Q7ZnVuY3Rpb24gY2FzdFNsaWNlKGFycmF5LHN0YXJ0LGVuZCl7dmFyIGxlbmd0aD1hcnJheS5sZW5ndGg7ZW5kPWVuZD09PXVuZGVmaW5lZD9sZW5ndGg6ZW5kO3JldHVybiFzdGFydCYmZW5kPj1sZW5ndGg/YXJyYXk6YmFzZVNsaWNlKGFycmF5LHN0YXJ0LGVuZCl9dmFyIGNsZWFyVGltZW91dD1jdHhDbGVhclRpbWVvdXR8fGZ1bmN0aW9uKGlkKXtyZXR1cm4gcm9vdC5jbGVhclRpbWVvdXQoaWQpfTtmdW5jdGlvbiBjbG9uZUJ1ZmZlcihidWZmZXIsaXNEZWVwKXtpZihpc0RlZXApcmV0dXJuIGJ1ZmZlci5zbGljZSgpOwp2YXIgbGVuZ3RoPWJ1ZmZlci5sZW5ndGgscmVzdWx0PWFsbG9jVW5zYWZlP2FsbG9jVW5zYWZlKGxlbmd0aCk6bmV3IGJ1ZmZlci5jb25zdHJ1Y3RvcihsZW5ndGgpO2J1ZmZlci5jb3B5KHJlc3VsdCk7cmV0dXJuIHJlc3VsdH1mdW5jdGlvbiBjbG9uZUFycmF5QnVmZmVyKGFycmF5QnVmZmVyKXt2YXIgcmVzdWx0PW5ldyBhcnJheUJ1ZmZlci5jb25zdHJ1Y3RvcihhcnJheUJ1ZmZlci5ieXRlTGVuZ3RoKTsobmV3IFVpbnQ4QXJyYXkocmVzdWx0KSkuc2V0KG5ldyBVaW50OEFycmF5KGFycmF5QnVmZmVyKSk7cmV0dXJuIHJlc3VsdH1mdW5jdGlvbiBjbG9uZURhdGFWaWV3KGRhdGFWaWV3LGlzRGVlcCl7dmFyIGJ1ZmZlcj1pc0RlZXA/Y2xvbmVBcnJheUJ1ZmZlcihkYXRhVmlldy5idWZmZXIpOmRhdGFWaWV3LmJ1ZmZlcjtyZXR1cm4gbmV3IGRhdGFWaWV3LmNvbnN0cnVjdG9yKGJ1ZmZlcixkYXRhVmlldy5ieXRlT2Zmc2V0LGRhdGFWaWV3LmJ5dGVMZW5ndGgpfWZ1bmN0aW9uIGNsb25lUmVnRXhwKHJlZ2V4cCl7dmFyIHJlc3VsdD0KbmV3IHJlZ2V4cC5jb25zdHJ1Y3RvcihyZWdleHAuc291cmNlLHJlRmxhZ3MuZXhlYyhyZWdleHApKTtyZXN1bHQubGFzdEluZGV4PXJlZ2V4cC5sYXN0SW5kZXg7cmV0dXJuIHJlc3VsdH1mdW5jdGlvbiBjbG9uZVN5bWJvbChzeW1ib2wpe3JldHVybiBzeW1ib2xWYWx1ZU9mP09iamVjdChzeW1ib2xWYWx1ZU9mLmNhbGwoc3ltYm9sKSk6e319ZnVuY3Rpb24gY2xvbmVUeXBlZEFycmF5KHR5cGVkQXJyYXksaXNEZWVwKXt2YXIgYnVmZmVyPWlzRGVlcD9jbG9uZUFycmF5QnVmZmVyKHR5cGVkQXJyYXkuYnVmZmVyKTp0eXBlZEFycmF5LmJ1ZmZlcjtyZXR1cm4gbmV3IHR5cGVkQXJyYXkuY29uc3RydWN0b3IoYnVmZmVyLHR5cGVkQXJyYXkuYnl0ZU9mZnNldCx0eXBlZEFycmF5Lmxlbmd0aCl9ZnVuY3Rpb24gY29tcGFyZUFzY2VuZGluZyh2YWx1ZSxvdGhlcil7aWYodmFsdWUhPT1vdGhlcil7dmFyIHZhbElzRGVmaW5lZD12YWx1ZSE9PXVuZGVmaW5lZCx2YWxJc051bGw9dmFsdWU9PT0KbnVsbCx2YWxJc1JlZmxleGl2ZT12YWx1ZT09PXZhbHVlLHZhbElzU3ltYm9sPWlzU3ltYm9sKHZhbHVlKTt2YXIgb3RoSXNEZWZpbmVkPW90aGVyIT09dW5kZWZpbmVkLG90aElzTnVsbD1vdGhlcj09PW51bGwsb3RoSXNSZWZsZXhpdmU9b3RoZXI9PT1vdGhlcixvdGhJc1N5bWJvbD1pc1N5bWJvbChvdGhlcik7aWYoIW90aElzTnVsbCYmIW90aElzU3ltYm9sJiYhdmFsSXNTeW1ib2wmJnZhbHVlPm90aGVyfHx2YWxJc1N5bWJvbCYmb3RoSXNEZWZpbmVkJiZvdGhJc1JlZmxleGl2ZSYmIW90aElzTnVsbCYmIW90aElzU3ltYm9sfHx2YWxJc051bGwmJm90aElzRGVmaW5lZCYmb3RoSXNSZWZsZXhpdmV8fCF2YWxJc0RlZmluZWQmJm90aElzUmVmbGV4aXZlfHwhdmFsSXNSZWZsZXhpdmUpcmV0dXJuIDE7aWYoIXZhbElzTnVsbCYmIXZhbElzU3ltYm9sJiYhb3RoSXNTeW1ib2wmJnZhbHVlPG90aGVyfHxvdGhJc1N5bWJvbCYmdmFsSXNEZWZpbmVkJiZ2YWxJc1JlZmxleGl2ZSYmIXZhbElzTnVsbCYmCiF2YWxJc1N5bWJvbHx8b3RoSXNOdWxsJiZ2YWxJc0RlZmluZWQmJnZhbElzUmVmbGV4aXZlfHwhb3RoSXNEZWZpbmVkJiZ2YWxJc1JlZmxleGl2ZXx8IW90aElzUmVmbGV4aXZlKXJldHVybi0xfXJldHVybiAwfWZ1bmN0aW9uIGNvbXBhcmVNdWx0aXBsZShvYmplY3Qsb3RoZXIsb3JkZXJzKXt2YXIgaW5kZXg9LTEsb2JqQ3JpdGVyaWE9b2JqZWN0LmNyaXRlcmlhLG90aENyaXRlcmlhPW90aGVyLmNyaXRlcmlhLGxlbmd0aD1vYmpDcml0ZXJpYS5sZW5ndGgsb3JkZXJzTGVuZ3RoPW9yZGVycy5sZW5ndGg7d2hpbGUoKytpbmRleDxsZW5ndGgpe3ZhciByZXN1bHQ9Y29tcGFyZUFzY2VuZGluZyhvYmpDcml0ZXJpYVtpbmRleF0sb3RoQ3JpdGVyaWFbaW5kZXhdKTtpZihyZXN1bHQpe2lmKGluZGV4Pj1vcmRlcnNMZW5ndGgpcmV0dXJuIHJlc3VsdDt2YXIgb3JkZXI9b3JkZXJzW2luZGV4XTtyZXR1cm4gcmVzdWx0KihvcmRlcj09ImRlc2MiPy0xOjEpfX1yZXR1cm4gb2JqZWN0LmluZGV4LQpvdGhlci5pbmRleH1mdW5jdGlvbiBjb21wb3NlQXJncyhhcmdzLHBhcnRpYWxzLGhvbGRlcnMsaXNDdXJyaWVkKXt2YXIgYXJnc0luZGV4PS0xLGFyZ3NMZW5ndGg9YXJncy5sZW5ndGgsaG9sZGVyc0xlbmd0aD1ob2xkZXJzLmxlbmd0aCxsZWZ0SW5kZXg9LTEsbGVmdExlbmd0aD1wYXJ0aWFscy5sZW5ndGgscmFuZ2VMZW5ndGg9bmF0aXZlTWF4KGFyZ3NMZW5ndGgtaG9sZGVyc0xlbmd0aCwwKSxyZXN1bHQ9QXJyYXkobGVmdExlbmd0aCtyYW5nZUxlbmd0aCksaXNVbmN1cnJpZWQ9IWlzQ3VycmllZDt3aGlsZSgrK2xlZnRJbmRleDxsZWZ0TGVuZ3RoKXJlc3VsdFtsZWZ0SW5kZXhdPXBhcnRpYWxzW2xlZnRJbmRleF07d2hpbGUoKythcmdzSW5kZXg8aG9sZGVyc0xlbmd0aClpZihpc1VuY3VycmllZHx8YXJnc0luZGV4PGFyZ3NMZW5ndGgpcmVzdWx0W2hvbGRlcnNbYXJnc0luZGV4XV09YXJnc1thcmdzSW5kZXhdO3doaWxlKHJhbmdlTGVuZ3RoLS0pcmVzdWx0W2xlZnRJbmRleCsrXT0KYXJnc1thcmdzSW5kZXgrK107cmV0dXJuIHJlc3VsdH1mdW5jdGlvbiBjb21wb3NlQXJnc1JpZ2h0KGFyZ3MscGFydGlhbHMsaG9sZGVycyxpc0N1cnJpZWQpe3ZhciBhcmdzSW5kZXg9LTEsYXJnc0xlbmd0aD1hcmdzLmxlbmd0aCxob2xkZXJzSW5kZXg9LTEsaG9sZGVyc0xlbmd0aD1ob2xkZXJzLmxlbmd0aCxyaWdodEluZGV4PS0xLHJpZ2h0TGVuZ3RoPXBhcnRpYWxzLmxlbmd0aCxyYW5nZUxlbmd0aD1uYXRpdmVNYXgoYXJnc0xlbmd0aC1ob2xkZXJzTGVuZ3RoLDApLHJlc3VsdD1BcnJheShyYW5nZUxlbmd0aCtyaWdodExlbmd0aCksaXNVbmN1cnJpZWQ9IWlzQ3VycmllZDt3aGlsZSgrK2FyZ3NJbmRleDxyYW5nZUxlbmd0aClyZXN1bHRbYXJnc0luZGV4XT1hcmdzW2FyZ3NJbmRleF07dmFyIG9mZnNldD1hcmdzSW5kZXg7d2hpbGUoKytyaWdodEluZGV4PHJpZ2h0TGVuZ3RoKXJlc3VsdFtvZmZzZXQrcmlnaHRJbmRleF09cGFydGlhbHNbcmlnaHRJbmRleF07d2hpbGUoKytob2xkZXJzSW5kZXg8CmhvbGRlcnNMZW5ndGgpaWYoaXNVbmN1cnJpZWR8fGFyZ3NJbmRleDxhcmdzTGVuZ3RoKXJlc3VsdFtvZmZzZXQraG9sZGVyc1tob2xkZXJzSW5kZXhdXT1hcmdzW2FyZ3NJbmRleCsrXTtyZXR1cm4gcmVzdWx0fWZ1bmN0aW9uIGNvcHlBcnJheShzb3VyY2UsYXJyYXkpe3ZhciBpbmRleD0tMSxsZW5ndGg9c291cmNlLmxlbmd0aDthcnJheXx8KGFycmF5PUFycmF5KGxlbmd0aCkpO3doaWxlKCsraW5kZXg8bGVuZ3RoKWFycmF5W2luZGV4XT1zb3VyY2VbaW5kZXhdO3JldHVybiBhcnJheX1mdW5jdGlvbiBjb3B5T2JqZWN0KHNvdXJjZSxwcm9wcyxvYmplY3QsY3VzdG9taXplcil7dmFyIGlzTmV3PSFvYmplY3Q7b2JqZWN0fHwob2JqZWN0PXt9KTt2YXIgaW5kZXg9LTEsbGVuZ3RoPXByb3BzLmxlbmd0aDt3aGlsZSgrK2luZGV4PGxlbmd0aCl7dmFyIGtleT1wcm9wc1tpbmRleF07dmFyIG5ld1ZhbHVlPWN1c3RvbWl6ZXI/Y3VzdG9taXplcihvYmplY3Rba2V5XSxzb3VyY2Vba2V5XSwKa2V5LG9iamVjdCxzb3VyY2UpOnVuZGVmaW5lZDtpZihuZXdWYWx1ZT09PXVuZGVmaW5lZCluZXdWYWx1ZT1zb3VyY2Vba2V5XTtpZihpc05ldyliYXNlQXNzaWduVmFsdWUob2JqZWN0LGtleSxuZXdWYWx1ZSk7ZWxzZSBhc3NpZ25WYWx1ZShvYmplY3Qsa2V5LG5ld1ZhbHVlKX1yZXR1cm4gb2JqZWN0fWZ1bmN0aW9uIGNvcHlTeW1ib2xzKHNvdXJjZSxvYmplY3Qpe3JldHVybiBjb3B5T2JqZWN0KHNvdXJjZSxnZXRTeW1ib2xzKHNvdXJjZSksb2JqZWN0KX1mdW5jdGlvbiBjb3B5U3ltYm9sc0luKHNvdXJjZSxvYmplY3Qpe3JldHVybiBjb3B5T2JqZWN0KHNvdXJjZSxnZXRTeW1ib2xzSW4oc291cmNlKSxvYmplY3QpfWZ1bmN0aW9uIGNyZWF0ZUFnZ3JlZ2F0b3Ioc2V0dGVyLGluaXRpYWxpemVyKXtyZXR1cm4gZnVuY3Rpb24oY29sbGVjdGlvbixpdGVyYXRlZSl7dmFyIGZ1bmM9aXNBcnJheShjb2xsZWN0aW9uKT9hcnJheUFnZ3JlZ2F0b3I6YmFzZUFnZ3JlZ2F0b3IsYWNjdW11bGF0b3I9CmluaXRpYWxpemVyP2luaXRpYWxpemVyKCk6e307cmV0dXJuIGZ1bmMoY29sbGVjdGlvbixzZXR0ZXIsZ2V0SXRlcmF0ZWUoaXRlcmF0ZWUsMiksYWNjdW11bGF0b3IpfX1mdW5jdGlvbiBjcmVhdGVBc3NpZ25lcihhc3NpZ25lcil7cmV0dXJuIGJhc2VSZXN0KGZ1bmN0aW9uKG9iamVjdCxzb3VyY2VzKXt2YXIgaW5kZXg9LTEsbGVuZ3RoPXNvdXJjZXMubGVuZ3RoLGN1c3RvbWl6ZXI9bGVuZ3RoPjE/c291cmNlc1tsZW5ndGgtMV06dW5kZWZpbmVkLGd1YXJkPWxlbmd0aD4yP3NvdXJjZXNbMl06dW5kZWZpbmVkO2N1c3RvbWl6ZXI9YXNzaWduZXIubGVuZ3RoPjMmJnR5cGVvZiBjdXN0b21pemVyPT0iZnVuY3Rpb24iPyhsZW5ndGgtLSxjdXN0b21pemVyKTp1bmRlZmluZWQ7aWYoZ3VhcmQmJmlzSXRlcmF0ZWVDYWxsKHNvdXJjZXNbMF0sc291cmNlc1sxXSxndWFyZCkpe2N1c3RvbWl6ZXI9bGVuZ3RoPDM/dW5kZWZpbmVkOmN1c3RvbWl6ZXI7bGVuZ3RoPTF9b2JqZWN0PU9iamVjdChvYmplY3QpOwp3aGlsZSgrK2luZGV4PGxlbmd0aCl7dmFyIHNvdXJjZT1zb3VyY2VzW2luZGV4XTtpZihzb3VyY2UpYXNzaWduZXIob2JqZWN0LHNvdXJjZSxpbmRleCxjdXN0b21pemVyKX1yZXR1cm4gb2JqZWN0fSl9ZnVuY3Rpb24gY3JlYXRlQmFzZUVhY2goZWFjaEZ1bmMsZnJvbVJpZ2h0KXtyZXR1cm4gZnVuY3Rpb24oY29sbGVjdGlvbixpdGVyYXRlZSl7aWYoY29sbGVjdGlvbj09bnVsbClyZXR1cm4gY29sbGVjdGlvbjtpZighaXNBcnJheUxpa2UoY29sbGVjdGlvbikpcmV0dXJuIGVhY2hGdW5jKGNvbGxlY3Rpb24saXRlcmF0ZWUpO3ZhciBsZW5ndGg9Y29sbGVjdGlvbi5sZW5ndGgsaW5kZXg9ZnJvbVJpZ2h0P2xlbmd0aDotMSxpdGVyYWJsZT1PYmplY3QoY29sbGVjdGlvbik7d2hpbGUoZnJvbVJpZ2h0P2luZGV4LS06KytpbmRleDxsZW5ndGgpaWYoaXRlcmF0ZWUoaXRlcmFibGVbaW5kZXhdLGluZGV4LGl0ZXJhYmxlKT09PWZhbHNlKWJyZWFrO3JldHVybiBjb2xsZWN0aW9ufX1mdW5jdGlvbiBjcmVhdGVCYXNlRm9yKGZyb21SaWdodCl7cmV0dXJuIGZ1bmN0aW9uKG9iamVjdCwKaXRlcmF0ZWUsa2V5c0Z1bmMpe3ZhciBpbmRleD0tMSxpdGVyYWJsZT1PYmplY3Qob2JqZWN0KSxwcm9wcz1rZXlzRnVuYyhvYmplY3QpLGxlbmd0aD1wcm9wcy5sZW5ndGg7d2hpbGUobGVuZ3RoLS0pe3ZhciBrZXk9cHJvcHNbZnJvbVJpZ2h0P2xlbmd0aDorK2luZGV4XTtpZihpdGVyYXRlZShpdGVyYWJsZVtrZXldLGtleSxpdGVyYWJsZSk9PT1mYWxzZSlicmVha31yZXR1cm4gb2JqZWN0fX1mdW5jdGlvbiBjcmVhdGVCaW5kKGZ1bmMsYml0bWFzayx0aGlzQXJnKXt2YXIgaXNCaW5kPWJpdG1hc2smV1JBUF9CSU5EX0ZMQUcsQ3Rvcj1jcmVhdGVDdG9yKGZ1bmMpO2Z1bmN0aW9uIHdyYXBwZXIoKXt2YXIgZm49dGhpcyYmdGhpcyE9PXJvb3QmJnRoaXMgaW5zdGFuY2VvZiB3cmFwcGVyP0N0b3I6ZnVuYztyZXR1cm4gZm4uYXBwbHkoaXNCaW5kP3RoaXNBcmc6dGhpcyxhcmd1bWVudHMpfXJldHVybiB3cmFwcGVyfWZ1bmN0aW9uIGNyZWF0ZUNhc2VGaXJzdChtZXRob2ROYW1lKXtyZXR1cm4gZnVuY3Rpb24oc3RyaW5nKXtzdHJpbmc9CnRvU3RyaW5nKHN0cmluZyk7dmFyIHN0clN5bWJvbHM9aGFzVW5pY29kZShzdHJpbmcpP3N0cmluZ1RvQXJyYXkoc3RyaW5nKTp1bmRlZmluZWQ7dmFyIGNocj1zdHJTeW1ib2xzP3N0clN5bWJvbHNbMF06c3RyaW5nLmNoYXJBdCgwKTt2YXIgdHJhaWxpbmc9c3RyU3ltYm9scz9jYXN0U2xpY2Uoc3RyU3ltYm9scywxKS5qb2luKCIiKTpzdHJpbmcuc2xpY2UoMSk7cmV0dXJuIGNoclttZXRob2ROYW1lXSgpK3RyYWlsaW5nfX1mdW5jdGlvbiBjcmVhdGVDb21wb3VuZGVyKGNhbGxiYWNrKXtyZXR1cm4gZnVuY3Rpb24oc3RyaW5nKXtyZXR1cm4gYXJyYXlSZWR1Y2Uod29yZHMoZGVidXJyKHN0cmluZykucmVwbGFjZShyZUFwb3MsIiIpKSxjYWxsYmFjaywiIil9fWZ1bmN0aW9uIGNyZWF0ZUN0b3IoQ3Rvcil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGFyZ3M9YXJndW1lbnRzO3N3aXRjaChhcmdzLmxlbmd0aCl7Y2FzZSAwOnJldHVybiBuZXcgQ3RvcjtjYXNlIDE6cmV0dXJuIG5ldyBDdG9yKGFyZ3NbMF0pOwpjYXNlIDI6cmV0dXJuIG5ldyBDdG9yKGFyZ3NbMF0sYXJnc1sxXSk7Y2FzZSAzOnJldHVybiBuZXcgQ3RvcihhcmdzWzBdLGFyZ3NbMV0sYXJnc1syXSk7Y2FzZSA0OnJldHVybiBuZXcgQ3RvcihhcmdzWzBdLGFyZ3NbMV0sYXJnc1syXSxhcmdzWzNdKTtjYXNlIDU6cmV0dXJuIG5ldyBDdG9yKGFyZ3NbMF0sYXJnc1sxXSxhcmdzWzJdLGFyZ3NbM10sYXJnc1s0XSk7Y2FzZSA2OnJldHVybiBuZXcgQ3RvcihhcmdzWzBdLGFyZ3NbMV0sYXJnc1syXSxhcmdzWzNdLGFyZ3NbNF0sYXJnc1s1XSk7Y2FzZSA3OnJldHVybiBuZXcgQ3RvcihhcmdzWzBdLGFyZ3NbMV0sYXJnc1syXSxhcmdzWzNdLGFyZ3NbNF0sYXJnc1s1XSxhcmdzWzZdKX12YXIgdGhpc0JpbmRpbmc9YmFzZUNyZWF0ZShDdG9yLnByb3RvdHlwZSkscmVzdWx0PUN0b3IuYXBwbHkodGhpc0JpbmRpbmcsYXJncyk7cmV0dXJuIGlzT2JqZWN0KHJlc3VsdCk/cmVzdWx0OnRoaXNCaW5kaW5nfX1mdW5jdGlvbiBjcmVhdGVDdXJyeShmdW5jLApiaXRtYXNrLGFyaXR5KXt2YXIgQ3Rvcj1jcmVhdGVDdG9yKGZ1bmMpO2Z1bmN0aW9uIHdyYXBwZXIoKXt2YXIgbGVuZ3RoPWFyZ3VtZW50cy5sZW5ndGgsYXJncz1BcnJheShsZW5ndGgpLGluZGV4PWxlbmd0aCxwbGFjZWhvbGRlcj1nZXRIb2xkZXIod3JhcHBlcik7d2hpbGUoaW5kZXgtLSlhcmdzW2luZGV4XT1hcmd1bWVudHNbaW5kZXhdO3ZhciBob2xkZXJzPWxlbmd0aDwzJiZhcmdzWzBdIT09cGxhY2Vob2xkZXImJmFyZ3NbbGVuZ3RoLTFdIT09cGxhY2Vob2xkZXI/W106cmVwbGFjZUhvbGRlcnMoYXJncyxwbGFjZWhvbGRlcik7bGVuZ3RoLT1ob2xkZXJzLmxlbmd0aDtpZihsZW5ndGg8YXJpdHkpcmV0dXJuIGNyZWF0ZVJlY3VycnkoZnVuYyxiaXRtYXNrLGNyZWF0ZUh5YnJpZCx3cmFwcGVyLnBsYWNlaG9sZGVyLHVuZGVmaW5lZCxhcmdzLGhvbGRlcnMsdW5kZWZpbmVkLHVuZGVmaW5lZCxhcml0eS1sZW5ndGgpO3ZhciBmbj10aGlzJiZ0aGlzIT09cm9vdCYmdGhpcyBpbnN0YW5jZW9mCndyYXBwZXI/Q3RvcjpmdW5jO3JldHVybiBhcHBseShmbix0aGlzLGFyZ3MpfXJldHVybiB3cmFwcGVyfWZ1bmN0aW9uIGNyZWF0ZUZpbmQoZmluZEluZGV4RnVuYyl7cmV0dXJuIGZ1bmN0aW9uKGNvbGxlY3Rpb24scHJlZGljYXRlLGZyb21JbmRleCl7dmFyIGl0ZXJhYmxlPU9iamVjdChjb2xsZWN0aW9uKTtpZighaXNBcnJheUxpa2UoY29sbGVjdGlvbikpe3ZhciBpdGVyYXRlZT1nZXRJdGVyYXRlZShwcmVkaWNhdGUsMyk7Y29sbGVjdGlvbj1rZXlzKGNvbGxlY3Rpb24pO3ByZWRpY2F0ZT1mdW5jdGlvbihrZXkpe3JldHVybiBpdGVyYXRlZShpdGVyYWJsZVtrZXldLGtleSxpdGVyYWJsZSl9fXZhciBpbmRleD1maW5kSW5kZXhGdW5jKGNvbGxlY3Rpb24scHJlZGljYXRlLGZyb21JbmRleCk7cmV0dXJuIGluZGV4Pi0xP2l0ZXJhYmxlW2l0ZXJhdGVlP2NvbGxlY3Rpb25baW5kZXhdOmluZGV4XTp1bmRlZmluZWR9fWZ1bmN0aW9uIGNyZWF0ZUZsb3coZnJvbVJpZ2h0KXtyZXR1cm4gZmxhdFJlc3QoZnVuY3Rpb24oZnVuY3Mpe3ZhciBsZW5ndGg9CmZ1bmNzLmxlbmd0aCxpbmRleD1sZW5ndGgscHJlcmVxPUxvZGFzaFdyYXBwZXIucHJvdG90eXBlLnRocnU7aWYoZnJvbVJpZ2h0KWZ1bmNzLnJldmVyc2UoKTt3aGlsZShpbmRleC0tKXt2YXIgZnVuYz1mdW5jc1tpbmRleF07aWYodHlwZW9mIGZ1bmMhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpO2lmKHByZXJlcSYmIXdyYXBwZXImJmdldEZ1bmNOYW1lKGZ1bmMpPT0id3JhcHBlciIpdmFyIHdyYXBwZXI9bmV3IExvZGFzaFdyYXBwZXIoW10sdHJ1ZSl9aW5kZXg9d3JhcHBlcj9pbmRleDpsZW5ndGg7d2hpbGUoKytpbmRleDxsZW5ndGgpe2Z1bmM9ZnVuY3NbaW5kZXhdO3ZhciBmdW5jTmFtZT1nZXRGdW5jTmFtZShmdW5jKSxkYXRhPWZ1bmNOYW1lPT0id3JhcHBlciI/Z2V0RGF0YShmdW5jKTp1bmRlZmluZWQ7aWYoZGF0YSYmaXNMYXppYWJsZShkYXRhWzBdKSYmZGF0YVsxXT09KFdSQVBfQVJZX0ZMQUd8V1JBUF9DVVJSWV9GTEFHfFdSQVBfUEFSVElBTF9GTEFHfApXUkFQX1JFQVJHX0ZMQUcpJiYhZGF0YVs0XS5sZW5ndGgmJmRhdGFbOV09PTEpd3JhcHBlcj13cmFwcGVyW2dldEZ1bmNOYW1lKGRhdGFbMF0pXS5hcHBseSh3cmFwcGVyLGRhdGFbM10pO2Vsc2Ugd3JhcHBlcj1mdW5jLmxlbmd0aD09MSYmaXNMYXppYWJsZShmdW5jKT93cmFwcGVyW2Z1bmNOYW1lXSgpOndyYXBwZXIudGhydShmdW5jKX1yZXR1cm4gZnVuY3Rpb24oKXt2YXIgYXJncz1hcmd1bWVudHMsdmFsdWU9YXJnc1swXTtpZih3cmFwcGVyJiZhcmdzLmxlbmd0aD09MSYmaXNBcnJheSh2YWx1ZSkpcmV0dXJuIHdyYXBwZXIucGxhbnQodmFsdWUpLnZhbHVlKCk7dmFyIGluZGV4PTAscmVzdWx0PWxlbmd0aD9mdW5jc1tpbmRleF0uYXBwbHkodGhpcyxhcmdzKTp2YWx1ZTt3aGlsZSgrK2luZGV4PGxlbmd0aClyZXN1bHQ9ZnVuY3NbaW5kZXhdLmNhbGwodGhpcyxyZXN1bHQpO3JldHVybiByZXN1bHR9fSl9ZnVuY3Rpb24gY3JlYXRlSHlicmlkKGZ1bmMsYml0bWFzayx0aGlzQXJnLApwYXJ0aWFscyxob2xkZXJzLHBhcnRpYWxzUmlnaHQsaG9sZGVyc1JpZ2h0LGFyZ1BvcyxhcnksYXJpdHkpe3ZhciBpc0FyeT1iaXRtYXNrJldSQVBfQVJZX0ZMQUcsaXNCaW5kPWJpdG1hc2smV1JBUF9CSU5EX0ZMQUcsaXNCaW5kS2V5PWJpdG1hc2smV1JBUF9CSU5EX0tFWV9GTEFHLGlzQ3VycmllZD1iaXRtYXNrJihXUkFQX0NVUlJZX0ZMQUd8V1JBUF9DVVJSWV9SSUdIVF9GTEFHKSxpc0ZsaXA9Yml0bWFzayZXUkFQX0ZMSVBfRkxBRyxDdG9yPWlzQmluZEtleT91bmRlZmluZWQ6Y3JlYXRlQ3RvcihmdW5jKTtmdW5jdGlvbiB3cmFwcGVyKCl7dmFyIGxlbmd0aD1hcmd1bWVudHMubGVuZ3RoLGFyZ3M9QXJyYXkobGVuZ3RoKSxpbmRleD1sZW5ndGg7d2hpbGUoaW5kZXgtLSlhcmdzW2luZGV4XT1hcmd1bWVudHNbaW5kZXhdO2lmKGlzQ3VycmllZCl2YXIgcGxhY2Vob2xkZXI9Z2V0SG9sZGVyKHdyYXBwZXIpLGhvbGRlcnNDb3VudD1jb3VudEhvbGRlcnMoYXJncyxwbGFjZWhvbGRlcik7CmlmKHBhcnRpYWxzKWFyZ3M9Y29tcG9zZUFyZ3MoYXJncyxwYXJ0aWFscyxob2xkZXJzLGlzQ3VycmllZCk7aWYocGFydGlhbHNSaWdodClhcmdzPWNvbXBvc2VBcmdzUmlnaHQoYXJncyxwYXJ0aWFsc1JpZ2h0LGhvbGRlcnNSaWdodCxpc0N1cnJpZWQpO2xlbmd0aC09aG9sZGVyc0NvdW50O2lmKGlzQ3VycmllZCYmbGVuZ3RoPGFyaXR5KXt2YXIgbmV3SG9sZGVycz1yZXBsYWNlSG9sZGVycyhhcmdzLHBsYWNlaG9sZGVyKTtyZXR1cm4gY3JlYXRlUmVjdXJyeShmdW5jLGJpdG1hc2ssY3JlYXRlSHlicmlkLHdyYXBwZXIucGxhY2Vob2xkZXIsdGhpc0FyZyxhcmdzLG5ld0hvbGRlcnMsYXJnUG9zLGFyeSxhcml0eS1sZW5ndGgpfXZhciB0aGlzQmluZGluZz1pc0JpbmQ/dGhpc0FyZzp0aGlzLGZuPWlzQmluZEtleT90aGlzQmluZGluZ1tmdW5jXTpmdW5jO2xlbmd0aD1hcmdzLmxlbmd0aDtpZihhcmdQb3MpYXJncz1yZW9yZGVyKGFyZ3MsYXJnUG9zKTtlbHNlIGlmKGlzRmxpcCYmbGVuZ3RoPgoxKWFyZ3MucmV2ZXJzZSgpO2lmKGlzQXJ5JiZhcnk8bGVuZ3RoKWFyZ3MubGVuZ3RoPWFyeTtpZih0aGlzJiZ0aGlzIT09cm9vdCYmdGhpcyBpbnN0YW5jZW9mIHdyYXBwZXIpZm49Q3Rvcnx8Y3JlYXRlQ3Rvcihmbik7cmV0dXJuIGZuLmFwcGx5KHRoaXNCaW5kaW5nLGFyZ3MpfXJldHVybiB3cmFwcGVyfWZ1bmN0aW9uIGNyZWF0ZUludmVydGVyKHNldHRlcix0b0l0ZXJhdGVlKXtyZXR1cm4gZnVuY3Rpb24ob2JqZWN0LGl0ZXJhdGVlKXtyZXR1cm4gYmFzZUludmVydGVyKG9iamVjdCxzZXR0ZXIsdG9JdGVyYXRlZShpdGVyYXRlZSkse30pfX1mdW5jdGlvbiBjcmVhdGVNYXRoT3BlcmF0aW9uKG9wZXJhdG9yLGRlZmF1bHRWYWx1ZSl7cmV0dXJuIGZ1bmN0aW9uKHZhbHVlLG90aGVyKXt2YXIgcmVzdWx0O2lmKHZhbHVlPT09dW5kZWZpbmVkJiZvdGhlcj09PXVuZGVmaW5lZClyZXR1cm4gZGVmYXVsdFZhbHVlO2lmKHZhbHVlIT09dW5kZWZpbmVkKXJlc3VsdD12YWx1ZTtpZihvdGhlciE9PQp1bmRlZmluZWQpe2lmKHJlc3VsdD09PXVuZGVmaW5lZClyZXR1cm4gb3RoZXI7aWYodHlwZW9mIHZhbHVlPT0ic3RyaW5nInx8dHlwZW9mIG90aGVyPT0ic3RyaW5nIil7dmFsdWU9YmFzZVRvU3RyaW5nKHZhbHVlKTtvdGhlcj1iYXNlVG9TdHJpbmcob3RoZXIpfWVsc2V7dmFsdWU9YmFzZVRvTnVtYmVyKHZhbHVlKTtvdGhlcj1iYXNlVG9OdW1iZXIob3RoZXIpfXJlc3VsdD1vcGVyYXRvcih2YWx1ZSxvdGhlcil9cmV0dXJuIHJlc3VsdH19ZnVuY3Rpb24gY3JlYXRlT3ZlcihhcnJheUZ1bmMpe3JldHVybiBmbGF0UmVzdChmdW5jdGlvbihpdGVyYXRlZXMpe2l0ZXJhdGVlcz1hcnJheU1hcChpdGVyYXRlZXMsYmFzZVVuYXJ5KGdldEl0ZXJhdGVlKCkpKTtyZXR1cm4gYmFzZVJlc3QoZnVuY3Rpb24oYXJncyl7dmFyIHRoaXNBcmc9dGhpcztyZXR1cm4gYXJyYXlGdW5jKGl0ZXJhdGVlcyxmdW5jdGlvbihpdGVyYXRlZSl7cmV0dXJuIGFwcGx5KGl0ZXJhdGVlLHRoaXNBcmcsYXJncyl9KX0pfSl9CmZ1bmN0aW9uIGNyZWF0ZVBhZGRpbmcobGVuZ3RoLGNoYXJzKXtjaGFycz1jaGFycz09PXVuZGVmaW5lZD8iICI6YmFzZVRvU3RyaW5nKGNoYXJzKTt2YXIgY2hhcnNMZW5ndGg9Y2hhcnMubGVuZ3RoO2lmKGNoYXJzTGVuZ3RoPDIpcmV0dXJuIGNoYXJzTGVuZ3RoP2Jhc2VSZXBlYXQoY2hhcnMsbGVuZ3RoKTpjaGFyczt2YXIgcmVzdWx0PWJhc2VSZXBlYXQoY2hhcnMsbmF0aXZlQ2VpbChsZW5ndGgvc3RyaW5nU2l6ZShjaGFycykpKTtyZXR1cm4gaGFzVW5pY29kZShjaGFycyk/Y2FzdFNsaWNlKHN0cmluZ1RvQXJyYXkocmVzdWx0KSwwLGxlbmd0aCkuam9pbigiIik6cmVzdWx0LnNsaWNlKDAsbGVuZ3RoKX1mdW5jdGlvbiBjcmVhdGVQYXJ0aWFsKGZ1bmMsYml0bWFzayx0aGlzQXJnLHBhcnRpYWxzKXt2YXIgaXNCaW5kPWJpdG1hc2smV1JBUF9CSU5EX0ZMQUcsQ3Rvcj1jcmVhdGVDdG9yKGZ1bmMpO2Z1bmN0aW9uIHdyYXBwZXIoKXt2YXIgYXJnc0luZGV4PS0xLGFyZ3NMZW5ndGg9CmFyZ3VtZW50cy5sZW5ndGgsbGVmdEluZGV4PS0xLGxlZnRMZW5ndGg9cGFydGlhbHMubGVuZ3RoLGFyZ3M9QXJyYXkobGVmdExlbmd0aCthcmdzTGVuZ3RoKSxmbj10aGlzJiZ0aGlzIT09cm9vdCYmdGhpcyBpbnN0YW5jZW9mIHdyYXBwZXI/Q3RvcjpmdW5jO3doaWxlKCsrbGVmdEluZGV4PGxlZnRMZW5ndGgpYXJnc1tsZWZ0SW5kZXhdPXBhcnRpYWxzW2xlZnRJbmRleF07d2hpbGUoYXJnc0xlbmd0aC0tKWFyZ3NbbGVmdEluZGV4KytdPWFyZ3VtZW50c1srK2FyZ3NJbmRleF07cmV0dXJuIGFwcGx5KGZuLGlzQmluZD90aGlzQXJnOnRoaXMsYXJncyl9cmV0dXJuIHdyYXBwZXJ9ZnVuY3Rpb24gY3JlYXRlUmFuZ2UoZnJvbVJpZ2h0KXtyZXR1cm4gZnVuY3Rpb24oc3RhcnQsZW5kLHN0ZXApe2lmKHN0ZXAmJnR5cGVvZiBzdGVwIT0ibnVtYmVyIiYmaXNJdGVyYXRlZUNhbGwoc3RhcnQsZW5kLHN0ZXApKWVuZD1zdGVwPXVuZGVmaW5lZDtzdGFydD10b0Zpbml0ZShzdGFydCk7aWYoZW5kPT09CnVuZGVmaW5lZCl7ZW5kPXN0YXJ0O3N0YXJ0PTB9ZWxzZSBlbmQ9dG9GaW5pdGUoZW5kKTtzdGVwPXN0ZXA9PT11bmRlZmluZWQ/c3RhcnQ8ZW5kPzE6LTE6dG9GaW5pdGUoc3RlcCk7cmV0dXJuIGJhc2VSYW5nZShzdGFydCxlbmQsc3RlcCxmcm9tUmlnaHQpfX1mdW5jdGlvbiBjcmVhdGVSZWxhdGlvbmFsT3BlcmF0aW9uKG9wZXJhdG9yKXtyZXR1cm4gZnVuY3Rpb24odmFsdWUsb3RoZXIpe2lmKCEodHlwZW9mIHZhbHVlPT0ic3RyaW5nIiYmdHlwZW9mIG90aGVyPT0ic3RyaW5nIikpe3ZhbHVlPXRvTnVtYmVyKHZhbHVlKTtvdGhlcj10b051bWJlcihvdGhlcil9cmV0dXJuIG9wZXJhdG9yKHZhbHVlLG90aGVyKX19ZnVuY3Rpb24gY3JlYXRlUmVjdXJyeShmdW5jLGJpdG1hc2ssd3JhcEZ1bmMscGxhY2Vob2xkZXIsdGhpc0FyZyxwYXJ0aWFscyxob2xkZXJzLGFyZ1BvcyxhcnksYXJpdHkpe3ZhciBpc0N1cnJ5PWJpdG1hc2smV1JBUF9DVVJSWV9GTEFHLG5ld0hvbGRlcnM9aXNDdXJyeT8KaG9sZGVyczp1bmRlZmluZWQsbmV3SG9sZGVyc1JpZ2h0PWlzQ3Vycnk/dW5kZWZpbmVkOmhvbGRlcnMsbmV3UGFydGlhbHM9aXNDdXJyeT9wYXJ0aWFsczp1bmRlZmluZWQsbmV3UGFydGlhbHNSaWdodD1pc0N1cnJ5P3VuZGVmaW5lZDpwYXJ0aWFscztiaXRtYXNrfD1pc0N1cnJ5P1dSQVBfUEFSVElBTF9GTEFHOldSQVBfUEFSVElBTF9SSUdIVF9GTEFHO2JpdG1hc2smPX4oaXNDdXJyeT9XUkFQX1BBUlRJQUxfUklHSFRfRkxBRzpXUkFQX1BBUlRJQUxfRkxBRyk7aWYoIShiaXRtYXNrJldSQVBfQ1VSUllfQk9VTkRfRkxBRykpYml0bWFzayY9fihXUkFQX0JJTkRfRkxBR3xXUkFQX0JJTkRfS0VZX0ZMQUcpO3ZhciBuZXdEYXRhPVtmdW5jLGJpdG1hc2ssdGhpc0FyZyxuZXdQYXJ0aWFscyxuZXdIb2xkZXJzLG5ld1BhcnRpYWxzUmlnaHQsbmV3SG9sZGVyc1JpZ2h0LGFyZ1BvcyxhcnksYXJpdHldO3ZhciByZXN1bHQ9d3JhcEZ1bmMuYXBwbHkodW5kZWZpbmVkLG5ld0RhdGEpO2lmKGlzTGF6aWFibGUoZnVuYykpc2V0RGF0YShyZXN1bHQsCm5ld0RhdGEpO3Jlc3VsdC5wbGFjZWhvbGRlcj1wbGFjZWhvbGRlcjtyZXR1cm4gc2V0V3JhcFRvU3RyaW5nKHJlc3VsdCxmdW5jLGJpdG1hc2spfWZ1bmN0aW9uIGNyZWF0ZVJvdW5kKG1ldGhvZE5hbWUpe3ZhciBmdW5jPU1hdGhbbWV0aG9kTmFtZV07cmV0dXJuIGZ1bmN0aW9uKG51bWJlcixwcmVjaXNpb24pe251bWJlcj10b051bWJlcihudW1iZXIpO3ByZWNpc2lvbj1wcmVjaXNpb249PW51bGw/MDpuYXRpdmVNaW4odG9JbnRlZ2VyKHByZWNpc2lvbiksMjkyKTtpZihwcmVjaXNpb24pe3ZhciBwYWlyPSh0b1N0cmluZyhudW1iZXIpKyJlIikuc3BsaXQoImUiKSx2YWx1ZT1mdW5jKHBhaXJbMF0rImUiKygrcGFpclsxXStwcmVjaXNpb24pKTtwYWlyPSh0b1N0cmluZyh2YWx1ZSkrImUiKS5zcGxpdCgiZSIpO3JldHVybisocGFpclswXSsiZSIrKCtwYWlyWzFdLXByZWNpc2lvbikpfXJldHVybiBmdW5jKG51bWJlcil9fXZhciBjcmVhdGVTZXQ9IShTZXQmJjEvc2V0VG9BcnJheShuZXcgU2V0KFssCi0wXSkpWzFdPT1JTkZJTklUWSk/bm9vcDpmdW5jdGlvbih2YWx1ZXMpe3JldHVybiBuZXcgU2V0KHZhbHVlcyl9O2Z1bmN0aW9uIGNyZWF0ZVRvUGFpcnMoa2V5c0Z1bmMpe3JldHVybiBmdW5jdGlvbihvYmplY3Qpe3ZhciB0YWc9Z2V0VGFnKG9iamVjdCk7aWYodGFnPT1tYXBUYWcpcmV0dXJuIG1hcFRvQXJyYXkob2JqZWN0KTtpZih0YWc9PXNldFRhZylyZXR1cm4gc2V0VG9QYWlycyhvYmplY3QpO3JldHVybiBiYXNlVG9QYWlycyhvYmplY3Qsa2V5c0Z1bmMob2JqZWN0KSl9fWZ1bmN0aW9uIGNyZWF0ZVdyYXAoZnVuYyxiaXRtYXNrLHRoaXNBcmcscGFydGlhbHMsaG9sZGVycyxhcmdQb3MsYXJ5LGFyaXR5KXt2YXIgaXNCaW5kS2V5PWJpdG1hc2smV1JBUF9CSU5EX0tFWV9GTEFHO2lmKCFpc0JpbmRLZXkmJnR5cGVvZiBmdW5jIT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoRlVOQ19FUlJPUl9URVhUKTt2YXIgbGVuZ3RoPXBhcnRpYWxzP3BhcnRpYWxzLmxlbmd0aDoKMDtpZighbGVuZ3RoKXtiaXRtYXNrJj1+KFdSQVBfUEFSVElBTF9GTEFHfFdSQVBfUEFSVElBTF9SSUdIVF9GTEFHKTtwYXJ0aWFscz1ob2xkZXJzPXVuZGVmaW5lZH1hcnk9YXJ5PT09dW5kZWZpbmVkP2FyeTpuYXRpdmVNYXgodG9JbnRlZ2VyKGFyeSksMCk7YXJpdHk9YXJpdHk9PT11bmRlZmluZWQ/YXJpdHk6dG9JbnRlZ2VyKGFyaXR5KTtsZW5ndGgtPWhvbGRlcnM/aG9sZGVycy5sZW5ndGg6MDtpZihiaXRtYXNrJldSQVBfUEFSVElBTF9SSUdIVF9GTEFHKXt2YXIgcGFydGlhbHNSaWdodD1wYXJ0aWFscyxob2xkZXJzUmlnaHQ9aG9sZGVycztwYXJ0aWFscz1ob2xkZXJzPXVuZGVmaW5lZH12YXIgZGF0YT1pc0JpbmRLZXk/dW5kZWZpbmVkOmdldERhdGEoZnVuYyk7dmFyIG5ld0RhdGE9W2Z1bmMsYml0bWFzayx0aGlzQXJnLHBhcnRpYWxzLGhvbGRlcnMscGFydGlhbHNSaWdodCxob2xkZXJzUmlnaHQsYXJnUG9zLGFyeSxhcml0eV07aWYoZGF0YSltZXJnZURhdGEobmV3RGF0YSwKZGF0YSk7ZnVuYz1uZXdEYXRhWzBdO2JpdG1hc2s9bmV3RGF0YVsxXTt0aGlzQXJnPW5ld0RhdGFbMl07cGFydGlhbHM9bmV3RGF0YVszXTtob2xkZXJzPW5ld0RhdGFbNF07YXJpdHk9bmV3RGF0YVs5XT1uZXdEYXRhWzldPT09dW5kZWZpbmVkP2lzQmluZEtleT8wOmZ1bmMubGVuZ3RoOm5hdGl2ZU1heChuZXdEYXRhWzldLWxlbmd0aCwwKTtpZighYXJpdHkmJmJpdG1hc2smKFdSQVBfQ1VSUllfRkxBR3xXUkFQX0NVUlJZX1JJR0hUX0ZMQUcpKWJpdG1hc2smPX4oV1JBUF9DVVJSWV9GTEFHfFdSQVBfQ1VSUllfUklHSFRfRkxBRyk7aWYoIWJpdG1hc2t8fGJpdG1hc2s9PVdSQVBfQklORF9GTEFHKXZhciByZXN1bHQ9Y3JlYXRlQmluZChmdW5jLGJpdG1hc2ssdGhpc0FyZyk7ZWxzZSBpZihiaXRtYXNrPT1XUkFQX0NVUlJZX0ZMQUd8fGJpdG1hc2s9PVdSQVBfQ1VSUllfUklHSFRfRkxBRylyZXN1bHQ9Y3JlYXRlQ3VycnkoZnVuYyxiaXRtYXNrLGFyaXR5KTtlbHNlIGlmKChiaXRtYXNrPT0KV1JBUF9QQVJUSUFMX0ZMQUd8fGJpdG1hc2s9PShXUkFQX0JJTkRfRkxBR3xXUkFQX1BBUlRJQUxfRkxBRykpJiYhaG9sZGVycy5sZW5ndGgpcmVzdWx0PWNyZWF0ZVBhcnRpYWwoZnVuYyxiaXRtYXNrLHRoaXNBcmcscGFydGlhbHMpO2Vsc2UgcmVzdWx0PWNyZWF0ZUh5YnJpZC5hcHBseSh1bmRlZmluZWQsbmV3RGF0YSk7dmFyIHNldHRlcj1kYXRhP2Jhc2VTZXREYXRhOnNldERhdGE7cmV0dXJuIHNldFdyYXBUb1N0cmluZyhzZXR0ZXIocmVzdWx0LG5ld0RhdGEpLGZ1bmMsYml0bWFzayl9ZnVuY3Rpb24gY3VzdG9tRGVmYXVsdHNBc3NpZ25JbihvYmpWYWx1ZSxzcmNWYWx1ZSxrZXksb2JqZWN0KXtpZihvYmpWYWx1ZT09PXVuZGVmaW5lZHx8ZXEob2JqVmFsdWUsb2JqZWN0UHJvdG9ba2V5XSkmJiFoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCxrZXkpKXJldHVybiBzcmNWYWx1ZTtyZXR1cm4gb2JqVmFsdWV9ZnVuY3Rpb24gY3VzdG9tRGVmYXVsdHNNZXJnZShvYmpWYWx1ZSxzcmNWYWx1ZSwKa2V5LG9iamVjdCxzb3VyY2Usc3RhY2spe2lmKGlzT2JqZWN0KG9ialZhbHVlKSYmaXNPYmplY3Qoc3JjVmFsdWUpKXtzdGFjay5zZXQoc3JjVmFsdWUsb2JqVmFsdWUpO2Jhc2VNZXJnZShvYmpWYWx1ZSxzcmNWYWx1ZSx1bmRlZmluZWQsY3VzdG9tRGVmYXVsdHNNZXJnZSxzdGFjayk7c3RhY2tbImRlbGV0ZSJdKHNyY1ZhbHVlKX1yZXR1cm4gb2JqVmFsdWV9ZnVuY3Rpb24gY3VzdG9tT21pdENsb25lKHZhbHVlKXtyZXR1cm4gaXNQbGFpbk9iamVjdCh2YWx1ZSk/dW5kZWZpbmVkOnZhbHVlfWZ1bmN0aW9uIGVxdWFsQXJyYXlzKGFycmF5LG90aGVyLGJpdG1hc2ssY3VzdG9taXplcixlcXVhbEZ1bmMsc3RhY2spe3ZhciBpc1BhcnRpYWw9Yml0bWFzayZDT01QQVJFX1BBUlRJQUxfRkxBRyxhcnJMZW5ndGg9YXJyYXkubGVuZ3RoLG90aExlbmd0aD1vdGhlci5sZW5ndGg7aWYoYXJyTGVuZ3RoIT1vdGhMZW5ndGgmJiEoaXNQYXJ0aWFsJiZvdGhMZW5ndGg+YXJyTGVuZ3RoKSlyZXR1cm4gZmFsc2U7CnZhciBzdGFja2VkPXN0YWNrLmdldChhcnJheSk7aWYoc3RhY2tlZCYmc3RhY2suZ2V0KG90aGVyKSlyZXR1cm4gc3RhY2tlZD09b3RoZXI7dmFyIGluZGV4PS0xLHJlc3VsdD10cnVlLHNlZW49Yml0bWFzayZDT01QQVJFX1VOT1JERVJFRF9GTEFHP25ldyBTZXRDYWNoZTp1bmRlZmluZWQ7c3RhY2suc2V0KGFycmF5LG90aGVyKTtzdGFjay5zZXQob3RoZXIsYXJyYXkpO3doaWxlKCsraW5kZXg8YXJyTGVuZ3RoKXt2YXIgYXJyVmFsdWU9YXJyYXlbaW5kZXhdLG90aFZhbHVlPW90aGVyW2luZGV4XTtpZihjdXN0b21pemVyKXZhciBjb21wYXJlZD1pc1BhcnRpYWw/Y3VzdG9taXplcihvdGhWYWx1ZSxhcnJWYWx1ZSxpbmRleCxvdGhlcixhcnJheSxzdGFjayk6Y3VzdG9taXplcihhcnJWYWx1ZSxvdGhWYWx1ZSxpbmRleCxhcnJheSxvdGhlcixzdGFjayk7aWYoY29tcGFyZWQhPT11bmRlZmluZWQpe2lmKGNvbXBhcmVkKWNvbnRpbnVlO3Jlc3VsdD1mYWxzZTticmVha31pZihzZWVuKXtpZighYXJyYXlTb21lKG90aGVyLApmdW5jdGlvbihvdGhWYWx1ZSxvdGhJbmRleCl7aWYoIWNhY2hlSGFzKHNlZW4sb3RoSW5kZXgpJiYoYXJyVmFsdWU9PT1vdGhWYWx1ZXx8ZXF1YWxGdW5jKGFyclZhbHVlLG90aFZhbHVlLGJpdG1hc2ssY3VzdG9taXplcixzdGFjaykpKXJldHVybiBzZWVuLnB1c2gob3RoSW5kZXgpfSkpe3Jlc3VsdD1mYWxzZTticmVha319ZWxzZSBpZighKGFyclZhbHVlPT09b3RoVmFsdWV8fGVxdWFsRnVuYyhhcnJWYWx1ZSxvdGhWYWx1ZSxiaXRtYXNrLGN1c3RvbWl6ZXIsc3RhY2spKSl7cmVzdWx0PWZhbHNlO2JyZWFrfX1zdGFja1siZGVsZXRlIl0oYXJyYXkpO3N0YWNrWyJkZWxldGUiXShvdGhlcik7cmV0dXJuIHJlc3VsdH1mdW5jdGlvbiBlcXVhbEJ5VGFnKG9iamVjdCxvdGhlcix0YWcsYml0bWFzayxjdXN0b21pemVyLGVxdWFsRnVuYyxzdGFjayl7c3dpdGNoKHRhZyl7Y2FzZSBkYXRhVmlld1RhZzppZihvYmplY3QuYnl0ZUxlbmd0aCE9b3RoZXIuYnl0ZUxlbmd0aHx8b2JqZWN0LmJ5dGVPZmZzZXQhPQpvdGhlci5ieXRlT2Zmc2V0KXJldHVybiBmYWxzZTtvYmplY3Q9b2JqZWN0LmJ1ZmZlcjtvdGhlcj1vdGhlci5idWZmZXI7Y2FzZSBhcnJheUJ1ZmZlclRhZzppZihvYmplY3QuYnl0ZUxlbmd0aCE9b3RoZXIuYnl0ZUxlbmd0aHx8IWVxdWFsRnVuYyhuZXcgVWludDhBcnJheShvYmplY3QpLG5ldyBVaW50OEFycmF5KG90aGVyKSkpcmV0dXJuIGZhbHNlO3JldHVybiB0cnVlO2Nhc2UgYm9vbFRhZzpjYXNlIGRhdGVUYWc6Y2FzZSBudW1iZXJUYWc6cmV0dXJuIGVxKCtvYmplY3QsK290aGVyKTtjYXNlIGVycm9yVGFnOnJldHVybiBvYmplY3QubmFtZT09b3RoZXIubmFtZSYmb2JqZWN0Lm1lc3NhZ2U9PW90aGVyLm1lc3NhZ2U7Y2FzZSByZWdleHBUYWc6Y2FzZSBzdHJpbmdUYWc6cmV0dXJuIG9iamVjdD09b3RoZXIrIiI7Y2FzZSBtYXBUYWc6dmFyIGNvbnZlcnQ9bWFwVG9BcnJheTtjYXNlIHNldFRhZzp2YXIgaXNQYXJ0aWFsPWJpdG1hc2smQ09NUEFSRV9QQVJUSUFMX0ZMQUc7Y29udmVydHx8Cihjb252ZXJ0PXNldFRvQXJyYXkpO2lmKG9iamVjdC5zaXplIT1vdGhlci5zaXplJiYhaXNQYXJ0aWFsKXJldHVybiBmYWxzZTt2YXIgc3RhY2tlZD1zdGFjay5nZXQob2JqZWN0KTtpZihzdGFja2VkKXJldHVybiBzdGFja2VkPT1vdGhlcjtiaXRtYXNrfD1DT01QQVJFX1VOT1JERVJFRF9GTEFHO3N0YWNrLnNldChvYmplY3Qsb3RoZXIpO3ZhciByZXN1bHQ9ZXF1YWxBcnJheXMoY29udmVydChvYmplY3QpLGNvbnZlcnQob3RoZXIpLGJpdG1hc2ssY3VzdG9taXplcixlcXVhbEZ1bmMsc3RhY2spO3N0YWNrWyJkZWxldGUiXShvYmplY3QpO3JldHVybiByZXN1bHQ7Y2FzZSBzeW1ib2xUYWc6aWYoc3ltYm9sVmFsdWVPZilyZXR1cm4gc3ltYm9sVmFsdWVPZi5jYWxsKG9iamVjdCk9PXN5bWJvbFZhbHVlT2YuY2FsbChvdGhlcil9cmV0dXJuIGZhbHNlfWZ1bmN0aW9uIGVxdWFsT2JqZWN0cyhvYmplY3Qsb3RoZXIsYml0bWFzayxjdXN0b21pemVyLGVxdWFsRnVuYyxzdGFjayl7dmFyIGlzUGFydGlhbD0KYml0bWFzayZDT01QQVJFX1BBUlRJQUxfRkxBRyxvYmpQcm9wcz1nZXRBbGxLZXlzKG9iamVjdCksb2JqTGVuZ3RoPW9ialByb3BzLmxlbmd0aCxvdGhQcm9wcz1nZXRBbGxLZXlzKG90aGVyKSxvdGhMZW5ndGg9b3RoUHJvcHMubGVuZ3RoO2lmKG9iakxlbmd0aCE9b3RoTGVuZ3RoJiYhaXNQYXJ0aWFsKXJldHVybiBmYWxzZTt2YXIgaW5kZXg9b2JqTGVuZ3RoO3doaWxlKGluZGV4LS0pe3ZhciBrZXk9b2JqUHJvcHNbaW5kZXhdO2lmKCEoaXNQYXJ0aWFsP2tleSBpbiBvdGhlcjpoYXNPd25Qcm9wZXJ0eS5jYWxsKG90aGVyLGtleSkpKXJldHVybiBmYWxzZX12YXIgc3RhY2tlZD1zdGFjay5nZXQob2JqZWN0KTtpZihzdGFja2VkJiZzdGFjay5nZXQob3RoZXIpKXJldHVybiBzdGFja2VkPT1vdGhlcjt2YXIgcmVzdWx0PXRydWU7c3RhY2suc2V0KG9iamVjdCxvdGhlcik7c3RhY2suc2V0KG90aGVyLG9iamVjdCk7dmFyIHNraXBDdG9yPWlzUGFydGlhbDt3aGlsZSgrK2luZGV4PG9iakxlbmd0aCl7a2V5PQpvYmpQcm9wc1tpbmRleF07dmFyIG9ialZhbHVlPW9iamVjdFtrZXldLG90aFZhbHVlPW90aGVyW2tleV07aWYoY3VzdG9taXplcil2YXIgY29tcGFyZWQ9aXNQYXJ0aWFsP2N1c3RvbWl6ZXIob3RoVmFsdWUsb2JqVmFsdWUsa2V5LG90aGVyLG9iamVjdCxzdGFjayk6Y3VzdG9taXplcihvYmpWYWx1ZSxvdGhWYWx1ZSxrZXksb2JqZWN0LG90aGVyLHN0YWNrKTtpZighKGNvbXBhcmVkPT09dW5kZWZpbmVkP29ialZhbHVlPT09b3RoVmFsdWV8fGVxdWFsRnVuYyhvYmpWYWx1ZSxvdGhWYWx1ZSxiaXRtYXNrLGN1c3RvbWl6ZXIsc3RhY2spOmNvbXBhcmVkKSl7cmVzdWx0PWZhbHNlO2JyZWFrfXNraXBDdG9yfHwoc2tpcEN0b3I9a2V5PT0iY29uc3RydWN0b3IiKX1pZihyZXN1bHQmJiFza2lwQ3Rvcil7dmFyIG9iakN0b3I9b2JqZWN0LmNvbnN0cnVjdG9yLG90aEN0b3I9b3RoZXIuY29uc3RydWN0b3I7aWYob2JqQ3RvciE9b3RoQ3RvciYmKCJjb25zdHJ1Y3RvciJpbiBvYmplY3QmJiJjb25zdHJ1Y3RvciJpbgpvdGhlcikmJiEodHlwZW9mIG9iakN0b3I9PSJmdW5jdGlvbiImJm9iakN0b3IgaW5zdGFuY2VvZiBvYmpDdG9yJiZ0eXBlb2Ygb3RoQ3Rvcj09ImZ1bmN0aW9uIiYmb3RoQ3RvciBpbnN0YW5jZW9mIG90aEN0b3IpKXJlc3VsdD1mYWxzZX1zdGFja1siZGVsZXRlIl0ob2JqZWN0KTtzdGFja1siZGVsZXRlIl0ob3RoZXIpO3JldHVybiByZXN1bHR9ZnVuY3Rpb24gZmxhdFJlc3QoZnVuYyl7cmV0dXJuIHNldFRvU3RyaW5nKG92ZXJSZXN0KGZ1bmMsdW5kZWZpbmVkLGZsYXR0ZW4pLGZ1bmMrIiIpfWZ1bmN0aW9uIGdldEFsbEtleXMob2JqZWN0KXtyZXR1cm4gYmFzZUdldEFsbEtleXMob2JqZWN0LGtleXMsZ2V0U3ltYm9scyl9ZnVuY3Rpb24gZ2V0QWxsS2V5c0luKG9iamVjdCl7cmV0dXJuIGJhc2VHZXRBbGxLZXlzKG9iamVjdCxrZXlzSW4sZ2V0U3ltYm9sc0luKX12YXIgZ2V0RGF0YT0hbWV0YU1hcD9ub29wOmZ1bmN0aW9uKGZ1bmMpe3JldHVybiBtZXRhTWFwLmdldChmdW5jKX07CmZ1bmN0aW9uIGdldEZ1bmNOYW1lKGZ1bmMpe3ZhciByZXN1bHQ9ZnVuYy5uYW1lKyIiLGFycmF5PXJlYWxOYW1lc1tyZXN1bHRdLGxlbmd0aD1oYXNPd25Qcm9wZXJ0eS5jYWxsKHJlYWxOYW1lcyxyZXN1bHQpP2FycmF5Lmxlbmd0aDowO3doaWxlKGxlbmd0aC0tKXt2YXIgZGF0YT1hcnJheVtsZW5ndGhdLG90aGVyRnVuYz1kYXRhLmZ1bmM7aWYob3RoZXJGdW5jPT1udWxsfHxvdGhlckZ1bmM9PWZ1bmMpcmV0dXJuIGRhdGEubmFtZX1yZXR1cm4gcmVzdWx0fWZ1bmN0aW9uIGdldEhvbGRlcihmdW5jKXt2YXIgb2JqZWN0PWhhc093blByb3BlcnR5LmNhbGwobG9kYXNoLCJwbGFjZWhvbGRlciIpP2xvZGFzaDpmdW5jO3JldHVybiBvYmplY3QucGxhY2Vob2xkZXJ9ZnVuY3Rpb24gZ2V0SXRlcmF0ZWUoKXt2YXIgcmVzdWx0PWxvZGFzaC5pdGVyYXRlZXx8aXRlcmF0ZWU7cmVzdWx0PXJlc3VsdD09PWl0ZXJhdGVlP2Jhc2VJdGVyYXRlZTpyZXN1bHQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/CnJlc3VsdChhcmd1bWVudHNbMF0sYXJndW1lbnRzWzFdKTpyZXN1bHR9ZnVuY3Rpb24gZ2V0TWFwRGF0YShtYXAsa2V5KXt2YXIgZGF0YT1tYXAuX19kYXRhX187cmV0dXJuIGlzS2V5YWJsZShrZXkpP2RhdGFbdHlwZW9mIGtleT09InN0cmluZyI/InN0cmluZyI6Imhhc2giXTpkYXRhLm1hcH1mdW5jdGlvbiBnZXRNYXRjaERhdGEob2JqZWN0KXt2YXIgcmVzdWx0PWtleXMob2JqZWN0KSxsZW5ndGg9cmVzdWx0Lmxlbmd0aDt3aGlsZShsZW5ndGgtLSl7dmFyIGtleT1yZXN1bHRbbGVuZ3RoXSx2YWx1ZT1vYmplY3Rba2V5XTtyZXN1bHRbbGVuZ3RoXT1ba2V5LHZhbHVlLGlzU3RyaWN0Q29tcGFyYWJsZSh2YWx1ZSldfXJldHVybiByZXN1bHR9ZnVuY3Rpb24gZ2V0TmF0aXZlKG9iamVjdCxrZXkpe3ZhciB2YWx1ZT1nZXRWYWx1ZShvYmplY3Qsa2V5KTtyZXR1cm4gYmFzZUlzTmF0aXZlKHZhbHVlKT92YWx1ZTp1bmRlZmluZWR9ZnVuY3Rpb24gZ2V0UmF3VGFnKHZhbHVlKXt2YXIgaXNPd249Cmhhc093blByb3BlcnR5LmNhbGwodmFsdWUsc3ltVG9TdHJpbmdUYWcpLHRhZz12YWx1ZVtzeW1Ub1N0cmluZ1RhZ107dHJ5e3ZhbHVlW3N5bVRvU3RyaW5nVGFnXT11bmRlZmluZWQ7dmFyIHVubWFza2VkPXRydWV9Y2F0Y2goZSl7fXZhciByZXN1bHQ9bmF0aXZlT2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSk7aWYodW5tYXNrZWQpaWYoaXNPd24pdmFsdWVbc3ltVG9TdHJpbmdUYWddPXRhZztlbHNlIGRlbGV0ZSB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ107cmV0dXJuIHJlc3VsdH12YXIgZ2V0U3ltYm9scz0hbmF0aXZlR2V0U3ltYm9scz9zdHViQXJyYXk6ZnVuY3Rpb24ob2JqZWN0KXtpZihvYmplY3Q9PW51bGwpcmV0dXJuW107b2JqZWN0PU9iamVjdChvYmplY3QpO3JldHVybiBhcnJheUZpbHRlcihuYXRpdmVHZXRTeW1ib2xzKG9iamVjdCksZnVuY3Rpb24oc3ltYm9sKXtyZXR1cm4gcHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChvYmplY3Qsc3ltYm9sKX0pfTt2YXIgZ2V0U3ltYm9sc0luPQohbmF0aXZlR2V0U3ltYm9scz9zdHViQXJyYXk6ZnVuY3Rpb24ob2JqZWN0KXt2YXIgcmVzdWx0PVtdO3doaWxlKG9iamVjdCl7YXJyYXlQdXNoKHJlc3VsdCxnZXRTeW1ib2xzKG9iamVjdCkpO29iamVjdD1nZXRQcm90b3R5cGUob2JqZWN0KX1yZXR1cm4gcmVzdWx0fTt2YXIgZ2V0VGFnPWJhc2VHZXRUYWc7aWYoRGF0YVZpZXcmJmdldFRhZyhuZXcgRGF0YVZpZXcobmV3IEFycmF5QnVmZmVyKDEpKSkhPWRhdGFWaWV3VGFnfHxNYXAmJmdldFRhZyhuZXcgTWFwKSE9bWFwVGFnfHxQcm9taXNlJiZnZXRUYWcoUHJvbWlzZS5yZXNvbHZlKCkpIT1wcm9taXNlVGFnfHxTZXQmJmdldFRhZyhuZXcgU2V0KSE9c2V0VGFnfHxXZWFrTWFwJiZnZXRUYWcobmV3IFdlYWtNYXApIT13ZWFrTWFwVGFnKWdldFRhZz1mdW5jdGlvbih2YWx1ZSl7dmFyIHJlc3VsdD1iYXNlR2V0VGFnKHZhbHVlKSxDdG9yPXJlc3VsdD09b2JqZWN0VGFnP3ZhbHVlLmNvbnN0cnVjdG9yOnVuZGVmaW5lZCxjdG9yU3RyaW5nPQpDdG9yP3RvU291cmNlKEN0b3IpOiIiO2lmKGN0b3JTdHJpbmcpc3dpdGNoKGN0b3JTdHJpbmcpe2Nhc2UgZGF0YVZpZXdDdG9yU3RyaW5nOnJldHVybiBkYXRhVmlld1RhZztjYXNlIG1hcEN0b3JTdHJpbmc6cmV0dXJuIG1hcFRhZztjYXNlIHByb21pc2VDdG9yU3RyaW5nOnJldHVybiBwcm9taXNlVGFnO2Nhc2Ugc2V0Q3RvclN0cmluZzpyZXR1cm4gc2V0VGFnO2Nhc2Ugd2Vha01hcEN0b3JTdHJpbmc6cmV0dXJuIHdlYWtNYXBUYWd9cmV0dXJuIHJlc3VsdH07ZnVuY3Rpb24gZ2V0VmlldyhzdGFydCxlbmQsdHJhbnNmb3Jtcyl7dmFyIGluZGV4PS0xLGxlbmd0aD10cmFuc2Zvcm1zLmxlbmd0aDt3aGlsZSgrK2luZGV4PGxlbmd0aCl7dmFyIGRhdGE9dHJhbnNmb3Jtc1tpbmRleF0sc2l6ZT1kYXRhLnNpemU7c3dpdGNoKGRhdGEudHlwZSl7Y2FzZSAiZHJvcCI6c3RhcnQrPXNpemU7YnJlYWs7Y2FzZSAiZHJvcFJpZ2h0IjplbmQtPXNpemU7YnJlYWs7Y2FzZSAidGFrZSI6ZW5kPW5hdGl2ZU1pbihlbmQsCnN0YXJ0K3NpemUpO2JyZWFrO2Nhc2UgInRha2VSaWdodCI6c3RhcnQ9bmF0aXZlTWF4KHN0YXJ0LGVuZC1zaXplKTticmVha319cmV0dXJueyJzdGFydCI6c3RhcnQsImVuZCI6ZW5kfX1mdW5jdGlvbiBnZXRXcmFwRGV0YWlscyhzb3VyY2Upe3ZhciBtYXRjaD1zb3VyY2UubWF0Y2gocmVXcmFwRGV0YWlscyk7cmV0dXJuIG1hdGNoP21hdGNoWzFdLnNwbGl0KHJlU3BsaXREZXRhaWxzKTpbXX1mdW5jdGlvbiBoYXNQYXRoKG9iamVjdCxwYXRoLGhhc0Z1bmMpe3BhdGg9Y2FzdFBhdGgocGF0aCxvYmplY3QpO3ZhciBpbmRleD0tMSxsZW5ndGg9cGF0aC5sZW5ndGgscmVzdWx0PWZhbHNlO3doaWxlKCsraW5kZXg8bGVuZ3RoKXt2YXIga2V5PXRvS2V5KHBhdGhbaW5kZXhdKTtpZighKHJlc3VsdD1vYmplY3QhPW51bGwmJmhhc0Z1bmMob2JqZWN0LGtleSkpKWJyZWFrO29iamVjdD1vYmplY3Rba2V5XX1pZihyZXN1bHR8fCsraW5kZXghPWxlbmd0aClyZXR1cm4gcmVzdWx0O2xlbmd0aD0Kb2JqZWN0PT1udWxsPzA6b2JqZWN0Lmxlbmd0aDtyZXR1cm4hIWxlbmd0aCYmaXNMZW5ndGgobGVuZ3RoKSYmaXNJbmRleChrZXksbGVuZ3RoKSYmKGlzQXJyYXkob2JqZWN0KXx8aXNBcmd1bWVudHMob2JqZWN0KSl9ZnVuY3Rpb24gaW5pdENsb25lQXJyYXkoYXJyYXkpe3ZhciBsZW5ndGg9YXJyYXkubGVuZ3RoLHJlc3VsdD1uZXcgYXJyYXkuY29uc3RydWN0b3IobGVuZ3RoKTtpZihsZW5ndGgmJnR5cGVvZiBhcnJheVswXT09InN0cmluZyImJmhhc093blByb3BlcnR5LmNhbGwoYXJyYXksImluZGV4Iikpe3Jlc3VsdC5pbmRleD1hcnJheS5pbmRleDtyZXN1bHQuaW5wdXQ9YXJyYXkuaW5wdXR9cmV0dXJuIHJlc3VsdH1mdW5jdGlvbiBpbml0Q2xvbmVPYmplY3Qob2JqZWN0KXtyZXR1cm4gdHlwZW9mIG9iamVjdC5jb25zdHJ1Y3Rvcj09ImZ1bmN0aW9uIiYmIWlzUHJvdG90eXBlKG9iamVjdCk/YmFzZUNyZWF0ZShnZXRQcm90b3R5cGUob2JqZWN0KSk6e319ZnVuY3Rpb24gaW5pdENsb25lQnlUYWcob2JqZWN0LAp0YWcsaXNEZWVwKXt2YXIgQ3Rvcj1vYmplY3QuY29uc3RydWN0b3I7c3dpdGNoKHRhZyl7Y2FzZSBhcnJheUJ1ZmZlclRhZzpyZXR1cm4gY2xvbmVBcnJheUJ1ZmZlcihvYmplY3QpO2Nhc2UgYm9vbFRhZzpjYXNlIGRhdGVUYWc6cmV0dXJuIG5ldyBDdG9yKCtvYmplY3QpO2Nhc2UgZGF0YVZpZXdUYWc6cmV0dXJuIGNsb25lRGF0YVZpZXcob2JqZWN0LGlzRGVlcCk7Y2FzZSBmbG9hdDMyVGFnOmNhc2UgZmxvYXQ2NFRhZzpjYXNlIGludDhUYWc6Y2FzZSBpbnQxNlRhZzpjYXNlIGludDMyVGFnOmNhc2UgdWludDhUYWc6Y2FzZSB1aW50OENsYW1wZWRUYWc6Y2FzZSB1aW50MTZUYWc6Y2FzZSB1aW50MzJUYWc6cmV0dXJuIGNsb25lVHlwZWRBcnJheShvYmplY3QsaXNEZWVwKTtjYXNlIG1hcFRhZzpyZXR1cm4gbmV3IEN0b3I7Y2FzZSBudW1iZXJUYWc6Y2FzZSBzdHJpbmdUYWc6cmV0dXJuIG5ldyBDdG9yKG9iamVjdCk7Y2FzZSByZWdleHBUYWc6cmV0dXJuIGNsb25lUmVnRXhwKG9iamVjdCk7CmNhc2Ugc2V0VGFnOnJldHVybiBuZXcgQ3RvcjtjYXNlIHN5bWJvbFRhZzpyZXR1cm4gY2xvbmVTeW1ib2wob2JqZWN0KX19ZnVuY3Rpb24gaW5zZXJ0V3JhcERldGFpbHMoc291cmNlLGRldGFpbHMpe3ZhciBsZW5ndGg9ZGV0YWlscy5sZW5ndGg7aWYoIWxlbmd0aClyZXR1cm4gc291cmNlO3ZhciBsYXN0SW5kZXg9bGVuZ3RoLTE7ZGV0YWlsc1tsYXN0SW5kZXhdPShsZW5ndGg+MT8iXHgyNiAiOiIiKStkZXRhaWxzW2xhc3RJbmRleF07ZGV0YWlscz1kZXRhaWxzLmpvaW4obGVuZ3RoPjI/IiwgIjoiICIpO3JldHVybiBzb3VyY2UucmVwbGFjZShyZVdyYXBDb21tZW50LCJ7XG4vKiBbd3JhcHBlZCB3aXRoICIrZGV0YWlscysiXSAqL1xuIil9ZnVuY3Rpb24gaXNGbGF0dGVuYWJsZSh2YWx1ZSl7cmV0dXJuIGlzQXJyYXkodmFsdWUpfHxpc0FyZ3VtZW50cyh2YWx1ZSl8fCEhKHNwcmVhZGFibGVTeW1ib2wmJnZhbHVlJiZ2YWx1ZVtzcHJlYWRhYmxlU3ltYm9sXSl9ZnVuY3Rpb24gaXNJbmRleCh2YWx1ZSwKbGVuZ3RoKXt2YXIgdHlwZT10eXBlb2YgdmFsdWU7bGVuZ3RoPWxlbmd0aD09bnVsbD9NQVhfU0FGRV9JTlRFR0VSOmxlbmd0aDtyZXR1cm4hIWxlbmd0aCYmKHR5cGU9PSJudW1iZXIifHx0eXBlIT0ic3ltYm9sIiYmcmVJc1VpbnQudGVzdCh2YWx1ZSkpJiYodmFsdWU+LTEmJnZhbHVlJTE9PTAmJnZhbHVlPGxlbmd0aCl9ZnVuY3Rpb24gaXNJdGVyYXRlZUNhbGwodmFsdWUsaW5kZXgsb2JqZWN0KXtpZighaXNPYmplY3Qob2JqZWN0KSlyZXR1cm4gZmFsc2U7dmFyIHR5cGU9dHlwZW9mIGluZGV4O2lmKHR5cGU9PSJudW1iZXIiP2lzQXJyYXlMaWtlKG9iamVjdCkmJmlzSW5kZXgoaW5kZXgsb2JqZWN0Lmxlbmd0aCk6dHlwZT09InN0cmluZyImJmluZGV4IGluIG9iamVjdClyZXR1cm4gZXEob2JqZWN0W2luZGV4XSx2YWx1ZSk7cmV0dXJuIGZhbHNlfWZ1bmN0aW9uIGlzS2V5KHZhbHVlLG9iamVjdCl7aWYoaXNBcnJheSh2YWx1ZSkpcmV0dXJuIGZhbHNlO3ZhciB0eXBlPXR5cGVvZiB2YWx1ZTsKaWYodHlwZT09Im51bWJlciJ8fHR5cGU9PSJzeW1ib2wifHx0eXBlPT0iYm9vbGVhbiJ8fHZhbHVlPT1udWxsfHxpc1N5bWJvbCh2YWx1ZSkpcmV0dXJuIHRydWU7cmV0dXJuIHJlSXNQbGFpblByb3AudGVzdCh2YWx1ZSl8fCFyZUlzRGVlcFByb3AudGVzdCh2YWx1ZSl8fG9iamVjdCE9bnVsbCYmdmFsdWUgaW4gT2JqZWN0KG9iamVjdCl9ZnVuY3Rpb24gaXNLZXlhYmxlKHZhbHVlKXt2YXIgdHlwZT10eXBlb2YgdmFsdWU7cmV0dXJuIHR5cGU9PSJzdHJpbmcifHx0eXBlPT0ibnVtYmVyInx8dHlwZT09InN5bWJvbCJ8fHR5cGU9PSJib29sZWFuIj92YWx1ZSE9PSJfX3Byb3RvX18iOnZhbHVlPT09bnVsbH1mdW5jdGlvbiBpc0xhemlhYmxlKGZ1bmMpe3ZhciBmdW5jTmFtZT1nZXRGdW5jTmFtZShmdW5jKSxvdGhlcj1sb2Rhc2hbZnVuY05hbWVdO2lmKHR5cGVvZiBvdGhlciE9ImZ1bmN0aW9uInx8IShmdW5jTmFtZSBpbiBMYXp5V3JhcHBlci5wcm90b3R5cGUpKXJldHVybiBmYWxzZTsKaWYoZnVuYz09PW90aGVyKXJldHVybiB0cnVlO3ZhciBkYXRhPWdldERhdGEob3RoZXIpO3JldHVybiEhZGF0YSYmZnVuYz09PWRhdGFbMF19ZnVuY3Rpb24gaXNNYXNrZWQoZnVuYyl7cmV0dXJuISFtYXNrU3JjS2V5JiZtYXNrU3JjS2V5IGluIGZ1bmN9dmFyIGlzTWFza2FibGU9Y29yZUpzRGF0YT9pc0Z1bmN0aW9uOnN0dWJGYWxzZTtmdW5jdGlvbiBpc1Byb3RvdHlwZSh2YWx1ZSl7dmFyIEN0b3I9dmFsdWUmJnZhbHVlLmNvbnN0cnVjdG9yLHByb3RvPXR5cGVvZiBDdG9yPT0iZnVuY3Rpb24iJiZDdG9yLnByb3RvdHlwZXx8b2JqZWN0UHJvdG87cmV0dXJuIHZhbHVlPT09cHJvdG99ZnVuY3Rpb24gaXNTdHJpY3RDb21wYXJhYmxlKHZhbHVlKXtyZXR1cm4gdmFsdWU9PT12YWx1ZSYmIWlzT2JqZWN0KHZhbHVlKX1mdW5jdGlvbiBtYXRjaGVzU3RyaWN0Q29tcGFyYWJsZShrZXksc3JjVmFsdWUpe3JldHVybiBmdW5jdGlvbihvYmplY3Qpe2lmKG9iamVjdD09bnVsbClyZXR1cm4gZmFsc2U7CnJldHVybiBvYmplY3Rba2V5XT09PXNyY1ZhbHVlJiYoc3JjVmFsdWUhPT11bmRlZmluZWR8fGtleSBpbiBPYmplY3Qob2JqZWN0KSl9fWZ1bmN0aW9uIG1lbW9pemVDYXBwZWQoZnVuYyl7dmFyIHJlc3VsdD1tZW1vaXplKGZ1bmMsZnVuY3Rpb24oa2V5KXtpZihjYWNoZS5zaXplPT09TUFYX01FTU9JWkVfU0laRSljYWNoZS5jbGVhcigpO3JldHVybiBrZXl9KTt2YXIgY2FjaGU9cmVzdWx0LmNhY2hlO3JldHVybiByZXN1bHR9ZnVuY3Rpb24gbWVyZ2VEYXRhKGRhdGEsc291cmNlKXt2YXIgYml0bWFzaz1kYXRhWzFdLHNyY0JpdG1hc2s9c291cmNlWzFdLG5ld0JpdG1hc2s9Yml0bWFza3xzcmNCaXRtYXNrLGlzQ29tbW9uPW5ld0JpdG1hc2s8KFdSQVBfQklORF9GTEFHfFdSQVBfQklORF9LRVlfRkxBR3xXUkFQX0FSWV9GTEFHKTt2YXIgaXNDb21ibz1zcmNCaXRtYXNrPT1XUkFQX0FSWV9GTEFHJiZiaXRtYXNrPT1XUkFQX0NVUlJZX0ZMQUd8fHNyY0JpdG1hc2s9PVdSQVBfQVJZX0ZMQUcmJgpiaXRtYXNrPT1XUkFQX1JFQVJHX0ZMQUcmJmRhdGFbN10ubGVuZ3RoPD1zb3VyY2VbOF18fHNyY0JpdG1hc2s9PShXUkFQX0FSWV9GTEFHfFdSQVBfUkVBUkdfRkxBRykmJnNvdXJjZVs3XS5sZW5ndGg8PXNvdXJjZVs4XSYmYml0bWFzaz09V1JBUF9DVVJSWV9GTEFHO2lmKCEoaXNDb21tb258fGlzQ29tYm8pKXJldHVybiBkYXRhO2lmKHNyY0JpdG1hc2smV1JBUF9CSU5EX0ZMQUcpe2RhdGFbMl09c291cmNlWzJdO25ld0JpdG1hc2t8PWJpdG1hc2smV1JBUF9CSU5EX0ZMQUc/MDpXUkFQX0NVUlJZX0JPVU5EX0ZMQUd9dmFyIHZhbHVlPXNvdXJjZVszXTtpZih2YWx1ZSl7dmFyIHBhcnRpYWxzPWRhdGFbM107ZGF0YVszXT1wYXJ0aWFscz9jb21wb3NlQXJncyhwYXJ0aWFscyx2YWx1ZSxzb3VyY2VbNF0pOnZhbHVlO2RhdGFbNF09cGFydGlhbHM/cmVwbGFjZUhvbGRlcnMoZGF0YVszXSxQTEFDRUhPTERFUik6c291cmNlWzRdfXZhbHVlPXNvdXJjZVs1XTtpZih2YWx1ZSl7cGFydGlhbHM9CmRhdGFbNV07ZGF0YVs1XT1wYXJ0aWFscz9jb21wb3NlQXJnc1JpZ2h0KHBhcnRpYWxzLHZhbHVlLHNvdXJjZVs2XSk6dmFsdWU7ZGF0YVs2XT1wYXJ0aWFscz9yZXBsYWNlSG9sZGVycyhkYXRhWzVdLFBMQUNFSE9MREVSKTpzb3VyY2VbNl19dmFsdWU9c291cmNlWzddO2lmKHZhbHVlKWRhdGFbN109dmFsdWU7aWYoc3JjQml0bWFzayZXUkFQX0FSWV9GTEFHKWRhdGFbOF09ZGF0YVs4XT09bnVsbD9zb3VyY2VbOF06bmF0aXZlTWluKGRhdGFbOF0sc291cmNlWzhdKTtpZihkYXRhWzldPT1udWxsKWRhdGFbOV09c291cmNlWzldO2RhdGFbMF09c291cmNlWzBdO2RhdGFbMV09bmV3Qml0bWFzaztyZXR1cm4gZGF0YX1mdW5jdGlvbiBuYXRpdmVLZXlzSW4ob2JqZWN0KXt2YXIgcmVzdWx0PVtdO2lmKG9iamVjdCE9bnVsbClmb3IodmFyIGtleSBpbiBPYmplY3Qob2JqZWN0KSlyZXN1bHQucHVzaChrZXkpO3JldHVybiByZXN1bHR9ZnVuY3Rpb24gb2JqZWN0VG9TdHJpbmcodmFsdWUpe3JldHVybiBuYXRpdmVPYmplY3RUb1N0cmluZy5jYWxsKHZhbHVlKX0KZnVuY3Rpb24gb3ZlclJlc3QoZnVuYyxzdGFydCx0cmFuc2Zvcm0pe3N0YXJ0PW5hdGl2ZU1heChzdGFydD09PXVuZGVmaW5lZD9mdW5jLmxlbmd0aC0xOnN0YXJ0LDApO3JldHVybiBmdW5jdGlvbigpe3ZhciBhcmdzPWFyZ3VtZW50cyxpbmRleD0tMSxsZW5ndGg9bmF0aXZlTWF4KGFyZ3MubGVuZ3RoLXN0YXJ0LDApLGFycmF5PUFycmF5KGxlbmd0aCk7d2hpbGUoKytpbmRleDxsZW5ndGgpYXJyYXlbaW5kZXhdPWFyZ3Nbc3RhcnQraW5kZXhdO2luZGV4PS0xO3ZhciBvdGhlckFyZ3M9QXJyYXkoc3RhcnQrMSk7d2hpbGUoKytpbmRleDxzdGFydClvdGhlckFyZ3NbaW5kZXhdPWFyZ3NbaW5kZXhdO290aGVyQXJnc1tzdGFydF09dHJhbnNmb3JtKGFycmF5KTtyZXR1cm4gYXBwbHkoZnVuYyx0aGlzLG90aGVyQXJncyl9fWZ1bmN0aW9uIHBhcmVudChvYmplY3QscGF0aCl7cmV0dXJuIHBhdGgubGVuZ3RoPDI/b2JqZWN0OmJhc2VHZXQob2JqZWN0LGJhc2VTbGljZShwYXRoLDAsLTEpKX0KZnVuY3Rpb24gcmVvcmRlcihhcnJheSxpbmRleGVzKXt2YXIgYXJyTGVuZ3RoPWFycmF5Lmxlbmd0aCxsZW5ndGg9bmF0aXZlTWluKGluZGV4ZXMubGVuZ3RoLGFyckxlbmd0aCksb2xkQXJyYXk9Y29weUFycmF5KGFycmF5KTt3aGlsZShsZW5ndGgtLSl7dmFyIGluZGV4PWluZGV4ZXNbbGVuZ3RoXTthcnJheVtsZW5ndGhdPWlzSW5kZXgoaW5kZXgsYXJyTGVuZ3RoKT9vbGRBcnJheVtpbmRleF06dW5kZWZpbmVkfXJldHVybiBhcnJheX12YXIgc2V0RGF0YT1zaG9ydE91dChiYXNlU2V0RGF0YSk7dmFyIHNldFRpbWVvdXQ9Y3R4U2V0VGltZW91dHx8ZnVuY3Rpb24oZnVuYyx3YWl0KXtyZXR1cm4gcm9vdC5zZXRUaW1lb3V0KGZ1bmMsd2FpdCl9O3ZhciBzZXRUb1N0cmluZz1zaG9ydE91dChiYXNlU2V0VG9TdHJpbmcpO2Z1bmN0aW9uIHNldFdyYXBUb1N0cmluZyh3cmFwcGVyLHJlZmVyZW5jZSxiaXRtYXNrKXt2YXIgc291cmNlPXJlZmVyZW5jZSsiIjtyZXR1cm4gc2V0VG9TdHJpbmcod3JhcHBlciwKaW5zZXJ0V3JhcERldGFpbHMoc291cmNlLHVwZGF0ZVdyYXBEZXRhaWxzKGdldFdyYXBEZXRhaWxzKHNvdXJjZSksYml0bWFzaykpKX1mdW5jdGlvbiBzaG9ydE91dChmdW5jKXt2YXIgY291bnQ9MCxsYXN0Q2FsbGVkPTA7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHN0YW1wPW5hdGl2ZU5vdygpLHJlbWFpbmluZz1IT1RfU1BBTi0oc3RhbXAtbGFzdENhbGxlZCk7bGFzdENhbGxlZD1zdGFtcDtpZihyZW1haW5pbmc+MCl7aWYoKytjb3VudD49SE9UX0NPVU5UKXJldHVybiBhcmd1bWVudHNbMF19ZWxzZSBjb3VudD0wO3JldHVybiBmdW5jLmFwcGx5KHVuZGVmaW5lZCxhcmd1bWVudHMpfX1mdW5jdGlvbiBzaHVmZmxlU2VsZihhcnJheSxzaXplKXt2YXIgaW5kZXg9LTEsbGVuZ3RoPWFycmF5Lmxlbmd0aCxsYXN0SW5kZXg9bGVuZ3RoLTE7c2l6ZT1zaXplPT09dW5kZWZpbmVkP2xlbmd0aDpzaXplO3doaWxlKCsraW5kZXg8c2l6ZSl7dmFyIHJhbmQ9YmFzZVJhbmRvbShpbmRleCxsYXN0SW5kZXgpLAp2YWx1ZT1hcnJheVtyYW5kXTthcnJheVtyYW5kXT1hcnJheVtpbmRleF07YXJyYXlbaW5kZXhdPXZhbHVlfWFycmF5Lmxlbmd0aD1zaXplO3JldHVybiBhcnJheX12YXIgc3RyaW5nVG9QYXRoPW1lbW9pemVDYXBwZWQoZnVuY3Rpb24oc3RyaW5nKXt2YXIgcmVzdWx0PVtdO2lmKHN0cmluZy5jaGFyQ29kZUF0KDApPT09NDYpcmVzdWx0LnB1c2goIiIpO3N0cmluZy5yZXBsYWNlKHJlUHJvcE5hbWUsZnVuY3Rpb24obWF0Y2gsbnVtYmVyLHF1b3RlLHN1YlN0cmluZyl7cmVzdWx0LnB1c2gocXVvdGU/c3ViU3RyaW5nLnJlcGxhY2UocmVFc2NhcGVDaGFyLCIkMSIpOm51bWJlcnx8bWF0Y2gpfSk7cmV0dXJuIHJlc3VsdH0pO2Z1bmN0aW9uIHRvS2V5KHZhbHVlKXtpZih0eXBlb2YgdmFsdWU9PSJzdHJpbmcifHxpc1N5bWJvbCh2YWx1ZSkpcmV0dXJuIHZhbHVlO3ZhciByZXN1bHQ9dmFsdWUrIiI7cmV0dXJuIHJlc3VsdD09IjAiJiYxL3ZhbHVlPT0tSU5GSU5JVFk/Ii0wIjpyZXN1bHR9CmZ1bmN0aW9uIHRvU291cmNlKGZ1bmMpe2lmKGZ1bmMhPW51bGwpe3RyeXtyZXR1cm4gZnVuY1RvU3RyaW5nLmNhbGwoZnVuYyl9Y2F0Y2goZSl7fXRyeXtyZXR1cm4gZnVuYysiIn1jYXRjaChlJDApe319cmV0dXJuIiJ9ZnVuY3Rpb24gdXBkYXRlV3JhcERldGFpbHMoZGV0YWlscyxiaXRtYXNrKXthcnJheUVhY2god3JhcEZsYWdzLGZ1bmN0aW9uKHBhaXIpe3ZhciB2YWx1ZT0iXy4iK3BhaXJbMF07aWYoYml0bWFzayZwYWlyWzFdJiYhYXJyYXlJbmNsdWRlcyhkZXRhaWxzLHZhbHVlKSlkZXRhaWxzLnB1c2godmFsdWUpfSk7cmV0dXJuIGRldGFpbHMuc29ydCgpfWZ1bmN0aW9uIHdyYXBwZXJDbG9uZSh3cmFwcGVyKXtpZih3cmFwcGVyIGluc3RhbmNlb2YgTGF6eVdyYXBwZXIpcmV0dXJuIHdyYXBwZXIuY2xvbmUoKTt2YXIgcmVzdWx0PW5ldyBMb2Rhc2hXcmFwcGVyKHdyYXBwZXIuX193cmFwcGVkX18sd3JhcHBlci5fX2NoYWluX18pO3Jlc3VsdC5fX2FjdGlvbnNfXz1jb3B5QXJyYXkod3JhcHBlci5fX2FjdGlvbnNfXyk7CnJlc3VsdC5fX2luZGV4X189d3JhcHBlci5fX2luZGV4X187cmVzdWx0Ll9fdmFsdWVzX189d3JhcHBlci5fX3ZhbHVlc19fO3JldHVybiByZXN1bHR9ZnVuY3Rpb24gY2h1bmsoYXJyYXksc2l6ZSxndWFyZCl7aWYoZ3VhcmQ/aXNJdGVyYXRlZUNhbGwoYXJyYXksc2l6ZSxndWFyZCk6c2l6ZT09PXVuZGVmaW5lZClzaXplPTE7ZWxzZSBzaXplPW5hdGl2ZU1heCh0b0ludGVnZXIoc2l6ZSksMCk7dmFyIGxlbmd0aD1hcnJheT09bnVsbD8wOmFycmF5Lmxlbmd0aDtpZighbGVuZ3RofHxzaXplPDEpcmV0dXJuW107dmFyIGluZGV4PTAscmVzSW5kZXg9MCxyZXN1bHQ9QXJyYXkobmF0aXZlQ2VpbChsZW5ndGgvc2l6ZSkpO3doaWxlKGluZGV4PGxlbmd0aClyZXN1bHRbcmVzSW5kZXgrK109YmFzZVNsaWNlKGFycmF5LGluZGV4LGluZGV4Kz1zaXplKTtyZXR1cm4gcmVzdWx0fWZ1bmN0aW9uIGNvbXBhY3QoYXJyYXkpe3ZhciBpbmRleD0tMSxsZW5ndGg9YXJyYXk9PW51bGw/MDphcnJheS5sZW5ndGgsCnJlc0luZGV4PTAscmVzdWx0PVtdO3doaWxlKCsraW5kZXg8bGVuZ3RoKXt2YXIgdmFsdWU9YXJyYXlbaW5kZXhdO2lmKHZhbHVlKXJlc3VsdFtyZXNJbmRleCsrXT12YWx1ZX1yZXR1cm4gcmVzdWx0fWZ1bmN0aW9uIGNvbmNhdCgpe3ZhciBsZW5ndGg9YXJndW1lbnRzLmxlbmd0aDtpZighbGVuZ3RoKXJldHVybltdO3ZhciBhcmdzPUFycmF5KGxlbmd0aC0xKSxhcnJheT1hcmd1bWVudHNbMF0saW5kZXg9bGVuZ3RoO3doaWxlKGluZGV4LS0pYXJnc1tpbmRleC0xXT1hcmd1bWVudHNbaW5kZXhdO3JldHVybiBhcnJheVB1c2goaXNBcnJheShhcnJheSk/Y29weUFycmF5KGFycmF5KTpbYXJyYXldLGJhc2VGbGF0dGVuKGFyZ3MsMSkpfXZhciBkaWZmZXJlbmNlPWJhc2VSZXN0KGZ1bmN0aW9uKGFycmF5LHZhbHVlcyl7cmV0dXJuIGlzQXJyYXlMaWtlT2JqZWN0KGFycmF5KT9iYXNlRGlmZmVyZW5jZShhcnJheSxiYXNlRmxhdHRlbih2YWx1ZXMsMSxpc0FycmF5TGlrZU9iamVjdCx0cnVlKSk6CltdfSk7dmFyIGRpZmZlcmVuY2VCeT1iYXNlUmVzdChmdW5jdGlvbihhcnJheSx2YWx1ZXMpe3ZhciBpdGVyYXRlZT1sYXN0KHZhbHVlcyk7aWYoaXNBcnJheUxpa2VPYmplY3QoaXRlcmF0ZWUpKWl0ZXJhdGVlPXVuZGVmaW5lZDtyZXR1cm4gaXNBcnJheUxpa2VPYmplY3QoYXJyYXkpP2Jhc2VEaWZmZXJlbmNlKGFycmF5LGJhc2VGbGF0dGVuKHZhbHVlcywxLGlzQXJyYXlMaWtlT2JqZWN0LHRydWUpLGdldEl0ZXJhdGVlKGl0ZXJhdGVlLDIpKTpbXX0pO3ZhciBkaWZmZXJlbmNlV2l0aD1iYXNlUmVzdChmdW5jdGlvbihhcnJheSx2YWx1ZXMpe3ZhciBjb21wYXJhdG9yPWxhc3QodmFsdWVzKTtpZihpc0FycmF5TGlrZU9iamVjdChjb21wYXJhdG9yKSljb21wYXJhdG9yPXVuZGVmaW5lZDtyZXR1cm4gaXNBcnJheUxpa2VPYmplY3QoYXJyYXkpP2Jhc2VEaWZmZXJlbmNlKGFycmF5LGJhc2VGbGF0dGVuKHZhbHVlcywxLGlzQXJyYXlMaWtlT2JqZWN0LHRydWUpLHVuZGVmaW5lZCxjb21wYXJhdG9yKToKW119KTtmdW5jdGlvbiBkcm9wKGFycmF5LG4sZ3VhcmQpe3ZhciBsZW5ndGg9YXJyYXk9PW51bGw/MDphcnJheS5sZW5ndGg7aWYoIWxlbmd0aClyZXR1cm5bXTtuPWd1YXJkfHxuPT09dW5kZWZpbmVkPzE6dG9JbnRlZ2VyKG4pO3JldHVybiBiYXNlU2xpY2UoYXJyYXksbjwwPzA6bixsZW5ndGgpfWZ1bmN0aW9uIGRyb3BSaWdodChhcnJheSxuLGd1YXJkKXt2YXIgbGVuZ3RoPWFycmF5PT1udWxsPzA6YXJyYXkubGVuZ3RoO2lmKCFsZW5ndGgpcmV0dXJuW107bj1ndWFyZHx8bj09PXVuZGVmaW5lZD8xOnRvSW50ZWdlcihuKTtuPWxlbmd0aC1uO3JldHVybiBiYXNlU2xpY2UoYXJyYXksMCxuPDA/MDpuKX1mdW5jdGlvbiBkcm9wUmlnaHRXaGlsZShhcnJheSxwcmVkaWNhdGUpe3JldHVybiBhcnJheSYmYXJyYXkubGVuZ3RoP2Jhc2VXaGlsZShhcnJheSxnZXRJdGVyYXRlZShwcmVkaWNhdGUsMyksdHJ1ZSx0cnVlKTpbXX1mdW5jdGlvbiBkcm9wV2hpbGUoYXJyYXkscHJlZGljYXRlKXtyZXR1cm4gYXJyYXkmJgphcnJheS5sZW5ndGg/YmFzZVdoaWxlKGFycmF5LGdldEl0ZXJhdGVlKHByZWRpY2F0ZSwzKSx0cnVlKTpbXX1mdW5jdGlvbiBmaWxsKGFycmF5LHZhbHVlLHN0YXJ0LGVuZCl7dmFyIGxlbmd0aD1hcnJheT09bnVsbD8wOmFycmF5Lmxlbmd0aDtpZighbGVuZ3RoKXJldHVybltdO2lmKHN0YXJ0JiZ0eXBlb2Ygc3RhcnQhPSJudW1iZXIiJiZpc0l0ZXJhdGVlQ2FsbChhcnJheSx2YWx1ZSxzdGFydCkpe3N0YXJ0PTA7ZW5kPWxlbmd0aH1yZXR1cm4gYmFzZUZpbGwoYXJyYXksdmFsdWUsc3RhcnQsZW5kKX1mdW5jdGlvbiBmaW5kSW5kZXgoYXJyYXkscHJlZGljYXRlLGZyb21JbmRleCl7dmFyIGxlbmd0aD1hcnJheT09bnVsbD8wOmFycmF5Lmxlbmd0aDtpZighbGVuZ3RoKXJldHVybi0xO3ZhciBpbmRleD1mcm9tSW5kZXg9PW51bGw/MDp0b0ludGVnZXIoZnJvbUluZGV4KTtpZihpbmRleDwwKWluZGV4PW5hdGl2ZU1heChsZW5ndGgraW5kZXgsMCk7cmV0dXJuIGJhc2VGaW5kSW5kZXgoYXJyYXksCmdldEl0ZXJhdGVlKHByZWRpY2F0ZSwzKSxpbmRleCl9ZnVuY3Rpb24gZmluZExhc3RJbmRleChhcnJheSxwcmVkaWNhdGUsZnJvbUluZGV4KXt2YXIgbGVuZ3RoPWFycmF5PT1udWxsPzA6YXJyYXkubGVuZ3RoO2lmKCFsZW5ndGgpcmV0dXJuLTE7dmFyIGluZGV4PWxlbmd0aC0xO2lmKGZyb21JbmRleCE9PXVuZGVmaW5lZCl7aW5kZXg9dG9JbnRlZ2VyKGZyb21JbmRleCk7aW5kZXg9ZnJvbUluZGV4PDA/bmF0aXZlTWF4KGxlbmd0aCtpbmRleCwwKTpuYXRpdmVNaW4oaW5kZXgsbGVuZ3RoLTEpfXJldHVybiBiYXNlRmluZEluZGV4KGFycmF5LGdldEl0ZXJhdGVlKHByZWRpY2F0ZSwzKSxpbmRleCx0cnVlKX1mdW5jdGlvbiBmbGF0dGVuKGFycmF5KXt2YXIgbGVuZ3RoPWFycmF5PT1udWxsPzA6YXJyYXkubGVuZ3RoO3JldHVybiBsZW5ndGg/YmFzZUZsYXR0ZW4oYXJyYXksMSk6W119ZnVuY3Rpb24gZmxhdHRlbkRlZXAoYXJyYXkpe3ZhciBsZW5ndGg9YXJyYXk9PW51bGw/MDphcnJheS5sZW5ndGg7CnJldHVybiBsZW5ndGg/YmFzZUZsYXR0ZW4oYXJyYXksSU5GSU5JVFkpOltdfWZ1bmN0aW9uIGZsYXR0ZW5EZXB0aChhcnJheSxkZXB0aCl7dmFyIGxlbmd0aD1hcnJheT09bnVsbD8wOmFycmF5Lmxlbmd0aDtpZighbGVuZ3RoKXJldHVybltdO2RlcHRoPWRlcHRoPT09dW5kZWZpbmVkPzE6dG9JbnRlZ2VyKGRlcHRoKTtyZXR1cm4gYmFzZUZsYXR0ZW4oYXJyYXksZGVwdGgpfWZ1bmN0aW9uIGZyb21QYWlycyhwYWlycyl7dmFyIGluZGV4PS0xLGxlbmd0aD1wYWlycz09bnVsbD8wOnBhaXJzLmxlbmd0aCxyZXN1bHQ9e307d2hpbGUoKytpbmRleDxsZW5ndGgpe3ZhciBwYWlyPXBhaXJzW2luZGV4XTtyZXN1bHRbcGFpclswXV09cGFpclsxXX1yZXR1cm4gcmVzdWx0fWZ1bmN0aW9uIGhlYWQoYXJyYXkpe3JldHVybiBhcnJheSYmYXJyYXkubGVuZ3RoP2FycmF5WzBdOnVuZGVmaW5lZH1mdW5jdGlvbiBpbmRleE9mKGFycmF5LHZhbHVlLGZyb21JbmRleCl7dmFyIGxlbmd0aD1hcnJheT09Cm51bGw/MDphcnJheS5sZW5ndGg7aWYoIWxlbmd0aClyZXR1cm4tMTt2YXIgaW5kZXg9ZnJvbUluZGV4PT1udWxsPzA6dG9JbnRlZ2VyKGZyb21JbmRleCk7aWYoaW5kZXg8MClpbmRleD1uYXRpdmVNYXgobGVuZ3RoK2luZGV4LDApO3JldHVybiBiYXNlSW5kZXhPZihhcnJheSx2YWx1ZSxpbmRleCl9ZnVuY3Rpb24gaW5pdGlhbChhcnJheSl7dmFyIGxlbmd0aD1hcnJheT09bnVsbD8wOmFycmF5Lmxlbmd0aDtyZXR1cm4gbGVuZ3RoP2Jhc2VTbGljZShhcnJheSwwLC0xKTpbXX12YXIgaW50ZXJzZWN0aW9uPWJhc2VSZXN0KGZ1bmN0aW9uKGFycmF5cyl7dmFyIG1hcHBlZD1hcnJheU1hcChhcnJheXMsY2FzdEFycmF5TGlrZU9iamVjdCk7cmV0dXJuIG1hcHBlZC5sZW5ndGgmJm1hcHBlZFswXT09PWFycmF5c1swXT9iYXNlSW50ZXJzZWN0aW9uKG1hcHBlZCk6W119KTt2YXIgaW50ZXJzZWN0aW9uQnk9YmFzZVJlc3QoZnVuY3Rpb24oYXJyYXlzKXt2YXIgaXRlcmF0ZWU9bGFzdChhcnJheXMpLAptYXBwZWQ9YXJyYXlNYXAoYXJyYXlzLGNhc3RBcnJheUxpa2VPYmplY3QpO2lmKGl0ZXJhdGVlPT09bGFzdChtYXBwZWQpKWl0ZXJhdGVlPXVuZGVmaW5lZDtlbHNlIG1hcHBlZC5wb3AoKTtyZXR1cm4gbWFwcGVkLmxlbmd0aCYmbWFwcGVkWzBdPT09YXJyYXlzWzBdP2Jhc2VJbnRlcnNlY3Rpb24obWFwcGVkLGdldEl0ZXJhdGVlKGl0ZXJhdGVlLDIpKTpbXX0pO3ZhciBpbnRlcnNlY3Rpb25XaXRoPWJhc2VSZXN0KGZ1bmN0aW9uKGFycmF5cyl7dmFyIGNvbXBhcmF0b3I9bGFzdChhcnJheXMpLG1hcHBlZD1hcnJheU1hcChhcnJheXMsY2FzdEFycmF5TGlrZU9iamVjdCk7Y29tcGFyYXRvcj10eXBlb2YgY29tcGFyYXRvcj09ImZ1bmN0aW9uIj9jb21wYXJhdG9yOnVuZGVmaW5lZDtpZihjb21wYXJhdG9yKW1hcHBlZC5wb3AoKTtyZXR1cm4gbWFwcGVkLmxlbmd0aCYmbWFwcGVkWzBdPT09YXJyYXlzWzBdP2Jhc2VJbnRlcnNlY3Rpb24obWFwcGVkLHVuZGVmaW5lZCxjb21wYXJhdG9yKToKW119KTtmdW5jdGlvbiBqb2luKGFycmF5LHNlcGFyYXRvcil7cmV0dXJuIGFycmF5PT1udWxsPyIiOm5hdGl2ZUpvaW4uY2FsbChhcnJheSxzZXBhcmF0b3IpfWZ1bmN0aW9uIGxhc3QoYXJyYXkpe3ZhciBsZW5ndGg9YXJyYXk9PW51bGw/MDphcnJheS5sZW5ndGg7cmV0dXJuIGxlbmd0aD9hcnJheVtsZW5ndGgtMV06dW5kZWZpbmVkfWZ1bmN0aW9uIGxhc3RJbmRleE9mKGFycmF5LHZhbHVlLGZyb21JbmRleCl7dmFyIGxlbmd0aD1hcnJheT09bnVsbD8wOmFycmF5Lmxlbmd0aDtpZighbGVuZ3RoKXJldHVybi0xO3ZhciBpbmRleD1sZW5ndGg7aWYoZnJvbUluZGV4IT09dW5kZWZpbmVkKXtpbmRleD10b0ludGVnZXIoZnJvbUluZGV4KTtpbmRleD1pbmRleDwwP25hdGl2ZU1heChsZW5ndGgraW5kZXgsMCk6bmF0aXZlTWluKGluZGV4LGxlbmd0aC0xKX1yZXR1cm4gdmFsdWU9PT12YWx1ZT9zdHJpY3RMYXN0SW5kZXhPZihhcnJheSx2YWx1ZSxpbmRleCk6YmFzZUZpbmRJbmRleChhcnJheSwKYmFzZUlzTmFOLGluZGV4LHRydWUpfWZ1bmN0aW9uIG50aChhcnJheSxuKXtyZXR1cm4gYXJyYXkmJmFycmF5Lmxlbmd0aD9iYXNlTnRoKGFycmF5LHRvSW50ZWdlcihuKSk6dW5kZWZpbmVkfXZhciBwdWxsPWJhc2VSZXN0KHB1bGxBbGwpO2Z1bmN0aW9uIHB1bGxBbGwoYXJyYXksdmFsdWVzKXtyZXR1cm4gYXJyYXkmJmFycmF5Lmxlbmd0aCYmdmFsdWVzJiZ2YWx1ZXMubGVuZ3RoP2Jhc2VQdWxsQWxsKGFycmF5LHZhbHVlcyk6YXJyYXl9ZnVuY3Rpb24gcHVsbEFsbEJ5KGFycmF5LHZhbHVlcyxpdGVyYXRlZSl7cmV0dXJuIGFycmF5JiZhcnJheS5sZW5ndGgmJnZhbHVlcyYmdmFsdWVzLmxlbmd0aD9iYXNlUHVsbEFsbChhcnJheSx2YWx1ZXMsZ2V0SXRlcmF0ZWUoaXRlcmF0ZWUsMikpOmFycmF5fWZ1bmN0aW9uIHB1bGxBbGxXaXRoKGFycmF5LHZhbHVlcyxjb21wYXJhdG9yKXtyZXR1cm4gYXJyYXkmJmFycmF5Lmxlbmd0aCYmdmFsdWVzJiZ2YWx1ZXMubGVuZ3RoP2Jhc2VQdWxsQWxsKGFycmF5LAp2YWx1ZXMsdW5kZWZpbmVkLGNvbXBhcmF0b3IpOmFycmF5fXZhciBwdWxsQXQ9ZmxhdFJlc3QoZnVuY3Rpb24oYXJyYXksaW5kZXhlcyl7dmFyIGxlbmd0aD1hcnJheT09bnVsbD8wOmFycmF5Lmxlbmd0aCxyZXN1bHQ9YmFzZUF0KGFycmF5LGluZGV4ZXMpO2Jhc2VQdWxsQXQoYXJyYXksYXJyYXlNYXAoaW5kZXhlcyxmdW5jdGlvbihpbmRleCl7cmV0dXJuIGlzSW5kZXgoaW5kZXgsbGVuZ3RoKT8raW5kZXg6aW5kZXh9KS5zb3J0KGNvbXBhcmVBc2NlbmRpbmcpKTtyZXR1cm4gcmVzdWx0fSk7ZnVuY3Rpb24gcmVtb3ZlKGFycmF5LHByZWRpY2F0ZSl7dmFyIHJlc3VsdD1bXTtpZighKGFycmF5JiZhcnJheS5sZW5ndGgpKXJldHVybiByZXN1bHQ7dmFyIGluZGV4PS0xLGluZGV4ZXM9W10sbGVuZ3RoPWFycmF5Lmxlbmd0aDtwcmVkaWNhdGU9Z2V0SXRlcmF0ZWUocHJlZGljYXRlLDMpO3doaWxlKCsraW5kZXg8bGVuZ3RoKXt2YXIgdmFsdWU9YXJyYXlbaW5kZXhdO2lmKHByZWRpY2F0ZSh2YWx1ZSwKaW5kZXgsYXJyYXkpKXtyZXN1bHQucHVzaCh2YWx1ZSk7aW5kZXhlcy5wdXNoKGluZGV4KX19YmFzZVB1bGxBdChhcnJheSxpbmRleGVzKTtyZXR1cm4gcmVzdWx0fWZ1bmN0aW9uIHJldmVyc2UoYXJyYXkpe3JldHVybiBhcnJheT09bnVsbD9hcnJheTpuYXRpdmVSZXZlcnNlLmNhbGwoYXJyYXkpfWZ1bmN0aW9uIHNsaWNlKGFycmF5LHN0YXJ0LGVuZCl7dmFyIGxlbmd0aD1hcnJheT09bnVsbD8wOmFycmF5Lmxlbmd0aDtpZighbGVuZ3RoKXJldHVybltdO2lmKGVuZCYmdHlwZW9mIGVuZCE9Im51bWJlciImJmlzSXRlcmF0ZWVDYWxsKGFycmF5LHN0YXJ0LGVuZCkpe3N0YXJ0PTA7ZW5kPWxlbmd0aH1lbHNle3N0YXJ0PXN0YXJ0PT1udWxsPzA6dG9JbnRlZ2VyKHN0YXJ0KTtlbmQ9ZW5kPT09dW5kZWZpbmVkP2xlbmd0aDp0b0ludGVnZXIoZW5kKX1yZXR1cm4gYmFzZVNsaWNlKGFycmF5LHN0YXJ0LGVuZCl9ZnVuY3Rpb24gc29ydGVkSW5kZXgoYXJyYXksdmFsdWUpe3JldHVybiBiYXNlU29ydGVkSW5kZXgoYXJyYXksCnZhbHVlKX1mdW5jdGlvbiBzb3J0ZWRJbmRleEJ5KGFycmF5LHZhbHVlLGl0ZXJhdGVlKXtyZXR1cm4gYmFzZVNvcnRlZEluZGV4QnkoYXJyYXksdmFsdWUsZ2V0SXRlcmF0ZWUoaXRlcmF0ZWUsMikpfWZ1bmN0aW9uIHNvcnRlZEluZGV4T2YoYXJyYXksdmFsdWUpe3ZhciBsZW5ndGg9YXJyYXk9PW51bGw/MDphcnJheS5sZW5ndGg7aWYobGVuZ3RoKXt2YXIgaW5kZXg9YmFzZVNvcnRlZEluZGV4KGFycmF5LHZhbHVlKTtpZihpbmRleDxsZW5ndGgmJmVxKGFycmF5W2luZGV4XSx2YWx1ZSkpcmV0dXJuIGluZGV4fXJldHVybi0xfWZ1bmN0aW9uIHNvcnRlZExhc3RJbmRleChhcnJheSx2YWx1ZSl7cmV0dXJuIGJhc2VTb3J0ZWRJbmRleChhcnJheSx2YWx1ZSx0cnVlKX1mdW5jdGlvbiBzb3J0ZWRMYXN0SW5kZXhCeShhcnJheSx2YWx1ZSxpdGVyYXRlZSl7cmV0dXJuIGJhc2VTb3J0ZWRJbmRleEJ5KGFycmF5LHZhbHVlLGdldEl0ZXJhdGVlKGl0ZXJhdGVlLDIpLHRydWUpfWZ1bmN0aW9uIHNvcnRlZExhc3RJbmRleE9mKGFycmF5LAp2YWx1ZSl7dmFyIGxlbmd0aD1hcnJheT09bnVsbD8wOmFycmF5Lmxlbmd0aDtpZihsZW5ndGgpe3ZhciBpbmRleD1iYXNlU29ydGVkSW5kZXgoYXJyYXksdmFsdWUsdHJ1ZSktMTtpZihlcShhcnJheVtpbmRleF0sdmFsdWUpKXJldHVybiBpbmRleH1yZXR1cm4tMX1mdW5jdGlvbiBzb3J0ZWRVbmlxKGFycmF5KXtyZXR1cm4gYXJyYXkmJmFycmF5Lmxlbmd0aD9iYXNlU29ydGVkVW5pcShhcnJheSk6W119ZnVuY3Rpb24gc29ydGVkVW5pcUJ5KGFycmF5LGl0ZXJhdGVlKXtyZXR1cm4gYXJyYXkmJmFycmF5Lmxlbmd0aD9iYXNlU29ydGVkVW5pcShhcnJheSxnZXRJdGVyYXRlZShpdGVyYXRlZSwyKSk6W119ZnVuY3Rpb24gdGFpbChhcnJheSl7dmFyIGxlbmd0aD1hcnJheT09bnVsbD8wOmFycmF5Lmxlbmd0aDtyZXR1cm4gbGVuZ3RoP2Jhc2VTbGljZShhcnJheSwxLGxlbmd0aCk6W119ZnVuY3Rpb24gdGFrZShhcnJheSxuLGd1YXJkKXtpZighKGFycmF5JiZhcnJheS5sZW5ndGgpKXJldHVybltdOwpuPWd1YXJkfHxuPT09dW5kZWZpbmVkPzE6dG9JbnRlZ2VyKG4pO3JldHVybiBiYXNlU2xpY2UoYXJyYXksMCxuPDA/MDpuKX1mdW5jdGlvbiB0YWtlUmlnaHQoYXJyYXksbixndWFyZCl7dmFyIGxlbmd0aD1hcnJheT09bnVsbD8wOmFycmF5Lmxlbmd0aDtpZighbGVuZ3RoKXJldHVybltdO249Z3VhcmR8fG49PT11bmRlZmluZWQ/MTp0b0ludGVnZXIobik7bj1sZW5ndGgtbjtyZXR1cm4gYmFzZVNsaWNlKGFycmF5LG48MD8wOm4sbGVuZ3RoKX1mdW5jdGlvbiB0YWtlUmlnaHRXaGlsZShhcnJheSxwcmVkaWNhdGUpe3JldHVybiBhcnJheSYmYXJyYXkubGVuZ3RoP2Jhc2VXaGlsZShhcnJheSxnZXRJdGVyYXRlZShwcmVkaWNhdGUsMyksZmFsc2UsdHJ1ZSk6W119ZnVuY3Rpb24gdGFrZVdoaWxlKGFycmF5LHByZWRpY2F0ZSl7cmV0dXJuIGFycmF5JiZhcnJheS5sZW5ndGg/YmFzZVdoaWxlKGFycmF5LGdldEl0ZXJhdGVlKHByZWRpY2F0ZSwzKSk6W119dmFyIHVuaW9uPWJhc2VSZXN0KGZ1bmN0aW9uKGFycmF5cyl7cmV0dXJuIGJhc2VVbmlxKGJhc2VGbGF0dGVuKGFycmF5cywKMSxpc0FycmF5TGlrZU9iamVjdCx0cnVlKSl9KTt2YXIgdW5pb25CeT1iYXNlUmVzdChmdW5jdGlvbihhcnJheXMpe3ZhciBpdGVyYXRlZT1sYXN0KGFycmF5cyk7aWYoaXNBcnJheUxpa2VPYmplY3QoaXRlcmF0ZWUpKWl0ZXJhdGVlPXVuZGVmaW5lZDtyZXR1cm4gYmFzZVVuaXEoYmFzZUZsYXR0ZW4oYXJyYXlzLDEsaXNBcnJheUxpa2VPYmplY3QsdHJ1ZSksZ2V0SXRlcmF0ZWUoaXRlcmF0ZWUsMikpfSk7dmFyIHVuaW9uV2l0aD1iYXNlUmVzdChmdW5jdGlvbihhcnJheXMpe3ZhciBjb21wYXJhdG9yPWxhc3QoYXJyYXlzKTtjb21wYXJhdG9yPXR5cGVvZiBjb21wYXJhdG9yPT0iZnVuY3Rpb24iP2NvbXBhcmF0b3I6dW5kZWZpbmVkO3JldHVybiBiYXNlVW5pcShiYXNlRmxhdHRlbihhcnJheXMsMSxpc0FycmF5TGlrZU9iamVjdCx0cnVlKSx1bmRlZmluZWQsY29tcGFyYXRvcil9KTtmdW5jdGlvbiB1bmlxKGFycmF5KXtyZXR1cm4gYXJyYXkmJmFycmF5Lmxlbmd0aD9iYXNlVW5pcShhcnJheSk6CltdfWZ1bmN0aW9uIHVuaXFCeShhcnJheSxpdGVyYXRlZSl7cmV0dXJuIGFycmF5JiZhcnJheS5sZW5ndGg/YmFzZVVuaXEoYXJyYXksZ2V0SXRlcmF0ZWUoaXRlcmF0ZWUsMikpOltdfWZ1bmN0aW9uIHVuaXFXaXRoKGFycmF5LGNvbXBhcmF0b3Ipe2NvbXBhcmF0b3I9dHlwZW9mIGNvbXBhcmF0b3I9PSJmdW5jdGlvbiI/Y29tcGFyYXRvcjp1bmRlZmluZWQ7cmV0dXJuIGFycmF5JiZhcnJheS5sZW5ndGg/YmFzZVVuaXEoYXJyYXksdW5kZWZpbmVkLGNvbXBhcmF0b3IpOltdfWZ1bmN0aW9uIHVuemlwKGFycmF5KXtpZighKGFycmF5JiZhcnJheS5sZW5ndGgpKXJldHVybltdO3ZhciBsZW5ndGg9MDthcnJheT1hcnJheUZpbHRlcihhcnJheSxmdW5jdGlvbihncm91cCl7aWYoaXNBcnJheUxpa2VPYmplY3QoZ3JvdXApKXtsZW5ndGg9bmF0aXZlTWF4KGdyb3VwLmxlbmd0aCxsZW5ndGgpO3JldHVybiB0cnVlfX0pO3JldHVybiBiYXNlVGltZXMobGVuZ3RoLGZ1bmN0aW9uKGluZGV4KXtyZXR1cm4gYXJyYXlNYXAoYXJyYXksCmJhc2VQcm9wZXJ0eShpbmRleCkpfSl9ZnVuY3Rpb24gdW56aXBXaXRoKGFycmF5LGl0ZXJhdGVlKXtpZighKGFycmF5JiZhcnJheS5sZW5ndGgpKXJldHVybltdO3ZhciByZXN1bHQ9dW56aXAoYXJyYXkpO2lmKGl0ZXJhdGVlPT1udWxsKXJldHVybiByZXN1bHQ7cmV0dXJuIGFycmF5TWFwKHJlc3VsdCxmdW5jdGlvbihncm91cCl7cmV0dXJuIGFwcGx5KGl0ZXJhdGVlLHVuZGVmaW5lZCxncm91cCl9KX12YXIgd2l0aG91dD1iYXNlUmVzdChmdW5jdGlvbihhcnJheSx2YWx1ZXMpe3JldHVybiBpc0FycmF5TGlrZU9iamVjdChhcnJheSk/YmFzZURpZmZlcmVuY2UoYXJyYXksdmFsdWVzKTpbXX0pO3ZhciB4b3I9YmFzZVJlc3QoZnVuY3Rpb24oYXJyYXlzKXtyZXR1cm4gYmFzZVhvcihhcnJheUZpbHRlcihhcnJheXMsaXNBcnJheUxpa2VPYmplY3QpKX0pO3ZhciB4b3JCeT1iYXNlUmVzdChmdW5jdGlvbihhcnJheXMpe3ZhciBpdGVyYXRlZT1sYXN0KGFycmF5cyk7aWYoaXNBcnJheUxpa2VPYmplY3QoaXRlcmF0ZWUpKWl0ZXJhdGVlPQp1bmRlZmluZWQ7cmV0dXJuIGJhc2VYb3IoYXJyYXlGaWx0ZXIoYXJyYXlzLGlzQXJyYXlMaWtlT2JqZWN0KSxnZXRJdGVyYXRlZShpdGVyYXRlZSwyKSl9KTt2YXIgeG9yV2l0aD1iYXNlUmVzdChmdW5jdGlvbihhcnJheXMpe3ZhciBjb21wYXJhdG9yPWxhc3QoYXJyYXlzKTtjb21wYXJhdG9yPXR5cGVvZiBjb21wYXJhdG9yPT0iZnVuY3Rpb24iP2NvbXBhcmF0b3I6dW5kZWZpbmVkO3JldHVybiBiYXNlWG9yKGFycmF5RmlsdGVyKGFycmF5cyxpc0FycmF5TGlrZU9iamVjdCksdW5kZWZpbmVkLGNvbXBhcmF0b3IpfSk7dmFyIHppcD1iYXNlUmVzdCh1bnppcCk7ZnVuY3Rpb24gemlwT2JqZWN0KHByb3BzLHZhbHVlcyl7cmV0dXJuIGJhc2VaaXBPYmplY3QocHJvcHN8fFtdLHZhbHVlc3x8W10sYXNzaWduVmFsdWUpfWZ1bmN0aW9uIHppcE9iamVjdERlZXAocHJvcHMsdmFsdWVzKXtyZXR1cm4gYmFzZVppcE9iamVjdChwcm9wc3x8W10sdmFsdWVzfHxbXSxiYXNlU2V0KX12YXIgemlwV2l0aD0KYmFzZVJlc3QoZnVuY3Rpb24oYXJyYXlzKXt2YXIgbGVuZ3RoPWFycmF5cy5sZW5ndGgsaXRlcmF0ZWU9bGVuZ3RoPjE/YXJyYXlzW2xlbmd0aC0xXTp1bmRlZmluZWQ7aXRlcmF0ZWU9dHlwZW9mIGl0ZXJhdGVlPT0iZnVuY3Rpb24iPyhhcnJheXMucG9wKCksaXRlcmF0ZWUpOnVuZGVmaW5lZDtyZXR1cm4gdW56aXBXaXRoKGFycmF5cyxpdGVyYXRlZSl9KTtmdW5jdGlvbiBjaGFpbih2YWx1ZSl7dmFyIHJlc3VsdD1sb2Rhc2godmFsdWUpO3Jlc3VsdC5fX2NoYWluX189dHJ1ZTtyZXR1cm4gcmVzdWx0fWZ1bmN0aW9uIHRhcCh2YWx1ZSxpbnRlcmNlcHRvcil7aW50ZXJjZXB0b3IodmFsdWUpO3JldHVybiB2YWx1ZX1mdW5jdGlvbiB0aHJ1KHZhbHVlLGludGVyY2VwdG9yKXtyZXR1cm4gaW50ZXJjZXB0b3IodmFsdWUpfXZhciB3cmFwcGVyQXQ9ZmxhdFJlc3QoZnVuY3Rpb24ocGF0aHMpe3ZhciBsZW5ndGg9cGF0aHMubGVuZ3RoLHN0YXJ0PWxlbmd0aD9wYXRoc1swXTowLHZhbHVlPQp0aGlzLl9fd3JhcHBlZF9fLGludGVyY2VwdG9yPWZ1bmN0aW9uKG9iamVjdCl7cmV0dXJuIGJhc2VBdChvYmplY3QscGF0aHMpfTtpZihsZW5ndGg+MXx8dGhpcy5fX2FjdGlvbnNfXy5sZW5ndGh8fCEodmFsdWUgaW5zdGFuY2VvZiBMYXp5V3JhcHBlcil8fCFpc0luZGV4KHN0YXJ0KSlyZXR1cm4gdGhpcy50aHJ1KGludGVyY2VwdG9yKTt2YWx1ZT12YWx1ZS5zbGljZShzdGFydCwrc3RhcnQrKGxlbmd0aD8xOjApKTt2YWx1ZS5fX2FjdGlvbnNfXy5wdXNoKHsiZnVuYyI6dGhydSwiYXJncyI6W2ludGVyY2VwdG9yXSwidGhpc0FyZyI6dW5kZWZpbmVkfSk7cmV0dXJuKG5ldyBMb2Rhc2hXcmFwcGVyKHZhbHVlLHRoaXMuX19jaGFpbl9fKSkudGhydShmdW5jdGlvbihhcnJheSl7aWYobGVuZ3RoJiYhYXJyYXkubGVuZ3RoKWFycmF5LnB1c2godW5kZWZpbmVkKTtyZXR1cm4gYXJyYXl9KX0pO2Z1bmN0aW9uIHdyYXBwZXJDaGFpbigpe3JldHVybiBjaGFpbih0aGlzKX1mdW5jdGlvbiB3cmFwcGVyQ29tbWl0KCl7cmV0dXJuIG5ldyBMb2Rhc2hXcmFwcGVyKHRoaXMudmFsdWUoKSwKdGhpcy5fX2NoYWluX18pfWZ1bmN0aW9uIHdyYXBwZXJOZXh0KCl7aWYodGhpcy5fX3ZhbHVlc19fPT09dW5kZWZpbmVkKXRoaXMuX192YWx1ZXNfXz10b0FycmF5KHRoaXMudmFsdWUoKSk7dmFyIGRvbmU9dGhpcy5fX2luZGV4X18+PXRoaXMuX192YWx1ZXNfXy5sZW5ndGgsdmFsdWU9ZG9uZT91bmRlZmluZWQ6dGhpcy5fX3ZhbHVlc19fW3RoaXMuX19pbmRleF9fKytdO3JldHVybnsiZG9uZSI6ZG9uZSwidmFsdWUiOnZhbHVlfX1mdW5jdGlvbiB3cmFwcGVyVG9JdGVyYXRvcigpe3JldHVybiB0aGlzfWZ1bmN0aW9uIHdyYXBwZXJQbGFudCh2YWx1ZSl7dmFyIHJlc3VsdCxwYXJlbnQ9dGhpczt3aGlsZShwYXJlbnQgaW5zdGFuY2VvZiBiYXNlTG9kYXNoKXt2YXIgY2xvbmU9d3JhcHBlckNsb25lKHBhcmVudCk7Y2xvbmUuX19pbmRleF9fPTA7Y2xvbmUuX192YWx1ZXNfXz11bmRlZmluZWQ7aWYocmVzdWx0KXByZXZpb3VzLl9fd3JhcHBlZF9fPWNsb25lO2Vsc2UgcmVzdWx0PWNsb25lOwp2YXIgcHJldmlvdXM9Y2xvbmU7cGFyZW50PXBhcmVudC5fX3dyYXBwZWRfX31wcmV2aW91cy5fX3dyYXBwZWRfXz12YWx1ZTtyZXR1cm4gcmVzdWx0fWZ1bmN0aW9uIHdyYXBwZXJSZXZlcnNlKCl7dmFyIHZhbHVlPXRoaXMuX193cmFwcGVkX187aWYodmFsdWUgaW5zdGFuY2VvZiBMYXp5V3JhcHBlcil7dmFyIHdyYXBwZWQ9dmFsdWU7aWYodGhpcy5fX2FjdGlvbnNfXy5sZW5ndGgpd3JhcHBlZD1uZXcgTGF6eVdyYXBwZXIodGhpcyk7d3JhcHBlZD13cmFwcGVkLnJldmVyc2UoKTt3cmFwcGVkLl9fYWN0aW9uc19fLnB1c2goeyJmdW5jIjp0aHJ1LCJhcmdzIjpbcmV2ZXJzZV0sInRoaXNBcmciOnVuZGVmaW5lZH0pO3JldHVybiBuZXcgTG9kYXNoV3JhcHBlcih3cmFwcGVkLHRoaXMuX19jaGFpbl9fKX1yZXR1cm4gdGhpcy50aHJ1KHJldmVyc2UpfWZ1bmN0aW9uIHdyYXBwZXJWYWx1ZSgpe3JldHVybiBiYXNlV3JhcHBlclZhbHVlKHRoaXMuX193cmFwcGVkX18sdGhpcy5fX2FjdGlvbnNfXyl9CnZhciBjb3VudEJ5PWNyZWF0ZUFnZ3JlZ2F0b3IoZnVuY3Rpb24ocmVzdWx0LHZhbHVlLGtleSl7aWYoaGFzT3duUHJvcGVydHkuY2FsbChyZXN1bHQsa2V5KSkrK3Jlc3VsdFtrZXldO2Vsc2UgYmFzZUFzc2lnblZhbHVlKHJlc3VsdCxrZXksMSl9KTtmdW5jdGlvbiBldmVyeShjb2xsZWN0aW9uLHByZWRpY2F0ZSxndWFyZCl7dmFyIGZ1bmM9aXNBcnJheShjb2xsZWN0aW9uKT9hcnJheUV2ZXJ5OmJhc2VFdmVyeTtpZihndWFyZCYmaXNJdGVyYXRlZUNhbGwoY29sbGVjdGlvbixwcmVkaWNhdGUsZ3VhcmQpKXByZWRpY2F0ZT11bmRlZmluZWQ7cmV0dXJuIGZ1bmMoY29sbGVjdGlvbixnZXRJdGVyYXRlZShwcmVkaWNhdGUsMykpfWZ1bmN0aW9uIGZpbHRlcihjb2xsZWN0aW9uLHByZWRpY2F0ZSl7dmFyIGZ1bmM9aXNBcnJheShjb2xsZWN0aW9uKT9hcnJheUZpbHRlcjpiYXNlRmlsdGVyO3JldHVybiBmdW5jKGNvbGxlY3Rpb24sZ2V0SXRlcmF0ZWUocHJlZGljYXRlLDMpKX12YXIgZmluZD0KY3JlYXRlRmluZChmaW5kSW5kZXgpO3ZhciBmaW5kTGFzdD1jcmVhdGVGaW5kKGZpbmRMYXN0SW5kZXgpO2Z1bmN0aW9uIGZsYXRNYXAoY29sbGVjdGlvbixpdGVyYXRlZSl7cmV0dXJuIGJhc2VGbGF0dGVuKG1hcChjb2xsZWN0aW9uLGl0ZXJhdGVlKSwxKX1mdW5jdGlvbiBmbGF0TWFwRGVlcChjb2xsZWN0aW9uLGl0ZXJhdGVlKXtyZXR1cm4gYmFzZUZsYXR0ZW4obWFwKGNvbGxlY3Rpb24saXRlcmF0ZWUpLElORklOSVRZKX1mdW5jdGlvbiBmbGF0TWFwRGVwdGgoY29sbGVjdGlvbixpdGVyYXRlZSxkZXB0aCl7ZGVwdGg9ZGVwdGg9PT11bmRlZmluZWQ/MTp0b0ludGVnZXIoZGVwdGgpO3JldHVybiBiYXNlRmxhdHRlbihtYXAoY29sbGVjdGlvbixpdGVyYXRlZSksZGVwdGgpfWZ1bmN0aW9uIGZvckVhY2goY29sbGVjdGlvbixpdGVyYXRlZSl7dmFyIGZ1bmM9aXNBcnJheShjb2xsZWN0aW9uKT9hcnJheUVhY2g6YmFzZUVhY2g7cmV0dXJuIGZ1bmMoY29sbGVjdGlvbixnZXRJdGVyYXRlZShpdGVyYXRlZSwKMykpfWZ1bmN0aW9uIGZvckVhY2hSaWdodChjb2xsZWN0aW9uLGl0ZXJhdGVlKXt2YXIgZnVuYz1pc0FycmF5KGNvbGxlY3Rpb24pP2FycmF5RWFjaFJpZ2h0OmJhc2VFYWNoUmlnaHQ7cmV0dXJuIGZ1bmMoY29sbGVjdGlvbixnZXRJdGVyYXRlZShpdGVyYXRlZSwzKSl9dmFyIGdyb3VwQnk9Y3JlYXRlQWdncmVnYXRvcihmdW5jdGlvbihyZXN1bHQsdmFsdWUsa2V5KXtpZihoYXNPd25Qcm9wZXJ0eS5jYWxsKHJlc3VsdCxrZXkpKXJlc3VsdFtrZXldLnB1c2godmFsdWUpO2Vsc2UgYmFzZUFzc2lnblZhbHVlKHJlc3VsdCxrZXksW3ZhbHVlXSl9KTtmdW5jdGlvbiBpbmNsdWRlcyhjb2xsZWN0aW9uLHZhbHVlLGZyb21JbmRleCxndWFyZCl7Y29sbGVjdGlvbj1pc0FycmF5TGlrZShjb2xsZWN0aW9uKT9jb2xsZWN0aW9uOnZhbHVlcyhjb2xsZWN0aW9uKTtmcm9tSW5kZXg9ZnJvbUluZGV4JiYhZ3VhcmQ/dG9JbnRlZ2VyKGZyb21JbmRleCk6MDt2YXIgbGVuZ3RoPWNvbGxlY3Rpb24ubGVuZ3RoOwppZihmcm9tSW5kZXg8MClmcm9tSW5kZXg9bmF0aXZlTWF4KGxlbmd0aCtmcm9tSW5kZXgsMCk7cmV0dXJuIGlzU3RyaW5nKGNvbGxlY3Rpb24pP2Zyb21JbmRleDw9bGVuZ3RoJiZjb2xsZWN0aW9uLmluZGV4T2YodmFsdWUsZnJvbUluZGV4KT4tMTohIWxlbmd0aCYmYmFzZUluZGV4T2YoY29sbGVjdGlvbix2YWx1ZSxmcm9tSW5kZXgpPi0xfXZhciBpbnZva2VNYXA9YmFzZVJlc3QoZnVuY3Rpb24oY29sbGVjdGlvbixwYXRoLGFyZ3Mpe3ZhciBpbmRleD0tMSxpc0Z1bmM9dHlwZW9mIHBhdGg9PSJmdW5jdGlvbiIscmVzdWx0PWlzQXJyYXlMaWtlKGNvbGxlY3Rpb24pP0FycmF5KGNvbGxlY3Rpb24ubGVuZ3RoKTpbXTtiYXNlRWFjaChjb2xsZWN0aW9uLGZ1bmN0aW9uKHZhbHVlKXtyZXN1bHRbKytpbmRleF09aXNGdW5jP2FwcGx5KHBhdGgsdmFsdWUsYXJncyk6YmFzZUludm9rZSh2YWx1ZSxwYXRoLGFyZ3MpfSk7cmV0dXJuIHJlc3VsdH0pO3ZhciBrZXlCeT1jcmVhdGVBZ2dyZWdhdG9yKGZ1bmN0aW9uKHJlc3VsdCwKdmFsdWUsa2V5KXtiYXNlQXNzaWduVmFsdWUocmVzdWx0LGtleSx2YWx1ZSl9KTtmdW5jdGlvbiBtYXAoY29sbGVjdGlvbixpdGVyYXRlZSl7dmFyIGZ1bmM9aXNBcnJheShjb2xsZWN0aW9uKT9hcnJheU1hcDpiYXNlTWFwO3JldHVybiBmdW5jKGNvbGxlY3Rpb24sZ2V0SXRlcmF0ZWUoaXRlcmF0ZWUsMykpfWZ1bmN0aW9uIG9yZGVyQnkoY29sbGVjdGlvbixpdGVyYXRlZXMsb3JkZXJzLGd1YXJkKXtpZihjb2xsZWN0aW9uPT1udWxsKXJldHVybltdO2lmKCFpc0FycmF5KGl0ZXJhdGVlcykpaXRlcmF0ZWVzPWl0ZXJhdGVlcz09bnVsbD9bXTpbaXRlcmF0ZWVzXTtvcmRlcnM9Z3VhcmQ/dW5kZWZpbmVkOm9yZGVycztpZighaXNBcnJheShvcmRlcnMpKW9yZGVycz1vcmRlcnM9PW51bGw/W106W29yZGVyc107cmV0dXJuIGJhc2VPcmRlckJ5KGNvbGxlY3Rpb24saXRlcmF0ZWVzLG9yZGVycyl9dmFyIHBhcnRpdGlvbj1jcmVhdGVBZ2dyZWdhdG9yKGZ1bmN0aW9uKHJlc3VsdCx2YWx1ZSwKa2V5KXtyZXN1bHRba2V5PzA6MV0ucHVzaCh2YWx1ZSl9LGZ1bmN0aW9uKCl7cmV0dXJuW1tdLFtdXX0pO2Z1bmN0aW9uIHJlZHVjZShjb2xsZWN0aW9uLGl0ZXJhdGVlLGFjY3VtdWxhdG9yKXt2YXIgZnVuYz1pc0FycmF5KGNvbGxlY3Rpb24pP2FycmF5UmVkdWNlOmJhc2VSZWR1Y2UsaW5pdEFjY3VtPWFyZ3VtZW50cy5sZW5ndGg8MztyZXR1cm4gZnVuYyhjb2xsZWN0aW9uLGdldEl0ZXJhdGVlKGl0ZXJhdGVlLDQpLGFjY3VtdWxhdG9yLGluaXRBY2N1bSxiYXNlRWFjaCl9ZnVuY3Rpb24gcmVkdWNlUmlnaHQoY29sbGVjdGlvbixpdGVyYXRlZSxhY2N1bXVsYXRvcil7dmFyIGZ1bmM9aXNBcnJheShjb2xsZWN0aW9uKT9hcnJheVJlZHVjZVJpZ2h0OmJhc2VSZWR1Y2UsaW5pdEFjY3VtPWFyZ3VtZW50cy5sZW5ndGg8MztyZXR1cm4gZnVuYyhjb2xsZWN0aW9uLGdldEl0ZXJhdGVlKGl0ZXJhdGVlLDQpLGFjY3VtdWxhdG9yLGluaXRBY2N1bSxiYXNlRWFjaFJpZ2h0KX1mdW5jdGlvbiByZWplY3QoY29sbGVjdGlvbiwKcHJlZGljYXRlKXt2YXIgZnVuYz1pc0FycmF5KGNvbGxlY3Rpb24pP2FycmF5RmlsdGVyOmJhc2VGaWx0ZXI7cmV0dXJuIGZ1bmMoY29sbGVjdGlvbixuZWdhdGUoZ2V0SXRlcmF0ZWUocHJlZGljYXRlLDMpKSl9ZnVuY3Rpb24gc2FtcGxlKGNvbGxlY3Rpb24pe3ZhciBmdW5jPWlzQXJyYXkoY29sbGVjdGlvbik/YXJyYXlTYW1wbGU6YmFzZVNhbXBsZTtyZXR1cm4gZnVuYyhjb2xsZWN0aW9uKX1mdW5jdGlvbiBzYW1wbGVTaXplKGNvbGxlY3Rpb24sbixndWFyZCl7aWYoZ3VhcmQ/aXNJdGVyYXRlZUNhbGwoY29sbGVjdGlvbixuLGd1YXJkKTpuPT09dW5kZWZpbmVkKW49MTtlbHNlIG49dG9JbnRlZ2VyKG4pO3ZhciBmdW5jPWlzQXJyYXkoY29sbGVjdGlvbik/YXJyYXlTYW1wbGVTaXplOmJhc2VTYW1wbGVTaXplO3JldHVybiBmdW5jKGNvbGxlY3Rpb24sbil9ZnVuY3Rpb24gc2h1ZmZsZShjb2xsZWN0aW9uKXt2YXIgZnVuYz1pc0FycmF5KGNvbGxlY3Rpb24pP2FycmF5U2h1ZmZsZToKYmFzZVNodWZmbGU7cmV0dXJuIGZ1bmMoY29sbGVjdGlvbil9ZnVuY3Rpb24gc2l6ZShjb2xsZWN0aW9uKXtpZihjb2xsZWN0aW9uPT1udWxsKXJldHVybiAwO2lmKGlzQXJyYXlMaWtlKGNvbGxlY3Rpb24pKXJldHVybiBpc1N0cmluZyhjb2xsZWN0aW9uKT9zdHJpbmdTaXplKGNvbGxlY3Rpb24pOmNvbGxlY3Rpb24ubGVuZ3RoO3ZhciB0YWc9Z2V0VGFnKGNvbGxlY3Rpb24pO2lmKHRhZz09bWFwVGFnfHx0YWc9PXNldFRhZylyZXR1cm4gY29sbGVjdGlvbi5zaXplO3JldHVybiBiYXNlS2V5cyhjb2xsZWN0aW9uKS5sZW5ndGh9ZnVuY3Rpb24gc29tZShjb2xsZWN0aW9uLHByZWRpY2F0ZSxndWFyZCl7dmFyIGZ1bmM9aXNBcnJheShjb2xsZWN0aW9uKT9hcnJheVNvbWU6YmFzZVNvbWU7aWYoZ3VhcmQmJmlzSXRlcmF0ZWVDYWxsKGNvbGxlY3Rpb24scHJlZGljYXRlLGd1YXJkKSlwcmVkaWNhdGU9dW5kZWZpbmVkO3JldHVybiBmdW5jKGNvbGxlY3Rpb24sZ2V0SXRlcmF0ZWUocHJlZGljYXRlLAozKSl9dmFyIHNvcnRCeT1iYXNlUmVzdChmdW5jdGlvbihjb2xsZWN0aW9uLGl0ZXJhdGVlcyl7aWYoY29sbGVjdGlvbj09bnVsbClyZXR1cm5bXTt2YXIgbGVuZ3RoPWl0ZXJhdGVlcy5sZW5ndGg7aWYobGVuZ3RoPjEmJmlzSXRlcmF0ZWVDYWxsKGNvbGxlY3Rpb24saXRlcmF0ZWVzWzBdLGl0ZXJhdGVlc1sxXSkpaXRlcmF0ZWVzPVtdO2Vsc2UgaWYobGVuZ3RoPjImJmlzSXRlcmF0ZWVDYWxsKGl0ZXJhdGVlc1swXSxpdGVyYXRlZXNbMV0saXRlcmF0ZWVzWzJdKSlpdGVyYXRlZXM9W2l0ZXJhdGVlc1swXV07cmV0dXJuIGJhc2VPcmRlckJ5KGNvbGxlY3Rpb24sYmFzZUZsYXR0ZW4oaXRlcmF0ZWVzLDEpLFtdKX0pO3ZhciBub3c9Y3R4Tm93fHxmdW5jdGlvbigpe3JldHVybiByb290LkRhdGUubm93KCl9O2Z1bmN0aW9uIGFmdGVyKG4sZnVuYyl7aWYodHlwZW9mIGZ1bmMhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpO249dG9JbnRlZ2VyKG4pOwpyZXR1cm4gZnVuY3Rpb24oKXtpZigtLW48MSlyZXR1cm4gZnVuYy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIGFyeShmdW5jLG4sZ3VhcmQpe249Z3VhcmQ/dW5kZWZpbmVkOm47bj1mdW5jJiZuPT1udWxsP2Z1bmMubGVuZ3RoOm47cmV0dXJuIGNyZWF0ZVdyYXAoZnVuYyxXUkFQX0FSWV9GTEFHLHVuZGVmaW5lZCx1bmRlZmluZWQsdW5kZWZpbmVkLHVuZGVmaW5lZCxuKX1mdW5jdGlvbiBiZWZvcmUobixmdW5jKXt2YXIgcmVzdWx0O2lmKHR5cGVvZiBmdW5jIT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoRlVOQ19FUlJPUl9URVhUKTtuPXRvSW50ZWdlcihuKTtyZXR1cm4gZnVuY3Rpb24oKXtpZigtLW4+MClyZXN1bHQ9ZnVuYy5hcHBseSh0aGlzLGFyZ3VtZW50cyk7aWYobjw9MSlmdW5jPXVuZGVmaW5lZDtyZXR1cm4gcmVzdWx0fX12YXIgYmluZD1iYXNlUmVzdChmdW5jdGlvbihmdW5jLHRoaXNBcmcscGFydGlhbHMpe3ZhciBiaXRtYXNrPVdSQVBfQklORF9GTEFHOwppZihwYXJ0aWFscy5sZW5ndGgpe3ZhciBob2xkZXJzPXJlcGxhY2VIb2xkZXJzKHBhcnRpYWxzLGdldEhvbGRlcihiaW5kKSk7Yml0bWFza3w9V1JBUF9QQVJUSUFMX0ZMQUd9cmV0dXJuIGNyZWF0ZVdyYXAoZnVuYyxiaXRtYXNrLHRoaXNBcmcscGFydGlhbHMsaG9sZGVycyl9KTt2YXIgYmluZEtleT1iYXNlUmVzdChmdW5jdGlvbihvYmplY3Qsa2V5LHBhcnRpYWxzKXt2YXIgYml0bWFzaz1XUkFQX0JJTkRfRkxBR3xXUkFQX0JJTkRfS0VZX0ZMQUc7aWYocGFydGlhbHMubGVuZ3RoKXt2YXIgaG9sZGVycz1yZXBsYWNlSG9sZGVycyhwYXJ0aWFscyxnZXRIb2xkZXIoYmluZEtleSkpO2JpdG1hc2t8PVdSQVBfUEFSVElBTF9GTEFHfXJldHVybiBjcmVhdGVXcmFwKGtleSxiaXRtYXNrLG9iamVjdCxwYXJ0aWFscyxob2xkZXJzKX0pO2Z1bmN0aW9uIGN1cnJ5KGZ1bmMsYXJpdHksZ3VhcmQpe2FyaXR5PWd1YXJkP3VuZGVmaW5lZDphcml0eTt2YXIgcmVzdWx0PWNyZWF0ZVdyYXAoZnVuYywKV1JBUF9DVVJSWV9GTEFHLHVuZGVmaW5lZCx1bmRlZmluZWQsdW5kZWZpbmVkLHVuZGVmaW5lZCx1bmRlZmluZWQsYXJpdHkpO3Jlc3VsdC5wbGFjZWhvbGRlcj1jdXJyeS5wbGFjZWhvbGRlcjtyZXR1cm4gcmVzdWx0fWZ1bmN0aW9uIGN1cnJ5UmlnaHQoZnVuYyxhcml0eSxndWFyZCl7YXJpdHk9Z3VhcmQ/dW5kZWZpbmVkOmFyaXR5O3ZhciByZXN1bHQ9Y3JlYXRlV3JhcChmdW5jLFdSQVBfQ1VSUllfUklHSFRfRkxBRyx1bmRlZmluZWQsdW5kZWZpbmVkLHVuZGVmaW5lZCx1bmRlZmluZWQsdW5kZWZpbmVkLGFyaXR5KTtyZXN1bHQucGxhY2Vob2xkZXI9Y3VycnlSaWdodC5wbGFjZWhvbGRlcjtyZXR1cm4gcmVzdWx0fWZ1bmN0aW9uIGRlYm91bmNlKGZ1bmMsd2FpdCxvcHRpb25zKXt2YXIgbGFzdEFyZ3MsbGFzdFRoaXMsbWF4V2FpdCxyZXN1bHQsdGltZXJJZCxsYXN0Q2FsbFRpbWUsbGFzdEludm9rZVRpbWU9MCxsZWFkaW5nPWZhbHNlLG1heGluZz1mYWxzZSx0cmFpbGluZz10cnVlOwppZih0eXBlb2YgZnVuYyE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKEZVTkNfRVJST1JfVEVYVCk7d2FpdD10b051bWJlcih3YWl0KXx8MDtpZihpc09iamVjdChvcHRpb25zKSl7bGVhZGluZz0hIW9wdGlvbnMubGVhZGluZzttYXhpbmc9Im1heFdhaXQiaW4gb3B0aW9uczttYXhXYWl0PW1heGluZz9uYXRpdmVNYXgodG9OdW1iZXIob3B0aW9ucy5tYXhXYWl0KXx8MCx3YWl0KTptYXhXYWl0O3RyYWlsaW5nPSJ0cmFpbGluZyJpbiBvcHRpb25zPyEhb3B0aW9ucy50cmFpbGluZzp0cmFpbGluZ31mdW5jdGlvbiBpbnZva2VGdW5jKHRpbWUpe3ZhciBhcmdzPWxhc3RBcmdzLHRoaXNBcmc9bGFzdFRoaXM7bGFzdEFyZ3M9bGFzdFRoaXM9dW5kZWZpbmVkO2xhc3RJbnZva2VUaW1lPXRpbWU7cmVzdWx0PWZ1bmMuYXBwbHkodGhpc0FyZyxhcmdzKTtyZXR1cm4gcmVzdWx0fWZ1bmN0aW9uIGxlYWRpbmdFZGdlKHRpbWUpe2xhc3RJbnZva2VUaW1lPXRpbWU7dGltZXJJZD1zZXRUaW1lb3V0KHRpbWVyRXhwaXJlZCwKd2FpdCk7cmV0dXJuIGxlYWRpbmc/aW52b2tlRnVuYyh0aW1lKTpyZXN1bHR9ZnVuY3Rpb24gcmVtYWluaW5nV2FpdCh0aW1lKXt2YXIgdGltZVNpbmNlTGFzdENhbGw9dGltZS1sYXN0Q2FsbFRpbWUsdGltZVNpbmNlTGFzdEludm9rZT10aW1lLWxhc3RJbnZva2VUaW1lLHRpbWVXYWl0aW5nPXdhaXQtdGltZVNpbmNlTGFzdENhbGw7cmV0dXJuIG1heGluZz9uYXRpdmVNaW4odGltZVdhaXRpbmcsbWF4V2FpdC10aW1lU2luY2VMYXN0SW52b2tlKTp0aW1lV2FpdGluZ31mdW5jdGlvbiBzaG91bGRJbnZva2UodGltZSl7dmFyIHRpbWVTaW5jZUxhc3RDYWxsPXRpbWUtbGFzdENhbGxUaW1lLHRpbWVTaW5jZUxhc3RJbnZva2U9dGltZS1sYXN0SW52b2tlVGltZTtyZXR1cm4gbGFzdENhbGxUaW1lPT09dW5kZWZpbmVkfHx0aW1lU2luY2VMYXN0Q2FsbD49d2FpdHx8dGltZVNpbmNlTGFzdENhbGw8MHx8bWF4aW5nJiZ0aW1lU2luY2VMYXN0SW52b2tlPj1tYXhXYWl0fWZ1bmN0aW9uIHRpbWVyRXhwaXJlZCgpe3ZhciB0aW1lPQpub3coKTtpZihzaG91bGRJbnZva2UodGltZSkpcmV0dXJuIHRyYWlsaW5nRWRnZSh0aW1lKTt0aW1lcklkPXNldFRpbWVvdXQodGltZXJFeHBpcmVkLHJlbWFpbmluZ1dhaXQodGltZSkpfWZ1bmN0aW9uIHRyYWlsaW5nRWRnZSh0aW1lKXt0aW1lcklkPXVuZGVmaW5lZDtpZih0cmFpbGluZyYmbGFzdEFyZ3MpcmV0dXJuIGludm9rZUZ1bmModGltZSk7bGFzdEFyZ3M9bGFzdFRoaXM9dW5kZWZpbmVkO3JldHVybiByZXN1bHR9ZnVuY3Rpb24gY2FuY2VsKCl7aWYodGltZXJJZCE9PXVuZGVmaW5lZCljbGVhclRpbWVvdXQodGltZXJJZCk7bGFzdEludm9rZVRpbWU9MDtsYXN0QXJncz1sYXN0Q2FsbFRpbWU9bGFzdFRoaXM9dGltZXJJZD11bmRlZmluZWR9ZnVuY3Rpb24gZmx1c2goKXtyZXR1cm4gdGltZXJJZD09PXVuZGVmaW5lZD9yZXN1bHQ6dHJhaWxpbmdFZGdlKG5vdygpKX1mdW5jdGlvbiBkZWJvdW5jZWQoKXt2YXIgdGltZT1ub3coKSxpc0ludm9raW5nPXNob3VsZEludm9rZSh0aW1lKTsKbGFzdEFyZ3M9YXJndW1lbnRzO2xhc3RUaGlzPXRoaXM7bGFzdENhbGxUaW1lPXRpbWU7aWYoaXNJbnZva2luZyl7aWYodGltZXJJZD09PXVuZGVmaW5lZClyZXR1cm4gbGVhZGluZ0VkZ2UobGFzdENhbGxUaW1lKTtpZihtYXhpbmcpe3RpbWVySWQ9c2V0VGltZW91dCh0aW1lckV4cGlyZWQsd2FpdCk7cmV0dXJuIGludm9rZUZ1bmMobGFzdENhbGxUaW1lKX19aWYodGltZXJJZD09PXVuZGVmaW5lZCl0aW1lcklkPXNldFRpbWVvdXQodGltZXJFeHBpcmVkLHdhaXQpO3JldHVybiByZXN1bHR9ZGVib3VuY2VkLmNhbmNlbD1jYW5jZWw7ZGVib3VuY2VkLmZsdXNoPWZsdXNoO3JldHVybiBkZWJvdW5jZWR9dmFyIGRlZmVyPWJhc2VSZXN0KGZ1bmN0aW9uKGZ1bmMsYXJncyl7cmV0dXJuIGJhc2VEZWxheShmdW5jLDEsYXJncyl9KTt2YXIgZGVsYXk9YmFzZVJlc3QoZnVuY3Rpb24oZnVuYyx3YWl0LGFyZ3Mpe3JldHVybiBiYXNlRGVsYXkoZnVuYyx0b051bWJlcih3YWl0KXx8MCxhcmdzKX0pOwpmdW5jdGlvbiBmbGlwKGZ1bmMpe3JldHVybiBjcmVhdGVXcmFwKGZ1bmMsV1JBUF9GTElQX0ZMQUcpfWZ1bmN0aW9uIG1lbW9pemUoZnVuYyxyZXNvbHZlcil7aWYodHlwZW9mIGZ1bmMhPSJmdW5jdGlvbiJ8fHJlc29sdmVyIT1udWxsJiZ0eXBlb2YgcmVzb2x2ZXIhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpO3ZhciBtZW1vaXplZD1mdW5jdGlvbigpe3ZhciBhcmdzPWFyZ3VtZW50cyxrZXk9cmVzb2x2ZXI/cmVzb2x2ZXIuYXBwbHkodGhpcyxhcmdzKTphcmdzWzBdLGNhY2hlPW1lbW9pemVkLmNhY2hlO2lmKGNhY2hlLmhhcyhrZXkpKXJldHVybiBjYWNoZS5nZXQoa2V5KTt2YXIgcmVzdWx0PWZ1bmMuYXBwbHkodGhpcyxhcmdzKTttZW1vaXplZC5jYWNoZT1jYWNoZS5zZXQoa2V5LHJlc3VsdCl8fGNhY2hlO3JldHVybiByZXN1bHR9O21lbW9pemVkLmNhY2hlPW5ldyAobWVtb2l6ZS5DYWNoZXx8TWFwQ2FjaGUpO3JldHVybiBtZW1vaXplZH0KbWVtb2l6ZS5DYWNoZT1NYXBDYWNoZTtmdW5jdGlvbiBuZWdhdGUocHJlZGljYXRlKXtpZih0eXBlb2YgcHJlZGljYXRlIT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoRlVOQ19FUlJPUl9URVhUKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYXJncz1hcmd1bWVudHM7c3dpdGNoKGFyZ3MubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIXByZWRpY2F0ZS5jYWxsKHRoaXMpO2Nhc2UgMTpyZXR1cm4hcHJlZGljYXRlLmNhbGwodGhpcyxhcmdzWzBdKTtjYXNlIDI6cmV0dXJuIXByZWRpY2F0ZS5jYWxsKHRoaXMsYXJnc1swXSxhcmdzWzFdKTtjYXNlIDM6cmV0dXJuIXByZWRpY2F0ZS5jYWxsKHRoaXMsYXJnc1swXSxhcmdzWzFdLGFyZ3NbMl0pfXJldHVybiFwcmVkaWNhdGUuYXBwbHkodGhpcyxhcmdzKX19ZnVuY3Rpb24gb25jZShmdW5jKXtyZXR1cm4gYmVmb3JlKDIsZnVuYyl9dmFyIG92ZXJBcmdzPWNhc3RSZXN0KGZ1bmN0aW9uKGZ1bmMsdHJhbnNmb3Jtcyl7dHJhbnNmb3Jtcz10cmFuc2Zvcm1zLmxlbmd0aD09CjEmJmlzQXJyYXkodHJhbnNmb3Jtc1swXSk/YXJyYXlNYXAodHJhbnNmb3Jtc1swXSxiYXNlVW5hcnkoZ2V0SXRlcmF0ZWUoKSkpOmFycmF5TWFwKGJhc2VGbGF0dGVuKHRyYW5zZm9ybXMsMSksYmFzZVVuYXJ5KGdldEl0ZXJhdGVlKCkpKTt2YXIgZnVuY3NMZW5ndGg9dHJhbnNmb3Jtcy5sZW5ndGg7cmV0dXJuIGJhc2VSZXN0KGZ1bmN0aW9uKGFyZ3Mpe3ZhciBpbmRleD0tMSxsZW5ndGg9bmF0aXZlTWluKGFyZ3MubGVuZ3RoLGZ1bmNzTGVuZ3RoKTt3aGlsZSgrK2luZGV4PGxlbmd0aClhcmdzW2luZGV4XT10cmFuc2Zvcm1zW2luZGV4XS5jYWxsKHRoaXMsYXJnc1tpbmRleF0pO3JldHVybiBhcHBseShmdW5jLHRoaXMsYXJncyl9KX0pO3ZhciBwYXJ0aWFsPWJhc2VSZXN0KGZ1bmN0aW9uKGZ1bmMscGFydGlhbHMpe3ZhciBob2xkZXJzPXJlcGxhY2VIb2xkZXJzKHBhcnRpYWxzLGdldEhvbGRlcihwYXJ0aWFsKSk7cmV0dXJuIGNyZWF0ZVdyYXAoZnVuYyxXUkFQX1BBUlRJQUxfRkxBRywKdW5kZWZpbmVkLHBhcnRpYWxzLGhvbGRlcnMpfSk7dmFyIHBhcnRpYWxSaWdodD1iYXNlUmVzdChmdW5jdGlvbihmdW5jLHBhcnRpYWxzKXt2YXIgaG9sZGVycz1yZXBsYWNlSG9sZGVycyhwYXJ0aWFscyxnZXRIb2xkZXIocGFydGlhbFJpZ2h0KSk7cmV0dXJuIGNyZWF0ZVdyYXAoZnVuYyxXUkFQX1BBUlRJQUxfUklHSFRfRkxBRyx1bmRlZmluZWQscGFydGlhbHMsaG9sZGVycyl9KTt2YXIgcmVhcmc9ZmxhdFJlc3QoZnVuY3Rpb24oZnVuYyxpbmRleGVzKXtyZXR1cm4gY3JlYXRlV3JhcChmdW5jLFdSQVBfUkVBUkdfRkxBRyx1bmRlZmluZWQsdW5kZWZpbmVkLHVuZGVmaW5lZCxpbmRleGVzKX0pO2Z1bmN0aW9uIHJlc3QoZnVuYyxzdGFydCl7aWYodHlwZW9mIGZ1bmMhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpO3N0YXJ0PXN0YXJ0PT09dW5kZWZpbmVkP3N0YXJ0OnRvSW50ZWdlcihzdGFydCk7cmV0dXJuIGJhc2VSZXN0KGZ1bmMsc3RhcnQpfQpmdW5jdGlvbiBzcHJlYWQoZnVuYyxzdGFydCl7aWYodHlwZW9mIGZ1bmMhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpO3N0YXJ0PXN0YXJ0PT1udWxsPzA6bmF0aXZlTWF4KHRvSW50ZWdlcihzdGFydCksMCk7cmV0dXJuIGJhc2VSZXN0KGZ1bmN0aW9uKGFyZ3Mpe3ZhciBhcnJheT1hcmdzW3N0YXJ0XSxvdGhlckFyZ3M9Y2FzdFNsaWNlKGFyZ3MsMCxzdGFydCk7aWYoYXJyYXkpYXJyYXlQdXNoKG90aGVyQXJncyxhcnJheSk7cmV0dXJuIGFwcGx5KGZ1bmMsdGhpcyxvdGhlckFyZ3MpfSl9ZnVuY3Rpb24gdGhyb3R0bGUoZnVuYyx3YWl0LG9wdGlvbnMpe3ZhciBsZWFkaW5nPXRydWUsdHJhaWxpbmc9dHJ1ZTtpZih0eXBlb2YgZnVuYyE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKEZVTkNfRVJST1JfVEVYVCk7aWYoaXNPYmplY3Qob3B0aW9ucykpe2xlYWRpbmc9ImxlYWRpbmciaW4gb3B0aW9ucz8hIW9wdGlvbnMubGVhZGluZzoKbGVhZGluZzt0cmFpbGluZz0idHJhaWxpbmciaW4gb3B0aW9ucz8hIW9wdGlvbnMudHJhaWxpbmc6dHJhaWxpbmd9cmV0dXJuIGRlYm91bmNlKGZ1bmMsd2FpdCx7ImxlYWRpbmciOmxlYWRpbmcsIm1heFdhaXQiOndhaXQsInRyYWlsaW5nIjp0cmFpbGluZ30pfWZ1bmN0aW9uIHVuYXJ5KGZ1bmMpe3JldHVybiBhcnkoZnVuYywxKX1mdW5jdGlvbiB3cmFwKHZhbHVlLHdyYXBwZXIpe3JldHVybiBwYXJ0aWFsKGNhc3RGdW5jdGlvbih3cmFwcGVyKSx2YWx1ZSl9ZnVuY3Rpb24gY2FzdEFycmF5KCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuW107dmFyIHZhbHVlPWFyZ3VtZW50c1swXTtyZXR1cm4gaXNBcnJheSh2YWx1ZSk/dmFsdWU6W3ZhbHVlXX1mdW5jdGlvbiBjbG9uZSh2YWx1ZSl7cmV0dXJuIGJhc2VDbG9uZSh2YWx1ZSxDTE9ORV9TWU1CT0xTX0ZMQUcpfWZ1bmN0aW9uIGNsb25lV2l0aCh2YWx1ZSxjdXN0b21pemVyKXtjdXN0b21pemVyPXR5cGVvZiBjdXN0b21pemVyPT0KImZ1bmN0aW9uIj9jdXN0b21pemVyOnVuZGVmaW5lZDtyZXR1cm4gYmFzZUNsb25lKHZhbHVlLENMT05FX1NZTUJPTFNfRkxBRyxjdXN0b21pemVyKX1mdW5jdGlvbiBjbG9uZURlZXAodmFsdWUpe3JldHVybiBiYXNlQ2xvbmUodmFsdWUsQ0xPTkVfREVFUF9GTEFHfENMT05FX1NZTUJPTFNfRkxBRyl9ZnVuY3Rpb24gY2xvbmVEZWVwV2l0aCh2YWx1ZSxjdXN0b21pemVyKXtjdXN0b21pemVyPXR5cGVvZiBjdXN0b21pemVyPT0iZnVuY3Rpb24iP2N1c3RvbWl6ZXI6dW5kZWZpbmVkO3JldHVybiBiYXNlQ2xvbmUodmFsdWUsQ0xPTkVfREVFUF9GTEFHfENMT05FX1NZTUJPTFNfRkxBRyxjdXN0b21pemVyKX1mdW5jdGlvbiBjb25mb3Jtc1RvKG9iamVjdCxzb3VyY2Upe3JldHVybiBzb3VyY2U9PW51bGx8fGJhc2VDb25mb3Jtc1RvKG9iamVjdCxzb3VyY2Usa2V5cyhzb3VyY2UpKX1mdW5jdGlvbiBlcSh2YWx1ZSxvdGhlcil7cmV0dXJuIHZhbHVlPT09b3RoZXJ8fHZhbHVlIT09dmFsdWUmJgpvdGhlciE9PW90aGVyfXZhciBndD1jcmVhdGVSZWxhdGlvbmFsT3BlcmF0aW9uKGJhc2VHdCk7dmFyIGd0ZT1jcmVhdGVSZWxhdGlvbmFsT3BlcmF0aW9uKGZ1bmN0aW9uKHZhbHVlLG90aGVyKXtyZXR1cm4gdmFsdWU+PW90aGVyfSk7dmFyIGlzQXJndW1lbnRzPWJhc2VJc0FyZ3VtZW50cyhmdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHN9KCkpP2Jhc2VJc0FyZ3VtZW50czpmdW5jdGlvbih2YWx1ZSl7cmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkmJmhhc093blByb3BlcnR5LmNhbGwodmFsdWUsImNhbGxlZSIpJiYhcHJvcGVydHlJc0VudW1lcmFibGUuY2FsbCh2YWx1ZSwiY2FsbGVlIil9O3ZhciBpc0FycmF5PUFycmF5LmlzQXJyYXk7dmFyIGlzQXJyYXlCdWZmZXI9bm9kZUlzQXJyYXlCdWZmZXI/YmFzZVVuYXJ5KG5vZGVJc0FycmF5QnVmZmVyKTpiYXNlSXNBcnJheUJ1ZmZlcjtmdW5jdGlvbiBpc0FycmF5TGlrZSh2YWx1ZSl7cmV0dXJuIHZhbHVlIT1udWxsJiZpc0xlbmd0aCh2YWx1ZS5sZW5ndGgpJiYKIWlzRnVuY3Rpb24odmFsdWUpfWZ1bmN0aW9uIGlzQXJyYXlMaWtlT2JqZWN0KHZhbHVlKXtyZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSYmaXNBcnJheUxpa2UodmFsdWUpfWZ1bmN0aW9uIGlzQm9vbGVhbih2YWx1ZSl7cmV0dXJuIHZhbHVlPT09dHJ1ZXx8dmFsdWU9PT1mYWxzZXx8aXNPYmplY3RMaWtlKHZhbHVlKSYmYmFzZUdldFRhZyh2YWx1ZSk9PWJvb2xUYWd9dmFyIGlzQnVmZmVyPW5hdGl2ZUlzQnVmZmVyfHxzdHViRmFsc2U7dmFyIGlzRGF0ZT1ub2RlSXNEYXRlP2Jhc2VVbmFyeShub2RlSXNEYXRlKTpiYXNlSXNEYXRlO2Z1bmN0aW9uIGlzRWxlbWVudCh2YWx1ZSl7cmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkmJnZhbHVlLm5vZGVUeXBlPT09MSYmIWlzUGxhaW5PYmplY3QodmFsdWUpfWZ1bmN0aW9uIGlzRW1wdHkodmFsdWUpe2lmKHZhbHVlPT1udWxsKXJldHVybiB0cnVlO2lmKGlzQXJyYXlMaWtlKHZhbHVlKSYmKGlzQXJyYXkodmFsdWUpfHx0eXBlb2YgdmFsdWU9PQoic3RyaW5nInx8dHlwZW9mIHZhbHVlLnNwbGljZT09ImZ1bmN0aW9uInx8aXNCdWZmZXIodmFsdWUpfHxpc1R5cGVkQXJyYXkodmFsdWUpfHxpc0FyZ3VtZW50cyh2YWx1ZSkpKXJldHVybiF2YWx1ZS5sZW5ndGg7dmFyIHRhZz1nZXRUYWcodmFsdWUpO2lmKHRhZz09bWFwVGFnfHx0YWc9PXNldFRhZylyZXR1cm4hdmFsdWUuc2l6ZTtpZihpc1Byb3RvdHlwZSh2YWx1ZSkpcmV0dXJuIWJhc2VLZXlzKHZhbHVlKS5sZW5ndGg7Zm9yKHZhciBrZXkgaW4gdmFsdWUpaWYoaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSxrZXkpKXJldHVybiBmYWxzZTtyZXR1cm4gdHJ1ZX1mdW5jdGlvbiBpc0VxdWFsKHZhbHVlLG90aGVyKXtyZXR1cm4gYmFzZUlzRXF1YWwodmFsdWUsb3RoZXIpfWZ1bmN0aW9uIGlzRXF1YWxXaXRoKHZhbHVlLG90aGVyLGN1c3RvbWl6ZXIpe2N1c3RvbWl6ZXI9dHlwZW9mIGN1c3RvbWl6ZXI9PSJmdW5jdGlvbiI/Y3VzdG9taXplcjp1bmRlZmluZWQ7dmFyIHJlc3VsdD0KY3VzdG9taXplcj9jdXN0b21pemVyKHZhbHVlLG90aGVyKTp1bmRlZmluZWQ7cmV0dXJuIHJlc3VsdD09PXVuZGVmaW5lZD9iYXNlSXNFcXVhbCh2YWx1ZSxvdGhlcix1bmRlZmluZWQsY3VzdG9taXplcik6ISFyZXN1bHR9ZnVuY3Rpb24gaXNFcnJvcih2YWx1ZSl7aWYoIWlzT2JqZWN0TGlrZSh2YWx1ZSkpcmV0dXJuIGZhbHNlO3ZhciB0YWc9YmFzZUdldFRhZyh2YWx1ZSk7cmV0dXJuIHRhZz09ZXJyb3JUYWd8fHRhZz09ZG9tRXhjVGFnfHx0eXBlb2YgdmFsdWUubWVzc2FnZT09InN0cmluZyImJnR5cGVvZiB2YWx1ZS5uYW1lPT0ic3RyaW5nIiYmIWlzUGxhaW5PYmplY3QodmFsdWUpfWZ1bmN0aW9uIGlzRmluaXRlKHZhbHVlKXtyZXR1cm4gdHlwZW9mIHZhbHVlPT0ibnVtYmVyIiYmbmF0aXZlSXNGaW5pdGUodmFsdWUpfWZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsdWUpe2lmKCFpc09iamVjdCh2YWx1ZSkpcmV0dXJuIGZhbHNlO3ZhciB0YWc9YmFzZUdldFRhZyh2YWx1ZSk7cmV0dXJuIHRhZz09CmZ1bmNUYWd8fHRhZz09Z2VuVGFnfHx0YWc9PWFzeW5jVGFnfHx0YWc9PXByb3h5VGFnfWZ1bmN0aW9uIGlzSW50ZWdlcih2YWx1ZSl7cmV0dXJuIHR5cGVvZiB2YWx1ZT09Im51bWJlciImJnZhbHVlPT10b0ludGVnZXIodmFsdWUpfWZ1bmN0aW9uIGlzTGVuZ3RoKHZhbHVlKXtyZXR1cm4gdHlwZW9mIHZhbHVlPT0ibnVtYmVyIiYmdmFsdWU+LTEmJnZhbHVlJTE9PTAmJnZhbHVlPD1NQVhfU0FGRV9JTlRFR0VSfWZ1bmN0aW9uIGlzT2JqZWN0KHZhbHVlKXt2YXIgdHlwZT10eXBlb2YgdmFsdWU7cmV0dXJuIHZhbHVlIT1udWxsJiYodHlwZT09Im9iamVjdCJ8fHR5cGU9PSJmdW5jdGlvbiIpfWZ1bmN0aW9uIGlzT2JqZWN0TGlrZSh2YWx1ZSl7cmV0dXJuIHZhbHVlIT1udWxsJiZ0eXBlb2YgdmFsdWU9PSJvYmplY3QifXZhciBpc01hcD1ub2RlSXNNYXA/YmFzZVVuYXJ5KG5vZGVJc01hcCk6YmFzZUlzTWFwO2Z1bmN0aW9uIGlzTWF0Y2gob2JqZWN0LHNvdXJjZSl7cmV0dXJuIG9iamVjdD09PQpzb3VyY2V8fGJhc2VJc01hdGNoKG9iamVjdCxzb3VyY2UsZ2V0TWF0Y2hEYXRhKHNvdXJjZSkpfWZ1bmN0aW9uIGlzTWF0Y2hXaXRoKG9iamVjdCxzb3VyY2UsY3VzdG9taXplcil7Y3VzdG9taXplcj10eXBlb2YgY3VzdG9taXplcj09ImZ1bmN0aW9uIj9jdXN0b21pemVyOnVuZGVmaW5lZDtyZXR1cm4gYmFzZUlzTWF0Y2gob2JqZWN0LHNvdXJjZSxnZXRNYXRjaERhdGEoc291cmNlKSxjdXN0b21pemVyKX1mdW5jdGlvbiBpc05hTih2YWx1ZSl7cmV0dXJuIGlzTnVtYmVyKHZhbHVlKSYmdmFsdWUhPSt2YWx1ZX1mdW5jdGlvbiBpc05hdGl2ZSh2YWx1ZSl7aWYoaXNNYXNrYWJsZSh2YWx1ZSkpdGhyb3cgbmV3IEVycm9yKENPUkVfRVJST1JfVEVYVCk7cmV0dXJuIGJhc2VJc05hdGl2ZSh2YWx1ZSl9ZnVuY3Rpb24gaXNOdWxsKHZhbHVlKXtyZXR1cm4gdmFsdWU9PT1udWxsfWZ1bmN0aW9uIGlzTmlsKHZhbHVlKXtyZXR1cm4gdmFsdWU9PW51bGx9ZnVuY3Rpb24gaXNOdW1iZXIodmFsdWUpe3JldHVybiB0eXBlb2YgdmFsdWU9PQoibnVtYmVyInx8aXNPYmplY3RMaWtlKHZhbHVlKSYmYmFzZUdldFRhZyh2YWx1ZSk9PW51bWJlclRhZ31mdW5jdGlvbiBpc1BsYWluT2JqZWN0KHZhbHVlKXtpZighaXNPYmplY3RMaWtlKHZhbHVlKXx8YmFzZUdldFRhZyh2YWx1ZSkhPW9iamVjdFRhZylyZXR1cm4gZmFsc2U7dmFyIHByb3RvPWdldFByb3RvdHlwZSh2YWx1ZSk7aWYocHJvdG89PT1udWxsKXJldHVybiB0cnVlO3ZhciBDdG9yPWhhc093blByb3BlcnR5LmNhbGwocHJvdG8sImNvbnN0cnVjdG9yIikmJnByb3RvLmNvbnN0cnVjdG9yO3JldHVybiB0eXBlb2YgQ3Rvcj09ImZ1bmN0aW9uIiYmQ3RvciBpbnN0YW5jZW9mIEN0b3ImJmZ1bmNUb1N0cmluZy5jYWxsKEN0b3IpPT1vYmplY3RDdG9yU3RyaW5nfXZhciBpc1JlZ0V4cD1ub2RlSXNSZWdFeHA/YmFzZVVuYXJ5KG5vZGVJc1JlZ0V4cCk6YmFzZUlzUmVnRXhwO2Z1bmN0aW9uIGlzU2FmZUludGVnZXIodmFsdWUpe3JldHVybiBpc0ludGVnZXIodmFsdWUpJiZ2YWx1ZT49Ci1NQVhfU0FGRV9JTlRFR0VSJiZ2YWx1ZTw9TUFYX1NBRkVfSU5URUdFUn12YXIgaXNTZXQ9bm9kZUlzU2V0P2Jhc2VVbmFyeShub2RlSXNTZXQpOmJhc2VJc1NldDtmdW5jdGlvbiBpc1N0cmluZyh2YWx1ZSl7cmV0dXJuIHR5cGVvZiB2YWx1ZT09InN0cmluZyJ8fCFpc0FycmF5KHZhbHVlKSYmaXNPYmplY3RMaWtlKHZhbHVlKSYmYmFzZUdldFRhZyh2YWx1ZSk9PXN0cmluZ1RhZ31mdW5jdGlvbiBpc1N5bWJvbCh2YWx1ZSl7cmV0dXJuIHR5cGVvZiB2YWx1ZT09InN5bWJvbCJ8fGlzT2JqZWN0TGlrZSh2YWx1ZSkmJmJhc2VHZXRUYWcodmFsdWUpPT1zeW1ib2xUYWd9dmFyIGlzVHlwZWRBcnJheT1ub2RlSXNUeXBlZEFycmF5P2Jhc2VVbmFyeShub2RlSXNUeXBlZEFycmF5KTpiYXNlSXNUeXBlZEFycmF5O2Z1bmN0aW9uIGlzVW5kZWZpbmVkKHZhbHVlKXtyZXR1cm4gdmFsdWU9PT11bmRlZmluZWR9ZnVuY3Rpb24gaXNXZWFrTWFwKHZhbHVlKXtyZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSYmCmdldFRhZyh2YWx1ZSk9PXdlYWtNYXBUYWd9ZnVuY3Rpb24gaXNXZWFrU2V0KHZhbHVlKXtyZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSYmYmFzZUdldFRhZyh2YWx1ZSk9PXdlYWtTZXRUYWd9dmFyIGx0PWNyZWF0ZVJlbGF0aW9uYWxPcGVyYXRpb24oYmFzZUx0KTt2YXIgbHRlPWNyZWF0ZVJlbGF0aW9uYWxPcGVyYXRpb24oZnVuY3Rpb24odmFsdWUsb3RoZXIpe3JldHVybiB2YWx1ZTw9b3RoZXJ9KTtmdW5jdGlvbiB0b0FycmF5KHZhbHVlKXtpZighdmFsdWUpcmV0dXJuW107aWYoaXNBcnJheUxpa2UodmFsdWUpKXJldHVybiBpc1N0cmluZyh2YWx1ZSk/c3RyaW5nVG9BcnJheSh2YWx1ZSk6Y29weUFycmF5KHZhbHVlKTtpZihzeW1JdGVyYXRvciYmdmFsdWVbc3ltSXRlcmF0b3JdKXJldHVybiBpdGVyYXRvclRvQXJyYXkodmFsdWVbc3ltSXRlcmF0b3JdKCkpO3ZhciB0YWc9Z2V0VGFnKHZhbHVlKSxmdW5jPXRhZz09bWFwVGFnP21hcFRvQXJyYXk6dGFnPT1zZXRUYWc/c2V0VG9BcnJheToKdmFsdWVzO3JldHVybiBmdW5jKHZhbHVlKX1mdW5jdGlvbiB0b0Zpbml0ZSh2YWx1ZSl7aWYoIXZhbHVlKXJldHVybiB2YWx1ZT09PTA/dmFsdWU6MDt2YWx1ZT10b051bWJlcih2YWx1ZSk7aWYodmFsdWU9PT1JTkZJTklUWXx8dmFsdWU9PT0tSU5GSU5JVFkpe3ZhciBzaWduPXZhbHVlPDA/LTE6MTtyZXR1cm4gc2lnbipNQVhfSU5URUdFUn1yZXR1cm4gdmFsdWU9PT12YWx1ZT92YWx1ZTowfWZ1bmN0aW9uIHRvSW50ZWdlcih2YWx1ZSl7dmFyIHJlc3VsdD10b0Zpbml0ZSh2YWx1ZSkscmVtYWluZGVyPXJlc3VsdCUxO3JldHVybiByZXN1bHQ9PT1yZXN1bHQ/cmVtYWluZGVyP3Jlc3VsdC1yZW1haW5kZXI6cmVzdWx0OjB9ZnVuY3Rpb24gdG9MZW5ndGgodmFsdWUpe3JldHVybiB2YWx1ZT9iYXNlQ2xhbXAodG9JbnRlZ2VyKHZhbHVlKSwwLE1BWF9BUlJBWV9MRU5HVEgpOjB9ZnVuY3Rpb24gdG9OdW1iZXIodmFsdWUpe2lmKHR5cGVvZiB2YWx1ZT09Im51bWJlciIpcmV0dXJuIHZhbHVlOwppZihpc1N5bWJvbCh2YWx1ZSkpcmV0dXJuIE5BTjtpZihpc09iamVjdCh2YWx1ZSkpe3ZhciBvdGhlcj10eXBlb2YgdmFsdWUudmFsdWVPZj09ImZ1bmN0aW9uIj92YWx1ZS52YWx1ZU9mKCk6dmFsdWU7dmFsdWU9aXNPYmplY3Qob3RoZXIpP290aGVyKyIiOm90aGVyfWlmKHR5cGVvZiB2YWx1ZSE9InN0cmluZyIpcmV0dXJuIHZhbHVlPT09MD92YWx1ZTordmFsdWU7dmFsdWU9dmFsdWUucmVwbGFjZShyZVRyaW0sIiIpO3ZhciBpc0JpbmFyeT1yZUlzQmluYXJ5LnRlc3QodmFsdWUpO3JldHVybiBpc0JpbmFyeXx8cmVJc09jdGFsLnRlc3QodmFsdWUpP2ZyZWVQYXJzZUludCh2YWx1ZS5zbGljZSgyKSxpc0JpbmFyeT8yOjgpOnJlSXNCYWRIZXgudGVzdCh2YWx1ZSk/TkFOOit2YWx1ZX1mdW5jdGlvbiB0b1BsYWluT2JqZWN0KHZhbHVlKXtyZXR1cm4gY29weU9iamVjdCh2YWx1ZSxrZXlzSW4odmFsdWUpKX1mdW5jdGlvbiB0b1NhZmVJbnRlZ2VyKHZhbHVlKXtyZXR1cm4gdmFsdWU/CmJhc2VDbGFtcCh0b0ludGVnZXIodmFsdWUpLC1NQVhfU0FGRV9JTlRFR0VSLE1BWF9TQUZFX0lOVEVHRVIpOnZhbHVlPT09MD92YWx1ZTowfWZ1bmN0aW9uIHRvU3RyaW5nKHZhbHVlKXtyZXR1cm4gdmFsdWU9PW51bGw/IiI6YmFzZVRvU3RyaW5nKHZhbHVlKX12YXIgYXNzaWduPWNyZWF0ZUFzc2lnbmVyKGZ1bmN0aW9uKG9iamVjdCxzb3VyY2Upe2lmKGlzUHJvdG90eXBlKHNvdXJjZSl8fGlzQXJyYXlMaWtlKHNvdXJjZSkpe2NvcHlPYmplY3Qoc291cmNlLGtleXMoc291cmNlKSxvYmplY3QpO3JldHVybn1mb3IodmFyIGtleSBpbiBzb3VyY2UpaWYoaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2Usa2V5KSlhc3NpZ25WYWx1ZShvYmplY3Qsa2V5LHNvdXJjZVtrZXldKX0pO3ZhciBhc3NpZ25Jbj1jcmVhdGVBc3NpZ25lcihmdW5jdGlvbihvYmplY3Qsc291cmNlKXtjb3B5T2JqZWN0KHNvdXJjZSxrZXlzSW4oc291cmNlKSxvYmplY3QpfSk7dmFyIGFzc2lnbkluV2l0aD1jcmVhdGVBc3NpZ25lcihmdW5jdGlvbihvYmplY3QsCnNvdXJjZSxzcmNJbmRleCxjdXN0b21pemVyKXtjb3B5T2JqZWN0KHNvdXJjZSxrZXlzSW4oc291cmNlKSxvYmplY3QsY3VzdG9taXplcil9KTt2YXIgYXNzaWduV2l0aD1jcmVhdGVBc3NpZ25lcihmdW5jdGlvbihvYmplY3Qsc291cmNlLHNyY0luZGV4LGN1c3RvbWl6ZXIpe2NvcHlPYmplY3Qoc291cmNlLGtleXMoc291cmNlKSxvYmplY3QsY3VzdG9taXplcil9KTt2YXIgYXQ9ZmxhdFJlc3QoYmFzZUF0KTtmdW5jdGlvbiBjcmVhdGUocHJvdG90eXBlLHByb3BlcnRpZXMpe3ZhciByZXN1bHQ9YmFzZUNyZWF0ZShwcm90b3R5cGUpO3JldHVybiBwcm9wZXJ0aWVzPT1udWxsP3Jlc3VsdDpiYXNlQXNzaWduKHJlc3VsdCxwcm9wZXJ0aWVzKX12YXIgZGVmYXVsdHM9YmFzZVJlc3QoZnVuY3Rpb24ob2JqZWN0LHNvdXJjZXMpe29iamVjdD1PYmplY3Qob2JqZWN0KTt2YXIgaW5kZXg9LTE7dmFyIGxlbmd0aD1zb3VyY2VzLmxlbmd0aDt2YXIgZ3VhcmQ9bGVuZ3RoPjI/c291cmNlc1syXToKdW5kZWZpbmVkO2lmKGd1YXJkJiZpc0l0ZXJhdGVlQ2FsbChzb3VyY2VzWzBdLHNvdXJjZXNbMV0sZ3VhcmQpKWxlbmd0aD0xO3doaWxlKCsraW5kZXg8bGVuZ3RoKXt2YXIgc291cmNlPXNvdXJjZXNbaW5kZXhdO3ZhciBwcm9wcz1rZXlzSW4oc291cmNlKTt2YXIgcHJvcHNJbmRleD0tMTt2YXIgcHJvcHNMZW5ndGg9cHJvcHMubGVuZ3RoO3doaWxlKCsrcHJvcHNJbmRleDxwcm9wc0xlbmd0aCl7dmFyIGtleT1wcm9wc1twcm9wc0luZGV4XTt2YXIgdmFsdWU9b2JqZWN0W2tleV07aWYodmFsdWU9PT11bmRlZmluZWR8fGVxKHZhbHVlLG9iamVjdFByb3RvW2tleV0pJiYhaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3Qsa2V5KSlvYmplY3Rba2V5XT1zb3VyY2Vba2V5XX19cmV0dXJuIG9iamVjdH0pO3ZhciBkZWZhdWx0c0RlZXA9YmFzZVJlc3QoZnVuY3Rpb24oYXJncyl7YXJncy5wdXNoKHVuZGVmaW5lZCxjdXN0b21EZWZhdWx0c01lcmdlKTtyZXR1cm4gYXBwbHkobWVyZ2VXaXRoLAp1bmRlZmluZWQsYXJncyl9KTtmdW5jdGlvbiBmaW5kS2V5KG9iamVjdCxwcmVkaWNhdGUpe3JldHVybiBiYXNlRmluZEtleShvYmplY3QsZ2V0SXRlcmF0ZWUocHJlZGljYXRlLDMpLGJhc2VGb3JPd24pfWZ1bmN0aW9uIGZpbmRMYXN0S2V5KG9iamVjdCxwcmVkaWNhdGUpe3JldHVybiBiYXNlRmluZEtleShvYmplY3QsZ2V0SXRlcmF0ZWUocHJlZGljYXRlLDMpLGJhc2VGb3JPd25SaWdodCl9ZnVuY3Rpb24gZm9ySW4ob2JqZWN0LGl0ZXJhdGVlKXtyZXR1cm4gb2JqZWN0PT1udWxsP29iamVjdDpiYXNlRm9yKG9iamVjdCxnZXRJdGVyYXRlZShpdGVyYXRlZSwzKSxrZXlzSW4pfWZ1bmN0aW9uIGZvckluUmlnaHQob2JqZWN0LGl0ZXJhdGVlKXtyZXR1cm4gb2JqZWN0PT1udWxsP29iamVjdDpiYXNlRm9yUmlnaHQob2JqZWN0LGdldEl0ZXJhdGVlKGl0ZXJhdGVlLDMpLGtleXNJbil9ZnVuY3Rpb24gZm9yT3duKG9iamVjdCxpdGVyYXRlZSl7cmV0dXJuIG9iamVjdCYmYmFzZUZvck93bihvYmplY3QsCmdldEl0ZXJhdGVlKGl0ZXJhdGVlLDMpKX1mdW5jdGlvbiBmb3JPd25SaWdodChvYmplY3QsaXRlcmF0ZWUpe3JldHVybiBvYmplY3QmJmJhc2VGb3JPd25SaWdodChvYmplY3QsZ2V0SXRlcmF0ZWUoaXRlcmF0ZWUsMykpfWZ1bmN0aW9uIGZ1bmN0aW9ucyhvYmplY3Qpe3JldHVybiBvYmplY3Q9PW51bGw/W106YmFzZUZ1bmN0aW9ucyhvYmplY3Qsa2V5cyhvYmplY3QpKX1mdW5jdGlvbiBmdW5jdGlvbnNJbihvYmplY3Qpe3JldHVybiBvYmplY3Q9PW51bGw/W106YmFzZUZ1bmN0aW9ucyhvYmplY3Qsa2V5c0luKG9iamVjdCkpfWZ1bmN0aW9uIGdldChvYmplY3QscGF0aCxkZWZhdWx0VmFsdWUpe3ZhciByZXN1bHQ9b2JqZWN0PT1udWxsP3VuZGVmaW5lZDpiYXNlR2V0KG9iamVjdCxwYXRoKTtyZXR1cm4gcmVzdWx0PT09dW5kZWZpbmVkP2RlZmF1bHRWYWx1ZTpyZXN1bHR9ZnVuY3Rpb24gaGFzKG9iamVjdCxwYXRoKXtyZXR1cm4gb2JqZWN0IT1udWxsJiZoYXNQYXRoKG9iamVjdCwKcGF0aCxiYXNlSGFzKX1mdW5jdGlvbiBoYXNJbihvYmplY3QscGF0aCl7cmV0dXJuIG9iamVjdCE9bnVsbCYmaGFzUGF0aChvYmplY3QscGF0aCxiYXNlSGFzSW4pfXZhciBpbnZlcnQ9Y3JlYXRlSW52ZXJ0ZXIoZnVuY3Rpb24ocmVzdWx0LHZhbHVlLGtleSl7aWYodmFsdWUhPW51bGwmJnR5cGVvZiB2YWx1ZS50b1N0cmluZyE9ImZ1bmN0aW9uIil2YWx1ZT1uYXRpdmVPYmplY3RUb1N0cmluZy5jYWxsKHZhbHVlKTtyZXN1bHRbdmFsdWVdPWtleX0sY29uc3RhbnQoaWRlbnRpdHkpKTt2YXIgaW52ZXJ0Qnk9Y3JlYXRlSW52ZXJ0ZXIoZnVuY3Rpb24ocmVzdWx0LHZhbHVlLGtleSl7aWYodmFsdWUhPW51bGwmJnR5cGVvZiB2YWx1ZS50b1N0cmluZyE9ImZ1bmN0aW9uIil2YWx1ZT1uYXRpdmVPYmplY3RUb1N0cmluZy5jYWxsKHZhbHVlKTtpZihoYXNPd25Qcm9wZXJ0eS5jYWxsKHJlc3VsdCx2YWx1ZSkpcmVzdWx0W3ZhbHVlXS5wdXNoKGtleSk7ZWxzZSByZXN1bHRbdmFsdWVdPVtrZXldfSwKZ2V0SXRlcmF0ZWUpO3ZhciBpbnZva2U9YmFzZVJlc3QoYmFzZUludm9rZSk7ZnVuY3Rpb24ga2V5cyhvYmplY3Qpe3JldHVybiBpc0FycmF5TGlrZShvYmplY3QpP2FycmF5TGlrZUtleXMob2JqZWN0KTpiYXNlS2V5cyhvYmplY3QpfWZ1bmN0aW9uIGtleXNJbihvYmplY3Qpe3JldHVybiBpc0FycmF5TGlrZShvYmplY3QpP2FycmF5TGlrZUtleXMob2JqZWN0LHRydWUpOmJhc2VLZXlzSW4ob2JqZWN0KX1mdW5jdGlvbiBtYXBLZXlzKG9iamVjdCxpdGVyYXRlZSl7dmFyIHJlc3VsdD17fTtpdGVyYXRlZT1nZXRJdGVyYXRlZShpdGVyYXRlZSwzKTtiYXNlRm9yT3duKG9iamVjdCxmdW5jdGlvbih2YWx1ZSxrZXksb2JqZWN0KXtiYXNlQXNzaWduVmFsdWUocmVzdWx0LGl0ZXJhdGVlKHZhbHVlLGtleSxvYmplY3QpLHZhbHVlKX0pO3JldHVybiByZXN1bHR9ZnVuY3Rpb24gbWFwVmFsdWVzKG9iamVjdCxpdGVyYXRlZSl7dmFyIHJlc3VsdD17fTtpdGVyYXRlZT1nZXRJdGVyYXRlZShpdGVyYXRlZSwKMyk7YmFzZUZvck93bihvYmplY3QsZnVuY3Rpb24odmFsdWUsa2V5LG9iamVjdCl7YmFzZUFzc2lnblZhbHVlKHJlc3VsdCxrZXksaXRlcmF0ZWUodmFsdWUsa2V5LG9iamVjdCkpfSk7cmV0dXJuIHJlc3VsdH12YXIgbWVyZ2U9Y3JlYXRlQXNzaWduZXIoZnVuY3Rpb24ob2JqZWN0LHNvdXJjZSxzcmNJbmRleCl7YmFzZU1lcmdlKG9iamVjdCxzb3VyY2Usc3JjSW5kZXgpfSk7dmFyIG1lcmdlV2l0aD1jcmVhdGVBc3NpZ25lcihmdW5jdGlvbihvYmplY3Qsc291cmNlLHNyY0luZGV4LGN1c3RvbWl6ZXIpe2Jhc2VNZXJnZShvYmplY3Qsc291cmNlLHNyY0luZGV4LGN1c3RvbWl6ZXIpfSk7dmFyIG9taXQ9ZmxhdFJlc3QoZnVuY3Rpb24ob2JqZWN0LHBhdGhzKXt2YXIgcmVzdWx0PXt9O2lmKG9iamVjdD09bnVsbClyZXR1cm4gcmVzdWx0O3ZhciBpc0RlZXA9ZmFsc2U7cGF0aHM9YXJyYXlNYXAocGF0aHMsZnVuY3Rpb24ocGF0aCl7cGF0aD1jYXN0UGF0aChwYXRoLG9iamVjdCk7aXNEZWVwfHwKKGlzRGVlcD1wYXRoLmxlbmd0aD4xKTtyZXR1cm4gcGF0aH0pO2NvcHlPYmplY3Qob2JqZWN0LGdldEFsbEtleXNJbihvYmplY3QpLHJlc3VsdCk7aWYoaXNEZWVwKXJlc3VsdD1iYXNlQ2xvbmUocmVzdWx0LENMT05FX0RFRVBfRkxBR3xDTE9ORV9GTEFUX0ZMQUd8Q0xPTkVfU1lNQk9MU19GTEFHLGN1c3RvbU9taXRDbG9uZSk7dmFyIGxlbmd0aD1wYXRocy5sZW5ndGg7d2hpbGUobGVuZ3RoLS0pYmFzZVVuc2V0KHJlc3VsdCxwYXRoc1tsZW5ndGhdKTtyZXR1cm4gcmVzdWx0fSk7ZnVuY3Rpb24gb21pdEJ5KG9iamVjdCxwcmVkaWNhdGUpe3JldHVybiBwaWNrQnkob2JqZWN0LG5lZ2F0ZShnZXRJdGVyYXRlZShwcmVkaWNhdGUpKSl9dmFyIHBpY2s9ZmxhdFJlc3QoZnVuY3Rpb24ob2JqZWN0LHBhdGhzKXtyZXR1cm4gb2JqZWN0PT1udWxsP3t9OmJhc2VQaWNrKG9iamVjdCxwYXRocyl9KTtmdW5jdGlvbiBwaWNrQnkob2JqZWN0LHByZWRpY2F0ZSl7aWYob2JqZWN0PT1udWxsKXJldHVybnt9Owp2YXIgcHJvcHM9YXJyYXlNYXAoZ2V0QWxsS2V5c0luKG9iamVjdCksZnVuY3Rpb24ocHJvcCl7cmV0dXJuW3Byb3BdfSk7cHJlZGljYXRlPWdldEl0ZXJhdGVlKHByZWRpY2F0ZSk7cmV0dXJuIGJhc2VQaWNrQnkob2JqZWN0LHByb3BzLGZ1bmN0aW9uKHZhbHVlLHBhdGgpe3JldHVybiBwcmVkaWNhdGUodmFsdWUscGF0aFswXSl9KX1mdW5jdGlvbiByZXN1bHQob2JqZWN0LHBhdGgsZGVmYXVsdFZhbHVlKXtwYXRoPWNhc3RQYXRoKHBhdGgsb2JqZWN0KTt2YXIgaW5kZXg9LTEsbGVuZ3RoPXBhdGgubGVuZ3RoO2lmKCFsZW5ndGgpe2xlbmd0aD0xO29iamVjdD11bmRlZmluZWR9d2hpbGUoKytpbmRleDxsZW5ndGgpe3ZhciB2YWx1ZT1vYmplY3Q9PW51bGw/dW5kZWZpbmVkOm9iamVjdFt0b0tleShwYXRoW2luZGV4XSldO2lmKHZhbHVlPT09dW5kZWZpbmVkKXtpbmRleD1sZW5ndGg7dmFsdWU9ZGVmYXVsdFZhbHVlfW9iamVjdD1pc0Z1bmN0aW9uKHZhbHVlKT92YWx1ZS5jYWxsKG9iamVjdCk6CnZhbHVlfXJldHVybiBvYmplY3R9ZnVuY3Rpb24gc2V0KG9iamVjdCxwYXRoLHZhbHVlKXtyZXR1cm4gb2JqZWN0PT1udWxsP29iamVjdDpiYXNlU2V0KG9iamVjdCxwYXRoLHZhbHVlKX1mdW5jdGlvbiBzZXRXaXRoKG9iamVjdCxwYXRoLHZhbHVlLGN1c3RvbWl6ZXIpe2N1c3RvbWl6ZXI9dHlwZW9mIGN1c3RvbWl6ZXI9PSJmdW5jdGlvbiI/Y3VzdG9taXplcjp1bmRlZmluZWQ7cmV0dXJuIG9iamVjdD09bnVsbD9vYmplY3Q6YmFzZVNldChvYmplY3QscGF0aCx2YWx1ZSxjdXN0b21pemVyKX12YXIgdG9QYWlycz1jcmVhdGVUb1BhaXJzKGtleXMpO3ZhciB0b1BhaXJzSW49Y3JlYXRlVG9QYWlycyhrZXlzSW4pO2Z1bmN0aW9uIHRyYW5zZm9ybShvYmplY3QsaXRlcmF0ZWUsYWNjdW11bGF0b3Ipe3ZhciBpc0Fycj1pc0FycmF5KG9iamVjdCksaXNBcnJMaWtlPWlzQXJyfHxpc0J1ZmZlcihvYmplY3QpfHxpc1R5cGVkQXJyYXkob2JqZWN0KTtpdGVyYXRlZT1nZXRJdGVyYXRlZShpdGVyYXRlZSwKNCk7aWYoYWNjdW11bGF0b3I9PW51bGwpe3ZhciBDdG9yPW9iamVjdCYmb2JqZWN0LmNvbnN0cnVjdG9yO2lmKGlzQXJyTGlrZSlhY2N1bXVsYXRvcj1pc0Fycj9uZXcgQ3RvcjpbXTtlbHNlIGlmKGlzT2JqZWN0KG9iamVjdCkpYWNjdW11bGF0b3I9aXNGdW5jdGlvbihDdG9yKT9iYXNlQ3JlYXRlKGdldFByb3RvdHlwZShvYmplY3QpKTp7fTtlbHNlIGFjY3VtdWxhdG9yPXt9fShpc0Fyckxpa2U/YXJyYXlFYWNoOmJhc2VGb3JPd24pKG9iamVjdCxmdW5jdGlvbih2YWx1ZSxpbmRleCxvYmplY3Qpe3JldHVybiBpdGVyYXRlZShhY2N1bXVsYXRvcix2YWx1ZSxpbmRleCxvYmplY3QpfSk7cmV0dXJuIGFjY3VtdWxhdG9yfWZ1bmN0aW9uIHVuc2V0KG9iamVjdCxwYXRoKXtyZXR1cm4gb2JqZWN0PT1udWxsP3RydWU6YmFzZVVuc2V0KG9iamVjdCxwYXRoKX1mdW5jdGlvbiB1cGRhdGUob2JqZWN0LHBhdGgsdXBkYXRlcil7cmV0dXJuIG9iamVjdD09bnVsbD9vYmplY3Q6YmFzZVVwZGF0ZShvYmplY3QsCnBhdGgsY2FzdEZ1bmN0aW9uKHVwZGF0ZXIpKX1mdW5jdGlvbiB1cGRhdGVXaXRoKG9iamVjdCxwYXRoLHVwZGF0ZXIsY3VzdG9taXplcil7Y3VzdG9taXplcj10eXBlb2YgY3VzdG9taXplcj09ImZ1bmN0aW9uIj9jdXN0b21pemVyOnVuZGVmaW5lZDtyZXR1cm4gb2JqZWN0PT1udWxsP29iamVjdDpiYXNlVXBkYXRlKG9iamVjdCxwYXRoLGNhc3RGdW5jdGlvbih1cGRhdGVyKSxjdXN0b21pemVyKX1mdW5jdGlvbiB2YWx1ZXMob2JqZWN0KXtyZXR1cm4gb2JqZWN0PT1udWxsP1tdOmJhc2VWYWx1ZXMob2JqZWN0LGtleXMob2JqZWN0KSl9ZnVuY3Rpb24gdmFsdWVzSW4ob2JqZWN0KXtyZXR1cm4gb2JqZWN0PT1udWxsP1tdOmJhc2VWYWx1ZXMob2JqZWN0LGtleXNJbihvYmplY3QpKX1mdW5jdGlvbiBjbGFtcChudW1iZXIsbG93ZXIsdXBwZXIpe2lmKHVwcGVyPT09dW5kZWZpbmVkKXt1cHBlcj1sb3dlcjtsb3dlcj11bmRlZmluZWR9aWYodXBwZXIhPT11bmRlZmluZWQpe3VwcGVyPQp0b051bWJlcih1cHBlcik7dXBwZXI9dXBwZXI9PT11cHBlcj91cHBlcjowfWlmKGxvd2VyIT09dW5kZWZpbmVkKXtsb3dlcj10b051bWJlcihsb3dlcik7bG93ZXI9bG93ZXI9PT1sb3dlcj9sb3dlcjowfXJldHVybiBiYXNlQ2xhbXAodG9OdW1iZXIobnVtYmVyKSxsb3dlcix1cHBlcil9ZnVuY3Rpb24gaW5SYW5nZShudW1iZXIsc3RhcnQsZW5kKXtzdGFydD10b0Zpbml0ZShzdGFydCk7aWYoZW5kPT09dW5kZWZpbmVkKXtlbmQ9c3RhcnQ7c3RhcnQ9MH1lbHNlIGVuZD10b0Zpbml0ZShlbmQpO251bWJlcj10b051bWJlcihudW1iZXIpO3JldHVybiBiYXNlSW5SYW5nZShudW1iZXIsc3RhcnQsZW5kKX1mdW5jdGlvbiByYW5kb20obG93ZXIsdXBwZXIsZmxvYXRpbmcpe2lmKGZsb2F0aW5nJiZ0eXBlb2YgZmxvYXRpbmchPSJib29sZWFuIiYmaXNJdGVyYXRlZUNhbGwobG93ZXIsdXBwZXIsZmxvYXRpbmcpKXVwcGVyPWZsb2F0aW5nPXVuZGVmaW5lZDtpZihmbG9hdGluZz09PXVuZGVmaW5lZClpZih0eXBlb2YgdXBwZXI9PQoiYm9vbGVhbiIpe2Zsb2F0aW5nPXVwcGVyO3VwcGVyPXVuZGVmaW5lZH1lbHNlIGlmKHR5cGVvZiBsb3dlcj09ImJvb2xlYW4iKXtmbG9hdGluZz1sb3dlcjtsb3dlcj11bmRlZmluZWR9aWYobG93ZXI9PT11bmRlZmluZWQmJnVwcGVyPT09dW5kZWZpbmVkKXtsb3dlcj0wO3VwcGVyPTF9ZWxzZXtsb3dlcj10b0Zpbml0ZShsb3dlcik7aWYodXBwZXI9PT11bmRlZmluZWQpe3VwcGVyPWxvd2VyO2xvd2VyPTB9ZWxzZSB1cHBlcj10b0Zpbml0ZSh1cHBlcil9aWYobG93ZXI+dXBwZXIpe3ZhciB0ZW1wPWxvd2VyO2xvd2VyPXVwcGVyO3VwcGVyPXRlbXB9aWYoZmxvYXRpbmd8fGxvd2VyJTF8fHVwcGVyJTEpe3ZhciByYW5kPW5hdGl2ZVJhbmRvbSgpO3JldHVybiBuYXRpdmVNaW4obG93ZXIrcmFuZCoodXBwZXItbG93ZXIrZnJlZVBhcnNlRmxvYXQoIjFlLSIrKChyYW5kKyIiKS5sZW5ndGgtMSkpKSx1cHBlcil9cmV0dXJuIGJhc2VSYW5kb20obG93ZXIsdXBwZXIpfXZhciBjYW1lbENhc2U9CmNyZWF0ZUNvbXBvdW5kZXIoZnVuY3Rpb24ocmVzdWx0LHdvcmQsaW5kZXgpe3dvcmQ9d29yZC50b0xvd2VyQ2FzZSgpO3JldHVybiByZXN1bHQrKGluZGV4P2NhcGl0YWxpemUod29yZCk6d29yZCl9KTtmdW5jdGlvbiBjYXBpdGFsaXplKHN0cmluZyl7cmV0dXJuIHVwcGVyRmlyc3QodG9TdHJpbmcoc3RyaW5nKS50b0xvd2VyQ2FzZSgpKX1mdW5jdGlvbiBkZWJ1cnIoc3RyaW5nKXtzdHJpbmc9dG9TdHJpbmcoc3RyaW5nKTtyZXR1cm4gc3RyaW5nJiZzdHJpbmcucmVwbGFjZShyZUxhdGluLGRlYnVyckxldHRlcikucmVwbGFjZShyZUNvbWJvTWFyaywiIil9ZnVuY3Rpb24gZW5kc1dpdGgoc3RyaW5nLHRhcmdldCxwb3NpdGlvbil7c3RyaW5nPXRvU3RyaW5nKHN0cmluZyk7dGFyZ2V0PWJhc2VUb1N0cmluZyh0YXJnZXQpO3ZhciBsZW5ndGg9c3RyaW5nLmxlbmd0aDtwb3NpdGlvbj1wb3NpdGlvbj09PXVuZGVmaW5lZD9sZW5ndGg6YmFzZUNsYW1wKHRvSW50ZWdlcihwb3NpdGlvbiksCjAsbGVuZ3RoKTt2YXIgZW5kPXBvc2l0aW9uO3Bvc2l0aW9uLT10YXJnZXQubGVuZ3RoO3JldHVybiBwb3NpdGlvbj49MCYmc3RyaW5nLnNsaWNlKHBvc2l0aW9uLGVuZCk9PXRhcmdldH1mdW5jdGlvbiBlc2NhcGUoc3RyaW5nKXtzdHJpbmc9dG9TdHJpbmcoc3RyaW5nKTtyZXR1cm4gc3RyaW5nJiZyZUhhc1VuZXNjYXBlZEh0bWwudGVzdChzdHJpbmcpP3N0cmluZy5yZXBsYWNlKHJlVW5lc2NhcGVkSHRtbCxlc2NhcGVIdG1sQ2hhcik6c3RyaW5nfWZ1bmN0aW9uIGVzY2FwZVJlZ0V4cChzdHJpbmcpe3N0cmluZz10b1N0cmluZyhzdHJpbmcpO3JldHVybiBzdHJpbmcmJnJlSGFzUmVnRXhwQ2hhci50ZXN0KHN0cmluZyk/c3RyaW5nLnJlcGxhY2UocmVSZWdFeHBDaGFyLCJcXCRceDI2Iik6c3RyaW5nfXZhciBrZWJhYkNhc2U9Y3JlYXRlQ29tcG91bmRlcihmdW5jdGlvbihyZXN1bHQsd29yZCxpbmRleCl7cmV0dXJuIHJlc3VsdCsoaW5kZXg/Ii0iOiIiKSt3b3JkLnRvTG93ZXJDYXNlKCl9KTsKdmFyIGxvd2VyQ2FzZT1jcmVhdGVDb21wb3VuZGVyKGZ1bmN0aW9uKHJlc3VsdCx3b3JkLGluZGV4KXtyZXR1cm4gcmVzdWx0KyhpbmRleD8iICI6IiIpK3dvcmQudG9Mb3dlckNhc2UoKX0pO3ZhciBsb3dlckZpcnN0PWNyZWF0ZUNhc2VGaXJzdCgidG9Mb3dlckNhc2UiKTtmdW5jdGlvbiBwYWQoc3RyaW5nLGxlbmd0aCxjaGFycyl7c3RyaW5nPXRvU3RyaW5nKHN0cmluZyk7bGVuZ3RoPXRvSW50ZWdlcihsZW5ndGgpO3ZhciBzdHJMZW5ndGg9bGVuZ3RoP3N0cmluZ1NpemUoc3RyaW5nKTowO2lmKCFsZW5ndGh8fHN0ckxlbmd0aD49bGVuZ3RoKXJldHVybiBzdHJpbmc7dmFyIG1pZD0obGVuZ3RoLXN0ckxlbmd0aCkvMjtyZXR1cm4gY3JlYXRlUGFkZGluZyhuYXRpdmVGbG9vcihtaWQpLGNoYXJzKStzdHJpbmcrY3JlYXRlUGFkZGluZyhuYXRpdmVDZWlsKG1pZCksY2hhcnMpfWZ1bmN0aW9uIHBhZEVuZChzdHJpbmcsbGVuZ3RoLGNoYXJzKXtzdHJpbmc9dG9TdHJpbmcoc3RyaW5nKTsKbGVuZ3RoPXRvSW50ZWdlcihsZW5ndGgpO3ZhciBzdHJMZW5ndGg9bGVuZ3RoP3N0cmluZ1NpemUoc3RyaW5nKTowO3JldHVybiBsZW5ndGgmJnN0ckxlbmd0aDxsZW5ndGg/c3RyaW5nK2NyZWF0ZVBhZGRpbmcobGVuZ3RoLXN0ckxlbmd0aCxjaGFycyk6c3RyaW5nfWZ1bmN0aW9uIHBhZFN0YXJ0KHN0cmluZyxsZW5ndGgsY2hhcnMpe3N0cmluZz10b1N0cmluZyhzdHJpbmcpO2xlbmd0aD10b0ludGVnZXIobGVuZ3RoKTt2YXIgc3RyTGVuZ3RoPWxlbmd0aD9zdHJpbmdTaXplKHN0cmluZyk6MDtyZXR1cm4gbGVuZ3RoJiZzdHJMZW5ndGg8bGVuZ3RoP2NyZWF0ZVBhZGRpbmcobGVuZ3RoLXN0ckxlbmd0aCxjaGFycykrc3RyaW5nOnN0cmluZ31mdW5jdGlvbiBwYXJzZUludChzdHJpbmcscmFkaXgsZ3VhcmQpe2lmKGd1YXJkfHxyYWRpeD09bnVsbClyYWRpeD0wO2Vsc2UgaWYocmFkaXgpcmFkaXg9K3JhZGl4O3JldHVybiBuYXRpdmVQYXJzZUludCh0b1N0cmluZyhzdHJpbmcpLnJlcGxhY2UocmVUcmltU3RhcnQsCiIiKSxyYWRpeHx8MCl9ZnVuY3Rpb24gcmVwZWF0KHN0cmluZyxuLGd1YXJkKXtpZihndWFyZD9pc0l0ZXJhdGVlQ2FsbChzdHJpbmcsbixndWFyZCk6bj09PXVuZGVmaW5lZCluPTE7ZWxzZSBuPXRvSW50ZWdlcihuKTtyZXR1cm4gYmFzZVJlcGVhdCh0b1N0cmluZyhzdHJpbmcpLG4pfWZ1bmN0aW9uIHJlcGxhY2UoKXt2YXIgYXJncz1hcmd1bWVudHMsc3RyaW5nPXRvU3RyaW5nKGFyZ3NbMF0pO3JldHVybiBhcmdzLmxlbmd0aDwzP3N0cmluZzpzdHJpbmcucmVwbGFjZShhcmdzWzFdLGFyZ3NbMl0pfXZhciBzbmFrZUNhc2U9Y3JlYXRlQ29tcG91bmRlcihmdW5jdGlvbihyZXN1bHQsd29yZCxpbmRleCl7cmV0dXJuIHJlc3VsdCsoaW5kZXg/Il8iOiIiKSt3b3JkLnRvTG93ZXJDYXNlKCl9KTtmdW5jdGlvbiBzcGxpdChzdHJpbmcsc2VwYXJhdG9yLGxpbWl0KXtpZihsaW1pdCYmdHlwZW9mIGxpbWl0IT0ibnVtYmVyIiYmaXNJdGVyYXRlZUNhbGwoc3RyaW5nLHNlcGFyYXRvcixsaW1pdCkpc2VwYXJhdG9yPQpsaW1pdD11bmRlZmluZWQ7bGltaXQ9bGltaXQ9PT11bmRlZmluZWQ/TUFYX0FSUkFZX0xFTkdUSDpsaW1pdD4+PjA7aWYoIWxpbWl0KXJldHVybltdO3N0cmluZz10b1N0cmluZyhzdHJpbmcpO2lmKHN0cmluZyYmKHR5cGVvZiBzZXBhcmF0b3I9PSJzdHJpbmcifHxzZXBhcmF0b3IhPW51bGwmJiFpc1JlZ0V4cChzZXBhcmF0b3IpKSl7c2VwYXJhdG9yPWJhc2VUb1N0cmluZyhzZXBhcmF0b3IpO2lmKCFzZXBhcmF0b3ImJmhhc1VuaWNvZGUoc3RyaW5nKSlyZXR1cm4gY2FzdFNsaWNlKHN0cmluZ1RvQXJyYXkoc3RyaW5nKSwwLGxpbWl0KX1yZXR1cm4gc3RyaW5nLnNwbGl0KHNlcGFyYXRvcixsaW1pdCl9dmFyIHN0YXJ0Q2FzZT1jcmVhdGVDb21wb3VuZGVyKGZ1bmN0aW9uKHJlc3VsdCx3b3JkLGluZGV4KXtyZXR1cm4gcmVzdWx0KyhpbmRleD8iICI6IiIpK3VwcGVyRmlyc3Qod29yZCl9KTtmdW5jdGlvbiBzdGFydHNXaXRoKHN0cmluZyx0YXJnZXQscG9zaXRpb24pe3N0cmluZz0KdG9TdHJpbmcoc3RyaW5nKTtwb3NpdGlvbj1wb3NpdGlvbj09bnVsbD8wOmJhc2VDbGFtcCh0b0ludGVnZXIocG9zaXRpb24pLDAsc3RyaW5nLmxlbmd0aCk7dGFyZ2V0PWJhc2VUb1N0cmluZyh0YXJnZXQpO3JldHVybiBzdHJpbmcuc2xpY2UocG9zaXRpb24scG9zaXRpb24rdGFyZ2V0Lmxlbmd0aCk9PXRhcmdldH1mdW5jdGlvbiB0ZW1wbGF0ZShzdHJpbmcsb3B0aW9ucyxndWFyZCl7dmFyIHNldHRpbmdzPWxvZGFzaC50ZW1wbGF0ZVNldHRpbmdzO2lmKGd1YXJkJiZpc0l0ZXJhdGVlQ2FsbChzdHJpbmcsb3B0aW9ucyxndWFyZCkpb3B0aW9ucz11bmRlZmluZWQ7c3RyaW5nPXRvU3RyaW5nKHN0cmluZyk7b3B0aW9ucz1hc3NpZ25JbldpdGgoe30sb3B0aW9ucyxzZXR0aW5ncyxjdXN0b21EZWZhdWx0c0Fzc2lnbkluKTt2YXIgaW1wb3J0cz1hc3NpZ25JbldpdGgoe30sb3B0aW9ucy5pbXBvcnRzLHNldHRpbmdzLmltcG9ydHMsY3VzdG9tRGVmYXVsdHNBc3NpZ25JbiksaW1wb3J0c0tleXM9CmtleXMoaW1wb3J0cyksaW1wb3J0c1ZhbHVlcz1iYXNlVmFsdWVzKGltcG9ydHMsaW1wb3J0c0tleXMpO3ZhciBpc0VzY2FwaW5nLGlzRXZhbHVhdGluZyxpbmRleD0wLGludGVycG9sYXRlPW9wdGlvbnMuaW50ZXJwb2xhdGV8fHJlTm9NYXRjaCxzb3VyY2U9Il9fcCArXHgzZCAnIjt2YXIgcmVEZWxpbWl0ZXJzPVJlZ0V4cCgob3B0aW9ucy5lc2NhcGV8fHJlTm9NYXRjaCkuc291cmNlKyJ8IitpbnRlcnBvbGF0ZS5zb3VyY2UrInwiKyhpbnRlcnBvbGF0ZT09PXJlSW50ZXJwb2xhdGU/cmVFc1RlbXBsYXRlOnJlTm9NYXRjaCkuc291cmNlKyJ8Iisob3B0aW9ucy5ldmFsdWF0ZXx8cmVOb01hdGNoKS5zb3VyY2UrInwkIiwiZyIpO3ZhciBzb3VyY2VVUkw9Ii8vIyBzb3VyY2VVUkxceDNkIisoInNvdXJjZVVSTCJpbiBvcHRpb25zP29wdGlvbnMuc291cmNlVVJMOiJsb2Rhc2gudGVtcGxhdGVTb3VyY2VzWyIrICsrdGVtcGxhdGVDb3VudGVyKyJdIikrIlxuIjtzdHJpbmcucmVwbGFjZShyZURlbGltaXRlcnMsCmZ1bmN0aW9uKG1hdGNoLGVzY2FwZVZhbHVlLGludGVycG9sYXRlVmFsdWUsZXNUZW1wbGF0ZVZhbHVlLGV2YWx1YXRlVmFsdWUsb2Zmc2V0KXtpbnRlcnBvbGF0ZVZhbHVlfHwoaW50ZXJwb2xhdGVWYWx1ZT1lc1RlbXBsYXRlVmFsdWUpO3NvdXJjZSs9c3RyaW5nLnNsaWNlKGluZGV4LG9mZnNldCkucmVwbGFjZShyZVVuZXNjYXBlZFN0cmluZyxlc2NhcGVTdHJpbmdDaGFyKTtpZihlc2NhcGVWYWx1ZSl7aXNFc2NhcGluZz10cnVlO3NvdXJjZSs9IicgK1xuX19lKCIrZXNjYXBlVmFsdWUrIikgK1xuJyJ9aWYoZXZhbHVhdGVWYWx1ZSl7aXNFdmFsdWF0aW5nPXRydWU7c291cmNlKz0iJztcbiIrZXZhbHVhdGVWYWx1ZSsiO1xuX19wICtceDNkICcifWlmKGludGVycG9sYXRlVmFsdWUpc291cmNlKz0iJyArXG4oKF9fdCBceDNkICgiK2ludGVycG9sYXRlVmFsdWUrIikpIFx4M2RceDNkIG51bGwgPyAnJyA6IF9fdCkgK1xuJyI7aW5kZXg9b2Zmc2V0K21hdGNoLmxlbmd0aDtyZXR1cm4gbWF0Y2h9KTsKc291cmNlKz0iJztcbiI7dmFyIHZhcmlhYmxlPW9wdGlvbnMudmFyaWFibGU7aWYoIXZhcmlhYmxlKXNvdXJjZT0id2l0aCAob2JqKSB7XG4iK3NvdXJjZSsiXG59XG4iO3NvdXJjZT0oaXNFdmFsdWF0aW5nP3NvdXJjZS5yZXBsYWNlKHJlRW1wdHlTdHJpbmdMZWFkaW5nLCIiKTpzb3VyY2UpLnJlcGxhY2UocmVFbXB0eVN0cmluZ01pZGRsZSwiJDEiKS5yZXBsYWNlKHJlRW1wdHlTdHJpbmdUcmFpbGluZywiJDE7Iik7c291cmNlPSJmdW5jdGlvbigiKyh2YXJpYWJsZXx8Im9iaiIpKyIpIHtcbiIrKHZhcmlhYmxlPyIiOiJvYmogfHwgKG9iaiBceDNkIHt9KTtcbiIpKyJ2YXIgX190LCBfX3AgXHgzZCAnJyIrKGlzRXNjYXBpbmc/IiwgX19lIFx4M2QgXy5lc2NhcGUiOiIiKSsoaXNFdmFsdWF0aW5nPyIsIF9faiBceDNkIEFycmF5LnByb3RvdHlwZS5qb2luO1xuIisiZnVuY3Rpb24gcHJpbnQoKSB7IF9fcCArXHgzZCBfX2ouY2FsbChhcmd1bWVudHMsICcnKSB9XG4iOiI7XG4iKStzb3VyY2UrCiJyZXR1cm4gX19wXG59Ijt2YXIgcmVzdWx0PWF0dGVtcHQoZnVuY3Rpb24oKXtyZXR1cm4gRnVuY3Rpb24oaW1wb3J0c0tleXMsc291cmNlVVJMKyJyZXR1cm4gIitzb3VyY2UpLmFwcGx5KHVuZGVmaW5lZCxpbXBvcnRzVmFsdWVzKX0pO3Jlc3VsdC5zb3VyY2U9c291cmNlO2lmKGlzRXJyb3IocmVzdWx0KSl0aHJvdyByZXN1bHQ7cmV0dXJuIHJlc3VsdH1mdW5jdGlvbiB0b0xvd2VyKHZhbHVlKXtyZXR1cm4gdG9TdHJpbmcodmFsdWUpLnRvTG93ZXJDYXNlKCl9ZnVuY3Rpb24gdG9VcHBlcih2YWx1ZSl7cmV0dXJuIHRvU3RyaW5nKHZhbHVlKS50b1VwcGVyQ2FzZSgpfWZ1bmN0aW9uIHRyaW0oc3RyaW5nLGNoYXJzLGd1YXJkKXtzdHJpbmc9dG9TdHJpbmcoc3RyaW5nKTtpZihzdHJpbmcmJihndWFyZHx8Y2hhcnM9PT11bmRlZmluZWQpKXJldHVybiBzdHJpbmcucmVwbGFjZShyZVRyaW0sIiIpO2lmKCFzdHJpbmd8fCEoY2hhcnM9YmFzZVRvU3RyaW5nKGNoYXJzKSkpcmV0dXJuIHN0cmluZzsKdmFyIHN0clN5bWJvbHM9c3RyaW5nVG9BcnJheShzdHJpbmcpLGNoclN5bWJvbHM9c3RyaW5nVG9BcnJheShjaGFycyksc3RhcnQ9Y2hhcnNTdGFydEluZGV4KHN0clN5bWJvbHMsY2hyU3ltYm9scyksZW5kPWNoYXJzRW5kSW5kZXgoc3RyU3ltYm9scyxjaHJTeW1ib2xzKSsxO3JldHVybiBjYXN0U2xpY2Uoc3RyU3ltYm9scyxzdGFydCxlbmQpLmpvaW4oIiIpfWZ1bmN0aW9uIHRyaW1FbmQoc3RyaW5nLGNoYXJzLGd1YXJkKXtzdHJpbmc9dG9TdHJpbmcoc3RyaW5nKTtpZihzdHJpbmcmJihndWFyZHx8Y2hhcnM9PT11bmRlZmluZWQpKXJldHVybiBzdHJpbmcucmVwbGFjZShyZVRyaW1FbmQsIiIpO2lmKCFzdHJpbmd8fCEoY2hhcnM9YmFzZVRvU3RyaW5nKGNoYXJzKSkpcmV0dXJuIHN0cmluZzt2YXIgc3RyU3ltYm9scz1zdHJpbmdUb0FycmF5KHN0cmluZyksZW5kPWNoYXJzRW5kSW5kZXgoc3RyU3ltYm9scyxzdHJpbmdUb0FycmF5KGNoYXJzKSkrMTtyZXR1cm4gY2FzdFNsaWNlKHN0clN5bWJvbHMsCjAsZW5kKS5qb2luKCIiKX1mdW5jdGlvbiB0cmltU3RhcnQoc3RyaW5nLGNoYXJzLGd1YXJkKXtzdHJpbmc9dG9TdHJpbmcoc3RyaW5nKTtpZihzdHJpbmcmJihndWFyZHx8Y2hhcnM9PT11bmRlZmluZWQpKXJldHVybiBzdHJpbmcucmVwbGFjZShyZVRyaW1TdGFydCwiIik7aWYoIXN0cmluZ3x8IShjaGFycz1iYXNlVG9TdHJpbmcoY2hhcnMpKSlyZXR1cm4gc3RyaW5nO3ZhciBzdHJTeW1ib2xzPXN0cmluZ1RvQXJyYXkoc3RyaW5nKSxzdGFydD1jaGFyc1N0YXJ0SW5kZXgoc3RyU3ltYm9scyxzdHJpbmdUb0FycmF5KGNoYXJzKSk7cmV0dXJuIGNhc3RTbGljZShzdHJTeW1ib2xzLHN0YXJ0KS5qb2luKCIiKX1mdW5jdGlvbiB0cnVuY2F0ZShzdHJpbmcsb3B0aW9ucyl7dmFyIGxlbmd0aD1ERUZBVUxUX1RSVU5DX0xFTkdUSCxvbWlzc2lvbj1ERUZBVUxUX1RSVU5DX09NSVNTSU9OO2lmKGlzT2JqZWN0KG9wdGlvbnMpKXt2YXIgc2VwYXJhdG9yPSJzZXBhcmF0b3IiaW4gb3B0aW9ucz8Kb3B0aW9ucy5zZXBhcmF0b3I6c2VwYXJhdG9yO2xlbmd0aD0ibGVuZ3RoImluIG9wdGlvbnM/dG9JbnRlZ2VyKG9wdGlvbnMubGVuZ3RoKTpsZW5ndGg7b21pc3Npb249Im9taXNzaW9uImluIG9wdGlvbnM/YmFzZVRvU3RyaW5nKG9wdGlvbnMub21pc3Npb24pOm9taXNzaW9ufXN0cmluZz10b1N0cmluZyhzdHJpbmcpO3ZhciBzdHJMZW5ndGg9c3RyaW5nLmxlbmd0aDtpZihoYXNVbmljb2RlKHN0cmluZykpe3ZhciBzdHJTeW1ib2xzPXN0cmluZ1RvQXJyYXkoc3RyaW5nKTtzdHJMZW5ndGg9c3RyU3ltYm9scy5sZW5ndGh9aWYobGVuZ3RoPj1zdHJMZW5ndGgpcmV0dXJuIHN0cmluZzt2YXIgZW5kPWxlbmd0aC1zdHJpbmdTaXplKG9taXNzaW9uKTtpZihlbmQ8MSlyZXR1cm4gb21pc3Npb247dmFyIHJlc3VsdD1zdHJTeW1ib2xzP2Nhc3RTbGljZShzdHJTeW1ib2xzLDAsZW5kKS5qb2luKCIiKTpzdHJpbmcuc2xpY2UoMCxlbmQpO2lmKHNlcGFyYXRvcj09PXVuZGVmaW5lZClyZXR1cm4gcmVzdWx0KwpvbWlzc2lvbjtpZihzdHJTeW1ib2xzKWVuZCs9cmVzdWx0Lmxlbmd0aC1lbmQ7aWYoaXNSZWdFeHAoc2VwYXJhdG9yKSl7aWYoc3RyaW5nLnNsaWNlKGVuZCkuc2VhcmNoKHNlcGFyYXRvcikpe3ZhciBtYXRjaCxzdWJzdHJpbmc9cmVzdWx0O2lmKCFzZXBhcmF0b3IuZ2xvYmFsKXNlcGFyYXRvcj1SZWdFeHAoc2VwYXJhdG9yLnNvdXJjZSx0b1N0cmluZyhyZUZsYWdzLmV4ZWMoc2VwYXJhdG9yKSkrImciKTtzZXBhcmF0b3IubGFzdEluZGV4PTA7d2hpbGUobWF0Y2g9c2VwYXJhdG9yLmV4ZWMoc3Vic3RyaW5nKSl2YXIgbmV3RW5kPW1hdGNoLmluZGV4O3Jlc3VsdD1yZXN1bHQuc2xpY2UoMCxuZXdFbmQ9PT11bmRlZmluZWQ/ZW5kOm5ld0VuZCl9fWVsc2UgaWYoc3RyaW5nLmluZGV4T2YoYmFzZVRvU3RyaW5nKHNlcGFyYXRvciksZW5kKSE9ZW5kKXt2YXIgaW5kZXg9cmVzdWx0Lmxhc3RJbmRleE9mKHNlcGFyYXRvcik7aWYoaW5kZXg+LTEpcmVzdWx0PXJlc3VsdC5zbGljZSgwLGluZGV4KX1yZXR1cm4gcmVzdWx0KwpvbWlzc2lvbn1mdW5jdGlvbiB1bmVzY2FwZShzdHJpbmcpe3N0cmluZz10b1N0cmluZyhzdHJpbmcpO3JldHVybiBzdHJpbmcmJnJlSGFzRXNjYXBlZEh0bWwudGVzdChzdHJpbmcpP3N0cmluZy5yZXBsYWNlKHJlRXNjYXBlZEh0bWwsdW5lc2NhcGVIdG1sQ2hhcik6c3RyaW5nfXZhciB1cHBlckNhc2U9Y3JlYXRlQ29tcG91bmRlcihmdW5jdGlvbihyZXN1bHQsd29yZCxpbmRleCl7cmV0dXJuIHJlc3VsdCsoaW5kZXg/IiAiOiIiKSt3b3JkLnRvVXBwZXJDYXNlKCl9KTt2YXIgdXBwZXJGaXJzdD1jcmVhdGVDYXNlRmlyc3QoInRvVXBwZXJDYXNlIik7ZnVuY3Rpb24gd29yZHMoc3RyaW5nLHBhdHRlcm4sZ3VhcmQpe3N0cmluZz10b1N0cmluZyhzdHJpbmcpO3BhdHRlcm49Z3VhcmQ/dW5kZWZpbmVkOnBhdHRlcm47aWYocGF0dGVybj09PXVuZGVmaW5lZClyZXR1cm4gaGFzVW5pY29kZVdvcmQoc3RyaW5nKT91bmljb2RlV29yZHMoc3RyaW5nKTphc2NpaVdvcmRzKHN0cmluZyk7cmV0dXJuIHN0cmluZy5tYXRjaChwYXR0ZXJuKXx8CltdfXZhciBhdHRlbXB0PWJhc2VSZXN0KGZ1bmN0aW9uKGZ1bmMsYXJncyl7dHJ5e3JldHVybiBhcHBseShmdW5jLHVuZGVmaW5lZCxhcmdzKX1jYXRjaChlKXtyZXR1cm4gaXNFcnJvcihlKT9lOm5ldyBFcnJvcihlKX19KTt2YXIgYmluZEFsbD1mbGF0UmVzdChmdW5jdGlvbihvYmplY3QsbWV0aG9kTmFtZXMpe2FycmF5RWFjaChtZXRob2ROYW1lcyxmdW5jdGlvbihrZXkpe2tleT10b0tleShrZXkpO2Jhc2VBc3NpZ25WYWx1ZShvYmplY3Qsa2V5LGJpbmQob2JqZWN0W2tleV0sb2JqZWN0KSl9KTtyZXR1cm4gb2JqZWN0fSk7ZnVuY3Rpb24gY29uZChwYWlycyl7dmFyIGxlbmd0aD1wYWlycz09bnVsbD8wOnBhaXJzLmxlbmd0aCx0b0l0ZXJhdGVlPWdldEl0ZXJhdGVlKCk7cGFpcnM9IWxlbmd0aD9bXTphcnJheU1hcChwYWlycyxmdW5jdGlvbihwYWlyKXtpZih0eXBlb2YgcGFpclsxXSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKEZVTkNfRVJST1JfVEVYVCk7cmV0dXJuW3RvSXRlcmF0ZWUocGFpclswXSksCnBhaXJbMV1dfSk7cmV0dXJuIGJhc2VSZXN0KGZ1bmN0aW9uKGFyZ3Mpe3ZhciBpbmRleD0tMTt3aGlsZSgrK2luZGV4PGxlbmd0aCl7dmFyIHBhaXI9cGFpcnNbaW5kZXhdO2lmKGFwcGx5KHBhaXJbMF0sdGhpcyxhcmdzKSlyZXR1cm4gYXBwbHkocGFpclsxXSx0aGlzLGFyZ3MpfX0pfWZ1bmN0aW9uIGNvbmZvcm1zKHNvdXJjZSl7cmV0dXJuIGJhc2VDb25mb3JtcyhiYXNlQ2xvbmUoc291cmNlLENMT05FX0RFRVBfRkxBRykpfWZ1bmN0aW9uIGNvbnN0YW50KHZhbHVlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdmFsdWV9fWZ1bmN0aW9uIGRlZmF1bHRUbyh2YWx1ZSxkZWZhdWx0VmFsdWUpe3JldHVybiB2YWx1ZT09bnVsbHx8dmFsdWUhPT12YWx1ZT9kZWZhdWx0VmFsdWU6dmFsdWV9dmFyIGZsb3c9Y3JlYXRlRmxvdygpO3ZhciBmbG93UmlnaHQ9Y3JlYXRlRmxvdyh0cnVlKTtmdW5jdGlvbiBpZGVudGl0eSh2YWx1ZSl7cmV0dXJuIHZhbHVlfWZ1bmN0aW9uIGl0ZXJhdGVlKGZ1bmMpe3JldHVybiBiYXNlSXRlcmF0ZWUodHlwZW9mIGZ1bmM9PQoiZnVuY3Rpb24iP2Z1bmM6YmFzZUNsb25lKGZ1bmMsQ0xPTkVfREVFUF9GTEFHKSl9ZnVuY3Rpb24gbWF0Y2hlcyhzb3VyY2Upe3JldHVybiBiYXNlTWF0Y2hlcyhiYXNlQ2xvbmUoc291cmNlLENMT05FX0RFRVBfRkxBRykpfWZ1bmN0aW9uIG1hdGNoZXNQcm9wZXJ0eShwYXRoLHNyY1ZhbHVlKXtyZXR1cm4gYmFzZU1hdGNoZXNQcm9wZXJ0eShwYXRoLGJhc2VDbG9uZShzcmNWYWx1ZSxDTE9ORV9ERUVQX0ZMQUcpKX12YXIgbWV0aG9kPWJhc2VSZXN0KGZ1bmN0aW9uKHBhdGgsYXJncyl7cmV0dXJuIGZ1bmN0aW9uKG9iamVjdCl7cmV0dXJuIGJhc2VJbnZva2Uob2JqZWN0LHBhdGgsYXJncyl9fSk7dmFyIG1ldGhvZE9mPWJhc2VSZXN0KGZ1bmN0aW9uKG9iamVjdCxhcmdzKXtyZXR1cm4gZnVuY3Rpb24ocGF0aCl7cmV0dXJuIGJhc2VJbnZva2Uob2JqZWN0LHBhdGgsYXJncyl9fSk7ZnVuY3Rpb24gbWl4aW4ob2JqZWN0LHNvdXJjZSxvcHRpb25zKXt2YXIgcHJvcHM9a2V5cyhzb3VyY2UpLAptZXRob2ROYW1lcz1iYXNlRnVuY3Rpb25zKHNvdXJjZSxwcm9wcyk7aWYob3B0aW9ucz09bnVsbCYmIShpc09iamVjdChzb3VyY2UpJiYobWV0aG9kTmFtZXMubGVuZ3RofHwhcHJvcHMubGVuZ3RoKSkpe29wdGlvbnM9c291cmNlO3NvdXJjZT1vYmplY3Q7b2JqZWN0PXRoaXM7bWV0aG9kTmFtZXM9YmFzZUZ1bmN0aW9ucyhzb3VyY2Usa2V5cyhzb3VyY2UpKX12YXIgY2hhaW49IShpc09iamVjdChvcHRpb25zKSYmImNoYWluImluIG9wdGlvbnMpfHwhIW9wdGlvbnMuY2hhaW4saXNGdW5jPWlzRnVuY3Rpb24ob2JqZWN0KTthcnJheUVhY2gobWV0aG9kTmFtZXMsZnVuY3Rpb24obWV0aG9kTmFtZSl7dmFyIGZ1bmM9c291cmNlW21ldGhvZE5hbWVdO29iamVjdFttZXRob2ROYW1lXT1mdW5jO2lmKGlzRnVuYylvYmplY3QucHJvdG90eXBlW21ldGhvZE5hbWVdPWZ1bmN0aW9uKCl7dmFyIGNoYWluQWxsPXRoaXMuX19jaGFpbl9fO2lmKGNoYWlufHxjaGFpbkFsbCl7dmFyIHJlc3VsdD0Kb2JqZWN0KHRoaXMuX193cmFwcGVkX18pLGFjdGlvbnM9cmVzdWx0Ll9fYWN0aW9uc19fPWNvcHlBcnJheSh0aGlzLl9fYWN0aW9uc19fKTthY3Rpb25zLnB1c2goeyJmdW5jIjpmdW5jLCJhcmdzIjphcmd1bWVudHMsInRoaXNBcmciOm9iamVjdH0pO3Jlc3VsdC5fX2NoYWluX189Y2hhaW5BbGw7cmV0dXJuIHJlc3VsdH1yZXR1cm4gZnVuYy5hcHBseShvYmplY3QsYXJyYXlQdXNoKFt0aGlzLnZhbHVlKCldLGFyZ3VtZW50cykpfX0pO3JldHVybiBvYmplY3R9ZnVuY3Rpb24gbm9Db25mbGljdCgpe2lmKHJvb3QuXz09PXRoaXMpcm9vdC5fPW9sZERhc2g7cmV0dXJuIHRoaXN9ZnVuY3Rpb24gbm9vcCgpe31mdW5jdGlvbiBudGhBcmcobil7bj10b0ludGVnZXIobik7cmV0dXJuIGJhc2VSZXN0KGZ1bmN0aW9uKGFyZ3Mpe3JldHVybiBiYXNlTnRoKGFyZ3Msbil9KX12YXIgb3Zlcj1jcmVhdGVPdmVyKGFycmF5TWFwKTt2YXIgb3ZlckV2ZXJ5PWNyZWF0ZU92ZXIoYXJyYXlFdmVyeSk7CnZhciBvdmVyU29tZT1jcmVhdGVPdmVyKGFycmF5U29tZSk7ZnVuY3Rpb24gcHJvcGVydHkocGF0aCl7cmV0dXJuIGlzS2V5KHBhdGgpP2Jhc2VQcm9wZXJ0eSh0b0tleShwYXRoKSk6YmFzZVByb3BlcnR5RGVlcChwYXRoKX1mdW5jdGlvbiBwcm9wZXJ0eU9mKG9iamVjdCl7cmV0dXJuIGZ1bmN0aW9uKHBhdGgpe3JldHVybiBvYmplY3Q9PW51bGw/dW5kZWZpbmVkOmJhc2VHZXQob2JqZWN0LHBhdGgpfX12YXIgcmFuZ2U9Y3JlYXRlUmFuZ2UoKTt2YXIgcmFuZ2VSaWdodD1jcmVhdGVSYW5nZSh0cnVlKTtmdW5jdGlvbiBzdHViQXJyYXkoKXtyZXR1cm5bXX1mdW5jdGlvbiBzdHViRmFsc2UoKXtyZXR1cm4gZmFsc2V9ZnVuY3Rpb24gc3R1Yk9iamVjdCgpe3JldHVybnt9fWZ1bmN0aW9uIHN0dWJTdHJpbmcoKXtyZXR1cm4iIn1mdW5jdGlvbiBzdHViVHJ1ZSgpe3JldHVybiB0cnVlfWZ1bmN0aW9uIHRpbWVzKG4saXRlcmF0ZWUpe249dG9JbnRlZ2VyKG4pO2lmKG48MXx8bj5NQVhfU0FGRV9JTlRFR0VSKXJldHVybltdOwp2YXIgaW5kZXg9TUFYX0FSUkFZX0xFTkdUSCxsZW5ndGg9bmF0aXZlTWluKG4sTUFYX0FSUkFZX0xFTkdUSCk7aXRlcmF0ZWU9Z2V0SXRlcmF0ZWUoaXRlcmF0ZWUpO24tPU1BWF9BUlJBWV9MRU5HVEg7dmFyIHJlc3VsdD1iYXNlVGltZXMobGVuZ3RoLGl0ZXJhdGVlKTt3aGlsZSgrK2luZGV4PG4paXRlcmF0ZWUoaW5kZXgpO3JldHVybiByZXN1bHR9ZnVuY3Rpb24gdG9QYXRoKHZhbHVlKXtpZihpc0FycmF5KHZhbHVlKSlyZXR1cm4gYXJyYXlNYXAodmFsdWUsdG9LZXkpO3JldHVybiBpc1N5bWJvbCh2YWx1ZSk/W3ZhbHVlXTpjb3B5QXJyYXkoc3RyaW5nVG9QYXRoKHRvU3RyaW5nKHZhbHVlKSkpfWZ1bmN0aW9uIHVuaXF1ZUlkKHByZWZpeCl7dmFyIGlkPSsraWRDb3VudGVyO3JldHVybiB0b1N0cmluZyhwcmVmaXgpK2lkfXZhciBhZGQ9Y3JlYXRlTWF0aE9wZXJhdGlvbihmdW5jdGlvbihhdWdlbmQsYWRkZW5kKXtyZXR1cm4gYXVnZW5kK2FkZGVuZH0sMCk7dmFyIGNlaWw9Y3JlYXRlUm91bmQoImNlaWwiKTsKdmFyIGRpdmlkZT1jcmVhdGVNYXRoT3BlcmF0aW9uKGZ1bmN0aW9uKGRpdmlkZW5kLGRpdmlzb3Ipe3JldHVybiBkaXZpZGVuZC9kaXZpc29yfSwxKTt2YXIgZmxvb3I9Y3JlYXRlUm91bmQoImZsb29yIik7ZnVuY3Rpb24gbWF4KGFycmF5KXtyZXR1cm4gYXJyYXkmJmFycmF5Lmxlbmd0aD9iYXNlRXh0cmVtdW0oYXJyYXksaWRlbnRpdHksYmFzZUd0KTp1bmRlZmluZWR9ZnVuY3Rpb24gbWF4QnkoYXJyYXksaXRlcmF0ZWUpe3JldHVybiBhcnJheSYmYXJyYXkubGVuZ3RoP2Jhc2VFeHRyZW11bShhcnJheSxnZXRJdGVyYXRlZShpdGVyYXRlZSwyKSxiYXNlR3QpOnVuZGVmaW5lZH1mdW5jdGlvbiBtZWFuKGFycmF5KXtyZXR1cm4gYmFzZU1lYW4oYXJyYXksaWRlbnRpdHkpfWZ1bmN0aW9uIG1lYW5CeShhcnJheSxpdGVyYXRlZSl7cmV0dXJuIGJhc2VNZWFuKGFycmF5LGdldEl0ZXJhdGVlKGl0ZXJhdGVlLDIpKX1mdW5jdGlvbiBtaW4oYXJyYXkpe3JldHVybiBhcnJheSYmYXJyYXkubGVuZ3RoPwpiYXNlRXh0cmVtdW0oYXJyYXksaWRlbnRpdHksYmFzZUx0KTp1bmRlZmluZWR9ZnVuY3Rpb24gbWluQnkoYXJyYXksaXRlcmF0ZWUpe3JldHVybiBhcnJheSYmYXJyYXkubGVuZ3RoP2Jhc2VFeHRyZW11bShhcnJheSxnZXRJdGVyYXRlZShpdGVyYXRlZSwyKSxiYXNlTHQpOnVuZGVmaW5lZH12YXIgbXVsdGlwbHk9Y3JlYXRlTWF0aE9wZXJhdGlvbihmdW5jdGlvbihtdWx0aXBsaWVyLG11bHRpcGxpY2FuZCl7cmV0dXJuIG11bHRpcGxpZXIqbXVsdGlwbGljYW5kfSwxKTt2YXIgcm91bmQ9Y3JlYXRlUm91bmQoInJvdW5kIik7dmFyIHN1YnRyYWN0PWNyZWF0ZU1hdGhPcGVyYXRpb24oZnVuY3Rpb24obWludWVuZCxzdWJ0cmFoZW5kKXtyZXR1cm4gbWludWVuZC1zdWJ0cmFoZW5kfSwwKTtmdW5jdGlvbiBzdW0oYXJyYXkpe3JldHVybiBhcnJheSYmYXJyYXkubGVuZ3RoP2Jhc2VTdW0oYXJyYXksaWRlbnRpdHkpOjB9ZnVuY3Rpb24gc3VtQnkoYXJyYXksaXRlcmF0ZWUpe3JldHVybiBhcnJheSYmCmFycmF5Lmxlbmd0aD9iYXNlU3VtKGFycmF5LGdldEl0ZXJhdGVlKGl0ZXJhdGVlLDIpKTowfWxvZGFzaC5hZnRlcj1hZnRlcjtsb2Rhc2guYXJ5PWFyeTtsb2Rhc2guYXNzaWduPWFzc2lnbjtsb2Rhc2guYXNzaWduSW49YXNzaWduSW47bG9kYXNoLmFzc2lnbkluV2l0aD1hc3NpZ25JbldpdGg7bG9kYXNoLmFzc2lnbldpdGg9YXNzaWduV2l0aDtsb2Rhc2guYXQ9YXQ7bG9kYXNoLmJlZm9yZT1iZWZvcmU7bG9kYXNoLmJpbmQ9YmluZDtsb2Rhc2guYmluZEFsbD1iaW5kQWxsO2xvZGFzaC5iaW5kS2V5PWJpbmRLZXk7bG9kYXNoLmNhc3RBcnJheT1jYXN0QXJyYXk7bG9kYXNoLmNoYWluPWNoYWluO2xvZGFzaC5jaHVuaz1jaHVuaztsb2Rhc2guY29tcGFjdD1jb21wYWN0O2xvZGFzaC5jb25jYXQ9Y29uY2F0O2xvZGFzaC5jb25kPWNvbmQ7bG9kYXNoLmNvbmZvcm1zPWNvbmZvcm1zO2xvZGFzaC5jb25zdGFudD1jb25zdGFudDtsb2Rhc2guY291bnRCeT1jb3VudEJ5O2xvZGFzaC5jcmVhdGU9CmNyZWF0ZTtsb2Rhc2guY3Vycnk9Y3Vycnk7bG9kYXNoLmN1cnJ5UmlnaHQ9Y3VycnlSaWdodDtsb2Rhc2guZGVib3VuY2U9ZGVib3VuY2U7bG9kYXNoLmRlZmF1bHRzPWRlZmF1bHRzO2xvZGFzaC5kZWZhdWx0c0RlZXA9ZGVmYXVsdHNEZWVwO2xvZGFzaC5kZWZlcj1kZWZlcjtsb2Rhc2guZGVsYXk9ZGVsYXk7bG9kYXNoLmRpZmZlcmVuY2U9ZGlmZmVyZW5jZTtsb2Rhc2guZGlmZmVyZW5jZUJ5PWRpZmZlcmVuY2VCeTtsb2Rhc2guZGlmZmVyZW5jZVdpdGg9ZGlmZmVyZW5jZVdpdGg7bG9kYXNoLmRyb3A9ZHJvcDtsb2Rhc2guZHJvcFJpZ2h0PWRyb3BSaWdodDtsb2Rhc2guZHJvcFJpZ2h0V2hpbGU9ZHJvcFJpZ2h0V2hpbGU7bG9kYXNoLmRyb3BXaGlsZT1kcm9wV2hpbGU7bG9kYXNoLmZpbGw9ZmlsbDtsb2Rhc2guZmlsdGVyPWZpbHRlcjtsb2Rhc2guZmxhdE1hcD1mbGF0TWFwO2xvZGFzaC5mbGF0TWFwRGVlcD1mbGF0TWFwRGVlcDtsb2Rhc2guZmxhdE1hcERlcHRoPWZsYXRNYXBEZXB0aDsKbG9kYXNoLmZsYXR0ZW49ZmxhdHRlbjtsb2Rhc2guZmxhdHRlbkRlZXA9ZmxhdHRlbkRlZXA7bG9kYXNoLmZsYXR0ZW5EZXB0aD1mbGF0dGVuRGVwdGg7bG9kYXNoLmZsaXA9ZmxpcDtsb2Rhc2guZmxvdz1mbG93O2xvZGFzaC5mbG93UmlnaHQ9Zmxvd1JpZ2h0O2xvZGFzaC5mcm9tUGFpcnM9ZnJvbVBhaXJzO2xvZGFzaC5mdW5jdGlvbnM9ZnVuY3Rpb25zO2xvZGFzaC5mdW5jdGlvbnNJbj1mdW5jdGlvbnNJbjtsb2Rhc2guZ3JvdXBCeT1ncm91cEJ5O2xvZGFzaC5pbml0aWFsPWluaXRpYWw7bG9kYXNoLmludGVyc2VjdGlvbj1pbnRlcnNlY3Rpb247bG9kYXNoLmludGVyc2VjdGlvbkJ5PWludGVyc2VjdGlvbkJ5O2xvZGFzaC5pbnRlcnNlY3Rpb25XaXRoPWludGVyc2VjdGlvbldpdGg7bG9kYXNoLmludmVydD1pbnZlcnQ7bG9kYXNoLmludmVydEJ5PWludmVydEJ5O2xvZGFzaC5pbnZva2VNYXA9aW52b2tlTWFwO2xvZGFzaC5pdGVyYXRlZT1pdGVyYXRlZTtsb2Rhc2gua2V5Qnk9CmtleUJ5O2xvZGFzaC5rZXlzPWtleXM7bG9kYXNoLmtleXNJbj1rZXlzSW47bG9kYXNoLm1hcD1tYXA7bG9kYXNoLm1hcEtleXM9bWFwS2V5cztsb2Rhc2gubWFwVmFsdWVzPW1hcFZhbHVlcztsb2Rhc2gubWF0Y2hlcz1tYXRjaGVzO2xvZGFzaC5tYXRjaGVzUHJvcGVydHk9bWF0Y2hlc1Byb3BlcnR5O2xvZGFzaC5tZW1vaXplPW1lbW9pemU7bG9kYXNoLm1lcmdlPW1lcmdlO2xvZGFzaC5tZXJnZVdpdGg9bWVyZ2VXaXRoO2xvZGFzaC5tZXRob2Q9bWV0aG9kO2xvZGFzaC5tZXRob2RPZj1tZXRob2RPZjtsb2Rhc2gubWl4aW49bWl4aW47bG9kYXNoLm5lZ2F0ZT1uZWdhdGU7bG9kYXNoLm50aEFyZz1udGhBcmc7bG9kYXNoLm9taXQ9b21pdDtsb2Rhc2gub21pdEJ5PW9taXRCeTtsb2Rhc2gub25jZT1vbmNlO2xvZGFzaC5vcmRlckJ5PW9yZGVyQnk7bG9kYXNoLm92ZXI9b3Zlcjtsb2Rhc2gub3ZlckFyZ3M9b3ZlckFyZ3M7bG9kYXNoLm92ZXJFdmVyeT1vdmVyRXZlcnk7bG9kYXNoLm92ZXJTb21lPQpvdmVyU29tZTtsb2Rhc2gucGFydGlhbD1wYXJ0aWFsO2xvZGFzaC5wYXJ0aWFsUmlnaHQ9cGFydGlhbFJpZ2h0O2xvZGFzaC5wYXJ0aXRpb249cGFydGl0aW9uO2xvZGFzaC5waWNrPXBpY2s7bG9kYXNoLnBpY2tCeT1waWNrQnk7bG9kYXNoLnByb3BlcnR5PXByb3BlcnR5O2xvZGFzaC5wcm9wZXJ0eU9mPXByb3BlcnR5T2Y7bG9kYXNoLnB1bGw9cHVsbDtsb2Rhc2gucHVsbEFsbD1wdWxsQWxsO2xvZGFzaC5wdWxsQWxsQnk9cHVsbEFsbEJ5O2xvZGFzaC5wdWxsQWxsV2l0aD1wdWxsQWxsV2l0aDtsb2Rhc2gucHVsbEF0PXB1bGxBdDtsb2Rhc2gucmFuZ2U9cmFuZ2U7bG9kYXNoLnJhbmdlUmlnaHQ9cmFuZ2VSaWdodDtsb2Rhc2gucmVhcmc9cmVhcmc7bG9kYXNoLnJlamVjdD1yZWplY3Q7bG9kYXNoLnJlbW92ZT1yZW1vdmU7bG9kYXNoLnJlc3Q9cmVzdDtsb2Rhc2gucmV2ZXJzZT1yZXZlcnNlO2xvZGFzaC5zYW1wbGVTaXplPXNhbXBsZVNpemU7bG9kYXNoLnNldD1zZXQ7bG9kYXNoLnNldFdpdGg9CnNldFdpdGg7bG9kYXNoLnNodWZmbGU9c2h1ZmZsZTtsb2Rhc2guc2xpY2U9c2xpY2U7bG9kYXNoLnNvcnRCeT1zb3J0Qnk7bG9kYXNoLnNvcnRlZFVuaXE9c29ydGVkVW5pcTtsb2Rhc2guc29ydGVkVW5pcUJ5PXNvcnRlZFVuaXFCeTtsb2Rhc2guc3BsaXQ9c3BsaXQ7bG9kYXNoLnNwcmVhZD1zcHJlYWQ7bG9kYXNoLnRhaWw9dGFpbDtsb2Rhc2gudGFrZT10YWtlO2xvZGFzaC50YWtlUmlnaHQ9dGFrZVJpZ2h0O2xvZGFzaC50YWtlUmlnaHRXaGlsZT10YWtlUmlnaHRXaGlsZTtsb2Rhc2gudGFrZVdoaWxlPXRha2VXaGlsZTtsb2Rhc2gudGFwPXRhcDtsb2Rhc2gudGhyb3R0bGU9dGhyb3R0bGU7bG9kYXNoLnRocnU9dGhydTtsb2Rhc2gudG9BcnJheT10b0FycmF5O2xvZGFzaC50b1BhaXJzPXRvUGFpcnM7bG9kYXNoLnRvUGFpcnNJbj10b1BhaXJzSW47bG9kYXNoLnRvUGF0aD10b1BhdGg7bG9kYXNoLnRvUGxhaW5PYmplY3Q9dG9QbGFpbk9iamVjdDtsb2Rhc2gudHJhbnNmb3JtPQp0cmFuc2Zvcm07bG9kYXNoLnVuYXJ5PXVuYXJ5O2xvZGFzaC51bmlvbj11bmlvbjtsb2Rhc2gudW5pb25CeT11bmlvbkJ5O2xvZGFzaC51bmlvbldpdGg9dW5pb25XaXRoO2xvZGFzaC51bmlxPXVuaXE7bG9kYXNoLnVuaXFCeT11bmlxQnk7bG9kYXNoLnVuaXFXaXRoPXVuaXFXaXRoO2xvZGFzaC51bnNldD11bnNldDtsb2Rhc2gudW56aXA9dW56aXA7bG9kYXNoLnVuemlwV2l0aD11bnppcFdpdGg7bG9kYXNoLnVwZGF0ZT11cGRhdGU7bG9kYXNoLnVwZGF0ZVdpdGg9dXBkYXRlV2l0aDtsb2Rhc2gudmFsdWVzPXZhbHVlcztsb2Rhc2gudmFsdWVzSW49dmFsdWVzSW47bG9kYXNoLndpdGhvdXQ9d2l0aG91dDtsb2Rhc2gud29yZHM9d29yZHM7bG9kYXNoLndyYXA9d3JhcDtsb2Rhc2gueG9yPXhvcjtsb2Rhc2gueG9yQnk9eG9yQnk7bG9kYXNoLnhvcldpdGg9eG9yV2l0aDtsb2Rhc2guemlwPXppcDtsb2Rhc2guemlwT2JqZWN0PXppcE9iamVjdDtsb2Rhc2guemlwT2JqZWN0RGVlcD0KemlwT2JqZWN0RGVlcDtsb2Rhc2guemlwV2l0aD16aXBXaXRoO2xvZGFzaC5lbnRyaWVzPXRvUGFpcnM7bG9kYXNoLmVudHJpZXNJbj10b1BhaXJzSW47bG9kYXNoLmV4dGVuZD1hc3NpZ25Jbjtsb2Rhc2guZXh0ZW5kV2l0aD1hc3NpZ25JbldpdGg7bWl4aW4obG9kYXNoLGxvZGFzaCk7bG9kYXNoLmFkZD1hZGQ7bG9kYXNoLmF0dGVtcHQ9YXR0ZW1wdDtsb2Rhc2guY2FtZWxDYXNlPWNhbWVsQ2FzZTtsb2Rhc2guY2FwaXRhbGl6ZT1jYXBpdGFsaXplO2xvZGFzaC5jZWlsPWNlaWw7bG9kYXNoLmNsYW1wPWNsYW1wO2xvZGFzaC5jbG9uZT1jbG9uZTtsb2Rhc2guY2xvbmVEZWVwPWNsb25lRGVlcDtsb2Rhc2guY2xvbmVEZWVwV2l0aD1jbG9uZURlZXBXaXRoO2xvZGFzaC5jbG9uZVdpdGg9Y2xvbmVXaXRoO2xvZGFzaC5jb25mb3Jtc1RvPWNvbmZvcm1zVG87bG9kYXNoLmRlYnVycj1kZWJ1cnI7bG9kYXNoLmRlZmF1bHRUbz1kZWZhdWx0VG87bG9kYXNoLmRpdmlkZT1kaXZpZGU7bG9kYXNoLmVuZHNXaXRoPQplbmRzV2l0aDtsb2Rhc2guZXE9ZXE7bG9kYXNoLmVzY2FwZT1lc2NhcGU7bG9kYXNoLmVzY2FwZVJlZ0V4cD1lc2NhcGVSZWdFeHA7bG9kYXNoLmV2ZXJ5PWV2ZXJ5O2xvZGFzaC5maW5kPWZpbmQ7bG9kYXNoLmZpbmRJbmRleD1maW5kSW5kZXg7bG9kYXNoLmZpbmRLZXk9ZmluZEtleTtsb2Rhc2guZmluZExhc3Q9ZmluZExhc3Q7bG9kYXNoLmZpbmRMYXN0SW5kZXg9ZmluZExhc3RJbmRleDtsb2Rhc2guZmluZExhc3RLZXk9ZmluZExhc3RLZXk7bG9kYXNoLmZsb29yPWZsb29yO2xvZGFzaC5mb3JFYWNoPWZvckVhY2g7bG9kYXNoLmZvckVhY2hSaWdodD1mb3JFYWNoUmlnaHQ7bG9kYXNoLmZvckluPWZvckluO2xvZGFzaC5mb3JJblJpZ2h0PWZvckluUmlnaHQ7bG9kYXNoLmZvck93bj1mb3JPd247bG9kYXNoLmZvck93blJpZ2h0PWZvck93blJpZ2h0O2xvZGFzaC5nZXQ9Z2V0O2xvZGFzaC5ndD1ndDtsb2Rhc2guZ3RlPWd0ZTtsb2Rhc2guaGFzPWhhcztsb2Rhc2guaGFzSW49aGFzSW47CmxvZGFzaC5oZWFkPWhlYWQ7bG9kYXNoLmlkZW50aXR5PWlkZW50aXR5O2xvZGFzaC5pbmNsdWRlcz1pbmNsdWRlcztsb2Rhc2guaW5kZXhPZj1pbmRleE9mO2xvZGFzaC5pblJhbmdlPWluUmFuZ2U7bG9kYXNoLmludm9rZT1pbnZva2U7bG9kYXNoLmlzQXJndW1lbnRzPWlzQXJndW1lbnRzO2xvZGFzaC5pc0FycmF5PWlzQXJyYXk7bG9kYXNoLmlzQXJyYXlCdWZmZXI9aXNBcnJheUJ1ZmZlcjtsb2Rhc2guaXNBcnJheUxpa2U9aXNBcnJheUxpa2U7bG9kYXNoLmlzQXJyYXlMaWtlT2JqZWN0PWlzQXJyYXlMaWtlT2JqZWN0O2xvZGFzaC5pc0Jvb2xlYW49aXNCb29sZWFuO2xvZGFzaC5pc0J1ZmZlcj1pc0J1ZmZlcjtsb2Rhc2guaXNEYXRlPWlzRGF0ZTtsb2Rhc2guaXNFbGVtZW50PWlzRWxlbWVudDtsb2Rhc2guaXNFbXB0eT1pc0VtcHR5O2xvZGFzaC5pc0VxdWFsPWlzRXF1YWw7bG9kYXNoLmlzRXF1YWxXaXRoPWlzRXF1YWxXaXRoO2xvZGFzaC5pc0Vycm9yPWlzRXJyb3I7bG9kYXNoLmlzRmluaXRlPQppc0Zpbml0ZTtsb2Rhc2guaXNGdW5jdGlvbj1pc0Z1bmN0aW9uO2xvZGFzaC5pc0ludGVnZXI9aXNJbnRlZ2VyO2xvZGFzaC5pc0xlbmd0aD1pc0xlbmd0aDtsb2Rhc2guaXNNYXA9aXNNYXA7bG9kYXNoLmlzTWF0Y2g9aXNNYXRjaDtsb2Rhc2guaXNNYXRjaFdpdGg9aXNNYXRjaFdpdGg7bG9kYXNoLmlzTmFOPWlzTmFOO2xvZGFzaC5pc05hdGl2ZT1pc05hdGl2ZTtsb2Rhc2guaXNOaWw9aXNOaWw7bG9kYXNoLmlzTnVsbD1pc051bGw7bG9kYXNoLmlzTnVtYmVyPWlzTnVtYmVyO2xvZGFzaC5pc09iamVjdD1pc09iamVjdDtsb2Rhc2guaXNPYmplY3RMaWtlPWlzT2JqZWN0TGlrZTtsb2Rhc2guaXNQbGFpbk9iamVjdD1pc1BsYWluT2JqZWN0O2xvZGFzaC5pc1JlZ0V4cD1pc1JlZ0V4cDtsb2Rhc2guaXNTYWZlSW50ZWdlcj1pc1NhZmVJbnRlZ2VyO2xvZGFzaC5pc1NldD1pc1NldDtsb2Rhc2guaXNTdHJpbmc9aXNTdHJpbmc7bG9kYXNoLmlzU3ltYm9sPWlzU3ltYm9sO2xvZGFzaC5pc1R5cGVkQXJyYXk9CmlzVHlwZWRBcnJheTtsb2Rhc2guaXNVbmRlZmluZWQ9aXNVbmRlZmluZWQ7bG9kYXNoLmlzV2Vha01hcD1pc1dlYWtNYXA7bG9kYXNoLmlzV2Vha1NldD1pc1dlYWtTZXQ7bG9kYXNoLmpvaW49am9pbjtsb2Rhc2gua2ViYWJDYXNlPWtlYmFiQ2FzZTtsb2Rhc2gubGFzdD1sYXN0O2xvZGFzaC5sYXN0SW5kZXhPZj1sYXN0SW5kZXhPZjtsb2Rhc2gubG93ZXJDYXNlPWxvd2VyQ2FzZTtsb2Rhc2gubG93ZXJGaXJzdD1sb3dlckZpcnN0O2xvZGFzaC5sdD1sdDtsb2Rhc2gubHRlPWx0ZTtsb2Rhc2gubWF4PW1heDtsb2Rhc2gubWF4Qnk9bWF4Qnk7bG9kYXNoLm1lYW49bWVhbjtsb2Rhc2gubWVhbkJ5PW1lYW5CeTtsb2Rhc2gubWluPW1pbjtsb2Rhc2gubWluQnk9bWluQnk7bG9kYXNoLnN0dWJBcnJheT1zdHViQXJyYXk7bG9kYXNoLnN0dWJGYWxzZT1zdHViRmFsc2U7bG9kYXNoLnN0dWJPYmplY3Q9c3R1Yk9iamVjdDtsb2Rhc2guc3R1YlN0cmluZz1zdHViU3RyaW5nO2xvZGFzaC5zdHViVHJ1ZT0Kc3R1YlRydWU7bG9kYXNoLm11bHRpcGx5PW11bHRpcGx5O2xvZGFzaC5udGg9bnRoO2xvZGFzaC5ub0NvbmZsaWN0PW5vQ29uZmxpY3Q7bG9kYXNoLm5vb3A9bm9vcDtsb2Rhc2gubm93PW5vdztsb2Rhc2gucGFkPXBhZDtsb2Rhc2gucGFkRW5kPXBhZEVuZDtsb2Rhc2gucGFkU3RhcnQ9cGFkU3RhcnQ7bG9kYXNoLnBhcnNlSW50PXBhcnNlSW50O2xvZGFzaC5yYW5kb209cmFuZG9tO2xvZGFzaC5yZWR1Y2U9cmVkdWNlO2xvZGFzaC5yZWR1Y2VSaWdodD1yZWR1Y2VSaWdodDtsb2Rhc2gucmVwZWF0PXJlcGVhdDtsb2Rhc2gucmVwbGFjZT1yZXBsYWNlO2xvZGFzaC5yZXN1bHQ9cmVzdWx0O2xvZGFzaC5yb3VuZD1yb3VuZDtsb2Rhc2gucnVuSW5Db250ZXh0PXJ1bkluQ29udGV4dDtsb2Rhc2guc2FtcGxlPXNhbXBsZTtsb2Rhc2guc2l6ZT1zaXplO2xvZGFzaC5zbmFrZUNhc2U9c25ha2VDYXNlO2xvZGFzaC5zb21lPXNvbWU7bG9kYXNoLnNvcnRlZEluZGV4PXNvcnRlZEluZGV4O2xvZGFzaC5zb3J0ZWRJbmRleEJ5PQpzb3J0ZWRJbmRleEJ5O2xvZGFzaC5zb3J0ZWRJbmRleE9mPXNvcnRlZEluZGV4T2Y7bG9kYXNoLnNvcnRlZExhc3RJbmRleD1zb3J0ZWRMYXN0SW5kZXg7bG9kYXNoLnNvcnRlZExhc3RJbmRleEJ5PXNvcnRlZExhc3RJbmRleEJ5O2xvZGFzaC5zb3J0ZWRMYXN0SW5kZXhPZj1zb3J0ZWRMYXN0SW5kZXhPZjtsb2Rhc2guc3RhcnRDYXNlPXN0YXJ0Q2FzZTtsb2Rhc2guc3RhcnRzV2l0aD1zdGFydHNXaXRoO2xvZGFzaC5zdWJ0cmFjdD1zdWJ0cmFjdDtsb2Rhc2guc3VtPXN1bTtsb2Rhc2guc3VtQnk9c3VtQnk7bG9kYXNoLnRlbXBsYXRlPXRlbXBsYXRlO2xvZGFzaC50aW1lcz10aW1lcztsb2Rhc2gudG9GaW5pdGU9dG9GaW5pdGU7bG9kYXNoLnRvSW50ZWdlcj10b0ludGVnZXI7bG9kYXNoLnRvTGVuZ3RoPXRvTGVuZ3RoO2xvZGFzaC50b0xvd2VyPXRvTG93ZXI7bG9kYXNoLnRvTnVtYmVyPXRvTnVtYmVyO2xvZGFzaC50b1NhZmVJbnRlZ2VyPXRvU2FmZUludGVnZXI7bG9kYXNoLnRvU3RyaW5nPQp0b1N0cmluZztsb2Rhc2gudG9VcHBlcj10b1VwcGVyO2xvZGFzaC50cmltPXRyaW07bG9kYXNoLnRyaW1FbmQ9dHJpbUVuZDtsb2Rhc2gudHJpbVN0YXJ0PXRyaW1TdGFydDtsb2Rhc2gudHJ1bmNhdGU9dHJ1bmNhdGU7bG9kYXNoLnVuZXNjYXBlPXVuZXNjYXBlO2xvZGFzaC51bmlxdWVJZD11bmlxdWVJZDtsb2Rhc2gudXBwZXJDYXNlPXVwcGVyQ2FzZTtsb2Rhc2gudXBwZXJGaXJzdD11cHBlckZpcnN0O2xvZGFzaC5lYWNoPWZvckVhY2g7bG9kYXNoLmVhY2hSaWdodD1mb3JFYWNoUmlnaHQ7bG9kYXNoLmZpcnN0PWhlYWQ7bWl4aW4obG9kYXNoLGZ1bmN0aW9uKCl7dmFyIHNvdXJjZT17fTtiYXNlRm9yT3duKGxvZGFzaCxmdW5jdGlvbihmdW5jLG1ldGhvZE5hbWUpe2lmKCFoYXNPd25Qcm9wZXJ0eS5jYWxsKGxvZGFzaC5wcm90b3R5cGUsbWV0aG9kTmFtZSkpc291cmNlW21ldGhvZE5hbWVdPWZ1bmN9KTtyZXR1cm4gc291cmNlfSgpLHsiY2hhaW4iOmZhbHNlfSk7bG9kYXNoLlZFUlNJT049ClZFUlNJT047YXJyYXlFYWNoKFsiYmluZCIsImJpbmRLZXkiLCJjdXJyeSIsImN1cnJ5UmlnaHQiLCJwYXJ0aWFsIiwicGFydGlhbFJpZ2h0Il0sZnVuY3Rpb24obWV0aG9kTmFtZSl7bG9kYXNoW21ldGhvZE5hbWVdLnBsYWNlaG9sZGVyPWxvZGFzaH0pO2FycmF5RWFjaChbImRyb3AiLCJ0YWtlIl0sZnVuY3Rpb24obWV0aG9kTmFtZSxpbmRleCl7TGF6eVdyYXBwZXIucHJvdG90eXBlW21ldGhvZE5hbWVdPWZ1bmN0aW9uKG4pe249bj09PXVuZGVmaW5lZD8xOm5hdGl2ZU1heCh0b0ludGVnZXIobiksMCk7dmFyIHJlc3VsdD10aGlzLl9fZmlsdGVyZWRfXyYmIWluZGV4P25ldyBMYXp5V3JhcHBlcih0aGlzKTp0aGlzLmNsb25lKCk7aWYocmVzdWx0Ll9fZmlsdGVyZWRfXylyZXN1bHQuX190YWtlQ291bnRfXz1uYXRpdmVNaW4obixyZXN1bHQuX190YWtlQ291bnRfXyk7ZWxzZSByZXN1bHQuX192aWV3c19fLnB1c2goeyJzaXplIjpuYXRpdmVNaW4obixNQVhfQVJSQVlfTEVOR1RIKSwKInR5cGUiOm1ldGhvZE5hbWUrKHJlc3VsdC5fX2Rpcl9fPDA/IlJpZ2h0IjoiIil9KTtyZXR1cm4gcmVzdWx0fTtMYXp5V3JhcHBlci5wcm90b3R5cGVbbWV0aG9kTmFtZSsiUmlnaHQiXT1mdW5jdGlvbihuKXtyZXR1cm4gdGhpcy5yZXZlcnNlKClbbWV0aG9kTmFtZV0obikucmV2ZXJzZSgpfX0pO2FycmF5RWFjaChbImZpbHRlciIsIm1hcCIsInRha2VXaGlsZSJdLGZ1bmN0aW9uKG1ldGhvZE5hbWUsaW5kZXgpe3ZhciB0eXBlPWluZGV4KzEsaXNGaWx0ZXI9dHlwZT09TEFaWV9GSUxURVJfRkxBR3x8dHlwZT09TEFaWV9XSElMRV9GTEFHO0xhenlXcmFwcGVyLnByb3RvdHlwZVttZXRob2ROYW1lXT1mdW5jdGlvbihpdGVyYXRlZSl7dmFyIHJlc3VsdD10aGlzLmNsb25lKCk7cmVzdWx0Ll9faXRlcmF0ZWVzX18ucHVzaCh7Iml0ZXJhdGVlIjpnZXRJdGVyYXRlZShpdGVyYXRlZSwzKSwidHlwZSI6dHlwZX0pO3Jlc3VsdC5fX2ZpbHRlcmVkX189cmVzdWx0Ll9fZmlsdGVyZWRfX3x8CmlzRmlsdGVyO3JldHVybiByZXN1bHR9fSk7YXJyYXlFYWNoKFsiaGVhZCIsImxhc3QiXSxmdW5jdGlvbihtZXRob2ROYW1lLGluZGV4KXt2YXIgdGFrZU5hbWU9InRha2UiKyhpbmRleD8iUmlnaHQiOiIiKTtMYXp5V3JhcHBlci5wcm90b3R5cGVbbWV0aG9kTmFtZV09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1t0YWtlTmFtZV0oMSkudmFsdWUoKVswXX19KTthcnJheUVhY2goWyJpbml0aWFsIiwidGFpbCJdLGZ1bmN0aW9uKG1ldGhvZE5hbWUsaW5kZXgpe3ZhciBkcm9wTmFtZT0iZHJvcCIrKGluZGV4PyIiOiJSaWdodCIpO0xhenlXcmFwcGVyLnByb3RvdHlwZVttZXRob2ROYW1lXT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZmlsdGVyZWRfXz9uZXcgTGF6eVdyYXBwZXIodGhpcyk6dGhpc1tkcm9wTmFtZV0oMSl9fSk7TGF6eVdyYXBwZXIucHJvdG90eXBlLmNvbXBhY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5maWx0ZXIoaWRlbnRpdHkpfTtMYXp5V3JhcHBlci5wcm90b3R5cGUuZmluZD0KZnVuY3Rpb24ocHJlZGljYXRlKXtyZXR1cm4gdGhpcy5maWx0ZXIocHJlZGljYXRlKS5oZWFkKCl9O0xhenlXcmFwcGVyLnByb3RvdHlwZS5maW5kTGFzdD1mdW5jdGlvbihwcmVkaWNhdGUpe3JldHVybiB0aGlzLnJldmVyc2UoKS5maW5kKHByZWRpY2F0ZSl9O0xhenlXcmFwcGVyLnByb3RvdHlwZS5pbnZva2VNYXA9YmFzZVJlc3QoZnVuY3Rpb24ocGF0aCxhcmdzKXtpZih0eXBlb2YgcGF0aD09ImZ1bmN0aW9uIilyZXR1cm4gbmV3IExhenlXcmFwcGVyKHRoaXMpO3JldHVybiB0aGlzLm1hcChmdW5jdGlvbih2YWx1ZSl7cmV0dXJuIGJhc2VJbnZva2UodmFsdWUscGF0aCxhcmdzKX0pfSk7TGF6eVdyYXBwZXIucHJvdG90eXBlLnJlamVjdD1mdW5jdGlvbihwcmVkaWNhdGUpe3JldHVybiB0aGlzLmZpbHRlcihuZWdhdGUoZ2V0SXRlcmF0ZWUocHJlZGljYXRlKSkpfTtMYXp5V3JhcHBlci5wcm90b3R5cGUuc2xpY2U9ZnVuY3Rpb24oc3RhcnQsZW5kKXtzdGFydD10b0ludGVnZXIoc3RhcnQpOwp2YXIgcmVzdWx0PXRoaXM7aWYocmVzdWx0Ll9fZmlsdGVyZWRfXyYmKHN0YXJ0PjB8fGVuZDwwKSlyZXR1cm4gbmV3IExhenlXcmFwcGVyKHJlc3VsdCk7aWYoc3RhcnQ8MClyZXN1bHQ9cmVzdWx0LnRha2VSaWdodCgtc3RhcnQpO2Vsc2UgaWYoc3RhcnQpcmVzdWx0PXJlc3VsdC5kcm9wKHN0YXJ0KTtpZihlbmQhPT11bmRlZmluZWQpe2VuZD10b0ludGVnZXIoZW5kKTtyZXN1bHQ9ZW5kPDA/cmVzdWx0LmRyb3BSaWdodCgtZW5kKTpyZXN1bHQudGFrZShlbmQtc3RhcnQpfXJldHVybiByZXN1bHR9O0xhenlXcmFwcGVyLnByb3RvdHlwZS50YWtlUmlnaHRXaGlsZT1mdW5jdGlvbihwcmVkaWNhdGUpe3JldHVybiB0aGlzLnJldmVyc2UoKS50YWtlV2hpbGUocHJlZGljYXRlKS5yZXZlcnNlKCl9O0xhenlXcmFwcGVyLnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGFrZShNQVhfQVJSQVlfTEVOR1RIKX07YmFzZUZvck93bihMYXp5V3JhcHBlci5wcm90b3R5cGUsCmZ1bmN0aW9uKGZ1bmMsbWV0aG9kTmFtZSl7dmFyIGNoZWNrSXRlcmF0ZWU9L14oPzpmaWx0ZXJ8ZmluZHxtYXB8cmVqZWN0KXxXaGlsZSQvLnRlc3QobWV0aG9kTmFtZSksaXNUYWtlcj0vXig/OmhlYWR8bGFzdCkkLy50ZXN0KG1ldGhvZE5hbWUpLGxvZGFzaEZ1bmM9bG9kYXNoW2lzVGFrZXI/InRha2UiKyhtZXRob2ROYW1lPT0ibGFzdCI/IlJpZ2h0IjoiIik6bWV0aG9kTmFtZV0scmV0VW53cmFwcGVkPWlzVGFrZXJ8fC9eZmluZC8udGVzdChtZXRob2ROYW1lKTtpZighbG9kYXNoRnVuYylyZXR1cm47bG9kYXNoLnByb3RvdHlwZVttZXRob2ROYW1lXT1mdW5jdGlvbigpe3ZhciB2YWx1ZT10aGlzLl9fd3JhcHBlZF9fLGFyZ3M9aXNUYWtlcj9bMV06YXJndW1lbnRzLGlzTGF6eT12YWx1ZSBpbnN0YW5jZW9mIExhenlXcmFwcGVyLGl0ZXJhdGVlPWFyZ3NbMF0sdXNlTGF6eT1pc0xhenl8fGlzQXJyYXkodmFsdWUpO3ZhciBpbnRlcmNlcHRvcj1mdW5jdGlvbih2YWx1ZSl7dmFyIHJlc3VsdD0KbG9kYXNoRnVuYy5hcHBseShsb2Rhc2gsYXJyYXlQdXNoKFt2YWx1ZV0sYXJncykpO3JldHVybiBpc1Rha2VyJiZjaGFpbkFsbD9yZXN1bHRbMF06cmVzdWx0fTtpZih1c2VMYXp5JiZjaGVja0l0ZXJhdGVlJiZ0eXBlb2YgaXRlcmF0ZWU9PSJmdW5jdGlvbiImJml0ZXJhdGVlLmxlbmd0aCE9MSlpc0xhenk9dXNlTGF6eT1mYWxzZTt2YXIgY2hhaW5BbGw9dGhpcy5fX2NoYWluX18saXNIeWJyaWQ9ISF0aGlzLl9fYWN0aW9uc19fLmxlbmd0aCxpc1Vud3JhcHBlZD1yZXRVbndyYXBwZWQmJiFjaGFpbkFsbCxvbmx5TGF6eT1pc0xhenkmJiFpc0h5YnJpZDtpZighcmV0VW53cmFwcGVkJiZ1c2VMYXp5KXt2YWx1ZT1vbmx5TGF6eT92YWx1ZTpuZXcgTGF6eVdyYXBwZXIodGhpcyk7dmFyIHJlc3VsdD1mdW5jLmFwcGx5KHZhbHVlLGFyZ3MpO3Jlc3VsdC5fX2FjdGlvbnNfXy5wdXNoKHsiZnVuYyI6dGhydSwiYXJncyI6W2ludGVyY2VwdG9yXSwidGhpc0FyZyI6dW5kZWZpbmVkfSk7cmV0dXJuIG5ldyBMb2Rhc2hXcmFwcGVyKHJlc3VsdCwKY2hhaW5BbGwpfWlmKGlzVW53cmFwcGVkJiZvbmx5TGF6eSlyZXR1cm4gZnVuYy5hcHBseSh0aGlzLGFyZ3MpO3Jlc3VsdD10aGlzLnRocnUoaW50ZXJjZXB0b3IpO3JldHVybiBpc1Vud3JhcHBlZD9pc1Rha2VyP3Jlc3VsdC52YWx1ZSgpWzBdOnJlc3VsdC52YWx1ZSgpOnJlc3VsdH19KTthcnJheUVhY2goWyJwb3AiLCJwdXNoIiwic2hpZnQiLCJzb3J0Iiwic3BsaWNlIiwidW5zaGlmdCJdLGZ1bmN0aW9uKG1ldGhvZE5hbWUpe3ZhciBmdW5jPWFycmF5UHJvdG9bbWV0aG9kTmFtZV0sY2hhaW5OYW1lPS9eKD86cHVzaHxzb3J0fHVuc2hpZnQpJC8udGVzdChtZXRob2ROYW1lKT8idGFwIjoidGhydSIscmV0VW53cmFwcGVkPS9eKD86cG9wfHNoaWZ0KSQvLnRlc3QobWV0aG9kTmFtZSk7bG9kYXNoLnByb3RvdHlwZVttZXRob2ROYW1lXT1mdW5jdGlvbigpe3ZhciBhcmdzPWFyZ3VtZW50cztpZihyZXRVbndyYXBwZWQmJiF0aGlzLl9fY2hhaW5fXyl7dmFyIHZhbHVlPXRoaXMudmFsdWUoKTsKcmV0dXJuIGZ1bmMuYXBwbHkoaXNBcnJheSh2YWx1ZSk/dmFsdWU6W10sYXJncyl9cmV0dXJuIHRoaXNbY2hhaW5OYW1lXShmdW5jdGlvbih2YWx1ZSl7cmV0dXJuIGZ1bmMuYXBwbHkoaXNBcnJheSh2YWx1ZSk/dmFsdWU6W10sYXJncyl9KX19KTtiYXNlRm9yT3duKExhenlXcmFwcGVyLnByb3RvdHlwZSxmdW5jdGlvbihmdW5jLG1ldGhvZE5hbWUpe3ZhciBsb2Rhc2hGdW5jPWxvZGFzaFttZXRob2ROYW1lXTtpZihsb2Rhc2hGdW5jKXt2YXIga2V5PWxvZGFzaEZ1bmMubmFtZSsiIixuYW1lcz1yZWFsTmFtZXNba2V5XXx8KHJlYWxOYW1lc1trZXldPVtdKTtuYW1lcy5wdXNoKHsibmFtZSI6bWV0aG9kTmFtZSwiZnVuYyI6bG9kYXNoRnVuY30pfX0pO3JlYWxOYW1lc1tjcmVhdGVIeWJyaWQodW5kZWZpbmVkLFdSQVBfQklORF9LRVlfRkxBRykubmFtZV09W3sibmFtZSI6IndyYXBwZXIiLCJmdW5jIjp1bmRlZmluZWR9XTtMYXp5V3JhcHBlci5wcm90b3R5cGUuY2xvbmU9bGF6eUNsb25lOwpMYXp5V3JhcHBlci5wcm90b3R5cGUucmV2ZXJzZT1sYXp5UmV2ZXJzZTtMYXp5V3JhcHBlci5wcm90b3R5cGUudmFsdWU9bGF6eVZhbHVlO2xvZGFzaC5wcm90b3R5cGUuYXQ9d3JhcHBlckF0O2xvZGFzaC5wcm90b3R5cGUuY2hhaW49d3JhcHBlckNoYWluO2xvZGFzaC5wcm90b3R5cGUuY29tbWl0PXdyYXBwZXJDb21taXQ7bG9kYXNoLnByb3RvdHlwZS5uZXh0PXdyYXBwZXJOZXh0O2xvZGFzaC5wcm90b3R5cGUucGxhbnQ9d3JhcHBlclBsYW50O2xvZGFzaC5wcm90b3R5cGUucmV2ZXJzZT13cmFwcGVyUmV2ZXJzZTtsb2Rhc2gucHJvdG90eXBlLnRvSlNPTj1sb2Rhc2gucHJvdG90eXBlLnZhbHVlT2Y9bG9kYXNoLnByb3RvdHlwZS52YWx1ZT13cmFwcGVyVmFsdWU7bG9kYXNoLnByb3RvdHlwZS5maXJzdD1sb2Rhc2gucHJvdG90eXBlLmhlYWQ7aWYoc3ltSXRlcmF0b3IpbG9kYXNoLnByb3RvdHlwZVtzeW1JdGVyYXRvcl09d3JhcHBlclRvSXRlcmF0b3I7cmV0dXJuIGxvZGFzaH07CnZhciBfPXJ1bkluQ29udGV4dCgpO2lmKHR5cGVvZiBkZWZpbmU9PSJmdW5jdGlvbiImJnR5cGVvZiBkZWZpbmUuYW1kPT0ib2JqZWN0IiYmZGVmaW5lLmFtZCl7cm9vdC5fPV87ZGVmaW5lKGZ1bmN0aW9uKCl7cmV0dXJuIF99KX1lbHNlIGlmKGZyZWVNb2R1bGUpeyhmcmVlTW9kdWxlLmV4cG9ydHM9XykuXz1fO2ZyZWVFeHBvcnRzLl89X31lbHNlIHJvb3QuXz1ffSkuY2FsbCh0aGlzKTs8L3NjcmlwdD48c2NyaXB0Pi8vIGh0dHBzOi8vZDNqcy5vcmcgdjUuNy4wIENvcHlyaWdodCAyMDE4IE1pa2UgQm9zdG9jawohZnVuY3Rpb24odCxuKXsib2JqZWN0Ij09dHlwZW9mIGV4cG9ydHMmJiJ1bmRlZmluZWQiIT10eXBlb2YgbW9kdWxlP24oZXhwb3J0cyk6ImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoWyJleHBvcnRzIl0sbik6bih0LmQzPXQuZDN8fHt9KX0odGhpcyxmdW5jdGlvbih0KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LG4pe3JldHVybiB0PG4/LTE6dD5uPzE6dD49bj8wOk5hTn1mdW5jdGlvbiBlKHQpe3ZhciBlO3JldHVybiAxPT09dC5sZW5ndGgmJihlPXQsdD1mdW5jdGlvbih0LHIpe3JldHVybiBuKGUodCkscil9KSx7bGVmdDpmdW5jdGlvbihuLGUscixpKXtmb3IobnVsbD09ciYmKHI9MCksbnVsbD09aSYmKGk9bi5sZW5ndGgpO3I8aTspe3ZhciBvPXIraT4+PjE7dChuW29dLGUpPDA/cj1vKzE6aT1vfXJldHVybiByfSxyaWdodDpmdW5jdGlvbihuLGUscixpKXtmb3IobnVsbD09ciYmKHI9MCksbnVsbD09aSYmKGk9bi5sZW5ndGgpO3I8aTspe3ZhciBvPXIraT4+PjE7dChuW29dLGUpPjA/aT1vOnI9bysxfXJldHVybiByfX19dmFyIHI9ZShuKSxpPXIucmlnaHQsbz1yLmxlZnQ7ZnVuY3Rpb24gYSh0LG4pe3JldHVyblt0LG5dfWZ1bmN0aW9uIHUodCl7cmV0dXJuIG51bGw9PT10P05hTjordH1mdW5jdGlvbiBmKHQsbil7dmFyIGUscixpPXQubGVuZ3RoLG89MCxhPS0xLGY9MCxjPTA7aWYobnVsbD09bilmb3IoOysrYTxpOylpc05hTihlPXUodFthXSkpfHwoYys9KHI9ZS1mKSooZS0oZis9ci8rK28pKSk7ZWxzZSBmb3IoOysrYTxpOylpc05hTihlPXUobih0W2FdLGEsdCkpKXx8KGMrPShyPWUtZikqKGUtKGYrPXIvKytvKSkpO2lmKG8+MSlyZXR1cm4gYy8oby0xKX1mdW5jdGlvbiBjKHQsbil7dmFyIGU9Zih0LG4pO3JldHVybiBlP01hdGguc3FydChlKTplfWZ1bmN0aW9uIHModCxuKXt2YXIgZSxyLGksbz10Lmxlbmd0aCxhPS0xO2lmKG51bGw9PW4pe2Zvcig7KythPG87KWlmKG51bGwhPShlPXRbYV0pJiZlPj1lKWZvcihyPWk9ZTsrK2E8bzspbnVsbCE9KGU9dFthXSkmJihyPmUmJihyPWUpLGk8ZSYmKGk9ZSkpfWVsc2UgZm9yKDsrK2E8bzspaWYobnVsbCE9KGU9bih0W2FdLGEsdCkpJiZlPj1lKWZvcihyPWk9ZTsrK2E8bzspbnVsbCE9KGU9bih0W2FdLGEsdCkpJiYocj5lJiYocj1lKSxpPGUmJihpPWUpKTtyZXR1cm5bcixpXX12YXIgbD1BcnJheS5wcm90b3R5cGUsaD1sLnNsaWNlLGQ9bC5tYXA7ZnVuY3Rpb24gcCh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24gdih0KXtyZXR1cm4gdH1mdW5jdGlvbiBnKHQsbixlKXt0PSt0LG49K24sZT0oaT1hcmd1bWVudHMubGVuZ3RoKTwyPyhuPXQsdD0wLDEpOmk8Mz8xOitlO2Zvcih2YXIgcj0tMSxpPTB8TWF0aC5tYXgoMCxNYXRoLmNlaWwoKG4tdCkvZSkpLG89bmV3IEFycmF5KGkpOysrcjxpOylvW3JdPXQrciplO3JldHVybiBvfXZhciB5PU1hdGguc3FydCg1MCksXz1NYXRoLnNxcnQoMTApLGI9TWF0aC5zcXJ0KDIpO2Z1bmN0aW9uIG0odCxuLGUpe3ZhciByLGksbyxhLHU9LTE7aWYoZT0rZSwodD0rdCk9PT0obj0rbikmJmU+MClyZXR1cm5bdF07aWYoKHI9bjx0KSYmKGk9dCx0PW4sbj1pKSwwPT09KGE9eCh0LG4sZSkpfHwhaXNGaW5pdGUoYSkpcmV0dXJuW107aWYoYT4wKWZvcih0PU1hdGguY2VpbCh0L2EpLG49TWF0aC5mbG9vcihuL2EpLG89bmV3IEFycmF5KGk9TWF0aC5jZWlsKG4tdCsxKSk7Kyt1PGk7KW9bdV09KHQrdSkqYTtlbHNlIGZvcih0PU1hdGguZmxvb3IodCphKSxuPU1hdGguY2VpbChuKmEpLG89bmV3IEFycmF5KGk9TWF0aC5jZWlsKHQtbisxKSk7Kyt1PGk7KW9bdV09KHQtdSkvYTtyZXR1cm4gciYmby5yZXZlcnNlKCksb31mdW5jdGlvbiB4KHQsbixlKXt2YXIgcj0obi10KS9NYXRoLm1heCgwLGUpLGk9TWF0aC5mbG9vcihNYXRoLmxvZyhyKS9NYXRoLkxOMTApLG89ci9NYXRoLnBvdygxMCxpKTtyZXR1cm4gaT49MD8obz49eT8xMDpvPj1fPzU6bz49Yj8yOjEpKk1hdGgucG93KDEwLGkpOi1NYXRoLnBvdygxMCwtaSkvKG8+PXk/MTA6bz49Xz81Om8+PWI/MjoxKX1mdW5jdGlvbiB3KHQsbixlKXt2YXIgcj1NYXRoLmFicyhuLXQpL01hdGgubWF4KDAsZSksaT1NYXRoLnBvdygxMCxNYXRoLmZsb29yKE1hdGgubG9nKHIpL01hdGguTE4xMCkpLG89ci9pO3JldHVybiBvPj15P2kqPTEwOm8+PV8/aSo9NTpvPj1iJiYoaSo9Miksbjx0Py1pOml9ZnVuY3Rpb24gTSh0KXtyZXR1cm4gTWF0aC5jZWlsKE1hdGgubG9nKHQubGVuZ3RoKS9NYXRoLkxOMikrMX1mdW5jdGlvbiBBKHQsbixlKXtpZihudWxsPT1lJiYoZT11KSxyPXQubGVuZ3RoKXtpZigobj0rbik8PTB8fHI8MilyZXR1cm4rZSh0WzBdLDAsdCk7aWYobj49MSlyZXR1cm4rZSh0W3ItMV0sci0xLHQpO3ZhciByLGk9KHItMSkqbixvPU1hdGguZmxvb3IoaSksYT0rZSh0W29dLG8sdCk7cmV0dXJuIGErKCtlKHRbbysxXSxvKzEsdCktYSkqKGktbyl9fWZ1bmN0aW9uIFQodCxuKXt2YXIgZSxyLGk9dC5sZW5ndGgsbz0tMTtpZihudWxsPT1uKXtmb3IoOysrbzxpOylpZihudWxsIT0oZT10W29dKSYmZT49ZSlmb3Iocj1lOysrbzxpOyludWxsIT0oZT10W29dKSYmZT5yJiYocj1lKX1lbHNlIGZvcig7KytvPGk7KWlmKG51bGwhPShlPW4odFtvXSxvLHQpKSYmZT49ZSlmb3Iocj1lOysrbzxpOyludWxsIT0oZT1uKHRbb10sbyx0KSkmJmU+ciYmKHI9ZSk7cmV0dXJuIHJ9ZnVuY3Rpb24gTih0KXtmb3IodmFyIG4sZSxyLGk9dC5sZW5ndGgsbz0tMSxhPTA7KytvPGk7KWErPXRbb10ubGVuZ3RoO2ZvcihlPW5ldyBBcnJheShhKTstLWk+PTA7KWZvcihuPShyPXRbaV0pLmxlbmd0aDstLW4+PTA7KWVbLS1hXT1yW25dO3JldHVybiBlfWZ1bmN0aW9uIFModCxuKXt2YXIgZSxyLGk9dC5sZW5ndGgsbz0tMTtpZihudWxsPT1uKXtmb3IoOysrbzxpOylpZihudWxsIT0oZT10W29dKSYmZT49ZSlmb3Iocj1lOysrbzxpOyludWxsIT0oZT10W29dKSYmcj5lJiYocj1lKX1lbHNlIGZvcig7KytvPGk7KWlmKG51bGwhPShlPW4odFtvXSxvLHQpKSYmZT49ZSlmb3Iocj1lOysrbzxpOyludWxsIT0oZT1uKHRbb10sbyx0KSkmJnI+ZSYmKHI9ZSk7cmV0dXJuIHJ9ZnVuY3Rpb24gRSh0KXtpZighKGk9dC5sZW5ndGgpKXJldHVybltdO2Zvcih2YXIgbj0tMSxlPVModCxrKSxyPW5ldyBBcnJheShlKTsrK248ZTspZm9yKHZhciBpLG89LTEsYT1yW25dPW5ldyBBcnJheShpKTsrK288aTspYVtvXT10W29dW25dO3JldHVybiByfWZ1bmN0aW9uIGsodCl7cmV0dXJuIHQubGVuZ3RofXZhciBDPUFycmF5LnByb3RvdHlwZS5zbGljZTtmdW5jdGlvbiBQKHQpe3JldHVybiB0fXZhciB6PTEsUj0yLEw9MyxEPTQsVT0xZS02O2Z1bmN0aW9uIHEodCl7cmV0dXJuInRyYW5zbGF0ZSgiKyh0Ky41KSsiLDApIn1mdW5jdGlvbiBPKHQpe3JldHVybiJ0cmFuc2xhdGUoMCwiKyh0Ky41KSsiKSJ9ZnVuY3Rpb24gWSgpe3JldHVybiF0aGlzLl9fYXhpc31mdW5jdGlvbiBCKHQsbil7dmFyIGU9W10scj1udWxsLGk9bnVsbCxvPTYsYT02LHU9MyxmPXQ9PT16fHx0PT09RD8tMToxLGM9dD09PUR8fHQ9PT1SPyJ4IjoieSIscz10PT09enx8dD09PUw/cTpPO2Z1bmN0aW9uIGwobCl7dmFyIGg9bnVsbD09cj9uLnRpY2tzP24udGlja3MuYXBwbHkobixlKTpuLmRvbWFpbigpOnIsZD1udWxsPT1pP24udGlja0Zvcm1hdD9uLnRpY2tGb3JtYXQuYXBwbHkobixlKTpQOmkscD1NYXRoLm1heChvLDApK3Usdj1uLnJhbmdlKCksZz0rdlswXSsuNSx5PSt2W3YubGVuZ3RoLTFdKy41LF89KG4uYmFuZHdpZHRoP2Z1bmN0aW9uKHQpe3ZhciBuPU1hdGgubWF4KDAsdC5iYW5kd2lkdGgoKS0xKS8yO3JldHVybiB0LnJvdW5kKCkmJihuPU1hdGgucm91bmQobikpLGZ1bmN0aW9uKGUpe3JldHVybit0KGUpK259fTpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuK3Qobil9fSkobi5jb3B5KCkpLGI9bC5zZWxlY3Rpb24/bC5zZWxlY3Rpb24oKTpsLG09Yi5zZWxlY3RBbGwoIi5kb21haW4iKS5kYXRhKFtudWxsXSkseD1iLnNlbGVjdEFsbCgiLnRpY2siKS5kYXRhKGgsbikub3JkZXIoKSx3PXguZXhpdCgpLE09eC5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwidGljayIpLEE9eC5zZWxlY3QoImxpbmUiKSxUPXguc2VsZWN0KCJ0ZXh0Iik7bT1tLm1lcmdlKG0uZW50ZXIoKS5pbnNlcnQoInBhdGgiLCIudGljayIpLmF0dHIoImNsYXNzIiwiZG9tYWluIikuYXR0cigic3Ryb2tlIiwiY3VycmVudENvbG9yIikpLHg9eC5tZXJnZShNKSxBPUEubWVyZ2UoTS5hcHBlbmQoImxpbmUiKS5hdHRyKCJzdHJva2UiLCJjdXJyZW50Q29sb3IiKS5hdHRyKGMrIjIiLGYqbykpLFQ9VC5tZXJnZShNLmFwcGVuZCgidGV4dCIpLmF0dHIoImZpbGwiLCJjdXJyZW50Q29sb3IiKS5hdHRyKGMsZipwKS5hdHRyKCJkeSIsdD09PXo/IjBlbSI6dD09PUw/IjAuNzFlbSI6IjAuMzJlbSIpKSxsIT09YiYmKG09bS50cmFuc2l0aW9uKGwpLHg9eC50cmFuc2l0aW9uKGwpLEE9QS50cmFuc2l0aW9uKGwpLFQ9VC50cmFuc2l0aW9uKGwpLHc9dy50cmFuc2l0aW9uKGwpLmF0dHIoIm9wYWNpdHkiLFUpLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24odCl7cmV0dXJuIGlzRmluaXRlKHQ9Xyh0KSk/cyh0KTp0aGlzLmdldEF0dHJpYnV0ZSgidHJhbnNmb3JtIil9KSxNLmF0dHIoIm9wYWNpdHkiLFUpLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24odCl7dmFyIG49dGhpcy5wYXJlbnROb2RlLl9fYXhpcztyZXR1cm4gcyhuJiZpc0Zpbml0ZShuPW4odCkpP246Xyh0KSl9KSksdy5yZW1vdmUoKSxtLmF0dHIoImQiLHQ9PT1EfHx0PT1SP2E/Ik0iK2YqYSsiLCIrZysiSDAuNVYiK3krIkgiK2YqYToiTTAuNSwiK2crIlYiK3k6YT8iTSIrZysiLCIrZiphKyJWMC41SCIreSsiViIrZiphOiJNIitnKyIsMC41SCIreSkseC5hdHRyKCJvcGFjaXR5IiwxKS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKHQpe3JldHVybiBzKF8odCkpfSksQS5hdHRyKGMrIjIiLGYqbyksVC5hdHRyKGMsZipwKS50ZXh0KGQpLGIuZmlsdGVyKFkpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigiZm9udC1zaXplIiwxMCkuYXR0cigiZm9udC1mYW1pbHkiLCJzYW5zLXNlcmlmIikuYXR0cigidGV4dC1hbmNob3IiLHQ9PT1SPyJzdGFydCI6dD09PUQ/ImVuZCI6Im1pZGRsZSIpLGIuZWFjaChmdW5jdGlvbigpe3RoaXMuX19heGlzPV99KX1yZXR1cm4gbC5zY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10LGwpOm59LGwudGlja3M9ZnVuY3Rpb24oKXtyZXR1cm4gZT1DLmNhbGwoYXJndW1lbnRzKSxsfSxsLnRpY2tBcmd1bWVudHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9bnVsbD09dD9bXTpDLmNhbGwodCksbCk6ZS5zbGljZSgpfSxsLnRpY2tWYWx1ZXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9bnVsbD09dD9udWxsOkMuY2FsbCh0KSxsKTpyJiZyLnNsaWNlKCl9LGwudGlja0Zvcm1hdD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10LGwpOml9LGwudGlja1NpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89YT0rdCxsKTpvfSxsLnRpY2tTaXplSW5uZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89K3QsbCk6b30sbC50aWNrU2l6ZU91dGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSt0LGwpOmF9LGwudGlja1BhZGRpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9K3QsbCk6dX0sbH12YXIgRj17dmFsdWU6ZnVuY3Rpb24oKXt9fTtmdW5jdGlvbiBJKCl7Zm9yKHZhciB0LG49MCxlPWFyZ3VtZW50cy5sZW5ndGgscj17fTtuPGU7KytuKXtpZighKHQ9YXJndW1lbnRzW25dKyIiKXx8dCBpbiByKXRocm93IG5ldyBFcnJvcigiaWxsZWdhbCB0eXBlOiAiK3QpO3JbdF09W119cmV0dXJuIG5ldyBIKHIpfWZ1bmN0aW9uIEgodCl7dGhpcy5fPXR9ZnVuY3Rpb24gaih0LG4pe2Zvcih2YXIgZSxyPTAsaT10Lmxlbmd0aDtyPGk7KytyKWlmKChlPXRbcl0pLm5hbWU9PT1uKXJldHVybiBlLnZhbHVlfWZ1bmN0aW9uIFgodCxuLGUpe2Zvcih2YXIgcj0wLGk9dC5sZW5ndGg7cjxpOysrcilpZih0W3JdLm5hbWU9PT1uKXt0W3JdPUYsdD10LnNsaWNlKDAscikuY29uY2F0KHQuc2xpY2UocisxKSk7YnJlYWt9cmV0dXJuIG51bGwhPWUmJnQucHVzaCh7bmFtZTpuLHZhbHVlOmV9KSx0fUgucHJvdG90eXBlPUkucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpILG9uOmZ1bmN0aW9uKHQsbil7dmFyIGUscixpPXRoaXMuXyxvPShyPWksKHQrIiIpLnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24odCl7dmFyIG49IiIsZT10LmluZGV4T2YoIi4iKTtpZihlPj0wJiYobj10LnNsaWNlKGUrMSksdD10LnNsaWNlKDAsZSkpLHQmJiFyLmhhc093blByb3BlcnR5KHQpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3QpO3JldHVybnt0eXBlOnQsbmFtZTpufX0pKSxhPS0xLHU9by5sZW5ndGg7aWYoIShhcmd1bWVudHMubGVuZ3RoPDIpKXtpZihudWxsIT1uJiYiZnVuY3Rpb24iIT10eXBlb2Ygbil0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2s6ICIrbik7Zm9yKDsrK2E8dTspaWYoZT0odD1vW2FdKS50eXBlKWlbZV09WChpW2VdLHQubmFtZSxuKTtlbHNlIGlmKG51bGw9PW4pZm9yKGUgaW4gaSlpW2VdPVgoaVtlXSx0Lm5hbWUsbnVsbCk7cmV0dXJuIHRoaXN9Zm9yKDsrK2E8dTspaWYoKGU9KHQ9b1thXSkudHlwZSkmJihlPWooaVtlXSx0Lm5hbWUpKSlyZXR1cm4gZX0sY29weTpmdW5jdGlvbigpe3ZhciB0PXt9LG49dGhpcy5fO2Zvcih2YXIgZSBpbiBuKXRbZV09bltlXS5zbGljZSgpO3JldHVybiBuZXcgSCh0KX0sY2FsbDpmdW5jdGlvbih0LG4pe2lmKChlPWFyZ3VtZW50cy5sZW5ndGgtMik+MClmb3IodmFyIGUscixpPW5ldyBBcnJheShlKSxvPTA7bzxlOysrbylpW29dPWFyZ3VtZW50c1tvKzJdO2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkodCkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrdCk7Zm9yKG89MCxlPShyPXRoaXMuX1t0XSkubGVuZ3RoO288ZTsrK28pcltvXS52YWx1ZS5hcHBseShuLGkpfSxhcHBseTpmdW5jdGlvbih0LG4sZSl7aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eSh0KSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIit0KTtmb3IodmFyIHI9dGhpcy5fW3RdLGk9MCxvPXIubGVuZ3RoO2k8bzsrK2kpcltpXS52YWx1ZS5hcHBseShuLGUpfX07dmFyIEc9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLFY9e3N2ZzoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHhodG1sOkcseGxpbms6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLHhtbDoiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8ifTtmdW5jdGlvbiAkKHQpe3ZhciBuPXQrPSIiLGU9bi5pbmRleE9mKCI6Iik7cmV0dXJuIGU+PTAmJiJ4bWxucyIhPT0obj10LnNsaWNlKDAsZSkpJiYodD10LnNsaWNlKGUrMSkpLFYuaGFzT3duUHJvcGVydHkobik/e3NwYWNlOlZbbl0sbG9jYWw6dH06dH1mdW5jdGlvbiBXKHQpe3ZhciBuPSQodCk7cmV0dXJuKG4ubG9jYWw/ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50TlModC5zcGFjZSx0LmxvY2FsKX19OmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPXRoaXMub3duZXJEb2N1bWVudCxlPXRoaXMubmFtZXNwYWNlVVJJO3JldHVybiBlPT09RyYmbi5kb2N1bWVudEVsZW1lbnQubmFtZXNwYWNlVVJJPT09Rz9uLmNyZWF0ZUVsZW1lbnQodCk6bi5jcmVhdGVFbGVtZW50TlMoZSx0KX19KShuKX1mdW5jdGlvbiBaKCl7fWZ1bmN0aW9uIFEodCl7cmV0dXJuIG51bGw9PXQ/WjpmdW5jdGlvbigpe3JldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3IodCl9fWZ1bmN0aW9uIEooKXtyZXR1cm5bXX1mdW5jdGlvbiBLKHQpe3JldHVybiBudWxsPT10P0o6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yQWxsKHQpfX12YXIgdHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWF0Y2hlcyh0KX19O2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgZG9jdW1lbnQpe3ZhciBudD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7aWYoIW50Lm1hdGNoZXMpe3ZhciBldD1udC53ZWJraXRNYXRjaGVzU2VsZWN0b3J8fG50Lm1zTWF0Y2hlc1NlbGVjdG9yfHxudC5tb3pNYXRjaGVzU2VsZWN0b3J8fG50Lm9NYXRjaGVzU2VsZWN0b3I7dHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV0LmNhbGwodGhpcyx0KX19fX12YXIgcnQ9dHQ7ZnVuY3Rpb24gaXQodCl7cmV0dXJuIG5ldyBBcnJheSh0Lmxlbmd0aCl9ZnVuY3Rpb24gb3QodCxuKXt0aGlzLm93bmVyRG9jdW1lbnQ9dC5vd25lckRvY3VtZW50LHRoaXMubmFtZXNwYWNlVVJJPXQubmFtZXNwYWNlVVJJLHRoaXMuX25leHQ9bnVsbCx0aGlzLl9wYXJlbnQ9dCx0aGlzLl9fZGF0YV9fPW59b3QucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpvdCxhcHBlbmRDaGlsZDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZSh0LHRoaXMuX25leHQpfSxpbnNlcnRCZWZvcmU6ZnVuY3Rpb24odCxuKXtyZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZSh0LG4pfSxxdWVyeVNlbGVjdG9yOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wYXJlbnQucXVlcnlTZWxlY3Rvcih0KX0scXVlcnlTZWxlY3RvckFsbDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwodCl9fTt2YXIgYXQ9IiQiO2Z1bmN0aW9uIHV0KHQsbixlLHIsaSxvKXtmb3IodmFyIGEsdT0wLGY9bi5sZW5ndGgsYz1vLmxlbmd0aDt1PGM7Kyt1KShhPW5bdV0pPyhhLl9fZGF0YV9fPW9bdV0sclt1XT1hKTplW3VdPW5ldyBvdCh0LG9bdV0pO2Zvcig7dTxmOysrdSkoYT1uW3VdKSYmKGlbdV09YSl9ZnVuY3Rpb24gZnQodCxuLGUscixpLG8sYSl7dmFyIHUsZixjLHM9e30sbD1uLmxlbmd0aCxoPW8ubGVuZ3RoLGQ9bmV3IEFycmF5KGwpO2Zvcih1PTA7dTxsOysrdSkoZj1uW3VdKSYmKGRbdV09Yz1hdCthLmNhbGwoZixmLl9fZGF0YV9fLHUsbiksYyBpbiBzP2lbdV09ZjpzW2NdPWYpO2Zvcih1PTA7dTxoOysrdSkoZj1zW2M9YXQrYS5jYWxsKHQsb1t1XSx1LG8pXSk/KHJbdV09ZixmLl9fZGF0YV9fPW9bdV0sc1tjXT1udWxsKTplW3VdPW5ldyBvdCh0LG9bdV0pO2Zvcih1PTA7dTxsOysrdSkoZj1uW3VdKSYmc1tkW3VdXT09PWYmJihpW3VdPWYpfWZ1bmN0aW9uIGN0KHQsbil7cmV0dXJuIHQ8bj8tMTp0Pm4/MTp0Pj1uPzA6TmFOfWZ1bmN0aW9uIHN0KHQpe3JldHVybiB0Lm93bmVyRG9jdW1lbnQmJnQub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld3x8dC5kb2N1bWVudCYmdHx8dC5kZWZhdWx0Vmlld31mdW5jdGlvbiBsdCh0LG4pe3JldHVybiB0LnN0eWxlLmdldFByb3BlcnR5VmFsdWUobil8fHN0KHQpLmdldENvbXB1dGVkU3R5bGUodCxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKG4pfWZ1bmN0aW9uIGh0KHQpe3JldHVybiB0LnRyaW0oKS5zcGxpdCgvXnxccysvKX1mdW5jdGlvbiBkdCh0KXtyZXR1cm4gdC5jbGFzc0xpc3R8fG5ldyBwdCh0KX1mdW5jdGlvbiBwdCh0KXt0aGlzLl9ub2RlPXQsdGhpcy5fbmFtZXM9aHQodC5nZXRBdHRyaWJ1dGUoImNsYXNzIil8fCIiKX1mdW5jdGlvbiB2dCh0LG4pe2Zvcih2YXIgZT1kdCh0KSxyPS0xLGk9bi5sZW5ndGg7KytyPGk7KWUuYWRkKG5bcl0pfWZ1bmN0aW9uIGd0KHQsbil7Zm9yKHZhciBlPWR0KHQpLHI9LTEsaT1uLmxlbmd0aDsrK3I8aTspZS5yZW1vdmUobltyXSl9ZnVuY3Rpb24geXQoKXt0aGlzLnRleHRDb250ZW50PSIifWZ1bmN0aW9uIF90KCl7dGhpcy5pbm5lckhUTUw9IiJ9ZnVuY3Rpb24gYnQoKXt0aGlzLm5leHRTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcyl9ZnVuY3Rpb24gbXQoKXt0aGlzLnByZXZpb3VzU2libGluZyYmdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLHRoaXMucGFyZW50Tm9kZS5maXJzdENoaWxkKX1mdW5jdGlvbiB4dCgpe3JldHVybiBudWxsfWZ1bmN0aW9uIHd0KCl7dmFyIHQ9dGhpcy5wYXJlbnROb2RlO3QmJnQucmVtb3ZlQ2hpbGQodGhpcyl9ZnVuY3Rpb24gTXQoKXtyZXR1cm4gdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLmNsb25lTm9kZSghMSksdGhpcy5uZXh0U2libGluZyl9ZnVuY3Rpb24gQXQoKXtyZXR1cm4gdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLmNsb25lTm9kZSghMCksdGhpcy5uZXh0U2libGluZyl9cHQucHJvdG90eXBlPXthZGQ6ZnVuY3Rpb24odCl7dGhpcy5fbmFtZXMuaW5kZXhPZih0KTwwJiYodGhpcy5fbmFtZXMucHVzaCh0KSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSxyZW1vdmU6ZnVuY3Rpb24odCl7dmFyIG49dGhpcy5fbmFtZXMuaW5kZXhPZih0KTtuPj0wJiYodGhpcy5fbmFtZXMuc3BsaWNlKG4sMSksdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLl9uYW1lcy5qb2luKCIgIikpKX0sY29udGFpbnM6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX25hbWVzLmluZGV4T2YodCk+PTB9fTt2YXIgVHQ9e307KHQuZXZlbnQ9bnVsbCwidW5kZWZpbmVkIiE9dHlwZW9mIGRvY3VtZW50KSYmKCJvbm1vdXNlZW50ZXIiaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50fHwoVHQ9e21vdXNlZW50ZXI6Im1vdXNlb3ZlciIsbW91c2VsZWF2ZToibW91c2VvdXQifSkpO2Z1bmN0aW9uIE50KHQsbixlKXtyZXR1cm4gdD1TdCh0LG4sZSksZnVuY3Rpb24obil7dmFyIGU9bi5yZWxhdGVkVGFyZ2V0O2UmJihlPT09dGhpc3x8OCZlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHRoaXMpKXx8dC5jYWxsKHRoaXMsbil9fWZ1bmN0aW9uIFN0KG4sZSxyKXtyZXR1cm4gZnVuY3Rpb24oaSl7dmFyIG89dC5ldmVudDt0LmV2ZW50PWk7dHJ5e24uY2FsbCh0aGlzLHRoaXMuX19kYXRhX18sZSxyKX1maW5hbGx5e3QuZXZlbnQ9b319fWZ1bmN0aW9uIEV0KHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPXRoaXMuX19vbjtpZihuKXtmb3IodmFyIGUscj0wLGk9LTEsbz1uLmxlbmd0aDtyPG87KytyKWU9bltyXSx0LnR5cGUmJmUudHlwZSE9PXQudHlwZXx8ZS5uYW1lIT09dC5uYW1lP25bKytpXT1lOnRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihlLnR5cGUsZS5saXN0ZW5lcixlLmNhcHR1cmUpOysraT9uLmxlbmd0aD1pOmRlbGV0ZSB0aGlzLl9fb259fX1mdW5jdGlvbiBrdCh0LG4sZSl7dmFyIHI9VHQuaGFzT3duUHJvcGVydHkodC50eXBlKT9OdDpTdDtyZXR1cm4gZnVuY3Rpb24oaSxvLGEpe3ZhciB1LGY9dGhpcy5fX29uLGM9cihuLG8sYSk7aWYoZilmb3IodmFyIHM9MCxsPWYubGVuZ3RoO3M8bDsrK3MpaWYoKHU9ZltzXSkudHlwZT09PXQudHlwZSYmdS5uYW1lPT09dC5uYW1lKXJldHVybiB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIodS50eXBlLHUubGlzdGVuZXIsdS5jYXB0dXJlKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIodS50eXBlLHUubGlzdGVuZXI9Yyx1LmNhcHR1cmU9ZSksdm9pZCh1LnZhbHVlPW4pO3RoaXMuYWRkRXZlbnRMaXN0ZW5lcih0LnR5cGUsYyxlKSx1PXt0eXBlOnQudHlwZSxuYW1lOnQubmFtZSx2YWx1ZTpuLGxpc3RlbmVyOmMsY2FwdHVyZTplfSxmP2YucHVzaCh1KTp0aGlzLl9fb249W3VdfX1mdW5jdGlvbiBDdChuLGUscixpKXt2YXIgbz10LmV2ZW50O24uc291cmNlRXZlbnQ9dC5ldmVudCx0LmV2ZW50PW47dHJ5e3JldHVybiBlLmFwcGx5KHIsaSl9ZmluYWxseXt0LmV2ZW50PW99fWZ1bmN0aW9uIFB0KHQsbixlKXt2YXIgcj1zdCh0KSxpPXIuQ3VzdG9tRXZlbnQ7ImZ1bmN0aW9uIj09dHlwZW9mIGk/aT1uZXcgaShuLGUpOihpPXIuZG9jdW1lbnQuY3JlYXRlRXZlbnQoIkV2ZW50IiksZT8oaS5pbml0RXZlbnQobixlLmJ1YmJsZXMsZS5jYW5jZWxhYmxlKSxpLmRldGFpbD1lLmRldGFpbCk6aS5pbml0RXZlbnQobiwhMSwhMSkpLHQuZGlzcGF0Y2hFdmVudChpKX12YXIgenQ9W251bGxdO2Z1bmN0aW9uIFJ0KHQsbil7dGhpcy5fZ3JvdXBzPXQsdGhpcy5fcGFyZW50cz1ufWZ1bmN0aW9uIEx0KCl7cmV0dXJuIG5ldyBSdChbW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF1dLHp0KX1mdW5jdGlvbiBEdCh0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQ/bmV3IFJ0KFtbZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0KV1dLFtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdKTpuZXcgUnQoW1t0XV0senQpfVJ0LnByb3RvdHlwZT1MdC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlJ0LHNlbGVjdDpmdW5jdGlvbih0KXsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9USh0KSk7Zm9yKHZhciBuPXRoaXMuX2dyb3VwcyxlPW4ubGVuZ3RoLHI9bmV3IEFycmF5KGUpLGk9MDtpPGU7KytpKWZvcih2YXIgbyxhLHU9bltpXSxmPXUubGVuZ3RoLGM9cltpXT1uZXcgQXJyYXkoZikscz0wO3M8ZjsrK3MpKG89dVtzXSkmJihhPXQuY2FsbChvLG8uX19kYXRhX18scyx1KSkmJigiX19kYXRhX18iaW4gbyYmKGEuX19kYXRhX189by5fX2RhdGFfXyksY1tzXT1hKTtyZXR1cm4gbmV3IFJ0KHIsdGhpcy5fcGFyZW50cyl9LHNlbGVjdEFsbDpmdW5jdGlvbih0KXsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9Syh0KSk7Zm9yKHZhciBuPXRoaXMuX2dyb3VwcyxlPW4ubGVuZ3RoLHI9W10saT1bXSxvPTA7bzxlOysrbylmb3IodmFyIGEsdT1uW29dLGY9dS5sZW5ndGgsYz0wO2M8ZjsrK2MpKGE9dVtjXSkmJihyLnB1c2godC5jYWxsKGEsYS5fX2RhdGFfXyxjLHUpKSxpLnB1c2goYSkpO3JldHVybiBuZXcgUnQocixpKX0sZmlsdGVyOmZ1bmN0aW9uKHQpeyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1ydCh0KSk7Zm9yKHZhciBuPXRoaXMuX2dyb3VwcyxlPW4ubGVuZ3RoLHI9bmV3IEFycmF5KGUpLGk9MDtpPGU7KytpKWZvcih2YXIgbyxhPW5baV0sdT1hLmxlbmd0aCxmPXJbaV09W10sYz0wO2M8dTsrK2MpKG89YVtjXSkmJnQuY2FsbChvLG8uX19kYXRhX18sYyxhKSYmZi5wdXNoKG8pO3JldHVybiBuZXcgUnQocix0aGlzLl9wYXJlbnRzKX0sZGF0YTpmdW5jdGlvbih0LG4pe2lmKCF0KXJldHVybiBwPW5ldyBBcnJheSh0aGlzLnNpemUoKSkscz0tMSx0aGlzLmVhY2goZnVuY3Rpb24odCl7cFsrK3NdPXR9KSxwO3ZhciBlLHI9bj9mdDp1dCxpPXRoaXMuX3BhcmVudHMsbz10aGlzLl9ncm91cHM7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJihlPXQsdD1mdW5jdGlvbigpe3JldHVybiBlfSk7Zm9yKHZhciBhPW8ubGVuZ3RoLHU9bmV3IEFycmF5KGEpLGY9bmV3IEFycmF5KGEpLGM9bmV3IEFycmF5KGEpLHM9MDtzPGE7KytzKXt2YXIgbD1pW3NdLGg9b1tzXSxkPWgubGVuZ3RoLHA9dC5jYWxsKGwsbCYmbC5fX2RhdGFfXyxzLGkpLHY9cC5sZW5ndGgsZz1mW3NdPW5ldyBBcnJheSh2KSx5PXVbc109bmV3IEFycmF5KHYpO3IobCxoLGcseSxjW3NdPW5ldyBBcnJheShkKSxwLG4pO2Zvcih2YXIgXyxiLG09MCx4PTA7bTx2OysrbSlpZihfPWdbbV0pe2ZvcihtPj14JiYoeD1tKzEpOyEoYj15W3hdKSYmKyt4PHY7KTtfLl9uZXh0PWJ8fG51bGx9fXJldHVybih1PW5ldyBSdCh1LGkpKS5fZW50ZXI9Zix1Ll9leGl0PWMsdX0sZW50ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFJ0KHRoaXMuX2VudGVyfHx0aGlzLl9ncm91cHMubWFwKGl0KSx0aGlzLl9wYXJlbnRzKX0sZXhpdDpmdW5jdGlvbigpe3JldHVybiBuZXcgUnQodGhpcy5fZXhpdHx8dGhpcy5fZ3JvdXBzLm1hcChpdCksdGhpcy5fcGFyZW50cyl9LG1lcmdlOmZ1bmN0aW9uKHQpe2Zvcih2YXIgbj10aGlzLl9ncm91cHMsZT10Ll9ncm91cHMscj1uLmxlbmd0aCxpPWUubGVuZ3RoLG89TWF0aC5taW4ocixpKSxhPW5ldyBBcnJheShyKSx1PTA7dTxvOysrdSlmb3IodmFyIGYsYz1uW3VdLHM9ZVt1XSxsPWMubGVuZ3RoLGg9YVt1XT1uZXcgQXJyYXkobCksZD0wO2Q8bDsrK2QpKGY9Y1tkXXx8c1tkXSkmJihoW2RdPWYpO2Zvcig7dTxyOysrdSlhW3VdPW5bdV07cmV0dXJuIG5ldyBSdChhLHRoaXMuX3BhcmVudHMpfSxvcmRlcjpmdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLl9ncm91cHMsbj0tMSxlPXQubGVuZ3RoOysrbjxlOylmb3IodmFyIHIsaT10W25dLG89aS5sZW5ndGgtMSxhPWlbb107LS1vPj0wOykocj1pW29dKSYmKGEmJmEhPT1yLm5leHRTaWJsaW5nJiZhLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHIsYSksYT1yKTtyZXR1cm4gdGhpc30sc29ydDpmdW5jdGlvbih0KXtmdW5jdGlvbiBuKG4sZSl7cmV0dXJuIG4mJmU/dChuLl9fZGF0YV9fLGUuX19kYXRhX18pOiFuLSFlfXR8fCh0PWN0KTtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLHI9ZS5sZW5ndGgsaT1uZXcgQXJyYXkociksbz0wO288cjsrK28pe2Zvcih2YXIgYSx1PWVbb10sZj11Lmxlbmd0aCxjPWlbb109bmV3IEFycmF5KGYpLHM9MDtzPGY7KytzKShhPXVbc10pJiYoY1tzXT1hKTtjLnNvcnQobil9cmV0dXJuIG5ldyBSdChpLHRoaXMuX3BhcmVudHMpLm9yZGVyKCl9LGNhbGw6ZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHNbMF07cmV0dXJuIGFyZ3VtZW50c1swXT10aGlzLHQuYXBwbHkobnVsbCxhcmd1bWVudHMpLHRoaXN9LG5vZGVzOmZ1bmN0aW9uKCl7dmFyIHQ9bmV3IEFycmF5KHRoaXMuc2l6ZSgpKSxuPS0xO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt0Wysrbl09dGhpc30pLHR9LG5vZGU6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLG49MCxlPXQubGVuZ3RoO248ZTsrK24pZm9yKHZhciByPXRbbl0saT0wLG89ci5sZW5ndGg7aTxvOysraSl7dmFyIGE9cltpXTtpZihhKXJldHVybiBhfXJldHVybiBudWxsfSxzaXplOmZ1bmN0aW9uKCl7dmFyIHQ9MDtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7Kyt0fSksdH0sZW1wdHk6ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5ub2RlKCl9LGVhY2g6ZnVuY3Rpb24odCl7Zm9yKHZhciBuPXRoaXMuX2dyb3VwcyxlPTAscj1uLmxlbmd0aDtlPHI7KytlKWZvcih2YXIgaSxvPW5bZV0sYT0wLHU9by5sZW5ndGg7YTx1OysrYSkoaT1vW2FdKSYmdC5jYWxsKGksaS5fX2RhdGFfXyxhLG8pO3JldHVybiB0aGlzfSxhdHRyOmZ1bmN0aW9uKHQsbil7dmFyIGU9JCh0KTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciByPXRoaXMubm9kZSgpO3JldHVybiBlLmxvY2FsP3IuZ2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsKTpyLmdldEF0dHJpYnV0ZShlKX1yZXR1cm4gdGhpcy5lYWNoKChudWxsPT1uP2UubG9jYWw/ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpfX06ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUodCl9fToiZnVuY3Rpb24iPT10eXBlb2Ygbj9lLmxvY2FsP2Z1bmN0aW9uKHQsbil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09ZT90aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCk6dGhpcy5zZXRBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwsZSl9fTpmdW5jdGlvbih0LG4pe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPW4uYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PWU/dGhpcy5yZW1vdmVBdHRyaWJ1dGUodCk6dGhpcy5zZXRBdHRyaWJ1dGUodCxlKX19OmUubG9jYWw/ZnVuY3Rpb24odCxuKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCxuKX19OmZ1bmN0aW9uKHQsbil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zZXRBdHRyaWJ1dGUodCxuKX19KShlLG4pKX0sc3R5bGU6ZnVuY3Rpb24odCxuLGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKChudWxsPT1uP2Z1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCl9fToiZnVuY3Rpb24iPT10eXBlb2Ygbj9mdW5jdGlvbih0LG4sZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09cj90aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpOnRoaXMuc3R5bGUuc2V0UHJvcGVydHkodCxyLGUpfX06ZnVuY3Rpb24odCxuLGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkodCxuLGUpfX0pKHQsbixudWxsPT1lPyIiOmUpKTpsdCh0aGlzLm5vZGUoKSx0KX0scHJvcGVydHk6ZnVuY3Rpb24odCxuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaCgobnVsbD09bj9mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtkZWxldGUgdGhpc1t0XX19OiJmdW5jdGlvbiI9PXR5cGVvZiBuP2Z1bmN0aW9uKHQsbil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09ZT9kZWxldGUgdGhpc1t0XTp0aGlzW3RdPWV9fTpmdW5jdGlvbih0LG4pe3JldHVybiBmdW5jdGlvbigpe3RoaXNbdF09bn19KSh0LG4pKTp0aGlzLm5vZGUoKVt0XX0sY2xhc3NlZDpmdW5jdGlvbih0LG4pe3ZhciBlPWh0KHQrIiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciByPWR0KHRoaXMubm9kZSgpKSxpPS0xLG89ZS5sZW5ndGg7KytpPG87KWlmKCFyLmNvbnRhaW5zKGVbaV0pKXJldHVybiExO3JldHVybiEwfXJldHVybiB0aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiBuP2Z1bmN0aW9uKHQsbil7cmV0dXJuIGZ1bmN0aW9uKCl7KG4uYXBwbHkodGhpcyxhcmd1bWVudHMpP3Z0Omd0KSh0aGlzLHQpfX06bj9mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt2dCh0aGlzLHQpfX06ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7Z3QodGhpcyx0KX19KShlLG4pKX0sdGV4dDpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2gobnVsbD09dD95dDooImZ1bmN0aW9uIj09dHlwZW9mIHQ/ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy50ZXh0Q29udGVudD1udWxsPT1uPyIiOm59fTpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PXR9fSkodCkpOnRoaXMubm9kZSgpLnRleHRDb250ZW50fSxodG1sOmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChudWxsPT10P190OigiZnVuY3Rpb24iPT10eXBlb2YgdD9mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLmlubmVySFRNTD1udWxsPT1uPyIiOm59fTpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLmlubmVySFRNTD10fX0pKHQpKTp0aGlzLm5vZGUoKS5pbm5lckhUTUx9LHJhaXNlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWFjaChidCl9LGxvd2VyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWFjaChtdCl9LGFwcGVuZDpmdW5jdGlvbih0KXt2YXIgbj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OlcodCk7cmV0dXJuIHRoaXMuc2VsZWN0KGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYXBwZW5kQ2hpbGQobi5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSl9LGluc2VydDpmdW5jdGlvbih0LG4pe3ZhciBlPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6Vyh0KSxyPW51bGw9PW4/eHQ6ImZ1bmN0aW9uIj09dHlwZW9mIG4/bjpRKG4pO3JldHVybiB0aGlzLnNlbGVjdChmdW5jdGlvbigpe3JldHVybiB0aGlzLmluc2VydEJlZm9yZShlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxyLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8bnVsbCl9KX0scmVtb3ZlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWFjaCh3dCl9LGNsb25lOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnNlbGVjdCh0P0F0Ok10KX0sZGF0dW06ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5wcm9wZXJ0eSgiX19kYXRhX18iLHQpOnRoaXMubm9kZSgpLl9fZGF0YV9ffSxvbjpmdW5jdGlvbih0LG4sZSl7dmFyIHIsaSxvPWZ1bmN0aW9uKHQpe3JldHVybiB0LnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24odCl7dmFyIG49IiIsZT10LmluZGV4T2YoIi4iKTtyZXR1cm4gZT49MCYmKG49dC5zbGljZShlKzEpLHQ9dC5zbGljZSgwLGUpKSx7dHlwZTp0LG5hbWU6bn19KX0odCsiIiksYT1vLmxlbmd0aDtpZighKGFyZ3VtZW50cy5sZW5ndGg8Mikpe2Zvcih1PW4/a3Q6RXQsbnVsbD09ZSYmKGU9ITEpLHI9MDtyPGE7KytyKXRoaXMuZWFjaCh1KG9bcl0sbixlKSk7cmV0dXJuIHRoaXN9dmFyIHU9dGhpcy5ub2RlKCkuX19vbjtpZih1KWZvcih2YXIgZixjPTAscz11Lmxlbmd0aDtjPHM7KytjKWZvcihyPTAsZj11W2NdO3I8YTsrK3IpaWYoKGk9b1tyXSkudHlwZT09PWYudHlwZSYmaS5uYW1lPT09Zi5uYW1lKXJldHVybiBmLnZhbHVlfSxkaXNwYXRjaDpmdW5jdGlvbih0LG4pe3JldHVybiB0aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiBuP2Z1bmN0aW9uKHQsbil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIFB0KHRoaXMsdCxuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9fTpmdW5jdGlvbih0LG4pe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBQdCh0aGlzLHQsbil9fSkodCxuKSl9fTt2YXIgVXQ9MDtmdW5jdGlvbiBxdCgpe3JldHVybiBuZXcgT3R9ZnVuY3Rpb24gT3QoKXt0aGlzLl89IkAiKygrK1V0KS50b1N0cmluZygzNil9ZnVuY3Rpb24gWXQoKXtmb3IodmFyIG4sZT10LmV2ZW50O249ZS5zb3VyY2VFdmVudDspZT1uO3JldHVybiBlfWZ1bmN0aW9uIEJ0KHQsbil7dmFyIGU9dC5vd25lclNWR0VsZW1lbnR8fHQ7aWYoZS5jcmVhdGVTVkdQb2ludCl7dmFyIHI9ZS5jcmVhdGVTVkdQb2ludCgpO3JldHVybiByLng9bi5jbGllbnRYLHIueT1uLmNsaWVudFksWyhyPXIubWF0cml4VHJhbnNmb3JtKHQuZ2V0U2NyZWVuQ1RNKCkuaW52ZXJzZSgpKSkueCxyLnldfXZhciBpPXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuW24uY2xpZW50WC1pLmxlZnQtdC5jbGllbnRMZWZ0LG4uY2xpZW50WS1pLnRvcC10LmNsaWVudFRvcF19ZnVuY3Rpb24gRnQodCl7dmFyIG49WXQoKTtyZXR1cm4gbi5jaGFuZ2VkVG91Y2hlcyYmKG49bi5jaGFuZ2VkVG91Y2hlc1swXSksQnQodCxuKX1mdW5jdGlvbiBJdCh0LG4sZSl7YXJndW1lbnRzLmxlbmd0aDwzJiYoZT1uLG49WXQoKS5jaGFuZ2VkVG91Y2hlcyk7Zm9yKHZhciByLGk9MCxvPW4/bi5sZW5ndGg6MDtpPG87KytpKWlmKChyPW5baV0pLmlkZW50aWZpZXI9PT1lKXJldHVybiBCdCh0LHIpO3JldHVybiBudWxsfWZ1bmN0aW9uIEh0KCl7dC5ldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX1mdW5jdGlvbiBqdCgpe3QuZXZlbnQucHJldmVudERlZmF1bHQoKSx0LmV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfWZ1bmN0aW9uIFh0KHQpe3ZhciBuPXQuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LGU9RHQodCkub24oImRyYWdzdGFydC5kcmFnIixqdCwhMCk7Im9uc2VsZWN0c3RhcnQiaW4gbj9lLm9uKCJzZWxlY3RzdGFydC5kcmFnIixqdCwhMCk6KG4uX19ub3NlbGVjdD1uLnN0eWxlLk1velVzZXJTZWxlY3Qsbi5zdHlsZS5Nb3pVc2VyU2VsZWN0PSJub25lIil9ZnVuY3Rpb24gR3QodCxuKXt2YXIgZT10LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxyPUR0KHQpLm9uKCJkcmFnc3RhcnQuZHJhZyIsbnVsbCk7biYmKHIub24oImNsaWNrLmRyYWciLGp0LCEwKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ci5vbigiY2xpY2suZHJhZyIsbnVsbCl9LDApKSwib25zZWxlY3RzdGFydCJpbiBlP3Iub24oInNlbGVjdHN0YXJ0LmRyYWciLG51bGwpOihlLnN0eWxlLk1velVzZXJTZWxlY3Q9ZS5fX25vc2VsZWN0LGRlbGV0ZSBlLl9fbm9zZWxlY3QpfWZ1bmN0aW9uIFZ0KHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX1mdW5jdGlvbiAkdCh0LG4sZSxyLGksbyxhLHUsZixjKXt0aGlzLnRhcmdldD10LHRoaXMudHlwZT1uLHRoaXMuc3ViamVjdD1lLHRoaXMuaWRlbnRpZmllcj1yLHRoaXMuYWN0aXZlPWksdGhpcy54PW8sdGhpcy55PWEsdGhpcy5keD11LHRoaXMuZHk9Zix0aGlzLl89Y31mdW5jdGlvbiBXdCgpe3JldHVybiF0LmV2ZW50LmJ1dHRvbn1mdW5jdGlvbiBadCgpe3JldHVybiB0aGlzLnBhcmVudE5vZGV9ZnVuY3Rpb24gUXQobil7cmV0dXJuIG51bGw9PW4/e3g6dC5ldmVudC54LHk6dC5ldmVudC55fTpufWZ1bmN0aW9uIEp0KCl7cmV0dXJuIm9udG91Y2hzdGFydCJpbiB0aGlzfWZ1bmN0aW9uIEt0KHQsbixlKXt0LnByb3RvdHlwZT1uLnByb3RvdHlwZT1lLGUuY29uc3RydWN0b3I9dH1mdW5jdGlvbiB0bih0LG4pe3ZhciBlPU9iamVjdC5jcmVhdGUodC5wcm90b3R5cGUpO2Zvcih2YXIgciBpbiBuKWVbcl09bltyXTtyZXR1cm4gZX1mdW5jdGlvbiBubigpe31PdC5wcm90b3R5cGU9cXQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpPdCxnZXQ6ZnVuY3Rpb24odCl7Zm9yKHZhciBuPXRoaXMuXzshKG4gaW4gdCk7KWlmKCEodD10LnBhcmVudE5vZGUpKXJldHVybjtyZXR1cm4gdFtuXX0sc2V0OmZ1bmN0aW9uKHQsbil7cmV0dXJuIHRbdGhpcy5fXT1ufSxyZW1vdmU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuXyBpbiB0JiZkZWxldGUgdFt0aGlzLl9dfSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl99fSwkdC5wcm90b3R5cGUub249ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl8ub24uYXBwbHkodGhpcy5fLGFyZ3VtZW50cyk7cmV0dXJuIHQ9PT10aGlzLl8/dGhpczp0fTt2YXIgZW49IlxccyooWystXT9cXGQrKVxccyoiLHJuPSJcXHMqKFsrLV0/XFxkKlxcLj9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KVxccyoiLG9uPSJcXHMqKFsrLV0/XFxkKlxcLj9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KSVcXHMqIixhbj0vXiMoWzAtOWEtZl17M30pJC8sdW49L14jKFswLTlhLWZdezZ9KSQvLGZuPW5ldyBSZWdFeHAoIl5yZ2JcXCgiK1tlbixlbixlbl0rIlxcKSQiKSxjbj1uZXcgUmVnRXhwKCJecmdiXFwoIitbb24sb24sb25dKyJcXCkkIiksc249bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1tlbixlbixlbixybl0rIlxcKSQiKSxsbj1uZXcgUmVnRXhwKCJecmdiYVxcKCIrW29uLG9uLG9uLHJuXSsiXFwpJCIpLGhuPW5ldyBSZWdFeHAoIl5oc2xcXCgiK1tybixvbixvbl0rIlxcKSQiKSxkbj1uZXcgUmVnRXhwKCJeaHNsYVxcKCIrW3JuLG9uLG9uLHJuXSsiXFwpJCIpLHBuPXthbGljZWJsdWU6MTU3OTIzODMsYW50aXF1ZXdoaXRlOjE2NDQ0Mzc1LGFxdWE6NjU1MzUsYXF1YW1hcmluZTo4Mzg4NTY0LGF6dXJlOjE1Nzk0MTc1LGJlaWdlOjE2MTE5MjYwLGJpc3F1ZToxNjc3MDI0NCxibGFjazowLGJsYW5jaGVkYWxtb25kOjE2NzcyMDQ1LGJsdWU6MjU1LGJsdWV2aW9sZXQ6OTA1NTIwMixicm93bjoxMDgyNDIzNCxidXJseXdvb2Q6MTQ1OTYyMzEsY2FkZXRibHVlOjYyNjY1MjgsY2hhcnRyZXVzZTo4Mzg4MzUyLGNob2NvbGF0ZToxMzc4OTQ3MCxjb3JhbDoxNjc0NDI3Mixjb3JuZmxvd2VyYmx1ZTo2NTkxOTgxLGNvcm5zaWxrOjE2Nzc1Mzg4LGNyaW1zb246MTQ0MjMxMDAsY3lhbjo2NTUzNSxkYXJrYmx1ZToxMzksZGFya2N5YW46MzU3MjMsZGFya2dvbGRlbnJvZDoxMjA5MjkzOSxkYXJrZ3JheToxMTExOTAxNyxkYXJrZ3JlZW46MjU2MDAsZGFya2dyZXk6MTExMTkwMTcsZGFya2toYWtpOjEyNDMzMjU5LGRhcmttYWdlbnRhOjkxMDk2NDMsZGFya29saXZlZ3JlZW46NTU5Nzk5OSxkYXJrb3JhbmdlOjE2NzQ3NTIwLGRhcmtvcmNoaWQ6MTAwNDAwMTIsZGFya3JlZDo5MTA5NTA0LGRhcmtzYWxtb246MTUzMDg0MTAsZGFya3NlYWdyZWVuOjk0MTk5MTksZGFya3NsYXRlYmx1ZTo0NzM0MzQ3LGRhcmtzbGF0ZWdyYXk6MzEwMDQ5NSxkYXJrc2xhdGVncmV5OjMxMDA0OTUsZGFya3R1cnF1b2lzZTo1Mjk0NSxkYXJrdmlvbGV0Ojk2OTk1MzksZGVlcHBpbms6MTY3MTY5NDcsZGVlcHNreWJsdWU6NDkxNTEsZGltZ3JheTo2OTA4MjY1LGRpbWdyZXk6NjkwODI2NSxkb2RnZXJibHVlOjIwMDMxOTksZmlyZWJyaWNrOjExNjc0MTQ2LGZsb3JhbHdoaXRlOjE2Nzc1OTIwLGZvcmVzdGdyZWVuOjIyNjM4NDIsZnVjaHNpYToxNjcxMTkzNSxnYWluc2Jvcm86MTQ0NzQ0NjAsZ2hvc3R3aGl0ZToxNjMxNjY3MSxnb2xkOjE2NzY2NzIwLGdvbGRlbnJvZDoxNDMyOTEyMCxncmF5Ojg0MjE1MDQsZ3JlZW46MzI3NjgsZ3JlZW55ZWxsb3c6MTE0MDMwNTUsZ3JleTo4NDIxNTA0LGhvbmV5ZGV3OjE1Nzk0MTYwLGhvdHBpbms6MTY3Mzg3NDAsaW5kaWFucmVkOjEzNDU4NTI0LGluZGlnbzo0OTE1MzMwLGl2b3J5OjE2Nzc3MjAwLGtoYWtpOjE1Nzg3NjYwLGxhdmVuZGVyOjE1MTMyNDEwLGxhdmVuZGVyYmx1c2g6MTY3NzMzNjUsbGF3bmdyZWVuOjgxOTA5NzYsbGVtb25jaGlmZm9uOjE2Nzc1ODg1LGxpZ2h0Ymx1ZToxMTM5MzI1NCxsaWdodGNvcmFsOjE1NzYxNTM2LGxpZ2h0Y3lhbjoxNDc0NTU5OSxsaWdodGdvbGRlbnJvZHllbGxvdzoxNjQ0ODIxMCxsaWdodGdyYXk6MTM4ODIzMjMsbGlnaHRncmVlbjo5NDk4MjU2LGxpZ2h0Z3JleToxMzg4MjMyMyxsaWdodHBpbms6MTY3NTg0NjUsbGlnaHRzYWxtb246MTY3NTI3NjIsbGlnaHRzZWFncmVlbjoyMTQyODkwLGxpZ2h0c2t5Ymx1ZTo4OTAwMzQ2LGxpZ2h0c2xhdGVncmF5Ojc4MzM3NTMsbGlnaHRzbGF0ZWdyZXk6NzgzMzc1MyxsaWdodHN0ZWVsYmx1ZToxMTU4NDczNCxsaWdodHllbGxvdzoxNjc3NzE4NCxsaW1lOjY1MjgwLGxpbWVncmVlbjozMzI5MzMwLGxpbmVuOjE2NDQ1NjcwLG1hZ2VudGE6MTY3MTE5MzUsbWFyb29uOjgzODg2MDgsbWVkaXVtYXF1YW1hcmluZTo2NzM3MzIyLG1lZGl1bWJsdWU6MjA1LG1lZGl1bW9yY2hpZDoxMjIxMTY2NyxtZWRpdW1wdXJwbGU6OTY2MjY4MyxtZWRpdW1zZWFncmVlbjozOTc4MDk3LG1lZGl1bXNsYXRlYmx1ZTo4MDg3NzkwLG1lZGl1bXNwcmluZ2dyZWVuOjY0MTU0LG1lZGl1bXR1cnF1b2lzZTo0NzcyMzAwLG1lZGl1bXZpb2xldHJlZDoxMzA0NzE3MyxtaWRuaWdodGJsdWU6MTY0NDkxMixtaW50Y3JlYW06MTYxMjE4NTAsbWlzdHlyb3NlOjE2NzcwMjczLG1vY2Nhc2luOjE2NzcwMjI5LG5hdmFqb3doaXRlOjE2NzY4Njg1LG5hdnk6MTI4LG9sZGxhY2U6MTY2NDM1NTgsb2xpdmU6ODQyMTM3NixvbGl2ZWRyYWI6NzA0ODczOSxvcmFuZ2U6MTY3NTM5MjAsb3JhbmdlcmVkOjE2NzI5MzQ0LG9yY2hpZDoxNDMxNTczNCxwYWxlZ29sZGVucm9kOjE1NjU3MTMwLHBhbGVncmVlbjoxMDAyNTg4MCxwYWxldHVycXVvaXNlOjExNTI5OTY2LHBhbGV2aW9sZXRyZWQ6MTQzODEyMDMscGFwYXlhd2hpcDoxNjc3MzA3NyxwZWFjaHB1ZmY6MTY3Njc2NzMscGVydToxMzQ2ODk5MSxwaW5rOjE2NzYxMDM1LHBsdW06MTQ1MjQ2MzcscG93ZGVyYmx1ZToxMTU5MTkxMCxwdXJwbGU6ODM4ODczNixyZWJlY2NhcHVycGxlOjY2OTc4ODEscmVkOjE2NzExNjgwLHJvc3licm93bjoxMjM1NzUxOSxyb3lhbGJsdWU6NDI4Njk0NSxzYWRkbGVicm93bjo5MTI3MTg3LHNhbG1vbjoxNjQxNjg4MixzYW5keWJyb3duOjE2MDMyODY0LHNlYWdyZWVuOjMwNTAzMjcsc2Vhc2hlbGw6MTY3NzQ2Mzgsc2llbm5hOjEwNTA2Nzk3LHNpbHZlcjoxMjYzMjI1Nixza3libHVlOjg5MDAzMzEsc2xhdGVibHVlOjY5NzAwNjEsc2xhdGVncmF5OjczNzI5NDQsc2xhdGVncmV5OjczNzI5NDQsc25vdzoxNjc3NTkzMCxzcHJpbmdncmVlbjo2NTQwNyxzdGVlbGJsdWU6NDYyMDk4MCx0YW46MTM4MDg3ODAsdGVhbDozMjg5Nix0aGlzdGxlOjE0MjA0ODg4LHRvbWF0bzoxNjczNzA5NSx0dXJxdW9pc2U6NDI1MTg1Nix2aW9sZXQ6MTU2MzEwODYsd2hlYXQ6MTYxMTMzMzEsd2hpdGU6MTY3NzcyMTUsd2hpdGVzbW9rZToxNjExOTI4NSx5ZWxsb3c6MTY3NzY5NjAseWVsbG93Z3JlZW46MTAxNDUwNzR9O2Z1bmN0aW9uIHZuKHQpe3ZhciBuO3JldHVybiB0PSh0KyIiKS50cmltKCkudG9Mb3dlckNhc2UoKSwobj1hbi5leGVjKHQpKT9uZXcgbW4oKG49cGFyc2VJbnQoblsxXSwxNikpPj44JjE1fG4+PjQmMjQwLG4+PjQmMTV8MjQwJm4sKDE1Jm4pPDw0fDE1Jm4sMSk6KG49dW4uZXhlYyh0KSk/Z24ocGFyc2VJbnQoblsxXSwxNikpOihuPWZuLmV4ZWModCkpP25ldyBtbihuWzFdLG5bMl0sblszXSwxKToobj1jbi5leGVjKHQpKT9uZXcgbW4oMjU1Km5bMV0vMTAwLDI1NSpuWzJdLzEwMCwyNTUqblszXS8xMDAsMSk6KG49c24uZXhlYyh0KSk/eW4oblsxXSxuWzJdLG5bM10sbls0XSk6KG49bG4uZXhlYyh0KSk/eW4oMjU1Km5bMV0vMTAwLDI1NSpuWzJdLzEwMCwyNTUqblszXS8xMDAsbls0XSk6KG49aG4uZXhlYyh0KSk/d24oblsxXSxuWzJdLzEwMCxuWzNdLzEwMCwxKToobj1kbi5leGVjKHQpKT93bihuWzFdLG5bMl0vMTAwLG5bM10vMTAwLG5bNF0pOnBuLmhhc093blByb3BlcnR5KHQpP2duKHBuW3RdKToidHJhbnNwYXJlbnQiPT09dD9uZXcgbW4oTmFOLE5hTixOYU4sMCk6bnVsbH1mdW5jdGlvbiBnbih0KXtyZXR1cm4gbmV3IG1uKHQ+PjE2JjI1NSx0Pj44JjI1NSwyNTUmdCwxKX1mdW5jdGlvbiB5bih0LG4sZSxyKXtyZXR1cm4gcjw9MCYmKHQ9bj1lPU5hTiksbmV3IG1uKHQsbixlLHIpfWZ1bmN0aW9uIF9uKHQpe3JldHVybiB0IGluc3RhbmNlb2Ygbm58fCh0PXZuKHQpKSx0P25ldyBtbigodD10LnJnYigpKS5yLHQuZyx0LmIsdC5vcGFjaXR5KTpuZXcgbW59ZnVuY3Rpb24gYm4odCxuLGUscil7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP19uKHQpOm5ldyBtbih0LG4sZSxudWxsPT1yPzE6cil9ZnVuY3Rpb24gbW4odCxuLGUscil7dGhpcy5yPSt0LHRoaXMuZz0rbix0aGlzLmI9K2UsdGhpcy5vcGFjaXR5PStyfWZ1bmN0aW9uIHhuKHQpe3JldHVybigodD1NYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHQpfHwwKSkpPDE2PyIwIjoiIikrdC50b1N0cmluZygxNil9ZnVuY3Rpb24gd24odCxuLGUscil7cmV0dXJuIHI8PTA/dD1uPWU9TmFOOmU8PTB8fGU+PTE/dD1uPU5hTjpuPD0wJiYodD1OYU4pLG5ldyBBbih0LG4sZSxyKX1mdW5jdGlvbiBNbih0LG4sZSxyKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/ZnVuY3Rpb24odCl7aWYodCBpbnN0YW5jZW9mIEFuKXJldHVybiBuZXcgQW4odC5oLHQucyx0LmwsdC5vcGFjaXR5KTtpZih0IGluc3RhbmNlb2Ygbm58fCh0PXZuKHQpKSwhdClyZXR1cm4gbmV3IEFuO2lmKHQgaW5zdGFuY2VvZiBBbilyZXR1cm4gdDt2YXIgbj0odD10LnJnYigpKS5yLzI1NSxlPXQuZy8yNTUscj10LmIvMjU1LGk9TWF0aC5taW4obixlLHIpLG89TWF0aC5tYXgobixlLHIpLGE9TmFOLHU9by1pLGY9KG8raSkvMjtyZXR1cm4gdT8oYT1uPT09bz8oZS1yKS91KzYqKGU8cik6ZT09PW8/KHItbikvdSsyOihuLWUpL3UrNCx1Lz1mPC41P28raToyLW8taSxhKj02MCk6dT1mPjAmJmY8MT8wOmEsbmV3IEFuKGEsdSxmLHQub3BhY2l0eSl9KHQpOm5ldyBBbih0LG4sZSxudWxsPT1yPzE6cil9ZnVuY3Rpb24gQW4odCxuLGUscil7dGhpcy5oPSt0LHRoaXMucz0rbix0aGlzLmw9K2UsdGhpcy5vcGFjaXR5PStyfWZ1bmN0aW9uIFRuKHQsbixlKXtyZXR1cm4gMjU1Kih0PDYwP24rKGUtbikqdC82MDp0PDE4MD9lOnQ8MjQwP24rKGUtbikqKDI0MC10KS82MDpuKX1LdChubix2bix7ZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZ2IoKS5kaXNwbGF5YWJsZSgpfSxoZXg6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZ2IoKS5oZXgoKX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZ2IoKSsiIn19KSxLdChtbixibix0bihubix7YnJpZ2h0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD8xLy43Ok1hdGgucG93KDEvLjcsdCksbmV3IG1uKHRoaXMucip0LHRoaXMuZyp0LHRoaXMuYip0LHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10Py43Ok1hdGgucG93KC43LHQpLG5ldyBtbih0aGlzLnIqdCx0aGlzLmcqdCx0aGlzLmIqdCx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gMDw9dGhpcy5yJiZ0aGlzLnI8PTI1NSYmMDw9dGhpcy5nJiZ0aGlzLmc8PTI1NSYmMDw9dGhpcy5iJiZ0aGlzLmI8PTI1NSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9LGhleDpmdW5jdGlvbigpe3JldHVybiIjIit4bih0aGlzLnIpK3huKHRoaXMuZykreG4odGhpcy5iKX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wYWNpdHk7cmV0dXJuKDE9PT0odD1pc05hTih0KT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSx0KSkpPyJyZ2IoIjoicmdiYSgiKStNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMucil8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5nKXx8MCkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLmIpfHwwKSkrKDE9PT10PyIpIjoiLCAiK3QrIikiKX19KSksS3QoQW4sTW4sdG4obm4se2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/MS8uNzpNYXRoLnBvdygxLy43LHQpLG5ldyBBbih0aGlzLmgsdGhpcy5zLHRoaXMubCp0LHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10Py43Ok1hdGgucG93KC43LHQpLG5ldyBBbih0aGlzLmgsdGhpcy5zLHRoaXMubCp0LHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciB0PXRoaXMuaCUzNjArMzYwKih0aGlzLmg8MCksbj1pc05hTih0KXx8aXNOYU4odGhpcy5zKT8wOnRoaXMucyxlPXRoaXMubCxyPWUrKGU8LjU/ZToxLWUpKm4saT0yKmUtcjtyZXR1cm4gbmV3IG1uKFRuKHQ+PTI0MD90LTI0MDp0KzEyMCxpLHIpLFRuKHQsaSxyKSxUbih0PDEyMD90KzI0MDp0LTEyMCxpLHIpLHRoaXMub3BhY2l0eSl9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuKDA8PXRoaXMucyYmdGhpcy5zPD0xfHxpc05hTih0aGlzLnMpKSYmMDw9dGhpcy5sJiZ0aGlzLmw8PTEmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfX0pKTt2YXIgTm49TWF0aC5QSS8xODAsU249MTgwL01hdGguUEksRW49Ljk2NDIyLGtuPTEsQ249LjgyNTIxLFBuPTQvMjksem49Ni8yOSxSbj0zKnpuKnpuLExuPXpuKnpuKnpuO2Z1bmN0aW9uIERuKHQpe2lmKHQgaW5zdGFuY2VvZiBxbilyZXR1cm4gbmV3IHFuKHQubCx0LmEsdC5iLHQub3BhY2l0eSk7aWYodCBpbnN0YW5jZW9mIGpuKXtpZihpc05hTih0LmgpKXJldHVybiBuZXcgcW4odC5sLDAsMCx0Lm9wYWNpdHkpO3ZhciBuPXQuaCpObjtyZXR1cm4gbmV3IHFuKHQubCxNYXRoLmNvcyhuKSp0LmMsTWF0aC5zaW4obikqdC5jLHQub3BhY2l0eSl9dCBpbnN0YW5jZW9mIG1ufHwodD1fbih0KSk7dmFyIGUscixpPUZuKHQuciksbz1Gbih0LmcpLGE9Rm4odC5iKSx1PU9uKCguMjIyNTA0NSppKy43MTY4Nzg2Km8rLjA2MDYxNjkqYSkva24pO3JldHVybiBpPT09byYmbz09PWE/ZT1yPXU6KGU9T24oKC40MzYwNzQ3KmkrLjM4NTA2NDkqbysuMTQzMDgwNCphKS9Fbikscj1PbigoLjAxMzkzMjIqaSsuMDk3MTA0NSpvKy43MTQxNzMzKmEpL0NuKSksbmV3IHFuKDExNip1LTE2LDUwMCooZS11KSwyMDAqKHUtciksdC5vcGFjaXR5KX1mdW5jdGlvbiBVbih0LG4sZSxyKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/RG4odCk6bmV3IHFuKHQsbixlLG51bGw9PXI/MTpyKX1mdW5jdGlvbiBxbih0LG4sZSxyKXt0aGlzLmw9K3QsdGhpcy5hPStuLHRoaXMuYj0rZSx0aGlzLm9wYWNpdHk9K3J9ZnVuY3Rpb24gT24odCl7cmV0dXJuIHQ+TG4/TWF0aC5wb3codCwxLzMpOnQvUm4rUG59ZnVuY3Rpb24gWW4odCl7cmV0dXJuIHQ+em4/dCp0KnQ6Um4qKHQtUG4pfWZ1bmN0aW9uIEJuKHQpe3JldHVybiAyNTUqKHQ8PS4wMDMxMzA4PzEyLjkyKnQ6MS4wNTUqTWF0aC5wb3codCwxLzIuNCktLjA1NSl9ZnVuY3Rpb24gRm4odCl7cmV0dXJuKHQvPTI1NSk8PS4wNDA0NT90LzEyLjkyOk1hdGgucG93KCh0Ky4wNTUpLzEuMDU1LDIuNCl9ZnVuY3Rpb24gSW4odCl7aWYodCBpbnN0YW5jZW9mIGpuKXJldHVybiBuZXcgam4odC5oLHQuYyx0LmwsdC5vcGFjaXR5KTtpZih0IGluc3RhbmNlb2YgcW58fCh0PURuKHQpKSwwPT09dC5hJiYwPT09dC5iKXJldHVybiBuZXcgam4oTmFOLDAsdC5sLHQub3BhY2l0eSk7dmFyIG49TWF0aC5hdGFuMih0LmIsdC5hKSpTbjtyZXR1cm4gbmV3IGpuKG48MD9uKzM2MDpuLE1hdGguc3FydCh0LmEqdC5hK3QuYip0LmIpLHQubCx0Lm9wYWNpdHkpfWZ1bmN0aW9uIEhuKHQsbixlLHIpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9Jbih0KTpuZXcgam4odCxuLGUsbnVsbD09cj8xOnIpfWZ1bmN0aW9uIGpuKHQsbixlLHIpe3RoaXMuaD0rdCx0aGlzLmM9K24sdGhpcy5sPStlLHRoaXMub3BhY2l0eT0rcn1LdChxbixVbix0bihubix7YnJpZ2h0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBxbih0aGlzLmwrMTgqKG51bGw9PXQ/MTp0KSx0aGlzLmEsdGhpcy5iLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IHFuKHRoaXMubC0xOCoobnVsbD09dD8xOnQpLHRoaXMuYSx0aGlzLmIsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIHQ9KHRoaXMubCsxNikvMTE2LG49aXNOYU4odGhpcy5hKT90OnQrdGhpcy5hLzUwMCxlPWlzTmFOKHRoaXMuYik/dDp0LXRoaXMuYi8yMDA7cmV0dXJuIG5ldyBtbihCbigzLjEzMzg1NjEqKG49RW4qWW4obikpLTEuNjE2ODY2NyoodD1rbipZbih0KSktLjQ5MDYxNDYqKGU9Q24qWW4oZSkpKSxCbigtLjk3ODc2ODQqbisxLjkxNjE0MTUqdCsuMDMzNDU0KmUpLEJuKC4wNzE5NDUzKm4tLjIyODk5MTQqdCsxLjQwNTI0MjcqZSksdGhpcy5vcGFjaXR5KX19KSksS3Qoam4sSG4sdG4obm4se2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgam4odGhpcy5oLHRoaXMuYyx0aGlzLmwrMTgqKG51bGw9PXQ/MTp0KSx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBqbih0aGlzLmgsdGhpcy5jLHRoaXMubC0xOCoobnVsbD09dD8xOnQpLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3JldHVybiBEbih0aGlzKS5yZ2IoKX19KSk7dmFyIFhuPS0uMTQ4NjEsR249MS43ODI3NyxWbj0tLjI5MjI3LCRuPS0uOTA2NDksV249MS45NzI5NCxabj1XbiokbixRbj1XbipHbixKbj1HbipWbi0kbipYbjtmdW5jdGlvbiBLbih0LG4sZSxyKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/ZnVuY3Rpb24odCl7aWYodCBpbnN0YW5jZW9mIHRlKXJldHVybiBuZXcgdGUodC5oLHQucyx0LmwsdC5vcGFjaXR5KTt0IGluc3RhbmNlb2YgbW58fCh0PV9uKHQpKTt2YXIgbj10LnIvMjU1LGU9dC5nLzI1NSxyPXQuYi8yNTUsaT0oSm4qcitabipuLVFuKmUpLyhKbitabi1Rbiksbz1yLWksYT0oV24qKGUtaSktVm4qbykvJG4sdT1NYXRoLnNxcnQoYSphK28qbykvKFduKmkqKDEtaSkpLGY9dT9NYXRoLmF0YW4yKGEsbykqU24tMTIwOk5hTjtyZXR1cm4gbmV3IHRlKGY8MD9mKzM2MDpmLHUsaSx0Lm9wYWNpdHkpfSh0KTpuZXcgdGUodCxuLGUsbnVsbD09cj8xOnIpfWZ1bmN0aW9uIHRlKHQsbixlLHIpe3RoaXMuaD0rdCx0aGlzLnM9K24sdGhpcy5sPStlLHRoaXMub3BhY2l0eT0rcn1mdW5jdGlvbiBuZSh0LG4sZSxyLGkpe3ZhciBvPXQqdCxhPW8qdDtyZXR1cm4oKDEtMyp0KzMqby1hKSpuKyg0LTYqbyszKmEpKmUrKDErMyp0KzMqby0zKmEpKnIrYSppKS82fWZ1bmN0aW9uIGVlKHQpe3ZhciBuPXQubGVuZ3RoLTE7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciByPWU8PTA/ZT0wOmU+PTE/KGU9MSxuLTEpOk1hdGguZmxvb3IoZSpuKSxpPXRbcl0sbz10W3IrMV0sYT1yPjA/dFtyLTFdOjIqaS1vLHU9cjxuLTE/dFtyKzJdOjIqby1pO3JldHVybiBuZSgoZS1yL24pKm4sYSxpLG8sdSl9fWZ1bmN0aW9uIHJlKHQpe3ZhciBuPXQubGVuZ3RoO3JldHVybiBmdW5jdGlvbihlKXt2YXIgcj1NYXRoLmZsb29yKCgoZSU9MSk8MD8rK2U6ZSkqbiksaT10WyhyK24tMSklbl0sbz10W3Ilbl0sYT10WyhyKzEpJW5dLHU9dFsocisyKSVuXTtyZXR1cm4gbmUoKGUtci9uKSpuLGksbyxhLHUpfX1mdW5jdGlvbiBpZSh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24gb2UodCxuKXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQrZSpufX1mdW5jdGlvbiBhZSh0LG4pe3ZhciBlPW4tdDtyZXR1cm4gZT9vZSh0LGU+MTgwfHxlPC0xODA/ZS0zNjAqTWF0aC5yb3VuZChlLzM2MCk6ZSk6aWUoaXNOYU4odCk/bjp0KX1mdW5jdGlvbiB1ZSh0KXtyZXR1cm4gMT09KHQ9K3QpP2ZlOmZ1bmN0aW9uKG4sZSl7cmV0dXJuIGUtbj9mdW5jdGlvbih0LG4sZSl7cmV0dXJuIHQ9TWF0aC5wb3codCxlKSxuPU1hdGgucG93KG4sZSktdCxlPTEvZSxmdW5jdGlvbihyKXtyZXR1cm4gTWF0aC5wb3codCtyKm4sZSl9fShuLGUsdCk6aWUoaXNOYU4obik/ZTpuKX19ZnVuY3Rpb24gZmUodCxuKXt2YXIgZT1uLXQ7cmV0dXJuIGU/b2UodCxlKTppZShpc05hTih0KT9uOnQpfUt0KHRlLEtuLHRuKG5uLHticmlnaHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10PzEvLjc6TWF0aC5wb3coMS8uNyx0KSxuZXcgdGUodGhpcy5oLHRoaXMucyx0aGlzLmwqdCx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD8uNzpNYXRoLnBvdyguNyx0KSxuZXcgdGUodGhpcy5oLHRoaXMucyx0aGlzLmwqdCx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXt2YXIgdD1pc05hTih0aGlzLmgpPzA6KHRoaXMuaCsxMjApKk5uLG49K3RoaXMubCxlPWlzTmFOKHRoaXMucyk/MDp0aGlzLnMqbiooMS1uKSxyPU1hdGguY29zKHQpLGk9TWF0aC5zaW4odCk7cmV0dXJuIG5ldyBtbigyNTUqKG4rZSooWG4qcitHbippKSksMjU1KihuK2UqKFZuKnIrJG4qaSkpLDI1NSoobitlKihXbipyKSksdGhpcy5vcGFjaXR5KX19KSk7dmFyIGNlPWZ1bmN0aW9uIHQobil7dmFyIGU9dWUobik7ZnVuY3Rpb24gcih0LG4pe3ZhciByPWUoKHQ9Ym4odCkpLnIsKG49Ym4obikpLnIpLGk9ZSh0Lmcsbi5nKSxvPWUodC5iLG4uYiksYT1mZSh0Lm9wYWNpdHksbi5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIHQucj1yKG4pLHQuZz1pKG4pLHQuYj1vKG4pLHQub3BhY2l0eT1hKG4pLHQrIiJ9fXJldHVybiByLmdhbW1hPXQscn0oMSk7ZnVuY3Rpb24gc2UodCl7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciBlLHIsaT1uLmxlbmd0aCxvPW5ldyBBcnJheShpKSxhPW5ldyBBcnJheShpKSx1PW5ldyBBcnJheShpKTtmb3IoZT0wO2U8aTsrK2Upcj1ibihuW2VdKSxvW2VdPXIucnx8MCxhW2VdPXIuZ3x8MCx1W2VdPXIuYnx8MDtyZXR1cm4gbz10KG8pLGE9dChhKSx1PXQodSksci5vcGFjaXR5PTEsZnVuY3Rpb24odCl7cmV0dXJuIHIucj1vKHQpLHIuZz1hKHQpLHIuYj11KHQpLHIrIiJ9fX12YXIgbGU9c2UoZWUpLGhlPXNlKHJlKTtmdW5jdGlvbiBkZSh0LG4pe3ZhciBlLHI9bj9uLmxlbmd0aDowLGk9dD9NYXRoLm1pbihyLHQubGVuZ3RoKTowLG89bmV3IEFycmF5KGkpLGE9bmV3IEFycmF5KHIpO2ZvcihlPTA7ZTxpOysrZSlvW2VdPW1lKHRbZV0sbltlXSk7Zm9yKDtlPHI7KytlKWFbZV09bltlXTtyZXR1cm4gZnVuY3Rpb24odCl7Zm9yKGU9MDtlPGk7KytlKWFbZV09b1tlXSh0KTtyZXR1cm4gYX19ZnVuY3Rpb24gcGUodCxuKXt2YXIgZT1uZXcgRGF0ZTtyZXR1cm4gbi09dD0rdCxmdW5jdGlvbihyKXtyZXR1cm4gZS5zZXRUaW1lKHQrbipyKSxlfX1mdW5jdGlvbiB2ZSh0LG4pe3JldHVybiBuLT10PSt0LGZ1bmN0aW9uKGUpe3JldHVybiB0K24qZX19ZnVuY3Rpb24gZ2UodCxuKXt2YXIgZSxyPXt9LGk9e307Zm9yKGUgaW4gbnVsbCE9PXQmJiJvYmplY3QiPT10eXBlb2YgdHx8KHQ9e30pLG51bGwhPT1uJiYib2JqZWN0Ij09dHlwZW9mIG58fChuPXt9KSxuKWUgaW4gdD9yW2VdPW1lKHRbZV0sbltlXSk6aVtlXT1uW2VdO3JldHVybiBmdW5jdGlvbih0KXtmb3IoZSBpbiByKWlbZV09cltlXSh0KTtyZXR1cm4gaX19dmFyIHllPS9bLStdPyg/OlxkK1wuP1xkKnxcLj9cZCspKD86W2VFXVstK10/XGQrKT8vZyxfZT1uZXcgUmVnRXhwKHllLnNvdXJjZSwiZyIpO2Z1bmN0aW9uIGJlKHQsbil7dmFyIGUscixpLG89eWUubGFzdEluZGV4PV9lLmxhc3RJbmRleD0wLGE9LTEsdT1bXSxmPVtdO2Zvcih0Kz0iIixuKz0iIjsoZT15ZS5leGVjKHQpKSYmKHI9X2UuZXhlYyhuKSk7KShpPXIuaW5kZXgpPm8mJihpPW4uc2xpY2UobyxpKSx1W2FdP3VbYV0rPWk6dVsrK2FdPWkpLChlPWVbMF0pPT09KHI9clswXSk/dVthXT91W2FdKz1yOnVbKythXT1yOih1WysrYV09bnVsbCxmLnB1c2goe2k6YSx4OnZlKGUscil9KSksbz1fZS5sYXN0SW5kZXg7cmV0dXJuIG88bi5sZW5ndGgmJihpPW4uc2xpY2UobyksdVthXT91W2FdKz1pOnVbKythXT1pKSx1Lmxlbmd0aDwyP2ZbMF0/ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiB0KG4pKyIifX0oZlswXS54KTpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19KG4pOihuPWYubGVuZ3RoLGZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyPTA7cjxuOysrcil1WyhlPWZbcl0pLmldPWUueCh0KTtyZXR1cm4gdS5qb2luKCIiKX0pfWZ1bmN0aW9uIG1lKHQsbil7dmFyIGUscj10eXBlb2YgbjtyZXR1cm4gbnVsbD09bnx8ImJvb2xlYW4iPT09cj9pZShuKTooIm51bWJlciI9PT1yP3ZlOiJzdHJpbmciPT09cj8oZT12bihuKSk/KG49ZSxjZSk6YmU6biBpbnN0YW5jZW9mIHZuP2NlOm4gaW5zdGFuY2VvZiBEYXRlP3BlOkFycmF5LmlzQXJyYXkobik/ZGU6ImZ1bmN0aW9uIiE9dHlwZW9mIG4udmFsdWVPZiYmImZ1bmN0aW9uIiE9dHlwZW9mIG4udG9TdHJpbmd8fGlzTmFOKG4pP2dlOnZlKSh0LG4pfWZ1bmN0aW9uIHhlKHQsbil7cmV0dXJuIG4tPXQ9K3QsZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGgucm91bmQodCtuKmUpfX12YXIgd2UsTWUsQWUsVGUsTmU9MTgwL01hdGguUEksU2U9e3RyYW5zbGF0ZVg6MCx0cmFuc2xhdGVZOjAscm90YXRlOjAsc2tld1g6MCxzY2FsZVg6MSxzY2FsZVk6MX07ZnVuY3Rpb24gRWUodCxuLGUscixpLG8pe3ZhciBhLHUsZjtyZXR1cm4oYT1NYXRoLnNxcnQodCp0K24qbikpJiYodC89YSxuLz1hKSwoZj10KmUrbipyKSYmKGUtPXQqZixyLT1uKmYpLCh1PU1hdGguc3FydChlKmUrcipyKSkmJihlLz11LHIvPXUsZi89dSksdCpyPG4qZSYmKHQ9LXQsbj0tbixmPS1mLGE9LWEpLHt0cmFuc2xhdGVYOmksdHJhbnNsYXRlWTpvLHJvdGF0ZTpNYXRoLmF0YW4yKG4sdCkqTmUsc2tld1g6TWF0aC5hdGFuKGYpKk5lLHNjYWxlWDphLHNjYWxlWTp1fX1mdW5jdGlvbiBrZSh0LG4sZSxyKXtmdW5jdGlvbiBpKHQpe3JldHVybiB0Lmxlbmd0aD90LnBvcCgpKyIgIjoiIn1yZXR1cm4gZnVuY3Rpb24obyxhKXt2YXIgdT1bXSxmPVtdO3JldHVybiBvPXQobyksYT10KGEpLGZ1bmN0aW9uKHQscixpLG8sYSx1KXtpZih0IT09aXx8ciE9PW8pe3ZhciBmPWEucHVzaCgidHJhbnNsYXRlKCIsbnVsbCxuLG51bGwsZSk7dS5wdXNoKHtpOmYtNCx4OnZlKHQsaSl9LHtpOmYtMix4OnZlKHIsbyl9KX1lbHNlKGl8fG8pJiZhLnB1c2goInRyYW5zbGF0ZSgiK2krbitvK2UpfShvLnRyYW5zbGF0ZVgsby50cmFuc2xhdGVZLGEudHJhbnNsYXRlWCxhLnRyYW5zbGF0ZVksdSxmKSxmdW5jdGlvbih0LG4sZSxvKXt0IT09bj8odC1uPjE4MD9uKz0zNjA6bi10PjE4MCYmKHQrPTM2MCksby5wdXNoKHtpOmUucHVzaChpKGUpKyJyb3RhdGUoIixudWxsLHIpLTIseDp2ZSh0LG4pfSkpOm4mJmUucHVzaChpKGUpKyJyb3RhdGUoIituK3IpfShvLnJvdGF0ZSxhLnJvdGF0ZSx1LGYpLGZ1bmN0aW9uKHQsbixlLG8pe3QhPT1uP28ucHVzaCh7aTplLnB1c2goaShlKSsic2tld1goIixudWxsLHIpLTIseDp2ZSh0LG4pfSk6biYmZS5wdXNoKGkoZSkrInNrZXdYKCIrbityKX0oby5za2V3WCxhLnNrZXdYLHUsZiksZnVuY3Rpb24odCxuLGUscixvLGEpe2lmKHQhPT1lfHxuIT09cil7dmFyIHU9by5wdXNoKGkobykrInNjYWxlKCIsbnVsbCwiLCIsbnVsbCwiKSIpO2EucHVzaCh7aTp1LTQseDp2ZSh0LGUpfSx7aTp1LTIseDp2ZShuLHIpfSl9ZWxzZSAxPT09ZSYmMT09PXJ8fG8ucHVzaChpKG8pKyJzY2FsZSgiK2UrIiwiK3IrIikiKX0oby5zY2FsZVgsby5zY2FsZVksYS5zY2FsZVgsYS5zY2FsZVksdSxmKSxvPWE9bnVsbCxmdW5jdGlvbih0KXtmb3IodmFyIG4sZT0tMSxyPWYubGVuZ3RoOysrZTxyOyl1WyhuPWZbZV0pLmldPW4ueCh0KTtyZXR1cm4gdS5qb2luKCIiKX19fXZhciBDZT1rZShmdW5jdGlvbih0KXtyZXR1cm4ibm9uZSI9PT10P1NlOih3ZXx8KHdlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpLE1lPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxBZT1kb2N1bWVudC5kZWZhdWx0Vmlldyksd2Uuc3R5bGUudHJhbnNmb3JtPXQsdD1BZS5nZXRDb21wdXRlZFN0eWxlKE1lLmFwcGVuZENoaWxkKHdlKSxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKCJ0cmFuc2Zvcm0iKSxNZS5yZW1vdmVDaGlsZCh3ZSksRWUoKyh0PXQuc2xpY2UoNywtMSkuc3BsaXQoIiwiKSlbMF0sK3RbMV0sK3RbMl0sK3RbM10sK3RbNF0sK3RbNV0pKX0sInB4LCAiLCJweCkiLCJkZWcpIiksUGU9a2UoZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/U2U6KFRlfHwoVGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImciKSksVGUuc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLHQpLCh0PVRlLnRyYW5zZm9ybS5iYXNlVmFsLmNvbnNvbGlkYXRlKCkpP0VlKCh0PXQubWF0cml4KS5hLHQuYix0LmMsdC5kLHQuZSx0LmYpOlNlKX0sIiwgIiwiKSIsIikiKSx6ZT1NYXRoLlNRUlQyLFJlPTIsTGU9NCxEZT0xZS0xMjtmdW5jdGlvbiBVZSh0KXtyZXR1cm4oKHQ9TWF0aC5leHAodCkpKzEvdCkvMn1mdW5jdGlvbiBxZSh0LG4pe3ZhciBlLHIsaT10WzBdLG89dFsxXSxhPXRbMl0sdT1uWzBdLGY9blsxXSxjPW5bMl0scz11LWksbD1mLW8saD1zKnMrbCpsO2lmKGg8RGUpcj1NYXRoLmxvZyhjL2EpL3plLGU9ZnVuY3Rpb24odCl7cmV0dXJuW2krdCpzLG8rdCpsLGEqTWF0aC5leHAoemUqdCpyKV19O2Vsc2V7dmFyIGQ9TWF0aC5zcXJ0KGgpLHA9KGMqYy1hKmErTGUqaCkvKDIqYSpSZSpkKSx2PShjKmMtYSphLUxlKmgpLygyKmMqUmUqZCksZz1NYXRoLmxvZyhNYXRoLnNxcnQocCpwKzEpLXApLHk9TWF0aC5sb2coTWF0aC5zcXJ0KHYqdisxKS12KTtyPSh5LWcpL3plLGU9ZnVuY3Rpb24odCl7dmFyIG4sZT10KnIsdT1VZShnKSxmPWEvKFJlKmQpKih1KihuPXplKmUrZywoKG49TWF0aC5leHAoMipuKSktMSkvKG4rMSkpLWZ1bmN0aW9uKHQpe3JldHVybigodD1NYXRoLmV4cCh0KSktMS90KS8yfShnKSk7cmV0dXJuW2krZipzLG8rZipsLGEqdS9VZSh6ZSplK2cpXX19cmV0dXJuIGUuZHVyYXRpb249MWUzKnIsZX1mdW5jdGlvbiBPZSh0KXtyZXR1cm4gZnVuY3Rpb24obixlKXt2YXIgcj10KChuPU1uKG4pKS5oLChlPU1uKGUpKS5oKSxpPWZlKG4ucyxlLnMpLG89ZmUobi5sLGUubCksYT1mZShuLm9wYWNpdHksZS5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIG4uaD1yKHQpLG4ucz1pKHQpLG4ubD1vKHQpLG4ub3BhY2l0eT1hKHQpLG4rIiJ9fX12YXIgWWU9T2UoYWUpLEJlPU9lKGZlKTtmdW5jdGlvbiBGZSh0KXtyZXR1cm4gZnVuY3Rpb24obixlKXt2YXIgcj10KChuPUhuKG4pKS5oLChlPUhuKGUpKS5oKSxpPWZlKG4uYyxlLmMpLG89ZmUobi5sLGUubCksYT1mZShuLm9wYWNpdHksZS5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIG4uaD1yKHQpLG4uYz1pKHQpLG4ubD1vKHQpLG4ub3BhY2l0eT1hKHQpLG4rIiJ9fX12YXIgSWU9RmUoYWUpLEhlPUZlKGZlKTtmdW5jdGlvbiBqZSh0KXtyZXR1cm4gZnVuY3Rpb24gbihlKXtmdW5jdGlvbiByKG4scil7dmFyIGk9dCgobj1LbihuKSkuaCwocj1LbihyKSkuaCksbz1mZShuLnMsci5zKSxhPWZlKG4ubCxyLmwpLHU9ZmUobi5vcGFjaXR5LHIub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBuLmg9aSh0KSxuLnM9byh0KSxuLmw9YShNYXRoLnBvdyh0LGUpKSxuLm9wYWNpdHk9dSh0KSxuKyIifX1yZXR1cm4gZT0rZSxyLmdhbW1hPW4scn0oMSl9dmFyIFhlPWplKGFlKSxHZT1qZShmZSk7dmFyIFZlLCRlLFdlPTAsWmU9MCxRZT0wLEplPTFlMyxLZT0wLHRyPTAsbnI9MCxlcj0ib2JqZWN0Ij09dHlwZW9mIHBlcmZvcm1hbmNlJiZwZXJmb3JtYW5jZS5ub3c/cGVyZm9ybWFuY2U6RGF0ZSxycj0ib2JqZWN0Ij09dHlwZW9mIHdpbmRvdyYmd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZT93aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lLmJpbmQod2luZG93KTpmdW5jdGlvbih0KXtzZXRUaW1lb3V0KHQsMTcpfTtmdW5jdGlvbiBpcigpe3JldHVybiB0cnx8KHJyKG9yKSx0cj1lci5ub3coKStucil9ZnVuY3Rpb24gb3IoKXt0cj0wfWZ1bmN0aW9uIGFyKCl7dGhpcy5fY2FsbD10aGlzLl90aW1lPXRoaXMuX25leHQ9bnVsbH1mdW5jdGlvbiB1cih0LG4sZSl7dmFyIHI9bmV3IGFyO3JldHVybiByLnJlc3RhcnQodCxuLGUpLHJ9ZnVuY3Rpb24gZnIoKXtpcigpLCsrV2U7Zm9yKHZhciB0LG49VmU7bjspKHQ9dHItbi5fdGltZSk+PTAmJm4uX2NhbGwuY2FsbChudWxsLHQpLG49bi5fbmV4dDstLVdlfWZ1bmN0aW9uIGNyKCl7dHI9KEtlPWVyLm5vdygpKStucixXZT1aZT0wO3RyeXtmcigpfWZpbmFsbHl7V2U9MCxmdW5jdGlvbigpe3ZhciB0LG4sZT1WZSxyPTEvMDtmb3IoO2U7KWUuX2NhbGw/KHI+ZS5fdGltZSYmKHI9ZS5fdGltZSksdD1lLGU9ZS5fbmV4dCk6KG49ZS5fbmV4dCxlLl9uZXh0PW51bGwsZT10P3QuX25leHQ9bjpWZT1uKTskZT10LGxyKHIpfSgpLHRyPTB9fWZ1bmN0aW9uIHNyKCl7dmFyIHQ9ZXIubm93KCksbj10LUtlO24+SmUmJihuci09bixLZT10KX1mdW5jdGlvbiBscih0KXtXZXx8KFplJiYoWmU9Y2xlYXJUaW1lb3V0KFplKSksdC10cj4yND8odDwxLzAmJihaZT1zZXRUaW1lb3V0KGNyLHQtZXIubm93KCktbnIpKSxRZSYmKFFlPWNsZWFySW50ZXJ2YWwoUWUpKSk6KFFlfHwoS2U9ZXIubm93KCksUWU9c2V0SW50ZXJ2YWwoc3IsSmUpKSxXZT0xLHJyKGNyKSkpfWZ1bmN0aW9uIGhyKHQsbixlKXt2YXIgcj1uZXcgYXI7cmV0dXJuIG49bnVsbD09bj8wOituLHIucmVzdGFydChmdW5jdGlvbihlKXtyLnN0b3AoKSx0KGUrbil9LG4sZSkscn1hci5wcm90b3R5cGU9dXIucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjphcixyZXN0YXJ0OmZ1bmN0aW9uKHQsbixlKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCJjYWxsYmFjayBpcyBub3QgYSBmdW5jdGlvbiIpO2U9KG51bGw9PWU/aXIoKTorZSkrKG51bGw9PW4/MDorbiksdGhpcy5fbmV4dHx8JGU9PT10aGlzfHwoJGU/JGUuX25leHQ9dGhpczpWZT10aGlzLCRlPXRoaXMpLHRoaXMuX2NhbGw9dCx0aGlzLl90aW1lPWUsbHIoKX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuX2NhbGwmJih0aGlzLl9jYWxsPW51bGwsdGhpcy5fdGltZT0xLzAsbHIoKSl9fTt2YXIgZHI9SSgic3RhcnQiLCJlbmQiLCJpbnRlcnJ1cHQiKSxwcj1bXSx2cj0wLGdyPTEseXI9Mixfcj0zLGJyPTQsbXI9NSx4cj02O2Z1bmN0aW9uIHdyKHQsbixlLHIsaSxvKXt2YXIgYT10Ll9fdHJhbnNpdGlvbjtpZihhKXtpZihlIGluIGEpcmV0dXJufWVsc2UgdC5fX3RyYW5zaXRpb249e307IWZ1bmN0aW9uKHQsbixlKXt2YXIgcixpPXQuX190cmFuc2l0aW9uO2Z1bmN0aW9uIG8oZil7dmFyIGMscyxsLGg7aWYoZS5zdGF0ZSE9PWdyKXJldHVybiB1KCk7Zm9yKGMgaW4gaSlpZigoaD1pW2NdKS5uYW1lPT09ZS5uYW1lKXtpZihoLnN0YXRlPT09X3IpcmV0dXJuIGhyKG8pO2guc3RhdGU9PT1icj8oaC5zdGF0ZT14cixoLnRpbWVyLnN0b3AoKSxoLm9uLmNhbGwoImludGVycnVwdCIsdCx0Ll9fZGF0YV9fLGguaW5kZXgsaC5ncm91cCksZGVsZXRlIGlbY10pOitjPG4mJihoLnN0YXRlPXhyLGgudGltZXIuc3RvcCgpLGRlbGV0ZSBpW2NdKX1pZihocihmdW5jdGlvbigpe2Uuc3RhdGU9PT1fciYmKGUuc3RhdGU9YnIsZS50aW1lci5yZXN0YXJ0KGEsZS5kZWxheSxlLnRpbWUpLGEoZikpfSksZS5zdGF0ZT15cixlLm9uLmNhbGwoInN0YXJ0Iix0LHQuX19kYXRhX18sZS5pbmRleCxlLmdyb3VwKSxlLnN0YXRlPT09eXIpe2ZvcihlLnN0YXRlPV9yLHI9bmV3IEFycmF5KGw9ZS50d2Vlbi5sZW5ndGgpLGM9MCxzPS0xO2M8bDsrK2MpKGg9ZS50d2VlbltjXS52YWx1ZS5jYWxsKHQsdC5fX2RhdGFfXyxlLmluZGV4LGUuZ3JvdXApKSYmKHJbKytzXT1oKTtyLmxlbmd0aD1zKzF9fWZ1bmN0aW9uIGEobil7Zm9yKHZhciBpPW48ZS5kdXJhdGlvbj9lLmVhc2UuY2FsbChudWxsLG4vZS5kdXJhdGlvbik6KGUudGltZXIucmVzdGFydCh1KSxlLnN0YXRlPW1yLDEpLG89LTEsYT1yLmxlbmd0aDsrK288YTspcltvXS5jYWxsKG51bGwsaSk7ZS5zdGF0ZT09PW1yJiYoZS5vbi5jYWxsKCJlbmQiLHQsdC5fX2RhdGFfXyxlLmluZGV4LGUuZ3JvdXApLHUoKSl9ZnVuY3Rpb24gdSgpe2Zvcih2YXIgciBpbiBlLnN0YXRlPXhyLGUudGltZXIuc3RvcCgpLGRlbGV0ZSBpW25dLGkpcmV0dXJuO2RlbGV0ZSB0Ll9fdHJhbnNpdGlvbn1pW25dPWUsZS50aW1lcj11cihmdW5jdGlvbih0KXtlLnN0YXRlPWdyLGUudGltZXIucmVzdGFydChvLGUuZGVsYXksZS50aW1lKSxlLmRlbGF5PD10JiZvKHQtZS5kZWxheSl9LDAsZS50aW1lKX0odCxlLHtuYW1lOm4saW5kZXg6cixncm91cDppLG9uOmRyLHR3ZWVuOnByLHRpbWU6by50aW1lLGRlbGF5Om8uZGVsYXksZHVyYXRpb246by5kdXJhdGlvbixlYXNlOm8uZWFzZSx0aW1lcjpudWxsLHN0YXRlOnZyfSl9ZnVuY3Rpb24gTXIodCxuKXt2YXIgZT1Ucih0LG4pO2lmKGUuc3RhdGU+dnIpdGhyb3cgbmV3IEVycm9yKCJ0b28gbGF0ZTsgYWxyZWFkeSBzY2hlZHVsZWQiKTtyZXR1cm4gZX1mdW5jdGlvbiBBcih0LG4pe3ZhciBlPVRyKHQsbik7aWYoZS5zdGF0ZT55cil0aHJvdyBuZXcgRXJyb3IoInRvbyBsYXRlOyBhbHJlYWR5IHN0YXJ0ZWQiKTtyZXR1cm4gZX1mdW5jdGlvbiBUcih0LG4pe3ZhciBlPXQuX190cmFuc2l0aW9uO2lmKCFlfHwhKGU9ZVtuXSkpdGhyb3cgbmV3IEVycm9yKCJ0cmFuc2l0aW9uIG5vdCBmb3VuZCIpO3JldHVybiBlfWZ1bmN0aW9uIE5yKHQsbil7dmFyIGUscixpLG89dC5fX3RyYW5zaXRpb24sYT0hMDtpZihvKXtmb3IoaSBpbiBuPW51bGw9PW4/bnVsbDpuKyIiLG8pKGU9b1tpXSkubmFtZT09PW4/KHI9ZS5zdGF0ZT55ciYmZS5zdGF0ZTxtcixlLnN0YXRlPXhyLGUudGltZXIuc3RvcCgpLHImJmUub24uY2FsbCgiaW50ZXJydXB0Iix0LHQuX19kYXRhX18sZS5pbmRleCxlLmdyb3VwKSxkZWxldGUgb1tpXSk6YT0hMTthJiZkZWxldGUgdC5fX3RyYW5zaXRpb259fWZ1bmN0aW9uIFNyKHQsbixlKXt2YXIgcj10Ll9pZDtyZXR1cm4gdC5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9QXIodGhpcyxyKTsodC52YWx1ZXx8KHQudmFsdWU9e30pKVtuXT1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pLGZ1bmN0aW9uKHQpe3JldHVybiBUcih0LHIpLnZhbHVlW25dfX1mdW5jdGlvbiBFcih0LG4pe3ZhciBlO3JldHVybigibnVtYmVyIj09dHlwZW9mIG4/dmU6biBpbnN0YW5jZW9mIHZuP2NlOihlPXZuKG4pKT8obj1lLGNlKTpiZSkodCxuKX12YXIga3I9THQucHJvdG90eXBlLmNvbnN0cnVjdG9yO3ZhciBDcj0wO2Z1bmN0aW9uIFByKHQsbixlLHIpe3RoaXMuX2dyb3Vwcz10LHRoaXMuX3BhcmVudHM9bix0aGlzLl9uYW1lPWUsdGhpcy5faWQ9cn1mdW5jdGlvbiB6cih0KXtyZXR1cm4gTHQoKS50cmFuc2l0aW9uKHQpfWZ1bmN0aW9uIFJyKCl7cmV0dXJuKytDcn12YXIgTHI9THQucHJvdG90eXBlO2Z1bmN0aW9uIERyKHQpe3JldHVybigodCo9Mik8PTE/dCp0Oi0tdCooMi10KSsxKS8yfWZ1bmN0aW9uIFVyKHQpe3JldHVybigodCo9Mik8PTE/dCp0KnQ6KHQtPTIpKnQqdCsyKS8yfVByLnByb3RvdHlwZT16ci5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlByLHNlbGVjdDpmdW5jdGlvbih0KXt2YXIgbj10aGlzLl9uYW1lLGU9dGhpcy5faWQ7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PVEodCkpO2Zvcih2YXIgcj10aGlzLl9ncm91cHMsaT1yLmxlbmd0aCxvPW5ldyBBcnJheShpKSxhPTA7YTxpOysrYSlmb3IodmFyIHUsZixjPXJbYV0scz1jLmxlbmd0aCxsPW9bYV09bmV3IEFycmF5KHMpLGg9MDtoPHM7KytoKSh1PWNbaF0pJiYoZj10LmNhbGwodSx1Ll9fZGF0YV9fLGgsYykpJiYoIl9fZGF0YV9fImluIHUmJihmLl9fZGF0YV9fPXUuX19kYXRhX18pLGxbaF09Zix3cihsW2hdLG4sZSxoLGwsVHIodSxlKSkpO3JldHVybiBuZXcgUHIobyx0aGlzLl9wYXJlbnRzLG4sZSl9LHNlbGVjdEFsbDpmdW5jdGlvbih0KXt2YXIgbj10aGlzLl9uYW1lLGU9dGhpcy5faWQ7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PUsodCkpO2Zvcih2YXIgcj10aGlzLl9ncm91cHMsaT1yLmxlbmd0aCxvPVtdLGE9W10sdT0wO3U8aTsrK3UpZm9yKHZhciBmLGM9clt1XSxzPWMubGVuZ3RoLGw9MDtsPHM7KytsKWlmKGY9Y1tsXSl7Zm9yKHZhciBoLGQ9dC5jYWxsKGYsZi5fX2RhdGFfXyxsLGMpLHA9VHIoZixlKSx2PTAsZz1kLmxlbmd0aDt2PGc7Kyt2KShoPWRbdl0pJiZ3cihoLG4sZSx2LGQscCk7by5wdXNoKGQpLGEucHVzaChmKX1yZXR1cm4gbmV3IFByKG8sYSxuLGUpfSxmaWx0ZXI6ZnVuY3Rpb24odCl7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PXJ0KHQpKTtmb3IodmFyIG49dGhpcy5fZ3JvdXBzLGU9bi5sZW5ndGgscj1uZXcgQXJyYXkoZSksaT0wO2k8ZTsrK2kpZm9yKHZhciBvLGE9bltpXSx1PWEubGVuZ3RoLGY9cltpXT1bXSxjPTA7Yzx1OysrYykobz1hW2NdKSYmdC5jYWxsKG8sby5fX2RhdGFfXyxjLGEpJiZmLnB1c2gobyk7cmV0dXJuIG5ldyBQcihyLHRoaXMuX3BhcmVudHMsdGhpcy5fbmFtZSx0aGlzLl9pZCl9LG1lcmdlOmZ1bmN0aW9uKHQpe2lmKHQuX2lkIT09dGhpcy5faWQpdGhyb3cgbmV3IEVycm9yO2Zvcih2YXIgbj10aGlzLl9ncm91cHMsZT10Ll9ncm91cHMscj1uLmxlbmd0aCxpPWUubGVuZ3RoLG89TWF0aC5taW4ocixpKSxhPW5ldyBBcnJheShyKSx1PTA7dTxvOysrdSlmb3IodmFyIGYsYz1uW3VdLHM9ZVt1XSxsPWMubGVuZ3RoLGg9YVt1XT1uZXcgQXJyYXkobCksZD0wO2Q8bDsrK2QpKGY9Y1tkXXx8c1tkXSkmJihoW2RdPWYpO2Zvcig7dTxyOysrdSlhW3VdPW5bdV07cmV0dXJuIG5ldyBQcihhLHRoaXMuX3BhcmVudHMsdGhpcy5fbmFtZSx0aGlzLl9pZCl9LHNlbGVjdGlvbjpmdW5jdGlvbigpe3JldHVybiBuZXcga3IodGhpcy5fZ3JvdXBzLHRoaXMuX3BhcmVudHMpfSx0cmFuc2l0aW9uOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuX25hbWUsbj10aGlzLl9pZCxlPVJyKCkscj10aGlzLl9ncm91cHMsaT1yLmxlbmd0aCxvPTA7bzxpOysrbylmb3IodmFyIGEsdT1yW29dLGY9dS5sZW5ndGgsYz0wO2M8ZjsrK2MpaWYoYT11W2NdKXt2YXIgcz1UcihhLG4pO3dyKGEsdCxlLGMsdSx7dGltZTpzLnRpbWUrcy5kZWxheStzLmR1cmF0aW9uLGRlbGF5OjAsZHVyYXRpb246cy5kdXJhdGlvbixlYXNlOnMuZWFzZX0pfXJldHVybiBuZXcgUHIocix0aGlzLl9wYXJlbnRzLHQsZSl9LGNhbGw6THIuY2FsbCxub2RlczpMci5ub2Rlcyxub2RlOkxyLm5vZGUsc2l6ZTpMci5zaXplLGVtcHR5OkxyLmVtcHR5LGVhY2g6THIuZWFjaCxvbjpmdW5jdGlvbih0LG4pe3ZhciBlPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDI/VHIodGhpcy5ub2RlKCksZSkub24ub24odCk6dGhpcy5lYWNoKGZ1bmN0aW9uKHQsbixlKXt2YXIgcixpLG89ZnVuY3Rpb24odCl7cmV0dXJuKHQrIiIpLnRyaW0oKS5zcGxpdCgvXnxccysvKS5ldmVyeShmdW5jdGlvbih0KXt2YXIgbj10LmluZGV4T2YoIi4iKTtyZXR1cm4gbj49MCYmKHQ9dC5zbGljZSgwLG4pKSwhdHx8InN0YXJ0Ij09PXR9KX0obik/TXI6QXI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9byh0aGlzLHQpLHU9YS5vbjt1IT09ciYmKGk9KHI9dSkuY29weSgpKS5vbihuLGUpLGEub249aX19KGUsdCxuKSl9LGF0dHI6ZnVuY3Rpb24odCxuKXt2YXIgZT0kKHQpLHI9InRyYW5zZm9ybSI9PT1lP1BlOkVyO3JldHVybiB0aGlzLmF0dHJUd2Vlbih0LCJmdW5jdGlvbiI9PXR5cGVvZiBuPyhlLmxvY2FsP2Z1bmN0aW9uKHQsbixlKXt2YXIgcixpLG87cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGEsdT1lKHRoaXMpO2lmKG51bGwhPXUpcmV0dXJuKGE9dGhpcy5nZXRBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpKT09PXU/bnVsbDphPT09ciYmdT09PWk/bzpvPW4ocj1hLGk9dSk7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpfX06ZnVuY3Rpb24odCxuLGUpe3ZhciByLGksbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYSx1PWUodGhpcyk7aWYobnVsbCE9dSlyZXR1cm4oYT10aGlzLmdldEF0dHJpYnV0ZSh0KSk9PT11P251bGw6YT09PXImJnU9PT1pP286bz1uKHI9YSxpPXUpO3RoaXMucmVtb3ZlQXR0cmlidXRlKHQpfX0pKGUscixTcih0aGlzLCJhdHRyLiIrdCxuKSk6bnVsbD09bj8oZS5sb2NhbD9mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCl9fTpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZSh0KX19KShlKTooZS5sb2NhbD9mdW5jdGlvbih0LG4sZSl7dmFyIHIsaTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz10aGlzLmdldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCk7cmV0dXJuIG89PT1lP251bGw6bz09PXI/aTppPW4ocj1vLGUpfX06ZnVuY3Rpb24odCxuLGUpe3ZhciByLGk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89dGhpcy5nZXRBdHRyaWJ1dGUodCk7cmV0dXJuIG89PT1lP251bGw6bz09PXI/aTppPW4ocj1vLGUpfX0pKGUscixuKyIiKSl9LGF0dHJUd2VlbjpmdW5jdGlvbih0LG4pe3ZhciBlPSJhdHRyLiIrdDtpZihhcmd1bWVudHMubGVuZ3RoPDIpcmV0dXJuKGU9dGhpcy50d2VlbihlKSkmJmUuX3ZhbHVlO2lmKG51bGw9PW4pcmV0dXJuIHRoaXMudHdlZW4oZSxudWxsKTtpZigiZnVuY3Rpb24iIT10eXBlb2Ygbil0aHJvdyBuZXcgRXJyb3I7dmFyIHI9JCh0KTtyZXR1cm4gdGhpcy50d2VlbihlLChyLmxvY2FsP2Z1bmN0aW9uKHQsbil7ZnVuY3Rpb24gZSgpe3ZhciBlPXRoaXMscj1uLmFwcGx5KGUsYXJndW1lbnRzKTtyZXR1cm4gciYmZnVuY3Rpb24obil7ZS5zZXRBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwscihuKSl9fXJldHVybiBlLl92YWx1ZT1uLGV9OmZ1bmN0aW9uKHQsbil7ZnVuY3Rpb24gZSgpe3ZhciBlPXRoaXMscj1uLmFwcGx5KGUsYXJndW1lbnRzKTtyZXR1cm4gciYmZnVuY3Rpb24obil7ZS5zZXRBdHRyaWJ1dGUodCxyKG4pKX19cmV0dXJuIGUuX3ZhbHVlPW4sZX0pKHIsbikpfSxzdHlsZTpmdW5jdGlvbih0LG4sZSl7dmFyIHI9InRyYW5zZm9ybSI9PSh0Kz0iIik/Q2U6RXI7cmV0dXJuIG51bGw9PW4/dGhpcy5zdHlsZVR3ZWVuKHQsZnVuY3Rpb24odCxuKXt2YXIgZSxyLGk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89bHQodGhpcyx0KSxhPSh0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpLGx0KHRoaXMsdCkpO3JldHVybiBvPT09YT9udWxsOm89PT1lJiZhPT09cj9pOmk9bihlPW8scj1hKX19KHQscikpLm9uKCJlbmQuc3R5bGUuIit0LGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCl9fSh0KSk6dGhpcy5zdHlsZVR3ZWVuKHQsImZ1bmN0aW9uIj09dHlwZW9mIG4/ZnVuY3Rpb24odCxuLGUpe3ZhciByLGksbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT1sdCh0aGlzLHQpLHU9ZSh0aGlzKTtyZXR1cm4gbnVsbD09dSYmKHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCksdT1sdCh0aGlzLHQpKSxhPT09dT9udWxsOmE9PT1yJiZ1PT09aT9vOm89bihyPWEsaT11KX19KHQscixTcih0aGlzLCJzdHlsZS4iK3QsbikpOmZ1bmN0aW9uKHQsbixlKXt2YXIgcixpO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPWx0KHRoaXMsdCk7cmV0dXJuIG89PT1lP251bGw6bz09PXI/aTppPW4ocj1vLGUpfX0odCxyLG4rIiIpLGUpfSxzdHlsZVR3ZWVuOmZ1bmN0aW9uKHQsbixlKXt2YXIgcj0ic3R5bGUuIisodCs9IiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8MilyZXR1cm4ocj10aGlzLnR3ZWVuKHIpKSYmci5fdmFsdWU7aWYobnVsbD09bilyZXR1cm4gdGhpcy50d2VlbihyLG51bGwpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBuKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdGhpcy50d2VlbihyLGZ1bmN0aW9uKHQsbixlKXtmdW5jdGlvbiByKCl7dmFyIHI9dGhpcyxpPW4uYXBwbHkocixhcmd1bWVudHMpO3JldHVybiBpJiZmdW5jdGlvbihuKXtyLnN0eWxlLnNldFByb3BlcnR5KHQsaShuKSxlKX19cmV0dXJuIHIuX3ZhbHVlPW4scn0odCxuLG51bGw9PWU/IiI6ZSkpfSx0ZXh0OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnR3ZWVuKCJ0ZXh0IiwiZnVuY3Rpb24iPT10eXBlb2YgdD9mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj10KHRoaXMpO3RoaXMudGV4dENvbnRlbnQ9bnVsbD09bj8iIjpufX0oU3IodGhpcywidGV4dCIsdCkpOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9dH19KG51bGw9PXQ/IiI6dCsiIikpfSxyZW1vdmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vbigiZW5kLnJlbW92ZSIsKHQ9dGhpcy5faWQsZnVuY3Rpb24oKXt2YXIgbj10aGlzLnBhcmVudE5vZGU7Zm9yKHZhciBlIGluIHRoaXMuX190cmFuc2l0aW9uKWlmKCtlIT09dClyZXR1cm47biYmbi5yZW1vdmVDaGlsZCh0aGlzKX0pKTt2YXIgdH0sdHdlZW46ZnVuY3Rpb24odCxuKXt2YXIgZT10aGlzLl9pZDtpZih0Kz0iIixhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcih2YXIgcixpPVRyKHRoaXMubm9kZSgpLGUpLnR3ZWVuLG89MCxhPWkubGVuZ3RoO288YTsrK28paWYoKHI9aVtvXSkubmFtZT09PXQpcmV0dXJuIHIudmFsdWU7cmV0dXJuIG51bGx9cmV0dXJuIHRoaXMuZWFjaCgobnVsbD09bj9mdW5jdGlvbih0LG4pe3ZhciBlLHI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGk9QXIodGhpcyx0KSxvPWkudHdlZW47aWYobyE9PWUpZm9yKHZhciBhPTAsdT0ocj1lPW8pLmxlbmd0aDthPHU7KythKWlmKHJbYV0ubmFtZT09PW4peyhyPXIuc2xpY2UoKSkuc3BsaWNlKGEsMSk7YnJlYWt9aS50d2Vlbj1yfX06ZnVuY3Rpb24odCxuLGUpe3ZhciByLGk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPUFyKHRoaXMsdCksYT1vLnR3ZWVuO2lmKGEhPT1yKXtpPShyPWEpLnNsaWNlKCk7Zm9yKHZhciB1PXtuYW1lOm4sdmFsdWU6ZX0sZj0wLGM9aS5sZW5ndGg7ZjxjOysrZilpZihpW2ZdLm5hbWU9PT1uKXtpW2ZdPXU7YnJlYWt9Zj09PWMmJmkucHVzaCh1KX1vLnR3ZWVuPWl9fSkoZSx0LG4pKX0sZGVsYXk6ZnVuY3Rpb24odCl7dmFyIG49dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKCgiZnVuY3Rpb24iPT10eXBlb2YgdD9mdW5jdGlvbih0LG4pe3JldHVybiBmdW5jdGlvbigpe01yKHRoaXMsdCkuZGVsYXk9K24uYXBwbHkodGhpcyxhcmd1bWVudHMpfX06ZnVuY3Rpb24odCxuKXtyZXR1cm4gbj0rbixmdW5jdGlvbigpe01yKHRoaXMsdCkuZGVsYXk9bn19KShuLHQpKTpUcih0aGlzLm5vZGUoKSxuKS5kZWxheX0sZHVyYXRpb246ZnVuY3Rpb24odCl7dmFyIG49dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKCgiZnVuY3Rpb24iPT10eXBlb2YgdD9mdW5jdGlvbih0LG4pe3JldHVybiBmdW5jdGlvbigpe0FyKHRoaXMsdCkuZHVyYXRpb249K24uYXBwbHkodGhpcyxhcmd1bWVudHMpfX06ZnVuY3Rpb24odCxuKXtyZXR1cm4gbj0rbixmdW5jdGlvbigpe0FyKHRoaXMsdCkuZHVyYXRpb249bn19KShuLHQpKTpUcih0aGlzLm5vZGUoKSxuKS5kdXJhdGlvbn0sZWFzZTpmdW5jdGlvbih0KXt2YXIgbj10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goZnVuY3Rpb24odCxuKXtpZigiZnVuY3Rpb24iIT10eXBlb2Ygbil0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIGZ1bmN0aW9uKCl7QXIodGhpcyx0KS5lYXNlPW59fShuLHQpKTpUcih0aGlzLm5vZGUoKSxuKS5lYXNlfX07dmFyIHFyPWZ1bmN0aW9uIHQobil7ZnVuY3Rpb24gZSh0KXtyZXR1cm4gTWF0aC5wb3codCxuKX1yZXR1cm4gbj0rbixlLmV4cG9uZW50PXQsZX0oMyksT3I9ZnVuY3Rpb24gdChuKXtmdW5jdGlvbiBlKHQpe3JldHVybiAxLU1hdGgucG93KDEtdCxuKX1yZXR1cm4gbj0rbixlLmV4cG9uZW50PXQsZX0oMyksWXI9ZnVuY3Rpb24gdChuKXtmdW5jdGlvbiBlKHQpe3JldHVybigodCo9Mik8PTE/TWF0aC5wb3codCxuKToyLU1hdGgucG93KDItdCxuKSkvMn1yZXR1cm4gbj0rbixlLmV4cG9uZW50PXQsZX0oMyksQnI9TWF0aC5QSSxGcj1Cci8yO2Z1bmN0aW9uIElyKHQpe3JldHVybigxLU1hdGguY29zKEJyKnQpKS8yfWZ1bmN0aW9uIEhyKHQpe3JldHVybigodCo9Mik8PTE/TWF0aC5wb3coMiwxMCp0LTEwKToyLU1hdGgucG93KDIsMTAtMTAqdCkpLzJ9ZnVuY3Rpb24ganIodCl7cmV0dXJuKCh0Kj0yKTw9MT8xLU1hdGguc3FydCgxLXQqdCk6TWF0aC5zcXJ0KDEtKHQtPTIpKnQpKzEpLzJ9dmFyIFhyPTQvMTEsR3I9Ni8xMSxWcj04LzExLCRyPS43NSxXcj05LzExLFpyPTEwLzExLFFyPS45Mzc1LEpyPTIxLzIyLEtyPTYzLzY0LHRpPTEvWHIvWHI7ZnVuY3Rpb24gbmkodCl7cmV0dXJuKHQ9K3QpPFhyP3RpKnQqdDp0PFZyP3RpKih0LT1HcikqdCskcjp0PFpyP3RpKih0LT1XcikqdCtRcjp0aSoodC09SnIpKnQrS3J9dmFyIGVpPWZ1bmN0aW9uIHQobil7ZnVuY3Rpb24gZSh0KXtyZXR1cm4gdCp0KigobisxKSp0LW4pfXJldHVybiBuPStuLGUub3ZlcnNob290PXQsZX0oMS43MDE1OCkscmk9ZnVuY3Rpb24gdChuKXtmdW5jdGlvbiBlKHQpe3JldHVybi0tdCp0KigobisxKSp0K24pKzF9cmV0dXJuIG49K24sZS5vdmVyc2hvb3Q9dCxlfSgxLjcwMTU4KSxpaT1mdW5jdGlvbiB0KG4pe2Z1bmN0aW9uIGUodCl7cmV0dXJuKCh0Kj0yKTwxP3QqdCooKG4rMSkqdC1uKToodC09MikqdCooKG4rMSkqdCtuKSsyKS8yfXJldHVybiBuPStuLGUub3ZlcnNob290PXQsZX0oMS43MDE1OCksb2k9MipNYXRoLlBJLGFpPWZ1bmN0aW9uIHQobixlKXt2YXIgcj1NYXRoLmFzaW4oMS8obj1NYXRoLm1heCgxLG4pKSkqKGUvPW9pKTtmdW5jdGlvbiBpKHQpe3JldHVybiBuKk1hdGgucG93KDIsMTAqLS10KSpNYXRoLnNpbigoci10KS9lKX1yZXR1cm4gaS5hbXBsaXR1ZGU9ZnVuY3Rpb24obil7cmV0dXJuIHQobixlKm9pKX0saS5wZXJpb2Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHQobixlKX0saX0oMSwuMyksdWk9ZnVuY3Rpb24gdChuLGUpe3ZhciByPU1hdGguYXNpbigxLyhuPU1hdGgubWF4KDEsbikpKSooZS89b2kpO2Z1bmN0aW9uIGkodCl7cmV0dXJuIDEtbipNYXRoLnBvdygyLC0xMCoodD0rdCkpKk1hdGguc2luKCh0K3IpL2UpfXJldHVybiBpLmFtcGxpdHVkZT1mdW5jdGlvbihuKXtyZXR1cm4gdChuLGUqb2kpfSxpLnBlcmlvZD1mdW5jdGlvbihlKXtyZXR1cm4gdChuLGUpfSxpfSgxLC4zKSxmaT1mdW5jdGlvbiB0KG4sZSl7dmFyIHI9TWF0aC5hc2luKDEvKG49TWF0aC5tYXgoMSxuKSkpKihlLz1vaSk7ZnVuY3Rpb24gaSh0KXtyZXR1cm4oKHQ9Mip0LTEpPDA/bipNYXRoLnBvdygyLDEwKnQpKk1hdGguc2luKChyLXQpL2UpOjItbipNYXRoLnBvdygyLC0xMCp0KSpNYXRoLnNpbigocit0KS9lKSkvMn1yZXR1cm4gaS5hbXBsaXR1ZGU9ZnVuY3Rpb24obil7cmV0dXJuIHQobixlKm9pKX0saS5wZXJpb2Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHQobixlKX0saX0oMSwuMyksY2k9e3RpbWU6bnVsbCxkZWxheTowLGR1cmF0aW9uOjI1MCxlYXNlOlVyfTtmdW5jdGlvbiBzaSh0LG4pe2Zvcih2YXIgZTshKGU9dC5fX3RyYW5zaXRpb24pfHwhKGU9ZVtuXSk7KWlmKCEodD10LnBhcmVudE5vZGUpKXJldHVybiBjaS50aW1lPWlyKCksY2k7cmV0dXJuIGV9THQucHJvdG90eXBlLmludGVycnVwdD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7TnIodGhpcyx0KX0pfSxMdC5wcm90b3R5cGUudHJhbnNpdGlvbj1mdW5jdGlvbih0KXt2YXIgbixlO3QgaW5zdGFuY2VvZiBQcj8obj10Ll9pZCx0PXQuX25hbWUpOihuPVJyKCksKGU9Y2kpLnRpbWU9aXIoKSx0PW51bGw9PXQ/bnVsbDp0KyIiKTtmb3IodmFyIHI9dGhpcy5fZ3JvdXBzLGk9ci5sZW5ndGgsbz0wO288aTsrK28pZm9yKHZhciBhLHU9cltvXSxmPXUubGVuZ3RoLGM9MDtjPGY7KytjKShhPXVbY10pJiZ3cihhLHQsbixjLHUsZXx8c2koYSxuKSk7cmV0dXJuIG5ldyBQcihyLHRoaXMuX3BhcmVudHMsdCxuKX07dmFyIGxpPVtudWxsXTtmdW5jdGlvbiBoaSh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24gZGkodCxuLGUpe3RoaXMudGFyZ2V0PXQsdGhpcy50eXBlPW4sdGhpcy5zZWxlY3Rpb249ZX1mdW5jdGlvbiBwaSgpe3QuZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9ZnVuY3Rpb24gdmkoKXt0LmV2ZW50LnByZXZlbnREZWZhdWx0KCksdC5ldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX12YXIgZ2k9e25hbWU6ImRyYWcifSx5aT17bmFtZToic3BhY2UifSxfaT17bmFtZToiaGFuZGxlIn0sYmk9e25hbWU6ImNlbnRlciJ9LG1pPXtuYW1lOiJ4IixoYW5kbGVzOlsiZSIsInciXS5tYXAoRWkpLGlucHV0OmZ1bmN0aW9uKHQsbil7cmV0dXJuIHQmJltbdFswXSxuWzBdWzFdXSxbdFsxXSxuWzFdWzFdXV19LG91dHB1dDpmdW5jdGlvbih0KXtyZXR1cm4gdCYmW3RbMF1bMF0sdFsxXVswXV19fSx4aT17bmFtZToieSIsaGFuZGxlczpbIm4iLCJzIl0ubWFwKEVpKSxpbnB1dDpmdW5jdGlvbih0LG4pe3JldHVybiB0JiZbW25bMF1bMF0sdFswXV0sW25bMV1bMF0sdFsxXV1dfSxvdXRwdXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHQmJlt0WzBdWzFdLHRbMV1bMV1dfX0sd2k9e25hbWU6Inh5IixoYW5kbGVzOlsibiIsImUiLCJzIiwidyIsIm53IiwibmUiLCJzZSIsInN3Il0ubWFwKEVpKSxpbnB1dDpmdW5jdGlvbih0KXtyZXR1cm4gdH0sb3V0cHV0OmZ1bmN0aW9uKHQpe3JldHVybiB0fX0sTWk9e292ZXJsYXk6ImNyb3NzaGFpciIsc2VsZWN0aW9uOiJtb3ZlIixuOiJucy1yZXNpemUiLGU6ImV3LXJlc2l6ZSIsczoibnMtcmVzaXplIix3OiJldy1yZXNpemUiLG53OiJud3NlLXJlc2l6ZSIsbmU6Im5lc3ctcmVzaXplIixzZToibndzZS1yZXNpemUiLHN3OiJuZXN3LXJlc2l6ZSJ9LEFpPXtlOiJ3Iix3OiJlIixudzoibmUiLG5lOiJudyIsc2U6InN3Iixzdzoic2UifSxUaT17bjoicyIsczoibiIsbnc6InN3IixuZToic2UiLHNlOiJuZSIsc3c6Im53In0sTmk9e292ZXJsYXk6MSxzZWxlY3Rpb246MSxuOm51bGwsZToxLHM6bnVsbCx3Oi0xLG53Oi0xLG5lOjEsc2U6MSxzdzotMX0sU2k9e292ZXJsYXk6MSxzZWxlY3Rpb246MSxuOi0xLGU6bnVsbCxzOjEsdzpudWxsLG53Oi0xLG5lOi0xLHNlOjEsc3c6MX07ZnVuY3Rpb24gRWkodCl7cmV0dXJue3R5cGU6dH19ZnVuY3Rpb24ga2koKXtyZXR1cm4hdC5ldmVudC5idXR0b259ZnVuY3Rpb24gQ2koKXt2YXIgdD10aGlzLm93bmVyU1ZHRWxlbWVudHx8dGhpcztyZXR1cm5bWzAsMF0sW3Qud2lkdGguYmFzZVZhbC52YWx1ZSx0LmhlaWdodC5iYXNlVmFsLnZhbHVlXV19ZnVuY3Rpb24gUGkodCl7Zm9yKDshdC5fX2JydXNoOylpZighKHQ9dC5wYXJlbnROb2RlKSlyZXR1cm47cmV0dXJuIHQuX19icnVzaH1mdW5jdGlvbiB6aSh0KXtyZXR1cm4gdFswXVswXT09PXRbMV1bMF18fHRbMF1bMV09PT10WzFdWzFdfWZ1bmN0aW9uIFJpKG4pe3ZhciBlLHI9Q2ksaT1raSxvPUkodSwic3RhcnQiLCJicnVzaCIsImVuZCIpLGE9NjtmdW5jdGlvbiB1KHQpe3ZhciBlPXQucHJvcGVydHkoIl9fYnJ1c2giLGgpLnNlbGVjdEFsbCgiLm92ZXJsYXkiKS5kYXRhKFtFaSgib3ZlcmxheSIpXSk7ZS5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIiwib3ZlcmxheSIpLmF0dHIoInBvaW50ZXItZXZlbnRzIiwiYWxsIikuYXR0cigiY3Vyc29yIixNaS5vdmVybGF5KS5tZXJnZShlKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9UGkodGhpcykuZXh0ZW50O0R0KHRoaXMpLmF0dHIoIngiLHRbMF1bMF0pLmF0dHIoInkiLHRbMF1bMV0pLmF0dHIoIndpZHRoIix0WzFdWzBdLXRbMF1bMF0pLmF0dHIoImhlaWdodCIsdFsxXVsxXS10WzBdWzFdKX0pLHQuc2VsZWN0QWxsKCIuc2VsZWN0aW9uIikuZGF0YShbRWkoInNlbGVjdGlvbiIpXSkuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJjbGFzcyIsInNlbGVjdGlvbiIpLmF0dHIoImN1cnNvciIsTWkuc2VsZWN0aW9uKS5hdHRyKCJmaWxsIiwiIzc3NyIpLmF0dHIoImZpbGwtb3BhY2l0eSIsLjMpLmF0dHIoInN0cm9rZSIsIiNmZmYiKS5hdHRyKCJzaGFwZS1yZW5kZXJpbmciLCJjcmlzcEVkZ2VzIik7dmFyIHI9dC5zZWxlY3RBbGwoIi5oYW5kbGUiKS5kYXRhKG4uaGFuZGxlcyxmdW5jdGlvbih0KXtyZXR1cm4gdC50eXBlfSk7ci5leGl0KCkucmVtb3ZlKCksci5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIixmdW5jdGlvbih0KXtyZXR1cm4iaGFuZGxlIGhhbmRsZS0tIit0LnR5cGV9KS5hdHRyKCJjdXJzb3IiLGZ1bmN0aW9uKHQpe3JldHVybiBNaVt0LnR5cGVdfSksdC5lYWNoKGYpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigicG9pbnRlci1ldmVudHMiLCJhbGwiKS5zdHlsZSgiLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yIiwicmdiYSgwLDAsMCwwKSIpLm9uKCJtb3VzZWRvd24uYnJ1c2ggdG91Y2hzdGFydC5icnVzaCIsbCl9ZnVuY3Rpb24gZigpe3ZhciB0PUR0KHRoaXMpLG49UGkodGhpcykuc2VsZWN0aW9uO24/KHQuc2VsZWN0QWxsKCIuc2VsZWN0aW9uIikuc3R5bGUoImRpc3BsYXkiLG51bGwpLmF0dHIoIngiLG5bMF1bMF0pLmF0dHIoInkiLG5bMF1bMV0pLmF0dHIoIndpZHRoIixuWzFdWzBdLW5bMF1bMF0pLmF0dHIoImhlaWdodCIsblsxXVsxXS1uWzBdWzFdKSx0LnNlbGVjdEFsbCgiLmhhbmRsZSIpLnN0eWxlKCJkaXNwbGF5IixudWxsKS5hdHRyKCJ4IixmdW5jdGlvbih0KXtyZXR1cm4iZSI9PT10LnR5cGVbdC50eXBlLmxlbmd0aC0xXT9uWzFdWzBdLWEvMjpuWzBdWzBdLWEvMn0pLmF0dHIoInkiLGZ1bmN0aW9uKHQpe3JldHVybiJzIj09PXQudHlwZVswXT9uWzFdWzFdLWEvMjpuWzBdWzFdLWEvMn0pLmF0dHIoIndpZHRoIixmdW5jdGlvbih0KXtyZXR1cm4ibiI9PT10LnR5cGV8fCJzIj09PXQudHlwZT9uWzFdWzBdLW5bMF1bMF0rYTphfSkuYXR0cigiaGVpZ2h0IixmdW5jdGlvbih0KXtyZXR1cm4iZSI9PT10LnR5cGV8fCJ3Ij09PXQudHlwZT9uWzFdWzFdLW5bMF1bMV0rYTphfSkpOnQuc2VsZWN0QWxsKCIuc2VsZWN0aW9uLC5oYW5kbGUiKS5zdHlsZSgiZGlzcGxheSIsIm5vbmUiKS5hdHRyKCJ4IixudWxsKS5hdHRyKCJ5IixudWxsKS5hdHRyKCJ3aWR0aCIsbnVsbCkuYXR0cigiaGVpZ2h0IixudWxsKX1mdW5jdGlvbiBjKHQsbil7cmV0dXJuIHQuX19icnVzaC5lbWl0dGVyfHxuZXcgcyh0LG4pfWZ1bmN0aW9uIHModCxuKXt0aGlzLnRoYXQ9dCx0aGlzLmFyZ3M9bix0aGlzLnN0YXRlPXQuX19icnVzaCx0aGlzLmFjdGl2ZT0wfWZ1bmN0aW9uIGwoKXtpZih0LmV2ZW50LnRvdWNoZXMpe2lmKHQuZXZlbnQuY2hhbmdlZFRvdWNoZXMubGVuZ3RoPHQuZXZlbnQudG91Y2hlcy5sZW5ndGgpcmV0dXJuIHZpKCl9ZWxzZSBpZihlKXJldHVybjtpZihpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl7dmFyIHIsbyxhLHUscyxsLGgsZCxwLHYsZyx5LF8sYj10aGlzLG09dC5ldmVudC50YXJnZXQuX19kYXRhX18udHlwZSx4PSJzZWxlY3Rpb24iPT09KHQuZXZlbnQubWV0YUtleT9tPSJvdmVybGF5IjptKT9naTp0LmV2ZW50LmFsdEtleT9iaTpfaSx3PW49PT14aT9udWxsOk5pW21dLE09bj09PW1pP251bGw6U2lbbV0sQT1QaShiKSxUPUEuZXh0ZW50LE49QS5zZWxlY3Rpb24sUz1UWzBdWzBdLEU9VFswXVsxXSxrPVRbMV1bMF0sQz1UWzFdWzFdLFA9dyYmTSYmdC5ldmVudC5zaGlmdEtleSx6PUZ0KGIpLFI9eixMPWMoYixhcmd1bWVudHMpLmJlZm9yZXN0YXJ0KCk7Im92ZXJsYXkiPT09bT9BLnNlbGVjdGlvbj1OPVtbcj1uPT09eGk/Uzp6WzBdLGE9bj09PW1pP0U6elsxXV0sW3M9bj09PXhpP2s6cixoPW49PT1taT9DOmFdXToocj1OWzBdWzBdLGE9TlswXVsxXSxzPU5bMV1bMF0saD1OWzFdWzFdKSxvPXIsdT1hLGw9cyxkPWg7dmFyIEQ9RHQoYikuYXR0cigicG9pbnRlci1ldmVudHMiLCJub25lIiksVT1ELnNlbGVjdEFsbCgiLm92ZXJsYXkiKS5hdHRyKCJjdXJzb3IiLE1pW21dKTtpZih0LmV2ZW50LnRvdWNoZXMpRC5vbigidG91Y2htb3ZlLmJydXNoIixPLCEwKS5vbigidG91Y2hlbmQuYnJ1c2ggdG91Y2hjYW5jZWwuYnJ1c2giLEIsITApO2Vsc2V7dmFyIHE9RHQodC5ldmVudC52aWV3KS5vbigia2V5ZG93bi5icnVzaCIsZnVuY3Rpb24oKXtzd2l0Y2godC5ldmVudC5rZXlDb2RlKXtjYXNlIDE2OlA9dyYmTTticmVhaztjYXNlIDE4Ong9PT1faSYmKHcmJihzPWwtcCp3LHI9bytwKncpLE0mJihoPWQtdipNLGE9dSt2Kk0pLHg9YmksWSgpKTticmVhaztjYXNlIDMyOnghPT1faSYmeCE9PWJpfHwodzwwP3M9bC1wOnc+MCYmKHI9by1wKSxNPDA/aD1kLXY6TT4wJiYoYT11LXYpLHg9eWksVS5hdHRyKCJjdXJzb3IiLE1pLnNlbGVjdGlvbiksWSgpKTticmVhaztkZWZhdWx0OnJldHVybn12aSgpfSwhMCkub24oImtleXVwLmJydXNoIixmdW5jdGlvbigpe3N3aXRjaCh0LmV2ZW50LmtleUNvZGUpe2Nhc2UgMTY6UCYmKHk9Xz1QPSExLFkoKSk7YnJlYWs7Y2FzZSAxODp4PT09YmkmJih3PDA/cz1sOnc+MCYmKHI9byksTTwwP2g9ZDpNPjAmJihhPXUpLHg9X2ksWSgpKTticmVhaztjYXNlIDMyOng9PT15aSYmKHQuZXZlbnQuYWx0S2V5Pyh3JiYocz1sLXAqdyxyPW8rcCp3KSxNJiYoaD1kLXYqTSxhPXUrdipNKSx4PWJpKToodzwwP3M9bDp3PjAmJihyPW8pLE08MD9oPWQ6TT4wJiYoYT11KSx4PV9pKSxVLmF0dHIoImN1cnNvciIsTWlbbV0pLFkoKSk7YnJlYWs7ZGVmYXVsdDpyZXR1cm59dmkoKX0sITApLm9uKCJtb3VzZW1vdmUuYnJ1c2giLE8sITApLm9uKCJtb3VzZXVwLmJydXNoIixCLCEwKTtYdCh0LmV2ZW50LnZpZXcpfXBpKCksTnIoYiksZi5jYWxsKGIpLEwuc3RhcnQoKX1mdW5jdGlvbiBPKCl7dmFyIHQ9RnQoYik7IVB8fHl8fF98fChNYXRoLmFicyh0WzBdLVJbMF0pPk1hdGguYWJzKHRbMV0tUlsxXSk/Xz0hMDp5PSEwKSxSPXQsZz0hMCx2aSgpLFkoKX1mdW5jdGlvbiBZKCl7dmFyIHQ7c3dpdGNoKHA9UlswXS16WzBdLHY9UlsxXS16WzFdLHgpe2Nhc2UgeWk6Y2FzZSBnaTp3JiYocD1NYXRoLm1heChTLXIsTWF0aC5taW4oay1zLHApKSxvPXIrcCxsPXMrcCksTSYmKHY9TWF0aC5tYXgoRS1hLE1hdGgubWluKEMtaCx2KSksdT1hK3YsZD1oK3YpO2JyZWFrO2Nhc2UgX2k6dzwwPyhwPU1hdGgubWF4KFMtcixNYXRoLm1pbihrLXIscCkpLG89citwLGw9cyk6dz4wJiYocD1NYXRoLm1heChTLXMsTWF0aC5taW4oay1zLHApKSxvPXIsbD1zK3ApLE08MD8odj1NYXRoLm1heChFLWEsTWF0aC5taW4oQy1hLHYpKSx1PWErdixkPWgpOk0+MCYmKHY9TWF0aC5tYXgoRS1oLE1hdGgubWluKEMtaCx2KSksdT1hLGQ9aCt2KTticmVhaztjYXNlIGJpOncmJihvPU1hdGgubWF4KFMsTWF0aC5taW4oayxyLXAqdykpLGw9TWF0aC5tYXgoUyxNYXRoLm1pbihrLHMrcCp3KSkpLE0mJih1PU1hdGgubWF4KEUsTWF0aC5taW4oQyxhLXYqTSkpLGQ9TWF0aC5tYXgoRSxNYXRoLm1pbihDLGgrdipNKSkpfWw8byYmKHcqPS0xLHQ9cixyPXMscz10LHQ9byxvPWwsbD10LG0gaW4gQWkmJlUuYXR0cigiY3Vyc29yIixNaVttPUFpW21dXSkpLGQ8dSYmKE0qPS0xLHQ9YSxhPWgsaD10LHQ9dSx1PWQsZD10LG0gaW4gVGkmJlUuYXR0cigiY3Vyc29yIixNaVttPVRpW21dXSkpLEEuc2VsZWN0aW9uJiYoTj1BLnNlbGVjdGlvbikseSYmKG89TlswXVswXSxsPU5bMV1bMF0pLF8mJih1PU5bMF1bMV0sZD1OWzFdWzFdKSxOWzBdWzBdPT09byYmTlswXVsxXT09PXUmJk5bMV1bMF09PT1sJiZOWzFdWzFdPT09ZHx8KEEuc2VsZWN0aW9uPVtbbyx1XSxbbCxkXV0sZi5jYWxsKGIpLEwuYnJ1c2goKSl9ZnVuY3Rpb24gQigpe2lmKHBpKCksdC5ldmVudC50b3VjaGVzKXtpZih0LmV2ZW50LnRvdWNoZXMubGVuZ3RoKXJldHVybjtlJiZjbGVhclRpbWVvdXQoZSksZT1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZT1udWxsfSw1MDApLEQub24oInRvdWNobW92ZS5icnVzaCB0b3VjaGVuZC5icnVzaCB0b3VjaGNhbmNlbC5icnVzaCIsbnVsbCl9ZWxzZSBHdCh0LmV2ZW50LnZpZXcsZykscS5vbigia2V5ZG93bi5icnVzaCBrZXl1cC5icnVzaCBtb3VzZW1vdmUuYnJ1c2ggbW91c2V1cC5icnVzaCIsbnVsbCk7RC5hdHRyKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpLFUuYXR0cigiY3Vyc29yIixNaS5vdmVybGF5KSxBLnNlbGVjdGlvbiYmKE49QS5zZWxlY3Rpb24pLHppKE4pJiYoQS5zZWxlY3Rpb249bnVsbCxmLmNhbGwoYikpLEwuZW5kKCl9fWZ1bmN0aW9uIGgoKXt2YXIgdD10aGlzLl9fYnJ1c2h8fHtzZWxlY3Rpb246bnVsbH07cmV0dXJuIHQuZXh0ZW50PXIuYXBwbHkodGhpcyxhcmd1bWVudHMpLHQuZGltPW4sdH1yZXR1cm4gdS5tb3ZlPWZ1bmN0aW9uKHQsZSl7dC5zZWxlY3Rpb24/dC5vbigic3RhcnQuYnJ1c2giLGZ1bmN0aW9uKCl7Yyh0aGlzLGFyZ3VtZW50cykuYmVmb3Jlc3RhcnQoKS5zdGFydCgpfSkub24oImludGVycnVwdC5icnVzaCBlbmQuYnJ1c2giLGZ1bmN0aW9uKCl7Yyh0aGlzLGFyZ3VtZW50cykuZW5kKCl9KS50d2VlbigiYnJ1c2giLGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxyPXQuX19icnVzaCxpPWModCxhcmd1bWVudHMpLG89ci5zZWxlY3Rpb24sYT1uLmlucHV0KCJmdW5jdGlvbiI9PXR5cGVvZiBlP2UuYXBwbHkodGhpcyxhcmd1bWVudHMpOmUsci5leHRlbnQpLHU9bWUobyxhKTtmdW5jdGlvbiBzKG4pe3Iuc2VsZWN0aW9uPTE9PT1uJiZ6aShhKT9udWxsOnUobiksZi5jYWxsKHQpLGkuYnJ1c2goKX1yZXR1cm4gbyYmYT9zOnMoMSl9KTp0LmVhY2goZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHMscj10aGlzLl9fYnJ1c2gsaT1uLmlucHV0KCJmdW5jdGlvbiI9PXR5cGVvZiBlP2UuYXBwbHkodGhpcyx0KTplLHIuZXh0ZW50KSxvPWModGhpcyx0KS5iZWZvcmVzdGFydCgpO05yKHRoaXMpLHIuc2VsZWN0aW9uPW51bGw9PWl8fHppKGkpP251bGw6aSxmLmNhbGwodGhpcyksby5zdGFydCgpLmJydXNoKCkuZW5kKCl9KX0scy5wcm90b3R5cGU9e2JlZm9yZXN0YXJ0OmZ1bmN0aW9uKCl7cmV0dXJuIDE9PSsrdGhpcy5hY3RpdmUmJih0aGlzLnN0YXRlLmVtaXR0ZXI9dGhpcyx0aGlzLnN0YXJ0aW5nPSEwKSx0aGlzfSxzdGFydDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN0YXJ0aW5nJiYodGhpcy5zdGFydGluZz0hMSx0aGlzLmVtaXQoInN0YXJ0IikpLHRoaXN9LGJydXNoOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZW1pdCgiYnJ1c2giKSx0aGlzfSxlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gMD09LS10aGlzLmFjdGl2ZSYmKGRlbGV0ZSB0aGlzLnN0YXRlLmVtaXR0ZXIsdGhpcy5lbWl0KCJlbmQiKSksdGhpc30sZW1pdDpmdW5jdGlvbih0KXtDdChuZXcgZGkodSx0LG4ub3V0cHV0KHRoaXMuc3RhdGUuc2VsZWN0aW9uKSksby5hcHBseSxvLFt0LHRoaXMudGhhdCx0aGlzLmFyZ3NdKX19LHUuZXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6aGkoW1srdFswXVswXSwrdFswXVsxXV0sWyt0WzFdWzBdLCt0WzFdWzFdXV0pLHUpOnJ9LHUuZmlsdGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6aGkoISF0KSx1KTppfSx1LmhhbmRsZVNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9K3QsdSk6YX0sdS5vbj1mdW5jdGlvbigpe3ZhciB0PW8ub24uYXBwbHkobyxhcmd1bWVudHMpO3JldHVybiB0PT09bz91OnR9LHV9dmFyIExpPU1hdGguY29zLERpPU1hdGguc2luLFVpPU1hdGguUEkscWk9VWkvMixPaT0yKlVpLFlpPU1hdGgubWF4O3ZhciBCaT1BcnJheS5wcm90b3R5cGUuc2xpY2U7ZnVuY3Rpb24gRmkodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fXZhciBJaT1NYXRoLlBJLEhpPTIqSWksamk9SGktMWUtNjtmdW5jdGlvbiBYaSgpe3RoaXMuX3gwPXRoaXMuX3kwPXRoaXMuX3gxPXRoaXMuX3kxPW51bGwsdGhpcy5fPSIifWZ1bmN0aW9uIEdpKCl7cmV0dXJuIG5ldyBYaX1mdW5jdGlvbiBWaSh0KXtyZXR1cm4gdC5zb3VyY2V9ZnVuY3Rpb24gJGkodCl7cmV0dXJuIHQudGFyZ2V0fWZ1bmN0aW9uIFdpKHQpe3JldHVybiB0LnJhZGl1c31mdW5jdGlvbiBaaSh0KXtyZXR1cm4gdC5zdGFydEFuZ2xlfWZ1bmN0aW9uIFFpKHQpe3JldHVybiB0LmVuZEFuZ2xlfVhpLnByb3RvdHlwZT1HaS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlhpLG1vdmVUbzpmdW5jdGlvbih0LG4pe3RoaXMuXys9Ik0iKyh0aGlzLl94MD10aGlzLl94MT0rdCkrIiwiKyh0aGlzLl95MD10aGlzLl95MT0rbil9LGNsb3NlUGF0aDpmdW5jdGlvbigpe251bGwhPT10aGlzLl94MSYmKHRoaXMuX3gxPXRoaXMuX3gwLHRoaXMuX3kxPXRoaXMuX3kwLHRoaXMuXys9IloiKX0sbGluZVRvOmZ1bmN0aW9uKHQsbil7dGhpcy5fKz0iTCIrKHRoaXMuX3gxPSt0KSsiLCIrKHRoaXMuX3kxPStuKX0scXVhZHJhdGljQ3VydmVUbzpmdW5jdGlvbih0LG4sZSxyKXt0aGlzLl8rPSJRIisgK3QrIiwiKyArbisiLCIrKHRoaXMuX3gxPStlKSsiLCIrKHRoaXMuX3kxPStyKX0sYmV6aWVyQ3VydmVUbzpmdW5jdGlvbih0LG4sZSxyLGksbyl7dGhpcy5fKz0iQyIrICt0KyIsIisgK24rIiwiKyArZSsiLCIrICtyKyIsIisodGhpcy5feDE9K2kpKyIsIisodGhpcy5feTE9K28pfSxhcmNUbzpmdW5jdGlvbih0LG4sZSxyLGkpe3Q9K3Qsbj0rbixlPStlLHI9K3IsaT0raTt2YXIgbz10aGlzLl94MSxhPXRoaXMuX3kxLHU9ZS10LGY9ci1uLGM9by10LHM9YS1uLGw9YypjK3MqcztpZihpPDApdGhyb3cgbmV3IEVycm9yKCJuZWdhdGl2ZSByYWRpdXM6ICIraSk7aWYobnVsbD09PXRoaXMuX3gxKXRoaXMuXys9Ik0iKyh0aGlzLl94MT10KSsiLCIrKHRoaXMuX3kxPW4pO2Vsc2UgaWYobD4xZS02KWlmKE1hdGguYWJzKHMqdS1mKmMpPjFlLTYmJmkpe3ZhciBoPWUtbyxkPXItYSxwPXUqdStmKmYsdj1oKmgrZCpkLGc9TWF0aC5zcXJ0KHApLHk9TWF0aC5zcXJ0KGwpLF89aSpNYXRoLnRhbigoSWktTWF0aC5hY29zKChwK2wtdikvKDIqZyp5KSkpLzIpLGI9Xy95LG09Xy9nO01hdGguYWJzKGItMSk+MWUtNiYmKHRoaXMuXys9IkwiKyh0K2IqYykrIiwiKyhuK2IqcykpLHRoaXMuXys9IkEiK2krIiwiK2krIiwwLDAsIisgKyhzKmg+YypkKSsiLCIrKHRoaXMuX3gxPXQrbSp1KSsiLCIrKHRoaXMuX3kxPW4rbSpmKX1lbHNlIHRoaXMuXys9IkwiKyh0aGlzLl94MT10KSsiLCIrKHRoaXMuX3kxPW4pO2Vsc2U7fSxhcmM6ZnVuY3Rpb24odCxuLGUscixpLG8pe3Q9K3Qsbj0rbjt2YXIgYT0oZT0rZSkqTWF0aC5jb3MociksdT1lKk1hdGguc2luKHIpLGY9dCthLGM9bit1LHM9MV5vLGw9bz9yLWk6aS1yO2lmKGU8MCl0aHJvdyBuZXcgRXJyb3IoIm5lZ2F0aXZlIHJhZGl1czogIitlKTtudWxsPT09dGhpcy5feDE/dGhpcy5fKz0iTSIrZisiLCIrYzooTWF0aC5hYnModGhpcy5feDEtZik+MWUtNnx8TWF0aC5hYnModGhpcy5feTEtYyk+MWUtNikmJih0aGlzLl8rPSJMIitmKyIsIitjKSxlJiYobDwwJiYobD1sJUhpK0hpKSxsPmppP3RoaXMuXys9IkEiK2UrIiwiK2UrIiwwLDEsIitzKyIsIisodC1hKSsiLCIrKG4tdSkrIkEiK2UrIiwiK2UrIiwwLDEsIitzKyIsIisodGhpcy5feDE9ZikrIiwiKyh0aGlzLl95MT1jKTpsPjFlLTYmJih0aGlzLl8rPSJBIitlKyIsIitlKyIsMCwiKyArKGw+PUlpKSsiLCIrcysiLCIrKHRoaXMuX3gxPXQrZSpNYXRoLmNvcyhpKSkrIiwiKyh0aGlzLl95MT1uK2UqTWF0aC5zaW4oaSkpKSl9LHJlY3Q6ZnVuY3Rpb24odCxuLGUscil7dGhpcy5fKz0iTSIrKHRoaXMuX3gwPXRoaXMuX3gxPSt0KSsiLCIrKHRoaXMuX3kwPXRoaXMuX3kxPStuKSsiaCIrICtlKyJ2IisgK3IrImgiKy1lKyJaIn0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ffX07ZnVuY3Rpb24gSmkoKXt9ZnVuY3Rpb24gS2kodCxuKXt2YXIgZT1uZXcgSmk7aWYodCBpbnN0YW5jZW9mIEppKXQuZWFjaChmdW5jdGlvbih0LG4pe2Uuc2V0KG4sdCl9KTtlbHNlIGlmKEFycmF5LmlzQXJyYXkodCkpe3ZhciByLGk9LTEsbz10Lmxlbmd0aDtpZihudWxsPT1uKWZvcig7KytpPG87KWUuc2V0KGksdFtpXSk7ZWxzZSBmb3IoOysraTxvOyllLnNldChuKHI9dFtpXSxpLHQpLHIpfWVsc2UgaWYodClmb3IodmFyIGEgaW4gdCllLnNldChhLHRbYV0pO3JldHVybiBlfWZ1bmN0aW9uIHRvKCl7cmV0dXJue319ZnVuY3Rpb24gbm8odCxuLGUpe3Rbbl09ZX1mdW5jdGlvbiBlbygpe3JldHVybiBLaSgpfWZ1bmN0aW9uIHJvKHQsbixlKXt0LnNldChuLGUpfWZ1bmN0aW9uIGlvKCl7fUppLnByb3RvdHlwZT1LaS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOkppLGhhczpmdW5jdGlvbih0KXtyZXR1cm4iJCIrdCBpbiB0aGlzfSxnZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXNbIiQiK3RdfSxzZXQ6ZnVuY3Rpb24odCxuKXtyZXR1cm4gdGhpc1siJCIrdF09bix0aGlzfSxyZW1vdmU6ZnVuY3Rpb24odCl7dmFyIG49IiQiK3Q7cmV0dXJuIG4gaW4gdGhpcyYmZGVsZXRlIHRoaXNbbl19LGNsZWFyOmZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMpIiQiPT09dFswXSYmZGVsZXRlIHRoaXNbdF19LGtleXM6ZnVuY3Rpb24oKXt2YXIgdD1bXTtmb3IodmFyIG4gaW4gdGhpcykiJCI9PT1uWzBdJiZ0LnB1c2gobi5zbGljZSgxKSk7cmV0dXJuIHR9LHZhbHVlczpmdW5jdGlvbigpe3ZhciB0PVtdO2Zvcih2YXIgbiBpbiB0aGlzKSIkIj09PW5bMF0mJnQucHVzaCh0aGlzW25dKTtyZXR1cm4gdH0sZW50cmllczpmdW5jdGlvbigpe3ZhciB0PVtdO2Zvcih2YXIgbiBpbiB0aGlzKSIkIj09PW5bMF0mJnQucHVzaCh7a2V5Om4uc2xpY2UoMSksdmFsdWU6dGhpc1tuXX0pO3JldHVybiB0fSxzaXplOmZ1bmN0aW9uKCl7dmFyIHQ9MDtmb3IodmFyIG4gaW4gdGhpcykiJCI9PT1uWzBdJiYrK3Q7cmV0dXJuIHR9LGVtcHR5OmZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMpaWYoIiQiPT09dFswXSlyZXR1cm4hMTtyZXR1cm4hMH0sZWFjaDpmdW5jdGlvbih0KXtmb3IodmFyIG4gaW4gdGhpcykiJCI9PT1uWzBdJiZ0KHRoaXNbbl0sbi5zbGljZSgxKSx0aGlzKX19O3ZhciBvbz1LaS5wcm90b3R5cGU7ZnVuY3Rpb24gYW8odCxuKXt2YXIgZT1uZXcgaW87aWYodCBpbnN0YW5jZW9mIGlvKXQuZWFjaChmdW5jdGlvbih0KXtlLmFkZCh0KX0pO2Vsc2UgaWYodCl7dmFyIHI9LTEsaT10Lmxlbmd0aDtpZihudWxsPT1uKWZvcig7KytyPGk7KWUuYWRkKHRbcl0pO2Vsc2UgZm9yKDsrK3I8aTspZS5hZGQobih0W3JdLHIsdCkpfXJldHVybiBlfWlvLnByb3RvdHlwZT1hby5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmlvLGhhczpvby5oYXMsYWRkOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzWyIkIisodCs9IiIpXT10LHRoaXN9LHJlbW92ZTpvby5yZW1vdmUsY2xlYXI6b28uY2xlYXIsdmFsdWVzOm9vLmtleXMsc2l6ZTpvby5zaXplLGVtcHR5Om9vLmVtcHR5LGVhY2g6b28uZWFjaH07dmFyIHVvPUFycmF5LnByb3RvdHlwZS5zbGljZTtmdW5jdGlvbiBmbyh0LG4pe3JldHVybiB0LW59ZnVuY3Rpb24gY28odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fWZ1bmN0aW9uIHNvKHQsbil7Zm9yKHZhciBlLHI9LTEsaT1uLmxlbmd0aDsrK3I8aTspaWYoZT1sbyh0LG5bcl0pKXJldHVybiBlO3JldHVybiAwfWZ1bmN0aW9uIGxvKHQsbil7Zm9yKHZhciBlPW5bMF0scj1uWzFdLGk9LTEsbz0wLGE9dC5sZW5ndGgsdT1hLTE7bzxhO3U9bysrKXt2YXIgZj10W29dLGM9ZlswXSxzPWZbMV0sbD10W3VdLGg9bFswXSxkPWxbMV07aWYoaG8oZixsLG4pKXJldHVybiAwO3M+ciE9ZD5yJiZlPChoLWMpKihyLXMpLyhkLXMpK2MmJihpPS1pKX1yZXR1cm4gaX1mdW5jdGlvbiBobyh0LG4sZSl7dmFyIHIsaSxvLGE7cmV0dXJuIGZ1bmN0aW9uKHQsbixlKXtyZXR1cm4oblswXS10WzBdKSooZVsxXS10WzFdKT09KGVbMF0tdFswXSkqKG5bMV0tdFsxXSl9KHQsbixlKSYmKGk9dFtyPSsodFswXT09PW5bMF0pXSxvPWVbcl0sYT1uW3JdLGk8PW8mJm88PWF8fGE8PW8mJm88PWkpfWZ1bmN0aW9uIHBvKCl7fXZhciB2bz1bW10sW1tbMSwxLjVdLFsuNSwxXV1dLFtbWzEuNSwxXSxbMSwxLjVdXV0sW1tbMS41LDFdLFsuNSwxXV1dLFtbWzEsLjVdLFsxLjUsMV1dXSxbW1sxLDEuNV0sWy41LDFdXSxbWzEsLjVdLFsxLjUsMV1dXSxbW1sxLC41XSxbMSwxLjVdXV0sW1tbMSwuNV0sWy41LDFdXV0sW1tbLjUsMV0sWzEsLjVdXV0sW1tbMSwxLjVdLFsxLC41XV1dLFtbWy41LDFdLFsxLC41XV0sW1sxLjUsMV0sWzEsMS41XV1dLFtbWzEuNSwxXSxbMSwuNV1dXSxbW1suNSwxXSxbMS41LDFdXV0sW1tbMSwxLjVdLFsxLjUsMV1dXSxbW1suNSwxXSxbMSwxLjVdXV0sW11dO2Z1bmN0aW9uIGdvKCl7dmFyIHQ9MSxuPTEsZT1NLHI9dTtmdW5jdGlvbiBpKHQpe3ZhciBuPWUodCk7aWYoQXJyYXkuaXNBcnJheShuKSluPW4uc2xpY2UoKS5zb3J0KGZvKTtlbHNle3ZhciByPXModCksaT1yWzBdLGE9clsxXTtuPXcoaSxhLG4pLG49ZyhNYXRoLmZsb29yKGkvbikqbixNYXRoLmZsb29yKGEvbikqbixuKX1yZXR1cm4gbi5tYXAoZnVuY3Rpb24obil7cmV0dXJuIG8odCxuKX0pfWZ1bmN0aW9uIG8oZSxpKXt2YXIgbz1bXSx1PVtdO3JldHVybiBmdW5jdGlvbihlLHIsaSl7dmFyIG8sdSxmLGMscyxsLGg9bmV3IEFycmF5LGQ9bmV3IEFycmF5O289dT0tMSxjPWVbMF0+PXIsdm9bYzw8MV0uZm9yRWFjaChwKTtmb3IoOysrbzx0LTE7KWY9YyxjPWVbbysxXT49cix2b1tmfGM8PDFdLmZvckVhY2gocCk7dm9bYzw8MF0uZm9yRWFjaChwKTtmb3IoOysrdTxuLTE7KXtmb3Iobz0tMSxjPWVbdSp0K3RdPj1yLHM9ZVt1KnRdPj1yLHZvW2M8PDF8czw8Ml0uZm9yRWFjaChwKTsrK288dC0xOylmPWMsYz1lW3UqdCt0K28rMV0+PXIsbD1zLHM9ZVt1KnQrbysxXT49cix2b1tmfGM8PDF8czw8MnxsPDwzXS5mb3JFYWNoKHApO3ZvW2N8czw8M10uZm9yRWFjaChwKX1vPS0xLHM9ZVt1KnRdPj1yLHZvW3M8PDJdLmZvckVhY2gocCk7Zm9yKDsrK288dC0xOylsPXMscz1lW3UqdCtvKzFdPj1yLHZvW3M8PDJ8bDw8M10uZm9yRWFjaChwKTtmdW5jdGlvbiBwKHQpe3ZhciBuLGUscj1bdFswXVswXStvLHRbMF1bMV0rdV0sZj1bdFsxXVswXStvLHRbMV1bMV0rdV0sYz1hKHIpLHM9YShmKTsobj1kW2NdKT8oZT1oW3NdKT8oZGVsZXRlIGRbbi5lbmRdLGRlbGV0ZSBoW2Uuc3RhcnRdLG49PT1lPyhuLnJpbmcucHVzaChmKSxpKG4ucmluZykpOmhbbi5zdGFydF09ZFtlLmVuZF09e3N0YXJ0Om4uc3RhcnQsZW5kOmUuZW5kLHJpbmc6bi5yaW5nLmNvbmNhdChlLnJpbmcpfSk6KGRlbGV0ZSBkW24uZW5kXSxuLnJpbmcucHVzaChmKSxkW24uZW5kPXNdPW4pOihuPWhbc10pPyhlPWRbY10pPyhkZWxldGUgaFtuLnN0YXJ0XSxkZWxldGUgZFtlLmVuZF0sbj09PWU/KG4ucmluZy5wdXNoKGYpLGkobi5yaW5nKSk6aFtlLnN0YXJ0XT1kW24uZW5kXT17c3RhcnQ6ZS5zdGFydCxlbmQ6bi5lbmQscmluZzplLnJpbmcuY29uY2F0KG4ucmluZyl9KTooZGVsZXRlIGhbbi5zdGFydF0sbi5yaW5nLnVuc2hpZnQociksaFtuLnN0YXJ0PWNdPW4pOmhbY109ZFtzXT17c3RhcnQ6YyxlbmQ6cyxyaW5nOltyLGZdfX12b1tzPDwzXS5mb3JFYWNoKHApfShlLGksZnVuY3Rpb24odCl7cih0LGUsaSksZnVuY3Rpb24odCl7Zm9yKHZhciBuPTAsZT10Lmxlbmd0aCxyPXRbZS0xXVsxXSp0WzBdWzBdLXRbZS0xXVswXSp0WzBdWzFdOysrbjxlOylyKz10W24tMV1bMV0qdFtuXVswXS10W24tMV1bMF0qdFtuXVsxXTtyZXR1cm4gcn0odCk+MD9vLnB1c2goW3RdKTp1LnB1c2godCl9KSx1LmZvckVhY2goZnVuY3Rpb24odCl7Zm9yKHZhciBuLGU9MCxyPW8ubGVuZ3RoO2U8cjsrK2UpaWYoLTEhPT1zbygobj1vW2VdKVswXSx0KSlyZXR1cm4gdm9pZCBuLnB1c2godCl9KSx7dHlwZToiTXVsdGlQb2x5Z29uIix2YWx1ZTppLGNvb3JkaW5hdGVzOm99fWZ1bmN0aW9uIGEobil7cmV0dXJuIDIqblswXStuWzFdKih0KzEpKjR9ZnVuY3Rpb24gdShlLHIsaSl7ZS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciBvLGE9ZVswXSx1PWVbMV0sZj0wfGEsYz0wfHUscz1yW2MqdCtmXTthPjAmJmE8dCYmZj09PWEmJihvPXJbYyp0K2YtMV0sZVswXT1hKyhpLW8pLyhzLW8pLS41KSx1PjAmJnU8biYmYz09PXUmJihvPXJbKGMtMSkqdCtmXSxlWzFdPXUrKGktbykvKHMtbyktLjUpfSl9cmV0dXJuIGkuY29udG91cj1vLGkuc2l6ZT1mdW5jdGlvbihlKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm5bdCxuXTt2YXIgcj1NYXRoLmNlaWwoZVswXSksbz1NYXRoLmNlaWwoZVsxXSk7aWYoIShyPjAmJm8+MCkpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHNpemUiKTtyZXR1cm4gdD1yLG49byxpfSxpLnRocmVzaG9sZHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpBcnJheS5pc0FycmF5KHQpP2NvKHVvLmNhbGwodCkpOmNvKHQpLGkpOmV9LGkuc21vb3RoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQ/dTpwbyxpKTpyPT09dX0saX1mdW5jdGlvbiB5byh0LG4sZSl7Zm9yKHZhciByPXQud2lkdGgsaT10LmhlaWdodCxvPTErKGU8PDEpLGE9MDthPGk7KythKWZvcih2YXIgdT0wLGY9MDt1PHIrZTsrK3UpdTxyJiYoZis9dC5kYXRhW3UrYSpyXSksdT49ZSYmKHU+PW8mJihmLT10LmRhdGFbdS1vK2Eqcl0pLG4uZGF0YVt1LWUrYSpyXT1mL01hdGgubWluKHUrMSxyLTErby11LG8pKX1mdW5jdGlvbiBfbyh0LG4sZSl7Zm9yKHZhciByPXQud2lkdGgsaT10LmhlaWdodCxvPTErKGU8PDEpLGE9MDthPHI7KythKWZvcih2YXIgdT0wLGY9MDt1PGkrZTsrK3UpdTxpJiYoZis9dC5kYXRhW2ErdSpyXSksdT49ZSYmKHU+PW8mJihmLT10LmRhdGFbYSsodS1vKSpyXSksbi5kYXRhW2ErKHUtZSkqcl09Zi9NYXRoLm1pbih1KzEsaS0xK28tdSxvKSl9ZnVuY3Rpb24gYm8odCl7cmV0dXJuIHRbMF19ZnVuY3Rpb24gbW8odCl7cmV0dXJuIHRbMV19ZnVuY3Rpb24geG8oKXtyZXR1cm4gMX12YXIgd289e30sTW89e30sQW89MzQsVG89MTAsTm89MTM7ZnVuY3Rpb24gU28odCl7cmV0dXJuIG5ldyBGdW5jdGlvbigiZCIsInJldHVybiB7Iit0Lm1hcChmdW5jdGlvbih0LG4pe3JldHVybiBKU09OLnN0cmluZ2lmeSh0KSsiOiBkWyIrbisiXSJ9KS5qb2luKCIsIikrIn0iKX1mdW5jdGlvbiBFbyh0KXt2YXIgbj1uZXcgUmVnRXhwKCdbIicrdCsiXG5ccl0iKSxlPXQuY2hhckNvZGVBdCgwKTtmdW5jdGlvbiByKHQsbil7dmFyIHIsaT1bXSxvPXQubGVuZ3RoLGE9MCx1PTAsZj1vPD0wLGM9ITE7ZnVuY3Rpb24gcygpe2lmKGYpcmV0dXJuIE1vO2lmKGMpcmV0dXJuIGM9ITEsd287dmFyIG4scixpPWE7aWYodC5jaGFyQ29kZUF0KGkpPT09QW8pe2Zvcig7YSsrPG8mJnQuY2hhckNvZGVBdChhKSE9PUFvfHx0LmNoYXJDb2RlQXQoKythKT09PUFvOyk7cmV0dXJuKG49YSk+PW8/Zj0hMDoocj10LmNoYXJDb2RlQXQoYSsrKSk9PT1Ubz9jPSEwOnI9PT1ObyYmKGM9ITAsdC5jaGFyQ29kZUF0KGEpPT09VG8mJisrYSksdC5zbGljZShpKzEsbi0xKS5yZXBsYWNlKC8iIi9nLCciJyl9Zm9yKDthPG87KXtpZigocj10LmNoYXJDb2RlQXQobj1hKyspKT09PVRvKWM9ITA7ZWxzZSBpZihyPT09Tm8pYz0hMCx0LmNoYXJDb2RlQXQoYSk9PT1UbyYmKythO2Vsc2UgaWYociE9PWUpY29udGludWU7cmV0dXJuIHQuc2xpY2UoaSxuKX1yZXR1cm4gZj0hMCx0LnNsaWNlKGksbyl9Zm9yKHQuY2hhckNvZGVBdChvLTEpPT09VG8mJi0tbyx0LmNoYXJDb2RlQXQoby0xKT09PU5vJiYtLW87KHI9cygpKSE9PU1vOyl7Zm9yKHZhciBsPVtdO3IhPT13byYmciE9PU1vOylsLnB1c2gocikscj1zKCk7biYmbnVsbD09KGw9bihsLHUrKykpfHxpLnB1c2gobCl9cmV0dXJuIGl9ZnVuY3Rpb24gaShuKXtyZXR1cm4gbi5tYXAobykuam9pbih0KX1mdW5jdGlvbiBvKHQpe3JldHVybiBudWxsPT10PyIiOm4udGVzdCh0Kz0iIik/JyInK3QucmVwbGFjZSgvIi9nLCciIicpKyciJzp0fXJldHVybntwYXJzZTpmdW5jdGlvbih0LG4pe3ZhciBlLGksbz1yKHQsZnVuY3Rpb24odCxyKXtpZihlKXJldHVybiBlKHQsci0xKTtpPXQsZT1uP2Z1bmN0aW9uKHQsbil7dmFyIGU9U28odCk7cmV0dXJuIGZ1bmN0aW9uKHIsaSl7cmV0dXJuIG4oZShyKSxpLHQpfX0odCxuKTpTbyh0KX0pO3JldHVybiBvLmNvbHVtbnM9aXx8W10sb30scGFyc2VSb3dzOnIsZm9ybWF0OmZ1bmN0aW9uKG4sZSl7cmV0dXJuIG51bGw9PWUmJihlPWZ1bmN0aW9uKHQpe3ZhciBuPU9iamVjdC5jcmVhdGUobnVsbCksZT1bXTtyZXR1cm4gdC5mb3JFYWNoKGZ1bmN0aW9uKHQpe2Zvcih2YXIgciBpbiB0KXIgaW4gbnx8ZS5wdXNoKG5bcl09cil9KSxlfShuKSksW2UubWFwKG8pLmpvaW4odCldLmNvbmNhdChuLm1hcChmdW5jdGlvbihuKXtyZXR1cm4gZS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIG8oblt0XSl9KS5qb2luKHQpfSkpLmpvaW4oIlxuIil9LGZvcm1hdFJvd3M6ZnVuY3Rpb24odCl7cmV0dXJuIHQubWFwKGkpLmpvaW4oIlxuIil9fX12YXIga289RW8oIiwiKSxDbz1rby5wYXJzZSxQbz1rby5wYXJzZVJvd3Msem89a28uZm9ybWF0LFJvPWtvLmZvcm1hdFJvd3MsTG89RW8oIlx0IiksRG89TG8ucGFyc2UsVW89TG8ucGFyc2VSb3dzLHFvPUxvLmZvcm1hdCxPbz1Mby5mb3JtYXRSb3dzO2Z1bmN0aW9uIFlvKHQpe2lmKCF0Lm9rKXRocm93IG5ldyBFcnJvcih0LnN0YXR1cysiICIrdC5zdGF0dXNUZXh0KTtyZXR1cm4gdC5ibG9iKCl9ZnVuY3Rpb24gQm8odCl7aWYoIXQub2spdGhyb3cgbmV3IEVycm9yKHQuc3RhdHVzKyIgIit0LnN0YXR1c1RleHQpO3JldHVybiB0LmFycmF5QnVmZmVyKCl9ZnVuY3Rpb24gRm8odCl7aWYoIXQub2spdGhyb3cgbmV3IEVycm9yKHQuc3RhdHVzKyIgIit0LnN0YXR1c1RleHQpO3JldHVybiB0LnRleHQoKX1mdW5jdGlvbiBJbyh0LG4pe3JldHVybiBmZXRjaCh0LG4pLnRoZW4oRm8pfWZ1bmN0aW9uIEhvKHQpe3JldHVybiBmdW5jdGlvbihuLGUscil7cmV0dXJuIDI9PT1hcmd1bWVudHMubGVuZ3RoJiYiZnVuY3Rpb24iPT10eXBlb2YgZSYmKHI9ZSxlPXZvaWQgMCksSW8obixlKS50aGVuKGZ1bmN0aW9uKG4pe3JldHVybiB0KG4scil9KX19dmFyIGpvPUhvKENvKSxYbz1IbyhEbyk7ZnVuY3Rpb24gR28odCl7aWYoIXQub2spdGhyb3cgbmV3IEVycm9yKHQuc3RhdHVzKyIgIit0LnN0YXR1c1RleHQpO3JldHVybiB0Lmpzb24oKX1mdW5jdGlvbiBWbyh0KXtyZXR1cm4gZnVuY3Rpb24obixlKXtyZXR1cm4gSW8obixlKS50aGVuKGZ1bmN0aW9uKG4pe3JldHVybihuZXcgRE9NUGFyc2VyKS5wYXJzZUZyb21TdHJpbmcobix0KX0pfX12YXIgJG89Vm8oImFwcGxpY2F0aW9uL3htbCIpLFdvPVZvKCJ0ZXh0L2h0bWwiKSxabz1WbygiaW1hZ2Uvc3ZnK3htbCIpO2Z1bmN0aW9uIFFvKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX1mdW5jdGlvbiBKbygpe3JldHVybiAxZS02KihNYXRoLnJhbmRvbSgpLS41KX1mdW5jdGlvbiBLbyh0LG4sZSxyKXtpZihpc05hTihuKXx8aXNOYU4oZSkpcmV0dXJuIHQ7dmFyIGksbyxhLHUsZixjLHMsbCxoLGQ9dC5fcm9vdCxwPXtkYXRhOnJ9LHY9dC5feDAsZz10Ll95MCx5PXQuX3gxLF89dC5feTE7aWYoIWQpcmV0dXJuIHQuX3Jvb3Q9cCx0O2Zvcig7ZC5sZW5ndGg7KWlmKChjPW4+PShvPSh2K3kpLzIpKT92PW86eT1vLChzPWU+PShhPShnK18pLzIpKT9nPWE6Xz1hLGk9ZCwhKGQ9ZFtsPXM8PDF8Y10pKXJldHVybiBpW2xdPXAsdDtpZih1PSt0Ll94LmNhbGwobnVsbCxkLmRhdGEpLGY9K3QuX3kuY2FsbChudWxsLGQuZGF0YSksbj09PXUmJmU9PT1mKXJldHVybiBwLm5leHQ9ZCxpP2lbbF09cDp0Ll9yb290PXAsdDtkb3tpPWk/aVtsXT1uZXcgQXJyYXkoNCk6dC5fcm9vdD1uZXcgQXJyYXkoNCksKGM9bj49KG89KHYreSkvMikpP3Y9bzp5PW8sKHM9ZT49KGE9KGcrXykvMikpP2c9YTpfPWF9d2hpbGUoKGw9czw8MXxjKT09KGg9KGY+PWEpPDwxfHU+PW8pKTtyZXR1cm4gaVtoXT1kLGlbbF09cCx0fWZ1bmN0aW9uIHRhKHQsbixlLHIsaSl7dGhpcy5ub2RlPXQsdGhpcy54MD1uLHRoaXMueTA9ZSx0aGlzLngxPXIsdGhpcy55MT1pfWZ1bmN0aW9uIG5hKHQpe3JldHVybiB0WzBdfWZ1bmN0aW9uIGVhKHQpe3JldHVybiB0WzFdfWZ1bmN0aW9uIHJhKHQsbixlKXt2YXIgcj1uZXcgaWEobnVsbD09bj9uYTpuLG51bGw9PWU/ZWE6ZSxOYU4sTmFOLE5hTixOYU4pO3JldHVybiBudWxsPT10P3I6ci5hZGRBbGwodCl9ZnVuY3Rpb24gaWEodCxuLGUscixpLG8pe3RoaXMuX3g9dCx0aGlzLl95PW4sdGhpcy5feDA9ZSx0aGlzLl95MD1yLHRoaXMuX3gxPWksdGhpcy5feTE9byx0aGlzLl9yb290PXZvaWQgMH1mdW5jdGlvbiBvYSh0KXtmb3IodmFyIG49e2RhdGE6dC5kYXRhfSxlPW47dD10Lm5leHQ7KWU9ZS5uZXh0PXtkYXRhOnQuZGF0YX07cmV0dXJuIG59dmFyIGFhPXJhLnByb3RvdHlwZT1pYS5wcm90b3R5cGU7ZnVuY3Rpb24gdWEodCl7cmV0dXJuIHQueCt0LnZ4fWZ1bmN0aW9uIGZhKHQpe3JldHVybiB0LnkrdC52eX1mdW5jdGlvbiBjYSh0KXtyZXR1cm4gdC5pbmRleH1mdW5jdGlvbiBzYSh0LG4pe3ZhciBlPXQuZ2V0KG4pO2lmKCFlKXRocm93IG5ldyBFcnJvcigibWlzc2luZzogIituKTtyZXR1cm4gZX1mdW5jdGlvbiBsYSh0KXtyZXR1cm4gdC54fWZ1bmN0aW9uIGhhKHQpe3JldHVybiB0Lnl9YWEuY29weT1mdW5jdGlvbigpe3ZhciB0LG4sZT1uZXcgaWEodGhpcy5feCx0aGlzLl95LHRoaXMuX3gwLHRoaXMuX3kwLHRoaXMuX3gxLHRoaXMuX3kxKSxyPXRoaXMuX3Jvb3Q7aWYoIXIpcmV0dXJuIGU7aWYoIXIubGVuZ3RoKXJldHVybiBlLl9yb290PW9hKHIpLGU7Zm9yKHQ9W3tzb3VyY2U6cix0YXJnZXQ6ZS5fcm9vdD1uZXcgQXJyYXkoNCl9XTtyPXQucG9wKCk7KWZvcih2YXIgaT0wO2k8NDsrK2kpKG49ci5zb3VyY2VbaV0pJiYobi5sZW5ndGg/dC5wdXNoKHtzb3VyY2U6bix0YXJnZXQ6ci50YXJnZXRbaV09bmV3IEFycmF5KDQpfSk6ci50YXJnZXRbaV09b2EobikpO3JldHVybiBlfSxhYS5hZGQ9ZnVuY3Rpb24odCl7dmFyIG49K3RoaXMuX3guY2FsbChudWxsLHQpLGU9K3RoaXMuX3kuY2FsbChudWxsLHQpO3JldHVybiBLbyh0aGlzLmNvdmVyKG4sZSksbixlLHQpfSxhYS5hZGRBbGw9ZnVuY3Rpb24odCl7dmFyIG4sZSxyLGksbz10Lmxlbmd0aCxhPW5ldyBBcnJheShvKSx1PW5ldyBBcnJheShvKSxmPTEvMCxjPTEvMCxzPS0xLzAsbD0tMS8wO2ZvcihlPTA7ZTxvOysrZSlpc05hTihyPSt0aGlzLl94LmNhbGwobnVsbCxuPXRbZV0pKXx8aXNOYU4oaT0rdGhpcy5feS5jYWxsKG51bGwsbikpfHwoYVtlXT1yLHVbZV09aSxyPGYmJihmPXIpLHI+cyYmKHM9ciksaTxjJiYoYz1pKSxpPmwmJihsPWkpKTtmb3IoczxmJiYoZj10aGlzLl94MCxzPXRoaXMuX3gxKSxsPGMmJihjPXRoaXMuX3kwLGw9dGhpcy5feTEpLHRoaXMuY292ZXIoZixjKS5jb3ZlcihzLGwpLGU9MDtlPG87KytlKUtvKHRoaXMsYVtlXSx1W2VdLHRbZV0pO3JldHVybiB0aGlzfSxhYS5jb3Zlcj1mdW5jdGlvbih0LG4pe2lmKGlzTmFOKHQ9K3QpfHxpc05hTihuPStuKSlyZXR1cm4gdGhpczt2YXIgZT10aGlzLl94MCxyPXRoaXMuX3kwLGk9dGhpcy5feDEsbz10aGlzLl95MTtpZihpc05hTihlKSlpPShlPU1hdGguZmxvb3IodCkpKzEsbz0ocj1NYXRoLmZsb29yKG4pKSsxO2Vsc2V7aWYoIShlPnR8fHQ+aXx8cj5ufHxuPm8pKXJldHVybiB0aGlzO3ZhciBhLHUsZj1pLWUsYz10aGlzLl9yb290O3N3aXRjaCh1PShuPChyK28pLzIpPDwxfHQ8KGUraSkvMil7Y2FzZSAwOmRveyhhPW5ldyBBcnJheSg0KSlbdV09YyxjPWF9d2hpbGUobz1yKyhmKj0yKSx0PihpPWUrZil8fG4+byk7YnJlYWs7Y2FzZSAxOmRveyhhPW5ldyBBcnJheSg0KSlbdV09YyxjPWF9d2hpbGUobz1yKyhmKj0yKSwoZT1pLWYpPnR8fG4+byk7YnJlYWs7Y2FzZSAyOmRveyhhPW5ldyBBcnJheSg0KSlbdV09YyxjPWF9d2hpbGUocj1vLShmKj0yKSx0PihpPWUrZil8fHI+bik7YnJlYWs7Y2FzZSAzOmRveyhhPW5ldyBBcnJheSg0KSlbdV09YyxjPWF9d2hpbGUocj1vLShmKj0yKSwoZT1pLWYpPnR8fHI+bil9dGhpcy5fcm9vdCYmdGhpcy5fcm9vdC5sZW5ndGgmJih0aGlzLl9yb290PWMpfXJldHVybiB0aGlzLl94MD1lLHRoaXMuX3kwPXIsdGhpcy5feDE9aSx0aGlzLl95MT1vLHRoaXN9LGFhLmRhdGE9ZnVuY3Rpb24oKXt2YXIgdD1bXTtyZXR1cm4gdGhpcy52aXNpdChmdW5jdGlvbihuKXtpZighbi5sZW5ndGgpZG97dC5wdXNoKG4uZGF0YSl9d2hpbGUobj1uLm5leHQpfSksdH0sYWEuZXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuY292ZXIoK3RbMF1bMF0sK3RbMF1bMV0pLmNvdmVyKCt0WzFdWzBdLCt0WzFdWzFdKTppc05hTih0aGlzLl94MCk/dm9pZCAwOltbdGhpcy5feDAsdGhpcy5feTBdLFt0aGlzLl94MSx0aGlzLl95MV1dfSxhYS5maW5kPWZ1bmN0aW9uKHQsbixlKXt2YXIgcixpLG8sYSx1LGYsYyxzPXRoaXMuX3gwLGw9dGhpcy5feTAsaD10aGlzLl94MSxkPXRoaXMuX3kxLHA9W10sdj10aGlzLl9yb290O2Zvcih2JiZwLnB1c2gobmV3IHRhKHYscyxsLGgsZCkpLG51bGw9PWU/ZT0xLzA6KHM9dC1lLGw9bi1lLGg9dCtlLGQ9bitlLGUqPWUpO2Y9cC5wb3AoKTspaWYoISghKHY9Zi5ub2RlKXx8KGk9Zi54MCk+aHx8KG89Zi55MCk+ZHx8KGE9Zi54MSk8c3x8KHU9Zi55MSk8bCkpaWYodi5sZW5ndGgpe3ZhciBnPShpK2EpLzIseT0obyt1KS8yO3AucHVzaChuZXcgdGEodlszXSxnLHksYSx1KSxuZXcgdGEodlsyXSxpLHksZyx1KSxuZXcgdGEodlsxXSxnLG8sYSx5KSxuZXcgdGEodlswXSxpLG8sZyx5KSksKGM9KG4+PXkpPDwxfHQ+PWcpJiYoZj1wW3AubGVuZ3RoLTFdLHBbcC5sZW5ndGgtMV09cFtwLmxlbmd0aC0xLWNdLHBbcC5sZW5ndGgtMS1jXT1mKX1lbHNle3ZhciBfPXQtK3RoaXMuX3guY2FsbChudWxsLHYuZGF0YSksYj1uLSt0aGlzLl95LmNhbGwobnVsbCx2LmRhdGEpLG09XypfK2IqYjtpZihtPGUpe3ZhciB4PU1hdGguc3FydChlPW0pO3M9dC14LGw9bi14LGg9dCt4LGQ9bit4LHI9di5kYXRhfX1yZXR1cm4gcn0sYWEucmVtb3ZlPWZ1bmN0aW9uKHQpe2lmKGlzTmFOKG89K3RoaXMuX3guY2FsbChudWxsLHQpKXx8aXNOYU4oYT0rdGhpcy5feS5jYWxsKG51bGwsdCkpKXJldHVybiB0aGlzO3ZhciBuLGUscixpLG8sYSx1LGYsYyxzLGwsaCxkPXRoaXMuX3Jvb3QscD10aGlzLl94MCx2PXRoaXMuX3kwLGc9dGhpcy5feDEseT10aGlzLl95MTtpZighZClyZXR1cm4gdGhpcztpZihkLmxlbmd0aClmb3IoOzspe2lmKChjPW8+PSh1PShwK2cpLzIpKT9wPXU6Zz11LChzPWE+PShmPSh2K3kpLzIpKT92PWY6eT1mLG49ZCwhKGQ9ZFtsPXM8PDF8Y10pKXJldHVybiB0aGlzO2lmKCFkLmxlbmd0aClicmVhazsobltsKzEmM118fG5bbCsyJjNdfHxuW2wrMyYzXSkmJihlPW4saD1sKX1mb3IoO2QuZGF0YSE9PXQ7KWlmKHI9ZCwhKGQ9ZC5uZXh0KSlyZXR1cm4gdGhpcztyZXR1cm4oaT1kLm5leHQpJiZkZWxldGUgZC5uZXh0LHI/KGk/ci5uZXh0PWk6ZGVsZXRlIHIubmV4dCx0aGlzKTpuPyhpP25bbF09aTpkZWxldGUgbltsXSwoZD1uWzBdfHxuWzFdfHxuWzJdfHxuWzNdKSYmZD09PShuWzNdfHxuWzJdfHxuWzFdfHxuWzBdKSYmIWQubGVuZ3RoJiYoZT9lW2hdPWQ6dGhpcy5fcm9vdD1kKSx0aGlzKToodGhpcy5fcm9vdD1pLHRoaXMpfSxhYS5yZW1vdmVBbGw9ZnVuY3Rpb24odCl7Zm9yKHZhciBuPTAsZT10Lmxlbmd0aDtuPGU7KytuKXRoaXMucmVtb3ZlKHRbbl0pO3JldHVybiB0aGlzfSxhYS5yb290PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Jvb3R9LGFhLnNpemU9ZnVuY3Rpb24oKXt2YXIgdD0wO3JldHVybiB0aGlzLnZpc2l0KGZ1bmN0aW9uKG4pe2lmKCFuLmxlbmd0aClkb3srK3R9d2hpbGUobj1uLm5leHQpfSksdH0sYWEudmlzaXQ9ZnVuY3Rpb24odCl7dmFyIG4sZSxyLGksbyxhLHU9W10sZj10aGlzLl9yb290O2ZvcihmJiZ1LnB1c2gobmV3IHRhKGYsdGhpcy5feDAsdGhpcy5feTAsdGhpcy5feDEsdGhpcy5feTEpKTtuPXUucG9wKCk7KWlmKCF0KGY9bi5ub2RlLHI9bi54MCxpPW4ueTAsbz1uLngxLGE9bi55MSkmJmYubGVuZ3RoKXt2YXIgYz0ocitvKS8yLHM9KGkrYSkvMjsoZT1mWzNdKSYmdS5wdXNoKG5ldyB0YShlLGMscyxvLGEpKSwoZT1mWzJdKSYmdS5wdXNoKG5ldyB0YShlLHIscyxjLGEpKSwoZT1mWzFdKSYmdS5wdXNoKG5ldyB0YShlLGMsaSxvLHMpKSwoZT1mWzBdKSYmdS5wdXNoKG5ldyB0YShlLHIsaSxjLHMpKX1yZXR1cm4gdGhpc30sYWEudmlzaXRBZnRlcj1mdW5jdGlvbih0KXt2YXIgbixlPVtdLHI9W107Zm9yKHRoaXMuX3Jvb3QmJmUucHVzaChuZXcgdGEodGhpcy5fcm9vdCx0aGlzLl94MCx0aGlzLl95MCx0aGlzLl94MSx0aGlzLl95MSkpO249ZS5wb3AoKTspe3ZhciBpPW4ubm9kZTtpZihpLmxlbmd0aCl7dmFyIG8sYT1uLngwLHU9bi55MCxmPW4ueDEsYz1uLnkxLHM9KGErZikvMixsPSh1K2MpLzI7KG89aVswXSkmJmUucHVzaChuZXcgdGEobyxhLHUscyxsKSksKG89aVsxXSkmJmUucHVzaChuZXcgdGEobyxzLHUsZixsKSksKG89aVsyXSkmJmUucHVzaChuZXcgdGEobyxhLGwscyxjKSksKG89aVszXSkmJmUucHVzaChuZXcgdGEobyxzLGwsZixjKSl9ci5wdXNoKG4pfWZvcig7bj1yLnBvcCgpOyl0KG4ubm9kZSxuLngwLG4ueTAsbi54MSxuLnkxKTtyZXR1cm4gdGhpc30sYWEueD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odGhpcy5feD10LHRoaXMpOnRoaXMuX3h9LGFhLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHRoaXMuX3k9dCx0aGlzKTp0aGlzLl95fTt2YXIgZGE9MTAscGE9TWF0aC5QSSooMy1NYXRoLnNxcnQoNSkpO2Z1bmN0aW9uIHZhKHQsbil7aWYoKGU9KHQ9bj90LnRvRXhwb25lbnRpYWwobi0xKTp0LnRvRXhwb25lbnRpYWwoKSkuaW5kZXhPZigiZSIpKTwwKXJldHVybiBudWxsO3ZhciBlLHI9dC5zbGljZSgwLGUpO3JldHVybltyLmxlbmd0aD4xP3JbMF0rci5zbGljZSgyKTpyLCt0LnNsaWNlKGUrMSldfWZ1bmN0aW9uIGdhKHQpe3JldHVybih0PXZhKE1hdGguYWJzKHQpKSk/dFsxXTpOYU59dmFyIHlhLF9hPS9eKD86KC4pPyhbPD49Xl0pKT8oWytcLSggXSk/KFskI10pPygwKT8oXGQrKT8oLCk/KFwuXGQrKT8ofik/KFthLXolXSk/JC9pO2Z1bmN0aW9uIGJhKHQpe3JldHVybiBuZXcgbWEodCl9ZnVuY3Rpb24gbWEodCl7aWYoIShuPV9hLmV4ZWModCkpKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBmb3JtYXQ6ICIrdCk7dmFyIG47dGhpcy5maWxsPW5bMV18fCIgIix0aGlzLmFsaWduPW5bMl18fCI+Iix0aGlzLnNpZ249blszXXx8Ii0iLHRoaXMuc3ltYm9sPW5bNF18fCIiLHRoaXMuemVybz0hIW5bNV0sdGhpcy53aWR0aD1uWzZdJiYrbls2XSx0aGlzLmNvbW1hPSEhbls3XSx0aGlzLnByZWNpc2lvbj1uWzhdJiYrbls4XS5zbGljZSgxKSx0aGlzLnRyaW09ISFuWzldLHRoaXMudHlwZT1uWzEwXXx8IiJ9ZnVuY3Rpb24geGEodCxuKXt2YXIgZT12YSh0LG4pO2lmKCFlKXJldHVybiB0KyIiO3ZhciByPWVbMF0saT1lWzFdO3JldHVybiBpPDA/IjAuIituZXcgQXJyYXkoLWkpLmpvaW4oIjAiKStyOnIubGVuZ3RoPmkrMT9yLnNsaWNlKDAsaSsxKSsiLiIrci5zbGljZShpKzEpOnIrbmV3IEFycmF5KGktci5sZW5ndGgrMikuam9pbigiMCIpfWJhLnByb3RvdHlwZT1tYS5wcm90b3R5cGUsbWEucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmlsbCt0aGlzLmFsaWduK3RoaXMuc2lnbit0aGlzLnN5bWJvbCsodGhpcy56ZXJvPyIwIjoiIikrKG51bGw9PXRoaXMud2lkdGg/IiI6TWF0aC5tYXgoMSwwfHRoaXMud2lkdGgpKSsodGhpcy5jb21tYT8iLCI6IiIpKyhudWxsPT10aGlzLnByZWNpc2lvbj8iIjoiLiIrTWF0aC5tYXgoMCwwfHRoaXMucHJlY2lzaW9uKSkrKHRoaXMudHJpbT8ifiI6IiIpK3RoaXMudHlwZX07dmFyIHdhPXsiJSI6ZnVuY3Rpb24odCxuKXtyZXR1cm4oMTAwKnQpLnRvRml4ZWQobil9LGI6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucm91bmQodCkudG9TdHJpbmcoMil9LGM6ZnVuY3Rpb24odCl7cmV0dXJuIHQrIiJ9LGQ6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucm91bmQodCkudG9TdHJpbmcoMTApfSxlOmZ1bmN0aW9uKHQsbil7cmV0dXJuIHQudG9FeHBvbmVudGlhbChuKX0sZjpmdW5jdGlvbih0LG4pe3JldHVybiB0LnRvRml4ZWQobil9LGc6ZnVuY3Rpb24odCxuKXtyZXR1cm4gdC50b1ByZWNpc2lvbihuKX0sbzpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZCh0KS50b1N0cmluZyg4KX0scDpmdW5jdGlvbih0LG4pe3JldHVybiB4YSgxMDAqdCxuKX0scjp4YSxzOmZ1bmN0aW9uKHQsbil7dmFyIGU9dmEodCxuKTtpZighZSlyZXR1cm4gdCsiIjt2YXIgcj1lWzBdLGk9ZVsxXSxvPWktKHlhPTMqTWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKGkvMykpKSkrMSxhPXIubGVuZ3RoO3JldHVybiBvPT09YT9yOm8+YT9yK25ldyBBcnJheShvLWErMSkuam9pbigiMCIpOm8+MD9yLnNsaWNlKDAsbykrIi4iK3Iuc2xpY2Uobyk6IjAuIituZXcgQXJyYXkoMS1vKS5qb2luKCIwIikrdmEodCxNYXRoLm1heCgwLG4rby0xKSlbMF19LFg6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucm91bmQodCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCl9LHg6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucm91bmQodCkudG9TdHJpbmcoMTYpfX07ZnVuY3Rpb24gTWEodCl7cmV0dXJuIHR9dmFyIEFhLFRhPVsieSIsInoiLCJhIiwiZiIsInAiLCJuIiwiwrUiLCJtIiwiIiwiayIsIk0iLCJHIiwiVCIsIlAiLCJFIiwiWiIsIlkiXTtmdW5jdGlvbiBOYSh0KXt2YXIgbixlLHI9dC5ncm91cGluZyYmdC50aG91c2FuZHM/KG49dC5ncm91cGluZyxlPXQudGhvdXNhbmRzLGZ1bmN0aW9uKHQscil7Zm9yKHZhciBpPXQubGVuZ3RoLG89W10sYT0wLHU9blswXSxmPTA7aT4wJiZ1PjAmJihmK3UrMT5yJiYodT1NYXRoLm1heCgxLHItZikpLG8ucHVzaCh0LnN1YnN0cmluZyhpLT11LGkrdSkpLCEoKGYrPXUrMSk+cikpOyl1PW5bYT0oYSsxKSVuLmxlbmd0aF07cmV0dXJuIG8ucmV2ZXJzZSgpLmpvaW4oZSl9KTpNYSxpPXQuY3VycmVuY3ksbz10LmRlY2ltYWwsYT10Lm51bWVyYWxzP2Z1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gbi5yZXBsYWNlKC9bMC05XS9nLGZ1bmN0aW9uKG4pe3JldHVybiB0WytuXX0pfX0odC5udW1lcmFscyk6TWEsdT10LnBlcmNlbnR8fCIlIjtmdW5jdGlvbiBmKHQpe3ZhciBuPSh0PWJhKHQpKS5maWxsLGU9dC5hbGlnbixmPXQuc2lnbixjPXQuc3ltYm9sLHM9dC56ZXJvLGw9dC53aWR0aCxoPXQuY29tbWEsZD10LnByZWNpc2lvbixwPXQudHJpbSx2PXQudHlwZTsibiI9PT12PyhoPSEwLHY9ImciKTp3YVt2XXx8KG51bGw9PWQmJihkPTEyKSxwPSEwLHY9ImciKSwoc3x8IjAiPT09biYmIj0iPT09ZSkmJihzPSEwLG49IjAiLGU9Ij0iKTt2YXIgZz0iJCI9PT1jP2lbMF06IiMiPT09YyYmL1tib3hYXS8udGVzdCh2KT8iMCIrdi50b0xvd2VyQ2FzZSgpOiIiLHk9IiQiPT09Yz9pWzFdOi9bJXBdLy50ZXN0KHYpP3U6IiIsXz13YVt2XSxiPS9bZGVmZ3BycyVdLy50ZXN0KHYpO2Z1bmN0aW9uIG0odCl7dmFyIGksdSxjLG09Zyx4PXk7aWYoImMiPT09dil4PV8odCkreCx0PSIiO2Vsc2V7dmFyIHc9KHQ9K3QpPDA7aWYodD1fKE1hdGguYWJzKHQpLGQpLHAmJih0PWZ1bmN0aW9uKHQpe3Q6Zm9yKHZhciBuLGU9dC5sZW5ndGgscj0xLGk9LTE7cjxlOysrcilzd2l0Y2godFtyXSl7Y2FzZSIuIjppPW49cjticmVhaztjYXNlIjAiOjA9PT1pJiYoaT1yKSxuPXI7YnJlYWs7ZGVmYXVsdDppZihpPjApe2lmKCErdFtyXSlicmVhayB0O2k9MH19cmV0dXJuIGk+MD90LnNsaWNlKDAsaSkrdC5zbGljZShuKzEpOnR9KHQpKSx3JiYwPT0rdCYmKHc9ITEpLG09KHc/IigiPT09Zj9mOiItIjoiLSI9PT1mfHwiKCI9PT1mPyIiOmYpK20seD0oInMiPT09dj9UYVs4K3lhLzNdOiIiKSt4Kyh3JiYiKCI9PT1mPyIpIjoiIiksYilmb3IoaT0tMSx1PXQubGVuZ3RoOysraTx1OylpZig0OD4oYz10LmNoYXJDb2RlQXQoaSkpfHxjPjU3KXt4PSg0Nj09PWM/byt0LnNsaWNlKGkrMSk6dC5zbGljZShpKSkreCx0PXQuc2xpY2UoMCxpKTticmVha319aCYmIXMmJih0PXIodCwxLzApKTt2YXIgTT1tLmxlbmd0aCt0Lmxlbmd0aCt4Lmxlbmd0aCxBPU08bD9uZXcgQXJyYXkobC1NKzEpLmpvaW4obik6IiI7c3dpdGNoKGgmJnMmJih0PXIoQSt0LEEubGVuZ3RoP2wteC5sZW5ndGg6MS8wKSxBPSIiKSxlKXtjYXNlIjwiOnQ9bSt0K3grQTticmVhaztjYXNlIj0iOnQ9bStBK3QreDticmVhaztjYXNlIl4iOnQ9QS5zbGljZSgwLE09QS5sZW5ndGg+PjEpK20rdCt4K0Euc2xpY2UoTSk7YnJlYWs7ZGVmYXVsdDp0PUErbSt0K3h9cmV0dXJuIGEodCl9cmV0dXJuIGQ9bnVsbD09ZD82Oi9bZ3Byc10vLnRlc3Qodik/TWF0aC5tYXgoMSxNYXRoLm1pbigyMSxkKSk6TWF0aC5tYXgoMCxNYXRoLm1pbigyMCxkKSksbS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0KyIifSxtfXJldHVybntmb3JtYXQ6Zixmb3JtYXRQcmVmaXg6ZnVuY3Rpb24odCxuKXt2YXIgZT1mKCgodD1iYSh0KSkudHlwZT0iZiIsdCkpLHI9MypNYXRoLm1heCgtOCxNYXRoLm1pbig4LE1hdGguZmxvb3IoZ2EobikvMykpKSxpPU1hdGgucG93KDEwLC1yKSxvPVRhWzgrci8zXTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGUoaSp0KStvfX19fWZ1bmN0aW9uIFNhKG4pe3JldHVybiBBYT1OYShuKSx0LmZvcm1hdD1BYS5mb3JtYXQsdC5mb3JtYXRQcmVmaXg9QWEuZm9ybWF0UHJlZml4LEFhfWZ1bmN0aW9uIEVhKHQpe3JldHVybiBNYXRoLm1heCgwLC1nYShNYXRoLmFicyh0KSkpfWZ1bmN0aW9uIGthKHQsbil7cmV0dXJuIE1hdGgubWF4KDAsMypNYXRoLm1heCgtOCxNYXRoLm1pbig4LE1hdGguZmxvb3IoZ2EobikvMykpKS1nYShNYXRoLmFicyh0KSkpfWZ1bmN0aW9uIENhKHQsbil7cmV0dXJuIHQ9TWF0aC5hYnModCksbj1NYXRoLmFicyhuKS10LE1hdGgubWF4KDAsZ2EobiktZ2EodCkpKzF9ZnVuY3Rpb24gUGEoKXtyZXR1cm4gbmV3IHphfWZ1bmN0aW9uIHphKCl7dGhpcy5yZXNldCgpfVNhKHtkZWNpbWFsOiIuIix0aG91c2FuZHM6IiwiLGdyb3VwaW5nOlszXSxjdXJyZW5jeTpbIiQiLCIiXX0pLHphLnByb3RvdHlwZT17Y29uc3RydWN0b3I6emEscmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLnM9dGhpcy50PTB9LGFkZDpmdW5jdGlvbih0KXtMYShSYSx0LHRoaXMudCksTGEodGhpcyxSYS5zLHRoaXMucyksdGhpcy5zP3RoaXMudCs9UmEudDp0aGlzLnM9UmEudH0sdmFsdWVPZjpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN9fTt2YXIgUmE9bmV3IHphO2Z1bmN0aW9uIExhKHQsbixlKXt2YXIgcj10LnM9bitlLGk9ci1uLG89ci1pO3QudD1uLW8rKGUtaSl9dmFyIERhPTFlLTYsVWE9MWUtMTIscWE9TWF0aC5QSSxPYT1xYS8yLFlhPXFhLzQsQmE9MipxYSxGYT0xODAvcWEsSWE9cWEvMTgwLEhhPU1hdGguYWJzLGphPU1hdGguYXRhbixYYT1NYXRoLmF0YW4yLEdhPU1hdGguY29zLFZhPU1hdGguY2VpbCwkYT1NYXRoLmV4cCxXYT1NYXRoLmxvZyxaYT1NYXRoLnBvdyxRYT1NYXRoLnNpbixKYT1NYXRoLnNpZ258fGZ1bmN0aW9uKHQpe3JldHVybiB0PjA/MTp0PDA/LTE6MH0sS2E9TWF0aC5zcXJ0LHR1PU1hdGgudGFuO2Z1bmN0aW9uIG51KHQpe3JldHVybiB0PjE/MDp0PC0xP3FhOk1hdGguYWNvcyh0KX1mdW5jdGlvbiBldSh0KXtyZXR1cm4gdD4xP09hOnQ8LTE/LU9hOk1hdGguYXNpbih0KX1mdW5jdGlvbiBydSh0KXtyZXR1cm4odD1RYSh0LzIpKSp0fWZ1bmN0aW9uIGl1KCl7fWZ1bmN0aW9uIG91KHQsbil7dCYmdXUuaGFzT3duUHJvcGVydHkodC50eXBlKSYmdXVbdC50eXBlXSh0LG4pfXZhciBhdT17RmVhdHVyZTpmdW5jdGlvbih0LG4pe291KHQuZ2VvbWV0cnksbil9LEZlYXR1cmVDb2xsZWN0aW9uOmZ1bmN0aW9uKHQsbil7Zm9yKHZhciBlPXQuZmVhdHVyZXMscj0tMSxpPWUubGVuZ3RoOysrcjxpOylvdShlW3JdLmdlb21ldHJ5LG4pfX0sdXU9e1NwaGVyZTpmdW5jdGlvbih0LG4pe24uc3BoZXJlKCl9LFBvaW50OmZ1bmN0aW9uKHQsbil7dD10LmNvb3JkaW5hdGVzLG4ucG9pbnQodFswXSx0WzFdLHRbMl0pfSxNdWx0aVBvaW50OmZ1bmN0aW9uKHQsbil7Zm9yKHZhciBlPXQuY29vcmRpbmF0ZXMscj0tMSxpPWUubGVuZ3RoOysrcjxpOyl0PWVbcl0sbi5wb2ludCh0WzBdLHRbMV0sdFsyXSl9LExpbmVTdHJpbmc6ZnVuY3Rpb24odCxuKXtmdSh0LmNvb3JkaW5hdGVzLG4sMCl9LE11bHRpTGluZVN0cmluZzpmdW5jdGlvbih0LG4pe2Zvcih2YXIgZT10LmNvb3JkaW5hdGVzLHI9LTEsaT1lLmxlbmd0aDsrK3I8aTspZnUoZVtyXSxuLDApfSxQb2x5Z29uOmZ1bmN0aW9uKHQsbil7Y3UodC5jb29yZGluYXRlcyxuKX0sTXVsdGlQb2x5Z29uOmZ1bmN0aW9uKHQsbil7Zm9yKHZhciBlPXQuY29vcmRpbmF0ZXMscj0tMSxpPWUubGVuZ3RoOysrcjxpOyljdShlW3JdLG4pfSxHZW9tZXRyeUNvbGxlY3Rpb246ZnVuY3Rpb24odCxuKXtmb3IodmFyIGU9dC5nZW9tZXRyaWVzLHI9LTEsaT1lLmxlbmd0aDsrK3I8aTspb3UoZVtyXSxuKX19O2Z1bmN0aW9uIGZ1KHQsbixlKXt2YXIgcixpPS0xLG89dC5sZW5ndGgtZTtmb3Iobi5saW5lU3RhcnQoKTsrK2k8bzspcj10W2ldLG4ucG9pbnQoclswXSxyWzFdLHJbMl0pO24ubGluZUVuZCgpfWZ1bmN0aW9uIGN1KHQsbil7dmFyIGU9LTEscj10Lmxlbmd0aDtmb3Iobi5wb2x5Z29uU3RhcnQoKTsrK2U8cjspZnUodFtlXSxuLDEpO24ucG9seWdvbkVuZCgpfWZ1bmN0aW9uIHN1KHQsbil7dCYmYXUuaGFzT3duUHJvcGVydHkodC50eXBlKT9hdVt0LnR5cGVdKHQsbik6b3UodCxuKX12YXIgbHUsaHUsZHUscHUsdnUsZ3U9UGEoKSx5dT1QYSgpLF91PXtwb2ludDppdSxsaW5lU3RhcnQ6aXUsbGluZUVuZDppdSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtndS5yZXNldCgpLF91LmxpbmVTdGFydD1idSxfdS5saW5lRW5kPW11fSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dmFyIHQ9K2d1O3l1LmFkZCh0PDA/QmErdDp0KSx0aGlzLmxpbmVTdGFydD10aGlzLmxpbmVFbmQ9dGhpcy5wb2ludD1pdX0sc3BoZXJlOmZ1bmN0aW9uKCl7eXUuYWRkKEJhKX19O2Z1bmN0aW9uIGJ1KCl7X3UucG9pbnQ9eHV9ZnVuY3Rpb24gbXUoKXt3dShsdSxodSl9ZnVuY3Rpb24geHUodCxuKXtfdS5wb2ludD13dSxsdT10LGh1PW4sZHU9dCo9SWEscHU9R2Eobj0obio9SWEpLzIrWWEpLHZ1PVFhKG4pfWZ1bmN0aW9uIHd1KHQsbil7dmFyIGU9KHQqPUlhKS1kdSxyPWU+PTA/MTotMSxpPXIqZSxvPUdhKG49KG4qPUlhKS8yK1lhKSxhPVFhKG4pLHU9dnUqYSxmPXB1Km8rdSpHYShpKSxjPXUqcipRYShpKTtndS5hZGQoWGEoYyxmKSksZHU9dCxwdT1vLHZ1PWF9ZnVuY3Rpb24gTXUodCl7cmV0dXJuW1hhKHRbMV0sdFswXSksZXUodFsyXSldfWZ1bmN0aW9uIEF1KHQpe3ZhciBuPXRbMF0sZT10WzFdLHI9R2EoZSk7cmV0dXJuW3IqR2EobikscipRYShuKSxRYShlKV19ZnVuY3Rpb24gVHUodCxuKXtyZXR1cm4gdFswXSpuWzBdK3RbMV0qblsxXSt0WzJdKm5bMl19ZnVuY3Rpb24gTnUodCxuKXtyZXR1cm5bdFsxXSpuWzJdLXRbMl0qblsxXSx0WzJdKm5bMF0tdFswXSpuWzJdLHRbMF0qblsxXS10WzFdKm5bMF1dfWZ1bmN0aW9uIFN1KHQsbil7dFswXSs9blswXSx0WzFdKz1uWzFdLHRbMl0rPW5bMl19ZnVuY3Rpb24gRXUodCxuKXtyZXR1cm5bdFswXSpuLHRbMV0qbix0WzJdKm5dfWZ1bmN0aW9uIGt1KHQpe3ZhciBuPUthKHRbMF0qdFswXSt0WzFdKnRbMV0rdFsyXSp0WzJdKTt0WzBdLz1uLHRbMV0vPW4sdFsyXS89bn12YXIgQ3UsUHUsenUsUnUsTHUsRHUsVXUscXUsT3UsWXUsQnUsRnUsSXUsSHUsanUsWHUsR3UsVnUsJHUsV3UsWnUsUXUsSnUsS3UsdGYsbmYsZWY9UGEoKSxyZj17cG9pbnQ6b2YsbGluZVN0YXJ0OnVmLGxpbmVFbmQ6ZmYscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7cmYucG9pbnQ9Y2YscmYubGluZVN0YXJ0PXNmLHJmLmxpbmVFbmQ9bGYsZWYucmVzZXQoKSxfdS5wb2x5Z29uU3RhcnQoKX0scG9seWdvbkVuZDpmdW5jdGlvbigpe191LnBvbHlnb25FbmQoKSxyZi5wb2ludD1vZixyZi5saW5lU3RhcnQ9dWYscmYubGluZUVuZD1mZixndTwwPyhDdT0tKHp1PTE4MCksUHU9LShSdT05MCkpOmVmPkRhP1J1PTkwOmVmPC1EYSYmKFB1PS05MCksWXVbMF09Q3UsWXVbMV09enV9fTtmdW5jdGlvbiBvZih0LG4pe091LnB1c2goWXU9W0N1PXQsenU9dF0pLG48UHUmJihQdT1uKSxuPlJ1JiYoUnU9bil9ZnVuY3Rpb24gYWYodCxuKXt2YXIgZT1BdShbdCpJYSxuKklhXSk7aWYocXUpe3ZhciByPU51KHF1LGUpLGk9TnUoW3JbMV0sLXJbMF0sMF0scik7a3UoaSksaT1NdShpKTt2YXIgbyxhPXQtTHUsdT1hPjA/MTotMSxmPWlbMF0qRmEqdSxjPUhhKGEpPjE4MDtjXih1Kkx1PGYmJmY8dSp0KT8obz1pWzFdKkZhKT5SdSYmKFJ1PW8pOmNeKHUqTHU8KGY9KGYrMzYwKSUzNjAtMTgwKSYmZjx1KnQpPyhvPS1pWzFdKkZhKTxQdSYmKFB1PW8pOihuPFB1JiYoUHU9biksbj5SdSYmKFJ1PW4pKSxjP3Q8THU/aGYoQ3UsdCk+aGYoQ3UsenUpJiYoenU9dCk6aGYodCx6dSk+aGYoQ3UsenUpJiYoQ3U9dCk6enU+PUN1Pyh0PEN1JiYoQ3U9dCksdD56dSYmKHp1PXQpKTp0Pkx1P2hmKEN1LHQpPmhmKEN1LHp1KSYmKHp1PXQpOmhmKHQsenUpPmhmKEN1LHp1KSYmKEN1PXQpfWVsc2UgT3UucHVzaChZdT1bQ3U9dCx6dT10XSk7bjxQdSYmKFB1PW4pLG4+UnUmJihSdT1uKSxxdT1lLEx1PXR9ZnVuY3Rpb24gdWYoKXtyZi5wb2ludD1hZn1mdW5jdGlvbiBmZigpe1l1WzBdPUN1LFl1WzFdPXp1LHJmLnBvaW50PW9mLHF1PW51bGx9ZnVuY3Rpb24gY2YodCxuKXtpZihxdSl7dmFyIGU9dC1MdTtlZi5hZGQoSGEoZSk+MTgwP2UrKGU+MD8zNjA6LTM2MCk6ZSl9ZWxzZSBEdT10LFV1PW47X3UucG9pbnQodCxuKSxhZih0LG4pfWZ1bmN0aW9uIHNmKCl7X3UubGluZVN0YXJ0KCl9ZnVuY3Rpb24gbGYoKXtjZihEdSxVdSksX3UubGluZUVuZCgpLEhhKGVmKT5EYSYmKEN1PS0oenU9MTgwKSksWXVbMF09Q3UsWXVbMV09enUscXU9bnVsbH1mdW5jdGlvbiBoZih0LG4pe3JldHVybihuLT10KTwwP24rMzYwOm59ZnVuY3Rpb24gZGYodCxuKXtyZXR1cm4gdFswXS1uWzBdfWZ1bmN0aW9uIHBmKHQsbil7cmV0dXJuIHRbMF08PXRbMV0/dFswXTw9biYmbjw9dFsxXTpuPHRbMF18fHRbMV08bn12YXIgdmY9e3NwaGVyZTppdSxwb2ludDpnZixsaW5lU3RhcnQ6X2YsbGluZUVuZDp4Zixwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXt2Zi5saW5lU3RhcnQ9d2YsdmYubGluZUVuZD1NZn0scG9seWdvbkVuZDpmdW5jdGlvbigpe3ZmLmxpbmVTdGFydD1fZix2Zi5saW5lRW5kPXhmfX07ZnVuY3Rpb24gZ2YodCxuKXt0Kj1JYTt2YXIgZT1HYShuKj1JYSk7eWYoZSpHYSh0KSxlKlFhKHQpLFFhKG4pKX1mdW5jdGlvbiB5Zih0LG4sZSl7SXUrPSh0LUl1KS8rK0J1LEh1Kz0obi1IdSkvQnUsanUrPShlLWp1KS9CdX1mdW5jdGlvbiBfZigpe3ZmLnBvaW50PWJmfWZ1bmN0aW9uIGJmKHQsbil7dCo9SWE7dmFyIGU9R2Eobio9SWEpO0t1PWUqR2EodCksdGY9ZSpRYSh0KSxuZj1RYShuKSx2Zi5wb2ludD1tZix5ZihLdSx0ZixuZil9ZnVuY3Rpb24gbWYodCxuKXt0Kj1JYTt2YXIgZT1HYShuKj1JYSkscj1lKkdhKHQpLGk9ZSpRYSh0KSxvPVFhKG4pLGE9WGEoS2EoKGE9dGYqby1uZippKSphKyhhPW5mKnItS3UqbykqYSsoYT1LdSppLXRmKnIpKmEpLEt1KnIrdGYqaStuZipvKTtGdSs9YSxYdSs9YSooS3UrKEt1PXIpKSxHdSs9YSoodGYrKHRmPWkpKSxWdSs9YSoobmYrKG5mPW8pKSx5ZihLdSx0ZixuZil9ZnVuY3Rpb24geGYoKXt2Zi5wb2ludD1nZn1mdW5jdGlvbiB3Zigpe3ZmLnBvaW50PUFmfWZ1bmN0aW9uIE1mKCl7VGYoUXUsSnUpLHZmLnBvaW50PWdmfWZ1bmN0aW9uIEFmKHQsbil7UXU9dCxKdT1uLHQqPUlhLG4qPUlhLHZmLnBvaW50PVRmO3ZhciBlPUdhKG4pO0t1PWUqR2EodCksdGY9ZSpRYSh0KSxuZj1RYShuKSx5ZihLdSx0ZixuZil9ZnVuY3Rpb24gVGYodCxuKXt0Kj1JYTt2YXIgZT1HYShuKj1JYSkscj1lKkdhKHQpLGk9ZSpRYSh0KSxvPVFhKG4pLGE9dGYqby1uZippLHU9bmYqci1LdSpvLGY9S3UqaS10ZipyLGM9S2EoYSphK3UqdStmKmYpLHM9ZXUoYyksbD1jJiYtcy9jOyR1Kz1sKmEsV3UrPWwqdSxadSs9bCpmLEZ1Kz1zLFh1Kz1zKihLdSsoS3U9cikpLEd1Kz1zKih0ZisodGY9aSkpLFZ1Kz1zKihuZisobmY9bykpLHlmKEt1LHRmLG5mKX1mdW5jdGlvbiBOZih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24gU2YodCxuKXtmdW5jdGlvbiBlKGUscil7cmV0dXJuIGU9dChlLHIpLG4oZVswXSxlWzFdKX1yZXR1cm4gdC5pbnZlcnQmJm4uaW52ZXJ0JiYoZS5pbnZlcnQ9ZnVuY3Rpb24oZSxyKXtyZXR1cm4oZT1uLmludmVydChlLHIpKSYmdC5pbnZlcnQoZVswXSxlWzFdKX0pLGV9ZnVuY3Rpb24gRWYodCxuKXtyZXR1cm5bdD5xYT90LUJhOnQ8LXFhP3QrQmE6dCxuXX1mdW5jdGlvbiBrZih0LG4sZSl7cmV0dXJuKHQlPUJhKT9ufHxlP1NmKFBmKHQpLHpmKG4sZSkpOlBmKHQpOm58fGU/emYobixlKTpFZn1mdW5jdGlvbiBDZih0KXtyZXR1cm4gZnVuY3Rpb24obixlKXtyZXR1cm5bKG4rPXQpPnFhP24tQmE6bjwtcWE/bitCYTpuLGVdfX1mdW5jdGlvbiBQZih0KXt2YXIgbj1DZih0KTtyZXR1cm4gbi5pbnZlcnQ9Q2YoLXQpLG59ZnVuY3Rpb24gemYodCxuKXt2YXIgZT1HYSh0KSxyPVFhKHQpLGk9R2Eobiksbz1RYShuKTtmdW5jdGlvbiBhKHQsbil7dmFyIGE9R2EobiksdT1HYSh0KSphLGY9UWEodCkqYSxjPVFhKG4pLHM9YyplK3UqcjtyZXR1cm5bWGEoZippLXMqbyx1KmUtYypyKSxldShzKmkrZipvKV19cmV0dXJuIGEuaW52ZXJ0PWZ1bmN0aW9uKHQsbil7dmFyIGE9R2EobiksdT1HYSh0KSphLGY9UWEodCkqYSxjPVFhKG4pLHM9YyppLWYqbztyZXR1cm5bWGEoZippK2Mqbyx1KmUrcypyKSxldShzKmUtdSpyKV19LGF9ZnVuY3Rpb24gUmYodCl7ZnVuY3Rpb24gbihuKXtyZXR1cm4obj10KG5bMF0qSWEsblsxXSpJYSkpWzBdKj1GYSxuWzFdKj1GYSxufXJldHVybiB0PWtmKHRbMF0qSWEsdFsxXSpJYSx0Lmxlbmd0aD4yP3RbMl0qSWE6MCksbi5pbnZlcnQ9ZnVuY3Rpb24obil7cmV0dXJuKG49dC5pbnZlcnQoblswXSpJYSxuWzFdKklhKSlbMF0qPUZhLG5bMV0qPUZhLG59LG59ZnVuY3Rpb24gTGYodCxuLGUscixpLG8pe2lmKGUpe3ZhciBhPUdhKG4pLHU9UWEobiksZj1yKmU7bnVsbD09aT8oaT1uK3IqQmEsbz1uLWYvMik6KGk9RGYoYSxpKSxvPURmKGEsbyksKHI+MD9pPG86aT5vKSYmKGkrPXIqQmEpKTtmb3IodmFyIGMscz1pO3I+MD9zPm86czxvO3MtPWYpYz1NdShbYSwtdSpHYShzKSwtdSpRYShzKV0pLHQucG9pbnQoY1swXSxjWzFdKX19ZnVuY3Rpb24gRGYodCxuKXsobj1BdShuKSlbMF0tPXQsa3Uobik7dmFyIGU9bnUoLW5bMV0pO3JldHVybigoLW5bMl08MD8tZTplKStCYS1EYSklQmF9ZnVuY3Rpb24gVWYoKXt2YXIgdCxuPVtdO3JldHVybntwb2ludDpmdW5jdGlvbihuLGUpe3QucHVzaChbbixlXSl9LGxpbmVTdGFydDpmdW5jdGlvbigpe24ucHVzaCh0PVtdKX0sbGluZUVuZDppdSxyZWpvaW46ZnVuY3Rpb24oKXtuLmxlbmd0aD4xJiZuLnB1c2gobi5wb3AoKS5jb25jYXQobi5zaGlmdCgpKSl9LHJlc3VsdDpmdW5jdGlvbigpe3ZhciBlPW47cmV0dXJuIG49W10sdD1udWxsLGV9fX1mdW5jdGlvbiBxZih0LG4pe3JldHVybiBIYSh0WzBdLW5bMF0pPERhJiZIYSh0WzFdLW5bMV0pPERhfWZ1bmN0aW9uIE9mKHQsbixlLHIpe3RoaXMueD10LHRoaXMuej1uLHRoaXMubz1lLHRoaXMuZT1yLHRoaXMudj0hMSx0aGlzLm49dGhpcy5wPW51bGx9ZnVuY3Rpb24gWWYodCxuLGUscixpKXt2YXIgbyxhLHU9W10sZj1bXTtpZih0LmZvckVhY2goZnVuY3Rpb24odCl7aWYoISgobj10Lmxlbmd0aC0xKTw9MCkpe3ZhciBuLGUscj10WzBdLGE9dFtuXTtpZihxZihyLGEpKXtmb3IoaS5saW5lU3RhcnQoKSxvPTA7bzxuOysrbylpLnBvaW50KChyPXRbb10pWzBdLHJbMV0pO2kubGluZUVuZCgpfWVsc2UgdS5wdXNoKGU9bmV3IE9mKHIsdCxudWxsLCEwKSksZi5wdXNoKGUubz1uZXcgT2YocixudWxsLGUsITEpKSx1LnB1c2goZT1uZXcgT2YoYSx0LG51bGwsITEpKSxmLnB1c2goZS5vPW5ldyBPZihhLG51bGwsZSwhMCkpfX0pLHUubGVuZ3RoKXtmb3IoZi5zb3J0KG4pLEJmKHUpLEJmKGYpLG89MCxhPWYubGVuZ3RoO288YTsrK28pZltvXS5lPWU9IWU7Zm9yKHZhciBjLHMsbD11WzBdOzspe2Zvcih2YXIgaD1sLGQ9ITA7aC52OylpZigoaD1oLm4pPT09bClyZXR1cm47Yz1oLnosaS5saW5lU3RhcnQoKTtkb3tpZihoLnY9aC5vLnY9ITAsaC5lKXtpZihkKWZvcihvPTAsYT1jLmxlbmd0aDtvPGE7KytvKWkucG9pbnQoKHM9Y1tvXSlbMF0sc1sxXSk7ZWxzZSByKGgueCxoLm4ueCwxLGkpO2g9aC5ufWVsc2V7aWYoZClmb3IoYz1oLnAueixvPWMubGVuZ3RoLTE7bz49MDstLW8paS5wb2ludCgocz1jW29dKVswXSxzWzFdKTtlbHNlIHIoaC54LGgucC54LC0xLGkpO2g9aC5wfWM9KGg9aC5vKS56LGQ9IWR9d2hpbGUoIWgudik7aS5saW5lRW5kKCl9fX1mdW5jdGlvbiBCZih0KXtpZihuPXQubGVuZ3RoKXtmb3IodmFyIG4sZSxyPTAsaT10WzBdOysrcjxuOylpLm49ZT10W3JdLGUucD1pLGk9ZTtpLm49ZT10WzBdLGUucD1pfX1FZi5pbnZlcnQ9RWY7dmFyIEZmPVBhKCk7ZnVuY3Rpb24gSWYodCxuKXt2YXIgZT1uWzBdLHI9blsxXSxpPVFhKHIpLG89W1FhKGUpLC1HYShlKSwwXSxhPTAsdT0wO0ZmLnJlc2V0KCksMT09PWk/cj1PYStEYTotMT09PWkmJihyPS1PYS1EYSk7Zm9yKHZhciBmPTAsYz10Lmxlbmd0aDtmPGM7KytmKWlmKGw9KHM9dFtmXSkubGVuZ3RoKWZvcih2YXIgcyxsLGg9c1tsLTFdLGQ9aFswXSxwPWhbMV0vMitZYSx2PVFhKHApLGc9R2EocCkseT0wO3k8bDsrK3ksZD1iLHY9eCxnPXcsaD1fKXt2YXIgXz1zW3ldLGI9X1swXSxtPV9bMV0vMitZYSx4PVFhKG0pLHc9R2EobSksTT1iLWQsQT1NPj0wPzE6LTEsVD1BKk0sTj1UPnFhLFM9dip4O2lmKEZmLmFkZChYYShTKkEqUWEoVCksZyp3K1MqR2EoVCkpKSxhKz1OP00rQSpCYTpNLE5eZD49ZV5iPj1lKXt2YXIgRT1OdShBdShoKSxBdShfKSk7a3UoRSk7dmFyIGs9TnUobyxFKTtrdShrKTt2YXIgQz0oTl5NPj0wPy0xOjEpKmV1KGtbMl0pOyhyPkN8fHI9PT1DJiYoRVswXXx8RVsxXSkpJiYodSs9Tl5NPj0wPzE6LTEpfX1yZXR1cm4oYTwtRGF8fGE8RGEmJkZmPC1EYSleMSZ1fWZ1bmN0aW9uIEhmKHQsbixlLHIpe3JldHVybiBmdW5jdGlvbihpKXt2YXIgbyxhLHUsZj1uKGkpLGM9VWYoKSxzPW4oYyksbD0hMSxoPXtwb2ludDpkLGxpbmVTdGFydDp2LGxpbmVFbmQ6Zyxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtoLnBvaW50PXksaC5saW5lU3RhcnQ9XyxoLmxpbmVFbmQ9YixhPVtdLG89W119LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtoLnBvaW50PWQsaC5saW5lU3RhcnQ9dixoLmxpbmVFbmQ9ZyxhPU4oYSk7dmFyIHQ9SWYobyxyKTthLmxlbmd0aD8obHx8KGkucG9seWdvblN0YXJ0KCksbD0hMCksWWYoYSxYZix0LGUsaSkpOnQmJihsfHwoaS5wb2x5Z29uU3RhcnQoKSxsPSEwKSxpLmxpbmVTdGFydCgpLGUobnVsbCxudWxsLDEsaSksaS5saW5lRW5kKCkpLGwmJihpLnBvbHlnb25FbmQoKSxsPSExKSxhPW89bnVsbH0sc3BoZXJlOmZ1bmN0aW9uKCl7aS5wb2x5Z29uU3RhcnQoKSxpLmxpbmVTdGFydCgpLGUobnVsbCxudWxsLDEsaSksaS5saW5lRW5kKCksaS5wb2x5Z29uRW5kKCl9fTtmdW5jdGlvbiBkKG4sZSl7dChuLGUpJiZpLnBvaW50KG4sZSl9ZnVuY3Rpb24gcCh0LG4pe2YucG9pbnQodCxuKX1mdW5jdGlvbiB2KCl7aC5wb2ludD1wLGYubGluZVN0YXJ0KCl9ZnVuY3Rpb24gZygpe2gucG9pbnQ9ZCxmLmxpbmVFbmQoKX1mdW5jdGlvbiB5KHQsbil7dS5wdXNoKFt0LG5dKSxzLnBvaW50KHQsbil9ZnVuY3Rpb24gXygpe3MubGluZVN0YXJ0KCksdT1bXX1mdW5jdGlvbiBiKCl7eSh1WzBdWzBdLHVbMF1bMV0pLHMubGluZUVuZCgpO3ZhciB0LG4sZSxyLGY9cy5jbGVhbigpLGg9Yy5yZXN1bHQoKSxkPWgubGVuZ3RoO2lmKHUucG9wKCksby5wdXNoKHUpLHU9bnVsbCxkKWlmKDEmZil7aWYoKG49KGU9aFswXSkubGVuZ3RoLTEpPjApe2ZvcihsfHwoaS5wb2x5Z29uU3RhcnQoKSxsPSEwKSxpLmxpbmVTdGFydCgpLHQ9MDt0PG47Kyt0KWkucG9pbnQoKHI9ZVt0XSlbMF0sclsxXSk7aS5saW5lRW5kKCl9fWVsc2UgZD4xJiYyJmYmJmgucHVzaChoLnBvcCgpLmNvbmNhdChoLnNoaWZ0KCkpKSxhLnB1c2goaC5maWx0ZXIoamYpKX1yZXR1cm4gaH19ZnVuY3Rpb24gamYodCl7cmV0dXJuIHQubGVuZ3RoPjF9ZnVuY3Rpb24gWGYodCxuKXtyZXR1cm4oKHQ9dC54KVswXTwwP3RbMV0tT2EtRGE6T2EtdFsxXSktKChuPW4ueClbMF08MD9uWzFdLU9hLURhOk9hLW5bMV0pfXZhciBHZj1IZihmdW5jdGlvbigpe3JldHVybiEwfSxmdW5jdGlvbih0KXt2YXIgbixlPU5hTixyPU5hTixpPU5hTjtyZXR1cm57bGluZVN0YXJ0OmZ1bmN0aW9uKCl7dC5saW5lU3RhcnQoKSxuPTF9LHBvaW50OmZ1bmN0aW9uKG8sYSl7dmFyIHU9bz4wP3FhOi1xYSxmPUhhKG8tZSk7SGEoZi1xYSk8RGE/KHQucG9pbnQoZSxyPShyK2EpLzI+MD9PYTotT2EpLHQucG9pbnQoaSxyKSx0LmxpbmVFbmQoKSx0LmxpbmVTdGFydCgpLHQucG9pbnQodSxyKSx0LnBvaW50KG8sciksbj0wKTppIT09dSYmZj49cWEmJihIYShlLWkpPERhJiYoZS09aSpEYSksSGEoby11KTxEYSYmKG8tPXUqRGEpLHI9ZnVuY3Rpb24odCxuLGUscil7dmFyIGksbyxhPVFhKHQtZSk7cmV0dXJuIEhhKGEpPkRhP2phKChRYShuKSoobz1HYShyKSkqUWEoZSktUWEocikqKGk9R2EobikpKlFhKHQpKS8oaSpvKmEpKToobityKS8yfShlLHIsbyxhKSx0LnBvaW50KGksciksdC5saW5lRW5kKCksdC5saW5lU3RhcnQoKSx0LnBvaW50KHUsciksbj0wKSx0LnBvaW50KGU9byxyPWEpLGk9dX0sbGluZUVuZDpmdW5jdGlvbigpe3QubGluZUVuZCgpLGU9cj1OYU59LGNsZWFuOmZ1bmN0aW9uKCl7cmV0dXJuIDItbn19fSxmdW5jdGlvbih0LG4sZSxyKXt2YXIgaTtpZihudWxsPT10KWk9ZSpPYSxyLnBvaW50KC1xYSxpKSxyLnBvaW50KDAsaSksci5wb2ludChxYSxpKSxyLnBvaW50KHFhLDApLHIucG9pbnQocWEsLWkpLHIucG9pbnQoMCwtaSksci5wb2ludCgtcWEsLWkpLHIucG9pbnQoLXFhLDApLHIucG9pbnQoLXFhLGkpO2Vsc2UgaWYoSGEodFswXS1uWzBdKT5EYSl7dmFyIG89dFswXTxuWzBdP3FhOi1xYTtpPWUqby8yLHIucG9pbnQoLW8saSksci5wb2ludCgwLGkpLHIucG9pbnQobyxpKX1lbHNlIHIucG9pbnQoblswXSxuWzFdKX0sWy1xYSwtT2FdKTtmdW5jdGlvbiBWZih0KXt2YXIgbj1HYSh0KSxlPTYqSWEscj1uPjAsaT1IYShuKT5EYTtmdW5jdGlvbiBvKHQsZSl7cmV0dXJuIEdhKHQpKkdhKGUpPm59ZnVuY3Rpb24gYSh0LGUscil7dmFyIGk9WzEsMCwwXSxvPU51KEF1KHQpLEF1KGUpKSxhPVR1KG8sbyksdT1vWzBdLGY9YS11KnU7aWYoIWYpcmV0dXJuIXImJnQ7dmFyIGM9biphL2Yscz0tbip1L2YsbD1OdShpLG8pLGg9RXUoaSxjKTtTdShoLEV1KG8scykpO3ZhciBkPWwscD1UdShoLGQpLHY9VHUoZCxkKSxnPXAqcC12KihUdShoLGgpLTEpO2lmKCEoZzwwKSl7dmFyIHk9S2EoZyksXz1FdShkLCgtcC15KS92KTtpZihTdShfLGgpLF89TXUoXyksIXIpcmV0dXJuIF87dmFyIGIsbT10WzBdLHg9ZVswXSx3PXRbMV0sTT1lWzFdO3g8bSYmKGI9bSxtPXgseD1iKTt2YXIgQT14LW0sVD1IYShBLXFhKTxEYTtpZighVCYmTTx3JiYoYj13LHc9TSxNPWIpLFR8fEE8RGE/VD93K00+MF5fWzFdPChIYShfWzBdLW0pPERhP3c6TSk6dzw9X1sxXSYmX1sxXTw9TTpBPnFhXihtPD1fWzBdJiZfWzBdPD14KSl7dmFyIE49RXUoZCwoLXAreSkvdik7cmV0dXJuIFN1KE4saCksW18sTXUoTildfX19ZnVuY3Rpb24gdShuLGUpe3ZhciBpPXI/dDpxYS10LG89MDtyZXR1cm4gbjwtaT9vfD0xOm4+aSYmKG98PTIpLGU8LWk/b3w9NDplPmkmJihvfD04KSxvfXJldHVybiBIZihvLGZ1bmN0aW9uKHQpe3ZhciBuLGUsZixjLHM7cmV0dXJue2xpbmVTdGFydDpmdW5jdGlvbigpe2M9Zj0hMSxzPTF9LHBvaW50OmZ1bmN0aW9uKGwsaCl7dmFyIGQscD1bbCxoXSx2PW8obCxoKSxnPXI/dj8wOnUobCxoKTp2P3UobCsobDwwP3FhOi1xYSksaCk6MDtpZighbiYmKGM9Zj12KSYmdC5saW5lU3RhcnQoKSx2IT09ZiYmKCEoZD1hKG4scCkpfHxxZihuLGQpfHxxZihwLGQpKSYmKHBbMF0rPURhLHBbMV0rPURhLHY9byhwWzBdLHBbMV0pKSx2IT09ZilzPTAsdj8odC5saW5lU3RhcnQoKSxkPWEocCxuKSx0LnBvaW50KGRbMF0sZFsxXSkpOihkPWEobixwKSx0LnBvaW50KGRbMF0sZFsxXSksdC5saW5lRW5kKCkpLG49ZDtlbHNlIGlmKGkmJm4mJnJedil7dmFyIHk7ZyZlfHwhKHk9YShwLG4sITApKXx8KHM9MCxyPyh0LmxpbmVTdGFydCgpLHQucG9pbnQoeVswXVswXSx5WzBdWzFdKSx0LnBvaW50KHlbMV1bMF0seVsxXVsxXSksdC5saW5lRW5kKCkpOih0LnBvaW50KHlbMV1bMF0seVsxXVsxXSksdC5saW5lRW5kKCksdC5saW5lU3RhcnQoKSx0LnBvaW50KHlbMF1bMF0seVswXVsxXSkpKX0hdnx8biYmcWYobixwKXx8dC5wb2ludChwWzBdLHBbMV0pLG49cCxmPXYsZT1nfSxsaW5lRW5kOmZ1bmN0aW9uKCl7ZiYmdC5saW5lRW5kKCksbj1udWxsfSxjbGVhbjpmdW5jdGlvbigpe3JldHVybiBzfChjJiZmKTw8MX19fSxmdW5jdGlvbihuLHIsaSxvKXtMZihvLHQsZSxpLG4scil9LHI/WzAsLXRdOlstcWEsdC1xYV0pfXZhciAkZj0xZTksV2Y9LSRmO2Z1bmN0aW9uIFpmKHQsbixlLHIpe2Z1bmN0aW9uIGkoaSxvKXtyZXR1cm4gdDw9aSYmaTw9ZSYmbjw9byYmbzw9cn1mdW5jdGlvbiBvKGksbyx1LGMpe3ZhciBzPTAsbD0wO2lmKG51bGw9PWl8fChzPWEoaSx1KSkhPT0obD1hKG8sdSkpfHxmKGksbyk8MF51PjApZG97Yy5wb2ludCgwPT09c3x8Mz09PXM/dDplLHM+MT9yOm4pfXdoaWxlKChzPShzK3UrNCklNCkhPT1sKTtlbHNlIGMucG9pbnQob1swXSxvWzFdKX1mdW5jdGlvbiBhKHIsaSl7cmV0dXJuIEhhKHJbMF0tdCk8RGE/aT4wPzA6MzpIYShyWzBdLWUpPERhP2k+MD8yOjE6SGEoclsxXS1uKTxEYT9pPjA/MTowOmk+MD8zOjJ9ZnVuY3Rpb24gdSh0LG4pe3JldHVybiBmKHQueCxuLngpfWZ1bmN0aW9uIGYodCxuKXt2YXIgZT1hKHQsMSkscj1hKG4sMSk7cmV0dXJuIGUhPT1yP2UtcjowPT09ZT9uWzFdLXRbMV06MT09PWU/dFswXS1uWzBdOjI9PT1lP3RbMV0tblsxXTpuWzBdLXRbMF19cmV0dXJuIGZ1bmN0aW9uKGEpe3ZhciBmLGMscyxsLGgsZCxwLHYsZyx5LF8sYj1hLG09VWYoKSx4PXtwb2ludDp3LGxpbmVTdGFydDpmdW5jdGlvbigpe3gucG9pbnQ9TSxjJiZjLnB1c2gocz1bXSk7eT0hMCxnPSExLHA9dj1OYU59LGxpbmVFbmQ6ZnVuY3Rpb24oKXtmJiYoTShsLGgpLGQmJmcmJm0ucmVqb2luKCksZi5wdXNoKG0ucmVzdWx0KCkpKTt4LnBvaW50PXcsZyYmYi5saW5lRW5kKCl9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe2I9bSxmPVtdLGM9W10sXz0hMH0scG9seWdvbkVuZDpmdW5jdGlvbigpe3ZhciBuPWZ1bmN0aW9uKCl7Zm9yKHZhciBuPTAsZT0wLGk9Yy5sZW5ndGg7ZTxpOysrZSlmb3IodmFyIG8sYSx1PWNbZV0sZj0xLHM9dS5sZW5ndGgsbD11WzBdLGg9bFswXSxkPWxbMV07ZjxzOysrZilvPWgsYT1kLGw9dVtmXSxoPWxbMF0sZD1sWzFdLGE8PXI/ZD5yJiYoaC1vKSooci1hKT4oZC1hKSoodC1vKSYmKytuOmQ8PXImJihoLW8pKihyLWEpPChkLWEpKih0LW8pJiYtLW47cmV0dXJuIG59KCksZT1fJiZuLGk9KGY9TihmKSkubGVuZ3RoOyhlfHxpKSYmKGEucG9seWdvblN0YXJ0KCksZSYmKGEubGluZVN0YXJ0KCksbyhudWxsLG51bGwsMSxhKSxhLmxpbmVFbmQoKSksaSYmWWYoZix1LG4sbyxhKSxhLnBvbHlnb25FbmQoKSk7Yj1hLGY9Yz1zPW51bGx9fTtmdW5jdGlvbiB3KHQsbil7aSh0LG4pJiZiLnBvaW50KHQsbil9ZnVuY3Rpb24gTShvLGEpe3ZhciB1PWkobyxhKTtpZihjJiZzLnB1c2goW28sYV0pLHkpbD1vLGg9YSxkPXUseT0hMSx1JiYoYi5saW5lU3RhcnQoKSxiLnBvaW50KG8sYSkpO2Vsc2UgaWYodSYmZyliLnBvaW50KG8sYSk7ZWxzZXt2YXIgZj1bcD1NYXRoLm1heChXZixNYXRoLm1pbigkZixwKSksdj1NYXRoLm1heChXZixNYXRoLm1pbigkZix2KSldLG09W289TWF0aC5tYXgoV2YsTWF0aC5taW4oJGYsbykpLGE9TWF0aC5tYXgoV2YsTWF0aC5taW4oJGYsYSkpXTshZnVuY3Rpb24odCxuLGUscixpLG8pe3ZhciBhLHU9dFswXSxmPXRbMV0sYz0wLHM9MSxsPW5bMF0tdSxoPW5bMV0tZjtpZihhPWUtdSxsfHwhKGE+MCkpe2lmKGEvPWwsbDwwKXtpZihhPGMpcmV0dXJuO2E8cyYmKHM9YSl9ZWxzZSBpZihsPjApe2lmKGE+cylyZXR1cm47YT5jJiYoYz1hKX1pZihhPWktdSxsfHwhKGE8MCkpe2lmKGEvPWwsbDwwKXtpZihhPnMpcmV0dXJuO2E+YyYmKGM9YSl9ZWxzZSBpZihsPjApe2lmKGE8YylyZXR1cm47YTxzJiYocz1hKX1pZihhPXItZixofHwhKGE+MCkpe2lmKGEvPWgsaDwwKXtpZihhPGMpcmV0dXJuO2E8cyYmKHM9YSl9ZWxzZSBpZihoPjApe2lmKGE+cylyZXR1cm47YT5jJiYoYz1hKX1pZihhPW8tZixofHwhKGE8MCkpe2lmKGEvPWgsaDwwKXtpZihhPnMpcmV0dXJuO2E+YyYmKGM9YSl9ZWxzZSBpZihoPjApe2lmKGE8YylyZXR1cm47YTxzJiYocz1hKX1yZXR1cm4gYz4wJiYodFswXT11K2MqbCx0WzFdPWYrYypoKSxzPDEmJihuWzBdPXUrcypsLG5bMV09ZitzKmgpLCEwfX19fX0oZixtLHQsbixlLHIpP3UmJihiLmxpbmVTdGFydCgpLGIucG9pbnQobyxhKSxfPSExKTooZ3x8KGIubGluZVN0YXJ0KCksYi5wb2ludChmWzBdLGZbMV0pKSxiLnBvaW50KG1bMF0sbVsxXSksdXx8Yi5saW5lRW5kKCksXz0hMSl9cD1vLHY9YSxnPXV9cmV0dXJuIHh9fXZhciBRZixKZixLZix0Yz1QYSgpLG5jPXtzcGhlcmU6aXUscG9pbnQ6aXUsbGluZVN0YXJ0OmZ1bmN0aW9uKCl7bmMucG9pbnQ9cmMsbmMubGluZUVuZD1lY30sbGluZUVuZDppdSxwb2x5Z29uU3RhcnQ6aXUscG9seWdvbkVuZDppdX07ZnVuY3Rpb24gZWMoKXtuYy5wb2ludD1uYy5saW5lRW5kPWl1fWZ1bmN0aW9uIHJjKHQsbil7UWY9dCo9SWEsSmY9UWEobio9SWEpLEtmPUdhKG4pLG5jLnBvaW50PWljfWZ1bmN0aW9uIGljKHQsbil7dCo9SWE7dmFyIGU9UWEobio9SWEpLHI9R2EobiksaT1IYSh0LVFmKSxvPUdhKGkpLGE9cipRYShpKSx1PUtmKmUtSmYqcipvLGY9SmYqZStLZipyKm87dGMuYWRkKFhhKEthKGEqYSt1KnUpLGYpKSxRZj10LEpmPWUsS2Y9cn1mdW5jdGlvbiBvYyh0KXtyZXR1cm4gdGMucmVzZXQoKSxzdSh0LG5jKSwrdGN9dmFyIGFjPVtudWxsLG51bGxdLHVjPXt0eXBlOiJMaW5lU3RyaW5nIixjb29yZGluYXRlczphY307ZnVuY3Rpb24gZmModCxuKXtyZXR1cm4gYWNbMF09dCxhY1sxXT1uLG9jKHVjKX12YXIgY2M9e0ZlYXR1cmU6ZnVuY3Rpb24odCxuKXtyZXR1cm4gbGModC5nZW9tZXRyeSxuKX0sRmVhdHVyZUNvbGxlY3Rpb246ZnVuY3Rpb24odCxuKXtmb3IodmFyIGU9dC5mZWF0dXJlcyxyPS0xLGk9ZS5sZW5ndGg7KytyPGk7KWlmKGxjKGVbcl0uZ2VvbWV0cnksbikpcmV0dXJuITA7cmV0dXJuITF9fSxzYz17U3BoZXJlOmZ1bmN0aW9uKCl7cmV0dXJuITB9LFBvaW50OmZ1bmN0aW9uKHQsbil7cmV0dXJuIGhjKHQuY29vcmRpbmF0ZXMsbil9LE11bHRpUG9pbnQ6ZnVuY3Rpb24odCxuKXtmb3IodmFyIGU9dC5jb29yZGluYXRlcyxyPS0xLGk9ZS5sZW5ndGg7KytyPGk7KWlmKGhjKGVbcl0sbikpcmV0dXJuITA7cmV0dXJuITF9LExpbmVTdHJpbmc6ZnVuY3Rpb24odCxuKXtyZXR1cm4gZGModC5jb29yZGluYXRlcyxuKX0sTXVsdGlMaW5lU3RyaW5nOmZ1bmN0aW9uKHQsbil7Zm9yKHZhciBlPXQuY29vcmRpbmF0ZXMscj0tMSxpPWUubGVuZ3RoOysrcjxpOylpZihkYyhlW3JdLG4pKXJldHVybiEwO3JldHVybiExfSxQb2x5Z29uOmZ1bmN0aW9uKHQsbil7cmV0dXJuIHBjKHQuY29vcmRpbmF0ZXMsbil9LE11bHRpUG9seWdvbjpmdW5jdGlvbih0LG4pe2Zvcih2YXIgZT10LmNvb3JkaW5hdGVzLHI9LTEsaT1lLmxlbmd0aDsrK3I8aTspaWYocGMoZVtyXSxuKSlyZXR1cm4hMDtyZXR1cm4hMX0sR2VvbWV0cnlDb2xsZWN0aW9uOmZ1bmN0aW9uKHQsbil7Zm9yKHZhciBlPXQuZ2VvbWV0cmllcyxyPS0xLGk9ZS5sZW5ndGg7KytyPGk7KWlmKGxjKGVbcl0sbikpcmV0dXJuITA7cmV0dXJuITF9fTtmdW5jdGlvbiBsYyh0LG4pe3JldHVybiEoIXR8fCFzYy5oYXNPd25Qcm9wZXJ0eSh0LnR5cGUpKSYmc2NbdC50eXBlXSh0LG4pfWZ1bmN0aW9uIGhjKHQsbil7cmV0dXJuIDA9PT1mYyh0LG4pfWZ1bmN0aW9uIGRjKHQsbil7dmFyIGU9ZmModFswXSx0WzFdKTtyZXR1cm4gZmModFswXSxuKStmYyhuLHRbMV0pPD1lK0RhfWZ1bmN0aW9uIHBjKHQsbil7cmV0dXJuISFJZih0Lm1hcCh2YyksZ2MobikpfWZ1bmN0aW9uIHZjKHQpe3JldHVybih0PXQubWFwKGdjKSkucG9wKCksdH1mdW5jdGlvbiBnYyh0KXtyZXR1cm5bdFswXSpJYSx0WzFdKklhXX1mdW5jdGlvbiB5Yyh0LG4sZSl7dmFyIHI9Zyh0LG4tRGEsZSkuY29uY2F0KG4pO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gci5tYXAoZnVuY3Rpb24obil7cmV0dXJuW3Qsbl19KX19ZnVuY3Rpb24gX2ModCxuLGUpe3ZhciByPWcodCxuLURhLGUpLmNvbmNhdChuKTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHIubWFwKGZ1bmN0aW9uKG4pe3JldHVybltuLHRdfSl9fWZ1bmN0aW9uIGJjKCl7dmFyIHQsbixlLHIsaSxvLGEsdSxmLGMscyxsLGg9MTAsZD1oLHA9OTAsdj0zNjAseT0yLjU7ZnVuY3Rpb24gXygpe3JldHVybnt0eXBlOiJNdWx0aUxpbmVTdHJpbmciLGNvb3JkaW5hdGVzOmIoKX19ZnVuY3Rpb24gYigpe3JldHVybiBnKFZhKHIvcCkqcCxlLHApLm1hcChzKS5jb25jYXQoZyhWYSh1L3YpKnYsYSx2KS5tYXAobCkpLmNvbmNhdChnKFZhKG4vaCkqaCx0LGgpLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gSGEodCVwKT5EYX0pLm1hcChmKSkuY29uY2F0KGcoVmEoby9kKSpkLGksZCkuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiBIYSh0JXYpPkRhfSkubWFwKGMpKX1yZXR1cm4gXy5saW5lcz1mdW5jdGlvbigpe3JldHVybiBiKCkubWFwKGZ1bmN0aW9uKHQpe3JldHVybnt0eXBlOiJMaW5lU3RyaW5nIixjb29yZGluYXRlczp0fX0pfSxfLm91dGxpbmU9ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToiUG9seWdvbiIsY29vcmRpbmF0ZXM6W3MocikuY29uY2F0KGwoYSkuc2xpY2UoMSkscyhlKS5yZXZlcnNlKCkuc2xpY2UoMSksbCh1KS5yZXZlcnNlKCkuc2xpY2UoMSkpXX19LF8uZXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP18uZXh0ZW50TWFqb3IodCkuZXh0ZW50TWlub3IodCk6Xy5leHRlbnRNaW5vcigpfSxfLmV4dGVudE1ham9yPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSt0WzBdWzBdLGU9K3RbMV1bMF0sdT0rdFswXVsxXSxhPSt0WzFdWzFdLHI+ZSYmKHQ9cixyPWUsZT10KSx1PmEmJih0PXUsdT1hLGE9dCksXy5wcmVjaXNpb24oeSkpOltbcix1XSxbZSxhXV19LF8uZXh0ZW50TWlub3I9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49K2VbMF1bMF0sdD0rZVsxXVswXSxvPStlWzBdWzFdLGk9K2VbMV1bMV0sbj50JiYoZT1uLG49dCx0PWUpLG8+aSYmKGU9byxvPWksaT1lKSxfLnByZWNpc2lvbih5KSk6W1tuLG9dLFt0LGldXX0sXy5zdGVwPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP18uc3RlcE1ham9yKHQpLnN0ZXBNaW5vcih0KTpfLnN0ZXBNaW5vcigpfSxfLnN0ZXBNYWpvcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD0rdFswXSx2PSt0WzFdLF8pOltwLHZdfSxfLnN0ZXBNaW5vcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD0rdFswXSxkPSt0WzFdLF8pOltoLGRdfSxfLnByZWNpc2lvbj1mdW5jdGlvbihoKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oeT0raCxmPXljKG8saSw5MCksYz1fYyhuLHQseSkscz15Yyh1LGEsOTApLGw9X2MocixlLHkpLF8pOnl9LF8uZXh0ZW50TWFqb3IoW1stMTgwLC05MCtEYV0sWzE4MCw5MC1EYV1dKS5leHRlbnRNaW5vcihbWy0xODAsLTgwLURhXSxbMTgwLDgwK0RhXV0pfWZ1bmN0aW9uIG1jKHQpe3JldHVybiB0fXZhciB4Yyx3YyxNYyxBYyxUYz1QYSgpLE5jPVBhKCksU2M9e3BvaW50Oml1LGxpbmVTdGFydDppdSxsaW5lRW5kOml1LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe1NjLmxpbmVTdGFydD1FYyxTYy5saW5lRW5kPVBjfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7U2MubGluZVN0YXJ0PVNjLmxpbmVFbmQ9U2MucG9pbnQ9aXUsVGMuYWRkKEhhKE5jKSksTmMucmVzZXQoKX0scmVzdWx0OmZ1bmN0aW9uKCl7dmFyIHQ9VGMvMjtyZXR1cm4gVGMucmVzZXQoKSx0fX07ZnVuY3Rpb24gRWMoKXtTYy5wb2ludD1rY31mdW5jdGlvbiBrYyh0LG4pe1NjLnBvaW50PUNjLHhjPU1jPXQsd2M9QWM9bn1mdW5jdGlvbiBDYyh0LG4pe05jLmFkZChBYyp0LU1jKm4pLE1jPXQsQWM9bn1mdW5jdGlvbiBQYygpe0NjKHhjLHdjKX12YXIgemM9MS8wLFJjPXpjLExjPS16YyxEYz1MYyxVYz17cG9pbnQ6ZnVuY3Rpb24odCxuKXt0PHpjJiYoemM9dCk7dD5MYyYmKExjPXQpO248UmMmJihSYz1uKTtuPkRjJiYoRGM9bil9LGxpbmVTdGFydDppdSxsaW5lRW5kOml1LHBvbHlnb25TdGFydDppdSxwb2x5Z29uRW5kOml1LHJlc3VsdDpmdW5jdGlvbigpe3ZhciB0PVtbemMsUmNdLFtMYyxEY11dO3JldHVybiBMYz1EYz0tKFJjPXpjPTEvMCksdH19O3ZhciBxYyxPYyxZYyxCYyxGYz0wLEljPTAsSGM9MCxqYz0wLFhjPTAsR2M9MCxWYz0wLCRjPTAsV2M9MCxaYz17cG9pbnQ6UWMsbGluZVN0YXJ0OkpjLGxpbmVFbmQ6bnMscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7WmMubGluZVN0YXJ0PWVzLFpjLmxpbmVFbmQ9cnN9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtaYy5wb2ludD1RYyxaYy5saW5lU3RhcnQ9SmMsWmMubGluZUVuZD1uc30scmVzdWx0OmZ1bmN0aW9uKCl7dmFyIHQ9V2M/W1ZjL1djLCRjL1djXTpHYz9bamMvR2MsWGMvR2NdOkhjP1tGYy9IYyxJYy9IY106W05hTixOYU5dO3JldHVybiBGYz1JYz1IYz1qYz1YYz1HYz1WYz0kYz1XYz0wLHR9fTtmdW5jdGlvbiBRYyh0LG4pe0ZjKz10LEljKz1uLCsrSGN9ZnVuY3Rpb24gSmMoKXtaYy5wb2ludD1LY31mdW5jdGlvbiBLYyh0LG4pe1pjLnBvaW50PXRzLFFjKFljPXQsQmM9bil9ZnVuY3Rpb24gdHModCxuKXt2YXIgZT10LVljLHI9bi1CYyxpPUthKGUqZStyKnIpO2pjKz1pKihZYyt0KS8yLFhjKz1pKihCYytuKS8yLEdjKz1pLFFjKFljPXQsQmM9bil9ZnVuY3Rpb24gbnMoKXtaYy5wb2ludD1RY31mdW5jdGlvbiBlcygpe1pjLnBvaW50PWlzfWZ1bmN0aW9uIHJzKCl7b3MocWMsT2MpfWZ1bmN0aW9uIGlzKHQsbil7WmMucG9pbnQ9b3MsUWMocWM9WWM9dCxPYz1CYz1uKX1mdW5jdGlvbiBvcyh0LG4pe3ZhciBlPXQtWWMscj1uLUJjLGk9S2EoZSplK3Iqcik7amMrPWkqKFljK3QpLzIsWGMrPWkqKEJjK24pLzIsR2MrPWksVmMrPShpPUJjKnQtWWMqbikqKFljK3QpLCRjKz1pKihCYytuKSxXYys9MyppLFFjKFljPXQsQmM9bil9ZnVuY3Rpb24gYXModCl7dGhpcy5fY29udGV4dD10fWFzLnByb3RvdHlwZT17X3JhZGl1czo0LjUscG9pbnRSYWRpdXM6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3JhZGl1cz10LHRoaXN9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0scG9seWdvbkVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7MD09PXRoaXMuX2xpbmUmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fcG9pbnQ9TmFOfSxwb2ludDpmdW5jdGlvbih0LG4pe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsbiksdGhpcy5fcG9pbnQ9MTticmVhaztjYXNlIDE6dGhpcy5fY29udGV4dC5saW5lVG8odCxuKTticmVhaztkZWZhdWx0OnRoaXMuX2NvbnRleHQubW92ZVRvKHQrdGhpcy5fcmFkaXVzLG4pLHRoaXMuX2NvbnRleHQuYXJjKHQsbix0aGlzLl9yYWRpdXMsMCxCYSl9fSxyZXN1bHQ6aXV9O3ZhciB1cyxmcyxjcyxzcyxscyxocz1QYSgpLGRzPXtwb2ludDppdSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtkcy5wb2ludD1wc30sbGluZUVuZDpmdW5jdGlvbigpe3VzJiZ2cyhmcyxjcyksZHMucG9pbnQ9aXV9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3VzPSEwfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dXM9bnVsbH0scmVzdWx0OmZ1bmN0aW9uKCl7dmFyIHQ9K2hzO3JldHVybiBocy5yZXNldCgpLHR9fTtmdW5jdGlvbiBwcyh0LG4pe2RzLnBvaW50PXZzLGZzPXNzPXQsY3M9bHM9bn1mdW5jdGlvbiB2cyh0LG4pe3NzLT10LGxzLT1uLGhzLmFkZChLYShzcypzcytscypscykpLHNzPXQsbHM9bn1mdW5jdGlvbiBncygpe3RoaXMuX3N0cmluZz1bXX1mdW5jdGlvbiB5cyh0KXtyZXR1cm4ibTAsIit0KyJhIit0KyIsIit0KyIgMCAxLDEgMCwiKy0yKnQrImEiK3QrIiwiK3QrIiAwIDEsMSAwLCIrMip0KyJ6In1mdW5jdGlvbiBfcyh0KXtyZXR1cm4gZnVuY3Rpb24obil7dmFyIGU9bmV3IGJzO2Zvcih2YXIgciBpbiB0KWVbcl09dFtyXTtyZXR1cm4gZS5zdHJlYW09bixlfX1mdW5jdGlvbiBicygpe31mdW5jdGlvbiBtcyh0LG4sZSl7dmFyIHI9dC5jbGlwRXh0ZW50JiZ0LmNsaXBFeHRlbnQoKTtyZXR1cm4gdC5zY2FsZSgxNTApLnRyYW5zbGF0ZShbMCwwXSksbnVsbCE9ciYmdC5jbGlwRXh0ZW50KG51bGwpLHN1KGUsdC5zdHJlYW0oVWMpKSxuKFVjLnJlc3VsdCgpKSxudWxsIT1yJiZ0LmNsaXBFeHRlbnQociksdH1mdW5jdGlvbiB4cyh0LG4sZSl7cmV0dXJuIG1zKHQsZnVuY3Rpb24oZSl7dmFyIHI9blsxXVswXS1uWzBdWzBdLGk9blsxXVsxXS1uWzBdWzFdLG89TWF0aC5taW4oci8oZVsxXVswXS1lWzBdWzBdKSxpLyhlWzFdWzFdLWVbMF1bMV0pKSxhPStuWzBdWzBdKyhyLW8qKGVbMV1bMF0rZVswXVswXSkpLzIsdT0rblswXVsxXSsoaS1vKihlWzFdWzFdK2VbMF1bMV0pKS8yO3Quc2NhbGUoMTUwKm8pLnRyYW5zbGF0ZShbYSx1XSl9LGUpfWZ1bmN0aW9uIHdzKHQsbixlKXtyZXR1cm4geHModCxbWzAsMF0sbl0sZSl9ZnVuY3Rpb24gTXModCxuLGUpe3JldHVybiBtcyh0LGZ1bmN0aW9uKGUpe3ZhciByPStuLGk9ci8oZVsxXVswXS1lWzBdWzBdKSxvPShyLWkqKGVbMV1bMF0rZVswXVswXSkpLzIsYT0taSplWzBdWzFdO3Quc2NhbGUoMTUwKmkpLnRyYW5zbGF0ZShbbyxhXSl9LGUpfWZ1bmN0aW9uIEFzKHQsbixlKXtyZXR1cm4gbXModCxmdW5jdGlvbihlKXt2YXIgcj0rbixpPXIvKGVbMV1bMV0tZVswXVsxXSksbz0taSplWzBdWzBdLGE9KHItaSooZVsxXVsxXStlWzBdWzFdKSkvMjt0LnNjYWxlKDE1MCppKS50cmFuc2xhdGUoW28sYV0pfSxlKX1ncy5wcm90b3R5cGU9e19yYWRpdXM6NC41LF9jaXJjbGU6eXMoNC41KSxwb2ludFJhZGl1czpmdW5jdGlvbih0KXtyZXR1cm4odD0rdCkhPT10aGlzLl9yYWRpdXMmJih0aGlzLl9yYWRpdXM9dCx0aGlzLl9jaXJjbGU9bnVsbCksdGhpc30scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXswPT09dGhpcy5fbGluZSYmdGhpcy5fc3RyaW5nLnB1c2goIloiKSx0aGlzLl9wb2ludD1OYU59LHBvaW50OmZ1bmN0aW9uKHQsbil7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fc3RyaW5nLnB1c2goIk0iLHQsIiwiLG4pLHRoaXMuX3BvaW50PTE7YnJlYWs7Y2FzZSAxOnRoaXMuX3N0cmluZy5wdXNoKCJMIix0LCIsIixuKTticmVhaztkZWZhdWx0Om51bGw9PXRoaXMuX2NpcmNsZSYmKHRoaXMuX2NpcmNsZT15cyh0aGlzLl9yYWRpdXMpKSx0aGlzLl9zdHJpbmcucHVzaCgiTSIsdCwiLCIsbix0aGlzLl9jaXJjbGUpfX0scmVzdWx0OmZ1bmN0aW9uKCl7aWYodGhpcy5fc3RyaW5nLmxlbmd0aCl7dmFyIHQ9dGhpcy5fc3RyaW5nLmpvaW4oIiIpO3JldHVybiB0aGlzLl9zdHJpbmc9W10sdH1yZXR1cm4gbnVsbH19LGJzLnByb3RvdHlwZT17Y29uc3RydWN0b3I6YnMscG9pbnQ6ZnVuY3Rpb24odCxuKXt0aGlzLnN0cmVhbS5wb2ludCh0LG4pfSxzcGhlcmU6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5zcGhlcmUoKX0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0ubGluZVN0YXJ0KCl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5saW5lRW5kKCl9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLnBvbHlnb25TdGFydCgpfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0ucG9seWdvbkVuZCgpfX07dmFyIFRzPTE2LE5zPUdhKDMwKklhKTtmdW5jdGlvbiBTcyh0LG4pe3JldHVybituP2Z1bmN0aW9uKHQsbil7ZnVuY3Rpb24gZShyLGksbyxhLHUsZixjLHMsbCxoLGQscCx2LGcpe3ZhciB5PWMtcixfPXMtaSxiPXkqeStfKl87aWYoYj40Km4mJnYtLSl7dmFyIG09YStoLHg9dStkLHc9ZitwLE09S2EobSptK3gqeCt3KncpLEE9ZXUody89TSksVD1IYShIYSh3KS0xKTxEYXx8SGEoby1sKTxEYT8obytsKS8yOlhhKHgsbSksTj10KFQsQSksUz1OWzBdLEU9TlsxXSxrPVMtcixDPUUtaSxQPV8qay15KkM7KFAqUC9iPm58fEhhKCh5KmsrXypDKS9iLS41KT4uM3x8YSpoK3UqZCtmKnA8TnMpJiYoZShyLGksbyxhLHUsZixTLEUsVCxtLz1NLHgvPU0sdyx2LGcpLGcucG9pbnQoUyxFKSxlKFMsRSxULG0seCx3LGMscyxsLGgsZCxwLHYsZykpfX1yZXR1cm4gZnVuY3Rpb24obil7dmFyIHIsaSxvLGEsdSxmLGMscyxsLGgsZCxwLHY9e3BvaW50OmcsbGluZVN0YXJ0OnksbGluZUVuZDpiLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe24ucG9seWdvblN0YXJ0KCksdi5saW5lU3RhcnQ9bX0scG9seWdvbkVuZDpmdW5jdGlvbigpe24ucG9seWdvbkVuZCgpLHYubGluZVN0YXJ0PXl9fTtmdW5jdGlvbiBnKGUscil7ZT10KGUsciksbi5wb2ludChlWzBdLGVbMV0pfWZ1bmN0aW9uIHkoKXtzPU5hTix2LnBvaW50PV8sbi5saW5lU3RhcnQoKX1mdW5jdGlvbiBfKHIsaSl7dmFyIG89QXUoW3IsaV0pLGE9dChyLGkpO2UocyxsLGMsaCxkLHAscz1hWzBdLGw9YVsxXSxjPXIsaD1vWzBdLGQ9b1sxXSxwPW9bMl0sVHMsbiksbi5wb2ludChzLGwpfWZ1bmN0aW9uIGIoKXt2LnBvaW50PWcsbi5saW5lRW5kKCl9ZnVuY3Rpb24gbSgpe3koKSx2LnBvaW50PXgsdi5saW5lRW5kPXd9ZnVuY3Rpb24geCh0LG4pe18ocj10LG4pLGk9cyxvPWwsYT1oLHU9ZCxmPXAsdi5wb2ludD1ffWZ1bmN0aW9uIHcoKXtlKHMsbCxjLGgsZCxwLGksbyxyLGEsdSxmLFRzLG4pLHYubGluZUVuZD1iLGIoKX1yZXR1cm4gdn19KHQsbik6ZnVuY3Rpb24odCl7cmV0dXJuIF9zKHtwb2ludDpmdW5jdGlvbihuLGUpe249dChuLGUpLHRoaXMuc3RyZWFtLnBvaW50KG5bMF0sblsxXSl9fSl9KHQpfXZhciBFcz1fcyh7cG9pbnQ6ZnVuY3Rpb24odCxuKXt0aGlzLnN0cmVhbS5wb2ludCh0KklhLG4qSWEpfX0pO2Z1bmN0aW9uIGtzKHQsbixlLHIpe3ZhciBpPUdhKHIpLG89UWEociksYT1pKnQsdT1vKnQsZj1pL3QsYz1vL3Qscz0obyplLWkqbikvdCxsPShvKm4raSplKS90O2Z1bmN0aW9uIGgodCxyKXtyZXR1cm5bYSp0LXUqcituLGUtdSp0LWEqcl19cmV0dXJuIGguaW52ZXJ0PWZ1bmN0aW9uKHQsbil7cmV0dXJuW2YqdC1jKm4rcyxsLWMqdC1mKm5dfSxofWZ1bmN0aW9uIENzKHQpe3JldHVybiBQcyhmdW5jdGlvbigpe3JldHVybiB0fSkoKX1mdW5jdGlvbiBQcyh0KXt2YXIgbixlLHIsaSxvLGEsdSxmLGMscyxsPTE1MCxoPTQ4MCxkPTI1MCxwPTAsdj0wLGc9MCx5PTAsXz0wLGI9MCxtPW51bGwseD1HZix3PW51bGwsTT1tYyxBPS41O2Z1bmN0aW9uIFQodCl7cmV0dXJuIGYodFswXSpJYSx0WzFdKklhKX1mdW5jdGlvbiBOKHQpe3JldHVybih0PWYuaW52ZXJ0KHRbMF0sdFsxXSkpJiZbdFswXSpGYSx0WzFdKkZhXX1mdW5jdGlvbiBTKCl7dmFyIHQ9a3MobCwwLDAsYikuYXBwbHkobnVsbCxuKHAsdikpLHI9KGI/a3M6ZnVuY3Rpb24odCxuLGUpe2Z1bmN0aW9uIHIocixpKXtyZXR1cm5bbit0KnIsZS10KmldfXJldHVybiByLmludmVydD1mdW5jdGlvbihyLGkpe3JldHVyblsoci1uKS90LChlLWkpL3RdfSxyfSkobCxoLXRbMF0sZC10WzFdLGIpO3JldHVybiBlPWtmKGcseSxfKSx1PVNmKG4sciksZj1TZihlLHUpLGE9U3ModSxBKSxFKCl9ZnVuY3Rpb24gRSgpe3JldHVybiBjPXM9bnVsbCxUfXJldHVybiBULnN0cmVhbT1mdW5jdGlvbih0KXtyZXR1cm4gYyYmcz09PXQ/YzpjPUVzKGZ1bmN0aW9uKHQpe3JldHVybiBfcyh7cG9pbnQ6ZnVuY3Rpb24obixlKXt2YXIgcj10KG4sZSk7cmV0dXJuIHRoaXMuc3RyZWFtLnBvaW50KHJbMF0sclsxXSl9fSl9KGUpKHgoYShNKHM9dCkpKSkpfSxULnByZWNsaXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHg9dCxtPXZvaWQgMCxFKCkpOnh9LFQucG9zdGNsaXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KE09dCx3PXI9aT1vPW51bGwsRSgpKTpNfSxULmNsaXBBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oeD0rdD9WZihtPXQqSWEpOihtPW51bGwsR2YpLEUoKSk6bSpGYX0sVC5jbGlwRXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhNPW51bGw9PXQ/KHc9cj1pPW89bnVsbCxtYyk6WmYodz0rdFswXVswXSxyPSt0WzBdWzFdLGk9K3RbMV1bMF0sbz0rdFsxXVsxXSksRSgpKTpudWxsPT13P251bGw6W1t3LHJdLFtpLG9dXX0sVC5zY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD0rdCxTKCkpOmx9LFQudHJhbnNsYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPSt0WzBdLGQ9K3RbMV0sUygpKTpbaCxkXX0sVC5jZW50ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9dFswXSUzNjAqSWEsdj10WzFdJTM2MCpJYSxTKCkpOltwKkZhLHYqRmFdfSxULnJvdGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZz10WzBdJTM2MCpJYSx5PXRbMV0lMzYwKklhLF89dC5sZW5ndGg+Mj90WzJdJTM2MCpJYTowLFMoKSk6W2cqRmEseSpGYSxfKkZhXX0sVC5hbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYj10JTM2MCpJYSxTKCkpOmIqRmF9LFQucHJlY2lzaW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPVNzKHUsQT10KnQpLEUoKSk6S2EoQSl9LFQuZml0RXh0ZW50PWZ1bmN0aW9uKHQsbil7cmV0dXJuIHhzKFQsdCxuKX0sVC5maXRTaXplPWZ1bmN0aW9uKHQsbil7cmV0dXJuIHdzKFQsdCxuKX0sVC5maXRXaWR0aD1mdW5jdGlvbih0LG4pe3JldHVybiBNcyhULHQsbil9LFQuZml0SGVpZ2h0PWZ1bmN0aW9uKHQsbil7cmV0dXJuIEFzKFQsdCxuKX0sZnVuY3Rpb24oKXtyZXR1cm4gbj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKSxULmludmVydD1uLmludmVydCYmTixTKCl9fWZ1bmN0aW9uIHpzKHQpe3ZhciBuPTAsZT1xYS8zLHI9UHModCksaT1yKG4sZSk7cmV0dXJuIGkucGFyYWxsZWxzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3Iobj10WzBdKklhLGU9dFsxXSpJYSk6W24qRmEsZSpGYV19LGl9ZnVuY3Rpb24gUnModCxuKXt2YXIgZT1RYSh0KSxyPShlK1FhKG4pKS8yO2lmKEhhKHIpPERhKXJldHVybiBmdW5jdGlvbih0KXt2YXIgbj1HYSh0KTtmdW5jdGlvbiBlKHQsZSl7cmV0dXJuW3QqbixRYShlKS9uXX1yZXR1cm4gZS5pbnZlcnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm5bdC9uLGV1KGUqbildfSxlfSh0KTt2YXIgaT0xK2UqKDIqci1lKSxvPUthKGkpL3I7ZnVuY3Rpb24gYSh0LG4pe3ZhciBlPUthKGktMipyKlFhKG4pKS9yO3JldHVybltlKlFhKHQqPXIpLG8tZSpHYSh0KV19cmV0dXJuIGEuaW52ZXJ0PWZ1bmN0aW9uKHQsbil7dmFyIGU9by1uO3JldHVybltYYSh0LEhhKGUpKS9yKkphKGUpLGV1KChpLSh0KnQrZSplKSpyKnIpLygyKnIpKV19LGF9ZnVuY3Rpb24gTHMoKXtyZXR1cm4genMoUnMpLnNjYWxlKDE1NS40MjQpLmNlbnRlcihbMCwzMy42NDQyXSl9ZnVuY3Rpb24gRHMoKXtyZXR1cm4gTHMoKS5wYXJhbGxlbHMoWzI5LjUsNDUuNV0pLnNjYWxlKDEwNzApLnRyYW5zbGF0ZShbNDgwLDI1MF0pLnJvdGF0ZShbOTYsMF0pLmNlbnRlcihbLS42LDM4LjddKX1mdW5jdGlvbiBVcyh0KXtyZXR1cm4gZnVuY3Rpb24obixlKXt2YXIgcj1HYShuKSxpPUdhKGUpLG89dChyKmkpO3JldHVybltvKmkqUWEobiksbypRYShlKV19fWZ1bmN0aW9uIHFzKHQpe3JldHVybiBmdW5jdGlvbihuLGUpe3ZhciByPUthKG4qbitlKmUpLGk9dChyKSxvPVFhKGkpLGE9R2EoaSk7cmV0dXJuW1hhKG4qbyxyKmEpLGV1KHImJmUqby9yKV19fXZhciBPcz1VcyhmdW5jdGlvbih0KXtyZXR1cm4gS2EoMi8oMSt0KSl9KTtPcy5pbnZlcnQ9cXMoZnVuY3Rpb24odCl7cmV0dXJuIDIqZXUodC8yKX0pO3ZhciBZcz1VcyhmdW5jdGlvbih0KXtyZXR1cm4odD1udSh0KSkmJnQvUWEodCl9KTtmdW5jdGlvbiBCcyh0LG4pe3JldHVyblt0LFdhKHR1KChPYStuKS8yKSldfWZ1bmN0aW9uIEZzKHQpe3ZhciBuLGUscixpPUNzKHQpLG89aS5jZW50ZXIsYT1pLnNjYWxlLHU9aS50cmFuc2xhdGUsZj1pLmNsaXBFeHRlbnQsYz1udWxsO2Z1bmN0aW9uIHMoKXt2YXIgbz1xYSphKCksdT1pKFJmKGkucm90YXRlKCkpLmludmVydChbMCwwXSkpO3JldHVybiBmKG51bGw9PWM/W1t1WzBdLW8sdVsxXS1vXSxbdVswXStvLHVbMV0rb11dOnQ9PT1Ccz9bW01hdGgubWF4KHVbMF0tbyxjKSxuXSxbTWF0aC5taW4odVswXStvLGUpLHJdXTpbW2MsTWF0aC5tYXgodVsxXS1vLG4pXSxbZSxNYXRoLm1pbih1WzFdK28scildXSl9cmV0dXJuIGkuc2NhbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGEodCkscygpKTphKCl9LGkudHJhbnNsYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1KHQpLHMoKSk6dSgpfSxpLmNlbnRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obyh0KSxzKCkpOm8oKX0saS5jbGlwRXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhudWxsPT10P2M9bj1lPXI9bnVsbDooYz0rdFswXVswXSxuPSt0WzBdWzFdLGU9K3RbMV1bMF0scj0rdFsxXVsxXSkscygpKTpudWxsPT1jP251bGw6W1tjLG5dLFtlLHJdXX0scygpfWZ1bmN0aW9uIElzKHQpe3JldHVybiB0dSgoT2ErdCkvMil9ZnVuY3Rpb24gSHModCxuKXt2YXIgZT1HYSh0KSxyPXQ9PT1uP1FhKHQpOldhKGUvR2EobikpL1dhKElzKG4pL0lzKHQpKSxpPWUqWmEoSXModCkscikvcjtpZighcilyZXR1cm4gQnM7ZnVuY3Rpb24gbyh0LG4pe2k+MD9uPC1PYStEYSYmKG49LU9hK0RhKTpuPk9hLURhJiYobj1PYS1EYSk7dmFyIGU9aS9aYShJcyhuKSxyKTtyZXR1cm5bZSpRYShyKnQpLGktZSpHYShyKnQpXX1yZXR1cm4gby5pbnZlcnQ9ZnVuY3Rpb24odCxuKXt2YXIgZT1pLW4sbz1KYShyKSpLYSh0KnQrZSplKTtyZXR1cm5bWGEodCxIYShlKSkvcipKYShlKSwyKmphKFphKGkvbywxL3IpKS1PYV19LG99ZnVuY3Rpb24ganModCxuKXtyZXR1cm5bdCxuXX1mdW5jdGlvbiBYcyh0LG4pe3ZhciBlPUdhKHQpLHI9dD09PW4/UWEodCk6KGUtR2EobikpLyhuLXQpLGk9ZS9yK3Q7aWYoSGEocik8RGEpcmV0dXJuIGpzO2Z1bmN0aW9uIG8odCxuKXt2YXIgZT1pLW4sbz1yKnQ7cmV0dXJuW2UqUWEobyksaS1lKkdhKG8pXX1yZXR1cm4gby5pbnZlcnQ9ZnVuY3Rpb24odCxuKXt2YXIgZT1pLW47cmV0dXJuW1hhKHQsSGEoZSkpL3IqSmEoZSksaS1KYShyKSpLYSh0KnQrZSplKV19LG99WXMuaW52ZXJ0PXFzKGZ1bmN0aW9uKHQpe3JldHVybiB0fSksQnMuaW52ZXJ0PWZ1bmN0aW9uKHQsbil7cmV0dXJuW3QsMipqYSgkYShuKSktT2FdfSxqcy5pbnZlcnQ9anM7dmFyIEdzPTEuMzQwMjY0LFZzPS0uMDgxMTA2LCRzPTg5M2UtNixXcz0uMDAzNzk2LFpzPUthKDMpLzI7ZnVuY3Rpb24gUXModCxuKXt2YXIgZT1ldShacypRYShuKSkscj1lKmUsaT1yKnIqcjtyZXR1cm5bdCpHYShlKS8oWnMqKEdzKzMqVnMqcitpKig3KiRzKzkqV3MqcikpKSxlKihHcytWcypyK2kqKCRzK1dzKnIpKV19ZnVuY3Rpb24gSnModCxuKXt2YXIgZT1HYShuKSxyPUdhKHQpKmU7cmV0dXJuW2UqUWEodCkvcixRYShuKS9yXX1mdW5jdGlvbiBLcyh0LG4sZSxyKXtyZXR1cm4gMT09PXQmJjE9PT1uJiYwPT09ZSYmMD09PXI/bWM6X3Moe3BvaW50OmZ1bmN0aW9uKGksbyl7dGhpcy5zdHJlYW0ucG9pbnQoaSp0K2UsbypuK3IpfX0pfWZ1bmN0aW9uIHRsKHQsbil7dmFyIGU9bipuLHI9ZSplO3JldHVyblt0KiguODcwNy0uMTMxOTc5KmUrcioociooLjAwMzk3MSplLS4wMDE1MjkqciktLjAxMzc5MSkpLG4qKDEuMDA3MjI2K2UqKC4wMTUwODUrciooLjAyODg3NCplLS4wNDQ0NzUtLjAwNTkxNipyKSkpXX1mdW5jdGlvbiBubCh0LG4pe3JldHVybltHYShuKSpRYSh0KSxRYShuKV19ZnVuY3Rpb24gZWwodCxuKXt2YXIgZT1HYShuKSxyPTErR2EodCkqZTtyZXR1cm5bZSpRYSh0KS9yLFFhKG4pL3JdfWZ1bmN0aW9uIHJsKHQsbil7cmV0dXJuW1dhKHR1KChPYStuKS8yKSksLXRdfWZ1bmN0aW9uIGlsKHQsbil7cmV0dXJuIHQucGFyZW50PT09bi5wYXJlbnQ/MToyfWZ1bmN0aW9uIG9sKHQsbil7cmV0dXJuIHQrbi54fWZ1bmN0aW9uIGFsKHQsbil7cmV0dXJuIE1hdGgubWF4KHQsbi55KX1mdW5jdGlvbiB1bCh0KXt2YXIgbj0wLGU9dC5jaGlsZHJlbixyPWUmJmUubGVuZ3RoO2lmKHIpZm9yKDstLXI+PTA7KW4rPWVbcl0udmFsdWU7ZWxzZSBuPTE7dC52YWx1ZT1ufWZ1bmN0aW9uIGZsKHQsbil7dmFyIGUscixpLG8sYSx1PW5ldyBobCh0KSxmPSt0LnZhbHVlJiYodS52YWx1ZT10LnZhbHVlKSxjPVt1XTtmb3IobnVsbD09biYmKG49Y2wpO2U9Yy5wb3AoKTspaWYoZiYmKGUudmFsdWU9K2UuZGF0YS52YWx1ZSksKGk9bihlLmRhdGEpKSYmKGE9aS5sZW5ndGgpKWZvcihlLmNoaWxkcmVuPW5ldyBBcnJheShhKSxvPWEtMTtvPj0wOy0tbyljLnB1c2gocj1lLmNoaWxkcmVuW29dPW5ldyBobChpW29dKSksci5wYXJlbnQ9ZSxyLmRlcHRoPWUuZGVwdGgrMTtyZXR1cm4gdS5lYWNoQmVmb3JlKGxsKX1mdW5jdGlvbiBjbCh0KXtyZXR1cm4gdC5jaGlsZHJlbn1mdW5jdGlvbiBzbCh0KXt0LmRhdGE9dC5kYXRhLmRhdGF9ZnVuY3Rpb24gbGwodCl7dmFyIG49MDtkb3t0LmhlaWdodD1ufXdoaWxlKCh0PXQucGFyZW50KSYmdC5oZWlnaHQ8KytuKX1mdW5jdGlvbiBobCh0KXt0aGlzLmRhdGE9dCx0aGlzLmRlcHRoPXRoaXMuaGVpZ2h0PTAsdGhpcy5wYXJlbnQ9bnVsbH1Rcy5pbnZlcnQ9ZnVuY3Rpb24odCxuKXtmb3IodmFyIGUscj1uLGk9cipyLG89aSppKmksYT0wO2E8MTImJihvPShpPShyLT1lPShyKihHcytWcyppK28qKCRzK1dzKmkpKS1uKS8oR3MrMypWcyppK28qKDcqJHMrOSpXcyppKSkpKnIpKmkqaSwhKEhhKGUpPFVhKSk7KythKTtyZXR1cm5bWnMqdCooR3MrMypWcyppK28qKDcqJHMrOSpXcyppKSkvR2EociksZXUoUWEocikvWnMpXX0sSnMuaW52ZXJ0PXFzKGphKSx0bC5pbnZlcnQ9ZnVuY3Rpb24odCxuKXt2YXIgZSxyPW4saT0yNTtkb3t2YXIgbz1yKnIsYT1vKm87ci09ZT0ociooMS4wMDcyMjYrbyooLjAxNTA4NSthKiguMDI4ODc0Km8tLjA0NDQ3NS0uMDA1OTE2KmEpKSktbikvKDEuMDA3MjI2K28qKC4wNDUyNTUrYSooLjI1OTg2NipvLS4zMTEzMjUtLjAwNTkxNioxMSphKSkpfXdoaWxlKEhhKGUpPkRhJiYtLWk+MCk7cmV0dXJuW3QvKC44NzA3KyhvPXIqcikqKG8qKG8qbypvKiguMDAzOTcxLS4wMDE1MjkqbyktLjAxMzc5MSktLjEzMTk3OSkpLHJdfSxubC5pbnZlcnQ9cXMoZXUpLGVsLmludmVydD1xcyhmdW5jdGlvbih0KXtyZXR1cm4gMipqYSh0KX0pLHJsLmludmVydD1mdW5jdGlvbih0LG4pe3JldHVyblstbiwyKmphKCRhKHQpKS1PYV19LGhsLnByb3RvdHlwZT1mbC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmhsLGNvdW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWFjaEFmdGVyKHVsKX0sZWFjaDpmdW5jdGlvbih0KXt2YXIgbixlLHIsaSxvPXRoaXMsYT1bb107ZG97Zm9yKG49YS5yZXZlcnNlKCksYT1bXTtvPW4ucG9wKCk7KWlmKHQobyksZT1vLmNoaWxkcmVuKWZvcihyPTAsaT1lLmxlbmd0aDtyPGk7KytyKWEucHVzaChlW3JdKX13aGlsZShhLmxlbmd0aCk7cmV0dXJuIHRoaXN9LGVhY2hBZnRlcjpmdW5jdGlvbih0KXtmb3IodmFyIG4sZSxyLGk9dGhpcyxvPVtpXSxhPVtdO2k9by5wb3AoKTspaWYoYS5wdXNoKGkpLG49aS5jaGlsZHJlbilmb3IoZT0wLHI9bi5sZW5ndGg7ZTxyOysrZSlvLnB1c2gobltlXSk7Zm9yKDtpPWEucG9wKCk7KXQoaSk7cmV0dXJuIHRoaXN9LGVhY2hCZWZvcmU6ZnVuY3Rpb24odCl7Zm9yKHZhciBuLGUscj10aGlzLGk9W3JdO3I9aS5wb3AoKTspaWYodChyKSxuPXIuY2hpbGRyZW4pZm9yKGU9bi5sZW5ndGgtMTtlPj0wOy0tZSlpLnB1c2gobltlXSk7cmV0dXJuIHRoaXN9LHN1bTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5lYWNoQWZ0ZXIoZnVuY3Rpb24obil7Zm9yKHZhciBlPSt0KG4uZGF0YSl8fDAscj1uLmNoaWxkcmVuLGk9ciYmci5sZW5ndGg7LS1pPj0wOyllKz1yW2ldLnZhbHVlO24udmFsdWU9ZX0pfSxzb3J0OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmVhY2hCZWZvcmUoZnVuY3Rpb24obil7bi5jaGlsZHJlbiYmbi5jaGlsZHJlbi5zb3J0KHQpfSl9LHBhdGg6ZnVuY3Rpb24odCl7Zm9yKHZhciBuPXRoaXMsZT1mdW5jdGlvbih0LG4pe2lmKHQ9PT1uKXJldHVybiB0O3ZhciBlPXQuYW5jZXN0b3JzKCkscj1uLmFuY2VzdG9ycygpLGk9bnVsbDtmb3IodD1lLnBvcCgpLG49ci5wb3AoKTt0PT09bjspaT10LHQ9ZS5wb3AoKSxuPXIucG9wKCk7cmV0dXJuIGl9KG4sdCkscj1bbl07biE9PWU7KW49bi5wYXJlbnQsci5wdXNoKG4pO2Zvcih2YXIgaT1yLmxlbmd0aDt0IT09ZTspci5zcGxpY2UoaSwwLHQpLHQ9dC5wYXJlbnQ7cmV0dXJuIHJ9LGFuY2VzdG9yczpmdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLG49W3RdO3Q9dC5wYXJlbnQ7KW4ucHVzaCh0KTtyZXR1cm4gbn0sZGVzY2VuZGFudHM6ZnVuY3Rpb24oKXt2YXIgdD1bXTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKG4pe3QucHVzaChuKX0pLHR9LGxlYXZlczpmdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiB0aGlzLmVhY2hCZWZvcmUoZnVuY3Rpb24obil7bi5jaGlsZHJlbnx8dC5wdXNoKG4pfSksdH0sbGlua3M6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLG49W107cmV0dXJuIHQuZWFjaChmdW5jdGlvbihlKXtlIT09dCYmbi5wdXNoKHtzb3VyY2U6ZS5wYXJlbnQsdGFyZ2V0OmV9KX0pLG59LGNvcHk6ZnVuY3Rpb24oKXtyZXR1cm4gZmwodGhpcykuZWFjaEJlZm9yZShzbCl9fTt2YXIgZGw9QXJyYXkucHJvdG90eXBlLnNsaWNlO2Z1bmN0aW9uIHBsKHQpe2Zvcih2YXIgbixlLHI9MCxpPSh0PWZ1bmN0aW9uKHQpe2Zvcih2YXIgbixlLHI9dC5sZW5ndGg7cjspZT1NYXRoLnJhbmRvbSgpKnItLXwwLG49dFtyXSx0W3JdPXRbZV0sdFtlXT1uO3JldHVybiB0fShkbC5jYWxsKHQpKSkubGVuZ3RoLG89W107cjxpOyluPXRbcl0sZSYmeWwoZSxuKT8rK3I6KGU9Ymwobz12bChvLG4pKSxyPTApO3JldHVybiBlfWZ1bmN0aW9uIHZsKHQsbil7dmFyIGUscjtpZihfbChuLHQpKXJldHVybltuXTtmb3IoZT0wO2U8dC5sZW5ndGg7KytlKWlmKGdsKG4sdFtlXSkmJl9sKG1sKHRbZV0sbiksdCkpcmV0dXJuW3RbZV0sbl07Zm9yKGU9MDtlPHQubGVuZ3RoLTE7KytlKWZvcihyPWUrMTtyPHQubGVuZ3RoOysrcilpZihnbChtbCh0W2VdLHRbcl0pLG4pJiZnbChtbCh0W2VdLG4pLHRbcl0pJiZnbChtbCh0W3JdLG4pLHRbZV0pJiZfbCh4bCh0W2VdLHRbcl0sbiksdCkpcmV0dXJuW3RbZV0sdFtyXSxuXTt0aHJvdyBuZXcgRXJyb3J9ZnVuY3Rpb24gZ2wodCxuKXt2YXIgZT10LnItbi5yLHI9bi54LXQueCxpPW4ueS10Lnk7cmV0dXJuIGU8MHx8ZSplPHIqcitpKml9ZnVuY3Rpb24geWwodCxuKXt2YXIgZT10LnItbi5yKzFlLTYscj1uLngtdC54LGk9bi55LXQueTtyZXR1cm4gZT4wJiZlKmU+cipyK2kqaX1mdW5jdGlvbiBfbCh0LG4pe2Zvcih2YXIgZT0wO2U8bi5sZW5ndGg7KytlKWlmKCF5bCh0LG5bZV0pKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIGJsKHQpe3N3aXRjaCh0Lmxlbmd0aCl7Y2FzZSAxOnJldHVybnt4OihuPXRbMF0pLngseTpuLnkscjpuLnJ9O2Nhc2UgMjpyZXR1cm4gbWwodFswXSx0WzFdKTtjYXNlIDM6cmV0dXJuIHhsKHRbMF0sdFsxXSx0WzJdKX12YXIgbn1mdW5jdGlvbiBtbCh0LG4pe3ZhciBlPXQueCxyPXQueSxpPXQucixvPW4ueCxhPW4ueSx1PW4ucixmPW8tZSxjPWEtcixzPXUtaSxsPU1hdGguc3FydChmKmYrYypjKTtyZXR1cm57eDooZStvK2YvbCpzKS8yLHk6KHIrYStjL2wqcykvMixyOihsK2krdSkvMn19ZnVuY3Rpb24geGwodCxuLGUpe3ZhciByPXQueCxpPXQueSxvPXQucixhPW4ueCx1PW4ueSxmPW4ucixjPWUueCxzPWUueSxsPWUucixoPXItYSxkPXItYyxwPWktdSx2PWktcyxnPWYtbyx5PWwtbyxfPXIqcitpKmktbypvLGI9Xy1hKmEtdSp1K2YqZixtPV8tYypjLXMqcytsKmwseD1kKnAtaCp2LHc9KHAqbS12KmIpLygyKngpLXIsTT0odipnLXAqeSkveCxBPShkKmItaCptKS8oMip4KS1pLFQ9KGgqeS1kKmcpL3gsTj1NKk0rVCpULTEsUz0yKihvK3cqTStBKlQpLEU9dyp3K0EqQS1vKm8saz0tKE4/KFMrTWF0aC5zcXJ0KFMqUy00Kk4qRSkpLygyKk4pOkUvUyk7cmV0dXJue3g6cit3K00qayx5OmkrQStUKmsscjprfX1mdW5jdGlvbiB3bCh0LG4sZSl7dmFyIHIsaSxvLGEsdT10Lngtbi54LGY9dC55LW4ueSxjPXUqdStmKmY7Yz8oaT1uLnIrZS5yLGkqPWksYT10LnIrZS5yLGk+KGEqPWEpPyhyPShjK2EtaSkvKDIqYyksbz1NYXRoLnNxcnQoTWF0aC5tYXgoMCxhL2MtcipyKSksZS54PXQueC1yKnUtbypmLGUueT10LnktcipmK28qdSk6KHI9KGMraS1hKS8oMipjKSxvPU1hdGguc3FydChNYXRoLm1heCgwLGkvYy1yKnIpKSxlLng9bi54K3IqdS1vKmYsZS55PW4ueStyKmYrbyp1KSk6KGUueD1uLngrZS5yLGUueT1uLnkpfWZ1bmN0aW9uIE1sKHQsbil7dmFyIGU9dC5yK24uci0xZS02LHI9bi54LXQueCxpPW4ueS10Lnk7cmV0dXJuIGU+MCYmZSplPnIqcitpKml9ZnVuY3Rpb24gQWwodCl7dmFyIG49dC5fLGU9dC5uZXh0Ll8scj1uLnIrZS5yLGk9KG4ueCplLnIrZS54Km4ucikvcixvPShuLnkqZS5yK2UueSpuLnIpL3I7cmV0dXJuIGkqaStvKm99ZnVuY3Rpb24gVGwodCl7dGhpcy5fPXQsdGhpcy5uZXh0PW51bGwsdGhpcy5wcmV2aW91cz1udWxsfWZ1bmN0aW9uIE5sKHQpe2lmKCEoaT10Lmxlbmd0aCkpcmV0dXJuIDA7dmFyIG4sZSxyLGksbyxhLHUsZixjLHMsbDtpZigobj10WzBdKS54PTAsbi55PTAsIShpPjEpKXJldHVybiBuLnI7aWYoZT10WzFdLG4ueD0tZS5yLGUueD1uLnIsZS55PTAsIShpPjIpKXJldHVybiBuLnIrZS5yO3dsKGUsbixyPXRbMl0pLG49bmV3IFRsKG4pLGU9bmV3IFRsKGUpLHI9bmV3IFRsKHIpLG4ubmV4dD1yLnByZXZpb3VzPWUsZS5uZXh0PW4ucHJldmlvdXM9cixyLm5leHQ9ZS5wcmV2aW91cz1uO3Q6Zm9yKHU9Mzt1PGk7Kyt1KXt3bChuLl8sZS5fLHI9dFt1XSkscj1uZXcgVGwociksZj1lLm5leHQsYz1uLnByZXZpb3VzLHM9ZS5fLnIsbD1uLl8ucjtkb3tpZihzPD1sKXtpZihNbChmLl8sci5fKSl7ZT1mLG4ubmV4dD1lLGUucHJldmlvdXM9biwtLXU7Y29udGludWUgdH1zKz1mLl8ucixmPWYubmV4dH1lbHNle2lmKE1sKGMuXyxyLl8pKXsobj1jKS5uZXh0PWUsZS5wcmV2aW91cz1uLC0tdTtjb250aW51ZSB0fWwrPWMuXy5yLGM9Yy5wcmV2aW91c319d2hpbGUoZiE9PWMubmV4dCk7Zm9yKHIucHJldmlvdXM9bixyLm5leHQ9ZSxuLm5leHQ9ZS5wcmV2aW91cz1lPXIsbz1BbChuKTsocj1yLm5leHQpIT09ZTspKGE9QWwocikpPG8mJihuPXIsbz1hKTtlPW4ubmV4dH1mb3Iobj1bZS5fXSxyPWU7KHI9ci5uZXh0KSE9PWU7KW4ucHVzaChyLl8pO2ZvcihyPXBsKG4pLHU9MDt1PGk7Kyt1KShuPXRbdV0pLngtPXIueCxuLnktPXIueTtyZXR1cm4gci5yfWZ1bmN0aW9uIFNsKHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdH1mdW5jdGlvbiBFbCgpe3JldHVybiAwfWZ1bmN0aW9uIGtsKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX1mdW5jdGlvbiBDbCh0KXtyZXR1cm4gTWF0aC5zcXJ0KHQudmFsdWUpfWZ1bmN0aW9uIFBsKHQpe3JldHVybiBmdW5jdGlvbihuKXtuLmNoaWxkcmVufHwobi5yPU1hdGgubWF4KDAsK3Qobil8fDApKX19ZnVuY3Rpb24gemwodCxuKXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYocj1lLmNoaWxkcmVuKXt2YXIgcixpLG8sYT1yLmxlbmd0aCx1PXQoZSkqbnx8MDtpZih1KWZvcihpPTA7aTxhOysraSlyW2ldLnIrPXU7aWYobz1ObChyKSx1KWZvcihpPTA7aTxhOysraSlyW2ldLnItPXU7ZS5yPW8rdX19fWZ1bmN0aW9uIFJsKHQpe3JldHVybiBmdW5jdGlvbihuKXt2YXIgZT1uLnBhcmVudDtuLnIqPXQsZSYmKG4ueD1lLngrdCpuLngsbi55PWUueSt0Km4ueSl9fWZ1bmN0aW9uIExsKHQpe3QueDA9TWF0aC5yb3VuZCh0LngwKSx0LnkwPU1hdGgucm91bmQodC55MCksdC54MT1NYXRoLnJvdW5kKHQueDEpLHQueTE9TWF0aC5yb3VuZCh0LnkxKX1mdW5jdGlvbiBEbCh0LG4sZSxyLGkpe2Zvcih2YXIgbyxhPXQuY2hpbGRyZW4sdT0tMSxmPWEubGVuZ3RoLGM9dC52YWx1ZSYmKHItbikvdC52YWx1ZTsrK3U8ZjspKG89YVt1XSkueTA9ZSxvLnkxPWksby54MD1uLG8ueDE9bis9by52YWx1ZSpjfXZhciBVbD0iJCIscWw9e2RlcHRoOi0xfSxPbD17fTtmdW5jdGlvbiBZbCh0KXtyZXR1cm4gdC5pZH1mdW5jdGlvbiBCbCh0KXtyZXR1cm4gdC5wYXJlbnRJZH1mdW5jdGlvbiBGbCh0LG4pe3JldHVybiB0LnBhcmVudD09PW4ucGFyZW50PzE6Mn1mdW5jdGlvbiBJbCh0KXt2YXIgbj10LmNoaWxkcmVuO3JldHVybiBuP25bMF06dC50fWZ1bmN0aW9uIEhsKHQpe3ZhciBuPXQuY2hpbGRyZW47cmV0dXJuIG4/bltuLmxlbmd0aC0xXTp0LnR9ZnVuY3Rpb24gamwodCxuLGUpe3ZhciByPWUvKG4uaS10LmkpO24uYy09cixuLnMrPWUsdC5jKz1yLG4ueis9ZSxuLm0rPWV9ZnVuY3Rpb24gWGwodCxuLGUpe3JldHVybiB0LmEucGFyZW50PT09bi5wYXJlbnQ/dC5hOmV9ZnVuY3Rpb24gR2wodCxuKXt0aGlzLl89dCx0aGlzLnBhcmVudD1udWxsLHRoaXMuY2hpbGRyZW49bnVsbCx0aGlzLkE9bnVsbCx0aGlzLmE9dGhpcyx0aGlzLno9MCx0aGlzLm09MCx0aGlzLmM9MCx0aGlzLnM9MCx0aGlzLnQ9bnVsbCx0aGlzLmk9bn1mdW5jdGlvbiBWbCh0LG4sZSxyLGkpe2Zvcih2YXIgbyxhPXQuY2hpbGRyZW4sdT0tMSxmPWEubGVuZ3RoLGM9dC52YWx1ZSYmKGktZSkvdC52YWx1ZTsrK3U8ZjspKG89YVt1XSkueDA9bixvLngxPXIsby55MD1lLG8ueTE9ZSs9by52YWx1ZSpjfUdsLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGhsLnByb3RvdHlwZSk7dmFyICRsPSgxK01hdGguc3FydCg1KSkvMjtmdW5jdGlvbiBXbCh0LG4sZSxyLGksbyl7Zm9yKHZhciBhLHUsZixjLHMsbCxoLGQscCx2LGcseT1bXSxfPW4uY2hpbGRyZW4sYj0wLG09MCx4PV8ubGVuZ3RoLHc9bi52YWx1ZTtiPHg7KXtmPWktZSxjPW8tcjtkb3tzPV9bbSsrXS52YWx1ZX13aGlsZSghcyYmbTx4KTtmb3IobD1oPXMsZz1zKnMqKHY9TWF0aC5tYXgoYy9mLGYvYykvKHcqdCkpLHA9TWF0aC5tYXgoaC9nLGcvbCk7bTx4OysrbSl7aWYocys9dT1fW21dLnZhbHVlLHU8bCYmKGw9dSksdT5oJiYoaD11KSxnPXMqcyp2LChkPU1hdGgubWF4KGgvZyxnL2wpKT5wKXtzLT11O2JyZWFrfXA9ZH15LnB1c2goYT17dmFsdWU6cyxkaWNlOmY8YyxjaGlsZHJlbjpfLnNsaWNlKGIsbSl9KSxhLmRpY2U/RGwoYSxlLHIsaSx3P3IrPWMqcy93Om8pOlZsKGEsZSxyLHc/ZSs9ZipzL3c6aSxvKSx3LT1zLGI9bX1yZXR1cm4geX12YXIgWmw9ZnVuY3Rpb24gdChuKXtmdW5jdGlvbiBlKHQsZSxyLGksbyl7V2wobix0LGUscixpLG8pfXJldHVybiBlLnJhdGlvPWZ1bmN0aW9uKG4pe3JldHVybiB0KChuPStuKT4xP246MSl9LGV9KCRsKTt2YXIgUWw9ZnVuY3Rpb24gdChuKXtmdW5jdGlvbiBlKHQsZSxyLGksbyl7aWYoKGE9dC5fc3F1YXJpZnkpJiZhLnJhdGlvPT09bilmb3IodmFyIGEsdSxmLGMscyxsPS0xLGg9YS5sZW5ndGgsZD10LnZhbHVlOysrbDxoOyl7Zm9yKGY9KHU9YVtsXSkuY2hpbGRyZW4sYz11LnZhbHVlPTAscz1mLmxlbmd0aDtjPHM7KytjKXUudmFsdWUrPWZbY10udmFsdWU7dS5kaWNlP0RsKHUsZSxyLGkscis9KG8tcikqdS52YWx1ZS9kKTpWbCh1LGUscixlKz0oaS1lKSp1LnZhbHVlL2QsbyksZC09dS52YWx1ZX1lbHNlIHQuX3NxdWFyaWZ5PWE9V2wobix0LGUscixpLG8pLGEucmF0aW89bn1yZXR1cm4gZS5yYXRpbz1mdW5jdGlvbihuKXtyZXR1cm4gdCgobj0rbik+MT9uOjEpfSxlfSgkbCk7ZnVuY3Rpb24gSmwodCxuKXtyZXR1cm4gdFswXS1uWzBdfHx0WzFdLW5bMV19ZnVuY3Rpb24gS2wodCl7Zm9yKHZhciBuLGUscixpPXQubGVuZ3RoLG89WzAsMV0sYT0yLHU9Mjt1PGk7Kyt1KXtmb3IoO2E+MSYmKG49dFtvW2EtMl1dLGU9dFtvW2EtMV1dLHI9dFt1XSwoZVswXS1uWzBdKSooclsxXS1uWzFdKS0oZVsxXS1uWzFdKSooclswXS1uWzBdKTw9MCk7KS0tYTtvW2ErK109dX1yZXR1cm4gby5zbGljZSgwLGEpfWZ1bmN0aW9uIHRoKCl7cmV0dXJuIE1hdGgucmFuZG9tKCl9dmFyIG5oPWZ1bmN0aW9uIHQobil7ZnVuY3Rpb24gZSh0LGUpe3JldHVybiB0PW51bGw9PXQ/MDordCxlPW51bGw9PWU/MTorZSwxPT09YXJndW1lbnRzLmxlbmd0aD8oZT10LHQ9MCk6ZS09dCxmdW5jdGlvbigpe3JldHVybiBuKCkqZSt0fX1yZXR1cm4gZS5zb3VyY2U9dCxlfSh0aCksZWg9ZnVuY3Rpb24gdChuKXtmdW5jdGlvbiBlKHQsZSl7dmFyIHIsaTtyZXR1cm4gdD1udWxsPT10PzA6K3QsZT1udWxsPT1lPzE6K2UsZnVuY3Rpb24oKXt2YXIgbztpZihudWxsIT1yKW89cixyPW51bGw7ZWxzZSBkb3tyPTIqbigpLTEsbz0yKm4oKS0xLGk9cipyK28qb313aGlsZSghaXx8aT4xKTtyZXR1cm4gdCtlKm8qTWF0aC5zcXJ0KC0yKk1hdGgubG9nKGkpL2kpfX1yZXR1cm4gZS5zb3VyY2U9dCxlfSh0aCkscmg9ZnVuY3Rpb24gdChuKXtmdW5jdGlvbiBlKCl7dmFyIHQ9ZWguc291cmNlKG4pLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5leHAodCgpKX19cmV0dXJuIGUuc291cmNlPXQsZX0odGgpLGloPWZ1bmN0aW9uIHQobil7ZnVuY3Rpb24gZSh0KXtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIGU9MCxyPTA7cjx0OysrcillKz1uKCk7cmV0dXJuIGV9fXJldHVybiBlLnNvdXJjZT10LGV9KHRoKSxvaD1mdW5jdGlvbiB0KG4pe2Z1bmN0aW9uIGUodCl7dmFyIGU9aWguc291cmNlKG4pKHQpO3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlKCkvdH19cmV0dXJuIGUuc291cmNlPXQsZX0odGgpLGFoPWZ1bmN0aW9uIHQobil7ZnVuY3Rpb24gZSh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4tTWF0aC5sb2coMS1uKCkpL3R9fXJldHVybiBlLnNvdXJjZT10LGV9KHRoKSx1aD1BcnJheS5wcm90b3R5cGUsZmg9dWgubWFwLGNoPXVoLnNsaWNlLHNoPXtuYW1lOiJpbXBsaWNpdCJ9O2Z1bmN0aW9uIGxoKHQpe3ZhciBuPUtpKCksZT1bXSxyPXNoO2Z1bmN0aW9uIGkoaSl7dmFyIG89aSsiIixhPW4uZ2V0KG8pO2lmKCFhKXtpZihyIT09c2gpcmV0dXJuIHI7bi5zZXQobyxhPWUucHVzaChpKSl9cmV0dXJuIHRbKGEtMSkldC5sZW5ndGhdfXJldHVybiB0PW51bGw9PXQ/W106Y2guY2FsbCh0KSxpLmRvbWFpbj1mdW5jdGlvbih0KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gZS5zbGljZSgpO2U9W10sbj1LaSgpO2Zvcih2YXIgcixvLGE9LTEsdT10Lmxlbmd0aDsrK2E8dTspbi5oYXMobz0ocj10W2FdKSsiIil8fG4uc2V0KG8sZS5wdXNoKHIpKTtyZXR1cm4gaX0saS5yYW5nZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1jaC5jYWxsKG4pLGkpOnQuc2xpY2UoKX0saS51bmtub3duPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsaSk6cn0saS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGxoKCkuZG9tYWluKGUpLnJhbmdlKHQpLnVua25vd24ocil9LGl9ZnVuY3Rpb24gaGgoKXt2YXIgdCxuLGU9bGgoKS51bmtub3duKHZvaWQgMCkscj1lLmRvbWFpbixpPWUucmFuZ2Usbz1bMCwxXSxhPSExLHU9MCxmPTAsYz0uNTtmdW5jdGlvbiBzKCl7dmFyIGU9cigpLmxlbmd0aCxzPW9bMV08b1swXSxsPW9bcy0wXSxoPW9bMS1zXTt0PShoLWwpL01hdGgubWF4KDEsZS11KzIqZiksYSYmKHQ9TWF0aC5mbG9vcih0KSksbCs9KGgtbC10KihlLXUpKSpjLG49dCooMS11KSxhJiYobD1NYXRoLnJvdW5kKGwpLG49TWF0aC5yb3VuZChuKSk7dmFyIGQ9ZyhlKS5tYXAoZnVuY3Rpb24obil7cmV0dXJuIGwrdCpufSk7cmV0dXJuIGkocz9kLnJldmVyc2UoKTpkKX1yZXR1cm4gZGVsZXRlIGUudW5rbm93bixlLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocih0KSxzKCkpOnIoKX0sZS5yYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1bK3RbMF0sK3RbMV1dLHMoKSk6by5zbGljZSgpfSxlLnJhbmdlUm91bmQ9ZnVuY3Rpb24odCl7cmV0dXJuIG89Wyt0WzBdLCt0WzFdXSxhPSEwLHMoKX0sZS5iYW5kd2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4gbn0sZS5zdGVwPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LGUucm91bmQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9ISF0LHMoKSk6YX0sZS5wYWRkaW5nPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PWY9TWF0aC5tYXgoMCxNYXRoLm1pbigxLHQpKSxzKCkpOnV9LGUucGFkZGluZ0lubmVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PU1hdGgubWF4KDAsTWF0aC5taW4oMSx0KSkscygpKTp1fSxlLnBhZGRpbmdPdXRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj1NYXRoLm1heCgwLE1hdGgubWluKDEsdCkpLHMoKSk6Zn0sZS5hbGlnbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz1NYXRoLm1heCgwLE1hdGgubWluKDEsdCkpLHMoKSk6Y30sZS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGhoKCkuZG9tYWluKHIoKSkucmFuZ2Uobykucm91bmQoYSkucGFkZGluZ0lubmVyKHUpLnBhZGRpbmdPdXRlcihmKS5hbGlnbihjKX0scygpfWZ1bmN0aW9uIGRoKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX1mdW5jdGlvbiBwaCh0KXtyZXR1cm4rdH12YXIgdmg9WzAsMV07ZnVuY3Rpb24gZ2godCxuKXtyZXR1cm4obi09dD0rdCk/ZnVuY3Rpb24oZSl7cmV0dXJuKGUtdCkvbn06ZGgobil9ZnVuY3Rpb24geWgodCxuLGUscil7dmFyIGk9dFswXSxvPXRbMV0sYT1uWzBdLHU9blsxXTtyZXR1cm4gbzxpPyhpPWUobyxpKSxhPXIodSxhKSk6KGk9ZShpLG8pLGE9cihhLHUpKSxmdW5jdGlvbih0KXtyZXR1cm4gYShpKHQpKX19ZnVuY3Rpb24gX2godCxuLGUscil7dmFyIG89TWF0aC5taW4odC5sZW5ndGgsbi5sZW5ndGgpLTEsYT1uZXcgQXJyYXkobyksdT1uZXcgQXJyYXkobyksZj0tMTtmb3IodFtvXTx0WzBdJiYodD10LnNsaWNlKCkucmV2ZXJzZSgpLG49bi5zbGljZSgpLnJldmVyc2UoKSk7KytmPG87KWFbZl09ZSh0W2ZdLHRbZisxXSksdVtmXT1yKG5bZl0sbltmKzFdKTtyZXR1cm4gZnVuY3Rpb24obil7dmFyIGU9aSh0LG4sMSxvKS0xO3JldHVybiB1W2VdKGFbZV0obikpfX1mdW5jdGlvbiBiaCh0LG4pe3JldHVybiBuLmRvbWFpbih0LmRvbWFpbigpKS5yYW5nZSh0LnJhbmdlKCkpLmludGVycG9sYXRlKHQuaW50ZXJwb2xhdGUoKSkuY2xhbXAodC5jbGFtcCgpKX1mdW5jdGlvbiBtaCh0LG4pe3ZhciBlLHIsaSxvPXZoLGE9dmgsdT1tZSxmPSExO2Z1bmN0aW9uIGMoKXtyZXR1cm4gZT1NYXRoLm1pbihvLmxlbmd0aCxhLmxlbmd0aCk+Mj9faDp5aCxyPWk9bnVsbCxzfWZ1bmN0aW9uIHMobil7cmV0dXJuKHJ8fChyPWUobyxhLGY/ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKG4sZSl7dmFyIHI9dChuPStuLGU9K2UpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gdDw9bj8wOnQ+PWU/MTpyKHQpfX19KHQpOnQsdSkpKSgrbil9cmV0dXJuIHMuaW52ZXJ0PWZ1bmN0aW9uKHQpe3JldHVybihpfHwoaT1lKGEsbyxnaCxmP2Z1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihuLGUpe3ZhciByPXQobj0rbixlPStlKTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHQ8PTA/bjp0Pj0xP2U6cih0KX19fShuKTpuKSkpKCt0KX0scy5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ZmguY2FsbCh0LHBoKSxjKCkpOm8uc2xpY2UoKX0scy5yYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1jaC5jYWxsKHQpLGMoKSk6YS5zbGljZSgpfSxzLnJhbmdlUm91bmQ9ZnVuY3Rpb24odCl7cmV0dXJuIGE9Y2guY2FsbCh0KSx1PXhlLGMoKX0scy5jbGFtcD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj0hIXQsYygpKTpmfSxzLmludGVycG9sYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PXQsYygpKTp1fSxjKCl9ZnVuY3Rpb24geGgobil7dmFyIGU9bi5kb21haW47cmV0dXJuIG4udGlja3M9ZnVuY3Rpb24odCl7dmFyIG49ZSgpO3JldHVybiBtKG5bMF0sbltuLmxlbmd0aC0xXSxudWxsPT10PzEwOnQpfSxuLnRpY2tGb3JtYXQ9ZnVuY3Rpb24obixyKXtyZXR1cm4gZnVuY3Rpb24obixlLHIpe3ZhciBpLG89blswXSxhPW5bbi5sZW5ndGgtMV0sdT13KG8sYSxudWxsPT1lPzEwOmUpO3N3aXRjaCgocj1iYShudWxsPT1yPyIsZiI6cikpLnR5cGUpe2Nhc2UicyI6dmFyIGY9TWF0aC5tYXgoTWF0aC5hYnMobyksTWF0aC5hYnMoYSkpO3JldHVybiBudWxsIT1yLnByZWNpc2lvbnx8aXNOYU4oaT1rYSh1LGYpKXx8KHIucHJlY2lzaW9uPWkpLHQuZm9ybWF0UHJlZml4KHIsZik7Y2FzZSIiOmNhc2UiZSI6Y2FzZSJnIjpjYXNlInAiOmNhc2UiciI6bnVsbCE9ci5wcmVjaXNpb258fGlzTmFOKGk9Q2EodSxNYXRoLm1heChNYXRoLmFicyhvKSxNYXRoLmFicyhhKSkpKXx8KHIucHJlY2lzaW9uPWktKCJlIj09PXIudHlwZSkpO2JyZWFrO2Nhc2UiZiI6Y2FzZSIlIjpudWxsIT1yLnByZWNpc2lvbnx8aXNOYU4oaT1FYSh1KSl8fChyLnByZWNpc2lvbj1pLTIqKCIlIj09PXIudHlwZSkpfXJldHVybiB0LmZvcm1hdChyKX0oZSgpLG4scil9LG4ubmljZT1mdW5jdGlvbih0KXtudWxsPT10JiYodD0xMCk7dmFyIHIsaT1lKCksbz0wLGE9aS5sZW5ndGgtMSx1PWlbb10sZj1pW2FdO3JldHVybiBmPHUmJihyPXUsdT1mLGY9cixyPW8sbz1hLGE9ciksKHI9eCh1LGYsdCkpPjA/cj14KHU9TWF0aC5mbG9vcih1L3IpKnIsZj1NYXRoLmNlaWwoZi9yKSpyLHQpOnI8MCYmKHI9eCh1PU1hdGguY2VpbCh1KnIpL3IsZj1NYXRoLmZsb29yKGYqcikvcix0KSkscj4wPyhpW29dPU1hdGguZmxvb3IodS9yKSpyLGlbYV09TWF0aC5jZWlsKGYvcikqcixlKGkpKTpyPDAmJihpW29dPU1hdGguY2VpbCh1KnIpL3IsaVthXT1NYXRoLmZsb29yKGYqcikvcixlKGkpKSxufSxufWZ1bmN0aW9uIHdoKHQsbil7dmFyIGUscj0wLGk9KHQ9dC5zbGljZSgpKS5sZW5ndGgtMSxvPXRbcl0sYT10W2ldO3JldHVybiBhPG8mJihlPXIscj1pLGk9ZSxlPW8sbz1hLGE9ZSksdFtyXT1uLmZsb29yKG8pLHRbaV09bi5jZWlsKGEpLHR9ZnVuY3Rpb24gTWgodCxuKXtyZXR1cm4obj1NYXRoLmxvZyhuL3QpKT9mdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5sb2coZS90KS9ufTpkaChuKX1mdW5jdGlvbiBBaCh0LG4pe3JldHVybiB0PDA/ZnVuY3Rpb24oZSl7cmV0dXJuLU1hdGgucG93KC1uLGUpKk1hdGgucG93KC10LDEtZSl9OmZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLnBvdyhuLGUpKk1hdGgucG93KHQsMS1lKX19ZnVuY3Rpb24gVGgodCl7cmV0dXJuIGlzRmluaXRlKHQpPysoIjFlIit0KTp0PDA/MDp0fWZ1bmN0aW9uIE5oKHQpe3JldHVybiAxMD09PXQ/VGg6dD09PU1hdGguRT9NYXRoLmV4cDpmdW5jdGlvbihuKXtyZXR1cm4gTWF0aC5wb3codCxuKX19ZnVuY3Rpb24gU2godCl7cmV0dXJuIHQ9PT1NYXRoLkU/TWF0aC5sb2c6MTA9PT10JiZNYXRoLmxvZzEwfHwyPT09dCYmTWF0aC5sb2cyfHwodD1NYXRoLmxvZyh0KSxmdW5jdGlvbihuKXtyZXR1cm4gTWF0aC5sb2cobikvdH0pfWZ1bmN0aW9uIEVoKHQpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4tdCgtbil9fWZ1bmN0aW9uIGtoKHQsbil7cmV0dXJuIHQ8MD8tTWF0aC5wb3coLXQsbik6TWF0aC5wb3codCxuKX1mdW5jdGlvbiBDaCgpe3ZhciB0PTEsbj1taChmdW5jdGlvbihuLGUpe3JldHVybihlPWtoKGUsdCktKG49a2gobix0KSkpP2Z1bmN0aW9uKHIpe3JldHVybihraChyLHQpLW4pL2V9OmRoKGUpfSxmdW5jdGlvbihuLGUpe3JldHVybiBlPWtoKGUsdCktKG49a2gobix0KSksZnVuY3Rpb24ocil7cmV0dXJuIGtoKG4rZSpyLDEvdCl9fSksZT1uLmRvbWFpbjtyZXR1cm4gbi5leHBvbmVudD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0rbixlKGUoKSkpOnR9LG4uY29weT1mdW5jdGlvbigpe3JldHVybiBiaChuLENoKCkuZXhwb25lbnQodCkpfSx4aChuKX12YXIgUGg9bmV3IERhdGUsemg9bmV3IERhdGU7ZnVuY3Rpb24gUmgodCxuLGUscil7ZnVuY3Rpb24gaShuKXtyZXR1cm4gdChuPW5ldyBEYXRlKCtuKSksbn1yZXR1cm4gaS5mbG9vcj1pLGkuY2VpbD1mdW5jdGlvbihlKXtyZXR1cm4gdChlPW5ldyBEYXRlKGUtMSkpLG4oZSwxKSx0KGUpLGV9LGkucm91bmQ9ZnVuY3Rpb24odCl7dmFyIG49aSh0KSxlPWkuY2VpbCh0KTtyZXR1cm4gdC1uPGUtdD9uOmV9LGkub2Zmc2V0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4odD1uZXcgRGF0ZSgrdCksbnVsbD09ZT8xOk1hdGguZmxvb3IoZSkpLHR9LGkucmFuZ2U9ZnVuY3Rpb24oZSxyLG8pe3ZhciBhLHU9W107aWYoZT1pLmNlaWwoZSksbz1udWxsPT1vPzE6TWF0aC5mbG9vcihvKSwhKGU8ciYmbz4wKSlyZXR1cm4gdTtkb3t1LnB1c2goYT1uZXcgRGF0ZSgrZSkpLG4oZSxvKSx0KGUpfXdoaWxlKGE8ZSYmZTxyKTtyZXR1cm4gdX0saS5maWx0ZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIFJoKGZ1bmN0aW9uKG4pe2lmKG4+PW4pZm9yKDt0KG4pLCFlKG4pOyluLnNldFRpbWUobi0xKX0sZnVuY3Rpb24odCxyKXtpZih0Pj10KWlmKHI8MClmb3IoOysrcjw9MDspZm9yKDtuKHQsLTEpLCFlKHQpOyk7ZWxzZSBmb3IoOy0tcj49MDspZm9yKDtuKHQsMSksIWUodCk7KTt9KX0sZSYmKGkuY291bnQ9ZnVuY3Rpb24obixyKXtyZXR1cm4gUGguc2V0VGltZSgrbiksemguc2V0VGltZSgrciksdChQaCksdCh6aCksTWF0aC5mbG9vcihlKFBoLHpoKSl9LGkuZXZlcnk9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9TWF0aC5mbG9vcih0KSxpc0Zpbml0ZSh0KSYmdD4wP3Q+MT9pLmZpbHRlcihyP2Z1bmN0aW9uKG4pe3JldHVybiByKG4pJXQ9PTB9OmZ1bmN0aW9uKG4pe3JldHVybiBpLmNvdW50KDAsbikldD09MH0pOmk6bnVsbH0pLGl9dmFyIExoPVJoKGZ1bmN0aW9uKCl7fSxmdW5jdGlvbih0LG4pe3Quc2V0VGltZSgrdCtuKX0sZnVuY3Rpb24odCxuKXtyZXR1cm4gbi10fSk7TGguZXZlcnk9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9TWF0aC5mbG9vcih0KSxpc0Zpbml0ZSh0KSYmdD4wP3Q+MT9SaChmdW5jdGlvbihuKXtuLnNldFRpbWUoTWF0aC5mbG9vcihuL3QpKnQpfSxmdW5jdGlvbihuLGUpe24uc2V0VGltZSgrbitlKnQpfSxmdW5jdGlvbihuLGUpe3JldHVybihlLW4pL3R9KTpMaDpudWxsfTt2YXIgRGg9TGgucmFuZ2UsVWg9NmU0LHFoPTYwNDhlNSxPaD1SaChmdW5jdGlvbih0KXt0LnNldFRpbWUoMWUzKk1hdGguZmxvb3IodC8xZTMpKX0sZnVuY3Rpb24odCxuKXt0LnNldFRpbWUoK3QrMWUzKm4pfSxmdW5jdGlvbih0LG4pe3JldHVybihuLXQpLzFlM30sZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDU2Vjb25kcygpfSksWWg9T2gucmFuZ2UsQmg9UmgoZnVuY3Rpb24odCl7dC5zZXRUaW1lKE1hdGguZmxvb3IodC9VaCkqVWgpfSxmdW5jdGlvbih0LG4pe3Quc2V0VGltZSgrdCtuKlVoKX0sZnVuY3Rpb24odCxuKXtyZXR1cm4obi10KS9VaH0sZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0TWludXRlcygpfSksRmg9QmgucmFuZ2UsSWg9UmgoZnVuY3Rpb24odCl7dmFyIG49dC5nZXRUaW1lem9uZU9mZnNldCgpKlVoJTM2ZTU7bjwwJiYobis9MzZlNSksdC5zZXRUaW1lKDM2ZTUqTWF0aC5mbG9vcigoK3QtbikvMzZlNSkrbil9LGZ1bmN0aW9uKHQsbil7dC5zZXRUaW1lKCt0KzM2ZTUqbil9LGZ1bmN0aW9uKHQsbil7cmV0dXJuKG4tdCkvMzZlNX0sZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0SG91cnMoKX0pLEhoPUloLnJhbmdlLGpoPVJoKGZ1bmN0aW9uKHQpe3Quc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQsbil7dC5zZXREYXRlKHQuZ2V0RGF0ZSgpK24pfSxmdW5jdGlvbih0LG4pe3JldHVybihuLXQtKG4uZ2V0VGltZXpvbmVPZmZzZXQoKS10LmdldFRpbWV6b25lT2Zmc2V0KCkpKlVoKS84NjRlNX0sZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0RGF0ZSgpLTF9KSxYaD1qaC5yYW5nZTtmdW5jdGlvbiBHaCh0KXtyZXR1cm4gUmgoZnVuY3Rpb24obil7bi5zZXREYXRlKG4uZ2V0RGF0ZSgpLShuLmdldERheSgpKzctdCklNyksbi5zZXRIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24odCxuKXt0LnNldERhdGUodC5nZXREYXRlKCkrNypuKX0sZnVuY3Rpb24odCxuKXtyZXR1cm4obi10LShuLmdldFRpbWV6b25lT2Zmc2V0KCktdC5nZXRUaW1lem9uZU9mZnNldCgpKSpVaCkvcWh9KX12YXIgVmg9R2goMCksJGg9R2goMSksV2g9R2goMiksWmg9R2goMyksUWg9R2goNCksSmg9R2goNSksS2g9R2goNiksdGQ9VmgucmFuZ2UsbmQ9JGgucmFuZ2UsZWQ9V2gucmFuZ2UscmQ9WmgucmFuZ2UsaWQ9UWgucmFuZ2Usb2Q9SmgucmFuZ2UsYWQ9S2gucmFuZ2UsdWQ9UmgoZnVuY3Rpb24odCl7dC5zZXREYXRlKDEpLHQuc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQsbil7dC5zZXRNb250aCh0LmdldE1vbnRoKCkrbil9LGZ1bmN0aW9uKHQsbil7cmV0dXJuIG4uZ2V0TW9udGgoKS10LmdldE1vbnRoKCkrMTIqKG4uZ2V0RnVsbFllYXIoKS10LmdldEZ1bGxZZWFyKCkpfSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRNb250aCgpfSksZmQ9dWQucmFuZ2UsY2Q9UmgoZnVuY3Rpb24odCl7dC5zZXRNb250aCgwLDEpLHQuc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQsbil7dC5zZXRGdWxsWWVhcih0LmdldEZ1bGxZZWFyKCkrbil9LGZ1bmN0aW9uKHQsbil7cmV0dXJuIG4uZ2V0RnVsbFllYXIoKS10LmdldEZ1bGxZZWFyKCl9LGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldEZ1bGxZZWFyKCl9KTtjZC5ldmVyeT1mdW5jdGlvbih0KXtyZXR1cm4gaXNGaW5pdGUodD1NYXRoLmZsb29yKHQpKSYmdD4wP1JoKGZ1bmN0aW9uKG4pe24uc2V0RnVsbFllYXIoTWF0aC5mbG9vcihuLmdldEZ1bGxZZWFyKCkvdCkqdCksbi5zZXRNb250aCgwLDEpLG4uc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKG4sZSl7bi5zZXRGdWxsWWVhcihuLmdldEZ1bGxZZWFyKCkrZSp0KX0pOm51bGx9O3ZhciBzZD1jZC5yYW5nZSxsZD1SaChmdW5jdGlvbih0KXt0LnNldFVUQ1NlY29uZHMoMCwwKX0sZnVuY3Rpb24odCxuKXt0LnNldFRpbWUoK3QrbipVaCl9LGZ1bmN0aW9uKHQsbil7cmV0dXJuKG4tdCkvVWh9LGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ01pbnV0ZXMoKX0pLGhkPWxkLnJhbmdlLGRkPVJoKGZ1bmN0aW9uKHQpe3Quc2V0VVRDTWludXRlcygwLDAsMCl9LGZ1bmN0aW9uKHQsbil7dC5zZXRUaW1lKCt0KzM2ZTUqbil9LGZ1bmN0aW9uKHQsbil7cmV0dXJuKG4tdCkvMzZlNX0sZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDSG91cnMoKX0pLHBkPWRkLnJhbmdlLHZkPVJoKGZ1bmN0aW9uKHQpe3Quc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQsbil7dC5zZXRVVENEYXRlKHQuZ2V0VVRDRGF0ZSgpK24pfSxmdW5jdGlvbih0LG4pe3JldHVybihuLXQpLzg2NGU1fSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENEYXRlKCktMX0pLGdkPXZkLnJhbmdlO2Z1bmN0aW9uIHlkKHQpe3JldHVybiBSaChmdW5jdGlvbihuKXtuLnNldFVUQ0RhdGUobi5nZXRVVENEYXRlKCktKG4uZ2V0VVRDRGF5KCkrNy10KSU3KSxuLnNldFVUQ0hvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LG4pe3Quc2V0VVRDRGF0ZSh0LmdldFVUQ0RhdGUoKSs3Km4pfSxmdW5jdGlvbih0LG4pe3JldHVybihuLXQpL3FofSl9dmFyIF9kPXlkKDApLGJkPXlkKDEpLG1kPXlkKDIpLHhkPXlkKDMpLHdkPXlkKDQpLE1kPXlkKDUpLEFkPXlkKDYpLFRkPV9kLnJhbmdlLE5kPWJkLnJhbmdlLFNkPW1kLnJhbmdlLEVkPXhkLnJhbmdlLGtkPXdkLnJhbmdlLENkPU1kLnJhbmdlLFBkPUFkLnJhbmdlLHpkPVJoKGZ1bmN0aW9uKHQpe3Quc2V0VVRDRGF0ZSgxKSx0LnNldFVUQ0hvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LG4pe3Quc2V0VVRDTW9udGgodC5nZXRVVENNb250aCgpK24pfSxmdW5jdGlvbih0LG4pe3JldHVybiBuLmdldFVUQ01vbnRoKCktdC5nZXRVVENNb250aCgpKzEyKihuLmdldFVUQ0Z1bGxZZWFyKCktdC5nZXRVVENGdWxsWWVhcigpKX0sZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDTW9udGgoKX0pLFJkPXpkLnJhbmdlLExkPVJoKGZ1bmN0aW9uKHQpe3Quc2V0VVRDTW9udGgoMCwxKSx0LnNldFVUQ0hvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LG4pe3Quc2V0VVRDRnVsbFllYXIodC5nZXRVVENGdWxsWWVhcigpK24pfSxmdW5jdGlvbih0LG4pe3JldHVybiBuLmdldFVUQ0Z1bGxZZWFyKCktdC5nZXRVVENGdWxsWWVhcigpfSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENGdWxsWWVhcigpfSk7TGQuZXZlcnk9ZnVuY3Rpb24odCl7cmV0dXJuIGlzRmluaXRlKHQ9TWF0aC5mbG9vcih0KSkmJnQ+MD9SaChmdW5jdGlvbihuKXtuLnNldFVUQ0Z1bGxZZWFyKE1hdGguZmxvb3Iobi5nZXRVVENGdWxsWWVhcigpL3QpKnQpLG4uc2V0VVRDTW9udGgoMCwxKSxuLnNldFVUQ0hvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihuLGUpe24uc2V0VVRDRnVsbFllYXIobi5nZXRVVENGdWxsWWVhcigpK2UqdCl9KTpudWxsfTt2YXIgRGQ9TGQucmFuZ2U7ZnVuY3Rpb24gVWQodCl7aWYoMDw9dC55JiZ0Lnk8MTAwKXt2YXIgbj1uZXcgRGF0ZSgtMSx0Lm0sdC5kLHQuSCx0Lk0sdC5TLHQuTCk7cmV0dXJuIG4uc2V0RnVsbFllYXIodC55KSxufXJldHVybiBuZXcgRGF0ZSh0LnksdC5tLHQuZCx0LkgsdC5NLHQuUyx0LkwpfWZ1bmN0aW9uIHFkKHQpe2lmKDA8PXQueSYmdC55PDEwMCl7dmFyIG49bmV3IERhdGUoRGF0ZS5VVEMoLTEsdC5tLHQuZCx0LkgsdC5NLHQuUyx0LkwpKTtyZXR1cm4gbi5zZXRVVENGdWxsWWVhcih0LnkpLG59cmV0dXJuIG5ldyBEYXRlKERhdGUuVVRDKHQueSx0Lm0sdC5kLHQuSCx0Lk0sdC5TLHQuTCkpfWZ1bmN0aW9uIE9kKHQpe3JldHVybnt5OnQsbTowLGQ6MSxIOjAsTTowLFM6MCxMOjB9fWZ1bmN0aW9uIFlkKHQpe3ZhciBuPXQuZGF0ZVRpbWUsZT10LmRhdGUscj10LnRpbWUsaT10LnBlcmlvZHMsbz10LmRheXMsYT10LnNob3J0RGF5cyx1PXQubW9udGhzLGY9dC5zaG9ydE1vbnRocyxjPVZkKGkpLHM9JGQoaSksbD1WZChvKSxoPSRkKG8pLGQ9VmQoYSkscD0kZChhKSx2PVZkKHUpLGc9JGQodSkseT1WZChmKSxfPSRkKGYpLGI9e2E6ZnVuY3Rpb24odCl7cmV0dXJuIGFbdC5nZXREYXkoKV19LEE6ZnVuY3Rpb24odCl7cmV0dXJuIG9bdC5nZXREYXkoKV19LGI6ZnVuY3Rpb24odCl7cmV0dXJuIGZbdC5nZXRNb250aCgpXX0sQjpmdW5jdGlvbih0KXtyZXR1cm4gdVt0LmdldE1vbnRoKCldfSxjOm51bGwsZDpwcCxlOnBwLGY6YnAsSDp2cCxJOmdwLGo6eXAsTDpfcCxtOm1wLE06eHAscDpmdW5jdGlvbih0KXtyZXR1cm4gaVsrKHQuZ2V0SG91cnMoKT49MTIpXX0sUTpXcCxzOlpwLFM6d3AsdTpNcCxVOkFwLFY6VHAsdzpOcCxXOlNwLHg6bnVsbCxYOm51bGwseTpFcCxZOmtwLFo6Q3AsIiUiOiRwfSxtPXthOmZ1bmN0aW9uKHQpe3JldHVybiBhW3QuZ2V0VVRDRGF5KCldfSxBOmZ1bmN0aW9uKHQpe3JldHVybiBvW3QuZ2V0VVRDRGF5KCldfSxiOmZ1bmN0aW9uKHQpe3JldHVybiBmW3QuZ2V0VVRDTW9udGgoKV19LEI6ZnVuY3Rpb24odCl7cmV0dXJuIHVbdC5nZXRVVENNb250aCgpXX0sYzpudWxsLGQ6UHAsZTpQcCxmOlVwLEg6enAsSTpScCxqOkxwLEw6RHAsbTpxcCxNOk9wLHA6ZnVuY3Rpb24odCl7cmV0dXJuIGlbKyh0LmdldFVUQ0hvdXJzKCk+PTEyKV19LFE6V3AsczpacCxTOllwLHU6QnAsVTpGcCxWOklwLHc6SHAsVzpqcCx4Om51bGwsWDpudWxsLHk6WHAsWTpHcCxaOlZwLCIlIjokcH0seD17YTpmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZC5leGVjKG4uc2xpY2UoZSkpO3JldHVybiByPyh0Lnc9cFtyWzBdLnRvTG93ZXJDYXNlKCldLGUrclswXS5sZW5ndGgpOi0xfSxBOmZ1bmN0aW9uKHQsbixlKXt2YXIgcj1sLmV4ZWMobi5zbGljZShlKSk7cmV0dXJuIHI/KHQudz1oW3JbMF0udG9Mb3dlckNhc2UoKV0sZStyWzBdLmxlbmd0aCk6LTF9LGI6ZnVuY3Rpb24odCxuLGUpe3ZhciByPXkuZXhlYyhuLnNsaWNlKGUpKTtyZXR1cm4gcj8odC5tPV9bclswXS50b0xvd2VyQ2FzZSgpXSxlK3JbMF0ubGVuZ3RoKTotMX0sQjpmdW5jdGlvbih0LG4sZSl7dmFyIHI9di5leGVjKG4uc2xpY2UoZSkpO3JldHVybiByPyh0Lm09Z1tyWzBdLnRvTG93ZXJDYXNlKCldLGUrclswXS5sZW5ndGgpOi0xfSxjOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gQSh0LG4sZSxyKX0sZDppcCxlOmlwLGY6c3AsSDphcCxJOmFwLGo6b3AsTDpjcCxtOnJwLE06dXAscDpmdW5jdGlvbih0LG4sZSl7dmFyIHI9Yy5leGVjKG4uc2xpY2UoZSkpO3JldHVybiByPyh0LnA9c1tyWzBdLnRvTG93ZXJDYXNlKCldLGUrclswXS5sZW5ndGgpOi0xfSxROmhwLHM6ZHAsUzpmcCx1OlpkLFU6UWQsVjpKZCx3OldkLFc6S2QseDpmdW5jdGlvbih0LG4scil7cmV0dXJuIEEodCxlLG4scil9LFg6ZnVuY3Rpb24odCxuLGUpe3JldHVybiBBKHQscixuLGUpfSx5Om5wLFk6dHAsWjplcCwiJSI6bHB9O2Z1bmN0aW9uIHcodCxuKXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHIsaSxvLGE9W10sdT0tMSxmPTAsYz10Lmxlbmd0aDtmb3IoZSBpbnN0YW5jZW9mIERhdGV8fChlPW5ldyBEYXRlKCtlKSk7Kyt1PGM7KTM3PT09dC5jaGFyQ29kZUF0KHUpJiYoYS5wdXNoKHQuc2xpY2UoZix1KSksbnVsbCE9KGk9RmRbcj10LmNoYXJBdCgrK3UpXSk/cj10LmNoYXJBdCgrK3UpOmk9ImUiPT09cj8iICI6IjAiLChvPW5bcl0pJiYocj1vKGUsaSkpLGEucHVzaChyKSxmPXUrMSk7cmV0dXJuIGEucHVzaCh0LnNsaWNlKGYsdSkpLGEuam9pbigiIil9fWZ1bmN0aW9uIE0odCxuKXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHIsaSxvPU9kKDE5MDApO2lmKEEobyx0LGUrPSIiLDApIT1lLmxlbmd0aClyZXR1cm4gbnVsbDtpZigiUSJpbiBvKXJldHVybiBuZXcgRGF0ZShvLlEpO2lmKCJwImluIG8mJihvLkg9by5IJTEyKzEyKm8ucCksIlYiaW4gbyl7aWYoby5WPDF8fG8uVj41MylyZXR1cm4gbnVsbDsidyJpbiBvfHwoby53PTEpLCJaImluIG8/KGk9KHI9cWQoT2Qoby55KSkpLmdldFVUQ0RheSgpLHI9aT40fHwwPT09aT9iZC5jZWlsKHIpOmJkKHIpLHI9dmQub2Zmc2V0KHIsNyooby5WLTEpKSxvLnk9ci5nZXRVVENGdWxsWWVhcigpLG8ubT1yLmdldFVUQ01vbnRoKCksby5kPXIuZ2V0VVRDRGF0ZSgpKyhvLncrNiklNyk6KGk9KHI9bihPZChvLnkpKSkuZ2V0RGF5KCkscj1pPjR8fDA9PT1pPyRoLmNlaWwocik6JGgocikscj1qaC5vZmZzZXQociw3KihvLlYtMSkpLG8ueT1yLmdldEZ1bGxZZWFyKCksby5tPXIuZ2V0TW9udGgoKSxvLmQ9ci5nZXREYXRlKCkrKG8udys2KSU3KX1lbHNlKCJXImluIG98fCJVImluIG8pJiYoInciaW4gb3x8KG8udz0idSJpbiBvP28udSU3OiJXImluIG8/MTowKSxpPSJaImluIG8/cWQoT2Qoby55KSkuZ2V0VVRDRGF5KCk6bihPZChvLnkpKS5nZXREYXkoKSxvLm09MCxvLmQ9IlciaW4gbz8oby53KzYpJTcrNypvLlctKGkrNSklNzpvLncrNypvLlUtKGkrNiklNyk7cmV0dXJuIloiaW4gbz8oby5IKz1vLlovMTAwfDAsby5NKz1vLlolMTAwLHFkKG8pKTpuKG8pfX1mdW5jdGlvbiBBKHQsbixlLHIpe2Zvcih2YXIgaSxvLGE9MCx1PW4ubGVuZ3RoLGY9ZS5sZW5ndGg7YTx1Oyl7aWYocj49ZilyZXR1cm4tMTtpZigzNz09PShpPW4uY2hhckNvZGVBdChhKyspKSl7aWYoaT1uLmNoYXJBdChhKyspLCEobz14W2kgaW4gRmQ/bi5jaGFyQXQoYSsrKTppXSl8fChyPW8odCxlLHIpKTwwKXJldHVybi0xfWVsc2UgaWYoaSE9ZS5jaGFyQ29kZUF0KHIrKykpcmV0dXJuLTF9cmV0dXJuIHJ9cmV0dXJuIGIueD13KGUsYiksYi5YPXcocixiKSxiLmM9dyhuLGIpLG0ueD13KGUsbSksbS5YPXcocixtKSxtLmM9dyhuLG0pLHtmb3JtYXQ6ZnVuY3Rpb24odCl7dmFyIG49dyh0Kz0iIixiKTtyZXR1cm4gbi50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0fSxufSxwYXJzZTpmdW5jdGlvbih0KXt2YXIgbj1NKHQrPSIiLFVkKTtyZXR1cm4gbi50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0fSxufSx1dGNGb3JtYXQ6ZnVuY3Rpb24odCl7dmFyIG49dyh0Kz0iIixtKTtyZXR1cm4gbi50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0fSxufSx1dGNQYXJzZTpmdW5jdGlvbih0KXt2YXIgbj1NKHQscWQpO3JldHVybiBuLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LG59fX12YXIgQmQsRmQ9eyItIjoiIixfOiIgIiwwOiIwIn0sSWQ9L15ccypcZCsvLEhkPS9eJS8samQ9L1tcXF4kKis/fFtcXSgpLnt9XS9nO2Z1bmN0aW9uIFhkKHQsbixlKXt2YXIgcj10PDA/Ii0iOiIiLGk9KHI/LXQ6dCkrIiIsbz1pLmxlbmd0aDtyZXR1cm4gcisobzxlP25ldyBBcnJheShlLW8rMSkuam9pbihuKStpOmkpfWZ1bmN0aW9uIEdkKHQpe3JldHVybiB0LnJlcGxhY2UoamQsIlxcJCYiKX1mdW5jdGlvbiBWZCh0KXtyZXR1cm4gbmV3IFJlZ0V4cCgiXig/OiIrdC5tYXAoR2QpLmpvaW4oInwiKSsiKSIsImkiKX1mdW5jdGlvbiAkZCh0KXtmb3IodmFyIG49e30sZT0tMSxyPXQubGVuZ3RoOysrZTxyOyluW3RbZV0udG9Mb3dlckNhc2UoKV09ZTtyZXR1cm4gbn1mdW5jdGlvbiBXZCh0LG4sZSl7dmFyIHI9SWQuZXhlYyhuLnNsaWNlKGUsZSsxKSk7cmV0dXJuIHI/KHQudz0rclswXSxlK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBaZCh0LG4sZSl7dmFyIHI9SWQuZXhlYyhuLnNsaWNlKGUsZSsxKSk7cmV0dXJuIHI/KHQudT0rclswXSxlK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBRZCh0LG4sZSl7dmFyIHI9SWQuZXhlYyhuLnNsaWNlKGUsZSsyKSk7cmV0dXJuIHI/KHQuVT0rclswXSxlK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBKZCh0LG4sZSl7dmFyIHI9SWQuZXhlYyhuLnNsaWNlKGUsZSsyKSk7cmV0dXJuIHI/KHQuVj0rclswXSxlK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBLZCh0LG4sZSl7dmFyIHI9SWQuZXhlYyhuLnNsaWNlKGUsZSsyKSk7cmV0dXJuIHI/KHQuVz0rclswXSxlK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiB0cCh0LG4sZSl7dmFyIHI9SWQuZXhlYyhuLnNsaWNlKGUsZSs0KSk7cmV0dXJuIHI/KHQueT0rclswXSxlK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBucCh0LG4sZSl7dmFyIHI9SWQuZXhlYyhuLnNsaWNlKGUsZSsyKSk7cmV0dXJuIHI/KHQueT0rclswXSsoK3JbMF0+Njg/MTkwMDoyZTMpLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGVwKHQsbixlKXt2YXIgcj0vXihaKXwoWystXVxkXGQpKD86Oj8oXGRcZCkpPy8uZXhlYyhuLnNsaWNlKGUsZSs2KSk7cmV0dXJuIHI/KHQuWj1yWzFdPzA6LShyWzJdKyhyWzNdfHwiMDAiKSksZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gcnAodCxuLGUpe3ZhciByPUlkLmV4ZWMobi5zbGljZShlLGUrMikpO3JldHVybiByPyh0Lm09clswXS0xLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGlwKHQsbixlKXt2YXIgcj1JZC5leGVjKG4uc2xpY2UoZSxlKzIpKTtyZXR1cm4gcj8odC5kPStyWzBdLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIG9wKHQsbixlKXt2YXIgcj1JZC5leGVjKG4uc2xpY2UoZSxlKzMpKTtyZXR1cm4gcj8odC5tPTAsdC5kPStyWzBdLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGFwKHQsbixlKXt2YXIgcj1JZC5leGVjKG4uc2xpY2UoZSxlKzIpKTtyZXR1cm4gcj8odC5IPStyWzBdLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHVwKHQsbixlKXt2YXIgcj1JZC5leGVjKG4uc2xpY2UoZSxlKzIpKTtyZXR1cm4gcj8odC5NPStyWzBdLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGZwKHQsbixlKXt2YXIgcj1JZC5leGVjKG4uc2xpY2UoZSxlKzIpKTtyZXR1cm4gcj8odC5TPStyWzBdLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGNwKHQsbixlKXt2YXIgcj1JZC5leGVjKG4uc2xpY2UoZSxlKzMpKTtyZXR1cm4gcj8odC5MPStyWzBdLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHNwKHQsbixlKXt2YXIgcj1JZC5leGVjKG4uc2xpY2UoZSxlKzYpKTtyZXR1cm4gcj8odC5MPU1hdGguZmxvb3IoclswXS8xZTMpLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGxwKHQsbixlKXt2YXIgcj1IZC5leGVjKG4uc2xpY2UoZSxlKzEpKTtyZXR1cm4gcj9lK3JbMF0ubGVuZ3RoOi0xfWZ1bmN0aW9uIGhwKHQsbixlKXt2YXIgcj1JZC5leGVjKG4uc2xpY2UoZSkpO3JldHVybiByPyh0LlE9K3JbMF0sZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gZHAodCxuLGUpe3ZhciByPUlkLmV4ZWMobi5zbGljZShlKSk7cmV0dXJuIHI/KHQuUT0xZTMqK3JbMF0sZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gcHAodCxuKXtyZXR1cm4gWGQodC5nZXREYXRlKCksbiwyKX1mdW5jdGlvbiB2cCh0LG4pe3JldHVybiBYZCh0LmdldEhvdXJzKCksbiwyKX1mdW5jdGlvbiBncCh0LG4pe3JldHVybiBYZCh0LmdldEhvdXJzKCklMTJ8fDEyLG4sMil9ZnVuY3Rpb24geXAodCxuKXtyZXR1cm4gWGQoMStqaC5jb3VudChjZCh0KSx0KSxuLDMpfWZ1bmN0aW9uIF9wKHQsbil7cmV0dXJuIFhkKHQuZ2V0TWlsbGlzZWNvbmRzKCksbiwzKX1mdW5jdGlvbiBicCh0LG4pe3JldHVybiBfcCh0LG4pKyIwMDAifWZ1bmN0aW9uIG1wKHQsbil7cmV0dXJuIFhkKHQuZ2V0TW9udGgoKSsxLG4sMil9ZnVuY3Rpb24geHAodCxuKXtyZXR1cm4gWGQodC5nZXRNaW51dGVzKCksbiwyKX1mdW5jdGlvbiB3cCh0LG4pe3JldHVybiBYZCh0LmdldFNlY29uZHMoKSxuLDIpfWZ1bmN0aW9uIE1wKHQpe3ZhciBuPXQuZ2V0RGF5KCk7cmV0dXJuIDA9PT1uPzc6bn1mdW5jdGlvbiBBcCh0LG4pe3JldHVybiBYZChWaC5jb3VudChjZCh0KSx0KSxuLDIpfWZ1bmN0aW9uIFRwKHQsbil7dmFyIGU9dC5nZXREYXkoKTtyZXR1cm4gdD1lPj00fHwwPT09ZT9RaCh0KTpRaC5jZWlsKHQpLFhkKFFoLmNvdW50KGNkKHQpLHQpKyg0PT09Y2QodCkuZ2V0RGF5KCkpLG4sMil9ZnVuY3Rpb24gTnAodCl7cmV0dXJuIHQuZ2V0RGF5KCl9ZnVuY3Rpb24gU3AodCxuKXtyZXR1cm4gWGQoJGguY291bnQoY2QodCksdCksbiwyKX1mdW5jdGlvbiBFcCh0LG4pe3JldHVybiBYZCh0LmdldEZ1bGxZZWFyKCklMTAwLG4sMil9ZnVuY3Rpb24ga3AodCxuKXtyZXR1cm4gWGQodC5nZXRGdWxsWWVhcigpJTFlNCxuLDQpfWZ1bmN0aW9uIENwKHQpe3ZhciBuPXQuZ2V0VGltZXpvbmVPZmZzZXQoKTtyZXR1cm4obj4wPyItIjoobio9LTEsIisiKSkrWGQobi82MHwwLCIwIiwyKStYZChuJTYwLCIwIiwyKX1mdW5jdGlvbiBQcCh0LG4pe3JldHVybiBYZCh0LmdldFVUQ0RhdGUoKSxuLDIpfWZ1bmN0aW9uIHpwKHQsbil7cmV0dXJuIFhkKHQuZ2V0VVRDSG91cnMoKSxuLDIpfWZ1bmN0aW9uIFJwKHQsbil7cmV0dXJuIFhkKHQuZ2V0VVRDSG91cnMoKSUxMnx8MTIsbiwyKX1mdW5jdGlvbiBMcCh0LG4pe3JldHVybiBYZCgxK3ZkLmNvdW50KExkKHQpLHQpLG4sMyl9ZnVuY3Rpb24gRHAodCxuKXtyZXR1cm4gWGQodC5nZXRVVENNaWxsaXNlY29uZHMoKSxuLDMpfWZ1bmN0aW9uIFVwKHQsbil7cmV0dXJuIERwKHQsbikrIjAwMCJ9ZnVuY3Rpb24gcXAodCxuKXtyZXR1cm4gWGQodC5nZXRVVENNb250aCgpKzEsbiwyKX1mdW5jdGlvbiBPcCh0LG4pe3JldHVybiBYZCh0LmdldFVUQ01pbnV0ZXMoKSxuLDIpfWZ1bmN0aW9uIFlwKHQsbil7cmV0dXJuIFhkKHQuZ2V0VVRDU2Vjb25kcygpLG4sMil9ZnVuY3Rpb24gQnAodCl7dmFyIG49dC5nZXRVVENEYXkoKTtyZXR1cm4gMD09PW4/NzpufWZ1bmN0aW9uIEZwKHQsbil7cmV0dXJuIFhkKF9kLmNvdW50KExkKHQpLHQpLG4sMil9ZnVuY3Rpb24gSXAodCxuKXt2YXIgZT10LmdldFVUQ0RheSgpO3JldHVybiB0PWU+PTR8fDA9PT1lP3dkKHQpOndkLmNlaWwodCksWGQod2QuY291bnQoTGQodCksdCkrKDQ9PT1MZCh0KS5nZXRVVENEYXkoKSksbiwyKX1mdW5jdGlvbiBIcCh0KXtyZXR1cm4gdC5nZXRVVENEYXkoKX1mdW5jdGlvbiBqcCh0LG4pe3JldHVybiBYZChiZC5jb3VudChMZCh0KSx0KSxuLDIpfWZ1bmN0aW9uIFhwKHQsbil7cmV0dXJuIFhkKHQuZ2V0VVRDRnVsbFllYXIoKSUxMDAsbiwyKX1mdW5jdGlvbiBHcCh0LG4pe3JldHVybiBYZCh0LmdldFVUQ0Z1bGxZZWFyKCklMWU0LG4sNCl9ZnVuY3Rpb24gVnAoKXtyZXR1cm4iKzAwMDAifWZ1bmN0aW9uICRwKCl7cmV0dXJuIiUifWZ1bmN0aW9uIFdwKHQpe3JldHVybit0fWZ1bmN0aW9uIFpwKHQpe3JldHVybiBNYXRoLmZsb29yKCt0LzFlMyl9ZnVuY3Rpb24gUXAobil7cmV0dXJuIEJkPVlkKG4pLHQudGltZUZvcm1hdD1CZC5mb3JtYXQsdC50aW1lUGFyc2U9QmQucGFyc2UsdC51dGNGb3JtYXQ9QmQudXRjRm9ybWF0LHQudXRjUGFyc2U9QmQudXRjUGFyc2UsQmR9UXAoe2RhdGVUaW1lOiIleCwgJVgiLGRhdGU6IiUtbS8lLWQvJVkiLHRpbWU6IiUtSTolTTolUyAlcCIscGVyaW9kczpbIkFNIiwiUE0iXSxkYXlzOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSxzaG9ydERheXM6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSxtb250aHM6WyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdLHNob3J0TW9udGhzOlsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl19KTt2YXIgSnA9RGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmc/ZnVuY3Rpb24odCl7cmV0dXJuIHQudG9JU09TdHJpbmcoKX06dC51dGNGb3JtYXQoIiVZLSVtLSVkVCVIOiVNOiVTLiVMWiIpO3ZhciBLcD0rbmV3IERhdGUoIjIwMDAtMDEtMDFUMDA6MDA6MDAuMDAwWiIpP2Z1bmN0aW9uKHQpe3ZhciBuPW5ldyBEYXRlKHQpO3JldHVybiBpc05hTihuKT9udWxsOm59OnQudXRjUGFyc2UoIiVZLSVtLSVkVCVIOiVNOiVTLiVMWiIpLHR2PTFlMyxudj02MCp0dixldj02MCpudixydj0yNCpldixpdj03KnJ2LG92PTMwKnJ2LGF2PTM2NSpydjtmdW5jdGlvbiB1dih0KXtyZXR1cm4gbmV3IERhdGUodCl9ZnVuY3Rpb24gZnYodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBEYXRlPyt0OituZXcgRGF0ZSgrdCl9ZnVuY3Rpb24gY3YodCxuLHIsaSxvLGEsdSxmLGMpe3ZhciBzPW1oKGdoLHZlKSxsPXMuaW52ZXJ0LGg9cy5kb21haW4sZD1jKCIuJUwiKSxwPWMoIjolUyIpLHY9YygiJUk6JU0iKSxnPWMoIiVJICVwIikseT1jKCIlYSAlZCIpLF89YygiJWIgJWQiKSxiPWMoIiVCIiksbT1jKCIlWSIpLHg9W1t1LDEsdHZdLFt1LDUsNSp0dl0sW3UsMTUsMTUqdHZdLFt1LDMwLDMwKnR2XSxbYSwxLG52XSxbYSw1LDUqbnZdLFthLDE1LDE1Km52XSxbYSwzMCwzMCpudl0sW28sMSxldl0sW28sMywzKmV2XSxbbyw2LDYqZXZdLFtvLDEyLDEyKmV2XSxbaSwxLHJ2XSxbaSwyLDIqcnZdLFtyLDEsaXZdLFtuLDEsb3ZdLFtuLDMsMypvdl0sW3QsMSxhdl1dO2Z1bmN0aW9uIE0oZSl7cmV0dXJuKHUoZSk8ZT9kOmEoZSk8ZT9wOm8oZSk8ZT92OmkoZSk8ZT9nOm4oZSk8ZT9yKGUpPGU/eTpfOnQoZSk8ZT9iOm0pKGUpfWZ1bmN0aW9uIEEobixyLGksbyl7aWYobnVsbD09biYmKG49MTApLCJudW1iZXIiPT10eXBlb2Ygbil7dmFyIGE9TWF0aC5hYnMoaS1yKS9uLHU9ZShmdW5jdGlvbih0KXtyZXR1cm4gdFsyXX0pLnJpZ2h0KHgsYSk7dT09PXgubGVuZ3RoPyhvPXcoci9hdixpL2F2LG4pLG49dCk6dT8obz0odT14W2EveFt1LTFdWzJdPHhbdV1bMl0vYT91LTE6dV0pWzFdLG49dVswXSk6KG89TWF0aC5tYXgodyhyLGksbiksMSksbj1mKX1yZXR1cm4gbnVsbD09bz9uOm4uZXZlcnkobyl9cmV0dXJuIHMuaW52ZXJ0PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgRGF0ZShsKHQpKX0scy5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/aChmaC5jYWxsKHQsZnYpKTpoKCkubWFwKHV2KX0scy50aWNrcz1mdW5jdGlvbih0LG4pe3ZhciBlLHI9aCgpLGk9clswXSxvPXJbci5sZW5ndGgtMV0sYT1vPGk7cmV0dXJuIGEmJihlPWksaT1vLG89ZSksZT0oZT1BKHQsaSxvLG4pKT9lLnJhbmdlKGksbysxKTpbXSxhP2UucmV2ZXJzZSgpOmV9LHMudGlja0Zvcm1hdD1mdW5jdGlvbih0LG4pe3JldHVybiBudWxsPT1uP006YyhuKX0scy5uaWNlPWZ1bmN0aW9uKHQsbil7dmFyIGU9aCgpO3JldHVybih0PUEodCxlWzBdLGVbZS5sZW5ndGgtMV0sbikpP2god2goZSx0KSk6c30scy5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGJoKHMsY3YodCxuLHIsaSxvLGEsdSxmLGMpKX0sc31mdW5jdGlvbiBzdih0KXtmb3IodmFyIG49dC5sZW5ndGgvNnwwLGU9bmV3IEFycmF5KG4pLHI9MDtyPG47KWVbcl09IiMiK3Quc2xpY2UoNipyLDYqKytyKTtyZXR1cm4gZX12YXIgbHY9c3YoIjFmNzdiNGZmN2YwZTJjYTAyY2Q2MjcyODk0NjdiZDhjNTY0YmUzNzdjMjdmN2Y3ZmJjYmQyMjE3YmVjZiIpLGh2PXN2KCI3ZmM5N2ZiZWFlZDRmZGMwODZmZmZmOTkzODZjYjBmMDAyN2ZiZjViMTc2NjY2NjYiKSxkdj1zdigiMWI5ZTc3ZDk1ZjAyNzU3MGIzZTcyOThhNjZhNjFlZTZhYjAyYTY3NjFkNjY2NjY2IikscHY9c3YoImE2Y2VlMzFmNzhiNGIyZGY4YTMzYTAyY2ZiOWE5OWUzMWExY2ZkYmY2ZmZmN2YwMGNhYjJkNjZhM2Q5YWZmZmY5OWIxNTkyOCIpLHZ2PXN2KCJmYmI0YWViM2NkZTNjY2ViYzVkZWNiZTRmZWQ5YTZmZmZmY2NlNWQ4YmRmZGRhZWNmMmYyZjIiKSxndj1zdigiYjNlMmNkZmRjZGFjY2JkNWU4ZjRjYWU0ZTZmNWM5ZmZmMmFlZjFlMmNjY2NjY2NjIikseXY9c3YoImU0MWExYzM3N2ViODRkYWY0YTk4NGVhM2ZmN2YwMGZmZmYzM2E2NTYyOGY3ODFiZjk5OTk5OSIpLF92PXN2KCI2NmMyYTVmYzhkNjI4ZGEwY2JlNzhhYzNhNmQ4NTRmZmQ5MmZlNWM0OTRiM2IzYjMiKSxidj1zdigiOGRkM2M3ZmZmZmIzYmViYWRhZmI4MDcyODBiMWQzZmRiNDYyYjNkZTY5ZmNjZGU1ZDlkOWQ5YmM4MGJkY2NlYmM1ZmZlZDZmIik7ZnVuY3Rpb24gbXYodCl7cmV0dXJuIGxlKHRbdC5sZW5ndGgtMV0pfXZhciB4dj1uZXcgQXJyYXkoMykuY29uY2F0KCJkOGIzNjVmNWY1ZjU1YWI0YWMiLCJhNjYxMWFkZmMyN2Q4MGNkYzEwMTg1NzEiLCJhNjYxMWFkZmMyN2RmNWY1ZjU4MGNkYzEwMTg1NzEiLCI4YzUxMGFkOGIzNjVmNmU4YzNjN2VhZTU1YWI0YWMwMTY2NWUiLCI4YzUxMGFkOGIzNjVmNmU4YzNmNWY1ZjVjN2VhZTU1YWI0YWMwMTY2NWUiLCI4YzUxMGFiZjgxMmRkZmMyN2RmNmU4YzNjN2VhZTU4MGNkYzEzNTk3OGYwMTY2NWUiLCI4YzUxMGFiZjgxMmRkZmMyN2RmNmU4YzNmNWY1ZjVjN2VhZTU4MGNkYzEzNTk3OGYwMTY2NWUiLCI1NDMwMDU4YzUxMGFiZjgxMmRkZmMyN2RmNmU4YzNjN2VhZTU4MGNkYzEzNTk3OGYwMTY2NWUwMDNjMzAiLCI1NDMwMDU4YzUxMGFiZjgxMmRkZmMyN2RmNmU4YzNmNWY1ZjVjN2VhZTU4MGNkYzEzNTk3OGYwMTY2NWUwMDNjMzAiKS5tYXAoc3YpLHd2PW12KHh2KSxNdj1uZXcgQXJyYXkoMykuY29uY2F0KCJhZjhkYzNmN2Y3Zjc3ZmJmN2IiLCI3YjMyOTRjMmE1Y2ZhNmRiYTAwMDg4MzciLCI3YjMyOTRjMmE1Y2ZmN2Y3ZjdhNmRiYTAwMDg4MzciLCI3NjJhODNhZjhkYzNlN2Q0ZThkOWYwZDM3ZmJmN2IxYjc4MzciLCI3NjJhODNhZjhkYzNlN2Q0ZThmN2Y3ZjdkOWYwZDM3ZmJmN2IxYjc4MzciLCI3NjJhODM5OTcwYWJjMmE1Y2ZlN2Q0ZThkOWYwZDNhNmRiYTA1YWFlNjExYjc4MzciLCI3NjJhODM5OTcwYWJjMmE1Y2ZlN2Q0ZThmN2Y3ZjdkOWYwZDNhNmRiYTA1YWFlNjExYjc4MzciLCI0MDAwNGI3NjJhODM5OTcwYWJjMmE1Y2ZlN2Q0ZThkOWYwZDNhNmRiYTA1YWFlNjExYjc4MzcwMDQ0MWIiLCI0MDAwNGI3NjJhODM5OTcwYWJjMmE1Y2ZlN2Q0ZThmN2Y3ZjdkOWYwZDNhNmRiYTA1YWFlNjExYjc4MzcwMDQ0MWIiKS5tYXAoc3YpLEF2PW12KE12KSxUdj1uZXcgQXJyYXkoMykuY29uY2F0KCJlOWEzYzlmN2Y3ZjdhMWQ3NmEiLCJkMDFjOGJmMWI2ZGFiOGUxODY0ZGFjMjYiLCJkMDFjOGJmMWI2ZGFmN2Y3ZjdiOGUxODY0ZGFjMjYiLCJjNTFiN2RlOWEzYzlmZGUwZWZlNmY1ZDBhMWQ3NmE0ZDkyMjEiLCJjNTFiN2RlOWEzYzlmZGUwZWZmN2Y3ZjdlNmY1ZDBhMWQ3NmE0ZDkyMjEiLCJjNTFiN2RkZTc3YWVmMWI2ZGFmZGUwZWZlNmY1ZDBiOGUxODY3ZmJjNDE0ZDkyMjEiLCJjNTFiN2RkZTc3YWVmMWI2ZGFmZGUwZWZmN2Y3ZjdlNmY1ZDBiOGUxODY3ZmJjNDE0ZDkyMjEiLCI4ZTAxNTJjNTFiN2RkZTc3YWVmMWI2ZGFmZGUwZWZlNmY1ZDBiOGUxODY3ZmJjNDE0ZDkyMjEyNzY0MTkiLCI4ZTAxNTJjNTFiN2RkZTc3YWVmMWI2ZGFmZGUwZWZmN2Y3ZjdlNmY1ZDBiOGUxODY3ZmJjNDE0ZDkyMjEyNzY0MTkiKS5tYXAoc3YpLE52PW12KFR2KSxTdj1uZXcgQXJyYXkoMykuY29uY2F0KCI5OThlYzNmN2Y3ZjdmMWEzNDAiLCI1ZTNjOTliMmFiZDJmZGI4NjNlNjYxMDEiLCI1ZTNjOTliMmFiZDJmN2Y3ZjdmZGI4NjNlNjYxMDEiLCI1NDI3ODg5OThlYzNkOGRhZWJmZWUwYjZmMWEzNDBiMzU4MDYiLCI1NDI3ODg5OThlYzNkOGRhZWJmN2Y3ZjdmZWUwYjZmMWEzNDBiMzU4MDYiLCI1NDI3ODg4MDczYWNiMmFiZDJkOGRhZWJmZWUwYjZmZGI4NjNlMDgyMTRiMzU4MDYiLCI1NDI3ODg4MDczYWNiMmFiZDJkOGRhZWJmN2Y3ZjdmZWUwYjZmZGI4NjNlMDgyMTRiMzU4MDYiLCIyZDAwNGI1NDI3ODg4MDczYWNiMmFiZDJkOGRhZWJmZWUwYjZmZGI4NjNlMDgyMTRiMzU4MDY3ZjNiMDgiLCIyZDAwNGI1NDI3ODg4MDczYWNiMmFiZDJkOGRhZWJmN2Y3ZjdmZWUwYjZmZGI4NjNlMDgyMTRiMzU4MDY3ZjNiMDgiKS5tYXAoc3YpLEV2PW12KFN2KSxrdj1uZXcgQXJyYXkoMykuY29uY2F0KCJlZjhhNjJmN2Y3Zjc2N2E5Y2YiLCJjYTAwMjBmNGE1ODI5MmM1ZGUwNTcxYjAiLCJjYTAwMjBmNGE1ODJmN2Y3Zjc5MmM1ZGUwNTcxYjAiLCJiMjE4MmJlZjhhNjJmZGRiYzdkMWU1ZjA2N2E5Y2YyMTY2YWMiLCJiMjE4MmJlZjhhNjJmZGRiYzdmN2Y3ZjdkMWU1ZjA2N2E5Y2YyMTY2YWMiLCJiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdkMWU1ZjA5MmM1ZGU0MzkzYzMyMTY2YWMiLCJiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdmN2Y3ZjdkMWU1ZjA5MmM1ZGU0MzkzYzMyMTY2YWMiLCI2NzAwMWZiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdkMWU1ZjA5MmM1ZGU0MzkzYzMyMTY2YWMwNTMwNjEiLCI2NzAwMWZiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdmN2Y3ZjdkMWU1ZjA5MmM1ZGU0MzkzYzMyMTY2YWMwNTMwNjEiKS5tYXAoc3YpLEN2PW12KGt2KSxQdj1uZXcgQXJyYXkoMykuY29uY2F0KCJlZjhhNjJmZmZmZmY5OTk5OTkiLCJjYTAwMjBmNGE1ODJiYWJhYmE0MDQwNDAiLCJjYTAwMjBmNGE1ODJmZmZmZmZiYWJhYmE0MDQwNDAiLCJiMjE4MmJlZjhhNjJmZGRiYzdlMGUwZTA5OTk5OTk0ZDRkNGQiLCJiMjE4MmJlZjhhNjJmZGRiYzdmZmZmZmZlMGUwZTA5OTk5OTk0ZDRkNGQiLCJiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdlMGUwZTBiYWJhYmE4Nzg3ODc0ZDRkNGQiLCJiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdmZmZmZmZlMGUwZTBiYWJhYmE4Nzg3ODc0ZDRkNGQiLCI2NzAwMWZiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdlMGUwZTBiYWJhYmE4Nzg3ODc0ZDRkNGQxYTFhMWEiLCI2NzAwMWZiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdmZmZmZmZlMGUwZTBiYWJhYmE4Nzg3ODc0ZDRkNGQxYTFhMWEiKS5tYXAoc3YpLHp2PW12KFB2KSxSdj1uZXcgQXJyYXkoMykuY29uY2F0KCJmYzhkNTlmZmZmYmY5MWJmZGIiLCJkNzE5MWNmZGFlNjFhYmQ5ZTkyYzdiYjYiLCJkNzE5MWNmZGFlNjFmZmZmYmZhYmQ5ZTkyYzdiYjYiLCJkNzMwMjdmYzhkNTlmZWUwOTBlMGYzZjg5MWJmZGI0NTc1YjQiLCJkNzMwMjdmYzhkNTlmZWUwOTBmZmZmYmZlMGYzZjg5MWJmZGI0NTc1YjQiLCJkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOTBlMGYzZjhhYmQ5ZTk3NGFkZDE0NTc1YjQiLCJkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOTBmZmZmYmZlMGYzZjhhYmQ5ZTk3NGFkZDE0NTc1YjQiLCJhNTAwMjZkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOTBlMGYzZjhhYmQ5ZTk3NGFkZDE0NTc1YjQzMTM2OTUiLCJhNTAwMjZkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOTBmZmZmYmZlMGYzZjhhYmQ5ZTk3NGFkZDE0NTc1YjQzMTM2OTUiKS5tYXAoc3YpLEx2PW12KFJ2KSxEdj1uZXcgQXJyYXkoMykuY29uY2F0KCJmYzhkNTlmZmZmYmY5MWNmNjAiLCJkNzE5MWNmZGFlNjFhNmQ5NmExYTk2NDEiLCJkNzE5MWNmZGFlNjFmZmZmYmZhNmQ5NmExYTk2NDEiLCJkNzMwMjdmYzhkNTlmZWUwOGJkOWVmOGI5MWNmNjAxYTk4NTAiLCJkNzMwMjdmYzhkNTlmZWUwOGJmZmZmYmZkOWVmOGI5MWNmNjAxYTk4NTAiLCJkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOGJkOWVmOGJhNmQ5NmE2NmJkNjMxYTk4NTAiLCJkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOGJmZmZmYmZkOWVmOGJhNmQ5NmE2NmJkNjMxYTk4NTAiLCJhNTAwMjZkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOGJkOWVmOGJhNmQ5NmE2NmJkNjMxYTk4NTAwMDY4MzciLCJhNTAwMjZkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOGJmZmZmYmZkOWVmOGJhNmQ5NmE2NmJkNjMxYTk4NTAwMDY4MzciKS5tYXAoc3YpLFV2PW12KER2KSxxdj1uZXcgQXJyYXkoMykuY29uY2F0KCJmYzhkNTlmZmZmYmY5OWQ1OTQiLCJkNzE5MWNmZGFlNjFhYmRkYTQyYjgzYmEiLCJkNzE5MWNmZGFlNjFmZmZmYmZhYmRkYTQyYjgzYmEiLCJkNTNlNGZmYzhkNTlmZWUwOGJlNmY1OTg5OWQ1OTQzMjg4YmQiLCJkNTNlNGZmYzhkNTlmZWUwOGJmZmZmYmZlNmY1OTg5OWQ1OTQzMjg4YmQiLCJkNTNlNGZmNDZkNDNmZGFlNjFmZWUwOGJlNmY1OThhYmRkYTQ2NmMyYTUzMjg4YmQiLCJkNTNlNGZmNDZkNDNmZGFlNjFmZWUwOGJmZmZmYmZlNmY1OThhYmRkYTQ2NmMyYTUzMjg4YmQiLCI5ZTAxNDJkNTNlNGZmNDZkNDNmZGFlNjFmZWUwOGJlNmY1OThhYmRkYTQ2NmMyYTUzMjg4YmQ1ZTRmYTIiLCI5ZTAxNDJkNTNlNGZmNDZkNDNmZGFlNjFmZWUwOGJmZmZmYmZlNmY1OThhYmRkYTQ2NmMyYTUzMjg4YmQ1ZTRmYTIiKS5tYXAoc3YpLE92PW12KHF2KSxZdj1uZXcgQXJyYXkoMykuY29uY2F0KCJlNWY1Zjk5OWQ4YzkyY2EyNWYiLCJlZGY4ZmJiMmUyZTI2NmMyYTQyMzhiNDUiLCJlZGY4ZmJiMmUyZTI2NmMyYTQyY2EyNWYwMDZkMmMiLCJlZGY4ZmJjY2VjZTY5OWQ4Yzk2NmMyYTQyY2EyNWYwMDZkMmMiLCJlZGY4ZmJjY2VjZTY5OWQ4Yzk2NmMyYTQ0MWFlNzYyMzhiNDUwMDU4MjQiLCJmN2ZjZmRlNWY1ZjljY2VjZTY5OWQ4Yzk2NmMyYTQ0MWFlNzYyMzhiNDUwMDU4MjQiLCJmN2ZjZmRlNWY1ZjljY2VjZTY5OWQ4Yzk2NmMyYTQ0MWFlNzYyMzhiNDUwMDZkMmMwMDQ0MWIiKS5tYXAoc3YpLEJ2PW12KFl2KSxGdj1uZXcgQXJyYXkoMykuY29uY2F0KCJlMGVjZjQ5ZWJjZGE4ODU2YTciLCJlZGY4ZmJiM2NkZTM4Yzk2YzY4ODQxOWQiLCJlZGY4ZmJiM2NkZTM4Yzk2YzY4ODU2YTc4MTBmN2MiLCJlZGY4ZmJiZmQzZTY5ZWJjZGE4Yzk2YzY4ODU2YTc4MTBmN2MiLCJlZGY4ZmJiZmQzZTY5ZWJjZGE4Yzk2YzY4YzZiYjE4ODQxOWQ2ZTAxNmIiLCJmN2ZjZmRlMGVjZjRiZmQzZTY5ZWJjZGE4Yzk2YzY4YzZiYjE4ODQxOWQ2ZTAxNmIiLCJmN2ZjZmRlMGVjZjRiZmQzZTY5ZWJjZGE4Yzk2YzY4YzZiYjE4ODQxOWQ4MTBmN2M0ZDAwNGIiKS5tYXAoc3YpLEl2PW12KEZ2KSxIdj1uZXcgQXJyYXkoMykuY29uY2F0KCJlMGYzZGJhOGRkYjU0M2EyY2EiLCJmMGY5ZThiYWU0YmM3YmNjYzQyYjhjYmUiLCJmMGY5ZThiYWU0YmM3YmNjYzQ0M2EyY2EwODY4YWMiLCJmMGY5ZThjY2ViYzVhOGRkYjU3YmNjYzQ0M2EyY2EwODY4YWMiLCJmMGY5ZThjY2ViYzVhOGRkYjU3YmNjYzQ0ZWIzZDMyYjhjYmUwODU4OWUiLCJmN2ZjZjBlMGYzZGJjY2ViYzVhOGRkYjU3YmNjYzQ0ZWIzZDMyYjhjYmUwODU4OWUiLCJmN2ZjZjBlMGYzZGJjY2ViYzVhOGRkYjU3YmNjYzQ0ZWIzZDMyYjhjYmUwODY4YWMwODQwODEiKS5tYXAoc3YpLGp2PW12KEh2KSxYdj1uZXcgQXJyYXkoMykuY29uY2F0KCJmZWU4YzhmZGJiODRlMzRhMzMiLCJmZWYwZDlmZGNjOGFmYzhkNTlkNzMwMWYiLCJmZWYwZDlmZGNjOGFmYzhkNTllMzRhMzNiMzAwMDAiLCJmZWYwZDlmZGQ0OWVmZGJiODRmYzhkNTllMzRhMzNiMzAwMDAiLCJmZWYwZDlmZGQ0OWVmZGJiODRmYzhkNTllZjY1NDhkNzMwMWY5OTAwMDAiLCJmZmY3ZWNmZWU4YzhmZGQ0OWVmZGJiODRmYzhkNTllZjY1NDhkNzMwMWY5OTAwMDAiLCJmZmY3ZWNmZWU4YzhmZGQ0OWVmZGJiODRmYzhkNTllZjY1NDhkNzMwMWZiMzAwMDA3ZjAwMDAiKS5tYXAoc3YpLEd2PW12KFh2KSxWdj1uZXcgQXJyYXkoMykuY29uY2F0KCJlY2UyZjBhNmJkZGIxYzkwOTkiLCJmNmVmZjdiZGM5ZTE2N2E5Y2YwMjgxOGEiLCJmNmVmZjdiZGM5ZTE2N2E5Y2YxYzkwOTkwMTZjNTkiLCJmNmVmZjdkMGQxZTZhNmJkZGI2N2E5Y2YxYzkwOTkwMTZjNTkiLCJmNmVmZjdkMGQxZTZhNmJkZGI2N2E5Y2YzNjkwYzAwMjgxOGEwMTY0NTAiLCJmZmY3ZmJlY2UyZjBkMGQxZTZhNmJkZGI2N2E5Y2YzNjkwYzAwMjgxOGEwMTY0NTAiLCJmZmY3ZmJlY2UyZjBkMGQxZTZhNmJkZGI2N2E5Y2YzNjkwYzAwMjgxOGEwMTZjNTkwMTQ2MzYiKS5tYXAoc3YpLCR2PW12KFZ2KSxXdj1uZXcgQXJyYXkoMykuY29uY2F0KCJlY2U3ZjJhNmJkZGIyYjhjYmUiLCJmMWVlZjZiZGM5ZTE3NGE5Y2YwNTcwYjAiLCJmMWVlZjZiZGM5ZTE3NGE5Y2YyYjhjYmUwNDVhOGQiLCJmMWVlZjZkMGQxZTZhNmJkZGI3NGE5Y2YyYjhjYmUwNDVhOGQiLCJmMWVlZjZkMGQxZTZhNmJkZGI3NGE5Y2YzNjkwYzAwNTcwYjAwMzRlN2IiLCJmZmY3ZmJlY2U3ZjJkMGQxZTZhNmJkZGI3NGE5Y2YzNjkwYzAwNTcwYjAwMzRlN2IiLCJmZmY3ZmJlY2U3ZjJkMGQxZTZhNmJkZGI3NGE5Y2YzNjkwYzAwNTcwYjAwNDVhOGQwMjM4NTgiKS5tYXAoc3YpLFp2PW12KFd2KSxRdj1uZXcgQXJyYXkoMykuY29uY2F0KCJlN2UxZWZjOTk0YzdkZDFjNzciLCJmMWVlZjZkN2I1ZDhkZjY1YjBjZTEyNTYiLCJmMWVlZjZkN2I1ZDhkZjY1YjBkZDFjNzc5ODAwNDMiLCJmMWVlZjZkNGI5ZGFjOTk0YzdkZjY1YjBkZDFjNzc5ODAwNDMiLCJmMWVlZjZkNGI5ZGFjOTk0YzdkZjY1YjBlNzI5OGFjZTEyNTY5MTAwM2YiLCJmN2Y0ZjllN2UxZWZkNGI5ZGFjOTk0YzdkZjY1YjBlNzI5OGFjZTEyNTY5MTAwM2YiLCJmN2Y0ZjllN2UxZWZkNGI5ZGFjOTk0YzdkZjY1YjBlNzI5OGFjZTEyNTY5ODAwNDM2NzAwMWYiKS5tYXAoc3YpLEp2PW12KFF2KSxLdj1uZXcgQXJyYXkoMykuY29uY2F0KCJmZGUwZGRmYTlmYjVjNTFiOGEiLCJmZWViZTJmYmI0YjlmNzY4YTFhZTAxN2UiLCJmZWViZTJmYmI0YjlmNzY4YTFjNTFiOGE3YTAxNzciLCJmZWViZTJmY2M1YzBmYTlmYjVmNzY4YTFjNTFiOGE3YTAxNzciLCJmZWViZTJmY2M1YzBmYTlmYjVmNzY4YTFkZDM0OTdhZTAxN2U3YTAxNzciLCJmZmY3ZjNmZGUwZGRmY2M1YzBmYTlmYjVmNzY4YTFkZDM0OTdhZTAxN2U3YTAxNzciLCJmZmY3ZjNmZGUwZGRmY2M1YzBmYTlmYjVmNzY4YTFkZDM0OTdhZTAxN2U3YTAxNzc0OTAwNmEiKS5tYXAoc3YpLHRnPW12KEt2KSxuZz1uZXcgQXJyYXkoMykuY29uY2F0KCJlZGY4YjE3ZmNkYmIyYzdmYjgiLCJmZmZmY2NhMWRhYjQ0MWI2YzQyMjVlYTgiLCJmZmZmY2NhMWRhYjQ0MWI2YzQyYzdmYjgyNTM0OTQiLCJmZmZmY2NjN2U5YjQ3ZmNkYmI0MWI2YzQyYzdmYjgyNTM0OTQiLCJmZmZmY2NjN2U5YjQ3ZmNkYmI0MWI2YzQxZDkxYzAyMjVlYTgwYzJjODQiLCJmZmZmZDllZGY4YjFjN2U5YjQ3ZmNkYmI0MWI2YzQxZDkxYzAyMjVlYTgwYzJjODQiLCJmZmZmZDllZGY4YjFjN2U5YjQ3ZmNkYmI0MWI2YzQxZDkxYzAyMjVlYTgyNTM0OTQwODFkNTgiKS5tYXAoc3YpLGVnPW12KG5nKSxyZz1uZXcgQXJyYXkoMykuY29uY2F0KCJmN2ZjYjlhZGRkOGUzMWEzNTQiLCJmZmZmY2NjMmU2OTk3OGM2NzkyMzg0NDMiLCJmZmZmY2NjMmU2OTk3OGM2NzkzMWEzNTQwMDY4MzciLCJmZmZmY2NkOWYwYTNhZGRkOGU3OGM2NzkzMWEzNTQwMDY4MzciLCJmZmZmY2NkOWYwYTNhZGRkOGU3OGM2Nzk0MWFiNWQyMzg0NDMwMDVhMzIiLCJmZmZmZTVmN2ZjYjlkOWYwYTNhZGRkOGU3OGM2Nzk0MWFiNWQyMzg0NDMwMDVhMzIiLCJmZmZmZTVmN2ZjYjlkOWYwYTNhZGRkOGU3OGM2Nzk0MWFiNWQyMzg0NDMwMDY4MzcwMDQ1MjkiKS5tYXAoc3YpLGlnPW12KHJnKSxvZz1uZXcgQXJyYXkoMykuY29uY2F0KCJmZmY3YmNmZWM0NGZkOTVmMGUiLCJmZmZmZDRmZWQ5OGVmZTk5MjljYzRjMDIiLCJmZmZmZDRmZWQ5OGVmZTk5MjlkOTVmMGU5OTM0MDQiLCJmZmZmZDRmZWUzOTFmZWM0NGZmZTk5MjlkOTVmMGU5OTM0MDQiLCJmZmZmZDRmZWUzOTFmZWM0NGZmZTk5MjllYzcwMTRjYzRjMDI4YzJkMDQiLCJmZmZmZTVmZmY3YmNmZWUzOTFmZWM0NGZmZTk5MjllYzcwMTRjYzRjMDI4YzJkMDQiLCJmZmZmZTVmZmY3YmNmZWUzOTFmZWM0NGZmZTk5MjllYzcwMTRjYzRjMDI5OTM0MDQ2NjI1MDYiKS5tYXAoc3YpLGFnPW12KG9nKSx1Zz1uZXcgQXJyYXkoMykuY29uY2F0KCJmZmVkYTBmZWIyNGNmMDNiMjAiLCJmZmZmYjJmZWNjNWNmZDhkM2NlMzFhMWMiLCJmZmZmYjJmZWNjNWNmZDhkM2NmMDNiMjBiZDAwMjYiLCJmZmZmYjJmZWQ5NzZmZWIyNGNmZDhkM2NmMDNiMjBiZDAwMjYiLCJmZmZmYjJmZWQ5NzZmZWIyNGNmZDhkM2NmYzRlMmFlMzFhMWNiMTAwMjYiLCJmZmZmY2NmZmVkYTBmZWQ5NzZmZWIyNGNmZDhkM2NmYzRlMmFlMzFhMWNiMTAwMjYiLCJmZmZmY2NmZmVkYTBmZWQ5NzZmZWIyNGNmZDhkM2NmYzRlMmFlMzFhMWNiZDAwMjY4MDAwMjYiKS5tYXAoc3YpLGZnPW12KHVnKSxjZz1uZXcgQXJyYXkoMykuY29uY2F0KCJkZWViZjc5ZWNhZTEzMTgyYmQiLCJlZmYzZmZiZGQ3ZTc2YmFlZDYyMTcxYjUiLCJlZmYzZmZiZGQ3ZTc2YmFlZDYzMTgyYmQwODUxOWMiLCJlZmYzZmZjNmRiZWY5ZWNhZTE2YmFlZDYzMTgyYmQwODUxOWMiLCJlZmYzZmZjNmRiZWY5ZWNhZTE2YmFlZDY0MjkyYzYyMTcxYjUwODQ1OTQiLCJmN2ZiZmZkZWViZjdjNmRiZWY5ZWNhZTE2YmFlZDY0MjkyYzYyMTcxYjUwODQ1OTQiLCJmN2ZiZmZkZWViZjdjNmRiZWY5ZWNhZTE2YmFlZDY0MjkyYzYyMTcxYjUwODUxOWMwODMwNmIiKS5tYXAoc3YpLHNnPW12KGNnKSxsZz1uZXcgQXJyYXkoMykuY29uY2F0KCJlNWY1ZTBhMWQ5OWIzMWEzNTQiLCJlZGY4ZTliYWU0YjM3NGM0NzYyMzhiNDUiLCJlZGY4ZTliYWU0YjM3NGM0NzYzMWEzNTQwMDZkMmMiLCJlZGY4ZTljN2U5YzBhMWQ5OWI3NGM0NzYzMWEzNTQwMDZkMmMiLCJlZGY4ZTljN2U5YzBhMWQ5OWI3NGM0NzY0MWFiNWQyMzhiNDUwMDVhMzIiLCJmN2ZjZjVlNWY1ZTBjN2U5YzBhMWQ5OWI3NGM0NzY0MWFiNWQyMzhiNDUwMDVhMzIiLCJmN2ZjZjVlNWY1ZTBjN2U5YzBhMWQ5OWI3NGM0NzY0MWFiNWQyMzhiNDUwMDZkMmMwMDQ0MWIiKS5tYXAoc3YpLGhnPW12KGxnKSxkZz1uZXcgQXJyYXkoMykuY29uY2F0KCJmMGYwZjBiZGJkYmQ2MzYzNjMiLCJmN2Y3ZjdjY2NjY2M5Njk2OTY1MjUyNTIiLCJmN2Y3ZjdjY2NjY2M5Njk2OTY2MzYzNjMyNTI1MjUiLCJmN2Y3ZjdkOWQ5ZDliZGJkYmQ5Njk2OTY2MzYzNjMyNTI1MjUiLCJmN2Y3ZjdkOWQ5ZDliZGJkYmQ5Njk2OTY3MzczNzM1MjUyNTIyNTI1MjUiLCJmZmZmZmZmMGYwZjBkOWQ5ZDliZGJkYmQ5Njk2OTY3MzczNzM1MjUyNTIyNTI1MjUiLCJmZmZmZmZmMGYwZjBkOWQ5ZDliZGJkYmQ5Njk2OTY3MzczNzM1MjUyNTIyNTI1MjUwMDAwMDAiKS5tYXAoc3YpLHBnPW12KGRnKSx2Zz1uZXcgQXJyYXkoMykuY29uY2F0KCJlZmVkZjViY2JkZGM3NTZiYjEiLCJmMmYwZjdjYmM5ZTI5ZTlhYzg2YTUxYTMiLCJmMmYwZjdjYmM5ZTI5ZTlhYzg3NTZiYjE1NDI3OGYiLCJmMmYwZjdkYWRhZWJiY2JkZGM5ZTlhYzg3NTZiYjE1NDI3OGYiLCJmMmYwZjdkYWRhZWJiY2JkZGM5ZTlhYzg4MDdkYmE2YTUxYTM0YTE0ODYiLCJmY2ZiZmRlZmVkZjVkYWRhZWJiY2JkZGM5ZTlhYzg4MDdkYmE2YTUxYTM0YTE0ODYiLCJmY2ZiZmRlZmVkZjVkYWRhZWJiY2JkZGM5ZTlhYzg4MDdkYmE2YTUxYTM1NDI3OGYzZjAwN2QiKS5tYXAoc3YpLGdnPW12KHZnKSx5Zz1uZXcgQXJyYXkoMykuY29uY2F0KCJmZWUwZDJmYzkyNzJkZTJkMjYiLCJmZWU1ZDlmY2FlOTFmYjZhNGFjYjE4MWQiLCJmZWU1ZDlmY2FlOTFmYjZhNGFkZTJkMjZhNTBmMTUiLCJmZWU1ZDlmY2JiYTFmYzkyNzJmYjZhNGFkZTJkMjZhNTBmMTUiLCJmZWU1ZDlmY2JiYTFmYzkyNzJmYjZhNGFlZjNiMmNjYjE4MWQ5OTAwMGQiLCJmZmY1ZjBmZWUwZDJmY2JiYTFmYzkyNzJmYjZhNGFlZjNiMmNjYjE4MWQ5OTAwMGQiLCJmZmY1ZjBmZWUwZDJmY2JiYTFmYzkyNzJmYjZhNGFlZjNiMmNjYjE4MWRhNTBmMTU2NzAwMGQiKS5tYXAoc3YpLF9nPW12KHlnKSxiZz1uZXcgQXJyYXkoMykuY29uY2F0KCJmZWU2Y2VmZGFlNmJlNjU1MGQiLCJmZWVkZGVmZGJlODVmZDhkM2NkOTQ3MDEiLCJmZWVkZGVmZGJlODVmZDhkM2NlNjU1MGRhNjM2MDMiLCJmZWVkZGVmZGQwYTJmZGFlNmJmZDhkM2NlNjU1MGRhNjM2MDMiLCJmZWVkZGVmZGQwYTJmZGFlNmJmZDhkM2NmMTY5MTNkOTQ4MDE4YzJkMDQiLCJmZmY1ZWJmZWU2Y2VmZGQwYTJmZGFlNmJmZDhkM2NmMTY5MTNkOTQ4MDE4YzJkMDQiLCJmZmY1ZWJmZWU2Y2VmZGQwYTJmZGFlNmJmZDhkM2NmMTY5MTNkOTQ4MDFhNjM2MDM3ZjI3MDQiKS5tYXAoc3YpLG1nPW12KGJnKSx4Zz1HZShLbigzMDAsLjUsMCksS24oLTI0MCwuNSwxKSksd2c9R2UoS24oLTEwMCwuNzUsLjM1KSxLbig4MCwxLjUsLjgpKSxNZz1HZShLbigyNjAsLjc1LC4zNSksS24oODAsMS41LC44KSksQWc9S24oKTt2YXIgVGc9Ym4oKSxOZz1NYXRoLlBJLzMsU2c9MipNYXRoLlBJLzM7ZnVuY3Rpb24gRWcodCl7dmFyIG49dC5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0W01hdGgubWF4KDAsTWF0aC5taW4obi0xLE1hdGguZmxvb3IoZSpuKSkpXX19dmFyIGtnPUVnKHN2KCI0NDAxNTQ0NDAyNTY0NTA0NTc0NTA1NTk0NjA3NWE0NjA4NWM0NjBhNWQ0NjBiNWU0NzBkNjA0NzBlNjE0NzEwNjM0NzExNjQ0NzEzNjU0ODE0Njc0ODE2Njg0ODE3Njk0ODE4NmE0ODFhNmM0ODFiNmQ0ODFjNmU0ODFkNmY0ODFmNzA0ODIwNzE0ODIxNzM0ODIzNzQ0ODI0NzU0ODI1NzY0ODI2Nzc0ODI4Nzg0ODI5Nzk0NzJhN2E0NzJjN2E0NzJkN2I0NzJlN2M0NzJmN2Q0NjMwN2U0NjMyN2U0NjMzN2Y0NjM0ODA0NTM1ODE0NTM3ODE0NTM4ODI0NDM5ODM0NDNhODM0NDNiODQ0MzNkODQ0MzNlODU0MjNmODU0MjQwODY0MjQxODY0MTQyODc0MTQ0ODc0MDQ1ODg0MDQ2ODgzZjQ3ODgzZjQ4ODkzZTQ5ODkzZTRhODkzZTRjOGEzZDRkOGEzZDRlOGEzYzRmOGEzYzUwOGIzYjUxOGIzYjUyOGIzYTUzOGIzYTU0OGMzOTU1OGMzOTU2OGMzODU4OGMzODU5OGMzNzVhOGMzNzViOGQzNjVjOGQzNjVkOGQzNTVlOGQzNTVmOGQzNDYwOGQzNDYxOGQzMzYyOGQzMzYzOGQzMjY0OGUzMjY1OGUzMTY2OGUzMTY3OGUzMTY4OGUzMDY5OGUzMDZhOGUyZjZiOGUyZjZjOGUyZTZkOGUyZTZlOGUyZTZmOGUyZDcwOGUyZDcxOGUyYzcxOGUyYzcyOGUyYzczOGUyYjc0OGUyYjc1OGUyYTc2OGUyYTc3OGUyYTc4OGUyOTc5OGUyOTdhOGUyOTdiOGUyODdjOGUyODdkOGUyNzdlOGUyNzdmOGUyNzgwOGUyNjgxOGUyNjgyOGUyNjgyOGUyNTgzOGUyNTg0OGUyNTg1OGUyNDg2OGUyNDg3OGUyMzg4OGUyMzg5OGUyMzhhOGQyMjhiOGQyMjhjOGQyMjhkOGQyMThlOGQyMThmOGQyMTkwOGQyMTkxOGMyMDkyOGMyMDkyOGMyMDkzOGMxZjk0OGMxZjk1OGIxZjk2OGIxZjk3OGIxZjk4OGIxZjk5OGExZjlhOGExZTliOGExZTljODkxZTlkODkxZjllODkxZjlmODgxZmEwODgxZmExODgxZmExODcxZmEyODcyMGEzODYyMGE0ODYyMWE1ODUyMWE2ODUyMmE3ODUyMmE4ODQyM2E5ODMyNGFhODMyNWFiODIyNWFjODIyNmFkODEyN2FkODEyOGFlODAyOWFmN2YyYWIwN2YyY2IxN2UyZGIyN2QyZWIzN2MyZmI0N2MzMWI1N2IzMmI2N2EzNGI2NzkzNWI3NzkzN2I4NzgzOGI5NzczYWJhNzYzYmJiNzUzZGJjNzQzZmJjNzM0MGJkNzI0MmJlNzE0NGJmNzA0NmMwNmY0OGMxNmU0YWMxNmQ0Y2MyNmM0ZWMzNmI1MGM0NmE1MmM1Njk1NGM1Njg1NmM2Njc1OGM3NjU1YWM4NjQ1Y2M4NjM1ZWM5NjI2MGNhNjA2M2NiNWY2NWNiNWU2N2NjNWM2OWNkNWI2Y2NkNWE2ZWNlNTg3MGNmNTc3M2QwNTY3NWQwNTQ3N2QxNTM3YWQxNTE3Y2QyNTA3ZmQzNGU4MWQzNGQ4NGQ0NGI4NmQ1NDk4OWQ1NDg4YmQ2NDY4ZWQ2NDU5MGQ3NDM5M2Q3NDE5NWQ4NDA5OGQ4M2U5YmQ5M2M5ZGQ5M2JhMGRhMzlhMmRhMzdhNWRiMzZhOGRiMzRhYWRjMzJhZGRjMzBiMGRkMmZiMmRkMmRiNWRlMmJiOGRlMjliYWRlMjhiZGRmMjZjMGRmMjVjMmRmMjNjNWUwMjFjOGUwMjBjYWUxMWZjZGUxMWRkMGUxMWNkMmUyMWJkNWUyMWFkOGUyMTlkYWUzMTlkZGUzMThkZmUzMThlMmU0MThlNWU0MTllN2U0MTllYWU1MWFlY2U1MWJlZmU1MWNmMWU1MWRmNGU2MWVmNmU2MjBmOGU2MjFmYmU3MjNmZGU3MjUiKSksQ2c9RWcoc3YoIjAwMDAwNDAxMDAwNTAxMDEwNjAxMDEwODAyMDEwOTAyMDIwYjAyMDIwZDAzMDMwZjAzMDMxMjA0MDQxNDA1MDQxNjA2MDUxODA2MDUxYTA3MDYxYzA4MDcxZTA5MDcyMDBhMDgyMjBiMDkyNDBjMDkyNjBkMGEyOTBlMGIyYjEwMGIyZDExMGMyZjEyMGQzMTEzMGQzNDE0MGUzNjE1MGUzODE2MGYzYjE4MGYzZDE5MTAzZjFhMTA0MjFjMTA0NDFkMTE0NzFlMTE0OTIwMTE0YjIxMTE0ZTIyMTE1MDI0MTI1MzI1MTI1NTI3MTI1ODI5MTE1YTJhMTE1YzJjMTE1ZjJkMTE2MTJmMTE2MzMxMTE2NTMzMTA2NzM0MTA2OTM2MTA2YjM4MTA2YzM5MGY2ZTNiMGY3MDNkMGY3MTNmMGY3MjQwMGY3NDQyMGY3NTQ0MGY3NjQ1MTA3NzQ3MTA3ODQ5MTA3ODRhMTA3OTRjMTE3YTRlMTE3YjRmMTI3YjUxMTI3YzUyMTM3YzU0MTM3ZDU2MTQ3ZDU3MTU3ZTU5MTU3ZTVhMTY3ZTVjMTY3ZjVkMTc3ZjVmMTg3ZjYwMTg4MDYyMTk4MDY0MWE4MDY1MWE4MDY3MWI4MDY4MWM4MTZhMWM4MTZiMWQ4MTZkMWQ4MTZlMWU4MTcwMWY4MTcyMWY4MTczMjA4MTc1MjE4MTc2MjE4MTc4MjI4MTc5MjI4MjdiMjM4MjdjMjM4MjdlMjQ4MjgwMjU4MjgxMjU4MTgzMjY4MTg0MjY4MTg2Mjc4MTg4Mjc4MTg5Mjg4MThiMjk4MThjMjk4MThlMmE4MTkwMmE4MTkxMmI4MTkzMmI4MDk0MmM4MDk2MmM4MDk4MmQ4MDk5MmQ4MDliMmU3ZjljMmU3ZjllMmY3ZmEwMmY3ZmExMzA3ZWEzMzA3ZWE1MzE3ZWE2MzE3ZGE4MzI3ZGFhMzM3ZGFiMzM3Y2FkMzQ3Y2FlMzQ3YmIwMzU3YmIyMzU3YmIzMzY3YWI1MzY3YWI3Mzc3OWI4Mzc3OWJhMzg3OGJjMzk3OGJkMzk3N2JmM2E3N2MwM2E3NmMyM2I3NWM0M2M3NWM1M2M3NGM3M2Q3M2M4M2U3M2NhM2U3MmNjM2Y3MWNkNDA3MWNmNDA3MGQwNDE2ZmQyNDI2ZmQzNDM2ZWQ1NDQ2ZGQ2NDU2Y2Q4NDU2Y2Q5NDY2YmRiNDc2YWRjNDg2OWRlNDk2OGRmNGE2OGUwNGM2N2UyNGQ2NmUzNGU2NWU0NGY2NGU1NTA2NGU3NTI2M2U4NTM2MmU5NTQ2MmVhNTY2MWViNTc2MGVjNTg2MGVkNWE1ZmVlNWI1ZWVmNWQ1ZWYwNWY1ZWYxNjA1ZGYyNjI1ZGYyNjQ1Y2YzNjU1Y2Y0Njc1Y2Y0Njk1Y2Y1NmI1Y2Y2NmM1Y2Y2NmU1Y2Y3NzA1Y2Y3NzI1Y2Y4NzQ1Y2Y4NzY1Y2Y5Nzg1ZGY5Nzk1ZGY5N2I1ZGZhN2Q1ZWZhN2Y1ZWZhODE1ZmZiODM1ZmZiODU2MGZiODc2MWZjODk2MWZjOGE2MmZjOGM2M2ZjOGU2NGZjOTA2NWZkOTI2NmZkOTQ2N2ZkOTY2OGZkOTg2OWZkOWE2YWZkOWI2YmZlOWQ2Y2ZlOWY2ZGZlYTE2ZWZlYTM2ZmZlYTU3MWZlYTc3MmZlYTk3M2ZlYWE3NGZlYWM3NmZlYWU3N2ZlYjA3OGZlYjI3YWZlYjQ3YmZlYjY3Y2ZlYjc3ZWZlYjk3ZmZlYmI4MWZlYmQ4MmZlYmY4NGZlYzE4NWZlYzI4N2ZlYzQ4OGZlYzY4YWZlYzg4Y2ZlY2E4ZGZlY2M4ZmZlY2Q5MGZlY2Y5MmZlZDE5NGZlZDM5NWZlZDU5N2ZlZDc5OWZlZDg5YWZkZGE5Y2ZkZGM5ZWZkZGVhMGZkZTBhMWZkZTJhM2ZkZTNhNWZkZTVhN2ZkZTdhOWZkZTlhYWZkZWJhY2ZjZWNhZWZjZWViMGZjZjBiMmZjZjJiNGZjZjRiNmZjZjZiOGZjZjdiOWZjZjliYmZjZmJiZGZjZmRiZiIpKSxQZz1FZyhzdigiMDAwMDA0MDEwMDA1MDEwMTA2MDEwMTA4MDIwMTBhMDIwMjBjMDIwMjBlMDMwMjEwMDQwMzEyMDQwMzE0MDUwNDE3MDYwNDE5MDcwNTFiMDgwNTFkMDkwNjFmMGEwNzIyMGIwNzI0MGMwODI2MGQwODI5MGUwOTJiMTAwOTJkMTEwYTMwMTIwYTMyMTQwYjM0MTUwYjM3MTYwYjM5MTgwYzNjMTkwYzNlMWIwYzQxMWMwYzQzMWUwYzQ1MWYwYzQ4MjEwYzRhMjMwYzRjMjQwYzRmMjYwYzUxMjgwYjUzMjkwYjU1MmIwYjU3MmQwYjU5MmYwYTViMzEwYTVjMzIwYTVlMzQwYTVmMzYwOTYxMzgwOTYyMzkwOTYzM2IwOTY0M2QwOTY1M2UwOTY2NDAwYTY3NDIwYTY4NDQwYTY4NDUwYTY5NDcwYjZhNDkwYjZhNGEwYzZiNGMwYzZiNGQwZDZjNGYwZDZjNTEwZTZjNTIwZTZkNTQwZjZkNTUwZjZkNTcxMDZlNTkxMDZlNWExMTZlNWMxMjZlNWQxMjZlNWYxMzZlNjExMzZlNjIxNDZlNjQxNTZlNjUxNTZlNjcxNjZlNjkxNjZlNmExNzZlNmMxODZlNmQxODZlNmYxOTZlNzExOTZlNzIxYTZlNzQxYTZlNzUxYjZlNzcxYzZkNzgxYzZkN2ExZDZkN2MxZDZkN2QxZTZkN2YxZTZjODAxZjZjODIyMDZjODQyMDZiODUyMTZiODcyMTZiODgyMjZhOGEyMjZhOGMyMzY5OGQyMzY5OGYyNDY5OTAyNTY4OTIyNTY4OTMyNjY3OTUyNjY3OTcyNzY2OTgyNzY2OWEyODY1OWIyOTY0OWQyOTY0OWYyYTYzYTAyYTYzYTIyYjYyYTMyYzYxYTUyYzYwYTYyZDYwYTgyZTVmYTkyZTVlYWIyZjVlYWQzMDVkYWUzMDVjYjAzMTViYjEzMjVhYjMzMjVhYjQzMzU5YjYzNDU4YjczNTU3YjkzNTU2YmEzNjU1YmMzNzU0YmQzODUzYmYzOTUyYzAzYTUxYzEzYTUwYzMzYjRmYzQzYzRlYzYzZDRkYzczZTRjYzgzZjRiY2E0MDRhY2I0MTQ5Y2M0MjQ4Y2U0MzQ3Y2Y0NDQ2ZDA0NTQ1ZDI0NjQ0ZDM0NzQzZDQ0ODQyZDU0YTQxZDc0YjNmZDg0YzNlZDk0ZDNkZGE0ZTNjZGI1MDNiZGQ1MTNhZGU1MjM4ZGY1MzM3ZTA1NTM2ZTE1NjM1ZTI1NzM0ZTM1OTMzZTQ1YTMxZTU1YzMwZTY1ZDJmZTc1ZTJlZTg2MDJkZTk2MTJiZWE2MzJhZWI2NDI5ZWI2NjI4ZWM2NzI2ZWQ2OTI1ZWU2YTI0ZWY2YzIzZWY2ZTIxZjA2ZjIwZjE3MTFmZjE3MzFkZjI3NDFjZjM3NjFiZjM3ODE5ZjQ3OTE4ZjU3YjE3ZjU3ZDE1ZjY3ZTE0ZjY4MDEzZjc4MjEyZjc4NDEwZjg4NTBmZjg4NzBlZjg4OTBjZjk4YjBiZjk4YzBhZjk4ZTA5ZmE5MDA4ZmE5MjA3ZmE5NDA3ZmI5NjA2ZmI5NzA2ZmI5OTA2ZmI5YjA2ZmI5ZDA3ZmM5ZjA3ZmNhMTA4ZmNhMzA5ZmNhNTBhZmNhNjBjZmNhODBkZmNhYTBmZmNhYzExZmNhZTEyZmNiMDE0ZmNiMjE2ZmNiNDE4ZmJiNjFhZmJiODFkZmJiYTFmZmJiYzIxZmJiZTIzZmFjMDI2ZmFjMjI4ZmFjNDJhZmFjNjJkZjljNzJmZjljOTMyZjljYjM1ZjhjZDM3ZjhjZjNhZjdkMTNkZjdkMzQwZjZkNTQzZjZkNzQ2ZjVkOTQ5ZjVkYjRjZjRkZDRmZjRkZjUzZjRlMTU2ZjNlMzVhZjNlNTVkZjJlNjYxZjJlODY1ZjJlYTY5ZjFlYzZkZjFlZDcxZjFlZjc1ZjFmMTc5ZjJmMjdkZjJmNDgyZjNmNTg2ZjNmNjhhZjRmODhlZjVmOTkyZjZmYTk2ZjhmYjlhZjlmYzlkZmFmZGExZmNmZmE0IikpLHpnPUVnKHN2KCIwZDA4ODcxMDA3ODgxMzA3ODkxNjA3OGExOTA2OGMxYjA2OGQxZDA2OGUyMDA2OGYyMjA2OTAyNDA2OTEyNjA1OTEyODA1OTIyYTA1OTMyYzA1OTQyZTA1OTUyZjA1OTYzMTA1OTczMzA1OTczNTA0OTgzNzA0OTkzODA0OWEzYTA0OWEzYzA0OWIzZTA0OWMzZjA0OWM0MTA0OWQ0MzAzOWU0NDAzOWU0NjAzOWY0ODAzOWY0OTAzYTA0YjAzYTE0YzAyYTE0ZTAyYTI1MDAyYTI1MTAyYTM1MzAyYTM1NTAyYTQ1NjAxYTQ1ODAxYTQ1OTAxYTU1YjAxYTU1YzAxYTY1ZTAxYTY2MDAxYTY2MTAwYTc2MzAwYTc2NDAwYTc2NjAwYTc2NzAwYTg2OTAwYTg2YTAwYTg2YzAwYTg2ZTAwYTg2ZjAwYTg3MTAwYTg3MjAxYTg3NDAxYTg3NTAxYTg3NzAxYTg3ODAxYTg3YTAyYTg3YjAyYTg3ZDAzYTg3ZTAzYTg4MDA0YTg4MTA0YTc4MzA1YTc4NDA1YTc4NjA2YTY4NzA3YTY4ODA4YTY4YTA5YTU4YjBhYTU4ZDBiYTU4ZTBjYTQ4ZjBkYTQ5MTBlYTM5MjBmYTM5NDEwYTI5NTExYTE5NjEzYTE5ODE0YTA5OTE1OWY5YTE2OWY5YzE3OWU5ZDE4OWQ5ZTE5OWRhMDFhOWNhMTFiOWJhMjFkOWFhMzFlOWFhNTFmOTlhNjIwOThhNzIxOTdhODIyOTZhYTIzOTVhYjI0OTRhYzI2OTRhZDI3OTNhZTI4OTJiMDI5OTFiMTJhOTBiMjJiOGZiMzJjOGViNDJlOGRiNTJmOGNiNjMwOGJiNzMxOGFiODMyODliYTMzODhiYjM0ODhiYzM1ODdiZDM3ODZiZTM4ODViZjM5ODRjMDNhODNjMTNiODJjMjNjODFjMzNkODBjNDNlN2ZjNTQwN2VjNjQxN2RjNzQyN2NjODQzN2JjOTQ0N2FjYTQ1N2FjYjQ2NzljYzQ3NzhjYzQ5NzdjZDRhNzZjZTRiNzVjZjRjNzRkMDRkNzNkMTRlNzJkMjRmNzFkMzUxNzFkNDUyNzBkNTUzNmZkNTU0NmVkNjU1NmRkNzU2NmNkODU3NmJkOTU4NmFkYTVhNmFkYTViNjlkYjVjNjhkYzVkNjdkZDVlNjZkZTVmNjVkZTYxNjRkZjYyNjNlMDYzNjNlMTY0NjJlMjY1NjFlMjY2NjBlMzY4NWZlNDY5NWVlNTZhNWRlNTZiNWRlNjZjNWNlNzZlNWJlNzZmNWFlODcwNTllOTcxNThlOTcyNTdlYTc0NTdlYjc1NTZlYjc2NTVlYzc3NTRlZDc5NTNlZDdhNTJlZTdiNTFlZjdjNTFlZjdlNTBmMDdmNGZmMDgwNGVmMTgxNGRmMTgzNGNmMjg0NGJmMzg1NGJmMzg3NGFmNDg4NDlmNDg5NDhmNThiNDdmNThjNDZmNjhkNDVmNjhmNDRmNzkwNDRmNzkxNDNmNzkzNDJmODk0NDFmODk1NDBmOTk3M2ZmOTk4M2VmOTlhM2VmYTliM2RmYTljM2NmYTllM2JmYjlmM2FmYmExMzlmYmEyMzhmY2EzMzhmY2E1MzdmY2E2MzZmY2E4MzVmY2E5MzRmZGFiMzNmZGFjMzNmZGFlMzJmZGFmMzFmZGIxMzBmZGIyMmZmZGI0MmZmZGI1MmVmZWI3MmRmZWI4MmNmZWJhMmNmZWJiMmJmZWJkMmFmZWJlMmFmZWMwMjlmZGMyMjlmZGMzMjhmZGM1MjdmZGM2MjdmZGM4MjdmZGNhMjZmZGNiMjZmY2NkMjVmY2NlMjVmY2QwMjVmY2QyMjVmYmQzMjRmYmQ1MjRmYmQ3MjRmYWQ4MjRmYWRhMjRmOWRjMjRmOWRkMjVmOGRmMjVmOGUxMjVmN2UyMjVmN2U0MjVmNmU2MjZmNmU4MjZmNWU5MjZmNWViMjdmNGVkMjdmM2VlMjdmM2YwMjdmMmYyMjdmMWY0MjZmMWY1MjVmMGY3MjRmMGY5MjEiKSk7ZnVuY3Rpb24gUmcodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fXZhciBMZz1NYXRoLmFicyxEZz1NYXRoLmF0YW4yLFVnPU1hdGguY29zLHFnPU1hdGgubWF4LE9nPU1hdGgubWluLFlnPU1hdGguc2luLEJnPU1hdGguc3FydCxGZz0xZS0xMixJZz1NYXRoLlBJLEhnPUlnLzIsamc9MipJZztmdW5jdGlvbiBYZyh0KXtyZXR1cm4gdD49MT9IZzp0PD0tMT8tSGc6TWF0aC5hc2luKHQpfWZ1bmN0aW9uIEdnKHQpe3JldHVybiB0LmlubmVyUmFkaXVzfWZ1bmN0aW9uIFZnKHQpe3JldHVybiB0Lm91dGVyUmFkaXVzfWZ1bmN0aW9uICRnKHQpe3JldHVybiB0LnN0YXJ0QW5nbGV9ZnVuY3Rpb24gV2codCl7cmV0dXJuIHQuZW5kQW5nbGV9ZnVuY3Rpb24gWmcodCl7cmV0dXJuIHQmJnQucGFkQW5nbGV9ZnVuY3Rpb24gUWcodCxuLGUscixpLG8sYSl7dmFyIHU9dC1lLGY9bi1yLGM9KGE/bzotbykvQmcodSp1K2YqZikscz1jKmYsbD0tYyp1LGg9dCtzLGQ9bitsLHA9ZStzLHY9citsLGc9KGgrcCkvMix5PShkK3YpLzIsXz1wLWgsYj12LWQsbT1fKl8rYipiLHg9aS1vLHc9aCp2LXAqZCxNPShiPDA/LTE6MSkqQmcocWcoMCx4KngqbS13KncpKSxBPSh3KmItXypNKS9tLFQ9KC13Kl8tYipNKS9tLE49KHcqYitfKk0pL20sUz0oLXcqXytiKk0pL20sRT1BLWcsaz1ULXksQz1OLWcsUD1TLXk7cmV0dXJuIEUqRStrKms+QypDK1AqUCYmKEE9TixUPVMpLHtjeDpBLGN5OlQseDAxOi1zLHkwMTotbCx4MTE6QSooaS94LTEpLHkxMTpUKihpL3gtMSl9fWZ1bmN0aW9uIEpnKHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiBLZyh0KXtyZXR1cm4gbmV3IEpnKHQpfWZ1bmN0aW9uIHR5KHQpe3JldHVybiB0WzBdfWZ1bmN0aW9uIG55KHQpe3JldHVybiB0WzFdfWZ1bmN0aW9uIGV5KCl7dmFyIHQ9dHksbj1ueSxlPVJnKCEwKSxyPW51bGwsaT1LZyxvPW51bGw7ZnVuY3Rpb24gYShhKXt2YXIgdSxmLGMscz1hLmxlbmd0aCxsPSExO2ZvcihudWxsPT1yJiYobz1pKGM9R2koKSkpLHU9MDt1PD1zOysrdSkhKHU8cyYmZShmPWFbdV0sdSxhKSk9PT1sJiYoKGw9IWwpP28ubGluZVN0YXJ0KCk6by5saW5lRW5kKCkpLGwmJm8ucG9pbnQoK3QoZix1LGEpLCtuKGYsdSxhKSk7aWYoYylyZXR1cm4gbz1udWxsLGMrIiJ8fG51bGx9cmV0dXJuIGEueD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uOlJnKCtuKSxhKTp0fSxhLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpSZygrdCksYSk6bn0sYS5kZWZpbmVkPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6UmcoISF0KSxhKTplfSxhLmN1cnZlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXQsbnVsbCE9ciYmKG89aShyKSksYSk6aX0sYS5jb250ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhudWxsPT10P3I9bz1udWxsOm89aShyPXQpLGEpOnJ9LGF9ZnVuY3Rpb24gcnkoKXt2YXIgdD10eSxuPW51bGwsZT1SZygwKSxyPW55LGk9UmcoITApLG89bnVsbCxhPUtnLHU9bnVsbDtmdW5jdGlvbiBmKGYpe3ZhciBjLHMsbCxoLGQscD1mLmxlbmd0aCx2PSExLGc9bmV3IEFycmF5KHApLHk9bmV3IEFycmF5KHApO2ZvcihudWxsPT1vJiYodT1hKGQ9R2koKSkpLGM9MDtjPD1wOysrYyl7aWYoIShjPHAmJmkoaD1mW2NdLGMsZikpPT09dilpZih2PSF2KXM9Yyx1LmFyZWFTdGFydCgpLHUubGluZVN0YXJ0KCk7ZWxzZXtmb3IodS5saW5lRW5kKCksdS5saW5lU3RhcnQoKSxsPWMtMTtsPj1zOy0tbCl1LnBvaW50KGdbbF0seVtsXSk7dS5saW5lRW5kKCksdS5hcmVhRW5kKCl9diYmKGdbY109K3QoaCxjLGYpLHlbY109K2UoaCxjLGYpLHUucG9pbnQobj8rbihoLGMsZik6Z1tjXSxyPytyKGgsYyxmKTp5W2NdKSl9aWYoZClyZXR1cm4gdT1udWxsLGQrIiJ8fG51bGx9ZnVuY3Rpb24gYygpe3JldHVybiBleSgpLmRlZmluZWQoaSkuY3VydmUoYSkuY29udGV4dChvKX1yZXR1cm4gZi54PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6UmcoK2UpLG49bnVsbCxmKTp0fSxmLngwPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBuP246UmcoK24pLGYpOnR9LGYueDE9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49bnVsbD09dD9udWxsOiJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6UmcoK3QpLGYpOm59LGYueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OlJnKCt0KSxyPW51bGwsZik6ZX0sZi55MD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OlJnKCt0KSxmKTplfSxmLnkxPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPW51bGw9PXQ/bnVsbDoiZnVuY3Rpb24iPT10eXBlb2YgdD90OlJnKCt0KSxmKTpyfSxmLmxpbmVYMD1mLmxpbmVZMD1mdW5jdGlvbigpe3JldHVybiBjKCkueCh0KS55KGUpfSxmLmxpbmVZMT1mdW5jdGlvbigpe3JldHVybiBjKCkueCh0KS55KHIpfSxmLmxpbmVYMT1mdW5jdGlvbigpe3JldHVybiBjKCkueChuKS55KGUpfSxmLmRlZmluZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpSZyghIXQpLGYpOml9LGYuY3VydmU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9dCxudWxsIT1vJiYodT1hKG8pKSxmKTphfSxmLmNvbnRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG51bGw9PXQ/bz11PW51bGw6dT1hKG89dCksZik6b30sZn1mdW5jdGlvbiBpeSh0LG4pe3JldHVybiBuPHQ/LTE6bj50PzE6bj49dD8wOk5hTn1mdW5jdGlvbiBveSh0KXtyZXR1cm4gdH1KZy5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LG4pe3N3aXRjaCh0PSt0LG49K24sdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxuKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LG4pO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2RlZmF1bHQ6dGhpcy5fY29udGV4dC5saW5lVG8odCxuKX19fTt2YXIgYXk9ZnkoS2cpO2Z1bmN0aW9uIHV5KHQpe3RoaXMuX2N1cnZlPXR9ZnVuY3Rpb24gZnkodCl7ZnVuY3Rpb24gbihuKXtyZXR1cm4gbmV3IHV5KHQobikpfXJldHVybiBuLl9jdXJ2ZT10LG59ZnVuY3Rpb24gY3kodCl7dmFyIG49dC5jdXJ2ZTtyZXR1cm4gdC5hbmdsZT10LngsZGVsZXRlIHQueCx0LnJhZGl1cz10LnksZGVsZXRlIHQueSx0LmN1cnZlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP24oZnkodCkpOm4oKS5fY3VydmV9LHR9ZnVuY3Rpb24gc3koKXtyZXR1cm4gY3koZXkoKS5jdXJ2ZShheSkpfWZ1bmN0aW9uIGx5KCl7dmFyIHQ9cnkoKS5jdXJ2ZShheSksbj10LmN1cnZlLGU9dC5saW5lWDAscj10LmxpbmVYMSxpPXQubGluZVkwLG89dC5saW5lWTE7cmV0dXJuIHQuYW5nbGU9dC54LGRlbGV0ZSB0LngsdC5zdGFydEFuZ2xlPXQueDAsZGVsZXRlIHQueDAsdC5lbmRBbmdsZT10LngxLGRlbGV0ZSB0LngxLHQucmFkaXVzPXQueSxkZWxldGUgdC55LHQuaW5uZXJSYWRpdXM9dC55MCxkZWxldGUgdC55MCx0Lm91dGVyUmFkaXVzPXQueTEsZGVsZXRlIHQueTEsdC5saW5lU3RhcnRBbmdsZT1mdW5jdGlvbigpe3JldHVybiBjeShlKCkpfSxkZWxldGUgdC5saW5lWDAsdC5saW5lRW5kQW5nbGU9ZnVuY3Rpb24oKXtyZXR1cm4gY3kocigpKX0sZGVsZXRlIHQubGluZVgxLHQubGluZUlubmVyUmFkaXVzPWZ1bmN0aW9uKCl7cmV0dXJuIGN5KGkoKSl9LGRlbGV0ZSB0LmxpbmVZMCx0LmxpbmVPdXRlclJhZGl1cz1mdW5jdGlvbigpe3JldHVybiBjeShvKCkpfSxkZWxldGUgdC5saW5lWTEsdC5jdXJ2ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9uKGZ5KHQpKTpuKCkuX2N1cnZlfSx0fWZ1bmN0aW9uIGh5KHQsbil7cmV0dXJuWyhuPStuKSpNYXRoLmNvcyh0LT1NYXRoLlBJLzIpLG4qTWF0aC5zaW4odCldfXV5LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fY3VydmUuYXJlYVN0YXJ0KCl9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9jdXJ2ZS5hcmVhRW5kKCl9LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX2N1cnZlLmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dGhpcy5fY3VydmUubGluZUVuZCgpfSxwb2ludDpmdW5jdGlvbih0LG4pe3RoaXMuX2N1cnZlLnBvaW50KG4qTWF0aC5zaW4odCksbiotTWF0aC5jb3ModCkpfX07dmFyIGR5PUFycmF5LnByb3RvdHlwZS5zbGljZTtmdW5jdGlvbiBweSh0KXtyZXR1cm4gdC5zb3VyY2V9ZnVuY3Rpb24gdnkodCl7cmV0dXJuIHQudGFyZ2V0fWZ1bmN0aW9uIGd5KHQpe3ZhciBuPXB5LGU9dnkscj10eSxpPW55LG89bnVsbDtmdW5jdGlvbiBhKCl7dmFyIGEsdT1keS5jYWxsKGFyZ3VtZW50cyksZj1uLmFwcGx5KHRoaXMsdSksYz1lLmFwcGx5KHRoaXMsdSk7aWYob3x8KG89YT1HaSgpKSx0KG8sK3IuYXBwbHkodGhpcywodVswXT1mLHUpKSwraS5hcHBseSh0aGlzLHUpLCtyLmFwcGx5KHRoaXMsKHVbMF09Yyx1KSksK2kuYXBwbHkodGhpcyx1KSksYSlyZXR1cm4gbz1udWxsLGErIiJ8fG51bGx9cmV0dXJuIGEuc291cmNlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQsYSk6bn0sYS50YXJnZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCxhKTplfSxhLng9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpSZygrdCksYSk6cn0sYS55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6UmcoK3QpLGEpOml9LGEuY29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1udWxsPT10P251bGw6dCxhKTpvfSxhfWZ1bmN0aW9uIHl5KHQsbixlLHIsaSl7dC5tb3ZlVG8obixlKSx0LmJlemllckN1cnZlVG8obj0obityKS8yLGUsbixpLHIsaSl9ZnVuY3Rpb24gX3kodCxuLGUscixpKXt0Lm1vdmVUbyhuLGUpLHQuYmV6aWVyQ3VydmVUbyhuLGU9KGUraSkvMixyLGUscixpKX1mdW5jdGlvbiBieSh0LG4sZSxyLGkpe3ZhciBvPWh5KG4sZSksYT1oeShuLGU9KGUraSkvMiksdT1oeShyLGUpLGY9aHkocixpKTt0Lm1vdmVUbyhvWzBdLG9bMV0pLHQuYmV6aWVyQ3VydmVUbyhhWzBdLGFbMV0sdVswXSx1WzFdLGZbMF0sZlsxXSl9dmFyIG15PXtkcmF3OmZ1bmN0aW9uKHQsbil7dmFyIGU9TWF0aC5zcXJ0KG4vSWcpO3QubW92ZVRvKGUsMCksdC5hcmMoMCwwLGUsMCxqZyl9fSx4eT17ZHJhdzpmdW5jdGlvbih0LG4pe3ZhciBlPU1hdGguc3FydChuLzUpLzI7dC5tb3ZlVG8oLTMqZSwtZSksdC5saW5lVG8oLWUsLWUpLHQubGluZVRvKC1lLC0zKmUpLHQubGluZVRvKGUsLTMqZSksdC5saW5lVG8oZSwtZSksdC5saW5lVG8oMyplLC1lKSx0LmxpbmVUbygzKmUsZSksdC5saW5lVG8oZSxlKSx0LmxpbmVUbyhlLDMqZSksdC5saW5lVG8oLWUsMyplKSx0LmxpbmVUbygtZSxlKSx0LmxpbmVUbygtMyplLGUpLHQuY2xvc2VQYXRoKCl9fSx3eT1NYXRoLnNxcnQoMS8zKSxNeT0yKnd5LEF5PXtkcmF3OmZ1bmN0aW9uKHQsbil7dmFyIGU9TWF0aC5zcXJ0KG4vTXkpLHI9ZSp3eTt0Lm1vdmVUbygwLC1lKSx0LmxpbmVUbyhyLDApLHQubGluZVRvKDAsZSksdC5saW5lVG8oLXIsMCksdC5jbG9zZVBhdGgoKX19LFR5PU1hdGguc2luKElnLzEwKS9NYXRoLnNpbig3KklnLzEwKSxOeT1NYXRoLnNpbihqZy8xMCkqVHksU3k9LU1hdGguY29zKGpnLzEwKSpUeSxFeT17ZHJhdzpmdW5jdGlvbih0LG4pe3ZhciBlPU1hdGguc3FydCguODkwODEzMDkxNTI5Mjg1MipuKSxyPU55KmUsaT1TeSplO3QubW92ZVRvKDAsLWUpLHQubGluZVRvKHIsaSk7Zm9yKHZhciBvPTE7bzw1Oysrbyl7dmFyIGE9amcqby81LHU9TWF0aC5jb3MoYSksZj1NYXRoLnNpbihhKTt0LmxpbmVUbyhmKmUsLXUqZSksdC5saW5lVG8odSpyLWYqaSxmKnIrdSppKX10LmNsb3NlUGF0aCgpfX0sa3k9e2RyYXc6ZnVuY3Rpb24odCxuKXt2YXIgZT1NYXRoLnNxcnQobikscj0tZS8yO3QucmVjdChyLHIsZSxlKX19LEN5PU1hdGguc3FydCgzKSxQeT17ZHJhdzpmdW5jdGlvbih0LG4pe3ZhciBlPS1NYXRoLnNxcnQobi8oMypDeSkpO3QubW92ZVRvKDAsMiplKSx0LmxpbmVUbygtQ3kqZSwtZSksdC5saW5lVG8oQ3kqZSwtZSksdC5jbG9zZVBhdGgoKX19LHp5PU1hdGguc3FydCgzKS8yLFJ5PTEvTWF0aC5zcXJ0KDEyKSxMeT0zKihSeS8yKzEpLER5PXtkcmF3OmZ1bmN0aW9uKHQsbil7dmFyIGU9TWF0aC5zcXJ0KG4vTHkpLHI9ZS8yLGk9ZSpSeSxvPXIsYT1lKlJ5K2UsdT0tbyxmPWE7dC5tb3ZlVG8ocixpKSx0LmxpbmVUbyhvLGEpLHQubGluZVRvKHUsZiksdC5saW5lVG8oLS41KnItenkqaSx6eSpyKy0uNSppKSx0LmxpbmVUbygtLjUqby16eSphLHp5Km8rLS41KmEpLHQubGluZVRvKC0uNSp1LXp5KmYsenkqdSstLjUqZiksdC5saW5lVG8oLS41KnIrenkqaSwtLjUqaS16eSpyKSx0LmxpbmVUbygtLjUqbyt6eSphLC0uNSphLXp5Km8pLHQubGluZVRvKC0uNSp1K3p5KmYsLS41KmYtenkqdSksdC5jbG9zZVBhdGgoKX19LFV5PVtteSx4eSxBeSxreSxFeSxQeSxEeV07ZnVuY3Rpb24gcXkoKXt9ZnVuY3Rpb24gT3kodCxuLGUpe3QuX2NvbnRleHQuYmV6aWVyQ3VydmVUbygoMip0Ll94MCt0Ll94MSkvMywoMip0Ll95MCt0Ll95MSkvMywodC5feDArMip0Ll94MSkvMywodC5feTArMip0Ll95MSkvMywodC5feDArNCp0Ll94MStuKS82LCh0Ll95MCs0KnQuX3kxK2UpLzYpfWZ1bmN0aW9uIFl5KHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiBCeSh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gRnkodCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIEl5KHQsbil7dGhpcy5fYmFzaXM9bmV3IFl5KHQpLHRoaXMuX2JldGE9bn1ZeS5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl95MD10aGlzLl95MT1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAzOk95KHRoaXMsdGhpcy5feDEsdGhpcy5feTEpO2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94MSx0aGlzLl95MSl9KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LG4pe3N3aXRjaCh0PSt0LG49K24sdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxuKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LG4pO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX2NvbnRleHQubGluZVRvKCg1KnRoaXMuX3gwK3RoaXMuX3gxKS82LCg1KnRoaXMuX3kwK3RoaXMuX3kxKS82KTtkZWZhdWx0Ok95KHRoaXMsdCxuKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPW59fSxCeS5wcm90b3R5cGU9e2FyZWFTdGFydDpxeSxhcmVhRW5kOnF5LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3gzPXRoaXMuX3g0PXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPXRoaXMuX3kzPXRoaXMuX3k0PU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDE6dGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDIsdGhpcy5feTIpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWs7Y2FzZSAyOnRoaXMuX2NvbnRleHQubW92ZVRvKCh0aGlzLl94MisyKnRoaXMuX3gzKS8zLCh0aGlzLl95MisyKnRoaXMuX3kzKS8zKSx0aGlzLl9jb250ZXh0LmxpbmVUbygodGhpcy5feDMrMip0aGlzLl94MikvMywodGhpcy5feTMrMip0aGlzLl95MikvMyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVhaztjYXNlIDM6dGhpcy5wb2ludCh0aGlzLl94Mix0aGlzLl95MiksdGhpcy5wb2ludCh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5wb2ludCh0aGlzLl94NCx0aGlzLl95NCl9fSxwb2ludDpmdW5jdGlvbih0LG4pe3N3aXRjaCh0PSt0LG49K24sdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX3gyPXQsdGhpcy5feTI9bjticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9Mix0aGlzLl94Mz10LHRoaXMuX3kzPW47YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5feDQ9dCx0aGlzLl95ND1uLHRoaXMuX2NvbnRleHQubW92ZVRvKCh0aGlzLl94MCs0KnRoaXMuX3gxK3QpLzYsKHRoaXMuX3kwKzQqdGhpcy5feTErbikvNik7YnJlYWs7ZGVmYXVsdDpPeSh0aGlzLHQsbil9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT1ufX0sRnkucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feTA9dGhpcy5feTE9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjM9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsbil7c3dpdGNoKHQ9K3Qsbj0rbix0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTE7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTM7dmFyIGU9KHRoaXMuX3gwKzQqdGhpcy5feDErdCkvNixyPSh0aGlzLl95MCs0KnRoaXMuX3kxK24pLzY7dGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyhlLHIpOnRoaXMuX2NvbnRleHQubW92ZVRvKGUscik7YnJlYWs7Y2FzZSAzOnRoaXMuX3BvaW50PTQ7ZGVmYXVsdDpPeSh0aGlzLHQsbil9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT1ufX0sSXkucHJvdG90eXBlPXtsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94PVtdLHRoaXMuX3k9W10sdGhpcy5fYmFzaXMubGluZVN0YXJ0KCl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl94LG49dGhpcy5feSxlPXQubGVuZ3RoLTE7aWYoZT4wKWZvcih2YXIgcixpPXRbMF0sbz1uWzBdLGE9dFtlXS1pLHU9bltlXS1vLGY9LTE7KytmPD1lOylyPWYvZSx0aGlzLl9iYXNpcy5wb2ludCh0aGlzLl9iZXRhKnRbZl0rKDEtdGhpcy5fYmV0YSkqKGkrciphKSx0aGlzLl9iZXRhKm5bZl0rKDEtdGhpcy5fYmV0YSkqKG8rcip1KSk7dGhpcy5feD10aGlzLl95PW51bGwsdGhpcy5fYmFzaXMubGluZUVuZCgpfSxwb2ludDpmdW5jdGlvbih0LG4pe3RoaXMuX3gucHVzaCgrdCksdGhpcy5feS5wdXNoKCtuKX19O3ZhciBIeT1mdW5jdGlvbiB0KG4pe2Z1bmN0aW9uIGUodCl7cmV0dXJuIDE9PT1uP25ldyBZeSh0KTpuZXcgSXkodCxuKX1yZXR1cm4gZS5iZXRhPWZ1bmN0aW9uKG4pe3JldHVybiB0KCtuKX0sZX0oLjg1KTtmdW5jdGlvbiBqeSh0LG4sZSl7dC5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKHQuX3gxK3QuX2sqKHQuX3gyLXQuX3gwKSx0Ll95MSt0Ll9rKih0Ll95Mi10Ll95MCksdC5feDIrdC5fayoodC5feDEtbiksdC5feTIrdC5fayoodC5feTEtZSksdC5feDIsdC5feTIpfWZ1bmN0aW9uIFh5KHQsbil7dGhpcy5fY29udGV4dD10LHRoaXMuX2s9KDEtbikvNn1YeS5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6ankodGhpcyx0aGlzLl94MSx0aGlzLl95MSl9KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LG4pe3N3aXRjaCh0PSt0LG49K24sdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxuKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LG4pO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX3gxPXQsdGhpcy5feTE9bjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9MztkZWZhdWx0Omp5KHRoaXMsdCxuKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPW59fTt2YXIgR3k9ZnVuY3Rpb24gdChuKXtmdW5jdGlvbiBlKHQpe3JldHVybiBuZXcgWHkodCxuKX1yZXR1cm4gZS50ZW5zaW9uPWZ1bmN0aW9uKG4pe3JldHVybiB0KCtuKX0sZX0oMCk7ZnVuY3Rpb24gVnkodCxuKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5faz0oMS1uKS82fVZ5LnByb3RvdHlwZT17YXJlYVN0YXJ0OnF5LGFyZWFFbmQ6cXksbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feDM9dGhpcy5feDQ9dGhpcy5feDU9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9dGhpcy5feTM9dGhpcy5feTQ9dGhpcy5feTU9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVhaztjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWs7Y2FzZSAzOnRoaXMucG9pbnQodGhpcy5feDMsdGhpcy5feTMpLHRoaXMucG9pbnQodGhpcy5feDQsdGhpcy5feTQpLHRoaXMucG9pbnQodGhpcy5feDUsdGhpcy5feTUpfX0scG9pbnQ6ZnVuY3Rpb24odCxuKXtzd2l0Y2godD0rdCxuPStuLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl94Mz10LHRoaXMuX3kzPW47YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTIsdGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDQ9dCx0aGlzLl95ND1uKTticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl94NT10LHRoaXMuX3k1PW47YnJlYWs7ZGVmYXVsdDpqeSh0aGlzLHQsbil9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1ufX07dmFyICR5PWZ1bmN0aW9uIHQobil7ZnVuY3Rpb24gZSh0KXtyZXR1cm4gbmV3IFZ5KHQsbil9cmV0dXJuIGUudGVuc2lvbj1mdW5jdGlvbihuKXtyZXR1cm4gdCgrbil9LGV9KDApO2Z1bmN0aW9uIFd5KHQsbil7dGhpcy5fY29udGV4dD10LHRoaXMuX2s9KDEtbikvNn1XeS5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpeyh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMz09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxuKXtzd2l0Y2godD0rdCxuPStuLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Mix0aGlzLl95Mik7YnJlYWs7Y2FzZSAzOnRoaXMuX3BvaW50PTQ7ZGVmYXVsdDpqeSh0aGlzLHQsbil9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1ufX07dmFyIFp5PWZ1bmN0aW9uIHQobil7ZnVuY3Rpb24gZSh0KXtyZXR1cm4gbmV3IFd5KHQsbil9cmV0dXJuIGUudGVuc2lvbj1mdW5jdGlvbihuKXtyZXR1cm4gdCgrbil9LGV9KDApO2Z1bmN0aW9uIFF5KHQsbixlKXt2YXIgcj10Ll94MSxpPXQuX3kxLG89dC5feDIsYT10Ll95MjtpZih0Ll9sMDFfYT5GZyl7dmFyIHU9Mip0Ll9sMDFfMmErMyp0Ll9sMDFfYSp0Ll9sMTJfYSt0Ll9sMTJfMmEsZj0zKnQuX2wwMV9hKih0Ll9sMDFfYSt0Ll9sMTJfYSk7cj0ocip1LXQuX3gwKnQuX2wxMl8yYSt0Ll94Mip0Ll9sMDFfMmEpL2YsaT0oaSp1LXQuX3kwKnQuX2wxMl8yYSt0Ll95Mip0Ll9sMDFfMmEpL2Z9aWYodC5fbDIzX2E+Rmcpe3ZhciBjPTIqdC5fbDIzXzJhKzMqdC5fbDIzX2EqdC5fbDEyX2ErdC5fbDEyXzJhLHM9Myp0Ll9sMjNfYSoodC5fbDIzX2ErdC5fbDEyX2EpO289KG8qYyt0Ll94MSp0Ll9sMjNfMmEtbip0Ll9sMTJfMmEpL3MsYT0oYSpjK3QuX3kxKnQuX2wyM18yYS1lKnQuX2wxMl8yYSkvc310Ll9jb250ZXh0LmJlemllckN1cnZlVG8ocixpLG8sYSx0Ll94Mix0Ll95Mil9ZnVuY3Rpb24gSnkodCxuKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5fYWxwaGE9bn1KeS5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fbDAxX2E9dGhpcy5fbDEyX2E9dGhpcy5fbDIzX2E9dGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmE9dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6dGhpcy5wb2ludCh0aGlzLl94Mix0aGlzLl95Mil9KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LG4pe2lmKHQ9K3Qsbj0rbix0aGlzLl9wb2ludCl7dmFyIGU9dGhpcy5feDItdCxyPXRoaXMuX3kyLW47dGhpcy5fbDIzX2E9TWF0aC5zcXJ0KHRoaXMuX2wyM18yYT1NYXRoLnBvdyhlKmUrcipyLHRoaXMuX2FscGhhKSl9c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHQsbik6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxuKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9MztkZWZhdWx0OlF5KHRoaXMsdCxuKX10aGlzLl9sMDFfYT10aGlzLl9sMTJfYSx0aGlzLl9sMTJfYT10aGlzLl9sMjNfYSx0aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhLHRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmEsdGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1ufX07dmFyIEt5PWZ1bmN0aW9uIHQobil7ZnVuY3Rpb24gZSh0KXtyZXR1cm4gbj9uZXcgSnkodCxuKTpuZXcgWHkodCwwKX1yZXR1cm4gZS5hbHBoYT1mdW5jdGlvbihuKXtyZXR1cm4gdCgrbil9LGV9KC41KTtmdW5jdGlvbiB0Xyh0LG4pe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl9hbHBoYT1ufXRfLnByb3RvdHlwZT17YXJlYVN0YXJ0OnF5LGFyZWFFbmQ6cXksbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feDM9dGhpcy5feDQ9dGhpcy5feDU9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9dGhpcy5feTM9dGhpcy5feTQ9dGhpcy5feTU9TmFOLHRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hPXRoaXMuX2wyM19hPXRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhPXRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVhaztjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWs7Y2FzZSAzOnRoaXMucG9pbnQodGhpcy5feDMsdGhpcy5feTMpLHRoaXMucG9pbnQodGhpcy5feDQsdGhpcy5feTQpLHRoaXMucG9pbnQodGhpcy5feDUsdGhpcy5feTUpfX0scG9pbnQ6ZnVuY3Rpb24odCxuKXtpZih0PSt0LG49K24sdGhpcy5fcG9pbnQpe3ZhciBlPXRoaXMuX3gyLXQscj10aGlzLl95Mi1uO3RoaXMuX2wyM19hPU1hdGguc3FydCh0aGlzLl9sMjNfMmE9TWF0aC5wb3coZSplK3Iqcix0aGlzLl9hbHBoYSkpfXN3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5feDM9dCx0aGlzLl95Mz1uO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3g0PXQsdGhpcy5feTQ9bik7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5feDU9dCx0aGlzLl95NT1uO2JyZWFrO2RlZmF1bHQ6UXkodGhpcyx0LG4pfXRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hLHRoaXMuX2wxMl9hPXRoaXMuX2wyM19hLHRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmEsdGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYSx0aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPW59fTt2YXIgbl89ZnVuY3Rpb24gdChuKXtmdW5jdGlvbiBlKHQpe3JldHVybiBuP25ldyB0Xyh0LG4pOm5ldyBWeSh0LDApfXJldHVybiBlLmFscGhhPWZ1bmN0aW9uKG4pe3JldHVybiB0KCtuKX0sZX0oLjUpO2Z1bmN0aW9uIGVfKHQsbil7dGhpcy5fY29udGV4dD10LHRoaXMuX2FscGhhPW59ZV8ucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9TmFOLHRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hPXRoaXMuX2wyM19hPXRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhPXRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjM9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsbil7aWYodD0rdCxuPStuLHRoaXMuX3BvaW50KXt2YXIgZT10aGlzLl94Mi10LHI9dGhpcy5feTItbjt0aGlzLl9sMjNfYT1NYXRoLnNxcnQodGhpcy5fbDIzXzJhPU1hdGgucG93KGUqZStyKnIsdGhpcy5fYWxwaGEpKX1zd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpOnRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6dGhpcy5fcG9pbnQ9NDtkZWZhdWx0OlF5KHRoaXMsdCxuKX10aGlzLl9sMDFfYT10aGlzLl9sMTJfYSx0aGlzLl9sMTJfYT10aGlzLl9sMjNfYSx0aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhLHRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmEsdGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1ufX07dmFyIHJfPWZ1bmN0aW9uIHQobil7ZnVuY3Rpb24gZSh0KXtyZXR1cm4gbj9uZXcgZV8odCxuKTpuZXcgV3kodCwwKX1yZXR1cm4gZS5hbHBoYT1mdW5jdGlvbihuKXtyZXR1cm4gdCgrbil9LGV9KC41KTtmdW5jdGlvbiBpXyh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gb18odCl7cmV0dXJuIHQ8MD8tMToxfWZ1bmN0aW9uIGFfKHQsbixlKXt2YXIgcj10Ll94MS10Ll94MCxpPW4tdC5feDEsbz0odC5feTEtdC5feTApLyhyfHxpPDAmJi0wKSxhPShlLXQuX3kxKS8oaXx8cjwwJiYtMCksdT0obyppK2EqcikvKHIraSk7cmV0dXJuKG9fKG8pK29fKGEpKSpNYXRoLm1pbihNYXRoLmFicyhvKSxNYXRoLmFicyhhKSwuNSpNYXRoLmFicyh1KSl8fDB9ZnVuY3Rpb24gdV8odCxuKXt2YXIgZT10Ll94MS10Ll94MDtyZXR1cm4gZT8oMyoodC5feTEtdC5feTApL2UtbikvMjpufWZ1bmN0aW9uIGZfKHQsbixlKXt2YXIgcj10Ll94MCxpPXQuX3kwLG89dC5feDEsYT10Ll95MSx1PShvLXIpLzM7dC5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKHIrdSxpK3UqbixvLXUsYS11KmUsbyxhKX1mdW5jdGlvbiBjXyh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gc18odCl7dGhpcy5fY29udGV4dD1uZXcgbF8odCl9ZnVuY3Rpb24gbF8odCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIGhfKHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiBkXyh0KXt2YXIgbixlLHI9dC5sZW5ndGgtMSxpPW5ldyBBcnJheShyKSxvPW5ldyBBcnJheShyKSxhPW5ldyBBcnJheShyKTtmb3IoaVswXT0wLG9bMF09MixhWzBdPXRbMF0rMip0WzFdLG49MTtuPHItMTsrK24paVtuXT0xLG9bbl09NCxhW25dPTQqdFtuXSsyKnRbbisxXTtmb3IoaVtyLTFdPTIsb1tyLTFdPTcsYVtyLTFdPTgqdFtyLTFdK3Rbcl0sbj0xO248cjsrK24pZT1pW25dL29bbi0xXSxvW25dLT1lLGFbbl0tPWUqYVtuLTFdO2ZvcihpW3ItMV09YVtyLTFdL29bci0xXSxuPXItMjtuPj0wOy0tbilpW25dPShhW25dLWlbbisxXSkvb1tuXTtmb3Iob1tyLTFdPSh0W3JdK2lbci0xXSkvMixuPTA7bjxyLTE7KytuKW9bbl09Mip0W24rMV0taVtuKzFdO3JldHVybltpLG9dfWZ1bmN0aW9uIHBfKHQsbil7dGhpcy5fY29udGV4dD10LHRoaXMuX3Q9bn1mdW5jdGlvbiB2Xyh0LG4pe2lmKChpPXQubGVuZ3RoKT4xKWZvcih2YXIgZSxyLGksbz0xLGE9dFtuWzBdXSx1PWEubGVuZ3RoO288aTsrK28pZm9yKHI9YSxhPXRbbltvXV0sZT0wO2U8dTsrK2UpYVtlXVsxXSs9YVtlXVswXT1pc05hTihyW2VdWzFdKT9yW2VdWzBdOnJbZV1bMV19ZnVuY3Rpb24gZ18odCl7Zm9yKHZhciBuPXQubGVuZ3RoLGU9bmV3IEFycmF5KG4pOy0tbj49MDspZVtuXT1uO3JldHVybiBlfWZ1bmN0aW9uIHlfKHQsbil7cmV0dXJuIHRbbl19ZnVuY3Rpb24gX18odCl7dmFyIG49dC5tYXAoYl8pO3JldHVybiBnXyh0KS5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5bdF0tbltlXX0pfWZ1bmN0aW9uIGJfKHQpe2Zvcih2YXIgbixlPTAscj0tMSxpPXQubGVuZ3RoOysrcjxpOykobj0rdFtyXVsxXSkmJihlKz1uKTtyZXR1cm4gZX1mdW5jdGlvbiBtXyh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24geF8odCl7cmV0dXJuIHRbMF19ZnVuY3Rpb24gd18odCl7cmV0dXJuIHRbMV19ZnVuY3Rpb24gTV8oKXt0aGlzLl89bnVsbH1mdW5jdGlvbiBBXyh0KXt0LlU9dC5DPXQuTD10LlI9dC5QPXQuTj1udWxsfWZ1bmN0aW9uIFRfKHQsbil7dmFyIGU9bixyPW4uUixpPWUuVTtpP2kuTD09PWU/aS5MPXI6aS5SPXI6dC5fPXIsci5VPWksZS5VPXIsZS5SPXIuTCxlLlImJihlLlIuVT1lKSxyLkw9ZX1mdW5jdGlvbiBOXyh0LG4pe3ZhciBlPW4scj1uLkwsaT1lLlU7aT9pLkw9PT1lP2kuTD1yOmkuUj1yOnQuXz1yLHIuVT1pLGUuVT1yLGUuTD1yLlIsZS5MJiYoZS5MLlU9ZSksci5SPWV9ZnVuY3Rpb24gU18odCl7Zm9yKDt0Lkw7KXQ9dC5MO3JldHVybiB0fWZ1bmN0aW9uIEVfKHQsbixlLHIpe3ZhciBpPVtudWxsLG51bGxdLG89Sl8ucHVzaChpKS0xO3JldHVybiBpLmxlZnQ9dCxpLnJpZ2h0PW4sZSYmQ18oaSx0LG4sZSksciYmQ18oaSxuLHQsciksWl9bdC5pbmRleF0uaGFsZmVkZ2VzLnB1c2gobyksWl9bbi5pbmRleF0uaGFsZmVkZ2VzLnB1c2gobyksaX1mdW5jdGlvbiBrXyh0LG4sZSl7dmFyIHI9W24sZV07cmV0dXJuIHIubGVmdD10LHJ9ZnVuY3Rpb24gQ18odCxuLGUscil7dFswXXx8dFsxXT90LmxlZnQ9PT1lP3RbMV09cjp0WzBdPXI6KHRbMF09cix0LmxlZnQ9bix0LnJpZ2h0PWUpfWZ1bmN0aW9uIFBfKHQsbixlLHIsaSl7dmFyIG8sYT10WzBdLHU9dFsxXSxmPWFbMF0sYz1hWzFdLHM9MCxsPTEsaD11WzBdLWYsZD11WzFdLWM7aWYobz1uLWYsaHx8IShvPjApKXtpZihvLz1oLGg8MCl7aWYobzxzKXJldHVybjtvPGwmJihsPW8pfWVsc2UgaWYoaD4wKXtpZihvPmwpcmV0dXJuO28+cyYmKHM9byl9aWYobz1yLWYsaHx8IShvPDApKXtpZihvLz1oLGg8MCl7aWYobz5sKXJldHVybjtvPnMmJihzPW8pfWVsc2UgaWYoaD4wKXtpZihvPHMpcmV0dXJuO288bCYmKGw9byl9aWYobz1lLWMsZHx8IShvPjApKXtpZihvLz1kLGQ8MCl7aWYobzxzKXJldHVybjtvPGwmJihsPW8pfWVsc2UgaWYoZD4wKXtpZihvPmwpcmV0dXJuO28+cyYmKHM9byl9aWYobz1pLWMsZHx8IShvPDApKXtpZihvLz1kLGQ8MCl7aWYobz5sKXJldHVybjtvPnMmJihzPW8pfWVsc2UgaWYoZD4wKXtpZihvPHMpcmV0dXJuO288bCYmKGw9byl9cmV0dXJuIShzPjB8fGw8MSl8fChzPjAmJih0WzBdPVtmK3MqaCxjK3MqZF0pLGw8MSYmKHRbMV09W2YrbCpoLGMrbCpkXSksITApfX19fX1mdW5jdGlvbiB6Xyh0LG4sZSxyLGkpe3ZhciBvPXRbMV07aWYobylyZXR1cm4hMDt2YXIgYSx1LGY9dFswXSxjPXQubGVmdCxzPXQucmlnaHQsbD1jWzBdLGg9Y1sxXSxkPXNbMF0scD1zWzFdLHY9KGwrZCkvMixnPShoK3ApLzI7aWYocD09PWgpe2lmKHY8bnx8dj49cilyZXR1cm47aWYobD5kKXtpZihmKXtpZihmWzFdPj1pKXJldHVybn1lbHNlIGY9W3YsZV07bz1bdixpXX1lbHNle2lmKGYpe2lmKGZbMV08ZSlyZXR1cm59ZWxzZSBmPVt2LGldO289W3YsZV19fWVsc2UgaWYodT1nLShhPShsLWQpLyhwLWgpKSp2LGE8LTF8fGE+MSlpZihsPmQpe2lmKGYpe2lmKGZbMV0+PWkpcmV0dXJufWVsc2UgZj1bKGUtdSkvYSxlXTtvPVsoaS11KS9hLGldfWVsc2V7aWYoZil7aWYoZlsxXTxlKXJldHVybn1lbHNlIGY9WyhpLXUpL2EsaV07bz1bKGUtdSkvYSxlXX1lbHNlIGlmKGg8cCl7aWYoZil7aWYoZlswXT49cilyZXR1cm59ZWxzZSBmPVtuLGEqbit1XTtvPVtyLGEqcit1XX1lbHNle2lmKGYpe2lmKGZbMF08bilyZXR1cm59ZWxzZSBmPVtyLGEqcit1XTtvPVtuLGEqbit1XX1yZXR1cm4gdFswXT1mLHRbMV09bywhMH1mdW5jdGlvbiBSXyh0LG4pe3ZhciBlPXQuc2l0ZSxyPW4ubGVmdCxpPW4ucmlnaHQ7cmV0dXJuIGU9PT1pJiYoaT1yLHI9ZSksaT9NYXRoLmF0YW4yKGlbMV0tclsxXSxpWzBdLXJbMF0pOihlPT09cj8ocj1uWzFdLGk9blswXSk6KHI9blswXSxpPW5bMV0pLE1hdGguYXRhbjIoclswXS1pWzBdLGlbMV0tclsxXSkpfWZ1bmN0aW9uIExfKHQsbil7cmV0dXJuIG5bKyhuLmxlZnQhPT10LnNpdGUpXX1mdW5jdGlvbiBEXyh0LG4pe3JldHVybiBuWysobi5sZWZ0PT09dC5zaXRlKV19aV8ucHJvdG90eXBlPXthcmVhU3RhcnQ6cXksYXJlYUVuZDpxeSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCl9LHBvaW50OmZ1bmN0aW9uKHQsbil7dD0rdCxuPStuLHRoaXMuX3BvaW50P3RoaXMuX2NvbnRleHQubGluZVRvKHQsbik6KHRoaXMuX3BvaW50PTEsdGhpcy5fY29udGV4dC5tb3ZlVG8odCxuKSl9fSxjXy5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl95MD10aGlzLl95MT10aGlzLl90MD1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gxLHRoaXMuX3kxKTticmVhaztjYXNlIDM6Zl8odGhpcyx0aGlzLl90MCx1Xyh0aGlzLHRoaXMuX3QwKSl9KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LG4pe3ZhciBlPU5hTjtpZihuPStuLCh0PSt0KSE9PXRoaXMuX3gxfHxuIT09dGhpcy5feTEpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LG4pOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsbik7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsZl8odGhpcyx1Xyh0aGlzLGU9YV8odGhpcyx0LG4pKSxlKTticmVhaztkZWZhdWx0OmZfKHRoaXMsdGhpcy5fdDAsZT1hXyh0aGlzLHQsbikpfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9bix0aGlzLl90MD1lfX19LChzXy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShjXy5wcm90b3R5cGUpKS5wb2ludD1mdW5jdGlvbih0LG4pe2NfLnByb3RvdHlwZS5wb2ludC5jYWxsKHRoaXMsbix0KX0sbF8ucHJvdG90eXBlPXttb3ZlVG86ZnVuY3Rpb24odCxuKXt0aGlzLl9jb250ZXh0Lm1vdmVUbyhuLHQpfSxjbG9zZVBhdGg6ZnVuY3Rpb24oKXt0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpfSxsaW5lVG86ZnVuY3Rpb24odCxuKXt0aGlzLl9jb250ZXh0LmxpbmVUbyhuLHQpfSxiZXppZXJDdXJ2ZVRvOmZ1bmN0aW9uKHQsbixlLHIsaSxvKXt0aGlzLl9jb250ZXh0LmJlemllckN1cnZlVG8obix0LHIsZSxvLGkpfX0saF8ucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feD1bXSx0aGlzLl95PVtdfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5feCxuPXRoaXMuX3ksZT10Lmxlbmd0aDtpZihlKWlmKHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odFswXSxuWzBdKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0WzBdLG5bMF0pLDI9PT1lKXRoaXMuX2NvbnRleHQubGluZVRvKHRbMV0sblsxXSk7ZWxzZSBmb3IodmFyIHI9ZF8odCksaT1kXyhuKSxvPTAsYT0xO2E8ZTsrK28sKythKXRoaXMuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyhyWzBdW29dLGlbMF1bb10sclsxXVtvXSxpWzFdW29dLHRbYV0sblthXSk7KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09ZSkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmUsdGhpcy5feD10aGlzLl95PW51bGx9LHBvaW50OmZ1bmN0aW9uKHQsbil7dGhpcy5feC5wdXNoKCt0KSx0aGlzLl95LnB1c2goK24pfX0scF8ucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feD10aGlzLl95PU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7MDx0aGlzLl90JiZ0aGlzLl90PDEmJjI9PT10aGlzLl9wb2ludCYmdGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feCx0aGlzLl95KSwodGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT49MCYmKHRoaXMuX3Q9MS10aGlzLl90LHRoaXMuX2xpbmU9MS10aGlzLl9saW5lKX0scG9pbnQ6ZnVuY3Rpb24odCxuKXtzd2l0Y2godD0rdCxuPStuLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHQsbik6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxuKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjtkZWZhdWx0OmlmKHRoaXMuX3Q8PTApdGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feCxuKSx0aGlzLl9jb250ZXh0LmxpbmVUbyh0LG4pO2Vsc2V7dmFyIGU9dGhpcy5feCooMS10aGlzLl90KSt0KnRoaXMuX3Q7dGhpcy5fY29udGV4dC5saW5lVG8oZSx0aGlzLl95KSx0aGlzLl9jb250ZXh0LmxpbmVUbyhlLG4pfX10aGlzLl94PXQsdGhpcy5feT1ufX0sTV8ucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpNXyxpbnNlcnQ6ZnVuY3Rpb24odCxuKXt2YXIgZSxyLGk7aWYodCl7aWYobi5QPXQsbi5OPXQuTix0Lk4mJih0Lk4uUD1uKSx0Lk49bix0LlIpe2Zvcih0PXQuUjt0Lkw7KXQ9dC5MO3QuTD1ufWVsc2UgdC5SPW47ZT10fWVsc2UgdGhpcy5fPyh0PVNfKHRoaXMuXyksbi5QPW51bGwsbi5OPXQsdC5QPXQuTD1uLGU9dCk6KG4uUD1uLk49bnVsbCx0aGlzLl89bixlPW51bGwpO2ZvcihuLkw9bi5SPW51bGwsbi5VPWUsbi5DPSEwLHQ9bjtlJiZlLkM7KWU9PT0ocj1lLlUpLkw/KGk9ci5SKSYmaS5DPyhlLkM9aS5DPSExLHIuQz0hMCx0PXIpOih0PT09ZS5SJiYoVF8odGhpcyxlKSxlPSh0PWUpLlUpLGUuQz0hMSxyLkM9ITAsTl8odGhpcyxyKSk6KGk9ci5MKSYmaS5DPyhlLkM9aS5DPSExLHIuQz0hMCx0PXIpOih0PT09ZS5MJiYoTl8odGhpcyxlKSxlPSh0PWUpLlUpLGUuQz0hMSxyLkM9ITAsVF8odGhpcyxyKSksZT10LlU7dGhpcy5fLkM9ITF9LHJlbW92ZTpmdW5jdGlvbih0KXt0Lk4mJih0Lk4uUD10LlApLHQuUCYmKHQuUC5OPXQuTiksdC5OPXQuUD1udWxsO3ZhciBuLGUscixpPXQuVSxvPXQuTCxhPXQuUjtpZihlPW8/YT9TXyhhKTpvOmEsaT9pLkw9PT10P2kuTD1lOmkuUj1lOnRoaXMuXz1lLG8mJmE/KHI9ZS5DLGUuQz10LkMsZS5MPW8sby5VPWUsZSE9PWE/KGk9ZS5VLGUuVT10LlUsdD1lLlIsaS5MPXQsZS5SPWEsYS5VPWUpOihlLlU9aSxpPWUsdD1lLlIpKToocj10LkMsdD1lKSx0JiYodC5VPWkpLCFyKWlmKHQmJnQuQyl0LkM9ITE7ZWxzZXtkb3tpZih0PT09dGhpcy5fKWJyZWFrO2lmKHQ9PT1pLkwpe2lmKChuPWkuUikuQyYmKG4uQz0hMSxpLkM9ITAsVF8odGhpcyxpKSxuPWkuUiksbi5MJiZuLkwuQ3x8bi5SJiZuLlIuQyl7bi5SJiZuLlIuQ3x8KG4uTC5DPSExLG4uQz0hMCxOXyh0aGlzLG4pLG49aS5SKSxuLkM9aS5DLGkuQz1uLlIuQz0hMSxUXyh0aGlzLGkpLHQ9dGhpcy5fO2JyZWFrfX1lbHNlIGlmKChuPWkuTCkuQyYmKG4uQz0hMSxpLkM9ITAsTl8odGhpcyxpKSxuPWkuTCksbi5MJiZuLkwuQ3x8bi5SJiZuLlIuQyl7bi5MJiZuLkwuQ3x8KG4uUi5DPSExLG4uQz0hMCxUXyh0aGlzLG4pLG49aS5MKSxuLkM9aS5DLGkuQz1uLkwuQz0hMSxOXyh0aGlzLGkpLHQ9dGhpcy5fO2JyZWFrfW4uQz0hMCx0PWksaT1pLlV9d2hpbGUoIXQuQyk7dCYmKHQuQz0hMSl9fX07dmFyIFVfLHFfPVtdO2Z1bmN0aW9uIE9fKCl7QV8odGhpcyksdGhpcy54PXRoaXMueT10aGlzLmFyYz10aGlzLnNpdGU9dGhpcy5jeT1udWxsfWZ1bmN0aW9uIFlfKHQpe3ZhciBuPXQuUCxlPXQuTjtpZihuJiZlKXt2YXIgcj1uLnNpdGUsaT10LnNpdGUsbz1lLnNpdGU7aWYociE9PW8pe3ZhciBhPWlbMF0sdT1pWzFdLGY9clswXS1hLGM9clsxXS11LHM9b1swXS1hLGw9b1sxXS11LGg9MiooZipsLWMqcyk7aWYoIShoPj0tdGIpKXt2YXIgZD1mKmYrYypjLHA9cypzK2wqbCx2PShsKmQtYypwKS9oLGc9KGYqcC1zKmQpL2gseT1xXy5wb3AoKXx8bmV3IE9fO3kuYXJjPXQseS5zaXRlPWkseS54PXYrYSx5Lnk9KHkuY3k9Zyt1KStNYXRoLnNxcnQodip2K2cqZyksdC5jaXJjbGU9eTtmb3IodmFyIF89bnVsbCxiPVFfLl87YjspaWYoeS55PGIueXx8eS55PT09Yi55JiZ5Lng8PWIueCl7aWYoIWIuTCl7Xz1iLlA7YnJlYWt9Yj1iLkx9ZWxzZXtpZighYi5SKXtfPWI7YnJlYWt9Yj1iLlJ9UV8uaW5zZXJ0KF8seSksX3x8KFVfPXkpfX19fWZ1bmN0aW9uIEJfKHQpe3ZhciBuPXQuY2lyY2xlO24mJihuLlB8fChVXz1uLk4pLFFfLnJlbW92ZShuKSxxXy5wdXNoKG4pLEFfKG4pLHQuY2lyY2xlPW51bGwpfXZhciBGXz1bXTtmdW5jdGlvbiBJXygpe0FfKHRoaXMpLHRoaXMuZWRnZT10aGlzLnNpdGU9dGhpcy5jaXJjbGU9bnVsbH1mdW5jdGlvbiBIXyh0KXt2YXIgbj1GXy5wb3AoKXx8bmV3IElfO3JldHVybiBuLnNpdGU9dCxufWZ1bmN0aW9uIGpfKHQpe0JfKHQpLFdfLnJlbW92ZSh0KSxGXy5wdXNoKHQpLEFfKHQpfWZ1bmN0aW9uIFhfKHQpe3ZhciBuPXQuY2lyY2xlLGU9bi54LHI9bi5jeSxpPVtlLHJdLG89dC5QLGE9dC5OLHU9W3RdO2pfKHQpO2Zvcih2YXIgZj1vO2YuY2lyY2xlJiZNYXRoLmFicyhlLWYuY2lyY2xlLngpPEtfJiZNYXRoLmFicyhyLWYuY2lyY2xlLmN5KTxLXzspbz1mLlAsdS51bnNoaWZ0KGYpLGpfKGYpLGY9bzt1LnVuc2hpZnQoZiksQl8oZik7Zm9yKHZhciBjPWE7Yy5jaXJjbGUmJk1hdGguYWJzKGUtYy5jaXJjbGUueCk8S18mJk1hdGguYWJzKHItYy5jaXJjbGUuY3kpPEtfOylhPWMuTix1LnB1c2goYyksal8oYyksYz1hO3UucHVzaChjKSxCXyhjKTt2YXIgcyxsPXUubGVuZ3RoO2ZvcihzPTE7czxsOysrcyljPXVbc10sZj11W3MtMV0sQ18oYy5lZGdlLGYuc2l0ZSxjLnNpdGUsaSk7Zj11WzBdLChjPXVbbC0xXSkuZWRnZT1FXyhmLnNpdGUsYy5zaXRlLG51bGwsaSksWV8oZiksWV8oYyl9ZnVuY3Rpb24gR18odCl7Zm9yKHZhciBuLGUscixpLG89dFswXSxhPXRbMV0sdT1XXy5fO3U7KWlmKChyPVZfKHUsYSktbyk+S18pdT11Lkw7ZWxzZXtpZighKChpPW8tJF8odSxhKSk+S18pKXtyPi1LXz8obj11LlAsZT11KTppPi1LXz8obj11LGU9dS5OKTpuPWU9dTticmVha31pZighdS5SKXtuPXU7YnJlYWt9dT11LlJ9IWZ1bmN0aW9uKHQpe1pfW3QuaW5kZXhdPXtzaXRlOnQsaGFsZmVkZ2VzOltdfX0odCk7dmFyIGY9SF8odCk7aWYoV18uaW5zZXJ0KG4sZiksbnx8ZSl7aWYobj09PWUpcmV0dXJuIEJfKG4pLGU9SF8obi5zaXRlKSxXXy5pbnNlcnQoZixlKSxmLmVkZ2U9ZS5lZGdlPUVfKG4uc2l0ZSxmLnNpdGUpLFlfKG4pLHZvaWQgWV8oZSk7aWYoZSl7Ql8obiksQl8oZSk7dmFyIGM9bi5zaXRlLHM9Y1swXSxsPWNbMV0saD10WzBdLXMsZD10WzFdLWwscD1lLnNpdGUsdj1wWzBdLXMsZz1wWzFdLWwseT0yKihoKmctZCp2KSxfPWgqaCtkKmQsYj12KnYrZypnLG09WyhnKl8tZCpiKS95K3MsKGgqYi12Kl8pL3krbF07Q18oZS5lZGdlLGMscCxtKSxmLmVkZ2U9RV8oYyx0LG51bGwsbSksZS5lZGdlPUVfKHQscCxudWxsLG0pLFlfKG4pLFlfKGUpfWVsc2UgZi5lZGdlPUVfKG4uc2l0ZSxmLnNpdGUpfX1mdW5jdGlvbiBWXyh0LG4pe3ZhciBlPXQuc2l0ZSxyPWVbMF0saT1lWzFdLG89aS1uO2lmKCFvKXJldHVybiByO3ZhciBhPXQuUDtpZighYSlyZXR1cm4tMS8wO3ZhciB1PShlPWEuc2l0ZSlbMF0sZj1lWzFdLGM9Zi1uO2lmKCFjKXJldHVybiB1O3ZhciBzPXUtcixsPTEvby0xL2MsaD1zL2M7cmV0dXJuIGw/KC1oK01hdGguc3FydChoKmgtMipsKihzKnMvKC0yKmMpLWYrYy8yK2ktby8yKSkpL2wrcjoocit1KS8yfWZ1bmN0aW9uICRfKHQsbil7dmFyIGU9dC5OO2lmKGUpcmV0dXJuIFZfKGUsbik7dmFyIHI9dC5zaXRlO3JldHVybiByWzFdPT09bj9yWzBdOjEvMH12YXIgV18sWl8sUV8sSl8sS189MWUtNix0Yj0xZS0xMjtmdW5jdGlvbiBuYih0LG4pe3JldHVybiBuWzFdLXRbMV18fG5bMF0tdFswXX1mdW5jdGlvbiBlYih0LG4pe3ZhciBlLHIsaSxvPXQuc29ydChuYikucG9wKCk7Zm9yKEpfPVtdLFpfPW5ldyBBcnJheSh0Lmxlbmd0aCksV189bmV3IE1fLFFfPW5ldyBNXzs7KWlmKGk9VV8sbyYmKCFpfHxvWzFdPGkueXx8b1sxXT09PWkueSYmb1swXTxpLngpKW9bMF09PT1lJiZvWzFdPT09cnx8KEdfKG8pLGU9b1swXSxyPW9bMV0pLG89dC5wb3AoKTtlbHNle2lmKCFpKWJyZWFrO1hfKGkuYXJjKX1pZihmdW5jdGlvbigpe2Zvcih2YXIgdCxuLGUscixpPTAsbz1aXy5sZW5ndGg7aTxvOysraSlpZigodD1aX1tpXSkmJihyPShuPXQuaGFsZmVkZ2VzKS5sZW5ndGgpKXt2YXIgYT1uZXcgQXJyYXkociksdT1uZXcgQXJyYXkocik7Zm9yKGU9MDtlPHI7KytlKWFbZV09ZSx1W2VdPVJfKHQsSl9bbltlXV0pO2ZvcihhLnNvcnQoZnVuY3Rpb24odCxuKXtyZXR1cm4gdVtuXS11W3RdfSksZT0wO2U8cjsrK2UpdVtlXT1uW2FbZV1dO2ZvcihlPTA7ZTxyOysrZSluW2VdPXVbZV19fSgpLG4pe3ZhciBhPStuWzBdWzBdLHU9K25bMF1bMV0sZj0rblsxXVswXSxjPStuWzFdWzFdOyFmdW5jdGlvbih0LG4sZSxyKXtmb3IodmFyIGksbz1KXy5sZW5ndGg7by0tOyl6XyhpPUpfW29dLHQsbixlLHIpJiZQXyhpLHQsbixlLHIpJiYoTWF0aC5hYnMoaVswXVswXS1pWzFdWzBdKT5LX3x8TWF0aC5hYnMoaVswXVsxXS1pWzFdWzFdKT5LXyl8fGRlbGV0ZSBKX1tvXX0oYSx1LGYsYyksZnVuY3Rpb24odCxuLGUscil7dmFyIGksbyxhLHUsZixjLHMsbCxoLGQscCx2LGc9Wl8ubGVuZ3RoLHk9ITA7Zm9yKGk9MDtpPGc7KytpKWlmKG89Wl9baV0pe2ZvcihhPW8uc2l0ZSx1PShmPW8uaGFsZmVkZ2VzKS5sZW5ndGg7dS0tOylKX1tmW3VdXXx8Zi5zcGxpY2UodSwxKTtmb3IodT0wLGM9Zi5sZW5ndGg7dTxjOylwPShkPURfKG8sSl9bZlt1XV0pKVswXSx2PWRbMV0sbD0ocz1MXyhvLEpfW2ZbKyt1JWNdXSkpWzBdLGg9c1sxXSwoTWF0aC5hYnMocC1sKT5LX3x8TWF0aC5hYnModi1oKT5LXykmJihmLnNwbGljZSh1LDAsSl8ucHVzaChrXyhhLGQsTWF0aC5hYnMocC10KTxLXyYmci12PktfP1t0LE1hdGguYWJzKGwtdCk8S18/aDpyXTpNYXRoLmFicyh2LXIpPEtfJiZlLXA+S18/W01hdGguYWJzKGgtcik8S18/bDplLHJdOk1hdGguYWJzKHAtZSk8S18mJnYtbj5LXz9bZSxNYXRoLmFicyhsLWUpPEtfP2g6bl06TWF0aC5hYnModi1uKTxLXyYmcC10PktfP1tNYXRoLmFicyhoLW4pPEtfP2w6dCxuXTpudWxsKSktMSksKytjKTtjJiYoeT0hMSl9aWYoeSl7dmFyIF8sYixtLHg9MS8wO2ZvcihpPTAseT1udWxsO2k8ZzsrK2kpKG89Wl9baV0pJiYobT0oXz0oYT1vLnNpdGUpWzBdLXQpKl8rKGI9YVsxXS1uKSpiKTx4JiYoeD1tLHk9byk7aWYoeSl7dmFyIHc9W3Qsbl0sTT1bdCxyXSxBPVtlLHJdLFQ9W2Usbl07eS5oYWxmZWRnZXMucHVzaChKXy5wdXNoKGtfKGE9eS5zaXRlLHcsTSkpLTEsSl8ucHVzaChrXyhhLE0sQSkpLTEsSl8ucHVzaChrXyhhLEEsVCkpLTEsSl8ucHVzaChrXyhhLFQsdykpLTEpfX1mb3IoaT0wO2k8ZzsrK2kpKG89Wl9baV0pJiYoby5oYWxmZWRnZXMubGVuZ3RofHxkZWxldGUgWl9baV0pfShhLHUsZixjKX10aGlzLmVkZ2VzPUpfLHRoaXMuY2VsbHM9Wl8sV189UV89Sl89Wl89bnVsbH1mdW5jdGlvbiByYih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24gaWIodCxuLGUpe3RoaXMudGFyZ2V0PXQsdGhpcy50eXBlPW4sdGhpcy50cmFuc2Zvcm09ZX1mdW5jdGlvbiBvYih0LG4sZSl7dGhpcy5rPXQsdGhpcy54PW4sdGhpcy55PWV9ZWIucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjplYixwb2x5Z29uczpmdW5jdGlvbigpe3ZhciB0PXRoaXMuZWRnZXM7cmV0dXJuIHRoaXMuY2VsbHMubWFwKGZ1bmN0aW9uKG4pe3ZhciBlPW4uaGFsZmVkZ2VzLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gTF8obix0W2VdKX0pO3JldHVybiBlLmRhdGE9bi5zaXRlLmRhdGEsZX0pfSx0cmlhbmdsZXM6ZnVuY3Rpb24oKXt2YXIgdD1bXSxuPXRoaXMuZWRnZXM7cmV0dXJuIHRoaXMuY2VsbHMuZm9yRWFjaChmdW5jdGlvbihlLHIpe2lmKG89KGk9ZS5oYWxmZWRnZXMpLmxlbmd0aClmb3IodmFyIGksbyxhLHUsZixjLHM9ZS5zaXRlLGw9LTEsaD1uW2lbby0xXV0sZD1oLmxlZnQ9PT1zP2gucmlnaHQ6aC5sZWZ0OysrbDxvOylhPWQsZD0oaD1uW2lbbF1dKS5sZWZ0PT09cz9oLnJpZ2h0OmgubGVmdCxhJiZkJiZyPGEuaW5kZXgmJnI8ZC5pbmRleCYmKGY9YSxjPWQsKCh1PXMpWzBdLWNbMF0pKihmWzFdLXVbMV0pLSh1WzBdLWZbMF0pKihjWzFdLXVbMV0pPDApJiZ0LnB1c2goW3MuZGF0YSxhLmRhdGEsZC5kYXRhXSl9KSx0fSxsaW5rczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZ2VzLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdC5yaWdodH0pLm1hcChmdW5jdGlvbih0KXtyZXR1cm57c291cmNlOnQubGVmdC5kYXRhLHRhcmdldDp0LnJpZ2h0LmRhdGF9fSl9LGZpbmQ6ZnVuY3Rpb24odCxuLGUpe2Zvcih2YXIgcixpLG89dGhpcyxhPW8uX2ZvdW5kfHwwLHU9by5jZWxscy5sZW5ndGg7IShpPW8uY2VsbHNbYV0pOylpZigrK2E+PXUpcmV0dXJuIG51bGw7dmFyIGY9dC1pLnNpdGVbMF0sYz1uLWkuc2l0ZVsxXSxzPWYqZitjKmM7ZG97aT1vLmNlbGxzW3I9YV0sYT1udWxsLGkuaGFsZmVkZ2VzLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHI9by5lZGdlc1tlXSx1PXIubGVmdDtpZih1IT09aS5zaXRlJiZ1fHwodT1yLnJpZ2h0KSl7dmFyIGY9dC11WzBdLGM9bi11WzFdLGw9ZipmK2MqYztsPHMmJihzPWwsYT11LmluZGV4KX19KX13aGlsZShudWxsIT09YSk7cmV0dXJuIG8uX2ZvdW5kPXIsbnVsbD09ZXx8czw9ZSplP2kuc2l0ZTpudWxsfX0sb2IucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpvYixzY2FsZTpmdW5jdGlvbih0KXtyZXR1cm4gMT09PXQ/dGhpczpuZXcgb2IodGhpcy5rKnQsdGhpcy54LHRoaXMueSl9LHRyYW5zbGF0ZTpmdW5jdGlvbih0LG4pe3JldHVybiAwPT09dCYwPT09bj90aGlzOm5ldyBvYih0aGlzLmssdGhpcy54K3RoaXMuayp0LHRoaXMueSt0aGlzLmsqbil9LGFwcGx5OmZ1bmN0aW9uKHQpe3JldHVyblt0WzBdKnRoaXMuayt0aGlzLngsdFsxXSp0aGlzLmsrdGhpcy55XX0sYXBwbHlYOmZ1bmN0aW9uKHQpe3JldHVybiB0KnRoaXMuayt0aGlzLnh9LGFwcGx5WTpmdW5jdGlvbih0KXtyZXR1cm4gdCp0aGlzLmsrdGhpcy55fSxpbnZlcnQ6ZnVuY3Rpb24odCl7cmV0dXJuWyh0WzBdLXRoaXMueCkvdGhpcy5rLCh0WzFdLXRoaXMueSkvdGhpcy5rXX0saW52ZXJ0WDpmdW5jdGlvbih0KXtyZXR1cm4odC10aGlzLngpL3RoaXMua30saW52ZXJ0WTpmdW5jdGlvbih0KXtyZXR1cm4odC10aGlzLnkpL3RoaXMua30scmVzY2FsZVg6ZnVuY3Rpb24odCl7cmV0dXJuIHQuY29weSgpLmRvbWFpbih0LnJhbmdlKCkubWFwKHRoaXMuaW52ZXJ0WCx0aGlzKS5tYXAodC5pbnZlcnQsdCkpfSxyZXNjYWxlWTpmdW5jdGlvbih0KXtyZXR1cm4gdC5jb3B5KCkuZG9tYWluKHQucmFuZ2UoKS5tYXAodGhpcy5pbnZlcnRZLHRoaXMpLm1hcCh0LmludmVydCx0KSl9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuInRyYW5zbGF0ZSgiK3RoaXMueCsiLCIrdGhpcy55KyIpIHNjYWxlKCIrdGhpcy5rKyIpIn19O3ZhciBhYj1uZXcgb2IoMSwwLDApO2Z1bmN0aW9uIHViKHQpe3JldHVybiB0Ll9fem9vbXx8YWJ9ZnVuY3Rpb24gZmIoKXt0LmV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfWZ1bmN0aW9uIGNiKCl7dC5ldmVudC5wcmV2ZW50RGVmYXVsdCgpLHQuZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9ZnVuY3Rpb24gc2IoKXtyZXR1cm4hdC5ldmVudC5idXR0b259ZnVuY3Rpb24gbGIoKXt2YXIgdCxuLGU9dGhpcztyZXR1cm4gZSBpbnN0YW5jZW9mIFNWR0VsZW1lbnQ/KHQ9KGU9ZS5vd25lclNWR0VsZW1lbnR8fGUpLndpZHRoLmJhc2VWYWwudmFsdWUsbj1lLmhlaWdodC5iYXNlVmFsLnZhbHVlKToodD1lLmNsaWVudFdpZHRoLG49ZS5jbGllbnRIZWlnaHQpLFtbMCwwXSxbdCxuXV19ZnVuY3Rpb24gaGIoKXtyZXR1cm4gdGhpcy5fX3pvb218fGFifWZ1bmN0aW9uIGRiKCl7cmV0dXJuLXQuZXZlbnQuZGVsdGFZKih0LmV2ZW50LmRlbHRhTW9kZT8xMjA6MSkvNTAwfWZ1bmN0aW9uIHBiKCl7cmV0dXJuIm9udG91Y2hzdGFydCJpbiB0aGlzfWZ1bmN0aW9uIHZiKHQsbixlKXt2YXIgcj10LmludmVydFgoblswXVswXSktZVswXVswXSxpPXQuaW52ZXJ0WChuWzFdWzBdKS1lWzFdWzBdLG89dC5pbnZlcnRZKG5bMF1bMV0pLWVbMF1bMV0sYT10LmludmVydFkoblsxXVsxXSktZVsxXVsxXTtyZXR1cm4gdC50cmFuc2xhdGUoaT5yPyhyK2kpLzI6TWF0aC5taW4oMCxyKXx8TWF0aC5tYXgoMCxpKSxhPm8/KG8rYSkvMjpNYXRoLm1pbigwLG8pfHxNYXRoLm1heCgwLGEpKX11Yi5wcm90b3R5cGU9b2IucHJvdG90eXBlLHQudmVyc2lvbj0iNS43LjAiLHQuYmlzZWN0PWksdC5iaXNlY3RSaWdodD1pLHQuYmlzZWN0TGVmdD1vLHQuYXNjZW5kaW5nPW4sdC5iaXNlY3Rvcj1lLHQuY3Jvc3M9ZnVuY3Rpb24odCxuLGUpe3ZhciByLGksbyx1LGY9dC5sZW5ndGgsYz1uLmxlbmd0aCxzPW5ldyBBcnJheShmKmMpO2ZvcihudWxsPT1lJiYoZT1hKSxyPW89MDtyPGY7KytyKWZvcih1PXRbcl0saT0wO2k8YzsrK2ksKytvKXNbb109ZSh1LG5baV0pO3JldHVybiBzfSx0LmRlc2NlbmRpbmc9ZnVuY3Rpb24odCxuKXtyZXR1cm4gbjx0Py0xOm4+dD8xOm4+PXQ/MDpOYU59LHQuZGV2aWF0aW9uPWMsdC5leHRlbnQ9cyx0Lmhpc3RvZ3JhbT1mdW5jdGlvbigpe3ZhciB0PXYsbj1zLGU9TTtmdW5jdGlvbiByKHIpe3ZhciBvLGEsdT1yLmxlbmd0aCxmPW5ldyBBcnJheSh1KTtmb3Iobz0wO288dTsrK28pZltvXT10KHJbb10sbyxyKTt2YXIgYz1uKGYpLHM9Y1swXSxsPWNbMV0saD1lKGYscyxsKTtBcnJheS5pc0FycmF5KGgpfHwoaD13KHMsbCxoKSxoPWcoTWF0aC5jZWlsKHMvaCkqaCxsLGgpKTtmb3IodmFyIGQ9aC5sZW5ndGg7aFswXTw9czspaC5zaGlmdCgpLC0tZDtmb3IoO2hbZC0xXT5sOyloLnBvcCgpLC0tZDt2YXIgcCx2PW5ldyBBcnJheShkKzEpO2ZvcihvPTA7bzw9ZDsrK28pKHA9dltvXT1bXSkueDA9bz4wP2hbby0xXTpzLHAueDE9bzxkP2hbb106bDtmb3Iobz0wO288dTsrK28pczw9KGE9ZltvXSkmJmE8PWwmJnZbaShoLGEsMCxkKV0ucHVzaChyW29dKTtyZXR1cm4gdn1yZXR1cm4gci52YWx1ZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uOnAobikscik6dH0sci5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpwKFt0WzBdLHRbMV1dKSxyKTpufSxyLnRocmVzaG9sZHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpBcnJheS5pc0FycmF5KHQpP3AoaC5jYWxsKHQpKTpwKHQpLHIpOmV9LHJ9LHQudGhyZXNob2xkRnJlZWRtYW5EaWFjb25pcz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQ9ZC5jYWxsKHQsdSkuc29ydChuKSxNYXRoLmNlaWwoKHItZSkvKDIqKEEodCwuNzUpLUEodCwuMjUpKSpNYXRoLnBvdyh0Lmxlbmd0aCwtMS8zKSkpfSx0LnRocmVzaG9sZFNjb3R0PWZ1bmN0aW9uKHQsbixlKXtyZXR1cm4gTWF0aC5jZWlsKChlLW4pLygzLjUqYyh0KSpNYXRoLnBvdyh0Lmxlbmd0aCwtMS8zKSkpfSx0LnRocmVzaG9sZFN0dXJnZXM9TSx0Lm1heD1ULHQubWVhbj1mdW5jdGlvbih0LG4pe3ZhciBlLHI9dC5sZW5ndGgsaT1yLG89LTEsYT0wO2lmKG51bGw9PW4pZm9yKDsrK288cjspaXNOYU4oZT11KHRbb10pKT8tLWk6YSs9ZTtlbHNlIGZvcig7KytvPHI7KWlzTmFOKGU9dShuKHRbb10sbyx0KSkpPy0taTphKz1lO2lmKGkpcmV0dXJuIGEvaX0sdC5tZWRpYW49ZnVuY3Rpb24odCxlKXt2YXIgcixpPXQubGVuZ3RoLG89LTEsYT1bXTtpZihudWxsPT1lKWZvcig7KytvPGk7KWlzTmFOKHI9dSh0W29dKSl8fGEucHVzaChyKTtlbHNlIGZvcig7KytvPGk7KWlzTmFOKHI9dShlKHRbb10sbyx0KSkpfHxhLnB1c2gocik7cmV0dXJuIEEoYS5zb3J0KG4pLC41KX0sdC5tZXJnZT1OLHQubWluPVMsdC5wYWlycz1mdW5jdGlvbih0LG4pe251bGw9PW4mJihuPWEpO2Zvcih2YXIgZT0wLHI9dC5sZW5ndGgtMSxpPXRbMF0sbz1uZXcgQXJyYXkocjwwPzA6cik7ZTxyOylvW2VdPW4oaSxpPXRbKytlXSk7cmV0dXJuIG99LHQucGVybXV0ZT1mdW5jdGlvbih0LG4pe2Zvcih2YXIgZT1uLmxlbmd0aCxyPW5ldyBBcnJheShlKTtlLS07KXJbZV09dFtuW2VdXTtyZXR1cm4gcn0sdC5xdWFudGlsZT1BLHQucmFuZ2U9Zyx0LnNjYW49ZnVuY3Rpb24odCxlKXtpZihyPXQubGVuZ3RoKXt2YXIgcixpLG89MCxhPTAsdT10W2FdO2ZvcihudWxsPT1lJiYoZT1uKTsrK288cjspKGUoaT10W29dLHUpPDB8fDAhPT1lKHUsdSkpJiYodT1pLGE9byk7cmV0dXJuIDA9PT1lKHUsdSk/YTp2b2lkIDB9fSx0LnNodWZmbGU9ZnVuY3Rpb24odCxuLGUpe2Zvcih2YXIgcixpLG89KG51bGw9PWU/dC5sZW5ndGg6ZSktKG49bnVsbD09bj8wOituKTtvOylpPU1hdGgucmFuZG9tKCkqby0tfDAscj10W28rbl0sdFtvK25dPXRbaStuXSx0W2krbl09cjtyZXR1cm4gdH0sdC5zdW09ZnVuY3Rpb24odCxuKXt2YXIgZSxyPXQubGVuZ3RoLGk9LTEsbz0wO2lmKG51bGw9PW4pZm9yKDsrK2k8cjspKGU9K3RbaV0pJiYobys9ZSk7ZWxzZSBmb3IoOysraTxyOykoZT0rbih0W2ldLGksdCkpJiYobys9ZSk7cmV0dXJuIG99LHQudGlja3M9bSx0LnRpY2tJbmNyZW1lbnQ9eCx0LnRpY2tTdGVwPXcsdC50cmFuc3Bvc2U9RSx0LnZhcmlhbmNlPWYsdC56aXA9ZnVuY3Rpb24oKXtyZXR1cm4gRShhcmd1bWVudHMpfSx0LmF4aXNUb3A9ZnVuY3Rpb24odCl7cmV0dXJuIEIoeix0KX0sdC5heGlzUmlnaHQ9ZnVuY3Rpb24odCl7cmV0dXJuIEIoUix0KX0sdC5heGlzQm90dG9tPWZ1bmN0aW9uKHQpe3JldHVybiBCKEwsdCl9LHQuYXhpc0xlZnQ9ZnVuY3Rpb24odCl7cmV0dXJuIEIoRCx0KX0sdC5icnVzaD1mdW5jdGlvbigpe3JldHVybiBSaSh3aSl9LHQuYnJ1c2hYPWZ1bmN0aW9uKCl7cmV0dXJuIFJpKG1pKX0sdC5icnVzaFk9ZnVuY3Rpb24oKXtyZXR1cm4gUmkoeGkpfSx0LmJydXNoU2VsZWN0aW9uPWZ1bmN0aW9uKHQpe3ZhciBuPXQuX19icnVzaDtyZXR1cm4gbj9uLmRpbS5vdXRwdXQobi5zZWxlY3Rpb24pOm51bGx9LHQuY2hvcmQ9ZnVuY3Rpb24oKXt2YXIgdD0wLG49bnVsbCxlPW51bGwscj1udWxsO2Z1bmN0aW9uIGkoaSl7dmFyIG8sYSx1LGYsYyxzLGw9aS5sZW5ndGgsaD1bXSxkPWcobCkscD1bXSx2PVtdLHk9di5ncm91cHM9bmV3IEFycmF5KGwpLF89bmV3IEFycmF5KGwqbCk7Zm9yKG89MCxjPS0xOysrYzxsOyl7Zm9yKGE9MCxzPS0xOysrczxsOylhKz1pW2NdW3NdO2gucHVzaChhKSxwLnB1c2goZyhsKSksbys9YX1mb3IobiYmZC5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4oaFt0XSxoW2VdKX0pLGUmJnAuZm9yRWFjaChmdW5jdGlvbih0LG4pe3Quc29ydChmdW5jdGlvbih0LHIpe3JldHVybiBlKGlbbl1bdF0saVtuXVtyXSl9KX0pLGY9KG89WWkoMCxPaS10KmwpL28pP3Q6T2kvbCxhPTAsYz0tMTsrK2M8bDspe2Zvcih1PWEscz0tMTsrK3M8bDspe3ZhciBiPWRbY10sbT1wW2JdW3NdLHg9aVtiXVttXSx3PWEsTT1hKz14Km87X1ttKmwrYl09e2luZGV4OmIsc3ViaW5kZXg6bSxzdGFydEFuZ2xlOncsZW5kQW5nbGU6TSx2YWx1ZTp4fX15W2JdPXtpbmRleDpiLHN0YXJ0QW5nbGU6dSxlbmRBbmdsZTphLHZhbHVlOmhbYl19LGErPWZ9Zm9yKGM9LTE7KytjPGw7KWZvcihzPWMtMTsrK3M8bDspe3ZhciBBPV9bcypsK2NdLFQ9X1tjKmwrc107KEEudmFsdWV8fFQudmFsdWUpJiZ2LnB1c2goQS52YWx1ZTxULnZhbHVlP3tzb3VyY2U6VCx0YXJnZXQ6QX06e3NvdXJjZTpBLHRhcmdldDpUfSl9cmV0dXJuIHI/di5zb3J0KHIpOnZ9cmV0dXJuIGkucGFkQW5nbGU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9WWkoMCxuKSxpKTp0fSxpLnNvcnRHcm91cHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dCxpKTpufSxpLnNvcnRTdWJncm91cHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCxpKTplfSxpLnNvcnRDaG9yZHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG51bGw9PXQ/cj1udWxsOihuPXQscj1mdW5jdGlvbih0LGUpe3JldHVybiBuKHQuc291cmNlLnZhbHVlK3QudGFyZ2V0LnZhbHVlLGUuc291cmNlLnZhbHVlK2UudGFyZ2V0LnZhbHVlKX0pLl89dCxpKTpyJiZyLl87dmFyIG59LGl9LHQucmliYm9uPWZ1bmN0aW9uKCl7dmFyIHQ9Vmksbj0kaSxlPVdpLHI9WmksaT1RaSxvPW51bGw7ZnVuY3Rpb24gYSgpe3ZhciBhLHU9QmkuY2FsbChhcmd1bWVudHMpLGY9dC5hcHBseSh0aGlzLHUpLGM9bi5hcHBseSh0aGlzLHUpLHM9K2UuYXBwbHkodGhpcywodVswXT1mLHUpKSxsPXIuYXBwbHkodGhpcyx1KS1xaSxoPWkuYXBwbHkodGhpcyx1KS1xaSxkPXMqTGkobCkscD1zKkRpKGwpLHY9K2UuYXBwbHkodGhpcywodVswXT1jLHUpKSxnPXIuYXBwbHkodGhpcyx1KS1xaSx5PWkuYXBwbHkodGhpcyx1KS1xaTtpZihvfHwobz1hPUdpKCkpLG8ubW92ZVRvKGQscCksby5hcmMoMCwwLHMsbCxoKSxsPT09ZyYmaD09PXl8fChvLnF1YWRyYXRpY0N1cnZlVG8oMCwwLHYqTGkoZyksdipEaShnKSksby5hcmMoMCwwLHYsZyx5KSksby5xdWFkcmF0aWNDdXJ2ZVRvKDAsMCxkLHApLG8uY2xvc2VQYXRoKCksYSlyZXR1cm4gbz1udWxsLGErIiJ8fG51bGx9cmV0dXJuIGEucmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6RmkoK3QpLGEpOmV9LGEuc3RhcnRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkZpKCt0KSxhKTpyfSxhLmVuZEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6RmkoK3QpLGEpOml9LGEuc291cmNlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PW4sYSk6dH0sYS50YXJnZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dCxhKTpufSxhLmNvbnRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89bnVsbD09dD9udWxsOnQsYSk6b30sYX0sdC5uZXN0PWZ1bmN0aW9uKCl7dmFyIHQsbixlLHI9W10saT1bXTtmdW5jdGlvbiBvKGUsaSxhLHUpe2lmKGk+PXIubGVuZ3RoKXJldHVybiBudWxsIT10JiZlLnNvcnQodCksbnVsbCE9bj9uKGUpOmU7Zm9yKHZhciBmLGMscyxsPS0xLGg9ZS5sZW5ndGgsZD1yW2krK10scD1LaSgpLHY9YSgpOysrbDxoOykocz1wLmdldChmPWQoYz1lW2xdKSsiIikpP3MucHVzaChjKTpwLnNldChmLFtjXSk7cmV0dXJuIHAuZWFjaChmdW5jdGlvbih0LG4pe3UodixuLG8odCxpLGEsdSkpfSksdn1yZXR1cm4gZT17b2JqZWN0OmZ1bmN0aW9uKHQpe3JldHVybiBvKHQsMCx0byxubyl9LG1hcDpmdW5jdGlvbih0KXtyZXR1cm4gbyh0LDAsZW8scm8pfSxlbnRyaWVzOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbiB0KGUsbyl7aWYoKytvPnIubGVuZ3RoKXJldHVybiBlO3ZhciBhLHU9aVtvLTFdO3JldHVybiBudWxsIT1uJiZvPj1yLmxlbmd0aD9hPWUuZW50cmllcygpOihhPVtdLGUuZWFjaChmdW5jdGlvbihuLGUpe2EucHVzaCh7a2V5OmUsdmFsdWVzOnQobixvKX0pfSkpLG51bGwhPXU/YS5zb3J0KGZ1bmN0aW9uKHQsbil7cmV0dXJuIHUodC5rZXksbi5rZXkpfSk6YX0obyh0LDAsZW8scm8pLDApfSxrZXk6ZnVuY3Rpb24odCl7cmV0dXJuIHIucHVzaCh0KSxlfSxzb3J0S2V5czpmdW5jdGlvbih0KXtyZXR1cm4gaVtyLmxlbmd0aC0xXT10LGV9LHNvcnRWYWx1ZXM6ZnVuY3Rpb24obil7cmV0dXJuIHQ9bixlfSxyb2xsdXA6ZnVuY3Rpb24odCl7cmV0dXJuIG49dCxlfX19LHQuc2V0PWFvLHQubWFwPUtpLHQua2V5cz1mdW5jdGlvbih0KXt2YXIgbj1bXTtmb3IodmFyIGUgaW4gdCluLnB1c2goZSk7cmV0dXJuIG59LHQudmFsdWVzPWZ1bmN0aW9uKHQpe3ZhciBuPVtdO2Zvcih2YXIgZSBpbiB0KW4ucHVzaCh0W2VdKTtyZXR1cm4gbn0sdC5lbnRyaWVzPWZ1bmN0aW9uKHQpe3ZhciBuPVtdO2Zvcih2YXIgZSBpbiB0KW4ucHVzaCh7a2V5OmUsdmFsdWU6dFtlXX0pO3JldHVybiBufSx0LmNvbG9yPXZuLHQucmdiPWJuLHQuaHNsPU1uLHQubGFiPVVuLHQuaGNsPUhuLHQubGNoPWZ1bmN0aW9uKHQsbixlLHIpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9Jbih0KTpuZXcgam4oZSxuLHQsbnVsbD09cj8xOnIpfSx0LmdyYXk9ZnVuY3Rpb24odCxuKXtyZXR1cm4gbmV3IHFuKHQsMCwwLG51bGw9PW4/MTpuKX0sdC5jdWJlaGVsaXg9S24sdC5jb250b3Vycz1nbyx0LmNvbnRvdXJEZW5zaXR5PWZ1bmN0aW9uKCl7dmFyIHQ9Ym8sbj1tbyxlPXhvLHI9OTYwLGk9NTAwLG89MjAsYT0yLHU9MypvLGY9cisyKnU+PmEsYz1pKzIqdT4+YSxzPWNvKDIwKTtmdW5jdGlvbiBsKHIpe3ZhciBpPW5ldyBGbG9hdDMyQXJyYXkoZipjKSxsPW5ldyBGbG9hdDMyQXJyYXkoZipjKTtyLmZvckVhY2goZnVuY3Rpb24ocixvLHMpe3ZhciBsPSt0KHIsbyxzKSt1Pj5hLGg9K24ocixvLHMpK3U+PmEsZD0rZShyLG8scyk7bD49MCYmbDxmJiZoPj0wJiZoPGMmJihpW2wraCpmXSs9ZCl9KSx5byh7d2lkdGg6ZixoZWlnaHQ6YyxkYXRhOml9LHt3aWR0aDpmLGhlaWdodDpjLGRhdGE6bH0sbz4+YSksX28oe3dpZHRoOmYsaGVpZ2h0OmMsZGF0YTpsfSx7d2lkdGg6ZixoZWlnaHQ6YyxkYXRhOml9LG8+PmEpLHlvKHt3aWR0aDpmLGhlaWdodDpjLGRhdGE6aX0se3dpZHRoOmYsaGVpZ2h0OmMsZGF0YTpsfSxvPj5hKSxfbyh7d2lkdGg6ZixoZWlnaHQ6YyxkYXRhOmx9LHt3aWR0aDpmLGhlaWdodDpjLGRhdGE6aX0sbz4+YSkseW8oe3dpZHRoOmYsaGVpZ2h0OmMsZGF0YTppfSx7d2lkdGg6ZixoZWlnaHQ6YyxkYXRhOmx9LG8+PmEpLF9vKHt3aWR0aDpmLGhlaWdodDpjLGRhdGE6bH0se3dpZHRoOmYsaGVpZ2h0OmMsZGF0YTppfSxvPj5hKTt2YXIgZD1zKGkpO2lmKCFBcnJheS5pc0FycmF5KGQpKXt2YXIgcD1UKGkpO2Q9dygwLHAsZCksKGQ9ZygwLE1hdGguZmxvb3IocC9kKSpkLGQpKS5zaGlmdCgpfXJldHVybiBnbygpLnRocmVzaG9sZHMoZCkuc2l6ZShbZixjXSkoaSkubWFwKGgpfWZ1bmN0aW9uIGgodCl7cmV0dXJuIHQudmFsdWUqPU1hdGgucG93KDIsLTIqYSksdC5jb29yZGluYXRlcy5mb3JFYWNoKGQpLHR9ZnVuY3Rpb24gZCh0KXt0LmZvckVhY2gocCl9ZnVuY3Rpb24gcCh0KXt0LmZvckVhY2godil9ZnVuY3Rpb24gdih0KXt0WzBdPXRbMF0qTWF0aC5wb3coMixhKS11LHRbMV09dFsxXSpNYXRoLnBvdygyLGEpLXV9ZnVuY3Rpb24geSgpe3JldHVybiBmPXIrMioodT0zKm8pPj5hLGM9aSsyKnU+PmEsbH1yZXR1cm4gbC54PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBuP246Y28oK24pLGwpOnR9LGwueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmNvKCt0KSxsKTpufSxsLndlaWdodD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmNvKCt0KSxsKTplfSxsLnNpemU9ZnVuY3Rpb24odCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuW3IsaV07dmFyIG49TWF0aC5jZWlsKHRbMF0pLGU9TWF0aC5jZWlsKHRbMV0pO2lmKCEobj49MHx8bj49MCkpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHNpemUiKTtyZXR1cm4gcj1uLGk9ZSx5KCl9LGwuY2VsbFNpemU9ZnVuY3Rpb24odCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIDE8PGE7aWYoISgodD0rdCk+PTEpKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBjZWxsIHNpemUiKTtyZXR1cm4gYT1NYXRoLmZsb29yKE1hdGgubG9nKHQpL01hdGguTE4yKSx5KCl9LGwudGhyZXNob2xkcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkFycmF5LmlzQXJyYXkodCk/Y28odW8uY2FsbCh0KSk6Y28odCksbCk6c30sbC5iYW5kd2lkdGg9ZnVuY3Rpb24odCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIE1hdGguc3FydChvKihvKzEpKTtpZighKCh0PSt0KT49MCkpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGJhbmR3aWR0aCIpO3JldHVybiBvPU1hdGgucm91bmQoKE1hdGguc3FydCg0KnQqdCsxKS0xKS8yKSx5KCl9LGx9LHQuZGlzcGF0Y2g9SSx0LmRyYWc9ZnVuY3Rpb24oKXt2YXIgbixlLHIsaSxvPVd0LGE9WnQsdT1RdCxmPUp0LGM9e30scz1JKCJzdGFydCIsImRyYWciLCJlbmQiKSxsPTAsaD0wO2Z1bmN0aW9uIGQodCl7dC5vbigibW91c2Vkb3duLmRyYWciLHApLmZpbHRlcihmKS5vbigidG91Y2hzdGFydC5kcmFnIix5KS5vbigidG91Y2htb3ZlLmRyYWciLF8pLm9uKCJ0b3VjaGVuZC5kcmFnIHRvdWNoY2FuY2VsLmRyYWciLGIpLnN0eWxlKCJ0b3VjaC1hY3Rpb24iLCJub25lIikuc3R5bGUoIi13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvciIsInJnYmEoMCwwLDAsMCkiKX1mdW5jdGlvbiBwKCl7aWYoIWkmJm8uYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgdT1tKCJtb3VzZSIsYS5hcHBseSh0aGlzLGFyZ3VtZW50cyksRnQsdGhpcyxhcmd1bWVudHMpO3UmJihEdCh0LmV2ZW50LnZpZXcpLm9uKCJtb3VzZW1vdmUuZHJhZyIsdiwhMCkub24oIm1vdXNldXAuZHJhZyIsZywhMCksWHQodC5ldmVudC52aWV3KSxIdCgpLHI9ITEsbj10LmV2ZW50LmNsaWVudFgsZT10LmV2ZW50LmNsaWVudFksdSgic3RhcnQiKSl9fWZ1bmN0aW9uIHYoKXtpZihqdCgpLCFyKXt2YXIgaT10LmV2ZW50LmNsaWVudFgtbixvPXQuZXZlbnQuY2xpZW50WS1lO3I9aSppK28qbz5ofWMubW91c2UoImRyYWciKX1mdW5jdGlvbiBnKCl7RHQodC5ldmVudC52aWV3KS5vbigibW91c2Vtb3ZlLmRyYWcgbW91c2V1cC5kcmFnIixudWxsKSxHdCh0LmV2ZW50LnZpZXcsciksanQoKSxjLm1vdXNlKCJlbmQiKX1mdW5jdGlvbiB5KCl7aWYoby5hcHBseSh0aGlzLGFyZ3VtZW50cykpe3ZhciBuLGUscj10LmV2ZW50LmNoYW5nZWRUb3VjaGVzLGk9YS5hcHBseSh0aGlzLGFyZ3VtZW50cyksdT1yLmxlbmd0aDtmb3Iobj0wO248dTsrK24pKGU9bShyW25dLmlkZW50aWZpZXIsaSxJdCx0aGlzLGFyZ3VtZW50cykpJiYoSHQoKSxlKCJzdGFydCIpKX19ZnVuY3Rpb24gXygpe3ZhciBuLGUscj10LmV2ZW50LmNoYW5nZWRUb3VjaGVzLGk9ci5sZW5ndGg7Zm9yKG49MDtuPGk7KytuKShlPWNbcltuXS5pZGVudGlmaWVyXSkmJihqdCgpLGUoImRyYWciKSl9ZnVuY3Rpb24gYigpe3ZhciBuLGUscj10LmV2ZW50LmNoYW5nZWRUb3VjaGVzLG89ci5sZW5ndGg7Zm9yKGkmJmNsZWFyVGltZW91dChpKSxpPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtpPW51bGx9LDUwMCksbj0wO248bzsrK24pKGU9Y1tyW25dLmlkZW50aWZpZXJdKSYmKEh0KCksZSgiZW5kIikpfWZ1bmN0aW9uIG0obixlLHIsaSxvKXt2YXIgYSxmLGgscD1yKGUsbiksdj1zLmNvcHkoKTtpZihDdChuZXcgJHQoZCwiYmVmb3Jlc3RhcnQiLGEsbixsLHBbMF0scFsxXSwwLDAsdiksZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9KHQuZXZlbnQuc3ViamVjdD1hPXUuYXBwbHkoaSxvKSkmJihmPWEueC1wWzBdfHwwLGg9YS55LXBbMV18fDAsITApfSkpcmV0dXJuIGZ1bmN0aW9uIHQodSl7dmFyIHMsZz1wO3N3aXRjaCh1KXtjYXNlInN0YXJ0IjpjW25dPXQscz1sKys7YnJlYWs7Y2FzZSJlbmQiOmRlbGV0ZSBjW25dLC0tbDtjYXNlImRyYWciOnA9cihlLG4pLHM9bH1DdChuZXcgJHQoZCx1LGEsbixzLHBbMF0rZixwWzFdK2gscFswXS1nWzBdLHBbMV0tZ1sxXSx2KSx2LmFwcGx5LHYsW3UsaSxvXSl9fXJldHVybiBkLmZpbHRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0iZnVuY3Rpb24iPT10eXBlb2YgdD90OlZ0KCEhdCksZCk6b30sZC5jb250YWluZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpWdCh0KSxkKTphfSxkLnN1YmplY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpWdCh0KSxkKTp1fSxkLnRvdWNoYWJsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OlZ0KCEhdCksZCk6Zn0sZC5vbj1mdW5jdGlvbigpe3ZhciB0PXMub24uYXBwbHkocyxhcmd1bWVudHMpO3JldHVybiB0PT09cz9kOnR9LGQuY2xpY2tEaXN0YW5jZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD0odD0rdCkqdCxkKTpNYXRoLnNxcnQoaCl9LGR9LHQuZHJhZ0Rpc2FibGU9WHQsdC5kcmFnRW5hYmxlPUd0LHQuZHN2Rm9ybWF0PUVvLHQuY3N2UGFyc2U9Q28sdC5jc3ZQYXJzZVJvd3M9UG8sdC5jc3ZGb3JtYXQ9em8sdC5jc3ZGb3JtYXRSb3dzPVJvLHQudHN2UGFyc2U9RG8sdC50c3ZQYXJzZVJvd3M9VW8sdC50c3ZGb3JtYXQ9cW8sdC50c3ZGb3JtYXRSb3dzPU9vLHQuZWFzZUxpbmVhcj1mdW5jdGlvbih0KXtyZXR1cm4rdH0sdC5lYXNlUXVhZD1Ecix0LmVhc2VRdWFkSW49ZnVuY3Rpb24odCl7cmV0dXJuIHQqdH0sdC5lYXNlUXVhZE91dD1mdW5jdGlvbih0KXtyZXR1cm4gdCooMi10KX0sdC5lYXNlUXVhZEluT3V0PURyLHQuZWFzZUN1YmljPVVyLHQuZWFzZUN1YmljSW49ZnVuY3Rpb24odCl7cmV0dXJuIHQqdCp0fSx0LmVhc2VDdWJpY091dD1mdW5jdGlvbih0KXtyZXR1cm4tLXQqdCp0KzF9LHQuZWFzZUN1YmljSW5PdXQ9VXIsdC5lYXNlUG9seT1Zcix0LmVhc2VQb2x5SW49cXIsdC5lYXNlUG9seU91dD1Pcix0LmVhc2VQb2x5SW5PdXQ9WXIsdC5lYXNlU2luPUlyLHQuZWFzZVNpbkluPWZ1bmN0aW9uKHQpe3JldHVybiAxLU1hdGguY29zKHQqRnIpfSx0LmVhc2VTaW5PdXQ9ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguc2luKHQqRnIpfSx0LmVhc2VTaW5Jbk91dD1Jcix0LmVhc2VFeHA9SHIsdC5lYXNlRXhwSW49ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucG93KDIsMTAqdC0xMCl9LHQuZWFzZUV4cE91dD1mdW5jdGlvbih0KXtyZXR1cm4gMS1NYXRoLnBvdygyLC0xMCp0KX0sdC5lYXNlRXhwSW5PdXQ9SHIsdC5lYXNlQ2lyY2xlPWpyLHQuZWFzZUNpcmNsZUluPWZ1bmN0aW9uKHQpe3JldHVybiAxLU1hdGguc3FydCgxLXQqdCl9LHQuZWFzZUNpcmNsZU91dD1mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5zcXJ0KDEtIC0tdCp0KX0sdC5lYXNlQ2lyY2xlSW5PdXQ9anIsdC5lYXNlQm91bmNlPW5pLHQuZWFzZUJvdW5jZUluPWZ1bmN0aW9uKHQpe3JldHVybiAxLW5pKDEtdCl9LHQuZWFzZUJvdW5jZU91dD1uaSx0LmVhc2VCb3VuY2VJbk91dD1mdW5jdGlvbih0KXtyZXR1cm4oKHQqPTIpPD0xPzEtbmkoMS10KTpuaSh0LTEpKzEpLzJ9LHQuZWFzZUJhY2s9aWksdC5lYXNlQmFja0luPWVpLHQuZWFzZUJhY2tPdXQ9cmksdC5lYXNlQmFja0luT3V0PWlpLHQuZWFzZUVsYXN0aWM9dWksdC5lYXNlRWxhc3RpY0luPWFpLHQuZWFzZUVsYXN0aWNPdXQ9dWksdC5lYXNlRWxhc3RpY0luT3V0PWZpLHQuYmxvYj1mdW5jdGlvbih0LG4pe3JldHVybiBmZXRjaCh0LG4pLnRoZW4oWW8pfSx0LmJ1ZmZlcj1mdW5jdGlvbih0LG4pe3JldHVybiBmZXRjaCh0LG4pLnRoZW4oQm8pfSx0LmRzdj1mdW5jdGlvbih0LG4sZSxyKXszPT09YXJndW1lbnRzLmxlbmd0aCYmImZ1bmN0aW9uIj09dHlwZW9mIGUmJihyPWUsZT12b2lkIDApO3ZhciBpPUVvKHQpO3JldHVybiBJbyhuLGUpLnRoZW4oZnVuY3Rpb24odCl7cmV0dXJuIGkucGFyc2UodCxyKX0pfSx0LmNzdj1qbyx0LnRzdj1Ybyx0LmltYWdlPWZ1bmN0aW9uKHQsbil7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGUscil7dmFyIGk9bmV3IEltYWdlO2Zvcih2YXIgbyBpbiBuKWlbb109bltvXTtpLm9uZXJyb3I9cixpLm9ubG9hZD1mdW5jdGlvbigpe2UoaSl9LGkuc3JjPXR9KX0sdC5qc29uPWZ1bmN0aW9uKHQsbil7cmV0dXJuIGZldGNoKHQsbikudGhlbihHbyl9LHQudGV4dD1Jbyx0LnhtbD0kbyx0Lmh0bWw9V28sdC5zdmc9Wm8sdC5mb3JjZUNlbnRlcj1mdW5jdGlvbih0LG4pe3ZhciBlO2Z1bmN0aW9uIHIoKXt2YXIgcixpLG89ZS5sZW5ndGgsYT0wLHU9MDtmb3Iocj0wO3I8bzsrK3IpYSs9KGk9ZVtyXSkueCx1Kz1pLnk7Zm9yKGE9YS9vLXQsdT11L28tbixyPTA7cjxvOysrcikoaT1lW3JdKS54LT1hLGkueS09dX1yZXR1cm4gbnVsbD09dCYmKHQ9MCksbnVsbD09biYmKG49MCksci5pbml0aWFsaXplPWZ1bmN0aW9uKHQpe2U9dH0sci54PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PStuLHIpOnR9LHIueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0rdCxyKTpufSxyfSx0LmZvcmNlQ29sbGlkZT1mdW5jdGlvbih0KXt2YXIgbixlLHI9MSxpPTE7ZnVuY3Rpb24gbygpe2Zvcih2YXIgdCxvLHUsZixjLHMsbCxoPW4ubGVuZ3RoLGQ9MDtkPGk7KytkKWZvcihvPXJhKG4sdWEsZmEpLnZpc2l0QWZ0ZXIoYSksdD0wO3Q8aDsrK3QpdT1uW3RdLHM9ZVt1LmluZGV4XSxsPXMqcyxmPXUueCt1LnZ4LGM9dS55K3Uudnksby52aXNpdChwKTtmdW5jdGlvbiBwKHQsbixlLGksbyl7dmFyIGE9dC5kYXRhLGg9dC5yLGQ9cytoO2lmKCFhKXJldHVybiBuPmYrZHx8aTxmLWR8fGU+YytkfHxvPGMtZDtpZihhLmluZGV4PnUuaW5kZXgpe3ZhciBwPWYtYS54LWEudngsdj1jLWEueS1hLnZ5LGc9cCpwK3YqdjtnPGQqZCYmKDA9PT1wJiYoZys9KHA9Sm8oKSkqcCksMD09PXYmJihnKz0odj1KbygpKSp2KSxnPShkLShnPU1hdGguc3FydChnKSkpL2cqcix1LnZ4Kz0ocCo9ZykqKGQ9KGgqPWgpLyhsK2gpKSx1LnZ5Kz0odio9ZykqZCxhLnZ4LT1wKihkPTEtZCksYS52eS09dipkKX19fWZ1bmN0aW9uIGEodCl7aWYodC5kYXRhKXJldHVybiB0LnI9ZVt0LmRhdGEuaW5kZXhdO2Zvcih2YXIgbj10LnI9MDtuPDQ7KytuKXRbbl0mJnRbbl0ucj50LnImJih0LnI9dFtuXS5yKX1mdW5jdGlvbiB1KCl7aWYobil7dmFyIHIsaSxvPW4ubGVuZ3RoO2ZvcihlPW5ldyBBcnJheShvKSxyPTA7cjxvOysrcilpPW5bcl0sZVtpLmluZGV4XT0rdChpLHIsbil9fXJldHVybiJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1RbyhudWxsPT10PzE6K3QpKSxvLmluaXRpYWxpemU9ZnVuY3Rpb24odCl7bj10LHUoKX0sby5pdGVyYXRpb25zPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSt0LG8pOml9LG8uc3RyZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9K3Qsbyk6cn0sby5yYWRpdXM9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIG4/bjpRbygrbiksdSgpLG8pOnR9LG99LHQuZm9yY2VMaW5rPWZ1bmN0aW9uKHQpe3ZhciBuLGUscixpLG8sYT1jYSx1PWZ1bmN0aW9uKHQpe3JldHVybiAxL01hdGgubWluKGlbdC5zb3VyY2UuaW5kZXhdLGlbdC50YXJnZXQuaW5kZXhdKX0sZj1RbygzMCksYz0xO2Z1bmN0aW9uIHMocil7Zm9yKHZhciBpPTAsYT10Lmxlbmd0aDtpPGM7KytpKWZvcih2YXIgdSxmLHMsbCxoLGQscCx2PTA7djxhOysrdilmPSh1PXRbdl0pLnNvdXJjZSxsPShzPXUudGFyZ2V0KS54K3MudngtZi54LWYudnh8fEpvKCksaD1zLnkrcy52eS1mLnktZi52eXx8Sm8oKSxsKj1kPSgoZD1NYXRoLnNxcnQobCpsK2gqaCkpLWVbdl0pL2QqcipuW3ZdLGgqPWQscy52eC09bCoocD1vW3ZdKSxzLnZ5LT1oKnAsZi52eCs9bCoocD0xLXApLGYudnkrPWgqcH1mdW5jdGlvbiBsKCl7aWYocil7dmFyIHUsZixjPXIubGVuZ3RoLHM9dC5sZW5ndGgsbD1LaShyLGEpO2Zvcih1PTAsaT1uZXcgQXJyYXkoYyk7dTxzOysrdSkoZj10W3VdKS5pbmRleD11LCJvYmplY3QiIT10eXBlb2YgZi5zb3VyY2UmJihmLnNvdXJjZT1zYShsLGYuc291cmNlKSksIm9iamVjdCIhPXR5cGVvZiBmLnRhcmdldCYmKGYudGFyZ2V0PXNhKGwsZi50YXJnZXQpKSxpW2Yuc291cmNlLmluZGV4XT0oaVtmLnNvdXJjZS5pbmRleF18fDApKzEsaVtmLnRhcmdldC5pbmRleF09KGlbZi50YXJnZXQuaW5kZXhdfHwwKSsxO2Zvcih1PTAsbz1uZXcgQXJyYXkocyk7dTxzOysrdSlmPXRbdV0sb1t1XT1pW2Yuc291cmNlLmluZGV4XS8oaVtmLnNvdXJjZS5pbmRleF0raVtmLnRhcmdldC5pbmRleF0pO249bmV3IEFycmF5KHMpLGgoKSxlPW5ldyBBcnJheShzKSxkKCl9fWZ1bmN0aW9uIGgoKXtpZihyKWZvcih2YXIgZT0wLGk9dC5sZW5ndGg7ZTxpOysrZSluW2VdPSt1KHRbZV0sZSx0KX1mdW5jdGlvbiBkKCl7aWYocilmb3IodmFyIG49MCxpPXQubGVuZ3RoO248aTsrK24pZVtuXT0rZih0W25dLG4sdCl9cmV0dXJuIG51bGw9PXQmJih0PVtdKSxzLmluaXRpYWxpemU9ZnVuY3Rpb24odCl7cj10LGwoKX0scy5saW5rcz1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1uLGwoKSxzKTp0fSxzLmlkPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPXQscyk6YX0scy5pdGVyYXRpb25zPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPSt0LHMpOmN9LHMuc3RyZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpRbygrdCksaCgpLHMpOnV9LHMuZGlzdGFuY2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpRbygrdCksZCgpLHMpOmZ9LHN9LHQuZm9yY2VNYW55Qm9keT1mdW5jdGlvbigpe3ZhciB0LG4sZSxyLGk9UW8oLTMwKSxvPTEsYT0xLzAsdT0uODE7ZnVuY3Rpb24gZihyKXt2YXIgaSxvPXQubGVuZ3RoLGE9cmEodCxsYSxoYSkudmlzaXRBZnRlcihzKTtmb3IoZT1yLGk9MDtpPG87KytpKW49dFtpXSxhLnZpc2l0KGwpfWZ1bmN0aW9uIGMoKXtpZih0KXt2YXIgbixlLG89dC5sZW5ndGg7Zm9yKHI9bmV3IEFycmF5KG8pLG49MDtuPG87KytuKWU9dFtuXSxyW2UuaW5kZXhdPStpKGUsbix0KX19ZnVuY3Rpb24gcyh0KXt2YXIgbixlLGksbyxhLHU9MCxmPTA7aWYodC5sZW5ndGgpe2ZvcihpPW89YT0wO2E8NDsrK2EpKG49dFthXSkmJihlPU1hdGguYWJzKG4udmFsdWUpKSYmKHUrPW4udmFsdWUsZis9ZSxpKz1lKm4ueCxvKz1lKm4ueSk7dC54PWkvZix0Lnk9by9mfWVsc2V7KG49dCkueD1uLmRhdGEueCxuLnk9bi5kYXRhLnk7ZG97dSs9cltuLmRhdGEuaW5kZXhdfXdoaWxlKG49bi5uZXh0KX10LnZhbHVlPXV9ZnVuY3Rpb24gbCh0LGksZixjKXtpZighdC52YWx1ZSlyZXR1cm4hMDt2YXIgcz10Lngtbi54LGw9dC55LW4ueSxoPWMtaSxkPXMqcytsKmw7aWYoaCpoL3U8ZClyZXR1cm4gZDxhJiYoMD09PXMmJihkKz0ocz1KbygpKSpzKSwwPT09bCYmKGQrPShsPUpvKCkpKmwpLGQ8byYmKGQ9TWF0aC5zcXJ0KG8qZCkpLG4udngrPXMqdC52YWx1ZSplL2Qsbi52eSs9bCp0LnZhbHVlKmUvZCksITA7aWYoISh0Lmxlbmd0aHx8ZD49YSkpeyh0LmRhdGEhPT1ufHx0Lm5leHQpJiYoMD09PXMmJihkKz0ocz1KbygpKSpzKSwwPT09bCYmKGQrPShsPUpvKCkpKmwpLGQ8byYmKGQ9TWF0aC5zcXJ0KG8qZCkpKTtkb3t0LmRhdGEhPT1uJiYoaD1yW3QuZGF0YS5pbmRleF0qZS9kLG4udngrPXMqaCxuLnZ5Kz1sKmgpfXdoaWxlKHQ9dC5uZXh0KX19cmV0dXJuIGYuaW5pdGlhbGl6ZT1mdW5jdGlvbihuKXt0PW4sYygpfSxmLnN0cmVuZ3RoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6UW8oK3QpLGMoKSxmKTppfSxmLmRpc3RhbmNlTWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPXQqdCxmKTpNYXRoLnNxcnQobyl9LGYuZGlzdGFuY2VNYXg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9dCp0LGYpOk1hdGguc3FydChhKX0sZi50aGV0YT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT10KnQsZik6TWF0aC5zcXJ0KHUpfSxmfSx0LmZvcmNlUmFkaWFsPWZ1bmN0aW9uKHQsbixlKXt2YXIgcixpLG8sYT1RbyguMSk7ZnVuY3Rpb24gdSh0KXtmb3IodmFyIGE9MCx1PXIubGVuZ3RoO2E8dTsrK2Epe3ZhciBmPXJbYV0sYz1mLngtbnx8MWUtNixzPWYueS1lfHwxZS02LGw9TWF0aC5zcXJ0KGMqYytzKnMpLGg9KG9bYV0tbCkqaVthXSp0L2w7Zi52eCs9YypoLGYudnkrPXMqaH19ZnVuY3Rpb24gZigpe2lmKHIpe3ZhciBuLGU9ci5sZW5ndGg7Zm9yKGk9bmV3IEFycmF5KGUpLG89bmV3IEFycmF5KGUpLG49MDtuPGU7KytuKW9bbl09K3QocltuXSxuLHIpLGlbbl09aXNOYU4ob1tuXSk/MDorYShyW25dLG4scil9fXJldHVybiJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1RbygrdCkpLG51bGw9PW4mJihuPTApLG51bGw9PWUmJihlPTApLHUuaW5pdGlhbGl6ZT1mdW5jdGlvbih0KXtyPXQsZigpfSx1LnN0cmVuZ3RoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6UW8oK3QpLGYoKSx1KTphfSx1LnJhZGl1cz1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uOlFvKCtuKSxmKCksdSk6dH0sdS54PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSt0LHUpOm59LHUueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0rdCx1KTplfSx1fSx0LmZvcmNlU2ltdWxhdGlvbj1mdW5jdGlvbih0KXt2YXIgbixlPTEscj0uMDAxLGk9MS1NYXRoLnBvdyhyLDEvMzAwKSxvPTAsYT0uNix1PUtpKCksZj11cihzKSxjPUkoInRpY2siLCJlbmQiKTtmdW5jdGlvbiBzKCl7bCgpLGMuY2FsbCgidGljayIsbiksZTxyJiYoZi5zdG9wKCksYy5jYWxsKCJlbmQiLG4pKX1mdW5jdGlvbiBsKCl7dmFyIG4scixmPXQubGVuZ3RoO2ZvcihlKz0oby1lKSppLHUuZWFjaChmdW5jdGlvbih0KXt0KGUpfSksbj0wO248ZjsrK24pbnVsbD09KHI9dFtuXSkuZng/ci54Kz1yLnZ4Kj1hOihyLng9ci5meCxyLnZ4PTApLG51bGw9PXIuZnk/ci55Kz1yLnZ5Kj1hOihyLnk9ci5meSxyLnZ5PTApfWZ1bmN0aW9uIGgoKXtmb3IodmFyIG4sZT0wLHI9dC5sZW5ndGg7ZTxyOysrZSl7aWYoKG49dFtlXSkuaW5kZXg9ZSxpc05hTihuLngpfHxpc05hTihuLnkpKXt2YXIgaT1kYSpNYXRoLnNxcnQoZSksbz1lKnBhO24ueD1pKk1hdGguY29zKG8pLG4ueT1pKk1hdGguc2luKG8pfShpc05hTihuLnZ4KXx8aXNOYU4obi52eSkpJiYobi52eD1uLnZ5PTApfX1mdW5jdGlvbiBkKG4pe3JldHVybiBuLmluaXRpYWxpemUmJm4uaW5pdGlhbGl6ZSh0KSxufXJldHVybiBudWxsPT10JiYodD1bXSksaCgpLG49e3RpY2s6bCxyZXN0YXJ0OmZ1bmN0aW9uKCl7cmV0dXJuIGYucmVzdGFydChzKSxufSxzdG9wOmZ1bmN0aW9uKCl7cmV0dXJuIGYuc3RvcCgpLG59LG5vZGVzOmZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PWUsaCgpLHUuZWFjaChkKSxuKTp0fSxhbHBoYTpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0rdCxuKTplfSxhbHBoYU1pbjpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0rdCxuKTpyfSxhbHBoYURlY2F5OmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSt0LG4pOitpfSxhbHBoYVRhcmdldDpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0rdCxuKTpvfSx2ZWxvY2l0eURlY2F5OmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPTEtdCxuKToxLWF9LGZvcmNlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT8obnVsbD09ZT91LnJlbW92ZSh0KTp1LnNldCh0LGQoZSkpLG4pOnUuZ2V0KHQpfSxmaW5kOmZ1bmN0aW9uKG4sZSxyKXt2YXIgaSxvLGEsdSxmLGM9MCxzPXQubGVuZ3RoO2ZvcihudWxsPT1yP3I9MS8wOnIqPXIsYz0wO2M8czsrK2MpKGE9KGk9bi0odT10W2NdKS54KSppKyhvPWUtdS55KSpvKTxyJiYoZj11LHI9YSk7cmV0dXJuIGZ9LG9uOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT8oYy5vbih0LGUpLG4pOmMub24odCl9fX0sdC5mb3JjZVg9ZnVuY3Rpb24odCl7dmFyIG4sZSxyLGk9UW8oLjEpO2Z1bmN0aW9uIG8odCl7Zm9yKHZhciBpLG89MCxhPW4ubGVuZ3RoO288YTsrK28pKGk9bltvXSkudngrPShyW29dLWkueCkqZVtvXSp0fWZ1bmN0aW9uIGEoKXtpZihuKXt2YXIgbyxhPW4ubGVuZ3RoO2ZvcihlPW5ldyBBcnJheShhKSxyPW5ldyBBcnJheShhKSxvPTA7bzxhOysrbyllW29dPWlzTmFOKHJbb109K3QobltvXSxvLG4pKT8wOitpKG5bb10sbyxuKX19cmV0dXJuImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PVFvKG51bGw9PXQ/MDordCkpLG8uaW5pdGlhbGl6ZT1mdW5jdGlvbih0KXtuPXQsYSgpfSxvLnN0cmVuZ3RoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6UW8oK3QpLGEoKSxvKTppfSxvLng9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIG4/bjpRbygrbiksYSgpLG8pOnR9LG99LHQuZm9yY2VZPWZ1bmN0aW9uKHQpe3ZhciBuLGUscixpPVFvKC4xKTtmdW5jdGlvbiBvKHQpe2Zvcih2YXIgaSxvPTAsYT1uLmxlbmd0aDtvPGE7KytvKShpPW5bb10pLnZ5Kz0ocltvXS1pLnkpKmVbb10qdH1mdW5jdGlvbiBhKCl7aWYobil7dmFyIG8sYT1uLmxlbmd0aDtmb3IoZT1uZXcgQXJyYXkoYSkscj1uZXcgQXJyYXkoYSksbz0wO288YTsrK28pZVtvXT1pc05hTihyW29dPSt0KG5bb10sbyxuKSk/MDoraShuW29dLG8sbil9fXJldHVybiJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1RbyhudWxsPT10PzA6K3QpKSxvLmluaXRpYWxpemU9ZnVuY3Rpb24odCl7bj10LGEoKX0sby5zdHJlbmd0aD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OlFvKCt0KSxhKCksbyk6aX0sby55PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBuP246UW8oK24pLGEoKSxvKTp0fSxvfSx0LmZvcm1hdERlZmF1bHRMb2NhbGU9U2EsdC5mb3JtYXRMb2NhbGU9TmEsdC5mb3JtYXRTcGVjaWZpZXI9YmEsdC5wcmVjaXNpb25GaXhlZD1FYSx0LnByZWNpc2lvblByZWZpeD1rYSx0LnByZWNpc2lvblJvdW5kPUNhLHQuZ2VvQXJlYT1mdW5jdGlvbih0KXtyZXR1cm4geXUucmVzZXQoKSxzdSh0LF91KSwyKnl1fSx0Lmdlb0JvdW5kcz1mdW5jdGlvbih0KXt2YXIgbixlLHIsaSxvLGEsdTtpZihSdT16dT0tKEN1PVB1PTEvMCksT3U9W10sc3UodCxyZiksZT1PdS5sZW5ndGgpe2ZvcihPdS5zb3J0KGRmKSxuPTEsbz1bcj1PdVswXV07bjxlOysrbilwZihyLChpPU91W25dKVswXSl8fHBmKHIsaVsxXSk/KGhmKHJbMF0saVsxXSk+aGYoclswXSxyWzFdKSYmKHJbMV09aVsxXSksaGYoaVswXSxyWzFdKT5oZihyWzBdLHJbMV0pJiYoclswXT1pWzBdKSk6by5wdXNoKHI9aSk7Zm9yKGE9LTEvMCxuPTAscj1vW2U9by5sZW5ndGgtMV07bjw9ZTtyPWksKytuKWk9b1tuXSwodT1oZihyWzFdLGlbMF0pKT5hJiYoYT11LEN1PWlbMF0senU9clsxXSl9cmV0dXJuIE91PVl1PW51bGwsQ3U9PT0xLzB8fFB1PT09MS8wP1tbTmFOLE5hTl0sW05hTixOYU5dXTpbW0N1LFB1XSxbenUsUnVdXX0sdC5nZW9DZW50cm9pZD1mdW5jdGlvbih0KXtCdT1GdT1JdT1IdT1qdT1YdT1HdT1WdT0kdT1XdT1adT0wLHN1KHQsdmYpO3ZhciBuPSR1LGU9V3Uscj1adSxpPW4qbitlKmUrcipyO3JldHVybiBpPFVhJiYobj1YdSxlPUd1LHI9VnUsRnU8RGEmJihuPUl1LGU9SHUscj1qdSksKGk9bipuK2UqZStyKnIpPFVhKT9bTmFOLE5hTl06W1hhKGUsbikqRmEsZXUoci9LYShpKSkqRmFdfSx0Lmdlb0NpcmNsZT1mdW5jdGlvbigpe3ZhciB0LG4sZT1OZihbMCwwXSkscj1OZig5MCksaT1OZig2KSxvPXtwb2ludDpmdW5jdGlvbihlLHIpe3QucHVzaChlPW4oZSxyKSksZVswXSo9RmEsZVsxXSo9RmF9fTtmdW5jdGlvbiBhKCl7dmFyIGE9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyksdT1yLmFwcGx5KHRoaXMsYXJndW1lbnRzKSpJYSxmPWkuYXBwbHkodGhpcyxhcmd1bWVudHMpKklhO3JldHVybiB0PVtdLG49a2YoLWFbMF0qSWEsLWFbMV0qSWEsMCkuaW52ZXJ0LExmKG8sdSxmLDEpLGE9e3R5cGU6IlBvbHlnb24iLGNvb3JkaW5hdGVzOlt0XX0sdD1uPW51bGwsYX1yZXR1cm4gYS5jZW50ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpOZihbK3RbMF0sK3RbMV1dKSxhKTplfSxhLnJhZGl1cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0iZnVuY3Rpb24iPT10eXBlb2YgdD90Ok5mKCt0KSxhKTpyfSxhLnByZWNpc2lvbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90Ok5mKCt0KSxhKTppfSxhfSx0Lmdlb0NsaXBBbnRpbWVyaWRpYW49R2YsdC5nZW9DbGlwQ2lyY2xlPVZmLHQuZ2VvQ2xpcEV4dGVudD1mdW5jdGlvbigpe3ZhciB0LG4sZSxyPTAsaT0wLG89OTYwLGE9NTAwO3JldHVybiBlPXtzdHJlYW06ZnVuY3Rpb24oZSl7cmV0dXJuIHQmJm49PT1lP3Q6dD1aZihyLGksbyxhKShuPWUpfSxleHRlbnQ6ZnVuY3Rpb24odSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9K3VbMF1bMF0saT0rdVswXVsxXSxvPSt1WzFdWzBdLGE9K3VbMV1bMV0sdD1uPW51bGwsZSk6W1tyLGldLFtvLGFdXX19fSx0Lmdlb0NsaXBSZWN0YW5nbGU9WmYsdC5nZW9Db250YWlucz1mdW5jdGlvbih0LG4pe3JldHVybih0JiZjYy5oYXNPd25Qcm9wZXJ0eSh0LnR5cGUpP2NjW3QudHlwZV06bGMpKHQsbil9LHQuZ2VvRGlzdGFuY2U9ZmMsdC5nZW9HcmF0aWN1bGU9YmMsdC5nZW9HcmF0aWN1bGUxMD1mdW5jdGlvbigpe3JldHVybiBiYygpKCl9LHQuZ2VvSW50ZXJwb2xhdGU9ZnVuY3Rpb24odCxuKXt2YXIgZT10WzBdKklhLHI9dFsxXSpJYSxpPW5bMF0qSWEsbz1uWzFdKklhLGE9R2EociksdT1RYShyKSxmPUdhKG8pLGM9UWEobykscz1hKkdhKGUpLGw9YSpRYShlKSxoPWYqR2EoaSksZD1mKlFhKGkpLHA9MipldShLYShydShvLXIpK2EqZipydShpLWUpKSksdj1RYShwKSxnPXA/ZnVuY3Rpb24odCl7dmFyIG49UWEodCo9cCkvdixlPVFhKHAtdCkvdixyPWUqcytuKmgsaT1lKmwrbipkLG89ZSp1K24qYztyZXR1cm5bWGEoaSxyKSpGYSxYYShvLEthKHIqcitpKmkpKSpGYV19OmZ1bmN0aW9uKCl7cmV0dXJuW2UqRmEscipGYV19O3JldHVybiBnLmRpc3RhbmNlPXAsZ30sdC5nZW9MZW5ndGg9b2MsdC5nZW9QYXRoPWZ1bmN0aW9uKHQsbil7dmFyIGUscixpPTQuNTtmdW5jdGlvbiBvKHQpe3JldHVybiB0JiYoImZ1bmN0aW9uIj09dHlwZW9mIGkmJnIucG9pbnRSYWRpdXMoK2kuYXBwbHkodGhpcyxhcmd1bWVudHMpKSxzdSh0LGUocikpKSxyLnJlc3VsdCgpfXJldHVybiBvLmFyZWE9ZnVuY3Rpb24odCl7cmV0dXJuIHN1KHQsZShTYykpLFNjLnJlc3VsdCgpfSxvLm1lYXN1cmU9ZnVuY3Rpb24odCl7cmV0dXJuIHN1KHQsZShkcykpLGRzLnJlc3VsdCgpfSxvLmJvdW5kcz1mdW5jdGlvbih0KXtyZXR1cm4gc3UodCxlKFVjKSksVWMucmVzdWx0KCl9LG8uY2VudHJvaWQ9ZnVuY3Rpb24odCl7cmV0dXJuIHN1KHQsZShaYykpLFpjLnJlc3VsdCgpfSxvLnByb2plY3Rpb249ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9bnVsbD09bj8odD1udWxsLG1jKToodD1uKS5zdHJlYW0sbyk6dH0sby5jb250ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPW51bGw9PXQ/KG49bnVsbCxuZXcgZ3MpOm5ldyBhcyhuPXQpLCJmdW5jdGlvbiIhPXR5cGVvZiBpJiZyLnBvaW50UmFkaXVzKGkpLG8pOm59LG8ucG9pbnRSYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDooci5wb2ludFJhZGl1cygrdCksK3QpLG8pOml9LG8ucHJvamVjdGlvbih0KS5jb250ZXh0KG4pfSx0Lmdlb0FsYmVycz1Ecyx0Lmdlb0FsYmVyc1VzYT1mdW5jdGlvbigpe3ZhciB0LG4sZSxyLGksbyxhPURzKCksdT1McygpLnJvdGF0ZShbMTU0LDBdKS5jZW50ZXIoWy0yLDU4LjVdKS5wYXJhbGxlbHMoWzU1LDY1XSksZj1McygpLnJvdGF0ZShbMTU3LDBdKS5jZW50ZXIoWy0zLDE5LjldKS5wYXJhbGxlbHMoWzgsMThdKSxjPXtwb2ludDpmdW5jdGlvbih0LG4pe289W3Qsbl19fTtmdW5jdGlvbiBzKHQpe3ZhciBuPXRbMF0sYT10WzFdO3JldHVybiBvPW51bGwsZS5wb2ludChuLGEpLG98fChyLnBvaW50KG4sYSksbyl8fChpLnBvaW50KG4sYSksbyl9ZnVuY3Rpb24gbCgpe3JldHVybiB0PW49bnVsbCxzfXJldHVybiBzLmludmVydD1mdW5jdGlvbih0KXt2YXIgbj1hLnNjYWxlKCksZT1hLnRyYW5zbGF0ZSgpLHI9KHRbMF0tZVswXSkvbixpPSh0WzFdLWVbMV0pL247cmV0dXJuKGk+PS4xMiYmaTwuMjM0JiZyPj0tLjQyNSYmcjwtLjIxND91Omk+PS4xNjYmJmk8LjIzNCYmcj49LS4yMTQmJnI8LS4xMTU/ZjphKS5pbnZlcnQodCl9LHMuc3RyZWFtPWZ1bmN0aW9uKGUpe3JldHVybiB0JiZuPT09ZT90OihyPVthLnN0cmVhbShuPWUpLHUuc3RyZWFtKGUpLGYuc3RyZWFtKGUpXSxpPXIubGVuZ3RoLHQ9e3BvaW50OmZ1bmN0aW9uKHQsbil7Zm9yKHZhciBlPS0xOysrZTxpOylyW2VdLnBvaW50KHQsbil9LHNwaGVyZTpmdW5jdGlvbigpe2Zvcih2YXIgdD0tMTsrK3Q8aTspclt0XS5zcGhlcmUoKX0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7Zm9yKHZhciB0PS0xOysrdDxpOylyW3RdLmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PS0xOysrdDxpOylyW3RdLmxpbmVFbmQoKX0scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7Zm9yKHZhciB0PS0xOysrdDxpOylyW3RdLnBvbHlnb25TdGFydCgpfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PS0xOysrdDxpOylyW3RdLnBvbHlnb25FbmQoKX19KTt2YXIgcixpfSxzLnByZWNpc2lvbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYS5wcmVjaXNpb24odCksdS5wcmVjaXNpb24odCksZi5wcmVjaXNpb24odCksbCgpKTphLnByZWNpc2lvbigpfSxzLnNjYWxlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhLnNjYWxlKHQpLHUuc2NhbGUoLjM1KnQpLGYuc2NhbGUodCkscy50cmFuc2xhdGUoYS50cmFuc2xhdGUoKSkpOmEuc2NhbGUoKX0scy50cmFuc2xhdGU9ZnVuY3Rpb24odCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGEudHJhbnNsYXRlKCk7dmFyIG49YS5zY2FsZSgpLG89K3RbMF0scz0rdFsxXTtyZXR1cm4gZT1hLnRyYW5zbGF0ZSh0KS5jbGlwRXh0ZW50KFtbby0uNDU1Km4scy0uMjM4Km5dLFtvKy40NTUqbixzKy4yMzgqbl1dKS5zdHJlYW0oYykscj11LnRyYW5zbGF0ZShbby0uMzA3Km4scysuMjAxKm5dKS5jbGlwRXh0ZW50KFtbby0uNDI1Km4rRGEscysuMTIqbitEYV0sW28tLjIxNCpuLURhLHMrLjIzNCpuLURhXV0pLnN0cmVhbShjKSxpPWYudHJhbnNsYXRlKFtvLS4yMDUqbixzKy4yMTIqbl0pLmNsaXBFeHRlbnQoW1tvLS4yMTQqbitEYSxzKy4xNjYqbitEYV0sW28tLjExNSpuLURhLHMrLjIzNCpuLURhXV0pLnN0cmVhbShjKSxsKCl9LHMuZml0RXh0ZW50PWZ1bmN0aW9uKHQsbil7cmV0dXJuIHhzKHMsdCxuKX0scy5maXRTaXplPWZ1bmN0aW9uKHQsbil7cmV0dXJuIHdzKHMsdCxuKX0scy5maXRXaWR0aD1mdW5jdGlvbih0LG4pe3JldHVybiBNcyhzLHQsbil9LHMuZml0SGVpZ2h0PWZ1bmN0aW9uKHQsbil7cmV0dXJuIEFzKHMsdCxuKX0scy5zY2FsZSgxMDcwKX0sdC5nZW9BemltdXRoYWxFcXVhbEFyZWE9ZnVuY3Rpb24oKXtyZXR1cm4gQ3MoT3MpLnNjYWxlKDEyNC43NSkuY2xpcEFuZ2xlKDE3OS45OTkpfSx0Lmdlb0F6aW11dGhhbEVxdWFsQXJlYVJhdz1Pcyx0Lmdlb0F6aW11dGhhbEVxdWlkaXN0YW50PWZ1bmN0aW9uKCl7cmV0dXJuIENzKFlzKS5zY2FsZSg3OS40MTg4KS5jbGlwQW5nbGUoMTc5Ljk5OSl9LHQuZ2VvQXppbXV0aGFsRXF1aWRpc3RhbnRSYXc9WXMsdC5nZW9Db25pY0NvbmZvcm1hbD1mdW5jdGlvbigpe3JldHVybiB6cyhIcykuc2NhbGUoMTA5LjUpLnBhcmFsbGVscyhbMzAsMzBdKX0sdC5nZW9Db25pY0NvbmZvcm1hbFJhdz1Icyx0Lmdlb0NvbmljRXF1YWxBcmVhPUxzLHQuZ2VvQ29uaWNFcXVhbEFyZWFSYXc9UnMsdC5nZW9Db25pY0VxdWlkaXN0YW50PWZ1bmN0aW9uKCl7cmV0dXJuIHpzKFhzKS5zY2FsZSgxMzEuMTU0KS5jZW50ZXIoWzAsMTMuOTM4OV0pfSx0Lmdlb0NvbmljRXF1aWRpc3RhbnRSYXc9WHMsdC5nZW9FcXVhbEVhcnRoPWZ1bmN0aW9uKCl7cmV0dXJuIENzKFFzKS5zY2FsZSgxNzcuMTU4KX0sdC5nZW9FcXVhbEVhcnRoUmF3PVFzLHQuZ2VvRXF1aXJlY3Rhbmd1bGFyPWZ1bmN0aW9uKCl7cmV0dXJuIENzKGpzKS5zY2FsZSgxNTIuNjMpfSx0Lmdlb0VxdWlyZWN0YW5ndWxhclJhdz1qcyx0Lmdlb0dub21vbmljPWZ1bmN0aW9uKCl7cmV0dXJuIENzKEpzKS5zY2FsZSgxNDQuMDQ5KS5jbGlwQW5nbGUoNjApfSx0Lmdlb0dub21vbmljUmF3PUpzLHQuZ2VvSWRlbnRpdHk9ZnVuY3Rpb24oKXt2YXIgdCxuLGUscixpLG8sYT0xLHU9MCxmPTAsYz0xLHM9MSxsPW1jLGg9bnVsbCxkPW1jO2Z1bmN0aW9uIHAoKXtyZXR1cm4gcj1pPW51bGwsb31yZXR1cm4gbz17c3RyZWFtOmZ1bmN0aW9uKHQpe3JldHVybiByJiZpPT09dD9yOnI9bChkKGk9dCkpfSxwb3N0Y2xpcDpmdW5jdGlvbihyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZD1yLGg9dD1uPWU9bnVsbCxwKCkpOmR9LGNsaXBFeHRlbnQ6ZnVuY3Rpb24ocil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGQ9bnVsbD09cj8oaD10PW49ZT1udWxsLG1jKTpaZihoPStyWzBdWzBdLHQ9K3JbMF1bMV0sbj0rclsxXVswXSxlPStyWzFdWzFdKSxwKCkpOm51bGw9PWg/bnVsbDpbW2gsdF0sW24sZV1dfSxzY2FsZTpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD1LcygoYT0rdCkqYyxhKnMsdSxmKSxwKCkpOmF9LHRyYW5zbGF0ZTpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD1LcyhhKmMsYSpzLHU9K3RbMF0sZj0rdFsxXSkscCgpKTpbdSxmXX0scmVmbGVjdFg6ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9S3MoYSooYz10Py0xOjEpLGEqcyx1LGYpLHAoKSk6YzwwfSxyZWZsZWN0WTpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD1LcyhhKmMsYSoocz10Py0xOjEpLHUsZikscCgpKTpzPDB9LGZpdEV4dGVudDpmdW5jdGlvbih0LG4pe3JldHVybiB4cyhvLHQsbil9LGZpdFNpemU6ZnVuY3Rpb24odCxuKXtyZXR1cm4gd3Mobyx0LG4pfSxmaXRXaWR0aDpmdW5jdGlvbih0LG4pe3JldHVybiBNcyhvLHQsbil9LGZpdEhlaWdodDpmdW5jdGlvbih0LG4pe3JldHVybiBBcyhvLHQsbil9fX0sdC5nZW9Qcm9qZWN0aW9uPUNzLHQuZ2VvUHJvamVjdGlvbk11dGF0b3I9UHMsdC5nZW9NZXJjYXRvcj1mdW5jdGlvbigpe3JldHVybiBGcyhCcykuc2NhbGUoOTYxL0JhKX0sdC5nZW9NZXJjYXRvclJhdz1Ccyx0Lmdlb05hdHVyYWxFYXJ0aDE9ZnVuY3Rpb24oKXtyZXR1cm4gQ3ModGwpLnNjYWxlKDE3NS4yOTUpfSx0Lmdlb05hdHVyYWxFYXJ0aDFSYXc9dGwsdC5nZW9PcnRob2dyYXBoaWM9ZnVuY3Rpb24oKXtyZXR1cm4gQ3MobmwpLnNjYWxlKDI0OS41KS5jbGlwQW5nbGUoOTArRGEpfSx0Lmdlb09ydGhvZ3JhcGhpY1Jhdz1ubCx0Lmdlb1N0ZXJlb2dyYXBoaWM9ZnVuY3Rpb24oKXtyZXR1cm4gQ3MoZWwpLnNjYWxlKDI1MCkuY2xpcEFuZ2xlKDE0Mil9LHQuZ2VvU3RlcmVvZ3JhcGhpY1Jhdz1lbCx0Lmdlb1RyYW5zdmVyc2VNZXJjYXRvcj1mdW5jdGlvbigpe3ZhciB0PUZzKHJsKSxuPXQuY2VudGVyLGU9dC5yb3RhdGU7cmV0dXJuIHQuY2VudGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP24oWy10WzFdLHRbMF1dKTpbKHQ9bigpKVsxXSwtdFswXV19LHQucm90YXRlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP2UoW3RbMF0sdFsxXSx0Lmxlbmd0aD4yP3RbMl0rOTA6OTBdKTpbKHQ9ZSgpKVswXSx0WzFdLHRbMl0tOTBdfSxlKFswLDAsOTBdKS5zY2FsZSgxNTkuMTU1KX0sdC5nZW9UcmFuc3ZlcnNlTWVyY2F0b3JSYXc9cmwsdC5nZW9Sb3RhdGlvbj1SZix0Lmdlb1N0cmVhbT1zdSx0Lmdlb1RyYW5zZm9ybT1mdW5jdGlvbih0KXtyZXR1cm57c3RyZWFtOl9zKHQpfX0sdC5jbHVzdGVyPWZ1bmN0aW9uKCl7dmFyIHQ9aWwsbj0xLGU9MSxyPSExO2Z1bmN0aW9uIGkoaSl7dmFyIG8sYT0wO2kuZWFjaEFmdGVyKGZ1bmN0aW9uKG4pe3ZhciBlPW4uY2hpbGRyZW47ZT8obi54PWZ1bmN0aW9uKHQpe3JldHVybiB0LnJlZHVjZShvbCwwKS90Lmxlbmd0aH0oZSksbi55PWZ1bmN0aW9uKHQpe3JldHVybiAxK3QucmVkdWNlKGFsLDApfShlKSk6KG4ueD1vP2ErPXQobixvKTowLG4ueT0wLG89bil9KTt2YXIgdT1mdW5jdGlvbih0KXtmb3IodmFyIG47bj10LmNoaWxkcmVuOyl0PW5bMF07cmV0dXJuIHR9KGkpLGY9ZnVuY3Rpb24odCl7Zm9yKHZhciBuO249dC5jaGlsZHJlbjspdD1uW24ubGVuZ3RoLTFdO3JldHVybiB0fShpKSxjPXUueC10KHUsZikvMixzPWYueCt0KGYsdSkvMjtyZXR1cm4gaS5lYWNoQWZ0ZXIocj9mdW5jdGlvbih0KXt0Lng9KHQueC1pLngpKm4sdC55PShpLnktdC55KSplfTpmdW5jdGlvbih0KXt0Lng9KHQueC1jKS8ocy1jKSpuLHQueT0oMS0oaS55P3QueS9pLnk6MSkpKmV9KX1yZXR1cm4gaS5zZXBhcmF0aW9uPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PW4saSk6dH0saS5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSExLG49K3RbMF0sZT0rdFsxXSxpKTpyP251bGw6W24sZV19LGkubm9kZVNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ITAsbj0rdFswXSxlPSt0WzFdLGkpOnI/W24sZV06bnVsbH0saX0sdC5oaWVyYXJjaHk9ZmwsdC5wYWNrPWZ1bmN0aW9uKCl7dmFyIHQ9bnVsbCxuPTEsZT0xLHI9RWw7ZnVuY3Rpb24gaShpKXtyZXR1cm4gaS54PW4vMixpLnk9ZS8yLHQ/aS5lYWNoQmVmb3JlKFBsKHQpKS5lYWNoQWZ0ZXIoemwociwuNSkpLmVhY2hCZWZvcmUoUmwoMSkpOmkuZWFjaEJlZm9yZShQbChDbCkpLmVhY2hBZnRlcih6bChFbCwxKSkuZWFjaEFmdGVyKHpsKHIsaS5yL01hdGgubWluKG4sZSkpKS5lYWNoQmVmb3JlKFJsKE1hdGgubWluKG4sZSkvKDIqaS5yKSkpLGl9cmV0dXJuIGkucmFkaXVzPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PW51bGw9PShlPW4pP251bGw6U2woZSksaSk6dDt2YXIgZX0saS5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSt0WzBdLGU9K3RbMV0saSk6W24sZV19LGkucGFkZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmtsKCt0KSxpKTpyfSxpfSx0LnBhY2tTaWJsaW5ncz1mdW5jdGlvbih0KXtyZXR1cm4gTmwodCksdH0sdC5wYWNrRW5jbG9zZT1wbCx0LnBhcnRpdGlvbj1mdW5jdGlvbigpe3ZhciB0PTEsbj0xLGU9MCxyPSExO2Z1bmN0aW9uIGkoaSl7dmFyIG89aS5oZWlnaHQrMTtyZXR1cm4gaS54MD1pLnkwPWUsaS54MT10LGkueTE9bi9vLGkuZWFjaEJlZm9yZShmdW5jdGlvbih0LG4pe3JldHVybiBmdW5jdGlvbihyKXtyLmNoaWxkcmVuJiZEbChyLHIueDAsdCooci5kZXB0aCsxKS9uLHIueDEsdCooci5kZXB0aCsyKS9uKTt2YXIgaT1yLngwLG89ci55MCxhPXIueDEtZSx1PXIueTEtZTthPGkmJihpPWE9KGkrYSkvMiksdTxvJiYobz11PShvK3UpLzIpLHIueDA9aSxyLnkwPW8sci54MT1hLHIueTE9dX19KG4sbykpLHImJmkuZWFjaEJlZm9yZShMbCksaX1yZXR1cm4gaS5yb3VuZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0hIXQsaSk6cn0saS5zaXplPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PStlWzBdLG49K2VbMV0saSk6W3Qsbl19LGkucGFkZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0rdCxpKTplfSxpfSx0LnN0cmF0aWZ5PWZ1bmN0aW9uKCl7dmFyIHQ9WWwsbj1CbDtmdW5jdGlvbiBlKGUpe3ZhciByLGksbyxhLHUsZixjLHM9ZS5sZW5ndGgsbD1uZXcgQXJyYXkocyksaD17fTtmb3IoaT0wO2k8czsrK2kpcj1lW2ldLHU9bFtpXT1uZXcgaGwociksbnVsbCE9KGY9dChyLGksZSkpJiYoZis9IiIpJiYoaFtjPVVsKyh1LmlkPWYpXT1jIGluIGg/T2w6dSk7Zm9yKGk9MDtpPHM7KytpKWlmKHU9bFtpXSxudWxsIT0oZj1uKGVbaV0saSxlKSkmJihmKz0iIikpe2lmKCEoYT1oW1VsK2ZdKSl0aHJvdyBuZXcgRXJyb3IoIm1pc3Npbmc6ICIrZik7aWYoYT09PU9sKXRocm93IG5ldyBFcnJvcigiYW1iaWd1b3VzOiAiK2YpO2EuY2hpbGRyZW4/YS5jaGlsZHJlbi5wdXNoKHUpOmEuY2hpbGRyZW49W3VdLHUucGFyZW50PWF9ZWxzZXtpZihvKXRocm93IG5ldyBFcnJvcigibXVsdGlwbGUgcm9vdHMiKTtvPXV9aWYoIW8pdGhyb3cgbmV3IEVycm9yKCJubyByb290Iik7aWYoby5wYXJlbnQ9cWwsby5lYWNoQmVmb3JlKGZ1bmN0aW9uKHQpe3QuZGVwdGg9dC5wYXJlbnQuZGVwdGgrMSwtLXN9KS5lYWNoQmVmb3JlKGxsKSxvLnBhcmVudD1udWxsLHM+MCl0aHJvdyBuZXcgRXJyb3IoImN5Y2xlIik7cmV0dXJuIG99cmV0dXJuIGUuaWQ9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9U2wobiksZSk6dH0sZS5wYXJlbnRJZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1TbCh0KSxlKTpufSxlfSx0LnRyZWU9ZnVuY3Rpb24oKXt2YXIgdD1GbCxuPTEsZT0xLHI9bnVsbDtmdW5jdGlvbiBpKGkpe3ZhciBmPWZ1bmN0aW9uKHQpe2Zvcih2YXIgbixlLHIsaSxvLGE9bmV3IEdsKHQsMCksdT1bYV07bj11LnBvcCgpOylpZihyPW4uXy5jaGlsZHJlbilmb3Iobi5jaGlsZHJlbj1uZXcgQXJyYXkobz1yLmxlbmd0aCksaT1vLTE7aT49MDstLWkpdS5wdXNoKGU9bi5jaGlsZHJlbltpXT1uZXcgR2wocltpXSxpKSksZS5wYXJlbnQ9bjtyZXR1cm4oYS5wYXJlbnQ9bmV3IEdsKG51bGwsMCkpLmNoaWxkcmVuPVthXSxhfShpKTtpZihmLmVhY2hBZnRlcihvKSxmLnBhcmVudC5tPS1mLnosZi5lYWNoQmVmb3JlKGEpLHIpaS5lYWNoQmVmb3JlKHUpO2Vsc2V7dmFyIGM9aSxzPWksbD1pO2kuZWFjaEJlZm9yZShmdW5jdGlvbih0KXt0Lng8Yy54JiYoYz10KSx0Lng+cy54JiYocz10KSx0LmRlcHRoPmwuZGVwdGgmJihsPXQpfSk7dmFyIGg9Yz09PXM/MTp0KGMscykvMixkPWgtYy54LHA9bi8ocy54K2grZCksdj1lLyhsLmRlcHRofHwxKTtpLmVhY2hCZWZvcmUoZnVuY3Rpb24odCl7dC54PSh0LngrZCkqcCx0Lnk9dC5kZXB0aCp2fSl9cmV0dXJuIGl9ZnVuY3Rpb24gbyhuKXt2YXIgZT1uLmNoaWxkcmVuLHI9bi5wYXJlbnQuY2hpbGRyZW4saT1uLmk/cltuLmktMV06bnVsbDtpZihlKXshZnVuY3Rpb24odCl7Zm9yKHZhciBuLGU9MCxyPTAsaT10LmNoaWxkcmVuLG89aS5sZW5ndGg7LS1vPj0wOykobj1pW29dKS56Kz1lLG4ubSs9ZSxlKz1uLnMrKHIrPW4uYyl9KG4pO3ZhciBvPShlWzBdLnorZVtlLmxlbmd0aC0xXS56KS8yO2k/KG4uej1pLnordChuLl8saS5fKSxuLm09bi56LW8pOm4uej1vfWVsc2UgaSYmKG4uej1pLnordChuLl8saS5fKSk7bi5wYXJlbnQuQT1mdW5jdGlvbihuLGUscil7aWYoZSl7Zm9yKHZhciBpLG89bixhPW4sdT1lLGY9by5wYXJlbnQuY2hpbGRyZW5bMF0sYz1vLm0scz1hLm0sbD11Lm0saD1mLm07dT1IbCh1KSxvPUlsKG8pLHUmJm87KWY9SWwoZiksKGE9SGwoYSkpLmE9biwoaT11LnorbC1vLnotYyt0KHUuXyxvLl8pKT4wJiYoamwoWGwodSxuLHIpLG4saSksYys9aSxzKz1pKSxsKz11Lm0sYys9by5tLGgrPWYubSxzKz1hLm07dSYmIUhsKGEpJiYoYS50PXUsYS5tKz1sLXMpLG8mJiFJbChmKSYmKGYudD1vLGYubSs9Yy1oLHI9bil9cmV0dXJuIHJ9KG4saSxuLnBhcmVudC5BfHxyWzBdKX1mdW5jdGlvbiBhKHQpe3QuXy54PXQueit0LnBhcmVudC5tLHQubSs9dC5wYXJlbnQubX1mdW5jdGlvbiB1KHQpe3QueCo9bix0Lnk9dC5kZXB0aCplfXJldHVybiBpLnNlcGFyYXRpb249ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9bixpKTp0fSxpLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ITEsbj0rdFswXSxlPSt0WzFdLGkpOnI/bnVsbDpbbixlXX0saS5ub2RlU2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0hMCxuPSt0WzBdLGU9K3RbMV0saSk6cj9bbixlXTpudWxsfSxpfSx0LnRyZWVtYXA9ZnVuY3Rpb24oKXt2YXIgdD1abCxuPSExLGU9MSxyPTEsaT1bMF0sbz1FbCxhPUVsLHU9RWwsZj1FbCxjPUVsO2Z1bmN0aW9uIHModCl7cmV0dXJuIHQueDA9dC55MD0wLHQueDE9ZSx0LnkxPXIsdC5lYWNoQmVmb3JlKGwpLGk9WzBdLG4mJnQuZWFjaEJlZm9yZShMbCksdH1mdW5jdGlvbiBsKG4pe3ZhciBlPWlbbi5kZXB0aF0scj1uLngwK2Uscz1uLnkwK2UsbD1uLngxLWUsaD1uLnkxLWU7bDxyJiYocj1sPShyK2wpLzIpLGg8cyYmKHM9aD0ocytoKS8yKSxuLngwPXIsbi55MD1zLG4ueDE9bCxuLnkxPWgsbi5jaGlsZHJlbiYmKGU9aVtuLmRlcHRoKzFdPW8obikvMixyKz1jKG4pLWUscys9YShuKS1lLChsLT11KG4pLWUpPHImJihyPWw9KHIrbCkvMiksKGgtPWYobiktZSk8cyYmKHM9aD0ocytoKS8yKSx0KG4scixzLGwsaCkpfXJldHVybiBzLnJvdW5kPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSEhdCxzKTpufSxzLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9K3RbMF0scj0rdFsxXSxzKTpbZSxyXX0scy50aWxlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PVNsKG4pLHMpOnR9LHMucGFkZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9zLnBhZGRpbmdJbm5lcih0KS5wYWRkaW5nT3V0ZXIodCk6cy5wYWRkaW5nSW5uZXIoKX0scy5wYWRkaW5nSW5uZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDprbCgrdCkscyk6b30scy5wYWRkaW5nT3V0ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/cy5wYWRkaW5nVG9wKHQpLnBhZGRpbmdSaWdodCh0KS5wYWRkaW5nQm90dG9tKHQpLnBhZGRpbmdMZWZ0KHQpOnMucGFkZGluZ1RvcCgpfSxzLnBhZGRpbmdUb3A9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDprbCgrdCkscyk6YX0scy5wYWRkaW5nUmlnaHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDprbCgrdCkscyk6dX0scy5wYWRkaW5nQm90dG9tPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6a2woK3QpLHMpOmZ9LHMucGFkZGluZ0xlZnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDprbCgrdCkscyk6Y30sc30sdC50cmVlbWFwQmluYXJ5PWZ1bmN0aW9uKHQsbixlLHIsaSl7dmFyIG8sYSx1PXQuY2hpbGRyZW4sZj11Lmxlbmd0aCxjPW5ldyBBcnJheShmKzEpO2ZvcihjWzBdPWE9bz0wO288ZjsrK28pY1tvKzFdPWErPXVbb10udmFsdWU7IWZ1bmN0aW9uIHQobixlLHIsaSxvLGEsZil7aWYobj49ZS0xKXt2YXIgcz11W25dO3JldHVybiBzLngwPWkscy55MD1vLHMueDE9YSx2b2lkKHMueTE9Zil9Zm9yKHZhciBsPWNbbl0saD1yLzIrbCxkPW4rMSxwPWUtMTtkPHA7KXt2YXIgdj1kK3A+Pj4xO2Nbdl08aD9kPXYrMTpwPXZ9aC1jW2QtMV08Y1tkXS1oJiZuKzE8ZCYmLS1kO3ZhciBnPWNbZF0tbCx5PXItZztpZihhLWk+Zi1vKXt2YXIgXz0oaSp5K2EqZykvcjt0KG4sZCxnLGksbyxfLGYpLHQoZCxlLHksXyxvLGEsZil9ZWxzZXt2YXIgYj0obyp5K2YqZykvcjt0KG4sZCxnLGksbyxhLGIpLHQoZCxlLHksaSxiLGEsZil9fSgwLGYsdC52YWx1ZSxuLGUscixpKX0sdC50cmVlbWFwRGljZT1EbCx0LnRyZWVtYXBTbGljZT1WbCx0LnRyZWVtYXBTbGljZURpY2U9ZnVuY3Rpb24odCxuLGUscixpKXsoMSZ0LmRlcHRoP1ZsOkRsKSh0LG4sZSxyLGkpfSx0LnRyZWVtYXBTcXVhcmlmeT1abCx0LnRyZWVtYXBSZXNxdWFyaWZ5PVFsLHQuaW50ZXJwb2xhdGU9bWUsdC5pbnRlcnBvbGF0ZUFycmF5PWRlLHQuaW50ZXJwb2xhdGVCYXNpcz1lZSx0LmludGVycG9sYXRlQmFzaXNDbG9zZWQ9cmUsdC5pbnRlcnBvbGF0ZURhdGU9cGUsdC5pbnRlcnBvbGF0ZURpc2NyZXRlPWZ1bmN0aW9uKHQpe3ZhciBuPXQubGVuZ3RoO3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdFtNYXRoLm1heCgwLE1hdGgubWluKG4tMSxNYXRoLmZsb29yKGUqbikpKV19fSx0LmludGVycG9sYXRlSHVlPWZ1bmN0aW9uKHQsbil7dmFyIGU9YWUoK3QsK24pO3JldHVybiBmdW5jdGlvbih0KXt2YXIgbj1lKHQpO3JldHVybiBuLTM2MCpNYXRoLmZsb29yKG4vMzYwKX19LHQuaW50ZXJwb2xhdGVOdW1iZXI9dmUsdC5pbnRlcnBvbGF0ZU9iamVjdD1nZSx0LmludGVycG9sYXRlUm91bmQ9eGUsdC5pbnRlcnBvbGF0ZVN0cmluZz1iZSx0LmludGVycG9sYXRlVHJhbnNmb3JtQ3NzPUNlLHQuaW50ZXJwb2xhdGVUcmFuc2Zvcm1Tdmc9UGUsdC5pbnRlcnBvbGF0ZVpvb209cWUsdC5pbnRlcnBvbGF0ZVJnYj1jZSx0LmludGVycG9sYXRlUmdiQmFzaXM9bGUsdC5pbnRlcnBvbGF0ZVJnYkJhc2lzQ2xvc2VkPWhlLHQuaW50ZXJwb2xhdGVIc2w9WWUsdC5pbnRlcnBvbGF0ZUhzbExvbmc9QmUsdC5pbnRlcnBvbGF0ZUxhYj1mdW5jdGlvbih0LG4pe3ZhciBlPWZlKCh0PVVuKHQpKS5sLChuPVVuKG4pKS5sKSxyPWZlKHQuYSxuLmEpLGk9ZmUodC5iLG4uYiksbz1mZSh0Lm9wYWNpdHksbi5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIHQubD1lKG4pLHQuYT1yKG4pLHQuYj1pKG4pLHQub3BhY2l0eT1vKG4pLHQrIiJ9fSx0LmludGVycG9sYXRlSGNsPUllLHQuaW50ZXJwb2xhdGVIY2xMb25nPUhlLHQuaW50ZXJwb2xhdGVDdWJlaGVsaXg9WGUsdC5pbnRlcnBvbGF0ZUN1YmVoZWxpeExvbmc9R2UsdC5waWVjZXdpc2U9ZnVuY3Rpb24odCxuKXtmb3IodmFyIGU9MCxyPW4ubGVuZ3RoLTEsaT1uWzBdLG89bmV3IEFycmF5KHI8MD8wOnIpO2U8cjspb1tlXT10KGksaT1uWysrZV0pO3JldHVybiBmdW5jdGlvbih0KXt2YXIgbj1NYXRoLm1heCgwLE1hdGgubWluKHItMSxNYXRoLmZsb29yKHQqPXIpKSk7cmV0dXJuIG9bbl0odC1uKX19LHQucXVhbnRpemU9ZnVuY3Rpb24odCxuKXtmb3IodmFyIGU9bmV3IEFycmF5KG4pLHI9MDtyPG47KytyKWVbcl09dChyLyhuLTEpKTtyZXR1cm4gZX0sdC5wYXRoPUdpLHQucG9seWdvbkFyZWE9ZnVuY3Rpb24odCl7Zm9yKHZhciBuLGU9LTEscj10Lmxlbmd0aCxpPXRbci0xXSxvPTA7KytlPHI7KW49aSxpPXRbZV0sbys9blsxXSppWzBdLW5bMF0qaVsxXTtyZXR1cm4gby8yfSx0LnBvbHlnb25DZW50cm9pZD1mdW5jdGlvbih0KXtmb3IodmFyIG4sZSxyPS0xLGk9dC5sZW5ndGgsbz0wLGE9MCx1PXRbaS0xXSxmPTA7KytyPGk7KW49dSx1PXRbcl0sZis9ZT1uWzBdKnVbMV0tdVswXSpuWzFdLG8rPShuWzBdK3VbMF0pKmUsYSs9KG5bMV0rdVsxXSkqZTtyZXR1cm5bby8oZio9MyksYS9mXX0sdC5wb2x5Z29uSHVsbD1mdW5jdGlvbih0KXtpZigoZT10Lmxlbmd0aCk8MylyZXR1cm4gbnVsbDt2YXIgbixlLHI9bmV3IEFycmF5KGUpLGk9bmV3IEFycmF5KGUpO2ZvcihuPTA7bjxlOysrbilyW25dPVsrdFtuXVswXSwrdFtuXVsxXSxuXTtmb3Ioci5zb3J0KEpsKSxuPTA7bjxlOysrbilpW25dPVtyW25dWzBdLC1yW25dWzFdXTt2YXIgbz1LbChyKSxhPUtsKGkpLHU9YVswXT09PW9bMF0sZj1hW2EubGVuZ3RoLTFdPT09b1tvLmxlbmd0aC0xXSxjPVtdO2ZvcihuPW8ubGVuZ3RoLTE7bj49MDstLW4pYy5wdXNoKHRbcltvW25dXVsyXV0pO2ZvcihuPSt1O248YS5sZW5ndGgtZjsrK24pYy5wdXNoKHRbclthW25dXVsyXV0pO3JldHVybiBjfSx0LnBvbHlnb25Db250YWlucz1mdW5jdGlvbih0LG4pe2Zvcih2YXIgZSxyLGk9dC5sZW5ndGgsbz10W2ktMV0sYT1uWzBdLHU9blsxXSxmPW9bMF0sYz1vWzFdLHM9ITEsbD0wO2w8aTsrK2wpZT0obz10W2xdKVswXSwocj1vWzFdKT51IT1jPnUmJmE8KGYtZSkqKHUtcikvKGMtcikrZSYmKHM9IXMpLGY9ZSxjPXI7cmV0dXJuIHN9LHQucG9seWdvbkxlbmd0aD1mdW5jdGlvbih0KXtmb3IodmFyIG4sZSxyPS0xLGk9dC5sZW5ndGgsbz10W2ktMV0sYT1vWzBdLHU9b1sxXSxmPTA7KytyPGk7KW49YSxlPXUsbi09YT0obz10W3JdKVswXSxlLT11PW9bMV0sZis9TWF0aC5zcXJ0KG4qbitlKmUpO3JldHVybiBmfSx0LnF1YWR0cmVlPXJhLHQucmFuZG9tVW5pZm9ybT1uaCx0LnJhbmRvbU5vcm1hbD1laCx0LnJhbmRvbUxvZ05vcm1hbD1yaCx0LnJhbmRvbUJhdGVzPW9oLHQucmFuZG9tSXJ3aW5IYWxsPWloLHQucmFuZG9tRXhwb25lbnRpYWw9YWgsdC5zY2FsZUJhbmQ9aGgsdC5zY2FsZVBvaW50PWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uIHQobil7dmFyIGU9bi5jb3B5O3JldHVybiBuLnBhZGRpbmc9bi5wYWRkaW5nT3V0ZXIsZGVsZXRlIG4ucGFkZGluZ0lubmVyLGRlbGV0ZSBuLnBhZGRpbmdPdXRlcixuLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gdChlKCkpfSxufShoaCgpLnBhZGRpbmdJbm5lcigxKSl9LHQuc2NhbGVJZGVudGl0eT1mdW5jdGlvbiB0KCl7dmFyIG49WzAsMV07ZnVuY3Rpb24gZSh0KXtyZXR1cm4rdH1yZXR1cm4gZS5pbnZlcnQ9ZSxlLmRvbWFpbj1lLnJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPWZoLmNhbGwodCxwaCksZSk6bi5zbGljZSgpfSxlLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gdCgpLmRvbWFpbihuKX0seGgoZSl9LHQuc2NhbGVMaW5lYXI9ZnVuY3Rpb24gdCgpe3ZhciBuPW1oKGdoLHZlKTtyZXR1cm4gbi5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGJoKG4sdCgpKX0seGgobil9LHQuc2NhbGVMb2c9ZnVuY3Rpb24gbigpe3ZhciBlPW1oKE1oLEFoKS5kb21haW4oWzEsMTBdKSxyPWUuZG9tYWluLGk9MTAsbz1TaCgxMCksYT1OaCgxMCk7ZnVuY3Rpb24gdSgpe3JldHVybiBvPVNoKGkpLGE9TmgoaSkscigpWzBdPDAmJihvPUVoKG8pLGE9RWgoYSkpLGV9cmV0dXJuIGUuYmFzZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0rdCx1KCkpOml9LGUuZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyKHQpLHUoKSk6cigpfSxlLnRpY2tzPWZ1bmN0aW9uKHQpe3ZhciBuLGU9cigpLHU9ZVswXSxmPWVbZS5sZW5ndGgtMV07KG49Zjx1KSYmKGg9dSx1PWYsZj1oKTt2YXIgYyxzLGwsaD1vKHUpLGQ9byhmKSxwPW51bGw9PXQ/MTA6K3Qsdj1bXTtpZighKGklMSkmJmQtaDxwKXtpZihoPU1hdGgucm91bmQoaCktMSxkPU1hdGgucm91bmQoZCkrMSx1PjApe2Zvcig7aDxkOysraClmb3Iocz0xLGM9YShoKTtzPGk7KytzKWlmKCEoKGw9YypzKTx1KSl7aWYobD5mKWJyZWFrO3YucHVzaChsKX19ZWxzZSBmb3IoO2g8ZDsrK2gpZm9yKHM9aS0xLGM9YShoKTtzPj0xOy0tcylpZighKChsPWMqcyk8dSkpe2lmKGw+ZilicmVhazt2LnB1c2gobCl9fWVsc2Ugdj1tKGgsZCxNYXRoLm1pbihkLWgscCkpLm1hcChhKTtyZXR1cm4gbj92LnJldmVyc2UoKTp2fSxlLnRpY2tGb3JtYXQ9ZnVuY3Rpb24obixyKXtpZihudWxsPT1yJiYocj0xMD09PWk/Ii4wZSI6IiwiKSwiZnVuY3Rpb24iIT10eXBlb2YgciYmKHI9dC5mb3JtYXQocikpLG49PT0xLzApcmV0dXJuIHI7bnVsbD09biYmKG49MTApO3ZhciB1PU1hdGgubWF4KDEsaSpuL2UudGlja3MoKS5sZW5ndGgpO3JldHVybiBmdW5jdGlvbih0KXt2YXIgbj10L2EoTWF0aC5yb3VuZChvKHQpKSk7cmV0dXJuIG4qaTxpLS41JiYobio9aSksbjw9dT9yKHQpOiIifX0sZS5uaWNlPWZ1bmN0aW9uKCl7cmV0dXJuIHIod2gocigpLHtmbG9vcjpmdW5jdGlvbih0KXtyZXR1cm4gYShNYXRoLmZsb29yKG8odCkpKX0sY2VpbDpmdW5jdGlvbih0KXtyZXR1cm4gYShNYXRoLmNlaWwobyh0KSkpfX0pKX0sZS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGJoKGUsbigpLmJhc2UoaSkpfSxlfSx0LnNjYWxlT3JkaW5hbD1saCx0LnNjYWxlSW1wbGljaXQ9c2gsdC5zY2FsZVBvdz1DaCx0LnNjYWxlU3FydD1mdW5jdGlvbigpe3JldHVybiBDaCgpLmV4cG9uZW50KC41KX0sdC5zY2FsZVF1YW50aWxlPWZ1bmN0aW9uIHQoKXt2YXIgZT1bXSxyPVtdLG89W107ZnVuY3Rpb24gYSgpe3ZhciB0PTAsbj1NYXRoLm1heCgxLHIubGVuZ3RoKTtmb3Iobz1uZXcgQXJyYXkobi0xKTsrK3Q8bjspb1t0LTFdPUEoZSx0L24pO3JldHVybiB1fWZ1bmN0aW9uIHUodCl7aWYoIWlzTmFOKHQ9K3QpKXJldHVybiByW2kobyx0KV19cmV0dXJuIHUuaW52ZXJ0RXh0ZW50PWZ1bmN0aW9uKHQpe3ZhciBuPXIuaW5kZXhPZih0KTtyZXR1cm4gbjwwP1tOYU4sTmFOXTpbbj4wP29bbi0xXTplWzBdLG48by5sZW5ndGg/b1tuXTplW2UubGVuZ3RoLTFdXX0sdS5kb21haW49ZnVuY3Rpb24odCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGUuc2xpY2UoKTtlPVtdO2Zvcih2YXIgcixpPTAsbz10Lmxlbmd0aDtpPG87KytpKW51bGw9PShyPXRbaV0pfHxpc05hTihyPStyKXx8ZS5wdXNoKHIpO3JldHVybiBlLnNvcnQobiksYSgpfSx1LnJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPWNoLmNhbGwodCksYSgpKTpyLnNsaWNlKCl9LHUucXVhbnRpbGVzPWZ1bmN0aW9uKCl7cmV0dXJuIG8uc2xpY2UoKX0sdS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIHQoKS5kb21haW4oZSkucmFuZ2Uocil9LHV9LHQuc2NhbGVRdWFudGl6ZT1mdW5jdGlvbiB0KCl7dmFyIG49MCxlPTEscj0xLG89Wy41XSxhPVswLDFdO2Z1bmN0aW9uIHUodCl7aWYodDw9dClyZXR1cm4gYVtpKG8sdCwwLHIpXX1mdW5jdGlvbiBmKCl7dmFyIHQ9LTE7Zm9yKG89bmV3IEFycmF5KHIpOysrdDxyOylvW3RdPSgodCsxKSplLSh0LXIpKm4pLyhyKzEpO3JldHVybiB1fXJldHVybiB1LmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0rdFswXSxlPSt0WzFdLGYoKSk6W24sZV19LHUucmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9KGE9Y2guY2FsbCh0KSkubGVuZ3RoLTEsZigpKTphLnNsaWNlKCl9LHUuaW52ZXJ0RXh0ZW50PWZ1bmN0aW9uKHQpe3ZhciBpPWEuaW5kZXhPZih0KTtyZXR1cm4gaTwwP1tOYU4sTmFOXTppPDE/W24sb1swXV06aT49cj9bb1tyLTFdLGVdOltvW2ktMV0sb1tpXV19LHUuY29weT1mdW5jdGlvbigpe3JldHVybiB0KCkuZG9tYWluKFtuLGVdKS5yYW5nZShhKX0seGgodSl9LHQuc2NhbGVUaHJlc2hvbGQ9ZnVuY3Rpb24gdCgpe3ZhciBuPVsuNV0sZT1bMCwxXSxyPTE7ZnVuY3Rpb24gbyh0KXtpZih0PD10KXJldHVybiBlW2kobix0LDAscildfXJldHVybiBvLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1jaC5jYWxsKHQpLHI9TWF0aC5taW4obi5sZW5ndGgsZS5sZW5ndGgtMSksbyk6bi5zbGljZSgpfSxvLnJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPWNoLmNhbGwodCkscj1NYXRoLm1pbihuLmxlbmd0aCxlLmxlbmd0aC0xKSxvKTplLnNsaWNlKCl9LG8uaW52ZXJ0RXh0ZW50PWZ1bmN0aW9uKHQpe3ZhciByPWUuaW5kZXhPZih0KTtyZXR1cm5bbltyLTFdLG5bcl1dfSxvLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gdCgpLmRvbWFpbihuKS5yYW5nZShlKX0sb30sdC5zY2FsZVRpbWU9ZnVuY3Rpb24oKXtyZXR1cm4gY3YoY2QsdWQsVmgsamgsSWgsQmgsT2gsTGgsdC50aW1lRm9ybWF0KS5kb21haW4oW25ldyBEYXRlKDJlMywwLDEpLG5ldyBEYXRlKDJlMywwLDIpXSl9LHQuc2NhbGVVdGM9ZnVuY3Rpb24oKXtyZXR1cm4gY3YoTGQsemQsX2QsdmQsZGQsbGQsT2gsTGgsdC51dGNGb3JtYXQpLmRvbWFpbihbRGF0ZS5VVEMoMmUzLDAsMSksRGF0ZS5VVEMoMmUzLDAsMildKX0sdC5zY2FsZVNlcXVlbnRpYWw9ZnVuY3Rpb24gdChuKXt2YXIgZT0wLHI9MSxpPTEsbz0hMTtmdW5jdGlvbiBhKHQpe3ZhciByPSh0LWUpKmk7cmV0dXJuIG4obz9NYXRoLm1heCgwLE1hdGgubWluKDEscikpOnIpfXJldHVybiBhLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0rdFswXSxyPSt0WzFdLGk9ZT09PXI/MDoxLyhyLWUpLGEpOltlLHJdfSxhLmNsYW1wPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSEhdCxhKTpvfSxhLmludGVycG9sYXRvcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10LGEpOm59LGEuY29weT1mdW5jdGlvbigpe3JldHVybiB0KG4pLmRvbWFpbihbZSxyXSkuY2xhbXAobyl9LHhoKGEpfSx0LnNjYWxlRGl2ZXJnaW5nPWZ1bmN0aW9uIHQobil7dmFyIGU9MCxyPS41LGk9MSxvPTEsYT0xLHU9ITE7ZnVuY3Rpb24gZih0KXt2YXIgZT0uNSsoKHQ9K3QpLXIpKih0PHI/bzphKTtyZXR1cm4gbih1P01hdGgubWF4KDAsTWF0aC5taW4oMSxlKSk6ZSl9cmV0dXJuIGYuZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSt0WzBdLHI9K3RbMV0saT0rdFsyXSxvPWU9PT1yPzA6LjUvKHItZSksYT1yPT09aT8wOi41LyhpLXIpLGYpOltlLHIsaV19LGYuY2xhbXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9ISF0LGYpOnV9LGYuaW50ZXJwb2xhdG9yPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQsZik6bn0sZi5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIHQobikuZG9tYWluKFtlLHIsaV0pLmNsYW1wKHUpfSx4aChmKX0sdC5zY2hlbWVDYXRlZ29yeTEwPWx2LHQuc2NoZW1lQWNjZW50PWh2LHQuc2NoZW1lRGFyazI9ZHYsdC5zY2hlbWVQYWlyZWQ9cHYsdC5zY2hlbWVQYXN0ZWwxPXZ2LHQuc2NoZW1lUGFzdGVsMj1ndix0LnNjaGVtZVNldDE9eXYsdC5zY2hlbWVTZXQyPV92LHQuc2NoZW1lU2V0Mz1idix0LmludGVycG9sYXRlQnJCRz13dix0LnNjaGVtZUJyQkc9eHYsdC5pbnRlcnBvbGF0ZVBSR249QXYsdC5zY2hlbWVQUkduPU12LHQuaW50ZXJwb2xhdGVQaVlHPU52LHQuc2NoZW1lUGlZRz1Udix0LmludGVycG9sYXRlUHVPcj1Fdix0LnNjaGVtZVB1T3I9U3YsdC5pbnRlcnBvbGF0ZVJkQnU9Q3YsdC5zY2hlbWVSZEJ1PWt2LHQuaW50ZXJwb2xhdGVSZEd5PXp2LHQuc2NoZW1lUmRHeT1Qdix0LmludGVycG9sYXRlUmRZbEJ1PUx2LHQuc2NoZW1lUmRZbEJ1PVJ2LHQuaW50ZXJwb2xhdGVSZFlsR249VXYsdC5zY2hlbWVSZFlsR249RHYsdC5pbnRlcnBvbGF0ZVNwZWN0cmFsPU92LHQuc2NoZW1lU3BlY3RyYWw9cXYsdC5pbnRlcnBvbGF0ZUJ1R249QnYsdC5zY2hlbWVCdUduPVl2LHQuaW50ZXJwb2xhdGVCdVB1PUl2LHQuc2NoZW1lQnVQdT1Gdix0LmludGVycG9sYXRlR25CdT1qdix0LnNjaGVtZUduQnU9SHYsdC5pbnRlcnBvbGF0ZU9yUmQ9R3YsdC5zY2hlbWVPclJkPVh2LHQuaW50ZXJwb2xhdGVQdUJ1R249JHYsdC5zY2hlbWVQdUJ1R249VnYsdC5pbnRlcnBvbGF0ZVB1QnU9WnYsdC5zY2hlbWVQdUJ1PVd2LHQuaW50ZXJwb2xhdGVQdVJkPUp2LHQuc2NoZW1lUHVSZD1Rdix0LmludGVycG9sYXRlUmRQdT10Zyx0LnNjaGVtZVJkUHU9S3YsdC5pbnRlcnBvbGF0ZVlsR25CdT1lZyx0LnNjaGVtZVlsR25CdT1uZyx0LmludGVycG9sYXRlWWxHbj1pZyx0LnNjaGVtZVlsR249cmcsdC5pbnRlcnBvbGF0ZVlsT3JCcj1hZyx0LnNjaGVtZVlsT3JCcj1vZyx0LmludGVycG9sYXRlWWxPclJkPWZnLHQuc2NoZW1lWWxPclJkPXVnLHQuaW50ZXJwb2xhdGVCbHVlcz1zZyx0LnNjaGVtZUJsdWVzPWNnLHQuaW50ZXJwb2xhdGVHcmVlbnM9aGcsdC5zY2hlbWVHcmVlbnM9bGcsdC5pbnRlcnBvbGF0ZUdyZXlzPXBnLHQuc2NoZW1lR3JleXM9ZGcsdC5pbnRlcnBvbGF0ZVB1cnBsZXM9Z2csdC5zY2hlbWVQdXJwbGVzPXZnLHQuaW50ZXJwb2xhdGVSZWRzPV9nLHQuc2NoZW1lUmVkcz15Zyx0LmludGVycG9sYXRlT3Jhbmdlcz1tZyx0LnNjaGVtZU9yYW5nZXM9YmcsdC5pbnRlcnBvbGF0ZUN1YmVoZWxpeERlZmF1bHQ9eGcsdC5pbnRlcnBvbGF0ZVJhaW5ib3c9ZnVuY3Rpb24odCl7KHQ8MHx8dD4xKSYmKHQtPU1hdGguZmxvb3IodCkpO3ZhciBuPU1hdGguYWJzKHQtLjUpO3JldHVybiBBZy5oPTM2MCp0LTEwMCxBZy5zPTEuNS0xLjUqbixBZy5sPS44LS45Km4sQWcrIiJ9LHQuaW50ZXJwb2xhdGVXYXJtPXdnLHQuaW50ZXJwb2xhdGVDb29sPU1nLHQuaW50ZXJwb2xhdGVTaW5lYm93PWZ1bmN0aW9uKHQpe3ZhciBuO3JldHVybiB0PSguNS10KSpNYXRoLlBJLFRnLnI9MjU1KihuPU1hdGguc2luKHQpKSpuLFRnLmc9MjU1KihuPU1hdGguc2luKHQrTmcpKSpuLFRnLmI9MjU1KihuPU1hdGguc2luKHQrU2cpKSpuLFRnKyIifSx0LmludGVycG9sYXRlVmlyaWRpcz1rZyx0LmludGVycG9sYXRlTWFnbWE9Q2csdC5pbnRlcnBvbGF0ZUluZmVybm89UGcsdC5pbnRlcnBvbGF0ZVBsYXNtYT16Zyx0LmNyZWF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gRHQoVyh0KS5jYWxsKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkpfSx0LmNyZWF0b3I9Vyx0LmxvY2FsPXF0LHQubWF0Y2hlcj1ydCx0Lm1vdXNlPUZ0LHQubmFtZXNwYWNlPSQsdC5uYW1lc3BhY2VzPVYsdC5jbGllbnRQb2ludD1CdCx0LnNlbGVjdD1EdCx0LnNlbGVjdEFsbD1mdW5jdGlvbih0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQ/bmV3IFJ0KFtkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHQpXSxbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XSk6bmV3IFJ0KFtudWxsPT10P1tdOnRdLHp0KX0sdC5zZWxlY3Rpb249THQsdC5zZWxlY3Rvcj1RLHQuc2VsZWN0b3JBbGw9Syx0LnN0eWxlPWx0LHQudG91Y2g9SXQsdC50b3VjaGVzPWZ1bmN0aW9uKHQsbil7bnVsbD09biYmKG49WXQoKS50b3VjaGVzKTtmb3IodmFyIGU9MCxyPW4/bi5sZW5ndGg6MCxpPW5ldyBBcnJheShyKTtlPHI7KytlKWlbZV09QnQodCxuW2VdKTtyZXR1cm4gaX0sdC53aW5kb3c9c3QsdC5jdXN0b21FdmVudD1DdCx0LmFyYz1mdW5jdGlvbigpe3ZhciB0PUdnLG49VmcsZT1SZygwKSxyPW51bGwsaT0kZyxvPVdnLGE9WmcsdT1udWxsO2Z1bmN0aW9uIGYoKXt2YXIgZixjLHMsbD0rdC5hcHBseSh0aGlzLGFyZ3VtZW50cyksaD0rbi5hcHBseSh0aGlzLGFyZ3VtZW50cyksZD1pLmFwcGx5KHRoaXMsYXJndW1lbnRzKS1IZyxwPW8uYXBwbHkodGhpcyxhcmd1bWVudHMpLUhnLHY9TGcocC1kKSxnPXA+ZDtpZih1fHwodT1mPUdpKCkpLGg8bCYmKGM9aCxoPWwsbD1jKSxoPkZnKWlmKHY+amctRmcpdS5tb3ZlVG8oaCpVZyhkKSxoKllnKGQpKSx1LmFyYygwLDAsaCxkLHAsIWcpLGw+RmcmJih1Lm1vdmVUbyhsKlVnKHApLGwqWWcocCkpLHUuYXJjKDAsMCxsLHAsZCxnKSk7ZWxzZXt2YXIgeSxfLGI9ZCxtPXAseD1kLHc9cCxNPXYsQT12LFQ9YS5hcHBseSh0aGlzLGFyZ3VtZW50cykvMixOPVQ+RmcmJihyPytyLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpCZyhsKmwraCpoKSksUz1PZyhMZyhoLWwpLzIsK2UuYXBwbHkodGhpcyxhcmd1bWVudHMpKSxFPVMsaz1TO2lmKE4+Rmcpe3ZhciBDPVhnKE4vbCpZZyhUKSksUD1YZyhOL2gqWWcoVCkpOyhNLT0yKkMpPkZnPyh4Kz1DKj1nPzE6LTEsdy09Qyk6KE09MCx4PXc9KGQrcCkvMiksKEEtPTIqUCk+Rmc/KGIrPVAqPWc/MTotMSxtLT1QKTooQT0wLGI9bT0oZCtwKS8yKX12YXIgej1oKlVnKGIpLFI9aCpZZyhiKSxMPWwqVWcodyksRD1sKllnKHcpO2lmKFM+Rmcpe3ZhciBVPWgqVWcobSkscT1oKllnKG0pLE89bCpVZyh4KSxZPWwqWWcoeCk7aWYodjxJZyl7dmFyIEI9TT5GZz9mdW5jdGlvbih0LG4sZSxyLGksbyxhLHUpe3ZhciBmPWUtdCxjPXItbixzPWEtaSxsPXUtbyxoPShzKihuLW8pLWwqKHQtaSkpLyhsKmYtcypjKTtyZXR1cm5bdCtoKmYsbitoKmNdfSh6LFIsTyxZLFUscSxMLEQpOltMLERdLEY9ei1CWzBdLEk9Ui1CWzFdLEg9VS1CWzBdLGo9cS1CWzFdLFg9MS9ZZygoKHM9KEYqSCtJKmopLyhCZyhGKkYrSSpJKSpCZyhIKkgraipqKSkpPjE/MDpzPC0xP0lnOk1hdGguYWNvcyhzKSkvMiksRz1CZyhCWzBdKkJbMF0rQlsxXSpCWzFdKTtFPU9nKFMsKGwtRykvKFgtMSkpLGs9T2coUywoaC1HKS8oWCsxKSl9fUE+Rmc/az5GZz8oeT1RZyhPLFkseixSLGgsayxnKSxfPVFnKFUscSxMLEQsaCxrLGcpLHUubW92ZVRvKHkuY3greS54MDEseS5jeSt5LnkwMSksazxTP3UuYXJjKHkuY3gseS5jeSxrLERnKHkueTAxLHkueDAxKSxEZyhfLnkwMSxfLngwMSksIWcpOih1LmFyYyh5LmN4LHkuY3ksayxEZyh5LnkwMSx5LngwMSksRGcoeS55MTEseS54MTEpLCFnKSx1LmFyYygwLDAsaCxEZyh5LmN5K3kueTExLHkuY3greS54MTEpLERnKF8uY3krXy55MTEsXy5jeCtfLngxMSksIWcpLHUuYXJjKF8uY3gsXy5jeSxrLERnKF8ueTExLF8ueDExKSxEZyhfLnkwMSxfLngwMSksIWcpKSk6KHUubW92ZVRvKHosUiksdS5hcmMoMCwwLGgsYixtLCFnKSk6dS5tb3ZlVG8oeixSKSxsPkZnJiZNPkZnP0U+Rmc/KHk9UWcoTCxELFUscSxsLC1FLGcpLF89UWcoeixSLE8sWSxsLC1FLGcpLHUubGluZVRvKHkuY3greS54MDEseS5jeSt5LnkwMSksRTxTP3UuYXJjKHkuY3gseS5jeSxFLERnKHkueTAxLHkueDAxKSxEZyhfLnkwMSxfLngwMSksIWcpOih1LmFyYyh5LmN4LHkuY3ksRSxEZyh5LnkwMSx5LngwMSksRGcoeS55MTEseS54MTEpLCFnKSx1LmFyYygwLDAsbCxEZyh5LmN5K3kueTExLHkuY3greS54MTEpLERnKF8uY3krXy55MTEsXy5jeCtfLngxMSksZyksdS5hcmMoXy5jeCxfLmN5LEUsRGcoXy55MTEsXy54MTEpLERnKF8ueTAxLF8ueDAxKSwhZykpKTp1LmFyYygwLDAsbCx3LHgsZyk6dS5saW5lVG8oTCxEKX1lbHNlIHUubW92ZVRvKDAsMCk7aWYodS5jbG9zZVBhdGgoKSxmKXJldHVybiB1PW51bGwsZisiInx8bnVsbH1yZXR1cm4gZi5jZW50cm9pZD1mdW5jdGlvbigpe3ZhciBlPSgrdC5hcHBseSh0aGlzLGFyZ3VtZW50cykrICtuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkvMixyPSgraS5hcHBseSh0aGlzLGFyZ3VtZW50cykrICtvLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkvMi1JZy8yO3JldHVybltVZyhyKSplLFlnKHIpKmVdfSxmLmlubmVyUmFkaXVzPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBuP246UmcoK24pLGYpOnR9LGYub3V0ZXJSYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpSZygrdCksZik6bn0sZi5jb3JuZXJSYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpSZygrdCksZik6ZX0sZi5wYWRSYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9bnVsbD09dD9udWxsOiJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6UmcoK3QpLGYpOnJ9LGYuc3RhcnRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OlJnKCt0KSxmKTppfSxmLmVuZEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6UmcoK3QpLGYpOm99LGYucGFkQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpSZygrdCksZik6YX0sZi5jb250ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PW51bGw9PXQ/bnVsbDp0LGYpOnV9LGZ9LHQuYXJlYT1yeSx0LmxpbmU9ZXksdC5waWU9ZnVuY3Rpb24oKXt2YXIgdD1veSxuPWl5LGU9bnVsbCxyPVJnKDApLGk9UmcoamcpLG89UmcoMCk7ZnVuY3Rpb24gYShhKXt2YXIgdSxmLGMscyxsLGg9YS5sZW5ndGgsZD0wLHA9bmV3IEFycmF5KGgpLHY9bmV3IEFycmF5KGgpLGc9K3IuYXBwbHkodGhpcyxhcmd1bWVudHMpLHk9TWF0aC5taW4oamcsTWF0aC5tYXgoLWpnLGkuYXBwbHkodGhpcyxhcmd1bWVudHMpLWcpKSxfPU1hdGgubWluKE1hdGguYWJzKHkpL2gsby5hcHBseSh0aGlzLGFyZ3VtZW50cykpLGI9XyooeTwwPy0xOjEpO2Zvcih1PTA7dTxoOysrdSkobD12W3BbdV09dV09K3QoYVt1XSx1LGEpKT4wJiYoZCs9bCk7Zm9yKG51bGwhPW4/cC5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4odlt0XSx2W2VdKX0pOm51bGwhPWUmJnAuc29ydChmdW5jdGlvbih0LG4pe3JldHVybiBlKGFbdF0sYVtuXSl9KSx1PTAsYz1kPyh5LWgqYikvZDowO3U8aDsrK3UsZz1zKWY9cFt1XSxzPWcrKChsPXZbZl0pPjA/bCpjOjApK2IsdltmXT17ZGF0YTphW2ZdLGluZGV4OnUsdmFsdWU6bCxzdGFydEFuZ2xlOmcsZW5kQW5nbGU6cyxwYWRBbmdsZTpffTtyZXR1cm4gdn1yZXR1cm4gYS52YWx1ZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uOlJnKCtuKSxhKTp0fSxhLnNvcnRWYWx1ZXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dCxlPW51bGwsYSk6bn0sYS5zb3J0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXQsbj1udWxsLGEpOmV9LGEuc3RhcnRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OlJnKCt0KSxhKTpyfSxhLmVuZEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6UmcoK3QpLGEpOml9LGEucGFkQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpSZygrdCksYSk6b30sYX0sdC5hcmVhUmFkaWFsPWx5LHQucmFkaWFsQXJlYT1seSx0LmxpbmVSYWRpYWw9c3ksdC5yYWRpYWxMaW5lPXN5LHQucG9pbnRSYWRpYWw9aHksdC5saW5rSG9yaXpvbnRhbD1mdW5jdGlvbigpe3JldHVybiBneSh5eSl9LHQubGlua1ZlcnRpY2FsPWZ1bmN0aW9uKCl7cmV0dXJuIGd5KF95KX0sdC5saW5rUmFkaWFsPWZ1bmN0aW9uKCl7dmFyIHQ9Z3koYnkpO3JldHVybiB0LmFuZ2xlPXQueCxkZWxldGUgdC54LHQucmFkaXVzPXQueSxkZWxldGUgdC55LHR9LHQuc3ltYm9sPWZ1bmN0aW9uKCl7dmFyIHQ9UmcobXkpLG49UmcoNjQpLGU9bnVsbDtmdW5jdGlvbiByKCl7dmFyIHI7aWYoZXx8KGU9cj1HaSgpKSx0LmFwcGx5KHRoaXMsYXJndW1lbnRzKS5kcmF3KGUsK24uYXBwbHkodGhpcyxhcmd1bWVudHMpKSxyKXJldHVybiBlPW51bGwscisiInx8bnVsbH1yZXR1cm4gci50eXBlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBuP246Umcobikscik6dH0sci5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6UmcoK3QpLHIpOm59LHIuY29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1udWxsPT10P251bGw6dCxyKTplfSxyfSx0LnN5bWJvbHM9VXksdC5zeW1ib2xDaXJjbGU9bXksdC5zeW1ib2xDcm9zcz14eSx0LnN5bWJvbERpYW1vbmQ9QXksdC5zeW1ib2xTcXVhcmU9a3ksdC5zeW1ib2xTdGFyPUV5LHQuc3ltYm9sVHJpYW5nbGU9UHksdC5zeW1ib2xXeWU9RHksdC5jdXJ2ZUJhc2lzQ2xvc2VkPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgQnkodCl9LHQuY3VydmVCYXNpc09wZW49ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBGeSh0KX0sdC5jdXJ2ZUJhc2lzPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgWXkodCl9LHQuY3VydmVCdW5kbGU9SHksdC5jdXJ2ZUNhcmRpbmFsQ2xvc2VkPSR5LHQuY3VydmVDYXJkaW5hbE9wZW49WnksdC5jdXJ2ZUNhcmRpbmFsPUd5LHQuY3VydmVDYXRtdWxsUm9tQ2xvc2VkPW5fLHQuY3VydmVDYXRtdWxsUm9tT3Blbj1yXyx0LmN1cnZlQ2F0bXVsbFJvbT1LeSx0LmN1cnZlTGluZWFyQ2xvc2VkPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgaV8odCl9LHQuY3VydmVMaW5lYXI9S2csdC5jdXJ2ZU1vbm90b25lWD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGNfKHQpfSx0LmN1cnZlTW9ub3RvbmVZPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgc18odCl9LHQuY3VydmVOYXR1cmFsPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgaF8odCl9LHQuY3VydmVTdGVwPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgcF8odCwuNSl9LHQuY3VydmVTdGVwQWZ0ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBwXyh0LDEpfSx0LmN1cnZlU3RlcEJlZm9yZT1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IHBfKHQsMCl9LHQuc3RhY2s9ZnVuY3Rpb24oKXt2YXIgdD1SZyhbXSksbj1nXyxlPXZfLHI9eV87ZnVuY3Rpb24gaShpKXt2YXIgbyxhLHU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyksZj1pLmxlbmd0aCxjPXUubGVuZ3RoLHM9bmV3IEFycmF5KGMpO2ZvcihvPTA7bzxjOysrbyl7Zm9yKHZhciBsLGg9dVtvXSxkPXNbb109bmV3IEFycmF5KGYpLHA9MDtwPGY7KytwKWRbcF09bD1bMCwrcihpW3BdLGgscCxpKV0sbC5kYXRhPWlbcF07ZC5rZXk9aH1mb3Iobz0wLGE9bihzKTtvPGM7KytvKXNbYVtvXV0uaW5kZXg9bztyZXR1cm4gZShzLGEpLHN9cmV0dXJuIGkua2V5cz1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uOlJnKGR5LmNhbGwobikpLGkpOnR9LGkudmFsdWU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpSZygrdCksaSk6cn0saS5vcmRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1udWxsPT10P2dfOiJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6UmcoZHkuY2FsbCh0KSksaSk6bn0saS5vZmZzZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9bnVsbD09dD92Xzp0LGkpOmV9LGl9LHQuc3RhY2tPZmZzZXRFeHBhbmQ9ZnVuY3Rpb24odCxuKXtpZigocj10Lmxlbmd0aCk+MCl7Zm9yKHZhciBlLHIsaSxvPTAsYT10WzBdLmxlbmd0aDtvPGE7KytvKXtmb3IoaT1lPTA7ZTxyOysrZSlpKz10W2VdW29dWzFdfHwwO2lmKGkpZm9yKGU9MDtlPHI7KytlKXRbZV1bb11bMV0vPWl9dl8odCxuKX19LHQuc3RhY2tPZmZzZXREaXZlcmdpbmc9ZnVuY3Rpb24odCxuKXtpZigodT10Lmxlbmd0aCk+MSlmb3IodmFyIGUscixpLG8sYSx1LGY9MCxjPXRbblswXV0ubGVuZ3RoO2Y8YzsrK2YpZm9yKG89YT0wLGU9MDtlPHU7KytlKShpPShyPXRbbltlXV1bZl0pWzFdLXJbMF0pPj0wPyhyWzBdPW8sclsxXT1vKz1pKTppPDA/KHJbMV09YSxyWzBdPWErPWkpOnJbMF09b30sdC5zdGFja09mZnNldE5vbmU9dl8sdC5zdGFja09mZnNldFNpbGhvdWV0dGU9ZnVuY3Rpb24odCxuKXtpZigoZT10Lmxlbmd0aCk+MCl7Zm9yKHZhciBlLHI9MCxpPXRbblswXV0sbz1pLmxlbmd0aDtyPG87KytyKXtmb3IodmFyIGE9MCx1PTA7YTxlOysrYSl1Kz10W2FdW3JdWzFdfHwwO2lbcl1bMV0rPWlbcl1bMF09LXUvMn12Xyh0LG4pfX0sdC5zdGFja09mZnNldFdpZ2dsZT1mdW5jdGlvbih0LG4pe2lmKChpPXQubGVuZ3RoKT4wJiYocj0oZT10W25bMF1dKS5sZW5ndGgpPjApe2Zvcih2YXIgZSxyLGksbz0wLGE9MTthPHI7KythKXtmb3IodmFyIHU9MCxmPTAsYz0wO3U8aTsrK3Upe2Zvcih2YXIgcz10W25bdV1dLGw9c1thXVsxXXx8MCxoPShsLShzW2EtMV1bMV18fDApKS8yLGQ9MDtkPHU7KytkKXt2YXIgcD10W25bZF1dO2grPShwW2FdWzFdfHwwKS0ocFthLTFdWzFdfHwwKX1mKz1sLGMrPWgqbH1lW2EtMV1bMV0rPWVbYS0xXVswXT1vLGYmJihvLT1jL2YpfWVbYS0xXVsxXSs9ZVthLTFdWzBdPW8sdl8odCxuKX19LHQuc3RhY2tPcmRlckFzY2VuZGluZz1fXyx0LnN0YWNrT3JkZXJEZXNjZW5kaW5nPWZ1bmN0aW9uKHQpe3JldHVybiBfXyh0KS5yZXZlcnNlKCl9LHQuc3RhY2tPcmRlckluc2lkZU91dD1mdW5jdGlvbih0KXt2YXIgbixlLHI9dC5sZW5ndGgsaT10Lm1hcChiXyksbz1nXyh0KS5zb3J0KGZ1bmN0aW9uKHQsbil7cmV0dXJuIGlbbl0taVt0XX0pLGE9MCx1PTAsZj1bXSxjPVtdO2ZvcihuPTA7bjxyOysrbillPW9bbl0sYTx1PyhhKz1pW2VdLGYucHVzaChlKSk6KHUrPWlbZV0sYy5wdXNoKGUpKTtyZXR1cm4gYy5yZXZlcnNlKCkuY29uY2F0KGYpfSx0LnN0YWNrT3JkZXJOb25lPWdfLHQuc3RhY2tPcmRlclJldmVyc2U9ZnVuY3Rpb24odCl7cmV0dXJuIGdfKHQpLnJldmVyc2UoKX0sdC50aW1lSW50ZXJ2YWw9UmgsdC50aW1lTWlsbGlzZWNvbmQ9TGgsdC50aW1lTWlsbGlzZWNvbmRzPURoLHQudXRjTWlsbGlzZWNvbmQ9TGgsdC51dGNNaWxsaXNlY29uZHM9RGgsdC50aW1lU2Vjb25kPU9oLHQudGltZVNlY29uZHM9WWgsdC51dGNTZWNvbmQ9T2gsdC51dGNTZWNvbmRzPVloLHQudGltZU1pbnV0ZT1CaCx0LnRpbWVNaW51dGVzPUZoLHQudGltZUhvdXI9SWgsdC50aW1lSG91cnM9SGgsdC50aW1lRGF5PWpoLHQudGltZURheXM9WGgsdC50aW1lV2Vlaz1WaCx0LnRpbWVXZWVrcz10ZCx0LnRpbWVTdW5kYXk9VmgsdC50aW1lU3VuZGF5cz10ZCx0LnRpbWVNb25kYXk9JGgsdC50aW1lTW9uZGF5cz1uZCx0LnRpbWVUdWVzZGF5PVdoLHQudGltZVR1ZXNkYXlzPWVkLHQudGltZVdlZG5lc2RheT1aaCx0LnRpbWVXZWRuZXNkYXlzPXJkLHQudGltZVRodXJzZGF5PVFoLHQudGltZVRodXJzZGF5cz1pZCx0LnRpbWVGcmlkYXk9SmgsdC50aW1lRnJpZGF5cz1vZCx0LnRpbWVTYXR1cmRheT1LaCx0LnRpbWVTYXR1cmRheXM9YWQsdC50aW1lTW9udGg9dWQsdC50aW1lTW9udGhzPWZkLHQudGltZVllYXI9Y2QsdC50aW1lWWVhcnM9c2QsdC51dGNNaW51dGU9bGQsdC51dGNNaW51dGVzPWhkLHQudXRjSG91cj1kZCx0LnV0Y0hvdXJzPXBkLHQudXRjRGF5PXZkLHQudXRjRGF5cz1nZCx0LnV0Y1dlZWs9X2QsdC51dGNXZWVrcz1UZCx0LnV0Y1N1bmRheT1fZCx0LnV0Y1N1bmRheXM9VGQsdC51dGNNb25kYXk9YmQsdC51dGNNb25kYXlzPU5kLHQudXRjVHVlc2RheT1tZCx0LnV0Y1R1ZXNkYXlzPVNkLHQudXRjV2VkbmVzZGF5PXhkLHQudXRjV2VkbmVzZGF5cz1FZCx0LnV0Y1RodXJzZGF5PXdkLHQudXRjVGh1cnNkYXlzPWtkLHQudXRjRnJpZGF5PU1kLHQudXRjRnJpZGF5cz1DZCx0LnV0Y1NhdHVyZGF5PUFkLHQudXRjU2F0dXJkYXlzPVBkLHQudXRjTW9udGg9emQsdC51dGNNb250aHM9UmQsdC51dGNZZWFyPUxkLHQudXRjWWVhcnM9RGQsdC50aW1lRm9ybWF0RGVmYXVsdExvY2FsZT1RcCx0LnRpbWVGb3JtYXRMb2NhbGU9WWQsdC5pc29Gb3JtYXQ9SnAsdC5pc29QYXJzZT1LcCx0Lm5vdz1pcix0LnRpbWVyPXVyLHQudGltZXJGbHVzaD1mcix0LnRpbWVvdXQ9aHIsdC5pbnRlcnZhbD1mdW5jdGlvbih0LG4sZSl7dmFyIHI9bmV3IGFyLGk9bjtyZXR1cm4gbnVsbD09bj8oci5yZXN0YXJ0KHQsbixlKSxyKToobj0rbixlPW51bGw9PWU/aXIoKTorZSxyLnJlc3RhcnQoZnVuY3Rpb24gbyhhKXthKz1pLHIucmVzdGFydChvLGkrPW4sZSksdChhKX0sbixlKSxyKX0sdC50cmFuc2l0aW9uPXpyLHQuYWN0aXZlPWZ1bmN0aW9uKHQsbil7dmFyIGUscixpPXQuX190cmFuc2l0aW9uO2lmKGkpZm9yKHIgaW4gbj1udWxsPT1uP251bGw6bisiIixpKWlmKChlPWlbcl0pLnN0YXRlPmdyJiZlLm5hbWU9PT1uKXJldHVybiBuZXcgUHIoW1t0XV0sbGksbiwrcik7cmV0dXJuIG51bGx9LHQuaW50ZXJydXB0PU5yLHQudm9yb25vaT1mdW5jdGlvbigpe3ZhciB0PXhfLG49d18sZT1udWxsO2Z1bmN0aW9uIHIocil7cmV0dXJuIG5ldyBlYihyLm1hcChmdW5jdGlvbihlLGkpe3ZhciBvPVtNYXRoLnJvdW5kKHQoZSxpLHIpL0tfKSpLXyxNYXRoLnJvdW5kKG4oZSxpLHIpL0tfKSpLX107cmV0dXJuIG8uaW5kZXg9aSxvLmRhdGE9ZSxvfSksZSl9cmV0dXJuIHIucG9seWdvbnM9ZnVuY3Rpb24odCl7cmV0dXJuIHIodCkucG9seWdvbnMoKX0sci5saW5rcz1mdW5jdGlvbih0KXtyZXR1cm4gcih0KS5saW5rcygpfSxyLnRyaWFuZ2xlcz1mdW5jdGlvbih0KXtyZXR1cm4gcih0KS50cmlhbmdsZXMoKX0sci54PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBuP246bV8oK24pLHIpOnR9LHIueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgdD90Om1fKCt0KSxyKTpufSxyLmV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1udWxsPT10P251bGw6W1srdFswXVswXSwrdFswXVsxXV0sWyt0WzFdWzBdLCt0WzFdWzFdXV0scik6ZSYmW1tlWzBdWzBdLGVbMF1bMV1dLFtlWzFdWzBdLGVbMV1bMV1dXX0sci5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPW51bGw9PXQ/bnVsbDpbWzAsMF0sWyt0WzBdLCt0WzFdXV0scik6ZSYmW2VbMV1bMF0tZVswXVswXSxlWzFdWzFdLWVbMF1bMV1dfSxyfSx0Lnpvb209ZnVuY3Rpb24oKXt2YXIgbixlLHI9c2IsaT1sYixvPXZiLGE9ZGIsdT1wYixmPVswLDEvMF0sYz1bWy0xLzAsLTEvMF0sWzEvMCwxLzBdXSxzPTI1MCxsPXFlLGg9W10sZD1JKCJzdGFydCIsInpvb20iLCJlbmQiKSxwPTUwMCx2PTE1MCxnPTA7ZnVuY3Rpb24geSh0KXt0LnByb3BlcnR5KCJfX3pvb20iLGhiKS5vbigid2hlZWwuem9vbSIsQSkub24oIm1vdXNlZG93bi56b29tIixUKS5vbigiZGJsY2xpY2suem9vbSIsTikuZmlsdGVyKHUpLm9uKCJ0b3VjaHN0YXJ0Lnpvb20iLFMpLm9uKCJ0b3VjaG1vdmUuem9vbSIsRSkub24oInRvdWNoZW5kLnpvb20gdG91Y2hjYW5jZWwuem9vbSIsaykuc3R5bGUoInRvdWNoLWFjdGlvbiIsIm5vbmUiKS5zdHlsZSgiLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yIiwicmdiYSgwLDAsMCwwKSIpfWZ1bmN0aW9uIF8odCxuKXtyZXR1cm4obj1NYXRoLm1heChmWzBdLE1hdGgubWluKGZbMV0sbikpKT09PXQuaz90Om5ldyBvYihuLHQueCx0LnkpfWZ1bmN0aW9uIGIodCxuLGUpe3ZhciByPW5bMF0tZVswXSp0LmssaT1uWzFdLWVbMV0qdC5rO3JldHVybiByPT09dC54JiZpPT09dC55P3Q6bmV3IG9iKHQuayxyLGkpfWZ1bmN0aW9uIG0odCl7cmV0dXJuWygrdFswXVswXSsgK3RbMV1bMF0pLzIsKCt0WzBdWzFdKyArdFsxXVsxXSkvMl19ZnVuY3Rpb24geCh0LG4sZSl7dC5vbigic3RhcnQuem9vbSIsZnVuY3Rpb24oKXt3KHRoaXMsYXJndW1lbnRzKS5zdGFydCgpfSkub24oImludGVycnVwdC56b29tIGVuZC56b29tIixmdW5jdGlvbigpe3codGhpcyxhcmd1bWVudHMpLmVuZCgpfSkudHdlZW4oInpvb20iLGZ1bmN0aW9uKCl7dmFyIHQ9YXJndW1lbnRzLHI9dyh0aGlzLHQpLG89aS5hcHBseSh0aGlzLHQpLGE9ZXx8bShvKSx1PU1hdGgubWF4KG9bMV1bMF0tb1swXVswXSxvWzFdWzFdLW9bMF1bMV0pLGY9dGhpcy5fX3pvb20sYz0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uLmFwcGx5KHRoaXMsdCk6bixzPWwoZi5pbnZlcnQoYSkuY29uY2F0KHUvZi5rKSxjLmludmVydChhKS5jb25jYXQodS9jLmspKTtyZXR1cm4gZnVuY3Rpb24odCl7aWYoMT09PXQpdD1jO2Vsc2V7dmFyIG49cyh0KSxlPXUvblsyXTt0PW5ldyBvYihlLGFbMF0tblswXSplLGFbMV0tblsxXSplKX1yLnpvb20obnVsbCx0KX19KX1mdW5jdGlvbiB3KHQsbil7Zm9yKHZhciBlLHI9MCxpPWgubGVuZ3RoO3I8aTsrK3IpaWYoKGU9aFtyXSkudGhhdD09PXQpcmV0dXJuIGU7cmV0dXJuIG5ldyBNKHQsbil9ZnVuY3Rpb24gTSh0LG4pe3RoaXMudGhhdD10LHRoaXMuYXJncz1uLHRoaXMuaW5kZXg9LTEsdGhpcy5hY3RpdmU9MCx0aGlzLmV4dGVudD1pLmFwcGx5KHQsbil9ZnVuY3Rpb24gQSgpe2lmKHIuYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgdD13KHRoaXMsYXJndW1lbnRzKSxuPXRoaXMuX196b29tLGU9TWF0aC5tYXgoZlswXSxNYXRoLm1pbihmWzFdLG4uaypNYXRoLnBvdygyLGEuYXBwbHkodGhpcyxhcmd1bWVudHMpKSkpLGk9RnQodGhpcyk7aWYodC53aGVlbCl0Lm1vdXNlWzBdWzBdPT09aVswXSYmdC5tb3VzZVswXVsxXT09PWlbMV18fCh0Lm1vdXNlWzFdPW4uaW52ZXJ0KHQubW91c2VbMF09aSkpLGNsZWFyVGltZW91dCh0LndoZWVsKTtlbHNle2lmKG4uaz09PWUpcmV0dXJuO3QubW91c2U9W2ksbi5pbnZlcnQoaSldLE5yKHRoaXMpLHQuc3RhcnQoKX1jYigpLHQud2hlZWw9c2V0VGltZW91dChmdW5jdGlvbigpe3Qud2hlZWw9bnVsbCx0LmVuZCgpfSx2KSx0Lnpvb20oIm1vdXNlIixvKGIoXyhuLGUpLHQubW91c2VbMF0sdC5tb3VzZVsxXSksdC5leHRlbnQsYykpfX1mdW5jdGlvbiBUKCl7aWYoIWUmJnIuYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgbj13KHRoaXMsYXJndW1lbnRzKSxpPUR0KHQuZXZlbnQudmlldykub24oIm1vdXNlbW92ZS56b29tIixmdW5jdGlvbigpe2lmKGNiKCksIW4ubW92ZWQpe3ZhciBlPXQuZXZlbnQuY2xpZW50WC11LHI9dC5ldmVudC5jbGllbnRZLWY7bi5tb3ZlZD1lKmUrcipyPmd9bi56b29tKCJtb3VzZSIsbyhiKG4udGhhdC5fX3pvb20sbi5tb3VzZVswXT1GdChuLnRoYXQpLG4ubW91c2VbMV0pLG4uZXh0ZW50LGMpKX0sITApLm9uKCJtb3VzZXVwLnpvb20iLGZ1bmN0aW9uKCl7aS5vbigibW91c2Vtb3ZlLnpvb20gbW91c2V1cC56b29tIixudWxsKSxHdCh0LmV2ZW50LnZpZXcsbi5tb3ZlZCksY2IoKSxuLmVuZCgpfSwhMCksYT1GdCh0aGlzKSx1PXQuZXZlbnQuY2xpZW50WCxmPXQuZXZlbnQuY2xpZW50WTtYdCh0LmV2ZW50LnZpZXcpLGZiKCksbi5tb3VzZT1bYSx0aGlzLl9fem9vbS5pbnZlcnQoYSldLE5yKHRoaXMpLG4uc3RhcnQoKX19ZnVuY3Rpb24gTigpe2lmKHIuYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgbj10aGlzLl9fem9vbSxlPUZ0KHRoaXMpLGE9bi5pbnZlcnQoZSksdT1uLmsqKHQuZXZlbnQuc2hpZnRLZXk/LjU6MiksZj1vKGIoXyhuLHUpLGUsYSksaS5hcHBseSh0aGlzLGFyZ3VtZW50cyksYyk7Y2IoKSxzPjA/RHQodGhpcykudHJhbnNpdGlvbigpLmR1cmF0aW9uKHMpLmNhbGwoeCxmLGUpOkR0KHRoaXMpLmNhbGwoeS50cmFuc2Zvcm0sZil9fWZ1bmN0aW9uIFMoKXtpZihyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl7dmFyIGUsaSxvLGEsdT13KHRoaXMsYXJndW1lbnRzKSxmPXQuZXZlbnQuY2hhbmdlZFRvdWNoZXMsYz1mLmxlbmd0aDtmb3IoZmIoKSxpPTA7aTxjOysraSlhPVthPUl0KHRoaXMsZiwobz1mW2ldKS5pZGVudGlmaWVyKSx0aGlzLl9fem9vbS5pbnZlcnQoYSksby5pZGVudGlmaWVyXSx1LnRvdWNoMD91LnRvdWNoMXx8KHUudG91Y2gxPWEpOih1LnRvdWNoMD1hLGU9ITApO2lmKG4mJihuPWNsZWFyVGltZW91dChuKSwhdS50b3VjaDEpKXJldHVybiB1LmVuZCgpLHZvaWQoKGE9RHQodGhpcykub24oImRibGNsaWNrLnpvb20iKSkmJmEuYXBwbHkodGhpcyxhcmd1bWVudHMpKTtlJiYobj1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7bj1udWxsfSxwKSxOcih0aGlzKSx1LnN0YXJ0KCkpfX1mdW5jdGlvbiBFKCl7dmFyIGUscixpLGEsdT13KHRoaXMsYXJndW1lbnRzKSxmPXQuZXZlbnQuY2hhbmdlZFRvdWNoZXMscz1mLmxlbmd0aDtmb3IoY2IoKSxuJiYobj1jbGVhclRpbWVvdXQobikpLGU9MDtlPHM7KytlKWk9SXQodGhpcyxmLChyPWZbZV0pLmlkZW50aWZpZXIpLHUudG91Y2gwJiZ1LnRvdWNoMFsyXT09PXIuaWRlbnRpZmllcj91LnRvdWNoMFswXT1pOnUudG91Y2gxJiZ1LnRvdWNoMVsyXT09PXIuaWRlbnRpZmllciYmKHUudG91Y2gxWzBdPWkpO2lmKHI9dS50aGF0Ll9fem9vbSx1LnRvdWNoMSl7dmFyIGw9dS50b3VjaDBbMF0saD11LnRvdWNoMFsxXSxkPXUudG91Y2gxWzBdLHA9dS50b3VjaDFbMV0sdj0odj1kWzBdLWxbMF0pKnYrKHY9ZFsxXS1sWzFdKSp2LGc9KGc9cFswXS1oWzBdKSpnKyhnPXBbMV0taFsxXSkqZztyPV8ocixNYXRoLnNxcnQodi9nKSksaT1bKGxbMF0rZFswXSkvMiwobFsxXStkWzFdKS8yXSxhPVsoaFswXStwWzBdKS8yLChoWzFdK3BbMV0pLzJdfWVsc2V7aWYoIXUudG91Y2gwKXJldHVybjtpPXUudG91Y2gwWzBdLGE9dS50b3VjaDBbMV19dS56b29tKCJ0b3VjaCIsbyhiKHIsaSxhKSx1LmV4dGVudCxjKSl9ZnVuY3Rpb24gaygpe3ZhciBuLHIsaT13KHRoaXMsYXJndW1lbnRzKSxvPXQuZXZlbnQuY2hhbmdlZFRvdWNoZXMsYT1vLmxlbmd0aDtmb3IoZmIoKSxlJiZjbGVhclRpbWVvdXQoZSksZT1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZT1udWxsfSxwKSxuPTA7bjxhOysrbilyPW9bbl0saS50b3VjaDAmJmkudG91Y2gwWzJdPT09ci5pZGVudGlmaWVyP2RlbGV0ZSBpLnRvdWNoMDppLnRvdWNoMSYmaS50b3VjaDFbMl09PT1yLmlkZW50aWZpZXImJmRlbGV0ZSBpLnRvdWNoMTtpLnRvdWNoMSYmIWkudG91Y2gwJiYoaS50b3VjaDA9aS50b3VjaDEsZGVsZXRlIGkudG91Y2gxKSxpLnRvdWNoMD9pLnRvdWNoMFsxXT10aGlzLl9fem9vbS5pbnZlcnQoaS50b3VjaDBbMF0pOmkuZW5kKCl9cmV0dXJuIHkudHJhbnNmb3JtPWZ1bmN0aW9uKHQsbil7dmFyIGU9dC5zZWxlY3Rpb24/dC5zZWxlY3Rpb24oKTp0O2UucHJvcGVydHkoIl9fem9vbSIsaGIpLHQhPT1lP3godCxuKTplLmludGVycnVwdCgpLmVhY2goZnVuY3Rpb24oKXt3KHRoaXMsYXJndW1lbnRzKS5zdGFydCgpLnpvb20obnVsbCwiZnVuY3Rpb24iPT10eXBlb2Ygbj9uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpuKS5lbmQoKX0pfSx5LnNjYWxlQnk9ZnVuY3Rpb24odCxuKXt5LnNjYWxlVG8odCxmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fem9vbS5rKigiZnVuY3Rpb24iPT10eXBlb2Ygbj9uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpuKX0pfSx5LnNjYWxlVG89ZnVuY3Rpb24odCxuKXt5LnRyYW5zZm9ybSh0LGZ1bmN0aW9uKCl7dmFyIHQ9aS5hcHBseSh0aGlzLGFyZ3VtZW50cyksZT10aGlzLl9fem9vbSxyPW0odCksYT1lLmludmVydChyKSx1PSJmdW5jdGlvbiI9PXR5cGVvZiBuP24uYXBwbHkodGhpcyxhcmd1bWVudHMpOm47cmV0dXJuIG8oYihfKGUsdSkscixhKSx0LGMpfSl9LHkudHJhbnNsYXRlQnk9ZnVuY3Rpb24odCxuLGUpe3kudHJhbnNmb3JtKHQsZnVuY3Rpb24oKXtyZXR1cm4gbyh0aGlzLl9fem9vbS50cmFuc2xhdGUoImZ1bmN0aW9uIj09dHlwZW9mIG4/bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk6biwiZnVuY3Rpb24iPT10eXBlb2YgZT9lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTplKSxpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxjKX0pfSx5LnRyYW5zbGF0ZVRvPWZ1bmN0aW9uKHQsbixlKXt5LnRyYW5zZm9ybSh0LGZ1bmN0aW9uKCl7dmFyIHQ9aS5hcHBseSh0aGlzLGFyZ3VtZW50cykscj10aGlzLl9fem9vbSxhPW0odCk7cmV0dXJuIG8oYWIudHJhbnNsYXRlKGFbMF0sYVsxXSkuc2NhbGUoci5rKS50cmFuc2xhdGUoImZ1bmN0aW9uIj09dHlwZW9mIG4/LW4uYXBwbHkodGhpcyxhcmd1bWVudHMpOi1uLCJmdW5jdGlvbiI9PXR5cGVvZiBlPy1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTotZSksdCxjKX0pfSxNLnByb3RvdHlwZT17c3RhcnQ6ZnVuY3Rpb24oKXtyZXR1cm4gMT09Kyt0aGlzLmFjdGl2ZSYmKHRoaXMuaW5kZXg9aC5wdXNoKHRoaXMpLTEsdGhpcy5lbWl0KCJzdGFydCIpKSx0aGlzfSx6b29tOmZ1bmN0aW9uKHQsbil7cmV0dXJuIHRoaXMubW91c2UmJiJtb3VzZSIhPT10JiYodGhpcy5tb3VzZVsxXT1uLmludmVydCh0aGlzLm1vdXNlWzBdKSksdGhpcy50b3VjaDAmJiJ0b3VjaCIhPT10JiYodGhpcy50b3VjaDBbMV09bi5pbnZlcnQodGhpcy50b3VjaDBbMF0pKSx0aGlzLnRvdWNoMSYmInRvdWNoIiE9PXQmJih0aGlzLnRvdWNoMVsxXT1uLmludmVydCh0aGlzLnRvdWNoMVswXSkpLHRoaXMudGhhdC5fX3pvb209bix0aGlzLmVtaXQoInpvb20iKSx0aGlzfSxlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gMD09LS10aGlzLmFjdGl2ZSYmKGguc3BsaWNlKHRoaXMuaW5kZXgsMSksdGhpcy5pbmRleD0tMSx0aGlzLmVtaXQoImVuZCIpKSx0aGlzfSxlbWl0OmZ1bmN0aW9uKHQpe0N0KG5ldyBpYih5LHQsdGhpcy50aGF0Ll9fem9vbSksZC5hcHBseSxkLFt0LHRoaXMudGhhdCx0aGlzLmFyZ3NdKX19LHkud2hlZWxEZWx0YT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnJiKCt0KSx5KTphfSx5LmZpbHRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnJiKCEhdCkseSk6cn0seS50b3VjaGFibGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpyYighIXQpLHkpOnV9LHkuZXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cmIoW1srdFswXVswXSwrdFswXVsxXV0sWyt0WzFdWzBdLCt0WzFdWzFdXV0pLHkpOml9LHkuc2NhbGVFeHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGZbMF09K3RbMF0sZlsxXT0rdFsxXSx5KTpbZlswXSxmWzFdXX0seS50cmFuc2xhdGVFeHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGNbMF1bMF09K3RbMF1bMF0sY1sxXVswXT0rdFsxXVswXSxjWzBdWzFdPSt0WzBdWzFdLGNbMV1bMV09K3RbMV1bMV0seSk6W1tjWzBdWzBdLGNbMF1bMV1dLFtjWzFdWzBdLGNbMV1bMV1dXX0seS5jb25zdHJhaW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89dCx5KTpvfSx5LmR1cmF0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPSt0LHkpOnN9LHkuaW50ZXJwb2xhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9dCx5KTpsfSx5Lm9uPWZ1bmN0aW9uKCl7dmFyIHQ9ZC5vbi5hcHBseShkLGFyZ3VtZW50cyk7cmV0dXJuIHQ9PT1kP3k6dH0seS5jbGlja0Rpc3RhbmNlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhnPSh0PSt0KSp0LHkpOk1hdGguc3FydChnKX0seX0sdC56b29tVHJhbnNmb3JtPXViLHQuem9vbUlkZW50aXR5PWFiLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0pOwo8L3NjcmlwdD48c2NyaXB0PihmdW5jdGlvbihmKXtpZih0eXBlb2YgZXhwb3J0cz09PSJvYmplY3QiJiZ0eXBlb2YgbW9kdWxlIT09InVuZGVmaW5lZCIpbW9kdWxlLmV4cG9ydHM9ZigpO2Vsc2UgaWYodHlwZW9mIGRlZmluZT09PSJmdW5jdGlvbiImJmRlZmluZS5hbWQpZGVmaW5lKFtdLGYpO2Vsc2V7dmFyIGc7aWYodHlwZW9mIHdpbmRvdyE9PSJ1bmRlZmluZWQiKWc9d2luZG93O2Vsc2UgaWYodHlwZW9mIGdsb2JhbCE9PSJ1bmRlZmluZWQiKWc9Z2xvYmFsO2Vsc2UgaWYodHlwZW9mIHNlbGYhPT0idW5kZWZpbmVkIilnPXNlbGY7ZWxzZSBnPXRoaXM7Zy5ncmFwaGxpYj1mKCl9fSkoZnVuY3Rpb24oKXt2YXIgZGVmaW5lLG1vZHVsZSxleHBvcnRzO3JldHVybiBmdW5jdGlvbiBlKHQsbixyKXtmdW5jdGlvbiBzKG8sdSl7aWYoIW5bb10pe2lmKCF0W29dKXt2YXIgYT10eXBlb2YgcmVxdWlyZT09ImZ1bmN0aW9uIiYmcmVxdWlyZTtpZighdSYmYSlyZXR1cm4gYShvLCEwKTtpZihpKXJldHVybiBpKG8sITApOwp2YXIgZj1uZXcgRXJyb3IoIkNhbm5vdCBmaW5kIG1vZHVsZSAnIitvKyInIik7dGhyb3cgZi5jb2RlPSJNT0RVTEVfTk9UX0ZPVU5EIixmO312YXIgbD1uW29dPXtleHBvcnRzOnt9fTt0W29dWzBdLmNhbGwobC5leHBvcnRzLGZ1bmN0aW9uKGUpe3ZhciBuPXRbb11bMV1bZV07cmV0dXJuIHMobj9uOmUpfSxsLGwuZXhwb3J0cyxlLHQsbixyKX1yZXR1cm4gbltvXS5leHBvcnRzfXZhciBpPXR5cGVvZiByZXF1aXJlPT0iZnVuY3Rpb24iJiZyZXF1aXJlO2Zvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKXMocltvXSk7cmV0dXJuIHN9KHsxOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXt2YXIgbGliPXJlcXVpcmUoIi4vbGliIik7bW9kdWxlLmV4cG9ydHM9e0dyYXBoOmxpYi5HcmFwaCxqc29uOnJlcXVpcmUoIi4vbGliL2pzb24iKSxhbGc6cmVxdWlyZSgiLi9saWIvYWxnIiksdmVyc2lvbjpsaWIudmVyc2lvbn19LHsiLi9saWIiOjE3LCIuL2xpYi9hbGciOjgsIi4vbGliL2pzb24iOjE4fV0sCjI6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe3ZhciBfPXJlcXVpcmUoIi4uL2xvZGFzaCIpO21vZHVsZS5leHBvcnRzPWNvbXBvbmVudHM7ZnVuY3Rpb24gY29tcG9uZW50cyhnKXt2YXIgdmlzaXRlZD17fSxjbXB0cz1bXSxjbXB0O2Z1bmN0aW9uIGRmcyh2KXtpZihfLmhhcyh2aXNpdGVkLHYpKXJldHVybjt2aXNpdGVkW3ZdPXRydWU7Y21wdC5wdXNoKHYpO18uZWFjaChnLnN1Y2Nlc3NvcnModiksZGZzKTtfLmVhY2goZy5wcmVkZWNlc3NvcnModiksZGZzKX1fLmVhY2goZy5ub2RlcygpLGZ1bmN0aW9uKHYpe2NtcHQ9W107ZGZzKHYpO2lmKGNtcHQubGVuZ3RoKWNtcHRzLnB1c2goY21wdCl9KTtyZXR1cm4gY21wdHN9fSx7Ii4uL2xvZGFzaCI6MTl9XSwzOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXt2YXIgXz1yZXF1aXJlKCIuLi9sb2Rhc2giKTttb2R1bGUuZXhwb3J0cz1kZnM7ZnVuY3Rpb24gZGZzKGcsdnMsb3JkZXIpe2lmKCFfLmlzQXJyYXkodnMpKXZzPQpbdnNdO3ZhciBuYXZpZ2F0aW9uPShnLmlzRGlyZWN0ZWQoKT9nLnN1Y2Nlc3NvcnM6Zy5uZWlnaGJvcnMpLmJpbmQoZyk7dmFyIGFjYz1bXSx2aXNpdGVkPXt9O18uZWFjaCh2cyxmdW5jdGlvbih2KXtpZighZy5oYXNOb2RlKHYpKXRocm93IG5ldyBFcnJvcigiR3JhcGggZG9lcyBub3QgaGF2ZSBub2RlOiAiK3YpO2RvRGZzKGcsdixvcmRlcj09PSJwb3N0Iix2aXNpdGVkLG5hdmlnYXRpb24sYWNjKX0pO3JldHVybiBhY2N9ZnVuY3Rpb24gZG9EZnMoZyx2LHBvc3RvcmRlcix2aXNpdGVkLG5hdmlnYXRpb24sYWNjKXtpZighXy5oYXModmlzaXRlZCx2KSl7dmlzaXRlZFt2XT10cnVlO2lmKCFwb3N0b3JkZXIpYWNjLnB1c2godik7Xy5lYWNoKG5hdmlnYXRpb24odiksZnVuY3Rpb24odyl7ZG9EZnMoZyx3LHBvc3RvcmRlcix2aXNpdGVkLG5hdmlnYXRpb24sYWNjKX0pO2lmKHBvc3RvcmRlcilhY2MucHVzaCh2KX19fSx7Ii4uL2xvZGFzaCI6MTl9XSw0OltmdW5jdGlvbihyZXF1aXJlLAptb2R1bGUsZXhwb3J0cyl7dmFyIGRpamtzdHJhPXJlcXVpcmUoIi4vZGlqa3N0cmEiKSxfPXJlcXVpcmUoIi4uL2xvZGFzaCIpO21vZHVsZS5leHBvcnRzPWRpamtzdHJhQWxsO2Z1bmN0aW9uIGRpamtzdHJhQWxsKGcsd2VpZ2h0RnVuYyxlZGdlRnVuYyl7cmV0dXJuIF8udHJhbnNmb3JtKGcubm9kZXMoKSxmdW5jdGlvbihhY2Msdil7YWNjW3ZdPWRpamtzdHJhKGcsdix3ZWlnaHRGdW5jLGVkZ2VGdW5jKX0se30pfX0seyIuLi9sb2Rhc2giOjE5LCIuL2RpamtzdHJhIjo1fV0sNTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7dmFyIF89cmVxdWlyZSgiLi4vbG9kYXNoIiksUHJpb3JpdHlRdWV1ZT1yZXF1aXJlKCIuLi9kYXRhL3ByaW9yaXR5LXF1ZXVlIik7bW9kdWxlLmV4cG9ydHM9ZGlqa3N0cmE7dmFyIERFRkFVTFRfV0VJR0hUX0ZVTkM9Xy5jb25zdGFudCgxKTtmdW5jdGlvbiBkaWprc3RyYShnLHNvdXJjZSx3ZWlnaHRGbixlZGdlRm4pe3JldHVybiBydW5EaWprc3RyYShnLApTdHJpbmcoc291cmNlKSx3ZWlnaHRGbnx8REVGQVVMVF9XRUlHSFRfRlVOQyxlZGdlRm58fGZ1bmN0aW9uKHYpe3JldHVybiBnLm91dEVkZ2VzKHYpfSl9ZnVuY3Rpb24gcnVuRGlqa3N0cmEoZyxzb3VyY2Usd2VpZ2h0Rm4sZWRnZUZuKXt2YXIgcmVzdWx0cz17fSxwcT1uZXcgUHJpb3JpdHlRdWV1ZSx2LHZFbnRyeTt2YXIgdXBkYXRlTmVpZ2hib3JzPWZ1bmN0aW9uKGVkZ2Upe3ZhciB3PWVkZ2UudiE9PXY/ZWRnZS52OmVkZ2Uudyx3RW50cnk9cmVzdWx0c1t3XSx3ZWlnaHQ9d2VpZ2h0Rm4oZWRnZSksZGlzdGFuY2U9dkVudHJ5LmRpc3RhbmNlK3dlaWdodDtpZih3ZWlnaHQ8MCl0aHJvdyBuZXcgRXJyb3IoImRpamtzdHJhIGRvZXMgbm90IGFsbG93IG5lZ2F0aXZlIGVkZ2Ugd2VpZ2h0cy4gIisiQmFkIGVkZ2U6ICIrZWRnZSsiIFdlaWdodDogIit3ZWlnaHQpO2lmKGRpc3RhbmNlPHdFbnRyeS5kaXN0YW5jZSl7d0VudHJ5LmRpc3RhbmNlPWRpc3RhbmNlO3dFbnRyeS5wcmVkZWNlc3Nvcj0KdjtwcS5kZWNyZWFzZSh3LGRpc3RhbmNlKX19O2cubm9kZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKHYpe3ZhciBkaXN0YW5jZT12PT09c291cmNlPzA6TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO3Jlc3VsdHNbdl09e2Rpc3RhbmNlOmRpc3RhbmNlfTtwcS5hZGQodixkaXN0YW5jZSl9KTt3aGlsZShwcS5zaXplKCk+MCl7dj1wcS5yZW1vdmVNaW4oKTt2RW50cnk9cmVzdWx0c1t2XTtpZih2RW50cnkuZGlzdGFuY2U9PT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpYnJlYWs7ZWRnZUZuKHYpLmZvckVhY2godXBkYXRlTmVpZ2hib3JzKX1yZXR1cm4gcmVzdWx0c319LHsiLi4vZGF0YS9wcmlvcml0eS1xdWV1ZSI6MTUsIi4uL2xvZGFzaCI6MTl9XSw2OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXt2YXIgXz1yZXF1aXJlKCIuLi9sb2Rhc2giKSx0YXJqYW49cmVxdWlyZSgiLi90YXJqYW4iKTttb2R1bGUuZXhwb3J0cz1maW5kQ3ljbGVzO2Z1bmN0aW9uIGZpbmRDeWNsZXMoZyl7cmV0dXJuIF8uZmlsdGVyKHRhcmphbihnKSwKZnVuY3Rpb24oY21wdCl7cmV0dXJuIGNtcHQubGVuZ3RoPjF8fGNtcHQubGVuZ3RoPT09MSYmZy5oYXNFZGdlKGNtcHRbMF0sY21wdFswXSl9KX19LHsiLi4vbG9kYXNoIjoxOSwiLi90YXJqYW4iOjEzfV0sNzpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7dmFyIF89cmVxdWlyZSgiLi4vbG9kYXNoIik7bW9kdWxlLmV4cG9ydHM9ZmxveWRXYXJzaGFsbDt2YXIgREVGQVVMVF9XRUlHSFRfRlVOQz1fLmNvbnN0YW50KDEpO2Z1bmN0aW9uIGZsb3lkV2Fyc2hhbGwoZyx3ZWlnaHRGbixlZGdlRm4pe3JldHVybiBydW5GbG95ZFdhcnNoYWxsKGcsd2VpZ2h0Rm58fERFRkFVTFRfV0VJR0hUX0ZVTkMsZWRnZUZufHxmdW5jdGlvbih2KXtyZXR1cm4gZy5vdXRFZGdlcyh2KX0pfWZ1bmN0aW9uIHJ1bkZsb3lkV2Fyc2hhbGwoZyx3ZWlnaHRGbixlZGdlRm4pe3ZhciByZXN1bHRzPXt9LG5vZGVzPWcubm9kZXMoKTtub2Rlcy5mb3JFYWNoKGZ1bmN0aW9uKHYpe3Jlc3VsdHNbdl09Cnt9O3Jlc3VsdHNbdl1bdl09e2Rpc3RhbmNlOjB9O25vZGVzLmZvckVhY2goZnVuY3Rpb24odyl7aWYodiE9PXcpcmVzdWx0c1t2XVt3XT17ZGlzdGFuY2U6TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZfX0pO2VkZ2VGbih2KS5mb3JFYWNoKGZ1bmN0aW9uKGVkZ2Upe3ZhciB3PWVkZ2Uudj09PXY/ZWRnZS53OmVkZ2UudixkPXdlaWdodEZuKGVkZ2UpO3Jlc3VsdHNbdl1bd109e2Rpc3RhbmNlOmQscHJlZGVjZXNzb3I6dn19KX0pO25vZGVzLmZvckVhY2goZnVuY3Rpb24oayl7dmFyIHJvd0s9cmVzdWx0c1trXTtub2Rlcy5mb3JFYWNoKGZ1bmN0aW9uKGkpe3ZhciByb3dJPXJlc3VsdHNbaV07bm9kZXMuZm9yRWFjaChmdW5jdGlvbihqKXt2YXIgaWs9cm93SVtrXTt2YXIga2o9cm93S1tqXTt2YXIgaWo9cm93SVtqXTt2YXIgYWx0RGlzdGFuY2U9aWsuZGlzdGFuY2Ura2ouZGlzdGFuY2U7aWYoYWx0RGlzdGFuY2U8aWouZGlzdGFuY2Upe2lqLmRpc3RhbmNlPWFsdERpc3RhbmNlO2lqLnByZWRlY2Vzc29yPQprai5wcmVkZWNlc3Nvcn19KX0pfSk7cmV0dXJuIHJlc3VsdHN9fSx7Ii4uL2xvZGFzaCI6MTl9XSw4OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXttb2R1bGUuZXhwb3J0cz17Y29tcG9uZW50czpyZXF1aXJlKCIuL2NvbXBvbmVudHMiKSxkaWprc3RyYTpyZXF1aXJlKCIuL2RpamtzdHJhIiksZGlqa3N0cmFBbGw6cmVxdWlyZSgiLi9kaWprc3RyYS1hbGwiKSxmaW5kQ3ljbGVzOnJlcXVpcmUoIi4vZmluZC1jeWNsZXMiKSxmbG95ZFdhcnNoYWxsOnJlcXVpcmUoIi4vZmxveWQtd2Fyc2hhbGwiKSxpc0FjeWNsaWM6cmVxdWlyZSgiLi9pcy1hY3ljbGljIikscG9zdG9yZGVyOnJlcXVpcmUoIi4vcG9zdG9yZGVyIikscHJlb3JkZXI6cmVxdWlyZSgiLi9wcmVvcmRlciIpLHByaW06cmVxdWlyZSgiLi9wcmltIiksdGFyamFuOnJlcXVpcmUoIi4vdGFyamFuIiksdG9wc29ydDpyZXF1aXJlKCIuL3RvcHNvcnQiKX19LHsiLi9jb21wb25lbnRzIjoyLCIuL2RpamtzdHJhIjo1LAoiLi9kaWprc3RyYS1hbGwiOjQsIi4vZmluZC1jeWNsZXMiOjYsIi4vZmxveWQtd2Fyc2hhbGwiOjcsIi4vaXMtYWN5Y2xpYyI6OSwiLi9wb3N0b3JkZXIiOjEwLCIuL3ByZW9yZGVyIjoxMSwiLi9wcmltIjoxMiwiLi90YXJqYW4iOjEzLCIuL3RvcHNvcnQiOjE0fV0sOTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7dmFyIHRvcHNvcnQ9cmVxdWlyZSgiLi90b3Bzb3J0Iik7bW9kdWxlLmV4cG9ydHM9aXNBY3ljbGljO2Z1bmN0aW9uIGlzQWN5Y2xpYyhnKXt0cnl7dG9wc29ydChnKX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2YgdG9wc29ydC5DeWNsZUV4Y2VwdGlvbilyZXR1cm4gZmFsc2U7dGhyb3cgZTt9cmV0dXJuIHRydWV9fSx7Ii4vdG9wc29ydCI6MTR9XSwxMDpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7dmFyIGRmcz1yZXF1aXJlKCIuL2RmcyIpO21vZHVsZS5leHBvcnRzPXBvc3RvcmRlcjtmdW5jdGlvbiBwb3N0b3JkZXIoZyx2cyl7cmV0dXJuIGRmcyhnLAp2cywicG9zdCIpfX0seyIuL2RmcyI6M31dLDExOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXt2YXIgZGZzPXJlcXVpcmUoIi4vZGZzIik7bW9kdWxlLmV4cG9ydHM9cHJlb3JkZXI7ZnVuY3Rpb24gcHJlb3JkZXIoZyx2cyl7cmV0dXJuIGRmcyhnLHZzLCJwcmUiKX19LHsiLi9kZnMiOjN9XSwxMjpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7dmFyIF89cmVxdWlyZSgiLi4vbG9kYXNoIiksR3JhcGg9cmVxdWlyZSgiLi4vZ3JhcGgiKSxQcmlvcml0eVF1ZXVlPXJlcXVpcmUoIi4uL2RhdGEvcHJpb3JpdHktcXVldWUiKTttb2R1bGUuZXhwb3J0cz1wcmltO2Z1bmN0aW9uIHByaW0oZyx3ZWlnaHRGdW5jKXt2YXIgcmVzdWx0PW5ldyBHcmFwaCxwYXJlbnRzPXt9LHBxPW5ldyBQcmlvcml0eVF1ZXVlLHY7ZnVuY3Rpb24gdXBkYXRlTmVpZ2hib3JzKGVkZ2Upe3ZhciB3PWVkZ2Uudj09PXY/ZWRnZS53OmVkZ2Uudixwcmk9cHEucHJpb3JpdHkodyk7aWYocHJpIT09CnVuZGVmaW5lZCl7dmFyIGVkZ2VXZWlnaHQ9d2VpZ2h0RnVuYyhlZGdlKTtpZihlZGdlV2VpZ2h0PHByaSl7cGFyZW50c1t3XT12O3BxLmRlY3JlYXNlKHcsZWRnZVdlaWdodCl9fX1pZihnLm5vZGVDb3VudCgpPT09MClyZXR1cm4gcmVzdWx0O18uZWFjaChnLm5vZGVzKCksZnVuY3Rpb24odil7cHEuYWRkKHYsTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKTtyZXN1bHQuc2V0Tm9kZSh2KX0pO3BxLmRlY3JlYXNlKGcubm9kZXMoKVswXSwwKTt2YXIgaW5pdD1mYWxzZTt3aGlsZShwcS5zaXplKCk+MCl7dj1wcS5yZW1vdmVNaW4oKTtpZihfLmhhcyhwYXJlbnRzLHYpKXJlc3VsdC5zZXRFZGdlKHYscGFyZW50c1t2XSk7ZWxzZSBpZihpbml0KXRocm93IG5ldyBFcnJvcigiSW5wdXQgZ3JhcGggaXMgbm90IGNvbm5lY3RlZDogIitnKTtlbHNlIGluaXQ9dHJ1ZTtnLm5vZGVFZGdlcyh2KS5mb3JFYWNoKHVwZGF0ZU5laWdoYm9ycyl9cmV0dXJuIHJlc3VsdH19LHsiLi4vZGF0YS9wcmlvcml0eS1xdWV1ZSI6MTUsCiIuLi9ncmFwaCI6MTYsIi4uL2xvZGFzaCI6MTl9XSwxMzpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7dmFyIF89cmVxdWlyZSgiLi4vbG9kYXNoIik7bW9kdWxlLmV4cG9ydHM9dGFyamFuO2Z1bmN0aW9uIHRhcmphbihnKXt2YXIgaW5kZXg9MCxzdGFjaz1bXSx2aXNpdGVkPXt9LHJlc3VsdHM9W107ZnVuY3Rpb24gZGZzKHYpe3ZhciBlbnRyeT12aXNpdGVkW3ZdPXtvblN0YWNrOnRydWUsbG93bGluazppbmRleCxpbmRleDppbmRleCsrfTtzdGFjay5wdXNoKHYpO2cuc3VjY2Vzc29ycyh2KS5mb3JFYWNoKGZ1bmN0aW9uKHcpe2lmKCFfLmhhcyh2aXNpdGVkLHcpKXtkZnModyk7ZW50cnkubG93bGluaz1NYXRoLm1pbihlbnRyeS5sb3dsaW5rLHZpc2l0ZWRbd10ubG93bGluayl9ZWxzZSBpZih2aXNpdGVkW3ddLm9uU3RhY2spZW50cnkubG93bGluaz1NYXRoLm1pbihlbnRyeS5sb3dsaW5rLHZpc2l0ZWRbd10uaW5kZXgpfSk7aWYoZW50cnkubG93bGluaz09PWVudHJ5LmluZGV4KXt2YXIgY21wdD0KW10sdztkb3t3PXN0YWNrLnBvcCgpO3Zpc2l0ZWRbd10ub25TdGFjaz1mYWxzZTtjbXB0LnB1c2godyl9d2hpbGUodiE9PXcpO3Jlc3VsdHMucHVzaChjbXB0KX19Zy5ub2RlcygpLmZvckVhY2goZnVuY3Rpb24odil7aWYoIV8uaGFzKHZpc2l0ZWQsdikpZGZzKHYpfSk7cmV0dXJuIHJlc3VsdHN9fSx7Ii4uL2xvZGFzaCI6MTl9XSwxNDpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7dmFyIF89cmVxdWlyZSgiLi4vbG9kYXNoIik7bW9kdWxlLmV4cG9ydHM9dG9wc29ydDt0b3Bzb3J0LkN5Y2xlRXhjZXB0aW9uPUN5Y2xlRXhjZXB0aW9uO2Z1bmN0aW9uIHRvcHNvcnQoZyl7dmFyIHZpc2l0ZWQ9e30sc3RhY2s9e30scmVzdWx0cz1bXTtmdW5jdGlvbiB2aXNpdChub2RlKXtpZihfLmhhcyhzdGFjayxub2RlKSl0aHJvdyBuZXcgQ3ljbGVFeGNlcHRpb247aWYoIV8uaGFzKHZpc2l0ZWQsbm9kZSkpe3N0YWNrW25vZGVdPXRydWU7dmlzaXRlZFtub2RlXT10cnVlO18uZWFjaChnLnByZWRlY2Vzc29ycyhub2RlKSwKdmlzaXQpO2RlbGV0ZSBzdGFja1tub2RlXTtyZXN1bHRzLnB1c2gobm9kZSl9fV8uZWFjaChnLnNpbmtzKCksdmlzaXQpO2lmKF8uc2l6ZSh2aXNpdGVkKSE9PWcubm9kZUNvdW50KCkpdGhyb3cgbmV3IEN5Y2xlRXhjZXB0aW9uO3JldHVybiByZXN1bHRzfWZ1bmN0aW9uIEN5Y2xlRXhjZXB0aW9uKCl7fX0seyIuLi9sb2Rhc2giOjE5fV0sMTU6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe3ZhciBfPXJlcXVpcmUoIi4uL2xvZGFzaCIpO21vZHVsZS5leHBvcnRzPVByaW9yaXR5UXVldWU7ZnVuY3Rpb24gUHJpb3JpdHlRdWV1ZSgpe3RoaXMuX2Fycj1bXTt0aGlzLl9rZXlJbmRpY2VzPXt9fVByaW9yaXR5UXVldWUucHJvdG90eXBlLnNpemU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXJyLmxlbmd0aH07UHJpb3JpdHlRdWV1ZS5wcm90b3R5cGUua2V5cz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcnIubWFwKGZ1bmN0aW9uKHgpe3JldHVybiB4LmtleX0pfTtQcmlvcml0eVF1ZXVlLnByb3RvdHlwZS5oYXM9CmZ1bmN0aW9uKGtleSl7cmV0dXJuIF8uaGFzKHRoaXMuX2tleUluZGljZXMsa2V5KX07UHJpb3JpdHlRdWV1ZS5wcm90b3R5cGUucHJpb3JpdHk9ZnVuY3Rpb24oa2V5KXt2YXIgaW5kZXg9dGhpcy5fa2V5SW5kaWNlc1trZXldO2lmKGluZGV4IT09dW5kZWZpbmVkKXJldHVybiB0aGlzLl9hcnJbaW5kZXhdLnByaW9yaXR5fTtQcmlvcml0eVF1ZXVlLnByb3RvdHlwZS5taW49ZnVuY3Rpb24oKXtpZih0aGlzLnNpemUoKT09PTApdGhyb3cgbmV3IEVycm9yKCJRdWV1ZSB1bmRlcmZsb3ciKTtyZXR1cm4gdGhpcy5fYXJyWzBdLmtleX07UHJpb3JpdHlRdWV1ZS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGtleSxwcmlvcml0eSl7dmFyIGtleUluZGljZXM9dGhpcy5fa2V5SW5kaWNlcztrZXk9U3RyaW5nKGtleSk7aWYoIV8uaGFzKGtleUluZGljZXMsa2V5KSl7dmFyIGFycj10aGlzLl9hcnI7dmFyIGluZGV4PWFyci5sZW5ndGg7a2V5SW5kaWNlc1trZXldPWluZGV4O2Fyci5wdXNoKHtrZXk6a2V5LApwcmlvcml0eTpwcmlvcml0eX0pO3RoaXMuX2RlY3JlYXNlKGluZGV4KTtyZXR1cm4gdHJ1ZX1yZXR1cm4gZmFsc2V9O1ByaW9yaXR5UXVldWUucHJvdG90eXBlLnJlbW92ZU1pbj1mdW5jdGlvbigpe3RoaXMuX3N3YXAoMCx0aGlzLl9hcnIubGVuZ3RoLTEpO3ZhciBtaW49dGhpcy5fYXJyLnBvcCgpO2RlbGV0ZSB0aGlzLl9rZXlJbmRpY2VzW21pbi5rZXldO3RoaXMuX2hlYXBpZnkoMCk7cmV0dXJuIG1pbi5rZXl9O1ByaW9yaXR5UXVldWUucHJvdG90eXBlLmRlY3JlYXNlPWZ1bmN0aW9uKGtleSxwcmlvcml0eSl7dmFyIGluZGV4PXRoaXMuX2tleUluZGljZXNba2V5XTtpZihwcmlvcml0eT50aGlzLl9hcnJbaW5kZXhdLnByaW9yaXR5KXRocm93IG5ldyBFcnJvcigiTmV3IHByaW9yaXR5IGlzIGdyZWF0ZXIgdGhhbiBjdXJyZW50IHByaW9yaXR5LiAiKyJLZXk6ICIra2V5KyIgT2xkOiAiK3RoaXMuX2FycltpbmRleF0ucHJpb3JpdHkrIiBOZXc6ICIrcHJpb3JpdHkpO3RoaXMuX2FycltpbmRleF0ucHJpb3JpdHk9CnByaW9yaXR5O3RoaXMuX2RlY3JlYXNlKGluZGV4KX07UHJpb3JpdHlRdWV1ZS5wcm90b3R5cGUuX2hlYXBpZnk9ZnVuY3Rpb24oaSl7dmFyIGFycj10aGlzLl9hcnI7dmFyIGw9MippLHI9bCsxLGxhcmdlc3Q9aTtpZihsPGFyci5sZW5ndGgpe2xhcmdlc3Q9YXJyW2xdLnByaW9yaXR5PGFycltsYXJnZXN0XS5wcmlvcml0eT9sOmxhcmdlc3Q7aWYocjxhcnIubGVuZ3RoKWxhcmdlc3Q9YXJyW3JdLnByaW9yaXR5PGFycltsYXJnZXN0XS5wcmlvcml0eT9yOmxhcmdlc3Q7aWYobGFyZ2VzdCE9PWkpe3RoaXMuX3N3YXAoaSxsYXJnZXN0KTt0aGlzLl9oZWFwaWZ5KGxhcmdlc3QpfX19O1ByaW9yaXR5UXVldWUucHJvdG90eXBlLl9kZWNyZWFzZT1mdW5jdGlvbihpbmRleCl7dmFyIGFycj10aGlzLl9hcnI7dmFyIHByaW9yaXR5PWFycltpbmRleF0ucHJpb3JpdHk7dmFyIHBhcmVudDt3aGlsZShpbmRleCE9PTApe3BhcmVudD1pbmRleD4+MTtpZihhcnJbcGFyZW50XS5wcmlvcml0eTxwcmlvcml0eSlicmVhazsKdGhpcy5fc3dhcChpbmRleCxwYXJlbnQpO2luZGV4PXBhcmVudH19O1ByaW9yaXR5UXVldWUucHJvdG90eXBlLl9zd2FwPWZ1bmN0aW9uKGksail7dmFyIGFycj10aGlzLl9hcnI7dmFyIGtleUluZGljZXM9dGhpcy5fa2V5SW5kaWNlczt2YXIgb3JpZ0Fyckk9YXJyW2ldO3ZhciBvcmlnQXJySj1hcnJbal07YXJyW2ldPW9yaWdBcnJKO2FycltqXT1vcmlnQXJySTtrZXlJbmRpY2VzW29yaWdBcnJKLmtleV09aTtrZXlJbmRpY2VzW29yaWdBcnJJLmtleV09an19LHsiLi4vbG9kYXNoIjoxOX1dLDE2OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXt2YXIgXz1yZXF1aXJlKCIuL2xvZGFzaCIpO21vZHVsZS5leHBvcnRzPUdyYXBoO3ZhciBERUZBVUxUX0VER0VfTkFNRT0iXHgwMCIsR1JBUEhfTk9ERT0iXHgwMCIsRURHRV9LRVlfREVMSU09Ilx1MDAwMSI7ZnVuY3Rpb24gR3JhcGgob3B0cyl7dGhpcy5faXNEaXJlY3RlZD1fLmhhcyhvcHRzLCJkaXJlY3RlZCIpP29wdHMuZGlyZWN0ZWQ6CnRydWU7dGhpcy5faXNNdWx0aWdyYXBoPV8uaGFzKG9wdHMsIm11bHRpZ3JhcGgiKT9vcHRzLm11bHRpZ3JhcGg6ZmFsc2U7dGhpcy5faXNDb21wb3VuZD1fLmhhcyhvcHRzLCJjb21wb3VuZCIpP29wdHMuY29tcG91bmQ6ZmFsc2U7dGhpcy5fbGFiZWw9dW5kZWZpbmVkO3RoaXMuX2RlZmF1bHROb2RlTGFiZWxGbj1fLmNvbnN0YW50KHVuZGVmaW5lZCk7dGhpcy5fZGVmYXVsdEVkZ2VMYWJlbEZuPV8uY29uc3RhbnQodW5kZWZpbmVkKTt0aGlzLl9ub2Rlcz17fTtpZih0aGlzLl9pc0NvbXBvdW5kKXt0aGlzLl9wYXJlbnQ9e307dGhpcy5fY2hpbGRyZW49e307dGhpcy5fY2hpbGRyZW5bR1JBUEhfTk9ERV09e319dGhpcy5faW49e307dGhpcy5fcHJlZHM9e307dGhpcy5fb3V0PXt9O3RoaXMuX3N1Y3M9e307dGhpcy5fZWRnZU9ianM9e307dGhpcy5fZWRnZUxhYmVscz17fX1HcmFwaC5wcm90b3R5cGUuX25vZGVDb3VudD0wO0dyYXBoLnByb3RvdHlwZS5fZWRnZUNvdW50PTA7R3JhcGgucHJvdG90eXBlLmlzRGlyZWN0ZWQ9CmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lzRGlyZWN0ZWR9O0dyYXBoLnByb3RvdHlwZS5pc011bHRpZ3JhcGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faXNNdWx0aWdyYXBofTtHcmFwaC5wcm90b3R5cGUuaXNDb21wb3VuZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9pc0NvbXBvdW5kfTtHcmFwaC5wcm90b3R5cGUuc2V0R3JhcGg9ZnVuY3Rpb24obGFiZWwpe3RoaXMuX2xhYmVsPWxhYmVsO3JldHVybiB0aGlzfTtHcmFwaC5wcm90b3R5cGUuZ3JhcGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbGFiZWx9O0dyYXBoLnByb3RvdHlwZS5zZXREZWZhdWx0Tm9kZUxhYmVsPWZ1bmN0aW9uKG5ld0RlZmF1bHQpe2lmKCFfLmlzRnVuY3Rpb24obmV3RGVmYXVsdCkpbmV3RGVmYXVsdD1fLmNvbnN0YW50KG5ld0RlZmF1bHQpO3RoaXMuX2RlZmF1bHROb2RlTGFiZWxGbj1uZXdEZWZhdWx0O3JldHVybiB0aGlzfTtHcmFwaC5wcm90b3R5cGUubm9kZUNvdW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX25vZGVDb3VudH07CkdyYXBoLnByb3RvdHlwZS5ub2Rlcz1mdW5jdGlvbigpe3JldHVybiBfLmtleXModGhpcy5fbm9kZXMpfTtHcmFwaC5wcm90b3R5cGUuc291cmNlcz1mdW5jdGlvbigpe3ZhciBzZWxmPXRoaXM7cmV0dXJuIF8uZmlsdGVyKHRoaXMubm9kZXMoKSxmdW5jdGlvbih2KXtyZXR1cm4gXy5pc0VtcHR5KHNlbGYuX2luW3ZdKX0pfTtHcmFwaC5wcm90b3R5cGUuc2lua3M9ZnVuY3Rpb24oKXt2YXIgc2VsZj10aGlzO3JldHVybiBfLmZpbHRlcih0aGlzLm5vZGVzKCksZnVuY3Rpb24odil7cmV0dXJuIF8uaXNFbXB0eShzZWxmLl9vdXRbdl0pfSl9O0dyYXBoLnByb3RvdHlwZS5zZXROb2Rlcz1mdW5jdGlvbih2cyx2YWx1ZSl7dmFyIGFyZ3M9YXJndW1lbnRzO3ZhciBzZWxmPXRoaXM7Xy5lYWNoKHZzLGZ1bmN0aW9uKHYpe2lmKGFyZ3MubGVuZ3RoPjEpc2VsZi5zZXROb2RlKHYsdmFsdWUpO2Vsc2Ugc2VsZi5zZXROb2RlKHYpfSk7cmV0dXJuIHRoaXN9O0dyYXBoLnByb3RvdHlwZS5zZXROb2RlPQpmdW5jdGlvbih2LHZhbHVlKXtpZihfLmhhcyh0aGlzLl9ub2Rlcyx2KSl7aWYoYXJndW1lbnRzLmxlbmd0aD4xKXRoaXMuX25vZGVzW3ZdPXZhbHVlO3JldHVybiB0aGlzfXRoaXMuX25vZGVzW3ZdPWFyZ3VtZW50cy5sZW5ndGg+MT92YWx1ZTp0aGlzLl9kZWZhdWx0Tm9kZUxhYmVsRm4odik7aWYodGhpcy5faXNDb21wb3VuZCl7dGhpcy5fcGFyZW50W3ZdPUdSQVBIX05PREU7dGhpcy5fY2hpbGRyZW5bdl09e307dGhpcy5fY2hpbGRyZW5bR1JBUEhfTk9ERV1bdl09dHJ1ZX10aGlzLl9pblt2XT17fTt0aGlzLl9wcmVkc1t2XT17fTt0aGlzLl9vdXRbdl09e307dGhpcy5fc3Vjc1t2XT17fTsrK3RoaXMuX25vZGVDb3VudDtyZXR1cm4gdGhpc307R3JhcGgucHJvdG90eXBlLm5vZGU9ZnVuY3Rpb24odil7cmV0dXJuIHRoaXMuX25vZGVzW3ZdfTtHcmFwaC5wcm90b3R5cGUuaGFzTm9kZT1mdW5jdGlvbih2KXtyZXR1cm4gXy5oYXModGhpcy5fbm9kZXMsdil9O0dyYXBoLnByb3RvdHlwZS5yZW1vdmVOb2RlPQpmdW5jdGlvbih2KXt2YXIgc2VsZj10aGlzO2lmKF8uaGFzKHRoaXMuX25vZGVzLHYpKXt2YXIgcmVtb3ZlRWRnZT1mdW5jdGlvbihlKXtzZWxmLnJlbW92ZUVkZ2Uoc2VsZi5fZWRnZU9ianNbZV0pfTtkZWxldGUgdGhpcy5fbm9kZXNbdl07aWYodGhpcy5faXNDb21wb3VuZCl7dGhpcy5fcmVtb3ZlRnJvbVBhcmVudHNDaGlsZExpc3Qodik7ZGVsZXRlIHRoaXMuX3BhcmVudFt2XTtfLmVhY2godGhpcy5jaGlsZHJlbih2KSxmdW5jdGlvbihjaGlsZCl7c2VsZi5zZXRQYXJlbnQoY2hpbGQpfSk7ZGVsZXRlIHRoaXMuX2NoaWxkcmVuW3ZdfV8uZWFjaChfLmtleXModGhpcy5faW5bdl0pLHJlbW92ZUVkZ2UpO2RlbGV0ZSB0aGlzLl9pblt2XTtkZWxldGUgdGhpcy5fcHJlZHNbdl07Xy5lYWNoKF8ua2V5cyh0aGlzLl9vdXRbdl0pLHJlbW92ZUVkZ2UpO2RlbGV0ZSB0aGlzLl9vdXRbdl07ZGVsZXRlIHRoaXMuX3N1Y3Nbdl07LS10aGlzLl9ub2RlQ291bnR9cmV0dXJuIHRoaXN9O0dyYXBoLnByb3RvdHlwZS5zZXRQYXJlbnQ9CmZ1bmN0aW9uKHYscGFyZW50KXtpZighdGhpcy5faXNDb21wb3VuZCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBzZXQgcGFyZW50IGluIGEgbm9uLWNvbXBvdW5kIGdyYXBoIik7aWYoXy5pc1VuZGVmaW5lZChwYXJlbnQpKXBhcmVudD1HUkFQSF9OT0RFO2Vsc2V7cGFyZW50Kz0iIjtmb3IodmFyIGFuY2VzdG9yPXBhcmVudDshXy5pc1VuZGVmaW5lZChhbmNlc3Rvcik7YW5jZXN0b3I9dGhpcy5wYXJlbnQoYW5jZXN0b3IpKWlmKGFuY2VzdG9yPT09dil0aHJvdyBuZXcgRXJyb3IoIlNldHRpbmcgIitwYXJlbnQrIiBhcyBwYXJlbnQgb2YgIit2KyIgd291bGQgY3JlYXRlIGEgY3ljbGUiKTt0aGlzLnNldE5vZGUocGFyZW50KX10aGlzLnNldE5vZGUodik7dGhpcy5fcmVtb3ZlRnJvbVBhcmVudHNDaGlsZExpc3Qodik7dGhpcy5fcGFyZW50W3ZdPXBhcmVudDt0aGlzLl9jaGlsZHJlbltwYXJlbnRdW3ZdPXRydWU7cmV0dXJuIHRoaXN9O0dyYXBoLnByb3RvdHlwZS5fcmVtb3ZlRnJvbVBhcmVudHNDaGlsZExpc3Q9CmZ1bmN0aW9uKHYpe2RlbGV0ZSB0aGlzLl9jaGlsZHJlblt0aGlzLl9wYXJlbnRbdl1dW3ZdfTtHcmFwaC5wcm90b3R5cGUucGFyZW50PWZ1bmN0aW9uKHYpe2lmKHRoaXMuX2lzQ29tcG91bmQpe3ZhciBwYXJlbnQ9dGhpcy5fcGFyZW50W3ZdO2lmKHBhcmVudCE9PUdSQVBIX05PREUpcmV0dXJuIHBhcmVudH19O0dyYXBoLnByb3RvdHlwZS5jaGlsZHJlbj1mdW5jdGlvbih2KXtpZihfLmlzVW5kZWZpbmVkKHYpKXY9R1JBUEhfTk9ERTtpZih0aGlzLl9pc0NvbXBvdW5kKXt2YXIgY2hpbGRyZW49dGhpcy5fY2hpbGRyZW5bdl07aWYoY2hpbGRyZW4pcmV0dXJuIF8ua2V5cyhjaGlsZHJlbil9ZWxzZSBpZih2PT09R1JBUEhfTk9ERSlyZXR1cm4gdGhpcy5ub2RlcygpO2Vsc2UgaWYodGhpcy5oYXNOb2RlKHYpKXJldHVybltdfTtHcmFwaC5wcm90b3R5cGUucHJlZGVjZXNzb3JzPWZ1bmN0aW9uKHYpe3ZhciBwcmVkc1Y9dGhpcy5fcHJlZHNbdl07aWYocHJlZHNWKXJldHVybiBfLmtleXMocHJlZHNWKX07CkdyYXBoLnByb3RvdHlwZS5zdWNjZXNzb3JzPWZ1bmN0aW9uKHYpe3ZhciBzdWNzVj10aGlzLl9zdWNzW3ZdO2lmKHN1Y3NWKXJldHVybiBfLmtleXMoc3Vjc1YpfTtHcmFwaC5wcm90b3R5cGUubmVpZ2hib3JzPWZ1bmN0aW9uKHYpe3ZhciBwcmVkcz10aGlzLnByZWRlY2Vzc29ycyh2KTtpZihwcmVkcylyZXR1cm4gXy51bmlvbihwcmVkcyx0aGlzLnN1Y2Nlc3NvcnModikpfTtHcmFwaC5wcm90b3R5cGUuaXNMZWFmPWZ1bmN0aW9uKHYpe3ZhciBuZWlnaGJvcnM7aWYodGhpcy5pc0RpcmVjdGVkKCkpbmVpZ2hib3JzPXRoaXMuc3VjY2Vzc29ycyh2KTtlbHNlIG5laWdoYm9ycz10aGlzLm5laWdoYm9ycyh2KTtyZXR1cm4gbmVpZ2hib3JzLmxlbmd0aD09PTB9O0dyYXBoLnByb3RvdHlwZS5maWx0ZXJOb2Rlcz1mdW5jdGlvbihmaWx0ZXIpe3ZhciBjb3B5PW5ldyB0aGlzLmNvbnN0cnVjdG9yKHtkaXJlY3RlZDp0aGlzLl9pc0RpcmVjdGVkLG11bHRpZ3JhcGg6dGhpcy5faXNNdWx0aWdyYXBoLApjb21wb3VuZDp0aGlzLl9pc0NvbXBvdW5kfSk7Y29weS5zZXRHcmFwaCh0aGlzLmdyYXBoKCkpO3ZhciBzZWxmPXRoaXM7Xy5lYWNoKHRoaXMuX25vZGVzLGZ1bmN0aW9uKHZhbHVlLHYpe2lmKGZpbHRlcih2KSljb3B5LnNldE5vZGUodix2YWx1ZSl9KTtfLmVhY2godGhpcy5fZWRnZU9ianMsZnVuY3Rpb24oZSl7aWYoY29weS5oYXNOb2RlKGUudikmJmNvcHkuaGFzTm9kZShlLncpKWNvcHkuc2V0RWRnZShlLHNlbGYuZWRnZShlKSl9KTt2YXIgcGFyZW50cz17fTtmdW5jdGlvbiBmaW5kUGFyZW50KHYpe3ZhciBwYXJlbnQ9c2VsZi5wYXJlbnQodik7aWYocGFyZW50PT09dW5kZWZpbmVkfHxjb3B5Lmhhc05vZGUocGFyZW50KSl7cGFyZW50c1t2XT1wYXJlbnQ7cmV0dXJuIHBhcmVudH1lbHNlIGlmKHBhcmVudCBpbiBwYXJlbnRzKXJldHVybiBwYXJlbnRzW3BhcmVudF07ZWxzZSByZXR1cm4gZmluZFBhcmVudChwYXJlbnQpfWlmKHRoaXMuX2lzQ29tcG91bmQpXy5lYWNoKGNvcHkubm9kZXMoKSwKZnVuY3Rpb24odil7Y29weS5zZXRQYXJlbnQodixmaW5kUGFyZW50KHYpKX0pO3JldHVybiBjb3B5fTtHcmFwaC5wcm90b3R5cGUuc2V0RGVmYXVsdEVkZ2VMYWJlbD1mdW5jdGlvbihuZXdEZWZhdWx0KXtpZighXy5pc0Z1bmN0aW9uKG5ld0RlZmF1bHQpKW5ld0RlZmF1bHQ9Xy5jb25zdGFudChuZXdEZWZhdWx0KTt0aGlzLl9kZWZhdWx0RWRnZUxhYmVsRm49bmV3RGVmYXVsdDtyZXR1cm4gdGhpc307R3JhcGgucHJvdG90eXBlLmVkZ2VDb3VudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9lZGdlQ291bnR9O0dyYXBoLnByb3RvdHlwZS5lZGdlcz1mdW5jdGlvbigpe3JldHVybiBfLnZhbHVlcyh0aGlzLl9lZGdlT2Jqcyl9O0dyYXBoLnByb3RvdHlwZS5zZXRQYXRoPWZ1bmN0aW9uKHZzLHZhbHVlKXt2YXIgc2VsZj10aGlzLGFyZ3M9YXJndW1lbnRzO18ucmVkdWNlKHZzLGZ1bmN0aW9uKHYsdyl7aWYoYXJncy5sZW5ndGg+MSlzZWxmLnNldEVkZ2Uodix3LHZhbHVlKTtlbHNlIHNlbGYuc2V0RWRnZSh2LAp3KTtyZXR1cm4gd30pO3JldHVybiB0aGlzfTtHcmFwaC5wcm90b3R5cGUuc2V0RWRnZT1mdW5jdGlvbigpe3ZhciB2LHcsbmFtZSx2YWx1ZSx2YWx1ZVNwZWNpZmllZD1mYWxzZSxhcmcwPWFyZ3VtZW50c1swXTtpZih0eXBlb2YgYXJnMD09PSJvYmplY3QiJiZhcmcwIT09bnVsbCYmInYiaW4gYXJnMCl7dj1hcmcwLnY7dz1hcmcwLnc7bmFtZT1hcmcwLm5hbWU7aWYoYXJndW1lbnRzLmxlbmd0aD09PTIpe3ZhbHVlPWFyZ3VtZW50c1sxXTt2YWx1ZVNwZWNpZmllZD10cnVlfX1lbHNle3Y9YXJnMDt3PWFyZ3VtZW50c1sxXTtuYW1lPWFyZ3VtZW50c1szXTtpZihhcmd1bWVudHMubGVuZ3RoPjIpe3ZhbHVlPWFyZ3VtZW50c1syXTt2YWx1ZVNwZWNpZmllZD10cnVlfX12PSIiK3Y7dz0iIit3O2lmKCFfLmlzVW5kZWZpbmVkKG5hbWUpKW5hbWU9IiIrbmFtZTt2YXIgZT1lZGdlQXJnc1RvSWQodGhpcy5faXNEaXJlY3RlZCx2LHcsbmFtZSk7aWYoXy5oYXModGhpcy5fZWRnZUxhYmVscywKZSkpe2lmKHZhbHVlU3BlY2lmaWVkKXRoaXMuX2VkZ2VMYWJlbHNbZV09dmFsdWU7cmV0dXJuIHRoaXN9aWYoIV8uaXNVbmRlZmluZWQobmFtZSkmJiF0aGlzLl9pc011bHRpZ3JhcGgpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3Qgc2V0IGEgbmFtZWQgZWRnZSB3aGVuIGlzTXVsdGlncmFwaCBceDNkIGZhbHNlIik7dGhpcy5zZXROb2RlKHYpO3RoaXMuc2V0Tm9kZSh3KTt0aGlzLl9lZGdlTGFiZWxzW2VdPXZhbHVlU3BlY2lmaWVkP3ZhbHVlOnRoaXMuX2RlZmF1bHRFZGdlTGFiZWxGbih2LHcsbmFtZSk7dmFyIGVkZ2VPYmo9ZWRnZUFyZ3NUb09iaih0aGlzLl9pc0RpcmVjdGVkLHYsdyxuYW1lKTt2PWVkZ2VPYmoudjt3PWVkZ2VPYmoudztPYmplY3QuZnJlZXplKGVkZ2VPYmopO3RoaXMuX2VkZ2VPYmpzW2VdPWVkZ2VPYmo7aW5jcmVtZW50T3JJbml0RW50cnkodGhpcy5fcHJlZHNbd10sdik7aW5jcmVtZW50T3JJbml0RW50cnkodGhpcy5fc3Vjc1t2XSx3KTt0aGlzLl9pblt3XVtlXT0KZWRnZU9iajt0aGlzLl9vdXRbdl1bZV09ZWRnZU9iajt0aGlzLl9lZGdlQ291bnQrKztyZXR1cm4gdGhpc307R3JhcGgucHJvdG90eXBlLmVkZ2U9ZnVuY3Rpb24odix3LG5hbWUpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg9PT0xP2VkZ2VPYmpUb0lkKHRoaXMuX2lzRGlyZWN0ZWQsYXJndW1lbnRzWzBdKTplZGdlQXJnc1RvSWQodGhpcy5faXNEaXJlY3RlZCx2LHcsbmFtZSk7cmV0dXJuIHRoaXMuX2VkZ2VMYWJlbHNbZV19O0dyYXBoLnByb3RvdHlwZS5oYXNFZGdlPWZ1bmN0aW9uKHYsdyxuYW1lKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPT09MT9lZGdlT2JqVG9JZCh0aGlzLl9pc0RpcmVjdGVkLGFyZ3VtZW50c1swXSk6ZWRnZUFyZ3NUb0lkKHRoaXMuX2lzRGlyZWN0ZWQsdix3LG5hbWUpO3JldHVybiBfLmhhcyh0aGlzLl9lZGdlTGFiZWxzLGUpfTtHcmFwaC5wcm90b3R5cGUucmVtb3ZlRWRnZT1mdW5jdGlvbih2LHcsbmFtZSl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD09PTE/CmVkZ2VPYmpUb0lkKHRoaXMuX2lzRGlyZWN0ZWQsYXJndW1lbnRzWzBdKTplZGdlQXJnc1RvSWQodGhpcy5faXNEaXJlY3RlZCx2LHcsbmFtZSksZWRnZT10aGlzLl9lZGdlT2Jqc1tlXTtpZihlZGdlKXt2PWVkZ2Uudjt3PWVkZ2UudztkZWxldGUgdGhpcy5fZWRnZUxhYmVsc1tlXTtkZWxldGUgdGhpcy5fZWRnZU9ianNbZV07ZGVjcmVtZW50T3JSZW1vdmVFbnRyeSh0aGlzLl9wcmVkc1t3XSx2KTtkZWNyZW1lbnRPclJlbW92ZUVudHJ5KHRoaXMuX3N1Y3Nbdl0sdyk7ZGVsZXRlIHRoaXMuX2luW3ddW2VdO2RlbGV0ZSB0aGlzLl9vdXRbdl1bZV07dGhpcy5fZWRnZUNvdW50LS19cmV0dXJuIHRoaXN9O0dyYXBoLnByb3RvdHlwZS5pbkVkZ2VzPWZ1bmN0aW9uKHYsdSl7dmFyIGluVj10aGlzLl9pblt2XTtpZihpblYpe3ZhciBlZGdlcz1fLnZhbHVlcyhpblYpO2lmKCF1KXJldHVybiBlZGdlcztyZXR1cm4gXy5maWx0ZXIoZWRnZXMsZnVuY3Rpb24oZWRnZSl7cmV0dXJuIGVkZ2Uudj09PQp1fSl9fTtHcmFwaC5wcm90b3R5cGUub3V0RWRnZXM9ZnVuY3Rpb24odix3KXt2YXIgb3V0Vj10aGlzLl9vdXRbdl07aWYob3V0Vil7dmFyIGVkZ2VzPV8udmFsdWVzKG91dFYpO2lmKCF3KXJldHVybiBlZGdlcztyZXR1cm4gXy5maWx0ZXIoZWRnZXMsZnVuY3Rpb24oZWRnZSl7cmV0dXJuIGVkZ2Uudz09PXd9KX19O0dyYXBoLnByb3RvdHlwZS5ub2RlRWRnZXM9ZnVuY3Rpb24odix3KXt2YXIgaW5FZGdlcz10aGlzLmluRWRnZXModix3KTtpZihpbkVkZ2VzKXJldHVybiBpbkVkZ2VzLmNvbmNhdCh0aGlzLm91dEVkZ2VzKHYsdykpfTtmdW5jdGlvbiBpbmNyZW1lbnRPckluaXRFbnRyeShtYXAsayl7aWYobWFwW2tdKW1hcFtrXSsrO2Vsc2UgbWFwW2tdPTF9ZnVuY3Rpb24gZGVjcmVtZW50T3JSZW1vdmVFbnRyeShtYXAsayl7aWYoIS0tbWFwW2tdKWRlbGV0ZSBtYXBba119ZnVuY3Rpb24gZWRnZUFyZ3NUb0lkKGlzRGlyZWN0ZWQsdl8sd18sbmFtZSl7dmFyIHY9IiIrdl87dmFyIHc9CiIiK3dfO2lmKCFpc0RpcmVjdGVkJiZ2Pncpe3ZhciB0bXA9djt2PXc7dz10bXB9cmV0dXJuIHYrRURHRV9LRVlfREVMSU0rdytFREdFX0tFWV9ERUxJTSsoXy5pc1VuZGVmaW5lZChuYW1lKT9ERUZBVUxUX0VER0VfTkFNRTpuYW1lKX1mdW5jdGlvbiBlZGdlQXJnc1RvT2JqKGlzRGlyZWN0ZWQsdl8sd18sbmFtZSl7dmFyIHY9IiIrdl87dmFyIHc9IiIrd187aWYoIWlzRGlyZWN0ZWQmJnY+dyl7dmFyIHRtcD12O3Y9dzt3PXRtcH12YXIgZWRnZU9iaj17djp2LHc6d307aWYobmFtZSllZGdlT2JqLm5hbWU9bmFtZTtyZXR1cm4gZWRnZU9ian1mdW5jdGlvbiBlZGdlT2JqVG9JZChpc0RpcmVjdGVkLGVkZ2VPYmope3JldHVybiBlZGdlQXJnc1RvSWQoaXNEaXJlY3RlZCxlZGdlT2JqLnYsZWRnZU9iai53LGVkZ2VPYmoubmFtZSl9fSx7Ii4vbG9kYXNoIjoxOX1dLDE3OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXttb2R1bGUuZXhwb3J0cz17R3JhcGg6cmVxdWlyZSgiLi9ncmFwaCIpLAp2ZXJzaW9uOnJlcXVpcmUoIi4vdmVyc2lvbiIpfX0seyIuL2dyYXBoIjoxNiwiLi92ZXJzaW9uIjoyMH1dLDE4OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXt2YXIgXz1yZXF1aXJlKCIuL2xvZGFzaCIpLEdyYXBoPXJlcXVpcmUoIi4vZ3JhcGgiKTttb2R1bGUuZXhwb3J0cz17d3JpdGU6d3JpdGUscmVhZDpyZWFkfTtmdW5jdGlvbiB3cml0ZShnKXt2YXIganNvbj17b3B0aW9uczp7ZGlyZWN0ZWQ6Zy5pc0RpcmVjdGVkKCksbXVsdGlncmFwaDpnLmlzTXVsdGlncmFwaCgpLGNvbXBvdW5kOmcuaXNDb21wb3VuZCgpfSxub2Rlczp3cml0ZU5vZGVzKGcpLGVkZ2VzOndyaXRlRWRnZXMoZyl9O2lmKCFfLmlzVW5kZWZpbmVkKGcuZ3JhcGgoKSkpanNvbi52YWx1ZT1fLmNsb25lKGcuZ3JhcGgoKSk7cmV0dXJuIGpzb259ZnVuY3Rpb24gd3JpdGVOb2RlcyhnKXtyZXR1cm4gXy5tYXAoZy5ub2RlcygpLGZ1bmN0aW9uKHYpe3ZhciBub2RlVmFsdWU9Zy5ub2RlKHYpLHBhcmVudD0KZy5wYXJlbnQodiksbm9kZT17djp2fTtpZighXy5pc1VuZGVmaW5lZChub2RlVmFsdWUpKW5vZGUudmFsdWU9bm9kZVZhbHVlO2lmKCFfLmlzVW5kZWZpbmVkKHBhcmVudCkpbm9kZS5wYXJlbnQ9cGFyZW50O3JldHVybiBub2RlfSl9ZnVuY3Rpb24gd3JpdGVFZGdlcyhnKXtyZXR1cm4gXy5tYXAoZy5lZGdlcygpLGZ1bmN0aW9uKGUpe3ZhciBlZGdlVmFsdWU9Zy5lZGdlKGUpLGVkZ2U9e3Y6ZS52LHc6ZS53fTtpZighXy5pc1VuZGVmaW5lZChlLm5hbWUpKWVkZ2UubmFtZT1lLm5hbWU7aWYoIV8uaXNVbmRlZmluZWQoZWRnZVZhbHVlKSllZGdlLnZhbHVlPWVkZ2VWYWx1ZTtyZXR1cm4gZWRnZX0pfWZ1bmN0aW9uIHJlYWQoanNvbil7dmFyIGc9KG5ldyBHcmFwaChqc29uLm9wdGlvbnMpKS5zZXRHcmFwaChqc29uLnZhbHVlKTtfLmVhY2goanNvbi5ub2RlcyxmdW5jdGlvbihlbnRyeSl7Zy5zZXROb2RlKGVudHJ5LnYsZW50cnkudmFsdWUpO2lmKGVudHJ5LnBhcmVudClnLnNldFBhcmVudChlbnRyeS52LAplbnRyeS5wYXJlbnQpfSk7Xy5lYWNoKGpzb24uZWRnZXMsZnVuY3Rpb24oZW50cnkpe2cuc2V0RWRnZSh7djplbnRyeS52LHc6ZW50cnkudyxuYW1lOmVudHJ5Lm5hbWV9LGVudHJ5LnZhbHVlKX0pO3JldHVybiBnfX0seyIuL2dyYXBoIjoxNiwiLi9sb2Rhc2giOjE5fV0sMTk6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe3ZhciBsb2Rhc2g7aWYodHlwZW9mIHJlcXVpcmU9PT0iZnVuY3Rpb24iKXRyeXtsb2Rhc2g9cmVxdWlyZSgibG9kYXNoIil9Y2F0Y2goZSl7fWlmKCFsb2Rhc2gpbG9kYXNoPXdpbmRvdy5fO21vZHVsZS5leHBvcnRzPWxvZGFzaH0seyJsb2Rhc2giOnVuZGVmaW5lZH1dLDIwOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXttb2R1bGUuZXhwb3J0cz0iMi4xLjUifSx7fV19LHt9LFsxXSkoMSl9KTs8L3NjcmlwdD48c2NyaXB0PihmdW5jdGlvbihmKXtpZih0eXBlb2YgZXhwb3J0cz09PSJvYmplY3QiJiZ0eXBlb2YgbW9kdWxlIT09InVuZGVmaW5lZCIpbW9kdWxlLmV4cG9ydHM9ZigpO2Vsc2UgaWYodHlwZW9mIGRlZmluZT09PSJmdW5jdGlvbiImJmRlZmluZS5hbWQpZGVmaW5lKFtdLGYpO2Vsc2V7dmFyIGc7aWYodHlwZW9mIHdpbmRvdyE9PSJ1bmRlZmluZWQiKWc9d2luZG93O2Vsc2UgaWYodHlwZW9mIGdsb2JhbCE9PSJ1bmRlZmluZWQiKWc9Z2xvYmFsO2Vsc2UgaWYodHlwZW9mIHNlbGYhPT0idW5kZWZpbmVkIilnPXNlbGY7ZWxzZSBnPXRoaXM7Zy5kYWdyZT1mKCl9fSkoZnVuY3Rpb24oKXt2YXIgZGVmaW5lLG1vZHVsZSxleHBvcnRzO3JldHVybiBmdW5jdGlvbiBlKHQsbixyKXtmdW5jdGlvbiBzKG8sdSl7aWYoIW5bb10pe2lmKCF0W29dKXt2YXIgYT10eXBlb2YgcmVxdWlyZT09ImZ1bmN0aW9uIiYmcmVxdWlyZTtpZighdSYmYSlyZXR1cm4gYShvLCEwKTtpZihpKXJldHVybiBpKG8sITApO3ZhciBmPQpuZXcgRXJyb3IoIkNhbm5vdCBmaW5kIG1vZHVsZSAnIitvKyInIik7dGhyb3cgZi5jb2RlPSJNT0RVTEVfTk9UX0ZPVU5EIixmO312YXIgbD1uW29dPXtleHBvcnRzOnt9fTt0W29dWzBdLmNhbGwobC5leHBvcnRzLGZ1bmN0aW9uKGUpe3ZhciBuPXRbb11bMV1bZV07cmV0dXJuIHMobj9uOmUpfSxsLGwuZXhwb3J0cyxlLHQsbixyKX1yZXR1cm4gbltvXS5leHBvcnRzfXZhciBpPXR5cGVvZiByZXF1aXJlPT0iZnVuY3Rpb24iJiZyZXF1aXJlO2Zvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKXMocltvXSk7cmV0dXJuIHN9KHsxOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXttb2R1bGUuZXhwb3J0cz17Z3JhcGhsaWI6cmVxdWlyZSgiLi9saWIvZ3JhcGhsaWIiKSxsYXlvdXQ6cmVxdWlyZSgiLi9saWIvbGF5b3V0IiksZGVidWc6cmVxdWlyZSgiLi9saWIvZGVidWciKSx1dGlsOnt0aW1lOnJlcXVpcmUoIi4vbGliL3V0aWwiKS50aW1lLG5vdGltZTpyZXF1aXJlKCIuL2xpYi91dGlsIikubm90aW1lfSwKdmVyc2lvbjpyZXF1aXJlKCIuL2xpYi92ZXJzaW9uIil9fSx7Ii4vbGliL2RlYnVnIjo2LCIuL2xpYi9ncmFwaGxpYiI6NywiLi9saWIvbGF5b3V0Ijo5LCIuL2xpYi91dGlsIjoyOSwiLi9saWIvdmVyc2lvbiI6MzB9XSwyOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXt2YXIgXz1yZXF1aXJlKCIuL2xvZGFzaCIpLGdyZWVkeUZBUz1yZXF1aXJlKCIuL2dyZWVkeS1mYXMiKTttb2R1bGUuZXhwb3J0cz17cnVuOnJ1bix1bmRvOnVuZG99O2Z1bmN0aW9uIHJ1bihnKXt2YXIgZmFzPWcuZ3JhcGgoKS5hY3ljbGljZXI9PT0iZ3JlZWR5Ij9ncmVlZHlGQVMoZyx3ZWlnaHRGbihnKSk6ZGZzRkFTKGcpO18uZm9yRWFjaChmYXMsZnVuY3Rpb24oZSl7dmFyIGxhYmVsPWcuZWRnZShlKTtnLnJlbW92ZUVkZ2UoZSk7bGFiZWwuZm9yd2FyZE5hbWU9ZS5uYW1lO2xhYmVsLnJldmVyc2VkPXRydWU7Zy5zZXRFZGdlKGUudyxlLnYsbGFiZWwsXy51bmlxdWVJZCgicmV2IikpfSk7ZnVuY3Rpb24gd2VpZ2h0Rm4oZyl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBnLmVkZ2UoZSkud2VpZ2h0fX0KfWZ1bmN0aW9uIGRmc0ZBUyhnKXt2YXIgZmFzPVtdLHN0YWNrPXt9LHZpc2l0ZWQ9e307ZnVuY3Rpb24gZGZzKHYpe2lmKF8uaGFzKHZpc2l0ZWQsdikpcmV0dXJuO3Zpc2l0ZWRbdl09dHJ1ZTtzdGFja1t2XT10cnVlO18uZm9yRWFjaChnLm91dEVkZ2VzKHYpLGZ1bmN0aW9uKGUpe2lmKF8uaGFzKHN0YWNrLGUudykpZmFzLnB1c2goZSk7ZWxzZSBkZnMoZS53KX0pO2RlbGV0ZSBzdGFja1t2XX1fLmZvckVhY2goZy5ub2RlcygpLGRmcyk7cmV0dXJuIGZhc31mdW5jdGlvbiB1bmRvKGcpe18uZm9yRWFjaChnLmVkZ2VzKCksZnVuY3Rpb24oZSl7dmFyIGxhYmVsPWcuZWRnZShlKTtpZihsYWJlbC5yZXZlcnNlZCl7Zy5yZW1vdmVFZGdlKGUpO3ZhciBmb3J3YXJkTmFtZT1sYWJlbC5mb3J3YXJkTmFtZTtkZWxldGUgbGFiZWwucmV2ZXJzZWQ7ZGVsZXRlIGxhYmVsLmZvcndhcmROYW1lO2cuc2V0RWRnZShlLncsZS52LGxhYmVsLGZvcndhcmROYW1lKX19KX19LHsiLi9ncmVlZHktZmFzIjo4LAoiLi9sb2Rhc2giOjEwfV0sMzpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7dmFyIF89cmVxdWlyZSgiLi9sb2Rhc2giKSx1dGlsPXJlcXVpcmUoIi4vdXRpbCIpO21vZHVsZS5leHBvcnRzPWFkZEJvcmRlclNlZ21lbnRzO2Z1bmN0aW9uIGFkZEJvcmRlclNlZ21lbnRzKGcpe2Z1bmN0aW9uIGRmcyh2KXt2YXIgY2hpbGRyZW49Zy5jaGlsZHJlbih2KSxub2RlPWcubm9kZSh2KTtpZihjaGlsZHJlbi5sZW5ndGgpXy5mb3JFYWNoKGNoaWxkcmVuLGRmcyk7aWYoXy5oYXMobm9kZSwibWluUmFuayIpKXtub2RlLmJvcmRlckxlZnQ9W107bm9kZS5ib3JkZXJSaWdodD1bXTtmb3IodmFyIHJhbms9bm9kZS5taW5SYW5rLG1heFJhbms9bm9kZS5tYXhSYW5rKzE7cmFuazxtYXhSYW5rOysrcmFuayl7YWRkQm9yZGVyTm9kZShnLCJib3JkZXJMZWZ0IiwiX2JsIix2LG5vZGUscmFuayk7YWRkQm9yZGVyTm9kZShnLCJib3JkZXJSaWdodCIsIl9iciIsdixub2RlLHJhbmspfX19Xy5mb3JFYWNoKGcuY2hpbGRyZW4oKSwKZGZzKX1mdW5jdGlvbiBhZGRCb3JkZXJOb2RlKGcscHJvcCxwcmVmaXgsc2csc2dOb2RlLHJhbmspe3ZhciBsYWJlbD17d2lkdGg6MCxoZWlnaHQ6MCxyYW5rOnJhbmssYm9yZGVyVHlwZTpwcm9wfSxwcmV2PXNnTm9kZVtwcm9wXVtyYW5rLTFdLGN1cnI9dXRpbC5hZGREdW1teU5vZGUoZywiYm9yZGVyIixsYWJlbCxwcmVmaXgpO3NnTm9kZVtwcm9wXVtyYW5rXT1jdXJyO2cuc2V0UGFyZW50KGN1cnIsc2cpO2lmKHByZXYpZy5zZXRFZGdlKHByZXYsY3Vycix7d2VpZ2h0OjF9KX19LHsiLi9sb2Rhc2giOjEwLCIuL3V0aWwiOjI5fV0sNDpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7dmFyIF89cmVxdWlyZSgiLi9sb2Rhc2giKTttb2R1bGUuZXhwb3J0cz17YWRqdXN0OmFkanVzdCx1bmRvOnVuZG99O2Z1bmN0aW9uIGFkanVzdChnKXt2YXIgcmFua0Rpcj1nLmdyYXBoKCkucmFua2Rpci50b0xvd2VyQ2FzZSgpO2lmKHJhbmtEaXI9PT0ibHIifHxyYW5rRGlyPT09InJsIilzd2FwV2lkdGhIZWlnaHQoZyl9CmZ1bmN0aW9uIHVuZG8oZyl7dmFyIHJhbmtEaXI9Zy5ncmFwaCgpLnJhbmtkaXIudG9Mb3dlckNhc2UoKTtpZihyYW5rRGlyPT09ImJ0Inx8cmFua0Rpcj09PSJybCIpcmV2ZXJzZVkoZyk7aWYocmFua0Rpcj09PSJsciJ8fHJhbmtEaXI9PT0icmwiKXtzd2FwWFkoZyk7c3dhcFdpZHRoSGVpZ2h0KGcpfX1mdW5jdGlvbiBzd2FwV2lkdGhIZWlnaHQoZyl7Xy5mb3JFYWNoKGcubm9kZXMoKSxmdW5jdGlvbih2KXtzd2FwV2lkdGhIZWlnaHRPbmUoZy5ub2RlKHYpKX0pO18uZm9yRWFjaChnLmVkZ2VzKCksZnVuY3Rpb24oZSl7c3dhcFdpZHRoSGVpZ2h0T25lKGcuZWRnZShlKSl9KX1mdW5jdGlvbiBzd2FwV2lkdGhIZWlnaHRPbmUoYXR0cnMpe3ZhciB3PWF0dHJzLndpZHRoO2F0dHJzLndpZHRoPWF0dHJzLmhlaWdodDthdHRycy5oZWlnaHQ9d31mdW5jdGlvbiByZXZlcnNlWShnKXtfLmZvckVhY2goZy5ub2RlcygpLGZ1bmN0aW9uKHYpe3JldmVyc2VZT25lKGcubm9kZSh2KSl9KTtfLmZvckVhY2goZy5lZGdlcygpLApmdW5jdGlvbihlKXt2YXIgZWRnZT1nLmVkZ2UoZSk7Xy5mb3JFYWNoKGVkZ2UucG9pbnRzLHJldmVyc2VZT25lKTtpZihfLmhhcyhlZGdlLCJ5IikpcmV2ZXJzZVlPbmUoZWRnZSl9KX1mdW5jdGlvbiByZXZlcnNlWU9uZShhdHRycyl7YXR0cnMueT0tYXR0cnMueX1mdW5jdGlvbiBzd2FwWFkoZyl7Xy5mb3JFYWNoKGcubm9kZXMoKSxmdW5jdGlvbih2KXtzd2FwWFlPbmUoZy5ub2RlKHYpKX0pO18uZm9yRWFjaChnLmVkZ2VzKCksZnVuY3Rpb24oZSl7dmFyIGVkZ2U9Zy5lZGdlKGUpO18uZm9yRWFjaChlZGdlLnBvaW50cyxzd2FwWFlPbmUpO2lmKF8uaGFzKGVkZ2UsIngiKSlzd2FwWFlPbmUoZWRnZSl9KX1mdW5jdGlvbiBzd2FwWFlPbmUoYXR0cnMpe3ZhciB4PWF0dHJzLng7YXR0cnMueD1hdHRycy55O2F0dHJzLnk9eH19LHsiLi9sb2Rhc2giOjEwfV0sNTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7bW9kdWxlLmV4cG9ydHM9TGlzdDtmdW5jdGlvbiBMaXN0KCl7dmFyIHNlbnRpbmVsPQp7fTtzZW50aW5lbC5fbmV4dD1zZW50aW5lbC5fcHJldj1zZW50aW5lbDt0aGlzLl9zZW50aW5lbD1zZW50aW5lbH1MaXN0LnByb3RvdHlwZS5kZXF1ZXVlPWZ1bmN0aW9uKCl7dmFyIHNlbnRpbmVsPXRoaXMuX3NlbnRpbmVsLGVudHJ5PXNlbnRpbmVsLl9wcmV2O2lmKGVudHJ5IT09c2VudGluZWwpe3VubGluayhlbnRyeSk7cmV0dXJuIGVudHJ5fX07TGlzdC5wcm90b3R5cGUuZW5xdWV1ZT1mdW5jdGlvbihlbnRyeSl7dmFyIHNlbnRpbmVsPXRoaXMuX3NlbnRpbmVsO2lmKGVudHJ5Ll9wcmV2JiZlbnRyeS5fbmV4dCl1bmxpbmsoZW50cnkpO2VudHJ5Ll9uZXh0PXNlbnRpbmVsLl9uZXh0O3NlbnRpbmVsLl9uZXh0Ll9wcmV2PWVudHJ5O3NlbnRpbmVsLl9uZXh0PWVudHJ5O2VudHJ5Ll9wcmV2PXNlbnRpbmVsfTtMaXN0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3ZhciBzdHJzPVtdLHNlbnRpbmVsPXRoaXMuX3NlbnRpbmVsLGN1cnI9c2VudGluZWwuX3ByZXY7d2hpbGUoY3VyciE9PQpzZW50aW5lbCl7c3Rycy5wdXNoKEpTT04uc3RyaW5naWZ5KGN1cnIsZmlsdGVyT3V0TGlua3MpKTtjdXJyPWN1cnIuX3ByZXZ9cmV0dXJuIlsiK3N0cnMuam9pbigiLCAiKSsiXSJ9O2Z1bmN0aW9uIHVubGluayhlbnRyeSl7ZW50cnkuX3ByZXYuX25leHQ9ZW50cnkuX25leHQ7ZW50cnkuX25leHQuX3ByZXY9ZW50cnkuX3ByZXY7ZGVsZXRlIGVudHJ5Ll9uZXh0O2RlbGV0ZSBlbnRyeS5fcHJldn1mdW5jdGlvbiBmaWx0ZXJPdXRMaW5rcyhrLHYpe2lmKGshPT0iX25leHQiJiZrIT09Il9wcmV2IilyZXR1cm4gdn19LHt9XSw2OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXt2YXIgXz1yZXF1aXJlKCIuL2xvZGFzaCIpLHV0aWw9cmVxdWlyZSgiLi91dGlsIiksR3JhcGg9cmVxdWlyZSgiLi9ncmFwaGxpYiIpLkdyYXBoO21vZHVsZS5leHBvcnRzPXtkZWJ1Z09yZGVyaW5nOmRlYnVnT3JkZXJpbmd9O2Z1bmN0aW9uIGRlYnVnT3JkZXJpbmcoZyl7dmFyIGxheWVyTWF0cml4PQp1dGlsLmJ1aWxkTGF5ZXJNYXRyaXgoZyk7dmFyIGg9KG5ldyBHcmFwaCh7Y29tcG91bmQ6dHJ1ZSxtdWx0aWdyYXBoOnRydWV9KSkuc2V0R3JhcGgoe30pO18uZm9yRWFjaChnLm5vZGVzKCksZnVuY3Rpb24odil7aC5zZXROb2RlKHYse2xhYmVsOnZ9KTtoLnNldFBhcmVudCh2LCJsYXllciIrZy5ub2RlKHYpLnJhbmspfSk7Xy5mb3JFYWNoKGcuZWRnZXMoKSxmdW5jdGlvbihlKXtoLnNldEVkZ2UoZS52LGUudyx7fSxlLm5hbWUpfSk7Xy5mb3JFYWNoKGxheWVyTWF0cml4LGZ1bmN0aW9uKGxheWVyLGkpe3ZhciBsYXllclY9ImxheWVyIitpO2guc2V0Tm9kZShsYXllclYse3Jhbms6InNhbWUifSk7Xy5yZWR1Y2UobGF5ZXIsZnVuY3Rpb24odSx2KXtoLnNldEVkZ2UodSx2LHtzdHlsZToiaW52aXMifSk7cmV0dXJuIHZ9KX0pO3JldHVybiBofX0seyIuL2dyYXBobGliIjo3LCIuL2xvZGFzaCI6MTAsIi4vdXRpbCI6Mjl9XSw3OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXt2YXIgZ3JhcGhsaWI7CmlmKHR5cGVvZiByZXF1aXJlPT09ImZ1bmN0aW9uIil0cnl7Z3JhcGhsaWI9cmVxdWlyZSgiZ3JhcGhsaWIiKX1jYXRjaChlKXt9aWYoIWdyYXBobGliKWdyYXBobGliPXdpbmRvdy5ncmFwaGxpYjttb2R1bGUuZXhwb3J0cz1ncmFwaGxpYn0seyJncmFwaGxpYiI6dW5kZWZpbmVkfV0sODpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7dmFyIF89cmVxdWlyZSgiLi9sb2Rhc2giKSxHcmFwaD1yZXF1aXJlKCIuL2dyYXBobGliIikuR3JhcGgsTGlzdD1yZXF1aXJlKCIuL2RhdGEvbGlzdCIpO21vZHVsZS5leHBvcnRzPWdyZWVkeUZBUzt2YXIgREVGQVVMVF9XRUlHSFRfRk49Xy5jb25zdGFudCgxKTtmdW5jdGlvbiBncmVlZHlGQVMoZyx3ZWlnaHRGbil7aWYoZy5ub2RlQ291bnQoKTw9MSlyZXR1cm5bXTt2YXIgc3RhdGU9YnVpbGRTdGF0ZShnLHdlaWdodEZufHxERUZBVUxUX1dFSUdIVF9GTik7dmFyIHJlc3VsdHM9ZG9HcmVlZHlGQVMoc3RhdGUuZ3JhcGgsc3RhdGUuYnVja2V0cywKc3RhdGUuemVyb0lkeCk7cmV0dXJuIF8uZmxhdHRlbihfLm1hcChyZXN1bHRzLGZ1bmN0aW9uKGUpe3JldHVybiBnLm91dEVkZ2VzKGUudixlLncpfSksdHJ1ZSl9ZnVuY3Rpb24gZG9HcmVlZHlGQVMoZyxidWNrZXRzLHplcm9JZHgpe3ZhciByZXN1bHRzPVtdLHNvdXJjZXM9YnVja2V0c1tidWNrZXRzLmxlbmd0aC0xXSxzaW5rcz1idWNrZXRzWzBdO3ZhciBlbnRyeTt3aGlsZShnLm5vZGVDb3VudCgpKXt3aGlsZShlbnRyeT1zaW5rcy5kZXF1ZXVlKCkpcmVtb3ZlTm9kZShnLGJ1Y2tldHMsemVyb0lkeCxlbnRyeSk7d2hpbGUoZW50cnk9c291cmNlcy5kZXF1ZXVlKCkpcmVtb3ZlTm9kZShnLGJ1Y2tldHMsemVyb0lkeCxlbnRyeSk7aWYoZy5ub2RlQ291bnQoKSlmb3IodmFyIGk9YnVja2V0cy5sZW5ndGgtMjtpPjA7LS1pKXtlbnRyeT1idWNrZXRzW2ldLmRlcXVldWUoKTtpZihlbnRyeSl7cmVzdWx0cz1yZXN1bHRzLmNvbmNhdChyZW1vdmVOb2RlKGcsYnVja2V0cyx6ZXJvSWR4LAplbnRyeSx0cnVlKSk7YnJlYWt9fX1yZXR1cm4gcmVzdWx0c31mdW5jdGlvbiByZW1vdmVOb2RlKGcsYnVja2V0cyx6ZXJvSWR4LGVudHJ5LGNvbGxlY3RQcmVkZWNlc3NvcnMpe3ZhciByZXN1bHRzPWNvbGxlY3RQcmVkZWNlc3NvcnM/W106dW5kZWZpbmVkO18uZm9yRWFjaChnLmluRWRnZXMoZW50cnkudiksZnVuY3Rpb24oZWRnZSl7dmFyIHdlaWdodD1nLmVkZ2UoZWRnZSksdUVudHJ5PWcubm9kZShlZGdlLnYpO2lmKGNvbGxlY3RQcmVkZWNlc3NvcnMpcmVzdWx0cy5wdXNoKHt2OmVkZ2Uudix3OmVkZ2Uud30pO3VFbnRyeS5vdXQtPXdlaWdodDthc3NpZ25CdWNrZXQoYnVja2V0cyx6ZXJvSWR4LHVFbnRyeSl9KTtfLmZvckVhY2goZy5vdXRFZGdlcyhlbnRyeS52KSxmdW5jdGlvbihlZGdlKXt2YXIgd2VpZ2h0PWcuZWRnZShlZGdlKSx3PWVkZ2Uudyx3RW50cnk9Zy5ub2RlKHcpO3dFbnRyeVsiaW4iXS09d2VpZ2h0O2Fzc2lnbkJ1Y2tldChidWNrZXRzLHplcm9JZHgsd0VudHJ5KX0pOwpnLnJlbW92ZU5vZGUoZW50cnkudik7cmV0dXJuIHJlc3VsdHN9ZnVuY3Rpb24gYnVpbGRTdGF0ZShnLHdlaWdodEZuKXt2YXIgZmFzR3JhcGg9bmV3IEdyYXBoLG1heEluPTAsbWF4T3V0PTA7Xy5mb3JFYWNoKGcubm9kZXMoKSxmdW5jdGlvbih2KXtmYXNHcmFwaC5zZXROb2RlKHYse3Y6diwiaW4iOjAsb3V0OjB9KX0pO18uZm9yRWFjaChnLmVkZ2VzKCksZnVuY3Rpb24oZSl7dmFyIHByZXZXZWlnaHQ9ZmFzR3JhcGguZWRnZShlLnYsZS53KXx8MCx3ZWlnaHQ9d2VpZ2h0Rm4oZSksZWRnZVdlaWdodD1wcmV2V2VpZ2h0K3dlaWdodDtmYXNHcmFwaC5zZXRFZGdlKGUudixlLncsZWRnZVdlaWdodCk7bWF4T3V0PU1hdGgubWF4KG1heE91dCxmYXNHcmFwaC5ub2RlKGUudikub3V0Kz13ZWlnaHQpO21heEluPU1hdGgubWF4KG1heEluLGZhc0dyYXBoLm5vZGUoZS53KVsiaW4iXSs9d2VpZ2h0KX0pO3ZhciBidWNrZXRzPV8ucmFuZ2UobWF4T3V0K21heEluKzMpLm1hcChmdW5jdGlvbigpe3JldHVybiBuZXcgTGlzdH0pOwp2YXIgemVyb0lkeD1tYXhJbisxO18uZm9yRWFjaChmYXNHcmFwaC5ub2RlcygpLGZ1bmN0aW9uKHYpe2Fzc2lnbkJ1Y2tldChidWNrZXRzLHplcm9JZHgsZmFzR3JhcGgubm9kZSh2KSl9KTtyZXR1cm57Z3JhcGg6ZmFzR3JhcGgsYnVja2V0czpidWNrZXRzLHplcm9JZHg6emVyb0lkeH19ZnVuY3Rpb24gYXNzaWduQnVja2V0KGJ1Y2tldHMsemVyb0lkeCxlbnRyeSl7aWYoIWVudHJ5Lm91dClidWNrZXRzWzBdLmVucXVldWUoZW50cnkpO2Vsc2UgaWYoIWVudHJ5WyJpbiJdKWJ1Y2tldHNbYnVja2V0cy5sZW5ndGgtMV0uZW5xdWV1ZShlbnRyeSk7ZWxzZSBidWNrZXRzW2VudHJ5Lm91dC1lbnRyeVsiaW4iXSt6ZXJvSWR4XS5lbnF1ZXVlKGVudHJ5KX19LHsiLi9kYXRhL2xpc3QiOjUsIi4vZ3JhcGhsaWIiOjcsIi4vbG9kYXNoIjoxMH1dLDk6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe3ZhciBfPXJlcXVpcmUoIi4vbG9kYXNoIiksYWN5Y2xpYz1yZXF1aXJlKCIuL2FjeWNsaWMiKSwKbm9ybWFsaXplPXJlcXVpcmUoIi4vbm9ybWFsaXplIikscmFuaz1yZXF1aXJlKCIuL3JhbmsiKSxub3JtYWxpemVSYW5rcz1yZXF1aXJlKCIuL3V0aWwiKS5ub3JtYWxpemVSYW5rcyxwYXJlbnREdW1teUNoYWlucz1yZXF1aXJlKCIuL3BhcmVudC1kdW1teS1jaGFpbnMiKSxyZW1vdmVFbXB0eVJhbmtzPXJlcXVpcmUoIi4vdXRpbCIpLnJlbW92ZUVtcHR5UmFua3MsbmVzdGluZ0dyYXBoPXJlcXVpcmUoIi4vbmVzdGluZy1ncmFwaCIpLGFkZEJvcmRlclNlZ21lbnRzPXJlcXVpcmUoIi4vYWRkLWJvcmRlci1zZWdtZW50cyIpLGNvb3JkaW5hdGVTeXN0ZW09cmVxdWlyZSgiLi9jb29yZGluYXRlLXN5c3RlbSIpLG9yZGVyPXJlcXVpcmUoIi4vb3JkZXIiKSxwb3NpdGlvbj1yZXF1aXJlKCIuL3Bvc2l0aW9uIiksdXRpbD1yZXF1aXJlKCIuL3V0aWwiKSxHcmFwaD1yZXF1aXJlKCIuL2dyYXBobGliIikuR3JhcGg7bW9kdWxlLmV4cG9ydHM9bGF5b3V0O2Z1bmN0aW9uIGxheW91dChnLG9wdHMpe3ZhciB0aW1lPQpvcHRzJiZvcHRzLmRlYnVnVGltaW5nP3V0aWwudGltZTp1dGlsLm5vdGltZTt0aW1lKCJsYXlvdXQiLGZ1bmN0aW9uKCl7dmFyIGxheW91dEdyYXBoPXRpbWUoIiAgYnVpbGRMYXlvdXRHcmFwaCIsZnVuY3Rpb24oKXtyZXR1cm4gYnVpbGRMYXlvdXRHcmFwaChnKX0pO3RpbWUoIiAgcnVuTGF5b3V0IixmdW5jdGlvbigpe3J1bkxheW91dChsYXlvdXRHcmFwaCx0aW1lKX0pO3RpbWUoIiAgdXBkYXRlSW5wdXRHcmFwaCIsZnVuY3Rpb24oKXt1cGRhdGVJbnB1dEdyYXBoKGcsbGF5b3V0R3JhcGgpfSl9KX1mdW5jdGlvbiBydW5MYXlvdXQoZyx0aW1lKXt0aW1lKCIgICAgbWFrZVNwYWNlRm9yRWRnZUxhYmVscyIsZnVuY3Rpb24oKXttYWtlU3BhY2VGb3JFZGdlTGFiZWxzKGcpfSk7dGltZSgiICAgIHJlbW92ZVNlbGZFZGdlcyIsZnVuY3Rpb24oKXtyZW1vdmVTZWxmRWRnZXMoZyl9KTt0aW1lKCIgICAgYWN5Y2xpYyIsZnVuY3Rpb24oKXthY3ljbGljLnJ1bihnKX0pO3RpbWUoIiAgICBuZXN0aW5nR3JhcGgucnVuIiwKZnVuY3Rpb24oKXtuZXN0aW5nR3JhcGgucnVuKGcpfSk7dGltZSgiICAgIHJhbmsiLGZ1bmN0aW9uKCl7cmFuayh1dGlsLmFzTm9uQ29tcG91bmRHcmFwaChnKSl9KTt0aW1lKCIgICAgaW5qZWN0RWRnZUxhYmVsUHJveGllcyIsZnVuY3Rpb24oKXtpbmplY3RFZGdlTGFiZWxQcm94aWVzKGcpfSk7dGltZSgiICAgIHJlbW92ZUVtcHR5UmFua3MiLGZ1bmN0aW9uKCl7cmVtb3ZlRW1wdHlSYW5rcyhnKX0pO3RpbWUoIiAgICBuZXN0aW5nR3JhcGguY2xlYW51cCIsZnVuY3Rpb24oKXtuZXN0aW5nR3JhcGguY2xlYW51cChnKX0pO3RpbWUoIiAgICBub3JtYWxpemVSYW5rcyIsZnVuY3Rpb24oKXtub3JtYWxpemVSYW5rcyhnKX0pO3RpbWUoIiAgICBhc3NpZ25SYW5rTWluTWF4IixmdW5jdGlvbigpe2Fzc2lnblJhbmtNaW5NYXgoZyl9KTt0aW1lKCIgICAgcmVtb3ZlRWRnZUxhYmVsUHJveGllcyIsZnVuY3Rpb24oKXtyZW1vdmVFZGdlTGFiZWxQcm94aWVzKGcpfSk7dGltZSgiICAgIG5vcm1hbGl6ZS5ydW4iLApmdW5jdGlvbigpe25vcm1hbGl6ZS5ydW4oZyl9KTt0aW1lKCIgICAgcGFyZW50RHVtbXlDaGFpbnMiLGZ1bmN0aW9uKCl7cGFyZW50RHVtbXlDaGFpbnMoZyl9KTt0aW1lKCIgICAgYWRkQm9yZGVyU2VnbWVudHMiLGZ1bmN0aW9uKCl7YWRkQm9yZGVyU2VnbWVudHMoZyl9KTt0aW1lKCIgICAgb3JkZXIiLGZ1bmN0aW9uKCl7b3JkZXIoZyl9KTt0aW1lKCIgICAgaW5zZXJ0U2VsZkVkZ2VzIixmdW5jdGlvbigpe2luc2VydFNlbGZFZGdlcyhnKX0pO3RpbWUoIiAgICBhZGp1c3RDb29yZGluYXRlU3lzdGVtIixmdW5jdGlvbigpe2Nvb3JkaW5hdGVTeXN0ZW0uYWRqdXN0KGcpfSk7dGltZSgiICAgIHBvc2l0aW9uIixmdW5jdGlvbigpe3Bvc2l0aW9uKGcpfSk7dGltZSgiICAgIHBvc2l0aW9uU2VsZkVkZ2VzIixmdW5jdGlvbigpe3Bvc2l0aW9uU2VsZkVkZ2VzKGcpfSk7dGltZSgiICAgIHJlbW92ZUJvcmRlck5vZGVzIixmdW5jdGlvbigpe3JlbW92ZUJvcmRlck5vZGVzKGcpfSk7dGltZSgiICAgIG5vcm1hbGl6ZS51bmRvIiwKZnVuY3Rpb24oKXtub3JtYWxpemUudW5kbyhnKX0pO3RpbWUoIiAgICBmaXh1cEVkZ2VMYWJlbENvb3JkcyIsZnVuY3Rpb24oKXtmaXh1cEVkZ2VMYWJlbENvb3JkcyhnKX0pO3RpbWUoIiAgICB1bmRvQ29vcmRpbmF0ZVN5c3RlbSIsZnVuY3Rpb24oKXtjb29yZGluYXRlU3lzdGVtLnVuZG8oZyl9KTt0aW1lKCIgICAgdHJhbnNsYXRlR3JhcGgiLGZ1bmN0aW9uKCl7dHJhbnNsYXRlR3JhcGgoZyl9KTt0aW1lKCIgICAgYXNzaWduTm9kZUludGVyc2VjdHMiLGZ1bmN0aW9uKCl7YXNzaWduTm9kZUludGVyc2VjdHMoZyl9KTt0aW1lKCIgICAgcmV2ZXJzZVBvaW50cyIsZnVuY3Rpb24oKXtyZXZlcnNlUG9pbnRzRm9yUmV2ZXJzZWRFZGdlcyhnKX0pO3RpbWUoIiAgICBhY3ljbGljLnVuZG8iLGZ1bmN0aW9uKCl7YWN5Y2xpYy51bmRvKGcpfSl9ZnVuY3Rpb24gdXBkYXRlSW5wdXRHcmFwaChpbnB1dEdyYXBoLGxheW91dEdyYXBoKXtfLmZvckVhY2goaW5wdXRHcmFwaC5ub2RlcygpLGZ1bmN0aW9uKHYpe3ZhciBpbnB1dExhYmVsPQppbnB1dEdyYXBoLm5vZGUodiksbGF5b3V0TGFiZWw9bGF5b3V0R3JhcGgubm9kZSh2KTtpZihpbnB1dExhYmVsKXtpbnB1dExhYmVsLng9bGF5b3V0TGFiZWwueDtpbnB1dExhYmVsLnk9bGF5b3V0TGFiZWwueTtpZihsYXlvdXRHcmFwaC5jaGlsZHJlbih2KS5sZW5ndGgpe2lucHV0TGFiZWwud2lkdGg9bGF5b3V0TGFiZWwud2lkdGg7aW5wdXRMYWJlbC5oZWlnaHQ9bGF5b3V0TGFiZWwuaGVpZ2h0fX19KTtfLmZvckVhY2goaW5wdXRHcmFwaC5lZGdlcygpLGZ1bmN0aW9uKGUpe3ZhciBpbnB1dExhYmVsPWlucHV0R3JhcGguZWRnZShlKSxsYXlvdXRMYWJlbD1sYXlvdXRHcmFwaC5lZGdlKGUpO2lucHV0TGFiZWwucG9pbnRzPWxheW91dExhYmVsLnBvaW50cztpZihfLmhhcyhsYXlvdXRMYWJlbCwieCIpKXtpbnB1dExhYmVsLng9bGF5b3V0TGFiZWwueDtpbnB1dExhYmVsLnk9bGF5b3V0TGFiZWwueX19KTtpbnB1dEdyYXBoLmdyYXBoKCkud2lkdGg9bGF5b3V0R3JhcGguZ3JhcGgoKS53aWR0aDsKaW5wdXRHcmFwaC5ncmFwaCgpLmhlaWdodD1sYXlvdXRHcmFwaC5ncmFwaCgpLmhlaWdodH12YXIgZ3JhcGhOdW1BdHRycz1bIm5vZGVzZXAiLCJlZGdlc2VwIiwicmFua3NlcCIsIm1hcmdpbngiLCJtYXJnaW55Il0sZ3JhcGhEZWZhdWx0cz17cmFua3NlcDo1MCxlZGdlc2VwOjIwLG5vZGVzZXA6NTAscmFua2RpcjoidGIifSxncmFwaEF0dHJzPVsiYWN5Y2xpY2VyIiwicmFua2VyIiwicmFua2RpciIsImFsaWduIl0sbm9kZU51bUF0dHJzPVsid2lkdGgiLCJoZWlnaHQiXSxub2RlRGVmYXVsdHM9e3dpZHRoOjAsaGVpZ2h0OjB9LGVkZ2VOdW1BdHRycz1bIm1pbmxlbiIsIndlaWdodCIsIndpZHRoIiwiaGVpZ2h0IiwibGFiZWxvZmZzZXQiXSxlZGdlRGVmYXVsdHM9e21pbmxlbjoxLHdlaWdodDoxLHdpZHRoOjAsaGVpZ2h0OjAsbGFiZWxvZmZzZXQ6MTAsbGFiZWxwb3M6InIifSxlZGdlQXR0cnM9WyJsYWJlbHBvcyJdO2Z1bmN0aW9uIGJ1aWxkTGF5b3V0R3JhcGgoaW5wdXRHcmFwaCl7dmFyIGc9Cm5ldyBHcmFwaCh7bXVsdGlncmFwaDp0cnVlLGNvbXBvdW5kOnRydWV9KSxncmFwaD1jYW5vbmljYWxpemUoaW5wdXRHcmFwaC5ncmFwaCgpKTtnLnNldEdyYXBoKF8ubWVyZ2Uoe30sZ3JhcGhEZWZhdWx0cyxzZWxlY3ROdW1iZXJBdHRycyhncmFwaCxncmFwaE51bUF0dHJzKSxfLnBpY2soZ3JhcGgsZ3JhcGhBdHRycykpKTtfLmZvckVhY2goaW5wdXRHcmFwaC5ub2RlcygpLGZ1bmN0aW9uKHYpe3ZhciBub2RlPWNhbm9uaWNhbGl6ZShpbnB1dEdyYXBoLm5vZGUodikpO2cuc2V0Tm9kZSh2LF8uZGVmYXVsdHMoc2VsZWN0TnVtYmVyQXR0cnMobm9kZSxub2RlTnVtQXR0cnMpLG5vZGVEZWZhdWx0cykpO2cuc2V0UGFyZW50KHYsaW5wdXRHcmFwaC5wYXJlbnQodikpfSk7Xy5mb3JFYWNoKGlucHV0R3JhcGguZWRnZXMoKSxmdW5jdGlvbihlKXt2YXIgZWRnZT1jYW5vbmljYWxpemUoaW5wdXRHcmFwaC5lZGdlKGUpKTtnLnNldEVkZ2UoZSxfLm1lcmdlKHt9LGVkZ2VEZWZhdWx0cyxzZWxlY3ROdW1iZXJBdHRycyhlZGdlLAplZGdlTnVtQXR0cnMpLF8ucGljayhlZGdlLGVkZ2VBdHRycykpKX0pO3JldHVybiBnfWZ1bmN0aW9uIG1ha2VTcGFjZUZvckVkZ2VMYWJlbHMoZyl7dmFyIGdyYXBoPWcuZ3JhcGgoKTtncmFwaC5yYW5rc2VwLz0yO18uZm9yRWFjaChnLmVkZ2VzKCksZnVuY3Rpb24oZSl7dmFyIGVkZ2U9Zy5lZGdlKGUpO2VkZ2UubWlubGVuKj0yO2lmKGVkZ2UubGFiZWxwb3MudG9Mb3dlckNhc2UoKSE9PSJjIilpZihncmFwaC5yYW5rZGlyPT09IlRCInx8Z3JhcGgucmFua2Rpcj09PSJCVCIpZWRnZS53aWR0aCs9ZWRnZS5sYWJlbG9mZnNldDtlbHNlIGVkZ2UuaGVpZ2h0Kz1lZGdlLmxhYmVsb2Zmc2V0fSl9ZnVuY3Rpb24gaW5qZWN0RWRnZUxhYmVsUHJveGllcyhnKXtfLmZvckVhY2goZy5lZGdlcygpLGZ1bmN0aW9uKGUpe3ZhciBlZGdlPWcuZWRnZShlKTtpZihlZGdlLndpZHRoJiZlZGdlLmhlaWdodCl7dmFyIHY9Zy5ub2RlKGUudiksdz1nLm5vZGUoZS53KSxsYWJlbD17cmFuazoody5yYW5rLQp2LnJhbmspLzIrdi5yYW5rLGU6ZX07dXRpbC5hZGREdW1teU5vZGUoZywiZWRnZS1wcm94eSIsbGFiZWwsIl9lcCIpfX0pfWZ1bmN0aW9uIGFzc2lnblJhbmtNaW5NYXgoZyl7dmFyIG1heFJhbms9MDtfLmZvckVhY2goZy5ub2RlcygpLGZ1bmN0aW9uKHYpe3ZhciBub2RlPWcubm9kZSh2KTtpZihub2RlLmJvcmRlclRvcCl7bm9kZS5taW5SYW5rPWcubm9kZShub2RlLmJvcmRlclRvcCkucmFuaztub2RlLm1heFJhbms9Zy5ub2RlKG5vZGUuYm9yZGVyQm90dG9tKS5yYW5rO21heFJhbms9Xy5tYXgobWF4UmFuayxub2RlLm1heFJhbmspfX0pO2cuZ3JhcGgoKS5tYXhSYW5rPW1heFJhbmt9ZnVuY3Rpb24gcmVtb3ZlRWRnZUxhYmVsUHJveGllcyhnKXtfLmZvckVhY2goZy5ub2RlcygpLGZ1bmN0aW9uKHYpe3ZhciBub2RlPWcubm9kZSh2KTtpZihub2RlLmR1bW15PT09ImVkZ2UtcHJveHkiKXtnLmVkZ2Uobm9kZS5lKS5sYWJlbFJhbms9bm9kZS5yYW5rO2cucmVtb3ZlTm9kZSh2KX19KX0KZnVuY3Rpb24gdHJhbnNsYXRlR3JhcGgoZyl7dmFyIG1pblg9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLG1heFg9MCxtaW5ZPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxtYXhZPTAsZ3JhcGhMYWJlbD1nLmdyYXBoKCksbWFyZ2luWD1ncmFwaExhYmVsLm1hcmdpbnh8fDAsbWFyZ2luWT1ncmFwaExhYmVsLm1hcmdpbnl8fDA7ZnVuY3Rpb24gZ2V0RXh0cmVtZXMoYXR0cnMpe3ZhciB4PWF0dHJzLngseT1hdHRycy55LHc9YXR0cnMud2lkdGgsaD1hdHRycy5oZWlnaHQ7bWluWD1NYXRoLm1pbihtaW5YLHgtdy8yKTttYXhYPU1hdGgubWF4KG1heFgseCt3LzIpO21pblk9TWF0aC5taW4obWluWSx5LWgvMik7bWF4WT1NYXRoLm1heChtYXhZLHkraC8yKX1fLmZvckVhY2goZy5ub2RlcygpLGZ1bmN0aW9uKHYpe2dldEV4dHJlbWVzKGcubm9kZSh2KSl9KTtfLmZvckVhY2goZy5lZGdlcygpLGZ1bmN0aW9uKGUpe3ZhciBlZGdlPWcuZWRnZShlKTtpZihfLmhhcyhlZGdlLCJ4IikpZ2V0RXh0cmVtZXMoZWRnZSl9KTsKbWluWC09bWFyZ2luWDttaW5ZLT1tYXJnaW5ZO18uZm9yRWFjaChnLm5vZGVzKCksZnVuY3Rpb24odil7dmFyIG5vZGU9Zy5ub2RlKHYpO25vZGUueC09bWluWDtub2RlLnktPW1pbll9KTtfLmZvckVhY2goZy5lZGdlcygpLGZ1bmN0aW9uKGUpe3ZhciBlZGdlPWcuZWRnZShlKTtfLmZvckVhY2goZWRnZS5wb2ludHMsZnVuY3Rpb24ocCl7cC54LT1taW5YO3AueS09bWluWX0pO2lmKF8uaGFzKGVkZ2UsIngiKSllZGdlLngtPW1pblg7aWYoXy5oYXMoZWRnZSwieSIpKWVkZ2UueS09bWluWX0pO2dyYXBoTGFiZWwud2lkdGg9bWF4WC1taW5YK21hcmdpblg7Z3JhcGhMYWJlbC5oZWlnaHQ9bWF4WS1taW5ZK21hcmdpbll9ZnVuY3Rpb24gYXNzaWduTm9kZUludGVyc2VjdHMoZyl7Xy5mb3JFYWNoKGcuZWRnZXMoKSxmdW5jdGlvbihlKXt2YXIgZWRnZT1nLmVkZ2UoZSksbm9kZVY9Zy5ub2RlKGUudiksbm9kZVc9Zy5ub2RlKGUudykscDEscDI7aWYoIWVkZ2UucG9pbnRzKXtlZGdlLnBvaW50cz0KW107cDE9bm9kZVc7cDI9bm9kZVZ9ZWxzZXtwMT1lZGdlLnBvaW50c1swXTtwMj1lZGdlLnBvaW50c1tlZGdlLnBvaW50cy5sZW5ndGgtMV19ZWRnZS5wb2ludHMudW5zaGlmdCh1dGlsLmludGVyc2VjdFJlY3Qobm9kZVYscDEpKTtlZGdlLnBvaW50cy5wdXNoKHV0aWwuaW50ZXJzZWN0UmVjdChub2RlVyxwMikpfSl9ZnVuY3Rpb24gZml4dXBFZGdlTGFiZWxDb29yZHMoZyl7Xy5mb3JFYWNoKGcuZWRnZXMoKSxmdW5jdGlvbihlKXt2YXIgZWRnZT1nLmVkZ2UoZSk7aWYoXy5oYXMoZWRnZSwieCIpKXtpZihlZGdlLmxhYmVscG9zPT09ImwifHxlZGdlLmxhYmVscG9zPT09InIiKWVkZ2Uud2lkdGgtPWVkZ2UubGFiZWxvZmZzZXQ7c3dpdGNoKGVkZ2UubGFiZWxwb3Mpe2Nhc2UgImwiOmVkZ2UueC09ZWRnZS53aWR0aC8yK2VkZ2UubGFiZWxvZmZzZXQ7YnJlYWs7Y2FzZSAiciI6ZWRnZS54Kz1lZGdlLndpZHRoLzIrZWRnZS5sYWJlbG9mZnNldDticmVha319fSl9ZnVuY3Rpb24gcmV2ZXJzZVBvaW50c0ZvclJldmVyc2VkRWRnZXMoZyl7Xy5mb3JFYWNoKGcuZWRnZXMoKSwKZnVuY3Rpb24oZSl7dmFyIGVkZ2U9Zy5lZGdlKGUpO2lmKGVkZ2UucmV2ZXJzZWQpZWRnZS5wb2ludHMucmV2ZXJzZSgpfSl9ZnVuY3Rpb24gcmVtb3ZlQm9yZGVyTm9kZXMoZyl7Xy5mb3JFYWNoKGcubm9kZXMoKSxmdW5jdGlvbih2KXtpZihnLmNoaWxkcmVuKHYpLmxlbmd0aCl7dmFyIG5vZGU9Zy5ub2RlKHYpLHQ9Zy5ub2RlKG5vZGUuYm9yZGVyVG9wKSxiPWcubm9kZShub2RlLmJvcmRlckJvdHRvbSksbD1nLm5vZGUoXy5sYXN0KG5vZGUuYm9yZGVyTGVmdCkpLHI9Zy5ub2RlKF8ubGFzdChub2RlLmJvcmRlclJpZ2h0KSk7bm9kZS53aWR0aD1NYXRoLmFicyhyLngtbC54KTtub2RlLmhlaWdodD1NYXRoLmFicyhiLnktdC55KTtub2RlLng9bC54K25vZGUud2lkdGgvMjtub2RlLnk9dC55K25vZGUuaGVpZ2h0LzJ9fSk7Xy5mb3JFYWNoKGcubm9kZXMoKSxmdW5jdGlvbih2KXtpZihnLm5vZGUodikuZHVtbXk9PT0iYm9yZGVyIilnLnJlbW92ZU5vZGUodil9KX1mdW5jdGlvbiByZW1vdmVTZWxmRWRnZXMoZyl7Xy5mb3JFYWNoKGcuZWRnZXMoKSwKZnVuY3Rpb24oZSl7aWYoZS52PT09ZS53KXt2YXIgbm9kZT1nLm5vZGUoZS52KTtpZighbm9kZS5zZWxmRWRnZXMpbm9kZS5zZWxmRWRnZXM9W107bm9kZS5zZWxmRWRnZXMucHVzaCh7ZTplLGxhYmVsOmcuZWRnZShlKX0pO2cucmVtb3ZlRWRnZShlKX19KX1mdW5jdGlvbiBpbnNlcnRTZWxmRWRnZXMoZyl7dmFyIGxheWVycz11dGlsLmJ1aWxkTGF5ZXJNYXRyaXgoZyk7Xy5mb3JFYWNoKGxheWVycyxmdW5jdGlvbihsYXllcil7dmFyIG9yZGVyU2hpZnQ9MDtfLmZvckVhY2gobGF5ZXIsZnVuY3Rpb24odixpKXt2YXIgbm9kZT1nLm5vZGUodik7bm9kZS5vcmRlcj1pK29yZGVyU2hpZnQ7Xy5mb3JFYWNoKG5vZGUuc2VsZkVkZ2VzLGZ1bmN0aW9uKHNlbGZFZGdlKXt1dGlsLmFkZER1bW15Tm9kZShnLCJzZWxmZWRnZSIse3dpZHRoOnNlbGZFZGdlLmxhYmVsLndpZHRoLGhlaWdodDpzZWxmRWRnZS5sYWJlbC5oZWlnaHQscmFuazpub2RlLnJhbmssb3JkZXI6aSsgKytvcmRlclNoaWZ0LAplOnNlbGZFZGdlLmUsbGFiZWw6c2VsZkVkZ2UubGFiZWx9LCJfc2UiKX0pO2RlbGV0ZSBub2RlLnNlbGZFZGdlc30pfSl9ZnVuY3Rpb24gcG9zaXRpb25TZWxmRWRnZXMoZyl7Xy5mb3JFYWNoKGcubm9kZXMoKSxmdW5jdGlvbih2KXt2YXIgbm9kZT1nLm5vZGUodik7aWYobm9kZS5kdW1teT09PSJzZWxmZWRnZSIpe3ZhciBzZWxmTm9kZT1nLm5vZGUobm9kZS5lLnYpLHg9c2VsZk5vZGUueCtzZWxmTm9kZS53aWR0aC8yLHk9c2VsZk5vZGUueSxkeD1ub2RlLngteCxkeT1zZWxmTm9kZS5oZWlnaHQvMjtnLnNldEVkZ2Uobm9kZS5lLG5vZGUubGFiZWwpO2cucmVtb3ZlTm9kZSh2KTtub2RlLmxhYmVsLnBvaW50cz1be3g6eCsyKmR4LzMseTp5LWR5fSx7eDp4KzUqZHgvNix5OnktZHl9LHt4OngrZHgseTp5fSx7eDp4KzUqZHgvNix5OnkrZHl9LHt4OngrMipkeC8zLHk6eStkeX1dO25vZGUubGFiZWwueD1ub2RlLng7bm9kZS5sYWJlbC55PW5vZGUueX19KX1mdW5jdGlvbiBzZWxlY3ROdW1iZXJBdHRycyhvYmosCmF0dHJzKXtyZXR1cm4gXy5tYXBWYWx1ZXMoXy5waWNrKG9iaixhdHRycyksTnVtYmVyKX1mdW5jdGlvbiBjYW5vbmljYWxpemUoYXR0cnMpe3ZhciBuZXdBdHRycz17fTtfLmZvckVhY2goYXR0cnMsZnVuY3Rpb24odixrKXtuZXdBdHRyc1trLnRvTG93ZXJDYXNlKCldPXZ9KTtyZXR1cm4gbmV3QXR0cnN9fSx7Ii4vYWN5Y2xpYyI6MiwiLi9hZGQtYm9yZGVyLXNlZ21lbnRzIjozLCIuL2Nvb3JkaW5hdGUtc3lzdGVtIjo0LCIuL2dyYXBobGliIjo3LCIuL2xvZGFzaCI6MTAsIi4vbmVzdGluZy1ncmFwaCI6MTEsIi4vbm9ybWFsaXplIjoxMiwiLi9vcmRlciI6MTcsIi4vcGFyZW50LWR1bW15LWNoYWlucyI6MjIsIi4vcG9zaXRpb24iOjI0LCIuL3JhbmsiOjI2LCIuL3V0aWwiOjI5fV0sMTA6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe3ZhciBsb2Rhc2g7aWYodHlwZW9mIHJlcXVpcmU9PT0iZnVuY3Rpb24iKXRyeXtsb2Rhc2g9cmVxdWlyZSgibG9kYXNoIil9Y2F0Y2goZSl7fWlmKCFsb2Rhc2gpbG9kYXNoPQp3aW5kb3cuXzttb2R1bGUuZXhwb3J0cz1sb2Rhc2h9LHsibG9kYXNoIjp1bmRlZmluZWR9XSwxMTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7dmFyIF89cmVxdWlyZSgiLi9sb2Rhc2giKSx1dGlsPXJlcXVpcmUoIi4vdXRpbCIpO21vZHVsZS5leHBvcnRzPXtydW46cnVuLGNsZWFudXA6Y2xlYW51cH07ZnVuY3Rpb24gcnVuKGcpe3ZhciByb290PXV0aWwuYWRkRHVtbXlOb2RlKGcsInJvb3QiLHt9LCJfcm9vdCIpO3ZhciBkZXB0aHM9dHJlZURlcHRocyhnKTt2YXIgaGVpZ2h0PV8ubWF4KF8udmFsdWVzKGRlcHRocykpLTE7dmFyIG5vZGVTZXA9MipoZWlnaHQrMTtnLmdyYXBoKCkubmVzdGluZ1Jvb3Q9cm9vdDtfLmZvckVhY2goZy5lZGdlcygpLGZ1bmN0aW9uKGUpe2cuZWRnZShlKS5taW5sZW4qPW5vZGVTZXB9KTt2YXIgd2VpZ2h0PXN1bVdlaWdodHMoZykrMTtfLmZvckVhY2goZy5jaGlsZHJlbigpLGZ1bmN0aW9uKGNoaWxkKXtkZnMoZyxyb290LG5vZGVTZXAsCndlaWdodCxoZWlnaHQsZGVwdGhzLGNoaWxkKX0pO2cuZ3JhcGgoKS5ub2RlUmFua0ZhY3Rvcj1ub2RlU2VwfWZ1bmN0aW9uIGRmcyhnLHJvb3Qsbm9kZVNlcCx3ZWlnaHQsaGVpZ2h0LGRlcHRocyx2KXt2YXIgY2hpbGRyZW49Zy5jaGlsZHJlbih2KTtpZighY2hpbGRyZW4ubGVuZ3RoKXtpZih2IT09cm9vdClnLnNldEVkZ2Uocm9vdCx2LHt3ZWlnaHQ6MCxtaW5sZW46bm9kZVNlcH0pO3JldHVybn12YXIgdG9wPXV0aWwuYWRkQm9yZGVyTm9kZShnLCJfYnQiKSxib3R0b209dXRpbC5hZGRCb3JkZXJOb2RlKGcsIl9iYiIpLGxhYmVsPWcubm9kZSh2KTtnLnNldFBhcmVudCh0b3Asdik7bGFiZWwuYm9yZGVyVG9wPXRvcDtnLnNldFBhcmVudChib3R0b20sdik7bGFiZWwuYm9yZGVyQm90dG9tPWJvdHRvbTtfLmZvckVhY2goY2hpbGRyZW4sZnVuY3Rpb24oY2hpbGQpe2RmcyhnLHJvb3Qsbm9kZVNlcCx3ZWlnaHQsaGVpZ2h0LGRlcHRocyxjaGlsZCk7dmFyIGNoaWxkTm9kZT1nLm5vZGUoY2hpbGQpLApjaGlsZFRvcD1jaGlsZE5vZGUuYm9yZGVyVG9wP2NoaWxkTm9kZS5ib3JkZXJUb3A6Y2hpbGQsY2hpbGRCb3R0b209Y2hpbGROb2RlLmJvcmRlckJvdHRvbT9jaGlsZE5vZGUuYm9yZGVyQm90dG9tOmNoaWxkLHRoaXNXZWlnaHQ9Y2hpbGROb2RlLmJvcmRlclRvcD93ZWlnaHQ6Mip3ZWlnaHQsbWlubGVuPWNoaWxkVG9wIT09Y2hpbGRCb3R0b20/MTpoZWlnaHQtZGVwdGhzW3ZdKzE7Zy5zZXRFZGdlKHRvcCxjaGlsZFRvcCx7d2VpZ2h0OnRoaXNXZWlnaHQsbWlubGVuOm1pbmxlbixuZXN0aW5nRWRnZTp0cnVlfSk7Zy5zZXRFZGdlKGNoaWxkQm90dG9tLGJvdHRvbSx7d2VpZ2h0OnRoaXNXZWlnaHQsbWlubGVuOm1pbmxlbixuZXN0aW5nRWRnZTp0cnVlfSl9KTtpZighZy5wYXJlbnQodikpZy5zZXRFZGdlKHJvb3QsdG9wLHt3ZWlnaHQ6MCxtaW5sZW46aGVpZ2h0K2RlcHRoc1t2XX0pfWZ1bmN0aW9uIHRyZWVEZXB0aHMoZyl7dmFyIGRlcHRocz17fTtmdW5jdGlvbiBkZnModixkZXB0aCl7dmFyIGNoaWxkcmVuPQpnLmNoaWxkcmVuKHYpO2lmKGNoaWxkcmVuJiZjaGlsZHJlbi5sZW5ndGgpXy5mb3JFYWNoKGNoaWxkcmVuLGZ1bmN0aW9uKGNoaWxkKXtkZnMoY2hpbGQsZGVwdGgrMSl9KTtkZXB0aHNbdl09ZGVwdGh9Xy5mb3JFYWNoKGcuY2hpbGRyZW4oKSxmdW5jdGlvbih2KXtkZnModiwxKX0pO3JldHVybiBkZXB0aHN9ZnVuY3Rpb24gc3VtV2VpZ2h0cyhnKXtyZXR1cm4gXy5yZWR1Y2UoZy5lZGdlcygpLGZ1bmN0aW9uKGFjYyxlKXtyZXR1cm4gYWNjK2cuZWRnZShlKS53ZWlnaHR9LDApfWZ1bmN0aW9uIGNsZWFudXAoZyl7dmFyIGdyYXBoTGFiZWw9Zy5ncmFwaCgpO2cucmVtb3ZlTm9kZShncmFwaExhYmVsLm5lc3RpbmdSb290KTtkZWxldGUgZ3JhcGhMYWJlbC5uZXN0aW5nUm9vdDtfLmZvckVhY2goZy5lZGdlcygpLGZ1bmN0aW9uKGUpe3ZhciBlZGdlPWcuZWRnZShlKTtpZihlZGdlLm5lc3RpbmdFZGdlKWcucmVtb3ZlRWRnZShlKX0pfX0seyIuL2xvZGFzaCI6MTAsIi4vdXRpbCI6Mjl9XSwKMTI6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe3ZhciBfPXJlcXVpcmUoIi4vbG9kYXNoIiksdXRpbD1yZXF1aXJlKCIuL3V0aWwiKTttb2R1bGUuZXhwb3J0cz17cnVuOnJ1bix1bmRvOnVuZG99O2Z1bmN0aW9uIHJ1bihnKXtnLmdyYXBoKCkuZHVtbXlDaGFpbnM9W107Xy5mb3JFYWNoKGcuZWRnZXMoKSxmdW5jdGlvbihlZGdlKXtub3JtYWxpemVFZGdlKGcsZWRnZSl9KX1mdW5jdGlvbiBub3JtYWxpemVFZGdlKGcsZSl7dmFyIHY9ZS52LHZSYW5rPWcubm9kZSh2KS5yYW5rLHc9ZS53LHdSYW5rPWcubm9kZSh3KS5yYW5rLG5hbWU9ZS5uYW1lLGVkZ2VMYWJlbD1nLmVkZ2UoZSksbGFiZWxSYW5rPWVkZ2VMYWJlbC5sYWJlbFJhbms7aWYod1Jhbms9PT12UmFuaysxKXJldHVybjtnLnJlbW92ZUVkZ2UoZSk7dmFyIGR1bW15LGF0dHJzLGk7Zm9yKGk9MCwrK3ZSYW5rO3ZSYW5rPHdSYW5rOysraSwrK3ZSYW5rKXtlZGdlTGFiZWwucG9pbnRzPVtdO2F0dHJzPXt3aWR0aDowLApoZWlnaHQ6MCxlZGdlTGFiZWw6ZWRnZUxhYmVsLGVkZ2VPYmo6ZSxyYW5rOnZSYW5rfTtkdW1teT11dGlsLmFkZER1bW15Tm9kZShnLCJlZGdlIixhdHRycywiX2QiKTtpZih2UmFuaz09PWxhYmVsUmFuayl7YXR0cnMud2lkdGg9ZWRnZUxhYmVsLndpZHRoO2F0dHJzLmhlaWdodD1lZGdlTGFiZWwuaGVpZ2h0O2F0dHJzLmR1bW15PSJlZGdlLWxhYmVsIjthdHRycy5sYWJlbHBvcz1lZGdlTGFiZWwubGFiZWxwb3N9Zy5zZXRFZGdlKHYsZHVtbXkse3dlaWdodDplZGdlTGFiZWwud2VpZ2h0fSxuYW1lKTtpZihpPT09MClnLmdyYXBoKCkuZHVtbXlDaGFpbnMucHVzaChkdW1teSk7dj1kdW1teX1nLnNldEVkZ2Uodix3LHt3ZWlnaHQ6ZWRnZUxhYmVsLndlaWdodH0sbmFtZSl9ZnVuY3Rpb24gdW5kbyhnKXtfLmZvckVhY2goZy5ncmFwaCgpLmR1bW15Q2hhaW5zLGZ1bmN0aW9uKHYpe3ZhciBub2RlPWcubm9kZSh2KSxvcmlnTGFiZWw9bm9kZS5lZGdlTGFiZWwsdztnLnNldEVkZ2Uobm9kZS5lZGdlT2JqLApvcmlnTGFiZWwpO3doaWxlKG5vZGUuZHVtbXkpe3c9Zy5zdWNjZXNzb3JzKHYpWzBdO2cucmVtb3ZlTm9kZSh2KTtvcmlnTGFiZWwucG9pbnRzLnB1c2goe3g6bm9kZS54LHk6bm9kZS55fSk7aWYobm9kZS5kdW1teT09PSJlZGdlLWxhYmVsIil7b3JpZ0xhYmVsLng9bm9kZS54O29yaWdMYWJlbC55PW5vZGUueTtvcmlnTGFiZWwud2lkdGg9bm9kZS53aWR0aDtvcmlnTGFiZWwuaGVpZ2h0PW5vZGUuaGVpZ2h0fXY9dztub2RlPWcubm9kZSh2KX19KX19LHsiLi9sb2Rhc2giOjEwLCIuL3V0aWwiOjI5fV0sMTM6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe3ZhciBfPXJlcXVpcmUoIi4uL2xvZGFzaCIpO21vZHVsZS5leHBvcnRzPWFkZFN1YmdyYXBoQ29uc3RyYWludHM7ZnVuY3Rpb24gYWRkU3ViZ3JhcGhDb25zdHJhaW50cyhnLGNnLHZzKXt2YXIgcHJldj17fSxyb290UHJldjtfLmZvckVhY2godnMsZnVuY3Rpb24odil7dmFyIGNoaWxkPWcucGFyZW50KHYpLHBhcmVudCwKcHJldkNoaWxkO3doaWxlKGNoaWxkKXtwYXJlbnQ9Zy5wYXJlbnQoY2hpbGQpO2lmKHBhcmVudCl7cHJldkNoaWxkPXByZXZbcGFyZW50XTtwcmV2W3BhcmVudF09Y2hpbGR9ZWxzZXtwcmV2Q2hpbGQ9cm9vdFByZXY7cm9vdFByZXY9Y2hpbGR9aWYocHJldkNoaWxkJiZwcmV2Q2hpbGQhPT1jaGlsZCl7Y2cuc2V0RWRnZShwcmV2Q2hpbGQsY2hpbGQpO3JldHVybn1jaGlsZD1wYXJlbnR9fSl9fSx7Ii4uL2xvZGFzaCI6MTB9XSwxNDpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7dmFyIF89cmVxdWlyZSgiLi4vbG9kYXNoIik7bW9kdWxlLmV4cG9ydHM9YmFyeWNlbnRlcjtmdW5jdGlvbiBiYXJ5Y2VudGVyKGcsbW92YWJsZSl7cmV0dXJuIF8ubWFwKG1vdmFibGUsZnVuY3Rpb24odil7dmFyIGluVj1nLmluRWRnZXModik7aWYoIWluVi5sZW5ndGgpcmV0dXJue3Y6dn07ZWxzZXt2YXIgcmVzdWx0PV8ucmVkdWNlKGluVixmdW5jdGlvbihhY2MsZSl7dmFyIGVkZ2U9Zy5lZGdlKGUpLApub2RlVT1nLm5vZGUoZS52KTtyZXR1cm57c3VtOmFjYy5zdW0rZWRnZS53ZWlnaHQqbm9kZVUub3JkZXIsd2VpZ2h0OmFjYy53ZWlnaHQrZWRnZS53ZWlnaHR9fSx7c3VtOjAsd2VpZ2h0OjB9KTtyZXR1cm57djp2LGJhcnljZW50ZXI6cmVzdWx0LnN1bS9yZXN1bHQud2VpZ2h0LHdlaWdodDpyZXN1bHQud2VpZ2h0fX19KX19LHsiLi4vbG9kYXNoIjoxMH1dLDE1OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXt2YXIgXz1yZXF1aXJlKCIuLi9sb2Rhc2giKSxHcmFwaD1yZXF1aXJlKCIuLi9ncmFwaGxpYiIpLkdyYXBoO21vZHVsZS5leHBvcnRzPWJ1aWxkTGF5ZXJHcmFwaDtmdW5jdGlvbiBidWlsZExheWVyR3JhcGgoZyxyYW5rLHJlbGF0aW9uc2hpcCl7dmFyIHJvb3Q9Y3JlYXRlUm9vdE5vZGUoZykscmVzdWx0PShuZXcgR3JhcGgoe2NvbXBvdW5kOnRydWV9KSkuc2V0R3JhcGgoe3Jvb3Q6cm9vdH0pLnNldERlZmF1bHROb2RlTGFiZWwoZnVuY3Rpb24odil7cmV0dXJuIGcubm9kZSh2KX0pOwpfLmZvckVhY2goZy5ub2RlcygpLGZ1bmN0aW9uKHYpe3ZhciBub2RlPWcubm9kZSh2KSxwYXJlbnQ9Zy5wYXJlbnQodik7aWYobm9kZS5yYW5rPT09cmFua3x8bm9kZS5taW5SYW5rPD1yYW5rJiZyYW5rPD1ub2RlLm1heFJhbmspe3Jlc3VsdC5zZXROb2RlKHYpO3Jlc3VsdC5zZXRQYXJlbnQodixwYXJlbnR8fHJvb3QpO18uZm9yRWFjaChnW3JlbGF0aW9uc2hpcF0odiksZnVuY3Rpb24oZSl7dmFyIHU9ZS52PT09dj9lLnc6ZS52LGVkZ2U9cmVzdWx0LmVkZ2UodSx2KSx3ZWlnaHQ9IV8uaXNVbmRlZmluZWQoZWRnZSk/ZWRnZS53ZWlnaHQ6MDtyZXN1bHQuc2V0RWRnZSh1LHYse3dlaWdodDpnLmVkZ2UoZSkud2VpZ2h0K3dlaWdodH0pfSk7aWYoXy5oYXMobm9kZSwibWluUmFuayIpKXJlc3VsdC5zZXROb2RlKHYse2JvcmRlckxlZnQ6bm9kZS5ib3JkZXJMZWZ0W3JhbmtdLGJvcmRlclJpZ2h0Om5vZGUuYm9yZGVyUmlnaHRbcmFua119KX19KTtyZXR1cm4gcmVzdWx0fWZ1bmN0aW9uIGNyZWF0ZVJvb3ROb2RlKGcpe3ZhciB2Owp3aGlsZShnLmhhc05vZGUodj1fLnVuaXF1ZUlkKCJfcm9vdCIpKSk7cmV0dXJuIHZ9fSx7Ii4uL2dyYXBobGliIjo3LCIuLi9sb2Rhc2giOjEwfV0sMTY6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe3ZhciBfPXJlcXVpcmUoIi4uL2xvZGFzaCIpO21vZHVsZS5leHBvcnRzPWNyb3NzQ291bnQ7ZnVuY3Rpb24gY3Jvc3NDb3VudChnLGxheWVyaW5nKXt2YXIgY2M9MDtmb3IodmFyIGk9MTtpPGxheWVyaW5nLmxlbmd0aDsrK2kpY2MrPXR3b0xheWVyQ3Jvc3NDb3VudChnLGxheWVyaW5nW2ktMV0sbGF5ZXJpbmdbaV0pO3JldHVybiBjY31mdW5jdGlvbiB0d29MYXllckNyb3NzQ291bnQoZyxub3J0aExheWVyLHNvdXRoTGF5ZXIpe3ZhciBzb3V0aFBvcz1fLnppcE9iamVjdChzb3V0aExheWVyLF8ubWFwKHNvdXRoTGF5ZXIsZnVuY3Rpb24odixpKXtyZXR1cm4gaX0pKTt2YXIgc291dGhFbnRyaWVzPV8uZmxhdHRlbihfLm1hcChub3J0aExheWVyLGZ1bmN0aW9uKHYpe3JldHVybiBfLmNoYWluKGcub3V0RWRnZXModikpLm1hcChmdW5jdGlvbihlKXtyZXR1cm57cG9zOnNvdXRoUG9zW2Uud10sCndlaWdodDpnLmVkZ2UoZSkud2VpZ2h0fX0pLnNvcnRCeSgicG9zIikudmFsdWUoKX0pLHRydWUpO3ZhciBmaXJzdEluZGV4PTE7d2hpbGUoZmlyc3RJbmRleDxzb3V0aExheWVyLmxlbmd0aClmaXJzdEluZGV4PDw9MTt2YXIgdHJlZVNpemU9MipmaXJzdEluZGV4LTE7Zmlyc3RJbmRleC09MTt2YXIgdHJlZT1fLm1hcChuZXcgQXJyYXkodHJlZVNpemUpLGZ1bmN0aW9uKCl7cmV0dXJuIDB9KTt2YXIgY2M9MDtfLmZvckVhY2goc291dGhFbnRyaWVzLmZvckVhY2goZnVuY3Rpb24oZW50cnkpe3ZhciBpbmRleD1lbnRyeS5wb3MrZmlyc3RJbmRleDt0cmVlW2luZGV4XSs9ZW50cnkud2VpZ2h0O3ZhciB3ZWlnaHRTdW09MDt3aGlsZShpbmRleD4wKXtpZihpbmRleCUyKXdlaWdodFN1bSs9dHJlZVtpbmRleCsxXTtpbmRleD1pbmRleC0xPj4xO3RyZWVbaW5kZXhdKz1lbnRyeS53ZWlnaHR9Y2MrPWVudHJ5LndlaWdodCp3ZWlnaHRTdW19KSk7cmV0dXJuIGNjfX0seyIuLi9sb2Rhc2giOjEwfV0sCjE3OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXt2YXIgXz1yZXF1aXJlKCIuLi9sb2Rhc2giKSxpbml0T3JkZXI9cmVxdWlyZSgiLi9pbml0LW9yZGVyIiksY3Jvc3NDb3VudD1yZXF1aXJlKCIuL2Nyb3NzLWNvdW50Iiksc29ydFN1YmdyYXBoPXJlcXVpcmUoIi4vc29ydC1zdWJncmFwaCIpLGJ1aWxkTGF5ZXJHcmFwaD1yZXF1aXJlKCIuL2J1aWxkLWxheWVyLWdyYXBoIiksYWRkU3ViZ3JhcGhDb25zdHJhaW50cz1yZXF1aXJlKCIuL2FkZC1zdWJncmFwaC1jb25zdHJhaW50cyIpLEdyYXBoPXJlcXVpcmUoIi4uL2dyYXBobGliIikuR3JhcGgsdXRpbD1yZXF1aXJlKCIuLi91dGlsIik7bW9kdWxlLmV4cG9ydHM9b3JkZXI7ZnVuY3Rpb24gb3JkZXIoZyl7dmFyIG1heFJhbms9dXRpbC5tYXhSYW5rKGcpLGRvd25MYXllckdyYXBocz1idWlsZExheWVyR3JhcGhzKGcsXy5yYW5nZSgxLG1heFJhbmsrMSksImluRWRnZXMiKSx1cExheWVyR3JhcGhzPWJ1aWxkTGF5ZXJHcmFwaHMoZywKXy5yYW5nZShtYXhSYW5rLTEsLTEsLTEpLCJvdXRFZGdlcyIpO3ZhciBsYXllcmluZz1pbml0T3JkZXIoZyk7YXNzaWduT3JkZXIoZyxsYXllcmluZyk7dmFyIGJlc3RDQz1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksYmVzdDtmb3IodmFyIGk9MCxsYXN0QmVzdD0wO2xhc3RCZXN0PDQ7KytpLCsrbGFzdEJlc3Qpe3N3ZWVwTGF5ZXJHcmFwaHMoaSUyP2Rvd25MYXllckdyYXBoczp1cExheWVyR3JhcGhzLGklND49Mik7bGF5ZXJpbmc9dXRpbC5idWlsZExheWVyTWF0cml4KGcpO3ZhciBjYz1jcm9zc0NvdW50KGcsbGF5ZXJpbmcpO2lmKGNjPGJlc3RDQyl7bGFzdEJlc3Q9MDtiZXN0PV8uY2xvbmVEZWVwKGxheWVyaW5nKTtiZXN0Q0M9Y2N9fWFzc2lnbk9yZGVyKGcsYmVzdCl9ZnVuY3Rpb24gYnVpbGRMYXllckdyYXBocyhnLHJhbmtzLHJlbGF0aW9uc2hpcCl7cmV0dXJuIF8ubWFwKHJhbmtzLGZ1bmN0aW9uKHJhbmspe3JldHVybiBidWlsZExheWVyR3JhcGgoZyxyYW5rLHJlbGF0aW9uc2hpcCl9KX0KZnVuY3Rpb24gc3dlZXBMYXllckdyYXBocyhsYXllckdyYXBocyxiaWFzUmlnaHQpe3ZhciBjZz1uZXcgR3JhcGg7Xy5mb3JFYWNoKGxheWVyR3JhcGhzLGZ1bmN0aW9uKGxnKXt2YXIgcm9vdD1sZy5ncmFwaCgpLnJvb3Q7dmFyIHNvcnRlZD1zb3J0U3ViZ3JhcGgobGcscm9vdCxjZyxiaWFzUmlnaHQpO18uZm9yRWFjaChzb3J0ZWQudnMsZnVuY3Rpb24odixpKXtsZy5ub2RlKHYpLm9yZGVyPWl9KTthZGRTdWJncmFwaENvbnN0cmFpbnRzKGxnLGNnLHNvcnRlZC52cyl9KX1mdW5jdGlvbiBhc3NpZ25PcmRlcihnLGxheWVyaW5nKXtfLmZvckVhY2gobGF5ZXJpbmcsZnVuY3Rpb24obGF5ZXIpe18uZm9yRWFjaChsYXllcixmdW5jdGlvbih2LGkpe2cubm9kZSh2KS5vcmRlcj1pfSl9KX19LHsiLi4vZ3JhcGhsaWIiOjcsIi4uL2xvZGFzaCI6MTAsIi4uL3V0aWwiOjI5LCIuL2FkZC1zdWJncmFwaC1jb25zdHJhaW50cyI6MTMsIi4vYnVpbGQtbGF5ZXItZ3JhcGgiOjE1LCIuL2Nyb3NzLWNvdW50IjoxNiwKIi4vaW5pdC1vcmRlciI6MTgsIi4vc29ydC1zdWJncmFwaCI6MjB9XSwxODpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7dmFyIF89cmVxdWlyZSgiLi4vbG9kYXNoIik7bW9kdWxlLmV4cG9ydHM9aW5pdE9yZGVyO2Z1bmN0aW9uIGluaXRPcmRlcihnKXt2YXIgdmlzaXRlZD17fSxzaW1wbGVOb2Rlcz1fLmZpbHRlcihnLm5vZGVzKCksZnVuY3Rpb24odil7cmV0dXJuIWcuY2hpbGRyZW4odikubGVuZ3RofSksbWF4UmFuaz1fLm1heChfLm1hcChzaW1wbGVOb2RlcyxmdW5jdGlvbih2KXtyZXR1cm4gZy5ub2RlKHYpLnJhbmt9KSksbGF5ZXJzPV8ubWFwKF8ucmFuZ2UobWF4UmFuaysxKSxmdW5jdGlvbigpe3JldHVybltdfSk7ZnVuY3Rpb24gZGZzKHYpe2lmKF8uaGFzKHZpc2l0ZWQsdikpcmV0dXJuO3Zpc2l0ZWRbdl09dHJ1ZTt2YXIgbm9kZT1nLm5vZGUodik7bGF5ZXJzW25vZGUucmFua10ucHVzaCh2KTtfLmZvckVhY2goZy5zdWNjZXNzb3JzKHYpLGRmcyl9dmFyIG9yZGVyZWRWcz0KXy5zb3J0Qnkoc2ltcGxlTm9kZXMsZnVuY3Rpb24odil7cmV0dXJuIGcubm9kZSh2KS5yYW5rfSk7Xy5mb3JFYWNoKG9yZGVyZWRWcyxkZnMpO3JldHVybiBsYXllcnN9fSx7Ii4uL2xvZGFzaCI6MTB9XSwxOTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7dmFyIF89cmVxdWlyZSgiLi4vbG9kYXNoIik7bW9kdWxlLmV4cG9ydHM9cmVzb2x2ZUNvbmZsaWN0cztmdW5jdGlvbiByZXNvbHZlQ29uZmxpY3RzKGVudHJpZXMsY2cpe3ZhciBtYXBwZWRFbnRyaWVzPXt9O18uZm9yRWFjaChlbnRyaWVzLGZ1bmN0aW9uKGVudHJ5LGkpe3ZhciB0bXA9bWFwcGVkRW50cmllc1tlbnRyeS52XT17aW5kZWdyZWU6MCwiaW4iOltdLG91dDpbXSx2czpbZW50cnkudl0saTppfTtpZighXy5pc1VuZGVmaW5lZChlbnRyeS5iYXJ5Y2VudGVyKSl7dG1wLmJhcnljZW50ZXI9ZW50cnkuYmFyeWNlbnRlcjt0bXAud2VpZ2h0PWVudHJ5LndlaWdodH19KTtfLmZvckVhY2goY2cuZWRnZXMoKSxmdW5jdGlvbihlKXt2YXIgZW50cnlWPQptYXBwZWRFbnRyaWVzW2Uudl0sZW50cnlXPW1hcHBlZEVudHJpZXNbZS53XTtpZighXy5pc1VuZGVmaW5lZChlbnRyeVYpJiYhXy5pc1VuZGVmaW5lZChlbnRyeVcpKXtlbnRyeVcuaW5kZWdyZWUrKztlbnRyeVYub3V0LnB1c2gobWFwcGVkRW50cmllc1tlLnddKX19KTt2YXIgc291cmNlU2V0PV8uZmlsdGVyKG1hcHBlZEVudHJpZXMsZnVuY3Rpb24oZW50cnkpe3JldHVybiFlbnRyeS5pbmRlZ3JlZX0pO3JldHVybiBkb1Jlc29sdmVDb25mbGljdHMoc291cmNlU2V0KX1mdW5jdGlvbiBkb1Jlc29sdmVDb25mbGljdHMoc291cmNlU2V0KXt2YXIgZW50cmllcz1bXTtmdW5jdGlvbiBoYW5kbGVJbih2RW50cnkpe3JldHVybiBmdW5jdGlvbih1RW50cnkpe2lmKHVFbnRyeS5tZXJnZWQpcmV0dXJuO2lmKF8uaXNVbmRlZmluZWQodUVudHJ5LmJhcnljZW50ZXIpfHxfLmlzVW5kZWZpbmVkKHZFbnRyeS5iYXJ5Y2VudGVyKXx8dUVudHJ5LmJhcnljZW50ZXI+PXZFbnRyeS5iYXJ5Y2VudGVyKW1lcmdlRW50cmllcyh2RW50cnksCnVFbnRyeSl9fWZ1bmN0aW9uIGhhbmRsZU91dCh2RW50cnkpe3JldHVybiBmdW5jdGlvbih3RW50cnkpe3dFbnRyeVsiaW4iXS5wdXNoKHZFbnRyeSk7aWYoLS13RW50cnkuaW5kZWdyZWU9PT0wKXNvdXJjZVNldC5wdXNoKHdFbnRyeSl9fXdoaWxlKHNvdXJjZVNldC5sZW5ndGgpe3ZhciBlbnRyeT1zb3VyY2VTZXQucG9wKCk7ZW50cmllcy5wdXNoKGVudHJ5KTtfLmZvckVhY2goZW50cnlbImluIl0ucmV2ZXJzZSgpLGhhbmRsZUluKGVudHJ5KSk7Xy5mb3JFYWNoKGVudHJ5Lm91dCxoYW5kbGVPdXQoZW50cnkpKX1yZXR1cm4gXy5jaGFpbihlbnRyaWVzKS5maWx0ZXIoZnVuY3Rpb24oZW50cnkpe3JldHVybiFlbnRyeS5tZXJnZWR9KS5tYXAoZnVuY3Rpb24oZW50cnkpe3JldHVybiBfLnBpY2soZW50cnksWyJ2cyIsImkiLCJiYXJ5Y2VudGVyIiwid2VpZ2h0Il0pfSkudmFsdWUoKX1mdW5jdGlvbiBtZXJnZUVudHJpZXModGFyZ2V0LHNvdXJjZSl7dmFyIHN1bT0wLHdlaWdodD0wOwppZih0YXJnZXQud2VpZ2h0KXtzdW0rPXRhcmdldC5iYXJ5Y2VudGVyKnRhcmdldC53ZWlnaHQ7d2VpZ2h0Kz10YXJnZXQud2VpZ2h0fWlmKHNvdXJjZS53ZWlnaHQpe3N1bSs9c291cmNlLmJhcnljZW50ZXIqc291cmNlLndlaWdodDt3ZWlnaHQrPXNvdXJjZS53ZWlnaHR9dGFyZ2V0LnZzPXNvdXJjZS52cy5jb25jYXQodGFyZ2V0LnZzKTt0YXJnZXQuYmFyeWNlbnRlcj1zdW0vd2VpZ2h0O3RhcmdldC53ZWlnaHQ9d2VpZ2h0O3RhcmdldC5pPU1hdGgubWluKHNvdXJjZS5pLHRhcmdldC5pKTtzb3VyY2UubWVyZ2VkPXRydWV9fSx7Ii4uL2xvZGFzaCI6MTB9XSwyMDpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7dmFyIF89cmVxdWlyZSgiLi4vbG9kYXNoIiksYmFyeWNlbnRlcj1yZXF1aXJlKCIuL2JhcnljZW50ZXIiKSxyZXNvbHZlQ29uZmxpY3RzPXJlcXVpcmUoIi4vcmVzb2x2ZS1jb25mbGljdHMiKSxzb3J0PXJlcXVpcmUoIi4vc29ydCIpO21vZHVsZS5leHBvcnRzPQpzb3J0U3ViZ3JhcGg7ZnVuY3Rpb24gc29ydFN1YmdyYXBoKGcsdixjZyxiaWFzUmlnaHQpe3ZhciBtb3ZhYmxlPWcuY2hpbGRyZW4odiksbm9kZT1nLm5vZGUodiksYmw9bm9kZT9ub2RlLmJvcmRlckxlZnQ6dW5kZWZpbmVkLGJyPW5vZGU/bm9kZS5ib3JkZXJSaWdodDp1bmRlZmluZWQsc3ViZ3JhcGhzPXt9O2lmKGJsKW1vdmFibGU9Xy5maWx0ZXIobW92YWJsZSxmdW5jdGlvbih3KXtyZXR1cm4gdyE9PWJsJiZ3IT09YnJ9KTt2YXIgYmFyeWNlbnRlcnM9YmFyeWNlbnRlcihnLG1vdmFibGUpO18uZm9yRWFjaChiYXJ5Y2VudGVycyxmdW5jdGlvbihlbnRyeSl7aWYoZy5jaGlsZHJlbihlbnRyeS52KS5sZW5ndGgpe3ZhciBzdWJncmFwaFJlc3VsdD1zb3J0U3ViZ3JhcGgoZyxlbnRyeS52LGNnLGJpYXNSaWdodCk7c3ViZ3JhcGhzW2VudHJ5LnZdPXN1YmdyYXBoUmVzdWx0O2lmKF8uaGFzKHN1YmdyYXBoUmVzdWx0LCJiYXJ5Y2VudGVyIikpbWVyZ2VCYXJ5Y2VudGVycyhlbnRyeSwKc3ViZ3JhcGhSZXN1bHQpfX0pO3ZhciBlbnRyaWVzPXJlc29sdmVDb25mbGljdHMoYmFyeWNlbnRlcnMsY2cpO2V4cGFuZFN1YmdyYXBocyhlbnRyaWVzLHN1YmdyYXBocyk7dmFyIHJlc3VsdD1zb3J0KGVudHJpZXMsYmlhc1JpZ2h0KTtpZihibCl7cmVzdWx0LnZzPV8uZmxhdHRlbihbYmwscmVzdWx0LnZzLGJyXSx0cnVlKTtpZihnLnByZWRlY2Vzc29ycyhibCkubGVuZ3RoKXt2YXIgYmxQcmVkPWcubm9kZShnLnByZWRlY2Vzc29ycyhibClbMF0pLGJyUHJlZD1nLm5vZGUoZy5wcmVkZWNlc3NvcnMoYnIpWzBdKTtpZighXy5oYXMocmVzdWx0LCJiYXJ5Y2VudGVyIikpe3Jlc3VsdC5iYXJ5Y2VudGVyPTA7cmVzdWx0LndlaWdodD0wfXJlc3VsdC5iYXJ5Y2VudGVyPShyZXN1bHQuYmFyeWNlbnRlcipyZXN1bHQud2VpZ2h0K2JsUHJlZC5vcmRlciticlByZWQub3JkZXIpLyhyZXN1bHQud2VpZ2h0KzIpO3Jlc3VsdC53ZWlnaHQrPTJ9fXJldHVybiByZXN1bHR9ZnVuY3Rpb24gZXhwYW5kU3ViZ3JhcGhzKGVudHJpZXMsCnN1YmdyYXBocyl7Xy5mb3JFYWNoKGVudHJpZXMsZnVuY3Rpb24oZW50cnkpe2VudHJ5LnZzPV8uZmxhdHRlbihlbnRyeS52cy5tYXAoZnVuY3Rpb24odil7aWYoc3ViZ3JhcGhzW3ZdKXJldHVybiBzdWJncmFwaHNbdl0udnM7cmV0dXJuIHZ9KSx0cnVlKX0pfWZ1bmN0aW9uIG1lcmdlQmFyeWNlbnRlcnModGFyZ2V0LG90aGVyKXtpZighXy5pc1VuZGVmaW5lZCh0YXJnZXQuYmFyeWNlbnRlcikpe3RhcmdldC5iYXJ5Y2VudGVyPSh0YXJnZXQuYmFyeWNlbnRlcip0YXJnZXQud2VpZ2h0K290aGVyLmJhcnljZW50ZXIqb3RoZXIud2VpZ2h0KS8odGFyZ2V0LndlaWdodCtvdGhlci53ZWlnaHQpO3RhcmdldC53ZWlnaHQrPW90aGVyLndlaWdodH1lbHNle3RhcmdldC5iYXJ5Y2VudGVyPW90aGVyLmJhcnljZW50ZXI7dGFyZ2V0LndlaWdodD1vdGhlci53ZWlnaHR9fX0seyIuLi9sb2Rhc2giOjEwLCIuL2JhcnljZW50ZXIiOjE0LCIuL3Jlc29sdmUtY29uZmxpY3RzIjoxOSwiLi9zb3J0IjoyMX1dLAoyMTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7dmFyIF89cmVxdWlyZSgiLi4vbG9kYXNoIiksdXRpbD1yZXF1aXJlKCIuLi91dGlsIik7bW9kdWxlLmV4cG9ydHM9c29ydDtmdW5jdGlvbiBzb3J0KGVudHJpZXMsYmlhc1JpZ2h0KXt2YXIgcGFydHM9dXRpbC5wYXJ0aXRpb24oZW50cmllcyxmdW5jdGlvbihlbnRyeSl7cmV0dXJuIF8uaGFzKGVudHJ5LCJiYXJ5Y2VudGVyIil9KTt2YXIgc29ydGFibGU9cGFydHMubGhzLHVuc29ydGFibGU9Xy5zb3J0QnkocGFydHMucmhzLGZ1bmN0aW9uKGVudHJ5KXtyZXR1cm4tZW50cnkuaX0pLHZzPVtdLHN1bT0wLHdlaWdodD0wLHZzSW5kZXg9MDtzb3J0YWJsZS5zb3J0KGNvbXBhcmVXaXRoQmlhcyghIWJpYXNSaWdodCkpO3ZzSW5kZXg9Y29uc3VtZVVuc29ydGFibGUodnMsdW5zb3J0YWJsZSx2c0luZGV4KTtfLmZvckVhY2goc29ydGFibGUsZnVuY3Rpb24oZW50cnkpe3ZzSW5kZXgrPWVudHJ5LnZzLmxlbmd0aDt2cy5wdXNoKGVudHJ5LnZzKTsKc3VtKz1lbnRyeS5iYXJ5Y2VudGVyKmVudHJ5LndlaWdodDt3ZWlnaHQrPWVudHJ5LndlaWdodDt2c0luZGV4PWNvbnN1bWVVbnNvcnRhYmxlKHZzLHVuc29ydGFibGUsdnNJbmRleCl9KTt2YXIgcmVzdWx0PXt2czpfLmZsYXR0ZW4odnMsdHJ1ZSl9O2lmKHdlaWdodCl7cmVzdWx0LmJhcnljZW50ZXI9c3VtL3dlaWdodDtyZXN1bHQud2VpZ2h0PXdlaWdodH1yZXR1cm4gcmVzdWx0fWZ1bmN0aW9uIGNvbnN1bWVVbnNvcnRhYmxlKHZzLHVuc29ydGFibGUsaW5kZXgpe3ZhciBsYXN0O3doaWxlKHVuc29ydGFibGUubGVuZ3RoJiYobGFzdD1fLmxhc3QodW5zb3J0YWJsZSkpLmk8PWluZGV4KXt1bnNvcnRhYmxlLnBvcCgpO3ZzLnB1c2gobGFzdC52cyk7aW5kZXgrK31yZXR1cm4gaW5kZXh9ZnVuY3Rpb24gY29tcGFyZVdpdGhCaWFzKGJpYXMpe3JldHVybiBmdW5jdGlvbihlbnRyeVYsZW50cnlXKXtpZihlbnRyeVYuYmFyeWNlbnRlcjxlbnRyeVcuYmFyeWNlbnRlcilyZXR1cm4tMTtlbHNlIGlmKGVudHJ5Vi5iYXJ5Y2VudGVyPgplbnRyeVcuYmFyeWNlbnRlcilyZXR1cm4gMTtyZXR1cm4hYmlhcz9lbnRyeVYuaS1lbnRyeVcuaTplbnRyeVcuaS1lbnRyeVYuaX19fSx7Ii4uL2xvZGFzaCI6MTAsIi4uL3V0aWwiOjI5fV0sMjI6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe3ZhciBfPXJlcXVpcmUoIi4vbG9kYXNoIik7bW9kdWxlLmV4cG9ydHM9cGFyZW50RHVtbXlDaGFpbnM7ZnVuY3Rpb24gcGFyZW50RHVtbXlDaGFpbnMoZyl7dmFyIHBvc3RvcmRlck51bXM9cG9zdG9yZGVyKGcpO18uZm9yRWFjaChnLmdyYXBoKCkuZHVtbXlDaGFpbnMsZnVuY3Rpb24odil7dmFyIG5vZGU9Zy5ub2RlKHYpLGVkZ2VPYmo9bm9kZS5lZGdlT2JqLHBhdGhEYXRhPWZpbmRQYXRoKGcscG9zdG9yZGVyTnVtcyxlZGdlT2JqLnYsZWRnZU9iai53KSxwYXRoPXBhdGhEYXRhLnBhdGgsbGNhPXBhdGhEYXRhLmxjYSxwYXRoSWR4PTAscGF0aFY9cGF0aFtwYXRoSWR4XSxhc2NlbmRpbmc9dHJ1ZTt3aGlsZSh2IT09ZWRnZU9iai53KXtub2RlPQpnLm5vZGUodik7aWYoYXNjZW5kaW5nKXt3aGlsZSgocGF0aFY9cGF0aFtwYXRoSWR4XSkhPT1sY2EmJmcubm9kZShwYXRoVikubWF4UmFuazxub2RlLnJhbmspcGF0aElkeCsrO2lmKHBhdGhWPT09bGNhKWFzY2VuZGluZz1mYWxzZX1pZighYXNjZW5kaW5nKXt3aGlsZShwYXRoSWR4PHBhdGgubGVuZ3RoLTEmJmcubm9kZShwYXRoVj1wYXRoW3BhdGhJZHgrMV0pLm1pblJhbms8PW5vZGUucmFuaylwYXRoSWR4Kys7cGF0aFY9cGF0aFtwYXRoSWR4XX1nLnNldFBhcmVudCh2LHBhdGhWKTt2PWcuc3VjY2Vzc29ycyh2KVswXX19KX1mdW5jdGlvbiBmaW5kUGF0aChnLHBvc3RvcmRlck51bXMsdix3KXt2YXIgdlBhdGg9W10sd1BhdGg9W10sbG93PU1hdGgubWluKHBvc3RvcmRlck51bXNbdl0ubG93LHBvc3RvcmRlck51bXNbd10ubG93KSxsaW09TWF0aC5tYXgocG9zdG9yZGVyTnVtc1t2XS5saW0scG9zdG9yZGVyTnVtc1t3XS5saW0pLHBhcmVudCxsY2E7cGFyZW50PXY7ZG97cGFyZW50PQpnLnBhcmVudChwYXJlbnQpO3ZQYXRoLnB1c2gocGFyZW50KX13aGlsZShwYXJlbnQmJihwb3N0b3JkZXJOdW1zW3BhcmVudF0ubG93Pmxvd3x8bGltPnBvc3RvcmRlck51bXNbcGFyZW50XS5saW0pKTtsY2E9cGFyZW50O3BhcmVudD13O3doaWxlKChwYXJlbnQ9Zy5wYXJlbnQocGFyZW50KSkhPT1sY2Epd1BhdGgucHVzaChwYXJlbnQpO3JldHVybntwYXRoOnZQYXRoLmNvbmNhdCh3UGF0aC5yZXZlcnNlKCkpLGxjYTpsY2F9fWZ1bmN0aW9uIHBvc3RvcmRlcihnKXt2YXIgcmVzdWx0PXt9LGxpbT0wO2Z1bmN0aW9uIGRmcyh2KXt2YXIgbG93PWxpbTtfLmZvckVhY2goZy5jaGlsZHJlbih2KSxkZnMpO3Jlc3VsdFt2XT17bG93OmxvdyxsaW06bGltKyt9fV8uZm9yRWFjaChnLmNoaWxkcmVuKCksZGZzKTtyZXR1cm4gcmVzdWx0fX0seyIuL2xvZGFzaCI6MTB9XSwyMzpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7dmFyIF89cmVxdWlyZSgiLi4vbG9kYXNoIiksR3JhcGg9CnJlcXVpcmUoIi4uL2dyYXBobGliIikuR3JhcGgsdXRpbD1yZXF1aXJlKCIuLi91dGlsIik7bW9kdWxlLmV4cG9ydHM9e3Bvc2l0aW9uWDpwb3NpdGlvblgsZmluZFR5cGUxQ29uZmxpY3RzOmZpbmRUeXBlMUNvbmZsaWN0cyxmaW5kVHlwZTJDb25mbGljdHM6ZmluZFR5cGUyQ29uZmxpY3RzLGFkZENvbmZsaWN0OmFkZENvbmZsaWN0LGhhc0NvbmZsaWN0Omhhc0NvbmZsaWN0LHZlcnRpY2FsQWxpZ25tZW50OnZlcnRpY2FsQWxpZ25tZW50LGhvcml6b250YWxDb21wYWN0aW9uOmhvcml6b250YWxDb21wYWN0aW9uLGFsaWduQ29vcmRpbmF0ZXM6YWxpZ25Db29yZGluYXRlcyxmaW5kU21hbGxlc3RXaWR0aEFsaWdubWVudDpmaW5kU21hbGxlc3RXaWR0aEFsaWdubWVudCxiYWxhbmNlOmJhbGFuY2V9O2Z1bmN0aW9uIGZpbmRUeXBlMUNvbmZsaWN0cyhnLGxheWVyaW5nKXt2YXIgY29uZmxpY3RzPXt9O2Z1bmN0aW9uIHZpc2l0TGF5ZXIocHJldkxheWVyLGxheWVyKXt2YXIgazA9MCxzY2FuUG9zPQowLHByZXZMYXllckxlbmd0aD1wcmV2TGF5ZXIubGVuZ3RoLGxhc3ROb2RlPV8ubGFzdChsYXllcik7Xy5mb3JFYWNoKGxheWVyLGZ1bmN0aW9uKHYsaSl7dmFyIHc9ZmluZE90aGVySW5uZXJTZWdtZW50Tm9kZShnLHYpLGsxPXc/Zy5ub2RlKHcpLm9yZGVyOnByZXZMYXllckxlbmd0aDtpZih3fHx2PT09bGFzdE5vZGUpe18uZm9yRWFjaChsYXllci5zbGljZShzY2FuUG9zLGkrMSksZnVuY3Rpb24oc2Nhbk5vZGUpe18uZm9yRWFjaChnLnByZWRlY2Vzc29ycyhzY2FuTm9kZSksZnVuY3Rpb24odSl7dmFyIHVMYWJlbD1nLm5vZGUodSksdVBvcz11TGFiZWwub3JkZXI7aWYoKHVQb3M8azB8fGsxPHVQb3MpJiYhKHVMYWJlbC5kdW1teSYmZy5ub2RlKHNjYW5Ob2RlKS5kdW1teSkpYWRkQ29uZmxpY3QoY29uZmxpY3RzLHUsc2Nhbk5vZGUpfSl9KTtzY2FuUG9zPWkrMTtrMD1rMX19KTtyZXR1cm4gbGF5ZXJ9Xy5yZWR1Y2UobGF5ZXJpbmcsdmlzaXRMYXllcik7cmV0dXJuIGNvbmZsaWN0c30KZnVuY3Rpb24gZmluZFR5cGUyQ29uZmxpY3RzKGcsbGF5ZXJpbmcpe3ZhciBjb25mbGljdHM9e307ZnVuY3Rpb24gc2Nhbihzb3V0aCxzb3V0aFBvcyxzb3V0aEVuZCxwcmV2Tm9ydGhCb3JkZXIsbmV4dE5vcnRoQm9yZGVyKXt2YXIgdjtfLmZvckVhY2goXy5yYW5nZShzb3V0aFBvcyxzb3V0aEVuZCksZnVuY3Rpb24oaSl7dj1zb3V0aFtpXTtpZihnLm5vZGUodikuZHVtbXkpXy5mb3JFYWNoKGcucHJlZGVjZXNzb3JzKHYpLGZ1bmN0aW9uKHUpe3ZhciB1Tm9kZT1nLm5vZGUodSk7aWYodU5vZGUuZHVtbXkmJih1Tm9kZS5vcmRlcjxwcmV2Tm9ydGhCb3JkZXJ8fHVOb2RlLm9yZGVyPm5leHROb3J0aEJvcmRlcikpYWRkQ29uZmxpY3QoY29uZmxpY3RzLHUsdil9KX0pfWZ1bmN0aW9uIHZpc2l0TGF5ZXIobm9ydGgsc291dGgpe3ZhciBwcmV2Tm9ydGhQb3M9LTEsbmV4dE5vcnRoUG9zLHNvdXRoUG9zPTA7Xy5mb3JFYWNoKHNvdXRoLGZ1bmN0aW9uKHYsc291dGhMb29rYWhlYWQpe2lmKGcubm9kZSh2KS5kdW1teT09PQoiYm9yZGVyIil7dmFyIHByZWRlY2Vzc29ycz1nLnByZWRlY2Vzc29ycyh2KTtpZihwcmVkZWNlc3NvcnMubGVuZ3RoKXtuZXh0Tm9ydGhQb3M9Zy5ub2RlKHByZWRlY2Vzc29yc1swXSkub3JkZXI7c2Nhbihzb3V0aCxzb3V0aFBvcyxzb3V0aExvb2thaGVhZCxwcmV2Tm9ydGhQb3MsbmV4dE5vcnRoUG9zKTtzb3V0aFBvcz1zb3V0aExvb2thaGVhZDtwcmV2Tm9ydGhQb3M9bmV4dE5vcnRoUG9zfX1zY2FuKHNvdXRoLHNvdXRoUG9zLHNvdXRoLmxlbmd0aCxuZXh0Tm9ydGhQb3Msbm9ydGgubGVuZ3RoKX0pO3JldHVybiBzb3V0aH1fLnJlZHVjZShsYXllcmluZyx2aXNpdExheWVyKTtyZXR1cm4gY29uZmxpY3RzfWZ1bmN0aW9uIGZpbmRPdGhlcklubmVyU2VnbWVudE5vZGUoZyx2KXtpZihnLm5vZGUodikuZHVtbXkpcmV0dXJuIF8uZmluZChnLnByZWRlY2Vzc29ycyh2KSxmdW5jdGlvbih1KXtyZXR1cm4gZy5ub2RlKHUpLmR1bW15fSl9ZnVuY3Rpb24gYWRkQ29uZmxpY3QoY29uZmxpY3RzLAp2LHcpe2lmKHY+dyl7dmFyIHRtcD12O3Y9dzt3PXRtcH12YXIgY29uZmxpY3RzVj1jb25mbGljdHNbdl07aWYoIWNvbmZsaWN0c1YpY29uZmxpY3RzW3ZdPWNvbmZsaWN0c1Y9e307Y29uZmxpY3RzVlt3XT10cnVlfWZ1bmN0aW9uIGhhc0NvbmZsaWN0KGNvbmZsaWN0cyx2LHcpe2lmKHY+dyl7dmFyIHRtcD12O3Y9dzt3PXRtcH1yZXR1cm4gXy5oYXMoY29uZmxpY3RzW3ZdLHcpfWZ1bmN0aW9uIHZlcnRpY2FsQWxpZ25tZW50KGcsbGF5ZXJpbmcsY29uZmxpY3RzLG5laWdoYm9yRm4pe3ZhciByb290PXt9LGFsaWduPXt9LHBvcz17fTtfLmZvckVhY2gobGF5ZXJpbmcsZnVuY3Rpb24obGF5ZXIpe18uZm9yRWFjaChsYXllcixmdW5jdGlvbih2LG9yZGVyKXtyb290W3ZdPXY7YWxpZ25bdl09djtwb3Nbdl09b3JkZXJ9KX0pO18uZm9yRWFjaChsYXllcmluZyxmdW5jdGlvbihsYXllcil7dmFyIHByZXZJZHg9LTE7Xy5mb3JFYWNoKGxheWVyLGZ1bmN0aW9uKHYpe3ZhciB3cz1uZWlnaGJvckZuKHYpOwppZih3cy5sZW5ndGgpe3dzPV8uc29ydEJ5KHdzLGZ1bmN0aW9uKHcpe3JldHVybiBwb3Nbd119KTt2YXIgbXA9KHdzLmxlbmd0aC0xKS8yO2Zvcih2YXIgaT1NYXRoLmZsb29yKG1wKSxpbD1NYXRoLmNlaWwobXApO2k8PWlsOysraSl7dmFyIHc9d3NbaV07aWYoYWxpZ25bdl09PT12JiZwcmV2SWR4PHBvc1t3XSYmIWhhc0NvbmZsaWN0KGNvbmZsaWN0cyx2LHcpKXthbGlnblt3XT12O2FsaWduW3ZdPXJvb3Rbdl09cm9vdFt3XTtwcmV2SWR4PXBvc1t3XX19fX0pfSk7cmV0dXJue3Jvb3Q6cm9vdCxhbGlnbjphbGlnbn19ZnVuY3Rpb24gaG9yaXpvbnRhbENvbXBhY3Rpb24oZyxsYXllcmluZyxyb290LGFsaWduLHJldmVyc2VTZXApe3ZhciB4cz17fSxibG9ja0c9YnVpbGRCbG9ja0dyYXBoKGcsbGF5ZXJpbmcscm9vdCxyZXZlcnNlU2VwKSxib3JkZXJUeXBlPXJldmVyc2VTZXA/ImJvcmRlckxlZnQiOiJib3JkZXJSaWdodCI7ZnVuY3Rpb24gaXRlcmF0ZShzZXRYc0Z1bmMsbmV4dE5vZGVzRnVuYyl7dmFyIHN0YWNrPQpibG9ja0cubm9kZXMoKTt2YXIgZWxlbT1zdGFjay5wb3AoKTt2YXIgdmlzaXRlZD17fTt3aGlsZShlbGVtKXtpZih2aXNpdGVkW2VsZW1dKXNldFhzRnVuYyhlbGVtKTtlbHNle3Zpc2l0ZWRbZWxlbV09dHJ1ZTtzdGFjay5wdXNoKGVsZW0pO3N0YWNrPXN0YWNrLmNvbmNhdChuZXh0Tm9kZXNGdW5jKGVsZW0pKX1lbGVtPXN0YWNrLnBvcCgpfX1mdW5jdGlvbiBwYXNzMShlbGVtKXt4c1tlbGVtXT1ibG9ja0cuaW5FZGdlcyhlbGVtKS5yZWR1Y2UoZnVuY3Rpb24oYWNjLGUpe3JldHVybiBNYXRoLm1heChhY2MseHNbZS52XStibG9ja0cuZWRnZShlKSl9LDApfWZ1bmN0aW9uIHBhc3MyKGVsZW0pe3ZhciBtaW49YmxvY2tHLm91dEVkZ2VzKGVsZW0pLnJlZHVjZShmdW5jdGlvbihhY2MsZSl7cmV0dXJuIE1hdGgubWluKGFjYyx4c1tlLnddLWJsb2NrRy5lZGdlKGUpKX0sTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKTt2YXIgbm9kZT1nLm5vZGUoZWxlbSk7aWYobWluIT09TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZJiYKbm9kZS5ib3JkZXJUeXBlIT09Ym9yZGVyVHlwZSl4c1tlbGVtXT1NYXRoLm1heCh4c1tlbGVtXSxtaW4pfWl0ZXJhdGUocGFzczEsXy5iaW5kKGJsb2NrRy5wcmVkZWNlc3NvcnMsYmxvY2tHKSk7aXRlcmF0ZShwYXNzMixfLmJpbmQoYmxvY2tHLnN1Y2Nlc3NvcnMsYmxvY2tHKSk7Xy5mb3JFYWNoKGFsaWduLGZ1bmN0aW9uKHYpe3hzW3ZdPXhzW3Jvb3Rbdl1dfSk7cmV0dXJuIHhzfWZ1bmN0aW9uIGJ1aWxkQmxvY2tHcmFwaChnLGxheWVyaW5nLHJvb3QscmV2ZXJzZVNlcCl7dmFyIGJsb2NrR3JhcGg9bmV3IEdyYXBoLGdyYXBoTGFiZWw9Zy5ncmFwaCgpLHNlcEZuPXNlcChncmFwaExhYmVsLm5vZGVzZXAsZ3JhcGhMYWJlbC5lZGdlc2VwLHJldmVyc2VTZXApO18uZm9yRWFjaChsYXllcmluZyxmdW5jdGlvbihsYXllcil7dmFyIHU7Xy5mb3JFYWNoKGxheWVyLGZ1bmN0aW9uKHYpe3ZhciB2Um9vdD1yb290W3ZdO2Jsb2NrR3JhcGguc2V0Tm9kZSh2Um9vdCk7aWYodSl7dmFyIHVSb290PQpyb290W3VdLHByZXZNYXg9YmxvY2tHcmFwaC5lZGdlKHVSb290LHZSb290KTtibG9ja0dyYXBoLnNldEVkZ2UodVJvb3QsdlJvb3QsTWF0aC5tYXgoc2VwRm4oZyx2LHUpLHByZXZNYXh8fDApKX11PXZ9KX0pO3JldHVybiBibG9ja0dyYXBofWZ1bmN0aW9uIGZpbmRTbWFsbGVzdFdpZHRoQWxpZ25tZW50KGcseHNzKXtyZXR1cm4gXy5taW5CeShfLnZhbHVlcyh4c3MpLGZ1bmN0aW9uKHhzKXt2YXIgbWF4PU51bWJlci5ORUdBVElWRV9JTkZJTklUWTt2YXIgbWluPU51bWJlci5QT1NJVElWRV9JTkZJTklUWTtfLmZvckluKHhzLGZ1bmN0aW9uKHgsdil7dmFyIGhhbGZXaWR0aD13aWR0aChnLHYpLzI7bWF4PU1hdGgubWF4KHgraGFsZldpZHRoLG1heCk7bWluPU1hdGgubWluKHgtaGFsZldpZHRoLG1pbil9KTtyZXR1cm4gbWF4LW1pbn0pfWZ1bmN0aW9uIGFsaWduQ29vcmRpbmF0ZXMoeHNzLGFsaWduVG8pe3ZhciBhbGlnblRvVmFscz1fLnZhbHVlcyhhbGlnblRvKSxhbGlnblRvTWluPQpfLm1pbihhbGlnblRvVmFscyksYWxpZ25Ub01heD1fLm1heChhbGlnblRvVmFscyk7Xy5mb3JFYWNoKFsidSIsImQiXSxmdW5jdGlvbih2ZXJ0KXtfLmZvckVhY2goWyJsIiwiciJdLGZ1bmN0aW9uKGhvcml6KXt2YXIgYWxpZ25tZW50PXZlcnQraG9yaXoseHM9eHNzW2FsaWdubWVudF0sZGVsdGE7aWYoeHM9PT1hbGlnblRvKXJldHVybjt2YXIgeHNWYWxzPV8udmFsdWVzKHhzKTtkZWx0YT1ob3Jpej09PSJsIj9hbGlnblRvTWluLV8ubWluKHhzVmFscyk6YWxpZ25Ub01heC1fLm1heCh4c1ZhbHMpO2lmKGRlbHRhKXhzc1thbGlnbm1lbnRdPV8ubWFwVmFsdWVzKHhzLGZ1bmN0aW9uKHgpe3JldHVybiB4K2RlbHRhfSl9KX0pfWZ1bmN0aW9uIGJhbGFuY2UoeHNzLGFsaWduKXtyZXR1cm4gXy5tYXBWYWx1ZXMoeHNzLnVsLGZ1bmN0aW9uKGlnbm9yZSx2KXtpZihhbGlnbilyZXR1cm4geHNzW2FsaWduLnRvTG93ZXJDYXNlKCldW3ZdO2Vsc2V7dmFyIHhzPV8uc29ydEJ5KF8ubWFwKHhzcywKdikpO3JldHVybih4c1sxXSt4c1syXSkvMn19KX1mdW5jdGlvbiBwb3NpdGlvblgoZyl7dmFyIGxheWVyaW5nPXV0aWwuYnVpbGRMYXllck1hdHJpeChnKSxjb25mbGljdHM9Xy5tZXJnZShmaW5kVHlwZTFDb25mbGljdHMoZyxsYXllcmluZyksZmluZFR5cGUyQ29uZmxpY3RzKGcsbGF5ZXJpbmcpKTt2YXIgeHNzPXt9LGFkanVzdGVkTGF5ZXJpbmc7Xy5mb3JFYWNoKFsidSIsImQiXSxmdW5jdGlvbih2ZXJ0KXthZGp1c3RlZExheWVyaW5nPXZlcnQ9PT0idSI/bGF5ZXJpbmc6Xy52YWx1ZXMobGF5ZXJpbmcpLnJldmVyc2UoKTtfLmZvckVhY2goWyJsIiwiciJdLGZ1bmN0aW9uKGhvcml6KXtpZihob3Jpej09PSJyIilhZGp1c3RlZExheWVyaW5nPV8ubWFwKGFkanVzdGVkTGF5ZXJpbmcsZnVuY3Rpb24oaW5uZXIpe3JldHVybiBfLnZhbHVlcyhpbm5lcikucmV2ZXJzZSgpfSk7dmFyIG5laWdoYm9yRm49Xy5iaW5kKHZlcnQ9PT0idSI/Zy5wcmVkZWNlc3NvcnM6Zy5zdWNjZXNzb3JzLApnKTt2YXIgYWxpZ249dmVydGljYWxBbGlnbm1lbnQoZyxhZGp1c3RlZExheWVyaW5nLGNvbmZsaWN0cyxuZWlnaGJvckZuKTt2YXIgeHM9aG9yaXpvbnRhbENvbXBhY3Rpb24oZyxhZGp1c3RlZExheWVyaW5nLGFsaWduLnJvb3QsYWxpZ24uYWxpZ24saG9yaXo9PT0iciIpO2lmKGhvcml6PT09InIiKXhzPV8ubWFwVmFsdWVzKHhzLGZ1bmN0aW9uKHgpe3JldHVybi14fSk7eHNzW3ZlcnQraG9yaXpdPXhzfSl9KTt2YXIgc21hbGxlc3RXaWR0aD1maW5kU21hbGxlc3RXaWR0aEFsaWdubWVudChnLHhzcyk7YWxpZ25Db29yZGluYXRlcyh4c3Msc21hbGxlc3RXaWR0aCk7cmV0dXJuIGJhbGFuY2UoeHNzLGcuZ3JhcGgoKS5hbGlnbil9ZnVuY3Rpb24gc2VwKG5vZGVTZXAsZWRnZVNlcCxyZXZlcnNlU2VwKXtyZXR1cm4gZnVuY3Rpb24oZyx2LHcpe3ZhciB2TGFiZWw9Zy5ub2RlKHYpLHdMYWJlbD1nLm5vZGUodyksc3VtPTAsZGVsdGE7c3VtKz12TGFiZWwud2lkdGgvMjtpZihfLmhhcyh2TGFiZWwsCiJsYWJlbHBvcyIpKXN3aXRjaCh2TGFiZWwubGFiZWxwb3MudG9Mb3dlckNhc2UoKSl7Y2FzZSAibCI6ZGVsdGE9LXZMYWJlbC53aWR0aC8yO2JyZWFrO2Nhc2UgInIiOmRlbHRhPXZMYWJlbC53aWR0aC8yO2JyZWFrfWlmKGRlbHRhKXN1bSs9cmV2ZXJzZVNlcD9kZWx0YTotZGVsdGE7ZGVsdGE9MDtzdW0rPSh2TGFiZWwuZHVtbXk/ZWRnZVNlcDpub2RlU2VwKS8yO3N1bSs9KHdMYWJlbC5kdW1teT9lZGdlU2VwOm5vZGVTZXApLzI7c3VtKz13TGFiZWwud2lkdGgvMjtpZihfLmhhcyh3TGFiZWwsImxhYmVscG9zIikpc3dpdGNoKHdMYWJlbC5sYWJlbHBvcy50b0xvd2VyQ2FzZSgpKXtjYXNlICJsIjpkZWx0YT13TGFiZWwud2lkdGgvMjticmVhaztjYXNlICJyIjpkZWx0YT0td0xhYmVsLndpZHRoLzI7YnJlYWt9aWYoZGVsdGEpc3VtKz1yZXZlcnNlU2VwP2RlbHRhOi1kZWx0YTtkZWx0YT0wO3JldHVybiBzdW19fWZ1bmN0aW9uIHdpZHRoKGcsdil7cmV0dXJuIGcubm9kZSh2KS53aWR0aH0KfSx7Ii4uL2dyYXBobGliIjo3LCIuLi9sb2Rhc2giOjEwLCIuLi91dGlsIjoyOX1dLDI0OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXt2YXIgXz1yZXF1aXJlKCIuLi9sb2Rhc2giKSx1dGlsPXJlcXVpcmUoIi4uL3V0aWwiKSxwb3NpdGlvblg9cmVxdWlyZSgiLi9iayIpLnBvc2l0aW9uWDttb2R1bGUuZXhwb3J0cz1wb3NpdGlvbjtmdW5jdGlvbiBwb3NpdGlvbihnKXtnPXV0aWwuYXNOb25Db21wb3VuZEdyYXBoKGcpO3Bvc2l0aW9uWShnKTtfLmZvckVhY2gocG9zaXRpb25YKGcpLGZ1bmN0aW9uKHgsdil7Zy5ub2RlKHYpLng9eH0pfWZ1bmN0aW9uIHBvc2l0aW9uWShnKXt2YXIgbGF5ZXJpbmc9dXRpbC5idWlsZExheWVyTWF0cml4KGcpLHJhbmtTZXA9Zy5ncmFwaCgpLnJhbmtzZXAscHJldlk9MDtfLmZvckVhY2gobGF5ZXJpbmcsZnVuY3Rpb24obGF5ZXIpe3ZhciBtYXhIZWlnaHQ9Xy5tYXgoXy5tYXAobGF5ZXIsZnVuY3Rpb24odil7cmV0dXJuIGcubm9kZSh2KS5oZWlnaHR9KSk7Cl8uZm9yRWFjaChsYXllcixmdW5jdGlvbih2KXtnLm5vZGUodikueT1wcmV2WSttYXhIZWlnaHQvMn0pO3ByZXZZKz1tYXhIZWlnaHQrcmFua1NlcH0pfX0seyIuLi9sb2Rhc2giOjEwLCIuLi91dGlsIjoyOSwiLi9iayI6MjN9XSwyNTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7dmFyIF89cmVxdWlyZSgiLi4vbG9kYXNoIiksR3JhcGg9cmVxdWlyZSgiLi4vZ3JhcGhsaWIiKS5HcmFwaCxzbGFjaz1yZXF1aXJlKCIuL3V0aWwiKS5zbGFjazttb2R1bGUuZXhwb3J0cz1mZWFzaWJsZVRyZWU7ZnVuY3Rpb24gZmVhc2libGVUcmVlKGcpe3ZhciB0PW5ldyBHcmFwaCh7ZGlyZWN0ZWQ6ZmFsc2V9KTt2YXIgc3RhcnQ9Zy5ub2RlcygpWzBdLHNpemU9Zy5ub2RlQ291bnQoKTt0LnNldE5vZGUoc3RhcnQse30pO3ZhciBlZGdlLGRlbHRhO3doaWxlKHRpZ2h0VHJlZSh0LGcpPHNpemUpe2VkZ2U9ZmluZE1pblNsYWNrRWRnZSh0LGcpO2RlbHRhPXQuaGFzTm9kZShlZGdlLnYpPwpzbGFjayhnLGVkZ2UpOi1zbGFjayhnLGVkZ2UpO3NoaWZ0UmFua3ModCxnLGRlbHRhKX1yZXR1cm4gdH1mdW5jdGlvbiB0aWdodFRyZWUodCxnKXtmdW5jdGlvbiBkZnModil7Xy5mb3JFYWNoKGcubm9kZUVkZ2VzKHYpLGZ1bmN0aW9uKGUpe3ZhciBlZGdlVj1lLnYsdz12PT09ZWRnZVY/ZS53OmVkZ2VWO2lmKCF0Lmhhc05vZGUodykmJiFzbGFjayhnLGUpKXt0LnNldE5vZGUodyx7fSk7dC5zZXRFZGdlKHYsdyx7fSk7ZGZzKHcpfX0pfV8uZm9yRWFjaCh0Lm5vZGVzKCksZGZzKTtyZXR1cm4gdC5ub2RlQ291bnQoKX1mdW5jdGlvbiBmaW5kTWluU2xhY2tFZGdlKHQsZyl7cmV0dXJuIF8ubWluQnkoZy5lZGdlcygpLGZ1bmN0aW9uKGUpe2lmKHQuaGFzTm9kZShlLnYpIT09dC5oYXNOb2RlKGUudykpcmV0dXJuIHNsYWNrKGcsZSl9KX1mdW5jdGlvbiBzaGlmdFJhbmtzKHQsZyxkZWx0YSl7Xy5mb3JFYWNoKHQubm9kZXMoKSxmdW5jdGlvbih2KXtnLm5vZGUodikucmFuays9ZGVsdGF9KX0KfSx7Ii4uL2dyYXBobGliIjo3LCIuLi9sb2Rhc2giOjEwLCIuL3V0aWwiOjI4fV0sMjY6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe3ZhciByYW5rVXRpbD1yZXF1aXJlKCIuL3V0aWwiKSxsb25nZXN0UGF0aD1yYW5rVXRpbC5sb25nZXN0UGF0aCxmZWFzaWJsZVRyZWU9cmVxdWlyZSgiLi9mZWFzaWJsZS10cmVlIiksbmV0d29ya1NpbXBsZXg9cmVxdWlyZSgiLi9uZXR3b3JrLXNpbXBsZXgiKTttb2R1bGUuZXhwb3J0cz1yYW5rO2Z1bmN0aW9uIHJhbmsoZyl7c3dpdGNoKGcuZ3JhcGgoKS5yYW5rZXIpe2Nhc2UgIm5ldHdvcmstc2ltcGxleCI6bmV0d29ya1NpbXBsZXhSYW5rZXIoZyk7YnJlYWs7Y2FzZSAidGlnaHQtdHJlZSI6dGlnaHRUcmVlUmFua2VyKGcpO2JyZWFrO2Nhc2UgImxvbmdlc3QtcGF0aCI6bG9uZ2VzdFBhdGhSYW5rZXIoZyk7YnJlYWs7ZGVmYXVsdDpuZXR3b3JrU2ltcGxleFJhbmtlcihnKX19dmFyIGxvbmdlc3RQYXRoUmFua2VyPWxvbmdlc3RQYXRoOwpmdW5jdGlvbiB0aWdodFRyZWVSYW5rZXIoZyl7bG9uZ2VzdFBhdGgoZyk7ZmVhc2libGVUcmVlKGcpfWZ1bmN0aW9uIG5ldHdvcmtTaW1wbGV4UmFua2VyKGcpe25ldHdvcmtTaW1wbGV4KGcpfX0seyIuL2ZlYXNpYmxlLXRyZWUiOjI1LCIuL25ldHdvcmstc2ltcGxleCI6MjcsIi4vdXRpbCI6Mjh9XSwyNzpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7dmFyIF89cmVxdWlyZSgiLi4vbG9kYXNoIiksZmVhc2libGVUcmVlPXJlcXVpcmUoIi4vZmVhc2libGUtdHJlZSIpLHNsYWNrPXJlcXVpcmUoIi4vdXRpbCIpLnNsYWNrLGluaXRSYW5rPXJlcXVpcmUoIi4vdXRpbCIpLmxvbmdlc3RQYXRoLHByZW9yZGVyPXJlcXVpcmUoIi4uL2dyYXBobGliIikuYWxnLnByZW9yZGVyLHBvc3RvcmRlcj1yZXF1aXJlKCIuLi9ncmFwaGxpYiIpLmFsZy5wb3N0b3JkZXIsc2ltcGxpZnk9cmVxdWlyZSgiLi4vdXRpbCIpLnNpbXBsaWZ5O21vZHVsZS5leHBvcnRzPW5ldHdvcmtTaW1wbGV4OwpuZXR3b3JrU2ltcGxleC5pbml0TG93TGltVmFsdWVzPWluaXRMb3dMaW1WYWx1ZXM7bmV0d29ya1NpbXBsZXguaW5pdEN1dFZhbHVlcz1pbml0Q3V0VmFsdWVzO25ldHdvcmtTaW1wbGV4LmNhbGNDdXRWYWx1ZT1jYWxjQ3V0VmFsdWU7bmV0d29ya1NpbXBsZXgubGVhdmVFZGdlPWxlYXZlRWRnZTtuZXR3b3JrU2ltcGxleC5lbnRlckVkZ2U9ZW50ZXJFZGdlO25ldHdvcmtTaW1wbGV4LmV4Y2hhbmdlRWRnZXM9ZXhjaGFuZ2VFZGdlcztmdW5jdGlvbiBuZXR3b3JrU2ltcGxleChnKXtnPXNpbXBsaWZ5KGcpO2luaXRSYW5rKGcpO3ZhciB0PWZlYXNpYmxlVHJlZShnKTtpbml0TG93TGltVmFsdWVzKHQpO2luaXRDdXRWYWx1ZXModCxnKTt2YXIgZSxmO3doaWxlKGU9bGVhdmVFZGdlKHQpKXtmPWVudGVyRWRnZSh0LGcsZSk7ZXhjaGFuZ2VFZGdlcyh0LGcsZSxmKX19ZnVuY3Rpb24gaW5pdEN1dFZhbHVlcyh0LGcpe3ZhciB2cz1wb3N0b3JkZXIodCx0Lm5vZGVzKCkpO3ZzPXZzLnNsaWNlKDAsCnZzLmxlbmd0aC0xKTtfLmZvckVhY2godnMsZnVuY3Rpb24odil7YXNzaWduQ3V0VmFsdWUodCxnLHYpfSl9ZnVuY3Rpb24gYXNzaWduQ3V0VmFsdWUodCxnLGNoaWxkKXt2YXIgY2hpbGRMYWI9dC5ub2RlKGNoaWxkKSxwYXJlbnQ9Y2hpbGRMYWIucGFyZW50O3QuZWRnZShjaGlsZCxwYXJlbnQpLmN1dHZhbHVlPWNhbGNDdXRWYWx1ZSh0LGcsY2hpbGQpfWZ1bmN0aW9uIGNhbGNDdXRWYWx1ZSh0LGcsY2hpbGQpe3ZhciBjaGlsZExhYj10Lm5vZGUoY2hpbGQpLHBhcmVudD1jaGlsZExhYi5wYXJlbnQsY2hpbGRJc1RhaWw9dHJ1ZSxncmFwaEVkZ2U9Zy5lZGdlKGNoaWxkLHBhcmVudCksY3V0VmFsdWU9MDtpZighZ3JhcGhFZGdlKXtjaGlsZElzVGFpbD1mYWxzZTtncmFwaEVkZ2U9Zy5lZGdlKHBhcmVudCxjaGlsZCl9Y3V0VmFsdWU9Z3JhcGhFZGdlLndlaWdodDtfLmZvckVhY2goZy5ub2RlRWRnZXMoY2hpbGQpLGZ1bmN0aW9uKGUpe3ZhciBpc091dEVkZ2U9ZS52PT09Y2hpbGQsb3RoZXI9CmlzT3V0RWRnZT9lLnc6ZS52O2lmKG90aGVyIT09cGFyZW50KXt2YXIgcG9pbnRzVG9IZWFkPWlzT3V0RWRnZT09PWNoaWxkSXNUYWlsLG90aGVyV2VpZ2h0PWcuZWRnZShlKS53ZWlnaHQ7Y3V0VmFsdWUrPXBvaW50c1RvSGVhZD9vdGhlcldlaWdodDotb3RoZXJXZWlnaHQ7aWYoaXNUcmVlRWRnZSh0LGNoaWxkLG90aGVyKSl7dmFyIG90aGVyQ3V0VmFsdWU9dC5lZGdlKGNoaWxkLG90aGVyKS5jdXR2YWx1ZTtjdXRWYWx1ZSs9cG9pbnRzVG9IZWFkPy1vdGhlckN1dFZhbHVlOm90aGVyQ3V0VmFsdWV9fX0pO3JldHVybiBjdXRWYWx1ZX1mdW5jdGlvbiBpbml0TG93TGltVmFsdWVzKHRyZWUscm9vdCl7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXJvb3Q9dHJlZS5ub2RlcygpWzBdO2Rmc0Fzc2lnbkxvd0xpbSh0cmVlLHt9LDEscm9vdCl9ZnVuY3Rpb24gZGZzQXNzaWduTG93TGltKHRyZWUsdmlzaXRlZCxuZXh0TGltLHYscGFyZW50KXt2YXIgbG93PW5leHRMaW0sbGFiZWw9dHJlZS5ub2RlKHYpOwp2aXNpdGVkW3ZdPXRydWU7Xy5mb3JFYWNoKHRyZWUubmVpZ2hib3JzKHYpLGZ1bmN0aW9uKHcpe2lmKCFfLmhhcyh2aXNpdGVkLHcpKW5leHRMaW09ZGZzQXNzaWduTG93TGltKHRyZWUsdmlzaXRlZCxuZXh0TGltLHcsdil9KTtsYWJlbC5sb3c9bG93O2xhYmVsLmxpbT1uZXh0TGltKys7aWYocGFyZW50KWxhYmVsLnBhcmVudD1wYXJlbnQ7ZWxzZSBkZWxldGUgbGFiZWwucGFyZW50O3JldHVybiBuZXh0TGltfWZ1bmN0aW9uIGxlYXZlRWRnZSh0cmVlKXtyZXR1cm4gXy5maW5kKHRyZWUuZWRnZXMoKSxmdW5jdGlvbihlKXtyZXR1cm4gdHJlZS5lZGdlKGUpLmN1dHZhbHVlPDB9KX1mdW5jdGlvbiBlbnRlckVkZ2UodCxnLGVkZ2Upe3ZhciB2PWVkZ2Uudix3PWVkZ2UudztpZighZy5oYXNFZGdlKHYsdykpe3Y9ZWRnZS53O3c9ZWRnZS52fXZhciB2TGFiZWw9dC5ub2RlKHYpLHdMYWJlbD10Lm5vZGUodyksdGFpbExhYmVsPXZMYWJlbCxmbGlwPWZhbHNlO2lmKHZMYWJlbC5saW0+d0xhYmVsLmxpbSl7dGFpbExhYmVsPQp3TGFiZWw7ZmxpcD10cnVlfXZhciBjYW5kaWRhdGVzPV8uZmlsdGVyKGcuZWRnZXMoKSxmdW5jdGlvbihlZGdlKXtyZXR1cm4gZmxpcD09PWlzRGVzY2VuZGFudCh0LHQubm9kZShlZGdlLnYpLHRhaWxMYWJlbCkmJmZsaXAhPT1pc0Rlc2NlbmRhbnQodCx0Lm5vZGUoZWRnZS53KSx0YWlsTGFiZWwpfSk7cmV0dXJuIF8ubWluQnkoY2FuZGlkYXRlcyxmdW5jdGlvbihlZGdlKXtyZXR1cm4gc2xhY2soZyxlZGdlKX0pfWZ1bmN0aW9uIGV4Y2hhbmdlRWRnZXModCxnLGUsZil7dmFyIHY9ZS52LHc9ZS53O3QucmVtb3ZlRWRnZSh2LHcpO3Quc2V0RWRnZShmLnYsZi53LHt9KTtpbml0TG93TGltVmFsdWVzKHQpO2luaXRDdXRWYWx1ZXModCxnKTt1cGRhdGVSYW5rcyh0LGcpfWZ1bmN0aW9uIHVwZGF0ZVJhbmtzKHQsZyl7dmFyIHJvb3Q9Xy5maW5kKHQubm9kZXMoKSxmdW5jdGlvbih2KXtyZXR1cm4hZy5ub2RlKHYpLnBhcmVudH0pLHZzPXByZW9yZGVyKHQscm9vdCk7dnM9dnMuc2xpY2UoMSk7Cl8uZm9yRWFjaCh2cyxmdW5jdGlvbih2KXt2YXIgcGFyZW50PXQubm9kZSh2KS5wYXJlbnQsZWRnZT1nLmVkZ2UodixwYXJlbnQpLGZsaXBwZWQ9ZmFsc2U7aWYoIWVkZ2Upe2VkZ2U9Zy5lZGdlKHBhcmVudCx2KTtmbGlwcGVkPXRydWV9Zy5ub2RlKHYpLnJhbms9Zy5ub2RlKHBhcmVudCkucmFuaysoZmxpcHBlZD9lZGdlLm1pbmxlbjotZWRnZS5taW5sZW4pfSl9ZnVuY3Rpb24gaXNUcmVlRWRnZSh0cmVlLHUsdil7cmV0dXJuIHRyZWUuaGFzRWRnZSh1LHYpfWZ1bmN0aW9uIGlzRGVzY2VuZGFudCh0cmVlLHZMYWJlbCxyb290TGFiZWwpe3JldHVybiByb290TGFiZWwubG93PD12TGFiZWwubGltJiZ2TGFiZWwubGltPD1yb290TGFiZWwubGltfX0seyIuLi9ncmFwaGxpYiI6NywiLi4vbG9kYXNoIjoxMCwiLi4vdXRpbCI6MjksIi4vZmVhc2libGUtdHJlZSI6MjUsIi4vdXRpbCI6Mjh9XSwyODpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7dmFyIF89cmVxdWlyZSgiLi4vbG9kYXNoIik7Cm1vZHVsZS5leHBvcnRzPXtsb25nZXN0UGF0aDpsb25nZXN0UGF0aCxzbGFjazpzbGFja307ZnVuY3Rpb24gbG9uZ2VzdFBhdGgoZyl7dmFyIHZpc2l0ZWQ9e307ZnVuY3Rpb24gZGZzKHYpe3ZhciBsYWJlbD1nLm5vZGUodik7aWYoXy5oYXModmlzaXRlZCx2KSlyZXR1cm4gbGFiZWwucmFuazt2aXNpdGVkW3ZdPXRydWU7dmFyIHJhbms9Xy5taW5CeShfLm1hcChnLm91dEVkZ2VzKHYpLGZ1bmN0aW9uKGUpe3JldHVybiBkZnMoZS53KS1nLmVkZ2UoZSkubWlubGVufSkpO2lmKHJhbms9PT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFl8fHJhbms9PT11bmRlZmluZWR8fHJhbms9PT1udWxsKXJhbms9MDtyZXR1cm4gbGFiZWwucmFuaz1yYW5rfV8uZm9yRWFjaChnLnNvdXJjZXMoKSxkZnMpfWZ1bmN0aW9uIHNsYWNrKGcsZSl7cmV0dXJuIGcubm9kZShlLncpLnJhbmstZy5ub2RlKGUudikucmFuay1nLmVkZ2UoZSkubWlubGVufX0seyIuLi9sb2Rhc2giOjEwfV0sMjk6W2Z1bmN0aW9uKHJlcXVpcmUsCm1vZHVsZSxleHBvcnRzKXt2YXIgXz1yZXF1aXJlKCIuL2xvZGFzaCIpLEdyYXBoPXJlcXVpcmUoIi4vZ3JhcGhsaWIiKS5HcmFwaDttb2R1bGUuZXhwb3J0cz17YWRkRHVtbXlOb2RlOmFkZER1bW15Tm9kZSxzaW1wbGlmeTpzaW1wbGlmeSxhc05vbkNvbXBvdW5kR3JhcGg6YXNOb25Db21wb3VuZEdyYXBoLHN1Y2Nlc3NvcldlaWdodHM6c3VjY2Vzc29yV2VpZ2h0cyxwcmVkZWNlc3NvcldlaWdodHM6cHJlZGVjZXNzb3JXZWlnaHRzLGludGVyc2VjdFJlY3Q6aW50ZXJzZWN0UmVjdCxidWlsZExheWVyTWF0cml4OmJ1aWxkTGF5ZXJNYXRyaXgsbm9ybWFsaXplUmFua3M6bm9ybWFsaXplUmFua3MscmVtb3ZlRW1wdHlSYW5rczpyZW1vdmVFbXB0eVJhbmtzLGFkZEJvcmRlck5vZGU6YWRkQm9yZGVyTm9kZSxtYXhSYW5rOm1heFJhbmsscGFydGl0aW9uOnBhcnRpdGlvbix0aW1lOnRpbWUsbm90aW1lOm5vdGltZX07ZnVuY3Rpb24gYWRkRHVtbXlOb2RlKGcsdHlwZSxhdHRycyxuYW1lKXt2YXIgdjsKZG8gdj1fLnVuaXF1ZUlkKG5hbWUpO3doaWxlKGcuaGFzTm9kZSh2KSk7YXR0cnMuZHVtbXk9dHlwZTtnLnNldE5vZGUodixhdHRycyk7cmV0dXJuIHZ9ZnVuY3Rpb24gc2ltcGxpZnkoZyl7dmFyIHNpbXBsaWZpZWQ9KG5ldyBHcmFwaCkuc2V0R3JhcGgoZy5ncmFwaCgpKTtfLmZvckVhY2goZy5ub2RlcygpLGZ1bmN0aW9uKHYpe3NpbXBsaWZpZWQuc2V0Tm9kZSh2LGcubm9kZSh2KSl9KTtfLmZvckVhY2goZy5lZGdlcygpLGZ1bmN0aW9uKGUpe3ZhciBzaW1wbGVMYWJlbD1zaW1wbGlmaWVkLmVkZ2UoZS52LGUudyl8fHt3ZWlnaHQ6MCxtaW5sZW46MX0sbGFiZWw9Zy5lZGdlKGUpO3NpbXBsaWZpZWQuc2V0RWRnZShlLnYsZS53LHt3ZWlnaHQ6c2ltcGxlTGFiZWwud2VpZ2h0K2xhYmVsLndlaWdodCxtaW5sZW46TWF0aC5tYXgoc2ltcGxlTGFiZWwubWlubGVuLGxhYmVsLm1pbmxlbil9KX0pO3JldHVybiBzaW1wbGlmaWVkfWZ1bmN0aW9uIGFzTm9uQ29tcG91bmRHcmFwaChnKXt2YXIgc2ltcGxpZmllZD0KKG5ldyBHcmFwaCh7bXVsdGlncmFwaDpnLmlzTXVsdGlncmFwaCgpfSkpLnNldEdyYXBoKGcuZ3JhcGgoKSk7Xy5mb3JFYWNoKGcubm9kZXMoKSxmdW5jdGlvbih2KXtpZighZy5jaGlsZHJlbih2KS5sZW5ndGgpc2ltcGxpZmllZC5zZXROb2RlKHYsZy5ub2RlKHYpKX0pO18uZm9yRWFjaChnLmVkZ2VzKCksZnVuY3Rpb24oZSl7c2ltcGxpZmllZC5zZXRFZGdlKGUsZy5lZGdlKGUpKX0pO3JldHVybiBzaW1wbGlmaWVkfWZ1bmN0aW9uIHN1Y2Nlc3NvcldlaWdodHMoZyl7dmFyIHdlaWdodE1hcD1fLm1hcChnLm5vZGVzKCksZnVuY3Rpb24odil7dmFyIHN1Y3M9e307Xy5mb3JFYWNoKGcub3V0RWRnZXModiksZnVuY3Rpb24oZSl7c3Vjc1tlLnddPShzdWNzW2Uud118fDApK2cuZWRnZShlKS53ZWlnaHR9KTtyZXR1cm4gc3Vjc30pO3JldHVybiBfLnppcE9iamVjdChnLm5vZGVzKCksd2VpZ2h0TWFwKX1mdW5jdGlvbiBwcmVkZWNlc3NvcldlaWdodHMoZyl7dmFyIHdlaWdodE1hcD1fLm1hcChnLm5vZGVzKCksCmZ1bmN0aW9uKHYpe3ZhciBwcmVkcz17fTtfLmZvckVhY2goZy5pbkVkZ2VzKHYpLGZ1bmN0aW9uKGUpe3ByZWRzW2Uudl09KHByZWRzW2Uudl18fDApK2cuZWRnZShlKS53ZWlnaHR9KTtyZXR1cm4gcHJlZHN9KTtyZXR1cm4gXy56aXBPYmplY3QoZy5ub2RlcygpLHdlaWdodE1hcCl9ZnVuY3Rpb24gaW50ZXJzZWN0UmVjdChyZWN0LHBvaW50KXt2YXIgeD1yZWN0Lng7dmFyIHk9cmVjdC55O3ZhciBkeD1wb2ludC54LXg7dmFyIGR5PXBvaW50LnkteTt2YXIgdz1yZWN0LndpZHRoLzI7dmFyIGg9cmVjdC5oZWlnaHQvMjtpZighZHgmJiFkeSl0aHJvdyBuZXcgRXJyb3IoIk5vdCBwb3NzaWJsZSB0byBmaW5kIGludGVyc2VjdGlvbiBpbnNpZGUgb2YgdGhlIHJlY3RhbmdsZSIpO3ZhciBzeCxzeTtpZihNYXRoLmFicyhkeSkqdz5NYXRoLmFicyhkeCkqaCl7aWYoZHk8MCloPS1oO3N4PWgqZHgvZHk7c3k9aH1lbHNle2lmKGR4PDApdz0tdztzeD13O3N5PXcqZHkvZHh9cmV0dXJue3g6eCsKc3gseTp5K3N5fX1mdW5jdGlvbiBidWlsZExheWVyTWF0cml4KGcpe3ZhciBsYXllcmluZz1fLm1hcChfLnJhbmdlKG1heFJhbmsoZykrMSksZnVuY3Rpb24oKXtyZXR1cm5bXX0pO18uZm9yRWFjaChnLm5vZGVzKCksZnVuY3Rpb24odil7dmFyIG5vZGU9Zy5ub2RlKHYpLHJhbms9bm9kZS5yYW5rO2lmKCFfLmlzVW5kZWZpbmVkKHJhbmspKWxheWVyaW5nW3JhbmtdW25vZGUub3JkZXJdPXZ9KTtyZXR1cm4gbGF5ZXJpbmd9ZnVuY3Rpb24gbm9ybWFsaXplUmFua3MoZyl7dmFyIG1pbj1fLm1pbkJ5KF8ubWFwKGcubm9kZXMoKSxmdW5jdGlvbih2KXtyZXR1cm4gZy5ub2RlKHYpLnJhbmt9KSk7Xy5mb3JFYWNoKGcubm9kZXMoKSxmdW5jdGlvbih2KXt2YXIgbm9kZT1nLm5vZGUodik7aWYoXy5oYXMobm9kZSwicmFuayIpKW5vZGUucmFuay09bWlufSl9ZnVuY3Rpb24gcmVtb3ZlRW1wdHlSYW5rcyhnKXt2YXIgb2Zmc2V0PV8ubWluQnkoXy5tYXAoZy5ub2RlcygpLGZ1bmN0aW9uKHYpe3JldHVybiBnLm5vZGUodikucmFua30pKTsKdmFyIGxheWVycz1bXTtfLmZvckVhY2goZy5ub2RlcygpLGZ1bmN0aW9uKHYpe3ZhciByYW5rPWcubm9kZSh2KS5yYW5rLW9mZnNldDtpZighbGF5ZXJzW3JhbmtdKWxheWVyc1tyYW5rXT1bXTtsYXllcnNbcmFua10ucHVzaCh2KX0pO3ZhciBkZWx0YT0wLG5vZGVSYW5rRmFjdG9yPWcuZ3JhcGgoKS5ub2RlUmFua0ZhY3RvcjtfLmZvckVhY2gobGF5ZXJzLGZ1bmN0aW9uKHZzLGkpe2lmKF8uaXNVbmRlZmluZWQodnMpJiZpJW5vZGVSYW5rRmFjdG9yIT09MCktLWRlbHRhO2Vsc2UgaWYoZGVsdGEpXy5mb3JFYWNoKHZzLGZ1bmN0aW9uKHYpe2cubm9kZSh2KS5yYW5rKz1kZWx0YX0pfSl9ZnVuY3Rpb24gYWRkQm9yZGVyTm9kZShnLHByZWZpeCxyYW5rLG9yZGVyKXt2YXIgbm9kZT17d2lkdGg6MCxoZWlnaHQ6MH07aWYoYXJndW1lbnRzLmxlbmd0aD49NCl7bm9kZS5yYW5rPXJhbms7bm9kZS5vcmRlcj1vcmRlcn1yZXR1cm4gYWRkRHVtbXlOb2RlKGcsImJvcmRlciIsbm9kZSxwcmVmaXgpfQpmdW5jdGlvbiBtYXhSYW5rKGcpe3JldHVybiBfLm1heChfLm1hcChnLm5vZGVzKCksZnVuY3Rpb24odil7dmFyIHJhbms9Zy5ub2RlKHYpLnJhbms7aWYoIV8uaXNVbmRlZmluZWQocmFuaykpcmV0dXJuIHJhbmt9KSl9ZnVuY3Rpb24gcGFydGl0aW9uKGNvbGxlY3Rpb24sZm4pe3ZhciByZXN1bHQ9e2xoczpbXSxyaHM6W119O18uZm9yRWFjaChjb2xsZWN0aW9uLGZ1bmN0aW9uKHZhbHVlKXtpZihmbih2YWx1ZSkpcmVzdWx0Lmxocy5wdXNoKHZhbHVlKTtlbHNlIHJlc3VsdC5yaHMucHVzaCh2YWx1ZSl9KTtyZXR1cm4gcmVzdWx0fWZ1bmN0aW9uIHRpbWUobmFtZSxmbil7dmFyIHN0YXJ0PV8ubm93KCk7dHJ5e3JldHVybiBmbigpfWZpbmFsbHl7Y29uc29sZS5sb2cobmFtZSsiIHRpbWU6ICIrKF8ubm93KCktc3RhcnQpKyJtcyIpfX1mdW5jdGlvbiBub3RpbWUobmFtZSxmbil7cmV0dXJuIGZuKCl9fSx7Ii4vZ3JhcGhsaWIiOjcsIi4vbG9kYXNoIjoxMH1dLDMwOltmdW5jdGlvbihyZXF1aXJlLAptb2R1bGUsZXhwb3J0cyl7bW9kdWxlLmV4cG9ydHM9IjAuOC4yIn0se31dfSx7fSxbMV0pKDEpfSk7PC9zY3JpcHQ+PHNjcmlwdD4vL35+V0VCUEFUSH5+ZXh0ZXJuYWwvY29tX2dvb2dsZV9qYXZhc2NyaXB0X2Nsb3N1cmVfbGlicmFyeS9jbG9zdXJlL2dvb2cvYmFzZS5qcwondXNlIHN0cmljdCc7dmFyIE07ZnVuY3Rpb24gdWEoYSl7dmFyIGM9MDtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gYzxhLmxlbmd0aD97ZG9uZTohMSx2YWx1ZTphW2MrK119Ontkb25lOiEwfX19ZnVuY3Rpb24gUGEoYSl7cmV0dXJue25leHQ6dWEoYSl9fWZ1bmN0aW9uIGpiKGEpe3ZhciBjPSJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuaXRlcmF0b3ImJmFbU3ltYm9sLml0ZXJhdG9yXTtyZXR1cm4gYz9jLmNhbGwoYSk6UGEoYSl9CnZhciBrYj1mdW5jdGlvbihhKXtyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdyYmd2luZG93PT09YT9hOiJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsJiZudWxsIT1nbG9iYWw/Z2xvYmFsOmF9KHRoaXMpLG1iPSJmdW5jdGlvbiI9PXR5cGVvZiBPYmplY3QuZGVmaW5lUHJvcGVydGllcz9PYmplY3QuZGVmaW5lUHJvcGVydHk6ZnVuY3Rpb24oYSxjLGQpe2EhPUFycmF5LnByb3RvdHlwZSYmYSE9T2JqZWN0LnByb3RvdHlwZSYmKGFbY109ZC52YWx1ZSl9O2Z1bmN0aW9uIHNiKGEsYyl7aWYoYyl7dmFyIGQ9a2I7YT1hLnNwbGl0KCIuIik7Zm9yKHZhciBmPTA7ZjxhLmxlbmd0aC0xO2YrKyl7dmFyIGc9YVtmXTtnIGluIGR8fChkW2ddPXt9KTtkPWRbZ119YT1hW2EubGVuZ3RoLTFdO2Y9ZFthXTtjPWMoZik7YyE9ZiYmbnVsbCE9YyYmbWIoZCxhLHtjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6Y30pfX0Kc2IoIlByb21pc2UiLGZ1bmN0aW9uKGEpe2Z1bmN0aW9uIGMobSl7dGhpcy5zdGF0ZV89MDt0aGlzLnJlc3VsdF89dm9pZCAwO3RoaXMub25TZXR0bGVkQ2FsbGJhY2tzXz1bXTt2YXIgcD10aGlzLmNyZWF0ZVJlc29sdmVBbmRSZWplY3RfKCk7dHJ5e20ocC5yZXNvbHZlLHAucmVqZWN0KX1jYXRjaChxKXtwLnJlamVjdChxKX19ZnVuY3Rpb24gZCgpe3RoaXMuYmF0Y2hfPW51bGx9ZnVuY3Rpb24gZihtKXtzd2l0Y2godHlwZW9mIG0pe2Nhc2UgIm9iamVjdCI6cmV0dXJuIG51bGwhPW07Y2FzZSAiZnVuY3Rpb24iOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fWZ1bmN0aW9uIGcobSl7cmV0dXJuIG0gaW5zdGFuY2VvZiBjP206bmV3IGMoZnVuY3Rpb24ocCl7cChtKX0pfWlmKGEpcmV0dXJuIGE7ZC5wcm90b3R5cGUuYXN5bmNFeGVjdXRlPWZ1bmN0aW9uKG0pe2lmKG51bGw9PXRoaXMuYmF0Y2hfKXt0aGlzLmJhdGNoXz1bXTt2YXIgcD10aGlzO3RoaXMuYXN5bmNFeGVjdXRlRnVuY3Rpb24oZnVuY3Rpb24oKXtwLmV4ZWN1dGVCYXRjaF8oKX0pfXRoaXMuYmF0Y2hfLnB1c2gobSl9Owp2YXIgbD1rYi5zZXRUaW1lb3V0O2QucHJvdG90eXBlLmFzeW5jRXhlY3V0ZUZ1bmN0aW9uPWZ1bmN0aW9uKG0pe2wobSwwKX07ZC5wcm90b3R5cGUuZXhlY3V0ZUJhdGNoXz1mdW5jdGlvbigpe2Zvcig7dGhpcy5iYXRjaF8mJnRoaXMuYmF0Y2hfLmxlbmd0aDspe3ZhciBtPXRoaXMuYmF0Y2hfO3RoaXMuYmF0Y2hfPVtdO2Zvcih2YXIgcD0wO3A8bS5sZW5ndGg7KytwKXt2YXIgcT1tW3BdO21bcF09bnVsbDt0cnl7cSgpfWNhdGNoKHIpe3RoaXMuYXN5bmNUaHJvd18ocil9fX10aGlzLmJhdGNoXz1udWxsfTtkLnByb3RvdHlwZS5hc3luY1Rocm93Xz1mdW5jdGlvbihtKXt0aGlzLmFzeW5jRXhlY3V0ZUZ1bmN0aW9uKGZ1bmN0aW9uKCl7dGhyb3cgbTt9KX07Yy5wcm90b3R5cGUuY3JlYXRlUmVzb2x2ZUFuZFJlamVjdF89ZnVuY3Rpb24oKXtmdW5jdGlvbiBtKHIpe3JldHVybiBmdW5jdGlvbih0KXtxfHwocT0hMCxyLmNhbGwocCx0KSl9fXZhciBwPXRoaXMscT0hMTtyZXR1cm57cmVzb2x2ZTptKHRoaXMucmVzb2x2ZVRvXyksCnJlamVjdDptKHRoaXMucmVqZWN0Xyl9fTtjLnByb3RvdHlwZS5yZXNvbHZlVG9fPWZ1bmN0aW9uKG0pe209PT10aGlzP3RoaXMucmVqZWN0XyhuZXcgVHlwZUVycm9yKCJBIFByb21pc2UgY2Fubm90IHJlc29sdmUgdG8gaXRzZWxmIikpOm0gaW5zdGFuY2VvZiBjP3RoaXMuc2V0dGxlU2FtZUFzUHJvbWlzZV8obSk6ZihtKT90aGlzLnJlc29sdmVUb05vblByb21pc2VPYmpfKG0pOnRoaXMuZnVsZmlsbF8obSl9O2MucHJvdG90eXBlLnJlc29sdmVUb05vblByb21pc2VPYmpfPWZ1bmN0aW9uKG0pe3ZhciBwPXZvaWQgMDt0cnl7cD1tLnRoZW59Y2F0Y2gocSl7dGhpcy5yZWplY3RfKHEpO3JldHVybn0iZnVuY3Rpb24iPT10eXBlb2YgcD90aGlzLnNldHRsZVNhbWVBc1RoZW5hYmxlXyhwLG0pOnRoaXMuZnVsZmlsbF8obSl9O2MucHJvdG90eXBlLnJlamVjdF89ZnVuY3Rpb24obSl7dGhpcy5zZXR0bGVfKDIsbSl9O2MucHJvdG90eXBlLmZ1bGZpbGxfPWZ1bmN0aW9uKG0pe3RoaXMuc2V0dGxlXygxLAptKX07Yy5wcm90b3R5cGUuc2V0dGxlXz1mdW5jdGlvbihtLHApe2lmKDAhPXRoaXMuc3RhdGVfKXRocm93IEVycm9yKCJDYW5ub3Qgc2V0dGxlKCIrbSsiLCAiK3ArIik6IFByb21pc2UgYWxyZWFkeSBzZXR0bGVkIGluIHN0YXRlIit0aGlzLnN0YXRlXyk7dGhpcy5zdGF0ZV89bTt0aGlzLnJlc3VsdF89cDt0aGlzLmV4ZWN1dGVPblNldHRsZWRDYWxsYmFja3NfKCl9O2MucHJvdG90eXBlLmV4ZWN1dGVPblNldHRsZWRDYWxsYmFja3NfPWZ1bmN0aW9uKCl7aWYobnVsbCE9dGhpcy5vblNldHRsZWRDYWxsYmFja3NfKXtmb3IodmFyIG09MDttPHRoaXMub25TZXR0bGVkQ2FsbGJhY2tzXy5sZW5ndGg7KyttKWsuYXN5bmNFeGVjdXRlKHRoaXMub25TZXR0bGVkQ2FsbGJhY2tzX1ttXSk7dGhpcy5vblNldHRsZWRDYWxsYmFja3NfPW51bGx9fTt2YXIgaz1uZXcgZDtjLnByb3RvdHlwZS5zZXR0bGVTYW1lQXNQcm9taXNlXz1mdW5jdGlvbihtKXt2YXIgcD10aGlzLmNyZWF0ZVJlc29sdmVBbmRSZWplY3RfKCk7Cm0uY2FsbFdoZW5TZXR0bGVkXyhwLnJlc29sdmUscC5yZWplY3QpfTtjLnByb3RvdHlwZS5zZXR0bGVTYW1lQXNUaGVuYWJsZV89ZnVuY3Rpb24obSxwKXt2YXIgcT10aGlzLmNyZWF0ZVJlc29sdmVBbmRSZWplY3RfKCk7dHJ5e20uY2FsbChwLHEucmVzb2x2ZSxxLnJlamVjdCl9Y2F0Y2gocil7cS5yZWplY3Qocil9fTtjLnByb3RvdHlwZS50aGVuPWZ1bmN0aW9uKG0scCl7ZnVuY3Rpb24gcShBLHkpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBBP2Z1bmN0aW9uKHgpe3RyeXtyKEEoeCkpfWNhdGNoKEMpe3QoQyl9fTp5fXZhciByLHQsdj1uZXcgYyhmdW5jdGlvbihBLHkpe3I9QTt0PXl9KTt0aGlzLmNhbGxXaGVuU2V0dGxlZF8ocShtLHIpLHEocCx0KSk7cmV0dXJuIHZ9O2MucHJvdG90eXBlLmNhdGNoPWZ1bmN0aW9uKG0pe3JldHVybiB0aGlzLnRoZW4odm9pZCAwLG0pfTtjLnByb3RvdHlwZS5jYWxsV2hlblNldHRsZWRfPWZ1bmN0aW9uKG0scCl7ZnVuY3Rpb24gcSgpe3N3aXRjaChyLnN0YXRlXyl7Y2FzZSAxOm0oci5yZXN1bHRfKTsKYnJlYWs7Y2FzZSAyOnAoci5yZXN1bHRfKTticmVhaztkZWZhdWx0OnRocm93IEVycm9yKCJVbmV4cGVjdGVkIHN0YXRlOiAiK3Iuc3RhdGVfKTt9fXZhciByPXRoaXM7bnVsbD09dGhpcy5vblNldHRsZWRDYWxsYmFja3NfP2suYXN5bmNFeGVjdXRlKHEpOnRoaXMub25TZXR0bGVkQ2FsbGJhY2tzXy5wdXNoKHEpfTtjLnJlc29sdmU9ZztjLnJlamVjdD1mdW5jdGlvbihtKXtyZXR1cm4gbmV3IGMoZnVuY3Rpb24ocCxxKXtxKG0pfSl9O2MucmFjZT1mdW5jdGlvbihtKXtyZXR1cm4gbmV3IGMoZnVuY3Rpb24ocCxxKXtmb3IodmFyIHI9amIobSksdD1yLm5leHQoKTshdC5kb25lO3Q9ci5uZXh0KCkpZyh0LnZhbHVlKS5jYWxsV2hlblNldHRsZWRfKHAscSl9KX07Yy5hbGw9ZnVuY3Rpb24obSl7dmFyIHA9amIobSkscT1wLm5leHQoKTtyZXR1cm4gcS5kb25lP2coW10pOm5ldyBjKGZ1bmN0aW9uKHIsdCl7ZnVuY3Rpb24gdih4KXtyZXR1cm4gZnVuY3Rpb24oQyl7QVt4XT1DO3ktLTswPT0KeSYmcihBKX19dmFyIEE9W10seT0wO2RvIEEucHVzaCh2b2lkIDApLHkrKyxnKHEudmFsdWUpLmNhbGxXaGVuU2V0dGxlZF8odihBLmxlbmd0aC0xKSx0KSxxPXAubmV4dCgpO3doaWxlKCFxLmRvbmUpfSl9O3JldHVybiBjfSk7c2IoIlByb21pc2UucHJvdG90eXBlLmZpbmFsbHkiLGZ1bmN0aW9uKGEpe3JldHVybiBhP2E6ZnVuY3Rpb24oYyl7cmV0dXJuIHRoaXMudGhlbihmdW5jdGlvbihkKXtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGMoKSkudGhlbihmdW5jdGlvbigpe3JldHVybiBkfSl9LGZ1bmN0aW9uKGQpe3JldHVybiBQcm9taXNlLnJlc29sdmUoYygpKS50aGVuKGZ1bmN0aW9uKCl7dGhyb3cgZDt9KX0pfX0pOwpmdW5jdGlvbiB3YihhKXtmdW5jdGlvbiBjKGYpe3JldHVybiBhLm5leHQoZil9ZnVuY3Rpb24gZChmKXtyZXR1cm4gYS50aHJvdyhmKX1yZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oZixnKXtmdW5jdGlvbiBsKGspe2suZG9uZT9mKGsudmFsdWUpOlByb21pc2UucmVzb2x2ZShrLnZhbHVlKS50aGVuKGMsZCkudGhlbihsLGcpfWwoYS5uZXh0KCkpfSl9ZnVuY3Rpb24gRGIoYSl7cmV0dXJuIHdiKGEoKSl9ZnVuY3Rpb24gRWIoYSl7cmV0dXJuIHZvaWQgMCE9PWF9ZnVuY3Rpb24gR2IoYSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBhfQpmdW5jdGlvbiBJYihhKXt2YXIgYz10eXBlb2YgYTtpZigib2JqZWN0Ij09YylpZihhKXtpZihhIGluc3RhbmNlb2YgQXJyYXkpcmV0dXJuImFycmF5IjtpZihhIGluc3RhbmNlb2YgT2JqZWN0KXJldHVybiBjO3ZhciBkPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhKTtpZigiW29iamVjdCBXaW5kb3ddIj09ZClyZXR1cm4ib2JqZWN0IjtpZigiW29iamVjdCBBcnJheV0iPT1kfHwibnVtYmVyIj09dHlwZW9mIGEubGVuZ3RoJiYidW5kZWZpbmVkIiE9dHlwZW9mIGEuc3BsaWNlJiYidW5kZWZpbmVkIiE9dHlwZW9mIGEucHJvcGVydHlJc0VudW1lcmFibGUmJiFhLnByb3BlcnR5SXNFbnVtZXJhYmxlKCJzcGxpY2UiKSlyZXR1cm4iYXJyYXkiO2lmKCJbb2JqZWN0IEZ1bmN0aW9uXSI9PWR8fCJ1bmRlZmluZWQiIT10eXBlb2YgYS5jYWxsJiYidW5kZWZpbmVkIiE9dHlwZW9mIGEucHJvcGVydHlJc0VudW1lcmFibGUmJiFhLnByb3BlcnR5SXNFbnVtZXJhYmxlKCJjYWxsIikpcmV0dXJuImZ1bmN0aW9uIn1lbHNlIHJldHVybiJudWxsIjsKZWxzZSBpZigiZnVuY3Rpb24iPT1jJiYidW5kZWZpbmVkIj09dHlwZW9mIGEuY2FsbClyZXR1cm4ib2JqZWN0IjtyZXR1cm4gY31mdW5jdGlvbiBKYihhKXtyZXR1cm4gbnVsbD09PWF9ZnVuY3Rpb24gTmIoYSl7cmV0dXJuImFycmF5Ij09SWIoYSl9ZnVuY3Rpb24gUWIoYSxjKXtmdW5jdGlvbiBkKCl7fWQucHJvdG90eXBlPWMucHJvdG90eXBlO2Euc3VwZXJDbGFzc189Yy5wcm90b3R5cGU7YS5wcm90b3R5cGU9bmV3IGQ7YS5wcm90b3R5cGUuY29uc3RydWN0b3I9YTthLmJhc2U9ZnVuY3Rpb24oZixnLGwpe2Zvcih2YXIgaz1BcnJheShhcmd1bWVudHMubGVuZ3RoLTIpLG09MjttPGFyZ3VtZW50cy5sZW5ndGg7bSsrKWtbbS0yXT1hcmd1bWVudHNbbV07cmV0dXJuIGMucHJvdG90eXBlW2ddLmFwcGx5KGYsayl9fTsKLy9+fldFQlBBVEh+fmV4dGVybmFsL2NvbV9nb29nbGVfamF2YXNjcmlwdF9jbG9zdXJlX2xpYnJhcnkvY2xvc3VyZS9nb29nL3RyYW5zaXRpb25hbGZvcndhcmRkZWNsYXJhdGlvbnMuanMKLy9+fldFQlBBVEh+fmV4dGVybmFsL2NvbV9nb29nbGVfamF2YXNjcmlwdF9jbG9zdXJlX2xpYnJhcnkvY2xvc3VyZS9nb29nL2RlYnVnL2Vycm9yLmpzCmZ1bmN0aW9uIFRiKGEpe2lmKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKUVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsVGIpO2Vsc2V7dmFyIGM9RXJyb3IoKS5zdGFjaztjJiYodGhpcy5zdGFjaz1jKX1hJiYodGhpcy5tZXNzYWdlPVN0cmluZyhhKSk7dGhpcy5yZXBvcnRFcnJvclRvU2VydmVyPSEwfVFiKFRiLEVycm9yKTtUYi5wcm90b3R5cGUubmFtZT0iQ3VzdG9tRXJyb3IiOwovL35+V0VCUEFUSH5+ZXh0ZXJuYWwvY29tX2dvb2dsZV9qYXZhc2NyaXB0X2Nsb3N1cmVfbGlicmFyeS9jbG9zdXJlL2dvb2cvZG9tL25vZGV0eXBlLmpzCi8vfn5XRUJQQVRIfn5leHRlcm5hbC9jb21fZ29vZ2xlX2phdmFzY3JpcHRfY2xvc3VyZV9saWJyYXJ5L2Nsb3N1cmUvZ29vZy9hc3NlcnRzL2Fzc2VydHMuanMKZnVuY3Rpb24gVWIoYSxjKXtUYi5jYWxsKHRoaXMsWGIoYSxjKSk7dGhpcy5tZXNzYWdlUGF0dGVybj1hfVFiKFViLFRiKTtVYi5wcm90b3R5cGUubmFtZT0iQXNzZXJ0aW9uRXJyb3IiO2Z1bmN0aW9uIFliKGEpe3Rocm93IGE7fWZ1bmN0aW9uIFhiKGEsYyl7YT1hLnNwbGl0KCIlcyIpO2Zvcih2YXIgZD0iIixmPWEubGVuZ3RoLTEsZz0wO2c8ZjtnKyspZCs9YVtnXSsoZzxjLmxlbmd0aD9jW2ddOiIlcyIpO3JldHVybiBkK2FbZl19ZnVuY3Rpb24gYmMoYSxjKXtZYihuZXcgVWIoIkZhaWx1cmUiKyhhPyI6ICIrYToiIiksQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpKSl9OwovL35+V0VCUEFUSH5+ZXh0ZXJuYWwvY29tX2dvb2dsZV9qYXZhc2NyaXB0X2Nsb3N1cmVfbGlicmFyeS9jbG9zdXJlL2dvb2cvYXJyYXkvYXJyYXkuanMKdmFyIGRjPUFycmF5LnByb3RvdHlwZS5mb3JFYWNoP2Z1bmN0aW9uKGEsYyl7QXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbChhLGMsdm9pZCAwKX06ZnVuY3Rpb24oYSxjKXtmb3IodmFyIGQ9YS5sZW5ndGgsZj1HYihhKT9hLnNwbGl0KCIiKTphLGc9MDtnPGQ7ZysrKWcgaW4gZiYmYy5jYWxsKHZvaWQgMCxmW2ddLGcsYSl9LGVjPUFycmF5LnByb3RvdHlwZS5tYXA/ZnVuY3Rpb24oYSxjKXtyZXR1cm4gQXJyYXkucHJvdG90eXBlLm1hcC5jYWxsKGEsYyx2b2lkIDApfTpmdW5jdGlvbihhLGMpe2Zvcih2YXIgZD1hLmxlbmd0aCxmPUFycmF5KGQpLGc9R2IoYSk/YS5zcGxpdCgiIik6YSxsPTA7bDxkO2wrKylsIGluIGcmJihmW2xdPWMuY2FsbCh2b2lkIDAsZ1tsXSxsLGEpKTtyZXR1cm4gZn07CmZ1bmN0aW9uIGhjKGEsYyxkKXtyZXR1cm4gMj49YXJndW1lbnRzLmxlbmd0aD9BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhLGMpOkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGEsYyxkKX07Ci8vfn5XRUJQQVRIfn5leHRlcm5hbC9jb21fZ29vZ2xlX2phdmFzY3JpcHRfY2xvc3VyZV9saWJyYXJ5L2Nsb3N1cmUvZ29vZy9jcnlwdC9jcnlwdC5qcwpmdW5jdGlvbiBpYyhhKXtpZig4MTkyPj1hLmxlbmd0aClyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLGEpO2Zvcih2YXIgYz0iIixkPTA7ZDxhLmxlbmd0aDtkKz04MTkyKWMrPVN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxoYyhhLGQsZCs4MTkyKSk7cmV0dXJuIGN9OwovL35+V0VCUEFUSH5+ZXh0ZXJuYWwvY29tX2dvb2dsZV9qYXZhc2NyaXB0X2Nsb3N1cmVfbGlicmFyeS9jbG9zdXJlL2dvb2cvc3RyaW5nL2ludGVybmFsLmpzCmZ1bmN0aW9uIG5jKGEpe3JldHVybi9eW1xzXHhhMF0qJC8udGVzdChhKX07Ci8vfn5XRUJQQVRIfn5leHRlcm5hbC9jb21fZ29vZ2xlX2phdmFzY3JpcHRfY2xvc3VyZV9saWJyYXJ5L2Nsb3N1cmUvZ29vZy9zdHJpbmcvc3RyaW5nLmpzCi8vfn5XRUJQQVRIfn5leHRlcm5hbC9jb21fZ29vZ2xlX2phdmFzY3JpcHRfY2xvc3VyZV9saWJyYXJ5L2Nsb3N1cmUvZ29vZy9sYWJzL3VzZXJhZ2VudC91dGlsLmpzCi8vfn5XRUJQQVRIfn5leHRlcm5hbC9jb21fZ29vZ2xlX2phdmFzY3JpcHRfY2xvc3VyZV9saWJyYXJ5L2Nsb3N1cmUvZ29vZy9vYmplY3Qvb2JqZWN0LmpzCi8vfn5XRUJQQVRIfn5leHRlcm5hbC9jb21fZ29vZ2xlX2phdmFzY3JpcHRfY2xvc3VyZV9saWJyYXJ5L2Nsb3N1cmUvZ29vZy9sYWJzL3VzZXJhZ2VudC9icm93c2VyLmpzCi8vfn5XRUJQQVRIfn5leHRlcm5hbC9jb21fZ29vZ2xlX2phdmFzY3JpcHRfY2xvc3VyZV9saWJyYXJ5L2Nsb3N1cmUvZ29vZy9sYWJzL3VzZXJhZ2VudC9lbmdpbmUuanMKLy9+fldFQlBBVEh+fmV4dGVybmFsL2NvbV9nb29nbGVfamF2YXNjcmlwdF9jbG9zdXJlX2xpYnJhcnkvY2xvc3VyZS9nb29nL2xhYnMvdXNlcmFnZW50L3BsYXRmb3JtLmpzCi8vfn5XRUJQQVRIfn5leHRlcm5hbC9jb21fZ29vZ2xlX2phdmFzY3JpcHRfY2xvc3VyZV9saWJyYXJ5L2Nsb3N1cmUvZ29vZy9yZWZsZWN0L3JlZmxlY3QuanMKLy9+fldFQlBBVEh+fmV4dGVybmFsL2NvbV9nb29nbGVfamF2YXNjcmlwdF9jbG9zdXJlX2xpYnJhcnkvY2xvc3VyZS9nb29nL3VzZXJhZ2VudC91c2VyYWdlbnQuanMKLy9+fldFQlBBVEh+fmV4dGVybmFsL2NvbV9nb29nbGVfamF2YXNjcmlwdF9jbG9zdXJlX2xpYnJhcnkvY2xvc3VyZS9nb29nL3VzZXJhZ2VudC9wcm9kdWN0LmpzCi8vfn5XRUJQQVRIfn5leHRlcm5hbC9jb21fZ29vZ2xlX2phdmFzY3JpcHRfY2xvc3VyZV9saWJyYXJ5L2Nsb3N1cmUvZ29vZy9jcnlwdC9iYXNlNjQuanMKdmFyIG9jPW51bGwscGM9bnVsbCxxYz1udWxsO2Z1bmN0aW9uIHRjKGEsYyl7eWMoKTtjPWM/cWM6b2M7Zm9yKHZhciBkPVtdLGY9MDtmPGEubGVuZ3RoO2YrPTMpe3ZhciBnPWFbZl0sbD1mKzE8YS5sZW5ndGgsaz1sP2FbZisxXTowLG09ZisyPGEubGVuZ3RoLHA9bT9hW2YrMl06MCxxPWc+PjI7Zz0oZyYzKTw8NHxrPj40O2s9KGsmMTUpPDwyfHA+PjY7cCY9NjM7bXx8KHA9NjQsbHx8KGs9NjQpKTtkLnB1c2goY1txXSxjW2ddLGNba10sY1twXSl9cmV0dXJuIGQuam9pbigiIil9ZnVuY3Rpb24gRmMoYSl7dmFyIGM9YS5sZW5ndGgsZD0wOyJceDNkIj09PWFbYy0yXT9kPTI6Ilx4M2QiPT09YVtjLTFdJiYoZD0xKTt2YXIgZj1uZXcgVWludDhBcnJheShNYXRoLmNlaWwoMypjLzQpLWQpLGc9MDtHYyhhLGZ1bmN0aW9uKGwpe2ZbZysrXT1sfSk7cmV0dXJuIGYuc3ViYXJyYXkoMCxnKX0KZnVuY3Rpb24gR2MoYSxjKXtmdW5jdGlvbiBkKHApe2Zvcig7ZjxhLmxlbmd0aDspe3ZhciBxPWEuY2hhckF0KGYrKykscj1wY1txXTtpZihudWxsIT1yKXJldHVybiByO2lmKCFuYyhxKSl0aHJvdyBFcnJvcigiVW5rbm93biBiYXNlNjQgZW5jb2RpbmcgYXQgY2hhcjogIitxKTt9cmV0dXJuIHB9eWMoKTtmb3IodmFyIGY9MDs7KXt2YXIgZz1kKC0xKSxsPWQoMCksaz1kKDY0KSxtPWQoNjQpO2lmKDY0PT09bSYmLTE9PT1nKWJyZWFrO2MoZzw8MnxsPj40KTs2NCE9ayYmKGMobDw8NCYyNDB8az4+MiksNjQhPW0mJmMoazw8NiYxOTJ8bSkpfX0KZnVuY3Rpb24geWMoKXtpZighb2Mpe29jPXt9O3BjPXt9O3FjPXt9O2Zvcih2YXIgYT0wOzY1PmE7YSsrKW9jW2FdPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvXHgzZCIuY2hhckF0KGEpLHBjW29jW2FdXT1hLHFjW2FdPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OS1fLiIuY2hhckF0KGEpLDYyPD1hJiYocGNbIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5LV8uIi5jaGFyQXQoYSldPWEpfX07Ci8vfn5XRUJQQVRIfn5leHRlcm5hbC9jb21fZ29vZ2xlX3Byb3RvYnVmX2pzL2JpbmFyeS9hcml0aC5qcwpmdW5jdGlvbiBIYyhhLGMpe3RoaXMubG89YTt0aGlzLmhpPWN9TT1IYy5wcm90b3R5cGU7TS5jbXA9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuaGk8YS5oaXx8dGhpcy5oaT09YS5oaSYmdGhpcy5sbzxhLmxvPy0xOnRoaXMuaGk9PWEuaGkmJnRoaXMubG89PWEubG8/MDoxfTtNLnJpZ2h0U2hpZnQ9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEhjKCh0aGlzLmxvPj4+MXwodGhpcy5oaSYxKTw8MzEpPj4+MCx0aGlzLmhpPj4+MT4+PjApfTtNLmxlZnRTaGlmdD1mdW5jdGlvbigpe3JldHVybiBuZXcgSGModGhpcy5sbzw8MT4+PjAsKHRoaXMuaGk8PDF8dGhpcy5sbz4+PjMxKT4+PjApfTtNLm1zYj1mdW5jdGlvbigpe3JldHVybiEhKHRoaXMuaGkmMjE0NzQ4MzY0OCl9O00ubHNiPWZ1bmN0aW9uKCl7cmV0dXJuISEodGhpcy5sbyYxKX07TS56ZXJvPWZ1bmN0aW9uKCl7cmV0dXJuIDA9PXRoaXMubG8mJjA9PXRoaXMuaGl9OwpNLmFkZD1mdW5jdGlvbihhKXtyZXR1cm4gbmV3IEhjKCh0aGlzLmxvK2EubG8mNDI5NDk2NzI5NSk+Pj4wPj4+MCwoKHRoaXMuaGkrYS5oaSY0Mjk0OTY3Mjk1KT4+PjApKyg0Mjk0OTY3Mjk2PD10aGlzLmxvK2EubG8/MTowKT4+PjApfTtNLnN1Yj1mdW5jdGlvbihhKXtyZXR1cm4gbmV3IEhjKCh0aGlzLmxvLWEubG8mNDI5NDk2NzI5NSk+Pj4wPj4+MCwoKHRoaXMuaGktYS5oaSY0Mjk0OTY3Mjk1KT4+PjApLSgwPnRoaXMubG8tYS5sbz8xOjApPj4+MCl9O2Z1bmN0aW9uIEpjKGEpe3ZhciBjPWEmNjU1MzUsZD1hPj4+MTY7YT0xMCpjKzY1NTM2KigwKmMmNjU1MzUpKzY1NTM2KigxMCpkJjY1NTM1KTtmb3IoYz0wKmQrKDAqYz4+PjE2KSsoMTAqZD4+PjE2KTs0Mjk0OTY3Mjk2PD1hOylhLT00Mjk0OTY3Mjk2LGMrPTE7cmV0dXJuIG5ldyBIYyhhPj4+MCxjPj4+MCl9Ck0ubXVsPWZ1bmN0aW9uKCl7dmFyIGE9SmModGhpcy5sbyksYz1KYyh0aGlzLmhpKTtjLmhpPWMubG87Yy5sbz0wO3JldHVybiBhLmFkZChjKX07TS5kaXY9ZnVuY3Rpb24oKXtmb3IodmFyIGE9bmV3IEhjKDAsMCksYz1uZXcgSGModGhpcy5sbyx0aGlzLmhpKSxkPW5ldyBIYygxMCwwKSxmPW5ldyBIYygxLDApOyFkLm1zYigpOylkPWQubGVmdFNoaWZ0KCksZj1mLmxlZnRTaGlmdCgpO2Zvcig7IWYuemVybygpOykwPj1kLmNtcChjKSYmKGE9YS5hZGQoZiksYz1jLnN1YihkKSksZD1kLnJpZ2h0U2hpZnQoKSxmPWYucmlnaHRTaGlmdCgpO3JldHVyblthLGNdfTtNLnRvU3RyaW5nPWZ1bmN0aW9uKCl7Zm9yKHZhciBhPSIiLGM9dGhpczshYy56ZXJvKCk7KXtjPWMuZGl2KCk7dmFyIGQ9Y1swXTthPWNbMV0ubG8rYTtjPWR9IiI9PWEmJihhPSIwIik7cmV0dXJuIGF9OwpmdW5jdGlvbiBLYyhhKXtmb3IodmFyIGM9bmV3IEhjKDAsMCksZD1uZXcgSGMoMCwwKSxmPTA7ZjxhLmxlbmd0aDtmKyspe2lmKCIwIj5hW2ZdfHwiOSI8YVtmXSlyZXR1cm4gbnVsbDtkLmxvPXBhcnNlSW50KGFbZl0sMTApO2M9Yy5tdWwoKS5hZGQoZCl9cmV0dXJuIGN9TS5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBuZXcgSGModGhpcy5sbyx0aGlzLmhpKX07ZnVuY3Rpb24gTGMoYSxjKXt0aGlzLmxvPWE7dGhpcy5oaT1jfUxjLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyBMYygodGhpcy5sbythLmxvJjQyOTQ5NjcyOTUpPj4+MD4+PjAsKCh0aGlzLmhpK2EuaGkmNDI5NDk2NzI5NSk+Pj4wKSsoNDI5NDk2NzI5Njw9dGhpcy5sbythLmxvPzE6MCk+Pj4wKX07CkxjLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyBMYygodGhpcy5sby1hLmxvJjQyOTQ5NjcyOTUpPj4+MD4+PjAsKCh0aGlzLmhpLWEuaGkmNDI5NDk2NzI5NSk+Pj4wKS0oMD50aGlzLmxvLWEubG8/MTowKT4+PjApfTtMYy5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IExjKHRoaXMubG8sdGhpcy5oaSl9O0xjLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3ZhciBhPTAhPSh0aGlzLmhpJjIxNDc0ODM2NDgpLGM9bmV3IEhjKHRoaXMubG8sdGhpcy5oaSk7YSYmKGM9KG5ldyBIYygwLDApKS5zdWIoYykpO3JldHVybihhPyItIjoiIikrYy50b1N0cmluZygpfTtmdW5jdGlvbiBNYyhhKXt2YXIgYz0wPGEubGVuZ3RoJiYiLSI9PWFbMF07YyYmKGE9YS5zdWJzdHJpbmcoMSkpO2E9S2MoYSk7aWYobnVsbD09PWEpcmV0dXJuIG51bGw7YyYmKGE9KG5ldyBIYygwLDApKS5zdWIoYSkpO3JldHVybiBuZXcgTGMoYS5sbyxhLmhpKX07Ci8vfn5XRUJQQVRIfn5leHRlcm5hbC9jb21fZ29vZ2xlX3Byb3RvYnVmX2pzL2JpbmFyeS9jb25zdGFudHMuanMKZnVuY3Rpb24gTmMoYSl7c3dpdGNoKGEpe2Nhc2UgNTpjYXNlIDM6Y2FzZSAxMzpjYXNlIDQ6Y2FzZSAxNzpjYXNlIDE4OmNhc2UgODpjYXNlIDE0OmNhc2UgMzE6cmV0dXJuIDA7Y2FzZSAxOmNhc2UgNjpjYXNlIDE2OmNhc2UgMzA6cmV0dXJuIDE7Y2FzZSA5OmNhc2UgMTE6Y2FzZSAxMjpyZXR1cm4gMjtjYXNlIDI6Y2FzZSA3OmNhc2UgMTU6cmV0dXJuIDU7ZGVmYXVsdDpyZXR1cm4tMX19OwovL35+V0VCUEFUSH5+ZXh0ZXJuYWwvY29tX2dvb2dsZV9wcm90b2J1Zl9qcy9iaW5hcnkvdXRpbHMuanMKdmFyIE9jPTAsYmQ9MDtmdW5jdGlvbiBjZChhKXt2YXIgYz1hPj4+MDthPU1hdGguZmxvb3IoKGEtYykvNDI5NDk2NzI5Nik+Pj4wO09jPWM7YmQ9YX1mdW5jdGlvbiBkZChhKXt2YXIgYz0wPmE7YT1NYXRoLmFicyhhKTt2YXIgZD1hPj4+MDthPU1hdGguZmxvb3IoKGEtZCkvNDI5NDk2NzI5Nik7YT4+Pj0wO2MmJihhPX5hPj4+MCxkPSh+ZD4+PjApKzEsNDI5NDk2NzI5NTxkJiYoZD0wLGErKyw0Mjk0OTY3Mjk1PGEmJihhPTApKSk7T2M9ZDtiZD1hfWZ1bmN0aW9uIGVkKGEpe3ZhciBjPTA+YTthPTIqTWF0aC5hYnMoYSk7Y2QoYSk7YT1PYzt2YXIgZD1iZDtjJiYoMD09YT8wPT1kP2Q9YT00Mjk0OTY3Mjk1OihkLS0sYT00Mjk0OTY3Mjk1KTphLS0pO09jPWE7YmQ9ZH0KZnVuY3Rpb24gZmQoYSl7dmFyIGM9MD5hPzE6MDthPWM/LWE6YTtpZigwPT09YSkwPDEvYT9PYz1iZD0wOihiZD0wLE9jPTIxNDc0ODM2NDgpO2Vsc2UgaWYoaXNOYU4oYSkpYmQ9MCxPYz0yMTQ3NDgzNjQ3O2Vsc2UgaWYoMy40MDI4MjM0NjYzODUyODg2RTM4PGEpYmQ9MCxPYz0oYzw8MzF8MjEzOTA5NTA0MCk+Pj4wO2Vsc2UgaWYoMS4xNzU0OTQzNTA4MjIyODc1RS0zOD5hKWE9TWF0aC5yb3VuZChhL01hdGgucG93KDIsLTE0OSkpLGJkPTAsT2M9KGM8PDMxfGEpPj4+MDtlbHNle3ZhciBkPU1hdGguZmxvb3IoTWF0aC5sb2coYSkvTWF0aC5MTjIpO2EqPU1hdGgucG93KDIsLWQpO2E9TWF0aC5yb3VuZCg4Mzg4NjA4KmEpJjgzODg2MDc7YmQ9MDtPYz0oYzw8MzF8ZCsxMjc8PDIzfGEpPj4+MH19CmZ1bmN0aW9uIGdkKGEpe3ZhciBjPTA+YT8xOjA7YT1jPy1hOmE7aWYoMD09PWEpYmQ9MDwxL2E/MDoyMTQ3NDgzNjQ4LE9jPTA7ZWxzZSBpZihpc05hTihhKSliZD0yMTQ3NDgzNjQ3LE9jPTQyOTQ5NjcyOTU7ZWxzZSBpZigxLjc5NzY5MzEzNDg2MjMxNTdFMzA4PGEpYmQ9KGM8PDMxfDIxNDY0MzUwNzIpPj4+MCxPYz0wO2Vsc2UgaWYoMi4yMjUwNzM4NTg1MDcyMDE0RS0zMDg+YSlhLz1NYXRoLnBvdygyLC0xMDc0KSxiZD0oYzw8MzF8YS80Mjk0OTY3Mjk2KT4+PjAsT2M9YT4+PjA7ZWxzZXt2YXIgZD1NYXRoLmZsb29yKE1hdGgubG9nKGEpL01hdGguTE4yKTsxMDI0PT1kJiYoZD0xMDIzKTthKj1NYXRoLnBvdygyLC1kKTtiZD0oYzw8MzF8ZCsxMDIzPDwyMHwxMDQ4NTc2KmEmMTA0ODU3NSk+Pj4wO09jPTQ1MDM1OTk2MjczNzA0OTYqYT4+PjB9fQpmdW5jdGlvbiBxZChhKXt2YXIgYz1hLmNoYXJDb2RlQXQoNCksZD1hLmNoYXJDb2RlQXQoNSksZj1hLmNoYXJDb2RlQXQoNiksZz1hLmNoYXJDb2RlQXQoNyk7T2M9YS5jaGFyQ29kZUF0KDApKyhhLmNoYXJDb2RlQXQoMSk8PDgpKyhhLmNoYXJDb2RlQXQoMik8PDE2KSsoYS5jaGFyQ29kZUF0KDMpPDwyNCk+Pj4wO2JkPWMrKGQ8PDgpKyhmPDwxNikrKGc8PDI0KT4+PjB9ZnVuY3Rpb24gcmQoYSxjKXtyZXR1cm4gNDI5NDk2NzI5NipjK2F9ZnVuY3Rpb24gc2QoYSxjKXt2YXIgZD1jJjIxNDc0ODM2NDg7ZCYmKGE9fmErMT4+PjAsYz1+Yz4+PjAsMD09YSYmKGM9YysxPj4+MCkpO2E9cmQoYSxjKTtyZXR1cm4gZD8tYTphfWZ1bmN0aW9uIERkKGEsYyl7dmFyIGQ9YSYxO2E9KGE+Pj4xfGM8PDMxKT4+PjA7Yz4+Pj0xO2QmJihhPWErMT4+PjAsMD09YSYmKGM9YysxPj4+MCkpO2E9cmQoYSxjKTtyZXR1cm4gZD8tYTphfQpmdW5jdGlvbiBFZChhKXt2YXIgYz0yKihhPj4zMSkrMSxkPWE+Pj4yMyYyNTU7YSY9ODM4ODYwNztyZXR1cm4gMjU1PT1kP2E/TmFOOkluZmluaXR5KmM6MD09ZD9jKk1hdGgucG93KDIsLTE0OSkqYTpjKk1hdGgucG93KDIsZC0xNTApKihhK01hdGgucG93KDIsMjMpKX1mdW5jdGlvbiBGZChhLGMpe3ZhciBkPTIqKGM+PjMxKSsxLGY9Yz4+PjIwJjIwNDc7YT00Mjk0OTY3Mjk2KihjJjEwNDg1NzUpK2E7cmV0dXJuIDIwNDc9PWY/YT9OYU46SW5maW5pdHkqZDowPT1mP2QqTWF0aC5wb3coMiwtMTA3NCkqYTpkKk1hdGgucG93KDIsZi0xMDc1KSooYSs0NTAzNTk5NjI3MzcwNDk2KX1mdW5jdGlvbiBHZChhLGMpe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGE+Pj4wJjI1NSxhPj4+OCYyNTUsYT4+PjE2JjI1NSxhPj4+MjQmMjU1LGM+Pj4wJjI1NSxjPj4+OCYyNTUsYz4+PjE2JjI1NSxjPj4+MjQmMjU1KX12YXIgSGQ9IjAxMjM0NTY3ODlhYmNkZWYiLnNwbGl0KCIiKTsKZnVuY3Rpb24gSWQoYSxjKXtmdW5jdGlvbiBkKG0pe2Zvcih2YXIgcD0xRTcscT0wOzc+cTtxKyspe3AvPTEwO3ZhciByPW0vcCUxMD4+PjA7aWYoMCE9cnx8bClsPSEwLGsrPWdbcl19fWlmKDIwOTcxNTE+PWMpcmV0dXJuIiIrKDQyOTQ5NjcyOTYqYythKTt2YXIgZj0oYT4+PjI0fGM8PDgpPj4+MCYxNjc3NzIxNTtjPWM+PjE2JjY1NTM1O2E9KGEmMTY3NzcyMTUpKzY3NzcyMTYqZis2NzEwNjU2KmM7Zis9ODE0NzQ5NypjO2MqPTI7MUU3PD1hJiYoZis9TWF0aC5mbG9vcihhLzFFNyksYSU9MUU3KTsxRTc8PWYmJihjKz1NYXRoLmZsb29yKGYvMUU3KSxmJT0xRTcpO3ZhciBnPUhkLGw9ITEsaz0iIjsoY3x8bCkmJmQoYyk7KGZ8fGwpJiZkKGYpOyhhfHxsKSYmZChhKTtyZXR1cm4ga31mdW5jdGlvbiBKZChhLGMpe3ZhciBkPWMmMjE0NzQ4MzY0ODtkJiYoYT1+YSsxPj4+MCxjPX5jKygwPT1hPzE6MCk+Pj4wKTthPUlkKGEsYyk7cmV0dXJuIGQ/Ii0iK2E6YX0KZnVuY3Rpb24gS2QoYSl7ZnVuY3Rpb24gYyhrLG0pe2Zvcih2YXIgcD0wOzg+cCYmKDEhPT1rfHwwPG0pO3ArKyltPWsqZ1twXSttLGdbcF09bSYyNTUsbT4+Pj04fWZ1bmN0aW9uIGQoKXtmb3IodmFyIGs9MDs4Pms7aysrKWdba109fmdba10mMjU1fXZhciBmPSExOyItIj09PWFbMF0mJihmPSEwLGE9YS5zbGljZSgxKSk7Zm9yKHZhciBnPVswLDAsMCwwLDAsMCwwLDBdLGw9MDtsPGEubGVuZ3RoO2wrKyljKDEwLEhkLmluZGV4T2YoYVtsXSkpO2YmJihkKCksYygxLDEpKTtyZXR1cm4gaWMoZyl9CmZ1bmN0aW9uIExkKGEpe2lmKGEuY29uc3RydWN0b3I9PT1VaW50OEFycmF5KXJldHVybiBhO2lmKGEuY29uc3RydWN0b3I9PT1BcnJheUJ1ZmZlcilyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoYSk7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBCdWZmZXImJmEuY29uc3RydWN0b3I9PT1CdWZmZXIpcmV0dXJuIG5ldyBVaW50OEFycmF5KGEpO2lmKGEuY29uc3RydWN0b3I9PT1BcnJheSlyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoYSk7aWYoYS5jb25zdHJ1Y3Rvcj09PVN0cmluZylyZXR1cm4gRmMoYSk7YmMoIlR5cGUgbm90IGNvbnZlcnRpYmxlIHRvIFVpbnQ4QXJyYXkuIik7cmV0dXJuIG5ldyBVaW50OEFycmF5KDApfTsKLy9+fldFQlBBVEh+fmV4dGVybmFsL2NvbV9nb29nbGVfcHJvdG9idWZfanMvYmluYXJ5L2RlY29kZXIuanMKZnVuY3Rpb24gTWQoYSxjLGQpe3RoaXMuYnl0ZXNfPW51bGw7dGhpcy50ZW1wSGlnaF89dGhpcy50ZW1wTG93Xz10aGlzLmN1cnNvcl89dGhpcy5lbmRfPXRoaXMuc3RhcnRfPTA7dGhpcy5lcnJvcl89ITE7YSYmdGhpcy5zZXRCbG9jayhhLGMsZCl9dmFyIFpkPVtdO2Z1bmN0aW9uICRkKGEsYyxkKXtpZihaZC5sZW5ndGgpe3ZhciBmPVpkLnBvcCgpO2EmJmYuc2V0QmxvY2soYSxjLGQpO3JldHVybiBmfXJldHVybiBuZXcgTWQoYSxjLGQpfU09TWQucHJvdG90eXBlO00uZnJlZT1mdW5jdGlvbigpe3RoaXMuY2xlYXIoKTsxMDA+WmQubGVuZ3RoJiZaZC5wdXNoKHRoaXMpfTtNLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuICRkKHRoaXMuYnl0ZXNfLHRoaXMuc3RhcnRfLHRoaXMuZW5kXy10aGlzLnN0YXJ0Xyl9O00uY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLmJ5dGVzXz1udWxsO3RoaXMuY3Vyc29yXz10aGlzLmVuZF89dGhpcy5zdGFydF89MDt0aGlzLmVycm9yXz0hMX07Ck0uZ2V0QnVmZmVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYnl0ZXNffTtNLnNldEJsb2NrPWZ1bmN0aW9uKGEsYyxkKXt0aGlzLmJ5dGVzXz1MZChhKTt0aGlzLnN0YXJ0Xz1FYihjKT9jOjA7dGhpcy5lbmRfPUViKGQpP3RoaXMuc3RhcnRfK2Q6dGhpcy5ieXRlc18ubGVuZ3RoO3RoaXMuY3Vyc29yXz10aGlzLnN0YXJ0X307TS5nZXRFbmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbmRffTtNLnNldEVuZD1mdW5jdGlvbihhKXt0aGlzLmVuZF89YX07TS5yZXNldD1mdW5jdGlvbigpe3RoaXMuY3Vyc29yXz10aGlzLnN0YXJ0X307TS5nZXRDdXJzb3I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJzb3JffTtNLnNldEN1cnNvcj1mdW5jdGlvbihhKXt0aGlzLmN1cnNvcl89YX07TS5hZHZhbmNlPWZ1bmN0aW9uKGEpe3RoaXMuY3Vyc29yXys9YX07TS5hdEVuZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnNvcl89PXRoaXMuZW5kX307Ck0ucGFzdEVuZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnNvcl8+dGhpcy5lbmRffTtNLmdldEVycm9yPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXJyb3JffHwwPnRoaXMuY3Vyc29yX3x8dGhpcy5jdXJzb3JfPnRoaXMuZW5kX307Ck0ucmVhZFNwbGl0VmFyaW50NjRfPWZ1bmN0aW9uKCl7Zm9yKHZhciBhLGM9MCxkLGY9MDs0PmY7ZisrKWlmKGE9dGhpcy5ieXRlc19bdGhpcy5jdXJzb3JfKytdLGN8PShhJjEyNyk8PDcqZiwxMjg+YSl7dGhpcy50ZW1wTG93Xz1jPj4+MDt0aGlzLnRlbXBIaWdoXz0wO3JldHVybn1hPXRoaXMuYnl0ZXNfW3RoaXMuY3Vyc29yXysrXTtjfD0oYSYxMjcpPDwyODtkPTB8KGEmMTI3KT4+NDtpZigxMjg+YSl0aGlzLnRlbXBMb3dfPWM+Pj4wLHRoaXMudGVtcEhpZ2hfPWQ+Pj4wO2Vsc2V7Zm9yKGY9MDs1PmY7ZisrKWlmKGE9dGhpcy5ieXRlc19bdGhpcy5jdXJzb3JfKytdLGR8PShhJjEyNyk8PDcqZiszLDEyOD5hKXt0aGlzLnRlbXBMb3dfPWM+Pj4wO3RoaXMudGVtcEhpZ2hfPWQ+Pj4wO3JldHVybn1iYygiRmFpbGVkIHRvIHJlYWQgdmFyaW50LCBlbmNvZGluZyBpcyBpbnZhbGlkLiIpO3RoaXMuZXJyb3JfPSEwfX07Ck0uc2tpcFZhcmludD1mdW5jdGlvbigpe2Zvcig7dGhpcy5ieXRlc19bdGhpcy5jdXJzb3JfXSYxMjg7KXRoaXMuY3Vyc29yXysrO3RoaXMuY3Vyc29yXysrfTtNLnVuc2tpcFZhcmludD1mdW5jdGlvbihhKXtmb3IoOzEyODxhOyl0aGlzLmN1cnNvcl8tLSxhPj4+PTc7dGhpcy5jdXJzb3JfLS19OwpNLnJlYWRVbnNpZ25lZFZhcmludDMyPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5ieXRlc187dmFyIGM9YVt0aGlzLmN1cnNvcl8rMF07dmFyIGQ9YyYxMjc7aWYoMTI4PmMpcmV0dXJuIHRoaXMuY3Vyc29yXys9MSxkO2M9YVt0aGlzLmN1cnNvcl8rMV07ZHw9KGMmMTI3KTw8NztpZigxMjg+YylyZXR1cm4gdGhpcy5jdXJzb3JfKz0yLGQ7Yz1hW3RoaXMuY3Vyc29yXysyXTtkfD0oYyYxMjcpPDwxNDtpZigxMjg+YylyZXR1cm4gdGhpcy5jdXJzb3JfKz0zLGQ7Yz1hW3RoaXMuY3Vyc29yXyszXTtkfD0oYyYxMjcpPDwyMTtpZigxMjg+YylyZXR1cm4gdGhpcy5jdXJzb3JfKz00LGQ7Yz1hW3RoaXMuY3Vyc29yXys0XTtkfD0oYyYxNSk8PDI4O2lmKDEyOD5jKXJldHVybiB0aGlzLmN1cnNvcl8rPTUsZD4+PjA7dGhpcy5jdXJzb3JfKz01OzEyODw9YVt0aGlzLmN1cnNvcl8rK10mJjEyODw9YVt0aGlzLmN1cnNvcl8rK10mJjEyODw9YVt0aGlzLmN1cnNvcl8rK10mJjEyODw9YVt0aGlzLmN1cnNvcl8rK10mJgp0aGlzLmN1cnNvcl8rKztyZXR1cm4gZH07TS5yZWFkU2lnbmVkVmFyaW50MzI9TWQucHJvdG90eXBlLnJlYWRVbnNpZ25lZFZhcmludDMyO00ucmVhZFVuc2lnbmVkVmFyaW50MzJTdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWFkVW5zaWduZWRWYXJpbnQzMigpLnRvU3RyaW5nKCl9O00ucmVhZFNpZ25lZFZhcmludDMyU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhZFNpZ25lZFZhcmludDMyKCkudG9TdHJpbmcoKX07TS5yZWFkWmlnemFnVmFyaW50MzI9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLnJlYWRVbnNpZ25lZFZhcmludDMyKCk7cmV0dXJuIGE+Pj4xXi0oYSYxKX07TS5yZWFkVW5zaWduZWRWYXJpbnQ2ND1mdW5jdGlvbigpe3RoaXMucmVhZFNwbGl0VmFyaW50NjRfKCk7cmV0dXJuIHJkKHRoaXMudGVtcExvd18sdGhpcy50ZW1wSGlnaF8pfTsKTS5yZWFkVW5zaWduZWRWYXJpbnQ2NFN0cmluZz1mdW5jdGlvbigpe3RoaXMucmVhZFNwbGl0VmFyaW50NjRfKCk7cmV0dXJuIElkKHRoaXMudGVtcExvd18sdGhpcy50ZW1wSGlnaF8pfTtNLnJlYWRTaWduZWRWYXJpbnQ2ND1mdW5jdGlvbigpe3RoaXMucmVhZFNwbGl0VmFyaW50NjRfKCk7cmV0dXJuIHNkKHRoaXMudGVtcExvd18sdGhpcy50ZW1wSGlnaF8pfTtNLnJlYWRTaWduZWRWYXJpbnQ2NFN0cmluZz1mdW5jdGlvbigpe3RoaXMucmVhZFNwbGl0VmFyaW50NjRfKCk7cmV0dXJuIEpkKHRoaXMudGVtcExvd18sdGhpcy50ZW1wSGlnaF8pfTtNLnJlYWRaaWd6YWdWYXJpbnQ2ND1mdW5jdGlvbigpe3RoaXMucmVhZFNwbGl0VmFyaW50NjRfKCk7cmV0dXJuIERkKHRoaXMudGVtcExvd18sdGhpcy50ZW1wSGlnaF8pfTtNLnJlYWRaaWd6YWdWYXJpbnQ2NFN0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlYWRaaWd6YWdWYXJpbnQ2NCgpLnRvU3RyaW5nKCl9OwpNLnJlYWRVaW50OD1mdW5jdGlvbigpe3ZhciBhPXRoaXMuYnl0ZXNfW3RoaXMuY3Vyc29yXyswXTt0aGlzLmN1cnNvcl8rPTE7cmV0dXJuIGF9O00ucmVhZFVpbnQxNj1mdW5jdGlvbigpe3ZhciBhPXRoaXMuYnl0ZXNfW3RoaXMuY3Vyc29yXyswXSxjPXRoaXMuYnl0ZXNfW3RoaXMuY3Vyc29yXysxXTt0aGlzLmN1cnNvcl8rPTI7cmV0dXJuIGE8PDB8Yzw8OH07TS5yZWFkVWludDMyPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5ieXRlc19bdGhpcy5jdXJzb3JfKzBdLGM9dGhpcy5ieXRlc19bdGhpcy5jdXJzb3JfKzFdLGQ9dGhpcy5ieXRlc19bdGhpcy5jdXJzb3JfKzJdLGY9dGhpcy5ieXRlc19bdGhpcy5jdXJzb3JfKzNdO3RoaXMuY3Vyc29yXys9NDtyZXR1cm4oYTw8MHxjPDw4fGQ8PDE2fGY8PDI0KT4+PjB9O00ucmVhZFVpbnQ2ND1mdW5jdGlvbigpe3ZhciBhPXRoaXMucmVhZFVpbnQzMigpLGM9dGhpcy5yZWFkVWludDMyKCk7cmV0dXJuIHJkKGEsYyl9OwpNLnJlYWRVaW50NjRTdHJpbmc9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLnJlYWRVaW50MzIoKSxjPXRoaXMucmVhZFVpbnQzMigpO3JldHVybiBJZChhLGMpfTtNLnJlYWRJbnQ4PWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5ieXRlc19bdGhpcy5jdXJzb3JfKzBdO3RoaXMuY3Vyc29yXys9MTtyZXR1cm4gYTw8MjQ+PjI0fTtNLnJlYWRJbnQxNj1mdW5jdGlvbigpe3ZhciBhPXRoaXMuYnl0ZXNfW3RoaXMuY3Vyc29yXyswXSxjPXRoaXMuYnl0ZXNfW3RoaXMuY3Vyc29yXysxXTt0aGlzLmN1cnNvcl8rPTI7cmV0dXJuKGE8PDB8Yzw8OCk8PDE2Pj4xNn07TS5yZWFkSW50MzI9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmJ5dGVzX1t0aGlzLmN1cnNvcl8rMF0sYz10aGlzLmJ5dGVzX1t0aGlzLmN1cnNvcl8rMV0sZD10aGlzLmJ5dGVzX1t0aGlzLmN1cnNvcl8rMl0sZj10aGlzLmJ5dGVzX1t0aGlzLmN1cnNvcl8rM107dGhpcy5jdXJzb3JfKz00O3JldHVybiBhPDwwfGM8PDh8ZDw8MTZ8Zjw8MjR9OwpNLnJlYWRJbnQ2ND1mdW5jdGlvbigpe3ZhciBhPXRoaXMucmVhZFVpbnQzMigpLGM9dGhpcy5yZWFkVWludDMyKCk7cmV0dXJuIHNkKGEsYyl9O00ucmVhZEludDY0U3RyaW5nPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5yZWFkVWludDMyKCksYz10aGlzLnJlYWRVaW50MzIoKTtyZXR1cm4gSmQoYSxjKX07TS5yZWFkRmxvYXQ9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLnJlYWRVaW50MzIoKTtyZXR1cm4gRWQoYSl9O00ucmVhZERvdWJsZT1mdW5jdGlvbigpe3ZhciBhPXRoaXMucmVhZFVpbnQzMigpLGM9dGhpcy5yZWFkVWludDMyKCk7cmV0dXJuIEZkKGEsYyl9O00ucmVhZEJvb2w9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuYnl0ZXNfW3RoaXMuY3Vyc29yXysrXX07TS5yZWFkRW51bT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlYWRTaWduZWRWYXJpbnQzMigpfTsKTS5yZWFkU3RyaW5nPWZ1bmN0aW9uKGEpe3ZhciBjPXRoaXMuYnl0ZXNfLGQ9dGhpcy5jdXJzb3JfO2E9ZCthO2Zvcih2YXIgZj1bXSxnPSIiO2Q8YTspe3ZhciBsPWNbZCsrXTtpZigxMjg+bClmLnB1c2gobCk7ZWxzZSBpZigxOTI+bCljb250aW51ZTtlbHNlIGlmKDIyND5sKXt2YXIgaz1jW2QrK107Zi5wdXNoKChsJjMxKTw8NnxrJjYzKX1lbHNlIGlmKDI0MD5sKXtrPWNbZCsrXTt2YXIgbT1jW2QrK107Zi5wdXNoKChsJjE1KTw8MTJ8KGsmNjMpPDw2fG0mNjMpfWVsc2UgaWYoMjQ4Pmwpe2s9Y1tkKytdO209Y1tkKytdO3ZhciBwPWNbZCsrXTtsPShsJjcpPDwxOHwoayY2Myk8PDEyfChtJjYzKTw8NnxwJjYzO2wtPTY1NTM2O2YucHVzaCgobD4+MTAmMTAyMykrNTUyOTYsKGwmMTAyMykrNTYzMjApfTgxOTI8PWYubGVuZ3RoJiYoZys9U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLGYpLGYubGVuZ3RoPTApfWcrPWljKGYpO3RoaXMuY3Vyc29yXz1kO3JldHVybiBnfTsKTS5yZWFkU3RyaW5nV2l0aExlbmd0aD1mdW5jdGlvbigpe3ZhciBhPXRoaXMucmVhZFVuc2lnbmVkVmFyaW50MzIoKTtyZXR1cm4gdGhpcy5yZWFkU3RyaW5nKGEpfTtNLnJlYWRCeXRlcz1mdW5jdGlvbihhKXtpZigwPmF8fHRoaXMuY3Vyc29yXythPnRoaXMuYnl0ZXNfLmxlbmd0aClyZXR1cm4gdGhpcy5lcnJvcl89ITAsYmMoIkludmFsaWQgYnl0ZSBsZW5ndGghIiksbmV3IFVpbnQ4QXJyYXkoMCk7dmFyIGM9dGhpcy5ieXRlc18uc3ViYXJyYXkodGhpcy5jdXJzb3JfLHRoaXMuY3Vyc29yXythKTt0aGlzLmN1cnNvcl8rPWE7cmV0dXJuIGN9O00ucmVhZFZhcmludEhhc2g2ND1mdW5jdGlvbigpe3RoaXMucmVhZFNwbGl0VmFyaW50NjRfKCk7cmV0dXJuIEdkKHRoaXMudGVtcExvd18sdGhpcy50ZW1wSGlnaF8pfTsKTS5yZWFkRml4ZWRIYXNoNjQ9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmJ5dGVzXyxjPXRoaXMuY3Vyc29yXyxkPWFbYyswXSxmPWFbYysxXSxnPWFbYysyXSxsPWFbYyszXSxrPWFbYys0XSxtPWFbYys1XSxwPWFbYys2XTthPWFbYys3XTt0aGlzLmN1cnNvcl8rPTg7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoZCxmLGcsbCxrLG0scCxhKX07Ci8vfn5XRUJQQVRIfn5leHRlcm5hbC9jb21fZ29vZ2xlX3Byb3RvYnVmX2pzL2JpbmFyeS9lbmNvZGVyLmpzCmZ1bmN0aW9uIGFlKCl7dGhpcy5idWZmZXJfPVtdfU09YWUucHJvdG90eXBlO00ubGVuZ3RoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYnVmZmVyXy5sZW5ndGh9O00uZW5kPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5idWZmZXJfO3RoaXMuYnVmZmVyXz1bXTtyZXR1cm4gYX07TS53cml0ZVNwbGl0VmFyaW50NjQ9ZnVuY3Rpb24oYSxjKXtmb3IoOzA8Y3x8MTI3PGE7KXRoaXMuYnVmZmVyXy5wdXNoKGEmMTI3fDEyOCksYT0oYT4+Pjd8Yzw8MjUpPj4+MCxjPj4+PTc7dGhpcy5idWZmZXJfLnB1c2goYSl9O00ud3JpdGVTcGxpdEZpeGVkNjQ9ZnVuY3Rpb24oYSxjKXt0aGlzLndyaXRlVWludDMyKGEpO3RoaXMud3JpdGVVaW50MzIoYyl9O00ud3JpdGVVbnNpZ25lZFZhcmludDMyPWZ1bmN0aW9uKGEpe2Zvcig7MTI3PGE7KXRoaXMuYnVmZmVyXy5wdXNoKGEmMTI3fDEyOCksYT4+Pj03O3RoaXMuYnVmZmVyXy5wdXNoKGEpfTsKTS53cml0ZVNpZ25lZFZhcmludDMyPWZ1bmN0aW9uKGEpe2lmKDA8PWEpdGhpcy53cml0ZVVuc2lnbmVkVmFyaW50MzIoYSk7ZWxzZXtmb3IodmFyIGM9MDs5PmM7YysrKXRoaXMuYnVmZmVyXy5wdXNoKGEmMTI3fDEyOCksYT4+PTc7dGhpcy5idWZmZXJfLnB1c2goMSl9fTtNLndyaXRlVW5zaWduZWRWYXJpbnQ2ND1mdW5jdGlvbihhKXtkZChhKTt0aGlzLndyaXRlU3BsaXRWYXJpbnQ2NChPYyxiZCl9O00ud3JpdGVTaWduZWRWYXJpbnQ2ND1mdW5jdGlvbihhKXtkZChhKTt0aGlzLndyaXRlU3BsaXRWYXJpbnQ2NChPYyxiZCl9O00ud3JpdGVaaWd6YWdWYXJpbnQzMj1mdW5jdGlvbihhKXt0aGlzLndyaXRlVW5zaWduZWRWYXJpbnQzMigoYTw8MV5hPj4zMSk+Pj4wKX07TS53cml0ZVppZ3phZ1ZhcmludDY0PWZ1bmN0aW9uKGEpe2VkKGEpO3RoaXMud3JpdGVTcGxpdFZhcmludDY0KE9jLGJkKX07Ck0ud3JpdGVaaWd6YWdWYXJpbnQ2NFN0cmluZz1mdW5jdGlvbihhKXt0aGlzLndyaXRlWmlnemFnVmFyaW50NjQocGFyc2VJbnQoYSwxMCkpfTtNLndyaXRlVWludDg9ZnVuY3Rpb24oYSl7dGhpcy5idWZmZXJfLnB1c2goYT4+PjAmMjU1KX07TS53cml0ZVVpbnQxNj1mdW5jdGlvbihhKXt0aGlzLmJ1ZmZlcl8ucHVzaChhPj4+MCYyNTUpO3RoaXMuYnVmZmVyXy5wdXNoKGE+Pj44JjI1NSl9O00ud3JpdGVVaW50MzI9ZnVuY3Rpb24oYSl7dGhpcy5idWZmZXJfLnB1c2goYT4+PjAmMjU1KTt0aGlzLmJ1ZmZlcl8ucHVzaChhPj4+OCYyNTUpO3RoaXMuYnVmZmVyXy5wdXNoKGE+Pj4xNiYyNTUpO3RoaXMuYnVmZmVyXy5wdXNoKGE+Pj4yNCYyNTUpfTtNLndyaXRlVWludDY0PWZ1bmN0aW9uKGEpe2NkKGEpO3RoaXMud3JpdGVVaW50MzIoT2MpO3RoaXMud3JpdGVVaW50MzIoYmQpfTtNLndyaXRlSW50OD1mdW5jdGlvbihhKXt0aGlzLmJ1ZmZlcl8ucHVzaChhPj4+MCYyNTUpfTsKTS53cml0ZUludDE2PWZ1bmN0aW9uKGEpe3RoaXMuYnVmZmVyXy5wdXNoKGE+Pj4wJjI1NSk7dGhpcy5idWZmZXJfLnB1c2goYT4+PjgmMjU1KX07TS53cml0ZUludDMyPWZ1bmN0aW9uKGEpe3RoaXMuYnVmZmVyXy5wdXNoKGE+Pj4wJjI1NSk7dGhpcy5idWZmZXJfLnB1c2goYT4+PjgmMjU1KTt0aGlzLmJ1ZmZlcl8ucHVzaChhPj4+MTYmMjU1KTt0aGlzLmJ1ZmZlcl8ucHVzaChhPj4+MjQmMjU1KX07TS53cml0ZUludDY0PWZ1bmN0aW9uKGEpe2RkKGEpO3RoaXMud3JpdGVTcGxpdEZpeGVkNjQoT2MsYmQpfTtNLndyaXRlSW50NjRTdHJpbmc9ZnVuY3Rpb24oYSl7cWQoS2QoYSkpO3RoaXMud3JpdGVTcGxpdEZpeGVkNjQoT2MsYmQpfTtNLndyaXRlRmxvYXQ9ZnVuY3Rpb24oYSl7ZmQoYSk7dGhpcy53cml0ZVVpbnQzMihPYyl9O00ud3JpdGVEb3VibGU9ZnVuY3Rpb24oYSl7Z2QoYSk7dGhpcy53cml0ZVVpbnQzMihPYyk7dGhpcy53cml0ZVVpbnQzMihiZCl9OwpNLndyaXRlQm9vbD1mdW5jdGlvbihhKXt0aGlzLmJ1ZmZlcl8ucHVzaChhPzE6MCl9O00ud3JpdGVFbnVtPWZ1bmN0aW9uKGEpe3RoaXMud3JpdGVTaWduZWRWYXJpbnQzMihhKX07TS53cml0ZUJ5dGVzPWZ1bmN0aW9uKGEpe3RoaXMuYnVmZmVyXy5wdXNoLmFwcGx5KHRoaXMuYnVmZmVyXyxhKX07TS53cml0ZVZhcmludEhhc2g2ND1mdW5jdGlvbihhKXtxZChhKTt0aGlzLndyaXRlU3BsaXRWYXJpbnQ2NChPYyxiZCl9O00ud3JpdGVGaXhlZEhhc2g2ND1mdW5jdGlvbihhKXtxZChhKTt0aGlzLndyaXRlVWludDMyKE9jKTt0aGlzLndyaXRlVWludDMyKGJkKX07Ck0ud3JpdGVTdHJpbmc9ZnVuY3Rpb24oYSl7Zm9yKHZhciBjPXRoaXMuYnVmZmVyXy5sZW5ndGgsZD0wO2Q8YS5sZW5ndGg7ZCsrKXt2YXIgZj1hLmNoYXJDb2RlQXQoZCk7aWYoMTI4PmYpdGhpcy5idWZmZXJfLnB1c2goZik7ZWxzZSBpZigyMDQ4PmYpdGhpcy5idWZmZXJfLnB1c2goZj4+NnwxOTIpLHRoaXMuYnVmZmVyXy5wdXNoKGYmNjN8MTI4KTtlbHNlIGlmKDY1NTM2PmYpaWYoNTUyOTY8PWYmJjU2MzE5Pj1mJiZkKzE8YS5sZW5ndGgpe3ZhciBnPWEuY2hhckNvZGVBdChkKzEpOzU2MzIwPD1nJiY1NzM0Mz49ZyYmKGY9MTAyNCooZi01NTI5NikrZy01NjMyMCs2NTUzNix0aGlzLmJ1ZmZlcl8ucHVzaChmPj4xOHwyNDApLHRoaXMuYnVmZmVyXy5wdXNoKGY+PjEyJjYzfDEyOCksdGhpcy5idWZmZXJfLnB1c2goZj4+NiY2M3wxMjgpLHRoaXMuYnVmZmVyXy5wdXNoKGYmNjN8MTI4KSxkKyspfWVsc2UgdGhpcy5idWZmZXJfLnB1c2goZj4+MTJ8MjI0KSx0aGlzLmJ1ZmZlcl8ucHVzaChmPj4KNiY2M3wxMjgpLHRoaXMuYnVmZmVyXy5wdXNoKGYmNjN8MTI4KX1yZXR1cm4gdGhpcy5idWZmZXJfLmxlbmd0aC1jfTsKLy9+fldFQlBBVEh+fmV4dGVybmFsL2NvbV9nb29nbGVfcHJvdG9idWZfanMvYmluYXJ5L3JlYWRlci5qcwpmdW5jdGlvbiBiZShhLGMsZCl7dGhpcy5kZWNvZGVyXz0kZChhLGMsZCk7dGhpcy5maWVsZEN1cnNvcl89dGhpcy5kZWNvZGVyXy5nZXRDdXJzb3IoKTt0aGlzLm5leHRXaXJlVHlwZV89dGhpcy5uZXh0RmllbGRfPS0xO3RoaXMuZXJyb3JfPSExO3RoaXMucmVhZENhbGxiYWNrc189bnVsbH12YXIgY2U9W107TT1iZS5wcm90b3R5cGU7TS5hbGxvYz1mdW5jdGlvbihhLGMsZCl7aWYoY2UubGVuZ3RoKXt2YXIgZj1jZS5wb3AoKTthJiZmLmRlY29kZXJfLnNldEJsb2NrKGEsYyxkKTtyZXR1cm4gZn1yZXR1cm4gbmV3IGJlKGEsYyxkKX07TS5mcmVlPWZ1bmN0aW9uKCl7dGhpcy5kZWNvZGVyXy5jbGVhcigpO3RoaXMubmV4dFdpcmVUeXBlXz10aGlzLm5leHRGaWVsZF89LTE7dGhpcy5lcnJvcl89ITE7dGhpcy5yZWFkQ2FsbGJhY2tzXz1udWxsOzEwMD5jZS5sZW5ndGgmJmNlLnB1c2godGhpcyl9O00uZ2V0RmllbGRDdXJzb3I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5maWVsZEN1cnNvcl99OwpNLmdldEN1cnNvcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRlY29kZXJfLmdldEN1cnNvcigpfTtNLmdldEJ1ZmZlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRlY29kZXJfLmdldEJ1ZmZlcigpfTtNLmdldEZpZWxkTnVtYmVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmV4dEZpZWxkX307TS5nZXRXaXJlVHlwZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5leHRXaXJlVHlwZV99O00uaXNFbmRHcm91cD1mdW5jdGlvbigpe3JldHVybiA0PT10aGlzLm5leHRXaXJlVHlwZV99O00uZ2V0RXJyb3I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lcnJvcl98fHRoaXMuZGVjb2Rlcl8uZ2V0RXJyb3IoKX07TS5zZXRCbG9jaz1mdW5jdGlvbihhLGMsZCl7dGhpcy5kZWNvZGVyXy5zZXRCbG9jayhhLGMsZCk7dGhpcy5uZXh0V2lyZVR5cGVfPXRoaXMubmV4dEZpZWxkXz0tMX07Ck0ucmVzZXQ9ZnVuY3Rpb24oKXt0aGlzLmRlY29kZXJfLnJlc2V0KCk7dGhpcy5uZXh0V2lyZVR5cGVfPXRoaXMubmV4dEZpZWxkXz0tMX07TS5hZHZhbmNlPWZ1bmN0aW9uKGEpe3RoaXMuZGVjb2Rlcl8uYWR2YW5jZShhKX07Ck0ubmV4dEZpZWxkPWZ1bmN0aW9uKCl7aWYodGhpcy5kZWNvZGVyXy5hdEVuZCgpKXJldHVybiExO2lmKHRoaXMuZ2V0RXJyb3IoKSlyZXR1cm4gYmMoIkRlY29kZXIgaGl0IGFuIGVycm9yIiksITE7dGhpcy5maWVsZEN1cnNvcl89dGhpcy5kZWNvZGVyXy5nZXRDdXJzb3IoKTt2YXIgYT10aGlzLmRlY29kZXJfLnJlYWRVbnNpZ25lZFZhcmludDMyKCksYz1hPj4+MzthJj03O2lmKDAhPWEmJjUhPWEmJjEhPWEmJjIhPWEmJjMhPWEmJjQhPWEpcmV0dXJuIGJjKCJJbnZhbGlkIHdpcmUgdHlwZTogJXMgKGF0IHBvc2l0aW9uICVzKSIsYSx0aGlzLmZpZWxkQ3Vyc29yXyksdGhpcy5lcnJvcl89ITAsITE7dGhpcy5uZXh0RmllbGRfPWM7dGhpcy5uZXh0V2lyZVR5cGVfPWE7cmV0dXJuITB9O00udW5za2lwSGVhZGVyPWZ1bmN0aW9uKCl7dGhpcy5kZWNvZGVyXy51bnNraXBWYXJpbnQodGhpcy5uZXh0RmllbGRfPDwzfHRoaXMubmV4dFdpcmVUeXBlXyl9OwpNLnNraXBNYXRjaGluZ0ZpZWxkcz1mdW5jdGlvbigpe3ZhciBhPXRoaXMubmV4dEZpZWxkXztmb3IodGhpcy51bnNraXBIZWFkZXIoKTt0aGlzLm5leHRGaWVsZCgpJiZ0aGlzLmdldEZpZWxkTnVtYmVyKCk9PWE7KXRoaXMuc2tpcEZpZWxkKCk7dGhpcy5kZWNvZGVyXy5hdEVuZCgpfHx0aGlzLnVuc2tpcEhlYWRlcigpfTtNLnNraXBWYXJpbnRGaWVsZD1mdW5jdGlvbigpezAhPXRoaXMubmV4dFdpcmVUeXBlXz8oYmMoIkludmFsaWQgd2lyZSB0eXBlIGZvciBza2lwVmFyaW50RmllbGQiKSx0aGlzLnNraXBGaWVsZCgpKTp0aGlzLmRlY29kZXJfLnNraXBWYXJpbnQoKX07TS5za2lwRGVsaW1pdGVkRmllbGQ9ZnVuY3Rpb24oKXtpZigyIT10aGlzLm5leHRXaXJlVHlwZV8pYmMoIkludmFsaWQgd2lyZSB0eXBlIGZvciBza2lwRGVsaW1pdGVkRmllbGQiKSx0aGlzLnNraXBGaWVsZCgpO2Vsc2V7dmFyIGE9dGhpcy5kZWNvZGVyXy5yZWFkVW5zaWduZWRWYXJpbnQzMigpO3RoaXMuZGVjb2Rlcl8uYWR2YW5jZShhKX19OwpNLnNraXBGaXhlZDMyRmllbGQ9ZnVuY3Rpb24oKXs1IT10aGlzLm5leHRXaXJlVHlwZV8/KGJjKCJJbnZhbGlkIHdpcmUgdHlwZSBmb3Igc2tpcEZpeGVkMzJGaWVsZCIpLHRoaXMuc2tpcEZpZWxkKCkpOnRoaXMuZGVjb2Rlcl8uYWR2YW5jZSg0KX07TS5za2lwRml4ZWQ2NEZpZWxkPWZ1bmN0aW9uKCl7MSE9dGhpcy5uZXh0V2lyZVR5cGVfPyhiYygiSW52YWxpZCB3aXJlIHR5cGUgZm9yIHNraXBGaXhlZDY0RmllbGQiKSx0aGlzLnNraXBGaWVsZCgpKTp0aGlzLmRlY29kZXJfLmFkdmFuY2UoOCl9OwpNLnNraXBHcm91cD1mdW5jdGlvbigpe3ZhciBhPXRoaXMubmV4dEZpZWxkXztkb3tpZighdGhpcy5uZXh0RmllbGQoKSl7YmMoIlVubWF0Y2hlZCBzdGFydC1ncm91cCB0YWc6IHN0cmVhbSBFT0YiKTt0aGlzLmVycm9yXz0hMDticmVha31pZig0PT10aGlzLm5leHRXaXJlVHlwZV8pe3RoaXMubmV4dEZpZWxkXyE9YSYmKGJjKCJVbm1hdGNoZWQgZW5kLWdyb3VwIHRhZyIpLHRoaXMuZXJyb3JfPSEwKTticmVha310aGlzLnNraXBGaWVsZCgpfXdoaWxlKDEpfTtNLnNraXBGaWVsZD1mdW5jdGlvbigpe3N3aXRjaCh0aGlzLm5leHRXaXJlVHlwZV8pe2Nhc2UgMDp0aGlzLnNraXBWYXJpbnRGaWVsZCgpO2JyZWFrO2Nhc2UgMTp0aGlzLnNraXBGaXhlZDY0RmllbGQoKTticmVhaztjYXNlIDI6dGhpcy5za2lwRGVsaW1pdGVkRmllbGQoKTticmVhaztjYXNlIDU6dGhpcy5za2lwRml4ZWQzMkZpZWxkKCk7YnJlYWs7Y2FzZSAzOnRoaXMuc2tpcEdyb3VwKCk7YnJlYWs7ZGVmYXVsdDpiYygiSW52YWxpZCB3aXJlIGVuY29kaW5nIGZvciBmaWVsZC4iKX19OwpNLnJlZ2lzdGVyUmVhZENhbGxiYWNrPWZ1bmN0aW9uKGEsYyl7SmIodGhpcy5yZWFkQ2FsbGJhY2tzXykmJih0aGlzLnJlYWRDYWxsYmFja3NfPXt9KTt0aGlzLnJlYWRDYWxsYmFja3NfW2FdPWN9O00ucnVuUmVhZENhbGxiYWNrPWZ1bmN0aW9uKGEpe3JldHVybigwLHRoaXMucmVhZENhbGxiYWNrc19bYV0pKHRoaXMpfTsKTS5yZWFkQW55PWZ1bmN0aW9uKGEpe3RoaXMubmV4dFdpcmVUeXBlXz1OYyhhKTtzd2l0Y2goYSl7Y2FzZSAxOnJldHVybiB0aGlzLnJlYWREb3VibGUoKTtjYXNlIDI6cmV0dXJuIHRoaXMucmVhZEZsb2F0KCk7Y2FzZSAzOnJldHVybiB0aGlzLnJlYWRJbnQ2NCgpO2Nhc2UgNDpyZXR1cm4gdGhpcy5yZWFkVWludDY0KCk7Y2FzZSA1OnJldHVybiB0aGlzLnJlYWRJbnQzMigpO2Nhc2UgNjpyZXR1cm4gdGhpcy5yZWFkRml4ZWQ2NCgpO2Nhc2UgNzpyZXR1cm4gdGhpcy5yZWFkRml4ZWQzMigpO2Nhc2UgODpyZXR1cm4gdGhpcy5yZWFkQm9vbCgpO2Nhc2UgOTpyZXR1cm4gdGhpcy5yZWFkU3RyaW5nKCk7Y2FzZSAxMDpiYygiR3JvdXAgZmllbGQgdHlwZSBub3Qgc3VwcG9ydGVkIGluIHJlYWRBbnkoKSIpO2Nhc2UgMTE6YmMoIk1lc3NhZ2UgZmllbGQgdHlwZSBub3Qgc3VwcG9ydGVkIGluIHJlYWRBbnkoKSIpO2Nhc2UgMTI6cmV0dXJuIHRoaXMucmVhZEJ5dGVzKCk7Y2FzZSAxMzpyZXR1cm4gdGhpcy5yZWFkVWludDMyKCk7CmNhc2UgMTQ6cmV0dXJuIHRoaXMucmVhZEVudW0oKTtjYXNlIDE1OnJldHVybiB0aGlzLnJlYWRTZml4ZWQzMigpO2Nhc2UgMTY6cmV0dXJuIHRoaXMucmVhZFNmaXhlZDY0KCk7Y2FzZSAxNzpyZXR1cm4gdGhpcy5yZWFkU2ludDMyKCk7Y2FzZSAxODpyZXR1cm4gdGhpcy5yZWFkU2ludDY0KCk7Y2FzZSAzMDpyZXR1cm4gdGhpcy5yZWFkRml4ZWRIYXNoNjQoKTtjYXNlIDMxOnJldHVybiB0aGlzLnJlYWRWYXJpbnRIYXNoNjQoKTtkZWZhdWx0OmJjKCJJbnZhbGlkIGZpZWxkIHR5cGUgaW4gcmVhZEFueSgpIil9cmV0dXJuIDB9O00ucmVhZE1lc3NhZ2U9ZnVuY3Rpb24oYSxjKXt2YXIgZD10aGlzLmRlY29kZXJfLmdldEVuZCgpLGY9dGhpcy5kZWNvZGVyXy5yZWFkVW5zaWduZWRWYXJpbnQzMigpO2Y9dGhpcy5kZWNvZGVyXy5nZXRDdXJzb3IoKStmO3RoaXMuZGVjb2Rlcl8uc2V0RW5kKGYpO2MoYSx0aGlzKTt0aGlzLmRlY29kZXJfLnNldEN1cnNvcihmKTt0aGlzLmRlY29kZXJfLnNldEVuZChkKX07Ck0ucmVhZEdyb3VwPWZ1bmN0aW9uKGEsYyxkKXtkKGMsdGhpcyk7dGhpcy5lcnJvcl98fDQ9PXRoaXMubmV4dFdpcmVUeXBlX3x8KGJjKCJHcm91cCBzdWJtZXNzYWdlIGRpZCBub3QgZW5kIHdpdGggYW4gRU5EX0dST1VQIHRhZyIpLHRoaXMuZXJyb3JfPSEwKX07TS5nZXRGaWVsZERlY29kZXI9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmRlY29kZXJfLnJlYWRVbnNpZ25lZFZhcmludDMyKCksYz10aGlzLmRlY29kZXJfLmdldEN1cnNvcigpLGQ9YythO2E9JGQodGhpcy5kZWNvZGVyXy5nZXRCdWZmZXIoKSxjLGEpO3RoaXMuZGVjb2Rlcl8uc2V0Q3Vyc29yKGQpO3JldHVybiBhfTtNLnJlYWRJbnQzMj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRlY29kZXJfLnJlYWRTaWduZWRWYXJpbnQzMigpfTtNLnJlYWRJbnQzMlN0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRlY29kZXJfLnJlYWRTaWduZWRWYXJpbnQzMlN0cmluZygpfTtNLnJlYWRJbnQ2ND1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRlY29kZXJfLnJlYWRTaWduZWRWYXJpbnQ2NCgpfTsKTS5yZWFkSW50NjRTdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kZWNvZGVyXy5yZWFkU2lnbmVkVmFyaW50NjRTdHJpbmcoKX07TS5yZWFkVWludDMyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGVjb2Rlcl8ucmVhZFVuc2lnbmVkVmFyaW50MzIoKX07TS5yZWFkVWludDMyU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGVjb2Rlcl8ucmVhZFVuc2lnbmVkVmFyaW50MzJTdHJpbmcoKX07TS5yZWFkVWludDY0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGVjb2Rlcl8ucmVhZFVuc2lnbmVkVmFyaW50NjQoKX07TS5yZWFkVWludDY0U3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGVjb2Rlcl8ucmVhZFVuc2lnbmVkVmFyaW50NjRTdHJpbmcoKX07TS5yZWFkU2ludDMyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGVjb2Rlcl8ucmVhZFppZ3phZ1ZhcmludDMyKCl9O00ucmVhZFNpbnQ2ND1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRlY29kZXJfLnJlYWRaaWd6YWdWYXJpbnQ2NCgpfTsKTS5yZWFkU2ludDY0U3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGVjb2Rlcl8ucmVhZFppZ3phZ1ZhcmludDY0U3RyaW5nKCl9O00ucmVhZEZpeGVkMzI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kZWNvZGVyXy5yZWFkVWludDMyKCl9O00ucmVhZEZpeGVkNjQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kZWNvZGVyXy5yZWFkVWludDY0KCl9O00ucmVhZEZpeGVkNjRTdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kZWNvZGVyXy5yZWFkVWludDY0U3RyaW5nKCl9O00ucmVhZFNmaXhlZDMyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGVjb2Rlcl8ucmVhZEludDMyKCl9O00ucmVhZFNmaXhlZDMyU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGVjb2Rlcl8ucmVhZEludDMyKCkudG9TdHJpbmcoKX07TS5yZWFkU2ZpeGVkNjQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kZWNvZGVyXy5yZWFkSW50NjQoKX07TS5yZWFkU2ZpeGVkNjRTdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kZWNvZGVyXy5yZWFkSW50NjRTdHJpbmcoKX07Ck0ucmVhZEZsb2F0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGVjb2Rlcl8ucmVhZEZsb2F0KCl9O00ucmVhZERvdWJsZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRlY29kZXJfLnJlYWREb3VibGUoKX07TS5yZWFkQm9vbD1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5kZWNvZGVyXy5yZWFkVW5zaWduZWRWYXJpbnQzMigpfTtNLnJlYWRFbnVtPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGVjb2Rlcl8ucmVhZFNpZ25lZFZhcmludDY0KCl9O00ucmVhZFN0cmluZz1mdW5jdGlvbigpe3ZhciBhPXRoaXMuZGVjb2Rlcl8ucmVhZFVuc2lnbmVkVmFyaW50MzIoKTtyZXR1cm4gdGhpcy5kZWNvZGVyXy5yZWFkU3RyaW5nKGEpfTtNLnJlYWRCeXRlcz1mdW5jdGlvbigpe3ZhciBhPXRoaXMuZGVjb2Rlcl8ucmVhZFVuc2lnbmVkVmFyaW50MzIoKTtyZXR1cm4gdGhpcy5kZWNvZGVyXy5yZWFkQnl0ZXMoYSl9O00ucmVhZFZhcmludEhhc2g2ND1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRlY29kZXJfLnJlYWRWYXJpbnRIYXNoNjQoKX07Ck0ucmVhZEZpeGVkSGFzaDY0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGVjb2Rlcl8ucmVhZEZpeGVkSGFzaDY0KCl9O00ucmVhZFBhY2tlZEZpZWxkXz1mdW5jdGlvbihhKXt2YXIgYz10aGlzLmRlY29kZXJfLnJlYWRVbnNpZ25lZFZhcmludDMyKCk7Yz10aGlzLmRlY29kZXJfLmdldEN1cnNvcigpK2M7Zm9yKHZhciBkPVtdO3RoaXMuZGVjb2Rlcl8uZ2V0Q3Vyc29yKCk8YzspZC5wdXNoKGEuY2FsbCh0aGlzLmRlY29kZXJfKSk7cmV0dXJuIGR9O00ucmVhZFBhY2tlZEludDMyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhZFBhY2tlZEZpZWxkXyh0aGlzLmRlY29kZXJfLnJlYWRTaWduZWRWYXJpbnQzMil9O00ucmVhZFBhY2tlZEludDMyU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhZFBhY2tlZEZpZWxkXyh0aGlzLmRlY29kZXJfLnJlYWRTaWduZWRWYXJpbnQzMlN0cmluZyl9O00ucmVhZFBhY2tlZEludDY0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhZFBhY2tlZEZpZWxkXyh0aGlzLmRlY29kZXJfLnJlYWRTaWduZWRWYXJpbnQ2NCl9OwpNLnJlYWRQYWNrZWRJbnQ2NFN0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlYWRQYWNrZWRGaWVsZF8odGhpcy5kZWNvZGVyXy5yZWFkU2lnbmVkVmFyaW50NjRTdHJpbmcpfTtNLnJlYWRQYWNrZWRVaW50MzI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWFkUGFja2VkRmllbGRfKHRoaXMuZGVjb2Rlcl8ucmVhZFVuc2lnbmVkVmFyaW50MzIpfTtNLnJlYWRQYWNrZWRVaW50MzJTdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWFkUGFja2VkRmllbGRfKHRoaXMuZGVjb2Rlcl8ucmVhZFVuc2lnbmVkVmFyaW50MzJTdHJpbmcpfTtNLnJlYWRQYWNrZWRVaW50NjQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWFkUGFja2VkRmllbGRfKHRoaXMuZGVjb2Rlcl8ucmVhZFVuc2lnbmVkVmFyaW50NjQpfTtNLnJlYWRQYWNrZWRVaW50NjRTdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWFkUGFja2VkRmllbGRfKHRoaXMuZGVjb2Rlcl8ucmVhZFVuc2lnbmVkVmFyaW50NjRTdHJpbmcpfTsKTS5yZWFkUGFja2VkU2ludDMyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhZFBhY2tlZEZpZWxkXyh0aGlzLmRlY29kZXJfLnJlYWRaaWd6YWdWYXJpbnQzMil9O00ucmVhZFBhY2tlZFNpbnQ2ND1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlYWRQYWNrZWRGaWVsZF8odGhpcy5kZWNvZGVyXy5yZWFkWmlnemFnVmFyaW50NjQpfTtNLnJlYWRQYWNrZWRTaW50NjRTdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWFkUGFja2VkRmllbGRfKHRoaXMuZGVjb2Rlcl8ucmVhZFppZ3phZ1ZhcmludDY0U3RyaW5nKX07TS5yZWFkUGFja2VkRml4ZWQzMj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlYWRQYWNrZWRGaWVsZF8odGhpcy5kZWNvZGVyXy5yZWFkVWludDMyKX07TS5yZWFkUGFja2VkRml4ZWQ2ND1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlYWRQYWNrZWRGaWVsZF8odGhpcy5kZWNvZGVyXy5yZWFkVWludDY0KX07TS5yZWFkUGFja2VkRml4ZWQ2NFN0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlYWRQYWNrZWRGaWVsZF8odGhpcy5kZWNvZGVyXy5yZWFkVWludDY0U3RyaW5nKX07Ck0ucmVhZFBhY2tlZFNmaXhlZDMyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhZFBhY2tlZEZpZWxkXyh0aGlzLmRlY29kZXJfLnJlYWRJbnQzMil9O00ucmVhZFBhY2tlZFNmaXhlZDY0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhZFBhY2tlZEZpZWxkXyh0aGlzLmRlY29kZXJfLnJlYWRJbnQ2NCl9O00ucmVhZFBhY2tlZFNmaXhlZDY0U3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhZFBhY2tlZEZpZWxkXyh0aGlzLmRlY29kZXJfLnJlYWRJbnQ2NFN0cmluZyl9O00ucmVhZFBhY2tlZEZsb2F0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhZFBhY2tlZEZpZWxkXyh0aGlzLmRlY29kZXJfLnJlYWRGbG9hdCl9O00ucmVhZFBhY2tlZERvdWJsZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlYWRQYWNrZWRGaWVsZF8odGhpcy5kZWNvZGVyXy5yZWFkRG91YmxlKX07TS5yZWFkUGFja2VkQm9vbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlYWRQYWNrZWRGaWVsZF8odGhpcy5kZWNvZGVyXy5yZWFkQm9vbCl9OwpNLnJlYWRQYWNrZWRFbnVtPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhZFBhY2tlZEZpZWxkXyh0aGlzLmRlY29kZXJfLnJlYWRFbnVtKX07TS5yZWFkUGFja2VkVmFyaW50SGFzaDY0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhZFBhY2tlZEZpZWxkXyh0aGlzLmRlY29kZXJfLnJlYWRWYXJpbnRIYXNoNjQpfTtNLnJlYWRQYWNrZWRGaXhlZEhhc2g2ND1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlYWRQYWNrZWRGaWVsZF8odGhpcy5kZWNvZGVyXy5yZWFkRml4ZWRIYXNoNjQpfTsKLy9+fldFQlBBVEh+fmV4dGVybmFsL2NvbV9nb29nbGVfcHJvdG9idWZfanMvYmluYXJ5L3dyaXRlci5qcwpmdW5jdGlvbiBkZSgpe3RoaXMuYmxvY2tzXz1bXTt0aGlzLnRvdGFsTGVuZ3RoXz0wO3RoaXMuZW5jb2Rlcl89bmV3IGFlO3RoaXMuYm9va21hcmtzXz1bXX1NPWRlLnByb3RvdHlwZTtNLmFwcGVuZFVpbnQ4QXJyYXlfPWZ1bmN0aW9uKGEpe3ZhciBjPXRoaXMuZW5jb2Rlcl8uZW5kKCk7dGhpcy5ibG9ja3NfLnB1c2goYyk7dGhpcy5ibG9ja3NfLnB1c2goYSk7dGhpcy50b3RhbExlbmd0aF8rPWMubGVuZ3RoK2EubGVuZ3RofTtNLmJlZ2luRGVsaW1pdGVkXz1mdW5jdGlvbihhKXt0aGlzLndyaXRlRmllbGRIZWFkZXJfKGEsMik7YT10aGlzLmVuY29kZXJfLmVuZCgpO3RoaXMuYmxvY2tzXy5wdXNoKGEpO3RoaXMudG90YWxMZW5ndGhfKz1hLmxlbmd0aDthLnB1c2godGhpcy50b3RhbExlbmd0aF8pO3JldHVybiBhfTsKTS5lbmREZWxpbWl0ZWRfPWZ1bmN0aW9uKGEpe3ZhciBjPWEucG9wKCk7Zm9yKGM9dGhpcy50b3RhbExlbmd0aF8rdGhpcy5lbmNvZGVyXy5sZW5ndGgoKS1jOzEyNzxjOylhLnB1c2goYyYxMjd8MTI4KSxjPj4+PTcsdGhpcy50b3RhbExlbmd0aF8rKzthLnB1c2goYyk7dGhpcy50b3RhbExlbmd0aF8rK307TS53cml0ZVNlcmlhbGl6ZWRNZXNzYWdlPWZ1bmN0aW9uKGEsYyxkKXt0aGlzLmFwcGVuZFVpbnQ4QXJyYXlfKGEuc3ViYXJyYXkoYyxkKSl9O00ubWF5YmVXcml0ZVNlcmlhbGl6ZWRNZXNzYWdlPWZ1bmN0aW9uKGEsYyxkKXtudWxsIT1hJiZudWxsIT1jJiZudWxsIT1kJiZ0aGlzLndyaXRlU2VyaWFsaXplZE1lc3NhZ2UoYSxjLGQpfTtNLnJlc2V0PWZ1bmN0aW9uKCl7dGhpcy5ibG9ja3NfPVtdO3RoaXMuZW5jb2Rlcl8uZW5kKCk7dGhpcy50b3RhbExlbmd0aF89MDt0aGlzLmJvb2ttYXJrc189W119OwpNLmdldFJlc3VsdEJ1ZmZlcj1mdW5jdGlvbigpe2Zvcih2YXIgYT1uZXcgVWludDhBcnJheSh0aGlzLnRvdGFsTGVuZ3RoXyt0aGlzLmVuY29kZXJfLmxlbmd0aCgpKSxjPXRoaXMuYmxvY2tzXyxkPWMubGVuZ3RoLGY9MCxnPTA7ZzxkO2crKyl7dmFyIGw9Y1tnXTthLnNldChsLGYpO2YrPWwubGVuZ3RofWM9dGhpcy5lbmNvZGVyXy5lbmQoKTthLnNldChjLGYpO3RoaXMuYmxvY2tzXz1bYV07cmV0dXJuIGF9O00uZ2V0UmVzdWx0QmFzZTY0U3RyaW5nPWZ1bmN0aW9uKGEpe3JldHVybiB0Yyh0aGlzLmdldFJlc3VsdEJ1ZmZlcigpLGEpfTtNLmJlZ2luU3ViTWVzc2FnZT1mdW5jdGlvbihhKXt0aGlzLmJvb2ttYXJrc18ucHVzaCh0aGlzLmJlZ2luRGVsaW1pdGVkXyhhKSl9O00uZW5kU3ViTWVzc2FnZT1mdW5jdGlvbigpe3RoaXMuZW5kRGVsaW1pdGVkXyh0aGlzLmJvb2ttYXJrc18ucG9wKCkpfTsKTS53cml0ZUZpZWxkSGVhZGVyXz1mdW5jdGlvbihhLGMpe3RoaXMuZW5jb2Rlcl8ud3JpdGVVbnNpZ25lZFZhcmludDMyKDgqYStjKX07Ck0ud3JpdGVBbnk9ZnVuY3Rpb24oYSxjLGQpe3N3aXRjaChhKXtjYXNlIDE6dGhpcy53cml0ZURvdWJsZShjLGQpO2JyZWFrO2Nhc2UgMjp0aGlzLndyaXRlRmxvYXQoYyxkKTticmVhaztjYXNlIDM6dGhpcy53cml0ZUludDY0KGMsZCk7YnJlYWs7Y2FzZSA0OnRoaXMud3JpdGVVaW50NjQoYyxkKTticmVhaztjYXNlIDU6dGhpcy53cml0ZUludDMyKGMsZCk7YnJlYWs7Y2FzZSA2OnRoaXMud3JpdGVGaXhlZDY0KGMsZCk7YnJlYWs7Y2FzZSA3OnRoaXMud3JpdGVGaXhlZDMyKGMsZCk7YnJlYWs7Y2FzZSA4OnRoaXMud3JpdGVCb29sKGMsZCk7YnJlYWs7Y2FzZSA5OnRoaXMud3JpdGVTdHJpbmcoYyxkKTticmVhaztjYXNlIDEwOmJjKCJHcm91cCBmaWVsZCB0eXBlIG5vdCBzdXBwb3J0ZWQgaW4gd3JpdGVBbnkoKSIpO2JyZWFrO2Nhc2UgMTE6YmMoIk1lc3NhZ2UgZmllbGQgdHlwZSBub3Qgc3VwcG9ydGVkIGluIHdyaXRlQW55KCkiKTticmVhaztjYXNlIDEyOnRoaXMud3JpdGVCeXRlcyhjLApkKTticmVhaztjYXNlIDEzOnRoaXMud3JpdGVVaW50MzIoYyxkKTticmVhaztjYXNlIDE0OnRoaXMud3JpdGVFbnVtKGMsZCk7YnJlYWs7Y2FzZSAxNTp0aGlzLndyaXRlU2ZpeGVkMzIoYyxkKTticmVhaztjYXNlIDE2OnRoaXMud3JpdGVTZml4ZWQ2NChjLGQpO2JyZWFrO2Nhc2UgMTc6dGhpcy53cml0ZVNpbnQzMihjLGQpO2JyZWFrO2Nhc2UgMTg6dGhpcy53cml0ZVNpbnQ2NChjLGQpO2JyZWFrO2Nhc2UgMzA6dGhpcy53cml0ZUZpeGVkSGFzaDY0KGMsZCk7YnJlYWs7Y2FzZSAzMTp0aGlzLndyaXRlVmFyaW50SGFzaDY0KGMsZCk7YnJlYWs7ZGVmYXVsdDpiYygiSW52YWxpZCBmaWVsZCB0eXBlIGluIHdyaXRlQW55KCkiKX19O00ud3JpdGVVbnNpZ25lZFZhcmludDMyXz1mdW5jdGlvbihhLGMpe251bGwhPWMmJih0aGlzLndyaXRlRmllbGRIZWFkZXJfKGEsMCksdGhpcy5lbmNvZGVyXy53cml0ZVVuc2lnbmVkVmFyaW50MzIoYykpfTsKTS53cml0ZVNpZ25lZFZhcmludDMyXz1mdW5jdGlvbihhLGMpe251bGwhPWMmJih0aGlzLndyaXRlRmllbGRIZWFkZXJfKGEsMCksdGhpcy5lbmNvZGVyXy53cml0ZVNpZ25lZFZhcmludDMyKGMpKX07TS53cml0ZVVuc2lnbmVkVmFyaW50NjRfPWZ1bmN0aW9uKGEsYyl7bnVsbCE9YyYmKHRoaXMud3JpdGVGaWVsZEhlYWRlcl8oYSwwKSx0aGlzLmVuY29kZXJfLndyaXRlVW5zaWduZWRWYXJpbnQ2NChjKSl9O00ud3JpdGVTaWduZWRWYXJpbnQ2NF89ZnVuY3Rpb24oYSxjKXtudWxsIT1jJiYodGhpcy53cml0ZUZpZWxkSGVhZGVyXyhhLDApLHRoaXMuZW5jb2Rlcl8ud3JpdGVTaWduZWRWYXJpbnQ2NChjKSl9O00ud3JpdGVaaWd6YWdWYXJpbnQzMl89ZnVuY3Rpb24oYSxjKXtudWxsIT1jJiYodGhpcy53cml0ZUZpZWxkSGVhZGVyXyhhLDApLHRoaXMuZW5jb2Rlcl8ud3JpdGVaaWd6YWdWYXJpbnQzMihjKSl9OwpNLndyaXRlWmlnemFnVmFyaW50NjRfPWZ1bmN0aW9uKGEsYyl7bnVsbCE9YyYmKHRoaXMud3JpdGVGaWVsZEhlYWRlcl8oYSwwKSx0aGlzLmVuY29kZXJfLndyaXRlWmlnemFnVmFyaW50NjQoYykpfTtNLndyaXRlWmlnemFnVmFyaW50NjRTdHJpbmdfPWZ1bmN0aW9uKGEsYyl7bnVsbCE9YyYmKHRoaXMud3JpdGVGaWVsZEhlYWRlcl8oYSwwKSx0aGlzLmVuY29kZXJfLndyaXRlWmlnemFnVmFyaW50NjRTdHJpbmcoYykpfTtNLndyaXRlSW50MzI9ZnVuY3Rpb24oYSxjKXtudWxsIT1jJiZ0aGlzLndyaXRlU2lnbmVkVmFyaW50MzJfKGEsYyl9O00ud3JpdGVJbnQzMlN0cmluZz1mdW5jdGlvbihhLGMpe251bGwhPWMmJnRoaXMud3JpdGVTaWduZWRWYXJpbnQzMl8oYSxwYXJzZUludChjLDEwKSl9O00ud3JpdGVJbnQ2ND1mdW5jdGlvbihhLGMpe251bGwhPWMmJnRoaXMud3JpdGVTaWduZWRWYXJpbnQ2NF8oYSxjKX07Ck0ud3JpdGVJbnQ2NFN0cmluZz1mdW5jdGlvbihhLGMpe251bGwhPWMmJihjPU1jKGMpLHRoaXMud3JpdGVGaWVsZEhlYWRlcl8oYSwwKSx0aGlzLmVuY29kZXJfLndyaXRlU3BsaXRWYXJpbnQ2NChjLmxvLGMuaGkpKX07TS53cml0ZVVpbnQzMj1mdW5jdGlvbihhLGMpe251bGwhPWMmJnRoaXMud3JpdGVVbnNpZ25lZFZhcmludDMyXyhhLGMpfTtNLndyaXRlVWludDMyU3RyaW5nPWZ1bmN0aW9uKGEsYyl7bnVsbCE9YyYmdGhpcy53cml0ZVVuc2lnbmVkVmFyaW50MzJfKGEscGFyc2VJbnQoYywxMCkpfTtNLndyaXRlVWludDY0PWZ1bmN0aW9uKGEsYyl7bnVsbCE9YyYmdGhpcy53cml0ZVVuc2lnbmVkVmFyaW50NjRfKGEsYyl9O00ud3JpdGVVaW50NjRTdHJpbmc9ZnVuY3Rpb24oYSxjKXtudWxsIT1jJiYoYz1LYyhjKSx0aGlzLndyaXRlRmllbGRIZWFkZXJfKGEsMCksdGhpcy5lbmNvZGVyXy53cml0ZVNwbGl0VmFyaW50NjQoYy5sbyxjLmhpKSl9OwpNLndyaXRlU2ludDMyPWZ1bmN0aW9uKGEsYyl7bnVsbCE9YyYmdGhpcy53cml0ZVppZ3phZ1ZhcmludDMyXyhhLGMpfTtNLndyaXRlU2ludDY0PWZ1bmN0aW9uKGEsYyl7bnVsbCE9YyYmdGhpcy53cml0ZVppZ3phZ1ZhcmludDY0XyhhLGMpfTtNLndyaXRlU2ludDY0U3RyaW5nPWZ1bmN0aW9uKGEsYyl7bnVsbCE9YyYmdGhpcy53cml0ZVppZ3phZ1ZhcmludDY0U3RyaW5nXyhhLGMpfTtNLndyaXRlRml4ZWQzMj1mdW5jdGlvbihhLGMpe251bGwhPWMmJih0aGlzLndyaXRlRmllbGRIZWFkZXJfKGEsNSksdGhpcy5lbmNvZGVyXy53cml0ZVVpbnQzMihjKSl9O00ud3JpdGVGaXhlZDY0PWZ1bmN0aW9uKGEsYyl7bnVsbCE9YyYmKHRoaXMud3JpdGVGaWVsZEhlYWRlcl8oYSwxKSx0aGlzLmVuY29kZXJfLndyaXRlVWludDY0KGMpKX07Ck0ud3JpdGVGaXhlZDY0U3RyaW5nPWZ1bmN0aW9uKGEsYyl7bnVsbCE9YyYmKGM9S2MoYyksdGhpcy53cml0ZUZpZWxkSGVhZGVyXyhhLDEpLHRoaXMuZW5jb2Rlcl8ud3JpdGVTcGxpdEZpeGVkNjQoYy5sbyxjLmhpKSl9O00ud3JpdGVTZml4ZWQzMj1mdW5jdGlvbihhLGMpe251bGwhPWMmJih0aGlzLndyaXRlRmllbGRIZWFkZXJfKGEsNSksdGhpcy5lbmNvZGVyXy53cml0ZUludDMyKGMpKX07TS53cml0ZVNmaXhlZDY0PWZ1bmN0aW9uKGEsYyl7bnVsbCE9YyYmKHRoaXMud3JpdGVGaWVsZEhlYWRlcl8oYSwxKSx0aGlzLmVuY29kZXJfLndyaXRlSW50NjQoYykpfTtNLndyaXRlU2ZpeGVkNjRTdHJpbmc9ZnVuY3Rpb24oYSxjKXtudWxsIT1jJiYoYz1NYyhjKSx0aGlzLndyaXRlRmllbGRIZWFkZXJfKGEsMSksdGhpcy5lbmNvZGVyXy53cml0ZVNwbGl0Rml4ZWQ2NChjLmxvLGMuaGkpKX07Ck0ud3JpdGVGbG9hdD1mdW5jdGlvbihhLGMpe251bGwhPWMmJih0aGlzLndyaXRlRmllbGRIZWFkZXJfKGEsNSksdGhpcy5lbmNvZGVyXy53cml0ZUZsb2F0KGMpKX07TS53cml0ZURvdWJsZT1mdW5jdGlvbihhLGMpe251bGwhPWMmJih0aGlzLndyaXRlRmllbGRIZWFkZXJfKGEsMSksdGhpcy5lbmNvZGVyXy53cml0ZURvdWJsZShjKSl9O00ud3JpdGVCb29sPWZ1bmN0aW9uKGEsYyl7bnVsbCE9YyYmKHRoaXMud3JpdGVGaWVsZEhlYWRlcl8oYSwwKSx0aGlzLmVuY29kZXJfLndyaXRlQm9vbChjKSl9O00ud3JpdGVFbnVtPWZ1bmN0aW9uKGEsYyl7bnVsbCE9YyYmKHRoaXMud3JpdGVGaWVsZEhlYWRlcl8oYSwwKSx0aGlzLmVuY29kZXJfLndyaXRlU2lnbmVkVmFyaW50MzIoYykpfTtNLndyaXRlU3RyaW5nPWZ1bmN0aW9uKGEsYyl7bnVsbCE9YyYmKGE9dGhpcy5iZWdpbkRlbGltaXRlZF8oYSksdGhpcy5lbmNvZGVyXy53cml0ZVN0cmluZyhjKSx0aGlzLmVuZERlbGltaXRlZF8oYSkpfTsKTS53cml0ZUJ5dGVzPWZ1bmN0aW9uKGEsYyl7bnVsbCE9YyYmKGM9TGQoYyksdGhpcy53cml0ZUZpZWxkSGVhZGVyXyhhLDIpLHRoaXMuZW5jb2Rlcl8ud3JpdGVVbnNpZ25lZFZhcmludDMyKGMubGVuZ3RoKSx0aGlzLmFwcGVuZFVpbnQ4QXJyYXlfKGMpKX07TS53cml0ZU1lc3NhZ2U9ZnVuY3Rpb24oYSxjLGQpe251bGwhPWMmJihhPXRoaXMuYmVnaW5EZWxpbWl0ZWRfKGEpLGQoYyx0aGlzKSx0aGlzLmVuZERlbGltaXRlZF8oYSkpfTtNLndyaXRlTWVzc2FnZVNldD1mdW5jdGlvbihhLGMsZCl7bnVsbCE9YyYmKHRoaXMud3JpdGVGaWVsZEhlYWRlcl8oMSwzKSx0aGlzLndyaXRlRmllbGRIZWFkZXJfKDIsMCksdGhpcy5lbmNvZGVyXy53cml0ZVNpZ25lZFZhcmludDMyKGEpLGE9dGhpcy5iZWdpbkRlbGltaXRlZF8oMyksZChjLHRoaXMpLHRoaXMuZW5kRGVsaW1pdGVkXyhhKSx0aGlzLndyaXRlRmllbGRIZWFkZXJfKDEsNCkpfTsKTS53cml0ZUdyb3VwPWZ1bmN0aW9uKGEsYyxkKXtudWxsIT1jJiYodGhpcy53cml0ZUZpZWxkSGVhZGVyXyhhLDMpLGQoYyx0aGlzKSx0aGlzLndyaXRlRmllbGRIZWFkZXJfKGEsNCkpfTtNLndyaXRlRml4ZWRIYXNoNjQ9ZnVuY3Rpb24oYSxjKXtudWxsIT1jJiYodGhpcy53cml0ZUZpZWxkSGVhZGVyXyhhLDEpLHRoaXMuZW5jb2Rlcl8ud3JpdGVGaXhlZEhhc2g2NChjKSl9O00ud3JpdGVWYXJpbnRIYXNoNjQ9ZnVuY3Rpb24oYSxjKXtudWxsIT1jJiYodGhpcy53cml0ZUZpZWxkSGVhZGVyXyhhLDApLHRoaXMuZW5jb2Rlcl8ud3JpdGVWYXJpbnRIYXNoNjQoYykpfTtNLndyaXRlUmVwZWF0ZWRJbnQzMj1mdW5jdGlvbihhLGMpe2lmKG51bGwhPWMpZm9yKHZhciBkPTA7ZDxjLmxlbmd0aDtkKyspdGhpcy53cml0ZVNpZ25lZFZhcmludDMyXyhhLGNbZF0pfTsKTS53cml0ZVJlcGVhdGVkSW50MzJTdHJpbmc9ZnVuY3Rpb24oYSxjKXtpZihudWxsIT1jKWZvcih2YXIgZD0wO2Q8Yy5sZW5ndGg7ZCsrKXRoaXMud3JpdGVJbnQzMlN0cmluZyhhLGNbZF0pfTtNLndyaXRlUmVwZWF0ZWRJbnQ2ND1mdW5jdGlvbihhLGMpe2lmKG51bGwhPWMpZm9yKHZhciBkPTA7ZDxjLmxlbmd0aDtkKyspdGhpcy53cml0ZVNpZ25lZFZhcmludDY0XyhhLGNbZF0pfTtNLndyaXRlUmVwZWF0ZWRJbnQ2NFN0cmluZz1mdW5jdGlvbihhLGMpe2lmKG51bGwhPWMpZm9yKHZhciBkPTA7ZDxjLmxlbmd0aDtkKyspdGhpcy53cml0ZUludDY0U3RyaW5nKGEsY1tkXSl9O00ud3JpdGVSZXBlYXRlZFVpbnQzMj1mdW5jdGlvbihhLGMpe2lmKG51bGwhPWMpZm9yKHZhciBkPTA7ZDxjLmxlbmd0aDtkKyspdGhpcy53cml0ZVVuc2lnbmVkVmFyaW50MzJfKGEsY1tkXSl9OwpNLndyaXRlUmVwZWF0ZWRVaW50MzJTdHJpbmc9ZnVuY3Rpb24oYSxjKXtpZihudWxsIT1jKWZvcih2YXIgZD0wO2Q8Yy5sZW5ndGg7ZCsrKXRoaXMud3JpdGVVaW50MzJTdHJpbmcoYSxjW2RdKX07TS53cml0ZVJlcGVhdGVkVWludDY0PWZ1bmN0aW9uKGEsYyl7aWYobnVsbCE9Yylmb3IodmFyIGQ9MDtkPGMubGVuZ3RoO2QrKyl0aGlzLndyaXRlVW5zaWduZWRWYXJpbnQ2NF8oYSxjW2RdKX07TS53cml0ZVJlcGVhdGVkVWludDY0U3RyaW5nPWZ1bmN0aW9uKGEsYyl7aWYobnVsbCE9Yylmb3IodmFyIGQ9MDtkPGMubGVuZ3RoO2QrKyl0aGlzLndyaXRlVWludDY0U3RyaW5nKGEsY1tkXSl9O00ud3JpdGVSZXBlYXRlZFNpbnQzMj1mdW5jdGlvbihhLGMpe2lmKG51bGwhPWMpZm9yKHZhciBkPTA7ZDxjLmxlbmd0aDtkKyspdGhpcy53cml0ZVppZ3phZ1ZhcmludDMyXyhhLGNbZF0pfTsKTS53cml0ZVJlcGVhdGVkU2ludDY0PWZ1bmN0aW9uKGEsYyl7aWYobnVsbCE9Yylmb3IodmFyIGQ9MDtkPGMubGVuZ3RoO2QrKyl0aGlzLndyaXRlWmlnemFnVmFyaW50NjRfKGEsY1tkXSl9O00ud3JpdGVSZXBlYXRlZFNpbnQ2NFN0cmluZz1mdW5jdGlvbihhLGMpe2lmKG51bGwhPWMpZm9yKHZhciBkPTA7ZDxjLmxlbmd0aDtkKyspdGhpcy53cml0ZVppZ3phZ1ZhcmludDY0U3RyaW5nXyhhLGNbZF0pfTtNLndyaXRlUmVwZWF0ZWRGaXhlZDMyPWZ1bmN0aW9uKGEsYyl7aWYobnVsbCE9Yylmb3IodmFyIGQ9MDtkPGMubGVuZ3RoO2QrKyl0aGlzLndyaXRlRml4ZWQzMihhLGNbZF0pfTtNLndyaXRlUmVwZWF0ZWRGaXhlZDY0PWZ1bmN0aW9uKGEsYyl7aWYobnVsbCE9Yylmb3IodmFyIGQ9MDtkPGMubGVuZ3RoO2QrKyl0aGlzLndyaXRlRml4ZWQ2NChhLGNbZF0pfTsKTS53cml0ZVJlcGVhdGVkRml4ZWQ2NFN0cmluZz1mdW5jdGlvbihhLGMpe2lmKG51bGwhPWMpZm9yKHZhciBkPTA7ZDxjLmxlbmd0aDtkKyspdGhpcy53cml0ZUZpeGVkNjRTdHJpbmcoYSxjW2RdKX07TS53cml0ZVJlcGVhdGVkU2ZpeGVkMzI9ZnVuY3Rpb24oYSxjKXtpZihudWxsIT1jKWZvcih2YXIgZD0wO2Q8Yy5sZW5ndGg7ZCsrKXRoaXMud3JpdGVTZml4ZWQzMihhLGNbZF0pfTtNLndyaXRlUmVwZWF0ZWRTZml4ZWQ2ND1mdW5jdGlvbihhLGMpe2lmKG51bGwhPWMpZm9yKHZhciBkPTA7ZDxjLmxlbmd0aDtkKyspdGhpcy53cml0ZVNmaXhlZDY0KGEsY1tkXSl9O00ud3JpdGVSZXBlYXRlZFNmaXhlZDY0U3RyaW5nPWZ1bmN0aW9uKGEsYyl7aWYobnVsbCE9Yylmb3IodmFyIGQ9MDtkPGMubGVuZ3RoO2QrKyl0aGlzLndyaXRlU2ZpeGVkNjRTdHJpbmcoYSxjW2RdKX07Ck0ud3JpdGVSZXBlYXRlZEZsb2F0PWZ1bmN0aW9uKGEsYyl7aWYobnVsbCE9Yylmb3IodmFyIGQ9MDtkPGMubGVuZ3RoO2QrKyl0aGlzLndyaXRlRmxvYXQoYSxjW2RdKX07TS53cml0ZVJlcGVhdGVkRG91YmxlPWZ1bmN0aW9uKGEsYyl7aWYobnVsbCE9Yylmb3IodmFyIGQ9MDtkPGMubGVuZ3RoO2QrKyl0aGlzLndyaXRlRG91YmxlKGEsY1tkXSl9O00ud3JpdGVSZXBlYXRlZEJvb2w9ZnVuY3Rpb24oYSxjKXtpZihudWxsIT1jKWZvcih2YXIgZD0wO2Q8Yy5sZW5ndGg7ZCsrKXRoaXMud3JpdGVCb29sKGEsY1tkXSl9O00ud3JpdGVSZXBlYXRlZEVudW09ZnVuY3Rpb24oYSxjKXtpZihudWxsIT1jKWZvcih2YXIgZD0wO2Q8Yy5sZW5ndGg7ZCsrKXRoaXMud3JpdGVFbnVtKGEsY1tkXSl9O00ud3JpdGVSZXBlYXRlZFN0cmluZz1mdW5jdGlvbihhKXtpZihudWxsIT1hKWZvcih2YXIgYz0wO2M8YS5sZW5ndGg7YysrKXRoaXMud3JpdGVTdHJpbmcoMSxhW2NdKX07Ck0ud3JpdGVSZXBlYXRlZEJ5dGVzPWZ1bmN0aW9uKGEpe2lmKG51bGwhPWEpZm9yKHZhciBjPTA7YzxhLmxlbmd0aDtjKyspdGhpcy53cml0ZUJ5dGVzKDEsYVtjXSl9O00ud3JpdGVSZXBlYXRlZE1lc3NhZ2U9ZnVuY3Rpb24oYSxjLGQpe2lmKG51bGwhPWMpZm9yKHZhciBmPTA7ZjxjLmxlbmd0aDtmKyspe3ZhciBnPXRoaXMuYmVnaW5EZWxpbWl0ZWRfKGEpO2QoY1tmXSx0aGlzKTt0aGlzLmVuZERlbGltaXRlZF8oZyl9fTtNLndyaXRlUmVwZWF0ZWRHcm91cD1mdW5jdGlvbihhLGMsZCl7aWYobnVsbCE9Yylmb3IodmFyIGY9MDtmPGMubGVuZ3RoO2YrKyl0aGlzLndyaXRlRmllbGRIZWFkZXJfKGEsMyksZChjW2ZdLHRoaXMpLHRoaXMud3JpdGVGaWVsZEhlYWRlcl8oYSw0KX07TS53cml0ZVJlcGVhdGVkRml4ZWRIYXNoNjQ9ZnVuY3Rpb24oYSxjKXtpZihudWxsIT1jKWZvcih2YXIgZD0wO2Q8Yy5sZW5ndGg7ZCsrKXRoaXMud3JpdGVGaXhlZEhhc2g2NChhLGNbZF0pfTsKTS53cml0ZVJlcGVhdGVkVmFyaW50SGFzaDY0PWZ1bmN0aW9uKGEsYyl7aWYobnVsbCE9Yylmb3IodmFyIGQ9MDtkPGMubGVuZ3RoO2QrKyl0aGlzLndyaXRlVmFyaW50SGFzaDY0KGEsY1tkXSl9O00ud3JpdGVQYWNrZWRJbnQzMj1mdW5jdGlvbihhLGMpe2lmKG51bGwhPWMmJmMubGVuZ3RoKXthPXRoaXMuYmVnaW5EZWxpbWl0ZWRfKGEpO2Zvcih2YXIgZD0wO2Q8Yy5sZW5ndGg7ZCsrKXRoaXMuZW5jb2Rlcl8ud3JpdGVTaWduZWRWYXJpbnQzMihjW2RdKTt0aGlzLmVuZERlbGltaXRlZF8oYSl9fTtNLndyaXRlUGFja2VkSW50MzJTdHJpbmc9ZnVuY3Rpb24oYSxjKXtpZihudWxsIT1jJiZjLmxlbmd0aCl7YT10aGlzLmJlZ2luRGVsaW1pdGVkXyhhKTtmb3IodmFyIGQ9MDtkPGMubGVuZ3RoO2QrKyl0aGlzLmVuY29kZXJfLndyaXRlU2lnbmVkVmFyaW50MzIocGFyc2VJbnQoY1tkXSwxMCkpO3RoaXMuZW5kRGVsaW1pdGVkXyhhKX19OwpNLndyaXRlUGFja2VkSW50NjQ9ZnVuY3Rpb24oYSl7aWYobnVsbCE9YSYmYS5sZW5ndGgpe2Zvcih2YXIgYz10aGlzLmJlZ2luRGVsaW1pdGVkXygxKSxkPTA7ZDxhLmxlbmd0aDtkKyspdGhpcy5lbmNvZGVyXy53cml0ZVNpZ25lZFZhcmludDY0KGFbZF0pO3RoaXMuZW5kRGVsaW1pdGVkXyhjKX19O00ud3JpdGVQYWNrZWRJbnQ2NFN0cmluZz1mdW5jdGlvbihhLGMpe2lmKG51bGwhPWMmJmMubGVuZ3RoKXthPXRoaXMuYmVnaW5EZWxpbWl0ZWRfKGEpO2Zvcih2YXIgZD0wO2Q8Yy5sZW5ndGg7ZCsrKXt2YXIgZj1NYyhjW2RdKTt0aGlzLmVuY29kZXJfLndyaXRlU3BsaXRWYXJpbnQ2NChmLmxvLGYuaGkpfXRoaXMuZW5kRGVsaW1pdGVkXyhhKX19OwpNLndyaXRlUGFja2VkVWludDMyPWZ1bmN0aW9uKGEsYyl7aWYobnVsbCE9YyYmYy5sZW5ndGgpe2E9dGhpcy5iZWdpbkRlbGltaXRlZF8oYSk7Zm9yKHZhciBkPTA7ZDxjLmxlbmd0aDtkKyspdGhpcy5lbmNvZGVyXy53cml0ZVVuc2lnbmVkVmFyaW50MzIoY1tkXSk7dGhpcy5lbmREZWxpbWl0ZWRfKGEpfX07TS53cml0ZVBhY2tlZFVpbnQzMlN0cmluZz1mdW5jdGlvbihhLGMpe2lmKG51bGwhPWMmJmMubGVuZ3RoKXthPXRoaXMuYmVnaW5EZWxpbWl0ZWRfKGEpO2Zvcih2YXIgZD0wO2Q8Yy5sZW5ndGg7ZCsrKXRoaXMuZW5jb2Rlcl8ud3JpdGVVbnNpZ25lZFZhcmludDMyKHBhcnNlSW50KGNbZF0sMTApKTt0aGlzLmVuZERlbGltaXRlZF8oYSl9fTsKTS53cml0ZVBhY2tlZFVpbnQ2ND1mdW5jdGlvbihhLGMpe2lmKG51bGwhPWMmJmMubGVuZ3RoKXthPXRoaXMuYmVnaW5EZWxpbWl0ZWRfKGEpO2Zvcih2YXIgZD0wO2Q8Yy5sZW5ndGg7ZCsrKXRoaXMuZW5jb2Rlcl8ud3JpdGVVbnNpZ25lZFZhcmludDY0KGNbZF0pO3RoaXMuZW5kRGVsaW1pdGVkXyhhKX19O00ud3JpdGVQYWNrZWRVaW50NjRTdHJpbmc9ZnVuY3Rpb24oYSxjKXtpZihudWxsIT1jJiZjLmxlbmd0aCl7YT10aGlzLmJlZ2luRGVsaW1pdGVkXyhhKTtmb3IodmFyIGQ9MDtkPGMubGVuZ3RoO2QrKyl7dmFyIGY9S2MoY1tkXSk7dGhpcy5lbmNvZGVyXy53cml0ZVNwbGl0VmFyaW50NjQoZi5sbyxmLmhpKX10aGlzLmVuZERlbGltaXRlZF8oYSl9fTsKTS53cml0ZVBhY2tlZFNpbnQzMj1mdW5jdGlvbihhLGMpe2lmKG51bGwhPWMmJmMubGVuZ3RoKXthPXRoaXMuYmVnaW5EZWxpbWl0ZWRfKGEpO2Zvcih2YXIgZD0wO2Q8Yy5sZW5ndGg7ZCsrKXRoaXMuZW5jb2Rlcl8ud3JpdGVaaWd6YWdWYXJpbnQzMihjW2RdKTt0aGlzLmVuZERlbGltaXRlZF8oYSl9fTtNLndyaXRlUGFja2VkU2ludDY0PWZ1bmN0aW9uKGEsYyl7aWYobnVsbCE9YyYmYy5sZW5ndGgpe2E9dGhpcy5iZWdpbkRlbGltaXRlZF8oYSk7Zm9yKHZhciBkPTA7ZDxjLmxlbmd0aDtkKyspdGhpcy5lbmNvZGVyXy53cml0ZVppZ3phZ1ZhcmludDY0KGNbZF0pO3RoaXMuZW5kRGVsaW1pdGVkXyhhKX19OwpNLndyaXRlUGFja2VkU2ludDY0U3RyaW5nPWZ1bmN0aW9uKGEsYyl7aWYobnVsbCE9YyYmYy5sZW5ndGgpe2E9dGhpcy5iZWdpbkRlbGltaXRlZF8oYSk7Zm9yKHZhciBkPTA7ZDxjLmxlbmd0aDtkKyspdGhpcy5lbmNvZGVyXy53cml0ZVppZ3phZ1ZhcmludDY0KHBhcnNlSW50KGNbZF0sMTApKTt0aGlzLmVuZERlbGltaXRlZF8oYSl9fTtNLndyaXRlUGFja2VkRml4ZWQzMj1mdW5jdGlvbihhLGMpe2lmKG51bGwhPWMmJmMubGVuZ3RoKWZvcih0aGlzLndyaXRlRmllbGRIZWFkZXJfKGEsMiksdGhpcy5lbmNvZGVyXy53cml0ZVVuc2lnbmVkVmFyaW50MzIoNCpjLmxlbmd0aCksYT0wO2E8Yy5sZW5ndGg7YSsrKXRoaXMuZW5jb2Rlcl8ud3JpdGVVaW50MzIoY1thXSl9OwpNLndyaXRlUGFja2VkRml4ZWQ2ND1mdW5jdGlvbihhLGMpe2lmKG51bGwhPWMmJmMubGVuZ3RoKWZvcih0aGlzLndyaXRlRmllbGRIZWFkZXJfKGEsMiksdGhpcy5lbmNvZGVyXy53cml0ZVVuc2lnbmVkVmFyaW50MzIoOCpjLmxlbmd0aCksYT0wO2E8Yy5sZW5ndGg7YSsrKXRoaXMuZW5jb2Rlcl8ud3JpdGVVaW50NjQoY1thXSl9O00ud3JpdGVQYWNrZWRGaXhlZDY0U3RyaW5nPWZ1bmN0aW9uKGEsYyl7aWYobnVsbCE9YyYmYy5sZW5ndGgpZm9yKHRoaXMud3JpdGVGaWVsZEhlYWRlcl8oYSwyKSx0aGlzLmVuY29kZXJfLndyaXRlVW5zaWduZWRWYXJpbnQzMig4KmMubGVuZ3RoKSxhPTA7YTxjLmxlbmd0aDthKyspe3ZhciBkPUtjKGNbYV0pO3RoaXMuZW5jb2Rlcl8ud3JpdGVTcGxpdEZpeGVkNjQoZC5sbyxkLmhpKX19OwpNLndyaXRlUGFja2VkU2ZpeGVkMzI9ZnVuY3Rpb24oYSxjKXtpZihudWxsIT1jJiZjLmxlbmd0aClmb3IodGhpcy53cml0ZUZpZWxkSGVhZGVyXyhhLDIpLHRoaXMuZW5jb2Rlcl8ud3JpdGVVbnNpZ25lZFZhcmludDMyKDQqYy5sZW5ndGgpLGE9MDthPGMubGVuZ3RoO2ErKyl0aGlzLmVuY29kZXJfLndyaXRlSW50MzIoY1thXSl9O00ud3JpdGVQYWNrZWRTZml4ZWQ2ND1mdW5jdGlvbihhLGMpe2lmKG51bGwhPWMmJmMubGVuZ3RoKWZvcih0aGlzLndyaXRlRmllbGRIZWFkZXJfKGEsMiksdGhpcy5lbmNvZGVyXy53cml0ZVVuc2lnbmVkVmFyaW50MzIoOCpjLmxlbmd0aCksYT0wO2E8Yy5sZW5ndGg7YSsrKXRoaXMuZW5jb2Rlcl8ud3JpdGVJbnQ2NChjW2FdKX07Ck0ud3JpdGVQYWNrZWRTZml4ZWQ2NFN0cmluZz1mdW5jdGlvbihhLGMpe2lmKG51bGwhPWMmJmMubGVuZ3RoKWZvcih0aGlzLndyaXRlRmllbGRIZWFkZXJfKGEsMiksdGhpcy5lbmNvZGVyXy53cml0ZVVuc2lnbmVkVmFyaW50MzIoOCpjLmxlbmd0aCksYT0wO2E8Yy5sZW5ndGg7YSsrKXRoaXMuZW5jb2Rlcl8ud3JpdGVJbnQ2NFN0cmluZyhjW2FdKX07TS53cml0ZVBhY2tlZEZsb2F0PWZ1bmN0aW9uKGEpe2lmKG51bGwhPWEmJmEubGVuZ3RoKXt0aGlzLndyaXRlRmllbGRIZWFkZXJfKDEsMik7dGhpcy5lbmNvZGVyXy53cml0ZVVuc2lnbmVkVmFyaW50MzIoNCphLmxlbmd0aCk7Zm9yKHZhciBjPTA7YzxhLmxlbmd0aDtjKyspdGhpcy5lbmNvZGVyXy53cml0ZUZsb2F0KGFbY10pfX07Ck0ud3JpdGVQYWNrZWREb3VibGU9ZnVuY3Rpb24oYSxjKXtpZihudWxsIT1jJiZjLmxlbmd0aClmb3IodGhpcy53cml0ZUZpZWxkSGVhZGVyXyhhLDIpLHRoaXMuZW5jb2Rlcl8ud3JpdGVVbnNpZ25lZFZhcmludDMyKDgqYy5sZW5ndGgpLGE9MDthPGMubGVuZ3RoO2ErKyl0aGlzLmVuY29kZXJfLndyaXRlRG91YmxlKGNbYV0pfTtNLndyaXRlUGFja2VkQm9vbD1mdW5jdGlvbihhLGMpe2lmKG51bGwhPWMmJmMubGVuZ3RoKWZvcih0aGlzLndyaXRlRmllbGRIZWFkZXJfKGEsMiksdGhpcy5lbmNvZGVyXy53cml0ZVVuc2lnbmVkVmFyaW50MzIoYy5sZW5ndGgpLGE9MDthPGMubGVuZ3RoO2ErKyl0aGlzLmVuY29kZXJfLndyaXRlQm9vbChjW2FdKX07Ck0ud3JpdGVQYWNrZWRFbnVtPWZ1bmN0aW9uKGEsYyl7aWYobnVsbCE9YyYmYy5sZW5ndGgpe2E9dGhpcy5iZWdpbkRlbGltaXRlZF8oYSk7Zm9yKHZhciBkPTA7ZDxjLmxlbmd0aDtkKyspdGhpcy5lbmNvZGVyXy53cml0ZUVudW0oY1tkXSk7dGhpcy5lbmREZWxpbWl0ZWRfKGEpfX07TS53cml0ZVBhY2tlZEZpeGVkSGFzaDY0PWZ1bmN0aW9uKGEsYyl7aWYobnVsbCE9YyYmYy5sZW5ndGgpZm9yKHRoaXMud3JpdGVGaWVsZEhlYWRlcl8oYSwyKSx0aGlzLmVuY29kZXJfLndyaXRlVW5zaWduZWRWYXJpbnQzMig4KmMubGVuZ3RoKSxhPTA7YTxjLmxlbmd0aDthKyspdGhpcy5lbmNvZGVyXy53cml0ZUZpeGVkSGFzaDY0KGNbYV0pfTsKTS53cml0ZVBhY2tlZFZhcmludEhhc2g2ND1mdW5jdGlvbihhLGMpe2lmKG51bGwhPWMmJmMubGVuZ3RoKXthPXRoaXMuYmVnaW5EZWxpbWl0ZWRfKGEpO2Zvcih2YXIgZD0wO2Q8Yy5sZW5ndGg7ZCsrKXRoaXMuZW5jb2Rlcl8ud3JpdGVWYXJpbnRIYXNoNjQoY1tkXSk7dGhpcy5lbmREZWxpbWl0ZWRfKGEpfX07Ci8vfn5XRUJQQVRIfn5leHRlcm5hbC9jb21fZ29vZ2xlX3Byb3RvYnVmX2pzL21hcC5qcwpmdW5jdGlvbiBlZShhLGMpe3RoaXMuYXJyXz1hO3RoaXMudmFsdWVDdG9yXz1jO3RoaXMubWFwXz17fTt0aGlzLmFyckNsZWFuPSEwOzA8dGhpcy5hcnJfLmxlbmd0aCYmdGhpcy5sb2FkRnJvbUFycmF5XygpfWVlLnByb3RvdHlwZS5sb2FkRnJvbUFycmF5Xz1mdW5jdGlvbigpe2Zvcih2YXIgYT0wO2E8dGhpcy5hcnJfLmxlbmd0aDthKyspe3ZhciBjPXRoaXMuYXJyX1thXSxkPWNbMF07dGhpcy5tYXBfW2QudG9TdHJpbmcoKV09bmV3IGZlKGQsY1sxXSl9dGhpcy5hcnJDbGVhbj0hMH07CmVlLnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKCl7aWYodGhpcy5hcnJDbGVhbil7aWYodGhpcy52YWx1ZUN0b3JfKXt2YXIgYT10aGlzLm1hcF8sYztmb3IoYyBpbiBhKWlmKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChhLGMpKXt2YXIgZD1hW2NdLnZhbHVlV3JhcHBlcjtkJiZkLnRvQXJyYXkoKX19fWVsc2V7dGhpcy5hcnJfLmxlbmd0aD0wO2E9dGhpcy5zdHJpbmdLZXlzXygpO2Euc29ydCgpO2ZvcihjPTA7YzxhLmxlbmd0aDtjKyspe3ZhciBmPXRoaXMubWFwX1thW2NdXTsoZD1mLnZhbHVlV3JhcHBlcikmJmQudG9BcnJheSgpO3RoaXMuYXJyXy5wdXNoKFtmLmtleSxmLnZhbHVlXSl9dGhpcy5hcnJDbGVhbj0hMH1yZXR1cm4gdGhpcy5hcnJffTsKZWUucHJvdG90eXBlLnRvT2JqZWN0PWZ1bmN0aW9uKGEsYyl7Zm9yKHZhciBkPXRoaXMudG9BcnJheSgpLGY9W10sZz0wO2c8ZC5sZW5ndGg7ZysrKXt2YXIgbD10aGlzLm1hcF9bZFtnXVswXS50b1N0cmluZygpXTt0aGlzLndyYXBFbnRyeV8obCk7dmFyIGs9bC52YWx1ZVdyYXBwZXI7az9mLnB1c2goW2wua2V5LGMoYSxrKV0pOmYucHVzaChbbC5rZXksbC52YWx1ZV0pfXJldHVybiBmfTtmdW5jdGlvbiB5ZShhKXt0aGlzLmlkeF89MDt0aGlzLmFycl89YX15ZS5wcm90b3R5cGUubmV4dD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlkeF88dGhpcy5hcnJfLmxlbmd0aD97ZG9uZTohMSx2YWx1ZTp0aGlzLmFycl9bdGhpcy5pZHhfKytdfTp7ZG9uZTohMCx2YWx1ZTp2b2lkIDB9fTsidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmKHllLnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KTtNPWVlLnByb3RvdHlwZTtNLmdldExlbmd0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnN0cmluZ0tleXNfKCkubGVuZ3RofTsKTS5jbGVhcj1mdW5jdGlvbigpe3RoaXMubWFwXz17fTt0aGlzLmFyckNsZWFuPSExfTtNLmRlbD1mdW5jdGlvbihhKXthPWEudG9TdHJpbmcoKTt2YXIgYz10aGlzLm1hcF8uaGFzT3duUHJvcGVydHkoYSk7ZGVsZXRlIHRoaXMubWFwX1thXTt0aGlzLmFyckNsZWFuPSExO3JldHVybiBjfTtNLmdldEVudHJ5TGlzdD1mdW5jdGlvbigpe3ZhciBhPVtdLGM9dGhpcy5zdHJpbmdLZXlzXygpO2Muc29ydCgpO2Zvcih2YXIgZD0wO2Q8Yy5sZW5ndGg7ZCsrKXt2YXIgZj10aGlzLm1hcF9bY1tkXV07YS5wdXNoKFtmLmtleSxmLnZhbHVlXSl9cmV0dXJuIGF9O00uZW50cmllcz1mdW5jdGlvbigpe3ZhciBhPVtdLGM9dGhpcy5zdHJpbmdLZXlzXygpO2Muc29ydCgpO2Zvcih2YXIgZD0wO2Q8Yy5sZW5ndGg7ZCsrKXt2YXIgZj10aGlzLm1hcF9bY1tkXV07YS5wdXNoKFtmLmtleSx0aGlzLndyYXBFbnRyeV8oZildKX1yZXR1cm4gbmV3IHllKGEpfTsKTS5rZXlzPWZ1bmN0aW9uKCl7dmFyIGE9W10sYz10aGlzLnN0cmluZ0tleXNfKCk7Yy5zb3J0KCk7Zm9yKHZhciBkPTA7ZDxjLmxlbmd0aDtkKyspYS5wdXNoKHRoaXMubWFwX1tjW2RdXS5rZXkpO3JldHVybiBuZXcgeWUoYSl9O00udmFsdWVzPWZ1bmN0aW9uKCl7dmFyIGE9W10sYz10aGlzLnN0cmluZ0tleXNfKCk7Yy5zb3J0KCk7Zm9yKHZhciBkPTA7ZDxjLmxlbmd0aDtkKyspYS5wdXNoKHRoaXMud3JhcEVudHJ5Xyh0aGlzLm1hcF9bY1tkXV0pKTtyZXR1cm4gbmV3IHllKGEpfTtNLmZvckVhY2g9ZnVuY3Rpb24oYSxjKXt2YXIgZD10aGlzLnN0cmluZ0tleXNfKCk7ZC5zb3J0KCk7Zm9yKHZhciBmPTA7ZjxkLmxlbmd0aDtmKyspe3ZhciBnPXRoaXMubWFwX1tkW2ZdXTthLmNhbGwoYyx0aGlzLndyYXBFbnRyeV8oZyksZy5rZXksdGhpcyl9fTsKTS5zZXQ9ZnVuY3Rpb24oYSxjKXt2YXIgZD1uZXcgZmUoYSk7dGhpcy52YWx1ZUN0b3JfPyhkLnZhbHVlV3JhcHBlcj1jLGQudmFsdWU9Yy50b0FycmF5KCkpOmQudmFsdWU9Yzt0aGlzLm1hcF9bYS50b1N0cmluZygpXT1kO3RoaXMuYXJyQ2xlYW49ITE7cmV0dXJuIHRoaXN9O00ud3JhcEVudHJ5Xz1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy52YWx1ZUN0b3JfPyhhLnZhbHVlV3JhcHBlcnx8KGEudmFsdWVXcmFwcGVyPW5ldyB0aGlzLnZhbHVlQ3Rvcl8oYS52YWx1ZSkpLGEudmFsdWVXcmFwcGVyKTphLnZhbHVlfTtNLmdldD1mdW5jdGlvbihhKXtpZihhPXRoaXMubWFwX1thLnRvU3RyaW5nKCldKXJldHVybiB0aGlzLndyYXBFbnRyeV8oYSl9O00uaGFzPWZ1bmN0aW9uKGEpe3JldHVybiBhLnRvU3RyaW5nKClpbiB0aGlzLm1hcF99OwpNLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbihhLGMsZCxmLGcpe3ZhciBsPXRoaXMuc3RyaW5nS2V5c18oKTtsLnNvcnQoKTtmb3IodmFyIGs9MDtrPGwubGVuZ3RoO2srKyl7dmFyIG09dGhpcy5tYXBfW2xba11dO2MuYmVnaW5TdWJNZXNzYWdlKGEpO2QuY2FsbChjLDEsbS5rZXkpO3RoaXMudmFsdWVDdG9yXz9mLmNhbGwoYywyLHRoaXMud3JhcEVudHJ5XyhtKSxnKTpmLmNhbGwoYywyLG0udmFsdWUpO2MuZW5kU3ViTWVzc2FnZSgpfX07ZnVuY3Rpb24gemUoYSxjLGQpe2Zvcih2YXIgZj1iZS5wcm90b3R5cGUucmVhZFN0cmluZyxnPWJlLnByb3RvdHlwZS5yZWFkTWVzc2FnZSxsPSIiLGs9dm9pZCAwO2MubmV4dEZpZWxkKCkmJiFjLmlzRW5kR3JvdXAoKTspe3ZhciBtPWMuZ2V0RmllbGROdW1iZXIoKTsxPT1tP2w9Zi5jYWxsKGMpOjI9PW0mJihhLnZhbHVlQ3Rvcl8/KGs9bmV3IGEudmFsdWVDdG9yXyxnLmNhbGwoYyxrLGQpKTprPWcuY2FsbChjKSl9YS5zZXQobCxrKX0KTS5zdHJpbmdLZXlzXz1mdW5jdGlvbigpe3ZhciBhPXRoaXMubWFwXyxjPVtdLGQ7Zm9yKGQgaW4gYSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYSxkKSYmYy5wdXNoKGQpO3JldHVybiBjfTtmdW5jdGlvbiBmZShhLGMpe3RoaXMua2V5PWE7dGhpcy52YWx1ZT1jO3RoaXMudmFsdWVXcmFwcGVyPXZvaWQgMH07Ci8vfn5XRUJQQVRIfn5leHRlcm5hbC9jb21fZ29vZ2xlX3Byb3RvYnVmX2pzL21lc3NhZ2UuanMKZnVuY3Rpb24gQWUoKXt9dmFyIEJlPSJmdW5jdGlvbiI9PXR5cGVvZiBVaW50OEFycmF5O0FlLnByb3RvdHlwZS5nZXRKc1BiTWVzc2FnZUlkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWVzc2FnZUlkX307ZnVuY3Rpb24gQ2UoYSxjKXtyZXR1cm4gYythLmFycmF5SW5kZXhPZmZzZXRffWZ1bmN0aW9uIERlKGEsYyl7cmV0dXJuIGMtYS5hcnJheUluZGV4T2Zmc2V0X30KZnVuY3Rpb24gRWUoYSxjLGQsZil7YS53cmFwcGVyc189bnVsbDtjfHwoYz1bXSk7YS5tZXNzYWdlSWRfPXZvaWQgMDthLmFycmF5SW5kZXhPZmZzZXRfPS0xO2EuYXJyYXk9YztGZShhKTthLmNvbnZlcnRlZFByaW1pdGl2ZUZpZWxkc189e307aWYoZClmb3IoYz0wO2M8ZC5sZW5ndGg7YysrKXt2YXIgZz1kW2NdO2c8YS5waXZvdF8/KGc9Q2UoYSxnKSxhLmFycmF5W2ddPWEuYXJyYXlbZ118fEdlKTooSGUoYSksYS5leHRlbnNpb25PYmplY3RfW2ddPWEuZXh0ZW5zaW9uT2JqZWN0X1tnXXx8R2UpfWlmKGYmJmYubGVuZ3RoKWZvcihjPTA7YzxmLmxlbmd0aDtjKyspSWUoYSxmW2NdKX12YXIgR2U9T2JqZWN0LmZyZWV6ZT9PYmplY3QuZnJlZXplKFtdKTpbXTtmdW5jdGlvbiBKZShhKXtyZXR1cm4gTmIoYSl9ZnVuY3Rpb24gdWYoYSl7cmV0dXJuIG51bGwhPT1hJiYib2JqZWN0Ij09dHlwZW9mIGEmJiFKZShhKSYmIShCZSYmYSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpfQpmdW5jdGlvbiBGZShhKXt2YXIgYz1hLmFycmF5Lmxlbmd0aDtpZihjKXstLWM7dmFyIGQ9YS5hcnJheVtjXTtpZih1ZihkKSl7YS5waXZvdF89RGUoYSxjKTthLmV4dGVuc2lvbk9iamVjdF89ZDtyZXR1cm59fWEucGl2b3RfPU51bWJlci5NQVhfVkFMVUV9ZnVuY3Rpb24gSGUoYSl7dmFyIGM9Q2UoYSxhLnBpdm90Xyk7YS5hcnJheVtjXXx8KGEuZXh0ZW5zaW9uT2JqZWN0Xz1hLmFycmF5W2NdPXt9KX1mdW5jdGlvbiB2ZihhLGMsZCl7Zm9yKHZhciBmPVtdLGc9MDtnPGEubGVuZ3RoO2crKylmW2ddPWMuY2FsbChhW2ddLGQsYVtnXSk7cmV0dXJuIGZ9ZnVuY3Rpb24gd2YoYSxjKXtpZihjPGEucGl2b3RfKXtjPUNlKGEsYyk7dmFyIGQ9YS5hcnJheVtjXTtyZXR1cm4gZD09PUdlP2EuYXJyYXlbY109W106ZH1pZihhLmV4dGVuc2lvbk9iamVjdF8pcmV0dXJuIGQ9YS5leHRlbnNpb25PYmplY3RfW2NdLGQ9PT1HZT9hLmV4dGVuc2lvbk9iamVjdF9bY109W106ZH0KZnVuY3Rpb24geGYoYSxjKXtyZXR1cm4gd2YoYSxjKX1mdW5jdGlvbiB5ZihhLGMpe2E9d2YoYSxjKTtyZXR1cm4gbnVsbD09YT9hOithfWZ1bmN0aW9uIHpmKGEpe3ZhciBjPXhmKGEsMSk7YS5jb252ZXJ0ZWRQcmltaXRpdmVGaWVsZHNffHwoYS5jb252ZXJ0ZWRQcmltaXRpdmVGaWVsZHNfPXt9KTtpZighYS5jb252ZXJ0ZWRQcmltaXRpdmVGaWVsZHNfWzFdKXtmb3IodmFyIGQ9MDtkPGMubGVuZ3RoO2QrKyljW2RdPStjW2RdO2EuY29udmVydGVkUHJpbWl0aXZlRmllbGRzX1sxXT0hMH1yZXR1cm4gY31mdW5jdGlvbiBBZihhKXtpZihudWxsPT1hfHxHYihhKSlyZXR1cm4gYTtpZihCZSYmYSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpcmV0dXJuIHRjKGEpO2JjKCJDYW5ub3QgY29lcmNlIHRvIGI2NCBzdHJpbmc6ICIrSWIoYSkpO3JldHVybiBudWxsfQpmdW5jdGlvbiBCZihhKXtpZihudWxsPT1hfHxhIGluc3RhbmNlb2YgVWludDhBcnJheSlyZXR1cm4gYTtpZihHYihhKSlyZXR1cm4gRmMoYSk7YmMoIkNhbm5vdCBjb2VyY2UgdG8gVWludDhBcnJheTogIitJYihhKSk7cmV0dXJuIG51bGx9ZnVuY3Rpb24gQ2YoYSl7RGYoYSk7cmV0dXJuIWEubGVuZ3RofHxHYihhWzBdKT9hOmVjKGEsQWYpfWZ1bmN0aW9uIEVmKGEpe0RmKGEpO3JldHVybiFhLmxlbmd0aHx8YVswXWluc3RhbmNlb2YgVWludDhBcnJheT9hOmVjKGEsQmYpfWZ1bmN0aW9uIERmKGEpe2lmKGEmJjE8YS5sZW5ndGgpe3ZhciBjPUliKGFbMF0pO2RjKGEsZnVuY3Rpb24oZCl7SWIoZCkhPWMmJmJjKCJJbmNvbnNpc3RlbnQgdHlwZSBpbiBKU1BCIHJlcGVhdGVkIGZpZWxkIGFycmF5LiBHb3QgIitJYihkKSsiIGV4cGVjdGVkICIrYyl9KX19ZnVuY3Rpb24gRmYoYSxjLGQpe2E9d2YoYSxjKTtyZXR1cm4gbnVsbD09YT9kOmF9CmZ1bmN0aW9uIEdmKGEsYyl7YT15ZihhLGMpO3JldHVybiBudWxsPT1hPzA6YX1mdW5jdGlvbiBIZihhLGMsZCl7YS53cmFwcGVyc198fChhLndyYXBwZXJzXz17fSk7aWYoMSBpbiBhLndyYXBwZXJzXylyZXR1cm4gYS53cmFwcGVyc19bMV07aWYoIWMpcmV0dXJuIGM9d2YoYSwxKSxjfHwoYz1bXSxJZihhLDEsYykpLGEud3JhcHBlcnNfWzFdPW5ldyBlZShjLGQpfWZ1bmN0aW9uIElmKGEsYyxkKXtjPGEucGl2b3RfP2EuYXJyYXlbQ2UoYSxjKV09ZDooSGUoYSksYS5leHRlbnNpb25PYmplY3RfW2NdPWQpfWZ1bmN0aW9uIEpmKGEsYyxkKXtLZihhLGMsZCwwKX1mdW5jdGlvbiBMZihhLGMsZCl7S2YoYSxjLGQsMCl9ZnVuY3Rpb24gTWYoYSxjLGQpe0tmKGEsYyxkLCIiKX1mdW5jdGlvbiBOZihhLGMsZCl7S2YoYSxjLGQsMCl9ZnVuY3Rpb24gS2YoYSxjLGQsZil7ZCE9PWY/SWYoYSxjLGQpOmEuYXJyYXlbQ2UoYSxjKV09bnVsbH0KZnVuY3Rpb24gRmcoYSxjLGQpe2E9eGYoYSwxKTt2b2lkIDAhPWQ/YS5zcGxpY2UoZCwwLGMpOmEucHVzaChjKX1mdW5jdGlvbiBHZyhhLGMsZCxmKXsoZD1JZShhLGQpKSYmZCE9PWMmJnZvaWQgMCE9PWYmJihhLndyYXBwZXJzXyYmZCBpbiBhLndyYXBwZXJzXyYmKGEud3JhcHBlcnNfW2RdPXZvaWQgMCksSWYoYSxkLHZvaWQgMCkpO0lmKGEsYyxmKX1mdW5jdGlvbiBJZShhLGMpe2Zvcih2YXIgZCxmLGc9MDtnPGMubGVuZ3RoO2crKyl7dmFyIGw9Y1tnXSxrPXdmKGEsbCk7bnVsbCE9ayYmKGQ9bCxmPWssSWYoYSxsLHZvaWQgMCkpfXJldHVybiBkPyhJZihhLGQsZiksZCk6MH1mdW5jdGlvbiBIZyhhLGMsZCl7YS53cmFwcGVyc198fChhLndyYXBwZXJzXz17fSk7aWYoIWEud3JhcHBlcnNfW2RdKXt2YXIgZj13ZihhLGQpO2YmJihhLndyYXBwZXJzX1tkXT1uZXcgYyhmKSl9cmV0dXJuIGEud3JhcHBlcnNfW2RdfQpmdW5jdGlvbiBJZyhhLGMsZCl7SmcoYSxjLGQpO2M9YS53cmFwcGVyc19bZF07Yz09R2UmJihjPWEud3JhcHBlcnNfW2RdPVtdKTtyZXR1cm4gY31mdW5jdGlvbiBKZyhhLGMsZCl7YS53cmFwcGVyc198fChhLndyYXBwZXJzXz17fSk7aWYoIWEud3JhcHBlcnNfW2RdKXtmb3IodmFyIGY9eGYoYSxkKSxnPVtdLGw9MDtsPGYubGVuZ3RoO2wrKylnW2xdPW5ldyBjKGZbbF0pO2Eud3JhcHBlcnNfW2RdPWd9fWZ1bmN0aW9uIEtnKGEsYyxkKXthLndyYXBwZXJzX3x8KGEud3JhcHBlcnNfPXt9KTt2YXIgZj1kP2QudG9BcnJheSgpOmQ7YS53cmFwcGVyc19bY109ZDtJZihhLGMsZil9ZnVuY3Rpb24gTGcoYSxjLGQsZil7YS53cmFwcGVyc198fChhLndyYXBwZXJzXz17fSk7dmFyIGc9Zj9mLnRvQXJyYXkoKTpmO2Eud3JhcHBlcnNfW2NdPWY7R2coYSxjLGQsZyl9CmZ1bmN0aW9uIE1nKGEsYyxkKXthLndyYXBwZXJzX3x8KGEud3JhcHBlcnNfPXt9KTtkPWR8fFtdO2Zvcih2YXIgZj1bXSxnPTA7ZzxkLmxlbmd0aDtnKyspZltnXT1kW2ddLnRvQXJyYXkoKTthLndyYXBwZXJzX1tjXT1kO0lmKGEsYyxmKX1mdW5jdGlvbiBOZyhhLGMsZCxmLGcpe0pnKGEsZixjKTt2YXIgbD1hLndyYXBwZXJzX1tjXTtsfHwobD1hLndyYXBwZXJzX1tjXT1bXSk7ZD1kP2Q6bmV3IGY7YT14ZihhLGMpO3ZvaWQgMCE9Zz8obC5zcGxpY2UoZywwLGQpLGEuc3BsaWNlKGcsMCxkLnRvQXJyYXkoKSkpOihsLnB1c2goZCksYS5wdXNoKGQudG9BcnJheSgpKSk7cmV0dXJuIGR9TT1BZS5wcm90b3R5cGU7Ck0uc3luY01hcEZpZWxkc189ZnVuY3Rpb24oKXtpZih0aGlzLndyYXBwZXJzXylmb3IodmFyIGEgaW4gdGhpcy53cmFwcGVyc18pe3ZhciBjPXRoaXMud3JhcHBlcnNfW2FdO2lmKE5iKGMpKWZvcih2YXIgZD0wO2Q8Yy5sZW5ndGg7ZCsrKWNbZF0mJmNbZF0udG9BcnJheSgpO2Vsc2UgYyYmYy50b0FycmF5KCl9fTtNLnRvQXJyYXk9ZnVuY3Rpb24oKXt0aGlzLnN5bmNNYXBGaWVsZHNfKCk7cmV0dXJuIHRoaXMuYXJyYXl9O00udG9TdHJpbmc9ZnVuY3Rpb24oKXt0aGlzLnN5bmNNYXBGaWVsZHNfKCk7cmV0dXJuIHRoaXMuYXJyYXkudG9TdHJpbmcoKX07Ck0uZ2V0RXh0ZW5zaW9uPWZ1bmN0aW9uKGEpe2lmKHRoaXMuZXh0ZW5zaW9uT2JqZWN0Xyl7dGhpcy53cmFwcGVyc198fCh0aGlzLndyYXBwZXJzXz17fSk7dmFyIGM9YS5maWVsZEluZGV4O2lmKGEuaXNSZXBlYXRlZCl7aWYoYS5pc01lc3NhZ2VUeXBlKCkpcmV0dXJuIHRoaXMud3JhcHBlcnNfW2NdfHwodGhpcy53cmFwcGVyc19bY109ZWModGhpcy5leHRlbnNpb25PYmplY3RfW2NdfHxbXSxmdW5jdGlvbihkKXtyZXR1cm4gbmV3IGEuY3RvcihkKX0pKSx0aGlzLndyYXBwZXJzX1tjXX1lbHNlIGlmKGEuaXNNZXNzYWdlVHlwZSgpKXJldHVybiF0aGlzLndyYXBwZXJzX1tjXSYmdGhpcy5leHRlbnNpb25PYmplY3RfW2NdJiYodGhpcy53cmFwcGVyc19bY109bmV3IGEuY3Rvcih0aGlzLmV4dGVuc2lvbk9iamVjdF9bY10pKSx0aGlzLndyYXBwZXJzX1tjXTtyZXR1cm4gdGhpcy5leHRlbnNpb25PYmplY3RfW2NdfX07Ck0uc2V0RXh0ZW5zaW9uPWZ1bmN0aW9uKGEsYyl7dGhpcy53cmFwcGVyc198fCh0aGlzLndyYXBwZXJzXz17fSk7SGUodGhpcyk7dmFyIGQ9YS5maWVsZEluZGV4O2EuaXNSZXBlYXRlZD8oYz1jfHxbXSxhLmlzTWVzc2FnZVR5cGUoKT8odGhpcy53cmFwcGVyc19bZF09Yyx0aGlzLmV4dGVuc2lvbk9iamVjdF9bZF09ZWMoYyxmdW5jdGlvbihmKXtyZXR1cm4gZi50b0FycmF5KCl9KSk6dGhpcy5leHRlbnNpb25PYmplY3RfW2RdPWMpOmEuaXNNZXNzYWdlVHlwZSgpPyh0aGlzLndyYXBwZXJzX1tkXT1jLHRoaXMuZXh0ZW5zaW9uT2JqZWN0X1tkXT1jP2MudG9BcnJheSgpOmMpOnRoaXMuZXh0ZW5zaW9uT2JqZWN0X1tkXT1jO3JldHVybiB0aGlzfTtNLmNsb25lTWVzc2FnZT1mdW5jdGlvbigpe3JldHVybiBPZyh0aGlzKX07TS5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBPZyh0aGlzKX07CmZ1bmN0aW9uIE9nKGEpe3JldHVybiBuZXcgYS5jb25zdHJ1Y3RvcihQZyhhLnRvQXJyYXkoKSkpfWZ1bmN0aW9uIFBnKGEpe2lmKE5iKGEpKXtmb3IodmFyIGM9QXJyYXkoYS5sZW5ndGgpLGQ9MDtkPGEubGVuZ3RoO2QrKyl7dmFyIGY9YVtkXTtudWxsIT1mJiYoY1tkXT0ib2JqZWN0Ij09dHlwZW9mIGY/UGcoZik6Zil9cmV0dXJuIGN9aWYoQmUmJmEgaW5zdGFuY2VvZiBVaW50OEFycmF5KXJldHVybiBuZXcgVWludDhBcnJheShhKTtjPXt9O2ZvcihkIGluIGEpZj1hW2RdLG51bGwhPWYmJihjW2RdPSJvYmplY3QiPT10eXBlb2YgZj9QZyhmKTpmKTtyZXR1cm4gY307Ci8vfn5XRUJQQVRIfn5leHRlcm5hbC9jb21fZ29vZ2xlX3Byb3RvYnVmX2pzL2RlYnVnLmpzCi8vfn5XRUJQQVRIfn5iYXplbC1vdXQvaG9zdC9iaW4vZXh0ZXJuYWwvb3JnX3RlbnNvcmZsb3cvdGVuc29yZmxvdy9jb3JlL2V4YW1wbGVfcHJvdG9zLmpzCmZ1bmN0aW9uIFFnKGEpe0VlKHRoaXMsYSxSZyxudWxsKX1RYihRZyxBZSk7ZnVuY3Rpb24gU2coYSl7RWUodGhpcyxhLFRnLG51bGwpfVFiKFNnLEFlKTtmdW5jdGlvbiBVZyhhKXtFZSh0aGlzLGEsVmcsbnVsbCl9UWIoVWcsQWUpO2Z1bmN0aW9uIFdnKGEpe0VlKHRoaXMsYSxudWxsLFhnKX1RYihXZyxBZSk7ZnVuY3Rpb24gWWcoYSl7RWUodGhpcyxhLG51bGwsbnVsbCl9UWIoWWcsQWUpO2Z1bmN0aW9uIFpnKGEpe0VlKHRoaXMsYSxKaCxudWxsKX1RYihaZyxBZSk7ZnVuY3Rpb24gS2goYSl7RWUodGhpcyxhLG51bGwsbnVsbCl9UWIoS2gsQWUpO3ZhciBSZz1bMV07TT1RZy5wcm90b3R5cGU7TS50b09iamVjdD1mdW5jdGlvbihhKXtyZXR1cm4gTGgoYSx0aGlzKX07ZnVuY3Rpb24gTGgoYSxjKXt2YXIgZD17dmFsdWVMaXN0OmMuZ2V0VmFsdWVMaXN0X2FzQjY0KCl9O2EmJihkLiRqc3BiTWVzc2FnZUluc3RhbmNlPWMpO3JldHVybiBkfQpmdW5jdGlvbiBNaChhLGMpe2Zvcig7Yy5uZXh0RmllbGQoKSYmIWMuaXNFbmRHcm91cCgpOylzd2l0Y2goYy5nZXRGaWVsZE51bWJlcigpKXtjYXNlIDE6dmFyIGQ9Yy5yZWFkQnl0ZXMoKTthLmFkZFZhbHVlKGQpO2JyZWFrO2RlZmF1bHQ6Yy5za2lwRmllbGQoKX1yZXR1cm4gYX1NLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciBhPW5ldyBkZTtOaCh0aGlzLGEpO3JldHVybiBhLmdldFJlc3VsdEJ1ZmZlcigpfTtmdW5jdGlvbiBOaChhLGMpe2E9YS5nZXRWYWx1ZUxpc3RfYXNVOCgpOzA8YS5sZW5ndGgmJmMud3JpdGVSZXBlYXRlZEJ5dGVzKGEpfU0uZ2V0VmFsdWVMaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHhmKHRoaXMsMSl9O00uZ2V0VmFsdWVMaXN0X2FzQjY0PWZ1bmN0aW9uKCl7cmV0dXJuIENmKHRoaXMuZ2V0VmFsdWVMaXN0KCkpfTtNLmdldFZhbHVlTGlzdF9hc1U4PWZ1bmN0aW9uKCl7cmV0dXJuIEVmKHRoaXMuZ2V0VmFsdWVMaXN0KCkpfTsKTS5zZXRWYWx1ZUxpc3Q9ZnVuY3Rpb24oYSl7SWYodGhpcywxLGF8fFtdKX07TS5hZGRWYWx1ZT1mdW5jdGlvbihhLGMpe0ZnKHRoaXMsYSxjKX07TS5jbGVhclZhbHVlTGlzdD1mdW5jdGlvbigpe3RoaXMuc2V0VmFsdWVMaXN0KFtdKX07dmFyIFRnPVsxXTtNPVNnLnByb3RvdHlwZTtNLnRvT2JqZWN0PWZ1bmN0aW9uKGEpe3JldHVybiBPaChhLHRoaXMpfTtmdW5jdGlvbiBPaChhLGMpe3ZhciBkLGY9e3ZhbHVlTGlzdDpudWxsPT0oZD16ZihjKSk/dm9pZCAwOmR9O2EmJihmLiRqc3BiTWVzc2FnZUluc3RhbmNlPWMpO3JldHVybiBmfWZ1bmN0aW9uIFBoKGEsYyl7Zm9yKDtjLm5leHRGaWVsZCgpJiYhYy5pc0VuZEdyb3VwKCk7KXN3aXRjaChjLmdldEZpZWxkTnVtYmVyKCkpe2Nhc2UgMTp2YXIgZD1jLnJlYWRQYWNrZWRGbG9hdCgpO2Euc2V0VmFsdWVMaXN0KGQpO2JyZWFrO2RlZmF1bHQ6Yy5za2lwRmllbGQoKX1yZXR1cm4gYX0KTS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgYT1uZXcgZGU7UWgodGhpcyxhKTtyZXR1cm4gYS5nZXRSZXN1bHRCdWZmZXIoKX07ZnVuY3Rpb24gUWgoYSxjKXthPWEuZ2V0VmFsdWVMaXN0KCk7MDxhLmxlbmd0aCYmYy53cml0ZVBhY2tlZEZsb2F0KGEpfU0uZ2V0VmFsdWVMaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHpmKHRoaXMpfTtNLnNldFZhbHVlTGlzdD1mdW5jdGlvbihhKXtJZih0aGlzLDEsYXx8W10pfTtNLmFkZFZhbHVlPWZ1bmN0aW9uKGEsYyl7RmcodGhpcyxhLGMpfTtNLmNsZWFyVmFsdWVMaXN0PWZ1bmN0aW9uKCl7dGhpcy5zZXRWYWx1ZUxpc3QoW10pfTt2YXIgVmc9WzFdO009VWcucHJvdG90eXBlO00udG9PYmplY3Q9ZnVuY3Rpb24oYSl7cmV0dXJuIFJoKGEsdGhpcyl9O2Z1bmN0aW9uIFJoKGEsYyl7dmFyIGQsZj17dmFsdWVMaXN0Om51bGw9PShkPXhmKGMsMSkpP3ZvaWQgMDpkfTthJiYoZi4kanNwYk1lc3NhZ2VJbnN0YW5jZT1jKTtyZXR1cm4gZn0KZnVuY3Rpb24gU2goYSxjKXtmb3IoO2MubmV4dEZpZWxkKCkmJiFjLmlzRW5kR3JvdXAoKTspc3dpdGNoKGMuZ2V0RmllbGROdW1iZXIoKSl7Y2FzZSAxOnZhciBkPWMucmVhZFBhY2tlZEludDY0KCk7YS5zZXRWYWx1ZUxpc3QoZCk7YnJlYWs7ZGVmYXVsdDpjLnNraXBGaWVsZCgpfXJldHVybiBhfU0uc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIGE9bmV3IGRlO1RoKHRoaXMsYSk7cmV0dXJuIGEuZ2V0UmVzdWx0QnVmZmVyKCl9O2Z1bmN0aW9uIFRoKGEsYyl7YT1hLmdldFZhbHVlTGlzdCgpOzA8YS5sZW5ndGgmJmMud3JpdGVQYWNrZWRJbnQ2NChhKX1NLmdldFZhbHVlTGlzdD1mdW5jdGlvbigpe3JldHVybiB4Zih0aGlzLDEpfTtNLnNldFZhbHVlTGlzdD1mdW5jdGlvbihhKXtJZih0aGlzLDEsYXx8W10pfTtNLmFkZFZhbHVlPWZ1bmN0aW9uKGEsYyl7RmcodGhpcyxhLGMpfTtNLmNsZWFyVmFsdWVMaXN0PWZ1bmN0aW9uKCl7dGhpcy5zZXRWYWx1ZUxpc3QoW10pfTsKdmFyIFhnPVtbMSwyLDNdXTtNPVdnLnByb3RvdHlwZTtNLmdldEtpbmRDYXNlPWZ1bmN0aW9uKCl7cmV0dXJuIEllKHRoaXMsWGdbMF0pfTtNLnRvT2JqZWN0PWZ1bmN0aW9uKGEpe3JldHVybiBVaChhLHRoaXMpfTtmdW5jdGlvbiBVaChhLGMpe3ZhciBkLGY9e2J5dGVzTGlzdDooZD1jLmdldEJ5dGVzTGlzdCgpKSYmTGgoYSxkKSxmbG9hdExpc3Q6KGQ9Yy5nZXRGbG9hdExpc3QoKSkmJk9oKGEsZCksaW50NjRMaXN0OihkPWMuZ2V0SW50NjRMaXN0KCkpJiZSaChhLGQpfTthJiYoZi4kanNwYk1lc3NhZ2VJbnN0YW5jZT1jKTtyZXR1cm4gZn0KZnVuY3Rpb24gVmgoYSxjKXtmb3IoO2MubmV4dEZpZWxkKCkmJiFjLmlzRW5kR3JvdXAoKTspc3dpdGNoKGMuZ2V0RmllbGROdW1iZXIoKSl7Y2FzZSAxOnZhciBkPW5ldyBRZztjLnJlYWRNZXNzYWdlKGQsTWgpO2Euc2V0Qnl0ZXNMaXN0KGQpO2JyZWFrO2Nhc2UgMjpkPW5ldyBTZztjLnJlYWRNZXNzYWdlKGQsUGgpO2Euc2V0RmxvYXRMaXN0KGQpO2JyZWFrO2Nhc2UgMzpkPW5ldyBVZztjLnJlYWRNZXNzYWdlKGQsU2gpO2Euc2V0SW50NjRMaXN0KGQpO2JyZWFrO2RlZmF1bHQ6Yy5za2lwRmllbGQoKX1yZXR1cm4gYX1NLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciBhPW5ldyBkZTtXaCh0aGlzLGEpO3JldHVybiBhLmdldFJlc3VsdEJ1ZmZlcigpfTsKZnVuY3Rpb24gV2goYSxjKXt2YXIgZD1hLmdldEJ5dGVzTGlzdCgpO251bGwhPWQmJmMud3JpdGVNZXNzYWdlKDEsZCxOaCk7ZD1hLmdldEZsb2F0TGlzdCgpO251bGwhPWQmJmMud3JpdGVNZXNzYWdlKDIsZCxRaCk7ZD1hLmdldEludDY0TGlzdCgpO251bGwhPWQmJmMud3JpdGVNZXNzYWdlKDMsZCxUaCl9TS5nZXRCeXRlc0xpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gSGcodGhpcyxRZywxKX07TS5zZXRCeXRlc0xpc3Q9ZnVuY3Rpb24oYSl7TGcodGhpcywxLFhnWzBdLGEpfTtNLmNsZWFyQnl0ZXNMaXN0PWZ1bmN0aW9uKCl7dGhpcy5zZXRCeXRlc0xpc3Qodm9pZCAwKX07TS5oYXNCeXRlc0xpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9d2YodGhpcywxKX07TS5nZXRGbG9hdExpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gSGcodGhpcyxTZywyKX07TS5zZXRGbG9hdExpc3Q9ZnVuY3Rpb24oYSl7TGcodGhpcywyLFhnWzBdLGEpfTtNLmNsZWFyRmxvYXRMaXN0PWZ1bmN0aW9uKCl7dGhpcy5zZXRGbG9hdExpc3Qodm9pZCAwKX07Ck0uaGFzRmxvYXRMaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXdmKHRoaXMsMil9O00uZ2V0SW50NjRMaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIEhnKHRoaXMsVWcsMyl9O00uc2V0SW50NjRMaXN0PWZ1bmN0aW9uKGEpe0xnKHRoaXMsMyxYZ1swXSxhKX07TS5jbGVhckludDY0TGlzdD1mdW5jdGlvbigpe3RoaXMuc2V0SW50NjRMaXN0KHZvaWQgMCl9O00uaGFzSW50NjRMaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXdmKHRoaXMsMyl9O1lnLnByb3RvdHlwZS50b09iamVjdD1mdW5jdGlvbihhKXtyZXR1cm4gWGgoYSx0aGlzKX07ZnVuY3Rpb24gWGgoYSxjKXt2YXIgZCxmPXtmZWF0dXJlTWFwOihkPWMuZ2V0RmVhdHVyZU1hcCgpKT9kLnRvT2JqZWN0KGEsVWgpOltdfTthJiYoZi4kanNwYk1lc3NhZ2VJbnN0YW5jZT1jKTtyZXR1cm4gZn0KZnVuY3Rpb24gWWgoYSxjKXtmb3IoO2MubmV4dEZpZWxkKCkmJiFjLmlzRW5kR3JvdXAoKTspc3dpdGNoKGMuZ2V0RmllbGROdW1iZXIoKSl7Y2FzZSAxOnZhciBkPWEuZ2V0RmVhdHVyZU1hcCgpO2MucmVhZE1lc3NhZ2UoZCxmdW5jdGlvbihmLGcpe3plKGYsZyxWaCl9KTticmVhaztkZWZhdWx0OmMuc2tpcEZpZWxkKCl9cmV0dXJuIGF9WWcucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciBhPW5ldyBkZTtaaCh0aGlzLGEpO3JldHVybiBhLmdldFJlc3VsdEJ1ZmZlcigpfTtmdW5jdGlvbiBaaChhLGMpeyhhPWEuZ2V0RmVhdHVyZU1hcCghMCkpJiYwPGEuZ2V0TGVuZ3RoKCkmJmEuc2VyaWFsaXplQmluYXJ5KDEsYyxkZS5wcm90b3R5cGUud3JpdGVTdHJpbmcsZGUucHJvdG90eXBlLndyaXRlTWVzc2FnZSxXaCl9WWcucHJvdG90eXBlLmdldEZlYXR1cmVNYXA9ZnVuY3Rpb24oYSl7cmV0dXJuIEhmKHRoaXMsYSxXZyl9OwpZZy5wcm90b3R5cGUuY2xlYXJGZWF0dXJlTWFwPWZ1bmN0aW9uKCl7dGhpcy5nZXRGZWF0dXJlTWFwKCkuY2xlYXIoKX07dmFyIEpoPVsxXTtNPVpnLnByb3RvdHlwZTtNLnRvT2JqZWN0PWZ1bmN0aW9uKGEpe3JldHVybiAkaChhLHRoaXMpfTtmdW5jdGlvbiAkaChhLGMpe3ZhciBkPXtmZWF0dXJlTGlzdDp2ZihjLmdldEZlYXR1cmVMaXN0KCksVWgsYSl9O2EmJihkLiRqc3BiTWVzc2FnZUluc3RhbmNlPWMpO3JldHVybiBkfWZ1bmN0aW9uIGFpKGEsYyl7Zm9yKDtjLm5leHRGaWVsZCgpJiYhYy5pc0VuZEdyb3VwKCk7KXN3aXRjaChjLmdldEZpZWxkTnVtYmVyKCkpe2Nhc2UgMTp2YXIgZD1uZXcgV2c7Yy5yZWFkTWVzc2FnZShkLFZoKTthLmFkZEZlYXR1cmUoZCk7YnJlYWs7ZGVmYXVsdDpjLnNraXBGaWVsZCgpfXJldHVybiBhfU0uc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIGE9bmV3IGRlO2JpKHRoaXMsYSk7cmV0dXJuIGEuZ2V0UmVzdWx0QnVmZmVyKCl9OwpmdW5jdGlvbiBiaShhLGMpe2E9YS5nZXRGZWF0dXJlTGlzdCgpOzA8YS5sZW5ndGgmJmMud3JpdGVSZXBlYXRlZE1lc3NhZ2UoMSxhLFdoKX1NLmdldEZlYXR1cmVMaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIElnKHRoaXMsV2csMSl9O00uc2V0RmVhdHVyZUxpc3Q9ZnVuY3Rpb24oYSl7TWcodGhpcywxLGEpfTtNLmFkZEZlYXR1cmU9ZnVuY3Rpb24oYSxjKXtyZXR1cm4gTmcodGhpcywxLGEsV2csYyl9O00uY2xlYXJGZWF0dXJlTGlzdD1mdW5jdGlvbigpe3RoaXMuc2V0RmVhdHVyZUxpc3QoW10pfTtLaC5wcm90b3R5cGUudG9PYmplY3Q9ZnVuY3Rpb24oYSl7cmV0dXJuIGNpKGEsdGhpcyl9O2Z1bmN0aW9uIGNpKGEsYyl7dmFyIGQsZj17ZmVhdHVyZUxpc3RNYXA6KGQ9Yy5nZXRGZWF0dXJlTGlzdE1hcCgpKT9kLnRvT2JqZWN0KGEsJGgpOltdfTthJiYoZi4kanNwYk1lc3NhZ2VJbnN0YW5jZT1jKTtyZXR1cm4gZn0KZnVuY3Rpb24gZGkoYSxjKXtmb3IoO2MubmV4dEZpZWxkKCkmJiFjLmlzRW5kR3JvdXAoKTspc3dpdGNoKGMuZ2V0RmllbGROdW1iZXIoKSl7Y2FzZSAxOnZhciBkPWEuZ2V0RmVhdHVyZUxpc3RNYXAoKTtjLnJlYWRNZXNzYWdlKGQsZnVuY3Rpb24oZixnKXt6ZShmLGcsYWkpfSk7YnJlYWs7ZGVmYXVsdDpjLnNraXBGaWVsZCgpfXJldHVybiBhfUtoLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgYT1uZXcgZGU7ZWkodGhpcyxhKTtyZXR1cm4gYS5nZXRSZXN1bHRCdWZmZXIoKX07ZnVuY3Rpb24gZWkoYSxjKXsoYT1hLmdldEZlYXR1cmVMaXN0TWFwKCEwKSkmJjA8YS5nZXRMZW5ndGgoKSYmYS5zZXJpYWxpemVCaW5hcnkoMSxjLGRlLnByb3RvdHlwZS53cml0ZVN0cmluZyxkZS5wcm90b3R5cGUud3JpdGVNZXNzYWdlLGJpKX1LaC5wcm90b3R5cGUuZ2V0RmVhdHVyZUxpc3RNYXA9ZnVuY3Rpb24oYSl7cmV0dXJuIEhmKHRoaXMsYSxaZyl9OwpLaC5wcm90b3R5cGUuY2xlYXJGZWF0dXJlTGlzdE1hcD1mdW5jdGlvbigpe3RoaXMuZ2V0RmVhdHVyZUxpc3RNYXAoKS5jbGVhcigpfTtmdW5jdGlvbiBmaShhKXtFZSh0aGlzLGEsbnVsbCxudWxsKX1RYihmaSxBZSk7ZnVuY3Rpb24gZ2koYSl7RWUodGhpcyxhLG51bGwsbnVsbCl9UWIoZ2ksQWUpO009ZmkucHJvdG90eXBlO00udG9PYmplY3Q9ZnVuY3Rpb24oYSl7cmV0dXJuIGhpKGEsdGhpcyl9O2Z1bmN0aW9uIGhpKGEsYyl7dmFyIGQsZj17ZmVhdHVyZXM6KGQ9Yy5nZXRGZWF0dXJlcygpKSYmWGgoYSxkKX07YSYmKGYuJGpzcGJNZXNzYWdlSW5zdGFuY2U9Yyk7cmV0dXJuIGZ9ZnVuY3Rpb24gaWkoYSl7YT1uZXcgYmUoYSk7dmFyIGM9bmV3IGZpO3JldHVybiBqaShjLGEpfQpmdW5jdGlvbiBqaShhLGMpe2Zvcig7Yy5uZXh0RmllbGQoKSYmIWMuaXNFbmRHcm91cCgpOylzd2l0Y2goYy5nZXRGaWVsZE51bWJlcigpKXtjYXNlIDE6dmFyIGQ9bmV3IFlnO2MucmVhZE1lc3NhZ2UoZCxZaCk7YS5zZXRGZWF0dXJlcyhkKTticmVhaztkZWZhdWx0OmMuc2tpcEZpZWxkKCl9cmV0dXJuIGF9TS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgYT1uZXcgZGU7a2kodGhpcyxhKTtyZXR1cm4gYS5nZXRSZXN1bHRCdWZmZXIoKX07ZnVuY3Rpb24ga2koYSxjKXthPWEuZ2V0RmVhdHVyZXMoKTtudWxsIT1hJiZjLndyaXRlTWVzc2FnZSgxLGEsWmgpfU0uZ2V0RmVhdHVyZXM9ZnVuY3Rpb24oKXtyZXR1cm4gSGcodGhpcyxZZywxKX07TS5zZXRGZWF0dXJlcz1mdW5jdGlvbihhKXtLZyh0aGlzLDEsYSl9O00uY2xlYXJGZWF0dXJlcz1mdW5jdGlvbigpe3RoaXMuc2V0RmVhdHVyZXModm9pZCAwKX07Ck0uaGFzRmVhdHVyZXM9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9d2YodGhpcywxKX07TT1naS5wcm90b3R5cGU7TS50b09iamVjdD1mdW5jdGlvbihhKXtyZXR1cm4gbGkoYSx0aGlzKX07ZnVuY3Rpb24gbGkoYSxjKXt2YXIgZCxmPXtjb250ZXh0OihkPWMuZ2V0Q29udGV4dCgpKSYmWGgoYSxkKSxmZWF0dXJlTGlzdHM6KGQ9Yy5nZXRGZWF0dXJlTGlzdHMoKSkmJmNpKGEsZCl9O2EmJihmLiRqc3BiTWVzc2FnZUluc3RhbmNlPWMpO3JldHVybiBmfWZ1bmN0aW9uIG1pKGEpe2E9bmV3IGJlKGEpO3ZhciBjPW5ldyBnaTtyZXR1cm4gbmkoYyxhKX0KZnVuY3Rpb24gbmkoYSxjKXtmb3IoO2MubmV4dEZpZWxkKCkmJiFjLmlzRW5kR3JvdXAoKTspc3dpdGNoKGMuZ2V0RmllbGROdW1iZXIoKSl7Y2FzZSAxOnZhciBkPW5ldyBZZztjLnJlYWRNZXNzYWdlKGQsWWgpO2Euc2V0Q29udGV4dChkKTticmVhaztjYXNlIDI6ZD1uZXcgS2g7Yy5yZWFkTWVzc2FnZShkLGRpKTthLnNldEZlYXR1cmVMaXN0cyhkKTticmVhaztkZWZhdWx0OmMuc2tpcEZpZWxkKCl9cmV0dXJuIGF9TS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgYT1uZXcgZGU7b2kodGhpcyxhKTtyZXR1cm4gYS5nZXRSZXN1bHRCdWZmZXIoKX07ZnVuY3Rpb24gb2koYSxjKXt2YXIgZD1hLmdldENvbnRleHQoKTtudWxsIT1kJiZjLndyaXRlTWVzc2FnZSgxLGQsWmgpO2Q9YS5nZXRGZWF0dXJlTGlzdHMoKTtudWxsIT1kJiZjLndyaXRlTWVzc2FnZSgyLGQsZWkpfU0uZ2V0Q29udGV4dD1mdW5jdGlvbigpe3JldHVybiBIZyh0aGlzLFlnLDEpfTsKTS5zZXRDb250ZXh0PWZ1bmN0aW9uKGEpe0tnKHRoaXMsMSxhKX07TS5jbGVhckNvbnRleHQ9ZnVuY3Rpb24oKXt0aGlzLnNldENvbnRleHQodm9pZCAwKX07TS5oYXNDb250ZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXdmKHRoaXMsMSl9O00uZ2V0RmVhdHVyZUxpc3RzPWZ1bmN0aW9uKCl7cmV0dXJuIEhnKHRoaXMsS2gsMil9O00uc2V0RmVhdHVyZUxpc3RzPWZ1bmN0aW9uKGEpe0tnKHRoaXMsMixhKX07TS5jbGVhckZlYXR1cmVMaXN0cz1mdW5jdGlvbigpe3RoaXMuc2V0RmVhdHVyZUxpc3RzKHZvaWQgMCl9O00uaGFzRmVhdHVyZUxpc3RzPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXdmKHRoaXMsMil9OwovL35+V0VCUEFUSH5+YmF6ZWwtb3V0L2hvc3QvYmluL2V4dGVybmFsL2FpX2dvb2dsZV9wYWlyX2ZhY2V0cy9mYWNldHNfb3ZlcnZpZXcvcHJvdG8vZmVhdHVyZV9zdGF0aXN0aWNzX3Byb3RvLmpzCmZ1bmN0aW9uIHBpKGEpe0VlKHRoaXMsYSxxaSxudWxsKX1RYihwaSxBZSk7ZnVuY3Rpb24gamooYSl7RWUodGhpcyxhLGtqLG51bGwpfVFiKGpqLEFlKTtmdW5jdGlvbiBsaihhKXtFZSh0aGlzLGEsbWosbnVsbCl9UWIobGosQWUpO2Z1bmN0aW9uIG5qKGEpe0VlKHRoaXMsYSxvaixwail9UWIobmosQWUpO2Z1bmN0aW9uIHFqKGEpe0VlKHRoaXMsYSxudWxsLG51bGwpfVFiKHFqLEFlKTtmdW5jdGlvbiByaihhKXtFZSh0aGlzLGEsbnVsbCxzail9UWIocmosQWUpO2Z1bmN0aW9uIHRqKGEpe0VlKHRoaXMsYSx1aixudWxsKX1RYih0aixBZSk7ZnVuY3Rpb24gdmooYSl7RWUodGhpcyxhLHdqLG51bGwpfVFiKHZqLEFlKTtmdW5jdGlvbiB4aihhKXtFZSh0aGlzLGEsbnVsbCxudWxsKX1RYih4aixBZSk7ZnVuY3Rpb24geWooYSl7RWUodGhpcyxhLHpqLG51bGwpfVFiKHlqLEFlKTtmdW5jdGlvbiBBaihhKXtFZSh0aGlzLGEsQmosbnVsbCl9UWIoQWosQWUpOwpmdW5jdGlvbiBDaihhKXtFZSh0aGlzLGEsbnVsbCxudWxsKX1RYihDaixBZSk7ZnVuY3Rpb24gRGooYSl7RWUodGhpcyxhLG51bGwsbnVsbCl9UWIoRGosQWUpO2Z1bmN0aW9uIEVqKGEpe0VlKHRoaXMsYSxudWxsLG51bGwpfVFiKEVqLEFlKTtmdW5jdGlvbiBGaihhKXtFZSh0aGlzLGEsR2osbnVsbCl9UWIoRmosQWUpO2Z1bmN0aW9uIEhqKGEpe0VlKHRoaXMsYSxudWxsLG51bGwpfVFiKEhqLEFlKTtmdW5jdGlvbiBJaihhKXtFZSh0aGlzLGEsSmosbnVsbCl9UWIoSWosQWUpO2Z1bmN0aW9uIEtqKGEpe0VlKHRoaXMsYSxudWxsLG51bGwpfVFiKEtqLEFlKTt2YXIgcWk9WzFdO009cGkucHJvdG90eXBlO00udG9PYmplY3Q9ZnVuY3Rpb24oYSl7cmV0dXJuIExqKGEsdGhpcyl9O2Z1bmN0aW9uIExqKGEsYyl7dmFyIGQ9e2RhdGFzZXRzTGlzdDp2ZihjLmdldERhdGFzZXRzTGlzdCgpLE1qLGEpfTthJiYoZC4kanNwYk1lc3NhZ2VJbnN0YW5jZT1jKTtyZXR1cm4gZH0KZnVuY3Rpb24gTmooYSl7YT1uZXcgYmUoYSk7dmFyIGM9bmV3IHBpO3JldHVybiBPaihjLGEpfWZ1bmN0aW9uIE9qKGEsYyl7Zm9yKDtjLm5leHRGaWVsZCgpJiYhYy5pc0VuZEdyb3VwKCk7KXN3aXRjaChjLmdldEZpZWxkTnVtYmVyKCkpe2Nhc2UgMTp2YXIgZD1uZXcgbGo7Yy5yZWFkTWVzc2FnZShkLFBqKTthLmFkZERhdGFzZXRzKGQpO2JyZWFrO2RlZmF1bHQ6Yy5za2lwRmllbGQoKX1yZXR1cm4gYX1NLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciBhPW5ldyBkZTtRaih0aGlzLGEpO3JldHVybiBhLmdldFJlc3VsdEJ1ZmZlcigpfTtmdW5jdGlvbiBRaihhLGMpe2E9YS5nZXREYXRhc2V0c0xpc3QoKTswPGEubGVuZ3RoJiZjLndyaXRlUmVwZWF0ZWRNZXNzYWdlKDEsYSxSail9TS5nZXREYXRhc2V0c0xpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gSWcodGhpcyxsaiwxKX07TS5zZXREYXRhc2V0c0xpc3Q9ZnVuY3Rpb24oKXtNZyh0aGlzLDEsW10pfTsKTS5hZGREYXRhc2V0cz1mdW5jdGlvbihhKXtOZyh0aGlzLDEsYSxsaix2b2lkIDApfTtNLmNsZWFyRGF0YXNldHNMaXN0PWZ1bmN0aW9uKCl7dGhpcy5zZXREYXRhc2V0c0xpc3QoKX07dmFyIGtqPVsxXTtNPWpqLnByb3RvdHlwZTtNLnRvT2JqZWN0PWZ1bmN0aW9uKGEpe3JldHVybiBTaihhLHRoaXMpfTtmdW5jdGlvbiBTaihhLGMpe3ZhciBkLGY9e3N0ZXBMaXN0Om51bGw9PShkPXhmKGMsMSkpP3ZvaWQgMDpkfTthJiYoZi4kanNwYk1lc3NhZ2VJbnN0YW5jZT1jKTtyZXR1cm4gZn1mdW5jdGlvbiBUaihhLGMpe2Zvcig7Yy5uZXh0RmllbGQoKSYmIWMuaXNFbmRHcm91cCgpOylzd2l0Y2goYy5nZXRGaWVsZE51bWJlcigpKXtjYXNlIDE6dmFyIGQ9Yy5yZWFkU3RyaW5nKCk7YS5hZGRTdGVwKGQpO2JyZWFrO2RlZmF1bHQ6Yy5za2lwRmllbGQoKX1yZXR1cm4gYX1NLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciBhPW5ldyBkZTtVaih0aGlzLGEpO3JldHVybiBhLmdldFJlc3VsdEJ1ZmZlcigpfTsKZnVuY3Rpb24gVWooYSxjKXthPWEuZ2V0U3RlcExpc3QoKTswPGEubGVuZ3RoJiZjLndyaXRlUmVwZWF0ZWRTdHJpbmcoYSl9TS5nZXRTdGVwTGlzdD1mdW5jdGlvbigpe3JldHVybiB4Zih0aGlzLDEpfTtNLnNldFN0ZXBMaXN0PWZ1bmN0aW9uKCl7SWYodGhpcywxLFtdKX07TS5hZGRTdGVwPWZ1bmN0aW9uKGEpe0ZnKHRoaXMsYSx2b2lkIDApfTtNLmNsZWFyU3RlcExpc3Q9ZnVuY3Rpb24oKXt0aGlzLnNldFN0ZXBMaXN0KCl9O3ZhciBtaj1bM107TT1sai5wcm90b3R5cGU7TS50b09iamVjdD1mdW5jdGlvbihhKXtyZXR1cm4gTWooYSx0aGlzKX07ZnVuY3Rpb24gTWooYSxjKXt2YXIgZD17bmFtZTpGZihjLDEsIiIpLG51bUV4YW1wbGVzOkZmKGMsMiwwKSx3ZWlnaHRlZE51bUV4YW1wbGVzOkdmKGMsNCksZmVhdHVyZXNMaXN0OnZmKGMuZ2V0RmVhdHVyZXNMaXN0KCksVmosYSl9O2EmJihkLiRqc3BiTWVzc2FnZUluc3RhbmNlPWMpO3JldHVybiBkfQpmdW5jdGlvbiBQaihhLGMpe2Zvcig7Yy5uZXh0RmllbGQoKSYmIWMuaXNFbmRHcm91cCgpOylzd2l0Y2goYy5nZXRGaWVsZE51bWJlcigpKXtjYXNlIDE6dmFyIGQ9Yy5yZWFkU3RyaW5nKCk7YS5zZXROYW1lKGQpO2JyZWFrO2Nhc2UgMjpkPWMucmVhZFVpbnQ2NCgpO2Euc2V0TnVtRXhhbXBsZXMoZCk7YnJlYWs7Y2FzZSA0OmQ9Yy5yZWFkRG91YmxlKCk7YS5zZXRXZWlnaHRlZE51bUV4YW1wbGVzKGQpO2JyZWFrO2Nhc2UgMzpkPW5ldyBuajtjLnJlYWRNZXNzYWdlKGQsV2opO2EuYWRkRmVhdHVyZXMoZCk7YnJlYWs7ZGVmYXVsdDpjLnNraXBGaWVsZCgpfXJldHVybiBhfU0uc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIGE9bmV3IGRlO1JqKHRoaXMsYSk7cmV0dXJuIGEuZ2V0UmVzdWx0QnVmZmVyKCl9OwpmdW5jdGlvbiBSaihhLGMpe3ZhciBkPWEuZ2V0TmFtZSgpOzA8ZC5sZW5ndGgmJmMud3JpdGVTdHJpbmcoMSxkKTtkPWEuZ2V0TnVtRXhhbXBsZXMoKTswIT09ZCYmYy53cml0ZVVpbnQ2NCgyLGQpO2Q9YS5nZXRXZWlnaHRlZE51bUV4YW1wbGVzKCk7MCE9PWQmJmMud3JpdGVEb3VibGUoNCxkKTtkPWEuZ2V0RmVhdHVyZXNMaXN0KCk7MDxkLmxlbmd0aCYmYy53cml0ZVJlcGVhdGVkTWVzc2FnZSgzLGQsWGopfU0uZ2V0TmFtZT1mdW5jdGlvbigpe3JldHVybiBGZih0aGlzLDEsIiIpfTtNLnNldE5hbWU9ZnVuY3Rpb24oYSl7TWYodGhpcywxLGEpfTtNLmdldE51bUV4YW1wbGVzPWZ1bmN0aW9uKCl7cmV0dXJuIEZmKHRoaXMsMiwwKX07TS5zZXROdW1FeGFtcGxlcz1mdW5jdGlvbihhKXtKZih0aGlzLDIsYSl9O00uZ2V0V2VpZ2h0ZWROdW1FeGFtcGxlcz1mdW5jdGlvbigpe3JldHVybiBHZih0aGlzLDQpfTsKTS5zZXRXZWlnaHRlZE51bUV4YW1wbGVzPWZ1bmN0aW9uKGEpe0xmKHRoaXMsNCxhKX07TS5nZXRGZWF0dXJlc0xpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gSWcodGhpcyxuaiwzKX07TS5zZXRGZWF0dXJlc0xpc3Q9ZnVuY3Rpb24oKXtNZyh0aGlzLDMsW10pfTtNLmFkZEZlYXR1cmVzPWZ1bmN0aW9uKGEpe05nKHRoaXMsMyxhLG5qLHZvaWQgMCl9O00uY2xlYXJGZWF0dXJlc0xpc3Q9ZnVuY3Rpb24oKXt0aGlzLnNldEZlYXR1cmVzTGlzdCgpfTt2YXIgb2o9WzZdLHBqPVtbMSw4XSxbMyw0LDUsN11dO009bmoucHJvdG90eXBlO00uZ2V0RmllbGRJZENhc2U9ZnVuY3Rpb24oKXtyZXR1cm4gSWUodGhpcyxwalswXSl9O00uZ2V0U3RhdHNDYXNlPWZ1bmN0aW9uKCl7cmV0dXJuIEllKHRoaXMscGpbMV0pfTtNLnRvT2JqZWN0PWZ1bmN0aW9uKGEpe3JldHVybiBWaihhLHRoaXMpfTsKZnVuY3Rpb24gVmooYSxjKXt2YXIgZCxmPXtuYW1lOkZmKGMsMSwiIikscGF0aDooZD1jLmdldFBhdGgoKSkmJlNqKGEsZCksdHlwZTpGZihjLDIsMCksbnVtU3RhdHM6KGQ9Yy5nZXROdW1TdGF0cygpKSYmWWooYSxkKSxzdHJpbmdTdGF0czooZD1jLmdldFN0cmluZ1N0YXRzKCkpJiZaaihhLGQpLGJ5dGVzU3RhdHM6KGQ9Yy5nZXRCeXRlc1N0YXRzKCkpJiZhayhhLGQpLHN0cnVjdFN0YXRzOihkPWMuZ2V0U3RydWN0U3RhdHMoKSkmJmJrKGEsZCksY3VzdG9tU3RhdHNMaXN0OnZmKGMuZ2V0Q3VzdG9tU3RhdHNMaXN0KCksY2ssYSl9O2EmJihmLiRqc3BiTWVzc2FnZUluc3RhbmNlPWMpO3JldHVybiBmfQpmdW5jdGlvbiBXaihhLGMpe2Zvcig7Yy5uZXh0RmllbGQoKSYmIWMuaXNFbmRHcm91cCgpOylzd2l0Y2goYy5nZXRGaWVsZE51bWJlcigpKXtjYXNlIDE6dmFyIGQ9Yy5yZWFkU3RyaW5nKCk7YS5zZXROYW1lKGQpO2JyZWFrO2Nhc2UgODpkPW5ldyBqajtjLnJlYWRNZXNzYWdlKGQsVGopO2Euc2V0UGF0aChkKTticmVhaztjYXNlIDI6ZD1jLnJlYWRFbnVtKCk7YS5zZXRUeXBlKGQpO2JyZWFrO2Nhc2UgMzpkPW5ldyB0ajtjLnJlYWRNZXNzYWdlKGQsZGspO2Euc2V0TnVtU3RhdHMoZCk7YnJlYWs7Y2FzZSA0OmQ9bmV3IHZqO2MucmVhZE1lc3NhZ2UoZCxlayk7YS5zZXRTdHJpbmdTdGF0cyhkKTticmVhaztjYXNlIDU6ZD1uZXcgQ2o7Yy5yZWFkTWVzc2FnZShkLGZrKTthLnNldEJ5dGVzU3RhdHMoZCk7YnJlYWs7Y2FzZSA3OmQ9bmV3IERqO2MucmVhZE1lc3NhZ2UoZCxnayk7YS5zZXRTdHJ1Y3RTdGF0cyhkKTticmVhaztjYXNlIDY6ZD1uZXcgcmo7Yy5yZWFkTWVzc2FnZShkLGhrKTsKYS5hZGRDdXN0b21TdGF0cyhkKTticmVhaztkZWZhdWx0OmMuc2tpcEZpZWxkKCl9cmV0dXJuIGF9TS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgYT1uZXcgZGU7WGoodGhpcyxhKTtyZXR1cm4gYS5nZXRSZXN1bHRCdWZmZXIoKX07CmZ1bmN0aW9uIFhqKGEsYyl7dmFyIGQ9d2YoYSwxKTtudWxsIT1kJiZjLndyaXRlU3RyaW5nKDEsZCk7ZD1hLmdldFBhdGgoKTtudWxsIT1kJiZjLndyaXRlTWVzc2FnZSg4LGQsVWopO2Q9YS5nZXRUeXBlKCk7MCE9PWQmJmMud3JpdGVFbnVtKDIsZCk7ZD1hLmdldE51bVN0YXRzKCk7bnVsbCE9ZCYmYy53cml0ZU1lc3NhZ2UoMyxkLGlrKTtkPWEuZ2V0U3RyaW5nU3RhdHMoKTtudWxsIT1kJiZjLndyaXRlTWVzc2FnZSg0LGQsamspO2Q9YS5nZXRCeXRlc1N0YXRzKCk7bnVsbCE9ZCYmYy53cml0ZU1lc3NhZ2UoNSxkLGtrKTtkPWEuZ2V0U3RydWN0U3RhdHMoKTtudWxsIT1kJiZjLndyaXRlTWVzc2FnZSg3LGQsbGspO2Q9YS5nZXRDdXN0b21TdGF0c0xpc3QoKTswPGQubGVuZ3RoJiZjLndyaXRlUmVwZWF0ZWRNZXNzYWdlKDYsZCxtayl9TS5nZXROYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIEZmKHRoaXMsMSwiIil9O00uc2V0TmFtZT1mdW5jdGlvbihhKXtHZyh0aGlzLDEscGpbMF0sYSl9OwpNLmNsZWFyTmFtZT1mdW5jdGlvbigpe0dnKHRoaXMsMSxwalswXSx2b2lkIDApfTtNLmhhc05hbWU9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9d2YodGhpcywxKX07TS5nZXRQYXRoPWZ1bmN0aW9uKCl7cmV0dXJuIEhnKHRoaXMsamosOCl9O00uc2V0UGF0aD1mdW5jdGlvbihhKXtMZyh0aGlzLDgscGpbMF0sYSl9O00uY2xlYXJQYXRoPWZ1bmN0aW9uKCl7dGhpcy5zZXRQYXRoKHZvaWQgMCl9O00uaGFzUGF0aD1mdW5jdGlvbigpe3JldHVybiBudWxsIT13Zih0aGlzLDgpfTtNLmdldFR5cGU9ZnVuY3Rpb24oKXtyZXR1cm4gRmYodGhpcywyLDApfTtNLnNldFR5cGU9ZnVuY3Rpb24oYSl7TmYodGhpcywyLGEpfTtNLmdldE51bVN0YXRzPWZ1bmN0aW9uKCl7cmV0dXJuIEhnKHRoaXMsdGosMyl9O00uc2V0TnVtU3RhdHM9ZnVuY3Rpb24oYSl7TGcodGhpcywzLHBqWzFdLGEpfTtNLmNsZWFyTnVtU3RhdHM9ZnVuY3Rpb24oKXt0aGlzLnNldE51bVN0YXRzKHZvaWQgMCl9OwpNLmhhc051bVN0YXRzPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXdmKHRoaXMsMyl9O00uZ2V0U3RyaW5nU3RhdHM9ZnVuY3Rpb24oKXtyZXR1cm4gSGcodGhpcyx2aiw0KX07TS5zZXRTdHJpbmdTdGF0cz1mdW5jdGlvbihhKXtMZyh0aGlzLDQscGpbMV0sYSl9O00uY2xlYXJTdHJpbmdTdGF0cz1mdW5jdGlvbigpe3RoaXMuc2V0U3RyaW5nU3RhdHModm9pZCAwKX07TS5oYXNTdHJpbmdTdGF0cz1mdW5jdGlvbigpe3JldHVybiBudWxsIT13Zih0aGlzLDQpfTtNLmdldEJ5dGVzU3RhdHM9ZnVuY3Rpb24oKXtyZXR1cm4gSGcodGhpcyxDaiw1KX07TS5zZXRCeXRlc1N0YXRzPWZ1bmN0aW9uKGEpe0xnKHRoaXMsNSxwalsxXSxhKX07TS5jbGVhckJ5dGVzU3RhdHM9ZnVuY3Rpb24oKXt0aGlzLnNldEJ5dGVzU3RhdHModm9pZCAwKX07TS5oYXNCeXRlc1N0YXRzPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXdmKHRoaXMsNSl9OwpNLmdldFN0cnVjdFN0YXRzPWZ1bmN0aW9uKCl7cmV0dXJuIEhnKHRoaXMsRGosNyl9O00uc2V0U3RydWN0U3RhdHM9ZnVuY3Rpb24oYSl7TGcodGhpcyw3LHBqWzFdLGEpfTtNLmNsZWFyU3RydWN0U3RhdHM9ZnVuY3Rpb24oKXt0aGlzLnNldFN0cnVjdFN0YXRzKHZvaWQgMCl9O00uaGFzU3RydWN0U3RhdHM9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9d2YodGhpcyw3KX07TS5nZXRDdXN0b21TdGF0c0xpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gSWcodGhpcyxyaiw2KX07TS5zZXRDdXN0b21TdGF0c0xpc3Q9ZnVuY3Rpb24oKXtNZyh0aGlzLDYsW10pfTtNLmFkZEN1c3RvbVN0YXRzPWZ1bmN0aW9uKGEpe05nKHRoaXMsNixhLHJqLHZvaWQgMCl9O00uY2xlYXJDdXN0b21TdGF0c0xpc3Q9ZnVuY3Rpb24oKXt0aGlzLnNldEN1c3RvbVN0YXRzTGlzdCgpfTtNPXFqLnByb3RvdHlwZTtNLnRvT2JqZWN0PWZ1bmN0aW9uKGEpe3JldHVybiBuayhhLHRoaXMpfTsKZnVuY3Rpb24gbmsoYSxjKXt2YXIgZD17bnVtTm9uTWlzc2luZzpHZihjLDEpLG51bU1pc3Npbmc6R2YoYywyKSxhdmdOdW1WYWx1ZXM6R2YoYywzKSx0b3ROdW1WYWx1ZXM6R2YoYyw0KX07YSYmKGQuJGpzcGJNZXNzYWdlSW5zdGFuY2U9Yyk7cmV0dXJuIGR9ZnVuY3Rpb24gb2soYSxjKXtmb3IoO2MubmV4dEZpZWxkKCkmJiFjLmlzRW5kR3JvdXAoKTspc3dpdGNoKGMuZ2V0RmllbGROdW1iZXIoKSl7Y2FzZSAxOnZhciBkPWMucmVhZERvdWJsZSgpO2Euc2V0TnVtTm9uTWlzc2luZyhkKTticmVhaztjYXNlIDI6ZD1jLnJlYWREb3VibGUoKTthLnNldE51bU1pc3NpbmcoZCk7YnJlYWs7Y2FzZSAzOmQ9Yy5yZWFkRG91YmxlKCk7YS5zZXRBdmdOdW1WYWx1ZXMoZCk7YnJlYWs7Y2FzZSA0OmQ9Yy5yZWFkRG91YmxlKCk7YS5zZXRUb3ROdW1WYWx1ZXMoZCk7YnJlYWs7ZGVmYXVsdDpjLnNraXBGaWVsZCgpfXJldHVybiBhfQpNLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciBhPW5ldyBkZTtwayh0aGlzLGEpO3JldHVybiBhLmdldFJlc3VsdEJ1ZmZlcigpfTtmdW5jdGlvbiBwayhhLGMpe3ZhciBkPWEuZ2V0TnVtTm9uTWlzc2luZygpOzAhPT1kJiZjLndyaXRlRG91YmxlKDEsZCk7ZD1hLmdldE51bU1pc3NpbmcoKTswIT09ZCYmYy53cml0ZURvdWJsZSgyLGQpO2Q9YS5nZXRBdmdOdW1WYWx1ZXMoKTswIT09ZCYmYy53cml0ZURvdWJsZSgzLGQpO2Q9YS5nZXRUb3ROdW1WYWx1ZXMoKTswIT09ZCYmYy53cml0ZURvdWJsZSg0LGQpfU0uZ2V0TnVtTm9uTWlzc2luZz1mdW5jdGlvbigpe3JldHVybiBHZih0aGlzLDEpfTtNLnNldE51bU5vbk1pc3Npbmc9ZnVuY3Rpb24oYSl7TGYodGhpcywxLGEpfTtNLmdldE51bU1pc3Npbmc9ZnVuY3Rpb24oKXtyZXR1cm4gR2YodGhpcywyKX07TS5zZXROdW1NaXNzaW5nPWZ1bmN0aW9uKGEpe0xmKHRoaXMsMixhKX07Ck0uZ2V0QXZnTnVtVmFsdWVzPWZ1bmN0aW9uKCl7cmV0dXJuIEdmKHRoaXMsMyl9O00uc2V0QXZnTnVtVmFsdWVzPWZ1bmN0aW9uKGEpe0xmKHRoaXMsMyxhKX07TS5nZXRUb3ROdW1WYWx1ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gR2YodGhpcyw0KX07TS5zZXRUb3ROdW1WYWx1ZXM9ZnVuY3Rpb24oYSl7TGYodGhpcyw0LGEpfTt2YXIgc2o9W1syLDMsNCw1XV07TT1yai5wcm90b3R5cGU7TS5nZXRWYWxDYXNlPWZ1bmN0aW9uKCl7cmV0dXJuIEllKHRoaXMsc2pbMF0pfTtNLnRvT2JqZWN0PWZ1bmN0aW9uKGEpe3JldHVybiBjayhhLHRoaXMpfTsKZnVuY3Rpb24gY2soYSxjKXt2YXIgZCxmPXtuYW1lOkZmKGMsMSwiIiksbnVtOkdmKGMsMiksc3RyOkZmKGMsMywiIiksaGlzdG9ncmFtOihkPWMuZ2V0SGlzdG9ncmFtKCkpJiZxayhhLGQpLHJhbmtIaXN0b2dyYW06KGQ9Yy5nZXRSYW5rSGlzdG9ncmFtKCkpJiZyayhhLGQpfTthJiYoZi4kanNwYk1lc3NhZ2VJbnN0YW5jZT1jKTtyZXR1cm4gZn0KZnVuY3Rpb24gaGsoYSxjKXtmb3IoO2MubmV4dEZpZWxkKCkmJiFjLmlzRW5kR3JvdXAoKTspc3dpdGNoKGMuZ2V0RmllbGROdW1iZXIoKSl7Y2FzZSAxOnZhciBkPWMucmVhZFN0cmluZygpO2Euc2V0TmFtZShkKTticmVhaztjYXNlIDI6ZD1jLnJlYWREb3VibGUoKTthLnNldE51bShkKTticmVhaztjYXNlIDM6ZD1jLnJlYWRTdHJpbmcoKTthLnNldFN0cihkKTticmVhaztjYXNlIDQ6ZD1uZXcgRmo7Yy5yZWFkTWVzc2FnZShkLHNrKTthLnNldEhpc3RvZ3JhbShkKTticmVhaztjYXNlIDU6ZD1uZXcgSWo7Yy5yZWFkTWVzc2FnZShkLHRrKTthLnNldFJhbmtIaXN0b2dyYW0oZCk7YnJlYWs7ZGVmYXVsdDpjLnNraXBGaWVsZCgpfXJldHVybiBhfU0uc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIGE9bmV3IGRlO21rKHRoaXMsYSk7cmV0dXJuIGEuZ2V0UmVzdWx0QnVmZmVyKCl9OwpmdW5jdGlvbiBtayhhLGMpe3ZhciBkPWEuZ2V0TmFtZSgpOzA8ZC5sZW5ndGgmJmMud3JpdGVTdHJpbmcoMSxkKTtkPXdmKGEsMik7bnVsbCE9ZCYmYy53cml0ZURvdWJsZSgyLGQpO2Q9d2YoYSwzKTtudWxsIT1kJiZjLndyaXRlU3RyaW5nKDMsZCk7ZD1hLmdldEhpc3RvZ3JhbSgpO251bGwhPWQmJmMud3JpdGVNZXNzYWdlKDQsZCx1ayk7ZD1hLmdldFJhbmtIaXN0b2dyYW0oKTtudWxsIT1kJiZjLndyaXRlTWVzc2FnZSg1LGQsdmspfU0uZ2V0TmFtZT1mdW5jdGlvbigpe3JldHVybiBGZih0aGlzLDEsIiIpfTtNLnNldE5hbWU9ZnVuY3Rpb24oYSl7TWYodGhpcywxLGEpfTtNLmdldE51bT1mdW5jdGlvbigpe3JldHVybiBHZih0aGlzLDIpfTtNLnNldE51bT1mdW5jdGlvbihhKXtHZyh0aGlzLDIsc2pbMF0sYSl9O00uY2xlYXJOdW09ZnVuY3Rpb24oKXtHZyh0aGlzLDIsc2pbMF0sdm9pZCAwKX07TS5oYXNOdW09ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9d2YodGhpcywyKX07Ck0uZ2V0U3RyPWZ1bmN0aW9uKCl7cmV0dXJuIEZmKHRoaXMsMywiIil9O00uc2V0U3RyPWZ1bmN0aW9uKGEpe0dnKHRoaXMsMyxzalswXSxhKX07TS5jbGVhclN0cj1mdW5jdGlvbigpe0dnKHRoaXMsMyxzalswXSx2b2lkIDApfTtNLmhhc1N0cj1mdW5jdGlvbigpe3JldHVybiBudWxsIT13Zih0aGlzLDMpfTtNLmdldEhpc3RvZ3JhbT1mdW5jdGlvbigpe3JldHVybiBIZyh0aGlzLEZqLDQpfTtNLnNldEhpc3RvZ3JhbT1mdW5jdGlvbihhKXtMZyh0aGlzLDQsc2pbMF0sYSl9O00uY2xlYXJIaXN0b2dyYW09ZnVuY3Rpb24oKXt0aGlzLnNldEhpc3RvZ3JhbSh2b2lkIDApfTtNLmhhc0hpc3RvZ3JhbT1mdW5jdGlvbigpe3JldHVybiBudWxsIT13Zih0aGlzLDQpfTtNLmdldFJhbmtIaXN0b2dyYW09ZnVuY3Rpb24oKXtyZXR1cm4gSGcodGhpcyxJaiw1KX07TS5zZXRSYW5rSGlzdG9ncmFtPWZ1bmN0aW9uKGEpe0xnKHRoaXMsNSxzalswXSxhKX07TS5jbGVhclJhbmtIaXN0b2dyYW09ZnVuY3Rpb24oKXt0aGlzLnNldFJhbmtIaXN0b2dyYW0odm9pZCAwKX07Ck0uaGFzUmFua0hpc3RvZ3JhbT1mdW5jdGlvbigpe3JldHVybiBudWxsIT13Zih0aGlzLDUpfTt2YXIgdWo9WzhdO009dGoucHJvdG90eXBlO00udG9PYmplY3Q9ZnVuY3Rpb24oYSl7cmV0dXJuIFlqKGEsdGhpcyl9O2Z1bmN0aW9uIFlqKGEsYyl7dmFyIGQsZj17Y29tbW9uU3RhdHM6KGQ9Yy5nZXRDb21tb25TdGF0cygpKSYmd2soYSxkKSxtZWFuOkdmKGMsMiksc3RkRGV2OkdmKGMsMyksbnVtWmVyb3M6RmYoYyw0LDApLG1pbjpHZihjLDUpLG1lZGlhbjpHZihjLDYpLG1heDpHZihjLDcpLGhpc3RvZ3JhbXNMaXN0OnZmKGMuZ2V0SGlzdG9ncmFtc0xpc3QoKSxxayxhKSx3ZWlnaHRlZE51bWVyaWNTdGF0czooZD1jLmdldFdlaWdodGVkTnVtZXJpY1N0YXRzKCkpJiZ4ayhhLGQpfTthJiYoZi4kanNwYk1lc3NhZ2VJbnN0YW5jZT1jKTtyZXR1cm4gZn0KZnVuY3Rpb24gZGsoYSxjKXtmb3IoO2MubmV4dEZpZWxkKCkmJiFjLmlzRW5kR3JvdXAoKTspc3dpdGNoKGMuZ2V0RmllbGROdW1iZXIoKSl7Y2FzZSAxOnZhciBkPW5ldyBFajtjLnJlYWRNZXNzYWdlKGQseWspO2Euc2V0Q29tbW9uU3RhdHMoZCk7YnJlYWs7Y2FzZSAyOmQ9Yy5yZWFkRG91YmxlKCk7YS5zZXRNZWFuKGQpO2JyZWFrO2Nhc2UgMzpkPWMucmVhZERvdWJsZSgpO2Euc2V0U3RkRGV2KGQpO2JyZWFrO2Nhc2UgNDpkPWMucmVhZFVpbnQ2NCgpO2Euc2V0TnVtWmVyb3MoZCk7YnJlYWs7Y2FzZSA1OmQ9Yy5yZWFkRG91YmxlKCk7YS5zZXRNaW4oZCk7YnJlYWs7Y2FzZSA2OmQ9Yy5yZWFkRG91YmxlKCk7YS5zZXRNZWRpYW4oZCk7YnJlYWs7Y2FzZSA3OmQ9Yy5yZWFkRG91YmxlKCk7YS5zZXRNYXgoZCk7YnJlYWs7Y2FzZSA4OmQ9bmV3IEZqO2MucmVhZE1lc3NhZ2UoZCxzayk7YS5hZGRIaXN0b2dyYW1zKGQpO2JyZWFrO2Nhc2UgOTpkPW5ldyB5ajtjLnJlYWRNZXNzYWdlKGQsCnprKTthLnNldFdlaWdodGVkTnVtZXJpY1N0YXRzKGQpO2JyZWFrO2RlZmF1bHQ6Yy5za2lwRmllbGQoKX1yZXR1cm4gYX1NLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciBhPW5ldyBkZTtpayh0aGlzLGEpO3JldHVybiBhLmdldFJlc3VsdEJ1ZmZlcigpfTsKZnVuY3Rpb24gaWsoYSxjKXt2YXIgZD1hLmdldENvbW1vblN0YXRzKCk7bnVsbCE9ZCYmYy53cml0ZU1lc3NhZ2UoMSxkLEFrKTtkPWEuZ2V0TWVhbigpOzAhPT1kJiZjLndyaXRlRG91YmxlKDIsZCk7ZD1hLmdldFN0ZERldigpOzAhPT1kJiZjLndyaXRlRG91YmxlKDMsZCk7ZD1hLmdldE51bVplcm9zKCk7MCE9PWQmJmMud3JpdGVVaW50NjQoNCxkKTtkPWEuZ2V0TWluKCk7MCE9PWQmJmMud3JpdGVEb3VibGUoNSxkKTtkPWEuZ2V0TWVkaWFuKCk7MCE9PWQmJmMud3JpdGVEb3VibGUoNixkKTtkPWEuZ2V0TWF4KCk7MCE9PWQmJmMud3JpdGVEb3VibGUoNyxkKTtkPWEuZ2V0SGlzdG9ncmFtc0xpc3QoKTswPGQubGVuZ3RoJiZjLndyaXRlUmVwZWF0ZWRNZXNzYWdlKDgsZCx1ayk7ZD1hLmdldFdlaWdodGVkTnVtZXJpY1N0YXRzKCk7bnVsbCE9ZCYmYy53cml0ZU1lc3NhZ2UoOSxkLEJrKX1NLmdldENvbW1vblN0YXRzPWZ1bmN0aW9uKCl7cmV0dXJuIEhnKHRoaXMsRWosMSl9OwpNLnNldENvbW1vblN0YXRzPWZ1bmN0aW9uKGEpe0tnKHRoaXMsMSxhKX07TS5jbGVhckNvbW1vblN0YXRzPWZ1bmN0aW9uKCl7dGhpcy5zZXRDb21tb25TdGF0cyh2b2lkIDApfTtNLmhhc0NvbW1vblN0YXRzPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXdmKHRoaXMsMSl9O00uZ2V0TWVhbj1mdW5jdGlvbigpe3JldHVybiBHZih0aGlzLDIpfTtNLnNldE1lYW49ZnVuY3Rpb24oYSl7TGYodGhpcywyLGEpfTtNLmdldFN0ZERldj1mdW5jdGlvbigpe3JldHVybiBHZih0aGlzLDMpfTtNLnNldFN0ZERldj1mdW5jdGlvbihhKXtMZih0aGlzLDMsYSl9O00uZ2V0TnVtWmVyb3M9ZnVuY3Rpb24oKXtyZXR1cm4gRmYodGhpcyw0LDApfTtNLnNldE51bVplcm9zPWZ1bmN0aW9uKGEpe0pmKHRoaXMsNCxhKX07TS5nZXRNaW49ZnVuY3Rpb24oKXtyZXR1cm4gR2YodGhpcyw1KX07TS5zZXRNaW49ZnVuY3Rpb24oYSl7TGYodGhpcyw1LGEpfTsKTS5nZXRNZWRpYW49ZnVuY3Rpb24oKXtyZXR1cm4gR2YodGhpcyw2KX07TS5zZXRNZWRpYW49ZnVuY3Rpb24oYSl7TGYodGhpcyw2LGEpfTtNLmdldE1heD1mdW5jdGlvbigpe3JldHVybiBHZih0aGlzLDcpfTtNLnNldE1heD1mdW5jdGlvbihhKXtMZih0aGlzLDcsYSl9O00uZ2V0SGlzdG9ncmFtc0xpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gSWcodGhpcyxGaiw4KX07TS5zZXRIaXN0b2dyYW1zTGlzdD1mdW5jdGlvbihhKXtNZyh0aGlzLDgsYSl9O00uYWRkSGlzdG9ncmFtcz1mdW5jdGlvbihhKXtyZXR1cm4gTmcodGhpcyw4LGEsRmosdm9pZCAwKX07TS5jbGVhckhpc3RvZ3JhbXNMaXN0PWZ1bmN0aW9uKCl7dGhpcy5zZXRIaXN0b2dyYW1zTGlzdChbXSl9O00uZ2V0V2VpZ2h0ZWROdW1lcmljU3RhdHM9ZnVuY3Rpb24oKXtyZXR1cm4gSGcodGhpcyx5aiw5KX07TS5zZXRXZWlnaHRlZE51bWVyaWNTdGF0cz1mdW5jdGlvbihhKXtLZyh0aGlzLDksYSl9OwpNLmNsZWFyV2VpZ2h0ZWROdW1lcmljU3RhdHM9ZnVuY3Rpb24oKXt0aGlzLnNldFdlaWdodGVkTnVtZXJpY1N0YXRzKHZvaWQgMCl9O00uaGFzV2VpZ2h0ZWROdW1lcmljU3RhdHM9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9d2YodGhpcyw5KX07dmFyIHdqPVszXTt2ai5wcm90b3R5cGUudG9PYmplY3Q9ZnVuY3Rpb24oYSl7cmV0dXJuIFpqKGEsdGhpcyl9O2Z1bmN0aW9uIFpqKGEsYyl7dmFyIGQsZj17Y29tbW9uU3RhdHM6KGQ9Yy5nZXRDb21tb25TdGF0cygpKSYmd2soYSxkKSx1bmlxdWU6RmYoYywyLDApLHRvcFZhbHVlc0xpc3Q6dmYoYy5nZXRUb3BWYWx1ZXNMaXN0KCksQ2ssYSksYXZnTGVuZ3RoOkdmKGMsNCkscmFua0hpc3RvZ3JhbTooZD1jLmdldFJhbmtIaXN0b2dyYW0oKSkmJnJrKGEsZCksd2VpZ2h0ZWRTdHJpbmdTdGF0czooZD1jLmdldFdlaWdodGVkU3RyaW5nU3RhdHMoKSkmJkRrKGEsZCl9O2EmJihmLiRqc3BiTWVzc2FnZUluc3RhbmNlPWMpO3JldHVybiBmfQpmdW5jdGlvbiBlayhhLGMpe2Zvcig7Yy5uZXh0RmllbGQoKSYmIWMuaXNFbmRHcm91cCgpOylzd2l0Y2goYy5nZXRGaWVsZE51bWJlcigpKXtjYXNlIDE6dmFyIGQ9bmV3IEVqO2MucmVhZE1lc3NhZ2UoZCx5ayk7YS5zZXRDb21tb25TdGF0cyhkKTticmVhaztjYXNlIDI6ZD1jLnJlYWRVaW50NjQoKTthLnNldFVuaXF1ZShkKTticmVhaztjYXNlIDM6ZD1uZXcgeGo7Yy5yZWFkTWVzc2FnZShkLEVrKTthLmFkZFRvcFZhbHVlcyhkKTticmVhaztjYXNlIDQ6ZD1jLnJlYWRGbG9hdCgpO2Euc2V0QXZnTGVuZ3RoKGQpO2JyZWFrO2Nhc2UgNTpkPW5ldyBJajtjLnJlYWRNZXNzYWdlKGQsdGspO2Euc2V0UmFua0hpc3RvZ3JhbShkKTticmVhaztjYXNlIDY6ZD1uZXcgQWo7Yy5yZWFkTWVzc2FnZShkLEZrKTthLnNldFdlaWdodGVkU3RyaW5nU3RhdHMoZCk7YnJlYWs7ZGVmYXVsdDpjLnNraXBGaWVsZCgpfXJldHVybiBhfQp2ai5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIGE9bmV3IGRlO2prKHRoaXMsYSk7cmV0dXJuIGEuZ2V0UmVzdWx0QnVmZmVyKCl9O2Z1bmN0aW9uIGprKGEsYyl7dmFyIGQ9YS5nZXRDb21tb25TdGF0cygpO251bGwhPWQmJmMud3JpdGVNZXNzYWdlKDEsZCxBayk7ZD1hLmdldFVuaXF1ZSgpOzAhPT1kJiZjLndyaXRlVWludDY0KDIsZCk7ZD1hLmdldFRvcFZhbHVlc0xpc3QoKTswPGQubGVuZ3RoJiZjLndyaXRlUmVwZWF0ZWRNZXNzYWdlKDMsZCxHayk7ZD1hLmdldEF2Z0xlbmd0aCgpOzAhPT1kJiZjLndyaXRlRmxvYXQoNCxkKTtkPWEuZ2V0UmFua0hpc3RvZ3JhbSgpO251bGwhPWQmJmMud3JpdGVNZXNzYWdlKDUsZCx2ayk7ZD1hLmdldFdlaWdodGVkU3RyaW5nU3RhdHMoKTtudWxsIT1kJiZjLndyaXRlTWVzc2FnZSg2LGQsSGspfU09eGoucHJvdG90eXBlO00udG9PYmplY3Q9ZnVuY3Rpb24oYSl7cmV0dXJuIENrKGEsdGhpcyl9OwpmdW5jdGlvbiBDayhhLGMpe3ZhciBkPXtkZXByZWNhdGVkRnJlcTpGZihjLDEsMCksdmFsdWU6RmYoYywyLCIiKSxmcmVxdWVuY3k6R2YoYywzKX07YSYmKGQuJGpzcGJNZXNzYWdlSW5zdGFuY2U9Yyk7cmV0dXJuIGR9ZnVuY3Rpb24gRWsoYSxjKXtmb3IoO2MubmV4dEZpZWxkKCkmJiFjLmlzRW5kR3JvdXAoKTspc3dpdGNoKGMuZ2V0RmllbGROdW1iZXIoKSl7Y2FzZSAxOnZhciBkPWMucmVhZFVpbnQ2NCgpO2Euc2V0RGVwcmVjYXRlZEZyZXEoZCk7YnJlYWs7Y2FzZSAyOmQ9Yy5yZWFkU3RyaW5nKCk7YS5zZXRWYWx1ZShkKTticmVhaztjYXNlIDM6ZD1jLnJlYWREb3VibGUoKTthLnNldEZyZXF1ZW5jeShkKTticmVhaztkZWZhdWx0OmMuc2tpcEZpZWxkKCl9cmV0dXJuIGF9TS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgYT1uZXcgZGU7R2sodGhpcyxhKTtyZXR1cm4gYS5nZXRSZXN1bHRCdWZmZXIoKX07CmZ1bmN0aW9uIEdrKGEsYyl7dmFyIGQ9YS5nZXREZXByZWNhdGVkRnJlcSgpOzAhPT1kJiZjLndyaXRlVWludDY0KDEsZCk7ZD1hLmdldFZhbHVlKCk7MDxkLmxlbmd0aCYmYy53cml0ZVN0cmluZygyLGQpO2Q9YS5nZXRGcmVxdWVuY3koKTswIT09ZCYmYy53cml0ZURvdWJsZSgzLGQpfU0uZ2V0RGVwcmVjYXRlZEZyZXE9ZnVuY3Rpb24oKXtyZXR1cm4gRmYodGhpcywxLDApfTtNLnNldERlcHJlY2F0ZWRGcmVxPWZ1bmN0aW9uKGEpe0pmKHRoaXMsMSxhKX07TS5nZXRWYWx1ZT1mdW5jdGlvbigpe3JldHVybiBGZih0aGlzLDIsIiIpfTtNLnNldFZhbHVlPWZ1bmN0aW9uKGEpe01mKHRoaXMsMixhKX07TS5nZXRGcmVxdWVuY3k9ZnVuY3Rpb24oKXtyZXR1cm4gR2YodGhpcywzKX07TS5zZXRGcmVxdWVuY3k9ZnVuY3Rpb24oYSl7TGYodGhpcywzLGEpfTtNPXZqLnByb3RvdHlwZTtNLmdldENvbW1vblN0YXRzPWZ1bmN0aW9uKCl7cmV0dXJuIEhnKHRoaXMsRWosMSl9OwpNLnNldENvbW1vblN0YXRzPWZ1bmN0aW9uKGEpe0tnKHRoaXMsMSxhKX07TS5jbGVhckNvbW1vblN0YXRzPWZ1bmN0aW9uKCl7dGhpcy5zZXRDb21tb25TdGF0cyh2b2lkIDApfTtNLmhhc0NvbW1vblN0YXRzPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXdmKHRoaXMsMSl9O00uZ2V0VW5pcXVlPWZ1bmN0aW9uKCl7cmV0dXJuIEZmKHRoaXMsMiwwKX07TS5zZXRVbmlxdWU9ZnVuY3Rpb24oYSl7SmYodGhpcywyLGEpfTtNLmdldFRvcFZhbHVlc0xpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gSWcodGhpcyx4aiwzKX07TS5zZXRUb3BWYWx1ZXNMaXN0PWZ1bmN0aW9uKGEpe01nKHRoaXMsMyxhKX07TS5hZGRUb3BWYWx1ZXM9ZnVuY3Rpb24oYSl7cmV0dXJuIE5nKHRoaXMsMyxhLHhqLHZvaWQgMCl9O00uY2xlYXJUb3BWYWx1ZXNMaXN0PWZ1bmN0aW9uKCl7dGhpcy5zZXRUb3BWYWx1ZXNMaXN0KFtdKX07TS5nZXRBdmdMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gR2YodGhpcyw0KX07Ck0uc2V0QXZnTGVuZ3RoPWZ1bmN0aW9uKGEpe0xmKHRoaXMsNCxhKX07TS5nZXRSYW5rSGlzdG9ncmFtPWZ1bmN0aW9uKCl7cmV0dXJuIEhnKHRoaXMsSWosNSl9O00uc2V0UmFua0hpc3RvZ3JhbT1mdW5jdGlvbihhKXtLZyh0aGlzLDUsYSl9O00uY2xlYXJSYW5rSGlzdG9ncmFtPWZ1bmN0aW9uKCl7dGhpcy5zZXRSYW5rSGlzdG9ncmFtKHZvaWQgMCl9O00uaGFzUmFua0hpc3RvZ3JhbT1mdW5jdGlvbigpe3JldHVybiBudWxsIT13Zih0aGlzLDUpfTtNLmdldFdlaWdodGVkU3RyaW5nU3RhdHM9ZnVuY3Rpb24oKXtyZXR1cm4gSGcodGhpcyxBaiw2KX07TS5zZXRXZWlnaHRlZFN0cmluZ1N0YXRzPWZ1bmN0aW9uKGEpe0tnKHRoaXMsNixhKX07TS5jbGVhcldlaWdodGVkU3RyaW5nU3RhdHM9ZnVuY3Rpb24oKXt0aGlzLnNldFdlaWdodGVkU3RyaW5nU3RhdHModm9pZCAwKX07TS5oYXNXZWlnaHRlZFN0cmluZ1N0YXRzPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXdmKHRoaXMsNil9Owp2YXIgemo9WzRdO009eWoucHJvdG90eXBlO00udG9PYmplY3Q9ZnVuY3Rpb24oYSl7cmV0dXJuIHhrKGEsdGhpcyl9O2Z1bmN0aW9uIHhrKGEsYyl7dmFyIGQ9e21lYW46R2YoYywxKSxzdGREZXY6R2YoYywyKSxtZWRpYW46R2YoYywzKSxoaXN0b2dyYW1zTGlzdDp2ZihjLmdldEhpc3RvZ3JhbXNMaXN0KCkscWssYSl9O2EmJihkLiRqc3BiTWVzc2FnZUluc3RhbmNlPWMpO3JldHVybiBkfQpmdW5jdGlvbiB6ayhhLGMpe2Zvcig7Yy5uZXh0RmllbGQoKSYmIWMuaXNFbmRHcm91cCgpOylzd2l0Y2goYy5nZXRGaWVsZE51bWJlcigpKXtjYXNlIDE6dmFyIGQ9Yy5yZWFkRG91YmxlKCk7YS5zZXRNZWFuKGQpO2JyZWFrO2Nhc2UgMjpkPWMucmVhZERvdWJsZSgpO2Euc2V0U3RkRGV2KGQpO2JyZWFrO2Nhc2UgMzpkPWMucmVhZERvdWJsZSgpO2Euc2V0TWVkaWFuKGQpO2JyZWFrO2Nhc2UgNDpkPW5ldyBGajtjLnJlYWRNZXNzYWdlKGQsc2spO2EuYWRkSGlzdG9ncmFtcyhkKTticmVhaztkZWZhdWx0OmMuc2tpcEZpZWxkKCl9cmV0dXJuIGF9TS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgYT1uZXcgZGU7QmsodGhpcyxhKTtyZXR1cm4gYS5nZXRSZXN1bHRCdWZmZXIoKX07CmZ1bmN0aW9uIEJrKGEsYyl7dmFyIGQ9YS5nZXRNZWFuKCk7MCE9PWQmJmMud3JpdGVEb3VibGUoMSxkKTtkPWEuZ2V0U3RkRGV2KCk7MCE9PWQmJmMud3JpdGVEb3VibGUoMixkKTtkPWEuZ2V0TWVkaWFuKCk7MCE9PWQmJmMud3JpdGVEb3VibGUoMyxkKTtkPWEuZ2V0SGlzdG9ncmFtc0xpc3QoKTswPGQubGVuZ3RoJiZjLndyaXRlUmVwZWF0ZWRNZXNzYWdlKDQsZCx1ayl9TS5nZXRNZWFuPWZ1bmN0aW9uKCl7cmV0dXJuIEdmKHRoaXMsMSl9O00uc2V0TWVhbj1mdW5jdGlvbihhKXtMZih0aGlzLDEsYSl9O00uZ2V0U3RkRGV2PWZ1bmN0aW9uKCl7cmV0dXJuIEdmKHRoaXMsMil9O00uc2V0U3RkRGV2PWZ1bmN0aW9uKGEpe0xmKHRoaXMsMixhKX07TS5nZXRNZWRpYW49ZnVuY3Rpb24oKXtyZXR1cm4gR2YodGhpcywzKX07TS5zZXRNZWRpYW49ZnVuY3Rpb24oYSl7TGYodGhpcywzLGEpfTtNLmdldEhpc3RvZ3JhbXNMaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIElnKHRoaXMsRmosNCl9OwpNLnNldEhpc3RvZ3JhbXNMaXN0PWZ1bmN0aW9uKGEpe01nKHRoaXMsNCxhKX07TS5hZGRIaXN0b2dyYW1zPWZ1bmN0aW9uKGEpe3JldHVybiBOZyh0aGlzLDQsYSxGaix2b2lkIDApfTtNLmNsZWFySGlzdG9ncmFtc0xpc3Q9ZnVuY3Rpb24oKXt0aGlzLnNldEhpc3RvZ3JhbXNMaXN0KFtdKX07dmFyIEJqPVsxXTtNPUFqLnByb3RvdHlwZTtNLnRvT2JqZWN0PWZ1bmN0aW9uKGEpe3JldHVybiBEayhhLHRoaXMpfTtmdW5jdGlvbiBEayhhLGMpe3ZhciBkLGY9e3RvcFZhbHVlc0xpc3Q6dmYoYy5nZXRUb3BWYWx1ZXNMaXN0KCksQ2ssYSkscmFua0hpc3RvZ3JhbTooZD1jLmdldFJhbmtIaXN0b2dyYW0oKSkmJnJrKGEsZCl9O2EmJihmLiRqc3BiTWVzc2FnZUluc3RhbmNlPWMpO3JldHVybiBmfQpmdW5jdGlvbiBGayhhLGMpe2Zvcig7Yy5uZXh0RmllbGQoKSYmIWMuaXNFbmRHcm91cCgpOylzd2l0Y2goYy5nZXRGaWVsZE51bWJlcigpKXtjYXNlIDE6dmFyIGQ9bmV3IHhqO2MucmVhZE1lc3NhZ2UoZCxFayk7YS5hZGRUb3BWYWx1ZXMoZCk7YnJlYWs7Y2FzZSAyOmQ9bmV3IElqO2MucmVhZE1lc3NhZ2UoZCx0ayk7YS5zZXRSYW5rSGlzdG9ncmFtKGQpO2JyZWFrO2RlZmF1bHQ6Yy5za2lwRmllbGQoKX1yZXR1cm4gYX1NLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciBhPW5ldyBkZTtIayh0aGlzLGEpO3JldHVybiBhLmdldFJlc3VsdEJ1ZmZlcigpfTtmdW5jdGlvbiBIayhhLGMpe3ZhciBkPWEuZ2V0VG9wVmFsdWVzTGlzdCgpOzA8ZC5sZW5ndGgmJmMud3JpdGVSZXBlYXRlZE1lc3NhZ2UoMSxkLEdrKTtkPWEuZ2V0UmFua0hpc3RvZ3JhbSgpO251bGwhPWQmJmMud3JpdGVNZXNzYWdlKDIsZCx2ayl9Ck0uZ2V0VG9wVmFsdWVzTGlzdD1mdW5jdGlvbigpe3JldHVybiBJZyh0aGlzLHhqLDEpfTtNLnNldFRvcFZhbHVlc0xpc3Q9ZnVuY3Rpb24oYSl7TWcodGhpcywxLGEpfTtNLmFkZFRvcFZhbHVlcz1mdW5jdGlvbihhKXtyZXR1cm4gTmcodGhpcywxLGEseGosdm9pZCAwKX07TS5jbGVhclRvcFZhbHVlc0xpc3Q9ZnVuY3Rpb24oKXt0aGlzLnNldFRvcFZhbHVlc0xpc3QoW10pfTtNLmdldFJhbmtIaXN0b2dyYW09ZnVuY3Rpb24oKXtyZXR1cm4gSGcodGhpcyxJaiwyKX07TS5zZXRSYW5rSGlzdG9ncmFtPWZ1bmN0aW9uKGEpe0tnKHRoaXMsMixhKX07TS5jbGVhclJhbmtIaXN0b2dyYW09ZnVuY3Rpb24oKXt0aGlzLnNldFJhbmtIaXN0b2dyYW0odm9pZCAwKX07TS5oYXNSYW5rSGlzdG9ncmFtPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXdmKHRoaXMsMil9O009Q2oucHJvdG90eXBlO00udG9PYmplY3Q9ZnVuY3Rpb24oYSl7cmV0dXJuIGFrKGEsdGhpcyl9OwpmdW5jdGlvbiBhayhhLGMpe3ZhciBkLGY9e2NvbW1vblN0YXRzOihkPWMuZ2V0Q29tbW9uU3RhdHMoKSkmJndrKGEsZCksdW5pcXVlOkZmKGMsMiwwKSxhdmdOdW1CeXRlczpHZihjLDMpLG1pbk51bUJ5dGVzOkdmKGMsNCksbWF4TnVtQnl0ZXM6R2YoYyw1KX07YSYmKGYuJGpzcGJNZXNzYWdlSW5zdGFuY2U9Yyk7cmV0dXJuIGZ9CmZ1bmN0aW9uIGZrKGEsYyl7Zm9yKDtjLm5leHRGaWVsZCgpJiYhYy5pc0VuZEdyb3VwKCk7KXN3aXRjaChjLmdldEZpZWxkTnVtYmVyKCkpe2Nhc2UgMTp2YXIgZD1uZXcgRWo7Yy5yZWFkTWVzc2FnZShkLHlrKTthLnNldENvbW1vblN0YXRzKGQpO2JyZWFrO2Nhc2UgMjpkPWMucmVhZFVpbnQ2NCgpO2Euc2V0VW5pcXVlKGQpO2JyZWFrO2Nhc2UgMzpkPWMucmVhZEZsb2F0KCk7YS5zZXRBdmdOdW1CeXRlcyhkKTticmVhaztjYXNlIDQ6ZD1jLnJlYWRGbG9hdCgpO2Euc2V0TWluTnVtQnl0ZXMoZCk7YnJlYWs7Y2FzZSA1OmQ9Yy5yZWFkRmxvYXQoKTthLnNldE1heE51bUJ5dGVzKGQpO2JyZWFrO2RlZmF1bHQ6Yy5za2lwRmllbGQoKX1yZXR1cm4gYX1NLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciBhPW5ldyBkZTtrayh0aGlzLGEpO3JldHVybiBhLmdldFJlc3VsdEJ1ZmZlcigpfTsKZnVuY3Rpb24ga2soYSxjKXt2YXIgZD1hLmdldENvbW1vblN0YXRzKCk7bnVsbCE9ZCYmYy53cml0ZU1lc3NhZ2UoMSxkLEFrKTtkPWEuZ2V0VW5pcXVlKCk7MCE9PWQmJmMud3JpdGVVaW50NjQoMixkKTtkPWEuZ2V0QXZnTnVtQnl0ZXMoKTswIT09ZCYmYy53cml0ZUZsb2F0KDMsZCk7ZD1hLmdldE1pbk51bUJ5dGVzKCk7MCE9PWQmJmMud3JpdGVGbG9hdCg0LGQpO2Q9YS5nZXRNYXhOdW1CeXRlcygpOzAhPT1kJiZjLndyaXRlRmxvYXQoNSxkKX1NLmdldENvbW1vblN0YXRzPWZ1bmN0aW9uKCl7cmV0dXJuIEhnKHRoaXMsRWosMSl9O00uc2V0Q29tbW9uU3RhdHM9ZnVuY3Rpb24oYSl7S2codGhpcywxLGEpfTtNLmNsZWFyQ29tbW9uU3RhdHM9ZnVuY3Rpb24oKXt0aGlzLnNldENvbW1vblN0YXRzKHZvaWQgMCl9O00uaGFzQ29tbW9uU3RhdHM9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9d2YodGhpcywxKX07TS5nZXRVbmlxdWU9ZnVuY3Rpb24oKXtyZXR1cm4gRmYodGhpcywyLDApfTsKTS5zZXRVbmlxdWU9ZnVuY3Rpb24oYSl7SmYodGhpcywyLGEpfTtNLmdldEF2Z051bUJ5dGVzPWZ1bmN0aW9uKCl7cmV0dXJuIEdmKHRoaXMsMyl9O00uc2V0QXZnTnVtQnl0ZXM9ZnVuY3Rpb24oYSl7TGYodGhpcywzLGEpfTtNLmdldE1pbk51bUJ5dGVzPWZ1bmN0aW9uKCl7cmV0dXJuIEdmKHRoaXMsNCl9O00uc2V0TWluTnVtQnl0ZXM9ZnVuY3Rpb24oYSl7TGYodGhpcyw0LGEpfTtNLmdldE1heE51bUJ5dGVzPWZ1bmN0aW9uKCl7cmV0dXJuIEdmKHRoaXMsNSl9O00uc2V0TWF4TnVtQnl0ZXM9ZnVuY3Rpb24oYSl7TGYodGhpcyw1LGEpfTtNPURqLnByb3RvdHlwZTtNLnRvT2JqZWN0PWZ1bmN0aW9uKGEpe3JldHVybiBiayhhLHRoaXMpfTtmdW5jdGlvbiBiayhhLGMpe3ZhciBkLGY9e2NvbW1vblN0YXRzOihkPWMuZ2V0Q29tbW9uU3RhdHMoKSkmJndrKGEsZCl9O2EmJihmLiRqc3BiTWVzc2FnZUluc3RhbmNlPWMpO3JldHVybiBmfQpmdW5jdGlvbiBnayhhLGMpe2Zvcig7Yy5uZXh0RmllbGQoKSYmIWMuaXNFbmRHcm91cCgpOylzd2l0Y2goYy5nZXRGaWVsZE51bWJlcigpKXtjYXNlIDE6dmFyIGQ9bmV3IEVqO2MucmVhZE1lc3NhZ2UoZCx5ayk7YS5zZXRDb21tb25TdGF0cyhkKTticmVhaztkZWZhdWx0OmMuc2tpcEZpZWxkKCl9cmV0dXJuIGF9TS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgYT1uZXcgZGU7bGsodGhpcyxhKTtyZXR1cm4gYS5nZXRSZXN1bHRCdWZmZXIoKX07ZnVuY3Rpb24gbGsoYSxjKXthPWEuZ2V0Q29tbW9uU3RhdHMoKTtudWxsIT1hJiZjLndyaXRlTWVzc2FnZSgxLGEsQWspfU0uZ2V0Q29tbW9uU3RhdHM9ZnVuY3Rpb24oKXtyZXR1cm4gSGcodGhpcyxFaiwxKX07TS5zZXRDb21tb25TdGF0cz1mdW5jdGlvbihhKXtLZyh0aGlzLDEsYSl9O00uY2xlYXJDb21tb25TdGF0cz1mdW5jdGlvbigpe3RoaXMuc2V0Q29tbW9uU3RhdHModm9pZCAwKX07Ck0uaGFzQ29tbW9uU3RhdHM9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9d2YodGhpcywxKX07TT1Fai5wcm90b3R5cGU7TS50b09iamVjdD1mdW5jdGlvbihhKXtyZXR1cm4gd2soYSx0aGlzKX07CmZ1bmN0aW9uIHdrKGEsYyl7dmFyIGQsZj17bnVtTm9uTWlzc2luZzpGZihjLDEsMCksbnVtTWlzc2luZzpGZihjLDIsMCksbWluTnVtVmFsdWVzOkZmKGMsMywwKSxtYXhOdW1WYWx1ZXM6RmYoYyw0LDApLGF2Z051bVZhbHVlczpHZihjLDUpLHRvdE51bVZhbHVlczpGZihjLDgsMCksbnVtVmFsdWVzSGlzdG9ncmFtOihkPWMuZ2V0TnVtVmFsdWVzSGlzdG9ncmFtKCkpJiZxayhhLGQpLHdlaWdodGVkQ29tbW9uU3RhdHM6KGQ9Yy5nZXRXZWlnaHRlZENvbW1vblN0YXRzKCkpJiZuayhhLGQpLGZlYXR1cmVMaXN0TGVuZ3RoSGlzdG9ncmFtOihkPWMuZ2V0RmVhdHVyZUxpc3RMZW5ndGhIaXN0b2dyYW0oKSkmJnFrKGEsZCl9O2EmJihmLiRqc3BiTWVzc2FnZUluc3RhbmNlPWMpO3JldHVybiBmfQpmdW5jdGlvbiB5ayhhLGMpe2Zvcig7Yy5uZXh0RmllbGQoKSYmIWMuaXNFbmRHcm91cCgpOylzd2l0Y2goYy5nZXRGaWVsZE51bWJlcigpKXtjYXNlIDE6dmFyIGQ9Yy5yZWFkVWludDY0KCk7YS5zZXROdW1Ob25NaXNzaW5nKGQpO2JyZWFrO2Nhc2UgMjpkPWMucmVhZFVpbnQ2NCgpO2Euc2V0TnVtTWlzc2luZyhkKTticmVhaztjYXNlIDM6ZD1jLnJlYWRVaW50NjQoKTthLnNldE1pbk51bVZhbHVlcyhkKTticmVhaztjYXNlIDQ6ZD1jLnJlYWRVaW50NjQoKTthLnNldE1heE51bVZhbHVlcyhkKTticmVhaztjYXNlIDU6ZD1jLnJlYWRGbG9hdCgpO2Euc2V0QXZnTnVtVmFsdWVzKGQpO2JyZWFrO2Nhc2UgODpkPWMucmVhZFVpbnQ2NCgpO2Euc2V0VG90TnVtVmFsdWVzKGQpO2JyZWFrO2Nhc2UgNjpkPW5ldyBGajtjLnJlYWRNZXNzYWdlKGQsc2spO2Euc2V0TnVtVmFsdWVzSGlzdG9ncmFtKGQpO2JyZWFrO2Nhc2UgNzpkPW5ldyBxajtjLnJlYWRNZXNzYWdlKGQsb2spO2Euc2V0V2VpZ2h0ZWRDb21tb25TdGF0cyhkKTsKYnJlYWs7Y2FzZSA5OmQ9bmV3IEZqO2MucmVhZE1lc3NhZ2UoZCxzayk7YS5zZXRGZWF0dXJlTGlzdExlbmd0aEhpc3RvZ3JhbShkKTticmVhaztkZWZhdWx0OmMuc2tpcEZpZWxkKCl9cmV0dXJuIGF9TS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgYT1uZXcgZGU7QWsodGhpcyxhKTtyZXR1cm4gYS5nZXRSZXN1bHRCdWZmZXIoKX07CmZ1bmN0aW9uIEFrKGEsYyl7dmFyIGQ9YS5nZXROdW1Ob25NaXNzaW5nKCk7MCE9PWQmJmMud3JpdGVVaW50NjQoMSxkKTtkPWEuZ2V0TnVtTWlzc2luZygpOzAhPT1kJiZjLndyaXRlVWludDY0KDIsZCk7ZD1hLmdldE1pbk51bVZhbHVlcygpOzAhPT1kJiZjLndyaXRlVWludDY0KDMsZCk7ZD1hLmdldE1heE51bVZhbHVlcygpOzAhPT1kJiZjLndyaXRlVWludDY0KDQsZCk7ZD1hLmdldEF2Z051bVZhbHVlcygpOzAhPT1kJiZjLndyaXRlRmxvYXQoNSxkKTtkPWEuZ2V0VG90TnVtVmFsdWVzKCk7MCE9PWQmJmMud3JpdGVVaW50NjQoOCxkKTtkPWEuZ2V0TnVtVmFsdWVzSGlzdG9ncmFtKCk7bnVsbCE9ZCYmYy53cml0ZU1lc3NhZ2UoNixkLHVrKTtkPWEuZ2V0V2VpZ2h0ZWRDb21tb25TdGF0cygpO251bGwhPWQmJmMud3JpdGVNZXNzYWdlKDcsZCxwayk7ZD1hLmdldEZlYXR1cmVMaXN0TGVuZ3RoSGlzdG9ncmFtKCk7bnVsbCE9ZCYmYy53cml0ZU1lc3NhZ2UoOSxkLHVrKX0KTS5nZXROdW1Ob25NaXNzaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIEZmKHRoaXMsMSwwKX07TS5zZXROdW1Ob25NaXNzaW5nPWZ1bmN0aW9uKGEpe0pmKHRoaXMsMSxhKX07TS5nZXROdW1NaXNzaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIEZmKHRoaXMsMiwwKX07TS5zZXROdW1NaXNzaW5nPWZ1bmN0aW9uKGEpe0pmKHRoaXMsMixhKX07TS5nZXRNaW5OdW1WYWx1ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gRmYodGhpcywzLDApfTtNLnNldE1pbk51bVZhbHVlcz1mdW5jdGlvbihhKXtKZih0aGlzLDMsYSl9O00uZ2V0TWF4TnVtVmFsdWVzPWZ1bmN0aW9uKCl7cmV0dXJuIEZmKHRoaXMsNCwwKX07TS5zZXRNYXhOdW1WYWx1ZXM9ZnVuY3Rpb24oYSl7SmYodGhpcyw0LGEpfTtNLmdldEF2Z051bVZhbHVlcz1mdW5jdGlvbigpe3JldHVybiBHZih0aGlzLDUpfTtNLnNldEF2Z051bVZhbHVlcz1mdW5jdGlvbihhKXtMZih0aGlzLDUsYSl9OwpNLmdldFRvdE51bVZhbHVlcz1mdW5jdGlvbigpe3JldHVybiBGZih0aGlzLDgsMCl9O00uc2V0VG90TnVtVmFsdWVzPWZ1bmN0aW9uKGEpe0pmKHRoaXMsOCxhKX07TS5nZXROdW1WYWx1ZXNIaXN0b2dyYW09ZnVuY3Rpb24oKXtyZXR1cm4gSGcodGhpcyxGaiw2KX07TS5zZXROdW1WYWx1ZXNIaXN0b2dyYW09ZnVuY3Rpb24oYSl7S2codGhpcyw2LGEpfTtNLmNsZWFyTnVtVmFsdWVzSGlzdG9ncmFtPWZ1bmN0aW9uKCl7dGhpcy5zZXROdW1WYWx1ZXNIaXN0b2dyYW0odm9pZCAwKX07TS5oYXNOdW1WYWx1ZXNIaXN0b2dyYW09ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9d2YodGhpcyw2KX07TS5nZXRXZWlnaHRlZENvbW1vblN0YXRzPWZ1bmN0aW9uKCl7cmV0dXJuIEhnKHRoaXMscWosNyl9O00uc2V0V2VpZ2h0ZWRDb21tb25TdGF0cz1mdW5jdGlvbihhKXtLZyh0aGlzLDcsYSl9O00uY2xlYXJXZWlnaHRlZENvbW1vblN0YXRzPWZ1bmN0aW9uKCl7dGhpcy5zZXRXZWlnaHRlZENvbW1vblN0YXRzKHZvaWQgMCl9OwpNLmhhc1dlaWdodGVkQ29tbW9uU3RhdHM9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9d2YodGhpcyw3KX07TS5nZXRGZWF0dXJlTGlzdExlbmd0aEhpc3RvZ3JhbT1mdW5jdGlvbigpe3JldHVybiBIZyh0aGlzLEZqLDkpfTtNLnNldEZlYXR1cmVMaXN0TGVuZ3RoSGlzdG9ncmFtPWZ1bmN0aW9uKGEpe0tnKHRoaXMsOSxhKX07TS5jbGVhckZlYXR1cmVMaXN0TGVuZ3RoSGlzdG9ncmFtPWZ1bmN0aW9uKCl7dGhpcy5zZXRGZWF0dXJlTGlzdExlbmd0aEhpc3RvZ3JhbSh2b2lkIDApfTtNLmhhc0ZlYXR1cmVMaXN0TGVuZ3RoSGlzdG9ncmFtPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXdmKHRoaXMsOSl9O3ZhciBHaj1bM107RmoucHJvdG90eXBlLnRvT2JqZWN0PWZ1bmN0aW9uKGEpe3JldHVybiBxayhhLHRoaXMpfTsKZnVuY3Rpb24gcWsoYSxjKXt2YXIgZD17bnVtTmFuOkZmKGMsMSwwKSxudW1VbmRlZmluZWQ6RmYoYywyLDApLGJ1Y2tldHNMaXN0OnZmKGMuZ2V0QnVja2V0c0xpc3QoKSxJayxhKSx0eXBlOkZmKGMsNCwwKSxuYW1lOkZmKGMsNSwiIil9O2EmJihkLiRqc3BiTWVzc2FnZUluc3RhbmNlPWMpO3JldHVybiBkfQpmdW5jdGlvbiBzayhhLGMpe2Zvcig7Yy5uZXh0RmllbGQoKSYmIWMuaXNFbmRHcm91cCgpOylzd2l0Y2goYy5nZXRGaWVsZE51bWJlcigpKXtjYXNlIDE6dmFyIGQ9Yy5yZWFkVWludDY0KCk7YS5zZXROdW1OYW4oZCk7YnJlYWs7Y2FzZSAyOmQ9Yy5yZWFkVWludDY0KCk7YS5zZXROdW1VbmRlZmluZWQoZCk7YnJlYWs7Y2FzZSAzOmQ9bmV3IEhqO2MucmVhZE1lc3NhZ2UoZCxKayk7YS5hZGRCdWNrZXRzKGQpO2JyZWFrO2Nhc2UgNDpkPWMucmVhZEVudW0oKTthLnNldFR5cGUoZCk7YnJlYWs7Y2FzZSA1OmQ9Yy5yZWFkU3RyaW5nKCk7YS5zZXROYW1lKGQpO2JyZWFrO2RlZmF1bHQ6Yy5za2lwRmllbGQoKX1yZXR1cm4gYX1Gai5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIGE9bmV3IGRlO3VrKHRoaXMsYSk7cmV0dXJuIGEuZ2V0UmVzdWx0QnVmZmVyKCl9OwpmdW5jdGlvbiB1ayhhLGMpe3ZhciBkPWEuZ2V0TnVtTmFuKCk7MCE9PWQmJmMud3JpdGVVaW50NjQoMSxkKTtkPWEuZ2V0TnVtVW5kZWZpbmVkKCk7MCE9PWQmJmMud3JpdGVVaW50NjQoMixkKTtkPWEuZ2V0QnVja2V0c0xpc3QoKTswPGQubGVuZ3RoJiZjLndyaXRlUmVwZWF0ZWRNZXNzYWdlKDMsZCxLayk7ZD1hLmdldFR5cGUoKTswIT09ZCYmYy53cml0ZUVudW0oNCxkKTtkPWEuZ2V0TmFtZSgpOzA8ZC5sZW5ndGgmJmMud3JpdGVTdHJpbmcoNSxkKX1NPUhqLnByb3RvdHlwZTtNLnRvT2JqZWN0PWZ1bmN0aW9uKGEpe3JldHVybiBJayhhLHRoaXMpfTtmdW5jdGlvbiBJayhhLGMpe3ZhciBkPXtsb3dWYWx1ZTpHZihjLDEpLGhpZ2hWYWx1ZTpHZihjLDIpLGRlcHJlY2F0ZWRDb3VudDpGZihjLDMsMCksc2FtcGxlQ291bnQ6R2YoYyw0KX07YSYmKGQuJGpzcGJNZXNzYWdlSW5zdGFuY2U9Yyk7cmV0dXJuIGR9CmZ1bmN0aW9uIEprKGEsYyl7Zm9yKDtjLm5leHRGaWVsZCgpJiYhYy5pc0VuZEdyb3VwKCk7KXN3aXRjaChjLmdldEZpZWxkTnVtYmVyKCkpe2Nhc2UgMTp2YXIgZD1jLnJlYWREb3VibGUoKTthLnNldExvd1ZhbHVlKGQpO2JyZWFrO2Nhc2UgMjpkPWMucmVhZERvdWJsZSgpO2Euc2V0SGlnaFZhbHVlKGQpO2JyZWFrO2Nhc2UgMzpkPWMucmVhZFVpbnQ2NCgpO2Euc2V0RGVwcmVjYXRlZENvdW50KGQpO2JyZWFrO2Nhc2UgNDpkPWMucmVhZERvdWJsZSgpO2Euc2V0U2FtcGxlQ291bnQoZCk7YnJlYWs7ZGVmYXVsdDpjLnNraXBGaWVsZCgpfXJldHVybiBhfU0uc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIGE9bmV3IGRlO0trKHRoaXMsYSk7cmV0dXJuIGEuZ2V0UmVzdWx0QnVmZmVyKCl9OwpmdW5jdGlvbiBLayhhLGMpe3ZhciBkPWEuZ2V0TG93VmFsdWUoKTswIT09ZCYmYy53cml0ZURvdWJsZSgxLGQpO2Q9YS5nZXRIaWdoVmFsdWUoKTswIT09ZCYmYy53cml0ZURvdWJsZSgyLGQpO2Q9YS5nZXREZXByZWNhdGVkQ291bnQoKTswIT09ZCYmYy53cml0ZVVpbnQ2NCgzLGQpO2Q9YS5nZXRTYW1wbGVDb3VudCgpOzAhPT1kJiZjLndyaXRlRG91YmxlKDQsZCl9TS5nZXRMb3dWYWx1ZT1mdW5jdGlvbigpe3JldHVybiBHZih0aGlzLDEpfTtNLnNldExvd1ZhbHVlPWZ1bmN0aW9uKGEpe0xmKHRoaXMsMSxhKX07TS5nZXRIaWdoVmFsdWU9ZnVuY3Rpb24oKXtyZXR1cm4gR2YodGhpcywyKX07TS5zZXRIaWdoVmFsdWU9ZnVuY3Rpb24oYSl7TGYodGhpcywyLGEpfTtNLmdldERlcHJlY2F0ZWRDb3VudD1mdW5jdGlvbigpe3JldHVybiBGZih0aGlzLDMsMCl9O00uc2V0RGVwcmVjYXRlZENvdW50PWZ1bmN0aW9uKGEpe0pmKHRoaXMsMyxhKX07Ck0uZ2V0U2FtcGxlQ291bnQ9ZnVuY3Rpb24oKXtyZXR1cm4gR2YodGhpcyw0KX07TS5zZXRTYW1wbGVDb3VudD1mdW5jdGlvbihhKXtMZih0aGlzLDQsYSl9O009RmoucHJvdG90eXBlO00uZ2V0TnVtTmFuPWZ1bmN0aW9uKCl7cmV0dXJuIEZmKHRoaXMsMSwwKX07TS5zZXROdW1OYW49ZnVuY3Rpb24oYSl7SmYodGhpcywxLGEpfTtNLmdldE51bVVuZGVmaW5lZD1mdW5jdGlvbigpe3JldHVybiBGZih0aGlzLDIsMCl9O00uc2V0TnVtVW5kZWZpbmVkPWZ1bmN0aW9uKGEpe0pmKHRoaXMsMixhKX07TS5nZXRCdWNrZXRzTGlzdD1mdW5jdGlvbigpe3JldHVybiBJZyh0aGlzLEhqLDMpfTtNLnNldEJ1Y2tldHNMaXN0PWZ1bmN0aW9uKGEpe01nKHRoaXMsMyxhKX07TS5hZGRCdWNrZXRzPWZ1bmN0aW9uKGEpe3JldHVybiBOZyh0aGlzLDMsYSxIaix2b2lkIDApfTtNLmNsZWFyQnVja2V0c0xpc3Q9ZnVuY3Rpb24oKXt0aGlzLnNldEJ1Y2tldHNMaXN0KFtdKX07Ck0uZ2V0VHlwZT1mdW5jdGlvbigpe3JldHVybiBGZih0aGlzLDQsMCl9O00uc2V0VHlwZT1mdW5jdGlvbihhKXtOZih0aGlzLDQsYSl9O00uZ2V0TmFtZT1mdW5jdGlvbigpe3JldHVybiBGZih0aGlzLDUsIiIpfTtNLnNldE5hbWU9ZnVuY3Rpb24oYSl7TWYodGhpcyw1LGEpfTt2YXIgSmo9WzFdO0lqLnByb3RvdHlwZS50b09iamVjdD1mdW5jdGlvbihhKXtyZXR1cm4gcmsoYSx0aGlzKX07ZnVuY3Rpb24gcmsoYSxjKXt2YXIgZD17YnVja2V0c0xpc3Q6dmYoYy5nZXRCdWNrZXRzTGlzdCgpLExrLGEpLG5hbWU6RmYoYywyLCIiKX07YSYmKGQuJGpzcGJNZXNzYWdlSW5zdGFuY2U9Yyk7cmV0dXJuIGR9CmZ1bmN0aW9uIHRrKGEsYyl7Zm9yKDtjLm5leHRGaWVsZCgpJiYhYy5pc0VuZEdyb3VwKCk7KXN3aXRjaChjLmdldEZpZWxkTnVtYmVyKCkpe2Nhc2UgMTp2YXIgZD1uZXcgS2o7Yy5yZWFkTWVzc2FnZShkLE1rKTthLmFkZEJ1Y2tldHMoZCk7YnJlYWs7Y2FzZSAyOmQ9Yy5yZWFkU3RyaW5nKCk7YS5zZXROYW1lKGQpO2JyZWFrO2RlZmF1bHQ6Yy5za2lwRmllbGQoKX1yZXR1cm4gYX1Jai5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIGE9bmV3IGRlO3ZrKHRoaXMsYSk7cmV0dXJuIGEuZ2V0UmVzdWx0QnVmZmVyKCl9O2Z1bmN0aW9uIHZrKGEsYyl7dmFyIGQ9YS5nZXRCdWNrZXRzTGlzdCgpOzA8ZC5sZW5ndGgmJmMud3JpdGVSZXBlYXRlZE1lc3NhZ2UoMSxkLE5rKTtkPWEuZ2V0TmFtZSgpOzA8ZC5sZW5ndGgmJmMud3JpdGVTdHJpbmcoMixkKX1NPUtqLnByb3RvdHlwZTtNLnRvT2JqZWN0PWZ1bmN0aW9uKGEpe3JldHVybiBMayhhLHRoaXMpfTsKZnVuY3Rpb24gTGsoYSxjKXt2YXIgZD17bG93UmFuazpGZihjLDEsMCksaGlnaFJhbms6RmYoYywyLDApLGRlcHJlY2F0ZWRDb3VudDpGZihjLDMsMCksbGFiZWw6RmYoYyw0LCIiKSxzYW1wbGVDb3VudDpHZihjLDUpfTthJiYoZC4kanNwYk1lc3NhZ2VJbnN0YW5jZT1jKTtyZXR1cm4gZH0KZnVuY3Rpb24gTWsoYSxjKXtmb3IoO2MubmV4dEZpZWxkKCkmJiFjLmlzRW5kR3JvdXAoKTspc3dpdGNoKGMuZ2V0RmllbGROdW1iZXIoKSl7Y2FzZSAxOnZhciBkPWMucmVhZFVpbnQ2NCgpO2Euc2V0TG93UmFuayhkKTticmVhaztjYXNlIDI6ZD1jLnJlYWRVaW50NjQoKTthLnNldEhpZ2hSYW5rKGQpO2JyZWFrO2Nhc2UgMzpkPWMucmVhZFVpbnQ2NCgpO2Euc2V0RGVwcmVjYXRlZENvdW50KGQpO2JyZWFrO2Nhc2UgNDpkPWMucmVhZFN0cmluZygpO2Euc2V0TGFiZWwoZCk7YnJlYWs7Y2FzZSA1OmQ9Yy5yZWFkRG91YmxlKCk7YS5zZXRTYW1wbGVDb3VudChkKTticmVhaztkZWZhdWx0OmMuc2tpcEZpZWxkKCl9cmV0dXJuIGF9TS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgYT1uZXcgZGU7TmsodGhpcyxhKTtyZXR1cm4gYS5nZXRSZXN1bHRCdWZmZXIoKX07CmZ1bmN0aW9uIE5rKGEsYyl7dmFyIGQ9YS5nZXRMb3dSYW5rKCk7MCE9PWQmJmMud3JpdGVVaW50NjQoMSxkKTtkPWEuZ2V0SGlnaFJhbmsoKTswIT09ZCYmYy53cml0ZVVpbnQ2NCgyLGQpO2Q9YS5nZXREZXByZWNhdGVkQ291bnQoKTswIT09ZCYmYy53cml0ZVVpbnQ2NCgzLGQpO2Q9YS5nZXRMYWJlbCgpOzA8ZC5sZW5ndGgmJmMud3JpdGVTdHJpbmcoNCxkKTtkPWEuZ2V0U2FtcGxlQ291bnQoKTswIT09ZCYmYy53cml0ZURvdWJsZSg1LGQpfU0uZ2V0TG93UmFuaz1mdW5jdGlvbigpe3JldHVybiBGZih0aGlzLDEsMCl9O00uc2V0TG93UmFuaz1mdW5jdGlvbihhKXtKZih0aGlzLDEsYSl9O00uZ2V0SGlnaFJhbms9ZnVuY3Rpb24oKXtyZXR1cm4gRmYodGhpcywyLDApfTtNLnNldEhpZ2hSYW5rPWZ1bmN0aW9uKGEpe0pmKHRoaXMsMixhKX07TS5nZXREZXByZWNhdGVkQ291bnQ9ZnVuY3Rpb24oKXtyZXR1cm4gRmYodGhpcywzLDApfTsKTS5zZXREZXByZWNhdGVkQ291bnQ9ZnVuY3Rpb24oYSl7SmYodGhpcywzLGEpfTtNLmdldExhYmVsPWZ1bmN0aW9uKCl7cmV0dXJuIEZmKHRoaXMsNCwiIil9O00uc2V0TGFiZWw9ZnVuY3Rpb24oYSl7TWYodGhpcyw0LGEpfTtNLmdldFNhbXBsZUNvdW50PWZ1bmN0aW9uKCl7cmV0dXJuIEdmKHRoaXMsNSl9O00uc2V0U2FtcGxlQ291bnQ9ZnVuY3Rpb24oYSl7TGYodGhpcyw1LGEpfTtNPUlqLnByb3RvdHlwZTtNLmdldEJ1Y2tldHNMaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIElnKHRoaXMsS2osMSl9O00uc2V0QnVja2V0c0xpc3Q9ZnVuY3Rpb24oYSl7TWcodGhpcywxLGEpfTtNLmFkZEJ1Y2tldHM9ZnVuY3Rpb24oYSl7cmV0dXJuIE5nKHRoaXMsMSxhLEtqLHZvaWQgMCl9O00uY2xlYXJCdWNrZXRzTGlzdD1mdW5jdGlvbigpe3RoaXMuc2V0QnVja2V0c0xpc3QoW10pfTtNLmdldE5hbWU9ZnVuY3Rpb24oKXtyZXR1cm4gRmYodGhpcywyLCIiKX07Ck0uc2V0TmFtZT1mdW5jdGlvbihhKXtNZih0aGlzLDIsYSl9OwovL35+V0VCUEFUSH5+ZXh0ZXJuYWwvY29tX2dvb2dsZV9qYXZhc2NyaXB0X2Nsb3N1cmVfbGlicmFyeS9jbG9zdXJlL2dvb2cvZGVwcy5qcwovL35+V0VCUEFUSH5+L2FuYWx5dGljcy5odG1sLmpzCndpbmRvdy5nYT1mdW5jdGlvbigpe307Cjwvc2NyaXB0PgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKPHN0eWxlPgpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvJyksIGxvY2FsKCdSb2JvdG8tUmVndWxhcicpLCB1cmwoL2ZvbnQtcm9ib3RvL3VZRUNNS29IY085eDF3ZG1ieUhJbTMtX2tmNkJ5WU82Q0xZZEI0SFFFLVkud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzA0MDAtMDQ1RiwgVSswNDkwLTA0OTEsIFUrMDRCMC0wNEIxLCBVKzIxMTY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNDAwOwogIHNyYzogbG9jYWwoJ1JvYm90bycpLCBsb2NhbCgnUm9ib3RvLVJlZ3VsYXInKSwgdXJsKC9mb250LXJvYm90by9zVGRhQTZqMFBzYjkyMFZqdi1tcnpILV9rZjZCeVlPNkNMWWRCNEhRRS1ZLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDYwLTA1MkYsIFUrMjBCNCwgVSsyREUwLTJERkYsIFUrQTY0MC1BNjlGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8nKSwgbG9jYWwoJ1JvYm90by1SZWd1bGFyJyksIHVybCgvZm9udC1yb2JvdG8vX1ZZRngtczgyNGtYcV9VbDJCSHFZSC1fa2Y2QnlZTzZDTFlkQjRIUUUtWS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDM3MC0wM0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8nKSwgbG9jYWwoJ1JvYm90by1SZWd1bGFyJyksIHVybCgvZm9udC1yb2JvdG8vdG5qNFNCNkROYmRhUW5zTThDRnFCWC1fa2Y2QnlZTzZDTFlkQjRIUUUtWS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMUYwMC0xRkZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8nKSwgbG9jYWwoJ1JvYm90by1SZWd1bGFyJyksIHVybCgvZm9udC1yb2JvdG8vb01NZ2ZaTVF0aE9yeVFvOW4yMmRjdXZ2RGluMXBLOGFLdGVMcGVaNWMwQS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDAwMC0wMEZGLCBVKzAxMzEsIFUrMDE1Mi0wMTUzLCBVKzAyQzYsIFUrMDJEQSwgVSswMkRDLCBVKzIwMDAtMjA2RiwgVSsyMDc0LCBVKzIwQUMsIFUrMjIxMiwgVSsyMjE1Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8nKSwgbG9jYWwoJ1JvYm90by1SZWd1bGFyJyksIHVybCgvZm9udC1yb2JvdG8vS3NfY1Z4aUNpd1VXVnNGV0ZBM0Jqbi1fa2Y2QnlZTzZDTFlkQjRIUUUtWS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMC0wMjRGLCBVKzFFMDAtMUVGRiwgVSsyMEEwLTIwQUIsIFUrMjBBRC0yMENGLCBVKzJDNjAtMkM3RiwgVStBNzIwLUE3RkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNDAwOwogIHNyYzogbG9jYWwoJ1JvYm90bycpLCBsb2NhbCgnUm9ib3RvLVJlZ3VsYXInKSwgdXJsKC9mb250LXJvYm90by9OSjR2eGxnV3dXYkVzdjE4ZEFocW5uLV9rZjZCeVlPNkNMWWRCNEhRRS1ZLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMTAyLTAxMDMsIFUrMUVBMC0xRUY5LCBVKzIwQUI7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBCb2xkJyksIGxvY2FsKCdSb2JvdG8tQm9sZCcpLCB1cmwoL2ZvbnQtcm9ib3RvL2lzWi13YkNYTktBYm5qbzZfVHdIVG9YMGhWZ3paUVVmUkR1WnJQdkgzRDgud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzA0MDAtMDQ1RiwgVSswNDkwLTA0OTEsIFUrMDRCMC0wNEIxLCBVKzIxMTY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBCb2xkJyksIGxvY2FsKCdSb2JvdG8tQm9sZCcpLCB1cmwoL2ZvbnQtcm9ib3RvLzc3RlhGalJiR3pONGFDclNGaGxoM29YMGhWZ3paUVVmUkR1WnJQdkgzRDgud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzA0NjAtMDUyRiwgVSsyMEI0LCBVKzJERTAtMkRGRiwgVStBNjQwLUE2OUY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBCb2xkJyksIGxvY2FsKCdSb2JvdG8tQm9sZCcpLCB1cmwoL2ZvbnQtcm9ib3RvL2pTTjJDR1ZEYmNWeUNuZkpmalNkZklYMGhWZ3paUVVmUkR1WnJQdkgzRDgud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAzNzAtMDNGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIEJvbGQnKSwgbG9jYWwoJ1JvYm90by1Cb2xkJyksIHVybCgvZm9udC1yb2JvdG8vVVg2aTRKeFFEbTNmVlRjMUNQdXdxb1gwaFZnelpRVWZSRHVaclB2SDNEOC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMUYwMC0xRkZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gQm9sZCcpLCBsb2NhbCgnUm9ib3RvLUJvbGQnKSwgdXJsKC9mb250LXJvYm90by9kLTZJWXBsT0ZvY0NhY0t6eHdYU09KQncxeFUxcktwdEpqXzBqYW5zOTIwLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMDAwLTAwRkYsIFUrMDEzMSwgVSswMTUyLTAxNTMsIFUrMDJDNiwgVSswMkRBLCBVKzAyREMsIFUrMjAwMC0yMDZGLCBVKzIwNzQsIFUrMjBBQywgVSsyMjEyLCBVKzIyMTU7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBCb2xkJyksIGxvY2FsKCdSb2JvdG8tQm9sZCcpLCB1cmwoL2ZvbnQtcm9ib3RvLzk3dWFoeGlxWlJvbmNCYUNFSTNhVzRYMGhWZ3paUVVmUkR1WnJQdkgzRDgud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDAtMDI0RiwgVSsxRTAwLTFFRkYsIFUrMjBBMC0yMEFCLCBVKzIwQUQtMjBDRiwgVSsyQzYwLTJDN0YsIFUrQTcyMC1BN0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gQm9sZCcpLCBsb2NhbCgnUm9ib3RvLUJvbGQnKSwgdXJsKC9mb250LXJvYm90by9Qd1pjLVliSUw0MTR3QjlyQjFJQVBZWDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMTAyLTAxMDMsIFUrMUVBMC0xRUY5LCBVKzIwQUI7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBCb2xkIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUJvbGRJdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by90Nk5kNGNmUFJoWlA0NFE1UUFqY0MxNHNZWWRKZzVkVTJxekpFVlN1dGEwLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDAwLTA0NUYsIFUrMDQ5MC0wNDkxLCBVKzA0QjAtMDRCMSwgVSsyMTE2Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gQm9sZCBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1Cb2xkSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vdDZOZDRjZlBSaFpQNDRRNVFBamNDX1pyYVIyVGc4dzJsem03a0xOTDAtdy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQ2MC0wNTJGLCBVKzIwQjQsIFUrMkRFMC0yREZGLCBVK0E2NDAtQTY5RjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIEJvbGQgSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tQm9sZEl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvL3Q2TmQ0Y2ZQUmhaUDQ0UTVRQWpjQ3d0X1JtNjkxTFRlYktmWTJaa0tTbUkud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAzNzAtMDNGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIEJvbGQgSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tQm9sZEl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvL3Q2TmQ0Y2ZQUmhaUDQ0UTVRQWpjQzFCVzI2UXhwU2otX1pLbV94VDRoV3cud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzFGMDAtMUZGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIEJvbGQgSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tQm9sZEl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvL3Q2TmQ0Y2ZQUmhaUDQ0UTVRQWpjQzRncDlROGdiWXJocUdsUmF2X0lYZmsud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAwMDAtMDBGRiwgVSswMTMxLCBVKzAxNTItMDE1MywgVSswMkM2LCBVKzAyREEsIFUrMDJEQywgVSsyMDAwLTIwNkYsIFUrMjA3NCwgVSsyMEFDLCBVKzIyMTIsIFUrMjIxNTsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIEJvbGQgSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tQm9sZEl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvL3Q2TmQ0Y2ZQUmhaUDQ0UTVRQWpjQzZFOGtNNHhXUjFfMWJZVVJSb2pSR2Mud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDAtMDI0RiwgVSsxRTAwLTFFRkYsIFUrMjBBMC0yMEFCLCBVKzIwQUQtMjBDRiwgVSsyQzYwLTJDN0YsIFUrQTcyMC1BN0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gQm9sZCBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1Cb2xkSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vdDZOZDRjZlBSaFpQNDRRNVFBamNDOURpTnNSNWEtOU9lX0l2cHU4WFdsWS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMi0wMTAzLCBVKzFFQTAtMUVGOSwgVSsyMEFCOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vT3BYVXFUbzBVZ1FRaEdqX1NGZExXQmtBejRyWW40N1p5MnJ2aWdXUWY2dy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQwMC0wNDVGLCBVKzA0OTAtMDQ5MSwgVSswNEIwLTA0QjEsIFUrMjExNjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvL1d4clhKYTBDM0tkdEM3bE1hZkc0ZFJrQXo0clluNDdaeTJydmlnV1FmNncud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzA0NjAtMDUyRiwgVSsyMEI0LCBVKzJERTAtMkRGRiwgVStBNjQwLUE2OUY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNDAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1JdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by9jREtoUmFYblFUT1ZiYW94d2RPcjl4a0F6NHJZbjQ3WnkycnZpZ1dRZjZ3LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMzcwLTAzRkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNDAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1JdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by8xaFpmMDJQT0FOaDMyazJWa2dFb1VCa0F6NHJZbjQ3WnkycnZpZ1dRZjZ3LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSsxRjAwLTFGRkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNDAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1JdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by92UGN5blNMMHFIcV82ZFg3bEtWQnlYWWhqYlNwdmM0N2VlNnhSXzgwSG53LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMDAwLTAwRkYsIFUrMDEzMSwgVSswMTUyLTAxNTMsIFUrMDJDNiwgVSswMkRBLCBVKzAyREMsIFUrMjAwMC0yMDZGLCBVKzIwNzQsIFUrMjBBQywgVSsyMjEyLCBVKzIyMTU7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNDAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1JdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by92U3p1bGZLU0swTExqamZlYXhjUkVoa0F6NHJZbjQ3WnkycnZpZ1dRZjZ3LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMTAwLTAyNEYsIFUrMUUwMC0xRUZGLCBVKzIwQTAtMjBBQiwgVSsyMEFELTIwQ0YsIFUrMkM2MC0yQzdGLCBVK0E3MjAtQTdGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvL0syM2N4V1ZUcklGRDZESnNFVmkwN1JrQXo0clluNDdaeTJydmlnV1FmNncud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDItMDEwMywgVSsxRUEwLTFFRjksIFUrMjBBQjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiAzMDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIExpZ2h0JyksIGxvY2FsKCdSb2JvdG8tTGlnaHQnKSwgdXJsKC9mb250LXJvYm90by9GbDR5MFFkT3h5eVRIRUdNWFg4a2NZWDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDAwLTA0NUYsIFUrMDQ5MC0wNDkxLCBVKzA0QjAtMDRCMSwgVSsyMTE2Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDMwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTGlnaHQnKSwgbG9jYWwoJ1JvYm90by1MaWdodCcpLCB1cmwoL2ZvbnQtcm9ib3RvLzBlQzZmbDA2bHVYRVlXcEJTSnZYQ0lYMGhWZ3paUVVmUkR1WnJQdkgzRDgud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzA0NjAtMDUyRiwgVSsyMEI0LCBVKzJERTAtMkRGRiwgVStBNjQwLUE2OUY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogMzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBMaWdodCcpLCBsb2NhbCgnUm9ib3RvLUxpZ2h0JyksIHVybCgvZm9udC1yb2JvdG8vSTNTMXdzZ1NnOVlDdXJWNlBVa1RPWVgwaFZnelpRVWZSRHVaclB2SDNEOC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDM3MC0wM0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDMwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTGlnaHQnKSwgbG9jYWwoJ1JvYm90by1MaWdodCcpLCB1cmwoL2ZvbnQtcm9ib3RvLy1MMTRKazA2bTZwVUhCLTVtWFFRbllYMGhWZ3paUVVmUkR1WnJQdkgzRDgud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzFGMDAtMUZGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiAzMDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIExpZ2h0JyksIGxvY2FsKCdSb2JvdG8tTGlnaHQnKSwgdXJsKC9mb250LXJvYm90by9IZ28xM2stdGZTcG4wcWkxU0ZkVWZaQncxeFUxcktwdEpqXzBqYW5zOTIwLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMDAwLTAwRkYsIFUrMDEzMSwgVSswMTUyLTAxNTMsIFUrMDJDNiwgVSswMkRBLCBVKzAyREMsIFUrMjAwMC0yMDZGLCBVKzIwNzQsIFUrMjBBQywgVSsyMjEyLCBVKzIyMTU7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogMzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBMaWdodCcpLCBsb2NhbCgnUm9ib3RvLUxpZ2h0JyksIHVybCgvZm9udC1yb2JvdG8vUHJ1MzNxalNocFpTbUczejZWWXduWVgwaFZnelpRVWZSRHVaclB2SDNEOC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMC0wMjRGLCBVKzFFMDAtMUVGRiwgVSsyMEEwLTIwQUIsIFUrMjBBRC0yMENGLCBVKzJDNjAtMkM3RiwgVStBNzIwLUE3RkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogMzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBMaWdodCcpLCBsb2NhbCgnUm9ib3RvLUxpZ2h0JyksIHVybCgvZm9udC1yb2JvdG8vTllEV0JkRDRnSXEyNkc1WFliSHNGSVgwaFZnelpRVWZSRHVaclB2SDNEOC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMi0wMTAzLCBVKzFFQTAtMUVGOSwgVSsyMEFCOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDMwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTGlnaHQgSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tTGlnaHRJdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by83bThsN1RsRk8tUzNWa2hIdVIwYXQxNHNZWWRKZzVkVTJxekpFVlN1dGEwLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDAwLTA0NUYsIFUrMDQ5MC0wNDkxLCBVKzA0QjAtMDRCMSwgVSsyMTE2Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDMwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTGlnaHQgSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tTGlnaHRJdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by83bThsN1RsRk8tUzNWa2hIdVIwYXRfWnJhUjJUZzh3Mmx6bTdrTE5MMC13LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDYwLTA1MkYsIFUrMjBCNCwgVSsyREUwLTJERkYsIFUrQTY0MC1BNjlGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDMwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTGlnaHQgSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tTGlnaHRJdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by83bThsN1RsRk8tUzNWa2hIdVIwYXR3dF9SbTY5MUxUZWJLZlkyWmtLU21JLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMzcwLTAzRkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogMzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBMaWdodCBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1MaWdodEl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvLzdtOGw3VGxGTy1TM1ZraEh1UjBhdDFCVzI2UXhwU2otX1pLbV94VDRoV3cud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzFGMDAtMUZGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiAzMDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIExpZ2h0IEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUxpZ2h0SXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vN204bDdUbEZPLVMzVmtoSHVSMGF0NGdwOVE4Z2JZcmhxR2xSYXZfSVhmay53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDAwMC0wMEZGLCBVKzAxMzEsIFUrMDE1Mi0wMTUzLCBVKzAyQzYsIFUrMDJEQSwgVSswMkRDLCBVKzIwMDAtMjA2RiwgVSsyMDc0LCBVKzIwQUMsIFUrMjIxMiwgVSsyMjE1Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDMwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTGlnaHQgSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tTGlnaHRJdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by83bThsN1RsRk8tUzNWa2hIdVIwYXQ2RThrTTR4V1IxXzFiWVVSUm9qUkdjLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMTAwLTAyNEYsIFUrMUUwMC0xRUZGLCBVKzIwQTAtMjBBQiwgVSsyMEFELTIwQ0YsIFUrMkM2MC0yQzdGLCBVK0E3MjAtQTdGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiAzMDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIExpZ2h0IEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUxpZ2h0SXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vN204bDdUbEZPLVMzVmtoSHVSMGF0OURpTnNSNWEtOU9lX0l2cHU4WFdsWS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMi0wMTAzLCBVKzFFQTAtMUVGOSwgVSsyMEFCOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDUwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTWVkaXVtJyksIGxvY2FsKCdSb2JvdG8tTWVkaXVtJyksIHVybCgvZm9udC1yb2JvdG8vb0hpMzBrd1FXdnBDV3FBaHpIY0NTSVgwaFZnelpRVWZSRHVaclB2SDNEOC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQwMC0wNDVGLCBVKzA0OTAtMDQ5MSwgVSswNEIwLTA0QjEsIFUrMjExNjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA1MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1lZGl1bScpLCBsb2NhbCgnUm9ib3RvLU1lZGl1bScpLCB1cmwoL2ZvbnQtcm9ib3RvL1pMcUtlZWxZYkFURzYwRXBaQlNEeTRYMGhWZ3paUVVmUkR1WnJQdkgzRDgud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzA0NjAtMDUyRiwgVSsyMEI0LCBVKzJERTAtMkRGRiwgVStBNjQwLUE2OUY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNTAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNZWRpdW0nKSwgbG9jYWwoJ1JvYm90by1NZWRpdW0nKSwgdXJsKC9mb250LXJvYm90by9teDlVY2s2dUI2M1ZJS0ZZbkVNWHJZWDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMzcwLTAzRkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNTAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNZWRpdW0nKSwgbG9jYWwoJ1JvYm90by1NZWRpdW0nKSwgdXJsKC9mb250LXJvYm90by9yR3ZIZEpucjJsNzVxYjBZTkQ5TnlJWDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSsxRjAwLTFGRkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNTAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNZWRpdW0nKSwgbG9jYWwoJ1JvYm90by1NZWRpdW0nKSwgdXJsKC9mb250LXJvYm90by9SeFpKZG56ZW8zUjV6U2V4Z2U4VVVaQncxeFUxcktwdEpqXzBqYW5zOTIwLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMDAwLTAwRkYsIFUrMDEzMSwgVSswMTUyLTAxNTMsIFUrMDJDNiwgVSswMkRBLCBVKzAyREMsIFUrMjAwMC0yMDZGLCBVKzIwNzQsIFUrMjBBQywgVSsyMjEyLCBVKzIyMTU7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNTAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNZWRpdW0nKSwgbG9jYWwoJ1JvYm90by1NZWRpdW0nKSwgdXJsKC9mb250LXJvYm90by9vT2VGd1pObHJUZWZ6TFltbFZWMVVJWDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMTAwLTAyNEYsIFUrMUUwMC0xRUZGLCBVKzIwQTAtMjBBQiwgVSsyMEFELTIwQ0YsIFUrMkM2MC0yQzdGLCBVK0E3MjAtQTdGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA1MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1lZGl1bScpLCBsb2NhbCgnUm9ib3RvLU1lZGl1bScpLCB1cmwoL2ZvbnQtcm9ib3RvL21ibWhwck1INjlaaTZlRVBCWVZGaFlYMGhWZ3paUVVmUkR1WnJQdkgzRDgud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDItMDEwMywgVSsxRUEwLTFFRjksIFUrMjBBQjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiA1MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1lZGl1bSBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1NZWRpdW1JdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by9PTGZmR0JUYUYwWEZPVzFnbnVIRjBWNHNZWWRKZzVkVTJxekpFVlN1dGEwLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDAwLTA0NUYsIFUrMDQ5MC0wNDkxLCBVKzA0QjAtMDRCMSwgVSsyMTE2Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDUwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTWVkaXVtIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLU1lZGl1bUl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvL09MZmZHQlRhRjBYRk9XMWdudUhGMGZacmFSMlRnOHcybHptN2tMTkwwLXcud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzA0NjAtMDUyRiwgVSsyMEI0LCBVKzJERTAtMkRGRiwgVStBNjQwLUE2OUY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNTAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNZWRpdW0gSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tTWVkaXVtSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vT0xmZkdCVGFGMFhGT1cxZ251SEYwUXRfUm02OTFMVGViS2ZZMlprS1NtSS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDM3MC0wM0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDUwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTWVkaXVtIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLU1lZGl1bUl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvL09MZmZHQlRhRjBYRk9XMWdudUhGMFZCVzI2UXhwU2otX1pLbV94VDRoV3cud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzFGMDAtMUZGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiA1MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1lZGl1bSBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1NZWRpdW1JdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by9PTGZmR0JUYUYwWEZPVzFnbnVIRjBZZ3A5UThnYllyaHFHbFJhdl9JWGZrLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMDAwLTAwRkYsIFUrMDEzMSwgVSswMTUyLTAxNTMsIFUrMDJDNiwgVSswMkRBLCBVKzAyREMsIFUrMjAwMC0yMDZGLCBVKzIwNzQsIFUrMjBBQywgVSsyMjEyLCBVKzIyMTU7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNTAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNZWRpdW0gSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tTWVkaXVtSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vT0xmZkdCVGFGMFhGT1cxZ251SEYwYUU4a000eFdSMV8xYllVUlJvalJHYy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMC0wMjRGLCBVKzFFMDAtMUVGRiwgVSsyMEEwLTIwQUIsIFUrMjBBRC0yMENGLCBVKzJDNjAtMkM3RiwgVStBNzIwLUE3RkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNTAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNZWRpdW0gSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tTWVkaXVtSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vT0xmZkdCVGFGMFhGT1cxZ251SEYwZERpTnNSNWEtOU9lX0l2cHU4WFdsWS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMi0wMTAzLCBVKzFFQTAtMUVGOSwgVSsyMEFCOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvIE1vbm8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNDAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNb25vJyksIGxvY2FsKCdSb2JvdG9Nb25vLVJlZ3VsYXInKSwgdXJsKC9mb250LXJvYm90by9oTXFQTkxzdV9keXdNYTRDX0RFcFkxNHNZWWRKZzVkVTJxekpFVlN1dGEwLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDAwLTA0NUYsIFUrMDQ5MC0wNDkxLCBVKzA0QjAtMDRCMSwgVSsyMTE2Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvIE1vbm8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNDAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNb25vJyksIGxvY2FsKCdSb2JvdG9Nb25vLVJlZ3VsYXInKSwgdXJsKC9mb250LXJvYm90by9oTXFQTkxzdV9keXdNYTRDX0RFcFlfWnJhUjJUZzh3Mmx6bTdrTE5MMC13LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDYwLTA1MkYsIFUrMjBCNCwgVSsyREUwLTJERkYsIFUrQTY0MC1BNjlGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvIE1vbm8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNDAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNb25vJyksIGxvY2FsKCdSb2JvdG9Nb25vLVJlZ3VsYXInKSwgdXJsKC9mb250LXJvYm90by9oTXFQTkxzdV9keXdNYTRDX0RFcFl3dF9SbTY5MUxUZWJLZlkyWmtLU21JLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMzcwLTAzRkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubyc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1vbm8nKSwgbG9jYWwoJ1JvYm90b01vbm8tUmVndWxhcicpLCB1cmwoL2ZvbnQtcm9ib3RvL2hNcVBOTHN1X2R5d01hNENfREVwWTFCVzI2UXhwU2otX1pLbV94VDRoV3cud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzFGMDAtMUZGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byBNb25vJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTW9ubycpLCBsb2NhbCgnUm9ib3RvTW9uby1SZWd1bGFyJyksIHVybCgvZm9udC1yb2JvdG8vaE1xUE5Mc3VfZHl3TWE0Q19ERXBZNGdwOVE4Z2JZcmhxR2xSYXZfSVhmay53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDAwMC0wMEZGLCBVKzAxMzEsIFUrMDE1Mi0wMTUzLCBVKzAyQzYsIFUrMDJEQSwgVSswMkRDLCBVKzIwMDAtMjA2RiwgVSsyMDc0LCBVKzIwQUMsIFUrMjIxMiwgVSsyMjE1Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvIE1vbm8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNDAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNb25vJyksIGxvY2FsKCdSb2JvdG9Nb25vLVJlZ3VsYXInKSwgdXJsKC9mb250LXJvYm90by9oTXFQTkxzdV9keXdNYTRDX0RFcFk2RThrTTR4V1IxXzFiWVVSUm9qUkdjLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMTAwLTAyNEYsIFUrMUUwMC0xRUZGLCBVKzIwQTAtMjBBQiwgVSsyMEFELTIwQ0YsIFUrMkM2MC0yQzdGLCBVK0E3MjAtQTdGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byBNb25vJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTW9ubycpLCBsb2NhbCgnUm9ib3RvTW9uby1SZWd1bGFyJyksIHVybCgvZm9udC1yb2JvdG8vaE1xUE5Mc3VfZHl3TWE0Q19ERXBZOURpTnNSNWEtOU9lX0l2cHU4WFdsWS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMi0wMTAzLCBVKzFFQTAtMUVGOSwgVSsyMEFCOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvIE1vbm8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNb25vIEJvbGQnKSwgbG9jYWwoJ1JvYm90b01vbm8tQm9sZCcpLCB1cmwoL2ZvbnQtcm9ib3RvL040ZHVWYzlDNTh1d1BpWThfNTlGejF4LU0xSTF3NU9NaXFuVkY4eEJMaFUud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzA0MDAtMDQ1RiwgVSswNDkwLTA0OTEsIFUrMDRCMC0wNEIxLCBVKzIxMTY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubyc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1vbm8gQm9sZCcpLCBsb2NhbCgnUm9ib3RvTW9uby1Cb2xkJyksIHVybCgvZm9udC1yb2JvdG8vTjRkdVZjOUM1OHV3UGlZOF81OUZ6d1hhQVh1cDVtWmxmSzZ4UkxyaHNjby53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQ2MC0wNTJGLCBVKzIwQjQsIFUrMkRFMC0yREZGLCBVK0E2NDAtQTY5RjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byBNb25vJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTW9ubyBCb2xkJyksIGxvY2FsKCdSb2JvdG9Nb25vLUJvbGQnKSwgdXJsKC9mb250LXJvYm90by9ONGR1VmM5QzU4dXdQaVk4XzU5Rnp3bjZXcXhvLXh3eGlsRFhQVThjaFZVLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMzcwLTAzRkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubyc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1vbm8gQm9sZCcpLCBsb2NhbCgnUm9ib3RvTW9uby1Cb2xkJyksIHVybCgvZm9udC1yb2JvdG8vTjRkdVZjOUM1OHV3UGlZOF81OUZ6MVQ3YUpMSzZuS3BuMzZJTXdUY01NYy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMUYwMC0xRkZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvIE1vbm8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNb25vIEJvbGQnKSwgbG9jYWwoJ1JvYm90b01vbm8tQm9sZCcpLCB1cmwoL2ZvbnQtcm9ib3RvL040ZHVWYzlDNTh1d1BpWThfNTlGel83OV9adVV4Q2lnTTJEZXNwVG5GYXcud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAwMDAtMDBGRiwgVSswMTMxLCBVKzAxNTItMDE1MywgVSswMkM2LCBVKzAyREEsIFUrMDJEQywgVSsyMDAwLTIwNkYsIFUrMjA3NCwgVSsyMEFDLCBVKzIyMTIsIFUrMjIxNTsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byBNb25vJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTW9ubyBCb2xkJyksIGxvY2FsKCdSb2JvdG9Nb25vLUJvbGQnKSwgdXJsKC9mb250LXJvYm90by9ONGR1VmM5QzU4dXdQaVk4XzU5Rno0Z2Q5T0VQVUNOM0FkWVcwZTh0YXQ0LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMTAwLTAyNEYsIFUrMUUwMC0xRUZGLCBVKzIwQTAtMjBBQiwgVSsyMEFELTIwQ0YsIFUrMkM2MC0yQzdGLCBVK0E3MjAtQTdGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byBNb25vJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTW9ubyBCb2xkJyksIGxvY2FsKCdSb2JvdG9Nb25vLUJvbGQnKSwgdXJsKC9mb250LXJvYm90by9ONGR1VmM5QzU4dXdQaVk4XzU5Rno4YklRU1labldMYVdDOVFOQ3BUS19VLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMTAyLTAxMDMsIFUrMUVBMC0xRUY5LCBVKzIwQUI7Cn0KPC9zdHlsZT4KCgo8c3R5bGU+CiAgaHRtbCwKICBib2R5IHsKICAgIG1hcmdpbjogMDsKICAgIHBhZGRpbmc6IDA7CiAgICBoZWlnaHQ6IDEwMCU7CiAgICBmb250LWZhbWlseTogUm9ib3RvLCBzYW5zLXNlcmlmOwogIH0KPC9zdHlsZT4KCgoKCgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vaXJvbi1mbGV4LWxheW91dC9pcm9uLWZsZXgtbGF5b3V0Lmh0bWwuanMKKGZ1bmN0aW9uKCl7dmFyIGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTthLnRleHRDb250ZW50PSJbaGlkZGVuXSB7IGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsgfSI7ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChhKX0pKCk7Cjwvc2NyaXB0Pgo8Y3VzdG9tLXN0eWxlPgogIDxzdHlsZSBpcz0iY3VzdG9tLXN0eWxlIj4KICAgIFtoaWRkZW5dIHsKICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgfQogIDwvc3R5bGU+CjwvY3VzdG9tLXN0eWxlPgoKPGN1c3RvbS1zdHlsZT4KICA8c3R5bGUgaXM9ImN1c3RvbS1zdHlsZSI+CiAgICBodG1sIHsKCiAgICAgIC0tbGF5b3V0OiB7CiAgICAgICAgZGlzcGxheTogLW1zLWZsZXhib3g7CiAgICAgICAgZGlzcGxheTogLXdlYmtpdC1mbGV4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIH07CgogICAgICAtLWxheW91dC1pbmxpbmU6IHsKICAgICAgICBkaXNwbGF5OiAtbXMtaW5saW5lLWZsZXhib3g7CiAgICAgICAgZGlzcGxheTogLXdlYmtpdC1pbmxpbmUtZmxleDsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWhvcml6b250YWw6IHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQ7CgogICAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogcm93OwogICAgICAgIC13ZWJraXQtZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtaG9yaXpvbnRhbC1yZXZlcnNlOiB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0OwoKICAgICAgICAtbXMtZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlOwogICAgICAgIC13ZWJraXQtZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlOwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZTsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LXZlcnRpY2FsOiB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0OwoKICAgICAgICAtbXMtZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICAtd2Via2l0LWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LXZlcnRpY2FsLXJldmVyc2U6IHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQ7CgogICAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogY29sdW1uLXJldmVyc2U7CiAgICAgICAgLXdlYmtpdC1mbGV4LWRpcmVjdGlvbjogY29sdW1uLXJldmVyc2U7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbi1yZXZlcnNlOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtd3JhcDogewogICAgICAgIC1tcy1mbGV4LXdyYXA6IHdyYXA7CiAgICAgICAgLXdlYmtpdC1mbGV4LXdyYXA6IHdyYXA7CiAgICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtd3JhcC1yZXZlcnNlOiB7CiAgICAgICAgLW1zLWZsZXgtd3JhcDogd3JhcC1yZXZlcnNlOwogICAgICAgIC13ZWJraXQtZmxleC13cmFwOiB3cmFwLXJldmVyc2U7CiAgICAgICAgZmxleC13cmFwOiB3cmFwLXJldmVyc2U7CiAgICAgIH07CgogICAgICAtLWxheW91dC1mbGV4LWF1dG86IHsKICAgICAgICAtbXMtZmxleDogMSAxIGF1dG87CiAgICAgICAgLXdlYmtpdC1mbGV4OiAxIDEgYXV0bzsKICAgICAgICBmbGV4OiAxIDEgYXV0bzsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWZsZXgtbm9uZTogewogICAgICAgIC1tcy1mbGV4OiBub25lOwogICAgICAgIC13ZWJraXQtZmxleDogbm9uZTsKICAgICAgICBmbGV4OiBub25lOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtZmxleDogewogICAgICAgIC1tcy1mbGV4OiAxIDEgMC4wMDAwMDAwMDFweDsKICAgICAgICAtd2Via2l0LWZsZXg6IDE7CiAgICAgICAgZmxleDogMTsKICAgICAgICAtd2Via2l0LWZsZXgtYmFzaXM6IDAuMDAwMDAwMDAxcHg7CiAgICAgICAgZmxleC1iYXNpczogMC4wMDAwMDAwMDFweDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWZsZXgtMjogewogICAgICAgIC1tcy1mbGV4OiAyOwogICAgICAgIC13ZWJraXQtZmxleDogMjsKICAgICAgICBmbGV4OiAyOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtZmxleC0zOiB7CiAgICAgICAgLW1zLWZsZXg6IDM7CiAgICAgICAgLXdlYmtpdC1mbGV4OiAzOwogICAgICAgIGZsZXg6IDM7CiAgICAgIH07CgogICAgICAtLWxheW91dC1mbGV4LTQ6IHsKICAgICAgICAtbXMtZmxleDogNDsKICAgICAgICAtd2Via2l0LWZsZXg6IDQ7CiAgICAgICAgZmxleDogNDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWZsZXgtNTogewogICAgICAgIC1tcy1mbGV4OiA1OwogICAgICAgIC13ZWJraXQtZmxleDogNTsKICAgICAgICBmbGV4OiA1OwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtZmxleC02OiB7CiAgICAgICAgLW1zLWZsZXg6IDY7CiAgICAgICAgLXdlYmtpdC1mbGV4OiA2OwogICAgICAgIGZsZXg6IDY7CiAgICAgIH07CgogICAgICAtLWxheW91dC1mbGV4LTc6IHsKICAgICAgICAtbXMtZmxleDogNzsKICAgICAgICAtd2Via2l0LWZsZXg6IDc7CiAgICAgICAgZmxleDogNzsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWZsZXgtODogewogICAgICAgIC1tcy1mbGV4OiA4OwogICAgICAgIC13ZWJraXQtZmxleDogODsKICAgICAgICBmbGV4OiA4OwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtZmxleC05OiB7CiAgICAgICAgLW1zLWZsZXg6IDk7CiAgICAgICAgLXdlYmtpdC1mbGV4OiA5OwogICAgICAgIGZsZXg6IDk7CiAgICAgIH07CgogICAgICAtLWxheW91dC1mbGV4LTEwOiB7CiAgICAgICAgLW1zLWZsZXg6IDEwOwogICAgICAgIC13ZWJraXQtZmxleDogMTA7CiAgICAgICAgZmxleDogMTA7CiAgICAgIH07CgogICAgICAtLWxheW91dC1mbGV4LTExOiB7CiAgICAgICAgLW1zLWZsZXg6IDExOwogICAgICAgIC13ZWJraXQtZmxleDogMTE7CiAgICAgICAgZmxleDogMTE7CiAgICAgIH07CgogICAgICAtLWxheW91dC1mbGV4LTEyOiB7CiAgICAgICAgLW1zLWZsZXg6IDEyOwogICAgICAgIC13ZWJraXQtZmxleDogMTI7CiAgICAgICAgZmxleDogMTI7CiAgICAgIH07CgogICAgICAvKiBhbGlnbm1lbnQgaW4gY3Jvc3MgYXhpcyAqLwoKICAgICAgLS1sYXlvdXQtc3RhcnQ6IHsKICAgICAgICAtbXMtZmxleC1hbGlnbjogc3RhcnQ7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1pdGVtczogZmxleC1zdGFydDsKICAgICAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWNlbnRlcjogewogICAgICAgIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgIH07CgogICAgICAtLWxheW91dC1lbmQ6IHsKICAgICAgICAtbXMtZmxleC1hbGlnbjogZW5kOwogICAgICAgIC13ZWJraXQtYWxpZ24taXRlbXM6IGZsZXgtZW5kOwogICAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWJhc2VsaW5lOiB7CiAgICAgICAgLW1zLWZsZXgtYWxpZ246IGJhc2VsaW5lOwogICAgICAgIC13ZWJraXQtYWxpZ24taXRlbXM6IGJhc2VsaW5lOwogICAgICAgIGFsaWduLWl0ZW1zOiBiYXNlbGluZTsKICAgICAgfTsKCiAgICAgIC8qIGFsaWdubWVudCBpbiBtYWluIGF4aXMgKi8KCiAgICAgIC0tbGF5b3V0LXN0YXJ0LWp1c3RpZmllZDogewogICAgICAgIC1tcy1mbGV4LXBhY2s6IHN0YXJ0OwogICAgICAgIC13ZWJraXQtanVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0OwogICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWNlbnRlci1qdXN0aWZpZWQ6IHsKICAgICAgICAtbXMtZmxleC1wYWNrOiBjZW50ZXI7CiAgICAgICAgLXdlYmtpdC1qdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWVuZC1qdXN0aWZpZWQ6IHsKICAgICAgICAtbXMtZmxleC1wYWNrOiBlbmQ7CiAgICAgICAgLXdlYmtpdC1qdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kOwogICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7CiAgICAgIH07CgogICAgICAtLWxheW91dC1hcm91bmQtanVzdGlmaWVkOiB7CiAgICAgICAgLW1zLWZsZXgtcGFjazogZGlzdHJpYnV0ZTsKICAgICAgICAtd2Via2l0LWp1c3RpZnktY29udGVudDogc3BhY2UtYXJvdW5kOwogICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYXJvdW5kOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtanVzdGlmaWVkOiB7CiAgICAgICAgLW1zLWZsZXgtcGFjazoganVzdGlmeTsKICAgICAgICAtd2Via2l0LWp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgIH07CgogICAgICAtLWxheW91dC1jZW50ZXItY2VudGVyOiB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWNlbnRlcjsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtY2VudGVyLWp1c3RpZmllZDsKICAgICAgfTsKCiAgICAgIC8qIHNlbGYgYWxpZ25tZW50ICovCgogICAgICAtLWxheW91dC1zZWxmLXN0YXJ0OiB7CiAgICAgICAgLW1zLWFsaWduLXNlbGY6IGZsZXgtc3RhcnQ7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1zZWxmOiBmbGV4LXN0YXJ0OwogICAgICAgIGFsaWduLXNlbGY6IGZsZXgtc3RhcnQ7CiAgICAgIH07CgogICAgICAtLWxheW91dC1zZWxmLWNlbnRlcjogewogICAgICAgIC1tcy1hbGlnbi1zZWxmOiBjZW50ZXI7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1zZWxmOiBjZW50ZXI7CiAgICAgICAgYWxpZ24tc2VsZjogY2VudGVyOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtc2VsZi1lbmQ6IHsKICAgICAgICAtbXMtYWxpZ24tc2VsZjogZmxleC1lbmQ7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1zZWxmOiBmbGV4LWVuZDsKICAgICAgICBhbGlnbi1zZWxmOiBmbGV4LWVuZDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LXNlbGYtc3RyZXRjaDogewogICAgICAgIC1tcy1hbGlnbi1zZWxmOiBzdHJldGNoOwogICAgICAgIC13ZWJraXQtYWxpZ24tc2VsZjogc3RyZXRjaDsKICAgICAgICBhbGlnbi1zZWxmOiBzdHJldGNoOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtc2VsZi1iYXNlbGluZTogewogICAgICAgIC1tcy1hbGlnbi1zZWxmOiBiYXNlbGluZTsKICAgICAgICAtd2Via2l0LWFsaWduLXNlbGY6IGJhc2VsaW5lOwogICAgICAgIGFsaWduLXNlbGY6IGJhc2VsaW5lOwogICAgICB9OwoKICAgICAgLyogbXVsdGktbGluZSBhbGlnbm1lbnQgaW4gbWFpbiBheGlzICovCgogICAgICAtLWxheW91dC1zdGFydC1hbGlnbmVkOiB7CiAgICAgICAgLW1zLWZsZXgtbGluZS1wYWNrOiBzdGFydDsgIC8qIElFMTAgKi8KICAgICAgICAtbXMtYWxpZ24tY29udGVudDogZmxleC1zdGFydDsKICAgICAgICAtd2Via2l0LWFsaWduLWNvbnRlbnQ6IGZsZXgtc3RhcnQ7CiAgICAgICAgYWxpZ24tY29udGVudDogZmxleC1zdGFydDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWVuZC1hbGlnbmVkOiB7CiAgICAgICAgLW1zLWZsZXgtbGluZS1wYWNrOiBlbmQ7ICAvKiBJRTEwICovCiAgICAgICAgLW1zLWFsaWduLWNvbnRlbnQ6IGZsZXgtZW5kOwogICAgICAgIC13ZWJraXQtYWxpZ24tY29udGVudDogZmxleC1lbmQ7CiAgICAgICAgYWxpZ24tY29udGVudDogZmxleC1lbmQ7CiAgICAgIH07CgogICAgICAtLWxheW91dC1jZW50ZXItYWxpZ25lZDogewogICAgICAgIC1tcy1mbGV4LWxpbmUtcGFjazogY2VudGVyOyAgLyogSUUxMCAqLwogICAgICAgIC1tcy1hbGlnbi1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgYWxpZ24tY29udGVudDogY2VudGVyOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtYmV0d2Vlbi1hbGlnbmVkOiB7CiAgICAgICAgLW1zLWZsZXgtbGluZS1wYWNrOiBqdXN0aWZ5OyAgLyogSUUxMCAqLwogICAgICAgIC1tcy1hbGlnbi1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICAgIC13ZWJraXQtYWxpZ24tY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICBhbGlnbi1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtYXJvdW5kLWFsaWduZWQ6IHsKICAgICAgICAtbXMtZmxleC1saW5lLXBhY2s6IGRpc3RyaWJ1dGU7ICAvKiBJRTEwICovCiAgICAgICAgLW1zLWFsaWduLWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDsKICAgICAgICAtd2Via2l0LWFsaWduLWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDsKICAgICAgICBhbGlnbi1jb250ZW50OiBzcGFjZS1hcm91bmQ7CiAgICAgIH07CgogICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgICAgICAgICAgICAgT3RoZXIgTGF5b3V0CiAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgogICAgICAtLWxheW91dC1ibG9jazogewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtaW52aXNpYmxlOiB7CiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuICFpbXBvcnRhbnQ7CiAgICAgIH07CgogICAgICAtLWxheW91dC1yZWxhdGl2ZTogewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWZpdDogewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgIH07CgogICAgICAtLWxheW91dC1zY3JvbGw6IHsKICAgICAgICAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7CiAgICAgICAgb3ZlcmZsb3c6IGF1dG87CiAgICAgIH07CgogICAgICAtLWxheW91dC1mdWxsYmxlZWQ6IHsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgaGVpZ2h0OiAxMDB2aDsKICAgICAgfTsKCiAgICAgIC8qIGZpeGVkIHBvc2l0aW9uICovCgogICAgICAtLWxheW91dC1maXhlZC10b3A6IHsKICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgIH07CgogICAgICAtLWxheW91dC1maXhlZC1yaWdodDogewogICAgICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgICAgICB0b3A6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtZml4ZWQtYm90dG9tOiB7CiAgICAgICAgcG9zaXRpb246IGZpeGVkOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtZml4ZWQtbGVmdDogewogICAgICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgICAgICB0b3A6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgIH07CgogICAgfQogIDwvc3R5bGU+CjwvY3VzdG9tLXN0eWxlPgoKCgoKCjxzY3JpcHQ+Ly9+fldFQlBBVEh+fi9pcm9uLWExMXkta2V5cy1iZWhhdmlvci9pcm9uLWExMXkta2V5cy1iZWhhdmlvci5odG1sLmpzCihmdW5jdGlvbigpe2Z1bmN0aW9uIGEoeCxDKXt2YXIgRj0iIjtpZih4KWlmKHg9eC50b0xvd2VyQ2FzZSgpLCIgIj09PXh8fEEudGVzdCh4KSlGPSJzcGFjZSI7ZWxzZSBpZih5LnRlc3QoeCkpRj0iZXNjIjtlbHNlIGlmKDE9PXgubGVuZ3RoKXtpZighQ3x8ci50ZXN0KHgpKUY9eH1lbHNlIEY9di50ZXN0KHgpP3gucmVwbGFjZSgiYXJyb3ciLCIiKToibXVsdGlwbHkiPT14PyIqIjp4O3JldHVybiBGfWZ1bmN0aW9uIGMoeCl7dmFyIEM9IiI7eCYmKHggaW4gbT9DPW1beF06dC50ZXN0KHgpPyh4PXBhcnNlSW50KHgucmVwbGFjZSgiVSsiLCIweCIpLDE2KSxDPVN0cmluZy5mcm9tQ2hhckNvZGUoeCkudG9Mb3dlckNhc2UoKSk6Qz14LnRvTG93ZXJDYXNlKCkpO3JldHVybiBDfWZ1bmN0aW9uIGQoeCl7dmFyIEM9IiI7TnVtYmVyKHgpJiYoQz02NTw9eCYmOTA+PXg/U3RyaW5nLmZyb21DaGFyQ29kZSgzMit4KToxMTI8PXgmJjEyMz49eD8iZiIrKHgtMTEyKzEpOjQ4PD14JiY1Nz49eD8KU3RyaW5nKHgtNDgpOjk2PD14JiYxMDU+PXg/U3RyaW5nKHgtOTYpOnBbeF0pO3JldHVybiBDfWZ1bmN0aW9uIGYoeCxDKXtyZXR1cm4geC5rZXk/YSh4LmtleSxDKTp4LmRldGFpbCYmeC5kZXRhaWwua2V5P2EoeC5kZXRhaWwua2V5LEMpOmMoeC5rZXlJZGVudGlmaWVyKXx8ZCh4LmtleUNvZGUpfHwiIn1mdW5jdGlvbiBnKHgsQyl7cmV0dXJuIGYoQyx4Lmhhc01vZGlmaWVycyk9PT14LmtleSYmKCF4Lmhhc01vZGlmaWVyc3x8ISFDLnNoaWZ0S2V5PT09ISF4LnNoaWZ0S2V5JiYhIUMuY3RybEtleT09PSEheC5jdHJsS2V5JiYhIUMuYWx0S2V5PT09ISF4LmFsdEtleSYmISFDLm1ldGFLZXk9PT0hIXgubWV0YUtleSl9ZnVuY3Rpb24gbCh4KXtyZXR1cm4gMT09PXgubGVuZ3RoP3tjb21ibzp4LGtleTp4LGV2ZW50OiJrZXlkb3duIn06eC5zcGxpdCgiKyIpLnJlZHVjZShmdW5jdGlvbihDLEYpe3ZhciBEPUYuc3BsaXQoIjoiKTtGPURbMF07RD1EWzFdO0YgaW4gcT8oQ1txW0ZdXT0hMCwKQy5oYXNNb2RpZmllcnM9ITApOihDLmtleT1GLEMuZXZlbnQ9RHx8ImtleWRvd24iKTtyZXR1cm4gQ30se2NvbWJvOnguc3BsaXQoIjoiKS5zaGlmdCgpfSl9ZnVuY3Rpb24gayh4KXtyZXR1cm4geC50cmltKCkuc3BsaXQoIiAiKS5tYXAoZnVuY3Rpb24oQyl7cmV0dXJuIGwoQyl9KX12YXIgbT17IlUrMDAwOCI6ImJhY2tzcGFjZSIsIlUrMDAwOSI6InRhYiIsIlUrMDAxQiI6ImVzYyIsIlUrMDAyMCI6InNwYWNlIiwiVSswMDdGIjoiZGVsIn0scD17ODoiYmFja3NwYWNlIiw5OiJ0YWIiLDEzOiJlbnRlciIsMjc6ImVzYyIsMzM6InBhZ2V1cCIsMzQ6InBhZ2Vkb3duIiwzNToiZW5kIiwzNjoiaG9tZSIsMzI6InNwYWNlIiwzNzoibGVmdCIsMzg6InVwIiwzOToicmlnaHQiLDQwOiJkb3duIiw0NjoiZGVsIiwxMDY6IioifSxxPXtzaGlmdDoic2hpZnRLZXkiLGN0cmw6ImN0cmxLZXkiLGFsdDoiYWx0S2V5IixtZXRhOiJtZXRhS2V5In0scj0vW2EtejAtOSpdLyx0PS9VXCsvLHY9L15hcnJvdy8sCkE9L15zcGFjZShiYXIpPy8seT0vXmVzY2FwZSQvO1BvbHltZXIuSXJvbkExMXlLZXlzQmVoYXZpb3I9e3Byb3BlcnRpZXM6e2tleUV2ZW50VGFyZ2V0Ont0eXBlOk9iamVjdCx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzfX0sc3RvcEtleWJvYXJkRXZlbnRQcm9wYWdhdGlvbjp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxfYm91bmRLZXlIYW5kbGVyczp7dHlwZTpBcnJheSx2YWx1ZTpmdW5jdGlvbigpe3JldHVybltdfX0sX2ltcGVyYXRpdmVLZXlCaW5kaW5nczp7dHlwZTpPYmplY3QsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm57fX19fSxvYnNlcnZlcnM6WyJfcmVzZXRLZXlFdmVudExpc3RlbmVycyhrZXlFdmVudFRhcmdldCwgX2JvdW5kS2V5SGFuZGxlcnMpIl0sa2V5QmluZGluZ3M6e30scmVnaXN0ZXJlZDpmdW5jdGlvbigpe3RoaXMuX3ByZXBLZXlCaW5kaW5ncygpfSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX2xpc3RlbktleUV2ZW50TGlzdGVuZXJzKCl9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fdW5saXN0ZW5LZXlFdmVudExpc3RlbmVycygpfSwKYWRkT3duS2V5QmluZGluZzpmdW5jdGlvbih4LEMpe3RoaXMuX2ltcGVyYXRpdmVLZXlCaW5kaW5nc1t4XT1DO3RoaXMuX3ByZXBLZXlCaW5kaW5ncygpO3RoaXMuX3Jlc2V0S2V5RXZlbnRMaXN0ZW5lcnMoKX0scmVtb3ZlT3duS2V5QmluZGluZ3M6ZnVuY3Rpb24oKXt0aGlzLl9pbXBlcmF0aXZlS2V5QmluZGluZ3M9e307dGhpcy5fcHJlcEtleUJpbmRpbmdzKCk7dGhpcy5fcmVzZXRLZXlFdmVudExpc3RlbmVycygpfSxrZXlib2FyZEV2ZW50TWF0Y2hlc0tleXM6ZnVuY3Rpb24oeCxDKXtDPWsoQyk7Zm9yKHZhciBGPTA7RjxDLmxlbmd0aDsrK0YpaWYoZyhDW0ZdLHgpKXJldHVybiEwO3JldHVybiExfSxfY29sbGVjdEtleUJpbmRpbmdzOmZ1bmN0aW9uKCl7dmFyIHg9dGhpcy5iZWhhdmlvcnMubWFwKGZ1bmN0aW9uKEMpe3JldHVybiBDLmtleUJpbmRpbmdzfSk7LTE9PT14LmluZGV4T2YodGhpcy5rZXlCaW5kaW5ncykmJngucHVzaCh0aGlzLmtleUJpbmRpbmdzKTtyZXR1cm4geH0sCl9wcmVwS2V5QmluZGluZ3M6ZnVuY3Rpb24oKXt0aGlzLl9rZXlCaW5kaW5ncz17fTt0aGlzLl9jb2xsZWN0S2V5QmluZGluZ3MoKS5mb3JFYWNoKGZ1bmN0aW9uKEYpe2Zvcih2YXIgRCBpbiBGKXRoaXMuX2FkZEtleUJpbmRpbmcoRCxGW0RdKX0sdGhpcyk7Zm9yKHZhciB4IGluIHRoaXMuX2ltcGVyYXRpdmVLZXlCaW5kaW5ncyl0aGlzLl9hZGRLZXlCaW5kaW5nKHgsdGhpcy5faW1wZXJhdGl2ZUtleUJpbmRpbmdzW3hdKTtmb3IodmFyIEMgaW4gdGhpcy5fa2V5QmluZGluZ3MpdGhpcy5fa2V5QmluZGluZ3NbQ10uc29ydChmdW5jdGlvbihGLEQpe0Y9RlswXS5oYXNNb2RpZmllcnM7cmV0dXJuIEY9PT1EWzBdLmhhc01vZGlmaWVycz8wOkY/LTE6MX0pfSxfYWRkS2V5QmluZGluZzpmdW5jdGlvbih4LEMpe2soeCkuZm9yRWFjaChmdW5jdGlvbihGKXt0aGlzLl9rZXlCaW5kaW5nc1tGLmV2ZW50XT10aGlzLl9rZXlCaW5kaW5nc1tGLmV2ZW50XXx8W107dGhpcy5fa2V5QmluZGluZ3NbRi5ldmVudF0ucHVzaChbRiwKQ10pfSx0aGlzKX0sX3Jlc2V0S2V5RXZlbnRMaXN0ZW5lcnM6ZnVuY3Rpb24oKXt0aGlzLl91bmxpc3RlbktleUV2ZW50TGlzdGVuZXJzKCk7dGhpcy5pc0F0dGFjaGVkJiZ0aGlzLl9saXN0ZW5LZXlFdmVudExpc3RlbmVycygpfSxfbGlzdGVuS2V5RXZlbnRMaXN0ZW5lcnM6ZnVuY3Rpb24oKXt0aGlzLmtleUV2ZW50VGFyZ2V0JiZPYmplY3Qua2V5cyh0aGlzLl9rZXlCaW5kaW5ncykuZm9yRWFjaChmdW5jdGlvbih4KXt2YXIgQz10aGlzLl9vbktleUJpbmRpbmdFdmVudC5iaW5kKHRoaXMsdGhpcy5fa2V5QmluZGluZ3NbeF0pO3RoaXMuX2JvdW5kS2V5SGFuZGxlcnMucHVzaChbdGhpcy5rZXlFdmVudFRhcmdldCx4LENdKTt0aGlzLmtleUV2ZW50VGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoeCxDKX0sdGhpcyl9LF91bmxpc3RlbktleUV2ZW50TGlzdGVuZXJzOmZ1bmN0aW9uKCl7Zm9yKHZhciB4LEMsRjt0aGlzLl9ib3VuZEtleUhhbmRsZXJzLmxlbmd0aDspeD10aGlzLl9ib3VuZEtleUhhbmRsZXJzLnBvcCgpLApDPXhbMF0sRj14WzFdLHg9eFsyXSxDLnJlbW92ZUV2ZW50TGlzdGVuZXIoRix4KX0sX29uS2V5QmluZGluZ0V2ZW50OmZ1bmN0aW9uKHgsQyl7dGhpcy5zdG9wS2V5Ym9hcmRFdmVudFByb3BhZ2F0aW9uJiZDLnN0b3BQcm9wYWdhdGlvbigpO2lmKCFDLmRlZmF1bHRQcmV2ZW50ZWQpZm9yKHZhciBGPTA7Rjx4Lmxlbmd0aDtGKyspe3ZhciBEPXhbRl1bMF0sQj14W0ZdWzFdO2lmKGcoRCxDKSYmKHRoaXMuX3RyaWdnZXJLZXlIYW5kbGVyKEQsQixDKSxDLmRlZmF1bHRQcmV2ZW50ZWQpKWJyZWFrfX0sX3RyaWdnZXJLZXlIYW5kbGVyOmZ1bmN0aW9uKHgsQyxGKXt2YXIgRD1PYmplY3QuY3JlYXRlKHgpO0Qua2V5Ym9hcmRFdmVudD1GO3g9bmV3IEN1c3RvbUV2ZW50KHguZXZlbnQse2RldGFpbDpELGNhbmNlbGFibGU6ITB9KTt0aGlzW0NdLmNhbGwodGhpcyx4KTt4LmRlZmF1bHRQcmV2ZW50ZWQmJkYucHJldmVudERlZmF1bHQoKX19fSkoKTsKPC9zY3JpcHQ+CgoKCjxzY3JpcHQ+Ly9+fldFQlBBVEh+fi9pcm9uLWJlaGF2aW9ycy9pcm9uLWNvbnRyb2wtc3RhdGUuaHRtbC5qcwpQb2x5bWVyLklyb25Db250cm9sU3RhdGU9e3Byb3BlcnRpZXM6e2ZvY3VzZWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxub3RpZnk6ITAscmVhZE9ubHk6ITAscmVmbGVjdFRvQXR0cmlidXRlOiEwfSxkaXNhYmxlZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExLG5vdGlmeTohMCxvYnNlcnZlcjoiX2Rpc2FibGVkQ2hhbmdlZCIscmVmbGVjdFRvQXR0cmlidXRlOiEwfSxfb2xkVGFiSW5kZXg6e3R5cGU6U3RyaW5nfSxfYm91bmRGb2N1c0JsdXJIYW5kbGVyOnt0eXBlOkZ1bmN0aW9uLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2ZvY3VzQmx1ckhhbmRsZXIuYmluZCh0aGlzKX19LF9faGFuZGxlRXZlbnRSZXRhcmdldGluZzp7dHlwZTpCb29sZWFuLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuc2hhZG93Um9vdCYmIVBvbHltZXIuRWxlbWVudH19fSxvYnNlcnZlcnM6WyJfY2hhbmdlZENvbnRyb2xTdGF0ZShmb2N1c2VkLCBkaXNhYmxlZCkiXSxyZWFkeTpmdW5jdGlvbigpe3RoaXMuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLAp0aGlzLl9ib3VuZEZvY3VzQmx1ckhhbmRsZXIsITApO3RoaXMuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsdGhpcy5fYm91bmRGb2N1c0JsdXJIYW5kbGVyLCEwKX0sX2ZvY3VzQmx1ckhhbmRsZXI6ZnVuY3Rpb24oYSl7aWYoUG9seW1lci5FbGVtZW50KXRoaXMuX3NldEZvY3VzZWQoImZvY3VzIj09PWEudHlwZSk7ZWxzZSBpZihhLnRhcmdldD09PXRoaXMpdGhpcy5fc2V0Rm9jdXNlZCgiZm9jdXMiPT09YS50eXBlKTtlbHNlIGlmKHRoaXMuX19oYW5kbGVFdmVudFJldGFyZ2V0aW5nKXt2YXIgYz1Qb2x5bWVyLmRvbShhKS5sb2NhbFRhcmdldDt0aGlzLmlzTGlnaHREZXNjZW5kYW50KGMpfHx0aGlzLmZpcmUoYS50eXBlLHtzb3VyY2VFdmVudDphfSx7bm9kZTp0aGlzLGJ1YmJsZXM6YS5idWJibGVzLGNhbmNlbGFibGU6YS5jYW5jZWxhYmxlfSl9fSxfZGlzYWJsZWRDaGFuZ2VkOmZ1bmN0aW9uKGEpe3RoaXMuc2V0QXR0cmlidXRlKCJhcmlhLWRpc2FibGVkIixhPyJ0cnVlIjoiZmFsc2UiKTsKdGhpcy5zdHlsZS5wb2ludGVyRXZlbnRzPWE/Im5vbmUiOiIiO2E/KHRoaXMuX29sZFRhYkluZGV4PXRoaXMuZ2V0QXR0cmlidXRlKCJ0YWJpbmRleCIpLHRoaXMuX3NldEZvY3VzZWQoITEpLHRoaXMudGFiSW5kZXg9LTEsdGhpcy5ibHVyKCkpOnZvaWQgMCE9PXRoaXMuX29sZFRhYkluZGV4JiYobnVsbD09PXRoaXMuX29sZFRhYkluZGV4P3RoaXMucmVtb3ZlQXR0cmlidXRlKCJ0YWJpbmRleCIpOnRoaXMuc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsdGhpcy5fb2xkVGFiSW5kZXgpKX0sX2NoYW5nZWRDb250cm9sU3RhdGU6ZnVuY3Rpb24oKXt0aGlzLl9jb250cm9sU3RhdGVDaGFuZ2VkJiZ0aGlzLl9jb250cm9sU3RhdGVDaGFuZ2VkKCl9fTsKPC9zY3JpcHQ+CgoKPHNjcmlwdD4vL35+V0VCUEFUSH5+L2lyb24tYmVoYXZpb3JzL2lyb24tYnV0dG9uLXN0YXRlLmh0bWwuanMKUG9seW1lci5Jcm9uQnV0dG9uU3RhdGVJbXBsPXtwcm9wZXJ0aWVzOntwcmVzc2VkOnt0eXBlOkJvb2xlYW4scmVhZE9ubHk6ITAsdmFsdWU6ITEscmVmbGVjdFRvQXR0cmlidXRlOiEwLG9ic2VydmVyOiJfcHJlc3NlZENoYW5nZWQifSx0b2dnbGVzOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEscmVmbGVjdFRvQXR0cmlidXRlOiEwfSxhY3RpdmU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxub3RpZnk6ITAscmVmbGVjdFRvQXR0cmlidXRlOiEwfSxwb2ludGVyRG93bjp7dHlwZTpCb29sZWFuLHJlYWRPbmx5OiEwLHZhbHVlOiExfSxyZWNlaXZlZEZvY3VzRnJvbUtleWJvYXJkOnt0eXBlOkJvb2xlYW4scmVhZE9ubHk6ITB9LGFyaWFBY3RpdmVBdHRyaWJ1dGU6e3R5cGU6U3RyaW5nLHZhbHVlOiJhcmlhLXByZXNzZWQiLG9ic2VydmVyOiJfYXJpYUFjdGl2ZUF0dHJpYnV0ZUNoYW5nZWQifX0sbGlzdGVuZXJzOntkb3duOiJfZG93bkhhbmRsZXIiLHVwOiJfdXBIYW5kbGVyIix0YXA6Il90YXBIYW5kbGVyIn0sCm9ic2VydmVyczpbIl9mb2N1c0NoYW5nZWQoZm9jdXNlZCkiLCJfYWN0aXZlQ2hhbmdlZChhY3RpdmUsIGFyaWFBY3RpdmVBdHRyaWJ1dGUpIl0sa2V5QmluZGluZ3M6eyJlbnRlcjprZXlkb3duIjoiX2FzeW5jQ2xpY2siLCJzcGFjZTprZXlkb3duIjoiX3NwYWNlS2V5RG93bkhhbmRsZXIiLCJzcGFjZTprZXl1cCI6Il9zcGFjZUtleVVwSGFuZGxlciJ9LF9tb3VzZUV2ZW50UmU6L15tb3VzZS8sX3RhcEhhbmRsZXI6ZnVuY3Rpb24oKXt0aGlzLnRvZ2dsZXM/dGhpcy5fdXNlckFjdGl2YXRlKCF0aGlzLmFjdGl2ZSk6dGhpcy5hY3RpdmU9ITF9LF9mb2N1c0NoYW5nZWQ6ZnVuY3Rpb24oYSl7dGhpcy5fZGV0ZWN0S2V5Ym9hcmRGb2N1cyhhKTthfHx0aGlzLl9zZXRQcmVzc2VkKCExKX0sX2RldGVjdEtleWJvYXJkRm9jdXM6ZnVuY3Rpb24oYSl7dGhpcy5fc2V0UmVjZWl2ZWRGb2N1c0Zyb21LZXlib2FyZCghdGhpcy5wb2ludGVyRG93biYmYSl9LF91c2VyQWN0aXZhdGU6ZnVuY3Rpb24oYSl7dGhpcy5hY3RpdmUhPT0KYSYmKHRoaXMuYWN0aXZlPWEsdGhpcy5maXJlKCJjaGFuZ2UiKSl9LF9kb3duSGFuZGxlcjpmdW5jdGlvbigpe3RoaXMuX3NldFBvaW50ZXJEb3duKCEwKTt0aGlzLl9zZXRQcmVzc2VkKCEwKTt0aGlzLl9zZXRSZWNlaXZlZEZvY3VzRnJvbUtleWJvYXJkKCExKX0sX3VwSGFuZGxlcjpmdW5jdGlvbigpe3RoaXMuX3NldFBvaW50ZXJEb3duKCExKTt0aGlzLl9zZXRQcmVzc2VkKCExKX0sX3NwYWNlS2V5RG93bkhhbmRsZXI6ZnVuY3Rpb24oYSl7YT1hLmRldGFpbC5rZXlib2FyZEV2ZW50O3ZhciBjPVBvbHltZXIuZG9tKGEpLmxvY2FsVGFyZ2V0O3RoaXMuaXNMaWdodERlc2NlbmRhbnQoYyl8fChhLnByZXZlbnREZWZhdWx0KCksYS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKSx0aGlzLl9zZXRQcmVzc2VkKCEwKSl9LF9zcGFjZUtleVVwSGFuZGxlcjpmdW5jdGlvbihhKXthPVBvbHltZXIuZG9tKGEuZGV0YWlsLmtleWJvYXJkRXZlbnQpLmxvY2FsVGFyZ2V0O3RoaXMuaXNMaWdodERlc2NlbmRhbnQoYSl8fAoodGhpcy5wcmVzc2VkJiZ0aGlzLl9hc3luY0NsaWNrKCksdGhpcy5fc2V0UHJlc3NlZCghMSkpfSxfYXN5bmNDbGljazpmdW5jdGlvbigpe3RoaXMuYXN5bmMoZnVuY3Rpb24oKXt0aGlzLmNsaWNrKCl9LDEpfSxfcHJlc3NlZENoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLl9jaGFuZ2VkQnV0dG9uU3RhdGUoKX0sX2FyaWFBY3RpdmVBdHRyaWJ1dGVDaGFuZ2VkOmZ1bmN0aW9uKGEsYyl7YyYmYyE9YSYmdGhpcy5oYXNBdHRyaWJ1dGUoYykmJnRoaXMucmVtb3ZlQXR0cmlidXRlKGMpfSxfYWN0aXZlQ2hhbmdlZDpmdW5jdGlvbihhKXt0aGlzLnRvZ2dsZXM/dGhpcy5zZXRBdHRyaWJ1dGUodGhpcy5hcmlhQWN0aXZlQXR0cmlidXRlLGE/InRydWUiOiJmYWxzZSIpOnRoaXMucmVtb3ZlQXR0cmlidXRlKHRoaXMuYXJpYUFjdGl2ZUF0dHJpYnV0ZSk7dGhpcy5fY2hhbmdlZEJ1dHRvblN0YXRlKCl9LF9jb250cm9sU3RhdGVDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5kaXNhYmxlZD90aGlzLl9zZXRQcmVzc2VkKCExKToKdGhpcy5fY2hhbmdlZEJ1dHRvblN0YXRlKCl9LF9jaGFuZ2VkQnV0dG9uU3RhdGU6ZnVuY3Rpb24oKXt0aGlzLl9idXR0b25TdGF0ZUNoYW5nZWQmJnRoaXMuX2J1dHRvblN0YXRlQ2hhbmdlZCgpfX07UG9seW1lci5Jcm9uQnV0dG9uU3RhdGU9W1BvbHltZXIuSXJvbkExMXlLZXlzQmVoYXZpb3IsUG9seW1lci5Jcm9uQnV0dG9uU3RhdGVJbXBsXTsKPC9zY3JpcHQ+CgoKCgoKCgoKPGRvbS1tb2R1bGUgaWQ9InBhcGVyLXJpcHBsZSI+CgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBib3JkZXItcmFkaXVzOiBpbmhlcml0OwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgdG9wOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwoKICAgICAgICAvKiBTZWUgUG9seW1lckVsZW1lbnRzL3BhcGVyLWJlaGF2aW9ycy9pc3N1ZXMvMzQuIE9uIG5vbi1DaHJvbWUgYnJvd3NlcnMsCiAgICAgICAgICogY3JlYXRpbmcgYSBub2RlICh3aXRoIGEgcG9zaXRpb246YWJzb2x1dGUpIGluIHRoZSBtaWRkbGUgb2YgYW4gZXZlbnQKICAgICAgICAgKiBoYW5kbGVyICJpbnRlcnJ1cHRzIiB0aGF0IGV2ZW50IGhhbmRsZXIgKHdoaWNoIGhhcHBlbnMgd2hlbiB0aGUKICAgICAgICAgKiByaXBwbGUgaXMgY3JlYXRlZCBvbiBkZW1hbmQpICovCiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIH0KCiAgICAgIDpob3N0KFthbmltYXRpbmddKSB7CiAgICAgICAgLyogVGhpcyByZXNvbHZlcyBhIHJlbmRlcmluZyBpc3N1ZSBpbiBDaHJvbWUgKGFzIG9mIDQwKSB3aGVyZSB0aGUKICAgICAgICAgICByaXBwbGUgaXMgbm90IHByb3Blcmx5IGNsaXBwZWQgYnkgaXRzIHBhcmVudCAod2hpY2ggbWF5IGhhdmUKICAgICAgICAgICByb3VuZGVkIGNvcm5lcnMpLiBTZWU6IGh0dHA6Ly9qc2Jpbi5jb20vdGVtZXhhLzQKCiAgICAgICAgICAgTm90ZTogV2Ugb25seSBhcHBseSB0aGlzIHN0eWxlIGNvbmRpdGlvbmFsbHkuIE90aGVyd2lzZSwgdGhlIGJyb3dzZXIKICAgICAgICAgICB3aWxsIGNyZWF0ZSBhIG5ldyBjb21wb3NpdGluZyBsYXllciBmb3IgZXZlcnkgcmlwcGxlIGVsZW1lbnQgb24gdGhlCiAgICAgICAgICAgcGFnZSwgYW5kIHRoYXQgd291bGQgYmUgYmFkLiAqLwogICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgMCk7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwLCAwLCAwKTsKICAgICAgfQoKICAgICAgI2JhY2tncm91bmQsCiAgICAgICN3YXZlcywKICAgICAgLndhdmUtY29udGFpbmVyLAogICAgICAud2F2ZSB7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgfQoKICAgICAgI2JhY2tncm91bmQsCiAgICAgIC53YXZlIHsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICB9CgogICAgICAjd2F2ZXMsCiAgICAgIC53YXZlIHsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB9CgogICAgICAud2F2ZS1jb250YWluZXIsCiAgICAgIC53YXZlIHsKICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICAgIH0KCiAgICAgIDpob3N0KC5jaXJjbGUpICNiYWNrZ3JvdW5kLAogICAgICA6aG9zdCguY2lyY2xlKSAjd2F2ZXMgewogICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgfQoKICAgICAgOmhvc3QoLmNpcmNsZSkgLndhdmUtY29udGFpbmVyIHsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxkaXYgaWQ9ImJhY2tncm91bmQiPjwvZGl2PgogICAgPGRpdiBpZD0id2F2ZXMiPjwvZGl2PgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT4KPHNjcmlwdD4vL35+V0VCUEFUSH5+L3BhcGVyLXJpcHBsZS9wYXBlci1yaXBwbGUuaHRtbC5qcwooZnVuY3Rpb24oKXtmdW5jdGlvbiBhKGYpe3RoaXMuZWxlbWVudD1mO3RoaXMud2lkdGg9dGhpcy5ib3VuZGluZ1JlY3Qud2lkdGg7dGhpcy5oZWlnaHQ9dGhpcy5ib3VuZGluZ1JlY3QuaGVpZ2h0O3RoaXMuc2l6ZT1NYXRoLm1heCh0aGlzLndpZHRoLHRoaXMuaGVpZ2h0KX1mdW5jdGlvbiBjKGYpe3RoaXMuZWxlbWVudD1mO3RoaXMuY29sb3I9d2luZG93LmdldENvbXB1dGVkU3R5bGUoZikuY29sb3I7dGhpcy53YXZlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3RoaXMud2F2ZUNvbnRhaW5lcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTt0aGlzLndhdmUuc3R5bGUuYmFja2dyb3VuZENvbG9yPXRoaXMuY29sb3I7dGhpcy53YXZlLmNsYXNzTGlzdC5hZGQoIndhdmUiKTt0aGlzLndhdmVDb250YWluZXIuY2xhc3NMaXN0LmFkZCgid2F2ZS1jb250YWluZXIiKTtQb2x5bWVyLmRvbSh0aGlzLndhdmVDb250YWluZXIpLmFwcGVuZENoaWxkKHRoaXMud2F2ZSk7dGhpcy5yZXNldEludGVyYWN0aW9uU3RhdGUoKX0KdmFyIGQ9e2Rpc3RhbmNlOmZ1bmN0aW9uKGYsZyxsLGspe2YtPWw7Zy09aztyZXR1cm4gTWF0aC5zcXJ0KGYqZitnKmcpfSxub3c6d2luZG93LnBlcmZvcm1hbmNlJiZ3aW5kb3cucGVyZm9ybWFuY2Uubm93P3dpbmRvdy5wZXJmb3JtYW5jZS5ub3cuYmluZCh3aW5kb3cucGVyZm9ybWFuY2UpOkRhdGUubm93fTthLnByb3RvdHlwZT17Z2V0IGJvdW5kaW5nUmVjdCgpe3JldHVybiB0aGlzLmVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCl9LGZ1cnRoZXN0Q29ybmVyRGlzdGFuY2VGcm9tOmZ1bmN0aW9uKGYsZyl7dmFyIGw9ZC5kaXN0YW5jZShmLGcsMCwwKSxrPWQuZGlzdGFuY2UoZixnLHRoaXMud2lkdGgsMCksbT1kLmRpc3RhbmNlKGYsZywwLHRoaXMuaGVpZ2h0KTtmPWQuZGlzdGFuY2UoZixnLHRoaXMud2lkdGgsdGhpcy5oZWlnaHQpO3JldHVybiBNYXRoLm1heChsLGssbSxmKX19O2MuTUFYX1JBRElVUz0zMDA7Yy5wcm90b3R5cGU9e2dldCByZWNlbnRlcnMoKXtyZXR1cm4gdGhpcy5lbGVtZW50LnJlY2VudGVyc30sCmdldCBjZW50ZXIoKXtyZXR1cm4gdGhpcy5lbGVtZW50LmNlbnRlcn0sZ2V0IG1vdXNlRG93bkVsYXBzZWQoKXtpZighdGhpcy5tb3VzZURvd25TdGFydClyZXR1cm4gMDt2YXIgZj1kLm5vdygpLXRoaXMubW91c2VEb3duU3RhcnQ7dGhpcy5tb3VzZVVwU3RhcnQmJihmLT10aGlzLm1vdXNlVXBFbGFwc2VkKTtyZXR1cm4gZn0sZ2V0IG1vdXNlVXBFbGFwc2VkKCl7cmV0dXJuIHRoaXMubW91c2VVcFN0YXJ0P2Qubm93KCktdGhpcy5tb3VzZVVwU3RhcnQ6MH0sZ2V0IG1vdXNlRG93bkVsYXBzZWRTZWNvbmRzKCl7cmV0dXJuIHRoaXMubW91c2VEb3duRWxhcHNlZC8xRTN9LGdldCBtb3VzZVVwRWxhcHNlZFNlY29uZHMoKXtyZXR1cm4gdGhpcy5tb3VzZVVwRWxhcHNlZC8xRTN9LGdldCBtb3VzZUludGVyYWN0aW9uU2Vjb25kcygpe3JldHVybiB0aGlzLm1vdXNlRG93bkVsYXBzZWRTZWNvbmRzK3RoaXMubW91c2VVcEVsYXBzZWRTZWNvbmRzfSxnZXQgaW5pdGlhbE9wYWNpdHkoKXtyZXR1cm4gdGhpcy5lbGVtZW50LmluaXRpYWxPcGFjaXR5fSwKZ2V0IG9wYWNpdHlEZWNheVZlbG9jaXR5KCl7cmV0dXJuIHRoaXMuZWxlbWVudC5vcGFjaXR5RGVjYXlWZWxvY2l0eX0sZ2V0IHJhZGl1cygpe3ZhciBmPTEuMSpNYXRoLm1pbihNYXRoLnNxcnQodGhpcy5jb250YWluZXJNZXRyaWNzLndpZHRoKnRoaXMuY29udGFpbmVyTWV0cmljcy53aWR0aCt0aGlzLmNvbnRhaW5lck1ldHJpY3MuaGVpZ2h0KnRoaXMuY29udGFpbmVyTWV0cmljcy5oZWlnaHQpLGMuTUFYX1JBRElVUykrNTtyZXR1cm4gTWF0aC5hYnMoZiooMS1NYXRoLnBvdyg4MCwtKHRoaXMubW91c2VJbnRlcmFjdGlvblNlY29uZHMvKDEuMS1mL2MuTUFYX1JBRElVUyouMikpKSkpfSxnZXQgb3BhY2l0eSgpe3JldHVybiB0aGlzLm1vdXNlVXBTdGFydD9NYXRoLm1heCgwLHRoaXMuaW5pdGlhbE9wYWNpdHktdGhpcy5tb3VzZVVwRWxhcHNlZFNlY29uZHMqdGhpcy5vcGFjaXR5RGVjYXlWZWxvY2l0eSk6dGhpcy5pbml0aWFsT3BhY2l0eX0sZ2V0IG91dGVyT3BhY2l0eSgpe3JldHVybiBNYXRoLm1heCgwLApNYXRoLm1pbiguMyp0aGlzLm1vdXNlVXBFbGFwc2VkU2Vjb25kcyx0aGlzLm9wYWNpdHkpKX0sZ2V0IGlzT3BhY2l0eUZ1bGx5RGVjYXllZCgpe3JldHVybi4wMT50aGlzLm9wYWNpdHkmJnRoaXMucmFkaXVzPj1NYXRoLm1pbih0aGlzLm1heFJhZGl1cyxjLk1BWF9SQURJVVMpfSxnZXQgaXNSZXN0aW5nQXRNYXhSYWRpdXMoKXtyZXR1cm4gdGhpcy5vcGFjaXR5Pj10aGlzLmluaXRpYWxPcGFjaXR5JiZ0aGlzLnJhZGl1cz49TWF0aC5taW4odGhpcy5tYXhSYWRpdXMsYy5NQVhfUkFESVVTKX0sZ2V0IGlzQW5pbWF0aW9uQ29tcGxldGUoKXtyZXR1cm4gdGhpcy5tb3VzZVVwU3RhcnQ/dGhpcy5pc09wYWNpdHlGdWxseURlY2F5ZWQ6dGhpcy5pc1Jlc3RpbmdBdE1heFJhZGl1c30sZ2V0IHRyYW5zbGF0aW9uRnJhY3Rpb24oKXtyZXR1cm4gTWF0aC5taW4oMSx0aGlzLnJhZGl1cy90aGlzLmNvbnRhaW5lck1ldHJpY3Muc2l6ZSoyL01hdGguc3FydCgyKSl9LGdldCB4Tm93KCl7cmV0dXJuIHRoaXMueEVuZD8KdGhpcy54U3RhcnQrdGhpcy50cmFuc2xhdGlvbkZyYWN0aW9uKih0aGlzLnhFbmQtdGhpcy54U3RhcnQpOnRoaXMueFN0YXJ0fSxnZXQgeU5vdygpe3JldHVybiB0aGlzLnlFbmQ/dGhpcy55U3RhcnQrdGhpcy50cmFuc2xhdGlvbkZyYWN0aW9uKih0aGlzLnlFbmQtdGhpcy55U3RhcnQpOnRoaXMueVN0YXJ0fSxnZXQgaXNNb3VzZURvd24oKXtyZXR1cm4gdGhpcy5tb3VzZURvd25TdGFydCYmIXRoaXMubW91c2VVcFN0YXJ0fSxyZXNldEludGVyYWN0aW9uU3RhdGU6ZnVuY3Rpb24oKXt0aGlzLnNsaWRlRGlzdGFuY2U9dGhpcy55RW5kPXRoaXMueEVuZD10aGlzLnlTdGFydD10aGlzLnhTdGFydD10aGlzLm1vdXNlVXBTdGFydD10aGlzLm1vdXNlRG93blN0YXJ0PXRoaXMubWF4UmFkaXVzPTA7dGhpcy5jb250YWluZXJNZXRyaWNzPW5ldyBhKHRoaXMuZWxlbWVudCl9LGRyYXc6ZnVuY3Rpb24oKXt0aGlzLndhdmUuc3R5bGUub3BhY2l0eT10aGlzLm9wYWNpdHk7dmFyIGY9dGhpcy5yYWRpdXMvCih0aGlzLmNvbnRhaW5lck1ldHJpY3Muc2l6ZS8yKTt2YXIgZz10aGlzLnhOb3ctdGhpcy5jb250YWluZXJNZXRyaWNzLndpZHRoLzI7dmFyIGw9dGhpcy55Tm93LXRoaXMuY29udGFpbmVyTWV0cmljcy5oZWlnaHQvMjt0aGlzLndhdmVDb250YWluZXIuc3R5bGUud2Via2l0VHJhbnNmb3JtPSJ0cmFuc2xhdGUoIitnKyJweCwgIitsKyJweCkiO3RoaXMud2F2ZUNvbnRhaW5lci5zdHlsZS50cmFuc2Zvcm09InRyYW5zbGF0ZTNkKCIrZysicHgsICIrbCsicHgsIDApIjt0aGlzLndhdmUuc3R5bGUud2Via2l0VHJhbnNmb3JtPSJzY2FsZSgiK2YrIiwiK2YrIikiO3RoaXMud2F2ZS5zdHlsZS50cmFuc2Zvcm09InNjYWxlM2QoIitmKyIsIitmKyIsMSkifSxkb3duQWN0aW9uOmZ1bmN0aW9uKGYpe3ZhciBnPXRoaXMuY29udGFpbmVyTWV0cmljcy53aWR0aC8yLGw9dGhpcy5jb250YWluZXJNZXRyaWNzLmhlaWdodC8yO3RoaXMucmVzZXRJbnRlcmFjdGlvblN0YXRlKCk7dGhpcy5tb3VzZURvd25TdGFydD0KZC5ub3coKTt0aGlzLmNlbnRlcj8odGhpcy54U3RhcnQ9Zyx0aGlzLnlTdGFydD1sLHRoaXMuc2xpZGVEaXN0YW5jZT1kLmRpc3RhbmNlKHRoaXMueFN0YXJ0LHRoaXMueVN0YXJ0LHRoaXMueEVuZCx0aGlzLnlFbmQpKToodGhpcy54U3RhcnQ9Zj9mLmRldGFpbC54LXRoaXMuY29udGFpbmVyTWV0cmljcy5ib3VuZGluZ1JlY3QubGVmdDp0aGlzLmNvbnRhaW5lck1ldHJpY3Mud2lkdGgvMix0aGlzLnlTdGFydD1mP2YuZGV0YWlsLnktdGhpcy5jb250YWluZXJNZXRyaWNzLmJvdW5kaW5nUmVjdC50b3A6dGhpcy5jb250YWluZXJNZXRyaWNzLmhlaWdodC8yKTt0aGlzLnJlY2VudGVycyYmKHRoaXMueEVuZD1nLHRoaXMueUVuZD1sLHRoaXMuc2xpZGVEaXN0YW5jZT1kLmRpc3RhbmNlKHRoaXMueFN0YXJ0LHRoaXMueVN0YXJ0LHRoaXMueEVuZCx0aGlzLnlFbmQpKTt0aGlzLm1heFJhZGl1cz10aGlzLmNvbnRhaW5lck1ldHJpY3MuZnVydGhlc3RDb3JuZXJEaXN0YW5jZUZyb20odGhpcy54U3RhcnQsCnRoaXMueVN0YXJ0KTt0aGlzLndhdmVDb250YWluZXIuc3R5bGUudG9wPSh0aGlzLmNvbnRhaW5lck1ldHJpY3MuaGVpZ2h0LXRoaXMuY29udGFpbmVyTWV0cmljcy5zaXplKS8yKyJweCI7dGhpcy53YXZlQ29udGFpbmVyLnN0eWxlLmxlZnQ9KHRoaXMuY29udGFpbmVyTWV0cmljcy53aWR0aC10aGlzLmNvbnRhaW5lck1ldHJpY3Muc2l6ZSkvMisicHgiO3RoaXMud2F2ZUNvbnRhaW5lci5zdHlsZS53aWR0aD10aGlzLmNvbnRhaW5lck1ldHJpY3Muc2l6ZSsicHgiO3RoaXMud2F2ZUNvbnRhaW5lci5zdHlsZS5oZWlnaHQ9dGhpcy5jb250YWluZXJNZXRyaWNzLnNpemUrInB4In0sdXBBY3Rpb246ZnVuY3Rpb24oKXt0aGlzLmlzTW91c2VEb3duJiYodGhpcy5tb3VzZVVwU3RhcnQ9ZC5ub3coKSl9LHJlbW92ZTpmdW5jdGlvbigpe1BvbHltZXIuZG9tKHRoaXMud2F2ZUNvbnRhaW5lci5wYXJlbnROb2RlKS5yZW1vdmVDaGlsZCh0aGlzLndhdmVDb250YWluZXIpfX07UG9seW1lcih7aXM6InBhcGVyLXJpcHBsZSIsCmJlaGF2aW9yczpbUG9seW1lci5Jcm9uQTExeUtleXNCZWhhdmlvcl0scHJvcGVydGllczp7aW5pdGlhbE9wYWNpdHk6e3R5cGU6TnVtYmVyLHZhbHVlOi4yNX0sb3BhY2l0eURlY2F5VmVsb2NpdHk6e3R5cGU6TnVtYmVyLHZhbHVlOi44fSxyZWNlbnRlcnM6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sY2VudGVyOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LHJpcHBsZXM6e3R5cGU6QXJyYXksdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm5bXX19LGFuaW1hdGluZzp7dHlwZTpCb29sZWFuLHJlYWRPbmx5OiEwLHJlZmxlY3RUb0F0dHJpYnV0ZTohMCx2YWx1ZTohMX0saG9sZERvd246e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxvYnNlcnZlcjoiX2hvbGREb3duQ2hhbmdlZCJ9LG5vaW5rOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LF9hbmltYXRpbmc6e3R5cGU6Qm9vbGVhbn0sX2JvdW5kQW5pbWF0ZTp7dHlwZTpGdW5jdGlvbix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmFuaW1hdGUuYmluZCh0aGlzKX19fSwKZ2V0IHRhcmdldCgpe3JldHVybiB0aGlzLmtleUV2ZW50VGFyZ2V0fSxrZXlCaW5kaW5nczp7ImVudGVyOmtleWRvd24iOiJfb25FbnRlcktleWRvd24iLCJzcGFjZTprZXlkb3duIjoiX29uU3BhY2VLZXlkb3duIiwic3BhY2U6a2V5dXAiOiJfb25TcGFjZUtleXVwIn0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt2YXIgZj10aGlzLmtleUV2ZW50VGFyZ2V0PTExPT10aGlzLnBhcmVudE5vZGUubm9kZVR5cGU/UG9seW1lci5kb20odGhpcykuZ2V0T3duZXJSb290KCkuaG9zdDp0aGlzLnBhcmVudE5vZGU7dGhpcy5saXN0ZW4oZiwidXAiLCJ1aVVwQWN0aW9uIik7dGhpcy5saXN0ZW4oZiwiZG93biIsInVpRG93bkFjdGlvbiIpfSxkZXRhY2hlZDpmdW5jdGlvbigpe3RoaXMudW5saXN0ZW4odGhpcy5rZXlFdmVudFRhcmdldCwidXAiLCJ1aVVwQWN0aW9uIik7dGhpcy51bmxpc3Rlbih0aGlzLmtleUV2ZW50VGFyZ2V0LCJkb3duIiwidWlEb3duQWN0aW9uIik7dGhpcy5rZXlFdmVudFRhcmdldD0KbnVsbH0sZ2V0IHNob3VsZEtlZXBBbmltYXRpbmcoKXtmb3IodmFyIGY9MDtmPHRoaXMucmlwcGxlcy5sZW5ndGg7KytmKWlmKCF0aGlzLnJpcHBsZXNbZl0uaXNBbmltYXRpb25Db21wbGV0ZSlyZXR1cm4hMDtyZXR1cm4hMX0sc2ltdWxhdGVkUmlwcGxlOmZ1bmN0aW9uKCl7dGhpcy5kb3duQWN0aW9uKG51bGwpO3RoaXMuYXN5bmMoZnVuY3Rpb24oKXt0aGlzLnVwQWN0aW9uKCl9LDEpfSx1aURvd25BY3Rpb246ZnVuY3Rpb24oZil7dGhpcy5ub2lua3x8dGhpcy5kb3duQWN0aW9uKGYpfSxkb3duQWN0aW9uOmZ1bmN0aW9uKGYpe3RoaXMuaG9sZERvd24mJjA8dGhpcy5yaXBwbGVzLmxlbmd0aHx8KHRoaXMuYWRkUmlwcGxlKCkuZG93bkFjdGlvbihmKSx0aGlzLl9hbmltYXRpbmd8fCh0aGlzLl9hbmltYXRpbmc9ITAsdGhpcy5hbmltYXRlKCkpKX0sdWlVcEFjdGlvbjpmdW5jdGlvbihmKXt0aGlzLm5vaW5rfHx0aGlzLnVwQWN0aW9uKGYpfSx1cEFjdGlvbjpmdW5jdGlvbihmKXt0aGlzLmhvbGREb3dufHwKKHRoaXMucmlwcGxlcy5mb3JFYWNoKGZ1bmN0aW9uKGcpe2cudXBBY3Rpb24oZil9KSx0aGlzLl9hbmltYXRpbmc9ITAsdGhpcy5hbmltYXRlKCkpfSxvbkFuaW1hdGlvbkNvbXBsZXRlOmZ1bmN0aW9uKCl7dGhpcy5fYW5pbWF0aW5nPSExO3RoaXMuJC5iYWNrZ3JvdW5kLnN0eWxlLmJhY2tncm91bmRDb2xvcj1udWxsO3RoaXMuZmlyZSgidHJhbnNpdGlvbmVuZCIpfSxhZGRSaXBwbGU6ZnVuY3Rpb24oKXt2YXIgZj1uZXcgYyh0aGlzKTtQb2x5bWVyLmRvbSh0aGlzLiQud2F2ZXMpLmFwcGVuZENoaWxkKGYud2F2ZUNvbnRhaW5lcik7dGhpcy4kLmJhY2tncm91bmQuc3R5bGUuYmFja2dyb3VuZENvbG9yPWYuY29sb3I7dGhpcy5yaXBwbGVzLnB1c2goZik7dGhpcy5fc2V0QW5pbWF0aW5nKCEwKTtyZXR1cm4gZn0scmVtb3ZlUmlwcGxlOmZ1bmN0aW9uKGYpe3ZhciBnPXRoaXMucmlwcGxlcy5pbmRleE9mKGYpOzA+Z3x8KHRoaXMucmlwcGxlcy5zcGxpY2UoZywxKSxmLnJlbW92ZSgpLAp0aGlzLnJpcHBsZXMubGVuZ3RofHx0aGlzLl9zZXRBbmltYXRpbmcoITEpKX0sYW5pbWF0ZTpmdW5jdGlvbigpe2lmKHRoaXMuX2FuaW1hdGluZyl7dmFyIGY7Zm9yKGY9MDtmPHRoaXMucmlwcGxlcy5sZW5ndGg7KytmKXt2YXIgZz10aGlzLnJpcHBsZXNbZl07Zy5kcmF3KCk7dGhpcy4kLmJhY2tncm91bmQuc3R5bGUub3BhY2l0eT1nLm91dGVyT3BhY2l0eTtnLmlzT3BhY2l0eUZ1bGx5RGVjYXllZCYmIWcuaXNSZXN0aW5nQXRNYXhSYWRpdXMmJnRoaXMucmVtb3ZlUmlwcGxlKGcpfWlmKHRoaXMuc2hvdWxkS2VlcEFuaW1hdGluZ3x8MCE9PXRoaXMucmlwcGxlcy5sZW5ndGgpd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSh0aGlzLl9ib3VuZEFuaW1hdGUpO2Vsc2UgdGhpcy5vbkFuaW1hdGlvbkNvbXBsZXRlKCl9fSxfb25FbnRlcktleWRvd246ZnVuY3Rpb24oKXt0aGlzLnVpRG93bkFjdGlvbigpO3RoaXMuYXN5bmModGhpcy51aVVwQWN0aW9uLDEpfSxfb25TcGFjZUtleWRvd246ZnVuY3Rpb24oKXt0aGlzLnVpRG93bkFjdGlvbigpfSwKX29uU3BhY2VLZXl1cDpmdW5jdGlvbigpe3RoaXMudWlVcEFjdGlvbigpfSxfaG9sZERvd25DaGFuZ2VkOmZ1bmN0aW9uKGYsZyl7dm9pZCAwIT09ZyYmKGY/dGhpcy5kb3duQWN0aW9uKCk6dGhpcy51cEFjdGlvbigpKX19KX0pKCk7Cjwvc2NyaXB0PgoKCjxzY3JpcHQ+Ly9+fldFQlBBVEh+fi9wYXBlci1iZWhhdmlvcnMvcGFwZXItcmlwcGxlLWJlaGF2aW9yLmh0bWwuanMKUG9seW1lci5QYXBlclJpcHBsZUJlaGF2aW9yPXtwcm9wZXJ0aWVzOntub2luazp7dHlwZTpCb29sZWFuLG9ic2VydmVyOiJfbm9pbmtDaGFuZ2VkIn0sX3JpcHBsZUNvbnRhaW5lcjp7dHlwZTpPYmplY3R9fSxfYnV0dG9uU3RhdGVDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5mb2N1c2VkJiZ0aGlzLmVuc3VyZVJpcHBsZSgpfSxfZG93bkhhbmRsZXI6ZnVuY3Rpb24oYSl7UG9seW1lci5Jcm9uQnV0dG9uU3RhdGVJbXBsLl9kb3duSGFuZGxlci5jYWxsKHRoaXMsYSk7dGhpcy5wcmVzc2VkJiZ0aGlzLmVuc3VyZVJpcHBsZShhKX0sZW5zdXJlUmlwcGxlOmZ1bmN0aW9uKGEpe2lmKCF0aGlzLmhhc1JpcHBsZSgpKXt0aGlzLl9yaXBwbGU9dGhpcy5fY3JlYXRlUmlwcGxlKCk7dGhpcy5fcmlwcGxlLm5vaW5rPXRoaXMubm9pbms7dmFyIGM9dGhpcy5fcmlwcGxlQ29udGFpbmVyfHx0aGlzLnJvb3Q7YyYmUG9seW1lci5kb20oYykuYXBwZW5kQ2hpbGQodGhpcy5fcmlwcGxlKTtpZihhKXtjPQpQb2x5bWVyLmRvbSh0aGlzLl9yaXBwbGVDb250YWluZXJ8fHRoaXMpO3ZhciBkPVBvbHltZXIuZG9tKGEpLnJvb3RUYXJnZXQ7Yy5kZWVwQ29udGFpbnMoZCkmJnRoaXMuX3JpcHBsZS51aURvd25BY3Rpb24oYSl9fX0sZ2V0UmlwcGxlOmZ1bmN0aW9uKCl7dGhpcy5lbnN1cmVSaXBwbGUoKTtyZXR1cm4gdGhpcy5fcmlwcGxlfSxoYXNSaXBwbGU6ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuX3JpcHBsZX0sX2NyZWF0ZVJpcHBsZTpmdW5jdGlvbigpe3JldHVybiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJwYXBlci1yaXBwbGUiKX0sX25vaW5rQ2hhbmdlZDpmdW5jdGlvbihhKXt0aGlzLmhhc1JpcHBsZSgpJiYodGhpcy5fcmlwcGxlLm5vaW5rPWEpfX07Cjwvc2NyaXB0PgoKCjxzY3JpcHQ+Ly9+fldFQlBBVEh+fi9wYXBlci1iZWhhdmlvcnMvcGFwZXItYnV0dG9uLWJlaGF2aW9yLmh0bWwuanMKUG9seW1lci5QYXBlckJ1dHRvbkJlaGF2aW9ySW1wbD17cHJvcGVydGllczp7ZWxldmF0aW9uOnt0eXBlOk51bWJlcixyZWZsZWN0VG9BdHRyaWJ1dGU6ITAscmVhZE9ubHk6ITB9fSxvYnNlcnZlcnM6WyJfY2FsY3VsYXRlRWxldmF0aW9uKGZvY3VzZWQsIGRpc2FibGVkLCBhY3RpdmUsIHByZXNzZWQsIHJlY2VpdmVkRm9jdXNGcm9tS2V5Ym9hcmQpIiwiX2NvbXB1dGVLZXlib2FyZENsYXNzKHJlY2VpdmVkRm9jdXNGcm9tS2V5Ym9hcmQpIl0saG9zdEF0dHJpYnV0ZXM6e3JvbGU6ImJ1dHRvbiIsdGFiaW5kZXg6IjAiLGFuaW1hdGVkOiEwfSxfY2FsY3VsYXRlRWxldmF0aW9uOmZ1bmN0aW9uKCl7dmFyIGE9MTt0aGlzLmRpc2FibGVkP2E9MDp0aGlzLmFjdGl2ZXx8dGhpcy5wcmVzc2VkP2E9NDp0aGlzLnJlY2VpdmVkRm9jdXNGcm9tS2V5Ym9hcmQmJihhPTMpO3RoaXMuX3NldEVsZXZhdGlvbihhKX0sX2NvbXB1dGVLZXlib2FyZENsYXNzOmZ1bmN0aW9uKGEpe3RoaXMudG9nZ2xlQ2xhc3MoImtleWJvYXJkLWZvY3VzIiwKYSl9LF9zcGFjZUtleURvd25IYW5kbGVyOmZ1bmN0aW9uKGEpe1BvbHltZXIuSXJvbkJ1dHRvblN0YXRlSW1wbC5fc3BhY2VLZXlEb3duSGFuZGxlci5jYWxsKHRoaXMsYSk7dGhpcy5oYXNSaXBwbGUoKSYmMT50aGlzLmdldFJpcHBsZSgpLnJpcHBsZXMubGVuZ3RoJiZ0aGlzLl9yaXBwbGUudWlEb3duQWN0aW9uKCl9LF9zcGFjZUtleVVwSGFuZGxlcjpmdW5jdGlvbihhKXtQb2x5bWVyLklyb25CdXR0b25TdGF0ZUltcGwuX3NwYWNlS2V5VXBIYW5kbGVyLmNhbGwodGhpcyxhKTt0aGlzLmhhc1JpcHBsZSgpJiZ0aGlzLl9yaXBwbGUudWlVcEFjdGlvbigpfX07UG9seW1lci5QYXBlckJ1dHRvbkJlaGF2aW9yPVtQb2x5bWVyLklyb25CdXR0b25TdGF0ZSxQb2x5bWVyLklyb25Db250cm9sU3RhdGUsUG9seW1lci5QYXBlclJpcHBsZUJlaGF2aW9yLFBvbHltZXIuUGFwZXJCdXR0b25CZWhhdmlvckltcGxdOwo8L3NjcmlwdD4KCgoKCjxjdXN0b20tc3R5bGU+CiAgPHN0eWxlIGlzPSJjdXN0b20tc3R5bGUiPgogICAgaHRtbCB7CgogICAgICAtLXNoYWRvdy10cmFuc2l0aW9uOiB7CiAgICAgICAgdHJhbnNpdGlvbjogYm94LXNoYWRvdyAwLjI4cyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpOwogICAgICB9OwoKICAgICAgLS1zaGFkb3ctbm9uZTogewogICAgICAgIGJveC1zaGFkb3c6IG5vbmU7CiAgICAgIH07CgogICAgICAvKiBmcm9tIGh0dHA6Ly9jb2RlcGVuLmlvL3NoeW5kbWFuL3Blbi9jNTM5NGRkZjJlOGIyYTVjOTE4NTkwNGI1NzQyMWNkYiAqLwoKICAgICAgLS1zaGFkb3ctZWxldmF0aW9uLTJkcDogewogICAgICAgIGJveC1zaGFkb3c6IDAgMnB4IDJweCAwIHJnYmEoMCwgMCwgMCwgMC4xNCksCiAgICAgICAgICAgICAgICAgICAgMCAxcHggNXB4IDAgcmdiYSgwLCAwLCAwLCAwLjEyKSwKICAgICAgICAgICAgICAgICAgICAwIDNweCAxcHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMik7CiAgICAgIH07CgogICAgICAtLXNoYWRvdy1lbGV2YXRpb24tM2RwOiB7CiAgICAgICAgYm94LXNoYWRvdzogMCAzcHggNHB4IDAgcmdiYSgwLCAwLCAwLCAwLjE0KSwKICAgICAgICAgICAgICAgICAgICAwIDFweCA4cHggMCByZ2JhKDAsIDAsIDAsIDAuMTIpLAogICAgICAgICAgICAgICAgICAgIDAgM3B4IDNweCAtMnB4IHJnYmEoMCwgMCwgMCwgMC40KTsKICAgICAgfTsKCiAgICAgIC0tc2hhZG93LWVsZXZhdGlvbi00ZHA6IHsKICAgICAgICBib3gtc2hhZG93OiAwIDRweCA1cHggMCByZ2JhKDAsIDAsIDAsIDAuMTQpLAogICAgICAgICAgICAgICAgICAgIDAgMXB4IDEwcHggMCByZ2JhKDAsIDAsIDAsIDAuMTIpLAogICAgICAgICAgICAgICAgICAgIDAgMnB4IDRweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC40KTsKICAgICAgfTsKCiAgICAgIC0tc2hhZG93LWVsZXZhdGlvbi02ZHA6IHsKICAgICAgICBib3gtc2hhZG93OiAwIDZweCAxMHB4IDAgcmdiYSgwLCAwLCAwLCAwLjE0KSwKICAgICAgICAgICAgICAgICAgICAwIDFweCAxOHB4IDAgcmdiYSgwLCAwLCAwLCAwLjEyKSwKICAgICAgICAgICAgICAgICAgICAwIDNweCA1cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuNCk7CiAgICAgIH07CgogICAgICAtLXNoYWRvdy1lbGV2YXRpb24tOGRwOiB7CiAgICAgICAgYm94LXNoYWRvdzogMCA4cHggMTBweCAxcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwKICAgICAgICAgICAgICAgICAgICAwIDNweCAxNHB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTIpLAogICAgICAgICAgICAgICAgICAgIDAgNXB4IDVweCAtM3B4IHJnYmEoMCwgMCwgMCwgMC40KTsKICAgICAgfTsKCiAgICAgIC0tc2hhZG93LWVsZXZhdGlvbi0xMmRwOiB7CiAgICAgICAgYm94LXNoYWRvdzogMCAxMnB4IDE2cHggMXB4IHJnYmEoMCwgMCwgMCwgMC4xNCksCiAgICAgICAgICAgICAgICAgICAgMCA0cHggMjJweCAzcHggcmdiYSgwLCAwLCAwLCAwLjEyKSwKICAgICAgICAgICAgICAgICAgICAwIDZweCA3cHggLTRweCByZ2JhKDAsIDAsIDAsIDAuNCk7CiAgICAgIH07CgogICAgICAtLXNoYWRvdy1lbGV2YXRpb24tMTZkcDogewogICAgICAgIGJveC1zaGFkb3c6IDAgMTZweCAyNHB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLAogICAgICAgICAgICAgICAgICAgIDAgIDZweCAzMHB4IDVweCByZ2JhKDAsIDAsIDAsIDAuMTIpLAogICAgICAgICAgICAgICAgICAgIDAgIDhweCAxMHB4IC01cHggcmdiYSgwLCAwLCAwLCAwLjQpOwogICAgICB9OwoKICAgICAgLS1zaGFkb3ctZWxldmF0aW9uLTI0ZHA6IHsKICAgICAgICBib3gtc2hhZG93OiAwIDI0cHggMzhweCAzcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwKICAgICAgICAgICAgICAgICAgICAwIDlweCA0NnB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMTIpLAogICAgICAgICAgICAgICAgICAgIDAgMTFweCAxNXB4IC03cHggcmdiYSgwLCAwLCAwLCAwLjQpOwogICAgICB9OwogICAgfQogIDwvc3R5bGU+CjwvY3VzdG9tLXN0eWxlPgoKCgoKPGRvbS1tb2R1bGUgaWQ9InBhcGVyLW1hdGVyaWFsLXN0eWxlcyI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICA6aG9zdCwgaHRtbCB7CiAgICAgICAgLS1wYXBlci1tYXRlcmlhbDogewogICAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgfTsKICAgICAgICAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi0xOiB7CiAgICAgICAgICBAYXBwbHkgLS1zaGFkb3ctZWxldmF0aW9uLTJkcDsKICAgICAgICB9OwogICAgICAgIC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTI6IHsKICAgICAgICAgIEBhcHBseSAtLXNoYWRvdy1lbGV2YXRpb24tNGRwOwogICAgICAgIH07CiAgICAgICAgLS1wYXBlci1tYXRlcmlhbC1lbGV2YXRpb24tMzogewogICAgICAgICAgQGFwcGx5IC0tc2hhZG93LWVsZXZhdGlvbi02ZHA7CiAgICAgICAgfTsKICAgICAgICAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi00OiB7CiAgICAgICAgICBAYXBwbHkgLS1zaGFkb3ctZWxldmF0aW9uLThkcDsKICAgICAgICB9OwogICAgICAgIC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTU6IHsKICAgICAgICAgIEBhcHBseSAtLXNoYWRvdy1lbGV2YXRpb24tMTZkcDsKICAgICAgICB9OwogICAgICB9CiAgICAgIDpob3N0KC5wYXBlci1tYXRlcmlhbCksIC5wYXBlci1tYXRlcmlhbCB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItbWF0ZXJpYWw7CiAgICAgIH0KICAgICAgOmhvc3QoLnBhcGVyLW1hdGVyaWFsW2VsZXZhdGlvbj0iMSJdKSwgLnBhcGVyLW1hdGVyaWFsW2VsZXZhdGlvbj0iMSJdIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1tYXRlcmlhbC1lbGV2YXRpb24tMTsKICAgICAgfQogICAgICA6aG9zdCgucGFwZXItbWF0ZXJpYWxbZWxldmF0aW9uPSIyIl0pLCAucGFwZXItbWF0ZXJpYWxbZWxldmF0aW9uPSIyIl0gewogICAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi0yOwogICAgICB9CiAgICAgIDpob3N0KC5wYXBlci1tYXRlcmlhbFtlbGV2YXRpb249IjMiXSksIC5wYXBlci1tYXRlcmlhbFtlbGV2YXRpb249IjMiXSB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTM7CiAgICAgIH0KICAgICAgOmhvc3QoLnBhcGVyLW1hdGVyaWFsW2VsZXZhdGlvbj0iNCJdKSwgLnBhcGVyLW1hdGVyaWFsW2VsZXZhdGlvbj0iNCJdIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1tYXRlcmlhbC1lbGV2YXRpb24tNDsKICAgICAgfQogICAgICA6aG9zdCgucGFwZXItbWF0ZXJpYWxbZWxldmF0aW9uPSI1Il0pLCAucGFwZXItbWF0ZXJpYWxbZWxldmF0aW9uPSI1Il0gewogICAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi01OwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT4KCgoKCjxkb20tbW9kdWxlIGlkPSJwYXBlci1idXR0b24iPgogIDx0ZW1wbGF0ZSBzdHJpcC13aGl0ZXNwYWNlPgogICAgPHN0eWxlIGluY2x1ZGU9InBhcGVyLW1hdGVyaWFsLXN0eWxlcyI+CiAgICAgIC8qIE5lZWQgdG8gc3BlY2lmeSB0aGUgc2FtZSBzcGVjaWZpY2l0eSBhcyB0aGUgc3R5bGVzIGltcG9ydGVkIGZyb20gcGFwZXItbWF0ZXJpYWwuICovCiAgICAgIDpob3N0IHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtaW5saW5lOwogICAgICAgIEBhcHBseSAtLWxheW91dC1jZW50ZXItY2VudGVyOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgIG1pbi13aWR0aDogNS4xNGVtOwogICAgICAgIG1hcmdpbjogMCAwLjI5ZW07CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgICAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiByZ2JhKDAsIDAsIDAsIDApOwogICAgICAgIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogdHJhbnNwYXJlbnQ7CiAgICAgICAgZm9udDogaW5oZXJpdDsKICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgICAgIG91dGxpbmUtd2lkdGg6IDA7CiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgLW1zLXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHotaW5kZXg6IDA7CiAgICAgICAgcGFkZGluZzogMC43ZW0gMC41N2VtOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1iYXNlOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWJ1dHRvbjsKICAgICAgfQoKICAgICAgOmhvc3QoW2VsZXZhdGlvbj0iMSJdKSB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTE7CiAgICAgIH0KCiAgICAgIDpob3N0KFtlbGV2YXRpb249IjIiXSkgewogICAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi0yOwogICAgICB9CgogICAgICA6aG9zdChbZWxldmF0aW9uPSIzIl0pIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1tYXRlcmlhbC1lbGV2YXRpb24tMzsKICAgICAgfQoKICAgICAgOmhvc3QoW2VsZXZhdGlvbj0iNCJdKSB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTQ7CiAgICAgIH0KCiAgICAgIDpob3N0KFtlbGV2YXRpb249IjUiXSkgewogICAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi01OwogICAgICB9CgogICAgICA6aG9zdChbaGlkZGVuXSkgewogICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgOmhvc3QoW3JhaXNlZF0ua2V5Ym9hcmQtZm9jdXMpIHsKICAgICAgICBmb250LXdlaWdodDogYm9sZDsKICAgICAgICBAYXBwbHkgLS1wYXBlci1idXR0b24tcmFpc2VkLWtleWJvYXJkLWZvY3VzOwogICAgICB9CgogICAgICA6aG9zdCg6bm90KFtyYWlzZWRdKS5rZXlib2FyZC1mb2N1cykgewogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWJ1dHRvbi1mbGF0LWtleWJvYXJkLWZvY3VzOwogICAgICB9CgogICAgICA6aG9zdChbZGlzYWJsZWRdKSB7CiAgICAgICAgYmFja2dyb3VuZDogI2VhZWFlYTsKICAgICAgICBjb2xvcjogI2E4YThhODsKICAgICAgICBjdXJzb3I6IGF1dG87CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWJ1dHRvbi1kaXNhYmxlZDsKICAgICAgfQoKICAgICAgOmhvc3QoW2FuaW1hdGVkXSkgewogICAgICAgIEBhcHBseSAtLXNoYWRvdy10cmFuc2l0aW9uOwogICAgICB9CgogICAgICBwYXBlci1yaXBwbGUgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1idXR0b24taW5rLWNvbG9yKTsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8c2xvdD48L3Nsb3Q+CiAgPC90ZW1wbGF0ZT4KCiAgPHNjcmlwdD4vL35+V0VCUEFUSH5+L3BhcGVyLWJ1dHRvbi9wYXBlci1idXR0b24uaHRtbC5qcwpQb2x5bWVyKHtpczoicGFwZXItYnV0dG9uIixiZWhhdmlvcnM6W1BvbHltZXIuUGFwZXJCdXR0b25CZWhhdmlvcl0scHJvcGVydGllczp7cmFpc2VkOnt0eXBlOkJvb2xlYW4scmVmbGVjdFRvQXR0cmlidXRlOiEwLHZhbHVlOiExLG9ic2VydmVyOiJfY2FsY3VsYXRlRWxldmF0aW9uIn19LF9jYWxjdWxhdGVFbGV2YXRpb246ZnVuY3Rpb24oKXt0aGlzLnJhaXNlZD9Qb2x5bWVyLlBhcGVyQnV0dG9uQmVoYXZpb3JJbXBsLl9jYWxjdWxhdGVFbGV2YXRpb24uYXBwbHkodGhpcyk6dGhpcy5fc2V0RWxldmF0aW9uKDApfX0pOwo8L3NjcmlwdD4KPC9kb20tbW9kdWxlPgoKCgoKCjxjdXN0b20tc3R5bGU+CiAgPHN0eWxlIGlzPSJjdXN0b20tc3R5bGUiPgogICAgaHRtbCB7CgogICAgICAvKiBNYXRlcmlhbCBEZXNpZ24gY29sb3IgcGFsZXR0ZSBmb3IgR29vZ2xlIHByb2R1Y3RzICovCgogICAgICAtLWdvb2dsZS1yZWQtMTAwOiAjZjRjN2MzOwogICAgICAtLWdvb2dsZS1yZWQtMzAwOiAjZTY3YzczOwogICAgICAtLWdvb2dsZS1yZWQtNTAwOiAjZGI0NDM3OwogICAgICAtLWdvb2dsZS1yZWQtNzAwOiAjYzUzOTI5OwoKICAgICAgLS1nb29nbGUtYmx1ZS0xMDA6ICNjNmRhZmM7CiAgICAgIC0tZ29vZ2xlLWJsdWUtMzAwOiAjN2JhYWY3OwogICAgICAtLWdvb2dsZS1ibHVlLTUwMDogIzQyODVmNDsKICAgICAgLS1nb29nbGUtYmx1ZS03MDA6ICMzMzY3ZDY7CgogICAgICAtLWdvb2dsZS1ncmVlbi0xMDA6ICNiN2UxY2Q7CiAgICAgIC0tZ29vZ2xlLWdyZWVuLTMwMDogIzU3YmI4YTsKICAgICAgLS1nb29nbGUtZ3JlZW4tNTAwOiAjMGY5ZDU4OwogICAgICAtLWdvb2dsZS1ncmVlbi03MDA6ICMwYjgwNDM7CgogICAgICAtLWdvb2dsZS15ZWxsb3ctMTAwOiAjZmNlOGIyOwogICAgICAtLWdvb2dsZS15ZWxsb3ctMzAwOiAjZjdjYjRkOwogICAgICAtLWdvb2dsZS15ZWxsb3ctNTAwOiAjZjRiNDAwOwogICAgICAtLWdvb2dsZS15ZWxsb3ctNzAwOiAjZjA5MzAwOwoKICAgICAgLS1nb29nbGUtZ3JleS0xMDA6ICNmNWY1ZjU7CiAgICAgIC0tZ29vZ2xlLWdyZXktMzAwOiAjZTBlMGUwOwogICAgICAtLWdvb2dsZS1ncmV5LTUwMDogIzllOWU5ZTsKICAgICAgLS1nb29nbGUtZ3JleS03MDA6ICM2MTYxNjE7CgogICAgICAvKiBNYXRlcmlhbCBEZXNpZ24gY29sb3IgcGFsZXR0ZSBmcm9tIG9ubGluZSBzcGVjIGRvY3VtZW50ICovCgogICAgICAtLXBhcGVyLXJlZC01MDogI2ZmZWJlZTsKICAgICAgLS1wYXBlci1yZWQtMTAwOiAjZmZjZGQyOwogICAgICAtLXBhcGVyLXJlZC0yMDA6ICNlZjlhOWE7CiAgICAgIC0tcGFwZXItcmVkLTMwMDogI2U1NzM3MzsKICAgICAgLS1wYXBlci1yZWQtNDAwOiAjZWY1MzUwOwogICAgICAtLXBhcGVyLXJlZC01MDA6ICNmNDQzMzY7CiAgICAgIC0tcGFwZXItcmVkLTYwMDogI2U1MzkzNTsKICAgICAgLS1wYXBlci1yZWQtNzAwOiAjZDMyZjJmOwogICAgICAtLXBhcGVyLXJlZC04MDA6ICNjNjI4Mjg7CiAgICAgIC0tcGFwZXItcmVkLTkwMDogI2I3MWMxYzsKICAgICAgLS1wYXBlci1yZWQtYTEwMDogI2ZmOGE4MDsKICAgICAgLS1wYXBlci1yZWQtYTIwMDogI2ZmNTI1MjsKICAgICAgLS1wYXBlci1yZWQtYTQwMDogI2ZmMTc0NDsKICAgICAgLS1wYXBlci1yZWQtYTcwMDogI2Q1MDAwMDsKCiAgICAgIC0tcGFwZXItcGluay01MDogI2ZjZTRlYzsKICAgICAgLS1wYXBlci1waW5rLTEwMDogI2Y4YmJkMDsKICAgICAgLS1wYXBlci1waW5rLTIwMDogI2Y0OGZiMTsKICAgICAgLS1wYXBlci1waW5rLTMwMDogI2YwNjI5MjsKICAgICAgLS1wYXBlci1waW5rLTQwMDogI2VjNDA3YTsKICAgICAgLS1wYXBlci1waW5rLTUwMDogI2U5MWU2MzsKICAgICAgLS1wYXBlci1waW5rLTYwMDogI2Q4MWI2MDsKICAgICAgLS1wYXBlci1waW5rLTcwMDogI2MyMTg1YjsKICAgICAgLS1wYXBlci1waW5rLTgwMDogI2FkMTQ1NzsKICAgICAgLS1wYXBlci1waW5rLTkwMDogIzg4MGU0ZjsKICAgICAgLS1wYXBlci1waW5rLWExMDA6ICNmZjgwYWI7CiAgICAgIC0tcGFwZXItcGluay1hMjAwOiAjZmY0MDgxOwogICAgICAtLXBhcGVyLXBpbmstYTQwMDogI2Y1MDA1NzsKICAgICAgLS1wYXBlci1waW5rLWE3MDA6ICNjNTExNjI7CgogICAgICAtLXBhcGVyLXB1cnBsZS01MDogI2YzZTVmNTsKICAgICAgLS1wYXBlci1wdXJwbGUtMTAwOiAjZTFiZWU3OwogICAgICAtLXBhcGVyLXB1cnBsZS0yMDA6ICNjZTkzZDg7CiAgICAgIC0tcGFwZXItcHVycGxlLTMwMDogI2JhNjhjODsKICAgICAgLS1wYXBlci1wdXJwbGUtNDAwOiAjYWI0N2JjOwogICAgICAtLXBhcGVyLXB1cnBsZS01MDA6ICM5YzI3YjA7CiAgICAgIC0tcGFwZXItcHVycGxlLTYwMDogIzhlMjRhYTsKICAgICAgLS1wYXBlci1wdXJwbGUtNzAwOiAjN2IxZmEyOwogICAgICAtLXBhcGVyLXB1cnBsZS04MDA6ICM2YTFiOWE7CiAgICAgIC0tcGFwZXItcHVycGxlLTkwMDogIzRhMTQ4YzsKICAgICAgLS1wYXBlci1wdXJwbGUtYTEwMDogI2VhODBmYzsKICAgICAgLS1wYXBlci1wdXJwbGUtYTIwMDogI2UwNDBmYjsKICAgICAgLS1wYXBlci1wdXJwbGUtYTQwMDogI2Q1MDBmOTsKICAgICAgLS1wYXBlci1wdXJwbGUtYTcwMDogI2FhMDBmZjsKCiAgICAgIC0tcGFwZXItZGVlcC1wdXJwbGUtNTA6ICNlZGU3ZjY7CiAgICAgIC0tcGFwZXItZGVlcC1wdXJwbGUtMTAwOiAjZDFjNGU5OwogICAgICAtLXBhcGVyLWRlZXAtcHVycGxlLTIwMDogI2IzOWRkYjsKICAgICAgLS1wYXBlci1kZWVwLXB1cnBsZS0zMDA6ICM5NTc1Y2Q7CiAgICAgIC0tcGFwZXItZGVlcC1wdXJwbGUtNDAwOiAjN2U1N2MyOwogICAgICAtLXBhcGVyLWRlZXAtcHVycGxlLTUwMDogIzY3M2FiNzsKICAgICAgLS1wYXBlci1kZWVwLXB1cnBsZS02MDA6ICM1ZTM1YjE7CiAgICAgIC0tcGFwZXItZGVlcC1wdXJwbGUtNzAwOiAjNTEyZGE4OwogICAgICAtLXBhcGVyLWRlZXAtcHVycGxlLTgwMDogIzQ1MjdhMDsKICAgICAgLS1wYXBlci1kZWVwLXB1cnBsZS05MDA6ICMzMTFiOTI7CiAgICAgIC0tcGFwZXItZGVlcC1wdXJwbGUtYTEwMDogI2IzODhmZjsKICAgICAgLS1wYXBlci1kZWVwLXB1cnBsZS1hMjAwOiAjN2M0ZGZmOwogICAgICAtLXBhcGVyLWRlZXAtcHVycGxlLWE0MDA6ICM2NTFmZmY7CiAgICAgIC0tcGFwZXItZGVlcC1wdXJwbGUtYTcwMDogIzYyMDBlYTsKCiAgICAgIC0tcGFwZXItaW5kaWdvLTUwOiAjZThlYWY2OwogICAgICAtLXBhcGVyLWluZGlnby0xMDA6ICNjNWNhZTk7CiAgICAgIC0tcGFwZXItaW5kaWdvLTIwMDogIzlmYThkYTsKICAgICAgLS1wYXBlci1pbmRpZ28tMzAwOiAjNzk4NmNiOwogICAgICAtLXBhcGVyLWluZGlnby00MDA6ICM1YzZiYzA7CiAgICAgIC0tcGFwZXItaW5kaWdvLTUwMDogIzNmNTFiNTsKICAgICAgLS1wYXBlci1pbmRpZ28tNjAwOiAjMzk0OWFiOwogICAgICAtLXBhcGVyLWluZGlnby03MDA6ICMzMDNmOWY7CiAgICAgIC0tcGFwZXItaW5kaWdvLTgwMDogIzI4MzU5MzsKICAgICAgLS1wYXBlci1pbmRpZ28tOTAwOiAjMWEyMzdlOwogICAgICAtLXBhcGVyLWluZGlnby1hMTAwOiAjOGM5ZWZmOwogICAgICAtLXBhcGVyLWluZGlnby1hMjAwOiAjNTM2ZGZlOwogICAgICAtLXBhcGVyLWluZGlnby1hNDAwOiAjM2Q1YWZlOwogICAgICAtLXBhcGVyLWluZGlnby1hNzAwOiAjMzA0ZmZlOwoKICAgICAgLS1wYXBlci1ibHVlLTUwOiAjZTNmMmZkOwogICAgICAtLXBhcGVyLWJsdWUtMTAwOiAjYmJkZWZiOwogICAgICAtLXBhcGVyLWJsdWUtMjAwOiAjOTBjYWY5OwogICAgICAtLXBhcGVyLWJsdWUtMzAwOiAjNjRiNWY2OwogICAgICAtLXBhcGVyLWJsdWUtNDAwOiAjNDJhNWY1OwogICAgICAtLXBhcGVyLWJsdWUtNTAwOiAjMjE5NmYzOwogICAgICAtLXBhcGVyLWJsdWUtNjAwOiAjMWU4OGU1OwogICAgICAtLXBhcGVyLWJsdWUtNzAwOiAjMTk3NmQyOwogICAgICAtLXBhcGVyLWJsdWUtODAwOiAjMTU2NWMwOwogICAgICAtLXBhcGVyLWJsdWUtOTAwOiAjMGQ0N2ExOwogICAgICAtLXBhcGVyLWJsdWUtYTEwMDogIzgyYjFmZjsKICAgICAgLS1wYXBlci1ibHVlLWEyMDA6ICM0NDhhZmY7CiAgICAgIC0tcGFwZXItYmx1ZS1hNDAwOiAjMjk3OWZmOwogICAgICAtLXBhcGVyLWJsdWUtYTcwMDogIzI5NjJmZjsKCiAgICAgIC0tcGFwZXItbGlnaHQtYmx1ZS01MDogI2UxZjVmZTsKICAgICAgLS1wYXBlci1saWdodC1ibHVlLTEwMDogI2IzZTVmYzsKICAgICAgLS1wYXBlci1saWdodC1ibHVlLTIwMDogIzgxZDRmYTsKICAgICAgLS1wYXBlci1saWdodC1ibHVlLTMwMDogIzRmYzNmNzsKICAgICAgLS1wYXBlci1saWdodC1ibHVlLTQwMDogIzI5YjZmNjsKICAgICAgLS1wYXBlci1saWdodC1ibHVlLTUwMDogIzAzYTlmNDsKICAgICAgLS1wYXBlci1saWdodC1ibHVlLTYwMDogIzAzOWJlNTsKICAgICAgLS1wYXBlci1saWdodC1ibHVlLTcwMDogIzAyODhkMTsKICAgICAgLS1wYXBlci1saWdodC1ibHVlLTgwMDogIzAyNzdiZDsKICAgICAgLS1wYXBlci1saWdodC1ibHVlLTkwMDogIzAxNTc5YjsKICAgICAgLS1wYXBlci1saWdodC1ibHVlLWExMDA6ICM4MGQ4ZmY7CiAgICAgIC0tcGFwZXItbGlnaHQtYmx1ZS1hMjAwOiAjNDBjNGZmOwogICAgICAtLXBhcGVyLWxpZ2h0LWJsdWUtYTQwMDogIzAwYjBmZjsKICAgICAgLS1wYXBlci1saWdodC1ibHVlLWE3MDA6ICMwMDkxZWE7CgogICAgICAtLXBhcGVyLWN5YW4tNTA6ICNlMGY3ZmE7CiAgICAgIC0tcGFwZXItY3lhbi0xMDA6ICNiMmViZjI7CiAgICAgIC0tcGFwZXItY3lhbi0yMDA6ICM4MGRlZWE7CiAgICAgIC0tcGFwZXItY3lhbi0zMDA6ICM0ZGQwZTE7CiAgICAgIC0tcGFwZXItY3lhbi00MDA6ICMyNmM2ZGE7CiAgICAgIC0tcGFwZXItY3lhbi01MDA6ICMwMGJjZDQ7CiAgICAgIC0tcGFwZXItY3lhbi02MDA6ICMwMGFjYzE7CiAgICAgIC0tcGFwZXItY3lhbi03MDA6ICMwMDk3YTc7CiAgICAgIC0tcGFwZXItY3lhbi04MDA6ICMwMDgzOGY7CiAgICAgIC0tcGFwZXItY3lhbi05MDA6ICMwMDYwNjQ7CiAgICAgIC0tcGFwZXItY3lhbi1hMTAwOiAjODRmZmZmOwogICAgICAtLXBhcGVyLWN5YW4tYTIwMDogIzE4ZmZmZjsKICAgICAgLS1wYXBlci1jeWFuLWE0MDA6ICMwMGU1ZmY7CiAgICAgIC0tcGFwZXItY3lhbi1hNzAwOiAjMDBiOGQ0OwoKICAgICAgLS1wYXBlci10ZWFsLTUwOiAjZTBmMmYxOwogICAgICAtLXBhcGVyLXRlYWwtMTAwOiAjYjJkZmRiOwogICAgICAtLXBhcGVyLXRlYWwtMjAwOiAjODBjYmM0OwogICAgICAtLXBhcGVyLXRlYWwtMzAwOiAjNGRiNmFjOwogICAgICAtLXBhcGVyLXRlYWwtNDAwOiAjMjZhNjlhOwogICAgICAtLXBhcGVyLXRlYWwtNTAwOiAjMDA5Njg4OwogICAgICAtLXBhcGVyLXRlYWwtNjAwOiAjMDA4OTdiOwogICAgICAtLXBhcGVyLXRlYWwtNzAwOiAjMDA3OTZiOwogICAgICAtLXBhcGVyLXRlYWwtODAwOiAjMDA2OTVjOwogICAgICAtLXBhcGVyLXRlYWwtOTAwOiAjMDA0ZDQwOwogICAgICAtLXBhcGVyLXRlYWwtYTEwMDogI2E3ZmZlYjsKICAgICAgLS1wYXBlci10ZWFsLWEyMDA6ICM2NGZmZGE7CiAgICAgIC0tcGFwZXItdGVhbC1hNDAwOiAjMWRlOWI2OwogICAgICAtLXBhcGVyLXRlYWwtYTcwMDogIzAwYmZhNTsKCiAgICAgIC0tcGFwZXItZ3JlZW4tNTA6ICNlOGY1ZTk7CiAgICAgIC0tcGFwZXItZ3JlZW4tMTAwOiAjYzhlNmM5OwogICAgICAtLXBhcGVyLWdyZWVuLTIwMDogI2E1ZDZhNzsKICAgICAgLS1wYXBlci1ncmVlbi0zMDA6ICM4MWM3ODQ7CiAgICAgIC0tcGFwZXItZ3JlZW4tNDAwOiAjNjZiYjZhOwogICAgICAtLXBhcGVyLWdyZWVuLTUwMDogIzRjYWY1MDsKICAgICAgLS1wYXBlci1ncmVlbi02MDA6ICM0M2EwNDc7CiAgICAgIC0tcGFwZXItZ3JlZW4tNzAwOiAjMzg4ZTNjOwogICAgICAtLXBhcGVyLWdyZWVuLTgwMDogIzJlN2QzMjsKICAgICAgLS1wYXBlci1ncmVlbi05MDA6ICMxYjVlMjA7CiAgICAgIC0tcGFwZXItZ3JlZW4tYTEwMDogI2I5ZjZjYTsKICAgICAgLS1wYXBlci1ncmVlbi1hMjAwOiAjNjlmMGFlOwogICAgICAtLXBhcGVyLWdyZWVuLWE0MDA6ICMwMGU2NzY7CiAgICAgIC0tcGFwZXItZ3JlZW4tYTcwMDogIzAwYzg1MzsKCiAgICAgIC0tcGFwZXItbGlnaHQtZ3JlZW4tNTA6ICNmMWY4ZTk7CiAgICAgIC0tcGFwZXItbGlnaHQtZ3JlZW4tMTAwOiAjZGNlZGM4OwogICAgICAtLXBhcGVyLWxpZ2h0LWdyZWVuLTIwMDogI2M1ZTFhNTsKICAgICAgLS1wYXBlci1saWdodC1ncmVlbi0zMDA6ICNhZWQ1ODE7CiAgICAgIC0tcGFwZXItbGlnaHQtZ3JlZW4tNDAwOiAjOWNjYzY1OwogICAgICAtLXBhcGVyLWxpZ2h0LWdyZWVuLTUwMDogIzhiYzM0YTsKICAgICAgLS1wYXBlci1saWdodC1ncmVlbi02MDA6ICM3Y2IzNDI7CiAgICAgIC0tcGFwZXItbGlnaHQtZ3JlZW4tNzAwOiAjNjg5ZjM4OwogICAgICAtLXBhcGVyLWxpZ2h0LWdyZWVuLTgwMDogIzU1OGIyZjsKICAgICAgLS1wYXBlci1saWdodC1ncmVlbi05MDA6ICMzMzY5MWU7CiAgICAgIC0tcGFwZXItbGlnaHQtZ3JlZW4tYTEwMDogI2NjZmY5MDsKICAgICAgLS1wYXBlci1saWdodC1ncmVlbi1hMjAwOiAjYjJmZjU5OwogICAgICAtLXBhcGVyLWxpZ2h0LWdyZWVuLWE0MDA6ICM3NmZmMDM7CiAgICAgIC0tcGFwZXItbGlnaHQtZ3JlZW4tYTcwMDogIzY0ZGQxNzsKCiAgICAgIC0tcGFwZXItbGltZS01MDogI2Y5ZmJlNzsKICAgICAgLS1wYXBlci1saW1lLTEwMDogI2YwZjRjMzsKICAgICAgLS1wYXBlci1saW1lLTIwMDogI2U2ZWU5YzsKICAgICAgLS1wYXBlci1saW1lLTMwMDogI2RjZTc3NTsKICAgICAgLS1wYXBlci1saW1lLTQwMDogI2Q0ZTE1NzsKICAgICAgLS1wYXBlci1saW1lLTUwMDogI2NkZGMzOTsKICAgICAgLS1wYXBlci1saW1lLTYwMDogI2MwY2EzMzsKICAgICAgLS1wYXBlci1saW1lLTcwMDogI2FmYjQyYjsKICAgICAgLS1wYXBlci1saW1lLTgwMDogIzllOWQyNDsKICAgICAgLS1wYXBlci1saW1lLTkwMDogIzgyNzcxNzsKICAgICAgLS1wYXBlci1saW1lLWExMDA6ICNmNGZmODE7CiAgICAgIC0tcGFwZXItbGltZS1hMjAwOiAjZWVmZjQxOwogICAgICAtLXBhcGVyLWxpbWUtYTQwMDogI2M2ZmYwMDsKICAgICAgLS1wYXBlci1saW1lLWE3MDA6ICNhZWVhMDA7CgogICAgICAtLXBhcGVyLXllbGxvdy01MDogI2ZmZmRlNzsKICAgICAgLS1wYXBlci15ZWxsb3ctMTAwOiAjZmZmOWM0OwogICAgICAtLXBhcGVyLXllbGxvdy0yMDA6ICNmZmY1OWQ7CiAgICAgIC0tcGFwZXIteWVsbG93LTMwMDogI2ZmZjE3NjsKICAgICAgLS1wYXBlci15ZWxsb3ctNDAwOiAjZmZlZTU4OwogICAgICAtLXBhcGVyLXllbGxvdy01MDA6ICNmZmViM2I7CiAgICAgIC0tcGFwZXIteWVsbG93LTYwMDogI2ZkZDgzNTsKICAgICAgLS1wYXBlci15ZWxsb3ctNzAwOiAjZmJjMDJkOwogICAgICAtLXBhcGVyLXllbGxvdy04MDA6ICNmOWE4MjU7CiAgICAgIC0tcGFwZXIteWVsbG93LTkwMDogI2Y1N2YxNzsKICAgICAgLS1wYXBlci15ZWxsb3ctYTEwMDogI2ZmZmY4ZDsKICAgICAgLS1wYXBlci15ZWxsb3ctYTIwMDogI2ZmZmYwMDsKICAgICAgLS1wYXBlci15ZWxsb3ctYTQwMDogI2ZmZWEwMDsKICAgICAgLS1wYXBlci15ZWxsb3ctYTcwMDogI2ZmZDYwMDsKCiAgICAgIC0tcGFwZXItYW1iZXItNTA6ICNmZmY4ZTE7CiAgICAgIC0tcGFwZXItYW1iZXItMTAwOiAjZmZlY2IzOwogICAgICAtLXBhcGVyLWFtYmVyLTIwMDogI2ZmZTA4MjsKICAgICAgLS1wYXBlci1hbWJlci0zMDA6ICNmZmQ1NGY7CiAgICAgIC0tcGFwZXItYW1iZXItNDAwOiAjZmZjYTI4OwogICAgICAtLXBhcGVyLWFtYmVyLTUwMDogI2ZmYzEwNzsKICAgICAgLS1wYXBlci1hbWJlci02MDA6ICNmZmIzMDA7CiAgICAgIC0tcGFwZXItYW1iZXItNzAwOiAjZmZhMDAwOwogICAgICAtLXBhcGVyLWFtYmVyLTgwMDogI2ZmOGYwMDsKICAgICAgLS1wYXBlci1hbWJlci05MDA6ICNmZjZmMDA7CiAgICAgIC0tcGFwZXItYW1iZXItYTEwMDogI2ZmZTU3ZjsKICAgICAgLS1wYXBlci1hbWJlci1hMjAwOiAjZmZkNzQwOwogICAgICAtLXBhcGVyLWFtYmVyLWE0MDA6ICNmZmM0MDA7CiAgICAgIC0tcGFwZXItYW1iZXItYTcwMDogI2ZmYWIwMDsKCiAgICAgIC0tcGFwZXItb3JhbmdlLTUwOiAjZmZmM2UwOwogICAgICAtLXBhcGVyLW9yYW5nZS0xMDA6ICNmZmUwYjI7CiAgICAgIC0tcGFwZXItb3JhbmdlLTIwMDogI2ZmY2M4MDsKICAgICAgLS1wYXBlci1vcmFuZ2UtMzAwOiAjZmZiNzRkOwogICAgICAtLXBhcGVyLW9yYW5nZS00MDA6ICNmZmE3MjY7CiAgICAgIC0tcGFwZXItb3JhbmdlLTUwMDogI2ZmOTgwMDsKICAgICAgLS1wYXBlci1vcmFuZ2UtNjAwOiAjZmI4YzAwOwogICAgICAtLXBhcGVyLW9yYW5nZS03MDA6ICNmNTdjMDA7CiAgICAgIC0tcGFwZXItb3JhbmdlLTgwMDogI2VmNmMwMDsKICAgICAgLS1wYXBlci1vcmFuZ2UtOTAwOiAjZTY1MTAwOwogICAgICAtLXBhcGVyLW9yYW5nZS1hMTAwOiAjZmZkMTgwOwogICAgICAtLXBhcGVyLW9yYW5nZS1hMjAwOiAjZmZhYjQwOwogICAgICAtLXBhcGVyLW9yYW5nZS1hNDAwOiAjZmY5MTAwOwogICAgICAtLXBhcGVyLW9yYW5nZS1hNzAwOiAjZmY2NTAwOwoKICAgICAgLS1wYXBlci1kZWVwLW9yYW5nZS01MDogI2ZiZTllNzsKICAgICAgLS1wYXBlci1kZWVwLW9yYW5nZS0xMDA6ICNmZmNjYmM7CiAgICAgIC0tcGFwZXItZGVlcC1vcmFuZ2UtMjAwOiAjZmZhYjkxOwogICAgICAtLXBhcGVyLWRlZXAtb3JhbmdlLTMwMDogI2ZmOGE2NTsKICAgICAgLS1wYXBlci1kZWVwLW9yYW5nZS00MDA6ICNmZjcwNDM7CiAgICAgIC0tcGFwZXItZGVlcC1vcmFuZ2UtNTAwOiAjZmY1NzIyOwogICAgICAtLXBhcGVyLWRlZXAtb3JhbmdlLTYwMDogI2Y0NTExZTsKICAgICAgLS1wYXBlci1kZWVwLW9yYW5nZS03MDA6ICNlNjRhMTk7CiAgICAgIC0tcGFwZXItZGVlcC1vcmFuZ2UtODAwOiAjZDg0MzE1OwogICAgICAtLXBhcGVyLWRlZXAtb3JhbmdlLTkwMDogI2JmMzYwYzsKICAgICAgLS1wYXBlci1kZWVwLW9yYW5nZS1hMTAwOiAjZmY5ZTgwOwogICAgICAtLXBhcGVyLWRlZXAtb3JhbmdlLWEyMDA6ICNmZjZlNDA7CiAgICAgIC0tcGFwZXItZGVlcC1vcmFuZ2UtYTQwMDogI2ZmM2QwMDsKICAgICAgLS1wYXBlci1kZWVwLW9yYW5nZS1hNzAwOiAjZGQyYzAwOwoKICAgICAgLS1wYXBlci1icm93bi01MDogI2VmZWJlOTsKICAgICAgLS1wYXBlci1icm93bi0xMDA6ICNkN2NjYzg7CiAgICAgIC0tcGFwZXItYnJvd24tMjAwOiAjYmNhYWE0OwogICAgICAtLXBhcGVyLWJyb3duLTMwMDogI2ExODg3ZjsKICAgICAgLS1wYXBlci1icm93bi00MDA6ICM4ZDZlNjM7CiAgICAgIC0tcGFwZXItYnJvd24tNTAwOiAjNzk1NTQ4OwogICAgICAtLXBhcGVyLWJyb3duLTYwMDogIzZkNGM0MTsKICAgICAgLS1wYXBlci1icm93bi03MDA6ICM1ZDQwMzc7CiAgICAgIC0tcGFwZXItYnJvd24tODAwOiAjNGUzNDJlOwogICAgICAtLXBhcGVyLWJyb3duLTkwMDogIzNlMjcyMzsKCiAgICAgIC0tcGFwZXItZ3JleS01MDogI2ZhZmFmYTsKICAgICAgLS1wYXBlci1ncmV5LTEwMDogI2Y1ZjVmNTsKICAgICAgLS1wYXBlci1ncmV5LTIwMDogI2VlZWVlZTsKICAgICAgLS1wYXBlci1ncmV5LTMwMDogI2UwZTBlMDsKICAgICAgLS1wYXBlci1ncmV5LTQwMDogI2JkYmRiZDsKICAgICAgLS1wYXBlci1ncmV5LTUwMDogIzllOWU5ZTsKICAgICAgLS1wYXBlci1ncmV5LTYwMDogIzc1NzU3NTsKICAgICAgLS1wYXBlci1ncmV5LTcwMDogIzYxNjE2MTsKICAgICAgLS1wYXBlci1ncmV5LTgwMDogIzQyNDI0MjsKICAgICAgLS1wYXBlci1ncmV5LTkwMDogIzIxMjEyMTsKCiAgICAgIC0tcGFwZXItYmx1ZS1ncmV5LTUwOiAjZWNlZmYxOwogICAgICAtLXBhcGVyLWJsdWUtZ3JleS0xMDA6ICNjZmQ4ZGM7CiAgICAgIC0tcGFwZXItYmx1ZS1ncmV5LTIwMDogI2IwYmVjNTsKICAgICAgLS1wYXBlci1ibHVlLWdyZXktMzAwOiAjOTBhNGFlOwogICAgICAtLXBhcGVyLWJsdWUtZ3JleS00MDA6ICM3ODkwOWM7CiAgICAgIC0tcGFwZXItYmx1ZS1ncmV5LTUwMDogIzYwN2Q4YjsKICAgICAgLS1wYXBlci1ibHVlLWdyZXktNjAwOiAjNTQ2ZTdhOwogICAgICAtLXBhcGVyLWJsdWUtZ3JleS03MDA6ICM0NTVhNjQ7CiAgICAgIC0tcGFwZXItYmx1ZS1ncmV5LTgwMDogIzM3NDc0ZjsKICAgICAgLS1wYXBlci1ibHVlLWdyZXktOTAwOiAjMjYzMjM4OwoKICAgICAgLyogb3BhY2l0eSBmb3IgZGFyayB0ZXh0IG9uIGEgbGlnaHQgYmFja2dyb3VuZCAqLwogICAgICAtLWRhcmstZGl2aWRlci1vcGFjaXR5OiAwLjEyOwogICAgICAtLWRhcmstZGlzYWJsZWQtb3BhY2l0eTogMC4zODsgLyogb3IgaGludCB0ZXh0IG9yIGljb24gKi8KICAgICAgLS1kYXJrLXNlY29uZGFyeS1vcGFjaXR5OiAwLjU0OwogICAgICAtLWRhcmstcHJpbWFyeS1vcGFjaXR5OiAwLjg3OwoKICAgICAgLyogb3BhY2l0eSBmb3IgbGlnaHQgdGV4dCBvbiBhIGRhcmsgYmFja2dyb3VuZCAqLwogICAgICAtLWxpZ2h0LWRpdmlkZXItb3BhY2l0eTogMC4xMjsKICAgICAgLS1saWdodC1kaXNhYmxlZC1vcGFjaXR5OiAwLjM7IC8qIG9yIGhpbnQgdGV4dCBvciBpY29uICovCiAgICAgIC0tbGlnaHQtc2Vjb25kYXJ5LW9wYWNpdHk6IDAuNzsKICAgICAgLS1saWdodC1wcmltYXJ5LW9wYWNpdHk6IDEuMDsKCiAgICB9CgogIDwvc3R5bGU+CjwvY3VzdG9tLXN0eWxlPgoKCgoKPGN1c3RvbS1zdHlsZT4KICA8c3R5bGUgaXM9ImN1c3RvbS1zdHlsZSI+CiAgICBodG1sIHsKICAgICAgLyoKICAgICAgICogWW91IGNhbiB1c2UgdGhlc2UgZ2VuZXJpYyB2YXJpYWJsZXMgaW4geW91ciBlbGVtZW50cyBmb3IgZWFzeSB0aGVtaW5nLgogICAgICAgKiBGb3IgZXhhbXBsZSwgaWYgYWxsIHlvdXIgZWxlbWVudHMgdXNlIGAtLXByaW1hcnktdGV4dC1jb2xvcmAgYXMgaXRzIG1haW4KICAgICAgICogY29sb3IsIHRoZW4gc3dpdGNoaW5nIGZyb20gYSBsaWdodCB0byBhIGRhcmsgdGhlbWUgaXMganVzdCBhIG1hdHRlciBvZgogICAgICAgKiBjaGFuZ2luZyB0aGUgdmFsdWUgb2YgYC0tcHJpbWFyeS10ZXh0LWNvbG9yYCBpbiB5b3VyIGFwcGxpY2F0aW9uLgogICAgICAgKi8KICAgICAgLS1wcmltYXJ5LXRleHQtY29sb3I6IHZhcigtLWxpZ2h0LXRoZW1lLXRleHQtY29sb3IpOwogICAgICAtLXByaW1hcnktYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbGlnaHQtdGhlbWUtYmFja2dyb3VuZC1jb2xvcik7CiAgICAgIC0tc2Vjb25kYXJ5LXRleHQtY29sb3I6IHZhcigtLWxpZ2h0LXRoZW1lLXNlY29uZGFyeS1jb2xvcik7CiAgICAgIC0tZGlzYWJsZWQtdGV4dC1jb2xvcjogdmFyKC0tbGlnaHQtdGhlbWUtZGlzYWJsZWQtY29sb3IpOwogICAgICAtLWRpdmlkZXItY29sb3I6IHZhcigtLWxpZ2h0LXRoZW1lLWRpdmlkZXItY29sb3IpOwogICAgICAtLWVycm9yLWNvbG9yOiB2YXIoLS1wYXBlci1kZWVwLW9yYW5nZS1hNzAwKTsKCiAgICAgIC8qCiAgICAgICAqIFByaW1hcnkgYW5kIGFjY2VudCBjb2xvcnMuIEFsc28gc2VlIGNvbG9yLmh0bWwgZm9yIG1vcmUgY29sb3JzLgogICAgICAgKi8KICAgICAgLS1wcmltYXJ5LWNvbG9yOiB2YXIoLS1wYXBlci1pbmRpZ28tNTAwKTsKICAgICAgLS1saWdodC1wcmltYXJ5LWNvbG9yOiB2YXIoLS1wYXBlci1pbmRpZ28tMTAwKTsKICAgICAgLS1kYXJrLXByaW1hcnktY29sb3I6IHZhcigtLXBhcGVyLWluZGlnby03MDApOwoKICAgICAgLS1hY2NlbnQtY29sb3I6IHZhcigtLXBhcGVyLXBpbmstYTIwMCk7CiAgICAgIC0tbGlnaHQtYWNjZW50LWNvbG9yOiB2YXIoLS1wYXBlci1waW5rLWExMDApOwogICAgICAtLWRhcmstYWNjZW50LWNvbG9yOiB2YXIoLS1wYXBlci1waW5rLWE0MDApOwoKCiAgICAgIC8qCiAgICAgICAqIE1hdGVyaWFsIERlc2lnbiBMaWdodCBiYWNrZ3JvdW5kIHRoZW1lCiAgICAgICAqLwogICAgICAtLWxpZ2h0LXRoZW1lLWJhY2tncm91bmQtY29sb3I6ICNmZmZmZmY7CiAgICAgIC0tbGlnaHQtdGhlbWUtYmFzZS1jb2xvcjogIzAwMDAwMDsKICAgICAgLS1saWdodC10aGVtZS10ZXh0LWNvbG9yOiB2YXIoLS1wYXBlci1ncmV5LTkwMCk7CiAgICAgIC0tbGlnaHQtdGhlbWUtc2Vjb25kYXJ5LWNvbG9yOiAjNzM3MzczOyAgLyogZm9yIHNlY29uZGFyeSB0ZXh0IGFuZCBpY29ucyAqLwogICAgICAtLWxpZ2h0LXRoZW1lLWRpc2FibGVkLWNvbG9yOiAjOWI5YjliOyAgLyogZGlzYWJsZWQvaGludCB0ZXh0ICovCiAgICAgIC0tbGlnaHQtdGhlbWUtZGl2aWRlci1jb2xvcjogI2RiZGJkYjsKCiAgICAgIC8qCiAgICAgICAqIE1hdGVyaWFsIERlc2lnbiBEYXJrIGJhY2tncm91bmQgdGhlbWUKICAgICAgICovCiAgICAgIC0tZGFyay10aGVtZS1iYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci1ncmV5LTkwMCk7CiAgICAgIC0tZGFyay10aGVtZS1iYXNlLWNvbG9yOiAjZmZmZmZmOwogICAgICAtLWRhcmstdGhlbWUtdGV4dC1jb2xvcjogI2ZmZmZmZjsKICAgICAgLS1kYXJrLXRoZW1lLXNlY29uZGFyeS1jb2xvcjogI2JjYmNiYzsgIC8qIGZvciBzZWNvbmRhcnkgdGV4dCBhbmQgaWNvbnMgKi8KICAgICAgLS1kYXJrLXRoZW1lLWRpc2FibGVkLWNvbG9yOiAjNjQ2NDY0OyAgLyogZGlzYWJsZWQvaGludCB0ZXh0ICovCiAgICAgIC0tZGFyay10aGVtZS1kaXZpZGVyLWNvbG9yOiAjM2MzYzNjOwoKICAgICAgLyoKICAgICAgICogRGVwcmVjYXRlZCB2YWx1ZXMgYmVjYXVzZSBvZiB0aGVpciBjb25mdXNpbmcgbmFtZXMuCiAgICAgICAqLwogICAgICAtLXRleHQtcHJpbWFyeS1jb2xvcjogdmFyKC0tZGFyay10aGVtZS10ZXh0LWNvbG9yKTsKICAgICAgLS1kZWZhdWx0LXByaW1hcnktY29sb3I6IHZhcigtLXByaW1hcnktY29sb3IpOwogICAgfQogIDwvc3R5bGU+CjwvY3VzdG9tLXN0eWxlPgoKCgoKCgoKCjxzY3JpcHQ+Ly9+fldFQlBBVEh+fi9pcm9uLW1ldGEvaXJvbi1tZXRhLmh0bWwuanMKKGZ1bmN0aW9uKCl7UG9seW1lci5Jcm9uTWV0YT1mdW5jdGlvbihjKXtQb2x5bWVyLklyb25NZXRhWyIgIl0oYyk7dGhpcy50eXBlPWMmJmMudHlwZXx8ImRlZmF1bHQiO3RoaXMua2V5PWMmJmMua2V5O2MmJiJ2YWx1ZSJpbiBjJiYodGhpcy52YWx1ZT1jLnZhbHVlKX07UG9seW1lci5Jcm9uTWV0YVsiICJdPWZ1bmN0aW9uKCl7fTtQb2x5bWVyLklyb25NZXRhLnR5cGVzPXt9O1BvbHltZXIuSXJvbk1ldGEucHJvdG90eXBlPXtnZXQgdmFsdWUoKXt2YXIgYz10aGlzLnR5cGUsZD10aGlzLmtleTtpZihjJiZkKXJldHVybiBQb2x5bWVyLklyb25NZXRhLnR5cGVzW2NdJiZQb2x5bWVyLklyb25NZXRhLnR5cGVzW2NdW2RdfSxzZXQgdmFsdWUoYyl7dmFyIGQ9dGhpcy50eXBlLGY9dGhpcy5rZXk7ZCYmZiYmKGQ9UG9seW1lci5Jcm9uTWV0YS50eXBlc1tkXT1Qb2x5bWVyLklyb25NZXRhLnR5cGVzW2RdfHx7fSxudWxsPT1jP2RlbGV0ZSBkW2ZdOmRbZl09Yyl9LGdldCBsaXN0KCl7aWYodGhpcy50eXBlKXt2YXIgYz0KUG9seW1lci5Jcm9uTWV0YS50eXBlc1t0aGlzLnR5cGVdO3JldHVybiBjP09iamVjdC5rZXlzKGMpLm1hcChmdW5jdGlvbihkKXtyZXR1cm4gYVt0aGlzLnR5cGVdW2RdfSx0aGlzKTpbXX19LGJ5S2V5OmZ1bmN0aW9uKGMpe3RoaXMua2V5PWM7cmV0dXJuIHRoaXMudmFsdWV9fTt2YXIgYT1Qb2x5bWVyLklyb25NZXRhLnR5cGVzO1BvbHltZXIoe2lzOiJpcm9uLW1ldGEiLHByb3BlcnRpZXM6e3R5cGU6e3R5cGU6U3RyaW5nLHZhbHVlOiJkZWZhdWx0In0sa2V5Ont0eXBlOlN0cmluZ30sdmFsdWU6e3R5cGU6U3RyaW5nLG5vdGlmeTohMH0sc2VsZjp7dHlwZTpCb29sZWFuLG9ic2VydmVyOiJfc2VsZkNoYW5nZWQifSxfX21ldGE6e3R5cGU6Qm9vbGVhbixjb21wdXRlZDoiX19jb21wdXRlTWV0YSh0eXBlLCBrZXksIHZhbHVlKSJ9fSxob3N0QXR0cmlidXRlczp7aGlkZGVuOiEwfSxfX2NvbXB1dGVNZXRhOmZ1bmN0aW9uKGMsZCxmKXtjPW5ldyBQb2x5bWVyLklyb25NZXRhKHt0eXBlOmMsCmtleTpkfSk7dm9pZCAwIT09ZiYmZiE9PWMudmFsdWU/Yy52YWx1ZT1mOnRoaXMudmFsdWUhPT1jLnZhbHVlJiYodGhpcy52YWx1ZT1jLnZhbHVlKTtyZXR1cm4gY30sZ2V0IGxpc3QoKXtyZXR1cm4gdGhpcy5fX21ldGEmJnRoaXMuX19tZXRhLmxpc3R9LF9zZWxmQ2hhbmdlZDpmdW5jdGlvbihjKXtjJiYodGhpcy52YWx1ZT10aGlzKX0sYnlLZXk6ZnVuY3Rpb24oYyl7cmV0dXJuKG5ldyBQb2x5bWVyLklyb25NZXRhKHt0eXBlOnRoaXMudHlwZSxrZXk6Y30pKS52YWx1ZX19KX0pKCk7Cjwvc2NyaXB0PgoKCjxzY3JpcHQ+Ly9+fldFQlBBVEh+fi9pcm9uLXZhbGlkYXRhYmxlLWJlaGF2aW9yL2lyb24tdmFsaWRhdGFibGUtYmVoYXZpb3IuaHRtbC5qcwpQb2x5bWVyLklyb25WYWxpZGF0YWJsZUJlaGF2aW9yTWV0YT1udWxsOwpQb2x5bWVyLklyb25WYWxpZGF0YWJsZUJlaGF2aW9yPXtwcm9wZXJ0aWVzOnt2YWxpZGF0b3I6e3R5cGU6U3RyaW5nfSxpbnZhbGlkOntub3RpZnk6ITAscmVmbGVjdFRvQXR0cmlidXRlOiEwLHR5cGU6Qm9vbGVhbix2YWx1ZTohMSxvYnNlcnZlcjoiX2ludmFsaWRDaGFuZ2VkIn19LHJlZ2lzdGVyZWQ6ZnVuY3Rpb24oKXtQb2x5bWVyLklyb25WYWxpZGF0YWJsZUJlaGF2aW9yTWV0YT1uZXcgUG9seW1lci5Jcm9uTWV0YSh7dHlwZToidmFsaWRhdG9yIn0pfSxfaW52YWxpZENoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLmludmFsaWQ/dGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtaW52YWxpZCIsInRydWUiKTp0aGlzLnJlbW92ZUF0dHJpYnV0ZSgiYXJpYS1pbnZhbGlkIil9LGdldCBfdmFsaWRhdG9yKCl7cmV0dXJuIFBvbHltZXIuSXJvblZhbGlkYXRhYmxlQmVoYXZpb3JNZXRhJiZQb2x5bWVyLklyb25WYWxpZGF0YWJsZUJlaGF2aW9yTWV0YS5ieUtleSh0aGlzLnZhbGlkYXRvcil9LGhhc1ZhbGlkYXRvcjpmdW5jdGlvbigpe3JldHVybiBudWxsIT0KdGhpcy5fdmFsaWRhdG9yfSx2YWxpZGF0ZTpmdW5jdGlvbihhKXt0aGlzLmludmFsaWQ9dm9pZCAwPT09YSYmdm9pZCAwIT09dGhpcy52YWx1ZT8hdGhpcy5fZ2V0VmFsaWRpdHkodGhpcy52YWx1ZSk6IXRoaXMuX2dldFZhbGlkaXR5KGEpO3JldHVybiF0aGlzLmludmFsaWR9LF9nZXRWYWxpZGl0eTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5oYXNWYWxpZGF0b3IoKT90aGlzLl92YWxpZGF0b3IudmFsaWRhdGUoYSk6ITB9fTsKPC9zY3JpcHQ+CgoKCjxzY3JpcHQ+Ly9+fldFQlBBVEh+fi9pcm9uLWZvcm0tZWxlbWVudC1iZWhhdmlvci9pcm9uLWZvcm0tZWxlbWVudC1iZWhhdmlvci5odG1sLmpzClBvbHltZXIuSXJvbkZvcm1FbGVtZW50QmVoYXZpb3I9e3Byb3BlcnRpZXM6e25hbWU6e3R5cGU6U3RyaW5nfSx2YWx1ZTp7bm90aWZ5OiEwLHR5cGU6U3RyaW5nfSxyZXF1aXJlZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxfcGFyZW50Rm9ybTp7dHlwZTpPYmplY3R9fSxhdHRhY2hlZDpmdW5jdGlvbigpe1BvbHltZXIuRWxlbWVudHx8dGhpcy5maXJlKCJpcm9uLWZvcm0tZWxlbWVudC1yZWdpc3RlciIpfSxkZXRhY2hlZDpmdW5jdGlvbigpeyFQb2x5bWVyLkVsZW1lbnQmJnRoaXMuX3BhcmVudEZvcm0mJnRoaXMuX3BhcmVudEZvcm0uZmlyZSgiaXJvbi1mb3JtLWVsZW1lbnQtdW5yZWdpc3RlciIse3RhcmdldDp0aGlzfSl9fTsKPC9zY3JpcHQ+CgoKPHNjcmlwdD4vL35+V0VCUEFUSH5+L2lyb24tY2hlY2tlZC1lbGVtZW50LWJlaGF2aW9yL2lyb24tY2hlY2tlZC1lbGVtZW50LWJlaGF2aW9yLmh0bWwuanMKUG9seW1lci5Jcm9uQ2hlY2tlZEVsZW1lbnRCZWhhdmlvckltcGw9e3Byb3BlcnRpZXM6e2NoZWNrZWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxyZWZsZWN0VG9BdHRyaWJ1dGU6ITAsbm90aWZ5OiEwLG9ic2VydmVyOiJfY2hlY2tlZENoYW5nZWQifSx0b2dnbGVzOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITAscmVmbGVjdFRvQXR0cmlidXRlOiEwfSx2YWx1ZTp7dHlwZTpTdHJpbmcsdmFsdWU6Im9uIixvYnNlcnZlcjoiX3ZhbHVlQ2hhbmdlZCJ9fSxvYnNlcnZlcnM6WyJfcmVxdWlyZWRDaGFuZ2VkKHJlcXVpcmVkKSJdLGNyZWF0ZWQ6ZnVuY3Rpb24oKXt0aGlzLl9oYXNJcm9uQ2hlY2tlZEVsZW1lbnRCZWhhdmlvcj0hMH0sX2dldFZhbGlkaXR5OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGlzYWJsZWR8fCF0aGlzLnJlcXVpcmVkfHx0aGlzLmNoZWNrZWR9LF9yZXF1aXJlZENoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLnJlcXVpcmVkP3RoaXMuc2V0QXR0cmlidXRlKCJhcmlhLXJlcXVpcmVkIiwKInRydWUiKTp0aGlzLnJlbW92ZUF0dHJpYnV0ZSgiYXJpYS1yZXF1aXJlZCIpfSxfY2hlY2tlZENoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLmFjdGl2ZT10aGlzLmNoZWNrZWQ7dGhpcy5maXJlKCJpcm9uLWNoYW5nZSIpfSxfdmFsdWVDaGFuZ2VkOmZ1bmN0aW9uKCl7aWYodm9pZCAwPT09dGhpcy52YWx1ZXx8bnVsbD09PXRoaXMudmFsdWUpdGhpcy52YWx1ZT0ib24ifX07UG9seW1lci5Jcm9uQ2hlY2tlZEVsZW1lbnRCZWhhdmlvcj1bUG9seW1lci5Jcm9uRm9ybUVsZW1lbnRCZWhhdmlvcixQb2x5bWVyLklyb25WYWxpZGF0YWJsZUJlaGF2aW9yLFBvbHltZXIuSXJvbkNoZWNrZWRFbGVtZW50QmVoYXZpb3JJbXBsXTsKPC9zY3JpcHQ+CgoKCgoKPHNjcmlwdD4vL35+V0VCUEFUSH5+L3BhcGVyLWJlaGF2aW9ycy9wYXBlci1pbmt5LWZvY3VzLWJlaGF2aW9yLmh0bWwuanMKUG9seW1lci5QYXBlcklua3lGb2N1c0JlaGF2aW9ySW1wbD17b2JzZXJ2ZXJzOlsiX2ZvY3VzZWRDaGFuZ2VkKHJlY2VpdmVkRm9jdXNGcm9tS2V5Ym9hcmQpIl0sX2ZvY3VzZWRDaGFuZ2VkOmZ1bmN0aW9uKGEpe2EmJnRoaXMuZW5zdXJlUmlwcGxlKCk7dGhpcy5oYXNSaXBwbGUoKSYmKHRoaXMuX3JpcHBsZS5ob2xkRG93bj1hKX0sX2NyZWF0ZVJpcHBsZTpmdW5jdGlvbigpe3ZhciBhPVBvbHltZXIuUGFwZXJSaXBwbGVCZWhhdmlvci5fY3JlYXRlUmlwcGxlKCk7YS5pZD0iaW5rIjthLnNldEF0dHJpYnV0ZSgiY2VudGVyIiwiIik7YS5jbGFzc0xpc3QuYWRkKCJjaXJjbGUiKTtyZXR1cm4gYX19O1BvbHltZXIuUGFwZXJJbmt5Rm9jdXNCZWhhdmlvcj1bUG9seW1lci5Jcm9uQnV0dG9uU3RhdGUsUG9seW1lci5Jcm9uQ29udHJvbFN0YXRlLFBvbHltZXIuUGFwZXJSaXBwbGVCZWhhdmlvcixQb2x5bWVyLlBhcGVySW5reUZvY3VzQmVoYXZpb3JJbXBsXTsKPC9zY3JpcHQ+CgoKPHNjcmlwdD4vL35+V0VCUEFUSH5+L3BhcGVyLWJlaGF2aW9ycy9wYXBlci1jaGVja2VkLWVsZW1lbnQtYmVoYXZpb3IuaHRtbC5qcwpQb2x5bWVyLlBhcGVyQ2hlY2tlZEVsZW1lbnRCZWhhdmlvckltcGw9e19jaGVja2VkQ2hhbmdlZDpmdW5jdGlvbigpe1BvbHltZXIuSXJvbkNoZWNrZWRFbGVtZW50QmVoYXZpb3JJbXBsLl9jaGVja2VkQ2hhbmdlZC5jYWxsKHRoaXMpO3RoaXMuaGFzUmlwcGxlKCkmJih0aGlzLmNoZWNrZWQ/dGhpcy5fcmlwcGxlLnNldEF0dHJpYnV0ZSgiY2hlY2tlZCIsIiIpOnRoaXMuX3JpcHBsZS5yZW1vdmVBdHRyaWJ1dGUoImNoZWNrZWQiKSl9LF9idXR0b25TdGF0ZUNoYW5nZWQ6ZnVuY3Rpb24oKXtQb2x5bWVyLlBhcGVyUmlwcGxlQmVoYXZpb3IuX2J1dHRvblN0YXRlQ2hhbmdlZC5jYWxsKHRoaXMpOyF0aGlzLmRpc2FibGVkJiZ0aGlzLmlzQXR0YWNoZWQmJih0aGlzLmNoZWNrZWQ9dGhpcy5hY3RpdmUpfX07ClBvbHltZXIuUGFwZXJDaGVja2VkRWxlbWVudEJlaGF2aW9yPVtQb2x5bWVyLlBhcGVySW5reUZvY3VzQmVoYXZpb3IsUG9seW1lci5Jcm9uQ2hlY2tlZEVsZW1lbnRCZWhhdmlvcixQb2x5bWVyLlBhcGVyQ2hlY2tlZEVsZW1lbnRCZWhhdmlvckltcGxdOwo8L3NjcmlwdD4KCgoKCjxkb20tbW9kdWxlIGlkPSJwYXBlci1jaGVja2JveCI+CiAgPHRlbXBsYXRlIHN0cmlwLXdoaXRlc3BhY2U+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgLS1jYWxjdWxhdGVkLXBhcGVyLWNoZWNrYm94LXNpemU6IHZhcigtLXBhcGVyLWNoZWNrYm94LXNpemUsIDE4cHgpOwogICAgICAgIC8qIC0xcHggaXMgYSBzZW50aW5lbCBmb3IgdGhlIGRlZmF1bHQgYW5kIGlzIHJlcGxhY2VkIGluIGBhdHRhY2hlZGAuICovCiAgICAgICAgLS1jYWxjdWxhdGVkLXBhcGVyLWNoZWNrYm94LWluay1zaXplOiB2YXIoLS1wYXBlci1jaGVja2JveC1pbmstc2l6ZSwgLTFweCk7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKICAgICAgICBsaW5lLWhlaWdodDogMDsKICAgICAgICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHRyYW5zcGFyZW50OwogICAgICB9CgogICAgICA6aG9zdChbaGlkZGVuXSkgewogICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgOmhvc3QoOmZvY3VzKSB7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgfQoKICAgICAgLmhpZGRlbiB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQoKICAgICAgI2NoZWNrYm94Q29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHdpZHRoOiB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLWNoZWNrYm94LXNpemUpOwogICAgICAgIGhlaWdodDogdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1jaGVja2JveC1zaXplKTsKICAgICAgICBtaW4td2lkdGg6IHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItY2hlY2tib3gtc2l6ZSk7CiAgICAgICAgbWFyZ2luOiB2YXIoLS1wYXBlci1jaGVja2JveC1tYXJnaW4sIGluaXRpYWwpOwogICAgICAgIHZlcnRpY2FsLWFsaWduOiB2YXIoLS1wYXBlci1jaGVja2JveC12ZXJ0aWNhbC1hbGlnbiwgbWlkZGxlKTsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtYmFja2dyb3VuZC1jb2xvciwgdHJhbnNwYXJlbnQpOwogICAgICB9CgogICAgICAjaW5rIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CgogICAgICAgIC8qIENlbnRlciB0aGUgcmlwcGxlIGluIHRoZSBjaGVja2JveCBieSBuZWdhdGl2ZSBvZmZzZXR0aW5nIGl0IGJ5CiAgICAgICAgICogKGlua1dpZHRoIC0gcmlwcGxlV2lkdGgpIC8gMiAqLwogICAgICAgIHRvcDogY2FsYygwcHggLSAodmFyKC0tY2FsY3VsYXRlZC1wYXBlci1jaGVja2JveC1pbmstc2l6ZSkgLSB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLWNoZWNrYm94LXNpemUpKSAvIDIpOwogICAgICAgIGxlZnQ6IGNhbGMoMHB4IC0gKHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItY2hlY2tib3gtaW5rLXNpemUpIC0gdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1jaGVja2JveC1zaXplKSkgLyAyKTsKICAgICAgICB3aWR0aDogdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1jaGVja2JveC1pbmstc2l6ZSk7CiAgICAgICAgaGVpZ2h0OiB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLWNoZWNrYm94LWluay1zaXplKTsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItY2hlY2tib3gtdW5jaGVja2VkLWluay1jb2xvciwgdmFyKC0tcHJpbWFyeS10ZXh0LWNvbG9yKSk7CiAgICAgICAgb3BhY2l0eTogMC42OwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CgogICAgICAjaW5rOmRpcihydGwpIHsKICAgICAgICByaWdodDogY2FsYygwcHggLSAodmFyKC0tY2FsY3VsYXRlZC1wYXBlci1jaGVja2JveC1pbmstc2l6ZSkgLSB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLWNoZWNrYm94LXNpemUpKSAvIDIpOwogICAgICAgIGxlZnQ6IGF1dG87CiAgICAgIH0KCiAgICAgICNpbmtbY2hlY2tlZF0gewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1jaGVja2JveC1jaGVja2VkLWluay1jb2xvciwgdmFyKC0tcHJpbWFyeS1jb2xvcikpOwogICAgICB9CgogICAgICAjY2hlY2tib3ggewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBib3JkZXI6IHNvbGlkIDJweDsKICAgICAgICBib3JkZXItY29sb3I6IHZhcigtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1jb2xvciwgdmFyKC0tcHJpbWFyeS10ZXh0LWNvbG9yKSk7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMnB4OwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIC13ZWJraXQtdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAxNDBtcywgYm9yZGVyLWNvbG9yIDE0MG1zOwogICAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMTQwbXMsIGJvcmRlci1jb2xvciAxNDBtczsKICAgICAgfQoKICAgICAgLyogY2hlY2tib3ggY2hlY2tlZCBhbmltYXRpb25zICovCiAgICAgICNjaGVja2JveC5jaGVja2VkICNjaGVja21hcmsgewogICAgICAgIC13ZWJraXQtYW5pbWF0aW9uOiBjaGVja21hcmstZXhwYW5kIDE0MG1zIGVhc2Utb3V0IGZvcndhcmRzOwogICAgICAgIGFuaW1hdGlvbjogY2hlY2ttYXJrLWV4cGFuZCAxNDBtcyBlYXNlLW91dCBmb3J3YXJkczsKICAgICAgfQoKICAgICAgQC13ZWJraXQta2V5ZnJhbWVzIGNoZWNrbWFyay1leHBhbmQgewogICAgICAgIDAlIHsKICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgwLCAwKSByb3RhdGUoNDVkZWcpOwogICAgICAgIH0KICAgICAgICAxMDAlIHsKICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgxLCAxKSByb3RhdGUoNDVkZWcpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgQGtleWZyYW1lcyBjaGVja21hcmstZXhwYW5kIHsKICAgICAgICAwJSB7CiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDAsIDApIHJvdGF0ZSg0NWRlZyk7CiAgICAgICAgfQogICAgICAgIDEwMCUgewogICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxLCAxKSByb3RhdGUoNDVkZWcpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgI2NoZWNrYm94LmNoZWNrZWQgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtY29sb3IsIHZhcigtLXByaW1hcnktY29sb3IpKTsKICAgICAgICBib3JkZXItY29sb3I6IHZhcigtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtY29sb3IsIHZhcigtLXByaW1hcnktY29sb3IpKTsKICAgICAgfQoKICAgICAgI2NoZWNrbWFyayB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHdpZHRoOiAzNiU7CiAgICAgICAgaGVpZ2h0OiA3MCU7CiAgICAgICAgYm9yZGVyLXN0eWxlOiBzb2xpZDsKICAgICAgICBib3JkZXItdG9wOiBub25lOwogICAgICAgIGJvcmRlci1sZWZ0OiBub25lOwogICAgICAgIGJvcmRlci1yaWdodC13aWR0aDogY2FsYygyLzE1ICogdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1jaGVja2JveC1zaXplKSk7CiAgICAgICAgYm9yZGVyLWJvdHRvbS13aWR0aDogY2FsYygyLzE1ICogdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1jaGVja2JveC1zaXplKSk7CiAgICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1wYXBlci1jaGVja2JveC1jaGVja21hcmstY29sb3IsIHdoaXRlKTsKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46IDk3JSA4NiU7CiAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogOTclIDg2JTsKICAgICAgICBib3gtc2l6aW5nOiBjb250ZW50LWJveDsgLyogcHJvdGVjdCBhZ2FpbnN0IHBhZ2UtbGV2ZWwgYm94LXNpemluZyAqLwogICAgICB9CgogICAgICAjY2hlY2ttYXJrOmRpcihydGwpIHsKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46IDUwJSAxNCU7CiAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogNTAlIDE0JTsKICAgICAgfQoKICAgICAgLyogbGFiZWwgKi8KICAgICAgI2NoZWNrYm94TGFiZWwgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKICAgICAgICBwYWRkaW5nLWxlZnQ6IHZhcigtLXBhcGVyLWNoZWNrYm94LWxhYmVsLXNwYWNpbmcsIDhweCk7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vcm1hbDsKICAgICAgICBsaW5lLWhlaWdodDogbm9ybWFsOwogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1jaGVja2JveC1sYWJlbC1jb2xvciwgdmFyKC0tcHJpbWFyeS10ZXh0LWNvbG9yKSk7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItY2hlY2tib3gtbGFiZWw7CiAgICAgIH0KCiAgICAgIDpob3N0KFtjaGVja2VkXSkgI2NoZWNrYm94TGFiZWwgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1jaGVja2JveC1sYWJlbC1jaGVja2VkLWNvbG9yLCB2YXIoLS1wYXBlci1jaGVja2JveC1sYWJlbC1jb2xvciwgdmFyKC0tcHJpbWFyeS10ZXh0LWNvbG9yKSkpOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWNoZWNrYm94LWxhYmVsLWNoZWNrZWQ7CiAgICAgIH0KCiAgICAgICNjaGVja2JveExhYmVsOmRpcihydGwpIHsKICAgICAgICBwYWRkaW5nLXJpZ2h0OiB2YXIoLS1wYXBlci1jaGVja2JveC1sYWJlbC1zcGFjaW5nLCA4cHgpOwogICAgICAgIHBhZGRpbmctbGVmdDogMDsKICAgICAgfQoKICAgICAgI2NoZWNrYm94TGFiZWxbaGlkZGVuXSB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQoKICAgICAgLyogZGlzYWJsZWQgc3RhdGUgKi8KCiAgICAgIDpob3N0KFtkaXNhYmxlZF0pICNjaGVja2JveCB7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tcGFwZXItY2hlY2tib3gtdW5jaGVja2VkLWNvbG9yLCB2YXIoLS1wcmltYXJ5LXRleHQtY29sb3IpKTsKICAgICAgfQoKICAgICAgOmhvc3QoW2Rpc2FibGVkXVtjaGVja2VkXSkgI2NoZWNrYm94IHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtY29sb3IsIHZhcigtLXByaW1hcnktdGV4dC1jb2xvcikpOwogICAgICAgIG9wYWNpdHk6IDAuNTsKICAgICAgfQoKICAgICAgOmhvc3QoW2Rpc2FibGVkXSkgI2NoZWNrYm94TGFiZWwgIHsKICAgICAgICBvcGFjaXR5OiAwLjY1OwogICAgICB9CgogICAgICAvKiBpbnZhbGlkIHN0YXRlICovCiAgICAgICNjaGVja2JveC5pbnZhbGlkOm5vdCguY2hlY2tlZCkgewogICAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tcGFwZXItY2hlY2tib3gtZXJyb3ItY29sb3IsIHZhcigtLWVycm9yLWNvbG9yKSk7CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPGRpdiBpZD0iY2hlY2tib3hDb250YWluZXIiPgogICAgICA8ZGl2IGlkPSJjaGVja2JveCIgY2xhc3MkPSJbW19jb21wdXRlQ2hlY2tib3hDbGFzcyhjaGVja2VkLCBpbnZhbGlkKV1dIj4KICAgICAgICA8ZGl2IGlkPSJjaGVja21hcmsiIGNsYXNzJD0iW1tfY29tcHV0ZUNoZWNrbWFya0NsYXNzKGNoZWNrZWQpXV0iPjwvZGl2PgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgoKICAgIDxkaXYgaWQ9ImNoZWNrYm94TGFiZWwiPjxzbG90Pjwvc2xvdD48L2Rpdj4KICA8L3RlbXBsYXRlPgoKICA8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vcGFwZXItY2hlY2tib3gvcGFwZXItY2hlY2tib3guaHRtbC5qcwpQb2x5bWVyKHtpczoicGFwZXItY2hlY2tib3giLGJlaGF2aW9yczpbUG9seW1lci5QYXBlckNoZWNrZWRFbGVtZW50QmVoYXZpb3JdLGhvc3RBdHRyaWJ1dGVzOntyb2xlOiJjaGVja2JveCIsImFyaWEtY2hlY2tlZCI6ITEsdGFiaW5kZXg6MH0scHJvcGVydGllczp7YXJpYUFjdGl2ZUF0dHJpYnV0ZTp7dHlwZTpTdHJpbmcsdmFsdWU6ImFyaWEtY2hlY2tlZCJ9fSxhdHRhY2hlZDpmdW5jdGlvbigpe1BvbHltZXIuUmVuZGVyU3RhdHVzLmFmdGVyTmV4dFJlbmRlcih0aGlzLGZ1bmN0aW9uKCl7aWYoIi0xcHgiPT09dGhpcy5nZXRDb21wdXRlZFN0eWxlVmFsdWUoIi0tY2FsY3VsYXRlZC1wYXBlci1jaGVja2JveC1pbmstc2l6ZSIpLnRyaW0oKSl7dmFyIGE9dGhpcy5nZXRDb21wdXRlZFN0eWxlVmFsdWUoIi0tY2FsY3VsYXRlZC1wYXBlci1jaGVja2JveC1zaXplIikudHJpbSgpLGM9InB4IixkPWEubWF0Y2goL1tBLVphLXpdKyQvKTtudWxsIT09ZCYmKGM9ZFswXSk7YT1wYXJzZUZsb2F0KGEpOwpkPTgvMyphOyJweCI9PT1jJiYoZD1NYXRoLmZsb29yKGQpLGQlMiE9PWElMiYmZCsrKTt0aGlzLnVwZGF0ZVN0eWxlcyh7Ii0tcGFwZXItY2hlY2tib3gtaW5rLXNpemUiOmQrY30pfX0pfSxfY29tcHV0ZUNoZWNrYm94Q2xhc3M6ZnVuY3Rpb24oYSxjKXt2YXIgZD0iIjthJiYoZCs9ImNoZWNrZWQgIik7YyYmKGQrPSJpbnZhbGlkIik7cmV0dXJuIGR9LF9jb21wdXRlQ2hlY2ttYXJrQ2xhc3M6ZnVuY3Rpb24oYSl7cmV0dXJuIGE/IiI6ImhpZGRlbiJ9LF9jcmVhdGVSaXBwbGU6ZnVuY3Rpb24oKXt0aGlzLl9yaXBwbGVDb250YWluZXI9dGhpcy4kLmNoZWNrYm94Q29udGFpbmVyO3JldHVybiBQb2x5bWVyLlBhcGVySW5reUZvY3VzQmVoYXZpb3JJbXBsLl9jcmVhdGVSaXBwbGUuY2FsbCh0aGlzKX19KTsKPC9zY3JpcHQ+CjwvZG9tLW1vZHVsZT4KCgoKCgoKCgoKCgoKPGRvbS1tb2R1bGUgaWQ9Imlyb24taWNvbiI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWlubGluZTsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtY2VudGVyLWNlbnRlcjsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CgogICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CgogICAgICAgIGZpbGw6IHZhcigtLWlyb24taWNvbi1maWxsLWNvbG9yLCBjdXJyZW50Y29sb3IpOwogICAgICAgIHN0cm9rZTogdmFyKC0taXJvbi1pY29uLXN0cm9rZS1jb2xvciwgbm9uZSk7CgogICAgICAgIHdpZHRoOiB2YXIoLS1pcm9uLWljb24td2lkdGgsIDI0cHgpOwogICAgICAgIGhlaWdodDogdmFyKC0taXJvbi1pY29uLWhlaWdodCwgMjRweCk7CiAgICAgICAgQGFwcGx5IC0taXJvbi1pY29uOwogICAgICB9CgogICAgICA6aG9zdChbaGlkZGVuXSkgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KCiAgPHNjcmlwdD4vL35+V0VCUEFUSH5+L2lyb24taWNvbi9pcm9uLWljb24uaHRtbC5qcwpQb2x5bWVyKHtpczoiaXJvbi1pY29uIixwcm9wZXJ0aWVzOntpY29uOnt0eXBlOlN0cmluZ30sdGhlbWU6e3R5cGU6U3RyaW5nfSxzcmM6e3R5cGU6U3RyaW5nfSxfbWV0YTp7dmFsdWU6UG9seW1lci5CYXNlLmNyZWF0ZSgiaXJvbi1tZXRhIix7dHlwZToiaWNvbnNldCJ9KX19LG9ic2VydmVyczpbIl91cGRhdGVJY29uKF9tZXRhLCBpc0F0dGFjaGVkKSIsIl91cGRhdGVJY29uKHRoZW1lLCBpc0F0dGFjaGVkKSIsIl9zcmNDaGFuZ2VkKHNyYywgaXNBdHRhY2hlZCkiLCJfaWNvbkNoYW5nZWQoaWNvbiwgaXNBdHRhY2hlZCkiXSxfREVGQVVMVF9JQ09OU0VUOiJpY29ucyIsX2ljb25DaGFuZ2VkOmZ1bmN0aW9uKGEpe2E9KGF8fCIiKS5zcGxpdCgiOiIpO3RoaXMuX2ljb25OYW1lPWEucG9wKCk7dGhpcy5faWNvbnNldE5hbWU9YS5wb3AoKXx8dGhpcy5fREVGQVVMVF9JQ09OU0VUO3RoaXMuX3VwZGF0ZUljb24oKX0sX3NyY0NoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVJY29uKCl9LApfdXNlc0ljb25zZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pY29ufHwhdGhpcy5zcmN9LF91cGRhdGVJY29uOmZ1bmN0aW9uKCl7dGhpcy5fdXNlc0ljb25zZXQoKT8odGhpcy5faW1nJiZ0aGlzLl9pbWcucGFyZW50Tm9kZSYmUG9seW1lci5kb20odGhpcy5yb290KS5yZW1vdmVDaGlsZCh0aGlzLl9pbWcpLCIiPT09dGhpcy5faWNvbk5hbWU/dGhpcy5faWNvbnNldCYmdGhpcy5faWNvbnNldC5yZW1vdmVJY29uKHRoaXMpOnRoaXMuX2ljb25zZXROYW1lJiZ0aGlzLl9tZXRhJiYoKHRoaXMuX2ljb25zZXQ9dGhpcy5fbWV0YS5ieUtleSh0aGlzLl9pY29uc2V0TmFtZSkpPyh0aGlzLl9pY29uc2V0LmFwcGx5SWNvbih0aGlzLHRoaXMuX2ljb25OYW1lLHRoaXMudGhlbWUpLHRoaXMudW5saXN0ZW4od2luZG93LCJpcm9uLWljb25zZXQtYWRkZWQiLCJfdXBkYXRlSWNvbiIpKTp0aGlzLmxpc3Rlbih3aW5kb3csImlyb24taWNvbnNldC1hZGRlZCIsIl91cGRhdGVJY29uIikpKToodGhpcy5faWNvbnNldCYmCnRoaXMuX2ljb25zZXQucmVtb3ZlSWNvbih0aGlzKSx0aGlzLl9pbWd8fCh0aGlzLl9pbWc9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW1nIiksdGhpcy5faW1nLnN0eWxlLndpZHRoPSIxMDAlIix0aGlzLl9pbWcuc3R5bGUuaGVpZ2h0PSIxMDAlIix0aGlzLl9pbWcuZHJhZ2dhYmxlPSExKSx0aGlzLl9pbWcuc3JjPXRoaXMuc3JjLFBvbHltZXIuZG9tKHRoaXMucm9vdCkuYXBwZW5kQ2hpbGQodGhpcy5faW1nKSl9fSk7Cjwvc2NyaXB0PgoKPC9kb20tbW9kdWxlPgoKCgoKCgoKCgo8ZG9tLW1vZHVsZSBpZD0iaXJvbi1hMTF5LWFubm91bmNlciI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgICAgICBjbGlwOiByZWN0KDBweCwwcHgsMHB4LDBweCk7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8ZGl2IGFyaWEtbGl2ZSQ9IltbbW9kZV1dIj5bW190ZXh0XV08L2Rpdj4KICA8L3RlbXBsYXRlPgoKICA8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vaXJvbi1hMTF5LWFubm91bmNlci9pcm9uLWExMXktYW5ub3VuY2VyLmh0bWwuanMKKGZ1bmN0aW9uKCl7UG9seW1lci5Jcm9uQTExeUFubm91bmNlcj1mdW5jdGlvbigpe307UG9seW1lci5Jcm9uQTExeUFubm91bmNlcj1Qb2x5bWVyKHtpczoiaXJvbi1hMTF5LWFubm91bmNlciIscHJvcGVydGllczp7bW9kZTp7dHlwZTpTdHJpbmcsdmFsdWU6InBvbGl0ZSJ9LF90ZXh0Ont0eXBlOlN0cmluZyx2YWx1ZToiIn19LGNyZWF0ZWQ6ZnVuY3Rpb24oKXtQb2x5bWVyLklyb25BMTF5QW5ub3VuY2VyLmluc3RhbmNlfHwoUG9seW1lci5Jcm9uQTExeUFubm91bmNlci5pbnN0YW5jZT10aGlzKTtkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoImlyb24tYW5ub3VuY2UiLHRoaXMuX29uSXJvbkFubm91bmNlLmJpbmQodGhpcykpfSxhbm5vdW5jZTpmdW5jdGlvbihhKXt0aGlzLl90ZXh0PSIiO3RoaXMuYXN5bmMoZnVuY3Rpb24oKXt0aGlzLl90ZXh0PWF9LDEwMCl9LF9vbklyb25Bbm5vdW5jZTpmdW5jdGlvbihhKXthLmRldGFpbCYmYS5kZXRhaWwudGV4dCYmdGhpcy5hbm5vdW5jZShhLmRldGFpbC50ZXh0KX19KTsKUG9seW1lci5Jcm9uQTExeUFubm91bmNlci5pbnN0YW5jZT1udWxsO1BvbHltZXIuSXJvbkExMXlBbm5vdW5jZXIucmVxdWVzdEF2YWlsYWJpbGl0eT1mdW5jdGlvbigpe1BvbHltZXIuSXJvbkExMXlBbm5vdW5jZXIuaW5zdGFuY2V8fChQb2x5bWVyLklyb25BMTF5QW5ub3VuY2VyLmluc3RhbmNlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlyb24tYTExeS1hbm5vdW5jZXIiKSk7ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChQb2x5bWVyLklyb25BMTF5QW5ub3VuY2VyLmluc3RhbmNlKX19KSgpOwo8L3NjcmlwdD4KPC9kb20tbW9kdWxlPgoKCgoKCjxkb20tbW9kdWxlIGlkPSJpcm9uLWlucHV0Ij4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8c2xvdCBpZD0iY29udGVudCI+PC9zbG90PgogIDwvdGVtcGxhdGU+CiAgPHNjcmlwdD4vL35+V0VCUEFUSH5+L2lyb24taW5wdXQvaXJvbi1pbnB1dC5odG1sLmpzClBvbHltZXIoe2lzOiJpcm9uLWlucHV0IixiZWhhdmlvcnM6W1BvbHltZXIuSXJvblZhbGlkYXRhYmxlQmVoYXZpb3JdLHByb3BlcnRpZXM6e2JpbmRWYWx1ZTp7dHlwZTpTdHJpbmcsdmFsdWU6IiJ9LHZhbHVlOnt0eXBlOlN0cmluZyxjb21wdXRlZDoiX2NvbXB1dGVWYWx1ZShiaW5kVmFsdWUpIn0sYWxsb3dlZFBhdHRlcm46e3R5cGU6U3RyaW5nfSxhdXRvVmFsaWRhdGU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sX2lucHV0RWxlbWVudDpPYmplY3R9LG9ic2VydmVyczpbIl9iaW5kVmFsdWVDaGFuZ2VkKGJpbmRWYWx1ZSwgX2lucHV0RWxlbWVudCkiXSxsaXN0ZW5lcnM6e2lucHV0OiJfb25JbnB1dCIsa2V5cHJlc3M6Il9vbktleXByZXNzIn0sY3JlYXRlZDpmdW5jdGlvbigpe1BvbHltZXIuSXJvbkExMXlBbm5vdW5jZXIucmVxdWVzdEF2YWlsYWJpbGl0eSgpO3RoaXMuX3ByZXZpb3VzVmFsaWRJbnB1dD0iIjt0aGlzLl9wYXR0ZXJuQWxyZWFkeUNoZWNrZWQ9ITF9LGF0dGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fb2JzZXJ2ZXI9ClBvbHltZXIuZG9tKHRoaXMpLm9ic2VydmVOb2RlcyhmdW5jdGlvbigpe3RoaXMuX2luaXRTbG90dGVkSW5wdXQoKX0uYmluZCh0aGlzKSl9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fb2JzZXJ2ZXImJihQb2x5bWVyLmRvbSh0aGlzKS51bm9ic2VydmVOb2Rlcyh0aGlzLl9vYnNlcnZlciksdGhpcy5fb2JzZXJ2ZXI9bnVsbCl9LGdldCBpbnB1dEVsZW1lbnQoKXtyZXR1cm4gdGhpcy5faW5wdXRFbGVtZW50fSxfaW5pdFNsb3R0ZWRJbnB1dDpmdW5jdGlvbigpe3RoaXMuX2lucHV0RWxlbWVudD10aGlzLmdldEVmZmVjdGl2ZUNoaWxkcmVuKClbMF07dGhpcy5pbnB1dEVsZW1lbnQmJnRoaXMuaW5wdXRFbGVtZW50LnZhbHVlJiYodGhpcy5iaW5kVmFsdWU9dGhpcy5pbnB1dEVsZW1lbnQudmFsdWUpO3RoaXMuZmlyZSgiaXJvbi1pbnB1dC1yZWFkeSIpfSxnZXQgX3BhdHRlcm5SZWdFeHAoKXtpZih0aGlzLmFsbG93ZWRQYXR0ZXJuKXZhciBhPW5ldyBSZWdFeHAodGhpcy5hbGxvd2VkUGF0dGVybik7CmVsc2Ugc3dpdGNoKHRoaXMuaW5wdXRFbGVtZW50LnR5cGUpe2Nhc2UgIm51bWJlciI6YT0vWzAtOS4sZS1dL31yZXR1cm4gYX0sX2JpbmRWYWx1ZUNoYW5nZWQ6ZnVuY3Rpb24oYSxjKXtjJiYodm9pZCAwPT09YT9jLnZhbHVlPW51bGw6YSE9PWMudmFsdWUmJih0aGlzLmlucHV0RWxlbWVudC52YWx1ZT1hKSx0aGlzLmF1dG9WYWxpZGF0ZSYmdGhpcy52YWxpZGF0ZSgpLHRoaXMuZmlyZSgiYmluZC12YWx1ZS1jaGFuZ2VkIix7dmFsdWU6YX0pKX0sX29uSW5wdXQ6ZnVuY3Rpb24oKXshdGhpcy5hbGxvd2VkUGF0dGVybnx8dGhpcy5fcGF0dGVybkFscmVhZHlDaGVja2VkfHx0aGlzLl9jaGVja1BhdHRlcm5WYWxpZGl0eSgpfHwodGhpcy5fYW5ub3VuY2VJbnZhbGlkQ2hhcmFjdGVyKCJJbnZhbGlkIHN0cmluZyBvZiBjaGFyYWN0ZXJzIG5vdCBlbnRlcmVkLiIpLHRoaXMuaW5wdXRFbGVtZW50LnZhbHVlPXRoaXMuX3ByZXZpb3VzVmFsaWRJbnB1dCk7dGhpcy5iaW5kVmFsdWU9dGhpcy5fcHJldmlvdXNWYWxpZElucHV0PQp0aGlzLmlucHV0RWxlbWVudC52YWx1ZTt0aGlzLl9wYXR0ZXJuQWxyZWFkeUNoZWNrZWQ9ITF9LF9pc1ByaW50YWJsZTpmdW5jdGlvbihhKXt2YXIgYz0xOT09YS5rZXlDb2RlfHwyMD09YS5rZXlDb2RlfHw0NT09YS5rZXlDb2RlfHw0Nj09YS5rZXlDb2RlfHwxNDQ9PWEua2V5Q29kZXx8MTQ1PT1hLmtleUNvZGV8fDMyPGEua2V5Q29kZSYmNDE+YS5rZXlDb2RlfHwxMTE8YS5rZXlDb2RlJiYxMjQ+YS5rZXlDb2RlO3JldHVybiEoOD09YS5rZXlDb2RlfHw5PT1hLmtleUNvZGV8fDEzPT1hLmtleUNvZGV8fDI3PT1hLmtleUNvZGUpJiYhKDA9PWEuY2hhckNvZGUmJmMpfSxfb25LZXlwcmVzczpmdW5jdGlvbihhKXtpZih0aGlzLmFsbG93ZWRQYXR0ZXJufHwibnVtYmVyIj09PXRoaXMuaW5wdXRFbGVtZW50LnR5cGUpe3ZhciBjPXRoaXMuX3BhdHRlcm5SZWdFeHA7aWYoYyYmIShhLm1ldGFLZXl8fGEuY3RybEtleXx8YS5hbHRLZXkpKXt0aGlzLl9wYXR0ZXJuQWxyZWFkeUNoZWNrZWQ9CiEwO3ZhciBkPVN0cmluZy5mcm9tQ2hhckNvZGUoYS5jaGFyQ29kZSk7dGhpcy5faXNQcmludGFibGUoYSkmJiFjLnRlc3QoZCkmJihhLnByZXZlbnREZWZhdWx0KCksdGhpcy5fYW5ub3VuY2VJbnZhbGlkQ2hhcmFjdGVyKCJJbnZhbGlkIGNoYXJhY3RlciAiK2QrIiBub3QgZW50ZXJlZC4iKSl9fX0sX2NoZWNrUGF0dGVyblZhbGlkaXR5OmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5fcGF0dGVyblJlZ0V4cDtpZighYSlyZXR1cm4hMDtmb3IodmFyIGM9MDtjPHRoaXMuaW5wdXRFbGVtZW50LnZhbHVlLmxlbmd0aDtjKyspaWYoIWEudGVzdCh0aGlzLmlucHV0RWxlbWVudC52YWx1ZVtjXSkpcmV0dXJuITE7cmV0dXJuITB9LHZhbGlkYXRlOmZ1bmN0aW9uKCl7aWYoIXRoaXMuaW5wdXRFbGVtZW50KXJldHVybiB0aGlzLmludmFsaWQ9ITEsITA7dmFyIGE9dGhpcy5pbnB1dEVsZW1lbnQuY2hlY2tWYWxpZGl0eSgpO2EmJih0aGlzLnJlcXVpcmVkJiYiIj09PXRoaXMuYmluZFZhbHVlP2E9ITE6CnRoaXMuaGFzVmFsaWRhdG9yKCkmJihhPVBvbHltZXIuSXJvblZhbGlkYXRhYmxlQmVoYXZpb3IudmFsaWRhdGUuY2FsbCh0aGlzLHRoaXMuYmluZFZhbHVlKSkpO3RoaXMuaW52YWxpZD0hYTt0aGlzLmZpcmUoImlyb24taW5wdXQtdmFsaWRhdGUiKTtyZXR1cm4gYX0sX2Fubm91bmNlSW52YWxpZENoYXJhY3RlcjpmdW5jdGlvbihhKXt0aGlzLmZpcmUoImlyb24tYW5ub3VuY2UiLHt0ZXh0OmF9KX0sX2NvbXB1dGVWYWx1ZTpmdW5jdGlvbihhKXtyZXR1cm4gYX19KTsKPC9zY3JpcHQ+CjwvZG9tLW1vZHVsZT4KCgoKCgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vcGFwZXItaW5wdXQvcGFwZXItaW5wdXQtYmVoYXZpb3IuaHRtbC5qcwpQb2x5bWVyLlBhcGVySW5wdXRIZWxwZXI9e307UG9seW1lci5QYXBlcklucHV0SGVscGVyLk5leHRMYWJlbElEPTE7UG9seW1lci5QYXBlcklucHV0SGVscGVyLk5leHRBZGRvbklEPTE7UG9seW1lci5QYXBlcklucHV0SGVscGVyLk5leHRJbnB1dElEPTE7ClBvbHltZXIuUGFwZXJJbnB1dEJlaGF2aW9ySW1wbD17cHJvcGVydGllczp7bGFiZWw6e3R5cGU6U3RyaW5nfSx2YWx1ZTp7bm90aWZ5OiEwLHR5cGU6U3RyaW5nfSxkaXNhYmxlZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxpbnZhbGlkOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEsbm90aWZ5OiEwfSxhbGxvd2VkUGF0dGVybjp7dHlwZTpTdHJpbmd9LHR5cGU6e3R5cGU6U3RyaW5nfSxsaXN0Ont0eXBlOlN0cmluZ30scGF0dGVybjp7dHlwZTpTdHJpbmd9LHJlcXVpcmVkOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGVycm9yTWVzc2FnZTp7dHlwZTpTdHJpbmd9LGNoYXJDb3VudGVyOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LG5vTGFiZWxGbG9hdDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxhbHdheXNGbG9hdExhYmVsOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGF1dG9WYWxpZGF0ZTp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSx2YWxpZGF0b3I6e3R5cGU6U3RyaW5nfSxhdXRvY29tcGxldGU6e3R5cGU6U3RyaW5nLAp2YWx1ZToib2ZmIn0sYXV0b2ZvY3VzOnt0eXBlOkJvb2xlYW4sb2JzZXJ2ZXI6Il9hdXRvZm9jdXNDaGFuZ2VkIn0saW5wdXRtb2RlOnt0eXBlOlN0cmluZ30sbWlubGVuZ3RoOnt0eXBlOk51bWJlcn0sbWF4bGVuZ3RoOnt0eXBlOk51bWJlcn0sbWluOnt0eXBlOlN0cmluZ30sbWF4Ont0eXBlOlN0cmluZ30sc3RlcDp7dHlwZTpTdHJpbmd9LG5hbWU6e3R5cGU6U3RyaW5nfSxwbGFjZWhvbGRlcjp7dHlwZTpTdHJpbmcsdmFsdWU6IiJ9LHJlYWRvbmx5Ont0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LHNpemU6e3R5cGU6TnVtYmVyfSxhdXRvY2FwaXRhbGl6ZTp7dHlwZTpTdHJpbmcsdmFsdWU6Im5vbmUifSxhdXRvY29ycmVjdDp7dHlwZTpTdHJpbmcsdmFsdWU6Im9mZiJ9LGF1dG9zYXZlOnt0eXBlOlN0cmluZ30scmVzdWx0czp7dHlwZTpOdW1iZXJ9LGFjY2VwdDp7dHlwZTpTdHJpbmd9LG11bHRpcGxlOnt0eXBlOkJvb2xlYW59LF9hcmlhRGVzY3JpYmVkQnk6e3R5cGU6U3RyaW5nLHZhbHVlOiIifSwKX2FyaWFMYWJlbGxlZEJ5Ont0eXBlOlN0cmluZyx2YWx1ZToiIn0sX2lucHV0SWQ6e3R5cGU6U3RyaW5nLHZhbHVlOiIifX0sbGlzdGVuZXJzOnsiYWRkb24tYXR0YWNoZWQiOiJfb25BZGRvbkF0dGFjaGVkIn0sa2V5QmluZGluZ3M6eyJzaGlmdCt0YWI6a2V5ZG93biI6Il9vblNoaWZ0VGFiRG93biJ9LGhvc3RBdHRyaWJ1dGVzOnt0YWJpbmRleDowfSxnZXQgaW5wdXRFbGVtZW50KCl7dGhpcy4kfHwodGhpcy4kPXt9KTt0aGlzLiQuaW5wdXR8fCh0aGlzLl9nZW5lcmF0ZUlucHV0SWQoKSx0aGlzLiQuaW5wdXQ9dGhpcy4kJCgiIyIrdGhpcy5faW5wdXRJZCkpO3JldHVybiB0aGlzLiQuaW5wdXR9LGdldCBfZm9jdXNhYmxlRWxlbWVudCgpe3JldHVybiB0aGlzLmlucHV0RWxlbWVudH0sY3JlYXRlZDpmdW5jdGlvbigpe3RoaXMuX3R5cGVzVGhhdEhhdmVUZXh0PSJkYXRlIGRhdGV0aW1lIGRhdGV0aW1lLWxvY2FsIG1vbnRoIHRpbWUgd2VlayBmaWxlIi5zcGxpdCgiICIpfSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX3VwZGF0ZUFyaWFMYWJlbGxlZEJ5KCk7CiFQb2x5bWVyLkVsZW1lbnQmJnRoaXMuaW5wdXRFbGVtZW50JiYtMSE9PXRoaXMuX3R5cGVzVGhhdEhhdmVUZXh0LmluZGV4T2YodGhpcy5pbnB1dEVsZW1lbnQudHlwZSkmJih0aGlzLmFsd2F5c0Zsb2F0TGFiZWw9ITApfSxfYXBwZW5kU3RyaW5nV2l0aFNwYWNlOmZ1bmN0aW9uKGEsYyl7cmV0dXJuIGE/YSsiICIrYzpjfSxfb25BZGRvbkF0dGFjaGVkOmZ1bmN0aW9uKGEpe2E9UG9seW1lci5kb20oYSkucm9vdFRhcmdldDtpZihhLmlkKXRoaXMuX2FyaWFEZXNjcmliZWRCeT10aGlzLl9hcHBlbmRTdHJpbmdXaXRoU3BhY2UodGhpcy5fYXJpYURlc2NyaWJlZEJ5LGEuaWQpO2Vsc2V7dmFyIGM9InBhcGVyLWlucHV0LWFkZC1vbi0iK1BvbHltZXIuUGFwZXJJbnB1dEhlbHBlci5OZXh0QWRkb25JRCsrO2EuaWQ9Yzt0aGlzLl9hcmlhRGVzY3JpYmVkQnk9dGhpcy5fYXBwZW5kU3RyaW5nV2l0aFNwYWNlKHRoaXMuX2FyaWFEZXNjcmliZWRCeSxjKX19LHZhbGlkYXRlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5wdXRFbGVtZW50LnZhbGlkYXRlKCl9LApfZm9jdXNCbHVySGFuZGxlcjpmdW5jdGlvbihhKXtQb2x5bWVyLklyb25Db250cm9sU3RhdGUuX2ZvY3VzQmx1ckhhbmRsZXIuY2FsbCh0aGlzLGEpO3RoaXMuZm9jdXNlZCYmIXRoaXMuX3NoaWZ0VGFiUHJlc3NlZCYmdGhpcy5fZm9jdXNhYmxlRWxlbWVudCYmdGhpcy5fZm9jdXNhYmxlRWxlbWVudC5mb2N1cygpfSxfb25TaGlmdFRhYkRvd246ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmdldEF0dHJpYnV0ZSgidGFiaW5kZXgiKTt0aGlzLl9zaGlmdFRhYlByZXNzZWQ9ITA7dGhpcy5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IiwiLTEiKTt0aGlzLmFzeW5jKGZ1bmN0aW9uKCl7dGhpcy5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IixhKTt0aGlzLl9zaGlmdFRhYlByZXNzZWQ9ITF9LDEpfSxfaGFuZGxlQXV0b1ZhbGlkYXRlOmZ1bmN0aW9uKCl7dGhpcy5hdXRvVmFsaWRhdGUmJnRoaXMudmFsaWRhdGUoKX0sdXBkYXRlVmFsdWVBbmRQcmVzZXJ2ZUNhcmV0OmZ1bmN0aW9uKGEpe3RyeXt2YXIgYz0KdGhpcy5pbnB1dEVsZW1lbnQuc2VsZWN0aW9uU3RhcnQ7dGhpcy52YWx1ZT1hO3RoaXMuaW5wdXRFbGVtZW50LnNlbGVjdGlvblN0YXJ0PWM7dGhpcy5pbnB1dEVsZW1lbnQuc2VsZWN0aW9uRW5kPWN9Y2F0Y2goZCl7dGhpcy52YWx1ZT1hfX0sX2NvbXB1dGVBbHdheXNGbG9hdExhYmVsOmZ1bmN0aW9uKGEsYyl7cmV0dXJuIGN8fGF9LF91cGRhdGVBcmlhTGFiZWxsZWRCeTpmdW5jdGlvbigpe3ZhciBhPVBvbHltZXIuZG9tKHRoaXMucm9vdCkucXVlcnlTZWxlY3RvcigibGFiZWwiKTtpZihhKXtpZihhLmlkKXZhciBjPWEuaWQ7ZWxzZSBjPSJwYXBlci1pbnB1dC1sYWJlbC0iK1BvbHltZXIuUGFwZXJJbnB1dEhlbHBlci5OZXh0TGFiZWxJRCsrLGEuaWQ9Yzt0aGlzLl9hcmlhTGFiZWxsZWRCeT1jfWVsc2UgdGhpcy5fYXJpYUxhYmVsbGVkQnk9IiJ9LF9nZW5lcmF0ZUlucHV0SWQ6ZnVuY3Rpb24oKXt0aGlzLl9pbnB1dElkJiYiIiE9PXRoaXMuX2lucHV0SWR8fCh0aGlzLl9pbnB1dElkPQoiaW5wdXQtIitQb2x5bWVyLlBhcGVySW5wdXRIZWxwZXIuTmV4dElucHV0SUQrKyl9LF9vbkNoYW5nZTpmdW5jdGlvbihhKXt0aGlzLnNoYWRvd1Jvb3QmJnRoaXMuZmlyZShhLnR5cGUse3NvdXJjZUV2ZW50OmF9LHtub2RlOnRoaXMsYnViYmxlczphLmJ1YmJsZXMsY2FuY2VsYWJsZTphLmNhbmNlbGFibGV9KX0sX2F1dG9mb2N1c0NoYW5nZWQ6ZnVuY3Rpb24oKXtpZih0aGlzLmF1dG9mb2N1cyYmdGhpcy5fZm9jdXNhYmxlRWxlbWVudCl7dmFyIGE9ZG9jdW1lbnQuYWN0aXZlRWxlbWVudDthIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQmJmEhPT1kb2N1bWVudC5ib2R5JiZhIT09ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50fHx0aGlzLl9mb2N1c2FibGVFbGVtZW50LmZvY3VzKCl9fX07UG9seW1lci5QYXBlcklucHV0QmVoYXZpb3I9W1BvbHltZXIuSXJvbkNvbnRyb2xTdGF0ZSxQb2x5bWVyLklyb25BMTF5S2V5c0JlaGF2aW9yLFBvbHltZXIuUGFwZXJJbnB1dEJlaGF2aW9ySW1wbF07Cjwvc2NyaXB0PgoKCgoKCgo8Y3VzdG9tLXN0eWxlPgogIDxzdHlsZSBpcz0iY3VzdG9tLXN0eWxlIj4KICAgIGh0bWwgewoKICAgICAgLyogU2hhcmVkIFN0eWxlcyAqLwogICAgICAtLXBhcGVyLWZvbnQtY29tbW9uLWJhc2U6IHsKICAgICAgICBmb250LWZhbWlseTogJ1JvYm90bycsICdOb3RvJywgc2Fucy1zZXJpZjsKICAgICAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKICAgICAgfTsKCiAgICAgIC0tcGFwZXItZm9udC1jb21tb24tY29kZTogewogICAgICAgIGZvbnQtZmFtaWx5OiAnUm9ib3RvIE1vbm8nLCAnQ29uc29sYXMnLCAnTWVubG8nLCBtb25vc3BhY2U7CiAgICAgICAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7CiAgICAgIH07CgogICAgICAtLXBhcGVyLWZvbnQtY29tbW9uLWV4cGVuc2l2ZS1rZXJuaW5nOiB7CiAgICAgICAgdGV4dC1yZW5kZXJpbmc6IG9wdGltaXplTGVnaWJpbGl0eTsKICAgICAgfTsKCiAgICAgIC0tcGFwZXItZm9udC1jb21tb24tbm93cmFwOiB7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICB9OwoKICAgICAgLyogTWF0ZXJpYWwgRm9udCBTdHlsZXMgKi8KCiAgICAgIC0tcGFwZXItZm9udC1kaXNwbGF5NDogewogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLWJhc2U7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tbm93cmFwOwoKICAgICAgICBmb250LXNpemU6IDExMnB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiAzMDA7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0uMDQ0ZW07CiAgICAgICAgbGluZS1oZWlnaHQ6IDEyMHB4OwogICAgICB9OwoKICAgICAgLS1wYXBlci1mb250LWRpc3BsYXkzOiB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1ub3dyYXA7CgogICAgICAgIGZvbnQtc2l6ZTogNTZweDsKICAgICAgICBmb250LXdlaWdodDogNDAwOwogICAgICAgIGxldHRlci1zcGFjaW5nOiAtLjAyNmVtOwogICAgICAgIGxpbmUtaGVpZ2h0OiA2MHB4OwogICAgICB9OwoKICAgICAgLS1wYXBlci1mb250LWRpc3BsYXkyOiB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKCiAgICAgICAgZm9udC1zaXplOiA0NXB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0uMDE4ZW07CiAgICAgICAgbGluZS1oZWlnaHQ6IDQ4cHg7CiAgICAgIH07CgogICAgICAtLXBhcGVyLWZvbnQtZGlzcGxheTE6IHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1iYXNlOwoKICAgICAgICBmb250LXNpemU6IDM0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgICAgICBsZXR0ZXItc3BhY2luZzogLS4wMWVtOwogICAgICAgIGxpbmUtaGVpZ2h0OiA0MHB4OwogICAgICB9OwoKICAgICAgLS1wYXBlci1mb250LWhlYWRsaW5lOiB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKCiAgICAgICAgZm9udC1zaXplOiAyNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0uMDEyZW07CiAgICAgICAgbGluZS1oZWlnaHQ6IDMycHg7CiAgICAgIH07CgogICAgICAtLXBhcGVyLWZvbnQtdGl0bGU6IHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1iYXNlOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLW5vd3JhcDsKCiAgICAgICAgZm9udC1zaXplOiAyMHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgbGluZS1oZWlnaHQ6IDI4cHg7CiAgICAgIH07CgogICAgICAtLXBhcGVyLWZvbnQtc3ViaGVhZDogewogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLWJhc2U7CgogICAgICAgIGZvbnQtc2l6ZTogMTZweDsKICAgICAgICBmb250LXdlaWdodDogNDAwOwogICAgICAgIGxpbmUtaGVpZ2h0OiAyNHB4OwogICAgICB9OwoKICAgICAgLS1wYXBlci1mb250LWJvZHkyOiB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKCiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgbGluZS1oZWlnaHQ6IDI0cHg7CiAgICAgIH07CgogICAgICAtLXBhcGVyLWZvbnQtYm9keTE6IHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1iYXNlOwoKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgICAgICBsaW5lLWhlaWdodDogMjBweDsKICAgICAgfTsKCiAgICAgIC0tcGFwZXItZm9udC1jYXB0aW9uOiB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1ub3dyYXA7CgogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBmb250LXdlaWdodDogNDAwOwogICAgICAgIGxldHRlci1zcGFjaW5nOiAwLjAxMWVtOwogICAgICAgIGxpbmUtaGVpZ2h0OiAyMHB4OwogICAgICB9OwoKICAgICAgLS1wYXBlci1mb250LW1lbnU6IHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1iYXNlOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLW5vd3JhcDsKCiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgbGluZS1oZWlnaHQ6IDI0cHg7CiAgICAgIH07CgogICAgICAtLXBhcGVyLWZvbnQtYnV0dG9uOiB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1ub3dyYXA7CgogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGxldHRlci1zcGFjaW5nOiAwLjAxOGVtOwogICAgICAgIGxpbmUtaGVpZ2h0OiAyNHB4OwogICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICAgIH07CgogICAgICAtLXBhcGVyLWZvbnQtY29kZTI6IHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1jb2RlOwoKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgICAgICBsaW5lLWhlaWdodDogMjBweDsKICAgICAgfTsKCiAgICAgIC0tcGFwZXItZm9udC1jb2RlMTogewogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLWNvZGU7CgogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGxpbmUtaGVpZ2h0OiAyMHB4OwogICAgICB9OwoKICAgIH0KCiAgPC9zdHlsZT4KPC9jdXN0b20tc3R5bGU+CgoKCjxzY3JpcHQ+Ly9+fldFQlBBVEh+fi9wYXBlci1pbnB1dC9wYXBlci1pbnB1dC1hZGRvbi1iZWhhdmlvci5odG1sLmpzClBvbHltZXIuUGFwZXJJbnB1dEFkZG9uQmVoYXZpb3I9e2F0dGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5maXJlKCJhZGRvbi1hdHRhY2hlZCIpfSx1cGRhdGU6ZnVuY3Rpb24oKXt9fTsKPC9zY3JpcHQ+CgoKCgo8ZG9tLW1vZHVsZSBpZD0icGFwZXItaW5wdXQtY2hhci1jb3VudGVyIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgZmxvYXQ6IHJpZ2h0OwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNhcHRpb247CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY2hhci1jb3VudGVyOwogICAgICB9CgogICAgICA6aG9zdChbaGlkZGVuXSkgewogICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgOmhvc3QoOmRpcihydGwpKSB7CiAgICAgICAgZmxvYXQ6IGxlZnQ7CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPHNwYW4+W1tfY2hhckNvdW50ZXJTdHJdXTwvc3Bhbj4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+Cgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vcGFwZXItaW5wdXQvcGFwZXItaW5wdXQtY2hhci1jb3VudGVyLmh0bWwuanMKUG9seW1lcih7aXM6InBhcGVyLWlucHV0LWNoYXItY291bnRlciIsYmVoYXZpb3JzOltQb2x5bWVyLlBhcGVySW5wdXRBZGRvbkJlaGF2aW9yXSxwcm9wZXJ0aWVzOntfY2hhckNvdW50ZXJTdHI6e3R5cGU6U3RyaW5nLHZhbHVlOiIwIn19LHVwZGF0ZTpmdW5jdGlvbihhKXtpZihhLmlucHV0RWxlbWVudCl7YS52YWx1ZT1hLnZhbHVlfHwiIjt2YXIgYz1hLnZhbHVlLnRvU3RyaW5nKCkubGVuZ3RoLnRvU3RyaW5nKCk7YS5pbnB1dEVsZW1lbnQuaGFzQXR0cmlidXRlKCJtYXhsZW5ndGgiKSYmKGMrPSIvIithLmlucHV0RWxlbWVudC5nZXRBdHRyaWJ1dGUoIm1heGxlbmd0aCIpKTt0aGlzLl9jaGFyQ291bnRlclN0cj1jfX19KTsKPC9zY3JpcHQ+CgoKCgoKCgoKPGN1c3RvbS1zdHlsZT4KICA8c3R5bGUgaXM9ImN1c3RvbS1zdHlsZSI+CiAgICBodG1sIHsKICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItc2hhcmVkLWlucHV0LXN0eWxlOiB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOyAvKiB0byBtYWtlIGEgc3RhY2tpbmcgY29udGV4dCAqLwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgYm94LXNoYWRvdzogbm9uZTsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICAgIG1hcmdpbjogMDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBtYXgtd2lkdGg6IDEwMCU7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgICAgYm9yZGVyOiBub25lOwogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1pbnB1dC1jb250YWluZXItaW5wdXQtY29sb3IsIHZhcigtLXByaW1hcnktdGV4dC1jb2xvcikpOwogICAgICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTsKICAgICAgICB0ZXh0LWFsaWduOiBpbmhlcml0OwogICAgICAgIHZlcnRpY2FsLWFsaWduOiBib3R0b207CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtc3ViaGVhZDsKICAgICAgfTsKICAgIH0KICA8L3N0eWxlPgo8L2N1c3RvbS1zdHlsZT4KCjxkb20tbW9kdWxlIGlkPSJwYXBlci1pbnB1dC1jb250YWluZXIiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBhZGRpbmc6IDhweCAwOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNvbnRhaW5lcjsKICAgICAgfQoKICAgICAgOmhvc3QoW2lubGluZV0pIHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgIH0KCiAgICAgIDpob3N0KFtkaXNhYmxlZF0pIHsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICBvcGFjaXR5OiAwLjMzOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1pbnB1dC1jb250YWluZXItZGlzYWJsZWQ7CiAgICAgIH0KCiAgICAgIDpob3N0KFtoaWRkZW5dKSB7CiAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgICB9CgogICAgICBbaGlkZGVuXSB7CiAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgICB9CgogICAgICAuZmxvYXRlZC1sYWJlbC1wbGFjZWhvbGRlciB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jYXB0aW9uOwogICAgICB9CgogICAgICAudW5kZXJsaW5lIHsKICAgICAgICBoZWlnaHQ6IDJweDsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KCiAgICAgIC5mb2N1c2VkLWxpbmUgewogICAgICAgIEBhcHBseSAtLWxheW91dC1maXQ7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkIHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1mb2N1cy1jb2xvciwgdmFyKC0tcHJpbWFyeS1jb2xvcikpOwoKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46IGNlbnRlciBjZW50ZXI7CiAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogY2VudGVyIGNlbnRlcjsKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUzZCgwLDEsMSk7CiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZTNkKDAsMSwxKTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLXVuZGVybGluZS1mb2N1czsKICAgICAgfQoKICAgICAgLnVuZGVybGluZS5pcy1oaWdobGlnaHRlZCAuZm9jdXNlZC1saW5lIHsKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogbm9uZTsKICAgICAgICB0cmFuc2Zvcm06IG5vbmU7CiAgICAgICAgLXdlYmtpdC10cmFuc2l0aW9uOiAtd2Via2l0LXRyYW5zZm9ybSAwLjI1czsKICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4yNXM7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLXRyYW5zaXRpb24tZWFzaW5nOwogICAgICB9CgogICAgICAudW5kZXJsaW5lLmlzLWludmFsaWQgLmZvY3VzZWQtbGluZSB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1wYXBlci1pbnB1dC1jb250YWluZXItaW52YWxpZC1jb2xvciwgdmFyKC0tZXJyb3ItY29sb3IpKTsKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogbm9uZTsKICAgICAgICB0cmFuc2Zvcm06IG5vbmU7CiAgICAgICAgLXdlYmtpdC10cmFuc2l0aW9uOiAtd2Via2l0LXRyYW5zZm9ybSAwLjI1czsKICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4yNXM7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLXRyYW5zaXRpb24tZWFzaW5nOwogICAgICB9CgogICAgICAudW5mb2N1c2VkLWxpbmUgewogICAgICAgIEBhcHBseSAtLWxheW91dC1maXQ7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1jb2xvciwgdmFyKC0tc2Vjb25kYXJ5LXRleHQtY29sb3IpKTsKICAgICAgICBAYXBwbHkgLS1wYXBlci1pbnB1dC1jb250YWluZXItdW5kZXJsaW5lOwogICAgICB9CgogICAgICA6aG9zdChbZGlzYWJsZWRdKSAudW5mb2N1c2VkLWxpbmUgewogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBkYXNoZWQ7CiAgICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1wYXBlci1pbnB1dC1jb250YWluZXItY29sb3IsIHZhcigtLXNlY29uZGFyeS10ZXh0LWNvbG9yKSk7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLXVuZGVybGluZS1kaXNhYmxlZDsKICAgICAgfQoKICAgICAgLmlucHV0LXdyYXBwZXIgewogICAgICAgIEBhcHBseSAtLWxheW91dC1ob3Jpem9udGFsOwogICAgICAgIEBhcHBseSAtLWxheW91dC1jZW50ZXI7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICAuaW5wdXQtY29udGVudCB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWZsZXgtYXV0bzsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtcmVsYXRpdmU7CiAgICAgICAgbWF4LXdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAuaW5wdXQtY29udGVudCA6OnNsb3R0ZWQobGFiZWwpLAogICAgICAuaW5wdXQtY29udGVudCA6OnNsb3R0ZWQoLnBhcGVyLWlucHV0LWxhYmVsKSB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGZvbnQ6IGluaGVyaXQ7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1jb2xvciwgdmFyKC0tc2Vjb25kYXJ5LXRleHQtY29sb3IpKTsKICAgICAgICAtd2Via2l0LXRyYW5zaXRpb246IC13ZWJraXQtdHJhbnNmb3JtIDAuMjVzLCB3aWR0aCAwLjI1czsKICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4yNXMsIHdpZHRoIDAuMjVzOwogICAgICAgIC13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjogbGVmdCB0b3A7CiAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogbGVmdCB0b3A7CiAgICAgICAgLyogRml4IGZvciBzYWZhcmkgbm90IGZvY3VzaW5nIDAtaGVpZ2h0IGRhdGUvdGltZSBpbnB1dHMgd2l0aCAtd2Via2l0LWFwcGVyYW5jZTogbm9uZTsgKi8KICAgICAgICBtaW4taGVpZ2h0OiAxcHg7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLW5vd3JhcDsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LXN1YmhlYWQ7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWxhYmVsOwogICAgICAgIEBhcHBseSAtLXBhcGVyLXRyYW5zaXRpb24tZWFzaW5nOwogICAgICB9CgogICAgICAuaW5wdXQtY29udGVudC5sYWJlbC1pcy1mbG9hdGluZyA6OnNsb3R0ZWQobGFiZWwpLAogICAgICAuaW5wdXQtY29udGVudC5sYWJlbC1pcy1mbG9hdGluZyA6OnNsb3R0ZWQoLnBhcGVyLWlucHV0LWxhYmVsKSB7CiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTc1JSkgc2NhbGUoMC43NSk7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC03NSUpIHNjYWxlKDAuNzUpOwoKICAgICAgICAvKiBTaW5jZSB3ZSBzY2FsZSB0byA3NS8xMDAgb2YgdGhlIHNpemUsIHdlIGFjdHVhbGx5IGhhdmUgMTAwLzc1IG9mIHRoZQogICAgICAgIG9yaWdpbmFsIHNwYWNlIG5vdyBhdmFpbGFibGUgKi8KICAgICAgICB3aWR0aDogMTMzJTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWxhYmVsLWZsb2F0aW5nOwogICAgICB9CgogICAgICA6aG9zdCg6ZGlyKHJ0bCkpIC5pbnB1dC1jb250ZW50LmxhYmVsLWlzLWZsb2F0aW5nIDo6c2xvdHRlZChsYWJlbCksCiAgICAgIDpob3N0KDpkaXIocnRsKSkgLmlucHV0LWNvbnRlbnQubGFiZWwtaXMtZmxvYXRpbmcgOjpzbG90dGVkKC5wYXBlci1pbnB1dC1sYWJlbCkgewogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGxlZnQ6IGF1dG87CiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOiByaWdodCB0b3A7CiAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogcmlnaHQgdG9wOwogICAgICB9CgogICAgICAuaW5wdXQtY29udGVudC5sYWJlbC1pcy1oaWdobGlnaHRlZCA6OnNsb3R0ZWQobGFiZWwpLAogICAgICAuaW5wdXQtY29udGVudC5sYWJlbC1pcy1oaWdobGlnaHRlZCA6OnNsb3R0ZWQoLnBhcGVyLWlucHV0LWxhYmVsKSB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1mb2N1cy1jb2xvciwgdmFyKC0tcHJpbWFyeS1jb2xvcikpOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1pbnB1dC1jb250YWluZXItbGFiZWwtZm9jdXM7CiAgICAgIH0KCiAgICAgIC5pbnB1dC1jb250ZW50LmlzLWludmFsaWQgOjpzbG90dGVkKGxhYmVsKSwKICAgICAgLmlucHV0LWNvbnRlbnQuaXMtaW52YWxpZCA6OnNsb3R0ZWQoLnBhcGVyLWlucHV0LWxhYmVsKSB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnZhbGlkLWNvbG9yLCB2YXIoLS1lcnJvci1jb2xvcikpOwogICAgICB9CgogICAgICAuaW5wdXQtY29udGVudC5sYWJlbC1pcy1oaWRkZW4gOjpzbG90dGVkKGxhYmVsKSwKICAgICAgLmlucHV0LWNvbnRlbnQubGFiZWwtaXMtaGlkZGVuIDo6c2xvdHRlZCgucGFwZXItaW5wdXQtbGFiZWwpIHsKICAgICAgICB2aXNpYmlsaXR5OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC5pbnB1dC1jb250ZW50IDo6c2xvdHRlZChpbnB1dCksCiAgICAgIC5pbnB1dC1jb250ZW50IDo6c2xvdHRlZChpcm9uLWlucHV0KSwKICAgICAgLmlucHV0LWNvbnRlbnQgOjpzbG90dGVkKHRleHRhcmVhKSwKICAgICAgLmlucHV0LWNvbnRlbnQgOjpzbG90dGVkKGlyb24tYXV0b2dyb3ctdGV4dGFyZWEpLAogICAgICAuaW5wdXQtY29udGVudCA6OnNsb3R0ZWQoLnBhcGVyLWlucHV0LWlucHV0KSB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLXNoYXJlZC1pbnB1dC1zdHlsZTsKICAgICAgICAvKiBUaGUgYXBwbHkgc2hpbSBkb2Vzbid0IGFwcGx5IHRoZSBuZXN0ZWQgY29sb3IgY3VzdG9tIHByb3BlcnR5LAogICAgICAgICAgc28gd2UgaGF2ZSB0byByZS1hcHBseSBpdCBoZXJlLiAqLwogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1pbnB1dC1jb250YWluZXItaW5wdXQtY29sb3IsIHZhcigtLXByaW1hcnktdGV4dC1jb2xvcikpOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnB1dDsKICAgICAgfQoKICAgICAgLmlucHV0LWNvbnRlbnQgOjpzbG90dGVkKGlucHV0KTo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbiwKICAgICAgLmlucHV0LWNvbnRlbnQgOjpzbG90dGVkKGlucHV0KTo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbiB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWlucHV0LXdlYmtpdC1zcGlubmVyOwogICAgICB9CgogICAgICAuaW5wdXQtY29udGVudC5mb2N1c2VkIDo6c2xvdHRlZChpbnB1dCksCiAgICAgIC5pbnB1dC1jb250ZW50LmZvY3VzZWQgOjpzbG90dGVkKGlyb24taW5wdXQpLAogICAgICAuaW5wdXQtY29udGVudC5mb2N1c2VkIDo6c2xvdHRlZCh0ZXh0YXJlYSksCiAgICAgIC5pbnB1dC1jb250ZW50LmZvY3VzZWQgOjpzbG90dGVkKGlyb24tYXV0b2dyb3ctdGV4dGFyZWEpLAogICAgICAuaW5wdXQtY29udGVudC5mb2N1c2VkIDo6c2xvdHRlZCgucGFwZXItaW5wdXQtaW5wdXQpIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1pbnB1dC1jb250YWluZXItaW5wdXQtZm9jdXM7CiAgICAgIH0KCiAgICAgIC5pbnB1dC1jb250ZW50LmlzLWludmFsaWQgOjpzbG90dGVkKGlucHV0KSwKICAgICAgLmlucHV0LWNvbnRlbnQuaXMtaW52YWxpZCA6OnNsb3R0ZWQoaXJvbi1pbnB1dCksCiAgICAgIC5pbnB1dC1jb250ZW50LmlzLWludmFsaWQgOjpzbG90dGVkKHRleHRhcmVhKSwKICAgICAgLmlucHV0LWNvbnRlbnQuaXMtaW52YWxpZCA6OnNsb3R0ZWQoaXJvbi1hdXRvZ3Jvdy10ZXh0YXJlYSksCiAgICAgIC5pbnB1dC1jb250ZW50LmlzLWludmFsaWQgOjpzbG90dGVkKC5wYXBlci1pbnB1dC1pbnB1dCkgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnB1dC1pbnZhbGlkOwogICAgICB9CgogICAgICAucHJlZml4IDo6c2xvdHRlZCgqKSB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtc3ViaGVhZDsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtZmxleC1ub25lOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LXByZWZpeDsKICAgICAgfQoKICAgICAgLnN1ZmZpeCA6OnNsb3R0ZWQoKikgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LXN1YmhlYWQ7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWZsZXgtbm9uZTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtc3VmZml4OwogICAgICB9CgogICAgICAvKiBGaXJlZm94IHNldHMgYSBtaW4td2lkdGggb24gdGhlIGlucHV0LCB3aGljaCBjYW4gY2F1c2UgbGF5b3V0IGlzc3VlcyAqLwogICAgICAuaW5wdXQtY29udGVudCA6OnNsb3R0ZWQoaW5wdXQpIHsKICAgICAgICBtaW4td2lkdGg6IDA7CiAgICAgIH0KCiAgICAgIC5pbnB1dC1jb250ZW50IDo6c2xvdHRlZCh0ZXh0YXJlYSkgewogICAgICAgIHJlc2l6ZTogbm9uZTsKICAgICAgfQoKICAgICAgLmFkZC1vbi1jb250ZW50IHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KCiAgICAgIC5hZGQtb24tY29udGVudC5pcy1pbnZhbGlkIDo6c2xvdHRlZCgqKSB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnZhbGlkLWNvbG9yLCB2YXIoLS1lcnJvci1jb2xvcikpOwogICAgICB9CgogICAgICAuYWRkLW9uLWNvbnRlbnQuaXMtaGlnaGxpZ2h0ZWQgOjpzbG90dGVkKCopIHsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWZvY3VzLWNvbG9yLCB2YXIoLS1wcmltYXJ5LWNvbG9yKSk7CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPGRpdiBjbGFzcz0iZmxvYXRlZC1sYWJlbC1wbGFjZWhvbGRlciIgYXJpYS1oaWRkZW49InRydWUiIGhpZGRlbj0iW1tub0xhYmVsRmxvYXRdXSI+Jm5ic3A7PC9kaXY+CgogICAgPGRpdiBjbGFzcz0iaW5wdXQtd3JhcHBlciI+CiAgICAgIDxzcGFuIGNsYXNzPSJwcmVmaXgiPjxzbG90IG5hbWU9InByZWZpeCI+PC9zbG90Pjwvc3Bhbj4KCiAgICAgIDxkaXYgY2xhc3MkPSJbW19jb21wdXRlSW5wdXRDb250ZW50Q2xhc3Mobm9MYWJlbEZsb2F0LGFsd2F5c0Zsb2F0TGFiZWwsZm9jdXNlZCxpbnZhbGlkLF9pbnB1dEhhc0NvbnRlbnQpXV0iIGlkPSJsYWJlbEFuZElucHV0Q29udGFpbmVyIj4KICAgICAgICA8c2xvdCBuYW1lPSJsYWJlbCI+PC9zbG90PgogICAgICAgIDxzbG90IG5hbWU9ImlucHV0Ij48L3Nsb3Q+CiAgICAgIDwvZGl2PgoKICAgICAgPHNwYW4gY2xhc3M9InN1ZmZpeCI+PHNsb3QgbmFtZT0ic3VmZml4Ij48L3Nsb3Q+PC9zcGFuPgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcyQ9IltbX2NvbXB1dGVVbmRlcmxpbmVDbGFzcyhmb2N1c2VkLGludmFsaWQpXV0iPgogICAgICA8ZGl2IGNsYXNzPSJ1bmZvY3VzZWQtbGluZSI+PC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImZvY3VzZWQtbGluZSI+PC9kaXY+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGNsYXNzJD0iW1tfY29tcHV0ZUFkZE9uQ29udGVudENsYXNzKGZvY3VzZWQsaW52YWxpZCldXSI+CiAgICAgIDxzbG90IG5hbWU9ImFkZC1vbiI+PC9zbG90PgogICAgPC9kaXY+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPgoKPHNjcmlwdD4vL35+V0VCUEFUSH5+L3BhcGVyLWlucHV0L3BhcGVyLWlucHV0LWNvbnRhaW5lci5odG1sLmpzClBvbHltZXIoe2lzOiJwYXBlci1pbnB1dC1jb250YWluZXIiLHByb3BlcnRpZXM6e25vTGFiZWxGbG9hdDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxhbHdheXNGbG9hdExhYmVsOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGF0dHJGb3JWYWx1ZTp7dHlwZTpTdHJpbmcsdmFsdWU6ImJpbmQtdmFsdWUifSxhdXRvVmFsaWRhdGU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0saW52YWxpZDp7b2JzZXJ2ZXI6Il9pbnZhbGlkQ2hhbmdlZCIsdHlwZTpCb29sZWFuLHZhbHVlOiExfSxmb2N1c2VkOntyZWFkT25seTohMCx0eXBlOkJvb2xlYW4sdmFsdWU6ITEsbm90aWZ5OiEwfSxfYWRkb25zOnt0eXBlOkFycmF5fSxfaW5wdXRIYXNDb250ZW50Ont0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LF9pbnB1dFNlbGVjdG9yOnt0eXBlOlN0cmluZyx2YWx1ZToiaW5wdXQsaXJvbi1pbnB1dCx0ZXh0YXJlYSwucGFwZXItaW5wdXQtaW5wdXQifSxfYm91bmRPbkZvY3VzOnt0eXBlOkZ1bmN0aW9uLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX29uRm9jdXMuYmluZCh0aGlzKX19LApfYm91bmRPbkJsdXI6e3R5cGU6RnVuY3Rpb24sdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fb25CbHVyLmJpbmQodGhpcyl9fSxfYm91bmRPbklucHV0Ont0eXBlOkZ1bmN0aW9uLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX29uSW5wdXQuYmluZCh0aGlzKX19LF9ib3VuZFZhbHVlQ2hhbmdlZDp7dHlwZTpGdW5jdGlvbix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9vblZhbHVlQ2hhbmdlZC5iaW5kKHRoaXMpfX19LGxpc3RlbmVyczp7ImFkZG9uLWF0dGFjaGVkIjoiX29uQWRkb25BdHRhY2hlZCIsImlyb24taW5wdXQtdmFsaWRhdGUiOiJfb25Jcm9uSW5wdXRWYWxpZGF0ZSJ9LGdldCBfdmFsdWVDaGFuZ2VkRXZlbnQoKXtyZXR1cm4gdGhpcy5hdHRyRm9yVmFsdWUrIi1jaGFuZ2VkIn0sZ2V0IF9wcm9wZXJ0eUZvclZhbHVlKCl7cmV0dXJuIFBvbHltZXIuQ2FzZU1hcC5kYXNoVG9DYW1lbENhc2UodGhpcy5hdHRyRm9yVmFsdWUpfSxnZXQgX2lucHV0RWxlbWVudCgpe3JldHVybiBQb2x5bWVyLmRvbSh0aGlzKS5xdWVyeVNlbGVjdG9yKHRoaXMuX2lucHV0U2VsZWN0b3IpfSwKZ2V0IF9pbnB1dEVsZW1lbnRWYWx1ZSgpe3JldHVybiB0aGlzLl9pbnB1dEVsZW1lbnRbdGhpcy5fcHJvcGVydHlGb3JWYWx1ZV18fHRoaXMuX2lucHV0RWxlbWVudC52YWx1ZX0scmVhZHk6ZnVuY3Rpb24oKXt0aGlzLl9faXNGaXJzdFZhbHVlVXBkYXRlPSEwO3RoaXMuX2FkZG9uc3x8KHRoaXMuX2FkZG9ucz1bXSk7dGhpcy5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsdGhpcy5fYm91bmRPbkZvY3VzLCEwKTt0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLHRoaXMuX2JvdW5kT25CbHVyLCEwKX0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLmF0dHJGb3JWYWx1ZT90aGlzLl9pbnB1dEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLl92YWx1ZUNoYW5nZWRFdmVudCx0aGlzLl9ib3VuZFZhbHVlQ2hhbmdlZCk6dGhpcy5hZGRFdmVudExpc3RlbmVyKCJpbnB1dCIsdGhpcy5fb25JbnB1dCk7dGhpcy5faW5wdXRFbGVtZW50VmFsdWUmJiIiIT10aGlzLl9pbnB1dEVsZW1lbnRWYWx1ZT8KdGhpcy5faGFuZGxlVmFsdWVBbmRBdXRvVmFsaWRhdGUodGhpcy5faW5wdXRFbGVtZW50KTp0aGlzLl9oYW5kbGVWYWx1ZSh0aGlzLl9pbnB1dEVsZW1lbnQpfSxfb25BZGRvbkF0dGFjaGVkOmZ1bmN0aW9uKGEpe3RoaXMuX2FkZG9uc3x8KHRoaXMuX2FkZG9ucz1bXSk7YT1hLnRhcmdldDstMT09PXRoaXMuX2FkZG9ucy5pbmRleE9mKGEpJiYodGhpcy5fYWRkb25zLnB1c2goYSksdGhpcy5pc0F0dGFjaGVkJiZ0aGlzLl9oYW5kbGVWYWx1ZSh0aGlzLl9pbnB1dEVsZW1lbnQpKX0sX29uRm9jdXM6ZnVuY3Rpb24oKXt0aGlzLl9zZXRGb2N1c2VkKCEwKX0sX29uQmx1cjpmdW5jdGlvbigpe3RoaXMuX3NldEZvY3VzZWQoITEpO3RoaXMuX2hhbmRsZVZhbHVlQW5kQXV0b1ZhbGlkYXRlKHRoaXMuX2lucHV0RWxlbWVudCl9LF9vbklucHV0OmZ1bmN0aW9uKGEpe3RoaXMuX2hhbmRsZVZhbHVlQW5kQXV0b1ZhbGlkYXRlKGEudGFyZ2V0KX0sX29uVmFsdWVDaGFuZ2VkOmZ1bmN0aW9uKGEpe3ZhciBjPQphLnRhcmdldDtpZih0aGlzLl9faXNGaXJzdFZhbHVlVXBkYXRlJiYodGhpcy5fX2lzRmlyc3RWYWx1ZVVwZGF0ZT0hMSx2b2lkIDA9PT1jLnZhbHVlfHwiIj09PWMudmFsdWUpKXJldHVybjt0aGlzLl9oYW5kbGVWYWx1ZUFuZEF1dG9WYWxpZGF0ZShhLnRhcmdldCl9LF9oYW5kbGVWYWx1ZTpmdW5jdGlvbihhKXt2YXIgYz10aGlzLl9pbnB1dEVsZW1lbnRWYWx1ZTtjfHwwPT09Y3x8Im51bWJlciI9PT1hLnR5cGUmJiFhLmNoZWNrVmFsaWRpdHkoKT90aGlzLl9pbnB1dEhhc0NvbnRlbnQ9ITA6dGhpcy5faW5wdXRIYXNDb250ZW50PSExO3RoaXMudXBkYXRlQWRkb25zKHtpbnB1dEVsZW1lbnQ6YSx2YWx1ZTpjLGludmFsaWQ6dGhpcy5pbnZhbGlkfSl9LF9oYW5kbGVWYWx1ZUFuZEF1dG9WYWxpZGF0ZTpmdW5jdGlvbihhKXt0aGlzLmF1dG9WYWxpZGF0ZSYmYSYmKHRoaXMuaW52YWxpZD0hKGEudmFsaWRhdGU/YS52YWxpZGF0ZSh0aGlzLl9pbnB1dEVsZW1lbnRWYWx1ZSk6YS5jaGVja1ZhbGlkaXR5KCkpKTsKdGhpcy5faGFuZGxlVmFsdWUoYSl9LF9vbklyb25JbnB1dFZhbGlkYXRlOmZ1bmN0aW9uKCl7dGhpcy5pbnZhbGlkPXRoaXMuX2lucHV0RWxlbWVudC5pbnZhbGlkfSxfaW52YWxpZENoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLl9hZGRvbnMmJnRoaXMudXBkYXRlQWRkb25zKHtpbnZhbGlkOnRoaXMuaW52YWxpZH0pfSx1cGRhdGVBZGRvbnM6ZnVuY3Rpb24oYSl7Zm9yKHZhciBjLGQ9MDtjPXRoaXMuX2FkZG9uc1tkXTtkKyspYy51cGRhdGUoYSl9LF9jb21wdXRlSW5wdXRDb250ZW50Q2xhc3M6ZnVuY3Rpb24oYSxjLGQsZixnKXt2YXIgbD0iaW5wdXQtY29udGVudCI7YT8oZyYmKGwrPSIgbGFiZWwtaXMtaGlkZGVuIiksZiYmKGwrPSIgaXMtaW52YWxpZCIpKTooYT10aGlzLnF1ZXJ5U2VsZWN0b3IoImxhYmVsIiksY3x8Zz8obCs9IiBsYWJlbC1pcy1mbG9hdGluZyIsdGhpcy4kLmxhYmVsQW5kSW5wdXRDb250YWluZXIuc3R5bGUucG9zaXRpb249InN0YXRpYyIsZj9sKz0iIGlzLWludmFsaWQiOgpkJiYobCs9IiBsYWJlbC1pcy1oaWdobGlnaHRlZCIpKTooYSYmKHRoaXMuJC5sYWJlbEFuZElucHV0Q29udGFpbmVyLnN0eWxlLnBvc2l0aW9uPSJyZWxhdGl2ZSIpLGYmJihsKz0iIGlzLWludmFsaWQiKSkpO2QmJihsKz0iIGZvY3VzZWQiKTtyZXR1cm4gbH0sX2NvbXB1dGVVbmRlcmxpbmVDbGFzczpmdW5jdGlvbihhLGMpe3ZhciBkPSJ1bmRlcmxpbmUiO2M/ZCs9IiBpcy1pbnZhbGlkIjphJiYoZCs9IiBpcy1oaWdobGlnaHRlZCIpO3JldHVybiBkfSxfY29tcHV0ZUFkZE9uQ29udGVudENsYXNzOmZ1bmN0aW9uKGEsYyl7dmFyIGQ9ImFkZC1vbi1jb250ZW50IjtjP2QrPSIgaXMtaW52YWxpZCI6YSYmKGQrPSIgaXMtaGlnaGxpZ2h0ZWQiKTtyZXR1cm4gZH19KTsKPC9zY3JpcHQ+CgoKCgoKCgoKPGRvbS1tb2R1bGUgaWQ9InBhcGVyLWlucHV0LWVycm9yIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuOwoKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWludmFsaWQtY29sb3IsIHZhcigtLWVycm9yLWNvbG9yKSk7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY2FwdGlvbjsKICAgICAgICBAYXBwbHkgLS1wYXBlci1pbnB1dC1lcnJvcjsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgbGVmdDowOwogICAgICAgIHJpZ2h0OjA7CiAgICAgIH0KCiAgICAgIDpob3N0KFtpbnZhbGlkXSkgewogICAgICAgIHZpc2liaWxpdHk6IHZpc2libGU7CiAgICAgIH07CiAgICA8L3N0eWxlPgoKICAgIDxzbG90Pjwvc2xvdD4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+Cgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vcGFwZXItaW5wdXQvcGFwZXItaW5wdXQtZXJyb3IuaHRtbC5qcwpQb2x5bWVyKHtpczoicGFwZXItaW5wdXQtZXJyb3IiLGJlaGF2aW9yczpbUG9seW1lci5QYXBlcklucHV0QWRkb25CZWhhdmlvcl0scHJvcGVydGllczp7aW52YWxpZDp7cmVhZE9ubHk6ITAscmVmbGVjdFRvQXR0cmlidXRlOiEwLHR5cGU6Qm9vbGVhbn19LHVwZGF0ZTpmdW5jdGlvbihhKXt0aGlzLl9zZXRJbnZhbGlkKGEuaW52YWxpZCl9fSk7Cjwvc2NyaXB0PgoKCgoKPGRvbS1tb2R1bGUgaWQ9InBhcGVyLWlucHV0Ij4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQoKICAgICAgOmhvc3QoW2ZvY3VzZWRdKSB7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgfQoKICAgICAgOmhvc3QoW2hpZGRlbl0pIHsKICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICAgIH0KCiAgICAgIGlucHV0IHsKICAgICAgICAvKiBGaXJlZm94IHNldHMgYSBtaW4td2lkdGggb24gdGhlIGlucHV0LCB3aGljaCBjYW4gY2F1c2UgbGF5b3V0IGlzc3VlcyAqLwogICAgICAgIG1pbi13aWR0aDogMDsKICAgICAgfQoKICAgICAgLyogSW4gMS54LCB0aGUgPGlucHV0PiBpcyBkaXN0cmlidXRlZCB0byBwYXBlci1pbnB1dC1jb250YWluZXIsIHdoaWNoIHN0eWxlcyBpdC4KICAgICAgSW4gMi54IHRoZSA8aXJvbi1pbnB1dD4gaXMgZGlzdHJpYnV0ZWQgdG8gcGFwZXItaW5wdXQtY29udGFpbmVyLCB3aGljaCBzdHlsZXMKICAgICAgaXQsIGJ1dCBpbiBvcmRlciBmb3IgdGhpcyB0byB3b3JrIGNvcnJlY3RseSwgd2UgbmVlZCB0byByZXNldCBzb21lCiAgICAgIG9mIHRoZSBuYXRpdmUgaW5wdXQncyBwcm9wZXJ0aWVzIHRvIGluaGVyaXQgKGZyb20gdGhlIGlyb24taW5wdXQpICovCiAgICAgIGlyb24taW5wdXQgPiBpbnB1dCB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLXNoYXJlZC1pbnB1dC1zdHlsZTsKICAgICAgICBmb250LWZhbWlseTogaW5oZXJpdDsKICAgICAgICBmb250LXdlaWdodDogaW5oZXJpdDsKICAgICAgICBmb250LXNpemU6IGluaGVyaXQ7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IGluaGVyaXQ7CiAgICAgICAgd29yZC1zcGFjaW5nOiBpbmhlcml0OwogICAgICAgIGxpbmUtaGVpZ2h0OiBpbmhlcml0OwogICAgICAgIHRleHQtc2hhZG93OiBpbmhlcml0OwogICAgICAgIGNvbG9yOiBpbmhlcml0OwogICAgICAgIGN1cnNvcjogaW5oZXJpdDsKICAgICAgfQoKICAgICAgaW5wdXQ6ZGlzYWJsZWQgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnB1dC1kaXNhYmxlZDsKICAgICAgfQoKICAgICAgaW5wdXQ6Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b24sCiAgICAgIGlucHV0Ojotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1pbnB1dC1jb250YWluZXItaW5wdXQtd2Via2l0LXNwaW5uZXI7CiAgICAgIH0KCiAgICAgIGlucHV0Ojotd2Via2l0LWNsZWFyLWJ1dHRvbiB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWlucHV0LXdlYmtpdC1jbGVhcjsKICAgICAgfQoKICAgICAgaW5wdXQ6Oi13ZWJraXQtY2FsZW5kYXItcGlja2VyLWluZGljYXRvciB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWlucHV0LXdlYmtpdC1jYWxlbmRhci1waWNrZXItaW5kaWNhdG9yOwogICAgICB9CgogICAgICBpbnB1dDo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlciB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1jb2xvciwgdmFyKC0tc2Vjb25kYXJ5LXRleHQtY29sb3IpKTsKICAgICAgfQoKICAgICAgaW5wdXQ6LW1vei1wbGFjZWhvbGRlciB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1jb2xvciwgdmFyKC0tc2Vjb25kYXJ5LXRleHQtY29sb3IpKTsKICAgICAgfQoKICAgICAgaW5wdXQ6Oi1tb3otcGxhY2Vob2xkZXIgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1pbnB1dC1jb250YWluZXItY29sb3IsIHZhcigtLXNlY29uZGFyeS10ZXh0LWNvbG9yKSk7CiAgICAgIH0KCiAgICAgIGlucHV0OjotbXMtY2xlYXIgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1tcy1jbGVhcjsKICAgICAgfQoKICAgICAgaW5wdXQ6Oi1tcy1yZXZlYWwgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1tcy1yZXZlYWw7CiAgICAgIH0KCiAgICAgIGlucHV0Oi1tcy1pbnB1dC1wbGFjZWhvbGRlciB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1jb2xvciwgdmFyKC0tc2Vjb25kYXJ5LXRleHQtY29sb3IpKTsKICAgICAgfQoKICAgICAgbGFiZWwgewogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxwYXBlci1pbnB1dC1jb250YWluZXIgaWQ9ImNvbnRhaW5lciIgbm8tbGFiZWwtZmxvYXQ9Iltbbm9MYWJlbEZsb2F0XV0iIGFsd2F5cy1mbG9hdC1sYWJlbD0iW1tfY29tcHV0ZUFsd2F5c0Zsb2F0TGFiZWwoYWx3YXlzRmxvYXRMYWJlbCxwbGFjZWhvbGRlcildXSIgYXV0by12YWxpZGF0ZSQ9IltbYXV0b1ZhbGlkYXRlXV0iIGRpc2FibGVkJD0iW1tkaXNhYmxlZF1dIiBpbnZhbGlkPSJbW2ludmFsaWRdXSI+CgogICAgICA8c2xvdCBuYW1lPSJwcmVmaXgiIHNsb3Q9InByZWZpeCI+PC9zbG90PgoKICAgICAgPGxhYmVsIGhpZGRlbiQ9IltbIWxhYmVsXV0iIGFyaWEtaGlkZGVuPSJ0cnVlIiBmb3IkPSJbW19pbnB1dElkXV0iIHNsb3Q9ImxhYmVsIj5bW2xhYmVsXV08L2xhYmVsPgoKICAgICAgPHNwYW4gaWQ9InRlbXBsYXRlLXBsYWNlaG9sZGVyIj48L3NwYW4+CgogICAgICA8c2xvdCBuYW1lPSJzdWZmaXgiIHNsb3Q9InN1ZmZpeCI+PC9zbG90PgoKICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2Vycm9yTWVzc2FnZV1dIj4KICAgICAgICA8cGFwZXItaW5wdXQtZXJyb3IgYXJpYS1saXZlPSJhc3NlcnRpdmUiIHNsb3Q9ImFkZC1vbiI+W1tlcnJvck1lc3NhZ2VdXTwvcGFwZXItaW5wdXQtZXJyb3I+CiAgICAgIDwvdGVtcGxhdGU+CgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbY2hhckNvdW50ZXJdXSI+CiAgICAgICAgPHBhcGVyLWlucHV0LWNoYXItY291bnRlciBzbG90PSJhZGQtb24iPjwvcGFwZXItaW5wdXQtY2hhci1jb3VudGVyPgogICAgICA8L3RlbXBsYXRlPgoKICAgIDwvcGFwZXItaW5wdXQtY29udGFpbmVyPgogIDwvdGVtcGxhdGU+CgogIAogIDx0ZW1wbGF0ZSBpZD0idjAiPgogICAgPGlucHV0IGlzPSJpcm9uLWlucHV0IiBzbG90PSJpbnB1dCIgY2xhc3M9ImlucHV0LWVsZW1lbnQiIGlkJD0iW1tfaW5wdXRJZF1dIiBhcmlhLWxhYmVsbGVkYnkkPSJbW19hcmlhTGFiZWxsZWRCeV1dIiBhcmlhLWRlc2NyaWJlZGJ5JD0iW1tfYXJpYURlc2NyaWJlZEJ5XV0iIGRpc2FibGVkJD0iW1tkaXNhYmxlZF1dIiB0aXRsZSQ9IltbdGl0bGVdXSIgYmluZC12YWx1ZT0ie3t2YWx1ZX19IiBpbnZhbGlkPSJ7e2ludmFsaWR9fSIgcHJldmVudC1pbnZhbGlkLWlucHV0PSJbW3ByZXZlbnRJbnZhbGlkSW5wdXRdXSIgYWxsb3dlZC1wYXR0ZXJuPSJbW2FsbG93ZWRQYXR0ZXJuXV0iIHZhbGlkYXRvcj0iW1t2YWxpZGF0b3JdXSIgdHlwZSQ9IltbdHlwZV1dIiBwYXR0ZXJuJD0iW1twYXR0ZXJuXV0iIHJlcXVpcmVkJD0iW1tyZXF1aXJlZF1dIiBhdXRvY29tcGxldGUkPSJbW2F1dG9jb21wbGV0ZV1dIiBhdXRvZm9jdXMkPSJbW2F1dG9mb2N1c11dIiBpbnB1dG1vZGUkPSJbW2lucHV0bW9kZV1dIiBtaW5sZW5ndGgkPSJbW21pbmxlbmd0aF1dIiBtYXhsZW5ndGgkPSJbW21heGxlbmd0aF1dIiBtaW4kPSJbW21pbl1dIiBtYXgkPSJbW21heF1dIiBzdGVwJD0iW1tzdGVwXV0iIG5hbWUkPSJbW25hbWVdXSIgcGxhY2Vob2xkZXIkPSJbW3BsYWNlaG9sZGVyXV0iIHJlYWRvbmx5JD0iW1tyZWFkb25seV1dIiBsaXN0JD0iW1tsaXN0XV0iIHNpemUkPSJbW3NpemVdXSIgYXV0b2NhcGl0YWxpemUkPSJbW2F1dG9jYXBpdGFsaXplXV0iIGF1dG9jb3JyZWN0JD0iW1thdXRvY29ycmVjdF1dIiBvbi1jaGFuZ2U9Il9vbkNoYW5nZSIgdGFiaW5kZXgkPSJbW3RhYkluZGV4XV0iIGF1dG9zYXZlJD0iW1thdXRvc2F2ZV1dIiByZXN1bHRzJD0iW1tyZXN1bHRzXV0iIGFjY2VwdCQ9IltbYWNjZXB0XV0iIG11bHRpcGxlJD0iW1ttdWx0aXBsZV1dIj4KICA8L3RlbXBsYXRlPgoKICA8dGVtcGxhdGUgaWQ9InYxIj4KICAgIAogICAgPGlyb24taW5wdXQgYmluZC12YWx1ZT0ie3t2YWx1ZX19IiBzbG90PSJpbnB1dCIgY2xhc3M9ImlucHV0LWVsZW1lbnQiIGlkJD0iW1tfaW5wdXRJZF1dIiBtYXhsZW5ndGgkPSJbW21heGxlbmd0aF1dIiBhbGxvd2VkLXBhdHRlcm49IltbYWxsb3dlZFBhdHRlcm5dXSIgaW52YWxpZD0ie3tpbnZhbGlkfX0iIHZhbGlkYXRvcj0iW1t2YWxpZGF0b3JdXSI+CiAgICAgIDxpbnB1dCBhcmlhLWxhYmVsbGVkYnkkPSJbW19hcmlhTGFiZWxsZWRCeV1dIiBhcmlhLWRlc2NyaWJlZGJ5JD0iW1tfYXJpYURlc2NyaWJlZEJ5XV0iIGRpc2FibGVkJD0iW1tkaXNhYmxlZF1dIiB0aXRsZSQ9IltbdGl0bGVdXSIgdHlwZSQ9IltbdHlwZV1dIiBwYXR0ZXJuJD0iW1twYXR0ZXJuXV0iIHJlcXVpcmVkJD0iW1tyZXF1aXJlZF1dIiBhdXRvY29tcGxldGUkPSJbW2F1dG9jb21wbGV0ZV1dIiBhdXRvZm9jdXMkPSJbW2F1dG9mb2N1c11dIiBpbnB1dG1vZGUkPSJbW2lucHV0bW9kZV1dIiBtaW5sZW5ndGgkPSJbW21pbmxlbmd0aF1dIiBtYXhsZW5ndGgkPSJbW21heGxlbmd0aF1dIiBtaW4kPSJbW21pbl1dIiBtYXgkPSJbW21heF1dIiBzdGVwJD0iW1tzdGVwXV0iIG5hbWUkPSJbW25hbWVdXSIgcGxhY2Vob2xkZXIkPSJbW3BsYWNlaG9sZGVyXV0iIHJlYWRvbmx5JD0iW1tyZWFkb25seV1dIiBsaXN0JD0iW1tsaXN0XV0iIHNpemUkPSJbW3NpemVdXSIgYXV0b2NhcGl0YWxpemUkPSJbW2F1dG9jYXBpdGFsaXplXV0iIGF1dG9jb3JyZWN0JD0iW1thdXRvY29ycmVjdF1dIiBvbi1jaGFuZ2U9Il9vbkNoYW5nZSIgdGFiaW5kZXgkPSJbW3RhYkluZGV4XV0iIGF1dG9zYXZlJD0iW1thdXRvc2F2ZV1dIiByZXN1bHRzJD0iW1tyZXN1bHRzXV0iIGFjY2VwdCQ9IltbYWNjZXB0XV0iIG11bHRpcGxlJD0iW1ttdWx0aXBsZV1dIj4KICAgIDwvaXJvbi1pbnB1dD4KICA8L3RlbXBsYXRlPgoKPC9kb20tbW9kdWxlPgoKPHNjcmlwdD4vL35+V0VCUEFUSH5+L3BhcGVyLWlucHV0L3BhcGVyLWlucHV0Lmh0bWwuanMKUG9seW1lcih7aXM6InBhcGVyLWlucHV0IixiZWhhdmlvcnM6W1BvbHltZXIuUGFwZXJJbnB1dEJlaGF2aW9yLFBvbHltZXIuSXJvbkZvcm1FbGVtZW50QmVoYXZpb3JdLHByb3BlcnRpZXM6e3ZhbHVlOnt0eXBlOlN0cmluZ319LGJlZm9yZVJlZ2lzdGVyOmZ1bmN0aW9uKCl7dmFyIGE9ImZ1bmN0aW9uIj09dHlwZW9mIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlyb24taW5wdXQiKS5faW5pdFNsb3R0ZWRJbnB1dD8idjEiOiJ2MCIsYz1Qb2x5bWVyLkRvbU1vZHVsZS5pbXBvcnQoInBhcGVyLWlucHV0IiwidGVtcGxhdGUiKTthPVBvbHltZXIuRG9tTW9kdWxlLmltcG9ydCgicGFwZXItaW5wdXQiLCJ0ZW1wbGF0ZSMiK2EpOyhjPWMuY29udGVudC5xdWVyeVNlbGVjdG9yKCIjdGVtcGxhdGUtcGxhY2Vob2xkZXIiKSkmJmMucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQoYS5jb250ZW50LGMpfSxnZXQgX2ZvY3VzYWJsZUVsZW1lbnQoKXtyZXR1cm4gUG9seW1lci5FbGVtZW50P3RoaXMuaW5wdXRFbGVtZW50Ll9pbnB1dEVsZW1lbnQ6CnRoaXMuaW5wdXRFbGVtZW50fSxsaXN0ZW5lcnM6eyJpcm9uLWlucHV0LXJlYWR5IjoiX29uSXJvbklucHV0UmVhZHkifSxfb25Jcm9uSW5wdXRSZWFkeTpmdW5jdGlvbigpe3RoaXMuJC5uYXRpdmVJbnB1dHx8KHRoaXMuJC5uYXRpdmVJbnB1dD10aGlzLiQkKCJpbnB1dCIpKTt0aGlzLmlucHV0RWxlbWVudCYmLTEhPT10aGlzLl90eXBlc1RoYXRIYXZlVGV4dC5pbmRleE9mKHRoaXMuJC5uYXRpdmVJbnB1dC50eXBlKSYmKHRoaXMuYWx3YXlzRmxvYXRMYWJlbD0hMCk7dGhpcy5pbnB1dEVsZW1lbnQuYmluZFZhbHVlJiZ0aGlzLiQuY29udGFpbmVyLl9oYW5kbGVWYWx1ZUFuZEF1dG9WYWxpZGF0ZSh0aGlzLmlucHV0RWxlbWVudCl9fSk7Cjwvc2NyaXB0PgoKCgoKCgoKCgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vaXJvbi1maXQtYmVoYXZpb3IvaXJvbi1maXQtYmVoYXZpb3IuaHRtbC5qcwpQb2x5bWVyLklyb25GaXRCZWhhdmlvcj17cHJvcGVydGllczp7c2l6aW5nVGFyZ2V0Ont0eXBlOk9iamVjdCx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzfX0sZml0SW50bzp7dHlwZTpPYmplY3QsdmFsdWU6d2luZG93fSxub092ZXJsYXA6e3R5cGU6Qm9vbGVhbn0scG9zaXRpb25UYXJnZXQ6e3R5cGU6RWxlbWVudH0saG9yaXpvbnRhbEFsaWduOnt0eXBlOlN0cmluZ30sdmVydGljYWxBbGlnbjp7dHlwZTpTdHJpbmd9LGR5bmFtaWNBbGlnbjp7dHlwZTpCb29sZWFufSxob3Jpem9udGFsT2Zmc2V0Ont0eXBlOk51bWJlcix2YWx1ZTowLG5vdGlmeTohMH0sdmVydGljYWxPZmZzZXQ6e3R5cGU6TnVtYmVyLHZhbHVlOjAsbm90aWZ5OiEwfSxhdXRvRml0T25BdHRhY2g6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sX2ZpdEluZm86e3R5cGU6T2JqZWN0fX0sZ2V0IF9maXRXaWR0aCgpe3JldHVybiB0aGlzLmZpdEludG89PT13aW5kb3c/dGhpcy5maXRJbnRvLmlubmVyV2lkdGg6dGhpcy5maXRJbnRvLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRofSwKZ2V0IF9maXRIZWlnaHQoKXtyZXR1cm4gdGhpcy5maXRJbnRvPT09d2luZG93P3RoaXMuZml0SW50by5pbm5lckhlaWdodDp0aGlzLmZpdEludG8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0fSxnZXQgX2ZpdExlZnQoKXtyZXR1cm4gdGhpcy5maXRJbnRvPT09d2luZG93PzA6dGhpcy5maXRJbnRvLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnR9LGdldCBfZml0VG9wKCl7cmV0dXJuIHRoaXMuZml0SW50bz09PXdpbmRvdz8wOnRoaXMuZml0SW50by5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3B9LGdldCBfZGVmYXVsdFBvc2l0aW9uVGFyZ2V0KCl7dmFyIGE9UG9seW1lci5kb20odGhpcykucGFyZW50Tm9kZTthJiZhLm5vZGVUeXBlPT09Tm9kZS5ET0NVTUVOVF9GUkFHTUVOVF9OT0RFJiYoYT1hLmhvc3QpO3JldHVybiBhfSxnZXQgX2xvY2FsZUhvcml6b250YWxBbGlnbigpe2lmKHRoaXMuX2lzUlRMKXtpZigicmlnaHQiPT09dGhpcy5ob3Jpem9udGFsQWxpZ24pcmV0dXJuImxlZnQiOwppZigibGVmdCI9PT10aGlzLmhvcml6b250YWxBbGlnbilyZXR1cm4icmlnaHQifXJldHVybiB0aGlzLmhvcml6b250YWxBbGlnbn0sZ2V0IF9fc2hvdWxkUG9zaXRpb24oKXtyZXR1cm4odGhpcy5ob3Jpem9udGFsQWxpZ258fHRoaXMudmVydGljYWxBbGlnbikmJnRoaXMucG9zaXRpb25UYXJnZXR9LGF0dGFjaGVkOmZ1bmN0aW9uKCl7InVuZGVmaW5lZCI9PT10eXBlb2YgdGhpcy5faXNSVEwmJih0aGlzLl9pc1JUTD0icnRsIj09d2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcykuZGlyZWN0aW9uKTt0aGlzLnBvc2l0aW9uVGFyZ2V0PXRoaXMucG9zaXRpb25UYXJnZXR8fHRoaXMuX2RlZmF1bHRQb3NpdGlvblRhcmdldDt0aGlzLmF1dG9GaXRPbkF0dGFjaCYmKCJub25lIj09PXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMpLmRpc3BsYXk/c2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMuZml0KCl9LmJpbmQodGhpcykpOih3aW5kb3cuU2hhZHlET00mJlNoYWR5RE9NLmZsdXNoKCksCnRoaXMuZml0KCkpKX0sZGV0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl9fZGVmZXJyZWRGaXQmJihjbGVhclRpbWVvdXQodGhpcy5fX2RlZmVycmVkRml0KSx0aGlzLl9fZGVmZXJyZWRGaXQ9bnVsbCl9LGZpdDpmdW5jdGlvbigpe3RoaXMucG9zaXRpb24oKTt0aGlzLmNvbnN0cmFpbigpO3RoaXMuY2VudGVyKCl9LF9kaXNjb3ZlckluZm86ZnVuY3Rpb24oKXtpZighdGhpcy5fZml0SW5mbyl7dmFyIGE9d2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcyksYz13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLnNpemluZ1RhcmdldCk7dGhpcy5fZml0SW5mbz17aW5saW5lU3R5bGU6e3RvcDp0aGlzLnN0eWxlLnRvcHx8IiIsbGVmdDp0aGlzLnN0eWxlLmxlZnR8fCIiLHBvc2l0aW9uOnRoaXMuc3R5bGUucG9zaXRpb258fCIifSxzaXplcklubGluZVN0eWxlOnttYXhXaWR0aDp0aGlzLnNpemluZ1RhcmdldC5zdHlsZS5tYXhXaWR0aHx8IiIsbWF4SGVpZ2h0OnRoaXMuc2l6aW5nVGFyZ2V0LnN0eWxlLm1heEhlaWdodHx8CiIiLGJveFNpemluZzp0aGlzLnNpemluZ1RhcmdldC5zdHlsZS5ib3hTaXppbmd8fCIifSxwb3NpdGlvbmVkQnk6e3ZlcnRpY2FsbHk6ImF1dG8iIT09YS50b3A/InRvcCI6ImF1dG8iIT09YS5ib3R0b20/ImJvdHRvbSI6bnVsbCxob3Jpem9udGFsbHk6ImF1dG8iIT09YS5sZWZ0PyJsZWZ0IjoiYXV0byIhPT1hLnJpZ2h0PyJyaWdodCI6bnVsbH0sc2l6ZWRCeTp7aGVpZ2h0OiJub25lIiE9PWMubWF4SGVpZ2h0LHdpZHRoOiJub25lIiE9PWMubWF4V2lkdGgsbWluV2lkdGg6cGFyc2VJbnQoYy5taW5XaWR0aCwxMCl8fDAsbWluSGVpZ2h0OnBhcnNlSW50KGMubWluSGVpZ2h0LDEwKXx8MH0sbWFyZ2luOnt0b3A6cGFyc2VJbnQoYS5tYXJnaW5Ub3AsMTApfHwwLHJpZ2h0OnBhcnNlSW50KGEubWFyZ2luUmlnaHQsMTApfHwwLGJvdHRvbTpwYXJzZUludChhLm1hcmdpbkJvdHRvbSwxMCl8fDAsbGVmdDpwYXJzZUludChhLm1hcmdpbkxlZnQsMTApfHwwfX19fSxyZXNldEZpdDpmdW5jdGlvbigpe3ZhciBhPQp0aGlzLl9maXRJbmZvfHx7fSxjO2ZvcihjIGluIGEuc2l6ZXJJbmxpbmVTdHlsZSl0aGlzLnNpemluZ1RhcmdldC5zdHlsZVtjXT1hLnNpemVySW5saW5lU3R5bGVbY107Zm9yKGMgaW4gYS5pbmxpbmVTdHlsZSl0aGlzLnN0eWxlW2NdPWEuaW5saW5lU3R5bGVbY107dGhpcy5fZml0SW5mbz1udWxsfSxyZWZpdDpmdW5jdGlvbigpe3ZhciBhPXRoaXMuc2l6aW5nVGFyZ2V0LnNjcm9sbExlZnQsYz10aGlzLnNpemluZ1RhcmdldC5zY3JvbGxUb3A7dGhpcy5yZXNldEZpdCgpO3RoaXMuZml0KCk7dGhpcy5zaXppbmdUYXJnZXQuc2Nyb2xsTGVmdD1hO3RoaXMuc2l6aW5nVGFyZ2V0LnNjcm9sbFRvcD1jfSxwb3NpdGlvbjpmdW5jdGlvbigpe2lmKHRoaXMuX19zaG91bGRQb3NpdGlvbil7dGhpcy5fZGlzY292ZXJJbmZvKCk7dGhpcy5zdHlsZS5wb3NpdGlvbj0iZml4ZWQiO3RoaXMuc2l6aW5nVGFyZ2V0LnN0eWxlLmJveFNpemluZz0iYm9yZGVyLWJveCI7dGhpcy5zdHlsZS5sZWZ0PSIwcHgiOwp0aGlzLnN0eWxlLnRvcD0iMHB4Ijt2YXIgYT10aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGM9dGhpcy5fX2dldE5vcm1hbGl6ZWRSZWN0KHRoaXMucG9zaXRpb25UYXJnZXQpLGQ9dGhpcy5fX2dldE5vcm1hbGl6ZWRSZWN0KHRoaXMuZml0SW50byksZj10aGlzLl9maXRJbmZvLm1hcmdpbixnPXRoaXMuX19nZXRQb3NpdGlvbih0aGlzLl9sb2NhbGVIb3Jpem9udGFsQWxpZ24sdGhpcy52ZXJ0aWNhbEFsaWduLHt3aWR0aDphLndpZHRoK2YubGVmdCtmLnJpZ2h0LGhlaWdodDphLmhlaWdodCtmLnRvcCtmLmJvdHRvbX0sYSxjLGQpO2M9Zy5sZWZ0K2YubGVmdDtnPWcudG9wK2YudG9wO3ZhciBsPU1hdGgubWluKGQucmlnaHQtZi5yaWdodCxjK2Eud2lkdGgpLGs9TWF0aC5taW4oZC5ib3R0b20tZi5ib3R0b20sZythLmhlaWdodCk7Yz1NYXRoLm1heChkLmxlZnQrZi5sZWZ0LE1hdGgubWluKGMsbC10aGlzLl9maXRJbmZvLnNpemVkQnkubWluV2lkdGgpKTtnPU1hdGgubWF4KGQudG9wKwpmLnRvcCxNYXRoLm1pbihnLGstdGhpcy5fZml0SW5mby5zaXplZEJ5Lm1pbkhlaWdodCkpO3RoaXMuc2l6aW5nVGFyZ2V0LnN0eWxlLm1heFdpZHRoPU1hdGgubWF4KGwtYyx0aGlzLl9maXRJbmZvLnNpemVkQnkubWluV2lkdGgpKyJweCI7dGhpcy5zaXppbmdUYXJnZXQuc3R5bGUubWF4SGVpZ2h0PU1hdGgubWF4KGstZyx0aGlzLl9maXRJbmZvLnNpemVkQnkubWluSGVpZ2h0KSsicHgiO3RoaXMuc3R5bGUubGVmdD1jLWEubGVmdCsicHgiO3RoaXMuc3R5bGUudG9wPWctYS50b3ArInB4In19LGNvbnN0cmFpbjpmdW5jdGlvbigpe2lmKCF0aGlzLl9fc2hvdWxkUG9zaXRpb24pe3RoaXMuX2Rpc2NvdmVySW5mbygpO3ZhciBhPXRoaXMuX2ZpdEluZm87YS5wb3NpdGlvbmVkQnkudmVydGljYWxseXx8KHRoaXMuc3R5bGUucG9zaXRpb249ImZpeGVkIix0aGlzLnN0eWxlLnRvcD0iMHB4Iik7YS5wb3NpdGlvbmVkQnkuaG9yaXpvbnRhbGx5fHwodGhpcy5zdHlsZS5wb3NpdGlvbj0iZml4ZWQiLAp0aGlzLnN0eWxlLmxlZnQ9IjBweCIpO3RoaXMuc2l6aW5nVGFyZ2V0LnN0eWxlLmJveFNpemluZz0iYm9yZGVyLWJveCI7dmFyIGM9dGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTthLnNpemVkQnkuaGVpZ2h0fHx0aGlzLl9fc2l6ZURpbWVuc2lvbihjLGEucG9zaXRpb25lZEJ5LnZlcnRpY2FsbHksInRvcCIsImJvdHRvbSIsIkhlaWdodCIpO2Euc2l6ZWRCeS53aWR0aHx8dGhpcy5fX3NpemVEaW1lbnNpb24oYyxhLnBvc2l0aW9uZWRCeS5ob3Jpem9udGFsbHksImxlZnQiLCJyaWdodCIsIldpZHRoIil9fSxfc2l6ZURpbWVuc2lvbjpmdW5jdGlvbihhLGMsZCxmLGcpe3RoaXMuX19zaXplRGltZW5zaW9uKGEsYyxkLGYsZyl9LF9fc2l6ZURpbWVuc2lvbjpmdW5jdGlvbihhLGMsZCxmLGcpe3ZhciBsPXRoaXMuX2ZpdEluZm8saz10aGlzLl9fZ2V0Tm9ybWFsaXplZFJlY3QodGhpcy5maXRJbnRvKTtrPSJXaWR0aCI9PT1nP2sud2lkdGg6ay5oZWlnaHQ7Yz1jPT09Zjt2YXIgbT0KIm9mZnNldCIrZzt0aGlzLnNpemluZ1RhcmdldC5zdHlsZVsibWF4IitnXT1rLWwubWFyZ2luW2M/ZDpmXS0oYz9rLWFbZl06YVtkXSktKHRoaXNbbV0tdGhpcy5zaXppbmdUYXJnZXRbbV0pKyJweCJ9LGNlbnRlcjpmdW5jdGlvbigpe2lmKCF0aGlzLl9fc2hvdWxkUG9zaXRpb24pe3RoaXMuX2Rpc2NvdmVySW5mbygpO3ZhciBhPXRoaXMuX2ZpdEluZm8ucG9zaXRpb25lZEJ5O2lmKCFhLnZlcnRpY2FsbHl8fCFhLmhvcml6b250YWxseSl7dGhpcy5zdHlsZS5wb3NpdGlvbj0iZml4ZWQiO2EudmVydGljYWxseXx8KHRoaXMuc3R5bGUudG9wPSIwcHgiKTthLmhvcml6b250YWxseXx8KHRoaXMuc3R5bGUubGVmdD0iMHB4Iik7dmFyIGM9dGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxkPXRoaXMuX19nZXROb3JtYWxpemVkUmVjdCh0aGlzLmZpdEludG8pO2EudmVydGljYWxseXx8KHRoaXMuc3R5bGUudG9wPWQudG9wLWMudG9wKyhkLmhlaWdodC1jLmhlaWdodCkvMisicHgiKTthLmhvcml6b250YWxseXx8Cih0aGlzLnN0eWxlLmxlZnQ9ZC5sZWZ0LWMubGVmdCsoZC53aWR0aC1jLndpZHRoKS8yKyJweCIpfX19LF9fZ2V0Tm9ybWFsaXplZFJlY3Q6ZnVuY3Rpb24oYSl7cmV0dXJuIGE9PT1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnR8fGE9PT13aW5kb3c/e3RvcDowLGxlZnQ6MCx3aWR0aDp3aW5kb3cuaW5uZXJXaWR0aCxoZWlnaHQ6d2luZG93LmlubmVySGVpZ2h0LHJpZ2h0OndpbmRvdy5pbm5lcldpZHRoLGJvdHRvbTp3aW5kb3cuaW5uZXJIZWlnaHR9OmEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCl9LF9fZ2V0T2Zmc2NyZWVuQXJlYTpmdW5jdGlvbihhLGMsZCl7cmV0dXJuIE1hdGguYWJzKE1hdGgubWluKDAsYS50b3ApK01hdGgubWluKDAsZC5ib3R0b20tKGEudG9wK2MuaGVpZ2h0KSkpKmMud2lkdGgrTWF0aC5hYnMoTWF0aC5taW4oMCxhLmxlZnQpK01hdGgubWluKDAsZC5yaWdodC0oYS5sZWZ0K2Mud2lkdGgpKSkqYy5oZWlnaHR9LF9fZ2V0UG9zaXRpb246ZnVuY3Rpb24oYSxjLApkLGYsZyxsKXt2YXIgaz1be3ZlcnRpY2FsQWxpZ246InRvcCIsaG9yaXpvbnRhbEFsaWduOiJsZWZ0Iix0b3A6Zy50b3ArdGhpcy52ZXJ0aWNhbE9mZnNldCxsZWZ0OmcubGVmdCt0aGlzLmhvcml6b250YWxPZmZzZXR9LHt2ZXJ0aWNhbEFsaWduOiJ0b3AiLGhvcml6b250YWxBbGlnbjoicmlnaHQiLHRvcDpnLnRvcCt0aGlzLnZlcnRpY2FsT2Zmc2V0LGxlZnQ6Zy5yaWdodC1kLndpZHRoLXRoaXMuaG9yaXpvbnRhbE9mZnNldH0se3ZlcnRpY2FsQWxpZ246ImJvdHRvbSIsaG9yaXpvbnRhbEFsaWduOiJsZWZ0Iix0b3A6Zy5ib3R0b20tZC5oZWlnaHQtdGhpcy52ZXJ0aWNhbE9mZnNldCxsZWZ0OmcubGVmdCt0aGlzLmhvcml6b250YWxPZmZzZXR9LHt2ZXJ0aWNhbEFsaWduOiJib3R0b20iLGhvcml6b250YWxBbGlnbjoicmlnaHQiLHRvcDpnLmJvdHRvbS1kLmhlaWdodC10aGlzLnZlcnRpY2FsT2Zmc2V0LGxlZnQ6Zy5yaWdodC1kLndpZHRoLXRoaXMuaG9yaXpvbnRhbE9mZnNldH1dOwppZih0aGlzLm5vT3ZlcmxhcCl7Zm9yKHZhciBtPTAscD1rLmxlbmd0aDttPHA7bSsrKXt2YXIgcT17fSxyO2ZvcihyIGluIGtbbV0pcVtyXT1rW21dW3JdO2sucHVzaChxKX1rWzBdLnRvcD1rWzFdLnRvcCs9Zy5oZWlnaHQ7a1syXS50b3A9a1szXS50b3AtPWcuaGVpZ2h0O2tbNF0ubGVmdD1rWzZdLmxlZnQrPWcud2lkdGg7a1s1XS5sZWZ0PWtbN10ubGVmdC09Zy53aWR0aH1jPSJhdXRvIj09PWM/bnVsbDpjO2E9ImF1dG8iPT09YT9udWxsOmE7YSYmImNlbnRlciIhPT1hfHwoay5wdXNoKHt2ZXJ0aWNhbEFsaWduOiJ0b3AiLGhvcml6b250YWxBbGlnbjoiY2VudGVyIix0b3A6Zy50b3ArdGhpcy52ZXJ0aWNhbE9mZnNldCsodGhpcy5ub092ZXJsYXA/Zy5oZWlnaHQ6MCksbGVmdDpnLmxlZnQtZi53aWR0aC8yK2cud2lkdGgvMit0aGlzLmhvcml6b250YWxPZmZzZXR9KSxrLnB1c2goe3ZlcnRpY2FsQWxpZ246ImJvdHRvbSIsaG9yaXpvbnRhbEFsaWduOiJjZW50ZXIiLHRvcDpnLmJvdHRvbS0KZC5oZWlnaHQtdGhpcy52ZXJ0aWNhbE9mZnNldC0odGhpcy5ub092ZXJsYXA/Zy5oZWlnaHQ6MCksbGVmdDpnLmxlZnQtZi53aWR0aC8yK2cud2lkdGgvMit0aGlzLmhvcml6b250YWxPZmZzZXR9KSk7YyYmIm1pZGRsZSIhPT1jfHwoay5wdXNoKHt2ZXJ0aWNhbEFsaWduOiJtaWRkbGUiLGhvcml6b250YWxBbGlnbjoibGVmdCIsdG9wOmcudG9wLWYuaGVpZ2h0LzIrZy5oZWlnaHQvMit0aGlzLnZlcnRpY2FsT2Zmc2V0LGxlZnQ6Zy5sZWZ0K3RoaXMuaG9yaXpvbnRhbE9mZnNldCsodGhpcy5ub092ZXJsYXA/Zy53aWR0aDowKX0pLGsucHVzaCh7dmVydGljYWxBbGlnbjoibWlkZGxlIixob3Jpem9udGFsQWxpZ246InJpZ2h0Iix0b3A6Zy50b3AtZi5oZWlnaHQvMitnLmhlaWdodC8yK3RoaXMudmVydGljYWxPZmZzZXQsbGVmdDpnLnJpZ2h0LWQud2lkdGgtdGhpcy5ob3Jpem9udGFsT2Zmc2V0LSh0aGlzLm5vT3ZlcmxhcD9nLndpZHRoOjApfSkpOyJtaWRkbGUiPT09YyYmImNlbnRlciI9PT0KYSYmay5wdXNoKHt2ZXJ0aWNhbEFsaWduOiJtaWRkbGUiLGhvcml6b250YWxBbGlnbjoiY2VudGVyIix0b3A6Zy50b3AtZi5oZWlnaHQvMitnLmhlaWdodC8yK3RoaXMudmVydGljYWxPZmZzZXQsbGVmdDpnLmxlZnQtZi53aWR0aC8yK2cud2lkdGgvMit0aGlzLmhvcml6b250YWxPZmZzZXR9KTtmb3IobT0wO208ay5sZW5ndGg7bSsrKXtmPWtbbV07Zz1mLnZlcnRpY2FsQWxpZ249PT1jO3A9Zi5ob3Jpem9udGFsQWxpZ249PT1hO2lmKCF0aGlzLmR5bmFtaWNBbGlnbiYmIXRoaXMubm9PdmVybGFwJiZnJiZwKXt2YXIgdD1mO2JyZWFrfXE9KCFjfHxnKSYmKCFhfHxwKTtpZih0aGlzLmR5bmFtaWNBbGlnbnx8cSl7Zi5vZmZzY3JlZW5BcmVhPXRoaXMuX19nZXRPZmZzY3JlZW5BcmVhKGYsZCxsKTtpZigwPT09Zi5vZmZzY3JlZW5BcmVhJiZxKXt0PWY7YnJlYWt9dD10fHxmO3E9Zi5vZmZzY3JlZW5BcmVhLXQub2Zmc2NyZWVuQXJlYTtpZigwPnF8fDA9PT1xJiYoZ3x8cCkpdD1mfX1yZXR1cm4gdH19Owo8L3NjcmlwdD4KCgoKPHNjcmlwdD4vL35+V0VCUEFUSH5+L2lyb24tcmVzaXphYmxlLWJlaGF2aW9yL2lyb24tcmVzaXphYmxlLWJlaGF2aW9yLmh0bWwuanMKUG9seW1lci5Jcm9uUmVzaXphYmxlQmVoYXZpb3I9e3Byb3BlcnRpZXM6e19wYXJlbnRSZXNpemFibGU6e3R5cGU6T2JqZWN0LG9ic2VydmVyOiJfcGFyZW50UmVzaXphYmxlQ2hhbmdlZCJ9LF9ub3RpZnlpbmdEZXNjZW5kYW50Ont0eXBlOkJvb2xlYW4sdmFsdWU6ITF9fSxsaXN0ZW5lcnM6eyJpcm9uLXJlcXVlc3QtcmVzaXplLW5vdGlmaWNhdGlvbnMiOiJfb25Jcm9uUmVxdWVzdFJlc2l6ZU5vdGlmaWNhdGlvbnMifSxjcmVhdGVkOmZ1bmN0aW9uKCl7dGhpcy5faW50ZXJlc3RlZFJlc2l6YWJsZXM9W107dGhpcy5fYm91bmROb3RpZnlSZXNpemU9dGhpcy5ub3RpZnlSZXNpemUuYmluZCh0aGlzKX0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl9yZXF1ZXN0UmVzaXplTm90aWZpY2F0aW9ucygpfSxkZXRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX3BhcmVudFJlc2l6YWJsZT90aGlzLl9wYXJlbnRSZXNpemFibGUuc3RvcFJlc2l6ZU5vdGlmaWNhdGlvbnNGb3IodGhpcyk6d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsCnRoaXMuX2JvdW5kTm90aWZ5UmVzaXplKTt0aGlzLl9wYXJlbnRSZXNpemFibGU9bnVsbH0sbm90aWZ5UmVzaXplOmZ1bmN0aW9uKCl7dGhpcy5pc0F0dGFjaGVkJiYodGhpcy5faW50ZXJlc3RlZFJlc2l6YWJsZXMuZm9yRWFjaChmdW5jdGlvbihhKXt0aGlzLnJlc2l6ZXJTaG91bGROb3RpZnkoYSkmJnRoaXMuX25vdGlmeURlc2NlbmRhbnQoYSl9LHRoaXMpLHRoaXMuX2ZpcmVSZXNpemUoKSl9LGFzc2lnblBhcmVudFJlc2l6YWJsZTpmdW5jdGlvbihhKXt0aGlzLl9wYXJlbnRSZXNpemFibGU9YX0sc3RvcFJlc2l6ZU5vdGlmaWNhdGlvbnNGb3I6ZnVuY3Rpb24oYSl7dmFyIGM9dGhpcy5faW50ZXJlc3RlZFJlc2l6YWJsZXMuaW5kZXhPZihhKTstMTxjJiYodGhpcy5faW50ZXJlc3RlZFJlc2l6YWJsZXMuc3BsaWNlKGMsMSksdGhpcy51bmxpc3RlbihhLCJpcm9uLXJlc2l6ZSIsIl9vbkRlc2NlbmRhbnRJcm9uUmVzaXplIikpfSxyZXNpemVyU2hvdWxkTm90aWZ5OmZ1bmN0aW9uKCl7cmV0dXJuITB9LApfb25EZXNjZW5kYW50SXJvblJlc2l6ZTpmdW5jdGlvbihhKXt0aGlzLl9ub3RpZnlpbmdEZXNjZW5kYW50P2Euc3RvcFByb3BhZ2F0aW9uKCk6UG9seW1lci5TZXR0aW5ncy51c2VTaGFkb3d8fHRoaXMuX2ZpcmVSZXNpemUoKX0sX2ZpcmVSZXNpemU6ZnVuY3Rpb24oKXt0aGlzLmZpcmUoImlyb24tcmVzaXplIixudWxsLHtub2RlOnRoaXMsYnViYmxlczohMX0pfSxfb25Jcm9uUmVxdWVzdFJlc2l6ZU5vdGlmaWNhdGlvbnM6ZnVuY3Rpb24oYSl7dmFyIGM9UG9seW1lci5kb20oYSkucm9vdFRhcmdldDtjIT09dGhpcyYmKC0xPT09dGhpcy5faW50ZXJlc3RlZFJlc2l6YWJsZXMuaW5kZXhPZihjKSYmKHRoaXMuX2ludGVyZXN0ZWRSZXNpemFibGVzLnB1c2goYyksdGhpcy5saXN0ZW4oYywiaXJvbi1yZXNpemUiLCJfb25EZXNjZW5kYW50SXJvblJlc2l6ZSIpKSxjLmFzc2lnblBhcmVudFJlc2l6YWJsZSh0aGlzKSx0aGlzLl9ub3RpZnlEZXNjZW5kYW50KGMpLGEuc3RvcFByb3BhZ2F0aW9uKCkpfSwKX3BhcmVudFJlc2l6YWJsZUNoYW5nZWQ6ZnVuY3Rpb24oYSl7YSYmd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsdGhpcy5fYm91bmROb3RpZnlSZXNpemUpfSxfbm90aWZ5RGVzY2VuZGFudDpmdW5jdGlvbihhKXt0aGlzLmlzQXR0YWNoZWQmJih0aGlzLl9ub3RpZnlpbmdEZXNjZW5kYW50PSEwLGEubm90aWZ5UmVzaXplKCksdGhpcy5fbm90aWZ5aW5nRGVzY2VuZGFudD0hMSl9LF9yZXF1ZXN0UmVzaXplTm90aWZpY2F0aW9uczpmdW5jdGlvbigpe2lmKHRoaXMuaXNBdHRhY2hlZClpZigibG9hZGluZyI9PT1kb2N1bWVudC5yZWFkeVN0YXRlKXt2YXIgYT10aGlzLl9yZXF1ZXN0UmVzaXplTm90aWZpY2F0aW9ucy5iaW5kKHRoaXMpO2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInJlYWR5c3RhdGVjaGFuZ2UiLGZ1bmN0aW9uIGQoKXtkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJyZWFkeXN0YXRlY2hhbmdlIixkKTthKCl9KX1lbHNlIHRoaXMuZmlyZSgiaXJvbi1yZXF1ZXN0LXJlc2l6ZS1ub3RpZmljYXRpb25zIiwKbnVsbCx7bm9kZTp0aGlzLGJ1YmJsZXM6ITAsY2FuY2VsYWJsZTohMH0pLHRoaXMuX3BhcmVudFJlc2l6YWJsZXx8KHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJyZXNpemUiLHRoaXMuX2JvdW5kTm90aWZ5UmVzaXplKSx0aGlzLm5vdGlmeVJlc2l6ZSgpKX19Owo8L3NjcmlwdD4KCgoKCgoKCjxkb20tbW9kdWxlIGlkPSJpcm9uLW92ZXJsYXktYmFja2Ryb3AiPgoKICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWlyb24tb3ZlcmxheS1iYWNrZHJvcC1iYWNrZ3JvdW5kLWNvbG9yLCAjMDAwKTsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4yczsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICBAYXBwbHkgLS1pcm9uLW92ZXJsYXktYmFja2Ryb3A7CiAgICAgIH0KCiAgICAgIDpob3N0KC5vcGVuZWQpIHsKICAgICAgICBvcGFjaXR5OiB2YXIoLS1pcm9uLW92ZXJsYXktYmFja2Ryb3Atb3BhY2l0eSwgMC42KTsKICAgICAgICBwb2ludGVyLWV2ZW50czogYXV0bzsKICAgICAgICBAYXBwbHkgLS1pcm9uLW92ZXJsYXktYmFja2Ryb3Atb3BlbmVkOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxzbG90Pjwvc2xvdD4KICA8L3RlbXBsYXRlPgoKPC9kb20tbW9kdWxlPgoKPHNjcmlwdD4vL35+V0VCUEFUSH5+L2lyb24tb3ZlcmxheS1iZWhhdmlvci9pcm9uLW92ZXJsYXktYmFja2Ryb3AuaHRtbC5qcwooZnVuY3Rpb24oKXtQb2x5bWVyKHtpczoiaXJvbi1vdmVybGF5LWJhY2tkcm9wIixwcm9wZXJ0aWVzOntvcGVuZWQ6e3JlZmxlY3RUb0F0dHJpYnV0ZTohMCx0eXBlOkJvb2xlYW4sdmFsdWU6ITEsb2JzZXJ2ZXI6Il9vcGVuZWRDaGFuZ2VkIn19LGxpc3RlbmVyczp7dHJhbnNpdGlvbmVuZDoiX29uVHJhbnNpdGlvbmVuZCJ9LGNyZWF0ZWQ6ZnVuY3Rpb24oKXt0aGlzLl9fb3BlbmVkUmFmPW51bGx9LGF0dGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5vcGVuZWQmJnRoaXMuX29wZW5lZENoYW5nZWQodGhpcy5vcGVuZWQpfSxwcmVwYXJlOmZ1bmN0aW9uKCl7dGhpcy5vcGVuZWQmJiF0aGlzLnBhcmVudE5vZGUmJlBvbHltZXIuZG9tKGRvY3VtZW50LmJvZHkpLmFwcGVuZENoaWxkKHRoaXMpfSxvcGVuOmZ1bmN0aW9uKCl7dGhpcy5vcGVuZWQ9ITB9LGNsb3NlOmZ1bmN0aW9uKCl7dGhpcy5vcGVuZWQ9ITF9LGNvbXBsZXRlOmZ1bmN0aW9uKCl7dGhpcy5vcGVuZWR8fHRoaXMucGFyZW50Tm9kZSE9PQpkb2N1bWVudC5ib2R5fHxQb2x5bWVyLmRvbSh0aGlzLnBhcmVudE5vZGUpLnJlbW92ZUNoaWxkKHRoaXMpfSxfb25UcmFuc2l0aW9uZW5kOmZ1bmN0aW9uKGEpe2EmJmEudGFyZ2V0PT09dGhpcyYmdGhpcy5jb21wbGV0ZSgpfSxfb3BlbmVkQ2hhbmdlZDpmdW5jdGlvbihhKXthP3RoaXMucHJlcGFyZSgpOihhPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMpLCIwcyIhPT1hLnRyYW5zaXRpb25EdXJhdGlvbiYmMCE9YS5vcGFjaXR5fHx0aGlzLmNvbXBsZXRlKCkpO3RoaXMuaXNBdHRhY2hlZCYmKHRoaXMuX19vcGVuZWRSYWYmJih3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5fX29wZW5lZFJhZiksdGhpcy5fX29wZW5lZFJhZj1udWxsKSx0aGlzLnNjcm9sbFRvcD10aGlzLnNjcm9sbFRvcCx0aGlzLl9fb3BlbmVkUmFmPXdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24oKXt0aGlzLl9fb3BlbmVkUmFmPW51bGw7dGhpcy50b2dnbGVDbGFzcygib3BlbmVkIiwKdGhpcy5vcGVuZWQpfS5iaW5kKHRoaXMpKSl9fSl9KSgpOwo8L3NjcmlwdD4KCgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vaXJvbi1vdmVybGF5LWJlaGF2aW9yL2lyb24tb3ZlcmxheS1tYW5hZ2VyLmh0bWwuanMKUG9seW1lci5Jcm9uT3ZlcmxheU1hbmFnZXJDbGFzcz1mdW5jdGlvbigpe3RoaXMuX292ZXJsYXlzPVtdO3RoaXMuX21pbmltdW1aPTEwMTt0aGlzLl9iYWNrZHJvcEVsZW1lbnQ9bnVsbDtQb2x5bWVyLkdlc3R1cmVzLmFkZChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsInRhcCIsZnVuY3Rpb24oKXt9KTtkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ0YXAiLHRoaXMuX29uQ2FwdHVyZUNsaWNrLmJpbmQodGhpcyksITApO2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIix0aGlzLl9vbkNhcHR1cmVGb2N1cy5iaW5kKHRoaXMpLCEwKTtkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIix0aGlzLl9vbkNhcHR1cmVLZXlEb3duLmJpbmQodGhpcyksITApfTsKUG9seW1lci5Jcm9uT3ZlcmxheU1hbmFnZXJDbGFzcy5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlBvbHltZXIuSXJvbk92ZXJsYXlNYW5hZ2VyQ2xhc3MsZ2V0IGJhY2tkcm9wRWxlbWVudCgpe3RoaXMuX2JhY2tkcm9wRWxlbWVudHx8KHRoaXMuX2JhY2tkcm9wRWxlbWVudD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpcm9uLW92ZXJsYXktYmFja2Ryb3AiKSk7cmV0dXJuIHRoaXMuX2JhY2tkcm9wRWxlbWVudH0sZ2V0IGRlZXBBY3RpdmVFbGVtZW50KCl7dmFyIGE9ZG9jdW1lbnQuYWN0aXZlRWxlbWVudDthJiYhMSE9PWEgaW5zdGFuY2VvZiBFbGVtZW50fHwoYT1kb2N1bWVudC5ib2R5KTtmb3IoO2Eucm9vdCYmUG9seW1lci5kb20oYS5yb290KS5hY3RpdmVFbGVtZW50OylhPVBvbHltZXIuZG9tKGEucm9vdCkuYWN0aXZlRWxlbWVudDtyZXR1cm4gYX0sX2JyaW5nT3ZlcmxheUF0SW5kZXhUb0Zyb250OmZ1bmN0aW9uKGEpe3ZhciBjPXRoaXMuX292ZXJsYXlzW2FdO2lmKGMpe3ZhciBkPQp0aGlzLl9vdmVybGF5cy5sZW5ndGgtMSxmPXRoaXMuX292ZXJsYXlzW2RdO2YmJnRoaXMuX3Nob3VsZEJlQmVoaW5kT3ZlcmxheShjLGYpJiZkLS07aWYoIShhPj1kKSl7Zj1NYXRoLm1heCh0aGlzLmN1cnJlbnRPdmVybGF5WigpLHRoaXMuX21pbmltdW1aKTtmb3IodGhpcy5fZ2V0WihjKTw9ZiYmdGhpcy5fYXBwbHlPdmVybGF5WihjLGYpO2E8ZDspdGhpcy5fb3ZlcmxheXNbYV09dGhpcy5fb3ZlcmxheXNbYSsxXSxhKys7dGhpcy5fb3ZlcmxheXNbZF09Y319fSxhZGRPclJlbW92ZU92ZXJsYXk6ZnVuY3Rpb24oYSl7YS5vcGVuZWQ/dGhpcy5hZGRPdmVybGF5KGEpOnRoaXMucmVtb3ZlT3ZlcmxheShhKX0sYWRkT3ZlcmxheTpmdW5jdGlvbihhKXt2YXIgYz10aGlzLl9vdmVybGF5cy5pbmRleE9mKGEpO2lmKDA8PWMpdGhpcy5fYnJpbmdPdmVybGF5QXRJbmRleFRvRnJvbnQoYyk7ZWxzZXtjPXRoaXMuX292ZXJsYXlzLmxlbmd0aDt2YXIgZD10aGlzLl9vdmVybGF5c1tjLTFdLGY9Ck1hdGgubWF4KHRoaXMuX2dldFooZCksdGhpcy5fbWluaW11bVopLGc9dGhpcy5fZ2V0WihhKTtkJiZ0aGlzLl9zaG91bGRCZUJlaGluZE92ZXJsYXkoYSxkKSYmKHRoaXMuX2FwcGx5T3ZlcmxheVooZCxmKSxjLS0sZj1NYXRoLm1heCh0aGlzLl9nZXRaKHRoaXMuX292ZXJsYXlzW2MtMV0pLHRoaXMuX21pbmltdW1aKSk7Zzw9ZiYmdGhpcy5fYXBwbHlPdmVybGF5WihhLGYpO3RoaXMuX292ZXJsYXlzLnNwbGljZShjLDAsYSl9dGhpcy50cmFja0JhY2tkcm9wKCl9LHJlbW92ZU92ZXJsYXk6ZnVuY3Rpb24oYSl7YT10aGlzLl9vdmVybGF5cy5pbmRleE9mKGEpOy0xIT09YSYmKHRoaXMuX292ZXJsYXlzLnNwbGljZShhLDEpLHRoaXMudHJhY2tCYWNrZHJvcCgpKX0sY3VycmVudE92ZXJsYXk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fb3ZlcmxheXNbdGhpcy5fb3ZlcmxheXMubGVuZ3RoLTFdfSxjdXJyZW50T3ZlcmxheVo6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZ2V0Wih0aGlzLmN1cnJlbnRPdmVybGF5KCkpfSwKZW5zdXJlTWluaW11bVo6ZnVuY3Rpb24oYSl7dGhpcy5fbWluaW11bVo9TWF0aC5tYXgodGhpcy5fbWluaW11bVosYSl9LGZvY3VzT3ZlcmxheTpmdW5jdGlvbigpe3ZhciBhPXRoaXMuY3VycmVudE92ZXJsYXkoKTthJiZhLl9hcHBseUZvY3VzKCl9LHRyYWNrQmFja2Ryb3A6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLl9vdmVybGF5V2l0aEJhY2tkcm9wKCk7aWYoYXx8dGhpcy5fYmFja2Ryb3BFbGVtZW50KXRoaXMuYmFja2Ryb3BFbGVtZW50LnN0eWxlLnpJbmRleD10aGlzLl9nZXRaKGEpLTEsdGhpcy5iYWNrZHJvcEVsZW1lbnQub3BlbmVkPSEhYSx0aGlzLmJhY2tkcm9wRWxlbWVudC5wcmVwYXJlKCl9LGdldEJhY2tkcm9wczpmdW5jdGlvbigpe2Zvcih2YXIgYT1bXSxjPTA7Yzx0aGlzLl9vdmVybGF5cy5sZW5ndGg7YysrKXRoaXMuX292ZXJsYXlzW2NdLndpdGhCYWNrZHJvcCYmYS5wdXNoKHRoaXMuX292ZXJsYXlzW2NdKTtyZXR1cm4gYX0sYmFja2Ryb3BaOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2dldFoodGhpcy5fb3ZlcmxheVdpdGhCYWNrZHJvcCgpKS0KMX0sX292ZXJsYXlXaXRoQmFja2Ryb3A6ZnVuY3Rpb24oKXtmb3IodmFyIGE9dGhpcy5fb3ZlcmxheXMubGVuZ3RoLTE7MDw9YTthLS0paWYodGhpcy5fb3ZlcmxheXNbYV0ud2l0aEJhY2tkcm9wKXJldHVybiB0aGlzLl9vdmVybGF5c1thXX0sX2dldFo6ZnVuY3Rpb24oYSl7dmFyIGM9dGhpcy5fbWluaW11bVo7YSYmKGE9TnVtYmVyKGEuc3R5bGUuekluZGV4fHx3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShhKS56SW5kZXgpLGE9PT1hJiYoYz1hKSk7cmV0dXJuIGN9LF9zZXRaOmZ1bmN0aW9uKGEsYyl7YS5zdHlsZS56SW5kZXg9Y30sX2FwcGx5T3ZlcmxheVo6ZnVuY3Rpb24oYSxjKXt0aGlzLl9zZXRaKGEsYysyKX0sX292ZXJsYXlJblBhdGg6ZnVuY3Rpb24oYSl7YT1hfHxbXTtmb3IodmFyIGM9MDtjPGEubGVuZ3RoO2MrKylpZihhW2NdLl9tYW5hZ2VyPT09dGhpcylyZXR1cm4gYVtjXX0sX29uQ2FwdHVyZUNsaWNrOmZ1bmN0aW9uKGEpe3ZhciBjPXRoaXMuX292ZXJsYXlzLmxlbmd0aC0KMTtpZigtMSE9PWMpZm9yKHZhciBkPVBvbHltZXIuZG9tKGEpLnBhdGgsZjsoZj10aGlzLl9vdmVybGF5c1tjXSkmJnRoaXMuX292ZXJsYXlJblBhdGgoZCkhPT1mOylpZihmLl9vbkNhcHR1cmVDbGljayhhKSxmLmFsbG93Q2xpY2tUaHJvdWdoKWMtLTtlbHNlIGJyZWFrfSxfb25DYXB0dXJlRm9jdXM6ZnVuY3Rpb24oYSl7dmFyIGM9dGhpcy5jdXJyZW50T3ZlcmxheSgpO2MmJmMuX29uQ2FwdHVyZUZvY3VzKGEpfSxfb25DYXB0dXJlS2V5RG93bjpmdW5jdGlvbihhKXt2YXIgYz10aGlzLmN1cnJlbnRPdmVybGF5KCk7YyYmKFBvbHltZXIuSXJvbkExMXlLZXlzQmVoYXZpb3Iua2V5Ym9hcmRFdmVudE1hdGNoZXNLZXlzKGEsImVzYyIpP2MuX29uQ2FwdHVyZUVzYyhhKTpQb2x5bWVyLklyb25BMTF5S2V5c0JlaGF2aW9yLmtleWJvYXJkRXZlbnRNYXRjaGVzS2V5cyhhLCJ0YWIiKSYmYy5fb25DYXB0dXJlVGFiKGEpKX0sX3Nob3VsZEJlQmVoaW5kT3ZlcmxheTpmdW5jdGlvbihhLGMpe3JldHVybiFhLmFsd2F5c09uVG9wJiYKYy5hbHdheXNPblRvcH19O1BvbHltZXIuSXJvbk92ZXJsYXlNYW5hZ2VyPW5ldyBQb2x5bWVyLklyb25PdmVybGF5TWFuYWdlckNsYXNzOwo8L3NjcmlwdD4KCgoKPHNjcmlwdD4vL35+V0VCUEFUSH5+L2lyb24tb3ZlcmxheS1iZWhhdmlvci9pcm9uLXNjcm9sbC1tYW5hZ2VyLmh0bWwuanMKKGZ1bmN0aW9uKCl7dmFyIGE9MCxjPTAsZD1udWxsLGY9W10sZz1bIndoZWVsIiwibW91c2V3aGVlbCIsIkRPTU1vdXNlU2Nyb2xsIiwidG91Y2hzdGFydCIsInRvdWNobW92ZSJdO1BvbHltZXIuSXJvblNjcm9sbE1hbmFnZXI9e2dldCBjdXJyZW50TG9ja2luZ0VsZW1lbnQoKXtyZXR1cm4gdGhpcy5fbG9ja2luZ0VsZW1lbnRzW3RoaXMuX2xvY2tpbmdFbGVtZW50cy5sZW5ndGgtMV19LGVsZW1lbnRJc1Njcm9sbExvY2tlZDpmdW5jdGlvbihsKXt2YXIgaz10aGlzLmN1cnJlbnRMb2NraW5nRWxlbWVudDtpZih2b2lkIDA9PT1rKXJldHVybiExO2lmKHRoaXMuX2hhc0NhY2hlZExvY2tlZEVsZW1lbnQobCkpcmV0dXJuITA7aWYodGhpcy5faGFzQ2FjaGVkVW5sb2NrZWRFbGVtZW50KGwpKXJldHVybiExOyhrPSEhayYmayE9PWwmJiF0aGlzLl9jb21wb3NlZFRyZWVDb250YWlucyhrLGwpKT90aGlzLl9sb2NrZWRFbGVtZW50Q2FjaGUucHVzaChsKTp0aGlzLl91bmxvY2tlZEVsZW1lbnRDYWNoZS5wdXNoKGwpOwpyZXR1cm4ga30scHVzaFNjcm9sbExvY2s6ZnVuY3Rpb24obCl7MDw9dGhpcy5fbG9ja2luZ0VsZW1lbnRzLmluZGV4T2YobCl8fCgwPT09dGhpcy5fbG9ja2luZ0VsZW1lbnRzLmxlbmd0aCYmdGhpcy5fbG9ja1Njcm9sbEludGVyYWN0aW9ucygpLHRoaXMuX2xvY2tpbmdFbGVtZW50cy5wdXNoKGwpLHRoaXMuX2xvY2tlZEVsZW1lbnRDYWNoZT1bXSx0aGlzLl91bmxvY2tlZEVsZW1lbnRDYWNoZT1bXSl9LHJlbW92ZVNjcm9sbExvY2s6ZnVuY3Rpb24obCl7bD10aGlzLl9sb2NraW5nRWxlbWVudHMuaW5kZXhPZihsKTstMSE9PWwmJih0aGlzLl9sb2NraW5nRWxlbWVudHMuc3BsaWNlKGwsMSksdGhpcy5fbG9ja2VkRWxlbWVudENhY2hlPVtdLHRoaXMuX3VubG9ja2VkRWxlbWVudENhY2hlPVtdLDA9PT10aGlzLl9sb2NraW5nRWxlbWVudHMubGVuZ3RoJiZ0aGlzLl91bmxvY2tTY3JvbGxJbnRlcmFjdGlvbnMoKSl9LF9sb2NraW5nRWxlbWVudHM6W10sX2xvY2tlZEVsZW1lbnRDYWNoZTpudWxsLApfdW5sb2NrZWRFbGVtZW50Q2FjaGU6bnVsbCxfaGFzQ2FjaGVkTG9ja2VkRWxlbWVudDpmdW5jdGlvbihsKXtyZXR1cm4tMTx0aGlzLl9sb2NrZWRFbGVtZW50Q2FjaGUuaW5kZXhPZihsKX0sX2hhc0NhY2hlZFVubG9ja2VkRWxlbWVudDpmdW5jdGlvbihsKXtyZXR1cm4tMTx0aGlzLl91bmxvY2tlZEVsZW1lbnRDYWNoZS5pbmRleE9mKGwpfSxfY29tcG9zZWRUcmVlQ29udGFpbnM6ZnVuY3Rpb24obCxrKXt2YXIgbSxwO2lmKGwuY29udGFpbnMoaykpcmV0dXJuITA7bD1Qb2x5bWVyLmRvbShsKS5xdWVyeVNlbGVjdG9yQWxsKCJjb250ZW50LHNsb3QiKTtmb3IobT0wO208bC5sZW5ndGg7KyttKXt2YXIgcT1Qb2x5bWVyLmRvbShsW21dKS5nZXREaXN0cmlidXRlZE5vZGVzKCk7Zm9yKHA9MDtwPHEubGVuZ3RoOysrcClpZihxW3BdLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUmJnRoaXMuX2NvbXBvc2VkVHJlZUNvbnRhaW5zKHFbcF0saykpcmV0dXJuITB9cmV0dXJuITF9LF9zY3JvbGxJbnRlcmFjdGlvbkhhbmRsZXI6ZnVuY3Rpb24obCl7bC5jYW5jZWxhYmxlJiYKdGhpcy5fc2hvdWxkUHJldmVudFNjcm9sbGluZyhsKSYmbC5wcmV2ZW50RGVmYXVsdCgpO2wudGFyZ2V0VG91Y2hlcyYmKGw9bC50YXJnZXRUb3VjaGVzWzBdLGE9bC5wYWdlWCxjPWwucGFnZVkpfSxfbG9ja1Njcm9sbEludGVyYWN0aW9uczpmdW5jdGlvbigpe3RoaXMuX2JvdW5kU2Nyb2xsSGFuZGxlcj10aGlzLl9ib3VuZFNjcm9sbEhhbmRsZXJ8fHRoaXMuX3Njcm9sbEludGVyYWN0aW9uSGFuZGxlci5iaW5kKHRoaXMpO2Zvcih2YXIgbD0wLGs9Zy5sZW5ndGg7bDxrO2wrKylkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKGdbbF0sdGhpcy5fYm91bmRTY3JvbGxIYW5kbGVyLHtjYXB0dXJlOiEwLHBhc3NpdmU6ITF9KX0sX3VubG9ja1Njcm9sbEludGVyYWN0aW9uczpmdW5jdGlvbigpe2Zvcih2YXIgbD0wLGs9Zy5sZW5ndGg7bDxrO2wrKylkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKGdbbF0sdGhpcy5fYm91bmRTY3JvbGxIYW5kbGVyLHtjYXB0dXJlOiEwLHBhc3NpdmU6ITF9KX0sCl9zaG91bGRQcmV2ZW50U2Nyb2xsaW5nOmZ1bmN0aW9uKGwpe3ZhciBrPVBvbHltZXIuZG9tKGwpLnJvb3RUYXJnZXQ7InRvdWNobW92ZSIhPT1sLnR5cGUmJmQhPT1rJiYoZD1rLGY9dGhpcy5fZ2V0U2Nyb2xsYWJsZU5vZGVzKFBvbHltZXIuZG9tKGwpLnBhdGgpKTtpZighZi5sZW5ndGgpcmV0dXJuITA7aWYoInRvdWNoc3RhcnQiPT09bC50eXBlKXJldHVybiExO2w9dGhpcy5fZ2V0U2Nyb2xsSW5mbyhsKTtyZXR1cm4hdGhpcy5fZ2V0U2Nyb2xsaW5nTm9kZShmLGwuZGVsdGFYLGwuZGVsdGFZKX0sX2dldFNjcm9sbGFibGVOb2RlczpmdW5jdGlvbihsKXtmb3IodmFyIGs9W10sbT1sLmluZGV4T2YodGhpcy5jdXJyZW50TG9ja2luZ0VsZW1lbnQpLHA9MDtwPD1tO3ArKylpZihsW3BdLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUpe3ZhciBxPWxbcF0scj1xLnN0eWxlOyJzY3JvbGwiIT09ci5vdmVyZmxvdyYmImF1dG8iIT09ci5vdmVyZmxvdyYmKHI9d2luZG93LmdldENvbXB1dGVkU3R5bGUocSkpOwoic2Nyb2xsIiE9PXIub3ZlcmZsb3cmJiJhdXRvIiE9PXIub3ZlcmZsb3d8fGsucHVzaChxKX1yZXR1cm4ga30sX2dldFNjcm9sbGluZ05vZGU6ZnVuY3Rpb24obCxrLG0pe2lmKGt8fG0pZm9yKHZhciBwPU1hdGguYWJzKG0pPj1NYXRoLmFicyhrKSxxPTA7cTxsLmxlbmd0aDtxKyspe3ZhciByPWxbcV07aWYocD8wPm0/MDxyLnNjcm9sbFRvcDpyLnNjcm9sbFRvcDxyLnNjcm9sbEhlaWdodC1yLmNsaWVudEhlaWdodDowPms/MDxyLnNjcm9sbExlZnQ6ci5zY3JvbGxMZWZ0PHIuc2Nyb2xsV2lkdGgtci5jbGllbnRXaWR0aClyZXR1cm4gcn19LF9nZXRTY3JvbGxJbmZvOmZ1bmN0aW9uKGwpe3ZhciBrPXtkZWx0YVg6bC5kZWx0YVgsZGVsdGFZOmwuZGVsdGFZfTsiZGVsdGFYImluIGx8fCgid2hlZWxEZWx0YVgiaW4gbCYmIndoZWVsRGVsdGFZImluIGw/KGsuZGVsdGFYPS1sLndoZWVsRGVsdGFYLGsuZGVsdGFZPS1sLndoZWVsRGVsdGFZKToid2hlZWxEZWx0YSJpbiBsPyhrLmRlbHRhWD0KMCxrLmRlbHRhWT0tbC53aGVlbERlbHRhKToiYXhpcyJpbiBsPyhrLmRlbHRhWD0xPT09bC5heGlzP2wuZGV0YWlsOjAsay5kZWx0YVk9Mj09PWwuYXhpcz9sLmRldGFpbDowKTpsLnRhcmdldFRvdWNoZXMmJihsPWwudGFyZ2V0VG91Y2hlc1swXSxrLmRlbHRhWD1hLWwucGFnZVgsay5kZWx0YVk9Yy1sLnBhZ2VZKSk7cmV0dXJuIGt9fX0pKCk7Cjwvc2NyaXB0PgoKCgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vaXJvbi1vdmVybGF5LWJlaGF2aW9yL2lyb24tZm9jdXNhYmxlcy1oZWxwZXIuaHRtbC5qcwooZnVuY3Rpb24oKXt2YXIgYT1FbGVtZW50LnByb3RvdHlwZSxjPWEubWF0Y2hlc3x8YS5tYXRjaGVzU2VsZWN0b3J8fGEubW96TWF0Y2hlc1NlbGVjdG9yfHxhLm1zTWF0Y2hlc1NlbGVjdG9yfHxhLm9NYXRjaGVzU2VsZWN0b3J8fGEud2Via2l0TWF0Y2hlc1NlbGVjdG9yO1BvbHltZXIuSXJvbkZvY3VzYWJsZXNIZWxwZXI9e2dldFRhYmJhYmxlTm9kZXM6ZnVuY3Rpb24oZCl7dmFyIGY9W107cmV0dXJuIHRoaXMuX2NvbGxlY3RUYWJiYWJsZU5vZGVzKGQsZik/dGhpcy5fc29ydEJ5VGFiSW5kZXgoZik6Zn0saXNGb2N1c2FibGU6ZnVuY3Rpb24oZCl7cmV0dXJuIGMuY2FsbChkLCJpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYSwgYnV0dG9uLCBvYmplY3QiKT9jLmNhbGwoZCwiOm5vdChbZGlzYWJsZWRdKSIpOmMuY2FsbChkLCJhW2hyZWZdLCBhcmVhW2hyZWZdLCBpZnJhbWUsIFt0YWJpbmRleF0sIFtjb250ZW50RWRpdGFibGVdIil9LGlzVGFiYmFibGU6ZnVuY3Rpb24oZCl7cmV0dXJuIHRoaXMuaXNGb2N1c2FibGUoZCkmJgpjLmNhbGwoZCwnOm5vdChbdGFiaW5kZXhceDNkIi0xIl0pJykmJnRoaXMuX2lzVmlzaWJsZShkKX0sX25vcm1hbGl6ZWRUYWJJbmRleDpmdW5jdGlvbihkKXtyZXR1cm4gdGhpcy5pc0ZvY3VzYWJsZShkKT8oZD1kLmdldEF0dHJpYnV0ZSgidGFiaW5kZXgiKXx8MCxOdW1iZXIoZCkpOi0xfSxfY29sbGVjdFRhYmJhYmxlTm9kZXM6ZnVuY3Rpb24oZCxmKXtpZihkLm5vZGVUeXBlIT09Tm9kZS5FTEVNRU5UX05PREV8fCF0aGlzLl9pc1Zpc2libGUoZCkpcmV0dXJuITE7dmFyIGc9dGhpcy5fbm9ybWFsaXplZFRhYkluZGV4KGQpLGw9MDxnOzA8PWcmJmYucHVzaChkKTtkPSJjb250ZW50Ij09PWQubG9jYWxOYW1lfHwic2xvdCI9PT1kLmxvY2FsTmFtZT9Qb2x5bWVyLmRvbShkKS5nZXREaXN0cmlidXRlZE5vZGVzKCk6UG9seW1lci5kb20oZC5yb290fHxkKS5jaGlsZHJlbjtmb3IoZz0wO2c8ZC5sZW5ndGg7ZysrKWw9dGhpcy5fY29sbGVjdFRhYmJhYmxlTm9kZXMoZFtnXSxmKXx8bDsKcmV0dXJuIGx9LF9pc1Zpc2libGU6ZnVuY3Rpb24oZCl7dmFyIGY9ZC5zdHlsZTtyZXR1cm4iaGlkZGVuIiE9PWYudmlzaWJpbGl0eSYmIm5vbmUiIT09Zi5kaXNwbGF5PyhmPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGQpLCJoaWRkZW4iIT09Zi52aXNpYmlsaXR5JiYibm9uZSIhPT1mLmRpc3BsYXkpOiExfSxfc29ydEJ5VGFiSW5kZXg6ZnVuY3Rpb24oZCl7dmFyIGY9ZC5sZW5ndGg7aWYoMj5mKXJldHVybiBkO3ZhciBnPU1hdGguY2VpbChmLzIpO2Y9dGhpcy5fc29ydEJ5VGFiSW5kZXgoZC5zbGljZSgwLGcpKTtkPXRoaXMuX3NvcnRCeVRhYkluZGV4KGQuc2xpY2UoZykpO3JldHVybiB0aGlzLl9tZXJnZVNvcnRCeVRhYkluZGV4KGYsZCl9LF9tZXJnZVNvcnRCeVRhYkluZGV4OmZ1bmN0aW9uKGQsZil7Zm9yKHZhciBnPVtdOzA8ZC5sZW5ndGgmJjA8Zi5sZW5ndGg7KXRoaXMuX2hhc0xvd2VyVGFiT3JkZXIoZFswXSxmWzBdKT9nLnB1c2goZi5zaGlmdCgpKTpnLnB1c2goZC5zaGlmdCgpKTsKcmV0dXJuIGcuY29uY2F0KGQsZil9LF9oYXNMb3dlclRhYk9yZGVyOmZ1bmN0aW9uKGQsZil7ZD1NYXRoLm1heChkLnRhYkluZGV4LDApO2Y9TWF0aC5tYXgoZi50YWJJbmRleCwwKTtyZXR1cm4gMD09PWR8fDA9PT1mP2Y+ZDpkPmZ9fX0pKCk7Cjwvc2NyaXB0PgoKCjxzY3JpcHQ+Ly9+fldFQlBBVEh+fi9pcm9uLW92ZXJsYXktYmVoYXZpb3IvaXJvbi1vdmVybGF5LWJlaGF2aW9yLmh0bWwuanMKKGZ1bmN0aW9uKCl7UG9seW1lci5Jcm9uT3ZlcmxheUJlaGF2aW9ySW1wbD17cHJvcGVydGllczp7b3BlbmVkOntvYnNlcnZlcjoiX29wZW5lZENoYW5nZWQiLHR5cGU6Qm9vbGVhbix2YWx1ZTohMSxub3RpZnk6ITB9LGNhbmNlbGVkOntvYnNlcnZlcjoiX2NhbmNlbGVkQ2hhbmdlZCIscmVhZE9ubHk6ITAsdHlwZTpCb29sZWFuLHZhbHVlOiExfSx3aXRoQmFja2Ryb3A6e29ic2VydmVyOiJfd2l0aEJhY2tkcm9wQ2hhbmdlZCIsdHlwZTpCb29sZWFufSxub0F1dG9Gb2N1czp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxub0NhbmNlbE9uRXNjS2V5Ont0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LG5vQ2FuY2VsT25PdXRzaWRlQ2xpY2s6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sY2xvc2luZ1JlYXNvbjp7dHlwZTpPYmplY3R9LHJlc3RvcmVGb2N1c09uQ2xvc2U6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sYWxsb3dDbGlja1Rocm91Z2g6e3R5cGU6Qm9vbGVhbn0sYWx3YXlzT25Ub3A6e3R5cGU6Qm9vbGVhbn0sCnNjcm9sbEFjdGlvbjp7dHlwZTpTdHJpbmd9LF9tYW5hZ2VyOnt0eXBlOk9iamVjdCx2YWx1ZTpQb2x5bWVyLklyb25PdmVybGF5TWFuYWdlcn0sX2ZvY3VzZWRDaGlsZDp7dHlwZTpPYmplY3R9fSxsaXN0ZW5lcnM6eyJpcm9uLXJlc2l6ZSI6Il9vbklyb25SZXNpemUifSxvYnNlcnZlcnM6WyJfX3VwZGF0ZVNjcm9sbE9ic2VydmVycyhpc0F0dGFjaGVkLCBvcGVuZWQsIHNjcm9sbEFjdGlvbikiXSxnZXQgYmFja2Ryb3BFbGVtZW50KCl7cmV0dXJuIHRoaXMuX21hbmFnZXIuYmFja2Ryb3BFbGVtZW50fSxnZXQgX2ZvY3VzTm9kZSgpe3JldHVybiB0aGlzLl9mb2N1c2VkQ2hpbGR8fFBvbHltZXIuZG9tKHRoaXMpLnF1ZXJ5U2VsZWN0b3IoIlthdXRvZm9jdXNdIil8fHRoaXN9LGdldCBfZm9jdXNhYmxlTm9kZXMoKXtyZXR1cm4gUG9seW1lci5Jcm9uRm9jdXNhYmxlc0hlbHBlci5nZXRUYWJiYWJsZU5vZGVzKHRoaXMpfSxyZWFkeTpmdW5jdGlvbigpe3RoaXMuX19zaG91bGRSZW1vdmVUYWJJbmRleD0KdGhpcy5fX2lzQW5pbWF0aW5nPSExO3RoaXMuX19maXJzdEZvY3VzYWJsZU5vZGU9dGhpcy5fX2xhc3RGb2N1c2FibGVOb2RlPW51bGw7dGhpcy5fX3JhZnM9e307dGhpcy5fX3Njcm9sbFRvcD10aGlzLl9fc2Nyb2xsTGVmdD10aGlzLl9fcmVzdG9yZUZvY3VzTm9kZT1udWxsO3RoaXMuX19vbkNhcHR1cmVTY3JvbGw9dGhpcy5fX29uQ2FwdHVyZVNjcm9sbC5iaW5kKHRoaXMpO3RoaXMuX19yb290Tm9kZXM9bnVsbDt0aGlzLl9lbnN1cmVTZXR1cCgpfSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMub3BlbmVkJiZ0aGlzLl9vcGVuZWRDaGFuZ2VkKHRoaXMub3BlbmVkKTt0aGlzLl9vYnNlcnZlcj1Qb2x5bWVyLmRvbSh0aGlzKS5vYnNlcnZlTm9kZXModGhpcy5fb25Ob2Rlc0NoYW5nZSl9LGRldGFjaGVkOmZ1bmN0aW9uKCl7UG9seW1lci5kb20odGhpcykudW5vYnNlcnZlTm9kZXModGhpcy5fb2JzZXJ2ZXIpO3RoaXMuX29ic2VydmVyPW51bGw7Zm9yKHZhciBhIGluIHRoaXMuX19yYWZzKW51bGwhPT0KdGhpcy5fX3JhZnNbYV0mJmNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuX19yYWZzW2FdKTt0aGlzLl9fcmFmcz17fTt0aGlzLl9tYW5hZ2VyLnJlbW92ZU92ZXJsYXkodGhpcyk7dGhpcy5fX2lzQW5pbWF0aW5nJiYodGhpcy5vcGVuZWQ/dGhpcy5fZmluaXNoUmVuZGVyT3BlbmVkKCk6KHRoaXMuX2FwcGx5Rm9jdXMoKSx0aGlzLl9maW5pc2hSZW5kZXJDbG9zZWQoKSkpfSx0b2dnbGU6ZnVuY3Rpb24oKXt0aGlzLl9zZXRDYW5jZWxlZCghMSk7dGhpcy5vcGVuZWQ9IXRoaXMub3BlbmVkfSxvcGVuOmZ1bmN0aW9uKCl7dGhpcy5fc2V0Q2FuY2VsZWQoITEpO3RoaXMub3BlbmVkPSEwfSxjbG9zZTpmdW5jdGlvbigpe3RoaXMuX3NldENhbmNlbGVkKCExKTt0aGlzLm9wZW5lZD0hMX0sY2FuY2VsOmZ1bmN0aW9uKGEpe3RoaXMuZmlyZSgiaXJvbi1vdmVybGF5LWNhbmNlbGVkIixhLHtjYW5jZWxhYmxlOiEwfSkuZGVmYXVsdFByZXZlbnRlZHx8KHRoaXMuX3NldENhbmNlbGVkKCEwKSx0aGlzLm9wZW5lZD0KITEpfSxpbnZhbGlkYXRlVGFiYmFibGVzOmZ1bmN0aW9uKCl7dGhpcy5fX2ZpcnN0Rm9jdXNhYmxlTm9kZT10aGlzLl9fbGFzdEZvY3VzYWJsZU5vZGU9bnVsbH0sX2Vuc3VyZVNldHVwOmZ1bmN0aW9uKCl7dGhpcy5fb3ZlcmxheVNldHVwfHwodGhpcy5fb3ZlcmxheVNldHVwPSEwLHRoaXMuc3R5bGUub3V0bGluZT0ibm9uZSIsdGhpcy5zdHlsZS5kaXNwbGF5PSJub25lIil9LF9vcGVuZWRDaGFuZ2VkOmZ1bmN0aW9uKGEpe2E/dGhpcy5yZW1vdmVBdHRyaWJ1dGUoImFyaWEtaGlkZGVuIik6dGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtaGlkZGVuIiwidHJ1ZSIpO3RoaXMuaXNBdHRhY2hlZCYmKHRoaXMuX19pc0FuaW1hdGluZz0hMCx0aGlzLl9fZGVyYWYoIl9fb3BlbmVkQ2hhbmdlZCIsdGhpcy5fX29wZW5lZENoYW5nZWQpKX0sX2NhbmNlbGVkQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMuY2xvc2luZ1JlYXNvbj10aGlzLmNsb3NpbmdSZWFzb258fHt9O3RoaXMuY2xvc2luZ1JlYXNvbi5jYW5jZWxlZD0KdGhpcy5jYW5jZWxlZH0sX3dpdGhCYWNrZHJvcENoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLndpdGhCYWNrZHJvcCYmIXRoaXMuaGFzQXR0cmlidXRlKCJ0YWJpbmRleCIpPyh0aGlzLnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLCItMSIpLHRoaXMuX19zaG91bGRSZW1vdmVUYWJJbmRleD0hMCk6dGhpcy5fX3Nob3VsZFJlbW92ZVRhYkluZGV4JiYodGhpcy5yZW1vdmVBdHRyaWJ1dGUoInRhYmluZGV4IiksdGhpcy5fX3Nob3VsZFJlbW92ZVRhYkluZGV4PSExKTt0aGlzLm9wZW5lZCYmdGhpcy5pc0F0dGFjaGVkJiZ0aGlzLl9tYW5hZ2VyLnRyYWNrQmFja2Ryb3AoKX0sX3ByZXBhcmVSZW5kZXJPcGVuZWQ6ZnVuY3Rpb24oKXt0aGlzLl9fcmVzdG9yZUZvY3VzTm9kZT10aGlzLl9tYW5hZ2VyLmRlZXBBY3RpdmVFbGVtZW50O3RoaXMuX3ByZXBhcmVQb3NpdGlvbmluZygpO3RoaXMucmVmaXQoKTt0aGlzLl9maW5pc2hQb3NpdGlvbmluZygpO3RoaXMubm9BdXRvRm9jdXMmJmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ9PT0KdGhpcy5fZm9jdXNOb2RlJiYodGhpcy5fZm9jdXNOb2RlLmJsdXIoKSx0aGlzLl9fcmVzdG9yZUZvY3VzTm9kZS5mb2N1cygpKX0sX3JlbmRlck9wZW5lZDpmdW5jdGlvbigpe3RoaXMuX2ZpbmlzaFJlbmRlck9wZW5lZCgpfSxfcmVuZGVyQ2xvc2VkOmZ1bmN0aW9uKCl7dGhpcy5fZmluaXNoUmVuZGVyQ2xvc2VkKCl9LF9maW5pc2hSZW5kZXJPcGVuZWQ6ZnVuY3Rpb24oKXt0aGlzLm5vdGlmeVJlc2l6ZSgpO3RoaXMuX19pc0FuaW1hdGluZz0hMTt0aGlzLmZpcmUoImlyb24tb3ZlcmxheS1vcGVuZWQiKX0sX2ZpbmlzaFJlbmRlckNsb3NlZDpmdW5jdGlvbigpe3RoaXMuc3R5bGUuZGlzcGxheT0ibm9uZSI7dGhpcy5zdHlsZS56SW5kZXg9IiI7dGhpcy5ub3RpZnlSZXNpemUoKTt0aGlzLl9faXNBbmltYXRpbmc9ITE7dGhpcy5maXJlKCJpcm9uLW92ZXJsYXktY2xvc2VkIix0aGlzLmNsb3NpbmdSZWFzb24pfSxfcHJlcGFyZVBvc2l0aW9uaW5nOmZ1bmN0aW9uKCl7dGhpcy5zdHlsZS50cmFuc2l0aW9uPQp0aGlzLnN0eWxlLndlYmtpdFRyYW5zaXRpb249Im5vbmUiO3RoaXMuc3R5bGUudHJhbnNmb3JtPXRoaXMuc3R5bGUud2Via2l0VHJhbnNmb3JtPSJub25lIjt0aGlzLnN0eWxlLmRpc3BsYXk9IiJ9LF9maW5pc2hQb3NpdGlvbmluZzpmdW5jdGlvbigpe3RoaXMuc3R5bGUuZGlzcGxheT0ibm9uZSI7dGhpcy5zY3JvbGxUb3A9dGhpcy5zY3JvbGxUb3A7dGhpcy5zdHlsZS50cmFuc2l0aW9uPXRoaXMuc3R5bGUud2Via2l0VHJhbnNpdGlvbj0iIjt0aGlzLnN0eWxlLnRyYW5zZm9ybT10aGlzLnN0eWxlLndlYmtpdFRyYW5zZm9ybT0iIjt0aGlzLnN0eWxlLmRpc3BsYXk9IiI7dGhpcy5zY3JvbGxUb3A9dGhpcy5zY3JvbGxUb3B9LF9hcHBseUZvY3VzOmZ1bmN0aW9uKCl7aWYodGhpcy5vcGVuZWQpdGhpcy5ub0F1dG9Gb2N1c3x8dGhpcy5fZm9jdXNOb2RlLmZvY3VzKCk7ZWxzZXt0aGlzLl9mb2N1c05vZGUuYmx1cigpO3RoaXMuX2ZvY3VzZWRDaGlsZD1udWxsO2lmKHRoaXMucmVzdG9yZUZvY3VzT25DbG9zZSYmCnRoaXMuX19yZXN0b3JlRm9jdXNOb2RlKXt2YXIgYT10aGlzLl9tYW5hZ2VyLmRlZXBBY3RpdmVFbGVtZW50OyhhPT09ZG9jdW1lbnQuYm9keXx8UG9seW1lci5kb20odGhpcykuZGVlcENvbnRhaW5zKGEpKSYmdGhpcy5fX3Jlc3RvcmVGb2N1c05vZGUuZm9jdXMoKX10aGlzLl9fcmVzdG9yZUZvY3VzTm9kZT1udWxsOyhhPXRoaXMuX21hbmFnZXIuY3VycmVudE92ZXJsYXkoKSkmJnRoaXMhPT1hJiZhLl9hcHBseUZvY3VzKCl9fSxfb25DYXB0dXJlQ2xpY2s6ZnVuY3Rpb24oYSl7dGhpcy5ub0NhbmNlbE9uT3V0c2lkZUNsaWNrfHx0aGlzLmNhbmNlbChhKX0sX29uQ2FwdHVyZUZvY3VzOmZ1bmN0aW9uKGEpe2lmKHRoaXMud2l0aEJhY2tkcm9wKXt2YXIgYz1Qb2x5bWVyLmRvbShhKS5wYXRoOy0xPT09Yy5pbmRleE9mKHRoaXMpPyhhLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMuX2FwcGx5Rm9jdXMoKSk6dGhpcy5fZm9jdXNlZENoaWxkPWNbMF19fSxfb25DYXB0dXJlRXNjOmZ1bmN0aW9uKGEpe3RoaXMubm9DYW5jZWxPbkVzY0tleXx8CnRoaXMuY2FuY2VsKGEpfSxfb25DYXB0dXJlVGFiOmZ1bmN0aW9uKGEpe2lmKHRoaXMud2l0aEJhY2tkcm9wKXt0aGlzLl9fZW5zdXJlRmlyc3RMYXN0Rm9jdXNhYmxlcygpO3ZhciBjPWEuc2hpZnRLZXksZD1jP3RoaXMuX19maXJzdEZvY3VzYWJsZU5vZGU6dGhpcy5fX2xhc3RGb2N1c2FibGVOb2RlO2M9Yz90aGlzLl9fbGFzdEZvY3VzYWJsZU5vZGU6dGhpcy5fX2ZpcnN0Rm9jdXNhYmxlTm9kZTtpZihkPT09YylkPSEwO2Vsc2V7dmFyIGY9dGhpcy5fbWFuYWdlci5kZWVwQWN0aXZlRWxlbWVudDtkPWY9PT1kfHxmPT09dGhpc31kJiYoYS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX2ZvY3VzZWRDaGlsZD1jLHRoaXMuX2FwcGx5Rm9jdXMoKSl9fSxfb25Jcm9uUmVzaXplOmZ1bmN0aW9uKCl7dGhpcy5vcGVuZWQmJiF0aGlzLl9faXNBbmltYXRpbmcmJnRoaXMuX19kZXJhZigicmVmaXQiLHRoaXMucmVmaXQpfSxfb25Ob2Rlc0NoYW5nZTpmdW5jdGlvbigpe3RoaXMub3BlbmVkJiYhdGhpcy5fX2lzQW5pbWF0aW5nJiYKKHRoaXMuaW52YWxpZGF0ZVRhYmJhYmxlcygpLHRoaXMubm90aWZ5UmVzaXplKCkpfSxfX2Vuc3VyZUZpcnN0TGFzdEZvY3VzYWJsZXM6ZnVuY3Rpb24oKXtpZighdGhpcy5fX2ZpcnN0Rm9jdXNhYmxlTm9kZXx8IXRoaXMuX19sYXN0Rm9jdXNhYmxlTm9kZSl7dmFyIGE9dGhpcy5fZm9jdXNhYmxlTm9kZXM7dGhpcy5fX2ZpcnN0Rm9jdXNhYmxlTm9kZT1hWzBdO3RoaXMuX19sYXN0Rm9jdXNhYmxlTm9kZT1hW2EubGVuZ3RoLTFdfX0sX19vcGVuZWRDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5vcGVuZWQ/KHRoaXMuX3ByZXBhcmVSZW5kZXJPcGVuZWQoKSx0aGlzLl9tYW5hZ2VyLmFkZE92ZXJsYXkodGhpcyksdGhpcy5fYXBwbHlGb2N1cygpLHRoaXMuX3JlbmRlck9wZW5lZCgpKToodGhpcy5fbWFuYWdlci5yZW1vdmVPdmVybGF5KHRoaXMpLHRoaXMuX2FwcGx5Rm9jdXMoKSx0aGlzLl9yZW5kZXJDbG9zZWQoKSl9LF9fZGVyYWY6ZnVuY3Rpb24oYSxjKXt2YXIgZD10aGlzLl9fcmFmczsKbnVsbCE9PWRbYV0mJmNhbmNlbEFuaW1hdGlvbkZyYW1lKGRbYV0pO2RbYV09cmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uKCl7ZFthXT1udWxsO2MuY2FsbCh0aGlzKX0uYmluZCh0aGlzKSl9LF9fdXBkYXRlU2Nyb2xsT2JzZXJ2ZXJzOmZ1bmN0aW9uKGEsYyxkKXthJiZjJiZ0aGlzLl9faXNWYWxpZFNjcm9sbEFjdGlvbihkKT8oImxvY2siPT09ZCYmKHRoaXMuX19zYXZlU2Nyb2xsUG9zaXRpb24oKSxQb2x5bWVyLklyb25TY3JvbGxNYW5hZ2VyLnB1c2hTY3JvbGxMb2NrKHRoaXMpKSx0aGlzLl9fYWRkU2Nyb2xsTGlzdGVuZXJzKCkpOihQb2x5bWVyLklyb25TY3JvbGxNYW5hZ2VyLnJlbW92ZVNjcm9sbExvY2sodGhpcyksdGhpcy5fX3JlbW92ZVNjcm9sbExpc3RlbmVycygpKX0sX19hZGRTY3JvbGxMaXN0ZW5lcnM6ZnVuY3Rpb24oKXtpZighdGhpcy5fX3Jvb3ROb2Rlcyl7dGhpcy5fX3Jvb3ROb2Rlcz1bXTtpZihQb2x5bWVyLlNldHRpbmdzLnVzZVNoYWRvdylmb3IodmFyIGE9CnRoaXM7YTspYS5ub2RlVHlwZT09PU5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERSYmYS5ob3N0JiZ0aGlzLl9fcm9vdE5vZGVzLnB1c2goYSksYT1hLmhvc3R8fGEuYXNzaWduZWRTbG90fHxhLnBhcmVudE5vZGU7dGhpcy5fX3Jvb3ROb2Rlcy5wdXNoKGRvY3VtZW50KX10aGlzLl9fcm9vdE5vZGVzLmZvckVhY2goZnVuY3Rpb24oYyl7Yy5hZGRFdmVudExpc3RlbmVyKCJzY3JvbGwiLHRoaXMuX19vbkNhcHR1cmVTY3JvbGwse2NhcHR1cmU6ITAscGFzc2l2ZTohMH0pfSx0aGlzKX0sX19yZW1vdmVTY3JvbGxMaXN0ZW5lcnM6ZnVuY3Rpb24oKXt0aGlzLl9fcm9vdE5vZGVzJiZ0aGlzLl9fcm9vdE5vZGVzLmZvckVhY2goZnVuY3Rpb24oYSl7YS5yZW1vdmVFdmVudExpc3RlbmVyKCJzY3JvbGwiLHRoaXMuX19vbkNhcHR1cmVTY3JvbGwse2NhcHR1cmU6ITAscGFzc2l2ZTohMH0pfSx0aGlzKTt0aGlzLmlzQXR0YWNoZWR8fCh0aGlzLl9fcm9vdE5vZGVzPW51bGwpfSxfX2lzVmFsaWRTY3JvbGxBY3Rpb246ZnVuY3Rpb24oYSl7cmV0dXJuImxvY2siPT09CmF8fCJyZWZpdCI9PT1hfHwiY2FuY2VsIj09PWF9LF9fb25DYXB0dXJlU2Nyb2xsOmZ1bmN0aW9uKGEpe2lmKCEodGhpcy5fX2lzQW5pbWF0aW5nfHwwPD1Qb2x5bWVyLmRvbShhKS5wYXRoLmluZGV4T2YodGhpcykpKXN3aXRjaCh0aGlzLnNjcm9sbEFjdGlvbil7Y2FzZSAibG9jayI6dGhpcy5fX3Jlc3RvcmVTY3JvbGxQb3NpdGlvbigpO2JyZWFrO2Nhc2UgInJlZml0Ijp0aGlzLl9fZGVyYWYoInJlZml0Iix0aGlzLnJlZml0KTticmVhaztjYXNlICJjYW5jZWwiOnRoaXMuY2FuY2VsKGEpfX0sX19zYXZlU2Nyb2xsUG9zaXRpb246ZnVuY3Rpb24oKXtkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50Pyh0aGlzLl9fc2Nyb2xsVG9wPWRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsVG9wLHRoaXMuX19zY3JvbGxMZWZ0PWRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsTGVmdCk6KHRoaXMuX19zY3JvbGxUb3A9TWF0aC5tYXgoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCwKZG9jdW1lbnQuYm9keS5zY3JvbGxUb3ApLHRoaXMuX19zY3JvbGxMZWZ0PU1hdGgubWF4KGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0LGRvY3VtZW50LmJvZHkuc2Nyb2xsTGVmdCkpfSxfX3Jlc3RvcmVTY3JvbGxQb3NpdGlvbjpmdW5jdGlvbigpe2RvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQ/KGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsVG9wPXRoaXMuX19zY3JvbGxUb3AsZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxMZWZ0PXRoaXMuX19zY3JvbGxMZWZ0KTooZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcD1kb2N1bWVudC5ib2R5LnNjcm9sbFRvcD10aGlzLl9fc2Nyb2xsVG9wLGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0PWRvY3VtZW50LmJvZHkuc2Nyb2xsTGVmdD10aGlzLl9fc2Nyb2xsTGVmdCl9fTtQb2x5bWVyLklyb25PdmVybGF5QmVoYXZpb3I9W1BvbHltZXIuSXJvbkZpdEJlaGF2aW9yLFBvbHltZXIuSXJvblJlc2l6YWJsZUJlaGF2aW9yLApQb2x5bWVyLklyb25PdmVybGF5QmVoYXZpb3JJbXBsXX0pKCk7Cjwvc2NyaXB0PgoKCgoKPHNjcmlwdD4vL35+V0VCUEFUSH5+L25lb24tYW5pbWF0aW9uL25lb24tYW5pbWF0YWJsZS1iZWhhdmlvci5odG1sLmpzClBvbHltZXIuTmVvbkFuaW1hdGFibGVCZWhhdmlvcj17cHJvcGVydGllczp7YW5pbWF0aW9uQ29uZmlnOnt0eXBlOk9iamVjdH0sZW50cnlBbmltYXRpb246e29ic2VydmVyOiJfZW50cnlBbmltYXRpb25DaGFuZ2VkIix0eXBlOlN0cmluZ30sZXhpdEFuaW1hdGlvbjp7b2JzZXJ2ZXI6Il9leGl0QW5pbWF0aW9uQ2hhbmdlZCIsdHlwZTpTdHJpbmd9fSxfZW50cnlBbmltYXRpb25DaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5hbmltYXRpb25Db25maWc9dGhpcy5hbmltYXRpb25Db25maWd8fHt9O3RoaXMuYW5pbWF0aW9uQ29uZmlnLmVudHJ5PVt7bmFtZTp0aGlzLmVudHJ5QW5pbWF0aW9uLG5vZGU6dGhpc31dfSxfZXhpdEFuaW1hdGlvbkNoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLmFuaW1hdGlvbkNvbmZpZz10aGlzLmFuaW1hdGlvbkNvbmZpZ3x8e307dGhpcy5hbmltYXRpb25Db25maWcuZXhpdD1be25hbWU6dGhpcy5leGl0QW5pbWF0aW9uLG5vZGU6dGhpc31dfSxfY29weVByb3BlcnRpZXM6ZnVuY3Rpb24oYSwKYyl7Zm9yKHZhciBkIGluIGMpYVtkXT1jW2RdfSxfY2xvbmVDb25maWc6ZnVuY3Rpb24oYSl7dmFyIGM9e2lzQ2xvbmU6ITB9O3RoaXMuX2NvcHlQcm9wZXJ0aWVzKGMsYSk7cmV0dXJuIGN9LF9nZXRBbmltYXRpb25Db25maWdSZWN1cnNpdmU6ZnVuY3Rpb24oYSxjLGQpe2lmKHRoaXMuYW5pbWF0aW9uQ29uZmlnKWlmKHRoaXMuYW5pbWF0aW9uQ29uZmlnLnZhbHVlJiYiZnVuY3Rpb24iPT09dHlwZW9mIHRoaXMuYW5pbWF0aW9uQ29uZmlnLnZhbHVlKXRoaXMuX3dhcm4odGhpcy5fbG9nZigicGxheUFuaW1hdGlvbiIsIlBsZWFzZSBwdXQgJ2FuaW1hdGlvbkNvbmZpZycgaW5zaWRlIG9mIHlvdXIgY29tcG9uZW50cyAncHJvcGVydGllcycgb2JqZWN0IGluc3RlYWQgb2Ygb3V0c2lkZSBvZiBpdC4iKSk7ZWxzZXt2YXIgZj1hP3RoaXMuYW5pbWF0aW9uQ29uZmlnW2FdOnRoaXMuYW5pbWF0aW9uQ29uZmlnO0FycmF5LmlzQXJyYXkoZil8fChmPVtmXSk7aWYoZilmb3IodmFyIGcsbD0wO2c9CmZbbF07bCsrKWlmKGcuYW5pbWF0YWJsZSlnLmFuaW1hdGFibGUuX2dldEFuaW1hdGlvbkNvbmZpZ1JlY3Vyc2l2ZShnLnR5cGV8fGEsYyxkKTtlbHNlIGlmKGcuaWQpe3ZhciBrPWNbZy5pZF07az8oay5pc0Nsb25lfHwoY1tnLmlkXT10aGlzLl9jbG9uZUNvbmZpZyhrKSxrPWNbZy5pZF0pLHRoaXMuX2NvcHlQcm9wZXJ0aWVzKGssZykpOmNbZy5pZF09Z31lbHNlIGQucHVzaChnKX19LGdldEFuaW1hdGlvbkNvbmZpZzpmdW5jdGlvbihhKXt2YXIgYz17fSxkPVtdO3RoaXMuX2dldEFuaW1hdGlvbkNvbmZpZ1JlY3Vyc2l2ZShhLGMsZCk7Zm9yKHZhciBmIGluIGMpZC5wdXNoKGNbZl0pO3JldHVybiBkfX07Cjwvc2NyaXB0PgoKCjxzY3JpcHQ+Ly9+fldFQlBBVEh+fi9uZW9uLWFuaW1hdGlvbi9uZW9uLWFuaW1hdGlvbi1ydW5uZXItYmVoYXZpb3IuaHRtbC5qcwpQb2x5bWVyLk5lb25BbmltYXRpb25SdW5uZXJCZWhhdmlvckltcGw9e19jb25maWd1cmVBbmltYXRpb25zOmZ1bmN0aW9uKGEpe3ZhciBjPVtdLGQ9W107aWYoMDxhLmxlbmd0aClmb3IodmFyIGYsZz0wO2Y9YVtnXTtnKyspe3ZhciBsPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoZi5uYW1lKTtpZihsLmlzTmVvbkFuaW1hdGlvbil7dmFyIGs9bnVsbDtsLmNvbmZpZ3VyZXx8KGwuY29uZmlndXJlPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9KTtrPWwuY29uZmlndXJlKGYpO2QucHVzaCh7cmVzdWx0OmssY29uZmlnOmZ9KX1lbHNlIGNvbnNvbGUud2Fybih0aGlzLmlzKyI6IixmLm5hbWUsIm5vdCBmb3VuZCEiKX1mb3IoYT0wO2E8ZC5sZW5ndGg7YSsrKXtrPWRbYV0ucmVzdWx0O2Y9ZFthXS5jb25maWc7dHJ5eyJmdW5jdGlvbiIhPXR5cGVvZiBrLmNhbmNlbCYmKGs9ZG9jdW1lbnQudGltZWxpbmUucGxheShrKSl9Y2F0Y2gobSl7az1udWxsLGNvbnNvbGUud2FybigiQ291bGRudCBwbGF5IiwKIigiLGYubmFtZSwiKS4iLG0pfWsmJmMucHVzaCh7bmVvbkFuaW1hdGlvbjpsLGNvbmZpZzpmLGFuaW1hdGlvbjprfSl9cmV0dXJuIGN9LF9zaG91bGRDb21wbGV0ZTpmdW5jdGlvbihhKXtmb3IodmFyIGM9ITAsZD0wO2Q8YS5sZW5ndGg7ZCsrKWlmKCJmaW5pc2hlZCIhPWFbZF0uYW5pbWF0aW9uLnBsYXlTdGF0ZSl7Yz0hMTticmVha31yZXR1cm4gY30sX2NvbXBsZXRlOmZ1bmN0aW9uKGEpe2Zvcih2YXIgYz0wO2M8YS5sZW5ndGg7YysrKWFbY10ubmVvbkFuaW1hdGlvbi5jb21wbGV0ZShhW2NdLmNvbmZpZyk7Zm9yKGM9MDtjPGEubGVuZ3RoO2MrKylhW2NdLmFuaW1hdGlvbi5jYW5jZWwoKX0scGxheUFuaW1hdGlvbjpmdW5jdGlvbihhLGMpe3ZhciBkPXRoaXMuZ2V0QW5pbWF0aW9uQ29uZmlnKGEpO2lmKGQpe3RoaXMuX2FjdGl2ZT10aGlzLl9hY3RpdmV8fHt9O3RoaXMuX2FjdGl2ZVthXSYmKHRoaXMuX2NvbXBsZXRlKHRoaXMuX2FjdGl2ZVthXSksZGVsZXRlIHRoaXMuX2FjdGl2ZVthXSk7CnZhciBmPXRoaXMuX2NvbmZpZ3VyZUFuaW1hdGlvbnMoZCk7aWYoMD09Zi5sZW5ndGgpdGhpcy5maXJlKCJuZW9uLWFuaW1hdGlvbi1maW5pc2giLGMse2J1YmJsZXM6ITF9KTtlbHNlIGZvcih0aGlzLl9hY3RpdmVbYV09ZixkPTA7ZDxmLmxlbmd0aDtkKyspZltkXS5hbmltYXRpb24ub25maW5pc2g9ZnVuY3Rpb24oKXt0aGlzLl9zaG91bGRDb21wbGV0ZShmKSYmKHRoaXMuX2NvbXBsZXRlKGYpLGRlbGV0ZSB0aGlzLl9hY3RpdmVbYV0sdGhpcy5maXJlKCJuZW9uLWFuaW1hdGlvbi1maW5pc2giLGMse2J1YmJsZXM6ITF9KSl9LmJpbmQodGhpcyl9fSxjYW5jZWxBbmltYXRpb246ZnVuY3Rpb24oKXtmb3IodmFyIGEgaW4gdGhpcy5fYWN0aXZlKXt2YXIgYz10aGlzLl9hY3RpdmVbYV0sZDtmb3IoZCBpbiBjKWNbZF0uYW5pbWF0aW9uLmNhbmNlbCgpfXRoaXMuX2FjdGl2ZT17fX19OwpQb2x5bWVyLk5lb25BbmltYXRpb25SdW5uZXJCZWhhdmlvcj1bUG9seW1lci5OZW9uQW5pbWF0YWJsZUJlaGF2aW9yLFBvbHltZXIuTmVvbkFuaW1hdGlvblJ1bm5lckJlaGF2aW9ySW1wbF07Cjwvc2NyaXB0PgoKCgoKPHNjcmlwdD4vL35+V0VCUEFUSH5+L2lyb24tZHJvcGRvd24vaXJvbi1kcm9wZG93bi1zY3JvbGwtbWFuYWdlci5odG1sLmpzCihmdW5jdGlvbigpe1BvbHltZXIuSXJvbkRyb3Bkb3duU2Nyb2xsTWFuYWdlcj1Qb2x5bWVyLklyb25TY3JvbGxNYW5hZ2VyfSkoKTsKPC9zY3JpcHQ+CgoKCjxkb20tbW9kdWxlIGlkPSJpcm9uLWRyb3Bkb3duIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgIH0KCiAgICAgICNjb250ZW50V3JhcHBlciA6OnNsb3R0ZWQoKikgewogICAgICAgIG92ZXJmbG93OiBhdXRvOwogICAgICB9CgogICAgICAjY29udGVudFdyYXBwZXIuYW5pbWF0aW5nIDo6c2xvdHRlZCgqKSB7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8ZGl2IGlkPSJjb250ZW50V3JhcHBlciI+CiAgICAgIDxzbG90IGlkPSJjb250ZW50IiBuYW1lPSJkcm9wZG93bi1jb250ZW50Ij48L3Nsb3Q+CiAgICA8L2Rpdj4KICA8L3RlbXBsYXRlPgoKICA8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vaXJvbi1kcm9wZG93bi9pcm9uLWRyb3Bkb3duLmh0bWwuanMKKGZ1bmN0aW9uKCl7UG9seW1lcih7aXM6Imlyb24tZHJvcGRvd24iLGJlaGF2aW9yczpbUG9seW1lci5Jcm9uQ29udHJvbFN0YXRlLFBvbHltZXIuSXJvbkExMXlLZXlzQmVoYXZpb3IsUG9seW1lci5Jcm9uT3ZlcmxheUJlaGF2aW9yLFBvbHltZXIuTmVvbkFuaW1hdGlvblJ1bm5lckJlaGF2aW9yXSxwcm9wZXJ0aWVzOntob3Jpem9udGFsQWxpZ246e3R5cGU6U3RyaW5nLHZhbHVlOiJsZWZ0IixyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9LHZlcnRpY2FsQWxpZ246e3R5cGU6U3RyaW5nLHZhbHVlOiJ0b3AiLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH0sb3BlbkFuaW1hdGlvbkNvbmZpZzp7dHlwZTpPYmplY3R9LGNsb3NlQW5pbWF0aW9uQ29uZmlnOnt0eXBlOk9iamVjdH0sZm9jdXNUYXJnZXQ6e3R5cGU6T2JqZWN0fSxub0FuaW1hdGlvbnM6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sYWxsb3dPdXRzaWRlU2Nyb2xsOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEsb2JzZXJ2ZXI6Il9hbGxvd091dHNpZGVTY3JvbGxDaGFuZ2VkIn19LApsaXN0ZW5lcnM6eyJuZW9uLWFuaW1hdGlvbi1maW5pc2giOiJfb25OZW9uQW5pbWF0aW9uRmluaXNoIn0sb2JzZXJ2ZXJzOlsiX3VwZGF0ZU92ZXJsYXlQb3NpdGlvbihwb3NpdGlvblRhcmdldCwgdmVydGljYWxBbGlnbiwgaG9yaXpvbnRhbEFsaWduLCB2ZXJ0aWNhbE9mZnNldCwgaG9yaXpvbnRhbE9mZnNldCkiXSxnZXQgY29udGFpbmVkRWxlbWVudCgpe2Zvcih2YXIgYT1Qb2x5bWVyLmRvbSh0aGlzLiQuY29udGVudCkuZ2V0RGlzdHJpYnV0ZWROb2RlcygpLGM9MCxkPWEubGVuZ3RoO2M8ZDtjKyspaWYoYVtjXS5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFKXJldHVybiBhW2NdfSxyZWFkeTpmdW5jdGlvbigpe3RoaXMuc2Nyb2xsQWN0aW9ufHwodGhpcy5zY3JvbGxBY3Rpb249dGhpcy5hbGxvd091dHNpZGVTY3JvbGw/InJlZml0IjoibG9jayIpO3RoaXMuX3JlYWRpZWQ9ITB9LGF0dGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5zaXppbmdUYXJnZXQmJnRoaXMuc2l6aW5nVGFyZ2V0IT09CnRoaXN8fCh0aGlzLnNpemluZ1RhcmdldD10aGlzLmNvbnRhaW5lZEVsZW1lbnR8fHRoaXMpfSxkZXRhY2hlZDpmdW5jdGlvbigpe3RoaXMuY2FuY2VsQW5pbWF0aW9uKCl9LF9vcGVuZWRDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5vcGVuZWQmJnRoaXMuZGlzYWJsZWQ/dGhpcy5jYW5jZWwoKToodGhpcy5jYW5jZWxBbmltYXRpb24oKSx0aGlzLl91cGRhdGVBbmltYXRpb25Db25maWcoKSxQb2x5bWVyLklyb25PdmVybGF5QmVoYXZpb3JJbXBsLl9vcGVuZWRDaGFuZ2VkLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9LF9yZW5kZXJPcGVuZWQ6ZnVuY3Rpb24oKXshdGhpcy5ub0FuaW1hdGlvbnMmJnRoaXMuYW5pbWF0aW9uQ29uZmlnLm9wZW4/KHRoaXMuJC5jb250ZW50V3JhcHBlci5jbGFzc0xpc3QuYWRkKCJhbmltYXRpbmciKSx0aGlzLnBsYXlBbmltYXRpb24oIm9wZW4iKSk6UG9seW1lci5Jcm9uT3ZlcmxheUJlaGF2aW9ySW1wbC5fcmVuZGVyT3BlbmVkLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sCl9yZW5kZXJDbG9zZWQ6ZnVuY3Rpb24oKXshdGhpcy5ub0FuaW1hdGlvbnMmJnRoaXMuYW5pbWF0aW9uQ29uZmlnLmNsb3NlPyh0aGlzLiQuY29udGVudFdyYXBwZXIuY2xhc3NMaXN0LmFkZCgiYW5pbWF0aW5nIiksdGhpcy5wbGF5QW5pbWF0aW9uKCJjbG9zZSIpKTpQb2x5bWVyLklyb25PdmVybGF5QmVoYXZpb3JJbXBsLl9yZW5kZXJDbG9zZWQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxfb25OZW9uQW5pbWF0aW9uRmluaXNoOmZ1bmN0aW9uKCl7dGhpcy4kLmNvbnRlbnRXcmFwcGVyLmNsYXNzTGlzdC5yZW1vdmUoImFuaW1hdGluZyIpO3RoaXMub3BlbmVkP3RoaXMuX2ZpbmlzaFJlbmRlck9wZW5lZCgpOnRoaXMuX2ZpbmlzaFJlbmRlckNsb3NlZCgpfSxfdXBkYXRlQW5pbWF0aW9uQ29uZmlnOmZ1bmN0aW9uKCl7Zm9yKHZhciBhPXRoaXMuY29udGFpbmVkRWxlbWVudCxjPVtdLmNvbmNhdCh0aGlzLm9wZW5BbmltYXRpb25Db25maWd8fFtdKS5jb25jYXQodGhpcy5jbG9zZUFuaW1hdGlvbkNvbmZpZ3x8CltdKSxkPTA7ZDxjLmxlbmd0aDtkKyspY1tkXS5ub2RlPWE7dGhpcy5hbmltYXRpb25Db25maWc9e29wZW46dGhpcy5vcGVuQW5pbWF0aW9uQ29uZmlnLGNsb3NlOnRoaXMuY2xvc2VBbmltYXRpb25Db25maWd9fSxfdXBkYXRlT3ZlcmxheVBvc2l0aW9uOmZ1bmN0aW9uKCl7dGhpcy5pc0F0dGFjaGVkJiZ0aGlzLm5vdGlmeVJlc2l6ZSgpfSxfYWxsb3dPdXRzaWRlU2Nyb2xsQ2hhbmdlZDpmdW5jdGlvbihhKXt0aGlzLl9yZWFkaWVkJiYoYT90aGlzLnNjcm9sbEFjdGlvbiYmImxvY2siIT09dGhpcy5zY3JvbGxBY3Rpb258fCh0aGlzLnNjcm9sbEFjdGlvbj0icmVmaXQiKTp0aGlzLnNjcm9sbEFjdGlvbj0ibG9jayIpfSxfYXBwbHlGb2N1czpmdW5jdGlvbigpe3ZhciBhPXRoaXMuZm9jdXNUYXJnZXR8fHRoaXMuY29udGFpbmVkRWxlbWVudDthJiZ0aGlzLm9wZW5lZCYmIXRoaXMubm9BdXRvRm9jdXM/YS5mb2N1cygpOlBvbHltZXIuSXJvbk92ZXJsYXlCZWhhdmlvckltcGwuX2FwcGx5Rm9jdXMuYXBwbHkodGhpcywKYXJndW1lbnRzKX19KX0pKCk7Cjwvc2NyaXB0Pgo8L2RvbS1tb2R1bGU+CgoKCgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vbmVvbi1hbmltYXRpb24vbmVvbi1hbmltYXRpb24tYmVoYXZpb3IuaHRtbC5qcwpQb2x5bWVyLk5lb25BbmltYXRpb25CZWhhdmlvcj17cHJvcGVydGllczp7YW5pbWF0aW9uVGltaW5nOnt0eXBlOk9iamVjdCx2YWx1ZTpmdW5jdGlvbigpe3JldHVybntkdXJhdGlvbjo1MDAsZWFzaW5nOiJjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpIixmaWxsOiJib3RoIn19fX0saXNOZW9uQW5pbWF0aW9uOiEwLGNyZWF0ZWQ6ZnVuY3Rpb24oKXtkb2N1bWVudC5ib2R5LmFuaW1hdGV8fGNvbnNvbGUud2FybigiTm8gd2ViIGFuaW1hdGlvbnMgZGV0ZWN0ZWQuIFRoaXMgZWxlbWVudCB3aWxsIG5vdCBmdW5jdGlvbiB3aXRob3V0IGEgd2ViIGFuaW1hdGlvbnMgcG9seWZpbGwuIil9LHRpbWluZ0Zyb21Db25maWc6ZnVuY3Rpb24oYSl7aWYoYS50aW1pbmcpZm9yKHZhciBjIGluIGEudGltaW5nKXRoaXMuYW5pbWF0aW9uVGltaW5nW2NdPWEudGltaW5nW2NdO3JldHVybiB0aGlzLmFuaW1hdGlvblRpbWluZ30sc2V0UHJlZml4ZWRQcm9wZXJ0eTpmdW5jdGlvbihhLGMsZCl7Zm9yKHZhciBmPQp7dHJhbnNmb3JtOlsid2Via2l0VHJhbnNmb3JtIl0sdHJhbnNmb3JtT3JpZ2luOlsibW96VHJhbnNmb3JtT3JpZ2luIiwid2Via2l0VHJhbnNmb3JtT3JpZ2luIl19W2NdLGcsbD0wO2c9ZltsXTtsKyspYS5zdHlsZVtnXT1kO2Euc3R5bGVbY109ZH0sY29tcGxldGU6ZnVuY3Rpb24oKXt9fTsKPC9zY3JpcHQ+CgoKCgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vbmVvbi1hbmltYXRpb24vYW5pbWF0aW9ucy9mYWRlLWluLWFuaW1hdGlvbi5odG1sLmpzClBvbHltZXIoe2lzOiJmYWRlLWluLWFuaW1hdGlvbiIsYmVoYXZpb3JzOltQb2x5bWVyLk5lb25BbmltYXRpb25CZWhhdmlvcl0sY29uZmlndXJlOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLl9lZmZlY3Q9bmV3IEtleWZyYW1lRWZmZWN0KGEubm9kZSxbe29wYWNpdHk6IjAifSx7b3BhY2l0eToiMSJ9XSx0aGlzLnRpbWluZ0Zyb21Db25maWcoYSkpfX0pOwo8L3NjcmlwdD4KCgoKCgoKPHNjcmlwdD4vL35+V0VCUEFUSH5+L25lb24tYW5pbWF0aW9uL2FuaW1hdGlvbnMvZmFkZS1vdXQtYW5pbWF0aW9uLmh0bWwuanMKUG9seW1lcih7aXM6ImZhZGUtb3V0LWFuaW1hdGlvbiIsYmVoYXZpb3JzOltQb2x5bWVyLk5lb25BbmltYXRpb25CZWhhdmlvcl0sY29uZmlndXJlOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLl9lZmZlY3Q9bmV3IEtleWZyYW1lRWZmZWN0KGEubm9kZSxbe29wYWNpdHk6IjEifSx7b3BhY2l0eToiMCJ9XSx0aGlzLnRpbWluZ0Zyb21Db25maWcoYSkpfX0pOwo8L3NjcmlwdD4KCgoKCgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vcGFwZXItbWVudS1idXR0b24vcGFwZXItbWVudS1idXR0b24tYW5pbWF0aW9ucy5odG1sLmpzClBvbHltZXIoe2lzOiJwYXBlci1tZW51LWdyb3ctaGVpZ2h0LWFuaW1hdGlvbiIsYmVoYXZpb3JzOltQb2x5bWVyLk5lb25BbmltYXRpb25CZWhhdmlvcl0sY29uZmlndXJlOmZ1bmN0aW9uKGEpe3ZhciBjPWEubm9kZSxkPWMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0O3JldHVybiB0aGlzLl9lZmZlY3Q9bmV3IEtleWZyYW1lRWZmZWN0KGMsW3toZWlnaHQ6ZC8yKyJweCJ9LHtoZWlnaHQ6ZCsicHgifV0sdGhpcy50aW1pbmdGcm9tQ29uZmlnKGEpKX19KTtQb2x5bWVyKHtpczoicGFwZXItbWVudS1ncm93LXdpZHRoLWFuaW1hdGlvbiIsYmVoYXZpb3JzOltQb2x5bWVyLk5lb25BbmltYXRpb25CZWhhdmlvcl0sY29uZmlndXJlOmZ1bmN0aW9uKGEpe3ZhciBjPWEubm9kZSxkPWMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7cmV0dXJuIHRoaXMuX2VmZmVjdD1uZXcgS2V5ZnJhbWVFZmZlY3QoYyxbe3dpZHRoOmQvMisicHgifSx7d2lkdGg6ZCsicHgifV0sdGhpcy50aW1pbmdGcm9tQ29uZmlnKGEpKX19KTsKUG9seW1lcih7aXM6InBhcGVyLW1lbnUtc2hyaW5rLXdpZHRoLWFuaW1hdGlvbiIsYmVoYXZpb3JzOltQb2x5bWVyLk5lb25BbmltYXRpb25CZWhhdmlvcl0sY29uZmlndXJlOmZ1bmN0aW9uKGEpe3ZhciBjPWEubm9kZSxkPWMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7cmV0dXJuIHRoaXMuX2VmZmVjdD1uZXcgS2V5ZnJhbWVFZmZlY3QoYyxbe3dpZHRoOmQrInB4In0se3dpZHRoOmQtZC8yMCsicHgifV0sdGhpcy50aW1pbmdGcm9tQ29uZmlnKGEpKX19KTsKUG9seW1lcih7aXM6InBhcGVyLW1lbnUtc2hyaW5rLWhlaWdodC1hbmltYXRpb24iLGJlaGF2aW9yczpbUG9seW1lci5OZW9uQW5pbWF0aW9uQmVoYXZpb3JdLGNvbmZpZ3VyZTpmdW5jdGlvbihhKXt2YXIgYz1hLm5vZGUsZD1jLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodDt0aGlzLnNldFByZWZpeGVkUHJvcGVydHkoYywidHJhbnNmb3JtT3JpZ2luIiwiMCAwIik7cmV0dXJuIHRoaXMuX2VmZmVjdD1uZXcgS2V5ZnJhbWVFZmZlY3QoYyxbe2hlaWdodDpkKyJweCIsdHJhbnNmb3JtOiJ0cmFuc2xhdGVZKDApIn0se2hlaWdodDpkLzIrInB4Iix0cmFuc2Zvcm06InRyYW5zbGF0ZVkoLTIwcHgpIn1dLHRoaXMudGltaW5nRnJvbUNvbmZpZyhhKSl9fSk7Cjwvc2NyaXB0PgoKCgoKCgo8ZG9tLW1vZHVsZSBpZD0icGFwZXItbWVudS1idXR0b24iPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgcGFkZGluZzogOHB4OwogICAgICAgIG91dGxpbmU6IG5vbmU7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLW1lbnUtYnV0dG9uOwogICAgICB9CgogICAgICA6aG9zdChbZGlzYWJsZWRdKSB7CiAgICAgICAgY3Vyc29yOiBhdXRvOwogICAgICAgIGNvbG9yOiB2YXIoLS1kaXNhYmxlZC10ZXh0LWNvbG9yKTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItbWVudS1idXR0b24tZGlzYWJsZWQ7CiAgICAgIH0KCiAgICAgIGlyb24tZHJvcGRvd24gewogICAgICAgIEBhcHBseSAtLXBhcGVyLW1lbnUtYnV0dG9uLWRyb3Bkb3duOwogICAgICB9CgogICAgICAuZHJvcGRvd24tY29udGVudCB7CiAgICAgICAgQGFwcGx5IC0tc2hhZG93LWVsZXZhdGlvbi0yZHA7CgogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBib3JkZXItcmFkaXVzOiAycHg7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItbWVudS1idXR0b24tZHJvcGRvd24tYmFja2dyb3VuZCwgdmFyKC0tcHJpbWFyeS1iYWNrZ3JvdW5kLWNvbG9yKSk7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLW1lbnUtYnV0dG9uLWNvbnRlbnQ7CiAgICAgIH0KCiAgICAgIDpob3N0KFt2ZXJ0aWNhbC1hbGlnbj0idG9wIl0pIC5kcm9wZG93bi1jb250ZW50IHsKICAgICAgICBtYXJnaW4tYm90dG9tOiAyMHB4OwogICAgICAgIG1hcmdpbi10b3A6IC0xMHB4OwogICAgICAgIHRvcDogMTBweDsKICAgICAgfQoKICAgICAgOmhvc3QoW3ZlcnRpY2FsLWFsaWduPSJib3R0b20iXSkgLmRyb3Bkb3duLWNvbnRlbnQgewogICAgICAgIGJvdHRvbTogMTBweDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAtMTBweDsKICAgICAgICBtYXJnaW4tdG9wOiAyMHB4OwogICAgICB9CgogICAgICAjdHJpZ2dlciB7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxkaXYgaWQ9InRyaWdnZXIiIG9uLXRhcD0idG9nZ2xlIj4KICAgICAgPHNsb3QgbmFtZT0iZHJvcGRvd24tdHJpZ2dlciI+PC9zbG90PgogICAgPC9kaXY+CgogICAgPGlyb24tZHJvcGRvd24gaWQ9ImRyb3Bkb3duIiBvcGVuZWQ9Int7b3BlbmVkfX0iIGhvcml6b250YWwtYWxpZ249IltbaG9yaXpvbnRhbEFsaWduXV0iIHZlcnRpY2FsLWFsaWduPSJbW3ZlcnRpY2FsQWxpZ25dXSIgZHluYW1pYy1hbGlnbj0iW1tkeW5hbWljQWxpZ25dXSIgaG9yaXpvbnRhbC1vZmZzZXQ9IltbaG9yaXpvbnRhbE9mZnNldF1dIiB2ZXJ0aWNhbC1vZmZzZXQ9IltbdmVydGljYWxPZmZzZXRdXSIgbm8tb3ZlcmxhcD0iW1tub092ZXJsYXBdXSIgb3Blbi1hbmltYXRpb24tY29uZmlnPSJbW29wZW5BbmltYXRpb25Db25maWddXSIgY2xvc2UtYW5pbWF0aW9uLWNvbmZpZz0iW1tjbG9zZUFuaW1hdGlvbkNvbmZpZ11dIiBuby1hbmltYXRpb25zPSJbW25vQW5pbWF0aW9uc11dIiBmb2N1cy10YXJnZXQ9IltbX2Ryb3Bkb3duQ29udGVudF1dIiBhbGxvdy1vdXRzaWRlLXNjcm9sbD0iW1thbGxvd091dHNpZGVTY3JvbGxdXSIgcmVzdG9yZS1mb2N1cy1vbi1jbG9zZT0iW1tyZXN0b3JlRm9jdXNPbkNsb3NlXV0iIG9uLWlyb24tb3ZlcmxheS1jYW5jZWxlZD0iX19vbklyb25PdmVybGF5Q2FuY2VsZWQiPgogICAgICA8ZGl2IHNsb3Q9ImRyb3Bkb3duLWNvbnRlbnQiIGNsYXNzPSJkcm9wZG93bi1jb250ZW50Ij4KICAgICAgICA8c2xvdCBpZD0iY29udGVudCIgbmFtZT0iZHJvcGRvd24tY29udGVudCI+PC9zbG90PgogICAgICA8L2Rpdj4KICAgIDwvaXJvbi1kcm9wZG93bj4KICA8L3RlbXBsYXRlPgoKICA8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vcGFwZXItbWVudS1idXR0b24vcGFwZXItbWVudS1idXR0b24uaHRtbC5qcwooZnVuY3Rpb24oKXt2YXIgYT17QU5JTUFUSU9OX0NVQklDX0JFWklFUjoiY3ViaWMtYmV6aWVyKC4zLC45NSwuNSwxKSIsTUFYX0FOSU1BVElPTl9USU1FX01TOjQwMH07UG9seW1lci5QYXBlck1lbnVCdXR0b249ZnVuY3Rpb24oKXt9O1BvbHltZXIuUGFwZXJNZW51QnV0dG9uLnByb3RvdHlwZS5yZWdpc3RlcmVkPWZ1bmN0aW9uKCl7fTtQb2x5bWVyLlBhcGVyTWVudUJ1dHRvbi5wcm90b3R5cGUuYWRkT3duS2V5QmluZGluZz1mdW5jdGlvbigpe307UG9seW1lci5QYXBlck1lbnVCdXR0b24ucHJvdG90eXBlLnJlbW92ZU93bktleUJpbmRpbmdzPWZ1bmN0aW9uKCl7fTtQb2x5bWVyLlBhcGVyTWVudUJ1dHRvbi5wcm90b3R5cGUua2V5Ym9hcmRFdmVudE1hdGNoZXNLZXlzPWZ1bmN0aW9uKCl7fTtQb2x5bWVyLlBhcGVyTWVudUJ1dHRvbi5wcm90b3R5cGUuX2NvbGxlY3RLZXlCaW5kaW5ncz1mdW5jdGlvbigpe307UG9seW1lci5QYXBlck1lbnVCdXR0b24ucHJvdG90eXBlLl9wcmVwS2V5QmluZGluZ3M9CmZ1bmN0aW9uKCl7fTtQb2x5bWVyLlBhcGVyTWVudUJ1dHRvbi5wcm90b3R5cGUuX2FkZEtleUJpbmRpbmc9ZnVuY3Rpb24oKXt9O1BvbHltZXIuUGFwZXJNZW51QnV0dG9uLnByb3RvdHlwZS5fcmVzZXRLZXlFdmVudExpc3RlbmVycz1mdW5jdGlvbigpe307UG9seW1lci5QYXBlck1lbnVCdXR0b24ucHJvdG90eXBlLl9saXN0ZW5LZXlFdmVudExpc3RlbmVycz1mdW5jdGlvbigpe307UG9seW1lci5QYXBlck1lbnVCdXR0b24ucHJvdG90eXBlLl91bmxpc3RlbktleUV2ZW50TGlzdGVuZXJzPWZ1bmN0aW9uKCl7fTtQb2x5bWVyLlBhcGVyTWVudUJ1dHRvbi5wcm90b3R5cGUuX29uS2V5QmluZGluZ0V2ZW50PWZ1bmN0aW9uKCl7fTtQb2x5bWVyLlBhcGVyTWVudUJ1dHRvbi5wcm90b3R5cGUuX3RyaWdnZXJLZXlIYW5kbGVyPWZ1bmN0aW9uKCl7fTtQb2x5bWVyLlBhcGVyTWVudUJ1dHRvbi5wcm90b3R5cGUuX2ZvY3VzQmx1ckhhbmRsZXI9ZnVuY3Rpb24oYyl7aWYoUG9seW1lci5FbGVtZW50KXRoaXMuX3NldEZvY3VzZWQoImZvY3VzIj09PQpjLnR5cGUpO2Vsc2UgaWYoYy50YXJnZXQ9PT10aGlzKXRoaXMuX3NldEZvY3VzZWQoImZvY3VzIj09PWMudHlwZSk7ZWxzZSBpZih0aGlzLl9faGFuZGxlRXZlbnRSZXRhcmdldGluZyl7dmFyIGQ9UG9seW1lci5kb20oYykubG9jYWxUYXJnZXQ7dGhpcy5pc0xpZ2h0RGVzY2VuZGFudChkKXx8dGhpcy5maXJlKGMudHlwZSx7c291cmNlRXZlbnQ6Y30se25vZGU6dGhpcyxidWJibGVzOmMuYnViYmxlcyxjYW5jZWxhYmxlOmMuY2FuY2VsYWJsZX0pfX07UG9seW1lci5QYXBlck1lbnVCdXR0b24ucHJvdG90eXBlLl9jaGFuZ2VkQ29udHJvbFN0YXRlPWZ1bmN0aW9uKCl7dGhpcy5fY29udHJvbFN0YXRlQ2hhbmdlZCYmdGhpcy5fY29udHJvbFN0YXRlQ2hhbmdlZCgpfTtQb2x5bWVyLlBhcGVyTWVudUJ1dHRvbi5wcm90b3R5cGUuX3NldEZvY3VzZWQ9ZnVuY3Rpb24oKXt9O1BvbHltZXIuUGFwZXJNZW51QnV0dG9uPVBvbHltZXIoe2lzOiJwYXBlci1tZW51LWJ1dHRvbiIsYmVoYXZpb3JzOltQb2x5bWVyLklyb25BMTF5S2V5c0JlaGF2aW9yLApQb2x5bWVyLklyb25Db250cm9sU3RhdGVdLHByb3BlcnRpZXM6e29wZW5lZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExLG5vdGlmeTohMCxvYnNlcnZlcjoiX29wZW5lZENoYW5nZWQifSxob3Jpem9udGFsQWxpZ246e3R5cGU6U3RyaW5nLHZhbHVlOiJsZWZ0IixyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9LHZlcnRpY2FsQWxpZ246e3R5cGU6U3RyaW5nLHZhbHVlOiJ0b3AiLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH0sZHluYW1pY0FsaWduOnt0eXBlOkJvb2xlYW59LGhvcml6b250YWxPZmZzZXQ6e3R5cGU6TnVtYmVyLHZhbHVlOjAsbm90aWZ5OiEwfSx2ZXJ0aWNhbE9mZnNldDp7dHlwZTpOdW1iZXIsdmFsdWU6MCxub3RpZnk6ITB9LG5vT3ZlcmxhcDp7dHlwZTpCb29sZWFufSxub0FuaW1hdGlvbnM6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0saWdub3JlU2VsZWN0Ont0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGNsb3NlT25BY3RpdmF0ZTp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxvcGVuQW5pbWF0aW9uQ29uZmlnOnt0eXBlOk9iamVjdCwKdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm5be25hbWU6ImZhZGUtaW4tYW5pbWF0aW9uIix0aW1pbmc6e2RlbGF5OjEwMCxkdXJhdGlvbjoyMDB9fSx7bmFtZToicGFwZXItbWVudS1ncm93LXdpZHRoLWFuaW1hdGlvbiIsdGltaW5nOntkZWxheToxMDAsZHVyYXRpb246MTUwLGVhc2luZzphLkFOSU1BVElPTl9DVUJJQ19CRVpJRVJ9fSx7bmFtZToicGFwZXItbWVudS1ncm93LWhlaWdodC1hbmltYXRpb24iLHRpbWluZzp7ZGVsYXk6MTAwLGR1cmF0aW9uOjI3NSxlYXNpbmc6YS5BTklNQVRJT05fQ1VCSUNfQkVaSUVSfX1dfX0sY2xvc2VBbmltYXRpb25Db25maWc6e3R5cGU6T2JqZWN0LHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuW3tuYW1lOiJmYWRlLW91dC1hbmltYXRpb24iLHRpbWluZzp7ZHVyYXRpb246MTUwfX0se25hbWU6InBhcGVyLW1lbnUtc2hyaW5rLXdpZHRoLWFuaW1hdGlvbiIsdGltaW5nOntkZWxheToxMDAsZHVyYXRpb246NTAsZWFzaW5nOmEuQU5JTUFUSU9OX0NVQklDX0JFWklFUn19LAp7bmFtZToicGFwZXItbWVudS1zaHJpbmstaGVpZ2h0LWFuaW1hdGlvbiIsdGltaW5nOntkdXJhdGlvbjoyMDAsZWFzaW5nOiJlYXNlLWluIn19XX19LGFsbG93T3V0c2lkZVNjcm9sbDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxyZXN0b3JlRm9jdXNPbkNsb3NlOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITB9LF9kcm9wZG93bkNvbnRlbnQ6e3R5cGU6T2JqZWN0fX0saG9zdEF0dHJpYnV0ZXM6e3JvbGU6Imdyb3VwIiwiYXJpYS1oYXNwb3B1cCI6InRydWUifSxsaXN0ZW5lcnM6eyJpcm9uLWFjdGl2YXRlIjoiX29uSXJvbkFjdGl2YXRlIiwiaXJvbi1zZWxlY3QiOiJfb25Jcm9uU2VsZWN0In0sZ2V0IGNvbnRlbnRFbGVtZW50KCl7Zm9yKHZhciBjPVBvbHltZXIuZG9tKHRoaXMuJC5jb250ZW50KS5nZXREaXN0cmlidXRlZE5vZGVzKCksZD0wLGY9Yy5sZW5ndGg7ZDxmO2QrKylpZihjW2RdLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUpcmV0dXJuIGNbZF19LHRvZ2dsZTpmdW5jdGlvbigpe3RoaXMub3BlbmVkPwp0aGlzLmNsb3NlKCk6dGhpcy5vcGVuKCl9LG9wZW46ZnVuY3Rpb24oKXt0aGlzLmRpc2FibGVkfHx0aGlzLiQuZHJvcGRvd24ub3BlbigpfSxjbG9zZTpmdW5jdGlvbigpe3RoaXMuJC5kcm9wZG93bi5jbG9zZSgpfSxfb25Jcm9uU2VsZWN0OmZ1bmN0aW9uKCl7dGhpcy5pZ25vcmVTZWxlY3R8fHRoaXMuY2xvc2UoKX0sX29uSXJvbkFjdGl2YXRlOmZ1bmN0aW9uKCl7dGhpcy5jbG9zZU9uQWN0aXZhdGUmJnRoaXMuY2xvc2UoKX0sX29wZW5lZENoYW5nZWQ6ZnVuY3Rpb24oYyxkKXtjPyh0aGlzLl9kcm9wZG93bkNvbnRlbnQ9dGhpcy5jb250ZW50RWxlbWVudCx0aGlzLmZpcmUoInBhcGVyLWRyb3Bkb3duLW9wZW4iKSk6bnVsbCE9ZCYmdGhpcy5maXJlKCJwYXBlci1kcm9wZG93bi1jbG9zZSIpfSxfZGlzYWJsZWRDaGFuZ2VkOmZ1bmN0aW9uKGMpe1BvbHltZXIuSXJvbkNvbnRyb2xTdGF0ZS5fZGlzYWJsZWRDaGFuZ2VkLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtjJiZ0aGlzLm9wZW5lZCYmCnRoaXMuY2xvc2UoKX0sX19vbklyb25PdmVybGF5Q2FuY2VsZWQ6ZnVuY3Rpb24oYyl7dmFyIGQ9dGhpcy4kLnRyaWdnZXI7LTE8UG9seW1lci5kb20oYy5kZXRhaWwpLnBhdGguaW5kZXhPZihkKSYmYy5wcmV2ZW50RGVmYXVsdCgpfX0pO09iamVjdC5rZXlzKGEpLmZvckVhY2goZnVuY3Rpb24oYyl7UG9seW1lci5QYXBlck1lbnVCdXR0b25bY109YVtjXX0pfSkoKTsKPC9zY3JpcHQ+CjwvZG9tLW1vZHVsZT4KCgoKCgoKCjxzY3JpcHQ+Ly9+fldFQlBBVEh+fi9pcm9uLWljb25zZXQtc3ZnL2lyb24taWNvbnNldC1zdmcuaHRtbC5qcwpQb2x5bWVyKHtpczoiaXJvbi1pY29uc2V0LXN2ZyIscHJvcGVydGllczp7bmFtZTp7dHlwZTpTdHJpbmcsb2JzZXJ2ZXI6Il9uYW1lQ2hhbmdlZCJ9LHNpemU6e3R5cGU6TnVtYmVyLHZhbHVlOjI0fSxydGxNaXJyb3Jpbmc6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sdXNlR2xvYmFsUnRsQXR0cmlidXRlOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9fSxjcmVhdGVkOmZ1bmN0aW9uKCl7dGhpcy5fbWV0YT1uZXcgUG9seW1lci5Jcm9uTWV0YSh7dHlwZToiaWNvbnNldCIsa2V5Om51bGwsdmFsdWU6bnVsbH0pfSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuc3R5bGUuZGlzcGxheT0ibm9uZSJ9LGdldEljb25OYW1lczpmdW5jdGlvbigpe3RoaXMuX2ljb25zPXRoaXMuX2NyZWF0ZUljb25NYXAoKTtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5faWNvbnMpLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5uYW1lKyI6IithfSx0aGlzKX0sYXBwbHlJY29uOmZ1bmN0aW9uKGEsYyl7dGhpcy5yZW1vdmVJY29uKGEpOwppZihjPXRoaXMuX2Nsb25lSWNvbihjLHRoaXMucnRsTWlycm9yaW5nJiZ0aGlzLl90YXJnZXRJc1JUTChhKSkpe3ZhciBkPVBvbHltZXIuZG9tKGEucm9vdHx8YSk7ZC5pbnNlcnRCZWZvcmUoYyxkLmNoaWxkTm9kZXNbMF0pO3JldHVybiBhLl9zdmdJY29uPWN9cmV0dXJuIG51bGx9LHJlbW92ZUljb246ZnVuY3Rpb24oYSl7YS5fc3ZnSWNvbiYmKFBvbHltZXIuZG9tKGEucm9vdHx8YSkucmVtb3ZlQ2hpbGQoYS5fc3ZnSWNvbiksYS5fc3ZnSWNvbj1udWxsKX0sX3RhcmdldElzUlRMOmZ1bmN0aW9uKGEpe251bGw9PXRoaXMuX190YXJnZXRJc1JUTCYmKHRoaXMudXNlR2xvYmFsUnRsQXR0cmlidXRlP3RoaXMuX190YXJnZXRJc1JUTD0icnRsIj09PShkb2N1bWVudC5ib2R5JiZkb2N1bWVudC5ib2R5Lmhhc0F0dHJpYnV0ZSgiZGlyIik/ZG9jdW1lbnQuYm9keTpkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpLmdldEF0dHJpYnV0ZSgiZGlyIik6KGEmJmEubm9kZVR5cGUhPT1Ob2RlLkVMRU1FTlRfTk9ERSYmCihhPWEuaG9zdCksdGhpcy5fX3RhcmdldElzUlRMPWEmJiJydGwiPT09d2luZG93LmdldENvbXB1dGVkU3R5bGUoYSkuZGlyZWN0aW9uKSk7cmV0dXJuIHRoaXMuX190YXJnZXRJc1JUTH0sX25hbWVDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5fbWV0YS52YWx1ZT1udWxsO3RoaXMuX21ldGEua2V5PXRoaXMubmFtZTt0aGlzLl9tZXRhLnZhbHVlPXRoaXM7dGhpcy5hc3luYyhmdW5jdGlvbigpe3RoaXMuZmlyZSgiaXJvbi1pY29uc2V0LWFkZGVkIix0aGlzLHtub2RlOndpbmRvd30pfSl9LF9jcmVhdGVJY29uTWFwOmZ1bmN0aW9uKCl7dmFyIGE9T2JqZWN0LmNyZWF0ZShudWxsKTtQb2x5bWVyLmRvbSh0aGlzKS5xdWVyeVNlbGVjdG9yQWxsKCJbaWRdIikuZm9yRWFjaChmdW5jdGlvbihjKXthW2MuaWRdPWN9KTtyZXR1cm4gYX0sX2Nsb25lSWNvbjpmdW5jdGlvbihhLGMpe3RoaXMuX2ljb25zPXRoaXMuX2ljb25zfHx0aGlzLl9jcmVhdGVJY29uTWFwKCk7cmV0dXJuIHRoaXMuX3ByZXBhcmVTdmdDbG9uZSh0aGlzLl9pY29uc1thXSwKdGhpcy5zaXplLGMpfSxfcHJlcGFyZVN2Z0Nsb25lOmZ1bmN0aW9uKGEsYyxkKXtpZihhKXthPWEuY2xvbmVOb2RlKCEwKTt2YXIgZj1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwic3ZnIik7Yz1hLmdldEF0dHJpYnV0ZSgidmlld0JveCIpfHwiMCAwICIrYysiICIrYzt2YXIgZz0icG9pbnRlci1ldmVudHM6IG5vbmU7IGRpc3BsYXk6IGJsb2NrOyB3aWR0aDogMTAwJTsgaGVpZ2h0OiAxMDAlOyI7ZCYmYS5oYXNBdHRyaWJ1dGUoIm1pcnJvci1pbi1ydGwiKSYmKGcrPSItd2Via2l0LXRyYW5zZm9ybTpzY2FsZSgtMSwxKTt0cmFuc2Zvcm06c2NhbGUoLTEsMSk7dHJhbnNmb3JtLW9yaWdpbjpjZW50ZXI7Iik7Zi5zZXRBdHRyaWJ1dGUoInZpZXdCb3giLGMpO2Yuc2V0QXR0cmlidXRlKCJwcmVzZXJ2ZUFzcGVjdFJhdGlvIiwieE1pZFlNaWQgbWVldCIpO2Yuc2V0QXR0cmlidXRlKCJmb2N1c2FibGUiLCJmYWxzZSIpO2Yuc3R5bGUuY3NzVGV4dD0KZztmLmFwcGVuZENoaWxkKGEpLnJlbW92ZUF0dHJpYnV0ZSgiaWQiKTtyZXR1cm4gZn1yZXR1cm4gbnVsbH19KTsKPC9zY3JpcHQ+CgoKPGlyb24taWNvbnNldC1zdmcgbmFtZT0icGFwZXItZHJvcGRvd24tbWVudSIgc2l6ZT0iMjQiPgo8c3ZnPjxkZWZzPgo8ZyBpZD0iYXJyb3ctZHJvcC1kb3duIj48cGF0aCBkPSJNNyAxMGw1IDUgNS01eiI+PC9wYXRoPjwvZz4KPC9kZWZzPjwvc3ZnPgo8L2lyb24taWNvbnNldC1zdmc+CgoKCjxkb20tbW9kdWxlIGlkPSJwYXBlci1kcm9wZG93bi1tZW51LXNoYXJlZC1zdHlsZXMiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsKCiAgICAgICAgLyogTk9URShjZGF0YSk6IEJvdGggdmFsdWVzIGFyZSBuZWVkZWQsIHNpbmNlIHNvbWUgcGhvbmVzIHJlcXVpcmUgdGhlCiAgICAgICAgICogdmFsdWUgdG8gYmUgYHRyYW5zcGFyZW50YC4KICAgICAgICAgKi8KICAgICAgICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHJnYmEoMCwwLDAsMCk7CiAgICAgICAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiB0cmFuc3BhcmVudDsKCiAgICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItaW5wdXQ6IHsKICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICAgICAgICBtYXgtd2lkdGg6IDEwMCU7CiAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIH07CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWRyb3Bkb3duLW1lbnU7CiAgICAgIH0KCiAgICAgIDpob3N0KFtkaXNhYmxlZF0pIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1kcm9wZG93bi1tZW51LWRpc2FibGVkOwogICAgICB9CgogICAgICA6aG9zdChbbm9pbmtdKSBwYXBlci1yaXBwbGUgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KCiAgICAgIDpob3N0KFtuby1sYWJlbC1mbG9hdF0pIHBhcGVyLXJpcHBsZSB7CiAgICAgICAgdG9wOiA4cHg7CiAgICAgIH0KCiAgICAgIHBhcGVyLXJpcHBsZSB7CiAgICAgICAgdG9wOiAxMnB4OwogICAgICAgIGxlZnQ6IDBweDsKICAgICAgICBib3R0b206IDhweDsKICAgICAgICByaWdodDogMHB4OwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1kcm9wZG93bi1tZW51LXJpcHBsZTsKICAgICAgfQoKICAgICAgcGFwZXItbWVudS1idXR0b24gewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBhZGRpbmc6IDA7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWRyb3Bkb3duLW1lbnUtYnV0dG9uOwogICAgICB9CgogICAgICBwYXBlci1pbnB1dCB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZHJvcGRvd24tbWVudS1pbnB1dDsKICAgICAgfQoKICAgICAgaXJvbi1pY29uIHsKICAgICAgICBjb2xvcjogdmFyKC0tZGlzYWJsZWQtdGV4dC1jb2xvcik7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWRyb3Bkb3duLW1lbnUtaWNvbjsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+CgoKCgo8ZG9tLW1vZHVsZSBpZD0icGFwZXItZHJvcGRvd24tbWVudSI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlIGluY2x1ZGU9InBhcGVyLWRyb3Bkb3duLW1lbnUtc2hhcmVkLXN0eWxlcyI+PC9zdHlsZT4KCiAgICAKICAgIDxzcGFuIHJvbGU9ImJ1dHRvbiI+PC9zcGFuPgogICAgPHBhcGVyLW1lbnUtYnV0dG9uIGlkPSJtZW51QnV0dG9uIiB2ZXJ0aWNhbC1hbGlnbj0iW1t2ZXJ0aWNhbEFsaWduXV0iIGhvcml6b250YWwtYWxpZ249IltbaG9yaXpvbnRhbEFsaWduXV0iIGR5bmFtaWMtYWxpZ249IltbZHluYW1pY0FsaWduXV0iIHZlcnRpY2FsLW9mZnNldD0iW1tfY29tcHV0ZU1lbnVWZXJ0aWNhbE9mZnNldChub0xhYmVsRmxvYXQsIHZlcnRpY2FsT2Zmc2V0KV1dIiBkaXNhYmxlZD0iW1tkaXNhYmxlZF1dIiBuby1hbmltYXRpb25zPSJbW25vQW5pbWF0aW9uc11dIiBvbi1pcm9uLXNlbGVjdD0iX29uSXJvblNlbGVjdCIgb24taXJvbi1kZXNlbGVjdD0iX29uSXJvbkRlc2VsZWN0IiBvcGVuZWQ9Int7b3BlbmVkfX0iIGNsb3NlLW9uLWFjdGl2YXRlIGFsbG93LW91dHNpZGUtc2Nyb2xsPSJbW2FsbG93T3V0c2lkZVNjcm9sbF1dIiByZXN0b3JlLWZvY3VzLW9uLWNsb3NlPSJbW3Jlc3RvcmVGb2N1c09uQ2xvc2VdXSI+CiAgICAgIAogICAgICA8ZGl2IGNsYXNzPSJkcm9wZG93bi10cmlnZ2VyIiBzbG90PSJkcm9wZG93bi10cmlnZ2VyIj4KICAgICAgICA8cGFwZXItcmlwcGxlPjwvcGFwZXItcmlwcGxlPgogICAgICAgIAogICAgICAgIDxwYXBlci1pbnB1dCB0eXBlPSJ0ZXh0IiBpbnZhbGlkPSJbW2ludmFsaWRdXSIgcmVhZG9ubHkgZGlzYWJsZWQ9IltbZGlzYWJsZWRdXSIgdmFsdWU9IltbdmFsdWVdXSIgcGxhY2Vob2xkZXI9IltbcGxhY2Vob2xkZXJdXSIgZXJyb3ItbWVzc2FnZT0iW1tlcnJvck1lc3NhZ2VdXSIgYWx3YXlzLWZsb2F0LWxhYmVsPSJbW2Fsd2F5c0Zsb2F0TGFiZWxdXSIgbm8tbGFiZWwtZmxvYXQ9Iltbbm9MYWJlbEZsb2F0XV0iIGxhYmVsPSJbW2xhYmVsXV0iPgogICAgICAgICAgCiAgICAgICAgICA8aXJvbi1pY29uIGljb249InBhcGVyLWRyb3Bkb3duLW1lbnU6YXJyb3ctZHJvcC1kb3duIiBzdWZmaXggc2xvdD0ic3VmZml4Ij48L2lyb24taWNvbj4KICAgICAgICA8L3BhcGVyLWlucHV0PgogICAgICA8L2Rpdj4KICAgICAgPHNsb3QgaWQ9ImNvbnRlbnQiIG5hbWU9ImRyb3Bkb3duLWNvbnRlbnQiIHNsb3Q9ImRyb3Bkb3duLWNvbnRlbnQiPjwvc2xvdD4KICAgIDwvcGFwZXItbWVudS1idXR0b24+CiAgPC90ZW1wbGF0ZT4KCiAgPHNjcmlwdD4vL35+V0VCUEFUSH5+L3BhcGVyLWRyb3Bkb3duLW1lbnUvcGFwZXItZHJvcGRvd24tbWVudS5odG1sLmpzCihmdW5jdGlvbigpe1BvbHltZXIoe2lzOiJwYXBlci1kcm9wZG93bi1tZW51IixiZWhhdmlvcnM6W1BvbHltZXIuSXJvbkJ1dHRvblN0YXRlLFBvbHltZXIuSXJvbkNvbnRyb2xTdGF0ZSxQb2x5bWVyLklyb25Gb3JtRWxlbWVudEJlaGF2aW9yLFBvbHltZXIuSXJvblZhbGlkYXRhYmxlQmVoYXZpb3JdLHByb3BlcnRpZXM6e3NlbGVjdGVkSXRlbUxhYmVsOnt0eXBlOlN0cmluZyxub3RpZnk6ITAscmVhZE9ubHk6ITB9LHNlbGVjdGVkSXRlbTp7dHlwZTpPYmplY3Qsbm90aWZ5OiEwLHJlYWRPbmx5OiEwfSx2YWx1ZTp7dHlwZTpTdHJpbmcsbm90aWZ5OiEwfSxsYWJlbDp7dHlwZTpTdHJpbmd9LHBsYWNlaG9sZGVyOnt0eXBlOlN0cmluZ30sZXJyb3JNZXNzYWdlOnt0eXBlOlN0cmluZ30sb3BlbmVkOnt0eXBlOkJvb2xlYW4sbm90aWZ5OiEwLHZhbHVlOiExLG9ic2VydmVyOiJfb3BlbmVkQ2hhbmdlZCJ9LGFsbG93T3V0c2lkZVNjcm9sbDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxub0xhYmVsRmxvYXQ6e3R5cGU6Qm9vbGVhbiwKdmFsdWU6ITEscmVmbGVjdFRvQXR0cmlidXRlOiEwfSxhbHdheXNGbG9hdExhYmVsOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LG5vQW5pbWF0aW9uczp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxob3Jpem9udGFsQWxpZ246e3R5cGU6U3RyaW5nLHZhbHVlOiJyaWdodCJ9LHZlcnRpY2FsQWxpZ246e3R5cGU6U3RyaW5nLHZhbHVlOiJ0b3AifSx2ZXJ0aWNhbE9mZnNldDpOdW1iZXIsZHluYW1pY0FsaWduOnt0eXBlOkJvb2xlYW59LHJlc3RvcmVGb2N1c09uQ2xvc2U6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMH19LGxpc3RlbmVyczp7dGFwOiJfb25UYXAifSxrZXlCaW5kaW5nczp7InVwIGRvd24iOiJvcGVuIixlc2M6ImNsb3NlIn0saG9zdEF0dHJpYnV0ZXM6e3JvbGU6ImNvbWJvYm94IiwiYXJpYS1hdXRvY29tcGxldGUiOiJub25lIiwiYXJpYS1oYXNwb3B1cCI6InRydWUifSxvYnNlcnZlcnM6WyJfc2VsZWN0ZWRJdGVtQ2hhbmdlZChzZWxlY3RlZEl0ZW0pIl0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt2YXIgYT0KdGhpcy5jb250ZW50RWxlbWVudDthJiZhLnNlbGVjdGVkSXRlbSYmdGhpcy5fc2V0U2VsZWN0ZWRJdGVtKGEuc2VsZWN0ZWRJdGVtKX0sZ2V0IGNvbnRlbnRFbGVtZW50KCl7Zm9yKHZhciBhPVBvbHltZXIuZG9tKHRoaXMuJC5jb250ZW50KS5nZXREaXN0cmlidXRlZE5vZGVzKCksYz0wLGQ9YS5sZW5ndGg7YzxkO2MrKylpZihhW2NdLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUpcmV0dXJuIGFbY119LG9wZW46ZnVuY3Rpb24oKXt0aGlzLiQubWVudUJ1dHRvbi5vcGVuKCl9LGNsb3NlOmZ1bmN0aW9uKCl7dGhpcy4kLm1lbnVCdXR0b24uY2xvc2UoKX0sX29uSXJvblNlbGVjdDpmdW5jdGlvbihhKXt0aGlzLl9zZXRTZWxlY3RlZEl0ZW0oYS5kZXRhaWwuaXRlbSl9LF9vbklyb25EZXNlbGVjdDpmdW5jdGlvbigpe3RoaXMuX3NldFNlbGVjdGVkSXRlbShudWxsKX0sX29uVGFwOmZ1bmN0aW9uKGEpe1BvbHltZXIuR2VzdHVyZXMuZmluZE9yaWdpbmFsVGFyZ2V0KGEpPT09dGhpcyYmCnRoaXMub3BlbigpfSxfc2VsZWN0ZWRJdGVtQ2hhbmdlZDpmdW5jdGlvbihhKXt0aGlzLnZhbHVlPWE9YT9hLmxhYmVsfHxhLmdldEF0dHJpYnV0ZSgibGFiZWwiKXx8YS50ZXh0Q29udGVudC50cmltKCk6IiI7dGhpcy5fc2V0U2VsZWN0ZWRJdGVtTGFiZWwoYSl9LF9jb21wdXRlTWVudVZlcnRpY2FsT2Zmc2V0OmZ1bmN0aW9uKGEsYyl7cmV0dXJuIGM/YzphPy00Ojh9LF9nZXRWYWxpZGl0eTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRpc2FibGVkfHwhdGhpcy5yZXF1aXJlZHx8dGhpcy5yZXF1aXJlZCYmISF0aGlzLnZhbHVlfSxfb3BlbmVkQ2hhbmdlZDpmdW5jdGlvbigpe3ZhciBhPXRoaXMub3BlbmVkPyJ0cnVlIjoiZmFsc2UiLGM9dGhpcy5jb250ZW50RWxlbWVudDtjJiZjLnNldEF0dHJpYnV0ZSgiYXJpYS1leHBhbmRlZCIsYSl9fSl9KSgpOwo8L3NjcmlwdD4KPC9kb20tbW9kdWxlPgoKCgoKCgoKPHNjcmlwdD4vL35+V0VCUEFUSH5+L2lyb24tc2VsZWN0b3IvaXJvbi1zZWxlY3Rpb24uaHRtbC5qcwpQb2x5bWVyLklyb25TZWxlY3Rpb249ZnVuY3Rpb24oYSl7dGhpcy5zZWxlY3Rpb249W107dGhpcy5zZWxlY3RDYWxsYmFjaz1hfTsKUG9seW1lci5Jcm9uU2VsZWN0aW9uLnByb3RvdHlwZT17Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubXVsdGk/dGhpcy5zZWxlY3Rpb24uc2xpY2UoKTp0aGlzLnNlbGVjdGlvblswXX0sY2xlYXI6ZnVuY3Rpb24oYSl7dGhpcy5zZWxlY3Rpb24uc2xpY2UoKS5mb3JFYWNoKGZ1bmN0aW9uKGMpeyghYXx8MD5hLmluZGV4T2YoYykpJiZ0aGlzLnNldEl0ZW1TZWxlY3RlZChjLCExKX0sdGhpcyl9LGlzU2VsZWN0ZWQ6ZnVuY3Rpb24oYSl7cmV0dXJuIDA8PXRoaXMuc2VsZWN0aW9uLmluZGV4T2YoYSl9LHNldEl0ZW1TZWxlY3RlZDpmdW5jdGlvbihhLGMpe2lmKG51bGwhPWEmJmMhPT10aGlzLmlzU2VsZWN0ZWQoYSkpe2lmKGMpdGhpcy5zZWxlY3Rpb24ucHVzaChhKTtlbHNle3ZhciBkPXRoaXMuc2VsZWN0aW9uLmluZGV4T2YoYSk7MDw9ZCYmdGhpcy5zZWxlY3Rpb24uc3BsaWNlKGQsMSl9dGhpcy5zZWxlY3RDYWxsYmFjayYmdGhpcy5zZWxlY3RDYWxsYmFjayhhLGMpfX0sc2VsZWN0OmZ1bmN0aW9uKGEpe3RoaXMubXVsdGk/CnRoaXMudG9nZ2xlKGEpOnRoaXMuZ2V0KCkhPT1hJiYodGhpcy5zZXRJdGVtU2VsZWN0ZWQodGhpcy5nZXQoKSwhMSksdGhpcy5zZXRJdGVtU2VsZWN0ZWQoYSwhMCkpfSx0b2dnbGU6ZnVuY3Rpb24oYSl7dGhpcy5zZXRJdGVtU2VsZWN0ZWQoYSwhdGhpcy5pc1NlbGVjdGVkKGEpKX19Owo8L3NjcmlwdD4KCgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vaXJvbi1zZWxlY3Rvci9pcm9uLXNlbGVjdGFibGUuaHRtbC5qcwpQb2x5bWVyLklyb25TZWxlY3RhYmxlQmVoYXZpb3I9e3Byb3BlcnRpZXM6e2F0dHJGb3JTZWxlY3RlZDp7dHlwZTpTdHJpbmcsdmFsdWU6bnVsbH0sc2VsZWN0ZWQ6e3R5cGU6U3RyaW5nLG5vdGlmeTohMH0sc2VsZWN0ZWRJdGVtOnt0eXBlOk9iamVjdCxyZWFkT25seTohMCxub3RpZnk6ITB9LGFjdGl2YXRlRXZlbnQ6e3R5cGU6U3RyaW5nLHZhbHVlOiJ0YXAiLG9ic2VydmVyOiJfYWN0aXZhdGVFdmVudENoYW5nZWQifSxzZWxlY3RhYmxlOlN0cmluZyxzZWxlY3RlZENsYXNzOnt0eXBlOlN0cmluZyx2YWx1ZToiaXJvbi1zZWxlY3RlZCJ9LHNlbGVjdGVkQXR0cmlidXRlOnt0eXBlOlN0cmluZyx2YWx1ZTpudWxsfSxmYWxsYmFja1NlbGVjdGlvbjp7dHlwZTpTdHJpbmcsdmFsdWU6bnVsbH0saXRlbXM6e3R5cGU6QXJyYXkscmVhZE9ubHk6ITAsbm90aWZ5OiEwLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuW119fSxfZXhjbHVkZWRMb2NhbE5hbWVzOnt0eXBlOk9iamVjdCx2YWx1ZTpmdW5jdGlvbigpe3JldHVybnt0ZW1wbGF0ZToxLAoiZG9tLWJpbmQiOjEsImRvbS1pZiI6MSwiZG9tLXJlcGVhdCI6MX19fX0sb2JzZXJ2ZXJzOlsiX3VwZGF0ZUF0dHJGb3JTZWxlY3RlZChhdHRyRm9yU2VsZWN0ZWQpIiwiX3VwZGF0ZVNlbGVjdGVkKHNlbGVjdGVkKSIsIl9jaGVja0ZhbGxiYWNrKGZhbGxiYWNrU2VsZWN0aW9uKSJdLGNyZWF0ZWQ6ZnVuY3Rpb24oKXt0aGlzLl9iaW5kRmlsdGVySXRlbT10aGlzLl9maWx0ZXJJdGVtLmJpbmQodGhpcyk7dGhpcy5fc2VsZWN0aW9uPW5ldyBQb2x5bWVyLklyb25TZWxlY3Rpb24odGhpcy5fYXBwbHlTZWxlY3Rpb24uYmluZCh0aGlzKSl9LGF0dGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fb2JzZXJ2ZXI9dGhpcy5fb2JzZXJ2ZUl0ZW1zKHRoaXMpO3RoaXMuX2FkZExpc3RlbmVyKHRoaXMuYWN0aXZhdGVFdmVudCl9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fb2JzZXJ2ZXImJlBvbHltZXIuZG9tKHRoaXMpLnVub2JzZXJ2ZU5vZGVzKHRoaXMuX29ic2VydmVyKTt0aGlzLl9yZW1vdmVMaXN0ZW5lcih0aGlzLmFjdGl2YXRlRXZlbnQpfSwKaW5kZXhPZjpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5pdGVtcz90aGlzLml0ZW1zLmluZGV4T2YoYSk6LTF9LHNlbGVjdDpmdW5jdGlvbihhKXt0aGlzLnNlbGVjdGVkPWF9LHNlbGVjdFByZXZpb3VzOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5pdGVtcy5sZW5ndGg7YT0oTnVtYmVyKHRoaXMuX3ZhbHVlVG9JbmRleCh0aGlzLnNlbGVjdGVkKSktMSthKSVhO3RoaXMuc2VsZWN0ZWQ9dGhpcy5faW5kZXhUb1ZhbHVlKGEpfSxzZWxlY3ROZXh0OmZ1bmN0aW9uKCl7dmFyIGE9KE51bWJlcih0aGlzLl92YWx1ZVRvSW5kZXgodGhpcy5zZWxlY3RlZCkpKzEpJXRoaXMuaXRlbXMubGVuZ3RoO3RoaXMuc2VsZWN0ZWQ9dGhpcy5faW5kZXhUb1ZhbHVlKGEpfSxzZWxlY3RJbmRleDpmdW5jdGlvbihhKXt0aGlzLnNlbGVjdCh0aGlzLl9pbmRleFRvVmFsdWUoYSkpfSxmb3JjZVN5bmNocm9ub3VzSXRlbVVwZGF0ZTpmdW5jdGlvbigpe3RoaXMuX29ic2VydmVyJiYiZnVuY3Rpb24iPT09dHlwZW9mIHRoaXMuX29ic2VydmVyLmZsdXNoPwp0aGlzLl9vYnNlcnZlci5mbHVzaCgpOnRoaXMuX3VwZGF0ZUl0ZW1zKCl9LGdldCBfc2hvdWxkVXBkYXRlU2VsZWN0aW9uKCl7cmV0dXJuIG51bGwhPXRoaXMuc2VsZWN0ZWR9LF9jaGVja0ZhbGxiYWNrOmZ1bmN0aW9uKCl7dGhpcy5fdXBkYXRlU2VsZWN0ZWQoKX0sX2FkZExpc3RlbmVyOmZ1bmN0aW9uKGEpe3RoaXMubGlzdGVuKHRoaXMsYSwiX2FjdGl2YXRlSGFuZGxlciIpfSxfcmVtb3ZlTGlzdGVuZXI6ZnVuY3Rpb24oYSl7dGhpcy51bmxpc3Rlbih0aGlzLGEsIl9hY3RpdmF0ZUhhbmRsZXIiKX0sX2FjdGl2YXRlRXZlbnRDaGFuZ2VkOmZ1bmN0aW9uKGEsYyl7dGhpcy5fcmVtb3ZlTGlzdGVuZXIoYyk7dGhpcy5fYWRkTGlzdGVuZXIoYSl9LF91cGRhdGVJdGVtczpmdW5jdGlvbigpe3ZhciBhPVBvbHltZXIuZG9tKHRoaXMpLnF1ZXJ5RGlzdHJpYnV0ZWRFbGVtZW50cyh0aGlzLnNlbGVjdGFibGV8fCIqIik7YT1BcnJheS5wcm90b3R5cGUuZmlsdGVyLmNhbGwoYSx0aGlzLl9iaW5kRmlsdGVySXRlbSk7CnRoaXMuX3NldEl0ZW1zKGEpfSxfdXBkYXRlQXR0ckZvclNlbGVjdGVkOmZ1bmN0aW9uKCl7dGhpcy5zZWxlY3RlZEl0ZW0mJih0aGlzLnNlbGVjdGVkPXRoaXMuX3ZhbHVlRm9ySXRlbSh0aGlzLnNlbGVjdGVkSXRlbSkpfSxfdXBkYXRlU2VsZWN0ZWQ6ZnVuY3Rpb24oKXt0aGlzLl9zZWxlY3RTZWxlY3RlZCh0aGlzLnNlbGVjdGVkKX0sX3NlbGVjdFNlbGVjdGVkOmZ1bmN0aW9uKCl7aWYodGhpcy5pdGVtcyl7dmFyIGE9dGhpcy5fdmFsdWVUb0l0ZW0odGhpcy5zZWxlY3RlZCk7YT90aGlzLl9zZWxlY3Rpb24uc2VsZWN0KGEpOnRoaXMuX3NlbGVjdGlvbi5jbGVhcigpO3RoaXMuZmFsbGJhY2tTZWxlY3Rpb24mJnRoaXMuaXRlbXMubGVuZ3RoJiZ2b2lkIDA9PT10aGlzLl9zZWxlY3Rpb24uZ2V0KCkmJih0aGlzLnNlbGVjdGVkPXRoaXMuZmFsbGJhY2tTZWxlY3Rpb24pfX0sX2ZpbHRlckl0ZW06ZnVuY3Rpb24oYSl7cmV0dXJuIXRoaXMuX2V4Y2x1ZGVkTG9jYWxOYW1lc1thLmxvY2FsTmFtZV19LApfdmFsdWVUb0l0ZW06ZnVuY3Rpb24oYSl7cmV0dXJuIG51bGw9PWE/bnVsbDp0aGlzLml0ZW1zW3RoaXMuX3ZhbHVlVG9JbmRleChhKV19LF92YWx1ZVRvSW5kZXg6ZnVuY3Rpb24oYSl7aWYodGhpcy5hdHRyRm9yU2VsZWN0ZWQpZm9yKHZhciBjPTAsZDtkPXRoaXMuaXRlbXNbY107YysrKXtpZih0aGlzLl92YWx1ZUZvckl0ZW0oZCk9PWEpcmV0dXJuIGN9ZWxzZSByZXR1cm4gTnVtYmVyKGEpfSxfaW5kZXhUb1ZhbHVlOmZ1bmN0aW9uKGEpe2lmKHRoaXMuYXR0ckZvclNlbGVjdGVkKXtpZihhPXRoaXMuaXRlbXNbYV0pcmV0dXJuIHRoaXMuX3ZhbHVlRm9ySXRlbShhKX1lbHNlIHJldHVybiBhfSxfdmFsdWVGb3JJdGVtOmZ1bmN0aW9uKGEpe2lmKCFhKXJldHVybiBudWxsO2lmKCF0aGlzLmF0dHJGb3JTZWxlY3RlZClyZXR1cm4gYT10aGlzLmluZGV4T2YoYSksLTE9PT1hP251bGw6YTt2YXIgYz1hW1BvbHltZXIuQ2FzZU1hcC5kYXNoVG9DYW1lbENhc2UodGhpcy5hdHRyRm9yU2VsZWN0ZWQpXTsKcmV0dXJuIHZvaWQgMCE9Yz9jOmEuZ2V0QXR0cmlidXRlKHRoaXMuYXR0ckZvclNlbGVjdGVkKX0sX2FwcGx5U2VsZWN0aW9uOmZ1bmN0aW9uKGEsYyl7dGhpcy5zZWxlY3RlZENsYXNzJiZ0aGlzLnRvZ2dsZUNsYXNzKHRoaXMuc2VsZWN0ZWRDbGFzcyxjLGEpO3RoaXMuc2VsZWN0ZWRBdHRyaWJ1dGUmJnRoaXMudG9nZ2xlQXR0cmlidXRlKHRoaXMuc2VsZWN0ZWRBdHRyaWJ1dGUsYyxhKTt0aGlzLl9zZWxlY3Rpb25DaGFuZ2UoKTt0aGlzLmZpcmUoImlyb24tIisoYz8ic2VsZWN0IjoiZGVzZWxlY3QiKSx7aXRlbTphfSl9LF9zZWxlY3Rpb25DaGFuZ2U6ZnVuY3Rpb24oKXt0aGlzLl9zZXRTZWxlY3RlZEl0ZW0odGhpcy5fc2VsZWN0aW9uLmdldCgpKX0sX29ic2VydmVJdGVtczpmdW5jdGlvbihhKXtyZXR1cm4gUG9seW1lci5kb20oYSkub2JzZXJ2ZU5vZGVzKGZ1bmN0aW9uKGMpe3RoaXMuX3VwZGF0ZUl0ZW1zKCk7dGhpcy5fdXBkYXRlU2VsZWN0ZWQoKTt0aGlzLmZpcmUoImlyb24taXRlbXMtY2hhbmdlZCIsCmMse2J1YmJsZXM6ITEsY2FuY2VsYWJsZTohMX0pfSl9LF9hY3RpdmF0ZUhhbmRsZXI6ZnVuY3Rpb24oYSl7YT1hLnRhcmdldDtmb3IodmFyIGM9dGhpcy5pdGVtczthJiZhIT10aGlzOyl7dmFyIGQ9Yy5pbmRleE9mKGEpO2lmKDA8PWQpe2M9dGhpcy5faW5kZXhUb1ZhbHVlKGQpO3RoaXMuX2l0ZW1BY3RpdmF0ZShjLGEpO2JyZWFrfWE9YS5wYXJlbnROb2RlfX0sX2l0ZW1BY3RpdmF0ZTpmdW5jdGlvbihhLGMpe3RoaXMuZmlyZSgiaXJvbi1hY3RpdmF0ZSIse3NlbGVjdGVkOmEsaXRlbTpjfSx7Y2FuY2VsYWJsZTohMH0pLmRlZmF1bHRQcmV2ZW50ZWR8fHRoaXMuc2VsZWN0KGEpfX07Cjwvc2NyaXB0PgoKCjxzY3JpcHQ+Ly9+fldFQlBBVEh+fi9pcm9uLXNlbGVjdG9yL2lyb24tbXVsdGktc2VsZWN0YWJsZS5odG1sLmpzClBvbHltZXIuSXJvbk11bHRpU2VsZWN0YWJsZUJlaGF2aW9ySW1wbD17cHJvcGVydGllczp7bXVsdGk6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxvYnNlcnZlcjoibXVsdGlDaGFuZ2VkIn0sc2VsZWN0ZWRWYWx1ZXM6e3R5cGU6QXJyYXksbm90aWZ5OiEwLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuW119fSxzZWxlY3RlZEl0ZW1zOnt0eXBlOkFycmF5LHJlYWRPbmx5OiEwLG5vdGlmeTohMCx2YWx1ZTpmdW5jdGlvbigpe3JldHVybltdfX19LG9ic2VydmVyczpbIl91cGRhdGVTZWxlY3RlZChzZWxlY3RlZFZhbHVlcy5zcGxpY2VzKSJdLHNlbGVjdDpmdW5jdGlvbihhKXt0aGlzLm11bHRpP3RoaXMuX3RvZ2dsZVNlbGVjdGVkKGEpOnRoaXMuc2VsZWN0ZWQ9YX0sbXVsdGlDaGFuZ2VkOmZ1bmN0aW9uKGEpe3RoaXMuX3NlbGVjdGlvbi5tdWx0aT1hO3RoaXMuX3VwZGF0ZVNlbGVjdGVkKCl9LGdldCBfc2hvdWxkVXBkYXRlU2VsZWN0aW9uKCl7cmV0dXJuIG51bGwhPXRoaXMuc2VsZWN0ZWR8fApudWxsIT10aGlzLnNlbGVjdGVkVmFsdWVzJiZ0aGlzLnNlbGVjdGVkVmFsdWVzLmxlbmd0aH0sX3VwZGF0ZUF0dHJGb3JTZWxlY3RlZDpmdW5jdGlvbigpe3RoaXMubXVsdGk/dGhpcy5zZWxlY3RlZEl0ZW1zJiYwPHRoaXMuc2VsZWN0ZWRJdGVtcy5sZW5ndGgmJih0aGlzLnNlbGVjdGVkVmFsdWVzPXRoaXMuc2VsZWN0ZWRJdGVtcy5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuX2luZGV4VG9WYWx1ZSh0aGlzLmluZGV4T2YoYSkpfSx0aGlzKS5maWx0ZXIoZnVuY3Rpb24oYSl7cmV0dXJuIG51bGwhPWF9LHRoaXMpKTpQb2x5bWVyLklyb25TZWxlY3RhYmxlQmVoYXZpb3IuX3VwZGF0ZUF0dHJGb3JTZWxlY3RlZC5hcHBseSh0aGlzKX0sX3VwZGF0ZVNlbGVjdGVkOmZ1bmN0aW9uKCl7dGhpcy5tdWx0aT90aGlzLl9zZWxlY3RNdWx0aSh0aGlzLnNlbGVjdGVkVmFsdWVzKTp0aGlzLl9zZWxlY3RTZWxlY3RlZCh0aGlzLnNlbGVjdGVkKX0sX3NlbGVjdE11bHRpOmZ1bmN0aW9uKGEpe2E9CmF8fFtdO2E9KHRoaXMuX3ZhbHVlc1RvSXRlbXMoYSl8fFtdKS5maWx0ZXIoZnVuY3Rpb24oZCl7cmV0dXJuIG51bGwhPT1kJiZ2b2lkIDAhPT1kfSk7dGhpcy5fc2VsZWN0aW9uLmNsZWFyKGEpO2Zvcih2YXIgYz0wO2M8YS5sZW5ndGg7YysrKXRoaXMuX3NlbGVjdGlvbi5zZXRJdGVtU2VsZWN0ZWQoYVtjXSwhMCk7dGhpcy5mYWxsYmFja1NlbGVjdGlvbiYmIXRoaXMuX3NlbGVjdGlvbi5nZXQoKS5sZW5ndGgmJnRoaXMuX3ZhbHVlVG9JdGVtKHRoaXMuZmFsbGJhY2tTZWxlY3Rpb24pJiZ0aGlzLnNlbGVjdCh0aGlzLmZhbGxiYWNrU2VsZWN0aW9uKX0sX3NlbGVjdGlvbkNoYW5nZTpmdW5jdGlvbigpe3ZhciBhPXRoaXMuX3NlbGVjdGlvbi5nZXQoKTt0aGlzLm11bHRpPyh0aGlzLl9zZXRTZWxlY3RlZEl0ZW1zKGEpLHRoaXMuX3NldFNlbGVjdGVkSXRlbShhLmxlbmd0aD9hWzBdOm51bGwpKTpudWxsIT09YSYmdm9pZCAwIT09YT8odGhpcy5fc2V0U2VsZWN0ZWRJdGVtcyhbYV0pLAp0aGlzLl9zZXRTZWxlY3RlZEl0ZW0oYSkpOih0aGlzLl9zZXRTZWxlY3RlZEl0ZW1zKFtdKSx0aGlzLl9zZXRTZWxlY3RlZEl0ZW0obnVsbCkpfSxfdG9nZ2xlU2VsZWN0ZWQ6ZnVuY3Rpb24oYSl7dmFyIGM9dGhpcy5zZWxlY3RlZFZhbHVlcy5pbmRleE9mKGEpOzA+Yz90aGlzLnB1c2goInNlbGVjdGVkVmFsdWVzIixhKTp0aGlzLnNwbGljZSgic2VsZWN0ZWRWYWx1ZXMiLGMsMSl9LF92YWx1ZXNUb0l0ZW1zOmZ1bmN0aW9uKGEpe3JldHVybiBudWxsPT1hP251bGw6YS5tYXAoZnVuY3Rpb24oYyl7cmV0dXJuIHRoaXMuX3ZhbHVlVG9JdGVtKGMpfSx0aGlzKX19O1BvbHltZXIuSXJvbk11bHRpU2VsZWN0YWJsZUJlaGF2aW9yPVtQb2x5bWVyLklyb25TZWxlY3RhYmxlQmVoYXZpb3IsUG9seW1lci5Jcm9uTXVsdGlTZWxlY3RhYmxlQmVoYXZpb3JJbXBsXTsKPC9zY3JpcHQ+CgoKCjxzY3JpcHQ+Ly9+fldFQlBBVEh+fi9pcm9uLW1lbnUtYmVoYXZpb3IvaXJvbi1tZW51LWJlaGF2aW9yLmh0bWwuanMKUG9seW1lci5Jcm9uTWVudUJlaGF2aW9ySW1wbD17cHJvcGVydGllczp7Zm9jdXNlZEl0ZW06e29ic2VydmVyOiJfZm9jdXNlZEl0ZW1DaGFuZ2VkIixyZWFkT25seTohMCx0eXBlOk9iamVjdH0sYXR0ckZvckl0ZW1UaXRsZTp7dHlwZTpTdHJpbmd9LGRpc2FibGVkOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEsb2JzZXJ2ZXI6Il9kaXNhYmxlZENoYW5nZWQifX0sX01PRElGSUVSX0tFWVM6IkFsdCBBbHRHcmFwaCBDYXBzTG9jayBDb250cm9sIEZuIEZuTG9jayBIeXBlciBNZXRhIE51bUxvY2sgT1MgU2Nyb2xsTG9jayBTaGlmdCBTdXBlciBTeW1ib2wgU3ltYm9sTG9jayIuc3BsaXQoIiAiKSxfU0VBUkNIX1JFU0VUX1RJTUVPVVRfTVM6MUUzLF9wcmV2aW91c1RhYkluZGV4OjAsaG9zdEF0dHJpYnV0ZXM6e3JvbGU6Im1lbnUifSxvYnNlcnZlcnM6WyJfdXBkYXRlTXVsdGlzZWxlY3RhYmxlKG11bHRpKSJdLGxpc3RlbmVyczp7Zm9jdXM6Il9vbkZvY3VzIixrZXlkb3duOiJfb25LZXlkb3duIiwKImlyb24taXRlbXMtY2hhbmdlZCI6Il9vbklyb25JdGVtc0NoYW5nZWQifSxrZXlCaW5kaW5nczp7dXA6Il9vblVwS2V5Iixkb3duOiJfb25Eb3duS2V5Iixlc2M6Il9vbkVzY0tleSIsInNoaWZ0K3RhYjprZXlkb3duIjoiX29uU2hpZnRUYWJEb3duIn0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl9yZXNldFRhYmluZGljZXMoKX0sc2VsZWN0OmZ1bmN0aW9uKGEpe3RoaXMuX2RlZmF1bHRGb2N1c0FzeW5jJiYodGhpcy5jYW5jZWxBc3luYyh0aGlzLl9kZWZhdWx0Rm9jdXNBc3luYyksdGhpcy5fZGVmYXVsdEZvY3VzQXN5bmM9bnVsbCk7dmFyIGM9dGhpcy5fdmFsdWVUb0l0ZW0oYSk7YyYmYy5oYXNBdHRyaWJ1dGUoImRpc2FibGVkIil8fCh0aGlzLl9zZXRGb2N1c2VkSXRlbShjKSxQb2x5bWVyLklyb25NdWx0aVNlbGVjdGFibGVCZWhhdmlvckltcGwuc2VsZWN0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9LF9yZXNldFRhYmluZGljZXM6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLm11bHRpPwp0aGlzLnNlbGVjdGVkSXRlbXMmJnRoaXMuc2VsZWN0ZWRJdGVtc1swXTp0aGlzLnNlbGVjdGVkSXRlbTt0aGlzLml0ZW1zLmZvckVhY2goZnVuY3Rpb24oYyl7Yy5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IixjPT09YT8iMCI6Ii0xIil9LHRoaXMpfSxfdXBkYXRlTXVsdGlzZWxlY3RhYmxlOmZ1bmN0aW9uKGEpe2E/dGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtbXVsdGlzZWxlY3RhYmxlIiwidHJ1ZSIpOnRoaXMucmVtb3ZlQXR0cmlidXRlKCJhcmlhLW11bHRpc2VsZWN0YWJsZSIpfSxfZm9jdXNXaXRoS2V5Ym9hcmRFdmVudDpmdW5jdGlvbihhKXtpZigtMT09PXRoaXMuX01PRElGSUVSX0tFWVMuaW5kZXhPZihhLmtleSkpe3RoaXMuY2FuY2VsRGVib3VuY2VyKCJfY2xlYXJTZWFyY2hUZXh0Iik7dmFyIGM9dGhpcy5fc2VhcmNoVGV4dHx8IiI7Yys9KGEua2V5JiYxPT1hLmtleS5sZW5ndGg/YS5rZXk6U3RyaW5nLmZyb21DaGFyQ29kZShhLmtleUNvZGUpKS50b0xvY2FsZUxvd2VyQ2FzZSgpOwphPWMubGVuZ3RoO2Zvcih2YXIgZD0wLGY7Zj10aGlzLml0ZW1zW2RdO2QrKylpZighZi5oYXNBdHRyaWJ1dGUoImRpc2FibGVkIikpe3ZhciBnPXRoaXMuYXR0ckZvckl0ZW1UaXRsZXx8InRleHRDb250ZW50IjtnPShmW2ddfHxmLmdldEF0dHJpYnV0ZShnKXx8IiIpLnRyaW0oKTtpZighKGcubGVuZ3RoPGEpJiZnLnNsaWNlKDAsYSkudG9Mb2NhbGVMb3dlckNhc2UoKT09Yyl7dGhpcy5fc2V0Rm9jdXNlZEl0ZW0oZik7YnJlYWt9fXRoaXMuX3NlYXJjaFRleHQ9Yzt0aGlzLmRlYm91bmNlKCJfY2xlYXJTZWFyY2hUZXh0Iix0aGlzLl9jbGVhclNlYXJjaFRleHQsdGhpcy5fU0VBUkNIX1JFU0VUX1RJTUVPVVRfTVMpfX0sX2NsZWFyU2VhcmNoVGV4dDpmdW5jdGlvbigpe3RoaXMuX3NlYXJjaFRleHQ9IiJ9LF9mb2N1c1ByZXZpb3VzOmZ1bmN0aW9uKCl7Zm9yKHZhciBhPXRoaXMuaXRlbXMubGVuZ3RoLGM9TnVtYmVyKHRoaXMuaW5kZXhPZih0aGlzLmZvY3VzZWRJdGVtKSksZD0xO2Q8CmErMTtkKyspe3ZhciBmPXRoaXMuaXRlbXNbKGMtZCthKSVhXTtpZighZi5oYXNBdHRyaWJ1dGUoImRpc2FibGVkIikpe3ZhciBnPVBvbHltZXIuZG9tKGYpLmdldE93bmVyUm9vdCgpfHxkb2N1bWVudDt0aGlzLl9zZXRGb2N1c2VkSXRlbShmKTtpZihQb2x5bWVyLmRvbShnKS5hY3RpdmVFbGVtZW50PT1mKWJyZWFrfX19LF9mb2N1c05leHQ6ZnVuY3Rpb24oKXtmb3IodmFyIGE9dGhpcy5pdGVtcy5sZW5ndGgsYz1OdW1iZXIodGhpcy5pbmRleE9mKHRoaXMuZm9jdXNlZEl0ZW0pKSxkPTE7ZDxhKzE7ZCsrKXt2YXIgZj10aGlzLml0ZW1zWyhjK2QpJWFdO2lmKCFmLmhhc0F0dHJpYnV0ZSgiZGlzYWJsZWQiKSl7dmFyIGc9UG9seW1lci5kb20oZikuZ2V0T3duZXJSb290KCl8fGRvY3VtZW50O3RoaXMuX3NldEZvY3VzZWRJdGVtKGYpO2lmKFBvbHltZXIuZG9tKGcpLmFjdGl2ZUVsZW1lbnQ9PWYpYnJlYWt9fX0sX2FwcGx5U2VsZWN0aW9uOmZ1bmN0aW9uKGEsYyl7Yz9hLnNldEF0dHJpYnV0ZSgiYXJpYS1zZWxlY3RlZCIsCiJ0cnVlIik6YS5yZW1vdmVBdHRyaWJ1dGUoImFyaWEtc2VsZWN0ZWQiKTtQb2x5bWVyLklyb25TZWxlY3RhYmxlQmVoYXZpb3IuX2FwcGx5U2VsZWN0aW9uLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sX2ZvY3VzZWRJdGVtQ2hhbmdlZDpmdW5jdGlvbihhLGMpe2MmJmMuc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsIi0xIik7IWF8fGEuaGFzQXR0cmlidXRlKCJkaXNhYmxlZCIpfHx0aGlzLmRpc2FibGVkfHwoYS5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IiwiMCIpLGEuZm9jdXMoKSl9LF9vbklyb25JdGVtc0NoYW5nZWQ6ZnVuY3Rpb24oYSl7YS5kZXRhaWwuYWRkZWROb2Rlcy5sZW5ndGgmJnRoaXMuX3Jlc2V0VGFiaW5kaWNlcygpfSxfb25TaGlmdFRhYkRvd246ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmdldEF0dHJpYnV0ZSgidGFiaW5kZXgiKTtQb2x5bWVyLklyb25NZW51QmVoYXZpb3JJbXBsLl9zaGlmdFRhYlByZXNzZWQ9ITA7dGhpcy5fc2V0Rm9jdXNlZEl0ZW0obnVsbCk7dGhpcy5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IiwKIi0xIik7dGhpcy5hc3luYyhmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsYSk7UG9seW1lci5Jcm9uTWVudUJlaGF2aW9ySW1wbC5fc2hpZnRUYWJQcmVzc2VkPSExfSwxKX0sX29uRm9jdXM6ZnVuY3Rpb24oYSl7IVBvbHltZXIuSXJvbk1lbnVCZWhhdmlvckltcGwuX3NoaWZ0VGFiUHJlc3NlZCYmKGE9UG9seW1lci5kb20oYSkucm9vdFRhcmdldCxhPT09dGhpc3x8InVuZGVmaW5lZCI9PT10eXBlb2YgYS50YWJJbmRleHx8dGhpcy5pc0xpZ2h0RGVzY2VuZGFudChhKSkmJih0aGlzLl9kZWZhdWx0Rm9jdXNBc3luYz10aGlzLmFzeW5jKGZ1bmN0aW9uKCl7dmFyIGM9dGhpcy5tdWx0aT90aGlzLnNlbGVjdGVkSXRlbXMmJnRoaXMuc2VsZWN0ZWRJdGVtc1swXTp0aGlzLnNlbGVjdGVkSXRlbTt0aGlzLl9zZXRGb2N1c2VkSXRlbShudWxsKTtjP3RoaXMuX3NldEZvY3VzZWRJdGVtKGMpOnRoaXMuaXRlbXNbMF0mJnRoaXMuX2ZvY3VzTmV4dCgpfSkpfSxfb25VcEtleTpmdW5jdGlvbihhKXt0aGlzLl9mb2N1c1ByZXZpb3VzKCk7CmEuZGV0YWlsLmtleWJvYXJkRXZlbnQucHJldmVudERlZmF1bHQoKX0sX29uRG93bktleTpmdW5jdGlvbihhKXt0aGlzLl9mb2N1c05leHQoKTthLmRldGFpbC5rZXlib2FyZEV2ZW50LnByZXZlbnREZWZhdWx0KCl9LF9vbkVzY0tleTpmdW5jdGlvbigpe3ZhciBhPXRoaXMuZm9jdXNlZEl0ZW07YSYmYS5ibHVyKCl9LF9vbktleWRvd246ZnVuY3Rpb24oYSl7dGhpcy5rZXlib2FyZEV2ZW50TWF0Y2hlc0tleXMoYSwidXAgZG93biBlc2MiKXx8dGhpcy5fZm9jdXNXaXRoS2V5Ym9hcmRFdmVudChhKTthLnN0b3BQcm9wYWdhdGlvbigpfSxfYWN0aXZhdGVIYW5kbGVyOmZ1bmN0aW9uKGEpe1BvbHltZXIuSXJvblNlbGVjdGFibGVCZWhhdmlvci5fYWN0aXZhdGVIYW5kbGVyLmNhbGwodGhpcyxhKTthLnN0b3BQcm9wYWdhdGlvbigpfSxfZGlzYWJsZWRDaGFuZ2VkOmZ1bmN0aW9uKGEpe2E/KHRoaXMuX3ByZXZpb3VzVGFiSW5kZXg9dGhpcy5oYXNBdHRyaWJ1dGUoInRhYmluZGV4Iik/dGhpcy50YWJJbmRleDoKMCx0aGlzLnJlbW92ZUF0dHJpYnV0ZSgidGFiaW5kZXgiKSk6dGhpcy5oYXNBdHRyaWJ1dGUoInRhYmluZGV4Iil8fHRoaXMuc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsdGhpcy5fcHJldmlvdXNUYWJJbmRleCl9fTtQb2x5bWVyLklyb25NZW51QmVoYXZpb3JJbXBsLl9zaGlmdFRhYlByZXNzZWQ9ITE7UG9seW1lci5Jcm9uTWVudUJlaGF2aW9yPVtQb2x5bWVyLklyb25NdWx0aVNlbGVjdGFibGVCZWhhdmlvcixQb2x5bWVyLklyb25BMTF5S2V5c0JlaGF2aW9yLFBvbHltZXIuSXJvbk1lbnVCZWhhdmlvckltcGxdOwo8L3NjcmlwdD4KCgoKCgo8ZG9tLW1vZHVsZSBpZD0icGFwZXItbGlzdGJveCI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcGFkZGluZzogOHB4IDA7CgogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXBhcGVyLWxpc3Rib3gtYmFja2dyb3VuZC1jb2xvciwgdmFyKC0tcHJpbWFyeS1iYWNrZ3JvdW5kLWNvbG9yKSk7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWxpc3Rib3gtY29sb3IsIHZhcigtLXByaW1hcnktdGV4dC1jb2xvcikpOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1saXN0Ym94OwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxzbG90Pjwvc2xvdD4KICA8L3RlbXBsYXRlPgoKICA8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vcGFwZXItbGlzdGJveC9wYXBlci1saXN0Ym94Lmh0bWwuanMKKGZ1bmN0aW9uKCl7UG9seW1lcih7aXM6InBhcGVyLWxpc3Rib3giLGJlaGF2aW9yczpbUG9seW1lci5Jcm9uTWVudUJlaGF2aW9yXSxob3N0QXR0cmlidXRlczp7cm9sZToibGlzdGJveCJ9fSl9KSgpOwo8L3NjcmlwdD4KPC9kb20tbW9kdWxlPgoKCgoKCgoKCgoKPHNjcmlwdD4vL35+V0VCUEFUSH5+L3BhcGVyLWl0ZW0vcGFwZXItaXRlbS1iZWhhdmlvci5odG1sLmpzClBvbHltZXIuUGFwZXJJdGVtQmVoYXZpb3JJbXBsPXtob3N0QXR0cmlidXRlczp7cm9sZToib3B0aW9uIix0YWJpbmRleDoiMCJ9fTtQb2x5bWVyLlBhcGVySXRlbUJlaGF2aW9yPVtQb2x5bWVyLklyb25CdXR0b25TdGF0ZSxQb2x5bWVyLklyb25Db250cm9sU3RhdGUsUG9seW1lci5QYXBlckl0ZW1CZWhhdmlvckltcGxdOwo8L3NjcmlwdD4KCgoKCgoKPGRvbS1tb2R1bGUgaWQ9InBhcGVyLWl0ZW0tc2hhcmVkLXN0eWxlcyI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICA6aG9zdCwgLnBhcGVyLWl0ZW0gewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBtaW4taGVpZ2h0OiB2YXIoLS1wYXBlci1pdGVtLW1pbi1oZWlnaHQsIDQ4cHgpOwogICAgICAgIHBhZGRpbmc6IDBweCAxNnB4OwogICAgICB9CgogICAgICAucGFwZXItaXRlbSB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1zdWJoZWFkOwogICAgICAgIGJvcmRlcjpub25lOwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgYmFja2dyb3VuZDogd2hpdGU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsKICAgICAgfQoKICAgICAgOmhvc3QoW2hpZGRlbl0pLCAucGFwZXItaXRlbVtoaWRkZW5dIHsKICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICAgIH0KCiAgICAgIDpob3N0KC5pcm9uLXNlbGVjdGVkKSwgLnBhcGVyLWl0ZW0uaXJvbi1zZWxlY3RlZCB7CiAgICAgICAgZm9udC13ZWlnaHQ6IHZhcigtLXBhcGVyLWl0ZW0tc2VsZWN0ZWQtd2VpZ2h0LCBib2xkKTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItaXRlbS1zZWxlY3RlZDsKICAgICAgfQoKICAgICAgOmhvc3QoW2Rpc2FibGVkXSksIC5wYXBlci1pdGVtW2Rpc2FibGVkXSB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWl0ZW0tZGlzYWJsZWQtY29sb3IsIHZhcigtLWRpc2FibGVkLXRleHQtY29sb3IpKTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItaXRlbS1kaXNhYmxlZDsKICAgICAgfQoKICAgICAgOmhvc3QoOmZvY3VzKSwgLnBhcGVyLWl0ZW06Zm9jdXMgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBvdXRsaW5lOiAwOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1pdGVtLWZvY3VzZWQ7CiAgICAgIH0KCiAgICAgIDpob3N0KDpmb2N1cyk6YmVmb3JlLCAucGFwZXItaXRlbTpmb2N1czpiZWZvcmUgewogICAgICAgIEBhcHBseSAtLWxheW91dC1maXQ7CgogICAgICAgIGJhY2tncm91bmQ6IGN1cnJlbnRDb2xvcjsKICAgICAgICBjb250ZW50OiAnJzsKICAgICAgICBvcGFjaXR5OiB2YXIoLS1kYXJrLWRpdmlkZXItb3BhY2l0eSk7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWl0ZW0tZm9jdXNlZC1iZWZvcmU7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPgoKCgoKPGRvbS1tb2R1bGUgaWQ9InBhcGVyLWl0ZW0iPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZSBpbmNsdWRlPSJwYXBlci1pdGVtLXNoYXJlZC1zdHlsZXMiPgogICAgICA6aG9zdCB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWhvcml6b250YWw7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWNlbnRlcjsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LXN1YmhlYWQ7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWl0ZW07CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8c2xvdD48L3Nsb3Q+CiAgPC90ZW1wbGF0ZT4KCiAgPHNjcmlwdD4vL35+V0VCUEFUSH5+L3BhcGVyLWl0ZW0vcGFwZXItaXRlbS5odG1sLmpzClBvbHltZXIoe2lzOiJwYXBlci1pdGVtIixiZWhhdmlvcnM6W1BvbHltZXIuUGFwZXJJdGVtQmVoYXZpb3JdfSk7Cjwvc2NyaXB0Pgo8L2RvbS1tb2R1bGU+CgoKCgoKPHNjcmlwdD4vL35+V0VCUEFUSH5+L3Z6LXNvcnRpbmcvc29ydGluZy5qcwp2YXIgT2s7CihmdW5jdGlvbihhKXtmdW5jdGlvbiBjKGcsbCl7bGV0IGs7KGZ1bmN0aW9uKHApe3BbcC5OQVRVUkFMPTBdPSJOQVRVUkFMIjtwW3AuUkVBTD0xXT0iUkVBTCI7cFtwLkVYUE9ORU5UX1NJR049Ml09IkVYUE9ORU5UX1NJR04iO3BbcC5FWFBPTkVOVD0zXT0iRVhQT05FTlQifSkoa3x8KGs9e30pKTtsZXQgbT1rLk5BVFVSQUw7Zm9yKDtsPGcubGVuZ3RoO2wrKylpZihtPT09ay5OQVRVUkFMKWlmKCIuIj09PWdbbF0pbT1rLlJFQUw7ZWxzZSBpZigiZSI9PT1nW2xdfHwiRSI9PT1nW2xdKW09ay5FWFBPTkVOVF9TSUdOO2Vsc2V7aWYoIWQoZ1tsXSkpYnJlYWt9ZWxzZSBpZihtPT09ay5SRUFMKWlmKCJlIj09PWdbbF18fCJFIj09PWdbbF0pbT1rLkVYUE9ORU5UX1NJR047ZWxzZXtpZighZChnW2xdKSlicmVha31lbHNlIGlmKG09PT1rLkVYUE9ORU5UX1NJR04paWYoZChnW2xdKXx8IisiPT09Z1tsXXx8Ii0iPT09Z1tsXSltPWsuRVhQT05FTlQ7ZWxzZSBicmVhaztlbHNlIGlmKG09PT1rLkVYUE9ORU5UJiYKIWQoZ1tsXSkpYnJlYWs7cmV0dXJuIGx9ZnVuY3Rpb24gZChnKXtyZXR1cm4iMCI8PWcmJiI5Ij49Z31mdW5jdGlvbiBmKGcpe3JldHVybiIvIj09PWd8fCJfIj09PWd8fGQoZyl9YS5jb21wYXJlVGFnTmFtZXM9ZnVuY3Rpb24oZyxsKXtsZXQgaz0wLG09MDtmb3IoOzspe2lmKGs9PT1nLmxlbmd0aClyZXR1cm4gbT09PWwubGVuZ3RoPzA6LTE7aWYobT09PWwubGVuZ3RoKXJldHVybiAxO2lmKGQoZ1trXSkmJmQobFttXSkpe3ZhciBwPWsscT1tO2s9YyhnLGsrMSk7bT1jKGwsbSsxKTtwPXBhcnNlRmxvYXQoZy5zbGljZShwLGspKTtxPXBhcnNlRmxvYXQobC5zbGljZShxLG0pKTtpZihwPHEpcmV0dXJuLTE7aWYocD5xKXJldHVybiAxfWVsc2V7aWYoZihnW2tdKSl7aWYoIWYobFttXSkpcmV0dXJuLTF9ZWxzZXtpZihmKGxbbV0pKXJldHVybiAxO2lmKGdba108bFttXSlyZXR1cm4tMTtpZihnW2tdPmxbbV0pcmV0dXJuIDF9aysrO20rK319fX0pKE9rfHwoT2s9e30pKTsKPC9zY3JpcHQ+CgoKPHNjcmlwdD4vL35+V0VCUEFUSH5+L3RmLWJhY2tlbmQvcmVxdWVzdE1hbmFnZXIuanMKdmFyIFBrOwooZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYyhyLHQsdixBKXtjb25zdCB5PW5ldyBYTUxIdHRwUmVxdWVzdDt5Lm9wZW4ocix0KTt2JiYoeS53aXRoQ3JlZGVudGlhbHM9dik7QSYmeS5zZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LVR5cGUiLEEpO3JldHVybiB5fWZ1bmN0aW9uIGQocil7Y29uc3QgdD1uZXcgcDtpZighcilyZXR1cm4gdC5tZXRob2RUeXBlPW0uR0VULHQ7dC5tZXRob2RUeXBlPW0uUE9TVDt0LmJvZHk9ZihyKTtyZXR1cm4gdH1mdW5jdGlvbiBmKHIpe2NvbnN0IHQ9bmV3IEZvcm1EYXRhO2ZvcihsZXQgdiBpbiByKXYmJnQuYXBwZW5kKHYsclt2XSk7cmV0dXJuIHR9Y2xhc3MgZyBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKTt0aGlzLm5hbWU9IlJlcXVlc3RDYW5jZWxsYXRpb25FcnJvciJ9fWEuUmVxdWVzdENhbmNlbGxhdGlvbkVycm9yPWc7Y2xhc3MgbCBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKHIpe3N1cGVyKHIpO3RoaXMubmFtZT0KIkludmFsaWRSZXF1ZXN0T3B0aW9uc0Vycm9yIjtPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcyxsLnByb3RvdHlwZSl9fWEuSW52YWxpZFJlcXVlc3RPcHRpb25zRXJyb3I9bDtjbGFzcyBrIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3Iocix0KXtzdXBlcigpO3RoaXMubWVzc2FnZT1gUmVxdWVzdE5ldHdvcmtFcnJvcjogJHtyLnN0YXR1c30gYXQgJHt0fWA7dGhpcy5uYW1lPSJSZXF1ZXN0TmV0d29ya0Vycm9yIjt0aGlzLnJlcT1yO3RoaXMudXJsPXR9fWEuUmVxdWVzdE5ldHdvcmtFcnJvcj1rO2xldCBtOyhmdW5jdGlvbihyKXtyLkdFVD0iR0VUIjtyLlBPU1Q9IlBPU1QifSkobT1hLkh0dHBNZXRob2RUeXBlfHwoYS5IdHRwTWV0aG9kVHlwZT17fSkpO2NsYXNzIHB7dmFsaWRhdGUoKXtpZih0aGlzLm1ldGhvZFR5cGU9PT1tLkdFVCYmdGhpcy5ib2R5KXRocm93IG5ldyBsKCJib2R5IG11c3QgYmUgbWlzc2luZyBmb3IgYSBHRVQgcmVxdWVzdC4iKTt9fWEuUmVxdWVzdE9wdGlvbnM9CnA7Y2xhc3MgcXtjb25zdHJ1Y3RvcihyPTEwLHQ9Myl7dGhpcy5fcXVldWU9W107dGhpcy5fbkFjdGl2ZVJlcXVlc3RzPTA7dGhpcy5fblNpbXVsdGFuZW91c1JlcXVlc3RzPXI7dGhpcy5fbWF4UmV0cmllcz10fXJlcXVlc3Qocix0KXt0PWQodCk7cmV0dXJuIHRoaXMucmVxdWVzdFdpdGhPcHRpb25zKHIsdCl9cmVxdWVzdFdpdGhPcHRpb25zKHIsdCl7dC52YWxpZGF0ZSgpO3JldHVybihuZXcgUHJvbWlzZSgodixBKT0+e3RoaXMuX3F1ZXVlLnB1c2goe3Jlc29sdmU6dixyZWplY3Q6QX0pO3RoaXMubGF1bmNoUmVxdWVzdHMoKX0pKS50aGVuKCgpPT50aGlzLnByb21pc2VXaXRoUmV0cmllcyhyLHRoaXMuX21heFJldHJpZXMsdCkpLnRoZW4odj0+e3RoaXMuX25BY3RpdmVSZXF1ZXN0cy0tO3RoaXMubGF1bmNoUmVxdWVzdHMoKTtyZXR1cm4gdn0sdj0+eyJSZXF1ZXN0TmV0d29ya0Vycm9yIj09PXYubmFtZSYmKHRoaXMuX25BY3RpdmVSZXF1ZXN0cy0tLHRoaXMubGF1bmNoUmVxdWVzdHMoKSk7CnJldHVybiBQcm9taXNlLnJlamVjdCh2KX0pfWZldGNoKHIsdCl7cmV0dXJuKG5ldyBQcm9taXNlKCh2LEEpPT57dGhpcy5fcXVldWUucHVzaCh7cmVzb2x2ZTp2LHJlamVjdDpBfSk7dGhpcy5sYXVuY2hSZXF1ZXN0cygpfSkpLnRoZW4oKCk9PntsZXQgdj0xO3JldHVybiBuZXcgUHJvbWlzZShBPT57Y29uc3QgeT0oKT0+e2ZldGNoKHIsdCkudGhlbih4PT57IXgub2smJnRoaXMuX21heFJldHJpZXM+dj8odisrLHkoKSk6KEEoeCksdGhpcy5fbkFjdGl2ZVJlcXVlc3RzLS0sdGhpcy5sYXVuY2hSZXF1ZXN0cygpKX0pfTt5KCl9KX0pfWNsZWFyUXVldWUoKXtmb3IoOzA8dGhpcy5fcXVldWUubGVuZ3RoOyl0aGlzLl9xdWV1ZS5wb3AoKS5yZWplY3QobmV3IGcoIlJlcXVlc3QgY2FuY2VsbGVkIGJ5IGNsZWFyUXVldWUiKSl9YWN0aXZlUmVxdWVzdHMoKXtyZXR1cm4gdGhpcy5fbkFjdGl2ZVJlcXVlc3RzfW91dHN0YW5kaW5nUmVxdWVzdHMoKXtyZXR1cm4gdGhpcy5fbkFjdGl2ZVJlcXVlc3RzKwp0aGlzLl9xdWV1ZS5sZW5ndGh9bGF1bmNoUmVxdWVzdHMoKXtmb3IoO3RoaXMuX25BY3RpdmVSZXF1ZXN0czx0aGlzLl9uU2ltdWx0YW5lb3VzUmVxdWVzdHMmJjA8dGhpcy5fcXVldWUubGVuZ3RoOyl0aGlzLl9uQWN0aXZlUmVxdWVzdHMrKyx0aGlzLl9xdWV1ZS5wb3AoKS5yZXNvbHZlKCl9cHJvbWlzZVdpdGhSZXRyaWVzKHIsdCx2KXtyZXR1cm4gdGhpcy5fcHJvbWlzZUZyb21Vcmwocix2KS50aGVuKEE9PkEsQT0+MDx0P3RoaXMucHJvbWlzZVdpdGhSZXRyaWVzKHIsdC0xLHYpOlByb21pc2UucmVqZWN0KEEpKX1fcHJvbWlzZUZyb21Vcmwocix0KXtyZXR1cm4gbmV3IFByb21pc2UoKHYsQSk9Pntjb25zdCB5PWModC5tZXRob2RUeXBlLHIsdC53aXRoQ3JlZGVudGlhbHMsdC5jb250ZW50VHlwZSk7eS5vbmxvYWQ9ZnVuY3Rpb24oKXsyMDA9PT15LnN0YXR1cz92KEpTT04ucGFyc2UoeS5yZXNwb25zZVRleHQpKTpBKG5ldyBrKHkscikpfTt5Lm9uZXJyb3I9ZnVuY3Rpb24oKXtBKG5ldyBrKHksCnIpKX07dC5ib2R5P3kuc2VuZCh0LmJvZHkpOnkuc2VuZCgpfSl9fWEuUmVxdWVzdE1hbmFnZXI9cX0pKFBrfHwoUGs9e30pKTsKPC9zY3JpcHQ+CjxzY3JpcHQ+Ly9+fldFQlBBVEh+fi90Zi1iYWNrZW5kL3VybFBhdGhIZWxwZXJzLmpzCihmdW5jdGlvbihhKXtmdW5jdGlvbiBjKGQpe3JldHVybiBlbmNvZGVVUklDb21wb25lbnQoZCkucmVwbGFjZSgvXCgvZywiJTI4IikucmVwbGFjZSgvXCkvZywiJTI5Iil9YS5hZGRQYXJhbXM9ZnVuY3Rpb24oZCxmKXt2YXIgZz1PYmplY3Qua2V5cyhmKS5zb3J0KCkuZmlsdGVyKGs9PnZvaWQgMCE9PWZba10pO2lmKCFnLmxlbmd0aClyZXR1cm4gZDtjb25zdCBsPS0xIT09ZC5pbmRleE9mKCI/Iik/Ilx4MjYiOiI/IjtnPVtdLmNvbmNhdCguLi5nLm1hcChrPT57Y29uc3QgbT1mW2tdO3JldHVybihBcnJheS5pc0FycmF5KG0pP206W21dKS5tYXAocD0+YCR7a309JHtjKHApfWApfSkpLmpvaW4oIlx4MjYiKTtyZXR1cm4gZCtsK2d9fSkoUGt8fChQaz17fSkpOwo8L3NjcmlwdD4KPHNjcmlwdD4vL35+V0VCUEFUSH5+L3RmLWJhY2tlbmQvcm91dGVyLmpzCihmdW5jdGlvbihhKXtmdW5jdGlvbiBjKGw9ImRhdGEiKXsiLyI9PT1sW2wubGVuZ3RoLTFdJiYobD1sLnNsaWNlKDAsbC5sZW5ndGgtMSkpO3JldHVybntlbnZpcm9ubWVudDooKT0+ZChsLCIvZW52aXJvbm1lbnQiKSxleHBlcmltZW50czooKT0+ZChsLCIvZXhwZXJpbWVudHMiKSxwbHVnaW5Sb3V0ZTooayxtLHApPT5kKGwrIi9wbHVnaW4iLGAvJHtrfSR7bX1gLHApLHBsdWdpbnNMaXN0aW5nOigpPT5kKGwsIi9wbHVnaW5zX2xpc3RpbmciKSxydW5zOms9Pntjb25zdCBtPW5ldyBVUkxTZWFyY2hQYXJhbXM7bS5zZXQoImV4cGVyaW1lbnQiLGt8fCIiKTtyZXR1cm4gZChsLCIvcnVucyIsbSl9LHJ1bnNGb3JFeHBlcmltZW50Oms9PmQobCwiL2V4cGVyaW1lbnRfcnVucyIsZih7ZXhwZXJpbWVudDpTdHJpbmcoayl9KSl9fWZ1bmN0aW9uIGQobCxrLG09bmV3IFVSTFNlYXJjaFBhcmFtcyl7bCs9aztTdHJpbmcobSkmJihrPWsuaW5jbHVkZXMoIj8iKT8iXHgyNiI6Ij8iLGwrPWsrU3RyaW5nKG0pKTsKcmV0dXJuIGx9ZnVuY3Rpb24gZihsPXt9KXtjb25zdCBrPU9iamVjdC5rZXlzKGwpLnNvcnQoKS5maWx0ZXIocD0+bFtwXSksbT1uZXcgVVJMU2VhcmNoUGFyYW1zO2suZm9yRWFjaChwPT57Y29uc3QgcT1sW3BdOyhBcnJheS5pc0FycmF5KHEpP3E6W3FdKS5mb3JFYWNoKHI9Pm0uYXBwZW5kKHAscikpfSk7cmV0dXJuIG19bGV0IGc9YygpO2EuY3JlYXRlUm91dGVyPWM7YS5nZXRSb3V0ZXI9ZnVuY3Rpb24oKXtyZXR1cm4gZ307YS5nZXRFeHBlcmltZW50SWQ9ZnVuY3Rpb24oKXtyZXR1cm4obmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKSkuZ2V0KCJleHBlcmltZW50Iil8fCIifTthLnNldFJvdXRlcj1mdW5jdGlvbihsKXtpZihudWxsPT1sKXRocm93IEVycm9yKCJSb3V0ZXIgcmVxdWlyZWQsIGJ1dCBnb3Q6ICIrbCk7Zz1sfTthLmNyZWF0ZVNlYXJjaFBhcmFtPWZ9KShQa3x8KFBrPXt9KSk7Cjwvc2NyaXB0Pgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdGYtYmFja2VuZC9iYXNlU3RvcmUuanMKKGZ1bmN0aW9uKGEpe2NsYXNzIGN7Y29uc3RydWN0b3IoZil7dGhpcy5saXN0ZW5lcj1mfX1hLkxpc3RlbktleT1jO2NsYXNzIGR7Y29uc3RydWN0b3IoKXt0aGlzLnJlcXVlc3RNYW5hZ2VyPW5ldyBhLlJlcXVlc3RNYW5hZ2VyKDEpO3RoaXMuX2xpc3RlbmVycz1uZXcgU2V0O3RoaXMuaW5pdGlhbGl6ZWQ9ITF9cmVmcmVzaCgpe3JldHVybiB0aGlzLmxvYWQoKS50aGVuKCgpPT57dGhpcy5pbml0aWFsaXplZD0hMH0pfWFkZExpc3RlbmVyKGYpe2Y9bmV3IGMoZik7dGhpcy5fbGlzdGVuZXJzLmFkZChmKTtyZXR1cm4gZn1yZW1vdmVMaXN0ZW5lckJ5S2V5KGYpe3RoaXMuX2xpc3RlbmVycy5kZWxldGUoZil9ZW1pdENoYW5nZSgpe3RoaXMuX2xpc3RlbmVycy5mb3JFYWNoKGY9Pnt0cnl7Zi5saXN0ZW5lcigpfWNhdGNoKGcpe319KX19YS5CYXNlU3RvcmU9ZH0pKFBrfHwoUGs9e30pKTsKPC9zY3JpcHQ+CjxzY3JpcHQ+Ly9+fldFQlBBVEh+fi90Zi1iYWNrZW5kL2Vudmlyb25tZW50U3RvcmUuanMKKGZ1bmN0aW9uKGEpe2NsYXNzIGMgZXh0ZW5kcyBhLkJhc2VTdG9yZXtsb2FkKCl7Y29uc3QgZD1hLmdldFJvdXRlcigpLmVudmlyb25tZW50KCk7cmV0dXJuIHRoaXMucmVxdWVzdE1hbmFnZXIucmVxdWVzdChkKS50aGVuKGY9PntmPXtkYXRhTG9jYXRpb246Zi5kYXRhX2xvY2F0aW9uLHdpbmRvd1RpdGxlOmYud2luZG93X3RpdGxlfTtfLmlzRXF1YWwodGhpcy5lbnZpcm9ubWVudCxmKXx8KHRoaXMuZW52aXJvbm1lbnQ9Zix0aGlzLmVtaXRDaGFuZ2UoKSl9KX1nZXREYXRhTG9jYXRpb24oKXtyZXR1cm4gdGhpcy5lbnZpcm9ubWVudD90aGlzLmVudmlyb25tZW50LmRhdGFMb2NhdGlvbjoiIn1nZXRXaW5kb3dUaXRsZSgpe3JldHVybiB0aGlzLmVudmlyb25tZW50P3RoaXMuZW52aXJvbm1lbnQud2luZG93VGl0bGU6IiJ9fWEuRW52aXJvbm1lbnRTdG9yZT1jO2EuZW52aXJvbm1lbnRTdG9yZT1uZXcgY30pKFBrfHwoUGs9e30pKTsKPC9zY3JpcHQ+CjxzY3JpcHQ+Ly9+fldFQlBBVEh+fi90Zi1iYWNrZW5kL2V4cGVyaW1lbnRzU3RvcmUuanMKKGZ1bmN0aW9uKGEpe2NsYXNzIGMgZXh0ZW5kcyBhLkJhc2VTdG9yZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyk7dGhpcy5fZXhwZXJpbWVudHM9W119bG9hZCgpe2NvbnN0IGQ9YS5nZXRSb3V0ZXIoKS5leHBlcmltZW50cygpO3JldHVybiB0aGlzLnJlcXVlc3RNYW5hZ2VyLnJlcXVlc3QoZCkudGhlbihmPT57Xy5pc0VxdWFsKHRoaXMuX2V4cGVyaW1lbnRzLGYpfHwodGhpcy5fZXhwZXJpbWVudHM9Zix0aGlzLmVtaXRDaGFuZ2UoKSl9KX1nZXRFeHBlcmltZW50cygpe3JldHVybiB0aGlzLl9leHBlcmltZW50cy5zbGljZSgpfX1hLkV4cGVyaW1lbnRzU3RvcmU9YzthLmV4cGVyaW1lbnRzU3RvcmU9bmV3IGN9KShQa3x8KFBrPXt9KSk7Cjwvc2NyaXB0Pgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdGYtYmFja2VuZC9ydW5zU3RvcmUuanMKKGZ1bmN0aW9uKGEpe2NsYXNzIGMgZXh0ZW5kcyBhLkJhc2VTdG9yZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyk7dGhpcy5fcnVucz1bXX1sb2FkKCl7Y29uc3QgZD1hLmdldFJvdXRlcigpLnJ1bnMoYS5nZXRFeHBlcmltZW50SWQoKSk7cmV0dXJuIHRoaXMucmVxdWVzdE1hbmFnZXIucmVxdWVzdChkKS50aGVuKGY9PntfLmlzRXF1YWwodGhpcy5fcnVucyxmKXx8KHRoaXMuX3J1bnM9Zix0aGlzLmVtaXRDaGFuZ2UoKSl9KX1nZXRSdW5zKCl7cmV0dXJuIHRoaXMuX3J1bnMuc2xpY2UoKX19YS5SdW5zU3RvcmU9YzthLnJ1bnNTdG9yZT1uZXcgY30pKFBrfHwoUGs9e30pKTsKPC9zY3JpcHQ+CjxzY3JpcHQ+Ly9+fldFQlBBVEh+fi90Zi1iYWNrZW5kL2JhY2tlbmQuanMKKGZ1bmN0aW9uKGEpe2EuVFlQRVM9W107YS5nZXRSdW5zTmFtZWQ9ZnVuY3Rpb24oYyl7cmV0dXJuIF8ua2V5cyhjKS5zb3J0KE9rLmNvbXBhcmVUYWdOYW1lcyl9O2EuZ2V0VGFncz1mdW5jdGlvbihjKXtyZXR1cm4gXy51bmlvbi5hcHBseShudWxsLF8udmFsdWVzKGMpKS5zb3J0KE9rLmNvbXBhcmVUYWdOYW1lcyl9O2EuZmlsdGVyVGFncz1mdW5jdGlvbihjLGQpe2xldCBmPVtdO2QuZm9yRWFjaChnPT5mPWYuY29uY2F0KGNbZ10pKTtyZXR1cm4gXy51bmlxKGYpLnNvcnQoT2suY29tcGFyZVRhZ05hbWVzKX19KShQa3x8KFBrPXt9KSk7Cjwvc2NyaXB0Pgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdGYtYmFja2VuZC9jYW5jZWxsZXIuanMKKGZ1bmN0aW9uKGEpe2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLmNhbmNlbGxhdGlvbkNvdW50PTB9Y2FuY2VsbGFibGUoZCl7Y29uc3QgZj10aGlzLmNhbmNlbGxhdGlvbkNvdW50O3JldHVybiBnPT5kKHt2YWx1ZTpnLGNhbmNlbGxlZDp0aGlzLmNhbmNlbGxhdGlvbkNvdW50IT09Zn0pfWNhbmNlbEFsbCgpe3RoaXMuY2FuY2VsbGF0aW9uQ291bnQrK319YS5DYW5jZWxsZXI9Y30pKFBrfHwoUGs9e30pKTsKPC9zY3JpcHQ+Cgo8ZG9tLW1vZHVsZSBpZD0idGYtYmFja2VuZCI+CiAgPHNjcmlwdD4vL35+V0VCUEFUSH5+L3RmLWJhY2tlbmQvdGYtYmFja2VuZC1wb2x5bWVyLmpzCihmdW5jdGlvbihhKXtQb2x5bWVyKHtpczoidGYtYmFja2VuZCIsdGZfYmFja2VuZDphfSl9KShQa3x8KFBrPXt9KSk7Cjwvc2NyaXB0Pgo8L2RvbS1tb2R1bGU+CgoKCgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdGYtY2F0ZWdvcml6YXRpb24tdXRpbHMvY2F0ZWdvcml6YXRpb25VdGlscy5qcwp2YXIgUWs7CihmdW5jdGlvbihhKXtmdW5jdGlvbiBjKHAscSl7Y29uc3Qgcj0oKCk9Pnt0cnl7cmV0dXJuIG5ldyBSZWdFeHAocSl9Y2F0Y2godCl7cmV0dXJuIG51bGx9fSkoKTtyZXR1cm57bmFtZTpxLG1ldGFkYXRhOnt0eXBlOm0uU0VBUkNIX1JFU1VMVFMsdmFsaWRSZWdleDohIXIsdW5pdmVyc2FsUmVnZXg6Ii4qIj09PXF9LGl0ZW1zOnI/cC5maWx0ZXIodD0+dC5tYXRjaChyKSk6W119fWZ1bmN0aW9uIGQocCxxPSIvIil7Y29uc3Qgcj1bXSx0PXt9O3AuZm9yRWFjaCh2PT57dmFyIEE9di5pbmRleE9mKHEpO0E9MDw9QT92LnNsaWNlKDAsQSk6djtpZighdFtBXSl7Y29uc3QgeT17bmFtZTpBLG1ldGFkYXRhOnt0eXBlOm0uUFJFRklYX0dST1VQfSxpdGVtczpbXX07dFtBXT15O3IucHVzaCh5KX10W0FdLml0ZW1zLnB1c2godil9KTtyZXR1cm4gcn1mdW5jdGlvbiBmKHAscT0iIil7cT1bYyhwLHEpXTtwPWQocCk7cmV0dXJuW10uY29uY2F0KHEscCl9ZnVuY3Rpb24gZyhwLHEscil7Y29uc3QgdD0KUGsuZ2V0VGFncyhwKTtyPWYodCxyKTtjb25zdCB2PWwoXy5waWNrKHAscSkpO3JldHVybiByLm1hcCgoe25hbWU6QSxtZXRhZGF0YTp5LGl0ZW1zOnh9KT0+KHtuYW1lOkEsbWV0YWRhdGE6eSxpdGVtczp4Lm1hcChDPT4oe3RhZzpDLHJ1bnM6KHYuZ2V0KEMpfHxbXSkuc2xpY2UoKX0pKX0pKX1mdW5jdGlvbiBsKHApe2NvbnN0IHE9bmV3IE1hcDtPYmplY3Qua2V5cyhwKS5mb3JFYWNoKHI9PntwW3JdLmZvckVhY2godD0+e2NvbnN0IHY9cS5nZXQodCl8fFtdO3YucHVzaChyKTtxLnNldCh0LHYpfSl9KTtyZXR1cm4gcX1mdW5jdGlvbiBrKHAscSl7Y29uc3Qgcj1Pay5jb21wYXJlVGFnTmFtZXMocC50YWcscS50YWcpO3JldHVybiAwIT1yP3I6T2suY29tcGFyZVRhZ05hbWVzKHAucnVuLHEucnVuKX1sZXQgbTsoZnVuY3Rpb24ocCl7cFtwLlNFQVJDSF9SRVNVTFRTPTBdPSJTRUFSQ0hfUkVTVUxUUyI7cFtwLlBSRUZJWF9HUk9VUD0xXT0iUFJFRklYX0dST1VQIn0pKG09YS5DYXRlZ29yeVR5cGV8fAooYS5DYXRlZ29yeVR5cGU9e30pKTthLmNhdGVnb3JpemVCeVNlYXJjaFF1ZXJ5PWM7YS5jYXRlZ29yaXplQnlQcmVmaXg9ZDthLmNhdGVnb3JpemU9ZjthLmNhdGVnb3JpemVUYWdzPWc7YS5jYXRlZ29yaXplUnVuVGFnQ29tYmluYXRpb25zPWZ1bmN0aW9uKHAscSxyKXtyZXR1cm4gZyhwLHEscikubWFwKGZ1bmN0aW9uKHQpe2NvbnN0IHY9Xy5mbGF0dGVuKHQuaXRlbXMubWFwKCh7dGFnOkEscnVuczp5fSk9PnkubWFwKHg9Pih7dGFnOkEscnVuOnh9KSkpKTt2LnNvcnQoayk7cmV0dXJue25hbWU6dC5uYW1lLG1ldGFkYXRhOnQubWV0YWRhdGEsaXRlbXM6dn19KX19KShRa3x8KFFrPXt9KSk7Cjwvc2NyaXB0PgoKCgoKCjxzY3JpcHQ+Ly9+fldFQlBBVEh+fi90Zi1nbG9iYWxzL2dsb2JhbHMuanMKdmFyIFJrOyhmdW5jdGlvbihhKXtsZXQgYz0hMTthLnNldFVzZUhhc2g9ZnVuY3Rpb24oZil7Yz1mfTthLnVzZUhhc2g9ZnVuY3Rpb24oKXtyZXR1cm4gY307bGV0IGQ9IiI7YS5zZXRGYWtlSGFzaD1mdW5jdGlvbihmKXtkPWZ9O2EuZ2V0RmFrZUhhc2g9ZnVuY3Rpb24oKXtyZXR1cm4gZH19KShSa3x8KFJrPXt9KSk7Cjwvc2NyaXB0PgoKCgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdGYtc3RvcmFnZS9saXN0ZW5lcnMuanMKdmFyIFZsOwooZnVuY3Rpb24oYSl7Y2xhc3MgY3tjb25zdHJ1Y3RvcihnKXt0aGlzLmxpc3RlbmVyPWd9fWEuTGlzdGVuS2V5PWM7Y29uc3QgZD1uZXcgU2V0LGY9bmV3IFNldDt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigiaGFzaGNoYW5nZSIsKCk9PntkLmZvckVhY2goZz0+Zy5saXN0ZW5lcigpKX0pO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJzdG9yYWdlIiwoKT0+e2YuZm9yRWFjaChnPT5nLmxpc3RlbmVyKCkpfSk7YS5hZGRIYXNoTGlzdGVuZXI9ZnVuY3Rpb24oZyl7Zz1uZXcgYyhnKTtkLmFkZChnKTtyZXR1cm4gZ307YS5hZGRTdG9yYWdlTGlzdGVuZXI9ZnVuY3Rpb24oZyl7Zz1uZXcgYyhnKTtmLmFkZChnKTtyZXR1cm4gZ307YS5maXJlU3RvcmFnZUNoYW5nZWQ9ZnVuY3Rpb24oKXtmLmZvckVhY2goZz0+Zy5saXN0ZW5lcigpKX07YS5yZW1vdmVIYXNoTGlzdGVuZXJCeUtleT1mdW5jdGlvbihnKXtkLmRlbGV0ZShnKX07YS5yZW1vdmVTdG9yYWdlTGlzdGVuZXJCeUtleT1mdW5jdGlvbihnKXtmLmRlbGV0ZShnKX19KShWbHx8CihWbD17fSkpOwo8L3NjcmlwdD4KPHNjcmlwdD4vL35+V0VCUEFUSH5+L3RmLXN0b3JhZ2Uvc3RvcmFnZS5qcwooZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYyhxLHIpe2Z1bmN0aW9uIHQoeCxDPXt9KXtjb25zdCB7ZGVmYXVsdFZhbHVlOkYsdXNlTG9jYWxTdG9yYWdlOkQ9ITF9PUM7eD1EP3dpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbSh4KTprKGYoKSlbeF07cmV0dXJuIHZvaWQgMD09eD9fLmNsb25lRGVlcChGKTpxKHgpfWZ1bmN0aW9uIHYoeCxDLEY9e30pe2NvbnN0IHtkZWZhdWx0VmFsdWU6RCx1c2VMb2NhbFN0b3JhZ2U6Qj0hMSx1c2VMb2NhdGlvblJlcGxhY2U6Rz0hMX09RjtGPXIoQyk7Qj8od2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKHgsRiksYS5maXJlU3RvcmFnZUNoYW5nZWQoKSk6Xy5pc0VxdWFsKEMsdCh4LHt1c2VMb2NhbFN0b3JhZ2U6Qn0pKXx8KF8uaXNFcXVhbChDLEQpP20oeCk6KEM9ayhmKCkpLENbeF09RixnKGwoQyksRykpKX1jb25zdCBBPVtdLHk9W107cmV0dXJue2dldDp0LHNldDp2LGdldEluaXRpYWxpemVyOmZ1bmN0aW9uKHgsQyl7Y29uc3QgRj1PYmplY3QuYXNzaWduKHtkZWZhdWx0VmFsdWU6Qy5kZWZhdWx0VmFsdWUsCnBvbHltZXJQcm9wZXJ0eTp4LHVzZUxvY2FsU3RvcmFnZTohMX0sQyk7cmV0dXJuIGZ1bmN0aW9uKCl7Y29uc3QgRD1kKHRoaXMseCksQj0oKT0+e2NvbnN0IEs9dChELEYpO18uaXNFcXVhbChLLHRoaXNbRi5wb2x5bWVyUHJvcGVydHldKXx8KHRoaXNbRi5wb2x5bWVyUHJvcGVydHldPUspfSxHPShGLnVzZUxvY2FsU3RvcmFnZT9hLmFkZFN0b3JhZ2VMaXN0ZW5lcjphLmFkZEhhc2hMaXN0ZW5lcikoKCk9PkIoKSk7Ri51c2VMb2NhbFN0b3JhZ2U/eS5wdXNoKEcpOkEucHVzaChHKTtCKCk7cmV0dXJuIHRoaXNbRi5wb2x5bWVyUHJvcGVydHldfX0sZ2V0T2JzZXJ2ZXI6ZnVuY3Rpb24oeCxDKXtjb25zdCBGPU9iamVjdC5hc3NpZ24oe2RlZmF1bHRWYWx1ZTpDLmRlZmF1bHRWYWx1ZSxwb2x5bWVyUHJvcGVydHk6eCx1c2VMb2NhbFN0b3JhZ2U6ITF9LEMpO3JldHVybiBmdW5jdGlvbigpe2NvbnN0IEQ9ZCh0aGlzLHgpO3YoRCx0aGlzW0YucG9seW1lclByb3BlcnR5XSxGKX19LGRpc3Bvc2VCaW5kaW5nOmZ1bmN0aW9uKCl7QS5mb3JFYWNoKHg9PgphLnJlbW92ZUhhc2hMaXN0ZW5lckJ5S2V5KHgpKTt5LmZvckVhY2goeD0+YS5yZW1vdmVTdG9yYWdlTGlzdGVuZXJCeUtleSh4KSl9fX1mdW5jdGlvbiBkKHEscil7cT1xW2EuRElTQU1CSUdVQVRPUl07cmV0dXJuKG51bGw9PXE/W3JdOltxLHJdKS5qb2luKCIuIil9ZnVuY3Rpb24gZigpe3JldHVybiBSay51c2VIYXNoKCk/d2luZG93LmxvY2F0aW9uLmhhc2guc2xpY2UoMSk6UmsuZ2V0RmFrZUhhc2goKX1mdW5jdGlvbiBnKHEscj0hMSl7UmsudXNlSGFzaCgpP3I/d2luZG93LmxvY2F0aW9uLnJlcGxhY2UoIiMiK3EpOndpbmRvdy5sb2NhdGlvbi5oYXNoPXE6Umsuc2V0RmFrZUhhc2gocSl9ZnVuY3Rpb24gbChxKXtsZXQgcj0iIjt2b2lkIDAhPT1xW2EuVEFCXSYmKHIrPXFbYS5UQUJdKTtjb25zdCB0PU9iamVjdC5rZXlzKHEpLm1hcCh2PT5bdixxW3ZdXSkuZmlsdGVyKHY9PnZbMF0hPT1hLlRBQikubWFwKHY9PmVuY29kZVVSSUNvbXBvbmVudCh2WzBdKSsiXHgzZCIrZW5jb2RlVVJJQ29tcG9uZW50KHZbMV0pKS5qb2luKCJceDI2Iik7CnJldHVybiAwPHQubGVuZ3RoP3IrIlx4MjYiK3Q6cn1mdW5jdGlvbiBrKHEpe2NvbnN0IHI9e307cS5zcGxpdCgiXHgyNiIpLmZvckVhY2godD0+e3Q9dC5zcGxpdCgiXHgzZCIpOzE9PT10Lmxlbmd0aD9yW2EuVEFCXT10WzBdOjI9PT10Lmxlbmd0aCYmKHJbZGVjb2RlVVJJQ29tcG9uZW50KHRbMF0pXT1kZWNvZGVVUklDb21wb25lbnQodFsxXSkpfSk7cmV0dXJuIHJ9ZnVuY3Rpb24gbShxKXtjb25zdCByPWsoZigpKTtkZWxldGUgcltxXTtnKGwocikpfWEuVEFCPSJfX3RhYl9fIjthLkRJU0FNQklHVUFUT1I9ImRpc2FtYmlndWF0b3IiO3ZhciBwPWMocT0+cSxxPT5xKTthLmdldFN0cmluZz1wLmdldDthLnNldFN0cmluZz1wLnNldDthLmdldFN0cmluZ0luaXRpYWxpemVyPXAuZ2V0SW5pdGlhbGl6ZXI7YS5nZXRTdHJpbmdPYnNlcnZlcj1wLmdldE9ic2VydmVyO2EuZGlzcG9zZVN0cmluZ0JpbmRpbmc9cC5kaXNwb3NlQmluZGluZztwPWMocT0+InRydWUiPT09cT8hMDoiZmFsc2UiPT09CnE/ITE6dm9pZCAwLHE9PnEudG9TdHJpbmcoKSk7YS5nZXRCb29sZWFuPXAuZ2V0O2Euc2V0Qm9vbGVhbj1wLnNldDthLmdldEJvb2xlYW5Jbml0aWFsaXplcj1wLmdldEluaXRpYWxpemVyO2EuZ2V0Qm9vbGVhbk9ic2VydmVyPXAuZ2V0T2JzZXJ2ZXI7YS5kaXNwb3NlQm9vbGVhbkJpbmRpbmc9cC5kaXNwb3NlQmluZGluZztwPWMocT0+K3EscT0+cS50b1N0cmluZygpKTthLmdldE51bWJlcj1wLmdldDthLnNldE51bWJlcj1wLnNldDthLmdldE51bWJlckluaXRpYWxpemVyPXAuZ2V0SW5pdGlhbGl6ZXI7YS5nZXROdW1iZXJPYnNlcnZlcj1wLmdldE9ic2VydmVyO2EuZGlzcG9zZU51bWJlckJpbmRpbmc9cC5kaXNwb3NlQmluZGluZztwPWMocT0+SlNPTi5wYXJzZShhdG9iKHEpKSxxPT5idG9hKEpTT04uc3RyaW5naWZ5KHEpKSk7YS5nZXRPYmplY3Q9cC5nZXQ7YS5zZXRPYmplY3Q9cC5zZXQ7YS5nZXRPYmplY3RJbml0aWFsaXplcj1wLmdldEluaXRpYWxpemVyO2EuZ2V0T2JqZWN0T2JzZXJ2ZXI9CnAuZ2V0T2JzZXJ2ZXI7YS5kaXNwb3NlT2JqZWN0QmluZGluZz1wLmRpc3Bvc2VCaW5kaW5nO2EubWFrZUJpbmRpbmdzPWN9KShWbHx8KFZsPXt9KSk7Cjwvc2NyaXB0PgoKPGRvbS1tb2R1bGUgaWQ9InRmLXN0b3JhZ2UiPgogIDxzY3JpcHQ+Ly9+fldFQlBBVEh+fi90Zi1zdG9yYWdlL3RmLXN0b3JhZ2UtcG9seW1lci5qcwooZnVuY3Rpb24oYSl7UG9seW1lcih7aXM6InRmLXN0b3JhZ2UiLHRmX3N0b3JhZ2U6YX0pfSkoVmx8fChWbD17fSkpOwo8L3NjcmlwdD4KPC9kb20tbW9kdWxlPgoKCgo8ZG9tLW1vZHVsZSBpZD0idGYtdGFnLWZpbHRlcmVyIj4KICA8dGVtcGxhdGU+CiAgICA8cGFwZXItaW5wdXQgbm8tbGFiZWwtZmxvYXQgbGFiZWw9IkZpbHRlciB0YWdzIChyZWd1bGFyIGV4cHJlc3Npb25zIHN1cHBvcnRlZCkiIHZhbHVlPSJ7e190YWdGaWx0ZXJ9fSIgY2xhc3M9InNlYXJjaC1pbnB1dCI+CiAgICAgIDxpcm9uLWljb24gcHJlZml4IGljb249InNlYXJjaCIgc2xvdD0icHJlZml4Ij48L2lyb24taWNvbj4KICAgIDwvcGFwZXItaW5wdXQ+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBtYXJnaW46IDEwcHggNXB4IDEwcHggMTBweDsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgogIDxzY3JpcHQ+Ly9+fldFQlBBVEh+fi90Zi1jYXRlZ29yaXphdGlvbi11dGlscy90Zi10YWctZmlsdGVyZXIuaHRtbC5qcwpQb2x5bWVyKHtpczoidGYtdGFnLWZpbHRlcmVyIixwcm9wZXJ0aWVzOnt0YWdGaWx0ZXI6e3R5cGU6U3RyaW5nLG5vdGlmeTohMCxjb21wdXRlZDoiX2NvbXB1dGVUYWdGaWx0ZXIoX3RhZ0ZpbHRlcikifSxfdGFnRmlsdGVyOnt0eXBlOlN0cmluZyx2YWx1ZTpWbC5nZXRTdHJpbmdJbml0aWFsaXplcigidGFnRmlsdGVyIix7ZGVmYXVsdFZhbHVlOiIiLHVzZUxvY2FsU3RvcmFnZTohMSxwb2x5bWVyUHJvcGVydHk6Il90YWdGaWx0ZXIifSksb2JzZXJ2ZXI6Il90YWdGaWx0ZXJPYnNlcnZlciJ9fSxfdGFnRmlsdGVyT2JzZXJ2ZXI6VmwuZ2V0U3RyaW5nT2JzZXJ2ZXIoInRhZ0ZpbHRlciIse2RlZmF1bHRWYWx1ZToiIix1c2VMb2NhbFN0b3JhZ2U6ITEscG9seW1lclByb3BlcnR5OiJfdGFnRmlsdGVyIn0pLF9jb21wdXRlVGFnRmlsdGVyKCl7cmV0dXJuIHRoaXMuX3RhZ0ZpbHRlcn19KTsKPC9zY3JpcHQ+CjwvZG9tLW1vZHVsZT4KCjxzY3JpcHQ+Ly9+fldFQlBBVEh+fi90Zi1kYXNoYm9hcmQtY29tbW9uL2FycmF5LXVwZGF0ZS1oZWxwZXIuanMKdmFyIFdsOyhmdW5jdGlvbihhKXthLkFycmF5VXBkYXRlSGVscGVyPXt1cGRhdGVBcnJheVByb3AoYyxkLGYpe2xldCBnPXRoaXMuZ2V0KGMpO2lmKCFBcnJheS5pc0FycmF5KGQpKXRocm93IFJhbmdlRXJyb3IoYEV4cGVjdGVkIG5ldyB2YWx1ZSB0byAnJHtjfScgdG8gYmUgYW4gYXJyYXkuYCk7QXJyYXkuaXNBcnJheShnKXx8KGc9W10sdGhpcy5zZXQoYyxnKSk7Y29uc3QgbD1uZXcgU2V0KGQubWFwKChwLHEpPT5mKHAscSkpKTtsZXQgaz0wLG09MDtmb3IoO2s8Zy5sZW5ndGgmJm08ZC5sZW5ndGg7KWwuaGFzKGYoZ1trXSxrKSk/KGYoZ1trXSxrKT09ZihkW21dLG0pP3RoaXMuc2V0KGAke2N9LiR7a31gLGRbbV0pOnRoaXMuc3BsaWNlKGMsaywwLGRbbV0pLG0rKyxrKyspOnRoaXMuc3BsaWNlKGMsaywxKTtrPGcubGVuZ3RoJiZ0aGlzLnNwbGljZShjLGspO208ZC5sZW5ndGgmJnRoaXMucHVzaChjLC4uLmQuc2xpY2UobSkpfX19KShXbHx8KFdsPXt9KSk7Cjwvc2NyaXB0PgoKCgoKPGRvbS1tb2R1bGUgaWQ9Imlyb24tZmxleCI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICAubGF5b3V0Lmhvcml6b250YWwsCiAgICAgIC5sYXlvdXQudmVydGljYWwgewogICAgICAgIGRpc3BsYXk6IC1tcy1mbGV4Ym94OwogICAgICAgIGRpc3BsYXk6IC13ZWJraXQtZmxleDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICB9CgogICAgICAubGF5b3V0LmlubGluZSB7CiAgICAgICAgZGlzcGxheTogLW1zLWlubGluZS1mbGV4Ym94OwogICAgICAgIGRpc3BsYXk6IC13ZWJraXQtaW5saW5lLWZsZXg7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQuaG9yaXpvbnRhbCB7CiAgICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICAgICAgLXdlYmtpdC1mbGV4LWRpcmVjdGlvbjogcm93OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQudmVydGljYWwgewogICAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIC13ZWJraXQtZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICB9CgogICAgICAubGF5b3V0LndyYXAgewogICAgICAgIC1tcy1mbGV4LXdyYXA6IHdyYXA7CiAgICAgICAgLXdlYmtpdC1mbGV4LXdyYXA6IHdyYXA7CiAgICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICB9CgogICAgICAubGF5b3V0Lm5vLXdyYXAgewogICAgICAgIC1tcy1mbGV4LXdyYXA6IG5vd3JhcDsKICAgICAgICAtd2Via2l0LWZsZXgtd3JhcDogbm93cmFwOwogICAgICAgIGZsZXgtd3JhcDogbm93cmFwOwogICAgICB9CgogICAgICAubGF5b3V0LmNlbnRlciwKICAgICAgLmxheW91dC5jZW50ZXItY2VudGVyIHsKICAgICAgICAtbXMtZmxleC1hbGlnbjogY2VudGVyOwogICAgICAgIC13ZWJraXQtYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICB9CgogICAgICAubGF5b3V0LmNlbnRlci1qdXN0aWZpZWQsCiAgICAgIC5sYXlvdXQuY2VudGVyLWNlbnRlciB7CiAgICAgICAgLW1zLWZsZXgtcGFjazogY2VudGVyOwogICAgICAgIC13ZWJraXQtanVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgIH0KCiAgICAgIC5mbGV4IHsKICAgICAgICAtbXMtZmxleDogMSAxIDAuMDAwMDAwMDAxcHg7CiAgICAgICAgLXdlYmtpdC1mbGV4OiAxOwogICAgICAgIGZsZXg6IDE7CiAgICAgICAgLXdlYmtpdC1mbGV4LWJhc2lzOiAwLjAwMDAwMDAwMXB4OwogICAgICAgIGZsZXgtYmFzaXM6IDAuMDAwMDAwMDAxcHg7CiAgICAgIH0KCiAgICAgIC5mbGV4LWF1dG8gewogICAgICAgIC1tcy1mbGV4OiAxIDEgYXV0bzsKICAgICAgICAtd2Via2l0LWZsZXg6IDEgMSBhdXRvOwogICAgICAgIGZsZXg6IDEgMSBhdXRvOwogICAgICB9CgogICAgICAuZmxleC1ub25lIHsKICAgICAgICAtbXMtZmxleDogbm9uZTsKICAgICAgICAtd2Via2l0LWZsZXg6IG5vbmU7CiAgICAgICAgZmxleDogbm9uZTsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+CgoKPGRvbS1tb2R1bGUgaWQ9Imlyb24tZmxleC1yZXZlcnNlIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIC5sYXlvdXQuaG9yaXpvbnRhbC1yZXZlcnNlLAogICAgICAubGF5b3V0LnZlcnRpY2FsLXJldmVyc2UgewogICAgICAgIGRpc3BsYXk6IC1tcy1mbGV4Ym94OwogICAgICAgIGRpc3BsYXk6IC13ZWJraXQtZmxleDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICB9CgogICAgICAubGF5b3V0Lmhvcml6b250YWwtcmV2ZXJzZSB7CiAgICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZTsKICAgICAgICAtd2Via2l0LWZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZTsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2U7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQudmVydGljYWwtcmV2ZXJzZSB7CiAgICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW4tcmV2ZXJzZTsKICAgICAgICAtd2Via2l0LWZsZXgtZGlyZWN0aW9uOiBjb2x1bW4tcmV2ZXJzZTsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uLXJldmVyc2U7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQud3JhcC1yZXZlcnNlIHsKICAgICAgICAtbXMtZmxleC13cmFwOiB3cmFwLXJldmVyc2U7CiAgICAgICAgLXdlYmtpdC1mbGV4LXdyYXA6IHdyYXAtcmV2ZXJzZTsKICAgICAgICBmbGV4LXdyYXA6IHdyYXAtcmV2ZXJzZTsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+CgoKPGRvbS1tb2R1bGUgaWQ9Imlyb24tZmxleC1hbGlnbm1lbnQiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgLyoqCiAgICAgICAqIEFsaWdubWVudCBpbiBjcm9zcyBheGlzLgogICAgICAgKi8KICAgICAgLmxheW91dC5zdGFydCB7CiAgICAgICAgLW1zLWZsZXgtYWxpZ246IHN0YXJ0OwogICAgICAgIC13ZWJraXQtYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7CiAgICAgICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQuY2VudGVyLAogICAgICAubGF5b3V0LmNlbnRlci1jZW50ZXIgewogICAgICAgIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQuZW5kIHsKICAgICAgICAtbXMtZmxleC1hbGlnbjogZW5kOwogICAgICAgIC13ZWJraXQtYWxpZ24taXRlbXM6IGZsZXgtZW5kOwogICAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDsKICAgICAgfQoKICAgICAgLmxheW91dC5iYXNlbGluZSB7CiAgICAgICAgLW1zLWZsZXgtYWxpZ246IGJhc2VsaW5lOwogICAgICAgIC13ZWJraXQtYWxpZ24taXRlbXM6IGJhc2VsaW5lOwogICAgICAgIGFsaWduLWl0ZW1zOiBiYXNlbGluZTsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIEFsaWdubWVudCBpbiBtYWluIGF4aXMuCiAgICAgICAqLwogICAgICAubGF5b3V0LnN0YXJ0LWp1c3RpZmllZCB7CiAgICAgICAgLW1zLWZsZXgtcGFjazogc3RhcnQ7CiAgICAgICAgLXdlYmtpdC1qdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0OwogICAgICB9CgogICAgICAubGF5b3V0LmNlbnRlci1qdXN0aWZpZWQsCiAgICAgIC5sYXlvdXQuY2VudGVyLWNlbnRlciB7CiAgICAgICAgLW1zLWZsZXgtcGFjazogY2VudGVyOwogICAgICAgIC13ZWJraXQtanVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQuZW5kLWp1c3RpZmllZCB7CiAgICAgICAgLW1zLWZsZXgtcGFjazogZW5kOwogICAgICAgIC13ZWJraXQtanVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kOwogICAgICB9CgogICAgICAubGF5b3V0LmFyb3VuZC1qdXN0aWZpZWQgewogICAgICAgIC1tcy1mbGV4LXBhY2s6IGRpc3RyaWJ1dGU7CiAgICAgICAgLXdlYmtpdC1qdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDsKICAgICAgfQoKICAgICAgLmxheW91dC5qdXN0aWZpZWQgewogICAgICAgIC1tcy1mbGV4LXBhY2s6IGp1c3RpZnk7CiAgICAgICAgLXdlYmtpdC1qdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICB9CgogICAgICAvKioKICAgICAgICogU2VsZiBhbGlnbm1lbnQuCiAgICAgICAqLwogICAgICAuc2VsZi1zdGFydCB7CiAgICAgICAgLW1zLWFsaWduLXNlbGY6IGZsZXgtc3RhcnQ7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1zZWxmOiBmbGV4LXN0YXJ0OwogICAgICAgIGFsaWduLXNlbGY6IGZsZXgtc3RhcnQ7CiAgICAgIH0KCiAgICAgIC5zZWxmLWNlbnRlciB7CiAgICAgICAgLW1zLWFsaWduLXNlbGY6IGNlbnRlcjsKICAgICAgICAtd2Via2l0LWFsaWduLXNlbGY6IGNlbnRlcjsKICAgICAgICBhbGlnbi1zZWxmOiBjZW50ZXI7CiAgICAgIH0KCiAgICAgIC5zZWxmLWVuZCB7CiAgICAgICAgLW1zLWFsaWduLXNlbGY6IGZsZXgtZW5kOwogICAgICAgIC13ZWJraXQtYWxpZ24tc2VsZjogZmxleC1lbmQ7CiAgICAgICAgYWxpZ24tc2VsZjogZmxleC1lbmQ7CiAgICAgIH0KCiAgICAgIC5zZWxmLXN0cmV0Y2ggewogICAgICAgIC1tcy1hbGlnbi1zZWxmOiBzdHJldGNoOwogICAgICAgIC13ZWJraXQtYWxpZ24tc2VsZjogc3RyZXRjaDsKICAgICAgICBhbGlnbi1zZWxmOiBzdHJldGNoOwogICAgICB9CgogICAgICAuc2VsZi1iYXNlbGluZSB7CiAgICAgICAgLW1zLWFsaWduLXNlbGY6IGJhc2VsaW5lOwogICAgICAgIC13ZWJraXQtYWxpZ24tc2VsZjogYmFzZWxpbmU7CiAgICAgICAgYWxpZ24tc2VsZjogYmFzZWxpbmU7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBtdWx0aS1saW5lIGFsaWdubWVudCBpbiBtYWluIGF4aXMuCiAgICAgICAqLwogICAgICAubGF5b3V0LnN0YXJ0LWFsaWduZWQgewogICAgICAgIC1tcy1mbGV4LWxpbmUtcGFjazogc3RhcnQ7ICAvKiBJRTEwICovCiAgICAgICAgLW1zLWFsaWduLWNvbnRlbnQ6IGZsZXgtc3RhcnQ7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1jb250ZW50OiBmbGV4LXN0YXJ0OwogICAgICAgIGFsaWduLWNvbnRlbnQ6IGZsZXgtc3RhcnQ7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQuZW5kLWFsaWduZWQgewogICAgICAgIC1tcy1mbGV4LWxpbmUtcGFjazogZW5kOyAgLyogSUUxMCAqLwogICAgICAgIC1tcy1hbGlnbi1jb250ZW50OiBmbGV4LWVuZDsKICAgICAgICAtd2Via2l0LWFsaWduLWNvbnRlbnQ6IGZsZXgtZW5kOwogICAgICAgIGFsaWduLWNvbnRlbnQ6IGZsZXgtZW5kOwogICAgICB9CgogICAgICAubGF5b3V0LmNlbnRlci1hbGlnbmVkIHsKICAgICAgICAtbXMtZmxleC1saW5lLXBhY2s6IGNlbnRlcjsgIC8qIElFMTAgKi8KICAgICAgICAtbXMtYWxpZ24tY29udGVudDogY2VudGVyOwogICAgICAgIC13ZWJraXQtYWxpZ24tY29udGVudDogY2VudGVyOwogICAgICAgIGFsaWduLWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgfQoKICAgICAgLmxheW91dC5iZXR3ZWVuLWFsaWduZWQgewogICAgICAgIC1tcy1mbGV4LWxpbmUtcGFjazoganVzdGlmeTsgIC8qIElFMTAgKi8KICAgICAgICAtbXMtYWxpZ24tY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICAtd2Via2l0LWFsaWduLWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgICAgYWxpZ24tY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgfQoKICAgICAgLmxheW91dC5hcm91bmQtYWxpZ25lZCB7CiAgICAgICAgLW1zLWZsZXgtbGluZS1wYWNrOiBkaXN0cmlidXRlOyAgLyogSUUxMCAqLwogICAgICAgIC1tcy1hbGlnbi1jb250ZW50OiBzcGFjZS1hcm91bmQ7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1jb250ZW50OiBzcGFjZS1hcm91bmQ7CiAgICAgICAgYWxpZ24tY29udGVudDogc3BhY2UtYXJvdW5kOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT4KCjxkb20tbW9kdWxlIGlkPSJpcm9uLWZsZXgtZmFjdG9ycyI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICAuZmxleCwKICAgICAgLmZsZXgtMSB7CiAgICAgICAgLW1zLWZsZXg6IDEgMSAwLjAwMDAwMDAwMXB4OwogICAgICAgIC13ZWJraXQtZmxleDogMTsKICAgICAgICBmbGV4OiAxOwogICAgICAgIC13ZWJraXQtZmxleC1iYXNpczogMC4wMDAwMDAwMDFweDsKICAgICAgICBmbGV4LWJhc2lzOiAwLjAwMDAwMDAwMXB4OwogICAgICB9CgogICAgICAuZmxleC0yIHsKICAgICAgICAtbXMtZmxleDogMjsKICAgICAgICAtd2Via2l0LWZsZXg6IDI7CiAgICAgICAgZmxleDogMjsKICAgICAgfQoKICAgICAgLmZsZXgtMyB7CiAgICAgICAgLW1zLWZsZXg6IDM7CiAgICAgICAgLXdlYmtpdC1mbGV4OiAzOwogICAgICAgIGZsZXg6IDM7CiAgICAgIH0KCiAgICAgIC5mbGV4LTQgewogICAgICAgIC1tcy1mbGV4OiA0OwogICAgICAgIC13ZWJraXQtZmxleDogNDsKICAgICAgICBmbGV4OiA0OwogICAgICB9CgogICAgICAuZmxleC01IHsKICAgICAgICAtbXMtZmxleDogNTsKICAgICAgICAtd2Via2l0LWZsZXg6IDU7CiAgICAgICAgZmxleDogNTsKICAgICAgfQoKICAgICAgLmZsZXgtNiB7CiAgICAgICAgLW1zLWZsZXg6IDY7CiAgICAgICAgLXdlYmtpdC1mbGV4OiA2OwogICAgICAgIGZsZXg6IDY7CiAgICAgIH0KCiAgICAgIC5mbGV4LTcgewogICAgICAgIC1tcy1mbGV4OiA3OwogICAgICAgIC13ZWJraXQtZmxleDogNzsKICAgICAgICBmbGV4OiA3OwogICAgICB9CgogICAgICAuZmxleC04IHsKICAgICAgICAtbXMtZmxleDogODsKICAgICAgICAtd2Via2l0LWZsZXg6IDg7CiAgICAgICAgZmxleDogODsKICAgICAgfQoKICAgICAgLmZsZXgtOSB7CiAgICAgICAgLW1zLWZsZXg6IDk7CiAgICAgICAgLXdlYmtpdC1mbGV4OiA5OwogICAgICAgIGZsZXg6IDk7CiAgICAgIH0KCiAgICAgIC5mbGV4LTEwIHsKICAgICAgICAtbXMtZmxleDogMTA7CiAgICAgICAgLXdlYmtpdC1mbGV4OiAxMDsKICAgICAgICBmbGV4OiAxMDsKICAgICAgfQoKICAgICAgLmZsZXgtMTEgewogICAgICAgIC1tcy1mbGV4OiAxMTsKICAgICAgICAtd2Via2l0LWZsZXg6IDExOwogICAgICAgIGZsZXg6IDExOwogICAgICB9CgogICAgICAuZmxleC0xMiB7CiAgICAgICAgLW1zLWZsZXg6IDEyOwogICAgICAgIC13ZWJraXQtZmxleDogMTI7CiAgICAgICAgZmxleDogMTI7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPgoKCjxkb20tbW9kdWxlIGlkPSJpcm9uLXBvc2l0aW9uaW5nIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIC5ibG9jayB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH0KCiAgICAgIFtoaWRkZW5dIHsKICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICAgIH0KCiAgICAgIC5pbnZpc2libGUgewogICAgICAgIHZpc2liaWxpdHk6IGhpZGRlbiAhaW1wb3J0YW50OwogICAgICB9CgogICAgICAucmVsYXRpdmUgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfQoKICAgICAgLmZpdCB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgfQoKICAgICAgYm9keS5mdWxsYmxlZWQgewogICAgICAgIG1hcmdpbjogMDsKICAgICAgICBoZWlnaHQ6IDEwMHZoOwogICAgICB9CgogICAgICAuc2Nyb2xsIHsKICAgICAgICAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7CiAgICAgICAgb3ZlcmZsb3c6IGF1dG87CiAgICAgIH0KCiAgICAgIC8qIGZpeGVkIHBvc2l0aW9uICovCiAgICAgIC5maXhlZC1ib3R0b20sCiAgICAgIC5maXhlZC1sZWZ0LAogICAgICAuZml4ZWQtcmlnaHQsCiAgICAgIC5maXhlZC10b3AgewogICAgICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgICAgfQoKICAgICAgLmZpeGVkLXRvcCB7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgIH0KCiAgICAgIC5maXhlZC1yaWdodCB7CiAgICAgICAgdG9wOiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgfQoKICAgICAgLmZpeGVkLWJvdHRvbSB7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgIH0KCiAgICAgIC5maXhlZC1sZWZ0IHsKICAgICAgICB0b3A6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPgoKCgoKCgoKCgo8c3R5bGUgaXM9ImN1c3RvbS1zdHlsZSI+CiAgOnJvb3QgewogICAgLS10Yi1vcmFuZ2Utd2VhazogI2ZmYTcyNjsKICAgIC0tdGItb3JhbmdlLXN0cm9uZzogI2Y1N2MwMDsKICAgIC0tdGItb3JhbmdlLWRhcms6ICNkYzczMjA7CiAgICAtLXRiLWdyZXktZGFya2VyOiAjZTJlMmUyOwogICAgLS10Yi1ncmV5LWxpZ2h0ZXI6ICNmM2YzZjM7CiAgICAtLXRiLXVpLWRhcmstYWNjZW50OiAjNzU3NTc1OwogICAgLS10Yi11aS1saWdodC1hY2NlbnQ6ICNlMGUwZTA7CiAgICAtLXRiLWdyYXBoLWZhZGVkOiAjZTBkNGIzOwogIH0KPC9zdHlsZT4KCgo8ZG9tLW1vZHVsZSBpZD0iZGFzaGJvYXJkLXN0eWxlIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGUgaW5jbHVkZT0iaXJvbi1mbGV4Ij48L3N0eWxlPgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgLS1zaWRlYmFyLXZlcnRpY2FsLXBhZGRpbmc6IDE1cHg7CiAgICAgICAgLS1zaWRlYmFyLWxlZnQtcGFkZGluZzogMzBweDsKICAgICAgfQoKICAgICAgW3Nsb3Q9J3NpZGViYXInXSB7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIG1hcmdpbi1yaWdodDogMjBweDsKICAgICAgICBvdmVyZmxvdy14OiBoaWRkZW47CiAgICAgICAgcGFkZGluZzogNXB4IDA7CiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICAgIH0KCiAgICAgIHRmLXJ1bnMtc2VsZWN0b3IgewogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgICBmbGV4LXNocmluazogMTsKICAgICAgICBsZWZ0OiB2YXIoLS1zaWRlYmFyLWxlZnQtcGFkZGluZyk7CiAgICAgICAgbWF4LWhlaWdodDogY2FsYygxMDAlIC0gdmFyKC0tc2lkZWJhci12ZXJ0aWNhbC1wYWRkaW5nKSAqIDIpOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHJpZ2h0OiAwOwogICAgICB9CgogICAgICAuc2VhcmNoLWlucHV0IHsKICAgICAgICBtYXJnaW46IDEwcHggNXB4IDAgMTBweDsKICAgICAgfQoKICAgICAgLnNpZGViYXItc2VjdGlvbiB7CiAgICAgICAgYm9yZGVyLXRvcDogc29saWQgMXB4IHJnYmEoMCwgMCwgMCwgMC4xMik7CiAgICAgICAgcGFkZGluZzogdmFyKC0tc2lkZWJhci12ZXJ0aWNhbC1wYWRkaW5nKSAwCiAgICAgICAgICB2YXIoLS1zaWRlYmFyLXZlcnRpY2FsLXBhZGRpbmcpIHZhcigtLXNpZGViYXItbGVmdC1wYWRkaW5nKTsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KCiAgICAgIC5zaWRlYmFyLXNlY3Rpb246Zmlyc3Qtb2YtdHlwZSB7CiAgICAgICAgYm9yZGVyOiBub25lOwogICAgICB9CgogICAgICAuc2lkZWJhci1zZWN0aW9uOmxhc3Qtb2YtdHlwZSB7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIH0KCiAgICAgIC5zaWRlYmFyLXNlY3Rpb24gcGFwZXItYnV0dG9uIHsKICAgICAgICBtYXJnaW46IDVweDsKICAgICAgfQoKICAgICAgLnNpZGViYXItc2VjdGlvbiBwYXBlci1idXR0b246Zmlyc3Qtb2YtdHlwZSB7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDAgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgLnNpZGViYXItc2VjdGlvbiBwYXBlci1idXR0b246bGFzdC1vZi10eXBlIHsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDAgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgLnNpZGViYXItc2VjdGlvbiA+IDpmaXJzdC1jaGlsZCB7CiAgICAgICAgbWFyZ2luLXRvcDogMDsKICAgICAgICBwYWRkaW5nLXRvcDogMDsKICAgICAgfQoKICAgICAgLnNpZGViYXItc2VjdGlvbiA+IDpsYXN0LWNoaWxkIHsKICAgICAgICBtYXJnaW4tYm90dG9tOiAwOwogICAgICAgIHBhZGRpbmctYm90dG9tOiAwOwogICAgICB9CgogICAgICAuc2lkZWJhci1zZWN0aW9uIGgzIHsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItZ3JleS04MDApOwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LXdlaWdodDogbm9ybWFsOwogICAgICAgIG1hcmdpbjogMTBweCAwIDVweDsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQoKICAgICAgcGFwZXItY2hlY2tib3ggewogICAgICAgIC0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1jb2xvcjogdmFyKC0tdGItdWktZGFyay1hY2NlbnQpOwogICAgICAgIC0tcGFwZXItY2hlY2tib3gtdW5jaGVja2VkLWNvbG9yOiB2YXIoLS10Yi11aS1kYXJrLWFjY2VudCk7CiAgICAgICAgZm9udC1zaXplOiAxNXB4OwogICAgICAgIG1hcmdpbi10b3A6IDVweDsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+CgoKCgoKPGRvbS1tb2R1bGUgaWQ9InNjcm9sbGJhci1zdHlsZSI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICAuc2Nyb2xsYmFyOjotd2Via2l0LXNjcm9sbGJhci10cmFjayB7CiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuOwogICAgICB9CgogICAgICAuc2Nyb2xsYmFyOjotd2Via2l0LXNjcm9sbGJhciB7CiAgICAgICAgd2lkdGg6IDEwcHg7CiAgICAgIH0KCiAgICAgIC5zY3JvbGxiYXI6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHsKICAgICAgICBib3JkZXItcmFkaXVzOiAxMHB4OwogICAgICAgIC13ZWJraXQtYm94LXNoYWRvdzogaW5zZXQgMCAwIDJweCByZ2JhKDAsIDAsIDAsIDAuMyk7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItZ3JleS01MDApOwogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1ncmV5LTkwMCk7CiAgICAgIH0KICAgICAgLnNjcm9sbGJhciB7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+CgoKCgo8ZG9tLW1vZHVsZSBpZD0idGYtZGFzaGJvYXJkLWxheW91dCI+CiAgPHRlbXBsYXRlPgogICAgPGRpdiBpZD0ic2lkZWJhciI+CiAgICAgIDxzbG90IG5hbWU9InNpZGViYXIiPjwvc2xvdD4KICAgIDwvZGl2PgoKICAgIDxkaXYgaWQ9ImNlbnRlciI+CiAgICAgIDxzbG90IG5hbWU9ImNlbnRlciIgY2xhc3M9InNjb2xsYmFyIj48L3Nsb3Q+CiAgICA8L2Rpdj4KICAgIDxzdHlsZSBpbmNsdWRlPSJzY3JvbGxiYXItc3R5bGUiPjwvc3R5bGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CgogICAgICAjc2lkZWJhciB7CiAgICAgICAgZmxleDogMCAwIHZhcigtLXRmLWRhc2hib2FyZC1sYXlvdXQtc2lkZWJhci1iYXNpcywgMjUlKTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgbWF4LXdpZHRoOiB2YXIoLS10Zi1kYXNoYm9hcmQtbGF5b3V0LXNpZGViYXItbWF4LXdpZHRoLCAzNTBweCk7CiAgICAgICAgbWluLXdpZHRoOiB2YXIoLS10Zi1kYXNoYm9hcmQtbGF5b3V0LXNpZGViYXItbWluLXdpZHRoLCAyNzBweCk7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgICAgfQoKICAgICAgI2NlbnRlciB7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICAgIGZsZXgtc2hyaW5rOiAxOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB9CgogICAgICA6OnNsb3R0ZWQoW3Nsb3Q9J2NlbnRlciddKSB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIG92ZXJmbG93LXg6IGhpZGRlbjsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm07CiAgICAgIH0KCiAgICAgIC50Zi1ncmFwaC1kYXNoYm9hcmQgI2NlbnRlciB7CiAgICAgICAgYmFja2dyb3VuZDogI2ZmZjsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgogIDxzY3JpcHQ+Ly9+fldFQlBBVEh+fi90Zi1kYXNoYm9hcmQtY29tbW9uL3RmLWRhc2hib2FyZC1sYXlvdXQuaHRtbC5qcwpQb2x5bWVyKHtpczoidGYtZGFzaGJvYXJkLWxheW91dCJ9KTsKPC9zY3JpcHQ+CjwvZG9tLW1vZHVsZT4KCgoKCgo8ZG9tLW1vZHVsZSBpZD0idGYtb3B0aW9uLXNlbGVjdG9yIj4KICA8dGVtcGxhdGU+CiAgICA8ZGl2IGlkPSJ3cmFwIj4KICAgICAgPGgzPltbbmFtZV1dPC9oMz4KICAgICAgPGRpdiBjbGFzcz0iY29udGVudC13cmFwcGVyIj48c2xvdD48L3Nsb3Q+PC9kaXY+CiAgICA8L2Rpdj4KICAgIDxzdHlsZT4KICAgICAgLmNvbnRlbnQtd3JhcHBlciA6OnNsb3R0ZWQoKikgewogICAgICAgIGJhY2tncm91bmQ6IG5vbmU7CiAgICAgICAgY29sb3I6IHZhcigtLXRiLXVpLWRhcmstYWNjZW50KTsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgbWFyZ2luLXRvcDogMTBweDsKICAgICAgfQoKICAgICAgLmNvbnRlbnQtd3JhcHBlciA6OnNsb3R0ZWQoKikgewogICAgICAgIGJhY2tncm91bmQ6IG5vbmU7CiAgICAgICAgY29sb3I6IHZhcigtLXRiLXVpLWRhcmstYWNjZW50KTsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgbWFyZ2luLXRvcDogMTBweDsKICAgICAgfQoKICAgICAgLmNvbnRlbnQtd3JhcHBlciA6OnNsb3R0ZWQoLnNlbGVjdGVkKSB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tdGItdWktZGFyay1hY2NlbnQpOwogICAgICAgIGNvbG9yOiB3aGl0ZSAhaW1wb3J0YW50OwogICAgICB9CgogICAgICBoMyB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWdyZXktODAwKTsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKICAgICAgICBtYXJnaW46IDAgMCA1cHg7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KICA8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdGYtZGFzaGJvYXJkLWNvbW1vbi90Zi1vcHRpb24tc2VsZWN0b3IuaHRtbC5qcwpQb2x5bWVyKHtpczoidGYtb3B0aW9uLXNlbGVjdG9yIixwcm9wZXJ0aWVzOntuYW1lOlN0cmluZyxzZWxlY3RlZElkOnt0eXBlOlN0cmluZyxub3RpZnk6ITAsb2JzZXJ2ZXI6Il9zZWxlY3RlZElkQ2hhbmdlZCJ9fSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuYXN5bmMoZnVuY3Rpb24oKXt0aGlzLmdldEVmZmVjdGl2ZUNoaWxkcmVuKCkuZm9yRWFjaChmdW5jdGlvbihhKXt0aGlzLmxpc3RlbihhLCJ0YXAiLCJfc2VsZWN0VGFyZ2V0Iil9LmJpbmQodGhpcykpfSl9LF9zZWxlY3RUYXJnZXQ6ZnVuY3Rpb24oYSl7dGhpcy5zZWxlY3RlZElkPWEuY3VycmVudFRhcmdldC5pZH0sX3NlbGVjdGVkSWRDaGFuZ2VkOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5xdWVyeUVmZmVjdGl2ZUNoaWxkcmVuKCIjIit0aGlzLnNlbGVjdGVkSWQpO2EmJih0aGlzLmdldEVmZmVjdGl2ZUNoaWxkcmVuKCkuZm9yRWFjaChmdW5jdGlvbihjKXtjLmNsYXNzTGlzdC5yZW1vdmUoInNlbGVjdGVkIil9KSxhLmNsYXNzTGlzdC5hZGQoInNlbGVjdGVkIikpfX0pOwo8L3NjcmlwdD4KPC9kb20tbW9kdWxlPgoKCgoKCgoKCjxkb20tbW9kdWxlIGlkPSJpcm9uLWNvbGxhcHNlIj4KCiAgPHRlbXBsYXRlPgoKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHRyYW5zaXRpb24tZHVyYXRpb246IHZhcigtLWlyb24tY29sbGFwc2UtdHJhbnNpdGlvbi1kdXJhdGlvbiwgMzAwbXMpOwogICAgICAgIC8qIFNhZmFyaSAxMCBuZWVkcyB0aGlzIHByb3BlcnR5IHByZWZpeGVkIHRvIGNvcnJlY3RseSBhcHBseSB0aGUgY3VzdG9tIHByb3BlcnR5ICovCiAgICAgICAgLXdlYmtpdC10cmFuc2l0aW9uLWR1cmF0aW9uOiB2YXIoLS1pcm9uLWNvbGxhcHNlLXRyYW5zaXRpb24tZHVyYXRpb24sIDMwMG1zKTsKICAgICAgICBvdmVyZmxvdzogdmlzaWJsZTsKICAgICAgfQoKICAgICAgOmhvc3QoLmlyb24tY29sbGFwc2UtY2xvc2VkKSB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQoKICAgICAgOmhvc3QoOm5vdCguaXJvbi1jb2xsYXBzZS1vcGVuZWQpKSB7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8c2xvdD48L3Nsb3Q+CgogIDwvdGVtcGxhdGU+Cgo8L2RvbS1tb2R1bGU+Cgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vaXJvbi1jb2xsYXBzZS9pcm9uLWNvbGxhcHNlLmh0bWwuanMKUG9seW1lcih7aXM6Imlyb24tY29sbGFwc2UiLGJlaGF2aW9yczpbUG9seW1lci5Jcm9uUmVzaXphYmxlQmVoYXZpb3JdLHByb3BlcnRpZXM6e2hvcml6b250YWw6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxvYnNlcnZlcjoiX2hvcml6b250YWxDaGFuZ2VkIn0sb3BlbmVkOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEsbm90aWZ5OiEwLG9ic2VydmVyOiJfb3BlbmVkQ2hhbmdlZCJ9LHRyYW5zaXRpb25pbmc6e3R5cGU6Qm9vbGVhbixub3RpZnk6ITAscmVhZE9ubHk6ITB9LG5vQW5pbWF0aW9uOnt0eXBlOkJvb2xlYW59LF9kZXNpcmVkU2l6ZTp7dHlwZTpTdHJpbmcsdmFsdWU6IiJ9fSxnZXQgZGltZW5zaW9uKCl7cmV0dXJuIHRoaXMuaG9yaXpvbnRhbD8id2lkdGgiOiJoZWlnaHQifSxnZXQgX2RpbWVuc2lvbk1heCgpe3JldHVybiB0aGlzLmhvcml6b250YWw/Im1heFdpZHRoIjoibWF4SGVpZ2h0In0sZ2V0IF9kaW1lbnNpb25NYXhDc3MoKXtyZXR1cm4gdGhpcy5ob3Jpem9udGFsPyJtYXgtd2lkdGgiOgoibWF4LWhlaWdodCJ9LGhvc3RBdHRyaWJ1dGVzOntyb2xlOiJncm91cCIsImFyaWEtaGlkZGVuIjoidHJ1ZSJ9LGxpc3RlbmVyczp7dHJhbnNpdGlvbmVuZDoiX29uVHJhbnNpdGlvbkVuZCJ9LHRvZ2dsZTpmdW5jdGlvbigpe3RoaXMub3BlbmVkPSF0aGlzLm9wZW5lZH0sc2hvdzpmdW5jdGlvbigpe3RoaXMub3BlbmVkPSEwfSxoaWRlOmZ1bmN0aW9uKCl7dGhpcy5vcGVuZWQ9ITF9LHVwZGF0ZVNpemU6ZnVuY3Rpb24oYSxjKXthPSJhdXRvIj09PWE/IiI6YTtjPWMmJiF0aGlzLm5vQW5pbWF0aW9uJiZ0aGlzLmlzQXR0YWNoZWQmJnRoaXMuX2Rlc2lyZWRTaXplIT09YTt0aGlzLl9kZXNpcmVkU2l6ZT1hO3RoaXMuX3VwZGF0ZVRyYW5zaXRpb24oITEpO2MmJihjPXRoaXMuX2NhbGNTaXplKCksIiI9PT1hJiYodGhpcy5zdHlsZVt0aGlzLl9kaW1lbnNpb25NYXhdPSIiLGE9dGhpcy5fY2FsY1NpemUoKSksdGhpcy5zdHlsZVt0aGlzLl9kaW1lbnNpb25NYXhdPWMsdGhpcy5zY3JvbGxUb3A9CnRoaXMuc2Nyb2xsVG9wLHRoaXMuX3VwZGF0ZVRyYW5zaXRpb24oITApLGM9YSE9PWMpO3RoaXMuc3R5bGVbdGhpcy5fZGltZW5zaW9uTWF4XT1hO2N8fHRoaXMuX3RyYW5zaXRpb25FbmQoKX0sZW5hYmxlVHJhbnNpdGlvbjpmdW5jdGlvbihhKXtQb2x5bWVyLkJhc2UuX3dhcm4oImBlbmFibGVUcmFuc2l0aW9uKClgIGlzIGRlcHJlY2F0ZWQsIHVzZSBgbm9BbmltYXRpb25gIGluc3RlYWQuIik7dGhpcy5ub0FuaW1hdGlvbj0hYX0sX3VwZGF0ZVRyYW5zaXRpb246ZnVuY3Rpb24oYSl7dGhpcy5zdHlsZS50cmFuc2l0aW9uRHVyYXRpb249YSYmIXRoaXMubm9BbmltYXRpb24/IiI6IjBzIn0sX2hvcml6b250YWxDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5zdHlsZS50cmFuc2l0aW9uUHJvcGVydHk9dGhpcy5fZGltZW5zaW9uTWF4Q3NzO3RoaXMuc3R5bGVbIm1heFdpZHRoIj09PXRoaXMuX2RpbWVuc2lvbk1heD8ibWF4SGVpZ2h0IjoibWF4V2lkdGgiXT0iIjt0aGlzLnVwZGF0ZVNpemUodGhpcy5vcGVuZWQ/CiJhdXRvIjoiMHB4IiwhMSl9LF9vcGVuZWRDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtaGlkZGVuIiwhdGhpcy5vcGVuZWQpO3RoaXMuX3NldFRyYW5zaXRpb25pbmcoITApO3RoaXMudG9nZ2xlQ2xhc3MoImlyb24tY29sbGFwc2UtY2xvc2VkIiwhMSk7dGhpcy50b2dnbGVDbGFzcygiaXJvbi1jb2xsYXBzZS1vcGVuZWQiLCExKTt0aGlzLnVwZGF0ZVNpemUodGhpcy5vcGVuZWQ/ImF1dG8iOiIwcHgiLCEwKTt0aGlzLm9wZW5lZCYmdGhpcy5mb2N1cygpfSxfdHJhbnNpdGlvbkVuZDpmdW5jdGlvbigpe3RoaXMuc3R5bGVbdGhpcy5fZGltZW5zaW9uTWF4XT10aGlzLl9kZXNpcmVkU2l6ZTt0aGlzLnRvZ2dsZUNsYXNzKCJpcm9uLWNvbGxhcHNlLWNsb3NlZCIsIXRoaXMub3BlbmVkKTt0aGlzLnRvZ2dsZUNsYXNzKCJpcm9uLWNvbGxhcHNlLW9wZW5lZCIsdGhpcy5vcGVuZWQpO3RoaXMuX3VwZGF0ZVRyYW5zaXRpb24oITEpO3RoaXMubm90aWZ5UmVzaXplKCk7CnRoaXMuX3NldFRyYW5zaXRpb25pbmcoITEpfSxfb25UcmFuc2l0aW9uRW5kOmZ1bmN0aW9uKGEpe1BvbHltZXIuZG9tKGEpLnJvb3RUYXJnZXQ9PT10aGlzJiZ0aGlzLl90cmFuc2l0aW9uRW5kKCl9LF9jYWxjU2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpW3RoaXMuZGltZW5zaW9uXSsicHgifX0pOwo8L3NjcmlwdD4KCgoKCgoKCjxzY3JpcHQ+Ly9+fldFQlBBVEh+fi90Zi1wYWdpbmF0ZWQtdmlldy90Zi1kb20tcmVwZWF0Lmh0bWwuanMKdmFyIFhsOwooZnVuY3Rpb24oYSl7YS5UZkRvbVJlcGVhdEJlaGF2aW9yPVtXbC5BcnJheVVwZGF0ZUhlbHBlcix7cHJvcGVydGllczp7YXM6e3R5cGU6U3RyaW5nLHZhbHVlOiJpdGVtIn0sX2NvbnRlbnRBY3RpdmU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMH0sX2RvbUJvb3RzdHJhcHBlZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxfY3Rvcjp7dHlwZTpGdW5jdGlvbix2YWx1ZTooKT0+bnVsbH0sX3JlbmRlcmVkSXRlbXM6e3R5cGU6QXJyYXksdmFsdWU6KCk9PltdfSxfcmVuZGVyZWRUZW1wbGF0ZUluc3Q6e3R5cGU6T2JqZWN0LHZhbHVlOigpPT5uZXcgTWFwfSxfbHJ1Q2FjaGVkSXRlbXM6e3R5cGU6T2JqZWN0LHZhbHVlOigpPT5uZXcgTWFwfSxfY2FjaGVTaXplOnt0eXBlOk51bWJlcix2YWx1ZToxMH0sX2dldEl0ZW1LZXk6e3R5cGU6RnVuY3Rpb24sdmFsdWU6KCk9PmM9PkpTT04uc3RyaW5naWZ5KGMpfX0sb2JzZXJ2ZXJzOlsiX2Jvb3RzdHJhcERvbShfaXRlbXNSZW5kZXJlZCwgaXNBdHRhY2hlZCkiLCJfdXBkYXRlRG9tKF9yZW5kZXJlZEl0ZW1zLiosIF9kb21Cb290c3RyYXBwZWQpIiwKIl91cGRhdGVBY3RpdmUoX2NvbnRlbnRBY3RpdmUpIiwiX3RyaW1DYWNoZShfY2FjaGVTaXplKSJdLHNldENhY2hlU2l6ZShjKXt0aGlzLl9jYWNoZVNpemU9Y30sc2V0R2V0SXRlbUtleShjKXt0aGlzLl9nZXRJdGVtS2V5PWN9LHVwZGF0ZURvbShjKXt0aGlzLnVwZGF0ZUFycmF5UHJvcCgiX3JlbmRlcmVkSXRlbXMiLGMsdGhpcy5fZ2V0SXRlbUtleSl9LF9lbnN1cmVUZW1wbGF0aXplZCgpe2lmKCF0aGlzLmlzQXR0YWNoZWQpcmV0dXJuITE7dGhpcy5fY3Rvcnx8KHRoaXMuX2N0b3I9UG9seW1lci5UZW1wbGF0aXplLnRlbXBsYXRpemUodGhpcy5xdWVyeVNlbGVjdG9yKCJ0ZW1wbGF0ZSIpLHRoaXMse3BhcmVudE1vZGVsOiEwLGluc3RhbmNlUHJvcHM6e1t0aGlzLmFzXTohMCxhY3RpdmU6dGhpcy5fY29udGVudEFjdGl2ZX0sZm9yd2FyZEhvc3RQcm9wOmZ1bmN0aW9uKGMsZCl7dGhpcy5fcmVuZGVyZWRUZW1wbGF0ZUluc3QuZm9yRWFjaChmPT57Zi5mb3J3YXJkSG9zdFByb3AoYywKZCl9KX19KSk7cmV0dXJuITB9LF9ib290c3RyYXBEb20oKXt0aGlzLl9pdGVtc1JlbmRlcmVkJiZ0aGlzLl9lbnN1cmVUZW1wbGF0aXplZCgpJiYhdGhpcy5fZG9tQm9vdHN0cmFwcGVkJiYoQXJyYXkuZnJvbSh0aGlzLmNoaWxkcmVuKS5mb3JFYWNoKGM9PntQb2x5bWVyLmRvbSh0aGlzKS5yZW1vdmVDaGlsZChjKX0pLHRoaXMuX2xydUNhY2hlZEl0ZW1zLmNsZWFyKCksdGhpcy5fcmVuZGVyZWRJdGVtcy5mb3JFYWNoKChjLGQpPT50aGlzLl9pbnNlcnRJdGVtKGMsZCkpLHRoaXMuX2RvbUJvb3RzdHJhcHBlZD0hMCl9LF91cGRhdGVBY3RpdmUoKXt0aGlzLl9kb21Cb290c3RyYXBwZWQmJkFycmF5LmZyb20odGhpcy5fcmVuZGVyZWRUZW1wbGF0ZUluc3QudmFsdWVzKCkpLmZvckVhY2goYz0+e2Mubm90aWZ5UGF0aCgiYWN0aXZlIix0aGlzLl9jb250ZW50QWN0aXZlKX0pfSxfdXBkYXRlRG9tKGMpe2lmKHRoaXMuX2RvbUJvb3RzdHJhcHBlZCYmIl9yZW5kZXJlZEl0ZW1zIiE9Yy5wYXRoJiYKIl9yZW5kZXJlZEl0ZW1zLmxlbmd0aCIhPWMucGF0aClpZigiX3JlbmRlcmVkSXRlbXMuc3BsaWNlcyI9PT1jLnBhdGgpYy52YWx1ZS5pbmRleFNwbGljZXMuZm9yRWFjaChkPT57Y29uc3Qge2luZGV4OmYsYWRkZWRDb3VudDpnLG9iamVjdDpsLHJlbW92ZWQ6a309ZDtrLmZvckVhY2gobT0+e3RoaXMuX3JlbW92ZUl0ZW0obSx0aGlzLmNoaWxkcmVuW2ZdKX0pO2wuc2xpY2UoZixmK2cpLmZvckVhY2goKG0scCk9PnRoaXMuX2luc2VydEl0ZW0obSxmK3ApKTt0aGlzLl90cmltQ2FjaGUoKX0pO2Vsc2V7Y29uc3QgZD10aGlzLl9nZXRJdGVtS2V5KGMudmFsdWUpO3RoaXMuX3JlbmRlcmVkVGVtcGxhdGVJbnN0LmhhcyhkKT90aGlzLl9yZW5kZXJlZFRlbXBsYXRlSW5zdC5nZXQoZCkubm90aWZ5UGF0aCh0aGlzLmFzLGMudmFsdWUpOmNvbnNvbGUud2FybihgRXhwZWN0ZWQgJyR7ZH0nIHRvIGV4aXN0IGluIHRoZSBET00gYnV0IGArImNvdWxkIG5vdCBmaW5kIG9uZS4iKX19LF9pbnNlcnRJdGVtKGMsCmQpe2lmKCF0aGlzLl9lbnN1cmVUZW1wbGF0aXplZCgpKXRocm93IEVycm9yKCJFeHBlY3RlZCB0ZW1wbGF0aXplZCBiZWZvcmUgaW5zZXJ0aW5nIGFuIGl0ZW0iKTtjb25zdCBmPXRoaXMuX2dldEl0ZW1LZXkoYyk7aWYodGhpcy5fbHJ1Q2FjaGVkSXRlbXMuaGFzKGYpKWM9dGhpcy5fbHJ1Q2FjaGVkSXRlbXMuZ2V0KGYpLHRoaXMuX2xydUNhY2hlZEl0ZW1zLmRlbGV0ZShmKSx0aGlzLl9yZW5kZXJlZFRlbXBsYXRlSW5zdC5nZXQoZikubm90aWZ5UGF0aCgiYWN0aXZlIix0aGlzLl9jb250ZW50QWN0aXZlKTtlbHNle2NvbnN0IGc9bmV3IHRoaXMuX2N0b3Ioe1t0aGlzLmFzXTpjLGFjdGl2ZTp0aGlzLl9jb250ZW50QWN0aXZlfSk7Yz1nLnJvb3Q7dGhpcy5fcmVuZGVyZWRUZW1wbGF0ZUluc3Quc2V0KGYsZyl9dGhpcy5jaGlsZHJlbltkXT9Qb2x5bWVyLmRvbSh0aGlzKS5pbnNlcnRCZWZvcmUoYyx0aGlzLmNoaWxkcmVuW2RdKTooKGMubm9kZVR5cGU9PU5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERT8KQXJyYXkuZnJvbShjLmNoaWxkcmVuKTpbY10pLmZvckVhY2goZz0+Zy5zZXRBdHRyaWJ1dGUoInNsb3QiLCJpdGVtcyIpKSxQb2x5bWVyLmRvbSh0aGlzKS5hcHBlbmRDaGlsZChjKSl9LF9yZW1vdmVJdGVtKGMsZCl7UG9seW1lci5kb20oZC5wYXJlbnROb2RlKS5yZW1vdmVDaGlsZChkKTtjPXRoaXMuX2dldEl0ZW1LZXkoYyk7dGhpcy5fbHJ1Q2FjaGVkSXRlbXMuc2V0KGMsZCk7dGhpcy5fcmVuZGVyZWRUZW1wbGF0ZUluc3QuZ2V0KGMpLm5vdGlmeVBhdGgoImFjdGl2ZSIsITEpfSxfdHJpbUNhY2hlKCl7Zm9yKDt0aGlzLl9scnVDYWNoZWRJdGVtcy5zaXplPnRoaXMuX2NhY2hlU2l6ZTspe2NvbnN0IFtjXT10aGlzLl9scnVDYWNoZWRJdGVtcy5rZXlzKCk7dGhpcy5fbHJ1Q2FjaGVkSXRlbXMuZGVsZXRlKGMpO3RoaXMuX3JlbmRlcmVkVGVtcGxhdGVJbnN0LmRlbGV0ZShjKX19fV19KShYbHx8KFhsPXt9KSk7Cjwvc2NyaXB0PgoKCgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdGYtcGFnaW5hdGVkLXZpZXcvcGFnaW5hdGVkVmlld1N0b3JlLmpzCnZhciBZbDsKKGZ1bmN0aW9uKGEpe2xldCBjPW51bGw7Y29uc3QgZD1uZXcgU2V0O2EuYWRkTGltaXRMaXN0ZW5lcj1mdW5jdGlvbihmKXtkLmFkZChmKX07YS5yZW1vdmVMaW1pdExpc3RlbmVyPWZ1bmN0aW9uKGYpe2QuZGVsZXRlKGYpfTthLmdldExpbWl0PWZ1bmN0aW9uKCl7bnVsbD09YyYmKGM9VmwuZ2V0TnVtYmVyKCJURi5UZW5zb3JCb2FyZC5QYWdpbmF0ZWRWaWV3LmxpbWl0Iix7dXNlTG9jYWxTdG9yYWdlOiEwfSksbnVsbD09Y3x8IWlzRmluaXRlKGMpfHwwPj1jKSYmKGM9MTIpO3JldHVybiBjfTthLnNldExpbWl0PWZ1bmN0aW9uKGYpe2lmKGYhPT1NYXRoLmZsb29yKGYpKXRocm93IEVycm9yKGBsaW1pdCBtdXN0IGJlIGFuIGludGVnZXIsIGJ1dCBnb3Q6ICR7Zn1gKTtpZigwPj1mKXRocm93IEVycm9yKGBsaW1pdCBtdXN0IGJlIHBvc2l0aXZlLCBidXQgZ290OiAke2Z9YCk7ZiE9PWMmJihjPWYsVmwuc2V0TnVtYmVyKCJURi5UZW5zb3JCb2FyZC5QYWdpbmF0ZWRWaWV3LmxpbWl0IixjLAp7dXNlTG9jYWxTdG9yYWdlOiEwfSksZC5mb3JFYWNoKGc9PntnKCl9KSl9fSkoWWx8fChZbD17fSkpOwo8L3NjcmlwdD4KCgoKPGRvbS1tb2R1bGUgaWQ9InRmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3Ij4KICA8dGVtcGxhdGU+CiAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX3BhbmVSZW5kZXJlZF1dIiBpZD0iaWZSZW5kZXJlZCI+CiAgICAgIDxidXR0b24gY2xhc3M9ImhlYWRpbmciIG9uLXRhcD0iX3RvZ2dsZVBhbmUiIG9wZW4tYnV0dG9uJD0iW1tvcGVuZWRdXSI+CiAgICAgICAgPHNwYW4gY2xhc3M9Im5hbWUiPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19pc1NlYXJjaFJlc3VsdHNdXSI+CiAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaXNDb21wb3NpdGVTZWFyY2goY2F0ZWdvcnkpXV0iPgogICAgICAgICAgICAgIDxzcGFuPlRhZ3MgbWF0Y2hpbmcgbXVsdGlwbGUgZXhwZXJpbWVudHM8L3NwYW4+CiAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19pc0ludmFsaWRTZWFyY2hSZXN1bHRzXV0iPgogICAgICAgICAgICAgICAgPHNwYW4+Jm5ic3A7PHN0cm9uZz4obWFsZm9ybWVkIHJlZ3VsYXIgZXhwcmVzc2lvbik8L3N0cm9uZz48L3NwYW4+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbWyFfaXNDb21wb3NpdGVTZWFyY2goY2F0ZWdvcnkpXV0iPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaWdodCI+VGFncyBtYXRjaGluZyAvPC9zcGFuPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjYXRlZ29yeS1uYW1lIj5bW2NhdGVnb3J5Lm5hbWVdXTwvc3Bhbj4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGlnaHQiPi88L3NwYW4+CiAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19pc1VuaXZlcnNhbFNlYXJjaFF1ZXJ5XV0iPgogICAgICAgICAgICAgICAgPHNwYW4+IChhbGwgdGFncyk8L3NwYW4+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2lzSW52YWxpZFNlYXJjaFJlc3VsdHNdXSI+CiAgICAgICAgICAgICAgICA8c3Bhbj4gPHN0cm9uZz4obWFsZm9ybWVkIHJlZ3VsYXIgZXhwcmVzc2lvbik8L3N0cm9uZz48L3NwYW4+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIV9pc1NlYXJjaFJlc3VsdHNdXSI+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjYXRlZ29yeS1uYW1lIj5bW2NhdGVnb3J5Lm5hbWVdXTwvc3Bhbj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC9zcGFuPgogICAgICAgIDxzcGFuIGNsYXNzPSJjb3VudCI+PHNwYW4+W1tfY291bnRdXTwvc3Bhbj48L3NwYW4+CiAgICAgIDwvYnV0dG9uPgogICAgICAKICAgICAgPGlyb24tY29sbGFwc2Ugb3BlbmVkPSJbW29wZW5lZF1dIiBuby1hbmltYXRpb24+CiAgICAgICAgPGRpdiBjbGFzcz0iY29udGVudCI+CiAgICAgICAgICA8c3BhbiBpZD0idG9wLW9mLWNvbnRhaW5lciI+PC9zcGFuPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19tdWx0aXBsZVBhZ2VzRXhpc3RdXSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImJpZy1wYWdlLWJ1dHRvbnMiIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAxMHB4OyI+CiAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbiBvbi10YXA9Il9wZXJmb3JtUHJldmlvdXNQYWdlIiBkaXNhYmxlZCQ9IltbIV9oYXNQcmV2aW91c1BhZ2VdXSI+UHJldmlvdXMgcGFnZTwvcGFwZXItYnV0dG9uPgogICAgICAgICAgICAgIDxwYXBlci1idXR0b24gb24tdGFwPSJfcGVyZm9ybU5leHRQYWdlIiBkaXNhYmxlZCQ9IltbIV9oYXNOZXh0UGFnZV1dIj5OZXh0IHBhZ2U8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L3RlbXBsYXRlPgoKICAgICAgICAgIDxkaXYgaWQ9Iml0ZW1zIj4KICAgICAgICAgICAgPHNsb3QgbmFtZT0iaXRlbXMiPjwvc2xvdD4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19tdWx0aXBsZVBhZ2VzRXhpc3RdXSI+CiAgICAgICAgICAgIDxkaXYgaWQ9ImNvbnRyb2xzLWNvbnRhaW5lciI+CiAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iZGlzcGxheTogaW5saW5lLWJsb2NrOyBwYWRkaW5nOiAwIDVweCI+CiAgICAgICAgICAgICAgICBQYWdlCiAgICAgICAgICAgICAgICA8cGFwZXItaW5wdXQgaWQ9InBhZ2UtaW5wdXQiIHR5cGU9Im51bWJlciIgbm8tbGFiZWwtZmxvYXQgbWluPSIxIiBtYXg9IltbX3BhZ2VDb3VudF1dIiB2YWx1ZT0iW1tfcGFnZUlucHV0VmFsdWVdXSIgc3R5bGU9ImRpc3BsYXk6IGlubGluZS1ibG9jazsgd2lkdGg6IFtbX2lucHV0V2lkdGhdXTsiIG9uLWlucHV0PSJfaGFuZGxlUGFnZUlucHV0RXZlbnQiIG9uLWNoYW5nZT0iX2hhbmRsZVBhZ2VDaGFuZ2VFdmVudCIgb24tZm9jdXM9Il9oYW5kbGVQYWdlRm9jdXNFdmVudCIgb24tYmx1cj0iX2hhbmRsZVBhZ2VCbHVyRXZlbnQiPjwvcGFwZXItaW5wdXQ+CiAgICAgICAgICAgICAgICBvZiBbW19wYWdlQ291bnRdXQogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImJpZy1wYWdlLWJ1dHRvbnMiIHN0eWxlPSJtYXJnaW4tdG9wOiAxMHB4OyI+CiAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbiBvbi10YXA9Il9wZXJmb3JtUHJldmlvdXNQYWdlIiBkaXNhYmxlZCQ9IltbIV9oYXNQcmV2aW91c1BhZ2VdXSI+UHJldmlvdXMgcGFnZTwvcGFwZXItYnV0dG9uPgogICAgICAgICAgICAgIDxwYXBlci1idXR0b24gb24tdGFwPSJfcGVyZm9ybU5leHRQYWdlIiBkaXNhYmxlZCQ9IltbIV9oYXNOZXh0UGFnZV1dIj5OZXh0IHBhZ2U8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvZGl2PgogICAgICA8L2lyb24tY29sbGFwc2U+CiAgICA8L3RlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgbWFyZ2luOiAwIDVweCAxcHggMTBweDsKICAgICAgfQoKICAgICAgOmhvc3QoOmZpcnN0LW9mLXR5cGUpIHsKICAgICAgICBtYXJnaW4tdG9wOiAxMHB4OwogICAgICB9CgogICAgICA6aG9zdCg6bGFzdC1vZi10eXBlKSB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMjBweDsKICAgICAgfQoKICAgICAgLmhlYWRpbmcgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlOwogICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgZm9udC1zaXplOiAxNXB4OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxOwogICAgICAgIGJveC1zaGFkb3c6IDAgMXB4IDVweCByZ2JhKDAsIDAsIDAsIDAuMik7CiAgICAgICAgcGFkZGluZzogMTBweCAxNXB4OwogICAgICB9CgogICAgICAuaGVhZGluZzo6LW1vei1mb2N1cy1pbm5lciB7CiAgICAgICAgcGFkZGluZzogMTBweCAxNXB4OwogICAgICB9CgogICAgICBbb3Blbi1idXR0b25dIHsKICAgICAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwICFpbXBvcnRhbnQ7CiAgICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDAgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgLm5hbWUgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgICAgIGZsb2F0OiBsZWZ0OwogICAgICB9CgogICAgICAubGlnaHQgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1ncmV5LTUwMCk7CiAgICAgIH0KCiAgICAgIC5jYXRlZ29yeS1uYW1lIHsKICAgICAgICB3aGl0ZS1zcGFjZTogcHJlOwogICAgICB9CgogICAgICAuY291bnQgewogICAgICAgIGZsb2F0OiByaWdodDsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDVweDsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWdyZXktNTAwKTsKICAgICAgfQoKICAgICAgLmhlYWRpbmc6Oi1tb3otZm9jdXMtaW5uZXIgewogICAgICAgIHBhZGRpbmc6IDEwcHggMTVweDsKICAgICAgfQoKICAgICAgLmNvbnRlbnQgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBiYWNrZ3JvdW5kOiB3aGl0ZTsKICAgICAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAycHg7CiAgICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDJweDsKICAgICAgICBib3JkZXItdG9wOiBub25lOwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNkZWRlZGU7CiAgICAgICAgcGFkZGluZzogMTVweDsKICAgICAgfQoKICAgICAgLm5hbWUgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgICAgIGZsb2F0OiBsZWZ0OwogICAgICB9CgogICAgICAubGlnaHQgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1ncmV5LTUwMCk7CiAgICAgIH0KCiAgICAgICNjb250cm9scy1jb250YWluZXIgewogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgICBmbGV4LWdyb3c6IDA7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgICNjb250cm9scy1jb250YWluZXIgcGFwZXItYnV0dG9uIHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgIH0KCiAgICAgIC5iaWctcGFnZS1idXR0b25zIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICB9CgogICAgICAuYmlnLXBhZ2UtYnV0dG9ucyBwYXBlci1idXR0b24gewogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXRiLXVpLWxpZ2h0LWFjY2VudCk7CiAgICAgICAgY29sb3I6IHZhcigtLXRiLXVpLWRhcmstYWNjZW50KTsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgZmxleC1iYXNpczogMDsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgZmxleC1zaHJpbms6IDE7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICB9CgogICAgICAuYmlnLXBhZ2UtYnV0dG9ucyBwYXBlci1idXR0b25bZGlzYWJsZWRdIHsKICAgICAgICBiYWNrZ3JvdW5kOiBub25lOwogICAgICB9CgogICAgICBzbG90IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CiAgPHNjcmlwdD4vL35+V0VCUEFUSH5+L3RmLXBhZ2luYXRlZC12aWV3L3RmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3Lmh0bWwuanMKUG9seW1lcih7aXM6InRmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3Iixwcm9wZXJ0aWVzOntjYXRlZ29yeTpPYmplY3QsaW5pdGlhbE9wZW5lZDpCb29sZWFuLG9wZW5lZDp7dHlwZTpCb29sZWFuLG5vdGlmeTohMCxyZWFkT25seTohMH0sX2NvbnRlbnRBY3RpdmU6e3R5cGU6Qm9vbGVhbixjb21wdXRlZDoiX2NvbXB1dGVDb250ZW50QWN0aXZlKG9wZW5lZCkifSxkaXNhYmxlUGFnaW5hdGlvbjp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxfY291bnQ6e3R5cGU6TnVtYmVyLGNvbXB1dGVkOiJfY29tcHV0ZUNvdW50KGNhdGVnb3J5Lml0ZW1zLiopIn0sX3BhbmVSZW5kZXJlZDp7dHlwZTpCb29sZWFuLGNvbXB1dGVkOiJfY29tcHV0ZVBhbmVSZW5kZXJlZChjYXRlZ29yeSkiLG9ic2VydmVyOiJfb25QYW5lUmVuZGVyZWRDaGFuZ2VkIn0sX2l0ZW1zUmVuZGVyZWQ6e3R5cGU6Qm9vbGVhbixjb21wdXRlZDoiX2NvbXB1dGVJdGVtc1JlbmRlcmVkKG9wZW5lZCwgX3BhbmVSZW5kZXJlZCkifSwKX2lzU2VhcmNoUmVzdWx0czp7dHlwZTpCb29sZWFuLGNvbXB1dGVkOiJfY29tcHV0ZUlzU2VhcmNoUmVzdWx0cyhjYXRlZ29yeS5tZXRhZGF0YS50eXBlKSJ9LF9pc0ludmFsaWRTZWFyY2hSZXN1bHRzOnt0eXBlOkJvb2xlYW4sY29tcHV0ZWQ6Il9jb21wdXRlSXNJbnZhbGlkU2VhcmNoUmVzdWx0cyhjYXRlZ29yeS5tZXRhZGF0YSkifSxfaXNVbml2ZXJzYWxTZWFyY2hRdWVyeTp7dHlwZTpCb29sZWFuLGNvbXB1dGVkOiJfY29tcHV0ZUlzVW5pdmVyc2FsU2VhcmNoUXVlcnkoY2F0ZWdvcnkubWV0YWRhdGEpIn0sZ2V0Q2F0ZWdvcnlJdGVtS2V5Ont0eXBlOkZ1bmN0aW9uLHZhbHVlOigpPT5hPT5KU09OLnN0cmluZ2lmeShhKSxvYnNlcnZlcjoiX2dldENhdGVnb3J5SXRlbUtleUNoYW5nZWQifSxfbGltaXQ6e3R5cGU6TnVtYmVyLHZhbHVlOjEyLG9ic2VydmVyOiJfbGltaXRDaGFuZ2VkIn0sX2FjdGl2ZUluZGV4Ont0eXBlOk51bWJlcix2YWx1ZTowfSxfY3VycmVudFBhZ2U6e3R5cGU6TnVtYmVyLApjb21wdXRlZDoiX2NvbXB1dGVDdXJyZW50UGFnZShfbGltaXQsIF9hY3RpdmVJbmRleCkifSxfcGFnZUNvdW50Ont0eXBlOk51bWJlcixjb21wdXRlZDoiX2NvbXB1dGVQYWdlQ291bnQoY2F0ZWdvcnkuaXRlbXMuKiwgX2xpbWl0KSJ9LF9tdWx0aXBsZVBhZ2VzRXhpc3Q6e3R5cGU6Qm9vbGVhbixjb21wdXRlZDoiX2NvbXB1dGVNdWx0aXBsZVBhZ2VzRXhpc3QoX3BhZ2VDb3VudCwgZGlzYWJsZVBhZ2luYXRpb24pIn0sX2hhc1ByZXZpb3VzUGFnZTp7dHlwZTpCb29sZWFuLGNvbXB1dGVkOiJfY29tcHV0ZUhhc1ByZXZpb3VzUGFnZShfY3VycmVudFBhZ2UpIn0sX2hhc05leHRQYWdlOnt0eXBlOkJvb2xlYW4sY29tcHV0ZWQ6Il9jb21wdXRlSGFzTmV4dFBhZ2UoX2N1cnJlbnRQYWdlLCBfcGFnZUNvdW50KSJ9LF9pbnB1dFdpZHRoOnt0eXBlOlN0cmluZyxjb21wdXRlZDoiX2NvbXB1dGVJbnB1dFdpZHRoKF9wYWdlQ291bnQpIn0sX3BhZ2VJbnB1dFZhbHVlOnt0eXBlOlN0cmluZywKY29tcHV0ZWQ6Il9jb21wdXRlUGFnZUlucHV0VmFsdWUoX3BhZ2VJbnB1dEZvY3VzZWQsIF9wYWdlSW5wdXRSYXdWYWx1ZSwgX2N1cnJlbnRQYWdlKSIsb2JzZXJ2ZXI6Il91cGRhdGVQYWdlSW5wdXRWYWx1ZSJ9LF9wYWdlSW5wdXRSYXdWYWx1ZTp7dHlwZTpTdHJpbmcsdmFsdWU6IiJ9LF9wYWdlSW5wdXRGb2N1c2VkOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9fSxvYnNlcnZlcnM6WyJfY2xhbXBBY3RpdmVJbmRleChjYXRlZ29yeS5pdGVtcy4qKSIsIl91cGRhdGVSZW5kZXJlZEl0ZW1zKF9pdGVtc1JlbmRlcmVkLCBjYXRlZ29yeS5pdGVtcy4qLCBfbGltaXQsIF9hY3RpdmVJbmRleCwgX3BhZ2VDb3VudCwgZGlzYWJsZVBhZ2luYXRpb24pIl0sYmVoYXZpb3JzOltYbC5UZkRvbVJlcGVhdEJlaGF2aW9yXSxfY29tcHV0ZUNvdW50KCl7cmV0dXJuIHRoaXMuY2F0ZWdvcnkuaXRlbXMubGVuZ3RofSxfdG9nZ2xlUGFuZSgpe3RoaXMuX3NldE9wZW5lZCghdGhpcy5vcGVuZWQpfSxfY29tcHV0ZUNvbnRlbnRBY3RpdmUoKXtyZXR1cm4gdGhpcy5vcGVuZWR9LApfb25QYW5lUmVuZGVyZWRDaGFuZ2VkKGEsYyl7YSYmYSE9PWMmJnRoaXMuJC5pZlJlbmRlcmVkLnJlbmRlcigpfSxfY29tcHV0ZVBhbmVSZW5kZXJlZChhKXtyZXR1cm4hKGEubWV0YWRhdGEudHlwZT09PVFrLkNhdGVnb3J5VHlwZS5TRUFSQ0hfUkVTVUxUUyYmIiI9PT1hLm5hbWUpfSxfY29tcHV0ZUl0ZW1zUmVuZGVyZWQoKXtyZXR1cm4gdGhpcy5fcGFuZVJlbmRlcmVkJiZ0aGlzLm9wZW5lZH0sX2NvbXB1dGVJc1NlYXJjaFJlc3VsdHMoYSl7cmV0dXJuIGE9PT1Ray5DYXRlZ29yeVR5cGUuU0VBUkNIX1JFU1VMVFN9LF9jb21wdXRlSXNJbnZhbGlkU2VhcmNoUmVzdWx0cyhhKXtyZXR1cm4gYS50eXBlPT09UWsuQ2F0ZWdvcnlUeXBlLlNFQVJDSF9SRVNVTFRTJiYhYS52YWxpZFJlZ2V4fSxfY29tcHV0ZUlzVW5pdmVyc2FsU2VhcmNoUXVlcnkoYSl7cmV0dXJuIGEudHlwZT09PVFrLkNhdGVnb3J5VHlwZS5TRUFSQ0hfUkVTVUxUUyYmYS51bml2ZXJzYWxSZWdleH0sX2lzQ29tcG9zaXRlU2VhcmNoKCl7Y29uc3Qge3R5cGU6YSwKY29tcG9zaXRlU2VhcmNoOmN9PXRoaXMuY2F0ZWdvcnkubWV0YWRhdGE7cmV0dXJuIGMmJmE9PT1Ray5DYXRlZ29yeVR5cGUuU0VBUkNIX1JFU1VMVFN9LHJlYWR5KCl7dGhpcy5fc2V0T3BlbmVkKG51bGw9PXRoaXMuaW5pdGlhbE9wZW5lZD8hMDp0aGlzLmluaXRpYWxPcGVuZWQpO3RoaXMuX2xpbWl0TGlzdGVuZXI9KCk9Pnt0aGlzLnNldCgiX2xpbWl0IixZbC5nZXRMaW1pdCgpKX07WWwuYWRkTGltaXRMaXN0ZW5lcih0aGlzLl9saW1pdExpc3RlbmVyKTt0aGlzLl9saW1pdExpc3RlbmVyKCl9LGRldGFjaGVkKCl7WWwucmVtb3ZlTGltaXRMaXN0ZW5lcih0aGlzLl9saW1pdExpc3RlbmVyKX0sX3VwZGF0ZVJlbmRlcmVkSXRlbXMoYSxjLGQsZixnLGwpe2EmJihhPU1hdGguZmxvb3IoZi9kKSxjPXRoaXMuY2F0ZWdvcnkuaXRlbXN8fFtdLHRoaXMudXBkYXRlRG9tKGw/YzpjLnNsaWNlKGEqZCwoYSsxKSpkKSx0aGlzLmdldENhdGVnb3J5SXRlbUtleSkpfSxfbGltaXRDaGFuZ2VkKGEpe3RoaXMuc2V0Q2FjaGVTaXplKDIqCmEpfSxfZ2V0Q2F0ZWdvcnlJdGVtS2V5Q2hhbmdlZCgpe3RoaXMuc2V0R2V0SXRlbUtleSh0aGlzLmdldENhdGVnb3J5SXRlbUtleSl9LF9jb21wdXRlQ3VycmVudFBhZ2UoYSxjKXtyZXR1cm4gTWF0aC5mbG9vcihjL2EpKzF9LF9jb21wdXRlUGFnZUNvdW50KGEsYyl7cmV0dXJuIHRoaXMuY2F0ZWdvcnk/TWF0aC5jZWlsKHRoaXMuY2F0ZWdvcnkuaXRlbXMubGVuZ3RoL2MpOjB9LF9jb21wdXRlTXVsdGlwbGVQYWdlc0V4aXN0KGEsYyl7cmV0dXJuIWMmJjE8YX0sX2NvbXB1dGVIYXNQcmV2aW91c1BhZ2UoYSl7cmV0dXJuIDE8YX0sX2NvbXB1dGVIYXNOZXh0UGFnZShhLGMpe3JldHVybiBhPGN9LF9jb21wdXRlSW5wdXRXaWR0aChhKXtyZXR1cm5gY2FsYygke2EudG9TdHJpbmcoKS5sZW5ndGh9ZW0gKyAyMHB4KWB9LF9zZXRBY3RpdmVJbmRleChhKXtjb25zdCBjPSh0aGlzLmNhdGVnb3J5Lml0ZW1zfHxbXSkubGVuZ3RoLTE7YT5jJiYoYT1jKTswPmEmJihhPTApO3RoaXMuc2V0KCJfYWN0aXZlSW5kZXgiLAphKX0sX2NsYW1wQWN0aXZlSW5kZXgoKXt0aGlzLl9zZXRBY3RpdmVJbmRleCh0aGlzLl9hY3RpdmVJbmRleCl9LF9wZXJmb3JtUHJldmlvdXNQYWdlKCl7dGhpcy5fc2V0QWN0aXZlSW5kZXgodGhpcy5fYWN0aXZlSW5kZXgtdGhpcy5fbGltaXQpfSxfcGVyZm9ybU5leHRQYWdlKCl7dGhpcy5fc2V0QWN0aXZlSW5kZXgodGhpcy5fYWN0aXZlSW5kZXgrdGhpcy5fbGltaXQpfSxfY29tcHV0ZVBhZ2VJbnB1dFZhbHVlKGEsYyxkKXtyZXR1cm4gYT9jOmQudG9TdHJpbmcoKX0sX2hhbmRsZVBhZ2VJbnB1dEV2ZW50KGEpe3RoaXMuc2V0KCJfcGFnZUlucHV0UmF3VmFsdWUiLGEudGFyZ2V0LnZhbHVlKTthPWEudGFyZ2V0LnZhbHVlQXNOdW1iZXI7aXNOYU4oYSl8fHRoaXMuX3NldEFjdGl2ZUluZGV4KHRoaXMuX2xpbWl0KihNYXRoLm1heCgxLE1hdGgubWluKGEsdGhpcy5fcGFnZUNvdW50KSktMSkpfSxfaGFuZGxlUGFnZUNoYW5nZUV2ZW50KCl7dGhpcy5zZXQoIl9wYWdlSW5wdXRSYXdWYWx1ZSIsCnRoaXMuX2N1cnJlbnRQYWdlLnRvU3RyaW5nKCkpfSxfaGFuZGxlUGFnZUZvY3VzRXZlbnQoKXt0aGlzLnNldCgiX3BhZ2VJbnB1dFJhd1ZhbHVlIix0aGlzLl9wYWdlSW5wdXRWYWx1ZSk7dGhpcy5zZXQoIl9wYWdlSW5wdXRGb2N1c2VkIiwhMCl9LF9oYW5kbGVQYWdlQmx1ckV2ZW50KCl7dGhpcy5zZXQoIl9wYWdlSW5wdXRGb2N1c2VkIiwhMSl9LF91cGRhdGVQYWdlSW5wdXRWYWx1ZShhKXtjb25zdCBjPXRoaXMuJCQoIiNwYWdlLWlucHV0IGlucHV0Iik7YyYmKGMudmFsdWU9YSl9fSk7Cjwvc2NyaXB0Pgo8L2RvbS1tb2R1bGU+CgoKCgoKCgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vcGFwZXItZGlhbG9nLWJlaGF2aW9yL3BhcGVyLWRpYWxvZy1iZWhhdmlvci5odG1sLmpzCihmdW5jdGlvbigpe1BvbHltZXIuUGFwZXJEaWFsb2dCZWhhdmlvckltcGw9e2hvc3RBdHRyaWJ1dGVzOntyb2xlOiJkaWFsb2ciLHRhYmluZGV4OiItMSJ9LHByb3BlcnRpZXM6e21vZGFsOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LF9fcmVhZGllZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfX0sb2JzZXJ2ZXJzOlsiX21vZGFsQ2hhbmdlZChtb2RhbCwgX19yZWFkaWVkKSJdLGxpc3RlbmVyczp7dGFwOiJfb25EaWFsb2dDbGljayJ9LHJlYWR5OmZ1bmN0aW9uKCl7dGhpcy5fX3ByZXZOb0NhbmNlbE9uT3V0c2lkZUNsaWNrPXRoaXMubm9DYW5jZWxPbk91dHNpZGVDbGljazt0aGlzLl9fcHJldk5vQ2FuY2VsT25Fc2NLZXk9dGhpcy5ub0NhbmNlbE9uRXNjS2V5O3RoaXMuX19wcmV2V2l0aEJhY2tkcm9wPXRoaXMud2l0aEJhY2tkcm9wO3RoaXMuX19yZWFkaWVkPSEwfSxfbW9kYWxDaGFuZ2VkOmZ1bmN0aW9uKGEsYyl7YyYmKGE/KHRoaXMuX19wcmV2Tm9DYW5jZWxPbk91dHNpZGVDbGljaz0KdGhpcy5ub0NhbmNlbE9uT3V0c2lkZUNsaWNrLHRoaXMuX19wcmV2Tm9DYW5jZWxPbkVzY0tleT10aGlzLm5vQ2FuY2VsT25Fc2NLZXksdGhpcy5fX3ByZXZXaXRoQmFja2Ryb3A9dGhpcy53aXRoQmFja2Ryb3AsdGhpcy53aXRoQmFja2Ryb3A9dGhpcy5ub0NhbmNlbE9uRXNjS2V5PXRoaXMubm9DYW5jZWxPbk91dHNpZGVDbGljaz0hMCk6KHRoaXMubm9DYW5jZWxPbk91dHNpZGVDbGljaz10aGlzLm5vQ2FuY2VsT25PdXRzaWRlQ2xpY2smJnRoaXMuX19wcmV2Tm9DYW5jZWxPbk91dHNpZGVDbGljayx0aGlzLm5vQ2FuY2VsT25Fc2NLZXk9dGhpcy5ub0NhbmNlbE9uRXNjS2V5JiZ0aGlzLl9fcHJldk5vQ2FuY2VsT25Fc2NLZXksdGhpcy53aXRoQmFja2Ryb3A9dGhpcy53aXRoQmFja2Ryb3AmJnRoaXMuX19wcmV2V2l0aEJhY2tkcm9wKSl9LF91cGRhdGVDbG9zaW5nUmVhc29uQ29uZmlybWVkOmZ1bmN0aW9uKGEpe3RoaXMuY2xvc2luZ1JlYXNvbj10aGlzLmNsb3NpbmdSZWFzb258fAp7fTt0aGlzLmNsb3NpbmdSZWFzb24uY29uZmlybWVkPWF9LF9vbkRpYWxvZ0NsaWNrOmZ1bmN0aW9uKGEpe2Zvcih2YXIgYz1Qb2x5bWVyLmRvbShhKS5wYXRoLGQ9MCxmPWMuaW5kZXhPZih0aGlzKTtkPGY7ZCsrKXt2YXIgZz1jW2RdO2lmKGcuaGFzQXR0cmlidXRlJiYoZy5oYXNBdHRyaWJ1dGUoImRpYWxvZy1kaXNtaXNzIil8fGcuaGFzQXR0cmlidXRlKCJkaWFsb2ctY29uZmlybSIpKSl7dGhpcy5fdXBkYXRlQ2xvc2luZ1JlYXNvbkNvbmZpcm1lZChnLmhhc0F0dHJpYnV0ZSgiZGlhbG9nLWNvbmZpcm0iKSk7dGhpcy5jbG9zZSgpO2Euc3RvcFByb3BhZ2F0aW9uKCk7YnJlYWt9fX19O1BvbHltZXIuUGFwZXJEaWFsb2dCZWhhdmlvcj1bUG9seW1lci5Jcm9uT3ZlcmxheUJlaGF2aW9yLFBvbHltZXIuUGFwZXJEaWFsb2dCZWhhdmlvckltcGxdfSkoKTsKPC9zY3JpcHQ+CgoKCgoKCgoKCjxkb20tbW9kdWxlIGlkPSJwYXBlci1kaWFsb2ctc2hhcmVkLXN0eWxlcyI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgbWFyZ2luOiAyNHB4IDQwcHg7CgogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXBhcGVyLWRpYWxvZy1iYWNrZ3JvdW5kLWNvbG9yLCB2YXIoLS1wcmltYXJ5LWJhY2tncm91bmQtY29sb3IpKTsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItZGlhbG9nLWNvbG9yLCB2YXIoLS1wcmltYXJ5LXRleHQtY29sb3IpKTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1ib2R5MTsKICAgICAgICBAYXBwbHkgLS1zaGFkb3ctZWxldmF0aW9uLTE2ZHA7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZGlhbG9nOwogICAgICB9CgogICAgICA6aG9zdCA+IDo6c2xvdHRlZCgqKSB7CiAgICAgICAgbWFyZ2luLXRvcDogMjBweDsKICAgICAgICBwYWRkaW5nOiAwIDI0cHg7CiAgICAgIH0KCiAgICAgIDpob3N0ID4gOjpzbG90dGVkKC5uby1wYWRkaW5nKSB7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgfQoKICAgICAgCiAgICAgIDpob3N0ID4gOjpzbG90dGVkKCo6Zmlyc3QtY2hpbGQpIHsKICAgICAgICBtYXJnaW4tdG9wOiAyNHB4OwogICAgICB9CgogICAgICA6aG9zdCA+IDo6c2xvdHRlZCgqOmxhc3QtY2hpbGQpIHsKICAgICAgICBtYXJnaW4tYm90dG9tOiAyNHB4OwogICAgICB9CgogICAgICAvKiBJbiAxLngsIHRoaXMgc2VsZWN0b3Igd2FzIGA6aG9zdCA+IDo6Y29udGVudCBoMmAuIEluIDIueCA8c2xvdD4gYWxsb3dzCiAgICAgIHRvIHNlbGVjdCBkaXJlY3QgY2hpbGRyZW4gb25seSwgd2hpY2ggaW5jcmVhc2VzIHRoZSB3ZWlnaHQgb2YgdGhpcwogICAgICBzZWxlY3Rvciwgc28gd2UgaGF2ZSB0byByZS1kZWZpbmUgZmlyc3QtY2hpbGQvbGFzdC1jaGlsZCBtYXJnaW5zIGJlbG93LiAqLwogICAgICA6aG9zdCA+IDo6c2xvdHRlZChoMikgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBtYXJnaW46IDA7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtdGl0bGU7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZGlhbG9nLXRpdGxlOwogICAgICB9CgogICAgICAvKiBBcHBseSBtaXhpbiBhZ2FpbiwgaW4gY2FzZSBpdCBzZXRzIG1hcmdpbi10b3AuICovCiAgICAgIDpob3N0ID4gOjpzbG90dGVkKGgyOmZpcnN0LWNoaWxkKSB7CiAgICAgICAgbWFyZ2luLXRvcDogMjRweDsKICAgICAgICBAYXBwbHkgLS1wYXBlci1kaWFsb2ctdGl0bGU7CiAgICAgIH0KCiAgICAgIC8qIEFwcGx5IG1peGluIGFnYWluLCBpbiBjYXNlIGl0IHNldHMgbWFyZ2luLWJvdHRvbS4gKi8KICAgICAgOmhvc3QgPiA6OnNsb3R0ZWQoaDI6bGFzdC1jaGlsZCkgewogICAgICAgIG1hcmdpbi1ib3R0b206IDI0cHg7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZGlhbG9nLXRpdGxlOwogICAgICB9CgogICAgICA6aG9zdCA+IDo6c2xvdHRlZCgucGFwZXItZGlhbG9nLWJ1dHRvbnMpLAogICAgICA6aG9zdCA+IDo6c2xvdHRlZCguYnV0dG9ucykgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBwYWRkaW5nOiA4cHggOHB4IDhweCAyNHB4OwogICAgICAgIG1hcmdpbjogMDsKCiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWRpYWxvZy1idXR0b24tY29sb3IsIHZhcigtLXByaW1hcnktY29sb3IpKTsKCiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWhvcml6b250YWw7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWVuZC1qdXN0aWZpZWQ7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPgoKCgo8ZG9tLW1vZHVsZSBpZD0icGFwZXItZGlhbG9nIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGUgaW5jbHVkZT0icGFwZXItZGlhbG9nLXNoYXJlZC1zdHlsZXMiPjwvc3R5bGU+CiAgICA8c2xvdD48L3Nsb3Q+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPgoKPHNjcmlwdD4vL35+V0VCUEFUSH5+L3BhcGVyLWRpYWxvZy9wYXBlci1kaWFsb2cuaHRtbC5qcwpQb2x5bWVyKHtpczoicGFwZXItZGlhbG9nIixiZWhhdmlvcnM6W1BvbHltZXIuUGFwZXJEaWFsb2dCZWhhdmlvcixQb2x5bWVyLk5lb25BbmltYXRpb25SdW5uZXJCZWhhdmlvcl0sbGlzdGVuZXJzOnsibmVvbi1hbmltYXRpb24tZmluaXNoIjoiX29uTmVvbkFuaW1hdGlvbkZpbmlzaCJ9LF9yZW5kZXJPcGVuZWQ6ZnVuY3Rpb24oKXt0aGlzLmNhbmNlbEFuaW1hdGlvbigpO3RoaXMucGxheUFuaW1hdGlvbigiZW50cnkiKX0sX3JlbmRlckNsb3NlZDpmdW5jdGlvbigpe3RoaXMuY2FuY2VsQW5pbWF0aW9uKCk7dGhpcy5wbGF5QW5pbWF0aW9uKCJleGl0Iil9LF9vbk5lb25BbmltYXRpb25GaW5pc2g6ZnVuY3Rpb24oKXt0aGlzLm9wZW5lZD90aGlzLl9maW5pc2hSZW5kZXJPcGVuZWQoKTp0aGlzLl9maW5pc2hSZW5kZXJDbG9zZWQoKX19KTsKPC9zY3JpcHQ+CgoKCgoKCgoKCjxkb20tbW9kdWxlIGlkPSJ0Zi1jb2xvci1zY2FsZSI+CiAgPHNjcmlwdD4vL35+V0VCUEFUSH5+L3RmLWNvbG9yLXNjYWxlL3BhbGV0dGVzLmpzCnZhciBabDsKKGZ1bmN0aW9uKGEpe2EucGFsZXR0ZXM9e2dvb2dsZVN0YW5kYXJkOiIjZGI0NDM3ICNmZjcwNDMgI2Y0YjQwMCAjMGY5ZDU4ICMwMDc5NmIgIzAwYWNjMSAjNDI4NWY0ICM1YzZiYzAgI2FiNDdiYyIuc3BsaXQoIiAiKSxnb29nbGVDb29sOiIjOWU5ZDI0ICMwZjlkNTggIzAwNzk2YiAjMDBhY2MxICM0Mjg1ZjQgIzVjNmJjMCAjNjA3ZDhiIi5zcGxpdCgiICIpLGdvb2dsZVdhcm06IiM3OTU1NDggI2FiNDdiYyAjZjA2MjkyICNjMjE4NWIgI2RiNDQzNyAjZmY3MDQzICNmNGI0MDAiLnNwbGl0KCIgIiksZ29vZ2xlQ29sb3JCbGluZEFzc2lzdDoiI2ZmNzA0MyAjMDBBQ0MxICNBQjQ3QkMgIzJBNTZDNiAjMGI4MDQzICNGN0NCNEQgI2MwY2EzMyAjNWUzNWIxICNBNTI3MTQiLnNwbGl0KCIgIiksdGVuc29yYm9hcmRDb2xvckJsaW5kQXNzaXN0OiIjZmY3MDQzICMwMDc3YmIgI2NjMzMxMSAjMzNiYmVlICNlZTMzNzcgIzAwOTk4OCAjYmJiYmJiIi5zcGxpdCgiICIpLGNvbG9yQmxpbmRBc3Npc3QxOiIjNDQ3N2FhICM0NGFhYWEgI2FhYWE0NCAjYWE3NzQ0ICNhYTQ0NTUgI2FhNDQ4OCIuc3BsaXQoIiAiKSxjb2xvckJsaW5kQXNzaXN0MjoiIzg4Y2NlZSAjNDRhYTk5ICMxMTc3MzMgIzk5OTkzMyAjZGRjYzc3ICNjYzY2NzcgIzg4MjI1NSAjYWE0NDk5Ii5zcGxpdCgiICIpLApjb2xvckJsaW5kQXNzaXN0MzoiIzMzMjI4OCAjNjY5OWNjICM4OGNjZWUgIzQ0YWE5OSAjMTE3NzMzICM5OTk5MzMgI2RkY2M3NyAjY2M2Njc3ICNhYTQ0NjYgIzg4MjI1NSAjNjYxMTAwICNhYTQ0OTkiLnNwbGl0KCIgIiksY29sb3JCbGluZEFzc2lzdDQ6IiM0NDc3YWEgIzY2Y2NlZSAjMjI4ODMzICNjY2JiNDQgI2VlNjY3NyAjYWEzMzc3ICNiYmJiYmIiLnNwbGl0KCIgIiksY29sb3JCbGluZEFzc2lzdDU6IiNGRjZEQjYgIzkyMDAwMCAjOTI0OTAwICNEQkQxMDAgIzI0RkYyNCAjMDA2RERCICM0OTAwOTIiLnNwbGl0KCIgIiksbWxkYXNoOiIjRTQ3RUFEICNGNDY0MEQgI0ZBQTMwMCAjRjVFNjM2ICMwMEEwNzcgIzAwNzdCOCAjMDBCN0VEIi5zcGxpdCgiICIpfTthLnN0YW5kYXJkPWEucGFsZXR0ZXMudGVuc29yYm9hcmRDb2xvckJsaW5kQXNzaXN0fSkoWmx8fChabD17fSkpOwo8L3NjcmlwdD4KICA8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdGYtY29sb3Itc2NhbGUvY29sb3JTY2FsZS5qcwooZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYyhmLGcpe2Z1bmN0aW9uIGwoKXtrLnNldERvbWFpbihnKCkpfWNvbnN0IGs9bmV3IGQ7Zi5hZGRMaXN0ZW5lcihsKTtsKCk7cmV0dXJuIG09PmsuZ2V0Q29sb3IobSl9Y2xhc3MgZHtjb25zdHJ1Y3RvcihmPWEuc3RhbmRhcmQpe3RoaXMucGFsZXR0ZT1mO3RoaXMuaWRlbnRpZmllcnM9ZDMubWFwKCl9c2V0RG9tYWluKGYpe3RoaXMuaWRlbnRpZmllcnM9ZDMubWFwKCk7Zi5mb3JFYWNoKChnLGwpPT57dGhpcy5pZGVudGlmaWVycy5zZXQoZyx0aGlzLnBhbGV0dGVbbCV0aGlzLnBhbGV0dGUubGVuZ3RoXSl9KX1nZXRDb2xvcihmKXtpZighdGhpcy5pZGVudGlmaWVycy5oYXMoZikpdGhyb3cgRXJyb3IoYFN0cmluZyAke2Z9IHdhcyBub3QgaW4gdGhlIGRvbWFpbi5gKTtyZXR1cm4gdGhpcy5pZGVudGlmaWVycy5nZXQoZil9fWEuQ29sb3JTY2FsZT1kO2EucnVuc0NvbG9yU2NhbGU9YyhQay5ydW5zU3RvcmUsKCk9PlBrLnJ1bnNTdG9yZS5nZXRSdW5zKCkpOwphLmV4cGVyaW1lbnRzQ29sb3JTY2FsZT1jKFBrLmV4cGVyaW1lbnRzU3RvcmUsKCk9PlBrLmV4cGVyaW1lbnRzU3RvcmUuZ2V0RXhwZXJpbWVudHMoKS5tYXAoKHtuYW1lOmZ9KT0+ZikpfSkoWmx8fChabD17fSkpOwo8L3NjcmlwdD4KPC9kb20tbW9kdWxlPgoKCgoKPGlyb24taWNvbnNldC1zdmcgbmFtZT0iaWNvbnMiIHNpemU9IjI0Ij4KPHN2Zz48ZGVmcz4KPGcgaWQ9IjNkLXJvdGF0aW9uIj48cGF0aCBkPSJNNy41MiAyMS40OEM0LjI1IDE5Ljk0IDEuOTEgMTYuNzYgMS41NSAxM0guMDVDLjU2IDE5LjE2IDUuNzEgMjQgMTIgMjRsLjY2LS4wMy0zLjgxLTMuODEtMS4zMyAxLjMyem0uODktNi41MmMtLjE5IDAtLjM3LS4wMy0uNTItLjA4LS4xNi0uMDYtLjI5LS4xMy0uNC0uMjQtLjExLS4xLS4yLS4yMi0uMjYtLjM3LS4wNi0uMTQtLjA5LS4zLS4wOS0uNDdoLTEuM2MwIC4zNi4wNy42OC4yMS45NS4xNC4yNy4zMy41LjU2LjY5LjI0LjE4LjUxLjMyLjgyLjQxLjMuMS42Mi4xNS45Ni4xNS4zNyAwIC43Mi0uMDUgMS4wMy0uMTUuMzItLjEuNi0uMjUuODMtLjQ0cy40Mi0uNDMuNTUtLjcyYy4xMy0uMjkuMi0uNjEuMi0uOTcgMC0uMTktLjAyLS4zOC0uMDctLjU2LS4wNS0uMTgtLjEyLS4zNS0uMjMtLjUxLS4xLS4xNi0uMjQtLjMtLjQtLjQzLS4xNy0uMTMtLjM3LS4yMy0uNjEtLjMxLjItLjA5LjM3LS4yLjUyLS4zMy4xNS0uMTMuMjctLjI3LjM3LS40Mi4xLS4xNS4xNy0uMy4yMi0uNDYuMDUtLjE2LjA3LS4zMi4wNy0uNDggMC0uMzYtLjA2LS42OC0uMTgtLjk2LS4xMi0uMjgtLjI5LS41MS0uNTEtLjY5LS4yLS4xOS0uNDctLjMzLS43Ny0uNDNDOS4xIDguMDUgOC43NiA4IDguMzkgOGMtLjM2IDAtLjY5LjA1LTEgLjE2LS4zLjExLS41Ny4yNi0uNzkuNDUtLjIxLjE5LS4zOC40MS0uNTEuNjctLjEyLjI2LS4xOC41NC0uMTguODVoMS4zYzAtLjE3LjAzLS4zMi4wOS0uNDVzLjE0LS4yNS4yNS0uMzRjLjExLS4wOS4yMy0uMTcuMzgtLjIyLjE1LS4wNS4zLS4wOC40OC0uMDguNCAwIC43LjEuODkuMzEuMTkuMi4yOS40OS4yOS44NiAwIC4xOC0uMDMuMzQtLjA4LjQ5LS4wNS4xNS0uMTQuMjctLjI1LjM3LS4xMS4xLS4yNS4xOC0uNDEuMjQtLjE2LjA2LS4zNi4wOS0uNTguMDlINy41djEuMDNoLjc3Yy4yMiAwIC40Mi4wMi42LjA3cy4zMy4xMy40NS4yM2MuMTIuMTEuMjIuMjQuMjkuNC4wNy4xNi4xLjM1LjEuNTcgMCAuNDEtLjEyLjcyLS4zNS45My0uMjMuMjMtLjU1LjMzLS45NS4zM3ptOC41NS01LjkyYy0uMzItLjMzLS43LS41OS0xLjE0LS43Ny0uNDMtLjE4LS45Mi0uMjctMS40Ni0uMjdIMTJ2OGgyLjNjLjU1IDAgMS4wNi0uMDkgMS41MS0uMjcuNDUtLjE4Ljg0LS40MyAxLjE2LS43Ni4zMi0uMzMuNTctLjczLjc0LTEuMTkuMTctLjQ3LjI2LS45OS4yNi0xLjU3di0uNGMwLS41OC0uMDktMS4xLS4yNi0xLjU3LS4xOC0uNDctLjQzLS44Ny0uNzUtMS4yem0tLjM5IDMuMTZjMCAuNDItLjA1Ljc5LS4xNCAxLjEzLS4xLjMzLS4yNC42Mi0uNDMuODUtLjE5LjIzLS40My40MS0uNzEuNTMtLjI5LjEyLS42Mi4xOC0uOTkuMThoLS45MVY5LjEyaC45N2MuNzIgMCAxLjI3LjIzIDEuNjQuNjkuMzguNDYuNTcgMS4xMi41NyAxLjk5di40ek0xMiAwbC0uNjYuMDMgMy44MSAzLjgxIDEuMzMtMS4zM2MzLjI3IDEuNTUgNS42MSA0LjcyIDUuOTYgOC40OGgxLjVDMjMuNDQgNC44NCAxOC4yOSAwIDEyIDB6IiAvPjwvZz4KPGcgaWQ9ImFjY2Vzc2liaWxpdHkiPjxwYXRoIGQ9Ik0xMiAyYzEuMSAwIDIgLjkgMiAycy0uOSAyLTIgMi0yLS45LTItMiAuOS0yIDItMnptOSA3aC02djEzaC0ydi02aC0ydjZIOVY5SDNWN2gxOHYyeiIgLz48L2c+CjxnIGlkPSJhY2Nlc3NpYmxlIj48Y2lyY2xlIGN4PSIxMiIgY3k9IjQiIHI9IjIiIC8+PHBhdGggZD0iTTE5IDEzdi0yYy0xLjU0LjAyLTMuMDktLjc1LTQuMDctMS44M2wtMS4yOS0xLjQzYy0uMTctLjE5LS4zOC0uMzQtLjYxLS40NS0uMDEgMC0uMDEtLjAxLS4wMi0uMDFIMTNjLS4zNS0uMi0uNzUtLjMtMS4xOS0uMjZDMTAuNzYgNy4xMSAxMCA4LjA0IDEwIDkuMDlWMTVjMCAxLjEuOSAyIDIgMmg1djVoMnYtNS41YzAtMS4xLS45LTItMi0yaC0zdi0zLjQ1YzEuMjkgMS4wNyAzLjI1IDEuOTQgNSAxLjk1em0tNi4xNyA1Yy0uNDEgMS4xNi0xLjUyIDItMi44MyAyLTEuNjYgMC0zLTEuMzQtMy0zIDAtMS4zMS44NC0yLjQxIDItMi44M1YxMi4xYy0yLjI4LjQ2LTQgMi40OC00IDQuOSAwIDIuNzYgMi4yNCA1IDUgNSAyLjQyIDAgNC40NC0xLjcyIDQuOS00aC0yLjA3eiIgLz48L2c+CjxnIGlkPSJhY2NvdW50LWJhbGFuY2UiPjxwYXRoIGQ9Ik00IDEwdjdoM3YtN0g0em02IDB2N2gzdi03aC0zek0yIDIyaDE5di0zSDJ2M3ptMTQtMTJ2N2gzdi03aC0zem0tNC41LTlMMiA2djJoMTlWNmwtOS41LTV6IiAvPjwvZz4KPGcgaWQ9ImFjY291bnQtYmFsYW5jZS13YWxsZXQiPjxwYXRoIGQ9Ik0yMSAxOHYxYzAgMS4xLS45IDItMiAySDVjLTEuMTEgMC0yLS45LTItMlY1YzAtMS4xLjg5LTIgMi0yaDE0YzEuMSAwIDIgLjkgMiAydjFoLTljLTEuMTEgMC0yIC45LTIgMnY4YzAgMS4xLjg5IDIgMiAyaDl6bS05LTJoMTBWOEgxMnY4em00LTIuNWMtLjgzIDAtMS41LS42Ny0xLjUtMS41cy42Ny0xLjUgMS41LTEuNSAxLjUuNjcgMS41IDEuNS0uNjcgMS41LTEuNSAxLjV6IiAvPjwvZz4KPGcgaWQ9ImFjY291bnQtYm94Ij48cGF0aCBkPSJNMyA1djE0YzAgMS4xLjg5IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJINWMtMS4xMSAwLTIgLjktMiAyem0xMiA0YzAgMS42Ni0xLjM0IDMtMyAzcy0zLTEuMzQtMy0zIDEuMzQtMyAzLTMgMyAxLjM0IDMgM3ptLTkgOGMwLTIgNC0zLjEgNi0zLjFzNiAxLjEgNiAzLjF2MUg2di0xeiIgLz48L2c+CjxnIGlkPSJhY2NvdW50LWNpcmNsZSI+PHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTAgM2MxLjY2IDAgMyAxLjM0IDMgM3MtMS4zNCAzLTMgMy0zLTEuMzQtMy0zIDEuMzQtMyAzLTN6bTAgMTQuMmMtMi41IDAtNC43MS0xLjI4LTYtMy4yMi4wMy0xLjk5IDQtMy4wOCA2LTMuMDggMS45OSAwIDUuOTcgMS4wOSA2IDMuMDgtMS4yOSAxLjk0LTMuNSAzLjIyLTYgMy4yMnoiIC8+PC9nPgo8ZyBpZD0iYWRkIj48cGF0aCBkPSJNMTkgMTNoLTZ2NmgtMnYtNkg1di0yaDZWNWgydjZoNnYyeiIgLz48L2c+CjxnIGlkPSJhZGQtYWxlcnQiPjxwYXRoIGQ9Ik0xMC4wMSAyMS4wMWMwIDEuMS44OSAxLjk5IDEuOTkgMS45OXMxLjk5LS44OSAxLjk5LTEuOTloLTMuOTh6bTguODctNC4xOVYxMWMwLTMuMjUtMi4yNS01Ljk3LTUuMjktNi42OXYtLjcyQzEzLjU5IDIuNzEgMTIuODggMiAxMiAycy0xLjU5LjcxLTEuNTkgMS41OXYuNzJDNy4zNyA1LjAzIDUuMTIgNy43NSA1LjEyIDExdjUuODJMMyAxOC45NFYyMGgxOHYtMS4wNmwtMi4xMi0yLjEyek0xNiAxMy4wMWgtM3YzaC0ydi0zSDhWMTFoM1Y4aDJ2M2gzdjIuMDF6IiAvPjwvZz4KPGcgaWQ9ImFkZC1ib3giPjxwYXRoIGQ9Ik0xOSAzSDVjLTEuMTEgMC0yIC45LTIgMnYxNGMwIDEuMS44OSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tMiAxMGgtNHY0aC0ydi00SDd2LTJoNFY3aDJ2NGg0djJ6IiAvPjwvZz4KPGcgaWQ9ImFkZC1jaXJjbGUiPjxwYXRoIGQ9Ik0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem01IDExaC00djRoLTJ2LTRIN3YtMmg0VjdoMnY0aDR2MnoiIC8+PC9nPgo8ZyBpZD0iYWRkLWNpcmNsZS1vdXRsaW5lIj48cGF0aCBkPSJNMTMgN2gtMnY0SDd2Mmg0djRoMnYtNGg0di0yaC00Vjd6bS0xLTVDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTAgMThjLTQuNDEgMC04LTMuNTktOC04czMuNTktOCA4LTggOCAzLjU5IDggOC0zLjU5IDgtOCA4eiIgLz48L2c+CjxnIGlkPSJhZGQtc2hvcHBpbmctY2FydCI+PHBhdGggZD0iTTExIDloMlY2aDNWNGgtM1YxaC0ydjNIOHYyaDN2M3ptLTQgOWMtMS4xIDAtMS45OS45LTEuOTkgMlM1LjkgMjIgNyAyMnMyLS45IDItMi0uOS0yLTItMnptMTAgMGMtMS4xIDAtMS45OS45LTEuOTkgMnMuODkgMiAxLjk5IDIgMi0uOSAyLTItLjktMi0yLTJ6bS05LjgzLTMuMjVsLjAzLS4xMi45LTEuNjNoNy40NWMuNzUgMCAxLjQxLS40MSAxLjc1LTEuMDNsMy44Ni03LjAxTDE5LjQyIDRoLS4wMWwtMS4xIDItMi43NiA1SDguNTNsLS4xMy0uMjdMNi4xNiA2bC0uOTUtMi0uOTQtMkgxdjJoMmwzLjYgNy41OS0xLjM1IDIuNDVjLS4xNi4yOC0uMjUuNjEtLjI1Ljk2IDAgMS4xLjkgMiAyIDJoMTJ2LTJINy40MmMtLjEzIDAtLjI1LS4xMS0uMjUtLjI1eiIgLz48L2c+CjxnIGlkPSJhbGFybSI+PHBhdGggZD0iTTIyIDUuNzJsLTQuNi0zLjg2LTEuMjkgMS41MyA0LjYgMy44NkwyMiA1Ljcyek03Ljg4IDMuMzlMNi42IDEuODYgMiA1LjcxbDEuMjkgMS41MyA0LjU5LTMuODV6TTEyLjUgOEgxMXY2bDQuNzUgMi44NS43NS0xLjIzLTQtMi4zN1Y4ek0xMiA0Yy00Ljk3IDAtOSA0LjAzLTkgOXM0LjAyIDkgOSA5YzQuOTcgMCA5LTQuMDMgOS05cy00LjAzLTktOS05em0wIDE2Yy0zLjg3IDAtNy0zLjEzLTctN3MzLjEzLTcgNy03IDcgMy4xMyA3IDctMy4xMyA3LTcgN3oiIC8+PC9nPgo8ZyBpZD0iYWxhcm0tYWRkIj48cGF0aCBkPSJNNy44OCAzLjM5TDYuNiAxLjg2IDIgNS43MWwxLjI5IDEuNTMgNC41OS0zLjg1ek0yMiA1LjcybC00LjYtMy44Ni0xLjI5IDEuNTMgNC42IDMuODZMMjIgNS43MnpNMTIgNGMtNC45NyAwLTkgNC4wMy05IDlzNC4wMiA5IDkgOWM0Ljk3IDAgOS00LjAzIDktOXMtNC4wMy05LTktOXptMCAxNmMtMy44NyAwLTctMy4xMy03LTdzMy4xMy03IDctNyA3IDMuMTMgNyA3LTMuMTMgNy03IDd6bTEtMTFoLTJ2M0g4djJoM3YzaDJ2LTNoM3YtMmgtM1Y5eiIgLz48L2c+CjxnIGlkPSJhbGFybS1vZmYiPjxwYXRoIGQ9Ik0xMiA2YzMuODcgMCA3IDMuMTMgNyA3IDAgLjg0LS4xNiAxLjY1LS40MyAyLjRsMS41MiAxLjUyYy41OC0xLjE5LjkxLTIuNTEuOTEtMy45MiAwLTQuOTctNC4wMy05LTktOS0xLjQxIDAtMi43My4zMy0zLjkyLjkxTDkuNiA2LjQzQzEwLjM1IDYuMTYgMTEuMTYgNiAxMiA2em0xMC0uMjhsLTQuNi0zLjg2LTEuMjkgMS41MyA0LjYgMy44NkwyMiA1Ljcyek0yLjkyIDIuMjlMMS42NSAzLjU3IDIuOTggNC45bC0xLjExLjkzIDEuNDIgMS40MiAxLjExLS45NC44LjhDMy44MyA4LjY5IDMgMTAuNzUgMyAxM2MwIDQuOTcgNC4wMiA5IDkgOSAyLjI1IDAgNC4zMS0uODMgNS44OS0yLjJsMi4yIDIuMiAxLjI3LTEuMjdMMy44OSAzLjI3bC0uOTctLjk4em0xMy41NSAxNi4xQzE1LjI2IDE5LjM5IDEzLjcgMjAgMTIgMjBjLTMuODcgMC03LTMuMTMtNy03IDAtMS43LjYxLTMuMjYgMS42MS00LjQ3bDkuODYgOS44NnpNOC4wMiAzLjI4TDYuNiAxLjg2bC0uODYuNzEgMS40MiAxLjQyLjg2LS43MXoiIC8+PC9nPgo8ZyBpZD0iYWxhcm0tb24iPjxwYXRoIGQ9Ik0yMiA1LjcybC00LjYtMy44Ni0xLjI5IDEuNTMgNC42IDMuODZMMjIgNS43MnpNNy44OCAzLjM5TDYuNiAxLjg2IDIgNS43MWwxLjI5IDEuNTMgNC41OS0zLjg1ek0xMiA0Yy00Ljk3IDAtOSA0LjAzLTkgOXM0LjAyIDkgOSA5YzQuOTcgMCA5LTQuMDMgOS05cy00LjAzLTktOS05em0wIDE2Yy0zLjg3IDAtNy0zLjEzLTctN3MzLjEzLTcgNy03IDcgMy4xMyA3IDctMy4xMyA3LTcgN3ptLTEuNDYtNS40N0w4LjQxIDEyLjRsLTEuMDYgMS4wNiAzLjE4IDMuMTggNi02LTEuMDYtMS4wNi00LjkzIDQuOTV6IiAvPjwvZz4KPGcgaWQ9ImFsbC1vdXQiPjxwYXRoIGQ9Ik0xNi4yMSA0LjE2bDQgNHYtNHptNCAxMmwtNCA0aDR6bS0xMiA0bC00LTR2NHptLTQtMTJsNC00aC00em0xMi45NS0uOTVjLTIuNzMtMi43My03LjE3LTIuNzMtOS45IDBzLTIuNzMgNy4xNyAwIDkuOSA3LjE3IDIuNzMgOS45IDAgMi43My03LjE2IDAtOS45em0tMS4xIDguOGMtMi4xMyAyLjEzLTUuNTcgMi4xMy03LjcgMHMtMi4xMy01LjU3IDAtNy43IDUuNTctMi4xMyA3LjcgMCAyLjEzIDUuNTcgMCA3Ljd6IiAvPjwvZz4KPGcgaWQ9ImFuZHJvaWQiPjxwYXRoIGQ9Ik02IDE4YzAgLjU1LjQ1IDEgMSAxaDF2My41YzAgLjgzLjY3IDEuNSAxLjUgMS41czEuNS0uNjcgMS41LTEuNVYxOWgydjMuNWMwIC44My42NyAxLjUgMS41IDEuNXMxLjUtLjY3IDEuNS0xLjVWMTloMWMuNTUgMCAxLS40NSAxLTFWOEg2djEwek0zLjUgOEMyLjY3IDggMiA4LjY3IDIgOS41djdjMCAuODMuNjcgMS41IDEuNSAxLjVTNSAxNy4zMyA1IDE2LjV2LTdDNSA4LjY3IDQuMzMgOCAzLjUgOHptMTcgMGMtLjgzIDAtMS41LjY3LTEuNSAxLjV2N2MwIC44My42NyAxLjUgMS41IDEuNXMxLjUtLjY3IDEuNS0xLjV2LTdjMC0uODMtLjY3LTEuNS0xLjUtMS41em0tNC45Ny01Ljg0bDEuMy0xLjNjLjItLjIuMi0uNTEgMC0uNzEtLjItLjItLjUxLS4yLS43MSAwbC0xLjQ4IDEuNDhDMTMuODUgMS4yMyAxMi45NSAxIDEyIDFjLS45NiAwLTEuODYuMjMtMi42Ni42M0w3Ljg1LjE1Yy0uMi0uMi0uNTEtLjItLjcxIDAtLjIuMi0uMi41MSAwIC43MWwxLjMxIDEuMzFDNi45NyAzLjI2IDYgNS4wMSA2IDdoMTJjMC0xLjk5LS45Ny0zLjc1LTIuNDctNC44NHpNMTAgNUg5VjRoMXYxem01IDBoLTFWNGgxdjF6IiAvPjwvZz4KPGcgaWQ9ImFubm91bmNlbWVudCI+PHBhdGggZD0iTTIwIDJINGMtMS4xIDAtMS45OS45LTEuOTkgMkwyIDIybDQtNGgxNGMxLjEgMCAyLS45IDItMlY0YzAtMS4xLS45LTItMi0yem0tNyA5aC0yVjVoMnY2em0wIDRoLTJ2LTJoMnYyeiIgLz48L2c+CjxnIGlkPSJhcHBzIj48cGF0aCBkPSJNNCA4aDRWNEg0djR6bTYgMTJoNHYtNGgtNHY0em0tNiAwaDR2LTRINHY0em0wLTZoNHYtNEg0djR6bTYgMGg0di00aC00djR6bTYtMTB2NGg0VjRoLTR6bS02IDRoNFY0aC00djR6bTYgNmg0di00aC00djR6bTAgNmg0di00aC00djR6IiAvPjwvZz4KPGcgaWQ9ImFyY2hpdmUiPjxwYXRoIGQ9Ik0yMC41NCA1LjIzbC0xLjM5LTEuNjhDMTguODggMy4yMSAxOC40NyAzIDE4IDNINmMtLjQ3IDAtLjg4LjIxLTEuMTYuNTVMMy40NiA1LjIzQzMuMTcgNS41NyAzIDYuMDIgMyA2LjVWMTljMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY2LjVjMC0uNDgtLjE3LS45My0uNDYtMS4yN3pNMTIgMTcuNUw2LjUgMTJIMTB2LTJoNHYyaDMuNUwxMiAxNy41ek01LjEyIDVsLjgxLTFoMTJsLjk0IDFINS4xMnoiIC8+PC9nPgo8ZyBpZD0iYXJyb3ctYmFjayI+PHBhdGggZD0iTTIwIDExSDcuODNsNS41OS01LjU5TDEyIDRsLTggOCA4IDggMS40MS0xLjQxTDcuODMgMTNIMjB2LTJ6IiAvPjwvZz4KPGcgaWQ9ImFycm93LWRvd253YXJkIj48cGF0aCBkPSJNMjAgMTJsLTEuNDEtMS40MUwxMyAxNi4xN1Y0aC0ydjEyLjE3bC01LjU4LTUuNTlMNCAxMmw4IDggOC04eiIgLz48L2c+CjxnIGlkPSJhcnJvdy1kcm9wLWRvd24iPjxwYXRoIGQ9Ik03IDEwbDUgNSA1LTV6IiAvPjwvZz4KPGcgaWQ9ImFycm93LWRyb3AtZG93bi1jaXJjbGUiPjxwYXRoIGQ9Ik0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0wIDEybC00LTRoOGwtNCA0eiIgLz48L2c+CjxnIGlkPSJhcnJvdy1kcm9wLXVwIj48cGF0aCBkPSJNNyAxNGw1LTUgNSA1eiIgLz48L2c+CjxnIGlkPSJhcnJvdy1mb3J3YXJkIj48cGF0aCBkPSJNMTIgNGwtMS40MSAxLjQxTDE2LjE3IDExSDR2MmgxMi4xN2wtNS41OCA1LjU5TDEyIDIwbDgtOHoiIC8+PC9nPgo8ZyBpZD0iYXJyb3ctdXB3YXJkIj48cGF0aCBkPSJNNCAxMmwxLjQxIDEuNDFMMTEgNy44M1YyMGgyVjcuODNsNS41OCA1LjU5TDIwIDEybC04LTgtOCA4eiIgLz48L2c+CjxnIGlkPSJhc3BlY3QtcmF0aW8iPjxwYXRoIGQ9Ik0xOSAxMmgtMnYzaC0zdjJoNXYtNXpNNyA5aDNWN0g1djVoMlY5em0xNC02SDNjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMThjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptMCAxNi4wMUgzVjQuOTloMTh2MTQuMDJ6IiAvPjwvZz4KPGcgaWQ9ImFzc2Vzc21lbnQiPjxwYXRoIGQ9Ik0xOSAzSDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnpNOSAxN0g3di03aDJ2N3ptNCAwaC0yVjdoMnYxMHptNCAwaC0ydi00aDJ2NHoiIC8+PC9nPgo8ZyBpZD0iYXNzaWdubWVudCI+PHBhdGggZD0iTTE5IDNoLTQuMThDMTQuNCAxLjg0IDEzLjMgMSAxMiAxYy0xLjMgMC0yLjQuODQtMi44MiAySDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptLTcgMGMuNTUgMCAxIC40NSAxIDFzLS40NSAxLTEgMS0xLS40NS0xLTEgLjQ1LTEgMS0xem0yIDE0SDd2LTJoN3Yyem0zLTRIN3YtMmgxMHYyem0wLTRIN1Y3aDEwdjJ6IiAvPjwvZz4KPGcgaWQ9ImFzc2lnbm1lbnQtaW5kIj48cGF0aCBkPSJNMTkgM2gtNC4xOEMxNC40IDEuODQgMTMuMyAxIDEyIDFjLTEuMyAwLTIuNC44NC0yLjgyIDJINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tNyAwYy41NSAwIDEgLjQ1IDEgMXMtLjQ1IDEtMSAxLTEtLjQ1LTEtMSAuNDUtMSAxLTF6bTAgNGMxLjY2IDAgMyAxLjM0IDMgM3MtMS4zNCAzLTMgMy0zLTEuMzQtMy0zIDEuMzQtMyAzLTN6bTYgMTJINnYtMS40YzAtMiA0LTMuMSA2LTMuMXM2IDEuMSA2IDMuMVYxOXoiIC8+PC9nPgo8ZyBpZD0iYXNzaWdubWVudC1sYXRlIj48cGF0aCBkPSJNMTkgM2gtNC4xOEMxNC40IDEuODQgMTMuMyAxIDEyIDFjLTEuMyAwLTIuNC44NC0yLjgyIDJINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tNiAxNWgtMnYtMmgydjJ6bTAtNGgtMlY4aDJ2NnptLTEtOWMtLjU1IDAtMS0uNDUtMS0xcy40NS0xIDEtMSAxIC40NSAxIDEtLjQ1IDEtMSAxeiIgLz48L2c+CjxnIGlkPSJhc3NpZ25tZW50LXJldHVybiI+PHBhdGggZD0iTTE5IDNoLTQuMThDMTQuNCAxLjg0IDEzLjMgMSAxMiAxYy0xLjMgMC0yLjQuODQtMi44MiAySDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptLTcgMGMuNTUgMCAxIC40NSAxIDFzLS40NSAxLTEgMS0xLS40NS0xLTEgLjQ1LTEgMS0xem00IDEyaC00djNsLTUtNSA1LTV2M2g0djR6IiAvPjwvZz4KPGcgaWQ9ImFzc2lnbm1lbnQtcmV0dXJuZWQiPjxwYXRoIGQ9Ik0xOSAzaC00LjE4QzE0LjQgMS44NCAxMy4zIDEgMTIgMWMtMS4zIDAtMi40Ljg0LTIuODIgMkg1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bS03IDBjLjU1IDAgMSAuNDUgMSAxcy0uNDUgMS0xIDEtMS0uNDUtMS0xIC40NS0xIDEtMXptMCAxNWwtNS01aDNWOWg0djRoM2wtNSA1eiIgLz48L2c+CjxnIGlkPSJhc3NpZ25tZW50LXR1cm5lZC1pbiI+PHBhdGggZD0iTTE5IDNoLTQuMThDMTQuNCAxLjg0IDEzLjMgMSAxMiAxYy0xLjMgMC0yLjQuODQtMi44MiAySDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptLTcgMGMuNTUgMCAxIC40NSAxIDFzLS40NSAxLTEgMS0xLS40NS0xLTEgLjQ1LTEgMS0xem0tMiAxNGwtNC00IDEuNDEtMS40MUwxMCAxNC4xN2w2LjU5LTYuNTlMMTggOWwtOCA4eiIgLz48L2c+CjxnIGlkPSJhdHRhY2htZW50Ij48cGF0aCBkPSJNMiAxMi41QzIgOS40NiA0LjQ2IDcgNy41IDdIMThjMi4yMSAwIDQgMS43OSA0IDRzLTEuNzkgNC00IDRIOS41QzguMTIgMTUgNyAxMy44OCA3IDEyLjVTOC4xMiAxMCA5LjUgMTBIMTd2Mkg5LjQxYy0uNTUgMC0uNTUgMSAwIDFIMThjMS4xIDAgMi0uOSAyLTJzLS45LTItMi0ySDcuNUM1LjU3IDkgNCAxMC41NyA0IDEyLjVTNS41NyAxNiA3LjUgMTZIMTd2Mkg3LjVDNC40NiAxOCAyIDE1LjU0IDIgMTIuNXoiIC8+PC9nPgo8ZyBpZD0iYXV0b3JlbmV3Ij48cGF0aCBkPSJNMTIgNnYzbDQtNC00LTR2M2MtNC40MiAwLTggMy41OC04IDggMCAxLjU3LjQ2IDMuMDMgMS4yNCA0LjI2TDYuNyAxNC44Yy0uNDUtLjgzLS43LTEuNzktLjctMi44IDAtMy4zMSAyLjY5LTYgNi02em02Ljc2IDEuNzRMMTcuMyA5LjJjLjQ0Ljg0LjcgMS43OS43IDIuOCAwIDMuMzEtMi42OSA2LTYgNnYtM2wtNCA0IDQgNHYtM2M0LjQyIDAgOC0zLjU4IDgtOCAwLTEuNTctLjQ2LTMuMDMtMS4yNC00LjI2eiIgLz48L2c+CjxnIGlkPSJiYWNrc3BhY2UiPjxwYXRoIGQ9Ik0yMiAzSDdjLS42OSAwLTEuMjMuMzUtMS41OS44OEwwIDEybDUuNDEgOC4xMWMuMzYuNTMuOS44OSAxLjU5Ljg5aDE1YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bS0zIDEyLjU5TDE3LjU5IDE3IDE0IDEzLjQxIDEwLjQxIDE3IDkgMTUuNTkgMTIuNTkgMTIgOSA4LjQxIDEwLjQxIDcgMTQgMTAuNTkgMTcuNTkgNyAxOSA4LjQxIDE1LjQxIDEyIDE5IDE1LjU5eiIgLz48L2c+CjxnIGlkPSJiYWNrdXAiPjxwYXRoIGQ9Ik0xOS4zNSAxMC4wNEMxOC42NyA2LjU5IDE1LjY0IDQgMTIgNCA5LjExIDQgNi42IDUuNjQgNS4zNSA4LjA0IDIuMzQgOC4zNiAwIDEwLjkxIDAgMTRjMCAzLjMxIDIuNjkgNiA2IDZoMTNjMi43NiAwIDUtMi4yNCA1LTUgMC0yLjY0LTIuMDUtNC43OC00LjY1LTQuOTZ6TTE0IDEzdjRoLTR2LTRIN2w1LTUgNSA1aC0zeiIgLz48L2c+CjxnIGlkPSJibG9jayI+PHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6TTQgMTJjMC00LjQyIDMuNTgtOCA4LTggMS44NSAwIDMuNTUuNjMgNC45IDEuNjlMNS42OSAxNi45QzQuNjMgMTUuNTUgNCAxMy44NSA0IDEyem04IDhjLTEuODUgMC0zLjU1LS42My00LjktMS42OUwxOC4zMSA3LjFDMTkuMzcgOC40NSAyMCAxMC4xNSAyMCAxMmMwIDQuNDItMy41OCA4LTggOHoiIC8+PC9nPgo8ZyBpZD0iYm9vayI+PHBhdGggZD0iTTE4IDJINmMtMS4xIDAtMiAuOS0yIDJ2MTZjMCAxLjEuOSAyIDIgMmgxMmMxLjEgMCAyLS45IDItMlY0YzAtMS4xLS45LTItMi0yek02IDRoNXY4bC0yLjUtMS41TDYgMTJWNHoiIC8+PC9nPgo8ZyBpZD0iYm9va21hcmsiPjxwYXRoIGQ9Ik0xNyAzSDdjLTEuMSAwLTEuOTkuOS0xLjk5IDJMNSAyMWw3LTMgNyAzVjVjMC0xLjEtLjktMi0yLTJ6IiAvPjwvZz4KPGcgaWQ9ImJvb2ttYXJrLWJvcmRlciI+PHBhdGggZD0iTTE3IDNIN2MtMS4xIDAtMS45OS45LTEuOTkgMkw1IDIxbDctMyA3IDNWNWMwLTEuMS0uOS0yLTItMnptMCAxNWwtNS0yLjE4TDcgMThWNWgxMHYxM3oiIC8+PC9nPgo8ZyBpZD0iYnVnLXJlcG9ydCI+PHBhdGggZD0iTTIwIDhoLTIuODFjLS40NS0uNzgtMS4wNy0xLjQ1LTEuODItMS45NkwxNyA0LjQxIDE1LjU5IDNsLTIuMTcgMi4xN0MxMi45NiA1LjA2IDEyLjQ5IDUgMTIgNWMtLjQ5IDAtLjk2LjA2LTEuNDEuMTdMOC40MSAzIDcgNC40MWwxLjYyIDEuNjNDNy44OCA2LjU1IDcuMjYgNy4yMiA2LjgxIDhINHYyaDIuMDljLS4wNS4zMy0uMDkuNjYtLjA5IDF2MUg0djJoMnYxYzAgLjM0LjA0LjY3LjA5IDFINHYyaDIuODFjMS4wNCAxLjc5IDIuOTcgMyA1LjE5IDNzNC4xNS0xLjIxIDUuMTktM0gyMHYtMmgtMi4wOWMuMDUtLjMzLjA5LS42Ni4wOS0xdi0xaDJ2LTJoLTJ2LTFjMC0uMzQtLjA0LS42Ny0uMDktMUgyMFY4em0tNiA4aC00di0yaDR2MnptMC00aC00di0yaDR2MnoiIC8+PC9nPgo8ZyBpZD0iYnVpbGQiPjxwYXRoIGQ9Ik0yMi43IDE5bC05LjEtOS4xYy45LTIuMy40LTUtMS41LTYuOS0yLTItNS0yLjQtNy40LTEuM0w5IDYgNiA5IDEuNiA0LjdDLjQgNy4xLjkgMTAuMSAyLjkgMTIuMWMxLjkgMS45IDQuNiAyLjQgNi45IDEuNWw5LjEgOS4xYy40LjQgMSAuNCAxLjQgMGwyLjMtMi4zYy41LS40LjUtMS4xLjEtMS40eiIgLz48L2c+CjxnIGlkPSJjYWNoZWQiPjxwYXRoIGQ9Ik0xOSA4bC00IDRoM2MwIDMuMzEtMi42OSA2LTYgNi0xLjAxIDAtMS45Ny0uMjUtMi44LS43bC0xLjQ2IDEuNDZDOC45NyAxOS41NCAxMC40MyAyMCAxMiAyMGM0LjQyIDAgOC0zLjU4IDgtOGgzbC00LTR6TTYgMTJjMC0zLjMxIDIuNjktNiA2LTYgMS4wMSAwIDEuOTcuMjUgMi44LjdsMS40Ni0xLjQ2QzE1LjAzIDQuNDYgMTMuNTcgNCAxMiA0Yy00LjQyIDAtOCAzLjU4LTggOEgxbDQgNCA0LTRINnoiIC8+PC9nPgo8ZyBpZD0iY2FtZXJhLWVuaGFuY2UiPjxwYXRoIGQ9Ik05IDNMNy4xNyA1SDRjLTEuMSAwLTIgLjktMiAydjEyYzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJWN2MwLTEuMS0uOS0yLTItMmgtMy4xN0wxNSAzSDl6bTMgMTVjLTIuNzYgMC01LTIuMjQtNS01czIuMjQtNSA1LTUgNSAyLjI0IDUgNS0yLjI0IDUtNSA1em0wLTFsMS4yNS0yLjc1TDE2IDEzbC0yLjc1LTEuMjVMMTIgOWwtMS4yNSAyLjc1TDggMTNsMi43NSAxLjI1eiIgLz48L2c+CjxnIGlkPSJjYW5jZWwiPjxwYXRoIGQ9Ik0xMiAyQzYuNDcgMiAyIDYuNDcgMiAxMnM0LjQ3IDEwIDEwIDEwIDEwLTQuNDcgMTAtMTBTMTcuNTMgMiAxMiAyem01IDEzLjU5TDE1LjU5IDE3IDEyIDEzLjQxIDguNDEgMTcgNyAxNS41OSAxMC41OSAxMiA3IDguNDEgOC40MSA3IDEyIDEwLjU5IDE1LjU5IDcgMTcgOC40MSAxMy40MSAxMiAxNyAxNS41OXoiIC8+PC9nPgo8ZyBpZD0iY2FyZC1naWZ0Y2FyZCI+PHBhdGggZD0iTTIwIDZoLTIuMThjLjExLS4zMS4xOC0uNjUuMTgtMSAwLTEuNjYtMS4zNC0zLTMtMy0xLjA1IDAtMS45Ni41NC0yLjUgMS4zNWwtLjUuNjctLjUtLjY4QzEwLjk2IDIuNTQgMTAuMDUgMiA5IDIgNy4zNCAyIDYgMy4zNCA2IDVjMCAuMzUuMDcuNjkuMTggMUg0Yy0xLjExIDAtMS45OS44OS0xLjk5IDJMMiAxOWMwIDEuMTEuODkgMiAyIDJoMTZjMS4xMSAwIDItLjg5IDItMlY4YzAtMS4xMS0uODktMi0yLTJ6bS01LTJjLjU1IDAgMSAuNDUgMSAxcy0uNDUgMS0xIDEtMS0uNDUtMS0xIC40NS0xIDEtMXpNOSA0Yy41NSAwIDEgLjQ1IDEgMXMtLjQ1IDEtMSAxLTEtLjQ1LTEtMSAuNDUtMSAxLTF6bTExIDE1SDR2LTJoMTZ2MnptMC01SDRWOGg1LjA4TDcgMTAuODMgOC42MiAxMiAxMSA4Ljc2bDEtMS4zNiAxIDEuMzZMMTUuMzggMTIgMTcgMTAuODMgMTQuOTIgOEgyMHY2eiIgLz48L2c+CjxnIGlkPSJjYXJkLW1lbWJlcnNoaXAiPjxwYXRoIGQ9Ik0yMCAySDRjLTEuMTEgMC0yIC44OS0yIDJ2MTFjMCAxLjExLjg5IDIgMiAyaDR2NWw0LTIgNCAydi01aDRjMS4xMSAwIDItLjg5IDItMlY0YzAtMS4xMS0uODktMi0yLTJ6bTAgMTNINHYtMmgxNnYyem0wLTVINFY0aDE2djZ6IiAvPjwvZz4KPGcgaWQ9ImNhcmQtdHJhdmVsIj48cGF0aCBkPSJNMjAgNmgtM1Y0YzAtMS4xMS0uODktMi0yLTJIOWMtMS4xMSAwLTIgLjg5LTIgMnYySDRjLTEuMTEgMC0yIC44OS0yIDJ2MTFjMCAxLjExLjg5IDIgMiAyaDE2YzEuMTEgMCAyLS44OSAyLTJWOGMwLTEuMTEtLjg5LTItMi0yek05IDRoNnYySDlWNHptMTEgMTVINHYtMmgxNnYyem0wLTVINFY4aDN2MmgyVjhoNnYyaDJWOGgzdjZ6IiAvPjwvZz4KPGcgaWQ9ImNoYW5nZS1oaXN0b3J5Ij48cGF0aCBkPSJNMTIgNy43N0wxOC4zOSAxOEg1LjYxTDEyIDcuNzdNMTIgNEwyIDIwaDIwTDEyIDR6IiAvPjwvZz4KPGcgaWQ9ImNoZWNrIj48cGF0aCBkPSJNOSAxNi4xN0w0LjgzIDEybC0xLjQyIDEuNDFMOSAxOSAyMSA3bC0xLjQxLTEuNDF6IiAvPjwvZz4KPGcgaWQ9ImNoZWNrLWJveCI+PHBhdGggZD0iTTE5IDNINWMtMS4xMSAwLTIgLjktMiAydjE0YzAgMS4xLjg5IDIgMiAyaDE0YzEuMTEgMCAyLS45IDItMlY1YzAtMS4xLS44OS0yLTItMnptLTkgMTRsLTUtNSAxLjQxLTEuNDFMMTAgMTQuMTdsNy41OS03LjU5TDE5IDhsLTkgOXoiIC8+PC9nPgo8ZyBpZD0iY2hlY2stYm94LW91dGxpbmUtYmxhbmsiPjxwYXRoIGQ9Ik0xOSA1djE0SDVWNWgxNG0wLTJINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yeiIgLz48L2c+CjxnIGlkPSJjaGVjay1jaXJjbGUiPjxwYXRoIGQ9Ik0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0tMiAxNWwtNS01IDEuNDEtMS40MUwxMCAxNC4xN2w3LjU5LTcuNTlMMTkgOGwtOSA5eiIgLz48L2c+CjxnIGlkPSJjaGV2cm9uLWxlZnQiPjxwYXRoIGQ9Ik0xNS40MSA3LjQxTDE0IDZsLTYgNiA2IDYgMS40MS0xLjQxTDEwLjgzIDEyeiIgLz48L2c+CjxnIGlkPSJjaGV2cm9uLXJpZ2h0Ij48cGF0aCBkPSJNMTAgNkw4LjU5IDcuNDEgMTMuMTcgMTJsLTQuNTggNC41OUwxMCAxOGw2LTZ6IiAvPjwvZz4KPGcgaWQ9ImNocm9tZS1yZWFkZXItbW9kZSI+PHBhdGggZD0iTTEzIDEyaDd2MS41aC03em0wLTIuNWg3VjExaC03em0wIDVoN1YxNmgtN3pNMjEgNEgzYy0xLjEgMC0yIC45LTIgMnYxM2MwIDEuMS45IDIgMiAyaDE4YzEuMSAwIDItLjkgMi0yVjZjMC0xLjEtLjktMi0yLTJ6bTAgMTVoLTlWNmg5djEzeiIgLz48L2c+CjxnIGlkPSJjbGFzcyI+PHBhdGggZD0iTTE4IDJINmMtMS4xIDAtMiAuOS0yIDJ2MTZjMCAxLjEuOSAyIDIgMmgxMmMxLjEgMCAyLS45IDItMlY0YzAtMS4xLS45LTItMi0yek02IDRoNXY4bC0yLjUtMS41TDYgMTJWNHoiIC8+PC9nPgo8ZyBpZD0iY2xlYXIiPjxwYXRoIGQ9Ik0xOSA2LjQxTDE3LjU5IDUgMTIgMTAuNTkgNi40MSA1IDUgNi40MSAxMC41OSAxMiA1IDE3LjU5IDYuNDEgMTkgMTIgMTMuNDEgMTcuNTkgMTkgMTkgMTcuNTkgMTMuNDEgMTJ6IiAvPjwvZz4KPGcgaWQ9ImNsb3NlIj48cGF0aCBkPSJNMTkgNi40MUwxNy41OSA1IDEyIDEwLjU5IDYuNDEgNSA1IDYuNDEgMTAuNTkgMTIgNSAxNy41OSA2LjQxIDE5IDEyIDEzLjQxIDE3LjU5IDE5IDE5IDE3LjU5IDEzLjQxIDEyeiIgLz48L2c+CjxnIGlkPSJjbG91ZCI+PHBhdGggZD0iTTE5LjM1IDEwLjA0QzE4LjY3IDYuNTkgMTUuNjQgNCAxMiA0IDkuMTEgNCA2LjYgNS42NCA1LjM1IDguMDQgMi4zNCA4LjM2IDAgMTAuOTEgMCAxNGMwIDMuMzEgMi42OSA2IDYgNmgxM2MyLjc2IDAgNS0yLjI0IDUtNSAwLTIuNjQtMi4wNS00Ljc4LTQuNjUtNC45NnoiIC8+PC9nPgo8ZyBpZD0iY2xvdWQtY2lyY2xlIj48cGF0aCBkPSJNMTIgMkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptNC41IDE0SDhjLTEuNjYgMC0zLTEuMzQtMy0zczEuMzQtMyAzLTNsLjE0LjAxQzguNTggOC4yOCAxMC4xMyA3IDEyIDdjMi4yMSAwIDQgMS43OSA0IDRoLjVjMS4zOCAwIDIuNSAxLjEyIDIuNSAyLjVTMTcuODggMTYgMTYuNSAxNnoiIC8+PC9nPgo8ZyBpZD0iY2xvdWQtZG9uZSI+PHBhdGggZD0iTTE5LjM1IDEwLjA0QzE4LjY3IDYuNTkgMTUuNjQgNCAxMiA0IDkuMTEgNCA2LjYgNS42NCA1LjM1IDguMDQgMi4zNCA4LjM2IDAgMTAuOTEgMCAxNGMwIDMuMzEgMi42OSA2IDYgNmgxM2MyLjc2IDAgNS0yLjI0IDUtNSAwLTIuNjQtMi4wNS00Ljc4LTQuNjUtNC45NnpNMTAgMTdsLTMuNS0zLjUgMS40MS0xLjQxTDEwIDE0LjE3IDE1LjE4IDlsMS40MSAxLjQxTDEwIDE3eiIgLz48L2c+CjxnIGlkPSJjbG91ZC1kb3dubG9hZCI+PHBhdGggZD0iTTE5LjM1IDEwLjA0QzE4LjY3IDYuNTkgMTUuNjQgNCAxMiA0IDkuMTEgNCA2LjYgNS42NCA1LjM1IDguMDQgMi4zNCA4LjM2IDAgMTAuOTEgMCAxNGMwIDMuMzEgMi42OSA2IDYgNmgxM2MyLjc2IDAgNS0yLjI0IDUtNSAwLTIuNjQtMi4wNS00Ljc4LTQuNjUtNC45NnpNMTcgMTNsLTUgNS01LTVoM1Y5aDR2NGgzeiIgLz48L2c+CjxnIGlkPSJjbG91ZC1vZmYiPjxwYXRoIGQ9Ik0xOS4zNSAxMC4wNEMxOC42NyA2LjU5IDE1LjY0IDQgMTIgNGMtMS40OCAwLTIuODUuNDMtNC4wMSAxLjE3bDEuNDYgMS40NkMxMC4yMSA2LjIzIDExLjA4IDYgMTIgNmMzLjA0IDAgNS41IDIuNDYgNS41IDUuNXYuNUgxOWMxLjY2IDAgMyAxLjM0IDMgMyAwIDEuMTMtLjY0IDIuMTEtMS41NiAyLjYybDEuNDUgMS40NUMyMy4xNiAxOC4xNiAyNCAxNi42OCAyNCAxNWMwLTIuNjQtMi4wNS00Ljc4LTQuNjUtNC45NnpNMyA1LjI3bDIuNzUgMi43NEMyLjU2IDguMTUgMCAxMC43NyAwIDE0YzAgMy4zMSAyLjY5IDYgNiA2aDExLjczbDIgMkwyMSAyMC43MyA0LjI3IDQgMyA1LjI3ek03LjczIDEwbDggOEg2Yy0yLjIxIDAtNC0xLjc5LTQtNHMxLjc5LTQgNC00aDEuNzN6IiAvPjwvZz4KPGcgaWQ9ImNsb3VkLXF1ZXVlIj48cGF0aCBkPSJNMTkuMzUgMTAuMDRDMTguNjcgNi41OSAxNS42NCA0IDEyIDQgOS4xMSA0IDYuNiA1LjY0IDUuMzUgOC4wNCAyLjM0IDguMzYgMCAxMC45MSAwIDE0YzAgMy4zMSAyLjY5IDYgNiA2aDEzYzIuNzYgMCA1LTIuMjQgNS01IDAtMi42NC0yLjA1LTQuNzgtNC42NS00Ljk2ek0xOSAxOEg2Yy0yLjIxIDAtNC0xLjc5LTQtNHMxLjc5LTQgNC00aC43MUM3LjM3IDcuNjkgOS40OCA2IDEyIDZjMy4wNCAwIDUuNSAyLjQ2IDUuNSA1LjV2LjVIMTljMS42NiAwIDMgMS4zNCAzIDNzLTEuMzQgMy0zIDN6IiAvPjwvZz4KPGcgaWQ9ImNsb3VkLXVwbG9hZCI+PHBhdGggZD0iTTE5LjM1IDEwLjA0QzE4LjY3IDYuNTkgMTUuNjQgNCAxMiA0IDkuMTEgNCA2LjYgNS42NCA1LjM1IDguMDQgMi4zNCA4LjM2IDAgMTAuOTEgMCAxNGMwIDMuMzEgMi42OSA2IDYgNmgxM2MyLjc2IDAgNS0yLjI0IDUtNSAwLTIuNjQtMi4wNS00Ljc4LTQuNjUtNC45NnpNMTQgMTN2NGgtNHYtNEg3bDUtNSA1IDVoLTN6IiAvPjwvZz4KPGcgaWQ9ImNvZGUiPjxwYXRoIGQ9Ik05LjQgMTYuNkw0LjggMTJsNC42LTQuNkw4IDZsLTYgNiA2IDYgMS40LTEuNHptNS4yIDBsNC42LTQuNi00LjYtNC42TDE2IDZsNiA2LTYgNi0xLjQtMS40eiIgLz48L2c+CjxnIGlkPSJjb21wYXJlLWFycm93cyI+PHBhdGggZD0iTTkuMDEgMTRIMnYyaDcuMDF2M0wxMyAxNWwtMy45OS00djN6bTUuOTgtMXYtM0gyMlY4aC03LjAxVjVMMTEgOWwzLjk5IDR6IiAvPjwvZz4KPGcgaWQ9ImNvbnRlbnQtY29weSI+PHBhdGggZD0iTTE2IDFINGMtMS4xIDAtMiAuOS0yIDJ2MTRoMlYzaDEyVjF6bTMgNEg4Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDExYzEuMSAwIDItLjkgMi0yVjdjMC0xLjEtLjktMi0yLTJ6bTAgMTZIOFY3aDExdjE0eiIgLz48L2c+CjxnIGlkPSJjb250ZW50LWN1dCI+PHBhdGggZD0iTTkuNjQgNy42NGMuMjMtLjUuMzYtMS4wNS4zNi0xLjY0IDAtMi4yMS0xLjc5LTQtNC00UzIgMy43OSAyIDZzMS43OSA0IDQgNGMuNTkgMCAxLjE0LS4xMyAxLjY0LS4zNkwxMCAxMmwtMi4zNiAyLjM2QzcuMTQgMTQuMTMgNi41OSAxNCA2IDE0Yy0yLjIxIDAtNCAxLjc5LTQgNHMxLjc5IDQgNCA0IDQtMS43OSA0LTRjMC0uNTktLjEzLTEuMTQtLjM2LTEuNjRMMTIgMTRsNyA3aDN2LTFMOS42NCA3LjY0ek02IDhjLTEuMSAwLTItLjg5LTItMnMuOS0yIDItMiAyIC44OSAyIDItLjkgMi0yIDJ6bTAgMTJjLTEuMSAwLTItLjg5LTItMnMuOS0yIDItMiAyIC44OSAyIDItLjkgMi0yIDJ6bTYtNy41Yy0uMjggMC0uNS0uMjItLjUtLjVzLjIyLS41LjUtLjUuNS4yMi41LjUtLjIyLjUtLjUuNXpNMTkgM2wtNiA2IDIgMiA3LTdWM3oiIC8+PC9nPgo8ZyBpZD0iY29udGVudC1wYXN0ZSI+PHBhdGggZD0iTTE5IDJoLTQuMThDMTQuNC44NCAxMy4zIDAgMTIgMGMtMS4zIDAtMi40Ljg0LTIuODIgMkg1Yy0xLjEgMC0yIC45LTIgMnYxNmMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6bS03IDBjLjU1IDAgMSAuNDUgMSAxcy0uNDUgMS0xIDEtMS0uNDUtMS0xIC40NS0xIDEtMXptNyAxOEg1VjRoMnYzaDEwVjRoMnYxNnoiIC8+PC9nPgo8ZyBpZD0iY29weXJpZ2h0Ij48cGF0aCBkPSJNMTAuMDggMTAuODZjLjA1LS4zMy4xNi0uNjIuMy0uODdzLjM0LS40Ni41OS0uNjJjLjI0LS4xNS41NC0uMjIuOTEtLjIzLjIzLjAxLjQ0LjA1LjYzLjEzLjIuMDkuMzguMjEuNTIuMzZzLjI1LjMzLjM0LjUzLjEzLjQyLjE0LjY0aDEuNzljLS4wMi0uNDctLjExLS45LS4yOC0xLjI5cy0uNC0uNzMtLjctMS4wMS0uNjYtLjUtMS4wOC0uNjYtLjg4LS4yMy0xLjM5LS4yM2MtLjY1IDAtMS4yMi4xMS0xLjcuMzRzLS44OC41My0xLjIuOTItLjU2Ljg0LS43MSAxLjM2UzggMTEuMjkgOCAxMS44N3YuMjdjMCAuNTguMDggMS4xMi4yMyAxLjY0cy4zOS45Ny43MSAxLjM1LjcyLjY5IDEuMi45MSAxLjA1LjM0IDEuNy4zNGMuNDcgMCAuOTEtLjA4IDEuMzItLjIzcy43Ny0uMzYgMS4wOC0uNjMuNTYtLjU4Ljc0LS45NC4yOS0uNzQuMy0xLjE1aC0xLjc5Yy0uMDEuMjEtLjA2LjQtLjE1LjU4cy0uMjEuMzMtLjM2LjQ2LS4zMi4yMy0uNTIuM2MtLjE5LjA3LS4zOS4wOS0uNi4xLS4zNi0uMDEtLjY2LS4wOC0uODktLjIzLS4yNS0uMTYtLjQ1LS4zNy0uNTktLjYycy0uMjUtLjU1LS4zLS44OC0uMDgtLjY3LS4wOC0xdi0uMjdjMC0uMzUuMDMtLjY4LjA4LTEuMDF6TTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTAgMThjLTQuNDEgMC04LTMuNTktOC04czMuNTktOCA4LTggOCAzLjU5IDggOC0zLjU5IDgtOCA4eiIgLz48L2c+CjxnIGlkPSJjcmVhdGUiPjxwYXRoIGQ9Ik0zIDE3LjI1VjIxaDMuNzVMMTcuODEgOS45NGwtMy43NS0zLjc1TDMgMTcuMjV6TTIwLjcxIDcuMDRjLjM5LS4zOS4zOS0xLjAyIDAtMS40MWwtMi4zNC0yLjM0Yy0uMzktLjM5LTEuMDItLjM5LTEuNDEgMGwtMS44MyAxLjgzIDMuNzUgMy43NSAxLjgzLTEuODN6IiAvPjwvZz4KPGcgaWQ9ImNyZWF0ZS1uZXctZm9sZGVyIj48cGF0aCBkPSJNMjAgNmgtOGwtMi0ySDRjLTEuMTEgMC0xLjk5Ljg5LTEuOTkgMkwyIDE4YzAgMS4xMS44OSAyIDIgMmgxNmMxLjExIDAgMi0uODkgMi0yVjhjMC0xLjExLS44OS0yLTItMnptLTEgOGgtM3YzaC0ydi0zaC0zdi0yaDNWOWgydjNoM3YyeiIgLz48L2c+CjxnIGlkPSJjcmVkaXQtY2FyZCI+PHBhdGggZD0iTTIwIDRINGMtMS4xMSAwLTEuOTkuODktMS45OSAyTDIgMThjMCAxLjExLjg5IDIgMiAyaDE2YzEuMTEgMCAyLS44OSAyLTJWNmMwLTEuMTEtLjg5LTItMi0yem0wIDE0SDR2LTZoMTZ2NnptMC0xMEg0VjZoMTZ2MnoiIC8+PC9nPgo8ZyBpZD0iZGFzaGJvYXJkIj48cGF0aCBkPSJNMyAxM2g4VjNIM3YxMHptMCA4aDh2LTZIM3Y2em0xMCAwaDhWMTFoLTh2MTB6bTAtMTh2Nmg4VjNoLTh6IiAvPjwvZz4KPGcgaWQ9ImRhdGUtcmFuZ2UiPjxwYXRoIGQ9Ik05IDExSDd2Mmgydi0yem00IDBoLTJ2Mmgydi0yem00IDBoLTJ2Mmgydi0yem0yLTdoLTFWMmgtMnYySDhWMkg2djJINWMtMS4xMSAwLTEuOTkuOS0xLjk5IDJMMyAyMGMwIDEuMS44OSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0yem0wIDE2SDVWOWgxNHYxMXoiIC8+PC9nPgo8ZyBpZD0iZGVsZXRlIj48cGF0aCBkPSJNNiAxOWMwIDEuMS45IDIgMiAyaDhjMS4xIDAgMi0uOSAyLTJWN0g2djEyek0xOSA0aC0zLjVsLTEtMWgtNWwtMSAxSDV2MmgxNFY0eiIgLz48L2c+CjxnIGlkPSJkZWxldGUtZm9yZXZlciI+PHBhdGggZD0iTTYgMTljMCAxLjEuOSAyIDIgMmg4YzEuMSAwIDItLjkgMi0yVjdINnYxMnptMi40Ni03LjEybDEuNDEtMS40MUwxMiAxMi41OWwyLjEyLTIuMTIgMS40MSAxLjQxTDEzLjQxIDE0bDIuMTIgMi4xMi0xLjQxIDEuNDFMMTIgMTUuNDFsLTIuMTIgMi4xMi0xLjQxLTEuNDFMMTAuNTkgMTRsLTIuMTMtMi4xMnpNMTUuNSA0bC0xLTFoLTVsLTEgMUg1djJoMTRWNHoiIC8+PC9nPgo8ZyBpZD0iZGVsZXRlLXN3ZWVwIj48cGF0aCBkPSJNMTUgMTZoNHYyaC00em0wLThoN3YyaC03em0wIDRoNnYyaC02ek0zIDE4YzAgMS4xLjkgMiAyIDJoNmMxLjEgMCAyLS45IDItMlY4SDN2MTB6TTE0IDVoLTNsLTEtMUg2TDUgNUgydjJoMTJ6IiAvPjwvZz4KPGcgaWQ9ImRlc2NyaXB0aW9uIj48cGF0aCBkPSJNMTQgMkg2Yy0xLjEgMC0xLjk5LjktMS45OSAyTDQgMjBjMCAxLjEuODkgMiAxLjk5IDJIMThjMS4xIDAgMi0uOSAyLTJWOGwtNi02em0yIDE2SDh2LTJoOHYyem0wLTRIOHYtMmg4djJ6bS0zLTVWMy41TDE4LjUgOUgxM3oiIC8+PC9nPgo8ZyBpZD0iZG5zIj48cGF0aCBkPSJNMjAgMTNINGMtLjU1IDAtMSAuNDUtMSAxdjZjMCAuNTUuNDUgMSAxIDFoMTZjLjU1IDAgMS0uNDUgMS0xdi02YzAtLjU1LS40NS0xLTEtMXpNNyAxOWMtMS4xIDAtMi0uOS0yLTJzLjktMiAyLTIgMiAuOSAyIDItLjkgMi0yIDJ6TTIwIDNINGMtLjU1IDAtMSAuNDUtMSAxdjZjMCAuNTUuNDUgMSAxIDFoMTZjLjU1IDAgMS0uNDUgMS0xVjRjMC0uNTUtLjQ1LTEtMS0xek03IDljLTEuMSAwLTItLjktMi0ycy45LTIgMi0yIDIgLjkgMiAyLS45IDItMiAyeiIgLz48L2c+CjxnIGlkPSJkb25lIj48cGF0aCBkPSJNOSAxNi4yTDQuOCAxMmwtMS40IDEuNEw5IDE5IDIxIDdsLTEuNC0xLjRMOSAxNi4yeiIgLz48L2c+CjxnIGlkPSJkb25lLWFsbCI+PHBhdGggZD0iTTE4IDdsLTEuNDEtMS40MS02LjM0IDYuMzQgMS40MSAxLjQxTDE4IDd6bTQuMjQtMS40MUwxMS42NiAxNi4xNyA3LjQ4IDEybC0xLjQxIDEuNDFMMTEuNjYgMTlsMTItMTItMS40Mi0xLjQxek0uNDEgMTMuNDFMNiAxOWwxLjQxLTEuNDFMMS44MyAxMiAuNDEgMTMuNDF6IiAvPjwvZz4KPGcgaWQ9ImRvbnV0LWxhcmdlIj48cGF0aCBkPSJNMTEgNS4wOFYyYy01IC41LTkgNC44MS05IDEwczQgOS41IDkgMTB2LTMuMDhjLTMtLjQ4LTYtMy40LTYtNi45MnMzLTYuNDQgNi02Ljkyek0xOC45NyAxMUgyMmMtLjQ3LTUtNC04LjUzLTktOXYzLjA4QzE2IDUuNTEgMTguNTQgOCAxOC45NyAxMXpNMTMgMTguOTJWMjJjNS0uNDcgOC41My00IDktOWgtMy4wM2MtLjQzIDMtMi45NyA1LjQ5LTUuOTcgNS45MnoiIC8+PC9nPgo8ZyBpZD0iZG9udXQtc21hbGwiPjxwYXRoIGQ9Ik0xMSA5LjE2VjJjLTUgLjUtOSA0Ljc5LTkgMTBzNCA5LjUgOSAxMHYtNy4xNmMtMS0uNDEtMi0xLjUyLTItMi44NHMxLTIuNDMgMi0yLjg0ek0xNC44NiAxMUgyMmMtLjQ4LTQuNzUtNC04LjUzLTktOXY3LjE2YzEgLjMgMS41Mi45OCAxLjg2IDEuODR6TTEzIDE0Ljg0VjIyYzUtLjQ3IDguNTItNC4yNSA5LTloLTcuMTRjLS4zNC44Ni0uODYgMS41NC0xLjg2IDEuODR6IiAvPjwvZz4KPGcgaWQ9ImRyYWZ0cyI+PHBhdGggZD0iTTIxLjk5IDhjMC0uNzItLjM3LTEuMzUtLjk0LTEuN0wxMiAxIDIuOTUgNi4zQzIuMzggNi42NSAyIDcuMjggMiA4djEwYzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJsLS4wMS0xMHpNMTIgMTNMMy43NCA3Ljg0IDEyIDNsOC4yNiA0Ljg0TDEyIDEzeiIgLz48L2c+CjxnIGlkPSJlamVjdCI+PHBhdGggZD0iTTUgMTdoMTR2Mkg1em03LTEyTDUuMzMgMTVoMTMuMzR6IiAvPjwvZz4KPGcgaWQ9ImVycm9yIj48cGF0aCBkPSJNMTIgMkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptMSAxNWgtMnYtMmgydjJ6bTAtNGgtMlY3aDJ2NnoiIC8+PC9nPgo8ZyBpZD0iZXJyb3Itb3V0bGluZSI+PHBhdGggZD0iTTExIDE1aDJ2MmgtMnptMC04aDJ2NmgtMnptLjk5LTVDNi40NyAyIDIgNi40OCAyIDEyczQuNDcgMTAgOS45OSAxMEMxNy41MiAyMiAyMiAxNy41MiAyMiAxMlMxNy41MiAyIDExLjk5IDJ6TTEyIDIwYy00LjQyIDAtOC0zLjU4LTgtOHMzLjU4LTggOC04IDggMy41OCA4IDgtMy41OCA4LTggOHoiIC8+PC9nPgo8ZyBpZD0iZXVyby1zeW1ib2wiPjxwYXRoIGQ9Ik0xNSAxOC41Yy0yLjUxIDAtNC42OC0xLjQyLTUuNzYtMy41SDE1di0ySDguNThjLS4wNS0uMzMtLjA4LS42Ni0uMDgtMXMuMDMtLjY3LjA4LTFIMTVWOUg5LjI0QzEwLjMyIDYuOTIgMTIuNSA1LjUgMTUgNS41YzEuNjEgMCAzLjA5LjU5IDQuMjMgMS41N0wyMSA1LjNDMTkuNDEgMy44NyAxNy4zIDMgMTUgM2MtMy45MiAwLTcuMjQgMi41MS04LjQ4IDZIM3YyaDMuMDZjLS4wNC4zMy0uMDYuNjYtLjA2IDEgMCAuMzQuMDIuNjcuMDYgMUgzdjJoMy41MmMxLjI0IDMuNDkgNC41NiA2IDguNDggNiAyLjMxIDAgNC40MS0uODcgNi0yLjNsLTEuNzgtMS43N2MtMS4xMy45OC0yLjYgMS41Ny00LjIyIDEuNTd6IiAvPjwvZz4KPGcgaWQ9ImV2ZW50Ij48cGF0aCBkPSJNMTcgMTJoLTV2NWg1di01ek0xNiAxdjJIOFYxSDZ2Mkg1Yy0xLjExIDAtMS45OS45LTEuOTkgMkwzIDE5YzAgMS4xLjg5IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJoLTFWMWgtMnptMyAxOEg1VjhoMTR2MTF6IiAvPjwvZz4KPGcgaWQ9ImV2ZW50LXNlYXQiPjxwYXRoIGQ9Ik00IDE4djNoM3YtM2gxMHYzaDN2LTZINHptMTUtOGgzdjNoLTN6TTIgMTBoM3YzSDJ6bTE1IDNIN1Y1YzAtMS4xLjktMiAyLTJoNmMxLjEgMCAyIC45IDIgMnY4eiIgLz48L2c+CjxnIGlkPSJleGl0LXRvLWFwcCI+PHBhdGggZD0iTTEwLjA5IDE1LjU5TDExLjUgMTdsNS01LTUtNS0xLjQxIDEuNDFMMTIuNjcgMTFIM3YyaDkuNjdsLTIuNTggMi41OXpNMTkgM0g1Yy0xLjExIDAtMiAuOS0yIDJ2NGgyVjVoMTR2MTRINXYtNEgzdjRjMCAxLjEuODkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnoiIC8+PC9nPgo8ZyBpZD0iZXhwYW5kLWxlc3MiPjxwYXRoIGQ9Ik0xMiA4bC02IDYgMS40MSAxLjQxTDEyIDEwLjgzbDQuNTkgNC41OEwxOCAxNHoiIC8+PC9nPgo8ZyBpZD0iZXhwYW5kLW1vcmUiPjxwYXRoIGQ9Ik0xNi41OSA4LjU5TDEyIDEzLjE3IDcuNDEgOC41OSA2IDEwbDYgNiA2LTZ6IiAvPjwvZz4KPGcgaWQ9ImV4cGxvcmUiPjxwYXRoIGQ9Ik0xMiAxMC45Yy0uNjEgMC0xLjEuNDktMS4xIDEuMXMuNDkgMS4xIDEuMSAxLjFjLjYxIDAgMS4xLS40OSAxLjEtMS4xcy0uNDktMS4xLTEuMS0xLjF6TTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTIuMTkgMTIuMTlMNiAxOGwzLjgxLTguMTlMMTggNmwtMy44MSA4LjE5eiIgLz48L2c+CjxnIGlkPSJleHRlbnNpb24iPjxwYXRoIGQ9Ik0yMC41IDExSDE5VjdjMC0xLjEtLjktMi0yLTJoLTRWMy41QzEzIDIuMTIgMTEuODggMSAxMC41IDFTOCAyLjEyIDggMy41VjVINGMtMS4xIDAtMS45OS45LTEuOTkgMnYzLjhIMy41YzEuNDkgMCAyLjcgMS4yMSAyLjcgMi43cy0xLjIxIDIuNy0yLjcgMi43SDJWMjBjMCAxLjEuOSAyIDIgMmgzLjh2LTEuNWMwLTEuNDkgMS4yMS0yLjcgMi43LTIuNyAxLjQ5IDAgMi43IDEuMjEgMi43IDIuN1YyMkgxN2MxLjEgMCAyLS45IDItMnYtNGgxLjVjMS4zOCAwIDIuNS0xLjEyIDIuNS0yLjVTMjEuODggMTEgMjAuNSAxMXoiIC8+PC9nPgo8ZyBpZD0iZmFjZSI+PHBhdGggZD0iTTkgMTEuNzVjLS42OSAwLTEuMjUuNTYtMS4yNSAxLjI1cy41NiAxLjI1IDEuMjUgMS4yNSAxLjI1LS41NiAxLjI1LTEuMjUtLjU2LTEuMjUtMS4yNS0xLjI1em02IDBjLS42OSAwLTEuMjUuNTYtMS4yNSAxLjI1cy41NiAxLjI1IDEuMjUgMS4yNSAxLjI1LS41NiAxLjI1LTEuMjUtLjU2LTEuMjUtMS4yNS0xLjI1ek0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0wIDE4Yy00LjQxIDAtOC0zLjU5LTgtOCAwLS4yOS4wMi0uNTguMDUtLjg2IDIuMzYtMS4wNSA0LjIzLTIuOTggNS4yMS01LjM3QzExLjA3IDguMzMgMTQuMDUgMTAgMTcuNDIgMTBjLjc4IDAgMS41My0uMDkgMi4yNS0uMjYuMjEuNzEuMzMgMS40Ny4zMyAyLjI2IDAgNC40MS0zLjU5IDgtOCA4eiIgLz48L2c+CjxnIGlkPSJmYXZvcml0ZSI+PHBhdGggZD0iTTEyIDIxLjM1bC0xLjQ1LTEuMzJDNS40IDE1LjM2IDIgMTIuMjggMiA4LjUgMiA1LjQyIDQuNDIgMyA3LjUgM2MxLjc0IDAgMy40MS44MSA0LjUgMi4wOUMxMy4wOSAzLjgxIDE0Ljc2IDMgMTYuNSAzIDE5LjU4IDMgMjIgNS40MiAyMiA4LjVjMCAzLjc4LTMuNCA2Ljg2LTguNTUgMTEuNTRMMTIgMjEuMzV6IiAvPjwvZz4KPGcgaWQ9ImZhdm9yaXRlLWJvcmRlciI+PHBhdGggZD0iTTE2LjUgM2MtMS43NCAwLTMuNDEuODEtNC41IDIuMDlDMTAuOTEgMy44MSA5LjI0IDMgNy41IDMgNC40MiAzIDIgNS40MiAyIDguNWMwIDMuNzggMy40IDYuODYgOC41NSAxMS41NEwxMiAyMS4zNWwxLjQ1LTEuMzJDMTguNiAxNS4zNiAyMiAxMi4yOCAyMiA4LjUgMjIgNS40MiAxOS41OCAzIDE2LjUgM3ptLTQuNCAxNS41NWwtLjEuMS0uMS0uMUM3LjE0IDE0LjI0IDQgMTEuMzkgNCA4LjUgNCA2LjUgNS41IDUgNy41IDVjMS41NCAwIDMuMDQuOTkgMy41NyAyLjM2aDEuODdDMTMuNDYgNS45OSAxNC45NiA1IDE2LjUgNWMyIDAgMy41IDEuNSAzLjUgMy41IDAgMi44OS0zLjE0IDUuNzQtNy45IDEwLjA1eiIgLz48L2c+CjxnIGlkPSJmZWVkYmFjayI+PHBhdGggZD0iTTIwIDJINGMtMS4xIDAtMS45OS45LTEuOTkgMkwyIDIybDQtNGgxNGMxLjEgMCAyLS45IDItMlY0YzAtMS4xLS45LTItMi0yem0tNyAxMmgtMnYtMmgydjJ6bTAtNGgtMlY2aDJ2NHoiIC8+PC9nPgo8ZyBpZD0iZmlsZS1kb3dubG9hZCI+PHBhdGggZD0iTTE5IDloLTRWM0g5djZINWw3IDcgNy03ek01IDE4djJoMTR2LTJINXoiIC8+PC9nPgo8ZyBpZD0iZmlsZS11cGxvYWQiPjxwYXRoIGQ9Ik05IDE2aDZ2LTZoNGwtNy03LTcgN2g0em0tNCAyaDE0djJINXoiIC8+PC9nPgo8ZyBpZD0iZmlsdGVyLWxpc3QiPjxwYXRoIGQ9Ik0xMCAxOGg0di0yaC00djJ6TTMgNnYyaDE4VjZIM3ptMyA3aDEydi0ySDZ2MnoiIC8+PC9nPgo8ZyBpZD0iZmluZC1pbi1wYWdlIj48cGF0aCBkPSJNMjAgMTkuNTlWOGwtNi02SDZjLTEuMSAwLTEuOTkuOS0xLjk5IDJMNCAyMGMwIDEuMS44OSAyIDEuOTkgMkgxOGMuNDUgMCAuODUtLjE1IDEuMTktLjRsLTQuNDMtNC40M2MtLjguNTItMS43NC44My0yLjc2LjgzLTIuNzYgMC01LTIuMjQtNS01czIuMjQtNSA1LTUgNSAyLjI0IDUgNWMwIDEuMDItLjMxIDEuOTYtLjgzIDIuNzVMMjAgMTkuNTl6TTkgMTNjMCAxLjY2IDEuMzQgMyAzIDNzMy0xLjM0IDMtMy0xLjM0LTMtMy0zLTMgMS4zNC0zIDN6IiAvPjwvZz4KPGcgaWQ9ImZpbmQtcmVwbGFjZSI+PHBhdGggZD0iTTExIDZjMS4zOCAwIDIuNjMuNTYgMy41NCAxLjQ2TDEyIDEwaDZWNGwtMi4wNSAyLjA1QzE0LjY4IDQuNzggMTIuOTMgNCAxMSA0Yy0zLjUzIDAtNi40MyAyLjYxLTYuOTIgNkg2LjFjLjQ2LTIuMjggMi40OC00IDQuOS00em01LjY0IDkuMTRjLjY2LS45IDEuMTItMS45NyAxLjI4LTMuMTRIMTUuOWMtLjQ2IDIuMjgtMi40OCA0LTQuOSA0LTEuMzggMC0yLjYzLS41Ni0zLjU0LTEuNDZMMTAgMTJINHY2bDIuMDUtMi4wNUM3LjMyIDE3LjIyIDkuMDcgMTggMTEgMThjMS41NSAwIDIuOTgtLjUxIDQuMTQtMS4zNkwyMCAyMS40OSAyMS40OSAyMGwtNC44NS00Ljg2eiIgLz48L2c+CjxnIGlkPSJmaW5nZXJwcmludCI+PHBhdGggZD0iTTE3LjgxIDQuNDdjLS4wOCAwLS4xNi0uMDItLjIzLS4wNkMxNS42NiAzLjQyIDE0IDMgMTIuMDEgM2MtMS45OCAwLTMuODYuNDctNS41NyAxLjQxLS4yNC4xMy0uNTQuMDQtLjY4LS4yLS4xMy0uMjQtLjA0LS41NS4yLS42OEM3LjgyIDIuNTIgOS44NiAyIDEyLjAxIDJjMi4xMyAwIDMuOTkuNDcgNi4wMyAxLjUyLjI1LjEzLjM0LjQzLjIxLjY3LS4wOS4xOC0uMjYuMjgtLjQ0LjI4ek0zLjUgOS43MmMtLjEgMC0uMi0uMDMtLjI5LS4wOS0uMjMtLjE2LS4yOC0uNDctLjEyLS43Ljk5LTEuNCAyLjI1LTIuNSAzLjc1LTMuMjdDOS45OCA0LjA0IDE0IDQuMDMgMTcuMTUgNS42NWMxLjUuNzcgMi43NiAxLjg2IDMuNzUgMy4yNS4xNi4yMi4xMS41NC0uMTIuNy0uMjMuMTYtLjU0LjExLS43LS4xMi0uOS0xLjI2LTIuMDQtMi4yNS0zLjM5LTIuOTQtMi44Ny0xLjQ3LTYuNTQtMS40Ny05LjQuMDEtMS4zNi43LTIuNSAxLjctMy40IDIuOTYtLjA4LjE0LS4yMy4yMS0uMzkuMjF6bTYuMjUgMTIuMDdjLS4xMyAwLS4yNi0uMDUtLjM1LS4xNS0uODctLjg3LTEuMzQtMS40My0yLjAxLTIuNjQtLjY5LTEuMjMtMS4wNS0yLjczLTEuMDUtNC4zNCAwLTIuOTcgMi41NC01LjM5IDUuNjYtNS4zOXM1LjY2IDIuNDIgNS42NiA1LjM5YzAgLjI4LS4yMi41LS41LjVzLS41LS4yMi0uNS0uNWMwLTIuNDItMi4wOS00LjM5LTQuNjYtNC4zOS0yLjU3IDAtNC42NiAxLjk3LTQuNjYgNC4zOSAwIDEuNDQuMzIgMi43Ny45MyAzLjg1LjY0IDEuMTUgMS4wOCAxLjY0IDEuODUgMi40Mi4xOS4yLjE5LjUxIDAgLjcxLS4xMS4xLS4yNC4xNS0uMzcuMTV6bTcuMTctMS44NWMtMS4xOSAwLTIuMjQtLjMtMy4xLS44OS0xLjQ5LTEuMDEtMi4zOC0yLjY1LTIuMzgtNC4zOSAwLS4yOC4yMi0uNS41LS41cy41LjIyLjUuNWMwIDEuNDEuNzIgMi43NCAxLjk0IDMuNTYuNzEuNDggMS41NC43MSAyLjU0LjcxLjI0IDAgLjY0LS4wMyAxLjA0LS4xLjI3LS4wNS41My4xMy41OC40MS4wNS4yNy0uMTMuNTMtLjQxLjU4LS41Ny4xMS0xLjA3LjEyLTEuMjEuMTJ6TTE0LjkxIDIyYy0uMDQgMC0uMDktLjAxLS4xMy0uMDItMS41OS0uNDQtMi42My0xLjAzLTMuNzItMi4xLTEuNC0xLjM5LTIuMTctMy4yNC0yLjE3LTUuMjIgMC0xLjYyIDEuMzgtMi45NCAzLjA4LTIuOTQgMS43IDAgMy4wOCAxLjMyIDMuMDggMi45NCAwIDEuMDcuOTMgMS45NCAyLjA4IDEuOTRzMi4wOC0uODcgMi4wOC0xLjk0YzAtMy43Ny0zLjI1LTYuODMtNy4yNS02LjgzLTIuODQgMC01LjQ0IDEuNTgtNi42MSA0LjAzLS4zOS44MS0uNTkgMS43Ni0uNTkgMi44IDAgLjc4LjA3IDIuMDEuNjcgMy42MS4xLjI2LS4wMy41NS0uMjkuNjQtLjI2LjEtLjU1LS4wNC0uNjQtLjI5LS40OS0xLjMxLS43My0yLjYxLS43My0zLjk2IDAtMS4yLjIzLTIuMjkuNjgtMy4yNCAxLjMzLTIuNzkgNC4yOC00LjYgNy41MS00LjYgNC41NSAwIDguMjUgMy41MSA4LjI1IDcuODMgMCAxLjYyLTEuMzggMi45NC0zLjA4IDIuOTRzLTMuMDgtMS4zMi0zLjA4LTIuOTRjMC0xLjA3LS45My0xLjk0LTIuMDgtMS45NHMtMi4wOC44Ny0yLjA4IDEuOTRjMCAxLjcxLjY2IDMuMzEgMS44NyA0LjUxLjk1Ljk0IDEuODYgMS40NiAzLjI3IDEuODUuMjcuMDcuNDIuMzUuMzUuNjEtLjA1LjIzLS4yNi4zOC0uNDcuMzh6IiAvPjwvZz4KPGcgaWQ9ImZpcnN0LXBhZ2UiPjxwYXRoIGQ9Ik0xOC40MSAxNi41OUwxMy44MiAxMmw0LjU5LTQuNTlMMTcgNmwtNiA2IDYgNnpNNiA2aDJ2MTJINnoiIC8+PC9nPgo8ZyBpZD0iZmxhZyI+PHBhdGggZD0iTTE0LjQgNkwxNCA0SDV2MTdoMnYtN2g1LjZsLjQgMmg3VjZ6IiAvPjwvZz4KPGcgaWQ9ImZsaWdodC1sYW5kIj48cGF0aCBkPSJNMi41IDE5aDE5djJoLTE5em03LjE4LTUuNzNsNC4zNSAxLjE2IDUuMzEgMS40MmMuOC4yMSAxLjYyLS4yNiAxLjg0LTEuMDYuMjEtLjgtLjI2LTEuNjItMS4wNi0xLjg0bC01LjMxLTEuNDItMi43Ni05LjAyTDEwLjEyIDJ2OC4yOEw1LjE1IDguOTVsLS45My0yLjMyLTEuNDUtLjM5djUuMTdsMS42LjQzIDUuMzEgMS40M3oiIC8+PC9nPgo8ZyBpZD0iZmxpZ2h0LXRha2VvZmYiPjxwYXRoIGQ9Ik0yLjUgMTloMTl2MmgtMTl6bTE5LjU3LTkuMzZjLS4yMS0uOC0xLjA0LTEuMjgtMS44NC0xLjA2TDE0LjkyIDEwbC02LjktNi40My0xLjkzLjUxIDQuMTQgNy4xNy00Ljk3IDEuMzMtMS45Ny0xLjU0LTEuNDUuMzkgMS44MiAzLjE2Ljc3IDEuMzMgMS42LS40MyA1LjMxLTEuNDIgNC4zNS0xLjE2TDIxIDExLjQ5Yy44MS0uMjMgMS4yOC0xLjA1IDEuMDctMS44NXoiIC8+PC9nPgo8ZyBpZD0iZmxpcC10by1iYWNrIj48cGF0aCBkPSJNOSA3SDd2MmgyVjd6bTAgNEg3djJoMnYtMnptMC04Yy0xLjExIDAtMiAuOS0yIDJoMlYzem00IDEyaC0ydjJoMnYtMnptNi0xMnYyaDJjMC0xLjEtLjktMi0yLTJ6bS02IDBoLTJ2MmgyVjN6TTkgMTd2LTJIN2MwIDEuMS44OSAyIDIgMnptMTAtNGgydi0yaC0ydjJ6bTAtNGgyVjdoLTJ2MnptMCA4YzEuMSAwIDItLjkgMi0yaC0ydjJ6TTUgN0gzdjEyYzAgMS4xLjg5IDIgMiAyaDEydi0ySDVWN3ptMTAtMmgyVjNoLTJ2MnptMCAxMmgydi0yaC0ydjJ6IiAvPjwvZz4KPGcgaWQ9ImZsaXAtdG8tZnJvbnQiPjxwYXRoIGQ9Ik0zIDEzaDJ2LTJIM3Yyem0wIDRoMnYtMkgzdjJ6bTIgNHYtMkgzYzAgMS4xLjg5IDIgMiAyek0zIDloMlY3SDN2MnptMTIgMTJoMnYtMmgtMnYyem00LTE4SDljLTEuMTEgMC0yIC45LTIgMnYxMGMwIDEuMS44OSAyIDIgMmgxMGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0wIDEySDlWNWgxMHYxMHptLTggNmgydi0yaC0ydjJ6bS00IDBoMnYtMkg3djJ6IiAvPjwvZz4KPGcgaWQ9ImZvbGRlciI+PHBhdGggZD0iTTEwIDRINGMtMS4xIDAtMS45OS45LTEuOTkgMkwyIDE4YzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJWOGMwLTEuMS0uOS0yLTItMmgtOGwtMi0yeiIgLz48L2c+CjxnIGlkPSJmb2xkZXItb3BlbiI+PHBhdGggZD0iTTIwIDZoLThsLTItMkg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY4YzAtMS4xLS45LTItMi0yem0wIDEySDRWOGgxNnYxMHoiIC8+PC9nPgo8ZyBpZD0iZm9sZGVyLXNoYXJlZCI+PHBhdGggZD0iTTIwIDZoLThsLTItMkg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY4YzAtMS4xLS45LTItMi0yem0tNSAzYzEuMSAwIDIgLjkgMiAycy0uOSAyLTIgMi0yLS45LTItMiAuOS0yIDItMnptNCA4aC04di0xYzAtMS4zMyAyLjY3LTIgNC0yczQgLjY3IDQgMnYxeiIgLz48L2c+CjxnIGlkPSJmb250LWRvd25sb2FkIj48cGF0aCBkPSJNOS45MyAxMy41aDQuMTRMMTIgNy45OHpNMjAgMkg0Yy0xLjEgMC0yIC45LTIgMnYxNmMwIDEuMS45IDIgMiAyaDE2YzEuMSAwIDItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6bS00LjA1IDE2LjVsLTEuMTQtM0g5LjE3bC0xLjEyIDNINS45Nmw1LjExLTEzaDEuODZsNS4xMSAxM2gtMi4wOXoiIC8+PC9nPgo8ZyBpZD0iZm9yd2FyZCI+PHBhdGggZD0iTTEyIDhWNGw4IDgtOCA4di00SDRWOHoiIC8+PC9nPgo8ZyBpZD0iZnVsbHNjcmVlbiI+PHBhdGggZD0iTTcgMTRINXY1aDV2LTJIN3YtM3ptLTItNGgyVjdoM1Y1SDV2NXptMTIgN2gtM3YyaDV2LTVoLTJ2M3pNMTQgNXYyaDN2M2gyVjVoLTV6IiAvPjwvZz4KPGcgaWQ9ImZ1bGxzY3JlZW4tZXhpdCI+PHBhdGggZD0iTTUgMTZoM3YzaDJ2LTVINXYyem0zLThINXYyaDVWNUg4djN6bTYgMTFoMnYtM2gzdi0yaC01djV6bTItMTFWNWgtMnY1aDVWOGgtM3oiIC8+PC9nPgo8ZyBpZD0iZy10cmFuc2xhdGUiPjxwYXRoIGQ9Ik0yMCA1aC05LjEyTDEwIDJINGMtMS4xIDAtMiAuOS0yIDJ2MTNjMCAxLjEuOSAyIDIgMmg3bDEgM2g4YzEuMSAwIDItLjkgMi0yVjdjMC0xLjEtLjktMi0yLTJ6TTcuMTcgMTQuNTljLTIuMjUgMC00LjA5LTEuODMtNC4wOS00LjA5czEuODMtNC4wOSA0LjA5LTQuMDljMS4wNCAwIDEuOTkuMzcgMi43NCAxLjA3bC4wNy4wNi0xLjIzIDEuMTgtLjA2LS4wNWMtLjI5LS4yNy0uNzgtLjU5LTEuNTItLjU5LTEuMzEgMC0yLjM4IDEuMDktMi4zOCAyLjQyczEuMDcgMi40MiAyLjM4IDIuNDJjMS4zNyAwIDEuOTYtLjg3IDIuMTItMS40Nkg3LjA4VjkuOTFoMy45NWwuMDEuMDdjLjA0LjIxLjA1LjQuMDUuNjEgMCAyLjM1LTEuNjEgNC0zLjkyIDR6bTYuMDMtMS43MWMuMzMuNi43NCAxLjE4IDEuMTkgMS43bC0uNTQuNTMtLjY1LTIuMjN6bS43Ny0uNzZoLS45OWwtLjMxLTEuMDRoMy45OXMtLjM0IDEuMzEtMS41NiAyLjc0Yy0uNTItLjYyLS44OS0xLjIzLTEuMTMtMS43ek0yMSAyMGMwIC41NS0uNDUgMS0xIDFoLTdsMi0yLS44MS0yLjc3LjkyLS45MkwxNy43OSAxOGwuNzMtLjczLTIuNzEtMi42OGMuOS0xLjAzIDEuNi0yLjI1IDEuOTItMy41MUgxOXYtMS4wNGgtMy42NFY5aC0xLjA0djEuMDRoLTEuOTZMMTEuMTggNkgyMGMuNTUgMCAxIC40NSAxIDF2MTN6IiAvPjwvZz4KPGcgaWQ9ImdhdmVsIj48cGF0aCBkPSJNMSAyMWgxMnYySDF6TTUuMjQ1IDguMDdsMi44My0yLjgyNyAxNC4xNCAxNC4xNDItMi44MjggMi44Mjh6TTEyLjMxNyAxbDUuNjU3IDUuNjU2LTIuODMgMi44My01LjY1NC01LjY2ek0zLjgyNSA5LjQ4NWw1LjY1NyA1LjY1Ny0yLjgyOCAyLjgyOC01LjY1Ny01LjY1N3oiIC8+PC9nPgo8ZyBpZD0iZ2VzdHVyZSI+PHBhdGggZD0iTTQuNTkgNi44OWMuNy0uNzEgMS40LTEuMzUgMS43MS0xLjIyLjUuMiAwIDEuMDMtLjMgMS41Mi0uMjUuNDItMi44NiAzLjg5LTIuODYgNi4zMSAwIDEuMjguNDggMi4zNCAxLjM0IDIuOTguNzUuNTYgMS43NC43MyAyLjY0LjQ2IDEuMDctLjMxIDEuOTUtMS40IDMuMDYtMi43NyAxLjIxLTEuNDkgMi44My0zLjQ0IDQuMDgtMy40NCAxLjYzIDAgMS42NSAxLjAxIDEuNzYgMS43OS0zLjc4LjY0LTUuMzggMy42Ny01LjM4IDUuMzcgMCAxLjcgMS40NCAzLjA5IDMuMjEgMy4wOSAxLjYzIDAgNC4yOS0xLjMzIDQuNjktNi4xSDIxdi0yLjVoLTIuNDdjLS4xNS0xLjY1LTEuMDktNC4yLTQuMDMtNC4yLTIuMjUgMC00LjE4IDEuOTEtNC45NCAyLjg0LS41OC43My0yLjA2IDIuNDgtMi4yOSAyLjcyLS4yNS4zLS42OC44NC0xLjExLjg0LS40NSAwLS43Mi0uODMtLjM2LTEuOTIuMzUtMS4wOSAxLjQtMi44NiAxLjg1LTMuNTIuNzgtMS4xNCAxLjMtMS45MiAxLjMtMy4yOEM4Ljk1IDMuNjkgNy4zMSAzIDYuNDQgMyA1LjEyIDMgMy45NyA0IDMuNzIgNC4yNWMtLjM2LjM2LS42Ni42Ni0uODguOTNsMS43NSAxLjcxem05LjI5IDExLjY2Yy0uMzEgMC0uNzQtLjI2LS43NC0uNzIgMC0uNi43My0yLjIgMi44Ny0yLjc2LS4zIDIuNjktMS40MyAzLjQ4LTIuMTMgMy40OHoiIC8+PC9nPgo8ZyBpZD0iZ2V0LWFwcCI+PHBhdGggZD0iTTE5IDloLTRWM0g5djZINWw3IDcgNy03ek01IDE4djJoMTR2LTJINXoiIC8+PC9nPgo8ZyBpZD0iZ2lmIj48cGF0aCBkPSJNMTEuNSA5SDEzdjZoLTEuNXpNOSA5SDZjLS42IDAtMSAuNS0xIDF2NGMwIC41LjQgMSAxIDFoM2MuNiAwIDEtLjUgMS0xdi0ySDguNXYxLjVoLTJ2LTNIMTBWMTBjMC0uNS0uNC0xLTEtMXptMTAgMS41VjloLTQuNXY2SDE2di0yaDJ2LTEuNWgtMnYtMXoiIC8+PC9nPgo8ZyBpZD0iZ3JhZGUiPjxwYXRoIGQ9Ik0xMiAxNy4yN0wxOC4xOCAyMWwtMS42NC03LjAzTDIyIDkuMjRsLTcuMTktLjYxTDEyIDIgOS4xOSA4LjYzIDIgOS4yNGw1LjQ2IDQuNzNMNS44MiAyMXoiIC8+PC9nPgo8ZyBpZD0iZ3JvdXAtd29yayI+PHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6TTggMTcuNWMtMS4zOCAwLTIuNS0xLjEyLTIuNS0yLjVzMS4xMi0yLjUgMi41LTIuNSAyLjUgMS4xMiAyLjUgMi41LTEuMTIgMi41LTIuNSAyLjV6TTkuNSA4YzAtMS4zOCAxLjEyLTIuNSAyLjUtMi41czIuNSAxLjEyIDIuNSAyLjUtMS4xMiAyLjUtMi41IDIuNVM5LjUgOS4zOCA5LjUgOHptNi41IDkuNWMtMS4zOCAwLTIuNS0xLjEyLTIuNS0yLjVzMS4xMi0yLjUgMi41LTIuNSAyLjUgMS4xMiAyLjUgMi41LTEuMTIgMi41LTIuNSAyLjV6IiAvPjwvZz4KPGcgaWQ9ImhlbHAiPjxwYXRoIGQ9Ik0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0xIDE3aC0ydi0yaDJ2MnptMi4wNy03Ljc1bC0uOS45MkMxMy40NSAxMi45IDEzIDEzLjUgMTMgMTVoLTJ2LS41YzAtMS4xLjQ1LTIuMSAxLjE3LTIuODNsMS4yNC0xLjI2Yy4zNy0uMzYuNTktLjg2LjU5LTEuNDEgMC0xLjEtLjktMi0yLTJzLTIgLjktMiAySDhjMC0yLjIxIDEuNzktNCA0LTRzNCAxLjc5IDQgNGMwIC44OC0uMzYgMS42OC0uOTMgMi4yNXoiIC8+PC9nPgo8ZyBpZD0iaGVscC1vdXRsaW5lIj48cGF0aCBkPSJNMTEgMThoMnYtMmgtMnYyem0xLTE2QzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0wIDE4Yy00LjQxIDAtOC0zLjU5LTgtOHMzLjU5LTggOC04IDggMy41OSA4IDgtMy41OSA4LTggOHptMC0xNGMtMi4yMSAwLTQgMS43OS00IDRoMmMwLTEuMS45LTIgMi0yczIgLjkgMiAyYzAgMi0zIDEuNzUtMyA1aDJjMC0yLjI1IDMtMi41IDMtNSAwLTIuMjEtMS43OS00LTQtNHoiIC8+PC9nPgo8ZyBpZD0iaGlnaGxpZ2h0LW9mZiI+PHBhdGggZD0iTTE0LjU5IDhMMTIgMTAuNTkgOS40MSA4IDggOS40MSAxMC41OSAxMiA4IDE0LjU5IDkuNDEgMTYgMTIgMTMuNDEgMTQuNTkgMTYgMTYgMTQuNTkgMTMuNDEgMTIgMTYgOS40MSAxNC41OSA4ek0xMiAyQzYuNDcgMiAyIDYuNDcgMiAxMnM0LjQ3IDEwIDEwIDEwIDEwLTQuNDcgMTAtMTBTMTcuNTMgMiAxMiAyem0wIDE4Yy00LjQxIDAtOC0zLjU5LTgtOHMzLjU5LTggOC04IDggMy41OSA4IDgtMy41OSA4LTggOHoiIC8+PC9nPgo8ZyBpZD0iaGlzdG9yeSI+PHBhdGggZD0iTTEzIDNjLTQuOTcgMC05IDQuMDMtOSA5SDFsMy44OSAzLjg5LjA3LjE0TDkgMTJINmMwLTMuODcgMy4xMy03IDctN3M3IDMuMTMgNyA3LTMuMTMgNy03IDdjLTEuOTMgMC0zLjY4LS43OS00Ljk0LTIuMDZsLTEuNDIgMS40MkM4LjI3IDE5Ljk5IDEwLjUxIDIxIDEzIDIxYzQuOTcgMCA5LTQuMDMgOS05cy00LjAzLTktOS05em0tMSA1djVsNC4yOCAyLjU0LjcyLTEuMjEtMy41LTIuMDhWOEgxMnoiIC8+PC9nPgo8ZyBpZD0iaG9tZSI+PHBhdGggZD0iTTEwIDIwdi02aDR2Nmg1di04aDNMMTIgMyAyIDEyaDN2OHoiIC8+PC9nPgo8ZyBpZD0iaG91cmdsYXNzLWVtcHR5Ij48cGF0aCBkPSJNNiAydjZoLjAxTDYgOC4wMSAxMCAxMmwtNCA0IC4wMS4wMUg2VjIyaDEydi01Ljk5aC0uMDFMMTggMTZsLTQtNCA0LTMuOTktLjAxLS4wMUgxOFYySDZ6bTEwIDE0LjVWMjBIOHYtMy41bDQtNCA0IDR6bS00LTVsLTQtNFY0aDh2My41bC00IDR6IiAvPjwvZz4KPGcgaWQ9ImhvdXJnbGFzcy1mdWxsIj48cGF0aCBkPSJNNiAydjZoLjAxTDYgOC4wMSAxMCAxMmwtNCA0IC4wMS4wMUg2VjIyaDEydi01Ljk5aC0uMDFMMTggMTZsLTQtNCA0LTMuOTktLjAxLS4wMUgxOFYySDZ6IiAvPjwvZz4KPGcgaWQ9Imh0dHAiPjxwYXRoIGQ9Ik00LjUgMTFoLTJWOUgxdjZoMS41di0yLjVoMlYxNUg2VjlINC41djJ6bTIuNS0uNWgxLjVWMTVIMTB2LTQuNWgxLjVWOUg3djEuNXptNS41IDBIMTRWMTVoMS41di00LjVIMTdWOWgtNC41djEuNXptOS0xLjVIMTh2NmgxLjV2LTJoMmMuOCAwIDEuNS0uNyAxLjUtMS41di0xYzAtLjgtLjctMS41LTEuNS0xLjV6bTAgMi41aC0ydi0xaDJ2MXoiIC8+PC9nPgo8ZyBpZD0iaHR0cHMiPjxwYXRoIGQ9Ik0xOCA4aC0xVjZjMC0yLjc2LTIuMjQtNS01LTVTNyAzLjI0IDcgNnYySDZjLTEuMSAwLTIgLjktMiAydjEwYzAgMS4xLjkgMiAyIDJoMTJjMS4xIDAgMi0uOSAyLTJWMTBjMC0xLjEtLjktMi0yLTJ6bS02IDljLTEuMSAwLTItLjktMi0ycy45LTIgMi0yIDIgLjkgMiAyLS45IDItMiAyem0zLjEtOUg4LjlWNmMwLTEuNzEgMS4zOS0zLjEgMy4xLTMuMSAxLjcxIDAgMy4xIDEuMzkgMy4xIDMuMXYyeiIgLz48L2c+CjxnIGlkPSJpbXBvcnRhbnQtZGV2aWNlcyI+PHBhdGggZD0iTTIzIDExLjAxTDE4IDExYy0uNTUgMC0xIC40NS0xIDF2OWMwIC41NS40NSAxIDEgMWg1Yy41NSAwIDEtLjQ1IDEtMXYtOWMwLS41NS0uNDUtLjk5LTEtLjk5ek0yMyAyMGgtNXYtN2g1djd6TTIwIDJIMkMuODkgMiAwIDIuODkgMCA0djEyYzAgMS4xLjg5IDIgMiAyaDd2Mkg3djJoOHYtMmgtMnYtMmgydi0ySDJWNGgxOHY1aDJWNGMwLTEuMTEtLjktMi0yLTJ6bS04LjAzIDdMMTEgNmwtLjk3IDNIN2wyLjQ3IDEuNzYtLjk0IDIuOTEgMi40Ny0xLjggMi40NyAxLjgtLjk0LTIuOTFMMTUgOWgtMy4wM3oiIC8+PC9nPgo8ZyBpZD0iaW5ib3giPjxwYXRoIGQ9Ik0xOSAzSDQuOTljLTEuMTEgMC0xLjk4Ljg5LTEuOTggMkwzIDE5YzAgMS4xLjg4IDIgMS45OSAySDE5YzEuMSAwIDItLjkgMi0yVjVjMC0xLjExLS45LTItMi0yem0wIDEyaC00YzAgMS42Ni0xLjM1IDMtMyAzcy0zLTEuMzQtMy0zSDQuOTlWNUgxOXYxMHoiIC8+PC9nPgo8ZyBpZD0iaW5kZXRlcm1pbmF0ZS1jaGVjay1ib3giPjxwYXRoIGQ9Ik0xOSAzSDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptLTIgMTBIN3YtMmgxMHYyeiIgLz48L2c+CjxnIGlkPSJpbmZvIj48cGF0aCBkPSJNMTIgMkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptMSAxNWgtMnYtNmgydjZ6bTAtOGgtMlY3aDJ2MnoiIC8+PC9nPgo8ZyBpZD0iaW5mby1vdXRsaW5lIj48cGF0aCBkPSJNMTEgMTdoMnYtNmgtMnY2em0xLTE1QzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0wIDE4Yy00LjQxIDAtOC0zLjU5LTgtOHMzLjU5LTggOC04IDggMy41OSA4IDgtMy41OSA4LTggOHpNMTEgOWgyVjdoLTJ2MnoiIC8+PC9nPgo8ZyBpZD0iaW5wdXQiPjxwYXRoIGQ9Ik0yMSAzLjAxSDNjLTEuMSAwLTIgLjktMiAyVjloMlY0Ljk5aDE4djE0LjAzSDNWMTVIMXY0LjAxYzAgMS4xLjkgMS45OCAyIDEuOThoMThjMS4xIDAgMi0uODggMi0xLjk4di0xNGMwLTEuMTEtLjktMi0yLTJ6TTExIDE2bDQtNC00LTR2M0gxdjJoMTB2M3oiIC8+PC9nPgo8ZyBpZD0iaW52ZXJ0LWNvbG9ycyI+PHBhdGggZD0iTTE3LjY2IDcuOTNMMTIgMi4yNyA2LjM0IDcuOTNjLTMuMTIgMy4xMi0zLjEyIDguMTkgMCAxMS4zMUM3LjkgMjAuOCA5Ljk1IDIxLjU4IDEyIDIxLjU4YzIuMDUgMCA0LjEtLjc4IDUuNjYtMi4zNCAzLjEyLTMuMTIgMy4xMi04LjE5IDAtMTEuMzF6TTEyIDE5LjU5Yy0xLjYgMC0zLjExLS42Mi00LjI0LTEuNzZDNi42MiAxNi42OSA2IDE1LjE5IDYgMTMuNTlzLjYyLTMuMTEgMS43Ni00LjI0TDEyIDUuMXYxNC40OXoiIC8+PC9nPgo8ZyBpZD0ibGFiZWwiPjxwYXRoIGQ9Ik0xNy42MyA1Ljg0QzE3LjI3IDUuMzMgMTYuNjcgNSAxNiA1TDUgNS4wMUMzLjkgNS4wMSAzIDUuOSAzIDd2MTBjMCAxLjEuOSAxLjk5IDIgMS45OUwxNiAxOWMuNjcgMCAxLjI3LS4zMyAxLjYzLS44NEwyMiAxMmwtNC4zNy02LjE2eiIgLz48L2c+CjxnIGlkPSJsYWJlbC1vdXRsaW5lIj48cGF0aCBkPSJNMTcuNjMgNS44NEMxNy4yNyA1LjMzIDE2LjY3IDUgMTYgNUw1IDUuMDFDMy45IDUuMDEgMyA1LjkgMyA3djEwYzAgMS4xLjkgMS45OSAyIDEuOTlMMTYgMTljLjY3IDAgMS4yNy0uMzMgMS42My0uODRMMjIgMTJsLTQuMzctNi4xNnpNMTYgMTdINVY3aDExbDMuNTUgNUwxNiAxN3oiIC8+PC9nPgo8ZyBpZD0ibGFuZ3VhZ2UiPjxwYXRoIGQ9Ik0xMS45OSAyQzYuNDcgMiAyIDYuNDggMiAxMnM0LjQ3IDEwIDkuOTkgMTBDMTcuNTIgMjIgMjIgMTcuNTIgMjIgMTJTMTcuNTIgMiAxMS45OSAyem02LjkzIDZoLTIuOTVjLS4zMi0xLjI1LS43OC0yLjQ1LTEuMzgtMy41NiAxLjg0LjYzIDMuMzcgMS45MSA0LjMzIDMuNTZ6TTEyIDQuMDRjLjgzIDEuMiAxLjQ4IDIuNTMgMS45MSAzLjk2aC0zLjgyYy40My0xLjQzIDEuMDgtMi43NiAxLjkxLTMuOTZ6TTQuMjYgMTRDNC4xIDEzLjM2IDQgMTIuNjkgNCAxMnMuMS0xLjM2LjI2LTJoMy4zOGMtLjA4LjY2LS4xNCAxLjMyLS4xNCAyIDAgLjY4LjA2IDEuMzQuMTQgMkg0LjI2em0uODIgMmgyLjk1Yy4zMiAxLjI1Ljc4IDIuNDUgMS4zOCAzLjU2LTEuODQtLjYzLTMuMzctMS45LTQuMzMtMy41NnptMi45NS04SDUuMDhjLjk2LTEuNjYgMi40OS0yLjkzIDQuMzMtMy41NkM4LjgxIDUuNTUgOC4zNSA2Ljc1IDguMDMgOHpNMTIgMTkuOTZjLS44My0xLjItMS40OC0yLjUzLTEuOTEtMy45NmgzLjgyYy0uNDMgMS40My0xLjA4IDIuNzYtMS45MSAzLjk2ek0xNC4zNCAxNEg5LjY2Yy0uMDktLjY2LS4xNi0xLjMyLS4xNi0yIDAtLjY4LjA3LTEuMzUuMTYtMmg0LjY4Yy4wOS42NS4xNiAxLjMyLjE2IDIgMCAuNjgtLjA3IDEuMzQtLjE2IDJ6bS4yNSA1LjU2Yy42LTEuMTEgMS4wNi0yLjMxIDEuMzgtMy41NmgyLjk1Yy0uOTYgMS42NS0yLjQ5IDIuOTMtNC4zMyAzLjU2ek0xNi4zNiAxNGMuMDgtLjY2LjE0LTEuMzIuMTQtMiAwLS42OC0uMDYtMS4zNC0uMTQtMmgzLjM4Yy4xNi42NC4yNiAxLjMxLjI2IDJzLS4xIDEuMzYtLjI2IDJoLTMuMzh6IiAvPjwvZz4KPGcgaWQ9Imxhc3QtcGFnZSI+PHBhdGggZD0iTTUuNTkgNy40MUwxMC4xOCAxMmwtNC41OSA0LjU5TDcgMThsNi02LTYtNnpNMTYgNmgydjEyaC0yeiIgLz48L2c+CjxnIGlkPSJsYXVuY2giPjxwYXRoIGQ9Ik0xOSAxOUg1VjVoN1YzSDVjLTEuMTEgMC0yIC45LTIgMnYxNGMwIDEuMS44OSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMnYtN2gtMnY3ek0xNCAzdjJoMy41OWwtOS44MyA5LjgzIDEuNDEgMS40MUwxOSA2LjQxVjEwaDJWM2gtN3oiIC8+PC9nPgo8ZyBpZD0ibGlnaHRidWxiLW91dGxpbmUiPjxwYXRoIGQ9Ik05IDIxYzAgLjU1LjQ1IDEgMSAxaDRjLjU1IDAgMS0uNDUgMS0xdi0xSDl2MXptMy0xOUM4LjE0IDIgNSA1LjE0IDUgOWMwIDIuMzggMS4xOSA0LjQ3IDMgNS43NFYxN2MwIC41NS40NSAxIDEgMWg2Yy41NSAwIDEtLjQ1IDEtMXYtMi4yNmMxLjgxLTEuMjcgMy0zLjM2IDMtNS43NCAwLTMuODYtMy4xNC03LTctN3ptMi44NSAxMS4xbC0uODUuNlYxNmgtNHYtMi4zbC0uODUtLjZDNy44IDEyLjE2IDcgMTAuNjMgNyA5YzAtMi43NiAyLjI0LTUgNS01czUgMi4yNCA1IDVjMCAxLjYzLS44IDMuMTYtMi4xNSA0LjF6IiAvPjwvZz4KPGcgaWQ9ImxpbmUtc3R5bGUiPjxwYXRoIGQ9Ik0zIDE2aDV2LTJIM3Yyem02LjUgMGg1di0yaC01djJ6bTYuNSAwaDV2LTJoLTV2MnpNMyAyMGgydi0ySDN2MnptNCAwaDJ2LTJIN3Yyem00IDBoMnYtMmgtMnYyem00IDBoMnYtMmgtMnYyem00IDBoMnYtMmgtMnYyek0zIDEyaDh2LTJIM3Yyem0xMCAwaDh2LTJoLTh2MnpNMyA0djRoMThWNEgzeiIgLz48L2c+CjxnIGlkPSJsaW5lLXdlaWdodCI+PHBhdGggZD0iTTMgMTdoMTh2LTJIM3Yyem0wIDNoMTh2LTFIM3Yxem0wLTdoMTh2LTNIM3Yzem0wLTl2NGgxOFY0SDN6IiAvPjwvZz4KPGcgaWQ9ImxpbmsiPjxwYXRoIGQ9Ik0zLjkgMTJjMC0xLjcxIDEuMzktMy4xIDMuMS0zLjFoNFY3SDdjLTIuNzYgMC01IDIuMjQtNSA1czIuMjQgNSA1IDVoNHYtMS45SDdjLTEuNzEgMC0zLjEtMS4zOS0zLjEtMy4xek04IDEzaDh2LTJIOHYyem05LTZoLTR2MS45aDRjMS43MSAwIDMuMSAxLjM5IDMuMSAzLjFzLTEuMzkgMy4xLTMuMSAzLjFoLTRWMTdoNGMyLjc2IDAgNS0yLjI0IDUtNXMtMi4yNC01LTUtNXoiIC8+PC9nPgo8ZyBpZD0ibGlzdCI+PHBhdGggZD0iTTMgMTNoMnYtMkgzdjJ6bTAgNGgydi0ySDN2MnptMC04aDJWN0gzdjJ6bTQgNGgxNHYtMkg3djJ6bTAgNGgxNHYtMkg3djJ6TTcgN3YyaDE0VjdIN3oiIC8+PC9nPgo8ZyBpZD0ibG9jayI+PHBhdGggZD0iTTE4IDhoLTFWNmMwLTIuNzYtMi4yNC01LTUtNVM3IDMuMjQgNyA2djJINmMtMS4xIDAtMiAuOS0yIDJ2MTBjMCAxLjEuOSAyIDIgMmgxMmMxLjEgMCAyLS45IDItMlYxMGMwLTEuMS0uOS0yLTItMnptLTYgOWMtMS4xIDAtMi0uOS0yLTJzLjktMiAyLTIgMiAuOSAyIDItLjkgMi0yIDJ6bTMuMS05SDguOVY2YzAtMS43MSAxLjM5LTMuMSAzLjEtMy4xIDEuNzEgMCAzLjEgMS4zOSAzLjEgMy4xdjJ6IiAvPjwvZz4KPGcgaWQ9ImxvY2stb3BlbiI+PHBhdGggZD0iTTEyIDE3YzEuMSAwIDItLjkgMi0ycy0uOS0yLTItMi0yIC45LTIgMiAuOSAyIDIgMnptNi05aC0xVjZjMC0yLjc2LTIuMjQtNS01LTVTNyAzLjI0IDcgNmgxLjljMC0xLjcxIDEuMzktMy4xIDMuMS0zLjEgMS43MSAwIDMuMSAxLjM5IDMuMSAzLjF2Mkg2Yy0xLjEgMC0yIC45LTIgMnYxMGMwIDEuMS45IDIgMiAyaDEyYzEuMSAwIDItLjkgMi0yVjEwYzAtMS4xLS45LTItMi0yem0wIDEySDZWMTBoMTJ2MTB6IiAvPjwvZz4KPGcgaWQ9ImxvY2stb3V0bGluZSI+PHBhdGggZD0iTTEyIDE3YzEuMSAwIDItLjkgMi0ycy0uOS0yLTItMi0yIC45LTIgMiAuOSAyIDIgMnptNi05aC0xVjZjMC0yLjc2LTIuMjQtNS01LTVTNyAzLjI0IDcgNnYySDZjLTEuMSAwLTIgLjktMiAydjEwYzAgMS4xLjkgMiAyIDJoMTJjMS4xIDAgMi0uOSAyLTJWMTBjMC0xLjEtLjktMi0yLTJ6TTguOSA2YzAtMS43MSAxLjM5LTMuMSAzLjEtMy4xczMuMSAxLjM5IDMuMSAzLjF2Mkg4LjlWNnpNMTggMjBINlYxMGgxMnYxMHoiIC8+PC9nPgo8ZyBpZD0ibG93LXByaW9yaXR5Ij48cGF0aCBkPSJNMTQgNWg4djJoLTh6bTAgNS41aDh2MmgtOHptMCA1LjVoOHYyaC04ek0yIDExLjVDMiAxNS4wOCA0LjkyIDE4IDguNSAxOEg5djJsMy0zLTMtM3YyaC0uNUM2LjAyIDE2IDQgMTMuOTggNCAxMS41UzYuMDIgNyA4LjUgN0gxMlY1SDguNUM0LjkyIDUgMiA3LjkyIDIgMTEuNXoiIC8+PC9nPgo8ZyBpZD0ibG95YWx0eSI+PHBhdGggZD0iTTIxLjQxIDExLjU4bC05LTlDMTIuMDUgMi4yMiAxMS41NSAyIDExIDJINGMtMS4xIDAtMiAuOS0yIDJ2N2MwIC41NS4yMiAxLjA1LjU5IDEuNDJsOSA5Yy4zNi4zNi44Ni41OCAxLjQxLjU4LjU1IDAgMS4wNS0uMjIgMS40MS0uNTlsNy03Yy4zNy0uMzYuNTktLjg2LjU5LTEuNDEgMC0uNTUtLjIzLTEuMDYtLjU5LTEuNDJ6TTUuNSA3QzQuNjcgNyA0IDYuMzMgNCA1LjVTNC42NyA0IDUuNSA0IDcgNC42NyA3IDUuNSA2LjMzIDcgNS41IDd6bTExLjc3IDguMjdMMTMgMTkuNTRsLTQuMjctNC4yN0M4LjI4IDE0LjgxIDggMTQuMTkgOCAxMy41YzAtMS4zOCAxLjEyLTIuNSAyLjUtMi41LjY5IDAgMS4zMi4yOCAxLjc3Ljc0bC43My43Mi43My0uNzNjLjQ1LS40NSAxLjA4LS43MyAxLjc3LS43MyAxLjM4IDAgMi41IDEuMTIgMi41IDIuNSAwIC42OS0uMjggMS4zMi0uNzMgMS43N3oiIC8+PC9nPgo8ZyBpZD0ibWFpbCI+PHBhdGggZD0iTTIwIDRINGMtMS4xIDAtMS45OS45LTEuOTkgMkwyIDE4YzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJWNmMwLTEuMS0uOS0yLTItMnptMCA0bC04IDUtOC01VjZsOCA1IDgtNXYyeiIgLz48L2c+CjxnIGlkPSJtYXJrdW5yZWFkIj48cGF0aCBkPSJNMjAgNEg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0yem0wIDRsLTggNS04LTVWNmw4IDUgOC01djJ6IiAvPjwvZz4KPGcgaWQ9Im1hcmt1bnJlYWQtbWFpbGJveCI+PHBhdGggZD0iTTIwIDZIMTB2Nkg4VjRoNlYwSDZ2Nkg0Yy0xLjEgMC0yIC45LTIgMnYxMmMwIDEuMS45IDIgMiAyaDE2YzEuMSAwIDItLjkgMi0yVjhjMC0xLjEtLjktMi0yLTJ6IiAvPjwvZz4KPGcgaWQ9Im1lbnUiPjxwYXRoIGQ9Ik0zIDE4aDE4di0ySDN2MnptMC01aDE4di0ySDN2MnptMC03djJoMThWNkgzeiIgLz48L2c+CjxnIGlkPSJtb3JlLWhvcml6Ij48cGF0aCBkPSJNNiAxMGMtMS4xIDAtMiAuOS0yIDJzLjkgMiAyIDIgMi0uOSAyLTItLjktMi0yLTJ6bTEyIDBjLTEuMSAwLTIgLjktMiAycy45IDIgMiAyIDItLjkgMi0yLS45LTItMi0yem0tNiAwYy0xLjEgMC0yIC45LTIgMnMuOSAyIDIgMiAyLS45IDItMi0uOS0yLTItMnoiIC8+PC9nPgo8ZyBpZD0ibW9yZS12ZXJ0Ij48cGF0aCBkPSJNMTIgOGMxLjEgMCAyLS45IDItMnMtLjktMi0yLTItMiAuOS0yIDIgLjkgMiAyIDJ6bTAgMmMtMS4xIDAtMiAuOS0yIDJzLjkgMiAyIDIgMi0uOSAyLTItLjktMi0yLTJ6bTAgNmMtMS4xIDAtMiAuOS0yIDJzLjkgMiAyIDIgMi0uOSAyLTItLjktMi0yLTJ6IiAvPjwvZz4KPGcgaWQ9Im1vdG9yY3ljbGUiPjxwYXRoIGQ9Ik0xOS40NCA5LjAzTDE1LjQxIDVIMTF2MmgzLjU5bDIgMkg1Yy0yLjggMC01IDIuMi01IDVzMi4yIDUgNSA1YzIuNDYgMCA0LjQ1LTEuNjkgNC45LTRoMS42NWwyLjc3LTIuNzdjLS4yMS41NC0uMzIgMS4xNC0uMzIgMS43NyAwIDIuOCAyLjIgNSA1IDVzNS0yLjIgNS01YzAtMi42NS0xLjk3LTQuNzctNC41Ni00Ljk3ek03LjgyIDE1QzcuNCAxNi4xNSA2LjI4IDE3IDUgMTdjLTEuNjMgMC0zLTEuMzctMy0zczEuMzctMyAzLTNjMS4yOCAwIDIuNC44NSAyLjgyIDJINXYyaDIuODJ6TTE5IDE3Yy0xLjY2IDAtMy0xLjM0LTMtM3MxLjM0LTMgMy0zIDMgMS4zNCAzIDMtMS4zNCAzLTMgM3oiIC8+PC9nPgo8ZyBpZD0ibW92ZS10by1pbmJveCI+PHBhdGggZD0iTTE5IDNINC45OWMtMS4xMSAwLTEuOTguOS0xLjk4IDJMMyAxOWMwIDEuMS44OCAyIDEuOTkgMkgxOWMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0wIDEyaC00YzAgMS42Ni0xLjM1IDMtMyAzcy0zLTEuMzQtMy0zSDQuOTlWNUgxOXYxMHptLTMtNWgtMlY3aC00djNIOGw0IDQgNC00eiIgLz48L2c+CjxnIGlkPSJuZXh0LXdlZWsiPjxwYXRoIGQ9Ik0yMCA3aC00VjVjMC0uNTUtLjIyLTEuMDUtLjU5LTEuNDFDMTUuMDUgMy4yMiAxNC41NSAzIDE0IDNoLTRjLTEuMSAwLTIgLjktMiAydjJINGMtMS4xIDAtMiAuOS0yIDJ2MTFjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY5YzAtMS4xLS45LTItMi0yek0xMCA1aDR2MmgtNFY1em0xIDEzLjVsLTEtMSAzLTMtMy0zIDEtMSA0IDQtNCA0eiIgLz48L2c+CjxnIGlkPSJub3RlLWFkZCI+PHBhdGggZD0iTTE0IDJINmMtMS4xIDAtMS45OS45LTEuOTkgMkw0IDIwYzAgMS4xLjg5IDIgMS45OSAySDE4YzEuMSAwIDItLjkgMi0yVjhsLTYtNnptMiAxNGgtM3YzaC0ydi0zSDh2LTJoM3YtM2gydjNoM3Yyem0tMy03VjMuNUwxOC41IDlIMTN6IiAvPjwvZz4KPGcgaWQ9Im9mZmxpbmUtcGluIj48cGF0aCBkPSJNMTIgMkM2LjUgMiAyIDYuNSAyIDEyczQuNSAxMCAxMCAxMCAxMC00LjUgMTAtMTBTMTcuNSAyIDEyIDJ6bTUgMTZIN3YtMmgxMHYyem0tNi43LTRMNyAxMC43bDEuNC0xLjQgMS45IDEuOSA1LjMtNS4zTDE3IDcuMyAxMC4zIDE0eiIgLz48L2c+CjxnIGlkPSJvcGFjaXR5Ij48cGF0aCBkPSJNMTcuNjYgOEwxMiAyLjM1IDYuMzQgOEM0Ljc4IDkuNTYgNCAxMS42NCA0IDEzLjY0cy43OCA0LjExIDIuMzQgNS42NyAzLjYxIDIuMzUgNS42NiAyLjM1IDQuMS0uNzkgNS42Ni0yLjM1UzIwIDE1LjY0IDIwIDEzLjY0IDE5LjIyIDkuNTYgMTcuNjYgOHpNNiAxNGMuMDEtMiAuNjItMy4yNyAxLjc2LTQuNEwxMiA1LjI3bDQuMjQgNC4zOEMxNy4zOCAxMC43NyAxNy45OSAxMiAxOCAxNEg2eiIgLz48L2c+CjxnIGlkPSJvcGVuLWluLWJyb3dzZXIiPjxwYXRoIGQ9Ik0xOSA0SDVjLTEuMTEgMC0yIC45LTIgMnYxMmMwIDEuMS44OSAyIDIgMmg0di0ySDVWOGgxNHYxMGgtNHYyaDRjMS4xIDAgMi0uOSAyLTJWNmMwLTEuMS0uODktMi0yLTJ6bS03IDZsLTQgNGgzdjZoMnYtNmgzbC00LTR6IiAvPjwvZz4KPGcgaWQ9Im9wZW4taW4tbmV3Ij48cGF0aCBkPSJNMTkgMTlINVY1aDdWM0g1Yy0xLjExIDAtMiAuOS0yIDJ2MTRjMCAxLjEuODkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJ2LTdoLTJ2N3pNMTQgM3YyaDMuNTlsLTkuODMgOS44MyAxLjQxIDEuNDFMMTkgNi40MVYxMGgyVjNoLTd6IiAvPjwvZz4KPGcgaWQ9Im9wZW4td2l0aCI+PHBhdGggZD0iTTEwIDloNFY2aDNsLTUtNS01IDVoM3Yzem0tMSAxSDZWN2wtNSA1IDUgNXYtM2gzdi00em0xNCAybC01LTV2M2gtM3Y0aDN2M2w1LTV6bS05IDNoLTR2M0g3bDUgNSA1LTVoLTN2LTN6IiAvPjwvZz4KPGcgaWQ9InBhZ2V2aWV3Ij48cGF0aCBkPSJNMTEuNSA5QzEwLjEyIDkgOSAxMC4xMiA5IDExLjVzMS4xMiAyLjUgMi41IDIuNSAyLjUtMS4xMiAyLjUtMi41UzEyLjg4IDkgMTEuNSA5ek0yMCA0SDRjLTEuMSAwLTIgLjktMiAydjEyYzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJWNmMwLTEuMS0uOS0yLTItMnptLTMuMjEgMTQuMjFsLTIuOTEtMi45MWMtLjY5LjQ0LTEuNTEuNy0yLjM5LjdDOS4wMSAxNiA3IDEzLjk5IDcgMTEuNVM5LjAxIDcgMTEuNSA3IDE2IDkuMDEgMTYgMTEuNWMwIC44OC0uMjYgMS42OS0uNyAyLjM5bDIuOTEgMi45LTEuNDIgMS40MnoiIC8+PC9nPgo8ZyBpZD0icGFuLXRvb2wiPjxwYXRoIGQ9Ik0yMyA1LjVWMjBjMCAyLjItMS44IDQtNCA0aC03LjNjLTEuMDggMC0yLjEtLjQzLTIuODUtMS4xOUwxIDE0LjgzczEuMjYtMS4yMyAxLjMtMS4yNWMuMjItLjE5LjQ5LS4yOS43OS0uMjkuMjIgMCAuNDIuMDYuNi4xNi4wNC4wMSA0LjMxIDIuNDYgNC4zMSAyLjQ2VjRjMC0uODMuNjctMS41IDEuNS0xLjVTMTEgMy4xNyAxMSA0djdoMVYxLjVjMC0uODMuNjctMS41IDEuNS0xLjVTMTUgLjY3IDE1IDEuNVYxMWgxVjIuNWMwLS44My42Ny0xLjUgMS41LTEuNXMxLjUuNjcgMS41IDEuNVYxMWgxVjUuNWMwLS44My42Ny0xLjUgMS41LTEuNXMxLjUuNjcgMS41IDEuNXoiIC8+PC9nPgo8ZyBpZD0icGF5bWVudCI+PHBhdGggZD0iTTIwIDRINGMtMS4xMSAwLTEuOTkuODktMS45OSAyTDIgMThjMCAxLjExLjg5IDIgMiAyaDE2YzEuMTEgMCAyLS44OSAyLTJWNmMwLTEuMTEtLjg5LTItMi0yem0wIDE0SDR2LTZoMTZ2NnptMC0xMEg0VjZoMTZ2MnoiIC8+PC9nPgo8ZyBpZD0icGVybS1jYW1lcmEtbWljIj48cGF0aCBkPSJNMjAgNWgtMy4xN0wxNSAzSDlMNy4xNyA1SDRjLTEuMSAwLTIgLjktMiAydjEyYzAgMS4xLjkgMiAyIDJoN3YtMi4wOWMtMi44My0uNDgtNS0yLjk0LTUtNS45MWgyYzAgMi4yMSAxLjc5IDQgNCA0czQtMS43OSA0LTRoMmMwIDIuOTctMi4xNyA1LjQzLTUgNS45MVYyMWg3YzEuMSAwIDItLjkgMi0yVjdjMC0xLjEtLjktMi0yLTJ6bS02IDhjMCAxLjEtLjkgMi0yIDJzLTItLjktMi0yVjljMC0xLjEuOS0yIDItMnMyIC45IDIgMnY0eiIgLz48L2c+CjxnIGlkPSJwZXJtLWNvbnRhY3QtY2FsZW5kYXIiPjxwYXRoIGQ9Ik0xOSAzaC0xVjFoLTJ2Mkg4VjFINnYySDVjLTEuMTEgMC0yIC45LTIgMnYxNGMwIDEuMS44OSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tNyAzYzEuNjYgMCAzIDEuMzQgMyAzcy0xLjM0IDMtMyAzLTMtMS4zNC0zLTMgMS4zNC0zIDMtM3ptNiAxMkg2di0xYzAtMiA0LTMuMSA2LTMuMXM2IDEuMSA2IDMuMXYxeiIgLz48L2c+CjxnIGlkPSJwZXJtLWRhdGEtc2V0dGluZyI+PHBhdGggZD0iTTE4Ljk5IDExLjVjLjM0IDAgLjY3LjAzIDEgLjA3TDIwIDAgMCAyMGgxMS41NmMtLjA0LS4zMy0uMDctLjY2LS4wNy0xIDAtNC4xNCAzLjM2LTcuNSA3LjUtNy41em0zLjcxIDcuOTljLjAyLS4xNi4wNC0uMzIuMDQtLjQ5IDAtLjE3LS4wMS0uMzMtLjA0LS40OWwxLjA2LS44M2MuMDktLjA4LjEyLS4yMS4wNi0uMzJsLTEtMS43M2MtLjA2LS4xMS0uMTktLjE1LS4zMS0uMTFsLTEuMjQuNWMtLjI2LS4yLS41NC0uMzctLjg1LS40OWwtLjE5LTEuMzJjLS4wMS0uMTItLjEyLS4yMS0uMjQtLjIxaC0yYy0uMTIgMC0uMjMuMDktLjI1LjIxbC0uMTkgMS4zMmMtLjMuMTMtLjU5LjI5LS44NS40OWwtMS4yNC0uNWMtLjExLS4wNC0uMjQgMC0uMzEuMTFsLTEgMS43M2MtLjA2LjExLS4wNC4yNC4wNi4zMmwxLjA2LjgzYy0uMDIuMTYtLjAzLjMyLS4wMy40OSAwIC4xNy4wMS4zMy4wMy40OWwtMS4wNi44M2MtLjA5LjA4LS4xMi4yMS0uMDYuMzJsMSAxLjczYy4wNi4xMS4xOS4xNS4zMS4xMWwxLjI0LS41Yy4yNi4yLjU0LjM3Ljg1LjQ5bC4xOSAxLjMyYy4wMi4xMi4xMi4yMS4yNS4yMWgyYy4xMiAwIC4yMy0uMDkuMjUtLjIxbC4xOS0xLjMyYy4zLS4xMy41OS0uMjkuODQtLjQ5bDEuMjUuNWMuMTEuMDQuMjQgMCAuMzEtLjExbDEtMS43M2MuMDYtLjExLjAzLS4yNC0uMDYtLjMybC0xLjA3LS44M3ptLTMuNzEgMS4wMWMtLjgzIDAtMS41LS42Ny0xLjUtMS41cy42Ny0xLjUgMS41LTEuNSAxLjUuNjcgMS41IDEuNS0uNjcgMS41LTEuNSAxLjV6IiAvPjwvZz4KPGcgaWQ9InBlcm0tZGV2aWNlLWluZm9ybWF0aW9uIj48cGF0aCBkPSJNMTMgN2gtMnYyaDJWN3ptMCA0aC0ydjZoMnYtNnptNC05Ljk5TDcgMWMtMS4xIDAtMiAuOS0yIDJ2MThjMCAxLjEuOSAyIDIgMmgxMGMxLjEgMCAyLS45IDItMlYzYzAtMS4xLS45LTEuOTktMi0xLjk5ek0xNyAxOUg3VjVoMTB2MTR6IiAvPjwvZz4KPGcgaWQ9InBlcm0taWRlbnRpdHkiPjxwYXRoIGQ9Ik0xMiA1LjljMS4xNiAwIDIuMS45NCAyLjEgMi4xcy0uOTQgMi4xLTIuMSAyLjFTOS45IDkuMTYgOS45IDhzLjk0LTIuMSAyLjEtMi4xbTAgOWMyLjk3IDAgNi4xIDEuNDYgNi4xIDIuMXYxLjFINS45VjE3YzAtLjY0IDMuMTMtMi4xIDYuMS0yLjFNMTIgNEM5Ljc5IDQgOCA1Ljc5IDggOHMxLjc5IDQgNCA0IDQtMS43OSA0LTQtMS43OS00LTQtNHptMCA5Yy0yLjY3IDAtOCAxLjM0LTggNHYzaDE2di0zYzAtMi42Ni01LjMzLTQtOC00eiIgLz48L2c+CjxnIGlkPSJwZXJtLW1lZGlhIj48cGF0aCBkPSJNMiA2SDB2NWguMDFMMCAyMGMwIDEuMS45IDIgMiAyaDE4di0ySDJWNnptMjAtMmgtOGwtMi0ySDZjLTEuMSAwLTEuOTkuOS0xLjk5IDJMNCAxNmMwIDEuMS45IDIgMiAyaDE2YzEuMSAwIDItLjkgMi0yVjZjMC0xLjEtLjktMi0yLTJ6TTcgMTVsNC41LTYgMy41IDQuNTEgMi41LTMuMDFMMjEgMTVIN3oiIC8+PC9nPgo8ZyBpZD0icGVybS1waG9uZS1tc2ciPjxwYXRoIGQ9Ik0yMCAxNS41Yy0xLjI1IDAtMi40NS0uMi0zLjU3LS41Ny0uMzUtLjExLS43NC0uMDMtMS4wMi4yNGwtMi4yIDIuMmMtMi44My0xLjQ0LTUuMTUtMy43NS02LjU5LTYuNThsMi4yLTIuMjFjLjI4LS4yNy4zNi0uNjYuMjUtMS4wMUM4LjcgNi40NSA4LjUgNS4yNSA4LjUgNGMwLS41NS0uNDUtMS0xLTFINGMtLjU1IDAtMSAuNDUtMSAxIDAgOS4zOSA3LjYxIDE3IDE3IDE3IC41NSAwIDEtLjQ1IDEtMXYtMy41YzAtLjU1LS40NS0xLTEtMXpNMTIgM3YxMGwzLTNoNlYzaC05eiIgLz48L2c+CjxnIGlkPSJwZXJtLXNjYW4td2lmaSI+PHBhdGggZD0iTTEyIDNDNi45NSAzIDMuMTUgNC44NSAwIDcuMjNMMTIgMjIgMjQgNy4yNUMyMC44NSA0Ljg3IDE3LjA1IDMgMTIgM3ptMSAxM2gtMnYtNmgydjZ6bS0yLThWNmgydjJoLTJ6IiAvPjwvZz4KPGcgaWQ9InBldHMiPjxjaXJjbGUgY3g9IjQuNSIgY3k9IjkuNSIgcj0iMi41IiAvPjxjaXJjbGUgY3g9IjkiIGN5PSI1LjUiIHI9IjIuNSIgLz48Y2lyY2xlIGN4PSIxNSIgY3k9IjUuNSIgcj0iMi41IiAvPjxjaXJjbGUgY3g9IjE5LjUiIGN5PSI5LjUiIHI9IjIuNSIgLz48cGF0aCBkPSJNMTcuMzQgMTQuODZjLS44Ny0xLjAyLTEuNi0xLjg5LTIuNDgtMi45MS0uNDYtLjU0LTEuMDUtMS4wOC0xLjc1LTEuMzItLjExLS4wNC0uMjItLjA3LS4zMy0uMDktLjI1LS4wNC0uNTItLjA0LS43OC0uMDRzLS41MyAwLS43OS4wNWMtLjExLjAyLS4yMi4wNS0uMzMuMDktLjcuMjQtMS4yOC43OC0xLjc1IDEuMzItLjg3IDEuMDItMS42IDEuODktMi40OCAyLjkxLTEuMzEgMS4zMS0yLjkyIDIuNzYtMi42MiA0Ljc5LjI5IDEuMDIgMS4wMiAyLjAzIDIuMzMgMi4zMi43My4xNSAzLjA2LS40NCA1LjU0LS40NGguMThjMi40OCAwIDQuODEuNTggNS41NC40NCAxLjMxLS4yOSAyLjA0LTEuMzEgMi4zMy0yLjMyLjMxLTIuMDQtMS4zLTMuNDktMi42MS00Ljh6IiAvPjwvZz4KPGcgaWQ9InBpY3R1cmUtaW4tcGljdHVyZSI+PHBhdGggZD0iTTE5IDdoLTh2Nmg4Vjd6bTItNEgzYy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDEuOTggMiAxLjk4aDE4YzEuMSAwIDItLjg4IDItMS45OFY1YzAtMS4xLS45LTItMi0yem0wIDE2LjAxSDNWNC45OGgxOHYxNC4wM3oiIC8+PC9nPgo8ZyBpZD0icGljdHVyZS1pbi1waWN0dXJlLWFsdCI+PHBhdGggZD0iTTE5IDExaC04djZoOHYtNnptNCA4VjQuOThDMjMgMy44OCAyMi4xIDMgMjEgM0gzYy0xLjEgMC0yIC44OC0yIDEuOThWMTljMCAxLjEuOSAyIDIgMmgxOGMxLjEgMCAyLS45IDItMnptLTIgLjAySDNWNC45N2gxOHYxNC4wNXoiIC8+PC9nPgo8ZyBpZD0icGxheS1mb3Itd29yayI+PHBhdGggZD0iTTExIDV2NS41OUg3LjVsNC41IDQuNSA0LjUtNC41SDEzVjVoLTJ6bS01IDljMCAzLjMxIDIuNjkgNiA2IDZzNi0yLjY5IDYtNmgtMmMwIDIuMjEtMS43OSA0LTQgNHMtNC0xLjc5LTQtNEg2eiIgLz48L2c+CjxnIGlkPSJwb2x5bWVyIj48cGF0aCBkPSJNMTkgNGgtNEw3LjExIDE2LjYzIDQuNSAxMiA5IDRINUwuNSAxMiA1IDIwaDRsNy44OS0xMi42M0wxOS41IDEyIDE1IDIwaDRsNC41LTh6IiAvPjwvZz4KPGcgaWQ9InBvd2VyLXNldHRpbmdzLW5ldyI+PHBhdGggZD0iTTEzIDNoLTJ2MTBoMlYzem00LjgzIDIuMTdsLTEuNDIgMS40MkMxNy45OSA3Ljg2IDE5IDkuODEgMTkgMTJjMCAzLjg3LTMuMTMgNy03IDdzLTctMy4xMy03LTdjMC0yLjE5IDEuMDEtNC4xNCAyLjU4LTUuNDJMNi4xNyA1LjE3QzQuMjMgNi44MiAzIDkuMjYgMyAxMmMwIDQuOTcgNC4wMyA5IDkgOXM5LTQuMDMgOS05YzAtMi43NC0xLjIzLTUuMTgtMy4xNy02LjgzeiIgLz48L2c+CjxnIGlkPSJwcmVnbmFudC13b21hbiI+PHBhdGggZD0iTTkgNGMwLTEuMTEuODktMiAyLTJzMiAuODkgMiAyLS44OSAyLTIgMi0yLS44OS0yLTJ6bTcgOWMtLjAxLTEuMzQtLjgzLTIuNTEtMi0zIDAtMS42Ni0xLjM0LTMtMy0zcy0zIDEuMzQtMyAzdjdoMnY1aDN2LTVoM3YtNHoiIC8+PC9nPgo8ZyBpZD0icHJpbnQiPjxwYXRoIGQ9Ik0xOSA4SDVjLTEuNjYgMC0zIDEuMzQtMyAzdjZoNHY0aDEydi00aDR2LTZjMC0xLjY2LTEuMzQtMy0zLTN6bS0zIDExSDh2LTVoOHY1em0zLTdjLS41NSAwLTEtLjQ1LTEtMXMuNDUtMSAxLTEgMSAuNDUgMSAxLS40NSAxLTEgMXptLTEtOUg2djRoMTJWM3oiIC8+PC9nPgo8ZyBpZD0icXVlcnktYnVpbGRlciI+PHBhdGggZD0iTTExLjk5IDJDNi40NyAyIDIgNi40OCAyIDEyczQuNDcgMTAgOS45OSAxMEMxNy41MiAyMiAyMiAxNy41MiAyMiAxMlMxNy41MiAyIDExLjk5IDJ6TTEyIDIwYy00LjQyIDAtOC0zLjU4LTgtOHMzLjU4LTggOC04IDggMy41OCA4IDgtMy41OCA4LTggOHptLjUtMTNIMTF2Nmw1LjI1IDMuMTUuNzUtMS4yMy00LjUtMi42N3oiIC8+PC9nPgo8ZyBpZD0icXVlc3Rpb24tYW5zd2VyIj48cGF0aCBkPSJNMjEgNmgtMnY5SDZ2MmMwIC41NS40NSAxIDEgMWgxMWw0IDRWN2MwLS41NS0uNDUtMS0xLTF6bS00IDZWM2MwLS41NS0uNDUtMS0xLTFIM2MtLjU1IDAtMSAuNDUtMSAxdjE0bDQtNGgxMGMuNTUgMCAxLS40NSAxLTF6IiAvPjwvZz4KPGcgaWQ9InJhZGlvLWJ1dHRvbi1jaGVja2VkIj48cGF0aCBkPSJNMTIgN2MtMi43NiAwLTUgMi4yNC01IDVzMi4yNCA1IDUgNSA1LTIuMjQgNS01LTIuMjQtNS01LTV6bTAtNUM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptMCAxOGMtNC40MiAwLTgtMy41OC04LThzMy41OC04IDgtOCA4IDMuNTggOCA4LTMuNTggOC04IDh6IiAvPjwvZz4KPGcgaWQ9InJhZGlvLWJ1dHRvbi11bmNoZWNrZWQiPjxwYXRoIGQ9Ik0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0wIDE4Yy00LjQyIDAtOC0zLjU4LTgtOHMzLjU4LTggOC04IDggMy41OCA4IDgtMy41OCA4LTggOHoiIC8+PC9nPgo8ZyBpZD0icmVjZWlwdCI+PHBhdGggZD0iTTE4IDE3SDZ2LTJoMTJ2MnptMC00SDZ2LTJoMTJ2MnptMC00SDZWN2gxMnYyek0zIDIybDEuNS0xLjVMNiAyMmwxLjUtMS41TDkgMjJsMS41LTEuNUwxMiAyMmwxLjUtMS41TDE1IDIybDEuNS0xLjVMMTggMjJsMS41LTEuNUwyMSAyMlYybC0xLjUgMS41TDE4IDJsLTEuNSAxLjVMMTUgMmwtMS41IDEuNUwxMiAybC0xLjUgMS41TDkgMiA3LjUgMy41IDYgMiA0LjUgMy41IDMgMnYyMHoiIC8+PC9nPgo8ZyBpZD0icmVjb3JkLXZvaWNlLW92ZXIiPjxjaXJjbGUgY3g9IjkiIGN5PSI5IiByPSI0IiAvPjxwYXRoIGQ9Ik05IDE1Yy0yLjY3IDAtOCAxLjM0LTggNHYyaDE2di0yYzAtMi42Ni01LjMzLTQtOC00em03Ljc2LTkuNjRsLTEuNjggMS42OWMuODQgMS4xOC44NCAyLjcxIDAgMy44OWwxLjY4IDEuNjljMi4wMi0yLjAyIDIuMDItNS4wNyAwLTcuMjd6TTIwLjA3IDJsLTEuNjMgMS42M2MyLjc3IDMuMDIgMi43NyA3LjU2IDAgMTAuNzRMMjAuMDcgMTZjMy45LTMuODkgMy45MS05Ljk1IDAtMTR6IiAvPjwvZz4KPGcgaWQ9InJlZGVlbSI+PHBhdGggZD0iTTIwIDZoLTIuMThjLjExLS4zMS4xOC0uNjUuMTgtMSAwLTEuNjYtMS4zNC0zLTMtMy0xLjA1IDAtMS45Ni41NC0yLjUgMS4zNWwtLjUuNjctLjUtLjY4QzEwLjk2IDIuNTQgMTAuMDUgMiA5IDIgNy4zNCAyIDYgMy4zNCA2IDVjMCAuMzUuMDcuNjkuMTggMUg0Yy0xLjExIDAtMS45OS44OS0xLjk5IDJMMiAxOWMwIDEuMTEuODkgMiAyIDJoMTZjMS4xMSAwIDItLjg5IDItMlY4YzAtMS4xMS0uODktMi0yLTJ6bS01LTJjLjU1IDAgMSAuNDUgMSAxcy0uNDUgMS0xIDEtMS0uNDUtMS0xIC40NS0xIDEtMXpNOSA0Yy41NSAwIDEgLjQ1IDEgMXMtLjQ1IDEtMSAxLTEtLjQ1LTEtMSAuNDUtMSAxLTF6bTExIDE1SDR2LTJoMTZ2MnptMC01SDRWOGg1LjA4TDcgMTAuODMgOC42MiAxMiAxMSA4Ljc2bDEtMS4zNiAxIDEuMzZMMTUuMzggMTIgMTcgMTAuODMgMTQuOTIgOEgyMHY2eiIgLz48L2c+CjxnIGlkPSJyZWRvIj48cGF0aCBkPSJNMTguNCAxMC42QzE2LjU1IDguOTkgMTQuMTUgOCAxMS41IDhjLTQuNjUgMC04LjU4IDMuMDMtOS45NiA3LjIyTDMuOSAxNmMxLjA1LTMuMTkgNC4wNS01LjUgNy42LTUuNSAxLjk1IDAgMy43My43MiA1LjEyIDEuODhMMTMgMTZoOVY3bC0zLjYgMy42eiIgLz48L2c+CjxnIGlkPSJyZWZyZXNoIj48cGF0aCBkPSJNMTcuNjUgNi4zNUMxNi4yIDQuOSAxNC4yMSA0IDEyIDRjLTQuNDIgMC03Ljk5IDMuNTgtNy45OSA4czMuNTcgOCA3Ljk5IDhjMy43MyAwIDYuODQtMi41NSA3LjczLTZoLTIuMDhjLS44MiAyLjMzLTMuMDQgNC01LjY1IDQtMy4zMSAwLTYtMi42OS02LTZzMi42OS02IDYtNmMxLjY2IDAgMy4xNC42OSA0LjIyIDEuNzhMMTMgMTFoN1Y0bC0yLjM1IDIuMzV6IiAvPjwvZz4KPGcgaWQ9InJlbW92ZSI+PHBhdGggZD0iTTE5IDEzSDV2LTJoMTR2MnoiIC8+PC9nPgo8ZyBpZD0icmVtb3ZlLWNpcmNsZSI+PHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTUgMTFIN3YtMmgxMHYyeiIgLz48L2c+CjxnIGlkPSJyZW1vdmUtY2lyY2xlLW91dGxpbmUiPjxwYXRoIGQ9Ik03IDExdjJoMTB2LTJIN3ptNS05QzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0wIDE4Yy00LjQxIDAtOC0zLjU5LTgtOHMzLjU5LTggOC04IDggMy41OSA4IDgtMy41OSA4LTggOHoiIC8+PC9nPgo8ZyBpZD0icmVtb3ZlLXNob3BwaW5nLWNhcnQiPjxwYXRoIGQ9Ik0yMi43MyAyMi43M0wyLjc3IDIuNzcgMiAybC0uNzMtLjczTDAgMi41NGw0LjM5IDQuMzkgMi4yMSA0LjY2LTEuMzUgMi40NWMtLjE2LjI4LS4yNS42MS0uMjUuOTYgMCAxLjEuOSAyIDIgMmg3LjQ2bDEuMzggMS4zOGMtLjUuMzYtLjgzLjk1LS44MyAxLjYyIDAgMS4xLjg5IDIgMS45OSAyIC42NyAwIDEuMjYtLjMzIDEuNjItLjg0TDIxLjQ2IDI0bDEuMjctMS4yN3pNNy40MiAxNWMtLjE0IDAtLjI1LS4xMS0uMjUtLjI1bC4wMy0uMTIuOS0xLjYzaDIuMzZsMiAySDcuNDJ6bTguMTMtMmMuNzUgMCAxLjQxLS40MSAxLjc1LTEuMDNsMy41OC02LjQ5Yy4wOC0uMTQuMTItLjMxLjEyLS40OCAwLS41NS0uNDUtMS0xLTFINi41NGw5LjAxIDl6TTcgMThjLTEuMSAwLTEuOTkuOS0xLjk5IDJTNS45IDIyIDcgMjJzMi0uOSAyLTItLjktMi0yLTJ6IiAvPjwvZz4KPGcgaWQ9InJlb3JkZXIiPjxwYXRoIGQ9Ik0zIDE1aDE4di0ySDN2MnptMCA0aDE4di0ySDN2MnptMC04aDE4VjlIM3Yyem0wLTZ2MmgxOFY1SDN6IiAvPjwvZz4KPGcgaWQ9InJlcGx5Ij48cGF0aCBkPSJNMTAgOVY1bC03IDcgNyA3di00LjFjNSAwIDguNSAxLjYgMTEgNS4xLTEtNS00LTEwLTExLTExeiIgLz48L2c+CjxnIGlkPSJyZXBseS1hbGwiPjxwYXRoIGQ9Ik03IDhWNWwtNyA3IDcgN3YtM2wtNC00IDQtNHptNiAxVjVsLTcgNyA3IDd2LTQuMWM1IDAgOC41IDEuNiAxMSA1LjEtMS01LTQtMTAtMTEtMTF6IiAvPjwvZz4KPGcgaWQ9InJlcG9ydCI+PHBhdGggZD0iTTE1LjczIDNIOC4yN0wzIDguMjd2Ny40Nkw4LjI3IDIxaDcuNDZMMjEgMTUuNzNWOC4yN0wxNS43MyAzek0xMiAxNy4zYy0uNzIgMC0xLjMtLjU4LTEuMy0xLjMgMC0uNzIuNTgtMS4zIDEuMy0xLjMuNzIgMCAxLjMuNTggMS4zIDEuMyAwIC43Mi0uNTggMS4zLTEuMyAxLjN6bTEtNC4zaC0yVjdoMnY2eiIgLz48L2c+CjxnIGlkPSJyZXBvcnQtcHJvYmxlbSI+PHBhdGggZD0iTTEgMjFoMjJMMTIgMiAxIDIxem0xMi0zaC0ydi0yaDJ2MnptMC00aC0ydi00aDJ2NHoiIC8+PC9nPgo8ZyBpZD0icmVzdG9yZSI+PHBhdGggZD0iTTEzIDNjLTQuOTcgMC05IDQuMDMtOSA5SDFsMy44OSAzLjg5LjA3LjE0TDkgMTJINmMwLTMuODcgMy4xMy03IDctN3M3IDMuMTMgNyA3LTMuMTMgNy03IDdjLTEuOTMgMC0zLjY4LS43OS00Ljk0LTIuMDZsLTEuNDIgMS40MkM4LjI3IDE5Ljk5IDEwLjUxIDIxIDEzIDIxYzQuOTcgMCA5LTQuMDMgOS05cy00LjAzLTktOS05em0tMSA1djVsNC4yOCAyLjU0LjcyLTEuMjEtMy41LTIuMDhWOEgxMnoiIC8+PC9nPgo8ZyBpZD0icmVzdG9yZS1wYWdlIj48cGF0aCBkPSJNMTQgMkg2Yy0xLjEgMC0xLjk5LjktMS45OSAyTDQgMjBjMCAxLjEuODkgMiAxLjk5IDJIMThjMS4xIDAgMi0uOSAyLTJWOGwtNi02em0tMiAxNmMtMi4wNSAwLTMuODEtMS4yNC00LjU4LTNoMS43MWMuNjMuOSAxLjY4IDEuNSAyLjg3IDEuNSAxLjkzIDAgMy41LTEuNTcgMy41LTMuNVMxMy45MyA5LjUgMTIgOS41Yy0xLjM1IDAtMi41Mi43OC0zLjEgMS45bDEuNiAxLjZoLTRWOWwxLjMgMS4zQzguNjkgOC45MiAxMC4yMyA4IDEyIDhjMi43NiAwIDUgMi4yNCA1IDVzLTIuMjQgNS01IDV6IiAvPjwvZz4KPGcgaWQ9InJvb20iPjxwYXRoIGQ9Ik0xMiAyQzguMTMgMiA1IDUuMTMgNSA5YzAgNS4yNSA3IDEzIDcgMTNzNy03Ljc1IDctMTNjMC0zLjg3LTMuMTMtNy03LTd6bTAgOS41Yy0xLjM4IDAtMi41LTEuMTItMi41LTIuNXMxLjEyLTIuNSAyLjUtMi41IDIuNSAxLjEyIDIuNSAyLjUtMS4xMiAyLjUtMi41IDIuNXoiIC8+PC9nPgo8ZyBpZD0icm91bmRlZC1jb3JuZXIiPjxwYXRoIGQ9Ik0xOSAxOWgydjJoLTJ2LTJ6bTAtMmgydi0yaC0ydjJ6TTMgMTNoMnYtMkgzdjJ6bTAgNGgydi0ySDN2MnptMC04aDJWN0gzdjJ6bTAtNGgyVjNIM3Yyem00IDBoMlYzSDd2MnptOCAxNmgydi0yaC0ydjJ6bS00IDBoMnYtMmgtMnYyem00IDBoMnYtMmgtMnYyem0tOCAwaDJ2LTJIN3Yyem0tNCAwaDJ2LTJIM3Yyek0yMSA4YzAtMi43Ni0yLjI0LTUtNS01aC01djJoNWMxLjY1IDAgMyAxLjM1IDMgM3Y1aDJWOHoiIC8+PC9nPgo8ZyBpZD0icm93aW5nIj48cGF0aCBkPSJNOC41IDE0LjVMNCAxOWwxLjUgMS41TDkgMTdoMmwtMi41LTIuNXpNMTUgMWMtMS4xIDAtMiAuOS0yIDJzLjkgMiAyIDIgMi0uOSAyLTItLjktMi0yLTJ6bTYgMjAuMDFMMTggMjRsLTIuOTktMy4wMVYxOS41bC03LjEtNy4wOWMtLjMxLjA1LS42MS4wNy0uOTEuMDd2LTIuMTZjMS42Ni4wMyAzLjYxLS44NyA0LjY3LTIuMDRsMS40LTEuNTVjLjE5LS4yMS40My0uMzguNjktLjUuMjktLjE0LjYyLS4yMy45Ni0uMjNoLjAzQzE1Ljk5IDYuMDEgMTcgNy4wMiAxNyA4LjI2djUuNzVjMCAuODQtLjM1IDEuNjEtLjkyIDIuMTZsLTMuNTgtMy41OHYtMi4yN2MtLjYzLjUyLTEuNDMgMS4wMi0yLjI5IDEuMzlMMTYuNSAxOEgxOGwzIDMuMDF6IiAvPjwvZz4KPGcgaWQ9InNhdmUiPjxwYXRoIGQ9Ik0xNyAzSDVjLTEuMTEgMC0yIC45LTIgMnYxNGMwIDEuMS44OSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY3bC00LTR6bS01IDE2Yy0xLjY2IDAtMy0xLjM0LTMtM3MxLjM0LTMgMy0zIDMgMS4zNCAzIDMtMS4zNCAzLTMgM3ptMy0xMEg1VjVoMTB2NHoiIC8+PC9nPgo8ZyBpZD0ic2NoZWR1bGUiPjxwYXRoIGQ9Ik0xMS45OSAyQzYuNDcgMiAyIDYuNDggMiAxMnM0LjQ3IDEwIDkuOTkgMTBDMTcuNTIgMjIgMjIgMTcuNTIgMjIgMTJTMTcuNTIgMiAxMS45OSAyek0xMiAyMGMtNC40MiAwLTgtMy41OC04LThzMy41OC04IDgtOCA4IDMuNTggOCA4LTMuNTggOC04IDh6bS41LTEzSDExdjZsNS4yNSAzLjE1Ljc1LTEuMjMtNC41LTIuNjd6IiAvPjwvZz4KPGcgaWQ9InNlYXJjaCI+PHBhdGggZD0iTTE1LjUgMTRoLS43OWwtLjI4LS4yN0MxNS40MSAxMi41OSAxNiAxMS4xMSAxNiA5LjUgMTYgNS45MSAxMy4wOSAzIDkuNSAzUzMgNS45MSAzIDkuNSA1LjkxIDE2IDkuNSAxNmMxLjYxIDAgMy4wOS0uNTkgNC4yMy0xLjU3bC4yNy4yOHYuNzlsNSA0Ljk5TDIwLjQ5IDE5bC00Ljk5LTV6bS02IDBDNy4wMSAxNCA1IDExLjk5IDUgOS41UzcuMDEgNSA5LjUgNSAxNCA3LjAxIDE0IDkuNSAxMS45OSAxNCA5LjUgMTR6IiAvPjwvZz4KPGcgaWQ9InNlbGVjdC1hbGwiPjxwYXRoIGQ9Ik0zIDVoMlYzYy0xLjEgMC0yIC45LTIgMnptMCA4aDJ2LTJIM3Yyem00IDhoMnYtMkg3djJ6TTMgOWgyVjdIM3Yyem0xMC02aC0ydjJoMlYzem02IDB2MmgyYzAtMS4xLS45LTItMi0yek01IDIxdi0ySDNjMCAxLjEuOSAyIDIgMnptLTItNGgydi0ySDN2MnpNOSAzSDd2MmgyVjN6bTIgMThoMnYtMmgtMnYyem04LThoMnYtMmgtMnYyem0wIDhjMS4xIDAgMi0uOSAyLTJoLTJ2MnptMC0xMmgyVjdoLTJ2MnptMCA4aDJ2LTJoLTJ2MnptLTQgNGgydi0yaC0ydjJ6bTAtMTZoMlYzaC0ydjJ6TTcgMTdoMTBWN0g3djEwem0yLThoNnY2SDlWOXoiIC8+PC9nPgo8ZyBpZD0ic2VuZCI+PHBhdGggZD0iTTIuMDEgMjFMMjMgMTIgMi4wMSAzIDIgMTBsMTUgMi0xNSAyeiIgLz48L2c+CjxnIGlkPSJzZXR0aW5ncyI+PHBhdGggZD0iTTE5LjQzIDEyLjk4Yy4wNC0uMzIuMDctLjY0LjA3LS45OHMtLjAzLS42Ni0uMDctLjk4bDIuMTEtMS42NWMuMTktLjE1LjI0LS40Mi4xMi0uNjRsLTItMy40NmMtLjEyLS4yMi0uMzktLjMtLjYxLS4yMmwtMi40OSAxYy0uNTItLjQtMS4wOC0uNzMtMS42OS0uOThsLS4zOC0yLjY1QzE0LjQ2IDIuMTggMTQuMjUgMiAxNCAyaC00Yy0uMjUgMC0uNDYuMTgtLjQ5LjQybC0uMzggMi42NWMtLjYxLjI1LTEuMTcuNTktMS42OS45OGwtMi40OS0xYy0uMjMtLjA5LS40OSAwLS42MS4yMmwtMiAzLjQ2Yy0uMTMuMjItLjA3LjQ5LjEyLjY0bDIuMTEgMS42NWMtLjA0LjMyLS4wNy42NS0uMDcuOThzLjAzLjY2LjA3Ljk4bC0yLjExIDEuNjVjLS4xOS4xNS0uMjQuNDItLjEyLjY0bDIgMy40NmMuMTIuMjIuMzkuMy42MS4yMmwyLjQ5LTFjLjUyLjQgMS4wOC43MyAxLjY5Ljk4bC4zOCAyLjY1Yy4wMy4yNC4yNC40Mi40OS40Mmg0Yy4yNSAwIC40Ni0uMTguNDktLjQybC4zOC0yLjY1Yy42MS0uMjUgMS4xNy0uNTkgMS42OS0uOThsMi40OSAxYy4yMy4wOS40OSAwIC42MS0uMjJsMi0zLjQ2Yy4xMi0uMjIuMDctLjQ5LS4xMi0uNjRsLTIuMTEtMS42NXpNMTIgMTUuNWMtMS45MyAwLTMuNS0xLjU3LTMuNS0zLjVzMS41Ny0zLjUgMy41LTMuNSAzLjUgMS41NyAzLjUgMy41LTEuNTcgMy41LTMuNSAzLjV6IiAvPjwvZz4KPGcgaWQ9InNldHRpbmdzLWFwcGxpY2F0aW9ucyI+PHBhdGggZD0iTTEyIDEwYy0xLjEgMC0yIC45LTIgMnMuOSAyIDIgMiAyLS45IDItMi0uOS0yLTItMnptNy03SDVjLTEuMTEgMC0yIC45LTIgMnYxNGMwIDEuMS44OSAyIDIgMmgxNGMxLjExIDAgMi0uOSAyLTJWNWMwLTEuMS0uODktMi0yLTJ6bS0xLjc1IDljMCAuMjMtLjAyLjQ2LS4wNS42OGwxLjQ4IDEuMTZjLjEzLjExLjE3LjMuMDguNDVsLTEuNCAyLjQyYy0uMDkuMTUtLjI3LjIxLS40My4xNWwtMS43NC0uN2MtLjM2LjI4LS43Ni41MS0xLjE4LjY5bC0uMjYgMS44NWMtLjAzLjE3LS4xOC4zLS4zNS4zaC0yLjhjLS4xNyAwLS4zMi0uMTMtLjM1LS4yOWwtLjI2LTEuODVjLS40My0uMTgtLjgyLS40MS0xLjE4LS42OWwtMS43NC43Yy0uMTYuMDYtLjM0IDAtLjQzLS4xNWwtMS40LTIuNDJjLS4wOS0uMTUtLjA1LS4zNC4wOC0uNDVsMS40OC0xLjE2Yy0uMDMtLjIzLS4wNS0uNDYtLjA1LS42OSAwLS4yMy4wMi0uNDYuMDUtLjY4bC0xLjQ4LTEuMTZjLS4xMy0uMTEtLjE3LS4zLS4wOC0uNDVsMS40LTIuNDJjLjA5LS4xNS4yNy0uMjEuNDMtLjE1bDEuNzQuN2MuMzYtLjI4Ljc2LS41MSAxLjE4LS42OWwuMjYtMS44NWMuMDMtLjE3LjE4LS4zLjM1LS4zaDIuOGMuMTcgMCAuMzIuMTMuMzUuMjlsLjI2IDEuODVjLjQzLjE4LjgyLjQxIDEuMTguNjlsMS43NC0uN2MuMTYtLjA2LjM0IDAgLjQzLjE1bDEuNCAyLjQyYy4wOS4xNS4wNS4zNC0uMDguNDVsLTEuNDggMS4xNmMuMDMuMjMuMDUuNDYuMDUuNjl6IiAvPjwvZz4KPGcgaWQ9InNldHRpbmdzLWJhY2t1cC1yZXN0b3JlIj48cGF0aCBkPSJNMTQgMTJjMC0xLjEtLjktMi0yLTJzLTIgLjktMiAyIC45IDIgMiAyIDItLjkgMi0yem0tMi05Yy00Ljk3IDAtOSA0LjAzLTkgOUgwbDQgNCA0LTRINWMwLTMuODcgMy4xMy03IDctN3M3IDMuMTMgNyA3LTMuMTMgNy03IDdjLTEuNTEgMC0yLjkxLS40OS00LjA2LTEuM2wtMS40MiAxLjQ0QzguMDQgMjAuMyA5Ljk0IDIxIDEyIDIxYzQuOTcgMCA5LTQuMDMgOS05cy00LjAzLTktOS05eiIgLz48L2c+CjxnIGlkPSJzZXR0aW5ncy1ibHVldG9vdGgiPjxwYXRoIGQ9Ik0xMSAyNGgydi0yaC0ydjJ6bS00IDBoMnYtMkg3djJ6bTggMGgydi0yaC0ydjJ6bTIuNzEtMTguMjlMMTIgMGgtMXY3LjU5TDYuNDEgMyA1IDQuNDEgMTAuNTkgMTAgNSAxNS41OSA2LjQxIDE3IDExIDEyLjQxVjIwaDFsNS43MS01LjcxLTQuMy00LjI5IDQuMy00LjI5ek0xMyAzLjgzbDEuODggMS44OEwxMyA3LjU5VjMuODN6bTEuODggMTAuNDZMMTMgMTYuMTd2LTMuNzZsMS44OCAxLjg4eiIgLz48L2c+CjxnIGlkPSJzZXR0aW5ncy1icmlnaHRuZXNzIj48cGF0aCBkPSJNMjEgM0gzYy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE4YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bTAgMTYuMDFIM1Y0Ljk5aDE4djE0LjAyek04IDE2aDIuNWwxLjUgMS41IDEuNS0xLjVIMTZ2LTIuNWwxLjUtMS41LTEuNS0xLjVWOGgtMi41TDEyIDYuNSAxMC41IDhIOHYyLjVMNi41IDEyIDggMTMuNVYxNnptNC03YzEuNjYgMCAzIDEuMzQgMyAzcy0xLjM0IDMtMyAzVjl6IiAvPjwvZz4KPGcgaWQ9InNldHRpbmdzLWNlbGwiPjxwYXRoIGQ9Ik03IDI0aDJ2LTJIN3Yyem00IDBoMnYtMmgtMnYyem00IDBoMnYtMmgtMnYyek0xNiAuMDFMOCAwQzYuOSAwIDYgLjkgNiAydjE2YzAgMS4xLjkgMiAyIDJoOGMxLjEgMCAyLS45IDItMlYyYzAtMS4xLS45LTEuOTktMi0xLjk5ek0xNiAxNkg4VjRoOHYxMnoiIC8+PC9nPgo8ZyBpZD0ic2V0dGluZ3MtZXRoZXJuZXQiPjxwYXRoIGQ9Ik03Ljc3IDYuNzZMNi4yMyA1LjQ4LjgyIDEybDUuNDEgNi41MiAxLjU0LTEuMjhMMy40MiAxMmw0LjM1LTUuMjR6TTcgMTNoMnYtMkg3djJ6bTEwLTJoLTJ2Mmgydi0yem0tNiAyaDJ2LTJoLTJ2MnptNi43Ny03LjUybC0xLjU0IDEuMjhMMjAuNTggMTJsLTQuMzUgNS4yNCAxLjU0IDEuMjhMMjMuMTggMTJsLTUuNDEtNi41MnoiIC8+PC9nPgo8ZyBpZD0ic2V0dGluZ3MtaW5wdXQtYW50ZW5uYSI+PHBhdGggZD0iTTEyIDVjLTMuODcgMC03IDMuMTMtNyA3aDJjMC0yLjc2IDIuMjQtNSA1LTVzNSAyLjI0IDUgNWgyYzAtMy44Ny0zLjEzLTctNy03em0xIDkuMjljLjg4LS4zOSAxLjUtMS4yNiAxLjUtMi4yOSAwLTEuMzgtMS4xMi0yLjUtMi41LTIuNVM5LjUgMTAuNjIgOS41IDEyYzAgMS4wMi42MiAxLjkgMS41IDIuMjl2My4zTDcuNTkgMjEgOSAyMi40MWwzLTMgMyAzTDE2LjQxIDIxIDEzIDE3LjU5di0zLjN6TTEyIDFDNS45MyAxIDEgNS45MyAxIDEyaDJjMC00Ljk3IDQuMDMtOSA5LTlzOSA0LjAzIDkgOWgyYzAtNi4wNy00LjkzLTExLTExLTExeiIgLz48L2c+CjxnIGlkPSJzZXR0aW5ncy1pbnB1dC1jb21wb25lbnQiPjxwYXRoIGQ9Ik01IDJjMC0uNTUtLjQ1LTEtMS0xcy0xIC40NS0xIDF2NEgxdjZoNlY2SDVWMnptNCAxNGMwIDEuMy44NCAyLjQgMiAyLjgyVjIzaDJ2LTQuMThjMS4xNi0uNDEgMi0xLjUxIDItMi44MnYtMkg5djJ6bS04IDBjMCAxLjMuODQgMi40IDIgMi44MlYyM2gydi00LjE4QzYuMTYgMTguNCA3IDE3LjMgNyAxNnYtMkgxdjJ6TTIxIDZWMmMwLS41NS0uNDUtMS0xLTFzLTEgLjQ1LTEgMXY0aC0ydjZoNlY2aC0yem0tOC00YzAtLjU1LS40NS0xLTEtMXMtMSAuNDUtMSAxdjRIOXY2aDZWNmgtMlYyem00IDE0YzAgMS4zLjg0IDIuNCAyIDIuODJWMjNoMnYtNC4xOGMxLjE2LS40MSAyLTEuNTEgMi0yLjgydi0yaC02djJ6IiAvPjwvZz4KPGcgaWQ9InNldHRpbmdzLWlucHV0LWNvbXBvc2l0ZSI+PHBhdGggZD0iTTUgMmMwLS41NS0uNDUtMS0xLTFzLTEgLjQ1LTEgMXY0SDF2Nmg2VjZINVYyem00IDE0YzAgMS4zLjg0IDIuNCAyIDIuODJWMjNoMnYtNC4xOGMxLjE2LS40MSAyLTEuNTEgMi0yLjgydi0ySDl2MnptLTggMGMwIDEuMy44NCAyLjQgMiAyLjgyVjIzaDJ2LTQuMThDNi4xNiAxOC40IDcgMTcuMyA3IDE2di0ySDF2MnpNMjEgNlYyYzAtLjU1LS40NS0xLTEtMXMtMSAuNDUtMSAxdjRoLTJ2Nmg2VjZoLTJ6bS04LTRjMC0uNTUtLjQ1LTEtMS0xcy0xIC40NS0xIDF2NEg5djZoNlY2aC0yVjJ6bTQgMTRjMCAxLjMuODQgMi40IDIgMi44MlYyM2gydi00LjE4YzEuMTYtLjQxIDItMS41MSAyLTIuODJ2LTJoLTZ2MnoiIC8+PC9nPgo8ZyBpZD0ic2V0dGluZ3MtaW5wdXQtaGRtaSI+PHBhdGggZD0iTTE4IDdWNGMwLTEuMS0uOS0yLTItMkg4Yy0xLjEgMC0yIC45LTIgMnYzSDV2NmwzIDZ2M2g4di0zbDMtNlY3aC0xek04IDRoOHYzaC0yVjVoLTF2MmgtMlY1aC0xdjJIOFY0eiIgLz48L2c+CjxnIGlkPSJzZXR0aW5ncy1pbnB1dC1zdmlkZW8iPjxwYXRoIGQ9Ik04IDExLjVjMC0uODMtLjY3LTEuNS0xLjUtMS41UzUgMTAuNjcgNSAxMS41IDUuNjcgMTMgNi41IDEzIDggMTIuMzMgOCAxMS41em03LTVjMC0uODMtLjY3LTEuNS0xLjUtMS41aC0zQzkuNjcgNSA5IDUuNjcgOSA2LjVTOS42NyA4IDEwLjUgOGgzYy44MyAwIDEuNS0uNjcgMS41LTEuNXpNOC41IDE1Yy0uODMgMC0xLjUuNjctMS41IDEuNVM3LjY3IDE4IDguNSAxOHMxLjUtLjY3IDEuNS0xLjVTOS4zMyAxNSA4LjUgMTV6TTEyIDFDNS45MyAxIDEgNS45MyAxIDEyczQuOTMgMTEgMTEgMTEgMTEtNC45MyAxMS0xMVMxOC4wNyAxIDEyIDF6bTAgMjBjLTQuOTYgMC05LTQuMDQtOS05czQuMDQtOSA5LTkgOSA0LjA0IDkgOS00LjA0IDktOSA5em01LjUtMTFjLS44MyAwLTEuNS42Ny0xLjUgMS41cy42NyAxLjUgMS41IDEuNSAxLjUtLjY3IDEuNS0xLjUtLjY3LTEuNS0xLjUtMS41em0tMiA1Yy0uODMgMC0xLjUuNjctMS41IDEuNXMuNjcgMS41IDEuNSAxLjUgMS41LS42NyAxLjUtMS41LS42Ny0xLjUtMS41LTEuNXoiIC8+PC9nPgo8ZyBpZD0ic2V0dGluZ3Mtb3ZlcnNjYW4iPjxwYXRoIGQ9Ik0xMi4wMSA1LjVMMTAgOGg0bC0xLjk5LTIuNXpNMTggMTB2NGwyLjUtMS45OUwxOCAxMHpNNiAxMGwtMi41IDIuMDFMNiAxNHYtNHptOCA2aC00bDIuMDEgMi41TDE0IDE2em03LTEzSDNjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMThjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptMCAxNi4wMUgzVjQuOTloMTh2MTQuMDJ6IiAvPjwvZz4KPGcgaWQ9InNldHRpbmdzLXBob25lIj48cGF0aCBkPSJNMTMgOWgtMnYyaDJWOXptNCAwaC0ydjJoMlY5em0zIDYuNWMtMS4yNSAwLTIuNDUtLjItMy41Ny0uNTctLjM1LS4xMS0uNzQtLjAzLTEuMDIuMjRsLTIuMiAyLjJjLTIuODMtMS40NC01LjE1LTMuNzUtNi41OS02LjU4bDIuMi0yLjIxYy4yOC0uMjcuMzYtLjY2LjI1LTEuMDFDOC43IDYuNDUgOC41IDUuMjUgOC41IDRjMC0uNTUtLjQ1LTEtMS0xSDRjLS41NSAwLTEgLjQ1LTEgMSAwIDkuMzkgNy42MSAxNyAxNyAxNyAuNTUgMCAxLS40NSAxLTF2LTMuNWMwLS41NS0uNDUtMS0xLTF6TTE5IDl2MmgyVjloLTJ6IiAvPjwvZz4KPGcgaWQ9InNldHRpbmdzLXBvd2VyIj48cGF0aCBkPSJNNyAyNGgydi0ySDd2MnptNCAwaDJ2LTJoLTJ2MnptMi0yMmgtMnYxMGgyVjJ6bTMuNTYgMi40NGwtMS40NSAxLjQ1QzE2Ljg0IDYuOTQgMTggOC44MyAxOCAxMWMwIDMuMzEtMi42OSA2LTYgNnMtNi0yLjY5LTYtNmMwLTIuMTcgMS4xNi00LjA2IDIuODgtNS4xMkw3LjQ0IDQuNDRDNS4zNiA1Ljg4IDQgOC4yOCA0IDExYzAgNC40MiAzLjU4IDggOCA4czgtMy41OCA4LThjMC0yLjcyLTEuMzYtNS4xMi0zLjQ0LTYuNTZ6TTE1IDI0aDJ2LTJoLTJ2MnoiIC8+PC9nPgo8ZyBpZD0ic2V0dGluZ3MtcmVtb3RlIj48cGF0aCBkPSJNMTUgOUg5Yy0uNTUgMC0xIC40NS0xIDF2MTJjMCAuNTUuNDUgMSAxIDFoNmMuNTUgMCAxLS40NSAxLTFWMTBjMC0uNTUtLjQ1LTEtMS0xem0tMyA2Yy0xLjEgMC0yLS45LTItMnMuOS0yIDItMiAyIC45IDIgMi0uOSAyLTIgMnpNNy4wNSA2LjA1bDEuNDEgMS40MUM5LjM3IDYuNTYgMTAuNjIgNiAxMiA2czIuNjMuNTYgMy41NCAxLjQ2bDEuNDEtMS40MUMxNS42OCA0Ljc4IDEzLjkzIDQgMTIgNHMtMy42OC43OC00Ljk1IDIuMDV6TTEyIDBDOC45NiAwIDYuMjEgMS4yMyA0LjIyIDMuMjJsMS40MSAxLjQxQzcuMjYgMy4wMSA5LjUxIDIgMTIgMnM0Ljc0IDEuMDEgNi4zNiAyLjY0bDEuNDEtMS40MUMxNy43OSAxLjIzIDE1LjA0IDAgMTIgMHoiIC8+PC9nPgo8ZyBpZD0ic2V0dGluZ3Mtdm9pY2UiPjxwYXRoIGQ9Ik03IDI0aDJ2LTJIN3Yyem01LTExYzEuNjYgMCAyLjk5LTEuMzQgMi45OS0zTDE1IDRjMC0xLjY2LTEuMzQtMy0zLTNTOSAyLjM0IDkgNHY2YzAgMS42NiAxLjM0IDMgMyAzem0tMSAxMWgydi0yaC0ydjJ6bTQgMGgydi0yaC0ydjJ6bTQtMTRoLTEuN2MwIDMtMi41NCA1LjEtNS4zIDUuMVM2LjcgMTMgNi43IDEwSDVjMCAzLjQxIDIuNzIgNi4yMyA2IDYuNzJWMjBoMnYtMy4yOGMzLjI4LS40OSA2LTMuMzEgNi02LjcyeiIgLz48L2c+CjxnIGlkPSJzaG9wIj48cGF0aCBkPSJNMTYgNlY0YzAtMS4xMS0uODktMi0yLTJoLTRjLTEuMTEgMC0yIC44OS0yIDJ2MkgydjEzYzAgMS4xMS44OSAyIDIgMmgxNmMxLjExIDAgMi0uODkgMi0yVjZoLTZ6bS02LTJoNHYyaC00VjR6TTkgMThWOWw3LjUgNEw5IDE4eiIgLz48L2c+CjxnIGlkPSJzaG9wLXR3byI+PHBhdGggZD0iTTMgOUgxdjExYzAgMS4xMS44OSAyIDIgMmgxNGMxLjExIDAgMi0uODkgMi0ySDNWOXptMTUtNFYzYzAtMS4xMS0uODktMi0yLTJoLTRjLTEuMTEgMC0yIC44OS0yIDJ2Mkg1djExYzAgMS4xMS44OSAyIDIgMmgxNGMxLjExIDAgMi0uODkgMi0yVjVoLTV6bS02LTJoNHYyaC00VjN6bTAgMTJWOGw1LjUgMy01LjUgNHoiIC8+PC9nPgo8ZyBpZD0ic2hvcHBpbmctYmFza2V0Ij48cGF0aCBkPSJNMTcuMjEgOWwtNC4zOC02LjU2Yy0uMTktLjI4LS41MS0uNDItLjgzLS40Mi0uMzIgMC0uNjQuMTQtLjgzLjQzTDYuNzkgOUgyYy0uNTUgMC0xIC40NS0xIDEgMCAuMDkuMDEuMTguMDQuMjdsMi41NCA5LjI3Yy4yMy44NCAxIDEuNDYgMS45MiAxLjQ2aDEzYy45MiAwIDEuNjktLjYyIDEuOTMtMS40NmwyLjU0LTkuMjdMMjMgMTBjMC0uNTUtLjQ1LTEtMS0xaC00Ljc5ek05IDlsMy00LjRMMTUgOUg5em0zIDhjLTEuMSAwLTItLjktMi0ycy45LTIgMi0yIDIgLjkgMiAyLS45IDItMiAyeiIgLz48L2c+CjxnIGlkPSJzaG9wcGluZy1jYXJ0Ij48cGF0aCBkPSJNNyAxOGMtMS4xIDAtMS45OS45LTEuOTkgMlM1LjkgMjIgNyAyMnMyLS45IDItMi0uOS0yLTItMnpNMSAydjJoMmwzLjYgNy41OS0xLjM1IDIuNDVjLS4xNi4yOC0uMjUuNjEtLjI1Ljk2IDAgMS4xLjkgMiAyIDJoMTJ2LTJINy40MmMtLjE0IDAtLjI1LS4xMS0uMjUtLjI1bC4wMy0uMTIuOS0xLjYzaDcuNDVjLjc1IDAgMS40MS0uNDEgMS43NS0xLjAzbDMuNTgtNi40OWMuMDgtLjE0LjEyLS4zMS4xMi0uNDggMC0uNTUtLjQ1LTEtMS0xSDUuMjFsLS45NC0ySDF6bTE2IDE2Yy0xLjEgMC0xLjk5LjktMS45OSAycy44OSAyIDEuOTkgMiAyLS45IDItMi0uOS0yLTItMnoiIC8+PC9nPgo8ZyBpZD0ic29ydCI+PHBhdGggZD0iTTMgMThoNnYtMkgzdjJ6TTMgNnYyaDE4VjZIM3ptMCA3aDEydi0ySDN2MnoiIC8+PC9nPgo8ZyBpZD0ic3BlYWtlci1ub3RlcyI+PHBhdGggZD0iTTIwIDJINGMtMS4xIDAtMS45OS45LTEuOTkgMkwyIDIybDQtNGgxNGMxLjEgMCAyLS45IDItMlY0YzAtMS4xLS45LTItMi0yek04IDE0SDZ2LTJoMnYyem0wLTNINlY5aDJ2MnptMC0zSDZWNmgydjJ6bTcgNmgtNXYtMmg1djJ6bTMtM2gtOFY5aDh2MnptMC0zaC04VjZoOHYyeiIgLz48L2c+CjxnIGlkPSJzcGVha2VyLW5vdGVzLW9mZiI+PHBhdGggZD0iTTEwLjU0IDExbC0uNTQtLjU0TDcuNTQgOCA2IDYuNDYgMi4zOCAyLjg0IDEuMjcgMS43MyAwIDNsMi4wMSAyLjAxTDIgMjJsNC00aDlsNS43MyA1LjczTDIyIDIyLjQ2IDE3LjU0IDE4bC03LTd6TTggMTRINnYtMmgydjJ6bS0yLTNWOWwyIDJINnptMTQtOUg0LjA4TDEwIDcuOTJWNmg4djJoLTcuOTJsMSAxSDE4djJoLTQuOTJsNi45OSA2Ljk5QzIxLjE0IDE3Ljk1IDIyIDE3LjA4IDIyIDE2VjRjMC0xLjEtLjktMi0yLTJ6IiAvPjwvZz4KPGcgaWQ9InNwZWxsY2hlY2siPjxwYXRoIGQ9Ik0xMi40NSAxNmgyLjA5TDkuNDMgM0g3LjU3TDIuNDYgMTZoMi4wOWwxLjEyLTNoNS42NGwxLjE0IDN6bS02LjAyLTVMOC41IDUuNDggMTAuNTcgMTFINi40M3ptMTUuMTYuNTlsLTguMDkgOC4wOUw5LjgzIDE2bC0xLjQxIDEuNDEgNS4wOSA1LjA5TDIzIDEzbC0xLjQxLTEuNDF6IiAvPjwvZz4KPGcgaWQ9InN0YXIiPjxwYXRoIGQ9Ik0xMiAxNy4yN0wxOC4xOCAyMWwtMS42NC03LjAzTDIyIDkuMjRsLTcuMTktLjYxTDEyIDIgOS4xOSA4LjYzIDIgOS4yNGw1LjQ2IDQuNzNMNS44MiAyMXoiIC8+PC9nPgo8ZyBpZD0ic3Rhci1ib3JkZXIiPjxwYXRoIGQ9Ik0yMiA5LjI0bC03LjE5LS42MkwxMiAyIDkuMTkgOC42MyAyIDkuMjRsNS40NiA0LjczTDUuODIgMjEgMTIgMTcuMjcgMTguMTggMjFsLTEuNjMtNy4wM0wyMiA5LjI0ek0xMiAxNS40bC0zLjc2IDIuMjcgMS00LjI4LTMuMzItMi44OCA0LjM4LS4zOEwxMiA2LjFsMS43MSA0LjA0IDQuMzguMzgtMy4zMiAyLjg4IDEgNC4yOEwxMiAxNS40eiIgLz48L2c+CjxnIGlkPSJzdGFyLWhhbGYiPjxwYXRoIGQ9Ik0yMiA5LjI0bC03LjE5LS42MkwxMiAyIDkuMTkgOC42MyAyIDkuMjRsNS40NiA0LjczTDUuODIgMjEgMTIgMTcuMjcgMTguMTggMjFsLTEuNjMtNy4wM0wyMiA5LjI0ek0xMiAxNS40VjYuMWwxLjcxIDQuMDQgNC4zOC4zOC0zLjMyIDIuODggMSA0LjI4TDEyIDE1LjR6IiAvPjwvZz4KPGcgaWQ9InN0YXJzIj48cGF0aCBkPSJNMTEuOTkgMkM2LjQ3IDIgMiA2LjQ4IDIgMTJzNC40NyAxMCA5Ljk5IDEwQzE3LjUyIDIyIDIyIDE3LjUyIDIyIDEyUzE3LjUyIDIgMTEuOTkgMnptNC4yNCAxNkwxMiAxNS40NSA3Ljc3IDE4bDEuMTItNC44MS0zLjczLTMuMjMgNC45Mi0uNDJMMTIgNWwxLjkyIDQuNTMgNC45Mi40Mi0zLjczIDMuMjNMMTYuMjMgMTh6IiAvPjwvZz4KPGcgaWQ9InN0b3JlIj48cGF0aCBkPSJNMjAgNEg0djJoMTZWNHptMSAxMHYtMmwtMS01SDRsLTEgNXYyaDF2NmgxMHYtNmg0djZoMnYtNmgxem0tOSA0SDZ2LTRoNnY0eiIgLz48L2c+CjxnIGlkPSJzdWJkaXJlY3RvcnktYXJyb3ctbGVmdCI+PHBhdGggZD0iTTExIDlsMS40MiAxLjQyTDguODMgMTRIMThWNGgydjEySDguODNsMy41OSAzLjU4TDExIDIxbC02LTYgNi02eiIgLz48L2c+CjxnIGlkPSJzdWJkaXJlY3RvcnktYXJyb3ctcmlnaHQiPjxwYXRoIGQ9Ik0xOSAxNWwtNiA2LTEuNDItMS40MkwxNS4xNyAxNkg0VjRoMnYxMGg5LjE3bC0zLjU5LTMuNThMMTMgOWw2IDZ6IiAvPjwvZz4KPGcgaWQ9InN1YmplY3QiPjxwYXRoIGQ9Ik0xNCAxN0g0djJoMTB2LTJ6bTYtOEg0djJoMTZWOXpNNCAxNWgxNnYtMkg0djJ6TTQgNXYyaDE2VjVINHoiIC8+PC9nPgo8ZyBpZD0ic3VwZXJ2aXNvci1hY2NvdW50Ij48cGF0aCBkPSJNMTYuNSAxMmMxLjM4IDAgMi40OS0xLjEyIDIuNDktMi41UzE3Ljg4IDcgMTYuNSA3QzE1LjEyIDcgMTQgOC4xMiAxNCA5LjVzMS4xMiAyLjUgMi41IDIuNXpNOSAxMWMxLjY2IDAgMi45OS0xLjM0IDIuOTktM1MxMC42NiA1IDkgNUM3LjM0IDUgNiA2LjM0IDYgOHMxLjM0IDMgMyAzem03LjUgM2MtMS44MyAwLTUuNS45Mi01LjUgMi43NVYxOWgxMXYtMi4yNWMwLTEuODMtMy42Ny0yLjc1LTUuNS0yLjc1ek05IDEzYy0yLjMzIDAtNyAxLjE3LTcgMy41VjE5aDd2LTIuMjVjMC0uODUuMzMtMi4zNCAyLjM3LTMuNDdDMTAuNSAxMy4xIDkuNjYgMTMgOSAxM3oiIC8+PC9nPgo8ZyBpZD0ic3dhcC1ob3JpeiI+PHBhdGggZD0iTTYuOTkgMTFMMyAxNWwzLjk5IDR2LTNIMTR2LTJINi45OXYtM3pNMjEgOWwtMy45OS00djNIMTB2Mmg3LjAxdjNMMjEgOXoiIC8+PC9nPgo8ZyBpZD0ic3dhcC12ZXJ0Ij48cGF0aCBkPSJNMTYgMTcuMDFWMTBoLTJ2Ny4wMWgtM0wxNSAyMWw0LTMuOTloLTN6TTkgM0w1IDYuOTloM1YxNGgyVjYuOTloM0w5IDN6IiAvPjwvZz4KPGcgaWQ9InN3YXAtdmVydGljYWwtY2lyY2xlIj48cGF0aCBkPSJNMTIgMkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnpNNi41IDlMMTAgNS41IDEzLjUgOUgxMXY0SDlWOUg2LjV6bTExIDZMMTQgMTguNSAxMC41IDE1SDEzdi00aDJ2NGgyLjV6IiAvPjwvZz4KPGcgaWQ9InN5c3RlbS11cGRhdGUtYWx0Ij48cGF0aCBkPSJNMTIgMTYuNWw0LTRoLTN2LTloLTJ2OUg4bDQgNHptOS0xM2gtNnYxLjk5aDZ2MTQuMDNIM1Y1LjQ5aDZWMy41SDNjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMThjMS4xIDAgMi0uOSAyLTJ2LTE0YzAtMS4xLS45LTItMi0yeiIgLz48L2c+CjxnIGlkPSJ0YWIiPjxwYXRoIGQ9Ik0yMSAzSDNjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMThjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptMCAxNkgzVjVoMTB2NGg4djEweiIgLz48L2c+CjxnIGlkPSJ0YWItdW5zZWxlY3RlZCI+PHBhdGggZD0iTTEgOWgyVjdIMXYyem0wIDRoMnYtMkgxdjJ6bTAtOGgyVjNjLTEuMSAwLTIgLjktMiAyem04IDE2aDJ2LTJIOXYyem0tOC00aDJ2LTJIMXYyem0yIDR2LTJIMWMwIDEuMS45IDIgMiAyek0yMSAzaC04djZoMTBWNWMwLTEuMS0uOS0yLTItMnptMCAxNGgydi0yaC0ydjJ6TTkgNWgyVjNIOXYyek01IDIxaDJ2LTJINXYyek01IDVoMlYzSDV2MnptMTYgMTZjMS4xIDAgMi0uOSAyLTJoLTJ2MnptMC04aDJ2LTJoLTJ2MnptLTggOGgydi0yaC0ydjJ6bTQgMGgydi0yaC0ydjJ6IiAvPjwvZz4KPGcgaWQ9InRleHQtZm9ybWF0Ij48cGF0aCBkPSJNNSAxN3YyaDE0di0ySDV6bTQuNS00LjJoNWwuOSAyLjJoMi4xTDEyLjc1IDRoLTEuNUw2LjUgMTVoMi4xbC45LTIuMnpNMTIgNS45OEwxMy44NyAxMWgtMy43NEwxMiA1Ljk4eiIgLz48L2c+CjxnIGlkPSJ0aGVhdGVycyI+PHBhdGggZD0iTTE4IDN2MmgtMlYzSDh2Mkg2VjNINHYxOGgydi0yaDJ2Mmg4di0yaDJ2MmgyVjNoLTJ6TTggMTdINnYtMmgydjJ6bTAtNEg2di0yaDJ2MnptMC00SDZWN2gydjJ6bTEwIDhoLTJ2LTJoMnYyem0wLTRoLTJ2LTJoMnYyem0wLTRoLTJWN2gydjJ6IiAvPjwvZz4KPGcgaWQ9InRodW1iLWRvd24iPjxwYXRoIGQ9Ik0xNSAzSDZjLS44MyAwLTEuNTQuNS0xLjg0IDEuMjJsLTMuMDIgNy4wNWMtLjA5LjIzLS4xNC40Ny0uMTQuNzN2MS45MWwuMDEuMDFMMSAxNGMwIDEuMS45IDIgMiAyaDYuMzFsLS45NSA0LjU3LS4wMy4zMmMwIC40MS4xNy43OS40NCAxLjA2TDkuODMgMjNsNi41OS02LjU5Yy4zNi0uMzYuNTgtLjg2LjU4LTEuNDFWNWMwLTEuMS0uOS0yLTItMnptNCAwdjEyaDRWM2gtNHoiIC8+PC9nPgo8ZyBpZD0idGh1bWItdXAiPjxwYXRoIGQ9Ik0xIDIxaDRWOUgxdjEyem0yMi0xMWMwLTEuMS0uOS0yLTItMmgtNi4zMWwuOTUtNC41Ny4wMy0uMzJjMC0uNDEtLjE3LS43OS0uNDQtMS4wNkwxNC4xNyAxIDcuNTkgNy41OUM3LjIyIDcuOTUgNyA4LjQ1IDcgOXYxMGMwIDEuMS45IDIgMiAyaDljLjgzIDAgMS41NC0uNSAxLjg0LTEuMjJsMy4wMi03LjA1Yy4wOS0uMjMuMTQtLjQ3LjE0LS43M3YtMS45MWwtLjAxLS4wMUwyMyAxMHoiIC8+PC9nPgo8ZyBpZD0idGh1bWJzLXVwLWRvd24iPjxwYXRoIGQ9Ik0xMiA2YzAtLjU1LS40NS0xLTEtMUg1LjgybC42Ni0zLjE4LjAyLS4yM2MwLS4zMS0uMTMtLjU5LS4zMy0uOEw1LjM4IDAgLjQ0IDQuOTRDLjE3IDUuMjEgMCA1LjU5IDAgNnY2LjVjMCAuODMuNjcgMS41IDEuNSAxLjVoNi43NWMuNjIgMCAxLjE1LS4zOCAxLjM4LS45MWwyLjI2LTUuMjljLjA3LS4xNy4xMS0uMzYuMTEtLjU1VjZ6bTEwLjUgNGgtNi43NWMtLjYyIDAtMS4xNS4zOC0xLjM4LjkxbC0yLjI2IDUuMjljLS4wNy4xNy0uMTEuMzYtLjExLjU1VjE4YzAgLjU1LjQ1IDEgMSAxaDUuMThsLS42NiAzLjE4LS4wMi4yNGMwIC4zMS4xMy41OS4zMy44bC43OS43OCA0Ljk0LTQuOTRjLjI3LS4yNy40NC0uNjUuNDQtMS4wNnYtNi41YzAtLjgzLS42Ny0xLjUtMS41LTEuNXoiIC8+PC9nPgo8ZyBpZD0idGltZWxpbmUiPjxwYXRoIGQ9Ik0yMyA4YzAgMS4xLS45IDItMiAyLS4xOCAwLS4zNS0uMDItLjUxLS4wN2wtMy41NiAzLjU1Yy4wNS4xNi4wNy4zNC4wNy41MiAwIDEuMS0uOSAyLTIgMnMtMi0uOS0yLTJjMC0uMTguMDItLjM2LjA3LS41MmwtMi41NS0yLjU1Yy0uMTYuMDUtLjM0LjA3LS41Mi4wN3MtLjM2LS4wMi0uNTItLjA3bC00LjU1IDQuNTZjLjA1LjE2LjA3LjMzLjA3LjUxIDAgMS4xLS45IDItMiAycy0yLS45LTItMiAuOS0yIDItMmMuMTggMCAuMzUuMDIuNTEuMDdsNC41Ni00LjU1QzguMDIgOS4zNiA4IDkuMTggOCA5YzAtMS4xLjktMiAyLTJzMiAuOSAyIDJjMCAuMTgtLjAyLjM2LS4wNy41MmwyLjU1IDIuNTVjLjE2LS4wNS4zNC0uMDcuNTItLjA3cy4zNi4wMi41Mi4wN2wzLjU1LTMuNTZDMTkuMDIgOC4zNSAxOSA4LjE4IDE5IDhjMC0xLjEuOS0yIDItMnMyIC45IDIgMnoiIC8+PC9nPgo8ZyBpZD0idG9jIj48cGF0aCBkPSJNMyA5aDE0VjdIM3Yyem0wIDRoMTR2LTJIM3Yyem0wIDRoMTR2LTJIM3Yyem0xNiAwaDJ2LTJoLTJ2MnptMC0xMHYyaDJWN2gtMnptMCA2aDJ2LTJoLTJ2MnoiIC8+PC9nPgo8ZyBpZD0idG9kYXkiPjxwYXRoIGQ9Ik0xOSAzaC0xVjFoLTJ2Mkg4VjFINnYySDVjLTEuMTEgMC0xLjk5LjktMS45OSAyTDMgMTljMCAxLjEuODkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptMCAxNkg1VjhoMTR2MTF6TTcgMTBoNXY1SDd6IiAvPjwvZz4KPGcgaWQ9InRvbGwiPjxwYXRoIGQ9Ik0xNSA0Yy00LjQyIDAtOCAzLjU4LTggOHMzLjU4IDggOCA4IDgtMy41OCA4LTgtMy41OC04LTgtOHptMCAxNGMtMy4zMSAwLTYtMi42OS02LTZzMi42OS02IDYtNiA2IDIuNjkgNiA2LTIuNjkgNi02IDZ6TTMgMTJjMC0yLjYxIDEuNjctNC44MyA0LTUuNjVWNC4yNkMzLjU1IDUuMTUgMSA4LjI3IDEgMTJzMi41NSA2Ljg1IDYgNy43NHYtMi4wOWMtMi4zMy0uODItNC0zLjA0LTQtNS42NXoiIC8+PC9nPgo8ZyBpZD0idG91Y2gtYXBwIj48cGF0aCBkPSJNOSAxMS4yNFY3LjVDOSA2LjEyIDEwLjEyIDUgMTEuNSA1UzE0IDYuMTIgMTQgNy41djMuNzRjMS4yMS0uODEgMi0yLjE4IDItMy43NEMxNiA1LjAxIDEzLjk5IDMgMTEuNSAzUzcgNS4wMSA3IDcuNWMwIDEuNTYuNzkgMi45MyAyIDMuNzR6bTkuODQgNC42M2wtNC41NC0yLjI2Yy0uMTctLjA3LS4zNS0uMTEtLjU0LS4xMUgxM3YtNmMwLS44My0uNjctMS41LTEuNS0xLjVTMTAgNi42NyAxMCA3LjV2MTAuNzRsLTMuNDMtLjcyYy0uMDgtLjAxLS4xNS0uMDMtLjI0LS4wMy0uMzEgMC0uNTkuMTMtLjc5LjMzbC0uNzkuOCA0Ljk0IDQuOTRjLjI3LjI3LjY1LjQ0IDEuMDYuNDRoNi43OWMuNzUgMCAxLjMzLS41NSAxLjQ0LTEuMjhsLjc1LTUuMjdjLjAxLS4wNy4wMi0uMTQuMDItLjIgMC0uNjItLjM4LTEuMTYtLjkxLTEuMzh6IiAvPjwvZz4KPGcgaWQ9InRyYWNrLWNoYW5nZXMiPjxwYXRoIGQ9Ik0xOS4wNyA0LjkzbC0xLjQxIDEuNDFDMTkuMSA3Ljc5IDIwIDkuNzkgMjAgMTJjMCA0LjQyLTMuNTggOC04IDhzLTgtMy41OC04LThjMC00LjA4IDMuMDUtNy40NCA3LTcuOTN2Mi4wMkM4LjE2IDYuNTcgNiA5LjAzIDYgMTJjMCAzLjMxIDIuNjkgNiA2IDZzNi0yLjY5IDYtNmMwLTEuNjYtLjY3LTMuMTYtMS43Ni00LjI0bC0xLjQxIDEuNDFDMTUuNTUgOS45IDE2IDEwLjkgMTYgMTJjMCAyLjIxLTEuNzkgNC00IDRzLTQtMS43OS00LTRjMC0xLjg2IDEuMjgtMy40MSAzLTMuODZ2Mi4xNGMtLjYuMzUtMSAuOTgtMSAxLjcyIDAgMS4xLjkgMiAyIDJzMi0uOSAyLTJjMC0uNzQtLjQtMS4zOC0xLTEuNzJWMmgtMUM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwYzAtMi43Ni0xLjEyLTUuMjYtMi45My03LjA3eiIgLz48L2c+CjxnIGlkPSJ0cmFuc2xhdGUiPjxwYXRoIGQ9Ik0xMi44NyAxNS4wN2wtMi41NC0yLjUxLjAzLS4wM2MxLjc0LTEuOTQgMi45OC00LjE3IDMuNzEtNi41M0gxN1Y0aC03VjJIOHYySDF2MS45OWgxMS4xN0MxMS41IDcuOTIgMTAuNDQgOS43NSA5IDExLjM1IDguMDcgMTAuMzIgNy4zIDkuMTkgNi42OSA4aC0yYy43MyAxLjYzIDEuNzMgMy4xNyAyLjk4IDQuNTZsLTUuMDkgNS4wMkw0IDE5bDUtNSAzLjExIDMuMTEuNzYtMi4wNHpNMTguNSAxMGgtMkwxMiAyMmgybDEuMTItM2g0Ljc1TDIxIDIyaDJsLTQuNS0xMnptLTIuNjIgN2wxLjYyLTQuMzNMMTkuMTIgMTdoLTMuMjR6IiAvPjwvZz4KPGcgaWQ9InRyZW5kaW5nLWRvd24iPjxwYXRoIGQ9Ik0xNiAxOGwyLjI5LTIuMjktNC44OC00Ljg4LTQgNEwyIDcuNDEgMy40MSA2bDYgNiA0LTQgNi4zIDYuMjlMMjIgMTJ2NnoiIC8+PC9nPgo8ZyBpZD0idHJlbmRpbmctZmxhdCI+PHBhdGggZD0iTTIyIDEybC00LTR2M0gzdjJoMTV2M3oiIC8+PC9nPgo8ZyBpZD0idHJlbmRpbmctdXAiPjxwYXRoIGQ9Ik0xNiA2bDIuMjkgMi4yOS00Ljg4IDQuODgtNC00TDIgMTYuNTkgMy40MSAxOGw2LTYgNCA0IDYuMy02LjI5TDIyIDEyVjZ6IiAvPjwvZz4KPGcgaWQ9InR1cm5lZC1pbiI+PHBhdGggZD0iTTE3IDNIN2MtMS4xIDAtMS45OS45LTEuOTkgMkw1IDIxbDctMyA3IDNWNWMwLTEuMS0uOS0yLTItMnoiIC8+PC9nPgo8ZyBpZD0idHVybmVkLWluLW5vdCI+PHBhdGggZD0iTTE3IDNIN2MtMS4xIDAtMS45OS45LTEuOTkgMkw1IDIxbDctMyA3IDNWNWMwLTEuMS0uOS0yLTItMnptMCAxNWwtNS0yLjE4TDcgMThWNWgxMHYxM3oiIC8+PC9nPgo8ZyBpZD0idW5hcmNoaXZlIj48cGF0aCBkPSJNMjAuNTUgNS4yMmwtMS4zOS0xLjY4QzE4Ljg4IDMuMjEgMTguNDcgMyAxOCAzSDZjLS40NyAwLS44OC4yMS0xLjE1LjU1TDMuNDYgNS4yMkMzLjE3IDUuNTcgMyA2LjAxIDMgNi41VjE5YzAgMS4xLjg5IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjYuNWMwLS40OS0uMTctLjkzLS40NS0xLjI4ek0xMiA5LjVsNS41IDUuNUgxNHYyaC00di0ySDYuNUwxMiA5LjV6TTUuMTIgNWwuODItMWgxMmwuOTMgMUg1LjEyeiIgLz48L2c+CjxnIGlkPSJ1bmRvIj48cGF0aCBkPSJNMTIuNSA4Yy0yLjY1IDAtNS4wNS45OS02LjkgMi42TDIgN3Y5aDlsLTMuNjItMy42MmMxLjM5LTEuMTYgMy4xNi0xLjg4IDUuMTItMS44OCAzLjU0IDAgNi41NSAyLjMxIDcuNiA1LjVsMi4zNy0uNzhDMjEuMDggMTEuMDMgMTcuMTUgOCAxMi41IDh6IiAvPjwvZz4KPGcgaWQ9InVuZm9sZC1sZXNzIj48cGF0aCBkPSJNNy40MSAxOC41OUw4LjgzIDIwIDEyIDE2LjgzIDE1LjE3IDIwbDEuNDEtMS40MUwxMiAxNGwtNC41OSA0LjU5em05LjE4LTEzLjE4TDE1LjE3IDQgMTIgNy4xNyA4LjgzIDQgNy40MSA1LjQxIDEyIDEwbDQuNTktNC41OXoiIC8+PC9nPgo8ZyBpZD0idW5mb2xkLW1vcmUiPjxwYXRoIGQ9Ik0xMiA1LjgzTDE1LjE3IDlsMS40MS0xLjQxTDEyIDMgNy40MSA3LjU5IDguODMgOSAxMiA1Ljgzem0wIDEyLjM0TDguODMgMTVsLTEuNDEgMS40MUwxMiAyMWw0LjU5LTQuNTlMMTUuMTcgMTUgMTIgMTguMTd6IiAvPjwvZz4KPGcgaWQ9InVwZGF0ZSI+PHBhdGggZD0iTTIxIDEwLjEyaC02Ljc4bDIuNzQtMi44MmMtMi43My0yLjctNy4xNS0yLjgtOS44OC0uMS0yLjczIDIuNzEtMi43MyA3LjA4IDAgOS43OSAyLjczIDIuNzEgNy4xNSAyLjcxIDkuODggMEMxOC4zMiAxNS42NSAxOSAxNC4wOCAxOSAxMi4xaDJjMCAxLjk4LS44OCA0LjU1LTIuNjQgNi4yOS0zLjUxIDMuNDgtOS4yMSAzLjQ4LTEyLjcyIDAtMy41LTMuNDctMy41My05LjExLS4wMi0xMi41OCAzLjUxLTMuNDcgOS4xNC0zLjQ3IDEyLjY1IDBMMjEgM3Y3LjEyek0xMi41IDh2NC4yNWwzLjUgMi4wOC0uNzIgMS4yMUwxMSAxM1Y4aDEuNXoiIC8+PC9nPgo8ZyBpZD0idmVyaWZpZWQtdXNlciI+PHBhdGggZD0iTTEyIDFMMyA1djZjMCA1LjU1IDMuODQgMTAuNzQgOSAxMiA1LjE2LTEuMjYgOS02LjQ1IDktMTJWNWwtOS00em0tMiAxNmwtNC00IDEuNDEtMS40MUwxMCAxNC4xN2w2LjU5LTYuNTlMMTggOWwtOCA4eiIgLz48L2c+CjxnIGlkPSJ2aWV3LWFnZW5kYSI+PHBhdGggZD0iTTIwIDEzSDNjLS41NSAwLTEgLjQ1LTEgMXY2YzAgLjU1LjQ1IDEgMSAxaDE3Yy41NSAwIDEtLjQ1IDEtMXYtNmMwLS41NS0uNDUtMS0xLTF6bTAtMTBIM2MtLjU1IDAtMSAuNDUtMSAxdjZjMCAuNTUuNDUgMSAxIDFoMTdjLjU1IDAgMS0uNDUgMS0xVjRjMC0uNTUtLjQ1LTEtMS0xeiIgLz48L2c+CjxnIGlkPSJ2aWV3LWFycmF5Ij48cGF0aCBkPSJNNCAxOGgzVjVINHYxM3pNMTggNXYxM2gzVjVoLTN6TTggMThoOVY1SDh2MTN6IiAvPjwvZz4KPGcgaWQ9InZpZXctY2Fyb3VzZWwiPjxwYXRoIGQ9Ik03IDE5aDEwVjRIN3YxNXptLTUtMmg0VjZIMnYxMXpNMTggNnYxMWg0VjZoLTR6IiAvPjwvZz4KPGcgaWQ9InZpZXctY29sdW1uIj48cGF0aCBkPSJNMTAgMThoNVY1aC01djEzem0tNiAwaDVWNUg0djEzek0xNiA1djEzaDVWNWgtNXoiIC8+PC9nPgo8ZyBpZD0idmlldy1kYXkiPjxwYXRoIGQ9Ik0yIDIxaDE5di0zSDJ2M3pNMjAgOEgzYy0uNTUgMC0xIC40NS0xIDF2NmMwIC41NS40NSAxIDEgMWgxN2MuNTUgMCAxLS40NSAxLTFWOWMwLS41NS0uNDUtMS0xLTF6TTIgM3YzaDE5VjNIMnoiIC8+PC9nPgo8ZyBpZD0idmlldy1oZWFkbGluZSI+PHBhdGggZD0iTTQgMTVoMTZ2LTJINHYyem0wIDRoMTZ2LTJINHYyem0wLThoMTZWOUg0djJ6bTAtNnYyaDE2VjVINHoiIC8+PC9nPgo8ZyBpZD0idmlldy1saXN0Ij48cGF0aCBkPSJNNCAxNGg0di00SDR2NHptMCA1aDR2LTRINHY0ek00IDloNFY1SDR2NHptNSA1aDEydi00SDl2NHptMCA1aDEydi00SDl2NHpNOSA1djRoMTJWNUg5eiIgLz48L2c+CjxnIGlkPSJ2aWV3LW1vZHVsZSI+PHBhdGggZD0iTTQgMTFoNVY1SDR2NnptMCA3aDV2LTZINHY2em02IDBoNXYtNmgtNXY2em02IDBoNXYtNmgtNXY2em0tNi03aDVWNWgtNXY2em02LTZ2Nmg1VjVoLTV6IiAvPjwvZz4KPGcgaWQ9InZpZXctcXVpbHQiPjxwYXRoIGQ9Ik0xMCAxOGg1di02aC01djZ6bS02IDBoNVY1SDR2MTN6bTEyIDBoNXYtNmgtNXY2ek0xMCA1djZoMTFWNUgxMHoiIC8+PC9nPgo8ZyBpZD0idmlldy1zdHJlYW0iPjxwYXRoIGQ9Ik00IDE4aDE3di02SDR2NnpNNCA1djZoMTdWNUg0eiIgLz48L2c+CjxnIGlkPSJ2aWV3LXdlZWsiPjxwYXRoIGQ9Ik02IDVIM2MtLjU1IDAtMSAuNDUtMSAxdjEyYzAgLjU1LjQ1IDEgMSAxaDNjLjU1IDAgMS0uNDUgMS0xVjZjMC0uNTUtLjQ1LTEtMS0xem0xNCAwaC0zYy0uNTUgMC0xIC40NS0xIDF2MTJjMCAuNTUuNDUgMSAxIDFoM2MuNTUgMCAxLS40NSAxLTFWNmMwLS41NS0uNDUtMS0xLTF6bS03IDBoLTNjLS41NSAwLTEgLjQ1LTEgMXYxMmMwIC41NS40NSAxIDEgMWgzYy41NSAwIDEtLjQ1IDEtMVY2YzAtLjU1LS40NS0xLTEtMXoiIC8+PC9nPgo8ZyBpZD0idmlzaWJpbGl0eSI+PHBhdGggZD0iTTEyIDQuNUM3IDQuNSAyLjczIDcuNjEgMSAxMmMxLjczIDQuMzkgNiA3LjUgMTEgNy41czkuMjctMy4xMSAxMS03LjVjLTEuNzMtNC4zOS02LTcuNS0xMS03LjV6TTEyIDE3Yy0yLjc2IDAtNS0yLjI0LTUtNXMyLjI0LTUgNS01IDUgMi4yNCA1IDUtMi4yNCA1LTUgNXptMC04Yy0xLjY2IDAtMyAxLjM0LTMgM3MxLjM0IDMgMyAzIDMtMS4zNCAzLTMtMS4zNC0zLTMtM3oiIC8+PC9nPgo8ZyBpZD0idmlzaWJpbGl0eS1vZmYiPjxwYXRoIGQ9Ik0xMiA3YzIuNzYgMCA1IDIuMjQgNSA1IDAgLjY1LS4xMyAxLjI2LS4zNiAxLjgzbDIuOTIgMi45MmMxLjUxLTEuMjYgMi43LTIuODkgMy40My00Ljc1LTEuNzMtNC4zOS02LTcuNS0xMS03LjUtMS40IDAtMi43NC4yNS0zLjk4LjdsMi4xNiAyLjE2QzEwLjc0IDcuMTMgMTEuMzUgNyAxMiA3ek0yIDQuMjdsMi4yOCAyLjI4LjQ2LjQ2QzMuMDggOC4zIDEuNzggMTAuMDIgMSAxMmMxLjczIDQuMzkgNiA3LjUgMTEgNy41IDEuNTUgMCAzLjAzLS4zIDQuMzgtLjg0bC40Mi40MkwxOS43MyAyMiAyMSAyMC43MyAzLjI3IDMgMiA0LjI3ek03LjUzIDkuOGwxLjU1IDEuNTVjLS4wNS4yMS0uMDguNDMtLjA4LjY1IDAgMS42NiAxLjM0IDMgMyAzIC4yMiAwIC40NC0uMDMuNjUtLjA4bDEuNTUgMS41NWMtLjY3LjMzLTEuNDEuNTMtMi4yLjUzLTIuNzYgMC01LTIuMjQtNS01IDAtLjc5LjItMS41My41My0yLjJ6bTQuMzEtLjc4bDMuMTUgMy4xNS4wMi0uMTZjMC0xLjY2LTEuMzQtMy0zLTNsLS4xNy4wMXoiIC8+PC9nPgo8ZyBpZD0id2FybmluZyI+PHBhdGggZD0iTTEgMjFoMjJMMTIgMiAxIDIxem0xMi0zaC0ydi0yaDJ2MnptMC00aC0ydi00aDJ2NHoiIC8+PC9nPgo8ZyBpZD0id2F0Y2gtbGF0ZXIiPjxwYXRoIGQ9Ik0xMiAyQzYuNSAyIDIgNi41IDIgMTJzNC41IDEwIDEwIDEwIDEwLTQuNSAxMC0xMFMxNy41IDIgMTIgMnptNC4yIDE0LjJMMTEgMTNWN2gxLjV2NS4ybDQuNSAyLjctLjggMS4zeiIgLz48L2c+CjxnIGlkPSJ3ZWVrZW5kIj48cGF0aCBkPSJNMjEgMTBjLTEuMSAwLTIgLjktMiAydjNINXYtM2MwLTEuMS0uOS0yLTItMnMtMiAuOS0yIDJ2NWMwIDEuMS45IDIgMiAyaDE4YzEuMSAwIDItLjkgMi0ydi01YzAtMS4xLS45LTItMi0yem0tMy01SDZjLTEuMSAwLTIgLjktMiAydjIuMTVjMS4xNi40MSAyIDEuNTEgMiAyLjgyVjE0aDEydi0yLjAzYzAtMS4zLjg0LTIuNCAyLTIuODJWN2MwLTEuMS0uOS0yLTItMnoiIC8+PC9nPgo8ZyBpZD0id29yayI+PHBhdGggZD0iTTIwIDZoLTRWNGMwLTEuMTEtLjg5LTItMi0yaC00Yy0xLjExIDAtMiAuODktMiAydjJINGMtMS4xMSAwLTEuOTkuODktMS45OSAyTDIgMTljMCAxLjExLjg5IDIgMiAyaDE2YzEuMTEgMCAyLS44OSAyLTJWOGMwLTEuMTEtLjg5LTItMi0yem0tNiAwaC00VjRoNHYyeiIgLz48L2c+CjxnIGlkPSJ5b3V0dWJlLXNlYXJjaGVkLWZvciI+PHBhdGggZD0iTTE3LjAxIDE0aC0uOGwtLjI3LS4yN2MuOTgtMS4xNCAxLjU3LTIuNjEgMS41Ny00LjIzIDAtMy41OS0yLjkxLTYuNS02LjUtNi41cy02LjUgMy02LjUgNi41SDJsMy44NCA0IDQuMTYtNEg2LjUxQzYuNTEgNyA4LjUzIDUgMTEuMDEgNXM0LjUgMi4wMSA0LjUgNC41YzAgMi40OC0yLjAyIDQuNS00LjUgNC41LS42NSAwLTEuMjYtLjE0LTEuODItLjM4TDcuNzEgMTUuMWMuOTcuNTcgMi4wOS45IDMuMy45IDEuNjEgMCAzLjA4LS41OSA0LjIyLTEuNTdsLjI3LjI3di43OWw1LjAxIDQuOTlMMjIgMTlsLTQuOTktNXoiIC8+PC9nPgo8ZyBpZD0iem9vbS1pbiI+PHBhdGggZD0iTTE1LjUgMTRoLS43OWwtLjI4LS4yN0MxNS40MSAxMi41OSAxNiAxMS4xMSAxNiA5LjUgMTYgNS45MSAxMy4wOSAzIDkuNSAzUzMgNS45MSAzIDkuNSA1LjkxIDE2IDkuNSAxNmMxLjYxIDAgMy4wOS0uNTkgNC4yMy0xLjU3bC4yNy4yOHYuNzlsNSA0Ljk5TDIwLjQ5IDE5bC00Ljk5LTV6bS02IDBDNy4wMSAxNCA1IDExLjk5IDUgOS41UzcuMDEgNSA5LjUgNSAxNCA3LjAxIDE0IDkuNSAxMS45OSAxNCA5LjUgMTR6bTIuNS00aC0ydjJIOXYtMkg3VjloMlY3aDF2MmgydjF6IiAvPjwvZz4KPGcgaWQ9Inpvb20tb3V0Ij48cGF0aCBkPSJNMTUuNSAxNGgtLjc5bC0uMjgtLjI3QzE1LjQxIDEyLjU5IDE2IDExLjExIDE2IDkuNSAxNiA1LjkxIDEzLjA5IDMgOS41IDNTMyA1LjkxIDMgOS41IDUuOTEgMTYgOS41IDE2YzEuNjEgMCAzLjA5LS41OSA0LjIzLTEuNTdsLjI3LjI4di43OWw1IDQuOTlMMjAuNDkgMTlsLTQuOTktNXptLTYgMEM3LjAxIDE0IDUgMTEuOTkgNSA5LjVTNy4wMSA1IDkuNSA1IDE0IDcuMDEgMTQgOS41IDExLjk5IDE0IDkuNSAxNHpNNyA5aDV2MUg3eiIgLz48L2c+CjwvZGVmcz48L3N2Zz4KPC9pcm9uLWljb25zZXQtc3ZnPgoKCgoKCgoKCgo8ZG9tLW1vZHVsZSBpZD0icGFwZXItaWNvbi1idXR0b24iPgogIDx0ZW1wbGF0ZSBzdHJpcC13aGl0ZXNwYWNlPgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBwYWRkaW5nOiA4cHg7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgLW1zLXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB6LWluZGV4OiAwOwogICAgICAgIGxpbmUtaGVpZ2h0OiAxOwoKICAgICAgICB3aWR0aDogNDBweDsKICAgICAgICBoZWlnaHQ6IDQwcHg7CgogICAgICAgIC8qIE5PVEU6IEJvdGggdmFsdWVzIGFyZSBuZWVkZWQsIHNpbmNlIHNvbWUgcGhvbmVzIHJlcXVpcmUgdGhlIHZhbHVlIHRvIGJlIGB0cmFuc3BhcmVudGAuICovCiAgICAgICAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiByZ2JhKDAsIDAsIDAsIDApOwogICAgICAgIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogdHJhbnNwYXJlbnQ7CgogICAgICAgIC8qIEJlY2F1c2Ugb2YgcG9seW1lci8yNTU4LCB0aGlzIHN0eWxlIGhhcyBsb3dlciBzcGVjaWZpY2l0eSB0aGFuICogKi8KICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94ICFpbXBvcnRhbnQ7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWljb24tYnV0dG9uOwogICAgICB9CgogICAgICA6aG9zdCAjaW5rIHsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItaWNvbi1idXR0b24taW5rLWNvbG9yLCB2YXIoLS1wcmltYXJ5LXRleHQtY29sb3IpKTsKICAgICAgICBvcGFjaXR5OiAwLjY7CiAgICAgIH0KCiAgICAgIDpob3N0KFtkaXNhYmxlZF0pIHsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItaWNvbi1idXR0b24tZGlzYWJsZWQtdGV4dCwgdmFyKC0tZGlzYWJsZWQtdGV4dC1jb2xvcikpOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIGN1cnNvcjogYXV0bzsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItaWNvbi1idXR0b24tZGlzYWJsZWQ7CiAgICAgIH0KCiAgICAgIDpob3N0KFtoaWRkZW5dKSB7CiAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgICB9CgogICAgICA6aG9zdCg6aG92ZXIpIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1pY29uLWJ1dHRvbi1ob3ZlcjsKICAgICAgfQoKICAgICAgaXJvbi1pY29uIHsKICAgICAgICAtLWlyb24taWNvbi13aWR0aDogMTAwJTsKICAgICAgICAtLWlyb24taWNvbi1oZWlnaHQ6IDEwMCU7CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPGlyb24taWNvbiBpZD0iaWNvbiIgc3JjPSJbW3NyY11dIiBpY29uPSJbW2ljb25dXSIgYWx0JD0iW1thbHRdXSI+PC9pcm9uLWljb24+CiAgPC90ZW1wbGF0ZT4KCiAgPHNjcmlwdD4vL35+V0VCUEFUSH5+L3BhcGVyLWljb24tYnV0dG9uL3BhcGVyLWljb24tYnV0dG9uLmh0bWwuanMKUG9seW1lcih7aXM6InBhcGVyLWljb24tYnV0dG9uIixob3N0QXR0cmlidXRlczp7cm9sZToiYnV0dG9uIix0YWJpbmRleDoiMCJ9LGJlaGF2aW9yczpbUG9seW1lci5QYXBlcklua3lGb2N1c0JlaGF2aW9yXSxwcm9wZXJ0aWVzOntzcmM6e3R5cGU6U3RyaW5nfSxpY29uOnt0eXBlOlN0cmluZ30sYWx0Ont0eXBlOlN0cmluZyxvYnNlcnZlcjoiX2FsdENoYW5nZWQifX0sX2FsdENoYW5nZWQ6ZnVuY3Rpb24oYSxjKXt2YXIgZD10aGlzLmdldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbCIpO2QmJmMhPWR8fHRoaXMuc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsIixhKX19KTsKPC9zY3JpcHQ+CjwvZG9tLW1vZHVsZT4KCgoKCgoKCgo8ZG9tLW1vZHVsZSBpZD0icnVuLWNvbG9yLXN0eWxlIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIFtjb2xvci1jbGFzcz0nbGlnaHQtYmx1ZSddIHBhcGVyLWNoZWNrYm94IHsKICAgICAgICAtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtY29sb3I6IHZhcigtLXBhcGVyLWxpZ2h0LWJsdWUtNTAwKTsKICAgICAgICAtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtaW5rLWNvbG9yOiB2YXIoLS1wYXBlci1saWdodC1ibHVlLTUwMCk7CiAgICAgICAgLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtY29sb3I6IHZhcigtLXBhcGVyLWxpZ2h0LWJsdWUtOTAwKTsKICAgICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1pbmstY29sb3I6IHZhcigtLXBhcGVyLWxpZ2h0LWJsdWUtOTAwKTsKICAgICAgfQogICAgICBbY29sb3ItY2xhc3M9J3JlZCddIHBhcGVyLWNoZWNrYm94IHsKICAgICAgICAtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtY29sb3I6IHZhcigtLXBhcGVyLXJlZC01MDApOwogICAgICAgIC0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1pbmstY29sb3I6IHZhcigtLXBhcGVyLXJlZC01MDApOwogICAgICAgIC0tcGFwZXItY2hlY2tib3gtdW5jaGVja2VkLWNvbG9yOiB2YXIoLS1wYXBlci1yZWQtOTAwKTsKICAgICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1pbmstY29sb3I6IHZhcigtLXBhcGVyLXJlZC05MDApOwogICAgICB9CiAgICAgIFtjb2xvci1jbGFzcz0nZ3JlZW4nXSBwYXBlci1jaGVja2JveCB7CiAgICAgICAgLS1wYXBlci1jaGVja2JveC1jaGVja2VkLWNvbG9yOiB2YXIoLS1wYXBlci1ncmVlbi01MDApOwogICAgICAgIC0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1pbmstY29sb3I6IHZhcigtLXBhcGVyLWdyZWVuLTUwMCk7CiAgICAgICAgLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtY29sb3I6IHZhcigtLXBhcGVyLWdyZWVuLTkwMCk7CiAgICAgICAgLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtaW5rLWNvbG9yOiB2YXIoLS1wYXBlci1ncmVlbi05MDApOwogICAgICB9CiAgICAgIFtjb2xvci1jbGFzcz0ncHVycGxlJ10gcGFwZXItY2hlY2tib3ggewogICAgICAgIC0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1jb2xvcjogdmFyKC0tcGFwZXItcHVycGxlLTUwMCk7CiAgICAgICAgLS1wYXBlci1jaGVja2JveC1jaGVja2VkLWluay1jb2xvcjogdmFyKC0tcGFwZXItcHVycGxlLTUwMCk7CiAgICAgICAgLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtY29sb3I6IHZhcigtLXBhcGVyLXB1cnBsZS05MDApOwogICAgICAgIC0tcGFwZXItY2hlY2tib3gtdW5jaGVja2VkLWluay1jb2xvcjogdmFyKC0tcGFwZXItcHVycGxlLTkwMCk7CiAgICAgIH0KICAgICAgW2NvbG9yLWNsYXNzPSd0ZWFsJ10gcGFwZXItY2hlY2tib3ggewogICAgICAgIC0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1jb2xvcjogdmFyKC0tcGFwZXItdGVhbC01MDApOwogICAgICAgIC0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1pbmstY29sb3I6IHZhcigtLXBhcGVyLXRlYWwtNTAwKTsKICAgICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1jb2xvcjogdmFyKC0tcGFwZXItdGVhbC05MDApOwogICAgICAgIC0tcGFwZXItY2hlY2tib3gtdW5jaGVja2VkLWluay1jb2xvcjogdmFyKC0tcGFwZXItdGVhbC05MDApOwogICAgICB9CiAgICAgIFtjb2xvci1jbGFzcz0ncGluayddIHBhcGVyLWNoZWNrYm94IHsKICAgICAgICAtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtY29sb3I6IHZhcigtLXBhcGVyLXBpbmstNTAwKTsKICAgICAgICAtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtaW5rLWNvbG9yOiB2YXIoLS1wYXBlci1waW5rLTUwMCk7CiAgICAgICAgLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtY29sb3I6IHZhcigtLXBhcGVyLXBpbmstOTAwKTsKICAgICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1pbmstY29sb3I6IHZhcigtLXBhcGVyLXBpbmstOTAwKTsKICAgICAgfQogICAgICBbY29sb3ItY2xhc3M9J29yYW5nZSddIHBhcGVyLWNoZWNrYm94IHsKICAgICAgICAtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtY29sb3I6IHZhcigtLXBhcGVyLW9yYW5nZS01MDApOwogICAgICAgIC0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1pbmstY29sb3I6IHZhcigtLXBhcGVyLW9yYW5nZS01MDApOwogICAgICAgIC0tcGFwZXItY2hlY2tib3gtdW5jaGVja2VkLWNvbG9yOiB2YXIoLS1wYXBlci1vcmFuZ2UtOTAwKTsKICAgICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1pbmstY29sb3I6IHZhcigtLXBhcGVyLW9yYW5nZS05MDApOwogICAgICB9CiAgICAgIFtjb2xvci1jbGFzcz0nYnJvd24nXSBwYXBlci1jaGVja2JveCB7CiAgICAgICAgLS1wYXBlci1jaGVja2JveC1jaGVja2VkLWNvbG9yOiB2YXIoLS1wYXBlci1icm93bi01MDApOwogICAgICAgIC0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1pbmstY29sb3I6IHZhcigtLXBhcGVyLWJyb3duLTUwMCk7CiAgICAgICAgLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtY29sb3I6IHZhcigtLXBhcGVyLWJyb3duLTkwMCk7CiAgICAgICAgLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtaW5rLWNvbG9yOiB2YXIoLS1wYXBlci1icm93bi05MDApOwogICAgICB9CiAgICAgIFtjb2xvci1jbGFzcz0naW5kaWdvJ10gcGFwZXItY2hlY2tib3ggewogICAgICAgIC0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1jb2xvcjogdmFyKC0tcGFwZXItaW5kaWdvLTUwMCk7CiAgICAgICAgLS1wYXBlci1jaGVja2JveC1jaGVja2VkLWluay1jb2xvcjogdmFyKC0tcGFwZXItaW5kaWdvLTUwMCk7CiAgICAgICAgLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtY29sb3I6IHZhcigtLXBhcGVyLWluZGlnby05MDApOwogICAgICAgIC0tcGFwZXItY2hlY2tib3gtdW5jaGVja2VkLWluay1jb2xvcjogdmFyKC0tcGFwZXItaW5kaWdvLTkwMCk7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPgoKCgoKPGRvbS1tb2R1bGUgaWQ9InRmLW11bHRpLWNoZWNrYm94Ij4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGUgaW5jbHVkZT0ic2Nyb2xsYmFyLXN0eWxlIj48L3N0eWxlPgogICAgPHN0eWxlIGluY2x1ZGU9InJ1bi1jb2xvci1zdHlsZSI+PC9zdHlsZT4KCiAgICA8cGFwZXItaW5wdXQgaWQ9Im5hbWVzLXJlZ2V4IiBuby1sYWJlbC1mbG9hdCBsYWJlbD0iV3JpdGUgYSByZWdleCB0byBmaWx0ZXIgcnVucyIgdmFsdWU9IltbcmVnZXhdXSIgb24tYmluZC12YWx1ZS1jaGFuZ2VkPSJfZGVib3VuY2VkUmVnZXhDaGFuZ2UiPjwvcGFwZXItaW5wdXQ+CiAgICA8ZGl2IGlkPSJvdXRlci1jb250YWluZXIiIGNsYXNzPSJzY3JvbGxiYXIiPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW25hbWVzTWF0Y2hpbmdSZWdleF1dIj4KICAgICAgICA8ZGl2IGNsYXNzPSJuYW1lLXJvdyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJpY29uLWNvbnRhaW5lciBjaGVja2JveC1jb250YWluZXIgdmVydGljYWwtYWxpZ24tY29udGFpbmVyIj4KICAgICAgICAgICAgPHBhcGVyLWNoZWNrYm94IGNsYXNzPSJjaGVja2JveCB2ZXJ0aWNhbC1hbGlnbi1jZW50ZXIiIGlkJD0iY2hlY2tib3gtW1tpdGVtXV0iIG5hbWU9IltbaXRlbV1dIiBjaGVja2VkJD0iW1tfaXNDaGVja2VkKGl0ZW0sIHNlbGVjdGlvblN0YXRlLiopXV0iIG9uLWNoYW5nZT0iX2NoZWNrYm94Q2hhbmdlIj48L3BhcGVyLWNoZWNrYm94PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJpY29uLWNvbnRhaW5lciBpc29sYXRvci1jb250YWluZXIgdmVydGljYWwtYWxpZ24tY29udGFpbmVyIj4KICAgICAgICAgICAgPHBhcGVyLWljb24tYnV0dG9uIGljb249InJhZGlvLWJ1dHRvbi11bmNoZWNrZWQiIGNsYXNzPSJpc29sYXRvciB2ZXJ0aWNhbC1hbGlnbi1jZW50ZXIiIG9uLXRhcD0iX2lzb2xhdGVOYW1lIiBuYW1lPSJbW2l0ZW1dXSI+PC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iaXRlbS1sYWJlbC1jb250YWluZXIiPgogICAgICAgICAgICA8c3Bhbj5bW2l0ZW1dXTwvc3Bhbj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L3RlbXBsYXRlPgogICAgPC9kaXY+CiAgICA8c3R5bGU+CiAgICAgIHBhcGVyLWlucHV0IHsKICAgICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1mb2N1cy1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItaW5wdXQ6IHsKICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICB9CiAgICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItbGFiZWw6IHsKICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICB9CiAgICAgIH0KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQogICAgICAjb3V0ZXItY29udGFpbmVyIHsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIG92ZXJmbG93LXg6IGhpZGRlbjsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgZmxleC1zaHJpbms6IDE7CiAgICAgICAgd29yZC13cmFwOiBicmVhay13b3JkOwogICAgICB9CiAgICAgIC5uYW1lLXJvdyB7CiAgICAgICAgcGFkZGluZy10b3A6IDVweDsKICAgICAgICBwYWRkaW5nLWJvdHRvbTogNXB4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgd29yZC1icmVhazogYnJlYWstYWxsOyAvKiBtYWtlcyB3cmFwcGluZyBvZiBoeXBlcnBhcmFtIHN0cmluZ3MgYmV0dGVyICovCiAgICAgIH0KICAgICAgLmljb24tY29udGFpbmVyIHsKICAgICAgICBmbGV4LWdyb3c6IDA7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgcGFkZGluZy1sZWZ0OiAycHg7CiAgICAgIH0KICAgICAgLmNoZWNrYm94IHsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDJweDsKICAgICAgICB3aWR0aDogMThweDsKICAgICAgICBoZWlnaHQ6IDE4cHg7CiAgICAgIH0KICAgICAgLmlzb2xhdG9yIHsKICAgICAgICB3aWR0aDogMThweDsKICAgICAgICBoZWlnaHQ6IDE4cHg7CiAgICAgICAgcGFkZGluZzogMHB4OwogICAgICB9CiAgICAgIC5pc29sYXRvci1jb250YWluZXIgewogICAgICAgIHBhZGRpbmctbGVmdDogNnB4OwogICAgICAgIHBhZGRpbmctcmlnaHQ6IDNweDsKICAgICAgfQogICAgICAuY2hlY2tib3gtY29udGFpbmVyIHsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDJweDsKICAgICAgfQogICAgICAuaXRlbS1sYWJlbC1jb250YWluZXIgewogICAgICAgIHBhZGRpbmctbGVmdDogNXB4OwogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgICBmbGV4LXNocmluazogMTsKICAgICAgICB3aWR0aDogMHB4OyAvKiBoYWNrIHRvIGdldCB0aGUgZmxleC1ncm93IHRvIHdvcmsgcHJvcGVybHkgKi8KICAgICAgfQogICAgICAudG9vbHRpcC12YWx1ZS1jb250YWluZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgZmxleC1ncm93OiAwOwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OwogICAgICAgIHBhZGRpbmctbGVmdDogMnB4OwogICAgICB9CiAgICAgIC52ZXJ0aWNhbC1hbGlnbi1jb250YWluZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgIH0KICAgICAgLnZlcnRpY2FsLWFsaWduLWNvbnRhaW5lciAudmVydGljYWwtYWxpZ24tY2VudGVyIHsKICAgICAgICBhbGlnbi1zZWxmOiBjZW50ZXI7CiAgICAgIH0KICAgICAgLnZlcnRpY2FsLWFsaWduLWNvbnRhaW5lciAudmVydGljYWwtYWxpZ24tdG9wIHsKICAgICAgICBhbGlnbi1zZWxmOiBzdGFydDsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgogIDxzY3JpcHQ+Ly9+fldFQlBBVEh+fi90Zi1kYXNoYm9hcmQtY29tbW9uL3RmLW11bHRpLWNoZWNrYm94LmpzCihmdW5jdGlvbigpe1BvbHltZXIoe2lzOiJ0Zi1tdWx0aS1jaGVja2JveCIscHJvcGVydGllczp7bmFtZXM6e3R5cGU6QXJyYXksdmFsdWU6KCk9PltdfSxjb2xvcmluZzp7dHlwZTpPYmplY3QsdmFsdWU6e2dldENvbG9yOigpPT4iIn19LHJlZ2V4Ont0eXBlOlN0cmluZyxub3RpZnk6ITAsdmFsdWU6IiJ9LF9yZWdleDp7dHlwZTpPYmplY3QsY29tcHV0ZWQ6Il9tYWtlUmVnZXgocmVnZXgpIn0sbmFtZXNNYXRjaGluZ1JlZ2V4Ont0eXBlOkFycmF5LGNvbXB1dGVkOiJjb21wdXRlTmFtZXNNYXRjaGluZ1JlZ2V4KG5hbWVzLiosIF9yZWdleCkifSxzZWxlY3Rpb25TdGF0ZTp7dHlwZTpPYmplY3Qsbm90aWZ5OiEwLHZhbHVlOigpPT4oe30pfSxvdXRTZWxlY3RlZDp7dHlwZTpBcnJheSxub3RpZnk6ITAsY29tcHV0ZWQ6ImNvbXB1dGVPdXRTZWxlY3RlZChuYW1lc01hdGNoaW5nUmVnZXguKiwgc2VsZWN0aW9uU3RhdGUuKikifSxtYXhOYW1lc1RvRW5hYmxlQnlEZWZhdWx0Ont0eXBlOk51bWJlciwKdmFsdWU6NDB9LF9kZWJvdW5jZWRSZWdleENoYW5nZTp7dHlwZTpPYmplY3QsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgYT1fLmRlYm91bmNlKGM9Pnt0aGlzLnJlZ2V4PWN9LDE1MCx7bGVhZGluZzohMX0pO3JldHVybiBmdW5jdGlvbigpe3ZhciBjPXRoaXMuJCQoIiNuYW1lcy1yZWdleCIpLnZhbHVlOyIiPT1jP3RoaXMuYXN5bmMoKCk9Pnt0aGlzLnJlZ2V4PWN9LDMwKTphKGMpfX19fSxsaXN0ZW5lcnM6eyJkb20tY2hhbmdlIjoic3luY2hyb25pemVDb2xvcnMifSxvYnNlcnZlcnM6WyJfc2V0SXNvbGF0b3JJY29uKHNlbGVjdGlvblN0YXRlLCBuYW1lcykiXSxfbWFrZVJlZ2V4OmZ1bmN0aW9uKGEpe3RyeXtyZXR1cm4gbmV3IFJlZ0V4cChhKX1jYXRjaChjKXtyZXR1cm4gbnVsbH19LF9zZXRJc29sYXRvckljb246ZnVuY3Rpb24oKXt2YXIgYT10aGlzLnNlbGVjdGlvblN0YXRlLGM9Xy5maWx0ZXIoXy52YWx1ZXMoYSkpLmxlbmd0aDtBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzLnJvb3QucXVlcnlTZWxlY3RvckFsbCgiLmlzb2xhdG9yIikpLmZvckVhY2goZnVuY3Rpb24oZCl7ZC5pY29uPQoxPT09YyYmYVtkLm5hbWVdPyJyYWRpby1idXR0b24tY2hlY2tlZCI6InJhZGlvLWJ1dHRvbi11bmNoZWNrZWQifSl9LGNvbXB1dGVOYW1lc01hdGNoaW5nUmVnZXg6ZnVuY3Rpb24oKXtjb25zdCBhPXRoaXMuX3JlZ2V4O3JldHVybiBhP3RoaXMubmFtZXMuZmlsdGVyKGM9PmEudGVzdChjKSk6dGhpcy5uYW1lc30sY29tcHV0ZU91dFNlbGVjdGVkOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5zZWxlY3Rpb25TdGF0ZSxjPXRoaXMubmFtZXNNYXRjaGluZ1JlZ2V4Lmxlbmd0aDw9dGhpcy5tYXhOYW1lc1RvRW5hYmxlQnlEZWZhdWx0O3JldHVybiB0aGlzLm5hbWVzTWF0Y2hpbmdSZWdleC5maWx0ZXIoZD0+bnVsbD09YVtkXT9jOmFbZF0pfSxzeW5jaHJvbml6ZUNvbG9yczpmdW5jdGlvbigpe3RoaXMuX3NldElzb2xhdG9ySWNvbigpO3RoaXMucm9vdC5xdWVyeVNlbGVjdG9yQWxsKCJwYXBlci1jaGVja2JveCIpLmZvckVhY2goYT0+e2NvbnN0IGM9dGhpcy5jb2xvcmluZy5nZXRDb2xvcihhLm5hbWUpOwphLnVwZGF0ZVN0eWxlcyh7Ii0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1jb2xvciI6YywiLS1wYXBlci1jaGVja2JveC1jaGVja2VkLWluay1jb2xvciI6YywiLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtY29sb3IiOmMsIi0tcGFwZXItY2hlY2tib3gtdW5jaGVja2VkLWluay1jb2xvciI6Y30pfSk7dGhpcy5yb290LnF1ZXJ5U2VsZWN0b3JBbGwoIi5pc29sYXRvciIpLmZvckVhY2goYT0+e2NvbnN0IGM9dGhpcy5jb2xvcmluZy5nZXRDb2xvcihhLm5hbWUpO2Euc3R5bGUuY29sb3I9Y30pO3dpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9Pnt0aGlzLnVwZGF0ZVN0eWxlcygpfSl9LF9pc29sYXRlTmFtZTpmdW5jdGlvbihhKXt2YXIgYz1Qb2x5bWVyLmRvbShhKS5sb2NhbFRhcmdldC5uYW1lLGQ9e307dGhpcy5uYW1lcy5mb3JFYWNoKGZ1bmN0aW9uKGYpe2RbZl09Zj09Y30pO3RoaXMuc2VsZWN0aW9uU3RhdGU9ZH0sX2NoZWNrYm94Q2hhbmdlOmZ1bmN0aW9uKGEpe2E9ClBvbHltZXIuZG9tKGEpLmxvY2FsVGFyZ2V0O2NvbnN0IGM9Xy5jbG9uZSh0aGlzLnNlbGVjdGlvblN0YXRlKTtjW2EubmFtZV09YS5jaGVja2VkO3RoaXMuc2VsZWN0aW9uU3RhdGU9Y30sX2lzQ2hlY2tlZDpmdW5jdGlvbihhKXtyZXR1cm4tMSE9dGhpcy5vdXRTZWxlY3RlZC5pbmRleE9mKGEpfSx0b2dnbGVBbGw6ZnVuY3Rpb24oKXtjb25zdCBhPXRoaXMubmFtZXNNYXRjaGluZ1JlZ2V4LnNvbWUoZD0+dGhpcy5vdXRTZWxlY3RlZC5pbmNsdWRlcyhkKSksYz17fTt0aGlzLm5hbWVzLmZvckVhY2goZD0+e2NbZF09IWF9KTt0aGlzLnNlbGVjdGlvblN0YXRlPWN9fSl9KShXbHx8KFdsPXt9KSk7Cjwvc2NyaXB0Pgo8L2RvbS1tb2R1bGU+CgoKCgo8ZG9tLW1vZHVsZSBpZD0idGYtd2JyLXN0cmluZyI+CiAgPHRlbXBsYXRlPgogICAgCiAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19wYXJ0c11dIiBhcz0icGFydCI+W1twYXJ0XV08d2JyPjwvdGVtcGxhdGU+CiAgPC90ZW1wbGF0ZT4KICA8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdGYtcnVucy1zZWxlY3Rvci90Zi13YnItc3RyaW5nLmh0bWwuanMKUG9seW1lcih7aXM6InRmLXdici1zdHJpbmciLHByb3BlcnRpZXM6e3ZhbHVlOlN0cmluZyxfcGFydHM6e3R5cGU6QXJyYXksY29tcHV0ZWQ6Il9jb21wdXRlUGFydHModmFsdWUpIn19LF9jb21wdXRlUGFydHMoYSl7Y29uc3QgYz1bXSxkPS9bLz1fLC1dLztmb3IobnVsbD09YSYmKGE9IiIpOzspe2NvbnN0IGY9YS5zZWFyY2goZCk7aWYoLTE9PT1mKXtjLnB1c2goYSk7YnJlYWt9ZWxzZSBjLnB1c2goYS5zbGljZSgwLGYrMSkpLGE9YS5zbGljZShmKzEpfXJldHVybiBjfX0pOwo8L3NjcmlwdD4KPC9kb20tbW9kdWxlPgoKCgo8ZG9tLW1vZHVsZSBpZD0idGYtcnVucy1zZWxlY3RvciI+CiAgPHRlbXBsYXRlPgogICAgPHBhcGVyLWRpYWxvZyB3aXRoLWJhY2tkcm9wIGlkPSJkYXRhLWxvY2F0aW9uLWRpYWxvZyI+CiAgICAgIDxoMj5EYXRhIExvY2F0aW9uPC9oMj4KICAgICAgPHRmLXdici1zdHJpbmcgdmFsdWU9IltbZGF0YUxvY2F0aW9uXV0iIC8+CiAgICA8L3BhcGVyLWRpYWxvZz4KICAgIDxkaXYgaWQ9InRvcC10ZXh0Ij4KICAgICAgPGgzIGlkPSJ0b29sdGlwLWhlbHAiIGNsYXNzPSJ0b29sdGlwLWNvbnRhaW5lciI+UnVuczwvaDM+CiAgICA8L2Rpdj4KICAgIDx0Zi1tdWx0aS1jaGVja2JveCBpZD0ibXVsdGlDaGVja2JveCIgbmFtZXM9IltbcnVuc11dIiBzZWxlY3Rpb24tc3RhdGU9Int7cnVuU2VsZWN0aW9uU3RhdGV9fSIgb3V0LXNlbGVjdGVkPSJ7e3NlbGVjdGVkUnVuc319IiByZWdleD0ie3tyZWdleElucHV0fX0iIGNvbG9yaW5nPSJbW2NvbG9yaW5nXV0iPjwvdGYtbXVsdGktY2hlY2tib3g+CiAgICA8cGFwZXItYnV0dG9uIGNsYXNzPSJ4LWJ1dHRvbiIgaWQ9InRvZ2dsZS1hbGwiIG9uLXRhcD0iX3RvZ2dsZUFsbCI+CiAgICAgIFRvZ2dsZSBBbGwgUnVucwogICAgPC9wYXBlci1idXR0b24+CiAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbZGF0YUxvY2F0aW9uXV0iPgogICAgICA8ZGl2IGlkPSJkYXRhLWxvY2F0aW9uIj4KICAgICAgICA8dGYtd2JyLXN0cmluZyB2YWx1ZT0iW1tfY2xpcHBlZERhdGFMb2NhdGlvbl1dIiAvPjx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfc2hvdWxkU2hvd0V4cGFuZERhdGFMb2NhdGlvbkJ1dHRvbihkYXRhTG9jYXRpb24sIF9kYXRhTG9jYXRpb25DbGlwTGVuZ3RoKV1dIj48YSBocmVmPSIiIG9uLWNsaWNrPSJfb3BlbkRhdGFMb2NhdGlvbkRpYWxvZyI+4oCmPC9hPgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDwvZGl2PgogICAgPC90ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIHBhZGRpbmctYm90dG9tOiAxMHB4OwogICAgICB9CiAgICAgICN0b3AtdGV4dCB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgZmxleC1ncm93OiAwOwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICAgIHBhZGRpbmctcmlnaHQ6IDE2cHg7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItZ3JleS04MDApOwogICAgICB9CiAgICAgIHRmLW11bHRpLWNoZWNrYm94IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgICBmbGV4LXNocmluazogMTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB9CiAgICAgIC54LWJ1dHRvbiB7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXRiLXVpLWxpZ2h0LWFjY2VudCk7CiAgICAgICAgY29sb3I6IHZhcigtLXRiLXVpLWRhcmstYWNjZW50KTsKICAgICAgfQogICAgICAjdG9vbHRpcC1oZWxwIHsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItZ3JleS04MDApOwogICAgICAgIG1hcmdpbjogMDsKICAgICAgICBmb250LXdlaWdodDogbm9ybWFsOwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBtYXJnaW4tYm90dG9tOiA1cHg7CiAgICAgIH0KICAgICAgcGFwZXItYnV0dG9uIHsKICAgICAgICBtYXJnaW4tbGVmdDogMDsKICAgICAgfQogICAgICAjZGF0YS1sb2NhdGlvbiB7CiAgICAgICAgY29sb3I6IHZhcigtLXRiLXVpLWRhcmstYWNjZW50KTsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgbWFyZ2luOiA1cHggMCAwIDA7CiAgICAgICAgbWF4LXdpZHRoOiAyODhweDsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgogIDxzY3JpcHQ+Ly9+fldFQlBBVEh+fi90Zi1ydW5zLXNlbGVjdG9yL3RmLXJ1bnMtc2VsZWN0b3IuaHRtbC5qcwpQb2x5bWVyKHtpczoidGYtcnVucy1zZWxlY3RvciIscHJvcGVydGllczp7cnVuU2VsZWN0aW9uU3RhdGU6e3R5cGU6T2JqZWN0LG9ic2VydmVyOiJfc3RvcmVSdW5TZWxlY3Rpb25TdGF0ZSIsdmFsdWU6VmwuZ2V0T2JqZWN0SW5pdGlhbGl6ZXIoInJ1blNlbGVjdGlvblN0YXRlIix7ZGVmYXVsdFZhbHVlOnt9fSl9LHJlZ2V4SW5wdXQ6e3R5cGU6U3RyaW5nLHZhbHVlOlZsLmdldFN0cmluZ0luaXRpYWxpemVyKCJyZWdleElucHV0Iix7ZGVmYXVsdFZhbHVlOiIifSksb2JzZXJ2ZXI6Il9yZWdleE9ic2VydmVyIn0sc2VsZWN0ZWRSdW5zOnt0eXBlOkFycmF5LG5vdGlmeTohMH0scnVuczpBcnJheSxkYXRhTG9jYXRpb246e3R5cGU6U3RyaW5nLG5vdGlmeTohMH0sX2NsaXBwZWREYXRhTG9jYXRpb246e3R5cGU6U3RyaW5nLGNvbXB1dGVkOiJfZ2V0Q2xpcHBlZERhdGFMb2NhdGlvbihkYXRhTG9jYXRpb24sIF9kYXRhTG9jYXRpb25DbGlwTGVuZ3RoKSJ9LF9kYXRhTG9jYXRpb25DbGlwTGVuZ3RoOnt0eXBlOk51bWJlciwKdmFsdWU6MjUwLHJlYWRPbmx5OiEwfSxjb2xvcmluZzp7dHlwZTpPYmplY3QsdmFsdWU6e2dldENvbG9yOlpsLnJ1bnNDb2xvclNjYWxlfX19LGF0dGFjaGVkKCl7dGhpcy5fcnVuU3RvcmVMaXN0ZW5lcj1Qay5ydW5zU3RvcmUuYWRkTGlzdGVuZXIoKCk9Pnt0aGlzLnNldCgicnVucyIsUGsucnVuc1N0b3JlLmdldFJ1bnMoKSl9KTt0aGlzLnNldCgicnVucyIsUGsucnVuc1N0b3JlLmdldFJ1bnMoKSk7dGhpcy5fZW52U3RvcmVMaXN0ZW5lcj1Qay5lbnZpcm9ubWVudFN0b3JlLmFkZExpc3RlbmVyKCgpPT57dGhpcy5zZXQoImRhdGFMb2NhdGlvbiIsUGsuZW52aXJvbm1lbnRTdG9yZS5nZXREYXRhTG9jYXRpb24oKSl9KTt0aGlzLnNldCgiZGF0YUxvY2F0aW9uIixQay5lbnZpcm9ubWVudFN0b3JlLmdldERhdGFMb2NhdGlvbigpKX0sZGV0YWNoZWQoKXtQay5ydW5zU3RvcmUucmVtb3ZlTGlzdGVuZXJCeUtleSh0aGlzLl9ydW5TdG9yZUxpc3RlbmVyKTtQay5lbnZpcm9ubWVudFN0b3JlLnJlbW92ZUxpc3RlbmVyQnlLZXkodGhpcy5fZW52U3RvcmVMaXN0ZW5lcil9LApfdG9nZ2xlQWxsOmZ1bmN0aW9uKCl7dGhpcy4kLm11bHRpQ2hlY2tib3gudG9nZ2xlQWxsKCl9LF9nZXRDbGlwcGVkRGF0YUxvY2F0aW9uOmZ1bmN0aW9uKGEsYyl7aWYodm9pZCAwIT09YSYmIShhLmxlbmd0aD5jKSlyZXR1cm4gYX0sX29wZW5EYXRhTG9jYXRpb25EaWFsb2c6ZnVuY3Rpb24oYSl7YS5wcmV2ZW50RGVmYXVsdCgpO3RoaXMuJCQoIiNkYXRhLWxvY2F0aW9uLWRpYWxvZyIpLm9wZW4oKX0sX3Nob3VsZFNob3dFeHBhbmREYXRhTG9jYXRpb25CdXR0b24oYSxjKXtyZXR1cm4gYSYmYS5sZW5ndGg+Y30sX3N0b3JlUnVuU2VsZWN0aW9uU3RhdGU6VmwuZ2V0T2JqZWN0T2JzZXJ2ZXIoInJ1blNlbGVjdGlvblN0YXRlIix7ZGVmYXVsdFZhbHVlOnt9fSksX3JlZ2V4T2JzZXJ2ZXI6VmwuZ2V0U3RyaW5nT2JzZXJ2ZXIoInJlZ2V4SW5wdXQiLHtkZWZhdWx0VmFsdWU6IiJ9KX0pOwo8L3NjcmlwdD4KPC9kb20tbW9kdWxlPgoKCjxzY3JpcHQ+Ly9+fldFQlBBVEh+fi90Zi10ZW5zb3Jib2FyZC9yZWdpc3RyeS5qcwp2YXIgJGw7CihmdW5jdGlvbihhKXsoZnVuY3Rpb24oYyl7Yy5OT1RfTE9BREVEPSJOT1RfTE9BREVEIjtjLkxPQURFRD0iTE9BREVEIjtjLkZBSUxFRD0iRkFJTEVEIn0pKGEuQWN0aXZlRGFzaGJvYXJkc0xvYWRTdGF0ZXx8KGEuQWN0aXZlRGFzaGJvYXJkc0xvYWRTdGF0ZT17fSkpO2EuZGFzaGJvYXJkUmVnaXN0cnk9e307YS5yZWdpc3RlckRhc2hib2FyZD1mdW5jdGlvbihjKXtpZighYy5wbHVnaW4pdGhyb3cgRXJyb3IoIkRhc2hib2FyZC5wbHVnaW4gbXVzdCBiZSBwcmVzZW50Iik7aWYoIWMuZWxlbWVudE5hbWUpdGhyb3cgRXJyb3IoIkRhc2hib2FyZC5lbGVtZW50TmFtZSBtdXN0IGJlIHByZXNlbnQiKTtpZihjLnBsdWdpbiBpbiBhLmRhc2hib2FyZFJlZ2lzdHJ5KXRocm93IEVycm9yKGBQbHVnaW4gYWxyZWFkeSByZWdpc3RlcmVkOiAke2MucGx1Z2lufWApO2MudGFiTmFtZXx8KGMudGFiTmFtZT1jLnBsdWdpbik7YS5kYXNoYm9hcmRSZWdpc3RyeVtjLnBsdWdpbl09Y319KSgkbHx8KCRsPQp7fSkpOwo8L3NjcmlwdD4KCjxzY3JpcHQ+Ly9+fldFQlBBVEh+fi90Zi11dGlscy91dGlscy5qcwp2YXIgYW07CihmdW5jdGlvbihhKXtmdW5jdGlvbiBjKGQsZixnKXtyZXR1cm4gMT09PWQ/ZjpnfWEuYWdncmVnYXRlVGFnSW5mbz1mdW5jdGlvbihkLGYpe2xldCBnPXZvaWQgMDtjb25zdCBsPXt9O09iamVjdC5rZXlzKGQpLmZvckVhY2gobT0+e2NvbnN0IHA9ZFttXTt2b2lkIDA9PT1nJiYoZz1wLmRpc3BsYXlOYW1lKTtnIT09cC5kaXNwbGF5TmFtZSYmKGc9bnVsbCk7dm9pZCAwPT09bFtwLmRlc2NyaXB0aW9uXSYmKGxbcC5kZXNjcmlwdGlvbl09W10pO2xbcC5kZXNjcmlwdGlvbl0ucHVzaChtKX0pO2Y9bnVsbCE9Zz9nOmY7Y29uc3Qgaz0oKCk9Pntjb25zdCBtPU9iamVjdC5rZXlzKGwpO3JldHVybiAwPT09bS5sZW5ndGg/IiI6MT09PW0ubGVuZ3RoP21bMF06YCR7Ilx4M2NwXHgzZVx4M2NzdHJvbmdceDNlTXVsdGlwbGUgZGVzY3JpcHRpb25zOlx4M2Mvc3Ryb25nXHgzZVx4M2MvcFx4M2UifTx1bD4ke20ubWFwKHA9Pntjb25zdCBxPWxbcF0ubWFwKHQ9PmA8Y29kZT4ke3QucmVwbGFjZSgvPC9nLCJceDI2bHQ7IikucmVwbGFjZSgvPi9nLAoiXHgyNmd0OyIpLnJlcGxhY2UoLyYvZywiXHgyNmFtcDsiKX08L2NvZGU+YCkscj0yPHEubGVuZ3RoP3Euc2xpY2UoMCxxLmxlbmd0aC0xKS5qb2luKCIsICIpKyIsIGFuZCAiK3FbcS5sZW5ndGgtMV06cS5qb2luKCIgYW5kICIpO3JldHVybmA8bGk+PHA+Rm9yICR7YyhxLmxlbmd0aCwicnVuIiwicnVucyIpfSAke3J9OjwvcD4ke3B9PC9saT5gfSkuam9pbigiIil9PC91bD5gfSkoKTtyZXR1cm57ZGlzcGxheU5hbWU6ZixkZXNjcmlwdGlvbjprfX19KShhbXx8KGFtPXt9KSk7Cjwvc2NyaXB0PgoKCgoKCgoKCgoKCgoKPHNjcmlwdD4vL35+V0VCUEFUSH5+L3BhcGVyLXNwaW5uZXIvcGFwZXItc3Bpbm5lci1iZWhhdmlvci5odG1sLmpzClBvbHltZXIuUGFwZXJTcGlubmVyQmVoYXZpb3I9e3Byb3BlcnRpZXM6e2FjdGl2ZTp7dHlwZTpCb29sZWFuLHZhbHVlOiExLHJlZmxlY3RUb0F0dHJpYnV0ZTohMCxvYnNlcnZlcjoiX19hY3RpdmVDaGFuZ2VkIn0sYWx0Ont0eXBlOlN0cmluZyx2YWx1ZToibG9hZGluZyIsb2JzZXJ2ZXI6Il9fYWx0Q2hhbmdlZCJ9LF9fY29vbGluZ0Rvd246e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX19LF9fY29tcHV0ZUNvbnRhaW5lckNsYXNzZXM6ZnVuY3Rpb24oYSxjKXtyZXR1cm5bYXx8Yz8iYWN0aXZlIjoiIixjPyJjb29sZG93biI6IiJdLmpvaW4oIiAiKX0sX19hY3RpdmVDaGFuZ2VkOmZ1bmN0aW9uKGEsYyl7dGhpcy5fX3NldEFyaWFIaWRkZW4oIWEpO3RoaXMuX19jb29saW5nRG93bj0hYSYmY30sX19hbHRDaGFuZ2VkOmZ1bmN0aW9uKGEpeyJsb2FkaW5nIj09PWE/dGhpcy5hbHQ9dGhpcy5nZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiKXx8YToodGhpcy5fX3NldEFyaWFIaWRkZW4oIiI9PT0KYSksdGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiLGEpKX0sX19zZXRBcmlhSGlkZGVuOmZ1bmN0aW9uKGEpe2E/dGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtaGlkZGVuIiwidHJ1ZSIpOnRoaXMucmVtb3ZlQXR0cmlidXRlKCJhcmlhLWhpZGRlbiIpfSxfX3Jlc2V0OmZ1bmN0aW9uKCl7dGhpcy5fX2Nvb2xpbmdEb3duPXRoaXMuYWN0aXZlPSExfX07Cjwvc2NyaXB0PgoKPGRvbS1tb2R1bGUgaWQ9InBhcGVyLXNwaW5uZXItc3R5bGVzIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIC8qCiAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KICAgICAgLyogU1RZTEVTIEZPUiBUSEUgU1BJTk5FUiAqLwogICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCgogICAgICAvKgogICAgICAgKiBDb25zdGFudHM6CiAgICAgICAqICAgICAgQVJDU0laRSAgICAgPSAyNzAgZGVncmVlcyAoYW1vdW50IG9mIGNpcmNsZSB0aGUgYXJjIHRha2VzIHVwKQogICAgICAgKiAgICAgIEFSQ1RJTUUgICAgID0gMTMzM21zICh0aW1lIGl0IHRha2VzIHRvIGV4cGFuZCBhbmQgY29udHJhY3QgYXJjKQogICAgICAgKiAgICAgIEFSQ1NUQVJUUk9UID0gMjE2IGRlZ3JlZXMgKGhvdyBtdWNoIHRoZSBzdGFydCBsb2NhdGlvbiBvZiB0aGUgYXJjCiAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG91bGQgcm90YXRlIGVhY2ggdGltZSwgMjE2IGdpdmVzIHVzIGEKICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUgcG9pbnRlZCBzdGFyIHNoYXBlIChpdCdzIDM2MC81ICogMykuCiAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgYSA3IHBvaW50ZWQgc3Rhciwgd2UgbWlnaHQgZG8KICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM2MC83ICogMyA9IDE1NC4yODYpCiAgICAgICAqICAgICAgU0hSSU5LX1RJTUUgPSA0MDBtcwogICAgICAgKi8KCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHdpZHRoOiAyOHB4OwogICAgICAgIGhlaWdodDogMjhweDsKCiAgICAgICAgLyogMzYwICogQVJDVElNRSAvIChBUkNTVEFSVFJPVCArICgzNjAtQVJDU0laRSkpICovCiAgICAgICAgLS1wYXBlci1zcGlubmVyLWNvbnRhaW5lci1yb3RhdGlvbi1kdXJhdGlvbjogMTU2OG1zOwoKICAgICAgICAvKiBBUkNUSU1FICovCiAgICAgICAgLS1wYXBlci1zcGlubmVyLWV4cGFuZC1jb250cmFjdC1kdXJhdGlvbjogMTMzM21zOwoKICAgICAgICAvKiA0ICogQVJDVElNRSAqLwogICAgICAgIC0tcGFwZXItc3Bpbm5lci1mdWxsLWN5Y2xlLWR1cmF0aW9uOiA1MzMybXM7CgogICAgICAgIC8qIFNIUklOS19USU1FICovCiAgICAgICAgLS1wYXBlci1zcGlubmVyLWNvb2xkb3duLWR1cmF0aW9uOiA0MDBtczsKICAgICAgfQoKICAgICAgI3NwaW5uZXJDb250YWluZXIgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKCiAgICAgICAgLyogVGhlIHNwaW5uZXIgZG9lcyBub3QgaGF2ZSBhbnkgY29udGVudHMgdGhhdCB3b3VsZCBoYXZlIHRvIGJlCiAgICAgICAgICogZmxpcHBlZCBpZiB0aGUgZGlyZWN0aW9uIGNoYW5nZXMuIEFsd2F5cyB1c2UgbHRyIHNvIHRoYXQgdGhlCiAgICAgICAgICogc3R5bGUgd29ya3Mgb3V0IGNvcnJlY3RseSBpbiBib3RoIGNhc2VzLiAqLwogICAgICAgIGRpcmVjdGlvbjogbHRyOwogICAgICB9CgogICAgICAjc3Bpbm5lckNvbnRhaW5lci5hY3RpdmUgewogICAgICAgIC13ZWJraXQtYW5pbWF0aW9uOiBjb250YWluZXItcm90YXRlIHZhcigtLXBhcGVyLXNwaW5uZXItY29udGFpbmVyLXJvdGF0aW9uLWR1cmF0aW9uKSBsaW5lYXIgaW5maW5pdGU7CiAgICAgICAgYW5pbWF0aW9uOiBjb250YWluZXItcm90YXRlIHZhcigtLXBhcGVyLXNwaW5uZXItY29udGFpbmVyLXJvdGF0aW9uLWR1cmF0aW9uKSBsaW5lYXIgaW5maW5pdGU7CiAgICAgIH0KCiAgICAgIEAtd2Via2l0LWtleWZyYW1lcyBjb250YWluZXItcm90YXRlIHsKICAgICAgICB0byB7IC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKSB9CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMgY29udGFpbmVyLXJvdGF0ZSB7CiAgICAgICAgdG8geyB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpIH0KICAgICAgfQoKICAgICAgLnNwaW5uZXItbGF5ZXIgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1zcGlubmVyLWNvbG9yLCB2YXIoLS1nb29nbGUtYmx1ZS01MDApKTsKICAgICAgfQoKICAgICAgLmxheWVyLTEgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1zcGlubmVyLWxheWVyLTEtY29sb3IsIHZhcigtLWdvb2dsZS1ibHVlLTUwMCkpOwogICAgICB9CgogICAgICAubGF5ZXItMiB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLXNwaW5uZXItbGF5ZXItMi1jb2xvciwgdmFyKC0tZ29vZ2xlLXJlZC01MDApKTsKICAgICAgfQoKICAgICAgLmxheWVyLTMgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1zcGlubmVyLWxheWVyLTMtY29sb3IsIHZhcigtLWdvb2dsZS15ZWxsb3ctNTAwKSk7CiAgICAgIH0KCiAgICAgIC5sYXllci00IHsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItc3Bpbm5lci1sYXllci00LWNvbG9yLCB2YXIoLS1nb29nbGUtZ3JlZW4tNTAwKSk7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBJTVBPUlRBTlQgTk9URSBBQk9VVCBDU1MgQU5JTUFUSU9OIFBST1BFUlRJRVMgKGtlYW51bGVlKToKICAgICAgICoKICAgICAgICogaU9TIFNhZmFyaSAodGVzdGVkIG9uIGlPUyA4LjEpIGRvZXMgbm90IGhhbmRsZSBhbmltYXRpb24tZGVsYXkgdmVyeSB3ZWxsIC0gaXQgZG9lc24ndAogICAgICAgKiBndWFyYW50ZWUgdGhhdCB0aGUgYW5pbWF0aW9uIHdpbGwgc3RhcnQgX2V4YWN0bHlfIGFmdGVyIHRoYXQgdmFsdWUuIFNvIHdlIGF2b2lkIHVzaW5nCiAgICAgICAqIGFuaW1hdGlvbi1kZWxheSBhbmQgaW5zdGVhZCBzZXQgY3VzdG9tIGtleWZyYW1lcyBmb3IgZWFjaCBjb2xvciAoYXMgbGF5ZXItMnVuZGFudCBhcyBpdAogICAgICAgKiBzZWVtcykuCiAgICAgICAqLwogICAgICAuYWN0aXZlIC5zcGlubmVyLWxheWVyIHsKICAgICAgICAtd2Via2l0LWFuaW1hdGlvbi1uYW1lOiBmaWxsLXVuZmlsbC1yb3RhdGU7CiAgICAgICAgLXdlYmtpdC1hbmltYXRpb24tZHVyYXRpb246IHZhcigtLXBhcGVyLXNwaW5uZXItZnVsbC1jeWNsZS1kdXJhdGlvbik7CiAgICAgICAgLXdlYmtpdC1hbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC40LCAwLjAsIDAuMiwgMSk7CiAgICAgICAgLXdlYmtpdC1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiBpbmZpbml0ZTsKICAgICAgICBhbmltYXRpb24tbmFtZTogZmlsbC11bmZpbGwtcm90YXRlOwogICAgICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tcGFwZXItc3Bpbm5lci1mdWxsLWN5Y2xlLWR1cmF0aW9uKTsKICAgICAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC40LCAwLjAsIDAuMiwgMSk7CiAgICAgICAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogaW5maW5pdGU7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgfQoKICAgICAgLmFjdGl2ZSAuc3Bpbm5lci1sYXllci5sYXllci0xIHsKICAgICAgICAtd2Via2l0LWFuaW1hdGlvbi1uYW1lOiBmaWxsLXVuZmlsbC1yb3RhdGUsIGxheWVyLTEtZmFkZS1pbi1vdXQ7CiAgICAgICAgYW5pbWF0aW9uLW5hbWU6IGZpbGwtdW5maWxsLXJvdGF0ZSwgbGF5ZXItMS1mYWRlLWluLW91dDsKICAgICAgfQoKICAgICAgLmFjdGl2ZSAuc3Bpbm5lci1sYXllci5sYXllci0yIHsKICAgICAgICAtd2Via2l0LWFuaW1hdGlvbi1uYW1lOiBmaWxsLXVuZmlsbC1yb3RhdGUsIGxheWVyLTItZmFkZS1pbi1vdXQ7CiAgICAgICAgYW5pbWF0aW9uLW5hbWU6IGZpbGwtdW5maWxsLXJvdGF0ZSwgbGF5ZXItMi1mYWRlLWluLW91dDsKICAgICAgfQoKICAgICAgLmFjdGl2ZSAuc3Bpbm5lci1sYXllci5sYXllci0zIHsKICAgICAgICAtd2Via2l0LWFuaW1hdGlvbi1uYW1lOiBmaWxsLXVuZmlsbC1yb3RhdGUsIGxheWVyLTMtZmFkZS1pbi1vdXQ7CiAgICAgICAgYW5pbWF0aW9uLW5hbWU6IGZpbGwtdW5maWxsLXJvdGF0ZSwgbGF5ZXItMy1mYWRlLWluLW91dDsKICAgICAgfQoKICAgICAgLmFjdGl2ZSAuc3Bpbm5lci1sYXllci5sYXllci00IHsKICAgICAgICAtd2Via2l0LWFuaW1hdGlvbi1uYW1lOiBmaWxsLXVuZmlsbC1yb3RhdGUsIGxheWVyLTQtZmFkZS1pbi1vdXQ7CiAgICAgICAgYW5pbWF0aW9uLW5hbWU6IGZpbGwtdW5maWxsLXJvdGF0ZSwgbGF5ZXItNC1mYWRlLWluLW91dDsKICAgICAgfQoKICAgICAgQC13ZWJraXQta2V5ZnJhbWVzIGZpbGwtdW5maWxsLXJvdGF0ZSB7CiAgICAgICAgMTIuNSUgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDEzNWRlZykgfSAvKiAwLjUgKiBBUkNTSVpFICovCiAgICAgICAgMjUlICAgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDI3MGRlZykgfSAvKiAxICAgKiBBUkNTSVpFICovCiAgICAgICAgMzcuNSUgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDQwNWRlZykgfSAvKiAxLjUgKiBBUkNTSVpFICovCiAgICAgICAgNTAlICAgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDU0MGRlZykgfSAvKiAyICAgKiBBUkNTSVpFICovCiAgICAgICAgNjIuNSUgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDY3NWRlZykgfSAvKiAyLjUgKiBBUkNTSVpFICovCiAgICAgICAgNzUlICAgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDgxMGRlZykgfSAvKiAzICAgKiBBUkNTSVpFICovCiAgICAgICAgODcuNSUgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDk0NWRlZykgfSAvKiAzLjUgKiBBUkNTSVpFICovCiAgICAgICAgdG8gICAgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDEwODBkZWcpIH0gLyogNCAgICogQVJDU0laRSAqLwogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIGZpbGwtdW5maWxsLXJvdGF0ZSB7CiAgICAgICAgMTIuNSUgeyB0cmFuc2Zvcm06IHJvdGF0ZSgxMzVkZWcpIH0gLyogMC41ICogQVJDU0laRSAqLwogICAgICAgIDI1JSAgIHsgdHJhbnNmb3JtOiByb3RhdGUoMjcwZGVnKSB9IC8qIDEgICAqIEFSQ1NJWkUgKi8KICAgICAgICAzNy41JSB7IHRyYW5zZm9ybTogcm90YXRlKDQwNWRlZykgfSAvKiAxLjUgKiBBUkNTSVpFICovCiAgICAgICAgNTAlICAgeyB0cmFuc2Zvcm06IHJvdGF0ZSg1NDBkZWcpIH0gLyogMiAgICogQVJDU0laRSAqLwogICAgICAgIDYyLjUlIHsgdHJhbnNmb3JtOiByb3RhdGUoNjc1ZGVnKSB9IC8qIDIuNSAqIEFSQ1NJWkUgKi8KICAgICAgICA3NSUgICB7IHRyYW5zZm9ybTogcm90YXRlKDgxMGRlZykgfSAvKiAzICAgKiBBUkNTSVpFICovCiAgICAgICAgODcuNSUgeyB0cmFuc2Zvcm06IHJvdGF0ZSg5NDVkZWcpIH0gLyogMy41ICogQVJDU0laRSAqLwogICAgICAgIHRvICAgIHsgdHJhbnNmb3JtOiByb3RhdGUoMTA4MGRlZykgfSAvKiA0ICAgKiBBUkNTSVpFICovCiAgICAgIH0KCiAgICAgIEAtd2Via2l0LWtleWZyYW1lcyBsYXllci0xLWZhZGUtaW4tb3V0IHsKICAgICAgICAwJSB7IG9wYWNpdHk6IDEgfQogICAgICAgIDI1JSB7IG9wYWNpdHk6IDEgfQogICAgICAgIDI2JSB7IG9wYWNpdHk6IDAgfQogICAgICAgIDg5JSB7IG9wYWNpdHk6IDAgfQogICAgICAgIDkwJSB7IG9wYWNpdHk6IDEgfQogICAgICAgIHRvIHsgb3BhY2l0eTogMSB9CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMgbGF5ZXItMS1mYWRlLWluLW91dCB7CiAgICAgICAgMCUgeyBvcGFjaXR5OiAxIH0KICAgICAgICAyNSUgeyBvcGFjaXR5OiAxIH0KICAgICAgICAyNiUgeyBvcGFjaXR5OiAwIH0KICAgICAgICA4OSUgeyBvcGFjaXR5OiAwIH0KICAgICAgICA5MCUgeyBvcGFjaXR5OiAxIH0KICAgICAgICB0byB7IG9wYWNpdHk6IDEgfQogICAgICB9CgogICAgICBALXdlYmtpdC1rZXlmcmFtZXMgbGF5ZXItMi1mYWRlLWluLW91dCB7CiAgICAgICAgMCUgeyBvcGFjaXR5OiAwIH0KICAgICAgICAxNSUgeyBvcGFjaXR5OiAwIH0KICAgICAgICAyNSUgeyBvcGFjaXR5OiAxIH0KICAgICAgICA1MCUgeyBvcGFjaXR5OiAxIH0KICAgICAgICA1MSUgeyBvcGFjaXR5OiAwIH0KICAgICAgICB0byB7IG9wYWNpdHk6IDAgfQogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIGxheWVyLTItZmFkZS1pbi1vdXQgewogICAgICAgIDAlIHsgb3BhY2l0eTogMCB9CiAgICAgICAgMTUlIHsgb3BhY2l0eTogMCB9CiAgICAgICAgMjUlIHsgb3BhY2l0eTogMSB9CiAgICAgICAgNTAlIHsgb3BhY2l0eTogMSB9CiAgICAgICAgNTElIHsgb3BhY2l0eTogMCB9CiAgICAgICAgdG8geyBvcGFjaXR5OiAwIH0KICAgICAgfQoKICAgICAgQC13ZWJraXQta2V5ZnJhbWVzIGxheWVyLTMtZmFkZS1pbi1vdXQgewogICAgICAgIDAlIHsgb3BhY2l0eTogMCB9CiAgICAgICAgNDAlIHsgb3BhY2l0eTogMCB9CiAgICAgICAgNTAlIHsgb3BhY2l0eTogMSB9CiAgICAgICAgNzUlIHsgb3BhY2l0eTogMSB9CiAgICAgICAgNzYlIHsgb3BhY2l0eTogMCB9CiAgICAgICAgdG8geyBvcGFjaXR5OiAwIH0KICAgICAgfQoKICAgICAgQGtleWZyYW1lcyBsYXllci0zLWZhZGUtaW4tb3V0IHsKICAgICAgICAwJSB7IG9wYWNpdHk6IDAgfQogICAgICAgIDQwJSB7IG9wYWNpdHk6IDAgfQogICAgICAgIDUwJSB7IG9wYWNpdHk6IDEgfQogICAgICAgIDc1JSB7IG9wYWNpdHk6IDEgfQogICAgICAgIDc2JSB7IG9wYWNpdHk6IDAgfQogICAgICAgIHRvIHsgb3BhY2l0eTogMCB9CiAgICAgIH0KCiAgICAgIEAtd2Via2l0LWtleWZyYW1lcyBsYXllci00LWZhZGUtaW4tb3V0IHsKICAgICAgICAwJSB7IG9wYWNpdHk6IDAgfQogICAgICAgIDY1JSB7IG9wYWNpdHk6IDAgfQogICAgICAgIDc1JSB7IG9wYWNpdHk6IDEgfQogICAgICAgIDkwJSB7IG9wYWNpdHk6IDEgfQogICAgICAgIHRvIHsgb3BhY2l0eTogMCB9CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMgbGF5ZXItNC1mYWRlLWluLW91dCB7CiAgICAgICAgMCUgeyBvcGFjaXR5OiAwIH0KICAgICAgICA2NSUgeyBvcGFjaXR5OiAwIH0KICAgICAgICA3NSUgeyBvcGFjaXR5OiAxIH0KICAgICAgICA5MCUgeyBvcGFjaXR5OiAxIH0KICAgICAgICB0byB7IG9wYWNpdHk6IDAgfQogICAgICB9CgogICAgICAuY2lyY2xlLWNsaXBwZXIgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDUwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIFBhdGNoIHRoZSBnYXAgdGhhdCBhcHBlYXIgYmV0d2VlbiB0aGUgdHdvIGFkamFjZW50IGRpdi5jaXJjbGUtY2xpcHBlciB3aGlsZSB0aGUKICAgICAgICogc3Bpbm5lciBpcyByb3RhdGluZyAoYXBwZWFycyBvbiBDaHJvbWUgNTAsIFNhZmFyaSA5LjEuMSwgYW5kIEVkZ2UpLgogICAgICAgKi8KICAgICAgLnNwaW5uZXItbGF5ZXI6OmFmdGVyIHsKICAgICAgICBsZWZ0OiA0NSU7CiAgICAgICAgd2lkdGg6IDEwJTsKICAgICAgICBib3JkZXItdG9wLXN0eWxlOiBzb2xpZDsKICAgICAgfQoKICAgICAgLnNwaW5uZXItbGF5ZXI6OmFmdGVyLAogICAgICAuY2lyY2xlLWNsaXBwZXI6OmFmdGVyIHsKICAgICAgICBjb250ZW50OiAnJzsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgYm9yZGVyLXdpZHRoOiB2YXIoLS1wYXBlci1zcGlubmVyLXN0cm9rZS13aWR0aCwgM3B4KTsKICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICAgIH0KCiAgICAgIC5jaXJjbGUtY2xpcHBlcjo6YWZ0ZXIgewogICAgICAgIGJvdHRvbTogMDsKICAgICAgICB3aWR0aDogMjAwJTsKICAgICAgICBib3JkZXItc3R5bGU6IHNvbGlkOwogICAgICAgIGJvcmRlci1ib3R0b20tY29sb3I6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7CiAgICAgIH0KCiAgICAgIC5jaXJjbGUtY2xpcHBlci5sZWZ0OjphZnRlciB7CiAgICAgICAgbGVmdDogMDsKICAgICAgICBib3JkZXItcmlnaHQtY29sb3I6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7CiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgxMjlkZWcpOwogICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDEyOWRlZyk7CiAgICAgIH0KCiAgICAgIC5jaXJjbGUtY2xpcHBlci5yaWdodDo6YWZ0ZXIgewogICAgICAgIGxlZnQ6IC0xMDAlOwogICAgICAgIGJvcmRlci1sZWZ0LWNvbG9yOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50OwogICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoLTEyOWRlZyk7CiAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoLTEyOWRlZyk7CiAgICAgIH0KCiAgICAgIC5hY3RpdmUgLmdhcC1wYXRjaDo6YWZ0ZXIsCiAgICAgIC5hY3RpdmUgLmNpcmNsZS1jbGlwcGVyOjphZnRlciB7CiAgICAgICAgLXdlYmtpdC1hbmltYXRpb24tZHVyYXRpb246IHZhcigtLXBhcGVyLXNwaW5uZXItZXhwYW5kLWNvbnRyYWN0LWR1cmF0aW9uKTsKICAgICAgICAtd2Via2l0LWFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjQsIDAuMCwgMC4yLCAxKTsKICAgICAgICAtd2Via2l0LWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IGluZmluaXRlOwogICAgICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tcGFwZXItc3Bpbm5lci1leHBhbmQtY29udHJhY3QtZHVyYXRpb24pOwogICAgICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjQsIDAuMCwgMC4yLCAxKTsKICAgICAgICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiBpbmZpbml0ZTsKICAgICAgfQoKICAgICAgLmFjdGl2ZSAuY2lyY2xlLWNsaXBwZXIubGVmdDo6YWZ0ZXIgewogICAgICAgIC13ZWJraXQtYW5pbWF0aW9uLW5hbWU6IGxlZnQtc3BpbjsKICAgICAgICBhbmltYXRpb24tbmFtZTogbGVmdC1zcGluOwogICAgICB9CgogICAgICAuYWN0aXZlIC5jaXJjbGUtY2xpcHBlci5yaWdodDo6YWZ0ZXIgewogICAgICAgIC13ZWJraXQtYW5pbWF0aW9uLW5hbWU6IHJpZ2h0LXNwaW47CiAgICAgICAgYW5pbWF0aW9uLW5hbWU6IHJpZ2h0LXNwaW47CiAgICAgIH0KCiAgICAgIEAtd2Via2l0LWtleWZyYW1lcyBsZWZ0LXNwaW4gewogICAgICAgIDAlIHsgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgxMzBkZWcpIH0KICAgICAgICA1MCUgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKC01ZGVnKSB9CiAgICAgICAgdG8geyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDEzMGRlZykgfQogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIGxlZnQtc3BpbiB7CiAgICAgICAgMCUgeyB0cmFuc2Zvcm06IHJvdGF0ZSgxMzBkZWcpIH0KICAgICAgICA1MCUgeyB0cmFuc2Zvcm06IHJvdGF0ZSgtNWRlZykgfQogICAgICAgIHRvIHsgdHJhbnNmb3JtOiByb3RhdGUoMTMwZGVnKSB9CiAgICAgIH0KCiAgICAgIEAtd2Via2l0LWtleWZyYW1lcyByaWdodC1zcGluIHsKICAgICAgICAwJSB7IC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoLTEzMGRlZykgfQogICAgICAgIDUwJSB7IC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoNWRlZykgfQogICAgICAgIHRvIHsgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgtMTMwZGVnKSB9CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMgcmlnaHQtc3BpbiB7CiAgICAgICAgMCUgeyB0cmFuc2Zvcm06IHJvdGF0ZSgtMTMwZGVnKSB9CiAgICAgICAgNTAlIHsgdHJhbnNmb3JtOiByb3RhdGUoNWRlZykgfQogICAgICAgIHRvIHsgdHJhbnNmb3JtOiByb3RhdGUoLTEzMGRlZykgfQogICAgICB9CgogICAgICAjc3Bpbm5lckNvbnRhaW5lci5jb29sZG93biB7CiAgICAgICAgLXdlYmtpdC1hbmltYXRpb246IGNvbnRhaW5lci1yb3RhdGUgdmFyKC0tcGFwZXItc3Bpbm5lci1jb250YWluZXItcm90YXRpb24tZHVyYXRpb24pIGxpbmVhciBpbmZpbml0ZSwgZmFkZS1vdXQgdmFyKC0tcGFwZXItc3Bpbm5lci1jb29sZG93bi1kdXJhdGlvbikgY3ViaWMtYmV6aWVyKDAuNCwgMC4wLCAwLjIsIDEpOwogICAgICAgIGFuaW1hdGlvbjogY29udGFpbmVyLXJvdGF0ZSB2YXIoLS1wYXBlci1zcGlubmVyLWNvbnRhaW5lci1yb3RhdGlvbi1kdXJhdGlvbikgbGluZWFyIGluZmluaXRlLCBmYWRlLW91dCB2YXIoLS1wYXBlci1zcGlubmVyLWNvb2xkb3duLWR1cmF0aW9uKSBjdWJpYy1iZXppZXIoMC40LCAwLjAsIDAuMiwgMSk7CiAgICAgIH0KCiAgICAgIEAtd2Via2l0LWtleWZyYW1lcyBmYWRlLW91dCB7CiAgICAgICAgMCUgeyBvcGFjaXR5OiAxIH0KICAgICAgICB0byB7IG9wYWNpdHk6IDAgfQogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIGZhZGUtb3V0IHsKICAgICAgICAwJSB7IG9wYWNpdHk6IDEgfQogICAgICAgIHRvIHsgb3BhY2l0eTogMCB9CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPgoKCgoKPGRvbS1tb2R1bGUgaWQ9InBhcGVyLXNwaW5uZXItbGl0ZSI+CiAgPHRlbXBsYXRlIHN0cmlwLXdoaXRlc3BhY2U+CiAgICA8c3R5bGUgaW5jbHVkZT0icGFwZXItc3Bpbm5lci1zdHlsZXMiPjwvc3R5bGU+CgogICAgPGRpdiBpZD0ic3Bpbm5lckNvbnRhaW5lciIgY2xhc3MtbmFtZT0iW1tfX2NvbXB1dGVDb250YWluZXJDbGFzc2VzKGFjdGl2ZSwgX19jb29saW5nRG93bildXSIgb24tYW5pbWF0aW9uZW5kPSJfX3Jlc2V0IiBvbi13ZWJraXQtYW5pbWF0aW9uLWVuZD0iX19yZXNldCI+CiAgICAgIDxkaXYgY2xhc3M9InNwaW5uZXItbGF5ZXIiPgogICAgICAgIDxkaXYgY2xhc3M9ImNpcmNsZS1jbGlwcGVyIGxlZnQiPjwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImNpcmNsZS1jbGlwcGVyIHJpZ2h0Ij48L2Rpdj4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICA8L3RlbXBsYXRlPgoKICA8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vcGFwZXItc3Bpbm5lci9wYXBlci1zcGlubmVyLWxpdGUuaHRtbC5qcwpQb2x5bWVyKHtpczoicGFwZXItc3Bpbm5lci1saXRlIixiZWhhdmlvcnM6W1BvbHltZXIuUGFwZXJTcGlubmVyQmVoYXZpb3JdfSk7Cjwvc2NyaXB0Pgo8L2RvbS1tb2R1bGU+CgoKCgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdGYtZGFzaGJvYXJkLWNvbW1vbi9kYXRhLWxvYWRlci1iZWhhdmlvci5qcwooZnVuY3Rpb24oYSl7YS5EYXRhTG9hZGVyQmVoYXZpb3I9e3Byb3BlcnRpZXM6e2FjdGl2ZTp7dHlwZTpCb29sZWFuLG9ic2VydmVyOiJfbG9hZERhdGFJZkFjdGl2ZSJ9LGxvYWRLZXk6e3R5cGU6U3RyaW5nLHZhbHVlOiIifSxkYXRhVG9Mb2FkOnt0eXBlOkFycmF5LHZhbHVlOigpPT5bXX0sZ2V0RGF0YUxvYWROYW1lOnt0eXBlOkZ1bmN0aW9uLHZhbHVlOigpPT5jPT5TdHJpbmcoYyl9LGxvYWREYXRhQ2FsbGJhY2s6RnVuY3Rpb24scmVxdWVzdERhdGE6e3R5cGU6RnVuY3Rpb24sdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gYz0+dGhpcy5yZXF1ZXN0TWFuYWdlci5yZXF1ZXN0KHRoaXMuZ2V0RGF0YUxvYWRVcmwoYykpfX0sZ2V0RGF0YUxvYWRVcmw6RnVuY3Rpb24sZGF0YUxvYWRpbmc6e3R5cGU6Qm9vbGVhbixyZWFkT25seTohMCxyZWZsZWN0VG9BdHRyaWJ1dGU6ITAsdmFsdWU6ITF9LF9sb2FkZWREYXRhOnt0eXBlOk9iamVjdCx2YWx1ZTooKT0+bmV3IFNldH0sX2NhbmNlbGxlcjp7dHlwZTpPYmplY3QsCnZhbHVlOigpPT5uZXcgUGsuQ2FuY2VsbGVyfX0sb2JzZXJ2ZXJzOlsiX2RhdGFUb0xvYWRDaGFuZ2VkKGlzQXR0YWNoZWQsIGRhdGFUb0xvYWQuKikiXSxvbkxvYWRGaW5pc2goKXt9LHJlbG9hZCgpe3RoaXMuX2xvYWRlZERhdGEuY2xlYXIoKTt0aGlzLl9sb2FkRGF0YSgpfSxyZXNldCgpe3RoaXMuX2NhbmNlbGxlciYmdGhpcy5fY2FuY2VsbGVyLmNhbmNlbEFsbCgpO3RoaXMuX2xvYWRlZERhdGEmJnRoaXMuX2xvYWRlZERhdGEuY2xlYXIoKTt0aGlzLmlzQXR0YWNoZWQmJnRoaXMuX2xvYWREYXRhKCl9LF9kYXRhVG9Mb2FkQ2hhbmdlZCgpe3RoaXMuaXNBdHRhY2hlZCYmdGhpcy5fbG9hZERhdGEoKX0sY3JlYXRlZCgpe3RoaXMuX2xvYWREYXRhPV8uZGVib3VuY2UodGhpcy5fbG9hZERhdGFJbXBsLDEwMCx7bGVhZGluZzohMCx0cmFpbGluZzohMH0pfSxkZXRhY2hlZCgpe3RoaXMuX2NhbmNlbGxlci5jYW5jZWxBbGwoKTt0aGlzLmNhbmNlbEFzeW5jKHRoaXMuX2xvYWREYXRhQXN5bmMpfSwKX2xvYWREYXRhSWZBY3RpdmUoKXt0aGlzLmFjdGl2ZSYmdGhpcy5fbG9hZERhdGEoKX0sX2xvYWREYXRhSW1wbCgpe3RoaXMuYWN0aXZlJiYodGhpcy5jYW5jZWxBc3luYyh0aGlzLl9sb2FkRGF0YUFzeW5jKSx0aGlzLl9sb2FkRGF0YUFzeW5jPXRoaXMuYXN5bmMoKCk9Pnt0aGlzLl9zZXREYXRhTG9hZGluZyghMCk7dGhpcy5fY2FuY2VsbGVyLmNhbmNlbEFsbCgpO2NvbnN0IGM9dGhpcy5kYXRhVG9Mb2FkLmZpbHRlcihkPT57ZD10aGlzLmdldERhdGFMb2FkTmFtZShkKTtyZXR1cm4hdGhpcy5fbG9hZGVkRGF0YS5oYXMoZCl9KS5tYXAoZD0+e2NvbnN0IGY9dGhpcy5nZXREYXRhTG9hZE5hbWUoZCksZz10aGlzLl9jYW5jZWxsZXIuY2FuY2VsbGFibGUobD0+e2wuY2FuY2VsbGVkfHwodGhpcy5fbG9hZGVkRGF0YS5hZGQoZiksdGhpcy5sb2FkRGF0YUNhbGxiYWNrKHRoaXMsZCxsLnZhbHVlKSl9KTtyZXR1cm4gdGhpcy5yZXF1ZXN0RGF0YShkKS50aGVuKGcpfSk7cmV0dXJuIFByb21pc2UuYWxsKGMpLnRoZW4odGhpcy5fY2FuY2VsbGVyLmNhbmNlbGxhYmxlKGQ9Pgp7dGhpcy5fc2V0RGF0YUxvYWRpbmcoITEpO2lmKCFkLmNhbmNlbGxlZCl0aGlzLm9uTG9hZEZpbmlzaCgpfSkpfSkpfX19KShXbHx8KFdsPXt9KSk7Cjwvc2NyaXB0PgoKCgoKCjxzY3JpcHQ+Ly9+fldFQlBBVEh+fi90Zi1pbXBvcnRzL3Bsb3R0YWJsZS5qcwovKgogTUlUCiBNSVQKIEBmaWxlb3ZlcnZpZXcgSW1wbGVtZW50cyB0aGUgU2lnbmF0dXJlIEFQSSB0byBoZWxwIGluIGNvbXBhcmluZyB3aGVuIHR3bwogUGxvdHRhYmxlIG9iamVjdHMgaGF2ZSAiY2hhbmdlZCIuCgogTWVtb2l6YXRpb24gaW4gUGxvdHRhYmxlIGlzIGNvbXBsaWNhdGVkIGJ5IG11dGFibGUgc2NhbGVzIGFuZCBkYXRhc2V0cy4gV2UgY2Fubm90IHNpbXBseQogcmVmZXJlbmNlIGNvbXBhcmUgdHdvIGUuZy4gc2NhbGVzIHNpbmNlIGl0IG1heSBoYXZlIGludGVybmFsbHkgbXV0YXRlZC4gVG8gcmVzb2x2ZSB0aGlzLAogd2Ugd3JpdGUgYSByZWN1cnNpdmUgU2lnbmF0dXJlIGludGVyZmFjZSB0aGF0IGhvbGRzIGFuIGltbXV0YWJsZSBzbmFwc2hvdCBvZiB3aGF0ZXZlcgogc3RhdGUgdGhlIHNjYWxlL2RhdGEgd2FzIGluIGF0IHRoZSB0aW1lLiBUaGVuIG9uIG1lbW9pemVkIGZ1bmN0aW9uIGludm9jYXRpb24gd2Ugc2lnbiB0aGUKIG5ldyBpbnB1dHMgYW5kIGNvbXBhcmUgdGhlIHNpZ25hdHVyZXMgdG8gZGVjaWRlIGlmIHdlIHNob3VsZCByZWNvbXB1dGUuCgogV2UgbXVzdCBoYW5kLXdyaXRlIGEgc2lnbmF0dXJlIGZvciBlYWNoIGN1c3RvbSBjbGFzcyB3ZSB3aXNoIHRvIHN1cHBvcnQuCiBNSVQKCiBAZmlsZW92ZXJ2aWV3IG1hbnVhbGx5IGFkZCBkMy1zZWxlY3Rpb24tbXVsdGkgdG8gZDMgZGVmYXVsdCBidW5kbGUuIE1vc3Qgb2YgdGhpcyBjb2RlIGlzCiBjb3BpZWQgZnJvbSBkMy1zZWxlY3Rpb24tbXVsdGlAMS4wLjAuCiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2QzL2QzLXNlbGVjdGlvbi1tdWx0aS9pc3N1ZXMvMTEgZm9yIHdoeSB3ZSBoYXZlIHRvIGRvIHRoaXMKIE1JVAogQGZpbGVvdmVydmlldyBJbXBsZW1lbnRzIGEgY29udmVuaWVudCB0aHVuayBmdW5jdGlvbiB0byBoYW5kbGUgdGhlIGNvbW1vbiBjYXNlCiBvZiBjcmVhdGluZyBhIG1lbW9pemVkIGZ1bmN0aW9uIHRoYXQgdGFrZXMgaXRzIGlucHV0cyBmcm9tIG11dGFibGUgY2xhc3MgcHJvcGVydGllcy4KIE1JVAogQGZpbGVvdmVydmlldyBJbXBsZW1lbnRzIGEgZnVuY3Rpb24gbWVtb2l6ZXIgdXNpbmcgdGhlIFNpZ25hdHVyZSBBUEkuCiBQbG90dGFibGUgMy43LjAgKGh0dHBzOi8vZ2l0aHViLmNvbS9wYWxhbnRpci9wbG90dGFibGUpCiBDb3B5cmlnaHQgMjAxNC0yMDE3IFBhbGFudGlyIFRlY2hub2xvZ2llcwogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vcGFsYW50aXIvcGxvdHRhYmxlL2Jsb2IvbWFzdGVyL0xJQ0VOU0UpCiBpcy1wbGFpbi1vYmplY3QgPGh0dHBzOi8vZ2l0aHViLmNvbS9qb25zY2hsaW5rZXJ0L2lzLXBsYWluLW9iamVjdD4KCiBDb3B5cmlnaHQgKGMpIDIwMTQtMjAxNywgSm9uIFNjaGxpbmtlcnQuCiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuCiBpc29iamVjdCA8aHR0cHM6Ly9naXRodWIuY29tL2pvbnNjaGxpbmtlcnQvaXNvYmplY3Q+CgogQ29weXJpZ2h0IChjKSAyMDE0LTIwMTcsIEpvbiBTY2hsaW5rZXJ0LgogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLgoqLwooZnVuY3Rpb24oYSxjKXsib2JqZWN0Ij09PXR5cGVvZiBleHBvcnRzJiYib2JqZWN0Ij09PXR5cGVvZiBtb2R1bGU/bW9kdWxlLmV4cG9ydHM9YyhyZXF1aXJlKCJkMyIpKToiZnVuY3Rpb24iPT09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoWyJkMyJdLGMpOiJvYmplY3QiPT09dHlwZW9mIGV4cG9ydHM/ZXhwb3J0cy5QbG90dGFibGU9YyhyZXF1aXJlKCJkMyIpKTphLlBsb3R0YWJsZT1jKGEuZDMpfSkodGhpcyxmdW5jdGlvbihhKXtyZXR1cm4gZnVuY3Rpb24oYyl7ZnVuY3Rpb24gZChnKXtpZihmW2ddKXJldHVybiBmW2ddLmV4cG9ydHM7dmFyIGw9ZltnXT17aTpnLGw6ITEsZXhwb3J0czp7fX07Y1tnXS5jYWxsKGwuZXhwb3J0cyxsLGwuZXhwb3J0cyxkKTtsLmw9ITA7cmV0dXJuIGwuZXhwb3J0c312YXIgZj17fTtkLm09YztkLmM9ZjtkLmk9ZnVuY3Rpb24oZyl7cmV0dXJuIGd9O2QuZD1mdW5jdGlvbihnLGwsayl7ZC5vKGcsbCl8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShnLApsLHtjb25maWd1cmFibGU6ITEsZW51bWVyYWJsZTohMCxnZXQ6a30pfTtkLm49ZnVuY3Rpb24oZyl7dmFyIGw9ZyYmZy5fX2VzTW9kdWxlP2Z1bmN0aW9uKCl7cmV0dXJuIGdbImRlZmF1bHQiXX06ZnVuY3Rpb24oKXtyZXR1cm4gZ307ZC5kKGwsImEiLGwpO3JldHVybiBsfTtkLm89ZnVuY3Rpb24oZyxsKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGcsbCl9O2QucD0iIjtyZXR1cm4gZChkLnM9MTQwKX0oW2Z1bmN0aW9uKGMsZCxmKXtmdW5jdGlvbiBnKGwpe2Zvcih2YXIgayBpbiBsKWQuaGFzT3duUHJvcGVydHkoayl8fChkW2tdPWxba10pfWM9ZigxMDcpO2QuQXJyYXk9YztjPWYoMTEwKTtkLkNvbG9yPWM7Yz1mKDU1KTtkLkRPTT1jO2M9Zig1Nik7ZC5NYXRoPWM7Yz1mKDExMyk7ZC5PYmplY3Q9YztjPWYoNTcpO2QuUlRyZWU9YztjPWYoMTE1KTtkLlN0YWNraW5nPWM7Yz1mKDM1KTtkLldpbmRvdz1jO2coZigxMDgpKTtnKGYoMTA5KSk7ZyhmKDEyKSk7CmcoZigxMTEpKTtnKGYoMTEyKSk7ZyhmKDU4KSk7ZyhmKDExNikpfSxmdW5jdGlvbihjKXtjLmV4cG9ydHM9YX0sZnVuY3Rpb24oYyxkLGYpe2Z1bmN0aW9uIGcoRixELEIpe3ZhciBHPUQuYWNjZXNzb3I7RD1ELnNjYWxlO2lmKG51bGw9PUQpcmV0dXJuW107dmFyIEs9Ri5kYXRhKCk7bnVsbCE9QiYmKEs9Sy5maWx0ZXIoZnVuY3Rpb24oTCxKKXtyZXR1cm4gQihMLEosRil9KSk7Sz1LLm1hcChmdW5jdGlvbihMLEope3JldHVybiBHKEwsSixGKX0pO3JldHVybiBELmV4dGVudE9mVmFsdWVzKEspfXZhciBsPXRoaXMmJnRoaXMuX19leHRlbmRzfHxmdW5jdGlvbihGLEQpe2Z1bmN0aW9uIEIoKXt0aGlzLmNvbnN0cnVjdG9yPUZ9Zm9yKHZhciBHIGluIEQpRC5oYXNPd25Qcm9wZXJ0eShHKSYmKEZbR109RFtHXSk7Ri5wcm90b3R5cGU9bnVsbD09PUQ/T2JqZWN0LmNyZWF0ZShEKTooQi5wcm90b3R5cGU9RC5wcm90b3R5cGUsbmV3IEIpfSxrPWYoMSksbT1mKDcpO2M9Zig0KTt2YXIgcD0KZigxOCkscT1mKDYpLHI9Zig5KSx0PWYoMjApLHY9ZigwKSxBPWYoMTIpLHk9ZigxMCkseD1mKDUxKSxDPWYoNTIpO2QuUmVuZGVyZXI9eS5tYWtlRW51bShbInN2ZyIsImNhbnZhcyJdKTtmPWZ1bmN0aW9uKEYpe2Z1bmN0aW9uIEQoKXt2YXIgQj1GLmNhbGwodGhpcyl8fHRoaXM7Qi5fZGF0YUNoYW5nZWQ9ITE7Qi5fYXR0ckV4dGVudHM9e307Qi5fYW5pbWF0ZT0hMTtCLl9hbmltYXRvcnM9e307Qi5fcHJvcGVydHlFeHRlbnRzPXt9O0IuX3Jlc2V0RW50aXR5U3RvcmU9ZnVuY3Rpb24oKXtCLl9jYWNoZWRFbnRpdHlTdG9yZT12b2lkIDB9O0IuX292ZXJmbG93SGlkZGVuPSEwO0IuYWRkQ2xhc3MoInBsb3QiKTtCLl9kYXRhc2V0VG9EcmF3ZXI9bmV3IHYuTWFwO0IuX2F0dHJCaW5kaW5ncz1rLm1hcCgpO0IuX2luY2x1ZGVkVmFsdWVzUHJvdmlkZXI9ZnVuY3Rpb24oSyxMKXtyZXR1cm4gQi5faW5jbHVkZWRWYWx1ZXNGb3JTY2FsZShLLEwpfTtCLl9yZW5kZXJDYWxsYmFjaz1mdW5jdGlvbigpe3JldHVybiBCLnJlbmRlcigpfTsKQi5fb25EYXRhc2V0VXBkYXRlQ2FsbGJhY2s9ZnVuY3Rpb24oKXtyZXR1cm4gQi5fb25EYXRhc2V0VXBkYXRlKCl9O0IuX3Byb3BlcnR5QmluZGluZ3M9ay5tYXAoKTt2YXIgRz0obmV3IG0uRWFzaW5nKS5tYXhUb3RhbER1cmF0aW9uKEQuX0FOSU1BVElPTl9NQVhfRFVSQVRJT04pO0IuYW5pbWF0b3IoeC5BbmltYXRvci5NQUlOLEcpO0IuYW5pbWF0b3IoeC5BbmltYXRvci5SRVNFVCxuZXcgbS5OdWxsKTtCLl9kZWZlcnJlZFJlc2V0RW50aXR5U3RvcmU9di5XaW5kb3cuZGVib3VuY2UoQy5EZWZlcnJlZFJlbmRlcmVyLkRFRkVSUkVEX1JFTkRFUklOR19ERUxBWSxCLl9yZXNldEVudGl0eVN0b3JlKTtyZXR1cm4gQn1sKEQsRik7RC5nZXRUb3RhbERyYXdUaW1lPWZ1bmN0aW9uKEIsRyl7cmV0dXJuIEcucmVkdWNlKGZ1bmN0aW9uKEssTCl7cmV0dXJuIEsrTC5hbmltYXRvci50b3RhbFRpbWUoQi5sZW5ndGgpfSwwKX07RC5hcHBseURyYXdTdGVwcz1mdW5jdGlvbihCLEcpe3JldHVybiBCLm1hcChmdW5jdGlvbihLKXt2YXIgTD0KSy5hdHRyVG9Qcm9qZWN0b3IsSj17fTtPYmplY3Qua2V5cyhMKS5mb3JFYWNoKGZ1bmN0aW9uKFApe0pbUF09ZnVuY3Rpb24oUyxOKXtyZXR1cm4gTFtQXShTLE4sRyl9fSk7cmV0dXJue2F0dHJUb0FwcGxpZWRQcm9qZWN0b3I6SixhbmltYXRvcjpLLmFuaW1hdG9yfX0pfTtELnByb3RvdHlwZS5hbmNob3I9ZnVuY3Rpb24oQil7Qj1BLmNvZXJjZUV4dGVybmFsRDMoQik7Ri5wcm90b3R5cGUuYW5jaG9yLmNhbGwodGhpcyxCKTt0aGlzLl9kYXRhQ2hhbmdlZD0hMDt0aGlzLl9yZXNldEVudGl0eVN0b3JlKCk7dGhpcy5fdXBkYXRlRXh0ZW50cygpO3JldHVybiB0aGlzfTtELnByb3RvdHlwZS5fc2V0dXA9ZnVuY3Rpb24oKXt2YXIgQj10aGlzO3RoaXMuX2lzU2V0dXB8fChGLnByb3RvdHlwZS5fc2V0dXAuY2FsbCh0aGlzKSxudWxsIT10aGlzLl9jYW52YXMmJnRoaXMuX2FwcGVuZENhbnZhc05vZGUoKSx0aGlzLl9yZW5kZXJBcmVhPXRoaXMuY29udGVudCgpLmFwcGVuZCgiZyIpLmNsYXNzZWQoInJlbmRlci1hcmVhIiwKITApLHRoaXMuZGF0YXNldHMoKS5mb3JFYWNoKGZ1bmN0aW9uKEcpe3JldHVybiBCLl9jcmVhdGVOb2Rlc0ZvckRhdGFzZXQoRyl9KSl9O0QucHJvdG90eXBlLl9hcHBlbmRDYW52YXNOb2RlPWZ1bmN0aW9uKCl7dmFyIEI9dGhpcy5lbGVtZW50KCkuc2VsZWN0KCIucGxvdC1jYW52YXMtY29udGFpbmVyIik7Qi5lbXB0eSgpJiYoQj10aGlzLmVsZW1lbnQoKS5hcHBlbmQoImRpdiIpLmNsYXNzZWQoInBsb3QtY2FudmFzLWNvbnRhaW5lciIsITApLEIubm9kZSgpLmFwcGVuZENoaWxkKHRoaXMuX2NhbnZhcy5ub2RlKCkpKX07RC5wcm90b3R5cGUuc2V0Qm91bmRzPWZ1bmN0aW9uKEIsRyxLLEwpe0YucHJvdG90eXBlLnNldEJvdW5kcy5jYWxsKHRoaXMsQixHLEssTCk7dGhpcy5fcmVzZXRFbnRpdHlTdG9yZSgpO251bGwhPXRoaXMuX2NhbnZhcyYmKHRoaXMuX2J1ZmZlckNhbnZhcyYmIXRoaXMuX2J1ZmZlckNhbnZhc1ZhbGlkJiYodGhpcy5fYnVmZmVyQ2FudmFzLmF0dHIoIndpZHRoIiwKdGhpcy5fY2FudmFzLmF0dHIoIndpZHRoIikpLHRoaXMuX2J1ZmZlckNhbnZhcy5hdHRyKCJoZWlnaHQiLHRoaXMuX2NhbnZhcy5hdHRyKCJoZWlnaHQiKSksKEs9dGhpcy5fYnVmZmVyQ2FudmFzLm5vZGUoKS5nZXRDb250ZXh0KCIyZCIpKSYmSy5kcmF3SW1hZ2UodGhpcy5fY2FudmFzLm5vZGUoKSwwLDApLHRoaXMuX2J1ZmZlckNhbnZhc1ZhbGlkPSEwKSxLPW51bGwhPXdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvP3dpbmRvdy5kZXZpY2VQaXhlbFJhdGlvOjEsdGhpcy5fY2FudmFzLmF0dHIoIndpZHRoIixCKkspLHRoaXMuX2NhbnZhcy5hdHRyKCJoZWlnaHQiLEcqSyksTD10aGlzLl9jYW52YXMubm9kZSgpLmdldENvbnRleHQoIjJkIikpJiYoTC5zZXRUcmFuc2Zvcm0oSywwLDAsSywwLDApLHRoaXMuX2J1ZmZlckNhbnZhcyYmTC5kcmF3SW1hZ2UodGhpcy5fYnVmZmVyQ2FudmFzLm5vZGUoKSwwLDAsQixHKSl9O0QucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt2YXIgQj10aGlzOwpGLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7dGhpcy5fc2NhbGVzKCkuZm9yRWFjaChmdW5jdGlvbihHKXtyZXR1cm4gRy5vZmZVcGRhdGUoQi5fcmVuZGVyQ2FsbGJhY2spfSk7dGhpcy5kYXRhc2V0cyhbXSl9O0QucHJvdG90eXBlLl9jcmVhdGVOb2Rlc0ZvckRhdGFzZXQ9ZnVuY3Rpb24oQil7Qj10aGlzLl9kYXRhc2V0VG9EcmF3ZXIuZ2V0KEIpOyJzdmciPT09dGhpcy5yZW5kZXJlcigpP0IudXNlU1ZHKHRoaXMuX3JlbmRlckFyZWEpOkIudXNlQ2FudmFzKHRoaXMuX2NhbnZhcyk7cmV0dXJuIEJ9O0QucHJvdG90eXBlLl9jcmVhdGVEcmF3ZXI9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHEuUHJveHlEcmF3ZXIoZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHIuU1ZHRHJhd2VyKCJwYXRoIiwiIil9LGZ1bmN0aW9uKEIpe3JldHVybiBuZXcgcC5DYW52YXNEcmF3ZXIoQixmdW5jdGlvbigpe30pfSl9O0QucHJvdG90eXBlLl9nZXRBbmltYXRvcj1mdW5jdGlvbihCKXtyZXR1cm4gdGhpcy5fYW5pbWF0ZU9uTmV4dFJlbmRlcigpPwp0aGlzLl9hbmltYXRvcnNbQl18fG5ldyBtLk51bGw6bmV3IG0uTnVsbH07RC5wcm90b3R5cGUuX29uRGF0YXNldFVwZGF0ZT1mdW5jdGlvbigpe3RoaXMuX3VwZGF0ZUV4dGVudHMoKTt0aGlzLl9kYXRhQ2hhbmdlZD0hMDt0aGlzLl9yZXNldEVudGl0eVN0b3JlKCk7dGhpcy5yZW5kZXJMb3dQcmlvcml0eSgpfTtELnByb3RvdHlwZS5hdHRyPWZ1bmN0aW9uKEIsRyxLKXtpZihudWxsPT1HKXJldHVybiB0aGlzLl9hdHRyQmluZGluZ3MuZ2V0KEIpO3RoaXMuX2JpbmRBdHRyKEIsRyxLKTt0aGlzLnJlbmRlcigpO3JldHVybiB0aGlzfTtELnByb3RvdHlwZS5fYmluZFByb3BlcnR5PWZ1bmN0aW9uKEIsRyxLLEwpe3ZhciBKPXRoaXMuX3Byb3BlcnR5QmluZGluZ3MuZ2V0KEIpO0o9bnVsbCE9Sj9KLnNjYWxlOm51bGw7dGhpcy5fcHJvcGVydHlCaW5kaW5ncy5zZXQoQix7YWNjZXNzb3I6ImZ1bmN0aW9uIj09PXR5cGVvZiBHP0c6ZnVuY3Rpb24oKXtyZXR1cm4gR30sc2NhbGU6Syxwb3N0U2NhbGU6TH0pOwpudWxsIT1KJiZ0aGlzLl91bmluc3RhbGxTY2FsZUZvcktleShKLEIpO251bGwhPUsmJnRoaXMuX2luc3RhbGxTY2FsZUZvcktleShLLEIpO3RoaXMuX2NsZWFyQXR0clRvUHJvamVjdG9yQ2FjaGUoKX07RC5wcm90b3R5cGUuX2JpbmRBdHRyPWZ1bmN0aW9uKEIsRyxLKXt2YXIgTD10aGlzLl9hdHRyQmluZGluZ3MuZ2V0KEIpO0w9bnVsbCE9TD9MLnNjYWxlOm51bGw7dGhpcy5fYXR0ckJpbmRpbmdzLnNldChCLHthY2Nlc3NvcjoiZnVuY3Rpb24iPT09dHlwZW9mIEc/RzpmdW5jdGlvbigpe3JldHVybiBHfSxzY2FsZTpLfSk7bnVsbCE9TCYmdGhpcy5fdW5pbnN0YWxsU2NhbGVGb3JLZXkoTCxCKTtudWxsIT1LJiZ0aGlzLl9pbnN0YWxsU2NhbGVGb3JLZXkoSyxCKTt0aGlzLl9jbGVhckF0dHJUb1Byb2plY3RvckNhY2hlKCl9O0QucHJvdG90eXBlLl9jbGVhckF0dHJUb1Byb2plY3RvckNhY2hlPWZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXMuX2NhY2hlZEF0dHJUb1Byb2plY3Rvcn07RC5wcm90b3R5cGUuX2dldEF0dHJUb1Byb2plY3Rvcj0KZnVuY3Rpb24oKXtudWxsPT10aGlzLl9jYWNoZWRBdHRyVG9Qcm9qZWN0b3ImJih0aGlzLl9jYWNoZWRBdHRyVG9Qcm9qZWN0b3I9dGhpcy5fZ2VuZXJhdGVBdHRyVG9Qcm9qZWN0b3IoKSk7cmV0dXJuIHYuT2JqZWN0LmFzc2lnbih7fSx0aGlzLl9jYWNoZWRBdHRyVG9Qcm9qZWN0b3IpfTtELnByb3RvdHlwZS5fZ2VuZXJhdGVBdHRyVG9Qcm9qZWN0b3I9ZnVuY3Rpb24oKXt2YXIgQj17fTt0aGlzLl9hdHRyQmluZGluZ3MuZWFjaChmdW5jdGlvbihLLEwpe0JbTF09RC5fc2NhbGVkQWNjZXNzb3IoSyl9KTt2YXIgRz10aGlzLl9wcm9wZXJ0eVByb2plY3RvcnMoKTtPYmplY3Qua2V5cyhHKS5mb3JFYWNoKGZ1bmN0aW9uKEspe251bGw9PUJbS10mJihCW0tdPUdbS10pfSk7cmV0dXJuIEJ9O0QucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5PWZ1bmN0aW9uKCl7Ri5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHkuY2FsbCh0aGlzKTt0aGlzLl9pc0FuY2hvcmVkJiYodGhpcy5fcGFpbnQoKSwKdGhpcy5fZGF0YUNoYW5nZWQ9ITEpO3JldHVybiB0aGlzfTtELnByb3RvdHlwZS5yZW5kZXJMb3dQcmlvcml0eT1mdW5jdGlvbigpe3RoaXMuX3JlbmRlckNhbGxiYWNrKCl9O0QucHJvdG90eXBlLmFuaW1hdGVkPWZ1bmN0aW9uKEIpe2lmKG51bGw9PUIpcmV0dXJuIHRoaXMuX2FuaW1hdGU7dGhpcy5fYW5pbWF0ZT1CO3JldHVybiB0aGlzfTtELnByb3RvdHlwZS5kZXRhY2g9ZnVuY3Rpb24oKXtGLnByb3RvdHlwZS5kZXRhY2guY2FsbCh0aGlzKTt0aGlzLl91cGRhdGVFeHRlbnRzKCk7cmV0dXJuIHRoaXN9O0QucHJvdG90eXBlLl9zY2FsZXM9ZnVuY3Rpb24oKXt2YXIgQj1bXTt0aGlzLl9hdHRyQmluZGluZ3MuZWFjaChmdW5jdGlvbihHKXtHPUcuc2NhbGU7bnVsbCE9RyYmLTE9PT1CLmluZGV4T2YoRykmJkIucHVzaChHKX0pO3RoaXMuX3Byb3BlcnR5QmluZGluZ3MuZWFjaChmdW5jdGlvbihHKXtHPUcuc2NhbGU7bnVsbCE9RyYmLTE9PT1CLmluZGV4T2YoRykmJkIucHVzaChHKX0pOwpyZXR1cm4gQn07RC5wcm90b3R5cGUuX3VwZGF0ZUV4dGVudHM9ZnVuY3Rpb24oKXt2YXIgQj10aGlzO3RoaXMuX3Jlc2V0RW50aXR5U3RvcmUoKTt0aGlzLl9zY2FsZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKEcpe3JldHVybiBHLmFkZEluY2x1ZGVkVmFsdWVzUHJvdmlkZXIoQi5faW5jbHVkZWRWYWx1ZXNQcm92aWRlcil9KX07RC5wcm90b3R5cGUuX2ZpbHRlckZvclByb3BlcnR5PWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9O0QucHJvdG90eXBlLmdldEV4dGVudHNGb3JBdHRyPWZ1bmN0aW9uKEIpe3ZhciBHPXRoaXM7bnVsbD09dGhpcy5fYXR0ckV4dGVudHNbQl0mJih0aGlzLl9hdHRyRXh0ZW50c1tCXT10Lm1lbVRodW5rKGZ1bmN0aW9uKCl7cmV0dXJuIEcuZGF0YXNldHMoKX0sZnVuY3Rpb24oKXtyZXR1cm4gRy5fYXR0ckJpbmRpbmdzLmdldChCKX0sZnVuY3Rpb24oSyxMKXtyZXR1cm4gbnVsbD09THx8bnVsbD09TC5hY2Nlc3Nvcj9udWxsOksubWFwKGZ1bmN0aW9uKEope3JldHVybiBnKEosCkwsbnVsbCl9KX0pKTtyZXR1cm4gdGhpcy5fYXR0ckV4dGVudHNbQl0oKX07RC5wcm90b3R5cGUuZ2V0RXh0ZW50c0ZvclByb3BlcnR5PWZ1bmN0aW9uKEIpe3ZhciBHPXRoaXM7bnVsbD09dGhpcy5fcHJvcGVydHlFeHRlbnRzW0JdJiYodGhpcy5fcHJvcGVydHlFeHRlbnRzW0JdPXQubWVtVGh1bmsoZnVuY3Rpb24oKXtyZXR1cm4gRy5kYXRhc2V0cygpfSxmdW5jdGlvbigpe3JldHVybiBHLl9wcm9wZXJ0eUJpbmRpbmdzLmdldChCKX0sZnVuY3Rpb24oKXtyZXR1cm4gRy5fZmlsdGVyRm9yUHJvcGVydHkoQil9LGZ1bmN0aW9uKEssTCxKKXtyZXR1cm4gbnVsbD09THx8bnVsbD09TC5hY2Nlc3Nvcj9udWxsOksubWFwKGZ1bmN0aW9uKFApe3JldHVybiBnKFAsTCxKKX0pfSkpO3JldHVybiB0aGlzLl9wcm9wZXJ0eUV4dGVudHNbQl0oKX07RC5wcm90b3R5cGUuX2luY2x1ZGVkVmFsdWVzRm9yU2NhbGU9ZnVuY3Rpb24oQixHKXt2YXIgSz10aGlzO2lmKCF0aGlzLl9pc0FuY2hvcmVkJiYKIUcpcmV0dXJuW107dmFyIEw9W107dGhpcy5fYXR0ckJpbmRpbmdzLmVhY2goZnVuY3Rpb24oSixQKXtKLnNjYWxlPT09QiYmKEo9Sy5nZXRFeHRlbnRzRm9yQXR0cihQKSxudWxsIT1KJiYoTD1MLmNvbmNhdChrLm1lcmdlKEopKSkpfSk7dGhpcy5fcHJvcGVydHlCaW5kaW5ncy5lYWNoKGZ1bmN0aW9uKEosUCl7Si5zY2FsZT09PUImJihKPUsuZ2V0RXh0ZW50c0ZvclByb3BlcnR5KFApLG51bGwhPUomJihMPUwuY29uY2F0KGsubWVyZ2UoSikpKSl9KTtyZXR1cm4gTH07RC5wcm90b3R5cGUuYW5pbWF0b3I9ZnVuY3Rpb24oQixHKXtpZih2b2lkIDA9PT1HKXJldHVybiB0aGlzLl9hbmltYXRvcnNbQl07dGhpcy5fYW5pbWF0b3JzW0JdPUc7cmV0dXJuIHRoaXN9O0QucHJvdG90eXBlLnJlbmRlcmVyPWZ1bmN0aW9uKEIpe3ZhciBHPXRoaXM7aWYodm9pZCAwPT09QilyZXR1cm4gbnVsbD09dGhpcy5fY2FudmFzPyJzdmciOiJjYW52YXMiO251bGw9PXRoaXMuX2NhbnZhcyYmImNhbnZhcyI9PT0KQj8odGhpcy5fY2FudmFzPWsuc2VsZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpKS5jbGFzc2VkKCJwbG90LWNhbnZhcyIsITApLHRoaXMuX2J1ZmZlckNhbnZhcz1rLnNlbGVjdChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKSksbnVsbCE9dGhpcy5lbGVtZW50KCkmJnRoaXMuX2FwcGVuZENhbnZhc05vZGUoKSx0aGlzLl9kYXRhc2V0VG9EcmF3ZXIuZm9yRWFjaChmdW5jdGlvbihLKXtLLnVzZUNhbnZhcyhHLl9jYW52YXMpfSksdGhpcy5yZW5kZXIoKSk6bnVsbCE9dGhpcy5fY2FudmFzJiYic3ZnIj09QiYmKHRoaXMuX2NhbnZhcy5yZW1vdmUoKSx0aGlzLl9idWZmZXJDYW52YXM9dGhpcy5fY2FudmFzPW51bGwsdGhpcy5fZGF0YXNldFRvRHJhd2VyLmZvckVhY2goZnVuY3Rpb24oSyl7Sy51c2VTVkcoRy5fcmVuZGVyQXJlYSl9KSx0aGlzLnJlbmRlcigpKTtyZXR1cm4gdGhpc307RC5wcm90b3R5cGUuYWRkRGF0YXNldD1mdW5jdGlvbihCKXt0aGlzLl9hZGREYXRhc2V0KEIpOwp0aGlzLl9vbkRhdGFzZXRVcGRhdGUoKTtyZXR1cm4gdGhpc307RC5wcm90b3R5cGUuX2FkZERhdGFzZXQ9ZnVuY3Rpb24oQil7dGhpcy5fcmVtb3ZlRGF0YXNldChCKTt2YXIgRz10aGlzLl9jcmVhdGVEcmF3ZXIoQik7dGhpcy5fZGF0YXNldFRvRHJhd2VyLnNldChCLEcpO3RoaXMuX2lzU2V0dXAmJnRoaXMuX2NyZWF0ZU5vZGVzRm9yRGF0YXNldChCKTtCLm9uVXBkYXRlKHRoaXMuX29uRGF0YXNldFVwZGF0ZUNhbGxiYWNrKTtyZXR1cm4gdGhpc307RC5wcm90b3R5cGUucmVtb3ZlRGF0YXNldD1mdW5jdGlvbihCKXt0aGlzLl9yZW1vdmVEYXRhc2V0KEIpO3RoaXMuX29uRGF0YXNldFVwZGF0ZSgpfTtELnByb3RvdHlwZS5fcmVtb3ZlRGF0YXNldD1mdW5jdGlvbihCKXtpZigtMT09PXRoaXMuZGF0YXNldHMoKS5pbmRleE9mKEIpKXJldHVybiB0aGlzO3RoaXMuX3JlbW92ZURhdGFzZXROb2RlcyhCKTtCLm9mZlVwZGF0ZSh0aGlzLl9vbkRhdGFzZXRVcGRhdGVDYWxsYmFjayk7dGhpcy5fZGF0YXNldFRvRHJhd2VyLmRlbGV0ZShCKTsKcmV0dXJuIHRoaXN9O0QucHJvdG90eXBlLl9yZW1vdmVEYXRhc2V0Tm9kZXM9ZnVuY3Rpb24oQil7dGhpcy5fZGF0YXNldFRvRHJhd2VyLmdldChCKS5yZW1vdmUoKX07RC5wcm90b3R5cGUuZGF0YXNldHM9ZnVuY3Rpb24oQil7dmFyIEc9dGhpcyxLPVtdO3RoaXMuX2RhdGFzZXRUb0RyYXdlci5mb3JFYWNoKGZ1bmN0aW9uKEwsSil7cmV0dXJuIEsucHVzaChKKX0pO2lmKG51bGw9PUIpcmV0dXJuIEs7Sy5mb3JFYWNoKGZ1bmN0aW9uKEwpe3JldHVybiBHLl9yZW1vdmVEYXRhc2V0KEwpfSk7Qi5mb3JFYWNoKGZ1bmN0aW9uKEwpe3JldHVybiBHLl9hZGREYXRhc2V0KEwpfSk7dGhpcy5fb25EYXRhc2V0VXBkYXRlKCk7cmV0dXJuIHRoaXN9O0QucHJvdG90eXBlLl9nZW5lcmF0ZURyYXdTdGVwcz1mdW5jdGlvbigpe3JldHVyblt7YXR0clRvUHJvamVjdG9yOnRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpLGFuaW1hdG9yOm5ldyBtLk51bGx9XX07RC5wcm90b3R5cGUuX2FkZGl0aW9uYWxQYWludD0KZnVuY3Rpb24oKXt9O0QucHJvdG90eXBlLl9idWlsZExpZ2h0d2VpZ2h0UGxvdEVudGl0aWVzPWZ1bmN0aW9uKEIpe3ZhciBHPXRoaXMsSz1bXTtCLmZvckVhY2goZnVuY3Rpb24oTCxKKXt2YXIgUD1HLl9kYXRhc2V0VG9EcmF3ZXIuZ2V0KEwpLFM9MDtMLmRhdGEoKS5mb3JFYWNoKGZ1bmN0aW9uKE4sVCl7dmFyIFk9Ry5fcGl4ZWxQb2ludChOLFQsTCk7di5NYXRoLmlzTmFOKFkueCl8fHYuTWF0aC5pc05hTihZLnkpfHwoSy5wdXNoKHtkYXR1bTpOLGdldCBwb3NpdGlvbigpe3JldHVybiBHLl9waXhlbFBvaW50LmNhbGwoRyxOLFQsTCl9LGluZGV4OlQsZGF0YXNldDpMLGRhdGFzZXRJbmRleDpKLGNvbXBvbmVudDpHLGRyYXdlcjpQLHZhbGlkRGF0dW1JbmRleDpTfSksUysrKX0pfSk7cmV0dXJuIEt9O0QucHJvdG90eXBlLl9nZXREYXRhVG9EcmF3PWZ1bmN0aW9uKCl7dmFyIEI9bmV3IHYuTWFwO3RoaXMuZGF0YXNldHMoKS5mb3JFYWNoKGZ1bmN0aW9uKEcpe3JldHVybiBCLnNldChHLApHLmRhdGEoKSl9KTtyZXR1cm4gQn07RC5wcm90b3R5cGUuX3BhaW50PWZ1bmN0aW9uKCl7dmFyIEI9dGhpcztkZWxldGUgdGhpcy5fY2FjaGVkQXR0clRvUHJvamVjdG9yO3ZhciBHPXRoaXMuX2dlbmVyYXRlRHJhd1N0ZXBzKCksSz10aGlzLl9nZXREYXRhVG9EcmF3KCksTD10aGlzLmRhdGFzZXRzKCkubWFwKGZ1bmN0aW9uKFApe3JldHVybiBCLl9kYXRhc2V0VG9EcmF3ZXIuZ2V0KFApfSk7aWYoImNhbnZhcyI9PT10aGlzLnJlbmRlcmVyKCkpe3ZhciBKPXRoaXMuX2NhbnZhcy5ub2RlKCk7Si5nZXRDb250ZXh0KCIyZCIpLmNsZWFyUmVjdCgwLDAsSi5jbGllbnRXaWR0aCxKLmNsaWVudEhlaWdodCk7dGhpcy5fYnVmZmVyQ2FudmFzVmFsaWQ9ITF9dGhpcy5kYXRhc2V0cygpLmZvckVhY2goZnVuY3Rpb24oUCxTKXt2YXIgTj1ELmFwcGx5RHJhd1N0ZXBzKEcsUCk7TFtTXS5kcmF3KEsuZ2V0KFApLE4pfSk7Sj10aGlzLmRhdGFzZXRzKCkubWFwKGZ1bmN0aW9uKFApe3JldHVybiBELmdldFRvdGFsRHJhd1RpbWUoSy5nZXQoUCksCkcpfSk7Sj12Lk1hdGgubWF4KEosMCk7dGhpcy5fYWRkaXRpb25hbFBhaW50KEopfTtELnByb3RvdHlwZS5zZWxlY3Rpb25zPWZ1bmN0aW9uKEIpe3ZhciBHPXRoaXM7dm9pZCAwPT09QiYmKEI9dGhpcy5kYXRhc2V0cygpKTtpZigiY2FudmFzIj09PXRoaXMucmVuZGVyZXIoKSlyZXR1cm4gay5zZWxlY3RBbGwoKTt2YXIgSz1bXTtCLmZvckVhY2goZnVuY3Rpb24oTCl7TD1HLl9kYXRhc2V0VG9EcmF3ZXIuZ2V0KEwpO251bGwhPUwmJihMPUwuZ2V0VmlzdWFsUHJpbWl0aXZlcygpLEsucHVzaC5hcHBseShLLEwpKX0pO3JldHVybiBrLnNlbGVjdEFsbChLKX07RC5wcm90b3R5cGUuZW50aXRpZXM9ZnVuY3Rpb24oQil7dmFyIEc9dGhpcztyZXR1cm4gdGhpcy5fZ2V0RW50aXR5U3RvcmUoQikuZW50aXRpZXMoKS5tYXAoZnVuY3Rpb24oSyl7cmV0dXJuIEcuX2xpZ2h0d2VpZ2h0UGxvdEVudGl0eVRvUGxvdEVudGl0eShLKX0pfTtELnByb3RvdHlwZS5fZ2V0RW50aXR5U3RvcmU9ZnVuY3Rpb24oQil7ZnVuY3Rpb24gRyhKKXtyZXR1cm4gSy5fZW50aXR5Qm91bmRzKEopfQp2YXIgSz10aGlzO2lmKHZvaWQgMCE9PUIpe3ZhciBMPW5ldyB2LkVudGl0eVN0b3JlO0wuYWRkQWxsKHRoaXMuX2J1aWxkTGlnaHR3ZWlnaHRQbG90RW50aXRpZXMoQiksRyx0aGlzLl9sb2NhbE9yaWdpbkJvdW5kcygpKTtyZXR1cm4gTH12b2lkIDA9PT10aGlzLl9jYWNoZWRFbnRpdHlTdG9yZSYmKEw9bmV3IHYuRW50aXR5U3RvcmUsTC5hZGRBbGwodGhpcy5fYnVpbGRMaWdodHdlaWdodFBsb3RFbnRpdGllcyh0aGlzLmRhdGFzZXRzKCkpLEcsdGhpcy5fbG9jYWxPcmlnaW5Cb3VuZHMoKSksdGhpcy5fY2FjaGVkRW50aXR5U3RvcmU9TCk7cmV0dXJuIHRoaXMuX2NhY2hlZEVudGl0eVN0b3JlfTtELnByb3RvdHlwZS5fbG9jYWxPcmlnaW5Cb3VuZHM9ZnVuY3Rpb24oKXtyZXR1cm57dG9wTGVmdDp7eDowLHk6MH0sYm90dG9tUmlnaHQ6e3g6dGhpcy53aWR0aCgpLHk6dGhpcy5oZWlnaHQoKX19fTtELnByb3RvdHlwZS5fZW50aXR5Qm91bmRzPWZ1bmN0aW9uKEIpe0I9dGhpcy5fcGl4ZWxQb2ludChCLmRhdHVtLApCLmluZGV4LEIuZGF0YXNldCk7cmV0dXJue3g6Qi54LHk6Qi55LHdpZHRoOjAsaGVpZ2h0OjB9fTtELnByb3RvdHlwZS5fbGlnaHR3ZWlnaHRQbG90RW50aXR5VG9QbG90RW50aXR5PWZ1bmN0aW9uKEIpe3JldHVybntib3VuZHM6dGhpcy5fZW50aXR5Qm91bmRzKEIpLGNvbXBvbmVudDpCLmNvbXBvbmVudCxkYXRhc2V0OkIuZGF0YXNldCxkYXRhc2V0SW5kZXg6Qi5kYXRhc2V0SW5kZXgsZGF0dW06Qi5kYXR1bSxpbmRleDpCLmluZGV4LHBvc2l0aW9uOkIucG9zaXRpb24sc2VsZWN0aW9uOmsuc2VsZWN0KEIuZHJhd2VyLmdldFZpc3VhbFByaW1pdGl2ZXMoKVtCLnZhbGlkRGF0dW1JbmRleF0pfX07RC5wcm90b3R5cGUuZW50aXRpZXNBdD1mdW5jdGlvbigpe3Rocm93IEVycm9yKCJwbG90cyBtdXN0IGltcGxlbWVudCBlbnRpdGllc0F0Iik7fTtELnByb3RvdHlwZS5lbnRpdHlOZWFyZXN0PWZ1bmN0aW9uKEIpe0I9dGhpcy5fZ2V0RW50aXR5U3RvcmUoKS5lbnRpdHlOZWFyZXN0KEIpOwpyZXR1cm4gdm9pZCAwPT09Qj92b2lkIDA6dGhpcy5fbGlnaHR3ZWlnaHRQbG90RW50aXR5VG9QbG90RW50aXR5KEIpfTtELnByb3RvdHlwZS5lbnRpdGllc0luPWZ1bmN0aW9uKEIsRyl7cmV0dXJuIHRoaXMuZW50aXRpZXNJbkJvdW5kcyhudWxsPT1HP3t4OkIudG9wTGVmdC54LHk6Qi50b3BMZWZ0Lnksd2lkdGg6Qi5ib3R0b21SaWdodC54LUIudG9wTGVmdC54LGhlaWdodDpCLmJvdHRvbVJpZ2h0LnktQi50b3BMZWZ0Lnl9Ont4OkIubWluLHk6Ry5taW4sd2lkdGg6Qi5tYXgtQi5taW4saGVpZ2h0OkcubWF4LUcubWlufSl9O0QucHJvdG90eXBlLmVudGl0aWVzSW5Cb3VuZHM9ZnVuY3Rpb24oQil7dmFyIEc9dGhpcztpZihCPXRoaXMuX2dldEVudGl0eVN0b3JlKCkuZW50aXRpZXNJbkJvdW5kcyhCKSlyZXR1cm4gQi5tYXAoZnVuY3Rpb24oSyl7cmV0dXJuIEcuX2xpZ2h0d2VpZ2h0UGxvdEVudGl0eVRvUGxvdEVudGl0eShLKX0pfTtELnByb3RvdHlwZS5lbnRpdGllc0luWEJvdW5kcz0KZnVuY3Rpb24oQil7dmFyIEc9dGhpcztpZihCPXRoaXMuX2dldEVudGl0eVN0b3JlKCkuZW50aXRpZXNJblhCb3VuZHMoQikpcmV0dXJuIEIubWFwKGZ1bmN0aW9uKEspe3JldHVybiBHLl9saWdodHdlaWdodFBsb3RFbnRpdHlUb1Bsb3RFbnRpdHkoSyl9KX07RC5wcm90b3R5cGUuZW50aXRpZXNJbllCb3VuZHM9ZnVuY3Rpb24oQil7dmFyIEc9dGhpcztpZihCPXRoaXMuX2dldEVudGl0eVN0b3JlKCkuZW50aXRpZXNJbllCb3VuZHMoQikpcmV0dXJuIEIubWFwKGZ1bmN0aW9uKEspe3JldHVybiBHLl9saWdodHdlaWdodFBsb3RFbnRpdHlUb1Bsb3RFbnRpdHkoSyl9KX07RC5wcm90b3R5cGUuX3VuaW5zdGFsbFNjYWxlRm9yS2V5PWZ1bmN0aW9uKEIpe0Iub2ZmVXBkYXRlKHRoaXMuX3JlbmRlckNhbGxiYWNrKTtCLm9mZlVwZGF0ZSh0aGlzLl9kZWZlcnJlZFJlc2V0RW50aXR5U3RvcmUpO0IucmVtb3ZlSW5jbHVkZWRWYWx1ZXNQcm92aWRlcih0aGlzLl9pbmNsdWRlZFZhbHVlc1Byb3ZpZGVyKX07CkQucHJvdG90eXBlLl9pbnN0YWxsU2NhbGVGb3JLZXk9ZnVuY3Rpb24oQil7Qi5vblVwZGF0ZSh0aGlzLl9yZW5kZXJDYWxsYmFjayk7Qi5vblVwZGF0ZSh0aGlzLl9kZWZlcnJlZFJlc2V0RW50aXR5U3RvcmUpO0IuYWRkSW5jbHVkZWRWYWx1ZXNQcm92aWRlcih0aGlzLl9pbmNsdWRlZFZhbHVlc1Byb3ZpZGVyKX07RC5wcm90b3R5cGUuX3Byb3BlcnR5UHJvamVjdG9ycz1mdW5jdGlvbigpe3JldHVybnt9fTtELl9zY2FsZWRBY2Nlc3Nvcj1mdW5jdGlvbihCKXt2YXIgRz1CLnNjYWxlLEs9Qi5hY2Nlc3NvcixMPUIucG9zdFNjYWxlLEo9bnVsbD09Rz9LOmZ1bmN0aW9uKFAsUyxOKXtyZXR1cm4gRy5zY2FsZShLKFAsUyxOKSl9O3JldHVybiBudWxsPT1MP0o6ZnVuY3Rpb24oUCxTLE4pe3JldHVybiBMKEooUCxTLE4pLFAsUyxOKX19O0QucHJvdG90eXBlLl9waXhlbFBvaW50PWZ1bmN0aW9uKCl7cmV0dXJue3g6MCx5OjB9fTtELnByb3RvdHlwZS5fYW5pbWF0ZU9uTmV4dFJlbmRlcj0KZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYW5pbWF0ZSYmdGhpcy5fZGF0YUNoYW5nZWR9O3JldHVybiBEfShjLkNvbXBvbmVudCk7Zi5fQU5JTUFUSU9OX01BWF9EVVJBVElPTj02MDA7ZC5QbG90PWZ9LGZ1bmN0aW9uKGMsZCxmKXtmdW5jdGlvbiBnKG0pe2Zvcih2YXIgcCBpbiBtKWQuaGFzT3duUHJvcGVydHkocCl8fChkW3BdPW1bcF0pfWM9ZigxMDUpO2QuVGlja0dlbmVyYXRvcnM9YztnKGYoNTQpKTtnKGYoMTAxKSk7ZyhmKDEwMikpO2coZigxMDMpKTtnKGYoMTA0KSk7ZyhmKDEwNikpO3ZhciBsPWYoNTQpLGs9ZigxMSk7ZC5pc1RyYW5zZm9ybWFibGU9ZnVuY3Rpb24obSl7cmV0dXJuIG0gaW5zdGFuY2VvZiBrLlF1YW50aXRhdGl2ZVNjYWxlfHxtIGluc3RhbmNlb2YgbC5DYXRlZ29yeX19LGZ1bmN0aW9uKGMsZCxmKXt2YXIgZz1mKDEpLGw9ZigzMCksaz1mKDApLG09ZigxMik7Yz1mKDEwKTtkLlhBbGlnbm1lbnQ9Yy5tYWtlRW51bShbImxlZnQiLCJjZW50ZXIiLCJyaWdodCJdKTsKZC5ZQWxpZ25tZW50PWMubWFrZUVudW0oWyJ0b3AiLCJjZW50ZXIiLCJib3R0b20iXSk7Yz1mdW5jdGlvbigpe2Z1bmN0aW9uIHAoKXt0aGlzLl9vdmVyZmxvd0hpZGRlbj0hMTt0aGlzLl9vcmlnaW49e3g6MCx5OjB9O3RoaXMuX3hBbGlnbm1lbnQ9ImxlZnQiO3RoaXMuX3lBbGlnbm1lbnQ9InRvcCI7dGhpcy5faXNBbmNob3JlZD10aGlzLl9pc1NldHVwPSExO3RoaXMuX2Nzc0NsYXNzZXM9bmV3IGsuU2V0O3RoaXMuX2Rlc3Ryb3llZD0hMTt0aGlzLl9vbkFuY2hvckNhbGxiYWNrcz1uZXcgay5DYWxsYmFja1NldDt0aGlzLl9vbkRldGFjaENhbGxiYWNrcz1uZXcgay5DYWxsYmFja1NldDt0aGlzLl9jc3NDbGFzc2VzLmFkZCgiY29tcG9uZW50Iil9cC5wcm90b3R5cGUuYW5jaG9yPWZ1bmN0aW9uKHEpe3E9bS5jb2VyY2VFeHRlcm5hbEQzKHEpO2lmKHRoaXMuX2Rlc3Ryb3llZCl0aHJvdyBFcnJvcigiQ2FuJ3QgcmV1c2UgZGVzdHJveSgpLWVkIENvbXBvbmVudHMhIik7dGhpcy5pc1Jvb3QoKSYmCih0aGlzLl9yb290RWxlbWVudD1xLHRoaXMuX3Jvb3RFbGVtZW50LmNsYXNzZWQoInBsb3R0YWJsZSIsITApKTtudWxsIT10aGlzLl9lbGVtZW50P3Eubm9kZSgpLmFwcGVuZENoaWxkKHRoaXMuX2VsZW1lbnQubm9kZSgpKToodGhpcy5fZWxlbWVudD1xLmFwcGVuZCgiZGl2IiksdGhpcy5fc2V0dXAoKSk7dGhpcy5faXNBbmNob3JlZD0hMDt0aGlzLl9vbkFuY2hvckNhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKHRoaXMpO3JldHVybiB0aGlzfTtwLnByb3RvdHlwZS5vbkFuY2hvcj1mdW5jdGlvbihxKXt0aGlzLl9pc0FuY2hvcmVkJiZxKHRoaXMpO3RoaXMuX29uQW5jaG9yQ2FsbGJhY2tzLmFkZChxKX07cC5wcm90b3R5cGUub2ZmQW5jaG9yPWZ1bmN0aW9uKHEpe3RoaXMuX29uQW5jaG9yQ2FsbGJhY2tzLmRlbGV0ZShxKX07cC5wcm90b3R5cGUuX3NldHVwPWZ1bmN0aW9uKCl7dmFyIHE9dGhpczt0aGlzLl9pc1NldHVwfHwodGhpcy5fY3NzQ2xhc3Nlcy5mb3JFYWNoKGZ1bmN0aW9uKHIpe3EuX2VsZW1lbnQuY2xhc3NlZChyLAohMCl9KSx0aGlzLl9jc3NDbGFzc2VzPW5ldyBrLlNldCx0aGlzLl9iYWNrZ3JvdW5kQ29udGFpbmVyPXRoaXMuX2VsZW1lbnQuYXBwZW5kKCJzdmciKS5jbGFzc2VkKCJiYWNrZ3JvdW5kLWNvbnRhaW5lciIsITApLHRoaXMuX2NvbnRlbnQ9dGhpcy5fZWxlbWVudC5hcHBlbmQoInN2ZyIpLmNsYXNzZWQoImNvbnRlbnQiLCEwKSx0aGlzLl9mb3JlZ3JvdW5kQ29udGFpbmVyPXRoaXMuX2VsZW1lbnQuYXBwZW5kKCJzdmciKS5jbGFzc2VkKCJmb3JlZ3JvdW5kLWNvbnRhaW5lciIsITApLHRoaXMuX292ZXJmbG93SGlkZGVuP3RoaXMuX2NvbnRlbnQuY2xhc3NlZCgiY29tcG9uZW50LW92ZXJmbG93LWhpZGRlbiIsITApOnRoaXMuX2NvbnRlbnQuY2xhc3NlZCgiY29tcG9uZW50LW92ZXJmbG93LXZpc2libGUiLCEwKSx0aGlzLl9pc1NldHVwPSEwKX07cC5wcm90b3R5cGUucmVxdWVzdGVkU3BhY2U9ZnVuY3Rpb24oKXtyZXR1cm57bWluV2lkdGg6MCxtaW5IZWlnaHQ6MH19O3AucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQ9CmZ1bmN0aW9uKHEscix0KXtpZihudWxsPT1xfHxudWxsPT1yfHxudWxsPT10KXtpZihudWxsPT10aGlzLl9lbGVtZW50KXRocm93IEVycm9yKCJhbmNob3IoKSBtdXN0IGJlIGNhbGxlZCBiZWZvcmUgY29tcHV0ZUxheW91dCgpIik7aWYobnVsbCE9dGhpcy5fcm9vdEVsZW1lbnQpcT17eDowLHk6MH0sdD10aGlzLl9yb290RWxlbWVudC5ub2RlKCkscj1rLkRPTS5lbGVtZW50V2lkdGgodCksdD1rLkRPTS5lbGVtZW50SGVpZ2h0KHQpO2Vsc2UgdGhyb3cgRXJyb3IoIm51bGwgYXJndW1lbnRzIGNhbm5vdCBiZSBwYXNzZWQgdG8gY29tcHV0ZUxheW91dCgpIG9uIGEgbm9uLXJvb3QsIHVuYW5jaG9yZWQgbm9kZSIpO312YXIgdj10aGlzLl9zaXplRnJvbU9mZmVyKHIsdCksQT12LmhlaWdodDt2PXYud2lkdGg7dGhpcy5zZXRCb3VuZHModixBLHEueCsoci12KSpwLl94QWxpZ25Ub1Byb3BvcnRpb25bdGhpcy5feEFsaWdubWVudF0scS55Kyh0LUEpKnAuX3lBbGlnblRvUHJvcG9ydGlvblt0aGlzLl95QWxpZ25tZW50XSk7CnJldHVybiB0aGlzfTtwLnByb3RvdHlwZS5zZXRCb3VuZHM9ZnVuY3Rpb24ocSxyLHQsdil7dm9pZCAwPT09dCYmKHQ9MCk7dm9pZCAwPT09diYmKHY9MCk7dGhpcy5fd2lkdGg9cTt0aGlzLl9oZWlnaHQ9cjt0aGlzLl9vcmlnaW49e3g6dCx5OnZ9O251bGwhPXRoaXMuX2VsZW1lbnQmJnRoaXMuX2VsZW1lbnQuc3R5bGVzKHtsZWZ0OnQrInB4IixoZWlnaHQ6cisicHgiLHRvcDp2KyJweCIsd2lkdGg6cSsicHgifSk7bnVsbCE9dGhpcy5fcmVzaXplSGFuZGxlciYmdGhpcy5fcmVzaXplSGFuZGxlcih7d2lkdGg6cSxoZWlnaHQ6cn0pfTtwLnByb3RvdHlwZS5fc2l6ZUZyb21PZmZlcj1mdW5jdGlvbihxLHIpe3ZhciB0PXRoaXMucmVxdWVzdGVkU3BhY2UocSxyKTtyZXR1cm57d2lkdGg6dGhpcy5maXhlZFdpZHRoKCk/TWF0aC5taW4ocSx0Lm1pbldpZHRoKTpxLGhlaWdodDp0aGlzLmZpeGVkSGVpZ2h0KCk/TWF0aC5taW4ocix0Lm1pbkhlaWdodCk6cn19O3AucHJvdG90eXBlLnJlbmRlcj0KZnVuY3Rpb24oKXt0aGlzLl9pc0FuY2hvcmVkJiZ0aGlzLl9pc1NldHVwJiYwPD10aGlzLndpZHRoKCkmJjA8PXRoaXMuaGVpZ2h0KCkmJmwucmVnaXN0ZXJUb1JlbmRlcih0aGlzKTtyZXR1cm4gdGhpc307cC5wcm90b3R5cGUucmVuZGVyTG93UHJpb3JpdHk9ZnVuY3Rpb24oKXt0aGlzLnJlbmRlcigpfTtwLnByb3RvdHlwZS5fc2NoZWR1bGVDb21wdXRlTGF5b3V0PWZ1bmN0aW9uKCl7dGhpcy5faXNBbmNob3JlZCYmdGhpcy5faXNTZXR1cCYmbC5yZWdpc3RlclRvQ29tcHV0ZUxheW91dEFuZFJlbmRlcih0aGlzKX07cC5wcm90b3R5cGUub25SZXNpemU9ZnVuY3Rpb24ocSl7dGhpcy5fcmVzaXplSGFuZGxlcj1xO3JldHVybiB0aGlzfTtwLnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseT1mdW5jdGlvbigpe3JldHVybiB0aGlzfTtwLnByb3RvdHlwZS5yZWRyYXc9ZnVuY3Rpb24oKXt0aGlzLl9pc0FuY2hvcmVkJiZ0aGlzLl9pc1NldHVwJiYodGhpcy5pc1Jvb3QoKT90aGlzLl9zY2hlZHVsZUNvbXB1dGVMYXlvdXQoKToKdGhpcy5wYXJlbnQoKS5yZWRyYXcoKSk7cmV0dXJuIHRoaXN9O3AucHJvdG90eXBlLmludmFsaWRhdGVDYWNoZT1mdW5jdGlvbigpe307cC5wcm90b3R5cGUucmVuZGVyVG89ZnVuY3Rpb24ocSl7dGhpcy5kZXRhY2goKTtpZihudWxsIT1xKXtxPSJzdHJpbmciPT09dHlwZW9mIHE/Zy5zZWxlY3QocSk6cSBpbnN0YW5jZW9mIEVsZW1lbnQ/Zy5zZWxlY3QocSk6bS5jb2VyY2VFeHRlcm5hbEQzKHEpO2lmKCFxLm5vZGUoKXx8bnVsbD09cS5ub2RlKCkubm9kZU5hbWUpdGhyb3cgRXJyb3IoIlBsb3R0YWJsZSByZXF1aXJlcyBhIHZhbGlkIEVsZW1lbnQgdG8gcmVuZGVyVG8iKTtpZigic3ZnIj09PXEubm9kZSgpLm5vZGVOYW1lKXRocm93IEVycm9yKCJQbG90dGFibGUgMy54IGFuZCBsYXRlciBjYW4gb25seSByZW5kZXJUbyBhbiBIVE1MIGNvbXBvbmVudDsgcGFzcyBhIGRpdiBpbnN0ZWFkISIpO3RoaXMuYW5jaG9yKHEpfWlmKG51bGw9PXRoaXMuX2VsZW1lbnQpdGhyb3cgRXJyb3IoIklmIGEgQ29tcG9uZW50IGhhcyBuZXZlciBiZWVuIHJlbmRlcmVkIGJlZm9yZSwgdGhlbiByZW5kZXJUbyBtdXN0IGJlIGdpdmVuIGEgbm9kZSB0byByZW5kZXIgdG8sIG9yIGEgZDMuU2VsZWN0aW9uLCBvciBhIHNlbGVjdG9yIHN0cmluZyIpOwpsLnJlZ2lzdGVyVG9Db21wdXRlTGF5b3V0QW5kUmVuZGVyKHRoaXMpO2wuZmx1c2goKX07cC5wcm90b3R5cGUueEFsaWdubWVudD1mdW5jdGlvbihxKXtpZihudWxsPT1xKXJldHVybiB0aGlzLl94QWxpZ25tZW50O3E9cS50b0xvd2VyQ2FzZSgpO2lmKG51bGw9PXAuX3hBbGlnblRvUHJvcG9ydGlvbltxXSl0aHJvdyBFcnJvcigiVW5zdXBwb3J0ZWQgYWxpZ25tZW50OiAiK3EpO3RoaXMuX3hBbGlnbm1lbnQ9cTt0aGlzLnJlZHJhdygpO3JldHVybiB0aGlzfTtwLnByb3RvdHlwZS55QWxpZ25tZW50PWZ1bmN0aW9uKHEpe2lmKG51bGw9PXEpcmV0dXJuIHRoaXMuX3lBbGlnbm1lbnQ7cT1xLnRvTG93ZXJDYXNlKCk7aWYobnVsbD09cC5feUFsaWduVG9Qcm9wb3J0aW9uW3FdKXRocm93IEVycm9yKCJVbnN1cHBvcnRlZCBhbGlnbm1lbnQ6ICIrcSk7dGhpcy5feUFsaWdubWVudD1xO3RoaXMucmVkcmF3KCk7cmV0dXJuIHRoaXN9O3AucHJvdG90eXBlLmhhc0NsYXNzPWZ1bmN0aW9uKHEpe3JldHVybiBudWxsPT0KcT8hMTpudWxsPT10aGlzLl9lbGVtZW50P3RoaXMuX2Nzc0NsYXNzZXMuaGFzKHEpOnRoaXMuX2VsZW1lbnQuY2xhc3NlZChxKX07cC5wcm90b3R5cGUuYWRkQ2xhc3M9ZnVuY3Rpb24ocSl7bnVsbCE9cSYmKG51bGw9PXRoaXMuX2VsZW1lbnQ/dGhpcy5fY3NzQ2xhc3Nlcy5hZGQocSk6dGhpcy5fZWxlbWVudC5jbGFzc2VkKHEsITApKX07cC5wcm90b3R5cGUucmVtb3ZlQ2xhc3M9ZnVuY3Rpb24ocSl7bnVsbCE9cSYmKG51bGw9PXRoaXMuX2VsZW1lbnQ/dGhpcy5fY3NzQ2xhc3Nlcy5kZWxldGUocSk6dGhpcy5fZWxlbWVudC5jbGFzc2VkKHEsITEpKX07cC5wcm90b3R5cGUuZml4ZWRXaWR0aD1mdW5jdGlvbigpe3JldHVybiExfTtwLnByb3RvdHlwZS5maXhlZEhlaWdodD1mdW5jdGlvbigpe3JldHVybiExfTtwLnByb3RvdHlwZS5kZXRhY2g9ZnVuY3Rpb24oKXt0aGlzLnBhcmVudChudWxsKTt0aGlzLl9pc0FuY2hvcmVkJiZ0aGlzLl9lbGVtZW50LnJlbW92ZSgpO3RoaXMuX2lzQW5jaG9yZWQ9CiExO3RoaXMuX29uRGV0YWNoQ2FsbGJhY2tzLmNhbGxDYWxsYmFja3ModGhpcyk7cmV0dXJuIHRoaXN9O3AucHJvdG90eXBlLm9uRGV0YWNoPWZ1bmN0aW9uKHEpe3RoaXMuX29uRGV0YWNoQ2FsbGJhY2tzLmFkZChxKX07cC5wcm90b3R5cGUub2ZmRGV0YWNoPWZ1bmN0aW9uKHEpe3RoaXMuX29uRGV0YWNoQ2FsbGJhY2tzLmRlbGV0ZShxKX07cC5wcm90b3R5cGUucGFyZW50PWZ1bmN0aW9uKHEpe2lmKHZvaWQgMD09PXEpcmV0dXJuIHRoaXMuX3BhcmVudDtpZihudWxsIT09cSYmIXEuaGFzKHRoaXMpKXRocm93IEVycm9yKCJQYXNzZWQgaW52YWxpZCBwYXJlbnQiKTt0aGlzLl9wYXJlbnQ9cTtyZXR1cm4gdGhpc307cC5wcm90b3R5cGUuYm91bmRzPWZ1bmN0aW9uKCl7dmFyIHE9dGhpcy5vcmlnaW4oKTtyZXR1cm57dG9wTGVmdDpxLGJvdHRvbVJpZ2h0Ont4OnEueCt0aGlzLndpZHRoKCkseTpxLnkrdGhpcy5oZWlnaHQoKX19fTtwLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5fZGVzdHJveWVkPQohMDt0aGlzLmRldGFjaCgpfTtwLnByb3RvdHlwZS53aWR0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl93aWR0aH07cC5wcm90b3R5cGUuaGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2hlaWdodH07cC5wcm90b3R5cGUub3JpZ2luPWZ1bmN0aW9uKCl7cmV0dXJue3g6dGhpcy5fb3JpZ2luLngseTp0aGlzLl9vcmlnaW4ueX19O3AucHJvdG90eXBlLm9yaWdpblRvUm9vdD1mdW5jdGlvbigpe2Zvcih2YXIgcT10aGlzLm9yaWdpbigpLHI9dGhpcy5wYXJlbnQoKTtudWxsIT1yOyl7dmFyIHQ9ci5vcmlnaW4oKTtxLngrPXQueDtxLnkrPXQueTtyPXIucGFyZW50KCl9cmV0dXJuIHF9O3AucHJvdG90eXBlLnJvb3Q9ZnVuY3Rpb24oKXtmb3IodmFyIHE9dGhpczshcS5pc1Jvb3QoKTspcT1xLnBhcmVudCgpO3JldHVybiBxfTtwLnByb3RvdHlwZS5pc1Jvb3Q9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbD09dGhpcy5wYXJlbnQoKX07cC5wcm90b3R5cGUuZm9yZWdyb3VuZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9mb3JlZ3JvdW5kQ29udGFpbmVyfTsKcC5wcm90b3R5cGUuY29udGVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb250ZW50fTtwLnByb3RvdHlwZS5lbGVtZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VsZW1lbnR9O3AucHJvdG90eXBlLnJvb3RFbGVtZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucm9vdCgpLl9yb290RWxlbWVudH07cC5wcm90b3R5cGUuYmFja2dyb3VuZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9iYWNrZ3JvdW5kQ29udGFpbmVyfTtyZXR1cm4gcH0oKTtjLl94QWxpZ25Ub1Byb3BvcnRpb249e2xlZnQ6MCxjZW50ZXI6LjUscmlnaHQ6MX07Yy5feUFsaWduVG9Qcm9wb3J0aW9uPXt0b3A6MCxjZW50ZXI6LjUsYm90dG9tOjF9O2QuQ29tcG9uZW50PWN9LGZ1bmN0aW9uKGMsZCxmKXtmdW5jdGlvbiBnKGwpe2Zvcih2YXIgayBpbiBsKWQuaGFzT3duUHJvcGVydHkoayl8fChkW2tdPWxba10pfWcoZig1OSkpO2coZig2MikpO2coZigxMzMpKTtnKGYoMjEpKTtnKGYoNjQpKTtnKGYoNjYpKX0sCmZ1bmN0aW9uKGMsZCl7Yz1mdW5jdGlvbigpe2Z1bmN0aW9uIGYoZyxsKXt0aGlzLl9zdmdEcmF3ZXJGYWN0b3J5PWc7dGhpcy5fY2FudmFzRHJhd2VyRmFjdG9yeT1sfWYucHJvdG90eXBlLnVzZVNWRz1mdW5jdGlvbihnKXtudWxsIT10aGlzLl9jdXJyZW50RHJhd2VyJiZ0aGlzLl9jdXJyZW50RHJhd2VyLnJlbW92ZSgpO3ZhciBsPXRoaXMuX3N2Z0RyYXdlckZhY3RvcnkoKTtsLmF0dGFjaFRvKGcpO3RoaXMuX2N1cnJlbnREcmF3ZXI9bH07Zi5wcm90b3R5cGUudXNlQ2FudmFzPWZ1bmN0aW9uKGcpe251bGwhPXRoaXMuX2N1cnJlbnREcmF3ZXImJnRoaXMuX2N1cnJlbnREcmF3ZXIucmVtb3ZlKCk7dGhpcy5fY3VycmVudERyYXdlcj10aGlzLl9jYW52YXNEcmF3ZXJGYWN0b3J5KGcubm9kZSgpLmdldENvbnRleHQoIjJkIikpfTtmLnByb3RvdHlwZS5nZXREcmF3ZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY3VycmVudERyYXdlcn07Zi5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKCl7bnVsbCE9CnRoaXMuX2N1cnJlbnREcmF3ZXImJnRoaXMuX2N1cnJlbnREcmF3ZXIucmVtb3ZlKCl9O2YucHJvdG90eXBlLmRyYXc9ZnVuY3Rpb24oZyxsKXt0aGlzLl9jdXJyZW50RHJhd2VyLmRyYXcoZyxsKX07Zi5wcm90b3R5cGUuZ2V0VmlzdWFsUHJpbWl0aXZlcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jdXJyZW50RHJhd2VyLmdldFZpc3VhbFByaW1pdGl2ZXMoKX07Zi5wcm90b3R5cGUuZ2V0VmlzdWFsUHJpbWl0aXZlQXRJbmRleD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5fY3VycmVudERyYXdlci5nZXRWaXN1YWxQcmltaXRpdmVBdEluZGV4KGcpfTtyZXR1cm4gZn0oKTtkLlByb3h5RHJhd2VyPWN9LGZ1bmN0aW9uKGMsZCxmKXtmdW5jdGlvbiBnKGwpe2Zvcih2YXIgayBpbiBsKWQuaGFzT3duUHJvcGVydHkoayl8fChkW2tdPWxba10pfWcoZig3MCkpO2coZig3MSkpfSxmdW5jdGlvbihjLGQsZil7ZnVuY3Rpb24gZyhtKXt2b2lkIDA9PT1tJiYobT0zKTtsKG0pO3JldHVybiBmdW5jdGlvbihwKXtyZXR1cm4gcC50b0ZpeGVkKG0pfX0KZnVuY3Rpb24gbChtKXtpZigwPm18fDIwPG0pdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkZvcm1hdHRlciBwcmVjaXNpb24gbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDIwIik7aWYobSE9PU1hdGguZmxvb3IobSkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkZvcm1hdHRlciBwcmVjaXNpb24gbXVzdCBiZSBhbiBpbnRlZ2VyIik7fXZhciBrPWYoMSk7ZC5jdXJyZW5jeT1mdW5jdGlvbihtLHAscSl7dm9pZCAwPT09bSYmKG09Mik7dm9pZCAwPT09cCYmKHA9IiQiKTt2b2lkIDA9PT1xJiYocT0hMCk7dmFyIHI9ZyhtKTtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIHY9cihNYXRoLmFicyh0KSk7IiIhPT12JiYodj1xP3Ardjp2K3AsMD50JiYodj0iLSIrdikpO3JldHVybiB2fX07ZC5maXhlZD1nO2QuZ2VuZXJhbD1mdW5jdGlvbihtKXt2b2lkIDA9PT1tJiYobT0zKTtsKG0pO3JldHVybiBmdW5jdGlvbihwKXtpZigibnVtYmVyIj09PXR5cGVvZiBwKXt2YXIgcT1NYXRoLnBvdygxMCxtKTtyZXR1cm4gU3RyaW5nKE1hdGgucm91bmQocCoKcSkvcSl9cmV0dXJuIFN0cmluZyhwKX19O2QuaWRlbnRpdHk9ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24obSl7cmV0dXJuIFN0cmluZyhtKX19O2QucGVyY2VudGFnZT1mdW5jdGlvbihtKXt2b2lkIDA9PT1tJiYobT0wKTt2YXIgcD1nKG0pO3JldHVybiBmdW5jdGlvbihxKXt2YXIgcj1xLnRvU3RyaW5nKCk7cj1NYXRoLnBvdygxMCxyLmxlbmd0aC0oci5pbmRleE9mKCIuIikrMSkpO3JldHVybiBwKHBhcnNlSW50KCgxMDAqcSpyKS50b1N0cmluZygpLDEwKS9yKSsiJSJ9fTtkLnNpU3VmZml4PWZ1bmN0aW9uKG0pe3ZvaWQgMD09PW0mJihtPTMpO2wobSk7cmV0dXJuIGZ1bmN0aW9uKHApe3JldHVybiBrLmZvcm1hdCgiLiIrbSsicyIpKHApfX07ZC5zaG9ydFNjYWxlPWZ1bmN0aW9uKCl7dmFyIG09MDt2b2lkIDA9PT1tJiYobT0zKTtsKG0pO3ZhciBwPWsuZm9ybWF0KCIuIittKyJlIikscT1rLmZvcm1hdCgiLiIrbSsiZiIpLHI9TWF0aC5wb3coMTAsMTgpLHQ9TWF0aC5wb3coMTAsCi1tKTtyZXR1cm4gZnVuY3Rpb24odil7dmFyIEE9TWF0aC5hYnModik7aWYoKEE8dHx8QT49cikmJjAhPT1BKXJldHVybiBwKHYpO2Zvcih2YXIgeT0tMTtBPj1NYXRoLnBvdygxRTMseSsyKSYmND55Oyl5Kys7QT0tMT09PXk/cSh2KTpxKHYvTWF0aC5wb3coMUUzLHkrMSkpKyJLTUJUUSJbeV07aWYoMDx2JiYiMTAwMCI9PT1BLnN1YnN0cigwLDQpfHwwPnYmJiItMTAwMCI9PT1BLnN1YnN0cigwLDUpKTQ+eT8oeSsrLEE9cSh2L01hdGgucG93KDFFMyx5KzEpKSsiS01CVFEiW3ldKTpBPXAodik7cmV0dXJuIEF9fTtkLm11bHRpVGltZT1mdW5jdGlvbigpe3ZhciBtPVt7c3BlY2lmaWVyOiIuJUwiLHByZWRpY2F0ZTpmdW5jdGlvbihwKXtyZXR1cm4gMCE9PXAuZ2V0TWlsbGlzZWNvbmRzKCl9fSx7c3BlY2lmaWVyOiI6JVMiLHByZWRpY2F0ZTpmdW5jdGlvbihwKXtyZXR1cm4gMCE9PXAuZ2V0U2Vjb25kcygpfX0se3NwZWNpZmllcjoiJUk6JU0iLHByZWRpY2F0ZTpmdW5jdGlvbihwKXtyZXR1cm4gMCE9PQpwLmdldE1pbnV0ZXMoKX19LHtzcGVjaWZpZXI6IiVJICVwIixwcmVkaWNhdGU6ZnVuY3Rpb24ocCl7cmV0dXJuIDAhPT1wLmdldEhvdXJzKCl9fSx7c3BlY2lmaWVyOiIlYSAlZCIscHJlZGljYXRlOmZ1bmN0aW9uKHApe3JldHVybiAwIT09cC5nZXREYXkoKSYmMSE9PXAuZ2V0RGF0ZSgpfX0se3NwZWNpZmllcjoiJWIgJWQiLHByZWRpY2F0ZTpmdW5jdGlvbihwKXtyZXR1cm4gMSE9PXAuZ2V0RGF0ZSgpfX0se3NwZWNpZmllcjoiJWIiLHByZWRpY2F0ZTpmdW5jdGlvbihwKXtyZXR1cm4gMCE9PXAuZ2V0TW9udGgoKX19XTtyZXR1cm4gZnVuY3Rpb24ocCl7dmFyIHE9bS5maWx0ZXIoZnVuY3Rpb24ocil7cmV0dXJuIHIucHJlZGljYXRlKHApfSk7cmV0dXJuIGsudGltZUZvcm1hdCgwPHEubGVuZ3RoP3FbMF0uc3BlY2lmaWVyOiIlWSIpKHApfX07ZC50aW1lPWZ1bmN0aW9uKG0pe3JldHVybiBrLnRpbWVGb3JtYXQobSl9fSxmdW5jdGlvbihjLGQsZil7dmFyIGc9ZigxKSxsPWYoMCk7CmM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBrKG0scCl7dGhpcy5fcm9vdD1nLnNlbGVjdChkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZyIpKTt0aGlzLl9jbGFzc05hbWU9cDt0aGlzLl9zdmdFbGVtZW50TmFtZT1tfWsucHJvdG90eXBlLmRyYXc9ZnVuY3Rpb24obSxwKXt2YXIgcT10aGlzO3RoaXMuX2NyZWF0ZUFuZERlc3Ryb3lET01FbGVtZW50cyhtKTt2YXIgcj0wO3AuZm9yRWFjaChmdW5jdGlvbih0KXtsLldpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cmV0dXJuIHEuX2RyYXdTdGVwKHQpfSxyKTtyKz10LmFuaW1hdG9yLnRvdGFsVGltZShtLmxlbmd0aCl9KX07ay5wcm90b3R5cGUuZ2V0VmlzdWFsUHJpbWl0aXZlcz1mdW5jdGlvbigpe251bGw9PXRoaXMuX2NhY2hlZFZpc3VhbFByaW1pdGl2ZXNOb2RlcyYmKHRoaXMuX2NhY2hlZFZpc3VhbFByaW1pdGl2ZXNOb2Rlcz10aGlzLl9zZWxlY3Rpb24ubm9kZXMoKSk7cmV0dXJuIHRoaXMuX2NhY2hlZFZpc3VhbFByaW1pdGl2ZXNOb2Rlc307CmsucHJvdG90eXBlLmdldFZpc3VhbFByaW1pdGl2ZUF0SW5kZXg9ZnVuY3Rpb24obSl7cmV0dXJuIHRoaXMuZ2V0VmlzdWFsUHJpbWl0aXZlcygpW21dfTtrLnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24oKXt0aGlzLl9yb290LnJlbW92ZSgpfTtrLnByb3RvdHlwZS5hdHRhY2hUbz1mdW5jdGlvbihtKXttLm5vZGUoKS5hcHBlbmRDaGlsZCh0aGlzLl9yb290Lm5vZGUoKSl9O2sucHJvdG90eXBlLmdldFJvb3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcm9vdH07ay5wcm90b3R5cGUuc2VsZWN0b3I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3ZnRWxlbWVudE5hbWV9O2sucHJvdG90eXBlLl9hcHBseURlZmF1bHRBdHRyaWJ1dGVzPWZ1bmN0aW9uKCl7fTtrLnByb3RvdHlwZS5fY3JlYXRlQW5kRGVzdHJveURPTUVsZW1lbnRzPWZ1bmN0aW9uKG0pe209bS5maWx0ZXIoZnVuY3Rpb24ocCl7cmV0dXJuIG51bGwhPXB9KTttPXRoaXMuX3Jvb3Quc2VsZWN0QWxsKHRoaXMuc2VsZWN0b3IoKSkuZGF0YShtKTsKdGhpcy5fc2VsZWN0aW9uPW0uZW50ZXIoKS5hcHBlbmQodGhpcy5fc3ZnRWxlbWVudE5hbWUpLm1lcmdlKG0pO20uZXhpdCgpLnJlbW92ZSgpO3RoaXMuX2NhY2hlZFZpc3VhbFByaW1pdGl2ZXNOb2Rlcz1udWxsO251bGwhPXRoaXMuX2NsYXNzTmFtZSYmdGhpcy5fc2VsZWN0aW9uLmNsYXNzZWQodGhpcy5fY2xhc3NOYW1lLCEwKTt0aGlzLl9hcHBseURlZmF1bHRBdHRyaWJ1dGVzKHRoaXMuX3NlbGVjdGlvbil9O2sucHJvdG90eXBlLl9kcmF3U3RlcD1mdW5jdGlvbihtKXt2YXIgcD10aGlzO1siZmlsbCIsInN0cm9rZSJdLmZvckVhY2goZnVuY3Rpb24ocSl7bnVsbCE9bS5hdHRyVG9BcHBsaWVkUHJvamVjdG9yW3FdJiZwLl9zZWxlY3Rpb24uYXR0cihxLG0uYXR0clRvQXBwbGllZFByb2plY3RvcltxXSl9KTttLmFuaW1hdG9yLmFuaW1hdGUodGhpcy5fc2VsZWN0aW9uLG0uYXR0clRvQXBwbGllZFByb2plY3Rvcik7bnVsbCE9dGhpcy5fY2xhc3NOYW1lJiZ0aGlzLl9zZWxlY3Rpb24uY2xhc3NlZCh0aGlzLl9jbGFzc05hbWUsCiEwKX07cmV0dXJuIGt9KCk7ZC5TVkdEcmF3ZXI9Y30sZnVuY3Rpb24oYyxkKXtkLm1ha2VFbnVtPWZ1bmN0aW9uKGYpe3JldHVybiBmLnJlZHVjZShmdW5jdGlvbihnLGwpe2dbbF09bDtyZXR1cm4gZ30se30pfX0sZnVuY3Rpb24oYyxkLGYpe3ZhciBnPXRoaXMmJnRoaXMuX19leHRlbmRzfHxmdW5jdGlvbihwLHEpe2Z1bmN0aW9uIHIoKXt0aGlzLmNvbnN0cnVjdG9yPXB9Zm9yKHZhciB0IGluIHEpcS5oYXNPd25Qcm9wZXJ0eSh0KSYmKHBbdF09cVt0XSk7cC5wcm90b3R5cGU9bnVsbD09PXE/T2JqZWN0LmNyZWF0ZShxKTooci5wcm90b3R5cGU9cS5wcm90b3R5cGUsbmV3IHIpfSxsPWYoMSksaz1mKDI2KSxtPWYoMCk7Yz1mdW5jdGlvbihwKXtmdW5jdGlvbiBxKCl7dmFyIHI9cC5jYWxsKHRoaXMpfHx0aGlzO3IuX3RpY2tHZW5lcmF0b3I9ZnVuY3Rpb24odCl7cmV0dXJuIHQuZGVmYXVsdFRpY2tzKCl9O3IuX3BhZFByb3BvcnRpb249LjA1O3IuX3NuYXBwaW5nRG9tYWluRW5hYmxlZD0KITA7ci5fcGFkZGluZ0V4Y2VwdGlvbnNQcm92aWRlcnM9bmV3IG0uU2V0O3JldHVybiByfWcocSxwKTtxLnByb3RvdHlwZS5hdXRvRG9tYWluPWZ1bmN0aW9uKCl7dGhpcy5fZG9tYWluTWF4PXRoaXMuX2RvbWFpbk1pbj1udWxsO3AucHJvdG90eXBlLmF1dG9Eb21haW4uY2FsbCh0aGlzKX07cS5wcm90b3R5cGUuX2F1dG9Eb21haW5JZkF1dG9tYXRpY01vZGU9ZnVuY3Rpb24oKXtpZihudWxsIT10aGlzLl9kb21haW5NaW4mJm51bGwhPXRoaXMuX2RvbWFpbk1heCl0aGlzLl9zZXREb21haW4oW3RoaXMuX2RvbWFpbk1pbix0aGlzLl9kb21haW5NYXhdKTtlbHNle3ZhciByPXRoaXMuX2dldEV4dGVudCgpO251bGwhPXRoaXMuX2RvbWFpbk1pbj8ocj1yWzFdLHRoaXMuX2RvbWFpbk1pbj49ciYmKHI9dGhpcy5fZXhwYW5kU2luZ2xlVmFsdWVEb21haW4oW3RoaXMuX2RvbWFpbk1pbix0aGlzLl9kb21haW5NaW5dKVsxXSksdGhpcy5fc2V0RG9tYWluKFt0aGlzLl9kb21haW5NaW4scl0pKToKbnVsbCE9dGhpcy5fZG9tYWluTWF4PyhyPXJbMF0sdGhpcy5fZG9tYWluTWF4PD1yJiYocj10aGlzLl9leHBhbmRTaW5nbGVWYWx1ZURvbWFpbihbdGhpcy5fZG9tYWluTWF4LHRoaXMuX2RvbWFpbk1heF0pWzBdKSx0aGlzLl9zZXREb21haW4oW3IsdGhpcy5fZG9tYWluTWF4XSkpOnAucHJvdG90eXBlLl9hdXRvRG9tYWluSWZBdXRvbWF0aWNNb2RlLmNhbGwodGhpcyl9fTtxLnByb3RvdHlwZS5fZ2V0VW5ib3VuZGVkRXh0ZW50PWZ1bmN0aW9uKHIpe3ZvaWQgMD09PXImJihyPSExKTtyPXRoaXMuX2dldEFsbEluY2x1ZGVkVmFsdWVzKHIpO3ZhciB0PXRoaXMuX2RlZmF1bHRFeHRlbnQoKTswIT09ci5sZW5ndGgmJihyPVttLk1hdGgubWluKHIsdFswXSksbS5NYXRoLm1heChyLHRbMV0pXSx0PXRoaXMuX3BhZERvbWFpbihyKSk7cmV0dXJuIHR9O3EucHJvdG90eXBlLl9nZXRFeHRlbnQ9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLl9nZXRVbmJvdW5kZWRFeHRlbnQoKTtudWxsIT10aGlzLl9kb21haW5NaW4mJgooclswXT10aGlzLl9kb21haW5NaW4pO251bGwhPXRoaXMuX2RvbWFpbk1heCYmKHJbMV09dGhpcy5fZG9tYWluTWF4KTtyZXR1cm4gcn07cS5wcm90b3R5cGUuYWRkUGFkZGluZ0V4Y2VwdGlvbnNQcm92aWRlcj1mdW5jdGlvbihyKXt0aGlzLl9wYWRkaW5nRXhjZXB0aW9uc1Byb3ZpZGVycy5hZGQocik7dGhpcy5fYXV0b0RvbWFpbklmQXV0b21hdGljTW9kZSgpfTtxLnByb3RvdHlwZS5yZW1vdmVQYWRkaW5nRXhjZXB0aW9uc1Byb3ZpZGVyPWZ1bmN0aW9uKHIpe3RoaXMuX3BhZGRpbmdFeGNlcHRpb25zUHJvdmlkZXJzLmRlbGV0ZShyKTt0aGlzLl9hdXRvRG9tYWluSWZBdXRvbWF0aWNNb2RlKCl9O3EucHJvdG90eXBlLnBhZFByb3BvcnRpb249ZnVuY3Rpb24ocil7aWYobnVsbD09cilyZXR1cm4gdGhpcy5fcGFkUHJvcG9ydGlvbjtpZigwPnIpdGhyb3cgRXJyb3IoInBhZFByb3BvcnRpb24gbXVzdCBiZSBub24tbmVnYXRpdmUiKTt0aGlzLl9wYWRQcm9wb3J0aW9uPXI7dGhpcy5fYXV0b0RvbWFpbklmQXV0b21hdGljTW9kZSgpOwpyZXR1cm4gdGhpc307cS5wcm90b3R5cGUuX3BhZERvbWFpbj1mdW5jdGlvbihyKXt2YXIgdD10aGlzO2lmKHJbMF0udmFsdWVPZigpPT09clsxXS52YWx1ZU9mKCkpcmV0dXJuIHRoaXMuX2V4cGFuZFNpbmdsZVZhbHVlRG9tYWluKHIpO2lmKDA9PT10aGlzLl9wYWRQcm9wb3J0aW9uKXJldHVybiByO3ZhciB2PXRoaXMuX3BhZFByb3BvcnRpb24vMixBPXJbMF0seT1yWzFdLHg9ITEsQz0hMTt0aGlzLl9wYWRkaW5nRXhjZXB0aW9uc1Byb3ZpZGVycy5mb3JFYWNoKGZ1bmN0aW9uKEQpe0QodCkuZm9yRWFjaChmdW5jdGlvbihCKXtCLnZhbHVlT2YoKT09PUEudmFsdWVPZigpJiYoeD0hMCk7Qi52YWx1ZU9mKCk9PT15LnZhbHVlT2YoKSYmKEM9ITApfSl9KTt2YXIgRj10aGlzLl9iYWNraW5nU2NhbGVEb21haW4oKTt0aGlzLl9iYWNraW5nU2NhbGVEb21haW4ocik7cj14P0E6dGhpcy5pbnZlcnQodGhpcy5zY2FsZShBKS0odGhpcy5zY2FsZSh5KS10aGlzLnNjYWxlKEEpKSp2KTt2PUM/Cnk6dGhpcy5pbnZlcnQodGhpcy5zY2FsZSh5KSsodGhpcy5zY2FsZSh5KS10aGlzLnNjYWxlKEEpKSp2KTt0aGlzLl9iYWNraW5nU2NhbGVEb21haW4oRik7cmV0dXJuIHRoaXMuX3NuYXBwaW5nRG9tYWluRW5hYmxlZD90aGlzLl9uaWNlRG9tYWluKFtyLHZdKTpbcix2XX07cS5wcm90b3R5cGUuc25hcHBpbmdEb21haW5FbmFibGVkPWZ1bmN0aW9uKHIpe251bGwhPXImJih0aGlzLl9zbmFwcGluZ0RvbWFpbkVuYWJsZWQ9cix0aGlzLl9hdXRvRG9tYWluSWZBdXRvbWF0aWNNb2RlKCkpfTtxLnByb3RvdHlwZS5fZXhwYW5kU2luZ2xlVmFsdWVEb21haW49ZnVuY3Rpb24ocil7cmV0dXJuIHJ9O3EucHJvdG90eXBlLmludmVydD1mdW5jdGlvbigpe3Rocm93IEVycm9yKCJTdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZSBpbnZlcnQiKTt9O3EucHJvdG90eXBlLmRvbWFpbj1mdW5jdGlvbihyKXtudWxsIT1yJiYodGhpcy5fZG9tYWluTWluPXJbMF0sdGhpcy5fZG9tYWluTWF4PXJbMV0pOwpyZXR1cm4gcC5wcm90b3R5cGUuZG9tYWluLmNhbGwodGhpcyxyKX07cS5wcm90b3R5cGUuZG9tYWluTWluPWZ1bmN0aW9uKHIpe2lmKG51bGw9PXIpcmV0dXJuIHRoaXMuZG9tYWluKClbMF07dGhpcy5fZG9tYWluTWluPXI7dGhpcy5fYXV0b0RvbWFpbklmQXV0b21hdGljTW9kZSgpO3JldHVybiB0aGlzfTtxLnByb3RvdHlwZS5kb21haW5NYXg9ZnVuY3Rpb24ocil7aWYobnVsbD09cilyZXR1cm4gdGhpcy5kb21haW4oKVsxXTt0aGlzLl9kb21haW5NYXg9cjt0aGlzLl9hdXRvRG9tYWluSWZBdXRvbWF0aWNNb2RlKCk7cmV0dXJuIHRoaXN9O3EucHJvdG90eXBlLmV4dGVudE9mVmFsdWVzPWZ1bmN0aW9uKHIpe3I9bC5leHRlbnQoci5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIG0uTWF0aC5pc1ZhbGlkTnVtYmVyKCt0KX0pKTtyZXR1cm4gbnVsbD09clswXXx8bnVsbD09clsxXT9bXTpyfTtxLnByb3RvdHlwZS56b29tPWZ1bmN0aW9uKHIsdCl7dmFyIHY9dGhpczt0aGlzLmRvbWFpbih0aGlzLnJhbmdlKCkubWFwKGZ1bmN0aW9uKEEpe3JldHVybiB2LmludmVydChrLnpvb21PdXQoQSwKcix0KSl9KSl9O3EucHJvdG90eXBlLnBhbj1mdW5jdGlvbihyKXt2YXIgdD10aGlzO3RoaXMuZG9tYWluKHRoaXMucmFuZ2UoKS5tYXAoZnVuY3Rpb24odil7cmV0dXJuIHQuaW52ZXJ0KHYrcil9KSl9O3EucHJvdG90eXBlLnNjYWxlVHJhbnNmb3JtYXRpb249ZnVuY3Rpb24oKXt0aHJvdyBFcnJvcigiU3ViY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUgc2NhbGVUcmFuc2Zvcm1hdGlvbiIpO307cS5wcm90b3R5cGUuaW52ZXJ0ZWRUcmFuc2Zvcm1hdGlvbj1mdW5jdGlvbigpe3Rocm93IEVycm9yKCJTdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZSBpbnZlcnRlZFRyYW5zZm9ybWF0aW9uIik7fTtxLnByb3RvdHlwZS5nZXRUcmFuc2Zvcm1hdGlvbkV4dGVudD1mdW5jdGlvbigpe3Rocm93IEVycm9yKCJTdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZSBnZXRUcmFuc2Zvcm1hdGlvbkV4dGVudCIpO307cS5wcm90b3R5cGUuZ2V0VHJhbnNmb3JtYXRpb25Eb21haW49ZnVuY3Rpb24oKXt0aHJvdyBFcnJvcigiU3ViY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUgZ2V0VHJhbnNmb3JtYXRpb25Eb21haW4iKTsKfTtxLnByb3RvdHlwZS5zZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbj1mdW5jdGlvbigpe3Rocm93IEVycm9yKCJTdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZSBzZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbiIpO307cS5wcm90b3R5cGUuX3NldERvbWFpbj1mdW5jdGlvbihyKXtmdW5jdGlvbiB0KHYpe3JldHVybiBtLk1hdGguaXNOYU4odil8fEluZmluaXR5PT09dnx8LUluZmluaXR5PT09dn10KHJbMF0pfHx0KHJbMV0pP20uV2luZG93Lndhcm4oIldhcm5pbmc6IFF1YW50aXRhdGl2ZVNjYWxlcyBjYW5ub3QgdGFrZSBOYU4gb3IgSW5maW5pdHkgYXMgYSBkb21haW4gdmFsdWUuIElnbm9yaW5nLiIpOnAucHJvdG90eXBlLl9zZXREb21haW4uY2FsbCh0aGlzLHIpfTtxLnByb3RvdHlwZS5kZWZhdWx0VGlja3M9ZnVuY3Rpb24oKXt0aHJvdyBFcnJvcigiU3ViY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUgX2dldERlZmF1bHRUaWNrcyIpO307cS5wcm90b3R5cGUudGlja3M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdGlja0dlbmVyYXRvcih0aGlzKX07CnEucHJvdG90eXBlLl9uaWNlRG9tYWluPWZ1bmN0aW9uKCl7dGhyb3cgRXJyb3IoIlN1YmNsYXNzZXMgc2hvdWxkIG92ZXJyaWRlIF9uaWNlRG9tYWluIik7fTtxLnByb3RvdHlwZS5fZGVmYXVsdEV4dGVudD1mdW5jdGlvbigpe3Rocm93IEVycm9yKCJTdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZSBfZGVmYXVsdEV4dGVudCIpO307cS5wcm90b3R5cGUudGlja0dlbmVyYXRvcj1mdW5jdGlvbigpe3ZhciByPVBsb3R0YWJsZS5TY2FsZXMuVGlja0dlbmVyYXRvcnMuaW50ZWdlclRpY2tHZW5lcmF0b3IoKTtudWxsIT1yJiYodGhpcy5fdGlja0dlbmVyYXRvcj1yKX07cmV0dXJuIHF9KGYoMTcpLlNjYWxlKTtjLl9ERUZBVUxUX05VTV9USUNLUz0xMDtkLlF1YW50aXRhdGl2ZVNjYWxlPWN9LGZ1bmN0aW9uKGMsZCxmKXt2YXIgZz1mKDEpO2QuY29lcmNlRXh0ZXJuYWxEMz1mdW5jdGlvbihsKXtpZihudWxsPT1sLmF0dHJzKXtpZihudWxsPT1sLm5vZGVzKXt2YXIgaz1bXTtsLmVhY2goZnVuY3Rpb24oKXtrLnB1c2godGhpcyl9KTsKcmV0dXJuIGcuc2VsZWN0QWxsKGspfXJldHVybiBnLnNlbGVjdEFsbChsLm5vZGVzKCkpfXJldHVybiBsfX0sZnVuY3Rpb24oYyxkLGYpe2Z1bmN0aW9uIGcobCl7Zm9yKHZhciBrIGluIGwpZC5oYXNPd25Qcm9wZXJ0eShrKXx8KGRba109bFtrXSl9ZyhmKDgzKSk7ZyhmKDg0KSk7ZyhmKDg1KSl9LGZ1bmN0aW9uKGMsZCxmKXtmdW5jdGlvbiBnKGwpe2Zvcih2YXIgayBpbiBsKWQuaGFzT3duUHJvcGVydHkoayl8fChkW2tdPWxba10pfWcoZig0NCkpO2coZig0NSkpO2coZig0NikpO2coZigxOCkpO2coZig2KSk7ZyhmKDMzKSk7ZyhmKDM0KSk7ZyhmKDQ3KSk7ZyhmKDkpKTtnKGYoNDgpKX0sZnVuY3Rpb24oYyxkKXtjPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZigpe3ZhciBnPXRoaXM7dGhpcy5fYW5jaG9yQ2FsbGJhY2s9ZnVuY3Rpb24obCl7cmV0dXJuIGcuX2FuY2hvcihsKX07dGhpcy5fZW5hYmxlZD0hMH1mLnByb3RvdHlwZS5hdHRhY2hUbz1mdW5jdGlvbihnKXt0aGlzLl9kaXNjb25uZWN0KCk7CnRoaXMuX2NvbXBvbmVudEF0dGFjaGVkVG89Zzt0aGlzLl9jb25uZWN0KCk7cmV0dXJuIHRoaXN9O2YucHJvdG90eXBlLmRldGFjaEZyb209ZnVuY3Rpb24oKXt0aGlzLmRldGFjaCgpfTtmLnByb3RvdHlwZS5kZXRhY2g9ZnVuY3Rpb24oKXt0aGlzLl9kaXNjb25uZWN0KCk7dGhpcy5fY29tcG9uZW50QXR0YWNoZWRUbz1udWxsO3JldHVybiB0aGlzfTtmLnByb3RvdHlwZS5lbmFibGVkPWZ1bmN0aW9uKGcpe2lmKG51bGw9PWcpcmV0dXJuIHRoaXMuX2VuYWJsZWQ7KHRoaXMuX2VuYWJsZWQ9Zyk/dGhpcy5fY29ubmVjdCgpOnRoaXMuX2Rpc2Nvbm5lY3QoKTtyZXR1cm4gdGhpc307Zi5wcm90b3R5cGUuX2FuY2hvcj1mdW5jdGlvbigpe3RoaXMuX2lzQW5jaG9yZWQ9ITB9O2YucHJvdG90eXBlLl91bmFuY2hvcj1mdW5jdGlvbigpe3RoaXMuX2lzQW5jaG9yZWQ9ITF9O2YucHJvdG90eXBlLl90cmFuc2xhdGVUb0NvbXBvbmVudFNwYWNlPWZ1bmN0aW9uKGcpe3ZhciBsPXRoaXMuX2NvbXBvbmVudEF0dGFjaGVkVG8ub3JpZ2luVG9Sb290KCk7CnJldHVybnt4OmcueC1sLngseTpnLnktbC55fX07Zi5wcm90b3R5cGUuX2lzSW5zaWRlQ29tcG9uZW50PWZ1bmN0aW9uKGcpe3JldHVybiAwPD1nLngmJjA8PWcueSYmZy54PD10aGlzLl9jb21wb25lbnRBdHRhY2hlZFRvLndpZHRoKCkmJmcueTw9dGhpcy5fY29tcG9uZW50QXR0YWNoZWRUby5oZWlnaHQoKX07Zi5wcm90b3R5cGUuX2Nvbm5lY3Q9ZnVuY3Rpb24oKXtpZih0aGlzLmVuYWJsZWQoKSYmbnVsbCE9dGhpcy5fY29tcG9uZW50QXR0YWNoZWRUbyYmIXRoaXMuX2lzQW5jaG9yZWQpdGhpcy5fY29tcG9uZW50QXR0YWNoZWRUby5vbkFuY2hvcih0aGlzLl9hbmNob3JDYWxsYmFjayl9O2YucHJvdG90eXBlLl9kaXNjb25uZWN0PWZ1bmN0aW9uKCl7dGhpcy5faXNBbmNob3JlZCYmdGhpcy5fdW5hbmNob3IoKTtudWxsIT10aGlzLl9jb21wb25lbnRBdHRhY2hlZFRvJiZ0aGlzLl9jb21wb25lbnRBdHRhY2hlZFRvLm9mZkFuY2hvcih0aGlzLl9hbmNob3JDYWxsYmFjayl9O3JldHVybiBmfSgpOwpkLkludGVyYWN0aW9uPWN9LGZ1bmN0aW9uKGMsZCxmKXt2YXIgZz10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8ZnVuY3Rpb24ocSxyKXtmdW5jdGlvbiB0KCl7dGhpcy5jb25zdHJ1Y3Rvcj1xfWZvcih2YXIgdiBpbiByKXIuaGFzT3duUHJvcGVydHkodikmJihxW3ZdPXJbdl0pO3EucHJvdG90eXBlPW51bGw9PT1yP09iamVjdC5jcmVhdGUocik6KHQucHJvdG90eXBlPXIucHJvdG90eXBlLG5ldyB0KX0sbD1mKDMpLGs9ZigwKSxtPWYoNTIpLHA9ZigyKTtjPWZ1bmN0aW9uKHEpe2Z1bmN0aW9uIHIoKXt2YXIgdD1xLmNhbGwodGhpcyl8fHRoaXM7dC5fYXV0b0FkanVzdFhTY2FsZURvbWFpbj0hMTt0Ll9hdXRvQWRqdXN0WVNjYWxlRG9tYWluPSExO3QuX2RlZmVycmVkUmVuZGVyaW5nPSExO3QuX2FwcGx5RGVmZXJyZWRSZW5kZXJpbmdUcmFuc2Zvcm09ZnVuY3Rpb24odixBLHkseCl7dC5faXNBbmNob3JlZCYmKG51bGwhPXQuX3JlbmRlckFyZWEmJnQuX3JlbmRlckFyZWEuYXR0cigidHJhbnNmb3JtIiwKInRyYW5zbGF0ZSgiK3YrIiwgIitBKyIpIHNjYWxlKCIreSsiLCAiK3grIikiKSxudWxsIT10Ll9jYW52YXMmJnQuX2NhbnZhcy5zdHlsZSgidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrdisicHgsICIrQSsicHgpIHNjYWxlKCIreSsiLCAiK3grIikiKSl9O3QuYWRkQ2xhc3MoInh5LXBsb3QiKTt0Ll9hZGp1c3RZRG9tYWluT25DaGFuZ2VGcm9tWENhbGxiYWNrPWZ1bmN0aW9uKCl7cmV0dXJuIHQuX2FkanVzdFlEb21haW5PbkNoYW5nZUZyb21YKCl9O3QuX2FkanVzdFhEb21haW5PbkNoYW5nZUZyb21ZQ2FsbGJhY2s9ZnVuY3Rpb24oKXtyZXR1cm4gdC5fYWRqdXN0WERvbWFpbk9uQ2hhbmdlRnJvbVkoKX07dC5fcmVuZGVyQ2FsbGJhY2s9ZnVuY3Rpb24oKXtpZih0LmRlZmVycmVkUmVuZGVyaW5nKCkpe3ZhciB2PXQueCgpJiZ0LngoKS5zY2FsZSxBPXQueSgpJiZ0LnkoKS5zY2FsZTt0Ll9kZWZlcnJlZFJlbmRlcmVyLnVwZGF0ZURvbWFpbnModixBKX1lbHNlIHQucmVuZGVyKCl9Owp0Ll9kZWZlcnJlZFJlbmRlcmVyPW5ldyBtLkRlZmVycmVkUmVuZGVyZXIoZnVuY3Rpb24oKXtyZXR1cm4gdC5yZW5kZXIoKX0sdC5fYXBwbHlEZWZlcnJlZFJlbmRlcmluZ1RyYW5zZm9ybSk7cmV0dXJuIHR9ZyhyLHEpO3IucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3RoaXMuZGVmZXJyZWRSZW5kZXJpbmcoKSYmdGhpcy5fZGVmZXJyZWRSZW5kZXJlci5yZXNldFRyYW5zZm9ybXMoKTtyZXR1cm4gcS5wcm90b3R5cGUucmVuZGVyLmNhbGwodGhpcyl9O3IucHJvdG90eXBlLmRlZmVycmVkUmVuZGVyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RlZmVycmVkUmVuZGVyaW5nfTtyLnByb3RvdHlwZS54PWZ1bmN0aW9uKHQsdixBKXtpZihudWxsPT10KXJldHVybiB0aGlzLl9wcm9wZXJ0eUJpbmRpbmdzLmdldChyLl9YX0tFWSk7dGhpcy5fYmluZFByb3BlcnR5KHIuX1hfS0VZLHQsdixBKTt0PXRoaXMud2lkdGgoKTtudWxsIT12JiZudWxsIT10JiZ2LnJhbmdlKFswLHRdKTsKdGhpcy5fYXV0b0FkanVzdFlTY2FsZURvbWFpbiYmdGhpcy5fdXBkYXRlWUV4dGVudHNBbmRBdXRvZG9tYWluKCk7dGhpcy5yZW5kZXIoKTtyZXR1cm4gdGhpc307ci5wcm90b3R5cGUueT1mdW5jdGlvbih0LHYsQSl7aWYobnVsbD09dClyZXR1cm4gdGhpcy5fcHJvcGVydHlCaW5kaW5ncy5nZXQoci5fWV9LRVkpO3RoaXMuX2JpbmRQcm9wZXJ0eShyLl9ZX0tFWSx0LHYsQSk7dD10aGlzLmhlaWdodCgpO251bGwhPXYmJm51bGwhPXQmJih2IGluc3RhbmNlb2YgbC5DYXRlZ29yeT92LnJhbmdlKFswLHRdKTp2LnJhbmdlKFt0LDBdKSk7dGhpcy5fYXV0b0FkanVzdFhTY2FsZURvbWFpbiYmdGhpcy5fdXBkYXRlWEV4dGVudHNBbmRBdXRvZG9tYWluKCk7dGhpcy5yZW5kZXIoKTtyZXR1cm4gdGhpc307ci5wcm90b3R5cGUuX2ZpbHRlckZvclByb3BlcnR5PWZ1bmN0aW9uKHQpe3JldHVybiJ4Ij09PXQmJnRoaXMuX2F1dG9BZGp1c3RYU2NhbGVEb21haW4/dGhpcy5fbWFrZUZpbHRlckJ5UHJvcGVydHkoInkiKToKInkiPT09dCYmdGhpcy5fYXV0b0FkanVzdFlTY2FsZURvbWFpbj90aGlzLl9tYWtlRmlsdGVyQnlQcm9wZXJ0eSgieCIpOm51bGx9O3IucHJvdG90eXBlLl9tYWtlRmlsdGVyQnlQcm9wZXJ0eT1mdW5jdGlvbih0KXt0PXRoaXMuX3Byb3BlcnR5QmluZGluZ3MuZ2V0KHQpO2lmKG51bGwhPXQpe3ZhciB2PXQuYWNjZXNzb3IsQT10LnNjYWxlO2lmKG51bGwhPUEpcmV0dXJuIGZ1bmN0aW9uKHkseCxDKXt2YXIgRj1BLnJhbmdlKCk7cmV0dXJuIGsuTWF0aC5pblJhbmdlKEEuc2NhbGUodih5LHgsQykpLEZbMF0sRlsxXSl9fXJldHVybiBudWxsfTtyLnByb3RvdHlwZS5fdW5pbnN0YWxsU2NhbGVGb3JLZXk9ZnVuY3Rpb24odCx2KXtxLnByb3RvdHlwZS5fdW5pbnN0YWxsU2NhbGVGb3JLZXkuY2FsbCh0aGlzLHQsdik7dC5vZmZVcGRhdGUodj09PXIuX1hfS0VZP3RoaXMuX2FkanVzdFlEb21haW5PbkNoYW5nZUZyb21YQ2FsbGJhY2s6dGhpcy5fYWRqdXN0WERvbWFpbk9uQ2hhbmdlRnJvbVlDYWxsYmFjayl9OwpyLnByb3RvdHlwZS5faW5zdGFsbFNjYWxlRm9yS2V5PWZ1bmN0aW9uKHQsdil7cS5wcm90b3R5cGUuX2luc3RhbGxTY2FsZUZvcktleS5jYWxsKHRoaXMsdCx2KTt0Lm9uVXBkYXRlKHY9PT1yLl9YX0tFWT90aGlzLl9hZGp1c3RZRG9tYWluT25DaGFuZ2VGcm9tWENhbGxiYWNrOnRoaXMuX2FkanVzdFhEb21haW5PbkNoYW5nZUZyb21ZQ2FsbGJhY2spfTtyLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7cS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO3RoaXMueCgpLnNjYWxlJiZ0aGlzLngoKS5zY2FsZS5vZmZVcGRhdGUodGhpcy5fYWRqdXN0WURvbWFpbk9uQ2hhbmdlRnJvbVhDYWxsYmFjayk7dGhpcy55KCkuc2NhbGUmJnRoaXMueSgpLnNjYWxlLm9mZlVwZGF0ZSh0aGlzLl9hZGp1c3RYRG9tYWluT25DaGFuZ2VGcm9tWUNhbGxiYWNrKTtyZXR1cm4gdGhpc307ci5wcm90b3R5cGUuYXV0b3JhbmdlTW9kZT1mdW5jdGlvbih0KXtpZihudWxsPT10KXJldHVybiB0aGlzLl9hdXRvQWRqdXN0WFNjYWxlRG9tYWluPwoieCI6dGhpcy5fYXV0b0FkanVzdFlTY2FsZURvbWFpbj8ieSI6Im5vbmUiO3N3aXRjaCh0KXtjYXNlICJ4Ijp0aGlzLl9hdXRvQWRqdXN0WFNjYWxlRG9tYWluPSEwO3RoaXMuX2F1dG9BZGp1c3RZU2NhbGVEb21haW49ITE7dGhpcy5fYWRqdXN0WERvbWFpbk9uQ2hhbmdlRnJvbVkoKTticmVhaztjYXNlICJ5Ijp0aGlzLl9hdXRvQWRqdXN0WFNjYWxlRG9tYWluPSExO3RoaXMuX2F1dG9BZGp1c3RZU2NhbGVEb21haW49ITA7dGhpcy5fYWRqdXN0WURvbWFpbk9uQ2hhbmdlRnJvbVgoKTticmVhaztjYXNlICJub25lIjp0aGlzLl9hdXRvQWRqdXN0WVNjYWxlRG9tYWluPXRoaXMuX2F1dG9BZGp1c3RYU2NhbGVEb21haW49ITE7YnJlYWs7ZGVmYXVsdDp0aHJvdyBFcnJvcigiSW52YWxpZCBzY2FsZSBuYW1lICciK3QrIicsIG11c3QgYmUgJ3gnLCAneScgb3IgJ25vbmUnIik7fXJldHVybiB0aGlzfTtyLnByb3RvdHlwZS5jb21wdXRlTGF5b3V0PWZ1bmN0aW9uKHQsdixBKXtxLnByb3RvdHlwZS5jb21wdXRlTGF5b3V0LmNhbGwodGhpcywKdCx2LEEpO3Q9KHQ9dGhpcy54KCkpJiZ0LnNjYWxlO251bGwhPXQmJnQucmFuZ2UoWzAsdGhpcy53aWR0aCgpXSk7dD0odD10aGlzLnkoKSkmJnQuc2NhbGU7bnVsbCE9dCYmKHQgaW5zdGFuY2VvZiBsLkNhdGVnb3J5P3QucmFuZ2UoWzAsdGhpcy5oZWlnaHQoKV0pOnQucmFuZ2UoW3RoaXMuaGVpZ2h0KCksMF0pKTtyZXR1cm4gdGhpc307ci5wcm90b3R5cGUuX3VwZGF0ZVhFeHRlbnRzQW5kQXV0b2RvbWFpbj1mdW5jdGlvbigpe3ZhciB0PXRoaXMueCgpLnNjYWxlO251bGwhPXQmJnQuYXV0b0RvbWFpbigpfTtyLnByb3RvdHlwZS5fdXBkYXRlWUV4dGVudHNBbmRBdXRvZG9tYWluPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy55KCkuc2NhbGU7bnVsbCE9dCYmdC5hdXRvRG9tYWluKCl9O3IucHJvdG90eXBlLnNob3dBbGxEYXRhPWZ1bmN0aW9uKCl7dGhpcy5fdXBkYXRlWEV4dGVudHNBbmRBdXRvZG9tYWluKCk7dGhpcy5fdXBkYXRlWUV4dGVudHNBbmRBdXRvZG9tYWluKCk7cmV0dXJuIHRoaXN9OwpyLnByb3RvdHlwZS5fYWRqdXN0WURvbWFpbk9uQ2hhbmdlRnJvbVg9ZnVuY3Rpb24oKXt0aGlzLl9wcm9qZWN0b3JzUmVhZHkoKSYmdGhpcy5fYXV0b0FkanVzdFlTY2FsZURvbWFpbiYmdGhpcy5fdXBkYXRlWUV4dGVudHNBbmRBdXRvZG9tYWluKCl9O3IucHJvdG90eXBlLl9hZGp1c3RYRG9tYWluT25DaGFuZ2VGcm9tWT1mdW5jdGlvbigpe3RoaXMuX3Byb2plY3RvcnNSZWFkeSgpJiZ0aGlzLl9hdXRvQWRqdXN0WFNjYWxlRG9tYWluJiZ0aGlzLl91cGRhdGVYRXh0ZW50c0FuZEF1dG9kb21haW4oKX07ci5wcm90b3R5cGUuX3Byb2plY3RvcnNSZWFkeT1mdW5jdGlvbigpe3ZhciB0PXRoaXMueCgpLHY9dGhpcy55KCk7cmV0dXJuIG51bGwhPXQmJm51bGwhPXQuYWNjZXNzb3ImJm51bGwhPXYmJm51bGwhPXYuYWNjZXNzb3J9O3IucHJvdG90eXBlLl9waXhlbFBvaW50PWZ1bmN0aW9uKHQsdixBKXt2YXIgeT1wLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueCgpKSx4PXAuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy55KCkpOwpyZXR1cm57eDp5KHQsdixBKSx5OngodCx2LEEpfX07ci5wcm90b3R5cGUuX2dldERhdGFUb0RyYXc9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHkseCxDKXt2YXIgRj1wLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHYueCgpKSh5LHgsQyk7eT1wLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHYueSgpKSh5LHgsQyk7cmV0dXJuIGsuTWF0aC5pc1ZhbGlkTnVtYmVyKEYpJiZrLk1hdGguaXNWYWxpZE51bWJlcih5KX12YXIgdj10aGlzLEE9cS5wcm90b3R5cGUuX2dldERhdGFUb0RyYXcuY2FsbCh0aGlzKTt0aGlzLmRhdGFzZXRzKCkuZm9yRWFjaChmdW5jdGlvbih5KXtBLnNldCh5LEEuZ2V0KHkpLmZpbHRlcihmdW5jdGlvbih4LEMpe3JldHVybiB0KHgsQyx5KX0pKX0pO3JldHVybiBBfTtyZXR1cm4gcn0ocC5QbG90KTtjLl9YX0tFWT0ieCI7Yy5fWV9LRVk9InkiO2QuWFlQbG90PWN9LGZ1bmN0aW9uKGMsZCxmKXt2YXIgZz1mKDApO2M9ZnVuY3Rpb24oKXtmdW5jdGlvbiBsKCl7dGhpcy5fYXV0b0RvbWFpbkF1dG9tYXRpY2FsbHk9CiEwO3RoaXMuX2RvbWFpbk1vZGlmaWNhdGlvbkluUHJvZ3Jlc3M9ITE7dGhpcy5fdXBkYXRlSWQ9MDt0aGlzLl9jYWxsYmFja3M9bmV3IGcuQ2FsbGJhY2tTZXQ7dGhpcy5faW5jbHVkZWRWYWx1ZXNQcm92aWRlcnM9bmV3IGcuU2V0fWwucHJvdG90eXBlLmV4dGVudE9mVmFsdWVzPWZ1bmN0aW9uKCl7cmV0dXJuW119O2wucHJvdG90eXBlLl9nZXRBbGxJbmNsdWRlZFZhbHVlcz1mdW5jdGlvbihrKXt2YXIgbT10aGlzO3ZvaWQgMD09PWsmJihrPSExKTt2YXIgcD1bXTt0aGlzLl9pbmNsdWRlZFZhbHVlc1Byb3ZpZGVycy5mb3JFYWNoKGZ1bmN0aW9uKHEpe3E9cShtLGspO3A9cC5jb25jYXQocSl9KTtyZXR1cm4gcH07bC5wcm90b3R5cGUuX2dldEV4dGVudD1mdW5jdGlvbigpe3JldHVybltdfTtsLnByb3RvdHlwZS5vblVwZGF0ZT1mdW5jdGlvbihrKXt0aGlzLl9jYWxsYmFja3MuYWRkKGspO3JldHVybiB0aGlzfTtsLnByb3RvdHlwZS5vZmZVcGRhdGU9ZnVuY3Rpb24oayl7dGhpcy5fY2FsbGJhY2tzLmRlbGV0ZShrKTsKcmV0dXJuIHRoaXN9O2wucHJvdG90eXBlLl9kaXNwYXRjaFVwZGF0ZT1mdW5jdGlvbigpe3RoaXMuX3VwZGF0ZUlkKys7dGhpcy5fY2FsbGJhY2tzLmNhbGxDYWxsYmFja3ModGhpcyl9O2wucHJvdG90eXBlLmF1dG9Eb21haW49ZnVuY3Rpb24oKXt0aGlzLl9hdXRvRG9tYWluQXV0b21hdGljYWxseT0hMDt0aGlzLl9zZXREb21haW4odGhpcy5fZ2V0RXh0ZW50KCkpfTtsLnByb3RvdHlwZS5fYXV0b0RvbWFpbklmQXV0b21hdGljTW9kZT1mdW5jdGlvbigpe3RoaXMuX2F1dG9Eb21haW5BdXRvbWF0aWNhbGx5JiZ0aGlzLmF1dG9Eb21haW4oKX07bC5wcm90b3R5cGUuc2NhbGU9ZnVuY3Rpb24oKXt0aHJvdyBFcnJvcigiU3ViY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUgc2NhbGUiKTt9O2wucHJvdG90eXBlLnRpY2tzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tYWluKCl9O2wucHJvdG90eXBlLmRvbWFpbj1mdW5jdGlvbihrKXtpZihudWxsPT1rKXJldHVybiB0aGlzLl9nZXREb21haW4oKTsKdGhpcy5fYXV0b0RvbWFpbkF1dG9tYXRpY2FsbHk9ITE7dGhpcy5fc2V0RG9tYWluKGspO3JldHVybiB0aGlzfTtsLnByb3RvdHlwZS5fZ2V0RG9tYWluPWZ1bmN0aW9uKCl7dGhyb3cgRXJyb3IoIlN1YmNsYXNzZXMgc2hvdWxkIG92ZXJyaWRlIF9nZXREb21haW4iKTt9O2wucHJvdG90eXBlLl9zZXREb21haW49ZnVuY3Rpb24oayl7dGhpcy5fZG9tYWluTW9kaWZpY2F0aW9uSW5Qcm9ncmVzc3x8KHRoaXMuX2RvbWFpbk1vZGlmaWNhdGlvbkluUHJvZ3Jlc3M9ITAsdGhpcy5fYmFja2luZ1NjYWxlRG9tYWluKGspLHRoaXMuX2Rpc3BhdGNoVXBkYXRlKCksdGhpcy5fZG9tYWluTW9kaWZpY2F0aW9uSW5Qcm9ncmVzcz0hMSl9O2wucHJvdG90eXBlLl9iYWNraW5nU2NhbGVEb21haW49ZnVuY3Rpb24oKXt0aHJvdyBFcnJvcigiU3ViY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUgX2JhY2tpbmdEb21haW4iKTt9O2wucHJvdG90eXBlLnJhbmdlPWZ1bmN0aW9uKGspe2lmKG51bGw9PWspcmV0dXJuIHRoaXMuX2dldFJhbmdlKCk7CnRoaXMuX3NldFJhbmdlKGspO3JldHVybiB0aGlzfTtsLnByb3RvdHlwZS5fZ2V0UmFuZ2U9ZnVuY3Rpb24oKXt0aHJvdyBFcnJvcigiU3ViY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUgX2dldFJhbmdlIik7fTtsLnByb3RvdHlwZS5fc2V0UmFuZ2U9ZnVuY3Rpb24oKXt0aHJvdyBFcnJvcigiU3ViY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUgX3NldFJhbmdlIik7fTtsLnByb3RvdHlwZS5hZGRJbmNsdWRlZFZhbHVlc1Byb3ZpZGVyPWZ1bmN0aW9uKGspe3RoaXMuX2luY2x1ZGVkVmFsdWVzUHJvdmlkZXJzLmFkZChrKTt0aGlzLl9hdXRvRG9tYWluSWZBdXRvbWF0aWNNb2RlKCk7cmV0dXJuIHRoaXN9O2wucHJvdG90eXBlLnJlbW92ZUluY2x1ZGVkVmFsdWVzUHJvdmlkZXI9ZnVuY3Rpb24oayl7dGhpcy5faW5jbHVkZWRWYWx1ZXNQcm92aWRlcnMuZGVsZXRlKGspO3RoaXMuX2F1dG9Eb21haW5JZkF1dG9tYXRpY01vZGUoKX07bC5wcm90b3R5cGUudXBkYXRlSWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdXBkYXRlSWR9OwpyZXR1cm4gbH0oKTtkLlNjYWxlPWN9LGZ1bmN0aW9uKGMsZCxmKXtmdW5jdGlvbiBnKHIsdCx2LEEpe2Zvcih2YXIgeT17fSx4PTA7eDx0Lmxlbmd0aDt4Kyspe3ZhciBDPXRbeF07ci5oYXNPd25Qcm9wZXJ0eShDKSYmKHlbQ109cltDXSh2LEEpKX1yZXR1cm4geX1mdW5jdGlvbiBsKHIpe3JldHVybihudWxsIT1yWyJzdHJva2Utb3BhY2l0eSJdP3BhcnNlRmxvYXQoclsic3Ryb2tlLW9wYWNpdHkiXSk6MSkqKG51bGwhPXIub3BhY2l0eT9wYXJzZUZsb2F0KHIub3BhY2l0eSk6MSl9ZnVuY3Rpb24gayhyKXtyZXR1cm4obnVsbCE9clsiZmlsbC1vcGFjaXR5Il0/cGFyc2VGbG9hdChyWyJmaWxsLW9wYWNpdHkiXSk6MSkqKG51bGwhPXIub3BhY2l0eT9wYXJzZUZsb2F0KHIub3BhY2l0eSk6MSl9ZnVuY3Rpb24gbShyKXtyZXR1cm4gbnVsbCE9clsic3Ryb2tlLXdpZHRoIl0/cGFyc2VGbG9hdChyWyJzdHJva2Utd2lkdGgiXSk6MX1mdW5jdGlvbiBwKHIsdCl7aWYodC5zdHJva2Upe3IubGluZVdpZHRoPQptKHQpO3ZhciB2PXEuY29sb3IodC5zdHJva2UpO3Yub3BhY2l0eSo9bCh0KTtyLnN0cm9rZVN0eWxlPXYudG9TdHJpbmcoKTtyLnN0cm9rZSgpfXQuZmlsbCYmKHY9cS5jb2xvcih0LmZpbGwpLHYub3BhY2l0eSo9ayh0KSxyLmZpbGxTdHlsZT12LnRvU3RyaW5nKCksci5maWxsKCkpfXZhciBxPWYoMSk7Yz1mdW5jdGlvbigpe2Z1bmN0aW9uIHIodCx2KXt0aGlzLl9jb250ZXh0PXQ7dGhpcy5fZHJhd1N0ZXA9dn1yLnByb3RvdHlwZS5nZXREcmF3U3RlcD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kcmF3U3RlcH07ci5wcm90b3R5cGUuZHJhdz1mdW5jdGlvbih0LHYpe3Y9dlt2Lmxlbmd0aC0xXS5hdHRyVG9BcHBsaWVkUHJvamVjdG9yO3RoaXMuX2NvbnRleHQuc2F2ZSgpO3RoaXMuX2RyYXdTdGVwKHRoaXMuX2NvbnRleHQsdCx2KTt0aGlzLl9jb250ZXh0LnJlc3RvcmUoKX07ci5wcm90b3R5cGUuZ2V0VmlzdWFsUHJpbWl0aXZlcz1mdW5jdGlvbigpe3JldHVybltdfTtyLnByb3RvdHlwZS5nZXRWaXN1YWxQcmltaXRpdmVBdEluZGV4PQpmdW5jdGlvbigpe3JldHVybiBudWxsfTtyLnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24oKXt9O3JldHVybiByfSgpO2QuQ2FudmFzRHJhd2VyPWM7ZC5Db250ZXh0U3R5bGVBdHRycz0iZmlsbC1vcGFjaXR5IGZpbGwgb3BhY2l0eSBzdHJva2Utb3BhY2l0eSBzdHJva2Utd2lkdGggc3Ryb2tlIi5zcGxpdCgiICIpO2QucmVzb2x2ZUF0dHJpYnV0ZXNTdWJzZXRXaXRoU3R5bGVzPWZ1bmN0aW9uKHIsdCx2LEEpe3JldHVybiBnKHIsZC5Db250ZXh0U3R5bGVBdHRycy5jb25jYXQodCksdixBKX07ZC5yZXNvbHZlQXR0cmlidXRlcz1nO2QuZ2V0U3Ryb2tlV2lkdGg9bTtkLnJlbmRlckFyZWE9ZnVuY3Rpb24ocix0LHYsQSl7ci5zYXZlKCk7ci5iZWdpblBhdGgoKTt0LmNvbnRleHQocik7dCh2KTtyLmxpbmVKb2luPSJyb3VuZCI7cChyLEEpO3IucmVzdG9yZSgpfTtkLnJlbmRlckxpbmU9ZnVuY3Rpb24ocix0LHYsQSl7ci5zYXZlKCk7ci5iZWdpblBhdGgoKTt0LmNvbnRleHQocik7dCh2KTsKci5saW5lSm9pbj0icm91bmQiO3AocixBKTtyLnJlc3RvcmUoKX07ZC5yZW5kZXJQYXRoV2l0aFN0eWxlPXB9LGZ1bmN0aW9uKGMsZCxmKXtmdW5jdGlvbiBnKGwpe2Zvcih2YXIgayBpbiBsKWQuaGFzT3duUHJvcGVydHkoayl8fChkW2tdPWxba10pfWcoZig1MCkpO2coZigyNykpO2coZig1MSkpO2coZig5MykpO2coZig1MykpO2coZig5NCkpO2coZig5NSkpO2coZig5NikpO2coZig5NykpO2coZig5OCkpO2coZig5OSkpO2coZigxMDApKX0sZnVuY3Rpb24oYyxkLGYpe2Z1bmN0aW9uIGcobCl7Zm9yKHZhciBrIGluIGwpZC5oYXNPd25Qcm9wZXJ0eShrKXx8KGRba109bFtrXSl9ZyhmKDkyKSk7ZyhmKDkxKSk7Yz1mKDQ5KTtkLnNpZ249Yy5zaWdufSxmdW5jdGlvbihjLGQsZil7ZnVuY3Rpb24gZyhsKXtmb3IodmFyIGsgaW4gbClkLmhhc093blByb3BlcnR5KGspfHwoZFtrXT1sW2tdKX1nKGYoMTM0KSk7ZyhmKDEzNSkpO2coZigxMzYpKTtnKGYoMTM3KSl9LGZ1bmN0aW9uKGMsCmQsZil7dmFyIGc9dGhpcyYmdGhpcy5fX2V4dGVuZHN8fGZ1bmN0aW9uKHEscil7ZnVuY3Rpb24gdCgpe3RoaXMuY29uc3RydWN0b3I9cX1mb3IodmFyIHYgaW4gcilyLmhhc093blByb3BlcnR5KHYpJiYocVt2XT1yW3ZdKTtxLnByb3RvdHlwZT1udWxsPT09cj9PYmplY3QuY3JlYXRlKHIpOih0LnByb3RvdHlwZT1yLnByb3RvdHlwZSxuZXcgdCl9LGw9ZigxKSxrPWYoNSk7Yz1mKDQpO3ZhciBtPWYoOCkscD1mKDApO2Y9ZigxMCk7ZC5BeGlzT3JpZW50YXRpb249Zi5tYWtlRW51bShbImJvdHRvbSIsImxlZnQiLCJyaWdodCIsInRvcCJdKTtmPWZ1bmN0aW9uKHEpe2Z1bmN0aW9uIHIodCx2KXt2YXIgQT1xLmNhbGwodGhpcyl8fHRoaXM7QS5fZW5kVGlja0xlbmd0aD01O0EuX2lubmVyVGlja0xlbmd0aD01O0EuX3RpY2tMYWJlbFBhZGRpbmc9MTA7QS5fbWFyZ2luPTE1O0EuX3Nob3dFbmRUaWNrTGFiZWxzPSExO0EuX2Fubm90YXRpb25zRW5hYmxlZD0hMTtBLl9hbm5vdGF0aW9uVGllckNvdW50PQoxO2lmKG51bGw9PXR8fG51bGw9PXYpdGhyb3cgRXJyb3IoIkF4aXMgcmVxdWlyZXMgYSBzY2FsZSBhbmQgb3JpZW50YXRpb24iKTtBLl9zY2FsZT10O0Eub3JpZW50YXRpb24odik7QS5fc2V0RGVmYXVsdEFsaWdubWVudCgpO0EuYWRkQ2xhc3MoImF4aXMiKTtBLmlzSG9yaXpvbnRhbCgpP0EuYWRkQ2xhc3MoIngtYXhpcyIpOkEuYWRkQ2xhc3MoInktYXhpcyIpO0EuZm9ybWF0dGVyKG0uaWRlbnRpdHkoKSk7QS5fcmVzY2FsZUNhbGxiYWNrPWZ1bmN0aW9uKCl7cmV0dXJuIEEuX3Jlc2NhbGUoKX07QS5fc2NhbGUub25VcGRhdGUoQS5fcmVzY2FsZUNhbGxiYWNrKTtBLl9hbm5vdGF0ZWRUaWNrcz1bXTtBLl9hbm5vdGF0aW9uRm9ybWF0dGVyPW0uaWRlbnRpdHkoKTtyZXR1cm4gQX1nKHIscSk7ci5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3EucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTt0aGlzLl9zY2FsZS5vZmZVcGRhdGUodGhpcy5fcmVzY2FsZUNhbGxiYWNrKX07CnIucHJvdG90eXBlLnRpY2tMYWJlbERhdGFPbkVsZW1lbnQ9ZnVuY3Rpb24odCl7aWYobnVsbCE9dCl7Zm9yKHZhciB2O251bGwhPXQmJnQuY2xhc3NMaXN0JiZ2b2lkIDA9PT12Oyl0LmNsYXNzTGlzdC5jb250YWlucyhyLlRJQ0tfTEFCRUxfQ0xBU1MpP3Y9dDp0PXQucGFyZW50Tm9kZTtyZXR1cm4gdm9pZCAwPT09dD92b2lkIDA6bC5zZWxlY3QodCkuZGF0dW0oKX19O3IucHJvdG90eXBlLl9jb21wdXRlV2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWF4TGFiZWxUaWNrTGVuZ3RoKCl9O3IucHJvdG90eXBlLl9jb21wdXRlSGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21heExhYmVsVGlja0xlbmd0aCgpfTtyLnByb3RvdHlwZS5yZXF1ZXN0ZWRTcGFjZT1mdW5jdGlvbigpe3ZhciB0PTAsdj0wO2lmKHRoaXMuaXNIb3Jpem9udGFsKCkpe2lmKHY9dGhpcy5fY29tcHV0ZUhlaWdodCgpK3RoaXMuX21hcmdpbix0aGlzLmFubm90YXRpb25zRW5hYmxlZCgpKXt2YXIgQT0KdGhpcy5fYW5ub3RhdGlvbk1lYXN1cmVyLm1lYXN1cmUoKS5oZWlnaHQrMipyLl9BTk5PVEFUSU9OX0xBQkVMX1BBRERJTkc7dis9QSp0aGlzLmFubm90YXRpb25UaWVyQ291bnQoKX19ZWxzZSB0PXRoaXMuX2NvbXB1dGVXaWR0aCgpK3RoaXMuX21hcmdpbix0aGlzLmFubm90YXRpb25zRW5hYmxlZCgpJiYoQT10aGlzLl9hbm5vdGF0aW9uTWVhc3VyZXIubWVhc3VyZSgpLmhlaWdodCsyKnIuX0FOTk9UQVRJT05fTEFCRUxfUEFERElORyx0Kz1BKnRoaXMuYW5ub3RhdGlvblRpZXJDb3VudCgpKTtyZXR1cm57bWluV2lkdGg6dCxtaW5IZWlnaHQ6dn19O3IucHJvdG90eXBlLmZpeGVkSGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNIb3Jpem9udGFsKCl9O3IucHJvdG90eXBlLmZpeGVkV2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5pc0hvcml6b250YWwoKX07ci5wcm90b3R5cGUuX3Jlc2NhbGU9ZnVuY3Rpb24oKXt0aGlzLnJlbmRlcigpfTtyLnByb3RvdHlwZS5jb21wdXRlTGF5b3V0PQpmdW5jdGlvbih0LHYsQSl7cS5wcm90b3R5cGUuY29tcHV0ZUxheW91dC5jYWxsKHRoaXMsdCx2LEEpO3RoaXMuaXNIb3Jpem9udGFsKCk/dGhpcy5fc2NhbGUucmFuZ2UoWzAsdGhpcy53aWR0aCgpXSk6dGhpcy5fc2NhbGUucmFuZ2UoW3RoaXMuaGVpZ2h0KCksMF0pO3JldHVybiB0aGlzfTtyLnByb3RvdHlwZS5fc2l6ZUZyb21PZmZlcj1mdW5jdGlvbih0LHYpe3ZhciBBPXRoaXMucmVxdWVzdGVkU3BhY2UodCx2KTtyZXR1cm4gdGhpcy5pc0hvcml6b250YWwoKT97d2lkdGg6dCxoZWlnaHQ6QS5taW5IZWlnaHR9OntoZWlnaHQ6dix3aWR0aDpBLm1pbldpZHRofX07ci5wcm90b3R5cGUuX3NldHVwPWZ1bmN0aW9uKCl7cS5wcm90b3R5cGUuX3NldHVwLmNhbGwodGhpcyk7dGhpcy5fdGlja01hcmtDb250YWluZXI9dGhpcy5jb250ZW50KCkuYXBwZW5kKCJnIikuY2xhc3NlZChyLlRJQ0tfTUFSS19DTEFTUysiLWNvbnRhaW5lciIsITApO3RoaXMuX3RpY2tMYWJlbENvbnRhaW5lcj0KdGhpcy5jb250ZW50KCkuYXBwZW5kKCJnIikuY2xhc3NlZChyLlRJQ0tfTEFCRUxfQ0xBU1MrIi1jb250YWluZXIiLCEwKTt0aGlzLl9iYXNlbGluZT10aGlzLmNvbnRlbnQoKS5hcHBlbmQoImxpbmUiKS5jbGFzc2VkKCJiYXNlbGluZSIsITApO3RoaXMuX2Fubm90YXRpb25Db250YWluZXI9dGhpcy5jb250ZW50KCkuYXBwZW5kKCJnIikuY2xhc3NlZCgiYW5ub3RhdGlvbi1jb250YWluZXIiLCEwKTt0aGlzLl9hbm5vdGF0aW9uQ29udGFpbmVyLmFwcGVuZCgiZyIpLmNsYXNzZWQoImFubm90YXRpb24tbGluZS1jb250YWluZXIiLCEwKTt0aGlzLl9hbm5vdGF0aW9uQ29udGFpbmVyLmFwcGVuZCgiZyIpLmNsYXNzZWQoImFubm90YXRpb24tY2lyY2xlLWNvbnRhaW5lciIsITApO3RoaXMuX2Fubm90YXRpb25Db250YWluZXIuYXBwZW5kKCJnIikuY2xhc3NlZCgiYW5ub3RhdGlvbi1yZWN0LWNvbnRhaW5lciIsITApO3ZhciB0PXRoaXMuX2Fubm90YXRpb25Db250YWluZXIuYXBwZW5kKCJnIikuY2xhc3NlZCgiYW5ub3RhdGlvbi1sYWJlbC1jb250YWluZXIiLAohMCk7dD1uZXcgay5TdmdDb250ZXh0KHQubm9kZSgpKTt0aGlzLl9hbm5vdGF0aW9uTWVhc3VyZXI9bmV3IGsuQ2FjaGVNZWFzdXJlcih0KTt0aGlzLl9hbm5vdGF0aW9uV3JpdGVyPW5ldyBrLldyaXRlcih0aGlzLl9hbm5vdGF0aW9uTWVhc3VyZXIsdCl9O3IucHJvdG90eXBlLl9nZXRUaWNrVmFsdWVzPWZ1bmN0aW9uKCl7cmV0dXJuW119O3IucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fZ2V0VGlja1ZhbHVlcygpLHY9dGhpcy5fdGlja01hcmtDb250YWluZXIuc2VsZWN0QWxsKCIuIityLlRJQ0tfTUFSS19DTEFTUykuZGF0YSh0KSxBPXYuZW50ZXIoKS5hcHBlbmQoImxpbmUiKS5jbGFzc2VkKHIuVElDS19NQVJLX0NMQVNTLCEwKS5tZXJnZSh2KTtBLmF0dHJzKHRoaXMuX2dlbmVyYXRlVGlja01hcmtBdHRySGFzaCgpKTtsLnNlbGVjdChBLm5vZGVzKClbMF0pLmNsYXNzZWQoci5FTkRfVElDS19NQVJLX0NMQVNTLCEwKS5hdHRycyh0aGlzLl9nZW5lcmF0ZVRpY2tNYXJrQXR0ckhhc2goITApKTsKbC5zZWxlY3QoQS5ub2RlcygpW3QubGVuZ3RoLTFdKS5jbGFzc2VkKHIuRU5EX1RJQ0tfTUFSS19DTEFTUywhMCkuYXR0cnModGhpcy5fZ2VuZXJhdGVUaWNrTWFya0F0dHJIYXNoKCEwKSk7di5leGl0KCkucmVtb3ZlKCk7dGhpcy5fYmFzZWxpbmUuYXR0cnModGhpcy5fZ2VuZXJhdGVCYXNlbGluZUF0dHJIYXNoKCkpO3RoaXMuYW5ub3RhdGlvbnNFbmFibGVkKCk/dGhpcy5fZHJhd0Fubm90YXRpb25zKCk6dGhpcy5fcmVtb3ZlQW5ub3RhdGlvbnMoKTtyZXR1cm4gdGhpc307ci5wcm90b3R5cGUuYW5ub3RhdGVkVGlja3M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYW5ub3RhdGVkVGlja3N9O3IucHJvdG90eXBlLmFubm90YXRpb25Gb3JtYXR0ZXI9ZnVuY3Rpb24odCl7aWYobnVsbD09dClyZXR1cm4gdGhpcy5fYW5ub3RhdGlvbkZvcm1hdHRlcjt0aGlzLl9hbm5vdGF0aW9uRm9ybWF0dGVyPXQ7dGhpcy5yZW5kZXIoKTtyZXR1cm4gdGhpc307ci5wcm90b3R5cGUuYW5ub3RhdGlvbnNFbmFibGVkPQpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hbm5vdGF0aW9uc0VuYWJsZWR9O3IucHJvdG90eXBlLmFubm90YXRpb25UaWVyQ291bnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYW5ub3RhdGlvblRpZXJDb3VudH07ci5wcm90b3R5cGUuX2RyYXdBbm5vdGF0aW9ucz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoaGEpe3N3aXRjaChDLm9yaWVudGF0aW9uKCkpe2Nhc2UgImJvdHRvbSI6Y2FzZSAicmlnaHQiOnJldHVybiB5KGhhKTtjYXNlICJ0b3AiOmNhc2UgImxlZnQiOnJldHVybiB5KGhhKS1ELmdldChoYSkuaGVpZ2h0fX1mdW5jdGlvbiB2KGhhKXtyZXR1cm4gTC5oYXMoaGEpPyJoaWRkZW4iOiJ2aXNpYmxlIn1mdW5jdGlvbiBBKGhhKXtyZXR1cm4gQy5fc2NhbGUuc2NhbGUoaGEpfWZ1bmN0aW9uIHkoaGEpe3N3aXRjaChDLm9yaWVudGF0aW9uKCkpe2Nhc2UgImJvdHRvbSI6Y2FzZSAicmlnaHQiOnJldHVybiBLLmdldChoYSkqRytQO2Nhc2UgInRvcCI6Y2FzZSAibGVmdCI6cmV0dXJuIEotClAtSy5nZXQoaGEpKkd9fWZ1bmN0aW9uIHgoaGEsWCxjYSl7aGE9aGEuc2VsZWN0QWxsKCIuIitjYSkuZGF0YShCKTtYPWhhLmVudGVyKCkuYXBwZW5kKFgpLmNsYXNzZWQoY2EsITApLm1lcmdlKGhhKTtoYS5leGl0KCkucmVtb3ZlKCk7cmV0dXJuIFh9dmFyIEM9dGhpcyxGPXIuX0FOTk9UQVRJT05fTEFCRUxfUEFERElORyxEPW5ldyBwLk1hcCxCPXRoaXMuX2Fubm90YXRlZFRpY2tzVG9SZW5kZXIoKTtCLmZvckVhY2goZnVuY3Rpb24oaGEpe3ZhciBYPUMuX2Fubm90YXRpb25NZWFzdXJlci5tZWFzdXJlKEMuYW5ub3RhdGlvbkZvcm1hdHRlcigpKGhhKSk7RC5zZXQoaGEse3dpZHRoOlgud2lkdGgrMipGLGhlaWdodDpYLmhlaWdodCsyKkZ9KX0pO3ZhciBHPXRoaXMuX2Fubm90YXRpb25NZWFzdXJlci5tZWFzdXJlKCkuaGVpZ2h0KzIqRixLPXRoaXMuX2Fubm90YXRpb25Ub1RpZXIoRCksTD1uZXcgcC5TZXQsSj10aGlzLmlzSG9yaXpvbnRhbCgpP3RoaXMuaGVpZ2h0KCk6dGhpcy53aWR0aCgpLApQPXRoaXMuX2NvcmVTaXplKCksUz1NYXRoLm1pbih0aGlzLmFubm90YXRpb25UaWVyQ291bnQoKSxNYXRoLmZsb29yKChKLVApL0cpKTtLLmZvckVhY2goZnVuY3Rpb24oaGEsWCl7KC0xPT09aGF8fGhhPj1TKSYmTC5hZGQoWCl9KTtzd2l0Y2godGhpcy5vcmllbnRhdGlvbigpKXtjYXNlICJib3R0b20iOmNhc2UgInJpZ2h0Ijp2YXIgTj0wO2JyZWFrO2Nhc2UgInRvcCI6Tj10aGlzLmhlaWdodCgpO2JyZWFrO2Nhc2UgImxlZnQiOk49dGhpcy53aWR0aCgpfXZhciBUPXRoaXMuaXNIb3Jpem9udGFsKCk7eCh0aGlzLl9hbm5vdGF0aW9uQ29udGFpbmVyLnNlbGVjdCgiLmFubm90YXRpb24tbGluZS1jb250YWluZXIiKSwibGluZSIsci5BTk5PVEFUSU9OX0xJTkVfQ0xBU1MpLmF0dHJzKHt4MTpUP0E6Tix4MjpUP0E6eSx5MTpUP046QSx5MjpUP3k6QSx2aXNpYmlsaXR5OnZ9KTt4KHRoaXMuX2Fubm90YXRpb25Db250YWluZXIuc2VsZWN0KCIuYW5ub3RhdGlvbi1jaXJjbGUtY29udGFpbmVyIiksCiJjaXJjbGUiLHIuQU5OT1RBVElPTl9DSVJDTEVfQ0xBU1MpLmF0dHJzKHtjeDpUP0E6TixjeTpUP046QSxyOjN9KTt4KHRoaXMuX2Fubm90YXRpb25Db250YWluZXIuc2VsZWN0KCIuYW5ub3RhdGlvbi1yZWN0LWNvbnRhaW5lciIpLCJyZWN0IixyLkFOTk9UQVRJT05fUkVDVF9DTEFTUykuYXR0cnMoe3g6VD9BOnQseTpUP3Q6QSx3aWR0aDpUP2Z1bmN0aW9uKGhhKXtyZXR1cm4gRC5nZXQoaGEpLndpZHRofTpmdW5jdGlvbihoYSl7cmV0dXJuIEQuZ2V0KGhhKS5oZWlnaHR9LGhlaWdodDpUP2Z1bmN0aW9uKGhhKXtyZXR1cm4gRC5nZXQoaGEpLmhlaWdodH06ZnVuY3Rpb24oaGEpe3JldHVybiBELmdldChoYSkud2lkdGh9LHZpc2liaWxpdHk6dn0pO3ZhciBZPXRoaXMuX2Fubm90YXRpb25Xcml0ZXIsYWE9dGhpcy5hbm5vdGF0aW9uRm9ybWF0dGVyKCk7Tj14KHRoaXMuX2Fubm90YXRpb25Db250YWluZXIuc2VsZWN0KCIuYW5ub3RhdGlvbi1sYWJlbC1jb250YWluZXIiKSwiZyIsci5BTk5PVEFUSU9OX0xBQkVMX0NMQVNTKTsKTi5zZWxlY3RBbGwoIi50ZXh0LWNvbnRhaW5lciIpLnJlbW92ZSgpO04uYXR0cnMoe3RyYW5zZm9ybTpmdW5jdGlvbihoYSl7dmFyIFg9VD9BKGhhKTp0KGhhKTtoYT1UP3QoaGEpOkEoaGEpO3JldHVybiJ0cmFuc2xhdGUoIitYKyIsIitoYSsiKSJ9LHZpc2liaWxpdHk6dn0pLmVhY2goZnVuY3Rpb24oaGEpe1kud3JpdGUoYWEoaGEpLFQ/RC5nZXQoaGEpLndpZHRoOkQuZ2V0KGhhKS5oZWlnaHQsVD9ELmdldChoYSkuaGVpZ2h0OkQuZ2V0KGhhKS53aWR0aCx7eEFsaWduOiJjZW50ZXIiLHlBbGlnbjoiY2VudGVyIix0ZXh0Um90YXRpb246VD8wOjkwfSxsLnNlbGVjdCh0aGlzKS5ub2RlKCkpfSl9O3IucHJvdG90eXBlLl9hbm5vdGF0ZWRUaWNrc1RvUmVuZGVyPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyx2PXRoaXMuX3NjYWxlLnJhbmdlKCk7cmV0dXJuIHAuQXJyYXkudW5pcSh0aGlzLmFubm90YXRlZFRpY2tzKCkuZmlsdGVyKGZ1bmN0aW9uKEEpe3JldHVybiBudWxsPT1BPyExOnAuTWF0aC5pblJhbmdlKHQuX3NjYWxlLnNjYWxlKEEpLAp2WzBdLHZbMV0pfSkpfTtyLnByb3RvdHlwZS5fY29yZVNpemU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmlzSG9yaXpvbnRhbCgpP3RoaXMuaGVpZ2h0KCk6dGhpcy53aWR0aCgpLHY9dGhpcy5pc0hvcml6b250YWwoKT90aGlzLl9jb21wdXRlSGVpZ2h0KCk6dGhpcy5fY29tcHV0ZVdpZHRoKCk7cmV0dXJuIE1hdGgubWluKHYsdCl9O3IucHJvdG90eXBlLl9hbm5vdGF0aW9uVGllckhlaWdodD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hbm5vdGF0aW9uTWVhc3VyZXIubWVhc3VyZSgpLmhlaWdodCsyKnIuX0FOTk9UQVRJT05fTEFCRUxfUEFERElOR307ci5wcm90b3R5cGUuX2Fubm90YXRpb25Ub1RpZXI9ZnVuY3Rpb24odCl7dmFyIHY9dGhpcyxBPVtbXV0seT1uZXcgcC5NYXAseD10aGlzLmlzSG9yaXpvbnRhbCgpP3RoaXMud2lkdGgoKTp0aGlzLmhlaWdodCgpO3RoaXMuX2Fubm90YXRlZFRpY2tzVG9SZW5kZXIoKS5mb3JFYWNoKGZ1bmN0aW9uKEMpe3ZhciBGPXYuX3NjYWxlLnNjYWxlKEMpLApEPXQuZ2V0KEMpLndpZHRoO2lmKDA+Rnx8RitEPngpeS5zZXQoQywtMSk7ZWxzZXtmb3IodmFyIEI9ZnVuY3Rpb24oSyl7cmV0dXJuIEFbS10uc29tZShmdW5jdGlvbihMKXt2YXIgSj12Ll9zY2FsZS5zY2FsZShMKTtMPXQuZ2V0KEwpLndpZHRoO3JldHVybiBGK0Q+PUomJkY8PUorTH0pfSxHPTA7QihHKTspRysrLEEubGVuZ3RoPT09RyYmQS5wdXNoKFtdKTtBW0ddLnB1c2goQyk7eS5zZXQoQyxHKX19KTtyZXR1cm4geX07ci5wcm90b3R5cGUuX3JlbW92ZUFubm90YXRpb25zPWZ1bmN0aW9uKCl7dGhpcy5fYW5ub3RhdGlvbkNvbnRhaW5lci5zZWxlY3RBbGwoIi5hbm5vdGF0aW9uLWxpbmUiKS5yZW1vdmUoKTt0aGlzLl9hbm5vdGF0aW9uQ29udGFpbmVyLnNlbGVjdEFsbCgiLmFubm90YXRpb24tY2lyY2xlIikucmVtb3ZlKCk7dGhpcy5fYW5ub3RhdGlvbkNvbnRhaW5lci5zZWxlY3RBbGwoIi5hbm5vdGF0aW9uLXJlY3QiKS5yZW1vdmUoKTt0aGlzLl9hbm5vdGF0aW9uQ29udGFpbmVyLnNlbGVjdEFsbCgiLmFubm90YXRpb24tbGFiZWwiKS5yZW1vdmUoKX07CnIucHJvdG90eXBlLl9nZW5lcmF0ZUJhc2VsaW5lQXR0ckhhc2g9ZnVuY3Rpb24oKXt2YXIgdD17eDE6MCx5MTowLHgyOjAseTI6MH07c3dpdGNoKHRoaXMuX29yaWVudGF0aW9uKXtjYXNlICJib3R0b20iOnQueDI9dGhpcy53aWR0aCgpO2JyZWFrO2Nhc2UgInRvcCI6dC54Mj10aGlzLndpZHRoKCk7dC55MT10aGlzLmhlaWdodCgpO3QueTI9dGhpcy5oZWlnaHQoKTticmVhaztjYXNlICJsZWZ0Ijp0LngxPXRoaXMud2lkdGgoKTt0LngyPXRoaXMud2lkdGgoKTt0LnkyPXRoaXMuaGVpZ2h0KCk7YnJlYWs7Y2FzZSAicmlnaHQiOnQueTI9dGhpcy5oZWlnaHQoKX1yZXR1cm4gdH07ci5wcm90b3R5cGUuX2dlbmVyYXRlVGlja01hcmtBdHRySGFzaD1mdW5jdGlvbih0KXtmdW5jdGlvbiB2KHgpe3JldHVybiBBLl9zY2FsZS5zY2FsZSh4KX12YXIgQT10aGlzO3ZvaWQgMD09PXQmJih0PSExKTt2YXIgeT17eDE6MCx5MTowLHgyOjAseTI6MH07dGhpcy5pc0hvcml6b250YWwoKT8oeS54MT0Kdix5LngyPXYpOih5LnkxPXYseS55Mj12KTt0PXQ/dGhpcy5fZW5kVGlja0xlbmd0aDp0aGlzLl9pbm5lclRpY2tMZW5ndGg7c3dpdGNoKHRoaXMuX29yaWVudGF0aW9uKXtjYXNlICJib3R0b20iOnkueTI9dDticmVhaztjYXNlICJ0b3AiOnkueTE9dGhpcy5oZWlnaHQoKTt5LnkyPXRoaXMuaGVpZ2h0KCktdDticmVhaztjYXNlICJsZWZ0Ijp5LngxPXRoaXMud2lkdGgoKTt5LngyPXRoaXMud2lkdGgoKS10O2JyZWFrO2Nhc2UgInJpZ2h0Ijp5LngyPXR9cmV0dXJuIHl9O3IucHJvdG90eXBlLl9zZXREZWZhdWx0QWxpZ25tZW50PWZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX29yaWVudGF0aW9uKXtjYXNlICJib3R0b20iOnRoaXMueUFsaWdubWVudCgidG9wIik7YnJlYWs7Y2FzZSAidG9wIjp0aGlzLnlBbGlnbm1lbnQoImJvdHRvbSIpO2JyZWFrO2Nhc2UgImxlZnQiOnRoaXMueEFsaWdubWVudCgicmlnaHQiKTticmVhaztjYXNlICJyaWdodCI6dGhpcy54QWxpZ25tZW50KCJsZWZ0Iil9fTsKci5wcm90b3R5cGUuaXNIb3Jpem9udGFsPWZ1bmN0aW9uKCl7cmV0dXJuInRvcCI9PT10aGlzLl9vcmllbnRhdGlvbnx8ImJvdHRvbSI9PT10aGlzLl9vcmllbnRhdGlvbn07ci5wcm90b3R5cGUuZ2V0U2NhbGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2NhbGV9O3IucHJvdG90eXBlLmZvcm1hdHRlcj1mdW5jdGlvbih0KXtpZihudWxsPT10KXJldHVybiB0aGlzLl9mb3JtYXR0ZXI7dGhpcy5fZm9ybWF0dGVyPXQ7dGhpcy5yZWRyYXcoKTtyZXR1cm4gdGhpc307ci5wcm90b3R5cGUuaW5uZXJUaWNrTGVuZ3RoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lubmVyVGlja0xlbmd0aH07ci5wcm90b3R5cGUuZW5kVGlja0xlbmd0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbmRUaWNrTGVuZ3RofTtyLnByb3RvdHlwZS5fbWF4TGFiZWxUaWNrTGVuZ3RoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2hvd0VuZFRpY2tMYWJlbHMoKT9NYXRoLm1heCh0aGlzLmlubmVyVGlja0xlbmd0aCgpLAp0aGlzLmVuZFRpY2tMZW5ndGgoKSk6dGhpcy5pbm5lclRpY2tMZW5ndGgoKX07ci5wcm90b3R5cGUudGlja0xhYmVsUGFkZGluZz1mdW5jdGlvbih0KXtpZihudWxsPT10KXJldHVybiB0aGlzLl90aWNrTGFiZWxQYWRkaW5nO2lmKDA+dCl0aHJvdyBFcnJvcigidGljayBsYWJlbCBwYWRkaW5nIG11c3QgYmUgcG9zaXRpdmUiKTt0aGlzLl90aWNrTGFiZWxQYWRkaW5nPXQ7dGhpcy5yZWRyYXcoKTtyZXR1cm4gdGhpc307ci5wcm90b3R5cGUubWFyZ2luPWZ1bmN0aW9uKHQpe2lmKG51bGw9PXQpcmV0dXJuIHRoaXMuX21hcmdpbjtpZigwPnQpdGhyb3cgRXJyb3IoIm1hcmdpbiBzaXplIG11c3QgYmUgcG9zaXRpdmUiKTt0aGlzLl9tYXJnaW49dDt0aGlzLnJlZHJhdygpO3JldHVybiB0aGlzfTtyLnByb3RvdHlwZS5vcmllbnRhdGlvbj1mdW5jdGlvbih0KXtpZihudWxsPT10KXJldHVybiB0aGlzLl9vcmllbnRhdGlvbjt0PXQudG9Mb3dlckNhc2UoKTtpZigidG9wIiE9PXQmJiJib3R0b20iIT09CnQmJiJsZWZ0IiE9PXQmJiJyaWdodCIhPT10KXRocm93IEVycm9yKCJ1bnN1cHBvcnRlZCBvcmllbnRhdGlvbiIpO3RoaXMuX29yaWVudGF0aW9uPXQ7dGhpcy5yZWRyYXcoKTtyZXR1cm4gdGhpc307ci5wcm90b3R5cGUuc2hvd0VuZFRpY2tMYWJlbHM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2hvd0VuZFRpY2tMYWJlbHN9O3IucHJvdG90eXBlLl9zaG93QWxsVGlja01hcmtzPWZ1bmN0aW9uKCl7dGhpcy5fdGlja01hcmtDb250YWluZXIuc2VsZWN0QWxsKCIuIityLlRJQ0tfTUFSS19DTEFTUykuZWFjaChmdW5jdGlvbigpe2wuc2VsZWN0KHRoaXMpLnN0eWxlKCJ2aXNpYmlsaXR5IiwiaW5oZXJpdCIpfSl9O3IucHJvdG90eXBlLl9zaG93QWxsVGlja0xhYmVscz1mdW5jdGlvbigpe3RoaXMuX3RpY2tMYWJlbENvbnRhaW5lci5zZWxlY3RBbGwoIi4iK3IuVElDS19MQUJFTF9DTEFTUykuZWFjaChmdW5jdGlvbigpe2wuc2VsZWN0KHRoaXMpLnN0eWxlKCJ2aXNpYmlsaXR5IiwiaW5oZXJpdCIpfSl9OwpyLnByb3RvdHlwZS5faGlkZU92ZXJmbG93aW5nVGlja0xhYmVscz1mdW5jdGlvbigpe3ZhciB0PXRoaXMuZWxlbWVudCgpLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx2PXRoaXMuX3RpY2tMYWJlbENvbnRhaW5lci5zZWxlY3RBbGwoIi4iK3IuVElDS19MQUJFTF9DTEFTUyk7di5lbXB0eSgpfHx2LmVhY2goZnVuY3Rpb24oKXtwLkRPTS5jbGllbnRSZWN0SW5zaWRlKHRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksdCl8fGwuc2VsZWN0KHRoaXMpLnN0eWxlKCJ2aXNpYmlsaXR5IiwiaGlkZGVuIil9KX07ci5wcm90b3R5cGUuX2hpZGVUaWNrTWFya3NXaXRob3V0TGFiZWw9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl90aWNrTWFya0NvbnRhaW5lci5zZWxlY3RBbGwoIi4iK3IuVElDS19NQVJLX0NMQVNTKSx2PXRoaXMuX3RpY2tMYWJlbENvbnRhaW5lci5zZWxlY3RBbGwoIi4iK3IuVElDS19MQUJFTF9DTEFTUykuZmlsdGVyKGZ1bmN0aW9uKCl7dmFyIEE9bC5zZWxlY3QodGhpcykuc3R5bGUoInZpc2liaWxpdHkiKTsKcmV0dXJuImluaGVyaXQiPT09QXx8InZpc2libGUiPT09QX0pLmRhdGEoKTt0LmVhY2goZnVuY3Rpb24oQSl7LTE9PT12LmluZGV4T2YoQSkmJmwuc2VsZWN0KHRoaXMpLnN0eWxlKCJ2aXNpYmlsaXR5IiwiaGlkZGVuIil9KX07ci5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlPWZ1bmN0aW9uKCl7cS5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlLmNhbGwodGhpcyk7dGhpcy5fYW5ub3RhdGlvbk1lYXN1cmVyLnJlc2V0KCl9O3JldHVybiByfShjLkNvbXBvbmVudCk7Zi5FTkRfVElDS19NQVJLX0NMQVNTPSJlbmQtdGljay1tYXJrIjtmLlRJQ0tfTUFSS19DTEFTUz0idGljay1tYXJrIjtmLlRJQ0tfTEFCRUxfQ0xBU1M9InRpY2stbGFiZWwiO2YuQU5OT1RBVElPTl9MSU5FX0NMQVNTPSJhbm5vdGF0aW9uLWxpbmUiO2YuQU5OT1RBVElPTl9SRUNUX0NMQVNTPSJhbm5vdGF0aW9uLXJlY3QiO2YuQU5OT1RBVElPTl9DSVJDTEVfQ0xBU1M9ImFubm90YXRpb24tY2lyY2xlIjtmLkFOTk9UQVRJT05fTEFCRUxfQ0xBU1M9CiJhbm5vdGF0aW9uLWxhYmVsIjtmLl9BTk5PVEFUSU9OX0xBQkVMX1BBRERJTkc9NDtkLkF4aXM9Zn0sZnVuY3Rpb24oYyxkKXtkLlNIT1dfV0FSTklOR1M9ITA7ZC5BRERfVElUTEVfRUxFTUVOVFM9ITB9LGZ1bmN0aW9uKGMsZCxmKXt2YXIgZz1mKDApO2M9ZnVuY3Rpb24oKXtmdW5jdGlvbiBsKCl7dGhpcy5fZXZlbnRUb1Byb2Nlc3NpbmdGdW5jdGlvbj17fTt0aGlzLl9ldmVudFRhcmdldD1kb2N1bWVudDt0aGlzLl9ldmVudE5hbWVUb0NhbGxiYWNrU2V0PXt9O3RoaXMuX2Nvbm5lY3RlZD0hMX1sLnByb3RvdHlwZS5faGFzTm9DYWxsYmFja3M9ZnVuY3Rpb24oKXtmb3IodmFyIGs9T2JqZWN0LmtleXModGhpcy5fZXZlbnROYW1lVG9DYWxsYmFja1NldCksbT0wO208ay5sZW5ndGg7bSsrKWlmKDAhPT10aGlzLl9ldmVudE5hbWVUb0NhbGxiYWNrU2V0W2tbbV1dLnNpemUpcmV0dXJuITE7cmV0dXJuITB9O2wucHJvdG90eXBlLl9jb25uZWN0PWZ1bmN0aW9uKCl7dmFyIGs9dGhpczsKdGhpcy5fY29ubmVjdGVkfHwoT2JqZWN0LmtleXModGhpcy5fZXZlbnRUb1Byb2Nlc3NpbmdGdW5jdGlvbikuZm9yRWFjaChmdW5jdGlvbihtKXtrLl9ldmVudFRhcmdldC5hZGRFdmVudExpc3RlbmVyKG0say5fZXZlbnRUb1Byb2Nlc3NpbmdGdW5jdGlvblttXSl9KSx0aGlzLl9jb25uZWN0ZWQ9ITApfTtsLnByb3RvdHlwZS5fZGlzY29ubmVjdD1mdW5jdGlvbigpe3ZhciBrPXRoaXM7dGhpcy5fY29ubmVjdGVkJiZ0aGlzLl9oYXNOb0NhbGxiYWNrcygpJiYoT2JqZWN0LmtleXModGhpcy5fZXZlbnRUb1Byb2Nlc3NpbmdGdW5jdGlvbikuZm9yRWFjaChmdW5jdGlvbihtKXtrLl9ldmVudFRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKG0say5fZXZlbnRUb1Byb2Nlc3NpbmdGdW5jdGlvblttXSl9KSx0aGlzLl9jb25uZWN0ZWQ9ITEpfTtsLnByb3RvdHlwZS5fYWRkQ2FsbGJhY2tGb3JFdmVudD1mdW5jdGlvbihrLG0pe251bGw9PXRoaXMuX2V2ZW50TmFtZVRvQ2FsbGJhY2tTZXRba10mJgoodGhpcy5fZXZlbnROYW1lVG9DYWxsYmFja1NldFtrXT1uZXcgZy5DYWxsYmFja1NldCk7dGhpcy5fZXZlbnROYW1lVG9DYWxsYmFja1NldFtrXS5hZGQobSk7dGhpcy5fY29ubmVjdCgpfTtsLnByb3RvdHlwZS5fcmVtb3ZlQ2FsbGJhY2tGb3JFdmVudD1mdW5jdGlvbihrLG0pe251bGwhPXRoaXMuX2V2ZW50TmFtZVRvQ2FsbGJhY2tTZXRba10mJnRoaXMuX2V2ZW50TmFtZVRvQ2FsbGJhY2tTZXRba10uZGVsZXRlKG0pO3RoaXMuX2Rpc2Nvbm5lY3QoKX07bC5wcm90b3R5cGUuX2NhbGxDYWxsYmFja3NGb3JFdmVudD1mdW5jdGlvbihrKXtmb3IodmFyIG09W10scD0xO3A8YXJndW1lbnRzLmxlbmd0aDtwKyspbVtwLTFdPWFyZ3VtZW50c1twXTtwPXRoaXMuX2V2ZW50TmFtZVRvQ2FsbGJhY2tTZXRba107bnVsbCE9cCYmcC5jYWxsQ2FsbGJhY2tzLmFwcGx5KHAsbSl9O3JldHVybiBsfSgpO2QuRGlzcGF0Y2hlcj1jfSxmdW5jdGlvbihjLGQsZil7ZnVuY3Rpb24gZyhsKXtmb3IodmFyIGsgaW4gbClkLmhhc093blByb3BlcnR5KGspfHwKKGRba109bFtrXSl9ZyhmKDg3KSk7ZyhmKDg4KSk7ZyhmKDQwKSk7ZyhmKDg5KSk7ZyhmKDkwKSk7Yz1mKDI2KTtkLnpvb21PdXQ9Yy56b29tT3V0fSxmdW5jdGlvbihjLGQpe2Z1bmN0aW9uIGYocSxyLHQpe3JldHVybiB0LSh0LXEpKnJ9ZnVuY3Rpb24gZyhxLHIsdCl7cmV0dXJuKHEqci10KS8oci0xKX1mdW5jdGlvbiBsKHEscix0LHYpe3ZhciBBPTE8cjt0PUE/djp0O2lmKG51bGw9PXQpcmV0dXJuIHI7cT1xLmdldFRyYW5zZm9ybWF0aW9uRG9tYWluKCk7cmV0dXJuKEE/TWF0aC5taW46TWF0aC5tYXgpKHIsdC9NYXRoLmFicyhxWzFdLXFbMF0pKX1mdW5jdGlvbiBrKHEscix0LHYsQSl7aWYoMT49cilyZXR1cm57Y2VudGVyUG9pbnQ6dCx6b29tQW1vdW50OnJ9O2lmKG51bGw9PXYmJm51bGw9PUEpcmV0dXJue2NlbnRlclBvaW50OnQsem9vbUFtb3VudDpyfTt2YXIgeT1tKHEpLHg9cChxKSxDPXg/SW5maW5pdHk6LUluZmluaXR5O3g9eD8tSW5maW5pdHk6SW5maW5pdHk7dj1udWxsPT0Kdj9DOnY7QT1udWxsPT1BP3g6QTt4PXEuZ2V0VHJhbnNmb3JtYXRpb25Eb21haW4oKTtDPXhbMF07eD14WzFdO0E9cS5zY2FsZVRyYW5zZm9ybWF0aW9uKEEpO3g9cS5zY2FsZVRyYW5zZm9ybWF0aW9uKHgpO3ZhciBGPWYoeCxyLHQpO3Y9cS5zY2FsZVRyYW5zZm9ybWF0aW9uKHYpO3E9cS5zY2FsZVRyYW5zZm9ybWF0aW9uKEMpO0M9ZihxLHIsdCk7cmV0dXJuIE1hdGguYWJzKEYtQyk+TWF0aC5hYnMoQS12KT8ocj0oQS12KS8oeC1xKSwxIT09cj97Y2VudGVyUG9pbnQ6Zyh4LHIsQSksem9vbUFtb3VudDpyfTp7Y2VudGVyUG9pbnQ6dCx6b29tQW1vdW50OnJ9KTpGPkEhPXk/e2NlbnRlclBvaW50OmcoeCxyLEEpLHpvb21BbW91bnQ6cn06Qzx2IT15P3tjZW50ZXJQb2ludDpnKHEscix2KSx6b29tQW1vdW50OnJ9OntjZW50ZXJQb2ludDp0LHpvb21BbW91bnQ6cn19ZnVuY3Rpb24gbShxKXtxPXEucmFuZ2UoKTtyZXR1cm4gcVsxXTxxWzBdfWZ1bmN0aW9uIHAocSl7cT1xLmdldFRyYW5zZm9ybWF0aW9uRG9tYWluKCk7CnJldHVybiBxWzFdPHFbMF19ZC56b29tT3V0PWY7ZC5jb25zdHJhaW5lZFpvb209ZnVuY3Rpb24ocSxyLHQsdixBLHkseCl7cj1sKHEscix2LEEpO3JldHVybiBrKHEscix0LHkseCl9O2QuY29uc3RyYWluWm9vbUV4dGVudHM9bDtkLmNvbnN0cmFpblpvb21WYWx1ZXM9aztkLmNvbnN0cmFpbmVkVHJhbnNsYXRpb249ZnVuY3Rpb24ocSxyLHQsdil7dmFyIEE9cS5nZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbigpLHk9QVswXSx4PUFbMV07QT1tKHEpOzA8ciE9PUE/KHQ9dixudWxsIT10JiYoeT1xLnNjYWxlVHJhbnNmb3JtYXRpb24oeCkscT1xLnNjYWxlVHJhbnNmb3JtYXRpb24odCkscj0oQT9NYXRoLm1heDpNYXRoLm1pbikoeStyLHEpLXkpKTpudWxsIT10JiYoeT1xLnNjYWxlVHJhbnNmb3JtYXRpb24oeSkscT1xLnNjYWxlVHJhbnNmb3JtYXRpb24odCkscj0oQT9NYXRoLm1pbjpNYXRoLm1heCkoeStyLHEpLXkpO3JldHVybiByfX0sZnVuY3Rpb24oYyxkLGYpe2Z1bmN0aW9uIGcoRywKSyxMKXt2YXIgSj1HLnNjYWxlO2lmKEogaW5zdGFuY2VvZiB5LkNhdGVnb3J5KUw9Si5yYW5nZUJhbmQoKTtlbHNle3ZhciBQPUcuYWNjZXNzb3I7Rz1rLnNldChDLkFycmF5LmZsYXR0ZW4oSy5tYXAoZnVuY3Rpb24oUyl7cmV0dXJuIFMuZGF0YSgpLm1hcChmdW5jdGlvbihOLFQpe3JldHVybiBQKE4sVCxTKX0pLmZpbHRlcihmdW5jdGlvbihOKXtyZXR1cm4gbnVsbCE9Tn0pLm1hcChmdW5jdGlvbihOKXtyZXR1cm4gTi52YWx1ZU9mKCl9KX0pKSkudmFsdWVzKCkubWFwKGZ1bmN0aW9uKFMpe3JldHVybitTfSk7Ry5zb3J0KGZ1bmN0aW9uKFMsTil7cmV0dXJuIFMtTn0pO0c9Ry5tYXAoZnVuY3Rpb24oUyl7cmV0dXJuIEouc2NhbGUoUyl9KTtHPWsucGFpcnMoRyk7TD1DLk1hdGgubWluKEcsZnVuY3Rpb24oUyl7cmV0dXJuIE1hdGguYWJzKFNbMV0tU1swXSl9LEwqQi5fU0lOR0xFX0JBUl9ESU1FTlNJT05fUkFUSU8pO0wqPUIuX0JBUl9USElDS05FU1NfUkFUSU99cmV0dXJuIEx9CnZhciBsPXRoaXMmJnRoaXMuX19leHRlbmRzfHxmdW5jdGlvbihHLEspe2Z1bmN0aW9uIEwoKXt0aGlzLmNvbnN0cnVjdG9yPUd9Zm9yKHZhciBKIGluIEspSy5oYXNPd25Qcm9wZXJ0eShKKSYmKEdbSl09S1tKXSk7Ry5wcm90b3R5cGU9bnVsbD09PUs/T2JqZWN0LmNyZWF0ZShLKTooTC5wcm90b3R5cGU9Sy5wcm90b3R5cGUsbmV3IEwpfSxrPWYoMSksbT1mKDUpLHA9Zig3KSxxPWYoOCkscj1mKDE0KSx0PWYoNiksdj1mKDM0KSxBPWYoMjApLHk9ZigzKSx4PWYoMTEpLEM9ZigwKTtjPWYoMTApO3ZhciBGPWYoMTkpLEQ9ZigyKTtmPWYoMTYpO2QuQmFyT3JpZW50YXRpb249Yy5tYWtlRW51bShbInZlcnRpY2FsIiwiaG9yaXpvbnRhbCJdKTtkLkxhYmVsc1Bvc2l0aW9uPWMubWFrZUVudW0oWyJzdGFydCIsIm1pZGRsZSIsImVuZCIsIm91dHNpZGUiXSk7ZC5CYXJBbGlnbm1lbnQ9Yy5tYWtlRW51bShbInN0YXJ0IiwibWlkZGxlIiwiZW5kIl0pO3ZhciBCPWZ1bmN0aW9uKEcpe2Z1bmN0aW9uIEsoTCl7dm9pZCAwPT09CkwmJihMPSJ2ZXJ0aWNhbCIpO3ZhciBKPUcuY2FsbCh0aGlzKXx8dGhpcztKLl9sYWJlbEZvcm1hdHRlcj1xLmlkZW50aXR5KCk7Si5fbGFiZWxzRW5hYmxlZD0hMTtKLl9sYWJlbHNQb3NpdGlvbj1kLkxhYmVsc1Bvc2l0aW9uLmVuZDtKLl9oaWRlQmFyc0lmQW55QXJlVG9vV2lkZT0hMDtKLl9iYXJBbGlnbm1lbnQ9Im1pZGRsZSI7Si5fY29tcHV0ZUJhclBpeGVsVGhpY2tuZXNzPUEubWVtb2l6ZShnKTtKLl9maXhlZEJhclBpeGVsVGhpY2tuZXNzPSEwO0ouYWRkQ2xhc3MoImJhci1wbG90Iik7aWYoInZlcnRpY2FsIiE9PUwmJiJob3Jpem9udGFsIiE9PUwpdGhyb3cgRXJyb3IoTCsiIGlzIG5vdCBhIHZhbGlkIG9yaWVudGF0aW9uIGZvciBQbG90cy5CYXIiKTtKLl9pc1ZlcnRpY2FsPSJ2ZXJ0aWNhbCI9PT1MO0ouYW5pbWF0b3IoImJhc2VsaW5lIixuZXcgcC5OdWxsKTtKLmF0dHIoImZpbGwiLChuZXcgeS5Db2xvcikucmFuZ2UoKVswXSk7Si5hdHRyKEsuX0JBUl9USElDS05FU1NfS0VZLApmdW5jdGlvbigpe3JldHVybiBKLl9iYXJQaXhlbFRoaWNrbmVzcygpfSk7Si5fbGFiZWxDb25maWc9bmV3IEMuTWFwO0ouX2Jhc2VsaW5lVmFsdWVQcm92aWRlcj1mdW5jdGlvbigpe3JldHVybltKLmJhc2VsaW5lVmFsdWUoKV19O3JldHVybiBKfWwoSyxHKTtLLnByb3RvdHlwZS5jb21wdXRlTGF5b3V0PWZ1bmN0aW9uKEwsSixQKXtHLnByb3RvdHlwZS5jb21wdXRlTGF5b3V0LmNhbGwodGhpcyxMLEosUCk7dGhpcy5fdXBkYXRlRXh0ZW50cygpO3JldHVybiB0aGlzfTtLLnByb3RvdHlwZS54PWZ1bmN0aW9uKEwsSil7aWYobnVsbD09TClyZXR1cm4gRy5wcm90b3R5cGUueC5jYWxsKHRoaXMpO251bGw9PUo/Ry5wcm90b3R5cGUueC5jYWxsKHRoaXMsTCk6Ry5wcm90b3R5cGUueC5jYWxsKHRoaXMsTCxKKTt0aGlzLl91cGRhdGVUaGlja25lc3NBdHRyKCk7dGhpcy5fdXBkYXRlTGVuZ3RoU2NhbGUoKTtyZXR1cm4gdGhpc307Sy5wcm90b3R5cGUueT1mdW5jdGlvbihMLEope2lmKG51bGw9PQpMKXJldHVybiBHLnByb3RvdHlwZS55LmNhbGwodGhpcyk7bnVsbD09Sj9HLnByb3RvdHlwZS55LmNhbGwodGhpcyxMKTpHLnByb3RvdHlwZS55LmNhbGwodGhpcyxMLEopO3RoaXMuX3VwZGF0ZUxlbmd0aFNjYWxlKCk7cmV0dXJuIHRoaXN9O0sucHJvdG90eXBlLmxlbmd0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9pc1ZlcnRpY2FsP3RoaXMueSgpOnRoaXMueCgpfTtLLnByb3RvdHlwZS5wb3NpdGlvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9pc1ZlcnRpY2FsP3RoaXMueCgpOnRoaXMueSgpfTtLLnByb3RvdHlwZS5iYXJFbmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJvcGVydHlCaW5kaW5ncy5nZXQoSy5fQkFSX0VORF9LRVkpfTtLLnByb3RvdHlwZS5iYXJBbGlnbm1lbnQ9ZnVuY3Rpb24oTCl7aWYobnVsbD09TClyZXR1cm4gdGhpcy5fYmFyQWxpZ25tZW50O3RoaXMuX2JhckFsaWdubWVudD1MO3RoaXMuX2NsZWFyQXR0clRvUHJvamVjdG9yQ2FjaGUoKTt0aGlzLnJlbmRlcigpOwpyZXR1cm4gdGhpc307Sy5wcm90b3R5cGUub3JpZW50YXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faXNWZXJ0aWNhbD8idmVydGljYWwiOiJob3Jpem9udGFsIn07Sy5wcm90b3R5cGUuX2NyZWF0ZURyYXdlcj1mdW5jdGlvbigpe3JldHVybiBuZXcgdC5Qcm94eURyYXdlcihmdW5jdGlvbigpe3JldHVybiBuZXcgdi5SZWN0YW5nbGVTVkdEcmF3ZXIoSy5fQkFSX0FSRUFfQ0xBU1MpfSxmdW5jdGlvbihMKXtyZXR1cm4gbmV3IHIuUmVjdGFuZ2xlQ2FudmFzRHJhd2VyKEwpfSl9O0sucHJvdG90eXBlLl9zZXR1cD1mdW5jdGlvbigpe0cucHJvdG90eXBlLl9zZXR1cC5jYWxsKHRoaXMpO3RoaXMuX2Jhc2VsaW5lPXRoaXMuX3JlbmRlckFyZWEuYXBwZW5kKCJsaW5lIikuY2xhc3NlZCgiYmFzZWxpbmUiLCEwKX07Sy5wcm90b3R5cGUuYmFzZWxpbmVWYWx1ZT1mdW5jdGlvbigpe2lmKG51bGwhPXRoaXMuX2Jhc2VsaW5lVmFsdWUpcmV0dXJuIHRoaXMuX2Jhc2VsaW5lVmFsdWU7aWYoIXRoaXMuX3Byb2plY3RvcnNSZWFkeSgpKXJldHVybiAwOwp2YXIgTD10aGlzLmxlbmd0aCgpLnNjYWxlO3JldHVybiBMP0wgaW5zdGFuY2VvZiB5LlRpbWU/bmV3IERhdGUoMCk6MDowfTtLLnByb3RvdHlwZS5hZGREYXRhc2V0PWZ1bmN0aW9uKEwpe0cucHJvdG90eXBlLmFkZERhdGFzZXQuY2FsbCh0aGlzLEwpO3JldHVybiB0aGlzfTtLLnByb3RvdHlwZS5fYWRkRGF0YXNldD1mdW5jdGlvbihMKXtHLnByb3RvdHlwZS5fYWRkRGF0YXNldC5jYWxsKHRoaXMsTCk7cmV0dXJuIHRoaXN9O0sucHJvdG90eXBlLnJlbW92ZURhdGFzZXQ9ZnVuY3Rpb24oTCl7Ry5wcm90b3R5cGUucmVtb3ZlRGF0YXNldC5jYWxsKHRoaXMsTCl9O0sucHJvdG90eXBlLl9yZW1vdmVEYXRhc2V0PWZ1bmN0aW9uKEwpe0cucHJvdG90eXBlLl9yZW1vdmVEYXRhc2V0LmNhbGwodGhpcyxMKTtyZXR1cm4gdGhpc307Sy5wcm90b3R5cGUuZGF0YXNldHM9ZnVuY3Rpb24oTCl7aWYobnVsbD09TClyZXR1cm4gRy5wcm90b3R5cGUuZGF0YXNldHMuY2FsbCh0aGlzKTtHLnByb3RvdHlwZS5kYXRhc2V0cy5jYWxsKHRoaXMsCkwpO3JldHVybiB0aGlzfTtLLnByb3RvdHlwZS5sYWJlbHNFbmFibGVkPWZ1bmN0aW9uKEwpe2lmKG51bGw9PUwpcmV0dXJuIHRoaXMuX2xhYmVsc0VuYWJsZWQ7dGhpcy5fbGFiZWxzRW5hYmxlZD1MO3RoaXMuX2NsZWFyQXR0clRvUHJvamVjdG9yQ2FjaGUoKTt0aGlzLnJlbmRlcigpO3JldHVybiB0aGlzfTtLLnByb3RvdHlwZS5sYWJlbEZvcm1hdHRlcj1mdW5jdGlvbihMKXtpZihudWxsPT1MKXJldHVybiB0aGlzLl9sYWJlbEZvcm1hdHRlcjt0aGlzLl9sYWJlbEZvcm1hdHRlcj1MO3RoaXMuX2NsZWFyQXR0clRvUHJvamVjdG9yQ2FjaGUoKTt0aGlzLnJlbmRlcigpO3JldHVybiB0aGlzfTtLLnByb3RvdHlwZS5fY3JlYXRlTm9kZXNGb3JEYXRhc2V0PWZ1bmN0aW9uKEwpe3ZhciBKPUcucHJvdG90eXBlLl9jcmVhdGVOb2Rlc0ZvckRhdGFzZXQuY2FsbCh0aGlzLEwpLFA9dGhpcy5fcmVuZGVyQXJlYS5hcHBlbmQoImciKS5jbGFzc2VkKEsuX0xBQkVMX0FSRUFfQ0xBU1MsITApLApTPW5ldyBtLlN2Z0NvbnRleHQoUC5ub2RlKCkpLE49bmV3IG0uQ2FjaGVNZWFzdXJlcihTKTtTPW5ldyBtLldyaXRlcihOLFMpO3RoaXMuX2xhYmVsQ29uZmlnLnNldChMLHtsYWJlbEFyZWE6UCxtZWFzdXJlcjpOLHdyaXRlcjpTfSk7cmV0dXJuIEp9O0sucHJvdG90eXBlLl9yZW1vdmVEYXRhc2V0Tm9kZXM9ZnVuY3Rpb24oTCl7Ry5wcm90b3R5cGUuX3JlbW92ZURhdGFzZXROb2Rlcy5jYWxsKHRoaXMsTCk7dmFyIEo9dGhpcy5fbGFiZWxDb25maWcuZ2V0KEwpO251bGwhPUomJihKLmxhYmVsQXJlYS5yZW1vdmUoKSx0aGlzLl9sYWJlbENvbmZpZy5kZWxldGUoTCkpfTtLLnByb3RvdHlwZS5lbnRpdHlOZWFyZXN0PWZ1bmN0aW9uKEwpe3ZhciBKPXRoaXM7cmV0dXJuIHRoaXMuX2NvbXB1dGVCYXJQaXhlbFRoaWNrbmVzcy5kb0xvY2tlZChmdW5jdGlvbigpe2Z1bmN0aW9uIFAoYmEsbGEsd2EsQ2Epe3JldHVybiBKLl9waXhlbFBvaW50QmFyKGhhKGJhLGxhLHdhKSxYLENhKX12YXIgUz0KSi5faXNWZXJ0aWNhbD9MLng6TC55LE49Si5faXNWZXJ0aWNhbD9MLnk6TC54LFQ9Si5ib3VuZHMoKSxZPXttaW46MCxtYXg6VC5ib3R0b21SaWdodC54LVQudG9wTGVmdC54fSxhYT17bWluOjAsbWF4OlQuYm90dG9tUmlnaHQueS1ULnRvcExlZnQueX0saGE9RC5QbG90Ll9zY2FsZWRBY2Nlc3NvcihKLmxlbmd0aCgpKSxYPUoubGVuZ3RoKCkuc2NhbGUuc2NhbGUoSi5iYXNlbGluZVZhbHVlKCkpLGNhPUluZmluaXR5LGVhPUluZmluaXR5LGthO0ouX2dldEVudGl0eVN0b3JlKCkuZW50aXRpZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKGJhKXt2YXIgbGE9Si5fZW50aXR5Qm91bmRzKGJhKTtpZihDLkRPTS5pbnRlcnNlY3RzQkJveChZLGFhLGxhKSl7dmFyIHdhPTAsQ2E9MDtpZighQy5ET00uaW50ZXJzZWN0c0JCb3goTC54LEwueSxsYSwuNSkpe0NhPVAoYmEuZGF0dW0sYmEuaW5kZXgsYmEuZGF0YXNldCxsYSk7d2E9TWF0aC5hYnMoUy0oSi5faXNWZXJ0aWNhbD9DYS54OkNhLnkpKTt2YXIgeGE9CkouX2lzVmVydGljYWw/bGEueTpsYS54O2xhPXhhKyhKLl9pc1ZlcnRpY2FsP2xhLmhlaWdodDpsYS53aWR0aCk7Q2E9Tj49eGEtLjUmJk48PWxhKy41PzA6TWF0aC5hYnMoTi0oSi5faXNWZXJ0aWNhbD9DYS55OkNhLngpKX1pZih3YTxjYXx8d2E9PT1jYSYmQ2E8ZWEpa2E9YmEsY2E9d2EsZWE9Q2F9fSk7aWYodm9pZCAwIT09a2EpcmV0dXJuIEouX2xpZ2h0d2VpZ2h0UGxvdEVudGl0eVRvUGxvdEVudGl0eShrYSl9KX07Sy5wcm90b3R5cGUuZW50aXRpZXNBdD1mdW5jdGlvbihMKXtyZXR1cm4gdGhpcy5fZW50aXRpZXNJbnRlcnNlY3RpbmcoTC54LEwueSl9O0sucHJvdG90eXBlLl9lbnRpdGllc0ludGVyc2VjdGluZz1mdW5jdGlvbihMLEope3ZhciBQPXRoaXMsUz1bXTt0aGlzLl9nZXRFbnRpdHlTdG9yZSgpLmVudGl0aWVzKCkuZm9yRWFjaChmdW5jdGlvbihOKXtDLkRPTS5pbnRlcnNlY3RzQkJveChMLEosUC5fZW50aXR5Qm91bmRzKE4pKSYmUy5wdXNoKFAuX2xpZ2h0d2VpZ2h0UGxvdEVudGl0eVRvUGxvdEVudGl0eShOKSl9KTsKcmV0dXJuIFN9O0sucHJvdG90eXBlLl91cGRhdGVMZW5ndGhTY2FsZT1mdW5jdGlvbigpe2lmKHRoaXMuX3Byb2plY3RvcnNSZWFkeSgpKXt2YXIgTD10aGlzLmxlbmd0aCgpLnNjYWxlO0wgaW5zdGFuY2VvZiB4LlF1YW50aXRhdGl2ZVNjYWxlJiYoTC5hZGRQYWRkaW5nRXhjZXB0aW9uc1Byb3ZpZGVyKHRoaXMuX2Jhc2VsaW5lVmFsdWVQcm92aWRlciksTC5hZGRJbmNsdWRlZFZhbHVlc1Byb3ZpZGVyKHRoaXMuX2Jhc2VsaW5lVmFsdWVQcm92aWRlcikpfX07Sy5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHk9ZnVuY3Rpb24oKXt2YXIgTD10aGlzO3RoaXMuX2JhclBpeGVsVGhpY2tuZXNzKCk7cmV0dXJuIHRoaXMuX2NvbXB1dGVCYXJQaXhlbFRoaWNrbmVzcy5kb0xvY2tlZChmdW5jdGlvbigpe3JldHVybiBHLnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseS5jYWxsKEwpfSl9O0sucHJvdG90eXBlLl9hZGRpdGlvbmFsUGFpbnQ9ZnVuY3Rpb24oTCl7dmFyIEo9dGhpcyxQPXRoaXMubGVuZ3RoKCkuc2NhbGUuc2NhbGUodGhpcy5iYXNlbGluZVZhbHVlKCkpOwpQPXt4MTp0aGlzLl9pc1ZlcnRpY2FsPzA6UCx5MTp0aGlzLl9pc1ZlcnRpY2FsP1A6MCx4Mjp0aGlzLl9pc1ZlcnRpY2FsP3RoaXMud2lkdGgoKTpQLHkyOnRoaXMuX2lzVmVydGljYWw/UDp0aGlzLmhlaWdodCgpfTt0aGlzLl9nZXRBbmltYXRvcigiYmFzZWxpbmUiKS5hbmltYXRlKHRoaXMuX2Jhc2VsaW5lLFApO3RoaXMuZGF0YXNldHMoKS5mb3JFYWNoKGZ1bmN0aW9uKFMpe3JldHVybiBKLl9sYWJlbENvbmZpZy5nZXQoUykubGFiZWxBcmVhLnNlbGVjdEFsbCgiZyIpLnJlbW92ZSgpfSk7dGhpcy5fbGFiZWxzRW5hYmxlZCYmQy5XaW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3JldHVybiBKLl9kcmF3TGFiZWxzKCl9LEwpfTtLLnByb3RvdHlwZS5nZXRFeHRlbnRzRm9yUHJvcGVydHk9ZnVuY3Rpb24oTCl7dmFyIEo9dGhpcyxQPUcucHJvdG90eXBlLmdldEV4dGVudHNGb3JQcm9wZXJ0eS5jYWxsKHRoaXMsTCk7aWYoIngiPT09TCYmdGhpcy5faXNWZXJ0aWNhbClMPXRoaXMueCgpOwplbHNle2lmKCJ5IiE9PUx8fHRoaXMuX2lzVmVydGljYWwpcmV0dXJuIFA7TD10aGlzLnkoKX1pZighKEwmJkwuc2NhbGUmJkwuc2NhbGUgaW5zdGFuY2VvZiB4LlF1YW50aXRhdGl2ZVNjYWxlKSlyZXR1cm4gUDt2YXIgUz1MLnNjYWxlLE49dGhpcy5fYmFyUGl4ZWxUaGlja25lc3MoKTtyZXR1cm4gUD1QLm1hcChmdW5jdGlvbihUKXtyZXR1cm4gay5leHRlbnQoW1MuaW52ZXJ0KEouX2dldFBvc2l0aW9uQXR0cihTLnNjYWxlKFRbMF0pLE4pKSxTLmludmVydChKLl9nZXRQb3NpdGlvbkF0dHIoUy5zY2FsZShUWzBdKSxOKStOKSxTLmludmVydChKLl9nZXRQb3NpdGlvbkF0dHIoUy5zY2FsZShUWzFdKSxOKSksUy5pbnZlcnQoSi5fZ2V0UG9zaXRpb25BdHRyKFMuc2NhbGUoVFsxXSksTikrTildKX0pfTtLLnByb3RvdHlwZS5fZ2V0UG9zaXRpb25BdHRyPWZ1bmN0aW9uKEwsSil7dGhpcy5faXNWZXJ0aWNhbHx8KEwtPUosSio9LTEpO3N3aXRjaCh0aGlzLl9iYXJBbGlnbm1lbnQpe2Nhc2UgInN0YXJ0IjpyZXR1cm4gTDsKY2FzZSAiZW5kIjpyZXR1cm4gTC1KO2RlZmF1bHQ6cmV0dXJuIEwtSi8yfX07Sy5wcm90b3R5cGUuX2RyYXdMYWJlbHM9ZnVuY3Rpb24oKXt2YXIgTD10aGlzLEo9dGhpcy5fZ2V0RGF0YVRvRHJhdygpLFA9dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCksUz10aGlzLmRhdGFzZXRzKCkuc29tZShmdW5jdGlvbihOKXtyZXR1cm4gSi5nZXQoTikuc29tZShmdW5jdGlvbihULFkpe3JldHVybiBudWxsPT1UPyExOkwuX2RyYXdMYWJlbChULFksTixQKX0pfSk7dGhpcy5faGlkZUJhcnNJZkFueUFyZVRvb1dpZGUmJlMmJnRoaXMuZGF0YXNldHMoKS5mb3JFYWNoKGZ1bmN0aW9uKE4pe3JldHVybiBMLl9sYWJlbENvbmZpZy5nZXQoTikubGFiZWxBcmVhLnNlbGVjdEFsbCgiZyIpLnJlbW92ZSgpfSl9O0sucHJvdG90eXBlLl9kcmF3TGFiZWw9ZnVuY3Rpb24oTCxKLFAsUyl7dmFyIE49dGhpcy5fbGFiZWxDb25maWcuZ2V0KFApLFQ9Ti5sYWJlbEFyZWEsWT1OLm1lYXN1cmVyO049Ti53cml0ZXI7CnZhciBhYT10aGlzLmxlbmd0aCgpLmFjY2Vzc29yLGhhPWFhKEwsSixQKTthYT10aGlzLmxlbmd0aCgpLnNjYWxlO3ZhciBYPW51bGwhPWFhP2FhLnNjYWxlKGhhKTpoYSxjYT1udWxsIT1hYT9hYS5zY2FsZSh0aGlzLmJhc2VsaW5lVmFsdWUoKSk6dGhpcy5iYXNlbGluZVZhbHVlKCksZWE9e3g6Uy54KEwsSixQKSx5OlMueShMLEosUCl9O2FhPXt3aWR0aDpTLndpZHRoKEwsSixQKSxoZWlnaHQ6Uy5oZWlnaHQoTCxKLFApfTtoYT10aGlzLl9sYWJlbEZvcm1hdHRlcihoYSxMLEosUCk7WT1ZLm1lYXN1cmUoaGEpO3ZhciBrYT10aGlzLl9zaG91bGRTaG93TGFiZWxPbkJhcihlYSxhYSxZKTtlYT10aGlzLl9jYWxjdWxhdGVMYWJlbFByb3BlcnRpZXMoZWEsYWEsWSxrYSx0aGlzLl9pc1ZlcnRpY2FsP1g8PWNhOlg8Y2EpO1g9ZWEuY29udGFpbmVyRGltZW5zaW9ucztjYT1lYS5sYWJlbENvbnRhaW5lck9yaWdpbjtlYT1lYS5hbGlnbm1lbnQ7TD1TLmZpbGwoTCxKLFApO1Q9dGhpcy5fY3JlYXRlTGFiZWxDb250YWluZXIoVCwKY2Esa2EsTCk7Ti53cml0ZShoYSxYLndpZHRoLFguaGVpZ2h0LHt4QWxpZ246ZWEueCx5QWxpZ246ZWEueX0sVC5ub2RlKCkpO3JldHVybiB0aGlzLl9pc1ZlcnRpY2FsP2FhLndpZHRoPFkud2lkdGg6YWEuaGVpZ2h0PFkuaGVpZ2h0fTtLLnByb3RvdHlwZS5fc2hvdWxkU2hvd0xhYmVsT25CYXI9ZnVuY3Rpb24oTCxKLFApe2lmKHRoaXMuX2xhYmVsc1Bvc2l0aW9uPT09ZC5MYWJlbHNQb3NpdGlvbi5vdXRzaWRlKXJldHVybiExO0w9dGhpcy5faXNWZXJ0aWNhbD9MLnk6TC54O3ZhciBTPXRoaXMuX2lzVmVydGljYWw/Si5oZWlnaHQ6Si53aWR0aDtKPXRoaXMuX2lzVmVydGljYWw/dGhpcy5oZWlnaHQoKTp0aGlzLndpZHRoKCk7UD10aGlzLl9pc1ZlcnRpY2FsP1AuaGVpZ2h0OlAud2lkdGg7dmFyIE49TCtTO04+Sj9TPUotTDowPkwmJihTPU4pO3JldHVybiBQK0suX0xBQkVMX01BUkdJTl9JTlNJREVfQkFSPD1TfTtLLnByb3RvdHlwZS5fY2FsY3VsYXRlTGFiZWxQcm9wZXJ0aWVzPQpmdW5jdGlvbihMLEosUCxTLE4pe2Z1bmN0aW9uIFQobGEpe3N3aXRjaChsYSl7Y2FzZSAidG9wTGVmdCI6Y2E9WS5faXNWZXJ0aWNhbD8idG9wIjoibGVmdCI7a2ErPUsuX0xBQkVMX01BUkdJTl9JTlNJREVfQkFSO2JhKz1LLl9MQUJFTF9NQVJHSU5fSU5TSURFX0JBUjticmVhaztjYXNlICJjZW50ZXIiOmJhKz0oaGErWCkvMjticmVhaztjYXNlICJib3R0b21SaWdodCI6Y2E9WS5faXNWZXJ0aWNhbD8iYm90dG9tIjoicmlnaHQiLGthLT1LLl9MQUJFTF9NQVJHSU5fSU5TSURFX0JBUixiYSs9ZWEtSy5fTEFCRUxfTUFSR0lOX0lOU0lERV9CQVItWH19dmFyIFk9dGhpcyxhYT10aGlzLl9pc1ZlcnRpY2FsP0wueTpMLngsaGE9dGhpcy5faXNWZXJ0aWNhbD9KLmhlaWdodDpKLndpZHRoLFg9dGhpcy5faXNWZXJ0aWNhbD9QLmhlaWdodDpQLndpZHRoLGNhPSJjZW50ZXIiLGVhPWhhLGthPWFhLGJhPWFhO2lmKFMpc3dpdGNoKHRoaXMuX2xhYmVsc1Bvc2l0aW9uKXtjYXNlIGQuTGFiZWxzUG9zaXRpb24uc3RhcnQ6Tj8KVCgiYm90dG9tUmlnaHQiKTpUKCJ0b3BMZWZ0Iik7YnJlYWs7Y2FzZSBkLkxhYmVsc1Bvc2l0aW9uLm1pZGRsZTpUKCJjZW50ZXIiKTticmVhaztjYXNlIGQuTGFiZWxzUG9zaXRpb24uZW5kOk4/VCgidG9wTGVmdCIpOlQoImJvdHRvbVJpZ2h0Iil9ZWxzZSBOPyhjYT10aGlzLl9pc1ZlcnRpY2FsPyJ0b3AiOiJsZWZ0IixlYT1oYStLLl9MQUJFTF9NQVJHSU5fSU5TSURFX0JBUitYLGthLT1LLl9MQUJFTF9NQVJHSU5fSU5TSURFX0JBUitYLGJhLT1LLl9MQUJFTF9NQVJHSU5fSU5TSURFX0JBUitYKTooY2E9dGhpcy5faXNWZXJ0aWNhbD8iYm90dG9tIjoicmlnaHQiLGVhPWhhK0suX0xBQkVMX01BUkdJTl9JTlNJREVfQkFSK1gsYmErPWhhK0suX0xBQkVMX01BUkdJTl9JTlNJREVfQkFSKTtyZXR1cm57Y29udGFpbmVyRGltZW5zaW9uczp7d2lkdGg6dGhpcy5faXNWZXJ0aWNhbD9KLndpZHRoOmVhLGhlaWdodDp0aGlzLl9pc1ZlcnRpY2FsP2VhOkouaGVpZ2h0fSxsYWJlbENvbnRhaW5lck9yaWdpbjp7eDp0aGlzLl9pc1ZlcnRpY2FsPwpMLng6a2EseTp0aGlzLl9pc1ZlcnRpY2FsP2thOkwueX0sbGFiZWxPcmlnaW46e3g6dGhpcy5faXNWZXJ0aWNhbD9MLngrSi53aWR0aC8yLVAud2lkdGgvMjpiYSx5OnRoaXMuX2lzVmVydGljYWw/YmE6TC55K0ouaGVpZ2h0LzItUC5oZWlnaHQvMn0sYWxpZ25tZW50Ont4OnRoaXMuX2lzVmVydGljYWw/ImNlbnRlciI6Y2EseTp0aGlzLl9pc1ZlcnRpY2FsP2NhOiJjZW50ZXIifX19O0sucHJvdG90eXBlLl9jcmVhdGVMYWJlbENvbnRhaW5lcj1mdW5jdGlvbihMLEosUCxTKXtMPUwuYXBwZW5kKCJnIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrSi54KyIsICIrSi55KyIpIik7UD8oTC5jbGFzc2VkKCJvbi1iYXItbGFiZWwiLCEwKSxQPTEuNipDLkNvbG9yLmNvbnRyYXN0KCJ3aGl0ZSIsUyk8Qy5Db2xvci5jb250cmFzdCgiYmxhY2siLFMpLEwuY2xhc3NlZChQPyJkYXJrLWxhYmVsIjoibGlnaHQtbGFiZWwiLCEwKSk6TC5jbGFzc2VkKCJvZmYtYmFyLWxhYmVsIiwhMCk7CnJldHVybiBMfTtLLnByb3RvdHlwZS5fZ2VuZXJhdGVEcmF3U3RlcHM9ZnVuY3Rpb24oKXt2YXIgTD1bXTtpZih0aGlzLl9hbmltYXRlT25OZXh0UmVuZGVyKCkpe3ZhciBKPXRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpLFA9dGhpcy5sZW5ndGgoKS5zY2FsZS5zY2FsZSh0aGlzLmJhc2VsaW5lVmFsdWUoKSksUz10aGlzLl9pc1ZlcnRpY2FsPyJoZWlnaHQiOiJ3aWR0aCI7Slt0aGlzLl9pc1ZlcnRpY2FsPyJ5IjoieCJdPWZ1bmN0aW9uKCl7cmV0dXJuIFB9O0pbU109ZnVuY3Rpb24oKXtyZXR1cm4gMH07TC5wdXNoKHthdHRyVG9Qcm9qZWN0b3I6SixhbmltYXRvcjp0aGlzLl9nZXRBbmltYXRvcihGLkFuaW1hdG9yLlJFU0VUKX0pfUwucHVzaCh7YXR0clRvUHJvamVjdG9yOnRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpLGFuaW1hdG9yOnRoaXMuX2dldEFuaW1hdG9yKEYuQW5pbWF0b3IuTUFJTil9KTtyZXR1cm4gTH07Sy5wcm90b3R5cGUuX2dlbmVyYXRlQXR0clRvUHJvamVjdG9yPQpmdW5jdGlvbigpe2Z1bmN0aW9uIEwoZWEsa2EsYmEpe3JldHVybiBNYXRoLmFicyhTLWFhKGVhLGthLGJhKSl9dmFyIEo9dGhpcyxQPUcucHJvdG90eXBlLl9nZW5lcmF0ZUF0dHJUb1Byb2plY3Rvci5jYWxsKHRoaXMpLFM9dGhpcy5sZW5ndGgoKS5zY2FsZS5zY2FsZSh0aGlzLmJhc2VsaW5lVmFsdWUoKSksTj10aGlzLl9pc1ZlcnRpY2FsPyJ5IjoieCIsVD10aGlzLl9pc1ZlcnRpY2FsPyJ4IjoieSIsWT1ELlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMucG9zaXRpb24oKSksYWE9RC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLmxlbmd0aCgpKSxoYT1QW0suX0JBUl9USElDS05FU1NfS0VZXSxYPVAuZ2FwLGNhPW51bGw9PVg/aGE6ZnVuY3Rpb24oZWEsa2EsYmEpe3JldHVybiBoYShlYSxrYSxiYSktWChlYSxrYSxiYSl9O1Aud2lkdGg9dGhpcy5faXNWZXJ0aWNhbD9jYTpMO1AuaGVpZ2h0PXRoaXMuX2lzVmVydGljYWw/TDpjYTtQW05dPWZ1bmN0aW9uKGVhLGthLGJhKXtlYT0KYWEoZWEsa2EsYmEpO3JldHVybiBlYT5TP1M6ZWF9O1BbVF09ZnVuY3Rpb24oZWEsa2EsYmEpe3JldHVybiBKLl9nZXRQb3NpdGlvbkF0dHIoWShlYSxrYSxiYSksaGEoZWEsa2EsYmEpKX07cmV0dXJuIFB9O0sucHJvdG90eXBlLl91cGRhdGVUaGlja25lc3NBdHRyPWZ1bmN0aW9uKCl7dmFyIEw9dGhpcyxKPXRoaXMucG9zaXRpb24oKSxQPXRoaXMuYmFyRW5kKCk7bnVsbCE9SiYmbnVsbCE9UD8odGhpcy5fZml4ZWRCYXJQaXhlbFRoaWNrbmVzcz0hMSx0aGlzLmF0dHIoSy5fQkFSX1RISUNLTkVTU19LRVksZnVuY3Rpb24oUyxOLFQpe3ZhciBZPUouYWNjZXNzb3IoUyxOLFQpO1M9UC5hY2Nlc3NvcihTLE4sVCk7WT1KLnNjYWxlP0ouc2NhbGUuc2NhbGUoWSk6WTtTPVAuc2NhbGU/UC5zY2FsZS5zY2FsZShTKTpTO3JldHVybiBNYXRoLmFicyhTLVkpfSkpOih0aGlzLl9maXhlZEJhclBpeGVsVGhpY2tuZXNzPSEwLHRoaXMuYXR0cihLLl9CQVJfVEhJQ0tORVNTX0tFWSxmdW5jdGlvbigpe3JldHVybiBMLl9iYXJQaXhlbFRoaWNrbmVzcygpfSkpfTsKSy5wcm90b3R5cGUuX2JhclBpeGVsVGhpY2tuZXNzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2ZpeGVkQmFyUGl4ZWxUaGlja25lc3M/dGhpcy5fcHJvamVjdG9yc1JlYWR5KCk/dGhpcy5fY29tcHV0ZUJhclBpeGVsVGhpY2tuZXNzKHRoaXMucG9zaXRpb24oKSx0aGlzLmRhdGFzZXRzKCksdGhpcy5faXNWZXJ0aWNhbD90aGlzLndpZHRoKCk6dGhpcy5oZWlnaHQoKSk6MDowfTtLLnByb3RvdHlwZS5lbnRpdGllcz1mdW5jdGlvbihMKXt2b2lkIDA9PT1MJiYoTD10aGlzLmRhdGFzZXRzKCkpO3JldHVybiB0aGlzLl9wcm9qZWN0b3JzUmVhZHkoKT9HLnByb3RvdHlwZS5lbnRpdGllcy5jYWxsKHRoaXMsTCk6W119O0sucHJvdG90eXBlLl9lbnRpdHlCb3VuZHM9ZnVuY3Rpb24oTCl7cmV0dXJuIHRoaXMuX3BpeGVsQm91bmRzKEwuZGF0dW0sTC5pbmRleCxMLmRhdGFzZXQpfTtLLnByb3RvdHlwZS5fcGl4ZWxCb3VuZHM9ZnVuY3Rpb24oTCxKLFApe3ZhciBTPXRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpOwpyZXR1cm57eDpTLngoTCxKLFApLHk6Uy55KEwsSixQKSx3aWR0aDpTLndpZHRoKEwsSixQKSxoZWlnaHQ6Uy5oZWlnaHQoTCxKLFApfX07Sy5wcm90b3R5cGUuX3BpeGVsUG9pbnQ9ZnVuY3Rpb24oTCxKLFApe3ZhciBTPXRoaXMuX3BpeGVsQm91bmRzKEwsSixQKTtMPSh0aGlzLl9pc1ZlcnRpY2FsP0QuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy55KCkpOkQuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy54KCkpKShMLEosUCk7Sj0odGhpcy5faXNWZXJ0aWNhbD90aGlzLnkoKS5zY2FsZTp0aGlzLngoKS5zY2FsZSkuc2NhbGUodGhpcy5iYXNlbGluZVZhbHVlKCkpO3JldHVybiB0aGlzLl9waXhlbFBvaW50QmFyKEwsSixTKX07Sy5wcm90b3R5cGUuX3BpeGVsUG9pbnRCYXI9ZnVuY3Rpb24oTCxKLFApe2lmKHRoaXMuX2lzVmVydGljYWwpe3ZhciBTPVAueCtQLndpZHRoLzI7TD1MPD1KP1AueTpQLnkrUC5oZWlnaHR9ZWxzZSBTPUw+PUo/UC54K1Aud2lkdGg6UC54LEw9UC55K1AuaGVpZ2h0LwoyO3JldHVybnt4OlMseTpMfX07Sy5wcm90b3R5cGUuX3VuaW5zdGFsbFNjYWxlRm9yS2V5PWZ1bmN0aW9uKEwsSil7Ry5wcm90b3R5cGUuX3VuaW5zdGFsbFNjYWxlRm9yS2V5LmNhbGwodGhpcyxMLEopfTtLLnByb3RvdHlwZS5fZ2V0RGF0YVRvRHJhdz1mdW5jdGlvbigpe3ZhciBMPXRoaXMsSj1uZXcgQy5NYXAsUD10aGlzLl9nZXRBdHRyVG9Qcm9qZWN0b3IoKSxTPXRoaXMud2lkdGgoKSxOPXRoaXMuaGVpZ2h0KCk7dGhpcy5kYXRhc2V0cygpLmZvckVhY2goZnVuY3Rpb24oVCl7dmFyIFk9VC5kYXRhKCkubWFwKGZ1bmN0aW9uKGFhLGhhKXtyZXR1cm4gTC5faXNEYXR1bU9uU2NyZWVuKFAsUyxOLGFhLGhhLFQpP2FhOm51bGx9KTtKLnNldChULFkpfSk7cmV0dXJuIEp9O0sucHJvdG90eXBlLl9pc0RhdHVtT25TY3JlZW49ZnVuY3Rpb24oTCxKLFAsUyxOLFQpe3ZhciBZPUwueChTLE4sVCksYWE9TC55KFMsTixUKSxoYT1MLndpZHRoKFMsTixUKTtMPUwuaGVpZ2h0KFMsTixUKTsKcmV0dXJuIEMuTWF0aC5pc1ZhbGlkTnVtYmVyKFkpJiZDLk1hdGguaXNWYWxpZE51bWJlcihhYSkmJkMuTWF0aC5pc1ZhbGlkTnVtYmVyKGhhKSYmQy5NYXRoLmlzVmFsaWROdW1iZXIoTCk/Qy5NYXRoLmJvdW5kc0ludGVyc2VjdHMoWSxhYSxoYSxMLEosUCk6ITF9O3JldHVybiBLfShmLlhZUGxvdCk7Qi5fQkFSX1RISUNLTkVTU19SQVRJTz0uOTU7Qi5fU0lOR0xFX0JBUl9ESU1FTlNJT05fUkFUSU89LjQ7Qi5fQkFSX0FSRUFfQ0xBU1M9ImJhci1hcmVhIjtCLl9CQVJfRU5EX0tFWT0iYmFyRW5kIjtCLl9CQVJfVEhJQ0tORVNTX0tFWT0id2lkdGgiO0IuX0xBQkVMX0FSRUFfQ0xBU1M9ImJhci1sYWJlbC10ZXh0LWFyZWEiO0IuX0xBQkVMX01BUkdJTl9JTlNJREVfQkFSPTEwO2QuQmFyPUJ9LGZ1bmN0aW9uKGMsZCxmKXt2YXIgZz10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8ZnVuY3Rpb24odixBKXtmdW5jdGlvbiB5KCl7dGhpcy5jb25zdHJ1Y3Rvcj12fWZvcih2YXIgeCBpbiBBKUEuaGFzT3duUHJvcGVydHkoeCkmJgoodlt4XT1BW3hdKTt2LnByb3RvdHlwZT1udWxsPT09QT9PYmplY3QuY3JlYXRlKEEpOih5LnByb3RvdHlwZT1BLnByb3RvdHlwZSxuZXcgeSl9LGw9ZigxKSxrPWYoNSksbT1mKDgpLHA9ZigzKSxxPWYoMCk7Yz1mKDEwKTt2YXIgcj1mKDIyKTtkLlRpbWVJbnRlcnZhbD1jLm1ha2VFbnVtKCJzZWNvbmQgbWludXRlIGhvdXIgZGF5IHdlZWsgbW9udGggeWVhciIuc3BsaXQoIiAiKSk7ZC5UaW1lQXhpc09yaWVudGF0aW9uPWMubWFrZUVudW0oWyJ0b3AiLCJib3R0b20iXSk7ZC5UaWVyTGFiZWxQb3NpdGlvbj1jLm1ha2VFbnVtKFsiYmV0d2VlbiIsImNlbnRlciJdKTtmPWZ1bmN0aW9uKHYpe2Z1bmN0aW9uIEEoeSx4KXt5PXYuY2FsbCh0aGlzLHkseCl8fHRoaXM7eS5fbWF4VGltZUludGVydmFsUHJlY2lzaW9uPW51bGw7eS5fdGllckxhYmVsUG9zaXRpb25zPVtdO3kuYWRkQ2xhc3MoInRpbWUtYXhpcyIpO3kudGlja0xhYmVsUGFkZGluZyg1KTt5LmF4aXNDb25maWd1cmF0aW9ucyhBLl9ERUZBVUxUX1RJTUVfQVhJU19DT05GSUdVUkFUSU9OUyk7CnkuYW5ub3RhdGlvbkZvcm1hdHRlcihtLnRpbWUoIiVhICViICVkLCAlWSIpKTtyZXR1cm4geX1nKEEsdik7QS5wcm90b3R5cGUudGllckxhYmVsUG9zaXRpb25zPWZ1bmN0aW9uKHkpe2lmKG51bGw9PXkpcmV0dXJuIHRoaXMuX3RpZXJMYWJlbFBvc2l0aW9ucztpZigheS5ldmVyeShmdW5jdGlvbih4KXtyZXR1cm4iYmV0d2VlbiI9PT14LnRvTG93ZXJDYXNlKCl8fCJjZW50ZXIiPT09eC50b0xvd2VyQ2FzZSgpfSkpdGhyb3cgRXJyb3IoIlVuc3VwcG9ydGVkIHBvc2l0aW9uIGZvciB0aWVyIGxhYmVscyIpO3RoaXMuX3RpZXJMYWJlbFBvc2l0aW9ucz15O3RoaXMucmVkcmF3KCk7cmV0dXJuIHRoaXN9O0EucHJvdG90eXBlLm1heFRpbWVJbnRlcnZhbFByZWNpc2lvbj1mdW5jdGlvbih5KXtpZihudWxsPT15KXJldHVybiB0aGlzLl9tYXhUaW1lSW50ZXJ2YWxQcmVjaXNpb247dGhpcy5fbWF4VGltZUludGVydmFsUHJlY2lzaW9uPXk7dGhpcy5yZWRyYXcoKTtyZXR1cm4gdGhpc307QS5wcm90b3R5cGUuY3VycmVudEF4aXNDb25maWd1cmF0aW9uPQpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wb3NzaWJsZVRpbWVBeGlzQ29uZmlndXJhdGlvbnNbdGhpcy5fbW9zdFByZWNpc2VDb25maWdJbmRleF19O0EucHJvdG90eXBlLmF4aXNDb25maWd1cmF0aW9ucz1mdW5jdGlvbih5KXtpZihudWxsIT15KXt0aGlzLl9wb3NzaWJsZVRpbWVBeGlzQ29uZmlndXJhdGlvbnM9eTt0aGlzLl9udW1UaWVycz1xLk1hdGgubWF4KHRoaXMuX3Bvc3NpYmxlVGltZUF4aXNDb25maWd1cmF0aW9ucy5tYXAoZnVuY3Rpb24oRil7cmV0dXJuIEYubGVuZ3RofSksMCk7dGhpcy5faXNBbmNob3JlZCYmdGhpcy5fc2V0dXBEb21FbGVtZW50cygpO3k9dGhpcy50aWVyTGFiZWxQb3NpdGlvbnMoKTtmb3IodmFyIHg9W10sQz0wO0M8dGhpcy5fbnVtVGllcnM7QysrKXgucHVzaCh5W0NdfHwiYmV0d2VlbiIpO3RoaXMudGllckxhYmVsUG9zaXRpb25zKHgpO3RoaXMucmVkcmF3KCl9fTtBLnByb3RvdHlwZS5fZ2V0TW9zdFByZWNpc2VDb25maWd1cmF0aW9uSW5kZXg9CmZ1bmN0aW9uKCl7dmFyIHk9dGhpcyx4PXRoaXMuX3Bvc3NpYmxlVGltZUF4aXNDb25maWd1cmF0aW9ucy5sZW5ndGg7dGhpcy5fcG9zc2libGVUaW1lQXhpc0NvbmZpZ3VyYXRpb25zLmZvckVhY2goZnVuY3Rpb24oQyxGKXtGPHgmJkMuZXZlcnkoZnVuY3Rpb24oRCl7cmV0dXJuIHkuX2NoZWNrVGltZUF4aXNUaWVyQ29uZmlndXJhdGlvbihEKX0pJiYoeD1GKX0pO3g9PT10aGlzLl9wb3NzaWJsZVRpbWVBeGlzQ29uZmlndXJhdGlvbnMubGVuZ3RoJiYocS5XaW5kb3cud2Fybigiem9vbWVkIG91dCB0b28gZmFyOiBjb3VsZCBub3QgZmluZCBzdWl0YWJsZSBpbnRlcnZhbCB0byBkaXNwbGF5IGxhYmVscyIpLC0teCk7cmV0dXJuIHh9O0EucHJvdG90eXBlLm9yaWVudGF0aW9uPWZ1bmN0aW9uKHkpe2lmKHkmJigicmlnaHQiPT09eS50b0xvd2VyQ2FzZSgpfHwibGVmdCI9PT15LnRvTG93ZXJDYXNlKCkpKXRocm93IEVycm9yKHkrIiBpcyBub3QgYSBzdXBwb3J0ZWQgb3JpZW50YXRpb24gZm9yIFRpbWVBeGlzIC0gb25seSBob3Jpem9udGFsIG9yaWVudGF0aW9ucyBhcmUgc3VwcG9ydGVkIik7CnJldHVybiB2LnByb3RvdHlwZS5vcmllbnRhdGlvbi5jYWxsKHRoaXMseSl9O0EucHJvdG90eXBlLl9jb21wdXRlSGVpZ2h0PWZ1bmN0aW9uKCl7dmFyIHk9dGhpcy5fbWVhc3VyZXIubWVhc3VyZSgpLmhlaWdodDt0aGlzLl90aWVySGVpZ2h0cz1bXTtmb3IodmFyIHg9MDt4PHRoaXMuX251bVRpZXJzO3grKyl0aGlzLl90aWVySGVpZ2h0cy5wdXNoKHkrdGhpcy50aWNrTGFiZWxQYWRkaW5nKCkrKCJiZXR3ZWVuIj09PXRoaXMuX3RpZXJMYWJlbFBvc2l0aW9uc1t4XT8wOnRoaXMuX21heExhYmVsVGlja0xlbmd0aCgpKSk7cmV0dXJuIGwuc3VtKHRoaXMuX3RpZXJIZWlnaHRzKX07QS5wcm90b3R5cGUuX2dldEludGVydmFsTGVuZ3RoPWZ1bmN0aW9uKHkpe3ZhciB4PXRoaXMuX3NjYWxlLmRvbWFpbigpWzBdO3k9cC5UaW1lLnRpbWVJbnRlcnZhbFRvRDNUaW1lKHkuaW50ZXJ2YWwpLm9mZnNldCh4LHkuc3RlcCk7cmV0dXJuIHk+dGhpcy5fc2NhbGUuZG9tYWluKClbMV0/dGhpcy53aWR0aCgpOgpNYXRoLmFicyh0aGlzLl9zY2FsZS5zY2FsZSh5KS10aGlzLl9zY2FsZS5zY2FsZSh4KSl9O0EucHJvdG90eXBlLl9tYXhXaWR0aEZvckludGVydmFsPWZ1bmN0aW9uKHkpe3JldHVybiB0aGlzLl9tZWFzdXJlci5tZWFzdXJlKHkuZm9ybWF0dGVyKEEuX0xPTkdfREFURSkpLndpZHRofTtBLnByb3RvdHlwZS5fY2hlY2tUaW1lQXhpc1RpZXJDb25maWd1cmF0aW9uPWZ1bmN0aW9uKHkpe2lmKG51bGwhPXRoaXMuX21heFRpbWVJbnRlcnZhbFByZWNpc2lvbil7dmFyIHg9QS5fU09SVEVEX1RJTUVfSU5URVJWQUxfSU5ERVhbdGhpcy5fbWF4VGltZUludGVydmFsUHJlY2lzaW9uXSxDPUEuX1NPUlRFRF9USU1FX0lOVEVSVkFMX0lOREVYW3kuaW50ZXJ2YWxdO2lmKG51bGwhPXgmJm51bGwhPUMmJkM8eClyZXR1cm4hMX14PXRoaXMuX21heFdpZHRoRm9ySW50ZXJ2YWwoeSkrMip0aGlzLnRpY2tMYWJlbFBhZGRpbmcoKTtyZXR1cm4gTWF0aC5taW4odGhpcy5fZ2V0SW50ZXJ2YWxMZW5ndGgoeSksCnRoaXMud2lkdGgoKSk+PXh9O0EucHJvdG90eXBlLl9zaXplRnJvbU9mZmVyPWZ1bmN0aW9uKHkseCl7dmFyIEM9di5wcm90b3R5cGUuX3NpemVGcm9tT2ZmZXIuY2FsbCh0aGlzLHkseCk7eT10aGlzLl90aWVySGVpZ2h0cy5yZWR1Y2UoZnVuY3Rpb24oRixEKXtyZXR1cm4gRitEPkMuaGVpZ2h0P0Y6RitEfSk7eD10aGlzLm1hcmdpbigpKyh0aGlzLmFubm90YXRpb25zRW5hYmxlZCgpP3RoaXMuYW5ub3RhdGlvblRpZXJDb3VudCgpKnRoaXMuX2Fubm90YXRpb25UaWVySGVpZ2h0KCk6MCk7Qy5oZWlnaHQ9TWF0aC5taW4oQy5oZWlnaHQseSt4KTtyZXR1cm4gQ307QS5wcm90b3R5cGUuX3NldHVwPWZ1bmN0aW9uKCl7di5wcm90b3R5cGUuX3NldHVwLmNhbGwodGhpcyk7dGhpcy5fc2V0dXBEb21FbGVtZW50cygpfTtBLnByb3RvdHlwZS5fc2V0dXBEb21FbGVtZW50cz1mdW5jdGlvbigpe3RoaXMuY29udGVudCgpLnNlbGVjdEFsbCgiLiIrQS5USU1FX0FYSVNfVElFUl9DTEFTUykucmVtb3ZlKCk7CnRoaXMuX3RpZXJMYWJlbENvbnRhaW5lcnM9W107dGhpcy5fdGllck1hcmtDb250YWluZXJzPVtdO3RoaXMuX3RpZXJCYXNlbGluZXM9W107dGhpcy5fdGlja0xhYmVsQ29udGFpbmVyLnJlbW92ZSgpO3RoaXMuX2Jhc2VsaW5lLnJlbW92ZSgpO2Zvcih2YXIgeT0wO3k8dGhpcy5fbnVtVGllcnM7Kyt5KXt2YXIgeD10aGlzLmNvbnRlbnQoKS5hcHBlbmQoImciKS5jbGFzc2VkKEEuVElNRV9BWElTX1RJRVJfQ0xBU1MsITApO3RoaXMuX3RpZXJMYWJlbENvbnRhaW5lcnMucHVzaCh4LmFwcGVuZCgiZyIpLmNsYXNzZWQoci5BeGlzLlRJQ0tfTEFCRUxfQ0xBU1MrIi1jb250YWluZXIiLCEwKSk7dGhpcy5fdGllck1hcmtDb250YWluZXJzLnB1c2goeC5hcHBlbmQoImciKS5jbGFzc2VkKHIuQXhpcy5USUNLX01BUktfQ0xBU1MrIi1jb250YWluZXIiLCEwKSk7dGhpcy5fdGllckJhc2VsaW5lcy5wdXNoKHguYXBwZW5kKCJsaW5lIikuY2xhc3NlZCgiYmFzZWxpbmUiLCEwKSl9eT1uZXcgay5TdmdDb250ZXh0KHRoaXMuX3RpZXJMYWJlbENvbnRhaW5lcnNbMF0ubm9kZSgpKTsKdGhpcy5fbWVhc3VyZXI9bmV3IGsuQ2FjaGVNZWFzdXJlcih5KX07QS5wcm90b3R5cGUuX2dldFRpY2tJbnRlcnZhbFZhbHVlcz1mdW5jdGlvbih5KXtyZXR1cm4gdGhpcy5fc2NhbGUudGlja0ludGVydmFsKHkuaW50ZXJ2YWwseS5zdGVwKX07QS5wcm90b3R5cGUuX2dldFRpY2tWYWx1ZXM9ZnVuY3Rpb24oKXt2YXIgeT10aGlzO3JldHVybiB0aGlzLl9wb3NzaWJsZVRpbWVBeGlzQ29uZmlndXJhdGlvbnNbdGhpcy5fbW9zdFByZWNpc2VDb25maWdJbmRleF0ucmVkdWNlKGZ1bmN0aW9uKHgsQyl7cmV0dXJuIHguY29uY2F0KHkuX2dldFRpY2tJbnRlcnZhbFZhbHVlcyhDKSl9LFtdKX07QS5wcm90b3R5cGUuX2NsZWFuVGllcnM9ZnVuY3Rpb24oKXtmb3IodmFyIHk9MDt5PHRoaXMuX3RpZXJMYWJlbENvbnRhaW5lcnMubGVuZ3RoO3krKyl0aGlzLl90aWVyTGFiZWxDb250YWluZXJzW3ldLnNlbGVjdEFsbCgiLiIrci5BeGlzLlRJQ0tfTEFCRUxfQ0xBU1MpLnJlbW92ZSgpLHRoaXMuX3RpZXJNYXJrQ29udGFpbmVyc1t5XS5zZWxlY3RBbGwoIi4iKwpyLkF4aXMuVElDS19NQVJLX0NMQVNTKS5yZW1vdmUoKSx0aGlzLl90aWVyQmFzZWxpbmVzW3ldLnN0eWxlKCJ2aXNpYmlsaXR5IiwiaGlkZGVuIil9O0EucHJvdG90eXBlLl9nZXRUaWNrVmFsdWVzRm9yQ29uZmlndXJhdGlvbj1mdW5jdGlvbih5KXt5PXRoaXMuX3NjYWxlLnRpY2tJbnRlcnZhbCh5LmludGVydmFsLHkuc3RlcCk7dmFyIHg9dGhpcy5fc2NhbGUuZG9tYWluKCksQz15Lm1hcChmdW5jdGlvbihGKXtyZXR1cm4gRi52YWx1ZU9mKCl9KTstMT09PUMuaW5kZXhPZih4WzBdLnZhbHVlT2YoKSkmJnkudW5zaGlmdCh4WzBdKTstMT09PUMuaW5kZXhPZih4WzFdLnZhbHVlT2YoKSkmJnkucHVzaCh4WzFdKTtyZXR1cm4geX07QS5wcm90b3R5cGUuX3JlbmRlclRpZXJMYWJlbHM9ZnVuY3Rpb24oeSx4LEMpe3ZhciBGPXRoaXMsRD10aGlzLl9nZXRUaWNrVmFsdWVzRm9yQ29uZmlndXJhdGlvbih4KSxCPVtdOyJiZXR3ZWVuIj09PXRoaXMuX3RpZXJMYWJlbFBvc2l0aW9uc1tDXSYmCjE9PT14LnN0ZXA/RC5tYXAoZnVuY3Rpb24oUCxTKXtTKzE+PUQubGVuZ3RofHxCLnB1c2gobmV3IERhdGUoKERbUysxXS52YWx1ZU9mKCktRFtTXS52YWx1ZU9mKCkpLzIrRFtTXS52YWx1ZU9mKCkpKX0pOkI9RDt5PXkuc2VsZWN0QWxsKCIuIityLkF4aXMuVElDS19MQUJFTF9DTEFTUykuZGF0YShCLGZ1bmN0aW9uKFApe3JldHVybiBTdHJpbmcoUC52YWx1ZU9mKCkpfSk7dmFyIEc9eS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoci5BeGlzLlRJQ0tfTEFCRUxfQ0xBU1MsITApO0cuYXBwZW5kKCJ0ZXh0Iik7dmFyIEs9ImNlbnRlciI9PT10aGlzLl90aWVyTGFiZWxQb3NpdGlvbnNbQ118fDE9PT14LnN0ZXA/MDp0aGlzLnRpY2tMYWJlbFBhZGRpbmcoKTt2YXIgTD0iYm90dG9tIj09PXRoaXMub3JpZW50YXRpb24oKT9sLnN1bSh0aGlzLl90aWVySGVpZ2h0cy5zbGljZSgwLEMrMSkpLXRoaXMudGlja0xhYmVsUGFkZGluZygpOiJjZW50ZXIiPT09dGhpcy5fdGllckxhYmVsUG9zaXRpb25zW0NdPwp0aGlzLmhlaWdodCgpLWwuc3VtKHRoaXMuX3RpZXJIZWlnaHRzLnNsaWNlKDAsQykpLXRoaXMudGlja0xhYmVsUGFkZGluZygpLXRoaXMuX21heExhYmVsVGlja0xlbmd0aCgpOnRoaXMuaGVpZ2h0KCktbC5zdW0odGhpcy5fdGllckhlaWdodHMuc2xpY2UoMCxDKSktdGhpcy50aWNrTGFiZWxQYWRkaW5nKCk7Rz15Lm1lcmdlKEcpO3ZhciBKPUcuc2VsZWN0QWxsKCJ0ZXh0Iik7MDxKLnNpemUoKSYmSi5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitLKyIsIitMKyIpIik7eS5leGl0KCkucmVtb3ZlKCk7Ry5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKFApe3JldHVybiJ0cmFuc2xhdGUoIitGLl9zY2FsZS5zY2FsZShQKSsiLDApIn0pO0M9ImNlbnRlciI9PT10aGlzLl90aWVyTGFiZWxQb3NpdGlvbnNbQ118fDE9PT14LnN0ZXA/Im1pZGRsZSI6InN0YXJ0IjtHLnNlbGVjdEFsbCgidGV4dCIpLnRleHQoeC5mb3JtYXR0ZXIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsQyl9O0EucHJvdG90eXBlLl9yZW5kZXJUaWNrTWFya3M9CmZ1bmN0aW9uKHkseCl7eT10aGlzLl90aWVyTWFya0NvbnRhaW5lcnNbeF0uc2VsZWN0QWxsKCIuIityLkF4aXMuVElDS19NQVJLX0NMQVNTKS5kYXRhKHkpO3ZhciBDPXkuZW50ZXIoKS5hcHBlbmQoImxpbmUiKS5jbGFzc2VkKHIuQXhpcy5USUNLX01BUktfQ0xBU1MsITApLm1lcmdlKHkpLEY9dGhpcy5fZ2VuZXJhdGVUaWNrTWFya0F0dHJIYXNoKCksRD10aGlzLl90aWVySGVpZ2h0cy5zbGljZSgwLHgpLnJlZHVjZShmdW5jdGlvbihCLEcpe3JldHVybiBCK0d9LDApOyJib3R0b20iPT09dGhpcy5vcmllbnRhdGlvbigpPyhGLnkxPUQsRi55Mj1EKygiY2VudGVyIj09PXRoaXMuX3RpZXJMYWJlbFBvc2l0aW9uc1t4XT90aGlzLmlubmVyVGlja0xlbmd0aCgpOnRoaXMuX3RpZXJIZWlnaHRzW3hdKSk6KEYueTE9dGhpcy5oZWlnaHQoKS1ELEYueTI9dGhpcy5oZWlnaHQoKS0oRCsoImNlbnRlciI9PT10aGlzLl90aWVyTGFiZWxQb3NpdGlvbnNbeF0/dGhpcy5pbm5lclRpY2tMZW5ndGgoKToKdGhpcy5fdGllckhlaWdodHNbeF0pKSk7Qy5hdHRycyhGKTsiYm90dG9tIj09PXRoaXMub3JpZW50YXRpb24oKT8oRi55MT1ELEYueTI9RCsoImNlbnRlciI9PT10aGlzLl90aWVyTGFiZWxQb3NpdGlvbnNbeF0/dGhpcy5lbmRUaWNrTGVuZ3RoKCk6dGhpcy5fdGllckhlaWdodHNbeF0pKTooRi55MT10aGlzLmhlaWdodCgpLUQsRi55Mj10aGlzLmhlaWdodCgpLShEKygiY2VudGVyIj09PXRoaXMuX3RpZXJMYWJlbFBvc2l0aW9uc1t4XT90aGlzLmVuZFRpY2tMZW5ndGgoKTp0aGlzLl90aWVySGVpZ2h0c1t4XSkpKTtsLnNlbGVjdChDLm5vZGVzKClbMF0pLmF0dHJzKEYpO2wuc2VsZWN0KEMubm9kZXMoKVtDLnNpemUoKS0xXSkuYXR0cnMoRik7bC5zZWxlY3QoQy5ub2RlcygpWzBdKS5jbGFzc2VkKHIuQXhpcy5FTkRfVElDS19NQVJLX0NMQVNTLCEwKTtsLnNlbGVjdChDLm5vZGVzKClbQy5zaXplKCktMV0pLmNsYXNzZWQoci5BeGlzLkVORF9USUNLX01BUktfQ0xBU1MsITApO3kuZXhpdCgpLnJlbW92ZSgpfTsKQS5wcm90b3R5cGUuX3JlbmRlckxhYmVsbGVzc1RpY2tNYXJrcz1mdW5jdGlvbih5KXt5PXRoaXMuX3RpY2tNYXJrQ29udGFpbmVyLnNlbGVjdEFsbCgiLiIrci5BeGlzLlRJQ0tfTUFSS19DTEFTUykuZGF0YSh5KTt2YXIgeD15LmVudGVyKCkuYXBwZW5kKCJsaW5lIikuY2xhc3NlZChyLkF4aXMuVElDS19NQVJLX0NMQVNTLCEwKS5tZXJnZSh5KSxDPXRoaXMuX2dlbmVyYXRlVGlja01hcmtBdHRySGFzaCgpO0MueTI9ImJvdHRvbSI9PT10aGlzLm9yaWVudGF0aW9uKCk/dGhpcy50aWNrTGFiZWxQYWRkaW5nKCk6dGhpcy5oZWlnaHQoKS10aGlzLnRpY2tMYWJlbFBhZGRpbmcoKTt4LmF0dHJzKEMpO3kuZXhpdCgpLnJlbW92ZSgpfTtBLnByb3RvdHlwZS5fZ2VuZXJhdGVMYWJlbGxlc3NUaWNrcz1mdW5jdGlvbigpe3JldHVybiAxPnRoaXMuX21vc3RQcmVjaXNlQ29uZmlnSW5kZXg/W106dGhpcy5fZ2V0VGlja0ludGVydmFsVmFsdWVzKHRoaXMuX3Bvc3NpYmxlVGltZUF4aXNDb25maWd1cmF0aW9uc1t0aGlzLl9tb3N0UHJlY2lzZUNvbmZpZ0luZGV4LQoxXVswXSl9O0EucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5PWZ1bmN0aW9uKCl7dmFyIHk9dGhpczt0aGlzLl9tb3N0UHJlY2lzZUNvbmZpZ0luZGV4PXRoaXMuX2dldE1vc3RQcmVjaXNlQ29uZmlndXJhdGlvbkluZGV4KCk7dmFyIHg9dGhpcy5fcG9zc2libGVUaW1lQXhpc0NvbmZpZ3VyYXRpb25zW3RoaXMuX21vc3RQcmVjaXNlQ29uZmlnSW5kZXhdO3RoaXMuX2NsZWFuVGllcnMoKTt4LmZvckVhY2goZnVuY3Rpb24oRyxLKXtyZXR1cm4geS5fcmVuZGVyVGllckxhYmVscyh5Ll90aWVyTGFiZWxDb250YWluZXJzW0tdLEcsSyl9KTtmb3IodmFyIEM9eC5tYXAoZnVuY3Rpb24oRyl7cmV0dXJuIHkuX2dldFRpY2tWYWx1ZXNGb3JDb25maWd1cmF0aW9uKEcpfSksRj0wLEQ9MDtEPE1hdGgubWF4KHgubGVuZ3RoLDEpOysrRCl7dmFyIEI9dGhpcy5fZ2VuZXJhdGVCYXNlbGluZUF0dHJIYXNoKCk7Qi55MSs9ImJvdHRvbSI9PT10aGlzLm9yaWVudGF0aW9uKCk/RjotRjtCLnkyPUIueTE7CnRoaXMuX3RpZXJCYXNlbGluZXNbRF0uYXR0cnMoQikuc3R5bGUoInZpc2liaWxpdHkiLCJpbmhlcml0Iik7Ris9dGhpcy5fdGllckhlaWdodHNbRF19Rj1bXTtEPXRoaXMuX3NjYWxlLmRvbWFpbigpO0Q9dGhpcy5fc2NhbGUuc2NhbGUoRFsxXSktdGhpcy5fc2NhbGUuc2NhbGUoRFswXSk7MS41KnRoaXMuX2dldEludGVydmFsTGVuZ3RoKHhbMF0pPj1EJiYoRj10aGlzLl9nZW5lcmF0ZUxhYmVsbGVzc1RpY2tzKCkpO3RoaXMuX3JlbmRlckxhYmVsbGVzc1RpY2tNYXJrcyhGKTt0aGlzLl9oaWRlT3ZlcmZsb3dpbmdUaWVycygpO2ZvcihEPTA7RDx4Lmxlbmd0aDsrK0QpdGhpcy5fcmVuZGVyVGlja01hcmtzKENbRF0sRCksdGhpcy5faGlkZU92ZXJsYXBwaW5nQW5kQ3V0T2ZmTGFiZWxzKEQpO3RoaXMuYW5ub3RhdGlvbnNFbmFibGVkKCk/dGhpcy5fZHJhd0Fubm90YXRpb25zKCk6dGhpcy5fcmVtb3ZlQW5ub3RhdGlvbnMoKTtyZXR1cm4gdGhpc307QS5wcm90b3R5cGUuX2hpZGVPdmVyZmxvd2luZ1RpZXJzPQpmdW5jdGlvbigpe3ZhciB5PXRoaXMseD10aGlzLmhlaWdodCgpLEM9MDt0aGlzLmNvbnRlbnQoKS5zZWxlY3RBbGwoIi4iK0EuVElNRV9BWElTX1RJRVJfQ0xBU1MpLmF0dHIoInZpc2liaWxpdHkiLGZ1bmN0aW9uKEYsRCl7Qys9eS5fdGllckhlaWdodHNbRF07cmV0dXJuIEM8PXg/ImluaGVyaXQiOiJoaWRkZW4ifSl9O0EucHJvdG90eXBlLl9oaWRlT3ZlcmxhcHBpbmdBbmRDdXRPZmZMYWJlbHM9ZnVuY3Rpb24oeSl7ZnVuY3Rpb24geChHKXtyZXR1cm4gTWF0aC5mbG9vcihGLmxlZnQpPD1NYXRoLmNlaWwoRy5sZWZ0KSYmTWF0aC5mbG9vcihGLnRvcCk8PU1hdGguY2VpbChHLnRvcCkmJk1hdGguZmxvb3IoRy5yaWdodCk8PU1hdGguY2VpbChGLmxlZnQrQy53aWR0aCgpKSYmTWF0aC5mbG9vcihHLmJvdHRvbSk8PU1hdGguY2VpbChGLnRvcCtDLmhlaWdodCgpKX12YXIgQz10aGlzLEY9dGhpcy5lbGVtZW50KCkubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLEQ9dGhpcy5fdGllck1hcmtDb250YWluZXJzW3ldLnNlbGVjdEFsbCgiLiIrCnIuQXhpcy5USUNLX01BUktfQ0xBU1MpLmZpbHRlcihmdW5jdGlvbigpe3ZhciBHPWwuc2VsZWN0KHRoaXMpLnN0eWxlKCJ2aXNpYmlsaXR5Iik7cmV0dXJuInZpc2libGUiPT09R3x8ImluaGVyaXQiPT09R30pLm5vZGVzKCkubWFwKGZ1bmN0aW9uKEcpe3JldHVybiBHLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpfSksQjt0aGlzLl90aWVyTGFiZWxDb250YWluZXJzW3ldLnNlbGVjdEFsbCgiLiIrci5BeGlzLlRJQ0tfTEFCRUxfQ0xBU1MpLmZpbHRlcihmdW5jdGlvbigpe3ZhciBHPWwuc2VsZWN0KHRoaXMpLnN0eWxlKCJ2aXNpYmlsaXR5Iik7cmV0dXJuInZpc2libGUiPT09R3x8ImluaGVyaXQiPT09R30pLmVhY2goZnVuY3Rpb24oRyxLKXtHPXRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dmFyIEw9bC5zZWxlY3QodGhpcyksSj1EW0tdLFA9RFtLKzFdO0s9bnVsbCE9QiYmcS5ET00uY2xpZW50UmVjdHNPdmVybGFwKEcsQik7Sj1udWxsIT1KJiZxLkRPTS5jbGllbnRSZWN0c092ZXJsYXAoRywKSik7UD1udWxsIT1QJiZxLkRPTS5jbGllbnRSZWN0c092ZXJsYXAoRyxQKTsheChHKXx8S3x8Snx8UD9MLnN0eWxlKCJ2aXNpYmlsaXR5IiwiaGlkZGVuIik6KEI9RyxMLnN0eWxlKCJ2aXNpYmlsaXR5IiwiaW5oZXJpdCIpKX0pfTtBLnByb3RvdHlwZS5pbnZhbGlkYXRlQ2FjaGU9ZnVuY3Rpb24oKXt2LnByb3RvdHlwZS5pbnZhbGlkYXRlQ2FjaGUuY2FsbCh0aGlzKTt0aGlzLl9tZWFzdXJlci5yZXNldCgpfTtyZXR1cm4gQX0oci5BeGlzKTtmLlRJTUVfQVhJU19USUVSX0NMQVNTPSJ0aW1lLWF4aXMtdGllciI7Zi5fU09SVEVEX1RJTUVfSU5URVJWQUxfSU5ERVg9KHQ9e30sdFtkLlRpbWVJbnRlcnZhbC5zZWNvbmRdPTAsdFtkLlRpbWVJbnRlcnZhbC5taW51dGVdPTEsdFtkLlRpbWVJbnRlcnZhbC5ob3VyXT0yLHRbZC5UaW1lSW50ZXJ2YWwuZGF5XT0zLHRbZC5UaW1lSW50ZXJ2YWwud2Vla109NCx0W2QuVGltZUludGVydmFsLm1vbnRoXT01LHRbZC5UaW1lSW50ZXJ2YWwueWVhcl09CjYsdCk7Zi5fREVGQVVMVF9USU1FX0FYSVNfQ09ORklHVVJBVElPTlM9W1t7aW50ZXJ2YWw6ZC5UaW1lSW50ZXJ2YWwuc2Vjb25kLHN0ZXA6MSxmb3JtYXR0ZXI6bS50aW1lKCIlSTolTTolUyAlcCIpfSx7aW50ZXJ2YWw6ZC5UaW1lSW50ZXJ2YWwuZGF5LHN0ZXA6MSxmb3JtYXR0ZXI6bS50aW1lKCIlQiAlZSwgJVkiKX1dLFt7aW50ZXJ2YWw6ZC5UaW1lSW50ZXJ2YWwuc2Vjb25kLHN0ZXA6NSxmb3JtYXR0ZXI6bS50aW1lKCIlSTolTTolUyAlcCIpfSx7aW50ZXJ2YWw6ZC5UaW1lSW50ZXJ2YWwuZGF5LHN0ZXA6MSxmb3JtYXR0ZXI6bS50aW1lKCIlQiAlZSwgJVkiKX1dLFt7aW50ZXJ2YWw6ZC5UaW1lSW50ZXJ2YWwuc2Vjb25kLHN0ZXA6MTAsZm9ybWF0dGVyOm0udGltZSgiJUk6JU06JVMgJXAiKX0se2ludGVydmFsOmQuVGltZUludGVydmFsLmRheSxzdGVwOjEsZm9ybWF0dGVyOm0udGltZSgiJUIgJWUsICVZIil9XSxbe2ludGVydmFsOmQuVGltZUludGVydmFsLnNlY29uZCxzdGVwOjE1LApmb3JtYXR0ZXI6bS50aW1lKCIlSTolTTolUyAlcCIpfSx7aW50ZXJ2YWw6ZC5UaW1lSW50ZXJ2YWwuZGF5LHN0ZXA6MSxmb3JtYXR0ZXI6bS50aW1lKCIlQiAlZSwgJVkiKX1dLFt7aW50ZXJ2YWw6ZC5UaW1lSW50ZXJ2YWwuc2Vjb25kLHN0ZXA6MzAsZm9ybWF0dGVyOm0udGltZSgiJUk6JU06JVMgJXAiKX0se2ludGVydmFsOmQuVGltZUludGVydmFsLmRheSxzdGVwOjEsZm9ybWF0dGVyOm0udGltZSgiJUIgJWUsICVZIil9XSxbe2ludGVydmFsOmQuVGltZUludGVydmFsLm1pbnV0ZSxzdGVwOjEsZm9ybWF0dGVyOm0udGltZSgiJUk6JU0gJXAiKX0se2ludGVydmFsOmQuVGltZUludGVydmFsLmRheSxzdGVwOjEsZm9ybWF0dGVyOm0udGltZSgiJUIgJWUsICVZIil9XSxbe2ludGVydmFsOmQuVGltZUludGVydmFsLm1pbnV0ZSxzdGVwOjUsZm9ybWF0dGVyOm0udGltZSgiJUk6JU0gJXAiKX0se2ludGVydmFsOmQuVGltZUludGVydmFsLmRheSxzdGVwOjEsZm9ybWF0dGVyOm0udGltZSgiJUIgJWUsICVZIil9XSwKW3tpbnRlcnZhbDpkLlRpbWVJbnRlcnZhbC5taW51dGUsc3RlcDoxMCxmb3JtYXR0ZXI6bS50aW1lKCIlSTolTSAlcCIpfSx7aW50ZXJ2YWw6ZC5UaW1lSW50ZXJ2YWwuZGF5LHN0ZXA6MSxmb3JtYXR0ZXI6bS50aW1lKCIlQiAlZSwgJVkiKX1dLFt7aW50ZXJ2YWw6ZC5UaW1lSW50ZXJ2YWwubWludXRlLHN0ZXA6MTUsZm9ybWF0dGVyOm0udGltZSgiJUk6JU0gJXAiKX0se2ludGVydmFsOmQuVGltZUludGVydmFsLmRheSxzdGVwOjEsZm9ybWF0dGVyOm0udGltZSgiJUIgJWUsICVZIil9XSxbe2ludGVydmFsOmQuVGltZUludGVydmFsLm1pbnV0ZSxzdGVwOjMwLGZvcm1hdHRlcjptLnRpbWUoIiVJOiVNICVwIil9LHtpbnRlcnZhbDpkLlRpbWVJbnRlcnZhbC5kYXksc3RlcDoxLGZvcm1hdHRlcjptLnRpbWUoIiVCICVlLCAlWSIpfV0sW3tpbnRlcnZhbDpkLlRpbWVJbnRlcnZhbC5ob3VyLHN0ZXA6MSxmb3JtYXR0ZXI6bS50aW1lKCIlSSAlcCIpfSx7aW50ZXJ2YWw6ZC5UaW1lSW50ZXJ2YWwuZGF5LApzdGVwOjEsZm9ybWF0dGVyOm0udGltZSgiJUIgJWUsICVZIil9XSxbe2ludGVydmFsOmQuVGltZUludGVydmFsLmhvdXIsc3RlcDozLGZvcm1hdHRlcjptLnRpbWUoIiVJICVwIil9LHtpbnRlcnZhbDpkLlRpbWVJbnRlcnZhbC5kYXksc3RlcDoxLGZvcm1hdHRlcjptLnRpbWUoIiVCICVlLCAlWSIpfV0sW3tpbnRlcnZhbDpkLlRpbWVJbnRlcnZhbC5ob3VyLHN0ZXA6Nixmb3JtYXR0ZXI6bS50aW1lKCIlSSAlcCIpfSx7aW50ZXJ2YWw6ZC5UaW1lSW50ZXJ2YWwuZGF5LHN0ZXA6MSxmb3JtYXR0ZXI6bS50aW1lKCIlQiAlZSwgJVkiKX1dLFt7aW50ZXJ2YWw6ZC5UaW1lSW50ZXJ2YWwuaG91cixzdGVwOjEyLGZvcm1hdHRlcjptLnRpbWUoIiVJICVwIil9LHtpbnRlcnZhbDpkLlRpbWVJbnRlcnZhbC5kYXksc3RlcDoxLGZvcm1hdHRlcjptLnRpbWUoIiVCICVlLCAlWSIpfV0sW3tpbnRlcnZhbDpkLlRpbWVJbnRlcnZhbC5kYXksc3RlcDoxLGZvcm1hdHRlcjptLnRpbWUoIiVhICVlIil9LAp7aW50ZXJ2YWw6ZC5UaW1lSW50ZXJ2YWwubW9udGgsc3RlcDoxLGZvcm1hdHRlcjptLnRpbWUoIiVCICVZIil9XSxbe2ludGVydmFsOmQuVGltZUludGVydmFsLmRheSxzdGVwOjEsZm9ybWF0dGVyOm0udGltZSgiJWUiKX0se2ludGVydmFsOmQuVGltZUludGVydmFsLm1vbnRoLHN0ZXA6MSxmb3JtYXR0ZXI6bS50aW1lKCIlQiAlWSIpfV0sW3tpbnRlcnZhbDpkLlRpbWVJbnRlcnZhbC5tb250aCxzdGVwOjEsZm9ybWF0dGVyOm0udGltZSgiJUIiKX0se2ludGVydmFsOmQuVGltZUludGVydmFsLnllYXIsc3RlcDoxLGZvcm1hdHRlcjptLnRpbWUoIiVZIil9XSxbe2ludGVydmFsOmQuVGltZUludGVydmFsLm1vbnRoLHN0ZXA6MSxmb3JtYXR0ZXI6bS50aW1lKCIlYiIpfSx7aW50ZXJ2YWw6ZC5UaW1lSW50ZXJ2YWwueWVhcixzdGVwOjEsZm9ybWF0dGVyOm0udGltZSgiJVkiKX1dLFt7aW50ZXJ2YWw6ZC5UaW1lSW50ZXJ2YWwubW9udGgsc3RlcDozLGZvcm1hdHRlcjptLnRpbWUoIiViIil9LAp7aW50ZXJ2YWw6ZC5UaW1lSW50ZXJ2YWwueWVhcixzdGVwOjEsZm9ybWF0dGVyOm0udGltZSgiJVkiKX1dLFt7aW50ZXJ2YWw6ZC5UaW1lSW50ZXJ2YWwubW9udGgsc3RlcDo2LGZvcm1hdHRlcjptLnRpbWUoIiViIil9LHtpbnRlcnZhbDpkLlRpbWVJbnRlcnZhbC55ZWFyLHN0ZXA6MSxmb3JtYXR0ZXI6bS50aW1lKCIlWSIpfV0sW3tpbnRlcnZhbDpkLlRpbWVJbnRlcnZhbC55ZWFyLHN0ZXA6MSxmb3JtYXR0ZXI6bS50aW1lKCIlWSIpfV0sW3tpbnRlcnZhbDpkLlRpbWVJbnRlcnZhbC55ZWFyLHN0ZXA6MSxmb3JtYXR0ZXI6bS50aW1lKCIleSIpfV0sW3tpbnRlcnZhbDpkLlRpbWVJbnRlcnZhbC55ZWFyLHN0ZXA6NSxmb3JtYXR0ZXI6bS50aW1lKCIlWSIpfV0sW3tpbnRlcnZhbDpkLlRpbWVJbnRlcnZhbC55ZWFyLHN0ZXA6MjUsZm9ybWF0dGVyOm0udGltZSgiJVkiKX1dLFt7aW50ZXJ2YWw6ZC5UaW1lSW50ZXJ2YWwueWVhcixzdGVwOjUwLGZvcm1hdHRlcjptLnRpbWUoIiVZIil9XSwKW3tpbnRlcnZhbDpkLlRpbWVJbnRlcnZhbC55ZWFyLHN0ZXA6MTAwLGZvcm1hdHRlcjptLnRpbWUoIiVZIil9XSxbe2ludGVydmFsOmQuVGltZUludGVydmFsLnllYXIsc3RlcDoyMDAsZm9ybWF0dGVyOm0udGltZSgiJVkiKX1dLFt7aW50ZXJ2YWw6ZC5UaW1lSW50ZXJ2YWwueWVhcixzdGVwOjUwMCxmb3JtYXR0ZXI6bS50aW1lKCIlWSIpfV0sW3tpbnRlcnZhbDpkLlRpbWVJbnRlcnZhbC55ZWFyLHN0ZXA6MUUzLGZvcm1hdHRlcjptLnRpbWUoIiVZIil9XV07Zi5fTE9OR19EQVRFPW5ldyBEYXRlKDk5OTksOCwyOSwxMiw1OSw5OTk5KTtkLlRpbWU9Zjt2YXIgdH0sZnVuY3Rpb24oYyxkLGYpe3ZhciBnPXRoaXMmJnRoaXMuX19leHRlbmRzfHxmdW5jdGlvbihrLG0pe2Z1bmN0aW9uIHAoKXt0aGlzLmNvbnN0cnVjdG9yPWt9Zm9yKHZhciBxIGluIG0pbS5oYXNPd25Qcm9wZXJ0eShxKSYmKGtbcV09bVtxXSk7ay5wcm90b3R5cGU9bnVsbD09PW0/T2JqZWN0LmNyZWF0ZShtKToocC5wcm90b3R5cGU9Cm0ucHJvdG90eXBlLG5ldyBwKX0sbD1mKDEyKTtjPWZ1bmN0aW9uKGspe2Z1bmN0aW9uIG0oKXt2YXIgcD1rLmNhbGwodGhpcyl8fHRoaXM7cC5fZGV0YWNoQ2FsbGJhY2s9ZnVuY3Rpb24ocSl7cmV0dXJuIHAucmVtb3ZlKHEpfTtyZXR1cm4gcH1nKG0sayk7bS5wcm90b3R5cGUuYW5jaG9yPWZ1bmN0aW9uKHApe3ZhciBxPXRoaXM7cD1sLmNvZXJjZUV4dGVybmFsRDMocCk7ay5wcm90b3R5cGUuYW5jaG9yLmNhbGwodGhpcyxwKTt0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uKHIpe3JldHVybiByLmFuY2hvcihxLmVsZW1lbnQoKSl9KTtyZXR1cm4gdGhpc307bS5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCl7dGhpcy5fZm9yRWFjaChmdW5jdGlvbihwKXtyZXR1cm4gcC5yZW5kZXIoKX0pO3JldHVybiB0aGlzfTttLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24oKXt0aHJvdyBFcnJvcigiaGFzKCkgaXMgbm90IGltcGxlbWVudGVkIG9uIENvbXBvbmVudENvbnRhaW5lciIpO307bS5wcm90b3R5cGUuX2Fkb3B0QW5kQW5jaG9yPQpmdW5jdGlvbihwKXtwLnBhcmVudCh0aGlzKTtwLm9uRGV0YWNoKHRoaXMuX2RldGFjaENhbGxiYWNrKTt0aGlzLl9pc0FuY2hvcmVkJiZwLmFuY2hvcih0aGlzLmVsZW1lbnQoKSl9O20ucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbihwKXt0aGlzLmhhcyhwKSYmKHAub2ZmRGV0YWNoKHRoaXMuX2RldGFjaENhbGxiYWNrKSx0aGlzLl9yZW1vdmUocCkscC5kZXRhY2goKSx0aGlzLnJlZHJhdygpKTtyZXR1cm4gdGhpc307bS5wcm90b3R5cGUuX3JlbW92ZT1mdW5jdGlvbigpe307bS5wcm90b3R5cGUuX2ZvckVhY2g9ZnVuY3Rpb24oKXt0aHJvdyBFcnJvcigiX2ZvckVhY2goKSBpcyBub3QgaW1wbGVtZW50ZWQgb24gQ29tcG9uZW50Q29udGFpbmVyIik7fTttLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7ay5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO3RoaXMuX2ZvckVhY2goZnVuY3Rpb24ocCl7cmV0dXJuIHAuZGVzdHJveSgpfSl9O20ucHJvdG90eXBlLmludmFsaWRhdGVDYWNoZT0KZnVuY3Rpb24oKXt0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uKHApe3JldHVybiBwLmludmFsaWRhdGVDYWNoZSgpfSl9O3JldHVybiBtfShmKDQpLkNvbXBvbmVudCk7ZC5Db21wb25lbnRDb250YWluZXI9Y30sZnVuY3Rpb24oYyxkLGYpe2Z1bmN0aW9uIGcoQSl7cS5hZGQoQSk7cC5hZGQoQSk7bCgpfWZ1bmN0aW9uIGwoKXtyfHwocj0hMCx2LnJlbmRlcigpKX12YXIgaz1mKDApO2M9ZigxMCk7dmFyIG09ZigzOSkscD1uZXcgay5TZXQscT1uZXcgay5TZXQscj0hMSx0PSExO2QuUG9saWN5PWMubWFrZUVudW0oWyJpbW1lZGlhdGUiLCJhbmltYXRpb25GcmFtZSIsInRpbWVvdXQiXSk7dmFyIHY9bmV3IG0uQW5pbWF0aW9uRnJhbWU7ZC5yZW5kZXJQb2xpY3k9ZnVuY3Rpb24oKXt2YXIgQT1QbG90dGFibGUuUmVuZGVyQ29udHJvbGxlci5Qb2xpY3kuaW1tZWRpYXRlO2lmKG51bGwhPUEpc3dpdGNoKEEpe2Nhc2UgZC5Qb2xpY3kuaW1tZWRpYXRlOnY9bmV3IG0uSW1tZWRpYXRlO2JyZWFrOwpjYXNlIGQuUG9saWN5LmFuaW1hdGlvbkZyYW1lOnY9bmV3IG0uQW5pbWF0aW9uRnJhbWU7YnJlYWs7Y2FzZSBkLlBvbGljeS50aW1lb3V0OnY9bmV3IG0uVGltZW91dDticmVhaztkZWZhdWx0OmsuV2luZG93Lndhcm4oIlVucmVjb2duaXplZCByZW5kZXJQb2xpY3k6ICIrQSl9fTtkLnJlZ2lzdGVyVG9SZW5kZXI9ZnVuY3Rpb24oQSl7dCYmay5XaW5kb3cud2FybigiUmVnaXN0ZXJlZCB0byByZW5kZXIgd2hpbGUgb3RoZXIgY29tcG9uZW50cyBhcmUgZmx1c2hpbmc6IHJlcXVlc3QgbWF5IGJlIGlnbm9yZWQiKTtwLmFkZChBKTtsKCl9O2QucmVnaXN0ZXJUb0NvbXB1dGVMYXlvdXRBbmRSZW5kZXI9ZztkLnJlZ2lzdGVyVG9Db21wdXRlTGF5b3V0PWZ1bmN0aW9uKEEpe2coQSl9O2QuZmx1c2g9ZnVuY3Rpb24oKXtpZihyKXtxLmZvckVhY2goZnVuY3Rpb24oeSl7cmV0dXJuIHkuY29tcHV0ZUxheW91dCgpfSk7cC5mb3JFYWNoKGZ1bmN0aW9uKHkpe3JldHVybiB5LnJlbmRlcigpfSk7CnQ9ITA7dmFyIEE9bmV3IGsuU2V0O3AuZm9yRWFjaChmdW5jdGlvbih5KXt0cnl7eS5yZW5kZXJJbW1lZGlhdGVseSgpfWNhdGNoKHgpe3dpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhyb3cgeDt9LDApLEEuYWRkKHkpfX0pO3E9bmV3IGsuU2V0O3A9QTt0PXI9ITF9fX0sZnVuY3Rpb24oYyxkLGYpe3ZhciBnPWYoMSk7ZC5jaXJjbGU9ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oayl7cmV0dXJuIGcuc3ltYm9sKCkudHlwZShnLnN5bWJvbENpcmNsZSkuc2l6ZShNYXRoLlBJKk1hdGgucG93KGsvMiwyKSl9fTtkLnNxdWFyZT1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihrKXtyZXR1cm4gZy5zeW1ib2woKS50eXBlKGcuc3ltYm9sU3F1YXJlKS5zaXplKE1hdGgucG93KGssMikpfX07ZC5jcm9zcz1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihrKXtyZXR1cm4gZy5zeW1ib2woKS50eXBlKGcuc3ltYm9sQ3Jvc3MpLnNpemUoNS85Kk1hdGgucG93KGssMikpfX07ZC5kaWFtb25kPQpmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihrKXtyZXR1cm4gZy5zeW1ib2woKS50eXBlKGcuc3ltYm9sRGlhbW9uZCkuc2l6ZShNYXRoLnRhbihNYXRoLlBJLzYpKk1hdGgucG93KGssMikvMil9fTtkLnRyaWFuZ2xlPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKGspe3JldHVybiBnLnN5bWJvbCgpLnR5cGUoZy5zeW1ib2xUcmlhbmdsZSkuc2l6ZShNYXRoLnNxcnQoMykqTWF0aC5wb3coay8yLDIpKX19O2Quc3Rhcj1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihrKXtyZXR1cm4gZy5zeW1ib2woKS50eXBlKGcuc3ltYm9sU3Rhcikuc2l6ZSguODkwODEzMDkxNTI5Mjg1MipNYXRoLnBvdyhrLzIsMikpfX07dmFyIGw9MyooMS9NYXRoLnNxcnQoMTIpLzIrMSk7ZC53eWU9ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oayl7cmV0dXJuIGcuc3ltYm9sKCkudHlwZShnLnN5bWJvbFd5ZSkuc2l6ZShsKk1hdGgucG93KGsvMi40LDIpKX19fSxmdW5jdGlvbihjLGQsZil7dmFyIGc9CnRoaXMmJnRoaXMuX19leHRlbmRzfHxmdW5jdGlvbihxLHIpe2Z1bmN0aW9uIHQoKXt0aGlzLmNvbnN0cnVjdG9yPXF9Zm9yKHZhciB2IGluIHIpci5oYXNPd25Qcm9wZXJ0eSh2KSYmKHFbdl09clt2XSk7cS5wcm90b3R5cGU9bnVsbD09PXI/T2JqZWN0LmNyZWF0ZShyKToodC5wcm90b3R5cGU9ci5wcm90b3R5cGUsbmV3IHQpfSxsPWYoMjUpLGs9ZigwKSxtPWYoMTIpLHA9ZigzNyk7Yz1mdW5jdGlvbihxKXtmdW5jdGlvbiByKCl7dmFyIHQ9cS5jYWxsKHRoaXMpfHx0aGlzO3QuX2RldGVjdGlvblJhZGl1cz0zO3QuX3Jlc2l6YWJsZT0hMTt0Ll9tb3ZhYmxlPSExO3QuX2hhc0Nvcm5lcnM9ITA7dC5hZGRDbGFzcygiZHJhZy1ib3gtbGF5ZXIiKTt0Ll9kcmFnSW50ZXJhY3Rpb249bmV3IGwuRHJhZzt0Ll9zZXRVcENhbGxiYWNrcygpO3QuX2RyYWdJbnRlcmFjdGlvbi5hdHRhY2hUbyh0KTt0Ll9kcmFnU3RhcnRDYWxsYmFja3M9bmV3IGsuQ2FsbGJhY2tTZXQ7dC5fZHJhZ0NhbGxiYWNrcz0KbmV3IGsuQ2FsbGJhY2tTZXQ7dC5fZHJhZ0VuZENhbGxiYWNrcz1uZXcgay5DYWxsYmFja1NldDtyZXR1cm4gdH1nKHIscSk7ci5wcm90b3R5cGUuX3NldFVwQ2FsbGJhY2tzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChHLEspezA9PT1CJiZHLng9PT1LLngmJkcueT09PUsueSYmeS5ib3hWaXNpYmxlKCExKTt5Ll9kcmFnRW5kQ2FsbGJhY2tzLmNhbGxDYWxsYmFja3MoeS5ib3VuZHMoKSl9ZnVuY3Rpb24gdihHLEspe3N3aXRjaChCKXtjYXNlIDA6Ri54PUsueDtGLnk9Sy55O2JyZWFrO2Nhc2UgMTp4LmJvdHRvbT9GLnk9Sy55OngudG9wJiYoQy55PUsueSk7eC5yaWdodD9GLng9Sy54OngubGVmdCYmKEMueD1LLngpO2JyZWFrO2Nhc2UgMjpHPUsueC1ELng7dmFyIEw9Sy55LUQueTtDLngrPUc7Qy55Kz1MO0YueCs9RztGLnkrPUw7RD1LfXkuX3NldEJvdW5kcyh7dG9wTGVmdDpDLGJvdHRvbVJpZ2h0OkZ9KTt5Ll94Qm91bmRzTW9kZT09PXAuUHJvcGVydHlNb2RlLlZBTFVFJiZudWxsIT0KeS54U2NhbGUoKSYmeS5fc2V0WEV4dGVudChbeS54U2NhbGUoKS5pbnZlcnQoQy54KSx5LnhTY2FsZSgpLmludmVydChGLngpXSk7eS5feUJvdW5kc01vZGU9PT1wLlByb3BlcnR5TW9kZS5WQUxVRSYmbnVsbCE9eS55U2NhbGUoKSYmeS5fc2V0WUV4dGVudChbeS55U2NhbGUoKS5pbnZlcnQoQy55KSx5LnlTY2FsZSgpLmludmVydChGLnkpXSk7eS5yZW5kZXIoKTt5Ll9kcmFnQ2FsbGJhY2tzLmNhbGxDYWxsYmFja3MoeS5ib3VuZHMoKSl9ZnVuY3Rpb24gQShHKXt4PXkuX2dldFJlc2l6aW5nRWRnZXMoRyk7dmFyIEs9eS5ib3VuZHMoKTtLPUsudG9wTGVmdC54PD1HLngmJkcueDw9Sy5ib3R0b21SaWdodC54JiZLLnRvcExlZnQueTw9Ry55JiZHLnk8PUsuYm90dG9tUmlnaHQueTt5LmJveFZpc2libGUoKSYmKHgudG9wfHx4LmJvdHRvbXx8eC5sZWZ0fHx4LnJpZ2h0KT9CPTE6eS5ib3hWaXNpYmxlKCkmJnkubW92YWJsZSgpJiZLP0I9MjooQj0wLHkuX3NldEJvdW5kcyh7dG9wTGVmdDpHLApib3R0b21SaWdodDpHfSkseS5feEJvdW5kc01vZGU9PT1wLlByb3BlcnR5TW9kZS5WQUxVRSYmbnVsbCE9eS54U2NhbGUoKSYmeS5fc2V0WEV4dGVudChbeS54U2NhbGUoKS5pbnZlcnQoRy54KSx5LnhTY2FsZSgpLmludmVydChHLngpXSkseS5feUJvdW5kc01vZGU9PT1wLlByb3BlcnR5TW9kZS5WQUxVRSYmbnVsbCE9eS55U2NhbGUoKSYmeS5fc2V0WUV4dGVudChbeS55U2NhbGUoKS5pbnZlcnQoRy55KSx5LnlTY2FsZSgpLmludmVydChHLnkpXSkseS5yZW5kZXIoKSk7eS5ib3hWaXNpYmxlKCEwKTtLPXkuYm91bmRzKCk7Qz17eDpLLnRvcExlZnQueCx5OksudG9wTGVmdC55fTtGPXt4OksuYm90dG9tUmlnaHQueCx5OksuYm90dG9tUmlnaHQueX07RD1HO3kuX2RyYWdTdGFydENhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKEspfXZhciB5PXRoaXMseCxDLEYsRCxCPTA7dGhpcy5fZHJhZ0ludGVyYWN0aW9uLm9uRHJhZ1N0YXJ0KEEpO3RoaXMuX2RyYWdJbnRlcmFjdGlvbi5vbkRyYWcodik7CnRoaXMuX2RyYWdJbnRlcmFjdGlvbi5vbkRyYWdFbmQodCk7dGhpcy5fZGlzY29ubmVjdEludGVyYWN0aW9uPWZ1bmN0aW9uKCl7eS5fZHJhZ0ludGVyYWN0aW9uLm9mZkRyYWdTdGFydChBKTt5Ll9kcmFnSW50ZXJhY3Rpb24ub2ZmRHJhZyh2KTt5Ll9kcmFnSW50ZXJhY3Rpb24ub2ZmRHJhZ0VuZCh0KTt5Ll9kcmFnSW50ZXJhY3Rpb24uZGV0YWNoKCl9fTtyLnByb3RvdHlwZS5fc2V0dXA9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7cmV0dXJuIHYuX2JveC5hcHBlbmQoImxpbmUiKS5zdHlsZXMoe29wYWNpdHk6MCxzdHJva2U6InBpbmsiLCJwb2ludGVyLWV2ZW50cyI6InZpc2libGVTdHJva2UifSl9dmFyIHY9dGhpcztxLnByb3RvdHlwZS5fc2V0dXAuY2FsbCh0aGlzKTt0aGlzLl9kZXRlY3Rpb25FZGdlVD10KCkuY2xhc3NlZCgiZHJhZy1lZGdlLXRiIiwhMCk7dGhpcy5fZGV0ZWN0aW9uRWRnZUI9dCgpLmNsYXNzZWQoImRyYWctZWRnZS10YiIsITApO3RoaXMuX2RldGVjdGlvbkVkZ2VMPQp0KCkuY2xhc3NlZCgiZHJhZy1lZGdlLWxyIiwhMCk7dGhpcy5fZGV0ZWN0aW9uRWRnZVI9dCgpLmNsYXNzZWQoImRyYWctZWRnZS1sciIsITApO2lmKHRoaXMuX2hhc0Nvcm5lcnMpe3ZhciBBPWZ1bmN0aW9uKCl7cmV0dXJuIHYuX2JveC5hcHBlbmQoImNpcmNsZSIpLnN0eWxlcyh7b3BhY2l0eTowLGZpbGw6InBpbmsiLCJwb2ludGVyLWV2ZW50cyI6InZpc2libGVGaWxsIn0pfTt0aGlzLl9kZXRlY3Rpb25Db3JuZXJUTD1BKCkuY2xhc3NlZCgiZHJhZy1jb3JuZXItdGwiLCEwKTt0aGlzLl9kZXRlY3Rpb25Db3JuZXJUUj1BKCkuY2xhc3NlZCgiZHJhZy1jb3JuZXItdHIiLCEwKTt0aGlzLl9kZXRlY3Rpb25Db3JuZXJCTD1BKCkuY2xhc3NlZCgiZHJhZy1jb3JuZXItYmwiLCEwKTt0aGlzLl9kZXRlY3Rpb25Db3JuZXJCUj1BKCkuY2xhc3NlZCgiZHJhZy1jb3JuZXItYnIiLCEwKX19O3IucHJvdG90eXBlLl9nZXRSZXNpemluZ0VkZ2VzPWZ1bmN0aW9uKHQpe3ZhciB2PXt0b3A6ITEsCmJvdHRvbTohMSxsZWZ0OiExLHJpZ2h0OiExfTtpZighdGhpcy5yZXNpemFibGUoKSlyZXR1cm4gdjt2YXIgQT10aGlzLmJvdW5kcygpLHk9QS50b3BMZWZ0LnkseD1BLmJvdHRvbVJpZ2h0LnksQz1BLnRvcExlZnQueDtBPUEuYm90dG9tUmlnaHQueDt2YXIgRj10aGlzLl9kZXRlY3Rpb25SYWRpdXM7Qy1GPD10LngmJnQueDw9QStGJiYodi50b3A9eS1GPD10LnkmJnQueTw9eStGLHYuYm90dG9tPXgtRjw9dC55JiZ0Lnk8PXgrRik7eS1GPD10LnkmJnQueTw9eCtGJiYodi5sZWZ0PUMtRjw9dC54JiZ0Lng8PUMrRix2LnJpZ2h0PUEtRjw9dC54JiZ0Lng8PUErRik7cmV0dXJuIHZ9O3IucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5PWZ1bmN0aW9uKCl7cS5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHkuY2FsbCh0aGlzKTtpZih0aGlzLmJveFZpc2libGUoKSl7dmFyIHQ9dGhpcy5ib3VuZHMoKSx2PXQudG9wTGVmdC55LEE9dC5ib3R0b21SaWdodC55LHk9dC50b3BMZWZ0Lng7dD0KdC5ib3R0b21SaWdodC54O3RoaXMuX2RldGVjdGlvbkVkZ2VULmF0dHJzKHt4MTp5LHkxOnYseDI6dCx5Mjp2LCJzdHJva2Utd2lkdGgiOjIqdGhpcy5fZGV0ZWN0aW9uUmFkaXVzfSk7dGhpcy5fZGV0ZWN0aW9uRWRnZUIuYXR0cnMoe3gxOnkseTE6QSx4Mjp0LHkyOkEsInN0cm9rZS13aWR0aCI6Mip0aGlzLl9kZXRlY3Rpb25SYWRpdXN9KTt0aGlzLl9kZXRlY3Rpb25FZGdlTC5hdHRycyh7eDE6eSx5MTp2LHgyOnkseTI6QSwic3Ryb2tlLXdpZHRoIjoyKnRoaXMuX2RldGVjdGlvblJhZGl1c30pO3RoaXMuX2RldGVjdGlvbkVkZ2VSLmF0dHJzKHt4MTp0LHkxOnYseDI6dCx5MjpBLCJzdHJva2Utd2lkdGgiOjIqdGhpcy5fZGV0ZWN0aW9uUmFkaXVzfSk7dGhpcy5faGFzQ29ybmVycyYmKHRoaXMuX2RldGVjdGlvbkNvcm5lclRMLmF0dHJzKHtjeDp5LGN5OnYscjp0aGlzLl9kZXRlY3Rpb25SYWRpdXN9KSx0aGlzLl9kZXRlY3Rpb25Db3JuZXJUUi5hdHRycyh7Y3g6dCxjeTp2LHI6dGhpcy5fZGV0ZWN0aW9uUmFkaXVzfSksCnRoaXMuX2RldGVjdGlvbkNvcm5lckJMLmF0dHJzKHtjeDp5LGN5OkEscjp0aGlzLl9kZXRlY3Rpb25SYWRpdXN9KSx0aGlzLl9kZXRlY3Rpb25Db3JuZXJCUi5hdHRycyh7Y3g6dCxjeTpBLHI6dGhpcy5fZGV0ZWN0aW9uUmFkaXVzfSkpfXJldHVybiB0aGlzfTtyLnByb3RvdHlwZS5kZXRlY3Rpb25SYWRpdXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGV0ZWN0aW9uUmFkaXVzfTtyLnByb3RvdHlwZS5yZXNpemFibGU9ZnVuY3Rpb24odCl7aWYobnVsbD09dClyZXR1cm4gdGhpcy5fcmVzaXphYmxlO3RoaXMuX3Jlc2l6YWJsZT10O3RoaXMuX3NldFJlc2l6YWJsZUNsYXNzZXModCk7cmV0dXJuIHRoaXN9O3IucHJvdG90eXBlLl9zZXRSZXNpemFibGVDbGFzc2VzPWZ1bmN0aW9uKHQpe3QmJnRoaXMuZW5hYmxlZCgpPyh0aGlzLmFkZENsYXNzKCJ4LXJlc2l6YWJsZSIpLHRoaXMuYWRkQ2xhc3MoInktcmVzaXphYmxlIikpOih0aGlzLnJlbW92ZUNsYXNzKCJ4LXJlc2l6YWJsZSIpLAp0aGlzLnJlbW92ZUNsYXNzKCJ5LXJlc2l6YWJsZSIpKX07ci5wcm90b3R5cGUubW92YWJsZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3ZhYmxlfTtyLnByb3RvdHlwZS5fc2V0TW92YWJsZUNsYXNzPWZ1bmN0aW9uKCl7dGhpcy5tb3ZhYmxlKCkmJnRoaXMuZW5hYmxlZCgpP3RoaXMuYWRkQ2xhc3MoIm1vdmFibGUiKTp0aGlzLnJlbW92ZUNsYXNzKCJtb3ZhYmxlIil9O3IucHJvdG90eXBlLm9uRHJhZ1N0YXJ0PWZ1bmN0aW9uKHQpe3RoaXMuX2RyYWdTdGFydENhbGxiYWNrcy5hZGQodCl9O3IucHJvdG90eXBlLm9mZkRyYWdTdGFydD1mdW5jdGlvbih0KXt0aGlzLl9kcmFnU3RhcnRDYWxsYmFja3MuZGVsZXRlKHQpfTtyLnByb3RvdHlwZS5vbkRyYWc9ZnVuY3Rpb24odCl7dGhpcy5fZHJhZ0NhbGxiYWNrcy5hZGQodCk7cmV0dXJuIHRoaXN9O3IucHJvdG90eXBlLm9mZkRyYWc9ZnVuY3Rpb24odCl7dGhpcy5fZHJhZ0NhbGxiYWNrcy5kZWxldGUodCl9O3IucHJvdG90eXBlLm9uRHJhZ0VuZD0KZnVuY3Rpb24odCl7dGhpcy5fZHJhZ0VuZENhbGxiYWNrcy5hZGQodCl9O3IucHJvdG90eXBlLm9mZkRyYWdFbmQ9ZnVuY3Rpb24odCl7dGhpcy5fZHJhZ0VuZENhbGxiYWNrcy5kZWxldGUodCl9O3IucHJvdG90eXBlLmRyYWdJbnRlcmFjdGlvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kcmFnSW50ZXJhY3Rpb259O3IucHJvdG90eXBlLmVuYWJsZWQ9ZnVuY3Rpb24odCl7aWYobnVsbD09dClyZXR1cm4gdGhpcy5fZHJhZ0ludGVyYWN0aW9uLmVuYWJsZWQoKTt0aGlzLl9kcmFnSW50ZXJhY3Rpb24uZW5hYmxlZCh0KTt0aGlzLl9zZXRSZXNpemFibGVDbGFzc2VzKHRoaXMucmVzaXphYmxlKCkpO3RoaXMuX3NldE1vdmFibGVDbGFzcygpO3JldHVybiB0aGlzfTtyLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztxLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7dGhpcy5fZHJhZ1N0YXJ0Q2FsbGJhY2tzLmZvckVhY2goZnVuY3Rpb24odil7cmV0dXJuIHQuX2RyYWdDYWxsYmFja3MuZGVsZXRlKHYpfSk7CnRoaXMuX2RyYWdDYWxsYmFja3MuZm9yRWFjaChmdW5jdGlvbih2KXtyZXR1cm4gdC5fZHJhZ0NhbGxiYWNrcy5kZWxldGUodil9KTt0aGlzLl9kcmFnRW5kQ2FsbGJhY2tzLmZvckVhY2goZnVuY3Rpb24odil7cmV0dXJuIHQuX2RyYWdFbmRDYWxsYmFja3MuZGVsZXRlKHYpfSk7dGhpcy5fZGlzY29ubmVjdEludGVyYWN0aW9uKCl9O3IucHJvdG90eXBlLmRldGFjaD1mdW5jdGlvbigpe3RoaXMuX3Jlc2V0U3RhdGUoKTt0aGlzLl9kcmFnSW50ZXJhY3Rpb24uZGV0YWNoKCk7cS5wcm90b3R5cGUuZGV0YWNoLmNhbGwodGhpcyk7cmV0dXJuIHRoaXN9O3IucHJvdG90eXBlLmFuY2hvcj1mdW5jdGlvbih0KXt0PW0uY29lcmNlRXh0ZXJuYWxEMyh0KTt0aGlzLl9kcmFnSW50ZXJhY3Rpb24uYXR0YWNoVG8odGhpcyk7cS5wcm90b3R5cGUuYW5jaG9yLmNhbGwodGhpcyx0KTtyZXR1cm4gdGhpc307ci5wcm90b3R5cGUuX3Jlc2V0U3RhdGU9ZnVuY3Rpb24oKXt0aGlzLmJvdW5kcyh7dG9wTGVmdDp7eDowLAp5OjB9LGJvdHRvbVJpZ2h0Ont4OjAseTowfX0pfTtyZXR1cm4gcn0oZig0MykuU2VsZWN0aW9uQm94TGF5ZXIpO2QuRHJhZ0JveExheWVyPWN9LGZ1bmN0aW9uKGMsZCxmKXt2YXIgZz10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8ZnVuY3Rpb24obSxwKXtmdW5jdGlvbiBxKCl7dGhpcy5jb25zdHJ1Y3Rvcj1tfWZvcih2YXIgciBpbiBwKXAuaGFzT3duUHJvcGVydHkocikmJihtW3JdPXBbcl0pO20ucHJvdG90eXBlPW51bGw9PT1wP09iamVjdC5jcmVhdGUocCk6KHEucHJvdG90eXBlPXAucHJvdG90eXBlLG5ldyBxKX0sbD1mKDE4KTtjPWZ1bmN0aW9uKG0pe2Z1bmN0aW9uIHAoKXtyZXR1cm4gbS5jYWxsKHRoaXMsInBhdGgiLCJsaW5lIil8fHRoaXN9ZyhwLG0pO3AucHJvdG90eXBlLl9hcHBseURlZmF1bHRBdHRyaWJ1dGVzPWZ1bmN0aW9uKHEpe3Euc3R5bGUoImZpbGwiLCJub25lIil9O3AucHJvdG90eXBlLmdldFZpc3VhbFByaW1pdGl2ZUF0SW5kZXg9ZnVuY3Rpb24oKXtyZXR1cm4gbS5wcm90b3R5cGUuZ2V0VmlzdWFsUHJpbWl0aXZlQXRJbmRleC5jYWxsKHRoaXMsCjApfTtyZXR1cm4gcH0oZig5KS5TVkdEcmF3ZXIpO2QuTGluZVNWR0RyYXdlcj1jO3ZhciBrPVsib3BhY2l0eSIsInN0cm9rZS1vcGFjaXR5Iiwic3Ryb2tlLXdpZHRoIiwic3Ryb2tlIl07ZC5tYWtlTGluZUNhbnZhc0RyYXdTdGVwPWZ1bmN0aW9uKG0pe3JldHVybiBmdW5jdGlvbihwLHEscil7cj1sLnJlc29sdmVBdHRyaWJ1dGVzKHIsayxxWzBdLDApO2wucmVuZGVyTGluZShwLG0oKSxxWzBdLHIpfX19LGZ1bmN0aW9uKGMsZCxmKXt2YXIgZz10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8ZnVuY3Rpb24obSxwKXtmdW5jdGlvbiBxKCl7dGhpcy5jb25zdHJ1Y3Rvcj1tfWZvcih2YXIgciBpbiBwKXAuaGFzT3duUHJvcGVydHkocikmJihtW3JdPXBbcl0pO20ucHJvdG90eXBlPW51bGw9PT1wP09iamVjdC5jcmVhdGUocCk6KHEucHJvdG90eXBlPXAucHJvdG90eXBlLG5ldyBxKX0sbD1mKDE4KTtjPWZ1bmN0aW9uKG0pe2Z1bmN0aW9uIHAocSl7dm9pZCAwPT09cSYmKHE9IiIpO3ZhciByPQptLmNhbGwodGhpcywicmVjdCIsIiIpfHx0aGlzO3IuX3Jvb3RDbGFzc05hbWU9cTtyLl9yb290LmNsYXNzZWQoci5fcm9vdENsYXNzTmFtZSwhMCk7cmV0dXJuIHJ9ZyhwLG0pO3JldHVybiBwfShmKDkpLlNWR0RyYXdlcik7ZC5SZWN0YW5nbGVTVkdEcmF3ZXI9Yzt2YXIgaz1bIngiLCJ5Iiwid2lkdGgiLCJoZWlnaHQiXTtkLlJlY3RhbmdsZUNhbnZhc0RyYXdTdGVwPWZ1bmN0aW9uKG0scCxxKXttLnNhdmUoKTtwLmZvckVhY2goZnVuY3Rpb24ocix0KXtudWxsIT1yJiYocj1sLnJlc29sdmVBdHRyaWJ1dGVzU3Vic2V0V2l0aFN0eWxlcyhxLGsscix0KSxtLmJlZ2luUGF0aCgpLG0ucmVjdChyLngsci55LHIud2lkdGgsci5oZWlnaHQpLGwucmVuZGVyUGF0aFdpdGhTdHlsZShtLHIpKX0pO20ucmVzdG9yZSgpfTtjPWZ1bmN0aW9uKG0pe2Z1bmN0aW9uIHAocSl7cmV0dXJuIG0uY2FsbCh0aGlzLHEsZC5SZWN0YW5nbGVDYW52YXNEcmF3U3RlcCl8fHRoaXN9ZyhwLG0pO3JldHVybiBwfShsLkNhbnZhc0RyYXdlcik7CmQuUmVjdGFuZ2xlQ2FudmFzRHJhd2VyPWN9LGZ1bmN0aW9uKGMsZCxmKXtmdW5jdGlvbiBnKG0pe2suU0hPV19XQVJOSU5HUyYmY29uc29sZS53YXJuKG0pfWZ1bmN0aW9uIGwobSxwKXtmb3IodmFyIHE9W10scj0yO3I8YXJndW1lbnRzLmxlbmd0aDtyKyspcVtyLTJdPWFyZ3VtZW50c1tyXTtyZXR1cm4gMD09PXA/KG0ocSksLTEpOndpbmRvdy5zZXRUaW1lb3V0KG0scCxxKX12YXIgaz1mKDIzKTtkLndhcm49ZztkLnNldFRpbWVvdXQ9bDtkLmRlYm91bmNlPWZ1bmN0aW9uKG0scCxxKXtmdW5jdGlvbiByKCl7cC5hcHBseShxLHYpfXZhciB0PW51bGwsdj1bXTtyZXR1cm4gZnVuY3Rpb24oKXt2PUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7Y2xlYXJUaW1lb3V0KHQpO3Q9bChyLG0pfX07ZC5kZXByZWNhdGVkPWZ1bmN0aW9uKG0scCxxKXt2b2lkIDA9PT1xJiYocT0iIik7ZygiTWV0aG9kICIrbSsiIGhhcyBiZWVuIGRlcHJlY2F0ZWQgaW4gdmVyc2lvbiAiKwpwKyIuIFBsZWFzZSByZWZlciB0byB0aGUgcmVsZWFzZSBub3Rlcy4gIitxKX19LGZ1bmN0aW9uKGMsZCl7Yz1mdW5jdGlvbigpe2Z1bmN0aW9uIGYoZyl7dGhpcy5ydWxlcj1udWxsIT1nLmNyZWF0ZVJ1bGVyP2cuY3JlYXRlUnVsZXIoKTpnfWYucHJvdG90eXBlLm1lYXN1cmU9ZnVuY3Rpb24oZyl7dm9pZCAwPT09ZyYmKGc9Zi5IRUlHSFRfVEVYVCk7cmV0dXJuIHRoaXMucnVsZXIoZyl9O3JldHVybiBmfSgpO2MuSEVJR0hUX1RFWFQ9ImJkcHFsIjtkLkFic3RyYWN0TWVhc3VyZXI9Y30sZnVuY3Rpb24oYyxkLGYpe2Z1bmN0aW9uIGcobCl7Zm9yKHZhciBrIGluIGwpZC5oYXNPd25Qcm9wZXJ0eShrKXx8KGRba109bFtrXSl9ZyhmKDMyKSk7ZyhmKDc0KSk7ZyhmKDc1KSk7ZyhmKDQxKSk7ZyhmKDQyKSk7ZyhmKDc2KSk7ZyhmKDc3KSk7ZyhmKDc4KSk7ZyhmKDc5KSk7ZyhmKDQzKSk7ZyhmKDgwKSk7ZyhmKDgxKSk7ZyhmKDgyKSl9LGZ1bmN0aW9uKGMsZCxmKXt2YXIgZz1mKDApO2M9CmZ1bmN0aW9uKCl7ZnVuY3Rpb24gbChrLG0pe3ZvaWQgMD09PWsmJihrPVtdKTt2b2lkIDA9PT1tJiYobT17fSk7dGhpcy5fdXBkYXRlSWQ9MDt0aGlzLl9kYXRhPWs7dGhpcy5fbWV0YWRhdGE9bTt0aGlzLl9jYWxsYmFja3M9bmV3IGcuQ2FsbGJhY2tTZXR9bC5wcm90b3R5cGUub25VcGRhdGU9ZnVuY3Rpb24oayl7dGhpcy5fY2FsbGJhY2tzLmFkZChrKTtyZXR1cm4gdGhpc307bC5wcm90b3R5cGUub2ZmVXBkYXRlPWZ1bmN0aW9uKGspe3RoaXMuX2NhbGxiYWNrcy5kZWxldGUoayk7cmV0dXJuIHRoaXN9O2wucHJvdG90eXBlLmRhdGE9ZnVuY3Rpb24oayl7aWYobnVsbD09aylyZXR1cm4gdGhpcy5fZGF0YTt0aGlzLl9kYXRhPWs7dGhpcy5fZGlzcGF0Y2hVcGRhdGUoKTtyZXR1cm4gdGhpc307bC5wcm90b3R5cGUubWV0YWRhdGE9ZnVuY3Rpb24oayl7aWYobnVsbD09aylyZXR1cm4gdGhpcy5fbWV0YWRhdGE7dGhpcy5fbWV0YWRhdGE9azt0aGlzLl9kaXNwYXRjaFVwZGF0ZSgpOwpyZXR1cm4gdGhpc307bC5wcm90b3R5cGUudXBkYXRlSWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdXBkYXRlSWR9O2wucHJvdG90eXBlLl9kaXNwYXRjaFVwZGF0ZT1mdW5jdGlvbigpe3RoaXMuX3VwZGF0ZUlkKys7dGhpcy5fY2FsbGJhY2tzLmNhbGxDYWxsYmFja3ModGhpcyl9O3JldHVybiBsfSgpO2QuRGF0YXNldD1jfSxmdW5jdGlvbihjLGQsZil7dmFyIGc9ZigwKSxsPWYoMzApO2M9ZnVuY3Rpb24oKXtmdW5jdGlvbiBrKCl7fWsucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe2wuZmx1c2goKX07cmV0dXJuIGt9KCk7ZC5JbW1lZGlhdGU9YztjPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gaygpe31rLnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXtnLkRPTS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWVQb2x5ZmlsbChsLmZsdXNoKX07cmV0dXJuIGt9KCk7ZC5BbmltYXRpb25GcmFtZT1jO2M9ZnVuY3Rpb24oKXtmdW5jdGlvbiBrKCl7dGhpcy5fdGltZW91dE1zZWM9Zy5ET00uU0NSRUVOX1JFRlJFU0hfUkFURV9NSUxMSVNFQ09ORFN9CmsucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3NldFRpbWVvdXQobC5mbHVzaCx0aGlzLl90aW1lb3V0TXNlYyl9O3JldHVybiBrfSgpO2QuVGltZW91dD1jfSxmdW5jdGlvbihjLGQsZil7dmFyIGc9dGhpcyYmdGhpcy5fX2V4dGVuZHN8fGZ1bmN0aW9uKG0scCl7ZnVuY3Rpb24gcSgpe3RoaXMuY29uc3RydWN0b3I9bX1mb3IodmFyIHIgaW4gcClwLmhhc093blByb3BlcnR5KHIpJiYobVtyXT1wW3JdKTttLnByb3RvdHlwZT1udWxsPT09cD9PYmplY3QuY3JlYXRlKHApOihxLnByb3RvdHlwZT1wLnByb3RvdHlwZSxuZXcgcSl9LGw9ZigxMyksaz1mKDApO2M9ZnVuY3Rpb24obSl7ZnVuY3Rpb24gcCgpe3ZhciBxPW51bGwhPT1tJiZtLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpcztxLl9rZXlQcmVzc0NhbGxiYWNrcz17fTtxLl9rZXlSZWxlYXNlQ2FsbGJhY2tzPXt9O3EuX21vdXNlTW92ZUNhbGxiYWNrPWZ1bmN0aW9uKCl7cmV0dXJuITF9O3EuX2Rvd25lZEtleXM9bmV3IGsuU2V0OwpxLl9rZXlEb3duQ2FsbGJhY2s9ZnVuY3Rpb24ocix0KXtyZXR1cm4gcS5faGFuZGxlS2V5RG93bkV2ZW50KHIsdCl9O3EuX2tleVVwQ2FsbGJhY2s9ZnVuY3Rpb24ocil7cmV0dXJuIHEuX2hhbmRsZUtleVVwRXZlbnQocil9O3JldHVybiBxfWcocCxtKTtwLnByb3RvdHlwZS5fYW5jaG9yPWZ1bmN0aW9uKHEpe20ucHJvdG90eXBlLl9hbmNob3IuY2FsbCh0aGlzLHEpO3RoaXMuX3Bvc2l0aW9uRGlzcGF0Y2hlcj1sLk1vdXNlLmdldERpc3BhdGNoZXIodGhpcy5fY29tcG9uZW50QXR0YWNoZWRUbyk7dGhpcy5fcG9zaXRpb25EaXNwYXRjaGVyLm9uTW91c2VNb3ZlKHRoaXMuX21vdXNlTW92ZUNhbGxiYWNrKTt0aGlzLl9rZXlEaXNwYXRjaGVyPWwuS2V5LmdldERpc3BhdGNoZXIoKTt0aGlzLl9rZXlEaXNwYXRjaGVyLm9uS2V5RG93bih0aGlzLl9rZXlEb3duQ2FsbGJhY2spO3RoaXMuX2tleURpc3BhdGNoZXIub25LZXlVcCh0aGlzLl9rZXlVcENhbGxiYWNrKX07cC5wcm90b3R5cGUuX3VuYW5jaG9yPQpmdW5jdGlvbigpe20ucHJvdG90eXBlLl91bmFuY2hvci5jYWxsKHRoaXMpO3RoaXMuX3Bvc2l0aW9uRGlzcGF0Y2hlci5vZmZNb3VzZU1vdmUodGhpcy5fbW91c2VNb3ZlQ2FsbGJhY2spO3RoaXMuX3Bvc2l0aW9uRGlzcGF0Y2hlcj1udWxsO3RoaXMuX2tleURpc3BhdGNoZXIub2ZmS2V5RG93bih0aGlzLl9rZXlEb3duQ2FsbGJhY2spO3RoaXMuX2tleURpc3BhdGNoZXIub2ZmS2V5VXAodGhpcy5fa2V5VXBDYWxsYmFjayk7dGhpcy5fa2V5RGlzcGF0Y2hlcj1udWxsfTtwLnByb3RvdHlwZS5faGFuZGxlS2V5RG93bkV2ZW50PWZ1bmN0aW9uKHEscil7dmFyIHQ9dGhpcy5fdHJhbnNsYXRlVG9Db21wb25lbnRTcGFjZSh0aGlzLl9wb3NpdGlvbkRpc3BhdGNoZXIubGFzdE1vdXNlUG9zaXRpb24oKSk7dGhpcy5faXNJbnNpZGVDb21wb25lbnQodCkmJiFyLnJlcGVhdCYmKHRoaXMuX2tleVByZXNzQ2FsbGJhY2tzW3FdJiZ0aGlzLl9rZXlQcmVzc0NhbGxiYWNrc1txXS5jYWxsQ2FsbGJhY2tzKHEpLAp0aGlzLl9kb3duZWRLZXlzLmFkZChxKSl9O3AucHJvdG90eXBlLl9oYW5kbGVLZXlVcEV2ZW50PWZ1bmN0aW9uKHEpe3RoaXMuX2Rvd25lZEtleXMuaGFzKHEpJiZ0aGlzLl9rZXlSZWxlYXNlQ2FsbGJhY2tzW3FdJiZ0aGlzLl9rZXlSZWxlYXNlQ2FsbGJhY2tzW3FdLmNhbGxDYWxsYmFja3MocSk7dGhpcy5fZG93bmVkS2V5cy5kZWxldGUocSl9O3AucHJvdG90eXBlLm9uS2V5UHJlc3M9ZnVuY3Rpb24ocSxyKXt0aGlzLl9rZXlQcmVzc0NhbGxiYWNrc1txXXx8KHRoaXMuX2tleVByZXNzQ2FsbGJhY2tzW3FdPW5ldyBrLkNhbGxiYWNrU2V0KTt0aGlzLl9rZXlQcmVzc0NhbGxiYWNrc1txXS5hZGQocik7cmV0dXJuIHRoaXN9O3AucHJvdG90eXBlLm9mZktleVByZXNzPWZ1bmN0aW9uKHEscil7dGhpcy5fa2V5UHJlc3NDYWxsYmFja3NbcV0uZGVsZXRlKHIpOzA9PT10aGlzLl9rZXlQcmVzc0NhbGxiYWNrc1txXS5zaXplJiZkZWxldGUgdGhpcy5fa2V5UHJlc3NDYWxsYmFja3NbcV07CnJldHVybiB0aGlzfTtwLnByb3RvdHlwZS5vbktleVJlbGVhc2U9ZnVuY3Rpb24ocSxyKXt0aGlzLl9rZXlSZWxlYXNlQ2FsbGJhY2tzW3FdfHwodGhpcy5fa2V5UmVsZWFzZUNhbGxiYWNrc1txXT1uZXcgay5DYWxsYmFja1NldCk7dGhpcy5fa2V5UmVsZWFzZUNhbGxiYWNrc1txXS5hZGQocik7cmV0dXJuIHRoaXN9O3AucHJvdG90eXBlLm9mZktleVJlbGVhc2U9ZnVuY3Rpb24ocSxyKXt0aGlzLl9rZXlSZWxlYXNlQ2FsbGJhY2tzW3FdLmRlbGV0ZShyKTswPT09dGhpcy5fa2V5UmVsZWFzZUNhbGxiYWNrc1txXS5zaXplJiZkZWxldGUgdGhpcy5fa2V5UmVsZWFzZUNhbGxiYWNrc1txXTtyZXR1cm4gdGhpc307cmV0dXJuIHB9KGYoMTUpLkludGVyYWN0aW9uKTtkLktleT1jfSxmdW5jdGlvbihjLGQsZil7dmFyIGc9dGhpcyYmdGhpcy5fX2V4dGVuZHN8fGZ1bmN0aW9uKGssbSl7ZnVuY3Rpb24gcCgpe3RoaXMuY29uc3RydWN0b3I9a31mb3IodmFyIHEgaW4gbSltLmhhc093blByb3BlcnR5KHEpJiYKKGtbcV09bVtxXSk7ay5wcm90b3R5cGU9bnVsbD09PW0/T2JqZWN0LmNyZWF0ZShtKToocC5wcm90b3R5cGU9bS5wcm90b3R5cGUsbmV3IHApfSxsPWYoMCk7Yz1mdW5jdGlvbihrKXtmdW5jdGlvbiBtKHApe3ZvaWQgMD09PXAmJihwPVtdKTt2YXIgcT1rLmNhbGwodGhpcyl8fHRoaXM7cS5fY29tcG9uZW50cz1bXTtxLmFkZENsYXNzKCJjb21wb25lbnQtZ3JvdXAiKTtwLmZvckVhY2goZnVuY3Rpb24ocil7cmV0dXJuIHEuYXBwZW5kKHIpfSk7cmV0dXJuIHF9ZyhtLGspO20ucHJvdG90eXBlLl9mb3JFYWNoPWZ1bmN0aW9uKHApe3RoaXMuY29tcG9uZW50cygpLmZvckVhY2gocCl9O20ucHJvdG90eXBlLmhhcz1mdW5jdGlvbihwKXtyZXR1cm4gMDw9dGhpcy5fY29tcG9uZW50cy5pbmRleE9mKHApfTttLnByb3RvdHlwZS5yZXF1ZXN0ZWRTcGFjZT1mdW5jdGlvbihwLHEpe3ZhciByPXRoaXMuX2NvbXBvbmVudHMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LnJlcXVlc3RlZFNwYWNlKHAsCnEpfSk7cmV0dXJue21pbldpZHRoOmwuTWF0aC5tYXgocixmdW5jdGlvbih0KXtyZXR1cm4gdC5taW5XaWR0aH0sMCksbWluSGVpZ2h0OmwuTWF0aC5tYXgocixmdW5jdGlvbih0KXtyZXR1cm4gdC5taW5IZWlnaHR9LDApfX07bS5wcm90b3R5cGUuY29tcHV0ZUxheW91dD1mdW5jdGlvbihwLHEscil7dmFyIHQ9dGhpcztrLnByb3RvdHlwZS5jb21wdXRlTGF5b3V0LmNhbGwodGhpcyxwLHEscik7dGhpcy5fZm9yRWFjaChmdW5jdGlvbih2KXt2LmNvbXB1dGVMYXlvdXQoe3g6MCx5OjB9LHQud2lkdGgoKSx0LmhlaWdodCgpKX0pO3JldHVybiB0aGlzfTttLnByb3RvdHlwZS5fc2l6ZUZyb21PZmZlcj1mdW5jdGlvbihwLHEpe3JldHVybnt3aWR0aDpwLGhlaWdodDpxfX07bS5wcm90b3R5cGUuZml4ZWRXaWR0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb21wb25lbnRzLmV2ZXJ5KGZ1bmN0aW9uKHApe3JldHVybiBwLmZpeGVkV2lkdGgoKX0pfTttLnByb3RvdHlwZS5maXhlZEhlaWdodD0KZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY29tcG9uZW50cy5ldmVyeShmdW5jdGlvbihwKXtyZXR1cm4gcC5maXhlZEhlaWdodCgpfSl9O20ucHJvdG90eXBlLmNvbXBvbmVudHM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY29tcG9uZW50cy5zbGljZSgpfTttLnByb3RvdHlwZS5hcHBlbmQ9ZnVuY3Rpb24ocCl7bnVsbD09cHx8dGhpcy5oYXMocCl8fChwLmRldGFjaCgpLHRoaXMuX2NvbXBvbmVudHMucHVzaChwKSx0aGlzLl9hZG9wdEFuZEFuY2hvcihwKSx0aGlzLnJlZHJhdygpKTtyZXR1cm4gdGhpc307bS5wcm90b3R5cGUuX3JlbW92ZT1mdW5jdGlvbihwKXtwPXRoaXMuX2NvbXBvbmVudHMuaW5kZXhPZihwKTswPD1wJiZ0aGlzLl9jb21wb25lbnRzLnNwbGljZShwLDEpfTtyZXR1cm4gbX0oZigyOSkuQ29tcG9uZW50Q29udGFpbmVyKTtkLkdyb3VwPWN9LGZ1bmN0aW9uKGMsZCxmKXt2YXIgZz10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8ZnVuY3Rpb24oayxtKXtmdW5jdGlvbiBwKCl7dGhpcy5jb25zdHJ1Y3Rvcj0Ka31mb3IodmFyIHEgaW4gbSltLmhhc093blByb3BlcnR5KHEpJiYoa1txXT1tW3FdKTtrLnByb3RvdHlwZT1udWxsPT09bT9PYmplY3QuY3JlYXRlKG0pOihwLnByb3RvdHlwZT1tLnByb3RvdHlwZSxuZXcgcCl9O2YoMCk7Yz1mKDQpO3ZhciBsOyhmdW5jdGlvbihrKXtrW2suVkFMVUU9MF09IlZBTFVFIjtrW2suUElYRUw9MV09IlBJWEVMIn0pKGx8fChsPXt9KSk7Yz1mdW5jdGlvbihrKXtmdW5jdGlvbiBtKHApe3ZhciBxPWsuY2FsbCh0aGlzKXx8dGhpcztxLl9tb2RlPWwuVkFMVUU7aWYocCE9PW0uT1JJRU5UQVRJT05fVkVSVElDQUwmJnAhPT1tLk9SSUVOVEFUSU9OX0hPUklaT05UQUwpdGhyb3cgRXJyb3IocCsiIGlzIG5vdCBhIHZhbGlkIG9yaWVudGF0aW9uIGZvciBHdWlkZUxpbmVMYXllciIpO3EuX29yaWVudGF0aW9uPXA7cS5fb3ZlcmZsb3dIaWRkZW49ITA7cS5hZGRDbGFzcygiZ3VpZGUtbGluZS1sYXllciIpO3EuX2lzVmVydGljYWwoKT9xLmFkZENsYXNzKCJ2ZXJ0aWNhbCIpOgpxLmFkZENsYXNzKCJob3Jpem9udGFsIik7cS5fc2NhbGVVcGRhdGVDYWxsYmFjaz1mdW5jdGlvbigpe3EuX3N5bmNQaXhlbFBvc2l0aW9uQW5kVmFsdWUoKTtxLnJlbmRlcigpfTtyZXR1cm4gcX1nKG0sayk7bS5wcm90b3R5cGUuX3NldHVwPWZ1bmN0aW9uKCl7ay5wcm90b3R5cGUuX3NldHVwLmNhbGwodGhpcyk7dGhpcy5fZ3VpZGVMaW5lPXRoaXMuY29udGVudCgpLmFwcGVuZCgibGluZSIpLmNsYXNzZWQoImd1aWRlLWxpbmUiLCEwKX07bS5wcm90b3R5cGUuX3NpemVGcm9tT2ZmZXI9ZnVuY3Rpb24ocCxxKXtyZXR1cm57d2lkdGg6cCxoZWlnaHQ6cX19O20ucHJvdG90eXBlLl9pc1ZlcnRpY2FsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX29yaWVudGF0aW9uPT09bS5PUklFTlRBVElPTl9WRVJUSUNBTH07bS5wcm90b3R5cGUuZml4ZWRXaWR0aD1mdW5jdGlvbigpe3JldHVybiEwfTttLnByb3RvdHlwZS5maXhlZEhlaWdodD1mdW5jdGlvbigpe3JldHVybiEwfTttLnByb3RvdHlwZS5jb21wdXRlTGF5b3V0PQpmdW5jdGlvbihwLHEscil7ay5wcm90b3R5cGUuY29tcHV0ZUxheW91dC5jYWxsKHRoaXMscCxxLHIpO251bGwhPXRoaXMuc2NhbGUoKSYmKHRoaXMuX2lzVmVydGljYWwoKT90aGlzLnNjYWxlKCkucmFuZ2UoWzAsdGhpcy53aWR0aCgpXSk6dGhpcy5zY2FsZSgpLnJhbmdlKFt0aGlzLmhlaWdodCgpLDBdKSk7cmV0dXJuIHRoaXN9O20ucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5PWZ1bmN0aW9uKCl7ay5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHkuY2FsbCh0aGlzKTt0aGlzLl9zeW5jUGl4ZWxQb3NpdGlvbkFuZFZhbHVlKCk7dGhpcy5fZ3VpZGVMaW5lLmF0dHJzKHt4MTp0aGlzLl9pc1ZlcnRpY2FsKCk/dGhpcy5waXhlbFBvc2l0aW9uKCk6MCx5MTp0aGlzLl9pc1ZlcnRpY2FsKCk/MDp0aGlzLnBpeGVsUG9zaXRpb24oKSx4Mjp0aGlzLl9pc1ZlcnRpY2FsKCk/dGhpcy5waXhlbFBvc2l0aW9uKCk6dGhpcy53aWR0aCgpLHkyOnRoaXMuX2lzVmVydGljYWwoKT90aGlzLmhlaWdodCgpOgp0aGlzLnBpeGVsUG9zaXRpb24oKX0pO3JldHVybiB0aGlzfTttLnByb3RvdHlwZS5fc3luY1BpeGVsUG9zaXRpb25BbmRWYWx1ZT1mdW5jdGlvbigpe251bGwhPXRoaXMuc2NhbGUoKSYmKHRoaXMuX21vZGU9PT1sLlZBTFVFJiZudWxsIT10aGlzLnZhbHVlKCk/dGhpcy5fcGl4ZWxQb3NpdGlvbj10aGlzLnNjYWxlKCkuc2NhbGUodGhpcy52YWx1ZSgpKTp0aGlzLl9tb2RlPT09bC5QSVhFTCYmbnVsbCE9dGhpcy5waXhlbFBvc2l0aW9uKCkmJih0aGlzLl92YWx1ZT10aGlzLnNjYWxlKCkuaW52ZXJ0KHRoaXMucGl4ZWxQb3NpdGlvbigpKSkpfTttLnByb3RvdHlwZS5fc2V0UGl4ZWxQb3NpdGlvbldpdGhvdXRDaGFuZ2luZ01vZGU9ZnVuY3Rpb24ocCl7dGhpcy5fcGl4ZWxQb3NpdGlvbj1wO251bGwhPXRoaXMuc2NhbGUoKSYmKHRoaXMuX3ZhbHVlPXRoaXMuc2NhbGUoKS5pbnZlcnQodGhpcy5waXhlbFBvc2l0aW9uKCkpKTt0aGlzLnJlbmRlcigpfTttLnByb3RvdHlwZS5zY2FsZT0KZnVuY3Rpb24ocCl7aWYobnVsbD09cClyZXR1cm4gdGhpcy5fc2NhbGU7dmFyIHE9dGhpcy5fc2NhbGU7bnVsbCE9cSYmcS5vZmZVcGRhdGUodGhpcy5fc2NhbGVVcGRhdGVDYWxsYmFjayk7dGhpcy5fc2NhbGU9cDt0aGlzLl9zY2FsZS5vblVwZGF0ZSh0aGlzLl9zY2FsZVVwZGF0ZUNhbGxiYWNrKTt0aGlzLl9zeW5jUGl4ZWxQb3NpdGlvbkFuZFZhbHVlKCk7dGhpcy5yZWRyYXcoKTtyZXR1cm4gdGhpc307bS5wcm90b3R5cGUudmFsdWU9ZnVuY3Rpb24ocCl7aWYobnVsbD09cClyZXR1cm4gdGhpcy5fdmFsdWU7dGhpcy5fdmFsdWU9cDt0aGlzLl9tb2RlPWwuVkFMVUU7dGhpcy5fc3luY1BpeGVsUG9zaXRpb25BbmRWYWx1ZSgpO3RoaXMucmVuZGVyKCk7cmV0dXJuIHRoaXN9O20ucHJvdG90eXBlLnBpeGVsUG9zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcGl4ZWxQb3NpdGlvbn07bS5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe2sucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTsKbnVsbCE9dGhpcy5zY2FsZSgpJiZ0aGlzLnNjYWxlKCkub2ZmVXBkYXRlKHRoaXMuX3NjYWxlVXBkYXRlQ2FsbGJhY2spfTtyZXR1cm4gbX0oYy5Db21wb25lbnQpO2MuT1JJRU5UQVRJT05fVkVSVElDQUw9InZlcnRpY2FsIjtjLk9SSUVOVEFUSU9OX0hPUklaT05UQUw9Imhvcml6b250YWwiO2QuR3VpZGVMaW5lTGF5ZXI9Y30sZnVuY3Rpb24oYyxkLGYpe3ZhciBnPXRoaXMmJnRoaXMuX19leHRlbmRzfHxmdW5jdGlvbihtLHApe2Z1bmN0aW9uIHEoKXt0aGlzLmNvbnN0cnVjdG9yPW19Zm9yKHZhciByIGluIHApcC5oYXNPd25Qcm9wZXJ0eShyKSYmKG1bcl09cFtyXSk7bS5wcm90b3R5cGU9bnVsbD09PXA/T2JqZWN0LmNyZWF0ZShwKToocS5wcm90b3R5cGU9cC5wcm90b3R5cGUsbmV3IHEpfSxsPWYoMCk7Yz1mKDQpO3ZhciBrOyhmdW5jdGlvbihtKXttW20uVkFMVUU9MF09IlZBTFVFIjttW20uUElYRUw9MV09IlBJWEVMIn0pKGs9ZC5Qcm9wZXJ0eU1vZGV8fChkLlByb3BlcnR5TW9kZT0Ke30pKTtjPWZ1bmN0aW9uKG0pe2Z1bmN0aW9uIHAoKXt2YXIgcT1tLmNhbGwodGhpcyl8fHRoaXM7cS5fYm94VmlzaWJsZT0hMTtxLl9ib3hCb3VuZHM9e3RvcExlZnQ6e3g6MCx5OjB9LGJvdHRvbVJpZ2h0Ont4OjAseTowfX07cS5feEJvdW5kc01vZGU9ay5QSVhFTDtxLl95Qm91bmRzTW9kZT1rLlBJWEVMO3EuYWRkQ2xhc3MoInNlbGVjdGlvbi1ib3gtbGF5ZXIiKTtxLl9hZGp1c3RCb3VuZHNDYWxsYmFjaz1mdW5jdGlvbigpe3EucmVuZGVyKCl9O3EuX292ZXJmbG93SGlkZGVuPSEwO3EuX3hFeHRlbnQ9W3ZvaWQgMCx2b2lkIDBdO3EuX3lFeHRlbnQ9W3ZvaWQgMCx2b2lkIDBdO3JldHVybiBxfWcocCxtKTtwLnByb3RvdHlwZS5fc2V0dXA9ZnVuY3Rpb24oKXttLnByb3RvdHlwZS5fc2V0dXAuY2FsbCh0aGlzKTt0aGlzLl9ib3g9dGhpcy5jb250ZW50KCkuYXBwZW5kKCJnIikuY2xhc3NlZCgic2VsZWN0aW9uLWJveCIsITApLnJlbW92ZSgpO3RoaXMuX2JveEFyZWE9dGhpcy5fYm94LmFwcGVuZCgicmVjdCIpLmNsYXNzZWQoInNlbGVjdGlvbi1hcmVhIiwKITApfTtwLnByb3RvdHlwZS5fc2l6ZUZyb21PZmZlcj1mdW5jdGlvbihxLHIpe3JldHVybnt3aWR0aDpxLGhlaWdodDpyfX07cC5wcm90b3R5cGUuYm91bmRzPWZ1bmN0aW9uKHEpe2lmKG51bGw9PXEpcmV0dXJuIHRoaXMuX2dldEJvdW5kcygpO3RoaXMuX3NldEJvdW5kcyhxKTt0aGlzLl95Qm91bmRzTW9kZT10aGlzLl94Qm91bmRzTW9kZT1rLlBJWEVMO3RoaXMucmVuZGVyKCk7cmV0dXJuIHRoaXN9O3AucHJvdG90eXBlLl9zZXRCb3VuZHM9ZnVuY3Rpb24ocSl7dGhpcy5fYm94Qm91bmRzPXt0b3BMZWZ0Ont4Ok1hdGgubWluKHEudG9wTGVmdC54LHEuYm90dG9tUmlnaHQueCkseTpNYXRoLm1pbihxLnRvcExlZnQueSxxLmJvdHRvbVJpZ2h0LnkpfSxib3R0b21SaWdodDp7eDpNYXRoLm1heChxLnRvcExlZnQueCxxLmJvdHRvbVJpZ2h0LngpLHk6TWF0aC5tYXgocS50b3BMZWZ0LnkscS5ib3R0b21SaWdodC55KX19fTtwLnByb3RvdHlwZS5fZ2V0Qm91bmRzPWZ1bmN0aW9uKCl7cmV0dXJue3RvcExlZnQ6e3g6dGhpcy5feEJvdW5kc01vZGU9PT0Kay5QSVhFTD90aGlzLl9ib3hCb3VuZHMudG9wTGVmdC54Om51bGw9PXRoaXMuX3hTY2FsZT8wOk1hdGgubWluKHRoaXMueFNjYWxlKCkuc2NhbGUodGhpcy54RXh0ZW50KClbMF0pLHRoaXMueFNjYWxlKCkuc2NhbGUodGhpcy54RXh0ZW50KClbMV0pKSx5OnRoaXMuX3lCb3VuZHNNb2RlPT09ay5QSVhFTD90aGlzLl9ib3hCb3VuZHMudG9wTGVmdC55Om51bGw9PXRoaXMuX3lTY2FsZT8wOk1hdGgubWluKHRoaXMueVNjYWxlKCkuc2NhbGUodGhpcy55RXh0ZW50KClbMF0pLHRoaXMueVNjYWxlKCkuc2NhbGUodGhpcy55RXh0ZW50KClbMV0pKX0sYm90dG9tUmlnaHQ6e3g6dGhpcy5feEJvdW5kc01vZGU9PT1rLlBJWEVMP3RoaXMuX2JveEJvdW5kcy5ib3R0b21SaWdodC54Om51bGw9PXRoaXMuX3hTY2FsZT8wOk1hdGgubWF4KHRoaXMueFNjYWxlKCkuc2NhbGUodGhpcy54RXh0ZW50KClbMF0pLHRoaXMueFNjYWxlKCkuc2NhbGUodGhpcy54RXh0ZW50KClbMV0pKSx5OnRoaXMuX3lCb3VuZHNNb2RlPT09CmsuUElYRUw/dGhpcy5fYm94Qm91bmRzLmJvdHRvbVJpZ2h0Lnk6bnVsbD09dGhpcy5feVNjYWxlPzA6TWF0aC5tYXgodGhpcy55U2NhbGUoKS5zY2FsZSh0aGlzLnlFeHRlbnQoKVswXSksdGhpcy55U2NhbGUoKS5zY2FsZSh0aGlzLnlFeHRlbnQoKVsxXSkpfX19O3AucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5PWZ1bmN0aW9uKCl7bS5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHkuY2FsbCh0aGlzKTtpZih0aGlzLl9ib3hWaXNpYmxlKXt2YXIgcT10aGlzLmJvdW5kcygpLHI9cS50b3BMZWZ0LnksdD1xLmJvdHRvbVJpZ2h0Lnksdj1xLnRvcExlZnQueDtxPXEuYm90dG9tUmlnaHQueDtpZighKGwuTWF0aC5pc1ZhbGlkTnVtYmVyKHIpJiZsLk1hdGguaXNWYWxpZE51bWJlcih0KSYmbC5NYXRoLmlzVmFsaWROdW1iZXIodikmJmwuTWF0aC5pc1ZhbGlkTnVtYmVyKHEpKSl0aHJvdyBFcnJvcigiYm91bmRzIGhhdmUgbm90IGJlZW4gcHJvcGVybHkgc2V0Iik7dGhpcy5fYm94QXJlYS5hdHRycyh7eDp2LAp5OnIsd2lkdGg6cS12LGhlaWdodDp0LXJ9KTt0aGlzLmNvbnRlbnQoKS5ub2RlKCkuYXBwZW5kQ2hpbGQodGhpcy5fYm94Lm5vZGUoKSl9ZWxzZSB0aGlzLl9ib3gucmVtb3ZlKCk7cmV0dXJuIHRoaXN9O3AucHJvdG90eXBlLmJveFZpc2libGU9ZnVuY3Rpb24ocSl7aWYobnVsbD09cSlyZXR1cm4gdGhpcy5fYm94VmlzaWJsZTt0aGlzLl9ib3hWaXNpYmxlPXE7dGhpcy5yZW5kZXIoKTtyZXR1cm4gdGhpc307cC5wcm90b3R5cGUuZml4ZWRXaWR0aD1mdW5jdGlvbigpe3JldHVybiEwfTtwLnByb3RvdHlwZS5maXhlZEhlaWdodD1mdW5jdGlvbigpe3JldHVybiEwfTtwLnByb3RvdHlwZS54U2NhbGU9ZnVuY3Rpb24ocSl7aWYobnVsbD09cSlyZXR1cm4gdGhpcy5feFNjYWxlO251bGwhPXRoaXMuX3hTY2FsZSYmdGhpcy5feFNjYWxlLm9mZlVwZGF0ZSh0aGlzLl9hZGp1c3RCb3VuZHNDYWxsYmFjayk7dGhpcy5feFNjYWxlPXE7dGhpcy5feEJvdW5kc01vZGU9ay5WQUxVRTt0aGlzLl94U2NhbGUub25VcGRhdGUodGhpcy5fYWRqdXN0Qm91bmRzQ2FsbGJhY2spOwp0aGlzLnJlbmRlcigpO3JldHVybiB0aGlzfTtwLnByb3RvdHlwZS55U2NhbGU9ZnVuY3Rpb24ocSl7aWYobnVsbD09cSlyZXR1cm4gdGhpcy5feVNjYWxlO251bGwhPXRoaXMuX3lTY2FsZSYmdGhpcy5feVNjYWxlLm9mZlVwZGF0ZSh0aGlzLl9hZGp1c3RCb3VuZHNDYWxsYmFjayk7dGhpcy5feVNjYWxlPXE7dGhpcy5feUJvdW5kc01vZGU9ay5WQUxVRTt0aGlzLl95U2NhbGUub25VcGRhdGUodGhpcy5fYWRqdXN0Qm91bmRzQ2FsbGJhY2spO3RoaXMucmVuZGVyKCk7cmV0dXJuIHRoaXN9O3AucHJvdG90eXBlLnhFeHRlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZ2V0WEV4dGVudCgpfTtwLnByb3RvdHlwZS5fZ2V0WEV4dGVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl94Qm91bmRzTW9kZT09PWsuVkFMVUU/dGhpcy5feEV4dGVudDpudWxsPT10aGlzLl94U2NhbGU/W3ZvaWQgMCx2b2lkIDBdOlt0aGlzLl94U2NhbGUuaW52ZXJ0KHRoaXMuX2JveEJvdW5kcy50b3BMZWZ0LngpLAp0aGlzLl94U2NhbGUuaW52ZXJ0KHRoaXMuX2JveEJvdW5kcy5ib3R0b21SaWdodC54KV19O3AucHJvdG90eXBlLl9zZXRYRXh0ZW50PWZ1bmN0aW9uKHEpe3RoaXMuX3hFeHRlbnQ9cX07cC5wcm90b3R5cGUueUV4dGVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9nZXRZRXh0ZW50KCl9O3AucHJvdG90eXBlLl9nZXRZRXh0ZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3lCb3VuZHNNb2RlPT09ay5WQUxVRT90aGlzLl95RXh0ZW50Om51bGw9PXRoaXMuX3lTY2FsZT9bdm9pZCAwLHZvaWQgMF06W3RoaXMuX3lTY2FsZS5pbnZlcnQodGhpcy5fYm94Qm91bmRzLnRvcExlZnQueSksdGhpcy5feVNjYWxlLmludmVydCh0aGlzLl9ib3hCb3VuZHMuYm90dG9tUmlnaHQueSldfTtwLnByb3RvdHlwZS5fc2V0WUV4dGVudD1mdW5jdGlvbihxKXt0aGlzLl95RXh0ZW50PXF9O3AucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXttLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7bnVsbCE9CnRoaXMuX3hTY2FsZSYmdGhpcy54U2NhbGUoKS5vZmZVcGRhdGUodGhpcy5fYWRqdXN0Qm91bmRzQ2FsbGJhY2spO251bGwhPXRoaXMuX3lTY2FsZSYmdGhpcy55U2NhbGUoKS5vZmZVcGRhdGUodGhpcy5fYWRqdXN0Qm91bmRzQ2FsbGJhY2spfTtyZXR1cm4gcH0oYy5Db21wb25lbnQpO2QuU2VsZWN0aW9uQm94TGF5ZXI9Y30sZnVuY3Rpb24oYyxkLGYpe3ZhciBnPXRoaXMmJnRoaXMuX19leHRlbmRzfHxmdW5jdGlvbihsLGspe2Z1bmN0aW9uIG0oKXt0aGlzLmNvbnN0cnVjdG9yPWx9Zm9yKHZhciBwIGluIGspay5oYXNPd25Qcm9wZXJ0eShwKSYmKGxbcF09a1twXSk7bC5wcm90b3R5cGU9bnVsbD09PWs/T2JqZWN0LmNyZWF0ZShrKToobS5wcm90b3R5cGU9ay5wcm90b3R5cGUsbmV3IG0pfTtjPWZ1bmN0aW9uKGwpe2Z1bmN0aW9uIGsoKXtyZXR1cm4gbC5jYWxsKHRoaXMsInBhdGgiLCJhcmMgZmlsbCIpfHx0aGlzfWcoayxsKTtrLnByb3RvdHlwZS5fYXBwbHlEZWZhdWx0QXR0cmlidXRlcz0KZnVuY3Rpb24obSl7bS5zdHlsZSgic3Ryb2tlIiwibm9uZSIpfTtyZXR1cm4ga30oZig5KS5TVkdEcmF3ZXIpO2QuQXJjU1ZHRHJhd2VyPWN9LGZ1bmN0aW9uKGMsZCxmKXt2YXIgZz10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8ZnVuY3Rpb24obCxrKXtmdW5jdGlvbiBtKCl7dGhpcy5jb25zdHJ1Y3Rvcj1sfWZvcih2YXIgcCBpbiBrKWsuaGFzT3duUHJvcGVydHkocCkmJihsW3BdPWtbcF0pO2wucHJvdG90eXBlPW51bGw9PT1rP09iamVjdC5jcmVhdGUoayk6KG0ucHJvdG90eXBlPWsucHJvdG90eXBlLG5ldyBtKX07Yz1mdW5jdGlvbihsKXtmdW5jdGlvbiBrKCl7cmV0dXJuIGwuY2FsbCh0aGlzLCJwYXRoIiwiYXJjIG91dGxpbmUiKXx8dGhpc31nKGssbCk7ay5wcm90b3R5cGUuX2FwcGx5RGVmYXVsdEF0dHJpYnV0ZXM9ZnVuY3Rpb24obSl7bS5zdHlsZSgiZmlsbCIsIm5vbmUiKX07cmV0dXJuIGt9KGYoOSkuU1ZHRHJhd2VyKTtkLkFyY091dGxpbmVTVkdEcmF3ZXI9Y30sZnVuY3Rpb24oYywKZCxmKXt2YXIgZz10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8ZnVuY3Rpb24obSxwKXtmdW5jdGlvbiBxKCl7dGhpcy5jb25zdHJ1Y3Rvcj1tfWZvcih2YXIgciBpbiBwKXAuaGFzT3duUHJvcGVydHkocikmJihtW3JdPXBbcl0pO20ucHJvdG90eXBlPW51bGw9PT1wP09iamVjdC5jcmVhdGUocCk6KHEucHJvdG90eXBlPXAucHJvdG90eXBlLG5ldyBxKX0sbD1mKDE4KTtjPWZ1bmN0aW9uKG0pe2Z1bmN0aW9uIHAoKXtyZXR1cm4gbS5jYWxsKHRoaXMsInBhdGgiLCJhcmVhIil8fHRoaXN9ZyhwLG0pO3AucHJvdG90eXBlLl9hcHBseURlZmF1bHRBdHRyaWJ1dGVzPWZ1bmN0aW9uKHEpe3Euc3R5bGUoInN0cm9rZSIsIm5vbmUiKX07cC5wcm90b3R5cGUuZ2V0VmlzdWFsUHJpbWl0aXZlQXRJbmRleD1mdW5jdGlvbigpe3JldHVybiBtLnByb3RvdHlwZS5nZXRWaXN1YWxQcmltaXRpdmVBdEluZGV4LmNhbGwodGhpcywwKX07cmV0dXJuIHB9KGYoOSkuU1ZHRHJhd2VyKTtkLkFyZWFTVkdEcmF3ZXI9CmM7dmFyIGs9WyJmaWxsIiwib3BhY2l0eSIsImZpbGwtb3BhY2l0eSJdO2QubWFrZUFyZWFDYW52YXNEcmF3U3RlcD1mdW5jdGlvbihtKXtyZXR1cm4gZnVuY3Rpb24ocCxxLHIpe3I9bC5yZXNvbHZlQXR0cmlidXRlcyhyLGsscVswXSwwKTtsLnJlbmRlckFyZWEocCxtKCkscVswXSxyKX19fSxmdW5jdGlvbihjLGQsZil7dmFyIGc9dGhpcyYmdGhpcy5fX2V4dGVuZHN8fGZ1bmN0aW9uKGwsayl7ZnVuY3Rpb24gbSgpe3RoaXMuY29uc3RydWN0b3I9bH1mb3IodmFyIHAgaW4gaylrLmhhc093blByb3BlcnR5KHApJiYobFtwXT1rW3BdKTtsLnByb3RvdHlwZT1udWxsPT09az9PYmplY3QuY3JlYXRlKGspOihtLnByb3RvdHlwZT1rLnByb3RvdHlwZSxuZXcgbSl9O2M9ZnVuY3Rpb24obCl7ZnVuY3Rpb24gaygpe3JldHVybiBsLmNhbGwodGhpcywibGluZSIsIiIpfHx0aGlzfWcoayxsKTtyZXR1cm4ga30oZig5KS5TVkdEcmF3ZXIpO2QuU2VnbWVudFNWR0RyYXdlcj1jfSxmdW5jdGlvbihjLApkLGYpe2Z1bmN0aW9uIGcocSxyLHQsdixBKXtyZXR1cm4gMDw9dCtBJiZ0LUE8PXEmJjA8PXYrQSYmdi1BPD1yfWZ1bmN0aW9uIGwocSxyLHQpe2lmKG51bGw9PXEpcmV0dXJuITE7Zm9yKHZhciB2PTA7djx0Lmxlbmd0aDt2Kyspe3ZhciBBPXRbdl07aWYocVtBXSE9cltBXSlyZXR1cm4hMX1yZXR1cm4hMH12YXIgaz10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8ZnVuY3Rpb24ocSxyKXtmdW5jdGlvbiB0KCl7dGhpcy5jb25zdHJ1Y3Rvcj1xfWZvcih2YXIgdiBpbiByKXIuaGFzT3duUHJvcGVydHkodikmJihxW3ZdPXJbdl0pO3EucHJvdG90eXBlPW51bGw9PT1yP09iamVjdC5jcmVhdGUocik6KHQucHJvdG90eXBlPXIucHJvdG90eXBlLG5ldyB0KX0sbT1mKDg2KSxwPWYoMTgpO2M9ZnVuY3Rpb24ocSl7ZnVuY3Rpb24gcigpe3JldHVybiBxLmNhbGwodGhpcywicGF0aCIsInN5bWJvbCIpfHx0aGlzfWsocixxKTtyZXR1cm4gcn0oZig5KS5TVkdEcmF3ZXIpO2QuU3ltYm9sU1ZHRHJhd2VyPQpjO2QubWFrZVN5bWJvbENhbnZhc0RyYXdTdGVwPWZ1bmN0aW9uKHEscix0KXt2YXIgdj10aGlzO3JldHVybiBmdW5jdGlvbihBLHkseCl7dmFyIEM9QS5jYW52YXMsRj1DLmNsaWVudFdpZHRoO0M9Qy5jbGllbnRIZWlnaHQ7Zm9yKHZhciBEPW5ldyBtLkNhbnZhc0J1ZmZlcigwLDApLEI9cigpLEc9dCgpLEs9bnVsbCxMPW51bGwsSj1udWxsLFA9MDtQPHkubGVuZ3RoO1ArKyl7dmFyIFM9eVtQXTtpZihudWxsIT1TKXt2YXIgTj1wLnJlc29sdmVBdHRyaWJ1dGVzU3Vic2V0V2l0aFN0eWxlcyh4LFsieCIsInkiXSxTLFApLFQ9RyhTLFAscSk7aWYoZyhGLEMsTi54LE4ueSxUKSl7dmFyIFk9bChLLE4scC5Db250ZXh0U3R5bGVBdHRycyk7Uz1CKFMsUCx2Ll9kYXRhc2V0KTtZJiZKPT1UJiZMPT1TfHwoSz1wLmdldFN0cm9rZVdpZHRoKE4pLEs9VCtLKzEsKEs+RC5zY3JlZW5XaWR0aHx8Sz5ELnNjcmVlbkhlaWdodCkmJkQucmVzaXplKEssSywhMCksRC5jbGVhcigpLEs9RC5jdHgsSy5iZWdpblBhdGgoKSwKUyhUKS5jb250ZXh0KEspKG51bGwpLEsuY2xvc2VQYXRoKCkscC5yZW5kZXJQYXRoV2l0aFN0eWxlKEssTiksTD1TLEo9VCxLPU4pO0QuYmxpdENlbnRlcihBLE4ueCxOLnkpfX19fX19LGZ1bmN0aW9uKGMsZCxmKXtmdW5jdGlvbiBnKEQpe3JldHVybiBEIGluc3RhbmNlb2YgeT9EOkQgaW5zdGFuY2VvZiBEYXRlP20oRC52YWx1ZU9mKCkpOkQgaW5zdGFuY2VvZiBBLlNjYWxlP2woRCk6RCBpbnN0YW5jZW9mIHYuRGF0YXNldD9rKEQpOnQoRCk/cShEKTpBcnJheS5pc0FycmF5KEQpP3AoRCk6bShEKX1mdW5jdGlvbiBsKEQpe0Q9e2RvbWFpbjpELmRvbWFpbigpLHJhbmdlOkQucmFuZ2UoKSx1cGRhdGVJZDpELnVwZGF0ZUlkKCkscmVmOm0oRCl9O3JldHVybiBxKEQpfWZ1bmN0aW9uIGsoRCl7RD17cmVmOm0oRCksdXBkYXRlSWQ6RC51cGRhdGVJZCgpfTtyZXR1cm4gcShEKX1mdW5jdGlvbiBtKEQpe3JldHVybiBuZXcgQyhEKX1mdW5jdGlvbiBwKEQpe3JldHVybiBuZXcgeChELm1hcChmdW5jdGlvbihCKXtyZXR1cm4gZyhCKX0pKX0KZnVuY3Rpb24gcShEKXt2YXIgQj17fSxHO2ZvcihHIGluIEQpRC5oYXNPd25Qcm9wZXJ0eShHKSYmKEJbR109ZyhEW0ddKSk7cmV0dXJuIG5ldyBGKEIpfXZhciByPXRoaXMmJnRoaXMuX19leHRlbmRzfHxmdW5jdGlvbihELEIpe2Z1bmN0aW9uIEcoKXt0aGlzLmNvbnN0cnVjdG9yPUR9Zm9yKHZhciBLIGluIEIpQi5oYXNPd25Qcm9wZXJ0eShLKSYmKERbS109QltLXSk7RC5wcm90b3R5cGU9bnVsbD09PUI/T2JqZWN0LmNyZWF0ZShCKTooRy5wcm90b3R5cGU9Qi5wcm90b3R5cGUsbmV3IEcpfSx0PWYoMTI4KSx2PWYoMzgpLEE9ZigxNyk7ZC5zaWduPWc7ZC5zaWduU2NhbGU9bDtkLnNpZ25EYXRhc2V0PWs7ZC5zaWduUmVmPW07ZC5zaWduQXJyYXk9cDtkLnNpZ25PYmo9cTt2YXIgeT1mdW5jdGlvbigpe2Z1bmN0aW9uIEQoKXt9RC5wcm90b3R5cGUuaXNEaWZmZXJlbnQ9ZnVuY3Rpb24oQil7cmV0dXJuIEIgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yP3RoaXMuaXNTaWduYXR1cmVEaWZmZXJlbnQoQik6CiEwfTtyZXR1cm4gRH0oKTtkLlNpZ25hdHVyZT15O3ZhciB4PWZ1bmN0aW9uKEQpe2Z1bmN0aW9uIEIoRyl7dmFyIEs9RC5jYWxsKHRoaXMpfHx0aGlzO0suYXJyYXk9RztyZXR1cm4gS31yKEIsRCk7Qi5wcm90b3R5cGUuaXNTaWduYXR1cmVEaWZmZXJlbnQ9ZnVuY3Rpb24oRyl7aWYoRy5hcnJheS5sZW5ndGghPT10aGlzLmFycmF5Lmxlbmd0aClyZXR1cm4hMDtmb3IodmFyIEs9MDtLPHRoaXMuYXJyYXkubGVuZ3RoO0srKylpZih0aGlzLmFycmF5W0tdLmlzRGlmZmVyZW50KEcuYXJyYXlbS10pKXJldHVybiEwO3JldHVybiExfTtyZXR1cm4gQn0oeSk7ZC5BcnJheVNpZ25hdHVyZT14O3ZhciBDPWZ1bmN0aW9uKEQpe2Z1bmN0aW9uIEIoRyl7dmFyIEs9RC5jYWxsKHRoaXMpfHx0aGlzO0sucmVmPUc7cmV0dXJuIEt9cihCLEQpO0IucHJvdG90eXBlLmlzU2lnbmF0dXJlRGlmZmVyZW50PWZ1bmN0aW9uKEcpe3JldHVybiB0aGlzLnJlZiE9PUcucmVmfTtyZXR1cm4gQn0oeSk7ZC5SZWZlcmVuY2VTaWduYXR1cmU9CkM7dmFyIEY9ZnVuY3Rpb24oRCl7ZnVuY3Rpb24gQihHKXt2YXIgSz1ELmNhbGwodGhpcyl8fHRoaXM7Sy5vYmo9RztyZXR1cm4gS31yKEIsRCk7Qi5wcm90b3R5cGUuaXNTaWduYXR1cmVEaWZmZXJlbnQ9ZnVuY3Rpb24oRyl7dmFyIEs9T2JqZWN0LmtleXModGhpcy5vYmopLEw9T2JqZWN0LmtleXMoRy5vYmopO2lmKEsubGVuZ3RoIT09TC5sZW5ndGgpcmV0dXJuITA7Zm9yKEw9MDtMPEsubGVuZ3RoO0wrKyl7dmFyIEo9S1tMXTtpZighRy5vYmouaGFzT3duUHJvcGVydHkoSil8fHRoaXMub2JqW0pdLmlzRGlmZmVyZW50KEcub2JqW0pdKSlyZXR1cm4hMH1yZXR1cm4hMX07cmV0dXJuIEJ9KHkpO2QuT2JqZWN0U2lnbmF0dXJlPUZ9LGZ1bmN0aW9uKGMsZCxmKXt2YXIgZz10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8ZnVuY3Rpb24oeSx4KXtmdW5jdGlvbiBDKCl7dGhpcy5jb25zdHJ1Y3Rvcj15fWZvcih2YXIgRiBpbiB4KXguaGFzT3duUHJvcGVydHkoRikmJih5W0ZdPXhbRl0pO3kucHJvdG90eXBlPQpudWxsPT09eD9PYmplY3QuY3JlYXRlKHgpOihDLnByb3RvdHlwZT14LnByb3RvdHlwZSxuZXcgQyl9LGw9ZigxKSxrPWYoMyksbT1mKDApLHA9ZigxNCkscT1mKDQ2KSxyPWYoNiksdD1mKDMzKSx2PWYoMTkpO2M9Zig1Myk7dmFyIEE9ZigyKTtmPWZ1bmN0aW9uKHkpe2Z1bmN0aW9uIHgoKXt2YXIgQz15LmNhbGwodGhpcyl8fHRoaXM7Qy5hZGRDbGFzcygiYXJlYS1wbG90Iik7Qy55MCgwKTtDLmF0dHIoImZpbGwtb3BhY2l0eSIsLjI1KTtDLmF0dHIoImZpbGwiLChuZXcgay5Db2xvcikucmFuZ2UoKVswXSk7Qy5fbGluZURyYXdlcnM9bmV3IG0uTWFwO3JldHVybiBDfWcoeCx5KTt4LnByb3RvdHlwZS55PWZ1bmN0aW9uKEMsRil7aWYobnVsbD09QylyZXR1cm4geS5wcm90b3R5cGUueS5jYWxsKHRoaXMpO251bGw9PUY/eS5wcm90b3R5cGUueS5jYWxsKHRoaXMsQyk6eS5wcm90b3R5cGUueS5jYWxsKHRoaXMsQyxGKTtudWxsIT1GJiYoQz10aGlzLnkwKCkuYWNjZXNzb3IsbnVsbCE9CkMmJnRoaXMuX2JpbmRQcm9wZXJ0eSh4Ll9ZMF9LRVksQyxGKSx0aGlzLl91cGRhdGVZU2NhbGUoKSk7cmV0dXJuIHRoaXN9O3gucHJvdG90eXBlLnkwPWZ1bmN0aW9uKEMpe2lmKG51bGw9PUMpcmV0dXJuIHRoaXMuX3Byb3BlcnR5QmluZGluZ3MuZ2V0KHguX1kwX0tFWSk7dmFyIEY9dGhpcy55KCk7dGhpcy5fYmluZFByb3BlcnR5KHguX1kwX0tFWSxDLEYmJkYuc2NhbGUpO3RoaXMuX3VwZGF0ZVlTY2FsZSgpO3RoaXMucmVuZGVyKCk7cmV0dXJuIHRoaXN9O3gucHJvdG90eXBlLl9vbkRhdGFzZXRVcGRhdGU9ZnVuY3Rpb24oKXt5LnByb3RvdHlwZS5fb25EYXRhc2V0VXBkYXRlLmNhbGwodGhpcyk7dGhpcy5fdXBkYXRlWVNjYWxlKCl9O3gucHJvdG90eXBlLl9hZGREYXRhc2V0PWZ1bmN0aW9uKEMpe3ZhciBGPXRoaXM7dGhpcy5fbGluZURyYXdlcnMuc2V0KEMsbmV3IHAuUHJveHlEcmF3ZXIoZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHQuTGluZVNWR0RyYXdlcn0sZnVuY3Rpb24oRCl7cmV0dXJuIG5ldyBwLkNhbnZhc0RyYXdlcihELAp0Lm1ha2VMaW5lQ2FudmFzRHJhd1N0ZXAoZnVuY3Rpb24oKXt2YXIgQj1BLlBsb3QuX3NjYWxlZEFjY2Vzc29yKEYueCgpKSxHPUEuUGxvdC5fc2NhbGVkQWNjZXNzb3IoRi55KCkpO3JldHVybiBGLl9kM0xpbmVGYWN0b3J5KEMsQixHKX0pKX0pKTt5LnByb3RvdHlwZS5fYWRkRGF0YXNldC5jYWxsKHRoaXMsQyk7cmV0dXJuIHRoaXN9O3gucHJvdG90eXBlLl9jcmVhdGVOb2Rlc0ZvckRhdGFzZXQ9ZnVuY3Rpb24oQyl7eS5wcm90b3R5cGUuX2NyZWF0ZU5vZGVzRm9yRGF0YXNldC5jYWxsKHRoaXMsQyk7Qz10aGlzLl9saW5lRHJhd2Vycy5nZXQoQyk7InN2ZyI9PT10aGlzLnJlbmRlcmVyKCk/Qy51c2VTVkcodGhpcy5fcmVuZGVyQXJlYSk6Qy51c2VDYW52YXModGhpcy5fY2FudmFzKTtyZXR1cm4gQ307eC5wcm90b3R5cGUuX3JlbW92ZURhdGFzZXROb2Rlcz1mdW5jdGlvbihDKXt5LnByb3RvdHlwZS5fcmVtb3ZlRGF0YXNldE5vZGVzLmNhbGwodGhpcyxDKTt0aGlzLl9saW5lRHJhd2Vycy5nZXQoQykucmVtb3ZlKCl9Owp4LnByb3RvdHlwZS5fYWRkaXRpb25hbFBhaW50PWZ1bmN0aW9uKCl7dmFyIEM9dGhpcyxGPXRoaXMuX2dlbmVyYXRlTGluZURyYXdTdGVwcygpLEQ9dGhpcy5fZ2V0RGF0YVRvRHJhdygpO3RoaXMuZGF0YXNldHMoKS5mb3JFYWNoKGZ1bmN0aW9uKEIpe3ZhciBHPUEuUGxvdC5hcHBseURyYXdTdGVwcyhGLEIpO0MuX2xpbmVEcmF3ZXJzLmdldChCKS5kcmF3KEQuZ2V0KEIpLEcpfSl9O3gucHJvdG90eXBlLl9nZW5lcmF0ZUxpbmVEcmF3U3RlcHM9ZnVuY3Rpb24oKXt2YXIgQz1bXTtpZih0aGlzLl9hbmltYXRlT25OZXh0UmVuZGVyKCkpe3ZhciBGPXRoaXMuX2dlbmVyYXRlTGluZUF0dHJUb1Byb2plY3RvcigpO0YuZD10aGlzLl9jb25zdHJ1Y3RMaW5lUHJvamVjdG9yKEEuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy54KCkpLHRoaXMuX2dldFJlc2V0WUZ1bmN0aW9uKCkpO0MucHVzaCh7YXR0clRvUHJvamVjdG9yOkYsYW5pbWF0b3I6dGhpcy5fZ2V0QW5pbWF0b3Iodi5BbmltYXRvci5SRVNFVCl9KX1DLnB1c2goe2F0dHJUb1Byb2plY3Rvcjp0aGlzLl9nZW5lcmF0ZUxpbmVBdHRyVG9Qcm9qZWN0b3IoKSwKYW5pbWF0b3I6dGhpcy5fZ2V0QW5pbWF0b3Iodi5BbmltYXRvci5NQUlOKX0pO3JldHVybiBDfTt4LnByb3RvdHlwZS5fZ2VuZXJhdGVMaW5lQXR0clRvUHJvamVjdG9yPWZ1bmN0aW9uKCl7dmFyIEM9dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCk7Qy5kPXRoaXMuX2NvbnN0cnVjdExpbmVQcm9qZWN0b3IoQS5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSksQS5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkoKSkpO3JldHVybiBDfTt4LnByb3RvdHlwZS5fY3JlYXRlRHJhd2VyPWZ1bmN0aW9uKEMpe3ZhciBGPXRoaXM7cmV0dXJuIG5ldyByLlByb3h5RHJhd2VyKGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBxLkFyZWFTVkdEcmF3ZXJ9LGZ1bmN0aW9uKEQpe3JldHVybiBuZXcgcC5DYW52YXNEcmF3ZXIoRCxxLm1ha2VBcmVhQ2FudmFzRHJhd1N0ZXAoZnVuY3Rpb24oKXt2YXIgQj1BLlBsb3QuX3NjYWxlZEFjY2Vzc29yKEYueCgpKSxHPUEuUGxvdC5fc2NhbGVkQWNjZXNzb3IoRi55KCkpLApLPUEuUGxvdC5fc2NhbGVkQWNjZXNzb3IoRi55MCgpKTtyZXR1cm4gRi5fY3JlYXRlQXJlYUdlbmVyYXRvcihCLEcsSyxGLl9jcmVhdGVEZWZpbmVkUHJvamVjdG9yKEIsRyksQyl9KSl9KX07eC5wcm90b3R5cGUuX2dlbmVyYXRlRHJhd1N0ZXBzPWZ1bmN0aW9uKCl7dmFyIEM9W107aWYodGhpcy5fYW5pbWF0ZU9uTmV4dFJlbmRlcigpKXt2YXIgRj10aGlzLl9nZXRBdHRyVG9Qcm9qZWN0b3IoKTtGLmQ9dGhpcy5fY29uc3RydWN0QXJlYVByb2plY3RvcihBLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueCgpKSx0aGlzLl9nZXRSZXNldFlGdW5jdGlvbigpLEEuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy55MCgpKSk7Qy5wdXNoKHthdHRyVG9Qcm9qZWN0b3I6RixhbmltYXRvcjp0aGlzLl9nZXRBbmltYXRvcih2LkFuaW1hdG9yLlJFU0VUKX0pfUMucHVzaCh7YXR0clRvUHJvamVjdG9yOnRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpLGFuaW1hdG9yOnRoaXMuX2dldEFuaW1hdG9yKHYuQW5pbWF0b3IuTUFJTil9KTsKcmV0dXJuIEN9O3gucHJvdG90eXBlLl91cGRhdGVZU2NhbGU9ZnVuY3Rpb24oKXt2YXIgQz10aGlzLmdldEV4dGVudHNGb3JQcm9wZXJ0eSgieTAiKTtDPW0uQXJyYXkudW5pcShtLkFycmF5LmZsYXR0ZW4oQykpO3ZhciBGPTE9PT1DLmxlbmd0aD9DWzBdOm51bGw7Qz0oQz10aGlzLnkoKSkmJkMuc2NhbGU7bnVsbCE9QyYmKG51bGwhPXRoaXMuX2NvbnN0YW50QmFzZWxpbmVWYWx1ZVByb3ZpZGVyJiYoQy5yZW1vdmVQYWRkaW5nRXhjZXB0aW9uc1Byb3ZpZGVyKHRoaXMuX2NvbnN0YW50QmFzZWxpbmVWYWx1ZVByb3ZpZGVyKSx0aGlzLl9jb25zdGFudEJhc2VsaW5lVmFsdWVQcm92aWRlcj1udWxsKSxudWxsIT1GJiYodGhpcy5fY29uc3RhbnRCYXNlbGluZVZhbHVlUHJvdmlkZXI9ZnVuY3Rpb24oKXtyZXR1cm5bRl19LEMuYWRkUGFkZGluZ0V4Y2VwdGlvbnNQcm92aWRlcih0aGlzLl9jb25zdGFudEJhc2VsaW5lVmFsdWVQcm92aWRlcikpKX07eC5wcm90b3R5cGUuX2dldFJlc2V0WUZ1bmN0aW9uPQpmdW5jdGlvbigpe3JldHVybiBBLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueTAoKSl9O3gucHJvdG90eXBlLl9wcm9wZXJ0eVByb2plY3RvcnM9ZnVuY3Rpb24oKXt2YXIgQz15LnByb3RvdHlwZS5fcHJvcGVydHlQcm9qZWN0b3JzLmNhbGwodGhpcyk7Qy5kPXRoaXMuX2NvbnN0cnVjdEFyZWFQcm9qZWN0b3IoQS5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSksQS5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkoKSksQS5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkwKCkpKTtyZXR1cm4gQ307eC5wcm90b3R5cGUuc2VsZWN0aW9ucz1mdW5jdGlvbihDKXt2YXIgRj10aGlzO3ZvaWQgMD09PUMmJihDPXRoaXMuZGF0YXNldHMoKSk7aWYoImNhbnZhcyI9PT10aGlzLnJlbmRlcmVyKCkpcmV0dXJuIGwuc2VsZWN0QWxsKCk7dmFyIEQ9eS5wcm90b3R5cGUuc2VsZWN0aW9ucy5jYWxsKHRoaXMsQykubm9kZXMoKTtDLm1hcChmdW5jdGlvbihCKXtyZXR1cm4gRi5fbGluZURyYXdlcnMuZ2V0KEIpfSkuZmlsdGVyKGZ1bmN0aW9uKEIpe3JldHVybiBudWxsIT0KQn0pLmZvckVhY2goZnVuY3Rpb24oQil7cmV0dXJuIEQucHVzaC5hcHBseShELEIuZ2V0VmlzdWFsUHJpbWl0aXZlcygpKX0pO3JldHVybiBsLnNlbGVjdEFsbChEKX07eC5wcm90b3R5cGUuX2NvbnN0cnVjdEFyZWFQcm9qZWN0b3I9ZnVuY3Rpb24oQyxGLEQpe3ZhciBCPXRoaXMsRz10aGlzLl9jcmVhdGVEZWZpbmVkUHJvamVjdG9yKEEuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy54KCkpLEEuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy55KCkpKTtyZXR1cm4gZnVuY3Rpb24oSyxMLEope3JldHVybiBCLl9jcmVhdGVBcmVhR2VuZXJhdG9yKEMsRixELEcsSikoSyl9fTt4LnByb3RvdHlwZS5fY3JlYXRlRGVmaW5lZFByb2plY3Rvcj1mdW5jdGlvbihDLEYpe3JldHVybiBmdW5jdGlvbihELEIsRyl7dmFyIEs9QyhELEIsRyk7RD1GKEQsQixHKTtyZXR1cm4gbS5NYXRoLmlzVmFsaWROdW1iZXIoSykmJm0uTWF0aC5pc1ZhbGlkTnVtYmVyKEQpfX07eC5wcm90b3R5cGUuX2NyZWF0ZUFyZWFHZW5lcmF0b3I9CmZ1bmN0aW9uKEMsRixELEIsRyl7dmFyIEs9dGhpcy5fZ2V0Q3VydmVGYWN0b3J5KCk7cmV0dXJuIGwuYXJlYSgpLngoZnVuY3Rpb24oTCxKKXtyZXR1cm4gQyhMLEosRyl9KS55MShmdW5jdGlvbihMLEope3JldHVybiBGKEwsSixHKX0pLnkwKGZ1bmN0aW9uKEwsSil7cmV0dXJuIEQoTCxKLEcpfSkuY3VydmUoSykuZGVmaW5lZChmdW5jdGlvbihMLEope3JldHVybiBCKEwsSixHKX0pfTtyZXR1cm4geH0oYy5MaW5lKTtmLl9ZMF9LRVk9InkwIjtkLkFyZWE9Zn0sZnVuY3Rpb24oYyxkKXsoZnVuY3Rpb24oZil7Zi5NQUlOPSJtYWluIjtmLlJFU0VUPSJyZXNldCJ9KShkLkFuaW1hdG9yfHwoZC5BbmltYXRvcj17fSkpfSxmdW5jdGlvbihjLGQpe3ZhciBmPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZygpe3ZhciBsPXRoaXM7dGhpcy50cmFuc2xhdGU9dGhpcy5zY2FsZT0wO3RoaXMuY2FjaGVkRG9tYWluPVtudWxsLG51bGxdO3RoaXMubGFzdFNlZW5Eb21haW49W251bGwsbnVsbF07dGhpcy51cGRhdGVEb21haW49CmZ1bmN0aW9uKGspe2wubGFzdFNlZW5Eb21haW49ay5nZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbigpO3ZhciBtPWsuc2NhbGVUcmFuc2Zvcm1hdGlvbihsLmNhY2hlZERvbWFpblsxXSktay5zY2FsZVRyYW5zZm9ybWF0aW9uKGwuY2FjaGVkRG9tYWluWzBdKSxwPWsuc2NhbGVUcmFuc2Zvcm1hdGlvbihsLmxhc3RTZWVuRG9tYWluWzFdKS1rLnNjYWxlVHJhbnNmb3JtYXRpb24obC5sYXN0U2VlbkRvbWFpblswXSk7bC5zY2FsZT1tL3B8fDE7bC50cmFuc2xhdGU9ay5zY2FsZVRyYW5zZm9ybWF0aW9uKGwuY2FjaGVkRG9tYWluWzBdKS1rLnNjYWxlVHJhbnNmb3JtYXRpb24obC5sYXN0U2VlbkRvbWFpblswXSkqbC5zY2FsZXx8MH19Zy5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXt0aGlzLnNjYWxlPTE7dGhpcy50cmFuc2xhdGU9MDt0aGlzLmNhY2hlZERvbWFpbj10aGlzLmxhc3RTZWVuRG9tYWlufTtnLnByb3RvdHlwZS5zZXREb21haW49ZnVuY3Rpb24obCl7dGhpcy5jYWNoZWREb21haW49CmwuZ2V0VHJhbnNmb3JtYXRpb25Eb21haW4oKX07cmV0dXJuIGd9KCk7Yz1mdW5jdGlvbigpe2Z1bmN0aW9uIGcobCxrKXt2YXIgbT10aGlzO3RoaXMucmVuZGVyQ2FsbGJhY2s9bDt0aGlzLmFwcGx5VHJhbnNmb3JtQ2FsbGJhY2s9azt0aGlzLmRvbWFpblRyYW5zZm9ybVg9bmV3IGY7dGhpcy5kb21haW5UcmFuc2Zvcm1ZPW5ldyBmO3RoaXMucmVuZGVyRGVmZXJyZWQ9ZnVuY3Rpb24oKXttLmFwcGx5VHJhbnNmb3JtKCk7Y2xlYXJUaW1lb3V0KG0udGltZW91dFRva2VuKTttLnRpbWVvdXRUb2tlbj1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7bS5yZW5kZXJDYWxsYmFjaygpfSxnLkRFRkVSUkVEX1JFTkRFUklOR19ERUxBWSl9fWcucHJvdG90eXBlLnNldERvbWFpbnM9ZnVuY3Rpb24obCxrKXtsJiZ0aGlzLmRvbWFpblRyYW5zZm9ybVguc2V0RG9tYWluKGwpO2smJnRoaXMuZG9tYWluVHJhbnNmb3JtWS5zZXREb21haW4oayk7dGhpcy5yZW5kZXJEZWZlcnJlZCgpfTtnLnByb3RvdHlwZS51cGRhdGVEb21haW5zPQpmdW5jdGlvbihsLGspe2wmJnRoaXMuZG9tYWluVHJhbnNmb3JtWC51cGRhdGVEb21haW4obCk7ayYmdGhpcy5kb21haW5UcmFuc2Zvcm1ZLnVwZGF0ZURvbWFpbihrKTt0aGlzLnJlbmRlckRlZmVycmVkKCl9O2cucHJvdG90eXBlLnJlc2V0VHJhbnNmb3Jtcz1mdW5jdGlvbigpe3RoaXMuZG9tYWluVHJhbnNmb3JtWC5yZXNldCgpO3RoaXMuZG9tYWluVHJhbnNmb3JtWS5yZXNldCgpO3RoaXMuYXBwbHlUcmFuc2Zvcm0oKX07Zy5wcm90b3R5cGUuYXBwbHlUcmFuc2Zvcm09ZnVuY3Rpb24oKXt0aGlzLmFwcGx5VHJhbnNmb3JtQ2FsbGJhY2sodGhpcy5kb21haW5UcmFuc2Zvcm1YLnRyYW5zbGF0ZSx0aGlzLmRvbWFpblRyYW5zZm9ybVkudHJhbnNsYXRlLHRoaXMuZG9tYWluVHJhbnNmb3JtWC5zY2FsZSx0aGlzLmRvbWFpblRyYW5zZm9ybVkuc2NhbGUpfTtyZXR1cm4gZ30oKTtjLkRFRkVSUkVEX1JFTkRFUklOR19ERUxBWT0yMDA7ZC5EZWZlcnJlZFJlbmRlcmVyPWN9LGZ1bmN0aW9uKGMsCmQsZil7dmFyIGc9dGhpcyYmdGhpcy5fX2V4dGVuZHN8fGZ1bmN0aW9uKEMsRil7ZnVuY3Rpb24gRCgpe3RoaXMuY29uc3RydWN0b3I9Q31mb3IodmFyIEIgaW4gRilGLmhhc093blByb3BlcnR5KEIpJiYoQ1tCXT1GW0JdKTtDLnByb3RvdHlwZT1udWxsPT09Rj9PYmplY3QuY3JlYXRlKEYpOihELnByb3RvdHlwZT1GLnByb3RvdHlwZSxuZXcgRCl9LGw9ZigxKSxrPWYoNyksbT1mKDE0KSxwPWYoNikscT1mKDMzKSxyPWYoMyksdD1mKDExKSx2PWYoMCk7Yz1mKDEwKTt2YXIgQT1mKDE5KSx5PWYoMik7Zj1mKDE2KTt2YXIgeD17bGluZWFyOmwuY3VydmVMaW5lYXIsbGluZWFyQ2xvc2VkOmwuY3VydmVMaW5lYXJDbG9zZWQsc3RlcDpsLmN1cnZlU3RlcCxzdGVwQmVmb3JlOmwuY3VydmVTdGVwQmVmb3JlLHN0ZXBBZnRlcjpsLmN1cnZlU3RlcEFmdGVyLGJhc2lzOmwuY3VydmVCYXNpcyxiYXNpc09wZW46bC5jdXJ2ZUJhc2lzT3BlbixiYXNpc0Nsb3NlZDpsLmN1cnZlQmFzaXNDbG9zZWQsCmJ1bmRsZTpsLmN1cnZlQnVuZGxlLGNhcmRpbmFsOmwuY3VydmVDYXJkaW5hbCxjYXJkaW5hbE9wZW46bC5jdXJ2ZUNhcmRpbmFsT3BlbixjYXJkaW5hbENsb3NlZDpsLmN1cnZlQ2FyZGluYWxDbG9zZWQsbW9ub3RvbmU6bC5jdXJ2ZU1vbm90b25lWH07ZC5DdXJ2ZU5hbWU9Yy5tYWtlRW51bSgibGluZWFyIGxpbmVhckNsb3NlZCBzdGVwIHN0ZXBCZWZvcmUgc3RlcEFmdGVyIGJhc2lzIGJhc2lzT3BlbiBiYXNpc0Nsb3NlZCBidW5kbGUgY2FyZGluYWwgY2FyZGluYWxPcGVuIGNhcmRpbmFsQ2xvc2VkIG1vbm90b25lIi5zcGxpdCgiICIpKTtmPWZ1bmN0aW9uKEMpe2Z1bmN0aW9uIEYoKXt2YXIgRD1DLmNhbGwodGhpcyl8fHRoaXM7RC5fY3VydmU9ImxpbmVhciI7RC5fYXV0b3JhbmdlU21vb3RoPSExO0QuX2Nyb3BwZWRSZW5kZXJpbmdFbmFibGVkPSEwO0QuX2NvbGxhcHNlRGVuc2VWZXJ0aWNhbExpbmVzRW5hYmxlZD0hMTtELl9kb3duc2FtcGxpbmdFbmFibGVkPSExO0QuYWRkQ2xhc3MoImxpbmUtcGxvdCIpOwp2YXIgQj1uZXcgay5FYXNpbmc7Qi5zdGVwRHVyYXRpb24oeS5QbG90Ll9BTklNQVRJT05fTUFYX0RVUkFUSU9OKTtCLmVhc2luZ01vZGUoImV4cEluT3V0Iik7Qi5tYXhUb3RhbER1cmF0aW9uKHkuUGxvdC5fQU5JTUFUSU9OX01BWF9EVVJBVElPTik7RC5hbmltYXRvcihBLkFuaW1hdG9yLk1BSU4sQik7RC5hdHRyKCJzdHJva2UiLChuZXcgci5Db2xvcikucmFuZ2UoKVswXSk7RC5hdHRyKCJzdHJva2Utd2lkdGgiLCIycHgiKTtyZXR1cm4gRH1nKEYsQyk7Ri5wcm90b3R5cGUueD1mdW5jdGlvbihELEIsRyl7aWYobnVsbD09RClyZXR1cm4gQy5wcm90b3R5cGUueC5jYWxsKHRoaXMpO0MucHJvdG90eXBlLnguY2FsbCh0aGlzLEQsQixHKTt0aGlzLl9zZXRTY2FsZVNuYXBwaW5nKCk7cmV0dXJuIHRoaXN9O0YucHJvdG90eXBlLnk9ZnVuY3Rpb24oRCxCLEcpe2lmKG51bGw9PUQpcmV0dXJuIEMucHJvdG90eXBlLnkuY2FsbCh0aGlzKTtDLnByb3RvdHlwZS55LmNhbGwodGhpcyxELEIsCkcpO3RoaXMuX3NldFNjYWxlU25hcHBpbmcoKTtyZXR1cm4gdGhpc307Ri5wcm90b3R5cGUuYXV0b3JhbmdlTW9kZT1mdW5jdGlvbihEKXtpZihudWxsPT1EKXJldHVybiBDLnByb3RvdHlwZS5hdXRvcmFuZ2VNb2RlLmNhbGwodGhpcyk7Qy5wcm90b3R5cGUuYXV0b3JhbmdlTW9kZS5jYWxsKHRoaXMsRCk7dGhpcy5fc2V0U2NhbGVTbmFwcGluZygpO3JldHVybiB0aGlzfTtGLnByb3RvdHlwZS5hdXRvcmFuZ2VTbW9vdGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXV0b3JhbmdlU21vb3RofTtGLnByb3RvdHlwZS5fc2V0U2NhbGVTbmFwcGluZz1mdW5jdGlvbigpeyJ4Ij09PXRoaXMuYXV0b3JhbmdlTW9kZSgpJiZ0aGlzLngoKSYmdGhpcy54KCkuc2NhbGUmJnRoaXMueCgpLnNjYWxlIGluc3RhbmNlb2YgdC5RdWFudGl0YXRpdmVTY2FsZSYmdGhpcy54KCkuc2NhbGUuc25hcHBpbmdEb21haW5FbmFibGVkKCF0aGlzLmF1dG9yYW5nZVNtb290aCgpKTsieSI9PT10aGlzLmF1dG9yYW5nZU1vZGUoKSYmCnRoaXMueSgpJiZ0aGlzLnkoKS5zY2FsZSYmdGhpcy55KCkuc2NhbGUgaW5zdGFuY2VvZiB0LlF1YW50aXRhdGl2ZVNjYWxlJiZ0aGlzLnkoKS5zY2FsZS5zbmFwcGluZ0RvbWFpbkVuYWJsZWQoIXRoaXMuYXV0b3JhbmdlU21vb3RoKCkpfTtGLnByb3RvdHlwZS5jdXJ2ZT1mdW5jdGlvbihEKXtpZihudWxsPT1EKXJldHVybiB0aGlzLl9jdXJ2ZTt0aGlzLl9jdXJ2ZT1EO3RoaXMucmVuZGVyKCk7cmV0dXJuIHRoaXN9O0YucHJvdG90eXBlLmRvd25zYW1wbGluZ0VuYWJsZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZG93bnNhbXBsaW5nRW5hYmxlZH07Ri5wcm90b3R5cGUuY3JvcHBlZFJlbmRlcmluZ0VuYWJsZWQ9ZnVuY3Rpb24oRCl7aWYobnVsbD09RClyZXR1cm4gdGhpcy5fY3JvcHBlZFJlbmRlcmluZ0VuYWJsZWQ7dGhpcy5fY3JvcHBlZFJlbmRlcmluZ0VuYWJsZWQ9RDt0aGlzLnJlbmRlcigpO3JldHVybiB0aGlzfTtGLnByb3RvdHlwZS5jb2xsYXBzZURlbnNlTGluZXNFbmFibGVkPQpmdW5jdGlvbihEKXtpZihudWxsPT1EKXJldHVybiB0aGlzLl9jb2xsYXBzZURlbnNlVmVydGljYWxMaW5lc0VuYWJsZWQ7dGhpcy5fY29sbGFwc2VEZW5zZVZlcnRpY2FsTGluZXNFbmFibGVkPUQ7dGhpcy5yZW5kZXIoKTtyZXR1cm4gdGhpc307Ri5wcm90b3R5cGUuX2NyZWF0ZURyYXdlcj1mdW5jdGlvbihEKXt2YXIgQj10aGlzO3JldHVybiBuZXcgcC5Qcm94eURyYXdlcihmdW5jdGlvbigpe3JldHVybiBuZXcgcS5MaW5lU1ZHRHJhd2VyfSxmdW5jdGlvbihHKXtyZXR1cm4gbmV3IG0uQ2FudmFzRHJhd2VyKEcscS5tYWtlTGluZUNhbnZhc0RyYXdTdGVwKGZ1bmN0aW9uKCl7cmV0dXJuIEIuX2QzTGluZUZhY3RvcnkoRCl9KSl9KX07Ri5wcm90b3R5cGUuZ2V0RXh0ZW50c0ZvclByb3BlcnR5PWZ1bmN0aW9uKEQpe3ZhciBCPUMucHJvdG90eXBlLmdldEV4dGVudHNGb3JQcm9wZXJ0eS5jYWxsKHRoaXMsRCk7aWYoIXRoaXMuX2F1dG9yYW5nZVNtb290aHx8dGhpcy5hdXRvcmFuZ2VNb2RlKCkhPT0KRHx8IngiIT09dGhpcy5hdXRvcmFuZ2VNb2RlKCkmJiJ5IiE9PXRoaXMuYXV0b3JhbmdlTW9kZSgpKXJldHVybiBCO0Q9dGhpcy5fZ2V0RWRnZUludGVyc2VjdGlvblBvaW50cygpO3ZhciBHPSJ5Ij09PXRoaXMuYXV0b3JhbmdlTW9kZSgpP0QubGVmdC5jb25jYXQoRC5yaWdodCkubWFwKGZ1bmN0aW9uKEspe3JldHVybiBLLnl9KTpELnRvcC5jb25jYXQoRC5ib3R0b20pLm1hcChmdW5jdGlvbihLKXtyZXR1cm4gSy54fSk7cmV0dXJuIEIubWFwKGZ1bmN0aW9uKEspe3JldHVybiBsLmV4dGVudChsLm1lcmdlKFtLLEddKSl9KX07Ri5wcm90b3R5cGUuX2dldEVkZ2VJbnRlcnNlY3Rpb25Qb2ludHM9ZnVuY3Rpb24oKXt2YXIgRD10aGlzO2lmKCEodGhpcy55KCkuc2NhbGUgaW5zdGFuY2VvZiB0LlF1YW50aXRhdGl2ZVNjYWxlJiZ0aGlzLngoKS5zY2FsZSBpbnN0YW5jZW9mIHQuUXVhbnRpdGF0aXZlU2NhbGUpKXJldHVybntsZWZ0OltdLHJpZ2h0OltdLHRvcDpbXSxib3R0b206W119Owp2YXIgQj10aGlzLnkoKS5zY2FsZSxHPXRoaXMueCgpLnNjYWxlLEs9e2xlZnQ6W10scmlnaHQ6W10sdG9wOltdLGJvdHRvbTpbXX0sTD1HLnNjYWxlKEcuZG9tYWluKClbMF0pLEo9Ry5zY2FsZShHLmRvbWFpbigpWzFdKSxQPUIuc2NhbGUoQi5kb21haW4oKVswXSksUz1CLnNjYWxlKEIuZG9tYWluKClbMV0pO3RoaXMuZGF0YXNldHMoKS5mb3JFYWNoKGZ1bmN0aW9uKE4pe2Zvcih2YXIgVD1OLmRhdGEoKSxZLGFhLGhhLFgsY2EsZWEsa2EsYmE9MTtiYTxULmxlbmd0aDtiYSsrKVg9ZWF8fEcuc2NhbGUoRC54KCkuYWNjZXNzb3IoVFtiYS0xXSxiYS0xLE4pKSxjYT1rYXx8Qi5zY2FsZShELnkoKS5hY2Nlc3NvcihUW2JhLTFdLGJhLTEsTikpLGVhPUcuc2NhbGUoRC54KCkuYWNjZXNzb3IoVFtiYV0sYmEsTikpLGthPUIuc2NhbGUoRC55KCkuYWNjZXNzb3IoVFtiYV0sYmEsTikpLFg8TD09PUw8PWVhJiYoWT1MLVgsYWE9ZWEtWCxoYT1rYS1jYSxZPVkqaGEvYWEsSy5sZWZ0LnB1c2goe3g6TCwKeTpCLmludmVydChjYStZKX0pKSxYPEo9PT1KPD1lYSYmKFk9Si1YLGFhPWVhLVgsaGE9a2EtY2EsWT1ZKmhhL2FhLEsucmlnaHQucHVzaCh7eDpKLHk6Qi5pbnZlcnQoY2ErWSl9KSksY2E8Uz09PVM8PWthJiYoYWE9ZWEtWCxZPVMtY2EsaGE9a2EtY2EsWT1ZKmFhL2hhLEsudG9wLnB1c2goe3g6Ry5pbnZlcnQoWCtZKSx5OlN9KSksY2E8UD09PVA8PWthJiYoYWE9ZWEtWCxZPVAtY2EsaGE9a2EtY2EsWT1ZKmFhL2hhLEsuYm90dG9tLnB1c2goe3g6Ry5pbnZlcnQoWCtZKSx5OlB9KSl9KTtyZXR1cm4gS307Ri5wcm90b3R5cGUuX2dldFJlc2V0WUZ1bmN0aW9uPWZ1bmN0aW9uKCl7dmFyIEQ9dGhpcy55KCkuc2NhbGUuZG9tYWluKCksQj1NYXRoLm1heChEWzBdLERbMV0pO0Q9TWF0aC5taW4oRFswXSxEWzFdKTtCPTA+QiYmQnx8MDxEJiZEfHwwO3ZhciBHPXRoaXMueSgpLnNjYWxlLnNjYWxlKEIpO3JldHVybiBmdW5jdGlvbigpe3JldHVybiBHfX07Ri5wcm90b3R5cGUuX2dlbmVyYXRlRHJhd1N0ZXBzPQpmdW5jdGlvbigpe3ZhciBEPVtdO2lmKHRoaXMuX2FuaW1hdGVPbk5leHRSZW5kZXIoKSl7dmFyIEI9dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCk7Qi5kPXRoaXMuX2NvbnN0cnVjdExpbmVQcm9qZWN0b3IoeS5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSksdGhpcy5fZ2V0UmVzZXRZRnVuY3Rpb24oKSk7RC5wdXNoKHthdHRyVG9Qcm9qZWN0b3I6QixhbmltYXRvcjp0aGlzLl9nZXRBbmltYXRvcihBLkFuaW1hdG9yLlJFU0VUKX0pfUQucHVzaCh7YXR0clRvUHJvamVjdG9yOnRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpLGFuaW1hdG9yOnRoaXMuX2dldEFuaW1hdG9yKEEuQW5pbWF0b3IuTUFJTil9KTtyZXR1cm4gRH07Ri5wcm90b3R5cGUuX2dlbmVyYXRlQXR0clRvUHJvamVjdG9yPWZ1bmN0aW9uKCl7dmFyIEQ9Qy5wcm90b3R5cGUuX2dlbmVyYXRlQXR0clRvUHJvamVjdG9yLmNhbGwodGhpcyk7T2JqZWN0LmtleXMoRCkuZm9yRWFjaChmdW5jdGlvbihCKXtpZigiZCIhPT0KQil7dmFyIEc9RFtCXTtEW0JdPWZ1bmN0aW9uKEssTCxKKXtyZXR1cm4gMDxLLmxlbmd0aD9HKEtbMF0sTCxKKTpudWxsfX19KTtyZXR1cm4gRH07Ri5wcm90b3R5cGUuZW50aXRpZXNBdD1mdW5jdGlvbihEKXtEPXRoaXMuZW50aXR5TmVhcmVzdEJ5WFRoZW5ZKEQpO3JldHVybiBudWxsIT1EP1tEXTpbXX07Ri5wcm90b3R5cGUuZW50aXR5TmVhcmVzdEJ5WFRoZW5ZPWZ1bmN0aW9uKEQpe3ZhciBCPUluZmluaXR5LEc9SW5maW5pdHksSyxMPXRoaXMuYm91bmRzKCk7dGhpcy5lbnRpdGllcygpLmZvckVhY2goZnVuY3Rpb24oSil7aWYodi5NYXRoLndpdGhpbihKLnBvc2l0aW9uLEwpKXt2YXIgUD1NYXRoLmFicyhELngtSi5wb3NpdGlvbi54KSxTPU1hdGguYWJzKEQueS1KLnBvc2l0aW9uLnkpO2lmKFA8Qnx8UD09PUImJlM8RylLPUosQj1QLEc9U319KTtyZXR1cm4gS307Ri5wcm90b3R5cGUuX3Byb3BlcnR5UHJvamVjdG9ycz1mdW5jdGlvbigpe3ZhciBEPUMucHJvdG90eXBlLl9wcm9wZXJ0eVByb2plY3RvcnMuY2FsbCh0aGlzKTsKRC5kPXRoaXMuX2NvbnN0cnVjdExpbmVQcm9qZWN0b3IoeS5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSkseS5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkoKSkpO3JldHVybiBEfTtGLnByb3RvdHlwZS5fY29uc3RydWN0TGluZVByb2plY3Rvcj1mdW5jdGlvbihELEIpe3ZhciBHPXRoaXM7cmV0dXJuIGZ1bmN0aW9uKEssTCxKKXtyZXR1cm4gRy5fZDNMaW5lRmFjdG9yeShKLEQsQikoSyl9fTtGLnByb3RvdHlwZS5fZDNMaW5lRmFjdG9yeT1mdW5jdGlvbihELEIsRyl7ZnVuY3Rpb24gSyhMLEosUCl7dmFyIFM9QihMLEosUCk7TD1HKEwsSixQKTtyZXR1cm4gdi5NYXRoLmlzVmFsaWROdW1iZXIoUykmJnYuTWF0aC5pc1ZhbGlkTnVtYmVyKEwpfXZvaWQgMD09PUImJihCPXkuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy54KCkpKTt2b2lkIDA9PT1HJiYoRz15LlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueSgpKSk7cmV0dXJuIGwubGluZSgpLngoZnVuY3Rpb24oTCxKKXtyZXR1cm4gQihMLApKLEQpfSkueShmdW5jdGlvbihMLEope3JldHVybiBHKEwsSixEKX0pLmN1cnZlKHRoaXMuX2dldEN1cnZlRmFjdG9yeSgpKS5kZWZpbmVkKGZ1bmN0aW9uKEwsSil7cmV0dXJuIEsoTCxKLEQpfSl9O0YucHJvdG90eXBlLl9nZXRDdXJ2ZUZhY3Rvcnk9ZnVuY3Rpb24oKXt2YXIgRD10aGlzLmN1cnZlKCk7cmV0dXJuInN0cmluZyI9PT10eXBlb2YgRD8oRD14W0RdLG51bGw9PUQ/eC5saW5lYXI6RCk6RH07Ri5wcm90b3R5cGUuX2dldERhdGFUb0RyYXc9ZnVuY3Rpb24oKXt2YXIgRD10aGlzLEI9bmV3IHYuTWFwO3RoaXMuZGF0YXNldHMoKS5mb3JFYWNoKGZ1bmN0aW9uKEcpe3ZhciBLPUcuZGF0YSgpO2lmKEQuX2Nyb3BwZWRSZW5kZXJpbmdFbmFibGVkfHxELl9kb3duc2FtcGxpbmdFbmFibGVkKXt2YXIgTD1LLm1hcChmdW5jdGlvbihKLFApe3JldHVybiBQfSk7RC5fY3JvcHBlZFJlbmRlcmluZ0VuYWJsZWQmJihMPUQuX2ZpbHRlckNyb3BwZWRSZW5kZXJpbmcoRyxMKSk7RC5fZG93bnNhbXBsaW5nRW5hYmxlZCYmCihMPUQuX2ZpbHRlckRvd25zYW1wbGluZyhHLEwpKTtELl9jb2xsYXBzZURlbnNlVmVydGljYWxMaW5lc0VuYWJsZWQmJihMPUQuX2ZpbHRlckRlbnNlTGluZXMoRyxMKSk7Qi5zZXQoRyxbTC5tYXAoZnVuY3Rpb24oSil7cmV0dXJuIEtbSl19KV0pfWVsc2UgQi5zZXQoRyxbS10pfSk7cmV0dXJuIEJ9O0YucHJvdG90eXBlLl9maWx0ZXJDcm9wcGVkUmVuZGVyaW5nPWZ1bmN0aW9uKEQsQil7ZnVuY3Rpb24gRyhoYSxYKXtyZXR1cm4gdi5NYXRoLmluUmFuZ2UoaGEsMCxLLndpZHRoKCkpJiZ2Lk1hdGguaW5SYW5nZShYLDAsSy5oZWlnaHQoKSl9Zm9yKHZhciBLPXRoaXMsTD15LlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueCgpKSxKPXkuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy55KCkpLFA9RC5kYXRhKCksUz1bXSxOPTA7TjxCLmxlbmd0aDtOKyspe3ZhciBUPUwoUFtCW05dXSxCW05dLEQpLFk9SihQW0JbTl1dLEJbTl0sRCk7VD1HKFQsWSk7aWYoIVQmJm51bGwhPUJbTi0xXSYmCm51bGwhPVBbQltOLTFdXSl7WT1MKFBbQltOLTFdXSxCW04tMV0sRCk7dmFyIGFhPUooUFtCW04tMV1dLEJbTi0xXSxEKTtUPVR8fEcoWSxhYSl9VHx8bnVsbD09QltOKzFdfHxudWxsPT1QW0JbTisxXV18fChZPUwoUFtCW04rMV1dLEJbTisxXSxEKSxhYT1KKFBbQltOKzFdXSxCW04rMV0sRCksVD1UfHxHKFksYWEpKTtUJiZTLnB1c2goQltOXSl9cmV0dXJuIFN9O0YucHJvdG90eXBlLl9maWx0ZXJEb3duc2FtcGxpbmc9ZnVuY3Rpb24oRCxCKXtmdW5jdGlvbiBHKGthLGJhKXt2YXIgbGE9TChLW0Jba2FdXSxCW2thXSxEKSx3YT1KKEtbQltrYV1dLEJba2FdLEQpLENhPUwoS1tCW2thKzFdXSxCW2thKzFdLEQpO2thPUooS1tCW2thKzFdXSxCW2thKzFdLEQpO3JldHVybiBJbmZpbml0eT09PWJhP01hdGguZmxvb3IobGEpPT09TWF0aC5mbG9vcihDYSk6TWF0aC5mbG9vcihrYSk9PT1NYXRoLmZsb29yKHdhKyhDYS1sYSkqYmEpfWlmKDA9PT1CLmxlbmd0aClyZXR1cm5bXTtmb3IodmFyIEs9CkQuZGF0YSgpLEw9eS5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSksSj15LlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueSgpKSxQPVtCWzBdXSxTPTA7UzxCLmxlbmd0aC0xOyl7dmFyIE49QltTXSxUPUwoS1tCW1NdXSxCW1NdLEQpLFk9SihLW0JbU11dLEJbU10sRCksYWE9TChLW0JbUysxXV0sQltTKzFdLEQpLGhhPUooS1tCW1MrMV1dLEJbUysxXSxEKTtoYT1NYXRoLmZsb29yKFQpPT09TWF0aC5mbG9vcihhYSk/SW5maW5pdHk6KGhhLVkpLyhhYS1UKTthYT1CW1NdO1k9SW5maW5pdHk9PT1oYT9ZOlQ7VD1hYTtmb3IodmFyIFg9WSxjYT0hMDtTPEIubGVuZ3RoLTEmJihjYXx8RyhTLGhhKSk7KXtTKys7Y2E9ITE7dmFyIGVhPUluZmluaXR5PT09aGE/SihLW0JbU11dLEJbU10sRCk6TChLW0JbU11dLEJbU10sRCk7ZWE+WCYmKFg9ZWEsVD1CW1NdKTtlYTxZJiYoWT1lYSxhYT1CW1NdKX1oYT1CW1NdO2FhIT09TiYmUC5wdXNoKGFhKTtUIT09YWEmJlQhPT1OJiZQLnB1c2goVCk7CmhhIT09TiYmaGEhPT1hYSYmaGEhPT1UJiZQLnB1c2goaGEpfXJldHVybiBQfTtGLnByb3RvdHlwZS5fZmlsdGVyRGVuc2VMaW5lcz1mdW5jdGlvbihELEIpe2lmKDA9PT1CLmxlbmd0aClyZXR1cm5bXTt2YXIgRz1ELmRhdGEoKSxLPXkuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy54KCkpLEw9eS5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkoKSk7cmV0dXJuIHRoaXMuX2J1Y2tldEJ5WChELEIsZnVuY3Rpb24oSil7cmV0dXJuIEsoR1tKXSxKLEQpfSxmdW5jdGlvbihKKXtyZXR1cm4gTChHW0pdLEosRCl9KX07Ri5wcm90b3R5cGUuX2J1Y2tldEJ5WD1mdW5jdGlvbihELEIsRyxLKXt2YXIgTD1bXTtEPUQuZGF0YSgpO2Zvcih2YXIgSj1udWxsLFA9MDtQPD1CLmxlbmd0aDsrK1Ape3ZhciBTPUJbUF07aWYobnVsbCE9RFtTXSl7dmFyIE49TWF0aC5mbG9vcihHKFMpKSxUPUsoUyk7bnVsbD09Sj9KPW5ldyB2LkJ1Y2tldChTLE4sVCk6Si5pc0luQnVja2V0KE4pP0ouYWRkVG9CdWNrZXQoVCwKUyk6KEwucHVzaC5hcHBseShMLEouZ2V0VW5pcXVlSW5kaWNlcygpKSxKPW5ldyB2LkJ1Y2tldChTLE4sVCkpfX1udWxsIT1KJiZMLnB1c2guYXBwbHkoTCxKLmdldFVuaXF1ZUluZGljZXMoKSk7cmV0dXJuIEx9O3JldHVybiBGfShmLlhZUGxvdCk7ZC5MaW5lPWZ9LGZ1bmN0aW9uKGMsZCxmKXt2YXIgZz10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8ZnVuY3Rpb24ocSxyKXtmdW5jdGlvbiB0KCl7dGhpcy5jb25zdHJ1Y3Rvcj1xfWZvcih2YXIgdiBpbiByKXIuaGFzT3duUHJvcGVydHkodikmJihxW3ZdPXJbdl0pO3EucHJvdG90eXBlPW51bGw9PT1yP09iamVjdC5jcmVhdGUocik6KHQucHJvdG90eXBlPXIucHJvdG90eXBlLG5ldyB0KX0sbD1mKDEpLGs9ZigyNiksbT1mKDApLHA9WzAsMV07Yz1mdW5jdGlvbihxKXtmdW5jdGlvbiByKCl7dmFyIHQ9cS5jYWxsKHRoaXMpfHx0aGlzO3QuX3JhbmdlPVswLDFdO3QuX2QzU2NhbGU9bC5zY2FsZUJhbmQoKTt0Ll9kM1NjYWxlLnJhbmdlKHApOwp0Ll9kM1RyYW5zZm9ybWF0aW9uU2NhbGU9bC5zY2FsZUxpbmVhcigpO3QuX2QzVHJhbnNmb3JtYXRpb25TY2FsZS5kb21haW4ocCk7dC5faW5uZXJQYWRkaW5nPXIuX2NvbnZlcnRUb1Bsb3R0YWJsZUlubmVyUGFkZGluZygpO3QuX291dGVyUGFkZGluZz1yLl9jb252ZXJ0VG9QbG90dGFibGVPdXRlclBhZGRpbmcoKTtyZXR1cm4gdH1nKHIscSk7ci5wcm90b3R5cGUuY2xvbmVXaXRob3V0UHJvdmlkZXJzPWZ1bmN0aW9uKCl7dmFyIHQ9KG5ldyByKS5kb21haW4odGhpcy5kb21haW4oKSkucmFuZ2UodGhpcy5yYW5nZSgpKS5pbm5lclBhZGRpbmcodGhpcy5pbm5lclBhZGRpbmcoKSkub3V0ZXJQYWRkaW5nKHRoaXMub3V0ZXJQYWRkaW5nKCkpO3QuX2QzVHJhbnNmb3JtYXRpb25TY2FsZS5kb21haW4odGhpcy5fZDNUcmFuc2Zvcm1hdGlvblNjYWxlLmRvbWFpbigpKTtyZXR1cm4gdH07ci5wcm90b3R5cGUuZXh0ZW50T2ZWYWx1ZXM9ZnVuY3Rpb24odCl7cmV0dXJuIG0uQXJyYXkudW5pcSh0KX07CnIucHJvdG90eXBlLl9nZXRFeHRlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gbS5BcnJheS51bmlxKHRoaXMuX2dldEFsbEluY2x1ZGVkVmFsdWVzKCkpfTtyLnByb3RvdHlwZS5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIHEucHJvdG90eXBlLmRvbWFpbi5jYWxsKHRoaXMsdCl9O3IucHJvdG90eXBlLmludmVydFJhbmdlPWZ1bmN0aW9uKCl7dmFyIHQsdj10aGlzO3ZvaWQgMD09PXQmJih0PXRoaXMucmFuZ2UoKSk7dmFyIEE9dGhpcy5fZDNTY2FsZS5iYW5kd2lkdGgoKSx5PXRoaXMuaW52ZXJ0ZWRUcmFuc2Zvcm1hdGlvbih0WzBdKSx4PXRoaXMuaW52ZXJ0ZWRUcmFuc2Zvcm1hdGlvbih0WzFdKTt0PXRoaXMuX2QzU2NhbGUuZG9tYWluKCk7dmFyIEM9dC5tYXAoZnVuY3Rpb24oRil7cmV0dXJuIHYuX2QzU2NhbGUoRikrQS8yfSk7eT1sLmJpc2VjdChDLHkpO3g9bC5iaXNlY3QoQyx4KTtyZXR1cm4gdC5zbGljZSh5LHgpfTtyLnByb3RvdHlwZS5yYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gcS5wcm90b3R5cGUucmFuZ2UuY2FsbCh0aGlzLAp0KX07ci5fY29udmVydFRvUGxvdHRhYmxlSW5uZXJQYWRkaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIDEvLjctMX07ci5fY29udmVydFRvUGxvdHRhYmxlT3V0ZXJQYWRkaW5nPWZ1bmN0aW9uKCl7cmV0dXJuLjUvLjd9O3IucHJvdG90eXBlLl9zZXRCYW5kcz1mdW5jdGlvbigpe3ZhciB0PTEtMS8oMSt0aGlzLmlubmVyUGFkZGluZygpKSx2PXRoaXMub3V0ZXJQYWRkaW5nKCkvKDErdGhpcy5pbm5lclBhZGRpbmcoKSk7dGhpcy5fZDNTY2FsZS5wYWRkaW5nSW5uZXIodCk7dGhpcy5fZDNTY2FsZS5wYWRkaW5nT3V0ZXIodil9O3IucHJvdG90eXBlLnJhbmdlQmFuZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZXNjYWxlQmFuZCh0aGlzLl9kM1NjYWxlLmJhbmR3aWR0aCgpKX07ci5wcm90b3R5cGUuc3RlcFdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Jlc2NhbGVCYW5kKHRoaXMuX2QzU2NhbGUuYmFuZHdpZHRoKCkqKDErdGhpcy5pbm5lclBhZGRpbmcoKSkpfTtyLnByb3RvdHlwZS50aWNrcz0KZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb21haW4oKX07ci5wcm90b3R5cGUuaW5uZXJQYWRkaW5nPWZ1bmN0aW9uKHQpe2lmKG51bGw9PXQpcmV0dXJuIHRoaXMuX2lubmVyUGFkZGluZzt0aGlzLl9pbm5lclBhZGRpbmc9dDt0aGlzLnJhbmdlKHRoaXMucmFuZ2UoKSk7dGhpcy5fZGlzcGF0Y2hVcGRhdGUoKTtyZXR1cm4gdGhpc307ci5wcm90b3R5cGUub3V0ZXJQYWRkaW5nPWZ1bmN0aW9uKHQpe2lmKG51bGw9PXQpcmV0dXJuIHRoaXMuX291dGVyUGFkZGluZzt0aGlzLl9vdXRlclBhZGRpbmc9dDt0aGlzLnJhbmdlKHRoaXMucmFuZ2UoKSk7dGhpcy5fZGlzcGF0Y2hVcGRhdGUoKTtyZXR1cm4gdGhpc307ci5wcm90b3R5cGUuc2NhbGU9ZnVuY3Rpb24odCl7dD10aGlzLl9kM1NjYWxlKHQpK3RoaXMuX2QzU2NhbGUuYmFuZHdpZHRoKCkvMjtyZXR1cm4gdGhpcy5fZDNUcmFuc2Zvcm1hdGlvblNjYWxlKHQpfTtyLnByb3RvdHlwZS56b29tPWZ1bmN0aW9uKHQsdil7dmFyIEE9dGhpczsKdGhpcy5fZDNUcmFuc2Zvcm1hdGlvblNjYWxlLmRvbWFpbih0aGlzLl9kM1RyYW5zZm9ybWF0aW9uU2NhbGUucmFuZ2UoKS5tYXAoZnVuY3Rpb24oeSl7cmV0dXJuIEEuX2QzVHJhbnNmb3JtYXRpb25TY2FsZS5pbnZlcnQoay56b29tT3V0KHksdCx2KSl9KSk7dGhpcy5fZGlzcGF0Y2hVcGRhdGUoKX07ci5wcm90b3R5cGUucGFuPWZ1bmN0aW9uKHQpe3ZhciB2PXRoaXM7dGhpcy5fZDNUcmFuc2Zvcm1hdGlvblNjYWxlLmRvbWFpbih0aGlzLl9kM1RyYW5zZm9ybWF0aW9uU2NhbGUucmFuZ2UoKS5tYXAoZnVuY3Rpb24oQSl7cmV0dXJuIHYuX2QzVHJhbnNmb3JtYXRpb25TY2FsZS5pbnZlcnQoQSt0KX0pKTt0aGlzLl9kaXNwYXRjaFVwZGF0ZSgpfTtyLnByb3RvdHlwZS5zY2FsZVRyYW5zZm9ybWF0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9kM1RyYW5zZm9ybWF0aW9uU2NhbGUodCl9O3IucHJvdG90eXBlLmludmVydGVkVHJhbnNmb3JtYXRpb249ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2QzVHJhbnNmb3JtYXRpb25TY2FsZS5pbnZlcnQodCl9OwpyLnByb3RvdHlwZS5nZXRUcmFuc2Zvcm1hdGlvbkV4dGVudD1mdW5jdGlvbigpe3JldHVybiBwfTtyLnByb3RvdHlwZS5nZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kM1RyYW5zZm9ybWF0aW9uU2NhbGUuZG9tYWluKCl9O3IucHJvdG90eXBlLnNldFRyYW5zZm9ybWF0aW9uRG9tYWluPWZ1bmN0aW9uKHQpe3RoaXMuX2QzVHJhbnNmb3JtYXRpb25TY2FsZS5kb21haW4odCk7dGhpcy5fZGlzcGF0Y2hVcGRhdGUoKX07ci5wcm90b3R5cGUuX2dldERvbWFpbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9iYWNraW5nU2NhbGVEb21haW4oKX07ci5wcm90b3R5cGUuX2JhY2tpbmdTY2FsZURvbWFpbj1mdW5jdGlvbih0KXtpZihudWxsPT10KXJldHVybiB0aGlzLl9kM1NjYWxlLmRvbWFpbigpO3RoaXMuX2QzU2NhbGUuZG9tYWluKHQpO3RoaXMuX3NldEJhbmRzKCk7cmV0dXJuIHRoaXN9O3IucHJvdG90eXBlLl9nZXRSYW5nZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yYW5nZX07CnIucHJvdG90eXBlLl9zZXRSYW5nZT1mdW5jdGlvbih0KXt0aGlzLl9yYW5nZT10O3RoaXMuX2QzVHJhbnNmb3JtYXRpb25TY2FsZS5yYW5nZSh0KTt0aGlzLl9zZXRCYW5kcygpfTtyLnByb3RvdHlwZS5fcmVzY2FsZUJhbmQ9ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguYWJzKHRoaXMuX2QzVHJhbnNmb3JtYXRpb25TY2FsZSh0KS10aGlzLl9kM1RyYW5zZm9ybWF0aW9uU2NhbGUoMCkpfTtyZXR1cm4gcn0oZigxNykuU2NhbGUpO2QuQ2F0ZWdvcnk9Y30sZnVuY3Rpb24oYyxkLGYpe2Z1bmN0aW9uIGcoeCl7dHJ5e3ZhciBDPXgubm9kZSgpLmdldEJCb3goKX1jYXRjaChGKXtDPXt4OjAseTowLHdpZHRoOjAsaGVpZ2h0OjB9fXJldHVybiBDfWZ1bmN0aW9uIGwoeCl7aWYoIm51bWJlciI9PT10eXBlb2YgeClyZXR1cm57bWluOngsbWF4Onh9O2lmKHggaW5zdGFuY2VvZiBPYmplY3QmJiJtaW4iaW4geCYmIm1heCJpbiB4KXJldHVybiB4O3Rocm93IEVycm9yKCJpbnB1dCAnIit4KyInIGNhbid0IGJlIHBhcnNlZCBhcyBhbiBSYW5nZSIpOwp9ZnVuY3Rpb24gayh4LEMpe3g9eC5nZXRQcm9wZXJ0eVZhbHVlKEMpO3JldHVybiBwYXJzZUZsb2F0KHgpfHwwfWZ1bmN0aW9uIG0oeCl7aWYobnVsbD09eHx8Im5vbmUiPT09eClyZXR1cm4gbnVsbDt4PXgubWF0Y2goQSk7aWYobnVsbD09eHx8Mj54Lmxlbmd0aClyZXR1cm4gbnVsbDt4PXhbMV0uc3BsaXQoeSkubWFwKGZ1bmN0aW9uKEMpe3JldHVybiBwYXJzZUZsb2F0KEMpfSk7cmV0dXJuIDYhPXgubGVuZ3RoP251bGw6eH12YXIgcD1mKDEpLHE9TWF0aDtkLmNvbnRhaW5zPWZ1bmN0aW9uKHgsQyl7Zm9yKDtudWxsIT1DJiZDIT09eDspQz1DLnBhcmVudE5vZGU7cmV0dXJuIEM9PT14fTtkLmVsZW1lbnRCQm94PWc7ZC5lbnRpdHlCb3VuZHM9ZnVuY3Rpb24oeCl7cmV0dXJuIHggaW5zdGFuY2VvZiBTVkdFbGVtZW50P2cocC5zZWxlY3QoeCkpOnggaW5zdGFuY2VvZiBIVE1MRWxlbWVudD8oeD14LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHt4OngubGVmdCx5OngudG9wLHdpZHRoOngud2lkdGgsCmhlaWdodDp4LmhlaWdodH0pOnt4OjAseTowLHdpZHRoOjAsaGVpZ2h0OjB9fTtkLlNDUkVFTl9SRUZSRVNIX1JBVEVfTUlMTElTRUNPTkRTPTFFMy82MDtkLnJlcXVlc3RBbmltYXRpb25GcmFtZVBvbHlmaWxsPWZ1bmN0aW9uKHgpe251bGwhPXdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU/d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSh4KTpzZXRUaW1lb3V0KHgsZC5TQ1JFRU5fUkVGUkVTSF9SQVRFX01JTExJU0VDT05EUyl9O2QuZWxlbWVudFdpZHRoPWZ1bmN0aW9uKHgpe3g9eCBpbnN0YW5jZW9mIHAuc2VsZWN0aW9uP3gubm9kZSgpOng7eD13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh4KTtyZXR1cm4gayh4LCJ3aWR0aCIpK2soeCwicGFkZGluZy1sZWZ0Iikrayh4LCJwYWRkaW5nLXJpZ2h0Iikrayh4LCJib3JkZXItbGVmdC13aWR0aCIpK2soeCwiYm9yZGVyLXJpZ2h0LXdpZHRoIil9O2QuZWxlbWVudEhlaWdodD1mdW5jdGlvbih4KXt4PXggaW5zdGFuY2VvZiBwLnNlbGVjdGlvbj8KeC5ub2RlKCk6eDt4PXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHgpO3JldHVybiBrKHgsImhlaWdodCIpK2soeCwicGFkZGluZy10b3AiKStrKHgsInBhZGRpbmctYm90dG9tIikrayh4LCJib3JkZXItdG9wLXdpZHRoIikrayh4LCJib3JkZXItYm90dG9tLXdpZHRoIil9O3ZhciByPS90cmFuc2xhdGVccypcKFxzKigoPzpbLStdP1swLTldKlwuP1swLTldKykpKD86KD86KD86XHMrLD9ccyopfCg/OixccyopKSgoPzpbLStdP1swLTldKlwuP1swLTldKykpKT9ccypcKS8sdD0vcm90YXRlXHMqXChccyooKD86Wy0rXT9bMC05XSpcLj9bMC05XSspKVxzKlwpLyx2PS9zY2FsZVxzKlwoXHMqKCg/OlstK10/WzAtOV0qXC4/WzAtOV0rKSkoPzooPzooPzpccyssP1xzKil8KD86LFxzKikpKCg/OlstK10/WzAtOV0qXC4/WzAtOV0rKSkpP1xzKlwpLztkLmdldFRyYW5zbGF0ZVZhbHVlcz1mdW5jdGlvbih4KXt4PXIuZXhlYyh4LmF0dHIoInRyYW5zZm9ybSIpKTtpZihudWxsIT14KXt2YXIgQz0KeFsyXTtyZXR1cm5bK3hbMV0sKyh2b2lkIDA9PT1DPzA6QyldfXJldHVyblswLDBdfTtkLmdldFJvdGF0ZT1mdW5jdGlvbih4KXt4PXQuZXhlYyh4LmF0dHIoInRyYW5zZm9ybSIpKTtyZXR1cm4gbnVsbCE9eD8reFsxXTowfTtkLmdldFNjYWxlVmFsdWVzPWZ1bmN0aW9uKHgpe3ZhciBDPXYuZXhlYyh4LmF0dHIoInRyYW5zZm9ybSIpKTtyZXR1cm4gbnVsbCE9Qz8oeD1DWzFdLEM9Q1syXSxbK3gsbnVsbD09Qz8reDorQ10pOlswLDBdfTtkLmNsaWVudFJlY3RzT3ZlcmxhcD1mdW5jdGlvbih4LEMpe3JldHVybiBxLmZsb29yKHgucmlnaHQpPD1xLmNlaWwoQy5sZWZ0KXx8cS5jZWlsKHgubGVmdCk+PXEuZmxvb3IoQy5yaWdodCl8fHEuZmxvb3IoeC5ib3R0b20pPD1xLmNlaWwoQy50b3ApfHxxLmNlaWwoeC50b3ApPj1xLmZsb29yKEMuYm90dG9tKT8hMTohMH07ZC5leHBhbmRSZWN0PWZ1bmN0aW9uKHgsQyl7cmV0dXJue2xlZnQ6eC5sZWZ0LUMsdG9wOngudG9wLUMscmlnaHQ6eC5yaWdodCsKQyxib3R0b206eC5ib3R0b20rQyx3aWR0aDp4LndpZHRoKzIqQyxoZWlnaHQ6eC5oZWlnaHQrMipDfX07ZC5jbGllbnRSZWN0SW5zaWRlPWZ1bmN0aW9uKHgsQyl7cmV0dXJuIHEuZmxvb3IoQy5sZWZ0KTw9cS5jZWlsKHgubGVmdCkmJnEuZmxvb3IoQy50b3ApPD1xLmNlaWwoeC50b3ApJiZxLmZsb29yKHgucmlnaHQpPD1xLmNlaWwoQy5yaWdodCkmJnEuZmxvb3IoeC5ib3R0b20pPD1xLmNlaWwoQy5ib3R0b20pfTtkLmludGVyc2VjdHNCQm94PWZ1bmN0aW9uKHgsQyxGLEQpe3ZvaWQgMD09PUQmJihEPS41KTt4PWwoeCk7Qz1sKEMpO3JldHVybiBGLngrRi53aWR0aD49eC5taW4tRCYmRi54PD14Lm1heCtEJiZGLnkrRi5oZWlnaHQ+PUMubWluLUQmJkYueTw9Qy5tYXgrRH07ZC5nZXRIdG1sRWxlbWVudEFuY2VzdG9ycz1mdW5jdGlvbih4KXtmb3IodmFyIEM9W107eCYmeCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50OylDLnB1c2goeCkseD14LnBhcmVudEVsZW1lbnQ7cmV0dXJuIEN9OwpkLmdldEVsZW1lbnRUcmFuc2Zvcm09ZnVuY3Rpb24oeCl7eD13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh4LG51bGwpO3g9eC5nZXRQcm9wZXJ0eVZhbHVlKCItd2Via2l0LXRyYW5zZm9ybSIpfHx4LmdldFByb3BlcnR5VmFsdWUoIi1tb3otdHJhbnNmb3JtIil8fHguZ2V0UHJvcGVydHlWYWx1ZSgiLW1zLXRyYW5zZm9ybSIpfHx4LmdldFByb3BlcnR5VmFsdWUoIi1vLXRyYW5zZm9ybSIpfHx4LmdldFByb3BlcnR5VmFsdWUoInRyYW5zZm9ybSIpO3JldHVybiBtKHgpfTt2YXIgQT0vXm1hdHJpeFwoKFteKV0rKVwpJC8seT0vWywgXSsvfSxmdW5jdGlvbihjLGQsZil7ZnVuY3Rpb24gZyh0LHYpe3JldHVyblt0WzBdKnZbMF0rdFsyXSp2WzFdLHRbMV0qdlswXSt0WzNdKnZbMV0sdFswXSp2WzJdK3RbMl0qdlszXSx0WzFdKnZbMl0rdFszXSp2WzNdLHRbMF0qdls0XSt0WzJdKnZbNV0rdFs0XSx0WzFdKnZbNF0rdFszXSp2WzVdK3RbNV1dfWZ1bmN0aW9uIGwodCx2KXtyZXR1cm5bdFswXSwKdFsxXSx0WzJdLHRbM10sdFswXSp2WzBdK3RbMl0qdlsxXSt0WzRdLHRbMV0qdlswXSt0WzNdKnZbMV0rdFs1XV19ZnVuY3Rpb24gayh0KXt2YXIgdj10WzBdKnRbM10tdFsxXSp0WzJdO2lmKDA9PT12KXRocm93IEVycm9yKCJzaW5ndWxhciBtYXRyaXgiKTt2PTEvdjtyZXR1cm5bdip0WzNdLHYqLXRbMV0sdiotdFsyXSx2KnRbMF0sdiooLXRbM10qdFs0XSt0WzJdKnRbNV0pLHYqKHRbMV0qdFs0XSstdFswXSp0WzVdKV19dmFyIG09ZigxKSxwPWYoNTUpLHE9TWF0aCxyPVsxLDAsMCwxLDAsMF07ZC5pblJhbmdlPWZ1bmN0aW9uKHQsdixBKXtyZXR1cm4gcS5taW4odixBKTw9dCYmdDw9cS5tYXgodixBKX07ZC5jbGFtcD1mdW5jdGlvbih0LHYsQSl7cmV0dXJuIHEubWluKHEubWF4KHYsdCksQSl9O2QubWF4PWZ1bmN0aW9uKHQsdixBKXt2YXIgeT0iZnVuY3Rpb24iPT09dHlwZW9mIHY/djpudWxsO3Y9bnVsbD09eT92OkE7dD1udWxsPT15P20ubWF4KHQpOm0ubWF4KHQseSk7cmV0dXJuIHZvaWQgMCE9PQp0P3Q6dn07ZC5taW49ZnVuY3Rpb24odCx2LEEpe3ZhciB5PSJmdW5jdGlvbiI9PT10eXBlb2Ygdj92Om51bGw7dj1udWxsPT15P3Y6QTt0PW51bGw9PXk/bS5taW4odCk6bS5taW4odCx5KTtyZXR1cm4gdm9pZCAwIT09dD90OnZ9O2QuaXNOYU49ZnVuY3Rpb24odCl7cmV0dXJuIHQhPT10fTtkLmlzVmFsaWROdW1iZXI9ZnVuY3Rpb24odCl7cmV0dXJuIm51bWJlciI9PT10eXBlb2YgdCYmMT50LXR9O2QucmFuZ2U9ZnVuY3Rpb24odCx2LEEpe3ZvaWQgMD09PUEmJihBPTEpO2lmKDA9PT1BKXRocm93IEVycm9yKCJzdGVwIGNhbm5vdCBiZSAwIik7dj1xLm1heChxLmNlaWwoKHYtdCkvQSksMCk7Zm9yKHZhciB5PVtdLHg9MDt4PHY7Kyt4KXlbeF09dCtBKng7cmV0dXJuIHl9O2QuZGlzdGFuY2VTcXVhcmVkPWZ1bmN0aW9uKHQsdil7cmV0dXJuIHEucG93KHYueS10LnksMikrcS5wb3codi54LXQueCwyKX07ZC5kZWdyZWVzVG9SYWRpYW5zPWZ1bmN0aW9uKHQpe3JldHVybiB0LzM2MCoKcS5QSSoyfTtkLndpdGhpbj1mdW5jdGlvbih0LHYpe3JldHVybiB2LnRvcExlZnQueDw9dC54JiZ2LmJvdHRvbVJpZ2h0Lng+PXQueCYmdi50b3BMZWZ0Lnk8PXQueSYmdi5ib3R0b21SaWdodC55Pj10Lnl9O2QuYm91bmRzSW50ZXJzZWN0cz1mdW5jdGlvbih0LHYsQSx5LHgsQyl7cmV0dXJuIHQ8PTAreCYmMDw9dCtBJiZ2PD0wK0MmJjA8PXYreX07ZC5nZXRDdW11bGF0aXZlVHJhbnNmb3JtPWZ1bmN0aW9uKHQpe3Q9cC5nZXRIdG1sRWxlbWVudEFuY2VzdG9ycyh0KTtmb3IodmFyIHY9cixBPW51bGwseT0wO3k8dC5sZW5ndGg7eSsrKXt2YXIgeD10W3ldLEM9cC5nZXRFbGVtZW50VHJhbnNmb3JtKHgpO2lmKG51bGwhPUMpe3ZhciBGPXguY2xpZW50V2lkdGgvMixEPXguY2xpZW50SGVpZ2h0LzI7dj1sKHYsW0YsRF0pO3Y9Zyh2LGsoQykpO3Y9bCh2LFstRiwtRF0pfUM9eC5zY3JvbGxMZWZ0O0Y9eC5zY3JvbGxUb3A7aWYobnVsbD09PUF8fHg9PT1BKUMtPXgub2Zmc2V0TGVmdCt4LmNsaWVudExlZnQsCkYtPXgub2Zmc2V0VG9wK3guY2xpZW50VG9wLEE9eC5vZmZzZXRQYXJlbnQ7dj1sKHYsW0MsRl0pfXJldHVybiB2fTtkLm11bHRpcGx5TWF0cml4PWc7ZC5wcmVtdWx0aXBseVRyYW5zbGF0ZT1mdW5jdGlvbih0LHYpe3JldHVyblt2WzBdLHZbMV0sdlsyXSx2WzNdLHZbNF0rdFswXSx2WzVdK3RbMV1dfTtkLm11bHRpcGx5VHJhbnNsYXRlPWw7ZC5pbnZlcnRNYXRyaXg9aztkLmFwcGx5VHJhbnNmb3JtPWZ1bmN0aW9uKHQsdil7cmV0dXJue3g6dFswXSp2LngrdFsyXSp2LnkrdFs0XSx5OnRbMV0qdi54K3RbM10qdi55K3RbNV19fX0sZnVuY3Rpb24oYyxkLGYpe3ZhciBnPW5ldyAoZigxMTQpLlNwbGl0U3RyYXRlZ3lMaW5lYXIpO2M9ZnVuY3Rpb24oKXtmdW5jdGlvbiBtKHAscSl7dm9pZCAwPT09cCYmKHA9NSk7dm9pZCAwPT09cSYmKHE9Zyk7dGhpcy5tYXhOb2RlQ2hpbGRyZW49cDt0aGlzLnNwbGl0U3RyYXRlZ3k9cTt0aGlzLnJvb3Q9bmV3IGwoITApO3RoaXMuc2l6ZT0wfW0ucHJvdG90eXBlLmdldFJvb3Q9CmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucm9vdH07bS5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLnJvb3Q9bmV3IGwoITApO3RoaXMuc2l6ZT0wfTttLnByb3RvdHlwZS5pbnNlcnQ9ZnVuY3Rpb24ocCxxKXtmb3IodmFyIHI9dGhpcy5yb290OyFyLmxlYWY7KXI9ci5zdWJ0cmVlKHApO3A9bC52YWx1ZU5vZGUocCxxKTtyLmluc2VydChwKTtmb3IodGhpcy5zaXplKz0xO3Iub3ZlcmZsb3codGhpcy5tYXhOb2RlQ2hpbGRyZW4pOylyPXIuc3BsaXQodGhpcy5zcGxpdFN0cmF0ZWd5KSxudWxsPT1yLnBhcmVudCYmKHRoaXMucm9vdD1yKX07bS5wcm90b3R5cGUubG9jYXRlPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLnF1ZXJ5KGZ1bmN0aW9uKHEpe3JldHVybiBxLmNvbnRhaW5zKHApfSl9O20ucHJvdG90eXBlLmludGVyc2VjdD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5xdWVyeShmdW5jdGlvbihxKXtyZXR1cm4gay5pc0JvdW5kc092ZXJsYXBCb3VuZHMocSxwKX0pfTttLnByb3RvdHlwZS5pbnRlcnNlY3RYPQpmdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5xdWVyeShmdW5jdGlvbihxKXtyZXR1cm4gay5pc0JvdW5kc092ZXJsYXBYKHEscCl9KX07bS5wcm90b3R5cGUuaW50ZXJzZWN0WT1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5xdWVyeShmdW5jdGlvbihxKXtyZXR1cm4gay5pc0JvdW5kc092ZXJsYXBZKHEscCl9KX07bS5wcm90b3R5cGUucXVlcnk9ZnVuY3Rpb24ocCl7dmFyIHE9W107aWYobnVsbCE9dGhpcy5yb290LmJvdW5kcyYmIXAodGhpcy5yb290LmJvdW5kcykpcmV0dXJuIHE7Zm9yKHZhciByPVt0aGlzLnJvb3RdOzA8ci5sZW5ndGg7KWZvcih2YXIgdD1yLnNoaWZ0KCksdj0wO3Y8dC5lbnRyaWVzLmxlbmd0aDt2Kyspe3ZhciBBPXQuZW50cmllc1t2XTtwKEEuYm91bmRzKSYmKHQubGVhZj9xLnB1c2goQS52YWx1ZSk6ci5wdXNoKEEpKX1yZXR1cm4gcX07cmV0dXJuIG19KCk7ZC5SVHJlZT1jO3ZhciBsPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbShwKXt0aGlzLmxlYWY9cDt0aGlzLmJvdW5kcz0KbnVsbDt0aGlzLmVudHJpZXM9W107dGhpcy52YWx1ZT10aGlzLnBhcmVudD1udWxsfW0udmFsdWVOb2RlPWZ1bmN0aW9uKHAscSl7dmFyIHI9bmV3IG0oITApO3IuYm91bmRzPXA7ci52YWx1ZT1xO3JldHVybiByfTttLnByb3RvdHlwZS5vdmVyZmxvdz1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5lbnRyaWVzLmxlbmd0aD5wfTttLnByb3RvdHlwZS5pbnNlcnQ9ZnVuY3Rpb24ocCl7dGhpcy5lbnRyaWVzLnB1c2gocCk7cC5wYXJlbnQ9dGhpcztmb3IodmFyIHE9dGhpcztudWxsIT1xOylxLmJvdW5kcz1rLnVuaW9uQWxsKFtxLmJvdW5kcyxwLmJvdW5kc10pLHE9cS5wYXJlbnR9O20ucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbihwKXtwPXRoaXMuZW50cmllcy5pbmRleE9mKHApO2lmKDA8PXApZm9yKHRoaXMuZW50cmllcy5zcGxpY2UocCwxKSxwPXRoaXM7bnVsbCE9cDspcC5ib3VuZHM9ay51bmlvbkFsbChwLmVudHJpZXMubWFwKGZ1bmN0aW9uKHEpe3JldHVybiBxLmJvdW5kc30pKSwKcD1wLnBhcmVudDtyZXR1cm4gdGhpc307bS5wcm90b3R5cGUuc3VidHJlZT1mdW5jdGlvbihwKXtmb3IodmFyIHE9bnVsbCxyPTA7cjx0aGlzLmVudHJpZXMubGVuZ3RoO3IrKyl7dmFyIHQ9dGhpcy5lbnRyaWVzW3JdLHY9dC51bmlvbkFyZWFEaWZmZXJlbmNlKHApO2lmKEluZmluaXR5PnZ8fEluZmluaXR5PT09diYmbnVsbCE9cSYmdC5lbnRyaWVzLmxlbmd0aDxxLmVudHJpZXMubGVuZ3RoKXE9dH1yZXR1cm4gcX07bS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24ocCl7bnVsbCE9dGhpcy5wYXJlbnQmJnRoaXMucGFyZW50LnJlbW92ZSh0aGlzKTt2YXIgcT1bbmV3IG0odGhpcy5sZWFmKSxuZXcgbSh0aGlzLmxlYWYpXTtwLnNwbGl0KHRoaXMuZW50cmllcyxxKTtwPW51bGwhPXRoaXMucGFyZW50P3RoaXMucGFyZW50Om5ldyBtKCExKTtwLmluc2VydChxWzBdKTtwLmluc2VydChxWzFdKTtyZXR1cm4gcH07bS5wcm90b3R5cGUudW5pb25BcmVhRGlmZmVyZW5jZT1mdW5jdGlvbihwKXtyZXR1cm4gTWF0aC5hYnMoay51bmlvbih0aGlzLmJvdW5kcywKcCkuYXJlYSgpLXRoaXMuYm91bmRzLmFyZWEoKSl9O20ucHJvdG90eXBlLm1heERlcHRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGVhZj8xOjErdGhpcy5lbnRyaWVzLm1hcChmdW5jdGlvbihwKXtyZXR1cm4gcC5tYXhEZXB0aCgpfSkucmVkdWNlKGZ1bmN0aW9uKHAscSl7cmV0dXJuIE1hdGgubWF4KHAscSl9KX07cmV0dXJuIG19KCk7ZC5SVHJlZU5vZGU9bDt2YXIgaz1mdW5jdGlvbigpe2Z1bmN0aW9uIG0ocCxxLHIsdCl7dGhpcy54bD1wO3RoaXMueWw9cTt0aGlzLnhoPXI7dGhpcy55aD10O3RoaXMud2lkdGg9dGhpcy54aC10aGlzLnhsO3RoaXMuaGVpZ2h0PXRoaXMueWgtdGhpcy55bH1tLnh5d2g9ZnVuY3Rpb24ocCxxLHIsdCl7cmV0dXJuIG5ldyBtKHAscSxwK3IscSt0KX07bS5lbnRpdHlCb3VuZHM9ZnVuY3Rpb24ocCl7cmV0dXJuIG5ldyBtKHAueCxwLnkscC54K3Aud2lkdGgscC55K3AuaGVpZ2h0KX07bS5ib3VuZHM9ZnVuY3Rpb24ocCl7cmV0dXJuIG0ucG9pbnRQYWlyKHAudG9wTGVmdCwKcC5ib3R0b21SaWdodCl9O20ucG9pbnRQYWlyPWZ1bmN0aW9uKHAscSl7cmV0dXJuIG5ldyBtKE1hdGgubWluKHAueCxxLngpLE1hdGgubWluKHAueSxxLnkpLE1hdGgubWF4KHAueCxxLngpLE1hdGgubWF4KHAueSxxLnkpKX07bS5wb2ludHM9ZnVuY3Rpb24ocCl7aWYoMj5wLmxlbmd0aCl0aHJvdyBFcnJvcigibmVlZCBhdCBsZWFzdCAyIHBvaW50cyB0byBjcmVhdGUgYm91bmRzIik7dmFyIHE9cC5tYXAoZnVuY3Rpb24ocil7cmV0dXJuIHIueH0pO3A9cC5tYXAoZnVuY3Rpb24ocil7cmV0dXJuIHIueX0pO3JldHVybiBuZXcgbShxLnJlZHVjZShmdW5jdGlvbihyLHQpe3JldHVybiBNYXRoLm1pbihyLHQpfSkscC5yZWR1Y2UoZnVuY3Rpb24ocix0KXtyZXR1cm4gTWF0aC5taW4ocix0KX0pLHEucmVkdWNlKGZ1bmN0aW9uKHIsdCl7cmV0dXJuIE1hdGgubWF4KHIsdCl9KSxwLnJlZHVjZShmdW5jdGlvbihyLHQpe3JldHVybiBNYXRoLm1heChyLHQpfSkpfTttLnVuaW9uPWZ1bmN0aW9uKHAsCnEpe3JldHVybiBuZXcgbShNYXRoLm1pbihwLnhsLHEueGwpLE1hdGgubWluKHAueWwscS55bCksTWF0aC5tYXgocC54aCxxLnhoKSxNYXRoLm1heChwLnloLHEueWgpKX07bS51bmlvbkFsbD1mdW5jdGlvbihwKXtwPXAuZmlsdGVyKGZ1bmN0aW9uKHEpe3JldHVybiBudWxsIT1xfSk7cmV0dXJuIDA9PT1wLmxlbmd0aD9udWxsOnAucmVkdWNlKGZ1bmN0aW9uKHEscil7cmV0dXJuIG0udW5pb24ocSxyKX0pfTttLmlzQm91bmRzT3ZlcmxhcEJvdW5kcz1mdW5jdGlvbihwLHEpe3JldHVybiBtLmlzQm91bmRzT3ZlcmxhcFgocCxxKSYmbS5pc0JvdW5kc092ZXJsYXBZKHAscSl9O20uaXNCb3VuZHNPdmVybGFwWD1mdW5jdGlvbihwLHEpe3JldHVybiEocC54aDxxLnhsKSYmIShwLnhsPnEueGgpfTttLmlzQm91bmRzT3ZlcmxhcFk9ZnVuY3Rpb24ocCxxKXtyZXR1cm4hKHAueWg8cS55bCkmJiEocC55bD5xLnloKX07bS5wcm90b3R5cGUuYXJlYT1mdW5jdGlvbigpe251bGw9PXRoaXMuYXJlYUNhY2hlZCYmCih0aGlzLmFyZWFDYWNoZWQ9KHRoaXMueGgtdGhpcy54bCkqKHRoaXMueWgtdGhpcy55bCkpO3JldHVybiB0aGlzLmFyZWFDYWNoZWR9O20ucHJvdG90eXBlLmNvbnRhaW5zPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLnhsPD1wLngmJnRoaXMueGg+PXAueCYmdGhpcy55bDw9cC55JiZ0aGlzLnloPj1wLnl9O3JldHVybiBtfSgpO2QuUlRyZWVCb3VuZHM9a30sZnVuY3Rpb24oYyxkKXtjPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZigpeyJmdW5jdGlvbiI9PT10eXBlb2Ygd2luZG93LlNldD90aGlzLl9lczZTZXQ9bmV3IHdpbmRvdy5TZXQ6dGhpcy5fdmFsdWVzPVtdO3RoaXMuc2l6ZT0wfWYucHJvdG90eXBlLmFkZD1mdW5jdGlvbihnKXtpZihudWxsIT10aGlzLl9lczZTZXQpcmV0dXJuIHRoaXMuX2VzNlNldC5hZGQoZyksdGhpcy5zaXplPXRoaXMuX2VzNlNldC5zaXplLHRoaXM7dGhpcy5oYXMoZyl8fCh0aGlzLl92YWx1ZXMucHVzaChnKSx0aGlzLnNpemU9dGhpcy5fdmFsdWVzLmxlbmd0aCk7CnJldHVybiB0aGlzfTtmLnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24oZyl7aWYobnVsbCE9dGhpcy5fZXM2U2V0KXJldHVybiBnPXRoaXMuX2VzNlNldC5kZWxldGUoZyksdGhpcy5zaXplPXRoaXMuX2VzNlNldC5zaXplLGc7Zz10aGlzLl92YWx1ZXMuaW5kZXhPZihnKTtyZXR1cm4tMSE9PWc/KHRoaXMuX3ZhbHVlcy5zcGxpY2UoZywxKSx0aGlzLnNpemU9dGhpcy5fdmFsdWVzLmxlbmd0aCwhMCk6ITF9O2YucHJvdG90eXBlLmhhcz1mdW5jdGlvbihnKXtyZXR1cm4gbnVsbCE9dGhpcy5fZXM2U2V0P3RoaXMuX2VzNlNldC5oYXMoZyk6LTEhPT10aGlzLl92YWx1ZXMuaW5kZXhPZihnKX07Zi5wcm90b3R5cGUuZm9yRWFjaD1mdW5jdGlvbihnLGwpe3ZhciBrPXRoaXM7bnVsbCE9dGhpcy5fZXM2U2V0P3RoaXMuX2VzNlNldC5mb3JFYWNoKGZ1bmN0aW9uKG0scCl7cmV0dXJuIGcuY2FsbChsLG0scCxrKX0sbCk6dGhpcy5fdmFsdWVzLmZvckVhY2goZnVuY3Rpb24obSl7Zy5jYWxsKGwsCm0sbSxrKX0pfTtyZXR1cm4gZn0oKTtkLlNldD1jfSxmdW5jdGlvbihjLGQsZil7ZnVuY3Rpb24gZyhsKXtmb3IodmFyIGsgaW4gbClkLmhhc093blByb3BlcnR5KGspfHwoZFtrXT1sW2tdKX1nKGYoMTMxKSk7ZyhmKDEzMCkpfSxmdW5jdGlvbihjLGQsZil7dmFyIGc9dGhpcyYmdGhpcy5fX2V4dGVuZHN8fGZ1bmN0aW9uKGssbSl7ZnVuY3Rpb24gcCgpe3RoaXMuY29uc3RydWN0b3I9a31mb3IodmFyIHEgaW4gbSltLmhhc093blByb3BlcnR5KHEpJiYoa1txXT1tW3FdKTtrLnByb3RvdHlwZT1udWxsPT09bT9PYmplY3QuY3JlYXRlKG0pOihwLnByb3RvdHlwZT1tLnByb3RvdHlwZSxuZXcgcCl9LGw9ZigyMSk7Yz1mdW5jdGlvbihrKXtmdW5jdGlvbiBtKHAscSl7dmFyIHI9ay5jYWxsKHRoaXMscCxxKXx8dGhpcztyLmNhY2hlPW5ldyBsLkNhY2hlKGZ1bmN0aW9uKHQpe3JldHVybiByLl9tZWFzdXJlQ2hhcmFjdGVyTm90RnJvbUNhY2hlKHQpfSk7cmV0dXJuIHJ9ZyhtLGspO20ucHJvdG90eXBlLl9tZWFzdXJlQ2hhcmFjdGVyTm90RnJvbUNhY2hlPQpmdW5jdGlvbihwKXtyZXR1cm4gay5wcm90b3R5cGUuX21lYXN1cmVDaGFyYWN0ZXIuY2FsbCh0aGlzLHApfTttLnByb3RvdHlwZS5fbWVhc3VyZUNoYXJhY3Rlcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jYWNoZS5nZXQocCl9O20ucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7dGhpcy5jYWNoZS5jbGVhcigpfTtyZXR1cm4gbX0oZig2MSkuQ2hhcmFjdGVyTWVhc3VyZXIpO2QuQ2FjaGVDaGFyYWN0ZXJNZWFzdXJlcj1jfSxmdW5jdGlvbihjLGQsZil7dmFyIGc9dGhpcyYmdGhpcy5fX2V4dGVuZHN8fGZ1bmN0aW9uKGwsayl7ZnVuY3Rpb24gbSgpe3RoaXMuY29uc3RydWN0b3I9bH1mb3IodmFyIHAgaW4gaylrLmhhc093blByb3BlcnR5KHApJiYobFtwXT1rW3BdKTtsLnByb3RvdHlwZT1udWxsPT09az9PYmplY3QuY3JlYXRlKGspOihtLnByb3RvdHlwZT1rLnByb3RvdHlwZSxuZXcgbSl9O2M9ZnVuY3Rpb24obCl7ZnVuY3Rpb24gaygpe3JldHVybiBsLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8CnRoaXN9ZyhrLGwpO2sucHJvdG90eXBlLl9tZWFzdXJlQ2hhcmFjdGVyPWZ1bmN0aW9uKG0pe3JldHVybiBsLnByb3RvdHlwZS5fbWVhc3VyZUxpbmUuY2FsbCh0aGlzLG0pfTtrLnByb3RvdHlwZS5fbWVhc3VyZUxpbmU9ZnVuY3Rpb24obSl7dmFyIHA9dGhpczttPW0uc3BsaXQoIiIpLm1hcChmdW5jdGlvbihxKXtyZXR1cm4gcC5fbWVhc3VyZUNoYXJhY3RlcihxKX0pO3JldHVybntoZWlnaHQ6bS5yZWR1Y2UoZnVuY3Rpb24ocSxyKXtyZXR1cm4gTWF0aC5tYXgocSxyLmhlaWdodCl9LDApLHdpZHRoOm0ucmVkdWNlKGZ1bmN0aW9uKHEscil7cmV0dXJuIHErci53aWR0aH0sMCl9fTtyZXR1cm4ga30oZig2MykuTWVhc3VyZXIpO2QuQ2hhcmFjdGVyTWVhc3VyZXI9Y30sZnVuY3Rpb24oYyxkLGYpe2Z1bmN0aW9uIGcobCl7Zm9yKHZhciBrIGluIGwpZC5oYXNPd25Qcm9wZXJ0eShrKXx8KGRba109bFtrXSl9ZyhmKDM2KSk7ZyhmKDYwKSk7ZyhmKDEzMikpO2coZig2MSkpO2coZig2MykpfSwKZnVuY3Rpb24oYyxkLGYpe3ZhciBnPXRoaXMmJnRoaXMuX19leHRlbmRzfHxmdW5jdGlvbihrLG0pe2Z1bmN0aW9uIHAoKXt0aGlzLmNvbnN0cnVjdG9yPWt9Zm9yKHZhciBxIGluIG0pbS5oYXNPd25Qcm9wZXJ0eShxKSYmKGtbcV09bVtxXSk7ay5wcm90b3R5cGU9bnVsbD09PW0/T2JqZWN0LmNyZWF0ZShtKToocC5wcm90b3R5cGU9bS5wcm90b3R5cGUsbmV3IHApfSxsPWYoMzYpO2M9ZnVuY3Rpb24oayl7ZnVuY3Rpb24gbShwLHEpe3ZvaWQgMD09PXEmJihxPSExKTtwPWsuY2FsbCh0aGlzLHApfHx0aGlzO3AudXNlR3VhcmRzPXE7cmV0dXJuIHB9ZyhtLGspO20ucHJvdG90eXBlLl9hZGRHdWFyZHM9ZnVuY3Rpb24ocCl7cmV0dXJuIGwuQWJzdHJhY3RNZWFzdXJlci5IRUlHSFRfVEVYVCtwK2wuQWJzdHJhY3RNZWFzdXJlci5IRUlHSFRfVEVYVH07bS5wcm90b3R5cGUuX21lYXN1cmVMaW5lPWZ1bmN0aW9uKHApe3ZhciBxO3ZvaWQgMD09PXEmJihxPSExKTtxPXRoaXMudXNlR3VhcmRzfHwKcXx8L15bXHQgXSQvLnRlc3QocCk7cD1rLnByb3RvdHlwZS5tZWFzdXJlLmNhbGwodGhpcyxxP3RoaXMuX2FkZEd1YXJkcyhwKTpwKTtwLndpZHRoLT1xPzIqdGhpcy5nZXRHdWFyZFdpZHRoKCk6MDtyZXR1cm4gcH07bS5wcm90b3R5cGUubWVhc3VyZT1mdW5jdGlvbihwKXt2YXIgcT10aGlzO3ZvaWQgMD09PXAmJihwPWwuQWJzdHJhY3RNZWFzdXJlci5IRUlHSFRfVEVYVCk7aWYoIiI9PT1wLnRyaW0oKSlyZXR1cm57d2lkdGg6MCxoZWlnaHQ6MH07cD1wLnRyaW0oKS5zcGxpdCgiXG4iKS5tYXAoZnVuY3Rpb24ocil7cmV0dXJuIHEuX21lYXN1cmVMaW5lKHIpfSk7cmV0dXJue2hlaWdodDpwLnJlZHVjZShmdW5jdGlvbihyLHQpe3JldHVybiByK3QuaGVpZ2h0fSwwKSx3aWR0aDpwLnJlZHVjZShmdW5jdGlvbihyLHQpe3JldHVybiBNYXRoLm1heChyLHQud2lkdGgpfSwwKX19O20ucHJvdG90eXBlLmdldEd1YXJkV2lkdGg9ZnVuY3Rpb24oKXtudWxsPT10aGlzLmd1YXJkV2lkdGgmJgoodGhpcy5ndWFyZFdpZHRoPWsucHJvdG90eXBlLm1lYXN1cmUuY2FsbCh0aGlzKS53aWR0aCk7cmV0dXJuIHRoaXMuZ3VhcmRXaWR0aH07cmV0dXJuIG19KGwuQWJzdHJhY3RNZWFzdXJlcik7ZC5NZWFzdXJlcj1jfSxmdW5jdGlvbihjLGQsZil7ZnVuY3Rpb24gZyhsKXtmb3IodmFyIGsgaW4gbClkLmhhc093blByb3BlcnR5KGspfHwoZFtrXT1sW2tdKX1nKGYoMTM4KSk7ZyhmKDY1KSl9LGZ1bmN0aW9uKGMsZCxmKXt2YXIgZz1mKDIxKTtjPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbCgpe3RoaXMubWF4TGluZXMoSW5maW5pdHkpO3RoaXMudGV4dFRyaW1taW5nKCk7dGhpcy5hbGxvd0JyZWFraW5nV29yZHMoKTt0aGlzLl90b2tlbml6ZXI9bmV3IGcuVG9rZW5pemVyO3RoaXMuX2JyZWFraW5nQ2hhcmFjdGVyPSItIn1sLnByb3RvdHlwZS5tYXhMaW5lcz1mdW5jdGlvbihrKXtpZihudWxsPT1rKXJldHVybiB0aGlzLl9tYXhMaW5lczt0aGlzLl9tYXhMaW5lcz1rO3JldHVybiB0aGlzfTsKbC5wcm90b3R5cGUudGV4dFRyaW1taW5nPWZ1bmN0aW9uKCl7dGhpcy5fdGV4dFRyaW1taW5nPSJlbGxpcHNpcyJ9O2wucHJvdG90eXBlLmFsbG93QnJlYWtpbmdXb3Jkcz1mdW5jdGlvbigpe3RoaXMuX2FsbG93QnJlYWtpbmdXb3Jkcz0hMH07bC5wcm90b3R5cGUud3JhcD1mdW5jdGlvbihrLG0scCxxKXt2YXIgcj10aGlzO3ZvaWQgMD09PXEmJihxPUluZmluaXR5KTt2YXIgdD17bm9Ccm9rZVdvcmRzOjAsbm9MaW5lczowLG9yaWdpbmFsVGV4dDprLHRydW5jYXRlZFRleHQ6IiIsd3JhcHBlZFRleHQ6IiJ9O3A9e2F2YWlsYWJsZUxpbmVzOk1hdGgubWluKE1hdGguZmxvb3IocS9tLm1lYXN1cmUoKS5oZWlnaHQpLHRoaXMuX21heExpbmVzKSxhdmFpbGFibGVXaWR0aDpwLGNhbkZpdFRleHQ6ITAsY3VycmVudExpbmU6IiIsd3JhcHBpbmc6dH07dmFyIHY9ay5zcGxpdCgiXG4iKTtyZXR1cm4gdi5yZWR1Y2UoZnVuY3Rpb24oQSx5LHgpe3JldHVybiByLmJyZWFrTGluZVRvRml0V2lkdGgoQSwKeSx4IT09di5sZW5ndGgtMSxtKX0scCkud3JhcHBpbmd9O2wucHJvdG90eXBlLmJyZWFrTGluZVRvRml0V2lkdGg9ZnVuY3Rpb24oayxtLHAscSl7dmFyIHI9dGhpcztrLmNhbkZpdFRleHR8fCIiPT09ay53cmFwcGluZy50cnVuY2F0ZWRUZXh0fHwoay53cmFwcGluZy50cnVuY2F0ZWRUZXh0Kz0iXG4iKTtrPXRoaXMuX3Rva2VuaXplci50b2tlbml6ZShtKS5yZWR1Y2UoZnVuY3Rpb24odCx2KXtyZXR1cm4gci53cmFwTmV4dFRva2VuKHYsdCxxKX0sayk7bT1nLlN0cmluZ01ldGhvZHMudHJpbUVuZChrLmN1cnJlbnRMaW5lKTtrLndyYXBwaW5nLm5vTGluZXMrPSsoIiIhPT1tKTtrLndyYXBwaW5nLm5vTGluZXM9PT1rLmF2YWlsYWJsZUxpbmVzJiYibm9uZSIhPT10aGlzLl90ZXh0VHJpbW1pbmcmJnA/ay5jYW5GaXRUZXh0PSExOmsud3JhcHBpbmcud3JhcHBlZFRleHQrPW07ay5jdXJyZW50TGluZT0iXG4iO3JldHVybiBrfTtsLnByb3RvdHlwZS5jYW5GaXRUb2tlbj1mdW5jdGlvbihrLAptLHApe3ZhciBxPXRoaXMscj10aGlzLl9hbGxvd0JyZWFraW5nV29yZHM/ay5zcGxpdCgiIikubWFwKGZ1bmN0aW9uKHQsdil7cmV0dXJuIHYhPT1rLmxlbmd0aC0xP3QrcS5fYnJlYWtpbmdDaGFyYWN0ZXI6dH0pOltrXTtyZXR1cm4gcC5tZWFzdXJlKGspLndpZHRoPD1tfHxyLmV2ZXJ5KGZ1bmN0aW9uKHQpe3JldHVybiBwLm1lYXN1cmUodCkud2lkdGg8PW19KX07bC5wcm90b3R5cGUuYWRkRWxsaXBzaXM9ZnVuY3Rpb24oayxtLHApe2lmKCJub25lIj09PXRoaXMuX3RleHRUcmltbWluZylyZXR1cm57cmVtYWluaW5nVG9rZW46IiIsd3JhcHBlZFRva2VuOmt9O3ZhciBxPWsuc3Vic3RyaW5nKDApLnRyaW0oKSxyPXAubWVhc3VyZShxKS53aWR0aCx0PXAubWVhc3VyZSgiLi4uIikud2lkdGgsdj0wPGsubGVuZ3RoJiYiXG4iPT09a1swXT8iXG4iOiIiO2lmKG08PXQpcmV0dXJue3JlbWFpbmluZ1Rva2VuOmssd3JhcHBlZFRva2VuOnYrIi4uLiIuc3Vic3RyKDAsTWF0aC5mbG9vcihtLwoodC8zKSkpfTtmb3IoO3IrdD5tOylxPWcuU3RyaW5nTWV0aG9kcy50cmltRW5kKHEuc3Vic3RyKDAscS5sZW5ndGgtMSkpLHI9cC5tZWFzdXJlKHEpLndpZHRoO3JldHVybntyZW1haW5pbmdUb2tlbjpnLlN0cmluZ01ldGhvZHMudHJpbUVuZChrLnN1YnN0cmluZyhxLmxlbmd0aCksIi0iKS50cmltKCksd3JhcHBlZFRva2VuOnYrcSsiLi4uIn19O2wucHJvdG90eXBlLndyYXBOZXh0VG9rZW49ZnVuY3Rpb24oayxtLHApe2lmKCFtLmNhbkZpdFRleHR8fG0uYXZhaWxhYmxlTGluZXM9PT1tLndyYXBwaW5nLm5vTGluZXN8fCF0aGlzLmNhbkZpdFRva2VuKGssbS5hdmFpbGFibGVXaWR0aCxwKSlyZXR1cm4gdGhpcy5maW5pc2hXcmFwcGluZyhrLG0scCk7Zm9yKDtrOyl7dmFyIHE9dGhpcy5icmVha1Rva2VuVG9GaXRJbldpZHRoKGssbS5jdXJyZW50TGluZSxtLmF2YWlsYWJsZVdpZHRoLHApO20uY3VycmVudExpbmU9cS5saW5lO2s9cS5yZW1haW5pbmdUb2tlbjtpZihudWxsIT1rKWlmKG0ud3JhcHBpbmcubm9Ccm9rZVdvcmRzKz0KK3EuYnJlYWtXb3JkLCsrbS53cmFwcGluZy5ub0xpbmVzLG0uYXZhaWxhYmxlTGluZXM9PT1tLndyYXBwaW5nLm5vTGluZXMpe3A9dGhpcy5hZGRFbGxpcHNpcyhtLmN1cnJlbnRMaW5lLG0uYXZhaWxhYmxlV2lkdGgscCk7bS53cmFwcGluZy53cmFwcGVkVGV4dCs9cC53cmFwcGVkVG9rZW47bS53cmFwcGluZy50cnVuY2F0ZWRUZXh0Kz1wLnJlbWFpbmluZ1Rva2VuK2s7bS5jdXJyZW50TGluZT0iXG4iO2JyZWFrfWVsc2UgbS53cmFwcGluZy53cmFwcGVkVGV4dCs9Zy5TdHJpbmdNZXRob2RzLnRyaW1FbmQobS5jdXJyZW50TGluZSksbS5jdXJyZW50TGluZT0iXG4ifXJldHVybiBtfTtsLnByb3RvdHlwZS5maW5pc2hXcmFwcGluZz1mdW5jdGlvbihrLG0scCl7bS5jYW5GaXRUZXh0JiZtLmF2YWlsYWJsZUxpbmVzIT09bS53cmFwcGluZy5ub0xpbmVzJiZ0aGlzLl9hbGxvd0JyZWFraW5nV29yZHMmJiJub25lIiE9PXRoaXMuX3RleHRUcmltbWluZz8ocD10aGlzLmFkZEVsbGlwc2lzKG0uY3VycmVudExpbmUrCmssbS5hdmFpbGFibGVXaWR0aCxwKSxtLndyYXBwaW5nLndyYXBwZWRUZXh0Kz1wLndyYXBwZWRUb2tlbixtLndyYXBwaW5nLnRydW5jYXRlZFRleHQrPXAucmVtYWluaW5nVG9rZW4sbS53cmFwcGluZy5ub0Jyb2tlV29yZHMrPSsocC5yZW1haW5pbmdUb2tlbi5sZW5ndGg8ay5sZW5ndGgpLG0ud3JhcHBpbmcubm9MaW5lcys9KygwPHAud3JhcHBlZFRva2VuLmxlbmd0aCksbS5jdXJyZW50TGluZT0iIik6bS53cmFwcGluZy50cnVuY2F0ZWRUZXh0Kz1rO20uY2FuRml0VGV4dD0hMTtyZXR1cm4gbX07bC5wcm90b3R5cGUuYnJlYWtUb2tlblRvRml0SW5XaWR0aD1mdW5jdGlvbihrLG0scCxxKXtpZih2b2lkIDA9PT1yKXZhciByPXRoaXMuX2JyZWFraW5nQ2hhcmFjdGVyO2lmKHEubWVhc3VyZShtK2spLndpZHRoPD1wKXJldHVybnticmVha1dvcmQ6ITEsbGluZTptK2sscmVtYWluaW5nVG9rZW46bnVsbH07aWYoIiI9PT1rLnRyaW0oKSlyZXR1cm57YnJlYWtXb3JkOiExLGxpbmU6bSwKcmVtYWluaW5nVG9rZW46IiJ9O2lmKCF0aGlzLl9hbGxvd0JyZWFraW5nV29yZHMpcmV0dXJue2JyZWFrV29yZDohMSxsaW5lOm0scmVtYWluaW5nVG9rZW46a307Zm9yKHZhciB0PTA7dDxrLmxlbmd0aDspaWYocS5tZWFzdXJlKG0ray5zdWJzdHJpbmcoMCx0KzEpK3IpLndpZHRoPD1wKSsrdDtlbHNlIGJyZWFrO3A9IiI7MDx0JiYocD1yKTtyZXR1cm57YnJlYWtXb3JkOjA8dCxsaW5lOm0ray5zdWJzdHJpbmcoMCx0KStwLHJlbWFpbmluZ1Rva2VuOmsuc3Vic3RyaW5nKHQpfX07cmV0dXJuIGx9KCk7ZC5XcmFwcGVyPWN9LGZ1bmN0aW9uKGMsZCxmKXsoZnVuY3Rpb24oZyl7Zm9yKHZhciBsIGluIGcpZC5oYXNPd25Qcm9wZXJ0eShsKXx8KGRbbF09Z1tsXSl9KShmKDEzOSkpfSxmdW5jdGlvbihjLGQsZil7ZnVuY3Rpb24gZyhsKXtmb3IodmFyIGsgaW4gbClkLmhhc093blByb3BlcnR5KGspfHwoZFtrXT1sW2tdKX1nKGYoNzIpKTtnKGYoNzMpKTtnKGYoMjgpKX0sZnVuY3Rpb24oYywKZCl7ZC52ZXJzaW9uPSIzLjcuMCJ9LGZ1bmN0aW9uKGMsZCxmKXtmdW5jdGlvbiBnKHgsQyl7cmV0dXJuIHguZWFjaChmdW5jdGlvbigpe3ZhciBGPUMuYXBwbHkodGhpcyxhcmd1bWVudHMpLEQ9eS5zZWxlY3QodGhpcyksQjtmb3IoQiBpbiBGKUQuYXR0cihCLEZbQl0pfSl9ZnVuY3Rpb24gbCh4LEMpe2Zvcih2YXIgRiBpbiBDKXguYXR0cihGLENbRl0pO3JldHVybiB4fWZ1bmN0aW9uIGsoeCxDLEYpe3JldHVybiB4LmVhY2goZnVuY3Rpb24oKXt2YXIgRD1DLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxCPXkuc2VsZWN0KHRoaXMpLEc7Zm9yKEcgaW4gRClCLnN0eWxlKEcsRFtHXSxGKX0pfWZ1bmN0aW9uIG0oeCxDLEYpe2Zvcih2YXIgRCBpbiBDKXguc3R5bGUoRCxDW0RdLEYpO3JldHVybiB4fWZ1bmN0aW9uIHAoeCxDKXtyZXR1cm4geC5lYWNoKGZ1bmN0aW9uKCl7dmFyIEY9Qy5hcHBseSh0aGlzLGFyZ3VtZW50cyksRD15LnNlbGVjdCh0aGlzKSxCO2ZvcihCIGluIEYpRC5wcm9wZXJ0eShCLApGW0JdKX0pfWZ1bmN0aW9uIHEoeCxDKXtmb3IodmFyIEYgaW4gQyl4LnByb3BlcnR5KEYsQ1tGXSk7cmV0dXJuIHh9ZnVuY3Rpb24gcih4LEMpe3JldHVybiB4LmVhY2goZnVuY3Rpb24oKXt2YXIgRj1DLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxEPXkuc2VsZWN0KHRoaXMpLnRyYW5zaXRpb24oeCksQjtmb3IoQiBpbiBGKUQuYXR0cihCLEZbQl0pfSl9ZnVuY3Rpb24gdCh4LEMpe2Zvcih2YXIgRiBpbiBDKXguYXR0cihGLENbRl0pO3JldHVybiB4fWZ1bmN0aW9uIHYoeCxDLEYpe3JldHVybiB4LmVhY2goZnVuY3Rpb24oKXt2YXIgRD1DLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxCPXkuc2VsZWN0KHRoaXMpLnRyYW5zaXRpb24oeCksRztmb3IoRyBpbiBEKUIuc3R5bGUoRyxEW0ddLEYpfSl9ZnVuY3Rpb24gQSh4LEMsRil7Zm9yKHZhciBEIGluIEMpeC5zdHlsZShELENbRF0sRik7cmV0dXJuIHh9dmFyIHk9Yz1mKDEpO3kuc2VsZWN0aW9uLnByb3RvdHlwZS5hdHRycz1mdW5jdGlvbih4KXtyZXR1cm4oImZ1bmN0aW9uIj09PQp0eXBlb2YgeD9nOmwpKHRoaXMseCl9O3kuc2VsZWN0aW9uLnByb3RvdHlwZS5zdHlsZXM9ZnVuY3Rpb24oeCl7cmV0dXJuKCJmdW5jdGlvbiI9PT10eXBlb2YgeD9rOm0pKHRoaXMseCwiIil9O3kuc2VsZWN0aW9uLnByb3RvdHlwZS5wcm9wZXJ0aWVzPWZ1bmN0aW9uKHgpe3JldHVybigiZnVuY3Rpb24iPT09dHlwZW9mIHg/cDpxKSh0aGlzLHgpfTtjLnRyYW5zaXRpb24ucHJvdG90eXBlLmF0dHJzPWZ1bmN0aW9uKHgpe3JldHVybigiZnVuY3Rpb24iPT09dHlwZW9mIHg/cjp0KSh0aGlzLHgpfTtjLnRyYW5zaXRpb24ucHJvdG90eXBlLnN0eWxlcz1mdW5jdGlvbih4KXtyZXR1cm4oImZ1bmN0aW9uIj09PXR5cGVvZiB4P3Y6QSkodGhpcyx4LCIiKX19LGZ1bmN0aW9uKGMsZCxmKXtjPWYoMTE3KTt2YXIgZz1mKDEyKTtmPWYoMTApO3ZhciBsPXtsaW5lYXI6Yy5lYXNlTGluZWFyLHF1YWQ6Yy5lYXNlUXVhZCxxdWFkSW46Yy5lYXNlUXVhZEluLHF1YWRPdXQ6Yy5lYXNlUXVhZE91dCwKcXVhZEluT3V0OmMuZWFzZVF1YWRJbk91dCxjdWJpYzpjLmVhc2VDdWJpYyxjdWJpY0luOmMuZWFzZUN1YmljSW4sY3ViaWNPdXQ6Yy5lYXNlQ3ViaWNPdXQsY3ViaWNJbk91dDpjLmVhc2VDdWJpY0luT3V0LHBvbHk6Yy5lYXNlUG9seSxwb2x5SW46Yy5lYXNlUG9seUluLHBvbHlPdXQ6Yy5lYXNlUG9seU91dCxwb2x5SW5PdXQ6Yy5lYXNlUG9seUluT3V0LHNpbjpjLmVhc2VTaW4sc2luSW46Yy5lYXNlU2luSW4sc2luT3V0OmMuZWFzZVNpbk91dCxzaW5Jbk91dDpjLmVhc2VTaW5Jbk91dCxleHA6Yy5lYXNlRXhwLGV4cEluOmMuZWFzZUV4cEluLGV4cE91dDpjLmVhc2VFeHBPdXQsZXhwSW5PdXQ6Yy5lYXNlRXhwSW5PdXQsY2lyY2xlOmMuZWFzZUNpcmNsZSxjaXJjbGVJbjpjLmVhc2VDaXJjbGVJbixjaXJjbGVPdXQ6Yy5lYXNlQ2lyY2xlT3V0LGNpcmNsZUluT3V0OmMuZWFzZUNpcmNsZUluT3V0LGJvdW5jZTpjLmVhc2VCb3VuY2UsYm91bmNlSW46Yy5lYXNlQm91bmNlSW4sYm91bmNlT3V0OmMuZWFzZUJvdW5jZU91dCwKYm91bmNlSW5PdXQ6Yy5lYXNlQm91bmNlSW5PdXQsYmFjazpjLmVhc2VCYWNrLGJhY2tJbjpjLmVhc2VCYWNrSW4sYmFja091dDpjLmVhc2VCYWNrT3V0LGJhY2tJbk91dDpjLmVhc2VCYWNrSW5PdXQsZWxhc3RpYzpjLmVhc2VFbGFzdGljLGVsYXN0aWNJbjpjLmVhc2VFbGFzdGljSW4sZWxhc3RpY091dDpjLmVhc2VFbGFzdGljT3V0LGVsYXN0aWNJbk91dDpjLmVhc2VFbGFzdGljSW5PdXR9O2QuRWFzZU5hbWU9Zi5tYWtlRW51bSgibGluZWFyIHF1YWQgcXVhZEluIHF1YWRPdXQgcXVhZEluT3V0IGN1YmljIGN1YmljSW4gY3ViaWNPdXQgY3ViaWNJbk91dCBwb2x5IHBvbHlJbiBwb2x5T3V0IHBvbHlJbk91dCBzaW4gc2luSW4gc2luT3V0IHNpbkluT3V0IGV4cCBleHBJbiBleHBPdXQgZXhwSW5PdXQgY2lyY2xlIGNpcmNsZUluIGNpcmNsZU91dCBjaXJjbGVJbk91dCBib3VuY2UgYm91bmNlSW4gYm91bmNlT3V0IGJvdW5jZUluT3V0IGJhY2sgYmFja0luIGJhY2tPdXQgYmFja0luT3V0IGVsYXN0aWMgZWxhc3RpY0luIGVsYXN0aWNPdXQgZWxhc3RpY0luT3V0Ii5zcGxpdCgiICIpKTsKZj1mdW5jdGlvbigpe2Z1bmN0aW9uIGsoKXt0aGlzLl9zdGFydERlbGF5PWsuX0RFRkFVTFRfU1RBUlRfREVMQVlfTUlMTElTRUNPTkRTO3RoaXMuX3N0ZXBEdXJhdGlvbj1rLl9ERUZBVUxUX1NURVBfRFVSQVRJT05fTUlMTElTRUNPTkRTO3RoaXMuX3N0ZXBEZWxheT1rLl9ERUZBVUxUX0lURVJBVElWRV9ERUxBWV9NSUxMSVNFQ09ORFM7dGhpcy5fbWF4VG90YWxEdXJhdGlvbj1rLl9ERUZBVUxUX01BWF9UT1RBTF9EVVJBVElPTl9NSUxMSVNFQ09ORFM7dGhpcy5fZWFzaW5nTW9kZT1rLl9ERUZBVUxUX0VBU0lOR19NT0RFfWsucHJvdG90eXBlLnRvdGFsVGltZT1mdW5jdGlvbihtKXt2YXIgcD10aGlzLl9nZXRBZGp1c3RlZEl0ZXJhdGl2ZURlbGF5KG0pO3JldHVybiB0aGlzLnN0YXJ0RGVsYXkoKStwKk1hdGgubWF4KG0tMSwwKSt0aGlzLnN0ZXBEdXJhdGlvbigpfTtrLnByb3RvdHlwZS5hbmltYXRlPWZ1bmN0aW9uKG0scCl7dmFyIHE9dGhpczttPWcuY29lcmNlRXh0ZXJuYWxEMyhtKTsKdmFyIHI9bS5zaXplKCksdD10aGlzLl9nZXRBZGp1c3RlZEl0ZXJhdGl2ZURlbGF5KHIpO3JldHVybiBtLnRyYW5zaXRpb24oKS5lYXNlKHRoaXMuX2dldEVhc2VGYWN0b3J5KCkpLmR1cmF0aW9uKHRoaXMuc3RlcER1cmF0aW9uKCkpLmRlbGF5KGZ1bmN0aW9uKHYsQSl7cmV0dXJuIHEuc3RhcnREZWxheSgpK3QqQX0pLmF0dHJzKHApfTtrLnByb3RvdHlwZS5zdGFydERlbGF5PWZ1bmN0aW9uKG0pe2lmKG51bGw9PW0pcmV0dXJuIHRoaXMuX3N0YXJ0RGVsYXk7dGhpcy5fc3RhcnREZWxheT1tO3JldHVybiB0aGlzfTtrLnByb3RvdHlwZS5zdGVwRHVyYXRpb249ZnVuY3Rpb24obSl7aWYobnVsbD09bSlyZXR1cm4gTWF0aC5taW4odGhpcy5fc3RlcER1cmF0aW9uLHRoaXMuX21heFRvdGFsRHVyYXRpb24pO3RoaXMuX3N0ZXBEdXJhdGlvbj1tO3JldHVybiB0aGlzfTtrLnByb3RvdHlwZS5zdGVwRGVsYXk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RlcERlbGF5fTtrLnByb3RvdHlwZS5tYXhUb3RhbER1cmF0aW9uPQpmdW5jdGlvbihtKXtpZihudWxsPT1tKXJldHVybiB0aGlzLl9tYXhUb3RhbER1cmF0aW9uO3RoaXMuX21heFRvdGFsRHVyYXRpb249bTtyZXR1cm4gdGhpc307ay5wcm90b3R5cGUuZWFzaW5nTW9kZT1mdW5jdGlvbihtKXtpZihudWxsPT1tKXJldHVybiB0aGlzLl9lYXNpbmdNb2RlO3RoaXMuX2Vhc2luZ01vZGU9bTtyZXR1cm4gdGhpc307ay5wcm90b3R5cGUuX2dldEVhc2VGYWN0b3J5PWZ1bmN0aW9uKCl7dmFyIG09dGhpcy5lYXNpbmdNb2RlKCk7cmV0dXJuInN0cmluZyI9PT10eXBlb2YgbT8obT1sW21dLG51bGw9PW0/bC5saW5lYXI6bSk6bX07ay5wcm90b3R5cGUuX2dldEFkanVzdGVkSXRlcmF0aXZlRGVsYXk9ZnVuY3Rpb24obSl7dmFyIHA9dGhpcy5tYXhUb3RhbER1cmF0aW9uKCktdGhpcy5zdGVwRHVyYXRpb24oKTtwPU1hdGgubWF4KHAsMCk7bT1wL01hdGgubWF4KG0tMSwxKTtyZXR1cm4gTWF0aC5taW4odGhpcy5zdGVwRGVsYXkoKSxtKX07cmV0dXJuIGt9KCk7Zi5fREVGQVVMVF9TVEFSVF9ERUxBWV9NSUxMSVNFQ09ORFM9CjA7Zi5fREVGQVVMVF9TVEVQX0RVUkFUSU9OX01JTExJU0VDT05EUz0zMDA7Zi5fREVGQVVMVF9JVEVSQVRJVkVfREVMQVlfTUlMTElTRUNPTkRTPTE1O2YuX0RFRkFVTFRfTUFYX1RPVEFMX0RVUkFUSU9OX01JTExJU0VDT05EUz1JbmZpbml0eTtmLl9ERUZBVUxUX0VBU0lOR19NT0RFPSJleHBPdXQiO2QuRWFzaW5nPWZ9LGZ1bmN0aW9uKGMsZCxmKXt2YXIgZz1mKDEyKTtjPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbCgpe31sLnByb3RvdHlwZS50b3RhbFRpbWU9ZnVuY3Rpb24oKXtyZXR1cm4gMH07bC5wcm90b3R5cGUuYW5pbWF0ZT1mdW5jdGlvbihrLG0pe2s9Zy5jb2VyY2VFeHRlcm5hbEQzKGspO3JldHVybiBrLmF0dHJzKG0pfTtyZXR1cm4gbH0oKTtkLk51bGw9Y30sZnVuY3Rpb24oYyxkLGYpe3ZhciBnPXRoaXMmJnRoaXMuX19leHRlbmRzfHxmdW5jdGlvbihyLHQpe2Z1bmN0aW9uIHYoKXt0aGlzLmNvbnN0cnVjdG9yPXJ9Zm9yKHZhciBBIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShBKSYmCihyW0FdPXRbQV0pO3IucHJvdG90eXBlPW51bGw9PT10P09iamVjdC5jcmVhdGUodCk6KHYucHJvdG90eXBlPXQucHJvdG90eXBlLG5ldyB2KX0sbD1mKDEpLGs9Zig1KSxtPWYoNCkscD1mKDApLHE9ZigyMik7Yz1mdW5jdGlvbihyKXtmdW5jdGlvbiB0KHYsQSl7dm9pZCAwPT09QSYmKEE9ImJvdHRvbSIpO3Y9ci5jYWxsKHRoaXMsdixBKXx8dGhpczt2Ll90aWNrTGFiZWxBbmdsZT0wO3YuX3RpY2tMYWJlbFNoZWFyQW5nbGU9MDt2LmFkZENsYXNzKCJjYXRlZ29yeS1heGlzIik7cmV0dXJuIHZ9Zyh0LHIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiX3dyYXBwZXIiLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgdj1uZXcgay5XcmFwcGVyO251bGwhPXRoaXMuX3RpY2tMYWJlbE1heExpbmVzJiZ2Lm1heExpbmVzKHRoaXMuX3RpY2tMYWJlbE1heExpbmVzKTtyZXR1cm4gdn0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsCiJfd3JpdGVyIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBrLldyaXRlcih0aGlzLl9tZWFzdXJlcix0aGlzLl90eXBlc2V0dGVyQ29udGV4dCx0aGlzLl93cmFwcGVyKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KTt0LnByb3RvdHlwZS5fc2V0dXA9ZnVuY3Rpb24oKXtyLnByb3RvdHlwZS5fc2V0dXAuY2FsbCh0aGlzKTt0aGlzLl90eXBlc2V0dGVyQ29udGV4dD1uZXcgay5TdmdDb250ZXh0KHRoaXMuX3RpY2tMYWJlbENvbnRhaW5lci5ub2RlKCkpO3RoaXMuX21lYXN1cmVyPW5ldyBrLkNhY2hlTWVhc3VyZXIodGhpcy5fdHlwZXNldHRlckNvbnRleHQpfTt0LnByb3RvdHlwZS5fcmVzY2FsZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlZHJhdygpfTt0LnByb3RvdHlwZS5yZXF1ZXN0ZWRTcGFjZT1mdW5jdGlvbih2LEEpe3ZhciB5PXRoaXMuaXNIb3Jpem9udGFsKCk/MDp0aGlzLl90aWNrU3BhY2VSZXF1aXJlZCgpK3RoaXMubWFyZ2luKCkseD10aGlzLmlzSG9yaXpvbnRhbCgpPwp0aGlzLl90aWNrU3BhY2VSZXF1aXJlZCgpK3RoaXMubWFyZ2luKCk6MDtpZigwPT09dGhpcy5fc2NhbGUuZG9tYWluKCkubGVuZ3RoKXJldHVybnttaW5XaWR0aDowLG1pbkhlaWdodDowfTtpZih0aGlzLmFubm90YXRpb25zRW5hYmxlZCgpKXt2YXIgQz10aGlzLl9hbm5vdGF0aW9uVGllckhlaWdodCgpKnRoaXMuYW5ub3RhdGlvblRpZXJDb3VudCgpO3RoaXMuaXNIb3Jpem9udGFsKCk/eCs9Qzp5Kz1DfXY9dGhpcy5fbWVhc3VyZVRpY2tMYWJlbHModixBKTtyZXR1cm57bWluV2lkdGg6di51c2VkV2lkdGgreSxtaW5IZWlnaHQ6di51c2VkSGVpZ2h0K3h9fTt0LnByb3RvdHlwZS5fY29yZVNpemU9ZnVuY3Rpb24oKXt2YXIgdj10aGlzLmlzSG9yaXpvbnRhbCgpP3RoaXMuaGVpZ2h0KCk6dGhpcy53aWR0aCgpLEE9dGhpcy5pc0hvcml6b250YWwoKT90aGlzLnJlcXVlc3RlZFNwYWNlKHRoaXMud2lkdGgoKSx0aGlzLmhlaWdodCgpKS5taW5IZWlnaHQ6dGhpcy5yZXF1ZXN0ZWRTcGFjZSh0aGlzLndpZHRoKCksCnRoaXMuaGVpZ2h0KCkpLm1pbldpZHRoLHk9dGhpcy5tYXJnaW4oKSt0aGlzLl9hbm5vdGF0aW9uVGllckhlaWdodCgpO3JldHVybiBNYXRoLm1pbihBLXksdil9O3QucHJvdG90eXBlLl9nZXRUaWNrVmFsdWVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0RG93bnNhbXBsZUluZm8oKS5kb21haW59O3QucHJvdG90eXBlLl9zaXplRnJvbU9mZmVyPWZ1bmN0aW9uKHYsQSl7cmV0dXJuIG0uQ29tcG9uZW50LnByb3RvdHlwZS5fc2l6ZUZyb21PZmZlci5jYWxsKHRoaXMsdixBKX07dC5wcm90b3R5cGUuZ2V0RG93bnNhbXBsZUluZm89ZnVuY3Rpb24odil7dmFyIEE7dm9pZCAwPT09diYmKHY9dGhpcy5fc2NhbGUpO3ZvaWQgMD09PUEmJihBPXYuaW52ZXJ0UmFuZ2UoKSk7dmFyIHk9TWF0aC5jZWlsKHQuX01JTklNVU1fV0lEVEhfUEVSX0xBQkVMX1BYKigwPT09dGhpcy5fdGlja0xhYmVsQW5nbGU/MToxL01hdGguY29zKHRoaXMuX3RpY2tMYWJlbFNoZWFyQW5nbGUvMTgwKk1hdGguUEkpKS8Kdi5zdGVwV2lkdGgoKSk7cmV0dXJue2RvbWFpbjpBLmZpbHRlcihmdW5jdGlvbih4LEMpe3JldHVybiAwPT09QyV5fSksc3RlcFdpZHRoOnkqdi5zdGVwV2lkdGgoKX19O3QucHJvdG90eXBlLnRpY2tMYWJlbEFuZ2xlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RpY2tMYWJlbEFuZ2xlO3Rocm93IEVycm9yKCJBbmdsZSB1bmRlZmluZWQgbm90IHN1cHBvcnRlZDsgb25seSAwLCA5MCwgYW5kIC05MCBhcmUgdmFsaWQgdmFsdWVzIik7fTt0LnByb3RvdHlwZS50aWNrTGFiZWxTaGVhckFuZ2xlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RpY2tMYWJlbFNoZWFyQW5nbGV9O3QucHJvdG90eXBlLnRpY2tMYWJlbE1heFdpZHRoPWZ1bmN0aW9uKHYpe2lmKDA9PT1hcmd1bWVudHMubGVuZ3RoKXJldHVybiB0aGlzLl90aWNrTGFiZWxNYXhXaWR0aDt0aGlzLl90aWNrTGFiZWxNYXhXaWR0aD12O3RoaXMucmVkcmF3KCk7cmV0dXJuIHRoaXN9O3QucHJvdG90eXBlLnRpY2tMYWJlbE1heExpbmVzPQpmdW5jdGlvbih2KXtpZigwPT09YXJndW1lbnRzLmxlbmd0aClyZXR1cm4gdGhpcy5fdGlja0xhYmVsTWF4TGluZXM7dGhpcy5fdGlja0xhYmVsTWF4TGluZXM9djt0aGlzLnJlZHJhdygpO3JldHVybiB0aGlzfTt0LnByb3RvdHlwZS5fdGlja1NwYWNlUmVxdWlyZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWF4TGFiZWxUaWNrTGVuZ3RoKCkrdGhpcy50aWNrTGFiZWxQYWRkaW5nKCl9O3QucHJvdG90eXBlLl9kcmF3VGlja3M9ZnVuY3Rpb24odixBKXt2YXIgeT10aGlzO3N3aXRjaCh0aGlzLnRpY2tMYWJlbEFuZ2xlKCkpe2Nhc2UgMDp2YXIgeD17bGVmdDoicmlnaHQiLHJpZ2h0OiJsZWZ0Iix0b3A6ImNlbnRlciIsYm90dG9tOiJjZW50ZXIifTt2YXIgQz17bGVmdDoiY2VudGVyIixyaWdodDoiY2VudGVyIix0b3A6ImJvdHRvbSIsYm90dG9tOiJ0b3AifTticmVhaztjYXNlIDkwOng9e2xlZnQ6ImNlbnRlciIscmlnaHQ6ImNlbnRlciIsdG9wOiJyaWdodCIsYm90dG9tOiJsZWZ0In07CkM9e2xlZnQ6InRvcCIscmlnaHQ6ImJvdHRvbSIsdG9wOiJjZW50ZXIiLGJvdHRvbToiY2VudGVyIn07YnJlYWs7Y2FzZSAtOTA6eD17bGVmdDoiY2VudGVyIixyaWdodDoiY2VudGVyIix0b3A6ImxlZnQiLGJvdHRvbToicmlnaHQifSxDPXtsZWZ0OiJib3R0b20iLHJpZ2h0OiJ0b3AiLHRvcDoiY2VudGVyIixib3R0b206ImNlbnRlciJ9fUEuZWFjaChmdW5jdGlvbihGKXt2YXIgRD1sLnNlbGVjdCh0aGlzKSxCPXkuaXNIb3Jpem9udGFsKCk/djp5LndpZHRoKCkteS5fdGlja1NwYWNlUmVxdWlyZWQoKSxHPXkuaXNIb3Jpem9udGFsKCk/eS5oZWlnaHQoKS15Ll90aWNrU3BhY2VSZXF1aXJlZCgpOnYsSz17eEFsaWduOnhbeS5vcmllbnRhdGlvbigpXSx5QWxpZ246Q1t5Lm9yaWVudGF0aW9uKCldLHRleHRSb3RhdGlvbjp5LnRpY2tMYWJlbEFuZ2xlKCksdGV4dFNoZWFyOnkudGlja0xhYmVsU2hlYXJBbmdsZSgpfTtpZihudWxsIT15Ll90aWNrTGFiZWxNYXhXaWR0aCl7aWYoImxlZnQiPT09Cnkub3JpZW50YXRpb24oKSYmQj55Ll90aWNrTGFiZWxNYXhXaWR0aCl7dmFyIEw9Qi15Ll90aWNrTGFiZWxNYXhXaWR0aDtMPUQuYXR0cigidHJhbnNmb3JtIikrIiB0cmFuc2xhdGUoIitMKyIsIDApIjtELmF0dHIoInRyYW5zZm9ybSIsTCl9Qj1NYXRoLm1pbihCLHkuX3RpY2tMYWJlbE1heFdpZHRoKX15Ll93cml0ZXIud3JpdGUoeS5mb3JtYXR0ZXIoKShGKSxCLEcsSyxELm5vZGUoKSl9KX07dC5wcm90b3R5cGUuX21lYXN1cmVUaWNrTGFiZWxzPWZ1bmN0aW9uKHYsQSl7dmFyIHk9dGhpcyx4PXRoaXMuX3NjYWxlLmNsb25lV2l0aG91dFByb3ZpZGVycygpLnJhbmdlKFswLHRoaXMuaXNIb3Jpem9udGFsKCk/djpBXSksQz10aGlzLmdldERvd25zYW1wbGVJbmZvKHgpO3g9Qy5kb21haW47Qz1DLnN0ZXBXaWR0aDt2YXIgRj12LXRoaXMuX3RpY2tTcGFjZVJlcXVpcmVkKCk7dGhpcy5pc0hvcml6b250YWwoKSYmKEY9QywwIT09dGhpcy5fdGlja0xhYmVsQW5nbGUmJihGPUEtdGhpcy5fdGlja1NwYWNlUmVxdWlyZWQoKSksCkY9TWF0aC5tYXgoRiwwKSk7dmFyIEQ9Qzt0aGlzLmlzSG9yaXpvbnRhbCgpJiYoRD1BLXRoaXMuX3RpY2tTcGFjZVJlcXVpcmVkKCksMCE9PXRoaXMuX3RpY2tMYWJlbEFuZ2xlJiYoRD12LXRoaXMuX3RpY2tTcGFjZVJlcXVpcmVkKCkpLEQ9TWF0aC5tYXgoRCwwKSk7bnVsbCE9dGhpcy5fdGlja0xhYmVsTWF4V2lkdGgmJihGPU1hdGgubWluKEYsdGhpcy5fdGlja0xhYmVsTWF4V2lkdGgpKTtBPXgubWFwKGZ1bmN0aW9uKEIpe3JldHVybiB5Ll93cmFwcGVyLndyYXAoeS5mb3JtYXR0ZXIoKShCKSx5Ll9tZWFzdXJlcixGLEQpfSk7dj10aGlzLmlzSG9yaXpvbnRhbCgpJiYwPT09dGhpcy5fdGlja0xhYmVsQW5nbGU/bC5zdW06cC5NYXRoLm1heDt4PXRoaXMuaXNIb3Jpem9udGFsKCkmJjA9PT10aGlzLl90aWNrTGFiZWxBbmdsZT9wLk1hdGgubWF4Omwuc3VtO3Y9dihBLGZ1bmN0aW9uKEIpe3JldHVybiB5Ll9tZWFzdXJlci5tZWFzdXJlKEIud3JhcHBlZFRleHQpLndpZHRofSwwKTsKQT14KEEsZnVuY3Rpb24oQil7cmV0dXJuIHkuX21lYXN1cmVyLm1lYXN1cmUoQi53cmFwcGVkVGV4dCkuaGVpZ2h0fSwwKTswIT09dGhpcy5fdGlja0xhYmVsQW5nbGUmJihBPVtBLHZdLHY9QVswXSxBPUFbMV0pO3JldHVybnt1c2VkV2lkdGg6dix1c2VkSGVpZ2h0OkF9fTt0LnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseT1mdW5jdGlvbigpe3ZhciB2PXRoaXM7ci5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHkuY2FsbCh0aGlzKTt2YXIgQT10aGlzLl9zY2FsZSx5PXRoaXMuZ2V0RG93bnNhbXBsZUluZm8oQSkseD15LmRvbWFpbixDPXk9eS5zdGVwV2lkdGg7dGhpcy5pc0hvcml6b250YWwoKSYmbnVsbCE9dGhpcy5fdGlja0xhYmVsTWF4V2lkdGgmJihDPU1hdGgubWluKEMsdGhpcy5fdGlja0xhYmVsTWF4V2lkdGgpKTt4PXRoaXMuX3RpY2tMYWJlbENvbnRhaW5lci5zZWxlY3RBbGwoIi4iK3EuQXhpcy5USUNLX0xBQkVMX0NMQVNTKS5kYXRhKHgpO3ZhciBGPXguZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKHEuQXhpcy5USUNLX0xBQkVMX0NMQVNTLAohMCkubWVyZ2UoeCk7eC5leGl0KCkucmVtb3ZlKCk7Ri5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKEQpe3ZhciBCPUEuc2NhbGUoRCktQy8yO0Q9di5pc0hvcml6b250YWwoKT9COjA7Qj12LmlzSG9yaXpvbnRhbCgpPzA6QjtyZXR1cm4idHJhbnNsYXRlKCIrRCsiLCIrQisiKSJ9KTtGLnRleHQoIiIpO3RoaXMuX2RyYXdUaWNrcyh5LEYpO3k9InJpZ2h0Ij09PXRoaXMub3JpZW50YXRpb24oKT90aGlzLl90aWNrU3BhY2VSZXF1aXJlZCgpOjA7eD0iYm90dG9tIj09PXRoaXMub3JpZW50YXRpb24oKT90aGlzLl90aWNrU3BhY2VSZXF1aXJlZCgpOjA7dGhpcy5fdGlja0xhYmVsQ29udGFpbmVyLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3krIiwiK3grIikiKTt0aGlzLl9zaG93QWxsVGlja01hcmtzKCk7dGhpcy5fc2hvd0FsbFRpY2tMYWJlbHMoKTt0aGlzLl9oaWRlVGlja01hcmtzV2l0aG91dExhYmVsKCk7cmV0dXJuIHRoaXN9O3QucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQ9CmZ1bmN0aW9uKHYsQSx5KXtyLnByb3RvdHlwZS5jb21wdXRlTGF5b3V0LmNhbGwodGhpcyx2LEEseSk7dGhpcy5pc0hvcml6b250YWwoKXx8dGhpcy5fc2NhbGUucmFuZ2UoWzAsdGhpcy5oZWlnaHQoKV0pO3JldHVybiB0aGlzfTt0LnByb3RvdHlwZS5pbnZhbGlkYXRlQ2FjaGU9ZnVuY3Rpb24oKXtyLnByb3RvdHlwZS5pbnZhbGlkYXRlQ2FjaGUuY2FsbCh0aGlzKTt0aGlzLl9tZWFzdXJlci5yZXNldCgpfTtyZXR1cm4gdH0ocS5BeGlzKTtjLl9NSU5JTVVNX1dJRFRIX1BFUl9MQUJFTF9QWD0xNTtkLkNhdGVnb3J5PWN9LGZ1bmN0aW9uKGMsZCxmKXt2YXIgZz10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8ZnVuY3Rpb24ocix0KXtmdW5jdGlvbiB2KCl7dGhpcy5jb25zdHJ1Y3Rvcj1yfWZvcih2YXIgQSBpbiB0KXQuaGFzT3duUHJvcGVydHkoQSkmJihyW0FdPXRbQV0pO3IucHJvdG90eXBlPW51bGw9PT10P09iamVjdC5jcmVhdGUodCk6KHYucHJvdG90eXBlPXQucHJvdG90eXBlLG5ldyB2KX0sCmw9ZigxKSxrPWYoNSksbT1mKDgpLHA9ZigwKSxxPWYoMjIpO2M9ZnVuY3Rpb24ocil7ZnVuY3Rpb24gdCh2LEEpe3Y9ci5jYWxsKHRoaXMsdixBKXx8dGhpczt2Ll90aWNrTGFiZWxQb3NpdGlvbmluZz0iY2VudGVyIjt2Ll91c2VzVGV4dFdpZHRoQXBwcm94aW1hdGlvbj0hMTt2LmZvcm1hdHRlcihtLmdlbmVyYWwoKSk7cmV0dXJuIHZ9Zyh0LHIpO3QucHJvdG90eXBlLl9zZXR1cD1mdW5jdGlvbigpe3IucHJvdG90eXBlLl9zZXR1cC5jYWxsKHRoaXMpO3ZhciB2PW5ldyBrLlN2Z0NvbnRleHQodGhpcy5fdGlja0xhYmVsQ29udGFpbmVyLm5vZGUoKSxxLkF4aXMuVElDS19MQUJFTF9DTEFTUyk7dGhpcy5fbWVhc3VyZXI9bmV3IGsuQ2FjaGVNZWFzdXJlcih2KTt0aGlzLl93cmFwcGVyPShuZXcgay5XcmFwcGVyKS5tYXhMaW5lcygxKX07dC5wcm90b3R5cGUuX2NvbXB1dGVXaWR0aD1mdW5jdGlvbigpe3ZhciB2PXRoaXMuX3VzZXNUZXh0V2lkdGhBcHByb3hpbWF0aW9uP3RoaXMuX2NvbXB1dGVBcHByb3hpbWF0ZVRleHRXaWR0aCgpOgp0aGlzLl9jb21wdXRlRXhhY3RUZXh0V2lkdGgoKTtyZXR1cm4iY2VudGVyIj09PXRoaXMuX3RpY2tMYWJlbFBvc2l0aW9uaW5nP3RoaXMuX21heExhYmVsVGlja0xlbmd0aCgpK3RoaXMudGlja0xhYmVsUGFkZGluZygpK3Y6TWF0aC5tYXgodGhpcy5fbWF4TGFiZWxUaWNrTGVuZ3RoKCksdGhpcy50aWNrTGFiZWxQYWRkaW5nKCkrdil9O3QucHJvdG90eXBlLl9jb21wdXRlRXhhY3RUZXh0V2lkdGg9ZnVuY3Rpb24oKXt2YXIgdj10aGlzLEE9dGhpcy5fZ2V0VGlja1ZhbHVlcygpLm1hcChmdW5jdGlvbih5KXt5PXYuZm9ybWF0dGVyKCkoeSk7cmV0dXJuIHYuX21lYXN1cmVyLm1lYXN1cmUoeSkud2lkdGh9KTtyZXR1cm4gcC5NYXRoLm1heChBLDApfTt0LnByb3RvdHlwZS5fY29tcHV0ZUFwcHJveGltYXRlVGV4dFdpZHRoPWZ1bmN0aW9uKCl7dmFyIHY9dGhpcyxBPXRoaXMuX2dldFRpY2tWYWx1ZXMoKSx5PXRoaXMuX21lYXN1cmVyLm1lYXN1cmUoIk0iKS53aWR0aDtBPUEubWFwKGZ1bmN0aW9uKHgpe3JldHVybiB2LmZvcm1hdHRlcigpKHgpLmxlbmd0aCoKeX0pO3JldHVybiBwLk1hdGgubWF4KEEsMCl9O3QucHJvdG90eXBlLl9jb21wdXRlSGVpZ2h0PWZ1bmN0aW9uKCl7dmFyIHY9dGhpcy5fbWVhc3VyZXIubWVhc3VyZSgpLmhlaWdodDtyZXR1cm4iY2VudGVyIj09PXRoaXMuX3RpY2tMYWJlbFBvc2l0aW9uaW5nP3RoaXMuX21heExhYmVsVGlja0xlbmd0aCgpK3RoaXMudGlja0xhYmVsUGFkZGluZygpK3Y6TWF0aC5tYXgodGhpcy5fbWF4TGFiZWxUaWNrTGVuZ3RoKCksdGhpcy50aWNrTGFiZWxQYWRkaW5nKCkrdil9O3QucHJvdG90eXBlLl9nZXRUaWNrVmFsdWVzPWZ1bmN0aW9uKCl7dmFyIHY9dGhpcy5fc2NhbGUsQT12LmRvbWFpbigpLHk9QVswXTw9QVsxXT9BWzBdOkFbMV0seD1BWzBdPj1BWzFdP0FbMF06QVsxXTtyZXR1cm4gdi50aWNrcygpLmZpbHRlcihmdW5jdGlvbihDKXtyZXR1cm4gQz49eSYmQzw9eH0pfTt0LnByb3RvdHlwZS5fcmVzY2FsZT1mdW5jdGlvbigpe2lmKHRoaXMuX2lzU2V0dXApe2lmKCF0aGlzLmlzSG9yaXpvbnRhbCgpKXt2YXIgdj0KdGhpcy5fY29tcHV0ZVdpZHRoKCk7aWYodj50aGlzLndpZHRoKCl8fHY8dGhpcy53aWR0aCgpLXRoaXMubWFyZ2luKCkpe3RoaXMucmVkcmF3KCk7cmV0dXJufX10aGlzLnJlbmRlcigpfX07dC5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHk9ZnVuY3Rpb24oKXt2YXIgdj10aGlzO3IucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5LmNhbGwodGhpcyk7dmFyIEE9e3g6MCx5OjAsZHg6IjBlbSIsZHk6IjAuM2VtIn0seT10aGlzLl9tYXhMYWJlbFRpY2tMZW5ndGgoKSx4PXRoaXMudGlja0xhYmVsUGFkZGluZygpLEM9Im1pZGRsZSIsRj0wLEQ9MCxCPTAsRz0wO2lmKHRoaXMuaXNIb3Jpem9udGFsKCkpc3dpdGNoKHRoaXMuX3RpY2tMYWJlbFBvc2l0aW9uaW5nKXtjYXNlICJsZWZ0IjpDPSJlbmQiO0Y9LXg7Rz14O2JyZWFrO2Nhc2UgImNlbnRlciI6Rz15K3g7YnJlYWs7Y2FzZSAicmlnaHQiOkM9InN0YXJ0IixHPUY9eH1lbHNlIHN3aXRjaCh0aGlzLl90aWNrTGFiZWxQb3NpdGlvbmluZyl7Y2FzZSAidG9wIjpBLmR5PQoiLTAuM2VtIjtCPXg7RD0teDticmVhaztjYXNlICJjZW50ZXIiOkI9eSt4O2JyZWFrO2Nhc2UgImJvdHRvbSI6QS5keT0iMWVtIixEPUI9eH15PXRoaXMuX2dlbmVyYXRlVGlja01hcmtBdHRySGFzaCgpO3N3aXRjaCh0aGlzLm9yaWVudGF0aW9uKCkpe2Nhc2UgImJvdHRvbSI6QS54PXkueDE7QS5keT0iMC45NWVtIjtEPXkueTErRzticmVhaztjYXNlICJ0b3AiOkEueD15LngxO0EuZHk9Ii0uMjVlbSI7RD15LnkxLUc7YnJlYWs7Y2FzZSAibGVmdCI6Qz0iZW5kIjtGPXkueDEtQjtBLnk9eS55MTticmVhaztjYXNlICJyaWdodCI6Qz0ic3RhcnQiLEY9eS54MStCLEEueT15LnkxfUI9dGhpcy5fZ2V0VGlja1ZhbHVlcygpO0I9dGhpcy5fdGlja0xhYmVsQ29udGFpbmVyLnNlbGVjdEFsbCgiLiIrcS5BeGlzLlRJQ0tfTEFCRUxfQ0xBU1MpLmRhdGEoQik7Qi5leGl0KCkucmVtb3ZlKCk7Qi5lbnRlcigpLmFwcGVuZCgidGV4dCIpLmNsYXNzZWQocS5BeGlzLlRJQ0tfTEFCRUxfQ0xBU1MsCiEwKS5tZXJnZShCKS5zdHlsZSgidGV4dC1hbmNob3IiLEMpLnN0eWxlKCJ2aXNpYmlsaXR5IiwiaW5oZXJpdCIpLmF0dHJzKEEpLnRleHQoZnVuY3Rpb24oSyl7cmV0dXJuIHYuZm9ybWF0dGVyKCkoSyl9KTt0aGlzLl90aWNrTGFiZWxDb250YWluZXIuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrRisiLCAiK0QrIikiKTt0aGlzLl9zaG93QWxsVGlja01hcmtzKCk7dGhpcy5zaG93RW5kVGlja0xhYmVscygpfHx0aGlzLl9oaWRlRW5kVGlja0xhYmVscygpO3RoaXMuX2hpZGVPdmVyZmxvd2luZ1RpY2tMYWJlbHMoKTt0aGlzLl9oaWRlT3ZlcmxhcHBpbmdUaWNrTGFiZWxzKCk7ImNlbnRlciIhPT10aGlzLl90aWNrTGFiZWxQb3NpdGlvbmluZyYmdGhpcy5faGlkZVRpY2tNYXJrc1dpdGhvdXRMYWJlbCgpO3JldHVybiB0aGlzfTt0LnByb3RvdHlwZS50aWNrTGFiZWxQb3NpdGlvbj1mdW5jdGlvbih2KXtpZihudWxsPT12KXJldHVybiB0aGlzLl90aWNrTGFiZWxQb3NpdGlvbmluZzsKdj12LnRvTG93ZXJDYXNlKCk7aWYodGhpcy5pc0hvcml6b250YWwoKSl7aWYoImxlZnQiIT09diYmImNlbnRlciIhPT12JiYicmlnaHQiIT09dil0aHJvdyBFcnJvcih2KyIgaXMgbm90IGEgdmFsaWQgdGljayBsYWJlbCBwb3NpdGlvbiBmb3IgYSBob3Jpem9udGFsIE51bWVyaWNBeGlzIik7fWVsc2UgaWYoInRvcCIhPT12JiYiY2VudGVyIiE9PXYmJiJib3R0b20iIT09dil0aHJvdyBFcnJvcih2KyIgaXMgbm90IGEgdmFsaWQgdGljayBsYWJlbCBwb3NpdGlvbiBmb3IgYSB2ZXJ0aWNhbCBOdW1lcmljQXhpcyIpO3RoaXMuX3RpY2tMYWJlbFBvc2l0aW9uaW5nPXY7dGhpcy5yZWRyYXcoKTtyZXR1cm4gdGhpc307dC5wcm90b3R5cGUudXNlc1RleHRXaWR0aEFwcHJveGltYXRpb249ZnVuY3Rpb24oKXt0aGlzLl91c2VzVGV4dFdpZHRoQXBwcm94aW1hdGlvbj0hMH07dC5wcm90b3R5cGUuX2hpZGVFbmRUaWNrTGFiZWxzPWZ1bmN0aW9uKCl7dmFyIHY9dGhpcy5lbGVtZW50KCkubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLApBPXRoaXMuX3RpY2tMYWJlbENvbnRhaW5lci5zZWxlY3RBbGwoIi4iK3EuQXhpcy5USUNLX0xBQkVMX0NMQVNTKTtpZigwIT09QS5zaXplKCkpe3ZhciB5PUEubm9kZXMoKVswXTtwLkRPTS5jbGllbnRSZWN0SW5zaWRlKHkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksdil8fGwuc2VsZWN0KHkpLnN0eWxlKCJ2aXNpYmlsaXR5IiwiaGlkZGVuIik7QT1BLm5vZGVzKClbQS5zaXplKCktMV07cC5ET00uY2xpZW50UmVjdEluc2lkZShBLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHYpfHxsLnNlbGVjdChBKS5zdHlsZSgidmlzaWJpbGl0eSIsImhpZGRlbiIpfX07dC5wcm90b3R5cGUuX2hpZGVPdmVybGFwcGluZ1RpY2tMYWJlbHM9ZnVuY3Rpb24oKXtmb3IodmFyIHY9dGhpcy5fdGlja0xhYmVsQ29udGFpbmVyLnNlbGVjdEFsbCgiLiIrcS5BeGlzLlRJQ0tfTEFCRUxfQ0xBU1MpLmZpbHRlcihmdW5jdGlvbigpe3ZhciB4PWwuc2VsZWN0KHRoaXMpLnN0eWxlKCJ2aXNpYmlsaXR5Iik7cmV0dXJuImluaGVyaXQiPT09Cnh8fCJ2aXNpYmxlIj09PXh9KSxBPXYubm9kZXMoKS5tYXAoZnVuY3Rpb24oeCl7cmV0dXJuIHguZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCl9KSx5PTE7IXRoaXMuX2hhc092ZXJsYXBXaXRoSW50ZXJ2YWwoeSxBKSYmeTxBLmxlbmd0aDspeSs9MTt2LmVhY2goZnVuY3Rpb24oeCxDKXt4PWwuc2VsZWN0KHRoaXMpOzAhPT1DJXkmJnguc3R5bGUoInZpc2liaWxpdHkiLCJoaWRkZW4iKX0pfTt0LnByb3RvdHlwZS5faGFzT3ZlcmxhcFdpdGhJbnRlcnZhbD1mdW5jdGlvbih2LEEpe3ZhciB5PSJjZW50ZXIiPT09dGhpcy5fdGlja0xhYmVsUG9zaXRpb25pbmc/dGhpcy50aWNrTGFiZWxQYWRkaW5nKCk6Myp0aGlzLnRpY2tMYWJlbFBhZGRpbmcoKTtBPUEubWFwKGZ1bmN0aW9uKEMpe3JldHVybiBwLkRPTS5leHBhbmRSZWN0KEMseSl9KTtmb3IodmFyIHg9MDt4PEEubGVuZ3RoLXY7eCs9dilpZihwLkRPTS5jbGllbnRSZWN0c092ZXJsYXAoQVt4XSxBW3grdl0pKXJldHVybiExO3JldHVybiEwfTsKdC5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlPWZ1bmN0aW9uKCl7ci5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlLmNhbGwodGhpcyk7dGhpcy5fbWVhc3VyZXIucmVzZXQoKX07cmV0dXJuIHR9KHEuQXhpcyk7ZC5OdW1lcmljPWN9LGZ1bmN0aW9uKGMsZCxmKXt2YXIgZz10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8ZnVuY3Rpb24obSxwKXtmdW5jdGlvbiBxKCl7dGhpcy5jb25zdHJ1Y3Rvcj1tfWZvcih2YXIgciBpbiBwKXAuaGFzT3duUHJvcGVydHkocikmJihtW3JdPXBbcl0pO20ucHJvdG90eXBlPW51bGw9PT1wP09iamVjdC5jcmVhdGUocCk6KHEucHJvdG90eXBlPXAucHJvdG90eXBlLG5ldyBxKX07Yz1mKDQyKTt2YXIgbD1mKDI1KSxrPWYoMCk7Zj1mdW5jdGlvbihtKXtmdW5jdGlvbiBwKHEpe2Z1bmN0aW9uIHIoKXt4JiYoeD0hMSx5Ll9kcmFnRW5kQ2FsbGJhY2tzLmNhbGxDYWxsYmFja3MoeSkpfWZ1bmN0aW9uIHQoQyxGKXt4JiYoeS5fc2V0UGl4ZWxQb3NpdGlvbldpdGhvdXRDaGFuZ2luZ01vZGUoeS5faXNWZXJ0aWNhbCgpPwpGLng6Ri55KSx5Ll9kcmFnQ2FsbGJhY2tzLmNhbGxDYWxsYmFja3MoeSkpfWZ1bmN0aW9uIHYoQyl7QShDKSYmKHg9ITAseS5fZHJhZ1N0YXJ0Q2FsbGJhY2tzLmNhbGxDYWxsYmFja3MoeSkpfWZ1bmN0aW9uIEEoQyl7cmV0dXJuIHkuX2lzVmVydGljYWwoKSYmeS5waXhlbFBvc2l0aW9uKCkteS5kZXRlY3Rpb25SYWRpdXMoKTw9Qy54JiZDLng8PXkucGl4ZWxQb3NpdGlvbigpK3kuZGV0ZWN0aW9uUmFkaXVzKCl8fCF5Ll9pc1ZlcnRpY2FsKCkmJnkucGl4ZWxQb3NpdGlvbigpLXkuZGV0ZWN0aW9uUmFkaXVzKCk8PUMueSYmQy55PD15LnBpeGVsUG9zaXRpb24oKSt5LmRldGVjdGlvblJhZGl1cygpfXZhciB5PW0uY2FsbCh0aGlzLHEpfHx0aGlzO3kuX2RldGVjdGlvblJhZGl1cz0zO3kuX2VuYWJsZWQ9ITA7eS5hZGRDbGFzcygiZHJhZy1saW5lLWxheWVyIik7eS5hZGRDbGFzcygiZW5hYmxlZCIpO3kuX2RyYWdJbnRlcmFjdGlvbj1uZXcgbC5EcmFnO3kuX2RyYWdJbnRlcmFjdGlvbi5hdHRhY2hUbyh5KTsKdmFyIHg9ITE7eS5fZHJhZ0ludGVyYWN0aW9uLm9uRHJhZ1N0YXJ0KHYpO3kuX2RyYWdJbnRlcmFjdGlvbi5vbkRyYWcodCk7eS5fZHJhZ0ludGVyYWN0aW9uLm9uRHJhZ0VuZChyKTt5Ll9kaXNjb25uZWN0SW50ZXJhY3Rpb249ZnVuY3Rpb24oKXt5Ll9kcmFnSW50ZXJhY3Rpb24ub2ZmRHJhZ1N0YXJ0KHYpO3kuX2RyYWdJbnRlcmFjdGlvbi5vZmZEcmFnKHQpO3kuX2RyYWdJbnRlcmFjdGlvbi5vZmZEcmFnRW5kKHIpO3kuX2RyYWdJbnRlcmFjdGlvbi5kZXRhY2goKX07eS5fZHJhZ1N0YXJ0Q2FsbGJhY2tzPW5ldyBrLkNhbGxiYWNrU2V0O3kuX2RyYWdDYWxsYmFja3M9bmV3IGsuQ2FsbGJhY2tTZXQ7eS5fZHJhZ0VuZENhbGxiYWNrcz1uZXcgay5DYWxsYmFja1NldDtyZXR1cm4geX1nKHAsbSk7cC5wcm90b3R5cGUuX3NldHVwPWZ1bmN0aW9uKCl7bS5wcm90b3R5cGUuX3NldHVwLmNhbGwodGhpcyk7dGhpcy5fZGV0ZWN0aW9uRWRnZT10aGlzLmNvbnRlbnQoKS5hcHBlbmQoImxpbmUiKS5zdHlsZXMoe29wYWNpdHk6MCwKc3Ryb2tlOiJwaW5rIiwicG9pbnRlci1ldmVudHMiOiJ2aXNpYmxlU3Ryb2tlIn0pLmNsYXNzZWQoImRyYWctZWRnZSIsITApfTtwLnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseT1mdW5jdGlvbigpe20ucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5LmNhbGwodGhpcyk7dGhpcy5fZGV0ZWN0aW9uRWRnZS5hdHRycyh7eDE6dGhpcy5faXNWZXJ0aWNhbCgpP3RoaXMucGl4ZWxQb3NpdGlvbigpOjAseTE6dGhpcy5faXNWZXJ0aWNhbCgpPzA6dGhpcy5waXhlbFBvc2l0aW9uKCkseDI6dGhpcy5faXNWZXJ0aWNhbCgpP3RoaXMucGl4ZWxQb3NpdGlvbigpOnRoaXMud2lkdGgoKSx5Mjp0aGlzLl9pc1ZlcnRpY2FsKCk/dGhpcy5oZWlnaHQoKTp0aGlzLnBpeGVsUG9zaXRpb24oKSwic3Ryb2tlLXdpZHRoIjoyKnRoaXMuX2RldGVjdGlvblJhZGl1c30pO3JldHVybiB0aGlzfTtwLnByb3RvdHlwZS5kZXRlY3Rpb25SYWRpdXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGV0ZWN0aW9uUmFkaXVzfTsKcC5wcm90b3R5cGUuZW5hYmxlZD1mdW5jdGlvbihxKXtpZihudWxsPT1xKXJldHVybiB0aGlzLl9lbmFibGVkOyh0aGlzLl9lbmFibGVkPXEpP3RoaXMuYWRkQ2xhc3MoImVuYWJsZWQiKTp0aGlzLnJlbW92ZUNsYXNzKCJlbmFibGVkIik7dGhpcy5fZHJhZ0ludGVyYWN0aW9uLmVuYWJsZWQocSk7cmV0dXJuIHRoaXN9O3AucHJvdG90eXBlLm9uRHJhZ1N0YXJ0PWZ1bmN0aW9uKHEpe3RoaXMuX2RyYWdTdGFydENhbGxiYWNrcy5hZGQocSl9O3AucHJvdG90eXBlLm9mZkRyYWdTdGFydD1mdW5jdGlvbihxKXt0aGlzLl9kcmFnU3RhcnRDYWxsYmFja3MuZGVsZXRlKHEpfTtwLnByb3RvdHlwZS5vbkRyYWc9ZnVuY3Rpb24ocSl7dGhpcy5fZHJhZ0NhbGxiYWNrcy5hZGQocSk7cmV0dXJuIHRoaXN9O3AucHJvdG90eXBlLm9mZkRyYWc9ZnVuY3Rpb24ocSl7dGhpcy5fZHJhZ0NhbGxiYWNrcy5kZWxldGUocSl9O3AucHJvdG90eXBlLm9uRHJhZ0VuZD1mdW5jdGlvbihxKXt0aGlzLl9kcmFnRW5kQ2FsbGJhY2tzLmFkZChxKX07CnAucHJvdG90eXBlLm9mZkRyYWdFbmQ9ZnVuY3Rpb24ocSl7dGhpcy5fZHJhZ0VuZENhbGxiYWNrcy5kZWxldGUocSl9O3AucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt2YXIgcT10aGlzO20ucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTt0aGlzLl9kcmFnU3RhcnRDYWxsYmFja3MuZm9yRWFjaChmdW5jdGlvbihyKXtyZXR1cm4gcS5fZHJhZ1N0YXJ0Q2FsbGJhY2tzLmRlbGV0ZShyKX0pO3RoaXMuX2RyYWdDYWxsYmFja3MuZm9yRWFjaChmdW5jdGlvbihyKXtyZXR1cm4gcS5fZHJhZ0NhbGxiYWNrcy5kZWxldGUocil9KTt0aGlzLl9kcmFnRW5kQ2FsbGJhY2tzLmZvckVhY2goZnVuY3Rpb24ocil7cmV0dXJuIHEuX2RyYWdFbmRDYWxsYmFja3MuZGVsZXRlKHIpfSk7dGhpcy5fZGlzY29ubmVjdEludGVyYWN0aW9uKCl9O3JldHVybiBwfShjLkd1aWRlTGluZUxheWVyKTtkLkRyYWdMaW5lTGF5ZXI9Zn0sZnVuY3Rpb24oYyxkLGYpe2Z1bmN0aW9uIGcoayxtLHApe3ZhciBxPQp7fTtpZih2b2lkIDAhPT1wKWZvcih2YXIgcj0wO3I8cC5sZW5ndGg7cisrKXFbcFtyXV09cFtyLTFdO3JldHVybiBmdW5jdGlvbih0KXt2YXIgdj1rLnNjYWxlKHQpO2lmKCFtKXJldHVybiB2O3ZhciBBO3Q9dm9pZCAwPT09cVt0XT92b2lkIDA6ay5zY2FsZShxW3RdKTt2b2lkIDAhPT10JiYoQT10Kyh2LXQpLzIpO3JldHVybiBBfX12YXIgbD10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8ZnVuY3Rpb24oayxtKXtmdW5jdGlvbiBwKCl7dGhpcy5jb25zdHJ1Y3Rvcj1rfWZvcih2YXIgcSBpbiBtKW0uaGFzT3duUHJvcGVydHkocSkmJihrW3FdPW1bcV0pO2sucHJvdG90eXBlPW51bGw9PT1tP09iamVjdC5jcmVhdGUobSk6KHAucHJvdG90eXBlPW0ucHJvdG90eXBlLG5ldyBwKX07Yz1mdW5jdGlvbihrKXtmdW5jdGlvbiBtKHAscSl7dmFyIHI9ay5jYWxsKHRoaXMpfHx0aGlzO3IuYWRkQ2xhc3MoImdyaWRsaW5lcyIpO3IuX3hTY2FsZT1wO3IuX3lTY2FsZT1xO3IuX3JlbmRlckNhbGxiYWNrPQpmdW5jdGlvbigpe3JldHVybiByLnJlbmRlcigpfTtpZihyLl94U2NhbGUpci5feFNjYWxlLm9uVXBkYXRlKHIuX3JlbmRlckNhbGxiYWNrKTtpZihyLl95U2NhbGUpci5feVNjYWxlLm9uVXBkYXRlKHIuX3JlbmRlckNhbGxiYWNrKTtyZXR1cm4gcn1sKG0sayk7bS5wcm90b3R5cGUuYmV0d2Vlblg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYmV0d2Vlblh9O20ucHJvdG90eXBlLmJldHdlZW5ZPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2JldHdlZW5ZfTttLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7ay5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO3RoaXMuX3hTY2FsZSYmdGhpcy5feFNjYWxlLm9mZlVwZGF0ZSh0aGlzLl9yZW5kZXJDYWxsYmFjayk7dGhpcy5feVNjYWxlJiZ0aGlzLl95U2NhbGUub2ZmVXBkYXRlKHRoaXMuX3JlbmRlckNhbGxiYWNrKTtyZXR1cm4gdGhpc307bS5wcm90b3R5cGUuX3NldHVwPWZ1bmN0aW9uKCl7ay5wcm90b3R5cGUuX3NldHVwLmNhbGwodGhpcyk7CnRoaXMuX3hMaW5lc0NvbnRhaW5lcj10aGlzLmNvbnRlbnQoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJ4LWdyaWRsaW5lcyIsITApO3RoaXMuX3lMaW5lc0NvbnRhaW5lcj10aGlzLmNvbnRlbnQoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJ5LWdyaWRsaW5lcyIsITApfTttLnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseT1mdW5jdGlvbigpe2sucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5LmNhbGwodGhpcyk7dGhpcy5fcmVkcmF3WExpbmVzKCk7dGhpcy5fcmVkcmF3WUxpbmVzKCk7cmV0dXJuIHRoaXN9O20ucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQ9ZnVuY3Rpb24ocCxxLHIpe2sucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQuY2FsbCh0aGlzLHAscSxyKTtudWxsIT10aGlzLl94U2NhbGUmJnRoaXMuX3hTY2FsZS5yYW5nZShbMCx0aGlzLndpZHRoKCldKTtudWxsIT10aGlzLl95U2NhbGUmJnRoaXMuX3lTY2FsZS5yYW5nZShbdGhpcy5oZWlnaHQoKSwwXSk7cmV0dXJuIHRoaXN9OwptLnByb3RvdHlwZS5fcmVkcmF3WExpbmVzPWZ1bmN0aW9uKCl7aWYodGhpcy5feFNjYWxlKXt2YXIgcD10aGlzLmJldHdlZW5YKCkscT10aGlzLl94U2NhbGUudGlja3MoKS5zbGljZShwPzE6MCk7cT10aGlzLl94TGluZXNDb250YWluZXIuc2VsZWN0QWxsKCJsaW5lIikuZGF0YShxKTtxLmVudGVyKCkuYXBwZW5kKCJsaW5lIikubWVyZ2UocSkuYXR0cigieDEiLGcodGhpcy5feFNjYWxlLHAsdGhpcy5feFNjYWxlLnRpY2tzKCkpKS5hdHRyKCJ5MSIsMCkuYXR0cigieDIiLGcodGhpcy5feFNjYWxlLHAsdGhpcy5feFNjYWxlLnRpY2tzKCkpKS5hdHRyKCJ5MiIsdGhpcy5oZWlnaHQoKSkuY2xhc3NlZCgiYmV0d2VlbmxpbmUiLHApLmNsYXNzZWQoInplcm9saW5lIixmdW5jdGlvbihyKXtyZXR1cm4gMD09PXJ9KTtxLmV4aXQoKS5yZW1vdmUoKX19O20ucHJvdG90eXBlLl9yZWRyYXdZTGluZXM9ZnVuY3Rpb24oKXtpZih0aGlzLl95U2NhbGUpe3ZhciBwPXRoaXMuYmV0d2VlblkoKSwKcT10aGlzLl95U2NhbGUudGlja3MoKS5zbGljZShwPzE6MCk7cT10aGlzLl95TGluZXNDb250YWluZXIuc2VsZWN0QWxsKCJsaW5lIikuZGF0YShxKTtxLmVudGVyKCkuYXBwZW5kKCJsaW5lIikubWVyZ2UocSkuYXR0cigieDEiLDApLmF0dHIoInkxIixnKHRoaXMuX3lTY2FsZSxwLHRoaXMuX3lTY2FsZS50aWNrcygpKSkuYXR0cigieDIiLHRoaXMud2lkdGgoKSkuYXR0cigieTIiLGcodGhpcy5feVNjYWxlLHAsdGhpcy5feVNjYWxlLnRpY2tzKCkpKS5jbGFzc2VkKCJiZXR3ZWVubGluZSIscCkuY2xhc3NlZCgiemVyb2xpbmUiLGZ1bmN0aW9uKHIpe3JldHVybiAwPT09cn0pO3EuZXhpdCgpLnJlbW92ZSgpfX07cmV0dXJuIG19KGYoNCkuQ29tcG9uZW50KTtkLkdyaWRsaW5lcz1jfSxmdW5jdGlvbihjLGQsZil7dmFyIGc9dGhpcyYmdGhpcy5fX2V4dGVuZHN8fGZ1bmN0aW9uKHEscil7ZnVuY3Rpb24gdCgpe3RoaXMuY29uc3RydWN0b3I9cX1mb3IodmFyIHYgaW4gcilyLmhhc093blByb3BlcnR5KHYpJiYKKHFbdl09clt2XSk7cS5wcm90b3R5cGU9bnVsbD09PXI/T2JqZWN0LmNyZWF0ZShyKToodC5wcm90b3R5cGU9ci5wcm90b3R5cGUsbmV3IHQpfSxsPWYoNSksaz1mKDIzKSxtPWYoOCkscD1mKDApO2M9ZnVuY3Rpb24ocSl7ZnVuY3Rpb24gcih0KXt2YXIgdj1xLmNhbGwodGhpcyl8fHRoaXM7di5fdGV4dFBhZGRpbmc9NTtpZihudWxsPT10KXRocm93IEVycm9yKCJJbnRlcnBvbGF0ZWRDb2xvckxlZ2VuZCByZXF1aXJlcyBhIGludGVycG9sYXRlZENvbG9yU2NhbGUiKTt2Ll9zY2FsZT10O3YuX3JlZHJhd0NhbGxiYWNrPWZ1bmN0aW9uKCl7cmV0dXJuIHYucmVkcmF3KCl9O3YuX3NjYWxlLm9uVXBkYXRlKHYuX3JlZHJhd0NhbGxiYWNrKTt2Ll9mb3JtYXR0ZXI9bS5nZW5lcmFsKCk7di5fb3JpZW50YXRpb249Imhvcml6b250YWwiO3YuX2V4cGFuZHM9ITE7di5hZGRDbGFzcygibGVnZW5kIik7di5hZGRDbGFzcygiaW50ZXJwb2xhdGVkLWNvbG9yLWxlZ2VuZCIpO3JldHVybiB2fWcociwKcSk7ci5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3EucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTt0aGlzLl9zY2FsZS5vZmZVcGRhdGUodGhpcy5fcmVkcmF3Q2FsbGJhY2spfTtyLnByb3RvdHlwZS5mb3JtYXR0ZXI9ZnVuY3Rpb24odCl7aWYodm9pZCAwPT09dClyZXR1cm4gdGhpcy5fZm9ybWF0dGVyO3RoaXMuX2Zvcm1hdHRlcj10O3RoaXMucmVkcmF3KCk7cmV0dXJuIHRoaXN9O3IucHJvdG90eXBlLmV4cGFuZHM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZXhwYW5kc307ci5fZW5zdXJlT3JpZW50YXRpb249ZnVuY3Rpb24odCl7dD10LnRvTG93ZXJDYXNlKCk7aWYoImhvcml6b250YWwiPT09dHx8ImxlZnQiPT09dHx8InJpZ2h0Ij09PXQpcmV0dXJuIHQ7dGhyb3cgRXJyb3IoJyInK3QrJyIgaXMgbm90IGEgdmFsaWQgb3JpZW50YXRpb24gZm9yIEludGVycG9sYXRlZENvbG9yTGVnZW5kJyk7fTtyLnByb3RvdHlwZS5vcmllbnRhdGlvbj1mdW5jdGlvbih0KXtpZihudWxsPT0KdClyZXR1cm4gdGhpcy5fb3JpZW50YXRpb247dGhpcy5fb3JpZW50YXRpb249ci5fZW5zdXJlT3JpZW50YXRpb24odCk7dGhpcy5yZWRyYXcoKTtyZXR1cm4gdGhpc307ci5wcm90b3R5cGUuZml4ZWRXaWR0aD1mdW5jdGlvbigpe3JldHVybiF0aGlzLmV4cGFuZHMoKXx8dGhpcy5faXNWZXJ0aWNhbCgpfTtyLnByb3RvdHlwZS5maXhlZEhlaWdodD1mdW5jdGlvbigpe3JldHVybiF0aGlzLmV4cGFuZHMoKXx8IXRoaXMuX2lzVmVydGljYWwoKX07ci5wcm90b3R5cGUuX2dlbmVyYXRlVGlja3M9ZnVuY3Rpb24odCl7dm9pZCAwPT09dCYmKHQ9ci5fREVGQVVMVF9OVU1fU1dBVENIRVMpO3ZhciB2PXRoaXMuX3NjYWxlLmRvbWFpbigpO2lmKDE9PT10KXJldHVyblt2WzBdXTtmb3IodmFyIEE9KHZbMV0tdlswXSkvKHQtMSkseT1bXSx4PTA7eDx0O3grKyl5LnB1c2godlswXStBKngpO3JldHVybiB5fTtyLnByb3RvdHlwZS5fc2V0dXA9ZnVuY3Rpb24oKXtxLnByb3RvdHlwZS5fc2V0dXAuY2FsbCh0aGlzKTsKdGhpcy5fc3dhdGNoQ29udGFpbmVyPXRoaXMuY29udGVudCgpLmFwcGVuZCgiZyIpLmNsYXNzZWQoInN3YXRjaC1jb250YWluZXIiLCEwKTt0aGlzLl9zd2F0Y2hCb3VuZGluZ0JveD10aGlzLmNvbnRlbnQoKS5hcHBlbmQoInJlY3QiKS5jbGFzc2VkKCJzd2F0Y2gtYm91bmRpbmctYm94IiwhMCk7dGhpcy5fbG93ZXJMYWJlbD10aGlzLmNvbnRlbnQoKS5hcHBlbmQoImciKS5jbGFzc2VkKHIuTEVHRU5EX0xBQkVMX0NMQVNTLCEwKTt0aGlzLl91cHBlckxhYmVsPXRoaXMuY29udGVudCgpLmFwcGVuZCgiZyIpLmNsYXNzZWQoci5MRUdFTkRfTEFCRUxfQ0xBU1MsITApO3ZhciB0PW5ldyBsLlN2Z0NvbnRleHQodGhpcy5jb250ZW50KCkubm9kZSgpKTt0aGlzLl9tZWFzdXJlcj1uZXcgbC5NZWFzdXJlcih0KTt0aGlzLl93cmFwcGVyPW5ldyBsLldyYXBwZXI7dGhpcy5fd3JpdGVyPW5ldyBsLldyaXRlcih0aGlzLl9tZWFzdXJlcix0LHRoaXMuX3dyYXBwZXIpfTtyLnByb3RvdHlwZS5yZXF1ZXN0ZWRTcGFjZT0KZnVuY3Rpb24oKXt2YXIgdD10aGlzLHY9dGhpcy5fbWVhc3VyZXIubWVhc3VyZSgpLmhlaWdodCxBPXRoaXMuX3NjYWxlLmRvbWFpbigpLm1hcChmdW5jdGlvbihDKXtyZXR1cm4gdC5fbWVhc3VyZXIubWVhc3VyZSh0Ll9mb3JtYXR0ZXIoQykpLndpZHRofSkseT1yLl9ERUZBVUxUX05VTV9TV0FUQ0hFUztpZih0aGlzLl9pc1ZlcnRpY2FsKCkpe3ZhciB4PXAuTWF0aC5tYXgoQSwwKTtBPXYrdit0aGlzLl90ZXh0UGFkZGluZyt4K3RoaXMuX3RleHRQYWRkaW5nO3g9eSp2fWVsc2UgeD12K3YrdixBPXRoaXMuX3RleHRQYWRkaW5nK0FbMF0reSp2K0FbMV0rdGhpcy5fdGV4dFBhZGRpbmc7cmV0dXJue21pbldpZHRoOkEsbWluSGVpZ2h0Onh9fTtyLnByb3RvdHlwZS5faXNWZXJ0aWNhbD1mdW5jdGlvbigpe3JldHVybiJob3Jpem9udGFsIiE9PXRoaXMuX29yaWVudGF0aW9ufTtyLnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseT1mdW5jdGlvbigpe3ZhciB0PXRoaXM7cS5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHkuY2FsbCh0aGlzKTsKdmFyIHY9dGhpcy5fc2NhbGUuZG9tYWluKCksQT10aGlzLl9mb3JtYXR0ZXIodlswXSkseT10aGlzLl9tZWFzdXJlci5tZWFzdXJlKEEpLndpZHRoLHg9dGhpcy5fZm9ybWF0dGVyKHZbMV0pO3Y9dGhpcy5fbWVhc3VyZXIubWVhc3VyZSh4KS53aWR0aDt2YXIgQz10aGlzLl9tZWFzdXJlci5tZWFzdXJlKCkuaGVpZ2h0LEY9dGhpcy5fdGV4dFBhZGRpbmcsRD0wLEI9MCxHPTAsSz0wLEw9e3hBbGlnbjoiY2VudGVyIix5QWxpZ246ImNlbnRlciIsdGV4dFJvdGF0aW9uOjB9LEo9e3hBbGlnbjoiY2VudGVyIix5QWxpZ246ImNlbnRlciIsdGV4dFJvdGF0aW9uOjB9LFA9e3g6MCx5OjAsd2lkdGg6MCxoZWlnaHQ6MH07aWYodGhpcy5faXNWZXJ0aWNhbCgpKXt2YXIgUz1NYXRoLmZsb29yKHRoaXMuaGVpZ2h0KCkpO3ZhciBOPU1hdGgubWF4KHksdik7dmFyIFQ9KHRoaXMud2lkdGgoKS1OLTIqdGhpcy5fdGV4dFBhZGRpbmcpLzI7dj1NYXRoLm1heCh0aGlzLndpZHRoKCktVC0yKkYtTiwwKTsKQz0xO3ZhciBZPWZ1bmN0aW9uKGhhLFgpe3JldHVybiB0LmhlaWdodCgpLShYKzEpfTtKLnlBbGlnbj0idG9wIjtCPTA7TC55QWxpZ249ImJvdHRvbSI7Sz0wO2lmKCJsZWZ0Ij09PXRoaXMuX29yaWVudGF0aW9uKXt2YXIgYWE9ZnVuY3Rpb24oKXtyZXR1cm4gRitOK0Z9O0oueEFsaWduPSJyaWdodCI7RD0tKFQrditGKTtMLnhBbGlnbj0icmlnaHQiO0c9LShUK3YrRil9ZWxzZSBhYT1mdW5jdGlvbigpe3JldHVybiBUfSxKLnhBbGlnbj0ibGVmdCIsRD1UK3YrRixMLnhBbGlnbj0ibGVmdCIsRz1UK3YrRjtQLndpZHRoPXY7UC5oZWlnaHQ9UypDfWVsc2UgVD1NYXRoLm1heChGLCh0aGlzLmhlaWdodCgpLUMpLzIpLFM9TWF0aC5tYXgoTWF0aC5mbG9vcih0aGlzLndpZHRoKCktNCpGLXktdiksMCksdj0xLEM9TWF0aC5tYXgodGhpcy5oZWlnaHQoKS0yKlQsMCksYWE9ZnVuY3Rpb24oaGEsWCl7cmV0dXJuIE1hdGguZmxvb3IoeSsyKkYpK1h9LFk9ZnVuY3Rpb24oKXtyZXR1cm4gVH0sCkoueEFsaWduPSJyaWdodCIsRD0tRixMLnhBbGlnbj0ibGVmdCIsRz1GLFAueT1ULFAud2lkdGg9Uyp2LFAuaGVpZ2h0PUM7UC54PWFhKG51bGwsMCk7dGhpcy5fdXBwZXJMYWJlbC50ZXh0KCIiKTt0aGlzLl93cml0ZXIud3JpdGUoeCx0aGlzLndpZHRoKCksdGhpcy5oZWlnaHQoKSxKLHRoaXMuX3VwcGVyTGFiZWwubm9kZSgpKTt0aGlzLl91cHBlckxhYmVsLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK0QrIiwgIitCKyIpIik7dGhpcy5fbG93ZXJMYWJlbC50ZXh0KCIiKTt0aGlzLl93cml0ZXIud3JpdGUoQSx0aGlzLndpZHRoKCksdGhpcy5oZWlnaHQoKSxMLHRoaXMuX2xvd2VyTGFiZWwubm9kZSgpKTt0aGlzLl9sb3dlckxhYmVsLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK0crIiwgIitLKyIpIik7dGhpcy5fc3dhdGNoQm91bmRpbmdCb3guYXR0cnMoUCk7QT10aGlzLl9nZW5lcmF0ZVRpY2tzKFMpO0E9dGhpcy5fc3dhdGNoQ29udGFpbmVyLnNlbGVjdEFsbCgicmVjdC5zd2F0Y2giKS5kYXRhKEEpOwp4PUEuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5jbGFzc2VkKCJzd2F0Y2giLCEwKTtEPUEubWVyZ2UoeCk7QS5leGl0KCkucmVtb3ZlKCk7RC5hdHRycyh7ZmlsbDpmdW5jdGlvbihoYSl7cmV0dXJuIHQuX3NjYWxlLnNjYWxlKGhhKX0sd2lkdGg6dixoZWlnaHQ6Qyx4OmFhLHk6WSwic2hhcGUtcmVuZGVyaW5nIjoiY3Jpc3BFZGdlcyJ9KTtrLkFERF9USVRMRV9FTEVNRU5UUyYmeC5hcHBlbmQoInRpdGxlIikudGV4dChmdW5jdGlvbihoYSl7cmV0dXJuIHQuX2Zvcm1hdHRlcihoYSl9KTtyZXR1cm4gdGhpc307cmV0dXJuIHJ9KGYoNCkuQ29tcG9uZW50KTtjLl9ERUZBVUxUX05VTV9TV0FUQ0hFUz0xMTtjLkxFR0VORF9MQUJFTF9DTEFTUz0ibGVnZW5kLWxhYmVsIjtkLkludGVycG9sYXRlZENvbG9yTGVnZW5kPWN9LGZ1bmN0aW9uKGMsZCxmKXt2YXIgZz10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8ZnVuY3Rpb24oayxtKXtmdW5jdGlvbiBwKCl7dGhpcy5jb25zdHJ1Y3Rvcj1rfWZvcih2YXIgcSBpbiBtKW0uaGFzT3duUHJvcGVydHkocSkmJgooa1txXT1tW3FdKTtrLnByb3RvdHlwZT1udWxsPT09bT9PYmplY3QuY3JlYXRlKG0pOihwLnByb3RvdHlwZT1tLnByb3RvdHlwZSxuZXcgcCl9LGw9Zig1KTtjPWZ1bmN0aW9uKGspe2Z1bmN0aW9uIG0ocCxxKXt2b2lkIDA9PT1wJiYocD0iIik7dm9pZCAwPT09cSYmKHE9MCk7dmFyIHI9ay5jYWxsKHRoaXMpfHx0aGlzO3IuYWRkQ2xhc3MoImxhYmVsIik7ci50ZXh0KHApO3IuYW5nbGUocSk7ci54QWxpZ25tZW50KCJjZW50ZXIiKS55QWxpZ25tZW50KCJjZW50ZXIiKTtyLl9wYWRkaW5nPTA7cmV0dXJuIHJ9ZyhtLGspO20ucHJvdG90eXBlLnJlcXVlc3RlZFNwYWNlPWZ1bmN0aW9uKCl7dmFyIHA9dGhpcy5fbWVhc3VyZXIubWVhc3VyZSh0aGlzLl90ZXh0KSxxPSgwPT09dGhpcy5hbmdsZSgpP3Aud2lkdGg6cC5oZWlnaHQpKzIqdGhpcy5wYWRkaW5nKCk7cD0oMD09PXRoaXMuYW5nbGUoKT9wLmhlaWdodDpwLndpZHRoKSsyKnRoaXMucGFkZGluZygpO3JldHVybnttaW5XaWR0aDpxLAptaW5IZWlnaHQ6cH19O20ucHJvdG90eXBlLl9zZXR1cD1mdW5jdGlvbigpe2sucHJvdG90eXBlLl9zZXR1cC5jYWxsKHRoaXMpO3RoaXMuX3RleHRDb250YWluZXI9dGhpcy5jb250ZW50KCkuYXBwZW5kKCJnIik7dmFyIHA9bmV3IGwuU3ZnQ29udGV4dCh0aGlzLl90ZXh0Q29udGFpbmVyLm5vZGUoKSk7dGhpcy5fbWVhc3VyZXI9bmV3IGwuQ2FjaGVNZWFzdXJlcihwKTt0aGlzLl93cmFwcGVyPW5ldyBsLldyYXBwZXI7dGhpcy5fd3JpdGVyPW5ldyBsLldyaXRlcih0aGlzLl9tZWFzdXJlcixwLHRoaXMuX3dyYXBwZXIpO3RoaXMudGV4dCh0aGlzLl90ZXh0KX07bS5wcm90b3R5cGUudGV4dD1mdW5jdGlvbihwKXtpZihudWxsPT1wKXJldHVybiB0aGlzLl90ZXh0O2lmKCJzdHJpbmciIT09dHlwZW9mIHApdGhyb3cgRXJyb3IoIkxhYmVsLnRleHQoKSBvbmx5IHRha2VzIHN0cmluZ3MgYXMgaW5wdXQiKTt0aGlzLl90ZXh0PXA7dGhpcy5yZWRyYXcoKTtyZXR1cm4gdGhpc307bS5wcm90b3R5cGUuYW5nbGU9CmZ1bmN0aW9uKHApe2lmKG51bGw9PXApcmV0dXJuIHRoaXMuX2FuZ2xlO3AlPTM2MDsxODA8cD9wLT0zNjA6LTE4MD5wJiYocCs9MzYwKTtpZigtOTA9PT1wfHwwPT09cHx8OTA9PT1wKXRoaXMuX2FuZ2xlPXA7ZWxzZSB0aHJvdyBFcnJvcihwKyIgaXMgbm90IGEgdmFsaWQgYW5nbGUgZm9yIExhYmVsIik7dGhpcy5yZWRyYXcoKTtyZXR1cm4gdGhpc307bS5wcm90b3R5cGUucGFkZGluZz1mdW5jdGlvbihwKXtpZihudWxsPT1wKXJldHVybiB0aGlzLl9wYWRkaW5nO3A9K3A7aWYoMD5wKXRocm93IEVycm9yKHArIiBpcyBub3QgYSB2YWxpZCBwYWRkaW5nIHZhbHVlLiBDYW5ub3QgYmUgbGVzcyB0aGFuIDAuIik7dGhpcy5fcGFkZGluZz1wO3RoaXMucmVkcmF3KCk7cmV0dXJuIHRoaXN9O20ucHJvdG90eXBlLmZpeGVkV2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4hMH07bS5wcm90b3R5cGUuZml4ZWRIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4hMH07bS5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHk9CmZ1bmN0aW9uKCl7ay5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHkuY2FsbCh0aGlzKTt0aGlzLl90ZXh0Q29udGFpbmVyLnNlbGVjdEFsbCgiZyIpLnJlbW92ZSgpO3ZhciBwPXRoaXMuX21lYXN1cmVyLm1lYXN1cmUodGhpcy5fdGV4dCkscT1NYXRoLm1heChNYXRoLm1pbigodGhpcy5oZWlnaHQoKS1wLmhlaWdodCkvMix0aGlzLnBhZGRpbmcoKSksMCk7cD1NYXRoLm1heChNYXRoLm1pbigodGhpcy53aWR0aCgpLXAud2lkdGgpLzIsdGhpcy5wYWRkaW5nKCkpLDApO3RoaXMuX3RleHRDb250YWluZXIuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrcCsiLCIrcSsiKSIpO3A9dGhpcy53aWR0aCgpLTIqcDtxPXRoaXMuaGVpZ2h0KCktMipxO3ZhciByPXt4QWxpZ246dGhpcy54QWxpZ25tZW50KCkseUFsaWduOnRoaXMueUFsaWdubWVudCgpLHRleHRSb3RhdGlvbjp0aGlzLmFuZ2xlKCl9O3RoaXMuX3dyaXRlci53cml0ZSh0aGlzLl90ZXh0LHAscSxyKTtyZXR1cm4gdGhpc307Cm0ucHJvdG90eXBlLmludmFsaWRhdGVDYWNoZT1mdW5jdGlvbigpe2sucHJvdG90eXBlLmludmFsaWRhdGVDYWNoZS5jYWxsKHRoaXMpO3RoaXMuX21lYXN1cmVyLnJlc2V0KCl9O3JldHVybiBtfShmKDQpLkNvbXBvbmVudCk7ZC5MYWJlbD1jO2Y9ZnVuY3Rpb24oayl7ZnVuY3Rpb24gbShwLHEpe3A9ay5jYWxsKHRoaXMscCxxKXx8dGhpcztwLmFkZENsYXNzKG0uVElUTEVfTEFCRUxfQ0xBU1MpO3JldHVybiBwfWcobSxrKTtyZXR1cm4gbX0oYyk7Zi5USVRMRV9MQUJFTF9DTEFTUz0idGl0bGUtbGFiZWwiO2QuVGl0bGVMYWJlbD1mO2M9ZnVuY3Rpb24oayl7ZnVuY3Rpb24gbShwLHEpe3A9ay5jYWxsKHRoaXMscCxxKXx8dGhpcztwLmFkZENsYXNzKG0uQVhJU19MQUJFTF9DTEFTUyk7cmV0dXJuIHB9ZyhtLGspO3JldHVybiBtfShjKTtjLkFYSVNfTEFCRUxfQ0xBU1M9ImF4aXMtbGFiZWwiO2QuQXhpc0xhYmVsPWN9LGZ1bmN0aW9uKGMsZCxmKXt2YXIgZz10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8CmZ1bmN0aW9uKEEseSl7ZnVuY3Rpb24geCgpe3RoaXMuY29uc3RydWN0b3I9QX1mb3IodmFyIEMgaW4geSl5Lmhhc093blByb3BlcnR5KEMpJiYoQVtDXT15W0NdKTtBLnByb3RvdHlwZT1udWxsPT09eT9PYmplY3QuY3JlYXRlKHkpOih4LnByb3RvdHlwZT15LnByb3RvdHlwZSxuZXcgeCl9LGw9ZigxKSxrPWYoNSksbT1mKDIzKSxwPWYoOCkscT1mKDMxKSxyPWYoMCk7Yz1mKDQpO3ZhciB0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gQSh5LHgsQyl7dm9pZCAwPT09eSYmKHk9W10pO3ZvaWQgMD09PXgmJih4PTApO3ZvaWQgMD09PUMmJihDPUluZmluaXR5KTt0aGlzLmNvbHVtbnM9eTt0aGlzLmJvdHRvbVBhZGRpbmc9eDt0aGlzLm1heFdpZHRoPUN9QS5wcm90b3R5cGUuYWRkQ29sdW1uPWZ1bmN0aW9uKHkpe3ZhciB4PXkud2lkdGgsQz10aGlzLmdldFdpZHRoQXZhaWxhYmxlKCk7eS53aWR0aD1NYXRoLm1pbihDLHgpO3RoaXMuY29sdW1ucy5wdXNoKHkpfTtBLnByb3RvdHlwZS5nZXRCb3VuZHM9CmZ1bmN0aW9uKHkpe2Zvcih2YXIgeD10aGlzLmNvbHVtbnNbeV0sQz0wLEY9MDtGPHk7RisrKUMrPXRoaXMuY29sdW1uc1tGXS53aWR0aDtyZXR1cm57dG9wTGVmdDp7eDpDLHk6MH0sYm90dG9tUmlnaHQ6e3g6Qyt4LndpZHRoLHk6eC5oZWlnaHR9fX07QS5wcm90b3R5cGUuZ2V0SGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWF0aC5tYXgodGhpcy5jb2x1bW5zLm1hcChmdW5jdGlvbih5KXtyZXR1cm4geS5oZWlnaHR9KSwwKSt0aGlzLmJvdHRvbVBhZGRpbmd9O0EucHJvdG90eXBlLmdldFdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGgubWluKHRoaXMuY29sdW1ucy5yZWR1Y2UoZnVuY3Rpb24oeSx4KXtyZXR1cm4geSt4LndpZHRofSwwKSx0aGlzLm1heFdpZHRoKX07QS5wcm90b3R5cGUuZ2V0V2lkdGhBdmFpbGFibGU9ZnVuY3Rpb24oKXt2YXIgeT10aGlzLmdldFdpZHRoKCk7cmV0dXJuIE1hdGgubWF4KHRoaXMubWF4V2lkdGgteSwwKX07cmV0dXJuIEF9KCksdj1mdW5jdGlvbigpe2Z1bmN0aW9uIEEoeSwKeCxDLEYpe3ZvaWQgMD09PXkmJih5PUluZmluaXR5KTt2b2lkIDA9PT14JiYoeD1JbmZpbml0eSk7dm9pZCAwPT09QyYmKEM9MCk7dm9pZCAwPT09RiYmKEY9W10pO3RoaXMubWF4V2lkdGg9eTt0aGlzLm1heEhlaWdodD14O3RoaXMucGFkZGluZz1DO3RoaXMucm93cz1GfUEucHJvdG90eXBlLmFkZFJvdz1mdW5jdGlvbih5KXt5Lm1heFdpZHRoPXRoaXMubWF4V2lkdGgtMip0aGlzLnBhZGRpbmc7dGhpcy5yb3dzLnB1c2goeSl9O0EucHJvdG90eXBlLmdldENvbHVtbkJvdW5kcz1mdW5jdGlvbih5LHgpe3ZhciBDPXRoaXMuZ2V0Um93Qm91bmRzKHkpO3k9dGhpcy5yb3dzW3ldLmdldEJvdW5kcyh4KTt5LnRvcExlZnQueCs9Qy50b3BMZWZ0Lng7eS5ib3R0b21SaWdodC54Kz1DLnRvcExlZnQueDt5LnRvcExlZnQueSs9Qy50b3BMZWZ0Lnk7eS5ib3R0b21SaWdodC55Kz1DLnRvcExlZnQueTtyZXR1cm4geX07QS5wcm90b3R5cGUuZ2V0Um93Qm91bmRzPWZ1bmN0aW9uKHkpe2Zvcih2YXIgeD0KdGhpcy5wYWRkaW5nLEM9dGhpcy5wYWRkaW5nLEY9MDtGPHk7RisrKUMrPXRoaXMucm93c1tGXS5nZXRIZWlnaHQoKTtyZXR1cm57dG9wTGVmdDp7eCx5OkN9LGJvdHRvbVJpZ2h0Ont4OngrdGhpcy5yb3dzW3ldLmdldFdpZHRoKCkseTpDK3RoaXMucm93c1t5XS5nZXRIZWlnaHQoKX19fTtBLnByb3RvdHlwZS5nZXRIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5taW4odGhpcy5yb3dzLnJlZHVjZShmdW5jdGlvbih5LHgpe3JldHVybiB5K3guZ2V0SGVpZ2h0KCl9LDApKzIqdGhpcy5wYWRkaW5nLHRoaXMubWF4SGVpZ2h0KX07QS5wcm90b3R5cGUuZ2V0V2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5taW4oci5NYXRoLm1heCh0aGlzLnJvd3MubWFwKGZ1bmN0aW9uKHkpe3JldHVybiB5LmdldFdpZHRoKCl9KSwwKSsyKnRoaXMucGFkZGluZyx0aGlzLm1heFdpZHRoKX07cmV0dXJuIEF9KCk7Yz1mdW5jdGlvbihBKXtmdW5jdGlvbiB5KHgpe3ZhciBDPUEuY2FsbCh0aGlzKXx8CnRoaXM7Qy5fcGFkZGluZz01O0MuX3Jvd0JvdHRvbVBhZGRpbmc9MztDLmFkZENsYXNzKCJsZWdlbmQiKTtDLm1heEVudHJpZXNQZXJSb3coMSk7aWYobnVsbD09eCl0aHJvdyBFcnJvcigiTGVnZW5kIHJlcXVpcmVzIGEgY29sb3JTY2FsZSIpO0MuX2NvbG9yU2NhbGU9eDtDLl9yZWRyYXdDYWxsYmFjaz1mdW5jdGlvbigpe3JldHVybiBDLnJlZHJhdygpfTtDLl9jb2xvclNjYWxlLm9uVXBkYXRlKEMuX3JlZHJhd0NhbGxiYWNrKTtDLl9mb3JtYXR0ZXI9cC5pZGVudGl0eSgpO0MubWF4TGluZXNQZXJFbnRyeSgxKTtDLnhBbGlnbm1lbnQoInJpZ2h0IikueUFsaWdubWVudCgidG9wIik7Qy5jb21wYXJhdG9yKGZ1bmN0aW9uKEYsRCl7dmFyIEI9Qy5fY29sb3JTY2FsZS5kb21haW4oKS5zbGljZSgpLm1hcChmdW5jdGlvbihHKXtyZXR1cm4gQy5fZm9ybWF0dGVyKEcpfSk7cmV0dXJuIEIuaW5kZXhPZihGKS1CLmluZGV4T2YoRCl9KTtDLl9zeW1ib2xGYWN0b3J5QWNjZXNzb3I9ZnVuY3Rpb24oKXtyZXR1cm4gcS5jaXJjbGUoKX07CkMuX3N5bWJvbE9wYWNpdHlBY2Nlc3Nvcj1mdW5jdGlvbigpe3JldHVybiAxfTtyZXR1cm4gQ31nKHksQSk7eS5wcm90b3R5cGUuX3NldHVwPWZ1bmN0aW9uKCl7QS5wcm90b3R5cGUuX3NldHVwLmNhbGwodGhpcyk7dmFyIHg9dGhpcy5jb250ZW50KCkuYXBwZW5kKCJnIikuY2xhc3NlZCh5LkxFR0VORF9ST1dfQ0xBU1MsITApO3guYXBwZW5kKCJnIikuY2xhc3NlZCh5LkxFR0VORF9FTlRSWV9DTEFTUywhMCkuYXBwZW5kKCJ0ZXh0Iik7eD1uZXcgay5TdmdDb250ZXh0KHgubm9kZSgpLG51bGwsbS5BRERfVElUTEVfRUxFTUVOVFMpO3RoaXMuX21lYXN1cmVyPW5ldyBrLkNhY2hlTWVhc3VyZXIoeCk7dGhpcy5fd3JhcHBlcj0obmV3IGsuV3JhcHBlcikubWF4TGluZXModGhpcy5tYXhMaW5lc1BlckVudHJ5KCkpO3RoaXMuX3dyaXRlcj1uZXcgay5Xcml0ZXIodGhpcy5fbWVhc3VyZXIseCx0aGlzLl93cmFwcGVyKX07eS5wcm90b3R5cGUuZm9ybWF0dGVyPWZ1bmN0aW9uKHgpe2lmKG51bGw9PQp4KXJldHVybiB0aGlzLl9mb3JtYXR0ZXI7dGhpcy5fZm9ybWF0dGVyPXg7dGhpcy5yZWRyYXcoKTtyZXR1cm4gdGhpc307eS5wcm90b3R5cGUubWF4RW50cmllc1BlclJvdz1mdW5jdGlvbih4KXtpZihudWxsPT14KXJldHVybiB0aGlzLl9tYXhFbnRyaWVzUGVyUm93O3RoaXMuX21heEVudHJpZXNQZXJSb3c9eDt0aGlzLnJlZHJhdygpO3JldHVybiB0aGlzfTt5LnByb3RvdHlwZS5tYXhMaW5lc1BlckVudHJ5PWZ1bmN0aW9uKHgpe2lmKG51bGw9PXgpcmV0dXJuIHRoaXMuX21heExpbmVzUGVyRW50cnk7dGhpcy5fbWF4TGluZXNQZXJFbnRyeT14O3RoaXMucmVkcmF3KCk7cmV0dXJuIHRoaXN9O3kucHJvdG90eXBlLm1heFdpZHRoPWZ1bmN0aW9uKHgpe2lmKG51bGw9PXgpcmV0dXJuIHRoaXMuX21heFdpZHRoO3RoaXMuX21heFdpZHRoPXg7dGhpcy5yZWRyYXcoKTtyZXR1cm4gdGhpc307eS5wcm90b3R5cGUuY29tcGFyYXRvcj1mdW5jdGlvbih4KXtudWxsIT14JiYodGhpcy5fY29tcGFyYXRvcj0KeCx0aGlzLnJlZHJhdygpKX07eS5wcm90b3R5cGUuY29sb3JTY2FsZT1mdW5jdGlvbih4KXtyZXR1cm4gbnVsbCE9eD8odGhpcy5fY29sb3JTY2FsZS5vZmZVcGRhdGUodGhpcy5fcmVkcmF3Q2FsbGJhY2spLHRoaXMuX2NvbG9yU2NhbGU9eCx0aGlzLl9jb2xvclNjYWxlLm9uVXBkYXRlKHRoaXMuX3JlZHJhd0NhbGxiYWNrKSx0aGlzLnJlZHJhdygpLHRoaXMpOnRoaXMuX2NvbG9yU2NhbGV9O3kucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXtBLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7dGhpcy5fY29sb3JTY2FsZS5vZmZVcGRhdGUodGhpcy5fcmVkcmF3Q2FsbGJhY2spfTt5LnByb3RvdHlwZS5fYnVpbGRMZWdlbmRUYWJsZT1mdW5jdGlvbih4LEMpe3ZhciBGPXRoaXMsRD10aGlzLl9tZWFzdXJlci5tZWFzdXJlKCkuaGVpZ2h0LEI9bmV3IHYoeCxDLHRoaXMuX3BhZGRpbmcpO3g9dGhpcy5fY29sb3JTY2FsZS5kb21haW4oKS5zbGljZSgpLnNvcnQoZnVuY3Rpb24oSywKTCl7cmV0dXJuIEYuX2NvbXBhcmF0b3IoRi5fZm9ybWF0dGVyKEspLEYuX2Zvcm1hdHRlcihMKSl9KTt2YXIgRz1uZXcgdDtCLmFkZFJvdyhHKTtHLmJvdHRvbVBhZGRpbmc9dGhpcy5fcm93Qm90dG9tUGFkZGluZzt4LmZvckVhY2goZnVuY3Rpb24oSyl7Ry5jb2x1bW5zLmxlbmd0aC8yPT09Ri5tYXhFbnRyaWVzUGVyUm93KCkmJihHPW5ldyB0LEcuYm90dG9tUGFkZGluZz1GLl9yb3dCb3R0b21QYWRkaW5nLEIuYWRkUm93KEcpKTt2YXIgTD1HLmdldFdpZHRoQXZhaWxhYmxlKCksSj1GLl9mb3JtYXR0ZXIoSyksUD1GLl9tZWFzdXJlci5tZWFzdXJlKEopLndpZHRoOzA+TC1ELVAmJjE8Ry5jb2x1bW5zLmxlbmd0aCYmKEc9bmV3IHQsRy5ib3R0b21QYWRkaW5nPUYuX3Jvd0JvdHRvbVBhZGRpbmcsQi5hZGRSb3coRykpO0cuYWRkQ29sdW1uKHt3aWR0aDpELGhlaWdodDpELGRhdGE6e25hbWU6Syx0eXBlOiJzeW1ib2wifX0pO0w9Ry5nZXRXaWR0aEF2YWlsYWJsZSgpO0w9TWF0aC5taW4oTCwKUCk7Ri5fd3JhcHBlci5tYXhMaW5lcyhGLm1heExpbmVzUGVyRW50cnkoKSk7Sj1GLl93cmFwcGVyLndyYXAoSixGLl9tZWFzdXJlcixMKS5ub0xpbmVzKkQ7Ry5hZGRDb2x1bW4oe3dpZHRoOkwsaGVpZ2h0OkosZGF0YTp7bmFtZTpLLHR5cGU6InRleHQifX0pfSk7cmV0dXJuIEJ9O3kucHJvdG90eXBlLnJlcXVlc3RlZFNwYWNlPWZ1bmN0aW9uKHgsQyl7eD10aGlzLl9idWlsZExlZ2VuZFRhYmxlKHIuTWF0aC5taW4oW3RoaXMubWF4V2lkdGgoKSx4XSx4KSxDKTtyZXR1cm57bWluSGVpZ2h0OnguZ2V0SGVpZ2h0KCksbWluV2lkdGg6eC5nZXRXaWR0aCgpfX07eS5wcm90b3R5cGUuZW50aXRpZXNBdD1mdW5jdGlvbih4KXt2YXIgQz10aGlzO2lmKCF0aGlzLl9pc1NldHVwKXJldHVybltdO3ZhciBGPXRoaXMuX2J1aWxkTGVnZW5kVGFibGUodGhpcy53aWR0aCgpLHRoaXMuaGVpZ2h0KCkpO3JldHVybiBGLnJvd3MucmVkdWNlKGZ1bmN0aW9uKEQsQixHKXtpZigwIT09RC5sZW5ndGgpcmV0dXJuIEQ7CnZhciBLPUYuZ2V0Um93Qm91bmRzKEcpO3JldHVybiByLk1hdGgud2l0aGluKHgsSyk/Qi5jb2x1bW5zLnJlZHVjZShmdW5jdGlvbihMLEosUCl7dmFyIFM9Ri5nZXRDb2x1bW5Cb3VuZHMoRyxQKTtpZihyLk1hdGgud2l0aGluKHgsUykpe0w9Qy5jb250ZW50KCkuc2VsZWN0QWxsKCIuIit5LkxFR0VORF9ST1dfQ0xBU1MpLm5vZGVzKClbR107UD1sLnNlbGVjdChMKS5zZWxlY3RBbGwoIi4iK3kuTEVHRU5EX0VOVFJZX0NMQVNTKS5ub2RlcygpW01hdGguZmxvb3IoUC8yKV07dmFyIE49bC5zZWxlY3QoUCkuc2VsZWN0KCIuIit5LkxFR0VORF9TWU1CT0xfQ0xBU1MpO1M9ci5ET00uZ2V0VHJhbnNsYXRlVmFsdWVzKGwuc2VsZWN0KEwpKTtOPXIuRE9NLmdldFRyYW5zbGF0ZVZhbHVlcyhOKTtyZXR1cm5be2JvdW5kczpyLkRPTS5lbGVtZW50QkJveChsLnNlbGVjdChMKSksZGF0dW06Si5kYXRhLm5hbWUscG9zaXRpb246e3g6U1swXStOWzBdLHk6U1sxXStOWzFdfSxzZWxlY3Rpb246bC5zZWxlY3QoUCksCmNvbXBvbmVudDpDfV19cmV0dXJuIEx9LEQpOkR9LFtdKX07eS5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHk9ZnVuY3Rpb24oKXtBLnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseS5jYWxsKHRoaXMpO3ZhciB4PXRoaXMuX2J1aWxkTGVnZW5kVGFibGUodGhpcy53aWR0aCgpLHRoaXMuaGVpZ2h0KCkpO3RoaXMuY29udGVudCgpLnNlbGVjdEFsbCgiKiIpLnJlbW92ZSgpO3ZhciBDPXRoaXMuY29udGVudCgpLnNlbGVjdEFsbCgiZy4iK3kuTEVHRU5EX1JPV19DTEFTUykuZGF0YSh4LnJvd3MpLEY9Qy5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoeS5MRUdFTkRfUk9XX0NMQVNTLCEwKS5tZXJnZShDKTtDLmV4aXQoKS5yZW1vdmUoKTtGLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oQixHKXtCPXguZ2V0Um93Qm91bmRzKEcpO3JldHVybiJ0cmFuc2xhdGUoIitCLnRvcExlZnQueCsiLCAiK0IudG9wTGVmdC55KyIpIn0pO3ZhciBEPXRoaXM7Ri5lYWNoKGZ1bmN0aW9uKEIsRyl7Zm9yKHZhciBLPQpbXSxMPTA7TDxCLmNvbHVtbnMubGVuZ3RoO0wrPTIpSy5wdXNoKFtCLmNvbHVtbnNbTF0sQi5jb2x1bW5zW0wrMV1dKTtCPWwuc2VsZWN0KHRoaXMpLnNlbGVjdEFsbCgiZy4iK3kuTEVHRU5EX0VOVFJZX0NMQVNTKS5kYXRhKEspO0s9Qi5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoeS5MRUdFTkRfRU5UUllfQ0xBU1MsITApLm1lcmdlKEIpO0suYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsZnVuY3Rpb24oSil7Sj1KWzBdO3JldHVybiBELnN5bWJvbCgpKEouZGF0YS5uYW1lLEcpKC42KkouaGVpZ2h0KShudWxsKX0pLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oSil7Sj1KWzBdO3JldHVybiJ0cmFuc2xhdGUoIisoeC5nZXRDb2x1bW5Cb3VuZHMoRyx4LnJvd3NbR10uY29sdW1ucy5pbmRleE9mKEopKS50b3BMZWZ0LngrSi53aWR0aC8yKSsiLCAiK0ouaGVpZ2h0LzIrIikifSkuYXR0cigiZmlsbCIsZnVuY3Rpb24oSil7cmV0dXJuIEQuX2NvbG9yU2NhbGUuc2NhbGUoSlswXS5kYXRhLm5hbWUpfSkuYXR0cigib3BhY2l0eSIsCmZ1bmN0aW9uKEope3JldHVybiBELnN5bWJvbE9wYWNpdHkoKShKWzBdLmRhdGEubmFtZSxHKX0pLmNsYXNzZWQoeS5MRUdFTkRfU1lNQk9MX0NMQVNTLCEwKTtLLmFwcGVuZCgiZyIpLmNsYXNzZWQoInRleHQtY29udGFpbmVyIiwhMCkuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihKKXtyZXR1cm4idHJhbnNsYXRlKCIreC5nZXRDb2x1bW5Cb3VuZHMoRyx4LnJvd3NbR10uY29sdW1ucy5pbmRleE9mKEpbMV0pKS50b3BMZWZ0LngrIiwgMCkifSkuZWFjaChmdW5jdGlvbihKKXt2YXIgUD1sLnNlbGVjdCh0aGlzKTtKPUpbMV07RC5fd3JpdGVyLndyaXRlKEQuX2Zvcm1hdHRlcihKLmRhdGEubmFtZSksSi53aWR0aCxELmhlaWdodCgpLHt4QWxpZ246ImxlZnQiLHlBbGlnbjoidG9wIix0ZXh0Um90YXRpb246MH0sUC5ub2RlKCkpfSk7Qi5leGl0KCkucmVtb3ZlKCl9KTtyZXR1cm4gdGhpc307eS5wcm90b3R5cGUuc3ltYm9sPWZ1bmN0aW9uKHgpe2lmKG51bGw9PXgpcmV0dXJuIHRoaXMuX3N5bWJvbEZhY3RvcnlBY2Nlc3NvcjsKdGhpcy5fc3ltYm9sRmFjdG9yeUFjY2Vzc29yPXg7dGhpcy5yZW5kZXIoKTtyZXR1cm4gdGhpc307eS5wcm90b3R5cGUuc3ltYm9sT3BhY2l0eT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zeW1ib2xPcGFjaXR5QWNjZXNzb3J9O3kucHJvdG90eXBlLmZpeGVkV2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4hMH07eS5wcm90b3R5cGUuZml4ZWRIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4hMH07eS5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlPWZ1bmN0aW9uKCl7dGhpcy5fbWVhc3VyZXIucmVzZXQoKX07cmV0dXJuIHl9KGMuQ29tcG9uZW50KTtjLkxFR0VORF9ST1dfQ0xBU1M9ImxlZ2VuZC1yb3ciO2MuTEVHRU5EX0VOVFJZX0NMQVNTPSJsZWdlbmQtZW50cnkiO2MuTEVHRU5EX1NZTUJPTF9DTEFTUz0ibGVnZW5kLXN5bWJvbCI7ZC5MZWdlbmQ9Y30sZnVuY3Rpb24oYyxkLGYpe3ZhciBnPXRoaXMmJnRoaXMuX19leHRlbmRzfHxmdW5jdGlvbihtLHApe2Z1bmN0aW9uIHEoKXt0aGlzLmNvbnN0cnVjdG9yPQptfWZvcih2YXIgciBpbiBwKXAuaGFzT3duUHJvcGVydHkocikmJihtW3JdPXBbcl0pO20ucHJvdG90eXBlPW51bGw9PT1wP09iamVjdC5jcmVhdGUocCk6KHEucHJvdG90eXBlPXAucHJvdG90eXBlLG5ldyBxKX0sbD1mKDIpLGs9ZigwKTtjPWZ1bmN0aW9uKG0pe2Z1bmN0aW9uIHAoKXtyZXR1cm4gbnVsbCE9PW0mJm0uYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfWcocCxtKTtwLnByb3RvdHlwZS5lbnRpdHlOZWFyZXN0PWZ1bmN0aW9uKHEpe3ZhciByLHQ9SW5maW5pdHk7dGhpcy5jb21wb25lbnRzKCkuZm9yRWFjaChmdW5jdGlvbih2KXt2PXYuZW50aXR5TmVhcmVzdChxKTtpZihudWxsIT12KXt2YXIgQT1rLk1hdGguZGlzdGFuY2VTcXVhcmVkKHYucG9zaXRpb24scSk7QTw9dCYmKHQ9QSxyPXYpfX0pO3JldHVybiByfTtwLnByb3RvdHlwZS5hcHBlbmQ9ZnVuY3Rpb24ocSl7aWYobnVsbCE9cSYmIShxIGluc3RhbmNlb2YgbC5QbG90KSl0aHJvdyBFcnJvcigiUGxvdCBHcm91cCBvbmx5IGFjY2VwdHMgcGxvdHMiKTsKbS5wcm90b3R5cGUuYXBwZW5kLmNhbGwodGhpcyxxKTtyZXR1cm4gdGhpc307cmV0dXJuIHB9KGYoNDEpLkdyb3VwKTtkLlBsb3RHcm91cD1jfSxmdW5jdGlvbihjLGQsZil7dmFyIGc9dGhpcyYmdGhpcy5fX2V4dGVuZHN8fGZ1bmN0aW9uKG0scCl7ZnVuY3Rpb24gcSgpe3RoaXMuY29uc3RydWN0b3I9bX1mb3IodmFyIHIgaW4gcClwLmhhc093blByb3BlcnR5KHIpJiYobVtyXT1wW3JdKTttLnByb3RvdHlwZT1udWxsPT09cD9PYmplY3QuY3JlYXRlKHApOihxLnByb3RvdHlwZT1wLnByb3RvdHlwZSxuZXcgcSl9LGw9ZigxKSxrPWYoMCk7Yz1mdW5jdGlvbihtKXtmdW5jdGlvbiBwKHEpe3ZvaWQgMD09PXEmJihxPVtdKTt2YXIgcj1tLmNhbGwodGhpcyl8fHRoaXM7ci5fcm93UGFkZGluZz0wO3IuX2NvbHVtblBhZGRpbmc9MDtyLl9yb3dzPVtdO3IuX3Jvd1dlaWdodHM9W107ci5fY29sdW1uV2VpZ2h0cz1bXTtyLl9uUm93cz0wO3IuX25Db2xzPTA7ci5fY2FsY3VsYXRlZExheW91dD0KbnVsbDtyLmFkZENsYXNzKCJ0YWJsZSIpO3EuZm9yRWFjaChmdW5jdGlvbih0LHYpe3QuZm9yRWFjaChmdW5jdGlvbihBLHkpe251bGwhPUEmJnIuYWRkKEEsdix5KX0pfSk7cmV0dXJuIHJ9ZyhwLG0pO3AucHJvdG90eXBlLl9mb3JFYWNoPWZ1bmN0aW9uKHEpe2Zvcih2YXIgcj0wO3I8dGhpcy5fblJvd3M7cisrKWZvcih2YXIgdD0wO3Q8dGhpcy5fbkNvbHM7dCsrKW51bGwhPXRoaXMuX3Jvd3Nbcl1bdF0mJnEodGhpcy5fcm93c1tyXVt0XSl9O3AucHJvdG90eXBlLmhhcz1mdW5jdGlvbihxKXtmb3IodmFyIHI9MDtyPHRoaXMuX25Sb3dzO3IrKylmb3IodmFyIHQ9MDt0PHRoaXMuX25Db2xzO3QrKylpZih0aGlzLl9yb3dzW3JdW3RdPT09cSlyZXR1cm4hMDtyZXR1cm4hMX07cC5wcm90b3R5cGUuY29tcG9uZW50QXQ9ZnVuY3Rpb24ocSl7cmV0dXJuIDA+PXRoaXMuX25Sb3dzfHwwPnF8fHE+PXRoaXMuX25Db2xzP251bGw6dGhpcy5fcm93c1swXVtxXX07cC5wcm90b3R5cGUuYWRkPQpmdW5jdGlvbihxLHIsdCl7aWYobnVsbD09cSl0aHJvdyBFcnJvcigiQ2Fubm90IGFkZCBudWxsIHRvIGEgdGFibGUgY2VsbCIpO2lmKCF0aGlzLmhhcyhxKSl7aWYobnVsbCE9KHRoaXMuX3Jvd3Nbcl0mJnRoaXMuX3Jvd3Nbcl1bdF0pKXRocm93IEVycm9yKCJjZWxsIGlzIG9jY3VwaWVkIik7cS5kZXRhY2goKTt0aGlzLl9uUm93cz1NYXRoLm1heChyKzEsdGhpcy5fblJvd3MpO3RoaXMuX25Db2xzPU1hdGgubWF4KHQrMSx0aGlzLl9uQ29scyk7dGhpcy5fcGFkVGFibGVUb1NpemUodGhpcy5fblJvd3MsdGhpcy5fbkNvbHMpO3RoaXMuX3Jvd3Nbcl1bdF09cTt0aGlzLl9hZG9wdEFuZEFuY2hvcihxKTt0aGlzLnJlZHJhdygpfXJldHVybiB0aGlzfTtwLnByb3RvdHlwZS5fcmVtb3ZlPWZ1bmN0aW9uKHEpe2Zvcih2YXIgcj0wO3I8dGhpcy5fblJvd3M7cisrKWZvcih2YXIgdD0wO3Q8dGhpcy5fbkNvbHM7dCsrKWlmKHRoaXMuX3Jvd3Nbcl1bdF09PT1xKXt0aGlzLl9yb3dzW3JdW3RdPQpudWxsO3JldHVybn19O3AucHJvdG90eXBlLl9pdGVyYXRlTGF5b3V0PWZ1bmN0aW9uKHEscix0KXt2b2lkIDA9PT10JiYodD0hMSk7dmFyIHY9dGhpcy5fcm93cyxBPWwudHJhbnNwb3NlKHRoaXMuX3Jvd3MpO3EtPXRoaXMuX2NvbHVtblBhZGRpbmcqKHRoaXMuX25Db2xzLTEpO3ItPXRoaXMuX3Jvd1BhZGRpbmcqKHRoaXMuX25Sb3dzLTEpO3Y9cC5fY2FsY0NvbXBvbmVudFdlaWdodHModGhpcy5fcm93V2VpZ2h0cyx2LGZ1bmN0aW9uKE4pe3JldHVybiBudWxsPT1OfHxOLmZpeGVkSGVpZ2h0KCl9KTtBPXAuX2NhbGNDb21wb25lbnRXZWlnaHRzKHRoaXMuX2NvbHVtbldlaWdodHMsQSxmdW5jdGlvbihOKXtyZXR1cm4gbnVsbD09Tnx8Ti5maXhlZFdpZHRoKCl9KTt2YXIgeT1BLm1hcChmdW5jdGlvbihOKXtyZXR1cm4gMD09PU4/LjU6Tn0pLHg9di5tYXAoZnVuY3Rpb24oTil7cmV0dXJuIDA9PT1OPy41Ok59KTt5PXAuX2NhbGNQcm9wb3J0aW9uYWxTcGFjZSh5LHEpO3ZhciBDPXAuX2NhbGNQcm9wb3J0aW9uYWxTcGFjZSh4LApyKSxGPWsuQXJyYXkuY3JlYXRlRmlsbGVkQXJyYXkoMCx0aGlzLl9uQ29scyksRD1rLkFycmF5LmNyZWF0ZUZpbGxlZEFycmF5KDAsdGhpcy5fblJvd3MpO3g9MDtmb3IodmFyIEIsRyxLOzspe0Q9ay5BcnJheS5hZGQoRCxDKTt5PWsuQXJyYXkuYWRkKEYseSk7Qj10aGlzLl9kZXRlcm1pbmVHdWFyYW50ZWVzKHksRCx0KTtGPUIuZ3VhcmFudGVlZFdpZHRocztEPUIuZ3VhcmFudGVlZEhlaWdodHM7Rz1CLndhbnRzV2lkdGhBcnIuc29tZShmdW5jdGlvbihOKXtyZXR1cm4gTn0pO0s9Qi53YW50c0hlaWdodEFyci5zb21lKGZ1bmN0aW9uKE4pe3JldHVybiBOfSk7dmFyIEw9UCxKPVM7dmFyIFA9cS1sLnN1bShCLmd1YXJhbnRlZWRXaWR0aHMpO3ZhciBTPXItbC5zdW0oQi5ndWFyYW50ZWVkSGVpZ2h0cyk7eT12b2lkIDA7Rz8oeT1CLndhbnRzV2lkdGhBcnIubWFwKGZ1bmN0aW9uKE4pe3JldHVybiBOPy4xOjB9KSx5PWsuQXJyYXkuYWRkKHksQSkpOnk9QTtDPXZvaWQgMDtLPyhDPUIud2FudHNIZWlnaHRBcnIubWFwKGZ1bmN0aW9uKE4pe3JldHVybiBOPwouMTowfSksQz1rLkFycmF5LmFkZChDLHYpKTpDPXY7eT1wLl9jYWxjUHJvcG9ydGlvbmFsU3BhY2UoeSxQKTtDPXAuX2NhbGNQcm9wb3J0aW9uYWxTcGFjZShDLFMpO3grKztKPTA8UyYmUyE9PUo7aWYoISgwPFAmJlAhPT1MfHxKKSlicmVhaztpZig1PHgpYnJlYWt9UD1xLWwuc3VtKEIuZ3VhcmFudGVlZFdpZHRocyk7Uz1yLWwuc3VtKEIuZ3VhcmFudGVlZEhlaWdodHMpO3k9cC5fY2FsY1Byb3BvcnRpb25hbFNwYWNlKEEsUCk7Qz1wLl9jYWxjUHJvcG9ydGlvbmFsU3BhY2UodixTKTtyZXR1cm57Y29sUHJvcG9ydGlvbmFsU3BhY2U6eSxyb3dQcm9wb3J0aW9uYWxTcGFjZTpDLGd1YXJhbnRlZWRXaWR0aHM6Qi5ndWFyYW50ZWVkV2lkdGhzLGd1YXJhbnRlZWRIZWlnaHRzOkIuZ3VhcmFudGVlZEhlaWdodHMsd2FudHNXaWR0aDpHLHdhbnRzSGVpZ2h0Okt9fTtwLnByb3RvdHlwZS5fZGV0ZXJtaW5lR3VhcmFudGVlcz1mdW5jdGlvbihxLHIsdCl7dm9pZCAwPT09dCYmKHQ9ITEpO3ZhciB2PQprLkFycmF5LmNyZWF0ZUZpbGxlZEFycmF5KDAsdGhpcy5fbkNvbHMpLEE9ay5BcnJheS5jcmVhdGVGaWxsZWRBcnJheSgwLHRoaXMuX25Sb3dzKSx5PWsuQXJyYXkuY3JlYXRlRmlsbGVkQXJyYXkoITEsdGhpcy5fbkNvbHMpLHg9ay5BcnJheS5jcmVhdGVGaWxsZWRBcnJheSghMSx0aGlzLl9uUm93cyk7dGhpcy5fcm93cy5mb3JFYWNoKGZ1bmN0aW9uKEMsRil7Qy5mb3JFYWNoKGZ1bmN0aW9uKEQsQil7RD1udWxsIT1EP0QucmVxdWVzdGVkU3BhY2UocVtCXSxyW0ZdKTp7bWluV2lkdGg6MCxtaW5IZWlnaHQ6MH07dltCXT1NYXRoLm1heCh2W0JdLHQ/TWF0aC5taW4oRC5taW5XaWR0aCxxW0JdKTpELm1pbldpZHRoKTtBW0ZdPU1hdGgubWF4KEFbRl0sdD9NYXRoLm1pbihELm1pbkhlaWdodCxyW0ZdKTpELm1pbkhlaWdodCk7dmFyIEc9RC5taW5XaWR0aD5xW0JdO3lbQl09eVtCXXx8RztCPUQubWluSGVpZ2h0PnJbRl07eFtGXT14W0ZdfHxCfSl9KTtyZXR1cm57Z3VhcmFudGVlZFdpZHRoczp2LApndWFyYW50ZWVkSGVpZ2h0czpBLHdhbnRzV2lkdGhBcnI6eSx3YW50c0hlaWdodEFycjp4fX07cC5wcm90b3R5cGUucmVxdWVzdGVkU3BhY2U9ZnVuY3Rpb24ocSxyKXt0aGlzLl9jYWxjdWxhdGVkTGF5b3V0PXRoaXMuX2l0ZXJhdGVMYXlvdXQocSxyKTtyZXR1cm57bWluV2lkdGg6bC5zdW0odGhpcy5fY2FsY3VsYXRlZExheW91dC5ndWFyYW50ZWVkV2lkdGhzKSxtaW5IZWlnaHQ6bC5zdW0odGhpcy5fY2FsY3VsYXRlZExheW91dC5ndWFyYW50ZWVkSGVpZ2h0cyl9fTtwLnByb3RvdHlwZS5jb21wdXRlTGF5b3V0PWZ1bmN0aW9uKHEscix0KXt2YXIgdj10aGlzO20ucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQuY2FsbCh0aGlzLHEscix0KTtxPWwuc3VtKHRoaXMuX2NhbGN1bGF0ZWRMYXlvdXQuZ3VhcmFudGVlZFdpZHRocyk7cj1sLnN1bSh0aGlzLl9jYWxjdWxhdGVkTGF5b3V0Lmd1YXJhbnRlZWRIZWlnaHRzKTt0PXRoaXMuX2NhbGN1bGF0ZWRMYXlvdXQ7aWYocT50aGlzLndpZHRoKCl8fApyPnRoaXMuaGVpZ2h0KCkpdD10aGlzLl9pdGVyYXRlTGF5b3V0KHRoaXMud2lkdGgoKSx0aGlzLmhlaWdodCgpLCEwKTt2YXIgQT0wLHk9ay5BcnJheS5hZGQodC5yb3dQcm9wb3J0aW9uYWxTcGFjZSx0Lmd1YXJhbnRlZWRIZWlnaHRzKSx4PWsuQXJyYXkuYWRkKHQuY29sUHJvcG9ydGlvbmFsU3BhY2UsdC5ndWFyYW50ZWVkV2lkdGhzKTt0aGlzLl9yb3dzLmZvckVhY2goZnVuY3Rpb24oQyxGKXt2YXIgRD0wO0MuZm9yRWFjaChmdW5jdGlvbihCLEcpe251bGwhPUImJkIuY29tcHV0ZUxheW91dCh7eDpELHk6QX0seFtHXSx5W0ZdKTtEKz14W0ddK3YuX2NvbHVtblBhZGRpbmd9KTtBKz15W0ZdK3YuX3Jvd1BhZGRpbmd9KTtyZXR1cm4gdGhpc307cC5wcm90b3R5cGUucm93UGFkZGluZz1mdW5jdGlvbihxKXtpZihudWxsPT1xKXJldHVybiB0aGlzLl9yb3dQYWRkaW5nO2lmKCFrLk1hdGguaXNWYWxpZE51bWJlcihxKXx8MD5xKXRocm93IEVycm9yKCJyb3dQYWRkaW5nIG11c3QgYmUgYSBub24tbmVnYXRpdmUgZmluaXRlIHZhbHVlIik7CnRoaXMuX3Jvd1BhZGRpbmc9cTt0aGlzLnJlZHJhdygpO3JldHVybiB0aGlzfTtwLnByb3RvdHlwZS5jb2x1bW5QYWRkaW5nPWZ1bmN0aW9uKHEpe2lmKG51bGwhPXEpe2lmKCFrLk1hdGguaXNWYWxpZE51bWJlcihxKXx8MD5xKXRocm93IEVycm9yKCJjb2x1bW5QYWRkaW5nIG11c3QgYmUgYSBub24tbmVnYXRpdmUgZmluaXRlIHZhbHVlIik7dGhpcy5fY29sdW1uUGFkZGluZz1xO3RoaXMucmVkcmF3KCl9fTtwLnByb3RvdHlwZS5yb3dXZWlnaHQ9ZnVuY3Rpb24ocSxyKXtpZihudWxsPT1yKXJldHVybiB0aGlzLl9yb3dXZWlnaHRzW3FdO2lmKCFrLk1hdGguaXNWYWxpZE51bWJlcihyKXx8MD5yKXRocm93IEVycm9yKCJyb3dXZWlnaHQgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBmaW5pdGUgdmFsdWUiKTt0aGlzLl9yb3dXZWlnaHRzW3FdPXI7dGhpcy5yZWRyYXcoKTtyZXR1cm4gdGhpc307cC5wcm90b3R5cGUuY29sdW1uV2VpZ2h0PWZ1bmN0aW9uKHEscil7aWYobnVsbD09cilyZXR1cm4gdGhpcy5fY29sdW1uV2VpZ2h0c1txXTsKaWYoIWsuTWF0aC5pc1ZhbGlkTnVtYmVyKHIpfHwwPnIpdGhyb3cgRXJyb3IoImNvbHVtbldlaWdodCBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIGZpbml0ZSB2YWx1ZSIpO3RoaXMuX2NvbHVtbldlaWdodHNbcV09cjt0aGlzLnJlZHJhdygpO3JldHVybiB0aGlzfTtwLnByb3RvdHlwZS5maXhlZFdpZHRoPWZ1bmN0aW9uKCl7dmFyIHE9bC50cmFuc3Bvc2UodGhpcy5fcm93cyk7cmV0dXJuIHAuX2ZpeGVkU3BhY2UocSxmdW5jdGlvbihyKXtyZXR1cm4gbnVsbD09cnx8ci5maXhlZFdpZHRoKCl9KX07cC5wcm90b3R5cGUuZml4ZWRIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gcC5fZml4ZWRTcGFjZSh0aGlzLl9yb3dzLGZ1bmN0aW9uKHEpe3JldHVybiBudWxsPT1xfHxxLmZpeGVkSGVpZ2h0KCl9KX07cC5wcm90b3R5cGUuX3BhZFRhYmxlVG9TaXplPWZ1bmN0aW9uKHEscil7Zm9yKHZhciB0PTA7dDxxO3QrKyl7dm9pZCAwPT09dGhpcy5fcm93c1t0XSYmKHRoaXMuX3Jvd3NbdF09W10sCnRoaXMuX3Jvd1dlaWdodHNbdF09bnVsbCk7Zm9yKHZhciB2PTA7djxyO3YrKyl2b2lkIDA9PT10aGlzLl9yb3dzW3RdW3ZdJiYodGhpcy5fcm93c1t0XVt2XT1udWxsKX1mb3Iodj0wO3Y8cjt2Kyspdm9pZCAwPT09dGhpcy5fY29sdW1uV2VpZ2h0c1t2XSYmKHRoaXMuX2NvbHVtbldlaWdodHNbdl09bnVsbCl9O3AuX2NhbGNDb21wb25lbnRXZWlnaHRzPWZ1bmN0aW9uKHEscix0KXtyZXR1cm4gcS5tYXAoZnVuY3Rpb24odixBKXtyZXR1cm4gbnVsbCE9dj92OnJbQV0ubWFwKHQpLnJlZHVjZShmdW5jdGlvbih5LHgpe3JldHVybiB5JiZ4fSwhMCk/MDoxfSl9O3AuX2NhbGNQcm9wb3J0aW9uYWxTcGFjZT1mdW5jdGlvbihxLHIpe3ZhciB0PWwuc3VtKHEpO3JldHVybiAwPT09dD9rLkFycmF5LmNyZWF0ZUZpbGxlZEFycmF5KDAscS5sZW5ndGgpOnEubWFwKGZ1bmN0aW9uKHYpe3JldHVybiByKnYvdH0pfTtwLl9maXhlZFNwYWNlPWZ1bmN0aW9uKHEscil7ZnVuY3Rpb24gdCh2KXtyZXR1cm4gdi5yZWR1Y2UoZnVuY3Rpb24oQSwKeSl7cmV0dXJuIEEmJnl9LCEwKX1yZXR1cm4gdChxLm1hcChmdW5jdGlvbih2KXtyZXR1cm4gdCh2Lm1hcChyKSl9KSl9O3JldHVybiBwfShmKDI5KS5Db21wb25lbnRDb250YWluZXIpO2QuVGFibGU9Y30sZnVuY3Rpb24oYyxkLGYpe3ZhciBnPXRoaXMmJnRoaXMuX19leHRlbmRzfHxmdW5jdGlvbihsLGspe2Z1bmN0aW9uIG0oKXt0aGlzLmNvbnN0cnVjdG9yPWx9Zm9yKHZhciBwIGluIGspay5oYXNPd25Qcm9wZXJ0eShwKSYmKGxbcF09a1twXSk7bC5wcm90b3R5cGU9bnVsbD09PWs/T2JqZWN0LmNyZWF0ZShrKToobS5wcm90b3R5cGU9ay5wcm90b3R5cGUsbmV3IG0pfTtjPWZ1bmN0aW9uKGwpe2Z1bmN0aW9uIGsoKXt2YXIgbT1sLmNhbGwodGhpcyl8fHRoaXM7bS5hZGRDbGFzcygieC1kcmFnLWJveC1sYXllciIpO20uX2hhc0Nvcm5lcnM9ITE7cmV0dXJuIG19ZyhrLGwpO2sucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQ9ZnVuY3Rpb24obSxwLHEpe2wucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQuY2FsbCh0aGlzLAptLHAscSk7dGhpcy5fc2V0Qm91bmRzKHRoaXMuYm91bmRzKCkpO3JldHVybiB0aGlzfTtrLnByb3RvdHlwZS5fc2V0Qm91bmRzPWZ1bmN0aW9uKG0pe2wucHJvdG90eXBlLl9zZXRCb3VuZHMuY2FsbCh0aGlzLHt0b3BMZWZ0Ont4Om0udG9wTGVmdC54LHk6MH0sYm90dG9tUmlnaHQ6e3g6bS5ib3R0b21SaWdodC54LHk6dGhpcy5oZWlnaHQoKX19KX07ay5wcm90b3R5cGUuX3NldFJlc2l6YWJsZUNsYXNzZXM9ZnVuY3Rpb24obSl7bSYmdGhpcy5lbmFibGVkKCk/dGhpcy5hZGRDbGFzcygieC1yZXNpemFibGUiKTp0aGlzLnJlbW92ZUNsYXNzKCJ4LXJlc2l6YWJsZSIpfTtrLnByb3RvdHlwZS55U2NhbGU9ZnVuY3Rpb24obSl7aWYobnVsbD09bSlyZXR1cm4gbC5wcm90b3R5cGUueVNjYWxlLmNhbGwodGhpcyk7dGhyb3cgRXJyb3IoInlTY2FsZXMgY2Fubm90IGJlIHNldCBvbiBhbiBYRHJhZ0JveExheWVyIik7fTtrLnByb3RvdHlwZS55RXh0ZW50PWZ1bmN0aW9uKCl7cmV0dXJuIGwucHJvdG90eXBlLnlFeHRlbnQuY2FsbCh0aGlzKTsKdGhyb3cgRXJyb3IoIlhEcmFnQm94TGF5ZXIgaGFzIG5vIHlFeHRlbnQiKTt9O3JldHVybiBrfShmKDMyKS5EcmFnQm94TGF5ZXIpO2QuWERyYWdCb3hMYXllcj1jfSxmdW5jdGlvbihjLGQsZil7dmFyIGc9dGhpcyYmdGhpcy5fX2V4dGVuZHN8fGZ1bmN0aW9uKGwsayl7ZnVuY3Rpb24gbSgpe3RoaXMuY29uc3RydWN0b3I9bH1mb3IodmFyIHAgaW4gaylrLmhhc093blByb3BlcnR5KHApJiYobFtwXT1rW3BdKTtsLnByb3RvdHlwZT1udWxsPT09az9PYmplY3QuY3JlYXRlKGspOihtLnByb3RvdHlwZT1rLnByb3RvdHlwZSxuZXcgbSl9O2M9ZnVuY3Rpb24obCl7ZnVuY3Rpb24gaygpe3ZhciBtPWwuY2FsbCh0aGlzKXx8dGhpczttLmFkZENsYXNzKCJ5LWRyYWctYm94LWxheWVyIik7bS5faGFzQ29ybmVycz0hMTtyZXR1cm4gbX1nKGssbCk7ay5wcm90b3R5cGUuY29tcHV0ZUxheW91dD1mdW5jdGlvbihtLHAscSl7bC5wcm90b3R5cGUuY29tcHV0ZUxheW91dC5jYWxsKHRoaXMsbSxwLApxKTt0aGlzLl9zZXRCb3VuZHModGhpcy5ib3VuZHMoKSk7cmV0dXJuIHRoaXN9O2sucHJvdG90eXBlLl9zZXRCb3VuZHM9ZnVuY3Rpb24obSl7bC5wcm90b3R5cGUuX3NldEJvdW5kcy5jYWxsKHRoaXMse3RvcExlZnQ6e3g6MCx5Om0udG9wTGVmdC55fSxib3R0b21SaWdodDp7eDp0aGlzLndpZHRoKCkseTptLmJvdHRvbVJpZ2h0Lnl9fSl9O2sucHJvdG90eXBlLl9zZXRSZXNpemFibGVDbGFzc2VzPWZ1bmN0aW9uKG0pe20mJnRoaXMuZW5hYmxlZCgpP3RoaXMuYWRkQ2xhc3MoInktcmVzaXphYmxlIik6dGhpcy5yZW1vdmVDbGFzcygieS1yZXNpemFibGUiKX07ay5wcm90b3R5cGUueFNjYWxlPWZ1bmN0aW9uKG0pe2lmKG51bGw9PW0pcmV0dXJuIGwucHJvdG90eXBlLnhTY2FsZS5jYWxsKHRoaXMpO3Rocm93IEVycm9yKCJ4U2NhbGVzIGNhbm5vdCBiZSBzZXQgb24gYW4gWURyYWdCb3hMYXllciIpO307ay5wcm90b3R5cGUueEV4dGVudD1mdW5jdGlvbigpe3JldHVybiBsLnByb3RvdHlwZS54RXh0ZW50LmNhbGwodGhpcyk7CnRocm93IEVycm9yKCJZRHJhZ0JveExheWVyIGhhcyBubyB4RXh0ZW50Iik7fTtyZXR1cm4ga30oZigzMikuRHJhZ0JveExheWVyKTtkLllEcmFnQm94TGF5ZXI9Y30sZnVuY3Rpb24oYyxkLGYpe3ZhciBnPXRoaXMmJnRoaXMuX19leHRlbmRzfHxmdW5jdGlvbihsLGspe2Z1bmN0aW9uIG0oKXt0aGlzLmNvbnN0cnVjdG9yPWx9Zm9yKHZhciBwIGluIGspay5oYXNPd25Qcm9wZXJ0eShwKSYmKGxbcF09a1twXSk7bC5wcm90b3R5cGU9bnVsbD09PWs/T2JqZWN0LmNyZWF0ZShrKToobS5wcm90b3R5cGU9ay5wcm90b3R5cGUsbmV3IG0pfTtjPWZ1bmN0aW9uKGwpe2Z1bmN0aW9uIGsoKXt2YXIgbT1sLmNhbGwodGhpcyl8fHRoaXM7bS5fZXZlbnRUb1Byb2Nlc3NpbmdGdW5jdGlvbltrLl9LRVlET1dOX0VWRU5UX05BTUVdPWZ1bmN0aW9uKHApe3JldHVybiBtLl9wcm9jZXNzS2V5ZG93bihwKX07bS5fZXZlbnRUb1Byb2Nlc3NpbmdGdW5jdGlvbltrLl9LRVlVUF9FVkVOVF9OQU1FXT1mdW5jdGlvbihwKXtyZXR1cm4gbS5fcHJvY2Vzc0tleXVwKHApfTsKcmV0dXJuIG19ZyhrLGwpO2suZ2V0RGlzcGF0Y2hlcj1mdW5jdGlvbigpe3ZhciBtPWRvY3VtZW50W2suX0RJU1BBVENIRVJfS0VZXTtudWxsPT1tJiYobT1uZXcgayxkb2N1bWVudFtrLl9ESVNQQVRDSEVSX0tFWV09bSk7cmV0dXJuIG19O2sucHJvdG90eXBlLl9wcm9jZXNzS2V5ZG93bj1mdW5jdGlvbihtKXt0aGlzLl9jYWxsQ2FsbGJhY2tzRm9yRXZlbnQoay5fS0VZRE9XTl9FVkVOVF9OQU1FLG0ua2V5Q29kZSxtKX07ay5wcm90b3R5cGUuX3Byb2Nlc3NLZXl1cD1mdW5jdGlvbihtKXt0aGlzLl9jYWxsQ2FsbGJhY2tzRm9yRXZlbnQoay5fS0VZVVBfRVZFTlRfTkFNRSxtLmtleUNvZGUsbSl9O2sucHJvdG90eXBlLm9uS2V5RG93bj1mdW5jdGlvbihtKXt0aGlzLl9hZGRDYWxsYmFja0ZvckV2ZW50KGsuX0tFWURPV05fRVZFTlRfTkFNRSxtKX07ay5wcm90b3R5cGUub2ZmS2V5RG93bj1mdW5jdGlvbihtKXt0aGlzLl9yZW1vdmVDYWxsYmFja0ZvckV2ZW50KGsuX0tFWURPV05fRVZFTlRfTkFNRSwKbSl9O2sucHJvdG90eXBlLm9uS2V5VXA9ZnVuY3Rpb24obSl7dGhpcy5fYWRkQ2FsbGJhY2tGb3JFdmVudChrLl9LRVlVUF9FVkVOVF9OQU1FLG0pfTtrLnByb3RvdHlwZS5vZmZLZXlVcD1mdW5jdGlvbihtKXt0aGlzLl9yZW1vdmVDYWxsYmFja0ZvckV2ZW50KGsuX0tFWVVQX0VWRU5UX05BTUUsbSl9O3JldHVybiBrfShmKDI0KS5EaXNwYXRjaGVyKTtjLl9ESVNQQVRDSEVSX0tFWT0iX19QbG90dGFibGVfRGlzcGF0Y2hlcl9LZXkiO2MuX0tFWURPV05fRVZFTlRfTkFNRT0ia2V5ZG93biI7Yy5fS0VZVVBfRVZFTlRfTkFNRT0ia2V5dXAiO2QuS2V5PWN9LGZ1bmN0aW9uKGMsZCxmKXt2YXIgZz10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8ZnVuY3Rpb24oayxtKXtmdW5jdGlvbiBwKCl7dGhpcy5jb25zdHJ1Y3Rvcj1rfWZvcih2YXIgcSBpbiBtKW0uaGFzT3duUHJvcGVydHkocSkmJihrW3FdPW1bcV0pO2sucHJvdG90eXBlPW51bGw9PT1tP09iamVjdC5jcmVhdGUobSk6KHAucHJvdG90eXBlPQptLnByb3RvdHlwZSxuZXcgcCl9LGw9ZigwKTtjPWZ1bmN0aW9uKGspe2Z1bmN0aW9uIG0ocCl7ZnVuY3Rpb24gcSh0KXtyZXR1cm4gci5fbWVhc3VyZUFuZERpc3BhdGNoKHAsdCxtLl9NT1VTRU1PVkVfRVZFTlRfTkFNRSwicGFnZSIpfXZhciByPWsuY2FsbCh0aGlzKXx8dGhpcztyLl9sYXN0TW91c2VQb3NpdGlvbj17eDotMSx5Oi0xfTtyLl90cmFuc2xhdG9yPWwuZ2V0VHJhbnNsYXRvcihwKTtyLl9ldmVudFRvUHJvY2Vzc2luZ0Z1bmN0aW9uW20uX01PVVNFT1ZFUl9FVkVOVF9OQU1FXT1xO3IuX2V2ZW50VG9Qcm9jZXNzaW5nRnVuY3Rpb25bbS5fTU9VU0VNT1ZFX0VWRU5UX05BTUVdPXE7ci5fZXZlbnRUb1Byb2Nlc3NpbmdGdW5jdGlvblttLl9NT1VTRU9VVF9FVkVOVF9OQU1FXT1xO3IuX2V2ZW50VG9Qcm9jZXNzaW5nRnVuY3Rpb25bbS5fTU9VU0VET1dOX0VWRU5UX05BTUVdPWZ1bmN0aW9uKHQpe3JldHVybiByLl9tZWFzdXJlQW5kRGlzcGF0Y2gocCx0LG0uX01PVVNFRE9XTl9FVkVOVF9OQU1FKX07CnIuX2V2ZW50VG9Qcm9jZXNzaW5nRnVuY3Rpb25bbS5fTU9VU0VVUF9FVkVOVF9OQU1FXT1mdW5jdGlvbih0KXtyZXR1cm4gci5fbWVhc3VyZUFuZERpc3BhdGNoKHAsdCxtLl9NT1VTRVVQX0VWRU5UX05BTUUsInBhZ2UiKX07ci5fZXZlbnRUb1Byb2Nlc3NpbmdGdW5jdGlvblttLl9XSEVFTF9FVkVOVF9OQU1FXT1mdW5jdGlvbih0KXtyZXR1cm4gci5fbWVhc3VyZUFuZERpc3BhdGNoKHAsdCxtLl9XSEVFTF9FVkVOVF9OQU1FKX07ci5fZXZlbnRUb1Byb2Nlc3NpbmdGdW5jdGlvblttLl9EQkxDTElDS19FVkVOVF9OQU1FXT1mdW5jdGlvbih0KXtyZXR1cm4gci5fbWVhc3VyZUFuZERpc3BhdGNoKHAsdCxtLl9EQkxDTElDS19FVkVOVF9OQU1FKX07cmV0dXJuIHJ9ZyhtLGspO20uZ2V0RGlzcGF0Y2hlcj1mdW5jdGlvbihwKXt2YXIgcT1wLnJvb3QoKS5yb290RWxlbWVudCgpLHI9cVttLl9ESVNQQVRDSEVSX0tFWV07bnVsbD09ciYmKHI9bmV3IG0ocCkscVttLl9ESVNQQVRDSEVSX0tFWV09CnIpO3JldHVybiByfTttLnByb3RvdHlwZS5vbk1vdXNlTW92ZT1mdW5jdGlvbihwKXt0aGlzLl9hZGRDYWxsYmFja0ZvckV2ZW50KG0uX01PVVNFTU9WRV9FVkVOVF9OQU1FLHApfTttLnByb3RvdHlwZS5vZmZNb3VzZU1vdmU9ZnVuY3Rpb24ocCl7dGhpcy5fcmVtb3ZlQ2FsbGJhY2tGb3JFdmVudChtLl9NT1VTRU1PVkVfRVZFTlRfTkFNRSxwKX07bS5wcm90b3R5cGUub25Nb3VzZURvd249ZnVuY3Rpb24ocCl7dGhpcy5fYWRkQ2FsbGJhY2tGb3JFdmVudChtLl9NT1VTRURPV05fRVZFTlRfTkFNRSxwKX07bS5wcm90b3R5cGUub2ZmTW91c2VEb3duPWZ1bmN0aW9uKHApe3RoaXMuX3JlbW92ZUNhbGxiYWNrRm9yRXZlbnQobS5fTU9VU0VET1dOX0VWRU5UX05BTUUscCl9O20ucHJvdG90eXBlLm9uTW91c2VVcD1mdW5jdGlvbihwKXt0aGlzLl9hZGRDYWxsYmFja0ZvckV2ZW50KG0uX01PVVNFVVBfRVZFTlRfTkFNRSxwKX07bS5wcm90b3R5cGUub2ZmTW91c2VVcD1mdW5jdGlvbihwKXt0aGlzLl9yZW1vdmVDYWxsYmFja0ZvckV2ZW50KG0uX01PVVNFVVBfRVZFTlRfTkFNRSwKcCl9O20ucHJvdG90eXBlLm9uV2hlZWw9ZnVuY3Rpb24ocCl7dGhpcy5fYWRkQ2FsbGJhY2tGb3JFdmVudChtLl9XSEVFTF9FVkVOVF9OQU1FLHApO3JldHVybiB0aGlzfTttLnByb3RvdHlwZS5vZmZXaGVlbD1mdW5jdGlvbihwKXt0aGlzLl9yZW1vdmVDYWxsYmFja0ZvckV2ZW50KG0uX1dIRUVMX0VWRU5UX05BTUUscCl9O20ucHJvdG90eXBlLm9uRGJsQ2xpY2s9ZnVuY3Rpb24ocCl7dGhpcy5fYWRkQ2FsbGJhY2tGb3JFdmVudChtLl9EQkxDTElDS19FVkVOVF9OQU1FLHApfTttLnByb3RvdHlwZS5vZmZEYmxDbGljaz1mdW5jdGlvbihwKXt0aGlzLl9yZW1vdmVDYWxsYmFja0ZvckV2ZW50KG0uX0RCTENMSUNLX0VWRU5UX05BTUUscCl9O20ucHJvdG90eXBlLl9tZWFzdXJlQW5kRGlzcGF0Y2g9ZnVuY3Rpb24ocCxxLHIsdCl7dm9pZCAwPT09dCYmKHQ9ImVsZW1lbnQiKTtpZigicGFnZSIhPT10JiYiZWxlbWVudCIhPT10KXRocm93IEVycm9yKCJJbnZhbGlkIHNjb3BlICciK3QrCiInLCBtdXN0IGJlICdlbGVtZW50JyBvciAncGFnZSciKTtpZigicGFnZSI9PT10fHx0aGlzLmV2ZW50SW5zaWRlKHAscSkpdGhpcy5fbGFzdE1vdXNlUG9zaXRpb249dGhpcy5fdHJhbnNsYXRvci5jb21wdXRlUG9zaXRpb24ocS5jbGllbnRYLHEuY2xpZW50WSksdGhpcy5fY2FsbENhbGxiYWNrc0ZvckV2ZW50KHIsdGhpcy5sYXN0TW91c2VQb3NpdGlvbigpLHEpfTttLnByb3RvdHlwZS5ldmVudEluc2lkZT1mdW5jdGlvbihwLHEpe3JldHVybiBsLlRyYW5zbGF0b3IuaXNFdmVudEluc2lkZShwLHEpfTttLnByb3RvdHlwZS5sYXN0TW91c2VQb3NpdGlvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9sYXN0TW91c2VQb3NpdGlvbn07cmV0dXJuIG19KGYoMjQpLkRpc3BhdGNoZXIpO2MuX0RJU1BBVENIRVJfS0VZPSJfX1Bsb3R0YWJsZV9EaXNwYXRjaGVyX01vdXNlIjtjLl9NT1VTRU9WRVJfRVZFTlRfTkFNRT0ibW91c2VvdmVyIjtjLl9NT1VTRU1PVkVfRVZFTlRfTkFNRT0ibW91c2Vtb3ZlIjsKYy5fTU9VU0VPVVRfRVZFTlRfTkFNRT0ibW91c2VvdXQiO2MuX01PVVNFRE9XTl9FVkVOVF9OQU1FPSJtb3VzZWRvd24iO2MuX01PVVNFVVBfRVZFTlRfTkFNRT0ibW91c2V1cCI7Yy5fV0hFRUxfRVZFTlRfTkFNRT0id2hlZWwiO2MuX0RCTENMSUNLX0VWRU5UX05BTUU9ImRibGNsaWNrIjtkLk1vdXNlPWN9LGZ1bmN0aW9uKGMsZCxmKXt2YXIgZz10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8ZnVuY3Rpb24oayxtKXtmdW5jdGlvbiBwKCl7dGhpcy5jb25zdHJ1Y3Rvcj1rfWZvcih2YXIgcSBpbiBtKW0uaGFzT3duUHJvcGVydHkocSkmJihrW3FdPW1bcV0pO2sucHJvdG90eXBlPW51bGw9PT1tP09iamVjdC5jcmVhdGUobSk6KHAucHJvdG90eXBlPW0ucHJvdG90eXBlLG5ldyBwKX0sbD1mKDApO2M9ZnVuY3Rpb24oayl7ZnVuY3Rpb24gbShwKXt2YXIgcT1rLmNhbGwodGhpcyl8fHRoaXM7cS5fdHJhbnNsYXRvcj1sLmdldFRyYW5zbGF0b3IocCk7cS5fZXZlbnRUb1Byb2Nlc3NpbmdGdW5jdGlvblttLl9UT1VDSFNUQVJUX0VWRU5UX05BTUVdPQpmdW5jdGlvbihyKXtyZXR1cm4gcS5fbWVhc3VyZUFuZERpc3BhdGNoKHAscixtLl9UT1VDSFNUQVJUX0VWRU5UX05BTUUsInBhZ2UiKX07cS5fZXZlbnRUb1Byb2Nlc3NpbmdGdW5jdGlvblttLl9UT1VDSE1PVkVfRVZFTlRfTkFNRV09ZnVuY3Rpb24ocil7cmV0dXJuIHEuX21lYXN1cmVBbmREaXNwYXRjaChwLHIsbS5fVE9VQ0hNT1ZFX0VWRU5UX05BTUUsInBhZ2UiKX07cS5fZXZlbnRUb1Byb2Nlc3NpbmdGdW5jdGlvblttLl9UT1VDSEVORF9FVkVOVF9OQU1FXT1mdW5jdGlvbihyKXtyZXR1cm4gcS5fbWVhc3VyZUFuZERpc3BhdGNoKHAscixtLl9UT1VDSEVORF9FVkVOVF9OQU1FLCJwYWdlIil9O3EuX2V2ZW50VG9Qcm9jZXNzaW5nRnVuY3Rpb25bbS5fVE9VQ0hDQU5DRUxfRVZFTlRfTkFNRV09ZnVuY3Rpb24ocil7cmV0dXJuIHEuX21lYXN1cmVBbmREaXNwYXRjaChwLHIsbS5fVE9VQ0hDQU5DRUxfRVZFTlRfTkFNRSwicGFnZSIpfTtyZXR1cm4gcX1nKG0sayk7bS5nZXREaXNwYXRjaGVyPQpmdW5jdGlvbihwKXt2YXIgcT1wLnJvb3QoKS5yb290RWxlbWVudCgpLHI9cVttLl9ESVNQQVRDSEVSX0tFWV07bnVsbD09ciYmKHI9bmV3IG0ocCkscVttLl9ESVNQQVRDSEVSX0tFWV09cik7cmV0dXJuIHJ9O20ucHJvdG90eXBlLm9uVG91Y2hTdGFydD1mdW5jdGlvbihwKXt0aGlzLl9hZGRDYWxsYmFja0ZvckV2ZW50KG0uX1RPVUNIU1RBUlRfRVZFTlRfTkFNRSxwKX07bS5wcm90b3R5cGUub2ZmVG91Y2hTdGFydD1mdW5jdGlvbihwKXt0aGlzLl9yZW1vdmVDYWxsYmFja0ZvckV2ZW50KG0uX1RPVUNIU1RBUlRfRVZFTlRfTkFNRSxwKX07bS5wcm90b3R5cGUub25Ub3VjaE1vdmU9ZnVuY3Rpb24ocCl7dGhpcy5fYWRkQ2FsbGJhY2tGb3JFdmVudChtLl9UT1VDSE1PVkVfRVZFTlRfTkFNRSxwKX07bS5wcm90b3R5cGUub2ZmVG91Y2hNb3ZlPWZ1bmN0aW9uKHApe3RoaXMuX3JlbW92ZUNhbGxiYWNrRm9yRXZlbnQobS5fVE9VQ0hNT1ZFX0VWRU5UX05BTUUscCl9O20ucHJvdG90eXBlLm9uVG91Y2hFbmQ9CmZ1bmN0aW9uKHApe3RoaXMuX2FkZENhbGxiYWNrRm9yRXZlbnQobS5fVE9VQ0hFTkRfRVZFTlRfTkFNRSxwKX07bS5wcm90b3R5cGUub2ZmVG91Y2hFbmQ9ZnVuY3Rpb24ocCl7dGhpcy5fcmVtb3ZlQ2FsbGJhY2tGb3JFdmVudChtLl9UT1VDSEVORF9FVkVOVF9OQU1FLHApfTttLnByb3RvdHlwZS5vblRvdWNoQ2FuY2VsPWZ1bmN0aW9uKHApe3RoaXMuX2FkZENhbGxiYWNrRm9yRXZlbnQobS5fVE9VQ0hDQU5DRUxfRVZFTlRfTkFNRSxwKX07bS5wcm90b3R5cGUub2ZmVG91Y2hDYW5jZWw9ZnVuY3Rpb24ocCl7dGhpcy5fcmVtb3ZlQ2FsbGJhY2tGb3JFdmVudChtLl9UT1VDSENBTkNFTF9FVkVOVF9OQU1FLHApfTttLnByb3RvdHlwZS5fbWVhc3VyZUFuZERpc3BhdGNoPWZ1bmN0aW9uKHAscSxyLHQpe3ZvaWQgMD09PXQmJih0PSJlbGVtZW50Iik7aWYoInBhZ2UiIT09dCYmImVsZW1lbnQiIT09dCl0aHJvdyBFcnJvcigiSW52YWxpZCBzY29wZSAnIit0KyInLCBtdXN0IGJlICdlbGVtZW50JyBvciAncGFnZSciKTsKaWYoImVsZW1lbnQiIT09dHx8dGhpcy5ldmVudEluc2lkZShwLHEpKXtwPXEuY2hhbmdlZFRvdWNoZXM7dD17fTtmb3IodmFyIHY9W10sQT0wO0E8cC5sZW5ndGg7QSsrKXt2YXIgeT1wW0FdLHg9eS5pZGVudGlmaWVyO3k9dGhpcy5fdHJhbnNsYXRvci5jb21wdXRlUG9zaXRpb24oeS5jbGllbnRYLHkuY2xpZW50WSk7bnVsbCE9eSYmKHRbeF09eSx2LnB1c2goeCkpfTA8di5sZW5ndGgmJnRoaXMuX2NhbGxDYWxsYmFja3NGb3JFdmVudChyLHYsdCxxKX19O20ucHJvdG90eXBlLmV2ZW50SW5zaWRlPWZ1bmN0aW9uKHAscSl7cmV0dXJuIGwuVHJhbnNsYXRvci5pc0V2ZW50SW5zaWRlKHAscSl9O3JldHVybiBtfShmKDI0KS5EaXNwYXRjaGVyKTtjLl9ESVNQQVRDSEVSX0tFWT0iX19QbG90dGFibGVfRGlzcGF0Y2hlcl9Ub3VjaCI7Yy5fVE9VQ0hTVEFSVF9FVkVOVF9OQU1FPSJ0b3VjaHN0YXJ0IjtjLl9UT1VDSE1PVkVfRVZFTlRfTkFNRT0idG91Y2htb3ZlIjtjLl9UT1VDSEVORF9FVkVOVF9OQU1FPQoidG91Y2hlbmQiO2MuX1RPVUNIQ0FOQ0VMX0VWRU5UX05BTUU9InRvdWNoY2FuY2VsIjtkLlRvdWNoPWN9LGZ1bmN0aW9uKGMsZCl7Yz1mdW5jdGlvbigpe2Z1bmN0aW9uIGYoZyxsLGspe3ZvaWQgMD09PWsmJihrPXdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvKTt0aGlzLnNjcmVlbldpZHRoPWc7dGhpcy5zY3JlZW5IZWlnaHQ9bDt0aGlzLmRldmljZVBpeGVsUmF0aW89azt0aGlzLnBpeGVsV2lkdGg9ZyprO3RoaXMucGl4ZWxIZWlnaHQ9bCprO3RoaXMuY2FudmFzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpO3RoaXMuY3R4PXRoaXMuY2FudmFzLmdldENvbnRleHQoIjJkIik7Zi5zaXplUGl4ZWxzKHRoaXMuY3R4LGcsbCxrKX1mLnNpemVQaXhlbHM9ZnVuY3Rpb24oZyxsLGssbSl7dmFyIHA9Zy5jYW52YXM7cC53aWR0aD1sKm07cC5oZWlnaHQ9ayptO3Auc3R5bGUud2lkdGg9bCsicHgiO3Auc3R5bGUuaGVpZ2h0PWsrInB4IjtnLnNldFRyYW5zZm9ybSgxLDAsMCwxLDAsCjApO2cuc2NhbGUobSxtKX07Zi5wcm90b3R5cGUuYmxpdD1mdW5jdGlvbihnLGwsayl7dm9pZCAwPT09bCYmKGw9MCk7dm9pZCAwPT09ayYmKGs9MCk7Zy5kcmF3SW1hZ2UodGhpcy5jYW52YXMsbCxrLHRoaXMuc2NyZWVuV2lkdGgsdGhpcy5zY3JlZW5IZWlnaHQpfTtmLnByb3RvdHlwZS5ibGl0Q2VudGVyPWZ1bmN0aW9uKGcsbCxrKXt2b2lkIDA9PT1sJiYobD0wKTt2b2lkIDA9PT1rJiYoaz0wKTt0aGlzLmJsaXQoZyxNYXRoLmZsb29yKGwtdGhpcy5zY3JlZW5XaWR0aC8yKSxNYXRoLmZsb29yKGstdGhpcy5zY3JlZW5IZWlnaHQvMikpfTtmLnByb3RvdHlwZS5yZXNpemU9ZnVuY3Rpb24oZyxsLGspe3ZvaWQgMD09PWsmJihrPSExKTt2YXIgbT10aGlzLmRldmljZVBpeGVsUmF0aW87dGhpcy5zY3JlZW5XaWR0aD1nO3RoaXMuc2NyZWVuSGVpZ2h0PWw7dGhpcy5waXhlbFdpZHRoPWcqbTt0aGlzLnBpeGVsSGVpZ2h0PWwqbTtmLnNpemVQaXhlbHModGhpcy5jdHgsZyxsLG0pO2smJgp0aGlzLmN0eC50cmFuc2xhdGUoZy8yLGcvMik7cmV0dXJuIHRoaXN9O2YucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKGcpe3ZhciBsPXRoaXMucGl4ZWxXaWR0aCxrPXRoaXMucGl4ZWxIZWlnaHQsbT10aGlzLmN0eDttLnNhdmUoKTttLnNldFRyYW5zZm9ybSgxLDAsMCwxLDAsMCk7bnVsbD09Zz9tLmNsZWFyUmVjdCgwLDAsbCxrKToobS5maWxsU3R5bGU9ZyxtLmZpbGxSZWN0KDAsMCxsLGspKTttLnJlc3RvcmUoKTtyZXR1cm4gdGhpc307Zi5wcm90b3R5cGUuZ2V0SW1hZ2VEYXRhPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3R4LmdldEltYWdlRGF0YSgwLDAsdGhpcy5waXhlbFdpZHRoLHRoaXMucGl4ZWxIZWlnaHQpfTtyZXR1cm4gZn0oKTtkLkNhbnZhc0J1ZmZlcj1jfSxmdW5jdGlvbihjLGQsZil7dmFyIGc9dGhpcyYmdGhpcy5fX2V4dGVuZHN8fGZ1bmN0aW9uKG0scCl7ZnVuY3Rpb24gcSgpe3RoaXMuY29uc3RydWN0b3I9bX1mb3IodmFyIHIgaW4gcClwLmhhc093blByb3BlcnR5KHIpJiYKKG1bcl09cFtyXSk7bS5wcm90b3R5cGU9bnVsbD09PXA/T2JqZWN0LmNyZWF0ZShwKToocS5wcm90b3R5cGU9cC5wcm90b3R5cGUsbmV3IHEpfSxsPWYoMTMpLGs9ZigwKTtjPWZ1bmN0aW9uKG0pe2Z1bmN0aW9uIHAoKXt2YXIgcT1udWxsIT09bSYmbS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXM7cS5fY2xpY2tlZERvd249ITE7cS5fZG91YmxlQ2xpY2tpbmc9ITE7cS5fb25DbGlja0NhbGxiYWNrcz1uZXcgay5DYWxsYmFja1NldDtxLl9vbkRvdWJsZUNsaWNrQ2FsbGJhY2tzPW5ldyBrLkNhbGxiYWNrU2V0O3EuX21vdXNlRG93bkNhbGxiYWNrPWZ1bmN0aW9uKHIpe3JldHVybiBxLl9oYW5kbGVDbGlja0Rvd24ocil9O3EuX21vdXNlVXBDYWxsYmFjaz1mdW5jdGlvbihyLHQpe3JldHVybiBxLl9oYW5kbGVDbGlja1VwKHIsdCl9O3EuX2RibENsaWNrQ2FsbGJhY2s9ZnVuY3Rpb24ocix0KXtyZXR1cm4gcS5faGFuZGxlRGJsQ2xpY2socix0KX07cS5fdG91Y2hTdGFydENhbGxiYWNrPQpmdW5jdGlvbihyLHQpe3JldHVybiBxLl9oYW5kbGVDbGlja0Rvd24odFtyWzBdXSl9O3EuX3RvdWNoRW5kQ2FsbGJhY2s9ZnVuY3Rpb24ocix0LHYpe3JldHVybiBxLl9oYW5kbGVDbGlja1VwKHRbclswXV0sdil9O3EuX3RvdWNoQ2FuY2VsQ2FsbGJhY2s9ZnVuY3Rpb24oKXtyZXR1cm4gcS5fY2xpY2tlZERvd249ITF9O3JldHVybiBxfWcocCxtKTtwLnByb3RvdHlwZS5fYW5jaG9yPWZ1bmN0aW9uKHEpe20ucHJvdG90eXBlLl9hbmNob3IuY2FsbCh0aGlzLHEpO3RoaXMuX21vdXNlRGlzcGF0Y2hlcj1sLk1vdXNlLmdldERpc3BhdGNoZXIocSk7dGhpcy5fbW91c2VEaXNwYXRjaGVyLm9uTW91c2VEb3duKHRoaXMuX21vdXNlRG93bkNhbGxiYWNrKTt0aGlzLl9tb3VzZURpc3BhdGNoZXIub25Nb3VzZVVwKHRoaXMuX21vdXNlVXBDYWxsYmFjayk7dGhpcy5fbW91c2VEaXNwYXRjaGVyLm9uRGJsQ2xpY2sodGhpcy5fZGJsQ2xpY2tDYWxsYmFjayk7dGhpcy5fdG91Y2hEaXNwYXRjaGVyPQpsLlRvdWNoLmdldERpc3BhdGNoZXIocSk7dGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9uVG91Y2hTdGFydCh0aGlzLl90b3VjaFN0YXJ0Q2FsbGJhY2spO3RoaXMuX3RvdWNoRGlzcGF0Y2hlci5vblRvdWNoRW5kKHRoaXMuX3RvdWNoRW5kQ2FsbGJhY2spO3RoaXMuX3RvdWNoRGlzcGF0Y2hlci5vblRvdWNoQ2FuY2VsKHRoaXMuX3RvdWNoQ2FuY2VsQ2FsbGJhY2spfTtwLnByb3RvdHlwZS5fdW5hbmNob3I9ZnVuY3Rpb24oKXttLnByb3RvdHlwZS5fdW5hbmNob3IuY2FsbCh0aGlzKTt0aGlzLl9tb3VzZURpc3BhdGNoZXIub2ZmTW91c2VEb3duKHRoaXMuX21vdXNlRG93bkNhbGxiYWNrKTt0aGlzLl9tb3VzZURpc3BhdGNoZXIub2ZmTW91c2VVcCh0aGlzLl9tb3VzZVVwQ2FsbGJhY2spO3RoaXMuX21vdXNlRGlzcGF0Y2hlci5vZmZEYmxDbGljayh0aGlzLl9kYmxDbGlja0NhbGxiYWNrKTt0aGlzLl9tb3VzZURpc3BhdGNoZXI9bnVsbDt0aGlzLl90b3VjaERpc3BhdGNoZXIub2ZmVG91Y2hTdGFydCh0aGlzLl90b3VjaFN0YXJ0Q2FsbGJhY2spOwp0aGlzLl90b3VjaERpc3BhdGNoZXIub2ZmVG91Y2hFbmQodGhpcy5fdG91Y2hFbmRDYWxsYmFjayk7dGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9mZlRvdWNoQ2FuY2VsKHRoaXMuX3RvdWNoQ2FuY2VsQ2FsbGJhY2spO3RoaXMuX3RvdWNoRGlzcGF0Y2hlcj1udWxsfTtwLnByb3RvdHlwZS5faGFuZGxlQ2xpY2tEb3duPWZ1bmN0aW9uKHEpe3E9dGhpcy5fdHJhbnNsYXRlVG9Db21wb25lbnRTcGFjZShxKTt0aGlzLl9pc0luc2lkZUNvbXBvbmVudChxKSYmKHRoaXMuX2NsaWNrZWREb3duPSEwLHRoaXMuX2NsaWNrZWRQb2ludD1xKX07cC5wcm90b3R5cGUuX2hhbmRsZUNsaWNrVXA9ZnVuY3Rpb24ocSxyKXt2YXIgdD10aGlzLHY9dGhpcy5fdHJhbnNsYXRlVG9Db21wb25lbnRTcGFjZShxKTt0aGlzLl9jbGlja2VkRG93biYmcC5fcG9pbnRzRXF1YWwodix0aGlzLl9jbGlja2VkUG9pbnQpJiZzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dC5fZG91YmxlQ2xpY2tpbmd8fHQuX29uQ2xpY2tDYWxsYmFja3MuY2FsbENhbGxiYWNrcyh2LApyKX0sMCk7dGhpcy5fY2xpY2tlZERvd249ITF9O3AucHJvdG90eXBlLl9oYW5kbGVEYmxDbGljaz1mdW5jdGlvbihxLHIpe3ZhciB0PXRoaXM7cT10aGlzLl90cmFuc2xhdGVUb0NvbXBvbmVudFNwYWNlKHEpO3RoaXMuX2RvdWJsZUNsaWNraW5nPSEwO3RoaXMuX29uRG91YmxlQ2xpY2tDYWxsYmFja3MuY2FsbENhbGxiYWNrcyhxLHIpO3NldFRpbWVvdXQoZnVuY3Rpb24oKXtyZXR1cm4gdC5fZG91YmxlQ2xpY2tpbmc9ITF9LDApfTtwLl9wb2ludHNFcXVhbD1mdW5jdGlvbihxLHIpe3JldHVybiBxLng9PT1yLngmJnEueT09PXIueX07cC5wcm90b3R5cGUub25DbGljaz1mdW5jdGlvbihxKXt0aGlzLl9vbkNsaWNrQ2FsbGJhY2tzLmFkZChxKTtyZXR1cm4gdGhpc307cC5wcm90b3R5cGUub2ZmQ2xpY2s9ZnVuY3Rpb24ocSl7dGhpcy5fb25DbGlja0NhbGxiYWNrcy5kZWxldGUocSl9O3AucHJvdG90eXBlLm9uRG91YmxlQ2xpY2s9ZnVuY3Rpb24ocSl7dGhpcy5fb25Eb3VibGVDbGlja0NhbGxiYWNrcy5hZGQocSl9OwpwLnByb3RvdHlwZS5vZmZEb3VibGVDbGljaz1mdW5jdGlvbihxKXt0aGlzLl9vbkRvdWJsZUNsaWNrQ2FsbGJhY2tzLmRlbGV0ZShxKTtyZXR1cm4gdGhpc307cmV0dXJuIHB9KGYoMTUpLkludGVyYWN0aW9uKTtkLkNsaWNrPWN9LGZ1bmN0aW9uKGMsZCxmKXt2YXIgZz10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8ZnVuY3Rpb24obSxwKXtmdW5jdGlvbiBxKCl7dGhpcy5jb25zdHJ1Y3Rvcj1tfWZvcih2YXIgciBpbiBwKXAuaGFzT3duUHJvcGVydHkocikmJihtW3JdPXBbcl0pO20ucHJvdG90eXBlPW51bGw9PT1wP09iamVjdC5jcmVhdGUocCk6KHEucHJvdG90eXBlPXAucHJvdG90eXBlLG5ldyBxKX0sbD1mKDEzKSxrPWYoMCk7Yz1mdW5jdGlvbihtKXtmdW5jdGlvbiBwKCl7dmFyIHE9bnVsbCE9PW0mJm0uYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzO3EuX2RyYWdnaW5nPSExO3EuX2NvbnN0cmFpbmVkVG9Db21wb25lbnQ9ITA7cS5fbW91c2VGaWx0ZXI9cC5fREVGQVVMVF9NT1VTRV9GSUxURVI7CnEuX2RyYWdTdGFydENhbGxiYWNrcz1uZXcgay5DYWxsYmFja1NldDtxLl9kcmFnQ2FsbGJhY2tzPW5ldyBrLkNhbGxiYWNrU2V0O3EuX2RyYWdFbmRDYWxsYmFja3M9bmV3IGsuQ2FsbGJhY2tTZXQ7cS5fbW91c2VEb3duQ2FsbGJhY2s9ZnVuY3Rpb24ocix0KXtyZXR1cm4gcS5fc3RhcnREcmFnKHIsdCl9O3EuX21vdXNlTW92ZUNhbGxiYWNrPWZ1bmN0aW9uKHIpe3JldHVybiBxLl9kb0RyYWcocil9O3EuX21vdXNlVXBDYWxsYmFjaz1mdW5jdGlvbihyLHQpe3JldHVybiBxLl9lbmREcmFnKHIsdCl9O3EuX3RvdWNoU3RhcnRDYWxsYmFjaz1mdW5jdGlvbihyLHQsdil7cmV0dXJuIHEuX3N0YXJ0RHJhZyh0W3JbMF1dLHYpfTtxLl90b3VjaE1vdmVDYWxsYmFjaz1mdW5jdGlvbihyLHQpe3JldHVybiBxLl9kb0RyYWcodFtyWzBdXSl9O3EuX3RvdWNoRW5kQ2FsbGJhY2s9ZnVuY3Rpb24ocix0LHYpe3JldHVybiBxLl9lbmREcmFnKHRbclswXV0sdil9O3JldHVybiBxfWcocCxtKTtwLnByb3RvdHlwZS5fYW5jaG9yPQpmdW5jdGlvbihxKXttLnByb3RvdHlwZS5fYW5jaG9yLmNhbGwodGhpcyxxKTt0aGlzLl9tb3VzZURpc3BhdGNoZXI9bC5Nb3VzZS5nZXREaXNwYXRjaGVyKHRoaXMuX2NvbXBvbmVudEF0dGFjaGVkVG8pO3RoaXMuX21vdXNlRGlzcGF0Y2hlci5vbk1vdXNlRG93bih0aGlzLl9tb3VzZURvd25DYWxsYmFjayk7dGhpcy5fbW91c2VEaXNwYXRjaGVyLm9uTW91c2VNb3ZlKHRoaXMuX21vdXNlTW92ZUNhbGxiYWNrKTt0aGlzLl9tb3VzZURpc3BhdGNoZXIub25Nb3VzZVVwKHRoaXMuX21vdXNlVXBDYWxsYmFjayk7dGhpcy5fdG91Y2hEaXNwYXRjaGVyPWwuVG91Y2guZ2V0RGlzcGF0Y2hlcih0aGlzLl9jb21wb25lbnRBdHRhY2hlZFRvKTt0aGlzLl90b3VjaERpc3BhdGNoZXIub25Ub3VjaFN0YXJ0KHRoaXMuX3RvdWNoU3RhcnRDYWxsYmFjayk7dGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9uVG91Y2hNb3ZlKHRoaXMuX3RvdWNoTW92ZUNhbGxiYWNrKTt0aGlzLl90b3VjaERpc3BhdGNoZXIub25Ub3VjaEVuZCh0aGlzLl90b3VjaEVuZENhbGxiYWNrKX07CnAucHJvdG90eXBlLl91bmFuY2hvcj1mdW5jdGlvbigpe20ucHJvdG90eXBlLl91bmFuY2hvci5jYWxsKHRoaXMpO3RoaXMuX21vdXNlRGlzcGF0Y2hlci5vZmZNb3VzZURvd24odGhpcy5fbW91c2VEb3duQ2FsbGJhY2spO3RoaXMuX21vdXNlRGlzcGF0Y2hlci5vZmZNb3VzZU1vdmUodGhpcy5fbW91c2VNb3ZlQ2FsbGJhY2spO3RoaXMuX21vdXNlRGlzcGF0Y2hlci5vZmZNb3VzZVVwKHRoaXMuX21vdXNlVXBDYWxsYmFjayk7dGhpcy5fbW91c2VEaXNwYXRjaGVyPW51bGw7dGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9mZlRvdWNoU3RhcnQodGhpcy5fdG91Y2hTdGFydENhbGxiYWNrKTt0aGlzLl90b3VjaERpc3BhdGNoZXIub2ZmVG91Y2hNb3ZlKHRoaXMuX3RvdWNoTW92ZUNhbGxiYWNrKTt0aGlzLl90b3VjaERpc3BhdGNoZXIub2ZmVG91Y2hFbmQodGhpcy5fdG91Y2hFbmRDYWxsYmFjayk7dGhpcy5fdG91Y2hEaXNwYXRjaGVyPW51bGx9O3AucHJvdG90eXBlLl90cmFuc2xhdGVBbmRDb25zdHJhaW49CmZ1bmN0aW9uKHEpe3E9dGhpcy5fdHJhbnNsYXRlVG9Db21wb25lbnRTcGFjZShxKTtyZXR1cm4gdGhpcy5fY29uc3RyYWluZWRUb0NvbXBvbmVudD97eDprLk1hdGguY2xhbXAocS54LDAsdGhpcy5fY29tcG9uZW50QXR0YWNoZWRUby53aWR0aCgpKSx5OmsuTWF0aC5jbGFtcChxLnksMCx0aGlzLl9jb21wb25lbnRBdHRhY2hlZFRvLmhlaWdodCgpKX06cX07cC5wcm90b3R5cGUuX3N0YXJ0RHJhZz1mdW5jdGlvbihxLHIpe3IgaW5zdGFuY2VvZiBNb3VzZUV2ZW50JiYhdGhpcy5fbW91c2VGaWx0ZXIocil8fChxPXRoaXMuX3RyYW5zbGF0ZVRvQ29tcG9uZW50U3BhY2UocSksdGhpcy5faXNJbnNpZGVDb21wb25lbnQocSkmJihyLnByZXZlbnREZWZhdWx0KCksdGhpcy5fZHJhZ2dpbmc9ITAsdGhpcy5fZHJhZ09yaWdpbj1xLHRoaXMuX2RyYWdTdGFydENhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKHRoaXMuX2RyYWdPcmlnaW4pKSl9O3AucHJvdG90eXBlLl9kb0RyYWc9ZnVuY3Rpb24ocSl7dGhpcy5fZHJhZ2dpbmcmJgp0aGlzLl9kcmFnQ2FsbGJhY2tzLmNhbGxDYWxsYmFja3ModGhpcy5fZHJhZ09yaWdpbix0aGlzLl90cmFuc2xhdGVBbmRDb25zdHJhaW4ocSkpfTtwLnByb3RvdHlwZS5fZW5kRHJhZz1mdW5jdGlvbihxLHIpe3IgaW5zdGFuY2VvZiBNb3VzZUV2ZW50JiYwIT09ci5idXR0b258fCF0aGlzLl9kcmFnZ2luZ3x8KHRoaXMuX2RyYWdnaW5nPSExLHRoaXMuX2RyYWdFbmRDYWxsYmFja3MuY2FsbENhbGxiYWNrcyh0aGlzLl9kcmFnT3JpZ2luLHRoaXMuX3RyYW5zbGF0ZUFuZENvbnN0cmFpbihxKSkpfTtwLnByb3RvdHlwZS5jb25zdHJhaW5lZFRvQ29tcG9uZW50PWZ1bmN0aW9uKCl7dGhpcy5fY29uc3RyYWluZWRUb0NvbXBvbmVudD0hMX07cC5wcm90b3R5cGUubW91c2VGaWx0ZXI9ZnVuY3Rpb24ocSl7MCE9PWFyZ3VtZW50cy5sZW5ndGgmJih0aGlzLl9tb3VzZUZpbHRlcj1xKX07cC5wcm90b3R5cGUub25EcmFnU3RhcnQ9ZnVuY3Rpb24ocSl7dGhpcy5fZHJhZ1N0YXJ0Q2FsbGJhY2tzLmFkZChxKX07CnAucHJvdG90eXBlLm9mZkRyYWdTdGFydD1mdW5jdGlvbihxKXt0aGlzLl9kcmFnU3RhcnRDYWxsYmFja3MuZGVsZXRlKHEpfTtwLnByb3RvdHlwZS5vbkRyYWc9ZnVuY3Rpb24ocSl7dGhpcy5fZHJhZ0NhbGxiYWNrcy5hZGQocSk7cmV0dXJuIHRoaXN9O3AucHJvdG90eXBlLm9mZkRyYWc9ZnVuY3Rpb24ocSl7dGhpcy5fZHJhZ0NhbGxiYWNrcy5kZWxldGUocSl9O3AucHJvdG90eXBlLm9uRHJhZ0VuZD1mdW5jdGlvbihxKXt0aGlzLl9kcmFnRW5kQ2FsbGJhY2tzLmFkZChxKX07cC5wcm90b3R5cGUub2ZmRHJhZ0VuZD1mdW5jdGlvbihxKXt0aGlzLl9kcmFnRW5kQ2FsbGJhY2tzLmRlbGV0ZShxKX07cmV0dXJuIHB9KGYoMTUpLkludGVyYWN0aW9uKTtjLl9ERUZBVUxUX01PVVNFX0ZJTFRFUj1mdW5jdGlvbihtKXtyZXR1cm4gMD09PW0uYnV0dG9ufTtkLkRyYWc9Y30sZnVuY3Rpb24oYyxkLGYpe3ZhciBnPXRoaXMmJnRoaXMuX19leHRlbmRzfHxmdW5jdGlvbih0LHYpe2Z1bmN0aW9uIEEoKXt0aGlzLmNvbnN0cnVjdG9yPQp0fWZvcih2YXIgeSBpbiB2KXYuaGFzT3duUHJvcGVydHkoeSkmJih0W3ldPXZbeV0pO3QucHJvdG90eXBlPW51bGw9PT12P09iamVjdC5jcmVhdGUodik6KEEucHJvdG90eXBlPXYucHJvdG90eXBlLG5ldyBBKX0sbD1mKDEpLGs9ZigxMyksbT1mKDMpLHA9ZigwKSxxPWYoMjUpO2M9ZigxNSk7dmFyIHI9ZigyNik7Zj1mdW5jdGlvbih0KXtmdW5jdGlvbiB2KEEseSl7dmFyIHg9dC5jYWxsKHRoaXMpfHx0aGlzO3guX3doZWVsRmlsdGVyPWZ1bmN0aW9uKCl7cmV0dXJuITB9O3guX3doZWVsQ2FsbGJhY2s9ZnVuY3Rpb24oQyxGKXtyZXR1cm4geC5faGFuZGxlV2hlZWxFdmVudChDLEYpfTt4Ll90b3VjaFN0YXJ0Q2FsbGJhY2s9ZnVuY3Rpb24oQyxGKXtyZXR1cm4geC5faGFuZGxlVG91Y2hTdGFydChDLEYpfTt4Ll90b3VjaE1vdmVDYWxsYmFjaz1mdW5jdGlvbihDLEYpe3JldHVybiB4Ll9oYW5kbGVQaW5jaChDLEYpfTt4Ll90b3VjaEVuZENhbGxiYWNrPWZ1bmN0aW9uKEMpe3JldHVybiB4Ll9oYW5kbGVUb3VjaEVuZChDKX07CnguX3RvdWNoQ2FuY2VsQ2FsbGJhY2s9ZnVuY3Rpb24oQyl7cmV0dXJuIHguX2hhbmRsZVRvdWNoRW5kKEMpfTt4Ll9wYW5FbmRDYWxsYmFja3M9bmV3IHAuQ2FsbGJhY2tTZXQ7eC5fem9vbUVuZENhbGxiYWNrcz1uZXcgcC5DYWxsYmFja1NldDt4Ll9wYW5ab29tVXBkYXRlQ2FsbGJhY2tzPW5ldyBwLkNhbGxiYWNrU2V0O3guX3hTY2FsZXM9bmV3IHAuU2V0O3guX3lTY2FsZXM9bmV3IHAuU2V0O3guX2RyYWdJbnRlcmFjdGlvbj1uZXcgcS5EcmFnO3guX3NldHVwRHJhZ0ludGVyYWN0aW9uKCk7eC5fdG91Y2hJZHM9bC5tYXAoKTt4Ll9taW5Eb21haW5FeHRlbnRzPW5ldyBwLk1hcDt4Ll9tYXhEb21haW5FeHRlbnRzPW5ldyBwLk1hcDt4Ll9taW5Eb21haW5WYWx1ZXM9bmV3IHAuTWFwO3guX21heERvbWFpblZhbHVlcz1uZXcgcC5NYXA7bnVsbCE9QSYmeC5hZGRYU2NhbGUoQSk7bnVsbCE9eSYmeC5hZGRZU2NhbGUoeSk7cmV0dXJuIHh9Zyh2LHQpO3YucHJvdG90eXBlLmRyYWdJbnRlcmFjdGlvbj0KZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZHJhZ0ludGVyYWN0aW9ufTt2LnByb3RvdHlwZS53aGVlbEZpbHRlcj1mdW5jdGlvbihBKXswIT09YXJndW1lbnRzLmxlbmd0aCYmKHRoaXMuX3doZWVsRmlsdGVyPUEpfTt2LnByb3RvdHlwZS5wYW49ZnVuY3Rpb24oQSl7dmFyIHk9dGhpczt0aGlzLnhTY2FsZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKHgpe3gucGFuKHkuX2NvbnN0cmFpbmVkVHJhbnNsYXRpb24oeCxBLngpKX0pO3RoaXMueVNjYWxlcygpLmZvckVhY2goZnVuY3Rpb24oeCl7eC5wYW4oeS5fY29uc3RyYWluZWRUcmFuc2xhdGlvbih4LEEueSkpfSk7dGhpcy5fcGFuWm9vbVVwZGF0ZUNhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKCl9O3YucHJvdG90eXBlLnpvb209ZnVuY3Rpb24oQSx5LHgpe3ZhciBDPXRoaXM7dm9pZCAwPT09eCYmKHg9ITApO2lmKG51bGwhPXkpe3ZhciBGPXkueDt2YXIgRD15Lnk7eCYmKHRoaXMueFNjYWxlcygpLmZvckVhY2goZnVuY3Rpb24oQil7Qj1DLl9jb25zdHJhaW5lZFpvb20oQiwKQSxGKTtGPUIuY2VudGVyUG9pbnQ7QT1CLnpvb21BbW91bnR9KSx0aGlzLnlTY2FsZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKEIpe0I9Qy5fY29uc3RyYWluZWRab29tKEIsQSxEKTtEPUIuY2VudGVyUG9pbnQ7QT1CLnpvb21BbW91bnR9KSl9dGhpcy54U2NhbGVzKCkuZm9yRWFjaChmdW5jdGlvbihCKXt2YXIgRz1CLnJhbmdlKCk7Qi56b29tKEEsbnVsbD09Rj8oR1sxXStHWzBdKS8yOkYpfSk7dGhpcy55U2NhbGVzKCkuZm9yRWFjaChmdW5jdGlvbihCKXt2YXIgRz1CLnJhbmdlKCk7Qi56b29tKEEsbnVsbD09RD8oR1sxXStHWzBdKS8yOkQpfSk7dGhpcy5fcGFuWm9vbVVwZGF0ZUNhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKCk7cmV0dXJue3pvb21BbW91bnQ6QSxjZW50ZXJWYWx1ZTp7Y2VudGVyWDpGLGNlbnRlclk6RH19fTt2LnByb3RvdHlwZS5fYW5jaG9yPWZ1bmN0aW9uKEEpe3QucHJvdG90eXBlLl9hbmNob3IuY2FsbCh0aGlzLEEpO3RoaXMuX2RyYWdJbnRlcmFjdGlvbi5hdHRhY2hUbyhBKTsKdGhpcy5fbW91c2VEaXNwYXRjaGVyPWsuTW91c2UuZ2V0RGlzcGF0Y2hlcih0aGlzLl9jb21wb25lbnRBdHRhY2hlZFRvKTt0aGlzLl9tb3VzZURpc3BhdGNoZXIub25XaGVlbCh0aGlzLl93aGVlbENhbGxiYWNrKTt0aGlzLl90b3VjaERpc3BhdGNoZXI9ay5Ub3VjaC5nZXREaXNwYXRjaGVyKHRoaXMuX2NvbXBvbmVudEF0dGFjaGVkVG8pO3RoaXMuX3RvdWNoRGlzcGF0Y2hlci5vblRvdWNoU3RhcnQodGhpcy5fdG91Y2hTdGFydENhbGxiYWNrKTt0aGlzLl90b3VjaERpc3BhdGNoZXIub25Ub3VjaE1vdmUodGhpcy5fdG91Y2hNb3ZlQ2FsbGJhY2spO3RoaXMuX3RvdWNoRGlzcGF0Y2hlci5vblRvdWNoRW5kKHRoaXMuX3RvdWNoRW5kQ2FsbGJhY2spO3RoaXMuX3RvdWNoRGlzcGF0Y2hlci5vblRvdWNoQ2FuY2VsKHRoaXMuX3RvdWNoQ2FuY2VsQ2FsbGJhY2spfTt2LnByb3RvdHlwZS5fdW5hbmNob3I9ZnVuY3Rpb24oKXt0LnByb3RvdHlwZS5fdW5hbmNob3IuY2FsbCh0aGlzKTt0aGlzLl9tb3VzZURpc3BhdGNoZXIub2ZmV2hlZWwodGhpcy5fd2hlZWxDYWxsYmFjayk7CnRoaXMuX21vdXNlRGlzcGF0Y2hlcj1udWxsO3RoaXMuX3RvdWNoRGlzcGF0Y2hlci5vZmZUb3VjaFN0YXJ0KHRoaXMuX3RvdWNoU3RhcnRDYWxsYmFjayk7dGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9mZlRvdWNoTW92ZSh0aGlzLl90b3VjaE1vdmVDYWxsYmFjayk7dGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9mZlRvdWNoRW5kKHRoaXMuX3RvdWNoRW5kQ2FsbGJhY2spO3RoaXMuX3RvdWNoRGlzcGF0Y2hlci5vZmZUb3VjaENhbmNlbCh0aGlzLl90b3VjaENhbmNlbENhbGxiYWNrKTt0aGlzLl90b3VjaERpc3BhdGNoZXI9bnVsbDt0aGlzLl9kcmFnSW50ZXJhY3Rpb24uZGV0YWNoKCl9O3YucHJvdG90eXBlLl9oYW5kbGVUb3VjaFN0YXJ0PWZ1bmN0aW9uKEEseSl7Zm9yKHZhciB4PTA7eDxBLmxlbmd0aCYmMj50aGlzLl90b3VjaElkcy5zaXplKCk7eCsrKXt2YXIgQz1BW3hdO3RoaXMuX3RvdWNoSWRzLnNldChDLnRvU3RyaW5nKCksdGhpcy5fdHJhbnNsYXRlVG9Db21wb25lbnRTcGFjZSh5W0NdKSl9fTsKdi5wcm90b3R5cGUuX2hhbmRsZVBpbmNoPWZ1bmN0aW9uKEEseSl7dmFyIHg9dGhpcztpZighKDI+dGhpcy5fdG91Y2hJZHMuc2l6ZSgpKSl7dmFyIEM9dGhpcy5fdG91Y2hJZHMudmFsdWVzKCk7aWYodGhpcy5faXNJbnNpZGVDb21wb25lbnQodGhpcy5fdHJhbnNsYXRlVG9Db21wb25lbnRTcGFjZShDWzBdKSkmJnRoaXMuX2lzSW5zaWRlQ29tcG9uZW50KHRoaXMuX3RyYW5zbGF0ZVRvQ29tcG9uZW50U3BhY2UoQ1sxXSkpKXt2YXIgRj12Ll9wb2ludERpc3RhbmNlKENbMF0sQ1sxXSk7aWYoMCE9PUYpe0EuZm9yRWFjaChmdW5jdGlvbihMKXt4Ll90b3VjaElkcy5oYXMoTC50b1N0cmluZygpKSYmeC5fdG91Y2hJZHMuc2V0KEwudG9TdHJpbmcoKSx4Ll90cmFuc2xhdGVUb0NvbXBvbmVudFNwYWNlKHlbTF0pKX0pO0E9dGhpcy5fdG91Y2hJZHMudmFsdWVzKCk7dmFyIEQ9di5fcG9pbnREaXN0YW5jZShBWzBdLEFbMV0pO2lmKDAhPT1EKXt2YXIgQj1GL0QsRz1BLm1hcChmdW5jdGlvbihMLApKKXtyZXR1cm57eDooTC54LUNbSl0ueCkvQix5OihMLnktQ1tKXS55KS9CfX0pO0Y9di5jZW50ZXJQb2ludChDWzBdLENbMV0pO0Y9dGhpcy56b29tKEIsRik7QT1GLmNlbnRlclZhbHVlO3ZhciBLPUYuem9vbUFtb3VudDtGPUEuY2VudGVyWDtBPUEuY2VudGVyWTtEPUMubWFwKGZ1bmN0aW9uKEwsSil7cmV0dXJue3g6R1tKXS54KksrTC54LHk6R1tKXS55KksrTC55fX0pO3RoaXMucGFuKHt4OkYtKERbMF0ueCtEWzFdLngpLzIseTpBLShEWzBdLnkrRFsxXS55KS8yfSl9fX19fTt2LmNlbnRlclBvaW50PWZ1bmN0aW9uKEEseSl7cmV0dXJue3g6KE1hdGgubWluKEEueCx5LngpK01hdGgubWF4KEEueCx5LngpKS8yLHk6KE1hdGgubWF4KEEueSx5LnkpK01hdGgubWluKEEueSx5LnkpKS8yfX07di5fcG9pbnREaXN0YW5jZT1mdW5jdGlvbihBLHkpe3JldHVybiBNYXRoLnNxcnQoTWF0aC5wb3coTWF0aC5tYXgoQS54LHkueCktTWF0aC5taW4oQS54LHkueCksMikrTWF0aC5wb3coTWF0aC5tYXgoQS55LAp5LnkpLU1hdGgubWluKEEueSx5LnkpLDIpKX07di5wcm90b3R5cGUuX2hhbmRsZVRvdWNoRW5kPWZ1bmN0aW9uKEEpe3ZhciB5PXRoaXM7QS5mb3JFYWNoKGZ1bmN0aW9uKHgpe3kuX3RvdWNoSWRzLnJlbW92ZSh4LnRvU3RyaW5nKCkpfSk7MDx0aGlzLl90b3VjaElkcy5zaXplKCkmJnRoaXMuX3pvb21FbmRDYWxsYmFja3MuY2FsbENhbGxiYWNrcygpfTt2LnByb3RvdHlwZS5faGFuZGxlV2hlZWxFdmVudD1mdW5jdGlvbihBLHkpe3RoaXMuX3doZWVsRmlsdGVyKHkpJiYoQT10aGlzLl90cmFuc2xhdGVUb0NvbXBvbmVudFNwYWNlKEEpLHRoaXMuX2lzSW5zaWRlQ29tcG9uZW50KEEpJiYoeS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuem9vbShNYXRoLnBvdygyLCgwIT09eS5kZWx0YVk/eS5kZWx0YVk6eS5kZWx0YVgpKih5LmRlbHRhTW9kZT92Ll9QSVhFTFNfUEVSX0xJTkU6MSkqLjAwMiksQSksdGhpcy5fem9vbUVuZENhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKCkpKX07di5wcm90b3R5cGUuX2NvbnN0cmFpbmVkWm9vbT0KZnVuY3Rpb24oQSx5LHgpe3JldHVybiByLmNvbnN0cmFpbmVkWm9vbShBLHkseCx0aGlzLm1pbkRvbWFpbkV4dGVudChBKSx0aGlzLm1heERvbWFpbkV4dGVudChBKSx0aGlzLm1pbkRvbWFpblZhbHVlKEEpLHRoaXMubWF4RG9tYWluVmFsdWUoQSkpfTt2LnByb3RvdHlwZS5fY29uc3RyYWluZWRUcmFuc2xhdGlvbj1mdW5jdGlvbihBLHkpe3JldHVybiByLmNvbnN0cmFpbmVkVHJhbnNsYXRpb24oQSx5LHRoaXMubWluRG9tYWluVmFsdWUoQSksdGhpcy5tYXhEb21haW5WYWx1ZShBKSl9O3YucHJvdG90eXBlLl9zZXR1cERyYWdJbnRlcmFjdGlvbj1mdW5jdGlvbigpe3ZhciBBPXRoaXM7dGhpcy5fZHJhZ0ludGVyYWN0aW9uLmNvbnN0cmFpbmVkVG9Db21wb25lbnQoKTt2YXIgeTt0aGlzLl9kcmFnSW50ZXJhY3Rpb24ub25EcmFnU3RhcnQoZnVuY3Rpb24oKXtyZXR1cm4geT1udWxsfSk7dGhpcy5fZHJhZ0ludGVyYWN0aW9uLm9uRHJhZyhmdW5jdGlvbih4LEMpezI8PUEuX3RvdWNoSWRzLnNpemUoKXx8CihBLnBhbih7eDoobnVsbD09eT94Lng6eS54KS1DLngseToobnVsbD09eT94Lnk6eS55KS1DLnl9KSx5PUMpfSk7dGhpcy5fZHJhZ0ludGVyYWN0aW9uLm9uRHJhZ0VuZChmdW5jdGlvbigpe3JldHVybiBBLl9wYW5FbmRDYWxsYmFja3MuY2FsbENhbGxiYWNrcygpfSl9O3YucHJvdG90eXBlLl9ub25MaW5lYXJTY2FsZVdpdGhFeHRlbnRzPWZ1bmN0aW9uKEEpe3JldHVybiBudWxsIT10aGlzLm1pbkRvbWFpbkV4dGVudChBKSYmbnVsbCE9dGhpcy5tYXhEb21haW5FeHRlbnQoQSkmJiEoQSBpbnN0YW5jZW9mIG0uTGluZWFyKSYmIShBIGluc3RhbmNlb2YgbS5UaW1lKX07di5wcm90b3R5cGUueFNjYWxlcz1mdW5jdGlvbigpe3ZhciBBPVtdO3RoaXMuX3hTY2FsZXMuZm9yRWFjaChmdW5jdGlvbih5KXtBLnB1c2goeSl9KTtyZXR1cm4gQX07di5wcm90b3R5cGUueVNjYWxlcz1mdW5jdGlvbigpe3ZhciBBPVtdO3RoaXMuX3lTY2FsZXMuZm9yRWFjaChmdW5jdGlvbih5KXtBLnB1c2goeSl9KTsKcmV0dXJuIEF9O3YucHJvdG90eXBlLmFkZFhTY2FsZT1mdW5jdGlvbihBKXt0aGlzLl94U2NhbGVzLmFkZChBKX07di5wcm90b3R5cGUucmVtb3ZlWFNjYWxlPWZ1bmN0aW9uKEEpe3RoaXMuX3hTY2FsZXMuZGVsZXRlKEEpO3RoaXMuX21pbkRvbWFpbkV4dGVudHMuZGVsZXRlKEEpO3RoaXMuX21heERvbWFpbkV4dGVudHMuZGVsZXRlKEEpO3RoaXMuX21pbkRvbWFpblZhbHVlcy5kZWxldGUoQSk7dGhpcy5fbWF4RG9tYWluVmFsdWVzLmRlbGV0ZShBKTtyZXR1cm4gdGhpc307di5wcm90b3R5cGUuYWRkWVNjYWxlPWZ1bmN0aW9uKEEpe3RoaXMuX3lTY2FsZXMuYWRkKEEpfTt2LnByb3RvdHlwZS5yZW1vdmVZU2NhbGU9ZnVuY3Rpb24oQSl7dGhpcy5feVNjYWxlcy5kZWxldGUoQSk7dGhpcy5fbWluRG9tYWluRXh0ZW50cy5kZWxldGUoQSk7dGhpcy5fbWF4RG9tYWluRXh0ZW50cy5kZWxldGUoQSk7dGhpcy5fbWluRG9tYWluVmFsdWVzLmRlbGV0ZShBKTt0aGlzLl9tYXhEb21haW5WYWx1ZXMuZGVsZXRlKEEpOwpyZXR1cm4gdGhpc307di5wcm90b3R5cGUubWluRG9tYWluRXh0ZW50PWZ1bmN0aW9uKEEpe3JldHVybiB0aGlzLl9taW5Eb21haW5FeHRlbnRzLmdldChBKX07di5wcm90b3R5cGUubWF4RG9tYWluRXh0ZW50PWZ1bmN0aW9uKEEpe3JldHVybiB0aGlzLl9tYXhEb21haW5FeHRlbnRzLmdldChBKX07di5wcm90b3R5cGUubWluRG9tYWluVmFsdWU9ZnVuY3Rpb24oQSx5KXtpZihudWxsPT15KXJldHVybiB0aGlzLl9taW5Eb21haW5WYWx1ZXMuZ2V0KEEpO3RoaXMuX21pbkRvbWFpblZhbHVlcy5zZXQoQSx5KTtyZXR1cm4gdGhpc307di5wcm90b3R5cGUubWF4RG9tYWluVmFsdWU9ZnVuY3Rpb24oQSx5KXtpZihudWxsPT15KXJldHVybiB0aGlzLl9tYXhEb21haW5WYWx1ZXMuZ2V0KEEpO3RoaXMuX21heERvbWFpblZhbHVlcy5zZXQoQSx5KTtyZXR1cm4gdGhpc307di5wcm90b3R5cGUuc2V0TWluTWF4RG9tYWluVmFsdWVzVG89ZnVuY3Rpb24oQSl7dGhpcy5fbWluRG9tYWluVmFsdWVzLmRlbGV0ZShBKTsKdGhpcy5fbWF4RG9tYWluVmFsdWVzLmRlbGV0ZShBKTt2YXIgeT1BLmdldFRyYW5zZm9ybWF0aW9uRG9tYWluKCkseD15WzFdO3RoaXMubWluRG9tYWluVmFsdWUoQSx5WzBdKTt0aGlzLm1heERvbWFpblZhbHVlKEEseCk7cmV0dXJuIHRoaXN9O3YucHJvdG90eXBlLm9uUGFuRW5kPWZ1bmN0aW9uKEEpe3RoaXMuX3BhbkVuZENhbGxiYWNrcy5hZGQoQSl9O3YucHJvdG90eXBlLm9mZlBhbkVuZD1mdW5jdGlvbihBKXt0aGlzLl9wYW5FbmRDYWxsYmFja3MuZGVsZXRlKEEpO3JldHVybiB0aGlzfTt2LnByb3RvdHlwZS5vblpvb21FbmQ9ZnVuY3Rpb24oQSl7dGhpcy5fem9vbUVuZENhbGxiYWNrcy5hZGQoQSl9O3YucHJvdG90eXBlLm9mZlpvb21FbmQ9ZnVuY3Rpb24oQSl7dGhpcy5fem9vbUVuZENhbGxiYWNrcy5kZWxldGUoQSk7cmV0dXJuIHRoaXN9O3YucHJvdG90eXBlLm9uUGFuWm9vbVVwZGF0ZT1mdW5jdGlvbihBKXt0aGlzLl9wYW5ab29tVXBkYXRlQ2FsbGJhY2tzLmFkZChBKTsKcmV0dXJuIHRoaXN9O3YucHJvdG90eXBlLm9mZlBhblpvb21VcGRhdGU9ZnVuY3Rpb24oQSl7dGhpcy5fcGFuWm9vbVVwZGF0ZUNhbGxiYWNrcy5kZWxldGUoQSk7cmV0dXJuIHRoaXN9O3JldHVybiB2fShjLkludGVyYWN0aW9uKTtmLl9QSVhFTFNfUEVSX0xJTkU9MTIwO2QuUGFuWm9vbT1mfSxmdW5jdGlvbihjLGQsZil7dmFyIGc9dGhpcyYmdGhpcy5fX2V4dGVuZHN8fGZ1bmN0aW9uKG0scCl7ZnVuY3Rpb24gcSgpe3RoaXMuY29uc3RydWN0b3I9bX1mb3IodmFyIHIgaW4gcClwLmhhc093blByb3BlcnR5KHIpJiYobVtyXT1wW3JdKTttLnByb3RvdHlwZT1udWxsPT09cD9PYmplY3QuY3JlYXRlKHApOihxLnByb3RvdHlwZT1wLnByb3RvdHlwZSxuZXcgcSl9LGw9ZigxMyksaz1mKDApO2M9ZnVuY3Rpb24obSl7ZnVuY3Rpb24gcCgpe3ZhciBxPW51bGwhPT1tJiZtLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpcztxLl9vdmVyQ29tcG9uZW50PSExO3EuX3BvaW50ZXJFbnRlckNhbGxiYWNrcz0KbmV3IGsuQ2FsbGJhY2tTZXQ7cS5fcG9pbnRlck1vdmVDYWxsYmFja3M9bmV3IGsuQ2FsbGJhY2tTZXQ7cS5fcG9pbnRlckV4aXRDYWxsYmFja3M9bmV3IGsuQ2FsbGJhY2tTZXQ7cS5fbW91c2VNb3ZlQ2FsbGJhY2s9ZnVuY3Rpb24ocix0KXtyZXR1cm4gcS5faGFuZGxlTW91c2VFdmVudChyLHQpfTtxLl90b3VjaFN0YXJ0Q2FsbGJhY2s9ZnVuY3Rpb24ocix0LHYpe3JldHVybiBxLl9oYW5kbGVUb3VjaEV2ZW50KHRbclswXV0sdil9O3JldHVybiBxfWcocCxtKTtwLnByb3RvdHlwZS5fYW5jaG9yPWZ1bmN0aW9uKHEpe20ucHJvdG90eXBlLl9hbmNob3IuY2FsbCh0aGlzLHEpO3RoaXMuX21vdXNlRGlzcGF0Y2hlcj1sLk1vdXNlLmdldERpc3BhdGNoZXIodGhpcy5fY29tcG9uZW50QXR0YWNoZWRUbyk7dGhpcy5fbW91c2VEaXNwYXRjaGVyLm9uTW91c2VNb3ZlKHRoaXMuX21vdXNlTW92ZUNhbGxiYWNrKTt0aGlzLl90b3VjaERpc3BhdGNoZXI9bC5Ub3VjaC5nZXREaXNwYXRjaGVyKHRoaXMuX2NvbXBvbmVudEF0dGFjaGVkVG8pOwp0aGlzLl90b3VjaERpc3BhdGNoZXIub25Ub3VjaFN0YXJ0KHRoaXMuX3RvdWNoU3RhcnRDYWxsYmFjayl9O3AucHJvdG90eXBlLl91bmFuY2hvcj1mdW5jdGlvbigpe20ucHJvdG90eXBlLl91bmFuY2hvci5jYWxsKHRoaXMpO3RoaXMuX21vdXNlRGlzcGF0Y2hlci5vZmZNb3VzZU1vdmUodGhpcy5fbW91c2VNb3ZlQ2FsbGJhY2spO3RoaXMuX21vdXNlRGlzcGF0Y2hlcj1udWxsO3RoaXMuX3RvdWNoRGlzcGF0Y2hlci5vZmZUb3VjaFN0YXJ0KHRoaXMuX3RvdWNoU3RhcnRDYWxsYmFjayk7dGhpcy5fdG91Y2hEaXNwYXRjaGVyPW51bGx9O3AucHJvdG90eXBlLl9oYW5kbGVNb3VzZUV2ZW50PWZ1bmN0aW9uKHEscil7cj10aGlzLl9tb3VzZURpc3BhdGNoZXIuZXZlbnRJbnNpZGUodGhpcy5fY29tcG9uZW50QXR0YWNoZWRUbyxyKTt0aGlzLl9oYW5kbGVQb2ludGVyRXZlbnQocSxyKX07cC5wcm90b3R5cGUuX2hhbmRsZVRvdWNoRXZlbnQ9ZnVuY3Rpb24ocSxyKXtyPXRoaXMuX3RvdWNoRGlzcGF0Y2hlci5ldmVudEluc2lkZSh0aGlzLl9jb21wb25lbnRBdHRhY2hlZFRvLApyKTt0aGlzLl9oYW5kbGVQb2ludGVyRXZlbnQocSxyKX07cC5wcm90b3R5cGUuX2hhbmRsZVBvaW50ZXJFdmVudD1mdW5jdGlvbihxLHIpe3E9dGhpcy5fdHJhbnNsYXRlVG9Db21wb25lbnRTcGFjZShxKTt2YXIgdD10aGlzLl9pc0luc2lkZUNvbXBvbmVudChxKTt0JiZyPyh0aGlzLl9vdmVyQ29tcG9uZW50fHx0aGlzLl9wb2ludGVyRW50ZXJDYWxsYmFja3MuY2FsbENhbGxiYWNrcyhxKSx0aGlzLl9wb2ludGVyTW92ZUNhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKHEpKTp0aGlzLl9vdmVyQ29tcG9uZW50JiZ0aGlzLl9wb2ludGVyRXhpdENhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKHEpO3RoaXMuX292ZXJDb21wb25lbnQ9dCYmcn07cC5wcm90b3R5cGUub25Qb2ludGVyRW50ZXI9ZnVuY3Rpb24ocSl7dGhpcy5fcG9pbnRlckVudGVyQ2FsbGJhY2tzLmFkZChxKTtyZXR1cm4gdGhpc307cC5wcm90b3R5cGUub2ZmUG9pbnRlckVudGVyPWZ1bmN0aW9uKHEpe3RoaXMuX3BvaW50ZXJFbnRlckNhbGxiYWNrcy5kZWxldGUocSk7CnJldHVybiB0aGlzfTtwLnByb3RvdHlwZS5vblBvaW50ZXJNb3ZlPWZ1bmN0aW9uKHEpe3RoaXMuX3BvaW50ZXJNb3ZlQ2FsbGJhY2tzLmFkZChxKX07cC5wcm90b3R5cGUub2ZmUG9pbnRlck1vdmU9ZnVuY3Rpb24ocSl7dGhpcy5fcG9pbnRlck1vdmVDYWxsYmFja3MuZGVsZXRlKHEpfTtwLnByb3RvdHlwZS5vblBvaW50ZXJFeGl0PWZ1bmN0aW9uKHEpe3RoaXMuX3BvaW50ZXJFeGl0Q2FsbGJhY2tzLmFkZChxKX07cC5wcm90b3R5cGUub2ZmUG9pbnRlckV4aXQ9ZnVuY3Rpb24ocSl7dGhpcy5fcG9pbnRlckV4aXRDYWxsYmFja3MuZGVsZXRlKHEpO3JldHVybiB0aGlzfTtyZXR1cm4gcH0oZigxNSkuSW50ZXJhY3Rpb24pO2QuUG9pbnRlcj1jfSxmdW5jdGlvbihjLGQsZil7dmFyIGc9ZigyMCk7ZC5tZW1UaHVuaz1mdW5jdGlvbigpe2Zvcih2YXIgbD1bXSxrPTA7azxhcmd1bWVudHMubGVuZ3RoO2srKylsW2tdPWFyZ3VtZW50c1trXTt2YXIgbT1sLnNsaWNlKDAsLTEpLHA9Zy5tZW1vaXplKGxbbC5sZW5ndGgtCjFdKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcT10aGlzLHI9bS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuYXBwbHkocSl9KTtyZXR1cm4gcC5hcHBseSh2b2lkIDAscil9fX0sZnVuY3Rpb24oYyxkLGYpe3ZhciBnPWYoNDkpO2QubWVtb2l6ZT1mdW5jdGlvbihsKXtmdW5jdGlvbiBrKCl7Zm9yKHZhciB0PVtdLHY9MDt2PGFyZ3VtZW50cy5sZW5ndGg7disrKXRbdl09YXJndW1lbnRzW3ZdO2lmKHEpcmV0dXJuIHA7dj1nLnNpZ25BcnJheSh0KTt2b2lkIDA9PT1tfHxtLmlzRGlmZmVyZW50KHYpPyhyJiZjb25zb2xlLmxvZygiY2FjaGUgbWlzcyEgY29tcHV0aW5nIiksbT12LHA9bC5hcHBseSh0aGlzLHQpKTpyJiZjb25zb2xlLmxvZygiY2FjaGUgaGl0ISIpO3JldHVybiBwfXZhciBtPXZvaWQgMCxwLHE9ITEscj0hMTtrLmRvTG9ja2VkPWZ1bmN0aW9uKHQpe2lmKHEpdGhyb3cgRXJyb3IoIkxvY2tpbmcgYW4gYWxyZWFkeSBsb2NrZWQgbWVtb2l6ZSBmdW5jdGlvbiEiKTtxPSEwOwp0PXQuYXBwbHkodGhpcyk7cT0hMTtyZXR1cm4gdH07ay5sb2dQZXJmb3JtYW5jZT1mdW5jdGlvbih0KXt2b2lkIDA9PT10JiYodD0hMCk7cj10O3JldHVybiB0aGlzfTtyZXR1cm4ga319LGZ1bmN0aW9uKGMsZCxmKXt2YXIgZz10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8ZnVuY3Rpb24ocSxyKXtmdW5jdGlvbiB0KCl7dGhpcy5jb25zdHJ1Y3Rvcj1xfWZvcih2YXIgdiBpbiByKXIuaGFzT3duUHJvcGVydHkodikmJihxW3ZdPXJbdl0pO3EucHJvdG90eXBlPW51bGw9PT1yP09iamVjdC5jcmVhdGUocik6KHQucHJvdG90eXBlPXIucHJvdG90eXBlLG5ldyB0KX0sbD1mKDMpLGs9ZigwKSxtPWYoMjcpLHA9ZigyKTtjPWZ1bmN0aW9uKHEpe2Z1bmN0aW9uIHIodCl7dm9pZCAwPT09dCYmKHQ9InZlcnRpY2FsIik7dD1xLmNhbGwodGhpcyx0KXx8dGhpczt0Ll9jbHVzdGVyT2Zmc2V0cz1uZXcgay5NYXA7cmV0dXJuIHR9ZyhyLHEpO3IucHJvdG90eXBlLl9nZW5lcmF0ZUF0dHJUb1Byb2plY3Rvcj0KZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7cmV0dXJuIHkucmFuZ2VCYW5kKCl9dmFyIHY9dGhpcyxBPXEucHJvdG90eXBlLl9nZW5lcmF0ZUF0dHJUb1Byb2plY3Rvci5jYWxsKHRoaXMpLHk9dGhpcy5fbWFrZUlubmVyU2NhbGUoKTtBLndpZHRoPXRoaXMuX2lzVmVydGljYWw/dDpBLndpZHRoO0EuaGVpZ2h0PXRoaXMuX2lzVmVydGljYWw/QS5oZWlnaHQ6dDt2YXIgeD1BLngsQz1BLnk7QS54PXRoaXMuX2lzVmVydGljYWw/ZnVuY3Rpb24oRixELEIpe3JldHVybiB4KEYsRCxCKSt2Ll9jbHVzdGVyT2Zmc2V0cy5nZXQoQil9OmZ1bmN0aW9uKEYsRCxCKXtyZXR1cm4geChGLEQsQil9O0EueT10aGlzLl9pc1ZlcnRpY2FsP2Z1bmN0aW9uKEYsRCxCKXtyZXR1cm4gQyhGLEQsQil9OmZ1bmN0aW9uKEYsRCxCKXtyZXR1cm4gQyhGLEQsQikrdi5fY2x1c3Rlck9mZnNldHMuZ2V0KEIpfTtyZXR1cm4gQX07ci5wcm90b3R5cGUuX3VwZGF0ZUNsdXN0ZXJQb3NpdGlvbj1mdW5jdGlvbigpe3ZhciB0PQp0aGlzLHY9dGhpcy5fbWFrZUlubmVyU2NhbGUoKTt0aGlzLmRhdGFzZXRzKCkuZm9yRWFjaChmdW5jdGlvbihBLHkpe3JldHVybiB0Ll9jbHVzdGVyT2Zmc2V0cy5zZXQoQSx2LnNjYWxlKFN0cmluZyh5KSktdi5yYW5nZUJhbmQoKS8yKX0pfTtyLnByb3RvdHlwZS5fbWFrZUlubmVyU2NhbGU9ZnVuY3Rpb24oKXt2YXIgdD1uZXcgbC5DYXRlZ29yeTt0LmRvbWFpbih0aGlzLmRhdGFzZXRzKCkubWFwKGZ1bmN0aW9uKEEseSl7cmV0dXJuIFN0cmluZyh5KX0pKTt2YXIgdj1wLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMuYXR0cihtLkJhci5fQkFSX1RISUNLTkVTU19LRVkpKTt0LnJhbmdlKFswLHYobnVsbCwwLG51bGwpXSk7cmV0dXJuIHR9O3IucHJvdG90eXBlLl9nZXREYXRhVG9EcmF3PWZ1bmN0aW9uKCl7dGhpcy5fdXBkYXRlQ2x1c3RlclBvc2l0aW9uKCk7cmV0dXJuIHEucHJvdG90eXBlLl9nZXREYXRhVG9EcmF3LmNhbGwodGhpcyl9O3JldHVybiByfShtLkJhcik7ZC5DbHVzdGVyZWRCYXI9CmN9LGZ1bmN0aW9uKGMsZCxmKXt2YXIgZz10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8ZnVuY3Rpb24oQyxGKXtmdW5jdGlvbiBEKCl7dGhpcy5jb25zdHJ1Y3Rvcj1DfWZvcih2YXIgQiBpbiBGKUYuaGFzT3duUHJvcGVydHkoQikmJihDW0JdPUZbQl0pO0MucHJvdG90eXBlPW51bGw9PT1GP09iamVjdC5jcmVhdGUoRik6KEQucHJvdG90eXBlPUYucHJvdG90eXBlLG5ldyBEKX0sbD1mKDEpLGs9Zig1KSxtPWYoNykscD1mKDgpLHE9ZigzKSxyPWYoMCksdD1mKDQ0KSx2PWYoNDUpLEE9Zig2KSx5PWYoMzUpLHg9ZigyKTtjPWZ1bmN0aW9uKEMpe2Z1bmN0aW9uIEYoKXt2YXIgRD1DLmNhbGwodGhpcyl8fHRoaXM7RC5fc3RhcnRBbmdsZT0wO0QuX2VuZEFuZ2xlPTIqTWF0aC5QSTtELl9sYWJlbEZvcm1hdHRlcj1wLmlkZW50aXR5KCk7RC5fbGFiZWxzRW5hYmxlZD0hMTtELmlubmVyUmFkaXVzKDApO0Qub3V0ZXJSYWRpdXMoZnVuY3Rpb24oKXt2YXIgQj1ELl9waWVDZW50ZXIoKTtyZXR1cm4gTWF0aC5taW4oTWF0aC5tYXgoRC53aWR0aCgpLQpCLngsQi54KSxNYXRoLm1heChELmhlaWdodCgpLUIueSxCLnkpKX0pO0QuYWRkQ2xhc3MoInBpZS1wbG90Iik7RC5hdHRyKCJmaWxsIixmdW5jdGlvbihCLEcpe3JldHVybiBTdHJpbmcoRyl9LG5ldyBxLkNvbG9yKTtELl9zdHJva2VEcmF3ZXJzPW5ldyByLk1hcDtyZXR1cm4gRH1nKEYsQyk7Ri5wcm90b3R5cGUuX3NldHVwPWZ1bmN0aW9uKCl7dmFyIEQ9dGhpcztDLnByb3RvdHlwZS5fc2V0dXAuY2FsbCh0aGlzKTt0aGlzLl9zdHJva2VEcmF3ZXJzLmZvckVhY2goZnVuY3Rpb24oQil7cmV0dXJuIEIuYXR0YWNoVG8oRC5fcmVuZGVyQXJlYSl9KX07Ri5wcm90b3R5cGUuY29tcHV0ZUxheW91dD1mdW5jdGlvbihELEIsRyl7Qy5wcm90b3R5cGUuY29tcHV0ZUxheW91dC5jYWxsKHRoaXMsRCxCLEcpO0Q9dGhpcy5fcGllQ2VudGVyKCk7dGhpcy5fcmVuZGVyQXJlYS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitELngrIiwiK0QueSsiKSIpO0Q9TWF0aC5taW4oTWF0aC5tYXgodGhpcy53aWR0aCgpLQpELngsRC54KSxNYXRoLm1heCh0aGlzLmhlaWdodCgpLUQueSxELnkpKTtudWxsIT10aGlzLmlubmVyUmFkaXVzKCkuc2NhbGUmJnRoaXMuaW5uZXJSYWRpdXMoKS5zY2FsZS5yYW5nZShbMCxEXSk7bnVsbCE9dGhpcy5vdXRlclJhZGl1cygpLnNjYWxlJiZ0aGlzLm91dGVyUmFkaXVzKCkuc2NhbGUucmFuZ2UoWzAsRF0pO3JldHVybiB0aGlzfTtGLnByb3RvdHlwZS5hZGREYXRhc2V0PWZ1bmN0aW9uKEQpe0MucHJvdG90eXBlLmFkZERhdGFzZXQuY2FsbCh0aGlzLEQpO3JldHVybiB0aGlzfTtGLnByb3RvdHlwZS5fYWRkRGF0YXNldD1mdW5jdGlvbihEKXtpZigxPT09dGhpcy5kYXRhc2V0cygpLmxlbmd0aClyZXR1cm4gci5XaW5kb3cud2FybigiT25seSBvbmUgZGF0YXNldCBpcyBzdXBwb3J0ZWQgaW4gUGllIHBsb3RzIiksdGhpczt0aGlzLl91cGRhdGVQaWVBbmdsZXMoKTt2YXIgQj1uZXcgdi5BcmNPdXRsaW5lU1ZHRHJhd2VyO3RoaXMuX2lzU2V0dXAmJkIuYXR0YWNoVG8odGhpcy5fcmVuZGVyQXJlYSk7CnRoaXMuX3N0cm9rZURyYXdlcnMuc2V0KEQsQik7Qy5wcm90b3R5cGUuX2FkZERhdGFzZXQuY2FsbCh0aGlzLEQpO3JldHVybiB0aGlzfTtGLnByb3RvdHlwZS5yZW1vdmVEYXRhc2V0PWZ1bmN0aW9uKEQpe0MucHJvdG90eXBlLnJlbW92ZURhdGFzZXQuY2FsbCh0aGlzLEQpfTtGLnByb3RvdHlwZS5fcmVtb3ZlRGF0YXNldE5vZGVzPWZ1bmN0aW9uKEQpe0MucHJvdG90eXBlLl9yZW1vdmVEYXRhc2V0Tm9kZXMuY2FsbCh0aGlzLEQpO3RoaXMuX3N0cm9rZURyYXdlcnMuZ2V0KEQpLnJlbW92ZSgpfTtGLnByb3RvdHlwZS5fcmVtb3ZlRGF0YXNldD1mdW5jdGlvbihEKXtDLnByb3RvdHlwZS5fcmVtb3ZlRGF0YXNldC5jYWxsKHRoaXMsRCk7dGhpcy5fc3RhcnRBbmdsZXM9W107dGhpcy5fZW5kQW5nbGVzPVtdO3JldHVybiB0aGlzfTtGLnByb3RvdHlwZS5zZWxlY3Rpb25zPWZ1bmN0aW9uKEQpe3ZhciBCPXRoaXM7dm9pZCAwPT09RCYmKEQ9dGhpcy5kYXRhc2V0cygpKTt2YXIgRz1DLnByb3RvdHlwZS5zZWxlY3Rpb25zLmNhbGwodGhpcywKRCkubm9kZXMoKTtELmZvckVhY2goZnVuY3Rpb24oSyl7Sz1CLl9zdHJva2VEcmF3ZXJzLmdldChLKTtudWxsIT1LJiZHLnB1c2guYXBwbHkoRyxLLmdldFZpc3VhbFByaW1pdGl2ZXMoKSl9KTtyZXR1cm4gbC5zZWxlY3RBbGwoRyl9O0YucHJvdG90eXBlLl9vbkRhdGFzZXRVcGRhdGU9ZnVuY3Rpb24oKXtDLnByb3RvdHlwZS5fb25EYXRhc2V0VXBkYXRlLmNhbGwodGhpcyk7dGhpcy5fdXBkYXRlUGllQW5nbGVzKCk7dGhpcy5yZW5kZXIoKX07Ri5wcm90b3R5cGUuX2NyZWF0ZURyYXdlcj1mdW5jdGlvbigpe3JldHVybiBuZXcgQS5Qcm94eURyYXdlcihmdW5jdGlvbigpe3JldHVybiBuZXcgdC5BcmNTVkdEcmF3ZXJ9LGZ1bmN0aW9uKCl7eS53YXJuKCJjYW52YXMgcmVuZGVyZXIgaXMgbm90IHN1cHBvcnRlZCBvbiBQaWUgUGxvdCEiKTtyZXR1cm4gbnVsbH0pfTtGLnByb3RvdHlwZS5lbnRpdGllcz1mdW5jdGlvbihEKXt2YXIgQj10aGlzO3ZvaWQgMD09PUQmJihEPXRoaXMuZGF0YXNldHMoKSk7CnJldHVybiBDLnByb3RvdHlwZS5lbnRpdGllcy5jYWxsKHRoaXMsRCkubWFwKGZ1bmN0aW9uKEcpe0cucG9zaXRpb24ueCs9Qi53aWR0aCgpLzI7Ry5wb3NpdGlvbi55Kz1CLmhlaWdodCgpLzI7dmFyIEs9bC5zZWxlY3QoQi5fc3Ryb2tlRHJhd2Vycy5nZXQoRy5kYXRhc2V0KS5nZXRWaXN1YWxQcmltaXRpdmVBdEluZGV4KEcuaW5kZXgpKTtHLnN0cm9rZVNlbGVjdGlvbj1LO3JldHVybiBHfSl9O0YucHJvdG90eXBlLnNlY3RvclZhbHVlPWZ1bmN0aW9uKEQpe2lmKG51bGw9PUQpcmV0dXJuIHRoaXMuX3Byb3BlcnR5QmluZGluZ3MuZ2V0KEYuX1NFQ1RPUl9WQUxVRV9LRVkpO3RoaXMuX2JpbmRQcm9wZXJ0eShGLl9TRUNUT1JfVkFMVUVfS0VZLEQsdm9pZCAwKTt0aGlzLl91cGRhdGVQaWVBbmdsZXMoKTt0aGlzLnJlbmRlcigpO3JldHVybiB0aGlzfTtGLnByb3RvdHlwZS5pbm5lclJhZGl1cz1mdW5jdGlvbihELEIpe2lmKG51bGw9PUQpcmV0dXJuIHRoaXMuX3Byb3BlcnR5QmluZGluZ3MuZ2V0KEYuX0lOTkVSX1JBRElVU19LRVkpOwp0aGlzLl9iaW5kUHJvcGVydHkoRi5fSU5ORVJfUkFESVVTX0tFWSxELEIpO3RoaXMucmVuZGVyKCk7cmV0dXJuIHRoaXN9O0YucHJvdG90eXBlLm91dGVyUmFkaXVzPWZ1bmN0aW9uKEQsQil7aWYobnVsbD09RClyZXR1cm4gdGhpcy5fcHJvcGVydHlCaW5kaW5ncy5nZXQoRi5fT1VURVJfUkFESVVTX0tFWSk7dGhpcy5fYmluZFByb3BlcnR5KEYuX09VVEVSX1JBRElVU19LRVksRCxCKTt0aGlzLnJlbmRlcigpO3JldHVybiB0aGlzfTtGLnByb3RvdHlwZS5zdGFydEFuZ2xlPWZ1bmN0aW9uKEQpe2lmKG51bGw9PUQpcmV0dXJuIHRoaXMuX3N0YXJ0QW5nbGU7dGhpcy5fc3RhcnRBbmdsZT1EO3RoaXMuX3VwZGF0ZVBpZUFuZ2xlcygpO3RoaXMucmVuZGVyKCk7cmV0dXJuIHRoaXN9O0YucHJvdG90eXBlLmVuZEFuZ2xlPWZ1bmN0aW9uKEQpe2lmKG51bGw9PUQpcmV0dXJuIHRoaXMuX2VuZEFuZ2xlO3RoaXMuX2VuZEFuZ2xlPUQ7dGhpcy5fdXBkYXRlUGllQW5nbGVzKCk7dGhpcy5yZW5kZXIoKTsKcmV0dXJuIHRoaXN9O0YucHJvdG90eXBlLmxhYmVsc0VuYWJsZWQ9ZnVuY3Rpb24oRCl7aWYobnVsbD09RClyZXR1cm4gdGhpcy5fbGFiZWxzRW5hYmxlZDt0aGlzLl9sYWJlbHNFbmFibGVkPUQ7dGhpcy5yZW5kZXIoKTtyZXR1cm4gdGhpc307Ri5wcm90b3R5cGUubGFiZWxGb3JtYXR0ZXI9ZnVuY3Rpb24oRCl7aWYobnVsbD09RClyZXR1cm4gdGhpcy5fbGFiZWxGb3JtYXR0ZXI7dGhpcy5fbGFiZWxGb3JtYXR0ZXI9RDt0aGlzLnJlbmRlcigpO3JldHVybiB0aGlzfTtGLnByb3RvdHlwZS5lbnRpdGllc0F0PWZ1bmN0aW9uKEQpe3ZhciBCPXRoaXMud2lkdGgoKS8yLEc9dGhpcy5oZWlnaHQoKS8yO0Q9dGhpcy5fc2xpY2VJbmRleEZvclBvaW50KHt4OkQueC1CLHk6RC55LUd9KTtyZXR1cm4gbnVsbD09RD9bXTpbdGhpcy5lbnRpdGllcygpW0RdXX07Ri5wcm90b3R5cGUuX3Byb3BlcnR5UHJvamVjdG9ycz1mdW5jdGlvbigpe3ZhciBEPXRoaXMsQj1DLnByb3RvdHlwZS5fcHJvcGVydHlQcm9qZWN0b3JzLmNhbGwodGhpcyksCkc9eC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLmlubmVyUmFkaXVzKCkpLEs9eC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLm91dGVyUmFkaXVzKCkpO0IuZD1mdW5jdGlvbihMLEosUCl7cmV0dXJuIGwuYXJjKCkuaW5uZXJSYWRpdXMoRyhMLEosUCkpLm91dGVyUmFkaXVzKEsoTCxKLFApKS5zdGFydEFuZ2xlKEQuX3N0YXJ0QW5nbGVzW0pdKS5lbmRBbmdsZShELl9lbmRBbmdsZXNbSl0pKEwsSil9O3JldHVybiBCfTtGLnByb3RvdHlwZS5fdXBkYXRlUGllQW5nbGVzPWZ1bmN0aW9uKCl7aWYobnVsbCE9dGhpcy5zZWN0b3JWYWx1ZSgpJiYwIT09dGhpcy5kYXRhc2V0cygpLmxlbmd0aCl7dmFyIEQ9eC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnNlY3RvclZhbHVlKCkpLEI9dGhpcy5kYXRhc2V0cygpWzBdLEc9dGhpcy5fZ2V0RGF0YVRvRHJhdygpLmdldChCKTtHPWwucGllKCkuc29ydChudWxsKS5zdGFydEFuZ2xlKHRoaXMuX3N0YXJ0QW5nbGUpLmVuZEFuZ2xlKHRoaXMuX2VuZEFuZ2xlKS52YWx1ZShmdW5jdGlvbihLLApMKXtyZXR1cm4gRChLLEwsQil9KShHKTt0aGlzLl9zdGFydEFuZ2xlcz1HLm1hcChmdW5jdGlvbihLKXtyZXR1cm4gSy5zdGFydEFuZ2xlfSk7dGhpcy5fZW5kQW5nbGVzPUcubWFwKGZ1bmN0aW9uKEspe3JldHVybiBLLmVuZEFuZ2xlfSl9fTtGLnByb3RvdHlwZS5fcGllQ2VudGVyPWZ1bmN0aW9uKCl7dmFyIEQ9dGhpcy5fc3RhcnRBbmdsZTx0aGlzLl9lbmRBbmdsZT90aGlzLl9zdGFydEFuZ2xlOnRoaXMuX2VuZEFuZ2xlLEI9dGhpcy5fc3RhcnRBbmdsZTx0aGlzLl9lbmRBbmdsZT90aGlzLl9lbmRBbmdsZTp0aGlzLl9zdGFydEFuZ2xlLEc9TWF0aC5zaW4oRCk7RD1NYXRoLmNvcyhEKTt2YXIgSz1NYXRoLnNpbihCKTtCPU1hdGguY29zKEIpO3ZhciBMO2lmKDA8PUcmJjA8PUspaWYoMDw9RCYmMDw9Qil7dmFyIEo9RDt2YXIgUD1MPTA7dmFyIFM9S31lbHNlIDA+RCYmMD5CPyhKPTAsTD0tQixQPTAsUz1HKTowPD1EJiYwPkI/KEo9RCxMPS1CLFA9MCxTPUcpOjA+RCYmMDw9QiYmCihQPUw9Sj0xLFM9TWF0aC5tYXgoRyxLKSk7ZWxzZSAwPD1HJiYwPks/MDw9RCYmMDw9Qj8oSj1NYXRoLm1heChELEIpLFM9UD1MPTEpOjA+RCYmMD5CPyhKPTAsTD0xLFA9LUssUz1HKTowPD1EJiYwPkI/KEo9RCxMPTEsUD0tSyxTPTEpOjA+RCYmMDw9QiYmKEo9QixQPUw9MSxTPUcpOjA+RyYmMDw9Sz8wPD1EJiYwPD1CPyhKPTEsTD0wLFA9LUcsUz1LKTowPkQmJjA+Qj8oSj0xLEw9TWF0aC5tYXgoLUQsLUIpLFM9UD0xKTowPD1EJiYwPkI/KEo9MSxMPS1CLFA9LUcsUz0xKTowPkQmJjA8PUImJihKPTEsTD0tRCxQPTEsUz1LKTowPkcmJjA+SyYmKDA8PUQmJjA8PUI/KEo9QixMPTAsUD0tRyxTPTApOjA+RCYmMD5CPyhKPTAsTD0tRCxQPS1LLFM9MCk6MDw9RCYmMD5CPyhMPUo9MSxQPU1hdGgubWF4KEQsLUIpLFM9MSk6MD5EJiYwPD1CJiYoSj1CLEw9LUQsUD0xLFM9MCkpO3JldHVybnt4OjA9PVArUz8wOlAvKFArUykqdGhpcy53aWR0aCgpLHk6MD09SitMPzA6Si8oSitMKSp0aGlzLmhlaWdodCgpfX07CkYucHJvdG90eXBlLl9nZXREYXRhVG9EcmF3PWZ1bmN0aW9uKCl7dmFyIEQ9Qy5wcm90b3R5cGUuX2dldERhdGFUb0RyYXcuY2FsbCh0aGlzKTtpZigwPT09dGhpcy5kYXRhc2V0cygpLmxlbmd0aClyZXR1cm4gRDt2YXIgQj14LlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMuc2VjdG9yVmFsdWUoKSksRz10aGlzLmRhdGFzZXRzKClbMF0sSz1ELmdldChHKS5maWx0ZXIoZnVuY3Rpb24oTCxKKXtyZXR1cm4gRi5faXNWYWxpZERhdGEoQihMLEosRykpfSk7RC5zZXQoRyxLKTtyZXR1cm4gRH07Ri5faXNWYWxpZERhdGE9ZnVuY3Rpb24oRCl7cmV0dXJuIHIuTWF0aC5pc1ZhbGlkTnVtYmVyKEQpJiYwPD1EfTtGLnByb3RvdHlwZS5fcGl4ZWxQb2ludD1mdW5jdGlvbihELEIsRyl7dmFyIEs9eC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnNlY3RvclZhbHVlKCkpO2lmKCFGLl9pc1ZhbGlkRGF0YShLKEQsQixHKSkpcmV0dXJue3g6TmFOLHk6TmFOfTt2YXIgTD14LlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMuaW5uZXJSYWRpdXMoKSkoRCwKQixHKTtEPXguUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy5vdXRlclJhZGl1cygpKShELEIsRyk7TD0oTCtEKS8yO0Q9bC5waWUoKS5zb3J0KG51bGwpLnZhbHVlKGZ1bmN0aW9uKEosUCl7Sj1LKEosUCxHKTtyZXR1cm4gRi5faXNWYWxpZERhdGEoSik/SjowfSkuc3RhcnRBbmdsZSh0aGlzLl9zdGFydEFuZ2xlKS5lbmRBbmdsZSh0aGlzLl9lbmRBbmdsZSkoRy5kYXRhKCkpO0I9KERbQl0uc3RhcnRBbmdsZStEW0JdLmVuZEFuZ2xlKS8yO3JldHVybnt4OkwqTWF0aC5zaW4oQikseTotTCpNYXRoLmNvcyhCKX19O0YucHJvdG90eXBlLl9hZGRpdGlvbmFsUGFpbnQ9ZnVuY3Rpb24oRCl7dmFyIEI9dGhpczt0aGlzLl9yZW5kZXJBcmVhLnNlbGVjdCgiLmxhYmVsLWFyZWEiKS5yZW1vdmUoKTt0aGlzLl9sYWJlbHNFbmFibGVkJiZyLldpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cmV0dXJuIEIuX2RyYXdMYWJlbHMoKX0sRCk7dmFyIEc9dGhpcy5fZ2VuZXJhdGVTdHJva2VEcmF3U3RlcHMoKSwKSz10aGlzLl9nZXREYXRhVG9EcmF3KCk7dGhpcy5kYXRhc2V0cygpLmZvckVhY2goZnVuY3Rpb24oTCl7dmFyIEo9eC5QbG90LmFwcGx5RHJhd1N0ZXBzKEcsTCk7Qi5fc3Ryb2tlRHJhd2Vycy5nZXQoTCkuZHJhdyhLLmdldChMKSxKKX0pfTtGLnByb3RvdHlwZS5fZ2VuZXJhdGVTdHJva2VEcmF3U3RlcHM9ZnVuY3Rpb24oKXtyZXR1cm5be2F0dHJUb1Byb2plY3Rvcjp0aGlzLl9nZXRBdHRyVG9Qcm9qZWN0b3IoKSxhbmltYXRvcjpuZXcgbS5OdWxsfV19O0YucHJvdG90eXBlLl9zbGljZUluZGV4Rm9yUG9pbnQ9ZnVuY3Rpb24oRCl7dmFyIEI9TWF0aC5zcXJ0KE1hdGgucG93KEQueCwyKStNYXRoLnBvdyhELnksMikpLEc9TWF0aC5hY29zKC1ELnkvQik7MD5ELngmJihHPTIqTWF0aC5QSS1HKTtmb3IoRD0wO0Q8dGhpcy5fc3RhcnRBbmdsZXMubGVuZ3RoO0QrKylpZih0aGlzLl9zdGFydEFuZ2xlc1tEXTxHJiZ0aGlzLl9lbmRBbmdsZXNbRF0+Ryl7dmFyIEs9RDticmVha31pZih2b2lkIDAhPT0KSyl7RD10aGlzLmRhdGFzZXRzKClbMF07dmFyIEw9RC5kYXRhKClbS107Rz10aGlzLmlubmVyUmFkaXVzKCkuYWNjZXNzb3IoTCxLLEQpO0Q9dGhpcy5vdXRlclJhZGl1cygpLmFjY2Vzc29yKEwsSyxEKTtpZihCPkcmJkI8RClyZXR1cm4gS31yZXR1cm4gbnVsbH07Ri5wcm90b3R5cGUuX2RyYXdMYWJlbHM9ZnVuY3Rpb24oKXt2YXIgRD10aGlzLEI9dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCksRz10aGlzLl9yZW5kZXJBcmVhLmFwcGVuZCgiZyIpLmNsYXNzZWQoImxhYmVsLWFyZWEiLCEwKSxLPW5ldyBrLlN2Z0NvbnRleHQoRy5ub2RlKCkpLEw9bmV3IGsuQ2FjaGVNZWFzdXJlcihLKSxKPW5ldyBrLldyaXRlcihMLEspLFA9dGhpcy5kYXRhc2V0cygpWzBdO3RoaXMuX2dldERhdGFUb0RyYXcoKS5nZXQoUCkuZm9yRWFjaChmdW5jdGlvbihTLE4pe3ZhciBUPUQuc2VjdG9yVmFsdWUoKS5hY2Nlc3NvcihTLE4sUCk7aWYoci5NYXRoLmlzVmFsaWROdW1iZXIoVCkpe1Q9RC5fbGFiZWxGb3JtYXR0ZXIoVCwKUyxOLFApO3ZhciBZPUwubWVhc3VyZShUKSxhYT0oRC5fZW5kQW5nbGVzW05dK0QuX3N0YXJ0QW5nbGVzW05dKS8yLGhhPUQub3V0ZXJSYWRpdXMoKS5hY2Nlc3NvcihTLE4sUCk7RC5vdXRlclJhZGl1cygpLnNjYWxlJiYoaGE9RC5vdXRlclJhZGl1cygpLnNjYWxlLnNjYWxlKGhhKSk7dmFyIFg9RC5pbm5lclJhZGl1cygpLmFjY2Vzc29yKFMsTixQKTtELmlubmVyUmFkaXVzKCkuc2NhbGUmJihYPUQuaW5uZXJSYWRpdXMoKS5zY2FsZS5zY2FsZShYKSk7WD0oaGErWCkvMjtoYT1NYXRoLnNpbihhYSkqWC1ZLndpZHRoLzI7WD0tTWF0aC5jb3MoYWEpKlgtWS5oZWlnaHQvMjt2YXIgY2E9W3t4OmhhLHk6WH0se3g6aGEseTpYK1kuaGVpZ2h0fSx7eDpoYStZLndpZHRoLHk6WH0se3g6aGErWS53aWR0aCx5OlgrWS5oZWlnaHR9XTsoYWE9Y2EuZXZlcnkoZnVuY3Rpb24oZWEpe3JldHVybiBNYXRoLmFicyhlYS54KTw9RC53aWR0aCgpLzImJk1hdGguYWJzKGVhLnkpPD1ELmhlaWdodCgpLwoyfSkpJiYoYWE9Y2EubWFwKGZ1bmN0aW9uKGVhKXtyZXR1cm4gRC5fc2xpY2VJbmRleEZvclBvaW50KGVhKX0pLmV2ZXJ5KGZ1bmN0aW9uKGVhKXtyZXR1cm4gZWE9PT1OfSkpO1M9Qi5maWxsKFMsTixQKTtTPTEuNipyLkNvbG9yLmNvbnRyYXN0KCJ3aGl0ZSIsUyk8ci5Db2xvci5jb250cmFzdCgiYmxhY2siLFMpO2hhPUcuYXBwZW5kKCJnIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIraGErIiwiK1grIikiKTtoYS5jbGFzc2VkKFM/ImRhcmstbGFiZWwiOiJsaWdodC1sYWJlbCIsITApO2hhLnN0eWxlKCJ2aXNpYmlsaXR5IixhYT8iaW5oZXJpdCI6ImhpZGRlbiIpO0oud3JpdGUoVCxZLndpZHRoLFkuaGVpZ2h0LHt4QWxpZ246ImNlbnRlciIseUFsaWduOiJjZW50ZXIifSxoYS5ub2RlKCkpfX0pfTtyZXR1cm4gRn0oeC5QbG90KTtjLl9JTk5FUl9SQURJVVNfS0VZPSJpbm5lci1yYWRpdXMiO2MuX09VVEVSX1JBRElVU19LRVk9Im91dGVyLXJhZGl1cyI7Yy5fU0VDVE9SX1ZBTFVFX0tFWT0KInNlY3Rvci12YWx1ZSI7ZC5QaWU9Y30sZnVuY3Rpb24oYyxkLGYpe3ZhciBnPXRoaXMmJnRoaXMuX19leHRlbmRzfHxmdW5jdGlvbih5LHgpe2Z1bmN0aW9uIEMoKXt0aGlzLmNvbnN0cnVjdG9yPXl9Zm9yKHZhciBGIGluIHgpeC5oYXNPd25Qcm9wZXJ0eShGKSYmKHlbRl09eFtGXSk7eS5wcm90b3R5cGU9bnVsbD09PXg/T2JqZWN0LmNyZWF0ZSh4KTooQy5wcm90b3R5cGU9eC5wcm90b3R5cGUsbmV3IEMpfSxsPWYoMSksaz1mKDUpLG09Zig3KSxwPWYoMTQpLHE9Zig2KSxyPWYoMzQpLHQ9ZigzKSx2PWYoMCksQT1mKDIpO2M9ZnVuY3Rpb24oeSl7ZnVuY3Rpb24geCgpe3ZhciBDPXkuY2FsbCh0aGlzKXx8dGhpcztDLl9sYWJlbHNFbmFibGVkPSExO0MuX2xhYmVsPW51bGw7Qy5hbmltYXRvcigicmVjdGFuZ2xlcyIsbmV3IG0uTnVsbCk7Qy5hZGRDbGFzcygicmVjdGFuZ2xlLXBsb3QiKTtDLmF0dHIoImZpbGwiLChuZXcgdC5Db2xvcikucmFuZ2UoKVswXSk7cmV0dXJuIEN9Zyh4LAp5KTt4LnByb3RvdHlwZS5fY3JlYXRlRHJhd2VyPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBxLlByb3h5RHJhd2VyKGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyByLlJlY3RhbmdsZVNWR0RyYXdlcn0sZnVuY3Rpb24oQyl7cmV0dXJuIG5ldyBwLlJlY3RhbmdsZUNhbnZhc0RyYXdlcihDKX0pfTt4LnByb3RvdHlwZS5fZ2VuZXJhdGVBdHRyVG9Qcm9qZWN0b3I9ZnVuY3Rpb24oKXt2YXIgQz10aGlzLEY9eS5wcm90b3R5cGUuX2dlbmVyYXRlQXR0clRvUHJvamVjdG9yLmNhbGwodGhpcyksRD1BLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueCgpKSxCPUZbeC5fWDJfS0VZXSxHPUEuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy55KCkpLEs9Rlt4Ll9ZMl9LRVldLEw9dGhpcy54KCkuc2NhbGUsSj10aGlzLnkoKS5zY2FsZTtudWxsIT1CPyhGLndpZHRoPWZ1bmN0aW9uKFAsUyxOKXtyZXR1cm4gTWF0aC5hYnMoQihQLFMsTiktRChQLFMsTikpfSxGLng9ZnVuY3Rpb24oUCxTLE4pe3JldHVybiBNYXRoLm1pbihCKFAsClMsTiksRChQLFMsTikpfSk6KEYud2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4gQy5fcmVjdGFuZ2xlV2lkdGgoTCl9LEYueD1mdW5jdGlvbihQLFMsTil7cmV0dXJuIEQoUCxTLE4pLS41KkYud2lkdGgoUCxTLE4pfSk7bnVsbCE9Sz8oRi5oZWlnaHQ9ZnVuY3Rpb24oUCxTLE4pe3JldHVybiBNYXRoLmFicyhLKFAsUyxOKS1HKFAsUyxOKSl9LEYueT1mdW5jdGlvbihQLFMsTil7cmV0dXJuIE1hdGgubWF4KEsoUCxTLE4pLEcoUCxTLE4pKS1GLmhlaWdodChQLFMsTil9KTooRi5oZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gQy5fcmVjdGFuZ2xlV2lkdGgoSil9LEYueT1mdW5jdGlvbihQLFMsTil7cmV0dXJuIEcoUCxTLE4pLS41KkYuaGVpZ2h0KFAsUyxOKX0pO2RlbGV0ZSBGW3guX1gyX0tFWV07ZGVsZXRlIEZbeC5fWTJfS0VZXTtyZXR1cm4gRn07eC5wcm90b3R5cGUuX2dlbmVyYXRlRHJhd1N0ZXBzPWZ1bmN0aW9uKCl7cmV0dXJuW3thdHRyVG9Qcm9qZWN0b3I6dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCksCmFuaW1hdG9yOnRoaXMuX2dldEFuaW1hdG9yKCJyZWN0YW5nbGVzIil9XX07eC5wcm90b3R5cGUuX2ZpbHRlckZvclByb3BlcnR5PWZ1bmN0aW9uKEMpe3JldHVybiJ4MiI9PT1DP3kucHJvdG90eXBlLl9maWx0ZXJGb3JQcm9wZXJ0eS5jYWxsKHRoaXMsIngiKToieTIiPT09Qz95LnByb3RvdHlwZS5fZmlsdGVyRm9yUHJvcGVydHkuY2FsbCh0aGlzLCJ5Iik6eS5wcm90b3R5cGUuX2ZpbHRlckZvclByb3BlcnR5LmNhbGwodGhpcyxDKX07eC5wcm90b3R5cGUueD1mdW5jdGlvbihDLEYsRCl7aWYobnVsbD09QylyZXR1cm4geS5wcm90b3R5cGUueC5jYWxsKHRoaXMpO251bGw9PUY/eS5wcm90b3R5cGUueC5jYWxsKHRoaXMsQyk6eS5wcm90b3R5cGUueC5jYWxsKHRoaXMsQyxGLEQpO251bGwhPUYmJihEPShDPXRoaXMueDIoKSkmJkMuYWNjZXNzb3IsbnVsbCE9RCYmdGhpcy5fYmluZFByb3BlcnR5KHguX1gyX0tFWSxELEYsQy5wb3N0U2NhbGUpKTtGIGluc3RhbmNlb2YgdC5DYXRlZ29yeSYmCkYuaW5uZXJQYWRkaW5nKDApLm91dGVyUGFkZGluZygwKTtyZXR1cm4gdGhpc307eC5wcm90b3R5cGUueDI9ZnVuY3Rpb24oQyl7aWYobnVsbD09QylyZXR1cm4gdGhpcy5fcHJvcGVydHlCaW5kaW5ncy5nZXQoeC5fWDJfS0VZKTt2YXIgRj10aGlzLngoKTt0aGlzLl9iaW5kUHJvcGVydHkoeC5fWDJfS0VZLEMsRiYmRi5zY2FsZSx2b2lkIDApO3RoaXMucmVuZGVyKCk7cmV0dXJuIHRoaXN9O3gucHJvdG90eXBlLnk9ZnVuY3Rpb24oQyxGLEQpe2lmKG51bGw9PUMpcmV0dXJuIHkucHJvdG90eXBlLnkuY2FsbCh0aGlzKTtudWxsPT1GP3kucHJvdG90eXBlLnkuY2FsbCh0aGlzLEMpOnkucHJvdG90eXBlLnkuY2FsbCh0aGlzLEMsRixEKTtudWxsIT1GJiYoRD0oQz10aGlzLnkyKCkpJiZDLmFjY2Vzc29yLG51bGwhPUQmJnRoaXMuX2JpbmRQcm9wZXJ0eSh4Ll9ZMl9LRVksRCxGLEMucG9zdFNjYWxlKSk7RiBpbnN0YW5jZW9mIHQuQ2F0ZWdvcnkmJkYuaW5uZXJQYWRkaW5nKDApLm91dGVyUGFkZGluZygwKTsKcmV0dXJuIHRoaXN9O3gucHJvdG90eXBlLnkyPWZ1bmN0aW9uKEMpe2lmKG51bGw9PUMpcmV0dXJuIHRoaXMuX3Byb3BlcnR5QmluZGluZ3MuZ2V0KHguX1kyX0tFWSk7dmFyIEY9dGhpcy55KCk7dGhpcy5fYmluZFByb3BlcnR5KHguX1kyX0tFWSxDLEYmJkYuc2NhbGUsdm9pZCAwKTt0aGlzLnJlbmRlcigpO3JldHVybiB0aGlzfTt4LnByb3RvdHlwZS5lbnRpdGllc0F0PWZ1bmN0aW9uKEMpe3ZhciBGPXRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpO3JldHVybiB0aGlzLmVudGl0aWVzKCkuZmlsdGVyKGZ1bmN0aW9uKEQpe3ZhciBCPUQuZGF0dW0sRz1ELmluZGV4LEs9RC5kYXRhc2V0O0Q9Ri54KEIsRyxLKTt2YXIgTD1GLnkoQixHLEspLEo9Ri53aWR0aChCLEcsSyk7Qj1GLmhlaWdodChCLEcsSyk7cmV0dXJuIEQ8PUMueCYmQy54PD1EK0omJkw8PUMueSYmQy55PD1MK0J9KX07eC5wcm90b3R5cGUuX2VudGl0eUJvdW5kcz1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5fZW50aXR5QkJveChDLmRhdHVtLApDLmluZGV4LEMuZGF0YXNldCx0aGlzLl9nZXRBdHRyVG9Qcm9qZWN0b3IoKSl9O3gucHJvdG90eXBlLl9lbnRpdHlCQm94PWZ1bmN0aW9uKEMsRixELEIpe3JldHVybnt4OkIueChDLEYsRCkseTpCLnkoQyxGLEQpLHdpZHRoOkIud2lkdGgoQyxGLEQpLGhlaWdodDpCLmhlaWdodChDLEYsRCl9fTt4LnByb3RvdHlwZS5sYWJlbD1mdW5jdGlvbihDKXtpZihudWxsPT1DKXJldHVybiB0aGlzLl9sYWJlbDt0aGlzLl9sYWJlbD1DO3RoaXMucmVuZGVyKCk7cmV0dXJuIHRoaXN9O3gucHJvdG90eXBlLmxhYmVsc0VuYWJsZWQ9ZnVuY3Rpb24oQyl7aWYobnVsbD09QylyZXR1cm4gdGhpcy5fbGFiZWxzRW5hYmxlZDt0aGlzLl9sYWJlbHNFbmFibGVkPUM7dGhpcy5yZW5kZXIoKTtyZXR1cm4gdGhpc307eC5wcm90b3R5cGUuX3Byb3BlcnR5UHJvamVjdG9ycz1mdW5jdGlvbigpe3ZhciBDPXkucHJvdG90eXBlLl9wcm9wZXJ0eVByb2plY3RvcnMuY2FsbCh0aGlzKTtudWxsIT10aGlzLngyKCkmJgooQy54Mj1BLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueDIoKSkpO251bGwhPXRoaXMueTIoKSYmKEMueTI9QS5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkyKCkpKTtyZXR1cm4gQ307eC5wcm90b3R5cGUuX3BpeGVsUG9pbnQ9ZnVuY3Rpb24oQyxGLEQpe3ZhciBCPXRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpLEc9Qi54KEMsRixEKSxLPUIueShDLEYsRCksTD1CLndpZHRoKEMsRixEKTtDPUIuaGVpZ2h0KEMsRixEKTtyZXR1cm57eDpHK0wvMix5OksrQy8yfX07eC5wcm90b3R5cGUuX3JlY3RhbmdsZVdpZHRoPWZ1bmN0aW9uKEMpe2lmKEMgaW5zdGFuY2VvZiB0LkNhdGVnb3J5KXJldHVybiBDLnJhbmdlQmFuZCgpO3ZhciBGPUM9PT10aGlzLngoKS5zY2FsZT90aGlzLngoKS5hY2Nlc3Nvcjp0aGlzLnkoKS5hY2Nlc3NvcixEPWwuc2V0KHYuQXJyYXkuZmxhdHRlbih0aGlzLmRhdGFzZXRzKCkubWFwKGZ1bmN0aW9uKEspe3JldHVybiBLLmRhdGEoKS5tYXAoZnVuY3Rpb24oTCwKSil7cmV0dXJuIEYoTCxKLEspLnZhbHVlT2YoKX0pfSkpKS52YWx1ZXMoKS5tYXAoZnVuY3Rpb24oSyl7cmV0dXJuK0t9KSxCPXYuTWF0aC5taW4oRCwwKTtEPXYuTWF0aC5tYXgoRCwwKTt2YXIgRz1DLnNjYWxlKEIpO3JldHVybihDLnNjYWxlKEQpLUcpL01hdGguYWJzKEQtQil9O3gucHJvdG90eXBlLl9nZXREYXRhVG9EcmF3PWZ1bmN0aW9uKCl7dmFyIEM9bmV3IHYuTWFwLEY9dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCk7dGhpcy5kYXRhc2V0cygpLmZvckVhY2goZnVuY3Rpb24oRCl7dmFyIEI9RC5kYXRhKCkubWFwKGZ1bmN0aW9uKEcsSyl7cmV0dXJuIHYuTWF0aC5pc1ZhbGlkTnVtYmVyKEYueChHLEssRCkpJiZ2Lk1hdGguaXNWYWxpZE51bWJlcihGLnkoRyxLLEQpKSYmdi5NYXRoLmlzVmFsaWROdW1iZXIoRi53aWR0aChHLEssRCkpJiZ2Lk1hdGguaXNWYWxpZE51bWJlcihGLmhlaWdodChHLEssRCkpP0c6bnVsbH0pO0Muc2V0KEQsQil9KTtyZXR1cm4gQ307eC5wcm90b3R5cGUuX2FkZGl0aW9uYWxQYWludD0KZnVuY3Rpb24oQyl7dmFyIEY9dGhpczt0aGlzLl9yZW5kZXJBcmVhLnNlbGVjdEFsbCgiLmxhYmVsLWFyZWEiKS5yZW1vdmUoKTt0aGlzLl9sYWJlbHNFbmFibGVkJiZudWxsIT10aGlzLmxhYmVsKCkmJnYuV2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXtyZXR1cm4gRi5fZHJhd0xhYmVscygpfSxDKX07eC5wcm90b3R5cGUuX2RyYXdMYWJlbHM9ZnVuY3Rpb24oKXt2YXIgQz10aGlzLEY9dGhpcy5fZ2V0RGF0YVRvRHJhdygpO3RoaXMuZGF0YXNldHMoKS5mb3JFYWNoKGZ1bmN0aW9uKEQsQil7cmV0dXJuIEMuX2RyYXdMYWJlbChGLEQsQil9KX07eC5wcm90b3R5cGUuX2RyYXdMYWJlbD1mdW5jdGlvbihDLEYsRCl7dmFyIEI9dGhpcyxHPXRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpLEs9dGhpcy5fcmVuZGVyQXJlYS5hcHBlbmQoImciKS5jbGFzc2VkKCJsYWJlbC1hcmVhIiwhMCksTD1uZXcgay5TdmdDb250ZXh0KEsubm9kZSgpKSxKPW5ldyBrLkNhY2hlTWVhc3VyZXIoTCksClA9bmV3IGsuV3JpdGVyKEosTCk7TD10aGlzLngoKS5zY2FsZS5yYW5nZSgpO3ZhciBTPXRoaXMueSgpLnNjYWxlLnJhbmdlKCksTj1NYXRoLm1pbi5hcHBseShudWxsLEwpLFQ9TWF0aC5tYXguYXBwbHkobnVsbCxMKSxZPU1hdGgubWluLmFwcGx5KG51bGwsUyksYWE9TWF0aC5tYXguYXBwbHkobnVsbCxTKTtDLmdldChGKS5mb3JFYWNoKGZ1bmN0aW9uKGhhLFgpe2lmKG51bGwhPWhhKXt2YXIgY2E9IiIrQi5sYWJlbCgpKGhhLFgsRiksZWE9Si5tZWFzdXJlKGNhKSxrYT1HLngoaGEsWCxGKSxiYT1HLnkoaGEsWCxGKSxsYT1HLndpZHRoKGhhLFgsRiksd2E9Ry5oZWlnaHQoaGEsWCxGKTtlYS5oZWlnaHQ8PXdhJiZlYS53aWR0aDw9bGEmJih3YT0od2EtZWEuaGVpZ2h0KS8yLGthKz0obGEtZWEud2lkdGgpLzIsYmErPXdhLGxhPXttaW46a2EsbWF4OmthK2VhLndpZHRofSx3YT17bWluOmJhLG1heDpiYStlYS5oZWlnaHR9LGxhLm1pbjxOfHxsYS5tYXg+VHx8d2EubWluPFl8fHdhLm1heD4KYWF8fEIuX292ZXJsYXlMYWJlbChsYSx3YSxYLEQsQyl8fChoYT1HLmZpbGwoaGEsWCxGKSxoYT0xLjYqdi5Db2xvci5jb250cmFzdCgid2hpdGUiLGhhKTx2LkNvbG9yLmNvbnRyYXN0KCJibGFjayIsaGEpLGthPUsuYXBwZW5kKCJnIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIra2ErIiwiK2JhKyIpIiksa2EuY2xhc3NlZChoYT8iZGFyay1sYWJlbCI6ImxpZ2h0LWxhYmVsIiwhMCksUC53cml0ZShjYSxlYS53aWR0aCxlYS5oZWlnaHQse3hBbGlnbjoiY2VudGVyIix5QWxpZ246ImNlbnRlciJ9LGthLm5vZGUoKSkpKX19KX07eC5wcm90b3R5cGUuX292ZXJsYXlMYWJlbD1mdW5jdGlvbihDLEYsRCxCLEcpe2Zvcih2YXIgSz10aGlzLl9nZXRBdHRyVG9Qcm9qZWN0b3IoKSxMPXRoaXMuZGF0YXNldHMoKSxKPUI7SjxMLmxlbmd0aDtKKyspZm9yKHZhciBQPUxbSl0sUz1HLmdldChQKSxOPUo9PT1CP0QrMTowO048Uy5sZW5ndGg7TisrKWlmKHYuRE9NLmludGVyc2VjdHNCQm94KEMsCkYsdGhpcy5fZW50aXR5QkJveChTW05dLE4sUCxLKSkpcmV0dXJuITA7cmV0dXJuITF9O3JldHVybiB4fShmKDE2KS5YWVBsb3QpO2MuX1gyX0tFWT0ieDIiO2MuX1kyX0tFWT0ieTIiO2QuUmVjdGFuZ2xlPWN9LGZ1bmN0aW9uKGMsZCxmKXt2YXIgZz10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8ZnVuY3Rpb24oeSx4KXtmdW5jdGlvbiBDKCl7dGhpcy5jb25zdHJ1Y3Rvcj15fWZvcih2YXIgRiBpbiB4KXguaGFzT3duUHJvcGVydHkoRikmJih5W0ZdPXhbRl0pO3kucHJvdG90eXBlPW51bGw9PT14P09iamVjdC5jcmVhdGUoeCk6KEMucHJvdG90eXBlPXgucHJvdG90eXBlLG5ldyBDKX0sbD1mKDMxKSxrPWYoNiksbT1mKDQ4KSxwPWYoNykscT1mKDE0KSxyPWYoMyksdD1mKDApLHY9ZigxOSksQT1mKDIpO2M9ZnVuY3Rpb24oeSl7ZnVuY3Rpb24geCgpe3ZhciBDPXkuY2FsbCh0aGlzKXx8dGhpcztDLmFkZENsYXNzKCJzY2F0dGVyLXBsb3QiKTt2YXIgRj1uZXcgcC5FYXNpbmc7Ri5zdGFydERlbGF5KDUpOwpGLnN0ZXBEdXJhdGlvbigyNTApO0YubWF4VG90YWxEdXJhdGlvbihBLlBsb3QuX0FOSU1BVElPTl9NQVhfRFVSQVRJT04pO0MuYW5pbWF0b3Iodi5BbmltYXRvci5NQUlOLEYpO0MuYXR0cigib3BhY2l0eSIsLjYpO0MuYXR0cigiZmlsbCIsKG5ldyByLkNvbG9yKS5yYW5nZSgpWzBdKTtDLnNpemUoNik7dmFyIEQ9bC5jaXJjbGUoKTtDLnN5bWJvbChmdW5jdGlvbigpe3JldHVybiBEfSk7cmV0dXJuIEN9Zyh4LHkpO3gucHJvdG90eXBlLl9idWlsZExpZ2h0d2VpZ2h0UGxvdEVudGl0aWVzPWZ1bmN0aW9uKEMpe3ZhciBGPXRoaXM7cmV0dXJuIHkucHJvdG90eXBlLl9idWlsZExpZ2h0d2VpZ2h0UGxvdEVudGl0aWVzLmNhbGwodGhpcyxDKS5tYXAoZnVuY3Rpb24oRCl7dmFyIEI9QS5QbG90Ll9zY2FsZWRBY2Nlc3NvcihGLnNpemUoKSkoRC5kYXR1bSxELmluZGV4LEQuZGF0YXNldCk7RC5kaWFtZXRlcj1CO3JldHVybiBEfSl9O3gucHJvdG90eXBlLl9jcmVhdGVEcmF3ZXI9ZnVuY3Rpb24oQyl7dmFyIEY9CnRoaXM7cmV0dXJuIG5ldyBrLlByb3h5RHJhd2VyKGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBtLlN5bWJvbFNWR0RyYXdlcn0sZnVuY3Rpb24oRCl7cmV0dXJuIG5ldyBxLkNhbnZhc0RyYXdlcihELG0ubWFrZVN5bWJvbENhbnZhc0RyYXdTdGVwKEMsZnVuY3Rpb24oKXtyZXR1cm4gQS5QbG90Ll9zY2FsZWRBY2Nlc3NvcihGLnN5bWJvbCgpKX0sZnVuY3Rpb24oKXtyZXR1cm4gQS5QbG90Ll9zY2FsZWRBY2Nlc3NvcihGLnNpemUoKSl9KSl9KX07eC5wcm90b3R5cGUuc2l6ZT1mdW5jdGlvbihDLEYpe2lmKG51bGw9PUMpcmV0dXJuIHRoaXMuX3Byb3BlcnR5QmluZGluZ3MuZ2V0KHguX1NJWkVfS0VZKTt0aGlzLl9iaW5kUHJvcGVydHkoeC5fU0laRV9LRVksQyxGKTt0aGlzLnJlbmRlcigpO3JldHVybiB0aGlzfTt4LnByb3RvdHlwZS5zeW1ib2w9ZnVuY3Rpb24oQyl7aWYobnVsbD09QylyZXR1cm4gdGhpcy5fcHJvcGVydHlCaW5kaW5ncy5nZXQoeC5fU1lNQk9MX0tFWSk7dGhpcy5fcHJvcGVydHlCaW5kaW5ncy5zZXQoeC5fU1lNQk9MX0tFWSwKe2FjY2Vzc29yOkN9KTt0aGlzLnJlbmRlcigpO3JldHVybiB0aGlzfTt4LnByb3RvdHlwZS5fZ2VuZXJhdGVEcmF3U3RlcHM9ZnVuY3Rpb24oKXt2YXIgQz1bXTtpZih0aGlzLl9hbmltYXRlT25OZXh0UmVuZGVyKCkpe3ZhciBGPXRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpLEQ9QS5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnN5bWJvbCgpKTtGLmQ9ZnVuY3Rpb24oQixHLEspe3JldHVybiBEKEIsRyxLKSgwKShudWxsKX07Qy5wdXNoKHthdHRyVG9Qcm9qZWN0b3I6RixhbmltYXRvcjp0aGlzLl9nZXRBbmltYXRvcih2LkFuaW1hdG9yLlJFU0VUKX0pfUMucHVzaCh7YXR0clRvUHJvamVjdG9yOnRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpLGFuaW1hdG9yOnRoaXMuX2dldEFuaW1hdG9yKHYuQW5pbWF0b3IuTUFJTil9KTtyZXR1cm4gQ307eC5wcm90b3R5cGUuX3Byb3BlcnR5UHJvamVjdG9ycz1mdW5jdGlvbigpe3ZhciBDPXkucHJvdG90eXBlLl9wcm9wZXJ0eVByb2plY3RvcnMuY2FsbCh0aGlzKSwKRj1BLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueCgpKSxEPUEuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy55KCkpO0MueD1GO0MueT1EO0MudHJhbnNmb3JtPWZ1bmN0aW9uKEIsRyxLKXtyZXR1cm4idHJhbnNsYXRlKCIrRihCLEcsSykrIiwiK0QoQixHLEspKyIpIn07Qy5kPXRoaXMuX2NvbnN0cnVjdFN5bWJvbEdlbmVyYXRvcigpO3JldHVybiBDfTt4LnByb3RvdHlwZS5fY29uc3RydWN0U3ltYm9sR2VuZXJhdG9yPWZ1bmN0aW9uKCl7dmFyIEM9QS5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnN5bWJvbCgpKSxGPUEuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy5zaXplKCkpO3JldHVybiBmdW5jdGlvbihELEIsRyl7cmV0dXJuIEMoRCxCLEcpKEYoRCxCLEcpKShudWxsKX19O3gucHJvdG90eXBlLl9lbnRpdHlCb3VuZHM9ZnVuY3Rpb24oQyl7cmV0dXJue3g6Qy5wb3NpdGlvbi54LUMuZGlhbWV0ZXIvMix5OkMucG9zaXRpb24ueS1DLmRpYW1ldGVyLzIsd2lkdGg6Qy5kaWFtZXRlciwKaGVpZ2h0OkMuZGlhbWV0ZXJ9fTt4LnByb3RvdHlwZS5fZW50aXR5VmlzaWJsZU9uUGxvdD1mdW5jdGlvbihDLEYpe3ZhciBEPXttaW46Ri50b3BMZWZ0LngsbWF4OkYuYm90dG9tUmlnaHQueH07Rj17bWluOkYudG9wTGVmdC55LG1heDpGLmJvdHRvbVJpZ2h0Lnl9O0M9dGhpcy5fZW50aXR5Qm91bmRzKEMpO3JldHVybiB0LkRPTS5pbnRlcnNlY3RzQkJveChELEYsQyl9O3gucHJvdG90eXBlLmVudGl0aWVzQXQ9ZnVuY3Rpb24oQyl7dmFyIEY9QS5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSksRD1BLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueSgpKSxCPUEuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy5zaXplKCkpO3JldHVybiB0aGlzLmVudGl0aWVzKCkuZmlsdGVyKGZ1bmN0aW9uKEcpe3ZhciBLPUcuZGF0dW0sTD1HLmluZGV4LEo9Ry5kYXRhc2V0O0c9RihLLEwsSik7dmFyIFA9RChLLEwsSik7Sz1CKEssTCxKKTtyZXR1cm4gRy1LLzI8PUMueCYmQy54PD1HK0svCjImJlAtSy8yPD1DLnkmJkMueTw9UCtLLzJ9KX07cmV0dXJuIHh9KGYoMTYpLlhZUGxvdCk7Yy5fU0laRV9LRVk9InNpemUiO2MuX1NZTUJPTF9LRVk9InN5bWJvbCI7ZC5TY2F0dGVyPWN9LGZ1bmN0aW9uKGMsZCxmKXt2YXIgZz10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8ZnVuY3Rpb24odCx2KXtmdW5jdGlvbiBBKCl7dGhpcy5jb25zdHJ1Y3Rvcj10fWZvcih2YXIgeSBpbiB2KXYuaGFzT3duUHJvcGVydHkoeSkmJih0W3ldPXZbeV0pO3QucHJvdG90eXBlPW51bGw9PT12P09iamVjdC5jcmVhdGUodik6KEEucHJvdG90eXBlPXYucHJvdG90eXBlLG5ldyBBKX0sbD1mKDcpLGs9Zig2KSxtPWYoNDcpLHA9ZigzKSxxPWYoMzUpLHI9ZigyKTtjPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIHYoKXt2YXIgQT10LmNhbGwodGhpcyl8fHRoaXM7QS5hZGRDbGFzcygic2VnbWVudC1wbG90Iik7QS5hdHRyKCJzdHJva2UiLChuZXcgcC5Db2xvcikucmFuZ2UoKVswXSk7QS5hdHRyKCJzdHJva2Utd2lkdGgiLAoiMnB4Iik7cmV0dXJuIEF9Zyh2LHQpO3YucHJvdG90eXBlLl9jcmVhdGVEcmF3ZXI9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGsuUHJveHlEcmF3ZXIoZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG0uU2VnbWVudFNWR0RyYXdlcn0sZnVuY3Rpb24oKXtxLndhcm4oImNhbnZhcyByZW5kZXJlciBpcyBub3Qgc3VwcG9ydGVkIG9uIFNlZ21lbnQgUGxvdCEiKTtyZXR1cm4gbnVsbH0pfTt2LnByb3RvdHlwZS5fZ2VuZXJhdGVEcmF3U3RlcHM9ZnVuY3Rpb24oKXtyZXR1cm5be2F0dHJUb1Byb2plY3Rvcjp0aGlzLl9nZXRBdHRyVG9Qcm9qZWN0b3IoKSxhbmltYXRvcjpuZXcgbC5OdWxsfV19O3YucHJvdG90eXBlLl9maWx0ZXJGb3JQcm9wZXJ0eT1mdW5jdGlvbihBKXtyZXR1cm4ieDIiPT09QT90LnByb3RvdHlwZS5fZmlsdGVyRm9yUHJvcGVydHkuY2FsbCh0aGlzLCJ4Iik6InkyIj09PUE/dC5wcm90b3R5cGUuX2ZpbHRlckZvclByb3BlcnR5LmNhbGwodGhpcywieSIpOnQucHJvdG90eXBlLl9maWx0ZXJGb3JQcm9wZXJ0eS5jYWxsKHRoaXMsCkEpfTt2LnByb3RvdHlwZS54PWZ1bmN0aW9uKEEseSl7aWYobnVsbD09QSlyZXR1cm4gdC5wcm90b3R5cGUueC5jYWxsKHRoaXMpO251bGw9PXk/dC5wcm90b3R5cGUueC5jYWxsKHRoaXMsQSk6KHQucHJvdG90eXBlLnguY2FsbCh0aGlzLEEseSksQT0oQT10aGlzLngyKCkpJiZBLmFjY2Vzc29yLG51bGwhPUEmJnRoaXMuX2JpbmRQcm9wZXJ0eSh2Ll9YMl9LRVksQSx5KSk7cmV0dXJuIHRoaXN9O3YucHJvdG90eXBlLngyPWZ1bmN0aW9uKEEpe2lmKG51bGw9PUEpcmV0dXJuIHRoaXMuX3Byb3BlcnR5QmluZGluZ3MuZ2V0KHYuX1gyX0tFWSk7dmFyIHk9dGhpcy54KCk7dGhpcy5fYmluZFByb3BlcnR5KHYuX1gyX0tFWSxBLHkmJnkuc2NhbGUpO3RoaXMucmVuZGVyKCk7cmV0dXJuIHRoaXN9O3YucHJvdG90eXBlLnk9ZnVuY3Rpb24oQSx5KXtpZihudWxsPT1BKXJldHVybiB0LnByb3RvdHlwZS55LmNhbGwodGhpcyk7bnVsbD09eT90LnByb3RvdHlwZS55LmNhbGwodGhpcyxBKToodC5wcm90b3R5cGUueS5jYWxsKHRoaXMsCkEseSksQT0oQT10aGlzLnkyKCkpJiZBLmFjY2Vzc29yLG51bGwhPUEmJnRoaXMuX2JpbmRQcm9wZXJ0eSh2Ll9ZMl9LRVksQSx5KSk7cmV0dXJuIHRoaXN9O3YucHJvdG90eXBlLnkyPWZ1bmN0aW9uKEEpe2lmKG51bGw9PUEpcmV0dXJuIHRoaXMuX3Byb3BlcnR5QmluZGluZ3MuZ2V0KHYuX1kyX0tFWSk7dmFyIHk9dGhpcy55KCk7dGhpcy5fYmluZFByb3BlcnR5KHYuX1kyX0tFWSxBLHkmJnkuc2NhbGUpO3RoaXMucmVuZGVyKCk7cmV0dXJuIHRoaXN9O3YucHJvdG90eXBlLl9wcm9wZXJ0eVByb2plY3RvcnM9ZnVuY3Rpb24oKXt2YXIgQT10LnByb3RvdHlwZS5fcHJvcGVydHlQcm9qZWN0b3JzLmNhbGwodGhpcyk7QS54MT1yLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueCgpKTtBLngyPW51bGw9PXRoaXMueDIoKT9yLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueCgpKTpyLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueDIoKSk7QS55MT1yLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueSgpKTsKQS55Mj1udWxsPT10aGlzLnkyKCk/ci5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkoKSk6ci5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkyKCkpO3JldHVybiBBfTt2LnByb3RvdHlwZS5lbnRpdGllc0F0PWZ1bmN0aW9uKEEpe0E9dGhpcy5lbnRpdHlOZWFyZXN0KEEpO3JldHVybiBudWxsIT1BP1tBXTpbXX07di5wcm90b3R5cGUuZW50aXRpZXNJbj1mdW5jdGlvbihBLHkpe2lmKG51bGw9PXkpe3ZhciB4PXttaW46QS50b3BMZWZ0LngsbWF4OkEuYm90dG9tUmlnaHQueH07QT17bWluOkEudG9wTGVmdC55LG1heDpBLmJvdHRvbVJpZ2h0Lnl9fWVsc2UgeD1BLEE9eTtyZXR1cm4gdGhpcy5fZW50aXRpZXNJbnRlcnNlY3RpbmcoeCxBKX07di5wcm90b3R5cGUuX2VudGl0aWVzSW50ZXJzZWN0aW5nPWZ1bmN0aW9uKEEseSl7dmFyIHg9dGhpcyxDPVtdLEY9dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCk7dGhpcy5lbnRpdGllcygpLmZvckVhY2goZnVuY3Rpb24oRCl7eC5fbGluZUludGVyc2VjdHNCb3goRCwKQSx5LEYpJiZDLnB1c2goRCl9KTtyZXR1cm4gQ307di5wcm90b3R5cGUuX2xpbmVJbnRlcnNlY3RzQm94PWZ1bmN0aW9uKEEseSx4LEMpe3ZhciBGPXRoaXMsRD1DLngxKEEuZGF0dW0sQS5pbmRleCxBLmRhdGFzZXQpLEI9Qy54MihBLmRhdHVtLEEuaW5kZXgsQS5kYXRhc2V0KSxHPUMueTEoQS5kYXR1bSxBLmluZGV4LEEuZGF0YXNldCk7QT1DLnkyKEEuZGF0dW0sQS5pbmRleCxBLmRhdGFzZXQpO2lmKHkubWluPD1EJiZEPD15Lm1heCYmeC5taW48PUcmJkc8PXgubWF4fHx5Lm1pbjw9QiYmQjw9eS5tYXgmJngubWluPD1BJiZBPD14Lm1heClyZXR1cm4hMDt2YXIgSz17eDpELHk6R30sTD17eDpCLHk6QX0sSj1be3g6eS5taW4seTp4Lm1pbn0se3g6eS5taW4seTp4Lm1heH0se3g6eS5tYXgseTp4Lm1heH0se3g6eS5tYXgseTp4Lm1pbn1dO3JldHVybiAwPEouZmlsdGVyKGZ1bmN0aW9uKFAsUyl7cmV0dXJuIDAhPT1TP0YuX2xpbmVJbnRlcnNlY3RzU2VnbWVudChLLEwsUCxKW1MtCjFdKSYmRi5fbGluZUludGVyc2VjdHNTZWdtZW50KFAsSltTLTFdLEssTCk6ITF9KS5sZW5ndGh9O3YucHJvdG90eXBlLl9saW5lSW50ZXJzZWN0c1NlZ21lbnQ9ZnVuY3Rpb24oQSx5LHgsQyl7ZnVuY3Rpb24gRihELEIsRyl7cmV0dXJuKEIueC1ELngpKihHLnktQi55KS0oQi55LUQueSkqKEcueC1CLngpfXJldHVybiAwPkYoQSx5LHgpKkYoQSx5LEMpfTtyZXR1cm4gdn0oZigxNikuWFlQbG90KTtjLl9YMl9LRVk9IngyIjtjLl9ZMl9LRVk9InkyIjtkLlNlZ21lbnQ9Y30sZnVuY3Rpb24oYyxkLGYpe3ZhciBnPXRoaXMmJnRoaXMuX19leHRlbmRzfHxmdW5jdGlvbihyLHQpe2Z1bmN0aW9uIHYoKXt0aGlzLmNvbnN0cnVjdG9yPXJ9Zm9yKHZhciBBIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShBKSYmKHJbQV09dFtBXSk7ci5wcm90b3R5cGU9bnVsbD09PXQ/T2JqZWN0LmNyZWF0ZSh0KToodi5wcm90b3R5cGU9dC5wcm90b3R5cGUsbmV3IHYpfSxsPWYoMSksaz1mKDcpLG09ZigyMCkscD0KZigwKTtjPWYoNTApO3ZhciBxPWYoMik7Zj1mdW5jdGlvbihyKXtmdW5jdGlvbiB0KCl7dmFyIHY9ci5jYWxsKHRoaXMpfHx0aGlzO3YuX3N0YWNraW5nUmVzdWx0PW0ubWVtVGh1bmsoZnVuY3Rpb24oKXtyZXR1cm4gdi5kYXRhc2V0cygpfSxmdW5jdGlvbigpe3JldHVybiB2LngoKS5hY2Nlc3Nvcn0sZnVuY3Rpb24oKXtyZXR1cm4gdi55KCkuYWNjZXNzb3J9LGZ1bmN0aW9uKCl7cmV0dXJuIHYuX3N0YWNraW5nT3JkZXJ9LGZ1bmN0aW9uKEEseSx4LEMpe3JldHVybiBwLlN0YWNraW5nLnN0YWNrKEEseSx4LEMpfSk7di5fc3RhY2tlZEV4dGVudD1tLm1lbVRodW5rKHYuX3N0YWNraW5nUmVzdWx0LGZ1bmN0aW9uKCl7cmV0dXJuIHYueCgpLmFjY2Vzc29yfSxmdW5jdGlvbigpe3JldHVybiB2Ll9maWx0ZXJGb3JQcm9wZXJ0eSgieSIpfSxmdW5jdGlvbihBLHkseCl7cmV0dXJuIHAuU3RhY2tpbmcuc3RhY2tlZEV4dGVudChBLHkseCl9KTt2Ll9iYXNlbGluZVZhbHVlPTA7di5fc3RhY2tpbmdPcmRlcj0KImJvdHRvbXVwIjt2LmFkZENsYXNzKCJzdGFja2VkLWFyZWEtcGxvdCIpO3YuYXR0cigiZmlsbC1vcGFjaXR5IiwxKTt2Ll9iYXNlbGluZVZhbHVlUHJvdmlkZXI9ZnVuY3Rpb24oKXtyZXR1cm5bdi5fYmFzZWxpbmVWYWx1ZV19O3YuY3JvcHBlZFJlbmRlcmluZ0VuYWJsZWQoITEpO3JldHVybiB2fWcodCxyKTt0LnByb3RvdHlwZS5jcm9wcGVkUmVuZGVyaW5nRW5hYmxlZD1mdW5jdGlvbih2KXtyZXR1cm4gbnVsbD09dj9yLnByb3RvdHlwZS5jcm9wcGVkUmVuZGVyaW5nRW5hYmxlZC5jYWxsKHRoaXMpOnY/KHAuV2luZG93Lndhcm4oIldhcm5pbmc6IFN0YWNrZWQgQXJlYSBQbG90IGRvZXMgbm90IHN1cHBvcnQgY3JvcHBlZCByZW5kZXJpbmcuIiksdGhpcyk6ci5wcm90b3R5cGUuY3JvcHBlZFJlbmRlcmluZ0VuYWJsZWQuY2FsbCh0aGlzLHYpfTt0LnByb3RvdHlwZS5fZ2V0QW5pbWF0b3I9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGsuTnVsbH07dC5wcm90b3R5cGUuX3NldHVwPWZ1bmN0aW9uKCl7ci5wcm90b3R5cGUuX3NldHVwLmNhbGwodGhpcyk7CnRoaXMuX2Jhc2VsaW5lPXRoaXMuX3JlbmRlckFyZWEuYXBwZW5kKCJsaW5lIikuY2xhc3NlZCgiYmFzZWxpbmUiLCEwKX07dC5wcm90b3R5cGUueD1mdW5jdGlvbih2LEEpe2lmKG51bGw9PXYpcmV0dXJuIHIucHJvdG90eXBlLnguY2FsbCh0aGlzKTtudWxsPT1BP3IucHJvdG90eXBlLnguY2FsbCh0aGlzLHYpOnIucHJvdG90eXBlLnguY2FsbCh0aGlzLHYsQSk7dGhpcy5fY2hlY2tTYW1lRG9tYWluKCk7cmV0dXJuIHRoaXN9O3QucHJvdG90eXBlLnk9ZnVuY3Rpb24odixBKXtpZihudWxsPT12KXJldHVybiByLnByb3RvdHlwZS55LmNhbGwodGhpcyk7bnVsbD09QT9yLnByb3RvdHlwZS55LmNhbGwodGhpcyx2KTpyLnByb3RvdHlwZS55LmNhbGwodGhpcyx2LEEpO3RoaXMuX2NoZWNrU2FtZURvbWFpbigpO3JldHVybiB0aGlzfTt0LnByb3RvdHlwZS5zdGFja2luZ09yZGVyPWZ1bmN0aW9uKHYpe2lmKG51bGw9PXYpcmV0dXJuIHRoaXMuX3N0YWNraW5nT3JkZXI7dGhpcy5fc3RhY2tpbmdPcmRlcj0Kdjt0aGlzLl9vbkRhdGFzZXRVcGRhdGUoKTtyZXR1cm4gdGhpc307dC5wcm90b3R5cGUuZG93bnNhbXBsaW5nRW5hYmxlZD1mdW5jdGlvbigpe3JldHVybiByLnByb3RvdHlwZS5kb3duc2FtcGxpbmdFbmFibGVkLmNhbGwodGhpcyl9O3QucHJvdG90eXBlLl9hZGRpdGlvbmFsUGFpbnQ9ZnVuY3Rpb24oKXt2YXIgdj10aGlzLnkoKS5zY2FsZS5zY2FsZSh0aGlzLl9iYXNlbGluZVZhbHVlKTt2PXt4MTowLHkxOnYseDI6dGhpcy53aWR0aCgpLHkyOnZ9O3RoaXMuX2dldEFuaW1hdG9yKCJiYXNlbGluZSIpLmFuaW1hdGUodGhpcy5fYmFzZWxpbmUsdil9O3QucHJvdG90eXBlLl91cGRhdGVZU2NhbGU9ZnVuY3Rpb24oKXt2YXIgdj10aGlzLnkoKTt2PXYmJnYuc2NhbGU7bnVsbCE9diYmKHYuYWRkUGFkZGluZ0V4Y2VwdGlvbnNQcm92aWRlcih0aGlzLl9iYXNlbGluZVZhbHVlUHJvdmlkZXIpLHYuYWRkSW5jbHVkZWRWYWx1ZXNQcm92aWRlcih0aGlzLl9iYXNlbGluZVZhbHVlUHJvdmlkZXIpKX07CnQucHJvdG90eXBlLl9vbkRhdGFzZXRVcGRhdGU9ZnVuY3Rpb24oKXt0aGlzLl9jaGVja1NhbWVEb21haW4oKTtyLnByb3RvdHlwZS5fb25EYXRhc2V0VXBkYXRlLmNhbGwodGhpcyk7cmV0dXJuIHRoaXN9O3QucHJvdG90eXBlLmdldEV4dGVudHNGb3JQcm9wZXJ0eT1mdW5jdGlvbih2KXtyZXR1cm4ieSI9PT12P1t0aGlzLl9zdGFja2VkRXh0ZW50KCldOnIucHJvdG90eXBlLmdldEV4dGVudHNGb3JQcm9wZXJ0eS5jYWxsKHRoaXMsdil9O3QucHJvdG90eXBlLl9jaGVja1NhbWVEb21haW49ZnVuY3Rpb24oKXtpZih0aGlzLl9wcm9qZWN0b3JzUmVhZHkoKSl7dmFyIHY9dGhpcy5kYXRhc2V0cygpLEE9dGhpcy54KCkuYWNjZXNzb3IseT12Lm1hcChmdW5jdGlvbihDKXtyZXR1cm4gbC5zZXQoQy5kYXRhKCkubWFwKGZ1bmN0aW9uKEYsRCl7cmV0dXJuIEEoRixELEMpLnRvU3RyaW5nKCl9KSkudmFsdWVzKCl9KSx4PXQuX2RvbWFpbktleXModixBKTt5LnNvbWUoZnVuY3Rpb24oQyl7cmV0dXJuIEMubGVuZ3RoIT09CngubGVuZ3RofSkmJnAuV2luZG93Lndhcm4oInRoZSBkb21haW5zIGFjcm9zcyB0aGUgZGF0YXNldHMgYXJlIG5vdCB0aGUgc2FtZS4gUGxvdCBtYXkgcHJvZHVjZSB1bmludGVuZGVkIGJlaGF2aW9yLiIpfX07dC5fZG9tYWluS2V5cz1mdW5jdGlvbih2LEEpe3ZhciB5PWwuc2V0KCk7di5mb3JFYWNoKGZ1bmN0aW9uKHgpe3guZGF0YSgpLmZvckVhY2goZnVuY3Rpb24oQyxGKXt5LmFkZChBKEMsRix4KSl9KX0pO3JldHVybiB5LnZhbHVlcygpfTt0LnByb3RvdHlwZS5fcHJvcGVydHlQcm9qZWN0b3JzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdihELEIsRyl7cmV0dXJuIHAuU3RhY2tpbmcubm9ybWFsaXplS2V5KEMoRCxCLEcpKX12YXIgQT10aGlzLHk9ci5wcm90b3R5cGUuX3Byb3BlcnR5UHJvamVjdG9ycy5jYWxsKHRoaXMpLHg9dGhpcy55KCkuYWNjZXNzb3IsQz10aGlzLngoKS5hY2Nlc3NvcixGPXRoaXMuX3N0YWNraW5nUmVzdWx0KCk7eS5kPXRoaXMuX2NvbnN0cnVjdEFyZWFQcm9qZWN0b3IocS5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSksCmZ1bmN0aW9uKEQsQixHKXtyZXR1cm4gQS55KCkuc2NhbGUuc2NhbGUoK3goRCxCLEcpK0YuZ2V0KEcpLmdldCh2KEQsQixHKSkub2Zmc2V0KX0sZnVuY3Rpb24oRCxCLEcpe3JldHVybiBBLnkoKS5zY2FsZS5zY2FsZShGLmdldChHKS5nZXQodihELEIsRykpLm9mZnNldCl9KTtyZXR1cm4geX07dC5wcm90b3R5cGUuX3BpeGVsUG9pbnQ9ZnVuY3Rpb24odixBLHkpe3ZhciB4PXIucHJvdG90eXBlLl9waXhlbFBvaW50LmNhbGwodGhpcyx2LEEseSksQz10aGlzLngoKS5hY2Nlc3Nvcih2LEEseSk7dj10aGlzLnkoKS5hY2Nlc3Nvcih2LEEseSk7eT10aGlzLnkoKS5zY2FsZS5zY2FsZSgrdit0aGlzLl9zdGFja2luZ1Jlc3VsdCgpLmdldCh5KS5nZXQocC5TdGFja2luZy5ub3JtYWxpemVLZXkoQykpLm9mZnNldCk7cmV0dXJue3g6eC54LHl9fTtyZXR1cm4gdH0oYy5BcmVhKTtkLlN0YWNrZWRBcmVhPWZ9LGZ1bmN0aW9uKGMsZCxmKXt2YXIgZz10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8ZnVuY3Rpb24odCwKdil7ZnVuY3Rpb24gQSgpe3RoaXMuY29uc3RydWN0b3I9dH1mb3IodmFyIHkgaW4gdil2Lmhhc093blByb3BlcnR5KHkpJiYodFt5XT12W3ldKTt0LnByb3RvdHlwZT1udWxsPT09dj9PYmplY3QuY3JlYXRlKHYpOihBLnByb3RvdHlwZT12LnByb3RvdHlwZSxuZXcgQSl9LGw9Zig1KSxrPWYoOCksbT1mKDIwKSxwPWYoMCkscT1mKDI3KSxyPWYoMik7Yz1mdW5jdGlvbih0KXtmdW5jdGlvbiB2KEEpe3ZvaWQgMD09PUEmJihBPSJ2ZXJ0aWNhbCIpO3ZhciB5PXQuY2FsbCh0aGlzLEEpfHx0aGlzO3kuX2V4dHJlbWFGb3JtYXR0ZXI9ay5pZGVudGl0eSgpO3kuX3N0YWNraW5nUmVzdWx0PW0ubWVtVGh1bmsoZnVuY3Rpb24oKXtyZXR1cm4geS5kYXRhc2V0cygpfSxmdW5jdGlvbigpe3JldHVybiB5LnBvc2l0aW9uKCkuYWNjZXNzb3J9LGZ1bmN0aW9uKCl7cmV0dXJuIHkubGVuZ3RoKCkuYWNjZXNzb3J9LGZ1bmN0aW9uKCl7cmV0dXJuIHkuX3N0YWNraW5nT3JkZXJ9LGZ1bmN0aW9uKHgsCkMsRixEKXtyZXR1cm4gcC5TdGFja2luZy5zdGFjayh4LEMsRixEKX0pO3kuX3N0YWNrZWRFeHRlbnQ9bS5tZW1UaHVuayh5Ll9zdGFja2luZ1Jlc3VsdCxmdW5jdGlvbigpe3JldHVybiB5LnBvc2l0aW9uKCkuYWNjZXNzb3J9LGZ1bmN0aW9uKCl7cmV0dXJuIHkuX2ZpbHRlckZvclByb3BlcnR5KHkuX2lzVmVydGljYWw/InkiOiJ4Iil9LGZ1bmN0aW9uKHgsQyxGKXtyZXR1cm4gcC5TdGFja2luZy5zdGFja2VkRXh0ZW50KHgsQyxGKX0pO3kuYWRkQ2xhc3MoInN0YWNrZWQtYmFyLXBsb3QiKTt5Ll9zdGFja2luZ09yZGVyPSJib3R0b211cCI7cmV0dXJuIHl9Zyh2LHQpO3YucHJvdG90eXBlLnN0YWNraW5nT3JkZXI9ZnVuY3Rpb24oQSl7aWYobnVsbD09QSlyZXR1cm4gdGhpcy5fc3RhY2tpbmdPcmRlcjt0aGlzLl9zdGFja2luZ09yZGVyPUE7dGhpcy5fb25EYXRhc2V0VXBkYXRlKCk7cmV0dXJuIHRoaXN9O3YucHJvdG90eXBlLmV4dHJlbWFGb3JtYXR0ZXI9ZnVuY3Rpb24oQSl7aWYoMD09PQphcmd1bWVudHMubGVuZ3RoKXJldHVybiB0aGlzLl9leHRyZW1hRm9ybWF0dGVyO3RoaXMuX2V4dHJlbWFGb3JtYXR0ZXI9QTt0aGlzLnJlbmRlcigpO3JldHVybiB0aGlzfTt2LnByb3RvdHlwZS5fc2V0dXA9ZnVuY3Rpb24oKXt0LnByb3RvdHlwZS5fc2V0dXAuY2FsbCh0aGlzKTt0aGlzLl9sYWJlbEFyZWE9dGhpcy5fcmVuZGVyQXJlYS5hcHBlbmQoImciKS5jbGFzc2VkKHEuQmFyLl9MQUJFTF9BUkVBX0NMQVNTLCEwKTt2YXIgQT1uZXcgbC5TdmdDb250ZXh0KHRoaXMuX2xhYmVsQXJlYS5ub2RlKCkpO3RoaXMuX21lYXN1cmVyPW5ldyBsLkNhY2hlTWVhc3VyZXIoQSk7dGhpcy5fd3JpdGVyPW5ldyBsLldyaXRlcih0aGlzLl9tZWFzdXJlcixBKX07di5wcm90b3R5cGUuX2RyYXdMYWJlbHM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBBKEwsSil7dmFyIFA9eC5fZ2VuZXJhdGVBdHRyVG9Qcm9qZWN0b3IoKSxTPXgud2lkdGgoKSxOPXguaGVpZ2h0KCk7TC5mb3JFYWNoKGZ1bmN0aW9uKFQpe2lmKFQuZXh0ZW50IT09CkMpe3ZhciBZPXguZXh0cmVtYUZvcm1hdHRlcigpKFQuZXh0ZW50KSxhYT14Ll9tZWFzdXJlci5tZWFzdXJlKFkpLGhhPVQuc3RhY2tlZERhdHVtLFg9aGEub3JpZ2luYWxEYXR1bSxjYT1oYS5vcmlnaW5hbEluZGV4O2hhPWhhLm9yaWdpbmFsRGF0YXNldDt4Ll9pc0RhdHVtT25TY3JlZW4oUCxTLE4sWCxjYSxoYSkmJihYPXIuUGxvdC5fc2NhbGVkQWNjZXNzb3IoeC5hdHRyKHEuQmFyLl9CQVJfVEhJQ0tORVNTX0tFWSkpKFgsY2EsaGEpLGNhPUQuc2NhbGUoVC5leHRlbnQpLFQ9eC5fZ2V0UG9zaXRpb25BdHRyKEYuc2NhbGUoVC5heGlzVmFsdWUpLFgpK1gvMixUPUooeC5faXNWZXJ0aWNhbD97eDpULHk6Y2F9Ont4OmNhLHk6VH0sYWEsWCksWT15KFkse3RvcExlZnQ6VCxib3R0b21SaWdodDp7eDpULngrYWEud2lkdGgseTpULnkrYWEuaGVpZ2h0fX0sWCksSy5wdXNoKFkpKX19KX1mdW5jdGlvbiB5KEwsSixQKXt2YXIgUz1KLnRvcExlZnQsTj1TLngsVD1TLnk7Uz1KLmJvdHRvbVJpZ2h0LngtCkoudG9wTGVmdC54O0o9Si5ib3R0b21SaWdodC55LUoudG9wTGVmdC55O1A9eC5faXNWZXJ0aWNhbD9TPlA6Sj5QO1B8fChOPXguX2xhYmVsQXJlYS5hcHBlbmQoImciKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitOKyIsICIrVCsiKSIpLE4uY2xhc3NlZCgic3RhY2tlZC1iYXItbGFiZWwiLCEwKSx4Ll93cml0ZXIud3JpdGUoTCxTLEose3hBbGlnbjoiY2VudGVyIix5QWxpZ246ImNlbnRlciJ9LE4ubm9kZSgpKSk7cmV0dXJuIFB9dmFyIHg9dGhpczt0LnByb3RvdHlwZS5fZHJhd0xhYmVscy5jYWxsKHRoaXMpO3RoaXMuX2xhYmVsQXJlYS5zZWxlY3RBbGwoImciKS5yZW1vdmUoKTt2YXIgQz0rdGhpcy5iYXNlbGluZVZhbHVlKCksRj10aGlzLnBvc2l0aW9uKCkuc2NhbGUsRD10aGlzLmxlbmd0aCgpLnNjYWxlLEI9cC5TdGFja2luZy5zdGFja2VkRXh0ZW50cyh0aGlzLl9zdGFja2luZ1Jlc3VsdCgpKSxHPUIubWluaW11bUV4dGVudHMsSz1bXTtBKEIubWF4aW11bUV4dGVudHMsCmZ1bmN0aW9uKEwsSil7dmFyIFA9eC5faXNWZXJ0aWNhbD9KLndpZHRoOkouaGVpZ2h0O0o9eC5faXNWZXJ0aWNhbD9KLmhlaWdodDpKLndpZHRoO3JldHVybnt4OnguX2lzVmVydGljYWw/TC54LVAvMjpMLngrdi5fRVhUUkVNQV9MQUJFTF9NQVJHSU5fRlJPTV9CQVIseTp4Ll9pc1ZlcnRpY2FsP0wueS1KOkwueS1QLzJ9fSk7QShHLGZ1bmN0aW9uKEwsSil7dmFyIFA9eC5faXNWZXJ0aWNhbD9KLndpZHRoOkouaGVpZ2h0O0o9eC5faXNWZXJ0aWNhbD9KLmhlaWdodDpKLndpZHRoO3JldHVybnt4OnguX2lzVmVydGljYWw/TC54LVAvMjpMLngtSix5OnguX2lzVmVydGljYWw/TC55K3YuX0VYVFJFTUFfTEFCRUxfTUFSR0lOX0ZST01fQkFSOkwueS1QLzJ9fSk7Sy5zb21lKGZ1bmN0aW9uKEwpe3JldHVybiBMfSkmJnRoaXMuX2xhYmVsQXJlYS5zZWxlY3RBbGwoImciKS5yZW1vdmUoKX07di5wcm90b3R5cGUuX2dlbmVyYXRlQXR0clRvUHJvamVjdG9yPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gQShTLApOLFQpe3JldHVybiAwPitMKFMsTixUKT9DKFMsTixUKTp4KFMsTixUKX1mdW5jdGlvbiB5KFMsTixUKXtyZXR1cm4gTWF0aC5hYnMoeChTLE4sVCktQyhTLE4sVCkpfWZ1bmN0aW9uIHgoUyxOLFQpe3JldHVybiBLLnNjYWxlKCtMKFMsTixUKStQLmdldChUKS5nZXQoRihTLE4sVCkpLm9mZnNldCl9ZnVuY3Rpb24gQyhTLE4sVCl7cmV0dXJuIEsuc2NhbGUoUC5nZXQoVCkuZ2V0KEYoUyxOLFQpKS5vZmZzZXQpfWZ1bmN0aW9uIEYoUyxOLFQpe3JldHVybiBwLlN0YWNraW5nLm5vcm1hbGl6ZUtleShKKFMsTixUKSl9dmFyIEQ9dGhpcyxCPXQucHJvdG90eXBlLl9nZW5lcmF0ZUF0dHJUb1Byb2plY3Rvci5jYWxsKHRoaXMpLEc9dGhpcy5faXNWZXJ0aWNhbD8ieSI6IngiLEs9dGhpcy5sZW5ndGgoKS5zY2FsZSxMPXRoaXMubGVuZ3RoKCkuYWNjZXNzb3IsSj10aGlzLnBvc2l0aW9uKCkuYWNjZXNzb3IsUD10aGlzLl9zdGFja2luZ1Jlc3VsdCgpO0JbdGhpcy5faXNWZXJ0aWNhbD8iaGVpZ2h0IjoKIndpZHRoIl09eTtCW0ddPWZ1bmN0aW9uKFMsTixUKXtyZXR1cm4gRC5faXNWZXJ0aWNhbD9BKFMsTixUKTpBKFMsTixUKS15KFMsTixUKX07cmV0dXJuIEJ9O3YucHJvdG90eXBlLmdldEV4dGVudHNGb3JQcm9wZXJ0eT1mdW5jdGlvbihBKXtyZXR1cm4gQT09PSh0aGlzLl9pc1ZlcnRpY2FsPyJ5IjoieCIpP1t0aGlzLl9zdGFja2VkRXh0ZW50KCldOnQucHJvdG90eXBlLmdldEV4dGVudHNGb3JQcm9wZXJ0eS5jYWxsKHRoaXMsQSl9O3YucHJvdG90eXBlLmludmFsaWRhdGVDYWNoZT1mdW5jdGlvbigpe3QucHJvdG90eXBlLmludmFsaWRhdGVDYWNoZS5jYWxsKHRoaXMpO3RoaXMuX21lYXN1cmVyLnJlc2V0KCl9O3JldHVybiB2fShxLkJhcik7Yy5fRVhUUkVNQV9MQUJFTF9NQVJHSU5fRlJPTV9CQVI9NTtkLlN0YWNrZWRCYXI9Y30sZnVuY3Rpb24oYyxkLGYpe3ZhciBnPXRoaXMmJnRoaXMuX19leHRlbmRzfHxmdW5jdGlvbihtLHApe2Z1bmN0aW9uIHEoKXt0aGlzLmNvbnN0cnVjdG9yPQptfWZvcih2YXIgciBpbiBwKXAuaGFzT3duUHJvcGVydHkocikmJihtW3JdPXBbcl0pO20ucHJvdG90eXBlPW51bGw9PT1wP09iamVjdC5jcmVhdGUocCk6KHEucHJvdG90eXBlPXAucHJvdG90eXBlLG5ldyBxKX0sbD1mKDApO2M9ZigyNyk7dmFyIGs9ZigyKTtmPWZ1bmN0aW9uKG0pe2Z1bmN0aW9uIHAoKXt2YXIgcT1tLmNhbGwodGhpcyl8fHRoaXM7cS5fY29ubmVjdG9yc0VuYWJsZWQ9ITE7cS5hZGRDbGFzcygid2F0ZXJmYWxsLXBsb3QiKTtyZXR1cm4gcX1nKHAsbSk7cC5wcm90b3R5cGUuY29ubmVjdG9yc0VuYWJsZWQ9ZnVuY3Rpb24ocSl7aWYobnVsbD09cSlyZXR1cm4gdGhpcy5fY29ubmVjdG9yc0VuYWJsZWQ7dGhpcy5fY29ubmVjdG9yc0VuYWJsZWQ9cTtyZXR1cm4gdGhpc307cC5wcm90b3R5cGUudG90YWw9ZnVuY3Rpb24ocSl7aWYobnVsbD09cSlyZXR1cm4gdGhpcy5fcHJvcGVydHlCaW5kaW5ncy5nZXQocC5fVE9UQUxfS0VZKTt0aGlzLl9iaW5kUHJvcGVydHkocC5fVE9UQUxfS0VZLApxLG51bGwpO3JldHVybiB0aGlzfTtwLnByb3RvdHlwZS5fYWRkaXRpb25hbFBhaW50PWZ1bmN0aW9uKHEpe3ZhciByPXRoaXM7dGhpcy5fY29ubmVjdG9yQXJlYS5zZWxlY3RBbGwoImxpbmUiKS5yZW1vdmUoKTt0aGlzLl9jb25uZWN0b3JzRW5hYmxlZCYmbC5XaW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3JldHVybiByLl9kcmF3Q29ubmVjdG9ycygpfSxxKX07cC5wcm90b3R5cGUuX2NyZWF0ZU5vZGVzRm9yRGF0YXNldD1mdW5jdGlvbihxKXtxPW0ucHJvdG90eXBlLl9jcmVhdGVOb2Rlc0ZvckRhdGFzZXQuY2FsbCh0aGlzLHEpO3RoaXMuX2Nvbm5lY3RvckFyZWE9dGhpcy5fcmVuZGVyQXJlYS5hcHBlbmQoImciKS5jbGFzc2VkKHAuX0NPTk5FQ1RPUl9BUkVBX0NMQVNTLCEwKTtyZXR1cm4gcX07cC5wcm90b3R5cGUuZ2V0RXh0ZW50c0ZvclByb3BlcnR5PWZ1bmN0aW9uKHEpe3JldHVybiJ5Ij09PXE/W3RoaXMuX2V4dGVudF06bS5wcm90b3R5cGUuZ2V0RXh0ZW50c0ZvclByb3BlcnR5LmNhbGwodGhpcywKcSl9O3AucHJvdG90eXBlLl9nZW5lcmF0ZUF0dHJUb1Byb2plY3Rvcj1mdW5jdGlvbigpe3ZhciBxPXRoaXMscj1tLnByb3RvdHlwZS5fZ2VuZXJhdGVBdHRyVG9Qcm9qZWN0b3IuY2FsbCh0aGlzKSx0PXRoaXMueSgpLnNjYWxlLHY9ay5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnRvdGFsKCkpO251bGw9PXRoaXMuYXR0cigieSIpJiYoci55PWZ1bmN0aW9uKEEseSx4KXt2YXIgQz1xLnkoKS5hY2Nlc3NvcihBLHkseCk7aWYodihBLHkseCkpcmV0dXJuIE1hdGgubWluKHQuc2NhbGUoQyksdC5zY2FsZSgwKSk7QT1xLl9zdWJ0b3RhbHNbeV07aWYoMD09PXkpcmV0dXJuIDA+Qz90LnNjYWxlKEEtQyk6dC5zY2FsZShBKTt5PXEuX3N1YnRvdGFsc1t5LTFdO3JldHVybiBBPnk/dC5zY2FsZShBKTp0LnNjYWxlKHkpfSk7bnVsbD09dGhpcy5hdHRyKCJoZWlnaHQiKSYmKHIuaGVpZ2h0PWZ1bmN0aW9uKEEseSx4KXt2YXIgQz12KEEseSx4KTtBPXEueSgpLmFjY2Vzc29yKEEseSx4KTtpZihDKXJldHVybiBNYXRoLmFicyh0LnNjYWxlKEEpLQp0LnNjYWxlKDApKTtDPXEuX3N1YnRvdGFsc1t5XTtpZigwPT09eSlyZXR1cm4gTWF0aC5hYnModC5zY2FsZShDKS10LnNjYWxlKEMtQSkpO3k9cS5fc3VidG90YWxzW3ktMV07cmV0dXJuIE1hdGguYWJzKHQuc2NhbGUoQyktdC5zY2FsZSh5KSl9KTtyWyJjbGFzcyJdPWZ1bmN0aW9uKEEseSx4KXt2YXIgQz0iIjtudWxsIT1xLmF0dHIoImNsYXNzIikmJihDPXEuYXR0cigiY2xhc3MiKS5hY2Nlc3NvcihBLHkseCkrIiAiKTtpZih2KEEseSx4KSlyZXR1cm4gQytwLl9CQVJfVE9UQUxfQ0xBU1M7QT1xLnkoKS5hY2Nlc3NvcihBLHkseCk7cmV0dXJuIEMrKDA8QT9wLl9CQVJfR1JPV1RIX0NMQVNTOnAuX0JBUl9ERUNMSU5FX0NMQVNTKX07cmV0dXJuIHJ9O3AucHJvdG90eXBlLl9vbkRhdGFzZXRVcGRhdGU9ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVTdWJ0b3RhbHMoKTttLnByb3RvdHlwZS5fb25EYXRhc2V0VXBkYXRlLmNhbGwodGhpcyk7cmV0dXJuIHRoaXN9O3AucHJvdG90eXBlLl9jYWxjdWxhdGVTdWJ0b3RhbHNBbmRFeHRlbnQ9CmZ1bmN0aW9uKHEpe3ZhciByPXRoaXMsdD1OdW1iZXIuTUFYX1ZBTFVFLHY9TnVtYmVyLk1JTl9WQUxVRSxBPTAseT0hMTtxLmRhdGEoKS5mb3JFYWNoKGZ1bmN0aW9uKHgsQyl7dmFyIEY9ci55KCkuYWNjZXNzb3IoeCxDLHEpOyh4PXIudG90YWwoKS5hY2Nlc3Nvcih4LEMscSkpJiYwIT09Q3x8KEErPUYpO3IuX3N1YnRvdGFscy5wdXNoKEEpO0E8dCYmKHQ9QSk7QT52JiYodj1BKTt4JiYoRjx0JiYodD1GKSxGPnYmJih2PUYpKTtpZigheSYmeCl7Qz1GLUE7Zm9yKEY9MDtGPHIuX3N1YnRvdGFscy5sZW5ndGg7RisrKXIuX3N1YnRvdGFsc1tGXSs9Qzt5PSEwO0ErPUM7dCs9Qzt2Kz1DfX0pO3RoaXMuX2V4dGVudD1bdCx2XX07cC5wcm90b3R5cGUuX2RyYXdDb25uZWN0b3JzPWZ1bmN0aW9uKCl7Zm9yKHZhciBxPXRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpLHI9dGhpcy5kYXRhc2V0cygpWzBdLHQ9MTt0PHIuZGF0YSgpLmxlbmd0aDt0Kyspe3ZhciB2PXQtMSxBPXIuZGF0YSgpW3RdLAp5PXIuZGF0YSgpW3ZdO3k9cS54KHksdixyKTt2YXIgeD1xLngoQSx0LHIpK3Eud2lkdGgoQSx0LHIpLEM9cS55KEEsdCxyKTtpZigwPHRoaXMuX3N1YnRvdGFsc1t0XSYmdGhpcy5fc3VidG90YWxzW3RdPnRoaXMuX3N1YnRvdGFsc1t2XXx8MD50aGlzLl9zdWJ0b3RhbHNbdF0mJnRoaXMuX3N1YnRvdGFsc1t0XT49dGhpcy5fc3VidG90YWxzW3ZdKUM9cS55KEEsdCxyKStxLmhlaWdodChBLHQscik7dGhpcy5fY29ubmVjdG9yQXJlYS5hcHBlbmQoImxpbmUiKS5jbGFzc2VkKHAuX0NPTk5FQ1RPUl9DTEFTUywhMCkuYXR0cigieDEiLHkpLmF0dHIoIngyIix4KS5hdHRyKCJ5MSIsQykuYXR0cigieTIiLEMpfX07cC5wcm90b3R5cGUuX3VwZGF0ZVN1YnRvdGFscz1mdW5jdGlvbigpe3ZhciBxPXRoaXMuZGF0YXNldHMoKTswPHEubGVuZ3RoJiYocT1xW3EubGVuZ3RoLTFdLHRoaXMuX3N1YnRvdGFscz1bXSx0aGlzLl9jYWxjdWxhdGVTdWJ0b3RhbHNBbmRFeHRlbnQocSkpfTtyZXR1cm4gcH0oYy5CYXIpOwpmLl9CQVJfREVDTElORV9DTEFTUz0id2F0ZXJmYWxsLWRlY2xpbmUiO2YuX0JBUl9HUk9XVEhfQ0xBU1M9IndhdGVyZmFsbC1ncm93dGgiO2YuX0JBUl9UT1RBTF9DTEFTUz0id2F0ZXJmYWxsLXRvdGFsIjtmLl9DT05ORUNUT1JfQ0xBU1M9ImNvbm5lY3RvciI7Zi5fQ09OTkVDVE9SX0FSRUFfQ0xBU1M9ImNvbm5lY3Rvci1hcmVhIjtmLl9UT1RBTF9LRVk9InRvdGFsIjtkLldhdGVyZmFsbD1mfSxmdW5jdGlvbihjLGQsZil7dmFyIGc9dGhpcyYmdGhpcy5fX2V4dGVuZHN8fGZ1bmN0aW9uKG0scCl7ZnVuY3Rpb24gcSgpe3RoaXMuY29uc3RydWN0b3I9bX1mb3IodmFyIHIgaW4gcClwLmhhc093blByb3BlcnR5KHIpJiYobVtyXT1wW3JdKTttLnByb3RvdHlwZT1udWxsPT09cD9PYmplY3QuY3JlYXRlKHApOihxLnByb3RvdHlwZT1wLnByb3RvdHlwZSxuZXcgcSl9LGw9ZigxKSxrPWYoMCk7Yz1mdW5jdGlvbihtKXtmdW5jdGlvbiBwKHEpe3ZhciByPW0uY2FsbCh0aGlzKXx8dGhpczsKc3dpdGNoKHEpe2Nhc2UgbnVsbDpjYXNlIHZvaWQgMDpudWxsPT1wLl9wbG90dGFibGVDb2xvckNhY2hlJiYocC5fcGxvdHRhYmxlQ29sb3JDYWNoZT1wLl9nZXRQbG90dGFibGVDb2xvcnMoKSk7cT1sLnNjYWxlT3JkaW5hbCgpLnJhbmdlKHAuX3Bsb3R0YWJsZUNvbG9yQ2FjaGUpO2JyZWFrO2Nhc2UgIkNhdGVnb3J5MTAiOmNhc2UgImNhdGVnb3J5MTAiOmNhc2UgIjEwIjpxPWwuc2NhbGVPcmRpbmFsKGwuc2NoZW1lQ2F0ZWdvcnkxMCk7YnJlYWs7Y2FzZSAiQ2F0ZWdvcnkyMCI6Y2FzZSAiY2F0ZWdvcnkyMCI6Y2FzZSAiMjAiOnE9bC5zY2FsZU9yZGluYWwobC5zY2hlbWVDYXRlZ29yeTIwKTticmVhaztjYXNlICJDYXRlZ29yeTIwYiI6Y2FzZSAiY2F0ZWdvcnkyMGIiOmNhc2UgIjIwYiI6cT1sLnNjYWxlT3JkaW5hbChsLnNjaGVtZUNhdGVnb3J5MjBiKTticmVhaztjYXNlICJDYXRlZ29yeTIwYyI6Y2FzZSAiY2F0ZWdvcnkyMGMiOmNhc2UgIjIwYyI6cT1sLnNjYWxlT3JkaW5hbChsLnNjaGVtZUNhdGVnb3J5MjBjKTsKYnJlYWs7ZGVmYXVsdDp0aHJvdyBFcnJvcigiVW5zdXBwb3J0ZWQgQ29sb3JTY2FsZSB0eXBlIik7fXIuX2QzU2NhbGU9cTtyZXR1cm4gcn1nKHAsbSk7cC5wcm90b3R5cGUuZXh0ZW50T2ZWYWx1ZXM9ZnVuY3Rpb24ocSl7cmV0dXJuIGsuQXJyYXkudW5pcShxKX07cC5wcm90b3R5cGUuX2dldEV4dGVudD1mdW5jdGlvbigpe3JldHVybiBrLkFycmF5LnVuaXEodGhpcy5fZ2V0QWxsSW5jbHVkZWRWYWx1ZXMoKSl9O3AuaW52YWxpZGF0ZUNvbG9yQ2FjaGU9ZnVuY3Rpb24oKXtwLl9wbG90dGFibGVDb2xvckNhY2hlPW51bGx9O3AuX2dldFBsb3R0YWJsZUNvbG9ycz1mdW5jdGlvbigpe2Zvcih2YXIgcT1bXSxyPWwuc2VsZWN0KCJib2R5IikuYXBwZW5kKCJwbG90dGFibGUtY29sb3ItdGVzdGVyIiksdD1rLkNvbG9yLmNvbG9yVGVzdChyLCIiKSx2PTAsQT1rLkNvbG9yLmNvbG9yVGVzdChyLCJwbG90dGFibGUtY29sb3JzLTAiKTtudWxsIT1BJiZ2PHRoaXMuX01BWElNVU1fQ09MT1JTX0ZST01fQ1NTJiYKKEEhPT10fHxBIT09cVtxLmxlbmd0aC0xXSk7KXEucHVzaChBKSx2KyssQT1rLkNvbG9yLmNvbG9yVGVzdChyLCJwbG90dGFibGUtY29sb3JzLSIrdik7ci5yZW1vdmUoKTtyZXR1cm4gcX07cC5wcm90b3R5cGUuc2NhbGU9ZnVuY3Rpb24ocSl7dmFyIHI9dGhpcy5fZDNTY2FsZShxKTtxPXRoaXMuZG9tYWluKCkuaW5kZXhPZihxKTtxPU1hdGguZmxvb3IocS90aGlzLnJhbmdlKCkubGVuZ3RoKTtyZXR1cm4gay5Db2xvci5saWdodGVuQ29sb3IocixNYXRoLmxvZyhxKnAuX0xPT1BfTElHSFRFTl9GQUNUT1IrMSkpfTtwLnByb3RvdHlwZS5fZ2V0RG9tYWluPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2JhY2tpbmdTY2FsZURvbWFpbigpfTtwLnByb3RvdHlwZS5fYmFja2luZ1NjYWxlRG9tYWluPWZ1bmN0aW9uKHEpe2lmKG51bGw9PXEpcmV0dXJuIHRoaXMuX2QzU2NhbGUuZG9tYWluKCk7dGhpcy5fZDNTY2FsZS5kb21haW4ocSk7cmV0dXJuIHRoaXN9O3AucHJvdG90eXBlLl9nZXRSYW5nZT0KZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZDNTY2FsZS5yYW5nZSgpfTtwLnByb3RvdHlwZS5fc2V0UmFuZ2U9ZnVuY3Rpb24ocSl7dGhpcy5fZDNTY2FsZS5yYW5nZShxKX07cmV0dXJuIHB9KGYoMTcpLlNjYWxlKTtjLl9MT09QX0xJR0hURU5fRkFDVE9SPTEuNjtjLl9NQVhJTVVNX0NPTE9SU19GUk9NX0NTUz0yNTY7ZC5Db2xvcj1jfSxmdW5jdGlvbihjLGQsZil7dmFyIGc9dGhpcyYmdGhpcy5fX2V4dGVuZHN8fGZ1bmN0aW9uKG0scCl7ZnVuY3Rpb24gcSgpe3RoaXMuY29uc3RydWN0b3I9bX1mb3IodmFyIHIgaW4gcClwLmhhc093blByb3BlcnR5KHIpJiYobVtyXT1wW3JdKTttLnByb3RvdHlwZT1udWxsPT09cD9PYmplY3QuY3JlYXRlKHApOihxLnByb3RvdHlwZT1wLnByb3RvdHlwZSxuZXcgcSl9LGw9ZigxKSxrPWYoMCk7Yz1mdW5jdGlvbihtKXtmdW5jdGlvbiBwKHEpe3ZvaWQgMD09PXEmJihxPSJsaW5lYXIiKTt2YXIgcj1tLmNhbGwodGhpcyl8fHRoaXM7c3dpdGNoKHEpe2Nhc2UgImxpbmVhciI6ci5fY29sb3JTY2FsZT0KbC5zY2FsZUxpbmVhcigpO2JyZWFrO2Nhc2UgImxvZyI6ci5fY29sb3JTY2FsZT1sLnNjYWxlTG9nKCk7YnJlYWs7Y2FzZSAic3FydCI6ci5fY29sb3JTY2FsZT1sLnNjYWxlU3FydCgpO2JyZWFrO2Nhc2UgInBvdyI6ci5fY29sb3JTY2FsZT1sLnNjYWxlUG93KCl9aWYobnVsbD09ci5fY29sb3JTY2FsZSl0aHJvdyBFcnJvcigidW5rbm93biBRdWFudGl0YXRpdmVTY2FsZSBzY2FsZSB0eXBlICIrcSk7ci5yYW5nZShwLlJFRFMpO3JldHVybiByfWcocCxtKTtwLnByb3RvdHlwZS5leHRlbnRPZlZhbHVlcz1mdW5jdGlvbihxKXtxPWwuZXh0ZW50KHEpO3JldHVybiBudWxsPT1xWzBdfHxudWxsPT1xWzFdP1tdOnF9O3AucHJvdG90eXBlLl9kM0ludGVycG9sYXRlZFNjYWxlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NvbG9yU2NhbGUucmFuZ2UoWzAsMV0pLmludGVycG9sYXRlKHRoaXMuX2ludGVycG9sYXRlQ29sb3JzKCkpfTtwLnByb3RvdHlwZS5faW50ZXJwb2xhdGVDb2xvcnM9CmZ1bmN0aW9uKCl7dmFyIHE9dGhpcy5fY29sb3JSYW5nZTtpZigyPnEubGVuZ3RoKXRocm93IEVycm9yKCJDb2xvciBzY2FsZSBhcnJheXMgbXVzdCBoYXZlIGF0IGxlYXN0IHR3byBlbGVtZW50cy4iKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24ocil7cj1NYXRoLm1heCgwLE1hdGgubWluKDEscikpO3IqPXEubGVuZ3RoLTE7dmFyIHQ9TWF0aC5mbG9vcihyKSx2PXItdDtyZXR1cm4gbC5pbnRlcnBvbGF0ZUxhYihxW3RdLHFbTWF0aC5jZWlsKHIpXSkodil9fX07cC5wcm90b3R5cGUuX3Jlc2V0U2NhbGU9ZnVuY3Rpb24oKXt0aGlzLl9kM1NjYWxlPXRoaXMuX2QzSW50ZXJwb2xhdGVkU2NhbGUoKTt0aGlzLl9hdXRvRG9tYWluSWZBdXRvbWF0aWNNb2RlKCk7dGhpcy5fZGlzcGF0Y2hVcGRhdGUoKX07cC5wcm90b3R5cGUuYXV0b0RvbWFpbj1mdW5jdGlvbigpe3ZhciBxPXRoaXMuX2dldEFsbEluY2x1ZGVkVmFsdWVzKCk7MDxxLmxlbmd0aCYmdGhpcy5fc2V0RG9tYWluKFtrLk1hdGgubWluKHEsCjApLGsuTWF0aC5tYXgocSwwKV0pfTtwLnByb3RvdHlwZS5zY2FsZT1mdW5jdGlvbihxKXtyZXR1cm4gdGhpcy5fZDNTY2FsZShxKX07cC5wcm90b3R5cGUuX2dldERvbWFpbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9iYWNraW5nU2NhbGVEb21haW4oKX07cC5wcm90b3R5cGUuX2JhY2tpbmdTY2FsZURvbWFpbj1mdW5jdGlvbihxKXtpZihudWxsPT1xKXJldHVybiB0aGlzLl9kM1NjYWxlLmRvbWFpbigpO3RoaXMuX2QzU2NhbGUuZG9tYWluKHEpO3JldHVybiB0aGlzfTtwLnByb3RvdHlwZS5fZ2V0UmFuZ2U9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY29sb3JSYW5nZX07cC5wcm90b3R5cGUuX3NldFJhbmdlPWZ1bmN0aW9uKHEpe3RoaXMuX2NvbG9yUmFuZ2U9cTt0aGlzLl9yZXNldFNjYWxlKCl9O3JldHVybiBwfShmKDE3KS5TY2FsZSk7Yy5SRURTPSIjRkZGRkZGICNGRkY2RTEgI0ZFRjRDMCAjRkVEOTc2ICNGRUIyNEMgI0ZEOEQzQyAjRkM0RTJBICNFMzFBMUMgI0IxMDAyNiIuc3BsaXQoIiAiKTsKYy5CTFVFUz0iI0ZGRkZGRiAjQ0NGRkZGICNBNUZGRkQgIzg1RjdGQiAjNkVEM0VGICM1NUE3RTAgIzQxN0ZEMCAjMjU0NUQzICMwQjAyRTEiLnNwbGl0KCIgIik7Yy5QT1NORUc9IiMwQjAyRTEgIzI1NDVEMyAjNDE3RkQwICM1NUE3RTAgIzZFRDNFRiAjODVGN0ZCICNBNUZGRkQgI0NDRkZGRiAjRkZGRkZGICNGRkY2RTEgI0ZFRjRDMCAjRkVEOTc2ICNGRUIyNEMgI0ZEOEQzQyAjRkM0RTJBICNFMzFBMUMgI0IxMDAyNiIuc3BsaXQoIiAiKTtkLkludGVycG9sYXRlZENvbG9yPWN9LGZ1bmN0aW9uKGMsZCxmKXt2YXIgZz10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8ZnVuY3Rpb24oayxtKXtmdW5jdGlvbiBwKCl7dGhpcy5jb25zdHJ1Y3Rvcj1rfWZvcih2YXIgcSBpbiBtKW0uaGFzT3duUHJvcGVydHkocSkmJihrW3FdPW1bcV0pO2sucHJvdG90eXBlPW51bGw9PT1tP09iamVjdC5jcmVhdGUobSk6KHAucHJvdG90eXBlPW0ucHJvdG90eXBlLG5ldyBwKX0sbD1mKDEpO2M9ZnVuY3Rpb24oayl7ZnVuY3Rpb24gbSgpe3ZhciBwPQprLmNhbGwodGhpcyl8fHRoaXM7cC5fZDNTY2FsZT1sLnNjYWxlTGluZWFyKCk7cmV0dXJuIHB9ZyhtLGspO20ucHJvdG90eXBlLl9kZWZhdWx0RXh0ZW50PWZ1bmN0aW9uKCl7cmV0dXJuWzAsMV19O20ucHJvdG90eXBlLl9leHBhbmRTaW5nbGVWYWx1ZURvbWFpbj1mdW5jdGlvbihwKXtyZXR1cm4gcFswXT09PXBbMV0/W3BbMF0tMSxwWzFdKzFdOnB9O20ucHJvdG90eXBlLnNjYWxlPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLl9kM1NjYWxlKHApfTttLnByb3RvdHlwZS5zY2FsZVRyYW5zZm9ybWF0aW9uPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLnNjYWxlKHApfTttLnByb3RvdHlwZS5pbnZlcnRlZFRyYW5zZm9ybWF0aW9uPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmludmVydChwKX07bS5wcm90b3R5cGUuZ2V0VHJhbnNmb3JtYXRpb25FeHRlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZ2V0VW5ib3VuZGVkRXh0ZW50KCEwKX07bS5wcm90b3R5cGUuZ2V0VHJhbnNmb3JtYXRpb25Eb21haW49CmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tYWluKCl9O20ucHJvdG90eXBlLnNldFRyYW5zZm9ybWF0aW9uRG9tYWluPWZ1bmN0aW9uKHApe3RoaXMuZG9tYWluKHApfTttLnByb3RvdHlwZS5fZ2V0RG9tYWluPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2JhY2tpbmdTY2FsZURvbWFpbigpfTttLnByb3RvdHlwZS5fYmFja2luZ1NjYWxlRG9tYWluPWZ1bmN0aW9uKHApe2lmKG51bGw9PXApcmV0dXJuIHRoaXMuX2QzU2NhbGUuZG9tYWluKCk7dGhpcy5fZDNTY2FsZS5kb21haW4ocCk7cmV0dXJuIHRoaXN9O20ucHJvdG90eXBlLl9nZXRSYW5nZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kM1NjYWxlLnJhbmdlKCl9O20ucHJvdG90eXBlLl9zZXRSYW5nZT1mdW5jdGlvbihwKXt0aGlzLl9kM1NjYWxlLnJhbmdlKHApfTttLnByb3RvdHlwZS5pbnZlcnQ9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuX2QzU2NhbGUuaW52ZXJ0KHApfTttLnByb3RvdHlwZS5kZWZhdWx0VGlja3M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZDNTY2FsZS50aWNrcygpfTsKbS5wcm90b3R5cGUuX25pY2VEb21haW49ZnVuY3Rpb24ocCxxKXtyZXR1cm4gdGhpcy5fZDNTY2FsZS5jb3B5KCkuZG9tYWluKHApLm5pY2UocSkuZG9tYWluKCl9O3JldHVybiBtfShmKDExKS5RdWFudGl0YXRpdmVTY2FsZSk7ZC5MaW5lYXI9Y30sZnVuY3Rpb24oYyxkLGYpe3ZhciBnPXRoaXMmJnRoaXMuX19leHRlbmRzfHxmdW5jdGlvbihwLHEpe2Z1bmN0aW9uIHIoKXt0aGlzLmNvbnN0cnVjdG9yPXB9Zm9yKHZhciB0IGluIHEpcS5oYXNPd25Qcm9wZXJ0eSh0KSYmKHBbdF09cVt0XSk7cC5wcm90b3R5cGU9bnVsbD09PXE/T2JqZWN0LmNyZWF0ZShxKTooci5wcm90b3R5cGU9cS5wcm90b3R5cGUsbmV3IHIpfSxsPWYoMSksaz1mKDApLG09ZigzKTtjPWZ1bmN0aW9uKHApe2Z1bmN0aW9uIHEocil7dm9pZCAwPT09ciYmKHI9MTApO3ZhciB0PXAuY2FsbCh0aGlzKXx8dGhpczt0Ll9kM1NjYWxlPWwuc2NhbGVMaW5lYXIoKTt0Ll9iYXNlPXI7dC5fcGl2b3Q9dC5fYmFzZTt0Ll9zZXREb21haW4odC5fZGVmYXVsdEV4dGVudCgpKTsKaWYoMT49cil0aHJvdyBFcnJvcigiTW9kaWZpZWRMb2dTY2FsZTogVGhlIGJhc2UgbXVzdCBiZSBceDNlIDEiKTtyZXR1cm4gdH1nKHEscCk7cS5wcm90b3R5cGUuX2FkanVzdGVkTG9nPWZ1bmN0aW9uKHIpe3ZhciB0PTA+cj8tMToxO3IqPXQ7cjx0aGlzLl9waXZvdCYmKHIrPSh0aGlzLl9waXZvdC1yKS90aGlzLl9waXZvdCk7cj1NYXRoLmxvZyhyKS9NYXRoLmxvZyh0aGlzLl9iYXNlKTtyZXR1cm4gcip0fTtxLnByb3RvdHlwZS5faW52ZXJ0ZWRBZGp1c3RlZExvZz1mdW5jdGlvbihyKXt2YXIgdD0wPnI/LTE6MTtyPU1hdGgucG93KHRoaXMuX2Jhc2Uscip0KTtyPHRoaXMuX3Bpdm90JiYocj10aGlzLl9waXZvdCooci0xKS8odGhpcy5fcGl2b3QtMSkpO3JldHVybiByKnR9O3EucHJvdG90eXBlLnNjYWxlPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9kM1NjYWxlKHRoaXMuX2FkanVzdGVkTG9nKHIpKX07cS5wcm90b3R5cGUuaW52ZXJ0PWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9pbnZlcnRlZEFkanVzdGVkTG9nKHRoaXMuX2QzU2NhbGUuaW52ZXJ0KHIpKX07CnEucHJvdG90eXBlLnNjYWxlVHJhbnNmb3JtYXRpb249ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuc2NhbGUocil9O3EucHJvdG90eXBlLmludmVydGVkVHJhbnNmb3JtYXRpb249ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuaW52ZXJ0KHIpfTtxLnByb3RvdHlwZS5nZXRUcmFuc2Zvcm1hdGlvbkV4dGVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9nZXRVbmJvdW5kZWRFeHRlbnQoITApfTtxLnByb3RvdHlwZS5nZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRvbWFpbigpfTtxLnByb3RvdHlwZS5zZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbj1mdW5jdGlvbihyKXt0aGlzLmRvbWFpbihyKX07cS5wcm90b3R5cGUuX2dldERvbWFpbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl91bnRyYW5zZm9ybWVkRG9tYWlufTtxLnByb3RvdHlwZS5fc2V0RG9tYWluPWZ1bmN0aW9uKHIpe3RoaXMuX3VudHJhbnNmb3JtZWREb21haW49cjtwLnByb3RvdHlwZS5fc2V0RG9tYWluLmNhbGwodGhpcywKW3RoaXMuX2FkanVzdGVkTG9nKHJbMF0pLHRoaXMuX2FkanVzdGVkTG9nKHJbMV0pXSl9O3EucHJvdG90eXBlLl9iYWNraW5nU2NhbGVEb21haW49ZnVuY3Rpb24ocil7aWYobnVsbD09cilyZXR1cm4gdGhpcy5fZDNTY2FsZS5kb21haW4oKTt0aGlzLl9kM1NjYWxlLmRvbWFpbihyKTtyZXR1cm4gdGhpc307cS5wcm90b3R5cGUudGlja3M9ZnVuY3Rpb24oKXtmdW5jdGlvbiByKEYsRCxCKXtyZXR1cm5bRixELEJdLnNvcnQoZnVuY3Rpb24oRyxLKXtyZXR1cm4gRy1LfSlbMV19dmFyIHQ9ay5NYXRoLm1pbih0aGlzLl91bnRyYW5zZm9ybWVkRG9tYWluLDApLHY9ay5NYXRoLm1heCh0aGlzLl91bnRyYW5zZm9ybWVkRG9tYWluLDApLEE9cih0LHYsLXRoaXMuX3Bpdm90KSx5PXIodCx2LHRoaXMuX3Bpdm90KTtBPXRoaXMuX2xvZ1RpY2tzKC1BLC10KS5tYXAoZnVuY3Rpb24oRil7cmV0dXJuLUZ9KS5yZXZlcnNlKCk7eT10aGlzLl9sb2dUaWNrcyh5LHYpO3ZhciB4PU1hdGgubWF4KHQsCi10aGlzLl9waXZvdCksQz1NYXRoLm1pbih2LHRoaXMuX3Bpdm90KTt4PWwuc2NhbGVMaW5lYXIoKS5kb21haW4oW3gsQ10pLnRpY2tzKHRoaXMuX2hvd01hbnlUaWNrcyh4LEMpKTtBPUEuY29uY2F0KHgpLmNvbmNhdCh5KTsxPj1BLmxlbmd0aCYmKEE9bC5zY2FsZUxpbmVhcigpLmRvbWFpbihbdCx2XSkudGlja3MoKSk7cmV0dXJuIEF9O3EucHJvdG90eXBlLl9sb2dUaWNrcz1mdW5jdGlvbihyLHQpe3ZhciB2PXRoaXMsQT10aGlzLl9ob3dNYW55VGlja3Mocix0KTtpZigwPT09QSlyZXR1cm5bXTt2YXIgeT1NYXRoLmZsb29yKE1hdGgubG9nKHIpL01hdGgubG9nKHRoaXMuX2Jhc2UpKSx4PU1hdGguY2VpbChNYXRoLmxvZyh0KS9NYXRoLmxvZyh0aGlzLl9iYXNlKSk7QT1sLnJhbmdlKHgseSwtTWF0aC5jZWlsKCh4LXkpL0EpKTt5PWwucmFuZ2UodGhpcy5fYmFzZSwxLC0odGhpcy5fYmFzZS0xKSkubWFwKE1hdGguZmxvb3IpO3ZhciBDPWsuQXJyYXkudW5pcSh5KTtBPUEubWFwKGZ1bmN0aW9uKEYpe3JldHVybiBDLm1hcChmdW5jdGlvbihEKXtyZXR1cm4gTWF0aC5wb3codi5fYmFzZSwKRi0xKSpEfSl9KTtyZXR1cm4gay5BcnJheS5mbGF0dGVuKEEpLmZpbHRlcihmdW5jdGlvbihGKXtyZXR1cm4gcjw9RiYmRjw9dH0pLnNvcnQoZnVuY3Rpb24oRixEKXtyZXR1cm4gRi1EfSl9O3EucHJvdG90eXBlLl9ob3dNYW55VGlja3M9ZnVuY3Rpb24ocix0KXt2YXIgdj10aGlzLl9hZGp1c3RlZExvZyhrLk1hdGgubWluKHRoaXMuX3VudHJhbnNmb3JtZWREb21haW4sMCkpLEE9dGhpcy5fYWRqdXN0ZWRMb2coay5NYXRoLm1heCh0aGlzLl91bnRyYW5zZm9ybWVkRG9tYWluLDApKTtyZXR1cm4gTWF0aC5jZWlsKCh0aGlzLl9hZGp1c3RlZExvZyh0KS10aGlzLl9hZGp1c3RlZExvZyhyKSkvKEEtdikqbS5Nb2RpZmllZExvZy5fREVGQVVMVF9OVU1fVElDS1MpfTtxLnByb3RvdHlwZS5fbmljZURvbWFpbj1mdW5jdGlvbihyKXtyZXR1cm4gcn07cS5wcm90b3R5cGUuX2RlZmF1bHRFeHRlbnQ9ZnVuY3Rpb24oKXtyZXR1cm5bMCx0aGlzLl9iYXNlXX07cS5wcm90b3R5cGUuX2V4cGFuZFNpbmdsZVZhbHVlRG9tYWluPQpmdW5jdGlvbihyKXtyZXR1cm4gclswXT09PXJbMV0/KHI9clswXSwwPHI/W3IvdGhpcy5fYmFzZSxyKnRoaXMuX2Jhc2VdOjA9PT1yP1stdGhpcy5fYmFzZSx0aGlzLl9iYXNlXTpbcip0aGlzLl9iYXNlLHIvdGhpcy5fYmFzZV0pOnJ9O3EucHJvdG90eXBlLl9nZXRSYW5nZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kM1NjYWxlLnJhbmdlKCl9O3EucHJvdG90eXBlLl9zZXRSYW5nZT1mdW5jdGlvbihyKXt0aGlzLl9kM1NjYWxlLnJhbmdlKHIpfTtxLnByb3RvdHlwZS5kZWZhdWx0VGlja3M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZDNTY2FsZS50aWNrcygpfTtyZXR1cm4gcX0oZigxMSkuUXVhbnRpdGF0aXZlU2NhbGUpO2QuTW9kaWZpZWRMb2c9Y30sZnVuY3Rpb24oYyxkLGYpe3ZhciBnPWYoMCk7ZC5pbnRlcnZhbFRpY2tHZW5lcmF0b3I9ZnVuY3Rpb24obCl7aWYoMD49bCl0aHJvdyBFcnJvcigiaW50ZXJ2YWwgbXVzdCBiZSBwb3NpdGl2ZSBudW1iZXIiKTtyZXR1cm4gZnVuY3Rpb24oayl7az0Kay5kb21haW4oKTt2YXIgbT1NYXRoLm1pbihrWzBdLGtbMV0pO2s9TWF0aC5tYXgoa1swXSxrWzFdKTt2YXIgcD1NYXRoLmNlaWwobS9sKSpsO209MD09PW0lbD9bXTpbbV07dmFyIHE9Zy5NYXRoLnJhbmdlKDAsTWF0aC5mbG9vcigoay1wKS9sKSsxKS5tYXAoZnVuY3Rpb24ocil7cmV0dXJuIHArcipsfSk7cmV0dXJuIG0uY29uY2F0KHEpLmNvbmNhdCgwPT09ayVsP1tdOltrXSl9fTtkLmludGVnZXJUaWNrR2VuZXJhdG9yPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKGwpe3ZhciBrPWwuZGVmYXVsdFRpY2tzKCk7cmV0dXJuIGsuZmlsdGVyKGZ1bmN0aW9uKG0scCl7cmV0dXJuIDA9PT1tJTF8fDA9PT1wfHxwPT09ay5sZW5ndGgtMX0pfX19LGZ1bmN0aW9uKGMsZCxmKXt2YXIgZz10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8ZnVuY3Rpb24obSxwKXtmdW5jdGlvbiBxKCl7dGhpcy5jb25zdHJ1Y3Rvcj1tfWZvcih2YXIgciBpbiBwKXAuaGFzT3duUHJvcGVydHkocikmJihtW3JdPXBbcl0pOwptLnByb3RvdHlwZT1udWxsPT09cD9PYmplY3QuY3JlYXRlKHApOihxLnByb3RvdHlwZT1wLnByb3RvdHlwZSxuZXcgcSl9LGw9ZigxKSxrPWYoMjgpO2M9ZnVuY3Rpb24obSl7ZnVuY3Rpb24gcCgpe3ZhciBxPW0uY2FsbCh0aGlzKXx8dGhpcztxLl9kM1NjYWxlPWwuc2NhbGVUaW1lKCk7cS5hdXRvRG9tYWluKCk7cmV0dXJuIHF9ZyhwLG0pO3AucHJvdG90eXBlLnRpY2tJbnRlcnZhbD1mdW5jdGlvbihxLHIpe3ZvaWQgMD09PXImJihyPTEpO3ZhciB0PWwuc2NhbGVUaW1lKCk7cC50aW1lSW50ZXJ2YWxUb0QzVGltZShxKS5ldmVyeShyKTt0LmRvbWFpbih0aGlzLmRvbWFpbigpKTt0LnJhbmdlKHRoaXMucmFuZ2UoKSk7cmV0dXJuIHQudGlja3MoKX07cC5wcm90b3R5cGUuX3NldERvbWFpbj1mdW5jdGlvbihxKXtpZihxWzFdPHFbMF0pdGhyb3cgRXJyb3IoIlNjYWxlLlRpbWUgZG9tYWluIHZhbHVlcyBtdXN0IGJlIGluIGNocm9ub2xvZ2ljYWwgb3JkZXIiKTtyZXR1cm4gbS5wcm90b3R5cGUuX3NldERvbWFpbi5jYWxsKHRoaXMsCnEpfTtwLnByb3RvdHlwZS5fZGVmYXVsdEV4dGVudD1mdW5jdGlvbigpe3JldHVybltuZXcgRGF0ZSgiMTk3MC0wMS0wMSIpLG5ldyBEYXRlKCIxOTcwLTAxLTAyIildfTtwLnByb3RvdHlwZS5fZXhwYW5kU2luZ2xlVmFsdWVEb21haW49ZnVuY3Rpb24ocSl7dmFyIHI9cVswXS5nZXRUaW1lKCksdD1xWzFdLmdldFRpbWUoKTtyZXR1cm4gcj09PXQ/KHE9bmV3IERhdGUocikscS5zZXREYXRlKHEuZ2V0RGF0ZSgpLTEpLHQ9bmV3IERhdGUodCksdC5zZXREYXRlKHQuZ2V0RGF0ZSgpKzEpLFtxLHRdKTpxfTtwLnByb3RvdHlwZS5zY2FsZT1mdW5jdGlvbihxKXtyZXR1cm4gdGhpcy5fZDNTY2FsZShxKX07cC5wcm90b3R5cGUuc2NhbGVUcmFuc2Zvcm1hdGlvbj1mdW5jdGlvbihxKXtyZXR1cm4gdGhpcy5zY2FsZShuZXcgRGF0ZShxKSl9O3AucHJvdG90eXBlLmludmVydGVkVHJhbnNmb3JtYXRpb249ZnVuY3Rpb24ocSl7cmV0dXJuIHRoaXMuaW52ZXJ0KHEpLmdldFRpbWUoKX07cC5wcm90b3R5cGUuZ2V0VHJhbnNmb3JtYXRpb25FeHRlbnQ9CmZ1bmN0aW9uKCl7dmFyIHE9dGhpcy5fZ2V0VW5ib3VuZGVkRXh0ZW50KCEwKTtyZXR1cm5bcVswXS52YWx1ZU9mKCkscVsxXS52YWx1ZU9mKCldfTtwLnByb3RvdHlwZS5nZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbj1mdW5jdGlvbigpe3ZhciBxPXRoaXMuZG9tYWluKCk7cmV0dXJuW3FbMF0udmFsdWVPZigpLHFbMV0udmFsdWVPZigpXX07cC5wcm90b3R5cGUuc2V0VHJhbnNmb3JtYXRpb25Eb21haW49ZnVuY3Rpb24ocSl7dGhpcy5kb21haW4oW25ldyBEYXRlKHFbMF0pLG5ldyBEYXRlKHFbMV0pXSl9O3AucHJvdG90eXBlLl9nZXREb21haW49ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYmFja2luZ1NjYWxlRG9tYWluKCl9O3AucHJvdG90eXBlLl9iYWNraW5nU2NhbGVEb21haW49ZnVuY3Rpb24ocSl7aWYobnVsbD09cSlyZXR1cm4gdGhpcy5fZDNTY2FsZS5kb21haW4oKTt0aGlzLl9kM1NjYWxlLmRvbWFpbihxKTtyZXR1cm4gdGhpc307cC5wcm90b3R5cGUuX2dldFJhbmdlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2QzU2NhbGUucmFuZ2UoKX07CnAucHJvdG90eXBlLl9zZXRSYW5nZT1mdW5jdGlvbihxKXt0aGlzLl9kM1NjYWxlLnJhbmdlKHEpfTtwLnByb3RvdHlwZS5pbnZlcnQ9ZnVuY3Rpb24ocSl7cmV0dXJuIHRoaXMuX2QzU2NhbGUuaW52ZXJ0KHEpfTtwLnByb3RvdHlwZS5kZWZhdWx0VGlja3M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZDNTY2FsZS50aWNrcygpfTtwLnByb3RvdHlwZS5fbmljZURvbWFpbj1mdW5jdGlvbihxKXtyZXR1cm4gdGhpcy5fZDNTY2FsZS5jb3B5KCkuZG9tYWluKHEpLm5pY2UoKS5kb21haW4oKX07cC50aW1lSW50ZXJ2YWxUb0QzVGltZT1mdW5jdGlvbihxKXtzd2l0Y2gocSl7Y2FzZSBrLlRpbWVJbnRlcnZhbC5zZWNvbmQ6cmV0dXJuIGwudGltZVNlY29uZDtjYXNlIGsuVGltZUludGVydmFsLm1pbnV0ZTpyZXR1cm4gbC50aW1lTWludXRlO2Nhc2Ugay5UaW1lSW50ZXJ2YWwuaG91cjpyZXR1cm4gbC50aW1lSG91cjtjYXNlIGsuVGltZUludGVydmFsLmRheTpyZXR1cm4gbC50aW1lRGF5OwpjYXNlIGsuVGltZUludGVydmFsLndlZWs6cmV0dXJuIGwudGltZVdlZWs7Y2FzZSBrLlRpbWVJbnRlcnZhbC5tb250aDpyZXR1cm4gbC50aW1lTW9udGg7Y2FzZSBrLlRpbWVJbnRlcnZhbC55ZWFyOnJldHVybiBsLnRpbWVZZWFyO2RlZmF1bHQ6dGhyb3cgRXJyb3IoIlRpbWVJbnRlcnZhbCBzcGVjaWZpZWQgZG9lcyBub3QgZXhpc3Q6ICIrcSk7fX07cmV0dXJuIHB9KGYoMTEpLlF1YW50aXRhdGl2ZVNjYWxlKTtkLlRpbWU9Y30sZnVuY3Rpb24oYyxkLGYpe3ZhciBnPWYoMSksbD1BcnJheTtkLmFkZD1mdW5jdGlvbihrLG0pe2lmKGsubGVuZ3RoIT09bS5sZW5ndGgpdGhyb3cgRXJyb3IoImF0dGVtcHRlZCB0byBhZGQgYXJyYXlzIG9mIHVuZXF1YWwgbGVuZ3RoIik7cmV0dXJuIGsubWFwKGZ1bmN0aW9uKHAscSl7cmV0dXJuIGtbcV0rbVtxXX0pfTtkLnVuaXE9ZnVuY3Rpb24oayl7dmFyIG09Zy5zZXQoKSxwPVtdO2suZm9yRWFjaChmdW5jdGlvbihxKXttLmhhcyhTdHJpbmcocSkpfHwKKG0uYWRkKFN0cmluZyhxKSkscC5wdXNoKHEpKX0pO3JldHVybiBwfTtkLmZsYXR0ZW49ZnVuY3Rpb24oayl7cmV0dXJuIGwucHJvdG90eXBlLmNvbmNhdC5hcHBseShbXSxrKX07ZC5jcmVhdGVGaWxsZWRBcnJheT1mdW5jdGlvbihrLG0pe2Zvcih2YXIgcD1bXSxxPTA7cTxtO3ErKylwW3FdPSJmdW5jdGlvbiI9PT10eXBlb2Ygaz9rKHEpOms7cmV0dXJuIHB9fSxmdW5jdGlvbihjLGQpe2M9ZnVuY3Rpb24oKXtmdW5jdGlvbiBmKGcsbCxrKXt0aGlzLm1heEluZGV4PXRoaXMubWluSW5kZXg9dGhpcy5leGl0SW5kZXg9dGhpcy5lbnRyeUluZGV4PWc7dGhpcy5idWNrZXRWYWx1ZT1sO3RoaXMubWF4VmFsdWU9dGhpcy5taW5WYWx1ZT1rfWYucHJvdG90eXBlLmlzSW5CdWNrZXQ9ZnVuY3Rpb24oZyl7cmV0dXJuIGc9PXRoaXMuYnVja2V0VmFsdWV9O2YucHJvdG90eXBlLmFkZFRvQnVja2V0PWZ1bmN0aW9uKGcsbCl7Zzx0aGlzLm1pblZhbHVlJiYodGhpcy5taW5WYWx1ZT1nLHRoaXMubWluSW5kZXg9CmwpO2c+dGhpcy5tYXhWYWx1ZSYmKHRoaXMubWF4VmFsdWU9Zyx0aGlzLm1heEluZGV4PWwpO3RoaXMuZXhpdEluZGV4PWx9O2YucHJvdG90eXBlLmdldFVuaXF1ZUluZGljZXM9ZnVuY3Rpb24oKXt2YXIgZz1bdGhpcy5lbnRyeUluZGV4LHRoaXMubWF4SW5kZXgsdGhpcy5taW5JbmRleCx0aGlzLmV4aXRJbmRleF07cmV0dXJuIGcuZmlsdGVyKGZ1bmN0aW9uKGwsayl7cmV0dXJuIDA9PWt8fGwhPWdbay0xXX0pfTtyZXR1cm4gZn0oKTtkLkJ1Y2tldD1jfSxmdW5jdGlvbihjLGQsZil7dmFyIGc9dGhpcyYmdGhpcy5fX2V4dGVuZHN8fGZ1bmN0aW9uKGwsayl7ZnVuY3Rpb24gbSgpe3RoaXMuY29uc3RydWN0b3I9bH1mb3IodmFyIHAgaW4gaylrLmhhc093blByb3BlcnR5KHApJiYobFtwXT1rW3BdKTtsLnByb3RvdHlwZT1udWxsPT09az9PYmplY3QuY3JlYXRlKGspOihtLnByb3RvdHlwZT1rLnByb3RvdHlwZSxuZXcgbSl9O2M9ZnVuY3Rpb24obCl7ZnVuY3Rpb24gaygpe3JldHVybiBudWxsIT09CmwmJmwuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfWcoayxsKTtrLnByb3RvdHlwZS5jYWxsQ2FsbGJhY2tzPWZ1bmN0aW9uKCl7Zm9yKHZhciBtPXRoaXMscD1bXSxxPTA7cTxhcmd1bWVudHMubGVuZ3RoO3ErKylwW3FdPWFyZ3VtZW50c1txXTt0aGlzLmZvckVhY2goZnVuY3Rpb24ocil7ci5hcHBseShtLHApfSk7cmV0dXJuIHRoaXN9O3JldHVybiBrfShmKDU4KS5TZXQpO2QuQ2FsbGJhY2tTZXQ9Y30sZnVuY3Rpb24oYyxkLGYpe2Z1bmN0aW9uIGcobSl7ZnVuY3Rpb24gcCh0KXt0Lz0yNTU7cmV0dXJuLjAzOTI4Pj10P3QvMTIuOTI6ay5wb3coKHQrLjA1NSkvMS4wNTUsMi40KX12YXIgcT1sLnJnYihtKTttPXAocS5yKTt2YXIgcj1wKHEuZyk7cT1wKHEuYik7cmV0dXJuLjIxMjYqbSsuNzE1MipyKy4wNzIyKnF9dmFyIGw9ZigxKSxrPU1hdGg7ZC5jb250cmFzdD1mdW5jdGlvbihtLHApe209ZyhtKSsuMDU7cD1nKHApKy4wNTtyZXR1cm4gbT5wP20vcDpwL219O2QubGlnaHRlbkNvbG9yPQpmdW5jdGlvbihtLHApe3JldHVybiBsLmNvbG9yKG0pLmJyaWdodGVyKHApLnJnYigpLnRvU3RyaW5nKCl9O2QuY29sb3JUZXN0PWZ1bmN0aW9uKG0scCl7bS5jbGFzc2VkKHAsITApO3ZhciBxPW0uc3R5bGUoImJhY2tncm91bmQtY29sb3IiKTtpZigidHJhbnNwYXJlbnQiPT09cSlyZXR1cm4gbnVsbDtxPS9cKCguKylcKS8uZXhlYyhxKTtpZighcSlyZXR1cm4gbnVsbDtxPXFbMV0uc3BsaXQoIiwiKS5tYXAoZnVuY3Rpb24ocil7cj0rcjt2YXIgdD1yLnRvU3RyaW5nKDE2KTtyZXR1cm4gMTY+cj8iMCIrdDp0fSk7aWYoND09PXEubGVuZ3RoJiYiMDAiPT09cVszXSlyZXR1cm4gbnVsbDtxPSIjIitxLmpvaW4oIiIpO20uY2xhc3NlZChwLCExKTtyZXR1cm4gcX19LGZ1bmN0aW9uKGMsZCxmKXt2YXIgZz1mKDEpLGw9Zig1Nyk7Yz1mdW5jdGlvbigpe2Z1bmN0aW9uIGsoKXt0aGlzLl9lbnRpdGllcz1bXTt0aGlzLl9ydHJlZT1uZXcgbC5SVHJlZTt0aGlzLl90cmVlPWcucXVhZHRyZWUoKS54KGZ1bmN0aW9uKG0pe3JldHVybiBNYXRoLmZsb29yKG0ucG9zaXRpb24ueCl9KS55KGZ1bmN0aW9uKG0pe3JldHVybiBNYXRoLmZsb29yKG0ucG9zaXRpb24ueSl9KX0Kay5wcm90b3R5cGUuYWRkQWxsPWZ1bmN0aW9uKG0scCxxKXsodj10aGlzLl9lbnRpdGllcykucHVzaC5hcHBseSh2LG0pO2lmKHZvaWQgMCE9PXEpZm9yKHE9bC5SVHJlZUJvdW5kcy5ib3VuZHMocSksdj0wO3Y8bS5sZW5ndGg7disrKXt2YXIgcj1tW3ZdLHQ9bC5SVHJlZUJvdW5kcy5lbnRpdHlCb3VuZHMocChyKSk7bC5SVHJlZUJvdW5kcy5pc0JvdW5kc092ZXJsYXBCb3VuZHMocSx0KSYmKHRoaXMuX3RyZWUuYWRkKHIpLHRoaXMuX3J0cmVlLmluc2VydCh0LHIpKX1lbHNlIGZvcih0aGlzLl90cmVlLmFkZEFsbChtKSx2PTA7djxtLmxlbmd0aDt2Kyspcj1tW3ZdLHQ9bC5SVHJlZUJvdW5kcy5lbnRpdHlCb3VuZHMocChyKSksdGhpcy5fcnRyZWUuaW5zZXJ0KHQscik7dmFyIHZ9O2sucHJvdG90eXBlLmVudGl0eU5lYXJlc3Q9ZnVuY3Rpb24obSl7cmV0dXJuIHRoaXMuX3RyZWUuZmluZChtLngsbS55KX07ay5wcm90b3R5cGUuZW50aXRpZXNJbkJvdW5kcz1mdW5jdGlvbihtKXtyZXR1cm4gdGhpcy5fcnRyZWUuaW50ZXJzZWN0KGwuUlRyZWVCb3VuZHMuZW50aXR5Qm91bmRzKG0pKX07CmsucHJvdG90eXBlLmVudGl0aWVzSW5YQm91bmRzPWZ1bmN0aW9uKG0pe3JldHVybiB0aGlzLl9ydHJlZS5pbnRlcnNlY3RYKGwuUlRyZWVCb3VuZHMuZW50aXR5Qm91bmRzKG0pKX07ay5wcm90b3R5cGUuZW50aXRpZXNJbllCb3VuZHM9ZnVuY3Rpb24obSl7cmV0dXJuIHRoaXMuX3J0cmVlLmludGVyc2VjdFkobC5SVHJlZUJvdW5kcy5lbnRpdHlCb3VuZHMobSkpfTtrLnByb3RvdHlwZS5lbnRpdGllcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbnRpdGllc307cmV0dXJuIGt9KCk7ZC5FbnRpdHlTdG9yZT1jfSxmdW5jdGlvbihjLGQsZil7dmFyIGc9Zig1Nik7Yz1mdW5jdGlvbigpe2Z1bmN0aW9uIGwoKXsiZnVuY3Rpb24iPT09dHlwZW9mIHdpbmRvdy5NYXA/dGhpcy5fZXM2TWFwPW5ldyB3aW5kb3cuTWFwOnRoaXMuX2tleVZhbHVlUGFpcnM9W119bC5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGssbSl7aWYoZy5pc05hTihrKSl0aHJvdyBFcnJvcigiTmFOIG1heSBub3QgYmUgdXNlZCBhcyBhIGtleSB0byB0aGUgTWFwIik7CmlmKG51bGwhPXRoaXMuX2VzNk1hcClyZXR1cm4gdGhpcy5fZXM2TWFwLnNldChrLG0pLHRoaXM7Zm9yKHZhciBwPTA7cDx0aGlzLl9rZXlWYWx1ZVBhaXJzLmxlbmd0aDtwKyspaWYodGhpcy5fa2V5VmFsdWVQYWlyc1twXS5rZXk9PT1rKXJldHVybiB0aGlzLl9rZXlWYWx1ZVBhaXJzW3BdLnZhbHVlPW0sdGhpczt0aGlzLl9rZXlWYWx1ZVBhaXJzLnB1c2goe2tleTprLHZhbHVlOm19KTtyZXR1cm4gdGhpc307bC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGspe2lmKG51bGwhPXRoaXMuX2VzNk1hcClyZXR1cm4gdGhpcy5fZXM2TWFwLmdldChrKTtmb3IodmFyIG09MDttPHRoaXMuX2tleVZhbHVlUGFpcnMubGVuZ3RoO20rKylpZih0aGlzLl9rZXlWYWx1ZVBhaXJzW21dLmtleT09PWspcmV0dXJuIHRoaXMuX2tleVZhbHVlUGFpcnNbbV0udmFsdWV9O2wucHJvdG90eXBlLmhhcz1mdW5jdGlvbihrKXtpZihudWxsIT10aGlzLl9lczZNYXApcmV0dXJuIHRoaXMuX2VzNk1hcC5oYXMoayk7CmZvcih2YXIgbT0wO208dGhpcy5fa2V5VmFsdWVQYWlycy5sZW5ndGg7bSsrKWlmKHRoaXMuX2tleVZhbHVlUGFpcnNbbV0ua2V5PT09aylyZXR1cm4hMDtyZXR1cm4hMX07bC5wcm90b3R5cGUuZm9yRWFjaD1mdW5jdGlvbihrLG0pe3ZhciBwPXRoaXM7bnVsbCE9dGhpcy5fZXM2TWFwP3RoaXMuX2VzNk1hcC5mb3JFYWNoKGZ1bmN0aW9uKHEscil7cmV0dXJuIGsuY2FsbChtLHEscixwKX0sbSk6dGhpcy5fa2V5VmFsdWVQYWlycy5mb3JFYWNoKGZ1bmN0aW9uKHEpe2suY2FsbChtLHEudmFsdWUscS5rZXkscCl9KX07bC5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKGspe2lmKG51bGwhPXRoaXMuX2VzNk1hcClyZXR1cm4gdGhpcy5fZXM2TWFwLmRlbGV0ZShrKTtmb3IodmFyIG09MDttPHRoaXMuX2tleVZhbHVlUGFpcnMubGVuZ3RoO20rKylpZih0aGlzLl9rZXlWYWx1ZVBhaXJzW21dLmtleT09PWspcmV0dXJuIHRoaXMuX2tleVZhbHVlUGFpcnMuc3BsaWNlKG0sMSksITA7cmV0dXJuITF9OwpyZXR1cm4gbH0oKTtkLk1hcD1jfSxmdW5jdGlvbihjLGQpe2QuYXNzaWduPWZ1bmN0aW9uKCl7Zm9yKHZhciBmPVtdLGc9MDtnPGFyZ3VtZW50cy5sZW5ndGg7ZysrKWZbZ109YXJndW1lbnRzW2ddO2c9e307Zm9yKHZhciBsPTA7bDxmLmxlbmd0aDtsKyspZm9yKHZhciBrPWZbbF0sbT0wLHA9T2JqZWN0LmtleXMoayk7bTxwLmxlbmd0aDttKyspe3ZhciBxPXBbbV07Z1txXT1rW3FdfXJldHVybiBnfX0sZnVuY3Rpb24oYyxkKXtjPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZigpe31mLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihnLGwpe2Zvcih2YXIgaz1NYXRoLmNlaWwoZy5sZW5ndGgvMiksbT0wO208azttKyspbFswXS5pbnNlcnQoZ1ttXSk7Zm9yKG09azttPGcubGVuZ3RoO20rKylsWzFdLmluc2VydChnW21dKX07cmV0dXJuIGZ9KCk7ZC5TcGxpdFN0cmF0ZWd5VHJpdmlhbD1jO2M9ZnVuY3Rpb24oKXtmdW5jdGlvbiBmKCl7fWYucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKGcsbCl7Zz0KZy5zbGljZSgpO2Zvcih0aGlzLmNob29zZUZpcnN0U3BsaXQoZyxsKTswPGcubGVuZ3RoOyl0aGlzLmFkZE5leHQoZyxsKX07Zi5wcm90b3R5cGUuY2hvb3NlRmlyc3RTcGxpdD1mdW5jdGlvbihnLGwpe2Zvcih2YXIgaz0wLG09MCxwPWcubGVuZ3RoLTEscT1nLmxlbmd0aC0xLHI9MTtyPGcubGVuZ3RoLTE7cisrKXt2YXIgdD1nW3JdO3QuYm91bmRzLnhsPmdbcF0uYm91bmRzLnhsP3A9cjp0LmJvdW5kcy54aDxnW2tdLmJvdW5kcy54aCYmKGs9cik7dC5ib3VuZHMueWw+Z1txXS5ib3VuZHMueWw/cT1yOnQuYm91bmRzLnloPGdbbV0uYm91bmRzLnloJiYobT1yKX1tPU1hdGguYWJzKGdba10uYm91bmRzLnhoLWdbcF0uYm91bmRzLnhsKT5NYXRoLmFicyhnW21dLmJvdW5kcy55aC1nW3FdLmJvdW5kcy55bCk/W2sscF06W20scV07az1tWzBdO209bVsxXTtrPT09bSYmKGs9MCxtPWcubGVuZ3RoLTEpO2xbMF0uaW5zZXJ0KGcuc3BsaWNlKE1hdGgubWF4KGssbSksMSlbMF0pO2xbMV0uaW5zZXJ0KGcuc3BsaWNlKE1hdGgubWluKGssCm0pLDEpWzBdKX07Zi5wcm90b3R5cGUuYWRkTmV4dD1mdW5jdGlvbihnLGwpe2Zvcih2YXIgaz1udWxsLG09bnVsbCxwPW51bGwscT0wO3E8Zy5sZW5ndGg7cSsrKXt2YXIgcj1nW3FdLHQ9bFswXS51bmlvbkFyZWFEaWZmZXJlbmNlKHIuYm91bmRzKTtyPWxbMV0udW5pb25BcmVhRGlmZmVyZW5jZShyLmJvdW5kcyk7aWYodDxtfHxudWxsPT1rKWs9cSxtPXQscD1sWzBdO3I8bSYmKGs9cSxtPXIscD1sWzFdKX1wLmluc2VydChnLnNwbGljZShrLDEpWzBdKX07cmV0dXJuIGZ9KCk7ZC5TcGxpdFN0cmF0ZWd5TGluZWFyPWN9LGZ1bmN0aW9uKGMsZCxmKXtmdW5jdGlvbiBnKHApe3JldHVybiBTdHJpbmcocCl9dmFyIGw9ZigxKSxrPWYoMCk7Yz1mKDEwKTtkLklTdGFja2luZ09yZGVyPWMubWFrZUVudW0oWyJ0b3Bkb3duIiwiYm90dG9tdXAiXSk7dmFyIG09TWF0aDtkLnN0YWNrPWZ1bmN0aW9uKHAscSxyLHQpe3ZvaWQgMD09PXQmJih0PSJib3R0b211cCIpO3ZhciB2PWwubWFwKCksQT0KbC5tYXAoKSx5PW5ldyBrLk1hcDsidG9wZG93biI9PT10JiYocD1wLnNsaWNlKCkscC5yZXZlcnNlKCkpO3AuZm9yRWFjaChmdW5jdGlvbih4KXt2YXIgQz1uZXcgay5NYXA7eC5kYXRhKCkuZm9yRWFjaChmdW5jdGlvbihGLEQpe3ZhciBCPWcocShGLEQseCkpLEc9K3IoRixELHgpLEs9MDw9Rz92OkE7aWYoSy5oYXMoQikpe3ZhciBMPUsuZ2V0KEIpO0suc2V0KEIsTCtHKX1lbHNlIEw9MCxLLnNldChCLEcpO0Muc2V0KEIse29mZnNldDpMLHZhbHVlOkcsYXhpc1ZhbHVlOnEoRixELHgpLG9yaWdpbmFsRGF0dW06RixvcmlnaW5hbERhdGFzZXQ6eCxvcmlnaW5hbEluZGV4OkR9KX0pO3kuc2V0KHgsQyl9KTtyZXR1cm4geX07ZC5zdGFja2VkRXh0ZW50cz1mdW5jdGlvbihwKXt2YXIgcT1uZXcgay5NYXAscj1uZXcgay5NYXA7cC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QuZm9yRWFjaChmdW5jdGlvbih2LEEpe3ZhciB5PWsuTWF0aC5tYXgoW3Yub2Zmc2V0K3YudmFsdWUsdi5vZmZzZXRdLAp2Lm9mZnNldCkseD1rLk1hdGgubWluKFt2Lm9mZnNldCt2LnZhbHVlLHYub2Zmc2V0XSx2Lm9mZnNldCksQz12LmF4aXNWYWx1ZTtxLmhhcyhBKT9xLmdldChBKS5leHRlbnQ8eSYmcS5zZXQoQSx7ZXh0ZW50OnksYXhpc1ZhbHVlOkMsc3RhY2tlZERhdHVtOnZ9KTpxLnNldChBLHtleHRlbnQ6eSxheGlzVmFsdWU6QyxzdGFja2VkRGF0dW06dn0pO3IuaGFzKEEpP3IuZ2V0KEEpLmV4dGVudD54JiZyLnNldChBLHtleHRlbnQ6eCxheGlzVmFsdWU6QyxzdGFja2VkRGF0dW06dn0pOnIuc2V0KEEse2V4dGVudDp4LGF4aXNWYWx1ZTpDLHN0YWNrZWREYXR1bTp2fSl9KX0pO3JldHVybnttYXhpbXVtRXh0ZW50czpxLG1pbmltdW1FeHRlbnRzOnJ9fTtkLnN0YWNrZWRFeHRlbnQ9ZnVuY3Rpb24ocCxxLHIpe3ZhciB0PVtdO3AuZm9yRWFjaChmdW5jdGlvbihBLHkpe3kuZGF0YSgpLmZvckVhY2goZnVuY3Rpb24oeCxDKXtpZihudWxsPT1yfHxyKHgsQyx5KSl4PUEuZ2V0KGcocSh4LEMseSkpKSwKdC5wdXNoKHgudmFsdWUreC5vZmZzZXQpfSl9KTtwPWsuTWF0aC5tYXgodCwwKTt2YXIgdj1rLk1hdGgubWluKHQsMCk7cmV0dXJuW20ubWluKHYsMCksbS5tYXgoMCxwKV19O2Qubm9ybWFsaXplS2V5PWd9LGZ1bmN0aW9uKGMsZCxmKXt2YXIgZz1mKDApO2QuZ2V0VHJhbnNsYXRvcj1mdW5jdGlvbihrKXtrPWsucm9vdCgpLnJvb3RFbGVtZW50KCkubm9kZSgpO3ZhciBtPWsuX19QbG90dGFibGVfQ2xpZW50VHJhbnNsYXRvcjtudWxsPT1tJiYobT1uZXcgbChrKSxrLl9fUGxvdHRhYmxlX0NsaWVudFRyYW5zbGF0b3I9bSk7cmV0dXJuIG19O3ZhciBsPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gayhtKXt0aGlzLl9yb290RWxlbWVudD1tfWsucHJvdG90eXBlLmNvbXB1dGVQb3NpdGlvbj1mdW5jdGlvbihtLHApe209e3g6bSx5OnB9O3A9Zy5NYXRoLmdldEN1bXVsYXRpdmVUcmFuc2Zvcm0odGhpcy5fcm9vdEVsZW1lbnQpO3JldHVybiBudWxsPT1wP206Zy5NYXRoLmFwcGx5VHJhbnNmb3JtKHAsCm0pfTtrLmlzRXZlbnRJbnNpZGU9ZnVuY3Rpb24obSxwKXtyZXR1cm4gZy5ET00uY29udGFpbnMobS5yb290KCkucm9vdEVsZW1lbnQoKS5ub2RlKCkscC50YXJnZXQpfTtyZXR1cm4ga30oKTtkLlRyYW5zbGF0b3I9bH0sZnVuY3Rpb24oYyxkLGYpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShkLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgZz1mKDEyNCk7Zi5kKGQsImVhc2VMaW5lYXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGcuYX0pO3ZhciBsPWYoMTI2KTtmLmQoZCwiZWFzZVF1YWQiLGZ1bmN0aW9uKCl7cmV0dXJuIGwuYX0pO2YuZChkLCJlYXNlUXVhZEluIixmdW5jdGlvbigpe3JldHVybiBsLmJ9KTtmLmQoZCwiZWFzZVF1YWRPdXQiLGZ1bmN0aW9uKCl7cmV0dXJuIGwuY30pO2YuZChkLCJlYXNlUXVhZEluT3V0IixmdW5jdGlvbigpe3JldHVybiBsLmF9KTt2YXIgaz1mKDEyMSk7Zi5kKGQsImVhc2VDdWJpYyIsZnVuY3Rpb24oKXtyZXR1cm4gay5hfSk7Zi5kKGQsImVhc2VDdWJpY0luIiwKZnVuY3Rpb24oKXtyZXR1cm4gay5ifSk7Zi5kKGQsImVhc2VDdWJpY091dCIsZnVuY3Rpb24oKXtyZXR1cm4gay5jfSk7Zi5kKGQsImVhc2VDdWJpY0luT3V0IixmdW5jdGlvbigpe3JldHVybiBrLmF9KTt2YXIgbT1mKDEyNSk7Zi5kKGQsImVhc2VQb2x5IixmdW5jdGlvbigpe3JldHVybiBtLmF9KTtmLmQoZCwiZWFzZVBvbHlJbiIsZnVuY3Rpb24oKXtyZXR1cm4gbS5ifSk7Zi5kKGQsImVhc2VQb2x5T3V0IixmdW5jdGlvbigpe3JldHVybiBtLmN9KTtmLmQoZCwiZWFzZVBvbHlJbk91dCIsZnVuY3Rpb24oKXtyZXR1cm4gbS5hfSk7dmFyIHA9ZigxMjcpO2YuZChkLCJlYXNlU2luIixmdW5jdGlvbigpe3JldHVybiBwLmF9KTtmLmQoZCwiZWFzZVNpbkluIixmdW5jdGlvbigpe3JldHVybiBwLmJ9KTtmLmQoZCwiZWFzZVNpbk91dCIsZnVuY3Rpb24oKXtyZXR1cm4gcC5jfSk7Zi5kKGQsImVhc2VTaW5Jbk91dCIsZnVuY3Rpb24oKXtyZXR1cm4gcC5hfSk7dmFyIHE9ZigxMjMpO2YuZChkLAoiZWFzZUV4cCIsZnVuY3Rpb24oKXtyZXR1cm4gcS5hfSk7Zi5kKGQsImVhc2VFeHBJbiIsZnVuY3Rpb24oKXtyZXR1cm4gcS5ifSk7Zi5kKGQsImVhc2VFeHBPdXQiLGZ1bmN0aW9uKCl7cmV0dXJuIHEuY30pO2YuZChkLCJlYXNlRXhwSW5PdXQiLGZ1bmN0aW9uKCl7cmV0dXJuIHEuYX0pO3ZhciByPWYoMTIwKTtmLmQoZCwiZWFzZUNpcmNsZSIsZnVuY3Rpb24oKXtyZXR1cm4gci5hfSk7Zi5kKGQsImVhc2VDaXJjbGVJbiIsZnVuY3Rpb24oKXtyZXR1cm4gci5ifSk7Zi5kKGQsImVhc2VDaXJjbGVPdXQiLGZ1bmN0aW9uKCl7cmV0dXJuIHIuY30pO2YuZChkLCJlYXNlQ2lyY2xlSW5PdXQiLGZ1bmN0aW9uKCl7cmV0dXJuIHIuYX0pO3ZhciB0PWYoMTE5KTtmLmQoZCwiZWFzZUJvdW5jZSIsZnVuY3Rpb24oKXtyZXR1cm4gdC5hfSk7Zi5kKGQsImVhc2VCb3VuY2VJbiIsZnVuY3Rpb24oKXtyZXR1cm4gdC5ifSk7Zi5kKGQsImVhc2VCb3VuY2VPdXQiLGZ1bmN0aW9uKCl7cmV0dXJuIHQuYX0pOwpmLmQoZCwiZWFzZUJvdW5jZUluT3V0IixmdW5jdGlvbigpe3JldHVybiB0LmN9KTt2YXIgdj1mKDExOCk7Zi5kKGQsImVhc2VCYWNrIixmdW5jdGlvbigpe3JldHVybiB2LmF9KTtmLmQoZCwiZWFzZUJhY2tJbiIsZnVuY3Rpb24oKXtyZXR1cm4gdi5ifSk7Zi5kKGQsImVhc2VCYWNrT3V0IixmdW5jdGlvbigpe3JldHVybiB2LmN9KTtmLmQoZCwiZWFzZUJhY2tJbk91dCIsZnVuY3Rpb24oKXtyZXR1cm4gdi5hfSk7dmFyIEE9ZigxMjIpO2YuZChkLCJlYXNlRWxhc3RpYyIsZnVuY3Rpb24oKXtyZXR1cm4gQS5hfSk7Zi5kKGQsImVhc2VFbGFzdGljSW4iLGZ1bmN0aW9uKCl7cmV0dXJuIEEuYn0pO2YuZChkLCJlYXNlRWxhc3RpY091dCIsZnVuY3Rpb24oKXtyZXR1cm4gQS5hfSk7Zi5kKGQsImVhc2VFbGFzdGljSW5PdXQiLGZ1bmN0aW9uKCl7cmV0dXJuIEEuY30pfSxmdW5jdGlvbihjLGQsZil7Zi5kKGQsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIGd9KTtmLmQoZCwiYyIsZnVuY3Rpb24oKXtyZXR1cm4gbH0pOwpmLmQoZCwiYSIsZnVuY3Rpb24oKXtyZXR1cm4ga30pO3ZhciBnPWZ1bmN0aW9uIHEocCl7ZnVuY3Rpb24gcih0KXtyZXR1cm4gdCp0KigocCsxKSp0LXApfXA9K3A7ci5vdmVyc2hvb3Q9cTtyZXR1cm4gcn0oMS43MDE1OCksbD1mdW5jdGlvbiByKHEpe2Z1bmN0aW9uIHQodil7cmV0dXJuLS12KnYqKChxKzEpKnYrcSkrMX1xPStxO3Qub3ZlcnNob290PXI7cmV0dXJuIHR9KDEuNzAxNTgpLGs9ZnVuY3Rpb24gdChyKXtmdW5jdGlvbiB2KEEpe3JldHVybigxPihBKj0yKT9BKkEqKChyKzEpKkEtcik6KEEtPTIpKkEqKChyKzEpKkErcikrMikvMn1yPStyO3Yub3ZlcnNob290PXQ7cmV0dXJuIHZ9KDEuNzAxNTgpfSxmdW5jdGlvbihjLGQpe2Z1bmN0aW9uIGYoeSl7cmV0dXJuKHk9K3kpPGc/QSp5Knk6eTxrP0EqKHktPWwpKnkrbTp5PHE/QSooeS09cCkqeStyOkEqKHktPXQpKnkrdn1kLmI9ZnVuY3Rpb24oeSl7cmV0dXJuIDEtZigxLXkpfTtkLmE9ZjtkLmM9ZnVuY3Rpb24oeSl7cmV0dXJuKDE+PQooeSo9Mik/MS1mKDEteSk6Zih5LTEpKzEpLzJ9O3ZhciBnPTQvMTEsbD02LzExLGs9OC8xMSxtPS43NSxwPTkvMTEscT0xMC8xMSxyPS45Mzc1LHQ9MjEvMjIsdj0uOTg0Mzc1LEE9MS9nL2d9LGZ1bmN0aW9uKGMsZCl7ZC5iPWZ1bmN0aW9uKGYpe3JldHVybiAxLU1hdGguc3FydCgxLWYqZil9O2QuYz1mdW5jdGlvbihmKXtyZXR1cm4gTWF0aC5zcXJ0KDEtIC0tZipmKX07ZC5hPWZ1bmN0aW9uKGYpe3JldHVybigxPj0oZio9Mik/MS1NYXRoLnNxcnQoMS1mKmYpOk1hdGguc3FydCgxLShmLT0yKSpmKSsxKS8yfX0sZnVuY3Rpb24oYyxkKXtkLmI9ZnVuY3Rpb24oZil7cmV0dXJuIGYqZipmfTtkLmM9ZnVuY3Rpb24oZil7cmV0dXJuLS1mKmYqZisxfTtkLmE9ZnVuY3Rpb24oZil7cmV0dXJuKDE+PShmKj0yKT9mKmYqZjooZi09MikqZipmKzIpLzJ9fSxmdW5jdGlvbihjLGQsZil7Zi5kKGQsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIGx9KTtmLmQoZCwiYSIsZnVuY3Rpb24oKXtyZXR1cm4ga30pOwpmLmQoZCwiYyIsZnVuY3Rpb24oKXtyZXR1cm4gbX0pO3ZhciBnPTIqTWF0aC5QSSxsPWZ1bmN0aW9uIHQocSxyKXtmdW5jdGlvbiB2KHkpe3JldHVybiBxKk1hdGgucG93KDIsMTAqLS15KSpNYXRoLnNpbigoQS15KS9yKX12YXIgQT1NYXRoLmFzaW4oMS8ocT1NYXRoLm1heCgxLHEpKSkqKHIvPWcpO3YuYW1wbGl0dWRlPWZ1bmN0aW9uKHkpe3JldHVybiB0KHkscipnKX07di5wZXJpb2Q9ZnVuY3Rpb24oeSl7cmV0dXJuIHQocSx5KX07cmV0dXJuIHZ9KDEsLjMpLGs9ZnVuY3Rpb24gdihyLHQpe2Z1bmN0aW9uIEEoeCl7cmV0dXJuIDEtcipNYXRoLnBvdygyLC0xMCooeD0reCkpKk1hdGguc2luKCh4K3kpL3QpfXZhciB5PU1hdGguYXNpbigxLyhyPU1hdGgubWF4KDEscikpKSoodC89Zyk7QS5hbXBsaXR1ZGU9ZnVuY3Rpb24oeCl7cmV0dXJuIHYoeCx0KmcpfTtBLnBlcmlvZD1mdW5jdGlvbih4KXtyZXR1cm4gdihyLHgpfTtyZXR1cm4gQX0oMSwuMyksbT1mdW5jdGlvbiBBKHQsdil7ZnVuY3Rpb24geShDKXtyZXR1cm4oMD4KKEM9MipDLTEpP3QqTWF0aC5wb3coMiwxMCpDKSpNYXRoLnNpbigoeC1DKS92KToyLXQqTWF0aC5wb3coMiwtMTAqQykqTWF0aC5zaW4oKHgrQykvdikpLzJ9dmFyIHg9TWF0aC5hc2luKDEvKHQ9TWF0aC5tYXgoMSx0KSkpKih2Lz1nKTt5LmFtcGxpdHVkZT1mdW5jdGlvbihDKXtyZXR1cm4gQShDLHYqZyl9O3kucGVyaW9kPWZ1bmN0aW9uKEMpe3JldHVybiBBKHQsQyl9O3JldHVybiB5fSgxLC4zKX0sZnVuY3Rpb24oYyxkKXtkLmI9ZnVuY3Rpb24oZil7cmV0dXJuIE1hdGgucG93KDIsMTAqZi0xMCl9O2QuYz1mdW5jdGlvbihmKXtyZXR1cm4gMS1NYXRoLnBvdygyLC0xMCpmKX07ZC5hPWZ1bmN0aW9uKGYpe3JldHVybigxPj0oZio9Mik/TWF0aC5wb3coMiwxMCpmLTEwKToyLU1hdGgucG93KDIsMTAtMTAqZikpLzJ9fSxmdW5jdGlvbihjLGQpe2QuYT1mdW5jdGlvbihmKXtyZXR1cm4rZn19LGZ1bmN0aW9uKGMsZCxmKXtmLmQoZCwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gZ30pO2YuZChkLAoiYyIsZnVuY3Rpb24oKXtyZXR1cm4gbH0pO2YuZChkLCJhIixmdW5jdGlvbigpe3JldHVybiBrfSk7dmFyIGc9ZnVuY3Rpb24gcShwKXtmdW5jdGlvbiByKHQpe3JldHVybiBNYXRoLnBvdyh0LHApfXA9K3A7ci5leHBvbmVudD1xO3JldHVybiByfSgzKSxsPWZ1bmN0aW9uIHIocSl7ZnVuY3Rpb24gdCh2KXtyZXR1cm4gMS1NYXRoLnBvdygxLXYscSl9cT0rcTt0LmV4cG9uZW50PXI7cmV0dXJuIHR9KDMpLGs9ZnVuY3Rpb24gdChyKXtmdW5jdGlvbiB2KEEpe3JldHVybigxPj0oQSo9Mik/TWF0aC5wb3coQSxyKToyLU1hdGgucG93KDItQSxyKSkvMn1yPStyO3YuZXhwb25lbnQ9dDtyZXR1cm4gdn0oMyl9LGZ1bmN0aW9uKGMsZCl7ZC5iPWZ1bmN0aW9uKGYpe3JldHVybiBmKmZ9O2QuYz1mdW5jdGlvbihmKXtyZXR1cm4gZiooMi1mKX07ZC5hPWZ1bmN0aW9uKGYpe3JldHVybigxPj0oZio9Mik/ZipmOi0tZiooMi1mKSsxKS8yfX0sZnVuY3Rpb24oYyxkKXtkLmI9ZnVuY3Rpb24obCl7cmV0dXJuIDEtCk1hdGguY29zKGwqZyl9O2QuYz1mdW5jdGlvbihsKXtyZXR1cm4gTWF0aC5zaW4obCpnKX07ZC5hPWZ1bmN0aW9uKGwpe3JldHVybigxLU1hdGguY29zKGYqbCkpLzJ9O3ZhciBmPU1hdGguUEksZz1mLzJ9LGZ1bmN0aW9uKGMsZCxmKXtmdW5jdGlvbiBnKGspe3JldHVybiEwPT09bChrKSYmIltvYmplY3QgT2JqZWN0XSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoayl9dmFyIGw9ZigxMjkpO2MuZXhwb3J0cz1mdW5jdGlvbihrKXtpZighMT09PWcoaykpcmV0dXJuITE7az1rLmNvbnN0cnVjdG9yO2lmKCJmdW5jdGlvbiIhPT10eXBlb2YgaylyZXR1cm4hMTtrPWsucHJvdG90eXBlO3JldHVybiExPT09ZyhrKXx8ITE9PT1rLmhhc093blByb3BlcnR5KCJpc1Byb3RvdHlwZU9mIik/ITE6ITB9fSxmdW5jdGlvbihjKXtjLmV4cG9ydHM9ZnVuY3Rpb24oZCl7cmV0dXJuIG51bGwhPWQmJiJvYmplY3QiPT09dHlwZW9mIGQmJiExPT09QXJyYXkuaXNBcnJheShkKX19LGZ1bmN0aW9uKGMsCmQpe2M9ZnVuY3Rpb24oKXtmdW5jdGlvbiBmKGcsbCxrKXt2b2lkIDA9PT1sJiYobD0xMCk7dm9pZCAwPT09ayYmKGs9e30pO3ZhciBtPXRoaXM7dGhpcy5jdHg9Zzt0aGlzLmxpbmVIZWlnaHQ9bDt0aGlzLnN0eWxlPWs7dGhpcy5jcmVhdGVSdWxlcj1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihwKXttLmN0eC5mb250PW0uc3R5bGUuZm9udDtyZXR1cm57d2lkdGg6bS5jdHgubWVhc3VyZVRleHQocCkud2lkdGgsaGVpZ2h0Om0ubGluZUhlaWdodH19fTt0aGlzLmNyZWF0ZVBlbj1mdW5jdGlvbihwLHEscil7bnVsbD09ciYmKHI9bS5jdHgpO3Iuc2F2ZSgpO3IudHJhbnNsYXRlKHEudHJhbnNsYXRlWzBdLHEudHJhbnNsYXRlWzFdKTtyLnJvdGF0ZShxLnJvdGF0ZSpNYXRoLlBJLzE4MCk7cmV0dXJuIG0uY3JlYXRlQ2FudmFzUGVuKHIpfTt2b2lkIDA9PT10aGlzLnN0eWxlLmZpbGwmJih0aGlzLnN0eWxlLmZpbGw9IiM0NDQiKX1mLnByb3RvdHlwZS5jcmVhdGVDYW52YXNQZW49ZnVuY3Rpb24oZyl7dmFyIGw9CnRoaXM7cmV0dXJue2Rlc3Ryb3k6ZnVuY3Rpb24oKXtnLnJlc3RvcmUoKX0sd3JpdGU6ZnVuY3Rpb24oayxtLHAscSl7Zy50ZXh0QWxpZ249bTtudWxsIT1sLnN0eWxlLmZvbnQmJihnLmZvbnQ9bC5zdHlsZS5mb250KTtudWxsIT1sLnN0eWxlLmZpbGwmJihnLmZpbGxTdHlsZT1sLnN0eWxlLmZpbGwsZy5maWxsVGV4dChrLHAscSkpO251bGwhPWwuc3R5bGUuc3Ryb2tlJiYoZy5zdHJva2VTdHlsZT1sLnN0eWxlLmZpbGwsZy5zdHJva2VUZXh0KGsscCxxKSl9fX07cmV0dXJuIGZ9KCk7ZC5DYW52YXNDb250ZXh0PWN9LGZ1bmN0aW9uKGMsZCl7dmFyIGY9ZnVuY3Rpb24oKXtmdW5jdGlvbiBnKCl7fWcuYXBwZW5kPWZ1bmN0aW9uKGwsayl7Zm9yKHZhciBtPVtdLHA9MjtwPGFyZ3VtZW50cy5sZW5ndGg7cCsrKW1bcC0yXT1hcmd1bWVudHNbcF07bT1nLmNyZWF0ZS5hcHBseShnLFtrXS5jb25jYXQobSkpO2wuYXBwZW5kQ2hpbGQobSk7cmV0dXJuIG19O2cuY3JlYXRlPWZ1bmN0aW9uKGwpe2Zvcih2YXIgaz0KW10sbT0xO208YXJndW1lbnRzLmxlbmd0aDttKyspa1ttLTFdPWFyZ3VtZW50c1ttXTttPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhnLlNWR19OUyxsKTtnLmFkZENsYXNzZXMuYXBwbHkoZyxbbV0uY29uY2F0KGspKTtyZXR1cm4gbX07Zy5hZGRDbGFzc2VzPWZ1bmN0aW9uKGwpe2Zvcih2YXIgaz1bXSxtPTE7bTxhcmd1bWVudHMubGVuZ3RoO20rKylrW20tMV09YXJndW1lbnRzW21dO2s9ay5maWx0ZXIoZnVuY3Rpb24ocCl7cmV0dXJuIG51bGwhPXB9KTtudWxsIT1sLmNsYXNzTGlzdD9rLmZvckVhY2goZnVuY3Rpb24ocCl7bC5jbGFzc0xpc3QuYWRkKHApfSk6bC5zZXRBdHRyaWJ1dGUoImNsYXNzIixrLmpvaW4oIiAiKSl9O2cuZ2V0RGltZW5zaW9ucz1mdW5jdGlvbihsKXtpZihsLmdldEJCb3gpdHJ5e3ZhciBrPWwuZ2V0QkJveCgpO3JldHVybnt3aWR0aDprLndpZHRoLGhlaWdodDprLmhlaWdodH19Y2F0Y2gobSl7fXJldHVybntoZWlnaHQ6MCx3aWR0aDowfX07cmV0dXJuIGd9KCk7CmYuU1ZHX05TPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI7ZC5TdmdVdGlscz1mO2M9ZnVuY3Rpb24oKXtmdW5jdGlvbiBnKGwsayxtKXt2b2lkIDA9PT1tJiYobT0hMSk7dmFyIHA9dGhpczt0aGlzLmVsZW1lbnQ9bDt0aGlzLmNsYXNzTmFtZT1rO3RoaXMuYWRkVGl0bGVFbGVtZW50PW07dGhpcy5jcmVhdGVSdWxlcj1mdW5jdGlvbigpe3ZhciBxPXAuZ2V0VGV4dEVsZW1lbnRzKHAuZWxlbWVudCkscj1xLnBhcmVudEVsZW1lbnQsdD1xLmNvbnRhaW5lckVsZW1lbnQsdj1xLnRleHRFbGVtZW50O3JldHVybiBmdW5jdGlvbihBKXtyLmFwcGVuZENoaWxkKHQpO3YudGV4dENvbnRlbnQ9QTtBPWYuZ2V0RGltZW5zaW9ucyh2KTtyLnJlbW92ZUNoaWxkKHQpO3JldHVybiBBfX07dGhpcy5jcmVhdGVQZW49ZnVuY3Rpb24ocSxyLHQpe251bGw9PXQmJih0PXAuZWxlbWVudCk7dD1mLmFwcGVuZCh0LCJnIiwidGV4dC1jb250YWluZXIiLHAuY2xhc3NOYW1lKTtwLmFkZFRpdGxlRWxlbWVudCYmCihmLmFwcGVuZCh0LCJ0aXRsZSIpLnRleHRDb250ZW50PXEsdC5zZXRBdHRyaWJ1dGUoInRpdGxlIixxKSk7cT1mLmFwcGVuZCh0LCJnIiwidGV4dC1hcmVhIik7cS5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3IudHJhbnNsYXRlWzBdKyIsIityLnRyYW5zbGF0ZVsxXSsiKSIrKCJyb3RhdGUoIityLnJvdGF0ZSsiKSIpKTtyZXR1cm4gcC5jcmVhdGVTdmdMaW5lUGVuKHEpfX1nLnByb3RvdHlwZS5zZXRBZGRUaXRsZUVsZW1lbnQ9ZnVuY3Rpb24obCl7dGhpcy5hZGRUaXRsZUVsZW1lbnQ9bH07Zy5wcm90b3R5cGUuY3JlYXRlU3ZnTGluZVBlbj1mdW5jdGlvbihsKXtyZXR1cm57d3JpdGU6ZnVuY3Rpb24oayxtLHAscSl7dmFyIHI9Zi5hcHBlbmQobCwidGV4dCIsInRleHQtbGluZSIpO3IudGV4dENvbnRlbnQ9aztyLnNldEF0dHJpYnV0ZSgidGV4dC1hbmNob3IiLG0pO3Iuc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitwKyIsIitxKyIpIik7CnIuc2V0QXR0cmlidXRlKCJ5IiwiLTAuMjVlbSIpfX19O2cucHJvdG90eXBlLmdldFRleHRFbGVtZW50cz1mdW5jdGlvbihsKXtpZigidGV4dCI9PT1sLnRhZ05hbWUpe3ZhciBrPWwucGFyZW50RWxlbWVudDtudWxsPT1rJiYoaz1sLnBhcmVudE5vZGUpO2sucmVtb3ZlQ2hpbGQobCk7cmV0dXJue2NvbnRhaW5lckVsZW1lbnQ6bCxwYXJlbnRFbGVtZW50OmssdGV4dEVsZW1lbnQ6bH19dmFyIG09bC5xdWVyeVNlbGVjdG9yKCJ0ZXh0Iik7aWYobnVsbCE9bSlyZXR1cm4gaz1sLnBhcmVudEVsZW1lbnQsbnVsbD09ayYmKGs9bC5wYXJlbnROb2RlKSxrLnJlbW92ZUNoaWxkKGwpLHtjb250YWluZXJFbGVtZW50OmwscGFyZW50RWxlbWVudDprLHRleHRFbGVtZW50Om19O2s9Zi5jcmVhdGUoInRleHQiLHRoaXMuY2xhc3NOYW1lKTtyZXR1cm57Y29udGFpbmVyRWxlbWVudDprLHBhcmVudEVsZW1lbnQ6bCx0ZXh0RWxlbWVudDprfX07cmV0dXJuIGd9KCk7ZC5TdmdDb250ZXh0PWN9LGZ1bmN0aW9uKGMsCmQsZil7dmFyIGc9dGhpcyYmdGhpcy5fX2V4dGVuZHN8fGZ1bmN0aW9uKG0scCl7ZnVuY3Rpb24gcSgpe3RoaXMuY29uc3RydWN0b3I9bX1mb3IodmFyIHIgaW4gcClwLmhhc093blByb3BlcnR5KHIpJiYobVtyXT1wW3JdKTttLnByb3RvdHlwZT1udWxsPT09cD9PYmplY3QuY3JlYXRlKHApOihxLnByb3RvdHlwZT1wLnByb3RvdHlwZSxuZXcgcSl9LGw9ZigyMSksaz1mKDM2KTtjPWZ1bmN0aW9uKG0pe2Z1bmN0aW9uIHAocSl7dmFyIHI9bS5jYWxsKHRoaXMscSl8fHRoaXM7ci5kaW1DYWNoZT1uZXcgbC5DYWNoZShmdW5jdGlvbih0KXtyZXR1cm4gci5fbWVhc3VyZU5vdEZyb21DYWNoZSh0KX0pO3JldHVybiByfWcocCxtKTtwLnByb3RvdHlwZS5fbWVhc3VyZU5vdEZyb21DYWNoZT1mdW5jdGlvbihxKXtyZXR1cm4gbS5wcm90b3R5cGUubWVhc3VyZS5jYWxsKHRoaXMscSl9O3AucHJvdG90eXBlLm1lYXN1cmU9ZnVuY3Rpb24ocSl7dm9pZCAwPT09cSYmKHE9ay5BYnN0cmFjdE1lYXN1cmVyLkhFSUdIVF9URVhUKTsKcmV0dXJuIHRoaXMuZGltQ2FjaGUuZ2V0KHEpfTtwLnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3RoaXMuZGltQ2FjaGUuY2xlYXIoKTttLnByb3RvdHlwZS5yZXNldC5jYWxsKHRoaXMpfTtyZXR1cm4gcH0oZig2MCkuQ2FjaGVDaGFyYWN0ZXJNZWFzdXJlcik7ZC5DYWNoZU1lYXN1cmVyPWN9LGZ1bmN0aW9uKGMsZCxmKXt2YXIgZz1mKDU5KSxsPWYoNjIpLGs9Zig2NCksbT1mKDY2KTtjPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gcChxKXt0aGlzLmNvbnRleHQ9cTt0aGlzLm1lYXN1cmVyPW5ldyBsLkNhY2hlTWVhc3VyZXIodGhpcy5jb250ZXh0KTt0aGlzLndyYXBwZXI9bmV3IGsuV3JhcHBlcjt0aGlzLndyaXRlcj1uZXcgbS5Xcml0ZXIodGhpcy5tZWFzdXJlcix0aGlzLmNvbnRleHQsdGhpcy53cmFwcGVyKX1wLnN2Zz1mdW5jdGlvbihxLHIsdCl7cmV0dXJuIG5ldyBwKG5ldyBnLlN2Z0NvbnRleHQocSxyLHQpKX07cC5jYW52YXM9ZnVuY3Rpb24ocSxyLHQpe3JldHVybiBuZXcgcChuZXcgZy5DYW52YXNDb250ZXh0KHEsCnIsdCkpfTtwLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihxLHIsdCx2LEEpe3RoaXMud3JpdGVyLndyaXRlKHEscix0LHYsQSl9O3AucHJvdG90eXBlLmNsZWFyTWVhc3VyZXJDYWNoZT1mdW5jdGlvbigpe3RoaXMubWVhc3VyZXIucmVzZXQoKX07cmV0dXJuIHB9KCk7ZC5UeXBlc2V0dGVyPWN9LGZ1bmN0aW9uKGMsZCl7Yz1mdW5jdGlvbigpe2Z1bmN0aW9uIGYoZyl7dGhpcy5jYWNoZT17fTt0aGlzLmNvbXB1dGU9Z31mLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oZyl7dGhpcy5jYWNoZS5oYXNPd25Qcm9wZXJ0eShnKXx8KHRoaXMuY2FjaGVbZ109dGhpcy5jb21wdXRlKGcpKTtyZXR1cm4gdGhpcy5jYWNoZVtnXX07Zi5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLmNhY2hlPXt9O3JldHVybiB0aGlzfTtyZXR1cm4gZn0oKTtkLkNhY2hlPWN9LGZ1bmN0aW9uKGMsZCl7ZC5NZXRob2RzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZigpe31mLmFycmF5RXE9ZnVuY3Rpb24oZyxsKXtpZihudWxsPT0KZ3x8bnVsbD09bClyZXR1cm4gZz09PWw7aWYoZy5sZW5ndGghPT1sLmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIGs9MDtrPGcubGVuZ3RoO2srKylpZihnW2tdIT09bFtrXSlyZXR1cm4hMTtyZXR1cm4hMH07Zi5vYmpFcT1mdW5jdGlvbihnLGwpe2lmKG51bGw9PWd8fG51bGw9PWwpcmV0dXJuIGc9PT1sO3ZhciBrPU9iamVjdC5rZXlzKGcpLnNvcnQoKSxtPU9iamVjdC5rZXlzKGwpLnNvcnQoKSxwPWsubWFwKGZ1bmN0aW9uKHIpe3JldHVybiBnW3JdfSkscT1tLm1hcChmdW5jdGlvbihyKXtyZXR1cm4gbFtyXX0pO3JldHVybiBmLmFycmF5RXEoayxtKSYmZi5hcnJheUVxKHAscSl9O2Yuc3RyaWN0RXE9ZnVuY3Rpb24oZyxsKXtyZXR1cm4gZz09PWx9O2YuZGVmYXVsdHM9ZnVuY3Rpb24oZyl7Zm9yKHZhciBsPVtdLGs9MTtrPGFyZ3VtZW50cy5sZW5ndGg7aysrKWxbay0xXT1hcmd1bWVudHNba107aWYobnVsbD09Zyl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY29udmVydCB1bmRlZmluZWQgb3IgbnVsbCB0byBvYmplY3QiKTsKdmFyIG09T2JqZWN0KGcpO2wuZm9yRWFjaChmdW5jdGlvbihwKXtpZihudWxsIT1wKWZvcih2YXIgcSBpbiBwKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwLHEpJiYobVtxXT1wW3FdKX0pO3JldHVybiBtfTtyZXR1cm4gZn0oKX0sZnVuY3Rpb24oYyxkKXtkLlN0cmluZ01ldGhvZHM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBmKCl7fWYuY29tYmluZVdoaXRlc3BhY2U9ZnVuY3Rpb24oZyl7cmV0dXJuIGcucmVwbGFjZSgvWyBcdF0rL2csIiAiKX07Zi5pc05vdEVtcHR5U3RyaW5nPWZ1bmN0aW9uKGcpe3JldHVybiBnJiYiIiE9PWcudHJpbSgpfTtmLnRyaW1TdGFydD1mdW5jdGlvbihnLGwpe2lmKCFnKXJldHVybiBnO2c9Zy5zcGxpdCgiIik7dmFyIGs9bD9mdW5jdGlvbihtKXtyZXR1cm4gbS5zcGxpdChsKS5zb21lKGYuaXNOb3RFbXB0eVN0cmluZyl9OmYuaXNOb3RFbXB0eVN0cmluZztyZXR1cm4gZy5yZWR1Y2UoZnVuY3Rpb24obSxwKXtyZXR1cm4gayhtK3ApPwptK3A6bX0sIiIpfTtmLnRyaW1FbmQ9ZnVuY3Rpb24oZyxsKXtpZighZylyZXR1cm4gZztnPWcuc3BsaXQoIiIpO2cucmV2ZXJzZSgpO2c9Zi50cmltU3RhcnQoZy5qb2luKCIiKSxsKS5zcGxpdCgiIik7Zy5yZXZlcnNlKCk7cmV0dXJuIGcuam9pbigiIil9O3JldHVybiBmfSgpfSxmdW5jdGlvbihjLGQpe2M9ZnVuY3Rpb24oKXtmdW5jdGlvbiBmKCl7dGhpcy5Xb3JkRGl2aWRlclJlZ0V4cD0vXFcvO3RoaXMuV2hpdGVzcGFjZVJlZ0V4cD0vXHMvfWYucHJvdG90eXBlLnRva2VuaXplPWZ1bmN0aW9uKGcpe3ZhciBsPXRoaXM7cmV0dXJuIGcuc3BsaXQoIiIpLnJlZHVjZShmdW5jdGlvbihrLG0pe3JldHVybiBrLnNsaWNlKDAsLTEpLmNvbmNhdChsLnNob3VsZENyZWF0ZU5ld1Rva2VuKGtbay5sZW5ndGgtMV0sbSkpfSxbIiJdKX07Zi5wcm90b3R5cGUuc2hvdWxkQ3JlYXRlTmV3VG9rZW49ZnVuY3Rpb24oZyxsKXtpZighZylyZXR1cm5bbF07dmFyIGs9Z1tnLmxlbmd0aC0xXTtyZXR1cm4gdGhpcy5XaGl0ZXNwYWNlUmVnRXhwLnRlc3QoaykmJgp0aGlzLldoaXRlc3BhY2VSZWdFeHAudGVzdChsKT9bZytsXTp0aGlzLldoaXRlc3BhY2VSZWdFeHAudGVzdChrKXx8dGhpcy5XaGl0ZXNwYWNlUmVnRXhwLnRlc3QobCk/W2csbF06dGhpcy5Xb3JkRGl2aWRlclJlZ0V4cC50ZXN0KGspfHx0aGlzLldvcmREaXZpZGVyUmVnRXhwLnRlc3QobCk/az09PWw/W2crbF06W2csbF06W2crbF19O3JldHVybiBmfSgpO2QuVG9rZW5pemVyPWN9LGZ1bmN0aW9uKGMsZCxmKXt2YXIgZz10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8ZnVuY3Rpb24obCxrKXtmdW5jdGlvbiBtKCl7dGhpcy5jb25zdHJ1Y3Rvcj1sfWZvcih2YXIgcCBpbiBrKWsuaGFzT3duUHJvcGVydHkocCkmJihsW3BdPWtbcF0pO2wucHJvdG90eXBlPW51bGw9PT1rP09iamVjdC5jcmVhdGUoayk6KG0ucHJvdG90eXBlPWsucHJvdG90eXBlLG5ldyBtKX07Yz1mdW5jdGlvbihsKXtmdW5jdGlvbiBrKCl7cmV0dXJuIGwuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfWcoayxsKTtrLnByb3RvdHlwZS53cmFwPQpmdW5jdGlvbihtLHAscSxyKXtmdW5jdGlvbiB0KEQpe3JldHVybiBsLnByb3RvdHlwZS53cmFwLmNhbGwodixtLHAsRCxyKX12YXIgdj10aGlzO3ZvaWQgMD09PXImJihyPUluZmluaXR5KTtpZigxPG0uc3BsaXQoIlxuIikubGVuZ3RoKXRocm93IEVycm9yKCJTaW5nbGVMaW5lV3JhcHBlciBpcyBkZXNpZ25lZCB0byB3b3JrIG9ubHkgb24gc2luZ2xlIGxpbmUiKTt2YXIgQT10KHEpO2lmKDI+QS5ub0xpbmVzKXJldHVybiBBO2Zvcih2YXIgeT0wLHg9MDt4PGsuTk9fV1JBUF9JVEVSQVRJT05TJiZxPnk7Kyt4KXt2YXIgQz0ocSt5KS8yLEY9dChDKTt0aGlzLmFyZVNhbWVSZXN1bHRzKEEsRik/KHE9QyxBPUYpOnk9Q31yZXR1cm4gQX07ay5wcm90b3R5cGUuYXJlU2FtZVJlc3VsdHM9ZnVuY3Rpb24obSxwKXtyZXR1cm4gbS5ub0xpbmVzPT09cC5ub0xpbmVzJiZtLnRydW5jYXRlZFRleHQ9PT1wLnRydW5jYXRlZFRleHR9O3JldHVybiBrfShmKDY1KS5XcmFwcGVyKTtjLk5PX1dSQVBfSVRFUkFUSU9OUz0KNTtkLlNpbmdsZUxpbmVXcmFwcGVyPWN9LGZ1bmN0aW9uKGMsZCxmKXt2YXIgZz1mKDIxKSxsPXt0ZXh0Um90YXRpb246MCx0ZXh0U2hlYXI6MCx4QWxpZ246ImxlZnQiLHlBbGlnbjoidG9wIn07Yz1mdW5jdGlvbigpe2Z1bmN0aW9uIGsobSxwLHEpe3RoaXMuX21lYXN1cmVyPW07dGhpcy5fcGVuRmFjdG9yeT1wO3RoaXMuX3dyYXBwZXI9cX1rLnByb3RvdHlwZS5tZWFzdXJlcj1mdW5jdGlvbihtKXt0aGlzLl9tZWFzdXJlcj1tO3JldHVybiB0aGlzfTtrLnByb3RvdHlwZS53cmFwcGVyPWZ1bmN0aW9uKG0pe3RoaXMuX3dyYXBwZXI9bTtyZXR1cm4gdGhpc307ay5wcm90b3R5cGUucGVuRmFjdG9yeT1mdW5jdGlvbihtKXt0aGlzLl9wZW5GYWN0b3J5PW07cmV0dXJuIHRoaXN9O2sucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKG0scCxxLHIsdCl7dm9pZCAwPT09ciYmKHI9e30pO3I9Zy5NZXRob2RzLmRlZmF1bHRzKHt9LGwscik7aWYoLTE9PT1rLlN1cHBvcnRlZFJvdGF0aW9uLmluZGV4T2Yoci50ZXh0Um90YXRpb24pKXRocm93IEVycm9yKCJ1bnN1cHBvcnRlZCByb3RhdGlvbiAtICIrCnIudGV4dFJvdGF0aW9uKyIuIFN1cHBvcnRlZCByb3RhdGlvbnMgYXJlICIray5TdXBwb3J0ZWRSb3RhdGlvbi5qb2luKCIsICIpKTtpZihudWxsIT1yLnRleHRTaGVhciYmLTgwPnIudGV4dFNoZWFyfHw4MDxyLnRleHRTaGVhcil0aHJvdyBFcnJvcigidW5zdXBwb3J0ZWQgc2hlYXIgYW5nbGUgLSAiK3IudGV4dFNoZWFyKyIuIE11c3QgYmUgYmV0d2VlbiAtODAgYW5kIDgwIik7dmFyIHY9NDU8TWF0aC5hYnMoTWF0aC5hYnMoci50ZXh0Um90YXRpb24pLTkwKSxBPXY/cDpxLHk9dj9xOnAseD1yLnRleHRTaGVhcixDPXgqTWF0aC5QSS8xODA7dj10aGlzLl9tZWFzdXJlci5tZWFzdXJlKCkuaGVpZ2h0O3ZhciBGPXYqTWF0aC50YW4oQyk7QT1BL01hdGguY29zKEMpLU1hdGguYWJzKEYpO3ZhciBEPXkqTWF0aC5jb3MoQyk7eT1nLlN0cmluZ01ldGhvZHMuY29tYmluZVdoaXRlc3BhY2UobSk7eT0odGhpcy5fd3JhcHBlcj90aGlzLl93cmFwcGVyLndyYXAoeSx0aGlzLl9tZWFzdXJlciwKQSxEKS53cmFwcGVkVGV4dDp5KS5zcGxpdCgiXG4iKTtDPWsuWE9mZnNldEZhY3RvcltyLnhBbGlnbl0qQSpNYXRoLnNpbihDKS1rLllPZmZzZXRGYWN0b3Jbci55QWxpZ25dKihELXkubGVuZ3RoKnYpO3g9ci50ZXh0Um90YXRpb24reDtzd2l0Y2goci50ZXh0Um90YXRpb24pe2Nhc2UgOTA6cD1bcCtDLDBdO2JyZWFrO2Nhc2UgLTkwOnA9Wy1DLHFdO2JyZWFrO2Nhc2UgMTgwOnA9W3AscStDXTticmVhaztkZWZhdWx0OnA9WzAsLUNdfW09dGhpcy5fcGVuRmFjdG9yeS5jcmVhdGVQZW4obSx7dHJhbnNsYXRlOnAscm90YXRlOnh9LHQpO3RoaXMud3JpdGVMaW5lcyh5LG0sQSx2LEYsci54QWxpZ24pO251bGwhPW0uZGVzdHJveSYmbS5kZXN0cm95KCl9O2sucHJvdG90eXBlLndyaXRlTGluZXM9ZnVuY3Rpb24obSxwLHEscix0LHYpe20uZm9yRWFjaChmdW5jdGlvbihBLHkpe3Aud3JpdGUoQSxrLkFuY2hvckNvbnZlcnRlclt2XSwoMDx0Pyh5KzEpKnQ6eSp0KStxKmsuWE9mZnNldEZhY3Rvclt2XSwKKHkrMSkqcil9KX07cmV0dXJuIGt9KCk7Yy5TdXBwb3J0ZWRSb3RhdGlvbj1bLTkwLDAsMTgwLDkwXTtjLkFuY2hvckNvbnZlcnRlcj17Y2VudGVyOiJtaWRkbGUiLGxlZnQ6InN0YXJ0IixyaWdodDoiZW5kIn07Yy5YT2Zmc2V0RmFjdG9yPXtjZW50ZXI6LjUsbGVmdDowLHJpZ2h0OjF9O2MuWU9mZnNldEZhY3Rvcj17Ym90dG9tOjEsY2VudGVyOi41LHRvcDowfTtkLldyaXRlcj1jfSxmdW5jdGlvbihjLGQsZil7ZnVuY3Rpb24gZyhsKXtmb3IodmFyIGsgaW4gbClkLmhhc093blByb3BlcnR5KGspfHwoZFtrXT1sW2tdKX1mKDY5KTtjPWYoNyk7ZC5BbmltYXRvcnM9YztjPWYoNjcpO2QuQXhlcz1jO2M9ZigzNyk7ZC5Db21wb25lbnRzPWM7Yz1mKDIzKTtkLkNvbmZpZ3M9YztjPWYoOCk7ZC5Gb3JtYXR0ZXJzPWM7Yz1mKDMwKTtkLlJlbmRlckNvbnRyb2xsZXI9YztjPWYoMzkpO2QuUmVuZGVyUG9saWNpZXM9YztjPWYoMzEpO2QuU3ltYm9sRmFjdG9yaWVzPWM7Yz1mKDEzKTtkLkRpc3BhdGNoZXJzPQpjO2M9ZigxNCk7ZC5EcmF3ZXJzPWM7Yz1mKDI1KTtkLkludGVyYWN0aW9ucz1jO2M9ZigxOSk7ZC5QbG90cz1jO2M9ZigzKTtkLlNjYWxlcz1jO2M9ZigwKTtkLlV0aWxzPWM7ZyhmKDIyKSk7Yz1mKDI4KTtkLlRpbWVJbnRlcnZhbD1jLlRpbWVJbnRlcnZhbDtnKGYoNCkpO2coZigyOSkpO2coZigzOCkpO2M9Zig2OCk7ZC52ZXJzaW9uPWMudmVyc2lvbjtnKGYoMjQpKTtnKGYoNikpO2coZigxNSkpO2coZig0MCkpO2coZigxNikpO2coZigyKSk7ZyhmKDExKSk7ZyhmKDE3KSl9XSl9KTsKPC9zY3JpcHQ+CjxzdHlsZT4KLnBsb3R0YWJsZS1jb2xvcnMtMCB7CiAgYmFja2dyb3VuZC1jb2xvcjogIzUyNzljNzsgLyogSU5ESUdPICovCn0KCi5wbG90dGFibGUtY29sb3JzLTEgewogIGJhY2tncm91bmQtY29sb3I6ICNmZDM3M2U7IC8qIENPUkFMX1JFRCAqLwp9CgoucGxvdHRhYmxlLWNvbG9ycy0yIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjNjNjMjYxOyAvKiBGRVJOICovCn0KCi5wbG90dGFibGUtY29sb3JzLTMgewogIGJhY2tncm91bmQtY29sb3I6ICNmYWQ0MTk7IC8qIEJSSUdIVF9TVU4gKi8KfQoKLnBsb3R0YWJsZS1jb2xvcnMtNCB7CiAgYmFja2dyb3VuZC1jb2xvcjogIzJjMmI2ZjsgLyogSkFDQVJUQSAqLwp9CgoucGxvdHRhYmxlLWNvbG9ycy01IHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmY3OTM5OyAvKiBCVVJOSU5HX09SQU5HRSAqLwp9CgoucGxvdHRhYmxlLWNvbG9ycy02IHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGIyZTY1OyAvKiBDRVJJU0VfUkVEICovCn0KCi5wbG90dGFibGUtY29sb3JzLTcgewogIGJhY2tncm91bmQtY29sb3I6ICM5OWNlNTA7IC8qIENPTklGRVIgKi8KfQoKLnBsb3R0YWJsZS1jb2xvcnMtOCB7CiAgYmFja2dyb3VuZC1jb2xvcjogIzk2MjU2NTsgLyogUk9ZQUxfSEVBVEggKi8KfQoKLnBsb3R0YWJsZS1jb2xvcnMtOSB7CiAgYmFja2dyb3VuZC1jb2xvcjogIzA2Y2NjYzsgLyogUk9CSU5TX0VHR19CTFVFICovCn0KCi8qKgogKiBVc2VyLXN1cHBsaWVkIHJlbmRlclRvIGVsZW1lbnQuCiAqLwoucGxvdHRhYmxlIHsKICBkaXNwbGF5OiBibG9jazsgLyogbXVzdCBiZSBibG9jayBlbGVtZW50cyBmb3Igd2lkdGgvaGVpZ2h0IGNhbGN1bGF0aW9ucyB0byB3b3JrIGluIEZpcmVmb3guICovCiAgcG9pbnRlci1ldmVudHM6IHZpc2libGVGaWxsOwogIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAvKioKICAgKiBQcmUgMy4wLCB1c2VycyBjb3VsZCBzZXQgdGhlIGRpbWVuc2lvbiBvZiB0aGUgcm9vdCBlbGVtZW50IGluIHR3byB3YXlzOiBlaXRoZXIgdXNpbmcgQ1NTCiAgICogKGlubGluZSBvciB0aHJvdWdoIGEgc3R5bGVzaGVldCksIG9yIHVzaW5nIHRoZSBTVkcgd2lkdGgvaGVpZ2h0IGF0dHJpYnV0ZXMuIEJ5IGRlZmF1bHQsIHdlCiAgICogc2V0IHRoZSBTVkcgd2lkdGgvaGVpZ2h0IGF0dHJpYnV0ZXMgdG8gMTAwJS4KICAgKgogICAqIFBvc3QgMy4wIHRoZSByb290IGVsZW1lbnQgaXMgYWx3YXlzIGEgbm9ybWFsIGRpdiBhbmQgdGhlIG9ubHkgd2F5IHRvIHNldCB0aGUgZGltZW5zaW9ucyBpcwogICAqIHRvIHVzZSBDU1MuIFRvIHJlcGxpY2F0ZSB0aGUgIjEwMCUtYnktZGVmYXVsdCIgYmVoYXZpb3IsIHdlIGFwcGx5IHdpZHRoL2hlaWdodCAxMDAlLgogICAqLwogIHdpZHRoOiAxMDAlOwogIGhlaWdodDogMTAwJTsKfQoKLyoqCiAqIFRoZSBfZWxlbWVudCB0aGF0IHJvb3RzIGVhY2ggQ29tcG9uZW50J3MgRE9NLgogKi8KLnBsb3R0YWJsZSAuY29tcG9uZW50IHsKICAvKiBBbGxvdyBjb21wb25lbnRzIHRvIGJlIHBvc2l0aW9uZWQgd2l0aCBleHBsaWNpdCBsZWZ0L3RvcC93aWR0aC9oZWlnaHQgc3R5bGVzICovCiAgcG9zaXRpb246IGFic29sdXRlOwp9CgoucGxvdHRhYmxlIC5iYWNrZ3JvdW5kLWNvbnRhaW5lciwKLnBsb3R0YWJsZSAuY29udGVudCwKLnBsb3R0YWJsZSAuZm9yZWdyb3VuZC1jb250YWluZXIgewogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICB3aWR0aDogMTAwJTsKICBoZWlnaHQ6IDEwMCU7Cn0KCi8qKgogKiBEb24ndCBhbGxvdyBzdmcgZWxlbWVudHMgYWJvdmUgdGhlIGNvbnRlbnQgdG8gc3RlYWwgZXZlbnRzCiAqLwoucGxvdHRhYmxlIC5mb3JlZ3JvdW5kLWNvbnRhaW5lciB7CiAgcG9pbnRlci1ldmVudHM6IG5vbmU7Cn0KCi5wbG90dGFibGUgLmNvbXBvbmVudC1vdmVyZmxvdy1oaWRkZW4gewogIG92ZXJmbG93OiBoaWRkZW47Cn0KCi5wbG90dGFibGUgLmNvbXBvbmVudC1vdmVyZmxvdy12aXNpYmxlIHsKICBvdmVyZmxvdzogdmlzaWJsZTsKfQoKLnBsb3R0YWJsZSAucGxvdC1jYW52YXMtY29udGFpbmVyIHsKICB3aWR0aDogMTAwJTsKICBoZWlnaHQ6IDEwMCU7CiAgb3ZlcmZsb3c6IGhpZGRlbjsKfQoKLnBsb3R0YWJsZSAucGxvdC1jYW52YXMgewogIHdpZHRoOiAxMDAlOwogIGhlaWdodDogMTAwJTsKICAvKioKICAgKiBQbGF5IHdlbGwgd2l0aCBkZWZlcnJlZCByZW5kZXJpbmcuCiAgICovCiAgdHJhbnNmb3JtLW9yaWdpbjogMHB4IDBweCAwcHg7Cn0KCi5wbG90dGFibGUgdGV4dCB7CiAgdGV4dC1yZW5kZXJpbmc6IGdlb21ldHJpY1ByZWNpc2lvbjsKfQoKLnBsb3R0YWJsZSAubGFiZWwgdGV4dCB7CiAgZm9udC1mYW1pbHk6ICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7CiAgZmlsbDogIzMyMzEzRjsKfQoKLnBsb3R0YWJsZSAuYmFyLWxhYmVsLXRleHQtYXJlYSB0ZXh0IHsKICBmb250LWZhbWlseTogIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjsKICBmb250LXNpemU6IDEycHg7Cn0KCi5wbG90dGFibGUgLmxhYmVsLWFyZWEgdGV4dCB7CiAgZmlsbDogIzMyMzEzRjsKICBmb250LWZhbWlseTogIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjsKICBmb250LXNpemU6IDE0cHg7Cn0KCi5wbG90dGFibGUgLmxpZ2h0LWxhYmVsIHRleHQgewogIGZpbGw6IHdoaXRlOwp9CgoucGxvdHRhYmxlIC5kYXJrLWxhYmVsIHRleHQgewogIGZpbGw6ICMzMjMxM0Y7Cn0KCi5wbG90dGFibGUgLm9mZi1iYXItbGFiZWwgdGV4dCB7CiAgZmlsbDogIzMyMzEzRjsKfQoKLnBsb3R0YWJsZSAuc3RhY2tlZC1iYXItbGFiZWwgdGV4dCB7CiAgZmlsbDogIzMyMzEzRjsKICBmb250LXN0eWxlOiBub3JtYWw7Cn0KCi5wbG90dGFibGUgLnN0YWNrZWQtYmFyLXBsb3QgLm9mZi1iYXItbGFiZWwgewogIC8qIEhBQ0tIQUNLICMyNzk1OiBjb3JyZWN0IG9mZi1iYXIgbGFiZWwgbG9naWMgdG8gYmUgaW1wbGVtZW50ZWQgb24gU3RhY2tlZEJhciAqLwogIHZpc2liaWxpdHk6IGhpZGRlbiAhaW1wb3J0YW50Owp9CgoucGxvdHRhYmxlIC5heGlzLWxhYmVsIHRleHQgewogIGZvbnQtc2l6ZTogMTBweDsKICBmb250LXdlaWdodDogYm9sZDsKICBsZXR0ZXItc3BhY2luZzogMXB4OwogIGxpbmUtaGVpZ2h0OiBub3JtYWw7CiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKfQoKLnBsb3R0YWJsZSAudGl0bGUtbGFiZWwgdGV4dCB7CiAgZm9udC1zaXplOiAyMHB4OwogIGZvbnQtd2VpZ2h0OiBib2xkOwp9CgoucGxvdHRhYmxlIC5heGlzIGxpbmUuYmFzZWxpbmUgewogIHN0cm9rZTogI0NDQzsKICBzdHJva2Utd2lkdGg6IDFweDsKfQoKLnBsb3R0YWJsZSAuYXhpcyBsaW5lLnRpY2stbWFyayB7CiAgc3Ryb2tlOiAjQ0NDOwogIHN0cm9rZS13aWR0aDogMXB4Owp9CgoucGxvdHRhYmxlIC5heGlzIHRleHQgewogIGZpbGw6ICMzMjMxM0Y7CiAgZm9udC1mYW1pbHk6ICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7CiAgZm9udC1zaXplOiAxMnB4OwogIGZvbnQtd2VpZ2h0OiAyMDA7CiAgbGluZS1oZWlnaHQ6IG5vcm1hbDsKfQoKLnBsb3R0YWJsZSAuYXhpcyAuYW5ub3RhdGlvbi1jaXJjbGUgewogIGZpbGw6IHdoaXRlOwogIHN0cm9rZS13aWR0aDogMXB4OwogIHN0cm9rZTogI0NDQzsKfQoKLnBsb3R0YWJsZSAuYXhpcyAuYW5ub3RhdGlvbi1saW5lIHsKICBzdHJva2U6ICNDQ0M7CiAgc3Ryb2tlLXdpZHRoOiAxcHg7Cn0KCi5wbG90dGFibGUgLmF4aXMgLmFubm90YXRpb24tcmVjdCB7CiAgc3Ryb2tlOiAjQ0NDOwogIHN0cm9rZS13aWR0aDogMXB4OwogIGZpbGw6IHdoaXRlOwp9CgoucGxvdHRhYmxlIC5iYXItcGxvdCAuYmFzZWxpbmUgewogIHN0cm9rZTogIzk5OTsKfQoKLnBsb3R0YWJsZSAuZ3JpZGxpbmVzIGxpbmUgewogIHN0cm9rZTogIzNDM0MzQzsgLyogaGFja2hhY2s6IGdyaWRsaW5lcyBzaG91bGQgYmUgc29saWQ7IHNlZSAjODIwICovCiAgb3BhY2l0eTogMC4yNTsKICBzdHJva2Utd2lkdGg6IDFweDsKfQoKLnBsb3R0YWJsZSAuc2VsZWN0aW9uLWJveC1sYXllciAuc2VsZWN0aW9uLWFyZWEgewogIGZpbGw6IGJsYWNrOwogIGZpbGwtb3BhY2l0eTogMC4wMzsKICBzdHJva2U6ICNDQ0M7Cn0KLyogRHJhZ0JveExheWVyICovCi5wbG90dGFibGUgLmRyYWctYm94LWxheWVyLngtcmVzaXphYmxlIC5kcmFnLWVkZ2UtbHIgewogIGN1cnNvcjogZXctcmVzaXplOwp9Ci5wbG90dGFibGUgLmRyYWctYm94LWxheWVyLnktcmVzaXphYmxlIC5kcmFnLWVkZ2UtdGIgewogIGN1cnNvcjogbnMtcmVzaXplOwp9CgoucGxvdHRhYmxlIC5kcmFnLWJveC1sYXllci54LXJlc2l6YWJsZS55LXJlc2l6YWJsZSAuZHJhZy1jb3JuZXItdGwgewogIGN1cnNvcjogbndzZS1yZXNpemU7Cn0KLnBsb3R0YWJsZSAuZHJhZy1ib3gtbGF5ZXIueC1yZXNpemFibGUueS1yZXNpemFibGUgLmRyYWctY29ybmVyLXRyIHsKICBjdXJzb3I6IG5lc3ctcmVzaXplOwp9Ci5wbG90dGFibGUgLmRyYWctYm94LWxheWVyLngtcmVzaXphYmxlLnktcmVzaXphYmxlIC5kcmFnLWNvcm5lci1ibCB7CiAgY3Vyc29yOiBuZXN3LXJlc2l6ZTsKfQoucGxvdHRhYmxlIC5kcmFnLWJveC1sYXllci54LXJlc2l6YWJsZS55LXJlc2l6YWJsZSAuZHJhZy1jb3JuZXItYnIgewogIGN1cnNvcjogbndzZS1yZXNpemU7Cn0KCi5wbG90dGFibGUgLmRyYWctYm94LWxheWVyLm1vdmFibGUgLnNlbGVjdGlvbi1hcmVhIHsKICBjdXJzb3I6IG1vdmU7IC8qIElFIGZhbGxiYWNrICovCiAgY3Vyc29yOiAtbW96LWdyYWI7CiAgY3Vyc29yOiAtd2Via2l0LWdyYWI7CiAgY3Vyc29yOiBncmFiOwp9CgoucGxvdHRhYmxlIC5kcmFnLWJveC1sYXllci5tb3ZhYmxlIC5zZWxlY3Rpb24tYXJlYTphY3RpdmUgewogIGN1cnNvcjogLW1vei1ncmFiYmluZzsKICBjdXJzb3I6IC13ZWJraXQtZ3JhYmJpbmc7CiAgY3Vyc29yOiBncmFiYmluZzsKfQovKiAvRHJhZ0JveExheWVyICovCgoucGxvdHRhYmxlIC5ndWlkZS1saW5lLWxheWVyIGxpbmUuZ3VpZGUtbGluZSB7CiAgc3Ryb2tlOiAjQ0NDOwogIHN0cm9rZS13aWR0aDogMXB4Owp9CgoucGxvdHRhYmxlIC5kcmFnLWxpbmUtbGF5ZXIuZW5hYmxlZC52ZXJ0aWNhbCBsaW5lLmRyYWctZWRnZSB7CiAgY3Vyc29yOiBldy1yZXNpemU7Cn0KCi5wbG90dGFibGUgLmRyYWctbGluZS1sYXllci5lbmFibGVkLmhvcml6b250YWwgbGluZS5kcmFnLWVkZ2UgewogIGN1cnNvcjogbnMtcmVzaXplOwp9CgoucGxvdHRhYmxlIC5sZWdlbmQgdGV4dCB7CiAgZmlsbDogIzMyMzEzRjsKICBmb250LWZhbWlseTogIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjsKICBmb250LXNpemU6IDEycHg7CiAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgbGluZS1oZWlnaHQ6IG5vcm1hbDsKfQoKLnBsb3R0YWJsZSAuaW50ZXJwb2xhdGVkLWNvbG9yLWxlZ2VuZCByZWN0LnN3YXRjaC1ib3VuZGluZy1ib3ggewogIGZpbGw6IG5vbmU7CiAgc3Ryb2tlOiAjQ0NDOwogIHN0cm9rZS13aWR0aDogMXB4OwogIHBvaW50ZXItZXZlbnRzOiBub25lOwp9CgoucGxvdHRhYmxlIC53YXRlcmZhbGwtcGxvdCBsaW5lLmNvbm5lY3RvciB7CiAgc3Ryb2tlOiAjQ0NDOwogIHN0cm9rZS13aWR0aDogMXB4Owp9CgoucGxvdHRhYmxlIC5waWUtcGxvdCAuYXJjLm91dGxpbmUgewogIHN0cm9rZS1saW5lam9pbjogcm91bmQ7Cn0KPC9zdHlsZT4KCjxkb20tbW9kdWxlIGlkPSJwbG90dGFibGUtc3R5bGUiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KLnBsb3R0YWJsZS1jb2xvcnMtMCB7CiAgYmFja2dyb3VuZC1jb2xvcjogIzUyNzljNzsgLyogSU5ESUdPICovCn0KCi5wbG90dGFibGUtY29sb3JzLTEgewogIGJhY2tncm91bmQtY29sb3I6ICNmZDM3M2U7IC8qIENPUkFMX1JFRCAqLwp9CgoucGxvdHRhYmxlLWNvbG9ycy0yIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjNjNjMjYxOyAvKiBGRVJOICovCn0KCi5wbG90dGFibGUtY29sb3JzLTMgewogIGJhY2tncm91bmQtY29sb3I6ICNmYWQ0MTk7IC8qIEJSSUdIVF9TVU4gKi8KfQoKLnBsb3R0YWJsZS1jb2xvcnMtNCB7CiAgYmFja2dyb3VuZC1jb2xvcjogIzJjMmI2ZjsgLyogSkFDQVJUQSAqLwp9CgoucGxvdHRhYmxlLWNvbG9ycy01IHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmY3OTM5OyAvKiBCVVJOSU5HX09SQU5HRSAqLwp9CgoucGxvdHRhYmxlLWNvbG9ycy02IHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGIyZTY1OyAvKiBDRVJJU0VfUkVEICovCn0KCi5wbG90dGFibGUtY29sb3JzLTcgewogIGJhY2tncm91bmQtY29sb3I6ICM5OWNlNTA7IC8qIENPTklGRVIgKi8KfQoKLnBsb3R0YWJsZS1jb2xvcnMtOCB7CiAgYmFja2dyb3VuZC1jb2xvcjogIzk2MjU2NTsgLyogUk9ZQUxfSEVBVEggKi8KfQoKLnBsb3R0YWJsZS1jb2xvcnMtOSB7CiAgYmFja2dyb3VuZC1jb2xvcjogIzA2Y2NjYzsgLyogUk9CSU5TX0VHR19CTFVFICovCn0KCi8qKgogKiBVc2VyLXN1cHBsaWVkIHJlbmRlclRvIGVsZW1lbnQuCiAqLwoucGxvdHRhYmxlIHsKICBkaXNwbGF5OiBibG9jazsgLyogbXVzdCBiZSBibG9jayBlbGVtZW50cyBmb3Igd2lkdGgvaGVpZ2h0IGNhbGN1bGF0aW9ucyB0byB3b3JrIGluIEZpcmVmb3guICovCiAgcG9pbnRlci1ldmVudHM6IHZpc2libGVGaWxsOwogIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAvKioKICAgKiBQcmUgMy4wLCB1c2VycyBjb3VsZCBzZXQgdGhlIGRpbWVuc2lvbiBvZiB0aGUgcm9vdCBlbGVtZW50IGluIHR3byB3YXlzOiBlaXRoZXIgdXNpbmcgQ1NTCiAgICogKGlubGluZSBvciB0aHJvdWdoIGEgc3R5bGVzaGVldCksIG9yIHVzaW5nIHRoZSBTVkcgd2lkdGgvaGVpZ2h0IGF0dHJpYnV0ZXMuIEJ5IGRlZmF1bHQsIHdlCiAgICogc2V0IHRoZSBTVkcgd2lkdGgvaGVpZ2h0IGF0dHJpYnV0ZXMgdG8gMTAwJS4KICAgKgogICAqIFBvc3QgMy4wIHRoZSByb290IGVsZW1lbnQgaXMgYWx3YXlzIGEgbm9ybWFsIGRpdiBhbmQgdGhlIG9ubHkgd2F5IHRvIHNldCB0aGUgZGltZW5zaW9ucyBpcwogICAqIHRvIHVzZSBDU1MuIFRvIHJlcGxpY2F0ZSB0aGUgIjEwMCUtYnktZGVmYXVsdCIgYmVoYXZpb3IsIHdlIGFwcGx5IHdpZHRoL2hlaWdodCAxMDAlLgogICAqLwogIHdpZHRoOiAxMDAlOwogIGhlaWdodDogMTAwJTsKfQoKLyoqCiAqIFRoZSBfZWxlbWVudCB0aGF0IHJvb3RzIGVhY2ggQ29tcG9uZW50J3MgRE9NLgogKi8KLnBsb3R0YWJsZSAuY29tcG9uZW50IHsKICAvKiBBbGxvdyBjb21wb25lbnRzIHRvIGJlIHBvc2l0aW9uZWQgd2l0aCBleHBsaWNpdCBsZWZ0L3RvcC93aWR0aC9oZWlnaHQgc3R5bGVzICovCiAgcG9zaXRpb246IGFic29sdXRlOwp9CgoucGxvdHRhYmxlIC5iYWNrZ3JvdW5kLWNvbnRhaW5lciwKLnBsb3R0YWJsZSAuY29udGVudCwKLnBsb3R0YWJsZSAuZm9yZWdyb3VuZC1jb250YWluZXIgewogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICB3aWR0aDogMTAwJTsKICBoZWlnaHQ6IDEwMCU7Cn0KCi8qKgogKiBEb24ndCBhbGxvdyBzdmcgZWxlbWVudHMgYWJvdmUgdGhlIGNvbnRlbnQgdG8gc3RlYWwgZXZlbnRzCiAqLwoucGxvdHRhYmxlIC5mb3JlZ3JvdW5kLWNvbnRhaW5lciB7CiAgcG9pbnRlci1ldmVudHM6IG5vbmU7Cn0KCi5wbG90dGFibGUgLmNvbXBvbmVudC1vdmVyZmxvdy1oaWRkZW4gewogIG92ZXJmbG93OiBoaWRkZW47Cn0KCi5wbG90dGFibGUgLmNvbXBvbmVudC1vdmVyZmxvdy12aXNpYmxlIHsKICBvdmVyZmxvdzogdmlzaWJsZTsKfQoKLnBsb3R0YWJsZSAucGxvdC1jYW52YXMtY29udGFpbmVyIHsKICB3aWR0aDogMTAwJTsKICBoZWlnaHQ6IDEwMCU7CiAgb3ZlcmZsb3c6IGhpZGRlbjsKfQoKLnBsb3R0YWJsZSAucGxvdC1jYW52YXMgewogIHdpZHRoOiAxMDAlOwogIGhlaWdodDogMTAwJTsKICAvKioKICAgKiBQbGF5IHdlbGwgd2l0aCBkZWZlcnJlZCByZW5kZXJpbmcuCiAgICovCiAgdHJhbnNmb3JtLW9yaWdpbjogMHB4IDBweCAwcHg7Cn0KCi5wbG90dGFibGUgdGV4dCB7CiAgdGV4dC1yZW5kZXJpbmc6IGdlb21ldHJpY1ByZWNpc2lvbjsKfQoKLnBsb3R0YWJsZSAubGFiZWwgdGV4dCB7CiAgZm9udC1mYW1pbHk6ICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7CiAgZmlsbDogIzMyMzEzRjsKfQoKLnBsb3R0YWJsZSAuYmFyLWxhYmVsLXRleHQtYXJlYSB0ZXh0IHsKICBmb250LWZhbWlseTogIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjsKICBmb250LXNpemU6IDEycHg7Cn0KCi5wbG90dGFibGUgLmxhYmVsLWFyZWEgdGV4dCB7CiAgZmlsbDogIzMyMzEzRjsKICBmb250LWZhbWlseTogIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjsKICBmb250LXNpemU6IDE0cHg7Cn0KCi5wbG90dGFibGUgLmxpZ2h0LWxhYmVsIHRleHQgewogIGZpbGw6IHdoaXRlOwp9CgoucGxvdHRhYmxlIC5kYXJrLWxhYmVsIHRleHQgewogIGZpbGw6ICMzMjMxM0Y7Cn0KCi5wbG90dGFibGUgLm9mZi1iYXItbGFiZWwgdGV4dCB7CiAgZmlsbDogIzMyMzEzRjsKfQoKLnBsb3R0YWJsZSAuc3RhY2tlZC1iYXItbGFiZWwgdGV4dCB7CiAgZmlsbDogIzMyMzEzRjsKICBmb250LXN0eWxlOiBub3JtYWw7Cn0KCi5wbG90dGFibGUgLnN0YWNrZWQtYmFyLXBsb3QgLm9mZi1iYXItbGFiZWwgewogIC8qIEhBQ0tIQUNLICMyNzk1OiBjb3JyZWN0IG9mZi1iYXIgbGFiZWwgbG9naWMgdG8gYmUgaW1wbGVtZW50ZWQgb24gU3RhY2tlZEJhciAqLwogIHZpc2liaWxpdHk6IGhpZGRlbiAhaW1wb3J0YW50Owp9CgoucGxvdHRhYmxlIC5heGlzLWxhYmVsIHRleHQgewogIGZvbnQtc2l6ZTogMTBweDsKICBmb250LXdlaWdodDogYm9sZDsKICBsZXR0ZXItc3BhY2luZzogMXB4OwogIGxpbmUtaGVpZ2h0OiBub3JtYWw7CiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKfQoKLnBsb3R0YWJsZSAudGl0bGUtbGFiZWwgdGV4dCB7CiAgZm9udC1zaXplOiAyMHB4OwogIGZvbnQtd2VpZ2h0OiBib2xkOwp9CgoucGxvdHRhYmxlIC5heGlzIGxpbmUuYmFzZWxpbmUgewogIHN0cm9rZTogI0NDQzsKICBzdHJva2Utd2lkdGg6IDFweDsKfQoKLnBsb3R0YWJsZSAuYXhpcyBsaW5lLnRpY2stbWFyayB7CiAgc3Ryb2tlOiAjQ0NDOwogIHN0cm9rZS13aWR0aDogMXB4Owp9CgoucGxvdHRhYmxlIC5heGlzIHRleHQgewogIGZpbGw6ICMzMjMxM0Y7CiAgZm9udC1mYW1pbHk6ICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7CiAgZm9udC1zaXplOiAxMnB4OwogIGZvbnQtd2VpZ2h0OiAyMDA7CiAgbGluZS1oZWlnaHQ6IG5vcm1hbDsKfQoKLnBsb3R0YWJsZSAuYXhpcyAuYW5ub3RhdGlvbi1jaXJjbGUgewogIGZpbGw6IHdoaXRlOwogIHN0cm9rZS13aWR0aDogMXB4OwogIHN0cm9rZTogI0NDQzsKfQoKLnBsb3R0YWJsZSAuYXhpcyAuYW5ub3RhdGlvbi1saW5lIHsKICBzdHJva2U6ICNDQ0M7CiAgc3Ryb2tlLXdpZHRoOiAxcHg7Cn0KCi5wbG90dGFibGUgLmF4aXMgLmFubm90YXRpb24tcmVjdCB7CiAgc3Ryb2tlOiAjQ0NDOwogIHN0cm9rZS13aWR0aDogMXB4OwogIGZpbGw6IHdoaXRlOwp9CgoucGxvdHRhYmxlIC5iYXItcGxvdCAuYmFzZWxpbmUgewogIHN0cm9rZTogIzk5OTsKfQoKLnBsb3R0YWJsZSAuZ3JpZGxpbmVzIGxpbmUgewogIHN0cm9rZTogIzNDM0MzQzsgLyogaGFja2hhY2s6IGdyaWRsaW5lcyBzaG91bGQgYmUgc29saWQ7IHNlZSAjODIwICovCiAgb3BhY2l0eTogMC4yNTsKICBzdHJva2Utd2lkdGg6IDFweDsKfQoKLnBsb3R0YWJsZSAuc2VsZWN0aW9uLWJveC1sYXllciAuc2VsZWN0aW9uLWFyZWEgewogIGZpbGw6IGJsYWNrOwogIGZpbGwtb3BhY2l0eTogMC4wMzsKICBzdHJva2U6ICNDQ0M7Cn0KLyogRHJhZ0JveExheWVyICovCi5wbG90dGFibGUgLmRyYWctYm94LWxheWVyLngtcmVzaXphYmxlIC5kcmFnLWVkZ2UtbHIgewogIGN1cnNvcjogZXctcmVzaXplOwp9Ci5wbG90dGFibGUgLmRyYWctYm94LWxheWVyLnktcmVzaXphYmxlIC5kcmFnLWVkZ2UtdGIgewogIGN1cnNvcjogbnMtcmVzaXplOwp9CgoucGxvdHRhYmxlIC5kcmFnLWJveC1sYXllci54LXJlc2l6YWJsZS55LXJlc2l6YWJsZSAuZHJhZy1jb3JuZXItdGwgewogIGN1cnNvcjogbndzZS1yZXNpemU7Cn0KLnBsb3R0YWJsZSAuZHJhZy1ib3gtbGF5ZXIueC1yZXNpemFibGUueS1yZXNpemFibGUgLmRyYWctY29ybmVyLXRyIHsKICBjdXJzb3I6IG5lc3ctcmVzaXplOwp9Ci5wbG90dGFibGUgLmRyYWctYm94LWxheWVyLngtcmVzaXphYmxlLnktcmVzaXphYmxlIC5kcmFnLWNvcm5lci1ibCB7CiAgY3Vyc29yOiBuZXN3LXJlc2l6ZTsKfQoucGxvdHRhYmxlIC5kcmFnLWJveC1sYXllci54LXJlc2l6YWJsZS55LXJlc2l6YWJsZSAuZHJhZy1jb3JuZXItYnIgewogIGN1cnNvcjogbndzZS1yZXNpemU7Cn0KCi5wbG90dGFibGUgLmRyYWctYm94LWxheWVyLm1vdmFibGUgLnNlbGVjdGlvbi1hcmVhIHsKICBjdXJzb3I6IG1vdmU7IC8qIElFIGZhbGxiYWNrICovCiAgY3Vyc29yOiAtbW96LWdyYWI7CiAgY3Vyc29yOiAtd2Via2l0LWdyYWI7CiAgY3Vyc29yOiBncmFiOwp9CgoucGxvdHRhYmxlIC5kcmFnLWJveC1sYXllci5tb3ZhYmxlIC5zZWxlY3Rpb24tYXJlYTphY3RpdmUgewogIGN1cnNvcjogLW1vei1ncmFiYmluZzsKICBjdXJzb3I6IC13ZWJraXQtZ3JhYmJpbmc7CiAgY3Vyc29yOiBncmFiYmluZzsKfQovKiAvRHJhZ0JveExheWVyICovCgoucGxvdHRhYmxlIC5ndWlkZS1saW5lLWxheWVyIGxpbmUuZ3VpZGUtbGluZSB7CiAgc3Ryb2tlOiAjQ0NDOwogIHN0cm9rZS13aWR0aDogMXB4Owp9CgoucGxvdHRhYmxlIC5kcmFnLWxpbmUtbGF5ZXIuZW5hYmxlZC52ZXJ0aWNhbCBsaW5lLmRyYWctZWRnZSB7CiAgY3Vyc29yOiBldy1yZXNpemU7Cn0KCi5wbG90dGFibGUgLmRyYWctbGluZS1sYXllci5lbmFibGVkLmhvcml6b250YWwgbGluZS5kcmFnLWVkZ2UgewogIGN1cnNvcjogbnMtcmVzaXplOwp9CgoucGxvdHRhYmxlIC5sZWdlbmQgdGV4dCB7CiAgZmlsbDogIzMyMzEzRjsKICBmb250LWZhbWlseTogIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjsKICBmb250LXNpemU6IDEycHg7CiAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgbGluZS1oZWlnaHQ6IG5vcm1hbDsKfQoKLnBsb3R0YWJsZSAuaW50ZXJwb2xhdGVkLWNvbG9yLWxlZ2VuZCByZWN0LnN3YXRjaC1ib3VuZGluZy1ib3ggewogIGZpbGw6IG5vbmU7CiAgc3Ryb2tlOiAjQ0NDOwogIHN0cm9rZS13aWR0aDogMXB4OwogIHBvaW50ZXItZXZlbnRzOiBub25lOwp9CgoucGxvdHRhYmxlIC53YXRlcmZhbGwtcGxvdCBsaW5lLmNvbm5lY3RvciB7CiAgc3Ryb2tlOiAjQ0NDOwogIHN0cm9rZS13aWR0aDogMXB4Owp9CgoucGxvdHRhYmxlIC5waWUtcGxvdCAuYXJjLm91dGxpbmUgewogIHN0cm9rZS1saW5lam9pbjogcm91bmQ7Cn0KPC9zdHlsZT4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+CgoKCgoKCjxzY3JpcHQ+Ly9+fldFQlBBVEh+fi92ei1jaGFydC1oZWxwZXJzL3Bsb3R0YWJsZS1pbnRlcmFjdGlvbnMuanMKdmFyIGJtOwooZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYyhwKXtjb25zdCBxPVtdO2Zvcig7cCYmcCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50OylpZihxLnB1c2gocCkscC5hc3NpZ25lZFNsb3QpcD1wLmFzc2lnbmVkU2xvdDtlbHNlIGlmKHAucGFyZW50RWxlbWVudClwPXAucGFyZW50RWxlbWVudDtlbHNle2NvbnN0IHI9cC5wYXJlbnROb2RlO3A9ciBpbnN0YW5jZW9mIERvY3VtZW50RnJhZ21lbnQ/ci5ob3N0OnIhPT1wP3I6bnVsbH1yZXR1cm4gcX1mdW5jdGlvbiBkKHApe3ZhciBxPWMocCk7cD1mO2xldCByPW51bGw7Zm9yKGNvbnN0IHYgb2YgcSl7cT1QbG90dGFibGUuVXRpbHMuRE9NLmdldEVsZW1lbnRUcmFuc2Zvcm0odik7aWYobnVsbCE9cSl7dmFyIHQ9di5jbGllbnRXaWR0aC8yO2NvbnN0IEE9di5jbGllbnRIZWlnaHQvMjtwPVBsb3R0YWJsZS5VdGlscy5NYXRoLm11bHRpcGx5VHJhbnNsYXRlKHAsW3QsQV0pO3A9UGxvdHRhYmxlLlV0aWxzLk1hdGgubXVsdGlwbHlNYXRyaXgocCxQbG90dGFibGUuVXRpbHMuTWF0aC5pbnZlcnRNYXRyaXgocSkpOwpwPVBsb3R0YWJsZS5VdGlscy5NYXRoLm11bHRpcGx5VHJhbnNsYXRlKHAsWy10LC1BXSl9cT12LnNjcm9sbExlZnQ7dD12LnNjcm9sbFRvcDtpZihudWxsPT09cnx8dj09PXIpcS09di5vZmZzZXRMZWZ0K3YuY2xpZW50TGVmdCx0LT12Lm9mZnNldFRvcCt2LmNsaWVudFRvcCxyPXYub2Zmc2V0UGFyZW50O3A9UGxvdHRhYmxlLlV0aWxzLk1hdGgubXVsdGlwbHlUcmFuc2xhdGUocCxbcSx0XSl9cmV0dXJuIHB9Y29uc3QgZj1bMSwwLDAsMSwwLDBdO2NsYXNzIGcgZXh0ZW5kcyBQbG90dGFibGUuVXRpbHMuVHJhbnNsYXRvcntjb21wdXRlUG9zaXRpb24ocCxxKXtwPXt4OnAseTpxfTtxPWQodGhpcy5fcm9vdEVsZW1lbnQpO3JldHVybiBudWxsPT1xP3A6UGxvdHRhYmxlLlV0aWxzLk1hdGguYXBwbHlUcmFuc2Zvcm0ocSxwKX19Y2xhc3MgbCBleHRlbmRzIFBsb3R0YWJsZS5EaXNwYXRjaGVycy5Nb3VzZXtjb25zdHJ1Y3RvcihwKXtzdXBlcihwKTt0aGlzLl9ldmVudFRhcmdldD1wLnJvb3QoKS5yb290RWxlbWVudCgpLm5vZGUoKTsKdGhpcy5fdHJhbnNsYXRvcj1uZXcgZyhwLnJvb3QoKS5yb290RWxlbWVudCgpLm5vZGUoKSl9c3RhdGljIGdldERpc3BhdGNoZXIocCl7Y29uc3QgcT1wLnJvb3QoKS5yb290RWxlbWVudCgpO2xldCByPXFbbC5fRElTUEFUQ0hFUl9LRVldO3J8fChyPW5ldyBsKHApLHFbbC5fRElTUEFUQ0hFUl9LRVldPXIpO3JldHVybiByfX1jbGFzcyBrIGV4dGVuZHMgUGxvdHRhYmxlLkRpc3BhdGNoZXJzLlRvdWNoe2NvbnN0cnVjdG9yKHApe3N1cGVyKHApO3RoaXMuX2V2ZW50VGFyZ2V0PXAucm9vdCgpLnJvb3RFbGVtZW50KCkubm9kZSgpO3RoaXMuX3RyYW5zbGF0b3I9bmV3IGcocC5yb290KCkucm9vdEVsZW1lbnQoKS5ub2RlKCkpfXN0YXRpYyBnZXREaXNwYXRjaGVyKHApe2NvbnN0IHE9cC5yb290KCkucm9vdEVsZW1lbnQoKTtsZXQgcj1xW2suX0RJU1BBVENIRVJfS0VZXTtyfHwocj1uZXcgayhwKSxxW2suX0RJU1BBVENIRVJfS0VZXT1yKTtyZXR1cm4gcn19Y2xhc3MgbSBleHRlbmRzIFBsb3R0YWJsZS5JbnRlcmFjdGlvbnMuUG9pbnRlcntfYW5jaG9yKCl7dGhpcy5faXNBbmNob3JlZD0KITA7dGhpcy5fbW91c2VEaXNwYXRjaGVyPWwuZ2V0RGlzcGF0Y2hlcih0aGlzLl9jb21wb25lbnRBdHRhY2hlZFRvKTt0aGlzLl9tb3VzZURpc3BhdGNoZXIub25Nb3VzZU1vdmUodGhpcy5fbW91c2VNb3ZlQ2FsbGJhY2spO3RoaXMuX3RvdWNoRGlzcGF0Y2hlcj1rLmdldERpc3BhdGNoZXIodGhpcy5fY29tcG9uZW50QXR0YWNoZWRUbyk7dGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9uVG91Y2hTdGFydCh0aGlzLl90b3VjaFN0YXJ0Q2FsbGJhY2spfX1hLlBvaW50ZXJJbnRlcmFjdGlvbj1tfSkoYm18fChibT17fSkpOwo8L3NjcmlwdD4KPHNjcmlwdD4vL35+V0VCUEFUSH5+L3Z6LWNoYXJ0LWhlbHBlcnMvdnotY2hhcnQtaGVscGVycy5qcwooZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYygpe2xldCBsPW5ldyBQbG90dGFibGUuU2NhbGVzLkxpbmVhcjtsLnRpY2tHZW5lcmF0b3IoKTtsZXQgaz1uZXcgUGxvdHRhYmxlLkF4ZXMuTnVtZXJpYyhsLCJib3R0b20iKTtrLmZvcm1hdHRlcihhLnN0ZXBGb3JtYXR0ZXIpO3JldHVybntzY2FsZTpsLGF4aXM6ayxhY2Nlc3NvcjptPT5tLnN0ZXB9fWZ1bmN0aW9uIGQoKXtsZXQgbD1uZXcgUGxvdHRhYmxlLlNjYWxlcy5UaW1lO3JldHVybntzY2FsZTpsLGF4aXM6bmV3IFBsb3R0YWJsZS5BeGVzLlRpbWUobCwiYm90dG9tIiksYWNjZXNzb3I6az0+ay53YWxsX3RpbWV9fWZ1bmN0aW9uIGYoKXtsZXQgbD1uZXcgUGxvdHRhYmxlLlNjYWxlcy5MaW5lYXI7cmV0dXJue3NjYWxlOmwsYXhpczpuZXcgUGxvdHRhYmxlLkF4ZXMuTnVtZXJpYyhsLCJib3R0b20iKSxhY2Nlc3NvcjphLnJlbGF0aXZlQWNjZXNzb3J9fWEuU1lNQk9MU19MSVNUPVt7Y2hhcmFjdGVyOiJcdTI1ZmMiLG1ldGhvZDpQbG90dGFibGUuU3ltYm9sRmFjdG9yaWVzLnNxdWFyZX0sCntjaGFyYWN0ZXI6Ilx1MjVjNiIsbWV0aG9kOlBsb3R0YWJsZS5TeW1ib2xGYWN0b3JpZXMuZGlhbW9uZH0se2NoYXJhY3RlcjoiXHUyNWIyIixtZXRob2Q6UGxvdHRhYmxlLlN5bWJvbEZhY3Rvcmllcy50cmlhbmdsZX0se2NoYXJhY3RlcjoiXHUyNjA1IixtZXRob2Q6UGxvdHRhYmxlLlN5bWJvbEZhY3Rvcmllcy5zdGFyfSx7Y2hhcmFjdGVyOiJcdTI3MWEiLG1ldGhvZDpQbG90dGFibGUuU3ltYm9sRmFjdG9yaWVzLmNyb3NzfV07bGV0IGc7KGZ1bmN0aW9uKGwpe2wuU1RFUD0ic3RlcCI7bC5SRUxBVElWRT0icmVsYXRpdmUiO2wuV0FMTF9USU1FPSJ3YWxsX3RpbWUifSkoZz1hLlhUeXBlfHwoYS5YVHlwZT17fSkpO2EuWV9UT09MVElQX0ZPUk1BVFRFUl9QUkVDSVNJT049NDthLlNURVBfRk9STUFUVEVSX1BSRUNJU0lPTj00O2EuWV9BWElTX0ZPUk1BVFRFUl9QUkVDSVNJT049MzthLlRPT0xUSVBfWV9QSVhFTF9PRkZTRVQ9MjA7YS5UT09MVElQX0NJUkNMRV9TSVpFPTQ7YS5OQU5fU1lNQk9MX1NJWkU9CjY7YS5tdWx0aXNjYWxlRm9ybWF0dGVyPWZ1bmN0aW9uKGwpe3JldHVybiBrPT57bGV0IG09TWF0aC5hYnMoayk7MUUtMTU+bSYmKG09MCk7cmV0dXJuKDFFNDw9bT9kMy5mb3JtYXQoIi4iK2wrIn5lIik6MDxtJiYuMDE+bT9kMy5mb3JtYXQoIi4iK2wrIn5lIik6ZDMuZm9ybWF0KCIuIitsKyJ+ZyIpKShrKX19O2EuY29tcHV0ZURvbWFpbj1mdW5jdGlvbihsLGspe2w9bC5maWx0ZXIocT0+aXNGaW5pdGUocSkpO2lmKDA9PT1sLmxlbmd0aClyZXR1cm5bLS4xLDEuMV07az8obD1fLnNvcnRCeShsKSxrPWQzLnF1YW50aWxlKGwsLjA1KSxsPWQzLnF1YW50aWxlKGwsLjk1KSk6KGs9ZDMubWluKGwpLGw9ZDMubWF4KGwpKTtsZXQgbSxwPWwtazttPTA9PT1wPzEuMSpNYXRoLmFicyhrKSsxLjE6LjIqcDtrPVswPD1rJiZrPHA/LS4xKmw6ay1tLGwrbV07cmV0dXJuIGs9ZDMuc2NhbGVMaW5lYXIoKS5kb21haW4oaykubmljZSgpLmRvbWFpbigpfTthLmFjY2Vzc29yaXplPWZ1bmN0aW9uKGwpe3JldHVybiBrPT4Ka1tsXX07YS5zdGVwRm9ybWF0dGVyPWQzLmZvcm1hdChgLiR7YS5TVEVQX0ZPUk1BVFRFUl9QUkVDSVNJT059fnNgKTthLnN0ZXBYPWM7YS50aW1lRm9ybWF0dGVyPVBsb3R0YWJsZS5Gb3JtYXR0ZXJzLnRpbWUoIiVhICViICVlLCAlSDolTTolUyIpO2Eud2FsbFg9ZDthLnJlbGF0aXZlQWNjZXNzb3I9KGwsayxtKT0+e2lmKG51bGwhPWwucmVsYXRpdmUpcmV0dXJuIGwucmVsYXRpdmU7az1tLmRhdGEoKTtyZXR1cm4oK2wud2FsbF90aW1lLSgwPGsubGVuZ3RoPytrWzBdLndhbGxfdGltZTowKSkvMzZFNX07YS5yZWxhdGl2ZUZvcm1hdHRlcj1sPT57bGV0IGs9IiIsbT1NYXRoLmZsb29yKGwvMjQpO2wtPTI0Km07bSYmKGsrPW0rImQgIik7bGV0IHA9TWF0aC5mbG9vcihsKTtsPTYwKihsLXApO2lmKHB8fG0pays9cCsiaCAiO2xldCBxPU1hdGguZmxvb3IobCk7bD02MCoobC1xKTtpZihxfHxwfHxtKWsrPXErIm0gIjtyZXR1cm4gaytNYXRoLmZsb29yKGwpKyJzIn07YS5yZWxhdGl2ZVg9CmY7YS5nZXRYQ29tcG9uZW50cz1mdW5jdGlvbihsKXtzd2l0Y2gobCl7Y2FzZSBnLlNURVA6cmV0dXJuIGMoKTtjYXNlIGcuV0FMTF9USU1FOnJldHVybiBkKCk7Y2FzZSBnLlJFTEFUSVZFOnJldHVybiBmKCk7ZGVmYXVsdDp0aHJvdyBFcnJvcigiaW52YWxpZCB4VHlwZTogIitsKTt9fX0pKGJtfHwoYm09e30pKTsKPC9zY3JpcHQ+CgoKCgoKPGRvbS1tb2R1bGUgaWQ9InZ6LWNoYXJ0LXRvb2x0aXAiPgogIDxzY3JpcHQ+Ly9+fldFQlBBVEh+fi92ei1jaGFydC1oZWxwZXJzL3Z6LWNoYXJ0LXRvb2x0aXAuanMKdmFyIGNtOwooZnVuY3Rpb24oYSl7bGV0IGM7KGZ1bmN0aW9uKGYpe2YuQVVUTz0iYXV0byI7Zi5CT1RUT009ImJvdHRvbSI7Zi5SSUdIVD0icmlnaHQifSkoYz1hLlRvb2x0aXBQb3NpdGlvbnx8KGEuVG9vbHRpcFBvc2l0aW9uPXt9KSk7Y29uc3QgZD17Ym94U2hhZG93OiIwIDFweCA0cHggcmdiYSgwLCAwLCAwLCAuMykiLG9wYWNpdHk6MCxwb3NpdGlvbjoiZml4ZWQiLHdpbGxDaGFuZ2U6InRyYW5zZm9ybSIsekluZGV4OjV9O1BvbHltZXIoe2lzOiJ2ei1jaGFydC10b29sdGlwIixwcm9wZXJ0aWVzOntjb250ZW50Q29tcG9uZW50TmFtZTpTdHJpbmcscG9zaXRpb246e3R5cGU6U3RyaW5nLHZhbHVlOmMuQVVUT30sbWluRGlzdEZyb21FZGdlOnt0eXBlOk51bWJlcix2YWx1ZToxNX19LHJlYWR5KCl7dGhpcy5fdHVubmVsPXRoaXMuX3JhZj10aGlzLl9zdHlsZUNhY2hlPW51bGx9LGF0dGFjaGVkKCl7dGhpcy5fdHVubmVsPXRoaXMuX2NyZWF0ZVR1bm5lbCgpO3RoaXMuX2hpZGVPbkJsdXI9KCk9Pgp7ZG9jdW1lbnQuaGlkZGVuJiZ0aGlzLmhpZGUoKX07d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLHRoaXMuX2hpZGVPbkJsdXIpfSxkZXRhY2hlZCgpe3RoaXMuaGlkZSgpO3RoaXMuX3JlbW92ZVR1bm5lbCh0aGlzLl90dW5uZWwpO3RoaXMuX3R1bm5lbD1udWxsO3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJ2aXNpYmlsaXR5Y2hhbmdlIix0aGlzLl9oaWRlT25CbHVyKX0sY29udGVudCgpe3JldHVybiB0aGlzLl90dW5uZWwuc2hhZG93Um9vdH0saGlkZSgpe3dpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9yYWYpO3RoaXMuX3N0eWxlQ2FjaGU9bnVsbDt0aGlzLl90dW5uZWwuc3R5bGUub3BhY2l0eT0wfSx1cGRhdGVBbmRQb3NpdGlvbihmKXt3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5fcmFmKTt0aGlzLl9yYWY9d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e3RoaXMuaXNBdHRhY2hlZCYmdGhpcy5fcmVwb3NpdGlvbkltcGwoZil9KX0sCl9yZXBvc2l0aW9uSW1wbChmKXtjb25zdCBnPXRoaXMuX3R1bm5lbDtmPWYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7Y29uc3QgbD1nLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGs9d2luZG93LmlubmVySGVpZ2h0LG09ZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0aCxwPWYudG9wLHE9cCtmLmhlaWdodCxyPWwuaGVpZ2h0K2JtLlRPT0xUSVBfWV9QSVhFTF9PRkZTRVQ7bGV0IHQ9bnVsbCx2PU1hdGgubWF4KHRoaXMubWluRGlzdEZyb21FZGdlLGYubGVmdCksQT1udWxsLHk9cDt0aGlzLnBvc2l0aW9uPT1jLlJJR0hUP3Y9Zi5yaWdodDooeT1xK2JtLlRPT0xUSVBfWV9QSVhFTF9PRkZTRVQsbTx2K2wud2lkdGgrdGhpcy5taW5EaXN0RnJvbUVkZ2UmJih2PW51bGwsQT10aGlzLm1pbkRpc3RGcm9tRWRnZSkpO3RoaXMucG9zaXRpb249PWMuQVVUTyYmMDxmLnRvcC1yJiZrPGYudG9wK2YuaGVpZ2h0K3ImJih5PW51bGwsdD1rLXArYm0uVE9PTFRJUF9ZX1BJWEVMX09GRlNFVCk7Zj17b3BhY2l0eToxLApsZWZ0OnY/YCR7dn1weGA6bnVsbCxyaWdodDpBP2Ake0F9cHhgOm51bGwsdG9wOnk/YCR7eX1weGA6bnVsbCxib3R0b206dD9gJHt0fXB4YDpudWxsfTtfLmlzRXF1YWwodGhpcy5fc3R5bGVDYWNoZSxmKXx8KE9iamVjdC5hc3NpZ24oZy5zdHlsZSxmKSx0aGlzLl9zdHlsZUNhY2hlPWYpfSxfY3JlYXRlVHVubmVsKCl7aWYoIXRoaXMuY29udGVudENvbXBvbmVudE5hbWUpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIlJlcXVpcmUgYGNvbnRlbnRDb21wb25lbnROYW1lYCB0byBiZSBhIG5hbWUgb2YgYSBQb2x5bWVyIGNvbXBvbmVudCIpO2NvbnN0IGY9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0aGlzLmNvbnRlbnRDb21wb25lbnROYW1lKTtPYmplY3QuYXNzaWduKGYuc3R5bGUsZCk7ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChmKTtyZXR1cm4gZn0sX3JlbW92ZVR1bm5lbChmKXtkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGYpfX0pfSkoY218fChjbT17fSkpOwo8L3NjcmlwdD4KPC9kb20tbW9kdWxlPgoKCgoKCgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdnotbGluZS1jaGFydC9kcmFnWm9vbUludGVyYWN0aW9uLmpzCnZhciBkbTsKKGZ1bmN0aW9uKGEpe2NsYXNzIGMgZXh0ZW5kcyBQbG90dGFibGUuQ29tcG9uZW50cy5TZWxlY3Rpb25Cb3hMYXllcntjb25zdHJ1Y3RvcihkLGYsZyl7c3VwZXIoKTt0aGlzLmVhc2VGbj1kMy5lYXNlQ3ViaWNJbk91dDt0aGlzLl9hbmltYXRpb25UaW1lPTc1MDt0aGlzLnhTY2FsZShkKTt0aGlzLnlTY2FsZShmKTt0aGlzLl9kcmFnSW50ZXJhY3Rpb249bmV3IFBsb3R0YWJsZS5JbnRlcmFjdGlvbnMuRHJhZzt0aGlzLl9kb3VibGVDbGlja0ludGVyYWN0aW9uPW5ldyBQbG90dGFibGUuSW50ZXJhY3Rpb25zLkNsaWNrO3RoaXMuc2V0dXBDYWxsYmFja3MoKTt0aGlzLnVuem9vbU1ldGhvZD1nO3RoaXMub25EZXRhY2goKCk9Pnt0aGlzLl9kb3VibGVDbGlja0ludGVyYWN0aW9uLmRldGFjaEZyb20oKTt0aGlzLl9kcmFnSW50ZXJhY3Rpb24uZGV0YWNoRnJvbSgpfSk7dGhpcy5vbkFuY2hvcigoKT0+e3RoaXMuX2RvdWJsZUNsaWNrSW50ZXJhY3Rpb24uYXR0YWNoVG8odGhpcyk7dGhpcy5fZHJhZ0ludGVyYWN0aW9uLmF0dGFjaFRvKHRoaXMpfSl9aW50ZXJhY3Rpb25TdGFydChkKXt0aGlzLm9uU3RhcnQ9CmR9aW50ZXJhY3Rpb25FbmQoZCl7dGhpcy5vbkVuZD1kfWRyYWdJbnRlcmFjdGlvbigpe3JldHVybiB0aGlzLl9kcmFnSW50ZXJhY3Rpb259c2V0dXBDYWxsYmFja3MoKXtsZXQgZD0hMTt0aGlzLl9kcmFnSW50ZXJhY3Rpb24ub25EcmFnU3RhcnQoZj0+e3RoaXMuYm91bmRzKHt0b3BMZWZ0OmYsYm90dG9tUmlnaHQ6Zn0pO3RoaXMub25TdGFydCgpfSk7dGhpcy5fZHJhZ0ludGVyYWN0aW9uLm9uRHJhZygoZixnKT0+e3RoaXMuYm91bmRzKHt0b3BMZWZ0OmYsYm90dG9tUmlnaHQ6Z30pO3RoaXMuYm94VmlzaWJsZSghMCk7ZD0hMH0pO3RoaXMuX2RyYWdJbnRlcmFjdGlvbi5vbkRyYWdFbmQoKGYsZyk9Pnt0aGlzLmJveFZpc2libGUoITEpO3RoaXMuYm91bmRzKHt0b3BMZWZ0OmYsYm90dG9tUmlnaHQ6Z30pO2lmKGQpdGhpcy56b29tKCk7ZWxzZSB0aGlzLm9uRW5kKCk7ZD0hMX0pO3RoaXMuX2RvdWJsZUNsaWNrSW50ZXJhY3Rpb24ub25Eb3VibGVDbGljayh0aGlzLnVuem9vbS5iaW5kKHRoaXMpKX1hbmltYXRpb25UaW1lKGQpe2lmKG51bGw9PQpkKXJldHVybiB0aGlzLl9hbmltYXRpb25UaW1lO2lmKDA+ZCl0aHJvdyBFcnJvcigiYW5pbWF0aW9uVGltZSBjYW5ub3QgYmUgbmVnYXRpdmUiKTt0aGlzLl9hbmltYXRpb25UaW1lPWQ7cmV0dXJuIHRoaXN9ZWFzZShkKXtpZigiZnVuY3Rpb24iIT09dHlwZW9mIGQpdGhyb3cgRXJyb3IoImVhc2UgZnVuY3Rpb24gbXVzdCBiZSBhIGZ1bmN0aW9uIik7MD09PWQoMCkmJjE9PT1kKDEpfHxQbG90dGFibGUuVXRpbHMuV2luZG93Lndhcm4oIkVhc2luZyBmdW5jdGlvbiBkb2VzIG5vdCBtYWludGFpbiBpbnZhcmlhbnQgZigwKVx4M2RceDNkMCBceDI2XHgyNiBmKDEpXHgzZFx4M2QxLiBCYWQgYmVoYXZpb3IgbWF5IHJlc3VsdC4iKTt0aGlzLmVhc2VGbj1kO3JldHVybiB0aGlzfXpvb20oKXtsZXQgZD10aGlzLnhFeHRlbnQoKVswXS52YWx1ZU9mKCksZj10aGlzLnhFeHRlbnQoKVsxXS52YWx1ZU9mKCksZz10aGlzLnlFeHRlbnQoKVsxXS52YWx1ZU9mKCksbD10aGlzLnlFeHRlbnQoKVswXS52YWx1ZU9mKCk7CmQhPT1mJiZnIT09bCYmdGhpcy5pbnRlcnBvbGF0ZVpvb20oZCxmLGcsbCl9dW56b29tKCl7dmFyIGQ9dGhpcy54U2NhbGUoKTtkLl9kb21haW5NaW49bnVsbDtkLl9kb21haW5NYXg9bnVsbDtkPWQuX2dldEV4dGVudCgpO3RoaXMueFNjYWxlKCkuZG9tYWluKGQpO3RoaXMudW56b29tTWV0aG9kKCl9aXNab29taW5nKGQpe3RoaXMuX2RyYWdJbnRlcmFjdGlvbi5lbmFibGVkKCFkKTt0aGlzLl9kb3VibGVDbGlja0ludGVyYWN0aW9uLmVuYWJsZWQoIWQpfWludGVycG9sYXRlWm9vbShkLGYsZyxsKXtsZXQgaz10aGlzLnhTY2FsZSgpLmRvbWFpbigpWzBdLnZhbHVlT2YoKSxtPXRoaXMueFNjYWxlKCkuZG9tYWluKClbMV0udmFsdWVPZigpLHA9dGhpcy55U2NhbGUoKS5kb21haW4oKVswXS52YWx1ZU9mKCkscT10aGlzLnlTY2FsZSgpLmRvbWFpbigpWzFdLnZhbHVlT2YoKSxyPXRoaXMuZWFzZUZuLHQ9KHkseCxDKT0+ZDMuaW50ZXJwb2xhdGVOdW1iZXIoeSx4KShyKEMpKTt0aGlzLmlzWm9vbWluZyghMCk7CmxldCB2PURhdGUubm93KCksQT0oKT0+e3ZhciB5PURhdGUubm93KCktdjt5PTA9PT10aGlzLl9hbmltYXRpb25UaW1lPzE6TWF0aC5taW4oMSx5L3RoaXMuX2FuaW1hdGlvblRpbWUpO2xldCB4PXQoayxkLHkpLEM9dChtLGYseSksRj10KHAsZyx5KSxEPXQocSxsLHkpO3RoaXMueFNjYWxlKCkuZG9tYWluKFt4LENdKTt0aGlzLnlTY2FsZSgpLmRvbWFpbihbRixEXSk7MT55P1Bsb3R0YWJsZS5VdGlscy5ET00ucmVxdWVzdEFuaW1hdGlvbkZyYW1lUG9seWZpbGwoQSk6KHRoaXMub25FbmQoKSx0aGlzLmlzWm9vbWluZyghMSkpfTtBKCl9fWEuRHJhZ1pvb21MYXllcj1jfSkoZG18fChkbT17fSkpOwo8L3NjcmlwdD4KCgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdnotbGluZS1jaGFydDIvcGFuWm9vbURyYWdMYXllci5qcwp2YXIgZW07CihmdW5jdGlvbihhKXtsZXQgYzsoZnVuY3Rpb24oZil7ZltmLk5PTkU9MF09Ik5PTkUiO2ZbZi5EUkFHX1pPT01JTkc9MV09IkRSQUdfWk9PTUlORyI7ZltmLlBBTk5JTkc9Ml09IlBBTk5JTkcifSkoY3x8KGM9e30pKTtjbGFzcyBkIGV4dGVuZHMgUGxvdHRhYmxlLkNvbXBvbmVudHMuR3JvdXB7Y29uc3RydWN0b3IoZixnLGwpe3N1cGVyKCk7dGhpcy5zdGF0ZT1jLk5PTkU7dGhpcy5wYW5TdGFydENhbGxiYWNrPW5ldyBQbG90dGFibGUuVXRpbHMuQ2FsbGJhY2tTZXQ7dGhpcy5wYW5FbmRDYWxsYmFjaz1uZXcgUGxvdHRhYmxlLlV0aWxzLkNhbGxiYWNrU2V0O3RoaXMucGFuWm9vbT1uZXcgUGxvdHRhYmxlLkludGVyYWN0aW9ucy5QYW5ab29tKGYsZyk7dGhpcy5wYW5ab29tLmRyYWdJbnRlcmFjdGlvbigpLm1vdXNlRmlsdGVyKG09PmQuaXNQYW5LZXkobSkmJjA9PT1tLmJ1dHRvbik7dGhpcy5wYW5ab29tLndoZWVsRmlsdGVyKHRoaXMuY2FuU2Nyb2xsWm9vbSk7dGhpcy5kcmFnWm9vbUxheWVyPW5ldyBkbS5EcmFnWm9vbUxheWVyKGYsCmcsbCk7dGhpcy5kcmFnWm9vbUxheWVyLmRyYWdJbnRlcmFjdGlvbigpLm1vdXNlRmlsdGVyKG09PiFkLmlzUGFuS2V5KG0pJiYwPT09bS5idXR0b24pO3RoaXMuYXBwZW5kKHRoaXMuZHJhZ1pvb21MYXllcik7Y29uc3Qgaz10aGlzLm9uV2hlZWwuYmluZCh0aGlzKTt0aGlzLm9uQW5jaG9yKCgpPT57dGhpcy5fbW91c2VEaXNwYXRjaGVyPVBsb3R0YWJsZS5EaXNwYXRjaGVycy5Nb3VzZS5nZXREaXNwYXRjaGVyKHRoaXMpO3RoaXMuX21vdXNlRGlzcGF0Y2hlci5vbldoZWVsKGspO3RoaXMucGFuWm9vbS5hdHRhY2hUbyh0aGlzKX0pO3RoaXMub25EZXRhY2goKCk9Pnt0aGlzLnBhblpvb20uZGV0YWNoRnJvbSgpO3RoaXMuX21vdXNlRGlzcGF0Y2hlciYmKHRoaXMuX21vdXNlRGlzcGF0Y2hlci5vZmZXaGVlbChrKSx0aGlzLl9tb3VzZURpc3BhdGNoZXI9bnVsbCl9KTt0aGlzLnBhblpvb20uZHJhZ0ludGVyYWN0aW9uKCkub25EcmFnU3RhcnQoKCk9Pnt0aGlzLnN0YXRlPT1jLk5PTkUmJgp0aGlzLnNldFN0YXRlKGMuUEFOTklORyl9KTt0aGlzLnBhblpvb20uZHJhZ0ludGVyYWN0aW9uKCkub25EcmFnRW5kKCgpPT57dGhpcy5zdGF0ZT09Yy5QQU5OSU5HJiZ0aGlzLnNldFN0YXRlKGMuTk9ORSl9KTt0aGlzLmRyYWdab29tTGF5ZXIuZHJhZ0ludGVyYWN0aW9uKCkub25EcmFnU3RhcnQoKCk9Pnt0aGlzLnN0YXRlPT1jLk5PTkUmJnRoaXMuc2V0U3RhdGUoYy5EUkFHX1pPT01JTkcpfSk7dGhpcy5kcmFnWm9vbUxheWVyLmRyYWdJbnRlcmFjdGlvbigpLm9uRHJhZ0VuZCgoKT0+e3RoaXMuc3RhdGU9PWMuRFJBR19aT09NSU5HJiZ0aGlzLnNldFN0YXRlKGMuTk9ORSl9KX1vbldoZWVsKGYsZyl7aWYoIXRoaXMuY2FuU2Nyb2xsWm9vbShnKSYmKGY9dGhpcy5lbGVtZW50KCksZi5zZWxlY3QoIi5oZWxwIikuZW1wdHkoKSkpe3ZhciBsPWYuYXBwZW5kKCJkaXYiKS5jbGFzc2VkKCJoZWxwIiwhMCk7bC5hcHBlbmQoInNwYW4iKS50ZXh0KCJBbHQgKyBTY3JvbGwgdG8gWm9vbSIpOwpsLm9uKCJhbmltYXRpb25lbmQiLCgpPT52b2lkIGwucmVtb3ZlKCkpfX1zdGF0aWMgaXNQYW5LZXkoZil7cmV0dXJuISFmLmFsdEtleXx8ISFmLnNoaWZ0S2V5fWNhblNjcm9sbFpvb20oZil7cmV0dXJuIGYuYWx0S2V5fXNldFN0YXRlKGYpe2lmKHRoaXMuc3RhdGUhPWYpe3ZhciBnPXRoaXMuc3RhdGU7dGhpcy5zdGF0ZT1mO3RoaXMucm9vdCgpLnJlbW92ZUNsYXNzKHRoaXMuc3RhdGVDbGFzc05hbWUoZykpO3RoaXMucm9vdCgpLmFkZENsYXNzKHRoaXMuc3RhdGVDbGFzc05hbWUoZikpO2c9PWMuUEFOTklORyYmdGhpcy5wYW5FbmRDYWxsYmFjay5jYWxsQ2FsbGJhY2tzKCk7Zj09Yy5QQU5OSU5HJiZ0aGlzLnBhblN0YXJ0Q2FsbGJhY2suY2FsbENhbGxiYWNrcygpfX1zdGF0ZUNsYXNzTmFtZShmKXtzd2l0Y2goZil7Y2FzZSBjLlBBTk5JTkc6cmV0dXJuInBhbm5pbmciO2Nhc2UgYy5EUkFHX1pPT01JTkc6cmV0dXJuImRyYWctem9vbWluZyI7ZGVmYXVsdDpyZXR1cm4iIn19b25QYW5TdGFydChmKXt0aGlzLnBhblN0YXJ0Q2FsbGJhY2suYWRkKGYpfW9uUGFuRW5kKGYpe3RoaXMucGFuRW5kQ2FsbGJhY2suYWRkKGYpfW9uU2Nyb2xsWm9vbShmKXt0aGlzLnBhblpvb20ub25ab29tRW5kKGYpfW9uRHJhZ1pvb21TdGFydChmKXt0aGlzLmRyYWdab29tTGF5ZXIuaW50ZXJhY3Rpb25TdGFydChmKX1vbkRyYWdab29tRW5kKGYpe3RoaXMuZHJhZ1pvb21MYXllci5pbnRlcmFjdGlvbkVuZChmKX19CmEuUGFuWm9vbURyYWdMYXllcj1kfSkoZW18fChlbT17fSkpOwo8L3NjcmlwdD4KCjxkb20tbW9kdWxlIGlkPSJ2ei1wYW4tem9vbS1zdHlsZSI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICAuaGVscCB7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBhbmltYXRpb24tZGVsYXk6IDFzOwogICAgICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogMXM7CiAgICAgICAgYW5pbWF0aW9uLW5hbWU6IGZhZGUtb3V0OwogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMzAsIDMwLCAzMCwgMC42KTsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgY29sb3I6ICNmZmY7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgcGFkZGluZzogMjBweDsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgdG9wOiAwOwogICAgICB9CgogICAgICAuaGVscCA+IHNwYW4gewogICAgICAgIHdoaXRlLXNwYWNlOiBub3JtYWw7CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMgZmFkZS1vdXQgewogICAgICAgIDAlIHsKICAgICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgfQoKICAgICAgICAxMDAlIHsKICAgICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgfQogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT4KCgoKPGRvbS1tb2R1bGUgaWQ9InZ6LWxpbmUtY2hhcnQyIj4KICA8dGVtcGxhdGU+CiAgICA8ZGl2IGlkPSJjaGFydGRpdiI+PC9kaXY+CiAgICA8dnotY2hhcnQtdG9vbHRpcCBpZD0idG9vbHRpcCIgcG9zaXRpb249IltbdG9vbHRpcFBvc2l0aW9uXV0iIGNvbnRlbnQtY29tcG9uZW50LW5hbWU9InZ6LWxpbmUtY2hhcnQtdG9vbHRpcCI+PC92ei1jaGFydC10b29sdGlwPgogICAgPHN0eWxlIGluY2x1ZGU9InBsb3R0YWJsZS1zdHlsZSI+PC9zdHlsZT4KICAgIDxzdHlsZSBpbmNsdWRlPSJ2ei1wYW4tem9vbS1zdHlsZSI+PC9zdHlsZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICAgIGZsZXgtc2hyaW5rOiAxOwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgIH0KICAgICAgZGl2IHsKICAgICAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICAgIGZsZXgtc2hyaW5rOiAxOwogICAgICB9CgogICAgICAjY2hhcnRkaXYgLm1haW4gewogICAgICAgIGN1cnNvcjogY3Jvc3NoYWlyOwogICAgICB9CgogICAgICA6aG9zdCgucGFua2V5KSAjY2hhcnRkaXYgOm5vdCguZHJhZy16b29taW5nKSAubWFpbiB7CiAgICAgICAgY3Vyc29yOiAtd2Via2l0LWdyYWI7CiAgICAgICAgY3Vyc29yOiBncmFiOwogICAgICB9CgogICAgICA6aG9zdCgubW91c2Vkb3duKSAjY2hhcnRkaXYgLnBhbm5pbmcgLm1haW4gewogICAgICAgIGN1cnNvcjogLXdlYmtpdC1ncmFiYmluZzsKICAgICAgICBjdXJzb3I6IGdyYWJiaW5nOwogICAgICB9CgogICAgICAjY2hhcnRkaXYgbGluZS5ndWlkZS1saW5lIHsKICAgICAgICBzdHJva2U6ICM5OTk7CiAgICAgICAgc3Ryb2tlLXdpZHRoOiAxLjVweDsKICAgICAgfQogICAgICAjY2hhcnRkaXY6aG92ZXIgewogICAgICAgIHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm07CiAgICAgIH0KCiAgICAgIC5naG9zdCB7CiAgICAgICAgb3BhY2l0eTogMC4yOwogICAgICAgIHN0cm9rZS13aWR0aDogMXB4OwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CiAgPHNjcmlwdD4vL35+V0VCUEFUSH5+L3Z6LWxpbmUtY2hhcnQyL3RmLXNjYWxlLmpzCihmdW5jdGlvbihhKXtjbGFzcyBjIGV4dGVuZHMgUGxvdHRhYmxlLlF1YW50aXRhdGl2ZVNjYWxle2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKTt0aGlzLl9pZ25vcmVPdXRsaWVyPSExfXNldFZhbHVlUHJvdmlkZXJGb3JEb21haW4oZCl7dGhpcy5fdmFsdWVQcm92aWRlckZvckRvbWFpbj1kfWlnbm9yZU91dGxpZXIoZCl7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgZD8odGhpcy5faWdub3JlT3V0bGllcj1kLHRoaXMpOnRoaXMuX2lnbm9yZU91dGxpZXJ9X2dldEFsbEluY2x1ZGVkVmFsdWVzKCl7Y29uc3QgZD10aGlzLl92YWx1ZVByb3ZpZGVyRm9yRG9tYWluP3RoaXMuX3ZhbHVlUHJvdmlkZXJGb3JEb21haW4oKTpbXTtyZXR1cm4gdGhpcy5leHRlbnRPZlZhbHVlcyhkKX19YS5UZlNjYWxlPWN9KShlbXx8KGVtPXt9KSk7Cjwvc2NyaXB0PgogIDxzY3JpcHQ+Ly9+fldFQlBBVEh+fi92ei1saW5lLWNoYXJ0Mi9saW5lYXItc2NhbGUuanMKKGZ1bmN0aW9uKGEpe2NsYXNzIGMgZXh0ZW5kcyBQbG90dGFibGUuU2NhbGVzLkxpbmVhcntjb25zdHJ1Y3Rvcigpe3N1cGVyKCk7dGhpcy5faWdub3JlT3V0bGllcj0hMTt0aGlzLnBhZFByb3BvcnRpb24oLjIpfXNldFZhbHVlUHJvdmlkZXJGb3JEb21haW4oZCl7dGhpcy5fdmFsdWVQcm92aWRlckZvckRvbWFpbj1kfV9uaWNlRG9tYWluKGQsZil7Y29uc3QgW2csbF09ZCxrPWwtZztkPTA9PT1rPzEuMSpNYXRoLmFicyhnKSsxLjE6ayp0aGlzLnBhZFByb3BvcnRpb24oKTtyZXR1cm4gc3VwZXIuX25pY2VEb21haW4oWzA8PWcmJmc8az8tLjEqbDpnLWQsbCtkXSxmKX1fZ2V0VW5ib3VuZGVkRXh0ZW50KGQpe2Q9dGhpcy5fZ2V0QWxsSW5jbHVkZWRWYWx1ZXMoZCk7bGV0IGY9dGhpcy5fZGVmYXVsdEV4dGVudCgpOzAhPT1kLmxlbmd0aCYmKGQ9W1Bsb3R0YWJsZS5VdGlscy5NYXRoLm1pbihkLGZbMF0pLFBsb3R0YWJsZS5VdGlscy5NYXRoLm1heChkLGZbMV0pXSxmPXRoaXMuX25pY2VEb21haW4oZCkpOwpyZXR1cm4gZn1fZ2V0QWxsSW5jbHVkZWRWYWx1ZXMoKXtjb25zdCBkPXRoaXMuX3ZhbHVlUHJvdmlkZXJGb3JEb21haW4/dGhpcy5fdmFsdWVQcm92aWRlckZvckRvbWFpbigpOltdO3JldHVybiB0aGlzLmV4dGVudE9mVmFsdWVzKGQpfWV4dGVudE9mVmFsdWVzKGQpe3ZhciBmPWQ9ZC5maWx0ZXIoZz0+UGxvdHRhYmxlLlV0aWxzLk1hdGguaXNWYWxpZE51bWJlcihnKSk7aWYodGhpcy5pZ25vcmVPdXRsaWVyKCkpe2Y9ZC5zb3J0KChrLG0pPT5rLW0pO2NvbnN0IGc9ZDMucXVhbnRpbGUoZiwuMDUpLGw9ZDMucXVhbnRpbGUoZiwuOTUpO2Y9ZC5maWx0ZXIoaz0+az49ZyYmazw9bCl9ZD1kMy5leHRlbnQoZik7cmV0dXJuIG51bGw9PWRbMF18fG51bGw9PWRbMV0/W106ZH1pZ25vcmVPdXRsaWVyKGQpe3JldHVybiJib29sZWFuIj09dHlwZW9mIGQ/KHRoaXMuX2lnbm9yZU91dGxpZXI9ZCx0aGlzKTp0aGlzLl9pZ25vcmVPdXRsaWVyfX1hLkxpbmVhclNjYWxlPWN9KShlbXx8KGVtPXt9KSk7Cjwvc2NyaXB0PgogIDxzY3JpcHQ+Ly9+fldFQlBBVEh+fi92ei1saW5lLWNoYXJ0Mi9sb2ctc2NhbGUuanMKKGZ1bmN0aW9uKGEpe2Z1bmN0aW9uIGMoZyl7cmV0dXJuIE1hdGgubG9nMTAoZyl9ZnVuY3Rpb24gZChnKXtyZXR1cm4gTWF0aC5wb3coMTAsZyl9YS5NSU5fUE9TSVRJVkVfVkFMVUU9TWF0aC5wb3coMiwtMTA3NCk7Y2xhc3MgZiBleHRlbmRzIGEuVGZTY2FsZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKCk7dGhpcy5fZDNMb2dTY2FsZT1kMy5zY2FsZUxvZygpO3RoaXMucGFkUHJvcG9ydGlvbiguMil9c2NhbGUoZyl7cmV0dXJuIDA+PWc/TmFOOnRoaXMuX2QzTG9nU2NhbGUoZyl9aW52ZXJ0KGcpe3JldHVybiB0aGlzLl9kM0xvZ1NjYWxlLmludmVydChnKX1zY2FsZVRyYW5zZm9ybWF0aW9uKGcpe3JldHVybiB0aGlzLnNjYWxlKGcpfWludmVydGVkVHJhbnNmb3JtYXRpb24oZyl7cmV0dXJuIHRoaXMuaW52ZXJ0KGcpfWdldFRyYW5zZm9ybWF0aW9uRG9tYWluKCl7cmV0dXJuIHRoaXMuZG9tYWluKCl9X2dldERvbWFpbigpe3JldHVybiB0aGlzLl91bnRyYW5zZm9ybWVkRG9tYWlufV9zZXREb21haW4oZyl7dGhpcy5fdW50cmFuc2Zvcm1lZERvbWFpbj0KZztjb25zdCBbbCxrXT1nO3N1cGVyLl9zZXREb21haW4oW01hdGgubWF4KGEuTUlOX1BPU0lUSVZFX1ZBTFVFLGwpLGtdKX1fbmljZURvbWFpbihnKXtjb25zdCBbbCxrXT1nO2c9TWF0aC5tYXgoYyhhLk1JTl9QT1NJVElWRV9WQUxVRSksYyhsKSk7Y29uc3QgbT1jKGspO3ZhciBwPW0tZztwPXA/cCp0aGlzLnBhZFByb3BvcnRpb24oKToxO3JldHVybltkKE1hdGgubWF4KGMoYS5NSU5fUE9TSVRJVkVfVkFMVUUpLGctcCkpLGQobStwKV19X2dldFVuYm91bmRlZEV4dGVudChnKXtnPXRoaXMuX2dldEFsbEluY2x1ZGVkVmFsdWVzKGcpO2xldCBsPXRoaXMuX2RlZmF1bHRFeHRlbnQoKTswIT09Zy5sZW5ndGgmJihnPVtQbG90dGFibGUuVXRpbHMuTWF0aC5taW4oZyxsWzBdKSxQbG90dGFibGUuVXRpbHMuTWF0aC5tYXgoZyxsWzFdKV0sbD10aGlzLl9uaWNlRG9tYWluKGcpKTtyZXR1cm4gbH1fZ2V0QWxsSW5jbHVkZWRWYWx1ZXMoKXtyZXR1cm4gc3VwZXIuX2dldEFsbEluY2x1ZGVkVmFsdWVzKCkubWFwKGc9PgowPGc/ZzphLk1JTl9QT1NJVElWRV9WQUxVRSl9X2RlZmF1bHRFeHRlbnQoKXtyZXR1cm5bMSwxMF19X2JhY2tpbmdTY2FsZURvbWFpbihnKXtpZihudWxsPT1nKXJldHVybiB0aGlzLl9kM0xvZ1NjYWxlLmRvbWFpbigpO3RoaXMuX2QzTG9nU2NhbGUuZG9tYWluKGcpO3JldHVybiB0aGlzfV9nZXRSYW5nZSgpe3JldHVybiB0aGlzLl9kM0xvZ1NjYWxlLnJhbmdlKCl9X3NldFJhbmdlKGcpe3RoaXMuX2QzTG9nU2NhbGUucmFuZ2UoZyl9ZGVmYXVsdFRpY2tzKCl7cmV0dXJuIHRoaXMuX2QzTG9nU2NhbGUudGlja3MoKX10aWNrcygpe3JldHVybiB0aGlzLl9kM0xvZ1NjYWxlLnRpY2tzKCl9ZXh0ZW50T2ZWYWx1ZXMoZyl7bGV0IGw9Zz1nLmZpbHRlcihrPT5QbG90dGFibGUuVXRpbHMuTWF0aC5pc1ZhbGlkTnVtYmVyKGspJiYwPGspO2lmKHRoaXMuaWdub3JlT3V0bGllcigpKXtnPWcubWFwKGMpLnNvcnQoKHAscSk9PnAtcSk7Y29uc3Qgaz1kMy5xdWFudGlsZShnLC4wNSksbT1kMy5xdWFudGlsZShnLAouOTUpO2w9Zy5maWx0ZXIocD0+cD49ayYmcDw9bSkubWFwKGQpfWc9ZDMuZXh0ZW50KGwpO3JldHVybiBudWxsPT1nWzBdfHxudWxsPT1nWzFdP1tdOmd9fWEuTG9nU2NhbGU9Zn0pKGVtfHwoZW09e30pKTsKPC9zY3JpcHQ+CiAgPHNjcmlwdD4vL35+V0VCUEFUSH5+L3Z6LWxpbmUtY2hhcnQyL2xpbmUtY2hhcnQuanMKKGZ1bmN0aW9uKGEpe2xldCBjOyhmdW5jdGlvbihnKXtnW2cuVEVYVD0wXT0iVEVYVCI7Z1tnLkRPTT0xXT0iRE9NIn0pKGN8fChjPXt9KSk7bGV0IGQ7KGZ1bmN0aW9uKGcpe2cuTE9HPSJsb2ciO2cuTElORUFSPSJsaW5lYXIifSkoZHx8KGQ9e30pKTtjbGFzcyBme2NvbnN0cnVjdG9yKGcsbCxrLG0scCxxLHIsdCx2LEEseSl7dGhpcy5zZXJpZXNOYW1lcz1bXTt0aGlzLm5hbWUyZGF0YXNldHM9e307dGhpcy5jb2xvclNjYWxlPW07dGhpcy50b29sdGlwPXA7dGhpcy5kYXRhc2V0cz1bXTt0aGlzLl9pZ25vcmVZT3V0bGllcnM9ITE7dGhpcy5sYXN0UG9pbnRzRGF0YXNldD1uZXcgUGxvdHRhYmxlLkRhdGFzZXQ7dGhpcy5uYW5EYXRhc2V0PW5ldyBQbG90dGFibGUuRGF0YXNldDt0aGlzLnlWYWx1ZUFjY2Vzc29yPWw7dGhpcy5zeW1ib2xGdW5jdGlvbj1BO3RoaXMub25EYXRhc2V0Q2hhbmdlZD10aGlzLl9vbkRhdGFzZXRDaGFuZ2VkLmJpbmQodGhpcyk7dGhpcy5fZGVmYXVsdFhSYW5nZT0KdDt0aGlzLl9kZWZhdWx0WVJhbmdlPXY7dGhpcy50b29sdGlwQ29sdW1ucz1xO3RoaXMuYnVpbGRDaGFydChnLGwsayxyLHkpfWJ1aWxkQ2hhcnQoZyxsLGssbSxwKXt0aGlzLmRlc3Ryb3koKTtnPWcoKTt0aGlzLnhBY2Nlc3Nvcj1nLmFjY2Vzc29yO3RoaXMueFNjYWxlPWcuc2NhbGU7dGhpcy54QXhpcz1nLmF4aXM7dGhpcy54QXhpcy5tYXJnaW4oMCkudGlja0xhYmVsUGFkZGluZygzKTtwJiZ0aGlzLnhBeGlzLmZvcm1hdHRlcihwKTt0aGlzLnlTY2FsZT1mLmdldFlTY2FsZUZyb21UeXBlKGspO3RoaXMueVNjYWxlLnNldFZhbHVlUHJvdmlkZXJGb3JEb21haW4oKCk9PnRoaXMuZ2V0VmFsdWVzRm9yWUF4aXNEb21haW5Db21wdXRlKCkpO3RoaXMueUF4aXM9bmV3IFBsb3R0YWJsZS5BeGVzLk51bWVyaWModGhpcy55U2NhbGUsImxlZnQiKTtwPWJtLm11bHRpc2NhbGVGb3JtYXR0ZXIoYm0uWV9BWElTX0ZPUk1BVFRFUl9QUkVDSVNJT04pO3RoaXMueUF4aXMubWFyZ2luKDApLnRpY2tMYWJlbFBhZGRpbmcoNSkuZm9ybWF0dGVyKHApOwp0aGlzLnlBeGlzLnVzZXNUZXh0V2lkdGhBcHByb3hpbWF0aW9uKCk7dGhpcy5maWxsQXJlYT1tO3A9bmV3IGEuUGFuWm9vbURyYWdMYXllcih0aGlzLnhTY2FsZSx0aGlzLnlTY2FsZSwoKT0+dGhpcy5yZXNldERvbWFpbigpKTt0aGlzLnRvb2x0aXBJbnRlcmFjdGlvbj10aGlzLmNyZWF0ZVRvb2x0aXBJbnRlcmFjdGlvbihwKTt0aGlzLnRvb2x0aXBQb2ludHNDb21wb25lbnQ9bmV3IFBsb3R0YWJsZS5Db21wb25lbnQ7bT10aGlzLmJ1aWxkUGxvdCh0aGlzLnhTY2FsZSx0aGlzLnlTY2FsZSxtKTt0aGlzLmdyaWRsaW5lcz1uZXcgUGxvdHRhYmxlLkNvbXBvbmVudHMuR3JpZGxpbmVzKHRoaXMueFNjYWxlLHRoaXMueVNjYWxlKTtnPW51bGw7ayE9PWQuTE9HJiYoZz1uZXcgUGxvdHRhYmxlLkNvbXBvbmVudHMuR3VpZGVMaW5lTGF5ZXIoImhvcml6b250YWwiKSxnLnNjYWxlKHRoaXMueVNjYWxlKS52YWx1ZSgwKSk7az1uZXcgUGxvdHRhYmxlLkNvbXBvbmVudHMuR3VpZGVMaW5lTGF5ZXIoInZlcnRpY2FsIik7Cmsuc2NhbGUodGhpcy54U2NhbGUpLnZhbHVlKDApO3RoaXMuY2VudGVyPW5ldyBQbG90dGFibGUuQ29tcG9uZW50cy5Hcm91cChbdGhpcy5ncmlkbGluZXMsZyxrLG0sdGhpcy50b29sdGlwUG9pbnRzQ29tcG9uZW50LHBdKTt0aGlzLmNlbnRlci5hZGRDbGFzcygibWFpbiIpO3RoaXMub3V0ZXI9bmV3IFBsb3R0YWJsZS5Db21wb25lbnRzLlRhYmxlKFtbdGhpcy55QXhpcyx0aGlzLmNlbnRlcl0sW251bGwsdGhpcy54QXhpc11dKX1idWlsZFBsb3QoZyxsLGspe2smJih0aGlzLm1hcmdpbkFyZWFQbG90PW5ldyBQbG90dGFibGUuUGxvdHMuQXJlYSx0aGlzLm1hcmdpbkFyZWFQbG90LngodGhpcy54QWNjZXNzb3IsZyksdGhpcy5tYXJnaW5BcmVhUGxvdC55KGsuaGlnaGVyQWNjZXNzb3IsbCksdGhpcy5tYXJnaW5BcmVhUGxvdC55MChrLmxvd2VyQWNjZXNzb3IpLHRoaXMubWFyZ2luQXJlYVBsb3QuYXR0cigiZmlsbCIsKHIsdCx2KT0+dGhpcy5jb2xvclNjYWxlLnNjYWxlKHYubWV0YWRhdGEoKS5uYW1lKSksCnRoaXMubWFyZ2luQXJlYVBsb3QuYXR0cigiZmlsbC1vcGFjaXR5IiwuMyksdGhpcy5tYXJnaW5BcmVhUGxvdC5hdHRyKCJzdHJva2Utd2lkdGgiLDApKTt0aGlzLnNtb290aGVkQWNjZXNzb3I9cj0+ci5zbW9vdGhlZDtrPW5ldyBQbG90dGFibGUuUGxvdHMuTGluZTtrLngodGhpcy54QWNjZXNzb3IsZyk7ay55KHRoaXMueVZhbHVlQWNjZXNzb3IsbCk7ay5hdHRyKCJzdHJva2UiLChyLHQsdik9PnRoaXMuY29sb3JTY2FsZS5zY2FsZSh2Lm1ldGFkYXRhKCkubmFtZSkpO3RoaXMubGluZVBsb3Q9azt0aGlzLnNldHVwVG9vbHRpcHMoayk7bGV0IG09bmV3IFBsb3R0YWJsZS5QbG90cy5MaW5lO20ueCh0aGlzLnhBY2Nlc3NvcixnKTttLnkodGhpcy5zbW9vdGhlZEFjY2Vzc29yLGwpO20uYXR0cigic3Ryb2tlIiwocix0LHYpPT50aGlzLmNvbG9yU2NhbGUuc2NhbGUodi5tZXRhZGF0YSgpLm5hbWUpKTt0aGlzLnNtb290aExpbmVQbG90PW07aWYodGhpcy5zeW1ib2xGdW5jdGlvbil7dmFyIHA9Cm5ldyBQbG90dGFibGUuUGxvdHMuU2NhdHRlcjtwLngodGhpcy54QWNjZXNzb3IsZyk7cC55KHRoaXMueVZhbHVlQWNjZXNzb3IsbCk7cC5hdHRyKCJmaWxsIiwocix0LHYpPT50aGlzLmNvbG9yU2NhbGUuc2NhbGUodi5tZXRhZGF0YSgpLm5hbWUpKTtwLmF0dHIoIm9wYWNpdHkiLDEpO3Auc2l6ZSgyKmJtLlRPT0xUSVBfQ0lSQ0xFX1NJWkUpO3Auc3ltYm9sKChyLHQsdik9PnRoaXMuc3ltYm9sRnVuY3Rpb24odi5tZXRhZGF0YSgpLm5hbWUpKTt0aGlzLm1hcmtlcnNTY2F0dGVyUGxvdD1wfXA9bmV3IFBsb3R0YWJsZS5QbG90cy5TY2F0dGVyO3AueCh0aGlzLnhBY2Nlc3NvcixnKTtwLnkodGhpcy55VmFsdWVBY2Nlc3NvcixsKTtwLmF0dHIoImZpbGwiLHI9PnRoaXMuY29sb3JTY2FsZS5zY2FsZShyLm5hbWUpKTtwLmF0dHIoIm9wYWNpdHkiLDEpO3Auc2l6ZSgyKmJtLlRPT0xUSVBfQ0lSQ0xFX1NJWkUpO3AuZGF0YXNldHMoW3RoaXMubGFzdFBvaW50c0RhdGFzZXRdKTt0aGlzLnNjYXR0ZXJQbG90PQpwO2xldCBxPW5ldyBQbG90dGFibGUuUGxvdHMuU2NhdHRlcjtxLngodGhpcy54QWNjZXNzb3IsZyk7cS55KHI9PnIuZGlzcGxheVksbCk7cS5hdHRyKCJmaWxsIixyPT50aGlzLmNvbG9yU2NhbGUuc2NhbGUoci5uYW1lKSk7cS5hdHRyKCJvcGFjaXR5IiwxKTtxLnNpemUoMipibS5OQU5fU1lNQk9MX1NJWkUpO3EuZGF0YXNldHMoW3RoaXMubmFuRGF0YXNldF0pO3Euc3ltYm9sKFBsb3R0YWJsZS5TeW1ib2xGYWN0b3JpZXMudHJpYW5nbGUpO3RoaXMubmFuRGlzcGxheT1xO2c9W3EscCxtLGtdO3RoaXMubWFyZ2luQXJlYVBsb3QmJmcucHVzaCh0aGlzLm1hcmdpbkFyZWFQbG90KTt0aGlzLm1hcmtlcnNTY2F0dGVyUGxvdCYmZy5wdXNoKHRoaXMubWFya2Vyc1NjYXR0ZXJQbG90KTtyZXR1cm4gbmV3IFBsb3R0YWJsZS5Db21wb25lbnRzLkdyb3VwKGcpfV9vbkRhdGFzZXRDaGFuZ2VkKGcpe3RoaXMuc21vb3RoaW5nRW5hYmxlZCYmdGhpcy5yZXNtb290aERhdGFzZXQoZyk7dGhpcy51cGRhdGVTcGVjaWFsRGF0YXNldHMoKX1pZ25vcmVZT3V0bGllcnMoZyl7ZyE9PQp0aGlzLl9pZ25vcmVZT3V0bGllcnMmJih0aGlzLl9pZ25vcmVZT3V0bGllcnM9Zyx0aGlzLnVwZGF0ZVNwZWNpYWxEYXRhc2V0cygpLHRoaXMueVNjYWxlLmlnbm9yZU91dGxpZXIoZyksdGhpcy5yZXNldFlEb21haW4oKSl9Z2V0VmFsdWVzRm9yWUF4aXNEb21haW5Db21wdXRlKCl7Y29uc3QgZz10aGlzLmdldEFjY2Vzc29yc0ZvckNvbXB1dGluZ1lSYW5nZSgpO3JldHVybiBfLmZsYXR0ZW5EZWVwKHRoaXMuZGF0YXNldHMubWFwKGw9PmcubWFwKGs9PmwuZGF0YSgpLm1hcChtPT5rKG0sLTEsbCkpKSkpLmZpbHRlcihpc0Zpbml0ZSl9dXBkYXRlU3BlY2lhbERhdGFzZXRzKCl7Y29uc3QgZz10aGlzLmdldFlBeGlzQWNjZXNzb3IoKTt2YXIgbD10aGlzLmRhdGFzZXRzLm1hcChrPT57bGV0IG09bnVsbCxwPWsuZGF0YSgpLmZpbHRlcihxPT4haXNOYU4oZyhxLC0xLGspKSk7MDxwLmxlbmd0aCYmKG09cFtwLmxlbmd0aC0xXSxtLm5hbWU9ay5tZXRhZGF0YSgpLm5hbWUsbS5yZWxhdGl2ZT0KYm0ucmVsYXRpdmVBY2Nlc3NvcihtLC0xLGspKTtyZXR1cm4gbX0pLmZpbHRlcihrPT5udWxsIT1rKTt0aGlzLmxhc3RQb2ludHNEYXRhc2V0LmRhdGEobCk7dGhpcy5tYXJrZXJzU2NhdHRlclBsb3QmJnRoaXMubWFya2Vyc1NjYXR0ZXJQbG90LmRhdGFzZXRzKHRoaXMuZGF0YXNldHMubWFwKHRoaXMuY3JlYXRlU2FtcGxlZERhdGFzZXRGb3JNYXJrZXJzKSk7bD1fLmZsYXR0ZW4odGhpcy5kYXRhc2V0cy5tYXAoaz0+e2xldCBtPW51bGwscD1rLmRhdGEoKSxxPTA7Zm9yKDtxPHAubGVuZ3RoJiZudWxsPT1tOylpc05hTihnKHBbcV0sLTEsaykpfHwobT1nKHBbcV0sLTEsaykpLHErKztudWxsPT1tJiYobT0wKTtsZXQgcj1bXTtmb3IocT0wO3E8cC5sZW5ndGg7cSsrKWlzTmFOKGcocFtxXSwtMSxrKSk/KHBbcV0ubmFtZT1rLm1ldGFkYXRhKCkubmFtZSxwW3FdLmRpc3BsYXlZPW0scFtxXS5yZWxhdGl2ZT1ibS5yZWxhdGl2ZUFjY2Vzc29yKHBbcV0sLTEsayksci5wdXNoKHBbcV0pKToKbT1nKHBbcV0sLTEsayk7cmV0dXJuIHJ9KSk7dGhpcy5uYW5EYXRhc2V0LmRhdGEobCl9cmVzZXREb21haW4oKXt0aGlzLnJlc2V0WERvbWFpbigpO3RoaXMucmVzZXRZRG9tYWluKCl9cmVzZXRYRG9tYWluKCl7aWYobnVsbCE9dGhpcy5fZGVmYXVsdFhSYW5nZSl2YXIgZz10aGlzLl9kZWZhdWx0WFJhbmdlO2Vsc2UgZz10aGlzLnhTY2FsZSxnLl9kb21haW5NaW49bnVsbCxnLl9kb21haW5NYXg9bnVsbCxnPWcuX2dldEV4dGVudCgpO3RoaXMueFNjYWxlLmRvbWFpbihnKX1yZXNldFlEb21haW4oKXtudWxsIT10aGlzLl9kZWZhdWx0WVJhbmdlP3RoaXMueVNjYWxlLmRvbWFpbih0aGlzLl9kZWZhdWx0WVJhbmdlKToodGhpcy55U2NhbGUuYXV0b0RvbWFpbigpLHRoaXMueVNjYWxlLmRvbWFpbih0aGlzLnlTY2FsZS5kb21haW4oKSkpfWdldEFjY2Vzc29yc0ZvckNvbXB1dGluZ1lSYW5nZSgpe2NvbnN0IGc9W3RoaXMuZ2V0WUF4aXNBY2Nlc3NvcigpXTt0aGlzLmZpbGxBcmVhJiZnLnB1c2godGhpcy5maWxsQXJlYS5sb3dlckFjY2Vzc29yLAp0aGlzLmZpbGxBcmVhLmhpZ2hlckFjY2Vzc29yKTtyZXR1cm4gZ31nZXRZQXhpc0FjY2Vzc29yKCl7cmV0dXJuIHRoaXMuc21vb3RoaW5nRW5hYmxlZD90aGlzLnNtb290aGVkQWNjZXNzb3I6dGhpcy55VmFsdWVBY2Nlc3Nvcn1jcmVhdGVUb29sdGlwSW50ZXJhY3Rpb24oZyl7Y29uc3QgbD1uZXcgYm0uUG9pbnRlckludGVyYWN0aW9uLGs9KCk9PntsLmVuYWJsZWQoITEpO3RoaXMuaGlkZVRvb2x0aXBzKCl9LG09KCk9PmwuZW5hYmxlZCghMCk7Zy5vblBhblN0YXJ0KGspO2cub25EcmFnWm9vbVN0YXJ0KGspO2cub25QYW5FbmQobSk7Zy5vbkRyYWdab29tRW5kKG0pO2cub25TY3JvbGxab29tKCgpPT50aGlzLnVwZGF0ZVRvb2x0aXBDb250ZW50KHRoaXMuX2xhc3RNb3VzZVBvc2l0aW9uKSk7bC5vblBvaW50ZXJNb3ZlKHA9Pnt0aGlzLl9sYXN0TW91c2VQb3NpdGlvbj1wO3RoaXMudXBkYXRlVG9vbHRpcENvbnRlbnQocCl9KTtsLm9uUG9pbnRlckV4aXQoKCk9PnRoaXMuaGlkZVRvb2x0aXBzKCkpOwpyZXR1cm4gbH11cGRhdGVUb29sdGlwQ29udGVudChnKXt0aGlzLmxpbmVQbG90JiYod2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuX3Rvb2x0aXBVcGRhdGVBbmltYXRpb25GcmFtZSksdGhpcy5fdG9vbHRpcFVwZGF0ZUFuaW1hdGlvbkZyYW1lPXdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PntsZXQgbD17eDpnLngseTpnLnksZGF0dW06bnVsbCxkYXRhc2V0Om51bGx9LGs9dGhpcy5ncmlkbGluZXMuY29udGVudCgpLm5vZGUoKS5nZXRCQm94KCk7dmFyIG09dGhpcy5saW5lUGxvdC5kYXRhc2V0cygpLm1hcCh0PT50aGlzLmZpbmRDbG9zZXN0UG9pbnQobCx0KSkuZmlsdGVyKEJvb2xlYW4pO2xldCBwPVBsb3R0YWJsZS5VdGlscy5ET00uaW50ZXJzZWN0c0JCb3gscT1tLmZpbHRlcih0PT5wKHQueCx0Lnksayl8fGlzTmFOKHRoaXMueVZhbHVlQWNjZXNzb3IodC5kYXR1bSwwLHQuZGF0YXNldCkpKSxyPXEuZmlsdGVyKHQ9PiFpc05hTih0aGlzLnlWYWx1ZUFjY2Vzc29yKHQuZGF0dW0sCjAsdC5kYXRhc2V0KSkpOzAhPT1tLmxlbmd0aD8odGhpcy5zY2F0dGVyUGxvdC5hdHRyKCJkaXNwbGF5Iiwibm9uZSIpLG09dGhpcy50b29sdGlwUG9pbnRzQ29tcG9uZW50LmNvbnRlbnQoKS5zZWxlY3RBbGwoIi5wb2ludCIpLmRhdGEocix0PT50LmRhdGFzZXQubWV0YWRhdGEoKS5uYW1lKSxtLmVudGVyKCkuYXBwZW5kKCJjaXJjbGUiKS5jbGFzc2VkKCJwb2ludCIsITApLG0uYXR0cigiciIsYm0uVE9PTFRJUF9DSVJDTEVfU0laRSkuYXR0cigiY3giLHQ9PnQueCkuYXR0cigiY3kiLHQ9PnQueSkuc3R5bGUoInN0cm9rZSIsIm5vbmUiKS5hdHRyKCJmaWxsIix0PT50aGlzLmNvbG9yU2NhbGUuc2NhbGUodC5kYXRhc2V0Lm1ldGFkYXRhKCkubmFtZSkpLG0uZXhpdCgpLnJlbW92ZSgpLHRoaXMuZHJhd1Rvb2x0aXBzKHEsbCx0aGlzLnRvb2x0aXBDb2x1bW5zKSk6dGhpcy5oaWRlVG9vbHRpcHMoKX0pKX1oaWRlVG9vbHRpcHMoKXt3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5fdG9vbHRpcFVwZGF0ZUFuaW1hdGlvbkZyYW1lKTsKdGhpcy50b29sdGlwLmhpZGUoKTt0aGlzLnNjYXR0ZXJQbG90LmF0dHIoImRpc3BsYXkiLCJibG9jayIpO3RoaXMudG9vbHRpcFBvaW50c0NvbXBvbmVudC5jb250ZW50KCkuc2VsZWN0QWxsKCIucG9pbnQiKS5yZW1vdmUoKX1zZXR1cFRvb2x0aXBzKGcpe2cub25EZXRhY2goKCk9Pnt0aGlzLnRvb2x0aXBJbnRlcmFjdGlvbi5kZXRhY2hGcm9tKCk7dGhpcy50b29sdGlwSW50ZXJhY3Rpb24uZW5hYmxlZCghMSl9KTtnLm9uQW5jaG9yKCgpPT57dGhpcy50b29sdGlwSW50ZXJhY3Rpb24uYXR0YWNoVG8oZyk7dGhpcy50b29sdGlwSW50ZXJhY3Rpb24uZW5hYmxlZCghMCl9KX1kcmF3VG9vbHRpcHMoZyxsLGspe2lmKGcubGVuZ3RoKXt2YXIge2NvbG9yU2NhbGU6bX09dGhpcztrPVt7dGl0bGU6IiIsc3RhdGljOiExLGV2YWxUeXBlOmMuRE9NLGV2YWx1YXRlKHkpe2QzLnNlbGVjdCh0aGlzKS5zZWxlY3QoInNwYW4iKS5zdHlsZSgiYmFja2dyb3VuZC1jb2xvciIsKCk9Pm0uc2NhbGUoeS5kYXRhc2V0Lm1ldGFkYXRhKCkubmFtZSkpOwpyZXR1cm4iIn0sZW50ZXIoeSl7ZDMuc2VsZWN0KHRoaXMpLmFwcGVuZCgic3BhbiIpLmNsYXNzZWQoInN3YXRjaCIsITApLnN0eWxlKCJiYWNrZ3JvdW5kLWNvbG9yIiwoKT0+bS5zY2FsZSh5LmRhdGFzZXQubWV0YWRhdGEoKS5uYW1lKSl9fSwuLi5rXTt2YXIgcD15PT5NYXRoLnBvdyh5LngtbC54LDIpK01hdGgucG93KHkueS1sLnksMikscT1fLm1pbihnLm1hcChwKSkscj10aGlzLnNtb290aGluZ0VuYWJsZWQ/dGhpcy5zbW9vdGhlZEFjY2Vzc29yOnRoaXMueVZhbHVlQWNjZXNzb3I7Zz0iYXNjZW5kaW5nIj09PXRoaXMudG9vbHRpcFNvcnRpbmdNZXRob2Q/Xy5zb3J0QnkoZyx5PT5yKHkuZGF0dW0sLTEseS5kYXRhc2V0KSk6ImRlc2NlbmRpbmciPT09dGhpcy50b29sdGlwU29ydGluZ01ldGhvZD9fLnNvcnRCeShnLHk9PnIoeS5kYXR1bSwtMSx5LmRhdGFzZXQpKS5yZXZlcnNlKCk6Im5lYXJlc3QiPT09dGhpcy50b29sdGlwU29ydGluZ01ldGhvZD9fLnNvcnRCeShnLHApOmcuc2xpY2UoMCkucmV2ZXJzZSgpOwp2YXIgdD10aGlzLHY9ZDMuc2VsZWN0KHRoaXMudG9vbHRpcC5jb250ZW50KCkpLnNlbGVjdCgidGFibGUiKSxBPXYuc2VsZWN0KCJ0aGVhZCIpLnNlbGVjdEFsbCgidGgiKS5kYXRhKGsseT0+eS50aXRsZSk7QS5lbnRlcigpLmFwcGVuZCgidGgiKS50ZXh0KHk9PnkudGl0bGUpLm5vZGVzKCk7QS5leGl0KCkucmVtb3ZlKCk7Zz12LnNlbGVjdCgidGJvZHkiKS5zZWxlY3RBbGwoInRyIikuZGF0YShnLHk9PnkuZGF0YXNldC5tZXRhZGF0YSgpLm5hbWUpO2cuY2xhc3NlZCgiZGlzdGFudCIseT0+e3ZhciB4PXkuZGF0YXNldC5kYXRhKClbMF0sQz1fLmxhc3QoeS5kYXRhc2V0LmRhdGEoKSk7eD10aGlzLnhTY2FsZS5zY2FsZSh0aGlzLnhBY2Nlc3Nvcih4LDAseS5kYXRhc2V0KSk7Qz10aGlzLnhTY2FsZS5zY2FsZSh0aGlzLnhBY2Nlc3NvcihDLDAseS5kYXRhc2V0KSk7eT10aGlzLnNtb290aGluZ0VuYWJsZWQ/eS5kYXR1bS5zbW9vdGhlZDp0aGlzLnlWYWx1ZUFjY2Vzc29yKHkuZGF0dW0sCjAseS5kYXRhc2V0KTtyZXR1cm4gbC54PHh8fGwueD5DfHxpc05hTih5KX0pLmNsYXNzZWQoImNsb3Nlc3QiLHk9PnAoeSk9PT1xKS5lYWNoKGZ1bmN0aW9uKHkpe3QuZHJhd1Rvb2x0aXBSb3codGhpcyxrLHkpfSkub3JkZXIoKTtnLmV4aXQoKS5yZW1vdmUoKTtnLmVudGVyKCkuYXBwZW5kKCJ0ciIpLmVhY2goZnVuY3Rpb24oeSl7dC5kcmF3VG9vbHRpcFJvdyh0aGlzLGsseSl9KS5ub2RlcygpO3RoaXMudG9vbHRpcC51cGRhdGVBbmRQb3NpdGlvbih0aGlzLnRhcmdldFNWRy5ub2RlKCkpfWVsc2UgdGhpcy50b29sdGlwLmhpZGUoKX1kcmF3VG9vbHRpcFJvdyhnLGwsayl7Y29uc3QgbT10aGlzO2c9ZDMuc2VsZWN0KGcpLnNlbGVjdEFsbCgidGQiKS5kYXRhKGwpO2cuZWFjaChmdW5jdGlvbihwKXtwLnN0YXRpY3x8bS5kcmF3VG9vbHRpcENvbHVtbi5jYWxsKG0sdGhpcyxwLGspfSk7Zy5lbnRlcigpLmFwcGVuZCgidGQiKS5lYWNoKGZ1bmN0aW9uKHApe3AuZW50ZXImJnAuZW50ZXIuY2FsbCh0aGlzLAprKTttLmRyYXdUb29sdGlwQ29sdW1uLmNhbGwobSx0aGlzLHAsayl9KX1kcmF3VG9vbHRpcENvbHVtbihnLGwsayl7Y29uc3Qge3Ntb290aGluZ0VuYWJsZWQ6bX09dGhpcztsLmV2YWxUeXBlPT1jLkRPTT9sLmV2YWx1YXRlLmNhbGwoZyxrLHtzbW9vdGhpbmdFbmFibGVkOm19KTpkMy5zZWxlY3QoZykudGV4dChsLmV2YWx1YXRlLmNhbGwoZyxrLHtzbW9vdGhpbmdFbmFibGVkOm19KSl9ZmluZENsb3Nlc3RQb2ludChnLGwpe2NvbnN0IGs9bC5kYXRhKCkubWFwKChxLHIpPT50aGlzLnhTY2FsZS5zY2FsZSh0aGlzLnhBY2Nlc3NvcihxLHIsbCkpKTtsZXQgbT1fLnNvcnRlZEluZGV4KGssZy54KTtpZigwPT1rLmxlbmd0aClyZXR1cm4gbnVsbDttPT09ay5sZW5ndGg/LS1tOjAhPT1tJiYobT1NYXRoLmFicyhrW20tMV0tZy54KTxNYXRoLmFicyhrW21dLWcueCk/bS0xOm0pO2c9bC5kYXRhKClbbV07Y29uc3QgcD10aGlzLnNtb290aGluZ0VuYWJsZWQ/dGhpcy5zbW9vdGhlZEFjY2Vzc29yKGcsCm0sbCk6dGhpcy55VmFsdWVBY2Nlc3NvcihnLG0sbCk7cmV0dXJue3g6a1ttXSx5OnRoaXMueVNjYWxlLnNjYWxlKHApLGRhdHVtOmcsZGF0YXNldDpsfX1yZXNtb290aERhdGFzZXQoZyl7bGV0IGw9Zy5kYXRhKCk7Y29uc3Qgaz10aGlzLnNtb290aGluZ1dlaWdodDtsZXQgbT0wPGwubGVuZ3RoPzA6TmFOLHA9MDtjb25zdCBxPWwubWFwKCh0LHYpPT50aGlzLnlWYWx1ZUFjY2Vzc29yKHQsdixnKSkscj1xLmV2ZXJ5KHQ9PnQ9PXFbMF0pO2wuZm9yRWFjaCgodCx2KT0+e3Y9cVt2XTtyfHwhTnVtYmVyLmlzRmluaXRlKHYpP3Quc21vb3RoZWQ9djoobT1tKmsrKDEtaykqdixwKyssdj0xLDEhPT1rJiYodj0xLU1hdGgucG93KGsscCkpLHQuc21vb3RoZWQ9bS92KX0pfWdldERhdGFzZXQoZyl7dm9pZCAwPT09dGhpcy5uYW1lMmRhdGFzZXRzW2ddJiYodGhpcy5uYW1lMmRhdGFzZXRzW2ddPW5ldyBQbG90dGFibGUuRGF0YXNldChbXSx7bmFtZTpnLG1ldGE6bnVsbH0pKTtyZXR1cm4gdGhpcy5uYW1lMmRhdGFzZXRzW2ddfXN0YXRpYyBnZXRZU2NhbGVGcm9tVHlwZShnKXtpZihnPT09CmQuTE9HKXJldHVybiBuZXcgYS5Mb2dTY2FsZTtpZihnPT09ZC5MSU5FQVIpcmV0dXJuIG5ldyBhLkxpbmVhclNjYWxlO3Rocm93IEVycm9yKCJVbnJlY29nbml6ZWQgeVNjYWxlIHR5cGUgIitnKTt9c2V0VmlzaWJsZVNlcmllcyhnKXt0aGlzLnNlcmllc05hbWVzPWc9Zy5zb3J0KCk7Zy5yZXZlcnNlKCk7dGhpcy5kYXRhc2V0cy5mb3JFYWNoKGw9Pmwub2ZmVXBkYXRlKHRoaXMub25EYXRhc2V0Q2hhbmdlZCkpO3RoaXMuZGF0YXNldHM9Zy5tYXAobD0+dGhpcy5nZXREYXRhc2V0KGwpKTt0aGlzLmRhdGFzZXRzLmZvckVhY2gobD0+bC5vblVwZGF0ZSh0aGlzLm9uRGF0YXNldENoYW5nZWQpKTt0aGlzLmxpbmVQbG90LmRhdGFzZXRzKHRoaXMuZGF0YXNldHMpO3RoaXMuc21vb3RoaW5nRW5hYmxlZCYmdGhpcy5zbW9vdGhMaW5lUGxvdC5kYXRhc2V0cyh0aGlzLmRhdGFzZXRzKTt0aGlzLm1hcmdpbkFyZWFQbG90JiZ0aGlzLm1hcmdpbkFyZWFQbG90LmRhdGFzZXRzKHRoaXMuZGF0YXNldHMpOwp0aGlzLnVwZGF0ZVNwZWNpYWxEYXRhc2V0cygpfWNyZWF0ZVNhbXBsZWREYXRhc2V0Rm9yTWFya2VycyhnKXtjb25zdCBsPWcuZGF0YSgpO2lmKDIwPj1sLmxlbmd0aClyZXR1cm4gZztjb25zdCBrPU1hdGguY2VpbChsLmxlbmd0aC8yMCksbT1BcnJheShNYXRoLmZsb29yKGwubGVuZ3RoL2spKTtmb3IobGV0IHA9MCxxPTA7cDxtLmxlbmd0aDtwKysscSs9ayltW3BdPWxbcV07cmV0dXJuIG5ldyBQbG90dGFibGUuRGF0YXNldChtLGcubWV0YWRhdGEoKSl9c2V0U2VyaWVzRGF0YShnLGwpe3RoaXMuZ2V0RGF0YXNldChnKS5kYXRhKGwpO3RoaXMubWVhc3VyZUJCb3hBbmRNYXliZUludmFsaWRhdGVMYXlvdXRJblJhZigpfXNldFNlcmllc01ldGFkYXRhKGcsbCl7bD1PYmplY3QuYXNzaWduKHt9LHRoaXMuZ2V0RGF0YXNldChnKS5tZXRhZGF0YSgpLHttZXRhOmx9KTt0aGlzLmdldERhdGFzZXQoZykubWV0YWRhdGEobCl9c21vb3RoaW5nVXBkYXRlKGcpe3RoaXMuc21vb3RoaW5nV2VpZ2h0PQpnO3RoaXMuZGF0YXNldHMuZm9yRWFjaChsPT50aGlzLnJlc21vb3RoRGF0YXNldChsKSk7dGhpcy5zbW9vdGhpbmdFbmFibGVkfHwodGhpcy5saW5lUGxvdC5hZGRDbGFzcygiZ2hvc3QiKSx0aGlzLnNjYXR0ZXJQbG90LnkodGhpcy5zbW9vdGhlZEFjY2Vzc29yLHRoaXMueVNjYWxlKSx0aGlzLnNtb290aGluZ0VuYWJsZWQ9ITAsdGhpcy5zbW9vdGhMaW5lUGxvdC5kYXRhc2V0cyh0aGlzLmRhdGFzZXRzKSk7dGhpcy5tYXJrZXJzU2NhdHRlclBsb3QmJnRoaXMubWFya2Vyc1NjYXR0ZXJQbG90LnkodGhpcy5nZXRZQXhpc0FjY2Vzc29yKCksdGhpcy55U2NhbGUpO3RoaXMudXBkYXRlU3BlY2lhbERhdGFzZXRzKCl9c21vb3RoaW5nRGlzYWJsZSgpe3RoaXMuc21vb3RoaW5nRW5hYmxlZCYmKHRoaXMubGluZVBsb3QucmVtb3ZlQ2xhc3MoImdob3N0IiksdGhpcy5zY2F0dGVyUGxvdC55KHRoaXMueVZhbHVlQWNjZXNzb3IsdGhpcy55U2NhbGUpLHRoaXMuc21vb3RoTGluZVBsb3QuZGF0YXNldHMoW10pLAp0aGlzLnNtb290aGluZ0VuYWJsZWQ9ITEsdGhpcy51cGRhdGVTcGVjaWFsRGF0YXNldHMoKSk7dGhpcy5tYXJrZXJzU2NhdHRlclBsb3QmJnRoaXMubWFya2Vyc1NjYXR0ZXJQbG90LnkodGhpcy5nZXRZQXhpc0FjY2Vzc29yKCksdGhpcy55U2NhbGUpfXNldFRvb2x0aXBTb3J0aW5nTWV0aG9kKGcpe3RoaXMudG9vbHRpcFNvcnRpbmdNZXRob2Q9Z31yZW5kZXJUbyhnKXt0aGlzLnRhcmdldFNWRz1nO3RoaXMub3V0ZXIucmVuZGVyVG8oZyk7bnVsbCE9dGhpcy5fZGVmYXVsdFhSYW5nZSYmdGhpcy5yZXNldFhEb21haW4oKTtudWxsIT10aGlzLl9kZWZhdWx0WVJhbmdlJiZ0aGlzLnJlc2V0WURvbWFpbigpO3RoaXMubWVhc3VyZUJCb3hBbmRNYXliZUludmFsaWRhdGVMYXlvdXRJblJhZigpfXJlZHJhdygpe3dpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9yZWRyYXdSYWYpO3RoaXMuX3JlZHJhd1JhZj13aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57dGhpcy5tZWFzdXJlQkJveEFuZE1heWJlSW52YWxpZGF0ZUxheW91dCgpOwp0aGlzLm91dGVyLnJlZHJhdygpfSl9bWVhc3VyZUJCb3hBbmRNYXliZUludmFsaWRhdGVMYXlvdXRJblJhZigpe3dpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9pbnZhbGlkYXRlTGF5b3V0UmFmKTt0aGlzLl9pbnZhbGlkYXRlTGF5b3V0UmFmPXdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9Pnt0aGlzLm1lYXN1cmVCQm94QW5kTWF5YmVJbnZhbGlkYXRlTGF5b3V0KCl9KX1tZWFzdXJlQkJveEFuZE1heWJlSW52YWxpZGF0ZUxheW91dCgpe2lmKHRoaXMuX2xhc3REcmF3QkJveCl7Y29uc3Qge3dpZHRoOmd9PXRoaXMuX2xhc3REcmF3QkJveCx7d2lkdGg6bH09dGhpcy50YXJnZXRTVkcubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOzA9PWcmJmc8bCYmdGhpcy5vdXRlci5pbnZhbGlkYXRlQ2FjaGUoKX10aGlzLl9sYXN0RHJhd0JCb3g9dGhpcy50YXJnZXRTVkcubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpfWRlc3Ryb3koKXt3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5fcmVkcmF3UmFmKTsKd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuX2ludmFsaWRhdGVMYXlvdXRSYWYpO3RoaXMub3V0ZXImJnRoaXMub3V0ZXIuZGVzdHJveSgpfW9uQW5jaG9yKGcpe2lmKHRoaXMub3V0ZXIpdGhpcy5vdXRlci5vbkFuY2hvcihnKX19YS5MaW5lQ2hhcnQ9Zn0pKGVtfHwoZW09e30pKTsKPC9zY3JpcHQ+CiAgPHNjcmlwdD4vL35+V0VCUEFUSH5+L3Z6LWxpbmUtY2hhcnQyL3Z6LWxpbmUtY2hhcnQyLmpzCihmdW5jdGlvbihhKXtjb25zdCBjPWJtLm11bHRpc2NhbGVGb3JtYXR0ZXIoYm0uWV9UT09MVElQX0ZPUk1BVFRFUl9QUkVDSVNJT04pLGQ9Zj0+aXNOYU4oZik/Ik5hTiI6YyhmKTthLkRFRkFVTFRfVE9PTFRJUF9DT0xVTU5TPVt7dGl0bGU6Ik5hbWUiLGV2YWx1YXRlOmY9PmYuZGF0YXNldC5tZXRhZGF0YSgpLm5hbWV9LHt0aXRsZToiU21vb3RoZWQiLGV2YWx1YXRlKGYsZyl7KHtzbW9vdGhpbmdFbmFibGVkOmd9PWcpO3JldHVybiBkKGc/Zi5kYXR1bS5zbW9vdGhlZDpmLmRhdHVtLnNjYWxhcil9fSx7dGl0bGU6IlZhbHVlIixldmFsdWF0ZTpmPT5kKGYuZGF0dW0uc2NhbGFyKX0se3RpdGxlOiJTdGVwIixldmFsdWF0ZTpmPT5ibS5zdGVwRm9ybWF0dGVyKGYuZGF0dW0uc3RlcCl9LHt0aXRsZToiVGltZSIsZXZhbHVhdGU6Zj0+Ym0udGltZUZvcm1hdHRlcihmLmRhdHVtLndhbGxfdGltZSl9LHt0aXRsZToiUmVsYXRpdmUiLGV2YWx1YXRlOmY9PmJtLnJlbGF0aXZlRm9ybWF0dGVyKGJtLnJlbGF0aXZlQWNjZXNzb3IoZi5kYXR1bSwKLTEsZi5kYXRhc2V0KSl9XTtQb2x5bWVyKHtpczoidnotbGluZS1jaGFydDIiLHByb3BlcnRpZXM6e2NvbG9yU2NhbGU6e3R5cGU6T2JqZWN0LHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuKG5ldyBQbG90dGFibGUuU2NhbGVzLkNvbG9yKS5yYW5nZShkMy5zY2hlbWVDYXRlZ29yeTEwKX19LHN5bWJvbEZ1bmN0aW9uOk9iamVjdCxzbW9vdGhpbmdFbmFibGVkOnt0eXBlOkJvb2xlYW4sbm90aWZ5OiEwLHZhbHVlOiExfSxzbW9vdGhpbmdXZWlnaHQ6e3R5cGU6TnVtYmVyLHZhbHVlOi42fSx4VHlwZTp7dHlwZTpTdHJpbmcsdmFsdWU6IiJ9LHhDb21wb25lbnRzQ3JlYXRpb25NZXRob2Q6e3R5cGU6T2JqZWN0LHZhbHVlOiIifSx4QXhpc0Zvcm1hdHRlcjpPYmplY3QseVZhbHVlQWNjZXNzb3I6e3R5cGU6T2JqZWN0LHZhbHVlOigpPT5mPT5mLnNjYWxhcn0sdG9vbHRpcENvbHVtbnM6e3R5cGU6QXJyYXksdmFsdWU6KCk9PmEuREVGQVVMVF9UT09MVElQX0NPTFVNTlN9LGZpbGxBcmVhOk9iamVjdCwKZGVmYXVsdFhSYW5nZTpBcnJheSxkZWZhdWx0WVJhbmdlOkFycmF5LHlTY2FsZVR5cGU6e3R5cGU6U3RyaW5nLHZhbHVlOiJsaW5lYXIifSxpZ25vcmVZT3V0bGllcnM6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sdG9vbHRpcFNvcnRpbmdNZXRob2Q6e3R5cGU6U3RyaW5nLHZhbHVlOiJkZWZhdWx0In0sdG9vbHRpcFBvc2l0aW9uOnt0eXBlOlN0cmluZyx2YWx1ZTpjbS5Ub29sdGlwUG9zaXRpb24uQk9UVE9NfSxfY2hhcnQ6T2JqZWN0LF92aXNpYmxlU2VyaWVzQ2FjaGU6e3R5cGU6QXJyYXksdmFsdWU6KCk9PltdfSxfc2VyaWVzRGF0YUNhY2hlOnt0eXBlOk9iamVjdCx2YWx1ZTooKT0+KHt9KX0sX3Nlcmllc01ldGFkYXRhQ2FjaGU6e3R5cGU6T2JqZWN0LHZhbHVlOigpPT4oe30pfSxfbWFrZUNoYXJ0QXN5bmNDYWxsYmFja0lkOnt0eXBlOk51bWJlcix2YWx1ZTpudWxsfX0sb2JzZXJ2ZXJzOlsiX21ha2VDaGFydCh4Q29tcG9uZW50c0NyZWF0aW9uTWV0aG9kLCB4VHlwZSwgeVZhbHVlQWNjZXNzb3IsIHlTY2FsZVR5cGUsIHRvb2x0aXBDb2x1bW5zLCBjb2xvclNjYWxlLCBpc0F0dGFjaGVkKSIsCiJfcmVsb2FkRnJvbUNhY2hlKF9jaGFydCwgX3Zpc2libGVTZXJpZXNDYWNoZSkiLCJfc21vb3RoaW5nQ2hhbmdlZChzbW9vdGhpbmdFbmFibGVkLCBzbW9vdGhpbmdXZWlnaHQsIF9jaGFydCkiLCJfdG9vbHRpcFNvcnRpbmdNZXRob2RDaGFuZ2VkKHRvb2x0aXBTb3J0aW5nTWV0aG9kLCBfY2hhcnQpIiwiX291dGxpZXJzQ2hhbmdlZChpZ25vcmVZT3V0bGllcnMsIF9jaGFydCkiXSxyZWFkeSgpe3RoaXMuc2NvcGVTdWJ0cmVlKHRoaXMuJC5jaGFydGRpdiwhMCl9LGF0dGFjaGVkKCl7Y29uc3QgZj17Y2FwdHVyZTohMCxwYXNzaXZlOiEwfTt0aGlzLl9saXN0ZW4odGhpcywibW91c2Vkb3duIix0aGlzLl9vbk1vdXNlRG93bi5iaW5kKHRoaXMpLGYpO3RoaXMuX2xpc3Rlbih0aGlzLCJtb3VzZXVwIix0aGlzLl9vbk1vdXNlVXAuYmluZCh0aGlzKSxmKTt0aGlzLl9saXN0ZW4od2luZG93LCJrZXlkb3duIix0aGlzLl9vbktleURvd24uYmluZCh0aGlzKSxmKTt0aGlzLl9saXN0ZW4od2luZG93LAoia2V5dXAiLHRoaXMuX29uS2V5VXAuYmluZCh0aGlzKSxmKX0sZGV0YWNoZWQoKXt0aGlzLmNhbmNlbEFzeW5jKHRoaXMuX21ha2VDaGFydEFzeW5jQ2FsbGJhY2tJZCk7dGhpcy5fY2hhcnQmJnRoaXMuX2NoYXJ0LmRlc3Ryb3koKTt0aGlzLl9saXN0ZW5lcnMmJih0aGlzLl9saXN0ZW5lcnMuZm9yRWFjaCgoe25vZGU6ZixldmVudE5hbWU6ZyxmdW5jOmwsb3B0aW9uOmt9KT0+e2YucmVtb3ZlRXZlbnRMaXN0ZW5lcihnLGwsayl9KSx0aGlzLl9saXN0ZW5lcnMuY2xlYXIoKSl9LF9saXN0ZW4oZixnLGwsaz17fSl7dGhpcy5fbGlzdGVuZXJzfHwodGhpcy5fbGlzdGVuZXJzPW5ldyBTZXQpO3RoaXMuX2xpc3RlbmVycy5hZGQoe25vZGU6ZixldmVudE5hbWU6ZyxmdW5jOmwsb3B0aW9uOmt9KTtmLmFkZEV2ZW50TGlzdGVuZXIoZyxsLGspfSxfb25LZXlEb3duKGYpe3RoaXMudG9nZ2xlQ2xhc3MoInBhbmtleSIsYS5QYW5ab29tRHJhZ0xheWVyLmlzUGFuS2V5KGYpKX0sX29uS2V5VXAoZil7dGhpcy50b2dnbGVDbGFzcygicGFua2V5IiwKYS5QYW5ab29tRHJhZ0xheWVyLmlzUGFuS2V5KGYpKX0sX29uTW91c2VEb3duKCl7dGhpcy50b2dnbGVDbGFzcygibW91c2Vkb3duIiwhMCl9LF9vbk1vdXNlVXAoKXt0aGlzLnRvZ2dsZUNsYXNzKCJtb3VzZWRvd24iLCExKX0sc2V0VmlzaWJsZVNlcmllczpmdW5jdGlvbihmKXtfLmlzRXF1YWwodGhpcy5fdmlzaWJsZVNlcmllc0NhY2hlLGYpfHwodGhpcy5fdmlzaWJsZVNlcmllc0NhY2hlPWYpfSxzZXRTZXJpZXNEYXRhOmZ1bmN0aW9uKGYsZyl7dGhpcy5fc2VyaWVzRGF0YUNhY2hlW2ZdPWc7dGhpcy5fY2hhcnQmJnRoaXMuX2NoYXJ0LnNldFNlcmllc0RhdGEoZixnKX0sc2V0U2VyaWVzTWV0YWRhdGEoZixnKXt0aGlzLl9zZXJpZXNNZXRhZGF0YUNhY2hlW2ZdPWc7dGhpcy5fY2hhcnQmJnRoaXMuX2NoYXJ0LnNldFNlcmllc01ldGFkYXRhKGYsZyl9LHJlc2V0RG9tYWluOmZ1bmN0aW9uKCl7dGhpcy5fY2hhcnQmJnRoaXMuX2NoYXJ0LnJlc2V0RG9tYWluKCl9LHJlZHJhdzpmdW5jdGlvbigpe3RoaXMuX2NoYXJ0JiYKdGhpcy5fY2hhcnQucmVkcmF3KCl9LF9tYWtlQ2hhcnQ6ZnVuY3Rpb24oZixnLGwsayxtLHApe2d8fGY/ZyYmKGY9KCk9PmJtLmdldFhDb21wb25lbnRzKGcpKTpmPWJtLnN0ZXBYO251bGwhPT10aGlzLl9tYWtlQ2hhcnRBc3luY0NhbGxiYWNrSWQmJih0aGlzLmNhbmNlbEFzeW5jKHRoaXMuX21ha2VDaGFydEFzeW5jQ2FsbGJhY2tJZCksdGhpcy5fbWFrZUNoYXJ0QXN5bmNDYWxsYmFja0lkPW51bGwpO3RoaXMuX21ha2VDaGFydEFzeW5jQ2FsbGJhY2tJZD10aGlzLmFzeW5jKGZ1bmN0aW9uKCl7dGhpcy5fbWFrZUNoYXJ0QXN5bmNDYWxsYmFja0lkPW51bGw7aWYoZiYmdGhpcy55VmFsdWVBY2Nlc3NvciYmdGhpcy50b29sdGlwQ29sdW1ucyl7dmFyIHE9bmV3IGEuTGluZUNoYXJ0KGYsdGhpcy55VmFsdWVBY2Nlc3NvcixrLHAsdGhpcy4kLnRvb2x0aXAsdGhpcy50b29sdGlwQ29sdW1ucyx0aGlzLmZpbGxBcmVhLHRoaXMuZGVmYXVsdFhSYW5nZSx0aGlzLmRlZmF1bHRZUmFuZ2UsCnRoaXMuc3ltYm9sRnVuY3Rpb24sdGhpcy54QXhpc0Zvcm1hdHRlcikscj1kMy5zZWxlY3QodGhpcy4kLmNoYXJ0ZGl2KTtxLnJlbmRlclRvKHIpO3RoaXMuX2NoYXJ0JiZ0aGlzLl9jaGFydC5kZXN0cm95KCk7dGhpcy5fY2hhcnQ9cTt0aGlzLl9jaGFydC5vbkFuY2hvcigoKT0+dGhpcy5maXJlKCJjaGFydC1hdHRhY2hlZCIpKX19LDM1MCl9LF9yZWxvYWRGcm9tQ2FjaGU6ZnVuY3Rpb24oKXt0aGlzLl9jaGFydCYmKHRoaXMuX3Zpc2libGVTZXJpZXNDYWNoZS5mb3JFYWNoKGY9Pnt0aGlzLl9jaGFydC5zZXRTZXJpZXNEYXRhKGYsdGhpcy5fc2VyaWVzRGF0YUNhY2hlW2ZdfHxbXSl9KSx0aGlzLl92aXNpYmxlU2VyaWVzQ2FjaGUuZmlsdGVyKGY9PnRoaXMuX3Nlcmllc01ldGFkYXRhQ2FjaGVbZl0pLmZvckVhY2goZj0+e3RoaXMuX2NoYXJ0LnNldFNlcmllc01ldGFkYXRhKGYsdGhpcy5fc2VyaWVzTWV0YWRhdGFDYWNoZVtmXSl9KSx0aGlzLl9jaGFydC5zZXRWaXNpYmxlU2VyaWVzKHRoaXMuX3Zpc2libGVTZXJpZXNDYWNoZSkpfSwKX3Ntb290aGluZ0NoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLl9jaGFydCYmKHRoaXMuc21vb3RoaW5nRW5hYmxlZD90aGlzLl9jaGFydC5zbW9vdGhpbmdVcGRhdGUodGhpcy5zbW9vdGhpbmdXZWlnaHQpOnRoaXMuX2NoYXJ0LnNtb290aGluZ0Rpc2FibGUoKSl9LF9vdXRsaWVyc0NoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLl9jaGFydCYmdGhpcy5fY2hhcnQuaWdub3JlWU91dGxpZXJzKHRoaXMuaWdub3JlWU91dGxpZXJzKX0sX3Rvb2x0aXBTb3J0aW5nTWV0aG9kQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMuX2NoYXJ0JiZ0aGlzLl9jaGFydC5zZXRUb29sdGlwU29ydGluZ01ldGhvZCh0aGlzLnRvb2x0aXBTb3J0aW5nTWV0aG9kKX0sZ2V0RXhwb3J0ZXIoKXtyZXR1cm4gbmV3IGEuTGluZUNoYXJ0RXhwb3J0ZXIodGhpcy4kLmNoYXJ0ZGl2KX19KX0pKGVtfHwoZW09e30pKTsKPC9zY3JpcHQ+CjwvZG9tLW1vZHVsZT4KCjxkb20tbW9kdWxlIGlkPSJ2ei1saW5lLWNoYXJ0LXRvb2x0aXAiPgogIDx0ZW1wbGF0ZT4KICAgIDxkaXYgY2xhc3M9ImNvbnRlbnQiPgogICAgICA8dGFibGU+CiAgICAgICAgPHRoZWFkPjwvdGhlYWQ+CiAgICAgICAgPHRib2R5PjwvdGJvZHk+CiAgICAgIDwvdGFibGU+CiAgICA8L2Rpdj4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CgogICAgICAuY29udGVudCB7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjgpOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBjb2xvcjogI2ZmZjsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CgogICAgICB0YWJsZSB7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjRlbTsKICAgICAgICBtYXJnaW4tdG9wOiAxMHB4OwogICAgICAgIHBhZGRpbmc6IDhweDsKICAgICAgfQoKICAgICAgdGhlYWQgewogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgfQoKICAgICAgdGJvZHkgewogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBsaW5lLWhlaWdodDogMjFweDsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICB9CgogICAgICB0ZCB7CiAgICAgICAgcGFkZGluZzogMCA1cHg7CiAgICAgIH0KCiAgICAgIC5zd2F0Y2ggewogICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBoZWlnaHQ6IDE4cHg7CiAgICAgICAgd2lkdGg6IDE4cHg7CiAgICAgIH0KCiAgICAgIC5jbG9zZXN0IC5zd2F0Y2ggewogICAgICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMCAwIDJweCAjZmZmOwogICAgICB9CgogICAgICB0aCB7CiAgICAgICAgcGFkZGluZzogMCA1cHg7CiAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsKICAgICAgfQoKICAgICAgLmRpc3RhbnQgdGQ6bm90KC5zd2F0Y2gpIHsKICAgICAgICBvcGFjaXR5OiAwLjg7CiAgICAgIH0KCiAgICAgIC5naG9zdCB7CiAgICAgICAgb3BhY2l0eTogMC4yOwogICAgICAgIHN0cm9rZS13aWR0aDogMXB4OwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CiAgPHNjcmlwdD4vL35+V0VCUEFUSH5+L3Z6LWxpbmUtY2hhcnQyL3Z6LWxpbmUtY2hhcnQyLmh0bWwuanMKUG9seW1lcih7aXM6InZ6LWxpbmUtY2hhcnQtdG9vbHRpcCJ9KTsKPC9zY3JpcHQ+CjwvZG9tLW1vZHVsZT4KCgoKPGRvbS1tb2R1bGUgaWQ9InRmLWxpbmUtY2hhcnQtZGF0YS1sb2FkZXIiPgogIDx0ZW1wbGF0ZT4KICAgIDxkaXYgaWQ9ImNoYXJ0LWFuZC1zcGlubmVyLWNvbnRhaW5lciI+CiAgICAgIDx2ei1saW5lLWNoYXJ0MiBpZD0iY2hhcnQiIGNvbG9yLXNjYWxlPSJbW2NvbG9yU2NhbGVdXSIgZGVmYXVsdC14LXJhbmdlPSJbW2RlZmF1bHRYUmFuZ2VdXSIgZGVmYXVsdC15LXJhbmdlPSJbW2RlZmF1bHRZUmFuZ2VdXSIgZmlsbC1hcmVhPSJbW2ZpbGxBcmVhXV0iIGlnbm9yZS15LW91dGxpZXJzPSJbW2lnbm9yZVlPdXRsaWVyc11dIiBvbi1jaGFydC1hdHRhY2hlZD0iX29uQ2hhcnRBdHRhY2hlZCIgc21vb3RoaW5nLWVuYWJsZWQ9Iltbc21vb3RoaW5nRW5hYmxlZF1dIiBzbW9vdGhpbmctd2VpZ2h0PSJbW3Ntb290aGluZ1dlaWdodF1dIiBzdHlsZT0iW1tfY29tcHV0ZUxpbmVDaGFydFN0eWxlKGRhdGFMb2FkaW5nKV1dIiBzeW1ib2wtZnVuY3Rpb249Iltbc3ltYm9sRnVuY3Rpb25dXSIgdG9vbHRpcC1jb2x1bW5zPSJbW3Rvb2x0aXBDb2x1bW5zXV0iIHRvb2x0aXAtcG9zaXRpb249IltbdG9vbHRpcFBvc2l0aW9uXV0iIHRvb2x0aXAtc29ydGluZy1tZXRob2Q9IltbdG9vbHRpcFNvcnRpbmdNZXRob2RdXSIgeC1jb21wb25lbnRzLWNyZWF0aW9uLW1ldGhvZD0iW1t4Q29tcG9uZW50c0NyZWF0aW9uTWV0aG9kXV0iIHgtdHlwZT0iW1t4VHlwZV1dIiB5LXZhbHVlLWFjY2Vzc29yPSJbW3lWYWx1ZUFjY2Vzc29yXV0iPjwvdnotbGluZS1jaGFydDI+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tkYXRhTG9hZGluZ11dIj4KICAgICAgICA8ZGl2IGlkPSJsb2FkaW5nLXNwaW5uZXItY29udGFpbmVyIj4KICAgICAgICAgIDxwYXBlci1zcGlubmVyLWxpdGUgYWN0aXZlPjwvcGFwZXItc3Bpbm5lci1saXRlPgogICAgICAgIDwvZGl2PgogICAgICA8L3RlbXBsYXRlPgogICAgPC9kaXY+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICB9CgogICAgICA6aG9zdChbX21heWJlLXJlbmRlcmVkLWluLWJhZC1zdGF0ZV0pIHZ6LWxpbmUtY2hhcnQgewogICAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjsKICAgICAgfQoKICAgICAgI2NoYXJ0LWFuZC1zcGlubmVyLWNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICAjbG9hZGluZy1zcGlubmVyLWNvbnRhaW5lciB7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIHRvcDogMDsKICAgICAgfQoKICAgICAgdnotbGluZS1jaGFydCB7CiAgICAgICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CiAgPHNjcmlwdD4vL35+V0VCUEFUSH5+L3Z6LWxpbmUtY2hhcnQyL2xpbmUtY2hhcnQtZXhwb3J0ZXIuanMKKGZ1bmN0aW9uKGEpe2xldCBjOyhmdW5jdGlvbihnKXtnLkdST1VQPSJHIjtnLkRJVj0iRElWIjtnLlNWRz0iU1ZHIjtnLlRFWFQ9IlRFWFQifSkoY3x8KGM9e30pKTtjbGFzcyBke2NvbnN0cnVjdG9yKGcpe3RoaXMudW5pcXVlSWQ9MDt0aGlzLnJvb3Q9Z31leHBvcnRBc1N0cmluZygpe2NvbnN0IGc9dGhpcy5jb252ZXJ0KHRoaXMucm9vdCk7aWYoIWcpcmV0dXJuIiI7Y29uc3QgbD10aGlzLmNyZWF0ZVJvb3RTdmcoKTtsLmFwcGVuZENoaWxkKGcpO3JldHVybiBsLm91dGVySFRNTH1jcmVhdGVVbmlxdWVJZCgpe3JldHVybmAkeyJjbGlwIn1fJHt0aGlzLnVuaXF1ZUlkKyt9YH1nZXRTaXplKCl7cmV0dXJuIHRoaXMucm9vdC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKX1jcmVhdGVSb290U3ZnKCl7Y29uc3QgZz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdmciKSxsPXRoaXMuZ2V0U2l6ZSgpO2cuc2V0QXR0cmlidXRlTlMoInN2ZyIsInZpZXdCb3giLGAwIDAgJHtsLndpZHRofSAke2wuaGVpZ2h0fWApOwpnLnNldEF0dHJpYnV0ZSgieG1sbnMiLCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIpO3JldHVybiBnfWNvbnZlcnQoZyl7bGV0IGw9bnVsbDt2YXIgaz1nLm5vZGVOYW1lLnRvVXBwZXJDYXNlKCk7aWYoZy5ub2RlVHlwZSE9Tm9kZS5FTEVNRU5UX05PREV8fGshPWMuRElWJiZrIT1jLlNWRylsPWcuY2xvbmVOb2RlKCk7ZWxzZXtsPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoYy5HUk9VUCk7dmFyIG09d2luZG93LmdldENvbXB1dGVkU3R5bGUoZykscD1wYXJzZUludChtLmxlZnQsMTApLHE9cGFyc2VJbnQobS50b3AsMTApO2lmKHB8fHEpaz10aGlzLmNyZWF0ZVVuaXF1ZUlkKCksbC5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgke3B9LCAke3F9KWApLGwuc2V0QXR0cmlidXRlKCJjbGlwLXBhdGgiLGB1cmwoIyR7a30pYCkscT1wYXJzZUludChtLmhlaWdodCwxMCkscD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJyZWN0IikscC5zZXRBdHRyaWJ1dGUoIndpZHRoIiwKU3RyaW5nKHBhcnNlSW50KG0ud2lkdGgsMTApKSkscC5zZXRBdHRyaWJ1dGUoImhlaWdodCIsU3RyaW5nKHEpKSxtPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygic3ZnIiwiY2xpcFBhdGgiKSxtLmlkPWssbS5hcHBlbmRDaGlsZChwKSxsLmFwcGVuZENoaWxkKG0pfUFycmF5LmZyb20oZy5jaGlsZE5vZGVzKS5tYXAocj0+dGhpcy5jb252ZXJ0KHIpKS5maWx0ZXIoQm9vbGVhbikuZm9yRWFjaChyPT5sLmFwcGVuZENoaWxkKHIpKTtyZXR1cm4gbC5ub2RlTmFtZS50b1VwcGVyQ2FzZSgpPT1jLkdST1VQJiYhbC5oYXNDaGlsZE5vZGVzKCl8fHRoaXMuc2hvdWxkT21pdE5vZGUoZyk/bnVsbDp0aGlzLnN0cmlwQ2xhc3ModGhpcy50cmFuc2ZlclN0eWxlKGcsbCkpfXN0cmlwQ2xhc3MoZyl7Zy5ub2RlVHlwZT09Tm9kZS5FTEVNRU5UX05PREUmJmcucmVtb3ZlQXR0cmlidXRlKCJjbGFzcyIpO3JldHVybiBnfXRyYW5zZmVyU3R5bGUoZyxsKXtpZihsLm5vZGVUeXBlIT1Ob2RlLkVMRU1FTlRfTk9ERSlyZXR1cm4gbDsKY29uc3Qgaz1sLm5vZGVOYW1lLnRvVXBwZXJDYXNlKCk7Zz13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShnKTtrPT1jLlRFWFQmJk9iamVjdC5hc3NpZ24obC5zdHlsZSx7Zm9udEZhbWlseTpnLmZvbnRGYW1pbHksZm9udFNpemU6Zy5mb250U2l6ZSxmb250V2VpZ2h0OmcuZm9udFdlaWdodH0pO2shPWMuR1JPVVAmJihsLnNldEF0dHJpYnV0ZSgiZmlsbCIsZy5maWxsKSxsLnNldEF0dHJpYnV0ZSgic3Ryb2tlIixnLnN0cm9rZSksbC5zZXRBdHRyaWJ1dGUoInN0cm9rZS13aWR0aCIsZy5zdHJva2VXaWR0aCkpOyIxIiE9Zy5vcGFjaXR5JiZsLnNldEF0dHJpYnV0ZSgib3BhY2l0eSIsZy5vcGFjaXR5KTtyZXR1cm4gbH1zaG91bGRPbWl0Tm9kZSgpe3JldHVybiExfX1hLlBsb3R0YWJsZUV4cG9ydGVyPWQ7Y2xhc3MgZiBleHRlbmRzIGR7c2hvdWxkT21pdE5vZGUoZyl7cmV0dXJuIGcubm9kZVR5cGU9PU5vZGUuRUxFTUVOVF9OT0RFP2cuY2xhc3NMaXN0LmNvbnRhaW5zKCJzY2F0dGVyLXBsb3QiKToKITF9fWEuTGluZUNoYXJ0RXhwb3J0ZXI9Zn0pKGVtfHwoZW09e30pKTsKPC9zY3JpcHQ+CiAgPHNjcmlwdD4vL35+V0VCUEFUSH5+L3RmLWxpbmUtY2hhcnQtZGF0YS1sb2FkZXIvdGYtbGluZS1jaGFydC1kYXRhLWxvYWRlci5odG1sLmpzCihmdW5jdGlvbigpe2NvbnN0IGE9W10sYz1mdW5jdGlvbigpe3JldHVybiBfLnRocm90dGxlKGZ1bmN0aW9uIGYoKXtpZigwIT1hLmxlbmd0aCl7dmFyIGc9YS5zaGlmdCgpO2cuYWN0aXZlJiYoZy5yZWRyYXcoKSxnLl9tYXliZVJlbmRlcmVkSW5CYWRTdGF0ZT0hMSk7d2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKDApO3dpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZil9fSwxMDApfSgpO1BvbHltZXIoe2lzOiJ0Zi1saW5lLWNoYXJ0LWRhdGEtbG9hZGVyIixwcm9wZXJ0aWVzOnthY3RpdmU6e3R5cGU6Qm9vbGVhbixvYnNlcnZlcjoiX2ZpeEJhZFN0YXRlV2hlbkFjdGl2ZSJ9LGRhdGFTZXJpZXM6QXJyYXkscmVxdWVzdE1hbmFnZXI6T2JqZWN0LGxvZ1NjYWxlQWN0aXZlOnt0eXBlOkJvb2xlYW4sb2JzZXJ2ZXI6Il9sb2dTY2FsZUNoYW5nZWQifSx4Q29tcG9uZW50c0NyZWF0aW9uTWV0aG9kOk9iamVjdCx4VHlwZTpTdHJpbmcseVZhbHVlQWNjZXNzb3I6T2JqZWN0LGZpbGxBcmVhOk9iamVjdCwKc21vb3RoaW5nRW5hYmxlZDpCb29sZWFuLHNtb290aGluZ1dlaWdodDpOdW1iZXIsdG9vbHRpcENvbHVtbnM6QXJyYXksdG9vbHRpcFNvcnRpbmdNZXRob2Q6U3RyaW5nLHRvb2x0aXBQb3NpdGlvbjpTdHJpbmcsaWdub3JlWU91dGxpZXJzOkJvb2xlYW4sZGVmYXVsdFhSYW5nZTpBcnJheSxkZWZhdWx0WVJhbmdlOkFycmF5LHN5bWJvbEZ1bmN0aW9uOk9iamVjdCxjb2xvclNjYWxlOnt0eXBlOk9iamVjdCx2YWx1ZTooKT0+KHtzY2FsZTpabC5ydW5zQ29sb3JTY2FsZX0pfSxfcmVzZXREb21haW5Pbk5leHRMb2FkOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITB9LF9tYXliZVJlbmRlcmVkSW5CYWRTdGF0ZTp7dHlwZTpCb29sZWFuLHZhbHVlOiExLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH19LGJlaGF2aW9yczpbV2wuRGF0YUxvYWRlckJlaGF2aW9yXSxvYnNlcnZlcnM6WyJfZGF0YVNlcmllc0NoYW5nZWQoZGF0YVNlcmllcy4qKSIsIl9sb2FkS2V5Q2hhbmdlZChsb2FkS2V5KSJdLG9uTG9hZEZpbmlzaCgpezA8CnRoaXMuZGF0YVRvTG9hZC5sZW5ndGgmJnRoaXMuX3Jlc2V0RG9tYWluT25OZXh0TG9hZCYmKHRoaXMuX3Jlc2V0RG9tYWluT25OZXh0TG9hZD0hMSx0aGlzLiQuY2hhcnQucmVzZXREb21haW4oKSk7dGhpcy5yZWRyYXcoKX0sZGV0YWNoZWQoKXtjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9yZWRyYXdSYWYpfSxleHBvcnRBc1N2Z1N0cmluZygpe3JldHVybiB0aGlzLiQuY2hhcnQuZ2V0RXhwb3J0ZXIoKS5leHBvcnRBc1N0cmluZygpfSxyZXNldERvbWFpbigpe3RoaXMuJC5jaGFydC5yZXNldERvbWFpbigpfSxzZXRTZXJpZXNEYXRhKGQsZil7dGhpcy4kLmNoYXJ0LnNldFNlcmllc0RhdGEoZCxmKX0sc2V0U2VyaWVzTWV0YWRhdGEoZCxmKXt0aGlzLiQuY2hhcnQuc2V0U2VyaWVzTWV0YWRhdGEoZCxmKX0scmVkcmF3KCl7Y2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5fcmVkcmF3UmFmKTt0aGlzLl9yZWRyYXdSYWY9d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e3RoaXMuYWN0aXZlPwp0aGlzLiQuY2hhcnQucmVkcmF3KCk6dGhpcy5fbWF5YmVSZW5kZXJlZEluQmFkU3RhdGU9ITB9KX0sX2xvYWRLZXlDaGFuZ2VkKCl7dGhpcy5yZXNldCgpO3RoaXMuX3Jlc2V0RG9tYWluT25OZXh0TG9hZD0hMH0sX2RhdGFTZXJpZXNDaGFuZ2VkKCl7dGhpcy4kLmNoYXJ0LnNldFZpc2libGVTZXJpZXModGhpcy5kYXRhU2VyaWVzKX0sX2xvZ1NjYWxlQ2hhbmdlZChkKXt0aGlzLiQuY2hhcnQueVNjYWxlVHlwZT1kPyJsb2ciOiJsaW5lYXIiO3RoaXMucmVkcmF3KCl9LF9jb21wdXRlTGluZUNoYXJ0U3R5bGUoZCl7cmV0dXJuIGQ/Im9wYWNpdHk6IDAuMzsiOiIifSxfZml4QmFkU3RhdGVXaGVuQWN0aXZlKCl7dGhpcy5hY3RpdmUmJnRoaXMuX21heWJlUmVuZGVyZWRJbkJhZFN0YXRlJiYoYS5wdXNoKHRoaXMpLGMoKSl9LF9vbkNoYXJ0QXR0YWNoZWQoKXt0aGlzLmFjdGl2ZXx8KHRoaXMuX21heWJlUmVuZGVyZWRJbkJhZFN0YXRlPSEwKX19KX0pKCk7Cjwvc2NyaXB0Pgo8L2RvbS1tb2R1bGU+CgoKCgoKCgoKCgo8ZG9tLW1vZHVsZSBpZD0icGFwZXItZGlhbG9nLXNjcm9sbGFibGUiPgoKICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LXJlbGF0aXZlOwogICAgICB9CgogICAgICA6aG9zdCguaXMtc2Nyb2xsZWQ6bm90KDpmaXJzdC1jaGlsZCkpOjpiZWZvcmUgewogICAgICAgIGNvbnRlbnQ6ICcnOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgICBoZWlnaHQ6IDFweDsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1kaXZpZGVyLWNvbG9yKTsKICAgICAgfQoKICAgICAgOmhvc3QoLmNhbi1zY3JvbGw6bm90KC5zY3JvbGxlZC10by1ib3R0b20pOm5vdCg6bGFzdC1jaGlsZCkpOjphZnRlciB7CiAgICAgICAgY29udGVudDogJyc7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGhlaWdodDogMXB4OwogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWRpdmlkZXItY29sb3IpOwogICAgICB9CgogICAgICAuc2Nyb2xsYWJsZSB7CiAgICAgICAgcGFkZGluZzogMCAyNHB4OwoKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtc2Nyb2xsOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWRpYWxvZy1zY3JvbGxhYmxlOwogICAgICB9CgogICAgICAuZml0IHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtZml0OwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxkaXYgaWQ9InNjcm9sbGFibGUiIGNsYXNzPSJzY3JvbGxhYmxlIiBvbi1zY3JvbGw9InVwZGF0ZVNjcm9sbFN0YXRlIj4KICAgICAgPHNsb3Q+PC9zbG90PgogICAgPC9kaXY+CiAgPC90ZW1wbGF0ZT4KCjwvZG9tLW1vZHVsZT4KCjxzY3JpcHQ+Ly9+fldFQlBBVEh+fi9wYXBlci1kaWFsb2ctc2Nyb2xsYWJsZS9wYXBlci1kaWFsb2ctc2Nyb2xsYWJsZS5odG1sLmpzClBvbHltZXIoe2lzOiJwYXBlci1kaWFsb2ctc2Nyb2xsYWJsZSIscHJvcGVydGllczp7ZGlhbG9nRWxlbWVudDp7dHlwZTpPYmplY3R9fSxnZXQgc2Nyb2xsVGFyZ2V0KCl7cmV0dXJuIHRoaXMuJC5zY3JvbGxhYmxlfSxyZWFkeTpmdW5jdGlvbigpe3RoaXMuX2Vuc3VyZVRhcmdldCgpO3RoaXMuY2xhc3NMaXN0LmFkZCgibm8tcGFkZGluZyIpfSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX2Vuc3VyZVRhcmdldCgpO3JlcXVlc3RBbmltYXRpb25GcmFtZSh0aGlzLnVwZGF0ZVNjcm9sbFN0YXRlLmJpbmQodGhpcykpfSx1cGRhdGVTY3JvbGxTdGF0ZTpmdW5jdGlvbigpe3RoaXMudG9nZ2xlQ2xhc3MoImlzLXNjcm9sbGVkIiwwPHRoaXMuc2Nyb2xsVGFyZ2V0LnNjcm9sbFRvcCk7dGhpcy50b2dnbGVDbGFzcygiY2FuLXNjcm9sbCIsdGhpcy5zY3JvbGxUYXJnZXQub2Zmc2V0SGVpZ2h0PHRoaXMuc2Nyb2xsVGFyZ2V0LnNjcm9sbEhlaWdodCk7dGhpcy50b2dnbGVDbGFzcygic2Nyb2xsZWQtdG8tYm90dG9tIiwKdGhpcy5zY3JvbGxUYXJnZXQuc2Nyb2xsVG9wK3RoaXMuc2Nyb2xsVGFyZ2V0Lm9mZnNldEhlaWdodD49dGhpcy5zY3JvbGxUYXJnZXQuc2Nyb2xsSGVpZ2h0KX0sX2Vuc3VyZVRhcmdldDpmdW5jdGlvbigpeyh0aGlzLmRpYWxvZ0VsZW1lbnQ9dGhpcy5kaWFsb2dFbGVtZW50fHx0aGlzLnBhcmVudEVsZW1lbnQpJiZ0aGlzLmRpYWxvZ0VsZW1lbnQuYmVoYXZpb3JzJiYwPD10aGlzLmRpYWxvZ0VsZW1lbnQuYmVoYXZpb3JzLmluZGV4T2YoUG9seW1lci5QYXBlckRpYWxvZ0JlaGF2aW9ySW1wbCk/KHRoaXMuZGlhbG9nRWxlbWVudC5zaXppbmdUYXJnZXQ9dGhpcy5zY3JvbGxUYXJnZXQsdGhpcy5zY3JvbGxUYXJnZXQuY2xhc3NMaXN0LnJlbW92ZSgiZml0IikpOnRoaXMuZGlhbG9nRWxlbWVudCYmdGhpcy5zY3JvbGxUYXJnZXQuY2xhc3NMaXN0LmFkZCgiZml0Iil9fSk7Cjwvc2NyaXB0PgoKCgoKCjxkb20tbW9kdWxlIGlkPSJ0Zi1tYXJrZG93bi12aWV3Ij4KICA8dGVtcGxhdGU+CiAgICA8ZGl2IGlkPSJtYXJrZG93biIgaW5uZXItaC10LW0tbD0iW1todG1sXV0iPjwvZGl2PgogICAgPHN0eWxlPgogICAgICAvKgogICAgICAgKiBSZWR1Y2UgdG9wbW9zdCBhbmQgYm90dG9tbW9zdCBtYXJnaW5zIGZyb20gMTZweCB0byAwLjNlbSAocmVuZGVycwogICAgICAgKiBhdCBhYm91dCA0LjhweCkgdG8ga2VlcCB0aGUgbGF5b3V0IGNvbXBhY3QuIFRoaXMgaW1wcm92ZXMgdGhlCiAgICAgICAqIGFwcGVhcmFuY2Ugd2hlbiB0aGVyZSBpcyBvbmx5IG9uZSBsaW5lIG9mIHRleHQ7IHN0YW5kYXJkIE1hcmtkb3duCiAgICAgICAqIHJlbmRlcmVycyB3aWxsIHN0aWxsIGluY2x1ZGUgYSBgPHA+YCBlbGVtZW50LgogICAgICAgKgogICAgICAgKiBCeSB0YXJnZXRpbmcgb25seSB0aGUgdG9wLWxldmVsLCBleHRyZW1hbCBlbGVtZW50cywgd2UgcHJlc2VydmUgYW55CiAgICAgICAqIGFjdHVhbCBwYXJhZ3JhcGggYnJlYWtzIGFuZCBvbmx5IGNoYW5nZSB0aGUgcGFkZGluZyBhZ2FpbnN0IHRoZQogICAgICAgKiBjb21wb25lbnQgZWRnZXMuCiAgICAgICAqLwogICAgICAjbWFya2Rvd24gPiBwOmZpcnN0LWNoaWxkIHsKICAgICAgICBtYXJnaW4tdG9wOiAwLjNlbTsKICAgICAgfQogICAgICAjbWFya2Rvd24gPiBwOmxhc3QtY2hpbGQgewogICAgICAgIG1hcmdpbi1ib3R0b206IDAuM2VtOwogICAgICB9CgogICAgICAvKiBQbGVhc2FudCBzdHlsZXMgZm9yIE1hcmtkb3duIHRhYmxlcy4gKi8KICAgICAgI21hcmtkb3duIHRhYmxlIHsKICAgICAgICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwogICAgICB9CiAgICAgICNtYXJrZG93biB0YWJsZSB0aCB7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgfQogICAgICAjbWFya2Rvd24gdGFibGUgdGgsCiAgICAgICNtYXJrZG93biB0YWJsZSB0ZCB7CiAgICAgICAgcGFkZGluZzogNnB4IDEzcHg7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2RmZTJlNTsKICAgICAgfQogICAgICAjbWFya2Rvd24gdGFibGUgdHIgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7CiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNjNmNiZDE7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KICA8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdGYtbWFya2Rvd24tdmlldy90Zi1tYXJrZG93bi12aWV3Lmh0bWwuanMKUG9seW1lcih7aXM6InRmLW1hcmtkb3duLXZpZXciLHByb3BlcnRpZXM6e2h0bWw6e3R5cGU6U3RyaW5nLHZhbHVlOiIifX0sYXR0YWNoZWQoKXt3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57dGhpcy5zY29wZVN1YnRyZWUodGhpcy4kLm1hcmtkb3duLCEwKX0pfX0pOwo8L3NjcmlwdD4KPC9kb20tbW9kdWxlPgoKPGRvbS1tb2R1bGUgaWQ9InRmLWNhcmQtaGVhZGluZy1zdHlsZSI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICBmaWdjYXB0aW9uIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgLyoqIEhvcml6b250YWwgbGluZSBvZiBsYWJlbHMuICovCiAgICAgIC5oZWFkaW5nLXJvdyB7CiAgICAgICAgbWFyZ2luLXRvcDogLTRweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICB9CgogICAgICAvKiogUGllY2Ugb2YgdGV4dCBpbiB0aGUgZmlndXJlIGNhcHRpb24uICovCiAgICAgIC5oZWFkaW5nLWxhYmVsIHsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgbWFyZ2luLXRvcDogNHB4OwogICAgICAgIG1heC13aWR0aDogMTAwJTsKICAgICAgICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7CiAgICAgIH0KCiAgICAgIC8qKiBNYWtlcyBsYWJlbCBzaG93IG9uIHRoZSByaWdodC4gKi8KICAgICAgLmhlYWRpbmctcmlnaHQgewogICAgICAgIGZsZXgtZ3JvdzogMDsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+Cgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdGYtY2FyZC1oZWFkaW5nL3V0aWwuanMKdmFyIGZtOyhmdW5jdGlvbihhKXtmdW5jdGlvbiBjKGQpe2lmKCFkKXJldHVybiBudWxsO2xldCBmPWQubWF0Y2goL14jKFswLTlhLWZdezEsMn0pKFswLTlhLWZdezEsMn0pKFswLTlhLWZdezEsMn0pJC8pO2lmKCFmKXJldHVybiBudWxsO2lmKDQ9PWQubGVuZ3RoKWZvcihkPTE7Mz49ZDtkKyspZltkXSs9ZltkXTtyZXR1cm5bcGFyc2VJbnQoZlsxXSwxNikscGFyc2VJbnQoZlsyXSwxNikscGFyc2VJbnQoZlszXSwxNildfWEuZm9ybWF0RGF0ZT1mdW5jdGlvbihkKXtyZXR1cm4gZD9kLnRvU3RyaW5nKCkucmVwbGFjZSgvR01ULVxkKyBcKChbXildKylcKS8sIiQxIik6IiJ9O2EucGlja1RleHRDb2xvcj1mdW5jdGlvbihkKXtyZXR1cm4oZD1jKGQpKT8xMjU8TWF0aC5yb3VuZCgoMjk5KmRbMF0rNTg3KmRbMV0rMTE0KmRbMl0pLzFFMyk/ImluaGVyaXQiOiIjZWVlIjoiaW5oZXJpdCJ9fSkoZm18fChmbT17fSkpOwo8L3NjcmlwdD4KCgoKPGRvbS1tb2R1bGUgaWQ9InRmLWNhcmQtaGVhZGluZyI+CiAgPHRlbXBsYXRlPgogICAgPGRpdiBjbGFzcz0iY29udGFpbmVyIj4KICAgICAgPGZpZ2NhcHRpb24gY2xhc3M9ImNvbnRlbnQiPgogICAgICAgIDxkaXYgY2xhc3M9ImhlYWRpbmctcm93Ij4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfbmFtZUxhYmVsXV0iPgogICAgICAgICAgICA8ZGl2IGl0ZW1wcm9wPSJuYW1lIiBjbGFzcz0iaGVhZGluZy1sYWJlbCBuYW1lIj4KICAgICAgICAgICAgICBbW19uYW1lTGFiZWxdXQogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbcnVuXV0iPgogICAgICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIDxzcGFuPgogICAgICAgICAgICAgIDxzcGFuIGl0ZW1wcm9wPSJydW4iIGNsYXNzPSJoZWFkaW5nLWxhYmVsIGhlYWRpbmctcmlnaHQgcnVuIiBzdHlsZT0iYmFja2dyb3VuZDogW1tfcnVuQmFja2dyb3VuZF1dOyBjb2xvcjogW1tfcnVuQ29sb3JdXSI+W1tydW5dXTwvc3Bhbj4KICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L2Rpdj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX3RhZ0xhYmVsXV0iPgogICAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGluZy1yb3ciPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nLWxhYmVsIj4KICAgICAgICAgICAgICB0YWc6IDxzcGFuIGl0ZW1wcm9wPSJ0YWciPltbX3RhZ0xhYmVsXV08L3NwYW4+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8c2xvdD48L3Nsb3Q+CiAgICAgIDwvZmlnY2FwdGlvbj4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2Rlc2NyaXB0aW9uXV0iPgogICAgICAgIDxwYXBlci1pY29uLWJ1dHRvbiBpY29uPSJpbmZvIiBvbi10YXA9Il90b2dnbGVEZXNjcmlwdGlvbkRpYWxvZyIgdGl0bGU9IlNob3cgc3VtbWFyeSBkZXNjcmlwdGlvbiI+PC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPHBhcGVyLWRpYWxvZyBpZD0iZGVzY3JpcHRpb25EaWFsb2ciIG5vLW92ZXJsYXAgaG9yaXpvbnRhbC1hbGlnbj0iYXV0byIgdmVydGljYWwtYWxpZ249ImF1dG8iPgogICAgICAgIDxwYXBlci1kaWFsb2ctc2Nyb2xsYWJsZT4KICAgICAgICAgIDx0Zi1tYXJrZG93bi12aWV3IGh0bWw9IltbZGVzY3JpcHRpb25dXSI+PC90Zi1tYXJrZG93bi12aWV3PgogICAgICAgIDwvcGFwZXItZGlhbG9nLXNjcm9sbGFibGU+CiAgICAgIDwvcGFwZXItZGlhbG9nPgogICAgPC9kaXY+CiAgICA8c3R5bGUgaW5jbHVkZT0idGYtY2FyZC1oZWFkaW5nLXN0eWxlIj4KICAgICAgLmNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgfQogICAgICAuY29udGVudCB7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgfQogICAgICAubmFtZSB7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICB9CiAgICAgIC5ydW4gewogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgICB3aWR0aDogYXV0bzsKICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICAgICAgcGFkZGluZzogMXB4IDRweCAycHg7CiAgICAgIH0KICAgICAgcGFwZXItaWNvbi1idXR0b24gewogICAgICAgIGZsZXgtZ3JvdzogMDsKICAgICAgfQogICAgICBwYXBlci1kaWFsb2ctc2Nyb2xsYWJsZSB7CiAgICAgICAgbWF4LXdpZHRoOiA2NDBweDsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgogIDxzY3JpcHQ+Ly9+fldFQlBBVEh+fi90Zi1jYXJkLWhlYWRpbmcvdGYtY2FyZC1oZWFkaW5nLmh0bWwuanMKUG9seW1lcih7aXM6InRmLWNhcmQtaGVhZGluZyIscHJvcGVydGllczp7ZGlzcGxheU5hbWU6e3R5cGU6U3RyaW5nLHZhbHVlOm51bGx9LHRhZzp7dHlwZTpTdHJpbmcsdmFsdWU6bnVsbH0scnVuOnt0eXBlOlN0cmluZyx2YWx1ZTpudWxsfSxkZXNjcmlwdGlvbjp7dHlwZTpTdHJpbmcsdmFsdWU6bnVsbH0sY29sb3I6e3R5cGU6U3RyaW5nLHZhbHVlOm51bGx9LF9ydW5CYWNrZ3JvdW5kOnt0eXBlOlN0cmluZyxjb21wdXRlZDoiX2NvbXB1dGVSdW5CYWNrZ3JvdW5kKGNvbG9yKSIscmVhZE9ubHk6ITB9LF9ydW5Db2xvcjp7dHlwZTpTdHJpbmcsY29tcHV0ZWQ6Il9jb21wdXRlUnVuQ29sb3IoY29sb3IpIixyZWFkT25seTohMH0sX25hbWVMYWJlbDp7dHlwZTpTdHJpbmcsY29tcHV0ZWQ6Il9jb21wdXRlTmFtZUxhYmVsKGRpc3BsYXlOYW1lLCB0YWcpIn0sX3RhZ0xhYmVsOnt0eXBlOlN0cmluZyxjb21wdXRlZDoiX2NvbXB1dGVUYWdMYWJlbChkaXNwbGF5TmFtZSwgdGFnKSJ9fSxfY29tcHV0ZVJ1bkJhY2tncm91bmQoYSl7cmV0dXJuIGF8fAoibm9uZSJ9LF9jb21wdXRlUnVuQ29sb3IoYSl7cmV0dXJuIGZtLnBpY2tUZXh0Q29sb3IoYSl9LF9jb21wdXRlTmFtZUxhYmVsKGEsYyl7cmV0dXJuIGF8fGN8fCIifSxfY29tcHV0ZVRhZ0xhYmVsKGEsYyl7cmV0dXJuIGMmJmMhPT1hP2M6IiJ9LF90b2dnbGVEZXNjcmlwdGlvbkRpYWxvZyhhKXt0aGlzLiQuZGVzY3JpcHRpb25EaWFsb2cucG9zaXRpb25UYXJnZXQ9YS50YXJnZXQ7dGhpcy4kLmRlc2NyaXB0aW9uRGlhbG9nLnRvZ2dsZSgpfX0pOwo8L3NjcmlwdD4KPC9kb20tbW9kdWxlPgoKCgoKCgo8ZG9tLW1vZHVsZSBpZD0idGYtZG93bmxvYWRlciI+CiAgPHRlbXBsYXRlPgogICAgPHBhcGVyLWRyb3Bkb3duLW1lbnUgbm8tbGFiZWwtZmxvYXQ9InRydWUiIGxhYmVsPSJydW4gdG8gZG93bmxvYWQiIHNlbGVjdGVkLWl0ZW0tbGFiZWw9Int7X3J1bn19Ij4KICAgICAgPHBhcGVyLWxpc3Rib3ggc2xvdD0iZHJvcGRvd24tY29udGVudCI+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tydW5zXV0iPgogICAgICAgICAgPHBhcGVyLWl0ZW0gbm8tbGFiZWwtZmxvYXQ9InRydWUiPltbaXRlbV1dPC9wYXBlci1pdGVtPgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDwvcGFwZXItbGlzdGJveD4KICAgIDwvcGFwZXItZHJvcGRvd24tbWVudT4KICAgIDxhIGRvd25sb2FkPSJbW19jc3ZOYW1lKHRhZywgX3J1bildXSIgaHJlZj0iW1tfY3N2VXJsKHRhZywgX3J1biwgdXJsRm4pXV0iPkNTVjwvYT48YSBkb3dubG9hZD0iW1tfanNvbk5hbWUodGFnLCBfcnVuKV1dIiBocmVmPSJbW19qc29uVXJsKHRhZywgX3J1biwgdXJsRm4pXV0iPkpTT048L2E+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgaGVpZ2h0OiAzMnB4OwogICAgICB9CiAgICAgIHBhcGVyLWRyb3Bkb3duLW1lbnUgewogICAgICAgIHdpZHRoOiAxMDBweDsKICAgICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1sYWJlbDogewogICAgICAgICAgZm9udC1zaXplOiAxMHB4OwogICAgICAgIH0KICAgICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnB1dDogewogICAgICAgICAgZm9udC1zaXplOiAxMHB4OwogICAgICAgIH0KICAgICAgfQogICAgICBhIHsKICAgICAgICBmb250LXNpemU6IDEwcHg7CiAgICAgICAgbWFyZ2luOiAwIDAuMmVtOwogICAgICB9CiAgICAgIHBhcGVyLWlucHV0IHsKICAgICAgICBmb250LXNpemU6IDIycHg7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KICA8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdGYtZGFzaGJvYXJkLWNvbW1vbi90Zi1kb3dubG9hZGVyLmh0bWwuanMKUG9seW1lcih7aXM6InRmLWRvd25sb2FkZXIiLHByb3BlcnRpZXM6e19ydW46U3RyaW5nLHJ1bnM6QXJyYXksdGFnOlN0cmluZyx1cmxGbjpGdW5jdGlvbn0sX2NzdlVybChhLGMsZCl7cmV0dXJuIFBrLmFkZFBhcmFtcyhkKGEsYykse2Zvcm1hdDoiY3N2In0pfSxfanNvblVybChhLGMsZCl7cmV0dXJuIGQoYSxjKX0sX2Nzdk5hbWUoYSxjKXtyZXR1cm5gcnVuLSR7Y30tdGFnLSR7YX0uY3N2YH0sX2pzb25OYW1lKGEsYyl7cmV0dXJuYHJ1bi0ke2N9LXRhZy0ke2F9Lmpzb25gfX0pOwo8L3NjcmlwdD4KPC9kb20tbW9kdWxlPgoKCgo8ZG9tLW1vZHVsZSBpZD0idGYtc2NhbGFyLWNhcmQiPgogIDx0ZW1wbGF0ZT4KICAgIDx0Zi1jYXJkLWhlYWRpbmcgdGFnPSJbW3RhZ11dIiBkaXNwbGF5LW5hbWU9IltbdGFnTWV0YWRhdGEuZGlzcGxheU5hbWVdXSIgZGVzY3JpcHRpb249IltbdGFnTWV0YWRhdGEuZGVzY3JpcHRpb25dXSI+PC90Zi1jYXJkLWhlYWRpbmc+CiAgICA8ZGl2IGlkPSJ0Zi1saW5lLWNoYXJ0LWRhdGEtbG9hZGVyLWNvbnRhaW5lciI+CiAgICAgIDx0Zi1saW5lLWNoYXJ0LWRhdGEtbG9hZGVyIGFjdGl2ZT0iW1thY3RpdmVdXSIgY29sb3Itc2NhbGU9IltbX2dldENvbG9yU2NhbGUoY29sb3JTY2FsZSldXSIgZGF0YS1zZXJpZXM9IltbX2dldERhdGFTZXJpZXMoZGF0YVRvTG9hZC4qKV1dIiBkYXRhLXRvLWxvYWQ9IltbZGF0YVRvTG9hZF1dIiBnZXQtZGF0YS1sb2FkLW5hbWU9IltbX2dldERhdGFMb2FkTmFtZV1dIiBnZXQtZGF0YS1sb2FkLXVybD0iW1tnZXREYXRhTG9hZFVybF1dIiByZXF1ZXN0LWRhdGE9IltbcmVxdWVzdERhdGFdXSIgaWdub3JlLXktb3V0bGllcnM9IltbaWdub3JlWU91dGxpZXJzXV0iIGxvYWQtZGF0YS1jYWxsYmFjaz0iW1tfbG9hZERhdGFDYWxsYmFja11dIiBsb2FkLWtleT0iW1t0YWddXSIgbG9nLXNjYWxlLWFjdGl2ZT0iW1tfbG9nU2NhbGVBY3RpdmVdXSIgcmVxdWVzdC1tYW5hZ2VyPSJbW3JlcXVlc3RNYW5hZ2VyXV0iIHNtb290aGluZy1lbmFibGVkPSJbW3Ntb290aGluZ0VuYWJsZWRdXSIgc21vb3RoaW5nLXdlaWdodD0iW1tzbW9vdGhpbmdXZWlnaHRdXSIgdGFnLW1ldGFkYXRhPSJbW3RhZ01ldGFkYXRhXV0iIHRvb2x0aXAtY29sdW1ucz0iW1tfdG9vbHRpcENvbHVtbnNdXSIgdG9vbHRpcC1wb3NpdGlvbj0iYXV0byIgdG9vbHRpcC1zb3J0aW5nLW1ldGhvZD0iW1t0b29sdGlwU29ydGluZ01ldGhvZF1dIiB4LXR5cGU9IltbeFR5cGVdXSI+CiAgICAgIDwvdGYtbGluZS1jaGFydC1kYXRhLWxvYWRlcj4KICAgIDwvZGl2PgogICAgPGRpdiBpZD0iYnV0dG9ucyI+CiAgICAgIDxwYXBlci1pY29uLWJ1dHRvbiBzZWxlY3RlZCQ9IltbX2V4cGFuZGVkXV0iIGljb249ImZ1bGxzY3JlZW4iIG9uLXRhcD0iX3RvZ2dsZUV4cGFuZGVkIj48L3BhcGVyLWljb24tYnV0dG9uPgogICAgICA8cGFwZXItaWNvbi1idXR0b24gc2VsZWN0ZWQkPSJbW19sb2dTY2FsZUFjdGl2ZV1dIiBpY29uPSJsaW5lLXdlaWdodCIgb24tdGFwPSJfdG9nZ2xlTG9nU2NhbGUiIHRpdGxlPSJUb2dnbGUgeS1heGlzIGxvZyBzY2FsZSI+PC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgPHBhcGVyLWljb24tYnV0dG9uIGljb249InNldHRpbmdzLW92ZXJzY2FuIiBvbi10YXA9Il9yZXNldERvbWFpbiIgdGl0bGU9IkZpdCBkb21haW4gdG8gZGF0YSI+PC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW3Nob3dEb3dubG9hZExpbmtzXV0iPgogICAgICAgIDxwYXBlci1tZW51LWJ1dHRvbiBvbi1wYXBlci1kcm9wZG93bi1vcGVuPSJfdXBkYXRlRG93bmxvYWRMaW5rIj4KICAgICAgICAgIDxwYXBlci1pY29uLWJ1dHRvbiBjbGFzcz0iZHJvcGRvd24tdHJpZ2dlciIgc2xvdD0iZHJvcGRvd24tdHJpZ2dlciIgaWNvbj0iZmlsZS1kb3dubG9hZCI+PC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgICAgIDxwYXBlci1saXN0Ym94IGNsYXNzPSJkcm9wZG93bi1jb250ZW50IiBzbG90PSJkcm9wZG93bi1jb250ZW50Ij4KICAgICAgICAgICAgPHBhcGVyLWl0ZW0+CiAgICAgICAgICAgICAgPGEgaWQ9InN2Z0xpbmsiIGRvd25sb2FkPSJbW3RhZ11dLnN2ZyI+CiAgICAgICAgICAgICAgICBEb3dubG9hZCBDdXJyZW50IENoYXJ0IGFzIFNWRwogICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgPC9wYXBlci1pdGVtPgogICAgICAgICAgPC9wYXBlci1saXN0Ym94PgogICAgICAgIDwvcGFwZXItbWVudS1idXR0b24+CiAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDxzcGFuIHN0eWxlPSJmbGV4LWdyb3c6IDEiPjwvc3Bhbj4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW3Nob3dEb3dubG9hZExpbmtzXV0iPgogICAgICAgIDxkaXYgY2xhc3M9ImRvd25sb2FkLWxpbmtzIj4KICAgICAgICAgIDx0Zi1kb3dubG9hZGVyIHJ1bnM9IltbX3J1bnNGcm9tRGF0YShkYXRhVG9Mb2FkKV1dIiB0YWc9IltbdGFnXV0iIHVybC1mbj0iW1tfZG93bmxvYWRVcmxGbl1dIj48L3RmLWRvd25sb2FkZXI+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICA8L2Rpdj4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIG1hcmdpbjogNXB4OwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHdpZHRoOiAzMzBweDsKICAgICAgfQoKICAgICAgOmhvc3QoW19leHBhbmRlZF0pIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgOmhvc3QoW19leHBhbmRlZF0pICN0Zi1saW5lLWNoYXJ0LWRhdGEtbG9hZGVyLWNvbnRhaW5lciB7CiAgICAgICAgaGVpZ2h0OiA0MDBweDsKICAgICAgfQoKICAgICAgI3RmLWxpbmUtY2hhcnQtZGF0YS1sb2FkZXItY29udGFpbmVyIHsKICAgICAgICBoZWlnaHQ6IDIwMHB4OwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICB0Zi1jYXJkLWhlYWRpbmcgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIG1hcmdpbi1ib3R0b206IDEwcHg7CiAgICAgIH0KCiAgICAgICNidXR0b25zIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICAgIH0KCiAgICAgIHBhcGVyLWljb24tYnV0dG9uIHsKICAgICAgICBjb2xvcjogIzIxOTZmMzsKICAgICAgICBib3JkZXItcmFkaXVzOiAxMDAlOwogICAgICAgIHdpZHRoOiAzMnB4OwogICAgICAgIGhlaWdodDogMzJweDsKICAgICAgICBwYWRkaW5nOiA0cHg7CiAgICAgIH0KCiAgICAgIHBhcGVyLWljb24tYnV0dG9uW3NlbGVjdGVkXSB7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tdGItdWktbGlnaHQtYWNjZW50KTsKICAgICAgfQoKICAgICAgLmRvd25sb2FkLWxpbmtzIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGhlaWdodDogMzJweDsKICAgICAgfQoKICAgICAgLmRvd25sb2FkLWxpbmtzIGEgewogICAgICAgIGFsaWduLXNlbGY6IGNlbnRlcjsKICAgICAgICBmb250LXNpemU6IDEwcHg7CiAgICAgICAgbWFyZ2luOiAycHg7CiAgICAgIH0KCiAgICAgIC5kb3dubG9hZC1saW5rcyBwYXBlci1kcm9wZG93bi1tZW51IHsKICAgICAgICB3aWR0aDogMTAwcHg7CiAgICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItbGFiZWw6IHsKICAgICAgICAgIGZvbnQtc2l6ZTogMTBweDsKICAgICAgICB9CiAgICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItaW5wdXQ6IHsKICAgICAgICAgIGZvbnQtc2l6ZTogMTBweDsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIHBhcGVyLW1lbnUtYnV0dG9uIHsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICB9CiAgICAgIHBhcGVyLWl0ZW0gYSB7CiAgICAgICAgY29sb3I6IGluaGVyaXQ7CiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KICA8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdGYtc2NhbGFyLWRhc2hib2FyZC90Zi1zY2FsYXItY2FyZC5odG1sLmpzClBvbHltZXIoe2lzOiJ0Zi1zY2FsYXItY2FyZCIscHJvcGVydGllczp7dGFnOlN0cmluZyxkYXRhVG9Mb2FkOkFycmF5LHhUeXBlOlN0cmluZyxhY3RpdmU6Qm9vbGVhbixpZ25vcmVZT3V0bGllcnM6Qm9vbGVhbixyZXF1ZXN0TWFuYWdlcjpPYmplY3Qsc2hvd0Rvd25MaW5rczpCb29sZWFuLHNtb290aGluZ0VuYWJsZWQ6Qm9vbGVhbixzbW9vdGhpbmdXZWlnaHQ6TnVtYmVyLHRhZ01ldGFkYXRhOk9iamVjdCxjb2xvclNjYWxlOnt0eXBlOk9iamVjdCx2YWx1ZTpudWxsfSx0b29sdGlwU29ydGluZ01ldGhvZDpTdHJpbmcsX2xvYWREYXRhQ2FsbGJhY2s6e3R5cGU6T2JqZWN0LHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuKGEsYyxkKT0+e2Q9ZC5tYXAoZz0+KHt3YWxsX3RpbWU6bmV3IERhdGUoMUUzKmdbMF0pLHN0ZXA6Z1sxXSxzY2FsYXI6Z1syXX0pKTtjb25zdCBmPXRoaXMuX2dldFNlcmllc05hbWVGcm9tRGF0dW0oYyk7YS5zZXRTZXJpZXNNZXRhZGF0YShmLGMpO2Euc2V0U2VyaWVzRGF0YShmLApkKX19LHJlYWRPbmx5OiEwfSxnZXREYXRhTG9hZFVybDp7dHlwZTpGdW5jdGlvbix2YWx1ZTpmdW5jdGlvbigpe3JldHVybih7dGFnOmEscnVuOmMsZXhwZXJpbWVudDpkfSk9PlBrLmdldFJvdXRlcigpLnBsdWdpblJvdXRlKCJzY2FsYXJzIiwiL3NjYWxhcnMiLG5ldyBVUkxTZWFyY2hQYXJhbXMoe3RhZzphLHJ1bjpjLGV4cGVyaW1lbnQ6ZHx8IiJ9KSl9fSxfZG93bmxvYWRVcmxGbjp7dHlwZTpGdW5jdGlvbix2YWx1ZTpmdW5jdGlvbigpe3JldHVybihhLGMpPT50aGlzLmdldERhdGFMb2FkVXJsKHt0YWc6YSxydW46YyxleHBlcmltZW50OlBrLmdldEV4cGVyaW1lbnRJZCgpfSl9fSxyZXF1ZXN0RGF0YTpGdW5jdGlvbixfZ2V0RGF0YUxvYWROYW1lOnt0eXBlOkZ1bmN0aW9uLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIGE9PnRoaXMuX2dldFNlcmllc05hbWVGcm9tRGF0dW0oYSl9fSxfZXhwYW5kZWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9LApfbG9nU2NhbGVBY3RpdmU6Qm9vbGVhbixfdG9vbHRpcENvbHVtbnM6e3R5cGU6QXJyYXksdmFsdWU6ZnVuY3Rpb24oKXtjb25zdCBhPWVtLkRFRkFVTFRfVE9PTFRJUF9DT0xVTU5TLnNsaWNlKCksYz1hLmZpbmRJbmRleChkPT4iTmFtZSI9PWQudGl0bGUpO2Euc3BsaWNlKGMsMSx7dGl0bGU6Ik5hbWUiLGV2YWx1YXRlOmQ9PntkPWQuZGF0YXNldC5tZXRhZGF0YSgpLm1ldGE7cmV0dXJuIHRoaXMuX2dldFNlcmllc0Rpc3BsYXlOYW1lRnJvbURhdHVtKGQpfX0pO3JldHVybiBhfX19LHJlbG9hZCgpe3RoaXMuJCQoInRmLWxpbmUtY2hhcnQtZGF0YS1sb2FkZXIiKS5yZWxvYWQoKX0scmVkcmF3KCl7dGhpcy4kJCgidGYtbGluZS1jaGFydC1kYXRhLWxvYWRlciIpLnJlZHJhdygpfSxfdG9nZ2xlRXhwYW5kZWQoKXt0aGlzLnNldCgiX2V4cGFuZGVkIiwhdGhpcy5fZXhwYW5kZWQpO3RoaXMucmVkcmF3KCl9LF90b2dnbGVMb2dTY2FsZSgpe3RoaXMuc2V0KCJfbG9nU2NhbGVBY3RpdmUiLAohdGhpcy5fbG9nU2NhbGVBY3RpdmUpfSxfcmVzZXREb21haW4oKXtjb25zdCBhPXRoaXMuJCQoInRmLWxpbmUtY2hhcnQtZGF0YS1sb2FkZXIiKTthJiZhLnJlc2V0RG9tYWluKCl9LF91cGRhdGVEb3dubG9hZExpbmsoKXtjb25zdCBhPXRoaXMuJCQoInRmLWxpbmUtY2hhcnQtZGF0YS1sb2FkZXIiKS5leHBvcnRBc1N2Z1N0cmluZygpO3RoaXMuJCQoIiNzdmdMaW5rIikuaHJlZj1gZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCwke2J0b2EoYSl9YH0sX3J1bnNGcm9tRGF0YShhKXtyZXR1cm4gYS5tYXAoYz0+Yy5ydW4pfSxfZ2V0RGF0YVNlcmllcygpe3JldHVybiB0aGlzLmRhdGFUb0xvYWQubWFwKGE9PnRoaXMuX2dldFNlcmllc05hbWVGcm9tRGF0dW0oYSkpfSxfZ2V0U2VyaWVzTmFtZUZyb21EYXR1bSh7cnVuOmEsZXhwZXJpbWVudDpjPXtuYW1lOiJfZGVmYXVsdCJ9fSl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KFtjLm5hbWUsYV0pfSxfZ2V0U2VyaWVzRGlzcGxheU5hbWVGcm9tRGF0dW0oYSl7cmV0dXJuIGEucnVufSwKX2dldENvbG9yU2NhbGUoKXtyZXR1cm4gbnVsbCE9PXRoaXMuY29sb3JTY2FsZT90aGlzLmNvbG9yU2NhbGU6e3NjYWxlOmE9PntbLGFdPUpTT04ucGFyc2UoYSk7cmV0dXJuIFpsLnJ1bnNDb2xvclNjYWxlKGEpfX19fSk7Cjwvc2NyaXB0Pgo8L2RvbS1tb2R1bGU+CgoKCgoKCgoKCjxzY3JpcHQ+Ly9+fldFQlBBVEh+fi9pcm9uLXJhbmdlLWJlaGF2aW9yL2lyb24tcmFuZ2UtYmVoYXZpb3IuaHRtbC5qcwpQb2x5bWVyLklyb25SYW5nZUJlaGF2aW9yPXtwcm9wZXJ0aWVzOnt2YWx1ZTp7dHlwZTpOdW1iZXIsdmFsdWU6MCxub3RpZnk6ITAscmVmbGVjdFRvQXR0cmlidXRlOiEwfSxtaW46e3R5cGU6TnVtYmVyLHZhbHVlOjAsbm90aWZ5OiEwfSxtYXg6e3R5cGU6TnVtYmVyLHZhbHVlOjEwMCxub3RpZnk6ITB9LHN0ZXA6e3R5cGU6TnVtYmVyLHZhbHVlOjEsbm90aWZ5OiEwfSxyYXRpbzp7dHlwZTpOdW1iZXIsdmFsdWU6MCxyZWFkT25seTohMCxub3RpZnk6ITB9fSxvYnNlcnZlcnM6WyJfdXBkYXRlKHZhbHVlLCBtaW4sIG1heCwgc3RlcCkiXSxfY2FsY1JhdGlvOmZ1bmN0aW9uKGEpe3JldHVybih0aGlzLl9jbGFtcFZhbHVlKGEpLXRoaXMubWluKS8odGhpcy5tYXgtdGhpcy5taW4pfSxfY2xhbXBWYWx1ZTpmdW5jdGlvbihhKXtyZXR1cm4gTWF0aC5taW4odGhpcy5tYXgsTWF0aC5tYXgodGhpcy5taW4sdGhpcy5fY2FsY1N0ZXAoYSkpKX0sX2NhbGNTdGVwOmZ1bmN0aW9uKGEpe2E9cGFyc2VGbG9hdChhKTsKaWYoIXRoaXMuc3RlcClyZXR1cm4gYTthPU1hdGgucm91bmQoKGEtdGhpcy5taW4pL3RoaXMuc3RlcCk7cmV0dXJuIDE+dGhpcy5zdGVwP2EvKDEvdGhpcy5zdGVwKSt0aGlzLm1pbjphKnRoaXMuc3RlcCt0aGlzLm1pbn0sX3ZhbGlkYXRlVmFsdWU6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLl9jbGFtcFZhbHVlKHRoaXMudmFsdWUpO3RoaXMudmFsdWU9dGhpcy5vbGRWYWx1ZT1pc05hTihhKT90aGlzLm9sZFZhbHVlOmE7cmV0dXJuIHRoaXMudmFsdWUhPT1hfSxfdXBkYXRlOmZ1bmN0aW9uKCl7dGhpcy5fdmFsaWRhdGVWYWx1ZSgpO3RoaXMuX3NldFJhdGlvKDEwMCp0aGlzLl9jYWxjUmF0aW8odGhpcy52YWx1ZSkpfX07Cjwvc2NyaXB0PgoKCgoKCgoKCgoKPGRvbS1tb2R1bGUgaWQ9InBhcGVyLXByb2dyZXNzIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICB3aWR0aDogMjAwcHg7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIDpob3N0KFtoaWRkZW5dKSwgW2hpZGRlbl0gewogICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgI3Byb2dyZXNzQ29udGFpbmVyIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1wcm9ncmVzcy1jb250YWluZXI7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICAjcHJvZ3Jlc3NDb250YWluZXIsCiAgICAgIC8qIHRoZSBzdHJpcGUgZm9yIHRoZSBpbmRldGVybWluYXRlIGFuaW1hdGlvbiovCiAgICAgIC5pbmRldGVybWluYXRlOjphZnRlciB7CiAgICAgICAgaGVpZ2h0OiB2YXIoLS1wYXBlci1wcm9ncmVzcy1oZWlnaHQsIDRweCk7CiAgICAgIH0KCiAgICAgICNwcmltYXJ5UHJvZ3Jlc3MsCiAgICAgICNzZWNvbmRhcnlQcm9ncmVzcywKICAgICAgLmluZGV0ZXJtaW5hdGU6OmFmdGVyIHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtZml0OwogICAgICB9CgogICAgICAjcHJvZ3Jlc3NDb250YWluZXIsCiAgICAgIC5pbmRldGVybWluYXRlOjphZnRlciB7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tcGFwZXItcHJvZ3Jlc3MtY29udGFpbmVyLWNvbG9yLCB2YXIoLS1nb29nbGUtZ3JleS0zMDApKTsKICAgICAgfQoKICAgICAgOmhvc3QoLnRyYW5zaXRpbmcpICNwcmltYXJ5UHJvZ3Jlc3MsCiAgICAgIDpob3N0KC50cmFuc2l0aW5nKSAjc2Vjb25kYXJ5UHJvZ3Jlc3MgewogICAgICAgIC13ZWJraXQtdHJhbnNpdGlvbi1wcm9wZXJ0eTogLXdlYmtpdC10cmFuc2Zvcm07CiAgICAgICAgdHJhbnNpdGlvbi1wcm9wZXJ0eTogdHJhbnNmb3JtOwoKICAgICAgICAvKiBEdXJhdGlvbiAqLwogICAgICAgIC13ZWJraXQtdHJhbnNpdGlvbi1kdXJhdGlvbjogdmFyKC0tcGFwZXItcHJvZ3Jlc3MtdHJhbnNpdGlvbi1kdXJhdGlvbiwgMC4wOHMpOwogICAgICAgIHRyYW5zaXRpb24tZHVyYXRpb246IHZhcigtLXBhcGVyLXByb2dyZXNzLXRyYW5zaXRpb24tZHVyYXRpb24sIDAuMDhzKTsKCiAgICAgICAgLyogVGltaW5nIGZ1bmN0aW9uICovCiAgICAgICAgLXdlYmtpdC10cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjogdmFyKC0tcGFwZXItcHJvZ3Jlc3MtdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24sIGVhc2UpOwogICAgICAgIHRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOiB2YXIoLS1wYXBlci1wcm9ncmVzcy10cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbiwgZWFzZSk7CgogICAgICAgIC8qIERlbGF5ICovCiAgICAgICAgLXdlYmtpdC10cmFuc2l0aW9uLWRlbGF5OiB2YXIoLS1wYXBlci1wcm9ncmVzcy10cmFuc2l0aW9uLWRlbGF5LCAwcyk7CiAgICAgICAgdHJhbnNpdGlvbi1kZWxheTogdmFyKC0tcGFwZXItcHJvZ3Jlc3MtdHJhbnNpdGlvbi1kZWxheSwgMHMpOwogICAgICB9CgogICAgICAjcHJpbWFyeVByb2dyZXNzLAogICAgICAjc2Vjb25kYXJ5UHJvZ3Jlc3MgewogICAgICAgIEBhcHBseSAtLWxheW91dC1maXQ7CiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOiBsZWZ0IGNlbnRlcjsKICAgICAgICB0cmFuc2Zvcm0tb3JpZ2luOiBsZWZ0IGNlbnRlcjsKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGVYKDApOwogICAgICAgIHRyYW5zZm9ybTogc2NhbGVYKDApOwogICAgICAgIHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm07CiAgICAgIH0KCiAgICAgICNwcmltYXJ5UHJvZ3Jlc3MgewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXBhcGVyLXByb2dyZXNzLWFjdGl2ZS1jb2xvciwgdmFyKC0tZ29vZ2xlLWdyZWVuLTUwMCkpOwogICAgICB9CgogICAgICAjc2Vjb25kYXJ5UHJvZ3Jlc3MgewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXBhcGVyLXByb2dyZXNzLXNlY29uZGFyeS1jb2xvciwgdmFyKC0tZ29vZ2xlLWdyZWVuLTEwMCkpOwogICAgICB9CgogICAgICA6aG9zdChbZGlzYWJsZWRdKSAjcHJpbWFyeVByb2dyZXNzIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1wYXBlci1wcm9ncmVzcy1kaXNhYmxlZC1hY3RpdmUtY29sb3IsIHZhcigtLWdvb2dsZS1ncmV5LTUwMCkpOwogICAgICB9CgogICAgICA6aG9zdChbZGlzYWJsZWRdKSAjc2Vjb25kYXJ5UHJvZ3Jlc3MgewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXBhcGVyLXByb2dyZXNzLWRpc2FibGVkLXNlY29uZGFyeS1jb2xvciwgdmFyKC0tZ29vZ2xlLWdyZXktMzAwKSk7CiAgICAgIH0KCiAgICAgIDpob3N0KDpub3QoW2Rpc2FibGVkXSkpICNwcmltYXJ5UHJvZ3Jlc3MuaW5kZXRlcm1pbmF0ZSB7CiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOiByaWdodCBjZW50ZXI7CiAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogcmlnaHQgY2VudGVyOwogICAgICAgIC13ZWJraXQtYW5pbWF0aW9uOiBpbmRldGVybWluYXRlLWJhciB2YXIoLS1wYXBlci1wcm9ncmVzcy1pbmRldGVybWluYXRlLWN5Y2xlLWR1cmF0aW9uLCAycykgbGluZWFyIGluZmluaXRlOwogICAgICAgIGFuaW1hdGlvbjogaW5kZXRlcm1pbmF0ZS1iYXIgdmFyKC0tcGFwZXItcHJvZ3Jlc3MtaW5kZXRlcm1pbmF0ZS1jeWNsZS1kdXJhdGlvbiwgMnMpIGxpbmVhciBpbmZpbml0ZTsKICAgICAgfQoKICAgICAgOmhvc3QoOm5vdChbZGlzYWJsZWRdKSkgI3ByaW1hcnlQcm9ncmVzcy5pbmRldGVybWluYXRlOjphZnRlciB7CiAgICAgICAgY29udGVudDogIiI7CiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOiBjZW50ZXIgY2VudGVyOwogICAgICAgIHRyYW5zZm9ybS1vcmlnaW46IGNlbnRlciBjZW50ZXI7CgogICAgICAgIC13ZWJraXQtYW5pbWF0aW9uOiBpbmRldGVybWluYXRlLXNwbGl0dGVyIHZhcigtLXBhcGVyLXByb2dyZXNzLWluZGV0ZXJtaW5hdGUtY3ljbGUtZHVyYXRpb24sIDJzKSBsaW5lYXIgaW5maW5pdGU7CiAgICAgICAgYW5pbWF0aW9uOiBpbmRldGVybWluYXRlLXNwbGl0dGVyIHZhcigtLXBhcGVyLXByb2dyZXNzLWluZGV0ZXJtaW5hdGUtY3ljbGUtZHVyYXRpb24sIDJzKSBsaW5lYXIgaW5maW5pdGU7CiAgICAgIH0KCiAgICAgIEAtd2Via2l0LWtleWZyYW1lcyBpbmRldGVybWluYXRlLWJhciB7CiAgICAgICAgMCUgewogICAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlWCgxKSB0cmFuc2xhdGVYKC0xMDAlKTsKICAgICAgICB9CiAgICAgICAgNTAlIHsKICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZVgoMSkgdHJhbnNsYXRlWCgwJSk7CiAgICAgICAgfQogICAgICAgIDc1JSB7CiAgICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGVYKDEpIHRyYW5zbGF0ZVgoMCUpOwogICAgICAgICAgLXdlYmtpdC1hbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoLjI4LC42MiwuMzcsLjkxKTsKICAgICAgICB9CiAgICAgICAgMTAwJSB7CiAgICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGVYKDApIHRyYW5zbGF0ZVgoMCUpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgQC13ZWJraXQta2V5ZnJhbWVzIGluZGV0ZXJtaW5hdGUtc3BsaXR0ZXIgewogICAgICAgIDAlIHsKICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZVgoLjc1KSB0cmFuc2xhdGVYKC0xMjUlKTsKICAgICAgICB9CiAgICAgICAgMzAlIHsKICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZVgoLjc1KSB0cmFuc2xhdGVYKC0xMjUlKTsKICAgICAgICAgIC13ZWJraXQtYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKC40MiwwLC42LC44KTsKICAgICAgICB9CiAgICAgICAgOTAlIHsKICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZVgoLjc1KSB0cmFuc2xhdGVYKDEyNSUpOwogICAgICAgIH0KICAgICAgICAxMDAlIHsKICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZVgoLjc1KSB0cmFuc2xhdGVYKDEyNSUpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgQGtleWZyYW1lcyBpbmRldGVybWluYXRlLWJhciB7CiAgICAgICAgMCUgewogICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZVgoMSkgdHJhbnNsYXRlWCgtMTAwJSk7CiAgICAgICAgfQogICAgICAgIDUwJSB7CiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlWCgxKSB0cmFuc2xhdGVYKDAlKTsKICAgICAgICB9CiAgICAgICAgNzUlIHsKICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGVYKDEpIHRyYW5zbGF0ZVgoMCUpOwogICAgICAgICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKC4yOCwuNjIsLjM3LC45MSk7CiAgICAgICAgfQogICAgICAgIDEwMCUgewogICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZVgoMCkgdHJhbnNsYXRlWCgwJSk7CiAgICAgICAgfQogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIGluZGV0ZXJtaW5hdGUtc3BsaXR0ZXIgewogICAgICAgIDAlIHsKICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGVYKC43NSkgdHJhbnNsYXRlWCgtMTI1JSk7CiAgICAgICAgfQogICAgICAgIDMwJSB7CiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlWCguNzUpIHRyYW5zbGF0ZVgoLTEyNSUpOwogICAgICAgICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKC40MiwwLC42LC44KTsKICAgICAgICB9CiAgICAgICAgOTAlIHsKICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGVYKC43NSkgdHJhbnNsYXRlWCgxMjUlKTsKICAgICAgICB9CiAgICAgICAgMTAwJSB7CiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlWCguNzUpIHRyYW5zbGF0ZVgoMTI1JSk7CiAgICAgICAgfQogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxkaXYgaWQ9InByb2dyZXNzQ29udGFpbmVyIj4KICAgICAgPGRpdiBpZD0ic2Vjb25kYXJ5UHJvZ3Jlc3MiIGhpZGRlbiQ9IltbX2hpZGVTZWNvbmRhcnlQcm9ncmVzcyhzZWNvbmRhcnlSYXRpbyldXSI+PC9kaXY+CiAgICAgIDxkaXYgaWQ9InByaW1hcnlQcm9ncmVzcyI+PC9kaXY+CiAgICA8L2Rpdj4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+Cgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vcGFwZXItcHJvZ3Jlc3MvcGFwZXItcHJvZ3Jlc3MuaHRtbC5qcwpQb2x5bWVyKHtpczoicGFwZXItcHJvZ3Jlc3MiLGJlaGF2aW9yczpbUG9seW1lci5Jcm9uUmFuZ2VCZWhhdmlvcl0scHJvcGVydGllczp7c2Vjb25kYXJ5UHJvZ3Jlc3M6e3R5cGU6TnVtYmVyLHZhbHVlOjB9LHNlY29uZGFyeVJhdGlvOnt0eXBlOk51bWJlcix2YWx1ZTowLHJlYWRPbmx5OiEwfSxpbmRldGVybWluYXRlOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEsb2JzZXJ2ZXI6Il90b2dnbGVJbmRldGVybWluYXRlIn0sZGlzYWJsZWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxyZWZsZWN0VG9BdHRyaWJ1dGU6ITAsb2JzZXJ2ZXI6Il9kaXNhYmxlZENoYW5nZWQifX0sb2JzZXJ2ZXJzOlsiX3Byb2dyZXNzQ2hhbmdlZChzZWNvbmRhcnlQcm9ncmVzcywgdmFsdWUsIG1pbiwgbWF4LCBpbmRldGVybWluYXRlKSJdLGhvc3RBdHRyaWJ1dGVzOntyb2xlOiJwcm9ncmVzc2JhciJ9LF90b2dnbGVJbmRldGVybWluYXRlOmZ1bmN0aW9uKGEpe3RoaXMudG9nZ2xlQ2xhc3MoImluZGV0ZXJtaW5hdGUiLAphLHRoaXMuJC5wcmltYXJ5UHJvZ3Jlc3MpfSxfdHJhbnNmb3JtUHJvZ3Jlc3M6ZnVuY3Rpb24oYSxjKXthLnN0eWxlLnRyYW5zZm9ybT1hLnN0eWxlLndlYmtpdFRyYW5zZm9ybT0ic2NhbGVYKCIrYy8xMDArIikifSxfbWFpblJhdGlvQ2hhbmdlZDpmdW5jdGlvbihhKXt0aGlzLl90cmFuc2Zvcm1Qcm9ncmVzcyh0aGlzLiQucHJpbWFyeVByb2dyZXNzLGEpfSxfcHJvZ3Jlc3NDaGFuZ2VkOmZ1bmN0aW9uKGEsYyxkLGYsZyl7YT10aGlzLl9jbGFtcFZhbHVlKGEpO2M9dGhpcy5fY2xhbXBWYWx1ZShjKTt2YXIgbD0xMDAqdGhpcy5fY2FsY1JhdGlvKGEpLGs9MTAwKnRoaXMuX2NhbGNSYXRpbyhjKTt0aGlzLl9zZXRTZWNvbmRhcnlSYXRpbyhsKTt0aGlzLl90cmFuc2Zvcm1Qcm9ncmVzcyh0aGlzLiQuc2Vjb25kYXJ5UHJvZ3Jlc3MsbCk7dGhpcy5fdHJhbnNmb3JtUHJvZ3Jlc3ModGhpcy4kLnByaW1hcnlQcm9ncmVzcyxrKTt0aGlzLnNlY29uZGFyeVByb2dyZXNzPWE7Zz90aGlzLnJlbW92ZUF0dHJpYnV0ZSgiYXJpYS12YWx1ZW5vdyIpOgp0aGlzLnNldEF0dHJpYnV0ZSgiYXJpYS12YWx1ZW5vdyIsYyk7dGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtdmFsdWVtaW4iLGQpO3RoaXMuc2V0QXR0cmlidXRlKCJhcmlhLXZhbHVlbWF4IixmKX0sX2Rpc2FibGVkQ2hhbmdlZDpmdW5jdGlvbihhKXt0aGlzLnNldEF0dHJpYnV0ZSgiYXJpYS1kaXNhYmxlZCIsYT8idHJ1ZSI6ImZhbHNlIil9LF9oaWRlU2Vjb25kYXJ5UHJvZ3Jlc3M6ZnVuY3Rpb24oYSl7cmV0dXJuIDA9PT1hfX0pOwo8L3NjcmlwdD4KCgoKCgo8ZG9tLW1vZHVsZSBpZD0icGFwZXItc2xpZGVyIj4KICA8dGVtcGxhdGUgc3RyaXAtd2hpdGVzcGFjZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIEBhcHBseSAtLWxheW91dDsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtanVzdGlmaWVkOwogICAgICAgIEBhcHBseSAtLWxheW91dC1jZW50ZXI7CiAgICAgICAgd2lkdGg6IDIwMHB4OwogICAgICAgIGN1cnNvcjogZGVmYXVsdDsKICAgICAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgLW1zLXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICAgIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwKTsKICAgICAgICAtLXBhcGVyLXByb2dyZXNzLWFjdGl2ZS1jb2xvcjogdmFyKC0tcGFwZXItc2xpZGVyLWFjdGl2ZS1jb2xvciwgdmFyKC0tZ29vZ2xlLWJsdWUtNzAwKSk7CiAgICAgICAgLS1wYXBlci1wcm9ncmVzcy1zZWNvbmRhcnktY29sb3I6IHZhcigtLXBhcGVyLXNsaWRlci1zZWNvbmRhcnktY29sb3IsIHZhcigtLWdvb2dsZS1ibHVlLTMwMCkpOwogICAgICAgIC0tcGFwZXItcHJvZ3Jlc3MtZGlzYWJsZWQtYWN0aXZlLWNvbG9yOiB2YXIoLS1wYXBlci1zbGlkZXItZGlzYWJsZWQtYWN0aXZlLWNvbG9yLCB2YXIoLS1wYXBlci1ncmV5LTQwMCkpOwogICAgICAgIC0tcGFwZXItcHJvZ3Jlc3MtZGlzYWJsZWQtc2Vjb25kYXJ5LWNvbG9yOiB2YXIoLS1wYXBlci1zbGlkZXItZGlzYWJsZWQtc2Vjb25kYXJ5LWNvbG9yLCB2YXIoLS1wYXBlci1ncmV5LTQwMCkpOwogICAgICAgIC0tY2FsY3VsYXRlZC1wYXBlci1zbGlkZXItaGVpZ2h0OiB2YXIoLS1wYXBlci1zbGlkZXItaGVpZ2h0LCAycHgpOwogICAgICB9CgogICAgICAvKiBmb2N1cyBzaG93cyB0aGUgcmlwcGxlICovCiAgICAgIDpob3N0KDpmb2N1cykgewogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBOT1RFKGtlYW51bGVlKTogVGhvdWdoIDpob3N0LWNvbnRleHQgaXMgbm90IHVuaXZlcnNhbGx5IHN1cHBvcnRlZCwgc29tZSBwYWdlcwogICAgICAgKiBzdGlsbCByZWx5IG9uIHBhcGVyLXNsaWRlciBiZWluZyBmbGlwcGVkIHdoZW4gZGlyPSJydGwiIGlzIHNldCBvbiBib2R5LiBGb3IgZnVsbAogICAgICAgKiBjb21wYXRhYmlsaXR5LCBkaXI9InJ0bCIgbXVzdCBiZSBleHBsaWNpdGx5IHNldCBvbiBwYXBlci1zbGlkZXIuCiAgICAgICAqLwogICAgICA6ZGlyKHJ0bCkgI3NsaWRlckNvbnRhaW5lciB7CiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlWCgtMSk7CiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZVgoLTEpOwogICAgICB9CgogICAgICAvKioKICAgICAgICogTk9URShrZWFudWxlZSk6IFRoaXMgaXMgc2VwYXJhdGUgZnJvbSB0aGUgcnVsZSBhYm92ZSBiZWNhdXNlIDpob3N0LWNvbnRleHQgbWF5CiAgICAgICAqIG5vdCBiZSByZWNvZ25pemVkLgogICAgICAgKi8KICAgICAgOmhvc3QoW2Rpcj0icnRsIl0pICNzbGlkZXJDb250YWluZXIgewogICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZVgoLTEpOwogICAgICAgIHRyYW5zZm9ybTogc2NhbGVYKC0xKTsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIE5PVEUoa2VhbnVsZWUpOiBOZWVkZWQgdG8gb3ZlcnJpZGUgdGhlIDpob3N0LWNvbnRleHQgcnVsZSAod2hlcmUgc3VwcG9ydGVkKQogICAgICAgKiB0byBzdXBwb3J0IExUUiBzbGlkZXJzIGluIFJUTCBwYWdlcy4KICAgICAgICovCiAgICAgIDpob3N0KFtkaXI9Imx0ciJdKSAjc2xpZGVyQ29udGFpbmVyIHsKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGVYKDEpOwogICAgICAgIHRyYW5zZm9ybTogc2NhbGVYKDEpOwogICAgICB9CgogICAgICAjc2xpZGVyQ29udGFpbmVyIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiBjYWxjKDMwcHggKyB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXNsaWRlci1oZWlnaHQpKTsKICAgICAgICBtYXJnaW4tbGVmdDogY2FsYygxNXB4ICsgdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1zbGlkZXItaGVpZ2h0KS8yKTsKICAgICAgICBtYXJnaW4tcmlnaHQ6IGNhbGMoMTVweCArIHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItc2xpZGVyLWhlaWdodCkvMik7CiAgICAgIH0KCiAgICAgICNzbGlkZXJDb250YWluZXI6Zm9jdXMgewogICAgICAgIG91dGxpbmU6IDA7CiAgICAgIH0KCiAgICAgICNzbGlkZXJDb250YWluZXIuZWRpdGFibGUgewogICAgICAgIG1hcmdpbi10b3A6IDEycHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTJweDsKICAgICAgfQoKICAgICAgLmJhci1jb250YWluZXIgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQoKICAgICAgLnJpbmcgPiAuYmFyLWNvbnRhaW5lciB7CiAgICAgICAgbGVmdDogY2FsYyg1cHggKyB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXNsaWRlci1oZWlnaHQpLzIpOwogICAgICAgIHRyYW5zaXRpb246IGxlZnQgMC4xOHMgZWFzZTsKICAgICAgfQoKICAgICAgLnJpbmcuZXhwYW5kLmRyYWdnaW5nID4gLmJhci1jb250YWluZXIgewogICAgICAgIHRyYW5zaXRpb246IG5vbmU7CiAgICAgIH0KCiAgICAgIC5yaW5nLmV4cGFuZDpub3QoLnBpbikgPiAuYmFyLWNvbnRhaW5lciB7CiAgICAgICAgbGVmdDogY2FsYyg4cHggKyB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXNsaWRlci1oZWlnaHQpLzIpOwogICAgICB9CgogICAgICAjc2xpZGVyQmFyIHsKICAgICAgICBwYWRkaW5nOiAxNXB4IDA7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItc2xpZGVyLWJhci1jb2xvciwgdHJhbnNwYXJlbnQpOwogICAgICAgIC0tcGFwZXItcHJvZ3Jlc3MtY29udGFpbmVyLWNvbG9yOiB2YXIoLS1wYXBlci1zbGlkZXItY29udGFpbmVyLWNvbG9yLCB2YXIoLS1wYXBlci1ncmV5LTQwMCkpOwogICAgICAgIC0tcGFwZXItcHJvZ3Jlc3MtaGVpZ2h0OiB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXNsaWRlci1oZWlnaHQpOwogICAgICB9CgogICAgICAuc2xpZGVyLW1hcmtlcnMgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IGNhbGMoMTRweCArIHZhcigtLXBhcGVyLXNsaWRlci1oZWlnaHQsMnB4KS8yKTsKICAgICAgICBoZWlnaHQ6IHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItc2xpZGVyLWhlaWdodCk7CiAgICAgICAgbGVmdDogMDsKICAgICAgICByaWdodDogLTFweDsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIEBhcHBseSAtLWxheW91dC1ob3Jpem9udGFsOwogICAgICB9CgogICAgICAuc2xpZGVyLW1hcmtlciB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWZsZXg7CiAgICAgIH0KICAgICAgLnNsaWRlci1tYXJrZXJzOjphZnRlciwKICAgICAgLnNsaWRlci1tYXJrZXI6OmFmdGVyIHsKICAgICAgICBjb250ZW50OiAiIjsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBtYXJnaW4tbGVmdDogLTFweDsKICAgICAgICB3aWR0aDogMnB4OwogICAgICAgIGhlaWdodDogdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1zbGlkZXItaGVpZ2h0KTsKICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItc2xpZGVyLW1hcmtlcnMtY29sb3IsICMwMDApOwogICAgICB9CgogICAgICAuc2xpZGVyLWtub2IgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHRvcDogMDsKICAgICAgICBtYXJnaW4tbGVmdDogY2FsYygtMTVweCAtIHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItc2xpZGVyLWhlaWdodCkvMik7CiAgICAgICAgd2lkdGg6IGNhbGMoMzBweCArIHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItc2xpZGVyLWhlaWdodCkpOwogICAgICAgIGhlaWdodDogY2FsYygzMHB4ICsgdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1zbGlkZXItaGVpZ2h0KSk7CiAgICAgIH0KCiAgICAgIC50cmFuc2l0aW5nID4gLnNsaWRlci1rbm9iIHsKICAgICAgICB0cmFuc2l0aW9uOiBsZWZ0IDAuMDhzIGVhc2U7CiAgICAgIH0KCiAgICAgIC5zbGlkZXIta25vYjpmb2N1cyB7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgfQoKICAgICAgLnNsaWRlci1rbm9iLmRyYWdnaW5nIHsKICAgICAgICB0cmFuc2l0aW9uOiBub25lOwogICAgICB9CgogICAgICAuc25hcHMgPiAuc2xpZGVyLWtub2IuZHJhZ2dpbmcgewogICAgICAgIHRyYW5zaXRpb246IC13ZWJraXQtdHJhbnNmb3JtIDAuMDhzIGVhc2U7CiAgICAgICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuMDhzIGVhc2U7CiAgICAgIH0KCiAgICAgIC5zbGlkZXIta25vYi1pbm5lciB7CiAgICAgICAgbWFyZ2luOiAxMHB4OwogICAgICAgIHdpZHRoOiBjYWxjKDEwMCUgLSAyMHB4KTsKICAgICAgICBoZWlnaHQ6IGNhbGMoMTAwJSAtIDIwcHgpOwogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLXNsaWRlci1rbm9iLWNvbG9yLCB2YXIoLS1nb29nbGUtYmx1ZS03MDApKTsKICAgICAgICBib3JkZXI6IDJweCBzb2xpZCB2YXIoLS1wYXBlci1zbGlkZXIta25vYi1jb2xvciwgdmFyKC0tZ29vZ2xlLWJsdWUtNzAwKSk7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwoKICAgICAgICAtbW96LWJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKCiAgICAgICAgdHJhbnNpdGlvbi1wcm9wZXJ0eTogLXdlYmtpdC10cmFuc2Zvcm0sIGJhY2tncm91bmQtY29sb3IsIGJvcmRlcjsKICAgICAgICB0cmFuc2l0aW9uLXByb3BlcnR5OiB0cmFuc2Zvcm0sIGJhY2tncm91bmQtY29sb3IsIGJvcmRlcjsKICAgICAgICB0cmFuc2l0aW9uLWR1cmF0aW9uOiAwLjE4czsKICAgICAgICB0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjogZWFzZTsKICAgICAgfQoKICAgICAgLmV4cGFuZDpub3QoLnBpbikgPiAuc2xpZGVyLWtub2IgPiAuc2xpZGVyLWtub2ItaW5uZXIgewogICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgxLjUpOwogICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMS41KTsKICAgICAgfQoKICAgICAgLnJpbmcgPiAuc2xpZGVyLWtub2IgPiAuc2xpZGVyLWtub2ItaW5uZXIgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLXNsaWRlci1rbm9iLXN0YXJ0LWNvbG9yLCB0cmFuc3BhcmVudCk7CiAgICAgICAgYm9yZGVyOiAycHggc29saWQgdmFyKC0tcGFwZXItc2xpZGVyLWtub2Itc3RhcnQtYm9yZGVyLWNvbG9yLCB2YXIoLS1wYXBlci1ncmV5LTQwMCkpOwogICAgICB9CgogICAgICAuc2xpZGVyLWtub2ItaW5uZXI6OmJlZm9yZSB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItc2xpZGVyLXBpbi1jb2xvciwgdmFyKC0tZ29vZ2xlLWJsdWUtNzAwKSk7CiAgICAgIH0KCiAgICAgIC5waW4gPiAuc2xpZGVyLWtub2IgPiAuc2xpZGVyLWtub2ItaW5uZXI6OmJlZm9yZSB7CiAgICAgICAgY29udGVudDogIiI7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMDsKICAgICAgICBsZWZ0OiA1MCU7CiAgICAgICAgbWFyZ2luLWxlZnQ6IC0xM3B4OwogICAgICAgIHdpZHRoOiAyNnB4OwogICAgICAgIGhlaWdodDogMjZweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA1MCUgNTAlIDUwJSAwOwoKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKC00NWRlZykgc2NhbGUoMCkgdHJhbnNsYXRlKDApOwogICAgICAgIHRyYW5zZm9ybTogcm90YXRlKC00NWRlZykgc2NhbGUoMCkgdHJhbnNsYXRlKDApOwogICAgICB9CgogICAgICAuc2xpZGVyLWtub2ItaW5uZXI6OmJlZm9yZSwKICAgICAgLnNsaWRlci1rbm9iLWlubmVyOjphZnRlciB7CiAgICAgICAgdHJhbnNpdGlvbjogLXdlYmtpdC10cmFuc2Zvcm0gLjE4cyBlYXNlLCBiYWNrZ3JvdW5kLWNvbG9yIC4xOHMgZWFzZTsKICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gLjE4cyBlYXNlLCBiYWNrZ3JvdW5kLWNvbG9yIC4xOHMgZWFzZTsKICAgICAgfQoKICAgICAgLnBpbi5yaW5nID4gLnNsaWRlci1rbm9iID4gLnNsaWRlci1rbm9iLWlubmVyOjpiZWZvcmUgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLXNsaWRlci1waW4tc3RhcnQtY29sb3IsIHZhcigtLXBhcGVyLWdyZXktNDAwKSk7CiAgICAgIH0KCiAgICAgIC5waW4uZXhwYW5kID4gLnNsaWRlci1rbm9iID4gLnNsaWRlci1rbm9iLWlubmVyOjpiZWZvcmUgewogICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoLTQ1ZGVnKSBzY2FsZSgxKSB0cmFuc2xhdGUoMTdweCwgLTE3cHgpOwogICAgICAgIHRyYW5zZm9ybTogcm90YXRlKC00NWRlZykgc2NhbGUoMSkgdHJhbnNsYXRlKDE3cHgsIC0xN3B4KTsKICAgICAgfQoKICAgICAgLnBpbiA+IC5zbGlkZXIta25vYiA+IC5zbGlkZXIta25vYi1pbm5lcjo6YWZ0ZXIgewogICAgICAgIGNvbnRlbnQ6IGF0dHIodmFsdWUpOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgbGVmdDogNTAlOwogICAgICAgIG1hcmdpbi1sZWZ0OiAtMTZweDsKICAgICAgICB3aWR0aDogMzJweDsKICAgICAgICBoZWlnaHQ6IDI2cHg7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1zbGlkZXItZm9udC1jb2xvciwgI2ZmZik7CiAgICAgICAgZm9udC1zaXplOiAxMHB4OwoKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMCkgdHJhbnNsYXRlKDApOwogICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMCkgdHJhbnNsYXRlKDApOwogICAgICB9CgogICAgICAucGluLmV4cGFuZCA+IC5zbGlkZXIta25vYiA+IC5zbGlkZXIta25vYi1pbm5lcjo6YWZ0ZXIgewogICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgxKSB0cmFuc2xhdGUoMCwgLTE3cHgpOwogICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSkgdHJhbnNsYXRlKDAsIC0xN3B4KTsKICAgICAgfQoKICAgICAgLyogcGFwZXItaW5wdXQgKi8KICAgICAgLnNsaWRlci1pbnB1dCB7CiAgICAgICAgd2lkdGg6IDUwcHg7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnB1dDogewogICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgICAgQGFwcGx5IC0tcGFwZXItc2xpZGVyLWlucHV0LWNvbnRhaW5lci1pbnB1dDsKICAgICAgICB9OwogICAgICAgIEBhcHBseSAtLXBhcGVyLXNsaWRlci1pbnB1dDsKICAgICAgfQoKICAgICAgLyogZGlzYWJsZWQgc3RhdGUgKi8KICAgICAgI3NsaWRlckNvbnRhaW5lci5kaXNhYmxlZCB7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5kaXNhYmxlZCA+IC5zbGlkZXIta25vYiA+IC5zbGlkZXIta25vYi1pbm5lciB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItc2xpZGVyLWRpc2FibGVkLWtub2ItY29sb3IsIHZhcigtLXBhcGVyLWdyZXktNDAwKSk7CiAgICAgICAgYm9yZGVyOiAycHggc29saWQgdmFyKC0tcGFwZXItc2xpZGVyLWRpc2FibGVkLWtub2ItY29sb3IsIHZhcigtLXBhcGVyLWdyZXktNDAwKSk7CiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlM2QoMC43NSwgMC43NSwgMSk7CiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZTNkKDAuNzUsIDAuNzUsIDEpOwogICAgICB9CgogICAgICAuZGlzYWJsZWQucmluZyA+IC5zbGlkZXIta25vYiA+IC5zbGlkZXIta25vYi1pbm5lciB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItc2xpZGVyLWtub2Itc3RhcnQtY29sb3IsIHRyYW5zcGFyZW50KTsKICAgICAgICBib3JkZXI6IDJweCBzb2xpZCB2YXIoLS1wYXBlci1zbGlkZXIta25vYi1zdGFydC1ib3JkZXItY29sb3IsIHZhcigtLXBhcGVyLWdyZXktNDAwKSk7CiAgICAgIH0KCiAgICAgIHBhcGVyLXJpcHBsZSB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLXNsaWRlci1rbm9iLWNvbG9yLCB2YXIoLS1nb29nbGUtYmx1ZS03MDApKTsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8ZGl2IGlkPSJzbGlkZXJDb250YWluZXIiIGNsYXNzJD0iW1tfZ2V0Q2xhc3NOYW1lcyhkaXNhYmxlZCwgcGluLCBzbmFwcywgaW1tZWRpYXRlVmFsdWUsIG1pbiwgZXhwYW5kLCBkcmFnZ2luZywgdHJhbnNpdGluZywgZWRpdGFibGUpXV0iPgogICAgICA8ZGl2IGNsYXNzPSJiYXItY29udGFpbmVyIj4KICAgICAgICA8cGFwZXItcHJvZ3Jlc3MgZGlzYWJsZWQkPSJbW2Rpc2FibGVkXV0iIGlkPSJzbGlkZXJCYXIiIGFyaWEtaGlkZGVuPSJ0cnVlIiBtaW49IltbbWluXV0iIG1heD0iW1ttYXhdXSIgc3RlcD0iW1tzdGVwXV0iIHZhbHVlPSJbW2ltbWVkaWF0ZVZhbHVlXV0iIHNlY29uZGFyeS1wcm9ncmVzcz0iW1tzZWNvbmRhcnlQcm9ncmVzc11dIiBvbi1kb3duPSJfYmFyZG93biIgb24tdXA9Il9yZXNldEtub2IiIG9uLXRyYWNrPSJfYmFydHJhY2siIG9uLXRhcD0iX2JhcmNsaWNrIj4KICAgICAgICA8L3BhcGVyLXByb2dyZXNzPgogICAgICA8L2Rpdj4KCiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tzbmFwc11dIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzbGlkZXItbWFya2VycyI+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW21hcmtlcnNdXSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InNsaWRlci1tYXJrZXIiPjwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KCiAgICAgIDxkaXYgaWQ9InNsaWRlcktub2IiIGNsYXNzPSJzbGlkZXIta25vYiIgb24tZG93bj0iX2tub2Jkb3duIiBvbi11cD0iX3Jlc2V0S25vYiIgb24tdHJhY2s9Il9vblRyYWNrIiBvbi10cmFuc2l0aW9uZW5kPSJfa25vYlRyYW5zaXRpb25FbmQiPgogICAgICAgICAgPGRpdiBjbGFzcz0ic2xpZGVyLWtub2ItaW5uZXIiIHZhbHVlJD0iW1tpbW1lZGlhdGVWYWx1ZV1dIj48L2Rpdj4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KCiAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbZWRpdGFibGVdXSI+CiAgICAgIDxwYXBlci1pbnB1dCBpZD0iaW5wdXQiIHR5cGU9Im51bWJlciIgc3RlcD0iW1tzdGVwXV0iIG1pbj0iW1ttaW5dXSIgbWF4PSJbW21heF1dIiBjbGFzcz0ic2xpZGVyLWlucHV0IiBkaXNhYmxlZCQ9IltbZGlzYWJsZWRdXSIgdmFsdWU9IltbaW1tZWRpYXRlVmFsdWVdXSIgb24tY2hhbmdlPSJfY2hhbmdlVmFsdWUiIG9uLWtleWRvd249Il9pbnB1dEtleURvd24iIG5vLWxhYmVsLWZsb2F0PgogICAgICA8L3BhcGVyLWlucHV0PgogICAgPC90ZW1wbGF0ZT4KICA8L3RlbXBsYXRlPgoKICA8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vcGFwZXItc2xpZGVyL3BhcGVyLXNsaWRlci5odG1sLmpzClBvbHltZXIoe2lzOiJwYXBlci1zbGlkZXIiLGJlaGF2aW9yczpbUG9seW1lci5Jcm9uQTExeUtleXNCZWhhdmlvcixQb2x5bWVyLklyb25Gb3JtRWxlbWVudEJlaGF2aW9yLFBvbHltZXIuUGFwZXJJbmt5Rm9jdXNCZWhhdmlvcixQb2x5bWVyLklyb25SYW5nZUJlaGF2aW9yXSxwcm9wZXJ0aWVzOntzbmFwczp7dHlwZTpCb29sZWFuLHZhbHVlOiExLG5vdGlmeTohMH0scGluOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEsbm90aWZ5OiEwfSxzZWNvbmRhcnlQcm9ncmVzczp7dHlwZTpOdW1iZXIsdmFsdWU6MCxub3RpZnk6ITAsb2JzZXJ2ZXI6Il9zZWNvbmRhcnlQcm9ncmVzc0NoYW5nZWQifSxlZGl0YWJsZTp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxpbW1lZGlhdGVWYWx1ZTp7dHlwZTpOdW1iZXIsdmFsdWU6MCxyZWFkT25seTohMCxub3RpZnk6ITB9LG1heE1hcmtlcnM6e3R5cGU6TnVtYmVyLHZhbHVlOjAsbm90aWZ5OiEwfSxleHBhbmQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxyZWFkT25seTohMH0sCmlnbm9yZUJhclRvdWNoOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGRyYWdnaW5nOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEscmVhZE9ubHk6ITAsbm90aWZ5OiEwfSx0cmFuc2l0aW5nOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEscmVhZE9ubHk6ITB9LG1hcmtlcnM6e3R5cGU6QXJyYXkscmVhZE9ubHk6ITAsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm5bXX19fSxvYnNlcnZlcnM6WyJfdXBkYXRlS25vYih2YWx1ZSwgbWluLCBtYXgsIHNuYXBzLCBzdGVwKSIsIl92YWx1ZUNoYW5nZWQodmFsdWUpIiwiX2ltbWVkaWF0ZVZhbHVlQ2hhbmdlZChpbW1lZGlhdGVWYWx1ZSkiLCJfdXBkYXRlTWFya2VycyhtYXhNYXJrZXJzLCBtaW4sIG1heCwgc25hcHMpIl0saG9zdEF0dHJpYnV0ZXM6e3JvbGU6InNsaWRlciIsdGFiaW5kZXg6MH0sa2V5QmluZGluZ3M6e2xlZnQ6Il9sZWZ0S2V5IixyaWdodDoiX3JpZ2h0S2V5IiwiZG93biBwYWdlZG93biBob21lIjoiX2RlY3JlbWVudEtleSIsInVwIHBhZ2V1cCBlbmQiOiJfaW5jcmVtZW50S2V5In0sCnJlYWR5OmZ1bmN0aW9uKCl7dGhpcy5pZ25vcmVCYXJUb3VjaCYmUG9seW1lci5HZXN0dXJlcy5zZXRUb3VjaEFjdGlvbih0aGlzLiQuc2xpZGVyQmFyLCJhdXRvIil9LGluY3JlbWVudDpmdW5jdGlvbigpe3RoaXMudmFsdWU9dGhpcy5fY2xhbXBWYWx1ZSh0aGlzLnZhbHVlK3RoaXMuc3RlcCl9LGRlY3JlbWVudDpmdW5jdGlvbigpe3RoaXMudmFsdWU9dGhpcy5fY2xhbXBWYWx1ZSh0aGlzLnZhbHVlLXRoaXMuc3RlcCl9LF91cGRhdGVLbm9iOmZ1bmN0aW9uKGEsYyxkKXt0aGlzLnNldEF0dHJpYnV0ZSgiYXJpYS12YWx1ZW1pbiIsYyk7dGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtdmFsdWVtYXgiLGQpO3RoaXMuc2V0QXR0cmlidXRlKCJhcmlhLXZhbHVlbm93IixhKTt0aGlzLl9wb3NpdGlvbktub2IoMTAwKnRoaXMuX2NhbGNSYXRpbyhhKSl9LF92YWx1ZUNoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLmZpcmUoInZhbHVlLWNoYW5nZSIse2NvbXBvc2VkOiEwfSl9LF9pbW1lZGlhdGVWYWx1ZUNoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLmRyYWdnaW5nPwp0aGlzLmZpcmUoImltbWVkaWF0ZS12YWx1ZS1jaGFuZ2UiLHtjb21wb3NlZDohMH0pOnRoaXMudmFsdWU9dGhpcy5pbW1lZGlhdGVWYWx1ZX0sX3NlY29uZGFyeVByb2dyZXNzQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMuc2Vjb25kYXJ5UHJvZ3Jlc3M9dGhpcy5fY2xhbXBWYWx1ZSh0aGlzLnNlY29uZGFyeVByb2dyZXNzKX0sX2V4cGFuZEtub2I6ZnVuY3Rpb24oKXt0aGlzLl9zZXRFeHBhbmQoITApfSxfcmVzZXRLbm9iOmZ1bmN0aW9uKCl7dGhpcy5jYW5jZWxEZWJvdW5jZXIoImV4cGFuZEtub2IiKTt0aGlzLl9zZXRFeHBhbmQoITEpfSxfcG9zaXRpb25Lbm9iOmZ1bmN0aW9uKGEpe3RoaXMuX3NldEltbWVkaWF0ZVZhbHVlKHRoaXMuX2NhbGNTdGVwKHRoaXMuX2NhbGNLbm9iUG9zaXRpb24oYSkpKTt0aGlzLl9zZXRSYXRpbygxMDAqdGhpcy5fY2FsY1JhdGlvKHRoaXMuaW1tZWRpYXRlVmFsdWUpKTt0aGlzLiQuc2xpZGVyS25vYi5zdHlsZS5sZWZ0PXRoaXMucmF0aW8rIiUiO3RoaXMuZHJhZ2dpbmcmJgoodGhpcy5fa25vYnN0YXJ0eD10aGlzLnJhdGlvKnRoaXMuX3cvMTAwLHRoaXMudHJhbnNsYXRlM2QoMCwwLDAsdGhpcy4kLnNsaWRlcktub2IpKX0sX2NhbGNLbm9iUG9zaXRpb246ZnVuY3Rpb24oYSl7cmV0dXJuKHRoaXMubWF4LXRoaXMubWluKSphLzEwMCt0aGlzLm1pbn0sX29uVHJhY2s6ZnVuY3Rpb24oYSl7YS5zdG9wUHJvcGFnYXRpb24oKTtzd2l0Y2goYS5kZXRhaWwuc3RhdGUpe2Nhc2UgInN0YXJ0Ijp0aGlzLl90cmFja1N0YXJ0KGEpO2JyZWFrO2Nhc2UgInRyYWNrIjp0aGlzLl90cmFja1goYSk7YnJlYWs7Y2FzZSAiZW5kIjp0aGlzLl90cmFja0VuZCgpfX0sX3RyYWNrU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9zZXRUcmFuc2l0aW5nKCExKTt0aGlzLl93PXRoaXMuJC5zbGlkZXJCYXIub2Zmc2V0V2lkdGg7dGhpcy5fa25vYnN0YXJ0eD10aGlzLl9zdGFydHg9dGhpcy5feD10aGlzLnJhdGlvKnRoaXMuX3cvMTAwO3RoaXMuX21pbng9LXRoaXMuX3N0YXJ0eDt0aGlzLl9tYXh4PQp0aGlzLl93LXRoaXMuX3N0YXJ0eDt0aGlzLiQuc2xpZGVyS25vYi5jbGFzc0xpc3QuYWRkKCJkcmFnZ2luZyIpO3RoaXMuX3NldERyYWdnaW5nKCEwKX0sX3RyYWNrWDpmdW5jdGlvbihhKXt0aGlzLmRyYWdnaW5nfHx0aGlzLl90cmFja1N0YXJ0KGEpO3RoaXMuX3g9dGhpcy5fc3RhcnR4K01hdGgubWluKHRoaXMuX21heHgsTWF0aC5tYXgodGhpcy5fbWlueCxhLmRldGFpbC5keCoodGhpcy5faXNSVEw/LTE6MSkpKTt0aGlzLl9zZXRJbW1lZGlhdGVWYWx1ZSh0aGlzLl9jYWxjU3RlcCh0aGlzLl9jYWxjS25vYlBvc2l0aW9uKHRoaXMuX3gvdGhpcy5fdyoxMDApKSk7dGhpcy50cmFuc2xhdGUzZCh0aGlzLl9jYWxjUmF0aW8odGhpcy5pbW1lZGlhdGVWYWx1ZSkqdGhpcy5fdy10aGlzLl9rbm9ic3RhcnR4KyJweCIsMCwwLHRoaXMuJC5zbGlkZXJLbm9iKX0sX3RyYWNrRW5kOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy4kLnNsaWRlcktub2Iuc3R5bGU7dGhpcy4kLnNsaWRlcktub2IuY2xhc3NMaXN0LnJlbW92ZSgiZHJhZ2dpbmciKTsKdGhpcy5fc2V0RHJhZ2dpbmcoITEpO3RoaXMuX3Jlc2V0S25vYigpO3RoaXMudmFsdWU9dGhpcy5pbW1lZGlhdGVWYWx1ZTthLnRyYW5zZm9ybT1hLndlYmtpdFRyYW5zZm9ybT0iIjt0aGlzLmZpcmUoImNoYW5nZSIse2NvbXBvc2VkOiEwfSl9LF9rbm9iZG93bjpmdW5jdGlvbihhKXt0aGlzLl9leHBhbmRLbm9iKCk7YS5wcmV2ZW50RGVmYXVsdCgpO3RoaXMuZm9jdXMoKX0sX2JhcnRyYWNrOmZ1bmN0aW9uKGEpe3RoaXMuX2FsbG93QmFyRXZlbnQoYSkmJnRoaXMuX29uVHJhY2soYSl9LF9iYXJjbGljazpmdW5jdGlvbihhKXt0aGlzLl93PXRoaXMuJC5zbGlkZXJCYXIub2Zmc2V0V2lkdGg7dmFyIGM9dGhpcy4kLnNsaWRlckJhci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtjPShhLmRldGFpbC54LWMubGVmdCkvdGhpcy5fdyoxMDA7dGhpcy5faXNSVEwmJihjPTEwMC1jKTt2YXIgZD10aGlzLnJhdGlvO3RoaXMuX3NldFRyYW5zaXRpbmcoITApO3RoaXMuX3Bvc2l0aW9uS25vYihjKTsKZD09PXRoaXMucmF0aW8mJnRoaXMuX3NldFRyYW5zaXRpbmcoITEpO3RoaXMuYXN5bmMoZnVuY3Rpb24oKXt0aGlzLmZpcmUoImNoYW5nZSIse2NvbXBvc2VkOiEwfSl9KTthLnByZXZlbnREZWZhdWx0KCk7dGhpcy5mb2N1cygpfSxfYmFyZG93bjpmdW5jdGlvbihhKXt0aGlzLl9hbGxvd0JhckV2ZW50KGEpJiYodGhpcy5kZWJvdW5jZSgiZXhwYW5kS25vYiIsdGhpcy5fZXhwYW5kS25vYiw2MCksdGhpcy5fYmFyY2xpY2soYSkpfSxfa25vYlRyYW5zaXRpb25FbmQ6ZnVuY3Rpb24oYSl7YS50YXJnZXQ9PT10aGlzLiQuc2xpZGVyS25vYiYmdGhpcy5fc2V0VHJhbnNpdGluZyghMSl9LF91cGRhdGVNYXJrZXJzOmZ1bmN0aW9uKGEsYyxkLGYpe2Z8fHRoaXMuX3NldE1hcmtlcnMoW10pO2M9TWF0aC5yb3VuZCgoZC1jKS90aGlzLnN0ZXApO2M+YSYmKGM9YSk7aWYoMD5jfHwhaXNGaW5pdGUoYykpYz0wO3RoaXMuX3NldE1hcmtlcnMoQXJyYXkoYykpfSxfbWVyZ2VDbGFzc2VzOmZ1bmN0aW9uKGEpe3JldHVybiBPYmplY3Qua2V5cyhhKS5maWx0ZXIoZnVuY3Rpb24oYyl7cmV0dXJuIGFbY119KS5qb2luKCIgIil9LApfZ2V0Q2xhc3NOYW1lczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tZXJnZUNsYXNzZXMoe2Rpc2FibGVkOnRoaXMuZGlzYWJsZWQscGluOnRoaXMucGluLHNuYXBzOnRoaXMuc25hcHMscmluZzp0aGlzLmltbWVkaWF0ZVZhbHVlPD10aGlzLm1pbixleHBhbmQ6dGhpcy5leHBhbmQsZHJhZ2dpbmc6dGhpcy5kcmFnZ2luZyx0cmFuc2l0aW5nOnRoaXMudHJhbnNpdGluZyxlZGl0YWJsZTp0aGlzLmVkaXRhYmxlfSl9LF9hbGxvd0JhckV2ZW50OmZ1bmN0aW9uKGEpe3JldHVybiF0aGlzLmlnbm9yZUJhclRvdWNofHxhLmRldGFpbC5zb3VyY2VFdmVudCBpbnN0YW5jZW9mIE1vdXNlRXZlbnR9LGdldCBfaXNSVEwoKXt2b2lkIDA9PT10aGlzLl9faXNSVEwmJih0aGlzLl9faXNSVEw9InJ0bCI9PT13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzKS5kaXJlY3Rpb24pO3JldHVybiB0aGlzLl9faXNSVEx9LF9sZWZ0S2V5OmZ1bmN0aW9uKGEpe3RoaXMuX2lzUlRMP3RoaXMuX2luY3JlbWVudEtleShhKToKdGhpcy5fZGVjcmVtZW50S2V5KGEpfSxfcmlnaHRLZXk6ZnVuY3Rpb24oYSl7dGhpcy5faXNSVEw/dGhpcy5fZGVjcmVtZW50S2V5KGEpOnRoaXMuX2luY3JlbWVudEtleShhKX0sX2luY3JlbWVudEtleTpmdW5jdGlvbihhKXt0aGlzLmRpc2FibGVkfHwoImVuZCI9PT1hLmRldGFpbC5rZXk/dGhpcy52YWx1ZT10aGlzLm1heDp0aGlzLmluY3JlbWVudCgpLHRoaXMuZmlyZSgiY2hhbmdlIiksYS5wcmV2ZW50RGVmYXVsdCgpKX0sX2RlY3JlbWVudEtleTpmdW5jdGlvbihhKXt0aGlzLmRpc2FibGVkfHwoImhvbWUiPT09YS5kZXRhaWwua2V5P3RoaXMudmFsdWU9dGhpcy5taW46dGhpcy5kZWNyZW1lbnQoKSx0aGlzLmZpcmUoImNoYW5nZSIpLGEucHJldmVudERlZmF1bHQoKSl9LF9jaGFuZ2VWYWx1ZTpmdW5jdGlvbihhKXt0aGlzLnZhbHVlPWEudGFyZ2V0LnZhbHVlO3RoaXMuZmlyZSgiY2hhbmdlIix7Y29tcG9zZWQ6ITB9KX0sX2lucHV0S2V5RG93bjpmdW5jdGlvbihhKXthLnN0b3BQcm9wYWdhdGlvbigpfSwKX2NyZWF0ZVJpcHBsZTpmdW5jdGlvbigpe3RoaXMuX3JpcHBsZUNvbnRhaW5lcj10aGlzLiQuc2xpZGVyS25vYjtyZXR1cm4gUG9seW1lci5QYXBlcklua3lGb2N1c0JlaGF2aW9ySW1wbC5fY3JlYXRlUmlwcGxlLmNhbGwodGhpcyl9LF9mb2N1c2VkQ2hhbmdlZDpmdW5jdGlvbihhKXthJiZ0aGlzLmVuc3VyZVJpcHBsZSgpO3RoaXMuaGFzUmlwcGxlKCkmJih0aGlzLl9yaXBwbGUuc3R5bGUuZGlzcGxheT1hPyIiOiJub25lIix0aGlzLl9yaXBwbGUuaG9sZERvd249YSl9fSk7Cjwvc2NyaXB0Pgo8L2RvbS1tb2R1bGU+CgoKCgoKPGRvbS1tb2R1bGUgaWQ9InRmLXNtb290aGluZy1pbnB1dCI+CiAgPHRlbXBsYXRlPgogICAgPGgzIGNsYXNzPSJ0aXRsZSI+U21vb3RoaW5nPC9oMz4KICAgIDxkaXYgY2xhc3M9InNtb290aGluZy1ibG9jayI+CiAgICAgIDxwYXBlci1zbGlkZXIgaWQ9InNsaWRlciIgaW1tZWRpYXRlLXZhbHVlPSJ7e19pbW1lZGlhdGVXZWlnaHROdW1iZXJGb3JQYXBlclNsaWRlcn19IiBtYXg9IltbbWF4XV0iIG1pbj0iW1ttaW5dXSIgcGluIHN0ZXA9Iltbc3RlcF1dIiB0eXBlPSJudW1iZXIiIHZhbHVlPSJ7e3dlaWdodH19Ij48L3BhcGVyLXNsaWRlcj4KICAgICAgPHBhcGVyLWlucHV0IGlkPSJpbnB1dCIgbGFiZWw9IndlaWdodCIgbm8tbGFiZWwtZmxvYXQgdmFsdWU9Int7X2lucHV0V2VpZ2h0U3RyaW5nRm9yUGFwZXJJbnB1dH19IiB0eXBlPSJudW1iZXIiIHN0ZXA9Iltbc3RlcF1dIiBtaW49IltbbWluXV0iIG1heD0iW1ttYXhdXSI+PC9wYXBlci1pbnB1dD4KICAgIDwvZGl2PgogICAgPHN0eWxlPgogICAgICAudGl0bGUgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1ncmV5LTgwMCk7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDVweDsKICAgICAgfQoKICAgICAgLnNtb290aGluZy1ibG9jayB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgfQoKICAgICAgcGFwZXItc2xpZGVyIHsKICAgICAgICAtLXBhcGVyLXNsaWRlci1hY3RpdmUtY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLWtub2ItY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLWtub2Itc3RhcnQtYm9yZGVyLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1rbm9iLXN0YXJ0LWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1tYXJrZXJzLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1waW4tY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLXBpbi1zdGFydC1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgZmxleC1ncm93OiAyOwogICAgICB9CgogICAgICBwYXBlci1pbnB1dCB7CiAgICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItZm9jdXMtY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWlucHV0OiB7CiAgICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgfQogICAgICAgIC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWxhYmVsOiB7CiAgICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgfQogICAgICAgIHdpZHRoOiA2MHB4OwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CiAgPHNjcmlwdD4vL35+V0VCUEFUSH5+L3RmLXNjYWxhci1kYXNoYm9hcmQvdGYtc21vb3RoaW5nLWlucHV0Lmh0bWwuanMKUG9seW1lcih7aXM6InRmLXNtb290aGluZy1pbnB1dCIscHJvcGVydGllczp7c3RlcDpOdW1iZXIsbWF4Ok51bWJlcixtaW46TnVtYmVyLHdlaWdodDp7dHlwZTpOdW1iZXIsdmFsdWU6LjYsbm90aWZ5OiEwfSxfaW1tZWRpYXRlV2VpZ2h0TnVtYmVyRm9yUGFwZXJTbGlkZXI6e3R5cGU6TnVtYmVyLG5vdGlmeTohMCxvYnNlcnZlcjoiX2ltbWVkaWF0ZVdlaWdodE51bWJlckZvclBhcGVyU2xpZGVyQ2hhbmdlZCJ9LF9pbnB1dFdlaWdodFN0cmluZ0ZvclBhcGVySW5wdXQ6e3R5cGU6U3RyaW5nLG5vdGlmeTohMCxvYnNlcnZlcjoiX2lucHV0V2VpZ2h0U3RyaW5nRm9yUGFwZXJJbnB1dENoYW5nZWQifX0sX3VwZGF0ZVdlaWdodDpfLmRlYm91bmNlKGZ1bmN0aW9uKGEpe3RoaXMud2VpZ2h0PWF9LDI1MCksX2ltbWVkaWF0ZVdlaWdodE51bWJlckZvclBhcGVyU2xpZGVyQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMuX2lucHV0V2VpZ2h0U3RyaW5nRm9yUGFwZXJJbnB1dD10aGlzLl9pbW1lZGlhdGVXZWlnaHROdW1iZXJGb3JQYXBlclNsaWRlci50b1N0cmluZygpOwp0aGlzLl91cGRhdGVXZWlnaHQuY2FsbCh0aGlzLHRoaXMuX2ltbWVkaWF0ZVdlaWdodE51bWJlckZvclBhcGVyU2xpZGVyKX0sX2lucHV0V2VpZ2h0U3RyaW5nRm9yUGFwZXJJbnB1dENoYW5nZWQ6ZnVuY3Rpb24oKXswPit0aGlzLl9pbnB1dFdlaWdodFN0cmluZ0ZvclBhcGVySW5wdXQ/dGhpcy5faW5wdXRXZWlnaHRTdHJpbmdGb3JQYXBlcklucHV0PSIwIjoxPCt0aGlzLl9pbnB1dFdlaWdodFN0cmluZ0ZvclBhcGVySW5wdXQmJih0aGlzLl9pbnB1dFdlaWdodFN0cmluZ0ZvclBhcGVySW5wdXQ9IjEiKTt2YXIgYT0rdGhpcy5faW5wdXRXZWlnaHRTdHJpbmdGb3JQYXBlcklucHV0O2lzTmFOKGEpfHx0aGlzLl91cGRhdGVXZWlnaHQuY2FsbCh0aGlzLGEpfX0pOwo8L3NjcmlwdD4KPC9kb20tbW9kdWxlPgoKCgo8ZG9tLW1vZHVsZSBpZD0idGYtc2NhbGFyLWRhc2hib2FyZCI+CiAgPHRlbXBsYXRlPgogICAgPHRmLWRhc2hib2FyZC1sYXlvdXQ+CiAgICAgIDxkaXYgY2xhc3M9InNpZGViYXIiIHNsb3Q9InNpZGViYXIiPgogICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJsaW5lLWl0ZW0iPgogICAgICAgICAgICA8cGFwZXItY2hlY2tib3ggaWQ9InNob3ctZG93bmxvYWQtbGlua3MiIGNoZWNrZWQ9Int7X3Nob3dEb3dubG9hZExpbmtzfX0iPlNob3cgZGF0YSBkb3dubG9hZCBsaW5rczwvcGFwZXItY2hlY2tib3g+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImxpbmUtaXRlbSI+CiAgICAgICAgICAgIDxwYXBlci1jaGVja2JveCBpZD0iaWdub3JlLXktb3V0bGllciIgY2hlY2tlZD0ie3tfaWdub3JlWU91dGxpZXJzfX0iPklnbm9yZSBvdXRsaWVycyBpbiBjaGFydCBzY2FsaW5nPC9wYXBlci1jaGVja2JveD4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBpZD0idG9vbHRpcC1zb3J0aW5nIj4KICAgICAgICAgICAgPGRpdj5Ub29sdGlwIHNvcnRpbmcgbWV0aG9kOjwvZGl2PgogICAgICAgICAgICA8cGFwZXItZHJvcGRvd24tbWVudSBuby1sYWJlbC1mbG9hdCBzZWxlY3RlZC1pdGVtLWxhYmVsPSJ7e190b29sdGlwU29ydGluZ01ldGhvZH19Ij4KICAgICAgICAgICAgICA8cGFwZXItbGlzdGJveCBjbGFzcz0iZHJvcGRvd24tY29udGVudCIgc2VsZWN0ZWQ9IjAiIHNsb3Q9ImRyb3Bkb3duLWNvbnRlbnQiPgogICAgICAgICAgICAgICAgPHBhcGVyLWl0ZW0+ZGVmYXVsdDwvcGFwZXItaXRlbT4KICAgICAgICAgICAgICAgIDxwYXBlci1pdGVtPmRlc2NlbmRpbmc8L3BhcGVyLWl0ZW0+CiAgICAgICAgICAgICAgICA8cGFwZXItaXRlbT5hc2NlbmRpbmc8L3BhcGVyLWl0ZW0+CiAgICAgICAgICAgICAgICA8cGFwZXItaXRlbT5uZWFyZXN0PC9wYXBlci1pdGVtPgogICAgICAgICAgICAgIDwvcGFwZXItbGlzdGJveD4KICAgICAgICAgICAgPC9wYXBlci1kcm9wZG93bi1tZW51PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIj4KICAgICAgICAgIDx0Zi1zbW9vdGhpbmctaW5wdXQgd2VpZ2h0PSJ7e19zbW9vdGhpbmdXZWlnaHR9fSIgc3RlcD0iMC4wMDEiIG1pbj0iMCIgbWF4PSIwLjk5OSI+PC90Zi1zbW9vdGhpbmctaW5wdXQ+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIj4KICAgICAgICAgIDx0Zi1vcHRpb24tc2VsZWN0b3IgaWQ9IngtdHlwZS1zZWxlY3RvciIgbmFtZT0iSG9yaXpvbnRhbCBBeGlzIiBzZWxlY3RlZC1pZD0ie3tfeFR5cGV9fSI+CiAgICAgICAgICAgIDxwYXBlci1idXR0b24gaWQ9InN0ZXAiPnN0ZXA8L3BhcGVyLWJ1dHRvbj48cGFwZXItYnV0dG9uIGlkPSJyZWxhdGl2ZSI+cmVsYXRpdmU8L3BhcGVyLWJ1dHRvbj48cGFwZXItYnV0dG9uIGlkPSJ3YWxsX3RpbWUiPndhbGw8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgIDwvdGYtb3B0aW9uLXNlbGVjdG9yPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiI+CiAgICAgICAgICA8dGYtcnVucy1zZWxlY3RvciBzZWxlY3RlZC1ydW5zPSJ7e19zZWxlY3RlZFJ1bnN9fSI+CiAgICAgICAgICA8L3RmLXJ1bnMtc2VsZWN0b3I+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjZW50ZXIiIHNsb3Q9ImNlbnRlciI+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJuby1kYXRhLXdhcm5pbmciPgogICAgICAgICAgICA8aDM+Tm8gc2NhbGFyIGRhdGEgd2FzIGZvdW5kLjwvaDM+CiAgICAgICAgICAgIDxwPlByb2JhYmxlIGNhdXNlczoKICAgICAgICAgICAgPHVsPgogICAgICAgICAgICAgIDxsaT5Zb3UgaGF2ZW7igJl0IHdyaXR0ZW4gYW55IHNjYWxhciBkYXRhIHRvIHlvdXIgZXZlbnQgZmlsZXMuPC9saT4KICAgICAgICAgICAgICA8bGk+VGVuc29yQm9hcmQgY2Fu4oCZdCBmaW5kIHlvdXIgZXZlbnQgZmlsZXMuPC9saT4KICAgICAgICAgICAgPC91bD4KCiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdeKAmXJlIG5ldyB0byB1c2luZyBUZW5zb3JCb2FyZCwgYW5kIHdhbnQgdG8gZmluZCBvdXQgaG93IHRvCiAgICAgICAgICAgICAgYWRkIGRhdGEgYW5kIHNldCB1cCB5b3VyIGV2ZW50IGZpbGVzLCBjaGVjayBvdXQgdGhlCiAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kIj5SRUFETUU8L2E+CiAgICAgICAgICAgICAgYW5kIHBlcmhhcHMgdGhlCiAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvZ2V0X3N0YXJ0ZWQvc3VtbWFyaWVzX2FuZF90ZW5zb3Jib2FyZCI+VGVuc29yQm9hcmQgdHV0b3JpYWw8L2E+LgogICAgICAgICAgICAKCiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdSB0aGluayBUZW5zb3JCb2FyZCBpcyBjb25maWd1cmVkIHByb3Blcmx5LCBwbGVhc2Ugc2VlCiAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kI215LXRlbnNvcmJvYXJkLWlzbnQtc2hvd2luZy1hbnktZGF0YS13aGF0cy13cm9uZyI+dGhlIHNlY3Rpb24gb2YgdGhlIFJFQURNRSBkZXZvdGVkIHRvIG1pc3NpbmcgZGF0YSBwcm9ibGVtczwvYT4KICAgICAgICAgICAgICBhbmQgY29uc2lkZXIgZmlsaW5nIGFuIGlzc3VlIG9uIEdpdEh1Yi4KICAgICAgICAgICAgCiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shX2RhdGFOb3RGb3VuZF1dIj4KICAgICAgICAgIDx0Zi10YWctZmlsdGVyZXIgdGFnLWZpbHRlcj0ie3tfdGFnRmlsdGVyfX0iPjwvdGYtdGFnLWZpbHRlcmVyPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tfY2F0ZWdvcmllc11dIiBhcz0iY2F0ZWdvcnkiPgogICAgICAgICAgICA8dGYtY2F0ZWdvcnktcGFnaW5hdGVkLXZpZXcgY2F0ZWdvcnk9IltbY2F0ZWdvcnldXSIgaW5pdGlhbC1vcGVuZWQ9IltbX3Nob3VsZE9wZW4oaW5kZXgpXV0iPgogICAgICAgICAgICAgIDx0ZW1wbGF0ZT4KICAgICAgICAgICAgICAgIDx0Zi1zY2FsYXItY2FyZCBhY3RpdmU9IltbYWN0aXZlXV0iIGRhdGEtdG8tbG9hZD0iW1tpdGVtLnNlcmllc11dIiBpZ25vcmUteS1vdXRsaWVycz0iW1tfaWdub3JlWU91dGxpZXJzXV0iIG11bHRpLWV4cGVyaW1lbnRzPSJbW19nZXRNdWx0aUV4cGVyaW1lbnRzKGRhdGFTZWxlY3Rpb24pXV0iIHJlcXVlc3QtbWFuYWdlcj0iW1tfcmVxdWVzdE1hbmFnZXJdXSIgc2hvdy1kb3dubG9hZC1saW5rcz0iW1tfc2hvd0Rvd25sb2FkTGlua3NdXSIgc21vb3RoaW5nLWVuYWJsZWQ9IltbX3Ntb290aGluZ0VuYWJsZWRdXSIgc21vb3RoaW5nLXdlaWdodD0iW1tfc21vb3RoaW5nV2VpZ2h0XV0iIHRhZy1tZXRhZGF0YT0iW1tfdGFnTWV0YWRhdGEoY2F0ZWdvcnksIF9ydW5Ub1RhZ0luZm8sIGl0ZW0pXV0iIHRhZz0iW1tpdGVtLnRhZ11dIiB0b29sdGlwLXNvcnRpbmctbWV0aG9kPSJbW190b29sdGlwU29ydGluZ01ldGhvZF1dIiB4LXR5cGU9IltbX3hUeXBlXV0iPjwvdGYtc2NhbGFyLWNhcmQ+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPC90Zi1jYXRlZ29yeS1wYWdpbmF0ZWQtdmlldz4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPC9kaXY+CiAgICA8L3RmLWRhc2hib2FyZC1sYXlvdXQ+CgogICAgPHN0eWxlIGluY2x1ZGU9ImRhc2hib2FyZC1zdHlsZSI+PC9zdHlsZT4KICAgIDxzdHlsZT4KICAgICAgI3Rvb2x0aXAtc29ydGluZyB7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBtYXJnaW4tdG9wOiAxNXB4OwogICAgICB9CiAgICAgICN0b29sdGlwLXNvcnRpbmcgcGFwZXItZHJvcGRvd24tbWVudSB7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDEwcHg7CiAgICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItZm9jdXMtY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIHdpZHRoOiAxMDVweDsKICAgICAgfQogICAgICAubGluZS1pdGVtIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwYWRkaW5nLXRvcDogNXB4OwogICAgICB9CiAgICAgIC5uby1kYXRhLXdhcm5pbmcgewogICAgICAgIG1heC13aWR0aDogNTQwcHg7CiAgICAgICAgbWFyZ2luOiA4MHB4IGF1dG8gMCBhdXRvOwogICAgICB9CiAgICAgIC5jZW50ZXIgewogICAgICAgIG92ZXJmbG93LXg6IGhpZGRlbjsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgoKICA8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdGYtc2NhbGFyLWRhc2hib2FyZC90Zi1zY2FsYXItZGFzaGJvYXJkLmh0bWwuanMKUG9seW1lcih7aXM6InRmLXNjYWxhci1kYXNoYm9hcmQiLHByb3BlcnRpZXM6e19zaG93RG93bmxvYWRMaW5rczp7dHlwZTpCb29sZWFuLG5vdGlmeTohMCx2YWx1ZTpWbC5nZXRCb29sZWFuSW5pdGlhbGl6ZXIoIl9zaG93RG93bmxvYWRMaW5rcyIse2RlZmF1bHRWYWx1ZTohMSx1c2VMb2NhbFN0b3JhZ2U6ITB9KSxvYnNlcnZlcjoiX3Nob3dEb3dubG9hZExpbmtzT2JzZXJ2ZXIifSxfc21vb3RoaW5nV2VpZ2h0Ont0eXBlOk51bWJlcixub3RpZnk6ITAsdmFsdWU6VmwuZ2V0TnVtYmVySW5pdGlhbGl6ZXIoIl9zbW9vdGhpbmdXZWlnaHQiLHtkZWZhdWx0VmFsdWU6LjZ9KSxvYnNlcnZlcjoiX3Ntb290aGluZ1dlaWdodE9ic2VydmVyIn0sX3Ntb290aGluZ0VuYWJsZWQ6e3R5cGU6Qm9vbGVhbixjb21wdXRlZDoiX2NvbXB1dGVTbW9vdGhpbmdFbmFibGVkKF9zbW9vdGhpbmdXZWlnaHQpIn0sX2lnbm9yZVlPdXRsaWVyczp7dHlwZTpCb29sZWFuLHZhbHVlOlZsLmdldEJvb2xlYW5Jbml0aWFsaXplcigiX2lnbm9yZVlPdXRsaWVycyIsCntkZWZhdWx0VmFsdWU6ITAsdXNlTG9jYWxTdG9yYWdlOiEwfSksb2JzZXJ2ZXI6Il9pZ25vcmVZT3V0bGllcnNPYnNlcnZlciJ9LF94VHlwZTp7dHlwZTpTdHJpbmcsdmFsdWU6Ym0uWFR5cGUuU1RFUH0sX3NlbGVjdGVkUnVuczp7dHlwZTpBcnJheSx2YWx1ZTooKT0+W119LF9ydW5Ub1RhZ0luZm86T2JqZWN0LF9kYXRhTm90Rm91bmQ6Qm9vbGVhbixfdGFnRmlsdGVyOnt0eXBlOlN0cmluZyx2YWx1ZToiIn0sX2NhdGVnb3JpZXNEb21SZWFkeTpCb29sZWFuLF9jYXRlZ29yaWVzOnt0eXBlOkFycmF5LHZhbHVlOigpPT5bXX0sX3JlcXVlc3RNYW5hZ2VyOnt0eXBlOk9iamVjdCx2YWx1ZTooKT0+bmV3IFBrLlJlcXVlc3RNYW5hZ2VyKDUwKX19LGJlaGF2aW9yczpbV2wuQXJyYXlVcGRhdGVIZWxwZXJdLG9ic2VydmVyczpbIl91cGRhdGVDYXRlZ29yaWVzKF9ydW5Ub1RhZ0luZm8sIF9zZWxlY3RlZFJ1bnMsIF90YWdGaWx0ZXIsIF9jYXRlZ29yaWVzRG9tUmVhZHkpIl0sX3Nob3dEb3dubG9hZExpbmtzT2JzZXJ2ZXI6VmwuZ2V0Qm9vbGVhbk9ic2VydmVyKCJfc2hvd0Rvd25sb2FkTGlua3MiLAp7ZGVmYXVsdFZhbHVlOiExLHVzZUxvY2FsU3RvcmFnZTohMH0pLF9zbW9vdGhpbmdXZWlnaHRPYnNlcnZlcjpWbC5nZXROdW1iZXJPYnNlcnZlcigiX3Ntb290aGluZ1dlaWdodCIse2RlZmF1bHRWYWx1ZTouNn0pLF9pZ25vcmVZT3V0bGllcnNPYnNlcnZlcjpWbC5nZXRCb29sZWFuT2JzZXJ2ZXIoIl9pZ25vcmVZT3V0bGllcnMiLHtkZWZhdWx0VmFsdWU6ITAsdXNlTG9jYWxTdG9yYWdlOiEwfSksX2NvbXB1dGVTbW9vdGhpbmdFbmFibGVkKGEpe3JldHVybiAwPGF9LF9nZXRDYXRlZ29yeUtleShhKXtyZXR1cm4gYS5tZXRhZGF0YS50eXBlPT1Ray5DYXRlZ29yeVR5cGUuU0VBUkNIX1JFU1VMVFM/IiI6YS5uYW1lfSxfc2hvdWxkT3BlbihhKXtyZXR1cm4gMj49YX0scmVhZHkoKXt0aGlzLnJlbG9hZCgpfSxyZWxvYWQoKXt0aGlzLl9mZXRjaFRhZ3MoKS50aGVuKCgpPT57dGhpcy5fcmVsb2FkQ2hhcnRzKCl9KX0sX2ZldGNoVGFncygpe2NvbnN0IGE9UGsuZ2V0Um91dGVyKCkucGx1Z2luUm91dGUoInNjYWxhcnMiLAoiL3RhZ3MiLG5ldyBVUkxTZWFyY2hQYXJhbXMoe2V4cGVyaW1lbnQ6UGsuZ2V0RXhwZXJpbWVudElkKCl9KSk7cmV0dXJuIHRoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3QoYSkudGhlbihjPT57aWYoIV8uaXNFcXVhbChjLHRoaXMuX3J1blRvVGFnSW5mbykpe3ZhciBkPV8ubWFwVmFsdWVzKGMsZj0+T2JqZWN0LmtleXMoZikpO2Q9UGsuZ2V0VGFncyhkKTt0aGlzLnNldCgiX2RhdGFOb3RGb3VuZCIsMD09PWQubGVuZ3RoKTt0aGlzLnNldCgiX3J1blRvVGFnSW5mbyIsYyk7dGhpcy5hc3luYygoKT0+e3RoaXMuc2V0KCJfY2F0ZWdvcmllc0RvbVJlYWR5IiwhMCl9KX19KX0sX3JlbG9hZENoYXJ0cygpe3RoaXMucm9vdC5xdWVyeVNlbGVjdG9yQWxsKCJ0Zi1zY2FsYXItY2FyZCIpLmZvckVhY2goYT0+e2EucmVsb2FkKCl9KX0sX3VwZGF0ZUNhdGVnb3JpZXMoYSxjLGQpe2E9Xy5tYXBWYWx1ZXMoYSxnPT5PYmplY3Qua2V5cyhnKSk7Yz1Ray5jYXRlZ29yaXplVGFncyhhLGMsZCk7CmNvbnN0IGY9UGsuZ2V0RXhwZXJpbWVudElkKCk7Yy5mb3JFYWNoKGc9PntnLml0ZW1zPWcuaXRlbXMubWFwKGw9Pih7dGFnOmwudGFnLHNlcmllczpsLnJ1bnMubWFwKGs9Pih7cnVuOmssdGFnOmwudGFnLGV4cGVyaW1lbnQ6Zn0pKX0pKX0pO3RoaXMudXBkYXRlQXJyYXlQcm9wKCJfY2F0ZWdvcmllcyIsYyx0aGlzLl9nZXRDYXRlZ29yeUtleSl9LF90YWdNZXRhZGF0YShhLGMsZCl7Y29uc3QgZj1kLnRhZyxnPXt9O2Quc2VyaWVzLmZvckVhY2goKHtydW46bX0pPT57Z1ttXT1jW21dW2ZdfSk7ZD1mLnJlcGxhY2UoL1wvc2NhbGFyX3N1bW1hcnkkLywiIik7bGV0IHtkZXNjcmlwdGlvbjpsLGRpc3BsYXlOYW1lOmt9PWFtLmFnZ3JlZ2F0ZVRhZ0luZm8oZyxkKTthLm1ldGFkYXRhLnR5cGU9PVFrLkNhdGVnb3J5VHlwZS5QUkVGSVhfR1JPVVAmJmsuc3RhcnRzV2l0aChhLm5hbWUrIi8iKSYmKGs9ay5zbGljZShhLm5hbWUubGVuZ3RoKzEpKTtyZXR1cm57ZGVzY3JpcHRpb246bCxkaXNwbGF5TmFtZTprfX19KTsKPC9zY3JpcHQ+CjwvZG9tLW1vZHVsZT4KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgo8ZG9tLW1vZHVsZSBpZD0idGYtY3VzdG9tLXNjYWxhci1jYXJkLXN0eWxlIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBtYXJnaW46IDVweCAxMHB4OwogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICB3aWR0aDogMzMwcHg7CiAgICAgICAgdmVydGljYWwtYWxpZ246IHRleHQtdG9wOwogICAgICB9CgogICAgICA6aG9zdChbX2V4cGFuZGVkXSkgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICA6aG9zdChbX2V4cGFuZGVkXSkgI3RmLWxpbmUtY2hhcnQtZGF0YS1sb2FkZXItY29udGFpbmVyIHsKICAgICAgICBoZWlnaHQ6IDQwMHB4OwogICAgICB9CgogICAgICBoMSB7CiAgICAgICAgZm9udC1zaXplOiAxOXB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CiAgICAgIH0KCiAgICAgICN0Zi1saW5lLWNoYXJ0LWRhdGEtbG9hZGVyLWNvbnRhaW5lciB7CiAgICAgICAgaGVpZ2h0OiAyMDBweDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgI2J1dHRvbnMgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgfQoKICAgICAgcGFwZXItaWNvbi1idXR0b24gewogICAgICAgIGNvbG9yOiAjMjE5NmYzOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDEwMCU7CiAgICAgICAgd2lkdGg6IDMycHg7CiAgICAgICAgaGVpZ2h0OiAzMnB4OwogICAgICAgIHBhZGRpbmc6IDRweDsKICAgICAgfQoKICAgICAgcGFwZXItaWNvbi1idXR0b25bc2VsZWN0ZWRdIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS10Yi11aS1saWdodC1hY2NlbnQpOwogICAgICB9CgogICAgICAuZG93bmxvYWQtbGlua3MgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgaGVpZ2h0OiAzMnB4OwogICAgICB9CgogICAgICAuZG93bmxvYWQtbGlua3MgYSB7CiAgICAgICAgZm9udC1zaXplOiAxMHB4OwogICAgICAgIGFsaWduLXNlbGY6IGNlbnRlcjsKICAgICAgICBtYXJnaW46IDJweDsKICAgICAgfQoKICAgICAgLmRvd25sb2FkLWxpbmtzIHBhcGVyLWRyb3Bkb3duLW1lbnUgewogICAgICAgIHdpZHRoOiAxMDBweDsKICAgICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1sYWJlbDogewogICAgICAgICAgZm9udC1zaXplOiAxMHB4OwogICAgICAgIH0KICAgICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnB1dDogewogICAgICAgICAgZm9udC1zaXplOiAxMHB4OwogICAgICAgIH0KICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+Cgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdGYtY3VzdG9tLXNjYWxhci1kYXNoYm9hcmQvdGYtY3VzdG9tLXNjYWxhci1oZWxwZXJzLmpzCnZhciBnbTsKKGZ1bmN0aW9uKGEpe2NsYXNzIGN7Y29uc3RydWN0b3IoZixnLGwsayxtKXt0aGlzLnJ1bj1mO3RoaXMudGFnPWc7dGhpcy5uYW1lPWw7dGhpcy5zY2FsYXJEYXRhPWs7dGhpcy5zeW1ib2w9bX1nZXROYW1lKCl7cmV0dXJuIHRoaXMubmFtZX1zZXREYXRhKGYpe3RoaXMuc2NhbGFyRGF0YT1mfWdldERhdGEoKXtyZXR1cm4gdGhpcy5zY2FsYXJEYXRhfWdldFJ1bigpe3JldHVybiB0aGlzLnJ1bn1nZXRUYWcoKXtyZXR1cm4gdGhpcy50YWd9Z2V0U3ltYm9sKCl7cmV0dXJuIHRoaXMuc3ltYm9sfX1hLkRhdGFTZXJpZXM9YzthLmdlbmVyYXRlRGF0YVNlcmllc05hbWU9ZnVuY3Rpb24oZixnKXtyZXR1cm5gJHtnfSAoJHtmfSlgfTtjbGFzcyBke2NvbnN0cnVjdG9yKGYpe3RoaXMucnVuQmFzZWRDb2xvclNjYWxlPWZ9c2NhbGUoZil7cmV0dXJuIHRoaXMucnVuQmFzZWRDb2xvclNjYWxlLnNjYWxlKHRoaXMucGFyc2VSdW5OYW1lKGYpKX1wYXJzZVJ1bk5hbWUoZil7cmV0dXJuKGY9Zi5tYXRjaCgvXCgoLiopXCkkLykpPwpmWzFdOiIifX1hLkRhdGFTZXJpZXNDb2xvclNjYWxlPWR9KShnbXx8KGdtPXt9KSk7Cjwvc2NyaXB0PgoKCgo8ZG9tLW1vZHVsZSBpZD0idGYtY3VzdG9tLXNjYWxhci1tYXJnaW4tY2hhcnQtY2FyZCI+CiAgPHRlbXBsYXRlPgogICAgPHRmLWNhcmQtaGVhZGluZyBkaXNwbGF5LW5hbWU9IltbX3RpdGxlRGlzcGxheVN0cmluZ11dIj48L3RmLWNhcmQtaGVhZGluZz4KICAgIDxkaXYgaWQ9InRmLWxpbmUtY2hhcnQtZGF0YS1sb2FkZXItY29udGFpbmVyIj4KICAgICAgPHRmLWxpbmUtY2hhcnQtZGF0YS1sb2FkZXIgaWQ9ImxvYWRlciIgYWN0aXZlPSJbW2FjdGl2ZV1dIiBjb2xvci1zY2FsZT0iW1tfY29sb3JTY2FsZV1dIiBkYXRhLXNlcmllcz0iW1tfc2VyaWVzTmFtZXNdXSIgZ2V0LWRhdGEtbG9hZC11cmw9IltbX2RhdGFVcmxdXSIgZmlsbC1hcmVhPSJbW19maWxsQXJlYV1dIiBpZ25vcmUteS1vdXRsaWVycz0iW1tpZ25vcmVZT3V0bGllcnNdXSIgbG9hZC1rZXk9IltbX3RhZ0ZpbHRlcl1dIiBkYXRhLXRvLWxvYWQ9IltbcnVuc11dIiBsb2ctc2NhbGUtYWN0aXZlPSJbW19sb2dTY2FsZUFjdGl2ZV1dIiBsb2FkLWRhdGEtY2FsbGJhY2s9IltbX2NyZWF0ZVByb2Nlc3NEYXRhRnVuY3Rpb24obWFyZ2luQ2hhcnRTZXJpZXMpXV0iIHJlcXVlc3QtbWFuYWdlcj0iW1tyZXF1ZXN0TWFuYWdlcl1dIiBzeW1ib2wtZnVuY3Rpb249IltbX2NyZWF0ZVN5bWJvbEZ1bmN0aW9uKCldXSIgdG9vbHRpcC1jb2x1bW5zPSJbW190b29sdGlwQ29sdW1uc11dIiB0b29sdGlwLXNvcnRpbmctbWV0aG9kPSJbW3Rvb2x0aXBTb3J0aW5nTWV0aG9kXV0iIHgtdHlwZT0iW1t4VHlwZV1dIj4KICAgICAgPC90Zi1saW5lLWNoYXJ0LWRhdGEtbG9hZGVyPgogICAgPC9kaXY+CiAgICA8ZGl2IGlkPSJidXR0b25zIj4KICAgICAgPHBhcGVyLWljb24tYnV0dG9uIHNlbGVjdGVkJD0iW1tfZXhwYW5kZWRdXSIgaWNvbj0iZnVsbHNjcmVlbiIgb24tdGFwPSJfdG9nZ2xlRXhwYW5kZWQiPjwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgIDxwYXBlci1pY29uLWJ1dHRvbiBzZWxlY3RlZCQ9IltbX2xvZ1NjYWxlQWN0aXZlXV0iIGljb249ImxpbmUtd2VpZ2h0IiBvbi10YXA9Il90b2dnbGVMb2dTY2FsZSIgdGl0bGU9IlRvZ2dsZSB5LWF4aXMgbG9nIHNjYWxlIj48L3BhcGVyLWljb24tYnV0dG9uPgogICAgICA8cGFwZXItaWNvbi1idXR0b24gaWNvbj0ic2V0dGluZ3Mtb3ZlcnNjYW4iIG9uLXRhcD0iX3Jlc2V0RG9tYWluIiB0aXRsZT0iRml0IGRvbWFpbiB0byBkYXRhIj48L3BhcGVyLWljb24tYnV0dG9uPgogICAgICA8c3BhbiBzdHlsZT0iZmxleC1ncm93OiAxIj48L3NwYW4+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tzaG93RG93bmxvYWRMaW5rc11dIj4KICAgICAgICA8ZGl2IGNsYXNzPSJkb3dubG9hZC1saW5rcyI+CiAgICAgICAgICA8cGFwZXItZHJvcGRvd24tbWVudSBuby1sYWJlbC1mbG9hdD0idHJ1ZSIgbGFiZWw9InNlcmllcyB0byBkb3dubG9hZCIgc2VsZWN0ZWQtaXRlbS1sYWJlbD0ie3tfZGF0YVNlcmllc05hbWVUb0Rvd25sb2FkfX0iPgogICAgICAgICAgICA8cGFwZXItbGlzdGJveCBjbGFzcz0iZHJvcGRvd24tY29udGVudCIgc2xvdD0iZHJvcGRvd24tY29udGVudCI+CiAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tfc2VyaWVzTmFtZXNdXSIgYXM9ImRhdGFTZXJpZXNOYW1lIj4KICAgICAgICAgICAgICAgIDxwYXBlci1pdGVtIG5vLWxhYmVsLWZsb2F0PSJ0cnVlIj5bW2RhdGFTZXJpZXNOYW1lXV08L3BhcGVyLWl0ZW0+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPC9wYXBlci1saXN0Ym94PgogICAgICAgICAgPC9wYXBlci1kcm9wZG93bi1tZW51PgogICAgICAgICAgPGEgZG93bmxvYWQ9IltbX2RhdGFTZXJpZXNOYW1lVG9Eb3dubG9hZF1dLmNzdiIgaHJlZj0iW1tfY3N2VXJsKF9uYW1lVG9EYXRhU2VyaWVzLCBfZGF0YVNlcmllc05hbWVUb0Rvd25sb2FkKV1dIj5DU1Y8L2E+CiAgICAgICAgICA8YSBkb3dubG9hZD0iW1tfZGF0YVNlcmllc05hbWVUb0Rvd25sb2FkXV0uanNvbiIgaHJlZj0iW1tfanNvblVybChfbmFtZVRvRGF0YVNlcmllcywgX2RhdGFTZXJpZXNOYW1lVG9Eb3dubG9hZCldXSI+SlNPTjwvYT4KICAgICAgICA8L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgIDwvZGl2PgoKICAgIAogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19taXNzaW5nVGFncy5sZW5ndGhdXSI+CiAgICAgIDxkaXYgY2xhc3M9ImNvbGxhcHNpYmxlLWxpc3QtdGl0bGUiPgogICAgICAgIDxwYXBlci1pY29uLWJ1dHRvbiBpY29uPSJbW19nZXRUb2dnbGVDb2xsYXBzaWJsZUljb24oX21pc3NpbmdUYWdzQ29sbGFwc2libGVPcGVuZWQpXV0iIG9uLWNsaWNrPSJfdG9nZ2xlTWlzc2luZ1RhZ3NDb2xsYXBzaWJsZU9wZW4iIGNsYXNzPSJ0b2dnbGUtY29sbGFwc2libGUtYnV0dG9uIj4KICAgICAgICA8L3BhcGVyLWljb24tYnV0dG9uPgogICAgICAgIDxzcGFuIGNsYXNzPSJjb2xsYXBzaWJsZS10aXRsZS10ZXh0Ij4KICAgICAgICAgIDxpcm9uLWljb24gaWNvbj0iaWNvbnM6ZXJyb3IiPjwvaXJvbi1pY29uPiBNaXNzaW5nIFRhZ3MKICAgICAgICA8L3NwYW4+CiAgICAgIDwvZGl2PgogICAgICA8aXJvbi1jb2xsYXBzZSBvcGVuZWQ9IltbX21pc3NpbmdUYWdzQ29sbGFwc2libGVPcGVuZWRdXSI+CiAgICAgICAgPGRpdiBjbGFzcz0iZXJyb3ItY29udGVudCI+CiAgICAgICAgICA8aXJvbi1pY29uIGNsYXNzPSJlcnJvci1pY29uIiBpY29uPSJpY29uczplcnJvciI+PC9pcm9uLWljb24+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19taXNzaW5nVGFnc11dIiBhcz0ibWlzc2luZ0VudHJ5Ij4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibWlzc2luZy10YWdzLWZvci1ydW4tY29udGFpbmVyIj4KICAgICAgICAgICAgICBSdW4gIltbbWlzc2luZ0VudHJ5LnJ1bl1dIiBsYWNrcyBkYXRhIGZvciB0YWdzCiAgICAgICAgICAgICAgPHVsPgogICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1ttaXNzaW5nRW50cnkudGFnc11dIiBhcz0idGFnIj4KICAgICAgICAgICAgICAgICAgPGxpPltbdGFnXV08L2xpPgogICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICA8L3VsPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvaXJvbi1jb2xsYXBzZT4KICAgIDwvdGVtcGxhdGU+CgogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW190YWdGaWx0ZXJJbnZhbGlkXV0iPgogICAgICA8ZGl2IGNsYXNzPSJlcnJvci1jb250ZW50Ij4KICAgICAgICA8aXJvbi1pY29uIGNsYXNzPSJlcnJvci1pY29uIiBpY29uPSJpY29uczplcnJvciI+PC9pcm9uLWljb24+CiAgICAgICAgVGhpcyByZWd1bGFyIGV4cHJlc2lvbiBpcyBpbnZhbGlkOjxicj4KICAgICAgICA8c3BhbiBjbGFzcz0iaW52YWxpZC1yZWdleCI+W1tfdGFnRmlsdGVyXV08L3NwYW4+CiAgICAgIDwvZGl2PgogICAgPC90ZW1wbGF0ZT4KCiAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX3N0ZXBzTWlzbWF0Y2hdXSI+CiAgICAgIDxkaXYgY2xhc3M9ImVycm9yLWNvbnRlbnQiPgogICAgICAgIDxpcm9uLWljb24gY2xhc3M9ImVycm9yLWljb24iIGljb249Imljb25zOmVycm9yIj48L2lyb24taWNvbj4KICAgICAgICBUaGUgc3RlcHMgZm9yIHZhbHVlLCBsb3dlciwgYW5kIHVwcGVyIHRhZ3MgZG8gbm90IG1hdGNoOgogICAgICAgIDx1bD4KICAgICAgICAgIDxsaT4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRhZy1uYW1lIj5bW19zdGVwc01pc21hdGNoLnNlcmllc09iamVjdC52YWx1ZV1dPC9zcGFuPjoKICAgICAgICAgICAgW1tfc2VwYXJhdGVXaXRoQ29tbWFzKF9zdGVwc01pc21hdGNoLnZhbHVlU3RlcHMpXV0KICAgICAgICAgIDwvbGk+CiAgICAgICAgICA8bGk+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0YWctbmFtZSI+W1tfc3RlcHNNaXNtYXRjaC5zZXJpZXNPYmplY3QubG93ZXJdXTwvc3Bhbj46CiAgICAgICAgICAgIFtbX3NlcGFyYXRlV2l0aENvbW1hcyhfc3RlcHNNaXNtYXRjaC5sb3dlclN0ZXBzKV1dCiAgICAgICAgICA8L2xpPgogICAgICAgICAgPGxpPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0idGFnLW5hbWUiPltbX3N0ZXBzTWlzbWF0Y2guc2VyaWVzT2JqZWN0LnVwcGVyXV08L3NwYW4+OgogICAgICAgICAgICBbW19zZXBhcmF0ZVdpdGhDb21tYXMoX3N0ZXBzTWlzbWF0Y2gudXBwZXJTdGVwcyldXQogICAgICAgICAgPC9saT4KICAgICAgICA8L3VsPgogICAgICA8L2Rpdj4KICAgIDwvdGVtcGxhdGU+CgogICAgPGRpdiBpZD0ibWF0Y2hlcy1jb250YWluZXIiPgogICAgICA8ZGl2IGNsYXNzPSJjb2xsYXBzaWJsZS1saXN0LXRpdGxlIj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX3Nlcmllc05hbWVzLmxlbmd0aF1dIj4KICAgICAgICAgIDxwYXBlci1pY29uLWJ1dHRvbiBpY29uPSJbW19nZXRUb2dnbGVDb2xsYXBzaWJsZUljb24oX21hdGNoZXNMaXN0T3BlbmVkKV1dIiBvbi1jbGljaz0iX3RvZ2dsZU1hdGNoZXNPcGVuIiBjbGFzcz0idG9nZ2xlLW1hdGNoZXMtYnV0dG9uIj4KICAgICAgICAgIDwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgICAgPC90ZW1wbGF0ZT4KCiAgICAgICAgPHNwYW4gY2xhc3M9ImNvbGxhcHNpYmxlLXRpdGxlLXRleHQiPgogICAgICAgICAgTWF0Y2hlcyAoW1tfc2VyaWVzTmFtZXMubGVuZ3RoXV0pCiAgICAgICAgPC9zcGFuPgogICAgICA8L2Rpdj4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19zZXJpZXNOYW1lcy5sZW5ndGhdXSI+CiAgICAgICAgPGlyb24tY29sbGFwc2Ugb3BlbmVkPSJbW19tYXRjaGVzTGlzdE9wZW5lZF1dIj4KICAgICAgICAgIDxkaXYgaWQ9Im1hdGNoZXMtbGlzdCI+CiAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX3Nlcmllc05hbWVzXV0iIGFzPSJzZXJpZXNOYW1lIj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtYXRjaC1saXN0LWVudHJ5IiBzdHlsZT0iY29sb3I6IFtbX2RldGVybWluZUNvbG9yKF9jb2xvclNjYWxlLCBzZXJpZXNOYW1lKV1dOyI+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibWF0Y2gtZW50cnktc3ltYm9sIj4KICAgICAgICAgICAgICAgICAgW1tfZGV0ZXJtaW5lU3ltYm9sKF9uYW1lVG9EYXRhU2VyaWVzLCBzZXJpZXNOYW1lKV1dCiAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICBbW3Nlcmllc05hbWVdXQogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9pcm9uLWNvbGxhcHNlPgogICAgICA8L3RlbXBsYXRlPgogICAgPC9kaXY+CgogICAgPHN0eWxlIGluY2x1ZGU9InRmLWN1c3RvbS1zY2FsYXItY2FyZC1zdHlsZSI+PC9zdHlsZT4KICAgIDxzdHlsZT4KICAgICAgLmVycm9yLWNvbnRlbnQgewogICAgICAgIGJhY2tncm91bmQ6ICNmMDA7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNXB4OwogICAgICAgIGNvbG9yOiAjZmZmOwogICAgICAgIG1hcmdpbjogMTBweCAwIDAgMDsKICAgICAgICBwYWRkaW5nOiAxMHB4OwogICAgICB9CgogICAgICAuZXJyb3ItaWNvbiB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgZmlsbDogI2ZmZjsKICAgICAgICBtYXJnaW46IDAgYXV0byA1cHggYXV0bzsKICAgICAgfQoKICAgICAgLmludmFsaWQtcmVnZXggewogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICB9CgogICAgICAuZXJyb3ItY29udGVudCB1bCB7CiAgICAgICAgbWFyZ2luOiAxcHggMCAwIDA7CiAgICAgICAgcGFkZGluZzogMCAwIDAgMTlweDsKICAgICAgfQoKICAgICAgLnRhZy1uYW1lIHsKICAgICAgICBmb250LXdlaWdodDogYm9sZDsKICAgICAgfQoKICAgICAgLmNvbGxhcHNpYmxlLWxpc3QtdGl0bGUgewogICAgICAgIG1hcmdpbjogMTBweCAwIDVweCAwOwogICAgICB9CgogICAgICAuY29sbGFwc2libGUtdGl0bGUtdGV4dCB7CiAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKICAgICAgfQoKICAgICAgI21hdGNoZXMtbGlzdCB7CiAgICAgICAgbWF4LWhlaWdodDogMjAwcHg7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgfQoKICAgICAgLm1hdGNoLWxpc3QtZW50cnkgewogICAgICAgIG1hcmdpbjogMCAwIDVweCAwOwogICAgICB9CgogICAgICAubWF0Y2gtZW50cnktc3ltYm9sIHsKICAgICAgICBmb250LWZhbWlseTogYXJpYWwsIHNhbnMtc2VyaWY7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIHdpZHRoOiAxMHB4OwogICAgICB9CgogICAgICAubWlzc2luZy10YWdzLWZvci1ydW4tY29udGFpbmVyIHsKICAgICAgICBtYXJnaW46IDhweCAwIDAgMDsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgogIDxzY3JpcHQ+Ly9+fldFQlBBVEh+fi90Zi1jdXN0b20tc2NhbGFyLWRhc2hib2FyZC90Zi1jdXN0b20tc2NhbGFyLW1hcmdpbi1jaGFydC1jYXJkLmh0bWwuanMKUG9seW1lcih7aXM6InRmLWN1c3RvbS1zY2FsYXItbWFyZ2luLWNoYXJ0LWNhcmQiLHByb3BlcnRpZXM6e3J1bnM6QXJyYXkseFR5cGU6U3RyaW5nLGFjdGl2ZTp7dHlwZTpCb29sZWFuLHZhbHVlOiEwLHJlYWRPbmx5OiEwfSx0aXRsZTpTdHJpbmcsbWFyZ2luQ2hhcnRTZXJpZXM6QXJyYXksaWdub3JlWU91dGxpZXJzOkJvb2xlYW4scmVxdWVzdE1hbmFnZXI6T2JqZWN0LHNob3dEb3dubG9hZExpbmtzOkJvb2xlYW4sdGFnTWV0YWRhdGE6T2JqZWN0LHRvb2x0aXBTb3J0aW5nTWV0aG9kOlN0cmluZyxfY29sb3JTY2FsZTp7dHlwZTpPYmplY3QsdmFsdWU6bmV3IGdtLkRhdGFTZXJpZXNDb2xvclNjYWxlKHtzY2FsZTpabC5ydW5zQ29sb3JTY2FsZX0pLHJlYWRPbmx5OiEwfSxfdGFnRmlsdGVyOnt0eXBlOlN0cmluZyxjb21wdXRlZDoiX2NvbXB1dGVUYWdGaWx0ZXIobWFyZ2luQ2hhcnRTZXJpZXMpIn0sX3RhZ0ZpbHRlckludmFsaWQ6Qm9vbGVhbixfbmFtZVRvRGF0YVNlcmllczp7dHlwZTpPYmplY3QsCnZhbHVlOigpPT4oe30pfSxfc2VyaWVzTmFtZXM6e3R5cGU6T2JqZWN0LGNvbXB1dGVkOiJfY29tcHV0ZVNlcmllc05hbWVzKF9uYW1lVG9EYXRhU2VyaWVzLCBydW5zKSJ9LF9leHBhbmRlZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH0sX2xvZ1NjYWxlQWN0aXZlOkJvb2xlYW4sX2RhdGFVcmw6e3R5cGU6RnVuY3Rpb24sdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gYT0+e2NvbnN0IGM9dGhpcy5fdGFnRmlsdGVyO3JldHVybiBQay5hZGRQYXJhbXMoUGsuZ2V0Um91dGVyKCkucGx1Z2luUm91dGUoImN1c3RvbV9zY2FsYXJzIiwiL3NjYWxhcnMiKSx7dGFnOmMscnVuOmF9KX19fSxfcnVuVG9OZXh0QXZhaWxhYmxlU3ltYm9sSW5kZXg6e3R5cGU6T2JqZWN0LHZhbHVlOnt9fSxfbWF0Y2hlc0xpc3RPcGVuZWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sX3RpdGxlRGlzcGxheVN0cmluZzp7dHlwZTpTdHJpbmcsY29tcHV0ZWQ6Il9jb21wdXRlVGl0bGVEaXNwbGF5U3RyaW5nKHRpdGxlKSJ9LApfZmlsbEFyZWE6e3R5cGU6T2JqZWN0LHJlYWRPbmx5OiEwLHZhbHVlOntsb3dlckFjY2Vzc29yOmE9PmEubG93ZXIsaGlnaGVyQWNjZXNzb3I6YT0+YS51cHBlcn19LF90b29sdGlwQ29sdW1uczp7dHlwZTpBcnJheSx2YWx1ZTpmdW5jdGlvbigpe2NvbnN0IGE9Ym0ubXVsdGlzY2FsZUZvcm1hdHRlcihibS5ZX1RPT0xUSVBfRk9STUFUVEVSX1BSRUNJU0lPTiksYz1kPT5pc05hTihkKT8iTmFOIjphKGQpO3JldHVyblt7dGl0bGU6Ik5hbWUiLGV2YWx1YXRlOmQ9PmQuZGF0YXNldC5tZXRhZGF0YSgpLm5hbWV9LHt0aXRsZToiVmFsdWUiLGV2YWx1YXRlOmQ9PmMoZC5kYXR1bS5zY2FsYXIpfSx7dGl0bGU6Ikxvd2VyIE1hcmdpbiIsZXZhbHVhdGU6ZD0+YyhkLmRhdHVtLmxvd2VyKX0se3RpdGxlOiJVcHBlciBNYXJnaW4iLGV2YWx1YXRlOmQ9PmMoZC5kYXR1bS51cHBlcil9LHt0aXRsZToiU3RlcCIsZXZhbHVhdGU6ZD0+Ym0uc3RlcEZvcm1hdHRlcihkLmRhdHVtLnN0ZXApfSx7dGl0bGU6IlRpbWUiLApldmFsdWF0ZTpkPT5ibS50aW1lRm9ybWF0dGVyKGQuZGF0dW0ud2FsbF90aW1lKX0se3RpdGxlOiJSZWxhdGl2ZSIsZXZhbHVhdGU6ZD0+Ym0ucmVsYXRpdmVGb3JtYXR0ZXIoYm0ucmVsYXRpdmVBY2Nlc3NvcihkLmRhdHVtLC0xLGQuZGF0YXNldCkpfV19fSxfbWlzc2luZ1RhZ3M6e3R5cGU6QXJyYXksdmFsdWU6W119LF9taXNzaW5nVGFnc0NvbGxhcHNpYmxlT3BlbmVkOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LF9zdGVwc01pc21hdGNoOk9iamVjdH0sb2JzZXJ2ZXJzOlsiX3VwZGF0ZUNoYXJ0KF9uYW1lVG9EYXRhU2VyaWVzKSIsIl9yZWZyZXNoRGF0YVNlcmllcyhfdGFnRmlsdGVyKSJdLHJlbG9hZCgpe3RoaXMuJC5sb2FkZXIucmVsb2FkKCl9LHJlZHJhdygpe3RoaXMuJC5sb2FkZXIucmVkcmF3KCl9LF90b2dnbGVFeHBhbmRlZCgpe3RoaXMuc2V0KCJfZXhwYW5kZWQiLCF0aGlzLl9leHBhbmRlZCk7dGhpcy5yZWRyYXcoKX0sX3RvZ2dsZUxvZ1NjYWxlKCl7dGhpcy5zZXQoIl9sb2dTY2FsZUFjdGl2ZSIsCiF0aGlzLl9sb2dTY2FsZUFjdGl2ZSl9LF9yZXNldERvbWFpbigpe2NvbnN0IGE9dGhpcy4kLmxvYWRlcjthJiZhLnJlc2V0RG9tYWluKCl9LF9jc3ZVcmwoYSxjKXtpZighYylyZXR1cm4iIjthPXRoaXMuX2Rvd25sb2FkRGF0YVVybChhLGMpO3JldHVybiBQay5hZGRQYXJhbXMoYSx7Zm9ybWF0OiJjc3YifSl9LF9qc29uVXJsKGEsYyl7aWYoIWMpcmV0dXJuIiI7YT10aGlzLl9kb3dubG9hZERhdGFVcmwoYSxjKTtyZXR1cm4gUGsuYWRkUGFyYW1zKGEse2Zvcm1hdDoianNvbiJ9KX0sX2Rvd25sb2FkRGF0YVVybChhLGMpe2E9YVtjXTthPXt0YWc6YS5nZXRUYWcoKSxydW46YS5nZXRSdW4oKX07cmV0dXJuIFBrLmFkZFBhcmFtcyhQay5nZXRSb3V0ZXIoKS5wbHVnaW5Sb3V0ZSgiY3VzdG9tX3NjYWxhcnMiLCIvZG93bmxvYWRfZGF0YSIpLGEpfSxfY3JlYXRlUHJvY2Vzc0RhdGFGdW5jdGlvbihhKXtyZXR1cm4oYyxkLGYpPT57aWYoZi5yZWdleF92YWxpZCl7dmFyIGc9Xy5jbG9uZSh0aGlzLl9uYW1lVG9EYXRhU2VyaWVzKSwKbD1bXTtfLmZvckVhY2goYSxrPT57dmFyIG09ITEscD1mLnRhZ190b19ldmVudHNbay52YWx1ZV07Y29uc3QgcT1mLnRhZ190b19ldmVudHNbay5sb3dlcl0scj1mLnRhZ190b19ldmVudHNbay51cHBlcl07Xy5pc1VuZGVmaW5lZChwKSYmKGwucHVzaChrLnZhbHVlKSxtPSEwKTtfLmlzVW5kZWZpbmVkKHEpJiYobC5wdXNoKGsubG93ZXIpLG09ITApO18uaXNVbmRlZmluZWQocikmJihsLnB1c2goay51cHBlciksbT0hMCk7aWYoIW0pe3ZhciB0PXk9PnlbMV07aWYobT10aGlzLl9maW5kU3RlcE1pc21hdGNoKGsscC5tYXAodCkscS5tYXAodCksci5tYXAodCkpKXRoaXMuc2V0KCJfc3RlcHNNaXNtYXRjaCIsbSk7ZWxzZXt2YXIgdj15PT55WzJdO209cC5tYXAoKHkseCk9Pih7d2FsbF90aW1lOm5ldyBEYXRlKDFFMyp5WzBdKSxzdGVwOnQoeSksc2NhbGFyOnYoeSksbG93ZXI6dihxW3hdKSx1cHBlcjp2KHJbeF0pfSkpO3A9Z20uZ2VuZXJhdGVEYXRhU2VyaWVzTmFtZShkLGsudmFsdWUpOwp2YXIgQT1nW3BdO0E/QS5zZXREYXRhKG0pOihrPXRoaXMuX2NyZWF0ZU5ld0RhdGFTZXJpZXMoZCxrLnZhbHVlLHAsbSksZ1twXT1rKX19fSk7dGhpcy5zZXQoIl9uYW1lVG9EYXRhU2VyaWVzIixnKTtjPV8uZmluZEluZGV4KHRoaXMuX21pc3NpbmdUYWdzLGs9PmsucnVuPT09ZCk7aWYobC5sZW5ndGgmJjMhPWwubGVuZ3RoKXtjb25zdCBrPXtydW46ZCx0YWdzOmx9OzA8PWM/dGhpcy5zcGxpY2UoIl9taXNzaW5nVGFncyIsYywxLGspOnRoaXMucHVzaCgiX21pc3NpbmdUYWdzIixrKX1lbHNlIDA8PWMmJnRoaXMuc3BsaWNlKCJfbWlzc2luZ1RhZ3MiLGMsMSl9ZWxzZSB0aGlzLnNldCgiX3RhZ0ZpbHRlckludmFsaWQiLCEwKX19LF9maW5kU3RlcE1pc21hdGNoKGEsYyxkLGYpe3JldHVybiBfLmlzRXF1YWwoZCxjKSYmXy5pc0VxdWFsKGYsYyk/bnVsbDp7c2VyaWVzT2JqZWN0OmEsdmFsdWVTdGVwczpjLGxvd2VyU3RlcHM6ZCx1cHBlclN0ZXBzOmZ9fSxfY3JlYXRlTmV3RGF0YVNlcmllcyhhLApjLGQsZil7dGhpcy5fcnVuVG9OZXh0QXZhaWxhYmxlU3ltYm9sSW5kZXhbYV18PTA7Yz1uZXcgZ20uRGF0YVNlcmllcyhhLGMsZCxmLGJtLlNZTUJPTFNfTElTVFt0aGlzLl9ydW5Ub05leHRBdmFpbGFibGVTeW1ib2xJbmRleFthXV0pO3RoaXMuX3J1blRvTmV4dEF2YWlsYWJsZVN5bWJvbEluZGV4W2FdPSh0aGlzLl9ydW5Ub05leHRBdmFpbGFibGVTeW1ib2xJbmRleFthXSsxKSVibS5TWU1CT0xTX0xJU1QubGVuZ3RoO3JldHVybiBjfSxfdXBkYXRlQ2hhcnQoYSl7Xy5mb3JPd24oYSxjPT57dGhpcy4kLmxvYWRlci5zZXRTZXJpZXNEYXRhKGMuZ2V0TmFtZSgpLGMuZ2V0RGF0YSgpKX0pfSxfY29tcHV0ZVNlcmllc05hbWVzKCl7Y29uc3QgYT1uZXcgU2V0KHRoaXMucnVucyk7cmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMuX25hbWVUb0RhdGFTZXJpZXMpLmZpbHRlcigoWyxjXSk9PmEuaGFzKGMucnVuKSkubWFwKChbY10pPT5jKX0sX2RldGVybWluZUNvbG9yKGEsYyl7cmV0dXJuIGEuc2NhbGUoYyl9LApfcmVmcmVzaERhdGFTZXJpZXMoKXt0aGlzLnNldCgiX25hbWVUb0RhdGFTZXJpZXMiLHt9KX0sX2NyZWF0ZVN5bWJvbEZ1bmN0aW9uKCl7cmV0dXJuIGE9PnRoaXMuX25hbWVUb0RhdGFTZXJpZXNbYV0uZ2V0U3ltYm9sKCkubWV0aG9kKCl9LF9kZXRlcm1pbmVTeW1ib2woYSxjKXtyZXR1cm4gYVtjXS5nZXRTeW1ib2woKS5jaGFyYWN0ZXJ9LF9jb21wdXRlVGFnRmlsdGVyKGEpe3JldHVybiBfLmZsYXR0ZW4oYS5tYXAoYz0+W2MudmFsdWUsYy5sb3dlcixjLnVwcGVyXSkpLm1hcChjPT4iKCIrdGhpcy5fZXNjYXBlUmVnZXhDaGFyYWN0ZXJzKGMpKyIpIikuam9pbigifCIpfSxfZXNjYXBlUmVnZXhDaGFyYWN0ZXJzKGEpe3JldHVybiBhLnJlcGxhY2UoL1suKis/XiR7fSgpfFtcXVxcXS9nLCJcXCRceDI2Iil9LF9nZXRUb2dnbGVDb2xsYXBzaWJsZUljb24oYSl7cmV0dXJuIGE/ImV4cGFuZC1sZXNzIjoiZXhwYW5kLW1vcmUifSxfdG9nZ2xlTWF0Y2hlc09wZW4oKXt0aGlzLnNldCgiX21hdGNoZXNMaXN0T3BlbmVkIiwKIXRoaXMuX21hdGNoZXNMaXN0T3BlbmVkKX0sX2NvbXB1dGVUaXRsZURpc3BsYXlTdHJpbmcoYSl7cmV0dXJuIGF8fCJ1bnRpdGxlZCJ9LF9zZXBhcmF0ZVdpdGhDb21tYXMoYSl7cmV0dXJuIGEuam9pbigiLCAiKX0sX3RvZ2dsZU1pc3NpbmdUYWdzQ29sbGFwc2libGVPcGVuKCl7dGhpcy5zZXQoIl9taXNzaW5nVGFnc0NvbGxhcHNpYmxlT3BlbmVkIiwhdGhpcy5fbWlzc2luZ1RhZ3NDb2xsYXBzaWJsZU9wZW5lZCl9fSk7Cjwvc2NyaXB0Pgo8L2RvbS1tb2R1bGU+CgoKCgoKCgoKCgoKCgoKCgoKCjxkb20tbW9kdWxlIGlkPSJ0Zi1jdXN0b20tc2NhbGFyLW11bHRpLWxpbmUtY2hhcnQtY2FyZCI+CiAgPHRlbXBsYXRlPgogICAgPHRmLWNhcmQtaGVhZGluZyBkaXNwbGF5LW5hbWU9IltbX3RpdGxlRGlzcGxheVN0cmluZ11dIj48L3RmLWNhcmQtaGVhZGluZz4KICAgIDxkaXYgaWQ9InRmLWxpbmUtY2hhcnQtZGF0YS1sb2FkZXItY29udGFpbmVyIj4KICAgICAgPHRmLWxpbmUtY2hhcnQtZGF0YS1sb2FkZXIgaWQ9ImxvYWRlciIgYWN0aXZlPSJbW2FjdGl2ZV1dIiBjb2xvci1zY2FsZT0iW1tfY29sb3JTY2FsZV1dIiBkYXRhLXNlcmllcz0iW1tfc2VyaWVzTmFtZXNdXSIgZ2V0LWRhdGEtbG9hZC11cmw9IltbX2RhdGFVcmxdXSIgaWdub3JlLXktb3V0bGllcnM9IltbaWdub3JlWU91dGxpZXJzXV0iIGxvYWQta2V5PSJbW190YWdGaWx0ZXJdXSIgZGF0YS10by1sb2FkPSJbW3J1bnNdXSIgbG9nLXNjYWxlLWFjdGl2ZT0iW1tfbG9nU2NhbGVBY3RpdmVdXSIgbG9hZC1kYXRhLWNhbGxiYWNrPSJbW19jcmVhdGVQcm9jZXNzRGF0YUZ1bmN0aW9uKCldXSIgcmVxdWVzdC1tYW5hZ2VyPSJbW3JlcXVlc3RNYW5hZ2VyXV0iIHNtb290aGluZy1lbmFibGVkPSJbW3Ntb290aGluZ0VuYWJsZWRdXSIgc21vb3RoaW5nLXdlaWdodD0iW1tzbW9vdGhpbmdXZWlnaHRdXSIgc3ltYm9sLWZ1bmN0aW9uPSJbW19jcmVhdGVTeW1ib2xGdW5jdGlvbigpXV0iIHRvb2x0aXAtc29ydGluZy1tZXRob2Q9IltbdG9vbHRpcFNvcnRpbmdNZXRob2RdXSIgeC10eXBlPSJbW3hUeXBlXV0iPgogICAgICA8L3RmLWxpbmUtY2hhcnQtZGF0YS1sb2FkZXI+CiAgICA8L2Rpdj4KICAgIDxkaXYgaWQ9ImJ1dHRvbnMiPgogICAgICA8cGFwZXItaWNvbi1idXR0b24gc2VsZWN0ZWQkPSJbW19leHBhbmRlZF1dIiBpY29uPSJmdWxsc2NyZWVuIiBvbi10YXA9Il90b2dnbGVFeHBhbmRlZCI+PC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgPHBhcGVyLWljb24tYnV0dG9uIHNlbGVjdGVkJD0iW1tfbG9nU2NhbGVBY3RpdmVdXSIgaWNvbj0ibGluZS13ZWlnaHQiIG9uLXRhcD0iX3RvZ2dsZUxvZ1NjYWxlIiB0aXRsZT0iVG9nZ2xlIHktYXhpcyBsb2cgc2NhbGUiPjwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgIDxwYXBlci1pY29uLWJ1dHRvbiBpY29uPSJzZXR0aW5ncy1vdmVyc2NhbiIgb24tdGFwPSJfcmVzZXREb21haW4iIHRpdGxlPSJGaXQgZG9tYWluIHRvIGRhdGEiPjwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgIDxzcGFuIHN0eWxlPSJmbGV4LWdyb3c6IDEiPjwvc3Bhbj4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW3Nob3dEb3dubG9hZExpbmtzXV0iPgogICAgICAgIDxkaXYgY2xhc3M9ImRvd25sb2FkLWxpbmtzIj4KICAgICAgICAgIDxwYXBlci1kcm9wZG93bi1tZW51IG5vLWxhYmVsLWZsb2F0PSJ0cnVlIiBsYWJlbD0ic2VyaWVzIHRvIGRvd25sb2FkIiBzZWxlY3RlZC1pdGVtLWxhYmVsPSJ7e19kYXRhU2VyaWVzTmFtZVRvRG93bmxvYWR9fSI+CiAgICAgICAgICAgIDxwYXBlci1saXN0Ym94IGNsYXNzPSJkcm9wZG93bi1jb250ZW50IiBzbG90PSJkcm9wZG93bi1jb250ZW50Ij4KICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19zZXJpZXNOYW1lc11dIiBhcz0iZGF0YVNlcmllc05hbWUiPgogICAgICAgICAgICAgICAgPHBhcGVyLWl0ZW0gbm8tbGFiZWwtZmxvYXQ9InRydWUiPltbZGF0YVNlcmllc05hbWVdXTwvcGFwZXItaXRlbT4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8L3BhcGVyLWxpc3Rib3g+CiAgICAgICAgICA8L3BhcGVyLWRyb3Bkb3duLW1lbnU+CiAgICAgICAgICA8YSBkb3dubG9hZD0iW1tfZGF0YVNlcmllc05hbWVUb0Rvd25sb2FkXV0uY3N2IiBocmVmPSJbW19jc3ZVcmwoX25hbWVUb0RhdGFTZXJpZXMsIF9kYXRhU2VyaWVzTmFtZVRvRG93bmxvYWQpXV0iPkNTVjwvYT4KICAgICAgICAgIDxhIGRvd25sb2FkPSJbW19kYXRhU2VyaWVzTmFtZVRvRG93bmxvYWRdXS5qc29uIiBocmVmPSJbW19qc29uVXJsKF9uYW1lVG9EYXRhU2VyaWVzLCBfZGF0YVNlcmllc05hbWVUb0Rvd25sb2FkKV1dIj5KU09OPC9hPgogICAgICAgIDwvZGl2PgogICAgICA8L3RlbXBsYXRlPgogICAgPC9kaXY+CiAgICA8ZGl2IGlkPSJtYXRjaGVzLWNvbnRhaW5lciI+CiAgICAgIDxkaXYgaWQ9Im1hdGNoZXMtbGlzdC10aXRsZSI+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19zZXJpZXNOYW1lcy5sZW5ndGhdXSI+CiAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24gaWNvbj0iW1tfZ2V0VG9nZ2xlTWF0Y2hlc0ljb24oX21hdGNoZXNMaXN0T3BlbmVkKV1dIiBvbi1jbGljaz0iX3RvZ2dsZU1hdGNoZXNPcGVuIiBjbGFzcz0idG9nZ2xlLW1hdGNoZXMtYnV0dG9uIj4KICAgICAgICAgIDwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgICAgPC90ZW1wbGF0ZT4KCiAgICAgICAgPHNwYW4gY2xhc3M9Im1hdGNoZXMtdGV4dCI+CiAgICAgICAgICBNYXRjaGVzIChbW19zZXJpZXNOYW1lcy5sZW5ndGhdXSkKICAgICAgICA8L3NwYW4+CiAgICAgIDwvZGl2PgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX3Nlcmllc05hbWVzLmxlbmd0aF1dIj4KICAgICAgICA8aXJvbi1jb2xsYXBzZSBvcGVuZWQ9IltbX21hdGNoZXNMaXN0T3BlbmVkXV0iPgogICAgICAgICAgPGRpdiBpZD0ibWF0Y2hlcy1saXN0Ij4KICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tfc2VyaWVzTmFtZXNdXSIgYXM9InNlcmllc05hbWUiPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1hdGNoLWxpc3QtZW50cnkiIHN0eWxlPSJjb2xvcjogW1tfZGV0ZXJtaW5lQ29sb3IoX2NvbG9yU2NhbGUsIHNlcmllc05hbWUpXV07Ij4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJtYXRjaC1lbnRyeS1zeW1ib2wiPgogICAgICAgICAgICAgICAgICBbW19kZXRlcm1pbmVTeW1ib2woX25hbWVUb0RhdGFTZXJpZXMsIHNlcmllc05hbWUpXV0KICAgICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgICAgIFtbc2VyaWVzTmFtZV1dCiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2lyb24tY29sbGFwc2U+CiAgICAgIDwvdGVtcGxhdGU+CiAgICA8L2Rpdj4KCiAgICA8c3R5bGUgaW5jbHVkZT0idGYtY3VzdG9tLXNjYWxhci1jYXJkLXN0eWxlIj48L3N0eWxlPgogICAgPHN0eWxlPgogICAgICAjbWF0Y2hlcy1saXN0LXRpdGxlIHsKICAgICAgICBtYXJnaW46IDEwcHggMCA1cHggMDsKICAgICAgfQoKICAgICAgI21hdGNoZXMtbGlzdCB7CiAgICAgICAgbWF4LWhlaWdodDogMjAwcHg7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgfQoKICAgICAgLm1hdGNoLWxpc3QtZW50cnkgewogICAgICAgIG1hcmdpbjogMCAwIDVweCAwOwogICAgICB9CgogICAgICAubWF0Y2gtZW50cnktc3ltYm9sIHsKICAgICAgICBmb250LWZhbWlseTogYXJpYWwsIHNhbnMtc2VyaWY7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIHdpZHRoOiAxMHB4OwogICAgICB9CgogICAgICAubWF0Y2hlcy10ZXh0IHsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CiAgPHNjcmlwdD4vL35+V0VCUEFUSH5+L3RmLWN1c3RvbS1zY2FsYXItZGFzaGJvYXJkL3RmLWN1c3RvbS1zY2FsYXItbXVsdGktbGluZS1jaGFydC1jYXJkLmh0bWwuanMKUG9seW1lcih7aXM6InRmLWN1c3RvbS1zY2FsYXItbXVsdGktbGluZS1jaGFydC1jYXJkIixwcm9wZXJ0aWVzOntydW5zOkFycmF5LHhUeXBlOlN0cmluZyxhY3RpdmU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMCxyZWFkT25seTohMH0sdGl0bGU6U3RyaW5nLHRhZ1JlZ2V4ZXM6QXJyYXksaWdub3JlWU91dGxpZXJzOkJvb2xlYW4scmVxdWVzdE1hbmFnZXI6T2JqZWN0LHNob3dEb3dubG9hZExpbmtzOkJvb2xlYW4sc21vb3RoaW5nRW5hYmxlZDpCb29sZWFuLHNtb290aGluZ1dlaWdodDpOdW1iZXIsdGFnTWV0YWRhdGE6T2JqZWN0LHRvb2x0aXBTb3J0aW5nTWV0aG9kOlN0cmluZyxfY29sb3JTY2FsZTp7dHlwZTpPYmplY3QsdmFsdWU6bmV3IGdtLkRhdGFTZXJpZXNDb2xvclNjYWxlKHtzY2FsZTpabC5ydW5zQ29sb3JTY2FsZX0pLHJlYWRPbmx5OiEwfSxfdGFnRmlsdGVyOnt0eXBlOlN0cmluZyxjb21wdXRlZDoiX2NvbXB1dGVUYWdGaWx0ZXIodGFnUmVnZXhlcykifSxfbmFtZVRvRGF0YVNlcmllczp7dHlwZTpPYmplY3QsCnZhbHVlOigpPT4oe30pfSxfc2VyaWVzTmFtZXM6e3R5cGU6T2JqZWN0LGNvbXB1dGVkOiJfY29tcHV0ZVNlcmllc05hbWVzKF9uYW1lVG9EYXRhU2VyaWVzLCBydW5zKSJ9LF9leHBhbmRlZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH0sX2xvZ1NjYWxlQWN0aXZlOkJvb2xlYW4sX2RhdGFVcmw6e3R5cGU6RnVuY3Rpb24sdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gYT0+e2NvbnN0IGM9dGhpcy5fdGFnRmlsdGVyO3JldHVybiBQay5hZGRQYXJhbXMoUGsuZ2V0Um91dGVyKCkucGx1Z2luUm91dGUoImN1c3RvbV9zY2FsYXJzIiwiL3NjYWxhcnMiKSx7dGFnOmMscnVuOmF9KX19fSxfcnVuVG9OZXh0QXZhaWxhYmxlU3ltYm9sSW5kZXg6e3R5cGU6T2JqZWN0LHZhbHVlOnt9fSxfbWF0Y2hlc0xpc3RPcGVuZWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sX3RpdGxlRGlzcGxheVN0cmluZzp7dHlwZTpTdHJpbmcsY29tcHV0ZWQ6Il9jb21wdXRlVGl0bGVEaXNwbGF5U3RyaW5nKHRpdGxlKSJ9fSwKb2JzZXJ2ZXJzOlsiX3VwZGF0ZUNoYXJ0KF9uYW1lVG9EYXRhU2VyaWVzKSIsIl9yZWZyZXNoRGF0YVNlcmllcyhfdGFnRmlsdGVyKSJdLHJlbG9hZCgpe3RoaXMuJC5sb2FkZXIucmVsb2FkKCl9LHJlZHJhdygpe3RoaXMuJC5sb2FkZXIucmVkcmF3KCl9LF90b2dnbGVFeHBhbmRlZCgpe3RoaXMuc2V0KCJfZXhwYW5kZWQiLCF0aGlzLl9leHBhbmRlZCk7dGhpcy5yZWRyYXcoKX0sX3RvZ2dsZUxvZ1NjYWxlKCl7dGhpcy5zZXQoIl9sb2dTY2FsZUFjdGl2ZSIsIXRoaXMuX2xvZ1NjYWxlQWN0aXZlKX0sX3Jlc2V0RG9tYWluKCl7Y29uc3QgYT10aGlzLiQubG9hZGVyO2EmJmEucmVzZXREb21haW4oKX0sX2NzdlVybChhLGMpe2lmKCFjKXJldHVybiIiO2E9dGhpcy5fZG93bmxvYWREYXRhVXJsKGEsYyk7cmV0dXJuIFBrLmFkZFBhcmFtcyhhLHtmb3JtYXQ6ImNzdiJ9KX0sX2pzb25VcmwoYSxjKXtpZighYylyZXR1cm4iIjthPXRoaXMuX2Rvd25sb2FkRGF0YVVybChhLGMpO3JldHVybiBQay5hZGRQYXJhbXMoYSwKe2Zvcm1hdDoianNvbiJ9KX0sX2Rvd25sb2FkRGF0YVVybChhLGMpe2E9YVtjXTthPXt0YWc6YS5nZXRUYWcoKSxydW46YS5nZXRSdW4oKX07cmV0dXJuIFBrLmFkZFBhcmFtcyhQay5nZXRSb3V0ZXIoKS5wbHVnaW5Sb3V0ZSgiY3VzdG9tX3NjYWxhcnMiLCIvZG93bmxvYWRfZGF0YSIpLGEpfSxfY3JlYXRlUHJvY2Vzc0RhdGFGdW5jdGlvbigpe3JldHVybihhLGMsZCk9PntpZihkLnJlZ2V4X3ZhbGlkKXtjb25zdCBmPV8uY2xvbmUodGhpcy5fbmFtZVRvRGF0YVNlcmllcyk7Xy5mb3JPd24oZC50YWdfdG9fZXZlbnRzLChnLGwpPT57Y29uc3Qgaz1nLm1hcChwPT4oe3dhbGxfdGltZTpuZXcgRGF0ZSgxRTMqcFswXSksc3RlcDpwWzFdLHNjYWxhcjpwWzJdfSkpO2c9Z20uZ2VuZXJhdGVEYXRhU2VyaWVzTmFtZShjLGwpO2NvbnN0IG09ZltnXTttP20uc2V0RGF0YShrKTooXy5pc1VuZGVmaW5lZCh0aGlzLl9ydW5Ub05leHRBdmFpbGFibGVTeW1ib2xJbmRleFtjXSkmJih0aGlzLl9ydW5Ub05leHRBdmFpbGFibGVTeW1ib2xJbmRleFtjXT0KMCksbD1uZXcgZ20uRGF0YVNlcmllcyhjLGwsZyxrLGJtLlNZTUJPTFNfTElTVFt0aGlzLl9ydW5Ub05leHRBdmFpbGFibGVTeW1ib2xJbmRleFtjXV0pLGZbZ109bCx0aGlzLl9ydW5Ub05leHRBdmFpbGFibGVTeW1ib2xJbmRleFtjXT0odGhpcy5fcnVuVG9OZXh0QXZhaWxhYmxlU3ltYm9sSW5kZXhbY10rMSklYm0uU1lNQk9MU19MSVNULmxlbmd0aCl9KTt0aGlzLnNldCgiX25hbWVUb0RhdGFTZXJpZXMiLGYpfX19LF91cGRhdGVDaGFydChhKXtPYmplY3QuZW50cmllcyhhKS5mb3JFYWNoKChbYyxkXSk9Pnt0aGlzLiQubG9hZGVyLnNldFNlcmllc0RhdGEoYyxkLmdldERhdGEoKSl9KX0sX2NvbXB1dGVTZWxlY3RlZFJ1bnNTZXQoYSl7Y29uc3QgYz17fTtfLmZvckVhY2goYSxkPT57Y1tkXT0xfSk7cmV0dXJuIGN9LF9jb21wdXRlU2VyaWVzTmFtZXMoKXtjb25zdCBhPW5ldyBTZXQodGhpcy5ydW5zKTtyZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy5fbmFtZVRvRGF0YVNlcmllcykuZmlsdGVyKChbLApjXSk9PmEuaGFzKGMucnVuKSkubWFwKChbY10pPT5jKX0sX2RldGVybWluZUNvbG9yKGEsYyl7cmV0dXJuIGEuc2NhbGUoYyl9LF9yZWZyZXNoRGF0YVNlcmllcygpe3RoaXMuc2V0KCJfbmFtZVRvRGF0YVNlcmllcyIse30pfSxfY3JlYXRlU3ltYm9sRnVuY3Rpb24oKXtyZXR1cm4gYT0+dGhpcy5fbmFtZVRvRGF0YVNlcmllc1thXS5nZXRTeW1ib2woKS5tZXRob2QoKX0sX2RldGVybWluZVN5bWJvbChhLGMpe3JldHVybiBhW2NdLmdldFN5bWJvbCgpLmNoYXJhY3Rlcn0sX2NvbXB1dGVUYWdGaWx0ZXIoYSl7cmV0dXJuIDE9PT1hLmxlbmd0aD9hWzBdOmEubWFwKGM9PiIoIitjKyIpIikuam9pbigifCIpfSxfZ2V0VG9nZ2xlTWF0Y2hlc0ljb24oYSl7cmV0dXJuIGE/ImV4cGFuZC1sZXNzIjoiZXhwYW5kLW1vcmUifSxfdG9nZ2xlTWF0Y2hlc09wZW4oKXt0aGlzLnNldCgiX21hdGNoZXNMaXN0T3BlbmVkIiwhdGhpcy5fbWF0Y2hlc0xpc3RPcGVuZWQpfSxfY29tcHV0ZVRpdGxlRGlzcGxheVN0cmluZyhhKXtyZXR1cm4gYXx8CiJ1bnRpdGxlZCJ9fSk7Cjwvc2NyaXB0Pgo8L2RvbS1tb2R1bGU+CgoKCjxkb20tbW9kdWxlIGlkPSJ0Zi1jdXN0b20tc2NhbGFyLWRhc2hib2FyZCI+CiAgPHRlbXBsYXRlPgogICAgPHRmLWRhc2hib2FyZC1sYXlvdXQ+CiAgICAgIDxkaXYgY2xhc3M9InNpZGViYXIiIHNsb3Q9InNpZGViYXIiPgogICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJsaW5lLWl0ZW0iPgogICAgICAgICAgICA8cGFwZXItY2hlY2tib3ggY2hlY2tlZD0ie3tfc2hvd0Rvd25sb2FkTGlua3N9fSI+U2hvdyBkYXRhIGRvd25sb2FkIGxpbmtzPC9wYXBlci1jaGVja2JveD4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0ibGluZS1pdGVtIj4KICAgICAgICAgICAgPHBhcGVyLWNoZWNrYm94IGNoZWNrZWQ9Int7X2lnbm9yZVlPdXRsaWVyc319Ij5JZ25vcmUgb3V0bGllcnMgaW4gY2hhcnQgc2NhbGluZzwvcGFwZXItY2hlY2tib3g+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgaWQ9InRvb2x0aXAtc29ydGluZyI+CiAgICAgICAgICAgIDxkaXYgaWQ9InRvb2x0aXAtc29ydGluZy1sYWJlbCI+VG9vbHRpcCBzb3J0aW5nIG1ldGhvZDo8L2Rpdj4KICAgICAgICAgICAgPHBhcGVyLWRyb3Bkb3duLW1lbnUgbm8tbGFiZWwtZmxvYXQgc2VsZWN0ZWQtaXRlbS1sYWJlbD0ie3tfdG9vbHRpcFNvcnRpbmdNZXRob2R9fSI+CiAgICAgICAgICAgICAgPHBhcGVyLWxpc3Rib3ggY2xhc3M9ImRyb3Bkb3duLWNvbnRlbnQiIHNlbGVjdGVkPSIwIiBzbG90PSJkcm9wZG93bi1jb250ZW50Ij4KICAgICAgICAgICAgICAgIDxwYXBlci1pdGVtPmRlZmF1bHQ8L3BhcGVyLWl0ZW0+CiAgICAgICAgICAgICAgICA8cGFwZXItaXRlbT5kZXNjZW5kaW5nPC9wYXBlci1pdGVtPgogICAgICAgICAgICAgICAgPHBhcGVyLWl0ZW0+YXNjZW5kaW5nPC9wYXBlci1pdGVtPgogICAgICAgICAgICAgICAgPHBhcGVyLWl0ZW0+bmVhcmVzdDwvcGFwZXItaXRlbT4KICAgICAgICAgICAgICA8L3BhcGVyLWxpc3Rib3g+CiAgICAgICAgICAgIDwvcGFwZXItZHJvcGRvd24tbWVudT4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiI+CiAgICAgICAgICA8dGYtc21vb3RoaW5nLWlucHV0IHdlaWdodD0ie3tfc21vb3RoaW5nV2VpZ2h0fX0iIHN0ZXA9IjAuMDAxIiBtaW49IjAiIG1heD0iMSI+PC90Zi1zbW9vdGhpbmctaW5wdXQ+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIj4KICAgICAgICAgIDx0Zi1vcHRpb24tc2VsZWN0b3IgaWQ9IngtdHlwZS1zZWxlY3RvciIgbmFtZT0iSG9yaXpvbnRhbCBBeGlzIiBzZWxlY3RlZC1pZD0ie3tfeFR5cGV9fSI+CiAgICAgICAgICAgIDxwYXBlci1idXR0b24gaWQ9InN0ZXAiPnN0ZXA8L3BhcGVyLWJ1dHRvbj48cGFwZXItYnV0dG9uIGlkPSJyZWxhdGl2ZSI+cmVsYXRpdmU8L3BhcGVyLWJ1dHRvbj48cGFwZXItYnV0dG9uIGlkPSJ3YWxsX3RpbWUiPndhbGw8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgIDwvdGYtb3B0aW9uLXNlbGVjdG9yPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiI+CiAgICAgICAgICA8dGYtcnVucy1zZWxlY3RvciBzZWxlY3RlZC1ydW5zPSJ7e19zZWxlY3RlZFJ1bnN9fSI+CiAgICAgICAgICA8L3RmLXJ1bnMtc2VsZWN0b3I+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjZW50ZXIiIHNsb3Q9ImNlbnRlciIgaWQ9ImNhdGVnb3JpZXMtY29udGFpbmVyIj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2RhdGFOb3RGb3VuZF1dIj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im5vLWRhdGEtd2FybmluZyI+CiAgICAgICAgICAgIDxoMz5UaGUgY3VzdG9tIHNjYWxhcnMgZGFzaGJvYXJkIGlzIGluYWN0aXZlLjwvaDM+CiAgICAgICAgICAgIDxwPlByb2JhYmxlIGNhdXNlczoKICAgICAgICAgICAgPG9sPgogICAgICAgICAgICAgIDxsaT5Zb3UgaGF2ZW4ndCBsYWlkIG91dCB0aGUgZGFzaGJvYXJkLjwvbGk+CiAgICAgICAgICAgICAgPGxpPllvdSBoYXZlbuKAmXQgd3JpdHRlbiBhbnkgc2NhbGFyIGRhdGEgdG8geW91ciBldmVudCBmaWxlcy48L2xpPgogICAgICAgICAgICA8L29sPgoKICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgVG8gbGF5IG91dCB0aGUgZGFzaGJvYXJkLCBwYXNzIGEgPGNvZGU+TGF5b3V0PC9jb2RlPiBwcm90b2J1ZmZlcgogICAgICAgICAgICAgIHRvIHRoZSA8Y29kZT5zZXRfbGF5b3V0PC9jb2RlPiBtZXRob2QuIEZvciBleGFtcGxlLAogICAgICAgICAgICAKICAgICAgICAgICAgPHByZT5mcm9tIHRlbnNvcmJvYXJkIGltcG9ydCBzdW1tYXJ5CmZyb20gdGVuc29yYm9hcmQucGx1Z2lucy5jdXN0b21fc2NhbGFyIGltcG9ydCBsYXlvdXRfcGIyCi4uLgojIFRoaXMgYWN0aW9uIGRvZXMgbm90IGhhdmUgdG8gYmUgcGVyZm9ybWVkIGF0IGV2ZXJ5IHN0ZXAsIHNvIHRoZSBhY3Rpb24gaXMgbm90CiMgdGFrZW4gY2FyZSBvZiBieSBhbiBvcCBpbiB0aGUgZ3JhcGguIFdlIG9ubHkgbmVlZCB0byBzcGVjaWZ5IHRoZSBsYXlvdXQgb25jZS4KIyBXZSBvbmx5IG5lZWQgdG8gc3BlY2lmeSB0aGUgbGF5b3V0IG9uY2UgKGluc3RlYWQgb2YgcGVyIHN0ZXApLgpsYXlvdXRfc3VtbWFyeSA9IHN1bW1hcnlfbGliLmN1c3RvbV9zY2FsYXJfcGIobGF5b3V0X3BiMi5MYXlvdXQoCiAgY2F0ZWdvcnk9WwogICAgbGF5b3V0X3BiMi5DYXRlZ29yeSgKICAgICAgdGl0bGU9J2xvc3NlcycsCiAgICAgIGNoYXJ0PVsKICAgICAgICAgIGxheW91dF9wYjIuQ2hhcnQoCiAgICAgICAgICAgICAgdGl0bGU9J2xvc3NlcycsCiAgICAgICAgICAgICAgbXVsdGlsaW5lPWxheW91dF9wYjIuTXVsdGlsaW5lQ2hhcnRDb250ZW50KAogICAgICAgICAgICAgICAgdGFnPVtyJ2xvc3MuKiddLAogICAgICAgICAgICAgICkpLAogICAgICAgICAgbGF5b3V0X3BiMi5DaGFydCgKICAgICAgICAgICAgICB0aXRsZT0nYmF6JywKICAgICAgICAgICAgICBtYXJnaW49bGF5b3V0X3BiMi5NYXJnaW5DaGFydENvbnRlbnQoCiAgICAgICAgICAgICAgICBzZXJpZXM9WwogICAgICAgICAgICAgICAgICBsYXlvdXRfcGIyLk1hcmdpbkNoYXJ0Q29udGVudC5TZXJpZXMoCiAgICAgICAgICAgICAgICAgICAgdmFsdWU9J2xvc3MvYmF6L3NjYWxhcl9zdW1tYXJ5JywKICAgICAgICAgICAgICAgICAgICBsb3dlcj0nYmF6X2xvd2VyL2Jhei9zY2FsYXJfc3VtbWFyeScsCiAgICAgICAgICAgICAgICAgICAgdXBwZXI9J2Jhel91cHBlci9iYXovc2NhbGFyX3N1bW1hcnknKSwKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgKSksCiAgICAgIF0pLAogICAgbGF5b3V0X3BiMi5DYXRlZ29yeSgKICAgICAgdGl0bGU9J3RyaWcgZnVuY3Rpb25zJywKICAgICAgY2hhcnQ9WwogICAgICAgICAgbGF5b3V0X3BiMi5DaGFydCgKICAgICAgICAgICAgICB0aXRsZT0nd2F2ZSB0cmlnIGZ1bmN0aW9ucycsCiAgICAgICAgICAgICAgbXVsdGlsaW5lPWxheW91dF9wYjIuTXVsdGlsaW5lQ2hhcnRDb250ZW50KAogICAgICAgICAgICAgICAgdGFnPVtyJ3RyaWdGdW5jdGlvbnMvY29zaW5lJywgcid0cmlnRnVuY3Rpb25zL3NpbmUnXSwKICAgICAgICAgICAgICApKSwKICAgICAgICAgICMgVGhlIHJhbmdlIG9mIHRhbmdlbnQgaXMgZGlmZmVyZW50LiBMZXQncyBnaXZlIGl0IGl0cyBvd24gY2hhcnQuCiAgICAgICAgICBsYXlvdXRfcGIyLkNoYXJ0KAogICAgICAgICAgICAgIHRpdGxlPSd0YW4nLAogICAgICAgICAgICAgIG11bHRpbGluZT1sYXlvdXRfcGIyLk11bHRpbGluZUNoYXJ0Q29udGVudCgKICAgICAgICAgICAgICAgIHRhZz1bcid0cmlnRnVuY3Rpb25zL3RhbmdlbnQnXSwKICAgICAgICAgICAgICApKSwKICAgICAgXSwKICAgICAgIyBUaGlzIGNhdGVnb3J5IHdlIGNhcmUgbGVzcyBhYm91dC4gTGV0J3MgbWFrZSBpdCBpbml0aWFsbHkgY2xvc2VkLgogICAgICBjbG9zZWQ9VHJ1ZSksCiAgXSkpCndyaXRlci5hZGRfc3VtbWFyeShsYXlvdXRfc3VtbWFyeSkKPC9wcmU+CiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdeKAmXJlIG5ldyB0byB1c2luZyBUZW5zb3JCb2FyZCwgYW5kIHdhbnQgdG8gZmluZCBvdXQgaG93IHRvCiAgICAgICAgICAgICAgYWRkIGRhdGEgYW5kIHNldCB1cCB5b3VyIGV2ZW50IGZpbGVzLCBjaGVjayBvdXQgdGhlCiAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kIj5SRUFETUU8L2E+CiAgICAgICAgICAgICAgYW5kIHBlcmhhcHMgdGhlCiAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvZ2V0X3N0YXJ0ZWQvc3VtbWFyaWVzX2FuZF90ZW5zb3Jib2FyZCI+VGVuc29yQm9hcmQgdHV0b3JpYWw8L2E+LgogICAgICAgICAgICAKICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbWyFfZGF0YU5vdEZvdW5kXV0iPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tfY2F0ZWdvcmllc11dIiBhcz0iY2F0ZWdvcnkiPgogICAgICAgICAgICA8dGYtY2F0ZWdvcnktcGFnaW5hdGVkLXZpZXcgYXM9ImNoYXJ0IiBjYXRlZ29yeT0iW1tjYXRlZ29yeV1dIiBkaXNhYmxlLXBhZ2luYXRpb24gaW5pdGlhbC1vcGVuZWQ9IltbY2F0ZWdvcnkubWV0YWRhdGEub3BlbmVkXV0iPgogICAgICAgICAgICAgIDx0ZW1wbGF0ZT4KICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tjaGFydC5tdWx0aWxpbmVdXSI+CiAgICAgICAgICAgICAgICAgICAgPHRmLWN1c3RvbS1zY2FsYXItbXVsdGktbGluZS1jaGFydC1jYXJkIGFjdGl2ZT0iW1thY3RpdmVdXSIgcmVxdWVzdC1tYW5hZ2VyPSJbW19yZXF1ZXN0TWFuYWdlcl1dIiBydW5zPSJbW19zZWxlY3RlZFJ1bnNdXSIgdGl0bGU9IltbY2hhcnQudGl0bGVdXSIgeC10eXBlPSJbW194VHlwZV1dIiBzbW9vdGhpbmctZW5hYmxlZD0iW1tfc21vb3RoaW5nRW5hYmxlZF1dIiBzbW9vdGhpbmctd2VpZ2h0PSJbW19zbW9vdGhpbmdXZWlnaHRdXSIgdG9vbHRpcC1zb3J0aW5nLW1ldGhvZD0iW1t0b29sdGlwU29ydGluZ01ldGhvZF1dIiBpZ25vcmUteS1vdXRsaWVycz0iW1tfaWdub3JlWU91dGxpZXJzXV0iIHNob3ctZG93bmxvYWQtbGlua3M9IltbX3Nob3dEb3dubG9hZExpbmtzXV0iIHRhZy1yZWdleGVzPSJbW2NoYXJ0Lm11bHRpbGluZS50YWddXSI+PC90Zi1jdXN0b20tc2NhbGFyLW11bHRpLWxpbmUtY2hhcnQtY2FyZD4KICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2NoYXJ0Lm1hcmdpbl1dIj4KICAgICAgICAgICAgICAgICAgICA8dGYtY3VzdG9tLXNjYWxhci1tYXJnaW4tY2hhcnQtY2FyZCBhY3RpdmU9IltbYWN0aXZlXV0iIHJlcXVlc3QtbWFuYWdlcj0iW1tfcmVxdWVzdE1hbmFnZXJdXSIgcnVucz0iW1tfc2VsZWN0ZWRSdW5zXV0iIHRpdGxlPSJbW2NoYXJ0LnRpdGxlXV0iIHgtdHlwZT0iW1tfeFR5cGVdXSIgdG9vbHRpcC1zb3J0aW5nLW1ldGhvZD0iW1t0b29sdGlwU29ydGluZ01ldGhvZF1dIiBpZ25vcmUteS1vdXRsaWVycz0iW1tfaWdub3JlWU91dGxpZXJzXV0iIHNob3ctZG93bmxvYWQtbGlua3M9IltbX3Nob3dEb3dubG9hZExpbmtzXV0iIG1hcmdpbi1jaGFydC1zZXJpZXM9IltbY2hhcnQubWFyZ2luLnNlcmllc11dIj48L3RmLWN1c3RvbS1zY2FsYXItbWFyZ2luLWNoYXJ0LWNhcmQ+CiAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8L3RmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L2Rpdj4KICAgIDwvdGYtZGFzaGJvYXJkLWxheW91dD4KCiAgICA8c3R5bGUgaW5jbHVkZT0iZGFzaGJvYXJkLXN0eWxlIj48L3N0eWxlPgogICAgPHN0eWxlPgogICAgICAjdG9vbHRpcC1zb3J0aW5nIHsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIG1hcmdpbi10b3A6IDE1cHg7CiAgICAgIH0KICAgICAgI3Rvb2x0aXAtc29ydGluZyBwYXBlci1kcm9wZG93bi1tZW51IHsKICAgICAgICBtYXJnaW4tbGVmdDogMTBweDsKICAgICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1mb2N1cy1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgd2lkdGg6IDEwNXB4OwogICAgICB9CiAgICAgIC5saW5lLWl0ZW0gewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBhZGRpbmctdG9wOiA1cHg7CiAgICAgIH0KICAgICAgLm5vLWRhdGEtd2FybmluZyB7CiAgICAgICAgbWF4LXdpZHRoOiA1NDBweDsKICAgICAgICBtYXJnaW46IDgwcHggYXV0byAwIGF1dG87CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KCiAgPHNjcmlwdD4vL35+V0VCUEFUSH5+L3RmLWN1c3RvbS1zY2FsYXItZGFzaGJvYXJkL3RmLWN1c3RvbS1zY2FsYXItZGFzaGJvYXJkLmh0bWwuanMKUG9seW1lcih7aXM6InRmLWN1c3RvbS1zY2FsYXItZGFzaGJvYXJkIixwcm9wZXJ0aWVzOntfcmVxdWVzdE1hbmFnZXI6e3R5cGU6T2JqZWN0LHZhbHVlOigpPT5uZXcgUGsuUmVxdWVzdE1hbmFnZXIoNTApfSxfY2FuY2VsbGVyOnt0eXBlOk9iamVjdCx2YWx1ZTooKT0+bmV3IFBrLkNhbmNlbGxlcn0sX3NlbGVjdGVkUnVuczpBcnJheSxfc2hvd0Rvd25sb2FkTGlua3M6e3R5cGU6Qm9vbGVhbixub3RpZnk6ITAsdmFsdWU6VmwuZ2V0Qm9vbGVhbkluaXRpYWxpemVyKCJfc2hvd0Rvd25sb2FkTGlua3MiLHtkZWZhdWx0VmFsdWU6ITEsdXNlTG9jYWxTdG9yYWdlOiEwfSksb2JzZXJ2ZXI6Il9zaG93RG93bmxvYWRMaW5rc09ic2VydmVyIn0sX3Ntb290aGluZ0VuYWJsZWQ6e3R5cGU6Qm9vbGVhbixjb21wdXRlZDoiX2NvbXB1dGVTbW9vdGhpbmdFbmFibGVkKF9zbW9vdGhpbmdXZWlnaHQpIn0sX3Ntb290aGluZ1dlaWdodDp7dHlwZTpOdW1iZXIsbm90aWZ5OiEwLHZhbHVlOlZsLmdldE51bWJlckluaXRpYWxpemVyKCJfc21vb3RoaW5nV2VpZ2h0IiwKe2RlZmF1bHRWYWx1ZTouNn0pLG9ic2VydmVyOiJfc21vb3RoaW5nV2VpZ2h0T2JzZXJ2ZXIifSxfaWdub3JlWU91dGxpZXJzOnt0eXBlOkJvb2xlYW4sdmFsdWU6VmwuZ2V0Qm9vbGVhbkluaXRpYWxpemVyKCJfaWdub3JlWU91dGxpZXJzIix7ZGVmYXVsdFZhbHVlOiEwLHVzZUxvY2FsU3RvcmFnZTohMH0pLG9ic2VydmVyOiJfaWdub3JlWU91dGxpZXJzT2JzZXJ2ZXIifSxfeFR5cGU6e3R5cGU6U3RyaW5nLHZhbHVlOiJzdGVwIn0sX2xheW91dDpPYmplY3QsX2RhdGFOb3RGb3VuZDpCb29sZWFuLF9jYXRlZ29yaWVzOnt0eXBlOkFycmF5LGNvbXB1dGVkOiJfbWFrZUNhdGVnb3JpZXMoX2xheW91dCkifSxfb3BlbmVkQ2F0ZWdvcmllczp7dHlwZTpPYmplY3R9LF9hY3RpdmU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMCxyZWFkT25seTohMH19LHJlYWR5KCl7dGhpcy5yZWxvYWQoKX0scmVsb2FkKCl7Y29uc3QgYT1Qay5nZXRSb3V0ZXIoKS5wbHVnaW5zTGlzdGluZygpLGM9dGhpcy5fY2FuY2VsbGVyLmNhbmNlbGxhYmxlKGQ9Pgp7ZC5jYW5jZWxsZWR8fCh0aGlzLnNldCgiX2RhdGFOb3RGb3VuZCIsIWQudmFsdWUuY3VzdG9tX3NjYWxhcnMpLHRoaXMuX2RhdGFOb3RGb3VuZHx8dGhpcy5fcmV0cmlldmVMYXlvdXRBbmREYXRhKCkpfSk7dGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdChhKS50aGVuKGMpfSxfcmVsb2FkQ2hhcnRzKCl7dGhpcy5yb290LnF1ZXJ5U2VsZWN0b3JBbGwoInRmLWN1c3RvbS1zY2FsYXItbWFyZ2luLWNoYXJ0LWNhcmQsIHRmLWN1c3RvbS1zY2FsYXItbXVsdGktbGluZS1jaGFydC1jYXJkIikuZm9yRWFjaChhPT57YS5yZWxvYWQoKX0pfSxfcmV0cmlldmVMYXlvdXRBbmREYXRhKCl7Y29uc3QgYT1Qay5nZXRSb3V0ZXIoKS5wbHVnaW5Sb3V0ZSgiY3VzdG9tX3NjYWxhcnMiLCIvbGF5b3V0IiksYz10aGlzLl9jYW5jZWxsZXIuY2FuY2VsbGFibGUoZD0+e2QuY2FuY2VsbGVkfHwodGhpcy5zZXQoIl9sYXlvdXQiLGQudmFsdWUpLHRoaXMuX2RhdGFOb3RGb3VuZHx8dGhpcy5fcmVsb2FkQ2hhcnRzKCkpfSk7CnRoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3QoYSkudGhlbihjKX0sX3Nob3dEb3dubG9hZExpbmtzT2JzZXJ2ZXI6VmwuZ2V0Qm9vbGVhbk9ic2VydmVyKCJfc2hvd0Rvd25sb2FkTGlua3MiLHtkZWZhdWx0VmFsdWU6ITEsdXNlTG9jYWxTdG9yYWdlOiEwfSksX3Ntb290aGluZ1dlaWdodE9ic2VydmVyOlZsLmdldE51bWJlck9ic2VydmVyKCJfc21vb3RoaW5nV2VpZ2h0Iix7ZGVmYXVsdFZhbHVlOi42fSksX2lnbm9yZVlPdXRsaWVyc09ic2VydmVyOlZsLmdldEJvb2xlYW5PYnNlcnZlcigiX2lnbm9yZVlPdXRsaWVycyIse2RlZmF1bHRWYWx1ZTohMCx1c2VMb2NhbFN0b3JhZ2U6ITB9KSxfY29tcHV0ZVNtb290aGluZ0VuYWJsZWQoYSl7cmV0dXJuIDA8YX0sX21ha2VDYXRlZ29yaWVzKGEpe2lmKCFhLmNhdGVnb3J5KXJldHVybltdO2xldCBjPSExO3RoaXMuX29wZW5lZENhdGVnb3JpZXN8fChjPSEwLHRoaXMuX29wZW5lZENhdGVnb3JpZXM9e30pO3JldHVybiBhLmNhdGVnb3J5Lm1hcChkPT4Ke2MmJiFkLmNsb3NlZCYmKHRoaXMuX29wZW5lZENhdGVnb3JpZXNbZC50aXRsZV09ITApO3JldHVybntuYW1lOmQudGl0bGUsaXRlbXM6ZC5jaGFydCxtZXRhZGF0YTp7b3BlbmVkOiEhdGhpcy5fb3BlbmVkQ2F0ZWdvcmllc1tkLnRpdGxlXX19fSl9LF9jYXRlZ29yeU9wZW5lZFRvZ2dsZWQoYSl7YT1hLnRhcmdldDthLm9wZW5lZD90aGlzLl9vcGVuZWRDYXRlZ29yaWVzW2EuY2F0ZWdvcnkubmFtZV09ITA6ZGVsZXRlIHRoaXMuX29wZW5lZENhdGVnb3JpZXNbYS5jYXRlZ29yeS5uYW1lXX19KTsKPC9zY3JpcHQ+CjwvZG9tLW1vZHVsZT4KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgo8ZG9tLW1vZHVsZSBpZD0idGYtaW1hZ2UtbG9hZGVyIj4KICA8dGVtcGxhdGU+CiAgICA8dGYtY2FyZC1oZWFkaW5nIHRhZz0iW1t0YWddXSIgcnVuPSJbW3J1bl1dIiBkaXNwbGF5LW5hbWU9IltbdGFnTWV0YWRhdGEuZGlzcGxheU5hbWVdXSIgZGVzY3JpcHRpb249IltbdGFnTWV0YWRhdGEuZGVzY3JpcHRpb25dXSIgY29sb3I9IltbX3J1bkNvbG9yXV0iPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2hhc011bHRpcGxlU2FtcGxlc11dIj4KICAgICAgICA8ZGl2PnNhbXBsZTogW1tfc2FtcGxlVGV4dF1dIG9mIFtbb2ZTYW1wbGVzXV08L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19oYXNBdExlYXN0T25lU3RlcF1dIj4KICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nLXJvdyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nLWxhYmVsIj4KICAgICAgICAgICAgc3RlcAogICAgICAgICAgICA8c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6IGJvbGQiPltbX3RvTG9jYWxlU3RyaW5nKF9zdGVwVmFsdWUpXV08L3NwYW4+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImhlYWRpbmctbGFiZWwgaGVhZGluZy1yaWdodCBkYXRldGltZSI+CiAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfY3VycmVudFdhbGxUaW1lXV0iPgogICAgICAgICAgICAgIFtbX2N1cnJlbnRXYWxsVGltZV1dCiAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImxhYmVsIHJpZ2h0Ij4KICAgICAgICAgICAgPHBhcGVyLXNwaW5uZXItbGl0ZSBhY3RpdmUgaGlkZGVuJD0iW1shX2lzSW1hZ2VMb2FkaW5nXV0iPgogICAgICAgICAgICA8L3BhcGVyLXNwaW5uZXItbGl0ZT4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L3RlbXBsYXRlPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2hhc011bHRpcGxlU3RlcHNdXSI+CiAgICAgICAgPGRpdj4KICAgICAgICAgIDxwYXBlci1zbGlkZXIgaWQ9InN0ZXBzIiBpbW1lZGlhdGUtdmFsdWU9Int7X3N0ZXBJbmRleH19IiBtYXg9IltbX21heFN0ZXBJbmRleF1dIiBtYXgtbWFya2Vycz0iW1tfbWF4U3RlcEluZGV4XV0iIHNuYXBzIHN0ZXA9IjEiIHZhbHVlPSJ7e19zdGVwSW5kZXh9fSI+PC9wYXBlci1zbGlkZXI+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICA8L3RmLWNhcmQtaGVhZGluZz4KCiAgICAKICAgIDxhIGlkPSJtYWluLWltYWdlLWNvbnRhaW5lciIgcm9sZT0iYnV0dG9uIiBhcmlhLWxhYmVsPSJUb2dnbGUgYWN0dWFsIHNpemUiIGFyaWEtZXhwYW5kZWQkPSJbW19nZXRBcmlhRXhwYW5kZWQoYWN0dWFsU2l6ZSldXSIgb24tdGFwPSJfaGFuZGxlVGFwIj48L2E+CgogICAgPHN0eWxlIGluY2x1ZGU9InRmLWNhcmQtaGVhZGluZy1zdHlsZSI+CiAgICAgIC8qKiBNYWtlIGJ1dHRvbiBhIGRpdi4gKi8KICAgICAgYnV0dG9uIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBiYWNrZ3JvdW5kOiBub25lOwogICAgICAgIGJvcmRlcjogMDsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICB9CgogICAgICAvKiogRmlyZWZveDogR2V0IHJpZCBvZiBkb3R0ZWQgbGluZSBpbnNpZGUgYnV0dG9uLiAqLwogICAgICBidXR0b246Oi1tb3otZm9jdXMtaW5uZXIgewogICAgICAgIGJvcmRlcjogMDsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICB9CgogICAgICAvKiogRmlyZWZveDogU2ltdWxhdGUgQ2hyb21lJ3Mgb3V0ZXIgZ2xvdyBvbiBidXR0b24gd2hlbiBmb2N1c2VkLiAqLwogICAgICBidXR0b246LW1vei1mb2N1c3JpbmcgewogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgYm94LXNoYWRvdzogMHB4IDBweCAxcHggMnB4IEhpZ2hsaWdodDsKICAgICAgfQoKICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHdpZHRoOiAzNTBweDsKICAgICAgICBoZWlnaHQ6IGF1dG87CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIG1hcmdpbjogMCAxNXB4IDQwcHggMDsKICAgICAgICBvdmVyZmxvdy14OiBhdXRvOwogICAgICB9CgogICAgICAvKiogV2hlbiBhY3R1YWwgc2l6ZSBzaG93biBpcyBvbiwgdXNlIHRoZSBhY3R1YWwgaW1hZ2Ugd2lkdGguICovCiAgICAgIDpob3N0KFthY3R1YWwtc2l6ZV0pIHsKICAgICAgICBtYXgtd2lkdGg6IDEwMCU7CiAgICAgICAgd2lkdGg6IGF1dG87CiAgICAgIH0KCiAgICAgIDpob3N0KFthY3R1YWwtc2l6ZV0pICNtYWluLWltYWdlLWNvbnRhaW5lciB7CiAgICAgICAgbWF4LWhlaWdodDogbm9uZTsKICAgICAgICB3aWR0aDogYXV0bzsKICAgICAgfQoKICAgICAgOmhvc3QoW2FjdHVhbC1zaXplXSkgI21haW4taW1hZ2UtY29udGFpbmVyIGltZyB7CiAgICAgICAgd2lkdGg6IGF1dG87CiAgICAgIH0KCiAgICAgIHBhcGVyLXNwaW5uZXItbGl0ZSB7CiAgICAgICAgd2lkdGg6IDE0cHg7CiAgICAgICAgaGVpZ2h0OiAxNHB4OwogICAgICAgIHZlcnRpY2FsLWFsaWduOiB0ZXh0LWJvdHRvbTsKICAgICAgICAtLXBhcGVyLXNwaW5uZXItY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICB9CgogICAgICAjc3RlcHMgewogICAgICAgIGhlaWdodDogMTVweDsKICAgICAgICBtYXJnaW46IDAgMCAwIC0xNXB4OwogICAgICAgIC8qCiAgICAgICAgICogMzEgY29tZXMgZnJvbSBhZGRpbmcgYSBwYWRkaW5nIG9mIDE1cHggZnJvbSBib3RoIHNpZGVzIG9mIHRoZQogICAgICAgICAqIHBhcGVyLXNsaWRlciwgc3VidHJhY3RpbmcgMXB4IHNvIHRoYXQgdGhlIHNsaWRlciB3aWR0aCBhbGlnbnMKICAgICAgICAgKiB3aXRoIHRoZSBpbWFnZSAodGhlIGxhc3Qgc2xpZGVyIG1hcmtlciB0YWtlcyB1cCAxcHgpLCBhbmQKICAgICAgICAgKiBhZGRpbmcgMnB4IHRvIGFjY291bnQgZm9yIGEgYm9yZGVyIG9mIDFweCBvbiBib3RoIHNpZGVzIG9mCiAgICAgICAgICogdGhlIGltYWdlLiAzMCAtIDEgKyAyLgogICAgICAgICAqLwogICAgICAgIHdpZHRoOiBjYWxjKDEwMCUgKyAzMXB4KTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1hY3RpdmUtY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLWtub2ItY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLWtub2Itc3RhcnQtYm9yZGVyLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1rbm9iLXN0YXJ0LWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1tYXJrZXJzLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1waW4tY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLXBpbi1zdGFydC1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgIH0KCiAgICAgICNtYWluLWltYWdlLWNvbnRhaW5lciB7CiAgICAgICAgbWF4LWhlaWdodDogMTAyNHB4OwogICAgICAgIG92ZXJmbG93OiBhdXRvOwogICAgICB9CgogICAgICAjbWFpbi1pbWFnZS1jb250YWluZXIgaW1nIHsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgaW1hZ2UtcmVuZGVyaW5nOiAtbW96LWNyaXNwLWVkZ2VzOwogICAgICAgIGltYWdlLXJlbmRlcmluZzogcGl4ZWxhdGVkOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogYXV0bzsKICAgICAgfQoKICAgICAgcGFwZXItaWNvbi1idXR0b24gewogICAgICAgIGNvbG9yOiAjMjE5NmYzOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDEwMCU7CiAgICAgICAgd2lkdGg6IDMycHg7CiAgICAgICAgaGVpZ2h0OiAzMnB4OwogICAgICAgIHBhZGRpbmc6IDRweDsKICAgICAgfQogICAgICBwYXBlci1pY29uLWJ1dHRvbltzZWxlY3RlZF0gewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXRiLXVpLWxpZ2h0LWFjY2VudCk7CiAgICAgIH0KICAgICAgW2hpZGRlbl0gewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KICA8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdGYtaW1hZ2UtZGFzaGJvYXJkL3RmLWltYWdlLWxvYWRlci5odG1sLmpzClBvbHltZXIoe2lzOiJ0Zi1pbWFnZS1sb2FkZXIiLHByb3BlcnRpZXM6e3J1bjpTdHJpbmcsdGFnOlN0cmluZyxzYW1wbGU6TnVtYmVyLG9mU2FtcGxlczpOdW1iZXIsdGFnTWV0YWRhdGE6T2JqZWN0LF9ydW5Db2xvcjp7dHlwZTpTdHJpbmcsY29tcHV0ZWQ6Il9jb21wdXRlUnVuQ29sb3IocnVuKSJ9LGFjdHVhbFNpemU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9LGJyaWdodG5lc3NBZGp1c3RtZW50Ont0eXBlOk51bWJlcix2YWx1ZTouNX0sY29udHJhc3RQZXJjZW50YWdlOnt0eXBlOk51bWJlcix2YWx1ZTowfSxyZXF1ZXN0TWFuYWdlcjpPYmplY3QsX21ldGFkYXRhQ2FuY2VsbGVyOnt0eXBlOk9iamVjdCx2YWx1ZTooKT0+bmV3IFBrLkNhbmNlbGxlcn0sX2ltYWdlQ2FuY2VsbGVyOnt0eXBlOk9iamVjdCx2YWx1ZTooKT0+bmV3IFBrLkNhbmNlbGxlcn0sX3N0ZXBzOnt0eXBlOkFycmF5LHZhbHVlOltdLG5vdGlmeTohMH0sX3N0ZXBJbmRleDp7dHlwZTpOdW1iZXIsCm5vdGlmeTohMH0sX2N1cnJlbnRTdGVwOnt0eXBlOk9iamVjdCxjb21wdXRlZDoiX2NvbXB1dGVDdXJyZW50U3RlcChfc3RlcHMsIF9zdGVwSW5kZXgpIn0sX2hhc0F0TGVhc3RPbmVTdGVwOnt0eXBlOkJvb2xlYW4sY29tcHV0ZWQ6Il9jb21wdXRlSGFzQXRMZWFzdE9uZVN0ZXAoX3N0ZXBzKSJ9LF9oYXNNdWx0aXBsZVN0ZXBzOnt0eXBlOkJvb2xlYW4sY29tcHV0ZWQ6Il9jb21wdXRlSGFzTXVsdGlwbGVTdGVwcyhfc3RlcHMpIn0sX3N0ZXBWYWx1ZTp7dHlwZTpOdW1iZXIsY29tcHV0ZWQ6Il9jb21wdXRlU3RlcFZhbHVlKF9jdXJyZW50U3RlcCkifSxfY3VycmVudFdhbGxUaW1lOnt0eXBlOlN0cmluZyxjb21wdXRlZDoiX2NvbXB1dGVDdXJyZW50V2FsbFRpbWUoX2N1cnJlbnRTdGVwKSJ9LF9tYXhTdGVwSW5kZXg6e3R5cGU6TnVtYmVyLGNvbXB1dGVkOiJfY29tcHV0ZU1heFN0ZXBJbmRleChfc3RlcHMpIn0sX3NhbXBsZVRleHQ6e3R5cGU6U3RyaW5nLGNvbXB1dGVkOiJfY29tcHV0ZVNhbXBsZVRleHQoc2FtcGxlKSJ9LApfaGFzTXVsdGlwbGVTYW1wbGVzOnt0eXBlOkJvb2xlYW4sY29tcHV0ZWQ6Il9jb21wdXRlSGFzTXVsdGlwbGVTYW1wbGVzKG9mU2FtcGxlcykifSxfaXNJbWFnZUxvYWRpbmc6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX19LG9ic2VydmVyczpbInJlbG9hZChydW4sIHRhZykiLCJfdXBkYXRlSW1hZ2VVcmwoX2N1cnJlbnRTdGVwLCBicmlnaHRuZXNzQWRqdXN0bWVudCwgY29udHJhc3RQZXJjZW50YWdlKSJdLF9jb21wdXRlUnVuQ29sb3IoYSl7cmV0dXJuIFpsLnJ1bnNDb2xvclNjYWxlKGEpfSxfY29tcHV0ZUhhc0F0TGVhc3RPbmVTdGVwKGEpe3JldHVybiEhYSYmMDxhLmxlbmd0aH0sX2NvbXB1dGVIYXNNdWx0aXBsZVN0ZXBzKGEpe3JldHVybiEhYSYmMTxhLmxlbmd0aH0sX2NvbXB1dGVDdXJyZW50U3RlcChhLGMpe3JldHVybiBhW2NdfHxudWxsfSxfY29tcHV0ZVN0ZXBWYWx1ZShhKXtyZXR1cm4gYT9hLnN0ZXA6MH0sX2NvbXB1dGVDdXJyZW50V2FsbFRpbWUoYSl7cmV0dXJuIGE/CmZtLmZvcm1hdERhdGUoYS53YWxsX3RpbWUpOiIifSxfY29tcHV0ZU1heFN0ZXBJbmRleChhKXtyZXR1cm4gYS5sZW5ndGgtMX0sX2NvbXB1dGVTYW1wbGVUZXh0KGEpe3JldHVybmAke2ErMX1gfSxfY29tcHV0ZUhhc011bHRpcGxlU2FtcGxlcyhhKXtyZXR1cm4gMTxhfSxfZ2V0QXJpYUV4cGFuZGVkKCl7cmV0dXJuIHRoaXMuYWN0dWFsU2l6ZT8idHJ1ZSI6ImZhbHNlIn0sYXR0YWNoZWQoKXt0aGlzLl9hdHRhY2hlZD0hMDt0aGlzLnJlbG9hZCgpfSxyZWxvYWQoKXtpZih0aGlzLl9hdHRhY2hlZCl7dGhpcy5fbWV0YWRhdGFDYW5jZWxsZXIuY2FuY2VsQWxsKCk7dmFyIGE9UGsuYWRkUGFyYW1zKFBrLmdldFJvdXRlcigpLnBsdWdpblJvdXRlKCJpbWFnZXMiLCIvaW1hZ2VzIikse3RhZzp0aGlzLnRhZyxydW46dGhpcy5ydW4sc2FtcGxlOnRoaXMuc2FtcGxlfSksYz10aGlzLl9tZXRhZGF0YUNhbmNlbGxlci5jYW5jZWxsYWJsZShkPT57ZC5jYW5jZWxsZWR8fChkPWQudmFsdWUubWFwKHRoaXMuX2NyZWF0ZVN0ZXBEYXR1bS5iaW5kKHRoaXMpKSwKdGhpcy5zZXQoIl9zdGVwcyIsZCksdGhpcy5zZXQoIl9zdGVwSW5kZXgiLGQubGVuZ3RoLTEpKX0pO3RoaXMucmVxdWVzdE1hbmFnZXIucmVxdWVzdChhKS50aGVuKGMpfX0sX2NyZWF0ZVN0ZXBEYXR1bShhKXtsZXQgYz1Qay5nZXRSb3V0ZXIoKS5wbHVnaW5Sb3V0ZSgiaW1hZ2VzIiwiL2luZGl2aWR1YWxJbWFnZSIpO2M9UGsuYWRkUGFyYW1zKGMse3RzOmEud2FsbF90aW1lfSk7Yys9Ilx4MjYiK2EucXVlcnk7cmV0dXJue3dpZHRoOmEud2lkdGgsaGVpZ2h0OmEuaGVpZ2h0LHdhbGxfdGltZTpuZXcgRGF0ZSgxRTMqYS53YWxsX3RpbWUpLHN0ZXA6YS5zdGVwLHVybDpjfX0sX3VwZGF0ZUltYWdlVXJsKGEsYyxkKXtpZihhKXt2YXIgZj1uZXcgSW1hZ2U7dGhpcy5faW1hZ2VDYW5jZWxsZXIuY2FuY2VsQWxsKCk7Zi5vbmxvYWQ9Zi5vbmVycm9yPXRoaXMuX2ltYWdlQ2FuY2VsbGVyLmNhbmNlbGxhYmxlKGc9PntnLmNhbmNlbGxlZHx8KGc9dGhpcy4kJCgiI21haW4taW1hZ2UtY29udGFpbmVyIiksCmcuaW5uZXJIVE1MPSIiLFBvbHltZXIuZG9tKGcpLmFwcGVuZENoaWxkKGYpLHRoaXMuc2V0KCJfaXNJbWFnZUxvYWRpbmciLCExKSl9KS5iaW5kKHRoaXMpO2Yuc3R5bGUuZmlsdGVyPWBjb250cmFzdCgke2R9JSkgYDtmLnN0eWxlLmZpbHRlcis9YGJyaWdodG5lc3MoJHtjfSlgO3RoaXMuc2V0KCJfaXNJbWFnZUxvYWRpbmciLCEwKTtmLnNyYz1hLnVybH19LF9oYW5kbGVUYXAoKXt0aGlzLnNldCgiYWN0dWFsU2l6ZSIsIXRoaXMuYWN0dWFsU2l6ZSl9LF90b0xvY2FsZVN0cmluZyhhKXtyZXR1cm4gYS50b0xvY2FsZVN0cmluZygpfX0pOwo8L3NjcmlwdD4KPC9kb20tbW9kdWxlPgoKCgo8ZG9tLW1vZHVsZSBpZD0idGYtaW1hZ2UtZGFzaGJvYXJkIj4KICA8dGVtcGxhdGU+CiAgICA8dGYtZGFzaGJvYXJkLWxheW91dD4KICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhciIgc2xvdD0ic2lkZWJhciI+CiAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImxpbmUtaXRlbSI+CiAgICAgICAgICAgIDxwYXBlci1jaGVja2JveCBjaGVja2VkPSJ7e19hY3R1YWxTaXplfX0iPlNob3cgYWN0dWFsIGltYWdlIHNpemU8L3BhcGVyLWNoZWNrYm94PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIj4KICAgICAgICAgIDxoMyBjbGFzcz0idG9vbHRpcC1jb250YWluZXIiPkJyaWdodG5lc3MgYWRqdXN0bWVudDwvaDM+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJyZXNldHRhYmxlLXNsaWRlci1jb250YWluZXIiPgogICAgICAgICAgICA8cGFwZXItc2xpZGVyIG1pbj0iMCIgbWF4PSIyIiBzbmFwcyBwaW4gc3RlcD0iMC4wMSIgdmFsdWU9Int7X2JyaWdodG5lc3NBZGp1c3RtZW50fX0iIGltbWVkaWF0ZS12YWx1ZT0ie3tfYnJpZ2h0bmVzc0FkanVzdG1lbnR9fSI+PC9wYXBlci1zbGlkZXI+CiAgICAgICAgICAgIDxwYXBlci1idXR0b24gY2xhc3M9IngtYnV0dG9uIiBvbi10YXA9Il9yZXNldEJyaWdodG5lc3MiIGRpc2FibGVkPSJbW19icmlnaHRuZXNzSXNEZWZhdWx0XV0iPlJlc2V0PC9wYXBlci1idXR0b24+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24iPgogICAgICAgICAgPGgzIGNsYXNzPSJ0b29sdGlwLWNvbnRhaW5lciI+Q29udHJhc3QgYWRqdXN0bWVudDwvaDM+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJyZXNldHRhYmxlLXNsaWRlci1jb250YWluZXIiPgogICAgICAgICAgICA8cGFwZXItc2xpZGVyIG1pbj0iMCIgbWF4PSI1MDAiIHNuYXBzIHBpbiBzdGVwPSIxIiB2YWx1ZT0ie3tfY29udHJhc3RQZXJjZW50YWdlfX0iIGltbWVkaWF0ZS12YWx1ZT0ie3tfY29udHJhc3RQZXJjZW50YWdlfX0iPjwvcGFwZXItc2xpZGVyPgogICAgICAgICAgICA8cGFwZXItYnV0dG9uIGNsYXNzPSJ4LWJ1dHRvbiIgb24tdGFwPSJfcmVzZXRDb250cmFzdCIgZGlzYWJsZWQ9IltbX2NvbnRyYXN0SXNEZWZhdWx0XV0iPlJlc2V0PC9wYXBlci1idXR0b24+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24iPgogICAgICAgICAgPHRmLXJ1bnMtc2VsZWN0b3IgaWQ9InJ1bnMtc2VsZWN0b3IiIHNlbGVjdGVkLXJ1bnM9Int7X3NlbGVjdGVkUnVuc319Ij48L3RmLXJ1bnMtc2VsZWN0b3I+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjZW50ZXIiIHNsb3Q9ImNlbnRlciI+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJuby1kYXRhLXdhcm5pbmciPgogICAgICAgICAgICA8aDM+Tm8gaW1hZ2UgZGF0YSB3YXMgZm91bmQuPC9oMz4KICAgICAgICAgICAgPHA+UHJvYmFibGUgY2F1c2VzOgogICAgICAgICAgICA8dWw+CiAgICAgICAgICAgICAgPGxpPllvdSBoYXZlbuKAmXQgd3JpdHRlbiBhbnkgaW1hZ2UgZGF0YSB0byB5b3VyIGV2ZW50IGZpbGVzLjwvbGk+CiAgICAgICAgICAgICAgPGxpPlRlbnNvckJvYXJkIGNhbuKAmXQgZmluZCB5b3VyIGV2ZW50IGZpbGVzLjwvbGk+CiAgICAgICAgICAgIDwvdWw+CgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICBJZiB5b3XigJlyZSBuZXcgdG8gdXNpbmcgVGVuc29yQm9hcmQsIGFuZCB3YW50IHRvIGZpbmQgb3V0IGhvdyB0bwogICAgICAgICAgICAgIGFkZCBkYXRhIGFuZCBzZXQgdXAgeW91ciBldmVudCBmaWxlcywgY2hlY2sgb3V0IHRoZQogICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCI+UkVBRE1FPC9hPgogICAgICAgICAgICAgIGFuZCBwZXJoYXBzIHRoZQogICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL2dldF9zdGFydGVkL3N1bW1hcmllc19hbmRfdGVuc29yYm9hcmQiPlRlbnNvckJvYXJkIHR1dG9yaWFsPC9hPi4KICAgICAgICAgICAgCgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICBJZiB5b3UgdGhpbmsgVGVuc29yQm9hcmQgaXMgY29uZmlndXJlZCBwcm9wZXJseSwgcGxlYXNlIHNlZQogICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCNteS10ZW5zb3Jib2FyZC1pc250LXNob3dpbmctYW55LWRhdGEtd2hhdHMtd3JvbmciPnRoZSBzZWN0aW9uIG9mIHRoZSBSRUFETUUgZGV2b3RlZCB0byBtaXNzaW5nIGRhdGEgcHJvYmxlbXM8L2E+CiAgICAgICAgICAgICAgYW5kIGNvbnNpZGVyIGZpbGluZyBhbiBpc3N1ZSBvbiBHaXRIdWIuCiAgICAgICAgICAgIAogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIV9kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8dGYtdGFnLWZpbHRlcmVyIHRhZy1maWx0ZXI9Int7X3RhZ0ZpbHRlcn19Ij48L3RmLXRhZy1maWx0ZXJlcj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX2NhdGVnb3JpZXNdXSIgYXM9ImNhdGVnb3J5Ij4KICAgICAgICAgICAgPHRmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3IGNhdGVnb3J5PSJbW2NhdGVnb3J5XV0iIGluaXRpYWwtb3BlbmVkPSJbW19zaG91bGRPcGVuKGluZGV4KV1dIj4KICAgICAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8dGYtaW1hZ2UtbG9hZGVyIGFjdGl2ZT0iW1thY3RpdmVdXSIgcnVuPSJbW2l0ZW0ucnVuXV0iIHRhZz0iW1tpdGVtLnRhZ11dIiBzYW1wbGU9IltbaXRlbS5zYW1wbGVdXSIgb2Ytc2FtcGxlcz0iW1tpdGVtLm9mU2FtcGxlc11dIiB0YWctbWV0YWRhdGE9IltbX3RhZ01ldGFkYXRhKF9ydW5Ub1RhZ0luZm8sIGl0ZW0ucnVuLCBpdGVtLnRhZyldXSIgcmVxdWVzdC1tYW5hZ2VyPSJbW19yZXF1ZXN0TWFuYWdlcl1dIiBhY3R1YWwtc2l6ZT0iW1tfYWN0dWFsU2l6ZV1dIiBicmlnaHRuZXNzLWFkanVzdG1lbnQ9IltbX2JyaWdodG5lc3NBZGp1c3RtZW50XV0iIGNvbnRyYXN0LXBlcmNlbnRhZ2U9IltbX2NvbnRyYXN0UGVyY2VudGFnZV1dIj48L3RmLWltYWdlLWxvYWRlcj4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8L3RmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L2Rpdj4KICAgIDwvdGYtZGFzaGJvYXJkLWxheW91dD4KICAgIDxzdHlsZSBpbmNsdWRlPSJkYXNoYm9hcmQtc3R5bGUiPjwvc3R5bGU+CiAgICA8c3R5bGU+CiAgICAgIC5yZXNldHRhYmxlLXNsaWRlci1jb250YWluZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIH0KICAgICAgLnJlc2V0dGFibGUtc2xpZGVyLWNvbnRhaW5lciBwYXBlci1zbGlkZXIgewogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgfQogICAgICAucmVzZXR0YWJsZS1zbGlkZXItY29udGFpbmVyIHBhcGVyLWJ1dHRvbiB7CiAgICAgICAgZmxleC1ncm93OiAwOwogICAgICB9CiAgICAgIC5yZXNldHRhYmxlLXNsaWRlci1jb250YWluZXIgcGFwZXItYnV0dG9uW2Rpc2FibGVkXSB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdW5zZXQ7CiAgICAgIH0KICAgICAgLngtYnV0dG9uIHsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tdGItdWktbGlnaHQtYWNjZW50KTsKICAgICAgICBjb2xvcjogdmFyKC0tdGItdWktZGFyay1hY2NlbnQpOwogICAgICB9CiAgICAgIGgzIHsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItZ3JleS04MDApOwogICAgICAgIG1hcmdpbjogMDsKICAgICAgICBmb250LXdlaWdodDogbm9ybWFsOwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBtYXJnaW4tYm90dG9tOiA1cHg7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIH0KICAgICAgLm5vLWRhdGEtd2FybmluZyB7CiAgICAgICAgbWF4LXdpZHRoOiA1NDBweDsKICAgICAgICBtYXJnaW46IDgwcHggYXV0byAwIGF1dG87CiAgICAgIH0KICAgICAgcGFwZXItc2xpZGVyIHsKICAgICAgICAtLXBhcGVyLXNsaWRlci1hY3RpdmUtY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLWtub2ItY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLWtub2Itc3RhcnQtYm9yZGVyLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1rbm9iLXN0YXJ0LWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1tYXJrZXJzLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1waW4tY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLXBpbi1zdGFydC1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KICA8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdGYtaW1hZ2UtZGFzaGJvYXJkL3RmLWltYWdlLWRhc2hib2FyZC5odG1sLmpzClBvbHltZXIoe2lzOiJ0Zi1pbWFnZS1kYXNoYm9hcmQiLHByb3BlcnRpZXM6e19zZWxlY3RlZFJ1bnM6QXJyYXksX3J1blRvVGFnSW5mbzpPYmplY3QsX2RhdGFOb3RGb3VuZDpCb29sZWFuLF9hY3R1YWxTaXplOkJvb2xlYW4sX2RlZmF1bHRCcmlnaHRuZXNzQWRqdXN0bWVudDp7dHlwZTpOdW1iZXIsdmFsdWU6MSxyZWFkT25seTohMH0sX2RlZmF1bHRDb250cmFzdFBlcmNlbnRhZ2U6e3R5cGU6TnVtYmVyLHZhbHVlOjEwMCxyZWFkT25seTohMH0sX2JyaWdodG5lc3NBZGp1c3RtZW50Ont0eXBlOk51bWJlcix2YWx1ZToxfSxfY29udHJhc3RQZXJjZW50YWdlOnt0eXBlOk51bWJlcix2YWx1ZToxMDB9LF90YWdGaWx0ZXI6U3RyaW5nLF9icmlnaHRuZXNzSXNEZWZhdWx0Ont0eXBlOkJvb2xlYW4sY29tcHV0ZWQ6Il9jb21wdXRlQnJpZ2h0bmVzc0lzRGVmYXVsdChfYnJpZ2h0bmVzc0FkanVzdG1lbnQpIn0sX2NvbnRyYXN0SXNEZWZhdWx0Ont0eXBlOkJvb2xlYW4sY29tcHV0ZWQ6Il9jb21wdXRlQ29udHJhc3RJc0RlZmF1bHQoX2NvbnRyYXN0UGVyY2VudGFnZSkifSwKX2NhdGVnb3JpZXNEb21SZWFkeTpCb29sZWFuLF9jYXRlZ29yaWVzOnt0eXBlOkFycmF5LGNvbXB1dGVkOiJfbWFrZUNhdGVnb3JpZXMoX3J1blRvVGFnSW5mbywgX3NlbGVjdGVkUnVucywgX3RhZ0ZpbHRlciwgX2NhdGVnb3JpZXNEb21SZWFkeSkifSxfcmVxdWVzdE1hbmFnZXI6e3R5cGU6T2JqZWN0LHZhbHVlOigpPT5uZXcgUGsuUmVxdWVzdE1hbmFnZXJ9fSxyZWFkeSgpe3RoaXMucmVsb2FkKCl9LHJlbG9hZCgpe3RoaXMuX2ZldGNoVGFncygpLnRoZW4oKCk9Pnt0aGlzLl9yZWxvYWRJbWFnZXMoKX0pfSxfZmV0Y2hUYWdzKCl7Y29uc3QgYT1Qay5nZXRSb3V0ZXIoKS5wbHVnaW5Sb3V0ZSgiaW1hZ2VzIiwiL3RhZ3MiKTtyZXR1cm4gdGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdChhKS50aGVuKGM9PntpZighXy5pc0VxdWFsKGMsdGhpcy5fcnVuVG9UYWdJbmZvKSl7dmFyIGQ9Xy5tYXBWYWx1ZXMoYyxmPT5PYmplY3Qua2V5cyhmKSk7ZD1Qay5nZXRUYWdzKGQpO3RoaXMuc2V0KCJfZGF0YU5vdEZvdW5kIiwKMD09PWQubGVuZ3RoKTt0aGlzLnNldCgiX3J1blRvVGFnSW5mbyIsYyk7dGhpcy5hc3luYygoKT0+e3RoaXMuc2V0KCJfY2F0ZWdvcmllc0RvbVJlYWR5IiwhMCl9KX19KX0sX3JlbG9hZEltYWdlcygpe3RoaXMucm9vdC5xdWVyeVNlbGVjdG9yQWxsKCJ0Zi1pbWFnZS1sb2FkZXIiKS5mb3JFYWNoKGE9PnthLnJlbG9hZCgpfSl9LF9zaG91bGRPcGVuKGEpe3JldHVybiAyPj1hfSxfcmVzZXRCcmlnaHRuZXNzKCl7dGhpcy5fYnJpZ2h0bmVzc0FkanVzdG1lbnQ9dGhpcy5fZGVmYXVsdEJyaWdodG5lc3NBZGp1c3RtZW50fSxfcmVzZXRDb250cmFzdCgpe3RoaXMuX2NvbnRyYXN0UGVyY2VudGFnZT10aGlzLl9kZWZhdWx0Q29udHJhc3RQZXJjZW50YWdlfSxfY29tcHV0ZUJyaWdodG5lc3NJc0RlZmF1bHQoYSl7cmV0dXJuIGE9PT10aGlzLl9kZWZhdWx0QnJpZ2h0bmVzc0FkanVzdG1lbnR9LF9jb21wdXRlQ29udHJhc3RJc0RlZmF1bHQoYSl7cmV0dXJuIGE9PT10aGlzLl9kZWZhdWx0Q29udHJhc3RQZXJjZW50YWdlfSwKX21ha2VDYXRlZ29yaWVzKGEsYyxkKXtmdW5jdGlvbiBmKGwpe2NvbnN0IGs9YVtsLnJ1bl1bbC50YWddLnNhbXBsZXM7cmV0dXJuIF8ucmFuZ2UoaykubWFwKG09Pk9iamVjdC5hc3NpZ24oe30sbCx7c2FtcGxlOm0sb2ZTYW1wbGVzOmt9KSl9Y29uc3QgZz1fLm1hcFZhbHVlcyhhLGw9Pk9iamVjdC5rZXlzKGwpKTtyZXR1cm4gUWsuY2F0ZWdvcml6ZVJ1blRhZ0NvbWJpbmF0aW9ucyhnLGMsZCkubWFwKGw9Pk9iamVjdC5hc3NpZ24oe30sbCx7aXRlbXM6W10uY29uY2F0LmFwcGx5KFtdLGwuaXRlbXMubWFwKGYpKX0pKX0sX3RhZ01ldGFkYXRhKGEsYyxkKXtyZXR1cm4gYVtjXVtkXX19KTsKPC9zY3JpcHQ+CjwvZG9tLW1vZHVsZT4KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgo8ZG9tLW1vZHVsZSBpZD0idGYtYXVkaW8tbG9hZGVyIj4KICA8dGVtcGxhdGU+CiAgICA8dGYtY2FyZC1oZWFkaW5nIHRhZz0iW1t0YWddXSIgcnVuPSJbW3J1bl1dIiBkaXNwbGF5LW5hbWU9IltbdGFnTWV0YWRhdGEuZGlzcGxheU5hbWVdXSIgZGVzY3JpcHRpb249IltbdGFnTWV0YWRhdGEuZGVzY3JpcHRpb25dXSIgY29sb3I9IltbX3J1bkNvbG9yXV0iPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2hhc011bHRpcGxlU2FtcGxlc11dIj4KICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nLXJvdyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nLWxhYmVsIj4KICAgICAgICAgICAgc2FtcGxlOiBbW19zYW1wbGVUZXh0XV0gb2YgW1t0b3RhbFNhbXBsZXNdXQogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaGFzQXRMZWFzdE9uZVN0ZXBdXSI+CiAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGluZy1yb3ciPgogICAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGluZy1sYWJlbCI+CiAgICAgICAgICAgIHN0ZXAgPHN0cm9uZz5bW19jdXJyZW50RGF0dW0uc3RlcF1dPC9zdHJvbmc+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfY3VycmVudERhdHVtLndhbGxfdGltZV1dIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGluZy1sYWJlbCBoZWFkaW5nLXJpZ2h0Ij4KICAgICAgICAgICAgICBbW19jdXJyZW50RGF0dW0ud2FsbF90aW1lXV0KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvZGl2PgogICAgICA8L3RlbXBsYXRlPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2hhc011bHRpcGxlU3RlcHNdXSI+CiAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGluZy1yb3ciPgogICAgICAgICAgPHBhcGVyLXNsaWRlciBpZD0ic3RlcHMiIGltbWVkaWF0ZS12YWx1ZT0ie3tfc3RlcEluZGV4fX0iIG1heD0iW1tfbWF4U3RlcEluZGV4XV0iIG1heC1tYXJrZXJzPSJbW19tYXhTdGVwSW5kZXhdXSIgc25hcHMgc3RlcD0iMSIgdmFsdWU9Int7X3N0ZXBJbmRleH19Ij48L3BhcGVyLXNsaWRlcj4KICAgICAgICA8L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgIDwvdGYtY2FyZC1oZWFkaW5nPgogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19oYXNBdExlYXN0T25lU3RlcF1dIj4KICAgICAgPGF1ZGlvIGNvbnRyb2xzIHNyYyQ9IltbX2N1cnJlbnREYXR1bS51cmxdXSIgdHlwZSQ9IltbX2N1cnJlbnREYXR1bS5jb250ZW50VHlwZV1dIj48L2F1ZGlvPgogICAgICA8dGYtbWFya2Rvd24tdmlldyBodG1sPSJbW19jdXJyZW50RGF0dW0ubGFiZWxdXSI+PC90Zi1tYXJrZG93bi12aWV3PgogICAgPC90ZW1wbGF0ZT4KICAgIDxkaXYgaWQ9Im1haW4tYXVkaW8tY29udGFpbmVyIj48L2Rpdj4KCiAgICA8c3R5bGUgaW5jbHVkZT0idGYtY2FyZC1oZWFkaW5nLXN0eWxlIj4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHdpZHRoOiAzNTBweDsKICAgICAgICBoZWlnaHQ6IGF1dG87CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIC0tc3RlcC1zbGlkZXIta25vYi1jb2xvcjogIzQyNDI0MjsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDE1cHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTVweDsKICAgICAgfQoKICAgICAgI3N0ZXBzIHsKICAgICAgICBoZWlnaHQ6IDE1cHg7CiAgICAgICAgbWFyZ2luOiAwIDAgMCAtMTVweDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgIHBhZGRpbmc6IDAgNXB4OyAvKiBzbyB0aGUgc2xpZGVyIGtub2IgZG9lc24ndCBidXR0IG91dCAqLwogICAgICAgIG1hcmdpbi10b3A6IDVweDsKICAgICAgICAtLXBhcGVyLXNsaWRlci1hY3RpdmUtY29sb3I6IHZhcigtLXN0ZXAtc2xpZGVyLWtub2ItY29sb3IpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLWtub2ItY29sb3I6IHZhcigtLXN0ZXAtc2xpZGVyLWtub2ItY29sb3IpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLXBpbi1jb2xvcjogdmFyKC0tc3RlcC1zbGlkZXIta25vYi1jb2xvcik7CiAgICAgICAgLS1wYXBlci1zbGlkZXIta25vYi1zdGFydC1jb2xvcjogdmFyKC0tc3RlcC1zbGlkZXIta25vYi1jb2xvcik7CiAgICAgICAgLS1wYXBlci1zbGlkZXIta25vYi1zdGFydC1ib3JkZXItY29sb3I6IHZhcigtLXN0ZXAtc2xpZGVyLWtub2ItY29sb3IpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLXBpbi1zdGFydC1jb2xvcjogdmFyKC0tc3RlcC1zbGlkZXIta25vYi1jb2xvcik7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KICA8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdGYtYXVkaW8tZGFzaGJvYXJkL3RmLWF1ZGlvLWxvYWRlci5odG1sLmpzClBvbHltZXIoe2lzOiJ0Zi1hdWRpby1sb2FkZXIiLHByb3BlcnRpZXM6e3J1bjpTdHJpbmcsdGFnOlN0cmluZyxzYW1wbGU6TnVtYmVyLHRvdGFsU2FtcGxlczpOdW1iZXIsdGFnTWV0YWRhdGE6T2JqZWN0LF9ydW5Db2xvcjp7dHlwZTpTdHJpbmcsY29tcHV0ZWQ6Il9jb21wdXRlUnVuQ29sb3IocnVuKSJ9LHJlcXVlc3RNYW5hZ2VyOk9iamVjdCxfbWV0YWRhdGFDYW5jZWxsZXI6e3R5cGU6T2JqZWN0LHZhbHVlOigpPT5uZXcgUGsuQ2FuY2VsbGVyfSxfc3RlcHM6e3R5cGU6QXJyYXksdmFsdWU6KCk9PltdfSxfc3RlcEluZGV4Ok51bWJlcixfaGFzQXRMZWFzdE9uZVN0ZXA6e3R5cGU6Qm9vbGVhbixjb21wdXRlZDoiX2NvbXB1dGVIYXNBdExlYXN0T25lU3RlcChfc3RlcHMpIn0sX2hhc011bHRpcGxlU3RlcHM6e3R5cGU6Qm9vbGVhbixjb21wdXRlZDoiX2NvbXB1dGVIYXNNdWx0aXBsZVN0ZXBzKF9zdGVwcykifSxfY3VycmVudERhdHVtOnt0eXBlOk9iamVjdCxjb21wdXRlZDoiX2NvbXB1dGVDdXJyZW50RGF0dW0oX3N0ZXBzLCBfc3RlcEluZGV4KSJ9LApfbWF4U3RlcEluZGV4Ont0eXBlOk51bWJlcixjb21wdXRlZDoiX2NvbXB1dGVNYXhTdGVwSW5kZXgoX3N0ZXBzKSJ9LF9zYW1wbGVUZXh0Ont0eXBlOlN0cmluZyxjb21wdXRlZDoiX2NvbXB1dGVTYW1wbGVUZXh0KHNhbXBsZSkifSxfaGFzTXVsdGlwbGVTYW1wbGVzOnt0eXBlOkJvb2xlYW4sY29tcHV0ZWQ6Il9jb21wdXRlSGFzTXVsdGlwbGVTYW1wbGVzKHRvdGFsU2FtcGxlcykifX0sb2JzZXJ2ZXJzOlsicmVsb2FkKHJ1biwgdGFnKSJdLF9jb21wdXRlUnVuQ29sb3IoYSl7cmV0dXJuIFpsLnJ1bnNDb2xvclNjYWxlKGEpfSxfY29tcHV0ZUhhc0F0TGVhc3RPbmVTdGVwKGEpe3JldHVybiEhYSYmMDxhLmxlbmd0aH0sX2NvbXB1dGVIYXNNdWx0aXBsZVN0ZXBzKGEpe3JldHVybiEhYSYmMTxhLmxlbmd0aH0sX2NvbXB1dGVNYXhTdGVwSW5kZXgoYSl7cmV0dXJuIGEubGVuZ3RoLTF9LF9jb21wdXRlQ3VycmVudERhdHVtKGEsYyl7cmV0dXJuIGFbY119LF9jb21wdXRlU2FtcGxlVGV4dChhKXtyZXR1cm5gJHthKwoxfWB9LF9jb21wdXRlSGFzTXVsdGlwbGVTYW1wbGVzKGEpe3JldHVybiAxPGF9LGF0dGFjaGVkKCl7dGhpcy5fYXR0YWNoZWQ9ITA7dGhpcy5yZWxvYWQoKX0scmVsb2FkKCl7aWYodGhpcy5fYXR0YWNoZWQpe3RoaXMuX21ldGFkYXRhQ2FuY2VsbGVyLmNhbmNlbEFsbCgpO3ZhciBhPVBrLmdldFJvdXRlcigpLnBsdWdpblJvdXRlKCJhdWRpbyIsIi9hdWRpbyIsbmV3IFVSTFNlYXJjaFBhcmFtcyh7dGFnOnRoaXMudGFnLHJ1bjp0aGlzLnJ1bixzYW1wbGU6dGhpcy5zYW1wbGV9KSksYz10aGlzLl9tZXRhZGF0YUNhbmNlbGxlci5jYW5jZWxsYWJsZShkPT57ZC5jYW5jZWxsZWR8fChkPWQudmFsdWUubWFwKHRoaXMuX2NyZWF0ZVN0ZXBEYXR1bS5iaW5kKHRoaXMpKSx0aGlzLnNldCgiX3N0ZXBzIixkKSx0aGlzLnNldCgiX3N0ZXBJbmRleCIsZC5sZW5ndGgtMSkpfSk7dGhpcy5yZXF1ZXN0TWFuYWdlci5yZXF1ZXN0KGEpLnRoZW4oYyl9fSxfY3JlYXRlU3RlcERhdHVtKGEpe3ZhciBjPQpuZXcgVVJMU2VhcmNoUGFyYW1zKGEucXVlcnkpO2MuYXBwZW5kKCJ0cyIsYS53YWxsX3RpbWUpO2M9UGsuZ2V0Um91dGVyKCkucGx1Z2luUm91dGUoImF1ZGlvIiwiL2luZGl2aWR1YWxBdWRpbyIsYyk7cmV0dXJue3dhbGxfdGltZTpmbS5mb3JtYXREYXRlKG5ldyBEYXRlKDFFMyphLndhbGxfdGltZSkpLHN0ZXA6YS5zdGVwLGxhYmVsOmEubGFiZWwsY29udGVudFR5cGU6YS5jb250ZW50VHlwZSx1cmw6Y319fSk7Cjwvc2NyaXB0Pgo8L2RvbS1tb2R1bGU+CgoKCjxkb20tbW9kdWxlIGlkPSJ0Zi1hdWRpby1kYXNoYm9hcmQiPgogIDx0ZW1wbGF0ZT4KICAgIDx0Zi1kYXNoYm9hcmQtbGF5b3V0PgogICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyIiBzbG90PSJzaWRlYmFyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24iPgogICAgICAgICAgPHRmLXJ1bnMtc2VsZWN0b3IgaWQ9InJ1bnMtc2VsZWN0b3IiIHNlbGVjdGVkLXJ1bnM9Int7X3NlbGVjdGVkUnVuc319Ij48L3RmLXJ1bnMtc2VsZWN0b3I+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjZW50ZXIiIHNsb3Q9ImNlbnRlciI+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJuby1kYXRhLXdhcm5pbmciPgogICAgICAgICAgICA8aDM+Tm8gYXVkaW8gZGF0YSB3YXMgZm91bmQuPC9oMz4KICAgICAgICAgICAgPHA+UHJvYmFibGUgY2F1c2VzOgogICAgICAgICAgICA8dWw+CiAgICAgICAgICAgICAgPGxpPllvdSBoYXZlbuKAmXQgd3JpdHRlbiBhbnkgYXVkaW8gZGF0YSB0byB5b3VyIGV2ZW50IGZpbGVzLjwvbGk+CiAgICAgICAgICAgICAgPGxpPlRlbnNvckJvYXJkIGNhbuKAmXQgZmluZCB5b3VyIGV2ZW50IGZpbGVzLjwvbGk+CiAgICAgICAgICAgIDwvdWw+CgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICBJZiB5b3XigJlyZSBuZXcgdG8gdXNpbmcgVGVuc29yQm9hcmQsIGFuZCB3YW50IHRvIGZpbmQgb3V0IGhvdyB0bwogICAgICAgICAgICAgIGFkZCBkYXRhIGFuZCBzZXQgdXAgeW91ciBldmVudCBmaWxlcywgY2hlY2sgb3V0IHRoZQogICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCI+UkVBRE1FPC9hPgogICAgICAgICAgICAgIGFuZCBwZXJoYXBzIHRoZQogICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL2dldF9zdGFydGVkL3N1bW1hcmllc19hbmRfdGVuc29yYm9hcmQiPlRlbnNvckJvYXJkIHR1dG9yaWFsPC9hPi4KICAgICAgICAgICAgCgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICBJZiB5b3UgdGhpbmsgVGVuc29yQm9hcmQgaXMgY29uZmlndXJlZCBwcm9wZXJseSwgcGxlYXNlIHNlZQogICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCNteS10ZW5zb3Jib2FyZC1pc250LXNob3dpbmctYW55LWRhdGEtd2hhdHMtd3JvbmciPnRoZSBzZWN0aW9uIG9mIHRoZSBSRUFETUUgZGV2b3RlZCB0byBtaXNzaW5nIGRhdGEgcHJvYmxlbXM8L2E+CiAgICAgICAgICAgICAgYW5kIGNvbnNpZGVyIGZpbGluZyBhbiBpc3N1ZSBvbiBHaXRIdWIuCiAgICAgICAgICAgIAogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIV9kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8dGYtdGFnLWZpbHRlcmVyIHRhZy1maWx0ZXI9Int7X3RhZ0ZpbHRlcn19Ij48L3RmLXRhZy1maWx0ZXJlcj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX2NhdGVnb3JpZXNdXSIgYXM9ImNhdGVnb3J5Ij4KICAgICAgICAgICAgPHRmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3IGNhdGVnb3J5PSJbW2NhdGVnb3J5XV0iIGluaXRpYWwtb3BlbmVkPSJbW19zaG91bGRPcGVuKGluZGV4KV1dIj4KICAgICAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8dGYtYXVkaW8tbG9hZGVyIGFjdGl2ZT0iW1thY3RpdmVdXSIgcnVuPSJbW2l0ZW0ucnVuXV0iIHRhZz0iW1tpdGVtLnRhZ11dIiBzYW1wbGU9IltbaXRlbS5zYW1wbGVdXSIgdG90YWwtc2FtcGxlcz0iW1tpdGVtLnRvdGFsU2FtcGxlc11dIiB0YWctbWV0YWRhdGE9IltbX3RhZ01ldGFkYXRhKF9ydW5Ub1RhZ0luZm8sIGl0ZW0ucnVuLCBpdGVtLnRhZyldXSIgcmVxdWVzdC1tYW5hZ2VyPSJbW19yZXF1ZXN0TWFuYWdlcl1dIj48L3RmLWF1ZGlvLWxvYWRlcj4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8L3RmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L2Rpdj4KICAgIDwvdGYtZGFzaGJvYXJkLWxheW91dD4KICAgIDxzdHlsZSBpbmNsdWRlPSJkYXNoYm9hcmQtc3R5bGUiPjwvc3R5bGU+CiAgICA8c3R5bGU+CiAgICAgIC5uby1kYXRhLXdhcm5pbmcgewogICAgICAgIG1heC13aWR0aDogNTQwcHg7CiAgICAgICAgbWFyZ2luOiA4MHB4IGF1dG8gMCBhdXRvOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CiAgPHNjcmlwdD4vL35+V0VCUEFUSH5+L3RmLWF1ZGlvLWRhc2hib2FyZC90Zi1hdWRpby1kYXNoYm9hcmQuaHRtbC5qcwpQb2x5bWVyKHtpczoidGYtYXVkaW8tZGFzaGJvYXJkIixwcm9wZXJ0aWVzOntfc2VsZWN0ZWRSdW5zOkFycmF5LF9ydW5Ub1RhZ0luZm86T2JqZWN0LF9kYXRhTm90Rm91bmQ6Qm9vbGVhbixfdGFnRmlsdGVyOnt0eXBlOlN0cmluZyx2YWx1ZToiIn0sX2NhdGVnb3JpZXM6e3R5cGU6QXJyYXksY29tcHV0ZWQ6Il9tYWtlQ2F0ZWdvcmllcyhfcnVuVG9UYWdJbmZvLCBfc2VsZWN0ZWRSdW5zLCBfdGFnRmlsdGVyKSJ9LF9yZXF1ZXN0TWFuYWdlcjp7dHlwZTpPYmplY3QsdmFsdWU6KCk9Pm5ldyBQay5SZXF1ZXN0TWFuYWdlcn19LHJlYWR5KCl7dGhpcy5yZWxvYWQoKX0scmVsb2FkKCl7dGhpcy5fZmV0Y2hUYWdzKCkudGhlbigoKT0+e3RoaXMuX3JlbG9hZEF1ZGlvKCl9KX0sX2ZldGNoVGFncygpe2NvbnN0IGE9UGsuZ2V0Um91dGVyKCkucGx1Z2luUm91dGUoImF1ZGlvIiwiL3RhZ3MiKTtyZXR1cm4gdGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdChhKS50aGVuKGM9PntpZighXy5pc0VxdWFsKGMsCnRoaXMuX3J1blRvVGFnSW5mbykpe3ZhciBkPV8ubWFwVmFsdWVzKGMsZj0+T2JqZWN0LmtleXMoZikpO2Q9UGsuZ2V0VGFncyhkKTt0aGlzLnNldCgiX2RhdGFOb3RGb3VuZCIsMD09PWQubGVuZ3RoKTt0aGlzLnNldCgiX3J1blRvVGFnSW5mbyIsYyl9fSl9LF9yZWxvYWRBdWRpbygpe3RoaXMucm9vdC5xdWVyeVNlbGVjdG9yQWxsKCJ0Zi1hdWRpby1sb2FkZXIiKS5mb3JFYWNoKGE9PnthLnJlbG9hZCgpfSl9LF9zaG91bGRPcGVuKGEpe3JldHVybiAyPj1hfSxfbWFrZUNhdGVnb3JpZXMoYSxjLGQpe2Z1bmN0aW9uIGYobCl7Y29uc3Qgaz1hW2wucnVuXVtsLnRhZ10uc2FtcGxlcztyZXR1cm4gXy5yYW5nZShrKS5tYXAobT0+T2JqZWN0LmFzc2lnbih7fSxsLHtzYW1wbGU6bSx0b3RhbFNhbXBsZXM6a30pKX1jb25zdCBnPV8ubWFwVmFsdWVzKGEsbD0+T2JqZWN0LmtleXMobCkpO3JldHVybiBRay5jYXRlZ29yaXplUnVuVGFnQ29tYmluYXRpb25zKGcsYyxkKS5tYXAobD0+T2JqZWN0LmFzc2lnbih7fSwKbCx7aXRlbXM6W10uY29uY2F0LmFwcGx5KFtdLGwuaXRlbXMubWFwKGYpKX0pKX0sX3RhZ01ldGFkYXRhKGEsYyxkKXtyZXR1cm4gYVtjXVtkXX19KTsKPC9zY3JpcHQ+CjwvZG9tLW1vZHVsZT4KCgoKCgoKCgoKCgoKCjxkb20tbW9kdWxlIGlkPSJpcm9uLWF1dG9ncm93LXRleHRhcmVhIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHdpZHRoOiA0MDBweDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZDsKICAgICAgICBwYWRkaW5nOiAycHg7CiAgICAgICAgLW1vei1hcHBlYXJhbmNlOiB0ZXh0YXJlYTsKICAgICAgICAtd2Via2l0LWFwcGVhcmFuY2U6IHRleHRhcmVhOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC5taXJyb3ItdGV4dCB7CiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuOwogICAgICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDsKICAgICAgICBAYXBwbHkgLS1pcm9uLWF1dG9ncm93LXRleHRhcmVhOwogICAgICB9CgogICAgICAuZml0IHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtZml0OwogICAgICB9CgogICAgICB0ZXh0YXJlYSB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgYm9yZGVyOiBub25lOwogICAgICAgIHJlc2l6ZTogbm9uZTsKICAgICAgICBiYWNrZ3JvdW5kOiBpbmhlcml0OwogICAgICAgIGNvbG9yOiBpbmhlcml0OwogICAgICAgIC8qIHNlZSBjb21tZW50cyBpbiB0ZW1wbGF0ZSAqLwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBmb250LXNpemU6IGluaGVyaXQ7CiAgICAgICAgZm9udC1mYW1pbHk6IGluaGVyaXQ7CiAgICAgICAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7CiAgICAgICAgdGV4dC1hbGlnbjogaW5oZXJpdDsKICAgICAgICBAYXBwbHkgLS1pcm9uLWF1dG9ncm93LXRleHRhcmVhOwogICAgICB9CgogICAgICB0ZXh0YXJlYTo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlciB7CiAgICAgICAgQGFwcGx5IC0taXJvbi1hdXRvZ3Jvdy10ZXh0YXJlYS1wbGFjZWhvbGRlcjsKICAgICAgfQoKICAgICAgdGV4dGFyZWE6LW1vei1wbGFjZWhvbGRlciB7CiAgICAgICAgQGFwcGx5IC0taXJvbi1hdXRvZ3Jvdy10ZXh0YXJlYS1wbGFjZWhvbGRlcjsKICAgICAgfQoKICAgICAgdGV4dGFyZWE6Oi1tb3otcGxhY2Vob2xkZXIgewogICAgICAgIEBhcHBseSAtLWlyb24tYXV0b2dyb3ctdGV4dGFyZWEtcGxhY2Vob2xkZXI7CiAgICAgIH0KCiAgICAgIHRleHRhcmVhOi1tcy1pbnB1dC1wbGFjZWhvbGRlciB7CiAgICAgICAgQGFwcGx5IC0taXJvbi1hdXRvZ3Jvdy10ZXh0YXJlYS1wbGFjZWhvbGRlcjsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICAKICAgIAogICAgPGRpdiBpZD0ibWlycm9yIiBjbGFzcz0ibWlycm9yLXRleHQiIGFyaWEtaGlkZGVuPSJ0cnVlIj4mbmJzcDs8L2Rpdj4KCiAgICAKICAgIDxkaXYgY2xhc3M9InRleHRhcmVhLWNvbnRhaW5lciBmaXQiPgogICAgICA8dGV4dGFyZWEgaWQ9InRleHRhcmVhIiBuYW1lJD0iW1tuYW1lXV0iIGFyaWEtbGFiZWwkPSJbW2xhYmVsXV0iIGF1dG9jb21wbGV0ZSQ9IltbYXV0b2NvbXBsZXRlXV0iIGF1dG9mb2N1cyQ9IltbYXV0b2ZvY3VzXV0iIGlucHV0bW9kZSQ9IltbaW5wdXRtb2RlXV0iIHBsYWNlaG9sZGVyJD0iW1twbGFjZWhvbGRlcl1dIiByZWFkb25seSQ9IltbcmVhZG9ubHldXSIgcmVxdWlyZWQkPSJbW3JlcXVpcmVkXV0iIGRpc2FibGVkJD0iW1tkaXNhYmxlZF1dIiByb3dzJD0iW1tyb3dzXV0iIG1pbmxlbmd0aCQ9IltbbWlubGVuZ3RoXV0iIG1heGxlbmd0aCQ9IltbbWF4bGVuZ3RoXV0iPjwvdGV4dGFyZWE+CiAgICA8L2Rpdj4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+Cgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vaXJvbi1hdXRvZ3Jvdy10ZXh0YXJlYS9pcm9uLWF1dG9ncm93LXRleHRhcmVhLmh0bWwuanMKUG9seW1lcih7aXM6Imlyb24tYXV0b2dyb3ctdGV4dGFyZWEiLGJlaGF2aW9yczpbUG9seW1lci5Jcm9uVmFsaWRhdGFibGVCZWhhdmlvcixQb2x5bWVyLklyb25Db250cm9sU3RhdGVdLHByb3BlcnRpZXM6e3ZhbHVlOntvYnNlcnZlcjoiX3ZhbHVlQ2hhbmdlZCIsdHlwZTpTdHJpbmcsbm90aWZ5OiEwfSxiaW5kVmFsdWU6e29ic2VydmVyOiJfYmluZFZhbHVlQ2hhbmdlZCIsdHlwZTpTdHJpbmcsbm90aWZ5OiEwfSxyb3dzOnt0eXBlOk51bWJlcix2YWx1ZToxLG9ic2VydmVyOiJfdXBkYXRlQ2FjaGVkIn0sbWF4Um93czp7dHlwZTpOdW1iZXIsdmFsdWU6MCxvYnNlcnZlcjoiX3VwZGF0ZUNhY2hlZCJ9LGF1dG9jb21wbGV0ZTp7dHlwZTpTdHJpbmcsdmFsdWU6Im9mZiJ9LGF1dG9mb2N1czp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxpbnB1dG1vZGU6e3R5cGU6U3RyaW5nfSxwbGFjZWhvbGRlcjp7dHlwZTpTdHJpbmd9LHJlYWRvbmx5Ont0eXBlOlN0cmluZ30scmVxdWlyZWQ6e3R5cGU6Qm9vbGVhbn0sCm1pbmxlbmd0aDp7dHlwZTpOdW1iZXJ9LG1heGxlbmd0aDp7dHlwZTpOdW1iZXJ9LGxhYmVsOnt0eXBlOlN0cmluZ319LGxpc3RlbmVyczp7aW5wdXQ6Il9vbklucHV0In0sZ2V0IHRleHRhcmVhKCl7cmV0dXJuIHRoaXMuJC50ZXh0YXJlYX0sZ2V0IHNlbGVjdGlvblN0YXJ0KCl7cmV0dXJuIHRoaXMuJC50ZXh0YXJlYS5zZWxlY3Rpb25TdGFydH0sZ2V0IHNlbGVjdGlvbkVuZCgpe3JldHVybiB0aGlzLiQudGV4dGFyZWEuc2VsZWN0aW9uRW5kfSxzZXQgc2VsZWN0aW9uU3RhcnQoYSl7dGhpcy4kLnRleHRhcmVhLnNlbGVjdGlvblN0YXJ0PWF9LHNldCBzZWxlY3Rpb25FbmQoYSl7dGhpcy4kLnRleHRhcmVhLnNlbGVjdGlvbkVuZD1hfSxhdHRhY2hlZDpmdW5jdGlvbigpe25hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL2lQKD86W29hXWR8aG9uZSkvKSYmKHRoaXMuJC50ZXh0YXJlYS5zdHlsZS5tYXJnaW5MZWZ0PSItM3B4Iil9LHZhbGlkYXRlOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy4kLnRleHRhcmVhLnZhbGlkaXR5LnZhbGlkOwphJiYodGhpcy5yZXF1aXJlZCYmIiI9PT10aGlzLnZhbHVlP2E9ITE6dGhpcy5oYXNWYWxpZGF0b3IoKSYmKGE9UG9seW1lci5Jcm9uVmFsaWRhdGFibGVCZWhhdmlvci52YWxpZGF0ZS5jYWxsKHRoaXMsdGhpcy52YWx1ZSkpKTt0aGlzLmludmFsaWQ9IWE7dGhpcy5maXJlKCJpcm9uLWlucHV0LXZhbGlkYXRlIik7cmV0dXJuIGF9LF9iaW5kVmFsdWVDaGFuZ2VkOmZ1bmN0aW9uKGEpe3RoaXMudmFsdWU9YX0sX3ZhbHVlQ2hhbmdlZDpmdW5jdGlvbihhKXt2YXIgYz10aGlzLnRleHRhcmVhO2MmJihjLnZhbHVlIT09YSYmKGMudmFsdWU9YXx8MD09PWE/YToiIiksdGhpcy5iaW5kVmFsdWU9YSx0aGlzLiQubWlycm9yLmlubmVySFRNTD10aGlzLl92YWx1ZUZvck1pcnJvcigpLHRoaXMuZmlyZSgiYmluZC12YWx1ZS1jaGFuZ2VkIix7dmFsdWU6dGhpcy5iaW5kVmFsdWV9KSl9LF9vbklucHV0OmZ1bmN0aW9uKGEpe3ZhciBjPVBvbHltZXIuZG9tKGEpLnBhdGg7dGhpcy52YWx1ZT1jP2NbMF0udmFsdWU6CmEudGFyZ2V0LnZhbHVlfSxfY29uc3RyYWluOmZ1bmN0aW9uKGEpe2E9YXx8WyIiXTtmb3IoYT0wPHRoaXMubWF4Um93cyYmYS5sZW5ndGg+dGhpcy5tYXhSb3dzP2Euc2xpY2UoMCx0aGlzLm1heFJvd3MpOmEuc2xpY2UoMCk7MDx0aGlzLnJvd3MmJmEubGVuZ3RoPHRoaXMucm93czspYS5wdXNoKCIiKTtyZXR1cm4gYS5qb2luKCJceDNjYnIvXHgzZSIpKyJceDI2IzE2MDsifSxfdmFsdWVGb3JNaXJyb3I6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLnRleHRhcmVhO2lmKGEpcmV0dXJuIHRoaXMudG9rZW5zPWEmJmEudmFsdWU/YS52YWx1ZS5yZXBsYWNlKC8mL2dtLCJceDI2YW1wOyIpLnJlcGxhY2UoLyIvZ20sIlx4MjZxdW90OyIpLnJlcGxhY2UoLycvZ20sIlx4MjYjMzk7IikucmVwbGFjZSgvPC9nbSwiXHgyNmx0OyIpLnJlcGxhY2UoLz4vZ20sIlx4MjZndDsiKS5zcGxpdCgiXG4iKTpbIiJdLHRoaXMuX2NvbnN0cmFpbih0aGlzLnRva2Vucyl9LF91cGRhdGVDYWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLiQubWlycm9yLmlubmVySFRNTD0KdGhpcy5fY29uc3RyYWluKHRoaXMudG9rZW5zKX19KTsKPC9zY3JpcHQ+CgoKCgoKCgoKCjxkb20tbW9kdWxlIGlkPSJwYXBlci10ZXh0YXJlYSI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH0KCiAgICAgIDpob3N0KFtoaWRkZW5dKSB7CiAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgICB9CgogICAgICBsYWJlbCB7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPHBhcGVyLWlucHV0LWNvbnRhaW5lciBuby1sYWJlbC1mbG9hdCQ9Iltbbm9MYWJlbEZsb2F0XV0iIGFsd2F5cy1mbG9hdC1sYWJlbD0iW1tfY29tcHV0ZUFsd2F5c0Zsb2F0TGFiZWwoYWx3YXlzRmxvYXRMYWJlbCxwbGFjZWhvbGRlcildXSIgYXV0by12YWxpZGF0ZSQ9IltbYXV0b1ZhbGlkYXRlXV0iIGRpc2FibGVkJD0iW1tkaXNhYmxlZF1dIiBpbnZhbGlkPSJbW2ludmFsaWRdXSI+CgogICAgICA8bGFiZWwgaGlkZGVuJD0iW1shbGFiZWxdXSIgYXJpYS1oaWRkZW49InRydWUiIGZvciQ9IltbX2lucHV0SWRdXSIgc2xvdD0ibGFiZWwiPltbbGFiZWxdXTwvbGFiZWw+CgogICAgICA8aXJvbi1hdXRvZ3Jvdy10ZXh0YXJlYSBjbGFzcz0icGFwZXItaW5wdXQtaW5wdXQiIHNsb3Q9ImlucHV0IiBpZCQ9IltbX2lucHV0SWRdXSIgYXJpYS1sYWJlbGxlZGJ5JD0iW1tfYXJpYUxhYmVsbGVkQnldXSIgYXJpYS1kZXNjcmliZWRieSQ9IltbX2FyaWFEZXNjcmliZWRCeV1dIiBiaW5kLXZhbHVlPSJ7e3ZhbHVlfX0iIGludmFsaWQ9Int7aW52YWxpZH19IiB2YWxpZGF0b3IkPSJbW3ZhbGlkYXRvcl1dIiBkaXNhYmxlZCQ9IltbZGlzYWJsZWRdXSIgYXV0b2NvbXBsZXRlJD0iW1thdXRvY29tcGxldGVdXSIgYXV0b2ZvY3VzJD0iW1thdXRvZm9jdXNdXSIgaW5wdXRtb2RlJD0iW1tpbnB1dG1vZGVdXSIgbmFtZSQ9IltbbmFtZV1dIiBwbGFjZWhvbGRlciQ9IltbcGxhY2Vob2xkZXJdXSIgcmVhZG9ubHkkPSJbW3JlYWRvbmx5XV0iIHJlcXVpcmVkJD0iW1tyZXF1aXJlZF1dIiBtaW5sZW5ndGgkPSJbW21pbmxlbmd0aF1dIiBtYXhsZW5ndGgkPSJbW21heGxlbmd0aF1dIiBhdXRvY2FwaXRhbGl6ZSQ9IltbYXV0b2NhcGl0YWxpemVdXSIgcm93cyQ9Iltbcm93c11dIiBtYXgtcm93cyQ9IltbbWF4Um93c11dIiBvbi1jaGFuZ2U9Il9vbkNoYW5nZSI+PC9pcm9uLWF1dG9ncm93LXRleHRhcmVhPgoKICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2Vycm9yTWVzc2FnZV1dIj4KICAgICAgICA8cGFwZXItaW5wdXQtZXJyb3IgYXJpYS1saXZlPSJhc3NlcnRpdmUiIHNsb3Q9ImFkZC1vbiI+W1tlcnJvck1lc3NhZ2VdXTwvcGFwZXItaW5wdXQtZXJyb3I+CiAgICAgIDwvdGVtcGxhdGU+CgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbY2hhckNvdW50ZXJdXSI+CiAgICAgICAgPHBhcGVyLWlucHV0LWNoYXItY291bnRlciBzbG90PSJhZGQtb24iPjwvcGFwZXItaW5wdXQtY2hhci1jb3VudGVyPgogICAgICA8L3RlbXBsYXRlPgoKICAgIDwvcGFwZXItaW5wdXQtY29udGFpbmVyPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT4KCjxzY3JpcHQ+Ly9+fldFQlBBVEh+fi9wYXBlci1pbnB1dC9wYXBlci10ZXh0YXJlYS5odG1sLmpzClBvbHltZXIoe2lzOiJwYXBlci10ZXh0YXJlYSIsYmVoYXZpb3JzOltQb2x5bWVyLlBhcGVySW5wdXRCZWhhdmlvcixQb2x5bWVyLklyb25Gb3JtRWxlbWVudEJlaGF2aW9yXSxwcm9wZXJ0aWVzOntfYXJpYUxhYmVsbGVkQnk6e29ic2VydmVyOiJfYXJpYUxhYmVsbGVkQnlDaGFuZ2VkIix0eXBlOlN0cmluZ30sX2FyaWFEZXNjcmliZWRCeTp7b2JzZXJ2ZXI6Il9hcmlhRGVzY3JpYmVkQnlDaGFuZ2VkIix0eXBlOlN0cmluZ30sdmFsdWU6e3R5cGU6U3RyaW5nfSxyb3dzOnt0eXBlOk51bWJlcix2YWx1ZToxfSxtYXhSb3dzOnt0eXBlOk51bWJlcix2YWx1ZTowfX0sZ2V0IHNlbGVjdGlvblN0YXJ0KCl7cmV0dXJuIHRoaXMuJC5pbnB1dC50ZXh0YXJlYS5zZWxlY3Rpb25TdGFydH0sc2V0IHNlbGVjdGlvblN0YXJ0KGEpe3RoaXMuJC5pbnB1dC50ZXh0YXJlYS5zZWxlY3Rpb25TdGFydD1hfSxnZXQgc2VsZWN0aW9uRW5kKCl7cmV0dXJuIHRoaXMuJC5pbnB1dC50ZXh0YXJlYS5zZWxlY3Rpb25FbmR9LApzZXQgc2VsZWN0aW9uRW5kKGEpe3RoaXMuJC5pbnB1dC50ZXh0YXJlYS5zZWxlY3Rpb25FbmQ9YX0sX2FyaWFMYWJlbGxlZEJ5Q2hhbmdlZDpmdW5jdGlvbihhKXt0aGlzLl9mb2N1c2FibGVFbGVtZW50LnNldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbGxlZGJ5IixhKX0sX2FyaWFEZXNjcmliZWRCeUNoYW5nZWQ6ZnVuY3Rpb24oYSl7dGhpcy5fZm9jdXNhYmxlRWxlbWVudC5zZXRBdHRyaWJ1dGUoImFyaWEtZGVzY3JpYmVkYnkiLGEpfSxnZXQgX2ZvY3VzYWJsZUVsZW1lbnQoKXtyZXR1cm4gdGhpcy5pbnB1dEVsZW1lbnQudGV4dGFyZWF9fSk7Cjwvc2NyaXB0PgoKCgoKCgoKCgoKCjxkb20tbW9kdWxlIGlkPSJwYXBlci10b2FzdCI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcG9zaXRpb246IGZpeGVkOwogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLXRvYXN0LWJhY2tncm91bmQtY29sb3IsICMzMjMyMzIpOwogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci10b2FzdC1jb2xvciwgI2YxZjFmMSk7CiAgICAgICAgbWluLWhlaWdodDogNDhweDsKICAgICAgICBtaW4td2lkdGg6IDI4OHB4OwogICAgICAgIHBhZGRpbmc6IDE2cHggMjRweDsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgIGJveC1zaGFkb3c6IDAgMnB4IDVweCAwIHJnYmEoMCwgMCwgMCwgMC4yNik7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMnB4OwogICAgICAgIG1hcmdpbjogMTJweDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICAgIC13ZWJraXQtdHJhbnNpdGlvbjogLXdlYmtpdC10cmFuc2Zvcm0gMC4zcywgb3BhY2l0eSAwLjNzOwogICAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjNzLCBvcGFjaXR5IDAuM3M7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWSgxMDBweCk7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDEwMHB4KTsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1iYXNlOwogICAgICB9CgogICAgICA6aG9zdCguY2Fwc3VsZSkgewogICAgICAgIGJvcmRlci1yYWRpdXM6IDI0cHg7CiAgICAgIH0KCiAgICAgIDpob3N0KC5maXQtYm90dG9tKSB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgbWluLXdpZHRoOiAwOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDA7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICB9CgogICAgICA6aG9zdCgucGFwZXItdG9hc3Qtb3BlbikgewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMHB4KTsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMHB4KTsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8c3BhbiBpZD0ibGFiZWwiPnt7dGV4dH19PC9zcGFuPgogICAgPHNsb3Q+PC9zbG90PgogIDwvdGVtcGxhdGU+CgogIDxzY3JpcHQ+Ly9+fldFQlBBVEh+fi9wYXBlci10b2FzdC9wYXBlci10b2FzdC5odG1sLmpzCihmdW5jdGlvbigpe3ZhciBhPW51bGw7UG9seW1lcih7aXM6InBhcGVyLXRvYXN0IixiZWhhdmlvcnM6W1BvbHltZXIuSXJvbk92ZXJsYXlCZWhhdmlvcl0scHJvcGVydGllczp7Zml0SW50bzp7dHlwZTpPYmplY3QsdmFsdWU6d2luZG93LG9ic2VydmVyOiJfb25GaXRJbnRvQ2hhbmdlZCJ9LGhvcml6b250YWxBbGlnbjp7dHlwZTpTdHJpbmcsdmFsdWU6ImxlZnQifSx2ZXJ0aWNhbEFsaWduOnt0eXBlOlN0cmluZyx2YWx1ZToiYm90dG9tIn0sZHVyYXRpb246e3R5cGU6TnVtYmVyLHZhbHVlOjNFM30sdGV4dDp7dHlwZTpTdHJpbmcsdmFsdWU6IiJ9LG5vQ2FuY2VsT25PdXRzaWRlQ2xpY2s6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMH0sbm9BdXRvRm9jdXM6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMH19LGxpc3RlbmVyczp7dHJhbnNpdGlvbmVuZDoiX19vblRyYW5zaXRpb25FbmQifSxnZXQgdmlzaWJsZSgpe1BvbHltZXIuQmFzZS5fd2FybigiYHZpc2libGVgIGlzIGRlcHJlY2F0ZWQsIHVzZSBgb3BlbmVkYCBpbnN0ZWFkIik7CnJldHVybiB0aGlzLm9wZW5lZH0sZ2V0IF9jYW5BdXRvQ2xvc2UoKXtyZXR1cm4gMDx0aGlzLmR1cmF0aW9uJiZJbmZpbml0eSE9PXRoaXMuZHVyYXRpb259LGNyZWF0ZWQ6ZnVuY3Rpb24oKXt0aGlzLl9hdXRvQ2xvc2U9bnVsbDtQb2x5bWVyLklyb25BMTF5QW5ub3VuY2VyLnJlcXVlc3RBdmFpbGFiaWxpdHkoKX0sc2hvdzpmdW5jdGlvbihjKXsic3RyaW5nIj09dHlwZW9mIGMmJihjPXt0ZXh0OmN9KTtmb3IodmFyIGQgaW4gYykwPT09ZC5pbmRleE9mKCJfIik/UG9seW1lci5CYXNlLl93YXJuKCdUaGUgcHJvcGVydHkgIicrZCsnIiBpcyBwcml2YXRlIGFuZCB3YXMgbm90IHNldC4nKTpkIGluIHRoaXM/dGhpc1tkXT1jW2RdOlBvbHltZXIuQmFzZS5fd2FybignVGhlIHByb3BlcnR5ICInK2QrJyIgaXMgbm90IHZhbGlkLicpO3RoaXMub3BlbigpfSxoaWRlOmZ1bmN0aW9uKCl7dGhpcy5jbG9zZSgpfSxfX29uVHJhbnNpdGlvbkVuZDpmdW5jdGlvbihjKXtjJiZjLnRhcmdldD09PQp0aGlzJiYib3BhY2l0eSI9PT1jLnByb3BlcnR5TmFtZSYmKHRoaXMub3BlbmVkP3RoaXMuX2ZpbmlzaFJlbmRlck9wZW5lZCgpOnRoaXMuX2ZpbmlzaFJlbmRlckNsb3NlZCgpKX0sX29wZW5lZENoYW5nZWQ6ZnVuY3Rpb24oKXtudWxsIT09dGhpcy5fYXV0b0Nsb3NlJiYodGhpcy5jYW5jZWxBc3luYyh0aGlzLl9hdXRvQ2xvc2UpLHRoaXMuX2F1dG9DbG9zZT1udWxsKTt0aGlzLm9wZW5lZD8oYSYmYSE9PXRoaXMmJmEuY2xvc2UoKSxhPXRoaXMsdGhpcy5maXJlKCJpcm9uLWFubm91bmNlIix7dGV4dDp0aGlzLnRleHR9KSx0aGlzLl9jYW5BdXRvQ2xvc2UmJih0aGlzLl9hdXRvQ2xvc2U9dGhpcy5hc3luYyh0aGlzLmNsb3NlLHRoaXMuZHVyYXRpb24pKSk6YT09PXRoaXMmJihhPW51bGwpO1BvbHltZXIuSXJvbk92ZXJsYXlCZWhhdmlvckltcGwuX29wZW5lZENoYW5nZWQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxfcmVuZGVyT3BlbmVkOmZ1bmN0aW9uKCl7dGhpcy5jbGFzc0xpc3QuYWRkKCJwYXBlci10b2FzdC1vcGVuIil9LApfcmVuZGVyQ2xvc2VkOmZ1bmN0aW9uKCl7dGhpcy5jbGFzc0xpc3QucmVtb3ZlKCJwYXBlci10b2FzdC1vcGVuIil9LF9vbkZpdEludG9DaGFuZ2VkOmZ1bmN0aW9uKGMpe3RoaXMucG9zaXRpb25UYXJnZXQ9Y319KX0pKCk7Cjwvc2NyaXB0Pgo8L2RvbS1tb2R1bGU+CgoKCgoKCgoKCgoKCgoKCgoKPGRvbS1tb2R1bGUgaWQ9InBhcGVyLXRvZ2dsZS1idXR0b24iPgogIDx0ZW1wbGF0ZSBzdHJpcC13aGl0ZXNwYWNlPgoKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtaG9yaXpvbnRhbDsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtY2VudGVyOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLWJhc2U7CiAgICAgIH0KCiAgICAgIDpob3N0KFtkaXNhYmxlZF0pIHsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQoKICAgICAgOmhvc3QoOmZvY3VzKSB7CiAgICAgICAgb3V0bGluZTpub25lOwogICAgICB9CgogICAgICAudG9nZ2xlLWJhciB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgb3BhY2l0eTogMC40OwogICAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgbGluZWFyIC4wOHM7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItdG9nZ2xlLWJ1dHRvbi11bmNoZWNrZWQtYmFyLWNvbG9yLCAjMDAwMDAwKTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItdG9nZ2xlLWJ1dHRvbi11bmNoZWNrZWQtYmFyOwogICAgICB9CgogICAgICAudG9nZ2xlLWJ1dHRvbiB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogLTNweDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIGhlaWdodDogMjBweDsKICAgICAgICB3aWR0aDogMjBweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICAgICAgYm94LXNoYWRvdzogMCAxcHggNXB4IDAgcmdiYSgwLCAwLCAwLCAwLjYpOwogICAgICAgIHRyYW5zaXRpb246IC13ZWJraXQtdHJhbnNmb3JtIGxpbmVhciAuMDhzLCBiYWNrZ3JvdW5kLWNvbG9yIGxpbmVhciAuMDhzOwogICAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSBsaW5lYXIgLjA4cywgYmFja2dyb3VuZC1jb2xvciBsaW5lYXIgLjA4czsKICAgICAgICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtOwogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLXRvZ2dsZS1idXR0b24tdW5jaGVja2VkLWJ1dHRvbi1jb2xvciwgdmFyKC0tcGFwZXItZ3JleS01MCkpOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci10b2dnbGUtYnV0dG9uLXVuY2hlY2tlZC1idXR0b247CiAgICAgIH0KCiAgICAgIC50b2dnbGUtYnV0dG9uLmRyYWdnaW5nIHsKICAgICAgICAtd2Via2l0LXRyYW5zaXRpb246IG5vbmU7CiAgICAgICAgdHJhbnNpdGlvbjogbm9uZTsKICAgICAgfQoKICAgICAgOmhvc3QoW2NoZWNrZWRdOm5vdChbZGlzYWJsZWRdKSkgLnRvZ2dsZS1iYXIgewogICAgICAgIG9wYWNpdHk6IDAuNTsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci10b2dnbGUtYnV0dG9uLWNoZWNrZWQtYmFyLWNvbG9yLCB2YXIoLS1wcmltYXJ5LWNvbG9yKSk7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLXRvZ2dsZS1idXR0b24tY2hlY2tlZC1iYXI7CiAgICAgIH0KCiAgICAgIDpob3N0KFtkaXNhYmxlZF0pIC50b2dnbGUtYmFyIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwOwogICAgICAgIG9wYWNpdHk6IDAuMTI7CiAgICAgIH0KCiAgICAgIDpob3N0KFtjaGVja2VkXSkgLnRvZ2dsZS1idXR0b24gewogICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUoMTZweCwgMCk7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMTZweCwgMCk7CiAgICAgIH0KCiAgICAgIDpob3N0KFtjaGVja2VkXTpub3QoW2Rpc2FibGVkXSkpIC50b2dnbGUtYnV0dG9uIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci10b2dnbGUtYnV0dG9uLWNoZWNrZWQtYnV0dG9uLWNvbG9yLCB2YXIoLS1wcmltYXJ5LWNvbG9yKSk7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLXRvZ2dsZS1idXR0b24tY2hlY2tlZC1idXR0b247CiAgICAgIH0KCiAgICAgIDpob3N0KFtkaXNhYmxlZF0pIC50b2dnbGUtYnV0dG9uIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjYmRiZGJkOwogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgIH0KCiAgICAgIC50b2dnbGUtaW5rIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAtMTRweDsKICAgICAgICBsZWZ0OiAtMTRweDsKICAgICAgICByaWdodDogYXV0bzsKICAgICAgICBib3R0b206IGF1dG87CiAgICAgICAgd2lkdGg6IDQ4cHg7CiAgICAgICAgaGVpZ2h0OiA0OHB4OwogICAgICAgIG9wYWNpdHk6IDAuNTsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItdG9nZ2xlLWJ1dHRvbi11bmNoZWNrZWQtaW5rLWNvbG9yLCB2YXIoLS1wcmltYXJ5LXRleHQtY29sb3IpKTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItdG9nZ2xlLWJ1dHRvbi11bmNoZWNrZWQtaW5rOwogICAgICB9CgogICAgICA6aG9zdChbY2hlY2tlZF0pIC50b2dnbGUtaW5rIHsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItdG9nZ2xlLWJ1dHRvbi1jaGVja2VkLWluay1jb2xvciwgdmFyKC0tcHJpbWFyeS1jb2xvcikpOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci10b2dnbGUtYnV0dG9uLWNoZWNrZWQtaW5rOwogICAgICB9CgogICAgICAudG9nZ2xlLWNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB3aWR0aDogMzZweDsKICAgICAgICBoZWlnaHQ6IDE0cHg7CiAgICAgICAgLyogVGhlIHRvZ2dsZSBidXR0b24gaGFzIGFuIGFic29sdXRlIHBvc2l0aW9uIG9mIC0zcHg7IFRoZSBleHRyYSAxcHgKICAgICAgICAvKiBhY2NvdW50cyBmb3IgdGhlIHRvZ2dsZSBidXR0b24gc2hhZG93IGJveC4gKi8KICAgICAgICBtYXJnaW46IDRweCAxcHg7CiAgICAgIH0KCiAgICAgIC50b2dnbGUtbGFiZWwgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKICAgICAgICBwYWRkaW5nLWxlZnQ6IHZhcigtLXBhcGVyLXRvZ2dsZS1idXR0b24tbGFiZWwtc3BhY2luZywgOHB4KTsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItdG9nZ2xlLWJ1dHRvbi1sYWJlbC1jb2xvciwgdmFyKC0tcHJpbWFyeS10ZXh0LWNvbG9yKSk7CiAgICAgIH0KCiAgICAgIC8qIGludmFsaWQgc3RhdGUgKi8KICAgICAgOmhvc3QoW2ludmFsaWRdKSAudG9nZ2xlLWJhciB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItdG9nZ2xlLWJ1dHRvbi1pbnZhbGlkLWJhci1jb2xvciwgdmFyKC0tZXJyb3ItY29sb3IpKTsKICAgICAgfQoKICAgICAgOmhvc3QoW2ludmFsaWRdKSAudG9nZ2xlLWJ1dHRvbiB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItdG9nZ2xlLWJ1dHRvbi1pbnZhbGlkLWJ1dHRvbi1jb2xvciwgdmFyKC0tZXJyb3ItY29sb3IpKTsKICAgICAgfQoKICAgICAgOmhvc3QoW2ludmFsaWRdKSAudG9nZ2xlLWluayB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLXRvZ2dsZS1idXR0b24taW52YWxpZC1pbmstY29sb3IsIHZhcigtLWVycm9yLWNvbG9yKSk7CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPGRpdiBjbGFzcz0idG9nZ2xlLWNvbnRhaW5lciI+CiAgICAgIDxkaXYgaWQ9InRvZ2dsZUJhciIgY2xhc3M9InRvZ2dsZS1iYXIiPjwvZGl2PgogICAgICA8ZGl2IGlkPSJ0b2dnbGVCdXR0b24iIGNsYXNzPSJ0b2dnbGUtYnV0dG9uIj48L2Rpdj4KICAgIDwvZGl2PgoKICAgIDxkaXYgY2xhc3M9InRvZ2dsZS1sYWJlbCI+PHNsb3Q+PC9zbG90PjwvZGl2PgoKICA8L3RlbXBsYXRlPgoKICA8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vcGFwZXItdG9nZ2xlLWJ1dHRvbi9wYXBlci10b2dnbGUtYnV0dG9uLmh0bWwuanMKUG9seW1lcih7aXM6InBhcGVyLXRvZ2dsZS1idXR0b24iLGJlaGF2aW9yczpbUG9seW1lci5QYXBlckNoZWNrZWRFbGVtZW50QmVoYXZpb3JdLGhvc3RBdHRyaWJ1dGVzOntyb2xlOiJidXR0b24iLCJhcmlhLXByZXNzZWQiOiJmYWxzZSIsdGFiaW5kZXg6MH0scHJvcGVydGllczp7fSxsaXN0ZW5lcnM6e3RyYWNrOiJfb250cmFjayJ9LGF0dGFjaGVkOmZ1bmN0aW9uKCl7UG9seW1lci5SZW5kZXJTdGF0dXMuYWZ0ZXJOZXh0UmVuZGVyKHRoaXMsZnVuY3Rpb24oKXtQb2x5bWVyLkdlc3R1cmVzLnNldFRvdWNoQWN0aW9uKHRoaXMsInBhbi15Iil9KX0sX29udHJhY2s6ZnVuY3Rpb24oYSl7YT1hLmRldGFpbDsic3RhcnQiPT09YS5zdGF0ZT90aGlzLl90cmFja1N0YXJ0KGEpOiJ0cmFjayI9PT1hLnN0YXRlP3RoaXMuX3RyYWNrTW92ZShhKToiZW5kIj09PWEuc3RhdGUmJnRoaXMuX3RyYWNrRW5kKGEpfSxfdHJhY2tTdGFydDpmdW5jdGlvbigpe3RoaXMuX3dpZHRoPXRoaXMuJC50b2dnbGVCYXIub2Zmc2V0V2lkdGgvCjI7dGhpcy5fdHJhY2tDaGVja2VkPXRoaXMuY2hlY2tlZDt0aGlzLiQudG9nZ2xlQnV0dG9uLmNsYXNzTGlzdC5hZGQoImRyYWdnaW5nIil9LF90cmFja01vdmU6ZnVuY3Rpb24oYSl7YT1hLmR4O3RoaXMuX3g9TWF0aC5taW4odGhpcy5fd2lkdGgsTWF0aC5tYXgoMCx0aGlzLl90cmFja0NoZWNrZWQ/dGhpcy5fd2lkdGgrYTphKSk7dGhpcy50cmFuc2xhdGUzZCh0aGlzLl94KyJweCIsMCwwLHRoaXMuJC50b2dnbGVCdXR0b24pO3RoaXMuX3VzZXJBY3RpdmF0ZSh0aGlzLl94PnRoaXMuX3dpZHRoLzIpfSxfdHJhY2tFbmQ6ZnVuY3Rpb24oKXt0aGlzLiQudG9nZ2xlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoImRyYWdnaW5nIik7dGhpcy50cmFuc2Zvcm0oIiIsdGhpcy4kLnRvZ2dsZUJ1dHRvbil9LF9jcmVhdGVSaXBwbGU6ZnVuY3Rpb24oKXt0aGlzLl9yaXBwbGVDb250YWluZXI9dGhpcy4kLnRvZ2dsZUJ1dHRvbjt2YXIgYT1Qb2x5bWVyLlBhcGVyUmlwcGxlQmVoYXZpb3IuX2NyZWF0ZVJpcHBsZSgpOwphLmlkPSJpbmsiO2Euc2V0QXR0cmlidXRlKCJyZWNlbnRlcnMiLCIiKTthLmNsYXNzTGlzdC5hZGQoImNpcmNsZSIsInRvZ2dsZS1pbmsiKTtyZXR1cm4gYX19KTsKPC9zY3JpcHQ+CjwvZG9tLW1vZHVsZT4KCgoKCgoKCgoKCgoKCgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdGYtZ3JhcGgtY29tbW9uL2Fubm90YXRpb24uanMKdmFyIHRmOwooZnVuY3Rpb24oYSl7KGZ1bmN0aW9uKGMpeyhmdW5jdGlvbihkKXsoZnVuY3Rpb24oZil7ZnVuY3Rpb24gZyhyKXtyZXR1cm4oYy5yZW5kZXIuQW5ub3RhdGlvblR5cGVbcl18fCIiKS50b0xvd2VyQ2FzZSgpfHxudWxsfWZ1bmN0aW9uIGwocix0KXt0LmFubm90YXRpb25UeXBlPT09Yy5yZW5kZXIuQW5ub3RhdGlvblR5cGUuU1VNTUFSWT9kLnNlbGVjdE9yQ3JlYXRlQ2hpbGQociwidXNlIikuYXR0cigiY2xhc3MiLCJzdW1tYXJ5IikuYXR0cigieGxpbms6aHJlZiIsIiNzdW1tYXJ5LWljb24iKS5hdHRyKCJjdXJzb3IiLCJwb2ludGVyIik6KHI9ZC5ub2RlLmJ1aWxkU2hhcGUocix0LGQuQ2xhc3MuQW5ub3RhdGlvbi5OT0RFKSxkLnNlbGVjdE9yQ3JlYXRlQ2hpbGQociwidGl0bGUiKS50ZXh0KHQubm9kZS5uYW1lKSl9ZnVuY3Rpb24gayhyLHQpe2xldCB2PXQubm9kZS5uYW1lLnNwbGl0KCIvIik7cmV0dXJuIG0ocix2W3YubGVuZ3RoLTFdLHQsbnVsbCl9ZnVuY3Rpb24gbShyLHQsCnYsQSl7bGV0IHk9ZC5DbGFzcy5Bbm5vdGF0aW9uLkxBQkVMO0EmJih5Kz0iICIrQSk7cj1yLmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIix5KS5hdHRyKCJkeSIsIi4zNWVtIikuYXR0cigidGV4dC1hbmNob3IiLHYuaXNJbj8iZW5kIjoic3RhcnQiKS50ZXh0KHQpO3JldHVybiBhLmdyYXBoLnNjZW5lLm5vZGUuZW5mb3JjZUxhYmVsV2lkdGgociwtMSl9ZnVuY3Rpb24gcChyLHQsdixBKXtyLm9uKCJtb3VzZW92ZXIiLHk9PntBLmZpcmUoImFubm90YXRpb24taGlnaGxpZ2h0Iix7bmFtZTp5Lm5vZGUubmFtZSxob3N0TmFtZTp0Lm5vZGUubmFtZX0pfSkub24oIm1vdXNlb3V0Iix5PT57QS5maXJlKCJhbm5vdGF0aW9uLXVuaGlnaGxpZ2h0Iix7bmFtZTp5Lm5vZGUubmFtZSxob3N0TmFtZTp0Lm5vZGUubmFtZX0pfSkub24oImNsaWNrIix5PT57ZDMuZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7QS5maXJlKCJhbm5vdGF0aW9uLXNlbGVjdCIse25hbWU6eS5ub2RlLm5hbWUsaG9zdE5hbWU6dC5ub2RlLm5hbWV9KX0pOwppZih2LmFubm90YXRpb25UeXBlIT09Yy5yZW5kZXIuQW5ub3RhdGlvblR5cGUuU1VNTUFSWSYmdi5hbm5vdGF0aW9uVHlwZSE9PWMucmVuZGVyLkFubm90YXRpb25UeXBlLkNPTlNUQU5UKXIub24oImNvbnRleHRtZW51IixkLmNvbnRleHRtZW51LmdldE1lbnUoQSxkLm5vZGUuZ2V0Q29udGV4dE1lbnUodi5ub2RlLEEpKSl9ZnVuY3Rpb24gcShyLHQsdixBKXtsZXQgeT1jLmxheW91dC5jb21wdXRlQ1hQb3NpdGlvbk9mTm9kZVNoYXBlKHQpO3YucmVuZGVyTm9kZUluZm8mJnYuYW5ub3RhdGlvblR5cGUhPT1jLnJlbmRlci5Bbm5vdGF0aW9uVHlwZS5FTExJUFNJUyYmZC5ub2RlLnN0eWxpemUocix2LnJlbmRlck5vZGVJbmZvLEEsZC5DbGFzcy5Bbm5vdGF0aW9uLk5PREUpO3YuYW5ub3RhdGlvblR5cGU9PT1jLnJlbmRlci5Bbm5vdGF0aW9uVHlwZS5TVU1NQVJZJiYodi53aWR0aCs9MTApO3Iuc2VsZWN0KCJ0ZXh0LiIrZC5DbGFzcy5Bbm5vdGF0aW9uLkxBQkVMKS50cmFuc2l0aW9uKCkuYXR0cigieCIsCnkrdi5keCsodi5pc0luPy0xOjEpKih2LndpZHRoLzIrdi5sYWJlbE9mZnNldCkpLmF0dHIoInkiLHQueSt2LmR5KTtyLnNlbGVjdCgidXNlLnN1bW1hcnkiKS50cmFuc2l0aW9uKCkuYXR0cigieCIseSt2LmR4LTMpLmF0dHIoInkiLHQueSt2LmR5LTYpO2QucG9zaXRpb25FbGxpcHNlKHIuc2VsZWN0KCIuIitkLkNsYXNzLkFubm90YXRpb24uTk9ERSsiIGVsbGlwc2UiKSx5K3YuZHgsdC55K3YuZHksdi53aWR0aCx2LmhlaWdodCk7ZC5wb3NpdGlvblJlY3Qoci5zZWxlY3QoIi4iK2QuQ2xhc3MuQW5ub3RhdGlvbi5OT0RFKyIgcmVjdCIpLHkrdi5keCx0Lnkrdi5keSx2LndpZHRoLHYuaGVpZ2h0KTtkLnBvc2l0aW9uUmVjdChyLnNlbGVjdCgiLiIrZC5DbGFzcy5Bbm5vdGF0aW9uLk5PREUrIiB1c2UiKSx5K3YuZHgsdC55K3YuZHksdi53aWR0aCx2LmhlaWdodCk7ci5zZWxlY3QoInBhdGguIitkLkNsYXNzLkFubm90YXRpb24uRURHRSkudHJhbnNpdGlvbigpLmF0dHIoImQiLHg9Pgp7eD14LnBvaW50cy5tYXAoQz0+KHt4OkMuZHgreSx5OkMuZHkrdC55fSkpO3JldHVybiBkLmVkZ2UuaW50ZXJwb2xhdGUoeCl9KX1mLmJ1aWxkR3JvdXA9ZnVuY3Rpb24ocix0LHYsQSl7cj1yLnNlbGVjdEFsbChmdW5jdGlvbigpe3JldHVybiB0aGlzLmNoaWxkTm9kZXN9KS5kYXRhKHQubGlzdCx5PT55Lm5vZGUubmFtZSk7ci5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImRhdGEtbmFtZSIseT0+eS5ub2RlLm5hbWUpLmVhY2goZnVuY3Rpb24oeSl7bGV0IHg9ZDMuc2VsZWN0KHRoaXMpO0EuYWRkQW5ub3RhdGlvbkdyb3VwKHksdix4KTtsZXQgQz1kLkNsYXNzLkFubm90YXRpb24uRURHRSxGPXkucmVuZGVyTWV0YWVkZ2VJbmZvJiZ5LnJlbmRlck1ldGFlZGdlSW5mby5tZXRhZWRnZTtGJiYhRi5udW1SZWd1bGFyRWRnZXMmJihDKz0iICIrZC5DbGFzcy5Bbm5vdGF0aW9uLkNPTlRST0xfRURHRSk7RiYmRi5udW1SZWZFZGdlcyYmKEMrPSIgIitkLkNsYXNzLkVkZ2UuUkVGX0xJTkUpOwpkLmVkZ2UuYXBwZW5kRWRnZSh4LHksQSxDKTt5LmFubm90YXRpb25UeXBlIT09Yy5yZW5kZXIuQW5ub3RhdGlvblR5cGUuRUxMSVBTSVM/KGsoeCx5KSxsKHgseSkpOm0oeCx5Lm5vZGUubmFtZSx5LGQuQ2xhc3MuQW5ub3RhdGlvbi5FTExJUFNJUyl9KS5tZXJnZShyKS5hdHRyKCJjbGFzcyIseT0+ZC5DbGFzcy5Bbm5vdGF0aW9uLkdST1VQKyIgIitnKHkuYW5ub3RhdGlvblR5cGUpKyIgIitkLm5vZGUubm9kZUNsYXNzKHkpKS5lYWNoKGZ1bmN0aW9uKHkpe2xldCB4PWQzLnNlbGVjdCh0aGlzKTtxKHgsdix5LEEpO3kuYW5ub3RhdGlvblR5cGUhPT1jLnJlbmRlci5Bbm5vdGF0aW9uVHlwZS5FTExJUFNJUyYmcCh4LHYseSxBKX0pO3IuZXhpdCgpLmVhY2goZnVuY3Rpb24oeSl7bGV0IHg9ZDMuc2VsZWN0KHRoaXMpO0EucmVtb3ZlQW5ub3RhdGlvbkdyb3VwKHksdix4KX0pLnJlbW92ZSgpO3JldHVybiByfX0pKGQuYW5ub3RhdGlvbnx8KGQuYW5ub3RhdGlvbj17fSkpfSkoYy5zY2VuZXx8CihjLnNjZW5lPXt9KSl9KShhLmdyYXBofHwoYS5ncmFwaD17fSkpfSkodGZ8fCh0Zj17fSkpOwo8L3NjcmlwdD4KPHNjcmlwdD4vL35+V0VCUEFUSH5+L3RmLWdyYXBoLWNvbW1vbi9jb2xvcnMuanMKKGZ1bmN0aW9uKGEpe2EuQ09MT1JTPVt7bmFtZToiR29vZ2xlIEJsdWUiLGNvbG9yOiIjNDE4NGYzIixhY3RpdmU6IiMzYTUzYzUiLGRpc2FibGVkOiIjY2FkOGZjIn0se25hbWU6Ikdvb2dsZSBSZWQiLGNvbG9yOiIjZGI0NDM3IixhY3RpdmU6IiM4ZjJhMGMiLGRpc2FibGVkOiIjZThjNmMxIn0se25hbWU6Ikdvb2dsZSBZZWxsb3ciLGNvbG9yOiIjZjRiNDAwIixhY3RpdmU6IiNkYjkyMDAiLGRpc2FibGVkOiIjZjdlOGIwIn0se25hbWU6Ikdvb2dsZSBHcmVlbiIsY29sb3I6IiMwZjlkNTgiLGFjdGl2ZToiIzQ4ODA0NiIsZGlzYWJsZWQ6IiNjMmUxY2MifSx7bmFtZToiUHVycGxlIixjb2xvcjoiI2FhNDZiYiIsYWN0aXZlOiIjNWMxMzk4IixkaXNhYmxlZDoiI2Q3YmNlNiJ9LHtuYW1lOiJUZWFsIixjb2xvcjoiIzAwYWJjMCIsYWN0aXZlOiIjNDc4MjhlIixkaXNhYmxlZDoiI2MyZWFmMiJ9LHtuYW1lOiJEZWVwIE9yYW5nZSIsY29sb3I6IiNmZjZmNDIiLGFjdGl2ZToiI2NhNGEwNiIsCmRpc2FibGVkOiIjZjJjYmJhIn0se25hbWU6IkxpbWUiLGNvbG9yOiIjOWQ5YzIzIixhY3RpdmU6IiM3Zjc3MWQiLGRpc2FibGVkOiIjZjFmNGMyIn0se25hbWU6IkluZGlnbyIsY29sb3I6IiM1YjZhYmYiLGFjdGl2ZToiIzNlNDdhOSIsZGlzYWJsZWQ6IiNjNWM4ZTgifSx7bmFtZToiUGluayIsY29sb3I6IiNlZjYxOTEiLGFjdGl2ZToiI2NhMWM2MCIsZGlzYWJsZWQ6IiNlOWI5Y2UifSx7bmFtZToiRGVlcCBUZWFsIixjb2xvcjoiIzAwNzg2YSIsYWN0aXZlOiIjMmI0ZjQzIixkaXNhYmxlZDoiI2JlZGVkYSJ9LHtuYW1lOiJEZWVwIFBpbmsiLGNvbG9yOiIjYzExNzVhIixhY3RpdmU6IiM3NTA4NGYiLGRpc2FibGVkOiIjZGU4Y2FlIn0se25hbWU6IkdyYXkiLGNvbG9yOiIjOUU5RTlFIixhY3RpdmU6IiM0MjQyNDIiLGRpc2FibGVkOiJGNUY1RjUifV0ucmVkdWNlKChjLGQpPT57Y1tkLm5hbWVdPWQ7cmV0dXJuIGN9LHt9KTthLk9QX0dST1VQX0NPTE9SUz1be2NvbG9yOiJHb29nbGUgUmVkIiwKZ3JvdXBzOiJnZW5fbGVnYWN5X29wcyBsZWdhY3lfb3BzIGxlZ2FjeV9mbG9nc19pbnB1dCBsZWdhY3lfaW1hZ2VfaW5wdXQgbGVnYWN5X2lucHV0X2V4YW1wbGVfaW5wdXQgbGVnYWN5X3NlcXVlbmNlX2lucHV0IGxlZ2FjeV9zZXRpX2lucHV0X2lucHV0Ii5zcGxpdCgiICIpfSx7Y29sb3I6IkRlZXAgT3JhbmdlIixncm91cHM6WyJjb25zdGFudF9vcHMiXX0se2NvbG9yOiJJbmRpZ28iLGdyb3VwczpbInN0YXRlX29wcyJdfSx7Y29sb3I6IlB1cnBsZSIsZ3JvdXBzOlsibm5fb3BzIiwibm4iXX0se2NvbG9yOiJHb29nbGUgR3JlZW4iLGdyb3VwczpbIm1hdGhfb3BzIl19LHtjb2xvcjoiTGltZSIsZ3JvdXBzOlsiYXJyYXlfb3BzIl19LHtjb2xvcjoiVGVhbCIsZ3JvdXBzOlsiY29udHJvbF9mbG93X29wcyIsImRhdGFfZmxvd19vcHMiXX0se2NvbG9yOiJQaW5rIixncm91cHM6WyJzdW1tYXJ5X29wcyJdfSx7Y29sb3I6IkRlZXAgUGluayIsZ3JvdXBzOlsiaW9fb3BzIl19XS5yZWR1Y2UoKGMsCmQpPT57ZC5ncm91cHMuZm9yRWFjaChmdW5jdGlvbihmKXtjW2ZdPWQuY29sb3J9KTtyZXR1cm4gY30se30pfSkodGZ8fCh0Zj17fSkpOwo8L3NjcmlwdD4KPHNjcmlwdD4vL35+V0VCUEFUSH5+L3RmLWdyYXBoLWNvbW1vbi9jb21tb24uanMKKGZ1bmN0aW9uKGEpeyhmdW5jdGlvbihjKXsoZnVuY3Rpb24oZCl7ZC5PUF9HUkFQSD0ib3BfZ3JhcGgiO2QuQ09OQ0VQVFVBTF9HUkFQSD0iY29uY2VwdHVhbF9ncmFwaCI7ZC5QUk9GSUxFPSJwcm9maWxlIn0pKGMuU2VsZWN0aW9uVHlwZXx8KGMuU2VsZWN0aW9uVHlwZT17fSkpfSkoYS5ncmFwaHx8KGEuZ3JhcGg9e30pKX0pKHRmfHwodGY9e30pKTsKPC9zY3JpcHQ+CjxzY3JpcHQ+Ly9+fldFQlBBVEh+fi90Zi1ncmFwaC1jb21tb24vY29udGV4dG1lbnUuanMKKGZ1bmN0aW9uKGEpeyhmdW5jdGlvbihjKXsoZnVuY3Rpb24oZCl7KGZ1bmN0aW9uKGYpe2Z1bmN0aW9uIGcobCl7bGV0IGs9MCxtPTA7Zm9yKDtsJiYwPD1sLm9mZnNldExlZnQmJjA8PWwub2Zmc2V0VG9wOylrKz1sLm9mZnNldExlZnQtbC5zY3JvbGxMZWZ0LG0rPWwub2Zmc2V0VG9wLWwuc2Nyb2xsVG9wLGw9bC5vZmZzZXRQYXJlbnQ7cmV0dXJue2xlZnQ6ayx0b3A6bX19Zi5nZXRNZW51PWZ1bmN0aW9uKGwsayl7Y29uc3QgbT1sLmdldENvbnRleHRNZW51KCkscD1kMy5zZWxlY3QobC5nZXRDb250ZXh0TWVudSgpKTtyZXR1cm4gZnVuY3Rpb24ocSxyKXtmdW5jdGlvbiB0KHkpe3kmJnkuY29tcG9zZWRQYXRoKCkuaW5jbHVkZXMobSl8fChwLnN0eWxlKCJkaXNwbGF5Iiwibm9uZSIpLGRvY3VtZW50LmJvZHkucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIix0LHtjYXB0dXJlOiEwfSkpfWxldCB2PWQzLmV2ZW50O2NvbnN0IEE9ZyhsKTtwLnN0eWxlKCJkaXNwbGF5IiwiYmxvY2siKS5zdHlsZSgibGVmdCIsCnYuY2xpZW50WC1BLmxlZnQrMSsicHgiKS5zdHlsZSgidG9wIix2LmNsaWVudFktQS50b3ArMSsicHgiKTt2LnByZXZlbnREZWZhdWx0KCk7di5zdG9wUHJvcGFnYXRpb24oKTtkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsdCx7Y2FwdHVyZTohMH0pO3AuaHRtbCgiIik7cC5hcHBlbmQoInVsIikuc2VsZWN0QWxsKCJsaSIpLmRhdGEoaykuZW50ZXIoKS5hcHBlbmQoImxpIikub24oImNsaWNrIix5PT57eS5hY3Rpb24odGhpcyxxLHIpO3QoKX0pLmh0bWwoZnVuY3Rpb24oeSl7cmV0dXJuIHkudGl0bGUocSl9KX19fSkoZC5jb250ZXh0bWVudXx8KGQuY29udGV4dG1lbnU9e30pKX0pKGMuc2NlbmV8fChjLnNjZW5lPXt9KSl9KShhLmdyYXBofHwoYS5ncmFwaD17fSkpfSkodGZ8fCh0Zj17fSkpOwo8L3NjcmlwdD4KPHNjcmlwdD4vL35+V0VCUEFUSH5+L3RmLWdyYXBoLWNvbW1vbi9lZGdlLmpzCihmdW5jdGlvbihhKXsoZnVuY3Rpb24oYyl7KGZ1bmN0aW9uKGQpeyhmdW5jdGlvbihmKXtmdW5jdGlvbiBnKHkpe3JldHVybiB5LnYrYy5FREdFX0tFWV9ERUxJTSt5Lnd9ZnVuY3Rpb24gbCh5LHgpe3g9eC5nZXROb2RlQnlOYW1lKHkudik7aWYobnVsbD09eC5vdXRwdXRTaGFwZXN8fF8uaXNFbXB0eSh4Lm91dHB1dFNoYXBlcykpcmV0dXJuIG51bGw7eT14Lm91dHB1dFNoYXBlc1t5Lm91dHB1dFRlbnNvcktleV07cmV0dXJuIG51bGw9PXk/bnVsbDowPT09eS5sZW5ndGg/InNjYWxhciI6eS5tYXAoQz0+LTE9PT1DPyI/IjpDKS5qb2luKCJcdTAwZDciKX1mdW5jdGlvbiBrKHkseCl7cmV0dXJuIHguZWRnZUxhYmVsRnVuY3Rpb24/eC5lZGdlTGFiZWxGdW5jdGlvbih5LHgpOjE8eS5iYXNlRWRnZUxpc3QubGVuZ3RoP3kuYmFzZUVkZ2VMaXN0Lmxlbmd0aCsiIHRlbnNvcnMiOmwoeS5iYXNlRWRnZUxpc3RbMF0seCl9ZnVuY3Rpb24gbSh5LHgsQyl7Y29uc3QgRj1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoYS5ncmFwaC5zY2VuZS5TVkdfTkFNRVNQQUNFLAoicGF0aCIpO2ZvcihsZXQgRD0xO0Q8eS5sZW5ndGg7RCsrKWlmKEYuc2V0QXR0cmlidXRlKCJkIixDKHkuc2xpY2UoMCxEKSkpLEYuZ2V0VG90YWxMZW5ndGgoKT54KXJldHVybiBELTE7cmV0dXJuIHkubGVuZ3RoLTF9ZnVuY3Rpb24gcCh5LHgsQyl7dmFyIEY9ZDMubGluZSgpLngoSz0+Sy54KS55KEs9PksueSksRD1kMy5zZWxlY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInBhdGgiKSkuYXR0cigiZCIsRih5KSksQj0reC5hdHRyKCJtYXJrZXJXaWR0aCIpLEc9eC5hdHRyKCJ2aWV3Qm94Iikuc3BsaXQoIiAiKS5tYXAoTnVtYmVyKTtHPUdbMl0tR1swXTt4PSt4LmF0dHIoInJlZlgiKTtEPUQubm9kZSgpO2lmKEMpcmV0dXJuIEIqPTEteC9HLEM9RC5nZXRQb2ludEF0TGVuZ3RoKEIpLEY9bSh5LEIsRikseVtGLTFdPXt4OkMueCx5OkMueX0seS5zbGljZShGLTEpO0M9MS14L0c7Qj1ELmdldFRvdGFsTGVuZ3RoKCktQipDO0M9CkQuZ2V0UG9pbnRBdExlbmd0aChCKTtGPW0oeSxCLEYpO3lbRl09e3g6Qy54LHk6Qy55fTtyZXR1cm4geS5zbGljZSgwLEYrMSl9ZnVuY3Rpb24gcSh5LHgsQyxGKXtGPUZ8fGQuQ2xhc3MuRWRnZS5MSU5FO3gubGFiZWwmJngubGFiZWwuc3RydWN0dXJhbCYmKEYrPSIgIitkLkNsYXNzLkVkZ2UuU1RSVUNUVVJBTCk7eC5sYWJlbCYmeC5sYWJlbC5tZXRhZWRnZSYmeC5sYWJlbC5tZXRhZWRnZS5udW1SZWZFZGdlcyYmKEYrPSIgIitkLkNsYXNzLkVkZ2UuUkVGRVJFTkNFX0VER0UpO0MuaGFuZGxlRWRnZVNlbGVjdGVkJiYoRis9IiAiK2QuQ2xhc3MuRWRnZS5TRUxFQ1RBQkxFKTtsZXQgRD0icGF0aF8iK2coeCk7aWYoQy5yZW5kZXJIaWVyYXJjaHkuZWRnZVdpZHRoRnVuY3Rpb24pdmFyIEI9Qy5yZW5kZXJIaWVyYXJjaHkuZWRnZVdpZHRoRnVuY3Rpb24oeCxGKTtlbHNlIEI9MSxudWxsIT14LmxhYmVsJiZudWxsIT14LmxhYmVsLm1ldGFlZGdlJiYoQj14LmxhYmVsLm1ldGFlZGdlLnRvdGFsU2l6ZSksCkI9Qy5yZW5kZXJIaWVyYXJjaHkuZWRnZVdpZHRoU2l6ZWRCYXNlZFNjYWxlKEIpO0Y9eS5hcHBlbmQoInBhdGgiKS5hdHRyKCJpZCIsRCkuYXR0cigiY2xhc3MiLEYpLnN0eWxlKCJzdHJva2Utd2lkdGgiLEIrInB4Iik7eC5sYWJlbCYmeC5sYWJlbC5tZXRhZWRnZSYmKHgubGFiZWwubWV0YWVkZ2UubnVtUmVmRWRnZXM/KEI9YHJlZmVyZW5jZS1hcnJvd2hlYWQtJHtBKEIpfWAsRi5zdHlsZSgibWFya2VyLXN0YXJ0IixgdXJsKCMke0J9KWApLHgubGFiZWwuc3RhcnRNYXJrZXJJZD1CKTooQj1gZGF0YWZsb3ctYXJyb3doZWFkLSR7QShCKX1gLEYuc3R5bGUoIm1hcmtlci1lbmQiLGB1cmwoIyR7Qn0pYCkseC5sYWJlbC5lbmRNYXJrZXJJZD1CKSk7bnVsbCE9eC5sYWJlbCYmbnVsbCE9eC5sYWJlbC5tZXRhZWRnZSYmKHg9ayh4LmxhYmVsLm1ldGFlZGdlLEMucmVuZGVySGllcmFyY2h5KSxudWxsIT14JiZ5LmFwcGVuZCgidGV4dCIpLmFwcGVuZCgidGV4dFBhdGgiKS5hdHRyKCJ4bGluazpocmVmIiwKIiMiK0QpLmF0dHIoInN0YXJ0T2Zmc2V0IiwiNTAlIikuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsImNlbnRyYWwiKS50ZXh0KHgpKX1mdW5jdGlvbiByKHkseCxDLEYsRCl7Rj1DLmxhYmVsO2xldCBCPUYuYWRqb2luaW5nTWV0YWVkZ2UsRz1GLnBvaW50czsoe3NoYWRvd1Jvb3Q6eX09eSk7Qy5sYWJlbC5zdGFydE1hcmtlcklkJiYoRz1wKEcsZDMuc2VsZWN0KHkucXVlcnlTZWxlY3RvcigiIyIrQy5sYWJlbC5zdGFydE1hcmtlcklkKSksITApKTtDLmxhYmVsLmVuZE1hcmtlcklkJiYoRz1wKEcsZDMuc2VsZWN0KHkucXVlcnlTZWxlY3RvcigiIyIrQy5sYWJlbC5lbmRNYXJrZXJJZCkpLCExKSk7aWYoIUIpcmV0dXJuIGQzLmludGVycG9sYXRlKEQsZi5pbnRlcnBvbGF0ZShHKSk7bGV0IEs9Qi5lZGdlR3JvdXAubm9kZSgpLmZpcnN0Q2hpbGQsTD1GLm1ldGFlZGdlLmluYm91bmQ7cmV0dXJuIGZ1bmN0aW9uKCl7bGV0IEo9Sy5nZXRQb2ludEF0TGVuZ3RoKEw/CksuZ2V0VG90YWxMZW5ndGgoKTowKS5tYXRyaXhUcmFuc2Zvcm0oSy5nZXRDVE0oKSkubWF0cml4VHJhbnNmb3JtKHguZ2V0Q1RNKCkuaW52ZXJzZSgpKSxQPUw/MDpHLmxlbmd0aC0xO0dbUF0ueD1KLng7R1tQXS55PUoueTtyZXR1cm4gZi5pbnRlcnBvbGF0ZShHKX19ZnVuY3Rpb24gdCh5LHgpe2QzLnNlbGVjdCh4KS5zZWxlY3QoInBhdGguIitkLkNsYXNzLkVkZ2UuTElORSkudHJhbnNpdGlvbigpLmF0dHJUd2VlbigiZCIsZnVuY3Rpb24oQyxGLEQpe3JldHVybiByKHksdGhpcyxDLEYsRCl9KX1mdW5jdGlvbiB2KHkseCl7eS5jbGFzc2VkKCJmYWRlZCIseC5sYWJlbC5pc0ZhZGVkT3V0KTt4PXgubGFiZWwubWV0YWVkZ2U7eS5zZWxlY3QoInBhdGguIitkLkNsYXNzLkVkZ2UuTElORSkuY2xhc3NlZCgiY29udHJvbC1kZXAiLHgmJiF4Lm51bVJlZ3VsYXJFZGdlcyl9Zi5NSU5fRURHRV9XSURUSD0uNzU7Zi5NQVhfRURHRV9XSURUSD0xMjtmLkVER0VfV0lEVEhfU0laRV9CQVNFRF9TQ0FMRT0KZDMuc2NhbGVQb3coKS5leHBvbmVudCguMykuZG9tYWluKFsxLDVFNl0pLnJhbmdlKFtmLk1JTl9FREdFX1dJRFRILGYuTUFYX0VER0VfV0lEVEhdKS5jbGFtcCghMCk7bGV0IEE9ZDMuc2NhbGVRdWFudGl6ZSgpLmRvbWFpbihbZi5NSU5fRURHRV9XSURUSCxmLk1BWF9FREdFX1dJRFRIXSkucmFuZ2UoWyJzbWFsbCIsIm1lZGl1bSIsImxhcmdlIiwieGxhcmdlIl0pO2YuZ2V0RWRnZUtleT1nO2YuYnVpbGRHcm91cD1mdW5jdGlvbih5LHgsQyl7bGV0IEY9W107Rj1fLnJlZHVjZSh4LmVkZ2VzKCksKEQsQik9PntsZXQgRz14LmVkZ2UoQik7RC5wdXNoKHt2OkIudix3OkIudyxsYWJlbDpHfSk7cmV0dXJuIER9LEYpO3k9ZC5zZWxlY3RPckNyZWF0ZUNoaWxkKHksImciLGQuQ2xhc3MuRWRnZS5DT05UQUlORVIpLnNlbGVjdEFsbChmdW5jdGlvbigpe3JldHVybiB0aGlzLmNoaWxkTm9kZXN9KS5kYXRhKEYsZyk7eS5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIixkLkNsYXNzLkVkZ2UuR1JPVVApLmF0dHIoImRhdGEtZWRnZSIsCmcpLmVhY2goZnVuY3Rpb24oRCl7bGV0IEI9ZDMuc2VsZWN0KHRoaXMpO0QubGFiZWwuZWRnZUdyb3VwPUI7Qy5fZWRnZUdyb3VwSW5kZXhbZyhEKV09QjtpZihDLmhhbmRsZUVkZ2VTZWxlY3RlZClCLm9uKCJjbGljayIsRz0+e2QzLmV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO0MuZmlyZSgiZWRnZS1zZWxlY3QiLHtlZGdlRGF0YTpHLGVkZ2VHcm91cDpCfSl9KTtxKEIsRCxDKX0pLm1lcmdlKHkpLmVhY2goZnVuY3Rpb24oKXt0KEMsdGhpcyl9KS5lYWNoKGZ1bmN0aW9uKEQpe3YoZDMuc2VsZWN0KHRoaXMpLEQsQyl9KTt5LmV4aXQoKS5lYWNoKEQ9PntkZWxldGUgQy5fZWRnZUdyb3VwSW5kZXhbZyhEKV19KS5yZW1vdmUoKTtyZXR1cm4geX07Zi5nZXRMYWJlbEZvckJhc2VFZGdlPWw7Zi5nZXRMYWJlbEZvckVkZ2U9aztmLmFwcGVuZEVkZ2U9cTtmLmludGVycG9sYXRlPWQzLmxpbmUoKS5jdXJ2ZShkMy5jdXJ2ZUJhc2lzKS54KHk9PnkueCkueSh5PT55LnkpfSkoZC5lZGdlfHwoZC5lZGdlPQp7fSkpfSkoYy5zY2VuZXx8KGMuc2NlbmU9e30pKX0pKGEuZ3JhcGh8fChhLmdyYXBoPXt9KSl9KSh0Znx8KHRmPXt9KSk7Cjwvc2NyaXB0Pgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdGYtZ3JhcGgtY29tbW9uL2V4dGVybnMuanMKPC9zY3JpcHQ+CjxzY3JpcHQ+Ly9+fldFQlBBVEh+fi90Zi1ncmFwaC1jb21tb24vZ3JhcGguanMKKGZ1bmN0aW9uKGEpeyhmdW5jdGlvbihjKXtmdW5jdGlvbiBkKEosUCxTLE4sVCl7cmV0dXJuKFM/UysiLyI6IiIpKyhKKygidW5kZWZpbmVkIiE9PXR5cGVvZiBOJiYidW5kZWZpbmVkIiE9PXR5cGVvZiBUPyJbIitOKyItIitUKyJdIjoiIyIpK1ApfWZ1bmN0aW9uIGYoSil7aWYoIUopcmV0dXJuIG51bGw7Zm9yKGxldCBQPTA7UDxKLmxlbmd0aDtQKyspe2xldCB7a2V5OlMsdmFsdWU6Tn09SltQXTtpZigiX291dHB1dF9zaGFwZXMiPT09Uyl7aWYoIU4ubGlzdC5zaGFwZSlicmVhaztsZXQgVD1OLmxpc3Quc2hhcGUubWFwKFk9PlkudW5rbm93bl9yYW5rP251bGw6bnVsbD09WS5kaW18fDE9PT1ZLmRpbS5sZW5ndGgmJm51bGw9PVkuZGltWzBdLnNpemU/W106WS5kaW0ubWFwKGFhPT5hYS5zaXplKSk7Si5zcGxpY2UoUCwxKTtyZXR1cm4gVH19cmV0dXJuIG51bGx9ZnVuY3Rpb24gZyhKKXtpZighSilyZXR1cm4gbnVsbDtmb3IobGV0IFA9MDtQPEoubGVuZ3RoO1ArKylpZigiX1hsYUNsdXN0ZXIiPT09CkpbUF0ua2V5KXJldHVybiBKW1BdLnZhbHVlLnN8fG51bGw7cmV0dXJuIG51bGx9ZnVuY3Rpb24gbChKKXtsZXQgUD1bXTtfLmVhY2goSixTPT57bGV0IE49Il4iPT09U1swXTtOJiYoUz1TLnN1YnN0cmluZygxKSk7bGV0IFQ9UyxZPSIwIixhYT1TLm1hdGNoKC8oLiopOihcdys6XGQrKSQvKTtpZihhYSlUPWFhWzFdLFk9YWFbMl07ZWxzZSBpZihhYT1TLm1hdGNoKC8oLiopOihcZCspJC8pKVQ9YWFbMV0sWT1hYVsyXTswIT09UC5sZW5ndGgmJlQ9PT1QW1AubGVuZ3RoLTFdLm5hbWV8fFAucHVzaCh7bmFtZTpULG91dHB1dFRlbnNvcktleTpZLGlzQ29udHJvbERlcGVuZGVuY3k6Tn0pfSk7cmV0dXJuIFB9ZnVuY3Rpb24gayhKLFAsUyxOLFQsWSl7UCE9PVMubmFtZSYmSi5lZGdlcy5wdXNoKHt2OlAsdzpTLm5hbWUsb3V0cHV0VGVuc29yS2V5Ok4ub3V0cHV0VGVuc29yS2V5LGlzQ29udHJvbERlcGVuZGVuY3k6Ti5pc0NvbnRyb2xEZXBlbmRlbmN5LGlzUmVmZXJlbmNlRWRnZTohMD09PQpULnJlZkVkZ2VzW1Mub3ArIiAiK1ldfSl9ZnVuY3Rpb24gbShKLFAsUyl7Uz1TfHx7fTtsZXQgTj1uZXcgZ3JhcGhsaWIuR3JhcGgoUyk7Ti5zZXRHcmFwaCh7bmFtZTpKLHJhbmtkaXI6Uy5yYW5rZGlyfHwiQlQiLHR5cGU6UH0pO3JldHVybiBOfWZ1bmN0aW9uIHAoSil7cmV0dXJuIGZ1bmN0aW9uKFApe2ZvcihsZXQgUz0wO1M8Si5sZW5ndGg7UysrKXtsZXQgTj1uZXcgUmVnRXhwKEpbU10pO2lmKCJzdHJpbmciPT09dHlwZW9mIFAub3AmJlAub3AubWF0Y2goTikpcmV0dXJuITB9cmV0dXJuITF9fWZ1bmN0aW9uIHEoSil7bGV0IFA9Si5zcGxpdChjLk5BTUVTUEFDRV9ERUxJTSk7cmV0dXJuIEorYy5OQU1FU1BBQ0VfREVMSU0rIigiK1BbUC5sZW5ndGgtMV0rIikifWZ1bmN0aW9uIHIoSixQKXtsZXQgUz17fSxOPXt9O0ouc29ydCgpO2ZvcihsZXQgVD0wO1Q8Si5sZW5ndGgtMTsrK1Qpe2xldCBZPUpbVF07Xy5lYWNoKHYoWSkuc2xpY2UoMCwtMSksYWE9PntOW2FhXT0hMH0pO2ZvcihsZXQgYWE9ClQrMTthYTxKLmxlbmd0aDsrK2FhKXtsZXQgaGE9SlthYV07aWYoXy5zdGFydHNXaXRoKGhhLFkpKXtpZihoYS5sZW5ndGg+WS5sZW5ndGgmJmhhLmNoYXJBdChZLmxlbmd0aCk9PT1jLk5BTUVTUEFDRV9ERUxJTSl7U1tZXT1xKFkpO2JyZWFrfX1lbHNlIGJyZWFrfX1fLmVhY2goUCxUPT57VCBpbiBOJiYoU1tUXT1xKFQpKX0pO3JldHVybiBTfWZ1bmN0aW9uIHQoSil7bGV0IFA9Si5ub2RlcygpLm1hcChmdW5jdGlvbihTKXtyZXR1cm4gSi5uZWlnaGJvcnMoUykubGVuZ3RofSk7UC5zb3J0KCk7cmV0dXJuIFB9ZnVuY3Rpb24gdihKLFApe2xldCBTPVtdLE49Si5pbmRleE9mKGMuTkFNRVNQQUNFX0RFTElNKTtmb3IoOzA8PU47KVMucHVzaChKLnN1YnN0cmluZygwLE4pKSxOPUouaW5kZXhPZihjLk5BTUVTUEFDRV9ERUxJTSxOKzEpO1AmJihQPVBbSl0pJiZTLnB1c2goUCk7Uy5wdXNoKEopO3JldHVybiBTfWMuTkFNRVNQQUNFX0RFTElNPSIvIjtjLlJPT1RfTkFNRT0iX19yb290X18iOwpjLkZVTkNUSU9OX0xJQlJBUllfTk9ERV9QUkVGSVg9Il9fZnVuY3Rpb25fbGlicmFyeV9fIjtjLkxBUkdFX0FUVFJTX0tFWT0iX3Rvb19sYXJnZV9hdHRycyI7Yy5MSU1JVF9BVFRSX1NJWkU9MTAyNDtjLkVER0VfS0VZX0RFTElNPSItLSI7bGV0IEE7KGZ1bmN0aW9uKEope0pbSi5GVUxMPTBdPSJGVUxMIjtKW0ouRU1CRURERUQ9MV09IkVNQkVEREVEIjtKW0ouTUVUQT0yXT0iTUVUQSI7SltKLlNFUklFUz0zXT0iU0VSSUVTIjtKW0ouQ09SRT00XT0iQ09SRSI7SltKLlNIQURPVz01XT0iU0hBRE9XIjtKW0ouQlJJREdFPTZdPSJCUklER0UiO0pbSi5FREdFPTddPSJFREdFIn0pKEE9Yy5HcmFwaFR5cGV8fChjLkdyYXBoVHlwZT17fSkpO2xldCB5OyhmdW5jdGlvbihKKXtKW0ouTUVUQT0wXT0iTUVUQSI7SltKLk9QPTFdPSJPUCI7SltKLlNFUklFUz0yXT0iU0VSSUVTIjtKW0ouQlJJREdFPTNdPSJCUklER0UiO0pbSi5FTExJUFNJUz00XT0iRUxMSVBTSVMifSkoeT1jLk5vZGVUeXBlfHwKKGMuTm9kZVR5cGU9e30pKTtsZXQgeDsoZnVuY3Rpb24oSil7SltKLklOQ0xVREU9MF09IklOQ0xVREUiO0pbSi5FWENMVURFPTFdPSJFWENMVURFIjtKW0ouVU5TUEVDSUZJRUQ9Ml09IlVOU1BFQ0lGSUVEIn0pKHg9Yy5JbmNsdXNpb25UeXBlfHwoYy5JbmNsdXNpb25UeXBlPXt9KSk7KGZ1bmN0aW9uKEope0pbSi5HUk9VUD0wXT0iR1JPVVAiO0pbSi5VTkdST1VQPTFdPSJVTkdST1VQIn0pKGMuU2VyaWVzR3JvdXBpbmdUeXBlfHwoYy5TZXJpZXNHcm91cGluZ1R5cGU9e30pKTtjbGFzcyBDe2NvbnN0cnVjdG9yKCl7dGhpcy5ub2Rlcz17fTt0aGlzLmVkZ2VzPVtdfX1jLlNsaW1HcmFwaD1DO2NsYXNzIEZ7Y29uc3RydWN0b3IoSil7dGhpcy50eXBlPXkuRUxMSVBTSVM7dGhpcy5pc0dyb3VwTm9kZT0hMTt0aGlzLmNhcmRpbmFsaXR5PTE7dGhpcy5zdGF0cz10aGlzLnBhcmVudE5vZGU9bnVsbDt0aGlzLnNldE51bU1vcmVOb2RlcyhKKTt0aGlzLmluY2x1ZGU9eC5VTlNQRUNJRklFRH1zZXROdW1Nb3JlTm9kZXMoSil7dGhpcy5udW1Nb3JlTm9kZXM9Cko7dGhpcy5uYW1lPSIuLi4gIitKKyIgbW9yZSJ9fWMuRWxsaXBzaXNOb2RlSW1wbD1GO2NsYXNzIER7Y29uc3RydWN0b3IoSil7dGhpcy5vcD1KLm9wO3RoaXMubmFtZT1KLm5hbWU7dGhpcy5kZXZpY2U9Si5kZXZpY2U7dGhpcy5hdHRyPUouYXR0cjt0aGlzLmlucHV0cz1sKEouaW5wdXQpO3RoaXMub3V0cHV0U2hhcGVzPWYoSi5hdHRyKTt0aGlzLnhsYUNsdXN0ZXI9ZyhKLmF0dHIpO3RoaXMuY29tcGF0aWJsZT0hMTt0aGlzLnR5cGU9eS5PUDt0aGlzLmlzR3JvdXBOb2RlPSExO3RoaXMuY2FyZGluYWxpdHk9MTt0aGlzLmluRW1iZWRkaW5ncz1bXTt0aGlzLm91dEVtYmVkZGluZ3M9W107dGhpcy5wYXJlbnROb2RlPW51bGw7dGhpcy5pbmNsdWRlPXguVU5TUEVDSUZJRUQ7dGhpcy5vd25pbmdTZXJpZXM9bnVsbH19Yy5PcE5vZGVJbXBsPUQ7Yy5jcmVhdGVNZXRhbm9kZT1mdW5jdGlvbihKLFA9e30pe3JldHVybiBuZXcgRyhKLFApfTtjLmpvaW5TdGF0c0luZm9XaXRoR3JhcGg9ZnVuY3Rpb24oSiwKUCxTKXtfLmVhY2goSi5ub2RlcyxOPT57Ti5zdGF0cz1udWxsfSk7Xy5lYWNoKFAuZGV2X3N0YXRzLE49PntTJiYhU1tOLmRldmljZV18fF8uZWFjaChOLm5vZGVfc3RhdHMsVD0+e2xldCBZPVQubm9kZV9uYW1lIGluIEoubm9kZXM/VC5ub2RlX25hbWU6cShULm5vZGVfbmFtZSk7aWYoWSBpbiBKLm5vZGVzKXt2YXIgYWE9MDtULm1lbW9yeSYmXy5lYWNoKFQubWVtb3J5LFg9PntYLnRvdGFsX2J5dGVzJiYoMDxYLnRvdGFsX2J5dGVzP2FhKz1OdW1iZXIoWC50b3RhbF9ieXRlcyk6Y29uc29sZS5sb2coImlnbm9yaW5nIG5lZ2F0aXZlIG1lbW9yeSBhbGxvY2F0aW9uIGZvciAiK1kpKX0pO3ZhciBoYT1udWxsO1Qub3V0cHV0JiYoaGE9Xy5tYXAoVC5vdXRwdXQsWD0+Xy5tYXAoWC50ZW5zb3JfZGVzY3JpcHRpb24uc2hhcGUuZGltLGNhPT5OdW1iZXIoY2Euc2l6ZSkpKSk7Si5ub2Rlc1tZXS5kZXZpY2U9Ti5kZXZpY2U7bnVsbD09Si5ub2Rlc1tZXS5zdGF0cyYmKEoubm9kZXNbWV0uc3RhdHM9Cm5ldyBCKGhhKSk7Si5ub2Rlc1tZXS5zdGF0cy5hZGRCeXRlc0FsbG9jYXRpb24oYWEpO1QuYWxsX2VuZF9yZWxfbWljcm9zJiYoMDxULmFsbF9lbmRfcmVsX21pY3Jvcz9KLm5vZGVzW1ldLnN0YXRzLmFkZEV4ZWN1dGlvblRpbWUoVC5hbGxfc3RhcnRfbWljcm9zLFQuYWxsX3N0YXJ0X21pY3JvcytULmFsbF9lbmRfcmVsX21pY3Jvcyk6Y29uc29sZS5sb2coImlnbm9yaW5nIG5lZ2F0aXZlIHJ1bnRpbWUgZm9yICIrWSkpfX0pfSl9O2NsYXNzIEJ7Y29uc3RydWN0b3IoSil7dGhpcy50b3RhbEJ5dGVzPTA7dGhpcy5vdXRwdXRTaXplPUp9YWRkRXhlY3V0aW9uVGltZShKLFApe3RoaXMuc3RhcnRUaW1lPW51bGwhPXRoaXMuc3RhcnRUaW1lP01hdGgubWluKHRoaXMuc3RhcnRUaW1lLEopOko7dGhpcy5lbmRUaW1lPW51bGwhPXRoaXMuZW5kVGltZT9NYXRoLm1heCh0aGlzLmVuZFRpbWUsUCk6UH1hZGRCeXRlc0FsbG9jYXRpb24oSil7dGhpcy50b3RhbEJ5dGVzPW51bGwhPXRoaXMudG90YWxCeXRlcz8KTWF0aC5tYXgodGhpcy50b3RhbEJ5dGVzLEopOkp9Y29tYmluZShKKXtudWxsIT1KLnRvdGFsQnl0ZXMmJih0aGlzLnRvdGFsQnl0ZXMrPUoudG90YWxCeXRlcyk7bnVsbCE9Si5nZXRUb3RhbE1pY3JvcygpJiZ0aGlzLmFkZEV4ZWN1dGlvblRpbWUoSi5zdGFydFRpbWUsSi5lbmRUaW1lKX1nZXRUb3RhbE1pY3Jvcygpe3JldHVybiBudWxsPT10aGlzLnN0YXJ0VGltZXx8bnVsbD09dGhpcy5lbmRUaW1lP251bGw6dGhpcy5lbmRUaW1lLXRoaXMuc3RhcnRUaW1lfX1jLk5vZGVTdGF0cz1CO2NsYXNzIEd7Y29uc3RydWN0b3IoSixQPXt9KXt0aGlzLm5hbWU9Sjt0aGlzLnR5cGU9eS5NRVRBO3RoaXMuZGVwdGg9MTt0aGlzLmlzR3JvdXBOb2RlPSEwO3RoaXMuY2FyZGluYWxpdHk9MDt0aGlzLm1ldGFncmFwaD1tKEosQS5NRVRBLFApO3RoaXMuYnJpZGdlZ3JhcGg9bnVsbDt0aGlzLm9wSGlzdG9ncmFtPXt9O3RoaXMuZGV2aWNlSGlzdG9ncmFtPXt9O3RoaXMueGxhQ2x1c3Rlckhpc3RvZ3JhbT0Ke307dGhpcy5jb21wYXRpYmlsaXR5SGlzdG9ncmFtPXtjb21wYXRpYmxlOjAsaW5jb21wYXRpYmxlOjB9O3RoaXMucGFyZW50Tm9kZT10aGlzLnRlbXBsYXRlSWQ9bnVsbDt0aGlzLmhhc05vbkNvbnRyb2xFZGdlcz0hMTt0aGlzLmluY2x1ZGU9eC5VTlNQRUNJRklFRDt0aGlzLmFzc29jaWF0ZWRGdW5jdGlvbj0iIn1nZXRGaXJzdENoaWxkKCl7cmV0dXJuIHRoaXMubWV0YWdyYXBoLm5vZGUodGhpcy5tZXRhZ3JhcGgubm9kZXMoKVswXSl9Z2V0Um9vdE9wKCl7bGV0IEo9dGhpcy5uYW1lLnNwbGl0KCIvIik7cmV0dXJuIHRoaXMubWV0YWdyYXBoLm5vZGUodGhpcy5uYW1lKyIvKCIrSltKLmxlbmd0aC0xXSsiKSIpfWxlYXZlcygpe2xldCBKPVtdLFA9W3RoaXNdLFM7Zm9yKDtQLmxlbmd0aDspe2xldCBOPVAuc2hpZnQoKTtOLmlzR3JvdXBOb2RlPyhTPU4ubWV0YWdyYXBoLF8uZWFjaChTLm5vZGVzKCksVD0+UC5wdXNoKFMubm9kZShUKSkpKTpKLnB1c2goTi5uYW1lKX1yZXR1cm4gSn19CmMuTWV0YW5vZGVJbXBsPUc7Yy5jcmVhdGVNZXRhZWRnZT1mdW5jdGlvbihKLFApe3JldHVybiBuZXcgSyhKLFApfTtjbGFzcyBLe2NvbnN0cnVjdG9yKEosUCl7dGhpcy52PUo7dGhpcy53PVA7dGhpcy5iYXNlRWRnZUxpc3Q9W107dGhpcy5pbmJvdW5kPW51bGw7dGhpcy50b3RhbFNpemU9dGhpcy5udW1SZWZFZGdlcz10aGlzLm51bUNvbnRyb2xFZGdlcz10aGlzLm51bVJlZ3VsYXJFZGdlcz0wfWFkZEJhc2VFZGdlKEosUCl7dGhpcy5iYXNlRWRnZUxpc3QucHVzaChKKTtKLmlzQ29udHJvbERlcGVuZGVuY3k/dGhpcy5udW1Db250cm9sRWRnZXMrPTE6dGhpcy5udW1SZWd1bGFyRWRnZXMrPTE7Si5pc1JlZmVyZW5jZUVkZ2UmJih0aGlzLm51bVJlZkVkZ2VzKz0xKTt0aGlzLnRvdGFsU2l6ZSs9Sy5jb21wdXRlU2l6ZU9mRWRnZShKLFApO1AubWF4TWV0YUVkZ2VTaXplPU1hdGgubWF4KFAubWF4TWV0YUVkZ2VTaXplLHRoaXMudG90YWxTaXplKX1zdGF0aWMgY29tcHV0ZVNpemVPZkVkZ2UoSiwKUCl7bGV0IFM9UC5ub2RlKEoudik7aWYoIVMub3V0cHV0U2hhcGVzKXJldHVybiAxO1AuaGFzU2hhcGVJbmZvPSEwO0o9T2JqZWN0LmtleXMoUy5vdXRwdXRTaGFwZXMpLm1hcChOPT5TLm91dHB1dFNoYXBlc1tOXSkubWFwKE49Pm51bGw9PU4/MTpOLnJlZHVjZSgoVCxZKT0+ey0xPT09WSYmKFk9MSk7cmV0dXJuIFQqWX0sMSkpO3JldHVybiBfLnN1bShKKX19Yy5NZXRhZWRnZUltcGw9SztjLmNyZWF0ZVNlcmllc05vZGU9ZnVuY3Rpb24oSixQLFMsTixULFkpe3JldHVybiBuZXcgTChKLFAsUyxOLFQsWSl9O2MuZ2V0U2VyaWVzTm9kZU5hbWU9ZDtjbGFzcyBMe2NvbnN0cnVjdG9yKEosUCxTLE4sVCxZKXt0aGlzLm5hbWU9VHx8ZChKLFAsUyk7dGhpcy50eXBlPXkuU0VSSUVTO3RoaXMuaGFzTG9vcD0hMTt0aGlzLnByZWZpeD1KO3RoaXMuc3VmZml4PVA7dGhpcy5jbHVzdGVySWQ9Tjt0aGlzLmlkcz1bXTt0aGlzLnBhcmVudD1TO3RoaXMuaXNHcm91cE5vZGU9ITA7dGhpcy5jYXJkaW5hbGl0eT0KMDt0aGlzLm1ldGFncmFwaD1tKFQsQS5TRVJJRVMsWSk7dGhpcy5wYXJlbnROb2RlPXRoaXMuYnJpZGdlZ3JhcGg9bnVsbDt0aGlzLmRldmljZUhpc3RvZ3JhbT17fTt0aGlzLnhsYUNsdXN0ZXJIaXN0b2dyYW09e307dGhpcy5jb21wYXRpYmlsaXR5SGlzdG9ncmFtPXtjb21wYXRpYmxlOjAsaW5jb21wYXRpYmxlOjB9O3RoaXMuaGFzTm9uQ29udHJvbEVkZ2VzPSExO3RoaXMuaW5jbHVkZT14LlVOU1BFQ0lGSUVEfX1jLkRlZmF1bHRCdWlsZFBhcmFtcz17ZW5hYmxlRW1iZWRkaW5nOiEwLGluRW1iZWRkaW5nVHlwZXM6WyJDb25zdCJdLG91dEVtYmVkZGluZ1R5cGVzOlsiXlthLXpBLVpdK1N1bW1hcnkkIl0scmVmRWRnZXM6eyJBc3NpZ24gMCI6ITAsIkFzc2lnbkFkZCAwIjohMCwiQXNzaWduU3ViIDAiOiEwLCJhc3NpZ24gMCI6ITAsImFzc2lnbl9hZGQgMCI6ITAsImFzc2lnbl9zdWIgMCI6ITAsImNvdW50X3VwX3RvIDAiOiEwLCJTY2F0dGVyQWRkIDAiOiEwLCJTY2F0dGVyU3ViIDAiOiEwLAoiU2NhdHRlclVwZGF0ZSAwIjohMCwic2NhdHRlcl9hZGQgMCI6ITAsInNjYXR0ZXJfc3ViIDAiOiEwLCJzY2F0dGVyX3VwZGF0ZSAwIjohMH19O2MuYnVpbGQ9ZnVuY3Rpb24oSixQLFMpe2xldCBOPXt9LFQ9e30sWT17fSxhYT1wKFAuaW5FbWJlZGRpbmdUeXBlcyksaGE9cChQLm91dEVtYmVkZGluZ1R5cGVzKSxYPVtdLGNhPUoubm9kZSxlYT1BcnJheShjYS5sZW5ndGgpO3JldHVybiBhLmdyYXBoLnV0aWwucnVuQXN5bmNUYXNrKCJOb3JtYWxpemluZyBuYW1lcyIsMzAsKCk9PntsZXQga2E9QXJyYXkoY2EubGVuZ3RoKSxiYT0wO2NvbnN0IGxhPUNhPT57bGV0IHhhPW5ldyBEKENhKTtpZihhYSh4YSkpcmV0dXJuIFgucHVzaCh4YS5uYW1lKSxOW3hhLm5hbWVdPXhhO2lmKGhhKHhhKSlyZXR1cm4gWC5wdXNoKHhhLm5hbWUpLFRbeGEubmFtZV09eGEsXy5lYWNoKHhhLmlucHV0cyx6YT0+e3phPXphLm5hbWU7WVt6YV09WVt6YV18fFtdO1lbemFdLnB1c2goeGEpfSkseGE7a2FbYmFdPQp4YTtlYVtiYV09eGEubmFtZTtiYSsrO3JldHVybiB4YX07Xy5lYWNoKGNhLGxhKTtjb25zdCB3YT1DYT0+e2NvbnN0IHhhPWMuRlVOQ1RJT05fTElCUkFSWV9OT0RFX1BSRUZJWCtDYS5zaWduYXR1cmUubmFtZTtsYSh7bmFtZTp4YSxpbnB1dDpbXSxkZXZpY2U6IiIsb3A6IiIsYXR0cjpbXX0pO2lmKENhLnNpZ25hdHVyZS5pbnB1dF9hcmcpe2xldCBFYT0wO3ZhciB6YT1HYT0+e2xhKHtuYW1lOnhhK2MuTkFNRVNQQUNFX0RFTElNK0dhLm5hbWUsaW5wdXQ6W10sZGV2aWNlOiIiLG9wOiJpbnB1dF9hcmciLGF0dHI6W3trZXk6IlQiLHZhbHVlOnt0eXBlOkdhLnR5cGV9fV19KS5mdW5jdGlvbklucHV0SW5kZXg9RWE7RWErK307Q2Euc2lnbmF0dXJlLmlucHV0X2FyZy5uYW1lP3phKENhLnNpZ25hdHVyZS5pbnB1dF9hcmcpOl8uZWFjaChDYS5zaWduYXR1cmUuaW5wdXRfYXJnLHphKX1sZXQgRmE9MDtjb25zdCBTYT17fTtDYS5zaWduYXR1cmUub3V0cHV0X2FyZyYmKHphPUVhPT57U2FbeGErCmMuTkFNRVNQQUNFX0RFTElNK0VhLm5hbWVdPUZhO0ZhKyt9LENhLnNpZ25hdHVyZS5vdXRwdXRfYXJnLm5hbWU/emEoQ2Euc2lnbmF0dXJlLm91dHB1dF9hcmcpOl8uZWFjaChDYS5zaWduYXR1cmUub3V0cHV0X2FyZyx6YSkpO18uZWFjaChDYS5ub2RlX2RlZixFYT0+e0VhLm5hbWU9eGErIi8iK0VhLm5hbWU7InN0cmluZyI9PT10eXBlb2YgRWEuaW5wdXQmJihFYS5pbnB1dD1bRWEuaW5wdXRdKTtjb25zdCBHYT1sYShFYSk7Xy5pc051bWJlcihTYVtFYS5uYW1lXSkmJihHYS5mdW5jdGlvbk91dHB1dEluZGV4PVNhW0VhLm5hbWVdKTtfLmVhY2goR2EuaW5wdXRzLGRiPT57ZGIubmFtZT14YStjLk5BTUVTUEFDRV9ERUxJTStkYi5uYW1lfSl9KX07Si5saWJyYXJ5JiZKLmxpYnJhcnkuZnVuY3Rpb24mJl8uZWFjaChKLmxpYnJhcnkuZnVuY3Rpb24sd2EpO2thLnNwbGljZShiYSk7ZWEuc3BsaWNlKGJhKTtyZXR1cm4ga2F9LFMpLnRoZW4oa2E9PmEuZ3JhcGgudXRpbC5ydW5Bc3luY1Rhc2soIkJ1aWxkaW5nIHRoZSBkYXRhIHN0cnVjdHVyZSIsCjcwLCgpPT57bGV0IGJhPXIoZWEsWCksbGE9bmV3IEM7Xy5lYWNoKGthLHdhPT57bGV0IENhPWJhW3dhLm5hbWVdfHx3YS5uYW1lO2xhLm5vZGVzW0NhXT13YTt3YS5uYW1lIGluIFkmJih3YS5vdXRFbWJlZGRpbmdzPVlbd2EubmFtZV0sXy5lYWNoKHdhLm91dEVtYmVkZGluZ3MseGE9Pnt4YS5uYW1lPWJhW3hhLm5hbWVdfHx4YS5uYW1lfSkpO3dhLm5hbWU9Q2F9KTtfLmVhY2goa2Esd2E9PntfLmVhY2god2EuaW5wdXRzLChDYSx4YSk9PntsZXQgemE9Q2EubmFtZTtpZih6YSBpbiBOKXtDYT1OW3phXTt3YS5pbkVtYmVkZGluZ3MucHVzaChDYSk7Zm9yKHZhciBGYSBvZiBDYS5pbnB1dHMpayhsYSxiYVtGYS5uYW1lXXx8RmEubmFtZSx3YSxGYSxQLHhhKX1lbHNlIGlmKHphIGluIFQpe0ZhPVRbemFdO2ZvcihsZXQgU2Egb2YgRmEuaW5wdXRzKWsobGEsYmFbU2EubmFtZV18fFNhLm5hbWUsd2EsQ2EsUCx4YSl9ZWxzZSBrKGxhLGJhW3phXXx8emEsd2EsQ2EsUCx4YSl9KX0pO18uZWFjaChOLAp3YT0+e3dhLm5hbWU9YmFbd2EubmFtZV18fHdhLm5hbWV9KTtyZXR1cm4gbGF9LFMpKX07Yy5jcmVhdGVHcmFwaD1tO2MuZ2V0U3RyaWN0TmFtZT1xO2MuaGFzU2ltaWxhckRlZ3JlZVNlcXVlbmNlPWZ1bmN0aW9uKEosUCl7Sj10KEopO1A9dChQKTtmb3IobGV0IFM9MDtTPEoubGVuZ3RoO1MrKylpZihKW1NdIT09UFtTXSlyZXR1cm4hMTtyZXR1cm4hMH07Yy5nZXRIaWVyYXJjaGljYWxQYXRoPXY7Yy5nZXRJbmNsdWRlTm9kZUJ1dHRvblN0cmluZz1mdW5jdGlvbihKKXtyZXR1cm4gSj09PWEuZ3JhcGguSW5jbHVzaW9uVHlwZS5FWENMVURFPyJBZGQgdG8gbWFpbiBncmFwaCI6IlJlbW92ZSBmcm9tIG1haW4gZ3JhcGgifTtjLmdldEdyb3VwU2VyaWVzTm9kZUJ1dHRvblN0cmluZz1mdW5jdGlvbihKKXtyZXR1cm4gSj09PWEuZ3JhcGguU2VyaWVzR3JvdXBpbmdUeXBlLkdST1VQPyJVbmdyb3VwIHRoaXMgc2VyaWVzIG9mIG5vZGVzIjoiR3JvdXAgdGhpcyBzZXJpZXMgb2Ygbm9kZXMifTsKYy50b2dnbGVOb2RlU2VyaWVzR3JvdXA9ZnVuY3Rpb24oSixQKXtKW1BdPVAgaW4gSiYmSltQXSE9PWEuZ3JhcGguU2VyaWVzR3JvdXBpbmdUeXBlLkdST1VQP2EuZ3JhcGguU2VyaWVzR3JvdXBpbmdUeXBlLkdST1VQOmEuZ3JhcGguU2VyaWVzR3JvdXBpbmdUeXBlLlVOR1JPVVB9fSkoYS5ncmFwaHx8KGEuZ3JhcGg9e30pKX0pKHRmfHwodGY9e30pKTsKPC9zY3JpcHQ+CjxzY3JpcHQ+Ly9+fldFQlBBVEh+fi90Zi1ncmFwaC1jb21tb24vaGllcmFyY2h5LmpzCihmdW5jdGlvbihhKXsoZnVuY3Rpb24oYyl7KGZ1bmN0aW9uKGQpe2Z1bmN0aW9uIGYodixBLHkseCl7QT15P3YuaW5FZGdlcyhBLm5hbWUpOnYub3V0RWRnZXMoQS5uYW1lKTtfLmVhY2goQSxDPT57Qz12LmVkZ2UoQyk7KEMubnVtUmVndWxhckVkZ2VzP3gucmVndWxhcjp4LmNvbnRyb2wpLnB1c2goQyl9KX1mdW5jdGlvbiBnKHYsQSl7Y29uc3QgeT17fTtfLmVhY2goQS5ub2Rlcyx4PT57bGV0IEM9Yy5nZXRIaWVyYXJjaGljYWxQYXRoKHgubmFtZSksRj12LnJvb3Q7Ri5kZXB0aD1NYXRoLm1heChDLmxlbmd0aCxGLmRlcHRoKTt5W3gub3BdfHwoeVt4Lm9wXT1bXSk7eVt4Lm9wXS5wdXNoKHgpO2ZvcihsZXQgQj0wO0I8Qy5sZW5ndGg7QisrKXtGLmRlcHRoPU1hdGgubWF4KEYuZGVwdGgsQy5sZW5ndGgtQik7Ri5jYXJkaW5hbGl0eSs9eC5jYXJkaW5hbGl0eTtGLm9wSGlzdG9ncmFtW3gub3BdPShGLm9wSGlzdG9ncmFtW3gub3BdfHwwKSsxO251bGwhPXguZGV2aWNlJiYoRi5kZXZpY2VIaXN0b2dyYW1beC5kZXZpY2VdPQooRi5kZXZpY2VIaXN0b2dyYW1beC5kZXZpY2VdfHwwKSsxKTtudWxsIT14LnhsYUNsdXN0ZXImJihGLnhsYUNsdXN0ZXJIaXN0b2dyYW1beC54bGFDbHVzdGVyXT0oRi54bGFDbHVzdGVySGlzdG9ncmFtW3gueGxhQ2x1c3Rlcl18fDApKzEpO3guY29tcGF0aWJsZT9GLmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uY29tcGF0aWJsZT0oRi5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmNvbXBhdGlibGV8fDApKzE6Ri5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmluY29tcGF0aWJsZT0oRi5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmluY29tcGF0aWJsZXx8MCkrMTtfLmVhY2goeC5pbkVtYmVkZGluZ3MsSz0+e0suY29tcGF0aWJsZT9GLmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uY29tcGF0aWJsZT0oRi5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmNvbXBhdGlibGV8fDApKzE6Ri5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmluY29tcGF0aWJsZT0oRi5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmluY29tcGF0aWJsZXx8CjApKzF9KTtfLmVhY2goeC5vdXRFbWJlZGRpbmdzLEs9PntLLmNvbXBhdGlibGU/Ri5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmNvbXBhdGlibGU9KEYuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5jb21wYXRpYmxlfHwwKSsxOkYuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5pbmNvbXBhdGlibGU9KEYuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5pbmNvbXBhdGlibGV8fDApKzF9KTtpZihCPT09Qy5sZW5ndGgtMSlicmVhazt2YXIgRD1DW0JdO2xldCBHPXYubm9kZShEKTtHfHwoRz1jLmNyZWF0ZU1ldGFub2RlKEQsdi5ncmFwaE9wdGlvbnMpLEcucGFyZW50Tm9kZT1GLHYuc2V0Tm9kZShELEcpLEYubWV0YWdyYXBoLnNldE5vZGUoRCxHKSwwPT09RC5pbmRleE9mKGEuZ3JhcGguRlVOQ1RJT05fTElCUkFSWV9OT0RFX1BSRUZJWCkmJkYubmFtZT09PWEuZ3JhcGguUk9PVF9OQU1FJiYoRD1ELnN1YnN0cmluZyhhLmdyYXBoLkZVTkNUSU9OX0xJQlJBUllfTk9ERV9QUkVGSVgubGVuZ3RoKSx5W0RdfHwKKHlbRF09W10pLHYubGlicmFyeUZ1bmN0aW9uc1tEXT17bm9kZTpHLHVzYWdlczp5W0RdfSxHLmFzc29jaWF0ZWRGdW5jdGlvbj1EKSk7Rj1HfXYuc2V0Tm9kZSh4Lm5hbWUseCk7eC5wYXJlbnROb2RlPUY7Ri5tZXRhZ3JhcGguc2V0Tm9kZSh4Lm5hbWUseCk7Xy5lYWNoKHguaW5FbWJlZGRpbmdzLGZ1bmN0aW9uKEIpe3Yuc2V0Tm9kZShCLm5hbWUsQik7Qi5wYXJlbnROb2RlPXh9KTtfLmVhY2goeC5vdXRFbWJlZGRpbmdzLGZ1bmN0aW9uKEIpe3Yuc2V0Tm9kZShCLm5hbWUsQik7Qi5wYXJlbnROb2RlPXh9KX0pfWZ1bmN0aW9uIGwodixBKXtsZXQgeT12LmdldE5vZGVNYXAoKSx4PVtdLEM9W10sRj0oRCxCKT0+e2xldCBHPTA7Zm9yKDtEOylCW0crK109RC5uYW1lLEQ9RC5wYXJlbnROb2RlO3JldHVybiBHLTF9O18uZWFjaChBLmVkZ2VzLEQ9Pnt2YXIgQj1GKEEubm9kZXNbRC52XSx4KSxHPUYoQS5ub2Rlc1tELnddLEMpO2lmKC0xIT09QiYmLTEhPT1HKXtmb3IoO3hbQl09PT1DW0ddOylpZihCLS0sCkctLSwwPkJ8fDA+Ryl0aHJvdyBFcnJvcigiTm8gZGlmZmVyZW5jZSBmb3VuZCBiZXR3ZWVuIGFuY2VzdG9yIHBhdGhzLiIpO3ZhciBLPXlbeFtCKzFdXTtCPXhbQl07Rz1DW0ddO3ZhciBMPUsubWV0YWdyYXBoLmVkZ2UoQixHKTtMfHwoTD1jLmNyZWF0ZU1ldGFlZGdlKEIsRyksSy5tZXRhZ3JhcGguc2V0RWRnZShCLEcsTCkpO0suaGFzTm9uQ29udHJvbEVkZ2VzfHxELmlzQ29udHJvbERlcGVuZGVuY3l8fChLLmhhc05vbkNvbnRyb2xFZGdlcz0hMCk7TC5hZGRCYXNlRWRnZShELHYpfX0pfWZ1bmN0aW9uIGsodixBLHkseCxDLEYpe2xldCBEPXYubWV0YWdyYXBoO18uZWFjaChELm5vZGVzKCksQj0+e0I9RC5ub2RlKEIpO0IudHlwZT09PWEuZ3JhcGguTm9kZVR5cGUuTUVUQSYmayhCLEEseSx4LEMsRil9KTt2PW0oRCk7dj0oRj9xOnApKHYsRCxBLmdyYXBoT3B0aW9ucyk7Xy5lYWNoKHYsZnVuY3Rpb24oQixHKXtsZXQgSz1CLm1ldGFncmFwaC5ub2RlcygpO18uZWFjaChLLEw9Pgp7TD1ELm5vZGUoTCk7TC5vd25pbmdTZXJpZXN8fChMLm93bmluZ1Nlcmllcz1HKX0pO0subGVuZ3RoPHgmJiEoQi5uYW1lIGluIEMpJiYoQ1tCLm5hbWVdPWEuZ3JhcGguU2VyaWVzR3JvdXBpbmdUeXBlLlVOR1JPVVApO0IubmFtZSBpbiBDJiZDW0IubmFtZV09PT1hLmdyYXBoLlNlcmllc0dyb3VwaW5nVHlwZS5VTkdST1VQfHwoQS5zZXROb2RlKEcsQiksRC5zZXROb2RlKEcsQiksXy5lYWNoKEssTD0+e2xldCBKPUQubm9kZShMKTtCLm1ldGFncmFwaC5zZXROb2RlKEwsSik7Qi5wYXJlbnROb2RlPUoucGFyZW50Tm9kZTtCLmNhcmRpbmFsaXR5Kys7bnVsbCE9Si5kZXZpY2UmJihCLmRldmljZUhpc3RvZ3JhbVtKLmRldmljZV09KEIuZGV2aWNlSGlzdG9ncmFtW0ouZGV2aWNlXXx8MCkrMSk7bnVsbCE9Si54bGFDbHVzdGVyJiYoQi54bGFDbHVzdGVySGlzdG9ncmFtW0oueGxhQ2x1c3Rlcl09KEIueGxhQ2x1c3Rlckhpc3RvZ3JhbVtKLnhsYUNsdXN0ZXJdfHwwKSsxKTtKLmNvbXBhdGlibGU/CkIuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5jb21wYXRpYmxlPShCLmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uY29tcGF0aWJsZXx8MCkrMTpCLmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uaW5jb21wYXRpYmxlPShCLmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uaW5jb21wYXRpYmxlfHwwKSsxO18uZWFjaChKLmluRW1iZWRkaW5ncyxQPT57UC5jb21wYXRpYmxlP0IuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5jb21wYXRpYmxlPShCLmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uY29tcGF0aWJsZXx8MCkrMTpCLmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uaW5jb21wYXRpYmxlPShCLmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uaW5jb21wYXRpYmxlfHwwKSsxfSk7Xy5lYWNoKEoub3V0RW1iZWRkaW5ncyxQPT57UC5jb21wYXRpYmxlP0IuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5jb21wYXRpYmxlPShCLmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uY29tcGF0aWJsZXx8MCkrMTpCLmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uaW5jb21wYXRpYmxlPQooQi5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmluY29tcGF0aWJsZXx8MCkrMX0pO0oucGFyZW50Tm9kZT1CO3lbTF09RztELnJlbW92ZU5vZGUoTCl9KSl9KX1mdW5jdGlvbiBtKHYpe3JldHVybiBfLnJlZHVjZSh2Lm5vZGVzKCksKEEseSk9Pnt5PXYubm9kZSh5KTtpZih5LnR5cGU9PT1jLk5vZGVUeXBlLk1FVEEpcmV0dXJuIEE7bGV0IHg9eS5vcDt4JiYoQVt4XT1BW3hdfHxbXSxBW3hdLnB1c2goeS5uYW1lKSk7cmV0dXJuIEF9LHt9KX1mdW5jdGlvbiBwKHYsQSx5KXtsZXQgeD17fTtfLmVhY2godixmdW5jdGlvbihDLEYpe2lmKCEoMT49Qy5sZW5ndGgpKXt2YXIgRD17fTtfLmVhY2goQyxmdW5jdGlvbihCKXt2YXIgRz0iKiI9PT1CLmNoYXJBdChCLmxlbmd0aC0xKSxLPUIuc3BsaXQoIi8iKSxMPUtbSy5sZW5ndGgtMV07Sz1LLnNsaWNlKDAsSy5sZW5ndGgtMSkuam9pbigiLyIpO3ZhciBKPUwubWF0Y2goL14oXEQqKV8oXGQrKSQvKTtsZXQgUD0iIjtKPyhMPUpbMV0sSj1KWzJdKToKKEw9Rz9MLnN1YnN0cigwLEwubGVuZ3RoLTEpOkwsSj0wLFA9Rz8iKiI6IiIpO0c9Yy5nZXRTZXJpZXNOb2RlTmFtZShMLFAsSyk7RFtHXT1EW0ddfHxbXTtCPWMuY3JlYXRlU2VyaWVzTm9kZShMLFAsSywrSixCLHkpO0RbR10ucHVzaChCKX0pO18uZWFjaChELGZ1bmN0aW9uKEIpe2lmKCEoMj5CLmxlbmd0aCkpe0Iuc29ydChmdW5jdGlvbihLLEwpe3JldHVybitLLmNsdXN0ZXJJZC0rTC5jbHVzdGVySWR9KTt2YXIgRz1bQlswXV07Zm9yKGxldCBLPTE7SzxCLmxlbmd0aDtLKyspe2xldCBMPUJbS107TC5jbHVzdGVySWQ9PT1HW0cubGVuZ3RoLTFdLmNsdXN0ZXJJZCsxP0cucHVzaChMKToocihHLHgsK0YsQSx5KSxHPVtMXSl9cihHLHgsK0YsQSx5KX19KX19KTtyZXR1cm4geH1mdW5jdGlvbiBxKHYsQSx5KXtsZXQgeD17fTtfLmVhY2godixmdW5jdGlvbihDLEYpe2lmKCEoMT49Qy5sZW5ndGgpKXt2YXIgRD17fSxCPXt9O18uZWFjaChDLGZ1bmN0aW9uKEspe2xldCBMPSIqIj09PQpLLmNoYXJBdChLLmxlbmd0aC0xKTt2YXIgSj1LLnNwbGl0KCIvIik7bGV0IFA9SltKLmxlbmd0aC0xXTtKPUouc2xpY2UoMCxKLmxlbmd0aC0xKS5qb2luKCIvIik7Y29uc3QgUz0vKFxkKykvZzt2YXIgTjtsZXQgVCxZLGFhLGhhPTA7Zm9yKDtOPVMuZXhlYyhQKTspKytoYSxUPVAuc2xpY2UoMCxOLmluZGV4KSxZPU5bMF0sTj1QLnNsaWNlKE4uaW5kZXgrTlswXS5sZW5ndGgpLGFhPWMuZ2V0U2VyaWVzTm9kZU5hbWUoVCxOLEopLERbYWFdPURbYWFdLERbYWFdfHwoRFthYV09Yy5jcmVhdGVTZXJpZXNOb2RlKFQsTixKLCtZLEsseSkpLERbYWFdLmlkcy5wdXNoKFkpLEJbS109QltLXXx8W10sQltLXS5wdXNoKFthYSxZXSk7MT5oYSYmKFQ9TD9QLnN1YnN0cigwLFAubGVuZ3RoLTEpOlAsWT0wLE49TD8iKiI6IiIsYWE9Yy5nZXRTZXJpZXNOb2RlTmFtZShULE4sSiksRFthYV09RFthYV0sRFthYV18fChEW2FhXT1jLmNyZWF0ZVNlcmllc05vZGUoVCxOLEosK1ksSyx5KSksRFthYV0uaWRzLnB1c2goWSksCkJbS109QltLXXx8W10sQltLXS5wdXNoKFthYSxZXSkpfSk7dmFyIEc9e307Xy5lYWNoKEIsZnVuY3Rpb24oSyxMKXtLLnNvcnQoZnVuY3Rpb24oUyxOKXtyZXR1cm4gRFtOWzBdXS5pZHMubGVuZ3RoLURbU1swXV0uaWRzLmxlbmd0aH0pO3ZhciBKPUtbMF1bMF07Sz1LWzBdWzFdO0dbSl09R1tKXXx8W107Y29uc3QgUD1MLnNwbGl0KCIvIik7TD1jLmNyZWF0ZVNlcmllc05vZGUoRFtKXS5wcmVmaXgsRFtKXS5zdWZmaXgsUC5zbGljZSgwLFAubGVuZ3RoLTEpLmpvaW4oIi8iKSwrSyxMLHkpO0dbSl0ucHVzaChMKX0pO18uZWFjaChHLGZ1bmN0aW9uKEspe2lmKCEoMj5LLmxlbmd0aCkpe0suc29ydChmdW5jdGlvbihKLFApe3JldHVybitKLmNsdXN0ZXJJZC0rUC5jbHVzdGVySWR9KTt2YXIgTD1bS1swXV07Zm9yKGxldCBKPTE7SjxLLmxlbmd0aDtKKyspe2xldCBQPUtbSl07UC5jbHVzdGVySWQ9PT1MW0wubGVuZ3RoLTFdLmNsdXN0ZXJJZCsxP0wucHVzaChQKToocihMLHgsK0YsQSwKeSksTD1bUF0pfXIoTCx4LCtGLEEseSl9fSl9fSk7cmV0dXJuIHh9ZnVuY3Rpb24gcih2LEEseSx4LEMpe2lmKDE8di5sZW5ndGgpe2xldCBGPWMuZ2V0U2VyaWVzTm9kZU5hbWUodlswXS5wcmVmaXgsdlswXS5zdWZmaXgsdlswXS5wYXJlbnQsdlswXS5jbHVzdGVySWQsdlt2Lmxlbmd0aC0xXS5jbHVzdGVySWQpLEQ9Yy5jcmVhdGVTZXJpZXNOb2RlKHZbMF0ucHJlZml4LHZbMF0uc3VmZml4LHZbMF0ucGFyZW50LHksRixDKTtfLmVhY2godixmdW5jdGlvbihCKXtELmlkcy5wdXNoKEIuY2x1c3RlcklkKTtELm1ldGFncmFwaC5zZXROb2RlKEIubmFtZSx4Lm5vZGUoQi5uYW1lKSl9KTtBW0ZdPUR9fWNsYXNzIHR7Y29uc3RydWN0b3Iodil7dGhpcy5oYXNTaGFwZUluZm89ITE7dGhpcy5tYXhNZXRhRWRnZVNpemU9MTt0aGlzLmdyYXBoT3B0aW9ucz12fHx7fTt0aGlzLmdyYXBoT3B0aW9ucy5jb21wb3VuZD0hMDt0aGlzLnJvb3Q9Yy5jcmVhdGVNZXRhbm9kZShjLlJPT1RfTkFNRSx0aGlzLmdyYXBoT3B0aW9ucyk7CnRoaXMubGlicmFyeUZ1bmN0aW9ucz17fTt0aGlzLnhsYUNsdXN0ZXJzPXRoaXMuZGV2aWNlcz10aGlzLnRlbXBsYXRlcz1udWxsO3RoaXMuaW5kZXg9e307dGhpcy5pbmRleFtjLlJPT1RfTkFNRV09dGhpcy5yb290O3RoaXMub3JkZXJpbmdzPXt9fWdldE5vZGVNYXAoKXtyZXR1cm4gdGhpcy5pbmRleH1ub2RlKHYpe3JldHVybiB0aGlzLmluZGV4W3ZdfXNldE5vZGUodixBKXt0aGlzLmluZGV4W3ZdPUF9Z2V0QnJpZGdlZ3JhcGgodil7dmFyIEE9dGhpcy5pbmRleFt2XTtpZighQSl0aHJvdyBFcnJvcigiQ291bGQgbm90IGZpbmQgbm9kZSBpbiBoaWVyYXJjaHk6ICIrdik7aWYoISgibWV0YWdyYXBoImluIEEpKXJldHVybiBudWxsO2lmKEEuYnJpZGdlZ3JhcGgpcmV0dXJuIEEuYnJpZGdlZ3JhcGg7bGV0IHk9QS5icmlkZ2VncmFwaD1jLmNyZWF0ZUdyYXBoKCJCUklER0VHUkFQSCIsYy5HcmFwaFR5cGUuQlJJREdFLHRoaXMuZ3JhcGhPcHRpb25zKTtpZighKEEucGFyZW50Tm9kZSYmCiJtZXRhZ3JhcGgiaW4gQS5wYXJlbnROb2RlKSlyZXR1cm4geTt2YXIgeD1BLnBhcmVudE5vZGU7QT14Lm1ldGFncmFwaDt4PXRoaXMuZ2V0QnJpZGdlZ3JhcGgoeC5uYW1lKTtfLmVhY2goW0EseF0sQz0+e0MuZWRnZXMoKS5maWx0ZXIoRj0+Ri52PT09dnx8Ri53PT09dikuZm9yRWFjaChGPT57bGV0IEQ9Ri53PT09dixCPUMuZWRnZShGKTtfLmVhY2goQi5iYXNlRWRnZUxpc3QsRz0+e2xldCBbSyxMXT1EP1tHLncsRi52XTpbRy52LEYud107dmFyIEo9dGhpcy5nZXRDaGlsZE5hbWUodixLKTtKPXt2OkQ/TDpKLHc6RD9KOkx9O2xldCBQPXkuZWRnZShKKTtQfHwoUD1jLmNyZWF0ZU1ldGFlZGdlKEoudixKLncpLFAuaW5ib3VuZD1ELHkuc2V0RWRnZShKLnYsSi53LFApKTtQLmFkZEJhc2VFZGdlKEcsdGhpcyl9KX0pfSk7cmV0dXJuIHl9Z2V0Q2hpbGROYW1lKHYsQSl7bGV0IHk9dGhpcy5pbmRleFtBXTtmb3IoO3k7KXtpZih5LnBhcmVudE5vZGUmJnkucGFyZW50Tm9kZS5uYW1lPT09CnYpcmV0dXJuIHkubmFtZTt5PXkucGFyZW50Tm9kZX10aHJvdyBFcnJvcigiQ291bGQgbm90IGZpbmQgaW1tZWRpYXRlIGNoaWxkIGZvciBkZXNjZW5kYW50OiAiK0EpO31nZXRQcmVkZWNlc3NvcnModil7bGV0IEE9dGhpcy5pbmRleFt2XTtpZighQSl0aHJvdyBFcnJvcigiQ291bGQgbm90IGZpbmQgbm9kZSB3aXRoIG5hbWU6ICIrdik7bGV0IHk9dGhpcy5nZXRPbmVXYXlFZGdlcyhBLCEwKTtBLmlzR3JvdXBOb2RlfHxfLmVhY2goQS5pbkVtYmVkZGluZ3MseD0+e18uZWFjaChBLmlucHV0cyxDPT57aWYoQy5uYW1lPT09eC5uYW1lKXtsZXQgRj1uZXcgYy5NZXRhZWRnZUltcGwoeC5uYW1lLHYpO0YuYWRkQmFzZUVkZ2Uoe2lzQ29udHJvbERlcGVuZGVuY3k6Qy5pc0NvbnRyb2xEZXBlbmRlbmN5LG91dHB1dFRlbnNvcktleTpDLm91dHB1dFRlbnNvcktleSxpc1JlZmVyZW5jZUVkZ2U6ITEsdjp4Lm5hbWUsdzp2fSx0aGlzKTt5LnJlZ3VsYXIucHVzaChGKX19KX0pO3JldHVybiB5fWdldFN1Y2Nlc3NvcnModil7bGV0IEE9CnRoaXMuaW5kZXhbdl07aWYoIUEpdGhyb3cgRXJyb3IoIkNvdWxkIG5vdCBmaW5kIG5vZGUgd2l0aCBuYW1lOiAiK3YpO2xldCB5PXRoaXMuZ2V0T25lV2F5RWRnZXMoQSwhMSk7QS5pc0dyb3VwTm9kZXx8Xy5lYWNoKEEub3V0RW1iZWRkaW5ncyx4PT57Xy5lYWNoKHguaW5wdXRzLEM9PntpZihDLm5hbWU9PT12KXtsZXQgRj1uZXcgYy5NZXRhZWRnZUltcGwodix4Lm5hbWUpO0YuYWRkQmFzZUVkZ2Uoe2lzQ29udHJvbERlcGVuZGVuY3k6Qy5pc0NvbnRyb2xEZXBlbmRlbmN5LG91dHB1dFRlbnNvcktleTpDLm91dHB1dFRlbnNvcktleSxpc1JlZmVyZW5jZUVkZ2U6ITEsdix3OngubmFtZX0sdGhpcyk7eS5yZWd1bGFyLnB1c2goRil9fSl9KTtyZXR1cm4geX1nZXRPbmVXYXlFZGdlcyh2LEEpe2xldCB5PXtjb250cm9sOltdLHJlZ3VsYXI6W119O2lmKCF2LnBhcmVudE5vZGV8fCF2LnBhcmVudE5vZGUuaXNHcm91cE5vZGUpcmV0dXJuIHk7dmFyIHg9di5wYXJlbnROb2RlO2xldCBDPQp4Lm1ldGFncmFwaDt4PXRoaXMuZ2V0QnJpZGdlZ3JhcGgoeC5uYW1lKTtmKEMsdixBLHkpO2YoeCx2LEEseSk7cmV0dXJuIHl9Z2V0VG9wb2xvZ2ljYWxPcmRlcmluZyh2KXt2YXIgQT10aGlzLmluZGV4W3ZdO2lmKCFBKXRocm93IEVycm9yKCJDb3VsZCBub3QgZmluZCBub2RlIHdpdGggbmFtZTogIit2KTtpZighQS5pc0dyb3VwTm9kZSlyZXR1cm4gbnVsbDtpZih2IGluIHRoaXMub3JkZXJpbmdzKXJldHVybiB0aGlzLm9yZGVyaW5nc1t2XTtsZXQgeT17fSx4PXt9LEM9QS5tZXRhZ3JhcGg7Xy5lYWNoKEMuZWRnZXMoKSxEPT57Qy5lZGdlKEQpLm51bVJlZ3VsYXJFZGdlcyYmKEQudiBpbiB5fHwoeVtELnZdPVtdKSx5W0Qudl0ucHVzaChELncpLHhbRC53XT0hMCl9KTtsZXQgRj1fLmRpZmZlcmVuY2UoXy5rZXlzKHkpLF8ua2V5cyh4KSk7dj10aGlzLm9yZGVyaW5nc1t2XT17fTtmb3IoQT0wO0YubGVuZ3RoOyl7bGV0IEQ9Ri5zaGlmdCgpO3ZbRF09QSsrO18uZWFjaCh5W0RdLEI9PgpGLnB1c2goQikpO2RlbGV0ZSB5W0RdfXJldHVybiB2fWdldFRlbXBsYXRlSW5kZXgoKXtsZXQgdj1kMy5rZXlzKHRoaXMudGVtcGxhdGVzKSxBPWQzLnNjYWxlT3JkaW5hbCgpLmRvbWFpbih2KS5yYW5nZShkMy5yYW5nZSgwLHYubGVuZ3RoKSk7cmV0dXJuIHk9PkEoeSl9fWQuRGVmYXVsdEhpZXJhcmNoeVBhcmFtcz17dmVyaWZ5VGVtcGxhdGU6ITAsc2VyaWVzTm9kZU1pblNpemU6NSxzZXJpZXNNYXA6e30scmFua0RpcmVjdGlvbjoiQlQiLHVzZUdlbmVyYWxpemVkU2VyaWVzUGF0dGVybnM6ITF9O2QuYnVpbGQ9ZnVuY3Rpb24odixBLHkpe2xldCB4PW5ldyB0KHtyYW5rZGlyOkEucmFua0RpcmVjdGlvbn0pLEM9e307cmV0dXJuIGEuZ3JhcGgudXRpbC5ydW5Bc3luY1Rhc2soIkFkZGluZyBub2RlcyIsMjAsKCk9PntsZXQgRj17fSxEPXt9O18uZWFjaCh2Lm5vZGVzLEI9PntCLmRldmljZSYmKEZbQi5kZXZpY2VdPSEwKTtCLnhsYUNsdXN0ZXImJihEW0IueGxhQ2x1c3Rlcl09ITApfSk7CnguZGV2aWNlcz1fLmtleXMoRik7eC54bGFDbHVzdGVycz1fLmtleXMoRCk7Zyh4LHYpfSx5KS50aGVuKCgpPT5hLmdyYXBoLnV0aWwucnVuQXN5bmNUYXNrKCJEZXRlY3Qgc2VyaWVzIiwyMCwoKT0+ezA8QS5zZXJpZXNOb2RlTWluU2l6ZSYmayh4LnJvb3QseCxDLEEuc2VyaWVzTm9kZU1pblNpemUsQS5zZXJpZXNNYXAsQS51c2VHZW5lcmFsaXplZFNlcmllc1BhdHRlcm5zKX0seSkpLnRoZW4oKCk9PmEuZ3JhcGgudXRpbC5ydW5Bc3luY1Rhc2soIkFkZGluZyBlZGdlcyIsMzAsKCk9PntsKHgsdixDKX0seSkpLnRoZW4oKCk9PmEuZ3JhcGgudXRpbC5ydW5Bc3luY1Rhc2soIkZpbmRpbmcgc2ltaWxhciBzdWJncmFwaHMiLDMwLCgpPT57eC50ZW1wbGF0ZXM9Yy50ZW1wbGF0ZS5kZXRlY3QoeCxBLnZlcmlmeVRlbXBsYXRlKX0seSkpLnRoZW4oKCk9PngpfTtkLmpvaW5BbmRBZ2dyZWdhdGVTdGF0cz1mdW5jdGlvbih2KXtsZXQgQT17fSx5PXt9O18uZWFjaCh2LnJvb3QubGVhdmVzKCksCng9Pnt4PXYubm9kZSh4KTtudWxsIT14LmRldmljZSYmKEFbeC5kZXZpY2VdPSEwKTtudWxsIT14LnhsYUNsdXN0ZXImJih5W3gueGxhQ2x1c3Rlcl09ITApfSk7di5kZXZpY2VzPV8ua2V5cyhBKTt2LnhsYUNsdXN0ZXJzPV8ua2V5cyh5KTtfLmVhY2godi5nZXROb2RlTWFwKCkseD0+e3guaXNHcm91cE5vZGUmJih4LnN0YXRzPW5ldyBjLk5vZGVTdGF0cyhudWxsKSx4LmRldmljZUhpc3RvZ3JhbT17fSl9KTtfLmVhY2godi5yb290LmxlYXZlcygpLHg9PntsZXQgQz14PXYubm9kZSh4KTtmb3IoO251bGwhPUMucGFyZW50Tm9kZTspe2lmKG51bGwhPXguZGV2aWNlKXt2YXIgRj1DLnBhcmVudE5vZGUuZGV2aWNlSGlzdG9ncmFtO0ZbeC5kZXZpY2VdPShGW3guZGV2aWNlXXx8MCkrMX1udWxsIT14LnhsYUNsdXN0ZXImJihGPUMucGFyZW50Tm9kZS54bGFDbHVzdGVySGlzdG9ncmFtLEZbeC54bGFDbHVzdGVyXT0oRlt4LnhsYUNsdXN0ZXJdfHwwKSsxKTtudWxsIT14LnN0YXRzJiZDLnBhcmVudE5vZGUuc3RhdHMuY29tYmluZSh4LnN0YXRzKTsKQz1DLnBhcmVudE5vZGV9fSl9O2QuZ2V0SW5jb21wYXRpYmxlT3BzPWZ1bmN0aW9uKHYsQSl7bGV0IHk9W10seD17fTtfLmVhY2godi5yb290LmxlYXZlcygpLEM9PntDPXYubm9kZShDKTtpZihDLnR5cGU9PWMuTm9kZVR5cGUuT1Ape2lmKCFDLmNvbXBhdGlibGUpaWYoQy5vd25pbmdTZXJpZXMpaWYoQSYmQS5zZXJpZXNNYXBbQy5vd25pbmdTZXJpZXNdPT09YS5ncmFwaC5TZXJpZXNHcm91cGluZ1R5cGUuVU5HUk9VUCl5LnB1c2goQyk7ZWxzZXtpZigheFtDLm93bmluZ1Nlcmllc10pe2xldCBGPXYubm9kZShDLm93bmluZ1Nlcmllcyk7RiYmKHhbQy5vd25pbmdTZXJpZXNdPUYseS5wdXNoKEYpKX19ZWxzZSB5LnB1c2goQyk7Xy5lYWNoKEMuaW5FbWJlZGRpbmdzLEY9PntGLmNvbXBhdGlibGV8fHkucHVzaChGKX0pO18uZWFjaChDLm91dEVtYmVkZGluZ3MsRj0+e0YuY29tcGF0aWJsZXx8eS5wdXNoKEYpfSl9fSk7cmV0dXJuIHl9fSkoYy5oaWVyYXJjaHl8fChjLmhpZXJhcmNoeT0Ke30pKX0pKGEuZ3JhcGh8fChhLmdyYXBoPXt9KSl9KSh0Znx8KHRmPXt9KSk7Cjwvc2NyaXB0Pgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdGYtZ3JhcGgtY29tbW9uL2xheW91dC5qcwooZnVuY3Rpb24oYSl7KGZ1bmN0aW9uKGMpeyhmdW5jdGlvbihkKXtmdW5jdGlvbiBmKHgpe3gubm9kZS5pc0dyb3VwTm9kZSYmbCh4KTt4Lm5vZGUudHlwZT09PWMuTm9kZVR5cGUuTUVUQT9tKHgpOngubm9kZS50eXBlPT09Yy5Ob2RlVHlwZS5TRVJJRVMmJnAoeCl9ZnVuY3Rpb24gZyh4KXt4LmluYm94V2lkdGg9MDx4LmluQW5ub3RhdGlvbnMubGlzdC5sZW5ndGg/ZC5QQVJBTVMuYW5ub3RhdGlvbnMuaW5ib3hXaWR0aDowO3gub3V0Ym94V2lkdGg9MDx4Lm91dEFubm90YXRpb25zLmxpc3QubGVuZ3RoP2QuUEFSQU1TLmFubm90YXRpb25zLm91dGJveFdpZHRoOjA7eC5jb3JlQm94LndpZHRoPXgud2lkdGg7eC5jb3JlQm94LmhlaWdodD14LmhlaWdodDt4LndpZHRoPU1hdGgubWF4KHguY29yZUJveC53aWR0aCt4LmluYm94V2lkdGgreC5vdXRib3hXaWR0aCwzKnguZGlzcGxheU5hbWUubGVuZ3RoKX1mdW5jdGlvbiBsKHgpe2xldCBDPXguY29yZUdyYXBoLm5vZGVzKCkubWFwKEY9Pgp4LmNvcmVHcmFwaC5ub2RlKEYpKS5jb25jYXQoeC5pc29sYXRlZEluRXh0cmFjdCx4Lmlzb2xhdGVkT3V0RXh0cmFjdCx4LmxpYnJhcnlGdW5jdGlvbnNFeHRyYWN0KTtfLmVhY2goQyxGPT57c3dpdGNoKEYubm9kZS50eXBlKXtjYXNlIGMuTm9kZVR5cGUuT1A6Xy5leHRlbmQoRixkLlBBUkFNUy5ub2RlU2l6ZS5vcCk7YnJlYWs7Y2FzZSBjLk5vZGVUeXBlLkJSSURHRTpfLmV4dGVuZChGLGQuUEFSQU1TLm5vZGVTaXplLmJyaWRnZSk7YnJlYWs7Y2FzZSBjLk5vZGVUeXBlLk1FVEE6Ri5leHBhbmRlZD9mKEYpOihfLmV4dGVuZChGLGQuUEFSQU1TLm5vZGVTaXplLm1ldGEpLEYuaGVpZ2h0PWQuUEFSQU1TLm5vZGVTaXplLm1ldGEuaGVpZ2h0KEYubm9kZS5jYXJkaW5hbGl0eSkpO2JyZWFrO2Nhc2UgYy5Ob2RlVHlwZS5TRVJJRVM6Ri5leHBhbmRlZD8oXy5leHRlbmQoRixkLlBBUkFNUy5ub2RlU2l6ZS5zZXJpZXMuZXhwYW5kZWQpLGYoRikpOl8uZXh0ZW5kKEYsRi5ub2RlLmhhc05vbkNvbnRyb2xFZGdlcz8KZC5QQVJBTVMubm9kZVNpemUuc2VyaWVzLnZlcnRpY2FsOmQuUEFSQU1TLm5vZGVTaXplLnNlcmllcy5ob3Jpem9udGFsKTticmVhaztkZWZhdWx0OnRocm93IEVycm9yKCJVbnJlY29nbml6ZWQgbm9kZSB0eXBlOiAiK0Yubm9kZS50eXBlKTt9Ri5leHBhbmRlZHx8ZyhGKTtxKEYpfSl9ZnVuY3Rpb24gayh4LEMpe18uZXh0ZW5kKHguZ3JhcGgoKSx7bm9kZXNlcDpDLm5vZGVTZXAscmFua3NlcDpDLnJhbmtTZXAsZWRnZXNlcDpDLmVkZ2VTZXB9KTtsZXQgRj1bXSxEPVtdO18uZWFjaCh4Lm5vZGVzKCksSj0+e3gubm9kZShKKS5ub2RlLnR5cGU9PT1jLk5vZGVUeXBlLkJSSURHRT9GLnB1c2goSik6RC5wdXNoKEopfSk7aWYoIUQubGVuZ3RoKXJldHVybnt3aWR0aDowLGhlaWdodDowfTtkYWdyZS5sYXlvdXQoeCk7bGV0IEI9SW5maW5pdHksRz1JbmZpbml0eSxLPS1JbmZpbml0eSxMPS1JbmZpbml0eTtfLmVhY2goRCxKPT57Sj14Lm5vZGUoSik7dmFyIFA9LjUqSi53aWR0aCxTPUoueC0KUDtQPUoueCtQO0I9UzxCP1M6QjtLPVA+Sz9QOks7UD0uNSpKLmhlaWdodDtTPUoueS1QO0o9Si55K1A7Rz1TPEc/UzpHO0w9Sj5MP0o6TH0pO18uZWFjaCh4LmVkZ2VzKCksSj0+e0o9eC5lZGdlKEopO2lmKCFKLnN0cnVjdHVyYWwpe3ZhciBQPXgubm9kZShKLm1ldGFlZGdlLnYpLFM9eC5ub2RlKEoubWV0YWVkZ2Uudyk7aWYoMz09PUoucG9pbnRzLmxlbmd0aCYmQShKLnBvaW50cykpe2lmKG51bGwhPVApe3ZhciBOPVAuZXhwYW5kZWQ/UC54OnQoUCk7Si5wb2ludHNbMF0ueD1OfW51bGwhPVMmJihOPVMuZXhwYW5kZWQ/Uy54OnQoUyksSi5wb2ludHNbMl0ueD1OKTtKLnBvaW50cz1bSi5wb2ludHNbMF0sSi5wb2ludHNbMV1dfU49Si5wb2ludHNbSi5wb2ludHMubGVuZ3RoLTJdO251bGwhPVMmJihKLnBvaW50c1tKLnBvaW50cy5sZW5ndGgtMV09eShOLFMpKTtTPUoucG9pbnRzWzFdO251bGwhPVAmJihKLnBvaW50c1swXT15KFMsUCkpO18uZWFjaChKLnBvaW50cyxUPT57Qj1ULng8CkI/VC54OkI7Sz1ULng+Sz9ULng6SztHPVQueTxHP1QueTpHO0w9VC55Pkw/VC55Okx9KX19KTtfLmVhY2goeC5ub2RlcygpLEo9PntKPXgubm9kZShKKTtKLngtPUI7Si55LT1HfSk7Xy5lYWNoKHguZWRnZXMoKSxKPT57Xy5lYWNoKHguZWRnZShKKS5wb2ludHMsUD0+e1AueC09QjtQLnktPUd9KX0pO3JldHVybnt3aWR0aDpLLUIsaGVpZ2h0OkwtR319ZnVuY3Rpb24gbSh4KXtsZXQgQz1kLlBBUkFNUy5zdWJzY2VuZS5tZXRhO18uZXh0ZW5kKHgsQyk7Xy5leHRlbmQoeC5jb3JlQm94LGsoeC5jb3JlR3JhcGgsZC5QQVJBTVMuZ3JhcGgubWV0YSkpO3ZhciBGPXguaXNvbGF0ZWRJbkV4dHJhY3QubGVuZ3RoP18ubWF4KHguaXNvbGF0ZWRJbkV4dHJhY3QsQj0+Qi53aWR0aCkud2lkdGg6bnVsbDt4LmluRXh0cmFjdEJveC53aWR0aD1udWxsIT1GP0Y6MDt4LmluRXh0cmFjdEJveC5oZWlnaHQ9Xy5yZWR1Y2UoeC5pc29sYXRlZEluRXh0cmFjdCwoQixHLEspPT57Sz0wPEs/Qy5leHRyYWN0WU9mZnNldDoKMDtHLng9MDtHLnk9QitLK0cuaGVpZ2h0LzI7cmV0dXJuIEIrSytHLmhlaWdodH0sMCk7Rj14Lmlzb2xhdGVkT3V0RXh0cmFjdC5sZW5ndGg/Xy5tYXgoeC5pc29sYXRlZE91dEV4dHJhY3QsQj0+Qi53aWR0aCkud2lkdGg6bnVsbDt4Lm91dEV4dHJhY3RCb3gud2lkdGg9bnVsbCE9Rj9GOjA7eC5vdXRFeHRyYWN0Qm94LmhlaWdodD1fLnJlZHVjZSh4Lmlzb2xhdGVkT3V0RXh0cmFjdCwoQixHLEspPT57Sz0wPEs/Qy5leHRyYWN0WU9mZnNldDowO0cueD0wO0cueT1CK0srRy5oZWlnaHQvMjtyZXR1cm4gQitLK0cuaGVpZ2h0fSwwKTtGPXgubGlicmFyeUZ1bmN0aW9uc0V4dHJhY3QubGVuZ3RoP18ubWF4KHgubGlicmFyeUZ1bmN0aW9uc0V4dHJhY3QsQj0+Qi53aWR0aCkud2lkdGg6bnVsbDt4LmxpYnJhcnlGdW5jdGlvbnNCb3gud2lkdGg9bnVsbCE9Rj9GOjA7eC5saWJyYXJ5RnVuY3Rpb25zQm94LmhlaWdodD1fLnJlZHVjZSh4LmxpYnJhcnlGdW5jdGlvbnNFeHRyYWN0LChCLEcsCkspPT57Sz0wPEs/Qy5leHRyYWN0WU9mZnNldDowO0cueD0wO0cueT1CK0srRy5oZWlnaHQvMjtyZXR1cm4gQitLK0cuaGVpZ2h0fSwwKTtGPTA7MDx4Lmlzb2xhdGVkSW5FeHRyYWN0Lmxlbmd0aCYmRisrOzA8eC5pc29sYXRlZE91dEV4dHJhY3QubGVuZ3RoJiZGKys7MDx4LmxpYnJhcnlGdW5jdGlvbnNFeHRyYWN0Lmxlbmd0aCYmRisrOzA8eC5jb3JlR3JhcGgubm9kZUNvdW50KCkmJkYrKztsZXQgRD1kLlBBUkFNUy5zdWJzY2VuZS5tZXRhLmV4dHJhY3RYT2Zmc2V0O0Y9MT49Rj8wOkYqRDt4LmNvcmVCb3gud2lkdGgrPU1hdGgubWF4KGQuTUlOX0FVWF9XSURUSCx4LmluRXh0cmFjdEJveC53aWR0aCt4Lm91dEV4dHJhY3RCb3gud2lkdGgpK0YreC5saWJyYXJ5RnVuY3Rpb25zQm94LndpZHRoK0Y7eC5jb3JlQm94LmhlaWdodD1DLmxhYmVsSGVpZ2h0K01hdGgubWF4KHguaW5FeHRyYWN0Qm94LmhlaWdodCx4LmNvcmVCb3guaGVpZ2h0LHgubGlicmFyeUZ1bmN0aW9uc0JveC5oZWlnaHQsCngub3V0RXh0cmFjdEJveC5oZWlnaHQpO3gud2lkdGg9eC5jb3JlQm94LndpZHRoK0MucGFkZGluZ0xlZnQrQy5wYWRkaW5nUmlnaHQ7eC5oZWlnaHQ9eC5wYWRkaW5nVG9wK3guY29yZUJveC5oZWlnaHQreC5wYWRkaW5nQm90dG9tfWZ1bmN0aW9uIHAoeCl7bGV0IEM9eC5jb3JlR3JhcGgsRj1kLlBBUkFNUy5zdWJzY2VuZS5zZXJpZXM7Xy5leHRlbmQoeCxGKTtfLmV4dGVuZCh4LmNvcmVCb3gsayh4LmNvcmVHcmFwaCxkLlBBUkFNUy5ncmFwaC5zZXJpZXMpKTtfLmVhY2goQy5ub2RlcygpLEQ9PntDLm5vZGUoRCkuZXhjbHVkZWQ9ITF9KTt4LndpZHRoPXguY29yZUJveC53aWR0aCtGLnBhZGRpbmdMZWZ0K0YucGFkZGluZ1JpZ2h0O3guaGVpZ2h0PXguY29yZUJveC5oZWlnaHQrRi5wYWRkaW5nVG9wK0YucGFkZGluZ0JvdHRvbX1mdW5jdGlvbiBxKHgpe2lmKCF4LmV4cGFuZGVkKXt2YXIgQz14LmluQW5ub3RhdGlvbnMubGlzdCxGPXgub3V0QW5ub3RhdGlvbnMubGlzdDtfLmVhY2goQywKUD0+cihQKSk7Xy5lYWNoKEYsUD0+cihQKSk7dmFyIEQ9ZC5QQVJBTVMuYW5ub3RhdGlvbnMsQj1fLnJlZHVjZShDLChQLFMsTik9PntOPTA8Tj9ELnlPZmZzZXQ6MDtTLmR4PS0oeC5jb3JlQm94LndpZHRoK1Mud2lkdGgpLzItRC54T2Zmc2V0O1MuZHk9UCtOK1MuaGVpZ2h0LzI7cmV0dXJuIFArTitTLmhlaWdodH0sMCk7Xy5lYWNoKEMsUD0+e1AuZHktPUIvMjtQLmxhYmVsT2Zmc2V0PUQubGFiZWxPZmZzZXR9KTt2YXIgRz1fLnJlZHVjZShGLChQLFMsTik9PntOPTA8Tj9ELnlPZmZzZXQ6MDtTLmR4PSh4LmNvcmVCb3gud2lkdGgrUy53aWR0aCkvMitELnhPZmZzZXQ7Uy5keT1QK04rUy5oZWlnaHQvMjtyZXR1cm4gUCtOK1MuaGVpZ2h0fSwwKTtfLmVhY2goRixQPT57UC5keS09Ry8yO1AubGFiZWxPZmZzZXQ9RC5sYWJlbE9mZnNldH0pO3ZhciBLPU1hdGgubWluKHguaGVpZ2h0LzIteC5yYWRpdXMsQi8yKTtLPTA+Sz8wOks7dmFyIEw9ZDMuc2NhbGVMaW5lYXIoKS5kb21haW4oWzAsCkMubGVuZ3RoLTFdKS5yYW5nZShbLUssS10pO18uZWFjaChDLChQLFMpPT57UC5wb2ludHM9W3tkeDpQLmR4K1Aud2lkdGgvMixkeTpQLmR5fSx7ZHg6LXguY29yZUJveC53aWR0aC8yLGR5OjE8Qy5sZW5ndGg/TChTKTowfV19KTtLPU1hdGgubWluKHguaGVpZ2h0LzIteC5yYWRpdXMsRy8yKTtLPTA+Sz8wOks7dmFyIEo9ZDMuc2NhbGVMaW5lYXIoKS5kb21haW4oWzAsRi5sZW5ndGgtMV0pLnJhbmdlKFstSyxLXSk7Xy5lYWNoKEYsKFAsUyk9PntQLnBvaW50cz1be2R4OnguY29yZUJveC53aWR0aC8yLGR5OjE8Ri5sZW5ndGg/SihTKTowfSx7ZHg6UC5keC1QLndpZHRoLzIsZHk6UC5keX1dfSk7eC5oZWlnaHQ9TWF0aC5tYXgoeC5oZWlnaHQsQixHKX19ZnVuY3Rpb24gcih4KXtzd2l0Y2goeC5hbm5vdGF0aW9uVHlwZSl7Y2FzZSBjLnJlbmRlci5Bbm5vdGF0aW9uVHlwZS5DT05TVEFOVDpfLmV4dGVuZCh4LGQuUEFSQU1TLmNvbnN0YW50LnNpemUpO2JyZWFrO2Nhc2UgYy5yZW5kZXIuQW5ub3RhdGlvblR5cGUuU0hPUlRDVVQ6aWYoeC5ub2RlLnR5cGU9PT0KYy5Ob2RlVHlwZS5PUClfLmV4dGVuZCh4LGQuUEFSQU1TLnNob3J0Y3V0U2l6ZS5vcCk7ZWxzZSBpZih4Lm5vZGUudHlwZT09PWMuTm9kZVR5cGUuTUVUQSlfLmV4dGVuZCh4LGQuUEFSQU1TLnNob3J0Y3V0U2l6ZS5tZXRhKTtlbHNlIGlmKHgubm9kZS50eXBlPT09Yy5Ob2RlVHlwZS5TRVJJRVMpXy5leHRlbmQoeCxkLlBBUkFNUy5zaG9ydGN1dFNpemUuc2VyaWVzKTtlbHNlIHRocm93IEVycm9yKCJJbnZhbGlkIG5vZGUgdHlwZTogIit4Lm5vZGUudHlwZSk7YnJlYWs7Y2FzZSBjLnJlbmRlci5Bbm5vdGF0aW9uVHlwZS5TVU1NQVJZOl8uZXh0ZW5kKHgsZC5QQVJBTVMuY29uc3RhbnQuc2l6ZSl9fWZ1bmN0aW9uIHQoeCl7cmV0dXJuIHguZXhwYW5kZWQ/eC54OngueC14LndpZHRoLzIrKHguaW5Bbm5vdGF0aW9ucy5saXN0Lmxlbmd0aD94LmluYm94V2lkdGg6MCkreC5jb3JlQm94LndpZHRoLzJ9ZnVuY3Rpb24gdih4LEMpe3JldHVybiAxODAqTWF0aC5hdGFuKChDLnkteC55KS8oQy54LQp4LngpKS9NYXRoLlBJfWZ1bmN0aW9uIEEoeCl7bGV0IEM9dih4WzBdLHhbMV0pO2ZvcihsZXQgRj0xO0Y8eC5sZW5ndGgtMTtGKyspe2xldCBEPXYoeFtGXSx4W0YrMV0pO2lmKDE8TWF0aC5hYnMoRC1DKSlyZXR1cm4hMTtDPUR9cmV0dXJuITB9ZnVuY3Rpb24geSh4LEMpe2xldCBGPUMuZXhwYW5kZWQ/Qy54OnQoQyksRD1DLnk7dmFyIEI9eC54LUY7eD14LnktRDtsZXQgRz1DLmV4cGFuZGVkP0Mud2lkdGg6Qy5jb3JlQm94LndpZHRoLEs9Qy5leHBhbmRlZD9DLmhlaWdodDpDLmNvcmVCb3guaGVpZ2h0O01hdGguYWJzKHgpKkcvMj5NYXRoLmFicyhCKSpLLzI/KDA+eCYmKEs9LUspLEM9MD09PXg/MDpLLzIqQi94LEI9Sy8yKTooMD5CJiYoRz0tRyksQz1HLzIsQj0wPT09Qj8wOkcvMip4L0IpO3JldHVybnt4OkYrQyx5OkQrQn19ZC5QQVJBTVM9e2FuaW1hdGlvbjp7ZHVyYXRpb246MjUwfSxncmFwaDp7bWV0YTp7bm9kZVNlcDo1LHJhbmtTZXA6MjUsZWRnZVNlcDo1fSxzZXJpZXM6e25vZGVTZXA6NSwKcmFua1NlcDoyNSxlZGdlU2VwOjV9LHBhZGRpbmc6e3BhZGRpbmdUb3A6NDAscGFkZGluZ0xlZnQ6MjB9fSxzdWJzY2VuZTp7bWV0YTp7cGFkZGluZ1RvcDoxMCxwYWRkaW5nQm90dG9tOjEwLHBhZGRpbmdMZWZ0OjEwLHBhZGRpbmdSaWdodDoxMCxsYWJlbEhlaWdodDoyMCxleHRyYWN0WE9mZnNldDoxNSxleHRyYWN0WU9mZnNldDoyMH0sc2VyaWVzOntwYWRkaW5nVG9wOjEwLHBhZGRpbmdCb3R0b206MTAscGFkZGluZ0xlZnQ6MTAscGFkZGluZ1JpZ2h0OjEwLGxhYmVsSGVpZ2h0OjEwfX0sbm9kZVNpemU6e21ldGE6e3JhZGl1czo1LHdpZHRoOjYwLG1heExhYmVsV2lkdGg6NTIsaGVpZ2h0OmQzLnNjYWxlTGluZWFyKCkuZG9tYWluKFsxLDIwMF0pLnJhbmdlKFsxNSw2MF0pLmNsYW1wKCEwKSxleHBhbmRCdXR0b25SYWRpdXM6M30sb3A6e3dpZHRoOjE1LGhlaWdodDo2LHJhZGl1czozLGxhYmVsT2Zmc2V0Oi04LG1heExhYmVsV2lkdGg6MzB9LHNlcmllczp7ZXhwYW5kZWQ6e3JhZGl1czoxMCwKbGFiZWxPZmZzZXQ6MH0sdmVydGljYWw6e3dpZHRoOjE2LGhlaWdodDoxMyxsYWJlbE9mZnNldDotMTN9LGhvcml6b250YWw6e3dpZHRoOjI0LGhlaWdodDo4LHJhZGl1czoxMCxsYWJlbE9mZnNldDotMTB9fSxicmlkZ2U6e3dpZHRoOjIwLGhlaWdodDoyMCxyYWRpdXM6MixsYWJlbE9mZnNldDowfX0sc2hvcnRjdXRTaXplOntvcDp7d2lkdGg6MTAsaGVpZ2h0OjR9LG1ldGE6e3dpZHRoOjEyLGhlaWdodDo0LHJhZGl1czoxfSxzZXJpZXM6e3dpZHRoOjE0LGhlaWdodDo0fX0sYW5ub3RhdGlvbnM6e2luYm94V2lkdGg6NTAsb3V0Ym94V2lkdGg6NTAseE9mZnNldDoxMCx5T2Zmc2V0OjMsbGFiZWxPZmZzZXQ6MixtYXhMYWJlbFdpZHRoOjEyMH0sY29uc3RhbnQ6e3NpemU6e3dpZHRoOjQsaGVpZ2h0OjR9fSxzZXJpZXM6e21heFN0YWNrQ291bnQ6MyxwYXJhbGxlbFN0YWNrT2Zmc2V0UmF0aW86LjIsdG93ZXJTdGFja09mZnNldFJhdGlvOi41fSxtaW5pbWFwOntzaXplOjE1MH19O2QuTUlOX0FVWF9XSURUSD0KMTQwO2QubGF5b3V0U2NlbmU9ZjtkLmNvbXB1dGVDWFBvc2l0aW9uT2ZOb2RlU2hhcGU9dH0pKGMubGF5b3V0fHwoYy5sYXlvdXQ9e30pKX0pKGEuZ3JhcGh8fChhLmdyYXBoPXt9KSl9KSh0Znx8KHRmPXt9KSk7Cjwvc2NyaXB0Pgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdGYtZ3JhcGgtY29tbW9uL2xvYWRlci5qcwp2YXIgaG09dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKGEsYyxkLGYpe3JldHVybiBuZXcgKGR8fChkPVByb21pc2UpKShmdW5jdGlvbihnLGwpe2Z1bmN0aW9uIGsocSl7dHJ5e3AoZi5uZXh0KHEpKX1jYXRjaChyKXtsKHIpfX1mdW5jdGlvbiBtKHEpe3RyeXtwKGZbInRocm93Il0ocSkpfWNhdGNoKHIpe2wocil9fWZ1bmN0aW9uIHAocSl7cS5kb25lP2cocS52YWx1ZSk6KG5ldyBkKGZ1bmN0aW9uKHIpe3IocS52YWx1ZSl9KSkudGhlbihrLG0pfXAoKGY9Zi5hcHBseShhLGN8fFtdKSkubmV4dCgpKX0pfTsKKGZ1bmN0aW9uKGEpeyhmdW5jdGlvbihjKXsoZnVuY3Rpb24oZCl7ZC5mZXRjaEFuZENvbnN0cnVjdEhpZXJhcmNoaWNhbEdyYXBoPWZ1bmN0aW9uKGYsZyxsLGs9bmV3IGMub3AuVHB1Q29tcGF0aWJpbGl0eVByb3ZpZGVyLG09Yy5oaWVyYXJjaHkuRGVmYXVsdEhpZXJhcmNoeVBhcmFtcyl7Y29uc3QgcD1jLnV0aWwuZ2V0U3VidGFza1RyYWNrZXIoZiwyMCwiR3JhcGgiKSxxPWMudXRpbC5nZXRTdWJ0YXNrVHJhY2tlcihmLDUwLCJOYW1lc3BhY2UgaGllcmFyY2h5Iik7cmV0dXJuIGMucGFyc2VyLmZldGNoQW5kUGFyc2VHcmFwaERhdGEoZyxsLGMudXRpbC5nZXRTdWJ0YXNrVHJhY2tlcihmLDMwLCJEYXRhIikpLnRoZW4oZnVuY3Rpb24ocil7aWYoIXIubm9kZSl0aHJvdyBFcnJvcigiVGhlIGdyYXBoIGlzIGVtcHR5LiBUaGlzIGNhbiBoYXBwZW4gd2hlbiBUZW5zb3JGbG93IGNvdWxkIG5vdCB0cmFjZSBhbnkgZ3JhcGguIFBsZWFzZSByZWZlciB0byBodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9pc3N1ZXMvMTk2MSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iKTsKcmV0dXJuIGMuYnVpbGQocixjLkRlZmF1bHRCdWlsZFBhcmFtcyxwKX0sKCk9Pnt0aHJvdyBFcnJvcigiTWFsZm9ybWVkIEdyYXBoRGVmLiBUaGlzIGNhbiBzb21ldGltZXMgYmUgY2F1c2VkIGJ5IGEgYmFkIG5ldHdvcmsgY29ubmVjdGlvbiBvciBkaWZmaWN1bHR5IHJlY29uY2lsaW5nIG11bHRpcGxlIEdyYXBoRGVmczsgZm9yIHRoZSBsYXR0ZXIgY2FzZSwgcGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2lzc3Vlcy8xOTI5LiIpO30pLnRoZW4ocj0+aG0odGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2Mub3AuY2hlY2tPcHNGb3JDb21wYXRpYmlsaXR5KHIsayk7Y29uc3QgdD15aWVsZCBjLmhpZXJhcmNoeS5idWlsZChyLG0scSk7cmV0dXJue2dyYXBoOnIsZ3JhcGhIaWVyYXJjaHk6dH19KSkuY2F0Y2gocj0+e2YucmVwb3J0RXJyb3IoYEdyYXBoIHZpc3VhbGl6YXRpb24gZmFpbGVkLlxuXG4ke3J9YCxyKTt0aHJvdyByOwp9KX19KShjLmxvYWRlcnx8KGMubG9hZGVyPXt9KSl9KShhLmdyYXBofHwoYS5ncmFwaD17fSkpfSkodGZ8fCh0Zj17fSkpOwo8L3NjcmlwdD4KPHNjcmlwdD4vL35+V0VCUEFUSH5+L3RmLWdyYXBoLWNvbW1vbi9ub2RlLmpzCihmdW5jdGlvbihhKXsoZnVuY3Rpb24oYyl7KGZ1bmN0aW9uKGQpeyhmdW5jdGlvbihmKXtmdW5jdGlvbiBnKGNhLGVhLGthKXtpZihlYS5ub2RlLmlzR3JvdXBOb2RlKXtpZihlYS5leHBhbmRlZClyZXR1cm4gZC5idWlsZEdyb3VwKGNhLGVhLGthLGQuQ2xhc3MuU3Vic2NlbmUuR1JPVVApO2Quc2VsZWN0Q2hpbGQoY2EsImciLGQuQ2xhc3MuU3Vic2NlbmUuR1JPVVApLnJlbW92ZSgpfXJldHVybiBudWxsfWZ1bmN0aW9uIGwoY2EsZWEpe2xldCBrYT1lYS54LWVhLndpZHRoLzIrZWEucGFkZGluZ0xlZnQ7ZWE9ZWEueS1lYS5oZWlnaHQvMitlYS5wYWRkaW5nVG9wO2NhPWQuc2VsZWN0Q2hpbGQoY2EsImciLGQuQ2xhc3MuU3Vic2NlbmUuR1JPVVApO2QudHJhbnNsYXRlKGNhLGthLGVhKX1mdW5jdGlvbiBrKGNhLGVhLGthKXtjYT1kLnNlbGVjdE9yQ3JlYXRlQ2hpbGQoY2EsImciLGQuQ2xhc3MuTm9kZS5CVVRUT05fQ09OVEFJTkVSKTtkLnNlbGVjdE9yQ3JlYXRlQ2hpbGQoY2EsImNpcmNsZSIsCmQuQ2xhc3MuTm9kZS5CVVRUT05fQ0lSQ0xFKTtkLnNlbGVjdE9yQ3JlYXRlQ2hpbGQoY2EsInBhdGgiLGQuQ2xhc3MuTm9kZS5FWFBBTkRfQlVUVE9OKS5hdHRyKCJkIiwiTTAsLTIuMiBWMi4yIE0tMi4yLDAgSDIuMiIpO2Quc2VsZWN0T3JDcmVhdGVDaGlsZChjYSwicGF0aCIsZC5DbGFzcy5Ob2RlLkNPTExBUFNFX0JVVFRPTikuYXR0cigiZCIsIk0tMi4yLDAgSDIuMiIpO2NhLm9uKCJjbGljayIsYmE9PntkMy5ldmVudC5zdG9wUHJvcGFnYXRpb24oKTtrYS5maXJlKCJub2RlLXRvZ2dsZS1leHBhbmQiLHtuYW1lOmJhLm5vZGUubmFtZX0pfSk7ZC5wb3NpdGlvbkJ1dHRvbihjYSxlYSl9ZnVuY3Rpb24gbShjYSxlYSxrYSxiYSl7aWYoYmEpY2EuYXR0cigicG9pbnRlci1ldmVudHMiLCJub25lIik7ZWxzZXt2YXIgbGE9ZC5jb250ZXh0bWVudS5nZXRNZW51KGthLHAoZWEubm9kZSxrYSkpO2NhLm9uKCJkYmxjbGljayIsd2E9PntrYS5maXJlKCJub2RlLXRvZ2dsZS1leHBhbmQiLAp7bmFtZTp3YS5ub2RlLm5hbWV9KX0pLm9uKCJtb3VzZW92ZXIiLHdhPT57a2EuaXNOb2RlRXhwYW5kZWQod2EpfHxrYS5maXJlKCJub2RlLWhpZ2hsaWdodCIse25hbWU6d2Eubm9kZS5uYW1lfSl9KS5vbigibW91c2VvdXQiLHdhPT57a2EuaXNOb2RlRXhwYW5kZWQod2EpfHxrYS5maXJlKCJub2RlLXVuaGlnaGxpZ2h0Iix7bmFtZTp3YS5ub2RlLm5hbWV9KX0pLm9uKCJjbGljayIsd2E9PntkMy5ldmVudC5zdG9wUHJvcGFnYXRpb24oKTtrYS5maXJlKCJub2RlLXNlbGVjdCIse25hbWU6d2Eubm9kZS5uYW1lfSl9KS5vbigiY29udGV4dG1lbnUiLCh3YSxDYSk9PntrYS5maXJlKCJub2RlLXNlbGVjdCIse25hbWU6d2Eubm9kZS5uYW1lfSk7bGEuY2FsbCh3YSxDYSl9KX19ZnVuY3Rpb24gcChjYSxlYSl7bGV0IGthPVt7dGl0bGU6KCk9PmMuZ2V0SW5jbHVkZU5vZGVCdXR0b25TdHJpbmcoY2EuaW5jbHVkZSksYWN0aW9uOigpPT57ZWEuZmlyZSgibm9kZS10b2dnbGUtZXh0cmFjdCIsCntuYW1lOmNhLm5hbWV9KX19XTtlYS5ub2RlQ29udGV4dE1lbnVJdGVtcyYmKGthPWthLmNvbmNhdChlYS5ub2RlQ29udGV4dE1lbnVJdGVtcykpO3EoY2EpJiZrYS5wdXNoKHt0aXRsZTooKT0+dihjYSksYWN0aW9uOigpPT57ZWEuZmlyZSgibm9kZS10b2dnbGUtc2VyaWVzZ3JvdXAiLHtuYW1lOnIoY2EpfSl9fSk7cmV0dXJuIGthfWZ1bmN0aW9uIHEoY2Epe3JldHVybiBudWxsIT09cihjYSl9ZnVuY3Rpb24gcihjYSl7cmV0dXJuIGNhP2NhLnR5cGU9PT1jLk5vZGVUeXBlLlNFUklFUz9jYS5uYW1lOmNhLnR5cGU9PT1jLk5vZGVUeXBlLk9QP2NhLm93bmluZ1NlcmllczpudWxsOm51bGx9ZnVuY3Rpb24gdChjYSl7bGV0IGVhPW51bGw7aWYoIWNhKXJldHVybiBudWxsO2NhLnR5cGU9PT1jLk5vZGVUeXBlLlNFUklFUz9lYT1jYTpjYS5wYXJlbnROb2RlJiZjYS5wYXJlbnROb2RlLnR5cGU9PT1jLk5vZGVUeXBlLlNFUklFUyYmKGVhPWNhLnBhcmVudE5vZGUpO3JldHVybiBlYX1mdW5jdGlvbiB2KGNhKXtyZXR1cm4gYS5ncmFwaC5nZXRHcm91cFNlcmllc05vZGVCdXR0b25TdHJpbmcobnVsbCE9PQp0KGNhKT9hLmdyYXBoLlNlcmllc0dyb3VwaW5nVHlwZS5HUk9VUDphLmdyYXBoLlNlcmllc0dyb3VwaW5nVHlwZS5VTkdST1VQKX1mdW5jdGlvbiBBKGNhLGVhLGthKXt2YXIgYmE9ZWEuZGlzcGxheU5hbWU7bGV0IGxhPWVhLm5vZGUudHlwZT09PWMuTm9kZVR5cGUuTUVUQSYmIWVhLmV4cGFuZGVkO2NhPWQuc2VsZWN0T3JDcmVhdGVDaGlsZChjYSwidGV4dCIsZC5DbGFzcy5Ob2RlLkxBQkVMKTtsZXQgd2E9Y2Eubm9kZSgpO3dhLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQod2EpO2NhLmF0dHIoImR5IiwiLjM1ZW0iKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpO2xhJiYoYmEubGVuZ3RoPmthLm1heE1ldGFub2RlTGFiZWxMZW5ndGgmJihiYT1iYS5zdWJzdHIoMCxrYS5tYXhNZXRhbm9kZUxhYmVsTGVuZ3RoLTIpKyIuLi4iKSxrYT14KGthKSxjYS5hdHRyKCJmb250LXNpemUiLGthKGJhLmxlbmd0aCkrInB4IikpO2JhPWNhLnRleHQoYmEpO3koYmEsZWEubm9kZS50eXBlLGVhKTsKcmV0dXJuIGNhfWZ1bmN0aW9uIHkoY2EsZWEsa2Epe2xldCBiYT1jYS5ub2RlKCk7dmFyIGxhPWJhLmdldENvbXB1dGVkVGV4dExlbmd0aCgpO2xldCB3YT1iYS50ZXh0Q29udGVudCxDYT1udWxsO3N3aXRjaChlYSl7Y2FzZSBjLk5vZGVUeXBlLk1FVEE6a2EmJiFrYS5leHBhbmRlZCYmKENhPWMubGF5b3V0LlBBUkFNUy5ub2RlU2l6ZS5tZXRhLm1heExhYmVsV2lkdGgpO2JyZWFrO2Nhc2UgYy5Ob2RlVHlwZS5PUDpDYT1jLmxheW91dC5QQVJBTVMubm9kZVNpemUub3AubWF4TGFiZWxXaWR0aDticmVhaztjYXNlIC0xOkNhPWMubGF5b3V0LlBBUkFNUy5hbm5vdGF0aW9ucy5tYXhMYWJlbFdpZHRofWlmKCEobnVsbD09PUNhfHxsYTw9Q2EpKXtmb3IobGE9MTtiYS5nZXRTdWJTdHJpbmdMZW5ndGgoMCxsYSk8Q2E7KWxhKys7ZWE9YmEudGV4dENvbnRlbnQuc3Vic3RyKDAsbGEpO2RvIGVhPWVhLnN1YnN0cigwLGVhLmxlbmd0aC0xKSxiYS50ZXh0Q29udGVudD1lYSsiLi4uIixsYT1iYS5nZXRDb21wdXRlZFRleHRMZW5ndGgoKTsKd2hpbGUobGE+Q2EmJjA8ZWEubGVuZ3RoKTtyZXR1cm4gY2EuYXBwZW5kKCJ0aXRsZSIpLnRleHQod2EpfX1mdW5jdGlvbiB4KGNhKXtoYXx8KGhhPWQzLnNjYWxlTGluZWFyKCkuZG9tYWluKFtjYS5tYXhNZXRhbm9kZUxhYmVsTGVuZ3RoTGFyZ2VGb250LGNhLm1heE1ldGFub2RlTGFiZWxMZW5ndGhdKS5yYW5nZShbY2EubWF4TWV0YW5vZGVMYWJlbExlbmd0aEZvbnRTaXplLGNhLm1pbk1ldGFub2RlTGFiZWxMZW5ndGhGb250U2l6ZV0pLmNsYW1wKCEwKSk7cmV0dXJuIGhhfWZ1bmN0aW9uIEMoY2EsZWEsa2EsYmEpe2Quc2VsZWN0Q2hpbGQoY2EsInRleHQiLGQuQ2xhc3MuTm9kZS5MQUJFTCkudHJhbnNpdGlvbigpLmF0dHIoIngiLGVhKS5hdHRyKCJ5IixrYStiYSl9ZnVuY3Rpb24gRihjYSxlYSxrYSl7Y2E9ZC5zZWxlY3RPckNyZWF0ZUNoaWxkKGNhLCJnIixrYSk7c3dpdGNoKGVhLm5vZGUudHlwZSl7Y2FzZSBjLk5vZGVUeXBlLk9QOmVhPWVhLm5vZGU7aWYoXy5pc051bWJlcihlYS5mdW5jdGlvbklucHV0SW5kZXgpfHwKXy5pc051bWJlcihlYS5mdW5jdGlvbk91dHB1dEluZGV4KSl7ZC5zZWxlY3RPckNyZWF0ZUNoaWxkKGNhLCJwb2x5Z29uIixkLkNsYXNzLk5vZGUuQ09MT1JfVEFSR0VUKTticmVha31kLnNlbGVjdE9yQ3JlYXRlQ2hpbGQoY2EsImVsbGlwc2UiLGQuQ2xhc3MuTm9kZS5DT0xPUl9UQVJHRVQpO2JyZWFrO2Nhc2UgYy5Ob2RlVHlwZS5TRVJJRVM6a2E9ImFubm90YXRpb24iO2VhLmNvcmVHcmFwaCYmKGthPWVhLm5vZGUuaGFzTm9uQ29udHJvbEVkZ2VzPyJ2ZXJ0aWNhbCI6Imhvcml6b250YWwiKTtsZXQgYmE9W2QuQ2xhc3MuTm9kZS5DT0xPUl9UQVJHRVRdO2VhLmlzRmFkZWRPdXQmJmJhLnB1c2goImZhZGVkLWVsbGlwc2UiKTtkLnNlbGVjdE9yQ3JlYXRlQ2hpbGQoY2EsInVzZSIsYmEpLmF0dHIoInhsaW5rOmhyZWYiLCIjb3Atc2VyaWVzLSIra2ErIi1zdGFtcCIpO2Quc2VsZWN0T3JDcmVhdGVDaGlsZChjYSwicmVjdCIsZC5DbGFzcy5Ob2RlLkNPTE9SX1RBUkdFVCkuYXR0cigicngiLAplYS5yYWRpdXMpLmF0dHIoInJ5IixlYS5yYWRpdXMpO2JyZWFrO2Nhc2UgYy5Ob2RlVHlwZS5CUklER0U6ZC5zZWxlY3RPckNyZWF0ZUNoaWxkKGNhLCJyZWN0IixkLkNsYXNzLk5vZGUuQ09MT1JfVEFSR0VUKS5hdHRyKCJyeCIsZWEucmFkaXVzKS5hdHRyKCJyeSIsZWEucmFkaXVzKTticmVhaztjYXNlIGMuTm9kZVR5cGUuTUVUQTpkLnNlbGVjdE9yQ3JlYXRlQ2hpbGQoY2EsInJlY3QiLGQuQ2xhc3MuTm9kZS5DT0xPUl9UQVJHRVQpLmF0dHIoInJ4IixlYS5yYWRpdXMpLmF0dHIoInJ5IixlYS5yYWRpdXMpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgRXJyb3IoIlVucmVjb2duaXplZCBub2RlIHR5cGU6ICIrZWEubm9kZS50eXBlKTt9cmV0dXJuIGNhfWZ1bmN0aW9uIEQoY2Epe3N3aXRjaChjYS5ub2RlLnR5cGUpe2Nhc2UgYy5Ob2RlVHlwZS5PUDpyZXR1cm4gZC5DbGFzcy5PUE5PREU7Y2FzZSBjLk5vZGVUeXBlLk1FVEE6cmV0dXJuIGQuQ2xhc3MuTUVUQU5PREU7Y2FzZSBjLk5vZGVUeXBlLlNFUklFUzpyZXR1cm4gZC5DbGFzcy5TRVJJRVNOT0RFOwpjYXNlIGMuTm9kZVR5cGUuQlJJREdFOnJldHVybiBkLkNsYXNzLkJSSURHRU5PREU7Y2FzZSBjLk5vZGVUeXBlLkVMTElQU0lTOnJldHVybiBkLkNsYXNzLkVMTElQU0lTTk9ERX10aHJvdyBFcnJvcigiVW5yZWNvZ25pemVkIG5vZGUgdHlwZTogIitjYS5ub2RlLnR5cGUpO31mdW5jdGlvbiBCKGNhLGVhKXt2YXIga2E9ZC5zZWxlY3RDaGlsZChjYSwiZyIsZC5DbGFzcy5Ob2RlLlNIQVBFKTtsZXQgYmE9Yy5sYXlvdXQuY29tcHV0ZUNYUG9zaXRpb25PZk5vZGVTaGFwZShlYSk7c3dpdGNoKGVhLm5vZGUudHlwZSl7Y2FzZSBjLk5vZGVUeXBlLk9QOntjb25zdCBsYT1lYS5ub2RlO18uaXNOdW1iZXIobGEuZnVuY3Rpb25JbnB1dEluZGV4KXx8Xy5pc051bWJlcihsYS5mdW5jdGlvbk91dHB1dEluZGV4KT8oa2E9ZC5zZWxlY3RDaGlsZChrYSwicG9seWdvbiIpLGQucG9zaXRpb25UcmlhbmdsZShrYSxlYS54LGVhLnksZWEuY29yZUJveC53aWR0aCxlYS5jb3JlQm94LmhlaWdodCkpOihrYT0KZC5zZWxlY3RDaGlsZChrYSwiZWxsaXBzZSIpLGQucG9zaXRpb25FbGxpcHNlKGthLGJhLGVhLnksZWEuY29yZUJveC53aWR0aCxlYS5jb3JlQm94LmhlaWdodCkpO0MoY2EsYmEsZWEueSxlYS5sYWJlbE9mZnNldCk7YnJlYWt9Y2FzZSBjLk5vZGVUeXBlLk1FVEE6a2E9a2Euc2VsZWN0QWxsKCJyZWN0Iik7ZWEuZXhwYW5kZWQ/KGQucG9zaXRpb25SZWN0KGthLGVhLngsZWEueSxlYS53aWR0aCxlYS5oZWlnaHQpLGwoY2EsZWEpLEMoY2EsYmEsZWEueSwtZWEuaGVpZ2h0LzIrZWEubGFiZWxIZWlnaHQvMikpOihkLnBvc2l0aW9uUmVjdChrYSxiYSxlYS55LGVhLmNvcmVCb3gud2lkdGgsZWEuY29yZUJveC5oZWlnaHQpLEMoY2EsYmEsZWEueSwwKSk7YnJlYWs7Y2FzZSBjLk5vZGVUeXBlLlNFUklFUzprYT1kLnNlbGVjdENoaWxkKGthLCJ1c2UiKTtlYS5leHBhbmRlZD8oZC5wb3NpdGlvblJlY3Qoa2EsZWEueCxlYS55LGVhLndpZHRoLGVhLmhlaWdodCksbChjYSxlYSksQyhjYSxiYSwKZWEueSwtZWEuaGVpZ2h0LzIrZWEubGFiZWxIZWlnaHQvMikpOihkLnBvc2l0aW9uUmVjdChrYSxiYSxlYS55LGVhLmNvcmVCb3gud2lkdGgsZWEuY29yZUJveC5oZWlnaHQpLEMoY2EsYmEsZWEueSxlYS5sYWJlbE9mZnNldCkpO2JyZWFrO2Nhc2UgYy5Ob2RlVHlwZS5CUklER0U6Y2E9ZC5zZWxlY3RDaGlsZChrYSwicmVjdCIpO2QucG9zaXRpb25SZWN0KGNhLGVhLngsZWEueSxlYS53aWR0aCxlYS5oZWlnaHQpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgRXJyb3IoIlVucmVjb2duaXplZCBub2RlIHR5cGU6ICIrZWEubm9kZS50eXBlKTt9fWZ1bmN0aW9uIEcoY2EsZWEsa2Epe2xldCBiYT1hLmdyYXBoLnV0aWwuZXNjYXBlUXVlcnlTZWxlY3RvcihjYSk7aWYoIWthKXJldHVybmB1cmwoIyR7YmF9KWA7a2E9ZDMuc2VsZWN0KGthKTtsZXQgbGE9a2Euc2VsZWN0KCJkZWZzI19ncmFwaC1ncmFkaWVudHMiKTtsYS5lbXB0eSgpJiYobGE9a2EuYXBwZW5kKCJkZWZzIikuYXR0cigiaWQiLCJfZ3JhcGgtZ3JhZGllbnRzIikpOwpsZXQgd2E9bGEuc2VsZWN0KCJsaW5lYXJHcmFkaWVudCMiK2JhKTtpZih3YS5lbXB0eSgpKXt3YT1sYS5hcHBlbmQoImxpbmVhckdyYWRpZW50IikuYXR0cigiaWQiLGNhKTt3YS5zZWxlY3RBbGwoIioiKS5yZW1vdmUoKTtsZXQgQ2E9MDtfLmVhY2goZWEseGE9PntsZXQgemE9eGEuY29sb3I7d2EuYXBwZW5kKCJzdG9wIikuYXR0cigib2Zmc2V0IixDYSkuYXR0cigic3RvcC1jb2xvciIsemEpO3dhLmFwcGVuZCgic3RvcCIpLmF0dHIoIm9mZnNldCIsQ2EreGEucHJvcG9ydGlvbikuYXR0cigic3RvcC1jb2xvciIsemEpO0NhKz14YS5wcm9wb3J0aW9ufSl9fWZ1bmN0aW9uIEsoY2EsZWEsa2EsYmEsbGEpe2xldCB3YT1jLnJlbmRlci5NZXRhbm9kZUNvbG9ycztzd2l0Y2goZWEpe2Nhc2UgWC5TVFJVQ1RVUkU6cmV0dXJuIGthLm5vZGUudHlwZT09PWMuTm9kZVR5cGUuTUVUQT8oZWE9a2Eubm9kZS50ZW1wbGF0ZUlkLG51bGw9PT1lYT93YS5VTktOT1dOOndhLlNUUlVDVFVSRV9QQUxFVFRFKGNhKGVhKSwKYmEpKTprYS5ub2RlLnR5cGU9PT1jLk5vZGVUeXBlLlNFUklFUz9iYT93YS5FWFBBTkRFRF9DT0xPUjoid2hpdGUiOmthLm5vZGUudHlwZT09PWMuTm9kZVR5cGUuQlJJREdFP2thLnN0cnVjdHVyYWw/IiNmMGUiOmthLm5vZGUuaW5ib3VuZD8iIzBlZiI6IiNmZTAiOl8uaXNOdW1iZXIoa2Eubm9kZS5mdW5jdGlvbklucHV0SW5kZXgpPyIjNzk1NTQ4IjpfLmlzTnVtYmVyKGthLm5vZGUuZnVuY3Rpb25PdXRwdXRJbmRleCk/IiMwMDk2ODgiOiJ3aGl0ZSI7Y2FzZSBYLkRFVklDRTpyZXR1cm4gbnVsbD09a2EuZGV2aWNlQ29sb3JzP3dhLlVOS05PV046YmE/d2EuRVhQQU5ERURfQ09MT1I6RygiZGV2aWNlLSIra2Eubm9kZS5uYW1lLGthLmRldmljZUNvbG9ycyxsYSk7Y2FzZSBYLlhMQV9DTFVTVEVSOnJldHVybiBudWxsPT1rYS54bGFDbHVzdGVyQ29sb3JzP3dhLlVOS05PV046YmE/d2EuRVhQQU5ERURfQ09MT1I6RygieGxhLSIra2Eubm9kZS5uYW1lLGthLnhsYUNsdXN0ZXJDb2xvcnMsCmxhKTtjYXNlIFguQ09NUFVURV9USU1FOnJldHVybiBiYT93YS5FWFBBTkRFRF9DT0xPUjprYS5jb21wdXRlVGltZUNvbG9yfHx3YS5VTktOT1dOO2Nhc2UgWC5NRU1PUlk6cmV0dXJuIGJhP3dhLkVYUEFOREVEX0NPTE9SOmthLm1lbW9yeUNvbG9yfHx3YS5VTktOT1dOO2Nhc2UgWC5PUF9DT01QQVRJQklMSVRZOnJldHVybiBudWxsPT1rYS5jb21wYXRpYmlsaXR5Q29sb3JzP3dhLlVOS05PV046YmE/d2EuRVhQQU5ERURfQ09MT1I6Rygib3AtY29tcGF0LSIra2Eubm9kZS5uYW1lLGthLmNvbXBhdGliaWxpdHlDb2xvcnMsbGEpO2RlZmF1bHQ6dGhyb3cgRXJyb3IoIlVua25vd24gY2FzZSB0byBjb2xvciBub2RlcyBieSIpO319ZnVuY3Rpb24gTChjYSxlYSxrYSxiYSl7YmE9YmF8fGQuQ2xhc3MuTm9kZS5TSEFQRTtsZXQgbGE9a2EuaXNOb2RlU2VsZWN0ZWQoZWEubm9kZS5uYW1lKSx3YT1lYS5pc0luRXh0cmFjdHx8ZWEuaXNPdXRFeHRyYWN0fHxlYS5pc0xpYnJhcnlGdW5jdGlvbiwKQ2E9ZWEuZXhwYW5kZWQmJmJhIT09ZC5DbGFzcy5Bbm5vdGF0aW9uLk5PREUseGE9ZWEuaXNGYWRlZE91dDtjYS5jbGFzc2VkKCJoaWdobGlnaHRlZCIsa2EuaXNOb2RlSGlnaGxpZ2h0ZWQoZWEubm9kZS5uYW1lKSk7Y2EuY2xhc3NlZCgic2VsZWN0ZWQiLGxhKTtjYS5jbGFzc2VkKCJleHRyYWN0Iix3YSk7Y2EuY2xhc3NlZCgiZXhwYW5kZWQiLENhKTtjYS5jbGFzc2VkKCJmYWRlZCIseGEpO2NhPWNhLnNlbGVjdCgiLiIrYmErIiAuIitkLkNsYXNzLk5vZGUuQ09MT1JfVEFSR0VUKTtlYT1LKGthLnRlbXBsYXRlSW5kZXgsWFtrYS5jb2xvckJ5LnRvVXBwZXJDYXNlKCldLGVhLENhLGthLmdldEdyYXBoU3ZnUm9vdCgpKTtjYS5zdHlsZSgiZmlsbCIsZWEpO2NhLnN0eWxlKCJzdHJva2UiLGxhP251bGw6SihlYSkpfWZ1bmN0aW9uIEooY2Epe3JldHVybiJ1cmwiPT09Y2Euc3Vic3RyaW5nKDAsMyk/Yy5yZW5kZXIuTWV0YW5vZGVDb2xvcnMuR1JBRElFTlRfT1VUTElORTpkMy5yZ2IoY2EpLmRhcmtlcigpLnRvU3RyaW5nKCl9CmZ1bmN0aW9uIFAoY2EsZWEpe2xldCBrYT1bXTtjYT1lYS5nZXROb2RlQnlOYW1lKGNhKTtpZihjYSBpbnN0YW5jZW9mIGEuZ3JhcGguT3BOb2RlSW1wbClyZXR1cm5bY2FdLmNvbmNhdChjYS5pbkVtYmVkZGluZ3MpO2NhPWNhLm1ldGFncmFwaC5ub2RlcygpO18uZWFjaChjYSxmdW5jdGlvbihiYSl7a2E9a2EuY29uY2F0KFAoYmEsZWEpKX0pO3JldHVybiBrYX1mdW5jdGlvbiBTKGNhLGVhLGthLGJhKXtpZihiYVtrYS5uYW1lXSlyZXR1cm4gYmE7YmFba2EubmFtZV09ITA7dmFyIGxhPWthLmlucHV0cztsZXQgd2E9YWEoZWEsa2EpO2QzLnNlbGVjdChjYSkuc2VsZWN0KGAubm9kZVtkYXRhLW5hbWU9IiR7d2EubmFtZX0iXWApLmNsYXNzZWQoImlucHV0LWhpZ2hsaWdodCIsITApO2xldCBDYT17fTtfLmVhY2gobGEsZnVuY3Rpb24oRmEpe0ZhPWVhLmdldE5vZGVCeU5hbWUoRmEubmFtZSk7aWYodm9pZCAwIT09RmEpe0ZhIGluc3RhbmNlb2YgYy5NZXRhbm9kZUltcGwmJihGYT1hLmdyYXBoLmdldFN0cmljdE5hbWUoRmEubmFtZSksCkZhPWVhLmdldE5vZGVCeU5hbWUoRmEpKTt2YXIgU2E9YWEoZWEsRmEpLEVhPUNhW1NhLm5hbWVdO0VhP0VhLm9wTm9kZXMucHVzaChGYSk6Q2FbU2EubmFtZV09e3Zpc2libGVQYXJlbnQ6U2Esb3BOb2RlczpbRmFdfX19KTtsZXQgeGE9e30semE9W3dhXTt4YVt3YS5uYW1lXT17dHJhY2VkOiExLGluZGV4OjAsY29ubmVjdGlvbkVuZHBvaW50czpbXX07a2E9d2E7Zm9yKGxhPTE7a2EubmFtZSE9PWEuZ3JhcGguUk9PVF9OQU1FO2xhKyspa2E9a2EucGFyZW50Tm9kZSx4YVtrYS5uYW1lXT17dHJhY2VkOiExLGluZGV4OmxhLGNvbm5lY3Rpb25FbmRwb2ludHM6W119LHphW2xhXT1rYTtfLmZvck93bihDYSxmdW5jdGlvbihGYSl7bGV0IFNhPUZhLnZpc2libGVQYXJlbnQ7Xy5lYWNoKEZhLm9wTm9kZXMsZnVuY3Rpb24oRWEpe2JhPVMoY2EsZWEsRWEsYmEpfSk7U2EubmFtZSE9PXdhLm5hbWUmJk4oY2EsU2EseGEsemEpfSk7cmV0dXJuIGJhfWZ1bmN0aW9uIE4oY2EsZWEsa2EsYmEpe3ZhciBsYT0KZWEsd2E9ZWE7Zm9yKGVhPVtdOyFrYVtsYS5uYW1lXTspd2EubmFtZSE9PWxhLm5hbWUmJmVhLnB1c2goW3dhLGxhXSksd2E9bGEsbGE9bGEucGFyZW50Tm9kZTtrYT1rYVtsYS5uYW1lXS5pbmRleDtsZXQgQ2E9YmFbTWF0aC5tYXgoa2EtMSwwKV0ubmFtZTt3YT1sYT13YS5uYW1lO2NvbnN0IHhhPWQzLnNlbGVjdChjYSk7eGEuc2VsZWN0QWxsKGBbZGF0YS1lZGdlPSIke3dhfS0tJHtDYX0iXWApLmNsYXNzZWQoImlucHV0LWVkZ2UtaGlnaGxpZ2h0IiwhMCk7Xy5lYWNoKGVhLGZ1bmN0aW9uKHphKXt4YS5zZWxlY3RBbGwoYFtkYXRhLWVkZ2U9IiR7emFbMF0ubmFtZX0tLSR7Q2F9YCtgfn4ke3phWzFdLm5hbWV9fn5PVVQiXWApLmNsYXNzZWQoImlucHV0LWVkZ2UtaGlnaGxpZ2h0IiwhMCl9KTtmb3IoY2E9MTtjYTxrYTtjYSsrKXhhLnNlbGVjdEFsbChgW2RhdGEtZWRnZT0iJHtsYX1+fiR7YmFbY2FdLm5hbWV9YCtgfn5JTi0tJHtiYVtjYS0xXS5uYW1lfSJdYCkuY2xhc3NlZCgiaW5wdXQtZWRnZS1oaWdobGlnaHQiLAohMCl9ZnVuY3Rpb24gVChjYSxlYSl7bGV0IGthPXt9O18uZWFjaChlYSxmdW5jdGlvbihiYSl7YmE9Y2EuZ2V0Tm9kZUJ5TmFtZShiYSk7YmE9YWEoY2EsYmEpO2thW2JhLm5hbWVdPWJhfSk7cmV0dXJuIGthfWZ1bmN0aW9uIFkoY2EsZWEpe18uZm9yT3duKGVhLGZ1bmN0aW9uKGthKXtmb3IoO2thLm5hbWUhPT1hLmdyYXBoLlJPT1RfTkFNRTspe2NvbnN0IGJhPWQzLnNlbGVjdChjYSkuc2VsZWN0KGAubm9kZVtkYXRhLW5hbWU9IiR7a2EubmFtZX0iXWApOyFiYS5ub2RlcygpLmxlbmd0aHx8YmEuY2xhc3NlZCgiaW5wdXQtaGlnaGxpZ2h0Iil8fGJhLmNsYXNzZWQoInNlbGVjdGVkIil8fGJhLmNsYXNzZWQoIm9wIil8fGJhLmNsYXNzZWQoImlucHV0LXBhcmVudCIsITApO2thPWthLnBhcmVudE5vZGV9fSl9ZnVuY3Rpb24gYWEoY2EsZWEpe2xldCBrYT0hMSxiYT1lYTtmb3IoOyFrYTspaWYoZWE9YmEsYmE9ZWEucGFyZW50Tm9kZSx2b2lkIDA9PT1iYSlrYT0hMDtlbHNle2xldCBsYT0KY2EuZ2V0UmVuZGVyTm9kZUJ5TmFtZShiYS5uYW1lKTtsYSYmKGxhLmV4cGFuZGVkfHxiYSBpbnN0YW5jZW9mIGMuT3BOb2RlSW1wbCkmJihrYT0hMCl9cmV0dXJuIGVhfWYuYnVpbGRHcm91cD1mdW5jdGlvbihjYSxlYSxrYSl7Y2E9ZC5zZWxlY3RPckNyZWF0ZUNoaWxkKGNhLCJnIixkLkNsYXNzLk5vZGUuQ09OVEFJTkVSKS5zZWxlY3RBbGwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jaGlsZE5vZGVzfSkuZGF0YShlYSxiYT0+YmEubm9kZS5uYW1lKyI6IitiYS5ub2RlLnR5cGUpO2NhLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiZGF0YS1uYW1lIixiYT0+YmEubm9kZS5uYW1lKS5lYWNoKGZ1bmN0aW9uKGJhKXtsZXQgbGE9ZDMuc2VsZWN0KHRoaXMpO2thLmFkZE5vZGVHcm91cChiYS5ub2RlLm5hbWUsbGEpfSkubWVyZ2UoY2EpLmF0dHIoImNsYXNzIixiYT0+ZC5DbGFzcy5Ob2RlLkdST1VQKyIgIitEKGJhKSkuZWFjaChmdW5jdGlvbihiYSl7bGV0IGxhPWQzLnNlbGVjdCh0aGlzKTsKdmFyIHdhPWQuc2VsZWN0T3JDcmVhdGVDaGlsZChsYSwiZyIsZC5DbGFzcy5Bbm5vdGF0aW9uLklOQk9YKTtkLmFubm90YXRpb24uYnVpbGRHcm91cCh3YSxiYS5pbkFubm90YXRpb25zLGJhLGthKTt3YT1kLnNlbGVjdE9yQ3JlYXRlQ2hpbGQobGEsImciLGQuQ2xhc3MuQW5ub3RhdGlvbi5PVVRCT1gpO2QuYW5ub3RhdGlvbi5idWlsZEdyb3VwKHdhLGJhLm91dEFubm90YXRpb25zLGJhLGthKTt3YT1GKGxhLGJhLGQuQ2xhc3MuTm9kZS5TSEFQRSk7YmEubm9kZS5pc0dyb3VwTm9kZSYmayh3YSxiYSxrYSk7bSh3YSxiYSxrYSk7ZyhsYSxiYSxrYSk7d2E9QShsYSxiYSxrYSk7bSh3YSxiYSxrYSxiYS5ub2RlLnR5cGU9PT1jLk5vZGVUeXBlLk1FVEEpO0wobGEsYmEsa2EpO0IobGEsYmEpfSk7Y2EuZXhpdCgpLmVhY2goZnVuY3Rpb24oYmEpe2thLnJlbW92ZU5vZGVHcm91cChiYS5ub2RlLm5hbWUpO2xldCBsYT1kMy5zZWxlY3QodGhpcyk7MDxiYS5pbkFubm90YXRpb25zLmxpc3QubGVuZ3RoJiYKbGEuc2VsZWN0KCIuIitkLkNsYXNzLkFubm90YXRpb24uSU5CT1gpLnNlbGVjdEFsbCgiLiIrZC5DbGFzcy5Bbm5vdGF0aW9uLkdST1VQKS5lYWNoKHdhPT57a2EucmVtb3ZlQW5ub3RhdGlvbkdyb3VwKHdhLGJhKX0pOzA8YmEub3V0QW5ub3RhdGlvbnMubGlzdC5sZW5ndGgmJmxhLnNlbGVjdCgiLiIrZC5DbGFzcy5Bbm5vdGF0aW9uLk9VVEJPWCkuc2VsZWN0QWxsKCIuIitkLkNsYXNzLkFubm90YXRpb24uR1JPVVApLmVhY2god2E9PntrYS5yZW1vdmVBbm5vdGF0aW9uR3JvdXAod2EsYmEpfSl9KS5yZW1vdmUoKTtyZXR1cm4gY2F9O2YuZ2V0Q29udGV4dE1lbnU9cDtmLmNhbkJlSW5TZXJpZXM9cTtmLmdldFNlcmllc05hbWU9cjtmLmdldEdyb3VwU2V0dGluZ0xhYmVsPXY7Zi5lbmZvcmNlTGFiZWxXaWR0aD15O2xldCBoYT1udWxsO2YuYnVpbGRTaGFwZT1GO2Yubm9kZUNsYXNzPUQ7bGV0IFg7KGZ1bmN0aW9uKGNhKXtjYVtjYS5TVFJVQ1RVUkU9MF09IlNUUlVDVFVSRSI7Y2FbY2EuREVWSUNFPQoxXT0iREVWSUNFIjtjYVtjYS5YTEFfQ0xVU1RFUj0yXT0iWExBX0NMVVNURVIiO2NhW2NhLkNPTVBVVEVfVElNRT0zXT0iQ09NUFVURV9USU1FIjtjYVtjYS5NRU1PUlk9NF09Ik1FTU9SWSI7Y2FbY2EuT1BfQ09NUEFUSUJJTElUWT01XT0iT1BfQ09NUEFUSUJJTElUWSJ9KShYPWYuQ29sb3JCeXx8KGYuQ29sb3JCeT17fSkpO2YucmVtb3ZlR3JhZGllbnREZWZpbml0aW9ucz1mdW5jdGlvbihjYSl7ZDMuc2VsZWN0KGNhKS5zZWxlY3QoImRlZnMjX2dyYXBoLWdyYWRpZW50cyIpLnJlbW92ZSgpfTtmLmdldEZpbGxGb3JOb2RlPUs7Zi5zdHlsaXplPUw7Zi5nZXRTdHJva2VGb3JGaWxsPUo7Zi51cGRhdGVJbnB1dFRyYWNlPWZ1bmN0aW9uKGNhLGVhLGthLGJhKXtjb25zdCBsYT1kMy5zZWxlY3QoY2EpO2xhLnNlbGVjdEFsbCgiLmlucHV0LWhpZ2hsaWdodCIpLmNsYXNzZWQoImlucHV0LWhpZ2hsaWdodCIsITEpO2xhLnNlbGVjdEFsbCgiLm5vbi1pbnB1dCIpLmNsYXNzZWQoIm5vbi1pbnB1dCIsCiExKTtsYS5zZWxlY3RBbGwoIi5pbnB1dC1wYXJlbnQiKS5jbGFzc2VkKCJpbnB1dC1wYXJlbnQiLCExKTtsYS5zZWxlY3RBbGwoIi5pbnB1dC1jaGlsZCIpLmNsYXNzZWQoImlucHV0LWNoaWxkIiwhMSk7bGEuc2VsZWN0QWxsKCIuaW5wdXQtZWRnZS1oaWdobGlnaHQiKS5jbGFzc2VkKCJpbnB1dC1lZGdlLWhpZ2hsaWdodCIsITEpO2xhLnNlbGVjdEFsbCgiLm5vbi1pbnB1dC1lZGdlLWhpZ2hsaWdodCIpLmNsYXNzZWQoIm5vbi1pbnB1dC1lZGdlLWhpZ2hsaWdodCIsITEpO2xhLnNlbGVjdEFsbCgiLmlucHV0LWhpZ2hsaWdodC1zZWxlY3RlZCIpLmNsYXNzZWQoImlucHV0LWhpZ2hsaWdodC1zZWxlY3RlZCIsITEpO2lmKGVhJiZiYSYma2Epe2thPVAoa2EsZWEpO3ZhciB3YT17fTtfLmVhY2goa2EsZnVuY3Rpb24oQ2Epe3dhPVMoY2EsZWEsQ2Esd2EpfSk7a2E9T2JqZWN0LmtleXMod2EpO2thPVQoZWEsa2EpO1koY2Esa2EpO2xhLnNlbGVjdEFsbCgiZy5ub2RlOm5vdCguc2VsZWN0ZWQpOm5vdCguaW5wdXQtaGlnaGxpZ2h0KTpub3QoLmlucHV0LXBhcmVudCk6bm90KC5pbnB1dC1jaGlsZHJlbikiKS5jbGFzc2VkKCJub24taW5wdXQiLAohMCkuZWFjaChmdW5jdGlvbihDYSl7bGEuc2VsZWN0QWxsKGBbZGF0YS1uYW1lPSIke0NhLm5vZGUubmFtZX0iXWApLmNsYXNzZWQoIm5vbi1pbnB1dCIsITApfSk7bGEuc2VsZWN0QWxsKCJnLmVkZ2U6bm90KC5pbnB1dC1lZGdlLWhpZ2hsaWdodCkiKS5jbGFzc2VkKCJub24taW5wdXQtZWRnZS1oaWdobGlnaHQiLCEwKX19O2YuZ2V0VmlzaWJsZVBhcmVudD1hYX0pKGQubm9kZXx8KGQubm9kZT17fSkpfSkoYy5zY2VuZXx8KGMuc2NlbmU9e30pKX0pKGEuZ3JhcGh8fChhLmdyYXBoPXt9KSl9KSh0Znx8KHRmPXt9KSk7Cjwvc2NyaXB0Pgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdGYtZ3JhcGgtY29tbW9uL29wLmpzCihmdW5jdGlvbihhKXsoZnVuY3Rpb24oYyl7KGZ1bmN0aW9uKGQpe2NsYXNzIGZ7aXNOb3RUcHVPcChnKXtyZXR1cm4tMSE9Zy50b0xvd2VyQ2FzZSgpLnNlYXJjaCgiY3B1OiIpfHwtMSE9Zy50b0xvd2VyQ2FzZSgpLnNlYXJjaCgiZ3B1OiIpPyEwOi0xPT1nLnRvTG93ZXJDYXNlKCkuc2VhcmNoKCJ0cHUiKX1vcFZhbGlkKGcpe3JldHVybiAwPT1nLm5hbWUuc2VhcmNoKGMuRlVOQ1RJT05fTElCUkFSWV9OT0RFX1BSRUZJWCl8fCFnLm9wfHxnLmRldmljZSYmdGhpcy5pc05vdFRwdU9wKGcuZGV2aWNlKXx8Zy5kZXZpY2UmJi0xIT1nLmRldmljZS5zZWFyY2goIlRQVV9TWVNURU0iKT8hMDpfLmluY2x1ZGVzKGYuV0hJVEVMSVNULGcub3ApfX1mLldISVRFTElTVD0iQWJzIEFjb3MgQWNvc2ggQWRkIEFkZE4gQWRqdXN0Q29udHJhc3R2MiBBZGp1c3RIdWUgQWRqdXN0U2F0dXJhdGlvbiBBbGwgQW5nbGUgQW55IEFwcHJveGltYXRlRXF1YWwgQXJnTWF4IEFyZ01pbiBBc2luIEFzaW5oIEFzc2VydCBBc3NpZ25BZGRWYXJpYWJsZU9wIEFzc2lnblN1YlZhcmlhYmxlT3AgQXNzaWduVmFyaWFibGVPcCBBdGFuIEF0YW4yIEF0YW5oIEF2Z1Bvb2wgQXZnUG9vbDNEIEF2Z1Bvb2wzREdyYWQgQXZnUG9vbEdyYWQgQmF0Y2hNYXRNdWwgQmF0Y2hUb1NwYWNlIEJhdGNoVG9TcGFjZU5EIEJpYXNBZGQgQmlhc0FkZEdyYWQgQmlhc0FkZFYxIEJpdGNhc3QgQml0d2lzZUFuZCBCaXR3aXNlT3IgQml0d2lzZVhvciBCcm9hZGNhc3RBcmdzIEJyb2FkY2FzdEdyYWRpZW50QXJncyBCdWNrZXRpemUgQ2FzdCBDZWlsIENoZWNrTnVtZXJpY3MgQ2hvbGVza3kgQ2xpcEJ5VmFsdWUgQ29tcGxleCBDb21wbGV4QWJzIENvbmNhdCBDb25jYXRPZmZzZXQgQ29uY2F0VjIgQ29uaiBDb25qdWdhdGVUcmFuc3Bvc2UgQ29uc3QgQ29udHJvbFRyaWdnZXIgQ29udjJEIENvbnYyREJhY2twcm9wRmlsdGVyIENvbnYyREJhY2twcm9wSW5wdXQgQ29udjNEIENvbnYzREJhY2twcm9wRmlsdGVyVjIgQ29udjNEQmFja3Byb3BJbnB1dFYyIENvcyBDb3NoIENyb3NzIENyb3NzUmVwbGljYVN1bSBDdW1wcm9kIEN1bXN1bSBEZXB0aFRvU3BhY2UgRGVwdGh3aXNlQ29udjJkTmF0aXZlIERlcHRod2lzZUNvbnYyZE5hdGl2ZUJhY2twcm9wRmlsdGVyIERlcHRod2lzZUNvbnYyZE5hdGl2ZUJhY2twcm9wSW5wdXQgRGlhZyBEaWFnUGFydCBEaWdhbW1hIERpdiBEeW5hbWljU3RpdGNoIEVsdSBFbHVHcmFkIEVtcHR5IEVxdWFsIEVyZiBFcmZjIEV4cCBFeHBhbmREaW1zIEV4cG0xIEV4dHJhY3RJbWFnZVBhdGNoZXMgRkZUIEZGVDJEIEZGVDNEIEZha2VRdWFudFdpdGhNaW5NYXhBcmdzIEZha2VRdWFudFdpdGhNaW5NYXhBcmdzR3JhZGllbnQgRmFrZVF1YW50V2l0aE1pbk1heFZhcnMgRmFrZVF1YW50V2l0aE1pbk1heFZhcnNHcmFkaWVudCBGaWxsIEZsb29yIEZsb29yRGl2IEZsb29yTW9kIEZ1c2VkQmF0Y2hOb3JtIEZ1c2VkQmF0Y2hOb3JtR3JhZCBGdXNlZEJhdGNoTm9ybUdyYWRWMiBGdXNlZEJhdGNoTm9ybVYyIEdhdGhlciBHYXRoZXJOZCBHYXRoZXJWMiBHZXRJdGVtIEdyZWF0ZXIgR3JlYXRlckVxdWFsIEhTVlRvUkdCIElGRlQgSUZGVDJEIElGRlQzRCBJUkZGVCBJUkZGVDJEIElSRkZUM0QgSWRlbnRpdHkgSWRlbnRpdHlOIElmIEltYWcgSW5mZWVkRGVxdWV1ZSBJbmZlZWREZXF1ZXVlVHVwbGUgSW5wbGFjZUFkZCBJbnBsYWNlVXBkYXRlIEludiBJbnZlcnQgSW52ZXJ0UGVybXV0YXRpb24gSXNGaW5pdGUgSXNJbmYgSXNOYW4gTDJMb3NzIExSTiBMUk5HcmFkIExlZnRTaGlmdCBMZXNzIExlc3NFcXVhbCBMZ2FtbWEgTGluU3BhY2UgTGlzdERpZmYgTG9nIExvZzFwIExvZ1NvZnRtYXggTG9naWNhbEFuZCBMb2dpY2FsTm90IExvZ2ljYWxPciBNYXRNdWwgTWF0cml4QmFuZFBhcnQgTWF0cml4RGlhZyBNYXRyaXhEaWFnUGFydCBNYXRyaXhTZXREaWFnIE1hdHJpeFRyaWFuZ3VsYXJTb2x2ZSBNYXggTWF4UG9vbCBNYXhQb29sM0QgTWF4UG9vbDNER3JhZCBNYXhQb29sM0RHcmFkR3JhZCBNYXhQb29sR3JhZCBNYXhQb29sR3JhZEdyYWQgTWF4UG9vbEdyYWRHcmFkVjIgTWF4UG9vbEdyYWRWMiBNYXhQb29sVjIgTWF4aW11bSBNZWFuIE1pbiBNaW5pbXVtIE1pcnJvclBhZCBNb2QgTXVsIE11bHRpbm9taWFsIE5lZyBOb09wIE5vbk1heFN1cHByZXNzaW9uVjQgTm90RXF1YWwgT25lSG90IE9uZXNMaWtlIE91dGZlZWRFbnF1ZXVlIE91dGZlZWRFbnF1ZXVlVHVwbGUgUGFjayBQYWQgUGFkVjIgUGFyYWxsZWxEeW5hbWljU3RpdGNoIFBsYWNlaG9sZGVyV2l0aERlZmF1bHQgUG93IFByZXZlbnRHcmFkaWVudCBQcm9kIFFyIFF1YW50aXplQW5kRGVxdWFudGl6ZVYyIFF1YW50aXplQW5kRGVxdWFudGl6ZVYzIFJGRlQgUkZGVDJEIFJGRlQzRCBSR0JUb0hTViBSYW5kb21TaHVmZmxlIFJhbmRvbVN0YW5kYXJkTm9ybWFsIFJhbmRvbVVuaWZvcm0gUmFuZG9tVW5pZm9ybUludCBSYW5nZSBSYW5rIFJlYWRWYXJpYWJsZU9wIFJlYWwgUmVhbERpdiBSZWNpcHJvY2FsIFJlY2lwcm9jYWxHcmFkIFJlY3ZUUFVFbWJlZGRpbmdBY3RpdmF0aW9ucyBSZWx1IFJlbHU2IFJlbHU2R3JhZCBSZWx1R3JhZCBSZXNoYXBlIFJlc2l6ZUJpbGluZWFyIFJlc2l6ZUJpbGluZWFyR3JhZCBSZXNvdXJjZUFwcGx5QWRhTWF4IFJlc291cmNlQXBwbHlBZGFkZWx0YSBSZXNvdXJjZUFwcGx5QWRhZ3JhZCBSZXNvdXJjZUFwcGx5QWRhZ3JhZERBIFJlc291cmNlQXBwbHlBZGFtIFJlc291cmNlQXBwbHlBZGRTaWduIFJlc291cmNlQXBwbHlDZW50ZXJlZFJNU1Byb3AgUmVzb3VyY2VBcHBseUZ0cmwgUmVzb3VyY2VBcHBseUZ0cmxWMiBSZXNvdXJjZUFwcGx5R3JhZGllbnREZXNjZW50IFJlc291cmNlQXBwbHlNb21lbnR1bSBSZXNvdXJjZUFwcGx5UG93ZXJTaWduIFJlc291cmNlQXBwbHlQcm94aW1hbEFkYWdyYWQgUmVzb3VyY2VBcHBseVByb3hpbWFsR3JhZGllbnREZXNjZW50IFJlc291cmNlQXBwbHlSTVNQcm9wIFJlc291cmNlR2F0aGVyIFJlc291cmNlU2NhdHRlckFkZCBSZXNvdXJjZVNjYXR0ZXJEaXYgUmVzb3VyY2VTY2F0dGVyTWF4IFJlc291cmNlU2NhdHRlck1pbiBSZXNvdXJjZVNjYXR0ZXJNdWwgUmVzb3VyY2VTY2F0dGVyTmRBZGQgUmVzb3VyY2VTY2F0dGVyTmRVcGRhdGUgUmVzb3VyY2VTY2F0dGVyU3ViIFJlc291cmNlU2NhdHRlclVwZGF0ZSBSZXNvdXJjZVN0cmlkZWRTbGljZUFzc2lnbiBSZXZlcnNlIFJldmVyc2VTZXF1ZW5jZSBSZXZlcnNlVjIgUmlnaHRTaGlmdCBSaW50IFJvdW5kIFJzcXJ0IFJzcXJ0R3JhZCBTY2F0dGVyTmQgU2VsZWN0IFNlbHUgU2VsdUdyYWQgU2VuZFRQVUVtYmVkZGluZ0dyYWRpZW50cyBTaGFwZSBTaGFwZU4gU2lnbW9pZCBTaWdtb2lkR3JhZCBTaWduIFNpbiBTaW5oIFNpemUgU2xpY2UgU25hcHNob3QgU29mdG1heCBTb2Z0bWF4Q3Jvc3NFbnRyb3B5V2l0aExvZ2l0cyBTb2Z0cGx1cyBTb2Z0cGx1c0dyYWQgU29mdHNpZ24gU29mdHNpZ25HcmFkIFNwYWNlVG9CYXRjaCBTcGFjZVRvQmF0Y2hORCBTcGFjZVRvRGVwdGggU3BhcnNlTWF0TXVsIFNwYXJzZVNvZnRtYXhDcm9zc0VudHJvcHlXaXRoTG9naXRzIFNwYXJzZVRvRGVuc2UgU3BsaXQgU3BsaXRWIFNxcnQgU3FydEdyYWQgU3F1YXJlIFNxdWFyZWREaWZmZXJlbmNlIFNxdWVlemUgU3RhY2tDbG9zZVYyIFN0YWNrUG9wVjIgU3RhY2tQdXNoVjIgU3RhY2tWMiBTdGF0ZWxlc3NJZiBTdGF0ZWxlc3NSYW5kb21Ob3JtYWwgU3RhdGVsZXNzUmFuZG9tVW5pZm9ybSBTdGF0ZWxlc3NUcnVuY2F0ZWROb3JtYWwgU3RhdGVsZXNzV2hpbGUgU3RvcEdyYWRpZW50IFN0cmlkZWRTbGljZSBTdHJpZGVkU2xpY2VHcmFkIFN1YiBTdW0gU3ltYm9saWNHcmFkaWVudCBUUFVFbWJlZGRpbmdBY3RpdmF0aW9ucyBUYW4gVGFuaCBUYW5oR3JhZCBUZW5zb3JBcnJheUNsb3NlVjMgVGVuc29yQXJyYXlDb25jYXRWMyBUZW5zb3JBcnJheUdhdGhlclYzIFRlbnNvckFycmF5R3JhZFYzIFRlbnNvckFycmF5UmVhZFYzIFRlbnNvckFycmF5U2NhdHRlclYzIFRlbnNvckFycmF5U2l6ZVYzIFRlbnNvckFycmF5U3BsaXRWMyBUZW5zb3JBcnJheVYzIFRlbnNvckFycmF5V3JpdGVWMyBUaWxlIFRvcEtWMiBUcmFuc3Bvc2UgVHJ1bmNhdGVEaXYgVHJ1bmNhdGVNb2QgVHJ1bmNhdGVkTm9ybWFsIFVucGFjayBVbnNvcnRlZFNlZ21lbnRNYXggVW5zb3J0ZWRTZWdtZW50TWluIFVuc29ydGVkU2VnbWVudFByb2QgVW5zb3J0ZWRTZWdtZW50U3VtIFZhcklzSW5pdGlhbGl6ZWRPcCBWYXJpYWJsZVNoYXBlIFdoaWxlIFhsYUR5bmFtaWNVcGRhdGVTbGljZSBYbGFIb3N0Q29tcHV0ZSBYbGFJZiBYbGFSZWN2IFhsYVJlZHVjZVdpbmRvdyBYbGFTZW5kIFhsYVNvcnQgWGxhV2hpbGUgWmVyb3NMaWtlIEVudGVyIEV4aXQgTG9vcENvbmQgTWVyZ2UgTmV4dEl0ZXJhdGlvbiBTd2l0Y2ggX0FyZyBfUGFyYWxsZWxDb25jYXRVcGRhdGUgX1JldHZhbCBfVFBVQ29tcGlsZSBfVFBVRXhlY3V0ZSBUUFVDb21waWxhdGlvblJlc3VsdCBUUFVSZXBsaWNhdGVkSW5wdXQgVFBVUmVwbGljYXRlZE91dHB1dCBUUFVSZXBsaWNhdGVNZXRhZGF0YSBNZXJnZVYyQ2hlY2twb2ludHMgUmVzdG9yZVYyIFNhdmVWMiBBYm9ydCBBc3NlcnQgQXNzaWduIFBsYWNlaG9sZGVyIFBsYWNlaG9sZGVyVjIgU2hhcmRlZEZpbGVuYW1lIFN0cmluZ0pvaW4gVmFyaWFibGUgVmFyaWFibGVWMiBWYXJIYW5kbGVPcCBBdWRpb1N1bW1hcnkgQXVkaW9TdW1tYXJ5VjIgRGVidWdOdW1lcmljU3VtbWFyeSBIaXN0b2dyYW1TdW1tYXJ5IEltYWdlU3VtbWFyeSBNZXJnZVN1bW1hcnkgU2NhbGFyU3VtbWFyeSBTdGF0c0FnZ3JlZ2F0b3JTdW1tYXJ5Ii5zcGxpdCgiICIpOwpkLlRwdUNvbXBhdGliaWxpdHlQcm92aWRlcj1mO2QuY2hlY2tPcHNGb3JDb21wYXRpYmlsaXR5PWZ1bmN0aW9uKGcsbCl7aWYobnVsbD09PWwpdGhyb3cgRXJyb3IoIkNvbXBhdGliaWxpdHkgcHJvdmlkZXIgcmVxdWlyZWQsIGJ1dCBnb3Q6ICIrbCk7Xy5lYWNoKGcubm9kZXMsaz0+e2suY29tcGF0aWJsZT1sLm9wVmFsaWQoayk7Xy5lYWNoKGsuaW5FbWJlZGRpbmdzLG09PnttLmNvbXBhdGlibGU9bC5vcFZhbGlkKG0pfSk7Xy5lYWNoKGsub3V0RW1iZWRkaW5ncyxtPT57bS5jb21wYXRpYmxlPWwub3BWYWxpZChtKX0pfSl9fSkoYy5vcHx8KGMub3A9e30pKX0pKGEuZ3JhcGh8fChhLmdyYXBoPXt9KSl9KSh0Znx8KHRmPXt9KSk7Cjwvc2NyaXB0Pgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdGYtZ3JhcGgtY29tbW9uL3BhcnNlci5qcwooZnVuY3Rpb24oYSl7KGZ1bmN0aW9uKGMpeyhmdW5jdGlvbihkKXtmdW5jdGlvbiBmKHQpe2lmKCJ0cnVlIj09PXQpcmV0dXJuITA7aWYoImZhbHNlIj09PXQpcmV0dXJuITE7aWYoJyInPT09dFswXSlyZXR1cm4gdC5zdWJzdHJpbmcoMSx0Lmxlbmd0aC0xKTtsZXQgdj1wYXJzZUZsb2F0KHQpO3JldHVybiBpc05hTih2KT90OnZ9ZnVuY3Rpb24gZyh0KXtyZXR1cm4gbmV3IFByb21pc2UoKHYsQSk9PntmZXRjaCh0KS50aGVuKHk9Pnt5Lm9rP3kuYXJyYXlCdWZmZXIoKS50aGVuKHYsQSk6eS50ZXh0KCkudGhlbihBLEEpfSl9KX1mdW5jdGlvbiBsKHQsdixBPTFFNix5PSJcbiIpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbih4LEMpe2Z1bmN0aW9uIEYoRCxCLEcpe3ZhciBLPUc+PXQuYnl0ZUxlbmd0aDtCPUIuc3BsaXQoeSk7QlswXT1EK0JbMF07Y29uc3QgTD1LPyIiOkIucG9wKCk7Zm9yKGxldCBKIG9mIEIpdHJ5e3YoSil9Y2F0Y2goUCl7QyhQKTtyZXR1cm59Sz94KCEwKToKKEQ9bmV3IEJsb2IoW3Quc2xpY2UoRyxHK0EpXSksSz1uZXcgRmlsZVJlYWRlcixLLm9ubG9hZD1mdW5jdGlvbihKKXtGKEwsSi50YXJnZXQucmVzdWx0LEcrQSl9LEsucmVhZEFzVGV4dChEKSl9RigiIiwiIiwwKX0pfWZ1bmN0aW9uIGsodCl7cmV0dXJuIHAodCxxKX1mdW5jdGlvbiBtKHQpe3JldHVybiBwKHQscikudGhlbih2PT52LnN0ZXBfc3RhdHMpfWZ1bmN0aW9uIHAodCx2KXtmdW5jdGlvbiBBKEIpe2xldCBHPUIuaW5kZXhPZigiOiIpLEs9Qi5zdWJzdHJpbmcoMCxHKS50cmltKCk7Qj1mKEIuc3Vic3RyaW5nKEcrMikudHJpbSgpKTtyZXR1cm57bmFtZTpLLHZhbHVlOkJ9fWZ1bmN0aW9uIHkoQixHLEssTCl7bGV0IEo9QltHXTtudWxsPT1KP0JbR109TC5qb2luKCIuIilpbiB2P1tLXTpLOkFycmF5LmlzQXJyYXkoSik/Si5wdXNoKEspOkJbR109W0osS119bGV0IHg9e30sQz1bXSxGPVtdLEQ9eDtyZXR1cm4gbCh0LGZ1bmN0aW9uKEIpe2lmKEIpc3dpdGNoKEI9Qi50cmltKCksCkJbQi5sZW5ndGgtMV0pe2Nhc2UgInsiOkI9Qi5zdWJzdHJpbmcoMCxCLmxlbmd0aC0yKS50cmltKCk7bGV0IEc9e307Qy5wdXNoKEQpO0YucHVzaChCKTt5KEQsQixHLEYpO0Q9RzticmVhaztjYXNlICJ9IjpEPUMucG9wKCk7Ri5wb3AoKTticmVhaztkZWZhdWx0OkI9QShCKSx5KEQsQi5uYW1lLEIudmFsdWUsRi5jb25jYXQoQi5uYW1lKSl9fSkudGhlbihmdW5jdGlvbigpe3JldHVybiB4fSl9ZC5mZXRjaFBiVHh0PWc7ZC5mZXRjaEFuZFBhcnNlTWV0YWRhdGE9ZnVuY3Rpb24odCx2KXtyZXR1cm4gYS5ncmFwaC51dGlsLnJ1blRhc2soIlJlYWRpbmcgbWV0YWRhdGEgcGJ0eHQiLDQwLCgpPT5udWxsPT10P1Byb21pc2UucmVzb2x2ZShudWxsKTpnKHQpLHYpLnRoZW4oQT0+YS5ncmFwaC51dGlsLnJ1bkFzeW5jUHJvbWlzZVRhc2soIlBhcnNpbmcgbWV0YWRhdGEucGJ0eHQiLDYwLCgpPT5udWxsIT1BP20oQSk6UHJvbWlzZS5yZXNvbHZlKG51bGwpLHYpKX07ZC5mZXRjaEFuZFBhcnNlR3JhcGhEYXRhPQpmdW5jdGlvbih0LHYsQSl7cmV0dXJuIGEuZ3JhcGgudXRpbC5ydW5Bc3luY1Byb21pc2VUYXNrKCJSZWFkaW5nIGdyYXBoIHBidHh0Iiw0MCwoKT0+dj9uZXcgUHJvbWlzZShmdW5jdGlvbih5LHgpe2xldCBDPW5ldyBGaWxlUmVhZGVyO0Mub25sb2FkPSgpPT55KEMucmVzdWx0KTtDLm9uZXJyb3I9KCk9PngoQy5lcnJvcik7Qy5yZWFkQXNBcnJheUJ1ZmZlcih2KX0pOmcodCksQSkudGhlbih5PT5hLmdyYXBoLnV0aWwucnVuQXN5bmNQcm9taXNlVGFzaygiUGFyc2luZyBncmFwaC5wYnR4dCIsNjAsKCk9PmsoeSksQSkpfTtkLnN0cmVhbVBhcnNlPWw7Y29uc3QgcT17ImxpYnJhcnkuZnVuY3Rpb24iOiEwLCJsaWJyYXJ5LmZ1bmN0aW9uLm5vZGVfZGVmIjohMCwibGlicmFyeS5mdW5jdGlvbi5ub2RlX2RlZi5pbnB1dCI6ITAsImxpYnJhcnkuZnVuY3Rpb24ubm9kZV9kZWYuYXR0ciI6ITAsImxpYnJhcnkuZnVuY3Rpb24ubm9kZV9kZWYuYXR0ci52YWx1ZS5saXN0LmIiOiEwLCJsaWJyYXJ5LmZ1bmN0aW9uLm5vZGVfZGVmLmF0dHIudmFsdWUubGlzdC5mIjohMCwKImxpYnJhcnkuZnVuY3Rpb24ubm9kZV9kZWYuYXR0ci52YWx1ZS5saXN0LmZ1bmMiOiEwLCJsaWJyYXJ5LmZ1bmN0aW9uLm5vZGVfZGVmLmF0dHIudmFsdWUubGlzdC5pIjohMCwibGlicmFyeS5mdW5jdGlvbi5ub2RlX2RlZi5hdHRyLnZhbHVlLmxpc3QucyI6ITAsImxpYnJhcnkuZnVuY3Rpb24ubm9kZV9kZWYuYXR0ci52YWx1ZS5saXN0LnNoYXBlIjohMCwibGlicmFyeS5mdW5jdGlvbi5ub2RlX2RlZi5hdHRyLnZhbHVlLmxpc3Quc2hhcGUuZGltIjohMCwibGlicmFyeS5mdW5jdGlvbi5ub2RlX2RlZi5hdHRyLnZhbHVlLmxpc3QudGVuc29yIjohMCwibGlicmFyeS5mdW5jdGlvbi5ub2RlX2RlZi5hdHRyLnZhbHVlLmxpc3QudHlwZSI6ITAsImxpYnJhcnkuZnVuY3Rpb24ubm9kZV9kZWYuYXR0ci52YWx1ZS5zaGFwZS5kaW0iOiEwLCJsaWJyYXJ5LmZ1bmN0aW9uLm5vZGVfZGVmLmF0dHIudmFsdWUudGVuc29yLnN0cmluZ192YWwiOiEwLCJsaWJyYXJ5LmZ1bmN0aW9uLm5vZGVfZGVmLmF0dHIudmFsdWUudGVuc29yLnRlbnNvcl9zaGFwZS5kaW0iOiEwLAoibGlicmFyeS5mdW5jdGlvbi5zaWduYXR1cmUuaW5wdXRfYXJnIjohMCwibGlicmFyeS5mdW5jdGlvbi5zaWduYXR1cmUub3V0cHV0X2FyZyI6ITAsImxpYnJhcnkudmVyc2lvbnMiOiEwLG5vZGU6ITAsIm5vZGUuaW5wdXQiOiEwLCJub2RlLmF0dHIiOiEwLCJub2RlLmF0dHIudmFsdWUubGlzdC5iIjohMCwibm9kZS5hdHRyLnZhbHVlLmxpc3QuZiI6ITAsIm5vZGUuYXR0ci52YWx1ZS5saXN0LmZ1bmMiOiEwLCJub2RlLmF0dHIudmFsdWUubGlzdC5pIjohMCwibm9kZS5hdHRyLnZhbHVlLmxpc3QucyI6ITAsIm5vZGUuYXR0ci52YWx1ZS5saXN0LnNoYXBlIjohMCwibm9kZS5hdHRyLnZhbHVlLmxpc3Quc2hhcGUuZGltIjohMCwibm9kZS5hdHRyLnZhbHVlLmxpc3QudGVuc29yIjohMCwibm9kZS5hdHRyLnZhbHVlLmxpc3QudHlwZSI6ITAsIm5vZGUuYXR0ci52YWx1ZS5zaGFwZS5kaW0iOiEwLCJub2RlLmF0dHIudmFsdWUudGVuc29yLnN0cmluZ192YWwiOiEwLCJub2RlLmF0dHIudmFsdWUudGVuc29yLnRlbnNvcl9zaGFwZS5kaW0iOiEwfSwKcj17InN0ZXBfc3RhdHMuZGV2X3N0YXRzIjohMCwic3RlcF9zdGF0cy5kZXZfc3RhdHMubm9kZV9zdGF0cyI6ITAsInN0ZXBfc3RhdHMuZGV2X3N0YXRzLm5vZGVfc3RhdHMub3V0cHV0IjohMCwic3RlcF9zdGF0cy5kZXZfc3RhdHMubm9kZV9zdGF0cy5tZW1vcnkiOiEwLCJzdGVwX3N0YXRzLmRldl9zdGF0cy5ub2RlX3N0YXRzLm91dHB1dC50ZW5zb3JfZGVzY3JpcHRpb24uc2hhcGUuZGltIjohMH07ZC5wYXJzZUdyYXBoUGJUeHQ9aztkLnBhcnNlU3RhdHNQYlR4dD1tfSkoYy5wYXJzZXJ8fChjLnBhcnNlcj17fSkpfSkoYS5ncmFwaHx8KGEuZ3JhcGg9e30pKX0pKHRmfHwodGY9e30pKTsKPC9zY3JpcHQ+CjxzY3JpcHQ+Ly9+fldFQlBBVEh+fi90Zi1ncmFwaC1jb21tb24vcHJvdG8uanMKPC9zY3JpcHQ+CjxzY3JpcHQ+Ly9+fldFQlBBVEh+fi90Zi1ncmFwaC1jb21tb24vcmVuZGVyLmpzCihmdW5jdGlvbihhKXsoZnVuY3Rpb24oYyl7KGZ1bmN0aW9uKGQpe2Z1bmN0aW9uIGYoTixULFksYWEsaGEpe1Q9bmV3IEcoVCxZLGFhLGhhLCEwKTtOLmluQW5ub3RhdGlvbnMucHVzaChUKX1mdW5jdGlvbiBnKE4sVCxZLGFhLGhhKXtUPW5ldyBHKFQsWSxhYSxoYSwhMSk7Ti5vdXRBbm5vdGF0aW9ucy5wdXNoKFQpfWZ1bmN0aW9uIGwoTixUKXtfLmVhY2goTi5ub2RlcygpLFk9PntZPU4ubm9kZShZKTtZLmV4cGFuZGVkPTE8VDtpZigwPFQpc3dpdGNoKFkubm9kZS50eXBlKXtjYXNlIGMuTm9kZVR5cGUuTUVUQTpjYXNlIGMuTm9kZVR5cGUuU0VSSUVTOmsoWSxULTEpfX0pfWZ1bmN0aW9uIGsoTixUKXtOLmNvcmVHcmFwaCYmbChOLmNvcmVHcmFwaCxUKX1mdW5jdGlvbiBtKE4sVCxZKXtsZXQgYWE9Ti5ub2RlKFQpLGhhPU4ubm9kZShZKSxYPU4uZWRnZShULFkpO2lmKGFhLm5vZGUuaW5jbHVkZSE9PWMuSW5jbHVzaW9uVHlwZS5JTkNMVURFJiZoYS5ub2RlLmluY2x1ZGUhPT1jLkluY2x1c2lvblR5cGUuSU5DTFVERXx8CmFhLm5vZGUuaW5jbHVkZT09PWMuSW5jbHVzaW9uVHlwZS5FWENMVURFfHxoYS5ub2RlLmluY2x1ZGU9PT1jLkluY2x1c2lvblR5cGUuRVhDTFVERSlnKGFhLGhhLm5vZGUsaGEsWCxLLlNIT1JUQ1VUKSxmKGhhLGFhLm5vZGUsYWEsWCxLLlNIT1JUQ1VUKSxOLnJlbW92ZUVkZ2UoVCxZKX1mdW5jdGlvbiBwKE4sVCxZKXtsZXQgYWE9Ti5jb3JlR3JhcGgsaGE9YWEubm9kZShUKTtoYS5pc091dEV4dHJhY3Q9ITA7Xy5lYWNoKGFhLnByZWRlY2Vzc29ycyhUKSxYPT57bShhYSxYLFQpfSk7KEYuZGV0YWNoQWxsRWRnZXNGb3JIaWdoRGVncmVlfHxZKSYmXy5lYWNoKGFhLnN1Y2Nlc3NvcnMoVCksWD0+e20oYWEsVCxYKX0pOzA9PT1hYS5uZWlnaGJvcnMoVCkubGVuZ3RoJiYoaGEubm9kZS5pbmNsdWRlPWMuSW5jbHVzaW9uVHlwZS5FWENMVURFLE4uaXNvbGF0ZWRPdXRFeHRyYWN0LnB1c2goaGEpLGFhLnJlbW92ZU5vZGUoVCkpfWZ1bmN0aW9uIHEoTixULFkpe2xldCBhYT1OLmNvcmVHcmFwaCwKaGE9YWEubm9kZShUKTtoYS5pc0luRXh0cmFjdD0hMDtfLmVhY2goYWEuc3VjY2Vzc29ycyhUKSxYPT57bShhYSxULFgpfSk7KEYuZGV0YWNoQWxsRWRnZXNGb3JIaWdoRGVncmVlfHxZKSYmXy5lYWNoKGFhLnByZWRlY2Vzc29ycyhUKSxYPT57bShhYSxYLFQpfSk7MD09PWFhLm5laWdoYm9ycyhUKS5sZW5ndGgmJihoYS5ub2RlLmluY2x1ZGU9Yy5JbmNsdXNpb25UeXBlLkVYQ0xVREUsTi5pc29sYXRlZEluRXh0cmFjdC5wdXNoKGhhKSxhYS5yZW1vdmVOb2RlKFQpKX1mdW5jdGlvbiByKE4sVCl7aWYoTi50eXBlPT09Yy5Ob2RlVHlwZS5PUClmb3IodmFyIFk9MDtZPFQubGVuZ3RoO1krKyl7aWYoTi5vcD09PVRbWV0pcmV0dXJuITB9ZWxzZSBpZihOLnR5cGU9PT1jLk5vZGVUeXBlLk1FVEEmJihOPU4uZ2V0Um9vdE9wKCkpKWZvcihZPTA7WTxULmxlbmd0aDtZKyspaWYoTi5vcD09PVRbWV0pcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gdChOKXtsZXQgVD1OLmNvcmVHcmFwaDtfLmVhY2goVC5ub2RlcygpLApZPT57VC5ub2RlKFkpLm5vZGUuaW5jbHVkZSE9PWMuSW5jbHVzaW9uVHlwZS5FWENMVURFfHxZLnN0YXJ0c1dpdGgoYS5ncmFwaC5GVU5DVElPTl9MSUJSQVJZX05PREVfUFJFRklYKXx8KE4uY29yZUdyYXBoLm91dEVkZ2VzKFkpLmxlbmd0aD5OLmNvcmVHcmFwaC5pbkVkZ2VzKFkpLmxlbmd0aD9wKE4sWSwhMCk6cShOLFksITApKX0pfWZ1bmN0aW9uIHYoTil7bGV0IFQ9Ti5jb3JlR3JhcGg7Xy5lYWNoKFQubm9kZXMoKSxZPT57bGV0IGFhPVQubm9kZShZKTthYS5ub2RlLmluY2x1ZGU9PT1jLkluY2x1c2lvblR5cGUuVU5TUEVDSUZJRUQmJnIoYWEubm9kZSxGLm91dEV4dHJhY3RUeXBlcykmJnAoTixZKX0pfWZ1bmN0aW9uIEEoTil7bGV0IFQ9Ti5jb3JlR3JhcGg7Xy5lYWNoKFQubm9kZXMoKSxZPT57bGV0IGFhPVQubm9kZShZKTthYS5ub2RlLmluY2x1ZGU9PT1jLkluY2x1c2lvblR5cGUuVU5TUEVDSUZJRUQmJnIoYWEubm9kZSxGLmluRXh0cmFjdFR5cGVzKSYmcShOLFkpfSl9CmZ1bmN0aW9uIHkoTil7bGV0IFQ9Ti5jb3JlR3JhcGgsWT17fSxhYT17fSxoYT0wO18uZWFjaChULm5vZGVzKCksbGE9PntpZihULm5vZGUobGEpLm5vZGUuaW5jbHVkZT09PWMuSW5jbHVzaW9uVHlwZS5VTlNQRUNJRklFRCl7dmFyIHdhPV8ucmVkdWNlKFQucHJlZGVjZXNzb3JzKGxhKSwoeGEsemEpPT57emE9VC5lZGdlKHphLGxhKS5tZXRhZWRnZTtyZXR1cm4geGErKHphLm51bVJlZ3VsYXJFZGdlcz8xOjApfSwwKTswPT09d2EmJjA8VC5wcmVkZWNlc3NvcnMobGEpLmxlbmd0aCYmKHdhPVQucHJlZGVjZXNzb3JzKGxhKS5sZW5ndGgpO3ZhciBDYT1fLnJlZHVjZShULnN1Y2Nlc3NvcnMobGEpLCh4YSx6YSk9Pnt6YT1ULmVkZ2UobGEsemEpLm1ldGFlZGdlO3JldHVybiB4YSsoemEubnVtUmVndWxhckVkZ2VzPzE6MCl9LDApOzA9PT1DYSYmMDxULnN1Y2Nlc3NvcnMobGEpLmxlbmd0aCYmKENhPVQuc3VjY2Vzc29ycyhsYSkubGVuZ3RoKTtZW2xhXT13YTthYVtsYV09Q2E7aGErK319KTsKaWYoIShoYTxGLm1pbk5vZGVDb3VudEZvckV4dHJhY3Rpb24pKXt2YXIgWD1GLm1pbkRlZ3JlZUZvckV4dHJhY3Rpb24tMSxjYT1NYXRoLnJvdW5kKC43NSpoYSksZWE9TWF0aC5yb3VuZCguMjUqaGEpLGthPU9iamVjdC5rZXlzKFkpLnNvcnQoKGxhLHdhKT0+WVtsYV0tWVt3YV0pLGJhPVlba2FbY2FdXTtiYT1iYStiYS1ZW2thW2VhXV07YmE9TWF0aC5tYXgoYmEsWCk7Zm9yKGxldCBsYT1oYS0xO1lba2FbbGFdXT5iYTtsYS0tKXEoTixrYVtsYV0pO2thPU9iamVjdC5rZXlzKGFhKS5zb3J0KChsYSx3YSk9PmFhW2xhXS1hYVt3YV0pO2NhPWFhW2thW2NhXV07ZWE9Y2ErNCooY2EtYWFba2FbZWFdXSk7ZWE9TWF0aC5tYXgoZWEsWCk7Zm9yKFg9aGEtMTthYVtrYVtYXV0+ZWE7WC0tKShjYT1ULm5vZGUoa2FbWF0pKSYmIWNhLmlzSW5FeHRyYWN0JiZwKE4sa2FbWF0pfX1mdW5jdGlvbiB4KE4pe2xldCBUPU4uY29yZUdyYXBoLFk9e307Xy5lYWNoKFQuZWRnZXMoKSxhYT0+e1QuZWRnZShhYSkubWV0YWVkZ2UubnVtUmVndWxhckVkZ2VzfHwKKChZW2FhLnZdPVlbYWEudl18fFtdKS5wdXNoKGFhKSwoWVthYS53XT1ZW2FhLnddfHxbXSkucHVzaChhYSkpfSk7Xy5lYWNoKFksYWE9PnthYS5sZW5ndGg+Ri5tYXhDb250cm9sRGVncmVlJiZfLmVhY2goYWEsaGE9Pm0oVCxoYS52LGhhLncpKX0pfWZ1bmN0aW9uIEMoTil7dChOKTtGLm91dEV4dHJhY3RUeXBlcyYmdihOKTtGLmluRXh0cmFjdFR5cGVzJiZBKE4pO3koTik7Ri5tYXhDb250cm9sRGVncmVlJiZ4KE4pO2xldCBUPU4uY29yZUdyYXBoO18uZWFjaChULm5vZGVzKCksWT0+e2xldCBhYT1ULm5vZGUoWSk7dmFyIGhhPVQubmVpZ2hib3JzKFkpLmxlbmd0aDtpZihhYS5ub2RlLmluY2x1ZGU9PT1jLkluY2x1c2lvblR5cGUuVU5TUEVDSUZJRUQmJjA9PT1oYSl7aGE9MDxhYS5vdXRBbm5vdGF0aW9ucy5saXN0Lmxlbmd0aDtsZXQgWD0wPGFhLmluQW5ub3RhdGlvbnMubGlzdC5sZW5ndGg7YWEuaXNJbkV4dHJhY3Q/KE4uaXNvbGF0ZWRJbkV4dHJhY3QucHVzaChhYSksYWEubm9kZS5pbmNsdWRlPQpjLkluY2x1c2lvblR5cGUuRVhDTFVERSxULnJlbW92ZU5vZGUoWSkpOmFhLmlzT3V0RXh0cmFjdD8oTi5pc29sYXRlZE91dEV4dHJhY3QucHVzaChhYSksYWEubm9kZS5pbmNsdWRlPWMuSW5jbHVzaW9uVHlwZS5FWENMVURFLFQucmVtb3ZlTm9kZShZKSk6Ri5leHRyYWN0SXNvbGF0ZWROb2Rlc1dpdGhBbm5vdGF0aW9uc09uT25lU2lkZSYmKGhhJiYhWD8oYWEuaXNJbkV4dHJhY3Q9ITAsTi5pc29sYXRlZEluRXh0cmFjdC5wdXNoKGFhKSxhYS5ub2RlLmluY2x1ZGU9Yy5JbmNsdXNpb25UeXBlLkVYQ0xVREUsVC5yZW1vdmVOb2RlKFkpKTpYJiYhaGEmJihhYS5pc091dEV4dHJhY3Q9ITAsTi5pc29sYXRlZE91dEV4dHJhY3QucHVzaChhYSksYWEubm9kZS5pbmNsdWRlPWMuSW5jbHVzaW9uVHlwZS5FWENMVURFLFQucmVtb3ZlTm9kZShZKSkpfX0pfWQuT3BOb2RlQ29sb3JzPXtERUZBVUxUX0ZJTEw6IiNmZmZmZmYiLERFRkFVTFRfU1RST0tFOiIjYjJiMmIyIixDT01QQVRJQkxFOiIjMGY5ZDU4IiwKSU5DT01QQVRJQkxFOiIjZGI0NDM3In07ZC5NZXRhbm9kZUNvbG9ycz17REVGQVVMVF9GSUxMOiIjZDlkOWQ5IixERUZBVUxUX1NUUk9LRToiI2E2YTZhNiIsU0FUVVJBVElPTjouNixMSUdIVE5FU1M6Ljg1LEVYUEFOREVEX0NPTE9SOiIjZjBmMGYwIixIVUVTOlsyMjAsMTAwLDE4MCw0MCwyMCwzNDAsMjYwLDMwMCwxNDAsNjBdLFNUUlVDVFVSRV9QQUxFVFRFKE4sVCl7dmFyIFk9ZC5NZXRhbm9kZUNvbG9ycy5IVUVTO049WVtOJVkubGVuZ3RoXTtZPU1hdGguc2luKE4qTWF0aC5QSS8zNjApO3JldHVybiBkMy5oc2woTiwuMDEqKFQ/MzA6OTAtNjAqWSksLjAxKihUPzk1OjgwKSkudG9TdHJpbmcoKX0sREVWSUNFX1BBTEVUVEUoTil7cmV0dXJuIGQuTWV0YW5vZGVDb2xvcnMuU1RSVUNUVVJFX1BBTEVUVEUoTil9LFhMQV9DTFVTVEVSX1BBTEVUVEUoTil7cmV0dXJuIGQuTWV0YW5vZGVDb2xvcnMuU1RSVUNUVVJFX1BBTEVUVEUoTil9LFVOS05PV046IiNlZWUiLEdSQURJRU5UX09VVExJTkU6IiM4ODgifTsKZC5TZXJpZXNOb2RlQ29sb3JzPXtERUZBVUxUX0ZJTEw6IndoaXRlIixERUZBVUxUX1NUUk9LRToiI2IyYjJiMiJ9O2NvbnN0IEY9e2VuYWJsZUV4dHJhY3Rpb246ITAsbWluTm9kZUNvdW50Rm9yRXh0cmFjdGlvbjoxNSxtaW5EZWdyZWVGb3JFeHRyYWN0aW9uOjUsbWF4Q29udHJvbERlZ3JlZTo0LG1heEJyaWRnZVBhdGhEZWdyZWU6NCxvdXRFeHRyYWN0VHlwZXM6WyJOb09wIl0saW5FeHRyYWN0VHlwZXM6W10sZGV0YWNoQWxsRWRnZXNGb3JIaWdoRGVncmVlOiEwLGV4dHJhY3RJc29sYXRlZE5vZGVzV2l0aEFubm90YXRpb25zT25PbmVTaWRlOiEwLGVuYWJsZUJyaWRnZWdyYXBoOiEwLG1pbk1heENvbG9yczpbIiNmZmY1ZjAiLCIjZmI2YTRhIl0sbWF4QW5ub3RhdGlvbnM6NX0sRD1uZXcgUmVnRXhwKCJeKD86IithLmdyYXBoLkZVTkNUSU9OX0xJQlJBUllfTk9ERV9QUkVGSVgrIik/KFxcdyspX1thLXowLTldezh9KD86X1xcZCspPyQiKTtjbGFzcyBCe2NvbnN0cnVjdG9yKE4sClQpe3RoaXMuaGllcmFyY2h5PU47dGhpcy5kaXNwbGF5aW5nU3RhdHM9VDt0aGlzLmluZGV4PXt9O3RoaXMucmVuZGVyZWRPcE5hbWVzPVtdO3RoaXMuY29tcHV0ZVNjYWxlcygpO3RoaXMuaGFzU3ViaGllcmFyY2h5PXt9O3RoaXMucm9vdD1uZXcgUyhOLnJvb3QsTi5ncmFwaE9wdGlvbnMpO3RoaXMuaW5kZXhbTi5yb290Lm5hbWVdPXRoaXMucm9vdDt0aGlzLnJlbmRlcmVkT3BOYW1lcy5wdXNoKE4ucm9vdC5uYW1lKTt0aGlzLmJ1aWxkU3ViaGllcmFyY2h5KE4ucm9vdC5uYW1lKTt0aGlzLnJvb3QuZXhwYW5kZWQ9ITA7dGhpcy50cmFjZUlucHV0cz0hMX1jb21wdXRlU2NhbGVzKCl7dGhpcy5kZXZpY2VDb2xvck1hcD1kMy5zY2FsZU9yZGluYWwoKS5kb21haW4odGhpcy5oaWVyYXJjaHkuZGV2aWNlcykucmFuZ2UoXy5tYXAoZDMucmFuZ2UodGhpcy5oaWVyYXJjaHkuZGV2aWNlcy5sZW5ndGgpLGQuTWV0YW5vZGVDb2xvcnMuREVWSUNFX1BBTEVUVEUpKTt0aGlzLnhsYUNsdXN0ZXJDb2xvck1hcD0KZDMuc2NhbGVPcmRpbmFsKCkuZG9tYWluKHRoaXMuaGllcmFyY2h5LnhsYUNsdXN0ZXJzKS5yYW5nZShfLm1hcChkMy5yYW5nZSh0aGlzLmhpZXJhcmNoeS54bGFDbHVzdGVycy5sZW5ndGgpLGQuTWV0YW5vZGVDb2xvcnMuWExBX0NMVVNURVJfUEFMRVRURSkpO2xldCBOPXRoaXMuaGllcmFyY2h5LnJvb3QubWV0YWdyYXBoO3ZhciBUPWQzLm1heChOLm5vZGVzKCksWT0+e1k9Ti5ub2RlKFkpO2lmKG51bGwhPVkuc3RhdHMpcmV0dXJuIFkuc3RhdHMudG90YWxCeXRlc30pO3RoaXMubWVtb3J5VXNhZ2VTY2FsZT1kMy5zY2FsZUxpbmVhcigpLmRvbWFpbihbMCxUXSkucmFuZ2UoRi5taW5NYXhDb2xvcnMpO1Q9ZDMubWF4KE4ubm9kZXMoKSxZPT57WT1OLm5vZGUoWSk7aWYobnVsbCE9WS5zdGF0cylyZXR1cm4gWS5zdGF0cy5nZXRUb3RhbE1pY3JvcygpfSk7dGhpcy5jb21wdXRlVGltZVNjYWxlPWQzLnNjYWxlTGluZWFyKCkuZG9tYWluKFswLFRdKS5yYW5nZShGLm1pbk1heENvbG9ycyk7CnRoaXMuZWRnZVdpZHRoU2l6ZWRCYXNlZFNjYWxlPXRoaXMuaGllcmFyY2h5Lmhhc1NoYXBlSW5mbz9jLnNjZW5lLmVkZ2UuRURHRV9XSURUSF9TSVpFX0JBU0VEX1NDQUxFOmQzLnNjYWxlTGluZWFyKCkuZG9tYWluKFsxLHRoaXMuaGllcmFyY2h5Lm1heE1ldGFFZGdlU2l6ZV0pLnJhbmdlKFtjLnNjZW5lLmVkZ2UuTUlOX0VER0VfV0lEVEgsYy5zY2VuZS5lZGdlLk1BWF9FREdFX1dJRFRIXSl9Z2V0UmVuZGVyTm9kZUJ5TmFtZShOKXtyZXR1cm4gdGhpcy5pbmRleFtOXX1nZXROb2RlQnlOYW1lKE4pe3JldHVybiB0aGlzLmhpZXJhcmNoeS5ub2RlKE4pfWNvbG9ySGlzdG9ncmFtKE4sVCl7aWYoMDxPYmplY3Qua2V5cyhOKS5sZW5ndGgpe2NvbnN0IFk9Xy5zdW0oT2JqZWN0LmtleXMoTikubWFwKGFhPT5OW2FhXSkpO3JldHVybiBPYmplY3Qua2V5cyhOKS5tYXAoYWE9Pih7Y29sb3I6VChhYSkscHJvcG9ydGlvbjpOW2FhXS9ZfSkpfWNvbnNvbGUuaW5mbygibm8gcGFpcnMgZm91bmQhIik7CnJldHVybiBudWxsfWdldE9yQ3JlYXRlUmVuZGVyTm9kZUJ5TmFtZShOKXtpZighTilyZXR1cm4gbnVsbDtpZihOIGluIHRoaXMuaW5kZXgpcmV0dXJuIHRoaXMuaW5kZXhbTl07dmFyIFQ9dGhpcy5oaWVyYXJjaHkubm9kZShOKTtpZighVClyZXR1cm4gbnVsbDtsZXQgWT1ULmlzR3JvdXBOb2RlP25ldyBTKFQsdGhpcy5oaWVyYXJjaHkuZ3JhcGhPcHRpb25zKTpuZXcgSihUKTt0aGlzLmluZGV4W05dPVk7dGhpcy5yZW5kZXJlZE9wTmFtZXMucHVzaChOKTtULnN0YXRzJiYoWS5tZW1vcnlDb2xvcj10aGlzLm1lbW9yeVVzYWdlU2NhbGUoVC5zdGF0cy50b3RhbEJ5dGVzKSxZLmNvbXB1dGVUaW1lQ29sb3I9dGhpcy5jb21wdXRlVGltZVNjYWxlKFQuc3RhdHMuZ2V0VG90YWxNaWNyb3MoKSkpO1kuaXNGYWRlZE91dD10aGlzLmRpc3BsYXlpbmdTdGF0cyYmIWEuZ3JhcGgudXRpbC5oYXNEaXNwbGF5YWJsZU5vZGVTdGF0cyhULnN0YXRzKTt2YXIgYWE9bnVsbCxoYT1udWxsLFg9bnVsbDsKaWYoVC5pc0dyb3VwTm9kZSl7YWE9VC5kZXZpY2VIaXN0b2dyYW07aGE9VC54bGFDbHVzdGVySGlzdG9ncmFtO3ZhciBjYT1ULmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uY29tcGF0aWJsZTtUPVQuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5pbmNvbXBhdGlibGU7aWYoMCE9Y2F8fDAhPVQpWD1jYS8oY2ErVCl9ZWxzZShjYT1ZLm5vZGUuZGV2aWNlKSYmKGFhPXtbY2FdOjF9KSwoY2E9WS5ub2RlLnhsYUNsdXN0ZXIpJiYoaGE9e1tjYV06MX0pLFkubm9kZS50eXBlPT09Yy5Ob2RlVHlwZS5PUCYmKFg9WS5ub2RlLmNvbXBhdGlibGU/MTowKTthYSYmKFkuZGV2aWNlQ29sb3JzPXRoaXMuY29sb3JIaXN0b2dyYW0oYWEsdGhpcy5kZXZpY2VDb2xvck1hcCkpO2hhJiYoWS54bGFDbHVzdGVyQ29sb3JzPXRoaXMuY29sb3JIaXN0b2dyYW0oaGEsdGhpcy54bGFDbHVzdGVyQ29sb3JNYXApKTtudWxsIT1YJiYoWS5jb21wYXRpYmlsaXR5Q29sb3JzPVt7Y29sb3I6YS5ncmFwaC5yZW5kZXIuT3BOb2RlQ29sb3JzLkNPTVBBVElCTEUsCnByb3BvcnRpb246WH0se2NvbG9yOmEuZ3JhcGgucmVuZGVyLk9wTm9kZUNvbG9ycy5JTkNPTVBBVElCTEUscHJvcG9ydGlvbjoxLVh9XSk7cmV0dXJuIHRoaXMuaW5kZXhbTl19Z2V0TmVhcmVzdFZpc2libGVBbmNlc3RvcihOKXt2YXIgVD1jLmdldEhpZXJhcmNoaWNhbFBhdGgoTik7bGV0IFk9MCxhYT1udWxsO2Zvcig7WTxULmxlbmd0aCYmKE49VFtZXSxhYT10aGlzLmdldFJlbmRlck5vZGVCeU5hbWUoTiksYWEuZXhwYW5kZWQpO1krKyk7cmV0dXJuIFk9PVQubGVuZ3RoLTImJihUPVRbWSsxXSxhYS5pbkFubm90YXRpb25zLm5vZGVOYW1lc1tUXXx8YWEub3V0QW5ub3RhdGlvbnMubm9kZU5hbWVzW1RdKT9UOk59c2V0RGVwdGgoTil7ayh0aGlzLnJvb3QsK04pfWlzTm9kZUF1eGlsaWFyeShOKXtsZXQgVD10aGlzLmdldFJlbmRlck5vZGVCeU5hbWUoTi5ub2RlLnBhcmVudE5vZGUubmFtZSksWT1fLmZpbmQoVC5pc29sYXRlZEluRXh0cmFjdCxhYT0+YWEubm9kZS5uYW1lPT09Ti5ub2RlLm5hbWUpOwppZihZKXJldHVybiEwO1k9Xy5maW5kKFQuaXNvbGF0ZWRPdXRFeHRyYWN0LGFhPT5hYS5ub2RlLm5hbWU9PT1OLm5vZGUubmFtZSk7cmV0dXJuISFZfWdldE5hbWVzT2ZSZW5kZXJlZE9wcygpe3JldHVybiB0aGlzLnJlbmRlcmVkT3BOYW1lc31jbG9uZUFuZEFkZEZ1bmN0aW9uT3BOb2RlKE4sVCxZLGFhKXt2YXIgaGE9WS5uYW1lLnJlcGxhY2UoVCxhYSk7bGV0IFg9Ti5tZXRhZ3JhcGgubm9kZShoYSk7aWYoWClyZXR1cm4gWDtYPW5ldyBjLk9wTm9kZUltcGwoe25hbWU6aGEsaW5wdXQ6W10sZGV2aWNlOlkuZGV2aWNlLG9wOlkub3AsYXR0cjpfLmNsb25lRGVlcChZLmF0dHIpfSk7WC5jYXJkaW5hbGl0eT1ZLmNhcmRpbmFsaXR5O1guaW5jbHVkZT1ZLmluY2x1ZGU7WC5vdXRwdXRTaGFwZXM9Xy5jbG9uZURlZXAoWS5vdXRwdXRTaGFwZXMpO1gueGxhQ2x1c3Rlcj1ZLnhsYUNsdXN0ZXI7WC5mdW5jdGlvbklucHV0SW5kZXg9WS5mdW5jdGlvbklucHV0SW5kZXg7WC5mdW5jdGlvbk91dHB1dEluZGV4PQpZLmZ1bmN0aW9uT3V0cHV0SW5kZXg7WC5pbnB1dHM9WS5pbnB1dHMubWFwKGNhPT57Y29uc3QgZWE9Xy5jbG9uZShjYSk7ZWEubmFtZT1jYS5uYW1lLnJlcGxhY2UoVCxhYSk7cmV0dXJuIGVhfSk7WC5wYXJlbnROb2RlPU47Ti5tZXRhZ3JhcGguc2V0Tm9kZShYLm5hbWUsWCk7dGhpcy5oaWVyYXJjaHkuc2V0Tm9kZShYLm5hbWUsWCk7aGE9Y2E9PnRoaXMuY2xvbmVBbmRBZGRGdW5jdGlvbk9wTm9kZShOLFQsY2EsYWEpO1guaW5FbWJlZGRpbmdzPVkuaW5FbWJlZGRpbmdzLm1hcChoYSk7WC5vdXRFbWJlZGRpbmdzPVkub3V0RW1iZWRkaW5ncy5tYXAoaGEpO3JldHVybiBYfWNsb25lRnVuY3Rpb25MaWJyYXJ5TWV0YW5vZGUoTixULFksYWEsaGEpe2NvbnN0IFg9e307Tj10aGlzLmNsb25lRnVuY3Rpb25MaWJyYXJ5TWV0YW5vZGVIZWxwZXIoTixULFksYWEsaGEsWCk7Xy5pc0VtcHR5KFgpfHx0aGlzLnBhdGNoRWRnZXNGcm9tRnVuY3Rpb25PdXRwdXRzKFQsWCk7cmV0dXJuIE59Y2xvbmVGdW5jdGlvbkxpYnJhcnlNZXRhbm9kZUhlbHBlcihOLApULFksYWEsaGEsWCl7Y29uc3QgY2E9YS5ncmFwaC5jcmVhdGVNZXRhbm9kZShZLm5hbWUucmVwbGFjZShhYSxoYSkpO2NhLmRlcHRoPVkuZGVwdGg7Y2EuY2FyZGluYWxpdHk9WS5jYXJkaW5hbGl0eTtjYS50ZW1wbGF0ZUlkPVkudGVtcGxhdGVJZDtjYS5vcEhpc3RvZ3JhbT1fLmNsb25lKFkub3BIaXN0b2dyYW0pO2NhLmRldmljZUhpc3RvZ3JhbT1fLmNsb25lKFkuZGV2aWNlSGlzdG9ncmFtKTtjYS54bGFDbHVzdGVySGlzdG9ncmFtPV8uY2xvbmUoWS54bGFDbHVzdGVySGlzdG9ncmFtKTtjYS5oYXNOb25Db250cm9sRWRnZXM9WS5oYXNOb25Db250cm9sRWRnZXM7Y2EuaW5jbHVkZT1ZLmluY2x1ZGU7Y2Eubm9kZUF0dHJpYnV0ZXM9Xy5jbG9uZShZLm5vZGVBdHRyaWJ1dGVzKTtjYS5hc3NvY2lhdGVkRnVuY3Rpb249WS5hc3NvY2lhdGVkRnVuY3Rpb247Xy5lYWNoKFkubWV0YWdyYXBoLm5vZGVzKCksZWE9PntlYT1ZLm1ldGFncmFwaC5ub2RlKGVhKTtzd2l0Y2goZWEudHlwZSl7Y2FzZSBjLk5vZGVUeXBlLk1FVEE6ZWE9CnRoaXMuY2xvbmVGdW5jdGlvbkxpYnJhcnlNZXRhbm9kZUhlbHBlcihOLFQsZWEsYWEsaGEsWCk7ZWEucGFyZW50Tm9kZT1jYTtjYS5tZXRhZ3JhcGguc2V0Tm9kZShlYS5uYW1lLGVhKTt0aGlzLmhpZXJhcmNoeS5zZXROb2RlKGVhLm5hbWUsZWEpO2JyZWFrO2Nhc2UgYy5Ob2RlVHlwZS5PUDplYT10aGlzLmNsb25lQW5kQWRkRnVuY3Rpb25PcE5vZGUoY2EsYWEsZWEsaGEpO18uaXNOdW1iZXIoZWEuZnVuY3Rpb25JbnB1dEluZGV4KSYmdGhpcy5wYXRjaEVkZ2VzSW50b0Z1bmN0aW9uSW5wdXRzKFQsZWEpO18uaXNOdW1iZXIoZWEuZnVuY3Rpb25PdXRwdXRJbmRleCkmJihYW2VhLmZ1bmN0aW9uT3V0cHV0SW5kZXhdPWVhKTticmVhaztkZWZhdWx0OmNvbnNvbGUud2FybihlYS5uYW1lKyIgaXMgb2RkbHkgbmVpdGhlciBhIG1ldGFub2RlIG5vciBhbiBvcG5vZGUuIil9fSk7dGhpcy5jbG9uZUxpYnJhcnlNZXRhbm9kZUVkZ2VzKFksY2EsYWEsaGEpO3JldHVybiBjYX1jbG9uZUxpYnJhcnlNZXRhbm9kZUVkZ2VzKE4sClQsWSxhYSl7Xy5lYWNoKE4ubWV0YWdyYXBoLmVkZ2VzKCksaGE9PntoYT1OLm1ldGFncmFwaC5lZGdlKGhhKTtjb25zdCBYPWhhLnYucmVwbGFjZShZLGFhKSxjYT1oYS53LnJlcGxhY2UoWSxhYSksZWE9bmV3IGMuTWV0YWVkZ2VJbXBsKFgsY2EpO2VhLmluYm91bmQ9aGEuaW5ib3VuZDtlYS5udW1SZWd1bGFyRWRnZXM9aGEubnVtUmVndWxhckVkZ2VzO2VhLm51bUNvbnRyb2xFZGdlcz1oYS5udW1Db250cm9sRWRnZXM7ZWEubnVtUmVmRWRnZXM9aGEubnVtUmVmRWRnZXM7ZWEudG90YWxTaXplPWhhLnRvdGFsU2l6ZTtoYS5iYXNlRWRnZUxpc3QmJihlYS5iYXNlRWRnZUxpc3Q9aGEuYmFzZUVkZ2VMaXN0Lm1hcChrYT0+e2NvbnN0IGJhPV8uY2xvbmUoa2EpO2JhLnY9a2Eudi5yZXBsYWNlKFksYWEpO2JhLnc9a2Eudy5yZXBsYWNlKFksYWEpO3JldHVybiBiYX0pKTtULm1ldGFncmFwaC5ub2RlKGNhKT9ULm1ldGFncmFwaC5zZXRFZGdlKFgsY2EsZWEpOlQubWV0YWdyYXBoLnNldEVkZ2UoY2EsClgsZWEpfSl9cGF0Y2hFZGdlc0ludG9GdW5jdGlvbklucHV0cyhOLFQpe2xldCBZPU1hdGgubWluKFQuZnVuY3Rpb25JbnB1dEluZGV4LE4uaW5wdXRzLmxlbmd0aC0xKTtmb3IodmFyIGFhPV8uY2xvbmUoTi5pbnB1dHNbWV0pO2FhLmlzQ29udHJvbERlcGVuZGVuY3k7KVkrKyxhYT1OLmlucHV0c1tZXTtULmlucHV0cy5wdXNoKGFhKTthYT10aGlzLmhpZXJhcmNoeS5nZXRQcmVkZWNlc3NvcnMoTi5uYW1lKTtsZXQgaGEsWD0wO18uZWFjaChhYS5yZWd1bGFyLGNhPT57WCs9Y2EubnVtUmVndWxhckVkZ2VzO2lmKFg+WSlyZXR1cm4gaGE9Y2EsITF9KTtfLmVhY2goaGEuYmFzZUVkZ2VMaXN0LGNhPT57Y2Eudz09PU4ubmFtZSYmKGNhLnc9VC5uYW1lKTtjYS52PT09Ti5uYW1lJiYoY2Eudj1ULm5hbWUpfSl9cGF0Y2hFZGdlc0Zyb21GdW5jdGlvbk91dHB1dHMoTixUKXtjb25zdCBZPXRoaXMuaGllcmFyY2h5LmdldFN1Y2Nlc3NvcnMoTi5uYW1lKTtfLmVhY2goWS5yZWd1bGFyLGFhPT4Ke18uZWFjaChhYS5iYXNlRWRnZUxpc3QsaGE9Pntjb25zdCBYPXRoaXMuaGllcmFyY2h5Lm5vZGUoaGEudyk7Xy5lYWNoKFguaW5wdXRzLGNhPT57Y2EubmFtZT09PU4ubmFtZSYmKGNhLm5hbWU9VFtjYS5vdXRwdXRUZW5zb3JLZXldLm5hbWUsY2Eub3V0cHV0VGVuc29yS2V5PWhhLm91dHB1dFRlbnNvcktleSl9KX0pO18uZWFjaChhYS5iYXNlRWRnZUxpc3QsaGE9PntoYS52PVRbaGEub3V0cHV0VGVuc29yS2V5XS5uYW1lO2hhLm91dHB1dFRlbnNvcktleT0iMCJ9KX0pfWJ1aWxkU3ViaGllcmFyY2h5KE4pe2lmKCEoTiBpbiB0aGlzLmhhc1N1YmhpZXJhcmNoeSkpe3RoaXMuaGFzU3ViaGllcmFyY2h5W05dPSEwO3ZhciBUPXRoaXMuaW5kZXhbTl07aWYoVC5ub2RlLnR5cGU9PT1jLk5vZGVUeXBlLk1FVEF8fFQubm9kZS50eXBlPT09Yy5Ob2RlVHlwZS5TRVJJRVMpe3ZhciBZPVQubm9kZS5tZXRhZ3JhcGgsYWE9VC5jb3JlR3JhcGgsaGE9W10sWD1bXTtfLmlzRW1wdHkodGhpcy5oaWVyYXJjaHkubGlicmFyeUZ1bmN0aW9ucyl8fAooXy5lYWNoKFkubm9kZXMoKSx6YT0+e2NvbnN0IEZhPVkubm9kZSh6YSksU2E9dGhpcy5oaWVyYXJjaHkubGlicmFyeUZ1bmN0aW9uc1tGYS5vcF07U2EmJjAhPT16YS5pbmRleE9mKGEuZ3JhcGguRlVOQ1RJT05fTElCUkFSWV9OT0RFX1BSRUZJWCkmJih6YT10aGlzLmNsb25lRnVuY3Rpb25MaWJyYXJ5TWV0YW5vZGUoWSxGYSxTYS5ub2RlLFNhLm5vZGUubmFtZSxGYS5uYW1lKSxoYS5wdXNoKEZhKSxYLnB1c2goemEpKX0pLF8uZWFjaChYLCh6YSxGYSk9PntGYT1oYVtGYV07emEucGFyZW50Tm9kZT1GYS5wYXJlbnROb2RlO1kuc2V0Tm9kZShGYS5uYW1lLHphKTt0aGlzLmhpZXJhcmNoeS5zZXROb2RlKEZhLm5hbWUsemEpfSkpO18uZWFjaChZLm5vZGVzKCksemE9PntsZXQgRmE9dGhpcy5nZXRPckNyZWF0ZVJlbmRlck5vZGVCeU5hbWUoemEpLFNhPUZhLm5vZGU7YWEuc2V0Tm9kZSh6YSxGYSk7U2EuaXNHcm91cE5vZGV8fChfLmVhY2goU2EuaW5FbWJlZGRpbmdzLEVhPT57bGV0IEdhPQpuZXcgUChudWxsKSxkYj1uZXcgSihFYSk7ZihGYSxFYSxkYixHYSxLLkNPTlNUQU5UKTt0aGlzLmluZGV4W0VhLm5hbWVdPWRifSksXy5lYWNoKFNhLm91dEVtYmVkZGluZ3MsRWE9PntsZXQgR2E9bmV3IFAobnVsbCksZGI9bmV3IEooRWEpO2coRmEsRWEsZGIsR2EsSy5TVU1NQVJZKTt0aGlzLmluZGV4W0VhLm5hbWVdPWRifSkpfSk7Xy5lYWNoKFkuZWRnZXMoKSx6YT0+e3ZhciBGYT1ZLmVkZ2UoemEpO0ZhPW5ldyBQKEZhKTtGYS5pc0ZhZGVkT3V0PXRoaXMuaW5kZXhbemEudl0uaXNGYWRlZE91dHx8dGhpcy5pbmRleFt6YS53XS5pc0ZhZGVkT3V0O2FhLnNldEVkZ2UoemEudix6YS53LEZhKX0pO0YuZW5hYmxlRXh0cmFjdGlvbiYmVC5ub2RlLnR5cGU9PT1jLk5vZGVUeXBlLk1FVEEmJkMoVCk7Xy5pc0VtcHR5KHRoaXMuaGllcmFyY2h5LmxpYnJhcnlGdW5jdGlvbnMpfHx0aGlzLmJ1aWxkU3ViaGllcmFyY2hpZXNGb3JOZWVkZWRGdW5jdGlvbnMoWSk7Tj09PWEuZ3JhcGguUk9PVF9OQU1FJiYKXy5mb3JPd24odGhpcy5oaWVyYXJjaHkubGlicmFyeUZ1bmN0aW9ucyx6YT0+e3phPXphLm5vZGU7Y29uc3QgRmE9dGhpcy5nZXRPckNyZWF0ZVJlbmRlck5vZGVCeU5hbWUoemEubmFtZSk7VC5saWJyYXJ5RnVuY3Rpb25zRXh0cmFjdC5wdXNoKEZhKTtGYS5ub2RlLmluY2x1ZGU9Yy5JbmNsdXNpb25UeXBlLkVYQ0xVREU7YWEucmVtb3ZlTm9kZSh6YS5uYW1lKX0pO3ZhciBjYT1ULm5vZGUucGFyZW50Tm9kZTtpZihjYSl7dmFyIGVhPXRoaXMuaW5kZXhbY2EubmFtZV0sa2E9KHphLC4uLkZhKT0+RmEuY29uY2F0KFt6YT8iSU4iOiJPVVQiXSkuam9pbigifn4iKSxiYT10aGlzLmhpZXJhcmNoeS5nZXRCcmlkZ2VncmFwaChOKSxsYT17fSx3YT17fSxDYT17fTtfLmVhY2goYmEuZWRnZXMoKSx6YT0+e2xldCBGYT0hIVkubm9kZSh6YS53KSxTYT1GYT96YS52OnphLnc7YmEuZWRnZSh6YSkubnVtUmVndWxhckVkZ2VzP0ZhP3dhW1NhXT0od2FbU2FdfHwwKSsxOmxhW1NhXT0obGFbU2FdfHwKMCkrMTpDYVtTYV09KENhW1NhXXx8MCkrMX0pO3ZhciB4YT10aGlzLmhpZXJhcmNoeS5nZXROb2RlTWFwKCk7Xy5lYWNoKGJhLmVkZ2VzKCksemE9Pnt2YXIgRmE9YmEuZWRnZSh6YSk7bGV0IFNhPSEhWS5ub2RlKHphLncpLFtFYSxHYV09U2E/W3phLncsemEudl06W3phLnYsemEud107dmFyIGRiPXRoaXMuaW5kZXhbRWFdLHhiPXRoaXMuaW5kZXhbR2FdLENiPXhiP3hiLm5vZGU6eGFbR2FdLHliPSFGYS5udW1SZWd1bGFyRWRnZXMmJkNhW0dhXT5GLm1heENvbnRyb2xEZWdyZWUsWyx0Yl09U2E/W1QuaW5Bbm5vdGF0aW9ucyxkYi5pbkFubm90YXRpb25zXTpbVC5vdXRBbm5vdGF0aW9ucyxkYi5vdXRBbm5vdGF0aW9uc107bGV0IENjPShTYT93YTpsYSlbR2FdPkYubWF4QnJpZGdlUGF0aERlZ3JlZTt6YT1udWxsO3ZhciBaYj0hMTtGLmVuYWJsZUJyaWRnZWdyYXBoJiYhQ2MmJiF5YiYmZGIuaXNJbkNvcmUoKSYmKFpiPWhkPT5lYS5jb3JlR3JhcGguZWRnZShTYT97djpoZCx3Ok59Ogp7djpOLHc6aGR9KSwoemE9WmIoR2EpKXx8KHphPVpiKGthKFNhLEdhLGNhLm5hbWUpKSksWmI9ISF6YSk7ZGI9ITE7aWYoemEmJiFGYS5udW1SZWd1bGFyRWRnZXMpe2RiPXphO2Zvcih5Yj1lYS5ub2RlO2RiLmFkam9pbmluZ01ldGFlZGdlOylkYj1kYi5hZGpvaW5pbmdNZXRhZWRnZSx5Yj15Yi5wYXJlbnROb2RlO3liPXRoaXMuaGllcmFyY2h5LmdldFRvcG9sb2dpY2FsT3JkZXJpbmcoeWIubmFtZSk7ZGI9ZGIubWV0YWVkZ2U7ZGI9eWJbZGIudl0+eWJbZGIud119WmImJiFkYj8oQ2I9a2EoU2EsTikseGI9a2EoU2EsR2EsTiksdGI9YWEubm9kZSh4YiksdGJ8fChaYj1hYS5ub2RlKENiKSxaYnx8KFpiPW5ldyBKKHtuYW1lOkNiLHR5cGU6Yy5Ob2RlVHlwZS5CUklER0UsaXNHcm91cE5vZGU6ITEsY2FyZGluYWxpdHk6MCxwYXJlbnROb2RlOm51bGwsc3RhdHM6bnVsbCxpbmNsdWRlOmMuSW5jbHVzaW9uVHlwZS5VTlNQRUNJRklFRCxpbmJvdW5kOlNhLG5vZGVBdHRyaWJ1dGVzOnt9fSksCnRoaXMuaW5kZXhbQ2JdPVpiLGFhLnNldE5vZGUoQ2IsWmIpKSx0Yj1uZXcgSih7bmFtZTp4Yix0eXBlOmMuTm9kZVR5cGUuQlJJREdFLGlzR3JvdXBOb2RlOiExLGNhcmRpbmFsaXR5OjEscGFyZW50Tm9kZTpudWxsLHN0YXRzOm51bGwsaW5jbHVkZTpjLkluY2x1c2lvblR5cGUuVU5TUEVDSUZJRUQsaW5ib3VuZDpTYSxub2RlQXR0cmlidXRlczp7fX0pLHRoaXMuaW5kZXhbeGJdPXRiLGFhLnNldE5vZGUoeGIsdGIpLGFhLnNldFBhcmVudCh4YixDYiksWmIubm9kZS5jYXJkaW5hbGl0eSsrKSxGYT1uZXcgUChGYSksRmEuYWRqb2luaW5nTWV0YWVkZ2U9emEsU2E/YWEuc2V0RWRnZSh4YixFYSxGYSk6YWEuc2V0RWRnZShFYSx4YixGYSkpOnRiLnB1c2gobmV3IEcoQ2IseGIsbmV3IFAoRmEpLEsuU0hPUlRDVVQsU2EpKX0pO18uZWFjaChbITAsITFdLHphPT57bGV0IEZhPWthKHphLE4pLFNhPWFhLm5vZGUoRmEpO1NhJiZfLmVhY2goYWEubm9kZXMoKSxFYT0+e2lmKGFhLm5vZGUoRWEpLm5vZGUudHlwZSE9PQpjLk5vZGVUeXBlLkJSSURHRSYmKHphPyFhYS5wcmVkZWNlc3NvcnMoRWEpLmxlbmd0aDohYWEuc3VjY2Vzc29ycyhFYSkubGVuZ3RoKSl7dmFyIEdhPWthKHphLE4sIlNUUlVDVFVSQUxfVEFSR0VUIiksZGI9YWEubm9kZShHYSk7ZGJ8fChkYj1uZXcgSih7bmFtZTpHYSx0eXBlOmMuTm9kZVR5cGUuQlJJREdFLGlzR3JvdXBOb2RlOiExLGNhcmRpbmFsaXR5OjEscGFyZW50Tm9kZTpudWxsLHN0YXRzOm51bGwsaW5jbHVkZTpjLkluY2x1c2lvblR5cGUuVU5TUEVDSUZJRUQsaW5ib3VuZDp6YSxub2RlQXR0cmlidXRlczp7fX0pLGRiLnN0cnVjdHVyYWw9ITAsdGhpcy5pbmRleFtHYV09ZGIsYWEuc2V0Tm9kZShHYSxkYiksU2Eubm9kZS5jYXJkaW5hbGl0eSsrLGFhLnNldFBhcmVudChHYSxGYSkpO2RiPW5ldyBQKG51bGwpO2RiLnN0cnVjdHVyYWw9ITA7ZGIud2VpZ2h0LS07emE/YWEuc2V0RWRnZShHYSxFYSxkYik6YWEuc2V0RWRnZShFYSxHYSxkYil9fSl9KX19fX1idWlsZFN1YmhpZXJhcmNoaWVzRm9yTmVlZGVkRnVuY3Rpb25zKE4pe18uZWFjaChOLmVkZ2VzKCksClQ9PntUPU4uZWRnZShUKTtUPW5ldyBQKFQpO18uZm9yRWFjaChULm1ldGFlZGdlLmJhc2VFZGdlTGlzdCxZPT57dmFyIGFhPVkudi5zcGxpdChhLmdyYXBoLk5BTUVTUEFDRV9ERUxJTSk7Zm9yKHZhciBoYT1hYS5sZW5ndGg7MDw9aGE7aGEtLSl7WT1hYS5zbGljZSgwLGhhKTtjb25zdCBYPXRoaXMuaGllcmFyY2h5Lm5vZGUoWS5qb2luKGEuZ3JhcGguTkFNRVNQQUNFX0RFTElNKSk7aWYoWCl7aWYoWC50eXBlPT09Yy5Ob2RlVHlwZS5PUCYmdGhpcy5oaWVyYXJjaHkubGlicmFyeUZ1bmN0aW9uc1tYLm9wXSlmb3IoYWE9MTthYTxZLmxlbmd0aDthYSsrKShoYT1ZLnNsaWNlKDAsYWEpLmpvaW4oYS5ncmFwaC5OQU1FU1BBQ0VfREVMSU0pKSYmdGhpcy5idWlsZFN1YmhpZXJhcmNoeShoYSk7YnJlYWt9fX0pfSl9fWQuUmVuZGVyR3JhcGhJbmZvPUI7Y2xhc3MgR3tjb25zdHJ1Y3RvcihOLFQsWSxhYSxoYSl7dGhpcy5ub2RlPU47dGhpcy5yZW5kZXJOb2RlSW5mbz1UO3RoaXMucmVuZGVyTWV0YWVkZ2VJbmZvPQpZO3RoaXMuYW5ub3RhdGlvblR5cGU9YWE7dGhpcy5oZWlnaHQ9dGhpcy53aWR0aD10aGlzLmR5PXRoaXMuZHg9MDtZJiZZLm1ldGFlZGdlJiYodGhpcy52PVkubWV0YWVkZ2Uudix0aGlzLnc9WS5tZXRhZWRnZS53KTt0aGlzLmlzSW49aGE7dGhpcy5wb2ludHM9W119fWQuQW5ub3RhdGlvbj1HO2xldCBLOyhmdW5jdGlvbihOKXtOW04uU0hPUlRDVVQ9MF09IlNIT1JUQ1VUIjtOW04uQ09OU1RBTlQ9MV09IkNPTlNUQU5UIjtOW04uU1VNTUFSWT0yXT0iU1VNTUFSWSI7TltOLkVMTElQU0lTPTNdPSJFTExJUFNJUyJ9KShLPWQuQW5ub3RhdGlvblR5cGV8fChkLkFubm90YXRpb25UeXBlPXt9KSk7Y2xhc3MgTHtjb25zdHJ1Y3Rvcigpe3RoaXMubGlzdD1bXTt0aGlzLm5vZGVOYW1lcz17fX1wdXNoKE4pe2lmKCEoTi5ub2RlLm5hbWUgaW4gdGhpcy5ub2RlTmFtZXMpKWlmKHRoaXMubm9kZU5hbWVzW04ubm9kZS5uYW1lXT0hMCx0aGlzLmxpc3QubGVuZ3RoPEYubWF4QW5ub3RhdGlvbnMpdGhpcy5saXN0LnB1c2goTik7CmVsc2V7dmFyIFQ9dGhpcy5saXN0W3RoaXMubGlzdC5sZW5ndGgtMV07VC5hbm5vdGF0aW9uVHlwZT09PUsuRUxMSVBTSVM/KE49VC5ub2RlLE4uc2V0TnVtTW9yZU5vZGVzKCsrTi5udW1Nb3JlTm9kZXMpKTooVD1uZXcgYS5ncmFwaC5FbGxpcHNpc05vZGVJbXBsKDEpLHRoaXMubGlzdC5wdXNoKG5ldyBHKFQsbmV3IEooVCksbnVsbCxLLkVMTElQU0lTLE4uaXNJbikpKX19fWQuQW5ub3RhdGlvbkxpc3Q9TDtjbGFzcyBKe2NvbnN0cnVjdG9yKE4pe3RoaXMubm9kZT1OO3RoaXMuZXhwYW5kZWQ9ITE7dGhpcy5pbkFubm90YXRpb25zPW5ldyBMO3RoaXMub3V0QW5ub3RhdGlvbnM9bmV3IEw7dGhpcy5vdXRib3hXaWR0aD10aGlzLmluYm94V2lkdGg9dGhpcy5oZWlnaHQ9dGhpcy53aWR0aD10aGlzLnk9dGhpcy54PTA7dGhpcy5zdHJ1Y3R1cmFsPXRoaXMuZXhjbHVkZWQ9ITE7dGhpcy5wYWRkaW5nQm90dG9tPXRoaXMucGFkZGluZ1JpZ2h0PXRoaXMucGFkZGluZ0xlZnQ9dGhpcy5wYWRkaW5nVG9wPQp0aGlzLmxhYmVsSGVpZ2h0PXRoaXMucmFkaXVzPXRoaXMubGFiZWxPZmZzZXQ9MDt0aGlzLmlzT3V0RXh0cmFjdD10aGlzLmlzSW5FeHRyYWN0PSExO3RoaXMuY29yZUJveD17d2lkdGg6MCxoZWlnaHQ6MH07dGhpcy5pc0ZhZGVkT3V0PSExO3RoaXMuZGlzcGxheU5hbWU9Ti5uYW1lLnN1YnN0cmluZyhOLm5hbWUubGFzdEluZGV4T2YoYS5ncmFwaC5OQU1FU1BBQ0VfREVMSU0pKzEpO04udHlwZT09PWMuTm9kZVR5cGUuTUVUQSYmTi5hc3NvY2lhdGVkRnVuY3Rpb24mJigoTj10aGlzLmRpc3BsYXlOYW1lLm1hdGNoKEQpKT90aGlzLmRpc3BsYXlOYW1lPU5bMV06Xy5zdGFydHNXaXRoKHRoaXMuZGlzcGxheU5hbWUsYS5ncmFwaC5GVU5DVElPTl9MSUJSQVJZX05PREVfUFJFRklYKSYmKHRoaXMuZGlzcGxheU5hbWU9dGhpcy5kaXNwbGF5TmFtZS5zdWJzdHJpbmcoYS5ncmFwaC5GVU5DVElPTl9MSUJSQVJZX05PREVfUFJFRklYLmxlbmd0aCkpKX1pc0luQ29yZSgpe3JldHVybiF0aGlzLmlzSW5FeHRyYWN0JiYKIXRoaXMuaXNPdXRFeHRyYWN0JiYhdGhpcy5pc0xpYnJhcnlGdW5jdGlvbn19ZC5SZW5kZXJOb2RlSW5mbz1KO2NsYXNzIFB7Y29uc3RydWN0b3IoTil7dGhpcy5tZXRhZWRnZT1OO3RoaXMuYWRqb2luaW5nTWV0YWVkZ2U9bnVsbDt0aGlzLnN0cnVjdHVyYWw9ITE7dGhpcy53ZWlnaHQ9MTt0aGlzLmlzRmFkZWRPdXQ9ITF9fWQuUmVuZGVyTWV0YWVkZ2VJbmZvPVA7Y2xhc3MgUyBleHRlbmRzIEp7Y29uc3RydWN0b3IoTixUKXtzdXBlcihOKTtOPU4ubWV0YWdyYXBoLmdyYXBoKCk7VC5jb21wb3VuZD0hMDt0aGlzLmNvcmVHcmFwaD1jLmNyZWF0ZUdyYXBoKE4ubmFtZSxjLkdyYXBoVHlwZS5DT1JFLFQpO3RoaXMuaW5FeHRyYWN0Qm94PXt3aWR0aDowLGhlaWdodDowfTt0aGlzLm91dEV4dHJhY3RCb3g9e3dpZHRoOjAsaGVpZ2h0OjB9O3RoaXMubGlicmFyeUZ1bmN0aW9uc0JveD17d2lkdGg6MCxoZWlnaHQ6MH07dGhpcy5pc29sYXRlZEluRXh0cmFjdD1bXTt0aGlzLmlzb2xhdGVkT3V0RXh0cmFjdD0KW107dGhpcy5saWJyYXJ5RnVuY3Rpb25zRXh0cmFjdD1bXX19ZC5SZW5kZXJHcm91cE5vZGVJbmZvPVM7ZC5tYWtlSW5FeHRyYWN0PXE7ZC5tYXBJbmRleFRvSHVlPWZ1bmN0aW9uKE4pe3JldHVybiAxKzU3OS4yNTYxNjc5NzI1Kk4lMzU4fTtkLmV4cGFuZFVudGlsTm9kZUlzU2hvd249ZnVuY3Rpb24oTixUKXt2YXIgWT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic2NlbmUiKTtUPVQuc3BsaXQoIi8iKTt2YXIgYWE9VFtULmxlbmd0aC0xXS5tYXRjaCgvKC4qKTpcdysvKTsyPT09YWEubGVuZ3RoJiYoVFtULmxlbmd0aC0xXT1hYVsxXSk7YWE9VFswXTtsZXQgaGE9Ti5nZXRSZW5kZXJOb2RlQnlOYW1lKGFhKTtmb3IobGV0IFg9MTtYPFQubGVuZ3RoJiZoYS5ub2RlLnR5cGUhPT1hLmdyYXBoLk5vZGVUeXBlLk9QO1grKylOLmJ1aWxkU3ViaGllcmFyY2h5KGFhKSxoYS5leHBhbmRlZD0hMCxZLnNldE5vZGVFeHBhbmRlZChoYSksYWErPSIvIitUW1hdLGhhPU4uZ2V0UmVuZGVyTm9kZUJ5TmFtZShhYSk7CnJldHVybiBoYS5ub2RlLm5hbWV9fSkoYy5yZW5kZXJ8fChjLnJlbmRlcj17fSkpfSkoYS5ncmFwaHx8KGEuZ3JhcGg9e30pKX0pKHRmfHwodGY9e30pKTsKPC9zY3JpcHQ+CjxzY3JpcHQ+Ly9+fldFQlBBVEh+fi90Zi1ncmFwaC1jb21tb24vc2NlbmUuanMKKGZ1bmN0aW9uKGEpeyhmdW5jdGlvbihjKXsoZnVuY3Rpb24oZCl7ZnVuY3Rpb24gZihyLHQsdixBKXt2YXIgeT1nKHIsdCx2KTtpZigheS5lbXB0eSgpKXJldHVybiB5O3Q9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsdCk7aWYodiBpbnN0YW5jZW9mIEFycmF5KWZvcih5PTA7eTx2Lmxlbmd0aDt5KyspdC5jbGFzc0xpc3QuYWRkKHZbeV0pO2Vsc2UgdC5jbGFzc0xpc3QuYWRkKHYpO0E/ci5ub2RlKCkuaW5zZXJ0QmVmb3JlKHQsQSk6ci5ub2RlKCkuYXBwZW5kQ2hpbGQodCk7cmV0dXJuIGQzLnNlbGVjdCh0KS5kYXR1bShyLmRhdHVtKCkpfWZ1bmN0aW9uIGcocix0LHYpe3I9ci5ub2RlKCkuY2hpbGROb2Rlcztmb3IobGV0IEE9MDtBPHIubGVuZ3RoO0ErKyl7bGV0IHk9cltBXTtpZih5LnRhZ05hbWU9PT10KWlmKHYgaW5zdGFuY2VvZiBBcnJheSl7bGV0IHg9ITA7Zm9yKGxldCBDPTA7Qzx2Lmxlbmd0aDtDKyspeD14JiZ5LmNsYXNzTGlzdC5jb250YWlucyh2W0NdKTsKaWYoeClyZXR1cm4gZDMuc2VsZWN0KHkpfWVsc2UgaWYoIXZ8fHkuY2xhc3NMaXN0LmNvbnRhaW5zKHYpKXJldHVybiBkMy5zZWxlY3QoeSl9cmV0dXJuIGQzLnNlbGVjdChudWxsKX1mdW5jdGlvbiBsKHIsdCl7bGV0IHY9dC5ub2RlLnR5cGU9PT1jLk5vZGVUeXBlLlNFUklFUz8wOmMubGF5b3V0LlBBUkFNUy5zdWJzY2VuZS5tZXRhLmxhYmVsSGVpZ2h0O2soZyhyLCJnIixkLkNsYXNzLlNjZW5lLkNPUkUpLDAsdik7dmFyIEE9MDx0Lmlzb2xhdGVkSW5FeHRyYWN0Lmxlbmd0aCx5PTA8dC5pc29sYXRlZE91dEV4dHJhY3QubGVuZ3RoO2xldCB4PTA8dC5saWJyYXJ5RnVuY3Rpb25zRXh0cmFjdC5sZW5ndGgsQz1jLmxheW91dC5QQVJBTVMuc3Vic2NlbmUubWV0YS5leHRyYWN0WE9mZnNldCxGPTA7QSYmKEYrPXQub3V0RXh0cmFjdEJveC53aWR0aCk7eSYmKEYrPXQub3V0RXh0cmFjdEJveC53aWR0aCk7QSYmKEE9dC5jb3JlQm94LndpZHRoLEE9RjxjLmxheW91dC5NSU5fQVVYX1dJRFRIPwpBLWMubGF5b3V0Lk1JTl9BVVhfV0lEVEgrdC5pbkV4dHJhY3RCb3gud2lkdGgvMjpBLXQuaW5FeHRyYWN0Qm94LndpZHRoLzItdC5vdXRFeHRyYWN0Qm94LndpZHRoLSh5P0M6MCksQT1BLXQubGlicmFyeUZ1bmN0aW9uc0JveC53aWR0aC0oeD9DOjApLGsoZyhyLCJnIixkLkNsYXNzLlNjZW5lLklORVhUUkFDVCksQSx2KSk7eSYmKHk9dC5jb3JlQm94LndpZHRoLHk9RjxjLmxheW91dC5NSU5fQVVYX1dJRFRIP3ktYy5sYXlvdXQuTUlOX0FVWF9XSURUSCt0Lm91dEV4dHJhY3RCb3gud2lkdGgvMjp5LXQub3V0RXh0cmFjdEJveC53aWR0aC8yLHk9eS10LmxpYnJhcnlGdW5jdGlvbnNCb3gud2lkdGgtKHg/QzowKSxrKGcociwiZyIsZC5DbGFzcy5TY2VuZS5PVVRFWFRSQUNUKSx5LHYpKTt4JiYodD10LmNvcmVCb3gud2lkdGgtdC5saWJyYXJ5RnVuY3Rpb25zQm94LndpZHRoLzIsayhnKHIsImciLGQuQ2xhc3MuU2NlbmUuRlVOQ1RJT05fTElCUkFSWSksdCx2KSl9ZnVuY3Rpb24gayhyLAp0LHYpe251bGwhPXIuYXR0cigidHJhbnNmb3JtIikmJihyPXIudHJhbnNpdGlvbigicG9zaXRpb24iKSk7ci5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIit0KyIsIit2KyIpIil9ZnVuY3Rpb24gbShyLHQpe3JldHVybiB0P3IudG9GaXhlZCgwKToxPD1NYXRoLmFicyhyKT9yLnRvRml4ZWQoMSk6ci50b0V4cG9uZW50aWFsKDEpfWZ1bmN0aW9uIHAocix0LHYsQSl7bGV0IHk9IkRldmljZTogIityLmRldmljZV9uYW1lKyJcbiI7eSs9ImR0eXBlOiAiK3IuZHR5cGUrIlxuIjtsZXQgeD0iKHNjYWxhcikiOzA8ci5zaGFwZS5sZW5ndGgmJih4PSIoIityLnNoYXBlLmpvaW4oIiwiKSsiKSIpO3k9eSsoIlxuc2hhcGU6ICIreCsiXG5cbiIpKygiIyhlbGVtZW50cyk6ICIrdCsiXG4iKTtyPVtdO2Zvcih0PTA7dDx2Lmxlbmd0aDt0KyspMDx2W3RdJiZyLnB1c2goIiMoIitkLmhlYWx0aFBpbGxFbnRyaWVzW3RdLmxhYmVsKyIpOiAiK3ZbdF0pO3krPXIuam9pbigiLCAiKSsiXG5cbiI7CkEubWF4Pj1BLm1pbiYmKHkrPSJtaW46ICIrQS5taW4rIiwgbWF4OiAiK0EubWF4KyJcbiIseSs9Im1lYW46ICIrQS5tZWFuKyIsIHN0ZGRldjogIitBLnN0ZGRldik7cmV0dXJuIHl9ZnVuY3Rpb24gcShyLHQsdixBLHk9NjAseD0xMCxDPTAsRil7ZDMuc2VsZWN0KHIucGFyZW50Tm9kZSkuc2VsZWN0QWxsKCIuaGVhbHRoLXBpbGwiKS5yZW1vdmUoKTtpZih0KXt2YXIgRD10LnZhbHVlLEI9RC5zbGljZSgyLDgpLEc9QlswXSxLPUJbMV0sTD1CWzVdLEo9RFsxXSxQPXttaW46RFs4XSxtYXg6RFs5XSxtZWFuOkRbMTBdLHN0ZGRldjpNYXRoLnNxcnQoRFsxMV0pfTtudWxsPT15JiYoeT02MCk7bnVsbD09eCYmKHg9MTApO251bGw9PUMmJihDPTApO251bGwhPXYmJnYubm9kZS50eXBlPT09YS5ncmFwaC5Ob2RlVHlwZS5PUCYmKHkvPTIseC89Mik7RD1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoZC5TVkdfTkFNRVNQQUNFLCJnIik7RC5jbGFzc0xpc3QuYWRkKCJoZWFsdGgtcGlsbCIpOwp2YXIgUz1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoZC5TVkdfTkFNRVNQQUNFLCJkZWZzIik7RC5hcHBlbmRDaGlsZChTKTt2YXIgTj1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoZC5TVkdfTkFNRVNQQUNFLCJsaW5lYXJHcmFkaWVudCIpO0E9ImhlYWx0aC1waWxsLWdyYWRpZW50LSIrQTtOLnNldEF0dHJpYnV0ZSgiaWQiLEEpO3ZhciBUPTAsWT0iMCUiO2ZvcihsZXQgaGE9MDtoYTxCLmxlbmd0aDtoYSsrKWlmKEJbaGFdKXtUKz1CW2hhXTt2YXIgYWE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGQuU1ZHX05BTUVTUEFDRSwic3RvcCIpO2FhLnNldEF0dHJpYnV0ZSgib2Zmc2V0IixZKTthYS5zZXRBdHRyaWJ1dGUoInN0b3AtY29sb3IiLGQuaGVhbHRoUGlsbEVudHJpZXNbaGFdLmJhY2tncm91bmRfY29sb3IpO04uYXBwZW5kQ2hpbGQoYWEpO1k9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGQuU1ZHX05BTUVTUEFDRSwic3RvcCIpO2FhPTEwMCpUL0orIiUiO1kuc2V0QXR0cmlidXRlKCJvZmZzZXQiLAphYSk7WS5zZXRBdHRyaWJ1dGUoInN0b3AtY29sb3IiLGQuaGVhbHRoUGlsbEVudHJpZXNbaGFdLmJhY2tncm91bmRfY29sb3IpO04uYXBwZW5kQ2hpbGQoWSk7WT1hYX1TLmFwcGVuZENoaWxkKE4pO1M9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGQuU1ZHX05BTUVTUEFDRSwicmVjdCIpO1Muc2V0QXR0cmlidXRlKCJmaWxsIiwidXJsKCMiK0ErIikiKTtTLnNldEF0dHJpYnV0ZSgid2lkdGgiLFN0cmluZyh5KSk7Uy5zZXRBdHRyaWJ1dGUoImhlaWdodCIsU3RyaW5nKHgpKTtTLnNldEF0dHJpYnV0ZSgieSIsU3RyaW5nKEMpKTtELmFwcGVuZENoaWxkKFMpO1M9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGQuU1ZHX05BTUVTUEFDRSwidGl0bGUiKTtTLnRleHRDb250ZW50PXAodCxKLEIsUCk7RC5hcHBlbmRDaGlsZChTKTt0PSExO2lmKG51bGwhPXYmJihTPXYueC15LzIseD12LnkteC12LmhlaWdodC8yLTIsMD52LmxhYmVsT2Zmc2V0JiYoeCs9di5sYWJlbE9mZnNldCksRC5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsCiJ0cmFuc2xhdGUoIitTKyIsICIreCsiKSIpLChCWzJdfHxCWzNdfHxCWzRdKSYmKHY9di5ub2RlLmF0dHIpJiZ2Lmxlbmd0aCkpZm9yKEI9MDtCPHYubGVuZ3RoO0IrKylpZigiVCI9PT12W0JdLmtleSl7dD0odj12W0JdLnZhbHVlLnR5cGUpJiYvXkRUXyhCT09MfElOVHxVSU5UKS8udGVzdCh2KTticmVha312PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhkLlNWR19OQU1FU1BBQ0UsInRleHQiKTtpZihOdW1iZXIuaXNGaW5pdGUoUC5taW4pJiZOdW1iZXIuaXNGaW5pdGUoUC5tYXgpKXtpZihCPW0oUC5taW4sdCksUD1tKFAubWF4LHQpLHYudGV4dENvbnRlbnQ9MTxKP0IrIiB+ICIrUDpCLDA8R3x8MDxLfHwwPEwpdi50ZXh0Q29udGVudCs9IiAoIixKPVtdLDA8RyYmSi5wdXNoKGBOYU5cdTAwZDcke0d9YCksMDxLJiZKLnB1c2goYC1cdTIyMWVcdTAwZDcke0t9YCksMDxMJiZKLnB1c2goYCtcdTIyMWVcdTAwZDcke0x9YCksdi50ZXh0Q29udGVudCs9Si5qb2luKCI7ICIpKyIpIn1lbHNlIHYudGV4dENvbnRlbnQ9CiIoTm8gZmluaXRlIGVsZW1lbnRzKSI7di5jbGFzc0xpc3QuYWRkKCJoZWFsdGgtcGlsbC1zdGF0cyIpO251bGw9PUYmJihGPXkvMik7di5zZXRBdHRyaWJ1dGUoIngiLFN0cmluZyhGKSk7di5zZXRBdHRyaWJ1dGUoInkiLFN0cmluZyhDLTIpKTtELmFwcGVuZENoaWxkKHYpO1BvbHltZXIuZG9tKHIucGFyZW50Tm9kZSkuYXBwZW5kQ2hpbGQoRCl9fWQuU1ZHX05BTUVTUEFDRT0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciO2QuQ2xhc3M9e05vZGU6e0NPTlRBSU5FUjoibm9kZXMiLEdST1VQOiJub2RlIixTSEFQRToibm9kZXNoYXBlIixDT0xPUl9UQVJHRVQ6Im5vZGVjb2xvcnRhcmdldCIsTEFCRUw6Im5vZGVsYWJlbCIsQlVUVE9OX0NPTlRBSU5FUjoiYnV0dG9uY29udGFpbmVyIixCVVRUT05fQ0lSQ0xFOiJidXR0b25jaXJjbGUiLEVYUEFORF9CVVRUT046ImV4cGFuZGJ1dHRvbiIsQ09MTEFQU0VfQlVUVE9OOiJjb2xsYXBzZWJ1dHRvbiJ9LEVkZ2U6e0NPTlRBSU5FUjoiZWRnZXMiLApHUk9VUDoiZWRnZSIsTElORToiZWRnZWxpbmUiLFJFRkVSRU5DRV9FREdFOiJyZWZlcmVuY2VlZGdlIixSRUZfTElORToicmVmbGluZSIsU0VMRUNUQUJMRToic2VsZWN0YWJsZWVkZ2UiLFNFTEVDVEVEOiJzZWxlY3RlZGVkZ2UiLFNUUlVDVFVSQUw6InN0cnVjdHVyYWwifSxBbm5vdGF0aW9uOntPVVRCT1g6Im91dC1hbm5vdGF0aW9ucyIsSU5CT1g6ImluLWFubm90YXRpb25zIixHUk9VUDoiYW5ub3RhdGlvbiIsTk9ERToiYW5ub3RhdGlvbi1ub2RlIixFREdFOiJhbm5vdGF0aW9uLWVkZ2UiLENPTlRST0xfRURHRToiYW5ub3RhdGlvbi1jb250cm9sLWVkZ2UiLExBQkVMOiJhbm5vdGF0aW9uLWxhYmVsIixFTExJUFNJUzoiYW5ub3RhdGlvbi1lbGxpcHNpcyJ9LFNjZW5lOntHUk9VUDoic2NlbmUiLENPUkU6ImNvcmUiLEZVTkNUSU9OX0xJQlJBUlk6ImZ1bmN0aW9uLWxpYnJhcnkiLElORVhUUkFDVDoiaW4tZXh0cmFjdCIsT1VURVhUUkFDVDoib3V0LWV4dHJhY3QifSxTdWJzY2VuZTp7R1JPVVA6InN1YnNjZW5lIn0sCk9QTk9ERToib3AiLE1FVEFOT0RFOiJtZXRhIixTRVJJRVNOT0RFOiJzZXJpZXMiLEJSSURHRU5PREU6ImJyaWRnZSIsRUxMSVBTSVNOT0RFOiJlbGxpcHNpcyJ9O2QuaGVhbHRoUGlsbEVudHJpZXM9W3tiYWNrZ3JvdW5kX2NvbG9yOiIjQ0MyRjJDIixsYWJlbDoiTmFOIn0se2JhY2tncm91bmRfY29sb3I6IiNGRjhEMDAiLGxhYmVsOiItXHUyMjFlIn0se2JhY2tncm91bmRfY29sb3I6IiNFQUVBRUEiLGxhYmVsOiItIn0se2JhY2tncm91bmRfY29sb3I6IiNBNUE1QTUiLGxhYmVsOiIwIn0se2JhY2tncm91bmRfY29sb3I6IiMyNjI2MjYiLGxhYmVsOiIrIn0se2JhY2tncm91bmRfY29sb3I6IiMwMDNFRDQiLGxhYmVsOiIrXHUyMjFlIn1dO2QuZml0PWZ1bmN0aW9uKHIsdCx2LEEpe3ZhciB5PXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7bGV0IHg9bnVsbDt0cnl7aWYoeD10LmdldEJCb3goKSwwPT09eC53aWR0aClyZXR1cm59Y2F0Y2goQyl7cmV0dXJufXQ9Yy5sYXlvdXQuUEFSQU1TLmdyYXBoOwp5PWQzLnpvb21JZGVudGl0eS5zY2FsZSguOSpNYXRoLm1pbih5LndpZHRoL3gud2lkdGgseS5oZWlnaHQveC5oZWlnaHQsMikpLnRyYW5zbGF0ZSh0LnBhZGRpbmcucGFkZGluZ0xlZnQsdC5wYWRkaW5nLnBhZGRpbmdUb3ApO2QzLnNlbGVjdChyKS50cmFuc2l0aW9uKCkuZHVyYXRpb24oNTAwKS5jYWxsKHYudHJhbnNmb3JtLHkpLm9uKCJlbmQuZml0dGVkIiwoKT0+e3Yub24oImVuZC5maXR0ZWQiLG51bGwpO0EoKX0pfTtkLnBhblRvTm9kZT1mdW5jdGlvbihyLHQsdixBKXt2PWQzLnNlbGVjdCh0KS5zZWxlY3QoYFtkYXRhLW5hbWU9IiR7cn0iXWApLm5vZGUoKTtpZighdilyZXR1cm4gY29uc29sZS53YXJuKGBwYW5Ub05vZGUoKSBmYWlsZWQgZm9yIG5vZGUgbmFtZSAiJHtyfSJgKSwhMTt2YXIgeT12LmdldEJCb3goKSx4PXYuZ2V0U2NyZWVuQ1RNKCk7cj10LmNyZWF0ZVNWR1BvaW50KCk7dj10LmNyZWF0ZVNWR1BvaW50KCk7ci54PXkueDtyLnk9eS55O3YueD15LngreS53aWR0aDsKdi55PXkueSt5LmhlaWdodDtyPXIubWF0cml4VHJhbnNmb3JtKHgpO3Y9di5tYXRyaXhUcmFuc2Zvcm0oeCk7eD0oRixELEIsRyk9PiEoRj5CJiZEPEcpO3k9dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtjb25zdCBDPXkudG9wK3kuaGVpZ2h0LTE1MDtyZXR1cm4geChyLngsdi54LHkubGVmdCx5LmxlZnQreS53aWR0aC0zMjApfHx4KHIueSx2LnkseS50b3AsQyk/KHg9eS5sZWZ0K3kud2lkdGgvMi0oci54K3YueCkvMixyPXkudG9wK3kuaGVpZ2h0LzItKHIueSt2LnkpLzIsdj1kMy56b29tVHJhbnNmb3JtKHQpLGQzLnNlbGVjdCh0KS50cmFuc2l0aW9uKCkuZHVyYXRpb24oNTAwKS5jYWxsKEEudHJhbnNsYXRlQnkseC92Lmssci92LmspLCEwKTohMX07ZC5zZWxlY3RPckNyZWF0ZUNoaWxkPWY7ZC5zZWxlY3RDaGlsZD1nO2QuYnVpbGRHcm91cD1mdW5jdGlvbihyLHQsdixBKXtBPUF8fGQuQ2xhc3MuU2NlbmUuR1JPVVA7bGV0IHk9ZyhyLCJnIixBKS5lbXB0eSgpO3I9ZihyLCJnIiwKQSk7QT1mKHIsImciLGQuQ2xhc3MuU2NlbmUuQ09SRSk7bGV0IHg9Xy5yZWR1Y2UodC5jb3JlR3JhcGgubm9kZXMoKSwoQyxGKT0+e0Y9dC5jb3JlR3JhcGgubm9kZShGKTtGLmV4Y2x1ZGVkfHxDLnB1c2goRik7cmV0dXJuIEN9LFtdKTt0Lm5vZGUudHlwZT09PWMuTm9kZVR5cGUuU0VSSUVTJiZ4LnJldmVyc2UoKTtkLmVkZ2UuYnVpbGRHcm91cChBLHQuY29yZUdyYXBoLHYpO2Qubm9kZS5idWlsZEdyb3VwKEEseCx2KTswPHQuaXNvbGF0ZWRJbkV4dHJhY3QubGVuZ3RoPyhBPWYociwiZyIsZC5DbGFzcy5TY2VuZS5JTkVYVFJBQ1QpLGQubm9kZS5idWlsZEdyb3VwKEEsdC5pc29sYXRlZEluRXh0cmFjdCx2KSk6ZyhyLCJnIixkLkNsYXNzLlNjZW5lLklORVhUUkFDVCkucmVtb3ZlKCk7MDx0Lmlzb2xhdGVkT3V0RXh0cmFjdC5sZW5ndGg/KEE9ZihyLCJnIixkLkNsYXNzLlNjZW5lLk9VVEVYVFJBQ1QpLGQubm9kZS5idWlsZEdyb3VwKEEsdC5pc29sYXRlZE91dEV4dHJhY3QsdikpOgpnKHIsImciLGQuQ2xhc3MuU2NlbmUuT1VURVhUUkFDVCkucmVtb3ZlKCk7MDx0LmxpYnJhcnlGdW5jdGlvbnNFeHRyYWN0Lmxlbmd0aD8oQT1mKHIsImciLGQuQ2xhc3MuU2NlbmUuRlVOQ1RJT05fTElCUkFSWSksZC5ub2RlLmJ1aWxkR3JvdXAoQSx0LmxpYnJhcnlGdW5jdGlvbnNFeHRyYWN0LHYpKTpnKHIsImciLGQuQ2xhc3MuU2NlbmUuRlVOQ1RJT05fTElCUkFSWSkucmVtb3ZlKCk7bChyLHQpO3kmJnIuYXR0cigib3BhY2l0eSIsMCkudHJhbnNpdGlvbigpLmF0dHIoIm9wYWNpdHkiLDEpO3JldHVybiByfTtkLmFkZEdyYXBoQ2xpY2tMaXN0ZW5lcj1mdW5jdGlvbihyLHQpe2QzLnNlbGVjdChyKS5vbigiY2xpY2siLCgpPT57dC5maXJlKCJncmFwaC1zZWxlY3QiKX0pfTtkLnRyYW5zbGF0ZT1rO2QucG9zaXRpb25SZWN0PWZ1bmN0aW9uKHIsdCx2LEEseSl7ci50cmFuc2l0aW9uKCkuYXR0cigieCIsdC1BLzIpLmF0dHIoInkiLHYteS8yKS5hdHRyKCJ3aWR0aCIsQSkuYXR0cigiaGVpZ2h0IiwKeSl9O2QucG9zaXRpb25UcmlhbmdsZT1mdW5jdGlvbihyLHQsdixBLHkpe3kvPTI7QS89Mjt0PVtbdCx2LXldLFt0K0Esdit5XSxbdC1BLHYreV1dO3IudHJhbnNpdGlvbigpLmF0dHIoInBvaW50cyIsdC5tYXAoeD0+eC5qb2luKCIsIikpLmpvaW4oIiAiKSl9O2QucG9zaXRpb25CdXR0b249ZnVuY3Rpb24ocix0KXtsZXQgdj1jLmxheW91dC5jb21wdXRlQ1hQb3NpdGlvbk9mTm9kZVNoYXBlKHQpKyh0LmV4cGFuZGVkP3Qud2lkdGg6dC5jb3JlQm94LndpZHRoKS8yLTYsQT10LnktKHQuZXhwYW5kZWQ/dC5oZWlnaHQ6dC5jb3JlQm94LmhlaWdodCkvMis2O3Qubm9kZS50eXBlIT09Yy5Ob2RlVHlwZS5TRVJJRVN8fHQuZXhwYW5kZWR8fCh2Kz0xMCxBLT0yKTt0PSJ0cmFuc2xhdGUoIit2KyIsIitBKyIpIjtyLnNlbGVjdEFsbCgicGF0aCIpLnRyYW5zaXRpb24oKS5hdHRyKCJ0cmFuc2Zvcm0iLHQpO3Iuc2VsZWN0KCJjaXJjbGUiKS50cmFuc2l0aW9uKCkuYXR0cih7Y3g6dixjeTpBLApyOmMubGF5b3V0LlBBUkFNUy5ub2RlU2l6ZS5tZXRhLmV4cGFuZEJ1dHRvblJhZGl1c30pfTtkLnBvc2l0aW9uRWxsaXBzZT1mdW5jdGlvbihyLHQsdixBLHkpe3IudHJhbnNpdGlvbigpLmF0dHIoImN4Iix0KS5hdHRyKCJjeSIsdikuYXR0cigicngiLEEvMikuYXR0cigicnkiLHkvMil9O2QuaHVtYW5pemVIZWFsdGhQaWxsU3RhdD1tO2QuYWRkSGVhbHRoUGlsbD1xO2QuYWRkSGVhbHRoUGlsbHM9ZnVuY3Rpb24ocix0LHYpe2lmKHQpe3ZhciBBPTE7ZDMuc2VsZWN0KHIpLnNlbGVjdEFsbCgiZy5ub2Rlc2hhcGUiKS5lYWNoKGZ1bmN0aW9uKHkpe2NvbnN0IHg9dFt5Lm5vZGUubmFtZV07cSh0aGlzLHg/eFt2XTpudWxsLHksQSsrKX0pfX19KShjLnNjZW5lfHwoYy5zY2VuZT17fSkpfSkoYS5ncmFwaHx8KGEuZ3JhcGg9e30pKX0pKHRmfHwodGY9e30pKTsKPC9zY3JpcHQ+CjxzY3JpcHQ+Ly9+fldFQlBBVEh+fi90Zi1ncmFwaC1jb21tb24vdGVtcGxhdGUuanMKKGZ1bmN0aW9uKGEpeyhmdW5jdGlvbihjKXsoZnVuY3Rpb24oZCl7ZnVuY3Rpb24gZihxKXtsZXQgcj1fLm1hcCh7ZGVwdGg6cS5kZXB0aCwifFZ8IjpxLm1ldGFncmFwaC5ub2RlcygpLmxlbmd0aCwifEV8IjpxLm1ldGFncmFwaC5lZGdlcygpLmxlbmd0aH0sZnVuY3Rpb24odCx2KXtyZXR1cm4gdisiXHgzZCIrdH0pLmpvaW4oIiAiKTtxPV8ubWFwKHEub3BIaXN0b2dyYW0sZnVuY3Rpb24odCx2KXtyZXR1cm4gdisiXHgzZCIrdH0pLmpvaW4oIiwiKTtyZXR1cm4gcisiIFtvcHNdICIrcX1mdW5jdGlvbiBnKHEpe2NvbnN0IHI9cS5nZXROb2RlTWFwKCk7bGV0IHQ9T2JqZWN0LmtleXMocikucmVkdWNlKCh2LEEpPT57Y29uc3QgeT1yW0FdO2lmKHkudHlwZSE9PWMuTm9kZVR5cGUuTUVUQSlyZXR1cm4gdjtBPUEuc3BsaXQoIi8iKS5sZW5ndGgtMTtsZXQgeD1mKHkpLEM9dlt4XXx8e25vZGVzOltdLGxldmVsOkF9O3ZbeF09QztDLm5vZGVzLnB1c2goeSk7Qy5sZXZlbD5BJiYoQy5sZXZlbD0KQSk7cmV0dXJuIHZ9LHt9KTtyZXR1cm4gT2JqZWN0LmtleXModCkubWFwKHY9Plt2LHRbdl1dKS5maWx0ZXIoKFssdl0pPT57KHtub2Rlczp2fT12KTtpZigxPHYubGVuZ3RoKXJldHVybiEwO3Y9dlswXTtyZXR1cm4gdi50eXBlPT09Yy5Ob2RlVHlwZS5NRVRBJiZ2LmFzc29jaWF0ZWRGdW5jdGlvbn0pLnNvcnQoKFssdl0pPT52Lm5vZGVzWzBdLmRlcHRoKX1mdW5jdGlvbiBsKHEscil7cmV0dXJuIF8ucmVkdWNlKHEsZnVuY3Rpb24odCx2KXtsZXQgQT12WzBdLHk9W107dlsxXS5ub2Rlcy5mb3JFYWNoKGZ1bmN0aW9uKHgpe2ZvcihsZXQgQz0wO0M8eS5sZW5ndGg7QysrKWlmKCFyfHxtKHlbQ10ubWV0YW5vZGUubWV0YWdyYXBoLHgubWV0YWdyYXBoKSl7eC50ZW1wbGF0ZUlkPXlbQ10ubWV0YW5vZGUudGVtcGxhdGVJZDt5W0NdLm1lbWJlcnMucHVzaCh4Lm5hbWUpO3JldHVybn14LnRlbXBsYXRlSWQ9QSsiWyIreS5sZW5ndGgrIl0iO3kucHVzaCh7bWV0YW5vZGU6eCxtZW1iZXJzOlt4Lm5hbWVdfSl9KTsKeS5mb3JFYWNoKGZ1bmN0aW9uKHgpe3RbeC5tZXRhbm9kZS50ZW1wbGF0ZUlkXT17bGV2ZWw6dlsxXS5sZXZlbCxub2Rlczp4Lm1lbWJlcnN9fSk7cmV0dXJuIHR9LHt9KX1mdW5jdGlvbiBrKHEscix0KXtyZXR1cm4gXy5zb3J0QnkocSxbdj0+ci5ub2RlKHYpLm9wLHY9PnIubm9kZSh2KS50ZW1wbGF0ZUlkLHY9PnIubmVpZ2hib3JzKHYpLmxlbmd0aCx2PT5yLnByZWRlY2Vzc29ycyh2KS5sZW5ndGgsdj0+ci5zdWNjZXNzb3JzKHYpLmxlbmd0aCx2PT52LnN1YnN0cih0Lmxlbmd0aCldKX1mdW5jdGlvbiBtKHEscil7ZnVuY3Rpb24gdChHLEspe2xldCBMPUcuc3Vic3RyKHYubGVuZ3RoKSxKPUsuc3Vic3RyKEEubGVuZ3RoKTtpZih5W0xdXnhbSl0pcmV0dXJuIGNvbnNvbGUud2FybigiZGlmZmVyZW50IHZpc2l0IHBhdHRlcm4iLCJbIit2KyJdIixMLCJbIitBKyJdIixKKSwhMDt5W0xdfHwoeVtMXT14W0pdPSEwLEMucHVzaCh7bjE6RyxuMjpLfSkpO3JldHVybiExfWlmKCFhLmdyYXBoLmhhc1NpbWlsYXJEZWdyZWVTZXF1ZW5jZShxLApyKSlyZXR1cm4hMTtsZXQgdj1xLmdyYXBoKCkubmFtZSxBPXIuZ3JhcGgoKS5uYW1lLHk9e30seD17fSxDPVtdO3ZhciBGPXEuc291cmNlcygpLEQ9ci5zb3VyY2VzKCk7aWYoRi5sZW5ndGghPT1ELmxlbmd0aClyZXR1cm4gY29uc29sZS5sb2coImRpZmZlcmVudCBzb3VyY2UgbGVuZ3RoIiksITE7Rj1rKEYscSx2KTtEPWsoRCxyLEEpO2Zvcih2YXIgQj0wO0I8Ri5sZW5ndGg7QisrKWlmKHQoRltCXSxEW0JdKSlyZXR1cm4hMTtmb3IoOzA8Qy5sZW5ndGg7KXtEPUMucG9wKCk7aWYoIXAocS5ub2RlKEQubjEpLHIubm9kZShELm4yKSkpcmV0dXJuITE7Rj1xLnN1Y2Nlc3NvcnMoRC5uMSk7RD1yLnN1Y2Nlc3NvcnMoRC5uMik7aWYoRi5sZW5ndGghPT1ELmxlbmd0aClyZXR1cm4gY29uc29sZS5sb2coIiMgb2Ygc3VjY2Vzc29ycyBtaXNtYXRjaCIsRixEKSwhMTtGPWsoRixxLHYpO0Q9ayhELHIsQSk7Zm9yKEI9MDtCPEYubGVuZ3RoO0IrKylpZih0KEZbQl0sRFtCXSkpcmV0dXJuITF9cmV0dXJuITB9CmZ1bmN0aW9uIHAocSxyKXtpZihxLnR5cGU9PT1jLk5vZGVUeXBlLk1FVEEpcmV0dXJuIHEudGVtcGxhdGVJZCYmci50ZW1wbGF0ZUlkJiZxLnRlbXBsYXRlSWQ9PT1yLnRlbXBsYXRlSWQ7aWYocS50eXBlPT09Yy5Ob2RlVHlwZS5PUCYmci50eXBlPT09Yy5Ob2RlVHlwZS5PUClyZXR1cm4gcS5vcD09PXIub3A7aWYocS50eXBlPT09Yy5Ob2RlVHlwZS5TRVJJRVMmJnIudHlwZT09PWMuTm9kZVR5cGUuU0VSSUVTKXtsZXQgdD1xLm1ldGFncmFwaC5ub2RlQ291bnQoKTtyZXR1cm4gdD09PXIubWV0YWdyYXBoLm5vZGVDb3VudCgpJiYoMD09PXR8fHEubWV0YWdyYXBoLm5vZGUocS5tZXRhZ3JhcGgubm9kZXMoKVswXSkub3A9PT1yLm1ldGFncmFwaC5ub2RlKHIubWV0YWdyYXBoLm5vZGVzKClbMF0pLm9wKX1yZXR1cm4hMX1kLmRldGVjdD1mdW5jdGlvbihxLHIpe3E9ZyhxKTtsZXQgdD1sKHEscik7cmV0dXJuIE9iamVjdC5rZXlzKHQpLnNvcnQodj0+dFt2XS5sZXZlbCkucmVkdWNlKCh2LApBKT0+e3ZbQV09dFtBXTtyZXR1cm4gdn0se30pfX0pKGMudGVtcGxhdGV8fChjLnRlbXBsYXRlPXt9KSl9KShhLmdyYXBofHwoYS5ncmFwaD17fSkpfSkodGZ8fCh0Zj17fSkpOwo8L3NjcmlwdD4KPHNjcmlwdD4vL35+V0VCUEFUSH5+L3RmLWdyYXBoLWNvbW1vbi91dGlsLmpzCihmdW5jdGlvbihhKXsoZnVuY3Rpb24oYyl7KGZ1bmN0aW9uKGQpe2QudGltZT1mdW5jdGlvbihmLGcpe2xldCBsPURhdGUubm93KCk7Zz1nKCk7Y29uc29sZS5sb2coZiwiOiIsRGF0ZS5ub3coKS1sLCJtcyIpO3JldHVybiBnfTtkLmdldFRyYWNrZXI9ZnVuY3Rpb24oZil7cmV0dXJue3NldE1lc3NhZ2U6ZnVuY3Rpb24oZyl7Zi5zZXQoInByb2dyZXNzIix7dmFsdWU6Zi5wcm9ncmVzcy52YWx1ZSxtc2c6Z30pfSx1cGRhdGVQcm9ncmVzczpmdW5jdGlvbihnKXtmLnNldCgicHJvZ3Jlc3MiLHt2YWx1ZTpmLnByb2dyZXNzLnZhbHVlK2csbXNnOmYucHJvZ3Jlc3MubXNnfSl9LHJlcG9ydEVycm9yOmZ1bmN0aW9uKGcsbCl7Y29uc29sZS5lcnJvcihsLnN0YWNrKTtmLnNldCgicHJvZ3Jlc3MiLHt2YWx1ZTpmLnByb2dyZXNzLnZhbHVlLG1zZzpnLGVycm9yOiEwfSl9fX07ZC5nZXRTdWJ0YXNrVHJhY2tlcj1mdW5jdGlvbihmLGcsbCl7cmV0dXJue3NldE1lc3NhZ2U6ZnVuY3Rpb24oayl7Zi5zZXRNZXNzYWdlKGwrCiI6ICIrayl9LHVwZGF0ZVByb2dyZXNzOmZ1bmN0aW9uKGspe2YudXBkYXRlUHJvZ3Jlc3MoaypnLzEwMCl9LHJlcG9ydEVycm9yOmZ1bmN0aW9uKGssbSl7Zi5yZXBvcnRFcnJvcihsKyI6ICIrayxtKX19fTtkLnJ1blRhc2s9ZnVuY3Rpb24oZixnLGwsayl7ay5zZXRNZXNzYWdlKGYpO3RyeXtsZXQgbT1hLmdyYXBoLnV0aWwudGltZShmLGwpO2sudXBkYXRlUHJvZ3Jlc3MoZyk7cmV0dXJuIG19Y2F0Y2gobSl7ay5yZXBvcnRFcnJvcigiRmFpbGVkICIrZixtKX19O2QucnVuQXN5bmNUYXNrPWZ1bmN0aW9uKGYsZyxsLGspe3JldHVybiBuZXcgUHJvbWlzZShtPT57ay5zZXRNZXNzYWdlKGYpO3NldFRpbWVvdXQoZnVuY3Rpb24oKXt0cnl7bGV0IHA9YS5ncmFwaC51dGlsLnRpbWUoZixsKTtrLnVwZGF0ZVByb2dyZXNzKGcpO20ocCl9Y2F0Y2gocCl7ay5yZXBvcnRFcnJvcigiRmFpbGVkICIrZixwKX19LDIwKX0pfTtkLnJ1bkFzeW5jUHJvbWlzZVRhc2s9ZnVuY3Rpb24oZixnLGwsayl7cmV0dXJuIG5ldyBQcm9taXNlKChtLApwKT0+e2Z1bmN0aW9uIHEocil7ay5yZXBvcnRFcnJvcigiRmFpbGVkICIrZixyKTtwKHIpfWsuc2V0TWVzc2FnZShmKTtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dHJ5e2xldCByPURhdGUubm93KCk7bCgpLnRoZW4oZnVuY3Rpb24odCl7Y29uc29sZS5sb2coZiwiOiIsRGF0ZS5ub3coKS1yLCJtcyIpO2sudXBkYXRlUHJvZ3Jlc3MoZyk7bSh0KX0pLmNhdGNoKHEpfWNhdGNoKHIpe3Eocil9fSwyMCl9KX07ZC5lc2NhcGVRdWVyeVNlbGVjdG9yPWZ1bmN0aW9uKGYpe3JldHVybiBmLnJlcGxhY2UoLyhbOi5cW1xdLC9cXFwoXCldKS9nLCJcXCQxIil9O2QuTUVNT1JZX1VOSVRTPVt7c3ltYm9sOiJCIn0se3N5bWJvbDoiS0IiLG51bVVuaXRzOjEwMjR9LHtzeW1ib2w6Ik1CIixudW1Vbml0czoxMDI0fSx7c3ltYm9sOiJHQiIsbnVtVW5pdHM6MTAyNH0se3N5bWJvbDoiVEIiLG51bVVuaXRzOjEwMjR9LHtzeW1ib2w6IlBCIixudW1Vbml0czoxMDI0fV07ZC5USU1FX1VOSVRTPVt7c3ltYm9sOiJcdTAwYjVzIn0sCntzeW1ib2w6Im1zIixudW1Vbml0czoxRTN9LHtzeW1ib2w6InMiLG51bVVuaXRzOjFFM30se3N5bWJvbDoibWluIixudW1Vbml0czo2MH0se3N5bWJvbDoiaHIiLG51bVVuaXRzOjYwfSx7c3ltYm9sOiJkYXlzIixudW1Vbml0czoyNH1dO2QuY29udmVydFVuaXRzVG9IdW1hblJlYWRhYmxlPWZ1bmN0aW9uKGYsZyxsPTApe3JldHVybiBsKzE8Zy5sZW5ndGgmJmY+PWdbbCsxXS5udW1Vbml0cz9hLmdyYXBoLnV0aWwuY29udmVydFVuaXRzVG9IdW1hblJlYWRhYmxlKGYvZ1tsKzFdLm51bVVuaXRzLGcsbCsxKTpOdW1iZXIoZi50b1ByZWNpc2lvbigzKSkrIiAiK2dbbF0uc3ltYm9sfTtkLmhhc0Rpc3BsYXlhYmxlTm9kZVN0YXRzPWZ1bmN0aW9uKGYpe3JldHVybiBmJiYoMDxmLnRvdGFsQnl0ZXN8fDA8Zi5nZXRUb3RhbE1pY3JvcygpfHxmLm91dHB1dFNpemUpPyEwOiExfTtkLnJlbW92ZUNvbW1vblByZWZpeD1mdW5jdGlvbihmKXtpZigyPmYubGVuZ3RoKXJldHVybiBmO2xldCBnPQowLGw9MCxrPV8ubWluKF8ubWFwKGYsbT0+bS5sZW5ndGgpKTtmb3IoOzspe2crKztsZXQgbT1fLm1hcChmLHA9PnAuc3Vic3RyaW5nKDAsZykpO2lmKG0uZXZlcnkoKHAscSk9PjA9PT1xPyEwOnA9PT1tW3EtMV0pKXtpZihnPj1rKXJldHVybiBmO2w9Z31lbHNlIGJyZWFrfXJldHVybiBfLm1hcChmLG09Pm0uc3Vic3RyaW5nKGwpKX07ZC5jb21wdXRlSHVtYW5GcmllbmRseVRpbWU9ZnVuY3Rpb24oZil7Zj0rbmV3IERhdGUtK25ldyBEYXRlKGYvMUUzKTtyZXR1cm4gM0U0PmY/Imp1c3Qgbm93Ijo2RTQ+Zj9NYXRoLmZsb29yKGYvMUUzKSsiIHNlY29uZHMgYWdvIjoxMkU0PmY/ImEgbWludXRlIGFnbyI6MzZFNT5mP01hdGguZmxvb3IoZi82RTQpKyIgbWludXRlcyBhZ28iOjE9PU1hdGguZmxvb3IoZi8zNkU1KT8iYW4gaG91ciBhZ28iOjg2NEU1PmY/TWF0aC5mbG9vcihmLzM2RTUpKyIgaG91cnMgYWdvIjoxNzI4RTU+Zj8ieWVzdGVyZGF5IjpNYXRoLmZsb29yKGYvODY0RTUpKyIgZGF5cyBhZ28ifX0pKGMudXRpbHx8CihjLnV0aWw9e30pKX0pKGEuZ3JhcGh8fChhLmdyYXBoPXt9KSl9KSh0Znx8KHRmPXt9KSk7Cjwvc2NyaXB0PgoKCgoKCgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdGYtZ3JhcGgtY29tbW9uL21pbmltYXAuanMKKGZ1bmN0aW9uKGEpeyhmdW5jdGlvbihjKXtjbGFzcyBke2NvbnN0cnVjdG9yKGYsZyxsLGssbSxwKXt0aGlzLnN2Zz1mO3RoaXMubGFiZWxQYWRkaW5nPXA7dGhpcy56b29tRz1nO3RoaXMubWFpblpvb209bDt0aGlzLm1heFdhbmRIPW07Zj1kMy5zZWxlY3Qoay5zaGFkb3dSb290KTtsZXQgcT1mLnNlbGVjdCgic3ZnIikscj1xLnNlbGVjdCgicmVjdCIpO3RoaXMudmlld3BvaW50Q29vcmQ9e3g6MCx5OjB9O2c9ZDMuZHJhZygpLnN1YmplY3QoT2JqZWN0KS5vbigiZHJhZyIsKCk9Pnt0aGlzLnZpZXdwb2ludENvb3JkLng9ZDMuZXZlbnQueDt0aGlzLnZpZXdwb2ludENvb3JkLnk9ZDMuZXZlbnQueTt0aGlzLnVwZGF0ZVZpZXdwb2ludCgpfSk7ci5kYXR1bSh0aGlzLnZpZXdwb2ludENvb3JkKS5jYWxsKGcpO3Eub24oImNsaWNrIiwoKT0+e2lmKCFkMy5ldmVudC5kZWZhdWx0UHJldmVudGVkKXt2YXIgdD1OdW1iZXIoci5hdHRyKCJ3aWR0aCIpKSx2PU51bWJlcihyLmF0dHIoImhlaWdodCIpKSwKQT1kMy5tb3VzZShxLm5vZGUoKSk7dGhpcy52aWV3cG9pbnRDb29yZC54PUFbMF0tdC8yO3RoaXMudmlld3BvaW50Q29vcmQueT1BWzFdLXYvMjt0aGlzLnVwZGF0ZVZpZXdwb2ludCgpfX0pO3RoaXMudmlld3BvaW50PXIubm9kZSgpO3RoaXMubWluaW1hcFN2Zz1xLm5vZGUoKTt0aGlzLm1pbmltYXA9azt0aGlzLmNhbnZhcz1mLnNlbGVjdCgiY2FudmFzLmZpcnN0Iikubm9kZSgpO3RoaXMuY2FudmFzQnVmZmVyPWYuc2VsZWN0KCJjYW52YXMuc2Vjb25kIikubm9kZSgpO3RoaXMuZG93bmxvYWRDYW52YXM9Zi5zZWxlY3QoImNhbnZhcy5kb3dubG9hZCIpLm5vZGUoKTtkMy5zZWxlY3QodGhpcy5kb3dubG9hZENhbnZhcykuc3R5bGUoImRpc3BsYXkiLCJub25lIik7dGhpcy51cGRhdGUoKX11cGRhdGVWaWV3cG9pbnQoKXtkMy5zZWxlY3QodGhpcy52aWV3cG9pbnQpLmF0dHIoIngiLHRoaXMudmlld3BvaW50Q29vcmQueCkuYXR0cigieSIsdGhpcy52aWV3cG9pbnRDb29yZC55KTtsZXQgZj0KLXRoaXMudmlld3BvaW50Q29vcmQueCp0aGlzLnNjYWxlTWFpbi90aGlzLnNjYWxlTWluaW1hcCxnPS10aGlzLnZpZXdwb2ludENvb3JkLnkqdGhpcy5zY2FsZU1haW4vdGhpcy5zY2FsZU1pbmltYXA7ZDMuc2VsZWN0KHRoaXMuc3ZnKS5jYWxsKHRoaXMubWFpblpvb20udHJhbnNmb3JtLGQzLnpvb21JZGVudGl0eS50cmFuc2xhdGUoZixnKS5zY2FsZSh0aGlzLnNjYWxlTWFpbikpfXVwZGF0ZSgpe2xldCBmPW51bGw7dHJ5e2lmKGY9dGhpcy56b29tRy5nZXRCQm94KCksMD09PWYud2lkdGgpcmV0dXJufWNhdGNoKHQpe3JldHVybn12YXIgZz1kMy5zZWxlY3QoIiNncmFwaGRvd25sb2FkIik7dGhpcy5kb3dubG9hZD1nLm5vZGUoKTtnLm9uKCJjbGljayIsKCk9PntVUkwucmV2b2tlT2JqZWN0VVJMKHRoaXMuZG93bmxvYWQuaHJlZik7dmFyIHQ9dGhpcy5kb3dubG9hZENhbnZhcy50b0RhdGFVUkwoImltYWdlL3BuZyIpO2NvbnN0IHY9dC5zbGljZSgwLHQuaW5kZXhPZigiLCIpKTtpZih2LmVuZHNXaXRoKCI7YmFzZTY0Iikpe3ZhciBBPQphdG9iKHQuc2xpY2UodC5pbmRleE9mKCIsIikrMSkpO3Q9KG5ldyBVaW50OEFycmF5KEEubGVuZ3RoKSkubWFwKCh5LHgpPT5BLmNoYXJDb2RlQXQoeCkpO3RoaXMuZG93bmxvYWQuaHJlZj1VUkwuY3JlYXRlT2JqZWN0VVJMKG5ldyBCbG9iKFt0XSx7dHlwZToiaW1hZ2UvcG5nIn0pKX1lbHNlIGNvbnNvbGUud2Fybihgbm9uLWJhc2U2NCBkYXRhIFVSTCAoJHt2fSk7IGNhbm5vdCB1c2UgYmxvYiBkb3dubG9hZGApLHRoaXMuZG93bmxvYWQuaHJlZj10fSk7Zz1kMy5zZWxlY3QodGhpcy5zdmcpO3ZhciBsPSIiLGs9dGhpcy5zdmc7az0oay5nZXRSb290Tm9kZT9rLmdldFJvb3ROb2RlKCk6dGhpcy5zdmcucGFyZW50Tm9kZSkuc3R5bGVTaGVldHM7Zm9yKHZhciBtPTA7bTxrLmxlbmd0aDttKyspdHJ5e3ZhciBwPWtbbV0uY3NzUnVsZXN8fGtbbV0ucnVsZXM7aWYobnVsbCE9cClmb3IobGV0IHQ9MDt0PHAubGVuZ3RoO3QrKylsKz1wW3RdLmNzc1RleHQucmVwbGFjZSgvID90Zi1bXHctXSsgPy9nLAoiIikrIlxuIn1jYXRjaCh0KXtpZigiU2VjdXJpdHlFcnJvciIhPT10Lm5hbWUpdGhyb3cgdDt9cD1nLmFwcGVuZCgic3R5bGUiKTtwLnRleHQobCk7bD1kMy5zZWxlY3QodGhpcy56b29tRyk7az1sLmF0dHIoInRyYW5zZm9ybSIpO2wuYXR0cigidHJhbnNmb3JtIixudWxsKTtmLmhlaWdodCs9Zi55O2Yud2lkdGgrPWYueDtmLmhlaWdodCs9Mip0aGlzLmxhYmVsUGFkZGluZztmLndpZHRoKz0yKnRoaXMubGFiZWxQYWRkaW5nO2cuYXR0cigid2lkdGgiLGYud2lkdGgpLmF0dHIoImhlaWdodCIsZi5oZWlnaHQpO3RoaXMuc2NhbGVNaW5pbWFwPXRoaXMubWF4V2FuZEgvTWF0aC5tYXgoZi53aWR0aCxmLmhlaWdodCk7dGhpcy5taW5pbWFwU2l6ZT17d2lkdGg6Zi53aWR0aCp0aGlzLnNjYWxlTWluaW1hcCxoZWlnaHQ6Zi5oZWlnaHQqdGhpcy5zY2FsZU1pbmltYXB9O2QzLnNlbGVjdCh0aGlzLm1pbmltYXBTdmcpLmF0dHIodGhpcy5taW5pbWFwU2l6ZSk7ZDMuc2VsZWN0KHRoaXMuY2FudmFzQnVmZmVyKS5hdHRyKHRoaXMubWluaW1hcFNpemUpOwptPWQzLnNlbGVjdCh0aGlzLmRvd25sb2FkQ2FudmFzKTttLnN0eWxlKCJ3aWR0aCIsZi53aWR0aCk7bS5zdHlsZSgiaGVpZ2h0IixmLmhlaWdodCk7bS5hdHRyKCJ3aWR0aCIsMypmLndpZHRoKTttLmF0dHIoImhlaWdodCIsMypmLmhlaWdodCk7bnVsbCE9dGhpcy50cmFuc2xhdGUmJm51bGwhPXRoaXMuem9vbSYmcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT50aGlzLnpvb20oKSk7bGV0IHE9KG5ldyBYTUxTZXJpYWxpemVyKS5zZXJpYWxpemVUb1N0cmluZyh0aGlzLnN2Zyk7cC5yZW1vdmUoKTtnLmF0dHIoIndpZHRoIixudWxsKS5hdHRyKCJoZWlnaHQiLG51bGwpO2wuYXR0cigidHJhbnNmb3JtIixrKTtsZXQgcj1uZXcgSW1hZ2U7ci5vbmxvYWQ9KCk9Pnt2YXIgdD10aGlzLmNhbnZhc0J1ZmZlci5nZXRDb250ZXh0KCIyZCIpO3QuY2xlYXJSZWN0KDAsMCx0aGlzLmNhbnZhc0J1ZmZlci53aWR0aCx0aGlzLmNhbnZhc0J1ZmZlci5oZWlnaHQpO3QuZHJhd0ltYWdlKHIsMCwwLHRoaXMubWluaW1hcFNpemUud2lkdGgsCnRoaXMubWluaW1hcFNpemUuaGVpZ2h0KTtyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PntkMy5zZWxlY3QodGhpcy5jYW52YXNCdWZmZXIpLnN0eWxlKCJkaXNwbGF5IixudWxsKTtkMy5zZWxlY3QodGhpcy5jYW52YXMpLnN0eWxlKCJkaXNwbGF5Iiwibm9uZSIpO1t0aGlzLmNhbnZhcyx0aGlzLmNhbnZhc0J1ZmZlcl09W3RoaXMuY2FudmFzQnVmZmVyLHRoaXMuY2FudmFzXX0pO3Q9dGhpcy5kb3dubG9hZENhbnZhcy5nZXRDb250ZXh0KCIyZCIpO3QuY2xlYXJSZWN0KDAsMCx0aGlzLmRvd25sb2FkQ2FudmFzLndpZHRoLHRoaXMuZG93bmxvYWRDYW52YXMuaGVpZ2h0KTt0LmRyYXdJbWFnZShyLDAsMCx0aGlzLmRvd25sb2FkQ2FudmFzLndpZHRoLHRoaXMuZG93bmxvYWRDYW52YXMuaGVpZ2h0KX07ci5vbmVycm9yPSgpPT57ci5zcmM9VVJMLmNyZWF0ZU9iamVjdFVSTChuZXcgQmxvYihbcV0se3R5cGU6ImltYWdlL3N2Zyt4bWw7Y2hhcnNldFx4M2R1dGYtOCJ9KSl9O3Iuc3JjPQoiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXRceDNkdXRmLTgsIitlbmNvZGVVUklDb21wb25lbnQocSl9em9vbShmKXtpZihudWxsIT10aGlzLnNjYWxlTWluaW1hcCl7ZiYmKHRoaXMudHJhbnNsYXRlPVtmLngsZi55XSx0aGlzLnNjYWxlTWFpbj1mLmspO3ZhciBnPXRoaXMuc3ZnLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGw9ZDMuc2VsZWN0KHRoaXMudmlld3BvaW50KTt0aGlzLnZpZXdwb2ludENvb3JkLng9LXRoaXMudHJhbnNsYXRlWzBdKnRoaXMuc2NhbGVNaW5pbWFwL3RoaXMuc2NhbGVNYWluO3RoaXMudmlld3BvaW50Q29vcmQueT0tdGhpcy50cmFuc2xhdGVbMV0qdGhpcy5zY2FsZU1pbmltYXAvdGhpcy5zY2FsZU1haW47Zj1nLndpZHRoKnRoaXMuc2NhbGVNaW5pbWFwL3RoaXMuc2NhbGVNYWluO2c9Zy5oZWlnaHQqdGhpcy5zY2FsZU1pbmltYXAvdGhpcy5zY2FsZU1haW47bC5hdHRyKCJ4Iix0aGlzLnZpZXdwb2ludENvb3JkLngpLmF0dHIoInkiLHRoaXMudmlld3BvaW50Q29vcmQueSkuYXR0cigid2lkdGgiLApmKS5hdHRyKCJoZWlnaHQiLGcpO2w9dGhpcy5taW5pbWFwU2l6ZS53aWR0aDt2YXIgaz10aGlzLm1pbmltYXBTaXplLmhlaWdodCxtPXRoaXMudmlld3BvaW50Q29vcmQueCxwPXRoaXMudmlld3BvaW50Q29vcmQueTsuOD4oTWF0aC5taW4oTWF0aC5tYXgoMCxtK2YpLGwpLU1hdGgubWluKE1hdGgubWF4KDAsbSksbCkpKihNYXRoLm1pbihNYXRoLm1heCgwLHArZyksayktTWF0aC5taW4oTWF0aC5tYXgoMCxwKSxrKSkvKGwqayk/dGhpcy5taW5pbWFwLmNsYXNzTGlzdC5yZW1vdmUoImhpZGRlbiIpOnRoaXMubWluaW1hcC5jbGFzc0xpc3QuYWRkKCJoaWRkZW4iKX19fWMuTWluaW1hcD1kfSkoYS5zY2VuZXx8KGEuc2NlbmU9e30pKX0pKHRmfHwodGY9e30pKTsKPC9zY3JpcHQ+Cgo8ZG9tLW1vZHVsZSBpZD0idGYtZ3JhcGgtbWluaW1hcCI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7CiAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjNzIGxpbmVhcjsKICAgICAgICBwb2ludGVyLWV2ZW50czogYXV0bzsKICAgICAgfQoKICAgICAgOmhvc3QoLmhpZGRlbikgewogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIH0KCiAgICAgIGNhbnZhcyB7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgIzk5OTsKICAgICAgfQoKICAgICAgcmVjdCB7CiAgICAgICAgZmlsbDogd2hpdGU7CiAgICAgICAgc3Ryb2tlOiAjMTExMTExOwogICAgICAgIHN0cm9rZS13aWR0aDogMXB4OwogICAgICAgIGZpbGwtb3BhY2l0eTogMDsKICAgICAgICBmaWx0ZXI6IHVybCgjbWluaW1hcERyb3BTaGFkb3cpOwogICAgICAgIGN1cnNvcjogbW92ZTsKICAgICAgfQoKICAgICAgc3ZnIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8c3ZnPgogICAgICA8ZGVmcz4KICAgICAgICA8ZmlsdGVyIGlkPSJtaW5pbWFwRHJvcFNoYWRvdyIgeD0iLTIwJSIgeT0iLTIwJSIgd2lkdGg9IjE1MCUiIGhlaWdodD0iMTUwJSI+CiAgICAgICAgICA8ZmVvZmZzZXQgcmVzdWx0PSJvZmZPdXQiIGluPSJTb3VyY2VHcmFwaGljIiBkeD0iMSIgZHk9IjEiPjwvZmVvZmZzZXQ+CiAgICAgICAgICA8ZmVjb2xvcm1hdHJpeCByZXN1bHQ9Im1hdHJpeE91dCIgaW49Im9mZk91dCIgdHlwZT0ibWF0cml4IiB2YWx1ZXM9IjAuMSAwIDAgMCAwIDAgMC4xIDAgMCAwIDAgMCAwLjEgMCAwIDAgMCAwIDAuNSAwIj48L2ZlY29sb3JtYXRyaXg+CiAgICAgICAgICA8ZmVnYXVzc2lhbmJsdXIgcmVzdWx0PSJibHVyT3V0IiBpbj0ibWF0cml4T3V0IiBzdGRkZXZpYXRpb249IjIiPjwvZmVnYXVzc2lhbmJsdXI+CiAgICAgICAgICA8ZmVibGVuZCBpbj0iU291cmNlR3JhcGhpYyIgaW4yPSJibHVyT3V0IiBtb2RlPSJub3JtYWwiPjwvZmVibGVuZD4KICAgICAgICA8L2ZpbHRlcj4KICAgICAgPC9kZWZzPgogICAgICA8cmVjdD48L3JlY3Q+CiAgICA8L3N2Zz4KICAgIDxjYW52YXMgY2xhc3M9ImZpcnN0Ij48L2NhbnZhcz4KICAgIAogICAgPGNhbnZhcyBjbGFzcz0ic2Vjb25kIj48L2NhbnZhcz4KICAgIDxjYW52YXMgY2xhc3M9ImRvd25sb2FkIj48L2NhbnZhcz4KICA8L3RlbXBsYXRlPgogIDxzY3JpcHQ+Ly9+fldFQlBBVEh+fi90Zi1ncmFwaC90Zi1ncmFwaC1taW5pbWFwLmh0bWwuanMKUG9seW1lcih7aXM6InRmLWdyYXBoLW1pbmltYXAiLGluaXQ6ZnVuY3Rpb24oYSxjLGQsZixnKXtyZXR1cm4gbmV3IHRmLnNjZW5lLk1pbmltYXAoYSxjLGQsdGhpcyxmLGcpfX0pOwo8L3NjcmlwdD4KPC9kb20tbW9kdWxlPgoKCgo8ZG9tLW1vZHVsZSBpZD0idGYtZ3JhcGgtc2NlbmUiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZm9udC1zaXplOiAyMHB4OwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgI3N2ZyB7CiAgICAgICAgZmxleDogMTsKICAgICAgICBmb250LWZhbWlseTogUm9ib3RvLCBzYW5zLXNlcmlmOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAjaGlkZGVuIHsKICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgICAgdG9wOiAwcHg7CiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuOwogICAgICB9CgogICAgICAvKiAtLS0gTm9kZSBhbmQgYW5ub3RhdGlvbi1ub2RlIGZvciBNZXRhbm9kZSAtLS0gKi8KCiAgICAgIC5tZXRhID4gLm5vZGVzaGFwZSA+IHJlY3QsCiAgICAgIC5tZXRhID4gLmFubm90YXRpb24tbm9kZSA+IHJlY3QgewogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBmaWxsOiBoc2woMCwgMCUsIDcwJSk7CiAgICAgIH0KICAgICAgLm5vZGUubWV0YS5oaWdobGlnaHRlZCA+IC5ub2Rlc2hhcGUgPiByZWN0LAogICAgICAubm9kZS5tZXRhLmhpZ2hsaWdodGVkID4gLmFubm90YXRpb24tbm9kZSA+IHJlY3QgewogICAgICAgIHN0cm9rZS13aWR0aDogMjsKICAgICAgfQogICAgICAuYW5ub3RhdGlvbi5tZXRhLmhpZ2hsaWdodGVkID4gLm5vZGVzaGFwZSA+IHJlY3QsCiAgICAgIC5hbm5vdGF0aW9uLm1ldGEuaGlnaGxpZ2h0ZWQgPiAuYW5ub3RhdGlvbi1ub2RlID4gcmVjdCB7CiAgICAgICAgc3Ryb2tlLXdpZHRoOiAxOwogICAgICB9CiAgICAgIC5tZXRhLnNlbGVjdGVkID4gLm5vZGVzaGFwZSA+IHJlY3QsCiAgICAgIC5tZXRhLnNlbGVjdGVkID4gLmFubm90YXRpb24tbm9kZSA+IHJlY3QgewogICAgICAgIHN0cm9rZTogcmVkOwogICAgICAgIHN0cm9rZS13aWR0aDogMjsKICAgICAgfQogICAgICAubm9kZS5tZXRhLnNlbGVjdGVkLmV4cGFuZGVkID4gLm5vZGVzaGFwZSA+IHJlY3QsCiAgICAgIC5ub2RlLm1ldGEuc2VsZWN0ZWQuZXhwYW5kZWQgPiAuYW5ub3RhdGlvbi1ub2RlID4gcmVjdCB7CiAgICAgICAgc3Ryb2tlOiByZWQ7CiAgICAgICAgc3Ryb2tlLXdpZHRoOiAzOwogICAgICB9CiAgICAgIC5hbm5vdGF0aW9uLm1ldGEuc2VsZWN0ZWQgPiAubm9kZXNoYXBlID4gcmVjdCwKICAgICAgLmFubm90YXRpb24ubWV0YS5zZWxlY3RlZCA+IC5hbm5vdGF0aW9uLW5vZGUgPiByZWN0IHsKICAgICAgICBzdHJva2U6IHJlZDsKICAgICAgICBzdHJva2Utd2lkdGg6IDI7CiAgICAgIH0KICAgICAgLm5vZGUubWV0YS5zZWxlY3RlZC5leHBhbmRlZC5oaWdobGlnaHRlZCA+IC5ub2Rlc2hhcGUgPiByZWN0LAogICAgICAubm9kZS5tZXRhLnNlbGVjdGVkLmV4cGFuZGVkLmhpZ2hsaWdodGVkID4gLmFubm90YXRpb24tbm9kZSA+IHJlY3QgewogICAgICAgIHN0cm9rZTogcmVkOwogICAgICAgIHN0cm9rZS13aWR0aDogNDsKICAgICAgfQoKICAgICAgLmZhZGVkLAogICAgICAuZmFkZWQgcmVjdCwKICAgICAgLmZhZGVkIGVsbGlwc2UsCiAgICAgIC5mYWRlZCBwYXRoLAogICAgICAuZmFkZWQgdXNlLAogICAgICAjcmVjdEhhdGNoIGxpbmUsCiAgICAgICNlbGxpcHNlSGF0Y2ggbGluZSB7CiAgICAgICAgY29sb3I6ICNlMGQ0YjMgIWltcG9ydGFudDsKICAgICAgICBmaWxsOiB3aGl0ZTsKICAgICAgICBzdHJva2U6ICNlMGQ0YjMgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgLmZhZGVkIHBhdGggewogICAgICAgIHN0cm9rZS13aWR0aDogMXB4ICFpbXBvcnRhbnQ7CiAgICAgIH0KCiAgICAgIC5mYWRlZCByZWN0IHsKICAgICAgICBmaWxsOiB1cmwoI3JlY3RIYXRjaCkgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgLmZhZGVkIGVsbGlwc2UsCiAgICAgIC5mYWRlZCB1c2UgewogICAgICAgIGZpbGw6IHVybCgjZWxsaXBzZUhhdGNoKSAhaW1wb3J0YW50OwogICAgICB9CgogICAgICAuZmFkZWQgdGV4dCB7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgfQoKICAgICAgLyogUnVsZXMgdXNlZCBmb3IgaW5wdXQtdHJhY2luZy4gKi8KICAgICAgLmlucHV0LWhpZ2hsaWdodCA+ICogPiByZWN0LAogICAgICAuaW5wdXQtaGlnaGxpZ2h0ID4gKiA+IGVsbGlwc2UsCiAgICAgIC5pbnB1dC1oaWdobGlnaHQgPiAqID4gdXNlIHsKICAgICAgICBmaWxsOiB3aGl0ZTsKICAgICAgICBzdHJva2U6ICNmZjk4MDAgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgLyogIC0gRmFkZWQgbm9uLWlucHV0IHN0eWxpbmcgKi8KICAgICAgLm5vbi1pbnB1dCA+ICogPiByZWN0LAoubm9uLWlucHV0ID4gKiA+IGVsbGlwc2UsCi5ub24taW5wdXQgPiAqID4gdXNlLAovKiBGb3IgQ29uc3Qgbm9kZXMuICovCi5ub24taW5wdXQgPiAqID4gLmNvbnN0YW50Om5vdChbY2xhc3MqPSJpbnB1dC1oaWdobGlnaHQiXSkgPgogIC5hbm5vdGF0aW9uLW5vZGUgPiBlbGxpcHNlLAovKiBGb3Igc3R5bGluZyBvZiBhbm5vdGF0aW9uIG5vZGVzIG9mIG5vbi1pbnB1dCBub2Rlcy4gKi8KLm5vbi1pbnB1dCA+IGcgPiAuYW5ub3RhdGlvbiA+IC5hbm5vdGF0aW9uLW5vZGUgPiByZWN0IHsKICAgICAgICBzdHJva2U6ICNlMGQ0YjMgIWltcG9ydGFudDsKICAgICAgICBzdHJva2Utd2lkdGg6IGluaGVyaXQ7CiAgICAgICAgc3Ryb2tlLWRhc2hhcnJheTogaW5oZXJpdDsKICAgICAgfQoKICAgICAgLm5vbi1pbnB1dCBwYXRoIHsKICAgICAgICB2aXNpYmlsaXR5OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC5ub24taW5wdXQgPiAubm9kZXNoYXBlID4gcmVjdCwKLm5vbi1pbnB1dCA+IC5hbm5vdGF0aW9uLW5vZGUgPiByZWN0LAovKiBGb3Igc3R5bGluZyBvZiBhbm5vdGF0aW9uIG5vZGVzIG9mIG5vbi1pbnB1dCBub2Rlcy4gKi8KLm5vbi1pbnB1dCA+IGcgPiAuYW5ub3RhdGlvbiA+IC5hbm5vdGF0aW9uLW5vZGUgPiByZWN0IHsKICAgICAgICBmaWxsOiB1cmwoI3JlY3RIYXRjaCkgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgLm5vbi1pbnB1dCBlbGxpcHNlLAogICAgICAubm9uLWlucHV0IHVzZSB7CiAgICAgICAgZmlsbDogdXJsKCNlbGxpcHNlSGF0Y2gpICFpbXBvcnRhbnQ7CiAgICAgIH0KCiAgICAgIC5ub24taW5wdXQgPiB0ZXh0IHsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICB9CgogICAgICAubm9uLWlucHV0IC5hbm5vdGF0aW9uID4gLmFubm90YXRpb24tZWRnZSB7CiAgICAgICAgbWFya2VyLWVuZDogdXJsKCNhbm5vdGF0aW9uLWFycm93aGVhZC1mYWRlZCk7CiAgICAgIH0KCiAgICAgIC5ub24taW5wdXQgLmFubm90YXRpb24gPiAuYW5ub3RhdGlvbi1lZGdlLnJlZmxpbmUgewogICAgICAgIG1hcmtlci1zdGFydDogdXJsKCNyZWYtYW5ub3RhdGlvbi1hcnJvd2hlYWQtZmFkZWQpOwogICAgICB9CgogICAgICAvKiBJbnB1dCBlZGdlcy4gKi8KICAgICAgLmlucHV0LWVkZ2UtaGlnaGxpZ2h0ID4gdGV4dCB7CiAgICAgICAgZmlsbDogYmxhY2sgIWltcG9ydGFudDsKICAgICAgfQogICAgICAuaW5wdXQtaGlnaGxpZ2h0ID4gLmluLWFubm90YXRpb25zID4gLmFubm90YXRpb24gPiAuYW5ub3RhdGlvbi1lZGdlLAogICAgICAuaW5wdXQtaGlnaGxpZ2h0LXNlbGVjdGVkCiAgICAgICAgPiAuaW4tYW5ub3RhdGlvbnMKICAgICAgICA+IC5hbm5vdGF0aW9uCiAgICAgICAgPiAuYW5ub3RhdGlvbi1lZGdlIHsKICAgICAgICBzdHJva2U6ICM5OTkgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgLyogTm9uLWlucHV0IGVkZ2VzLiAqLwogICAgICAubm9uLWlucHV0LWVkZ2UtaGlnaGxpZ2h0LAoubm9uLWlucHV0ID4gZyA+IC5hbm5vdGF0aW9uID4gcGF0aCwKLyogQW5ub3RhdGlvbiBzdHlsZXMgKGxhYmVsIGFuZCBlZGdlcyByZXNwZWN0aXZlbHkpLiAqLwoubm9uLWlucHV0ID4gZyA+Ci5hbm5vdGF0aW9uOm5vdCguaW5wdXQtaGlnaGxpZ2h0KTpub3QoLmlucHV0LWhpZ2hsaWdodC1zZWxlY3RlZCkgPgouYW5ub3RhdGlvbi1sYWJlbAovKi5hbm5vdGF0aW9uLWVkZ2UqLwogewogICAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjsKICAgICAgfQoKICAgICAgLyogLS0tIE9wIE5vZGUgLS0tICovCgogICAgICAub3AgPiAubm9kZXNoYXBlID4gLm5vZGVjb2xvcnRhcmdldCwKICAgICAgLm9wID4gLmFubm90YXRpb24tbm9kZSA+IC5ub2RlY29sb3J0YXJnZXQgewogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBmaWxsOiAjZmZmOwogICAgICAgIHN0cm9rZTogI2NjYzsKICAgICAgfQoKICAgICAgLm9wLnNlbGVjdGVkID4gLm5vZGVzaGFwZSA+IC5ub2RlY29sb3J0YXJnZXQsCiAgICAgIC5vcC5zZWxlY3RlZCA+IC5hbm5vdGF0aW9uLW5vZGUgPiAubm9kZWNvbG9ydGFyZ2V0IHsKICAgICAgICBzdHJva2U6IHJlZDsKICAgICAgICBzdHJva2Utd2lkdGg6IDI7CiAgICAgIH0KCiAgICAgIC5vcC5oaWdobGlnaHRlZCA+IC5ub2Rlc2hhcGUgPiAubm9kZWNvbG9ydGFyZ2V0LAogICAgICAub3AuaGlnaGxpZ2h0ZWQgPiAuYW5ub3RhdGlvbi1ub2RlID4gLm5vZGVjb2xvcnRhcmdldCB7CiAgICAgICAgc3Ryb2tlLXdpZHRoOiAyOwogICAgICB9CgogICAgICAvKiAtLS0gU2VyaWVzIE5vZGUgLS0tICovCgogICAgICAvKiBCeSBkZWZhdWx0LCBkb24ndCBzaG93IHRoZSBzZXJpZXMgYmFja2dyb3VuZCA8cmVjdD4uICovCiAgICAgIC5zZXJpZXMgPiAubm9kZXNoYXBlID4gcmVjdCB7CiAgICAgICAgZmlsbDogaHNsKDAsIDAlLCA3MCUpOwogICAgICAgIGZpbGwtb3BhY2l0eTogMDsKICAgICAgICBzdHJva2UtZGFzaGFycmF5OiA1LCA1OwogICAgICAgIHN0cm9rZS1vcGFjaXR5OiAwOwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgfQoKICAgICAgLyogT25jZSBleHBhbmRlZCwgc2hvdyB0aGUgc2VyaWVzIGJhY2tncm91bmQgPHJlY3Q+IGFuZCBoaWRlIHRoZSA8dXNlPi4gKi8KICAgICAgLnNlcmllcy5leHBhbmRlZCA+IC5ub2Rlc2hhcGUgPiByZWN0IHsKICAgICAgICBmaWxsLW9wYWNpdHk6IDAuMTU7CiAgICAgICAgc3Ryb2tlOiBoc2woMCwgMCUsIDcwJSk7CiAgICAgICAgc3Ryb2tlLW9wYWNpdHk6IDE7CiAgICAgIH0KICAgICAgLnNlcmllcy5leHBhbmRlZCA+IC5ub2Rlc2hhcGUgPiB1c2UgewogICAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjsKICAgICAgfQoKICAgICAgLyoqCiAqIFRPRE86IFNpbXBsaWZ5IHRoaXMgYnkgYXBwbHlpbmcgYSBzdGFibGUgY2xhc3MgbmFtZSB0byBhbGwgPGc+CiAqIGVsZW1lbnRzIHRoYXQgY3VycmVudGx5IGhhdmUgZWl0aGVyIHRoZSBub2Rlc2hhcGUgb3IgYW5ub3RhdGlvbi1ub2RlIGNsYXNzZXMuCiAqLwogICAgICAuc2VyaWVzID4gLm5vZGVzaGFwZSA+IHVzZSwKICAgICAgLnNlcmllcyA+IC5hbm5vdGF0aW9uLW5vZGUgPiB1c2UgewogICAgICAgIHN0cm9rZTogI2NjYzsKICAgICAgfQogICAgICAuc2VyaWVzLmhpZ2hsaWdodGVkID4gLm5vZGVzaGFwZSA+IHVzZSwKICAgICAgLnNlcmllcy5oaWdobGlnaHRlZCA+IC5hbm5vdGF0aW9uLW5vZGUgPiB1c2UgewogICAgICAgIHN0cm9rZS13aWR0aDogMjsKICAgICAgfQogICAgICAuc2VyaWVzLnNlbGVjdGVkID4gLm5vZGVzaGFwZSA+IHVzZSwKICAgICAgLnNlcmllcy5zZWxlY3RlZCA+IC5hbm5vdGF0aW9uLW5vZGUgPiB1c2UgewogICAgICAgIHN0cm9rZTogcmVkOwogICAgICAgIHN0cm9rZS13aWR0aDogMjsKICAgICAgfQoKICAgICAgLnNlcmllcy5zZWxlY3RlZCA+IC5ub2Rlc2hhcGUgPiByZWN0IHsKICAgICAgICBzdHJva2U6IHJlZDsKICAgICAgICBzdHJva2Utd2lkdGg6IDI7CiAgICAgIH0KCiAgICAgIC5hbm5vdGF0aW9uLnNlcmllcy5zZWxlY3RlZCA+IC5hbm5vdGF0aW9uLW5vZGUgPiB1c2UgewogICAgICAgIHN0cm9rZTogcmVkOwogICAgICAgIHN0cm9rZS13aWR0aDogMjsKICAgICAgfQoKICAgICAgLyogLS0tIEJyaWRnZSBOb2RlIC0tLSAqLwogICAgICAuYnJpZGdlID4gLm5vZGVzaGFwZSA+IHJlY3QgewogICAgICAgIHN0cm9rZTogI2YwZjsKICAgICAgICBvcGFjaXR5OiAwLjI7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQoKICAgICAgLyogLS0tIFN0cnVjdHVyYWwgRWxlbWVudHMgLS0tICovCiAgICAgIC5lZGdlID4gcGF0aC5lZGdlbGluZS5zdHJ1Y3R1cmFsIHsKICAgICAgICBzdHJva2U6ICNmMGY7CiAgICAgICAgb3BhY2l0eTogMC4yOwogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KCiAgICAgIC8qIFJlZmVyZW5jZSBFZGdlICovCiAgICAgIC5lZGdlID4gcGF0aC5lZGdlbGluZS5yZWZlcmVuY2VlZGdlIHsKICAgICAgICBzdHJva2U6ICNmZmI3NGQ7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgfQoKICAgICAgLyogLS0tIFNlcmllcyBOb2RlcyAtLS0gKi8KCiAgICAgIC8qIEhpZGUgdGhlIHJlY3QgZm9yIGEgc2VyaWVzJyBhbm5vdGF0aW9uLiAqLwogICAgICAuc2VyaWVzID4gLmFubm90YXRpb24tbm9kZSA+IHJlY3QgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KCiAgICAgIC8qIC0tLSBOb2RlIGxhYmVsIC0tLSAqLwoKICAgICAgLm5vZGUgPiB0ZXh0Lm5vZGVsYWJlbCB7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIGZpbGw6ICM0NDQ7CiAgICAgIH0KCiAgICAgIC5tZXRhLmV4cGFuZGVkID4gdGV4dC5ub2RlbGFiZWwgewogICAgICAgIGZvbnQtc2l6ZTogOXB4OwogICAgICB9CgogICAgICAuc2VyaWVzID4gdGV4dC5ub2RlbGFiZWwgewogICAgICAgIGZvbnQtc2l6ZTogOHB4OwogICAgICB9CgogICAgICAub3AgPiB0ZXh0Lm5vZGVsYWJlbCB7CiAgICAgICAgZm9udC1zaXplOiA2cHg7CiAgICAgIH0KCiAgICAgIC5icmlkZ2UgPiB0ZXh0Lm5vZGVsYWJlbCB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQoKICAgICAgLm5vZGUubWV0YS5leHBhbmRlZCA+IHRleHQubm9kZWxhYmVsIHsKICAgICAgICBjdXJzb3I6IG5vcm1hbDsKICAgICAgfQoKICAgICAgLmFubm90YXRpb24ubWV0YS5oaWdobGlnaHRlZCA+IHRleHQuYW5ub3RhdGlvbi1sYWJlbCB7CiAgICAgICAgZmlsbDogIzUwYTNmNzsKICAgICAgfQoKICAgICAgLmFubm90YXRpb24ubWV0YS5zZWxlY3RlZCA+IHRleHQuYW5ub3RhdGlvbi1sYWJlbCB7CiAgICAgICAgZmlsbDogIzQyODVmNDsKICAgICAgfQoKICAgICAgLyogLS0tIEFubm90YXRpb24gLS0tICovCgogICAgICAvKiBvbmx5IGFwcGxpZWQgZm9yIGFubm90YXRpb25zIHRoYXQgYXJlIG5vdCBzdW1tYXJ5IG9yIGNvbnN0YW50LgooLnN1bW1hcnksIC5jb25zdGFudCBnZXRzIG92ZXJyaWRkZW4gYmVsb3cpICovCiAgICAgIC5hbm5vdGF0aW9uID4gLmFubm90YXRpb24tbm9kZSA+ICogewogICAgICAgIHN0cm9rZS13aWR0aDogMC41OwogICAgICAgIHN0cm9rZS1kYXNoYXJyYXk6IDEsIDE7CiAgICAgIH0KCiAgICAgIC5hbm5vdGF0aW9uLnN1bW1hcnkgPiAuYW5ub3RhdGlvbi1ub2RlID4gKiwKICAgICAgLmFubm90YXRpb24uY29uc3RhbnQgPiAuYW5ub3RhdGlvbi1ub2RlID4gKiB7CiAgICAgICAgc3Ryb2tlLXdpZHRoOiAxOwogICAgICAgIHN0cm9rZS1kYXNoYXJyYXk6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5hbm5vdGF0aW9uID4gLmFubm90YXRpb24tZWRnZSB7CiAgICAgICAgZmlsbDogbm9uZTsKICAgICAgICBzdHJva2U6ICNhYWE7CiAgICAgICAgc3Ryb2tlLXdpZHRoOiAwLjU7CiAgICAgICAgbWFya2VyLWVuZDogdXJsKCNhbm5vdGF0aW9uLWFycm93aGVhZCk7CiAgICAgIH0KCiAgICAgIC5mYWRlZCAuYW5ub3RhdGlvbiA+IC5hbm5vdGF0aW9uLWVkZ2UgewogICAgICAgIG1hcmtlci1lbmQ6IHVybCgjYW5ub3RhdGlvbi1hcnJvd2hlYWQtZmFkZWQpOwogICAgICB9CgogICAgICAuYW5ub3RhdGlvbiA+IC5hbm5vdGF0aW9uLWVkZ2UucmVmbGluZSB7CiAgICAgICAgbWFya2VyLXN0YXJ0OiB1cmwoI3JlZi1hbm5vdGF0aW9uLWFycm93aGVhZCk7CiAgICAgIH0KCiAgICAgIC5mYWRlZCAuYW5ub3RhdGlvbiA+IC5hbm5vdGF0aW9uLWVkZ2UucmVmbGluZSB7CiAgICAgICAgbWFya2VyLXN0YXJ0OiB1cmwoI3JlZi1hbm5vdGF0aW9uLWFycm93aGVhZC1mYWRlZCk7CiAgICAgIH0KCiAgICAgIC5hbm5vdGF0aW9uID4gLmFubm90YXRpb24tY29udHJvbC1lZGdlIHsKICAgICAgICBzdHJva2UtZGFzaGFycmF5OiAxLCAxOwogICAgICB9CgogICAgICAjYW5ub3RhdGlvbi1hcnJvd2hlYWQgewogICAgICAgIGZpbGw6ICNhYWE7CiAgICAgIH0KCiAgICAgICNhbm5vdGF0aW9uLWFycm93aGVhZC1mYWRlZCB7CiAgICAgICAgZmlsbDogI2UwZDRiMzsKICAgICAgfQoKICAgICAgI3JlZi1hbm5vdGF0aW9uLWFycm93aGVhZCB7CiAgICAgICAgZmlsbDogI2FhYTsKICAgICAgfQoKICAgICAgI3JlZi1hbm5vdGF0aW9uLWFycm93aGVhZC1mYWRlZCB7CiAgICAgICAgZmlsbDogI2UwZDRiMzsKICAgICAgfQoKICAgICAgLmFubm90YXRpb24gPiAuYW5ub3RhdGlvbi1sYWJlbCB7CiAgICAgICAgZm9udC1zaXplOiA1cHg7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICB9CiAgICAgIC5hbm5vdGF0aW9uID4gLmFubm90YXRpb24tbGFiZWwuYW5ub3RhdGlvbi1lbGxpcHNpcyB7CiAgICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICB9CgogICAgICAvKiBIaWRlIGFubm90YXRpb25zIG9uIGV4cGFuZGVkIG1ldGEgbm9kZXMgc2luY2UgdGhleSdyZSByZWR1bmRhbnQuICovCiAgICAgIC5leHBhbmRlZCA+IC5pbi1hbm5vdGF0aW9ucywKICAgICAgLmV4cGFuZGVkID4gLm91dC1hbm5vdGF0aW9ucyB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQoKICAgICAgLyogLS0tIEFubm90YXRpb246IENvbnN0YW50IC0tLSAqLwoKICAgICAgLmNvbnN0YW50ID4gLmFubm90YXRpb24tbm9kZSA+IGVsbGlwc2UgewogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBmaWxsOiB3aGl0ZTsKICAgICAgICBzdHJva2U6ICM4NDg0ODQ7CiAgICAgIH0KCiAgICAgIC5jb25zdGFudC5zZWxlY3RlZCA+IC5hbm5vdGF0aW9uLW5vZGUgPiBlbGxpcHNlIHsKICAgICAgICBmaWxsOiB3aGl0ZTsKICAgICAgICBzdHJva2U6IHJlZDsKICAgICAgfQoKICAgICAgLmNvbnN0YW50LmhpZ2hsaWdodGVkID4gLmFubm90YXRpb24tbm9kZSA+IGVsbGlwc2UgewogICAgICAgIHN0cm9rZS13aWR0aDogMS41OwogICAgICB9CgogICAgICAvKiAtLS0gQW5ub3RhdGlvbjogU3VtbWFyeSAtLS0gKi8KCiAgICAgIC5zdW1tYXJ5ID4gLmFubm90YXRpb24tbm9kZSA+IGVsbGlwc2UgewogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBmaWxsOiAjZGI0NDM3OwogICAgICAgIHN0cm9rZTogI2RiNDQzNzsKICAgICAgfQoKICAgICAgLnN1bW1hcnkuc2VsZWN0ZWQgPiAuYW5ub3RhdGlvbi1ub2RlID4gZWxsaXBzZSB7CiAgICAgICAgZmlsbDogI2E1MjcxNDsKICAgICAgICBzdHJva2U6ICNhNTI3MTQ7CiAgICAgIH0KCiAgICAgIC5zdW1tYXJ5LmhpZ2hsaWdodGVkID4gLmFubm90YXRpb24tbm9kZSA+IGVsbGlwc2UgewogICAgICAgIHN0cm9rZS13aWR0aDogMS41OwogICAgICB9CgogICAgICAvKiAtLS0gRWRnZSAtLS0gKi8KCiAgICAgIC5lZGdlID4gcGF0aC5lZGdlbGluZSB7CiAgICAgICAgZmlsbDogbm9uZTsKICAgICAgICBzdHJva2U6ICNiYmI7CiAgICAgICAgc3Ryb2tlLWxpbmVjYXA6IHJvdW5kOwogICAgICAgIHN0cm9rZS13aWR0aDogMC43NTsKICAgICAgfQoKICAgICAgLmVkZ2UgLnNlbGVjdGFibGVlZGdlIHsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgIH0KCiAgICAgIC5zZWxlY3RlZGVkZ2UgPiBwYXRoLmVkZ2VsaW5lIHsKICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICAgICAgc3Ryb2tlOiAjZjAwOwogICAgICB9CgogICAgICAuZWRnZS5zZWxlY3RlZGVkZ2UgdGV4dCB7CiAgICAgICAgZmlsbDogIzAwMDsKICAgICAgfQoKICAgICAgLyogTGFiZWxzIHNob3dpbmcgdGVuc29yIHNoYXBlcyBvbiBlZGdlcyAqLwogICAgICAuZWRnZSA+IHRleHQgewogICAgICAgIGZvbnQtc2l6ZTogMy41cHg7CiAgICAgICAgZmlsbDogIzY2NjsKICAgICAgfQoKICAgICAgLmRhdGFmbG93LWFycm93aGVhZCB7CiAgICAgICAgZmlsbDogI2JiYjsKICAgICAgfQoKICAgICAgLnJlZmVyZW5jZS1hcnJvd2hlYWQgewogICAgICAgIGZpbGw6ICNmZmI3NGQ7CiAgICAgIH0KCiAgICAgIC5zZWxlY3RlZC1hcnJvd2hlYWQgewogICAgICAgIGZpbGw6ICNmMDA7CiAgICAgIH0KCiAgICAgIC5lZGdlIC5jb250cm9sLWRlcCB7CiAgICAgICAgc3Ryb2tlLWRhc2hhcnJheTogMiwgMjsKICAgICAgfQoKICAgICAgLyogLS0tIEdyb3VwIG5vZGUgZXhwYW5kL2NvbGxhcHNlIGJ1dHRvbiAtLS0gKi8KCiAgICAgIC8qIEhpZGVzIGV4cGFuZC9jb2xsYXBzZSBidXR0b25zIHdoZW4gYSBub2RlIGlzbid0IGV4cGFuZGVkIG9yIGhpZ2hsaWdodGVkLiBVc2luZwogICBpbmNyZWRpYmx5IHNtYWxsIG9wYWNpdHkgc28gdGhhdCB0aGUgYm91bmRpbmcgYm94IG9mIHRoZSA8Zz4gcGFyZW50IHN0aWxsIHRha2VzCiAgIHRoaXMgY29udGFpbmVyIGludG8gYWNjb3VudCBldmVuIHdoZW4gaXQgaXNuJ3QgdmlzaWJsZSAqLwogICAgICAubm9kZTpub3QoLmhpZ2hsaWdodGVkKTpub3QoLmV4cGFuZGVkKSA+IC5ub2Rlc2hhcGUgPiAuYnV0dG9uY29udGFpbmVyIHsKICAgICAgICBvcGFjaXR5OiAwLjAxOwogICAgICB9CiAgICAgIC5ub2RlLmhpZ2hsaWdodGVkID4gLm5vZGVzaGFwZSA+IC5idXR0b25jb250YWluZXIgewogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgfQogICAgICAuYnV0dG9uY2lyY2xlIHsKICAgICAgICBmaWxsOiAjZTc4MTFkOwogICAgICB9CiAgICAgIC5idXR0b25jaXJjbGU6aG92ZXIgewogICAgICAgIGZpbGw6ICNiOTY3MTc7CiAgICAgIH0KICAgICAgLmV4cGFuZGJ1dHRvbiwKICAgICAgLmNvbGxhcHNlYnV0dG9uIHsKICAgICAgICBzdHJva2U6IHdoaXRlOwogICAgICB9CiAgICAgIC8qIERvIG5vdCBsZXQgdGhlIHBhdGggZWxlbWVudHMgaW4gdGhlIGJ1dHRvbiB0YWtlIHBvaW50ZXIgZm9jdXMgKi8KICAgICAgLm5vZGUgPiAubm9kZXNoYXBlID4gLmJ1dHRvbmNvbnRhaW5lciA+IC5leHBhbmRidXR0b24sCiAgICAgIC5ub2RlID4gLm5vZGVzaGFwZSA+IC5idXR0b25jb250YWluZXIgPiAuY29sbGFwc2VidXR0b24gewogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CiAgICAgIC8qIE9ubHkgc2hvdyB0aGUgZXhwYW5kIGJ1dHRvbiB3aGVuIGEgbm9kZSBpcyBjb2xsYXBzZWQgYW5kIG9ubHkgc2hvdyB0aGUKICAgY29sbGFwc2UgYnV0dG9uIHdoZW4gYSBub2RlIGlzIGV4cGFuZGVkLiAqLwogICAgICAubm9kZS5leHBhbmRlZCA+IC5ub2Rlc2hhcGUgPiAuYnV0dG9uY29udGFpbmVyID4gLmV4cGFuZGJ1dHRvbiB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQogICAgICAubm9kZTpub3QoLmV4cGFuZGVkKSA+IC5ub2Rlc2hhcGUgPiAuYnV0dG9uY29udGFpbmVyID4gLmNvbGxhcHNlYnV0dG9uIHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICB9CgogICAgICAuaGVhbHRoLXBpbGwtc3RhdHMgewogICAgICAgIGZvbnQtc2l6ZTogNHB4OwogICAgICAgIHRleHQtYW5jaG9yOiBtaWRkbGU7CiAgICAgIH0KCiAgICAgIC5oZWFsdGgtcGlsbCByZWN0IHsKICAgICAgICBmaWx0ZXI6IHVybCgjaGVhbHRoLXBpbGwtc2hhZG93KTsKICAgICAgICByeDogMzsKICAgICAgICByeTogMzsKICAgICAgfQoKICAgICAgLnRpdGxlQ29udGFpbmVyIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgdG9wOiAyMHB4OwogICAgICB9CgogICAgICAudGl0bGUsCiAgICAgIC5hdXhUaXRsZSwKICAgICAgLmZ1bmN0aW9uTGlicmFyeVRpdGxlIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgIH0KCiAgICAgICNtaW5pbWFwIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgcmlnaHQ6IDIwcHg7CiAgICAgICAgYm90dG9tOiAyMHB4OwogICAgICB9CgogICAgICAuY29udGV4dC1tZW51IHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTJlMmUyOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDJweDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgbWluLXdpZHRoOiAxNTBweDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjZDRkNGQ0OwogICAgICB9CgogICAgICAuY29udGV4dC1tZW51IHVsIHsKICAgICAgICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICB9CgogICAgICAuY29udGV4dC1tZW51IHVsIGxpIHsKICAgICAgICBwYWRkaW5nOiA0cHggMTZweDsKICAgICAgfQoKICAgICAgLmNvbnRleHQtbWVudSB1bCBsaTpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2YzOTEzZTsKICAgICAgICBjb2xvcjogd2hpdGU7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8ZGl2IGNsYXNzPSJ0aXRsZUNvbnRhaW5lciI+CiAgICAgIDxkaXYgaWQ9InRpdGxlIiBjbGFzcz0idGl0bGUiPk1haW4gR3JhcGg8L2Rpdj4KICAgICAgPGRpdiBpZD0iYXV4VGl0bGUiIGNsYXNzPSJhdXhUaXRsZSI+QXV4aWxpYXJ5IE5vZGVzPC9kaXY+CiAgICAgIDxkaXYgaWQ9ImZ1bmN0aW9uTGlicmFyeVRpdGxlIiBjbGFzcz0iZnVuY3Rpb25MaWJyYXJ5VGl0bGUiPgogICAgICAgIEZ1bmN0aW9ucwogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogICAgPHN2ZyBpZD0ic3ZnIj4KICAgICAgPGRlZnM+CiAgICAgICAgCiAgICAgICAgPHBhdGggaWQ9InJlZmVyZW5jZS1hcnJvd2hlYWQtcGF0aCIgZD0iTSAwLDAgTCAxMCw1IEwgMCwxMCBDIDMsNyAzLDMgMCwwIiAvPgogICAgICAgIDxtYXJrZXIgY2xhc3M9InJlZmVyZW5jZS1hcnJvd2hlYWQiIGlkPSJyZWZlcmVuY2UtYXJyb3doZWFkLXNtYWxsIiB2aWV3Ym94PSIwIDAgMTAgMTAiIG1hcmtlcndpZHRoPSI1IiBtYXJrZXJoZWlnaHQ9IjUiIHJlZng9IjIiIHJlZnk9IjUiIG9yaWVudD0iYXV0by1zdGFydC1yZXZlcnNlIiBtYXJrZXJ1bml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgICAgICAgPHVzZSB4bGluazpocmVmPSIjcmVmZXJlbmNlLWFycm93aGVhZC1wYXRoIiAvPgogICAgICAgIDwvbWFya2VyPgogICAgICAgIDxtYXJrZXIgY2xhc3M9InJlZmVyZW5jZS1hcnJvd2hlYWQiIGlkPSJyZWZlcmVuY2UtYXJyb3doZWFkLW1lZGl1bSIgdmlld2JveD0iMCAwIDEwIDEwIiBtYXJrZXJ3aWR0aD0iMTMiIG1hcmtlcmhlaWdodD0iMTMiIHJlZng9IjIiIHJlZnk9IjUiIG9yaWVudD0iYXV0by1zdGFydC1yZXZlcnNlIiBtYXJrZXJ1bml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgICAgICAgPHVzZSB4bGluazpocmVmPSIjcmVmZXJlbmNlLWFycm93aGVhZC1wYXRoIiAvPgogICAgICAgIDwvbWFya2VyPgogICAgICAgIDxtYXJrZXIgY2xhc3M9InJlZmVyZW5jZS1hcnJvd2hlYWQiIGlkPSJyZWZlcmVuY2UtYXJyb3doZWFkLWxhcmdlIiB2aWV3Ym94PSIwIDAgMTAgMTAiIG1hcmtlcndpZHRoPSIxNiIgbWFya2VyaGVpZ2h0PSIxNiIgcmVmeD0iMiIgcmVmeT0iNSIgb3JpZW50PSJhdXRvLXN0YXJ0LXJldmVyc2UiIG1hcmtlcnVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNyZWZlcmVuY2UtYXJyb3doZWFkLXBhdGgiIC8+CiAgICAgICAgPC9tYXJrZXI+CiAgICAgICAgPG1hcmtlciBjbGFzcz0icmVmZXJlbmNlLWFycm93aGVhZCIgaWQ9InJlZmVyZW5jZS1hcnJvd2hlYWQteGxhcmdlIiB2aWV3Ym94PSIwIDAgMTAgMTAiIG1hcmtlcndpZHRoPSIyMCIgbWFya2VyaGVpZ2h0PSIyMCIgcmVmeD0iMiIgcmVmeT0iNSIgb3JpZW50PSJhdXRvLXN0YXJ0LXJldmVyc2UiIG1hcmtlcnVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNyZWZlcmVuY2UtYXJyb3doZWFkLXBhdGgiIC8+CiAgICAgICAgPC9tYXJrZXI+CgogICAgICAgIAogICAgICAgIDxwYXRoIGlkPSJkYXRhZmxvdy1hcnJvd2hlYWQtcGF0aCIgZD0iTSAwLDAgTCAxMCw1IEwgMCwxMCBDIDMsNyAzLDMgMCwwIiAvPgogICAgICAgIDxtYXJrZXIgY2xhc3M9ImRhdGFmbG93LWFycm93aGVhZCIgaWQ9ImRhdGFmbG93LWFycm93aGVhZC1zbWFsbCIgdmlld2JveD0iMCAwIDEwIDEwIiBtYXJrZXJ3aWR0aD0iNSIgbWFya2VyaGVpZ2h0PSI1IiByZWZ4PSIyIiByZWZ5PSI1IiBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSIgbWFya2VydW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI2RhdGFmbG93LWFycm93aGVhZC1wYXRoIiAvPgogICAgICAgIDwvbWFya2VyPgogICAgICAgIDxtYXJrZXIgY2xhc3M9ImRhdGFmbG93LWFycm93aGVhZCIgaWQ9ImRhdGFmbG93LWFycm93aGVhZC1tZWRpdW0iIHZpZXdib3g9IjAgMCAxMCAxMCIgbWFya2Vyd2lkdGg9IjEzIiBtYXJrZXJoZWlnaHQ9IjEzIiByZWZ4PSIyIiByZWZ5PSI1IiBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSIgbWFya2VydW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI2RhdGFmbG93LWFycm93aGVhZC1wYXRoIiAvPgogICAgICAgIDwvbWFya2VyPgogICAgICAgIDxtYXJrZXIgY2xhc3M9ImRhdGFmbG93LWFycm93aGVhZCIgaWQ9ImRhdGFmbG93LWFycm93aGVhZC1sYXJnZSIgdmlld2JveD0iMCAwIDEwIDEwIiBtYXJrZXJ3aWR0aD0iMTYiIG1hcmtlcmhlaWdodD0iMTYiIHJlZng9IjIiIHJlZnk9IjUiIG9yaWVudD0iYXV0by1zdGFydC1yZXZlcnNlIiBtYXJrZXJ1bml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgICAgICAgPHVzZSB4bGluazpocmVmPSIjZGF0YWZsb3ctYXJyb3doZWFkLXBhdGgiIC8+CiAgICAgICAgPC9tYXJrZXI+CiAgICAgICAgPG1hcmtlciBjbGFzcz0iZGF0YWZsb3ctYXJyb3doZWFkIiBpZD0iZGF0YWZsb3ctYXJyb3doZWFkLXhsYXJnZSIgdmlld2JveD0iMCAwIDEwIDEwIiBtYXJrZXJ3aWR0aD0iMjAiIG1hcmtlcmhlaWdodD0iMjAiIHJlZng9IjIiIHJlZnk9IjUiIG9yaWVudD0iYXV0by1zdGFydC1yZXZlcnNlIiBtYXJrZXJ1bml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgICAgICAgPHVzZSB4bGluazpocmVmPSIjZGF0YWZsb3ctYXJyb3doZWFkLXBhdGgiIC8+CiAgICAgICAgPC9tYXJrZXI+CgogICAgICAgIAogICAgICAgIDxtYXJrZXIgaWQ9ImFubm90YXRpb24tYXJyb3doZWFkIiBtYXJrZXJ3aWR0aD0iNSIgbWFya2VyaGVpZ2h0PSI1IiByZWZ4PSI1IiByZWZ5PSIyLjUiIG9yaWVudD0iYXV0byI+CiAgICAgICAgICA8cGF0aCBkPSJNIDAsMCBMIDUsMi41IEwgMCw1IEwgMCwwIiAvPgogICAgICAgIDwvbWFya2VyPgogICAgICAgIDxtYXJrZXIgaWQ9ImFubm90YXRpb24tYXJyb3doZWFkLWZhZGVkIiBtYXJrZXJ3aWR0aD0iNSIgbWFya2VyaGVpZ2h0PSI1IiByZWZ4PSI1IiByZWZ5PSIyLjUiIG9yaWVudD0iYXV0byI+CiAgICAgICAgICA8cGF0aCBkPSJNIDAsMCBMIDUsMi41IEwgMCw1IEwgMCwwIiAvPgogICAgICAgIDwvbWFya2VyPgogICAgICAgIDxtYXJrZXIgaWQ9InJlZi1hbm5vdGF0aW9uLWFycm93aGVhZCIgbWFya2Vyd2lkdGg9IjUiIG1hcmtlcmhlaWdodD0iNSIgcmVmeD0iMCIgcmVmeT0iMi41IiBvcmllbnQ9ImF1dG8iPgogICAgICAgICAgPHBhdGggZD0iTSA1LDAgTCAwLDIuNSBMIDUsNSBMIDUsMCIgLz4KICAgICAgICA8L21hcmtlcj4KICAgICAgICA8bWFya2VyIGlkPSJyZWYtYW5ub3RhdGlvbi1hcnJvd2hlYWQtZmFkZWQiIG1hcmtlcndpZHRoPSI1IiBtYXJrZXJoZWlnaHQ9IjUiIHJlZng9IjAiIHJlZnk9IjIuNSIgb3JpZW50PSJhdXRvIj4KICAgICAgICAgIDxwYXRoIGQ9Ik0gNSwwIEwgMCwyLjUgTCA1LDUgTCA1LDAiIC8+CiAgICAgICAgPC9tYXJrZXI+CiAgICAgICAgCiAgICAgICAgPGVsbGlwc2UgaWQ9Im9wLW5vZGUtc3RhbXAiIHJ4PSI3LjUiIHJ5PSIzIiBzdHJva2U9ImluaGVyaXQiIGZpbGw9ImluaGVyaXQiIC8+CiAgICAgICAgCiAgICAgICAgPGVsbGlwc2UgaWQ9Im9wLW5vZGUtYW5ub3RhdGlvbi1zdGFtcCIgcng9IjUiIHJ5PSIyIiBzdHJva2U9ImluaGVyaXQiIGZpbGw9ImluaGVyaXQiIC8+CiAgICAgICAgCiAgICAgICAgPGcgaWQ9Im9wLXNlcmllcy12ZXJ0aWNhbC1zdGFtcCI+CiAgICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNvcC1ub2RlLXN0YW1wIiB4PSI4IiB5PSI5IiAvPgogICAgICAgICAgPHVzZSB4bGluazpocmVmPSIjb3Atbm9kZS1zdGFtcCIgeD0iOCIgeT0iNiIgLz4KICAgICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI29wLW5vZGUtc3RhbXAiIHg9IjgiIHk9IjMiIC8+CiAgICAgICAgPC9nPgogICAgICAgIAogICAgICAgIDxnIGlkPSJvcC1zZXJpZXMtaG9yaXpvbnRhbC1zdGFtcCI+CiAgICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNvcC1ub2RlLXN0YW1wIiB4PSIxNiIgeT0iNCIgLz4KICAgICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI29wLW5vZGUtc3RhbXAiIHg9IjEyIiB5PSI0IiAvPgogICAgICAgICAgPHVzZSB4bGluazpocmVmPSIjb3Atbm9kZS1zdGFtcCIgeD0iOCIgeT0iNCIgLz4KICAgICAgICA8L2c+CiAgICAgICAgCiAgICAgICAgPGcgaWQ9Im9wLXNlcmllcy1hbm5vdGF0aW9uLXN0YW1wIj4KICAgICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI29wLW5vZGUtYW5ub3RhdGlvbi1zdGFtcCIgeD0iOSIgeT0iMiIgLz4KICAgICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI29wLW5vZGUtYW5ub3RhdGlvbi1zdGFtcCIgeD0iNyIgeT0iMiIgLz4KICAgICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI29wLW5vZGUtYW5ub3RhdGlvbi1zdGFtcCIgeD0iNSIgeT0iMiIgLz4KICAgICAgICA8L2c+CiAgICAgICAgPHN2ZyBpZD0ic3VtbWFyeS1pY29uIiBmaWxsPSIjODQ4NDg0IiBoZWlnaHQ9IjEyIiB2aWV3Ym94PSIwIDAgMjQgMjQiIHdpZHRoPSIxMiI+CiAgICAgICAgICA8cGF0aCBkPSJNMTkgM0g1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6TTkgMTdIN3YtN2gydjd6bTQgMGgtMlY3aDJ2MTB6bTQgMGgtMnYtNGgydjR6IiAvPgogICAgICAgIDwvc3ZnPgoKICAgICAgICAKICAgICAgICA8cGF0dGVybiBpZD0icmVjdEhhdGNoIiBwYXR0ZXJudHJhbnNmb3JtPSJyb3RhdGUoNDUgMCAwKSIgd2lkdGg9IjUiIGhlaWdodD0iNSIgcGF0dGVybnVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICAgICAgICA8bGluZSB4MT0iMCIgeTE9IjAiIHgyPSIwIiB5Mj0iNSIgc3R5bGU9InN0cm9rZS13aWR0aDogMSIgLz4KICAgICAgICA8L3BhdHRlcm4+CiAgICAgICAgPHBhdHRlcm4gaWQ9ImVsbGlwc2VIYXRjaCIgcGF0dGVybnRyYW5zZm9ybT0icm90YXRlKDQ1IDAgMCkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIHBhdHRlcm51bml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgICAgICAgPGxpbmUgeDE9IjAiIHkxPSIwIiB4Mj0iMCIgeTI9IjIiIHN0eWxlPSJzdHJva2Utd2lkdGg6IDEiIC8+CiAgICAgICAgPC9wYXR0ZXJuPgoKICAgICAgICAKICAgICAgICA8ZmlsdGVyIGlkPSJoZWFsdGgtcGlsbC1zaGFkb3ciIHg9Ii00MCUiIHk9Ii00MCUiIHdpZHRoPSIxODAlIiBoZWlnaHQ9IjE4MCUiPgogICAgICAgICAgPGZlZ2F1c3NpYW5ibHVyIGluPSJTb3VyY2VBbHBoYSIgc3RkRGV2aWF0aW9uPSIwLjgiIC8+CiAgICAgICAgICA8ZmVvZmZzZXQgZHg9IjAiIGR5PSIwIiByZXN1bHQ9Im9mZnNldGJsdXIiIC8+CiAgICAgICAgICA8ZmVmbG9vZCBmbG9vZC1jb2xvcj0iIzAwMDAwMCIgLz4KICAgICAgICAgIDxmZWNvbXBvc2l0ZSBpbjI9Im9mZnNldGJsdXIiIG9wZXJhdG9yPSJpbiIgLz4KICAgICAgICAgIDxmZW1lcmdlPgogICAgICAgICAgICA8ZmVtZXJnZW5vZGUgLz4KICAgICAgICAgICAgPGZlbWVyZ2Vub2RlIGluPSJTb3VyY2VHcmFwaGljIiAvPgogICAgICAgICAgPC9mZW1lcmdlPgogICAgICAgIDwvZmlsdGVyPgogICAgICA8L2RlZnM+CiAgICAgIAogICAgICA8cmVjdCBmaWxsPSJ3aGl0ZSIgd2lkdGg9IjEwMDAwIiBoZWlnaHQ9IjEwMDAwIj48L3JlY3Q+CiAgICAgIDxnIGlkPSJyb290Ij48L2c+CiAgICA8L3N2Zz4KICAgIDx0Zi1ncmFwaC1taW5pbWFwIGlkPSJtaW5pbWFwIj48L3RmLWdyYXBoLW1pbmltYXA+CiAgICA8ZGl2IGlkPSJjb250ZXh0TWVudSIgY2xhc3M9ImNvbnRleHQtbWVudSI+PC9kaXY+CiAgPC90ZW1wbGF0ZT4KICA8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdGYtZ3JhcGgvdGYtZ3JhcGgtc2NlbmUuaHRtbC5qcwpQb2x5bWVyKHtpczoidGYtZ3JhcGgtc2NlbmUiLHByb3BlcnRpZXM6e3JlbmRlckhpZXJhcmNoeTpPYmplY3QsbmFtZTpTdHJpbmcsY29sb3JCeTpTdHJpbmcsdHJhY2VJbnB1dHM6Qm9vbGVhbixfaGFzUmVuZGVySGllcmFyY2h5QmVlbkZpdE9uY2U6Qm9vbGVhbixfaXNBdHRhY2hlZDpCb29sZWFuLF96b29tOk9iamVjdCxoaWdobGlnaHRlZE5vZGU6e3R5cGU6U3RyaW5nLG9ic2VydmVyOiJfaGlnaGxpZ2h0ZWROb2RlQ2hhbmdlZCJ9LHNlbGVjdGVkTm9kZTp7dHlwZTpTdHJpbmcsb2JzZXJ2ZXI6Il9zZWxlY3RlZE5vZGVDaGFuZ2VkIn0saGFuZGxlRWRnZVNlbGVjdGVkOk9iamVjdCxfem9vbWVkOnt0eXBlOkJvb2xlYW4sb2JzZXJ2ZXI6Il9vblpvb21DaGFuZ2VkIix2YWx1ZTohMX0sX3pvb21TdGFydENvb3Jkczp7dHlwZTpPYmplY3QsdmFsdWU6bnVsbH0sX3pvb21UcmFuc2Zvcm06e3R5cGU6T2JqZWN0LHZhbHVlOm51bGx9LF9tYXhab29tRGlzdGFuY2VGb3JDbGljazp7dHlwZTpOdW1iZXIsCnZhbHVlOjIwfSx0ZW1wbGF0ZUluZGV4OkZ1bmN0aW9uLG1pbmltYXA6T2JqZWN0LF9ub2RlR3JvdXBJbmRleDp7dHlwZTpPYmplY3QsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm57fX19LF9hbm5vdGF0aW9uR3JvdXBJbmRleDp7dHlwZTpPYmplY3QsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm57fX19LF9lZGdlR3JvdXBJbmRleDp7dHlwZTpPYmplY3QsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm57fX19LG1heE1ldGFub2RlTGFiZWxMZW5ndGhGb250U2l6ZTp7dHlwZTpOdW1iZXIsdmFsdWU6OX0sbWluTWV0YW5vZGVMYWJlbExlbmd0aEZvbnRTaXplOnt0eXBlOk51bWJlcix2YWx1ZTo2fSxtYXhNZXRhbm9kZUxhYmVsTGVuZ3RoTGFyZ2VGb250Ont0eXBlOk51bWJlcix2YWx1ZToxMX0sbWF4TWV0YW5vZGVMYWJlbExlbmd0aDp7dHlwZTpOdW1iZXIsdmFsdWU6MTh9LHByb2dyZXNzOk9iamVjdCxub2RlQ29udGV4dE1lbnVJdGVtczpBcnJheSxub2RlTmFtZXNUb0hlYWx0aFBpbGxzOk9iamVjdCwKaGVhbHRoUGlsbFN0ZXBJbmRleDpOdW1iZXJ9LG9ic2VydmVyczpbIl9jb2xvckJ5Q2hhbmdlZChjb2xvckJ5KSIsIl9yZW5kZXJIaWVyYXJjaHlDaGFuZ2VkKHJlbmRlckhpZXJhcmNoeSkiLCJfYW5pbWF0ZUFuZEZpdChfaXNBdHRhY2hlZCwgcmVuZGVySGllcmFyY2h5KSIsIl91cGRhdGVIZWFsdGhQaWxscyhub2RlTmFtZXNUb0hlYWx0aFBpbGxzLCBoZWFsdGhQaWxsU3RlcEluZGV4KSIsIl91cGRhdGVJbnB1dFRyYWNlKHRyYWNlSW5wdXRzLCBzZWxlY3RlZE5vZGUpIl0sZ2V0Tm9kZTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5yZW5kZXJIaWVyYXJjaHkuZ2V0UmVuZGVyTm9kZUJ5TmFtZShhKX0saXNOb2RlRXhwYW5kZWQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuZXhwYW5kZWR9LHNldE5vZGVFeHBhbmRlZDpmdW5jdGlvbigpe3RoaXMuX2J1aWxkKHRoaXMucmVuZGVySGllcmFyY2h5KTt0aGlzLl91cGRhdGVMYWJlbHMoIXRoaXMuX3pvb21lZCl9LHBhblRvTm9kZShhKXt0Zi5ncmFwaC5zY2VuZS5wYW5Ub05vZGUoYSwKdGhpcy4kLnN2Zyx0aGlzLiQucm9vdCx0aGlzLl96b29tKSYmKHRoaXMuX3pvb21lZD0hMCl9LGdldEdyYXBoU3ZnUm9vdCgpe3JldHVybiB0aGlzLiQuc3ZnfSxnZXRDb250ZXh0TWVudSgpe3JldHVybiB0aGlzLiQuY29udGV4dE1lbnV9LF9yZXNldFN0YXRlOmZ1bmN0aW9uKCl7dGhpcy5fbm9kZUdyb3VwSW5kZXg9e307dGhpcy5fYW5ub3RhdGlvbkdyb3VwSW5kZXg9e307dGhpcy5fZWRnZUdyb3VwSW5kZXg9e307dGhpcy5fdXBkYXRlTGFiZWxzKCExKTtkMy5zZWxlY3QodGhpcy4kLnN2Zykuc2VsZWN0KCIjcm9vdCIpLnNlbGVjdEFsbCgiKiIpLnJlbW92ZSgpO3RmLmdyYXBoLnNjZW5lLm5vZGUucmVtb3ZlR3JhZGllbnREZWZpbml0aW9ucyh0aGlzLiQuc3ZnKX0sX2J1aWxkOmZ1bmN0aW9uKGEpe3RoaXMudGVtcGxhdGVJbmRleD1hLmhpZXJhcmNoeS5nZXRUZW1wbGF0ZUluZGV4KCk7dGYuZ3JhcGgudXRpbC50aW1lKCJ0Zi1ncmFwaC1zY2VuZSAobGF5b3V0KToiLGZ1bmN0aW9uKCl7dGYuZ3JhcGgubGF5b3V0LmxheW91dFNjZW5lKGEucm9vdCwKdGhpcyl9LmJpbmQodGhpcykpO3RmLmdyYXBoLnV0aWwudGltZSgidGYtZ3JhcGgtc2NlbmUgKGJ1aWxkIHNjZW5lKToiLGZ1bmN0aW9uKCl7dGYuZ3JhcGguc2NlbmUuYnVpbGRHcm91cChkMy5zZWxlY3QodGhpcy4kLnJvb3QpLGEucm9vdCx0aGlzKTt0Zi5ncmFwaC5zY2VuZS5hZGRHcmFwaENsaWNrTGlzdGVuZXIodGhpcy4kLnN2Zyx0aGlzKTt0aGlzLl91cGRhdGVJbnB1dFRyYWNlKCl9LmJpbmQodGhpcykpO3NldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVIZWFsdGhQaWxscyh0aGlzLm5vZGVOYW1lc1RvSGVhbHRoUGlsbHMsdGhpcy5oZWFsdGhQaWxsU3RlcEluZGV4KTt0aGlzLm1pbmltYXAudXBkYXRlKCl9LmJpbmQodGhpcyksdGYuZ3JhcGgubGF5b3V0LlBBUkFNUy5hbmltYXRpb24uZHVyYXRpb24pfSxyZWFkeTpmdW5jdGlvbigpe3RoaXMuX3pvb209ZDMuem9vbSgpLm9uKCJlbmQiLGZ1bmN0aW9uKCl7dGhpcy5fem9vbVN0YXJ0Q29vcmRzJiYoTWF0aC5zcXJ0KE1hdGgucG93KHRoaXMuX3pvb21TdGFydENvb3Jkcy54LQp0aGlzLl96b29tVHJhbnNmb3JtLngsMikrTWF0aC5wb3codGhpcy5fem9vbVN0YXJ0Q29vcmRzLnktdGhpcy5fem9vbVRyYW5zZm9ybS55LDIpKTx0aGlzLl9tYXhab29tRGlzdGFuY2VGb3JDbGljaz90aGlzLl9maXJlRW5hYmxlQ2xpY2soKTpzZXRUaW1lb3V0KHRoaXMuX2ZpcmVFbmFibGVDbGljay5iaW5kKHRoaXMpLDUwKSk7dGhpcy5fem9vbVN0YXJ0Q29vcmRzPW51bGx9LmJpbmQodGhpcykpLm9uKCJ6b29tIixmdW5jdGlvbigpe3RoaXMuX3pvb21UcmFuc2Zvcm09ZDMuZXZlbnQudHJhbnNmb3JtO3RoaXMuX3pvb21TdGFydENvb3Jkc3x8KHRoaXMuX3pvb21TdGFydENvb3Jkcz10aGlzLl96b29tVHJhbnNmb3JtLHRoaXMuZmlyZSgiZGlzYWJsZS1jbGljayIpKTt0aGlzLl96b29tZWQ9ITA7ZDMuc2VsZWN0KHRoaXMuJC5yb290KS5hdHRyKCJ0cmFuc2Zvcm0iLGQzLmV2ZW50LnRyYW5zZm9ybSk7dGhpcy5taW5pbWFwLnpvb20oZDMuZXZlbnQudHJhbnNmb3JtKX0uYmluZCh0aGlzKSk7CmQzLnNlbGVjdCh0aGlzLiQuc3ZnKS5jYWxsKHRoaXMuX3pvb20pLm9uKCJkYmxjbGljay56b29tIixudWxsKTtkMy5zZWxlY3Qod2luZG93KS5vbigicmVzaXplIixmdW5jdGlvbigpe3RoaXMubWluaW1hcC56b29tKCl9LmJpbmQodGhpcykpO3RoaXMubWluaW1hcD10aGlzLiQubWluaW1hcC5pbml0KHRoaXMuJC5zdmcsdGhpcy4kLnJvb3QsdGhpcy5fem9vbSx0Zi5ncmFwaC5sYXlvdXQuUEFSQU1TLm1pbmltYXAuc2l6ZSx0Zi5ncmFwaC5sYXlvdXQuUEFSQU1TLnN1YnNjZW5lLm1ldGEubGFiZWxIZWlnaHQpfSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuc2V0KCJfaXNBdHRhY2hlZCIsITApfSxkZXRhY2hlZDpmdW5jdGlvbigpe3RoaXMuc2V0KCJfaXNBdHRhY2hlZCIsITEpfSxfcmVuZGVySGllcmFyY2h5Q2hhbmdlZDpmdW5jdGlvbihhKXt0aGlzLl9oYXNSZW5kZXJIaWVyYXJjaHlCZWVuRml0T25jZT0hMTt0aGlzLl9yZXNldFN0YXRlKCk7dGhpcy5fYnVpbGQoYSl9LF9hbmltYXRlQW5kRml0OmZ1bmN0aW9uKGEpeyF0aGlzLl9oYXNSZW5kZXJIaWVyYXJjaHlCZWVuRml0T25jZSYmCmEmJnNldFRpbWVvdXQodGhpcy5maXQuYmluZCh0aGlzKSx0Zi5ncmFwaC5sYXlvdXQuUEFSQU1TLmFuaW1hdGlvbi5kdXJhdGlvbil9LF91cGRhdGVMYWJlbHM6ZnVuY3Rpb24oYSl7dmFyIGM9dGhpcy4kJCgiLnRpdGxlIiksZD1jLnN0eWxlLGY9dGhpcy4kJCgiLmF1eFRpdGxlIiksZz1mLnN0eWxlLGw9dGhpcy4kJCgiLmZ1bmN0aW9uTGlicmFyeVRpdGxlIikuc3R5bGU7Y29uc3Qgaz1kMy5zZWxlY3QodGhpcy4kLnN2Zyk7dmFyIG09ay5zZWxlY3QoIi4iK3RmLmdyYXBoLnNjZW5lLkNsYXNzLlNjZW5lLkdST1VQKyJceDNlLiIrdGYuZ3JhcGguc2NlbmUuQ2xhc3MuU2NlbmUuQ09SRSkubm9kZSgpO2lmKGEmJm0mJnRoaXMucHJvZ3Jlc3MmJjEwMD09PXRoaXMucHJvZ3Jlc3MudmFsdWUpe2E9ay5zZWxlY3QoIi4iK3RmLmdyYXBoLnNjZW5lLkNsYXNzLlNjZW5lLkdST1VQKyJceDNlLiIrdGYuZ3JhcGguc2NlbmUuQ2xhc3MuU2NlbmUuSU5FWFRSQUNUKS5ub2RlKCl8fGsuc2VsZWN0KCIuIisKdGYuZ3JhcGguc2NlbmUuQ2xhc3MuU2NlbmUuR1JPVVArIlx4M2UuIit0Zi5ncmFwaC5zY2VuZS5DbGFzcy5TY2VuZS5PVVRFWFRSQUNUKS5ub2RlKCk7dmFyIHA9bS5nZXRDVE0oKS5lO209YT9hLmdldENUTSgpLmU6bnVsbDtkLmRpc3BsYXk9ImlubGluZSI7ZC5sZWZ0PXArInB4IjtudWxsIT09bSYmbSE9PXA/KGcuZGlzcGxheT0iaW5saW5lIixtPU1hdGgubWF4KHArYy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCxtKSxnLmxlZnQ9bSsicHgiKTpnLmRpc3BsYXk9Im5vbmUiO2M9KGM9ay5zZWxlY3QoIi4iK3RmLmdyYXBoLnNjZW5lLkNsYXNzLlNjZW5lLkdST1VQKyJceDNlLiIrdGYuZ3JhcGguc2NlbmUuQ2xhc3MuU2NlbmUuRlVOQ1RJT05fTElCUkFSWSkubm9kZSgpKT9jLmdldENUTSgpLmU6bnVsbDtudWxsIT09YyYmYyE9PW0/KGwuZGlzcGxheT0iaW5saW5lIixjPU1hdGgubWF4KG0rZi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCxjKSxsLmxlZnQ9YysicHgiKToKbC5kaXNwbGF5PSJub25lIn1lbHNlIGQuZGlzcGxheT0ibm9uZSIsZy5kaXNwbGF5PSJub25lIixsLmRpc3BsYXk9Im5vbmUifSxfY29sb3JCeUNoYW5nZWQ6ZnVuY3Rpb24oKXtudWxsIT10aGlzLnJlbmRlckhpZXJhcmNoeSYmKF8uZWFjaCh0aGlzLl9ub2RlR3JvdXBJbmRleCwoYSxjKT0+e3RoaXMuX3VwZGF0ZU5vZGVTdGF0ZShjKX0pLHRoaXMubWluaW1hcC51cGRhdGUoKSl9LGZpdDpmdW5jdGlvbigpe3RoaXMuX2hhc1JlbmRlckhpZXJhcmNoeUJlZW5GaXRPbmNlPSEwO3RmLmdyYXBoLnNjZW5lLmZpdCh0aGlzLiQuc3ZnLHRoaXMuJC5yb290LHRoaXMuX3pvb20sZnVuY3Rpb24oKXt0aGlzLl96b29tZWQ9ITF9LmJpbmQodGhpcykpfSxpc05vZGVTZWxlY3RlZDpmdW5jdGlvbihhKXtyZXR1cm4gYT09PXRoaXMuc2VsZWN0ZWROb2RlfSxpc05vZGVIaWdobGlnaHRlZDpmdW5jdGlvbihhKXtyZXR1cm4gYT09PXRoaXMuaGlnaGxpZ2h0ZWROb2RlfSxhZGRBbm5vdGF0aW9uR3JvdXA6ZnVuY3Rpb24oYSwKYyxkKXthPWEubm9kZS5uYW1lO3RoaXMuX2Fubm90YXRpb25Hcm91cEluZGV4W2FdPXRoaXMuX2Fubm90YXRpb25Hcm91cEluZGV4W2FdfHx7fTt0aGlzLl9hbm5vdGF0aW9uR3JvdXBJbmRleFthXVtjLm5vZGUubmFtZV09ZH0sZ2V0QW5ub3RhdGlvbkdyb3Vwc0luZGV4OmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLl9hbm5vdGF0aW9uR3JvdXBJbmRleFthXX0scmVtb3ZlQW5ub3RhdGlvbkdyb3VwOmZ1bmN0aW9uKGEsYyl7ZGVsZXRlIHRoaXMuX2Fubm90YXRpb25Hcm91cEluZGV4W2Eubm9kZS5uYW1lXVtjLm5vZGUubmFtZV19LGFkZE5vZGVHcm91cDpmdW5jdGlvbihhLGMpe3RoaXMuX25vZGVHcm91cEluZGV4W2FdPWN9LGdldE5vZGVHcm91cDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5fbm9kZUdyb3VwSW5kZXhbYV19LHJlbW92ZU5vZGVHcm91cDpmdW5jdGlvbihhKXtkZWxldGUgdGhpcy5fbm9kZUdyb3VwSW5kZXhbYV19LGFkZEVkZ2VHcm91cDpmdW5jdGlvbihhLGMpe3RoaXMuX2VkZ2VHcm91cEluZGV4W2FdPQpjfSxnZXRFZGdlR3JvdXA6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuX2VkZ2VHcm91cEluZGV4W2FdfSxfdXBkYXRlSGVhbHRoUGlsbHM6ZnVuY3Rpb24oYSxjKXt0Zi5ncmFwaC5zY2VuZS5hZGRIZWFsdGhQaWxscyh0aGlzLiQuc3ZnLGEsYyl9LF91cGRhdGVOb2RlU3RhdGU6ZnVuY3Rpb24oYSl7dmFyIGM9dGhpcy5nZXROb2RlKGEpLGQ9dGhpcy5nZXROb2RlR3JvdXAoYSk7ZCYmdGYuZ3JhcGguc2NlbmUubm9kZS5zdHlsaXplKGQsYyx0aGlzKTtjLm5vZGUudHlwZT09PXRmLmdyYXBoLk5vZGVUeXBlLk1FVEEmJmMubm9kZS5hc3NvY2lhdGVkRnVuY3Rpb24mJiFjLmlzTGlicmFyeUZ1bmN0aW9uJiYoZD1kMy5zZWxlY3QoIi4iK3RmLmdyYXBoLnNjZW5lLkNsYXNzLlNjZW5lLkdST1VQKyJceDNlLiIrdGYuZ3JhcGguc2NlbmUuQ2xhc3MuU2NlbmUuRlVOQ1RJT05fTElCUkFSWSsnIGdbZGF0YS1uYW1lXHgzZCInKyh0Zi5ncmFwaC5GVU5DVElPTl9MSUJSQVJZX05PREVfUFJFRklYKwpjLm5vZGUuYXNzb2NpYXRlZEZ1bmN0aW9uKSsnIl0nKSx0Zi5ncmFwaC5zY2VuZS5ub2RlLnN0eWxpemUoZCxjLHRoaXMpKTtfLmVhY2godGhpcy5nZXRBbm5vdGF0aW9uR3JvdXBzSW5kZXgoYSksZj0+e3RmLmdyYXBoLnNjZW5lLm5vZGUuc3R5bGl6ZShmLGMsdGhpcyx0Zi5ncmFwaC5zY2VuZS5DbGFzcy5Bbm5vdGF0aW9uLk5PREUpfSl9LF9zZWxlY3RlZE5vZGVDaGFuZ2VkOmZ1bmN0aW9uKGEsYyl7aWYoYSE9PWMmJihjJiZ0aGlzLl91cGRhdGVOb2RlU3RhdGUoYyksYSkpe3RoaXMubWluaW1hcC51cGRhdGUoKTtjPXRoaXMucmVuZGVySGllcmFyY2h5LmhpZXJhcmNoeS5ub2RlKGEpO2Zvcih2YXIgZD1bXTtudWxsIT1jLnBhcmVudE5vZGUmJmMucGFyZW50Tm9kZS5uYW1lIT10Zi5ncmFwaC5ST09UX05BTUU7KWM9Yy5wYXJlbnROb2RlLGQucHVzaChjLm5hbWUpO3ZhciBmO18uZm9yRWFjaFJpZ2h0KGQsZz0+e3RoaXMucmVuZGVySGllcmFyY2h5LmJ1aWxkU3ViaGllcmFyY2h5KGcpOwpnPXRoaXMucmVuZGVySGllcmFyY2h5LmdldFJlbmRlck5vZGVCeU5hbWUoZyk7Zy5ub2RlLmlzR3JvdXBOb2RlJiYhZy5leHBhbmRlZCYmKGcuZXhwYW5kZWQ9ITAsZnx8KGY9ZykpfSk7ZiYmKHRoaXMuc2V0Tm9kZUV4cGFuZGVkKGYpLHRoaXMuX3pvb21lZD0hMCk7YSYmdGhpcy5fdXBkYXRlTm9kZVN0YXRlKGEpO3NldFRpbWVvdXQoKCk9Pnt0aGlzLnBhblRvTm9kZShhKX0sdGYuZ3JhcGgubGF5b3V0LlBBUkFNUy5hbmltYXRpb24uZHVyYXRpb24pfX0sX2hpZ2hsaWdodGVkTm9kZUNoYW5nZWQ6ZnVuY3Rpb24oYSxjKXthIT09YyYmKGEmJnRoaXMuX3VwZGF0ZU5vZGVTdGF0ZShhKSxjJiZ0aGlzLl91cGRhdGVOb2RlU3RhdGUoYykpfSxfb25ab29tQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMuX3VwZGF0ZUxhYmVscyghdGhpcy5fem9vbWVkKX0sX2ZpcmVFbmFibGVDbGljazpmdW5jdGlvbigpe3RoaXMuZmlyZSgiZW5hYmxlLWNsaWNrIil9LF91cGRhdGVJbnB1dFRyYWNlOmZ1bmN0aW9uKCl7dGYuZ3JhcGguc2NlbmUubm9kZS51cGRhdGVJbnB1dFRyYWNlKHRoaXMuZ2V0R3JhcGhTdmdSb290KCksCnRoaXMucmVuZGVySGllcmFyY2h5LHRoaXMuc2VsZWN0ZWROb2RlLHRoaXMudHJhY2VJbnB1dHMpfX0pOwo8L3NjcmlwdD4KPC9kb20tbW9kdWxlPgoKCjxkb20tbW9kdWxlIGlkPSJ0Zi1ncmFwaCI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICAuY29udGFpbmVyIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgYmFja2dyb3VuZDogd2hpdGU7CiAgICAgICAgYm94LXNoYWRvdzogMCAxcHggNXB4IHJnYmEoMCwgMCwgMCwgMC4yKTsKICAgICAgfQoKICAgICAgLnZlcnRpY2FsIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LXZlcnRpY2FsOwogICAgICB9CgogICAgICAuYXV0byB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWZsZXgtYXV0bzsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtdmVydGljYWw7CiAgICAgIH0KCiAgICAgIGgyIHsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgIH0KCiAgICAgIHBhcGVyLWJ1dHRvbiB7CiAgICAgICAgdGV4dC10cmFuc2Zvcm06IG5vbmU7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8ZGl2IGNsYXNzPSJjb250YWluZXIiPgogICAgICA8ZGl2IGNsYXNzPSJ2ZXJ0aWNhbCI+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW3RpdGxlXV0iPgogICAgICAgICAgPGgyPltbdGl0bGVdXTwvaDI+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8dGYtZ3JhcGgtc2NlbmUgaWQ9InNjZW5lIiBjbGFzcz0iYXV0byIgcmVuZGVyLWhpZXJhcmNoeT0iW1tyZW5kZXJIaWVyYXJjaHldXSIgaGlnaGxpZ2h0ZWQtbm9kZT0iW1tfZ2V0VmlzaWJsZShoaWdobGlnaHRlZE5vZGUpXV0iIHNlbGVjdGVkLW5vZGU9Int7c2VsZWN0ZWROb2RlfX0iIHNlbGVjdGVkLWVkZ2U9Int7c2VsZWN0ZWRFZGdlfX0iIGNvbG9yLWJ5PSJbW2NvbG9yQnldXSIgcHJvZ3Jlc3M9IltbcHJvZ3Jlc3NdXSIgbm9kZS1jb250ZXh0LW1lbnUtaXRlbXM9Iltbbm9kZUNvbnRleHRNZW51SXRlbXNdXSIgbm9kZS1uYW1lcy10by1oZWFsdGgtcGlsbHM9Iltbbm9kZU5hbWVzVG9IZWFsdGhQaWxsc11dIiBoZWFsdGgtcGlsbC1zdGVwLWluZGV4PSJ7e2hlYWx0aFBpbGxTdGVwSW5kZXh9fSIgaGFuZGxlLWVkZ2Utc2VsZWN0ZWQ9IltbaGFuZGxlRWRnZVNlbGVjdGVkXV0iIHRyYWNlLWlucHV0cz0iW1t0cmFjZUlucHV0c11dIj48L3RmLWdyYXBoLXNjZW5lPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT4KCjxzY3JpcHQ+Ly9+fldFQlBBVEh+fi90Zi1ncmFwaC90Zi1ncmFwaC5odG1sLmpzClBvbHltZXIoe2lzOiJ0Zi1ncmFwaCIscHJvcGVydGllczp7Z3JhcGhIaWVyYXJjaHk6e3R5cGU6T2JqZWN0LG5vdGlmeTohMCxvYnNlcnZlcjoiX2dyYXBoQ2hhbmdlZCJ9LGJhc2ljR3JhcGg6T2JqZWN0LHN0YXRzOk9iamVjdCxkZXZpY2VzRm9yU3RhdHM6T2JqZWN0LGhpZXJhcmNoeVBhcmFtczpPYmplY3QscHJvZ3Jlc3M6e3R5cGU6T2JqZWN0LG5vdGlmeTohMH0sdGl0bGU6U3RyaW5nLHNlbGVjdGVkTm9kZTp7dHlwZTpTdHJpbmcsbm90aWZ5OiEwfSxzZWxlY3RlZEVkZ2U6e3R5cGU6T2JqZWN0LG5vdGlmeTohMH0sX2xhc3RTZWxlY3RlZEVkZ2VHcm91cDpPYmplY3QsaGlnaGxpZ2h0ZWROb2RlOnt0eXBlOlN0cmluZyxub3RpZnk6ITB9LGNvbG9yQnk6U3RyaW5nLGNvbG9yQnlQYXJhbXM6e3R5cGU6T2JqZWN0LG5vdGlmeTohMCxyZWFkT25seTohMH0scmVuZGVySGllcmFyY2h5Ont0eXBlOk9iamVjdCxyZWFkT25seTohMCxub3RpZnk6ITB9LHRyYWNlSW5wdXRzOkJvb2xlYW4sCm5vZGVDb250ZXh0TWVudUl0ZW1zOkFycmF5LF9yZW5kZXJEZXB0aDp7dHlwZTpOdW1iZXIsdmFsdWU6MX0sX2FsbG93R3JhcGhTZWxlY3Q6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMH0sbm9kZU5hbWVzVG9IZWFsdGhQaWxsczpPYmplY3QsaGVhbHRoUGlsbFN0ZXBJbmRleDpOdW1iZXIsZWRnZVdpZHRoRnVuY3Rpb246e3R5cGU6T2JqZWN0LHZhbHVlOiIifSxoYW5kbGVOb2RlU2VsZWN0ZWQ6e3R5cGU6T2JqZWN0LHZhbHVlOiIifSxlZGdlTGFiZWxGdW5jdGlvbjp7dHlwZTpPYmplY3QsdmFsdWU6IiJ9LGhhbmRsZUVkZ2VTZWxlY3RlZDp7dHlwZTpPYmplY3QsdmFsdWU6IiJ9fSxvYnNlcnZlcnM6WyJfc3RhdHNDaGFuZ2VkKHN0YXRzLCBkZXZpY2VzRm9yU3RhdHMpIiwiX2J1aWxkTmV3UmVuZGVySGllcmFyY2h5KGdyYXBoSGllcmFyY2h5LCBlZGdlV2lkdGhGdW5jdGlvbiwgaGFuZGxlTm9kZVNlbGVjdGVkLCBlZGdlTGFiZWxGdW5jdGlvbiwgaGFuZGxlRWRnZVNlbGVjdGVkKSIsIl9zZWxlY3RlZE5vZGVDaGFuZ2VkKHNlbGVjdGVkTm9kZSkiLAoiX3NlbGVjdGVkRWRnZUNoYW5nZWQoc2VsZWN0ZWRFZGdlKSJdLHBhblRvTm9kZShhKXt0aGlzLiQkKCJ0Zi1ncmFwaC1zY2VuZSIpLnBhblRvTm9kZShhKX0sX2J1aWxkTmV3UmVuZGVySGllcmFyY2h5KGEpe2EmJnRoaXMuX2J1aWxkUmVuZGVySGllcmFyY2h5KGEpfSxfc3RhdHNDaGFuZ2VkOmZ1bmN0aW9uKGEsYyl7dGhpcy5ncmFwaEhpZXJhcmNoeSYmKGEmJmMmJih0Zi5ncmFwaC5qb2luU3RhdHNJbmZvV2l0aEdyYXBoKHRoaXMuYmFzaWNHcmFwaCxhLGMpLHRmLmdyYXBoLmhpZXJhcmNoeS5qb2luQW5kQWdncmVnYXRlU3RhdHModGhpcy5ncmFwaEhpZXJhcmNoeSkpLHRoaXMuX2J1aWxkUmVuZGVySGllcmFyY2h5KHRoaXMuZ3JhcGhIaWVyYXJjaHkpKX0sX2J1aWxkUmVuZGVySGllcmFyY2h5OmZ1bmN0aW9uKGEpe3RmLmdyYXBoLnV0aWwudGltZSgibmV3IHRmLmdyYXBoLnJlbmRlci5IaWVyYXJjaHkiLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gYyhmKXtyZXR1cm57bWluVmFsdWU6Zi5kb21haW4oKVswXSwKbWF4VmFsdWU6Zi5kb21haW4oKVsxXSxzdGFydENvbG9yOmYucmFuZ2UoKVswXSxlbmRDb2xvcjpmLnJhbmdlKClbMV19fWlmKGEucm9vdC50eXBlPT09dGYuZ3JhcGguTm9kZVR5cGUuTUVUQSl7dmFyIGQ9bmV3IHRmLmdyYXBoLnJlbmRlci5SZW5kZXJHcmFwaEluZm8oYSwhIXRoaXMuc3RhdHMpO2QuZWRnZUxhYmVsRnVuY3Rpb249dGhpcy5lZGdlTGFiZWxGdW5jdGlvbjtkLmVkZ2VXaWR0aEZ1bmN0aW9uPXRoaXMuZWRnZVdpZHRoRnVuY3Rpb247dGhpcy5fc2V0Q29sb3JCeVBhcmFtcyh7Y29tcHV0ZV90aW1lOmMoZC5jb21wdXRlVGltZVNjYWxlKSxtZW1vcnk6YyhkLm1lbW9yeVVzYWdlU2NhbGUpLGRldmljZTpfLm1hcChkLmRldmljZUNvbG9yTWFwLmRvbWFpbigpLGZ1bmN0aW9uKGYpe3JldHVybntkZXZpY2U6Zixjb2xvcjpkLmRldmljZUNvbG9yTWFwKGYpfX0pLHhsYV9jbHVzdGVyOl8ubWFwKGQueGxhQ2x1c3RlckNvbG9yTWFwLmRvbWFpbigpLGZ1bmN0aW9uKGYpe3JldHVybnt4bGFfY2x1c3RlcjpmLApjb2xvcjpkLnhsYUNsdXN0ZXJDb2xvck1hcChmKX19KX0pO3RoaXMuX3NldFJlbmRlckhpZXJhcmNoeShkKTt0aGlzLmFzeW5jKGZ1bmN0aW9uKCl7dGhpcy5maXJlKCJyZW5kZXJlZCIpfSl9fS5iaW5kKHRoaXMpKX0sX2dldFZpc2libGU6ZnVuY3Rpb24oYSl7cmV0dXJuIGE/dGhpcy5yZW5kZXJIaWVyYXJjaHkuZ2V0TmVhcmVzdFZpc2libGVBbmNlc3RvcihhKTphfSxsaXN0ZW5lcnM6eyJncmFwaC1zZWxlY3QiOiJfZ3JhcGhTZWxlY3RlZCIsImRpc2FibGUtY2xpY2siOiJfZGlzYWJsZUNsaWNrIiwiZW5hYmxlLWNsaWNrIjoiX2VuYWJsZUNsaWNrIiwibm9kZS10b2dnbGUtZXhwYW5kIjoiX25vZGVUb2dnbGVFeHBhbmQiLCJub2RlLXNlbGVjdCI6Il9ub2RlU2VsZWN0ZWQiLCJub2RlLWhpZ2hsaWdodCI6Il9ub2RlSGlnaGxpZ2h0ZWQiLCJub2RlLXVuaGlnaGxpZ2h0IjoiX25vZGVVbmhpZ2hsaWdodGVkIiwibm9kZS10b2dnbGUtZXh0cmFjdCI6Il9ub2RlVG9nZ2xlRXh0cmFjdCIsCiJub2RlLXRvZ2dsZS1zZXJpZXNncm91cCI6Il9ub2RlVG9nZ2xlU2VyaWVzR3JvdXAiLCJlZGdlLXNlbGVjdCI6Il9lZGdlU2VsZWN0ZWQiLCJhbm5vdGF0aW9uLXNlbGVjdCI6Il9ub2RlU2VsZWN0ZWQiLCJhbm5vdGF0aW9uLWhpZ2hsaWdodCI6Il9ub2RlSGlnaGxpZ2h0ZWQiLCJhbm5vdGF0aW9uLXVuaGlnaGxpZ2h0IjoiX25vZGVVbmhpZ2hsaWdodGVkIn0sZml0OmZ1bmN0aW9uKCl7dGhpcy4kLnNjZW5lLmZpdCgpfSxfZ3JhcGhDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5maXJlKCJncmFwaC1zZWxlY3QiKX0sX2dyYXBoU2VsZWN0ZWQ6ZnVuY3Rpb24oKXt0aGlzLl9hbGxvd0dyYXBoU2VsZWN0JiYodGhpcy5zZXQoInNlbGVjdGVkTm9kZSIsbnVsbCksdGhpcy5zZXQoInNlbGVjdGVkRWRnZSIsbnVsbCkpO3RoaXMuX2FsbG93R3JhcGhTZWxlY3Q9ITB9LF9kaXNhYmxlQ2xpY2s6ZnVuY3Rpb24oKXt0aGlzLl9hbGxvd0dyYXBoU2VsZWN0PSExfSxfZW5hYmxlQ2xpY2s6ZnVuY3Rpb24oKXt0aGlzLl9hbGxvd0dyYXBoU2VsZWN0PQohMH0sX3NlbGVjdGVkTm9kZUNoYW5nZWQoYSl7dGhpcy5oYW5kbGVOb2RlU2VsZWN0ZWQmJnRoaXMuaGFuZGxlTm9kZVNlbGVjdGVkKGEpfSxfc2VsZWN0ZWRFZGdlQ2hhbmdlZChhKXt0aGlzLl9kZXNlbGVjdFByZXZpb3VzRWRnZSgpO2EmJih0aGlzLl9sYXN0U2VsZWN0ZWRFZGdlR3JvdXAuY2xhc3NlZCh0Zi5ncmFwaC5zY2VuZS5DbGFzcy5FZGdlLlNFTEVDVEVELCEwKSx0aGlzLl91cGRhdGVNYXJrZXJPZlNlbGVjdGVkRWRnZShhKSk7dGhpcy5oYW5kbGVFZGdlU2VsZWN0ZWQmJnRoaXMuaGFuZGxlRWRnZVNlbGVjdGVkKGEpfSxfbm9kZVNlbGVjdGVkOmZ1bmN0aW9uKGEpe3RoaXMuX2FsbG93R3JhcGhTZWxlY3QmJnRoaXMuc2V0KCJzZWxlY3RlZE5vZGUiLGEuZGV0YWlsLm5hbWUpO3RoaXMuX2FsbG93R3JhcGhTZWxlY3Q9ITB9LF9lZGdlU2VsZWN0ZWQoYSl7dGhpcy5fYWxsb3dHcmFwaFNlbGVjdCYmKHRoaXMuc2V0KCJfbGFzdFNlbGVjdGVkRWRnZUdyb3VwIixhLmRldGFpbC5lZGdlR3JvdXApLAp0aGlzLnNldCgic2VsZWN0ZWRFZGdlIixhLmRldGFpbC5lZGdlRGF0YSkpO3RoaXMuX2FsbG93R3JhcGhTZWxlY3Q9ITB9LF9ub2RlSGlnaGxpZ2h0ZWQ6ZnVuY3Rpb24oYSl7dGhpcy5zZXQoImhpZ2hsaWdodGVkTm9kZSIsYS5kZXRhaWwubmFtZSl9LF9ub2RlVW5oaWdobGlnaHRlZDpmdW5jdGlvbigpe3RoaXMuc2V0KCJoaWdobGlnaHRlZE5vZGUiLG51bGwpfSxfbm9kZVRvZ2dsZUV4cGFuZDpmdW5jdGlvbihhKXt0aGlzLl9ub2RlU2VsZWN0ZWQoYSk7YT1hLmRldGFpbC5uYW1lO3ZhciBjPXRoaXMucmVuZGVySGllcmFyY2h5LmdldFJlbmRlck5vZGVCeU5hbWUoYSk7Yy5ub2RlLnR5cGUhPT10Zi5ncmFwaC5Ob2RlVHlwZS5PUCYmKHRoaXMucmVuZGVySGllcmFyY2h5LmJ1aWxkU3ViaGllcmFyY2h5KGEpLGMuZXhwYW5kZWQ9IWMuZXhwYW5kZWQsdGhpcy5hc3luYyhmdW5jdGlvbigpe3RoaXMuJC5zY2VuZS5zZXROb2RlRXhwYW5kZWQoYyl9LDc1KSl9LF9ub2RlVG9nZ2xlRXh0cmFjdDpmdW5jdGlvbihhKXt0aGlzLm5vZGVUb2dnbGVFeHRyYWN0KGEuZGV0YWlsLm5hbWUpfSwKbm9kZVRvZ2dsZUV4dHJhY3Q6ZnVuY3Rpb24oYSl7YT10aGlzLnJlbmRlckhpZXJhcmNoeS5nZXRSZW5kZXJOb2RlQnlOYW1lKGEpO2Eubm9kZS5pbmNsdWRlPWEubm9kZS5pbmNsdWRlPT10Zi5ncmFwaC5JbmNsdXNpb25UeXBlLklOQ0xVREU/dGYuZ3JhcGguSW5jbHVzaW9uVHlwZS5FWENMVURFOmEubm9kZS5pbmNsdWRlPT10Zi5ncmFwaC5JbmNsdXNpb25UeXBlLkVYQ0xVREU/dGYuZ3JhcGguSW5jbHVzaW9uVHlwZS5JTkNMVURFOnRoaXMucmVuZGVySGllcmFyY2h5LmlzTm9kZUF1eGlsaWFyeShhKT90Zi5ncmFwaC5JbmNsdXNpb25UeXBlLklOQ0xVREU6dGYuZ3JhcGguSW5jbHVzaW9uVHlwZS5FWENMVURFO3RoaXMuX2J1aWxkUmVuZGVySGllcmFyY2h5KHRoaXMuZ3JhcGhIaWVyYXJjaHkpfSxfbm9kZVRvZ2dsZVNlcmllc0dyb3VwOmZ1bmN0aW9uKGEpe3RoaXMubm9kZVRvZ2dsZVNlcmllc0dyb3VwKGEuZGV0YWlsLm5hbWUpfSxub2RlVG9nZ2xlU2VyaWVzR3JvdXA6ZnVuY3Rpb24oYSl7dGYuZ3JhcGgudG9nZ2xlTm9kZVNlcmllc0dyb3VwKHRoaXMuaGllcmFyY2h5UGFyYW1zLnNlcmllc01hcCwKYSk7dGhpcy5zZXQoInByb2dyZXNzIix7dmFsdWU6MCxtc2c6IiJ9KTt0Zi5ncmFwaC5oaWVyYXJjaHkuYnVpbGQodGhpcy5iYXNpY0dyYXBoLHRoaXMuaGllcmFyY2h5UGFyYW1zLHRmLmdyYXBoLnV0aWwuZ2V0U3VidGFza1RyYWNrZXIodGYuZ3JhcGgudXRpbC5nZXRUcmFja2VyKHRoaXMpLDEwMCwiTmFtZXNwYWNlIGhpZXJhcmNoeSIpKS50aGVuKGZ1bmN0aW9uKGMpe3RoaXMuc2V0KCJncmFwaEhpZXJhcmNoeSIsYyk7dGhpcy5fYnVpbGRSZW5kZXJIaWVyYXJjaHkodGhpcy5ncmFwaEhpZXJhcmNoeSl9LmJpbmQodGhpcykpfSxfZGVzZWxlY3RQcmV2aW91c0VkZ2UoKXtkMy5zZWxlY3QoIi4iK3RmLmdyYXBoLnNjZW5lLkNsYXNzLkVkZ2UuU0VMRUNURUQpLmNsYXNzZWQodGYuZ3JhcGguc2NlbmUuQ2xhc3MuRWRnZS5TRUxFQ1RFRCwhMSkuZWFjaChhPT57aWYoYS5sYWJlbCl7Y29uc3QgYz1kMy5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJwYXRoLmVkZ2VsaW5lIik7YS5sYWJlbC5zdGFydE1hcmtlcklkJiYKYy5zdHlsZSgibWFya2VyLXN0YXJ0IixgdXJsKCMke2EubGFiZWwuc3RhcnRNYXJrZXJJZH0pYCk7YS5sYWJlbC5lbmRNYXJrZXJJZCYmYy5zdHlsZSgibWFya2VyLWVuZCIsYHVybCgjJHthLmxhYmVsLmVuZE1hcmtlcklkfSlgKX19KX0sX3VwZGF0ZU1hcmtlck9mU2VsZWN0ZWRFZGdlKGEpe2lmKGEubGFiZWwpe3ZhciBjPWEubGFiZWwuc3RhcnRNYXJrZXJJZHx8YS5sYWJlbC5lbmRNYXJrZXJJZDtpZihjKXtjb25zdCBkPWMucmVwbGFjZSgiZGF0YWZsb3ctIiwic2VsZWN0ZWQtIik7bGV0IGY9dGhpcy4kJCgiIyIrZCk7Znx8KGM9dGhpcy4kLnNjZW5lLnF1ZXJ5U2VsZWN0b3IoIiMiK2MpLGY9Yy5jbG9uZU5vZGUoITApLGYuc2V0QXR0cmlidXRlKCJpZCIsZCksZi5jbGFzc0xpc3QuYWRkKCJzZWxlY3RlZC1hcnJvd2hlYWQiKSxjLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQoZikpO2E9YS5sYWJlbC5zdGFydE1hcmtlcklkPyJtYXJrZXItc3RhcnQiOiJtYXJrZXItZW5kIjt0aGlzLl9sYXN0U2VsZWN0ZWRFZGdlR3JvdXAuc2VsZWN0QWxsKCJwYXRoLmVkZ2VsaW5lIikuc3R5bGUoYSwKYHVybCgjJHtkfSlgKX19fSxub3Q6ZnVuY3Rpb24oYSl7cmV0dXJuIWF9fSk7Cjwvc2NyaXB0PgoKCgoKPGRvbS1tb2R1bGUgaWQ9InRmLWdyYXBoLWxvYWRlciI+IDwvZG9tLW1vZHVsZT4KCjxzY3JpcHQ+Ly9+fldFQlBBVEh+fi90Zi1ncmFwaC1sb2FkZXIvdGYtZ3JhcGgtbG9hZGVyLmpzCihmdW5jdGlvbihhKXsoZnVuY3Rpb24oYyl7KGZ1bmN0aW9uKCl7UG9seW1lcih7aXM6InRmLWdyYXBoLWxvYWRlciIscHJvcGVydGllczp7ZGF0YXNldHM6QXJyYXksc2VsZWN0ZWREYXRhOnt0eXBlOk51bWJlcix2YWx1ZTowfSxzZWxlY3RlZEZpbGU6T2JqZWN0LGNvbXBhdGliaWxpdHlQcm92aWRlcjp7dHlwZTpPYmplY3QsdmFsdWU6KCk9Pm5ldyBhLmdyYXBoLm9wLlRwdUNvbXBhdGliaWxpdHlQcm92aWRlcn0sb3ZlcnJpZGluZ0hpZXJhcmNoeVBhcmFtczp7dHlwZTpPYmplY3QsdmFsdWU6KCk9Pih7fSl9LHByb2dyZXNzOnt0eXBlOk9iamVjdCxub3RpZnk6ITB9LG91dEdyYXBoSGllcmFyY2h5Ont0eXBlOk9iamVjdCxyZWFkT25seTohMCxub3RpZnk6ITB9LG91dEdyYXBoOnt0eXBlOk9iamVjdCxyZWFkT25seTohMCxub3RpZnk6ITB9LG91dEhpZXJhcmNoeVBhcmFtczp7dHlwZTpPYmplY3QscmVhZE9ubHk6ITAsbm90aWZ5OiEwfX0sb2JzZXJ2ZXJzOlsiX2xvYWREYXRhKGRhdGFzZXRzLCBzZWxlY3RlZERhdGEsIG92ZXJyaWRpbmdIaWVyYXJjaHlQYXJhbXMsIGNvbXBhdGliaWxpdHlQcm92aWRlcikiLAoiX2xvYWRGaWxlKHNlbGVjdGVkRmlsZSwgb3ZlcnJpZGluZ0hpZXJhcmNoeVBhcmFtcywgY29tcGF0aWJpbGl0eVByb3ZpZGVyKSJdLF9sb2FkRGF0YSgpe3RoaXMuZGVib3VuY2UoImxvYWQiLCgpPT57Y29uc3QgZD10aGlzLmRhdGFzZXRzW3RoaXMuc2VsZWN0ZWREYXRhXTtkJiZ0aGlzLl9wYXJzZUFuZENvbnN0cnVjdEhpZXJhcmNoaWNhbEdyYXBoKGQucGF0aCl9KX0sX3BhcnNlQW5kQ29uc3RydWN0SGllcmFyY2hpY2FsR3JhcGgoZCxmKXtjb25zdCB7b3ZlcnJpZGluZ0hpZXJhcmNoeVBhcmFtczpnLGNvbXBhdGliaWxpdHlQcm92aWRlcjpsfT10aGlzO3RoaXMucHJvZ3Jlc3M9e3ZhbHVlOjAsbXNnOiIifTtjb25zdCBrPWEuZ3JhcGgudXRpbC5nZXRUcmFja2VyKHRoaXMpLG09T2JqZWN0LmFzc2lnbih7fSxhLmdyYXBoLmhpZXJhcmNoeS5EZWZhdWx0SGllcmFyY2h5UGFyYW1zLGcpO2EuZ3JhcGgubG9hZGVyLmZldGNoQW5kQ29uc3RydWN0SGllcmFyY2hpY2FsR3JhcGgoaywKZCxmLGwsbSkudGhlbigoe2dyYXBoOnAsZ3JhcGhIaWVyYXJjaHk6cX0pPT57dGhpcy5fc2V0T3V0SGllcmFyY2h5UGFyYW1zKG0pO3RoaXMuX3NldE91dEdyYXBoKHApO3RoaXMuX3NldE91dEdyYXBoSGllcmFyY2h5KHEpfSl9LF9sb2FkRmlsZShkKXtpZihkKXtkPWQudGFyZ2V0O3ZhciBmPWQuZmlsZXNbMF07ZiYmKGQudmFsdWU9IiIsdGhpcy5fcGFyc2VBbmRDb25zdHJ1Y3RIaWVyYXJjaGljYWxHcmFwaChudWxsLGYpKX19fSl9KShjLmxvYWRlcnx8KGMubG9hZGVyPXt9KSl9KShhLmdyYXBofHwoYS5ncmFwaD17fSkpfSkodGZ8fCh0Zj17fSkpOwo8L3NjcmlwdD4KCgoKCjxzY3JpcHQ+Ly9+fldFQlBBVEh+fi90Zi1kZWJ1Z2dlci1kYXNoYm9hcmQvaGVhbHRoLXBpbGxzLmpzCnZhciBpbTsKKGZ1bmN0aW9uKGEpe2Z1bmN0aW9uIGMoZyxsKXtpZihudWxsPT1nKXRocm93IEVycm9yKGBNaXNzaW5nIHJlZlZhbHVlIGZvciBjb25kaXRpb24gKCR7bH0pLmApO31mdW5jdGlvbiBkKGcpe3JldHVybiBudWxsPT1nfHwwPT1nLmxlbmd0aHx8MSE9PWdbMF19Y29uc3QgZj17SU5GX09SX05BTjp7ZGVzY3JpcHRpb246IkNvbnRhaW5zICsvLVx1MjIxZSBvciBOYU4iLHByZWRpY2F0ZTpnPT4wPGdbMl18fDA8Z1szXXx8MDxnWzddfSxJTkY6e2Rlc2NyaXB0aW9uOiJDb250YWlucyArLy1cdTIyMWUiLHByZWRpY2F0ZTpnPT4wPGdbM118fDA8Z1s3XX0sTkFOOntkZXNjcmlwdGlvbjoiQ29udGFpbnMgTmFOIixwcmVkaWNhdGU6Zz0+MDxnWzJdfSxNQVhfR1Q6e2Rlc2NyaXB0aW9uOiJNYXggXHgzZSIscHJlZGljYXRlOihnLGwpPT57YyhsLCJNQVhfR1QiKTtyZXR1cm4gZ1s5XT5sfX0sTUFYX0xUOntkZXNjcmlwdGlvbjoiTWF4IFx4M2MiLHByZWRpY2F0ZTooZyxsKT0+e2MobCwiTUFYX0xUIik7CnJldHVybiBnWzldPGx9fSxNSU5fR1Q6e2Rlc2NyaXB0aW9uOiJNaW4gXHgzZSIscHJlZGljYXRlOihnLGwpPT57YyhsLCJNSU5fR1QiKTtyZXR1cm4gZ1s4XT5sfX0sTUlOX0xUOntkZXNjcmlwdGlvbjoiTWluIFx4M2MiLHByZWRpY2F0ZTooZyxsKT0+e2MobCwiTUlOX0xUIik7cmV0dXJuIGdbOF08bH19LE1FQU5fR1Q6e2Rlc2NyaXB0aW9uOiJNZWFuIFx4M2UiLHByZWRpY2F0ZTooZyxsKT0+e2MobCwiTUVBTl9HVCIpO3JldHVybiBnWzEwXT5sfX0sTUVBTl9MVDp7ZGVzY3JpcHRpb246Ik1lYW4gXHgzYyIscHJlZGljYXRlOihnLGwpPT57YyhsLCJNRUFOX0xUIik7cmV0dXJuIGdbMTBdPGx9fSxSQU5HRV9HVDp7ZGVzY3JpcHRpb246Ik1heCAtIE1pbiBceDNlIixwcmVkaWNhdGU6KGcsbCk9PntjKGwsIlJBTkdFX0dUIik7cmV0dXJuIGdbOV0tZ1s4XT5sfX0sUkFOR0VfTFQ6e2Rlc2NyaXB0aW9uOiJNYXggLSBNaW4gXHgzYyIscHJlZGljYXRlOihnLGwpPT57YyhsLCJSQU5HRV9MVCIpOwpyZXR1cm4gZ1s5XS1nWzhdPGx9fSxTVERERVZfR1Q6e2Rlc2NyaXB0aW9uOiJTdGFuZGFyZCBkZXZpYXRpb24gXHgzZSIscHJlZGljYXRlOihnLGwpPT57YyhsLCJTVERERVZfR1QiKTtyZXR1cm4gTWF0aC5zcXJ0KGdbMTFdKT5sfX0sU1REREVWX0xUOntkZXNjcmlwdGlvbjoiU3RhbmRhcmQgZGV2aWF0aW9uIFx4M2MiLHByZWRpY2F0ZTooZyxsKT0+e2MobCwiU1REREVWX0xUIik7cmV0dXJuIE1hdGguc3FydChnWzExXSk8bH19fTthLnRlbnNvckNvbmRpdGlvbkRlc2NyaXB0aW9uMktleT1mdW5jdGlvbihnKXtmb3IoY29uc3QgbCBpbiBmKWlmKGYuaGFzT3duUHJvcGVydHkobCkmJmZbbF0uZGVzY3JpcHRpb249PT1nKXJldHVybiBsO3JldHVybiBudWxsfTthLmNoZWNrSGVhbHRoUGlsbEFnYWluc3RUZW5zb3JDb25kaXRpb25LZXk9ZnVuY3Rpb24oZyxsLGspe2lmKGQobCkpcmV0dXJuITE7Zz1mW2ddLnByZWRpY2F0ZTtyZXR1cm4gZyhsLGspfX0pKGltfHwoaW09e30pKTsKPC9zY3JpcHQ+CgoKCgoKCgoKPGRvbS1tb2R1bGUgaWQ9InRmLWRlYnVnZ2VyLWNvbnRpbnVlLWRpYWxvZyI+CiAgPHRlbXBsYXRlPgogICAgPHBhcGVyLWJ1dHRvbiByYWlzZWQgY2xhc3M9ImNvbnRpbnVlLWJ1dHRvbiIgb24tY2xpY2s9Il9jb250aW51ZUJ1dHRvbkNhbGxiYWNrIj4KICAgICAgPHNwYW4+W1tfY29udGludWVCdXR0b25UZXh0XV08L3NwYW4+CiAgICA8L3BhcGVyLWJ1dHRvbj4KICAgIDxwYXBlci1kaWFsb2cgd2l0aC1iYWNrZHJvcCBpZD0iY29udGludWVEaWFsb2ciPgogICAgICA8aDI+Q29udGludWUuLi48L2gyPgogICAgICA8ZGl2IGNsYXNzPSJjb250aW51ZS10by10eXBlIj4KICAgICAgICA8ZGl2IGNsYXNzPSJjb250aW51ZS10by10eXBlLW5hbWUiPgogICAgICAgICAgT3ZlciBTZXNzaW9uIFJ1bnM6CiAgICAgICAgPC9kaXY+CiAgICAgICAgPHBhcGVyLWlucHV0IGlkPSJjb250aW51ZU51bSIgY2xhc3M9ImlucHV0LWJveCIgbGFiZWw9Ik51bWJlciBvZiBTZXNzaW9uIFJ1bnMgKGluY2x1ZGluZyB0aGUgY3VycmVudCBvbmUpOiIgYWx3YXlzLWZsb2F0LWxhYmVsIHR5cGU9Im51bWJlciIgbWluPSIxIiBzdGVwPSIxIiB2YWx1ZT0ie3tjb250aW51ZU51bX19Ij48L3BhcGVyLWlucHV0PgogICAgICAgIDxwYXBlci1pY29uLWJ1dHRvbiBjbGFzcz0iZ28tYnV0dG9uIiBpY29uPSJhcnJvdy1mb3J3YXJkIiB0aXRsZT0iU2Vzc2lvbiBSdW5zIEdvIiBvbi10YXA9Il9zZXNzaW9uUnVuR29CdXR0b25DYWxsYmFjayI+CiAgICAgICAgPC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNvbnRpbnVlLXRvLXR5cGUiPgogICAgICAgIDxkaXYgY2xhc3M9ImNvbnRpbnVlLXRvLXR5cGUtbmFtZSI+CiAgICAgICAgICBUaWxsIENvbmRpdGlvbiBNZXQgYnkgV2F0Y2hlZCBUZW5zb3IKICAgICAgICA8L2Rpdj4KICAgICAgICA8cGFwZXItZHJvcGRvd24tbWVudSBpZD0idGVuc29yQ29uZGl0aW9uRHJvcGRvd24iIGNsYXNzPSJpbnB1dC1ib3giIG5vLWxhYmVsLWZsb2F0PSJ0cnVlIiBsYWJlbD0iVGVuc29yIENvbmRpdGlvbiIgc2VsZWN0ZWQtaXRlbS1sYWJlbD0ie3tfc2VsZWN0ZWRUZW5zb3JDb25kaXRpb259fSI+CiAgICAgICAgICAKICAgICAgICAgIDxwYXBlci1saXN0Ym94IGlkPSJ0ZW5zb3JDb25kaXRpb25NZW51IiBjbGFzcz0iZHJvcGRvd24tY29udGVudCIgc2xvdD0iZHJvcGRvd24tY29udGVudCI+CiAgICAgICAgICAgIDxwYXBlci1pdGVtIG5vLWxhYmVsLWZsb2F0PSJ0cnVlIj5Db250YWlucyArLy3iiJ4gb3IgTmFOPC9wYXBlci1pdGVtPgogICAgICAgICAgICA8cGFwZXItaXRlbSBuby1sYWJlbC1mbG9hdD0idHJ1ZSI+Q29udGFpbnMgKy8t4oiePC9wYXBlci1pdGVtPgogICAgICAgICAgICA8cGFwZXItaXRlbSBuby1sYWJlbC1mbG9hdD0idHJ1ZSI+Q29udGFpbnMgTmFOPC9wYXBlci1pdGVtPgogICAgICAgICAgICA8cGFwZXItaXRlbSBuby1sYWJlbC1mbG9hdD0idHJ1ZSI+TWF4ICZndDs8L3BhcGVyLWl0ZW0+CiAgICAgICAgICAgIDxwYXBlci1pdGVtIG5vLWxhYmVsLWZsb2F0PSJ0cnVlIj5NYXggJmx0OzwvcGFwZXItaXRlbT4KICAgICAgICAgICAgPHBhcGVyLWl0ZW0gbm8tbGFiZWwtZmxvYXQ9InRydWUiPk1pbiAmZ3Q7PC9wYXBlci1pdGVtPgogICAgICAgICAgICA8cGFwZXItaXRlbSBuby1sYWJlbC1mbG9hdD0idHJ1ZSI+TWluICZsdDs8L3BhcGVyLWl0ZW0+CiAgICAgICAgICAgIDxwYXBlci1pdGVtIG5vLWxhYmVsLWZsb2F0PSJ0cnVlIj5NYXggLSBNaW4gJmd0OzwvcGFwZXItaXRlbT4KICAgICAgICAgICAgPHBhcGVyLWl0ZW0gbm8tbGFiZWwtZmxvYXQ9InRydWUiPk1heCAtIE1pbiAmbHQ7PC9wYXBlci1pdGVtPgogICAgICAgICAgICA8cGFwZXItaXRlbSBuby1sYWJlbC1mbG9hdD0idHJ1ZSI+TWVhbiAmZ3Q7PC9wYXBlci1pdGVtPgogICAgICAgICAgICA8cGFwZXItaXRlbSBuby1sYWJlbC1mbG9hdD0idHJ1ZSI+TWVhbiAmbHQ7PC9wYXBlci1pdGVtPgogICAgICAgICAgICA8cGFwZXItaXRlbSBuby1sYWJlbC1mbG9hdD0idHJ1ZSI+U3RhbmRhcmQgZGV2aWF0aW9uICZndDs8L3BhcGVyLWl0ZW0+CiAgICAgICAgICAgIDxwYXBlci1pdGVtIG5vLWxhYmVsLWZsb2F0PSJ0cnVlIj5TdGFuZGFyZCBkZXZpYXRpb24gJmx0OzwvcGFwZXItaXRlbT4KICAgICAgICAgIDwvcGFwZXItbGlzdGJveD4KICAgICAgICA8L3BhcGVyLWRyb3Bkb3duLW1lbnU+CiAgICAgICAgPHBhcGVyLWljb24tYnV0dG9uIGNsYXNzPSJnby1idXR0b24iIGljb249ImFycm93LWZvcndhcmQiIHRpdGxlPSJUZW5zb3IgQ29uZGl0aW9uIEdvIiBvbi10YXA9Il90ZW5zb3JDb250aW51ZUdvQnV0dG9uQ2FsbGJhY2siPgogICAgICAgIDwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgICAgPHBhcGVyLWlucHV0IGlkPSJyZWYtdmFsdWUiIGNsYXNzPSJpbnB1dC1ib3giIGxhYmVsPSJSZWZlcmVuY2UgdmFsdWUgdG8gY29tcGFyZSB0byIgdHlwZT0ibnVtYmVyIiB2YWx1ZT0ie3tfdGVuc29yQ29uZGl0aW9uUmVmVmFsdWV9fSIgaGlkZGVuPSJbW19pc1JlZlZhbHVlSW5wdXRIaWRkZW5dXSI+CiAgICAgICAgPC9wYXBlci1pbnB1dD4KICAgICAgPC9kaXY+CiAgICA8L3BhcGVyLWRpYWxvZz4KICAgIDxzdHlsZSBpbmNsdWRlPSJkYXNoYm9hcmQtc3R5bGUiPjwvc3R5bGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IC5jb250aW51ZS10by10eXBlLW5hbWUgewogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICB9CiAgICAgIDpob3N0IHBhcGVyLWRpYWxvZyB7CiAgICAgICAgd2lkdGg6IDM2dnc7CiAgICAgIH0KICAgICAgOmhvc3QgLmlucHV0LWJveCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB3aWR0aDogODAlOwogICAgICAgIGZvbnQtc2l6ZTogMTEwJTsKICAgICAgfQogICAgICA6aG9zdCAuZ28tYnV0dG9uIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDE1JTsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KICA8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdGYtZGVidWdnZXItZGFzaGJvYXJkL3RmLWRlYnVnZ2VyLWNvbnRpbnVlLWRpYWxvZy5odG1sLmpzClBvbHltZXIoe2lzOiJ0Zi1kZWJ1Z2dlci1jb250aW51ZS1kaWFsb2ciLHByb3BlcnRpZXM6e2NvbnRpbnVlTnVtOnt0eXBlOk51bWJlcix2YWx1ZTo1fSxzZXNzaW9uUnVuR286RnVuY3Rpb24sdGVuc29yQ29uZGl0aW9uR286RnVuY3Rpb24sZm9yY2VDb250aW51YXRpb25TdG9wOkZ1bmN0aW9uLF9jb250aW51ZUJ1dHRvblRleHQ6e3R5cGU6U3RyaW5nLHZhbHVlOiJDb250aW51ZS4uLiJ9LF9jb250aW51ZUJ1dHRvbkNvbnRpbnVlVGV4dDp7dHlwZTpTdHJpbmcsdmFsdWU6IkNvbnRpbnVlLi4uIixyZWFkb25seTohMH0sX2NvbnRpbnVlQnV0dG9uU3RvcFRleHQ6e3R5cGU6U3RyaW5nLHZhbHVlOiJTdG9wIENvbnRpbnVhdGlvbiIscmVhZG9ubHk6ITB9LF9zZWxlY3RlZFRlbnNvckNvbmRpdGlvbjpTdHJpbmcsX3RlbnNvckNvbmRpdGlvblJlZlZhbHVlOnt0eXBlOk51bWJlcix2YWx1ZTowLG5vdGlmeTohMH0sX2lzUmVmVmFsdWVJbnB1dEhpZGRlbjp7dHlwZTpCb29sZWFuLHZhbHVlOiEwLApub3RpZnk6ITB9fSxvYnNlcnZlcnM6WyJfb25TZWxlY3RlZFRlbnNvckNvbmRpdGlvbkNoYW5nZWQoX3NlbGVjdGVkVGVuc29yQ29uZGl0aW9uKSJdLG5vdGlmeUNvbnRpbnVhdGlvblN0b3AoKXt0aGlzLnVwZGF0ZUNvbnRpbnVlQnV0dG9uVGV4dCghMSl9LF9vcGVuRGlhbG9nKCl7dGhpcy4kLmNvbnRpbnVlRGlhbG9nLm9wZW4oKX0sX2Nsb3NlRGlhbG9nKCl7dGhpcy4kLmNvbnRpbnVlRGlhbG9nLmNsb3NlKCl9LF9jb250aW51ZUJ1dHRvbkNhbGxiYWNrKCl7dGhpcy5fY29udGludWVCdXR0b25UZXh0PT09dGhpcy5fY29udGludWVCdXR0b25TdG9wVGV4dD90aGlzLmZvcmNlQ29udGludWF0aW9uU3RvcCgpOnRoaXMuX29wZW5EaWFsb2coKX0sdXBkYXRlQ29udGludWVCdXR0b25UZXh0KGEpe3RoaXMuc2V0KCJfY29udGludWVCdXR0b25UZXh0IixhP3RoaXMuX2NvbnRpbnVlQnV0dG9uU3RvcFRleHQ6dGhpcy5fY29udGludWVCdXR0b25Db250aW51ZVRleHQpfSxfc2Vzc2lvblJ1bkdvQnV0dG9uQ2FsbGJhY2soKXswPAp0aGlzLmNvbnRpbnVlTnVtPyh0aGlzLnNlc3Npb25SdW5Hbyh0aGlzLmNvbnRpbnVlTnVtKSx0aGlzLnVwZGF0ZUNvbnRpbnVlQnV0dG9uVGV4dCghMCksdGhpcy5fY2xvc2VEaWFsb2coKSk6dGhpcy5zZXQoImNvbnRpbnVlTnVtIiwxKX0sX3RlbnNvckNvbnRpbnVlR29CdXR0b25DYWxsYmFjaygpe2lmKG51bGwhPXRoaXMuX3NlbGVjdGVkVGVuc29yQ29uZGl0aW9uKXt2YXIgYT1pbS50ZW5zb3JDb25kaXRpb25EZXNjcmlwdGlvbjJLZXkodGhpcy5fc2VsZWN0ZWRUZW5zb3JDb25kaXRpb24pO251bGw9PWEmJmNvbnNvbGUuZXJyb3IoIkludmFsaWQgVGVuc29yIENvbmRpdGlvbiBuYW1lOiIrdGhpcy5fc2VsZWN0ZWRUZW5zb3JDb25kaXRpb24pO3ZhciBjPU51bWJlcih0aGlzLl90ZW5zb3JDb25kaXRpb25SZWZWYWx1ZSk7TnVtYmVyLmlzRmluaXRlKGMpPyh0aGlzLnRlbnNvckNvbmRpdGlvbkdvKGEsYyksdGhpcy51cGRhdGVDb250aW51ZUJ1dHRvblRleHQoITApLHRoaXMuX2Nsb3NlRGlhbG9nKCkpOgp0aGlzLnNldCgiX3RlbnNvckNvbmRpdGlvblJlZlZhbHVlIiwwKX19LF9vblNlbGVjdGVkVGVuc29yQ29uZGl0aW9uQ2hhbmdlZChhKXthPWltLnRlbnNvckNvbmRpdGlvbkRlc2NyaXB0aW9uMktleShhKTt0aGlzLnNldCgiX2lzUmVmVmFsdWVJbnB1dEhpZGRlbiIsLTEhPT1bIklORl9PUl9OQU4iLCJJTkYiLCJOQU4iXS5pbmRleE9mKGEpKX19KTsKPC9zY3JpcHQ+CjwvZG9tLW1vZHVsZT4KCgoKCjxkb20tbW9kdWxlIGlkPSJ0Zi1kZWJ1Z2dlci1pbml0aWFsLWRpYWxvZyI+CiAgPHRlbXBsYXRlPgogICAgCiAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX29wZW5dXSI+CiAgICAgIDxkaXYgaWQ9ImRhc2hib2FyZC1iYWNrZHJvcCI+PC9kaXY+CiAgICA8L3RlbXBsYXRlPgogICAgPHBhcGVyLWRpYWxvZyBpZD0iZGlhbG9nIiBuby1jYW5jZWwtb24tb3V0c2lkZS1jbGljayBuby1jYW5jZWwtb24tZXNjLWtleSBvcGVuZWQ9Int7X29wZW59fSI+CiAgICAgIDxoMiBpZD0iZGlhbG9nLXRpdGxlIj5bW190aXRsZV1dPC9oMj4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19oYXNDdXN0b21NZXNzYWdlXV0iPgogICAgICAgIDxkaXYgY2xhc3M9ImN1c3RvbS1tZXNzYWdlIj5bW19jdXN0b21NZXNzYWdlXV08L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbWyFfaGFzQ3VzdG9tTWVzc2FnZV1dIj4KICAgICAgICA8ZGl2IGNsYXNzPSJjb2RlLWV4YW1wbGUiPgogICAgICAgICAgPGRpdiBjbGFzcz0iY29kZS1leGFtcGxlLXNlY3Rpb24iPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2RlLWV4YW1wbGUtc2VjdGlvbi10aXRsZSI+CiAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvYXBpX2RvY3MvcHl0aG9uL3RmL1Nlc3Npb24iIHRhcmdldD0iX2JsYW5rIiByZWw9Im5vb3BlbmVyIG5vcmVmZXJyZXIiPnRmLlNlc3Npb248L2E+OgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPHByZSBjbGFzcz0iY29kZS1zbmlwcGV0Ij5pbXBvcnQgdGVuc29yZmxvdyBhcyB0Zgpmcm9tIHRlbnNvcmZsb3cucHl0aG9uIGltcG9ydCBkZWJ1ZyBhcyB0Zl9kZWJ1ZwoKc2VzcyA9IHRmLlNlc3Npb24oKQpzZXNzID0gdGZfZGVidWcuVGVuc29yQm9hcmREZWJ1Z1dyYXBwZXJTZXNzaW9uKHNlc3MsICJbW19ob3N0XV06W1tfcG9ydF1dIikKc2Vzcy5ydW4obXlfZmV0Y2hlcykKICAgICAgICAgIDwvcHJlPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2RlLWV4YW1wbGUtc2VjdGlvbiI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvZGUtZXhhbXBsZS1zZWN0aW9uLXRpdGxlIj4KICAgICAgICAgICAgICA8YSBocmVmPSJodHRwczovL3d3dy50ZW5zb3JmbG93Lm9yZy9wcm9ncmFtbWVyc19ndWlkZS9lc3RpbWF0b3JzIiB0YXJnZXQ9Il9ibGFuayIgcmVsPSJub29wZW5lciBub3JlZmVycmVyIj5Fc3RpbWF0b3I8L2E+CiAgICAgICAgICAgICAgfAogICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL2FwaV9kb2NzL3B5dGhvbi90Zi90cmFpbi9Nb25pdG9yZWRTZXNzaW9uIiB0YXJnZXQ9Il9ibGFuayIgcmVsPSJub29wZW5lciBub3JlZmVycmVyIj5Nb25pdG9yZWRTZXNzaW9uPC9hPjoKICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxwcmUgY2xhc3M9ImNvZGUtc25pcHBldCI+aW1wb3J0IHRlbnNvcmZsb3cgYXMgdGYKZnJvbSB0ZW5zb3JmbG93LnB5dGhvbiBpbXBvcnQgZGVidWcgYXMgdGZfZGVidWcKCmhvb2sgPSB0Zl9kZWJ1Zy5UZW5zb3JCb2FyZERlYnVnSG9vaygiW1tfaG9zdF1dOltbX3BvcnRdXSIpCm15X2VzdGltYXRvci5maXQoeD14X2RhdGEsIHk9eV9kYXRhLCBzdGVwcz0xMDAwLCBtb25pdG9ycz1baG9va10pCiAgICAgICAgICAgIDwvcHJlPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2RlLWV4YW1wbGUtc2VjdGlvbiI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvZGUtZXhhbXBsZS1zZWN0aW9uLXRpdGxlIj4KICAgICAgICAgICAgICA8YSBocmVmPSJodHRwczovL2tlcmFzLmlvL21vZGVscy9tb2RlbC8iIHRhcmdldD0iX2JsYW5rIiByZWw9Im5vb3BlbmVyIG5vcmVmZXJyZXIiPktlcmFzIE1vZGVsPC9hPjoKICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxwcmUgY2xhc3M9ImNvZGUtc25pcHBldCI+aW1wb3J0IHRlbnNvcmZsb3cgYXMgdGYKZnJvbSB0ZW5zb3JmbG93LnB5dGhvbiBpbXBvcnQgZGVidWcgYXMgdGZfZGVidWcKaW1wb3J0IGtlcmFzCgprZXJhcy5iYWNrZW5kLnNldF9zZXNzaW9uKAogICAgdGZfZGVidWcuVGVuc29yQm9hcmREZWJ1Z1dyYXBwZXJTZXNzaW9uKHRmLlNlc3Npb24oKSwgIltbX2hvc3RdXTpbW19wb3J0XV0iKSkKIyBEZWZpbmUgeW91ciBrZXJhcyBtb2RlbCwgY2FsbGVkICJtb2RlbCIuCm1vZGVsLmZpdCguLi4pCiAgICAgICAgICAgIDwvcHJlPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICA8L3BhcGVyLWRpYWxvZz4KICAgIDxzdHlsZT4KICAgICAgLyoqIFdlIHJlbHkgb24gYSBzZXBhcmF0ZSBgX2hpZGRlbmAgcHJvcGVydHkgaW5zdGVhZCBvZiBkaXJlY3RseSBtYWtpbmcgdXNlCiAgICAgICAgICBvZiB0aGUgYF9vcGVuYCBhdHRyaWJ1dGUgYmVjYXVzZSB0aGlzIENTUyBzcGVjaWZpY2F0aW9uIG1heSBzdHJhbmdlbHkKICAgICAgICAgIGFmZmVjdCBvdGhlciBlbGVtZW50cyB0aHJvdWdob3V0IFRlbnNvckJvYXJkLiBTZWUgIzg5OS4gKi8KICAgICAgOmhvc3QoW19oaWRkZW5dKSB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQogICAgICA6aG9zdCwKICAgICAgI2Rhc2hib2FyZC1iYWNrZHJvcCB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMDsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgfQoKICAgICAgI2Rhc2hib2FyZC1iYWNrZHJvcCB7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjYpOwogICAgICB9CgogICAgICAuY29kZS1leGFtcGxlIHsKICAgICAgICBtYXJnaW46IDEwcHg7CiAgICAgICAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKICAgICAgfQogICAgICAuY29kZS1leGFtcGxlLXNlY3Rpb24gewogICAgICAgIHBhZGRpbmctYm90dG9tOiAxNXB4OwogICAgICB9CiAgICAgIC5jb2RlLWV4YW1wbGUtc2VjdGlvbi10aXRsZSB7CiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICAgIH0KICAgICAgLmNvZGUtc25pcHBldCB7CiAgICAgICAgcGFkZGluZy1sZWZ0OiAxZW07CiAgICAgIH0KCiAgICAgICNkaWFsb2ctdGl0bGUgewogICAgICAgIHBhZGRpbmctYm90dG9tOiAxNXB4OwogICAgICB9CgogICAgICAuY3VzdG9tLW1lc3NhZ2UgewogICAgICAgIG1hcmdpbi10b3A6IDA7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTVweDsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgogIDxzY3JpcHQ+Ly9+fldFQlBBVEh+fi90Zi1kZWJ1Z2dlci1kYXNoYm9hcmQvdGYtZGVidWdnZXItaW5pdGlhbC1kaWFsb2cuaHRtbC5qcwpQb2x5bWVyKHtpczoidGYtZGVidWdnZXItaW5pdGlhbC1kaWFsb2ciLHByb3BlcnRpZXM6e190aXRsZTp7dHlwZTpTdHJpbmcsdmFsdWU6bnVsbH0sX2N1c3RvbU1lc3NhZ2U6e3R5cGU6U3RyaW5nLHZhbHVlOm51bGx9LF9oYXNDdXN0b21NZXNzYWdlOnt0eXBlOkJvb2xlYW4sY29tcHV0ZWQ6Il9jb21wdXRlSGFzQ3VzdG9tTWVzc2FnZShfY3VzdG9tTWVzc2FnZSkifSxfaG9zdDp7dHlwZTpTdHJpbmcsdmFsdWU6bnVsbH0sX3BvcnQ6e3R5cGU6U3RyaW5nLHZhbHVlOm51bGx9LF9vcGVuOnt0eXBlOkJvb2xlYW59LF9oaWRkZW46e3R5cGU6Qm9vbGVhbixjb21wdXRlZDoiX2NvbXB1dGVIaWRkZW4oX29wZW4pIixyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9fSxvcGVuRGlhbG9nKGEsYyl7dGhpcy5zZXQoIl90aXRsZSIsIkRlYnVnZ2VyIGlzIHdhaXRpbmcgZm9yIFNlc3Npb24ucnVuKCkgY29ubmVjdGlvbnMuLi4iKTt0aGlzLnNldCgiX2N1c3RvbU1lc3NhZ2UiLG51bGwpO3RoaXMuJC5kaWFsb2cub3BlbigpOwpudWxsIT1hJiZudWxsIT1jJiYodGhpcy5zZXQoIl9ob3N0IixhKSx0aGlzLnNldCgiX3BvcnQiLGMpKX0sY2xvc2VEaWFsb2coKXt0aGlzLiQuZGlhbG9nLmNsb3NlKCl9LG9wZW5EaXNhYmxlZERpYWxvZygpe3RoaXMuc2V0KCJfdGl0bGUiLCJEZWJ1Z2dlciBpcyBub3QgZW5hYmxlZCBpbiB0aGlzIFRlbnNvckJvYXJkIGluc3RhbmNlIik7dGhpcy5zZXQoIl9jdXN0b21NZXNzYWdlIiwiVG8gZW5hYmxlIHRoZSBkZWJ1Z2dlciBpbiBUZW5zb3JCb2FyZCwgdXNlIHRoZSBmbGFnOiAtLWRlYnVnZ2VyX3BvcnQgXHgzY3BvcnRfbnVtYmVyXHgzZSIpO3RoaXMuJC5kaWFsb2cub3BlbigpfSxfY29tcHV0ZUhpZGRlbihhKXtyZXR1cm4hYX0sX2NvbXB1dGVIYXNDdXN0b21NZXNzYWdlKGEpe3JldHVybiFfLmlzRW1wdHkoYSl9fSk7Cjwvc2NyaXB0Pgo8L2RvbS1tb2R1bGU+CgoKCgoKPGRvbS1tb2R1bGUgaWQ9InRmLWRlYnVnZ2VyLXJlc2l6ZXIiPgogIDx0ZW1wbGF0ZT4KICAgIDxkaXYgY2xhc3M9ImJhcnMiPgogICAgICA8ZGl2IGNsYXNzPSJiYXJzLXJvdGF0b3IiPgogICAgICAgIDxzcGFuIGNsYXNzPSJiYXJzLXRleHQiPnwgfDwvc3Bhbj4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QoW19yZXNpemVyLWlkZW50aWZpZXJdKSB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGJhY2tncm91bmQ6ICNjY2M7CiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIH0KCiAgICAgIDpob3N0KFtpcy1ob3Jpem9udGFsXSkgewogICAgICAgIGN1cnNvcjogcm93LXJlc2l6ZTsKICAgICAgICBoZWlnaHQ6IDEwcHg7CiAgICAgICAgbGVmdDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgfQoKICAgICAgOmhvc3QoW19pcy12ZXJ0aWNhbF0pIHsKICAgICAgICBjdXJzb3I6IGNvbC1yZXNpemU7CiAgICAgICAgcmlnaHQ6IC0xNXB4OwogICAgICAgIHRvcDogMDsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgd2lkdGg6IDEwcHg7CiAgICAgIH0KCiAgICAgIC5iYXJzIHsKICAgICAgICB3aWR0aDogODAlOwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiA1MCU7CiAgICAgICAgbGVmdDogNTAlOwogICAgICAgIGZvbnQtc2l6ZTogNXB4OwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpOwogICAgICB9CgogICAgICAvKiogVGhpcyBibG9jayBwcmV2ZW50cyB0aGUgYmFycyByb3RhdG9yIGZyb20gaGF2aW5nIGEgaGVpZ2h0IHRoYXQgaXMKICAgICAgICAgIHRoZSBlbnRpcmUgdmlld3BvcnQsIHRodXMgb2NjbHVkaW5nIGl0IGFuZCBnaXZpbmcgaXQgYW4gdW5kZXNpcmVkIGN1cnNvcgogICAgICAgICAgdmFsdWUuICovCiAgICAgIC5iYXJzLXJvdGF0b3IgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgfQoKICAgICAgOmhvc3QoW2lzLWhvcml6b250YWxdKSAuYmFycy1yb3RhdG9yIHsKICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSg5MGRlZyk7CiAgICAgIH0KCiAgICAgIC5iYXJzLXRleHQgewogICAgICAgIHRyYW5zZm9ybTogc2NhbGVZKDE1KTsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KICA8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdGYtZGVidWdnZXItZGFzaGJvYXJkL3RmLWRlYnVnZ2VyLXJlc2l6ZXIuaHRtbC5qcwpQb2x5bWVyKHtpczoidGYtZGVidWdnZXItcmVzaXplciIscHJvcGVydGllczp7Y3VycmVudExlbmd0aDp7dHlwZTpOdW1iZXIsbm90aWZ5OiEwfSxtaW5MZW5ndGg6TnVtYmVyLG1heExlbmd0aDpOdW1iZXIsaXNIb3Jpem9udGFsOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEscmVmbGVjdFRvQXR0cmlidXRlOiEwfSxfcmVzaXplcklkZW50aWZpZXI6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMCxyZWFkT25seTohMCxyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9LF9pc1ZlcnRpY2FsOnt0eXBlOkJvb2xlYW4sY29tcHV0ZWQ6Il9jb21wdXRlSXNWZXJ0aWNhbChpc0hvcml6b250YWwpIixyZWZsZWN0VG9BdHRyaWJ1dGU6ITAscmVhZE9ubHk6ITB9LF9kcmFnU3RhcnRQb3NpdGlvbjpOdW1iZXIsX2RyYWdTdGFydExlbmd0aDpOdW1iZXIsX3ByZXZpb3VzTW91c2VNb3ZlQ2FsbGJhY2s6T2JqZWN0LF9wcmV2aW91c01vdXNlVXBDYWxsYmFjazpPYmplY3R9LGxpc3RlbmVyczp7bW91c2Vkb3duOiJfaGFuZGxlTW91c2VEb3duIn0sCl9oYW5kbGVNb3VzZURvd24oYSl7YS5wcmV2ZW50RGVmYXVsdCgpO3RoaXMuX2VuZERyYWcoKTt0aGlzLl9wcmV2aW91c01vdXNlTW92ZUNhbGxiYWNrPWM9PntjLnByZXZlbnREZWZhdWx0KCk7Yz10aGlzLl9kcmFnU3RhcnRMZW5ndGgrKHRoaXMuX2dldFBvc2l0aW9uUmVsYXRpdmVUb1ZpZXdwb3J0KGMpLXRoaXMuX2RyYWdTdGFydFBvc2l0aW9uKTtjPU1hdGgubWF4KGMsdGhpcy5taW5MZW5ndGgpO2M9TWF0aC5taW4oYyx0aGlzLm1heExlbmd0aCk7dGhpcy5zZXQoImN1cnJlbnRMZW5ndGgiLGMpfTt0aGlzLl9wcmV2aW91c01vdXNlVXBDYWxsYmFjaz1jPT57Yy5wcmV2ZW50RGVmYXVsdCgpO3RoaXMuX2VuZERyYWcoKX07dGhpcy5zZXQoIl9kcmFnU3RhcnRQb3NpdGlvbiIsdGhpcy5fZ2V0UG9zaXRpb25SZWxhdGl2ZVRvVmlld3BvcnQoYSkpO3RoaXMuc2V0KCJfZHJhZ1N0YXJ0TGVuZ3RoIix0aGlzLmN1cnJlbnRMZW5ndGgpO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXVwIiwKdGhpcy5fcHJldmlvdXNNb3VzZVVwQ2FsbGJhY2ssITEpO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLHRoaXMuX3ByZXZpb3VzTW91c2VNb3ZlQ2FsbGJhY2ssITEpfSxfZ2V0UG9zaXRpb25SZWxhdGl2ZVRvVmlld3BvcnQoYSl7cmV0dXJuIHRoaXMuaXNIb3Jpem9udGFsP2EuY2xpZW50WTphLmNsaWVudFh9LF9lbmREcmFnKCl7d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsdGhpcy5fcHJldmlvdXNNb3VzZU1vdmVDYWxsYmFjaywhMSk7dGhpcy5fcHJldmlvdXNNb3VzZU1vdmVDYWxsYmFjaz1udWxsO3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZXVwIix0aGlzLl9wcmV2aW91c01vdXNlVXBDYWxsYmFjaywhMSk7dGhpcy5fcHJldmlvdXNNb3VzZVVwQ2FsbGJhY2s9bnVsbH0sX2NvbXB1dGVJc1ZlcnRpY2FsKGEpe3JldHVybiFhfX0pOwo8L3NjcmlwdD4KPC9kb20tbW9kdWxlPgoKCgoKCgoKCgoKCgo8ZG9tLW1vZHVsZSBpZD0idGYtb3Atc2VsZWN0b3IiPgogIDx0ZW1wbGF0ZT4KICAgIDxkaXY+CiAgICAgIDxwYXBlci1kcm9wZG93bi1tZW51IGlkPSJmaWx0ZXItbW9kZSIgbm8tbGFiZWwtZmxvYXQ9InRydWUiIGxhYmVsPSJGaWx0ZXIgTW9kZSIgc2VsZWN0ZWQtaXRlbS1sYWJlbD0ie3tfZmlsdGVyTW9kZX19Ij4KICAgICAgICA8cGFwZXItbGlzdGJveCBjbGFzcz0iZHJvcGRvd24tY29udGVudCIgc2xvdD0iZHJvcGRvd24tY29udGVudCI+CiAgICAgICAgICA8cGFwZXItaXRlbSBuby1sYWJlbC1mbG9hdD0idHJ1ZSI+Tm9kZSBOYW1lPC9wYXBlci1pdGVtPgogICAgICAgICAgPHBhcGVyLWl0ZW0gbm8tbGFiZWwtZmxvYXQ9InRydWUiPk9wIFR5cGU8L3BhcGVyLWl0ZW0+CiAgICAgICAgPC9wYXBlci1saXN0Ym94PgogICAgICA8L3BhcGVyLWRyb3Bkb3duLW1lbnU+CiAgICAgIDxwYXBlci1pbnB1dCBpZD0iZmlsdGVyLWlucHV0IiBsYWJlbD0iRmlsdGVyIFJlZ2V4IiBhbHdheXMtZmxvYXQtbGFiZWwgdmFsdWU9Int7X2ZpbHRlcklucHV0fX0iPjwvcGFwZXItaW5wdXQ+CiAgICA8L2Rpdj4KICAgIDxwYXBlci1zcGlubmVyLWxpdGUgYWN0aXZlIGNsYXNzPSJzcGlubmVyIiBpZD0ibG9hZGluZy1zcGlubmVyIiBoaWRkZW49IltbIV9pc0xvYWRpbmddXSI+CiAgICA8L3BhcGVyLXNwaW5uZXItbGl0ZT4KICAgIDxkaXYgaWQ9InNlbGVjdG9yLWhpZXJhcmNoeSI+PC9kaXY+CiAgICA8c3R5bGU+CiAgICAgIC5pbmRlbnRlZC1sZXZlbC1jb250YWluZXIgLmNvbnRlbnQtY29udGFpbmVyIHsKICAgICAgICBtYXJnaW46IDAgMCAwIDIwcHg7CiAgICAgIH0KCiAgICAgIC5sZXZlbC1jb250YWluZXIgaXJvbi1jb2xsYXBzZSB7CiAgICAgICAgcGFkZGluZzogMCAwIDAgMjBweDsKICAgICAgfQoKICAgICAgcGFwZXItY2hlY2tib3ggewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICB3aWR0aDogMThweDsKICAgICAgICBoZWlnaHQ6IDE4cHg7CiAgICAgICAgbWFyZ2luOiAwIDhweCAwIDA7CiAgICAgIH0KCiAgICAgIC5vcC10eXBlIHsKICAgICAgICBwYWRkaW5nLXJpZ2h0OiAxMHB4OwogICAgICAgIGNvbG9yOiAjNDQ0OwogICAgICB9CgogICAgICAub3AtdGl0bGUtbGVhZiB7CiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICB9CgogICAgICAub3AtdGl0bGUtbGVhZjpob3ZlciB7CiAgICAgICAgY29sb3I6IGJsdWU7CiAgICAgIH0KCiAgICAgIC5wYXJ0aWFsLWNoZWNrYm94IHsKICAgICAgICBiYWNrZ3JvdW5kOiAjZjU3YzAwOwogICAgICB9CgogICAgICAubm9kZS1leHBhbmQtYnV0dG9uIHsKICAgICAgICBtYXJnaW46IDAgMCAwIC0xM3B4OwogICAgICB9CgogICAgICAubGV2ZWwtdGl0bGUtdGV4dCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIGZvbnQtd2VpZ2h0OiA4MDA7CiAgICAgICAgbWFyZ2luOiAwIDAgMCAtMXB4OwogICAgICB9CgogICAgICAub3AtZGVzY3JpcHRpb24gewogICAgICAgIGZvbnQtd2VpZ2h0OiAzMDA7CiAgICAgICAgbWFyZ2luOiAwIDAgMCAyN3B4OwogICAgICAgIHBhZGRpbmc6IDEwcHggMDsKICAgICAgfQoKICAgICAgLnNwaW5uZXIgewogICAgICAgIHdpZHRoOiAyMHB4OwogICAgICAgIGhlaWdodDogMjBweDsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwogICAgICB9CgogICAgICAjZmlsdGVyLW1vZGUgewogICAgICAgIHdpZHRoOiAxNTBweDsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgIH0KCiAgICAgICNmaWx0ZXItaW5wdXQgewogICAgICAgIHdpZHRoOiAyNTBweDsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgIH0KCiAgICAgIC5oaWdobGlnaHRlZCB7CiAgICAgICAgY29sb3I6IHJlZDsKICAgICAgfQogICAgICAuaGlnaGxpZ2h0ZWQgPiAub3AtdHlwZSB7CiAgICAgICAgY29sb3I6IHJlZDsKICAgICAgfQoKICAgICAgI3NlbGVjdG9yLWhpZXJhcmNoeSB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgIFtoaWRkZW5dIHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CiAgPHNjcmlwdD4vL35+V0VCUEFUSH5+L3RmLWRlYnVnZ2VyLWRhc2hib2FyZC9zZWxlY3Rpb24tdHJlZS1ub2RlLmpzCihmdW5jdGlvbihhKXthLk5PREVfTkFNRV9TRVBBUkFUT1I9Ii8iO2EuREVWSUNFX05BTUVfUEFUVEVSTj0vXlwvam9iOltBLVphLXowLTlfXStcL3JlcGxpY2E6WzAtOV9dK1wvdGFzazpbMC05XStcL2RldmljZTpbQS1aYS16MC05X10rOlswLTldKy87bGV0IGM7KGZ1bmN0aW9uKGcpe2dbZy5FTVBUWT0wXT0iRU1QVFkiO2dbZy5DSEVDS0VEPTFdPSJDSEVDS0VEIjtnW2cuUEFSVElBTD0yXT0iUEFSVElBTCJ9KShjPWEuQ2hlY2tib3hTdGF0ZXx8KGEuQ2hlY2tib3hTdGF0ZT17fSkpO2Euc3BsaXROb2RlTmFtZT1mdW5jdGlvbihnKXtsZXQgbD1bXTtjb25zdCBrPWcubWF0Y2goYS5ERVZJQ0VfTkFNRV9QQVRURVJOKTtudWxsIT1rJiYobC5wdXNoKGtbMF0pLCIvIiE9PWdba1swXS5sZW5ndGhdJiZjb25zb2xlLmVycm9yKCdObyBzbGFzaCAoIi8iKSBhZnRlciBkZXZpY2UgbmFtZSBpbiBub2RlIG5hbWU6JyxnKSxnPWcuc2xpY2Uoa1swXS5sZW5ndGgrMSkpO3JldHVybiBsLmNvbmNhdChnLnNwbGl0KGEuTk9ERV9OQU1FX1NFUEFSQVRPUikpfTsKYS5nZXRDbGVhbk5vZGVOYW1lPWZ1bmN0aW9uKGcpe2xldCBsPWc7Y29uc3Qgaz1nLm1hdGNoKGEuREVWSUNFX05BTUVfUEFUVEVSTik7bnVsbCE9az8obC5sZW5ndGg+a1swXS5sZW5ndGgmJiIvIiE9bFtrWzBdLmxlbmd0aF0mJmNvbnNvbGUuZXJyb3IoJ05vIHNsYXNoICgiLyIpIGFmdGVyIGRldmljZSBuYW1lIGluIG5vZGUgbmFtZTonLGcpLGw9bC5zbGljZShrWzBdLmxlbmd0aCsxKSk6Ii8iPT09bFswXSYmKGw9bC5zbGljZSgxKSk7bC5pbmRleE9mKCIpIik9PT1sLmxlbmd0aC0xJiYobD1sLnNsaWNlKDAsbC5pbmRleE9mKCIvKCIpKSk7cmV0dXJuIGx9O2Euc29ydEFuZEJhc2VFeHBhbmREZWJ1Z1dhdGNoZXM9ZnVuY3Rpb24oZyl7Zy5zb3J0KChrLG0pPT5rLm5vZGVfbmFtZTxtLm5vZGVfbmFtZT8tMTprLm5vZGVfbmFtZT5tLm5vZGVfbmFtZT8xOmsub3V0cHV0X3Nsb3QtbS5vdXRwdXRfc2xvdCk7Zm9yKGxldCBrPTA7azxnLmxlbmd0aDsrK2spe3ZhciBsPWdba10ubm9kZV9uYW1lKwoiLyI7bGV0IG09ITE7Zm9yKGxldCBwPWsrMTtwPGcubGVuZ3RoOysrcClpZigwPT09Z1twXS5ub2RlX25hbWUuaW5kZXhPZihsKSl7bT0hMDticmVha31tJiYobD1nW2tdLm5vZGVfbmFtZS5zcGxpdCgiLyIpLGdba10ubm9kZV9uYW1lKz0iLygiK2xbbC5sZW5ndGgtMV0rIikiKX19O2EucmVtb3ZlTm9kZU5hbWVCYXNlRXhwYW5zaW9uPWZ1bmN0aW9uKGcpe3JldHVybiBnLmVuZHNXaXRoKCIpIik/Zy5zbGljZSgwLGcubGFzdEluZGV4T2YoIi8oIikpOmd9O2EuYXNzZW1ibGVEZXZpY2VBbmROb2RlTmFtZXM9ZnVuY3Rpb24oZyl7Y29uc3QgbD1bbnVsbCxudWxsXTtpZihnWzBdLm1hdGNoKGEuREVWSUNFX05BTUVfUEFUVEVSTikpe2xldCBrPWdbMF07Ii8iPT09a1trLmxlbmd0aC0xXSYmKGs9ay5zbGljZSgwLGsubGVuZ3RoLTEpKTtsWzBdPWs7bFsxXT1nLnNsaWNlKDEpLmpvaW4oIi8iKX1lbHNlIGxbMV09Zy5qb2luKCIvIik7cmV0dXJuIGx9O2xldCBkOyhmdW5jdGlvbihnKXtnW2cuTm9kZU5hbWU9CjBdPSJOb2RlTmFtZSI7Z1tnLk9wVHlwZT0xXT0iT3BUeXBlIn0pKGQ9YS5EZWJ1Z1dhdGNoRmlsdGVyTW9kZXx8KGEuRGVidWdXYXRjaEZpbHRlck1vZGU9e30pKTthLmZpbHRlckRlYnVnV2F0Y2hlcz1mdW5jdGlvbihnLGwsayl7aWYobD09PWQuTm9kZU5hbWUpcmV0dXJuIGcuZmlsdGVyKG09Pm0ubm9kZV9uYW1lLm1hdGNoKGspKTtpZihsPT09ZC5PcFR5cGUpcmV0dXJuIGcuZmlsdGVyKG09Pm0ub3BfdHlwZS5tYXRjaChrKSl9O2NsYXNzIGZ7Y29uc3RydWN0b3IoZyxsLGssbSl7dGhpcy5kZWJ1Z1dhdGNoQ2hhbmdlPWw7dGhpcy5kZWJ1Z1dhdGNoPW07dGhpcy5uYW1lPWc7dGhpcy5kZWJ1Z1dhdGNoPW07dGhpcy5jaGVja2JveFN0YXRlPWMuRU1QVFk7dGhpcy5wYXJlbnQ9azt0aGlzLmNoaWxkcmVuPXt9O3RoaXMuY2hlY2tib3g9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgicGFwZXItY2hlY2tib3giKTt0aGlzLmNoZWNrYm94LmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsKCk9Pgp7dGhpcy5faGFuZGxlQ2hhbmdlKCl9LCExKX1faGFuZGxlQ2hhbmdlKCl7aWYodGhpcy5hdm9pZFByb3BhZ2F0aW9uKXRoaXMuZGVidWdXYXRjaCYmdGhpcy5kZWJ1Z1dhdGNoQ2hhbmdlKHRoaXMuZGVidWdXYXRjaCx0aGlzLmlzQ2hlY2tib3hDaGVja2VkKCkpO2Vsc2UgaWYodGhpcy5kZWJ1Z1dhdGNoKXRoaXMuc2V0Q2hlY2tib3hTdGF0ZSh0aGlzLmlzQ2hlY2tib3hDaGVja2VkKCk/Yy5DSEVDS0VEOmMuRU1QVFksITApLHRoaXMuaXNDaGVja2JveENoZWNrZWQoKT90aGlzLnNldE5vZGVzQWJvdmVUb0NoZWNrZWQoKTp0aGlzLnNldE5vZGVzQWJvdmVUb0VtcHR5KCksdGhpcy5kZWJ1Z1dhdGNoQ2hhbmdlKHRoaXMuZGVidWdXYXRjaCx0aGlzLmlzQ2hlY2tib3hDaGVja2VkKCkpO2Vsc2UgaWYodGhpcy5zZXRDaGVja2JveFN0YXRlKHRoaXMuaXNDaGVja2JveENoZWNrZWQoKT9jLkNIRUNLRUQ6Yy5FTVBUWSwhMCksdGhpcy5pc0NoZWNrYm94Q2hlY2tlZCgpKXtjb25zdCBsPV8udmFsdWVzKHRoaXMuY2hpbGRyZW4pOwpmb3IoO2wubGVuZ3RoOyl7dmFyIGc9bC5wb3AoKTtfLmZvckVhY2goZy5jaGlsZHJlbixrPT5sLnB1c2goaykpO2cuc2V0Q2hlY2tib3hTdGF0ZShjLkNIRUNLRUQsITApfXRoaXMuc2V0Tm9kZXNBYm92ZVRvQ2hlY2tlZCgpfWVsc2V7Y29uc3QgbD1fLnZhbHVlcyh0aGlzLmNoaWxkcmVuKTtmb3IoO2wubGVuZ3RoOylnPWwucG9wKCksXy5mb3JFYWNoKGcuY2hpbGRyZW4saz0+bC5wdXNoKGspKSxnLnNldENoZWNrYm94U3RhdGUoYy5FTVBUWSwhMCk7dGhpcy5zZXROb2Rlc0Fib3ZlVG9FbXB0eSgpfX1pc0xlYWYoKXtyZXR1cm4hIXRoaXMuZGVidWdXYXRjaH1zZXRUb0FsbENoZWNrZWRFeHRlcm5hbGx5KCl7dGhpcy5zZXRDaGVja2JveFN0YXRlKGMuQ0hFQ0tFRCk7dGhpcy5faGFuZGxlQ2hhbmdlKCl9c2V0Q2hlY2tib3hTdGF0ZShnLGwpe3RoaXMuYXZvaWRQcm9wYWdhdGlvbj1sO3RoaXMuY2hlY2tib3hTdGF0ZT1nO3RoaXMuY2hlY2tib3guY2xhc3NMaXN0LnRvZ2dsZSgicGFydGlhbC1jaGVja2JveCIsCmc9PT1jLlBBUlRJQUwpO2c9PT1jLkNIRUNLRUQ/dGhpcy5jaGVja2JveC5zZXRBdHRyaWJ1dGUoImNoZWNrZWQiLCJjaGVja2VkIik6dGhpcy5jaGVja2JveC5yZW1vdmVBdHRyaWJ1dGUoImNoZWNrZWQiKTt0aGlzLmF2b2lkUHJvcGFnYXRpb249ITF9aXNDaGVja2JveENoZWNrZWQoKXtyZXR1cm4gdGhpcy5jaGVja2JveC5oYXNBdHRyaWJ1dGUoImNoZWNrZWQiKX1zZXROb2Rlc0Fib3ZlVG9DaGVja2VkKCl7bGV0IGc9dGhpcy5wYXJlbnQsbD0hMTtmb3IoO2c7KWw/Zy5zZXRDaGVja2JveFN0YXRlKGMuUEFSVElBTCwhMCk6KGw9LTEhPT1fLmZpbmRJbmRleChfLnZhbHVlcyhnLmNoaWxkcmVuKSxrPT5rLmNoZWNrYm94U3RhdGUhPT1jLkNIRUNLRUQpLGcuc2V0Q2hlY2tib3hTdGF0ZShsP2MuUEFSVElBTDpjLkNIRUNLRUQsITApKSxnPWcucGFyZW50fXNldE5vZGVzQWJvdmVUb0VtcHR5KCl7bGV0IGc9dGhpcy5wYXJlbnQsbD0hMTtmb3IoO2c7KWw/Zy5zZXRDaGVja2JveFN0YXRlKGMuUEFSVElBTCwKITApOihsPS0xIT09Xy5maW5kSW5kZXgoXy52YWx1ZXMoZy5jaGlsZHJlbiksaz0+ay5jaGVja2JveFN0YXRlIT09Yy5FTVBUWSksZy5zZXRDaGVja2JveFN0YXRlKGw/Yy5QQVJUSUFMOmMuRU1QVFksITApKSxnPWcucGFyZW50fXNldExldmVsRG9tKGcpe3RoaXMubGV2ZWxEb209Z319YS5TZWxlY3Rpb25UcmVlTm9kZT1mfSkoaW18fChpbT17fSkpOwo8L3NjcmlwdD4KICA8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdGYtZGVidWdnZXItZGFzaGJvYXJkL3RmLW9wLXNlbGVjdG9yLmh0bWwuanMKUG9seW1lcih7aXM6InRmLW9wLXNlbGVjdG9yIixwcm9wZXJ0aWVzOntkZWJ1Z1dhdGNoZXM6QXJyYXksZGVidWdXYXRjaENoYW5nZTpPYmplY3Qsbm9kZUNsaWNrZWQ6RnVuY3Rpb24sZm9yY2VFeHBhbmRBbmRDaGVja05vZGVOYW1lOnt0eXBlOlN0cmluZyx2YWx1ZTpudWxsfSxmb3JjZUV4cGFuZE5vZGVOYW1lOnt0eXBlOlN0cmluZyx2YWx1ZTpudWxsfSxfc2VsZWN0ZWREZWJ1Z1dhdGNoTWFwcGluZzp7dHlwZTpPYmplY3QsdmFsdWU6KCk9Pih7fSl9LF9sZXZlbE5hbWUyQ29udGFpbmVyOnt0eXBlOk9iamVjdCx2YWx1ZTpudWxsfSxfbGV2ZWxOYW1lMk5vZGU6e3R5cGU6T2JqZWN0LHZhbHVlOm51bGx9LF93YXRjaEhpZXJhcmNoeTp7dHlwZTpPYmplY3QsY29tcHV0ZWQ6Il9jb21wdXRlV2F0Y2hIaWVyYXJjaHkoZGVidWdXYXRjaGVzLCBkZWJ1Z1dhdGNoQ2hhbmdlLCBfZmlsdGVyTW9kZSwgX2ZpbHRlcklucHV0KSJ9LF9maWx0ZXJNb2RlOnt0eXBlOlN0cmluZyx2YWx1ZToiTm9kZSBOYW1lIiwKbm90aWZ5OiEwfSxfZmlsdGVySW5wdXQ6e3R5cGU6U3RyaW5nLHZhbHVlOiIiLG5vdGlmeTohMH0sX2lzTG9hZGluZzp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxfaGlnaGxpZ2h0ZWRMZXZlbERvbTp7dHlwZTpPYmplY3QsdmFsdWU6bnVsbH19LG9ic2VydmVyczpbIl9yZW5kZXJIaWVyYXJjaHlXaXRoVGltZW91dChfd2F0Y2hIaWVyYXJjaHksIGRlYnVnV2F0Y2hDaGFuZ2UpIiwiX2hhbmRsZUZvcmNlTm9kZUV4cGFuZEFuZENoZWNrKGZvcmNlRXhwYW5kQW5kQ2hlY2tOb2RlTmFtZSkiLCJfaGFuZGxlRm9yY2VOb2RlRXhwYW5kKGZvcmNlRXhwYW5kTm9kZU5hbWUpIl0sX2NvbXB1dGVXYXRjaEhpZXJhcmNoeShhLGMsZCxmKXtmPWYudHJpbSgpO2xldCBnPWE7bnVsbCE9ZCYmMDxmLmxlbmd0aCYmKGc9aW0uZmlsdGVyRGVidWdXYXRjaGVzKGEsaW0uRGVidWdXYXRjaEZpbHRlck1vZGVbZC5yZXBsYWNlKC9ccy9nLCIiKV0sbmV3IFJlZ0V4cChmKSkpO2NvbnN0IGw9bmV3IGltLlNlbGVjdGlvblRyZWVOb2RlKCIiLApjKTtsLmlzUm9vdD0hMDtfLmZvckVhY2goZyxrPT57Y29uc3QgbT1pbS5zcGxpdE5vZGVOYW1lKGsuZGV2aWNlX25hbWUrIi8iK2subm9kZV9uYW1lKTtsZXQgcD1sO18uZm9yRWFjaChtLChxLHIpPT57cj09PW0ubGVuZ3RoLTE/KHI9bmV3IGltLlNlbGVjdGlvblRyZWVOb2RlKHEsYyxwLGspLHAuY2hpbGRyZW5bcV09cik6KHAuY2hpbGRyZW5bcV18fChwLmNoaWxkcmVuW3FdPW5ldyBpbS5TZWxlY3Rpb25UcmVlTm9kZShxLGMscCkpLHA9cC5jaGlsZHJlbltxXSl9KX0pO3JldHVybiBsfSxfY2xlYXJTZWxlY3RvckhpZXJhcmNoeSgpe2NvbnN0IGE9dGhpcy4kJCgiI3NlbGVjdG9yLWhpZXJhcmNoeSIpO2Zvcig7YS5maXJzdENoaWxkOylhLnJlbW92ZUNoaWxkKGEuZmlyc3RDaGlsZCl9LF9yZW5kZXJIaWVyYXJjaHlXaXRoVGltZW91dChhLGMsZCxmKXt0aGlzLl9pc0xvYWRpbmd8fCh0aGlzLnNldCgiX2lzTG9hZGluZyIsITApLHRoaXMuX2NsZWFyU2VsZWN0b3JIaWVyYXJjaHkoKSwKc2V0VGltZW91dCgoKT0+e3RoaXMuX3JlbmRlckhpZXJhcmNoeShhLGMsZCxmKX0sMTApKX0sX3JlbmRlckhpZXJhcmNoeShhLGMpe3RoaXMuc2V0KCJfbGV2ZWxOYW1lMkNvbnRhaW5lciIse30pO3RoaXMuc2V0KCJfbGV2ZWxOYW1lMk5vZGUiLHt9KTthPXRoaXMuX3JlbmRlckxldmVsKG51bGwsbnVsbCxhLGMpO1BvbHltZXIuZG9tKHRoaXMuJCQoIiNzZWxlY3Rvci1oaWVyYXJjaHkiKSkuYXBwZW5kQ2hpbGQoYSk7dGhpcy5zZXQoIl9pc0xvYWRpbmciLCExKX0sX3JlbmRlckxldmVsKGEsYyxkLGYpe2NvbnN0IGc9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7bnVsbCE9YSYmZy5zZXRBdHRyaWJ1dGUoImxldmVsLW5hbWUiLGEpO2xldCBsO2w9bnVsbD09Yz9hOmMrIi8iK2E7UG9seW1lci5kb20oZykuY2xhc3NMaXN0LmFkZCgibGV2ZWwtY29udGFpbmVyIik7Y29uc3Qgaz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpcm9uLWNvbGxhcHNlIik7aWYoYSl7dGhpcy5fbGV2ZWxOYW1lMkNvbnRhaW5lcltsXT0KaztrLnJlbW92ZUF0dHJpYnV0ZSgib3BlbmVkIik7UG9seW1lci5kb20oZykuY2xhc3NMaXN0LmFkZCgiaW5kZW50ZWQtbGV2ZWwtY29udGFpbmVyIik7Yz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtQb2x5bWVyLmRvbShjKS5jbGFzc0xpc3QuYWRkKCJsZXZlbC10aXRsZSIpO2NvbnN0IHE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgicGFwZXItaWNvbi1idXR0b24iKTtQb2x5bWVyLmRvbShxKS5jbGFzc0xpc3QuYWRkKCJub2RlLWV4cGFuZC1idXR0b24iKTtjb25zdCByPSgpPT57cS5zZXRBdHRyaWJ1dGUoImljb24iLGsuaGFzQXR0cmlidXRlKCJvcGVuZWQiKT8iZXhwYW5kLWxlc3MiOiJleHBhbmQtbW9yZSIpfTtxLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwoKT0+e2suaGFzQXR0cmlidXRlKCJvcGVuZWQiKT9rLnJlbW92ZUF0dHJpYnV0ZSgib3BlbmVkIik6ay5zZXRBdHRyaWJ1dGUoIm9wZW5lZCIsITApO3IoKX0sITEpO3IoKTtQb2x5bWVyLmRvbShjKS5hcHBlbmRDaGlsZChxKTsKUG9seW1lci5kb20oYykuYXBwZW5kQ2hpbGQoZC5jaGVja2JveCk7ZC5zZXRMZXZlbERvbShjKTtjb25zdCB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTtQb2x5bWVyLmRvbSh0KS5jbGFzc0xpc3QuYWRkKCJsZXZlbC10aXRsZS10ZXh0Iik7dC50ZXh0Q29udGVudD1hO1BvbHltZXIuZG9tKGMpLmFwcGVuZENoaWxkKHQpO1BvbHltZXIuZG9tKGcpLmFwcGVuZENoaWxkKGMpOyhhLm1hdGNoKGltLkRFVklDRV9OQU1FX1BBVFRFUk4pfHwxPT09T2JqZWN0LmtleXMoZC5jaGlsZHJlbikubGVuZ3RoKSYmay5zZXRBdHRyaWJ1dGUoIm9wZW5lZCIsITApfWVsc2Ugay5zZXRBdHRyaWJ1dGUoIm9wZW5lZCIsITApO2NvbnN0IG09W10scD1bXTtQb2x5bWVyLmRvbShrKS5jbGFzc0xpc3QuYWRkKCJjb250ZW50LWNvbnRhaW5lciIpO18uZm9yRWFjaChkLmNoaWxkcmVuLChxLHIpPT57Y29uc3QgdD1xLmRlYnVnV2F0Y2g7dmFyIHY9bDtudWxsPT1sJiYodj0iIik7dis9Ii8iK3I7CnRoaXMuX2xldmVsTmFtZTJOb2RlW3ZdPXE7bnVsbCE9dGhpcy5fc2VsZWN0ZWREZWJ1Z1dhdGNoTWFwcGluZ1t2XSYmKHEuc2V0Q2hlY2tib3hTdGF0ZShpbS5DaGVja2JveFN0YXRlLkNIRUNLRUQpLHEuc2V0Tm9kZXNBYm92ZVRvQ2hlY2tlZCgpKTtpZih0KXt2PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO1BvbHltZXIuZG9tKHYpLmNsYXNzTGlzdC5hZGQoIm9wLWRlc2NyaXB0aW9uIik7cS5jaGVja2JveC5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLHk9Pnt0aGlzLl9oYW5kbGVMZWFmTm9kZVNlbGVjdGVkKGYsdCx5LnRhcmdldC5jaGVja2VkKX0sITEpO1BvbHltZXIuZG9tKHYpLmFwcGVuZENoaWxkKHEuY2hlY2tib3gpO3Euc2V0TGV2ZWxEb20odik7dmFyIEE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpO0EudGV4dENvbnRlbnQ9IlsiK3Qub3BfdHlwZSsiXSI7QS5zZXRBdHRyaWJ1dGUoImNsYXNzIiwib3AtdHlwZSIpO1BvbHltZXIuZG9tKHYpLmFwcGVuZENoaWxkKEEpOwpBPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTtBLnRleHRDb250ZW50PXI7QS5zZXRBdHRyaWJ1dGUoImNsYXNzIiwib3AtdGl0bGUtbGVhZiIpO0EuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCgpPT57Y29uc3QgeT10aGlzLl9nZXREZXZpY2VBbmROb2RlTmFtZXMocixnKTt0aGlzLm5vZGVDbGlja2VkKHlbMF0seVsxXSl9LCExKTtQb2x5bWVyLmRvbSh2KS5hcHBlbmRDaGlsZChBKTtwLnB1c2godil9ZWxzZSBxLmNoZWNrYm94LmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIseT0+e3RoaXMuX2hhbmRsZU1ldGFOb2RlQ2hhbmdlKHEsZix5LnRhcmdldC5jaGVja2VkKX0pLG0ucHVzaCh0aGlzLl9yZW5kZXJMZXZlbChyLGwscSxmKSl9KTthPXE9PntQb2x5bWVyLmRvbShrKS5hcHBlbmRDaGlsZChxKX07Xy5mb3JFYWNoKHAsYSk7Xy5mb3JFYWNoKG0sYSk7UG9seW1lci5kb20oZykuYXBwZW5kQ2hpbGQoayk7cmV0dXJuIGd9LF9nZXRMZWFmRGVidWdXYXRjaGVzKGEsYyl7YS5kZWJ1Z1dhdGNoPwpjLnB1c2goYS5kZWJ1Z1dhdGNoKTpfLmZvckVhY2goYS5jaGlsZHJlbixkPT57dGhpcy5fZ2V0TGVhZkRlYnVnV2F0Y2hlcyhkLGMpfSl9LF9nZXREZXZpY2VBbmROb2RlTmFtZXMoYSxjKXtmb3IoYT1bYV07Oyl7Y29uc3QgZD1jLmdldEF0dHJpYnV0ZSgibGV2ZWwtbmFtZSIpO2lmKG51bGw9PWQpYnJlYWs7ZWxzZSBhLnB1c2goZCk7Yz1Qb2x5bWVyLmRvbShjKS5wYXJlbnROb2RlLnBhcmVudE5vZGV9YS5yZXZlcnNlKCk7cmV0dXJuIGltLmFzc2VtYmxlRGV2aWNlQW5kTm9kZU5hbWVzKGEpfSxfaGFuZGxlTWV0YU5vZGVDaGFuZ2UoYSxjLGQpe2xldCBmPVtdO3RoaXMuX2dldExlYWZEZWJ1Z1dhdGNoZXMoYSxmKTtfLmZvckVhY2goZixnPT57dGhpcy5faGFuZGxlTGVhZk5vZGVTZWxlY3RlZChjLGcsZCl9KX0sX2hhbmRsZUxlYWZOb2RlU2VsZWN0ZWQoYSxjLGQpe2NvbnN0IGY9Yy5kZXZpY2VfbmFtZSsiLyIrYy5ub2RlX25hbWU7ZD90aGlzLl9zZWxlY3RlZERlYnVnV2F0Y2hNYXBwaW5nW2ZdPQpjOmRlbGV0ZSB0aGlzLl9zZWxlY3RlZERlYnVnV2F0Y2hNYXBwaW5nW2ZdO2EoYyxkKX0sX2hhbmRsZUZvcmNlTm9kZShhLGMpe3RoaXMuc2V0KCJfZmlsdGVySW5wdXQiLCIiKTtzZXRUaW1lb3V0KCgpPT57aWYobnVsbCE9YSYmbnVsbCE9dGhpcy5fbGV2ZWxOYW1lMkNvbnRhaW5lcil7dmFyIGQ9aW0uc3BsaXROb2RlTmFtZShhKTtmb3IobGV0IGc9MTtnPD1kLmxlbmd0aDsrK2cpe3ZhciBmPWQuc2xpY2UoMCxnKS5qb2luKCIvIik7Y29uc3QgbD10aGlzLl9sZXZlbE5hbWUyTm9kZVtmXTtudWxsIT1sJiZudWxsIT1sLmxldmVsRG9tJiZsLmxldmVsRG9tLnNjcm9sbEludG9WaWV3KHtibG9jazoiY2VudGVyIixiZWhhdmlvdXI6InNtb290aCJ9KTtnPGQubGVuZ3RoP251bGwhPXRoaXMuX2xldmVsTmFtZTJDb250YWluZXJbZl0mJnRoaXMuX2xldmVsTmFtZTJDb250YWluZXJbZl0uc2V0QXR0cmlidXRlKCJvcGVuZWQiLCEwKToobC5kZWJ1Z1dhdGNofHx0aGlzLl9oYW5kbGVNZXRhTm9kZUNoYW5nZShsLApsLmRlYnVnV2F0Y2hDaGFuZ2UsITApLGMmJihsLnNldFRvQWxsQ2hlY2tlZEV4dGVybmFsbHkoKSwoZj1sLmRlYnVnV2F0Y2gpJiZudWxsPT10aGlzLl9zZWxlY3RlZERlYnVnV2F0Y2hNYXBwaW5nW2Yubm9kZV9uYW1lXSYmKHRoaXMuX3NlbGVjdGVkRGVidWdXYXRjaE1hcHBpbmdbYV09ZikpLG51bGwhPXRoaXMuX2hpZ2hsaWdodGVkTGV2ZWxEb20mJnRoaXMuX2hpZ2hsaWdodGVkTGV2ZWxEb20uY2xhc3NMaXN0LnJlbW92ZSgiaGlnaGxpZ2h0ZWQiKSxsLmxldmVsRG9tLmNsYXNzTGlzdC5hZGQoImhpZ2hsaWdodGVkIiksdGhpcy5zZXQoIl9oaWdobGlnaHRlZExldmVsRG9tIixsLmxldmVsRG9tKSl9fX0sMjApfSxfaGFuZGxlRm9yY2VOb2RlRXhwYW5kQW5kQ2hlY2soYSl7dGhpcy5faGFuZGxlRm9yY2VOb2RlKGEsITApfSxfaGFuZGxlRm9yY2VOb2RlRXhwYW5kKGEpe3RoaXMuX2hhbmRsZUZvcmNlTm9kZShhLCExKX19KTsKPC9zY3JpcHQ+CjwvZG9tLW1vZHVsZT4KCgoKCgo8ZG9tLW1vZHVsZSBpZD0idGYtc2Vzc2lvbi1ydW5zLXZpZXciPgogIDx0ZW1wbGF0ZT4KICAgIDxkaXYgY2xhc3M9InNlc3Npb24tcnVucy1kaXYiPgogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5TZXNzaW9uIFJ1bnM8L2Rpdj4KICAgICAgPHRhYmxlIGlkPSJzZXNzaW9uLXJ1bnMtdGFibGUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2Vzc2lvbi1ydW5zLXRhYmxlIj4KICAgICAgICA8dHIgYWxpZ249ImxlZnQiPgogICAgICAgICAgPHRoPkZlZWRzPC90aD4KICAgICAgICAgIDx0aD5GZXRjaGVzPC90aD4KICAgICAgICAgIDx0aD5UYXJnZXRzPC90aD4KICAgICAgICAgIDx0aD4jKERldmljZXMpPC90aD4KICAgICAgICAgIDx0aD5Db3VudDwvdGg+CiAgICAgICAgPC90cj4KICAgICAgPC90YWJsZT4KICAgIDwvZGl2PgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcGFkZGluZzogMjBweCAwOwogICAgICB9CgogICAgICAuc2VjdGlvbi10aXRsZSB7CiAgICAgICAgZm9udC1zaXplOiAxMTAlOwogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICB9CiAgICAgIDpob3N0IC5pbmRlbnRlZC1sZXZlbC1jb250YWluZXIgLmNvbnRlbnQtY29udGFpbmVyIHsKICAgICAgICBtYXJnaW46IDAgMCAwIDEwcHg7CiAgICAgIH0KCiAgICAgIC8qIFRPRE8oY2Fpcyk6IFRoaXMgbmVlZHMgd29yazogdGhlIHRhYmxlIHNob3VsZG4ndCBnZXQgdG9vIHdpZGUgd2hlbgogICAgICAgICB0aGVyZSBhcmUgbWFueSBmZWVkcy9mZXRjaGVzL3Rhcmd0ZSBuYW1lcy4gKi8KICAgICAgLnNlc3Npb24tcnVucy10YWJsZSB7CiAgICAgICAgYWxpZ24tY29udGVudDogbGVmdDsKICAgICAgICBhbGlnbi1pdGVtczogbGVmdDsKICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OwogICAgICAgIGZvbnQtc2l6ZTogOTAlOwogICAgICAgIGJvcmRlci1zdHlsZTogc29saWQgMXB4IGJsYWNrOwogICAgICAgIHRhYmxlLWxheW91dDogZml4ZWQ7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgd29yZC1icmVhazogYnJlYWstYWxsOwogICAgICAgIHBhZGRpbmctdG9wOiAzcHg7CiAgICAgICAgcGFkZGluZy1sZWZ0OiAzcHg7CiAgICAgICAgcGFkZGluZy1yaWdodDogM3B4OwogICAgICAgIGJveC1zaGFkb3c6IDNweCAzcHggI2RkZDsKICAgICAgfQogICAgICAuYWN0aXZlLXNlc3Npb24tcnVuIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmUwOwogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICB9CiAgICAgIC5zb2xlLWFjdGl2ZS1zZXNzaW9uLXJ1biB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDE3MiwgMjMyLCAxODgpOwogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICB9CgogICAgICAubm9kZS1vci10ZW5zb3ItZWxlbWVudCB7CiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICB9CgogICAgICAubm9kZS1vci10ZW5zb3ItZWxlbWVudDpob3ZlciB7CiAgICAgICAgY29sb3I6IGJsdWU7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KICA8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdGYtZGVidWdnZXItZGFzaGJvYXJkL3RmLXNlc3Npb24tcnVucy12aWV3Lmh0bWwuanMKUG9seW1lcih7aXM6InRmLXNlc3Npb24tcnVucy12aWV3Iixwcm9wZXJ0aWVzOntsYXRlc3RTZXNzaW9uUnVuOk9iamVjdCxzZXNzaW9uUnVuS2V5VG9EZXZpY2VOYW1lczpPYmplY3Qsc29sZUFjdGl2ZTpCb29sZWFuLG5vZGVPclRlbnNvckNsaWNrZWQ6RnVuY3Rpb24sX3J1bktleTJDb3VudDp7dHlwZTpPYmplY3QsdmFsdWU6e319LF9ydW5LZXkyTnVtRGV2aWNlczp7dHlwZTpPYmplY3QsdmFsdWU6e319LF9hY3RpdmVSdW5LZXk6U3RyaW5nfSxvYnNlcnZlcnM6WyJyZW5kZXJMYXRlc3QobGF0ZXN0U2Vzc2lvblJ1bikiLCJzZXRTb2xlQWN0aXZlU3RhdHVzKHNvbGVBY3RpdmUpIl0scmVuZGVyTGF0ZXN0KGEpe2E9SlNPTi5zdHJpbmdpZnkoYSk7dGhpcy5fcnVuS2V5MkNvdW50W2FdPXZvaWQgMD09PXRoaXMuX3J1bktleTJDb3VudFthXT8xOnRoaXMuX3J1bktleTJDb3VudFthXSsxO3ZvaWQgMD09PXRoaXMuX3J1bktleTJOdW1EZXZpY2VzW2FdJiYodGhpcy5fcnVuS2V5Mk51bURldmljZXNbYV09CjApO3RoaXMuX2FjdGl2ZVJ1bktleT1hO3RoaXMuX3JlbmRlclNlc3Npb25SdW5UYWJsZSgpfSx1cGRhdGVOdW1EZXZpY2VzKGEpe251bGwhPXRoaXMuX2FjdGl2ZVJ1bktleSYmKHRoaXMuX3J1bktleTJOdW1EZXZpY2VzW3RoaXMuX2FjdGl2ZVJ1bktleV09YSx0aGlzLl9yZW5kZXJTZXNzaW9uUnVuVGFibGUoKSl9LHNldFNvbGVBY3RpdmVTdGF0dXMoKXt0aGlzLl9yZW5kZXJTZXNzaW9uUnVuVGFibGUoKX0sX3JlbmRlclNlc3Npb25SdW5UYWJsZSgpe3RoaXMuX2NsZWFyVGFibGUoKTt0aGlzLl9yZW5kZXJIZWFkZXIoKTtsZXQgYTtmb3IoY29uc3QgZCBpbiB0aGlzLl9ydW5LZXkyQ291bnQpaWYodGhpcy5fcnVuS2V5MkNvdW50Lmhhc093blByb3BlcnR5KGQpKXt2YXIgYz1KU09OLnBhcnNlKGQpOyhjPXRoaXMuX3JlbmRlclJvdyhjLHRoaXMuX3J1bktleTJOdW1EZXZpY2VzW2RdLHRoaXMuX3J1bktleTJDb3VudFtkXSx0aGlzLl9hY3RpdmVSdW5LZXk9PT1kLHRoaXMuc29sZUFjdGl2ZSkpJiYKKGE9Yyl9YSYmKFBvbHltZXIuZG9tKHRoaXMuJCQoIiNzZXNzaW9uLXJ1bnMtdGFibGUiKSkucGFyZW50Tm9kZS5wYXJlbnROb2RlLnNjcm9sbFRvcD1hLm9mZnNldFRvcCl9LF9jbGVhclRhYmxlKCl7Y29uc3QgYT10aGlzLiQkKCIjc2Vzc2lvbi1ydW5zLXRhYmxlIik7Zm9yKDthLmZpcnN0Q2hpbGQ7KWEucmVtb3ZlQ2hpbGQoYS5maXJzdENoaWxkKX0sX3JlbmRlckhlYWRlcigpe2NvbnN0IGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidHIiKSxjPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRoIik7Yy50ZXh0Q29udGVudD0iRmVlZHMiO2NvbnN0IGQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGgiKTtkLnRleHRDb250ZW50PSJGZXRjaGVzIjtjb25zdCBmPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRoIik7Zi50ZXh0Q29udGVudD0iVGFyZ2V0cyI7Y29uc3QgZz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0aCIpO2cudGV4dENvbnRlbnQ9IiMoRGV2aWNlcykiO2NvbnN0IGw9CmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRoIik7bC50ZXh0Q29udGVudD0iQ291bnQiO2EuYXBwZW5kQ2hpbGQoYyk7YS5hcHBlbmRDaGlsZChkKTthLmFwcGVuZENoaWxkKGYpO2EuYXBwZW5kQ2hpbGQoZyk7YS5hcHBlbmRDaGlsZChsKTtQb2x5bWVyLmRvbSh0aGlzLiQkKCIjc2Vzc2lvbi1ydW5zLXRhYmxlIikpLmFwcGVuZENoaWxkKGEpfSxfcmVuZGVyUm93KGEsYyxkLGYsZyl7Y29uc3QgbD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ciIpLGs9dGhpcy5fcmVuZGVyR3JhcGhFbGVtZW50cyhhLmZlZWRzKSxtPXRoaXMuX3JlbmRlckdyYXBoRWxlbWVudHMoYS5mZXRjaGVzKTthPXRoaXMuX3JlbmRlckdyYXBoRWxlbWVudHMoYS50YXJnZXRzKTtjb25zdCBwPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7cC50ZXh0Q29udGVudD1jO2M9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTtjLnRleHRDb250ZW50PWQ7bC5hcHBlbmRDaGlsZChrKTtsLmFwcGVuZENoaWxkKG0pOwpsLmFwcGVuZENoaWxkKGEpO2wuYXBwZW5kQ2hpbGQocCk7bC5hcHBlbmRDaGlsZChjKTtmJiYoZz9sLnNldEF0dHJpYnV0ZSgiY2xhc3MiLCJzb2xlLWFjdGl2ZS1zZXNzaW9uLXJ1biIpOmwuc2V0QXR0cmlidXRlKCJjbGFzcyIsImFjdGl2ZS1zZXNzaW9uLXJ1biIpKTtQb2x5bWVyLmRvbSh0aGlzLiQkKCIjc2Vzc2lvbi1ydW5zLXRhYmxlIikpLmFwcGVuZENoaWxkKGwpO2lmKGYpcmV0dXJuIGx9LF9yZW5kZXJHcmFwaEVsZW1lbnRzKGEpe2NvbnN0IGM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTtfLmZvckVhY2goYSxkPT57Y29uc3QgZj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtmLnRleHRDb250ZW50PWQ7Zi5zZXRBdHRyaWJ1dGUoImNsYXNzIiwibm9kZS1vci10ZW5zb3ItZWxlbWVudCIpO2YuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCgpPT57dGhpcy5ub2RlT3JUZW5zb3JDbGlja2VkKGQpfSk7Yy5hcHBlbmRDaGlsZChmKX0pO3JldHVybiBjfX0pOwo8L3NjcmlwdD4KPC9kb20tbW9kdWxlPgoKCgoKCjxkb20tbW9kdWxlIGlkPSJ0Zi1zb3VyY2UtY29kZS12aWV3Ij4KICA8dGVtcGxhdGU+CiAgICA8ZGl2IGlkPSJmdWxsU3RhY2tEaWFsb2ciIGhpZGRlbiQ9IltbIV9mdWxsU3RhY2tTaG93bl1dIj4KICAgICAgPGRpdiBpZD0iZnVsbC1zdGFjay10aXRsZSI+CiAgICAgICAgPHBhcGVyLWljb24tYnV0dG9uIGljb249ImZpbHRlci1saXN0IiBkaXNhYmxlZD0idHJ1ZSI+CiAgICAgICAgPC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgICBGdWxsIFN0YWNrIFRyYWNlIG9mIE5vZGU6CiAgICAgICAgPGRpdiBpZD0iZnVsbC1zdGFjay1ub2RlLW5hbWUiPiJbW19mdWxsU3RhY2tOb2RlTmFtZV1dIjwvZGl2PgogICAgICAgIDxwYXBlci1pY29uLWJ1dHRvbiBpY29uPSJjbG9zZSIgaWQ9ImNsb3NlLWZ1bGwtc3RhY2stYnV0dG9uIiB0aXRsZT0iQ2xvc2UgRnVsbCBTdGFjayIgb24tdGFwPSJfY2xvc2VGdWxsU3RhY2tEaWFsb2ciPgogICAgICAgIDwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgIDwvZGl2PgogICAgICA8dWwgaWQ9ImZ1bGwtc3RhY2stY29udGVudCI+PC91bD4KICAgIDwvZGl2PgogICAgPHBhcGVyLXRhYnMgaWQ9InNvdXJjZS1maWxlcy10YWJzIiBzZWxlY3RlZD0ie3tfZmlsZVBhdGhTZWxlY3RlZH19Ij4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tfc2hvcnRGaWxlUGF0aHNdXSI+CiAgICAgICAgPHBhcGVyLXRhYiBpZD0iW1tpdGVtLmlkXV0iPltbaXRlbS5uYW1lXV08L3BhcGVyLXRhYj4KICAgICAgPC90ZW1wbGF0ZT4KICAgIDwvcGFwZXItdGFicz4KICAgIDxkaXYgaWQ9InNvdXJjZS1maWxlLWNvbnRlbnQiIGNsYXNzPSJzb3VyY2UtY29udGVudCI+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX2ZpbGVMaW5lc11dIj4KICAgICAgICA8ZGl2IGNsYXNzJD0ie3tpdGVtLnNvdXJjZUNsYXNzfX0iIGlkPSJzb3VyY2UtbGluZS1bW2l0ZW0ubGluZW5vXV0iPgogICAgICAgICAgPHNwYW4gY2xhc3M9InNvdXJjZS1saW5lLW51bWJlciIgaWQ9InNvdXJjZS1saW5lbm8tW1tpdGVtLmxpbmVub11dIj4KICAgICAgICAgICAgW1tpdGVtLmxpbmVub11dCiAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICA8c3BhbiBjbGFzcz0ic291cmNlLWxpbmUtbm9kZS10b2dnbGUiIGlkPSJzb3VyY2UtbGluZS1ub2RlLXRvZ2dsZS1bW2l0ZW0ubGluZW5vXV0iPgogICAgICAgICAgICBbW2l0ZW0ubnVtTm9kZXNdXQogICAgICAgICAgPC9zcGFuPgogICAgICAgICAgPHNwYW4gY2xhc3M9InNvdXJjZS1saW5lLXRleHQiIGlkPSJzb3VyY2UtbGluZS10ZXh0LVtbaXRlbS5saW5lbm9dXSI+CiAgICAgICAgICAgIFtbaXRlbS50ZXh0XV0KICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgIDxkaXYgY2xhc3M9InNvdXJjZS1saW5lLW5vZGVzIiBpZD0ic291cmNlLWxpbmUtbm9kZXMtW1tpdGVtLmxpbmVub11dIj48L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgIDwvZGl2PgogICAgPHN0eWxlPgogICAgICAjc291cmNlLWZpbGVzLXRhYnMgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBoZWlnaHQ6IDglOwogICAgICB9CiAgICAgIC5zb3VyY2UtY29udGVudCB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGhlaWdodDogOTAlOwogICAgICAgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7CiAgICAgICAgZm9udC1zaXplOiA5MCU7CiAgICAgICAgb3ZlcmZsb3cteDogc2Nyb2xsOwogICAgICAgIG92ZXJmbG93LXk6IHNjcm9sbDsKICAgICAgfQogICAgICAuc291cmNlLWNvbnRlbnQgOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZjAwOwogICAgICB9CiAgICAgIC5oaWdobGlnaHRlZC1zb3VyY2UtbGluZSB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZmZlMDsKICAgICAgfQogICAgICAuc291cmNlLWxpbmUtbnVtYmVyIHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgY29sb3I6IGxpZ2h0Ymx1ZTsKICAgICAgICB3aWR0aDogMmVtOwogICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OwogICAgICAgIHBhZGRpbmctcmlnaHQ6IDFlbTsKICAgICAgfQogICAgICAuc291cmNlLWxpbmUtbm9kZS10b2dnbGUgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBjb2xvcjogYmx1ZTsKICAgICAgICB3aWR0aDogNWVtOwogICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OwogICAgICAgIHBhZGRpbmctcmlnaHQ6IDFlbTsKICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgIH0KICAgICAgLnNvdXJjZS1saW5lLW5vZGVzIHsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDRlbTsKICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgY29sb3I6IGJsdWU7CiAgICAgICAgbWFyZ2luLXRvcDogMGVtOwogICAgICAgIG1hcmdpbi1ib3R0b206IDBlbTsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDFlbTsKICAgICAgfQogICAgICAuc291cmNlLWxpbmUtbm9kZS1lbnRyeSB7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiAxZW07CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogeWVsbG93OwogICAgICB9CiAgICAgIC5zb3VyY2UtbGluZS1ub2RlcyBzcGFuIHsKICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogeWVsbG93OwogICAgICB9CiAgICAgIC5zb3VyY2UtbGluZS10ZXh0IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmU7CiAgICAgICAgd29yZC13cmFwOiBicmVhay13b3JkOwogICAgICB9CiAgICAgICNmdWxsU3RhY2tEaWFsb2cgewogICAgICAgIHotaW5kZXg6IDEwMDA7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMTAlOwogICAgICAgIGxlZnQ6IDUwJTsKICAgICAgICB3aWR0aDogNDUlOwogICAgICAgIGhlaWdodDogODUlOwogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlOwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIGdyYXk7CiAgICAgICAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKICAgICAgICBib3gtc2hhZG93OiAzcHggM3B4ICNkZGQ7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgfQogICAgICAjZnVsbC1zdGFjay10aXRsZSB7CiAgICAgICAgZm9udC1zaXplOiAxMTAlOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlOwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICBmb250LXdlaWdodDogYm9sZDsKICAgICAgfQogICAgICAjZnVsbC1zdGFjay1ub2RlLW5hbWUgewogICAgICAgIGNvbG9yOiBibHVlOwogICAgICB9CiAgICAgIDpob3N0ICNmdWxsLXN0YWNrLWNvbnRlbnQgewogICAgICAgIHBhZGRpbmctdG9wOiAxZW07CiAgICAgICAgcGFkZGluZy1yaWdodDogMC41ZW07CiAgICAgICAgbWFyZ2luLXRvcDogMC41ZW07CiAgICAgICAgZm9udC1zaXplOiA5MCU7CiAgICAgICAgd29yZC13cmFwOiBicmVhay13b3JkOwogICAgICAgIG92ZXJmbG93OiBhdXRvOwogICAgICB9CiAgICAgIC5zdGFjay1mcmFtZS1jbGlja2FibGUgewogICAgICAgIGNvbG9yOiBibHVlOwogICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgfQogICAgICAuc3RhY2stZnJhbWUtbm9uY2xpY2thYmxlIHsKICAgICAgICBjb2xvcjogIzU1NTsKICAgICAgfQogICAgICAjY2xvc2UtZnVsbC1zdGFjay1idXR0b24gewogICAgICAgIGZsb2F0OiByaWdodDsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgogIDxzY3JpcHQ+Ly9+fldFQlBBVEh+fi90Zi1kZWJ1Z2dlci1kYXNoYm9hcmQvdGYtc291cmNlLWNvZGUtdmlldy5odG1sLmpzClBvbHltZXIoe2lzOiJ0Zi1zb3VyY2UtY29kZS12aWV3Iixwcm9wZXJ0aWVzOntyZXF1ZXN0TWFuYWdlcjp7dHlwZTpPYmplY3QsdmFsdWU6bnVsbH0sZm9jdXNOb2RlTmFtZTp7dHlwZTpTdHJpbmcsdmFsdWU6bnVsbH0sX29sZEZvY3VzTm9kZU5hbWU6e3R5cGU6U3RyaW5nLHZhbHVlOm51bGx9LGRlYnVnV2F0Y2hlczp7dHlwZTpBcnJheSx2YWx1ZTpbXX0sbm9kZUNsaWNrZWQ6e3R5cGU6RnVuY3Rpb24sdmFsdWU6bnVsbH0sY29udGludWVUb05vZGU6e3R5cGU6RnVuY3Rpb24sdmFsdWU6bnVsbH0sX2hpZ2hsaWdodGVkRWxlbWVudHM6e3R5cGU6QXJyYXksdmFsdWU6W119LF9maWxlUGF0aFNlbGVjdGVkOk51bWJlcixfZnVsbEZpbGVQYXRoczp7dHlwZTpBcnJheSx2YWx1ZTpudWxsfSxfc2hvcnRGaWxlUGF0aHM6e3R5cGU6QXJyYXksdmFsdWU6bnVsbH0sX2ZpbGVMaW5lczp7dHlwZTpBcnJheSx2YWx1ZTpudWxsfSxfbm9kZU5hbWUyRGV2aWNlTmFtZTp7dHlwZTpPYmplY3QsdmFsdWU6bnVsbH0sCl9ub2RlTmFtZTJCYXNlRXhwYW5kZWROb2RlTmFtZTp7dHlwZTpPYmplY3QsdmFsdWU6bnVsbH0sX25vZGVOYW1lMk5vZGVFbGVtZW50czp7dHlwZTpPYmplY3QsdmFsdWU6bnVsbH0sX25vZGVOYW1lMlN0YWNrVG9wTm9kZUVsZW1lbnQ6e3R5cGU6T2JqZWN0LHZhbHVlOm51bGx9LF9zZXRIaWdodGxpZ2h0T3JpZ2luTm9kZUVsZW1lbnQ6e3R5cGU6T2JqZWN0LHZhbHVlOm51bGx9LF9mdWxsU3RhY2tTaG93bjp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxfZnVsbFN0YWNrTm9kZU5hbWU6e3R5cGU6U3RyaW5nLHZhbHVlOm51bGx9LF9yZW5kZXJEZWxheU1pbGxpczp7dHlwZTpOdW1iZXIsdmFsdWU6NTAscmVhZG9ubHk6ITB9fSxvYnNlcnZlcnM6WyJfcmVuZGVyRmlsZShfZmlsZVBhdGhTZWxlY3RlZCkiLCJfZm9jdXNPbk5vZGUoZm9jdXNOb2RlTmFtZSkiXSxyZW5kZXIoYSl7bnVsbCE9YSYmdGhpcy5zZXQoIl9kZWJ1Z1dhdGNoZXMiLGEpO3RoaXMuX3F1ZXJ5U291cmNlQ29kZUVuZFBvaW50KHttb2RlOiJwYXRocyJ9KS50aGVuKGM9Pgp7dGhpcy5zZXQoIl9mdWxsRmlsZVBhdGhzIixjLnBhdGhzKTtjb25zdCBkPWMucGF0aHMubWFwKGY9Pih7aWQ6ZixuYW1lOnRoaXMuX3Nob3J0ZW5QYXRoKGYsYy5wYXRocyl9KSk7dGhpcy5zZXQoIl9zaG9ydEZpbGVQYXRocyIsZCk7MDxkLmxlbmd0aCYmdGhpcy5zZXQoIl9maWxlUGF0aFNlbGVjdGVkIiwwKX0pfSxfc2hvcnRlblBhdGgoYSl7YT1hLnJlcGxhY2UoL1xcL2csIi8iKTthPWEuc3BsaXQoIi8iKTtyZXR1cm4gYVthLmxlbmd0aC0xXX0sX3JlbmRlckZpbGUoYSl7aWYobnVsbCE9YSl7dmFyIGM9dGhpcy5fc2hvcnRGaWxlUGF0aHNbYV0uaWQ7dGhpcy5fcXVlcnlTb3VyY2VDb2RlRW5kUG9pbnQoe21vZGU6ImNvbnRlbnQiLGZpbGVfcGF0aDpjfSkudGhlbihkPT57Y29uc3QgZj1bXSxnPWQuY29udGVudFtjXSxsPWQubGluZW5vX3RvX29wX25hbWVfYW5kX3N0YWNrX3BvcztkPXt9O2Zvcih2YXIgayBpbiBsKWwuaGFzT3duUHJvcGVydHkoaykmJihkW2tdPWxba10ubGVuZ3RoKTsKdGhpcy5fZmlsdGVyRmlsZVRyYWNlYmFja3NCeURlYnVnV2F0Y2hlcyhsKTtmb3Ioaz0wO2s8Zy5sZW5ndGg7KytrKXtjb25zdCBwPWsrMTtmLnB1c2goe2xpbmVubzpwLG51bU5vZGVzOm51bGwhPWxbcF0/U3RyaW5nKGxbcF0ubGVuZ3RoKSsiLyIrU3RyaW5nKGRbcF0pKyIgXHUyNWJjIjoiIix0ZXh0OnRoaXMuX2h0bWxFc2NhcGUoZ1trXSl9KX10aGlzLnNldCgiX2ZpbGVMaW5lcyIsZik7Y29uc3QgbT10aGlzO3NldFRpbWVvdXQoKCk9Pntjb25zdCBwPXt9LHE9e307Zm9yKGNvbnN0IHQgaW4gbCl7aWYoIWwuaGFzT3duUHJvcGVydHkodCkpY29udGludWU7Zm9yKHZhciByPW0uJCQoIiNzb3VyY2UtbGluZS1ub2Rlcy0iK3QpO3IuZmlyc3RDaGlsZDspci5yZW1vdmVDaGlsZChyLmZpcnN0Q2hpbGQpO2NvbnN0IHY9bFt0XTt2LnNvcnQoZnVuY3Rpb24oQSx5KXtyZXR1cm4gQVswXTx5WzBdPy0xOkFbMF0+eVswXT8xOjB9KTtmb3IobGV0IEE9MDtBPHYubGVuZ3RoOysrQSl7Y29uc3QgeT0KdltBXVswXSx4PXZbQV1bMV0sQz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxGPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTtGLnNldEF0dHJpYnV0ZSgiY2xhc3MiLCJzb3VyY2UtbGluZS1ub2RlLWVudHRyeSIpO0Yuc2V0QXR0cmlidXRlKCJzb3VyY2VMaW5lbm8iLHQpO0YudGV4dENvbnRlbnQ9eTtGLmFkZEV2ZW50TGlzdGVuZXIoInRhcCIsKCk9Pnt0aGlzLm5vZGVDbGlja2VkKHRoaXMuX25vZGVOYW1lMkRldmljZU5hbWVbeV0sdGhpcy5fbm9kZU5hbWUyQmFzZUV4cGFuZGVkTm9kZU5hbWVbeV0sITApfSk7Y29uc3QgRD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJwYXBlci1pY29uLWJ1dHRvbiIpO0Quc2V0QXR0cmlidXRlKCJpY29uIiwiZmlsdGVyLWxpc3QiKTtELnNldEF0dHJpYnV0ZSgidGl0bGUiLCJTaG93IHN0YWNrIik7RC5hZGRFdmVudExpc3RlbmVyKCJ0YXAiLCgpPT57dGhpcy5faGlnaGxpZ2h0Tm9kZUVsZW1lbnRzKHkpO3RoaXMuc2V0KCJfZnVsbFN0YWNrTm9kZU5hbWUiLAp5KTt0aGlzLnNldCgiX2Z1bGxTdGFja1Nob3duIiwhMCk7dGhpcy5fcG9wdWxhdGVGdWxsU3RhY2soeSx0aGlzLl9mdWxsRmlsZVBhdGhzW3RoaXMuX2ZpbGVQYXRoU2VsZWN0ZWRdLE51bWJlcih0KSl9KTtjb25zdCBCPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInBhcGVyLWljb24tYnV0dG9uIik7Qi5zZXRBdHRyaWJ1dGUoImljb24iLCJmb3J3YXJkIik7Qi5zZXRBdHRyaWJ1dGUoInRpdGxlIiwiQ29udGludWUgdG8iKTtCLmFkZEV2ZW50TGlzdGVuZXIoInRhcCIsKCk9Pnt0aGlzLm5vZGVDbGlja2VkKHRoaXMuX25vZGVOYW1lMkRldmljZU5hbWVbeV0sdGhpcy5fbm9kZU5hbWUyQmFzZUV4cGFuZGVkTm9kZU5hbWVbeV0sITApO2NvbnN0IEc9dGhpcy5fbm9kZU5hbWUyRGV2aWNlTmFtZVt5XSxLPXRoaXMuX25vZGVOYW1lMkJhc2VFeHBhbmRlZE5vZGVOYW1lW3ldO3RoaXMuc2V0KCJfc2V0SGlnaHRsaWdodE9yaWdpbk5vZGVFbGVtZW50IixGKTt0aGlzLmNvbnRpbnVlVG9Ob2RlKEcsCkspfSk7Qy5hcHBlbmRDaGlsZChEKTtDLmFwcGVuZENoaWxkKEIpO0MuYXBwZW5kQ2hpbGQoRik7ci5hcHBlbmRDaGlsZChDKTtwLmhhc093blByb3BlcnR5KHkpfHwocFt5XT1bXSk7cFt5XS5wdXNoKEYpO3EuaGFzT3duUHJvcGVydHkoeSl8fChxW3ldPVtGLHhdKTt4PnFbeV1bMV0mJihxW3ldPVtGLHhdKX1yLnNldEF0dHJpYnV0ZSgiaGlkZGVuIiwhMCk7cj1tLiQkKCIjc291cmNlLWxpbmUtbm9kZS10b2dnbGUtIit0KTtudWxsPT1yLmdldEF0dHJpYnV0ZSgidGFwQ2FsbGJhY2tTZXQiKSYmKHIuYWRkRXZlbnRMaXN0ZW5lcigidGFwIiwoKT0+e20uX3RvZ2dsZUxpbmVOb2RlcyhOdW1iZXIodCkpfSksci5zZXRBdHRyaWJ1dGUoInRhcENhbGxiYWNrU2V0IiwhMCkpfW0uc2V0KCJfbm9kZU5hbWUyTm9kZUVsZW1lbnRzIixwKTtmb3IoY29uc3QgdCBpbiBxKXEuaGFzT3duUHJvcGVydHkodCkmJihxW3RdPXFbdF1bMF0pO20uc2V0KCJfbm9kZU5hbWUyU3RhY2tUb3BOb2RlRWxlbWVudCIsCnEpfSx0aGlzLl9yZW5kZXJEZWxheU1pbGxpcyl9KX19LF90b2dnbGVMaW5lTm9kZXMoYSxjPSExKXthPXRoaXMuJCQoIiNzb3VyY2UtbGluZS1ub2Rlcy0iK2EpO251bGw9PWEuZ2V0QXR0cmlidXRlKCJoaWRkZW4iKSYmITAhPT1jP2Euc2V0QXR0cmlidXRlKCJoaWRkZW4iLCEwKTphLnJlbW92ZUF0dHJpYnV0ZSgiaGlkZGVuIil9LF9maWx0ZXJGaWxlVHJhY2ViYWNrc0J5RGVidWdXYXRjaGVzKGEpe2NvbnN0IGM9dGhpcy5kZWJ1Z1dhdGNoZXMubWFwKGc9PmltLnJlbW92ZU5vZGVOYW1lQmFzZUV4cGFuc2lvbihnLm5vZGVfbmFtZSkpLGQ9e30sZj17fTtmb3IoY29uc3QgZyBvZiB0aGlzLmRlYnVnV2F0Y2hlcyl7Y29uc3QgbD1pbS5yZW1vdmVOb2RlTmFtZUJhc2VFeHBhbnNpb24oZy5ub2RlX25hbWUpO2RbbF09Zy5kZXZpY2VfbmFtZTtmW2xdPWcubm9kZV9uYW1lfXRoaXMuc2V0KCJfbm9kZU5hbWUyRGV2aWNlTmFtZSIsZCk7dGhpcy5zZXQoIl9ub2RlTmFtZTJCYXNlRXhwYW5kZWROb2RlTmFtZSIsCmYpO2Zvcihjb25zdCBnIGluIGEpYS5oYXNPd25Qcm9wZXJ0eShnKSYmKGFbZ109YVtnXS5maWx0ZXIobD0+Xy5pbmNsdWRlcyhjLGxbMF0pKSl9LF9xdWVyeVNvdXJjZUNvZGVFbmRQb2ludChhKXtjb25zdCBjPVBrLmdldFJvdXRlcigpLnBsdWdpblJvdXRlKCJkZWJ1Z2dlciIsIi9zb3VyY2VfY29kZSIpO2E9UGsuYWRkUGFyYW1zKGMsYSk7cmV0dXJuIHRoaXMucmVxdWVzdE1hbmFnZXIucmVxdWVzdChhKX0sX2h0bWxFc2NhcGUoYSl7cmV0dXJuIGEucmVwbGFjZSgvIC9nLCJcdTAwYTAiKX0sX2ZvY3VzT25Ob2RlKGEpe2lmKG51bGwhPWEpe3ZhciBjPXRoaXMuX3Nob3J0RmlsZVBhdGhzW3RoaXMuX2ZpbGVQYXRoU2VsZWN0ZWRdLmlkLGQ9dGhpczt0aGlzLl9xdWVyeVNvdXJjZUNvZGVFbmRQb2ludCh7bW9kZToib3BfdHJhY2ViYWNrIixvcF9uYW1lOmF9KS50aGVuKGY9Pntjb25zdCBnPWYub3BfdHJhY2ViYWNrW2FdO2Y9W107Zm9yKGxldCBrPTA7azxnLmxlbmd0aDsrK2spe2NvbnN0IG09Cmdba11bMV07Z1trXVswXT09PWMmJmYucHVzaChtKX1mb3IodmFyIGwgb2YgZC5faGlnaGxpZ2h0ZWRFbGVtZW50cylsLmNsYXNzTGlzdC5yZW1vdmUoImhpZ2hsaWdodGVkLXNvdXJjZS1saW5lIik7bD1bXTtmb3IoY29uc3QgayBvZiBmKWY9dGhpcy4kJCgiI3NvdXJjZS1saW5lLSIrayksbC5wdXNoKGYpLGYuY2xhc3NMaXN0LmFkZCgiaGlnaGxpZ2h0ZWQtc291cmNlLWxpbmUiKSxkLl90b2dnbGVMaW5lTm9kZXMoaywhMCk7ZC5zZXQoIl9oaWdobGlnaHRlZEVsZW1lbnRzIixsKTt0aGlzLl9oaWdobGlnaHROb2RlRWxlbWVudHMoYSl9KX19LF9oaWdobGlnaHROb2RlRWxlbWVudHMoYSl7aWYobnVsbCE9dGhpcy5fb2xkRm9jdXNOb2RlTmFtZSlmb3IoY29uc3QgYyBvZiB0aGlzLl9ub2RlTmFtZTJOb2RlRWxlbWVudHNbdGhpcy5fb2xkRm9jdXNOb2RlTmFtZV0pYy5zdHlsZVsiZm9udC13ZWlnaHQiXT0ibm9ybWFsIjtmb3IoY29uc3QgYyBvZiB0aGlzLl9ub2RlTmFtZTJOb2RlRWxlbWVudHNbYV0pYy5zdHlsZVsiZm9udC13ZWlnaHQiXT0KImJvbGQiO251bGw9PXRoaXMuX3NldEhpZ2h0bGlnaHRPcmlnaW5Ob2RlRWxlbWVudD90aGlzLl9ub2RlTmFtZTJTdGFja1RvcE5vZGVFbGVtZW50W2FdLnNjcm9sbEludG9WaWV3KHtibG9jazoiY2VudGVyIixiZWhhdmlvdXI6InNtb290aCJ9KTp0aGlzLnNldCgiX3NldEhpZ2h0bGlnaHRPcmlnaW5Ob2RlRWxlbWVudCIsbnVsbCk7dGhpcy5zZXQoIl9vbGRGb2N1c05vZGVOYW1lIixhKX0sX3BvcHVsYXRlRnVsbFN0YWNrKGEsYyxkKXt0aGlzLl9xdWVyeVNvdXJjZUNvZGVFbmRQb2ludCh7bW9kZToib3BfdHJhY2ViYWNrIixvcF9uYW1lOmF9KS50aGVuKGY9Pntjb25zdCBnPXRoaXMuJCQoIiNmdWxsLXN0YWNrLWNvbnRlbnQiKTtmb3IoO2cuZmlyc3RDaGlsZDspZy5yZW1vdmVDaGlsZChnLmZpcnN0Q2hpbGQpO2Zvcihjb25zdCBsIG9mIGYub3BfdHJhY2ViYWNrW2FdKXtjb25zdCBrPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImxpIiksbT1sWzBdLHA9TnVtYmVyKGxbMV0pO2sudGV4dENvbnRlbnQ9Cm0rIjogIitTdHJpbmcocCk7Xy5pbmNsdWRlcyh0aGlzLl9mdWxsRmlsZVBhdGhzLG0pPyhrLmNsYXNzTGlzdC5hZGQoInN0YWNrLWZyYW1lLWNsaWNrYWJsZSIpLGsuc3R5bGUuY29sb3I9ImJsdWUiLGsuc3R5bGVbInRleHQtZGVjb3JhdGlvbiJdPSJ1bmRlcmxpbmUiLGsuc3R5bGUuY3Vyc29yPSJwb2ludGVyIixtPT09YyYmcD09PWQmJihrLnN0eWxlWyJmb250LXdlaWdodCJdPSJib2xkIiksay5hZGRFdmVudExpc3RlbmVyKCJ0YXAiLCgpPT57dGhpcy5zZXQoIl9maWxlUGF0aFNlbGVjdGVkIix0aGlzLl9mdWxsRmlsZVBhdGhzLmluZGV4T2YobSkpO3NldFRpbWVvdXQoKCk9Pnt0aGlzLl90b2dnbGVMaW5lTm9kZXMocCwhMCk7Zm9yKGNvbnN0IHEgb2YgdGhpcy5fbm9kZU5hbWUyTm9kZUVsZW1lbnRzW2FdKU51bWJlcihxLmdldEF0dHJpYnV0ZSgic291cmNlTGluZW5vIikpPT09TnVtYmVyKHApJiYocS5zY3JvbGxJbnRvVmlldyh7YmxvY2s6ImNlbnRlciIsYmVoYXZpb3VyOiJzbW9vdGgifSksCnRoaXMuc2V0KCJfc2V0SGlnaHRsaWdodE9yaWdpbk5vZGVFbGVtZW50IixrKSx0aGlzLl9oaWdobGlnaHROb2RlRWxlbWVudHMoYSksYz09PW0mJmQ9PT1wfHx0aGlzLl9wb3B1bGF0ZUZ1bGxTdGFjayhhLG0scCkpfSwyKnRoaXMuX3JlbmRlckRlbGF5TWlsbGlzKX0pKTooay5jbGFzc0xpc3QuYWRkKCJzdGFjay1mcmFtZS1ub25jbGlja2FibGUiKSxrLnN0eWxlLmNvbG9yPSIjNTU1Iik7Zy5hcHBlbmRDaGlsZChrKX19KX0sX2Nsb3NlRnVsbFN0YWNrRGlhbG9nKCl7dGhpcy5zZXQoIl9mdWxsU3RhY2tTaG93biIsITEpfX0pOwo8L3NjcmlwdD4KPC9kb20tbW9kdWxlPgoKCgoKCjxkb20tbW9kdWxlIGlkPSJ0Zi10ZW5zb3ItZGF0YS1zdW1tYXJ5Ij4KICA8dGVtcGxhdGU+CiAgICA8c3BhbiBjbGFzcz0ic2VjdGlvbi10aXRsZSI+VGVuc29yIFZhbHVlIE92ZXJ2aWV3PC9zcGFuPgogICAgPGRpdiBpZD0idGVuc29yLWRhdGEtZGl2IiBjbGFzcz0idGVuc29yLWRhdGEtZGl2Ij4KICAgICAgPHRhYmxlIGlkPSJ0ZW5zb3ItZGF0YS10YWJsZSIgYWxpZ249ImxlZnQiIGNsYXNzPSJ0ZW5zb3ItZGF0YS10YWJsZSI+CiAgICAgICAgPHRoZWFkPgogICAgICAgICAgPHRyIGFsaWduPSJsZWZ0Ij4KICAgICAgICAgICAgPHRoPlRlbnNvcjwvdGg+CiAgICAgICAgICAgIDx0aD5Db3VudDwvdGg+CiAgICAgICAgICAgIDx0aD5EVHlwZTwvdGg+CiAgICAgICAgICAgIDx0aD5TaGFwZTwvdGg+CiAgICAgICAgICAgIDx0aCB3aWR0aD0iMjUlIj5WYWx1ZTwvdGg+CiAgICAgICAgICAgIDx0aCB3aWR0aD0iMjUlIj4KICAgICAgICAgICAgICBIZWFsdGggUGlsbAogICAgICAgICAgICAgIDxwYXBlci10b2dnbGUtYnV0dG9uIGlkPSJzaG93LWhlYWx0aC1waWxscyIgY2hlY2tlZD0ie3tfaGVhbHRoUGlsbHNFbmFibGVkfX0iPgogICAgICAgICAgICAgIDwvcGFwZXItdG9nZ2xlLWJ1dHRvbj4KICAgICAgICAgICAgICA8cGFwZXItY2FyZD4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImhlYWx0aC1waWxsLWxlZ2VuZCIgaWQ9ImhlYWx0aC1waWxsLWxlZ2VuZCI+PC9kaXY+CiAgICAgICAgICAgICAgPC9wYXBlci1jYXJkPgogICAgICAgICAgICA8L3RoPgogICAgICAgICAgICA8dGggd2lkdGg9IjUlIj48L3RoPgogICAgICAgICAgPC90cj4KICAgICAgICA8L3RoZWFkPgogICAgICAgIDx0Ym9keT48L3Rib2R5PgogICAgICA8L3RhYmxlPgogICAgPC9kaXY+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0ICN0ZW5zb3ItZGF0YS1kaXYgewogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICB9CiAgICAgIC5zZWN0aW9uLXRpdGxlIHsKICAgICAgICBmb250LXNpemU6IDExMCU7CiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICAgIH0KICAgICAgOmhvc3QgLmluZGVudGVkLWxldmVsLWNvbnRhaW5lciAuY29udGVudC1jb250YWluZXIgewogICAgICAgIG1hcmdpbjogMCAwIDAgMTBweDsKICAgICAgfQogICAgICA6aG9zdCAudGVuc29yLWRhdGEtdGFibGUgewogICAgICAgIGFsaWduLWNvbnRlbnQ6IGxlZnQ7CiAgICAgICAgYWxpZ24taXRlbXM6IGxlZnQ7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIHBhZGRpbmctdG9wOiAzcHg7CiAgICAgICAgcGFkZGluZy1sZWZ0OiAzcHg7CiAgICAgICAgcGFkZGluZy1yaWdodDogM3B4OwogICAgICAgIGJveC1zaGFkb3c6IDNweCAzcHggI2RkZDsKICAgICAgfQogICAgICA6aG9zdCAjdGVuc29yLWRhdGEtdGFibGUgdGggewogICAgICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7CiAgICAgIH0KICAgICAgOmhvc3QgLmFjdGl2ZS10ZW5zb3IgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmZmZTA7CiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICAgICAgYm9yZGVyOiBzb2xpZCAxcHggIzg4ODsKICAgICAgfQogICAgICA6aG9zdCAuaGlnaGxpZ2h0ZWQgewogICAgICAgIGNvbG9yOiByZWQ7CiAgICAgIH0KICAgICAgOmhvc3QgLmhlYWx0aC1waWxsLWxlZ2VuZCB7CiAgICAgICAgZmxvYXQ6IHJpZ2h0OwogICAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CiAgICAgIH0KICAgICAgOmhvc3QgI3Nob3ctaGVhbHRoLXBpbGxzIHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgIH0KICAgICAgLnZhbHVlLWV4cGFuc2lvbi1saW5rIHsKICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgIH0KICAgICAgLnZhbHVlLWV4cGFuc2lvbi1saW5rIDpob3ZlciB7CiAgICAgICAgY29sb3I6IGJsdWU7CiAgICAgIH0KICAgICAgLmhlYWx0aC1waWxsIDpob3ZlciB7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICB9CiAgICAgIC50ZW5zb3ItbmFtZSB7CiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICB9CiAgICAgIC50ZW5zb3ItbmFtZSA6aG92ZXIgewogICAgICAgIGNvbG9yOiBibHVlOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CiAgPHNjcmlwdD4vL35+V0VCUEFUSH5+L3RmLWRlYnVnZ2VyLWRhc2hib2FyZC90Zi10ZW5zb3ItZGF0YS1zdW1tYXJ5Lmh0bWwuanMKUG9seW1lcih7aXM6InRmLXRlbnNvci1kYXRhLXN1bW1hcnkiLHByb3BlcnRpZXM6e2xhdGVzdFRlbnNvckRhdGE6T2JqZWN0LGV4cGFuZEhhbmRsZXI6T2JqZWN0LGNvbnRpbnVlVG9DYWxsYmFjazpGdW5jdGlvbixoaWdobGlnaHRlZE5vZGVOYW1lOnt0eXBlOlN0cmluZyx2YWx1ZTpudWxsfSx0ZW5zb3JOYW1lQ2xpY2tlZDp7dHlwZTpGdW5jdGlvbix2YWx1ZTpudWxsfSxnZXRIZWFsdGhQaWxsOkZ1bmN0aW9uLF9oZWFsdGhQaWxsc0VuYWJsZWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMCxub3RpZnk6ITB9LF93YXRjaEtleXM6e3R5cGU6QXJyYXksdmFsdWU6W119LF93YXRjaEtleTJEYXRhOnt0eXBlOk9iamVjdCx2YWx1ZTp7fX0sX3dhdGNoS2V5MkNvdW50Ont0eXBlOk9iamVjdCx2YWx1ZTp7fX0sX3dhdGNoS2V5MkV4cGFuZEhhbmRsZXI6e3R5cGU6T2JqZWN0LHZhbHVlOnt9fSxfd2F0Y2hLZXkyVmFsdWVTaG9ydDp7dHlwZTpPYmplY3QsdmFsdWU6e319LF93YXRjaEtleTJSb3c6e3R5cGU6T2JqZWN0LAp2YWx1ZTp7fX0sX2FjdGl2ZVdhdGNoS2V5OlN0cmluZyxfaGVhbHRoUGlsbFdpZHRoOnt0eXBlOk51bWJlcix2YWx1ZToyMDAscmVhZG9ubHk6ITB9LF9oZWFsdGhQaWxsSGVpZ2h0Ont0eXBlOk51bWJlcix2YWx1ZTozMixyZWFkb25seTohMH19LG9ic2VydmVyczpbIl9yZW5kZXJMYXRlc3QobGF0ZXN0VGVuc29yRGF0YSwgZXhwYW5kSGFuZGxlcikiLCJfaGlnaGxpZ2h0KGhpZ2hsaWdodGVkTm9kZU5hbWUpIl0sbGlzdGVuZXJzOnsic2hvdy1oZWFsdGgtcGlsbHMuY2hhbmdlIjoiX3Nob3dIZWFsdGhQaWxsc0NoYW5nZWQifSxyZWFkeSgpe3RoaXMuX3JlbmRlckhlYWx0aFBpbGxMZWdlbmQoKX0sZW5hYmxlSGVhbHRoUGlsbHMoKXt0aGlzLnNldCgiX2hlYWx0aFBpbGxzRW5hYmxlZCIsITApO3RoaXMuX3JlbmRlckhlYWx0aFBpbGxMZWdlbmQoKX0sX3Nob3dIZWFsdGhQaWxsc0NoYW5nZWQoKXt0aGlzLl9oZWFsdGhQaWxsc0VuYWJsZWQ/dGhpcy5fcmVuZGVySGVhbHRoUGlsbExlZ2VuZCgpOgp0aGlzLl9jbGVhckhlYWx0aFBpbGxMZWdlbmQoKTt0aGlzLl9yZW5kZXJBbGwoKX0sX3JlbmRlckFsbCgpe3RoaXMuX2NsZWFyVGVuc29yRGF0YVRhYmxlKCk7Zm9yKGNvbnN0IGEgb2YgdGhpcy5fd2F0Y2hLZXlzKXRoaXMuX3JlbmRlckxhdGVzdCh0aGlzLl93YXRjaEtleTJEYXRhW2FdLHRoaXMuX3dhdGNoS2V5MkV4cGFuZEhhbmRsZXJbYV0pfSxfdGVuc29yRGF0YTJXYXRjaEtleShhKXtyZXR1cm4gYS5kZXZpY2VOYW1lKyIvIithLnRlbnNvck5hbWUrIjoiK2EuZGVidWdPcH0sX3JlbmRlckxhdGVzdChhLGMpe2lmKGEpe3ZhciBkPXRoaXMuX3RlbnNvckRhdGEyV2F0Y2hLZXkoYSksZj1udWxsOyJVbmluaXRpYWxpemVkIiE9PWEuZHR5cGUmJiJVbnN1cHBvcnRlZCIhPT1hLmR0eXBlJiYoZj0oKT0+YyhhKSk7dmFyIGc9bnVsbCE9YS52YWx1ZT9KU09OLnN0cmluZ2lmeShhLnZhbHVlLChsLGspPT5rLnRvRml4ZWQ/TnVtYmVyKGsudG9GaXhlZCgzKSk6ayk6IihDbGljayB0byB2aWV3KSI7CnRoaXMuX3dhdGNoS2V5MkRhdGFbZF09YTstMT09PXRoaXMuX3dhdGNoS2V5cy5pbmRleE9mKGQpPyh0aGlzLl93YXRjaEtleXMucHVzaChkKSx0aGlzLl93YXRjaEtleTJDb3VudFtkXT0xKTp0aGlzLl93YXRjaEtleTJDb3VudFtkXSs9MTt0aGlzLl93YXRjaEtleTJFeHBhbmRIYW5kbGVyW2RdPWY7dGhpcy5fd2F0Y2hLZXkyVmFsdWVTaG9ydFtkXT1nO3RoaXMuX2FjdGl2ZVdhdGNoS2V5PWQ7dGhpcy5fcmVtb3ZlQWN0aXZlU3RhdHVzRnJvbUFsbFJvd3MoKTt0aGlzLl9yZW5kZXJSb3coZCl9fSxfY2xlYXJUZW5zb3JEYXRhVGFibGUoKXtmb3IoY29uc3QgYSBpbiB0aGlzLl93YXRjaEtleTJSb3cpdGhpcy5fd2F0Y2hLZXkyUm93Lmhhc093blByb3BlcnR5KGEpJiYodGhpcy5fd2F0Y2hLZXkyUm93W2FdLnJlbW92ZSgpLGRlbGV0ZSB0aGlzLl93YXRjaEtleTJSb3dbYV0pfSxfY2xlYXJUZW5zb3JEYXRhUm93KGEpe2Zvcig7YS5maXJzdENoaWxkOylhLnJlbW92ZUNoaWxkKGEuZmlyc3RDaGlsZCl9LApfY2xlYXJIZWFsdGhQaWxsTGVnZW5kKCl7Y29uc3QgYT10aGlzLiQkKCIjaGVhbHRoLXBpbGwtbGVnZW5kIik7Zm9yKDthLmZpcnN0Q2hpbGQ7KWEucmVtb3ZlQ2hpbGQoYS5maXJzdENoaWxkKX0sX3JlbmRlckhlYWx0aFBpbGxMZWdlbmQoKXt0aGlzLl9jbGVhckhlYWx0aFBpbGxMZWdlbmQoKTtjb25zdCBhPXRoaXMuJCQoIiNoZWFsdGgtcGlsbC1sZWdlbmQiKTt2YXIgYz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtjLnRleHRDb250ZW50PSJMZWdlbmQ6IjthLmFwcGVuZENoaWxkKGMpO2Muc3R5bGVbIm1hcmdpbi1yaWdodCJdPSIwLjVlbSI7Yy5zdHlsZS5kaXNwbGF5PSJpbmxpbmUtYmxvY2siO2ZvcihjPTA7Yzx0Zi5ncmFwaC5zY2VuZS5oZWFsdGhQaWxsRW50cmllcy5sZW5ndGg7KytjKXtjb25zdCBkPXRmLmdyYXBoLnNjZW5lLmhlYWx0aFBpbGxFbnRyaWVzW2NdLGY9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Zi5zdHlsZS5kaXNwbGF5PSJpbmxpbmUtYmxvY2siOwpmLnN0eWxlWyJtYXJnaW4tcmlnaHQiXT0iMC4yNWVtIjtjb25zdCBnPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTtnLnRleHRDb250ZW50PSJcdTI1YTAiO2cuc3R5bGUuY29sb3I9ZC5iYWNrZ3JvdW5kX2NvbG9yO2NvbnN0IGw9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpO2wudGV4dENvbnRlbnQ9ZC5sYWJlbDtsLnN0eWxlLmNvbG9yPWQuYmFja2dyb3VuZF9jb2xvcjtmLmFwcGVuZENoaWxkKGcpO2YuYXBwZW5kQ2hpbGQobCk7YS5hcHBlbmRDaGlsZChmKX19LF9yZW1vdmVBY3RpdmVTdGF0dXNGcm9tQWxsUm93cygpe2Zvcihjb25zdCBhIGluIHRoaXMuX3dhdGNoS2V5MlJvdyl7aWYoIXRoaXMuX3dhdGNoS2V5MlJvdy5oYXNPd25Qcm9wZXJ0eShhKSljb250aW51ZTtjb25zdCBjPXRoaXMuX3dhdGNoS2V5MlJvd1thXTtQb2x5bWVyLmRvbShjKS5jbGFzc0xpc3QucmVtb3ZlKCJhY3RpdmUtdGVuc29yIik7UG9seW1lci5kb20oYykuY2xhc3NMaXN0LnJlbW92ZSgiaGlnaGxpZ2h0ZWQiKX19LApfcmVuZGVyUm93KGEpe2xldCBjLGQ9ITE7bnVsbCE9dGhpcy5fd2F0Y2hLZXkyUm93W2FdPyhjPXRoaXMuX3dhdGNoS2V5MlJvd1thXSx0aGlzLl9jbGVhclRlbnNvckRhdGFSb3coYyksZD0hMSk6KGM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidHIiKSxkPSEwKTtjb25zdCBmPXRoaXMuX3dhdGNoS2V5MkRhdGFbYV0uZGV2aWNlTmFtZSxnPXRoaXMuX3dhdGNoS2V5MkRhdGFbYV0ubWF5YmVCYXNlRXhwYW5kZWROb2RlTmFtZSxsPWYrIi8iK2c7dmFyIGs9dGhpcy5fd2F0Y2hLZXkyQ291bnRbYV0sbT10aGlzLl93YXRjaEtleTJEYXRhW2FdLnRlbnNvck5hbWUscD10aGlzLl93YXRjaEtleTJEYXRhW2FdLmRlYnVnT3AscT10aGlzLl93YXRjaEtleTJWYWx1ZVNob3J0W2FdO2NvbnN0IHI9dGhpcy5fd2F0Y2hLZXkyRXhwYW5kSGFuZGxlclthXSx0PWE9PT10aGlzLl9hY3RpdmVXYXRjaEtleSx2PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7UG9seW1lci5kb20odikuY2xhc3NMaXN0LmFkZCgidGVuc29yLW5hbWUiKTsKdi5zdHlsZVsidGV4dC1kZWNvcmF0aW9uIl09InVuZGVybGluZSI7di5zdHlsZS5jdXJzb3I9InBvaW50ZXIiO3YudGV4dENvbnRlbnQ9bTt2LmFkZEV2ZW50TGlzdGVuZXIoInRhcCIsKCk9PntudWxsIT10aGlzLnRlbnNvck5hbWVDbGlja2VkJiZ0aGlzLnRlbnNvck5hbWVDbGlja2VkKGYsZyl9KTtjb25zdCBBPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7QS50ZXh0Q29udGVudD1rO2NvbnN0IHk9dGhpcy5fd2F0Y2hLZXkyRGF0YVthXS5kdHlwZTtrPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7Y29uc3QgeD10aGlzLl93YXRjaEtleTJEYXRhW2FdLnNoYXBlO2sudGV4dENvbnRlbnQ9eTtjb25zdCBDPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7Qy50ZXh0Q29udGVudD1KU09OLnN0cmluZ2lmeSh4KTtjb25zdCBGPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7Ri50ZXh0Q29udGVudD1xO1BvbHltZXIuZG9tKEYpLmNsYXNzTGlzdC5hZGQoInZhbHVlLWV4cGFuc2lvbi1saW5rIik7Cm51bGwhPXImJihGLmFkZEV2ZW50TGlzdGVuZXIoInRhcCIsciwhMSksRi5zdHlsZVsidGV4dC1kZWNvcmF0aW9uIl09InVuZGVybGluZSIsRi5zdHlsZS5jdXJzb3I9InBvaW50ZXIiKTtxPW51bGw7cT10aGlzLl9oZWFsdGhQaWxsc0VuYWJsZWQ/dGhpcy5fcmVuZGVySGVhbHRoUGlsbChtKyI6IitwLHtkZXZpY2VfbmFtZTpmLG5vZGVfbmFtZTpnLGR0eXBlOnksc2hhcGU6eCx2YWx1ZTpudWxsfSxyKTpkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpO209ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTtwPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInBhcGVyLWljb24tYnV0dG9uIik7cC5zZXRBdHRyaWJ1dGUoImljb24iLCJmb3J3YXJkIik7cC5zZXRBdHRyaWJ1dGUoInRpdGxlIiwiQ29udGludWUgdG8iKTtwLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwoKT0+e3RoaXMuY29udGludWVUb0NhbGxiYWNrKGYsZyl9KTttLmFwcGVuZENoaWxkKHApO2MuYXBwZW5kQ2hpbGQodik7CmMuYXBwZW5kQ2hpbGQoQSk7Yy5hcHBlbmRDaGlsZChrKTtjLmFwcGVuZENoaWxkKEMpO2MuYXBwZW5kQ2hpbGQoRik7Yy5hcHBlbmRDaGlsZChxKTtjLmFwcGVuZENoaWxkKG0pO2Muc2V0QXR0cmlidXRlKCJub2RlTmFtZVdpdGhEZXZpY2UiLGwpO3QmJihQb2x5bWVyLmRvbShjKS5jbGFzc0xpc3QuYWRkKCJhY3RpdmUtdGVuc29yIiksUG9seW1lci5kb20oYykuY2xhc3NMaXN0LmFkZCgiaGlnaGxpZ2h0ZWQiKSk7dGhpcy5fd2F0Y2hLZXkyUm93W2FdPWM7ZCYmUG9seW1lci5kb20odGhpcy4kJCgiI3RlbnNvci1kYXRhLXRhYmxlIHRib2R5IikpLmFwcGVuZENoaWxkKGMpO2Muc2Nyb2xsSW50b1ZpZXcoe2Jsb2NrOiJlbmQiLGlubGluZToibmVhcmVzdCIsYmVoYXZpb3VyOiJzbW9vdGgifSl9LF9yZW5kZXJIZWFsdGhQaWxsKGEsYyxkKXtjb25zdCBmPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7UG9seW1lci5kb20oZikuY2xhc3NMaXN0LmFkZCgiaGVhbHRoLXBpbGwiKTsKbnVsbCE9ZCYmZi5hZGRFdmVudExpc3RlbmVyKCJ0YXAiLGQsITEpO2Q9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKHRmLmdyYXBoLnNjZW5lLlNWR19OQU1FU1BBQ0UsInN2ZyIpO2Quc2V0QXR0cmlidXRlKCJ3aWR0aCIsdGhpcy5faGVhbHRoUGlsbFdpZHRoKTtkLnNldEF0dHJpYnV0ZSgiaGVpZ2h0Iix0aGlzLl9oZWFsdGhQaWxsSGVpZ2h0KTtjb25zdCBnPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyh0Zi5ncmFwaC5zY2VuZS5TVkdfTkFNRVNQQUNFLCJnIik7ZC5hcHBlbmRDaGlsZChnKTtmLmFwcGVuZENoaWxkKGQpO2NvbnN0IGw9InRkcC8iK2E7dGhpcy5nZXRIZWFsdGhQaWxsKGEsYy5kZXZpY2VfbmFtZSxjLm5vZGVfbmFtZSxrPT57bnVsbD09az8oZi50ZXh0Q29udGVudD0iTi9BIixmLnN0eWxlLmNvbG9yPSJncmF5Iik6KGMudmFsdWU9ayx0Zi5ncmFwaC5zY2VuZS5hZGRIZWFsdGhQaWxsKGcsYyxudWxsLGwsdGhpcy5faGVhbHRoUGlsbFdpZHRoLHRoaXMuX2hlYWx0aFBpbGxIZWlnaHQvCjIsdGhpcy5faGVhbHRoUGlsbEhlaWdodC8yLDApKX0pO3JldHVybiBmfSxfaGlnaGxpZ2h0KGEpe1BvbHltZXIuZG9tKHRoaXMuJCQoIiN0ZW5zb3ItZGF0YS10YWJsZSIpKTtjb25zdCBjPVtdO2Zvcihjb25zdCBkIGluIHRoaXMuX3dhdGNoS2V5MlJvdyl7aWYoIXRoaXMuX3dhdGNoS2V5MlJvdy5oYXNPd25Qcm9wZXJ0eShkKSljb250aW51ZTtjb25zdCBmPXRoaXMuX3dhdGNoS2V5MlJvd1tkXTtudWxsIT1mLmdldEF0dHJpYnV0ZSYmKGYuZ2V0QXR0cmlidXRlKCJub2RlTmFtZVdpdGhEZXZpY2UiKT09PWE/Yy5wdXNoKGYpOlBvbHltZXIuZG9tKGYpLmNsYXNzTGlzdC5yZW1vdmUoImhpZ2hsaWdodGVkIikpfWlmKG51bGwhPWEpZm9yKGE9MDthPGMubGVuZ3RoOysrYSlQb2x5bWVyLmRvbShjW2FdKS5jbGFzc0xpc3QuYWRkKCJoaWdobGlnaHRlZCIpLGNbYV0uc2Nyb2xsSW50b1ZpZXcoe2Jsb2NrOiJlbmQiLGlubGluZToibmVhcmVzdCIsYmVoYXZpb3VyOiJzbW9vdGgifSl9fSk7Cjwvc2NyaXB0Pgo8L2RvbS1tb2R1bGU+CgoKPHNjcmlwdD4vL35+V0VCUEFUSH5+L3RlbnNvci13aWRnZXQvdGVuc29yX3dpZGdldF9iaW5hcnkuanMKdmFyIGptPXRoaXMmJnRoaXMuX19nZW5lcmF0b3J8fGZ1bmN0aW9uKGEsYyl7ZnVuY3Rpb24gZChxKXtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIGYoW3Escl0pfX1mdW5jdGlvbiBmKHEpe2lmKGwpdGhyb3cgbmV3IFR5cGVFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLiIpO2Zvcig7ZzspdHJ5e2lmKGw9MSxrJiYobT1xWzBdJjI/a1sicmV0dXJuIl06cVswXT9rWyJ0aHJvdyJdfHwoKG09a1sicmV0dXJuIl0pJiZtLmNhbGwoayksMCk6ay5uZXh0KSYmIShtPW0uY2FsbChrLHFbMV0pKS5kb25lKXJldHVybiBtO2lmKGs9MCxtKXE9W3FbMF0mMixtLnZhbHVlXTtzd2l0Y2gocVswXSl7Y2FzZSAwOmNhc2UgMTptPXE7YnJlYWs7Y2FzZSA0OnJldHVybiBnLmxhYmVsKysse3ZhbHVlOnFbMV0sZG9uZTohMX07Y2FzZSA1OmcubGFiZWwrKztrPXFbMV07cT1bMF07Y29udGludWU7Y2FzZSA3OnE9Zy5vcHMucG9wKCk7Zy50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYoIShtPQpnLnRyeXMsbT0wPG0ubGVuZ3RoJiZtW20ubGVuZ3RoLTFdKSYmKDY9PT1xWzBdfHwyPT09cVswXSkpe2c9MDtjb250aW51ZX1pZigzPT09cVswXSYmKCFtfHxxWzFdPm1bMF0mJnFbMV08bVszXSkpZy5sYWJlbD1xWzFdO2Vsc2UgaWYoNj09PXFbMF0mJmcubGFiZWw8bVsxXSlnLmxhYmVsPW1bMV0sbT1xO2Vsc2UgaWYobSYmZy5sYWJlbDxtWzJdKWcubGFiZWw9bVsyXSxnLm9wcy5wdXNoKHEpO2Vsc2V7bVsyXSYmZy5vcHMucG9wKCk7Zy50cnlzLnBvcCgpO2NvbnRpbnVlfX1xPWMuY2FsbChhLGcpfWNhdGNoKHIpe3E9WzYscl0saz0wfWZpbmFsbHl7bD1tPTB9aWYocVswXSY1KXRocm93IHFbMV07cmV0dXJue3ZhbHVlOnFbMF0/cVsxXTp2b2lkIDAsZG9uZTohMH19dmFyIGc9e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKG1bMF0mMSl0aHJvdyBtWzFdO3JldHVybiBtWzFdfSx0cnlzOltdLG9wczpbXX0sbCxrLG0scDtyZXR1cm4gcD17bmV4dDpkKDApLCJ0aHJvdyI6ZCgxKSwKInJldHVybiI6ZCgyKX0sImZ1bmN0aW9uIj09PXR5cGVvZiBTeW1ib2wmJihwW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLHB9LGttPWZ1bmN0aW9uKGEpe2Z1bmN0aW9uIGMoRCxCLEcsSyl7cmV0dXJuIG5ldyAoR3x8KEc9UHJvbWlzZSkpKGZ1bmN0aW9uKEwsSil7ZnVuY3Rpb24gUChUKXt0cnl7TihLLm5leHQoVCkpfWNhdGNoKFkpe0ooWSl9fWZ1bmN0aW9uIFMoVCl7dHJ5e04oS1sidGhyb3ciXShUKSl9Y2F0Y2goWSl7SihZKX19ZnVuY3Rpb24gTihUKXtULmRvbmU/TChULnZhbHVlKToobmV3IEcoZnVuY3Rpb24oWSl7WShULnZhbHVlKX0pKS50aGVuKFAsUyl9TigoSz1LLmFwcGx5KEQsQnx8W10pKS5uZXh0KCkpfSl9ZnVuY3Rpb24gZChEKXtyZXR1cm4gbnVsbCE9PUQubWF0Y2goL15pbnRbMC05XSskLyl8fG51bGwhPT1ELm1hdGNoKC9edWludFswLTldKyQvKX1mdW5jdGlvbiBmKEQpe3JldHVybiBudWxsIT09RC5tYXRjaCgvXmZsb2F0WzAtOV0rJC8pfHwKbnVsbCE9PUQubWF0Y2goL15iZmxvYXRbMC05XSskLyl9ZnVuY3Rpb24gZyhEKXtyZXR1cm4iYm9vbCI9PT1ELnRvTG93ZXJDYXNlKCl8fCJib29sZWFuIj09PUQudG9Mb3dlckNhc2UoKX1mdW5jdGlvbiBsKEQpe3JldHVybiJzdHIiPT09RC50b0xvd2VyQ2FzZSgpfHwic3RyaW5nIj09PUQudG9Mb3dlckNhc2UoKX1mdW5jdGlvbiBrKEQpe3ZhciBCPTE7RC5mb3JFYWNoKGZ1bmN0aW9uKEcpe0IqPUd9KTtyZXR1cm4gQn1mdW5jdGlvbiBtKEQpe3JldHVybiAwPT09RC5sZW5ndGg/InNjYWxhciI6IlsiK0QrIl0ifWZ1bmN0aW9uIHAoRCl7dmFyIEI9e3NsaWNpbmdEaW1zQW5kSW5kaWNlczpbXSx2aWV3aW5nRGltczpbXSx2ZXJ0aWNhbFJhbmdlOm51bGwsaG9yaXpvbnRhbFJhbmdlOm51bGx9LEc9RC5sZW5ndGg7aWYoMT09PUcpQi52aWV3aW5nRGltcz1bMF07ZWxzZSBpZigxPEcpe2lmKDI8Rylmb3IodmFyIEs9MDtLPEctMjsrK0spQi5zbGljaW5nRGltc0FuZEluZGljZXMucHVzaCh7ZGltOkssCmluZGV4OjA9PT1EW0tdP251bGw6MH0pO2ZvcihLPUQubGVuZ3RoLTI7SzxELmxlbmd0aDsrK0spQi52aWV3aW5nRGltcy5wdXNoKEspfXJldHVybiBCfWZ1bmN0aW9uIHEoRCxCKXtpZihELnZpZXdpbmdEaW1zWzBdIT09Qi52aWV3aW5nRGltc1swXXx8RC52aWV3aW5nRGltc1sxXSE9PUIudmlld2luZ0RpbXNbMV0pcmV0dXJuITE7Qj1ELnNsaWNpbmdEaW1zQW5kSW5kaWNlcy5tYXAoZnVuY3Rpb24oRyl7cmV0dXJuIEcuZGltfSk7Qi5zb3J0KCk7RD1ELnNsaWNpbmdEaW1zQW5kSW5kaWNlcy5tYXAoZnVuY3Rpb24oRyl7cmV0dXJuIEcuZGltfSk7RC5zb3J0KCk7cmV0dXJuIEpTT04uc3RyaW5naWZ5KEIpPT09SlNPTi5zdHJpbmdpZnkoRCl9ZnVuY3Rpb24gcihEKXtyZXR1cm4gMjA+PUQubGVuZ3RoP0Q6RC5zbGljZSgwLDEwKSsiLi4uIitELnNsaWNlKEQubGVuZ3RoLTcsRC5sZW5ndGgpfWZ1bmN0aW9uIHQoRCxCLEcsSyl7dm9pZCAwPT09RyYmKEc9Mik7aWYoaXNOYU4oRCkpcmV0dXJuIk5hTiI7CmlmKC1JbmZpbml0eT09PUQpcmV0dXJuIi1cdTIyMWUiO2lmKEluZmluaXR5PT09RClyZXR1cm4iK1x1MjIxZSI7bnVsbD09SyYmKEs9TWF0aC5hYnMoRCksSz0xRTM+SyYmLjAxPD1LfHwwPT09Sz8iZml4ZWQiOiJleHBvbmVudGlhbCIpO3JldHVybiBudWxsPT1LfHwiZml4ZWQiPT09Sz9CPyIiK0Q6RC50b0ZpeGVkKEcpOkQudG9FeHBvbmVudGlhbChHKX1mdW5jdGlvbiB2KEQsQil7dm9pZCAwPT09QiYmKEI9ITApO3JldHVybiBEP0I/IlQiOiJUcnVlIjpCPyJGIjoiRmFsc2UifWZ1bmN0aW9uIEEoRCxCKXt2b2lkIDA9PT1CJiYoQj00KTtyZXR1cm4gbnVsbD09PUJ8fEQubGVuZ3RoPD1CP0Q6RC5zbGljZSgwLEItMSkrIlx1MjAyNiJ9dmFyIHk7KGZ1bmN0aW9uKEQpe0RbRC5VUD0xXT0iVVAiO0RbRC5ET1dOPTJdPSJET1dOIjtEW0QuTEVGVD0zXT0iTEVGVCI7RFtELlJJR0hUPTRdPSJSSUdIVCJ9KSh5fHwoeT17fSkpO3ZhciB4PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gRChCLEcsSywKTCxKLFApe3RoaXMuc2hhcGU9Qjt0aGlzLnNsaWNlRGltcz1bXTt0aGlzLnNsaWNlSW5kaWNlcz1bXTtpZigwPT09ayh0aGlzLnNoYXBlKSl0aHJvdyBFcnJvcigiVGVuc29yRWxlbWVudFNlbGVjdGlvbiBkb2Vzbid0IHN1cHBvcnQgdGVuc29yIHdpdGggemVybyBlbGVtZW50cy4iKTtmb3IoQj0wO0I8Ry5zbGljaW5nRGltc0FuZEluZGljZXMubGVuZ3RoOysrQil7dGhpcy5zbGljZURpbXMucHVzaChHLnNsaWNpbmdEaW1zQW5kSW5kaWNlc1tCXS5kaW0pO3ZhciBTPUcuc2xpY2luZ0RpbXNBbmRJbmRpY2VzW0JdLmluZGV4O2lmKG51bGw9PT1TKXRocm93IEVycm9yKCJGYWlsZWQgdG8gY3JlYXRlIFRlbnNvckVsZW1lbnRTZWxlY3Rpb24gZHVlIHRvIHVuZGV0ZXJtaW5lZCBzbGljaW5nIGluZGV4IGF0IGRpbWVuc2lvbiAiK0IpO3RoaXMuc2xpY2VJbmRpY2VzLnB1c2goUyl9dGhpcy5yYW5rPXRoaXMuc2hhcGUubGVuZ3RoO2lmKDA8dGhpcy5yYW5rJiZ0aGlzLnNsaWNlRGltcy5sZW5ndGg+PQp0aGlzLnJhbmspdGhyb3cgRXJyb3IoIkV4cGVjdGVkIHNsaWNlRGltcyB0byBoYXZlIGEgbGVuZ3RoIGxlc3MgdGhhbiByYW5rICIrdGhpcy5yYW5rKyIsICIrKCJidXQgZ290IGxlbmd0aCAiK3RoaXMuc2xpY2VEaW1zLmxlbmd0aCkpO3RoaXMudmlld0RpbXM9W107Zm9yKEI9MDtCPHRoaXMucmFuazsrK0IpLTE9PT10aGlzLnNsaWNlRGltcy5pbmRleE9mKEIpJiZ0aGlzLnZpZXdEaW1zLnB1c2goQik7aWYoMjx0aGlzLnZpZXdEaW1zLmxlbmd0aCl0aHJvdyBFcnJvcigiT25seSBzZWxlY3Rpb25zIGluIDFEIGFuZCAyRCBhcmUgc3VwcG9ydGVkLiIpO3RoaXMucm93U3RhcnQ9bnVsbD09Sz8wOks7dGhpcy5jb2xTdGFydD1udWxsPT1MPzA6TDt0aGlzLnJvd0NvdW50PW51bGw9PUo/MTpKO3RoaXMuY29sQ291bnQ9bnVsbD09UD8xOlB9RC5wcm90b3R5cGUuZ2V0RWxlbWVudFN0YXR1cz1mdW5jdGlvbihCKXtpZihCLmxlbmd0aCE9PXRoaXMucmFuayl0aHJvdyBFcnJvcigiRXhwZWN0ZWQgaW5kaWNlcyB0byBoYXZlIGEgcmFuayBvZiAiKwp0aGlzLnJhbmsrIiwgIisoImJ1dCBnb3QgIitCLmxlbmd0aCsiIChbIitCKyJdKSIpKTtmb3IodmFyIEc9MDtHPEIubGVuZ3RoOysrRylpZigtMSE9PXRoaXMuc2xpY2VEaW1zLmluZGV4T2YoRykmJkJbR10hPT10aGlzLnNsaWNlSW5kaWNlc1t0aGlzLnNsaWNlRGltcy5pbmRleE9mKEcpXSlyZXR1cm4gbnVsbDtHPW51bGw7dmFyIEs9dGhpcy5yb3dTdGFydCt0aGlzLnJvd0NvdW50LEw9dGhpcy5jb2xTdGFydCt0aGlzLmNvbENvdW50O2lmKDA9PT10aGlzLnZpZXdEaW1zLmxlbmd0aCkwPT09Qi5sZW5ndGgmJihHPXt0b3BFZGdlOiEwLGJvdHRvbUVkZ2U6ITAsbGVmdEVkZ2U6ITAscmlnaHRFZGdlOiEwfSk7ZWxzZSBpZigxPT09dGhpcy52aWV3RGltcy5sZW5ndGgpe3ZhciBKPXRoaXMudmlld0RpbXNbMF07QltKXT49dGhpcy5yb3dTdGFydCYmQltKXTxLJiYoRz17dG9wRWRnZTpCW0pdPT09dGhpcy5yb3dTdGFydCxib3R0b21FZGdlOkJbSl09PT1LLTEsbGVmdEVkZ2U6ITAscmlnaHRFZGdlOiEwfSl9ZWxzZSBpZigyPT09CnRoaXMudmlld0RpbXMubGVuZ3RoKXtKPXRoaXMudmlld0RpbXNbMF07dmFyIFA9dGhpcy52aWV3RGltc1sxXTtCW0pdPj10aGlzLnJvd1N0YXJ0JiZCW0pdPEsmJkJbUF0+PXRoaXMuY29sU3RhcnQmJkJbUF08TCYmKEc9e3RvcEVkZ2U6QltKXT09PXRoaXMucm93U3RhcnQsYm90dG9tRWRnZTpCW0pdPT09Sy0xLGxlZnRFZGdlOkJbUF09PT10aGlzLmNvbFN0YXJ0LHJpZ2h0RWRnZTpCW1BdPT09TC0xfSl9ZWxzZSB0aHJvdyBFcnJvcigiVW5leHBlY3RlZCBsZW5ndGggb2Ygdmlld0RpbXM6ICIrdGhpcy52aWV3RGltcyk7cmV0dXJuIEd9O0QucHJvdG90eXBlLm1vdmU9ZnVuY3Rpb24oQixHKXt2YXIgSz1udWxsO2lmKDA9PT10aGlzLnJhbmt8fDE9PT10aGlzLnJhbmsmJihCPT09eS5MRUZUfHxCPT09eS5SSUdIVCkpcmV0dXJuIG51bGw7aWYobnVsbD09PUcudmVydGljYWxSYW5nZXx8bnVsbD09PUcudmVydGljYWxSYW5nZVsxXSl0aHJvdyBFcnJvcigiRmFpbGVkIHRvIG1vdmUgZHVlIHRvIHVuZGV0ZXJtaW5lZCB2ZXJ0aWNhbCByYW5nZS4iKTsKQj09PXkuVVA/MDx0aGlzLnJvd1N0YXJ0JiYodGhpcy5yb3dTdGFydC0tLG51bGwhPUcudmVydGljYWxSYW5nZSYmdGhpcy5yb3dTdGFydDxHLnZlcnRpY2FsUmFuZ2VbMF0mJihLPXkuVVApKTpCPT09eS5ET1dOP251bGwhPUcudmlld2luZ0RpbXMmJm51bGwhPUcudmlld2luZ0RpbXNbMF0mJnRoaXMucm93U3RhcnQ8dGhpcy5zaGFwZVtHLnZpZXdpbmdEaW1zWzBdXS0xJiYodGhpcy5yb3dTdGFydCsrLG51bGwhPUcudmVydGljYWxSYW5nZSYmdGhpcy5yb3dTdGFydD49Ry52ZXJ0aWNhbFJhbmdlWzFdJiYoSz15LkRPV04pKTpCPT09eS5MRUZUPzA8dGhpcy5jb2xTdGFydCYmKHRoaXMuY29sU3RhcnQtLSxudWxsIT1HLmhvcml6b250YWxSYW5nZSYmdGhpcy5jb2xTdGFydDxHLmhvcml6b250YWxSYW5nZVswXSYmKEs9eS5MRUZUKSk6Qj09PXkuUklHSFQmJm51bGwhPUcudmlld2luZ0RpbXMmJm51bGwhPUcudmlld2luZ0RpbXNbMV0mJnRoaXMuY29sU3RhcnQ8dGhpcy5zaGFwZVtHLnZpZXdpbmdEaW1zWzFdXS0KMSYmKHRoaXMuY29sU3RhcnQrKyxudWxsIT1HLmhvcml6b250YWxSYW5nZSYmdGhpcy5jb2xTdGFydD49Ry5ob3Jpem9udGFsUmFuZ2VbMV0mJihLPXkuUklHSFQpKTt0aGlzLmNvbENvdW50PXRoaXMucm93Q291bnQ9MTtyZXR1cm4gS307RC5wcm90b3R5cGUuZ2V0Um93U3RhcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yb3dTdGFydH07RC5wcm90b3R5cGUuZ2V0Um93Q291bnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yb3dDb3VudH07RC5wcm90b3R5cGUuZ2V0Q29sU3RhcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb2xTdGFydH07RC5wcm90b3R5cGUuZ2V0Q29sQ291bnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb2xDb3VudH07cmV0dXJuIER9KCksQz1mdW5jdGlvbigpe2Z1bmN0aW9uIEQoQixHLEspe3ZvaWQgMD09PUsmJihLPWZ1bmN0aW9uKCl7fSk7dGhpcy5yb290RGl2PUI7dGhpcy5zaGFwZT1HO3RoaXMub25TbGljaW5nU3BlY0NoYW5nZT1LO3RoaXMuZGltQ29udHJvbHM9CltdO3RoaXMuZGltSW5wdXRzPVtdO3RoaXMuY29tbWFzPVtdO3RoaXMuZHJvcGRvd25zPVtdO3RoaXMuYnJhY2tldERpdnM9W251bGwsbnVsbF07dGhpcy5kaW1Db250cm9sc0xpc3RlbmVyQXR0YWNoZWQ9W107dGhpcy5yYW5rPXRoaXMuc2hhcGUubGVuZ3RoO2lmKDM+dGhpcy5yYW5rKXRocm93IEVycm9yKCJEaW1lbnNpb24gY29udHJvbCBpcyBub3QgYXBwbGljYWJsZSB0byB0ZW5zb3Igc2hhcGVzIGxlc3MgdGhhbiAiKygiM0Q6IHJlY2VpdmVkICIrdGhpcy5yYW5rKyJEIHRlbnNvciBzaGFwZTogIikrKEpTT04uc3RyaW5naWZ5KHRoaXMuc2hhcGUpKyIuIikpO3RoaXMuY3JlYXRlQ29tcG9uZW50cygpO3RoaXMuc2xpY2luZ1NwZWM9cChHKX1ELnByb3RvdHlwZS5jcmVhdGVDb21wb25lbnRzPWZ1bmN0aW9uKCl7Zm9yKHZhciBCPXRoaXM7dGhpcy5yb290RGl2LmZpcnN0Q2hpbGQ7KXRoaXMucm9vdERpdi5yZW1vdmVDaGlsZCh0aGlzLnJvb3REaXYuZmlyc3RDaGlsZCk7dGhpcy5kaW1Db250cm9scz0KW107dGhpcy5kaW1JbnB1dHM9W107dGhpcy5jb21tYXM9W107dGhpcy5kcm9wZG93bnM9W107dGhpcy5kaW1Db250cm9sc0xpc3RlbmVyQXR0YWNoZWQ9W107dGhpcy5icmFja2V0RGl2c1swXT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTt0aGlzLmJyYWNrZXREaXZzWzBdLnRleHRDb250ZW50PSJTbGljaW5nOiBbIjt0aGlzLmJyYWNrZXREaXZzWzBdLmNsYXNzTGlzdC5hZGQoInRlbnNvci13aWRnZXQtZGltLWJyYWNrZXRzIik7dGhpcy5yb290RGl2LmFwcGVuZENoaWxkKHRoaXMuYnJhY2tldERpdnNbMF0pO2Zvcih2YXIgRz0wO0c8dGhpcy5yYW5rOysrRyl7dmFyIEs9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Sy5jbGFzc0xpc3QuYWRkKCJ0ZW5zb3Itd2lkZ2V0LWRpbSIpO0sudGl0bGU9IkRpbWVuc2lvbiAiK0crIjogc2l6ZVx4M2QiK3RoaXMuc2hhcGVbR107dGhpcy5yb290RGl2LmFwcGVuZENoaWxkKEspO3RoaXMuZGltQ29udHJvbHMucHVzaChLKTt0aGlzLmRpbUNvbnRyb2xzTGlzdGVuZXJBdHRhY2hlZC5wdXNoKCExKTsKSz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpO0suY2xhc3NMaXN0LmFkZCgidGVuc29yLXdpZGdldC1kaW0iKTtLLnN0eWxlLmRpc3BsYXk9Im5vbmUiO3RoaXMucm9vdERpdi5hcHBlbmRDaGlsZChLKTt0aGlzLmRpbUlucHV0cy5wdXNoKEspO0c8dGhpcy5yYW5rLTEmJihLPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLEsuY2xhc3NMaXN0LmFkZCgidGVuc29yLXdpZGdldC1kaW0tY29tbWEiKSxLLnRleHRDb250ZW50PSIsIix0aGlzLnJvb3REaXYuYXBwZW5kQ2hpbGQoSyksdGhpcy5jb21tYXMucHVzaChLKSk7Sz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtLLmNsYXNzTGlzdC5hZGQoInRlbnNvci13aWRnZXQtZGltLWRyb3Bkb3duIik7Sy5zdHlsZS5kaXNwbGF5PSJub25lIjt0aGlzLnJvb3REaXYuYXBwZW5kQ2hpbGQoSyk7dGhpcy5kcm9wZG93bnMucHVzaChLKX10aGlzLmJyYWNrZXREaXZzWzFdPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwp0aGlzLmJyYWNrZXREaXZzWzFdLnRleHRDb250ZW50PSJdIjt0aGlzLmJyYWNrZXREaXZzWzFdLmNsYXNzTGlzdC5hZGQoInRlbnNvci13aWRnZXQtZGltLWJyYWNrZXRzIik7dGhpcy5yb290RGl2LmFwcGVuZENoaWxkKHRoaXMuYnJhY2tldERpdnNbMV0pO3RoaXMucm9vdERpdi5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWxlYXZlIixmdW5jdGlvbigpe0IuY2xlYXJBbGxEcm9wZG93bnMoKX0pfTtELnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oQil7ZnVuY3Rpb24gRyhTKXt2YXIgTj1QLmRpbUNvbnRyb2xzW1NdLFQ9UC5kaW1JbnB1dHNbU10sWT1QLmRyb3Bkb3duc1tTXTtpZigibm9uZSIhPT1ULnN0eWxlLmRpc3BsYXkpcmV0dXJuImNvbnRpbnVlIjt2YXIgYWE9UC5zaGFwZVtTXTtpZigtMSE9PUwuaW5kZXhPZihTKSl7dmFyIGhhPUpbTC5pbmRleE9mKFMpXTtOLnRleHRDb250ZW50PVN0cmluZyhoYSk7VC5jbGFzc0xpc3QuYWRkKCJ0ZW5zb3Itd2lkZ2V0LWRpbSIpO1QudHlwZT0KIm51bWJlciI7VC5taW49IjAiO1QubWF4PVN0cmluZyhhYS0xKTtULnZhbHVlPVN0cmluZyhoYSk7UC5kaW1Db250cm9sc0xpc3RlbmVyQXR0YWNoZWRbU118fChOLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixmdW5jdGlvbigpe0suY2xlYXJBbGxEcm9wZG93bnMoKTtOLnN0eWxlLmRpc3BsYXk9Im5vbmUiO1Quc3R5bGUuZGlzcGxheT0iaW5saW5lLWJsb2NrIn0pLFQuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIixmdW5jdGlvbigpe2lmKG51bGw9PT1LLnNsaWNpbmdTcGVjKXRocm93IEVycm9yKCJTbGljaW5nIGNvbnRyb2wgY2hhbmdlIGNhbGxiYWNrIGZhaWxlZCBkdWUgdG8gbWlzc2luZyBzcGVjLiIpO3ZhciBYPXBhcnNlSW50KFQudmFsdWUsMTApOyFpc0Zpbml0ZShYKXx8MD5YfHxYPj1hYXx8TWF0aC5mbG9vcihhYSkhPWFhP1QudmFsdWU9U3RyaW5nKEsuc2xpY2luZ1NwZWMuc2xpY2luZ0RpbXNBbmRJbmRpY2VzW0wuaW5kZXhPZihTKV0uaW5kZXgpOihLLnNsaWNpbmdTcGVjLnNsaWNpbmdEaW1zQW5kSW5kaWNlc1tMLmluZGV4T2YoUyldLmluZGV4PQpYLE4udGV4dENvbnRlbnQ9U3RyaW5nKFgpLEsub25TbGljaW5nU3BlY0NoYW5nZShLLnNsaWNpbmdTcGVjKSl9KSxULmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLGZ1bmN0aW9uKCl7VC5zdHlsZS5kaXNwbGF5PSJub25lIjtOLnN0eWxlLmRpc3BsYXk9ImlubGluZS1ibG9jayJ9KSxQLmRpbUNvbnRyb2xzTGlzdGVuZXJBdHRhY2hlZFtTXT0hMCl9ZWxzZXtpZihQLnNsaWNpbmdTcGVjLnZpZXdpbmdEaW1zWzBdPT09Uyl7aWYobnVsbD09PVAuc2xpY2luZ1NwZWMudmVydGljYWxSYW5nZSl0aHJvdyBFcnJvcigiTWlzc2luZyB2ZXJ0aWNhbCByYW5nZS4iKTtOLnRleHRDb250ZW50PSJcdTIxOTUgIitQLnNsaWNpbmdTcGVjLnZlcnRpY2FsUmFuZ2VbMF0rIjoiKygiIitQLnNsaWNpbmdTcGVjLnZlcnRpY2FsUmFuZ2VbMV0pfWVsc2V7aWYobnVsbD09PVAuc2xpY2luZ1NwZWMuaG9yaXpvbnRhbFJhbmdlKXRocm93IEVycm9yKCJNaXNzaW5nIGhvcml6b250YWwgcmFuZ2UuIik7Ti50ZXh0Q29udGVudD0KIlx1MjE5NCAiK1Auc2xpY2luZ1NwZWMuaG9yaXpvbnRhbFJhbmdlWzBdKyI6IisoIiIrUC5zbGljaW5nU3BlYy5ob3Jpem9udGFsUmFuZ2VbMV0pfU4uY2xhc3NMaXN0LmFkZCgidGVuc29yLXdpZGdldC1kaW0iKTtQLmRpbUNvbnRyb2xzTGlzdGVuZXJBdHRhY2hlZFtTXXx8KE4uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGZ1bmN0aW9uKCl7dmFyIFg9Ti5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtLLnJlbmRlckRyb3Bkb3duTWVudUl0ZW1zKFksWC5ib3R0b20sWC5sZWZ0LFMpfSksUC5kaW1Db250cm9sc0xpc3RlbmVyQXR0YWNoZWRbU109ITApfX12YXIgSz10aGlzO251bGwhPUImJih0aGlzLnNsaWNpbmdTcGVjPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoQikpKTtpZihudWxsPT09dGhpcy5zbGljaW5nU3BlYyl0aHJvdyBFcnJvcigiU2xpY2luZyBjb250cm9sIHJlbmRlcmluZyBmYWlsZWQgZHVlIHRvIG1pc3Npbmcgc2xpY2luZyBzcGVjLiIpO3ZhciBMPXRoaXMuc2xpY2luZ1NwZWMuc2xpY2luZ0RpbXNBbmRJbmRpY2VzLm1hcChmdW5jdGlvbihTKXtyZXR1cm4gUy5kaW19KSwKSj10aGlzLnNsaWNpbmdTcGVjLnNsaWNpbmdEaW1zQW5kSW5kaWNlcy5tYXAoZnVuY3Rpb24oUyl7cmV0dXJuIFMuaW5kZXh9KSxQPXRoaXM7Zm9yKEI9MDtCPHRoaXMucmFuazsrK0IpRyhCKX07RC5wcm90b3R5cGUucmVuZGVyRHJvcGRvd25NZW51SXRlbXM9ZnVuY3Rpb24oQixHLEssTCl7ZnVuY3Rpb24gSihhYSl7aWYoLTE9PT1TLmluZGV4T2YoYWEpfHxMPT09Ti5zbGljaW5nU3BlYy52aWV3aW5nRGltc1sxXSYmYWE8PU4uc2xpY2luZ1NwZWMudmlld2luZ0RpbXNbMF18fEw9PU4uc2xpY2luZ1NwZWMudmlld2luZ0RpbXNbMF0mJmFhPj1OLnNsaWNpbmdTcGVjLnZpZXdpbmdEaW1zWzFdKXJldHVybiJjb250aW51ZSI7dmFyIGhhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2hhLmNsYXNzTGlzdC5hZGQoInRlbnNvci13aWRnZXQtZGltLWRyb3Bkb3duLW1lbnUtaXRlbSIpO2hhLnRleHRDb250ZW50PSJTd2FwIHdpdGggZGltZW5zaW9uICIrYWE7Qi5hcHBlbmRDaGlsZChoYSk7CmhhLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZW50ZXIiLGZ1bmN0aW9uKCl7aGEuY2xhc3NMaXN0LmFkZCgidGVuc29yLXdpZGdldC1kaW0tZHJvcGRvd24tbWVudS1pdGVtLWFjdGl2ZSIpO1AuZGltQ29udHJvbHNbYWFdLmNsYXNzTGlzdC5hZGQoInRlbnNvci13aWRnZXQtZGltLWhpZ2hsaWdodGVkIil9KTtoYS5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWxlYXZlIixmdW5jdGlvbigpe2hhLmNsYXNzTGlzdC5yZW1vdmUoInRlbnNvci13aWRnZXQtZGltLWRyb3Bkb3duLW1lbnUtaXRlbS1hY3RpdmUiKTtQLmRpbUNvbnRyb2xzW2FhXS5jbGFzc0xpc3QucmVtb3ZlKCJ0ZW5zb3Itd2lkZ2V0LWRpbS1oaWdobGlnaHRlZCIpfSk7dmFyIFg9Ti5zbGljaW5nU3BlYy52aWV3aW5nRGltc1swXT09PUw7aGEuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGZ1bmN0aW9uKCl7aWYobnVsbD09PVAuc2xpY2luZ1NwZWMpdGhyb3cgRXJyb3IoIkRpbWVuc2lvbiBzd2FwcGluZyBmYWlsZWQgZHVlIHRvIG1pc3Npbmcgc2xpY2luZyBzcGVjIik7CnZhciBjYT1TLmluZGV4T2YoYWEpO1Auc2xpY2luZ1NwZWMudmlld2luZ0RpbXNbWD8wOjFdPWFhO1Auc2xpY2luZ1NwZWMuc2xpY2luZ0RpbXNBbmRJbmRpY2VzW2NhXT17ZGltOkwsaW5kZXg6MH07UC5zbGljaW5nU3BlYy52ZXJ0aWNhbFJhbmdlPW51bGw7UC5zbGljaW5nU3BlYy5ob3Jpem9udGFsUmFuZ2U9bnVsbDtpZihQLm9uU2xpY2luZ1NwZWNDaGFuZ2UpUC5vblNsaWNpbmdTcGVjQ2hhbmdlKFAuc2xpY2luZ1NwZWMpfSl9dmFyIFA9dGhpcztpZihudWxsPT09dGhpcy5zbGljaW5nU3BlYyl0aHJvdyBFcnJvcigiU2xpY2luZyBjb250cm9sIGNhbm5vdCByZW5kZXIgZHJvcGRvd24gbWVudSBpdGVtcyBkdWUgdG8gbWlzc2luZyBzbGljaW5nIHNwZWMuIik7dGhpcy5jbGVhckFsbERyb3Bkb3ducygpO2Zvcih2YXIgUz10aGlzLnNsaWNpbmdTcGVjLnNsaWNpbmdEaW1zQW5kSW5kaWNlcy5tYXAoZnVuY3Rpb24oYWEpe3JldHVybiBhYS5kaW19KSxOPXRoaXMsVD0wO1Q8dGhpcy5yYW5rOysrVClKKFQpOwpCLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlbGVhdmUiLGZ1bmN0aW9uKCl7Qi5zdHlsZS5kaXNwbGF5PSJub25lIn0pO2lmKEIuZmlyc3RDaGlsZCl7Qi5zdHlsZS5wb3NpdGlvbj0iZml4ZWQiO0Iuc3R5bGUudG9wPUcrInB4IjtCLnN0eWxlLmxlZnQ9SysicHgiO0Iuc3R5bGUuZGlzcGxheT0iYmxvY2siO1Q9Qi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTt2YXIgWT1ULmxlZnQtSztCLnN0eWxlLnRvcD0oRy0oVC50b3AtRykpLnRvRml4ZWQoMSkrInB4IjtCLnN0eWxlLmxlZnQ9KEstWSkudG9GaXhlZCgxKSsicHgifX07RC5wcm90b3R5cGUuc2V0U2xpY2luZ1NwZWM9ZnVuY3Rpb24oQil7dGhpcy5zbGljaW5nU3BlYz1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KEIpKTtpZihudWxsPT09dGhpcy5zbGljaW5nU3BlYyl0aHJvdyBFcnJvcigiQ2Fubm90IHNldCBzbGljaW5nIHNwZWMgdG8gbnVsbC4iKTt0aGlzLnJlbmRlcih0aGlzLnNsaWNpbmdTcGVjKX07RC5wcm90b3R5cGUuY2xlYXJBbGxEcm9wZG93bnM9CmZ1bmN0aW9uKCl7dGhpcy5kcm9wZG93bnMuZm9yRWFjaChmdW5jdGlvbihCKXtpZihudWxsIT1CKXtmb3IoO0IuZmlyc3RDaGlsZDspQi5yZW1vdmVDaGlsZChCLmZpcnN0Q2hpbGQpO0Iuc3R5bGUuZGlzcGxheT0ibm9uZSJ9fSl9O3JldHVybiBEfSgpLEY9ZnVuY3Rpb24oKXtmdW5jdGlvbiBEKEIsRyxLKXt0aGlzLnJvb3RFbGVtZW50PUI7dGhpcy50ZW5zb3JWaWV3PUc7dGhpcy5iYXNlUnVsZXJUaWNrPXRoaXMudG9wUnVsZXI9dGhpcy52YWx1ZVNlY3Rpb249dGhpcy5zbGljaW5nU3BlY1Jvb3Q9dGhpcy5pbmZvU3Vic2VjdGlvbj10aGlzLmhlYWRlclNlY3Rpb249bnVsbDt0aGlzLnRvcFJ1bGVyVGlja3M9W107dGhpcy5sZWZ0UnVsZXJUaWNrcz1bXTt0aGlzLnZhbHVlUm93cz1bXTt0aGlzLnZhbHVlRGl2cz1bXTt0aGlzLnNsaWNpbmdDb250cm9sPXRoaXMudmFsdWVUb29sdGlwPW51bGw7dGhpcy5jb2xzQ3V0b2ZmPXRoaXMucm93c0N1dG9mZj0hMTt0aGlzLnNlbGVjdGlvbj0KbnVsbDt0aGlzLm9wdGlvbnM9S3x8e307dGhpcy5zbGljaW5nU3BlYz1wKHRoaXMudGVuc29yVmlldy5zcGVjLnNoYXBlKTt0aGlzLnJhbms9dGhpcy50ZW5zb3JWaWV3LnNwZWMuc2hhcGUubGVuZ3RofUQucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3JldHVybiBjKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBqbSh0aGlzLGZ1bmN0aW9uKEIpe3N3aXRjaChCLmxhYmVsKXtjYXNlIDA6dGhpcy5yb290RWxlbWVudC5jbGFzc0xpc3QuYWRkKCJ0ZW5zb3Itd2lkZ2V0Iik7dGhpcy5yZW5kZXJIZWFkZXIoKTtpZighKGQodGhpcy50ZW5zb3JWaWV3LnNwZWMuZHR5cGUpfHxmKHRoaXMudGVuc29yVmlldy5zcGVjLmR0eXBlKXx8Zyh0aGlzLnRlbnNvclZpZXcuc3BlYy5kdHlwZSl8fGwodGhpcy50ZW5zb3JWaWV3LnNwZWMuZHR5cGUpKSl0aHJvdyBFcnJvcigiUmVuZGVyaW5nIGR0eXBlICIrdGhpcy50ZW5zb3JWaWV3LnNwZWMuZHR5cGUrIiBpcyBub3Qgc3VwcG9ydGVkIHlldC4iKTsKcmV0dXJuWzQsdGhpcy5yZW5kZXJWYWx1ZXMoKV07Y2FzZSAxOnJldHVybiBCLnNlbnQoKSxbMl19fSl9KX07RC5wcm90b3R5cGUucmVuZGVySGVhZGVyPWZ1bmN0aW9uKCl7bnVsbD09dGhpcy5oZWFkZXJTZWN0aW9uJiYodGhpcy5oZWFkZXJTZWN0aW9uPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMuaGVhZGVyU2VjdGlvbi5jbGFzc0xpc3QuYWRkKCJ0ZW5zb3Itd2lkZ2V0LWhlYWRlciIpLHRoaXMucm9vdEVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5oZWFkZXJTZWN0aW9uKSk7dGhpcy5yZW5kZXJJbmZvKCl9O0QucHJvdG90eXBlLnJlbmRlckluZm89ZnVuY3Rpb24oKXtpZihudWxsPT09dGhpcy5oZWFkZXJTZWN0aW9uKXRocm93IEVycm9yKCJSZW5kZXJpbmcgdGVuc29yIGluZm8gZmFpbGVkIGR1ZSB0byBtaXNpbmcgaGVhZGVyIHNlY3Rpb24iKTtudWxsPT10aGlzLmluZm9TdWJzZWN0aW9uJiYodGhpcy5pbmZvU3Vic2VjdGlvbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSwKdGhpcy5pbmZvU3Vic2VjdGlvbi5jbGFzc0xpc3QuYWRkKCJ0ZW5zb3Itd2lkZ2V0LWluZm8iKSx0aGlzLmhlYWRlclNlY3Rpb24uYXBwZW5kQ2hpbGQodGhpcy5pbmZvU3Vic2VjdGlvbikpO2Zvcig7dGhpcy5pbmZvU3Vic2VjdGlvbi5maXJzdENoaWxkOyl0aGlzLmluZm9TdWJzZWN0aW9uLnJlbW92ZUNoaWxkKHRoaXMuaW5mb1N1YnNlY3Rpb24uZmlyc3RDaGlsZCk7dGhpcy5yZW5kZXJOYW1lKCk7dGhpcy5yZW5kZXJEVHlwZSgpO3RoaXMucmVuZGVyU2hhcGUoKX07RC5wcm90b3R5cGUucmVuZGVyTmFtZT1mdW5jdGlvbigpe2lmKG51bGw9PXRoaXMuaW5mb1N1YnNlY3Rpb24pdGhyb3cgRXJyb3IoIlJlbmRlcmluZyB0ZW5zb3IgbmFtZSBmYWlsZWQgZHVlIHRvIG1pc3NpbmcgaW5mbyBzdWJzZWN0aW9uLiIpO2lmKG51bGwhPXRoaXMub3B0aW9ucy5uYW1lJiYwIT09dGhpcy5vcHRpb25zLm5hbWUubGVuZ3RoKXt2YXIgQj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtCLmNsYXNzTGlzdC5hZGQoInRlbnNvci13aWRnZXQtdGVuc29yLW5hbWUiKTsKQi50ZXh0Q29udGVudD1yKHRoaXMub3B0aW9ucy5uYW1lKTtCLnRpdGxlPXRoaXMub3B0aW9ucy5uYW1lO3RoaXMuaW5mb1N1YnNlY3Rpb24uYXBwZW5kQ2hpbGQoQil9fTtELnByb3RvdHlwZS5yZW5kZXJEVHlwZT1mdW5jdGlvbigpe2lmKG51bGw9PXRoaXMuaW5mb1N1YnNlY3Rpb24pdGhyb3cgRXJyb3IoIlJlbmRlcmluZyB0ZW5zb3IgZHR5cGUgZmFpbGVkIGR1ZSB0byBtaXNzaW5nIGluZm8gc3Vic2VjdGlvbi4iKTt2YXIgQj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtCLmNsYXNzTGlzdC5hZGQoInRlbnNvci13aWRnZXQtZHR5cGUiKTt2YXIgRz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7Ry5jbGFzc0xpc3QuYWRkKCJ0ZW5zb3Itd2lkZ2V0LWR0eXBlLWxhYmVsIik7Ry50ZXh0Q29udGVudD0iZHR5cGU6IjtCLmFwcGVuZENoaWxkKEcpO0c9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpO0cudGV4dENvbnRlbnQ9dGhpcy50ZW5zb3JWaWV3LnNwZWMuZHR5cGU7CkIuYXBwZW5kQ2hpbGQoRyk7dGhpcy5pbmZvU3Vic2VjdGlvbi5hcHBlbmRDaGlsZChCKX07RC5wcm90b3R5cGUucmVuZGVyU2hhcGU9ZnVuY3Rpb24oKXtpZihudWxsPT10aGlzLmluZm9TdWJzZWN0aW9uKXRocm93IEVycm9yKCJSZW5kZXJpbmcgdGVuc29yIHNoYXBlIGZhaWxlZCBkdWUgdG8gbWlzc2luZyBpbmZvIHN1YnNlY3Rpb24uIik7dmFyIEI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Qi5jbGFzc0xpc3QuYWRkKCJ0ZW5zb3Itd2lkZ2V0LXNoYXBlIik7dmFyIEc9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Ry5jbGFzc0xpc3QuYWRkKCJ0ZW5zb3Itd2lkZ2V0LXNoYXBlLWxhYmVsIik7Ry50ZXh0Q29udGVudD0ic2hhcGU6IjtCLmFwcGVuZENoaWxkKEcpO0c9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Ry5jbGFzc0xpc3QuYWRkKCJ0ZW5zb3Itd2lkZ2V0LXNoYXBlLXZhbHVlIik7Ry50ZXh0Q29udGVudD1tKHRoaXMudGVuc29yVmlldy5zcGVjLnNoYXBlKTsKQi5hcHBlbmRDaGlsZChHKTt0aGlzLmluZm9TdWJzZWN0aW9uLmFwcGVuZENoaWxkKEIpfTtELnByb3RvdHlwZS5yZW5kZXJWYWx1ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gYyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgQj10aGlzO3JldHVybiBqbSh0aGlzLGZ1bmN0aW9uKEcpe3N3aXRjaChHLmxhYmVsKXtjYXNlIDA6cmV0dXJuIDI8dGhpcy5yYW5rJiZudWxsPT09dGhpcy5zbGljaW5nU3BlY1Jvb3QmJih0aGlzLnNsaWNpbmdTcGVjUm9vdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLnNsaWNpbmdTcGVjUm9vdC5jbGFzc0xpc3QuYWRkKCJ0ZW5zb3Itd2lkZ2V0LXNsaWNpbmctZ3JvdXAiKSx0aGlzLnJvb3RFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuc2xpY2luZ1NwZWNSb290KSksbnVsbD09dGhpcy52YWx1ZVNlY3Rpb24mJih0aGlzLnZhbHVlU2VjdGlvbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLnZhbHVlU2VjdGlvbi5jbGFzc0xpc3QuYWRkKCJ0ZW5zb3Itd2lkZ2V0LXZhbHVlLXNlY3Rpb24iKSwKdGhpcy5yb290RWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLnZhbHVlU2VjdGlvbiksdGhpcy52YWx1ZVNlY3Rpb24uYWRkRXZlbnRMaXN0ZW5lcigid2hlZWwiLGZ1bmN0aW9uKEspe3JldHVybiBjKEIsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBqbSh0aGlzLGZ1bmN0aW9uKEwpe3N3aXRjaChMLmxhYmVsKXtjYXNlIDA6aWYobnVsbD09dGhpcy5zZWxlY3Rpb24pcmV0dXJuWzJdO0suc3RvcFByb3BhZ2F0aW9uKCk7Sy5wcmV2ZW50RGVmYXVsdCgpO3RoaXMuaGlkZVZhbHVlVG9vbHRpcCgpO3JldHVybls0LHRoaXMuc2Nyb2xsVXBPckRvd24oMDxLLmRlbHRhWT95LkRPV046eS5VUCldO2Nhc2UgMTpyZXR1cm4gTC5zZW50KCksWzJdfX0pfSl9KSx0aGlzLnZhbHVlU2VjdGlvbi50YWJJbmRleD0xMDI0LHRoaXMudmFsdWVTZWN0aW9uLmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLGZ1bmN0aW9uKEspe3ZhciBMPVszOCw0MCwzNywzOV07aWYobnVsbCE9Qi5zZWxlY3Rpb24mJgotMSE9PUwuaW5kZXhPZihLLmtleUNvZGUpKXtLLnN0b3BQcm9wYWdhdGlvbigpO0sucHJldmVudERlZmF1bHQoKTtCLmhpZGVWYWx1ZVRvb2x0aXAoKTt2YXIgSj1MPW51bGw7Mzg9PT1LLmtleUNvZGU/Sj15LlVQOjQwPT09Sy5rZXlDb2RlP0o9eS5ET1dOOjM3PT09Sy5rZXlDb2RlP0o9eS5MRUZUOjM5PT09Sy5rZXlDb2RlJiYoSj15LlJJR0hUKTtudWxsIT09SiYmKEw9Qi5zZWxlY3Rpb24ubW92ZShKLEIuc2xpY2luZ1NwZWMpKTtudWxsPT09TD9CLnJlbmRlclNlbGVjdGlvbigpOkw9PT15LlVQfHxMPT09eS5ET1dOP0Iuc2Nyb2xsVXBPckRvd24oTCk6KEw9PT15LkxFRlR8fEw9PT15LlJJR0hUKSYmQi5zY3JvbGxMZWZ0T3JSaWdodChMKX19KSksdGhpcy5jbGVhclZhbHVlU2VjdGlvbigpLHRoaXMuY3JlYXRlVG9wUnVsZXIoKSx0aGlzLmNyZWF0ZUxlZnRSdWxlcigpLHRoaXMuY3JlYXRlVmFsdWVEaXZzKCksWzQsdGhpcy5yZW5kZXJSdWxlcnNBbmRWYWx1ZURpdnMoKV07Y2FzZSAxOnJldHVybiBHLnNlbnQoKSwKMjx0aGlzLnJhbmsmJih0aGlzLnNsaWNpbmdDb250cm9sPW5ldyBDKHRoaXMuc2xpY2luZ1NwZWNSb290LHRoaXMudGVuc29yVmlldy5zcGVjLnNoYXBlLGZ1bmN0aW9uKEspe3JldHVybiBjKEIsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBqbSh0aGlzLGZ1bmN0aW9uKEwpe3N3aXRjaChMLmxhYmVsKXtjYXNlIDA6aWYocSh0aGlzLnNsaWNpbmdTcGVjLEspKXJldHVyblszLDJdO3RoaXMuc2xpY2luZ1NwZWM9SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShLKSk7cmV0dXJuWzQsdGhpcy5yZW5kZXIoKV07Y2FzZSAxOnJldHVybiBMLnNlbnQoKSxbMyw0XTtjYXNlIDI6cmV0dXJuIHRoaXMuc2xpY2luZ1NwZWM9SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShLKSksWzQsdGhpcy5yZW5kZXJSdWxlcnNBbmRWYWx1ZURpdnMoKV07Y2FzZSAzOkwuc2VudCgpLEwubGFiZWw9NDtjYXNlIDQ6cmV0dXJuWzJdfX0pfSl9KSx0aGlzLnNsaWNpbmdDb250cm9sLnJlbmRlcih0aGlzLnNsaWNpbmdTcGVjKSksClsyXX19KX0pfTtELnByb3RvdHlwZS5jbGVhclZhbHVlU2VjdGlvbj1mdW5jdGlvbigpe2lmKG51bGwhPT10aGlzLnZhbHVlU2VjdGlvbil7Zm9yKDt0aGlzLnZhbHVlU2VjdGlvbi5maXJzdENoaWxkOyl0aGlzLnZhbHVlU2VjdGlvbi5yZW1vdmVDaGlsZCh0aGlzLnZhbHVlU2VjdGlvbi5maXJzdENoaWxkKTt0aGlzLnRvcFJ1bGVyPW51bGw7dGhpcy52YWx1ZVJvd3M9W119fTtELnByb3RvdHlwZS5jcmVhdGVUb3BSdWxlcj1mdW5jdGlvbigpe3ZhciBCPXRoaXM7aWYobnVsbD09PXRoaXMudmFsdWVTZWN0aW9uKXRocm93IEVycm9yKCJGYWlsZWQgdG8gY3JlYXRlIHRvcCBydWxlciBkdWUgdG8gbWlzc2luZyB2YWx1ZSBzZWN0aW9uLiIpO251bGw9PXRoaXMudG9wUnVsZXImJih0aGlzLnRvcFJ1bGVyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMudG9wUnVsZXIuY2xhc3NMaXN0LmFkZCgidGVuZXNvci13aWRnZXQtdG9wLXJ1bGVyIiksdGhpcy50b3BSdWxlci5zdHlsZS53aGl0ZVNwYWNlPQoibm93cmFwIix0aGlzLnZhbHVlU2VjdGlvbi5hcHBlbmRDaGlsZCh0aGlzLnRvcFJ1bGVyKSx0aGlzLnRvcFJ1bGVyVGlja3M9W10sdGhpcy50b3BSdWxlci5hZGRFdmVudExpc3RlbmVyKCJ3aGVlbCIsZnVuY3Rpb24oUCl7cmV0dXJuIGMoQix2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIGptKHRoaXMsZnVuY3Rpb24oUyl7c3dpdGNoKFMubGFiZWwpe2Nhc2UgMDppZihudWxsPT10aGlzLnNlbGVjdGlvbilyZXR1cm5bMl07UC5zdG9wUHJvcGFnYXRpb24oKTtQLnByZXZlbnREZWZhdWx0KCk7dGhpcy5oaWRlVmFsdWVUb29sdGlwKCk7cmV0dXJuWzQsdGhpcy5zY3JvbGxMZWZ0T3JSaWdodCgwPFAuZGVsdGFZP3kuUklHSFQ6eS5MRUZUKV07Y2FzZSAxOnJldHVybiBTLnNlbnQoKSxbMl19fSl9KX0pKTtmb3IoO3RoaXMudG9wUnVsZXIuZmlyc3RDaGlsZDspdGhpcy50b3BSdWxlci5yZW1vdmVDaGlsZCh0aGlzLnRvcFJ1bGVyLmZpcnN0Q2hpbGQpO3RoaXMuYmFzZVJ1bGVyVGljaz0KZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7dGhpcy5iYXNlUnVsZXJUaWNrLmNsYXNzTGlzdC5hZGQoInRlbnNvci13aWRnZXQtdG9wLXJ1bGVyLXRpY2siKTt0aGlzLnRvcFJ1bGVyLmFwcGVuZENoaWxkKHRoaXMuYmFzZVJ1bGVyVGljayk7Mjw9dGhpcy5yYW5rJiYodGhpcy5zbGljaW5nU3BlYy5ob3Jpem9udGFsUmFuZ2U9WzAsbnVsbF0pO3ZhciBHPTE+PXRoaXMucmFuaz8xOnRoaXMudGVuc29yVmlldy5zcGVjLnNoYXBlW3RoaXMuc2xpY2luZ1NwZWMudmlld2luZ0RpbXNbMV1dO3ZhciBLPXRoaXMucm9vdEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkucmlnaHQ7dGhpcy5jb2xzQ3V0b2ZmPSExO2Zvcih2YXIgTD0wO0w8RzsrK0wpe3ZhciBKPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO0ouY2xhc3NMaXN0LmFkZCgidGVuc29yLXdpZGdldC10b3AtcnVsZXItdGljayIpO3RoaXMudG9wUnVsZXIuYXBwZW5kQ2hpbGQoSik7dGhpcy50b3BSdWxlclRpY2tzLnB1c2goSik7CmlmKEouZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkucmlnaHQ+PUspe2lmKDI8PXRoaXMucmFuayl7aWYobnVsbD09PXRoaXMuc2xpY2luZ1NwZWMuaG9yaXpvbnRhbFJhbmdlKXRocm93IEVycm9yKCJNaXNzaW5nIGhvcml6b250YWwgcmFuZ2UgZm9yICIrdGhpcy5yYW5rKyJEIHRlbnNvci4iKTt0aGlzLnNsaWNpbmdTcGVjLmhvcml6b250YWxSYW5nZVsxXT1MKzE7dGhpcy5jb2xzQ3V0b2ZmPSEwfWJyZWFrfX1pZighdGhpcy5jb2xzQ3V0b2ZmJiYyPD10aGlzLnJhbmspe2lmKG51bGw9PT10aGlzLnNsaWNpbmdTcGVjLmhvcml6b250YWxSYW5nZSl0aHJvdyBFcnJvcigiTWlzc2luZyBob3Jpem9udGFsIHJhbmdlIGZvciAiK3RoaXMucmFuaysiRCB0ZW5zb3IuIik7dGhpcy5zbGljaW5nU3BlYy5ob3Jpem9udGFsUmFuZ2VbMV09R319O0QucHJvdG90eXBlLmNyZWF0ZUxlZnRSdWxlcj1mdW5jdGlvbigpe2lmKG51bGw9PT10aGlzLnZhbHVlU2VjdGlvbil0aHJvdyBFcnJvcigiRmFpbGVkIHRvIGNyZWF0ZSBsZWZ0IHJ1bGVyIGR1ZSB0byBtaXNzaW5nIHZhbHVlIHNlY3Rpb24uIik7CnRoaXMudmFsdWVSb3dzPVtdO3RoaXMubGVmdFJ1bGVyVGlja3M9W107MTw9dGhpcy5yYW5rJiYodGhpcy5zbGljaW5nU3BlYy52ZXJ0aWNhbFJhbmdlPVswLG51bGxdKTt2YXIgQj0wPT09dGhpcy5yYW5rPzE6dGhpcy50ZW5zb3JWaWV3LnNwZWMuc2hhcGVbdGhpcy5zbGljaW5nU3BlYy52aWV3aW5nRGltc1swXV07dGhpcy5yb3dzQ3V0b2ZmPSExO2Zvcih2YXIgRz10aGlzLnJvb3RFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmJvdHRvbSxLPTA7SzxCOysrSyl7dmFyIEw9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7TC5jbGFzc0xpc3QuYWRkKCJ0ZW5zb3Itd2lkZ2V0LXZhbHVlLXJvdyIpO3RoaXMudmFsdWVTZWN0aW9uLmFwcGVuZENoaWxkKEwpO3RoaXMudmFsdWVSb3dzLnB1c2goTCk7dmFyIEo9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Si5jbGFzc0xpc3QuYWRkKCJ0ZW5zb3Itd2lkZ2V0LXRvcC1ydWxlci10aWNrIik7TC5hcHBlbmRDaGlsZChKKTsKdGhpcy5sZWZ0UnVsZXJUaWNrcy5wdXNoKEopO2lmKEouZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuYm90dG9tPj1HKXtpZigxPD10aGlzLnJhbmspe2lmKG51bGw9PT10aGlzLnNsaWNpbmdTcGVjLnZlcnRpY2FsUmFuZ2UpdGhyb3cgRXJyb3IoIk1pc3NpbmcgdmVydGljYWwgcmFuZ2UgZm9yICIrdGhpcy5yYW5rKyJEIHRlbnNvci4iKTt0aGlzLnNsaWNpbmdTcGVjLnZlcnRpY2FsUmFuZ2VbMV09SysxO3RoaXMucm93c0N1dG9mZj0hMH1icmVha319aWYoIXRoaXMucm93c0N1dG9mZiYmMTw9dGhpcy5yYW5rKXtpZihudWxsPT09dGhpcy5zbGljaW5nU3BlYy52ZXJ0aWNhbFJhbmdlKXRocm93IEVycm9yKCJNaXNzaW5nIHZlcnRpY2FsIHJhbmdlIGZvciAiK3RoaXMucmFuaysiRCB0ZW5zb3IuIik7dGhpcy5zbGljaW5nU3BlYy52ZXJ0aWNhbFJhbmdlWzFdPUJ9fTtELnByb3RvdHlwZS5jcmVhdGVWYWx1ZURpdnM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBCKFMpe2Z1bmN0aW9uIE4oWSl7dmFyIGFhPQpkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTthYS5jbGFzc0xpc3QuYWRkKCJ0ZW5zb3Itd2lkZ2V0LXZhbHVlLWRpdiIpO0oudmFsdWVSb3dzW1NdLmFwcGVuZENoaWxkKGFhKTtKLnZhbHVlRGl2c1tTXS5wdXNoKGFhKTthYS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsZnVuY3Rpb24oKXtHLnNlbGVjdGlvbj1uZXcgeChHLnRlbnNvclZpZXcuc3BlYy5zaGFwZSxHLnNsaWNpbmdTcGVjLG51bGw9PUcuc2xpY2luZ1NwZWMudmVydGljYWxSYW5nZXx8bnVsbD09Ry5zbGljaW5nU3BlYy52ZXJ0aWNhbFJhbmdlWzBdPzA6Ry5zbGljaW5nU3BlYy52ZXJ0aWNhbFJhbmdlWzBdK1MsbnVsbD09Ry5zbGljaW5nU3BlYy5ob3Jpem9udGFsUmFuZ2V8fG51bGw9PUcuc2xpY2luZ1NwZWMuaG9yaXpvbnRhbFJhbmdlWzBdPzA6Ry5zbGljaW5nU3BlYy5ob3Jpem9udGFsUmFuZ2VbMF0rWSwxLDEpO0cucmVuZGVyU2VsZWN0aW9uKCl9KTthYS5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWVudGVyIiwKZnVuY3Rpb24oKXt2YXIgaGE9YWEuZ2V0QXR0cmlidXRlKCJkZXRhaWxlZC12YWx1ZSIpO2lmKG51bGwhPT1oYSl7dmFyIFg9Ry5yb290RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxjYT1hYS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxlYT1jYS5ib3R0b20tY2EudG9wLGthPWNhLnJpZ2h0LWNhLmxlZnQsYmE9Ry5jYWxjdWxhdGVJbmRpY2VzKFMsWSk7Ry5kcmF3VmFsdWVUb29sdGlwKGJhLGhhLGNhLnRvcC1YLnRvcCsuOCplYSxjYS5sZWZ0LVgubGVmdCsuNzUqa2EpfX0pO2FhLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlbGVhdmUiLGZ1bmN0aW9uKCl7Ry5oaWRlVmFsdWVUb29sdGlwKCl9KX1KLnZhbHVlRGl2c1tTXT1bXTtmb3IodmFyIFQ9MDtUPEs7KytUKU4oVCl9dmFyIEc9dGhpcztpZihudWxsPT09dGhpcy52YWx1ZVJvd3MpdGhyb3cgRXJyb3IoIlZhbHVlIHJvd3MgYXJlIHVuZXhwZWN0ZWRseSB1bmluaXRpYWxpemVkLiIpO3RoaXMudmFsdWVEaXZzPVtdO2Zvcih2YXIgSz0KdGhpcy50b3BSdWxlclRpY2tzLmxlbmd0aCxMPXRoaXMudmFsdWVSb3dzLmxlbmd0aCxKPXRoaXMsUD0wO1A8TDsrK1ApQihQKX07RC5wcm90b3R5cGUucmVuZGVyVG9wUnVsZXI9ZnVuY3Rpb24oKXtpZigyPD10aGlzLnJhbmspZm9yKHZhciBCPXRoaXMudGVuc29yVmlldy5zcGVjLnNoYXBlW3RoaXMuc2xpY2luZ1NwZWMudmlld2luZ0RpbXNbMV1dLEc9MDtHPHRoaXMudG9wUnVsZXJUaWNrcy5sZW5ndGg7KytHKXtpZihudWxsPT09dGhpcy5zbGljaW5nU3BlYy5ob3Jpem9udGFsUmFuZ2UpdGhyb3cgRXJyb3IoIk1pc3NpbmcgaG9yaXpvbnRhbCByYW5nZSBmb3IgIit0aGlzLnJhbmsrIkQgdGVuc29yLiIpO3ZhciBLPXRoaXMuc2xpY2luZ1NwZWMuaG9yaXpvbnRhbFJhbmdlWzBdK0c7dGhpcy50b3BSdWxlclRpY2tzW0ddLnRleHRDb250ZW50PUs8Qj8iIitLOiIifX07RC5wcm90b3R5cGUucmVuZGVyTGVmdFJ1bGVyPWZ1bmN0aW9uKCl7aWYoMTw9dGhpcy5yYW5rKWZvcih2YXIgQj0KdGhpcy50ZW5zb3JWaWV3LnNwZWMuc2hhcGVbdGhpcy5zbGljaW5nU3BlYy52aWV3aW5nRGltc1swXV0sRz0wO0c8dGhpcy5sZWZ0UnVsZXJUaWNrcy5sZW5ndGg7KytHKXtpZihudWxsPT09dGhpcy5zbGljaW5nU3BlYy52ZXJ0aWNhbFJhbmdlKXRocm93IEVycm9yKCJNaXNzaW5nIHZlcnRjaWFsIHJhbmdlIGZvciAiK3RoaXMucmFuaysiRCB0ZW5zb3IuIik7dmFyIEs9dGhpcy5zbGljaW5nU3BlYy52ZXJ0aWNhbFJhbmdlWzBdK0c7dGhpcy5sZWZ0UnVsZXJUaWNrc1tHXS50ZXh0Q29udGVudD1LPEI/IiIrSzoiIn19O0QucHJvdG90eXBlLnJlbmRlclZhbHVlRGl2cz1mdW5jdGlvbigpe3JldHVybiBjKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBCLEcsSyxMLEosUCxTLE47cmV0dXJuIGptKHRoaXMsZnVuY3Rpb24oVCl7c3dpdGNoKFQubGFiZWwpe2Nhc2UgMDpyZXR1cm4gQj10aGlzLnZhbHVlRGl2cy5sZW5ndGgsRz10aGlzLnZhbHVlRGl2c1swXS5sZW5ndGgsCls0LHRoaXMudGVuc29yVmlldy52aWV3KHRoaXMuc2xpY2luZ1NwZWMpXTtjYXNlIDE6Sz1ULnNlbnQoKTswPT09dGhpcy5yYW5rP0s9W1tLXV06MT09PXRoaXMucmFuayYmKEs9Sy5tYXAoZnVuY3Rpb24oWSl7cmV0dXJuW1ldfSkpO0w9dGhpcy5nZXRWYWx1ZUNsYXNzKCk7Zm9yKEo9MDtKPEI7KytKKWZvcihQPTA7UDxHOysrUClTPXRoaXMudmFsdWVEaXZzW0pdW1BdLEo8Sy5sZW5ndGgmJlA8S1tKXS5sZW5ndGg/KE49S1tKXVtQXSwibnVtZXJpYyI9PT1MP1MudGV4dENvbnRlbnQ9dChOLGQodGhpcy50ZW5zb3JWaWV3LnNwZWMuZHR5cGUpKToiYm9vbGVhbiI9PT1MP1MudGV4dENvbnRlbnQ9dihOKToic3RyaW5nIj09PUwmJihTLnRleHRDb250ZW50PUEoTikpLFMuc2V0QXR0cmlidXRlKCJkZXRhaWxlZC12YWx1ZSIsdGhpcy5nZXREZXRhaWxlZFZhbHVlVG9vbHRpcFN0cmluZyhOKSkpOihTLnRleHRDb250ZW50PSIiLFMuc2V0QXR0cmlidXRlKCJkZXRhaWxlZC12YWx1ZSIsIiIpKTsKdGhpcy5yZW5kZXJTZWxlY3Rpb24oKTtyZXR1cm5bMl19fSl9KX07RC5wcm90b3R5cGUuZ2V0RGV0YWlsZWRWYWx1ZVRvb2x0aXBTdHJpbmc9ZnVuY3Rpb24oQil7cmV0dXJuImJvb2xlYW4iPT09dGhpcy5nZXRWYWx1ZUNsYXNzKCk/dihCLCExKToic3RyaW5nIj09PXRoaXMuZ2V0VmFsdWVDbGFzcygpPyJMZW5ndGgtIitCLmxlbmd0aCsnIHN0cmluZzogIicrQShCLDUwMCkrJyInOlN0cmluZyhCKX07RC5wcm90b3R5cGUucmVuZGVyU2VsZWN0aW9uPWZ1bmN0aW9uKCl7aWYobnVsbCE9dGhpcy5zZWxlY3Rpb24pZm9yKHZhciBCPXRoaXMudmFsdWVEaXZzLmxlbmd0aCxHPXRoaXMudmFsdWVEaXZzWzBdLmxlbmd0aCxLPTA7SzxCOysrSylmb3IodmFyIEw9MDtMPEc7KytMKXt2YXIgSj10aGlzLnZhbHVlRGl2c1tLXVtMXTtKLmNsYXNzTGlzdC5yZW1vdmUoInRlbnNvci13aWRnZXQtdmFsdWUtZGl2LXNlbGVjdGlvbiIpO0ouY2xhc3NMaXN0LnJlbW92ZSgidGVuc29yLXdpZGdldC12YWx1ZS1kaXYtc2VsZWN0aW9uLXRvcCIpOwpKLmNsYXNzTGlzdC5yZW1vdmUoInRlbnNvci13aWRnZXQtdmFsdWUtZGl2LXNlbGVjdGlvbi1ib3R0b20iKTtKLmNsYXNzTGlzdC5yZW1vdmUoInRlbnNvci13aWRnZXQtdmFsdWUtZGl2LXNlbGVjdGlvbi1sZWZ0Iik7Si5jbGFzc0xpc3QucmVtb3ZlKCJ0ZW5zb3Itd2lkZ2V0LXZhbHVlLWRpdi1zZWxlY3Rpb24tcmlnaHQiKTt2YXIgUD10aGlzLmNhbGN1bGF0ZUluZGljZXMoSyxMKTtQPXRoaXMuc2VsZWN0aW9uLmdldEVsZW1lbnRTdGF0dXMoUCk7bnVsbCE9PVAmJihKLmNsYXNzTGlzdC5hZGQoInRlbnNvci13aWRnZXQtdmFsdWUtZGl2LXNlbGVjdGlvbiIpLFAudG9wRWRnZSYmSi5jbGFzc0xpc3QuYWRkKCJ0ZW5zb3Itd2lkZ2V0LXZhbHVlLWRpdi1zZWxlY3Rpb24tdG9wIiksUC5ib3R0b21FZGdlJiZKLmNsYXNzTGlzdC5hZGQoInRlbnNvci13aWRnZXQtdmFsdWUtZGl2LXNlbGVjdGlvbi1ib3R0b20iKSxQLmxlZnRFZGdlJiZKLmNsYXNzTGlzdC5hZGQoInRlbnNvci13aWRnZXQtdmFsdWUtZGl2LXNlbGVjdGlvbi1sZWZ0IiksClAucmlnaHRFZGdlJiZKLmNsYXNzTGlzdC5hZGQoInRlbnNvci13aWRnZXQtdmFsdWUtZGl2LXNlbGVjdGlvbi1yaWdodCIpKX19O0QucHJvdG90eXBlLmNhbGN1bGF0ZUluZGljZXM9ZnVuY3Rpb24oQixHKXtmb3IodmFyIEs9W10sTD10aGlzLnNsaWNpbmdTcGVjLnNsaWNpbmdEaW1zQW5kSW5kaWNlcy5tYXAoZnVuY3Rpb24oTil7cmV0dXJuIE4uZGltfSksSj10aGlzLnNsaWNpbmdTcGVjLnNsaWNpbmdEaW1zQW5kSW5kaWNlcy5tYXAoZnVuY3Rpb24oTil7cmV0dXJuIE4uaW5kZXh9KSxQPTA7UDx0aGlzLnJhbms7KytQKWlmKC0xIT09TC5pbmRleE9mKFApKXt2YXIgUz1KW0wuaW5kZXhPZihQKV07aWYobnVsbD09PVMpdGhyb3cgRXJyb3IoIkZhaWxlZCB0byBjYWxjdWxhdGUgaW5kaWNlczogVW5kZXRlcm1pbmVkIGluZGV4IGF0IGRpbWVuc2lvbiAiK1ApO0sucHVzaChTKX1lbHNlIGlmKFA9PT10aGlzLnNsaWNpbmdTcGVjLnZpZXdpbmdEaW1zWzBdKXtpZihudWxsPT09dGhpcy5zbGljaW5nU3BlYy52ZXJ0aWNhbFJhbmdlfHwKbnVsbD09PXRoaXMuc2xpY2luZ1NwZWMudmVydGljYWxSYW5nZVswXSl0aHJvdyBFcnJvcigiRmFpbGVkIHRvIGNhbGN1bGF0ZSBpbmRpY2VzIGR1ZSB0byB1bmRlcnRlcm1pbmVkIHZlcnRpY2FsIHJhbmdlLiIpO0sucHVzaCh0aGlzLnNsaWNpbmdTcGVjLnZlcnRpY2FsUmFuZ2VbMF0rQil9ZWxzZSBpZihQPT09dGhpcy5zbGljaW5nU3BlYy52aWV3aW5nRGltc1sxXSl7aWYobnVsbD09PXRoaXMuc2xpY2luZ1NwZWMuaG9yaXpvbnRhbFJhbmdlfHxudWxsPT09dGhpcy5zbGljaW5nU3BlYy5ob3Jpem9udGFsUmFuZ2VbMF0pdGhyb3cgRXJyb3IoIkZhaWxlZCB0byBjYWxjdWxhdGUgaW5kaWNlcyBkdWUgdG8gdW5kZXJ0ZXJtaW5lZCB2ZXJ0aWNhbCByYW5nZS4iKTtLLnB1c2godGhpcy5zbGljaW5nU3BlYy5ob3Jpem9udGFsUmFuZ2VbMF0rRyl9cmV0dXJuIEt9O0QucHJvdG90eXBlLmRyYXdWYWx1ZVRvb2x0aXA9ZnVuY3Rpb24oQixHLEssTCl7bnVsbD09PXRoaXMudmFsdWVUb29sdGlwJiYKKHRoaXMudmFsdWVUb29sdGlwPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMudmFsdWVUb29sdGlwLmNsYXNzTGlzdC5hZGQoInRlbnNvci13aWRnZXQtdmFsdWUtdG9vbHRpcCIpLHRoaXMucm9vdEVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy52YWx1ZVRvb2x0aXApKTtmb3IoO3RoaXMudmFsdWVUb29sdGlwLmZpcnN0Q2hpbGQ7KXRoaXMudmFsdWVUb29sdGlwLnJlbW92ZUNoaWxkKHRoaXMudmFsdWVUb29sdGlwLmZpcnN0Q2hpbGQpO3ZhciBKPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO0ouY2xhc3NMaXN0LmFkZCgidGVuc29yLXdpZGdldC12YWx1ZS10b29sdGlwLWluZGljZXMiKTtKLnRleHRDb250ZW50PSJJbmRpY2VzOiAiK0pTT04uc3RyaW5naWZ5KEIpO3RoaXMudmFsdWVUb29sdGlwLmFwcGVuZENoaWxkKEopO0I9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Qi5jbGFzc0xpc3QuYWRkKCJ0ZW5zb3Itd2lkZ2V0LXZhbHVlLXRvb2x0aXAtdmFsdWUiKTsKQi50ZXh0Q29udGVudD1HO3RoaXMudmFsdWVUb29sdGlwLmFwcGVuZENoaWxkKEIpO3RoaXMudmFsdWVUb29sdGlwLnN0eWxlLnRvcD1LKyJweCI7dGhpcy52YWx1ZVRvb2x0aXAuc3R5bGUubGVmdD1MKyJweCI7dGhpcy52YWx1ZVRvb2x0aXAuc3R5bGUuZGlzcGxheT0iYmxvY2sifTtELnByb3RvdHlwZS5oaWRlVmFsdWVUb29sdGlwPWZ1bmN0aW9uKCl7bnVsbCE9dGhpcy52YWx1ZVRvb2x0aXAmJih0aGlzLnZhbHVlVG9vbHRpcC5zdHlsZS5kaXNwbGF5PSJub25lIil9O0QucHJvdG90eXBlLnJlbmRlclJ1bGVyc0FuZFZhbHVlRGl2cz1mdW5jdGlvbigpe3JldHVybiBjKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBqbSh0aGlzLGZ1bmN0aW9uKEIpe3N3aXRjaChCLmxhYmVsKXtjYXNlIDA6cmV0dXJuIG51bGwhPXRoaXMuc2xpY2luZ0NvbnRyb2wmJnRoaXMuc2xpY2luZ0NvbnRyb2wuc2V0U2xpY2luZ1NwZWModGhpcy5zbGljaW5nU3BlYyksdGhpcy5yZW5kZXJUb3BSdWxlcigpLAp0aGlzLnJlbmRlckxlZnRSdWxlcigpLFs0LHRoaXMucmVuZGVyVmFsdWVEaXZzKCldO2Nhc2UgMTpyZXR1cm4gQi5zZW50KCksWzJdfX0pfSl9O0QucHJvdG90eXBlLnNjcm9sbEhvcml6b250YWxseT1mdW5jdGlvbihCKXtyZXR1cm4gYyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgRyxLO3JldHVybiBqbSh0aGlzLGZ1bmN0aW9uKEwpe3N3aXRjaChMLmxhYmVsKXtjYXNlIDA6aWYoMT49dGhpcy5yYW5rKXJldHVyblsyXTtpZihudWxsPT09dGhpcy5zbGljaW5nU3BlYy5ob3Jpem9udGFsUmFuZ2UpdGhyb3cgRXJyb3IoIk1pc3NpbmcgaG9yaXpvbnRhbCByYW5nZSBmb3IgIit0aGlzLnJhbmsrIkQgdGVuc29yLiIpO0c9dGhpcy50ZW5zb3JWaWV3LnNwZWMuc2hhcGVbdGhpcy5zbGljaW5nU3BlYy52aWV3aW5nRGltc1sxXV07aWYoMD5CfHxCPj1HKXRocm93IEVycm9yKCJJbmRleCBvdXQgb2YgYm91bmQ6ICIrQisiIGlzIG91dHNpZGUgWzAsICIrRysiXSkiKTt0aGlzLnNsaWNpbmdTcGVjLmhvcml6b250YWxSYW5nZVswXT0KQjt0aGlzLnNsaWNpbmdTcGVjLmhvcml6b250YWxSYW5nZVsxXT1CK3RoaXMudG9wUnVsZXJUaWNrcy5sZW5ndGg7Sz10aGlzLnRlbnNvclZpZXcuc3BlYy5zaGFwZVt0aGlzLnNsaWNpbmdTcGVjLnZpZXdpbmdEaW1zWzFdXTt0aGlzLnNsaWNpbmdTcGVjLmhvcml6b250YWxSYW5nZVsxXT5LJiYodGhpcy5zbGljaW5nU3BlYy5ob3Jpem9udGFsUmFuZ2VbMV09Syk7cmV0dXJuWzQsdGhpcy5yZW5kZXJSdWxlcnNBbmRWYWx1ZURpdnMoKV07Y2FzZSAxOnJldHVybiBMLnNlbnQoKSxbMl19fSl9KX07RC5wcm90b3R5cGUuc2Nyb2xsVmVydGljYWxseT1mdW5jdGlvbihCKXtyZXR1cm4gYyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgRyxLO3JldHVybiBqbSh0aGlzLGZ1bmN0aW9uKEwpe3N3aXRjaChMLmxhYmVsKXtjYXNlIDA6aWYoMD09PXRoaXMucmFuaylyZXR1cm5bMl07aWYobnVsbD09PXRoaXMuc2xpY2luZ1NwZWMudmVydGljYWxSYW5nZSl0aHJvdyBFcnJvcigiTWlzc2luZyB2ZXJ0aWNhbCByYW5nZSBmb3IgIisKdGhpcy5yYW5rKyJEIHRlbnNvci4iKTtpZihudWxsPT09dGhpcy52YWx1ZVJvd3MpdGhyb3cgRXJyb3IoIlZlcnRpY2FsIHNjcm9sbGluZyBmYWlsZWQgZHVlIHRvIG1pc3NpbmcgdmFsdWUgcm93cy4iKTtHPXRoaXMudGVuc29yVmlldy5zcGVjLnNoYXBlW3RoaXMuc2xpY2luZ1NwZWMudmlld2luZ0RpbXNbMF1dO2lmKDA+Qnx8Qj49Ryl0aHJvdyBFcnJvcigiSW5kZXggb3V0IG9mIGJvdW5kOiAiK0IrIiBpcyBvdXRzaWRlIFswLCAiK0crIl0pIik7dGhpcy5zbGljaW5nU3BlYy52ZXJ0aWNhbFJhbmdlWzBdPUI7dGhpcy5zbGljaW5nU3BlYy52ZXJ0aWNhbFJhbmdlWzFdPUIrdGhpcy52YWx1ZVJvd3MubGVuZ3RoO0s9dGhpcy50ZW5zb3JWaWV3LnNwZWMuc2hhcGVbdGhpcy5zbGljaW5nU3BlYy52aWV3aW5nRGltc1swXV07dGhpcy5zbGljaW5nU3BlYy52ZXJ0aWNhbFJhbmdlWzFdPksmJih0aGlzLnNsaWNpbmdTcGVjLnZlcnRpY2FsUmFuZ2VbMV09Syk7cmV0dXJuWzQsdGhpcy5yZW5kZXJSdWxlcnNBbmRWYWx1ZURpdnMoKV07CmNhc2UgMTpyZXR1cm4gTC5zZW50KCksWzJdfX0pfSl9O0QucHJvdG90eXBlLnNjcm9sbFVwT3JEb3duPWZ1bmN0aW9uKEIpe3JldHVybiBjKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBHLEssTDtyZXR1cm4gam0odGhpcyxmdW5jdGlvbihKKXtzd2l0Y2goSi5sYWJlbCl7Y2FzZSAwOmlmKDA9PT10aGlzLnJhbmt8fCF0aGlzLnJvd3NDdXRvZmYpcmV0dXJuWzJdO2lmKG51bGw9PT10aGlzLnNsaWNpbmdTcGVjLnZlcnRpY2FsUmFuZ2UpdGhyb3cgRXJyb3IoIk1pc3NpbmcgdmVydGljYWwgcmFuZ2UgZm9yICIrdGhpcy5yYW5rKyJEIHRlbnNvci4iKTtpZihudWxsPT09dGhpcy52YWx1ZVJvd3MpdGhyb3cgRXJyb3IoIlZlcnRpY2FsIHNjcm9sbGluZyBmYWlsZWQgZHVlIHRvIG1pc3NpbmcgdmFsdWUgcm93cy4iKTtHPXRoaXMuc2xpY2luZ1NwZWMudmVydGljYWxSYW5nZVswXTtpZihCIT09eS5ET1dOKXJldHVyblszLDNdO0s9dGhpcy52YWx1ZVJvd3MubGVuZ3RoLQoxO0w9dGhpcy50ZW5zb3JWaWV3LnNwZWMuc2hhcGVbdGhpcy5zbGljaW5nU3BlYy52aWV3aW5nRGltc1swXV0tSztyZXR1cm4gRzxMP1s0LHRoaXMuc2Nyb2xsVmVydGljYWxseShHKzEpXTpbMywyXTtjYXNlIDE6Si5zZW50KCksSi5sYWJlbD0yO2Nhc2UgMjpyZXR1cm5bMyw1XTtjYXNlIDM6cmV0dXJuIDA8PUctMT9bNCx0aGlzLnNjcm9sbFZlcnRpY2FsbHkoRy0xKV06WzMsNV07Y2FzZSA0Okouc2VudCgpLEoubGFiZWw9NTtjYXNlIDU6cmV0dXJuWzJdfX0pfSl9O0QucHJvdG90eXBlLnNjcm9sbExlZnRPclJpZ2h0PWZ1bmN0aW9uKEIpe3JldHVybiBjKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBHLEssTDtyZXR1cm4gam0odGhpcyxmdW5jdGlvbihKKXtzd2l0Y2goSi5sYWJlbCl7Y2FzZSAwOmlmKDE+PXRoaXMucmFua3x8IXRoaXMuY29sc0N1dG9mZilyZXR1cm5bMl07aWYobnVsbD09PXRoaXMuc2xpY2luZ1NwZWMuaG9yaXpvbnRhbFJhbmdlKXRocm93IEVycm9yKCJIb3Jpem9udGFsIHNjcm9sbGluZyBmYWlsZWQgZHVlIHRvIG1pc3NpbmcgaG9yaXpvbnRhbCByYW5nZS4iKTsKRz10aGlzLnNsaWNpbmdTcGVjLmhvcml6b250YWxSYW5nZVswXTtpZihCIT09eS5SSUdIVClyZXR1cm5bMywzXTtLPXRoaXMudG9wUnVsZXJUaWNrcy5sZW5ndGgtMTtMPXRoaXMudGVuc29yVmlldy5zcGVjLnNoYXBlW3RoaXMuc2xpY2luZ1NwZWMudmlld2luZ0RpbXNbMV1dLUs7cmV0dXJuIEc8TD9bNCx0aGlzLnNjcm9sbEhvcml6b250YWxseShHKzEpXTpbMywyXTtjYXNlIDE6Si5zZW50KCksSi5sYWJlbD0yO2Nhc2UgMjpyZXR1cm5bMyw1XTtjYXNlIDM6cmV0dXJuIDA8PUctMT9bNCx0aGlzLnNjcm9sbEhvcml6b250YWxseShHLTEpXTpbMyw1XTtjYXNlIDQ6Si5zZW50KCksSi5sYWJlbD01O2Nhc2UgNTpyZXR1cm5bMl19fSl9KX07RC5wcm90b3R5cGUubmF2aWdhdGVUb0luZGljZXM9ZnVuY3Rpb24oKXtyZXR1cm4gYyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gam0odGhpcyxmdW5jdGlvbigpe3Rocm93IEVycm9yKCJuYXZpZ2F0ZVRvSW5kaWNlcygpIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQuIik7Cn0pfSl9O0QucHJvdG90eXBlLmdldFZhbHVlQ2xhc3M9ZnVuY3Rpb24oKXt2YXIgQj10aGlzLnRlbnNvclZpZXcuc3BlYy5kdHlwZTtyZXR1cm4gZChCKXx8ZihCKT8ibnVtZXJpYyI6ZyhCKT8iYm9vbGVhbiI6InN0cmluZyJ9O3JldHVybiBEfSgpO2EudGVuc29yV2lkZ2V0PWZ1bmN0aW9uKEQsQixHKXtyZXR1cm4gbmV3IEYoRCxCLEcpfTthLlZFUlNJT049IjAuMC4wIjtyZXR1cm4gYX0oe30pOwo8L3NjcmlwdD4KPHN0eWxlPi8qIENvcHlyaWdodCAyMDE5IFRoZSBUZW5zb3JGbG93IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgpZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuClNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCgoudGVuc29yLXdpZGdldCB7CiAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKICBmb250LXNpemU6IDE0cHg7CiAgb3ZlcmZsb3cteDogaGlkZGVuOwogIG92ZXJmbG93LXk6IGhpZGRlbjsKICBwb3NpdGlvbjogcmVsYXRpdmU7Cn0KCi50ZW5zb3Itd2lkZ2V0LWRpbSB7CiAgYm9yZGVyOiAxcHggc29saWQgcmdiKDE2MCwgMTYwLCAxNjApOwogIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICBmb250LXNpemU6IDEycHg7CiAgaGVpZ2h0OiAxNHB4OwogIGxpbmUtaGVpZ2h0OiAxNHB4OwogIG1hcmdpbi1sZWZ0OiAxNXB4OwogIG1hcmdpbi1yaWdodDogMTVweDsKICBwYWRkaW5nOiAycHg7Cn0KCi50ZW5zb3Itd2lkZ2V0LWRpbS1jb21tYSB7CiAgY29sb3I6IHJnYigxMjgsIDEyOCwgMTI4KTsKICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgZm9udC1zaXplOiAxMnB4OwogIGhlaWdodDogMTRweDsKICBsaW5lLWhlaWdodDogMTRweDsKfQoKLnRlbnNvci13aWRnZXQtZGltLWhpZ2hsaWdodGVkIHsKICBib3JkZXI6IDFweCBzb2xpZCByZ2IoMTAwLCAxODAsIDI1NSk7CiAgZm9udC13ZWlnaHQ6IGJvbGQ7Cn0KCi50ZW5zb3Itd2lkZ2V0LWRpbS1icmFja2V0cyB7CiAgY29sb3I6IHJnYigxMjgsIDEyOCwgMTI4KTsKICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgZm9udC1zaXplOiA4cHQ7Cn0KCi50ZW5zb3Itd2lkZ2V0LWRpbS1kcm9wZG93biB7CiAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDI1NSwgMjU1LCAyNTUpOwogIGJvcmRlcjogMXB4IHNvbGlkIHJnYigxMjgsIDEyOCwgMTI4KTsKICBib3gtc2hhZG93OiAycHggMnB4IDJweCAjYjBiMGIwOwogIGN1cnNvcjogcG9pbnRlcjsKICB3aWR0aDogMTgwcHg7CiAgei1pbmRleDogMTAwMDsKfQoKLnRlbnNvci13aWRnZXQtZGltLWRyb3Bkb3duLW1lbnUtaXRlbSB7CiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHJnYigxODAsIDE4MCwgMTgwKTsKICBmb250LXNpemU6IDEycHg7CiAgcGFkZGluZzogM3B4Owp9CgoudGVuc29yLXdpZGdldC1kaW0tZHJvcGRvd24tbWVudS1pdGVtLWFjdGl2ZSB7CiAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDEwMCwgMTgwLCAyNTUpOwogIGNvbG9yOiByZ2IoMjU1LCAyNTUsIDI1NSk7Cn0KCi50ZW5zb3Itd2lkZ2V0LWR0eXBlIHsKICBhbGlnbi1jb250ZW50OiBjZW50ZXI7CiAgY29sb3I6IHJnYig2MCwgNjAsIDYwKTsKICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgZm9udC1zaXplOiA4cHQ7CiAgaGVpZ2h0OiA0OHB4OwogIGxpbmUtaGVpZ2h0OiAyMnB4OwogIG1heC1oZWlnaHQ6IDIycHg7CiAgcGFkZGluZy1sZWZ0OiAxNHB4OwogIHBhZGRpbmctcmlnaHQ6IDEwcHg7CiAgcG9zaXRpb246IHJlbGF0aXZlOwogIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7Cn0KCi50ZW5zb3Itd2lkZ2V0LWR0eXBlLWxhYmVsIHsKICBjb2xvcjogcmdiKDEyOCwgMTI4LCAxMjgpOwp9CgoudGVuc29yLXdpZGdldC1oZWFkZXIgewogIGJhY2tncm91bmQtY29sb3I6IHJnYigyNTIsIDI1MiwgMjUyKTsKICBib3gtc2hhZG93OiAycHggMnB4IDJweCAjYjBiMGIwOwogIGhlaWdodDogNDBweDsKICBsaW5lLWhlaWdodDogNDBweDsKICBtYXgtaGVpZ2h0OiA0MHB4OwogIHBvc2l0aW9uOiByZWxhdGl2ZTsKICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwogIHdpZHRoOiAxMDAlOwp9CgoudGVuc29yLXdpZGdldC1pbmZvIHsKICBhbGlnbi1jb250ZW50OiBjZW50ZXI7CiAgY29sb3I6IHJnYigwLCAwLCAyNTUpOwogIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICBmb250LXNpemU6IDhwdDsKICBoZWlnaHQ6IDIycHg7CiAgbGluZS1oZWlnaHQ6IDIycHg7CiAgbWFyZ2luLWxlZnQ6IDhweDsKICBtYXgtaGVpZ2h0OiAyMnB4OwogIHBvc2l0aW9uOiByZWxhdGl2ZTsKICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwp9CgoudGVuc29yLXdpZGdldC1zaGFwZSB7CiAgY29sb3I6IHJnYig2MCwgNjAsIDYwKTsKICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgbWFyZ2luLWxlZnQ6IDEycHg7Cn0KCi50ZW5zb3Itd2lkZ2V0LXNoYXBlLWxhYmVsIHsKICBjb2xvcjogcmdiKDEyOCwgMTI4LCAxMjgpOwogIGRpc3BsYXk6IGlubGluZS1ibG9jazsKfQoKLnRlbnNvci13aWRnZXQtc2hhcGUtdmFsdWUgewogIGRpc3BsYXk6IGlubGluZS1ibG9jazsKfQoKLnRlbnNvci13aWRnZXQtc2xpY2luZy1ncm91cCB7CiAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDI1MCwgMjUwLCAyNTApOwogIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCByZ2IoMTkwLCAxOTAsIDE5MCk7CiAgZGlzcGxheTogYmxvY2s7CiAgaGVpZ2h0OiAxOHB4OwogIHRleHQtYWxpZ246IGNlbnRlcjsKICBwYWRkaW5nLWJvdHRvbTogNXB4OwogIHBhZGRpbmctdG9wOiA1cHg7Cn0KCi50ZW5zb3Itd2lkZ2V0LXRlbnNvci1uYW1lIHsKICBjb2xvcjogYmxhY2s7CiAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogIGZvbnQtd2VpZ2h0OiBib2xkOwp9CgoudGVuc29yLXdpZGdldC1sZWZ0LXJ1bGVyLXRpY2sgewogIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXJ1bGVyLWJhY2tncm91bmQtY29sb3IpOwogIGJvcmRlci1ib3R0b206IHZhcigtLWJvcmRlci1zdHlsZSk7CiAgYm9yZGVyLXRvcDogdmFyKC0tYm9yZGVyLXN0eWxlKTsKICBib3gtc2hhZG93OiB2YXIoLS1ib3JkZXItc3R5bGUpOwogIGNvbG9yOiByZ2IoMTEwLCAxMTAsIDExMCk7CiAgY3Vyc29yOiBwb2ludGVyOwogIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICBmb250LXNpemU6IDEycHg7CiAgaGVpZ2h0OiAyOXB4OwogIGxpbmUtaGVpZ2h0OiAyOXB4OwogIG1hcmdpbi1sZWZ0OiAwcHg7CiAgbWF4LXdpZHRoOiA0NXB4OwogIHRleHQtYWxpZ246IGNlbnRlcjsKICB1c2VyLXNlbGVjdDogbm9uZTsKICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwogIHdpZHRoOiA0NXB4Owp9CgoudGVuc29yLXdpZGdldC10b3AtcnVsZXIgewogIGhlaWdodDogMjRweDsKICB3aGl0ZS1zcGFjZTogbm93cmFwOwp9CgoudGVuc29yLXdpZGdldC12YWx1ZS10b29sdGlwIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMjQwLCAyNDAsIDI0MCk7CiAgYm9yZGVyOiAxcHggc29saWQgcmdiKDE2MCwgMTYwLCAxNjApOwogIGJveC1zaGFkb3c6IDFweCAxcHggMXB4ICNiMGIwYjA7CiAgZGlzcGxheTogbm9uZTsKICBmb250LXNpemU6IDEzcHg7CiAgcGFkZGluZzogNXB4OwogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKfQoKLnRlbnNvci13aWRnZXQtdmFsdWUtdG9vbHRpcC1pbmRpY2VzIHsKICBmb250LXdlaWdodDogYm9sZDsKfQoKLnRlbnNvci13aWRnZXQtdmFsdWUtdG9vbHRpcC12YWx1ZSB7CiAgbWFyZ2luLXRvcDogMjBweDsKfQoKLnRlbnNvci13aWRnZXQtdG9wLXJ1bGVyLXRpY2sgewogIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXJ1bGVyLWJhY2tncm91bmQtY29sb3IpOwogIGJvcmRlci1ib3R0b206IHZhcigtLWJvcmRlci1zdHlsZSk7CiAgYm9yZGVyLXJpZ2h0OiB2YXIoLS1ib3JkZXItc3R5bGUpOwogIGNvbG9yOiByZ2IoMTEwLCAxMTAsIDExMCk7CiAgY3Vyc29yOiBwb2ludGVyOwogIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICBmb250LXNpemU6IDEycHg7CiAgaGVpZ2h0OiAyNHB4OwogIGxpbmUtaGVpZ2h0OiAyNHB4OwogIHBhZGRpbmctcmlnaHQ6IDJweDsKICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKICB3aWR0aDogNDVweDsKfQoKLnRlbnNvci13aWRnZXQtdmFsdWUtZGl2IHsKICBib3JkZXItYm90dG9tOiB2YXIoLS1ib3JkZXItc3R5bGUpOwogIGJvcmRlci1yaWdodDogdmFyKC0tYm9yZGVyLXN0eWxlKTsKICBjdXJzb3I6IHBvaW50ZXI7CiAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogIGZvbnQtc2l6ZTogODAlOwogIGhlaWdodDogMjRweDsKICBsaW5lLWhlaWdodDogMjRweDsKICBtYXgtd2lkdGg6IDQ1cHg7CiAgcGFkZGluZy1yaWdodDogMnB4OwogIHRleHQtYWxpZ246IHJpZ2h0OwogIHVzZXItc2VsZWN0OiBub25lOwogIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CiAgd2lkdGg6IDQ1cHg7Cn0KCi50ZW5zb3Itd2lkZ2V0LXZhbHVlLWRpdi1zZWxlY3Rpb24gewogIGZvbnQtd2VpZ2h0OiBib2xkOwp9CgoudGVuc29yLXdpZGdldC12YWx1ZS1kaXYtc2VsZWN0aW9uLWJvdHRvbSB7CiAgYm9yZGVyLWJvdHRvbTogMC41cHggc29saWQgYmx1ZTsKfQoKLnRlbnNvci13aWRnZXQtdmFsdWUtZGl2LXNlbGVjdGlvbi1sZWZ0IHsKICBib3JkZXItbGVmdDogMC41cHggc29saWQgYmx1ZTsKfQoKLnRlbnNvci13aWRnZXQtdmFsdWUtZGl2LXNlbGVjdGlvbi1yaWdodCB7CiAgYm9yZGVyLXJpZ2h0OiAwLjVweCBzb2xpZCBibHVlOwp9CgoudGVuc29yLXdpZGdldC12YWx1ZS1kaXYtc2VsZWN0aW9uLXRvcCB7CiAgYm9yZGVyLXRvcDogMC41cHggc29saWQgYmx1ZTsKfQoKLnRlbnNvci13aWRnZXQtdmFsdWUtc2VjdGlvbiB7CiAgLS1ib3JkZXItc3R5bGU6IDFweCBzb2xpZCByZ2IoMTQwLCAxNDAsIDE0MCk7CiAgLS1ydWxlci1iYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMjEwLCAyMTAsIDIxMCk7CiAgLW1vei11c2VyLXNlbGVjdDogbm9uZTsKICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7CiAgLWtodG1sLXVzZXItc2VsZWN0OiBub25lOwogIC13ZWJraXQtdG91Y2gtY2FsbG91dDogbm9uZTsKICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOwp9CgoudGVuc29yLXdpZGdldC12YWx1ZS1yb3cgewogIGhlaWdodDogMjVweDsKICBsaW5lLWhlaWdodDogMjVweDsKICB3aGl0ZS1zcGFjZTogbm93cmFwOwp9Cjwvc3R5bGU+Cgo8ZG9tLW1vZHVsZSBpZD0idGVuc29yLXdpZGdldC1zdHlsZSI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPi8qIENvcHlyaWdodCAyMDE5IFRoZSBUZW5zb3JGbG93IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgpZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuClNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCgoudGVuc29yLXdpZGdldCB7CiAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKICBmb250LXNpemU6IDE0cHg7CiAgb3ZlcmZsb3cteDogaGlkZGVuOwogIG92ZXJmbG93LXk6IGhpZGRlbjsKICBwb3NpdGlvbjogcmVsYXRpdmU7Cn0KCi50ZW5zb3Itd2lkZ2V0LWRpbSB7CiAgYm9yZGVyOiAxcHggc29saWQgcmdiKDE2MCwgMTYwLCAxNjApOwogIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICBmb250LXNpemU6IDEycHg7CiAgaGVpZ2h0OiAxNHB4OwogIGxpbmUtaGVpZ2h0OiAxNHB4OwogIG1hcmdpbi1sZWZ0OiAxNXB4OwogIG1hcmdpbi1yaWdodDogMTVweDsKICBwYWRkaW5nOiAycHg7Cn0KCi50ZW5zb3Itd2lkZ2V0LWRpbS1jb21tYSB7CiAgY29sb3I6IHJnYigxMjgsIDEyOCwgMTI4KTsKICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgZm9udC1zaXplOiAxMnB4OwogIGhlaWdodDogMTRweDsKICBsaW5lLWhlaWdodDogMTRweDsKfQoKLnRlbnNvci13aWRnZXQtZGltLWhpZ2hsaWdodGVkIHsKICBib3JkZXI6IDFweCBzb2xpZCByZ2IoMTAwLCAxODAsIDI1NSk7CiAgZm9udC13ZWlnaHQ6IGJvbGQ7Cn0KCi50ZW5zb3Itd2lkZ2V0LWRpbS1icmFja2V0cyB7CiAgY29sb3I6IHJnYigxMjgsIDEyOCwgMTI4KTsKICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgZm9udC1zaXplOiA4cHQ7Cn0KCi50ZW5zb3Itd2lkZ2V0LWRpbS1kcm9wZG93biB7CiAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDI1NSwgMjU1LCAyNTUpOwogIGJvcmRlcjogMXB4IHNvbGlkIHJnYigxMjgsIDEyOCwgMTI4KTsKICBib3gtc2hhZG93OiAycHggMnB4IDJweCAjYjBiMGIwOwogIGN1cnNvcjogcG9pbnRlcjsKICB3aWR0aDogMTgwcHg7CiAgei1pbmRleDogMTAwMDsKfQoKLnRlbnNvci13aWRnZXQtZGltLWRyb3Bkb3duLW1lbnUtaXRlbSB7CiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHJnYigxODAsIDE4MCwgMTgwKTsKICBmb250LXNpemU6IDEycHg7CiAgcGFkZGluZzogM3B4Owp9CgoudGVuc29yLXdpZGdldC1kaW0tZHJvcGRvd24tbWVudS1pdGVtLWFjdGl2ZSB7CiAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDEwMCwgMTgwLCAyNTUpOwogIGNvbG9yOiByZ2IoMjU1LCAyNTUsIDI1NSk7Cn0KCi50ZW5zb3Itd2lkZ2V0LWR0eXBlIHsKICBhbGlnbi1jb250ZW50OiBjZW50ZXI7CiAgY29sb3I6IHJnYig2MCwgNjAsIDYwKTsKICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgZm9udC1zaXplOiA4cHQ7CiAgaGVpZ2h0OiA0OHB4OwogIGxpbmUtaGVpZ2h0OiAyMnB4OwogIG1heC1oZWlnaHQ6IDIycHg7CiAgcGFkZGluZy1sZWZ0OiAxNHB4OwogIHBhZGRpbmctcmlnaHQ6IDEwcHg7CiAgcG9zaXRpb246IHJlbGF0aXZlOwogIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7Cn0KCi50ZW5zb3Itd2lkZ2V0LWR0eXBlLWxhYmVsIHsKICBjb2xvcjogcmdiKDEyOCwgMTI4LCAxMjgpOwp9CgoudGVuc29yLXdpZGdldC1oZWFkZXIgewogIGJhY2tncm91bmQtY29sb3I6IHJnYigyNTIsIDI1MiwgMjUyKTsKICBib3gtc2hhZG93OiAycHggMnB4IDJweCAjYjBiMGIwOwogIGhlaWdodDogNDBweDsKICBsaW5lLWhlaWdodDogNDBweDsKICBtYXgtaGVpZ2h0OiA0MHB4OwogIHBvc2l0aW9uOiByZWxhdGl2ZTsKICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwogIHdpZHRoOiAxMDAlOwp9CgoudGVuc29yLXdpZGdldC1pbmZvIHsKICBhbGlnbi1jb250ZW50OiBjZW50ZXI7CiAgY29sb3I6IHJnYigwLCAwLCAyNTUpOwogIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICBmb250LXNpemU6IDhwdDsKICBoZWlnaHQ6IDIycHg7CiAgbGluZS1oZWlnaHQ6IDIycHg7CiAgbWFyZ2luLWxlZnQ6IDhweDsKICBtYXgtaGVpZ2h0OiAyMnB4OwogIHBvc2l0aW9uOiByZWxhdGl2ZTsKICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwp9CgoudGVuc29yLXdpZGdldC1zaGFwZSB7CiAgY29sb3I6IHJnYig2MCwgNjAsIDYwKTsKICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgbWFyZ2luLWxlZnQ6IDEycHg7Cn0KCi50ZW5zb3Itd2lkZ2V0LXNoYXBlLWxhYmVsIHsKICBjb2xvcjogcmdiKDEyOCwgMTI4LCAxMjgpOwogIGRpc3BsYXk6IGlubGluZS1ibG9jazsKfQoKLnRlbnNvci13aWRnZXQtc2hhcGUtdmFsdWUgewogIGRpc3BsYXk6IGlubGluZS1ibG9jazsKfQoKLnRlbnNvci13aWRnZXQtc2xpY2luZy1ncm91cCB7CiAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDI1MCwgMjUwLCAyNTApOwogIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCByZ2IoMTkwLCAxOTAsIDE5MCk7CiAgZGlzcGxheTogYmxvY2s7CiAgaGVpZ2h0OiAxOHB4OwogIHRleHQtYWxpZ246IGNlbnRlcjsKICBwYWRkaW5nLWJvdHRvbTogNXB4OwogIHBhZGRpbmctdG9wOiA1cHg7Cn0KCi50ZW5zb3Itd2lkZ2V0LXRlbnNvci1uYW1lIHsKICBjb2xvcjogYmxhY2s7CiAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogIGZvbnQtd2VpZ2h0OiBib2xkOwp9CgoudGVuc29yLXdpZGdldC1sZWZ0LXJ1bGVyLXRpY2sgewogIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXJ1bGVyLWJhY2tncm91bmQtY29sb3IpOwogIGJvcmRlci1ib3R0b206IHZhcigtLWJvcmRlci1zdHlsZSk7CiAgYm9yZGVyLXRvcDogdmFyKC0tYm9yZGVyLXN0eWxlKTsKICBib3gtc2hhZG93OiB2YXIoLS1ib3JkZXItc3R5bGUpOwogIGNvbG9yOiByZ2IoMTEwLCAxMTAsIDExMCk7CiAgY3Vyc29yOiBwb2ludGVyOwogIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICBmb250LXNpemU6IDEycHg7CiAgaGVpZ2h0OiAyOXB4OwogIGxpbmUtaGVpZ2h0OiAyOXB4OwogIG1hcmdpbi1sZWZ0OiAwcHg7CiAgbWF4LXdpZHRoOiA0NXB4OwogIHRleHQtYWxpZ246IGNlbnRlcjsKICB1c2VyLXNlbGVjdDogbm9uZTsKICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwogIHdpZHRoOiA0NXB4Owp9CgoudGVuc29yLXdpZGdldC10b3AtcnVsZXIgewogIGhlaWdodDogMjRweDsKICB3aGl0ZS1zcGFjZTogbm93cmFwOwp9CgoudGVuc29yLXdpZGdldC12YWx1ZS10b29sdGlwIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMjQwLCAyNDAsIDI0MCk7CiAgYm9yZGVyOiAxcHggc29saWQgcmdiKDE2MCwgMTYwLCAxNjApOwogIGJveC1zaGFkb3c6IDFweCAxcHggMXB4ICNiMGIwYjA7CiAgZGlzcGxheTogbm9uZTsKICBmb250LXNpemU6IDEzcHg7CiAgcGFkZGluZzogNXB4OwogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKfQoKLnRlbnNvci13aWRnZXQtdmFsdWUtdG9vbHRpcC1pbmRpY2VzIHsKICBmb250LXdlaWdodDogYm9sZDsKfQoKLnRlbnNvci13aWRnZXQtdmFsdWUtdG9vbHRpcC12YWx1ZSB7CiAgbWFyZ2luLXRvcDogMjBweDsKfQoKLnRlbnNvci13aWRnZXQtdG9wLXJ1bGVyLXRpY2sgewogIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXJ1bGVyLWJhY2tncm91bmQtY29sb3IpOwogIGJvcmRlci1ib3R0b206IHZhcigtLWJvcmRlci1zdHlsZSk7CiAgYm9yZGVyLXJpZ2h0OiB2YXIoLS1ib3JkZXItc3R5bGUpOwogIGNvbG9yOiByZ2IoMTEwLCAxMTAsIDExMCk7CiAgY3Vyc29yOiBwb2ludGVyOwogIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICBmb250LXNpemU6IDEycHg7CiAgaGVpZ2h0OiAyNHB4OwogIGxpbmUtaGVpZ2h0OiAyNHB4OwogIHBhZGRpbmctcmlnaHQ6IDJweDsKICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKICB3aWR0aDogNDVweDsKfQoKLnRlbnNvci13aWRnZXQtdmFsdWUtZGl2IHsKICBib3JkZXItYm90dG9tOiB2YXIoLS1ib3JkZXItc3R5bGUpOwogIGJvcmRlci1yaWdodDogdmFyKC0tYm9yZGVyLXN0eWxlKTsKICBjdXJzb3I6IHBvaW50ZXI7CiAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogIGZvbnQtc2l6ZTogODAlOwogIGhlaWdodDogMjRweDsKICBsaW5lLWhlaWdodDogMjRweDsKICBtYXgtd2lkdGg6IDQ1cHg7CiAgcGFkZGluZy1yaWdodDogMnB4OwogIHRleHQtYWxpZ246IHJpZ2h0OwogIHVzZXItc2VsZWN0OiBub25lOwogIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CiAgd2lkdGg6IDQ1cHg7Cn0KCi50ZW5zb3Itd2lkZ2V0LXZhbHVlLWRpdi1zZWxlY3Rpb24gewogIGZvbnQtd2VpZ2h0OiBib2xkOwp9CgoudGVuc29yLXdpZGdldC12YWx1ZS1kaXYtc2VsZWN0aW9uLWJvdHRvbSB7CiAgYm9yZGVyLWJvdHRvbTogMC41cHggc29saWQgYmx1ZTsKfQoKLnRlbnNvci13aWRnZXQtdmFsdWUtZGl2LXNlbGVjdGlvbi1sZWZ0IHsKICBib3JkZXItbGVmdDogMC41cHggc29saWQgYmx1ZTsKfQoKLnRlbnNvci13aWRnZXQtdmFsdWUtZGl2LXNlbGVjdGlvbi1yaWdodCB7CiAgYm9yZGVyLXJpZ2h0OiAwLjVweCBzb2xpZCBibHVlOwp9CgoudGVuc29yLXdpZGdldC12YWx1ZS1kaXYtc2VsZWN0aW9uLXRvcCB7CiAgYm9yZGVyLXRvcDogMC41cHggc29saWQgYmx1ZTsKfQoKLnRlbnNvci13aWRnZXQtdmFsdWUtc2VjdGlvbiB7CiAgLS1ib3JkZXItc3R5bGU6IDFweCBzb2xpZCByZ2IoMTQwLCAxNDAsIDE0MCk7CiAgLS1ydWxlci1iYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMjEwLCAyMTAsIDIxMCk7CiAgLW1vei11c2VyLXNlbGVjdDogbm9uZTsKICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7CiAgLWtodG1sLXVzZXItc2VsZWN0OiBub25lOwogIC13ZWJraXQtdG91Y2gtY2FsbG91dDogbm9uZTsKICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOwp9CgoudGVuc29yLXdpZGdldC12YWx1ZS1yb3cgewogIGhlaWdodDogMjVweDsKICBsaW5lLWhlaWdodDogMjVweDsKICB3aGl0ZS1zcGFjZTogbm93cmFwOwp9Cjwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPgoKCgoKCgoKCjxkb20tbW9kdWxlIGlkPSJ0Zi1kZWJ1Z2dlci1saW5lLWNoYXJ0Ij4KICA8dGVtcGxhdGU+CiAgICA8dnotbGluZS1jaGFydDIgeC1jb21wb25lbnRzLWNyZWF0aW9uLW1ldGhvZD0iW1tfbGluZUNoYXJ0WENvbXBvbmVudHNDcmVhdGlvbk1ldGhvZF1dIiB5LXZhbHVlLWFjY2Vzc29yPSJbW19saW5lQ2hhcnRZVmFsdWVBY2Nlc3Nvcl1dIiB0b29sdGlwLWNvbHVtbnM9IltbX2xpbmVDaGFydFRvb2x0aXBDb2x1bW5zXV0iIHNtb290aGluZy1lbmFibGVkPSJbW19saW5lQ2hhcnRTbW9vdGhpbmdFbmFibGVkXV0iPjwvdnotbGluZS1jaGFydDI+CiAgICA8c3R5bGU+CiAgICAgIHZ6LWxpbmUtY2hhcnQyIHsKICAgICAgICBoZWlnaHQ6IDMwMHB4OwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgoKICA8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdGYtZGVidWdnZXItZGFzaGJvYXJkL3RmLWRlYnVnZ2VyLWxpbmUtY2hhcnQuaHRtbC5qcwpQb2x5bWVyKHtpczoidGYtZGVidWdnZXItbGluZS1jaGFydCIscHJvcGVydGllczp7ZGF0YTp7dHlwZTpPYmplY3QsdmFsdWU6bnVsbH0sX2RlZmF1bHRTZXJpZXNOYW1lOnt0eXBlOlN0cmluZyx2YWx1ZToiX19kZWJ1Z2dlcl9kYXRhX18iLHJlYWRvbmx5OiEwfSxfbGluZUNoYXJ0WENvbXBvbmVudHNDcmVhdGlvbk1ldGhvZDp7dHlwZTpPYmplY3QscmVhZE9ubHk6ITAsdmFsdWU6KCk9PigpPT57Y29uc3QgYT1uZXcgUGxvdHRhYmxlLlNjYWxlcy5MaW5lYXI7cmV0dXJue3NjYWxlOmEsYXhpczpuZXcgUGxvdHRhYmxlLkF4ZXMuTnVtZXJpYyhhLCJib3R0b20iKSxhY2Nlc3NvcjpjPT5jLnN0ZXB9fX0sX2xpbmVDaGFydFlWYWx1ZUFjY2Vzc29yOnt0eXBlOk9iamVjdCxyZWFkT25seTohMCx2YWx1ZTooKT0+YT0+YS5zY2FsYXJ9LF9saW5lQ2hhcnRUb29sdGlwQ29sdW1uczp7dHlwZTpBcnJheSxyZWFkT25seTohMCx2YWx1ZTooKT0+W3t0aXRsZToiTmFtZSIsZXZhbHVhdGU6YT0+CiJzdGVwXHgzZCIrYS5kYXR1bS5zdGVwKyI7IHNjYWxhclx4M2QgIithLmRhdHVtLnNjYWxhcn1dfSxfbGluZUNoYXJ0U21vb3RoaW5nRW5hYmxlZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExLHJlYWRPbmx5OiEwfX0sb2JzZXJ2ZXJzOlsicmVuZGVyKGRhdGEpIl0scmVuZGVyKGEpe2lmKG51bGwhPWEpe3ZhciBjPXRoaXMuJCQoInZ6LWxpbmUtY2hhcnQyIik7Yy5zZXRWaXNpYmxlU2VyaWVzKFt0aGlzLl9kZWZhdWx0U2VyaWVzTmFtZV0pO3ZhciBkPVtdLGY9YS54O2E9YS55O2ZvcihsZXQgZz0wO2c8Zi5sZW5ndGg7KytnKWQucHVzaCh7c3RlcDpmW2ddLHNjYWxhcjphW2ddfSk7Yy5zZXRTZXJpZXNEYXRhKHRoaXMuX2RlZmF1bHRTZXJpZXNOYW1lLGQpfX19KTsKPC9zY3JpcHQ+CjwvZG9tLW1vZHVsZT4KCgoKPGRvbS1tb2R1bGUgaWQ9InRmLXRlbnNvci12YWx1ZS12aWV3Ij4KICA8dGVtcGxhdGU+CiAgICA8cGFwZXItdG9hc3QgaWQ9InRlbnNvclZhbHVlVG9hc3QiIHRleHQ9IiIgYWx3YXlzLW9uLXRvcD48L3BhcGVyLXRvYXN0PgogICAgPHRhYmxlIGNsYXNzPSJ0ZW5zb3ItdmFsdWUtdmlldy10YWJsZSI+CiAgICAgIDx0cj4KICAgICAgICA8dGQgY29sc3Bhbj0iMiI+CiAgICAgICAgICA8ZGl2PgogICAgICAgICAgICA8cGFwZXItaXRlbSBpZD0idGVuc29yLW5hbWUiIG9uLXRhcD0idGVuc29yTmFtZUNhbGxiYWNrIj4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGVuc29yLW5hbWUtdGV4dCI+W1t0ZW5zb3JOYW1lXV08L3NwYW4+CiAgICAgICAgICAgIDwvcGFwZXItaXRlbT4KICAgICAgICAgICAgPHBhcGVyLWljb24tYnV0dG9uIGljb249ImNsb3NlIiBjbGFzcz0idmFsdWUtdmlldy1pY29uLWJ1dHRvbiIgaWQ9InZhbHVlLXZpZXctaWNvbi1idXR0b24iIHRpdGxlPSJDbG9zZSIgb24tdGFwPSJjbG9zZUJ1dHRvbkNhbGxiYWNrIj48L3BhcGVyLWljb24tYnV0dG9uPgogICAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24gaWNvbj0iZm9yd2FyZCIgY2xhc3M9InZhbHVlLXZpZXctaWNvbi1idXR0b24iIGlkPSJ2YWx1ZS12aWV3LWljb24tYnV0dG9uIiB0aXRsZT0iQ29udGludWUgdG8iIG9uLXRhcD0iY29udGludWVUb0J1dHRvbkNhbGxiYWNrIj48L3BhcGVyLWljb24tYnV0dG9uPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC90ZD4KICAgICAgPC90cj4KICAgICAgPHRyIGNsYXNzPSJ0ZW5zb3ItdmFsdWUtdmFsdWUtdHIiPgogICAgICAgIDx0ZD4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfdXNlVGVuc29yV2lkZ2V0XV0iPgogICAgICAgICAgICA8ZGl2IGlkPSJ0ZW5zb3Itd2lkZ2V0Ij48L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbWyFfdXNlVGVuc29yV2lkZ2V0XV0iPgogICAgICAgICAgICA8cGFwZXItaXRlbSBpZD0iZGVidWctb3AiPjwvcGFwZXItaXRlbT4KICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICA8cGFwZXItaW5wdXQgY2xhc3M9ImlubGluZSB2YWx1ZS1jYXJkLWlucHV0IiBsYWJlbD0iU2xpY2luZyIgaWQ9InNsaWNpbmciIHZhbHVlPSJ7e3NsaWNpbmd9fSIgb24tY2hhbmdlPSJyZWZyZXNoIj4KICAgICAgICAgICAgICA8L3BhcGVyLWlucHV0PgogICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICA8cGFwZXItaW5wdXQgY2xhc3M9ImlubGluZSB2YWx1ZS1jYXJkLWlucHV0IiBsYWJlbD0iVGltZSBJbmRpY2VzIiBpZD0idGltZS1pbmRpY2VzIiB2YWx1ZT0ie3t0aW1lSW5kaWNlc319IiBvbi1jaGFuZ2U9InJlZnJlc2giPgogICAgICAgICAgICAgICAgPC9wYXBlci1pbnB1dD4KICAgICAgICAgICAgICAgIDxwYXBlci1idXR0b24gcmFpc2VkIGlkPSJ0aW1lLWluZGljZXMtdG9nZ2xlLWJ1dHRvbiIgY2xhc3M9InRlbnNvci12YWx1ZS1idXR0b25zIiBvbi1jbGljaz0iX3RpbWVJbmRpY2VzVG9nZ2xlQnV0dG9uQ2FsbGJhY2siPkZ1bGwgSGlzdG9yeTwvcGFwZXItYnV0dG9uPgogICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICA8L2Rpdj48L3RlbXBsYXRlPjwvdGQ+PHRkIGNsYXNzPSJ0ZW5zb3ItdmFsdWUtdmlldy10ZCI+CiAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2lzVmFsdWVTY2FsYXJdXSI+CiAgICAgICAgICAgICAgICAgIDxwYXBlci1pbnB1dCBjbGFzcz0iaW5saW5lIiBsYWJlbD0iU2NhbGFyIFZhbHVlIiBpZD0idmFsdWUtc2NhbGFyIiB2YWx1ZT0iW1tfZGF0YVNjYWxhcl1dIj4KICAgICAgICAgICAgICAgICAgPC9wYXBlci1pbnB1dD4KICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2lzVmFsdWVMaW5lQ2hhcnRdXSI+CiAgICAgICAgICAgICAgICAgIDx0Zi1kZWJ1Z2dlci1saW5lLWNoYXJ0IGRhdGE9IltbX2xpbmVDaGFydERhdGFdXSI+PC90Zi1kZWJ1Z2dlci1saW5lLWNoYXJ0PgogICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaXNWYWx1ZUltYWdlXV0iPgogICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPSJ2YWx1ZS1pbWFnZSIgaGVpZ2h0PSIyNTBweCIgd2lkdGg9IjI1MHB4IiBzcmMkPSJbW19kYXRhSW1hZ2VTcmNdXSI+CiAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgIAogICAgICAgICAgCiAgICAgICAgCiAgICAgIDwvdHI+CiAgICA8L3RhYmxlPgoKICAgIDxzdHlsZSBpbmNsdWRlPSJ0ZW5zb3Itd2lkZ2V0LXN0eWxlIj48L3N0eWxlPgogICAgPHN0eWxlPgogICAgICAudGVuc29yLXZhbHVlLWJ1dHRvbnMgewogICAgICAgIGhlaWdodDogNzUlOwogICAgICAgIGZvbnQtc2l6ZTogMTBweDsKICAgICAgfQogICAgICAudGVuc29yLXZhbHVlLXZpZXctdGFibGUgewogICAgICAgIHdpZHRoOiA1MDBweDsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtdGFibGU7CiAgICAgICAgYm9yZGVyLXNwYWNpbmc6IDVweDsKICAgICAgICBwYWRkaW5nLXRvcDogM3B4OwogICAgICAgIHBhZGRpbmctYm90dG9tOiAzcHg7CiAgICAgICAgcGFkZGluZy1sZWZ0OiAzcHg7CiAgICAgICAgcGFkZGluZy1yaWdodDogM3B4OwogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmOGY4Zjg7CiAgICAgICAgYm94LXNoYWRvdzogM3B4IDNweCAxcHggMXB4ICNkOGQ4ZDg7CiAgICAgIH0KICAgICAgLnRlbnNvci12YWx1ZS12aWV3LXRkIHsKICAgICAgICB3aWR0aDogMzUwcHg7CiAgICAgIH0KICAgICAgLnZhbHVlLWNhcmQtaW5wdXQgewogICAgICAgIHdpZHRoOiAxNTBweDsKICAgICAgfQogICAgICAjdGVuc29yLW5hbWUgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDUwJTsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgIH0KICAgICAgLnRlbnNvci1uYW1lLXRleHQgewogICAgICAgIGNvbG9yOiBibHVlOwogICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwogICAgICB9CiAgICAgICNkZWJ1Zy1vcCB7CiAgICAgICAgZm9udC1zaXplOiA5MCU7CiAgICAgIH0KICAgICAgLnZhbHVlLWltYWdlIHsKICAgICAgICBpbWFnZS1yZW5kZXJpbmc6IHBpeGVsYXRlZDsKICAgICAgfQogICAgICAudmFsdWUtdmlldy1pY29uLWJ1dHRvbiB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIGZsb2F0OiByaWdodDsKICAgICAgICB0ZXh0LWFsaWduOiByaWdodDsKICAgICAgICB3aWR0aDogMjAlOwogICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBmb250LXNpemU6IDkwJTsKICAgICAgICBjb2xvcjogYmx1ZTsKICAgICAgfQogICAgICAjdGVuc29yLXdpZGdldCB7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgcmdiKDE2MCwgMTYwLCAxNjApOwogICAgICAgIC8qIGJveC1zaXppbmc6IGNvbnRlbnQtYm94OwogICAgICAgIC1tb3otYm94LXNpemluZzogY29udGVudC1ib3g7CiAgICAgICAgLXdlYmtpdC1ib3gtc2l6aW5nOiBjb250ZW50LWJveDsgKi8KICAgICAgICBoZWlnaHQ6IDI4MHB4OwogICAgICAgIHdpZHRoOiA0ODRweDsKICAgICAgfQogICAgICAjc2xpY2luZywKICAgICAgI3RpbWUtaW5kaWNlcyB7CiAgICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItaW5wdXQ6IHsKICAgICAgICAgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7CiAgICAgICAgfQogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CiAgPHNjcmlwdD4vL35+V0VCUEFUSH5+L3RmLWRlYnVnZ2VyLWRhc2hib2FyZC90Zi10ZW5zb3ItdmFsdWUtdmlldy5odG1sLmpzClBvbHltZXIoe2lzOiJ0Zi10ZW5zb3ItdmFsdWUtdmlldyIscHJvcGVydGllczp7dmlld0lkOlN0cmluZyx0ZW5zb3JOYW1lOlN0cmluZyxkZWJ1Z09wOlN0cmluZyxzbGljaW5nOlN0cmluZyx0aW1lSW5kaWNlczpTdHJpbmcsZHR5cGU6U3RyaW5nLHNoYXBlOkFycmF5LGNvbnRpbnVlVG9CdXR0b25DYWxsYmFjazpPYmplY3QsY2xvc2VCdXR0b25DYWxsYmFjazpPYmplY3QsdGVuc29yTmFtZUNhbGxiYWNrOk9iamVjdCx0ZW5zb3JXaWRnZXQ6T2JqZWN0LF9pc1RlbnNvclZhbHVlU2NhbGFyOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LF9pc1RlbnNvclZhbHVlTGluZUNoYXJ0Ont0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LF9pc1RlbnNvclZhbHVlSW1hZ2U6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sX2RhdGFTY2FsYXI6e3R5cGU6TnVtYmVyLHZhbHVlOm51bGx9LF9saW5lQ2hhcnREYXRhOnt0eXBlOkFycmF5LHZhbHVlOm51bGx9LF9kYXRhSW1hZ2VTcmM6e3R5cGU6U3RyaW5nLHZhbHVlOm51bGx9LApfcmVxdWVzdE1hbmFnZXI6e3R5cGU6T2JqZWN0LHZhbHVlOigpPT5uZXcgUGsuUmVxdWVzdE1hbmFnZXIoMTApfX0sb2JzZXJ2ZXJzOlsiX3VwZGF0ZVRpbWVJbmRpY2VzVG9nZ2xlKHRpbWVJbmRpY2VzKSJdLHJlbmRlclRlbnNvclZhbHVlKCl7aWYodGhpcy50ZW5zb3JOYW1lKWlmKG51bGw9PXRoaXMuc2xpY2luZyl7dGhpcy5zZXQoIl91c2VUZW5zb3JXaWRnZXQiLCEwKTtjb25zdCBjPXtzcGVjOntkdHlwZTp0aGlzLmR0eXBlLHNoYXBlOnRoaXMuc2hhcGV9LGdldDooKT0+e3Rocm93IEVycm9yKCJ0ZW5zb3JWaWV3LmdldCgpIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQuIik7fSx2aWV3OmQ9Pntjb25zdCBmPXRoaXM7cmV0dXJuIERiKGZ1bmN0aW9uKigpe2NvbnN0IGc9Zi5zaGFwZS5sZW5ndGgsbD1kLnNsaWNpbmdEaW1zQW5kSW5kaWNlcy5tYXAocD0+cC5kaW0pLGs9ZC5zbGljaW5nRGltc0FuZEluZGljZXMubWFwKHA9PnAuaW5kZXgpO2xldCBtPSJbIjtmb3IobGV0IHA9MDtwPApnOysrcCktMSE9PWwuaW5kZXhPZihwKT9tKz1gJHtrW2wuaW5kZXhPZihwKV19YDpkLnZpZXdpbmdEaW1zWzBdPT09cD9tKz1gJHtkLnZlcnRpY2FsUmFuZ2VbMF19OiR7ZC52ZXJ0aWNhbFJhbmdlWzFdfWA6ZC52aWV3aW5nRGltc1sxXT09PXAmJihtKz1gJHtkLmhvcml6b250YWxSYW5nZVswXX06JHtkLmhvcml6b250YWxSYW5nZVsxXX1gKSxwPGctMSYmKG0rPSIsIik7bSs9Il0iO3JldHVybiBuZXcgUHJvbWlzZSgocCxxKT0+e2NvbnN0IHI9Zi5fZ2V0VGVuc29yRGF0YVVSTCh7d2F0Y2hfa2V5OmYudGVuc29yTmFtZSsiOiIrZi5kZWJ1Z09wLHNsaWNpbmc6bSx0aW1lX2luZGljZXM6Zi50aW1lSW5kaWNlcyxtYXBwaW5nOiJub25lIn0pO2YuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3QocikudGhlbih0PT57bnVsbD09dC5lcnJvcj9wKHQudGVuc29yX2RhdGFbdC50ZW5zb3JfZGF0YS5sZW5ndGgtMV0pOnEodC5lcnJvcil9KS5jYXRjaCh0PT5xKHQpKX0pfSl9fTtzZXRUaW1lb3V0KCgpPT4Ke251bGw9PXRoaXMudGVuc29yV2lkZ2V0JiYodGhpcy50ZW5zb3JXaWRnZXQ9a20udGVuc29yV2lkZ2V0KHRoaXMuJCQoIiN0ZW5zb3Itd2lkZ2V0IiksYykpO3RoaXMudGVuc29yV2lkZ2V0LnJlbmRlcigpfSwxMCl9ZWxzZXt0aGlzLnNldCgiX3VzZVRlbnNvcldpZGdldCIsITEpO3ZhciBhPXRoaXMuX3JhbmtGcm9tU2xpY2luZyh0aGlzLnNsaWNpbmcudHJpbSgpKTtjb25zdCBjPXRoaXMuX2lzVGltZUluZGljZXNTaW5nbGVTdGVwKHRoaXMudGltZUluZGljZXMpO2xldCBkPWE7aWYoIWMpe2lmKDE8YSl7dGhpcy5fc2hvd1RvYXN0KCJIaXN0b3J5IGZvciB0ZW5zb3JzIFx4M2UgMUQgaXMgbm90IHlldCBzdXBwb3J0ZWQuIik7cmV0dXJufWQrPTF9YT10aGlzLl9nZXRUZW5zb3JEYXRhVVJMKHt3YXRjaF9rZXk6dGhpcy50ZW5zb3JOYW1lKyI6Iit0aGlzLmRlYnVnT3Asc2xpY2luZzp0aGlzLnNsaWNpbmcsdGltZV9pbmRpY2VzOnRoaXMudGltZUluZGljZXMsbWFwcGluZzoyPD1kPwoiaW1hZ2UvcG5nIjoibm9uZSJ9KTt0aGlzLl9yZXF1ZXN0TWFuYWdlci5yZXF1ZXN0KGEpLnRoZW4oZj0+e3RoaXMuJCQoIiNkZWJ1Zy1vcCIpLnRleHRDb250ZW50PXRoaXMuX2NhbGN1bGF0ZURlYnVnT3BUb0Rpc3BsYXkoKTtpZihudWxsIT1mLmVycm9yKXRoaXMuX3Nob3dUb2FzdChmLmVycm9yLnR5cGUrIjogIitmLmVycm9yLm1lc3NhZ2UpO2Vsc2UgaWYoZj1jP2YudGVuc29yX2RhdGFbMF06Zi50ZW5zb3JfZGF0YSwwPT09ZCl0aGlzLl9zZXRWaXN1YWxpemF0aW9uVHlwZSgic2NhbGFyIiksdGhpcy5zZXQoIl9kYXRhU2NhbGFyIixmKTtlbHNlIGlmKDE9PT1kKXt0aGlzLl9zZXRWaXN1YWxpemF0aW9uVHlwZSgibGluZUNoYXJ0Iik7bGV0IGc9e3g6W10seTpmfTtmb3IobGV0IGw9MDtsPGYubGVuZ3RoOysrbClnLngucHVzaChsKzEpO3RoaXMuc2V0KCJfbGluZUNoYXJ0RGF0YSIsZyl9ZWxzZSAyPD1kPyh0aGlzLl9zZXRWaXN1YWxpemF0aW9uVHlwZSgiaW1hZ2UiKSx0aGlzLnNldCgiX2RhdGFJbWFnZVNyYyIsCiJkYXRhOmltYWdlL3BuZztiYXNlNjQsIitmKSk6dGhpcy5fc2hvd1RvYXN0KCJWaXN1YWxpemF0aW9uIG9mIHJhbmstIitkKyIgdGVuc29ycyBpcyBub3QgeWV0IHN1cHBvcnRlZC4iKX0pfX0scmVmcmVzaCgpe3RoaXMudGVuc29yTmFtZS50cmltKCkmJnRoaXMucmVuZGVyVGVuc29yVmFsdWUoKX0sX2dldFRlbnNvckRhdGFVUkwoYSl7Y29uc3QgYz1Qay5nZXRSb3V0ZXIoKS5wbHVnaW5Sb3V0ZSgiZGVidWdnZXIiLCIvdGVuc29yX2RhdGEiKTtyZXR1cm4gUGsuYWRkUGFyYW1zKGMsYSl9LF9yYW5rRnJvbVNsaWNpbmcoYSl7YS5zdGFydHNXaXRoKCJbIikmJihhPWEuc2xpY2UoMSxhLmxlbmd0aC0xKSk7aWYoMD09PWEubGVuZ3RoKXJldHVybiAwO3thPWEuc3BsaXQoIiwiKTtsZXQgYz1hLmxlbmd0aDtmb3IoY29uc3QgZCBvZiBhKWlzTmFOKE51bWJlcihkKSl8fGMtLTtyZXR1cm4gY319LF9zZXRWaXN1YWxpemF0aW9uVHlwZShhKXsic2NhbGFyIj09PWE/KHRoaXMuc2V0KCJfaXNWYWx1ZVNjYWxhciIsCiEwKSx0aGlzLnNldCgiX2lzVmFsdWVMaW5lQ2hhcnQiLCExKSx0aGlzLnNldCgiX2lzVmFsdWVJbWFnZSIsITEpKToibGluZUNoYXJ0Ij09PWE/KHRoaXMuc2V0KCJfaXNWYWx1ZVNjYWxhciIsITEpLHRoaXMuc2V0KCJfaXNWYWx1ZUxpbmVDaGFydCIsITApLHRoaXMuc2V0KCJfaXNWYWx1ZUltYWdlIiwhMSkpOiJpbWFnZSI9PT1hPyh0aGlzLnNldCgiX2lzVmFsdWVTY2FsYXIiLCExKSx0aGlzLnNldCgiX2lzVmFsdWVMaW5lQ2hhcnQiLCExKSx0aGlzLnNldCgiX2lzVmFsdWVJbWFnZSIsITApKTpjb25zb2xlLmVycm9yKCJJbnZhbGlkIHZpc3VhbGl6YXRpb25UeXBlOiIsYSl9LF90aW1lSW5kaWNlc1RvZ2dsZUJ1dHRvbkNhbGxiYWNrKCl7ImZ1bGwgaGlzdG9yeSI9PT1Qb2x5bWVyLmRvbSh0aGlzLiQkKCIjdGltZS1pbmRpY2VzLXRvZ2dsZS1idXR0b24iKSkudGV4dENvbnRlbnQudG9Mb3dlckNhc2UoKT90aGlzLnNldCgidGltZUluZGljZXMiLCI6Iik6dGhpcy5zZXQoInRpbWVJbmRpY2VzIiwKIi0xIik7dGhpcy5yZW5kZXJUZW5zb3JWYWx1ZSgpfSxfdXBkYXRlVGltZUluZGljZXNUb2dnbGUoYSl7dGhpcy5faXNUaW1lSW5kaWNlc1NpbmdsZVN0ZXAoYSk/UG9seW1lci5kb20odGhpcy4kJCgiI3RpbWUtaW5kaWNlcy10b2dnbGUtYnV0dG9uIikpLnRleHRDb250ZW50PSJGdWxsIEhpc3RvcnkiOlBvbHltZXIuZG9tKHRoaXMuJCQoIiN0aW1lLWluZGljZXMtdG9nZ2xlLWJ1dHRvbiIpKS50ZXh0Q29udGVudD0iTGF0ZXN0IFRpbWUgUG9pbnQifSxfaXNUaW1lSW5kaWNlc1NpbmdsZVN0ZXAoYSl7YS5zdGFydHNXaXRoKCJbIikmJihhPWEuc2xpY2UoMSxhLmxlbmd0aC0xKSk7cmV0dXJuIWlzTmFOKE51bWJlcihhKSl9LF9jYWxjdWxhdGVEZWJ1Z09wVG9EaXNwbGF5KCl7cmV0dXJuIkRlYnVnSWRlbnRpdHkiPT09dGhpcy5kZWJ1Z09wPyIiOnRoaXMuZGVidWdPcH0sX3Nob3dUb2FzdChhKXt0aGlzLiQudGVuc29yVmFsdWVUb2FzdC5zZXRBdHRyaWJ1dGUoInRleHQiLGEpO3RoaXMuJC50ZW5zb3JWYWx1ZVRvYXN0Lm9wZW4oKX19KTsKPC9zY3JpcHQ+CjwvZG9tLW1vZHVsZT4KCgo8ZG9tLW1vZHVsZSBpZD0idGYtdGVuc29yLXZhbHVlLW11bHRpLXZpZXciPgogIDx0ZW1wbGF0ZT4KICAgIDxkaXYgaWQ9Im11bHRpVmlldyI+CiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tdGl0bGUiPlRlbnNvciBWYWx1ZXM8L2Rpdj4KICAgICAgPGRpdiBpZD0ibXVsdGktdGVuc29yLXZpZXctY29udGFpbmVyIj48L2Rpdj4KICAgIDwvZGl2PgogICAgPHN0eWxlPgogICAgICAuc2VjdGlvbi10aXRsZSB7CiAgICAgICAgZm9udC1zaXplOiAxMTAlOwogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICB9CiAgICAgICNtdWx0aVZpZXcgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7CiAgICAgICAgcGFkZGluZy10b3A6IDNweDsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDNweDsKICAgICAgICBwYWRkaW5nLXJpZ2h0OiAzcHg7CiAgICAgICAgYm94LXNoYWRvdzogM3B4IDNweCAjZWVlOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CiAgPHNjcmlwdD4vL35+V0VCUEFUSH5+L3RmLWRlYnVnZ2VyLWRhc2hib2FyZC90Zi10ZW5zb3ItdmFsdWUtbXVsdGktdmlldy5odG1sLmpzClBvbHltZXIoe2lzOiJ0Zi10ZW5zb3ItdmFsdWUtbXVsdGktdmlldyIscHJvcGVydGllczp7Y29udGludWVUb0NhbGxiYWNrOkZ1bmN0aW9uLHRlbnNvck5hbWVDbGlja2VkOkZ1bmN0aW9uLF90ZW5zb3JWaWV3Q291bnRlcjp7dHlwZTpOdW1iZXIsdmFsdWU6MH19LGFkZFZpZXcoYSl7Y29uc3QgYz10aGlzLiQkKCIjbXVsdGktdGVuc29yLXZpZXctY29udGFpbmVyIiksZD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0Zi10ZW5zb3ItdmFsdWUtdmlldyIpO2Quc2V0QXR0cmlidXRlKCJjbGFzcyIsImRlYnVnZ2VyLXRlbnNvci12aWV3Iik7ZC52aWV3SWQ9YS52aWV3SWQ7ZC50ZW5zb3JOYW1lPWEudGVuc29yTmFtZTtkLmRlYnVnT3A9YS5kZWJ1Z09wO2QuZHR5cGU9YS5kdHlwZTtkLnNoYXBlPWEuc2hhcGU7ZC5zbGljaW5nPWEuc2xpY2luZztkLnRpbWVJbmRpY2VzPWEudGltZUluZGljZXM7ZC5jbG9zZUJ1dHRvbkNhbGxiYWNrPXRoaXMuX2NyZWF0ZUNsb3NlQnV0dG9uQ2FsbGJhY2soYS52aWV3SWQpOwpkLmNvbnRpbnVlVG9CdXR0b25DYWxsYmFjaz0oKT0+e3RoaXMuY29udGludWVUb0NhbGxiYWNrKGEuZGV2aWNlTmFtZSxhLm1heWJlQmFzZUV4cGFuZGVkTm9kZU5hbWUpfTtkLnRlbnNvck5hbWVDYWxsYmFjaz0oKT0+e3RoaXMudGVuc29yTmFtZUNsaWNrZWQoYS5kZXZpY2VOYW1lLGEubWF5YmVCYXNlRXhwYW5kZWROb2RlTmFtZSl9O2MuYXBwZW5kQ2hpbGQoZCk7ZC5yZWZyZXNoKCl9LGdldFZpZXdzKCl7Y29uc3QgYT1bXTtfLmZvckVhY2godGhpcy5yb290LnF1ZXJ5U2VsZWN0b3JBbGwoIi5kZWJ1Z2dlci10ZW5zb3ItdmlldyIpLGM9PnthLnB1c2goe3ZpZXdJZDpjLnZpZXdJZCx0ZW5zb3JOYW1lOmMudGVuc29yTmFtZSxkZWJ1Z09wOmMuZGVidWdPcCxzbGljaW5nOmMuc2xpY2luZyx0aW1lSW5kaWNlczpjLnRpbWVJbmRpY2VzfSl9KTtyZXR1cm4gYX0scmVuZGVyVGVuc29yVmFsdWVzKCl7Xy5mb3JFYWNoKHRoaXMucm9vdC5xdWVyeVNlbGVjdG9yQWxsKCIuZGVidWdnZXItdGVuc29yLXZpZXciKSwKYT0+e2EucmVuZGVyVGVuc29yVmFsdWUoKX0pfSxfcmVkcmF3Vmlld3MoYSl7Y29uc3QgYz10aGlzLiQkKCIjbXVsdGktdGVuc29yLXZpZXctY29udGFpbmVyIik7Xy5mb3JFYWNoKHRoaXMucm9vdC5xdWVyeVNlbGVjdG9yQWxsKCIuZGVidWdnZXItdGVuc29yLXZpZXciKSxkPT57Yy5yZW1vdmVDaGlsZChkKX0pO18uZm9yRWFjaChhLGQ9Pnt0aGlzLmFkZFZpZXcoZCl9KX0sX2NyZWF0ZUNsb3NlQnV0dG9uQ2FsbGJhY2soYSl7cmV0dXJuKCk9Pntjb25zdCBjPVtdLGQ9dGhpcy5yb290LnF1ZXJ5U2VsZWN0b3JBbGwoIi5kZWJ1Z2dlci10ZW5zb3ItdmlldyIpO2ZvcihsZXQgZj0wO2Y8ZC5sZW5ndGg7KytmKXtjb25zdCBnPWRbZl07Zy52aWV3SWQhPT1hJiZjLnB1c2goe3ZpZXdJZDpnLnZpZXdJZCx0ZW5zb3JOYW1lOmcudGVuc29yTmFtZSxkZWJ1Z09wOmcuZGVidWdPcCxkdHlwZTpnLmR0eXBlLHNoYXBlOmcuc2hhcGUsc2xpY2luZzpnLnNsaWNpbmcsdGltZUluZGljZXM6Zy50aW1lSW5kaWNlc30pfXRoaXMuX3JlZHJhd1ZpZXdzKGMpfX19KTsKPC9zY3JpcHQ+CjwvZG9tLW1vZHVsZT4KCgo8ZG9tLW1vZHVsZSBpZD0idGYtZGVidWdnZXItZGFzaGJvYXJkIj4KICA8dGVtcGxhdGU+CiAgICA8cGFwZXItdG9hc3QgaWQ9InRvYXN0IiB0ZXh0PSIiIGFsd2F5cy1vbi10b3A+PC9wYXBlci10b2FzdD4KICAgIDx0Zi1kZWJ1Z2dlci1pbml0aWFsLWRpYWxvZyBpZD0iaW5pdGlhbERpYWxvZyI+PC90Zi1kZWJ1Z2dlci1pbml0aWFsLWRpYWxvZz4KICAgIAogICAgPHRmLWRhc2hib2FyZC1sYXlvdXQ+CiAgICAgIDxkaXYgY2xhc3M9InNpZGViYXIiIHNsb3Q9InNpZGViYXIiIGlkPSJsZWZ0LXBhbmUiPgogICAgICAgIDxkaXYgaWQ9Im5vZGUtZW50cmllcyIgY2xhc3M9Im5vZGUtZW50cmllcyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJkZWJ1Z2dlci1zZWN0aW9uLXRpdGxlIj5SdW50aW1lIE5vZGUgTGlzdDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0idG9nZ2xlLXNvdXJjZS1jb2RlIj4KICAgICAgICAgICAgU2hvdyBDb2RlOgogICAgICAgICAgICA8cGFwZXItdG9nZ2xlLWJ1dHRvbiBjbGFzcz0idG9nZ2xlLXNvdXJjZS1jb2RlIiBpZD0ic2hvdy1zb3VyY2UtY29kZSIgY2hlY2tlZD0ie3tfc291cmNlQ29kZVNob3dufX0iPjwvcGFwZXItdG9nZ2xlLWJ1dHRvbj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPHRmLW9wLXNlbGVjdG9yIGRlYnVnLXdhdGNoZXM9IltbX2RlYnVnV2F0Y2hlc11dIiBkZWJ1Zy13YXRjaC1jaGFuZ2U9IltbX2NyZWF0ZURlYnVnV2F0Y2hDaGFuZ2VIYW5kbGVyKCldXSIgbm9kZS1jbGlja2VkPSJbW19jcmVhdGVOb2RlQ2xpY2tlZEhhbmRsZXIoKV1dIiBmb3JjZS1leHBhbmQtYW5kLWNoZWNrLW5vZGUtbmFtZT0iW1tfZm9yY2VFeHBhbmRBbmRDaGVja05vZGVOYW1lXV0iIGZvcmNlLWV4cGFuZC1ub2RlLW5hbWU9IltbX2ZvcmNlRXhwYW5kTm9kZU5hbWVdXSI+CiAgICAgICAgICA8L3RmLW9wLXNlbGVjdG9yPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgaWQ9InNvdXJjZS1jb2RlLXZpZXctZGl2IiBjbGFzcz0ic291cmNlLWNvZGUtdmlldy1kaXYiIGhpZGRlbiQ9Int7IV9zb3VyY2VDb2RlU2hvd259fSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJkZWJ1Z2dlci1zZWN0aW9uLXRpdGxlIj5Tb3VyY2UgQ29kZTwvZGl2PgogICAgICAgICAgPHRmLXNvdXJjZS1jb2RlLXZpZXcgaWQ9InNvdXJjZUNvZGVWaWV3IiByZXF1ZXN0LW1hbmFnZXI9IltbX3JlcXVlc3RNYW5hZ2VyXV0iIGRlYnVnLXdhdGNoZXM9IltbX2RlYnVnV2F0Y2hlc11dIiBmb2N1cy1ub2RlLW5hbWU9IltbX3NvdXJjZUZvY3VzTm9kZU5hbWVdXSIgbm9kZS1jbGlja2VkPSJbW19jcmVhdGVOb2RlQ2xpY2tlZEhhbmRsZXIoKV1dIiBjb250aW51ZS10by1ub2RlPSJbW19jcmVhdGVDb250aW51ZVRvTm9kZUhhbmRsZXIoKV1dIj48L3RmLXNvdXJjZS1jb2RlLXZpZXc+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPHRmLWRlYnVnZ2VyLXJlc2l6ZXIgY3VycmVudC1sZW5ndGg9Int7X2xlZnRQYW5lV2lkdGh9fSIgbWluLWxlbmd0aD0iW1tfbWlubGVmdFBhbmVXaWR0aF1dIiBtYXgtbGVuZ3RoPSJbW19tYXhsZWZ0UGFuZVdpZHRoXV0iPgogICAgICAgIDwvdGYtZGVidWdnZXItcmVzaXplcj4KICAgICAgICA8ZGl2PgogICAgICAgICAgPHRmLXNlc3Npb24tcnVucy12aWV3IGlkPSJzZXNzaW9uUnVuc1ZpZXciIGxhdGVzdC1zZXNzaW9uLXJ1bj0iW1tfbGF0ZXN0U2Vzc2lvblJ1bl1dIiBzZXNzaW9uLXJ1bi1rZXktdG8tZGV2aWNlLW5hbWVzPSJbW19zZXNzaW9uUnVuS2V5MkRldmljZU5hbWVzXV0iIHNvbGUtYWN0aXZlPSJbW19zZXNzaW9uUnVuU29sZUFjdGl2ZV1dIiBub2RlLW9yLXRlbnNvci1jbGlja2VkPSJbW19jcmVhdGVGZWVkRmV0Y2hUYXJnZXRDbGlja2VkSGFuZGxlcigpXV0iPgogICAgICAgICAgPC90Zi1zZXNzaW9uLXJ1bnMtdmlldz4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJidXR0b25zLWNvbnRhaW5lciI+CiAgICAgICAgICA8cGFwZXItYnV0dG9uIHJhaXNlZCBjbGFzcz0iY29udGludWUtYnV0dG9uIiBvbi1jbGljaz0iX3N0ZXAiPgogICAgICAgICAgICA8c3Bhbj5bW19zdGVwQnV0dG9uVGV4dF1dPC9zcGFuPgogICAgICAgICAgPC9wYXBlci1idXR0b24+CiAgICAgICAgICA8dGYtZGVidWdnZXItY29udGludWUtZGlhbG9nIGlkPSJjb250aW51ZURpYWxvZyIgc2Vzc2lvbi1ydW4tZ289IltbX2NyZWF0ZVNlc3Npb25SdW5HbygpXV0iIHRlbnNvci1jb25kaXRpb24tZ289IltbX2NyZWF0ZVRlbnNvckNvbmRpdGlvbkdvKCldXSIgZm9yY2UtY29udGludWF0aW9uLXN0b3A9IltbX2NyZWF0ZUZvcmNlQ29udGludWF0aW9uU3RvcCgpXV0iPgogICAgICAgICAgPC90Zi1kZWJ1Z2dlci1jb250aW51ZS1kaWFsb2c+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iY29udGFpbmVyIj4KICAgICAgICAgIDx0Zi1ncmFwaC1sb2FkZXIgaWQ9ImxvYWRlciIgb3V0LWdyYXBoLWhpZXJhcmNoeT0ie3tncmFwaEhpZXJhcmNoeX19IiBvdXQtZ3JhcGg9Int7Z3JhcGh9fSIgb3V0LXN0YXRzPSJ7e3N0YXRzfX0iIHByb2dyZXNzPSJ7e19ncmFwaFByb2dyZXNzfX0iPjwvdGYtZ3JhcGgtbG9hZGVyPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY2VudGVyIiBzbG90PSJjZW50ZXIiIGlkPSJjZW50ZXItY29udGVudCI+CiAgICAgICAgPGRpdiBpZD0idG9wLXJpZ2h0LXF1YWRyYW50Ij4KICAgICAgICAgIDxwYXBlci10YWJzIHNlbGVjdGVkPSJ7e190b3BSaWdodFNlbGVjdGVkfX0iPgogICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW190b3BSaWdodFRhYnNdXSI+CiAgICAgICAgICAgICAgPHBhcGVyLXRhYiBpZD0iW1tpdGVtLmlkXV0iPltbaXRlbS5uYW1lXV08L3BhcGVyLXRhYj4KICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDwvcGFwZXItdGFicz4KICAgICAgICAgIDxkaXYgY2xhc3M9InJ1bnRpbWUtZ3JhcGgtZGV2aWNlIj4KICAgICAgICAgICAgPHNwYW4gaWQ9InJ1bnRpbWUtZ3JhcGgtZGV2aWNlLW5hbWUiPiA8L3NwYW4+CiAgICAgICAgICAgIDxwYXBlci1kcm9wZG93bi1tZW51IGlkPSJhY3RpdmUtcnVudGltZS1ncmFwaC1kZXZpY2UtbmFtZSIgbm8tbGFiZWwtZmxvYXQ9InRydWUiIGxhYmVsPSJEZXZpY2UgbmFtZSIgc2VsZWN0ZWQtaXRlbS1sYWJlbD0ie3tfYWN0aXZlUnVudGltZUdyYXBoRGV2aWNlTmFtZX19Ij4KICAgICAgICAgICAgICA8cGFwZXItbGlzdGJveCBjbGFzcz0iZHJvcGRvd24tY29udGVudCIgc2xvdD0iZHJvcGRvd24tY29udGVudCI+CiAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19hY3RpdmVTZXNzaW9uUnVuRGV2aWNlc11dIj4KICAgICAgICAgICAgICAgICAgPHBhcGVyLWl0ZW0gbm8tbGFiZWwtZmxvYXQ9InRydWUiPltbaXRlbV1dPC9wYXBlci1pdGVtPgogICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICA8L3BhcGVyLWxpc3Rib3g+CiAgICAgICAgICAgIDwvcGFwZXItZHJvcGRvd24tbWVudT4KICAgICAgICAgICAgPHBhcGVyLXNwaW5uZXItbGl0ZSBjbGFzcz0ic3Bpbm5lciIgaWQ9InRvcC1yaWdodC1zcGlubmVyIiBoaWRkZW49IltbIV9idXN5XV0iIGFjdGl2ZT0iW1tfYnVzeV1dIj4KICAgICAgICAgICAgPC9wYXBlci1zcGlubmVyLWxpdGU+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxwYXBlci1wcm9ncmVzcyBpZD0idG9wLXJpZ2h0LXByb2dyZXNzLWJhciIgdmFsdWU9IjAiPjwvcGFwZXItcHJvZ3Jlc3M+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2lzVG9wUmlnaHRSdW50aW1lR3JhcGhzQWN0aXZlXV0iPgogICAgICAgICAgICA8ZGl2IGlkPSJncmFwaC1jb250YWluZXIiPgogICAgICAgICAgICAgIDx0Zi1ncmFwaCBpZD0iZ3JhcGgiIGdyYXBoLWhpZXJhcmNoeT0iW1tncmFwaEhpZXJhcmNoeV1dIiBiYXNpYy1ncmFwaD0iW1tncmFwaF1dIiBzdGF0cz0iW1tzdGF0c11dIiBwcm9ncmVzcz0ie3tfZ3JhcGhQcm9ncmVzc319IiBjb2xvci1ieT0ic3RydWN0dXJlIiBjb2xvci1ieS1wYXJhbXM9Int7Y29sb3JCeVBhcmFtc319IiByZW5kZXItaGllcmFyY2h5PSJ7e19yZW5kZXJIaWVyYXJjaHl9fSIgbm9kZS1jb250ZXh0LW1lbnUtaXRlbXM9IltbX2NyZWF0ZU5vZGVDb250ZXh0TWVudUl0ZW1zKCldXSI+PC90Zi1ncmFwaD4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb250ZXh0LW1lbnUiPjwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2lzVG9wUmlnaHRUZW5zb3JWYWx1ZXNBY3RpdmVdXSI+CiAgICAgICAgICAgIDx0Zi10ZW5zb3ItdmFsdWUtbXVsdGktdmlldyBpZD0idGVuc29yVmFsdWVNdWx0aVZpZXciIGNvbnRpbnVlLXRvLWNhbGxiYWNrPSJbW19jcmVhdGVDb250aW51ZVRvQ2FsbGJhY2soKV1dIiB0ZW5zb3ItbmFtZS1jbGlja2VkPSJbW19jcmVhdGVOb2RlQ2xpY2tlZEhhbmRsZXIoKV1dIj4KICAgICAgICAgICAgPC90Zi10ZW5zb3ItdmFsdWUtbXVsdGktdmlldz4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDx0Zi1kZWJ1Z2dlci1yZXNpemVyIGlzLWhvcml6b250YWw9InRydWUiIGN1cnJlbnQtbGVuZ3RoPSJ7e190b3BSaWdodFF1YWRyYW50SGVpZ2h0fX0iIG1pbi1sZW5ndGg9IltbX21pblRvcFJpZ2h0UXVhZHJhbnRIZWlnaHRdXSIgbWF4LWxlbmd0aD0iW1tfbWF4VG9wUmlnaHRRdWFkcmFudEhlaWdodF1dIj4KICAgICAgICA8L3RmLWRlYnVnZ2VyLXJlc2l6ZXI+CgogICAgICAgIDxkaXYgaWQ9InRlbnNvci1kYXRhIiBjbGFzcz0idGVuc29yLWRhdGEiPgogICAgICAgICAgPHRmLXRlbnNvci1kYXRhLXN1bW1hcnkgaWQ9InRlbnNvckRhdGFTdW1tYXJ5IiBsYXRlc3QtdGVuc29yLWRhdGE9IltbX2xhdGVzdFRlbnNvckRhdGFdXSIgZXhwYW5kLWhhbmRsZXI9IltbX2NyZWF0ZVRlbnNvckRhdGFFeHBhbmRIYW5kbGVyKCldXSIgY29udGludWUtdG8tY2FsbGJhY2s9IltbX2NyZWF0ZUNvbnRpbnVlVG9DYWxsYmFjaygpXV0iIGhpZ2hsaWdodGVkLW5vZGUtbmFtZT0iW1tfaGlnaGxpZ2h0Tm9kZU5hbWVdXSIgdGVuc29yLW5hbWUtY2xpY2tlZD0iW1tfY3JlYXRlTm9kZUNsaWNrZWRIYW5kbGVyKCldXSIgZ2V0LWhlYWx0aC1waWxsPSJbW19jcmVhdGVHZXRIZWFsdGhQaWxsKCldXSI+CiAgICAgICAgICA8L3RmLXRlbnNvci1kYXRhLXN1bW1hcnk+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgPC90Zi1kYXNoYm9hcmQtbGF5b3V0PgoKICAgIDxzdHlsZSBpbmNsdWRlPSJkYXNoYm9hcmQtc3R5bGUiPjwvc3R5bGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgbGVmdDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgICB0b3A6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KICAgICAgcGFwZXItdG9hc3QgewogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICBmb250LXNpemU6IDExMCU7CiAgICAgICAgd2lkdGg6IDQwdnc7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDMwdnc7CiAgICAgIH0KICAgICAgdGYtZGFzaGJvYXJkLWxheW91dCB7CiAgICAgICAgLS10Zi1kYXNoYm9hcmQtbGF5b3V0LXNpZGViYXItYmFzaXM6IGF1dG87CiAgICAgICAgLS10Zi1kYXNoYm9hcmQtbGF5b3V0LXNpZGViYXItbWF4LXdpZHRoOiBub25lOwogICAgICAgIC0tdGYtZGFzaGJvYXJkLWxheW91dC1zaWRlYmFyLW1pbi13aWR0aDogbm9uZTsKICAgICAgfQogICAgICAuZGVidWdnZXItc2VjdGlvbi10aXRsZSB7CiAgICAgICAgZm9udC1zaXplOiAxMTAlOwogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICB9CiAgICAgIHBhcGVyLXRhYnMgewogICAgICAgIGNvbG9yOiAjNTU1OwogICAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CiAgICAgIH0KICAgICAgcGFwZXItdGFiLmlyb24tc2VsZWN0ZWQgewogICAgICAgIGNvbG9yOiBibGFjazsKICAgICAgICBmb250LXdlaWdodDogYm9sZDsKICAgICAgfQogICAgICAjaW5pdGlhbERpYWxvZyB7CiAgICAgICAgLyoqIFRoaXMgbWF0Y2hlcyB0aGUgZGVmYXVsdCB6LWluZGV4IG9mIHBhcGVyLWRpYWxvZyBiYWNrZHJvcHMuICovCiAgICAgICAgei1pbmRleDogMTAyOwogICAgICB9CiAgICAgIC8qKiBSZXNpemUgdGhlIHJlZ2lvbiBmb3IgdGhlIGdyYXBoIGFzIHRoZSB1c2VyIHJlc2l6ZXMgdGhlIHJlZ2lvbi4gKi8KICAgICAgI2dyYXBoLWNvbnRhaW5lciB7CiAgICAgICAgaGVpZ2h0OiBjYWxjKDEwMCUgLSAxMjBweCk7CiAgICAgICAgLyoqIENsaXAgdGhlIG1pbmltYXAgaWYgdGhlIGhlaWdodCBvZiB0aGUgZ3JhcGggY29udGFpbmVyIGlzIHNtYWxsLiAqLwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CiAgICAgICNncmFwaCB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgfQogICAgICAjdG9vbHRpcC1zb3J0aW5nIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBtYXJnaW4tdG9wOiA1cHg7CiAgICAgIH0KICAgICAgI3Rvb2x0aXAtc29ydGluZy1sYWJlbCB7CiAgICAgICAgbWFyZ2luLXRvcDogMTNweDsKICAgICAgfQogICAgICAjdG9vbHRpcC1zb3J0aW5nIHBhcGVyLWRyb3Bkb3duLW1lbnUgewogICAgICAgIG1hcmdpbi1sZWZ0OiAxMHB4OwogICAgICAgIC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWZvY3VzLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICB3aWR0aDogMTA1cHg7CiAgICAgIH0KICAgICAgI3gtdHlwZS1zZWxlY3RvciBwYXBlci1idXR0b24gewogICAgICAgIG1hcmdpbjogNXB4IDNweDsKICAgICAgfQogICAgICAucnVudGltZS1ncmFwaC1kZXZpY2UgewogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgIH0KICAgICAgI3J1bnRpbWUtZ3JhcGgtZGV2aWNlLW5hbWUgewogICAgICAgIGZvbnQtc2l6ZTogODUlOwogICAgICAgIHdvcmQtYnJlYWs6IGJyZWFrLWFsbDsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgIH0KICAgICAgI2FjdGl2ZS1ydW50aW1lLWdyYXBoLWRldmljZS1uYW1lIHsKICAgICAgICBmb250LXNpemU6IDg1JTsKICAgICAgICB3aWR0aDogMzUwcHg7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICB9CiAgICAgICN0b3AtcmlnaHQtcHJvZ3Jlc3MtYmFyIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKICAgICAgfQogICAgICAubGluZS1pdGVtIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwYWRkaW5nLXRvcDogNXB4OwogICAgICB9CiAgICAgIC5uby1kYXRhLXdhcm5pbmcgewogICAgICAgIG1heC13aWR0aDogNTQwcHg7CiAgICAgICAgbWFyZ2luOiA4MHB4IGF1dG8gMCBhdXRvOwogICAgICB9CiAgICAgIC5zaWRlYmFyIHsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgb3ZlcmZsb3cteDogdmlzaWJsZTsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KICAgICAgLmNlbnRlciB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgfQogICAgICB0Zi1kZWJ1Z2dlci1yZXNpemVyIHsKICAgICAgICByaWdodDogLTEwcHg7CiAgICAgIH0KICAgICAgI2NlbnRlci1jb250ZW50IHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgIH0KICAgICAgLyoqIFRoZSByZXNpemVyIHNob3VsZCBoYXZlIG5vIHNwYWNlIHRvIHRoZSBsZWZ0IG9mIGl0LiAqLwogICAgICAjY2VudGVyLWNvbnRlbnQgdGYtZGVidWdnZXItcmVzaXplcltpcy1ob3Jpem9udGFsXSB7CiAgICAgICAgbWFyZ2luLWxlZnQ6IC0yM3B4OwogICAgICB9CiAgICAgIC5jb250ZXh0LW1lbnUgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNlMmUyZTI7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMnB4OwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBtaW4td2lkdGg6IDE1MHB4OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNkNGQ0ZDQ7CiAgICAgIH0KICAgICAgLnNwaW5uZXIgewogICAgICAgIHdpZHRoOiAyMHB4OwogICAgICAgIGhlaWdodDogMjBweDsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwogICAgICB9CiAgICAgIC5ub2RlLWVudHJpZXMgewogICAgICAgIGJveC1zaGFkb3c6IDNweCAzcHggI2RkZDsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgIGhlaWdodDogODAlOwogICAgICAgIG92ZXJmbG93OiBhdXRvOwogICAgICAgIHBhZGRpbmctbGVmdDogM3B4OwogICAgICAgIHBhZGRpbmctcmlnaHQ6IDNweDsKICAgICAgICBwYWRkaW5nLXRvcDogM3B4OwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CiAgICAgIC5zb3VyY2UtY29kZS12aWV3LWRpdiB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGhlaWdodDogNDAlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICBwYWRkaW5nLXRvcDogM3B4OwogICAgICAgIHBhZGRpbmctbGVmdDogM3B4OwogICAgICAgIHBhZGRpbmctcmlnaHQ6IDNweDsKICAgICAgICBib3gtc2hhZG93OiAzcHggM3B4ICNkZGQ7CiAgICAgIH0KICAgICAgI3Nlc3Npb25SdW5zVmlldyB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIG92ZXJmbG93OiBhdXRvOwogICAgICAgIG1heC1oZWlnaHQ6IDI1dmg7CiAgICAgIH0KICAgICAgLmJ1dHRvbnMtY29udGFpbmVyIHsKICAgICAgICBwYWRkaW5nOiAyMHB4IDA7CiAgICAgIH0KICAgICAgI3RlbnNvci1kYXRhIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgcGFkZGluZzogMjBweCAwOwogICAgICAgIG1hcmdpbjogMCAwIDIwcHggMDsKICAgICAgfQogICAgICAjdGVuc29yRGF0YVN1bW1hcnkgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgICB0b3A6IDA7CiAgICAgIH0KICAgICAgI3RvcC1yaWdodC1xdWFkcmFudCB7CiAgICAgICAgaGVpZ2h0OiA2NiU7CiAgICAgICAgb3ZlcmZsb3c6IGF1dG87CiAgICAgIH0KICAgICAgLnRvZ2dsZS1zb3VyY2UtY29kZSB7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiAxZW07CiAgICAgICAgZm9udC1zaXplOiA4MCU7CiAgICAgICAgZmxvYXQ6IHJpZ2h0OwogICAgICB9CiAgICAgIC5jb250ZXh0LW1lbnUgdWwgewogICAgICAgIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICAgIH0KICAgICAgLmNvbnRleHQtbWVudSB1bCBsaSB7CiAgICAgICAgcGFkZGluZzogNHB4IDE2cHg7CiAgICAgIH0KICAgICAgLmNvbnRleHQtbWVudSB1bCBsaTpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2YzOTEzZTsKICAgICAgICBjb2xvcjogd2hpdGU7CiAgICAgIH0KCiAgICAgIHBhcGVyLWlucHV0IHsKICAgICAgICB3aWR0aDogMjAwcHg7CiAgICAgIH0KICAgICAgLmlubGluZSwKICAgICAgcGFwZXItaXRlbSB7CiAgICAgICAgZGlzcGxheTogaW5saW5lOwogICAgICB9CgogICAgICB2ei1saW5lLWNoYXJ0IHsKICAgICAgICBoZWlnaHQ6IDMwMHB4OwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfQogICAgICBbaGlkZGVuXSB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgogIDxzY3JpcHQ+Ly9+fldFQlBBVEh+fi90Zi1kZWJ1Z2dlci1kYXNoYm9hcmQvdGVuc29yLXNoYXBlLWhlbHBlci5qcwooZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYyhkLGYpe3JldHVybiBkPD1mPyI6OiI6Ijo6IitNYXRoLmNlaWwoZC9mKX1hLmdldERlZmF1bHRTbGljaW5nPWZ1bmN0aW9uKGQpe3JldHVybiAwPT09ZC5sZW5ndGg/IiI6MT09PWQubGVuZ3RoPyJbIitjKGRbMF0sMUUzKSsiXSI6Mj09PWQubGVuZ3RoPyJbIitjKGRbMF0sMjUwKSsiLCAiK2MoZFsxXSwyNTApKyJdIjpudWxsfTthLnJhbmtGcm9tU2xpY2luZz1mdW5jdGlvbihkKXtkLnN0YXJ0c1dpdGgoIlsiKSYmKGQ9ZC5zbGljZSgxLGQubGVuZ3RoLTEpKTtpZigwPT09ZC5sZW5ndGgpcmV0dXJuIDA7e2Q9ZC5zcGxpdCgiLCIpO2xldCBmPWQubGVuZ3RoO2Zvcihjb25zdCBnIG9mIGQpaXNOYU4oTnVtYmVyKGcpKXx8Zi0tO3JldHVybiBmfX19KShpbXx8KGltPXt9KSk7Cjwvc2NyaXB0PgogIDxzY3JpcHQ+Ly9+fldFQlBBVEh+fi90Zi1kZWJ1Z2dlci1kYXNoYm9hcmQvdGYtZGVidWdnZXItZGFzaGJvYXJkLmh0bWwuanMKY29uc3QgbG09KCk9PndpbmRvdy5pbm5lckhlaWdodHx8ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodHx8ZG9jdW1lbnQuYm9keS5jbGllbnRIZWlnaHQsbW09KCk9PndpbmRvdy5pbm5lcldpZHRofHxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGh8fGRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGgsbm09KGxtKCktNzApLzI7ClBvbHltZXIoe2lzOiJ0Zi1kZWJ1Z2dlci1kYXNoYm9hcmQiLHByb3BlcnRpZXM6e190b3BSaWdodFRhYnM6e3R5cGU6QXJyYXksdmFsdWU6W3tpZDoidGFiLXJ1bnRpbWUtZ3JhcGhzIixuYW1lOiJSdW50aW1lIEdyYXBocyJ9LHtpZDoidGFiLXRlbnNvci12YWx1ZXMiLG5hbWU6IlRlbnNvciBWYWx1ZXMifV0scmVhZG9ubHk6ITB9LF9pc1RvcFJpZ2h0UnVudGltZUdyYXBoc0FjdGl2ZTp7dHlwZTpCb29sZWFuLHZhbHVlOiEwfSxfaXNUb3BSaWdodFRlbnNvclZhbHVlc0FjdGl2ZTp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxfdG9wUmlnaHRTZWxlY3RlZDp7dHlwZTpTdHJpbmcsdmFsdWU6IjAiLG9ic2VydmVyOiJfdG9wUmlnaHRTZWxlY3RlZENoYW5nZWQifSxfbG9uZ1BvbGxDb3VudDp7dHlwZTpOdW1iZXIsdmFsdWU6MH0sX3N0ZXBCdXR0b25UZXh0Ont0eXBlOlN0cmluZyx2YWx1ZToiU3RlcCJ9LF9jb250aW51ZUJ1dHRvblRleHQ6e3R5cGU6U3RyaW5nLHZhbHVlOiJDb250aW51ZS4uLiJ9LApfdGVuc29yVmlld0lkQ291bnRlcjp7dHlwZTpOdW1iZXIsdmFsdWU6MH0saXNSZWxvYWREaXNhYmxlZDp7dHlwZTpCb29sZWFuLHZhbHVlOiEwLHJlYWRPbmx5OiEwfSxhbHJlYWR5U3RhcnRlZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxfY3VycmVudFNlc3Npb25SdW5JbmZvOnt0eXBlOlN0cmluZyx2YWx1ZTpudWxsfSxfc2Vzc2lvblJ1blRvdGFsQ291bnRlcjp7dHlwZTpOdW1iZXIsdmFsdWU6MH0sX3Nlc3Npb25SdW5Db3VudGVyczp7dHlwZTpPYmplY3QsdmFsdWU6e319LF9zZXNzaW9uUnVuS2V5MkRldmljZU5hbWVzOnt0eXBlOk9iamVjdCx2YWx1ZTp7fX0sX2FjdGl2ZVNlc3Npb25SdW5LZXk6e3R5cGU6U3RyaW5nLHZhbHVlOm51bGx9LF9hY3RpdmVTZXNzaW9uUnVuRGV2aWNlczp7dHlwZTpBcnJheSx2YWx1ZTpbXX0sX2FjdGl2ZVNlc3Npb25SdW5OdW1EZXZpY2VzOnt0eXBlOk51bWJlcix2YWx1ZTotMX0sX2FjdGl2ZVJ1bnRpbWVHcmFwaERldmljZU5hbWU6e3R5cGU6U3RyaW5nLAp2YWx1ZTpudWxsLG5vdGlmeTohMH0sX2hpZ2hsaWdodE5vZGVOYW1lOnt0eXBlOlN0cmluZyx2YWx1ZTpudWxsfSxfY29udGludWVUb1R5cGU6e3R5cGU6U3RyaW5nLHZhbHVlOiIifSxfY29udGludWVUb0NvdW50ZXI6e3R5cGU6TnVtYmVyLHZhbHVlOjB9LF9jb250aW51ZVN0b3A6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sX2NvbnRpbnVlVG9UYXJnZXQ6e3R5cGU6U3RyaW5nLHZhbHVlOiIifSxfY29udGludWVUb0NvdW50ZXJUYXJnZXQ6e3R5cGU6TnVtYmVyLHZhbHVlOi0xfSxfZm9yY2VFeHBhbmRBbmRDaGVja05vZGVOYW1lOlN0cmluZyxfZm9yY2VFeHBhbmROb2RlTmFtZTpTdHJpbmcsX3NvdXJjZUZvY3VzTm9kZU5hbWU6U3RyaW5nLF9zb3VyY2VDb2RlU2hvd246e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxvYnNlcnZlcjoiX3Nob3dTb3VyY2VDb2RlQ2hhbmdlZCJ9LF9ncmFwaFByb2dyZXNzOnt0eXBlOk9iamVjdH0sX3JlcXVlc3RNYW5hZ2VyOnt0eXBlOk9iamVjdCx2YWx1ZTooKT0+Cm5ldyBQay5SZXF1ZXN0TWFuYWdlcig1MCl9LF9idXN5Ont0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LF9sZWZ0UGFuZVdpZHRoOnt0eXBlOk51bWJlcix2YWx1ZTpWbC5nZXROdW1iZXJJbml0aWFsaXplcigiX2xlZnRQYW5lV2lkdGgiLHtkZWZhdWx0VmFsdWU6NDUwfSksb2JzZXJ2ZXI6Il9sZWZ0UGFuZVdpZHRoT2JzZXJ2ZXIifSxfbWlubGVmdFBhbmVXaWR0aDp7dHlwZTpOdW1iZXIsdmFsdWU6NDUwLHJlYWRPbmx5OiEwfSxfbWF4bGVmdFBhbmVXaWR0aDp7dHlwZTpOdW1iZXIsY29tcHV0ZWQ6Il9jb21wdXRlTWF4bGVmdFBhbmVXaWR0aChfd2luZG93V2lkdGgsIF9tYXhNYWluQ29udGVudFdpZHRoLCBfcmVzaXplcldpZHRoKSJ9LF9tYXhNYWluQ29udGVudFdpZHRoOnt0eXBlOk51bWJlcix2YWx1ZTozNTAscmVhZE9ubHk6ITB9LF90b3BSaWdodFF1YWRyYW50SGVpZ2h0Ont0eXBlOk51bWJlcix2YWx1ZTpWbC5nZXROdW1iZXJJbml0aWFsaXplcigiX3RvcFJpZ2h0UXVhZHJhbnRIZWlnaHQiLAp7ZGVmYXVsdFZhbHVlOm5tfSksb2JzZXJ2ZXI6Il90b3BSaWdodFF1YWRyYW50SGVpZ2h0T2JzZXJ2ZXIifSxfbWluVG9wUmlnaHRRdWFkcmFudEhlaWdodDp7dHlwZTpOdW1iZXIsdmFsdWU6MjAwLHJlYWRPbmx5OiEwfSxfbWF4VG9wUmlnaHRRdWFkcmFudEhlaWdodDp7dHlwZTpOdW1iZXIsY29tcHV0ZWQ6Il9jb21wdXRlTWF4VG9wUmlnaHRRdWFkcmFudEhlaWdodChfd2luZG93SGVpZ2h0LCBfcmVzaXplcldpZHRoKSJ9LF9yZXNpemVyV2lkdGg6e3R5cGU6TnVtYmVyLHZhbHVlOjMwLHJlYWRPbmx5OiEwfSxfd2luZG93V2lkdGg6TnVtYmVyLF93aW5kb3dIZWlnaHQ6TnVtYmVyLF9kZWJ1Z1dhdGNoZXM6QXJyYXksX2xhdGVzdFNlc3Npb25SdW46T2JqZWN0fSxvYnNlcnZlcnM6WyJfb25BY3RpdmVSdW50aW1lR3JhcGhEZXZpY2VOYW1lQ2hhbmdlKF9hY3RpdmVSdW50aW1lR3JhcGhEZXZpY2VOYW1lKSIsIl9zaXplRGFzaGJvYXJkUmVnaW9ucyhfbGVmdFBhbmVXaWR0aCwgX3RvcFJpZ2h0UXVhZHJhbnRIZWlnaHQsIF93aW5kb3dXaWR0aCkiLAoiX2dyYXBoUHJvZ3Jlc3NVcGRhdGVkKF9ncmFwaFByb2dyZXNzKSJdLHJlYWR5KCl7dGhpcy5faGFuZGxlV2luZG93UmVzaXplKCk7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsKCk9Pnt0aGlzLl9oYW5kbGVXaW5kb3dSZXNpemUoKX0sITEpO3RoaXMucmVsb2FkKCl9LGxvbmdfcG9sbCgpe2NvbnN0IGE9e3BvczorK3RoaXMuX2xvbmdQb2xsQ291bnR9O2xldCBjPVBrLmdldFJvdXRlcigpLnBsdWdpblJvdXRlKCJkZWJ1Z2dlciIsIi9jb21tIik7Yz1Qay5hZGRQYXJhbXMoYyxhKTt0aGlzLl9yZXF1ZXN0TWFuYWdlci5yZXF1ZXN0KGMpLnRoZW4oZD0+e2NvbnN0IGY9ZC50eXBlO2Q9ZC5kYXRhO2lmKCJtZXRhIj09PWYpe3ZhciBnPWQucnVuX2tleSxsPWdbMF0uc3BsaXQoIiwiKSxrPWdbMV0uc3BsaXQoIiwiKTtjb25zdCBwPWdbMl0uc3BsaXQoIiwiKTt2YXIgbT10aGlzLl9hY3RpdmVTZXNzaW9uUnVuS2V5O3RoaXMuc2V0KCJfYWN0aXZlU2Vzc2lvblJ1bktleSIsCmcpO3RoaXMuc2V0KCJfbGF0ZXN0U2Vzc2lvblJ1biIse2ZlZWRzOmwsZmV0Y2hlczprLHRhcmdldHM6cH0pO3RoaXMuc2V0KCJfc2Vzc2lvblJ1blNvbGVBY3RpdmUiLCEwKTt2b2lkIDA9PT10aGlzLl9zZXNzaW9uUnVuS2V5MkRldmljZU5hbWVzW2ddPyh0aGlzLl9zZXNzaW9uUnVuS2V5MkRldmljZU5hbWVzW2ddPVtdLHRoaXMuc2V0KCJfYWN0aXZlU2Vzc2lvblJ1bkRldmljZXMiLFtdKSk6dGhpcy5zZXQoIl9hY3RpdmVTZXNzaW9uUnVuRGV2aWNlcyIsdGhpcy5fc2Vzc2lvblJ1bktleTJEZXZpY2VOYW1lc1tnXSk7dGhpcy5fY3VycmVudFNlc3Npb25SdW5JbmZvPWw9IkZlZWRzOiAiK2wrIjsgRmV0Y2hlczogIitrKyI7IFRhcmdldHM6ICIrcDt0aGlzLl9zZXNzaW9uUnVuQ291bnRlcnMuaGFzT3duUHJvcGVydHkobCk/dGhpcy5fc2Vzc2lvblJ1bkNvdW50ZXJzW2xdKz0xOnRoaXMuX3Nlc3Npb25SdW5Db3VudGVyc1tsXT0xO3RoaXMuX3Nlc3Npb25SdW5Ub3RhbENvdW50ZXIrKzsKdGhpcy4kLmluaXRpYWxEaWFsb2cuY2xvc2VEaWFsb2coKTt0aGlzLl9jb250aW51ZVRvVHlwZSYmXy5pc0VxdWFsKG0sZyl8fCh0aGlzLl9wcm9jZXNzR2F0ZWRHcnBjRGVidWdPcHMoZywhMSksdGhpcy5fYW5ub3VuY2VOZXdTZXNzaW9uUnVuKCkpfWVsc2UidGVuc29yIj09PWY/KGc9ZC5kZXZpY2VfbmFtZSxtPWQubm9kZV9uYW1lLGw9ZC5tYXliZV9iYXNlX2V4cGFuZGVkX25vZGVfbmFtZSx0aGlzLl9hY3RpdmVSdW50aW1lR3JhcGhEZXZpY2VOYW1lIT1nP3RoaXMuc2V0KCJfYWN0aXZlUnVudGltZUdyYXBoRGV2aWNlTmFtZSIsZyk6IXRoaXMuX2NvbnRpbnVlVG9UeXBlJiZ0aGlzLl9pc1RvcFJpZ2h0UnVudGltZUdyYXBoc0FjdGl2ZSYmKHRoaXMuX2ZvY3VzT25HcmFwaE5vZGUoZyxsKSx0aGlzLnNldCgiX2ZvcmNlRXhwYW5kTm9kZU5hbWUiLGcrIi8iK2wpKSx0aGlzLnNldCgiX3Nlc3Npb25SdW5Tb2xlQWN0aXZlIiwhMSksaz1tKyI6IitkLm91dHB1dF9zbG90LHRoaXMuc2V0KCJfbGF0ZXN0VGVuc29yRGF0YSIsCntkZXZpY2VOYW1lOmcsdGVuc29yTmFtZTprLG5vZGVOYW1lOm0sbWF5YmVCYXNlRXhwYW5kZWROb2RlTmFtZTpsLGRlYnVnT3A6ZC5kZWJ1Z19vcCxkdHlwZTpkLmR0eXBlLHNoYXBlOmQuc2hhcGUsdmFsdWU6ZC52YWx1ZXN9KSx0aGlzLl9tYXliZVVwZGF0ZVRlbnNvclZhbHVlVmlld3MoayxkLmRlYnVnX29wKSx0aGlzLnNldCgiX2J1c3kiLCExKSk6Y29uc29sZS5lcnJvcigiSW52YWxpZCBsb25nLXBvbGxpbmcgcmVzcG9uc2UgdHlwZTogIixmKTtudWxsIT10aGlzLl9jb250aW51ZVRvVHlwZSYmdGhpcy5fcHJvY2Vzc0NvbnRpbnVlVG8oZixkKTt0aGlzLmxvbmdfcG9sbCgpfSl9LF9wcm9jZXNzQ29udGludWVUbyhhLGMpe3RoaXMuX2NvbnRpbnVlU3RvcD90aGlzLl9jbGVhckNvbnRpbnVlVG8oKToiU2Vzc2lvblJ1biI9PT10aGlzLl9jb250aW51ZVRvVHlwZT90aGlzLl9wcm9jZXNzQ29udGludWVUb1Nlc3Npb25SdW4oIm1ldGEiPT09YSk6IlRlbnNvckNvbmRpdGlvbiI9PT0KdGhpcy5fY29udGludWVUb1R5cGU/dGhpcy5fc3RlcCgpOiJvcCI9PT10aGlzLl9jb250aW51ZVRvVHlwZT90aGlzLl9wcm9jZXNzQ29udGludWVUb09wKCJtZXRhIj09PWEsYyk6bnVsbCE9dGhpcy5fY29udGludWVUb1R5cGUmJiIiIT09dGhpcy5fY29udGludWVUb1R5cGUmJmNvbnNvbGUuZXJyb3IoIkludmFsaWQgX2NvbnRpbnVlVG9UeXBlOiIsdGhpcy5fY29udGludWVUb1R5cGUpfSxfcHJvY2Vzc0NvbnRpbnVlVG9TZXNzaW9uUnVuKGEpe2EmJnRoaXMuc2V0KCJfY29udGludWVUb0NvdW50ZXIiLHRoaXMuX2NvbnRpbnVlVG9Db3VudGVyKzEpO3RoaXMuX2NvbnRpbnVlVG9Db3VudGVyPHRoaXMuX2NvbnRpbnVlVG9Db3VudGVyVGFyZ2V0P3RoaXMuX3N0ZXAoKTp0aGlzLl9jbGVhckNvbnRpbnVlVG8oKX0sX3Byb2Nlc3NDb250aW51ZVRvT3AoYSxjKXthJiZ0aGlzLl9hbm5vdW5jZU5ld1Nlc3Npb25SdW4oKTthPWMuZGV2aWNlX25hbWU7Yz1jLm1heWJlX2Jhc2VfZXhwYW5kZWRfbm9kZV9uYW1lOwpjb25zdCBkPW51bGw9PWM/bnVsbDppbS5yZW1vdmVOb2RlTmFtZUJhc2VFeHBhbnNpb24oYyk7YSsiLyIrYz09PXRoaXMuX2NvbnRpbnVlVG9UYXJnZXR8fGErIi8iK2Q9PT10aGlzLl9jb250aW51ZVRvVGFyZ2V0Pyh0aGlzLl9jbGVhckNvbnRpbnVlVG8oKSx0aGlzLl9zb3VyY2VDb2RlU2hvd24mJnRoaXMuc2V0KCJfc291cmNlRm9jdXNOb2RlTmFtZSIsZCkpOnRoaXMuX3N0ZXAoKX0sX21heWJlVXBkYXRlVGVuc29yVmFsdWVWaWV3cyhhLGMpe2NvbnN0IGQ9dGhpcy4kJCgiI3RlbnNvclZhbHVlTXVsdGlWaWV3Iik7aWYobnVsbCE9ZCl7dmFyIGY9ITE7Xy5mb3JFYWNoKGQuZ2V0Vmlld3MoKSxnPT57aWYoZy50ZW5zb3JOYW1lPT09YSYmZy5kZWJ1Z09wPT09YylyZXR1cm4gZj0hMCwhMX0pO2YmJmQucmVuZGVyVGVuc29yVmFsdWVzKCl9fSxyZWxvYWQoKXtpZighdGhpcy5hbHJlYWR5U3RhcnRlZCl7dGhpcy5zZXQoImFscmVhZHlTdGFydGVkIiwhMCk7dmFyIGE9UGsuZ2V0Um91dGVyKCkucGx1Z2luUm91dGUoImRlYnVnZ2VyIiwKIi9kZWJ1Z2dlcl9ncnBjX2hvc3RfcG9ydCIpO3RoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3QoYSkudGhlbihjPT57MDxjLnBvcnQ/KHRoaXMuJC5pbml0aWFsRGlhbG9nLm9wZW5EaWFsb2coYy5ob3N0LGMucG9ydCksdGhpcy5sb25nX3BvbGwoKSk6dGhpcy4kLmluaXRpYWxEaWFsb2cub3BlbkRpc2FibGVkRGlhbG9nKCl9KX19LF9zaG93U291cmNlQ29kZUNoYW5nZWQoKXt0aGlzLl9zb3VyY2VDb2RlU2hvd24/KHRoaXMuJCQoIiNub2RlLWVudHJpZXMiKS5zdHlsZS5oZWlnaHQ9IjQwJSIsdGhpcy4kLnNvdXJjZUNvZGVWaWV3LnJlbmRlcigpKTp0aGlzLiQkKCIjbm9kZS1lbnRyaWVzIikuc3R5bGUuaGVpZ2h0PSI4MCUifSxfc2hvd1RvYXN0KGEpe3RoaXMuJC50b2FzdC5zZXRBdHRyaWJ1dGUoInRleHQiLGEpO3RoaXMuJC50b2FzdC5vcGVuKCl9LF9hbm5vdW5jZU5ld1Nlc3Npb25SdW4oKXt0aGlzLl9zaG93VG9hc3QoIlNlc3Npb24ucnVuKCkgIyIrdGhpcy5fc2Vzc2lvblJ1blRvdGFsQ291bnRlcisKIiBpcyBzdGFydGluZy4iKX0sX2Rpc3BsYXlHcmFwaChhLGMpe2E9e3J1bl9rZXk6SlNPTi5zdHJpbmdpZnkoYSksZGV2aWNlX25hbWU6Y307YT1Qay5hZGRQYXJhbXMoIi9kYXRhL3BsdWdpbi9kZWJ1Z2dlci9kZWJ1Z2dlcl9ncmFwaCIsYSk7dGhpcy4kLmxvYWRlci5kYXRhc2V0cz1be25hbWU6Ii9kZWJ1Z2dlcl9ncmFwaCIscGF0aDphfV07dGhpcy4kLmxvYWRlci5zZXQoInNlbGVjdGVkRGF0YXNldCIsMCl9LF9wcm9jZXNzR2F0ZWRHcnBjRGVidWdPcHMoYSxjKXtjP2NvbnNvbGUubG9nKCJQb2xsaW5nIGZvciBmaXJzdCBHcmFwaERlZiBmb3IgcnVuIGtleToiLGEpOnRoaXMuc2V0KCJfYWN0aXZlUnVudGltZUdyYXBoRGV2aWNlTmFtZSIsbnVsbCk7dmFyIGQ9e21vZGU6InJldHJpZXZlX2FsbCIscnVuX2tleTpKU09OLnN0cmluZ2lmeShhKX07Y29uc3QgZj1Qay5nZXRSb3V0ZXIoKS5wbHVnaW5Sb3V0ZSgiZGVidWdnZXIiLCIvZ2F0ZWRfZ3JwYyIpO2Q9UGsuYWRkUGFyYW1zKGYsCmQpO2xldCBnPVtdO3RoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3QoZCkudGhlbihsPT57aWYoMD09bC5kZXZpY2VfbmFtZXMubGVuZ3RoKWN8fHRoaXMuX3N0ZXAoKSx0aGlzLl9wcm9jZXNzR2F0ZWRHcnBjRGVidWdPcHMoYSwhMCk7ZWxzZXt2YXIgaz1udWxsO2Zvcihjb25zdCBtIGluIGwuZ2F0ZWRfZ3JwY190ZW5zb3JzKWlmKGwuZ2F0ZWRfZ3JwY190ZW5zb3JzLmhhc093blByb3BlcnR5KG0pKXstMT09PXRoaXMuX3Nlc3Npb25SdW5LZXkyRGV2aWNlTmFtZXNbYV0uaW5kZXhPZihtKSYmKHRoaXMuX3Nlc3Npb25SdW5LZXkyRGV2aWNlTmFtZXNbYV0ucHVzaChtKSx0aGlzLiQuc2Vzc2lvblJ1bnNWaWV3LnVwZGF0ZU51bURldmljZXModGhpcy5fc2Vzc2lvblJ1bktleTJEZXZpY2VOYW1lc1thXS5sZW5ndGgpKTt0aGlzLnNldCgiX2FjdGl2ZVNlc3Npb25SdW5EZXZpY2VzIix0aGlzLl9zZXNzaW9uUnVuS2V5MkRldmljZU5hbWVzW2FdLnNsaWNlKCkpO2s9dGhpcy5fYWN0aXZlU2Vzc2lvblJ1bkRldmljZXNbdGhpcy5fYWN0aXZlU2Vzc2lvblJ1bkRldmljZXMubGVuZ3RoLQoxXTtjb25zdCBwPWwuZ2F0ZWRfZ3JwY190ZW5zb3JzW21dO2ZvcihsZXQgcT0wO3E8cC5sZW5ndGg7KytxKWcucHVzaCh7ZGV2aWNlX25hbWU6bSxub2RlX25hbWU6cFtxXVswXSxvcF90eXBlOnBbcV1bMV0sb3V0cHV0X3Nsb3Q6cFtxXVsyXSxkZWJ1Z19vcDpwW3FdWzNdfSl9bnVsbCE9ayYmKHRoaXMuc2V0KCJfYWN0aXZlUnVudGltZUdyYXBoRGV2aWNlTmFtZSIsayksbD1Qb2x5bWVyLmRvbSh0aGlzLiQkKCIjYWN0aXZlLXJ1bnRpbWUtZ3JhcGgtZGV2aWNlLW5hbWUiKSksbnVsbCE9bCYmbC5zZXRBdHRyaWJ1dGUoInNlbGVjdGVkIixrKSk7aW0uc29ydEFuZEJhc2VFeHBhbmREZWJ1Z1dhdGNoZXMoZyk7dGhpcy5zZXQoIl9kZWJ1Z1dhdGNoZXMiLGcpO3RoaXMuJC5zb3VyY2VDb2RlVmlldy5yZW5kZXIoZyl9fSl9LF9jcmVhdGVEZWJ1Z1dhdGNoQ2hhbmdlSGFuZGxlcigpe3JldHVybihhLGMpPT57Yz1jPyJicmVhayI6ImRpc2FibGUiO3RoaXMuX3JlcXVlc3RCcmVha3BvaW50U3RhdGVDaGFuZ2UoaW0uZ2V0Q2xlYW5Ob2RlTmFtZShhLmRldmljZV9uYW1lKwoiLyIrYS5ub2RlX25hbWUpLGEub3V0cHV0X3Nsb3QsYS5kZWJ1Z19vcCxjKX19LF9mb2N1c09uR3JhcGhOb2RlKGEsYyl7bnVsbCE9YSYmdGhpcy5fYWN0aXZlUnVudGltZUdyYXBoRGV2aWNlTmFtZSE9PWEmJnRoaXMuc2V0KCJfYWN0aXZlUnVudGltZUdyYXBoRGV2aWNlTmFtZSIsYSk7dGhpcy5fc2V0VG9wUmlnaHRSdW50aW1lR3JhcGhzVG9BY3RpdmUoKTtjb25zdCBkPXRoaXMuJCQoIiNncmFwaCIpO2lmKGQuc2VsZWN0ZWROb2RlPT09YylkLnBhblRvTm9kZShjKTtlbHNle2NvbnN0IGY9ZC5nZXQoInJlbmRlckhpZXJhcmNoeSIpLmhpZXJhcmNoeS5nZXROb2RlTWFwKCk7bnVsbD09ZltjXSYmKGM9aW0ucmVtb3ZlTm9kZU5hbWVCYXNlRXhwYW5zaW9uKGMpKTtudWxsIT1mW2NdJiZkLnNldCgic2VsZWN0ZWROb2RlIixjKX10aGlzLnNldCgiX2hpZ2hsaWdodE5vZGVOYW1lIixhKyIvIitjKX0sX2NyZWF0ZU5vZGVDbGlja2VkSGFuZGxlcigpe3JldHVybihhLGMsZCk9Pnt0aGlzLl9zb3VyY2VDb2RlU2hvd24mJgohMCE9PWQmJnRoaXMuc2V0KCJfc291cmNlRm9jdXNOb2RlTmFtZSIsaW0ucmVtb3ZlTm9kZU5hbWVCYXNlRXhwYW5zaW9uKGMpKTt0aGlzLl9mb2N1c09uR3JhcGhOb2RlKGEsYyk7dGhpcy5zZXQoIl9mb3JjZUV4cGFuZE5vZGVOYW1lIixhKyIvIitjKX19LF9jcmVhdGVGZWVkRmV0Y2hUYXJnZXRDbGlja2VkSGFuZGxlcigpe3JldHVybiBhPT57bGV0IGM9YTstMSE9PWMuaW5kZXhPZigiOiIpJiYoYz1jLnNsaWNlKDAsYy5pbmRleE9mKCI6IikpKTthPV8uZmluZCh0aGlzLl9kZWJ1Z1dhdGNoZXMsZD0+ZC5ub2RlX25hbWU9PT1jfHwwPT09ZC5ub2RlX25hbWUuaW5kZXhPZihjKSYmIigiPT09ZC5ub2RlX25hbWVbYy5sZW5ndGhdKTtudWxsPT1hP3RoaXMuX3Nob3dUb2FzdCgiTm9kZSAnIitjKyInIGlzIG5vdCBpbiB0aGUgcnVudGltZSBncmFwaCBvZiB0aGUgY3VycmVudCBTZXNzaW9uLnJ1biBvciBkb2VzIG5vdCBoYXZlIGEgZGVidWcgb3AgYXR0YWNoZWQuIik6dGhpcy5fZm9jdXNPbkdyYXBoTm9kZShhLmRldmljZV9uYW1lLApjKX19LF9jcmVhdGVUZW5zb3JEYXRhRXhwYW5kSGFuZGxlcigpe3JldHVybiBhPT57dGhpcy5fc2V0VG9wUmlnaHRUZW5zb3JWYWx1ZXNUb0FjdGl2ZSgpO3NldFRpbWVvdXQoKCk9Pnt0aGlzLiQkKCIjdGVuc29yVmFsdWVNdWx0aVZpZXciKS5hZGRWaWV3KHt2aWV3SWQ6dGhpcy5fY3JlYXRlVGVuc29yVmlld0lkKCksZGV2aWNlTmFtZTphLmRldmljZU5hbWUsdGVuc29yTmFtZTphLnRlbnNvck5hbWUsbm9kZU5hbWU6YS5ub2RlTmFtZSxtYXliZUJhc2VFeHBhbmRlZE5vZGVOYW1lOmEubWF5YmVCYXNlRXhwYW5kZWROb2RlTmFtZSxkZWJ1Z09wOmEuZGVidWdPcCxkdHlwZTphLmR0eXBlLHNoYXBlOmEuc2hhcGUsc2xpY2luZzppbS5nZXREZWZhdWx0U2xpY2luZyhhLnNoYXBlKSx0aW1lSW5kaWNlczoiLTEifSl9LDEwKX19LF9jcmVhdGVUZW5zb3JWaWV3SWQoKXtjb25zdCBhPSJkZWJ1Z2dlci10ZW5zb3Itdmlldy0iK3RoaXMuX3RlbnNvclZpZXdJZENvdW50ZXI7dGhpcy5fdGVuc29yVmlld0lkQ291bnRlcisrOwpyZXR1cm4gYX0sX2NyZWF0ZU5vZGVDb250ZXh0TWVudUl0ZW1zKCl7cmV0dXJuW3t0aXRsZTooKT0+IkV4cGFuZCBhbmQgaGlnaGxpZ2h0IixhY3Rpb246YT0+e2NvbnN0IGM9aW0uZ2V0Q2xlYW5Ob2RlTmFtZShhLm5vZGUubmFtZSk7YT10aGlzLl9hY3RpdmVSdW50aW1lR3JhcGhEZXZpY2VOYW1lKyIvIithLm5vZGUubmFtZTt0aGlzLnNldCgiX2ZvcmNlRXhwYW5kTm9kZU5hbWUiLGEpO3RoaXMuc2V0KCJfaGlnaGxpZ2h0Tm9kZU5hbWUiLGEpO3RoaXMuX3NvdXJjZUNvZGVTaG93biYmdGhpcy5zZXQoIl9zb3VyY2VGb2N1c05vZGVOYW1lIixpbS5yZW1vdmVOb2RlTmFtZUJhc2VFeHBhbnNpb24oYykpfX0se3RpdGxlOigpPT4iQWRkIGJyZWFrcG9pbnQiLGFjdGlvbjphPT57Y29uc3QgYz1pbS5nZXRDbGVhbk5vZGVOYW1lKGEubm9kZS5uYW1lKTt0aGlzLnNldCgiX2ZvcmNlRXhwYW5kQW5kQ2hlY2tOb2RlTmFtZSIsdGhpcy5fYWN0aXZlUnVudGltZUdyYXBoRGV2aWNlTmFtZSsKIi8iK2Eubm9kZS5uYW1lKTt0aGlzLl9zb3VyY2VDb2RlU2hvd24mJnRoaXMuc2V0KCJfc291cmNlRm9jdXNOb2RlTmFtZSIsaW0ucmVtb3ZlTm9kZU5hbWVCYXNlRXhwYW5zaW9uKGMpKX19LHt0aXRsZTooKT0+IkNvbnRpbnVlIHRvIixhY3Rpb246YT0+ey0xIT09WyJfQXJnIiwiX1JldHZhbCJdLmluZGV4T2YoYS5ub2RlLm9wKT90aGlzLl9zaG93VG9hc3QoJ0Nhbm5vdCBjb250aW51ZSB0byBub2RlICInK2Eubm9kZS5uYW1lKyciLCBkdWUgdG8gb3AgdHlwZSAiJythLm5vZGUub3ArJyIuJyk6dGhpcy5fY29udGludWVUb05vZGUodGhpcy5fYWN0aXZlUnVudGltZUdyYXBoRGV2aWNlTmFtZSxhLm5vZGUubmFtZSl9fV19LF9jcmVhdGVHZXRIZWFsdGhQaWxsKCl7cmV0dXJuKGEsYyxkLGYpPT57dmFyIGc9e3dhdGNoX2tleTphLHRpbWVfaW5kaWNlczoiLTEiLG1hcHBpbmc6ImhlYWx0aC1waWxsIn07Y29uc3QgbD1Qay5nZXRSb3V0ZXIoKS5wbHVnaW5Sb3V0ZSgiZGVidWdnZXIiLAoiL3RlbnNvcl9kYXRhIik7Zz1Qay5hZGRQYXJhbXMobCxnKTt0aGlzLl9yZXF1ZXN0TWFuYWdlci5yZXF1ZXN0KGcpLnRoZW4oaz0+e2s9ay50ZW5zb3JfZGF0YVswXTtmKGspO3RoaXMuX2NvbmRpdGlvbmFsSGVhbHRoUGlsbFN0b3AoYSxjLGQsayl9KX19LF9jb25kaXRpb25hbEhlYWx0aFBpbGxTdG9wKGEsYyxkLGYpe2lmKCJUZW5zb3JDb25kaXRpb24iPT09dGhpcy5fY29udGludWVUb1R5cGUmJmltLmNoZWNrSGVhbHRoUGlsbEFnYWluc3RUZW5zb3JDb25kaXRpb25LZXkodGhpcy5fY29udGludWVUb1RhcmdldCxmLHRoaXMuX2NvbnRpbnVlVG9Db3VudGVyVGFyZ2V0KSl7dGhpcy5zZXQoIl9jb250aW51ZVN0b3AiLCEwKTtmPWltLnJlbW92ZU5vZGVOYW1lQmFzZUV4cGFuc2lvbihkKTt0aGlzLl9zb3VyY2VDb2RlU2hvd24mJnRoaXMuc2V0KCJfc291cmNlRm9jdXNOb2RlTmFtZSIsZik7dGhpcy5fZm9jdXNPbkdyYXBoTm9kZShjLGQpO2NvbnN0IGc9YysiLyIrZDt0aGlzLnNldCgiX2ZvcmNlRXhwYW5kTm9kZU5hbWUiLApnKTtzZXRUaW1lb3V0KCgpPT57dGhpcy5zZXQoIl9oaWdobGlnaHROb2RlTmFtZSIsbnVsbCk7dGhpcy5zZXQoIl9oaWdobGlnaHROb2RlTmFtZSIsZyl9LDEwMCk7dGhpcy5fc2hvd1RvYXN0KCdUZW5zb3IgY29uZGl0aW9uICInK3RoaXMuX2NvbnRpbnVlVG9UYXJnZXQrJyIgaXMgbWV0IGJ5IHdhdGNoIGtleTogIicrYSsnIi5cblN0b3BwaW5nIGNvbnRpbnVhdGlvbi4nKX19LF9jb250aW51ZVRvTm9kZShhLGMpe2NvbnN0IGQ9aW0uZ2V0Q2xlYW5Ob2RlTmFtZShjKTthPWErIi8iK2M7dGhpcy5fcmVxdWVzdEJyZWFrcG9pbnRTdGF0ZUNoYW5nZShkLDAsIkRlYnVnSWRlbnRpdHkiLCJicmVhayIpO3RoaXMuc2V0KCJfZm9yY2VFeHBhbmRBbmRDaGVja05vZGVOYW1lIixhKTt0aGlzLl9zb3VyY2VDb2RlU2hvd24mJnRoaXMuc2V0KCJfc291cmNlRm9jdXNOb2RlTmFtZSIsaW0ucmVtb3ZlTm9kZU5hbWVCYXNlRXhwYW5zaW9uKGQpKTt0aGlzLl9zZXRDb250aW51ZVRvKCJvcCIsYSk7CnRoaXMuJC5jb250aW51ZURpYWxvZy51cGRhdGVDb250aW51ZUJ1dHRvblRleHQoITApO3RoaXMuX3N0ZXAoKX0sX2NyZWF0ZUNvbnRpbnVlVG9Ob2RlSGFuZGxlcigpe3JldHVybihhLGMpPT57dGhpcy5fY29udGludWVUb05vZGUoYSxjKX19LF9vbkFjdGl2ZVJ1bnRpbWVHcmFwaERldmljZU5hbWVDaGFuZ2UoYSl7Y29uc3QgYz1Qb2x5bWVyLmRvbSh0aGlzLiQkKCIjcnVudGltZS1ncmFwaC1kZXZpY2UtbmFtZSIpKTtpZigwPHRoaXMuX2FjdGl2ZVNlc3Npb25SdW5EZXZpY2VzLmxlbmd0aCl7bGV0IGQ7ZD1hKygiIChkZXZpY2UgIisodGhpcy5fYWN0aXZlU2Vzc2lvblJ1bkRldmljZXMuaW5kZXhPZihhKSsxKSsiIG9mICIrdGhpcy5fYWN0aXZlU2Vzc2lvblJ1bkRldmljZXMubGVuZ3RoKyIpIik7dGhpcy5faXNUb3BSaWdodFJ1bnRpbWVHcmFwaHNBY3RpdmUmJm51bGwhPWMmJihjLnRleHRDb250ZW50PWQpfWVsc2UgdGhpcy5faXNUb3BSaWdodFJ1bnRpbWVHcmFwaHNBY3RpdmUmJgpudWxsIT1jJiYoYy50ZXh0Q29udGVudD0iV2FpdGluZyBmb3IgZGV2aWNlLi4uIik7bnVsbCE9YSYmdGhpcy5fZGlzcGxheUdyYXBoKHRoaXMuX2FjdGl2ZVNlc3Npb25SdW5LZXksYSl9LF9zdGVwKCl7aWYobnVsbCE9dGhpcy5fYWN0aXZlU2Vzc2lvblJ1bktleSl7dGhpcy5zZXQoIl9idXN5IiwhMCk7dmFyIGE9e21vZGU6InJldHJpZXZlX2RldmljZV9uYW1lcyIscnVuX2tleTpKU09OLnN0cmluZ2lmeSh0aGlzLl9hY3RpdmVTZXNzaW9uUnVuS2V5KX0sYz1Qay5nZXRSb3V0ZXIoKS5wbHVnaW5Sb3V0ZSgiZGVidWdnZXIiLCIvZ2F0ZWRfZ3JwYyIpO2E9UGsuYWRkUGFyYW1zKGMsYSk7dGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdChhKS50aGVuKGQ9PntsZXQgZj0hMTtmb3IobGV0IGc9MDtnPGQuZGV2aWNlX25hbWVzLmxlbmd0aDsrK2cpaWYoLTE9PT10aGlzLl9hY3RpdmVTZXNzaW9uUnVuRGV2aWNlcy5pbmRleE9mKGQuZGV2aWNlX25hbWVzW2ddKSl7Zj0hMDticmVha31kPQpQay5nZXRSb3V0ZXIoKS5wbHVnaW5Sb3V0ZSgiZGVidWdnZXIiLCIvYWNrIik7dGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdChkKS50aGVuKCgpPT57ZiYmdGhpcy5fcHJvY2Vzc0dhdGVkR3JwY0RlYnVnT3BzKHRoaXMuX2FjdGl2ZVNlc3Npb25SdW5LZXksITEpfSl9KX19LF9jcmVhdGVTZXNzaW9uUnVuR28oKXtyZXR1cm4gYT0+e3RoaXMuX3NldENvbnRpbnVlVG8oIlNlc3Npb25SdW4iLHRoaXMuX2N1cnJlbnRTZXNzaW9uUnVuSW5mbyxhKTt0aGlzLl9zdGVwKCl9fSxfY3JlYXRlVGVuc29yQ29uZGl0aW9uR28oKXtyZXR1cm4oYSxjKT0+e3RoaXMuX3NldENvbnRpbnVlVG8oIlRlbnNvckNvbmRpdGlvbiIsYSxjKTt0aGlzLiQudGVuc29yRGF0YVN1bW1hcnkuZW5hYmxlSGVhbHRoUGlsbHMoKTt0aGlzLl9zdGVwKCl9fSxfY3JlYXRlRm9yY2VDb250aW51YXRpb25TdG9wKCl7cmV0dXJuKCk9Pnt0aGlzLl9zaG93VG9hc3QoJ0NvbnRpbnVhdGlvbiBvZiB0eXBlICInK3RoaXMuX2NvbnRpbnVlVG9UeXBlKwonIiB3YXMgaW50ZXJydXB0ZWQgYnkgdXNlci4nKTt0aGlzLnNldCgiX2NvbnRpbnVlU3RvcCIsITApfX0sX3NldENvbnRpbnVlVG8oYSxjLGQ9LTEpe3RoaXMuX2NvbnRpbnVlVG9UeXBlPWE7dGhpcy5fY29udGludWVUb1RhcmdldD1jO3RoaXMuX2NvbnRpbnVlVG9Db3VudGVyVGFyZ2V0PWQ7dGhpcy5fY29udGludWVUb0NvdW50ZXI9MDt0aGlzLl9jb250aW51ZVN0b3A9ITF9LF9jbGVhckNvbnRpbnVlVG8oKXt0aGlzLiQuY29udGludWVEaWFsb2cubm90aWZ5Q29udGludWF0aW9uU3RvcCgpO3RoaXMuX2NvbnRpbnVlVG9UYXJnZXQ9dGhpcy5fY29udGludWVUb1R5cGU9IiI7dGhpcy5fY29udGludWVUb0NvdW50ZXJUYXJnZXQ9LTE7dGhpcy5fY29udGludWVUb0NvdW50ZXI9MDt0aGlzLl9jb250aW51ZVN0b3A9ITE7dGhpcy5zZXQoIl9idXN5IiwhMSl9LF9jcmVhdGVDb250aW51ZVRvQ2FsbGJhY2soKXtyZXR1cm4oYSxjKT0+e3RoaXMuX3NldENvbnRpbnVlVG8oIm9wIixhKyIvIisKYyk7dGhpcy5fc3RlcCgpO3RoaXMuX2lzVG9wUmlnaHRSdW50aW1lR3JhcGhzQWN0aXZlJiZ0aGlzLl9mb2N1c09uR3JhcGhOb2RlKGEsYyk7dGhpcy5zZXQoIl9mb3JjZUV4cGFuZE5vZGVOYW1lIixhKyIvIitjKX19LF90b3BSaWdodFNlbGVjdGVkQ2hhbmdlZChhKXthPXRoaXMuX3RvcFJpZ2h0VGFic1thXS5pZDt0aGlzLnNldCgiX2lzVG9wUmlnaHRSdW50aW1lR3JhcGhzQWN0aXZlIiwidGFiLXJ1bnRpbWUtZ3JhcGhzIj09PWEpO3RoaXMuc2V0KCJfaXNUb3BSaWdodFRlbnNvclZhbHVlc0FjdGl2ZSIsInRhYi10ZW5zb3ItdmFsdWVzIj09PWEpfSxfc2V0VG9wUmlnaHRSdW50aW1lR3JhcGhzVG9BY3RpdmUoKXt0aGlzLnNldCgiX3RvcFJpZ2h0U2VsZWN0ZWQiLCIwIik7dGhpcy5zZXQoIl9pc1RvcFJpZ2h0UnVudGltZUdyYXBoc0FjdGl2ZSIsITApO3RoaXMuc2V0KCJfaXNUb3BSaWdodFRlbnNvclZhbHVlc0FjdGl2ZSIsITEpfSxfc2V0VG9wUmlnaHRUZW5zb3JWYWx1ZXNUb0FjdGl2ZSgpe3RoaXMuc2V0KCJfdG9wUmlnaHRTZWxlY3RlZCIsCiIxIik7dGhpcy5zZXQoIl9pc1RvcFJpZ2h0UnVudGltZUdyYXBoc0FjdGl2ZSIsITEpO3RoaXMuc2V0KCJfaXNUb3BSaWdodFRlbnNvclZhbHVlc0FjdGl2ZSIsITApfSxfcmVxdWVzdEJyZWFrcG9pbnRTdGF0ZUNoYW5nZShhLGMsZCxmKXthPXttb2RlOiJzZXRfc3RhdGUiLG5vZGVfbmFtZTphLG91dHB1dF9zbG90OmMsZGVidWdfb3A6ZCxzdGF0ZTpmfTtjPVBrLmdldFJvdXRlcigpLnBsdWdpblJvdXRlKCJkZWJ1Z2dlciIsIi9nYXRlZF9ncnBjIik7YT1Qay5hZGRQYXJhbXMoYyxhKTt0aGlzLnNldCgiX2J1c3kiLCEwKTt0aGlzLl9yZXF1ZXN0TWFuYWdlci5yZXF1ZXN0KGEpLnRoZW4oZz0+e3RoaXMuc2V0KCJfYnVzeSIsITEpO2NvbnNvbGUubG9nKCJCcmVha3BvaW50IHNldF9zdGF0ZSByZXNwb25zZTogIixnKX0pfSxfZ3JhcGhQcm9ncmVzc1VwZGF0ZWQoYSl7Y29uc3QgYz10aGlzLiQkKCIjdG9wLXJpZ2h0LXByb2dyZXNzLWJhciIpO251bGw9PXRoaXMuX2xhdGVzdFNlc3Npb25SdW4/CihjLnNldEF0dHJpYnV0ZSgidmFsdWUiLDApLHRoaXMuc2V0KCJfYnVzeSIsITEpKTooYy5zZXRBdHRyaWJ1dGUoInZhbHVlIixhLnZhbHVlKSx0aGlzLnNldCgiX2J1c3kiLDEwMD5hLnZhbHVlKSl9LF9oYW5kbGVXaW5kb3dSZXNpemUoKXt0aGlzLnNldCgiX3dpbmRvd1dpZHRoIixtbSgpKTt0aGlzLnNldCgiX3dpbmRvd0hlaWdodCIsbG0oKSk7dGhpcy5fc2l6ZURhc2hib2FyZFJlZ2lvbnModGhpcy5fbGVmdFBhbmVXaWR0aCx0aGlzLl90b3BSaWdodFF1YWRyYW50SGVpZ2h0LHRoaXMuX3dpbmRvd1dpZHRoKX0sX2NvbXB1dGVNYXhsZWZ0UGFuZVdpZHRoKGEsYyxkKXtyZXR1cm4gYS1jLWR9LF9jb21wdXRlTWF4VG9wUmlnaHRRdWFkcmFudEhlaWdodChhLGMpe3JldHVybiBhLWMtNzB9LF9zaXplRGFzaGJvYXJkUmVnaW9ucyhhLGMsZCl7dGhpcy4kJCgiI2xlZnQtcGFuZSIpLnN0eWxlLndpZHRoPWErInB4IjthPWQtYS10aGlzLl9yZXNpemVyV2lkdGgtODt0aGlzLiQkKCIjY2VudGVyLWNvbnRlbnQiKS5zdHlsZS53aWR0aD0KYSsicHgiO2E9Yy10aGlzLl9yZXNpemVyV2lkdGg7dGhpcy4kJCgiI3RvcC1yaWdodC1xdWFkcmFudCIpLnN0eWxlLmhlaWdodD1hKyJweCI7dGhpcy4kJCgiI3RlbnNvci1kYXRhIikuc3R5bGUudG9wPWMrInB4In0sX2xlZnRQYW5lV2lkdGhPYnNlcnZlcjpWbC5nZXROdW1iZXJPYnNlcnZlcigiX2xlZnRQYW5lV2lkdGgiLHtkZWZhdWx0VmFsdWU6NDUwfSksX3RvcFJpZ2h0UXVhZHJhbnRIZWlnaHRPYnNlcnZlcjpWbC5nZXROdW1iZXJPYnNlcnZlcigiX3RvcFJpZ2h0UXVhZHJhbnRIZWlnaHQiLHtkZWZhdWx0VmFsdWU6bm19KX0pOwo8L3NjcmlwdD4KPC9kb20tbW9kdWxlPgoKCgoKCgoKCgoKCjxkb20tbW9kdWxlIGlkPSJwYXBlci1tYXRlcmlhbC1zaGFyZWQtc3R5bGVzIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KCiAgICAgIDpob3N0KFtlbGV2YXRpb249IjEiXSkgewogICAgICAgIEBhcHBseSAtLXNoYWRvdy1lbGV2YXRpb24tMmRwOwogICAgICB9CgogICAgICA6aG9zdChbZWxldmF0aW9uPSIyIl0pIHsKICAgICAgICBAYXBwbHkgLS1zaGFkb3ctZWxldmF0aW9uLTRkcDsKICAgICAgfQoKICAgICAgOmhvc3QoW2VsZXZhdGlvbj0iMyJdKSB7CiAgICAgICAgQGFwcGx5IC0tc2hhZG93LWVsZXZhdGlvbi02ZHA7CiAgICAgIH0KCiAgICAgIDpob3N0KFtlbGV2YXRpb249IjQiXSkgewogICAgICAgIEBhcHBseSAtLXNoYWRvdy1lbGV2YXRpb24tOGRwOwogICAgICB9CgogICAgICA6aG9zdChbZWxldmF0aW9uPSI1Il0pIHsKICAgICAgICBAYXBwbHkgLS1zaGFkb3ctZWxldmF0aW9uLTE2ZHA7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPgoKCgoKPGRvbS1tb2R1bGUgaWQ9InBhcGVyLW1hdGVyaWFsIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGUgaW5jbHVkZT0icGFwZXItbWF0ZXJpYWwtc2hhcmVkLXN0eWxlcyI+PC9zdHlsZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QoW2FuaW1hdGVkXSkgewogICAgICAgIEBhcHBseSAtLXNoYWRvdy10cmFuc2l0aW9uOwogICAgICB9CiAgICAgIDpob3N0IHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1tYXRlcmlhbDsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8c2xvdD48L3Nsb3Q+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vcGFwZXItbWF0ZXJpYWwvcGFwZXItbWF0ZXJpYWwuaHRtbC5qcwpQb2x5bWVyKHtpczoicGFwZXItbWF0ZXJpYWwiLHByb3BlcnRpZXM6e2VsZXZhdGlvbjp7dHlwZTpOdW1iZXIscmVmbGVjdFRvQXR0cmlidXRlOiEwLHZhbHVlOjF9LGFuaW1hdGVkOnt0eXBlOkJvb2xlYW4scmVmbGVjdFRvQXR0cmlidXRlOiEwLHZhbHVlOiExfX19KTsKPC9zY3JpcHQ+CgoKCgoKCgoKCgoKCjxkb20tbW9kdWxlIGlkPSJ0Zi1ncmFwaC1kZWJ1Z2dlci1kYXRhLWNhcmQiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQoKICAgICAgaDIgewogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIG1hcmdpbjogMDsKICAgICAgfQoKICAgICAgLmhlYWx0aC1waWxsLWxlZ2VuZCB7CiAgICAgICAgcGFkZGluZzogMTVweDsKICAgICAgfQoKICAgICAgLmhlYWx0aC1waWxsLWxlZ2VuZCBoMiB7CiAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsKICAgICAgfQoKICAgICAgLmhlYWx0aC1waWxsLWVudHJ5IHsKICAgICAgICBtYXJnaW46IDEwcHggMTBweCAxMHB4IDA7CiAgICAgIH0KCiAgICAgIC5oZWFsdGgtcGlsbC1lbnRyeSAuY29sb3ItcHJldmlldyB7CiAgICAgICAgd2lkdGg6IDI2cHg7CiAgICAgICAgaGVpZ2h0OiAyNnB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDNweDsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgbWFyZ2luOiAwIDEwcHggMCAwOwogICAgICB9CgogICAgICAuaGVhbHRoLXBpbGwtZW50cnkgLmNvbG9yLWxhYmVsLAogICAgICAuaGVhbHRoLXBpbGwtZW50cnkgLnRlbnNvci1jb3VudCB7CiAgICAgICAgY29sb3I6ICM3Nzc7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIGhlaWdodDogMjZweDsKICAgICAgICBmb250LXNpemU6IDIycHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDI2cHg7CiAgICAgICAgdmVydGljYWwtYWxpZ246IHRvcDsKICAgICAgfQoKICAgICAgLmhlYWx0aC1waWxsLWVudHJ5IC50ZW5zb3ItY291bnQgewogICAgICAgIGZsb2F0OiByaWdodDsKICAgICAgfQoKICAgICAgI2hlYWx0aC1waWxsLXN0ZXAtc2xpZGVyIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBtYXJnaW46IDAgMCAwIC0xNXB4OwogICAgICAgIC8qIDMxIGNvbWVzIGZyb20gYWRkaW5nIGEgcGFkZGluZyBvZiAxNXB4IGZyb20gYm90aCBzaWRlcyBvZiB0aGUgcGFwZXItc2xpZGVyLCBzdWJ0cmFjdGluZwogICAqIDFweCBzbyB0aGF0IHRoZSBzbGlkZXIgd2lkdGggYWxpZ25zIHdpdGggdGhlIGltYWdlICh0aGUgbGFzdCBzbGlkZXIgbWFya2VyIHRha2VzIHVwIDFweCksCiAgICogYW5kIGFkZGluZyAycHggdG8gYWNjb3VudCBmb3IgYSBib3JkZXIgb2YgMXB4IG9uIGJvdGggc2lkZXMgb2YgdGhlIGltYWdlLiAzMCAtIDEgKyAyLgogICAqIEFwcGFyZW50bHksIHRoZSBwYXBlci1zbGlkZXIgbGFja3MgYSBtaXhpbiBmb3IgdGhvc2UgcGFkZGluZyB2YWx1ZXMuICovCiAgICAgICAgd2lkdGg6IGNhbGMoMTAwJSArIDMxcHgpOwogICAgICB9CgogICAgICAjaGVhbHRoLXBpbGxzLWxvYWRpbmctc3Bpbm5lciB7CiAgICAgICAgd2lkdGg6IDIwcHg7CiAgICAgICAgaGVpZ2h0OiAyMHB4OwogICAgICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7CiAgICAgIH0KCiAgICAgICNoZWFsdGgtcGlsbC1zdGVwLW51bWJlci1pbnB1dCB7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7CiAgICAgIH0KCiAgICAgICNudW1lcmljLWFsZXJ0cy10YWJsZS1jb250YWluZXIgewogICAgICAgIG1heC1oZWlnaHQ6IDQwMHB4OwogICAgICAgIG92ZXJmbG93LXg6IGhpZGRlbjsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICB9CgogICAgICAjbnVtZXJpYy1hbGVydHMtdGFibGUgewogICAgICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICAgIH0KCiAgICAgICNudW1lcmljLWFsZXJ0cy10YWJsZSB0ZCB7CiAgICAgICAgdmVydGljYWwtYWxpZ246IHRvcDsKICAgICAgfQoKICAgICAgI251bWVyaWMtYWxlcnRzLXRhYmxlIC5maXJzdC1vZmZlbnNlLXRkIHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgIH0KCiAgICAgIC5maXJzdC1vZmZlbnNlLXRkIHsKICAgICAgICB3aWR0aDogODBweDsKICAgICAgfQoKICAgICAgLnRlbnNvci1kZXZpY2UtdGQgewogICAgICAgIG1heC13aWR0aDogMTQwcHg7CiAgICAgICAgd29yZC13cmFwOiBicmVhay13b3JkOwogICAgICB9CgogICAgICAudGVuc29yLXNlY3Rpb24td2l0aGluLXRhYmxlIHsKICAgICAgICBjb2xvcjogIzI2NjIzNjsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgb3BhY2l0eTogMC44OwogICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwogICAgICB9CgogICAgICAudGVuc29yLXNlY3Rpb24td2l0aGluLXRhYmxlOmhvdmVyIHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CgogICAgICAuZGV2aWNlLXNlY3Rpb24td2l0aGluLXRhYmxlIHsKICAgICAgICBjb2xvcjogIzY2NjsKICAgICAgfQoKICAgICAgLm1pbmktaGVhbHRoLXBpbGwgewogICAgICAgIHdpZHRoOiAxMzBweDsKICAgICAgfQoKICAgICAgLm1pbmktaGVhbHRoLXBpbGwgPiBkaXYgewogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICB3aWR0aDogNjBweDsKICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgIH0KCiAgICAgICNldmVudC1jb3VudHMtdGggewogICAgICAgIHBhZGRpbmc6IDAgMCAwIDEwcHg7CiAgICAgIH0KCiAgICAgIC5uZWdhdGl2ZS1pbmYtbWluaS1oZWFsdGgtcGlsbC1zZWN0aW9uIHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2IoMjU1LCAxNDEsIDApOwogICAgICAgIHdpZHRoOiAyMHB4OwogICAgICB9CgogICAgICAucG9zaXRpdmUtaW5mLW1pbmktaGVhbHRoLXBpbGwtc2VjdGlvbiB7CiAgICAgICAgYmFja2dyb3VuZDogcmdiKDAsIDYyLCAyMTIpOwogICAgICAgIHdpZHRoOiAyMHB4OwogICAgICB9CgogICAgICAubmFuLW1pbmktaGVhbHRoLXBpbGwtc2VjdGlvbiB7CiAgICAgICAgYmFja2dyb3VuZDogcmdiKDIwNCwgNDcsIDQ0KTsKICAgICAgICB3aWR0aDogMjBweDsKICAgICAgfQoKICAgICAgLm5lZ2F0aXZlLWluZi1taW5pLWhlYWx0aC1waWxsLXNlY3Rpb24sCiAgICAgIC5wb3NpdGl2ZS1pbmYtbWluaS1oZWFsdGgtcGlsbC1zZWN0aW9uLAogICAgICAubmFuLW1pbmktaGVhbHRoLXBpbGwtc2VjdGlvbiB7CiAgICAgICAgY29sb3I6ICNmZmY7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBsaW5lLWhlaWdodDogMjBweDsKICAgICAgICBtYXJnaW46IDAgMCAwIDEwcHg7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICB9CgogICAgICAubm8tbnVtZXJpYy1hbGVydHMtbm90aWZpY2F0aW9uIHsKICAgICAgICBtYXJnaW46IDA7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8cGFwZXItbWF0ZXJpYWwgZWxldmF0aW9uPSIxIiBjbGFzcz0iY2FyZCBoZWFsdGgtcGlsbC1sZWdlbmQiPgogICAgICA8ZGl2IGNsYXNzPSJ0aXRsZSI+CiAgICAgICAgRW5hYmxlIGFsbCAobm90IGp1c3Qgc2FtcGxlZCkgc3RlcHMuIFJlcXVpcmVzIHNsb3cgZGlzayByZWFkLgogICAgICA8L2Rpdj4KICAgICAgPHBhcGVyLXRvZ2dsZS1idXR0b24gaWQ9ImVuYWJsZUFsbFN0ZXBzTW9kZVRvZ2dsZSIgY2hlY2tlZD0ie3thbGxTdGVwc01vZGVFbmFibGVkfX0iPgogICAgICA8L3BhcGVyLXRvZ2dsZS1idXR0b24+CiAgICAgIDxoMj4KICAgICAgICBTdGVwIG9mIEhlYWx0aCBQaWxsczoKICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbYWxsU3RlcHNNb2RlRW5hYmxlZF1dIj4KICAgICAgICAgIDxpbnB1dCB0eXBlPSJudW1iZXIiIGlkPSJoZWFsdGgtcGlsbC1zdGVwLW51bWJlci1pbnB1dCIgbWluPSIwIiBtYXg9IltbX2JpZ2dlc3RTdGVwRXZlclNlZW5dXSIgdmFsdWU9Int7c3BlY2lmaWNIZWFsdGhQaWxsU3RlcDo6aW5wdXR9fSI+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIWFsbFN0ZXBzTW9kZUVuYWJsZWRdXSI+CiAgICAgICAgICBbW19jdXJyZW50U3RlcERpc3BsYXlWYWx1ZV1dCiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8cGFwZXItc3Bpbm5lci1saXRlIGFjdGl2ZSBoaWRkZW4kPSJbWyFhcmVIZWFsdGhQaWxsc0xvYWRpbmddXSIgaWQ9ImhlYWx0aC1waWxscy1sb2FkaW5nLXNwaW5uZXIiPjwvcGFwZXItc3Bpbm5lci1saXRlPgogICAgICA8L2gyPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbYWxsU3RlcHNNb2RlRW5hYmxlZF1dIj4KICAgICAgICA8cGFwZXItc2xpZGVyIGlkPSJoZWFsdGgtcGlsbC1zdGVwLXNsaWRlciIgaW1tZWRpYXRlLXZhbHVlPSJ7e3NwZWNpZmljSGVhbHRoUGlsbFN0ZXB9fSIgbWF4PSJbW19iaWdnZXN0U3RlcEV2ZXJTZWVuXV0iIHNuYXBzIHN0ZXA9IjEiIHZhbHVlPSJ7e3NwZWNpZmljSGVhbHRoUGlsbFN0ZXB9fSI+PC9wYXBlci1zbGlkZXI+CiAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shYWxsU3RlcHNNb2RlRW5hYmxlZF1dIj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX21heFN0ZXBJbmRleF1dIj4KICAgICAgICAgIDxwYXBlci1zbGlkZXIgaWQ9ImhlYWx0aC1waWxsLXN0ZXAtc2xpZGVyIiBpbW1lZGlhdGUtdmFsdWU9Int7aGVhbHRoUGlsbFN0ZXBJbmRleH19IiBtYXg9IltbX21heFN0ZXBJbmRleF1dIiBzbmFwcyBzdGVwPSIxIiB2YWx1ZT0ie3toZWFsdGhQaWxsU3RlcEluZGV4fX0iPjwvcGFwZXItc2xpZGVyPgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDxoMj4KICAgICAgICBIZWFsdGggUGlsbAogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1toZWFsdGhQaWxsVmFsdWVzRm9yU2VsZWN0ZWROb2RlXV0iPgogICAgICAgICAgQ291bnRzIGZvciBTZWxlY3RlZCBOb2RlCiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIWhlYWx0aFBpbGxWYWx1ZXNGb3JTZWxlY3RlZE5vZGVdXSI+CiAgICAgICAgICBMZWdlbmQKICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L2gyPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW2hlYWx0aFBpbGxFbnRyaWVzXV0iPgogICAgICAgIDxkaXYgY2xhc3M9ImhlYWx0aC1waWxsLWVudHJ5Ij4KICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbG9yLXByZXZpZXciIHN0eWxlPSJiYWNrZ3JvdW5kOltbaXRlbS5iYWNrZ3JvdW5kX2NvbG9yXV0iPjwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iY29sb3ItbGFiZWwiPltbaXRlbS5sYWJlbF1dPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0ZW5zb3ItY291bnQiPgogICAgICAgICAgICBbW19jb21wdXRlVGVuc29yQ291bnRTdHJpbmcoaGVhbHRoUGlsbFZhbHVlc0ZvclNlbGVjdGVkTm9kZSwKICAgICAgICAgICAgaW5kZXgpXV0KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L3RlbXBsYXRlPgogICAgICA8ZGl2IGhpZGRlbiQ9IltbIV9oYXNEZWJ1Z2dlck51bWVyaWNBbGVydHMoZGVidWdnZXJOdW1lcmljQWxlcnRzKV1dIj4KICAgICAgICA8aDIgaWQ9Im51bWVyaWMtYWxlcnRzLWhlYWRlciI+TnVtZXJpYyBBbGVydHM8L2gyPgogICAgICAgIDxwPgogICAgICAgICAgQWxlcnRzIGFyZSBzb3J0ZWQgZnJvbSB0b3AgdG8gYm90dG9tIGJ5IGluY3JlYXNpbmcgdGltZXN0YW1wLgogICAgICAgIAogICAgICAgIDxkaXYgaWQ9Im51bWVyaWMtYWxlcnRzLXRhYmxlLWNvbnRhaW5lciI+CiAgICAgICAgICA8dGFibGUgaWQ9Im51bWVyaWMtYWxlcnRzLXRhYmxlIj4KICAgICAgICAgICAgPHRoZWFkPgogICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgIDx0aD5GaXJzdCBPZmZlbnNlPC90aD4KICAgICAgICAgICAgICAgIDx0aD5UZW5zb3IgKERldmljZSk8L3RoPgogICAgICAgICAgICAgICAgPHRoIGlkPSJldmVudC1jb3VudHMtdGgiPkV2ZW50IENvdW50czwvdGg+CiAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgPC90aGVhZD4KICAgICAgICAgICAgPHRib2R5IGlkPSJudW1lcmljLWFsZXJ0cy1ib2R5Ij48L3Rib2R5PgogICAgICAgICAgPC90YWJsZT4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shX2hhc0RlYnVnZ2VyTnVtZXJpY0FsZXJ0cyhkZWJ1Z2dlck51bWVyaWNBbGVydHMpXV0iPgogICAgICAgIDxwIGNsYXNzPSJuby1udW1lcmljLWFsZXJ0cy1ub3RpZmljYXRpb24iPgogICAgICAgICAgTm8gbnVtZXJpYyBhbGVydHMgc28gZmFyLiBUaGF0IGlzIGxpa2VseSBnb29kLiBBbGVydHMgaW5kaWNhdGUgdGhlCiAgICAgICAgICBwcmVzZW5jZSBvZiBOYU4gb3IgKCsvLSkgSW5maW5pdHkgdmFsdWVzLCB3aGljaCBtYXkgYmUgY29uY2VybmluZy4KICAgICAgICAKICAgICAgPC90ZW1wbGF0ZT4KICAgIDwvcGFwZXItbWF0ZXJpYWw+CiAgPC90ZW1wbGF0ZT4KICA8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdGYtZ3JhcGgtZGVidWdnZXItZGF0YS1jYXJkL3RmLWdyYXBoLWRlYnVnZ2VyLWRhdGEtY2FyZC5odG1sLmpzCihmdW5jdGlvbigpe1BvbHltZXIoe2lzOiJ0Zi1ncmFwaC1kZWJ1Z2dlci1kYXRhLWNhcmQiLHByb3BlcnRpZXM6e3JlbmRlckhpZXJhcmNoeTpPYmplY3QsZGVidWdnZXJOdW1lcmljQWxlcnRzOnt0eXBlOkFycmF5LG5vdGlmeTohMH0sbm9kZU5hbWVzVG9IZWFsdGhQaWxsczpPYmplY3QsaGVhbHRoUGlsbFN0ZXBJbmRleDp7dHlwZTpOdW1iZXIsbm90aWZ5OiEwfSxzcGVjaWZpY0hlYWx0aFBpbGxTdGVwOnt0eXBlOk51bWJlcix2YWx1ZTowLG5vdGlmeTohMH0sc2VsZWN0ZWROb2RlOnt0eXBlOlN0cmluZyxub3RpZnk6ITB9LGhpZ2hsaWdodGVkTm9kZTp7dHlwZTpTdHJpbmcsbm90aWZ5OiEwfSxzZWxlY3RlZE5vZGVJbmNsdWRlOnt0eXBlOk51bWJlcixub3RpZnk6ITB9LGFyZUhlYWx0aFBpbGxzTG9hZGluZzpCb29sZWFuLGhlYWx0aFBpbGxFbnRyaWVzOnt0eXBlOkFycmF5LHZhbHVlOnRmLmdyYXBoLnNjZW5lLmhlYWx0aFBpbGxFbnRyaWVzLHJlYWRPbmx5OiEwfSxoZWFsdGhQaWxsVmFsdWVzRm9yU2VsZWN0ZWROb2RlOnt0eXBlOkFycmF5LApjb21wdXRlZDoiX2NvbXB1dGVIZWFsdGhQaWxsRm9yTm9kZShub2RlTmFtZXNUb0hlYWx0aFBpbGxzLCBoZWFsdGhQaWxsU3RlcEluZGV4LCBzZWxlY3RlZE5vZGUsIGFsbFN0ZXBzTW9kZUVuYWJsZWQsIGFyZUhlYWx0aFBpbGxzTG9hZGluZykifSxhbGxTdGVwc01vZGVFbmFibGVkOnt0eXBlOkJvb2xlYW4sbm90aWZ5OiEwfSxfYmlnZ2VzdFN0ZXBFdmVyU2Vlbjp7dHlwZTpOdW1iZXIsY29tcHV0ZWQ6Il9jb21wdXRlQmlnZ2VzdFN0ZXBFdmVyU2Vlbihub2RlTmFtZXNUb0hlYWx0aFBpbGxzKSJ9LF9tYXhTdGVwSW5kZXg6e3R5cGU6TnVtYmVyLGNvbXB1dGVkOiJfY29tcHV0ZU1heFN0ZXBJbmRleChub2RlTmFtZXNUb0hlYWx0aFBpbGxzKSJ9LF9jdXJyZW50U3RlcERpc3BsYXlWYWx1ZTp7dHlwZTpTdHJpbmcsY29tcHV0ZWQ6Il9jb21wdXRlQ3VycmVudFN0ZXBEaXNwbGF5VmFsdWUobm9kZU5hbWVzVG9IZWFsdGhQaWxscywgaGVhbHRoUGlsbFN0ZXBJbmRleCwgYWxsU3RlcHNNb2RlRW5hYmxlZCwgc3BlY2lmaWNIZWFsdGhQaWxsU3RlcCwgYXJlSGVhbHRoUGlsbHNMb2FkaW5nKSJ9fSwKb2JzZXJ2ZXJzOlsiX3VwZGF0ZUFsZXJ0c0xpc3QoZGVidWdnZXJOdW1lcmljQWxlcnRzKSJdLHJlYWR5OmZ1bmN0aW9uKCl7dmFyIGE9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1haW5Db250YWluZXIiKSxjPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoInRmLWRhc2hib2FyZC1sYXlvdXQgLnNjcm9sbGJhciIpO2EmJmMmJihhLnN0eWxlLm92ZXJmbG93PSJoaWRkZW4iLGMuc3R5bGUub3ZlcmZsb3c9ImhpZGRlbiIpfSxfaGVhbHRoUGlsbHNBdmFpbGFibGU6ZnVuY3Rpb24oYSxjKXtyZXR1cm4gYSYmY30sX2NvbXB1dGVUZW5zb3JDb3VudFN0cmluZzpmdW5jdGlvbihhLGMpe3JldHVybiBhP2FbY10udG9GaXhlZCgwKToiIn0sX2NvbXB1dGVIZWFsdGhQaWxsRm9yTm9kZTpmdW5jdGlvbihhLGMsZCxmLGcpe2lmKGd8fCFkKXJldHVybiBudWxsO2E9YVtkXTtyZXR1cm4gYT8oYz1hW2Y/MDpjXSk/Yy52YWx1ZS5zbGljZSgyLDgpOm51bGw6bnVsbH0sX2NvbXB1dGVDdXJyZW50U3RlcERpc3BsYXlWYWx1ZTpmdW5jdGlvbihhLApjLGQsZixnKXtpZihkKXJldHVybiBmLnRvRml4ZWQoMCk7aWYoZylyZXR1cm4gMDtmb3IobGV0IGwgaW4gYSlyZXR1cm4gYVtsXVtjXS5zdGVwLnRvRml4ZWQoMCk7cmV0dXJuIDB9LF9jb21wdXRlQmlnZ2VzdFN0ZXBFdmVyU2VlbjpmdW5jdGlvbihhKXtmb3IobGV0IGMgaW4gYSlyZXR1cm4gYT1hW2NdLE1hdGgubWF4KHRoaXMuX2JpZ2dlc3RTdGVwRXZlclNlZW4sYVthLmxlbmd0aC0xXS5zdGVwKTtyZXR1cm4gdGhpcy5fYmlnZ2VzdFN0ZXBFdmVyU2Vlbnx8MH0sX2NvbXB1dGVNYXhTdGVwSW5kZXg6ZnVuY3Rpb24oYSl7Zm9yKGxldCBjIGluIGEpcmV0dXJuIGFbY10ubGVuZ3RoLTE7cmV0dXJuIDB9LF9oYXNEZWJ1Z2dlck51bWVyaWNBbGVydHM6ZnVuY3Rpb24oYSl7cmV0dXJuIGEmJmEubGVuZ3RofSxfdXBkYXRlQWxlcnRzTGlzdDpmdW5jdGlvbihhKXt2YXIgYz10aGlzLiQkKCIjbnVtZXJpYy1hbGVydHMtYm9keSIpO2lmKGMpe2MuaW5uZXJIVE1MPSIiO2Zvcih2YXIgZD0KMDtkPGEubGVuZ3RoO2QrKyl7dmFyIGY9YVtkXSxnPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRyIiksbD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpO2wuaW5uZXJIVE1MPXRmLmdyYXBoLnV0aWwuY29tcHV0ZUh1bWFuRnJpZW5kbHlUaW1lKGYuZmlyc3RfdGltZXN0YW1wKTtsLmNsYXNzTGlzdC5hZGQoImZpcnN0LW9mZmVuc2UtdGQiKTtnLmFwcGVuZENoaWxkKGwpO2w9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTtsLmNsYXNzTGlzdC5hZGQoInRlbnNvci1kZXZpY2UtdGQiKTt2YXIgaz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtrLmNsYXNzTGlzdC5hZGQoInRlbnNvci1zZWN0aW9uLXdpdGhpbi10YWJsZSIpO2suaW5uZXJIVE1MPWYudGVuc29yX25hbWU7dGhpcy5fYWRkT3BFeHBhbnNpb25MaXN0ZW5lcihrLGYudGVuc29yX25hbWUpO2wuYXBwZW5kQ2hpbGQoayk7az1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtrLmNsYXNzTGlzdC5hZGQoImRldmljZS1zZWN0aW9uLXdpdGhpbi10YWJsZSIpOwprLmlubmVySFRNTD0iKCIrZi5kZXZpY2VfbmFtZSsiKSI7bC5hcHBlbmRDaGlsZChrKTtnLmFwcGVuZENoaWxkKGwpO2w9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7bC5jbGFzc0xpc3QuYWRkKCJtaW5pLWhlYWx0aC1waWxsIik7az1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpO2suY2xhc3NMaXN0LmFkZCgibWluaS1oZWFsdGgtcGlsbC10ZCIpO2suYXBwZW5kQ2hpbGQobCk7Zy5hcHBlbmRDaGlsZChrKTtmLm5lZ19pbmZfZXZlbnRfY291bnQmJihrPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLGsuY2xhc3NMaXN0LmFkZCgibmVnYXRpdmUtaW5mLW1pbmktaGVhbHRoLXBpbGwtc2VjdGlvbiIpLGsuaW5uZXJIVE1MPWYubmVnX2luZl9ldmVudF9jb3VudCxrLnNldEF0dHJpYnV0ZSgidGl0bGUiLGYubmVnX2luZl9ldmVudF9jb3VudCsiIGV2ZW50cyB3aXRoIC1cdTIyMWUiKSxsLmFwcGVuZENoaWxkKGspKTtmLnBvc19pbmZfZXZlbnRfY291bnQmJihrPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLAprLmNsYXNzTGlzdC5hZGQoInBvc2l0aXZlLWluZi1taW5pLWhlYWx0aC1waWxsLXNlY3Rpb24iKSxrLmlubmVySFRNTD1mLnBvc19pbmZfZXZlbnRfY291bnQsay5zZXRBdHRyaWJ1dGUoInRpdGxlIixmLnBvc19pbmZfZXZlbnRfY291bnQrIiBldmVudHMgd2l0aCArXHUyMjFlIiksbC5hcHBlbmRDaGlsZChrKSk7Zi5uYW5fZXZlbnRfY291bnQmJihrPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLGsuY2xhc3NMaXN0LmFkZCgibmFuLW1pbmktaGVhbHRoLXBpbGwtc2VjdGlvbiIpLGsuaW5uZXJIVE1MPWYubmFuX2V2ZW50X2NvdW50LGsuc2V0QXR0cmlidXRlKCJ0aXRsZSIsZi5uYW5fZXZlbnRfY291bnQrIiBldmVudHMgd2l0aCBOYU4iKSxsLmFwcGVuZENoaWxkKGspKTtQb2x5bWVyLmRvbShjKS5hcHBlbmRDaGlsZChnKX19fSxfYWRkT3BFeHBhbnNpb25MaXN0ZW5lcjpmdW5jdGlvbihhLGMpe2EuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCgpPT57dmFyIGQ9dGYuZ3JhcGgucmVuZGVyLmV4cGFuZFVudGlsTm9kZUlzU2hvd24odGhpcy5yZW5kZXJIaWVyYXJjaHksCmMpLGYsZz1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJ0Zi1ncmFwaC1pbmZvI2dyYXBoLWluZm8iKTtnJiYoZj1nLnNjcm9sbEhlaWdodC1nLnNjcm9sbFRvcCk7dmFyIGw9dGhpcy5zZWxlY3RlZE5vZGU7dGhpcy5zZXQoInNlbGVjdGVkTm9kZSIsZCk7ZD0oKT0+e2cuc2Nyb2xsVG9wPWcuc2Nyb2xsSGVpZ2h0LWZ9O2cmJihsP2QoKTp3aW5kb3cuc2V0VGltZW91dChkLDIwKSl9KX19KX0pKCk7Cjwvc2NyaXB0Pgo8L2RvbS1tb2R1bGU+CgoKCgoKCgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vaXJvbi1zY3JvbGwtdGFyZ2V0LWJlaGF2aW9yL2lyb24tc2Nyb2xsLXRhcmdldC1iZWhhdmlvci5odG1sLmpzClBvbHltZXIuSXJvblNjcm9sbFRhcmdldEJlaGF2aW9yPXtwcm9wZXJ0aWVzOntzY3JvbGxUYXJnZXQ6e3R5cGU6SFRNTEVsZW1lbnQsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGVmYXVsdFNjcm9sbFRhcmdldH19fSxvYnNlcnZlcnM6WyJfc2Nyb2xsVGFyZ2V0Q2hhbmdlZChzY3JvbGxUYXJnZXQsIGlzQXR0YWNoZWQpIl0sX3Nob3VsZEhhdmVMaXN0ZW5lcjohMCxfc2Nyb2xsVGFyZ2V0Q2hhbmdlZDpmdW5jdGlvbihhLGMpe3RoaXMuX29sZFNjcm9sbFRhcmdldCYmKHRoaXMuX3RvZ2dsZVNjcm9sbExpc3RlbmVyKCExLHRoaXMuX29sZFNjcm9sbFRhcmdldCksdGhpcy5fb2xkU2Nyb2xsVGFyZ2V0PW51bGwpO2MmJigiZG9jdW1lbnQiPT09YT90aGlzLnNjcm9sbFRhcmdldD10aGlzLl9kb2M6InN0cmluZyI9PT10eXBlb2YgYT90aGlzLnNjcm9sbFRhcmdldD0oYz10aGlzLmRvbUhvc3QpJiZjLiQ/Yy4kW2FdOlBvbHltZXIuZG9tKHRoaXMub3duZXJEb2N1bWVudCkucXVlcnlTZWxlY3RvcigiIyIrCmEpOnRoaXMuX2lzVmFsaWRTY3JvbGxUYXJnZXQoKSYmKHRoaXMuX29sZFNjcm9sbFRhcmdldD1hLHRoaXMuX3RvZ2dsZVNjcm9sbExpc3RlbmVyKHRoaXMuX3Nob3VsZEhhdmVMaXN0ZW5lcixhKSkpfSxfc2Nyb2xsSGFuZGxlcjpmdW5jdGlvbigpe30sZ2V0IF9kZWZhdWx0U2Nyb2xsVGFyZ2V0KCl7cmV0dXJuIHRoaXMuX2RvY30sZ2V0IF9kb2MoKXtyZXR1cm4gdGhpcy5vd25lckRvY3VtZW50LmRvY3VtZW50RWxlbWVudH0sZ2V0IF9zY3JvbGxUb3AoKXtyZXR1cm4gdGhpcy5faXNWYWxpZFNjcm9sbFRhcmdldCgpP3RoaXMuc2Nyb2xsVGFyZ2V0PT09dGhpcy5fZG9jP3dpbmRvdy5wYWdlWU9mZnNldDp0aGlzLnNjcm9sbFRhcmdldC5zY3JvbGxUb3A6MH0sZ2V0IF9zY3JvbGxMZWZ0KCl7cmV0dXJuIHRoaXMuX2lzVmFsaWRTY3JvbGxUYXJnZXQoKT90aGlzLnNjcm9sbFRhcmdldD09PXRoaXMuX2RvYz93aW5kb3cucGFnZVhPZmZzZXQ6dGhpcy5zY3JvbGxUYXJnZXQuc2Nyb2xsTGVmdDoKMH0sc2V0IF9zY3JvbGxUb3AoYSl7dGhpcy5zY3JvbGxUYXJnZXQ9PT10aGlzLl9kb2M/d2luZG93LnNjcm9sbFRvKHdpbmRvdy5wYWdlWE9mZnNldCxhKTp0aGlzLl9pc1ZhbGlkU2Nyb2xsVGFyZ2V0KCkmJih0aGlzLnNjcm9sbFRhcmdldC5zY3JvbGxUb3A9YSl9LHNldCBfc2Nyb2xsTGVmdChhKXt0aGlzLnNjcm9sbFRhcmdldD09PXRoaXMuX2RvYz93aW5kb3cuc2Nyb2xsVG8oYSx3aW5kb3cucGFnZVlPZmZzZXQpOnRoaXMuX2lzVmFsaWRTY3JvbGxUYXJnZXQoKSYmKHRoaXMuc2Nyb2xsVGFyZ2V0LnNjcm9sbExlZnQ9YSl9LHNjcm9sbDpmdW5jdGlvbihhLGMpe3RoaXMuc2Nyb2xsVGFyZ2V0PT09dGhpcy5fZG9jP3dpbmRvdy5zY3JvbGxUbyhhLGMpOnRoaXMuX2lzVmFsaWRTY3JvbGxUYXJnZXQoKSYmKHRoaXMuc2Nyb2xsVGFyZ2V0LnNjcm9sbExlZnQ9YSx0aGlzLnNjcm9sbFRhcmdldC5zY3JvbGxUb3A9Yyl9LGdldCBfc2Nyb2xsVGFyZ2V0V2lkdGgoKXtyZXR1cm4gdGhpcy5faXNWYWxpZFNjcm9sbFRhcmdldCgpPwp0aGlzLnNjcm9sbFRhcmdldD09PXRoaXMuX2RvYz93aW5kb3cuaW5uZXJXaWR0aDp0aGlzLnNjcm9sbFRhcmdldC5vZmZzZXRXaWR0aDowfSxnZXQgX3Njcm9sbFRhcmdldEhlaWdodCgpe3JldHVybiB0aGlzLl9pc1ZhbGlkU2Nyb2xsVGFyZ2V0KCk/dGhpcy5zY3JvbGxUYXJnZXQ9PT10aGlzLl9kb2M/d2luZG93LmlubmVySGVpZ2h0OnRoaXMuc2Nyb2xsVGFyZ2V0Lm9mZnNldEhlaWdodDowfSxfaXNWYWxpZFNjcm9sbFRhcmdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNjcm9sbFRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50fSxfdG9nZ2xlU2Nyb2xsTGlzdGVuZXI6ZnVuY3Rpb24oYSxjKXtjPWM9PT10aGlzLl9kb2M/d2luZG93OmM7YT90aGlzLl9ib3VuZFNjcm9sbEhhbmRsZXJ8fCh0aGlzLl9ib3VuZFNjcm9sbEhhbmRsZXI9dGhpcy5fc2Nyb2xsSGFuZGxlci5iaW5kKHRoaXMpLGMuYWRkRXZlbnRMaXN0ZW5lcigic2Nyb2xsIix0aGlzLl9ib3VuZFNjcm9sbEhhbmRsZXIpKToKdGhpcy5fYm91bmRTY3JvbGxIYW5kbGVyJiYoYy5yZW1vdmVFdmVudExpc3RlbmVyKCJzY3JvbGwiLHRoaXMuX2JvdW5kU2Nyb2xsSGFuZGxlciksdGhpcy5fYm91bmRTY3JvbGxIYW5kbGVyPW51bGwpfSx0b2dnbGVTY3JvbGxMaXN0ZW5lcjpmdW5jdGlvbihhKXt0aGlzLl9zaG91bGRIYXZlTGlzdGVuZXI9YTt0aGlzLl90b2dnbGVTY3JvbGxMaXN0ZW5lcihhLHRoaXMuc2Nyb2xsVGFyZ2V0KX19Owo8L3NjcmlwdD4KCgoKCjxkb20tbW9kdWxlIGlkPSJpcm9uLWxpc3QiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CgogICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kICgtd2Via2l0LW1heC1kZXZpY2UtcGl4ZWwtcmF0aW86IDEpIHsKICAgICAgICA6aG9zdCB7CiAgICAgICAgICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtOwogICAgICAgIH0KICAgICAgfQoKICAgICAgI2l0ZW1zIHsKICAgICAgICBAYXBwbHkgLS1pcm9uLWxpc3QtaXRlbXMtY29udGFpbmVyOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfQoKICAgICAgOmhvc3QoOm5vdChbZ3JpZF0pKSAjaXRlbXMgPiA6OnNsb3R0ZWQoKikgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAjaXRlbXMgPiA6OnNsb3R0ZWQoKikgewogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgd2lsbC1jaGFuZ2U6IHRyYW5zZm9ybTsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8YXJyYXktc2VsZWN0b3IgaWQ9InNlbGVjdG9yIiBpdGVtcz0ie3tpdGVtc319IiBzZWxlY3RlZD0ie3tzZWxlY3RlZEl0ZW1zfX0iIHNlbGVjdGVkLWl0ZW09Int7c2VsZWN0ZWRJdGVtfX0iPjwvYXJyYXktc2VsZWN0b3I+CgogICAgPGRpdiBpZD0iaXRlbXMiPgogICAgICA8c2xvdD48L3Nsb3Q+CiAgICA8L2Rpdj4KCiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPgoKPHNjcmlwdD4vL35+V0VCUEFUSH5+L2lyb24tbGlzdC9pcm9uLWxpc3QuaHRtbC5qcwooZnVuY3Rpb24oKXt2YXIgYT1uYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9pUCg/OmhvbmV8YWQ7KD86IFU7KT8gQ1BVKSBPUyAoXGQrKS8pLGM9YSYmODw9YVsxXSxkPW51bGwhPVBvbHltZXIuZmx1c2gsZj1kP1BvbHltZXIuQXN5bmMuYW5pbWF0aW9uRnJhbWU6MCxnPWQ/UG9seW1lci5Bc3luYy5pZGxlUGVyaW9kOjEsbD1kP1BvbHltZXIuQXN5bmMubWljcm9UYXNrOjI7UG9seW1lci5PcHRpb25hbE11dGFibGVEYXRhQmVoYXZpb3J8fChQb2x5bWVyLk9wdGlvbmFsTXV0YWJsZURhdGFCZWhhdmlvcj17fSk7UG9seW1lcih7aXM6Imlyb24tbGlzdCIscHJvcGVydGllczp7aXRlbXM6e3R5cGU6QXJyYXl9LGFzOnt0eXBlOlN0cmluZyx2YWx1ZToiaXRlbSJ9LGluZGV4QXM6e3R5cGU6U3RyaW5nLHZhbHVlOiJpbmRleCJ9LHNlbGVjdGVkQXM6e3R5cGU6U3RyaW5nLHZhbHVlOiJzZWxlY3RlZCJ9LGdyaWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxyZWZsZWN0VG9BdHRyaWJ1dGU6ITAsCm9ic2VydmVyOiJfZ3JpZENoYW5nZWQifSxzZWxlY3Rpb25FbmFibGVkOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LHNlbGVjdGVkSXRlbTp7dHlwZTpPYmplY3Qsbm90aWZ5OiEwfSxzZWxlY3RlZEl0ZW1zOnt0eXBlOk9iamVjdCxub3RpZnk6ITB9LG11bHRpU2VsZWN0aW9uOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LHNjcm9sbE9mZnNldDp7dHlwZTpOdW1iZXIsdmFsdWU6MH19LG9ic2VydmVyczpbIl9pdGVtc0NoYW5nZWQoaXRlbXMuKikiLCJfc2VsZWN0aW9uRW5hYmxlZENoYW5nZWQoc2VsZWN0aW9uRW5hYmxlZCkiLCJfbXVsdGlTZWxlY3Rpb25DaGFuZ2VkKG11bHRpU2VsZWN0aW9uKSIsIl9zZXRPdmVyZmxvdyhzY3JvbGxUYXJnZXQsIHNjcm9sbE9mZnNldCkiXSxiZWhhdmlvcnM6W1BvbHltZXIuVGVtcGxhdGl6ZXIsUG9seW1lci5Jcm9uUmVzaXphYmxlQmVoYXZpb3IsUG9seW1lci5Jcm9uU2Nyb2xsVGFyZ2V0QmVoYXZpb3IsUG9seW1lci5PcHRpb25hbE11dGFibGVEYXRhQmVoYXZpb3JdLApfcmF0aW86LjUsX3Njcm9sbGVyUGFkZGluZ1RvcDowLF9zY3JvbGxQb3NpdGlvbjowLF9waHlzaWNhbFNpemU6MCxfcGh5c2ljYWxBdmVyYWdlOjAsX3BoeXNpY2FsQXZlcmFnZUNvdW50OjAsX3BoeXNpY2FsVG9wOjAsX3ZpcnR1YWxDb3VudDowLF9lc3RTY3JvbGxIZWlnaHQ6MCxfc2Nyb2xsSGVpZ2h0OjAsX3ZpZXdwb3J0SGVpZ2h0OjAsX3ZpZXdwb3J0V2lkdGg6MCxfcGh5c2ljYWxJdGVtczpudWxsLF9waHlzaWNhbFNpemVzOm51bGwsX2ZpcnN0VmlzaWJsZUluZGV4VmFsOm51bGwsX2NvbGxlY3Rpb246bnVsbCxfbGFzdFZpc2libGVJbmRleFZhbDpudWxsLF9tYXhQYWdlczoyLF9mb2N1c2VkSXRlbTpudWxsLF9mb2N1c2VkVmlydHVhbEluZGV4Oi0xLF9mb2N1c2VkUGh5c2ljYWxJbmRleDotMSxfb2Zmc2NyZWVuRm9jdXNlZEl0ZW06bnVsbCxfZm9jdXNCYWNrZmlsbEl0ZW06bnVsbCxfaXRlbXNQZXJSb3c6MSxfaXRlbVdpZHRoOjAsX3Jvd0hlaWdodDowLF90ZW1wbGF0ZUNvc3Q6MCwKX3BhcmVudE1vZGVsOiEwLGdldCBfcGh5c2ljYWxCb3R0b20oKXtyZXR1cm4gdGhpcy5fcGh5c2ljYWxUb3ArdGhpcy5fcGh5c2ljYWxTaXplfSxnZXQgX3Njcm9sbEJvdHRvbSgpe3JldHVybiB0aGlzLl9zY3JvbGxQb3NpdGlvbit0aGlzLl92aWV3cG9ydEhlaWdodH0sZ2V0IF92aXJ0dWFsRW5kKCl7cmV0dXJuIHRoaXMuX3ZpcnR1YWxTdGFydCt0aGlzLl9waHlzaWNhbENvdW50LTF9LGdldCBfaGlkZGVuQ29udGVudFNpemUoKXtyZXR1cm4odGhpcy5ncmlkP3RoaXMuX3BoeXNpY2FsUm93cyp0aGlzLl9yb3dIZWlnaHQ6dGhpcy5fcGh5c2ljYWxTaXplKS10aGlzLl92aWV3cG9ydEhlaWdodH0sZ2V0IF9pdGVtc1BhcmVudCgpe3JldHVybiBQb2x5bWVyLmRvbShQb2x5bWVyLmRvbSh0aGlzLl91c2VyVGVtcGxhdGUpLnBhcmVudE5vZGUpfSxnZXQgX21heFNjcm9sbFRvcCgpe3JldHVybiB0aGlzLl9lc3RTY3JvbGxIZWlnaHQtdGhpcy5fdmlld3BvcnRIZWlnaHQrdGhpcy5fc2Nyb2xsT2Zmc2V0fSwKZ2V0IF9tYXhWaXJ0dWFsU3RhcnQoKXt2YXIgaz10aGlzLl9jb252ZXJ0SW5kZXhUb0NvbXBsZXRlUm93KHRoaXMuX3ZpcnR1YWxDb3VudCk7cmV0dXJuIE1hdGgubWF4KDAsay10aGlzLl9waHlzaWNhbENvdW50KX0sc2V0IF92aXJ0dWFsU3RhcnQoayl7az10aGlzLl9jbGFtcChrLDAsdGhpcy5fbWF4VmlydHVhbFN0YXJ0KTt0aGlzLmdyaWQmJihrLT1rJXRoaXMuX2l0ZW1zUGVyUm93KTt0aGlzLl92aXJ0dWFsU3RhcnRWYWw9a30sZ2V0IF92aXJ0dWFsU3RhcnQoKXtyZXR1cm4gdGhpcy5fdmlydHVhbFN0YXJ0VmFsfHwwfSxzZXQgX3BoeXNpY2FsU3RhcnQoayl7ayU9dGhpcy5fcGh5c2ljYWxDb3VudDswPmsmJihrPXRoaXMuX3BoeXNpY2FsQ291bnQrayk7dGhpcy5ncmlkJiYoay09ayV0aGlzLl9pdGVtc1BlclJvdyk7dGhpcy5fcGh5c2ljYWxTdGFydFZhbD1rfSxnZXQgX3BoeXNpY2FsU3RhcnQoKXtyZXR1cm4gdGhpcy5fcGh5c2ljYWxTdGFydFZhbHx8MH0sZ2V0IF9waHlzaWNhbEVuZCgpe3JldHVybih0aGlzLl9waHlzaWNhbFN0YXJ0Kwp0aGlzLl9waHlzaWNhbENvdW50LTEpJXRoaXMuX3BoeXNpY2FsQ291bnR9LHNldCBfcGh5c2ljYWxDb3VudChrKXt0aGlzLl9waHlzaWNhbENvdW50VmFsPWt9LGdldCBfcGh5c2ljYWxDb3VudCgpe3JldHVybiB0aGlzLl9waHlzaWNhbENvdW50VmFsfHwwfSxnZXQgX29wdFBoeXNpY2FsU2l6ZSgpe3JldHVybiAwPT09dGhpcy5fdmlld3BvcnRIZWlnaHQ/SW5maW5pdHk6dGhpcy5fdmlld3BvcnRIZWlnaHQqdGhpcy5fbWF4UGFnZXN9LGdldCBfaXNWaXNpYmxlKCl7cmV0dXJuISghdGhpcy5vZmZzZXRXaWR0aCYmIXRoaXMub2Zmc2V0SGVpZ2h0KX0sZ2V0IGZpcnN0VmlzaWJsZUluZGV4KCl7dmFyIGs9dGhpcy5fZmlyc3RWaXNpYmxlSW5kZXhWYWw7aWYobnVsbD09ayl7dmFyIG09dGhpcy5fcGh5c2ljYWxUb3ArdGhpcy5fc2Nyb2xsT2Zmc2V0O3RoaXMuX2ZpcnN0VmlzaWJsZUluZGV4VmFsPWs9dGhpcy5faXRlcmF0ZUl0ZW1zKGZ1bmN0aW9uKHAscSl7bSs9dGhpcy5fZ2V0UGh5c2ljYWxTaXplSW5jcmVtZW50KHApOwppZihtPnRoaXMuX3Njcm9sbFBvc2l0aW9uKXJldHVybiB0aGlzLmdyaWQ/cS1xJXRoaXMuX2l0ZW1zUGVyUm93OnE7aWYodGhpcy5ncmlkJiZ0aGlzLl92aXJ0dWFsQ291bnQtMT09PXEpcmV0dXJuIHEtcSV0aGlzLl9pdGVtc1BlclJvd30pfHwwfXJldHVybiBrfSxnZXQgbGFzdFZpc2libGVJbmRleCgpe3ZhciBrPXRoaXMuX2xhc3RWaXNpYmxlSW5kZXhWYWw7aWYobnVsbD09ayl7aWYodGhpcy5ncmlkKWs9TWF0aC5taW4odGhpcy5fdmlydHVhbENvdW50LHRoaXMuZmlyc3RWaXNpYmxlSW5kZXgrdGhpcy5fZXN0Um93c0luVmlldyp0aGlzLl9pdGVtc1BlclJvdy0xKTtlbHNle3ZhciBtPXRoaXMuX3BoeXNpY2FsVG9wK3RoaXMuX3Njcm9sbE9mZnNldDt0aGlzLl9pdGVyYXRlSXRlbXMoZnVuY3Rpb24ocCxxKXttPHRoaXMuX3Njcm9sbEJvdHRvbSYmKGs9cSk7bSs9dGhpcy5fZ2V0UGh5c2ljYWxTaXplSW5jcmVtZW50KHApfSl9dGhpcy5fbGFzdFZpc2libGVJbmRleFZhbD1rfXJldHVybiBrfSwKZ2V0IF9kZWZhdWx0U2Nyb2xsVGFyZ2V0KCl7cmV0dXJuIHRoaXN9LGdldCBfdmlydHVhbFJvd0NvdW50KCl7cmV0dXJuIE1hdGguY2VpbCh0aGlzLl92aXJ0dWFsQ291bnQvdGhpcy5faXRlbXNQZXJSb3cpfSxnZXQgX2VzdFJvd3NJblZpZXcoKXtyZXR1cm4gTWF0aC5jZWlsKHRoaXMuX3ZpZXdwb3J0SGVpZ2h0L3RoaXMuX3Jvd0hlaWdodCl9LGdldCBfcGh5c2ljYWxSb3dzKCl7cmV0dXJuIE1hdGguY2VpbCh0aGlzLl9waHlzaWNhbENvdW50L3RoaXMuX2l0ZW1zUGVyUm93KX0sZ2V0IF9zY3JvbGxPZmZzZXQoKXtyZXR1cm4gdGhpcy5fc2Nyb2xsZXJQYWRkaW5nVG9wK3RoaXMuc2Nyb2xsT2Zmc2V0fSxyZWFkeTpmdW5jdGlvbigpe3RoaXMuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLHRoaXMuX2RpZEZvY3VzLmJpbmQodGhpcyksITApfSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX2RlYm91bmNlKCJfcmVuZGVyIix0aGlzLl9yZW5kZXIsZik7dGhpcy5saXN0ZW4odGhpcywiaXJvbi1yZXNpemUiLAoiX3Jlc2l6ZUhhbmRsZXIiKTt0aGlzLmxpc3Rlbih0aGlzLCJrZXlkb3duIiwiX2tleWRvd25IYW5kbGVyIil9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy51bmxpc3Rlbih0aGlzLCJpcm9uLXJlc2l6ZSIsIl9yZXNpemVIYW5kbGVyIik7dGhpcy51bmxpc3Rlbih0aGlzLCJrZXlkb3duIiwiX2tleWRvd25IYW5kbGVyIil9LF9zZXRPdmVyZmxvdzpmdW5jdGlvbihrKXt0aGlzLnN0eWxlLndlYmtpdE92ZXJmbG93U2Nyb2xsaW5nPWs9PT10aGlzPyJ0b3VjaCI6IiI7dGhpcy5zdHlsZS5vdmVyZmxvd1k9az09PXRoaXM/ImF1dG8iOiIiO3RoaXMuX2ZpcnN0VmlzaWJsZUluZGV4VmFsPXRoaXMuX2xhc3RWaXNpYmxlSW5kZXhWYWw9bnVsbDt0aGlzLl9kZWJvdW5jZSgiX3JlbmRlciIsdGhpcy5fcmVuZGVyLGYpfSx1cGRhdGVWaWV3cG9ydEJvdW5kYXJpZXM6ZnVuY3Rpb24oKXt2YXIgaz13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzKTt0aGlzLl9zY3JvbGxlclBhZGRpbmdUb3A9CnRoaXMuc2Nyb2xsVGFyZ2V0PT09dGhpcz8wOnBhcnNlSW50KGtbInBhZGRpbmctdG9wIl0sMTApO3RoaXMuX2lzUlRMPSJydGwiPT09ay5kaXJlY3Rpb247dGhpcy5fdmlld3BvcnRXaWR0aD10aGlzLiQuaXRlbXMub2Zmc2V0V2lkdGg7dGhpcy5fdmlld3BvcnRIZWlnaHQ9dGhpcy5fc2Nyb2xsVGFyZ2V0SGVpZ2h0O3RoaXMuZ3JpZCYmdGhpcy5fdXBkYXRlR3JpZE1ldHJpY3MoKX0sX3Njcm9sbEhhbmRsZXI6ZnVuY3Rpb24oKXt2YXIgaz1NYXRoLm1heCgwLE1hdGgubWluKHRoaXMuX21heFNjcm9sbFRvcCx0aGlzLl9zY3JvbGxUb3ApKSxtPWstdGhpcy5fc2Nyb2xsUG9zaXRpb24scD0wPD1tO3RoaXMuX3Njcm9sbFBvc2l0aW9uPWs7dGhpcy5fbGFzdFZpc2libGVJbmRleFZhbD10aGlzLl9maXJzdFZpc2libGVJbmRleFZhbD1udWxsO01hdGguYWJzKG0pPnRoaXMuX3BoeXNpY2FsU2l6ZSYmMDx0aGlzLl9waHlzaWNhbFNpemU/KG0tPXRoaXMuX3Njcm9sbE9mZnNldCxwPU1hdGgucm91bmQobS8KdGhpcy5fcGh5c2ljYWxBdmVyYWdlKSp0aGlzLl9pdGVtc1BlclJvdyx0aGlzLl92aXJ0dWFsU3RhcnQrPXAsdGhpcy5fcGh5c2ljYWxTdGFydCs9cCx0aGlzLl9waHlzaWNhbFRvcD1NYXRoLmZsb29yKHRoaXMuX3ZpcnR1YWxTdGFydC90aGlzLl9pdGVtc1BlclJvdykqdGhpcy5fcGh5c2ljYWxBdmVyYWdlLHRoaXMuX3VwZGF0ZSgpKTowPHRoaXMuX3BoeXNpY2FsQ291bnQmJihrPXRoaXMuX2dldFJldXNhYmxlcyhwKSxwPyh0aGlzLl9waHlzaWNhbFRvcD1rLnBoeXNpY2FsVG9wLHRoaXMuX3ZpcnR1YWxTdGFydCs9ay5pbmRleGVzLmxlbmd0aCx0aGlzLl9waHlzaWNhbFN0YXJ0Kz1rLmluZGV4ZXMubGVuZ3RoKToodGhpcy5fdmlydHVhbFN0YXJ0LT1rLmluZGV4ZXMubGVuZ3RoLHRoaXMuX3BoeXNpY2FsU3RhcnQtPWsuaW5kZXhlcy5sZW5ndGgpLHRoaXMuX3VwZGF0ZShrLmluZGV4ZXMscD9udWxsOmsuaW5kZXhlcyksdGhpcy5fZGVib3VuY2UoIl9pbmNyZWFzZVBvb2xJZk5lZWRlZCIsCnRoaXMuX2luY3JlYXNlUG9vbElmTmVlZGVkLmJpbmQodGhpcywwKSxsKSl9LF9nZXRSZXVzYWJsZXM6ZnVuY3Rpb24oayl7dmFyIG09W10scD10aGlzLl9oaWRkZW5Db250ZW50U2l6ZSp0aGlzLl9yYXRpbyxxPXRoaXMuX3ZpcnR1YWxTdGFydCxyPXRoaXMuX3ZpcnR1YWxFbmQsdD10aGlzLl9waHlzaWNhbENvdW50LHY9dGhpcy5fcGh5c2ljYWxUb3ArdGhpcy5fc2Nyb2xsT2Zmc2V0O3ZhciBBPXRoaXMuX3BoeXNpY2FsQm90dG9tK3RoaXMuX3Njcm9sbE9mZnNldDt2YXIgeT10aGlzLl9zY3JvbGxUb3AseD10aGlzLl9zY3JvbGxCb3R0b207aWYoayl7dmFyIEM9dGhpcy5fcGh5c2ljYWxTdGFydDtBPXktdn1lbHNlIEM9dGhpcy5fcGh5c2ljYWxFbmQsQS09eDtmb3IoOzspe3ZhciBGPXRoaXMuX2dldFBoeXNpY2FsU2l6ZUluY3JlbWVudChDKTtBLT1GO2lmKG0ubGVuZ3RoPj10fHxBPD1wKWJyZWFrO2lmKGspe2lmKHIrbS5sZW5ndGgrMT49dGhpcy5fdmlydHVhbENvdW50KWJyZWFrOwppZih2K0Y+PXktdGhpcy5fc2Nyb2xsT2Zmc2V0KWJyZWFrO20ucHVzaChDKTt2Kz1GO0M9KEMrMSkldH1lbHNle2lmKDA+PXEtbS5sZW5ndGgpYnJlYWs7aWYodit0aGlzLl9waHlzaWNhbFNpemUtRjw9eClicmVhazttLnB1c2goQyk7di09RjtDPTA9PT1DP3QtMTpDLTF9fXJldHVybntpbmRleGVzOm0scGh5c2ljYWxUb3A6di10aGlzLl9zY3JvbGxPZmZzZXR9fSxfdXBkYXRlOmZ1bmN0aW9uKGssbSl7aWYoIShrJiYwPT09ay5sZW5ndGh8fDA9PT10aGlzLl9waHlzaWNhbENvdW50KSl7dGhpcy5fbWFuYWdlRm9jdXMoKTt0aGlzLl9hc3NpZ25Nb2RlbHMoayk7dGhpcy5fdXBkYXRlTWV0cmljcyhrKTtpZihtKWZvcig7bS5sZW5ndGg7KWs9bS5wb3AoKSx0aGlzLl9waHlzaWNhbFRvcC09dGhpcy5fZ2V0UGh5c2ljYWxTaXplSW5jcmVtZW50KGspO3RoaXMuX3Bvc2l0aW9uSXRlbXMoKTt0aGlzLl91cGRhdGVTY3JvbGxlclNpemUoKX19LF9jcmVhdGVQb29sOmZ1bmN0aW9uKGspe3RoaXMuX2Vuc3VyZVRlbXBsYXRpemVkKCk7CnZhciBtLHA9QXJyYXkoayk7Zm9yKG09MDttPGs7bSsrKXt2YXIgcT10aGlzLnN0YW1wKG51bGwpO3BbbV09cS5yb290LnF1ZXJ5U2VsZWN0b3IoIioiKTt0aGlzLl9pdGVtc1BhcmVudC5hcHBlbmRDaGlsZChxLnJvb3QpfXJldHVybiBwfSxfaXNDbGllbnRGdWxsOmZ1bmN0aW9uKCl7cmV0dXJuIDAhPXRoaXMuX3Njcm9sbEJvdHRvbSYmdGhpcy5fcGh5c2ljYWxCb3R0b20tMT49dGhpcy5fc2Nyb2xsQm90dG9tJiZ0aGlzLl9waHlzaWNhbFRvcDw9dGhpcy5fc2Nyb2xsUG9zaXRpb259LF9pbmNyZWFzZVBvb2xJZk5lZWRlZDpmdW5jdGlvbihrKXtrPXRoaXMuX2NsYW1wKHRoaXMuX3BoeXNpY2FsQ291bnQraywzLHRoaXMuX3ZpcnR1YWxDb3VudC10aGlzLl92aXJ0dWFsU3RhcnQpO2s9dGhpcy5fY29udmVydEluZGV4VG9Db21wbGV0ZVJvdyhrKTtpZih0aGlzLmdyaWQpe3ZhciBtPWsldGhpcy5faXRlbXNQZXJSb3c7bSYmay1tPD10aGlzLl9waHlzaWNhbENvdW50JiYoays9dGhpcy5faXRlbXNQZXJSb3cpOwprLT1tfWstPXRoaXMuX3BoeXNpY2FsQ291bnQ7bT1NYXRoLnJvdW5kKC41KnRoaXMuX3BoeXNpY2FsQ291bnQpO2lmKCEoMD5rKSl7aWYoMDxrKXttPXdpbmRvdy5wZXJmb3JtYW5jZS5ub3coKTtbXS5wdXNoLmFwcGx5KHRoaXMuX3BoeXNpY2FsSXRlbXMsdGhpcy5fY3JlYXRlUG9vbChrKSk7Zm9yKHZhciBwPTA7cDxrO3ArKyl0aGlzLl9waHlzaWNhbFNpemVzLnB1c2goMCk7dGhpcy5fcGh5c2ljYWxDb3VudCs9azt0aGlzLl9waHlzaWNhbFN0YXJ0PnRoaXMuX3BoeXNpY2FsRW5kJiZ0aGlzLl9pc0luZGV4UmVuZGVyZWQodGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleCkmJnRoaXMuX2dldFBoeXNpY2FsSW5kZXgodGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleCk8dGhpcy5fcGh5c2ljYWxFbmQmJih0aGlzLl9waHlzaWNhbFN0YXJ0Kz1rKTt0aGlzLl91cGRhdGUoKTt0aGlzLl90ZW1wbGF0ZUNvc3Q9KHdpbmRvdy5wZXJmb3JtYW5jZS5ub3coKS1tKS9rO209TWF0aC5yb3VuZCguNSoKdGhpcy5fcGh5c2ljYWxDb3VudCl9dGhpcy5fdmlydHVhbEVuZD49dGhpcy5fdmlydHVhbENvdW50LTF8fDA9PT1tfHwodGhpcy5faXNDbGllbnRGdWxsKCk/dGhpcy5fcGh5c2ljYWxTaXplPHRoaXMuX29wdFBoeXNpY2FsU2l6ZSYmdGhpcy5fZGVib3VuY2UoIl9pbmNyZWFzZVBvb2xJZk5lZWRlZCIsdGhpcy5faW5jcmVhc2VQb29sSWZOZWVkZWQuYmluZCh0aGlzLHRoaXMuX2NsYW1wKE1hdGgucm91bmQoNTAvdGhpcy5fdGVtcGxhdGVDb3N0KSwxLG0pKSxnKTp0aGlzLl9kZWJvdW5jZSgiX2luY3JlYXNlUG9vbElmTmVlZGVkIix0aGlzLl9pbmNyZWFzZVBvb2xJZk5lZWRlZC5iaW5kKHRoaXMsbSksbCkpfX0sX3JlbmRlcjpmdW5jdGlvbigpe2lmKHRoaXMuaXNBdHRhY2hlZCYmdGhpcy5faXNWaXNpYmxlKWlmKDAhPT10aGlzLl9waHlzaWNhbENvdW50KXt2YXIgaz10aGlzLl9nZXRSZXVzYWJsZXMoITApO3RoaXMuX3BoeXNpY2FsVG9wPWsucGh5c2ljYWxUb3A7dGhpcy5fdmlydHVhbFN0YXJ0Kz0Kay5pbmRleGVzLmxlbmd0aDt0aGlzLl9waHlzaWNhbFN0YXJ0Kz1rLmluZGV4ZXMubGVuZ3RoO3RoaXMuX3VwZGF0ZShrLmluZGV4ZXMpO3RoaXMuX3VwZGF0ZSgpO3RoaXMuX2luY3JlYXNlUG9vbElmTmVlZGVkKDApfWVsc2UgMDx0aGlzLl92aXJ0dWFsQ291bnQmJih0aGlzLnVwZGF0ZVZpZXdwb3J0Qm91bmRhcmllcygpLHRoaXMuX2luY3JlYXNlUG9vbElmTmVlZGVkKDMpKX0sX2Vuc3VyZVRlbXBsYXRpemVkOmZ1bmN0aW9uKCl7aWYoIXRoaXMuY3Rvcil7KHRoaXMuX3VzZXJUZW1wbGF0ZT10aGlzLnF1ZXJ5RWZmZWN0aXZlQ2hpbGRyZW4oInRlbXBsYXRlIikpfHxjb25zb2xlLndhcm4oImlyb24tbGlzdCByZXF1aXJlcyBhIHRlbXBsYXRlIHRvIGJlIHByb3ZpZGVkIGluIGxpZ2h0LWRvbSIpO3ZhciBrPXtfX2tleV9fOiEwfTtrW3RoaXMuYXNdPSEwO2tbdGhpcy5pbmRleEFzXT0hMDtrW3RoaXMuc2VsZWN0ZWRBc109ITA7ay50YWJJbmRleD0hMDt0aGlzLl9pbnN0YW5jZVByb3BzPQprO3RoaXMudGVtcGxhdGl6ZSh0aGlzLl91c2VyVGVtcGxhdGUsdGhpcy5tdXRhYmxlRGF0YSl9fSxfZ3JpZENoYW5nZWQ6ZnVuY3Rpb24oayxtKXsidW5kZWZpbmVkIiE9PXR5cGVvZiBtJiYodGhpcy5ub3RpZnlSZXNpemUoKSxQb2x5bWVyLmZsdXNoP1BvbHltZXIuZmx1c2goKTpQb2x5bWVyLmRvbS5mbHVzaCgpLGsmJnRoaXMuX3VwZGF0ZUdyaWRNZXRyaWNzKCkpfSxfaXRlbXNDaGFuZ2VkOmZ1bmN0aW9uKGspe2lmKCJpdGVtcyI9PT1rLnBhdGgpdGhpcy5fcGh5c2ljYWxUb3A9dGhpcy5fdmlydHVhbFN0YXJ0PTAsdGhpcy5fdmlydHVhbENvdW50PXRoaXMuaXRlbXM/dGhpcy5pdGVtcy5sZW5ndGg6MCx0aGlzLl9jb2xsZWN0aW9uPXRoaXMuaXRlbXMmJlBvbHltZXIuQ29sbGVjdGlvbj9Qb2x5bWVyLkNvbGxlY3Rpb24uZ2V0KHRoaXMuaXRlbXMpOm51bGwsdGhpcy5fcGh5c2ljYWxJbmRleEZvcktleT17fSx0aGlzLl9sYXN0VmlzaWJsZUluZGV4VmFsPXRoaXMuX2ZpcnN0VmlzaWJsZUluZGV4VmFsPQpudWxsLHRoaXMuX3BoeXNpY2FsQ291bnQ9dGhpcy5fcGh5c2ljYWxDb3VudHx8MCx0aGlzLl9waHlzaWNhbEl0ZW1zPXRoaXMuX3BoeXNpY2FsSXRlbXN8fFtdLHRoaXMuX3BoeXNpY2FsU2l6ZXM9dGhpcy5fcGh5c2ljYWxTaXplc3x8W10sdGhpcy5fcGh5c2ljYWxTdGFydD0wLHRoaXMuX3Njcm9sbFRvcD50aGlzLl9zY3JvbGxPZmZzZXQmJnRoaXMuX3Jlc2V0U2Nyb2xsUG9zaXRpb24oMCksdGhpcy5fcmVtb3ZlRm9jdXNlZEl0ZW0oKSx0aGlzLl9kZWJvdW5jZSgiX3JlbmRlciIsdGhpcy5fcmVuZGVyLGYpO2Vsc2UgaWYoIml0ZW1zLnNwbGljZXMiPT09ay5wYXRoKXt0aGlzLl9hZGp1c3RWaXJ0dWFsSW5kZXgoay52YWx1ZS5pbmRleFNwbGljZXMpO3RoaXMuX3ZpcnR1YWxDb3VudD10aGlzLml0ZW1zP3RoaXMuaXRlbXMubGVuZ3RoOjA7aWYoay52YWx1ZS5pbmRleFNwbGljZXMuc29tZShmdW5jdGlvbihwKXtyZXR1cm4gMDxwLmFkZGVkQ291bnR8fDA8cC5yZW1vdmVkLmxlbmd0aH0pKXt2YXIgbT0KdGhpcy5fZ2V0QWN0aXZlRWxlbWVudCgpO3RoaXMuY29udGFpbnMobSkmJm0uYmx1cigpfWs9ay52YWx1ZS5pbmRleFNwbGljZXMuc29tZShmdW5jdGlvbihwKXtyZXR1cm4gcC5pbmRleCtwLmFkZGVkQ291bnQ+PXRoaXMuX3ZpcnR1YWxTdGFydCYmcC5pbmRleDw9dGhpcy5fdmlydHVhbEVuZH0sdGhpcyk7dGhpcy5faXNDbGllbnRGdWxsKCkmJiFrfHx0aGlzLl9kZWJvdW5jZSgiX3JlbmRlciIsdGhpcy5fcmVuZGVyLGYpfWVsc2UiaXRlbXMubGVuZ3RoIiE9PWsucGF0aCYmdGhpcy5fZm9yd2FyZEl0ZW1QYXRoKGsucGF0aCxrLnZhbHVlKX0sX2ZvcndhcmRJdGVtUGF0aDpmdW5jdGlvbihrLG0pe2s9ay5zbGljZSg2KTt2YXIgcD1rLmluZGV4T2YoIi4iKTstMT09PXAmJihwPWsubGVuZ3RoKTt2YXIgcSxyPXRoaXMubW9kZWxGb3JFbGVtZW50KHRoaXMuX29mZnNjcmVlbkZvY3VzZWRJdGVtKTtpZihkKXt2YXIgdD1wYXJzZUludChrLnN1YnN0cmluZygwLHApLDEwKTtpZihxPXRoaXMuX2lzSW5kZXhSZW5kZXJlZCh0KSl7dmFyIHY9CnRoaXMuX2dldFBoeXNpY2FsSW5kZXgodCk7dmFyIEE9dGhpcy5tb2RlbEZvckVsZW1lbnQodGhpcy5fcGh5c2ljYWxJdGVtc1t2XSl9ZWxzZSByJiYoQT1yKTtpZighQXx8QVt0aGlzLmluZGV4QXNdIT09dClyZXR1cm59ZWxzZSBpZih0PWsuc3Vic3RyaW5nKDAscCksciYmci5fX2tleV9fPT09dClBPXI7ZWxzZSBpZih2PXRoaXMuX3BoeXNpY2FsSW5kZXhGb3JLZXlbdF0sQT10aGlzLm1vZGVsRm9yRWxlbWVudCh0aGlzLl9waHlzaWNhbEl0ZW1zW3ZdKSwhQXx8QS5fX2tleV9fIT09dClyZXR1cm47az1rLnN1YnN0cmluZyhwKzEpO2s9dGhpcy5hcysoaz8iLiIrazoiIik7ZD9BLl9zZXRQZW5kaW5nUHJvcGVydHlPclBhdGgoayxtLCExLCEwKTpBLm5vdGlmeVBhdGgoayxtLCEwKTtBLl9mbHVzaFByb3BlcnRpZXMmJkEuX2ZsdXNoUHJvcGVydGllcyghMCk7cSYmKHRoaXMuX3VwZGF0ZU1ldHJpY3MoW3ZdKSx0aGlzLl9wb3NpdGlvbkl0ZW1zKCksdGhpcy5fdXBkYXRlU2Nyb2xsZXJTaXplKCkpfSwKX2FkanVzdFZpcnR1YWxJbmRleDpmdW5jdGlvbihrKXtrLmZvckVhY2goZnVuY3Rpb24obSl7bS5yZW1vdmVkLmZvckVhY2godGhpcy5fcmVtb3ZlSXRlbSx0aGlzKTttLmluZGV4PHRoaXMuX3ZpcnR1YWxTdGFydCYmKG09TWF0aC5tYXgobS5hZGRlZENvdW50LW0ucmVtb3ZlZC5sZW5ndGgsbS5pbmRleC10aGlzLl92aXJ0dWFsU3RhcnQpLHRoaXMuX3ZpcnR1YWxTdGFydCs9bSwwPD10aGlzLl9mb2N1c2VkVmlydHVhbEluZGV4JiYodGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleCs9bSkpfSx0aGlzKX0sX3JlbW92ZUl0ZW06ZnVuY3Rpb24oayl7dGhpcy4kLnNlbGVjdG9yLmRlc2VsZWN0KGspO3RoaXMuX2ZvY3VzZWRJdGVtJiZ0aGlzLm1vZGVsRm9yRWxlbWVudCh0aGlzLl9mb2N1c2VkSXRlbSlbdGhpcy5hc109PT1rJiZ0aGlzLl9yZW1vdmVGb2N1c2VkSXRlbSgpfSxfaXRlcmF0ZUl0ZW1zOmZ1bmN0aW9uKGssbSl7dmFyIHAscTtpZigyPT09YXJndW1lbnRzLmxlbmd0aCYmbSlmb3IocT0KMDtxPG0ubGVuZ3RoO3ErKyl7dmFyIHI9bVtxXTt2YXIgdD10aGlzLl9jb21wdXRlVmlkeChyKTtpZihudWxsIT0ocD1rLmNhbGwodGhpcyxyLHQpKSlyZXR1cm4gcH1lbHNle3I9dGhpcy5fcGh5c2ljYWxTdGFydDtmb3IodD10aGlzLl92aXJ0dWFsU3RhcnQ7cjx0aGlzLl9waHlzaWNhbENvdW50O3IrKyx0KyspaWYobnVsbCE9KHA9ay5jYWxsKHRoaXMscix0KSkpcmV0dXJuIHA7Zm9yKHI9MDtyPHRoaXMuX3BoeXNpY2FsU3RhcnQ7cisrLHQrKylpZihudWxsIT0ocD1rLmNhbGwodGhpcyxyLHQpKSlyZXR1cm4gcH19LF9jb21wdXRlVmlkeDpmdW5jdGlvbihrKXtyZXR1cm4gaz49dGhpcy5fcGh5c2ljYWxTdGFydD90aGlzLl92aXJ0dWFsU3RhcnQrKGstdGhpcy5fcGh5c2ljYWxTdGFydCk6dGhpcy5fdmlydHVhbFN0YXJ0Kyh0aGlzLl9waHlzaWNhbENvdW50LXRoaXMuX3BoeXNpY2FsU3RhcnQpK2t9LF9hc3NpZ25Nb2RlbHM6ZnVuY3Rpb24oayl7dGhpcy5faXRlcmF0ZUl0ZW1zKGZ1bmN0aW9uKG0sCnApe3ZhciBxPXRoaXMuX3BoeXNpY2FsSXRlbXNbbV0scj10aGlzLml0ZW1zJiZ0aGlzLml0ZW1zW3BdO2lmKG51bGwhPXIpe3ZhciB0PXRoaXMubW9kZWxGb3JFbGVtZW50KHEpO3QuX19rZXlfXz10aGlzLl9jb2xsZWN0aW9uP3RoaXMuX2NvbGxlY3Rpb24uZ2V0S2V5KHIpOm51bGw7dGhpcy5fZm9yd2FyZFByb3BlcnR5KHQsdGhpcy5hcyxyKTt0aGlzLl9mb3J3YXJkUHJvcGVydHkodCx0aGlzLnNlbGVjdGVkQXMsdGhpcy4kLnNlbGVjdG9yLmlzU2VsZWN0ZWQocikpO3RoaXMuX2ZvcndhcmRQcm9wZXJ0eSh0LHRoaXMuaW5kZXhBcyxwKTt0aGlzLl9mb3J3YXJkUHJvcGVydHkodCwidGFiSW5kZXgiLHRoaXMuX2ZvY3VzZWRWaXJ0dWFsSW5kZXg9PT1wPzA6LTEpO3RoaXMuX3BoeXNpY2FsSW5kZXhGb3JLZXlbdC5fX2tleV9fXT1tO3QuX2ZsdXNoUHJvcGVydGllcyYmdC5fZmx1c2hQcm9wZXJ0aWVzKCEwKTtxLnJlbW92ZUF0dHJpYnV0ZSgiaGlkZGVuIil9ZWxzZSBxLnNldEF0dHJpYnV0ZSgiaGlkZGVuIiwKIiIpfSxrKX0sX3VwZGF0ZU1ldHJpY3M6ZnVuY3Rpb24oayl7UG9seW1lci5mbHVzaD9Qb2x5bWVyLmZsdXNoKCk6UG9seW1lci5kb20uZmx1c2goKTt2YXIgbT0wLHA9MCxxPXRoaXMuX3BoeXNpY2FsQXZlcmFnZUNvdW50LHI9dGhpcy5fcGh5c2ljYWxBdmVyYWdlO3RoaXMuX2l0ZXJhdGVJdGVtcyhmdW5jdGlvbih0KXtwKz10aGlzLl9waHlzaWNhbFNpemVzW3RdO3RoaXMuX3BoeXNpY2FsU2l6ZXNbdF09dGhpcy5fcGh5c2ljYWxJdGVtc1t0XS5vZmZzZXRIZWlnaHQ7bSs9dGhpcy5fcGh5c2ljYWxTaXplc1t0XTt0aGlzLl9waHlzaWNhbEF2ZXJhZ2VDb3VudCs9dGhpcy5fcGh5c2ljYWxTaXplc1t0XT8xOjB9LGspO3RoaXMuZ3JpZD8odGhpcy5fdXBkYXRlR3JpZE1ldHJpY3MoKSx0aGlzLl9waHlzaWNhbFNpemU9TWF0aC5jZWlsKHRoaXMuX3BoeXNpY2FsQ291bnQvdGhpcy5faXRlbXNQZXJSb3cpKnRoaXMuX3Jvd0hlaWdodCk6KHA9MT09PXRoaXMuX2l0ZW1zUGVyUm93P3A6Ck1hdGguY2VpbCh0aGlzLl9waHlzaWNhbENvdW50L3RoaXMuX2l0ZW1zUGVyUm93KSp0aGlzLl9yb3dIZWlnaHQsdGhpcy5fcGh5c2ljYWxTaXplPXRoaXMuX3BoeXNpY2FsU2l6ZSttLXAsdGhpcy5faXRlbXNQZXJSb3c9MSk7dGhpcy5fcGh5c2ljYWxBdmVyYWdlQ291bnQhPT1xJiYodGhpcy5fcGh5c2ljYWxBdmVyYWdlPU1hdGgucm91bmQoKHIqcSttKS90aGlzLl9waHlzaWNhbEF2ZXJhZ2VDb3VudCkpfSxfdXBkYXRlR3JpZE1ldHJpY3M6ZnVuY3Rpb24oKXt0aGlzLl9pdGVtV2lkdGg9MDx0aGlzLl9waHlzaWNhbENvdW50P3RoaXMuX3BoeXNpY2FsSXRlbXNbMF0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg6MjAwO3RoaXMuX3Jvd0hlaWdodD0wPHRoaXMuX3BoeXNpY2FsQ291bnQ/dGhpcy5fcGh5c2ljYWxJdGVtc1swXS5vZmZzZXRIZWlnaHQ6MjAwO3RoaXMuX2l0ZW1zUGVyUm93PXRoaXMuX2l0ZW1XaWR0aD9NYXRoLmZsb29yKHRoaXMuX3ZpZXdwb3J0V2lkdGgvdGhpcy5faXRlbVdpZHRoKToKdGhpcy5faXRlbXNQZXJSb3d9LF9wb3NpdGlvbkl0ZW1zOmZ1bmN0aW9uKCl7dGhpcy5fYWRqdXN0U2Nyb2xsUG9zaXRpb24oKTt2YXIgaz10aGlzLl9waHlzaWNhbFRvcDtpZih0aGlzLmdyaWQpe3ZhciBtPSh0aGlzLl92aWV3cG9ydFdpZHRoLXRoaXMuX2l0ZW1zUGVyUm93KnRoaXMuX2l0ZW1XaWR0aCkvMjt0aGlzLl9pdGVyYXRlSXRlbXMoZnVuY3Rpb24ocCxxKXt2YXIgcj1NYXRoLmZsb29yKHEldGhpcy5faXRlbXNQZXJSb3cqdGhpcy5faXRlbVdpZHRoK20pO3RoaXMuX2lzUlRMJiYocio9LTEpO3RoaXMudHJhbnNsYXRlM2QocisicHgiLGsrInB4IiwwLHRoaXMuX3BoeXNpY2FsSXRlbXNbcF0pO3RoaXMuX3Nob3VsZFJlbmRlck5leHRSb3cocSkmJihrKz10aGlzLl9yb3dIZWlnaHQpfSl9ZWxzZSB0aGlzLl9pdGVyYXRlSXRlbXMoZnVuY3Rpb24ocCl7dGhpcy50cmFuc2xhdGUzZCgwLGsrInB4IiwwLHRoaXMuX3BoeXNpY2FsSXRlbXNbcF0pO2srPXRoaXMuX3BoeXNpY2FsU2l6ZXNbcF19KX0sCl9nZXRQaHlzaWNhbFNpemVJbmNyZW1lbnQ6ZnVuY3Rpb24oayl7cmV0dXJuIHRoaXMuZ3JpZD90aGlzLl9jb21wdXRlVmlkeChrKSV0aGlzLl9pdGVtc1BlclJvdyE9PXRoaXMuX2l0ZW1zUGVyUm93LTE/MDp0aGlzLl9yb3dIZWlnaHQ6dGhpcy5fcGh5c2ljYWxTaXplc1trXX0sX3Nob3VsZFJlbmRlck5leHRSb3c6ZnVuY3Rpb24oayl7cmV0dXJuIGsldGhpcy5faXRlbXNQZXJSb3c9PT10aGlzLl9pdGVtc1BlclJvdy0xfSxfYWRqdXN0U2Nyb2xsUG9zaXRpb246ZnVuY3Rpb24oKXt2YXIgaz0wPT09dGhpcy5fdmlydHVhbFN0YXJ0P3RoaXMuX3BoeXNpY2FsVG9wOk1hdGgubWluKHRoaXMuX3Njcm9sbFBvc2l0aW9uK3RoaXMuX3BoeXNpY2FsVG9wLDApO2lmKDAhPT1rKXt0aGlzLl9waHlzaWNhbFRvcC09azt2YXIgbT10aGlzLl9zY3JvbGxUb3A7IWMmJjA8bSYmdGhpcy5fcmVzZXRTY3JvbGxQb3NpdGlvbihtLWspfX0sX3Jlc2V0U2Nyb2xsUG9zaXRpb246ZnVuY3Rpb24oayl7dGhpcy5zY3JvbGxUYXJnZXQmJgowPD1rJiYodGhpcy5fc2Nyb2xsUG9zaXRpb249dGhpcy5fc2Nyb2xsVG9wPWspfSxfdXBkYXRlU2Nyb2xsZXJTaXplOmZ1bmN0aW9uKGspe3RoaXMuX2VzdFNjcm9sbEhlaWdodD10aGlzLmdyaWQ/dGhpcy5fdmlydHVhbFJvd0NvdW50KnRoaXMuX3Jvd0hlaWdodDp0aGlzLl9waHlzaWNhbEJvdHRvbStNYXRoLm1heCh0aGlzLl92aXJ0dWFsQ291bnQtdGhpcy5fcGh5c2ljYWxDb3VudC10aGlzLl92aXJ0dWFsU3RhcnQsMCkqdGhpcy5fcGh5c2ljYWxBdmVyYWdlO2lmKChrPShrPShrPWt8fDA9PT10aGlzLl9zY3JvbGxIZWlnaHQpfHx0aGlzLl9zY3JvbGxQb3NpdGlvbj49dGhpcy5fZXN0U2Nyb2xsSGVpZ2h0LXRoaXMuX3BoeXNpY2FsU2l6ZSl8fHRoaXMuZ3JpZCYmdGhpcy4kLml0ZW1zLnN0eWxlLmhlaWdodDx0aGlzLl9lc3RTY3JvbGxIZWlnaHQpfHxNYXRoLmFicyh0aGlzLl9lc3RTY3JvbGxIZWlnaHQtdGhpcy5fc2Nyb2xsSGVpZ2h0KT49dGhpcy5fdmlld3BvcnRIZWlnaHQpdGhpcy4kLml0ZW1zLnN0eWxlLmhlaWdodD0KdGhpcy5fZXN0U2Nyb2xsSGVpZ2h0KyJweCIsdGhpcy5fc2Nyb2xsSGVpZ2h0PXRoaXMuX2VzdFNjcm9sbEhlaWdodH0sc2Nyb2xsVG9JdGVtOmZ1bmN0aW9uKGspe3JldHVybiB0aGlzLnNjcm9sbFRvSW5kZXgodGhpcy5pdGVtcy5pbmRleE9mKGspKX0sc2Nyb2xsVG9JbmRleDpmdW5jdGlvbihrKXtpZighKCJudW1iZXIiIT09dHlwZW9mIGt8fDA+a3x8az50aGlzLml0ZW1zLmxlbmd0aC0xKSYmKFBvbHltZXIuZmx1c2g/UG9seW1lci5mbHVzaCgpOlBvbHltZXIuZG9tLmZsdXNoKCksMCE9PXRoaXMuX3BoeXNpY2FsQ291bnQpKXtrPXRoaXMuX2NsYW1wKGssMCx0aGlzLl92aXJ0dWFsQ291bnQtMSk7aWYoIXRoaXMuX2lzSW5kZXhSZW5kZXJlZChrKXx8az49dGhpcy5fbWF4VmlydHVhbFN0YXJ0KXRoaXMuX3ZpcnR1YWxTdGFydD10aGlzLmdyaWQ/ay0yKnRoaXMuX2l0ZW1zUGVyUm93OmstMTt0aGlzLl9tYW5hZ2VGb2N1cygpO3RoaXMuX2Fzc2lnbk1vZGVscygpO3RoaXMuX3VwZGF0ZU1ldHJpY3MoKTsKdGhpcy5fcGh5c2ljYWxUb3A9TWF0aC5mbG9vcih0aGlzLl92aXJ0dWFsU3RhcnQvdGhpcy5faXRlbXNQZXJSb3cpKnRoaXMuX3BoeXNpY2FsQXZlcmFnZTtmb3IodmFyIG09dGhpcy5fcGh5c2ljYWxTdGFydCxwPXRoaXMuX3ZpcnR1YWxTdGFydCxxPTAscj10aGlzLl9oaWRkZW5Db250ZW50U2l6ZTtwPGsmJnE8PXI7KXErPXRoaXMuX2dldFBoeXNpY2FsU2l6ZUluY3JlbWVudChtKSxtPShtKzEpJXRoaXMuX3BoeXNpY2FsQ291bnQscCsrO3RoaXMuX3VwZGF0ZVNjcm9sbGVyU2l6ZSghMCk7dGhpcy5fcG9zaXRpb25JdGVtcygpO3RoaXMuX3Jlc2V0U2Nyb2xsUG9zaXRpb24odGhpcy5fcGh5c2ljYWxUb3ArdGhpcy5fc2Nyb2xsT2Zmc2V0K3EpO3RoaXMuX2luY3JlYXNlUG9vbElmTmVlZGVkKDApO3RoaXMuX2xhc3RWaXNpYmxlSW5kZXhWYWw9dGhpcy5fZmlyc3RWaXNpYmxlSW5kZXhWYWw9bnVsbH19LF9yZXNldEF2ZXJhZ2U6ZnVuY3Rpb24oKXt0aGlzLl9waHlzaWNhbEF2ZXJhZ2VDb3VudD0KdGhpcy5fcGh5c2ljYWxBdmVyYWdlPTB9LF9yZXNpemVIYW5kbGVyOmZ1bmN0aW9uKCl7dGhpcy5fZGVib3VuY2UoIl9yZW5kZXIiLGZ1bmN0aW9uKCl7dGhpcy5fbGFzdFZpc2libGVJbmRleFZhbD10aGlzLl9maXJzdFZpc2libGVJbmRleFZhbD1udWxsO3RoaXMudXBkYXRlVmlld3BvcnRCb3VuZGFyaWVzKCk7dGhpcy5faXNWaXNpYmxlPyh0aGlzLnRvZ2dsZVNjcm9sbExpc3RlbmVyKCEwKSx0aGlzLl9yZXNldEF2ZXJhZ2UoKSx0aGlzLl9yZW5kZXIoKSk6dGhpcy50b2dnbGVTY3JvbGxMaXN0ZW5lcighMSl9LGYpfSxzZWxlY3RJdGVtOmZ1bmN0aW9uKGspe3JldHVybiB0aGlzLnNlbGVjdEluZGV4KHRoaXMuaXRlbXMuaW5kZXhPZihrKSl9LHNlbGVjdEluZGV4OmZ1bmN0aW9uKGspe2lmKCEoMD5rfHxrPj10aGlzLl92aXJ0dWFsQ291bnQpKXshdGhpcy5tdWx0aVNlbGVjdGlvbiYmdGhpcy5zZWxlY3RlZEl0ZW0mJnRoaXMuY2xlYXJTZWxlY3Rpb24oKTtpZih0aGlzLl9pc0luZGV4UmVuZGVyZWQoaykpe3ZhciBtPQp0aGlzLm1vZGVsRm9yRWxlbWVudCh0aGlzLl9waHlzaWNhbEl0ZW1zW3RoaXMuX2dldFBoeXNpY2FsSW5kZXgoayldKTttJiYobVt0aGlzLnNlbGVjdGVkQXNdPSEwKTt0aGlzLnVwZGF0ZVNpemVGb3JJbmRleChrKX10aGlzLiQuc2VsZWN0b3Iuc2VsZWN0SW5kZXg/dGhpcy4kLnNlbGVjdG9yLnNlbGVjdEluZGV4KGspOnRoaXMuJC5zZWxlY3Rvci5zZWxlY3QodGhpcy5pdGVtc1trXSl9fSxkZXNlbGVjdEl0ZW06ZnVuY3Rpb24oayl7cmV0dXJuIHRoaXMuZGVzZWxlY3RJbmRleCh0aGlzLml0ZW1zLmluZGV4T2YoaykpfSxkZXNlbGVjdEluZGV4OmZ1bmN0aW9uKGspezA+a3x8az49dGhpcy5fdmlydHVhbENvdW50fHwodGhpcy5faXNJbmRleFJlbmRlcmVkKGspJiYodGhpcy5tb2RlbEZvckVsZW1lbnQodGhpcy5fcGh5c2ljYWxJdGVtc1t0aGlzLl9nZXRQaHlzaWNhbEluZGV4KGspXSlbdGhpcy5zZWxlY3RlZEFzXT0hMSx0aGlzLnVwZGF0ZVNpemVGb3JJbmRleChrKSksdGhpcy4kLnNlbGVjdG9yLmRlc2VsZWN0SW5kZXg/CnRoaXMuJC5zZWxlY3Rvci5kZXNlbGVjdEluZGV4KGspOnRoaXMuJC5zZWxlY3Rvci5kZXNlbGVjdCh0aGlzLml0ZW1zW2tdKSl9LHRvZ2dsZVNlbGVjdGlvbkZvckl0ZW06ZnVuY3Rpb24oayl7cmV0dXJuIHRoaXMudG9nZ2xlU2VsZWN0aW9uRm9ySW5kZXgodGhpcy5pdGVtcy5pbmRleE9mKGspKX0sdG9nZ2xlU2VsZWN0aW9uRm9ySW5kZXg6ZnVuY3Rpb24oayl7KHRoaXMuJC5zZWxlY3Rvci5pc0luZGV4U2VsZWN0ZWQ/dGhpcy4kLnNlbGVjdG9yLmlzSW5kZXhTZWxlY3RlZChrKTp0aGlzLiQuc2VsZWN0b3IuaXNTZWxlY3RlZCh0aGlzLml0ZW1zW2tdKSk/dGhpcy5kZXNlbGVjdEluZGV4KGspOnRoaXMuc2VsZWN0SW5kZXgoayl9LGNsZWFyU2VsZWN0aW9uOmZ1bmN0aW9uKCl7dGhpcy5faXRlcmF0ZUl0ZW1zKGZ1bmN0aW9uKGspe3RoaXMubW9kZWxGb3JFbGVtZW50KHRoaXMuX3BoeXNpY2FsSXRlbXNba10pW3RoaXMuc2VsZWN0ZWRBc109ITF9KTt0aGlzLiQuc2VsZWN0b3IuY2xlYXJTZWxlY3Rpb24oKX0sCl9zZWxlY3Rpb25FbmFibGVkQ2hhbmdlZDpmdW5jdGlvbihrKXsoaz90aGlzLmxpc3Rlbjp0aGlzLnVubGlzdGVuKS5jYWxsKHRoaXMsdGhpcywidGFwIiwiX3NlbGVjdGlvbkhhbmRsZXIiKX0sX3NlbGVjdGlvbkhhbmRsZXI6ZnVuY3Rpb24oayl7dmFyIG09dGhpcy5tb2RlbEZvckVsZW1lbnQoay50YXJnZXQpO2lmKG0pe3ZhciBwPVBvbHltZXIuZG9tKGspLnBhdGhbMF07az10aGlzLl9nZXRBY3RpdmVFbGVtZW50KCk7dmFyIHE9dGhpcy5fcGh5c2ljYWxJdGVtc1t0aGlzLl9nZXRQaHlzaWNhbEluZGV4KG1bdGhpcy5pbmRleEFzXSldO2lmKCJpbnB1dCIhPT1wLmxvY2FsTmFtZSYmImJ1dHRvbiIhPT1wLmxvY2FsTmFtZSYmInNlbGVjdCIhPT1wLmxvY2FsTmFtZSl7cD1tLnRhYkluZGV4O20udGFiSW5kZXg9LTEwMDt2YXIgcj1rP2sudGFiSW5kZXg6LTE7bS50YWJJbmRleD1wO2smJnEhPT1rJiZxLmNvbnRhaW5zKGspJiYtMTAwIT09cnx8dGhpcy50b2dnbGVTZWxlY3Rpb25Gb3JJdGVtKG1bdGhpcy5hc10pfX19LApfbXVsdGlTZWxlY3Rpb25DaGFuZ2VkOmZ1bmN0aW9uKGspe3RoaXMuY2xlYXJTZWxlY3Rpb24oKTt0aGlzLiQuc2VsZWN0b3IubXVsdGk9a30sdXBkYXRlU2l6ZUZvckl0ZW06ZnVuY3Rpb24oayl7cmV0dXJuIHRoaXMudXBkYXRlU2l6ZUZvckluZGV4KHRoaXMuaXRlbXMuaW5kZXhPZihrKSl9LHVwZGF0ZVNpemVGb3JJbmRleDpmdW5jdGlvbihrKXtpZighdGhpcy5faXNJbmRleFJlbmRlcmVkKGspKXJldHVybiBudWxsO3RoaXMuX3VwZGF0ZU1ldHJpY3MoW3RoaXMuX2dldFBoeXNpY2FsSW5kZXgoayldKTt0aGlzLl9wb3NpdGlvbkl0ZW1zKCk7cmV0dXJuIG51bGx9LF9tYW5hZ2VGb2N1czpmdW5jdGlvbigpe3ZhciBrPXRoaXMuX2ZvY3VzZWRWaXJ0dWFsSW5kZXg7MDw9ayYmazx0aGlzLl92aXJ0dWFsQ291bnQ/dGhpcy5faXNJbmRleFJlbmRlcmVkKGspP3RoaXMuX3Jlc3RvcmVGb2N1c2VkSXRlbSgpOnRoaXMuX2NyZWF0ZUZvY3VzQmFja2ZpbGxJdGVtKCk6MDx0aGlzLl92aXJ0dWFsQ291bnQmJgowPHRoaXMuX3BoeXNpY2FsQ291bnQmJih0aGlzLl9mb2N1c2VkUGh5c2ljYWxJbmRleD10aGlzLl9waHlzaWNhbFN0YXJ0LHRoaXMuX2ZvY3VzZWRWaXJ0dWFsSW5kZXg9dGhpcy5fdmlydHVhbFN0YXJ0LHRoaXMuX2ZvY3VzZWRJdGVtPXRoaXMuX3BoeXNpY2FsSXRlbXNbdGhpcy5fcGh5c2ljYWxTdGFydF0pfSxfY29udmVydEluZGV4VG9Db21wbGV0ZVJvdzpmdW5jdGlvbihrKXt0aGlzLl9pdGVtc1BlclJvdz10aGlzLl9pdGVtc1BlclJvd3x8MTtyZXR1cm4gdGhpcy5ncmlkP01hdGguY2VpbChrL3RoaXMuX2l0ZW1zUGVyUm93KSp0aGlzLl9pdGVtc1BlclJvdzprfSxfaXNJbmRleFJlbmRlcmVkOmZ1bmN0aW9uKGspe3JldHVybiBrPj10aGlzLl92aXJ0dWFsU3RhcnQmJms8PXRoaXMuX3ZpcnR1YWxFbmR9LF9pc0luZGV4VmlzaWJsZTpmdW5jdGlvbihrKXtyZXR1cm4gaz49dGhpcy5maXJzdFZpc2libGVJbmRleCYmazw9dGhpcy5sYXN0VmlzaWJsZUluZGV4fSxfZ2V0UGh5c2ljYWxJbmRleDpmdW5jdGlvbihrKXtyZXR1cm4gZD8KKHRoaXMuX3BoeXNpY2FsU3RhcnQrKGstdGhpcy5fdmlydHVhbFN0YXJ0KSkldGhpcy5fcGh5c2ljYWxDb3VudDp0aGlzLl9waHlzaWNhbEluZGV4Rm9yS2V5W3RoaXMuX2NvbGxlY3Rpb24uZ2V0S2V5KHRoaXMuaXRlbXNba10pXX0sZm9jdXNJdGVtOmZ1bmN0aW9uKGspe3RoaXMuX2ZvY3VzUGh5c2ljYWxJdGVtKGspfSxfZm9jdXNQaHlzaWNhbEl0ZW06ZnVuY3Rpb24oayl7aWYoISgwPmt8fGs+PXRoaXMuX3ZpcnR1YWxDb3VudCkpe3RoaXMuX3Jlc3RvcmVGb2N1c2VkSXRlbSgpO3RoaXMuX2lzSW5kZXhSZW5kZXJlZChrKXx8dGhpcy5zY3JvbGxUb0luZGV4KGspO3ZhciBtPXRoaXMuX3BoeXNpY2FsSXRlbXNbdGhpcy5fZ2V0UGh5c2ljYWxJbmRleChrKV0scD10aGlzLm1vZGVsRm9yRWxlbWVudChtKSxxO3AudGFiSW5kZXg9LTEwMDstMTAwPT09bS50YWJJbmRleCYmKHE9bSk7cXx8KHE9UG9seW1lci5kb20obSkucXVlcnlTZWxlY3RvcignW3RhYmluZGV4XHgzZCItMTAwIl0nKSk7CnAudGFiSW5kZXg9MDt0aGlzLl9mb2N1c2VkVmlydHVhbEluZGV4PWs7cSYmcS5mb2N1cygpfX0sX3JlbW92ZUZvY3VzZWRJdGVtOmZ1bmN0aW9uKCl7dGhpcy5fb2Zmc2NyZWVuRm9jdXNlZEl0ZW0mJnRoaXMuX2l0ZW1zUGFyZW50LnJlbW92ZUNoaWxkKHRoaXMuX29mZnNjcmVlbkZvY3VzZWRJdGVtKTt0aGlzLl9mb2N1c2VkSXRlbT10aGlzLl9mb2N1c0JhY2tmaWxsSXRlbT10aGlzLl9vZmZzY3JlZW5Gb2N1c2VkSXRlbT1udWxsO3RoaXMuX2ZvY3VzZWRQaHlzaWNhbEluZGV4PXRoaXMuX2ZvY3VzZWRWaXJ0dWFsSW5kZXg9LTF9LF9jcmVhdGVGb2N1c0JhY2tmaWxsSXRlbTpmdW5jdGlvbigpe3ZhciBrPXRoaXMuX2ZvY3VzZWRQaHlzaWNhbEluZGV4O2lmKCEodGhpcy5fb2Zmc2NyZWVuRm9jdXNlZEl0ZW18fDA+dGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleCkpe2lmKCF0aGlzLl9mb2N1c0JhY2tmaWxsSXRlbSl7dmFyIG09dGhpcy5zdGFtcChudWxsKTt0aGlzLl9mb2N1c0JhY2tmaWxsSXRlbT0KbS5yb290LnF1ZXJ5U2VsZWN0b3IoIioiKTt0aGlzLl9pdGVtc1BhcmVudC5hcHBlbmRDaGlsZChtLnJvb3QpfXRoaXMuX29mZnNjcmVlbkZvY3VzZWRJdGVtPXRoaXMuX3BoeXNpY2FsSXRlbXNba107dGhpcy5tb2RlbEZvckVsZW1lbnQodGhpcy5fb2Zmc2NyZWVuRm9jdXNlZEl0ZW0pLnRhYkluZGV4PTA7dGhpcy5fcGh5c2ljYWxJdGVtc1trXT10aGlzLl9mb2N1c0JhY2tmaWxsSXRlbTt0aGlzLl9mb2N1c2VkUGh5c2ljYWxJbmRleD1rO3RoaXMudHJhbnNsYXRlM2QoMCwiLTEwMDAwcHgiLDAsdGhpcy5fb2Zmc2NyZWVuRm9jdXNlZEl0ZW0pfX0sX3Jlc3RvcmVGb2N1c2VkSXRlbTpmdW5jdGlvbigpe2lmKHRoaXMuX29mZnNjcmVlbkZvY3VzZWRJdGVtJiYhKDA+dGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleCkpe3RoaXMuX2Fzc2lnbk1vZGVscygpO3ZhciBrPXRoaXMuX2ZvY3VzZWRQaHlzaWNhbEluZGV4PXRoaXMuX2dldFBoeXNpY2FsSW5kZXgodGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleCksCm09dGhpcy5fcGh5c2ljYWxJdGVtc1trXTtpZihtKXt2YXIgcD10aGlzLm1vZGVsRm9yRWxlbWVudChtKSxxPXRoaXMubW9kZWxGb3JFbGVtZW50KHRoaXMuX29mZnNjcmVlbkZvY3VzZWRJdGVtKTtwW3RoaXMuYXNdPT09cVt0aGlzLmFzXT8odGhpcy5fZm9jdXNCYWNrZmlsbEl0ZW09bSxwLnRhYkluZGV4PS0xLHRoaXMuX3BoeXNpY2FsSXRlbXNba109dGhpcy5fb2Zmc2NyZWVuRm9jdXNlZEl0ZW0sdGhpcy50cmFuc2xhdGUzZCgwLCItMTAwMDBweCIsMCx0aGlzLl9mb2N1c0JhY2tmaWxsSXRlbSkpOih0aGlzLl9yZW1vdmVGb2N1c2VkSXRlbSgpLHRoaXMuX2ZvY3VzQmFja2ZpbGxJdGVtPW51bGwpO3RoaXMuX29mZnNjcmVlbkZvY3VzZWRJdGVtPW51bGx9fX0sX2RpZEZvY3VzOmZ1bmN0aW9uKGspe2s9dGhpcy5tb2RlbEZvckVsZW1lbnQoay50YXJnZXQpO3ZhciBtPXRoaXMubW9kZWxGb3JFbGVtZW50KHRoaXMuX2ZvY3VzZWRJdGVtKSxwPW51bGwhPT10aGlzLl9vZmZzY3JlZW5Gb2N1c2VkSXRlbSwKcT10aGlzLl9mb2N1c2VkVmlydHVhbEluZGV4O2smJihtPT09az90aGlzLl9pc0luZGV4VmlzaWJsZShxKXx8dGhpcy5zY3JvbGxUb0luZGV4KHEpOih0aGlzLl9yZXN0b3JlRm9jdXNlZEl0ZW0oKSxtJiYobS50YWJJbmRleD0tMSksay50YWJJbmRleD0wLHRoaXMuX2ZvY3VzZWRWaXJ0dWFsSW5kZXg9cT1rW3RoaXMuaW5kZXhBc10sdGhpcy5fZm9jdXNlZFBoeXNpY2FsSW5kZXg9dGhpcy5fZ2V0UGh5c2ljYWxJbmRleChxKSx0aGlzLl9mb2N1c2VkSXRlbT10aGlzLl9waHlzaWNhbEl0ZW1zW3RoaXMuX2ZvY3VzZWRQaHlzaWNhbEluZGV4XSxwJiYhdGhpcy5fb2Zmc2NyZWVuRm9jdXNlZEl0ZW0mJnRoaXMuX3VwZGF0ZSgpKSl9LF9rZXlkb3duSGFuZGxlcjpmdW5jdGlvbihrKXtzd2l0Y2goay5rZXlDb2RlKXtjYXNlIDQwOnRoaXMuX2ZvY3VzZWRWaXJ0dWFsSW5kZXg8dGhpcy5fdmlydHVhbENvdW50LTEmJmsucHJldmVudERlZmF1bHQoKTt0aGlzLl9mb2N1c1BoeXNpY2FsSXRlbSh0aGlzLl9mb2N1c2VkVmlydHVhbEluZGV4KwoodGhpcy5ncmlkP3RoaXMuX2l0ZW1zUGVyUm93OjEpKTticmVhaztjYXNlIDM5OnRoaXMuZ3JpZCYmdGhpcy5fZm9jdXNQaHlzaWNhbEl0ZW0odGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleCsodGhpcy5faXNSVEw/LTE6MSkpO2JyZWFrO2Nhc2UgMzg6MDx0aGlzLl9mb2N1c2VkVmlydHVhbEluZGV4JiZrLnByZXZlbnREZWZhdWx0KCk7dGhpcy5fZm9jdXNQaHlzaWNhbEl0ZW0odGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleC0odGhpcy5ncmlkP3RoaXMuX2l0ZW1zUGVyUm93OjEpKTticmVhaztjYXNlIDM3OnRoaXMuZ3JpZCYmdGhpcy5fZm9jdXNQaHlzaWNhbEl0ZW0odGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleCsodGhpcy5faXNSVEw/MTotMSkpO2JyZWFrO2Nhc2UgMTM6dGhpcy5fZm9jdXNQaHlzaWNhbEl0ZW0odGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleCksdGhpcy5zZWxlY3Rpb25FbmFibGVkJiZ0aGlzLl9zZWxlY3Rpb25IYW5kbGVyKGspfX0sX2NsYW1wOmZ1bmN0aW9uKGssCm0scCl7cmV0dXJuIE1hdGgubWluKHAsTWF0aC5tYXgobSxrKSl9LF9kZWJvdW5jZTpmdW5jdGlvbihrLG0scCl7ZD8odGhpcy5fZGVib3VuY2Vycz10aGlzLl9kZWJvdW5jZXJzfHx7fSx0aGlzLl9kZWJvdW5jZXJzW2tdPVBvbHltZXIuRGVib3VuY2VyLmRlYm91bmNlKHRoaXMuX2RlYm91bmNlcnNba10scCxtLmJpbmQodGhpcykpLFBvbHltZXIuZW5xdWV1ZURlYm91bmNlcih0aGlzLl9kZWJvdW5jZXJzW2tdKSk6UG9seW1lci5kb20uYWRkRGVib3VuY2VyKHRoaXMuZGVib3VuY2UoayxtKSl9LF9mb3J3YXJkUHJvcGVydHk6ZnVuY3Rpb24oayxtLHApe2Q/ay5fc2V0UGVuZGluZ1Byb3BlcnR5KG0scCk6a1ttXT1wfSxfZm9yd2FyZEhvc3RQcm9wVjI6ZnVuY3Rpb24oayxtKXsodGhpcy5fcGh5c2ljYWxJdGVtc3x8W10pLmNvbmNhdChbdGhpcy5fb2Zmc2NyZWVuRm9jdXNlZEl0ZW0sdGhpcy5fZm9jdXNCYWNrZmlsbEl0ZW1dKS5mb3JFYWNoKGZ1bmN0aW9uKHApe3AmJnRoaXMubW9kZWxGb3JFbGVtZW50KHApLmZvcndhcmRIb3N0UHJvcChrLAptKX0sdGhpcyl9LF9ub3RpZnlJbnN0YW5jZVByb3BWMjpmdW5jdGlvbihrLG0scCl7UG9seW1lci5QYXRoLm1hdGNoZXModGhpcy5hcyxtKSYmKGs9a1t0aGlzLmluZGV4QXNdLG09PXRoaXMuYXMmJih0aGlzLml0ZW1zW2tdPXApLHRoaXMubm90aWZ5UGF0aChQb2x5bWVyLlBhdGgudHJhbnNsYXRlKHRoaXMuYXMsIml0ZW1zLiIrayxtKSxwKSl9LF9nZXRTdGFtcGVkQ2hpbGRyZW46ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcGh5c2ljYWxJdGVtc30sX2ZvcndhcmRJbnN0YW5jZVBhdGg6ZnVuY3Rpb24oayxtLHApezA9PT1tLmluZGV4T2YodGhpcy5hcysiLiIpJiZ0aGlzLm5vdGlmeVBhdGgoIml0ZW1zLiIray5fX2tleV9fKyIuIittLnNsaWNlKHRoaXMuYXMubGVuZ3RoKzEpLHApfSxfZm9yd2FyZFBhcmVudFBhdGg6ZnVuY3Rpb24oayxtKXsodGhpcy5fcGh5c2ljYWxJdGVtc3x8W10pLmNvbmNhdChbdGhpcy5fb2Zmc2NyZWVuRm9jdXNlZEl0ZW0sdGhpcy5fZm9jdXNCYWNrZmlsbEl0ZW1dKS5mb3JFYWNoKGZ1bmN0aW9uKHApe3AmJgp0aGlzLm1vZGVsRm9yRWxlbWVudChwKS5ub3RpZnlQYXRoKGssbSwhMCl9LHRoaXMpfSxfZm9yd2FyZFBhcmVudFByb3A6ZnVuY3Rpb24oayxtKXsodGhpcy5fcGh5c2ljYWxJdGVtc3x8W10pLmNvbmNhdChbdGhpcy5fb2Zmc2NyZWVuRm9jdXNlZEl0ZW0sdGhpcy5fZm9jdXNCYWNrZmlsbEl0ZW1dKS5mb3JFYWNoKGZ1bmN0aW9uKHApe3AmJih0aGlzLm1vZGVsRm9yRWxlbWVudChwKVtrXT1tKX0sdGhpcyl9LF9nZXRBY3RpdmVFbGVtZW50OmZ1bmN0aW9uKCl7dmFyIGs9dGhpcy5faXRlbXNQYXJlbnQubm9kZS5kb21Ib3N0O3JldHVybiBQb2x5bWVyLmRvbShrP2sucm9vdDpkb2N1bWVudCkuYWN0aXZlRWxlbWVudH19KX0pKCk7Cjwvc2NyaXB0PgoKCgoKCgoKCgoKCjxkb20tbW9kdWxlIGlkPSJwYXBlci1pdGVtLWJvZHkiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIG92ZXJmbG93OiBoaWRkZW47IC8qIG5lZWRlZCBmb3IgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXMgdG8gd29yayBvbiBmZiAqLwogICAgICAgIEBhcHBseSAtLWxheW91dC12ZXJ0aWNhbDsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtY2VudGVyLWp1c3RpZmllZDsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtZmxleDsKICAgICAgfQoKICAgICAgOmhvc3QoW3R3by1saW5lXSkgewogICAgICAgIG1pbi1oZWlnaHQ6IHZhcigtLXBhcGVyLWl0ZW0tYm9keS10d28tbGluZS1taW4taGVpZ2h0LCA3MnB4KTsKICAgICAgfQoKICAgICAgOmhvc3QoW3RocmVlLWxpbmVdKSB7CiAgICAgICAgbWluLWhlaWdodDogdmFyKC0tcGFwZXItaXRlbS1ib2R5LXRocmVlLWxpbmUtbWluLWhlaWdodCwgODhweCk7CiAgICAgIH0KCiAgICAgIDpob3N0ID4gOjpzbG90dGVkKCopIHsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgIH0KCiAgICAgIDpob3N0ID4gOjpzbG90dGVkKFtzZWNvbmRhcnldKSB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1ib2R5MTsKCiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWl0ZW0tYm9keS1zZWNvbmRhcnktY29sb3IsIHZhcigtLXNlY29uZGFyeS10ZXh0LWNvbG9yKSk7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWl0ZW0tYm9keS1zZWNvbmRhcnk7CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPHNsb3Q+PC9zbG90PgogIDwvdGVtcGxhdGU+CgogIDxzY3JpcHQ+Ly9+fldFQlBBVEh+fi9wYXBlci1pdGVtL3BhcGVyLWl0ZW0tYm9keS5odG1sLmpzClBvbHltZXIoe2lzOiJwYXBlci1pdGVtLWJvZHkifSk7Cjwvc2NyaXB0Pgo8L2RvbS1tb2R1bGU+CgoKCgoKCgoKPGRvbS1tb2R1bGUgaWQ9InRmLWdyYXBoLWljb24iPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGZvbnQtc2l6ZTogMDsKICAgICAgfQoKICAgICAgLmZhZGVkLXJlY3QgewogICAgICAgIGZpbGw6IHVybCgjcmVjdEhhdGNoKTsKICAgICAgfQoKICAgICAgLmZhZGVkLWVsbGlwc2UgewogICAgICAgIGZpbGw6IHVybCgjZWxsaXBzZUhhdGNoKTsKICAgICAgfQoKICAgICAgLmZhZGVkLXJlY3QsCiAgICAgIC5mYWRlZC1lbGxpcHNlLAogICAgICAuZmFkZWQtc2VyaWVzIHsKICAgICAgICBzdHJva2U6IHZhcigtLXRiLWdyYXBoLWZhZGVkKSAhaW1wb3J0YW50OwogICAgICB9CiAgICAgICNyZWN0SGF0Y2ggbGluZSwKICAgICAgI2VsbGlwc2VIYXRjaCBsaW5lIHsKICAgICAgICBjb2xvcjogI2UwZDRiMyAhaW1wb3J0YW50OwogICAgICAgIGZpbGw6IHdoaXRlOwogICAgICAgIHN0cm9rZTogI2UwZDRiMyAhaW1wb3J0YW50OwogICAgICB9CiAgICA8L3N0eWxlPgogICAgCiAgICA8c3ZnIGhlaWdodD0iMCIgd2lkdGg9IjAiIGlkPSJzdmdEZWZzIj4KICAgICAgPGRlZnM+CiAgICAgICAgCiAgICAgICAgPHBhdHRlcm4gaWQ9InJlY3RIYXRjaCIgcGF0dGVybnRyYW5zZm9ybT0icm90YXRlKDQ1IDAgMCkiIHdpZHRoPSI1IiBoZWlnaHQ9IjUiIHBhdHRlcm51bml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgICAgICAgPGxpbmUgeDE9IjAiIHkxPSIwIiB4Mj0iMCIgeTI9IjUiIHN0eWxlPSJzdHJva2Utd2lkdGg6IDEiIC8+CiAgICAgICAgPC9wYXR0ZXJuPgogICAgICAgIDxwYXR0ZXJuIGlkPSJlbGxpcHNlSGF0Y2giIHBhdHRlcm50cmFuc2Zvcm09InJvdGF0ZSg0NSAwIDApIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBwYXR0ZXJudW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgICAgICAgIDxsaW5lIHgxPSIwIiB5MT0iMCIgeDI9IjAiIHkyPSIyIiBzdHlsZT0ic3Ryb2tlLXdpZHRoOiAxIiAvPgogICAgICAgIDwvcGF0dGVybj4KICAgICAgICAKICAgICAgICA8ZWxsaXBzZSBpZD0ib3Atbm9kZS1zdGFtcCIgcng9IjcuNSIgcnk9IjMiIHN0cm9rZT0iaW5oZXJpdCIgZmlsbD0iaW5oZXJpdCIgLz4KICAgICAgICAKICAgICAgICA8ZWxsaXBzZSBpZD0ib3Atbm9kZS1hbm5vdGF0aW9uLXN0YW1wIiByeD0iNSIgcnk9IjIiIHN0cm9rZT0iaW5oZXJpdCIgZmlsbD0iaW5oZXJpdCIgLz4KICAgICAgICAKICAgICAgICA8ZyBpZD0ib3Atc2VyaWVzLXZlcnRpY2FsLXN0YW1wIj4KICAgICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI29wLW5vZGUtc3RhbXAiIHg9IjgiIHk9IjkiIC8+CiAgICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNvcC1ub2RlLXN0YW1wIiB4PSI4IiB5PSI2IiAvPgogICAgICAgICAgPHVzZSB4bGluazpocmVmPSIjb3Atbm9kZS1zdGFtcCIgeD0iOCIgeT0iMyIgLz4KICAgICAgICA8L2c+CiAgICAgICAgPGcgaWQ9Im9wLXNlcmllcy1ob3Jpem9udGFsLXN0YW1wIj4KICAgICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI29wLW5vZGUtc3RhbXAiIHg9IjE2IiB5PSI0IiAvPgogICAgICAgICAgPHVzZSB4bGluazpocmVmPSIjb3Atbm9kZS1zdGFtcCIgeD0iMTIiIHk9IjQiIC8+CiAgICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNvcC1ub2RlLXN0YW1wIiB4PSI4IiB5PSI0IiAvPgogICAgICAgIDwvZz4KICAgICAgICA8ZyBpZD0ic3VtbWFyeS1pY29uIiBmaWxsPSIjODQ4NDg0IiBoZWlnaHQ9IjEyIiB2aWV3Ym94PSIwIDAgMjQgMjQiIHdpZHRoPSIxMiI+CiAgICAgICAgICA8cGF0aCBkPSJNMTkgM0g1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6TTkgMTdIN3YtN2gydjd6bTQgMGgtMlY3aDJ2MTB6bTQgMGgtMnYtNGgydjR6IiAvPgogICAgICAgIDwvZz4KICAgICAgPC9kZWZzPgogICAgPC9zdmc+CiAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2lzVHlwZSh0eXBlLCAnQ09OU1QnKV1dIj4KICAgICAgPHN2ZyBoZWlnaHQkPSJbW2hlaWdodF1dIiBwcmVzZXJ2ZWFzcGVjdHJhdGlvPSJ4TWluWU1pZCBtZWV0IiB2aWV3Ym94PSIwIDAgMTAgMTAiPgogICAgICAgIDxjaXJjbGUgY3g9IjUiIGN5PSI1IiByPSIzIiBmaWxsJD0iW1tfZmlsbF1dIiBzdHJva2UkPSJbW19zdHJva2VdXSIgLz4KICAgICAgPC9zdmc+CiAgICA8L3RlbXBsYXRlPgogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19pc1R5cGUodHlwZSwgJ1NVTU1BUlknKV1dIj4KICAgICAgPHN2ZyB3aWR0aCQ9IltbaGVpZ2h0XV0iIGhlaWdodCQ9IltbaGVpZ2h0XV0iIHZpZXdib3g9IjAgMCAyNCAyNCIgZmlsbD0iIzg0ODQ4NCI+CiAgICAgICAgPHBhdGggZD0iTTE5IDNINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yek05IDE3SDd2LTdoMnY3em00IDBoLTJWN2gydjEwem00IDBoLTJ2LTRoMnY0eiIgLz4KICAgICAgPC9zdmc+CiAgICA8L3RlbXBsYXRlPgogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19pc1R5cGUodHlwZSwgJ09QJyldXSI+CiAgICAgIDxzdmcgaGVpZ2h0JD0iW1toZWlnaHRdXSIgcHJlc2VydmVhc3BlY3RyYXRpbz0ieE1pbllNaWQgbWVldCIgdmlld2JveD0iMCAwIDE2IDgiPgogICAgICAgIDx1c2UgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHhsaW5rOmhyZWY9IiNvcC1ub2RlLXN0YW1wIiBmaWxsJD0iW1tfZmlsbF1dIiBzdHJva2UkPSJbW19zdHJva2VdXSIgY2xhc3MkPSJ7e19mYWRlZENsYXNzKGZhZGVkLCAnZWxsaXBzZScpfX0iIHg9IjgiIHk9IjQiIC8+CiAgICAgIDwvc3ZnPgogICAgPC90ZW1wbGF0ZT4KICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaXNUeXBlKHR5cGUsICdNRVRBJyldXSI+CiAgICAgIDxzdmcgaGVpZ2h0JD0iW1toZWlnaHRdXSIgcHJlc2VydmVhc3BlY3RyYXRpbz0ieE1pbllNaWQgbWVldCIgdmlld2JveD0iMCAwIDM3IDE2Ij4KICAgICAgICA8cmVjdCB4PSIxIiB5PSIxIiBmaWxsJD0iW1tfZmlsbF1dIiBzdHJva2UkPSJbW19zdHJva2VdXSIgY2xhc3MkPSJ7e19mYWRlZENsYXNzKGZhZGVkLCAncmVjdCcpfX0iIHN0cm9rZS13aWR0aD0iMnB4IiBoZWlnaHQ9IjE0IiB3aWR0aD0iMzUiIHJ4PSI1IiByeT0iNSIgLz4KICAgICAgPC9zdmc+CiAgICA8L3RlbXBsYXRlPgogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19pc1R5cGUodHlwZSwgJ1NFUklFUycpXV0iPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbdmVydGljYWxdXSI+CiAgICAgICAgPHN2ZyBoZWlnaHQkPSJbW2hlaWdodF1dIiBwcmVzZXJ2ZWFzcGVjdHJhdGlvPSJ4TWluWU1pZCBtZWV0IiB2aWV3Ym94PSIwIDAgMTYgMTUiPgogICAgICAgICAgPHVzZSB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeGxpbms6aHJlZj0iI29wLXNlcmllcy12ZXJ0aWNhbC1zdGFtcCIgZmlsbCQ9IltbX2ZpbGxdXSIgc3Ryb2tlJD0iW1tfc3Ryb2tlXV0iIGNsYXNzJD0ie3tfZmFkZWRDbGFzcyhmYWRlZCwgJ3NlcmllcycpfX0iIHg9IjAiIHk9IjIiIC8+CiAgICAgICAgPC9zdmc+CiAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shdmVydGljYWxdXSI+CiAgICAgICAgPHN2ZyBoZWlnaHQkPSJbW2hlaWdodF1dIiBwcmVzZXJ2ZWFzcGVjdHJhdGlvPSJ4TWluWU1pZCBtZWV0IiB2aWV3Ym94PSIwIDAgMjQgMTAiPgogICAgICAgICAgPHVzZSB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeGxpbms6aHJlZj0iI29wLXNlcmllcy1ob3Jpem9udGFsLXN0YW1wIiBmaWxsJD0iW1tfZmlsbF1dIiBzdHJva2UkPSJbW19zdHJva2VdXSIgY2xhc3MkPSJ7e19mYWRlZENsYXNzKGZhZGVkLCAnc2VyaWVzJyl9fSIgeD0iMCIgeT0iMSIgLz4KICAgICAgICA8L3N2Zz4KICAgICAgPC90ZW1wbGF0ZT4KICAgIDwvdGVtcGxhdGU+CiAgPC90ZW1wbGF0ZT4KCiAgPHNjcmlwdD4vL35+V0VCUEFUSH5+L3RmLWdyYXBoLWNvbW1vbi90Zi1ncmFwaC1pY29uLmpzCihmdW5jdGlvbihhKXsoZnVuY3Rpb24oYyl7KGZ1bmN0aW9uKGQpe2xldCBmOyhmdW5jdGlvbihnKXtnLkNPTlNUPSJDT05TVCI7Zy5NRVRBPSJNRVRBIjtnLk9QPSJPUCI7Zy5TRVJJRVM9IlNFUklFUyI7Zy5TVU1NQVJZPSJTVU1NQVJZIn0pKGY9ZC5HcmFwaEljb25UeXBlfHwoZC5HcmFwaEljb25UeXBlPXt9KSk7UG9seW1lcih7aXM6InRmLWdyYXBoLWljb24iLHByb3BlcnRpZXM6e3R5cGU6U3RyaW5nLHZlcnRpY2FsOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGZpbGxPdmVycmlkZTp7dHlwZTpTdHJpbmcsdmFsdWU6bnVsbH0sc3Ryb2tlT3ZlcnJpZGU6e3R5cGU6U3RyaW5nLHZhbHVlOm51bGx9LGhlaWdodDp7dHlwZTpOdW1iZXIsdmFsdWU6MjB9LGZhZGVkOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LF9maWxsOnt0eXBlOlN0cmluZyxjb21wdXRlZDoiX2NvbXB1dGVGaWxsKHR5cGUsIGZpbGxPdmVycmlkZSkifSxfc3Ryb2tlOnt0eXBlOlN0cmluZyxjb21wdXRlZDoiX2NvbXB1dGVTdHJva2UodHlwZSwgc3Ryb2tlT3ZlcnJpZGUpIn19LApnZXRTdmdEZWZpbmFibGVFbGVtZW50KCl7cmV0dXJuIHRoaXMuJC5zdmdEZWZzfSxfY29tcHV0ZUZpbGwoZyxsKXtpZihudWxsIT1sKXJldHVybiBsO3N3aXRjaChnKXtjYXNlIGYuTUVUQTpyZXR1cm4gYS5ncmFwaC5yZW5kZXIuTWV0YW5vZGVDb2xvcnMuREVGQVVMVF9GSUxMO2Nhc2UgZi5TRVJJRVM6cmV0dXJuIGEuZ3JhcGgucmVuZGVyLlNlcmllc05vZGVDb2xvcnMuREVGQVVMVF9GSUxMO2RlZmF1bHQ6cmV0dXJuIGEuZ3JhcGgucmVuZGVyLk9wTm9kZUNvbG9ycy5ERUZBVUxUX0ZJTEx9fSxfY29tcHV0ZVN0cm9rZShnLGwpe2lmKG51bGwhPWwpcmV0dXJuIGw7c3dpdGNoKGcpe2Nhc2UgZi5NRVRBOnJldHVybiBhLmdyYXBoLnJlbmRlci5NZXRhbm9kZUNvbG9ycy5ERUZBVUxUX1NUUk9LRTtjYXNlIGYuU0VSSUVTOnJldHVybiBhLmdyYXBoLnJlbmRlci5TZXJpZXNOb2RlQ29sb3JzLkRFRkFVTFRfU1RST0tFO2RlZmF1bHQ6cmV0dXJuIGEuZ3JhcGgucmVuZGVyLk9wTm9kZUNvbG9ycy5ERUZBVUxUX1NUUk9LRX19LApfaXNUeXBlKGcsbCl7cmV0dXJuIGc9PT1sfSxfZmFkZWRDbGFzczpmdW5jdGlvbihnLGwpe3JldHVybiBnPyJmYWRlZC0iK2w6IiJ9fSl9KShjLmljb258fChjLmljb249e30pKX0pKGEuZ3JhcGh8fChhLmdyYXBoPXt9KSl9KSh0Znx8KHRmPXt9KSk7Cjwvc2NyaXB0Pgo8L2RvbS1tb2R1bGU+CgoKPGRvbS1tb2R1bGUgaWQ9InRmLW5vZGUtaWNvbiI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICB0Zi1ncmFwaC1pY29uIHsKICAgICAgICAtLXRiLWdyYXBoLWZhZGVkOiB2YXIoLS10Yi1ncmFwaC1mYWRlZCk7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8dGYtZ3JhcGgtaWNvbiBpZD0iaWNvbiIgdHlwZT0iW1tfZ2V0VHlwZShub2RlLCBzdW1tYXJ5LCBjb25zdCwgdHlwZSldXSIgaGVpZ2h0PSJbW2hlaWdodF1dIiBmaWxsLW92ZXJyaWRlPSJbW19maWxsT3ZlcnJpZGVdXSIgc3Ryb2tlLW92ZXJyaWRlPSJbW19nZXRTdHJva2VPdmVycmlkZShfZmlsbE92ZXJyaWRlKV1dIiBmYWRlZD0iW1tfZ2V0RmFkZWQocmVuZGVySW5mbyldXSIgdmVydGljYWw9IltbX2lzVmVydGljYWwobm9kZSwgdmVydGljYWwpXV0iPjwvdGYtZ3JhcGgtaWNvbj4KICA8L3RlbXBsYXRlPgoKICA8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdGYtZ3JhcGgtY29tbW9uL3RmLW5vZGUtaWNvbi5odG1sLmpzCihmdW5jdGlvbigpe1BvbHltZXIoe2lzOiJ0Zi1ub2RlLWljb24iLHByb3BlcnRpZXM6e25vZGU6e3R5cGU6T2JqZWN0LHZhbHVlOm51bGx9LHJlbmRlckluZm86e3R5cGU6T2JqZWN0LHZhbHVlOm51bGx9LGNvbG9yQnk6e3R5cGU6T2JqZWN0LHZhbHVlOiJzdHJ1Y3R1cmFsIn0sdGVtcGxhdGVJbmRleDp7dHlwZTpGdW5jdGlvbix2YWx1ZTpudWxsfSx0eXBlOnt0eXBlOlN0cmluZyx2YWx1ZTpudWxsfSx2ZXJ0aWNhbDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxjb25zdDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxzdW1tYXJ5Ont0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGZpbGw6e3R5cGU6U3RyaW5nLHZhbHVlOm51bGx9LGhlaWdodDp7dHlwZTpOdW1iZXIsdmFsdWU6MjB9LF9maWxsT3ZlcnJpZGU6e3R5cGU6U3RyaW5nLGNvbXB1dGVkOiJfY29tcHV0ZUZpbGxPdmVycmlkZShub2RlLCByZW5kZXJJbmZvLCBjb2xvckJ5LCB0ZW1wbGF0ZUluZGV4LCBmaWxsKSIsb2JzZXJ2ZXI6Il9vbkZpbGxPdmVycmlkZUNoYW5nZWQifX0sCl9jb21wdXRlRmlsbE92ZXJyaWRlOmZ1bmN0aW9uKGEsYyxkLGYsZyl7cmV0dXJuIGEmJmMmJmQmJmY/KGE9dGYuZ3JhcGguc2NlbmUubm9kZSxhLmdldEZpbGxGb3JOb2RlKGYsYS5Db2xvckJ5W2QudG9VcHBlckNhc2UoKV0sYywhMSkpOmd9LF9nZXRTdHJva2VPdmVycmlkZTpmdW5jdGlvbihhKXtyZXR1cm4gYT90Zi5ncmFwaC5zY2VuZS5ub2RlLmdldFN0cm9rZUZvckZpbGwoYSk6bnVsbH0sX2dldFR5cGU6ZnVuY3Rpb24oYSxjLGQsZil7Y29uc3Qge0dyYXBoSWNvblR5cGU6Z309dGYuZ3JhcGguaWNvbjtpZihhKXN3aXRjaChhLnR5cGUpe2Nhc2UgdGYuZ3JhcGguTm9kZVR5cGUuT1A6cmV0dXJuIGE9YS5vcCwic3RyaW5nIiE9PXR5cGVvZiBhP2cuT1A6IkNvbnN0Ij09PWF8fGQ/Zy5DT05TVDphLmVuZHNXaXRoKCJTdW1tYXJ5Iil8fGM/Zy5TVU1NQVJZOmcuT1A7Y2FzZSB0Zi5ncmFwaC5Ob2RlVHlwZS5NRVRBOnJldHVybiBnLk1FVEE7Y2FzZSB0Zi5ncmFwaC5Ob2RlVHlwZS5TRVJJRVM6cmV0dXJuIGcuU0VSSUVTfXJldHVybiBmfSwKX2lzVmVydGljYWw6ZnVuY3Rpb24oYSxjKXtyZXR1cm4gYT9hLmhhc05vbkNvbnRyb2xFZGdlczohIWN9LF9nZXRGYWRlZDpmdW5jdGlvbihhKXtyZXR1cm4gYSYmYS5pc0ZhZGVkT3V0fSxfb25GaWxsT3ZlcnJpZGVDaGFuZ2VkKGEsYyl7Y29uc3Qge25vZGU6ZCxyZW5kZXJJbmZvOmYsY29sb3JCeTpnLHRlbXBsYXRlSW5kZXg6bH09dGhpcyxrPXRmLmdyYXBoLnNjZW5lLm5vZGU7YSE9PWMmJmsucmVtb3ZlR3JhZGllbnREZWZpbml0aW9ucyh0aGlzLiQuaWNvbi5nZXRTdmdEZWZpbmFibGVFbGVtZW50KCkpO2QmJmYmJmcmJmwmJmsuZ2V0RmlsbEZvck5vZGUobCxrLkNvbG9yQnlbZy50b1VwcGVyQ2FzZSgpXSxmLCExLHRoaXMuJC5pY29uLmdldFN2Z0RlZmluYWJsZUVsZW1lbnQoKSl9fSl9KSgpOwo8L3NjcmlwdD4KPC9kb20tbW9kdWxlPgoKCjxkb20tbW9kdWxlIGlkPSJ0Zi1ncmFwaC1vcC1jb21wYXQtbGlzdC1pdGVtIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgICNsaXN0LWl0ZW0gewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGNvbG9yOiAjNTY1NjU2OwogICAgICAgIGZvbnQtc2l6ZTogMTFwdDsKICAgICAgICBmb250LXdlaWdodDogNDAwOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgIH0KCiAgICAgICNsaXN0LWl0ZW06aG92ZXIgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWdvb2dsZS15ZWxsb3ctMTAwKTsKICAgICAgfQoKICAgICAgLmNsaWNrYWJsZSB7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICB9CgogICAgICAjbGlzdC1pdGVtIHNwYW4gewogICAgICAgIG1hcmdpbi1sZWZ0OiA0MHB4OwogICAgICB9CgogICAgICAjbGlzdC1pdGVtLmV4Y2x1ZGVkIHNwYW4gewogICAgICAgIGNvbG9yOiAjOTk5OwogICAgICB9CgogICAgICAjbGlzdC1pdGVtIHNwYW4uZWRnZS1sYWJlbCB7CiAgICAgICAgZmxvYXQ6IHJpZ2h0OwogICAgICAgIGZvbnQtc2l6ZTogMTBweDsKICAgICAgICBtYXJnaW4tbGVmdDogM3B4OwogICAgICAgIG1hcmdpbi1yaWdodDogNXB4OwogICAgICB9CgogICAgICAubm9kZS1pY29uIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAxcHg7CiAgICAgICAgbGVmdDogMnB4OwogICAgICB9CgogICAgICAuZmFkZWQgc3BhbiB7CiAgICAgICAgY29sb3I6IHZhcigtLXRiLWdyYXBoLWZhZGVkKTsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8ZGl2IGlkPSJsaXN0LWl0ZW0iIG9uLW1vdXNlb3Zlcj0iX25vZGVMaXN0ZW5lciIgb24tbW91c2VvdXQ9Il9ub2RlTGlzdGVuZXIiIG9uLWNsaWNrPSJfbm9kZUxpc3RlbmVyIj4KICAgICAgPGRpdiBjbGFzcyQ9Int7X2ZhZGVkQ2xhc3MoaXRlbVJlbmRlckluZm8pfX0iPgogICAgICAgIDx0Zi1ub2RlLWljb24gY2xhc3M9Im5vZGUtaWNvbiIgaGVpZ2h0PSIxMiIgY29sb3ItYnk9IltbY29sb3JCeV1dIiBjb2xvci1ieS1wYXJhbXM9IltbY29sb3JCeVBhcmFtc11dIiBub2RlPSJbW2l0ZW1Ob2RlXV0iIHJlbmRlci1pbmZvPSJbW2l0ZW1SZW5kZXJJbmZvXV0iIHRlbXBsYXRlLWluZGV4PSJbW3RlbXBsYXRlSW5kZXhdXSI+CiAgICAgICAgPC90Zi1ub2RlLWljb24+CiAgICAgICAgPHNwYW4gdGl0bGUkPSJbW25hbWVdXSI+W1tuYW1lXV08L3NwYW4+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgPC90ZW1wbGF0ZT4KCiAgPHNjcmlwdD4vL35+V0VCUEFUSH5+L3RmLWdyYXBoLW9wLWNvbXBhdC1jYXJkL3RmLWdyYXBoLW9wLWNvbXBhdC1saXN0LWl0ZW0uaHRtbC5qcwooZnVuY3Rpb24oKXtQb2x5bWVyKHtpczoidGYtZ3JhcGgtb3AtY29tcGF0LWxpc3QtaXRlbSIscHJvcGVydGllczp7Y2FyZE5vZGU6T2JqZWN0LGl0ZW1Ob2RlOk9iamVjdCxlZGdlTGFiZWw6U3RyaW5nLGl0ZW1SZW5kZXJJbmZvOk9iamVjdCxuYW1lOlN0cmluZyxpdGVtVHlwZTp7dHlwZTpTdHJpbmcsb2JzZXJ2ZXI6Il9pdGVtVHlwZUNoYW5nZWQifSxjb2xvckJ5OlN0cmluZyxjb2xvckJ5UGFyYW1zOk9iamVjdCx0ZW1wbGF0ZUluZGV4OkZ1bmN0aW9ufSxfaXRlbVR5cGVDaGFuZ2VkOmZ1bmN0aW9uKCl7InN1Ym5vZGUiIT09dGhpcy5pdGVtVHlwZT90aGlzLiRbImxpc3QtaXRlbSJdLmNsYXNzTGlzdC5hZGQoImNsaWNrYWJsZSIpOnRoaXMuJFsibGlzdC1pdGVtIl0uY2xhc3NMaXN0LnJlbW92ZSgiY2xpY2thYmxlIil9LF9ub2RlTGlzdGVuZXI6ZnVuY3Rpb24oYSl7dGhpcy5maXJlKCJub2RlLWxpc3QtaXRlbS0iK2EudHlwZSx7bm9kZU5hbWU6dGhpcy5uYW1lLHR5cGU6dGhpcy5pdGVtVHlwZX0pfSwKX2ZhZGVkQ2xhc3M6ZnVuY3Rpb24oYSl7cmV0dXJuIGEmJmEuaXNGYWRlZE91dD8iZmFkZWQiOiIifX0pfSkoKTsKPC9zY3JpcHQ+CjwvZG9tLW1vZHVsZT4KCgo8ZG9tLW1vZHVsZSBpZD0idGYtZ3JhcGgtb3AtY29tcGF0LWNhcmQiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIG1heC1oZWlnaHQ6IDUwMHB4OwogICAgICB9CgogICAgICAuaW5jb21wYXRpYmxlLW9wcy1saXN0IHsKICAgICAgICBoZWlnaHQ6IDM1MHB4OwogICAgICAgIG1heC1oZWlnaHQ6IDQwMHB4OwogICAgICAgIG92ZXJmbG93LXk6IHNjcm9sbDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgIH0KCiAgICAgIGlyb24tbGlzdCB7CiAgICAgICAgZmxleDogMSAxIGF1dG87CiAgICAgIH0KCiAgICAgIHBhcGVyLWl0ZW0gewogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgICAgYmFja2dyb3VuZDogI2U5ZTllOTsKICAgICAgfQoKICAgICAgcGFwZXItaXRlbS1ib2R5W3R3by1saW5lXSB7CiAgICAgICAgbWluLWhlaWdodDogMDsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweCA0cHg7CiAgICAgIH0KCiAgICAgIC5leHBhbmRlZEluZm8gewogICAgICAgIHBhZGRpbmc6IDhweCAxMnB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgZm9udC1zaXplOiAxMnB0OwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAubm9kZS1uYW1lIHsKICAgICAgICB3aGl0ZS1zcGFjZTogbm9ybWFsOwogICAgICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDsKICAgICAgICBmb250LXNpemU6IDE0cHQ7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgfQoKICAgICAgLnN1YnRpdGxlIHsKICAgICAgICBmb250LXNpemU6IDEycHQ7CiAgICAgICAgY29sb3I6ICM1ZTVlNWU7CiAgICAgIH0KCiAgICAgIC50b2dnbGUtYnV0dG9uIHsKICAgICAgICBmbG9hdDogcmlnaHQ7CiAgICAgICAgbWF4LWhlaWdodDogMjBweDsKICAgICAgICBtYXgtd2lkdGg6IDIwcHg7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgfQoKICAgICAgLm5vbi1jb250cm9sLWxpc3QtaXRlbSB7CiAgICAgICAgcGFkZGluZy1sZWZ0OiAxMHB4OwogICAgICB9CgogICAgICBkaXYub3AtY29tcGF0LWRpc3BsYXkgewogICAgICAgIG1hcmdpbi10b3A6IDEwcHg7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICB9CgogICAgICBzdmcub3AtY29tcGF0IHsKICAgICAgICB3aWR0aDogMjUwcHg7CiAgICAgICAgaGVpZ2h0OiAyNXB4OwogICAgICAgIGZsb2F0OiBsZWZ0OwogICAgICB9CgogICAgICBkaXYub3AtY29tcGF0LXZhbHVlIHsKICAgICAgICBmbG9hdDogcmlnaHQ7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBjb2xvcjogYmxhY2s7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDEwcHg7CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPHBhcGVyLWl0ZW0+CiAgICAgIDxwYXBlci1pdGVtLWJvZHkgdHdvLWxpbmU+CiAgICAgICAgPGRpdj4KICAgICAgICAgIDxwYXBlci1pY29uLWJ1dHRvbiBpY29uPSJ7e19nZXRUb2dnbGVJY29uKF9leHBhbmRlZCl9fSIgb24tY2xpY2s9Il90b2dnbGVFeHBhbmRlZCIgY2xhc3M9InRvZ2dsZS1idXR0b24iPgogICAgICAgICAgPC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im5vZGUtbmFtZSIgaWQ9Im5vZGV0aXRsZSI+W1tub2RlVGl0bGVdXTwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgc2Vjb25kYXJ5PgogICAgICAgICAgPGRpdiBjbGFzcz0ic3VidGl0bGUiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJvcC1jb21wYXQtZGlzcGxheSI+CiAgICAgICAgICAgICAgPHN2ZyBjbGFzcz0ib3AtY29tcGF0IiBwcmVzZXJ2ZWFzcGVjdHJhdGlvPSJ4TWluWU1pZCBtZWV0IiB2aWV3Ym94PSIwIDAgMjUwIDI1Ij4KICAgICAgICAgICAgICAgIDxkZWZzPgogICAgICAgICAgICAgICAgICA8bGluZWFyZ3JhZGllbnQgaWQ9Im9wLWNvbXBhdC1maWxsIj4KICAgICAgICAgICAgICAgICAgICA8c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3IkPSJbW19vcENvbXBhdENvbG9yXV0iPjwvc3RvcD4KICAgICAgICAgICAgICAgICAgICA8c3RvcCBvZmZzZXQkPSJbW19vcENvbXBhdFNjb3JlXV0iIHN0b3AtY29sb3IkPSJbW19vcENvbXBhdENvbG9yXV0iPjwvc3RvcD4KICAgICAgICAgICAgICAgICAgICA8c3RvcCBvZmZzZXQkPSJbW19vcENvbXBhdFNjb3JlXV0iIHN0b3AtY29sb3IkPSJbW19vcEluY29tcGF0Q29sb3JdXSI+PC9zdG9wPgogICAgICAgICAgICAgICAgICAgIDxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvciQ9IltbX29wSW5jb21wYXRDb2xvciBdXSI+PC9zdG9wPgogICAgICAgICAgICAgICAgICA8L2xpbmVhcmdyYWRpZW50PgogICAgICAgICAgICAgICAgPC9kZWZzPgogICAgICAgICAgICAgICAgPHJlY3QgaGVpZ2h0PSIyNSIgd2lkdGg9IjI1MCIgcng9IjUiIHJ5PSI1IiBzdHlsZT0iZmlsbDogdXJsKCcjb3AtY29tcGF0LWZpbGwnKTsiIC8+CiAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ib3AtY29tcGF0LXZhbHVlIj5bW19vcENvbXBhdFNjb3JlTGFiZWxdXTwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L3BhcGVyLWl0ZW0tYm9keT4KICAgIDwvcGFwZXItaXRlbT4KCiAgICA8aXJvbi1jb2xsYXBzZSBvcGVuZWQ9Int7X2V4cGFuZGVkfX0iPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Int7X2V4cGFuZGVkfX0iIHJlc3RhbXA9InRydWUiPgogICAgICAgIDxkaXYgY2xhc3M9ImV4cGFuZGVkSW5mbyI+CiAgICAgICAgICBJbmNvbXBhdGlibGUgT3BlcmF0aW9uczogKDxzcGFuPltbX3RvdGFsSW5jb21wYXRPcHNdXTwvc3Bhbj4pCiAgICAgICAgICA8aXJvbi1saXN0IGNsYXNzPSJpbmNvbXBhdGlibGUtb3BzLWxpc3QiIGlkPSJpbmNvbXBhdGlibGVPcHNMaXN0IiBpdGVtcz0iW1tfaW5jb21wYXRpYmxlT3BOb2Rlc11dIj4KICAgICAgICAgICAgPHRlbXBsYXRlPgogICAgICAgICAgICAgIDx0Zi1ncmFwaC1vcC1jb21wYXQtbGlzdC1pdGVtIGNsYXNzPSJub24tY29udHJvbC1saXN0LWl0ZW0iIGl0ZW0tbm9kZT0iW1tpdGVtXV0iIGl0ZW0tcmVuZGVyLWluZm89IltbX2dldFJlbmRlckluZm8oaXRlbS5uYW1lLCByZW5kZXJIaWVyYXJjaHkpXV0iIG5hbWU9IltbaXRlbS5uYW1lXV0iIHRlbXBsYXRlLWluZGV4PSJbW190ZW1wbGF0ZUluZGV4XV0iIGNvbG9yLWJ5PSJbW2NvbG9yQnldXSIgaXRlbS10eXBlPSJpbmNvbXBhdGlibGUtb3BzIj4KICAgICAgICAgICAgICA8L3RmLWdyYXBoLW9wLWNvbXBhdC1saXN0LWl0ZW0+CiAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8L2lyb24tbGlzdD4KICAgICAgICA8L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgIDwvaXJvbi1jb2xsYXBzZT4KICA8L3RlbXBsYXRlPgoKICA8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdGYtZ3JhcGgtb3AtY29tcGF0LWNhcmQvdGYtZ3JhcGgtb3AtY29tcGF0LWNhcmQuaHRtbC5qcwooZnVuY3Rpb24oKXtQb2x5bWVyKHtpczoidGYtZ3JhcGgtb3AtY29tcGF0LWNhcmQiLHByb3BlcnRpZXM6e2dyYXBoSGllcmFyY2h5Ok9iamVjdCxoaWVyYXJjaHlQYXJhbXM6T2JqZWN0LHJlbmRlckhpZXJhcmNoeTpPYmplY3Qsbm9kZVRpdGxlOlN0cmluZyxfdGVtcGxhdGVJbmRleDp7dHlwZTpGdW5jdGlvbixjb21wdXRlZDoiX2dldFRlbXBsYXRlSW5kZXgoZ3JhcGhIaWVyYXJjaHkpIn0sX2luY29tcGF0aWJsZU9wTm9kZXM6e3R5cGU6T2JqZWN0LGNvbXB1dGVkOiJfZ2V0SW5jb21wYXRpYmxlT3BOb2RlcyhncmFwaEhpZXJhcmNoeSwgaGllcmFyY2h5UGFyYW1zKSJ9LF9leHBhbmRlZDp7dHlwZTpCb29sZWFuLHZhbHVlOiEwfSxfb3BDb21wYXRTY29yZTp7dHlwZTpOdW1iZXIsY29tcHV0ZWQ6Il9jb21wdXRlT3BDb21wYXRTY29yZShncmFwaEhpZXJhcmNoeSkifSxfb3BDb21wYXRTY29yZUxhYmVsOnt0eXBlOlN0cmluZyxjb21wdXRlZDoiX2dldE9wQ29tcGF0U2NvcmVMYWJlbChfb3BDb21wYXRTY29yZSkifSwKX29wQ29tcGF0Q29sb3I6e3R5cGU6U3RyaW5nLHZhbHVlOnRmLmdyYXBoLnJlbmRlci5PcE5vZGVDb2xvcnMuQ09NUEFUSUJMRX0sX29wSW5jb21wYXRDb2xvcjp7dHlwZTpTdHJpbmcsdmFsdWU6dGYuZ3JhcGgucmVuZGVyLk9wTm9kZUNvbG9ycy5JTkNPTVBBVElCTEV9LF90b3RhbEluY29tcGF0T3BzOnt0eXBlOk51bWJlcixjb21wdXRlZDoiX2dldFRvdGFsSW5jb21wYXRpYmxlT3BzKGdyYXBoSGllcmFyY2h5KSJ9fSxfZ2V0VGVtcGxhdGVJbmRleDpmdW5jdGlvbihhKXtyZXR1cm4gYS5nZXRUZW1wbGF0ZUluZGV4KCl9LF9nZXROb2RlOmZ1bmN0aW9uKGEsYyl7cmV0dXJuIGMubm9kZShhKX0sX2dldFByaW50YWJsZUhUTUxOb2RlTmFtZTpmdW5jdGlvbihhKXtyZXR1cm4oYXx8IiIpLnJlcGxhY2UoL1wvL2csIlx4M2N3YnJceDNlLyIpfSxfZ2V0UmVuZGVySW5mbzpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5yZW5kZXJIaWVyYXJjaHkuZ2V0T3JDcmVhdGVSZW5kZXJOb2RlQnlOYW1lKGEpfSwKX3RvZ2dsZUV4cGFuZGVkOmZ1bmN0aW9uKCl7dGhpcy5fZXhwYW5kZWQ9IXRoaXMuX2V4cGFuZGVkfSxfZ2V0VG9nZ2xlSWNvbjpmdW5jdGlvbihhKXtyZXR1cm4gYT8iZXhwYW5kLWxlc3MiOiJleHBhbmQtbW9yZSJ9LF9yZXNpemVMaXN0OmZ1bmN0aW9uKGEpeyhhPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYSkpJiZhLmZpcmUoImlyb24tcmVzaXplIil9LF9nZXRJbmNvbXBhdGlibGVPcE5vZGVzOmZ1bmN0aW9uKGEsYyl7aWYoYSYmYS5yb290KXJldHVybiB0aGlzLmFzeW5jKHRoaXMuX3Jlc2l6ZUxpc3QuYmluZCh0aGlzLCIjaW5jb21wYXRpYmxlT3BzTGlzdCIpKSx0Zi5ncmFwaC5oaWVyYXJjaHkuZ2V0SW5jb21wYXRpYmxlT3BzKGEsYyl9LF9jb21wdXRlT3BDb21wYXRTY29yZTpmdW5jdGlvbihhKXtpZihhJiZhLnJvb3Qpe3ZhciBjPWEucm9vdDthPWMuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5jb21wYXRpYmxlO2M9Yy5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmluY29tcGF0aWJsZTsKcmV0dXJuIDA9PWEmJjA9PWM/MDpNYXRoLmZsb29yKDEwMCphLyhhK2MpKS8xMDB9cmV0dXJuIDB9LF9nZXRPcENvbXBhdFNjb3JlTGFiZWw6ZnVuY3Rpb24oYSl7cmV0dXJuIGQzLmZvcm1hdCgiLjAlIikoYSl9LF9nZXRUb3RhbEluY29tcGF0aWJsZU9wczpmdW5jdGlvbihhKXtyZXR1cm4gYSYmYS5yb290P2Eucm9vdC5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmluY29tcGF0aWJsZTowfX0pfSkoKTsKPC9zY3JpcHQ+CjwvZG9tLW1vZHVsZT4KCgoKCgoKCgoKCgoKCgo8ZG9tLW1vZHVsZSBpZD0idGYtbm9kZS1saXN0LWl0ZW0iPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgI2xpc3QtaXRlbSB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgY29sb3I6ICM1NjU2NTY7CiAgICAgICAgZm9udC1zaXplOiAxMXB0OwogICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgfQoKICAgICAgI2xpc3QtaXRlbTpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZ29vZ2xlLXllbGxvdy0xMDApOwogICAgICB9CgogICAgICAuY2xpY2thYmxlIHsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgIH0KCiAgICAgICNsaXN0LWl0ZW0gc3BhbiB7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDQwcHg7CiAgICAgIH0KCiAgICAgICNsaXN0LWl0ZW0uZXhjbHVkZWQgc3BhbiB7CiAgICAgICAgY29sb3I6ICM5OTk7CiAgICAgIH0KCiAgICAgICNsaXN0LWl0ZW0gc3Bhbi5lZGdlLWxhYmVsIHsKICAgICAgICBmbG9hdDogcmlnaHQ7CiAgICAgICAgZm9udC1zaXplOiAxMHB4OwogICAgICAgIG1hcmdpbi1sZWZ0OiAzcHg7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiA1cHg7CiAgICAgIH0KCiAgICAgIC5ub2RlLWljb24gewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDFweDsKICAgICAgICBsZWZ0OiAycHg7CiAgICAgIH0KCiAgICAgIC5mYWRlZCBzcGFuIHsKICAgICAgICBjb2xvcjogdmFyKC0tdGItZ3JhcGgtZmFkZWQpOwogICAgICB9CiAgICA8L3N0eWxlPgogICAgPGRpdiBpZD0ibGlzdC1pdGVtIiBvbi1tb3VzZW92ZXI9Il9ub2RlTGlzdGVuZXIiIG9uLW1vdXNlb3V0PSJfbm9kZUxpc3RlbmVyIiBvbi1jbGljaz0iX25vZGVMaXN0ZW5lciI+CiAgICAgIDxkaXYgY2xhc3MkPSJ7e19mYWRlZENsYXNzKGl0ZW1SZW5kZXJJbmZvKX19Ij4KICAgICAgICA8dGYtbm9kZS1pY29uIGNsYXNzPSJub2RlLWljb24iIGhlaWdodD0iMTIiIGNvbG9yLWJ5PSJbW2NvbG9yQnldXSIgY29sb3ItYnktcGFyYW1zPSJbW2NvbG9yQnlQYXJhbXNdXSIgbm9kZT0iW1tpdGVtTm9kZV1dIiByZW5kZXItaW5mbz0iW1tpdGVtUmVuZGVySW5mb11dIiB0ZW1wbGF0ZS1pbmRleD0iW1t0ZW1wbGF0ZUluZGV4XV0iPjwvdGYtbm9kZS1pY29uPgogICAgICAgIDxzcGFuIHRpdGxlJD0iW1tuYW1lXV0iPltbbmFtZV1dPC9zcGFuPgogICAgICAgIDxzcGFuIGNsYXNzPSJlZGdlLWxhYmVsIj5bW2VkZ2VMYWJlbF1dPC9zcGFuPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogIDwvdGVtcGxhdGU+CgogIDxzY3JpcHQ+Ly9+fldFQlBBVEh+fi90Zi1ncmFwaC1pbmZvL3RmLW5vZGUtbGlzdC1pdGVtLmh0bWwuanMKKGZ1bmN0aW9uKCl7UG9seW1lcih7aXM6InRmLW5vZGUtbGlzdC1pdGVtIixwcm9wZXJ0aWVzOntjYXJkTm9kZTpPYmplY3QsaXRlbU5vZGU6T2JqZWN0LGVkZ2VMYWJlbDpTdHJpbmcsaXRlbVJlbmRlckluZm86T2JqZWN0LG5hbWU6U3RyaW5nLGl0ZW1UeXBlOnt0eXBlOlN0cmluZyxvYnNlcnZlcjoiX2l0ZW1UeXBlQ2hhbmdlZCJ9LGNvbG9yQnk6U3RyaW5nLGNvbG9yQnlQYXJhbXM6T2JqZWN0LHRlbXBsYXRlSW5kZXg6RnVuY3Rpb259LF9pdGVtVHlwZUNoYW5nZWQ6ZnVuY3Rpb24oKXsic3Vibm9kZSIhPT10aGlzLml0ZW1UeXBlP3RoaXMuJFsibGlzdC1pdGVtIl0uY2xhc3NMaXN0LmFkZCgiY2xpY2thYmxlIik6dGhpcy4kWyJsaXN0LWl0ZW0iXS5jbGFzc0xpc3QucmVtb3ZlKCJjbGlja2FibGUiKX0sX25vZGVMaXN0ZW5lcjpmdW5jdGlvbihhKXt0aGlzLmZpcmUoIm5vZGUtbGlzdC1pdGVtLSIrYS50eXBlLHtjYXJkTm9kZTp0aGlzLmNhcmROb2RlLm5hbWUsbm9kZU5hbWU6dGhpcy5uYW1lLAp0eXBlOnRoaXMuaXRlbVR5cGV9KX0sX2ZhZGVkQ2xhc3M6ZnVuY3Rpb24oYSl7cmV0dXJuIGEmJmEuaXNGYWRlZE91dD8iZmFkZWQiOiIifX0pfSkoKTsKPC9zY3JpcHQ+CjwvZG9tLW1vZHVsZT4KCgo8ZG9tLW1vZHVsZSBpZD0idGYtbm9kZS1pbmZvIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIC5zdWItbGlzdC1ncm91cCB7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBmb250LXNpemU6IDEycHQ7CiAgICAgICAgcGFkZGluZy1ib3R0b206IDhweDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgLnN1Yi1saXN0IHsKICAgICAgICBtYXgtaGVpZ2h0OiAzMDBweDsKICAgICAgICBvdmVyZmxvdy15OiBzY3JvbGw7CiAgICAgIH0KCiAgICAgIC5hdHRyLWxlZnQgewogICAgICAgIGZsb2F0OiBsZWZ0OwogICAgICAgIHdpZHRoOiAzMCU7CiAgICAgICAgd29yZC13cmFwOiBicmVhay13b3JkOwogICAgICAgIGNvbG9yOiAjNTY1NjU2OwogICAgICAgIGZvbnQtc2l6ZTogMTFwdDsKICAgICAgICBmb250LXdlaWdodDogNDAwOwogICAgICB9CgogICAgICAuYXR0ci1yaWdodCB7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDMwJTsKICAgICAgICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7CiAgICAgICAgY29sb3I6ICM1NjU2NTY7CiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgICAgfQoKICAgICAgLnN1Yi1saXN0LXRhYmxlIHsKICAgICAgICBkaXNwbGF5OiB0YWJsZTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgLnN1Yi1saXN0LXRhYmxlLXJvdyB7CiAgICAgICAgZGlzcGxheTogdGFibGUtcm93OwogICAgICB9CgogICAgICAuc3ViLWxpc3QtdGFibGUtcm93IC5zdWItbGlzdC10YWJsZS1jZWxsOmxhc3QtY2hpbGQgewogICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OwogICAgICB9CgogICAgICAuc3ViLWxpc3QtdGFibGUtY2VsbCB7CiAgICAgICAgY29sb3I6ICM1NjU2NTY7CiAgICAgICAgZGlzcGxheTogdGFibGUtY2VsbDsKICAgICAgICBmb250LXNpemU6IDExcHQ7CiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgICAgICBtYXgtd2lkdGg6IDIwMHB4OwogICAgICAgIHBhZGRpbmc6IDAgNHB4OwogICAgICB9CgogICAgICBwYXBlci1pdGVtIHsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICAgIGJhY2tncm91bmQ6ICNlOWU5ZTk7CiAgICAgIH0KCiAgICAgIHBhcGVyLWl0ZW0tYm9keVt0d28tbGluZV0gewogICAgICAgIG1pbi1oZWlnaHQ6IDA7CiAgICAgICAgcGFkZGluZzogOHB4IDEycHggNHB4OwogICAgICB9CgogICAgICAuZXhwYW5kZWRJbmZvIHsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweDsKICAgICAgfQoKICAgICAgLmNvbnRyb2xEZXBzIHsKICAgICAgICBwYWRkaW5nOiAwIDAgMCA4cHg7CiAgICAgIH0KCiAgICAgIC5ub2RlLW5hbWUgewogICAgICAgIHdoaXRlLXNwYWNlOiBub3JtYWw7CiAgICAgICAgd29yZC13cmFwOiBicmVhay13b3JkOwogICAgICAgIGZvbnQtc2l6ZTogMTRwdDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICB9CgogICAgICAubm9kZS1pY29uIHsKICAgICAgICBmbG9hdDogcmlnaHQ7CiAgICAgIH0KCiAgICAgIC5zdWJ0aXRsZSB7CiAgICAgICAgZm9udC1zaXplOiAxMnB0OwogICAgICAgIGNvbG9yOiAjNWU1ZTVlOwogICAgICB9CgogICAgICAuY29udHJvbExpbmUgewogICAgICAgIGZvbnQtc2l6ZTogMTFwdDsKICAgICAgICBmb250LXdlaWdodDogNDAwOwogICAgICB9CgogICAgICAudG9nZ2xlLWJ1dHRvbiB7CiAgICAgICAgZmxvYXQ6IHJpZ2h0OwogICAgICAgIG1heC1oZWlnaHQ6IDIwcHg7CiAgICAgICAgbWF4LXdpZHRoOiAyMHB4OwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgIH0KCiAgICAgIC5jb250cm9sLXRvZ2dsZS1idXR0b24gewogICAgICAgIGZsb2F0OiBsZWZ0OwogICAgICAgIG1heC1oZWlnaHQ6IDIwcHg7CiAgICAgICAgbWF4LXdpZHRoOiAyMHB4OwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgIH0KCiAgICAgIC50b2dnbGUtaW5jbHVkZS1ncm91cCB7CiAgICAgICAgcGFkZGluZy10b3A6IDRweDsKICAgICAgfQoKICAgICAgLnRvZ2dsZS1pbmNsdWRlIHsKICAgICAgICBtYXJnaW46IDVweCA2cHg7CiAgICAgICAgdGV4dC10cmFuc2Zvcm06IG5vbmU7CiAgICAgICAgcGFkZGluZzogNHB4IDZweDsKICAgICAgICBmb250LXNpemU6IDEwcHQ7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2ZhZmFmYTsKICAgICAgICBjb2xvcjogIzY2NjsKICAgICAgfQoKICAgICAgLnRvZ2dsZS1pbmNsdWRlOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1nb29nbGUteWVsbG93LTEwMCk7CiAgICAgIH0KCiAgICAgIC5ub24tY29udHJvbC1saXN0LWl0ZW0gewogICAgICAgIHBhZGRpbmctbGVmdDogMTBweDsKICAgICAgfQogICAgPC9zdHlsZT4KICAgIDxwYXBlci1pdGVtPgogICAgICA8cGFwZXItaXRlbS1ib2R5IHR3by1saW5lPgogICAgICAgIDxkaXY+CiAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24gaWNvbj0ie3tfZ2V0VG9nZ2xlSWNvbihfZXhwYW5kZWQpfX0iIG9uLWNsaWNrPSJfdG9nZ2xlRXhwYW5kZWQiIGNsYXNzPSJ0b2dnbGUtYnV0dG9uIj4KICAgICAgICAgIDwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJub2RlLW5hbWUiIGlkPSJub2RldGl0bGUiPjwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgc2Vjb25kYXJ5PgogICAgICAgICAgPHRmLW5vZGUtaWNvbiBjbGFzcz0ibm9kZS1pY29uIiBub2RlPSJbW19ub2RlXV0iIHJlbmRlci1pbmZvPSJbW19nZXRSZW5kZXJJbmZvKG5vZGVOYW1lLCByZW5kZXJIaWVyYXJjaHkpXV0iIGNvbG9yLWJ5PSJbW2NvbG9yQnldXSIgdGVtcGxhdGUtaW5kZXg9IltbX3RlbXBsYXRlSW5kZXhdXSI+PC90Zi1ub2RlLWljb24+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Int7X25vZGUub3B9fSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InN1YnRpdGxlIj4KICAgICAgICAgICAgICBPcGVyYXRpb246CiAgICAgICAgICAgICAgPHNwYW4+W1tfbm9kZS5vcF1dPC9zcGFuPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Int7X25vZGUubWV0YWdyYXBofX0iPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdWJ0aXRsZSI+CiAgICAgICAgICAgICAgU3ViZ3JhcGg6CiAgICAgICAgICAgICAgPHNwYW4+W1tfbm9kZS5jYXJkaW5hbGl0eV1dPC9zcGFuPiBub2RlcwogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvcGFwZXItaXRlbS1ib2R5PgogICAgPC9wYXBlci1pdGVtPgogICAgPGlyb24tY29sbGFwc2Ugb3BlbmVkPSJ7e19leHBhbmRlZH19Ij4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJ7e19leHBhbmRlZH19IiByZXN0YW1wPSJ0cnVlIj4KICAgICAgICA8ZGl2IGNsYXNzPSJleHBhbmRlZEluZm8iPgogICAgICAgICAgPGRpdiBjbGFzcz0ic3ViLWxpc3QtZ3JvdXAgYXR0cmlidXRlcyI+CiAgICAgICAgICAgIEF0dHJpYnV0ZXMgKDxzcGFuPltbX2F0dHJpYnV0ZXMubGVuZ3RoXV08L3NwYW4+KQogICAgICAgICAgICA8aXJvbi1saXN0IGNsYXNzPSJzdWItbGlzdCIgaWQ9ImF0dHJpYnV0ZXNMaXN0IiBpdGVtcz0iW1tfYXR0cmlidXRlc11dIj4KICAgICAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhdHRyLWxlZnQiPltbaXRlbS5rZXldXTwvZGl2PgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhdHRyLXJpZ2h0Ij5bW2l0ZW0udmFsdWVdXTwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPC9pcm9uLWxpc3Q+CiAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Int7X2RldmljZX19Ij4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3ViLWxpc3QtZ3JvdXAgZGV2aWNlIj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhdHRyLWxlZnQiPkRldmljZTwvZGl2PgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImF0dHItcmlnaHQiPltbX2RldmljZV1dPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KCiAgICAgICAgICA8ZGl2IGNsYXNzPSJzdWItbGlzdC1ncm91cCBwcmVkZWNlc3NvcnMiPgogICAgICAgICAgICBJbnB1dHMgKDxzcGFuPltbX3RvdGFsUHJlZGVjZXNzb3JzXV08L3NwYW4+KQogICAgICAgICAgICA8aXJvbi1saXN0IGNsYXNzPSJzdWItbGlzdCIgaWQ9ImlucHV0c0xpc3QiIGl0ZW1zPSJbW19wcmVkZWNlc3NvcnMucmVndWxhcl1dIj4KICAgICAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8dGYtbm9kZS1saXN0LWl0ZW0gY2xhc3M9Im5vbi1jb250cm9sLWxpc3QtaXRlbSIgY2FyZC1ub2RlPSJbW19ub2RlXV0iIGl0ZW0tbm9kZT0iW1tpdGVtLm5vZGVdXSIgZWRnZS1sYWJlbD0iW1tpdGVtLmVkZ2VMYWJlbF1dIiBpdGVtLXJlbmRlci1pbmZvPSJbW2l0ZW0ucmVuZGVySW5mb11dIiBuYW1lPSJbW2l0ZW0ubmFtZV1dIiBpdGVtLXR5cGU9InByZWRlY2Vzc29ycyIgY29sb3ItYnk9IltbY29sb3JCeV1dIiB0ZW1wbGF0ZS1pbmRleD0iW1tfdGVtcGxhdGVJbmRleF1dIj4KICAgICAgICAgICAgICAgIDwvdGYtbm9kZS1saXN0LWl0ZW0+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPC9pcm9uLWxpc3Q+CiAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfcHJlZGVjZXNzb3JzLmNvbnRyb2wubGVuZ3RoXV0iPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2xEZXBzIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2xMaW5lIj4KICAgICAgICAgICAgICAgICAgPHBhcGVyLWljb24tYnV0dG9uIGljb249Int7X2dldFRvZ2dsZUljb24oX29wZW5lZENvbnRyb2xQcmVkKX19IiBvbi1jbGljaz0iX3RvZ2dsZUNvbnRyb2xQcmVkIiBjbGFzcz0iY29udHJvbC10b2dnbGUtYnV0dG9uIj4KICAgICAgICAgICAgICAgICAgPC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgICAgICAgICAgICAgQ29udHJvbCBkZXBlbmRlbmNpZXMKICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGlyb24tY29sbGFwc2Ugb3BlbmVkPSJ7e19vcGVuZWRDb250cm9sUHJlZH19IiBuby1hbmltYXRpb24+CiAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0ie3tfb3BlbmVkQ29udHJvbFByZWR9fSIgcmVzdGFtcD0idHJ1ZSI+CiAgICAgICAgICAgICAgICAgICAgPGlyb24tbGlzdCBjbGFzcz0ic3ViLWxpc3QiIGl0ZW1zPSJbW19wcmVkZWNlc3NvcnMuY29udHJvbF1dIj4KICAgICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZT4KICAgICAgICAgICAgICAgICAgICAgICAgPHRmLW5vZGUtbGlzdC1pdGVtIGNhcmQtbm9kZT0iW1tfbm9kZV1dIiBpdGVtLW5vZGU9IltbaXRlbS5ub2RlXV0iIGl0ZW0tcmVuZGVyLWluZm89IltbaXRlbS5yZW5kZXJJbmZvXV0iIG5hbWU9IltbaXRlbS5uYW1lXV0iIGl0ZW0tdHlwZT0icHJlZGVjZXNzb3JzIiBjb2xvci1ieT0iW1tjb2xvckJ5XV0iIHRlbXBsYXRlLWluZGV4PSJbW190ZW1wbGF0ZUluZGV4XV0iPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RmLW5vZGUtbGlzdC1pdGVtPgogICAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgICAgICA8L2lyb24tbGlzdD4KICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgIDwvaXJvbi1jb2xsYXBzZT4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgIDxkaXYgY2xhc3M9InN1Yi1saXN0LWdyb3VwIHN1Y2Nlc3NvcnMiPgogICAgICAgICAgICBPdXRwdXRzICg8c3Bhbj5bW190b3RhbFN1Y2Nlc3NvcnNdXTwvc3Bhbj4pCiAgICAgICAgICAgIDxpcm9uLWxpc3QgY2xhc3M9InN1Yi1saXN0IiBpZD0ib3V0cHV0c0xpc3QiIGl0ZW1zPSJbW19zdWNjZXNzb3JzLnJlZ3VsYXJdXSI+CiAgICAgICAgICAgICAgPHRlbXBsYXRlPgogICAgICAgICAgICAgICAgPHRmLW5vZGUtbGlzdC1pdGVtIGNsYXNzPSJub24tY29udHJvbC1saXN0LWl0ZW0iIGNhcmQtbm9kZT0iW1tfbm9kZV1dIiBpdGVtLW5vZGU9IltbaXRlbS5ub2RlXV0iIGVkZ2UtbGFiZWw9IltbaXRlbS5lZGdlTGFiZWxdXSIgaXRlbS1yZW5kZXItaW5mbz0iW1tpdGVtLnJlbmRlckluZm9dXSIgbmFtZT0iW1tpdGVtLm5hbWVdXSIgaXRlbS10eXBlPSJzdWNjZXNzb3IiIGNvbG9yLWJ5PSJbW2NvbG9yQnldXSIgdGVtcGxhdGUtaW5kZXg9IltbX3RlbXBsYXRlSW5kZXhdXSI+CiAgICAgICAgICAgICAgICA8L3RmLW5vZGUtbGlzdC1pdGVtPgogICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDwvaXJvbi1saXN0PgogICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX3N1Y2Nlc3NvcnMuY29udHJvbC5sZW5ndGhdXSI+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29udHJvbERlcHMiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29udHJvbExpbmUiPgogICAgICAgICAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24gaWNvbj0ie3tfZ2V0VG9nZ2xlSWNvbihfb3BlbmVkQ29udHJvbFN1Y2MpfX0iIG9uLWNsaWNrPSJfdG9nZ2xlQ29udHJvbFN1Y2MiIGNsYXNzPSJjb250cm9sLXRvZ2dsZS1idXR0b24iPgogICAgICAgICAgICAgICAgICA8L3BhcGVyLWljb24tYnV0dG9uPgogICAgICAgICAgICAgICAgICBDb250cm9sIGRlcGVuZGVuY2llcwogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8aXJvbi1jb2xsYXBzZSBvcGVuZWQ9Int7X29wZW5lZENvbnRyb2xTdWNjfX0iIG5vLWFuaW1hdGlvbj4KICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJ7e19vcGVuZWRDb250cm9sU3VjY319IiByZXN0YW1wPSJ0cnVlIj4KICAgICAgICAgICAgICAgICAgICA8aXJvbi1saXN0IGNsYXNzPSJzdWItbGlzdCIgaXRlbXM9IltbX3N1Y2Nlc3NvcnMuY29udHJvbF1dIj4KICAgICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZT4KICAgICAgICAgICAgICAgICAgICAgICAgPHRmLW5vZGUtbGlzdC1pdGVtIGNhcmQtbm9kZT0iW1tfbm9kZV1dIiBpdGVtLW5vZGU9IltbaXRlbS5ub2RlXV0iIGl0ZW0tcmVuZGVyLWluZm89IltbaXRlbS5yZW5kZXJJbmZvXV0iIG5hbWU9IltbaXRlbS5uYW1lXV0iIGl0ZW0tdHlwZT0ic3VjY2Vzc29ycyIgY29sb3ItYnk9IltbY29sb3JCeV1dIiB0ZW1wbGF0ZS1pbmRleD0iW1tfdGVtcGxhdGVJbmRleF1dIj4KICAgICAgICAgICAgICAgICAgICAgICAgPC90Zi1ub2RlLWxpc3QtaXRlbT4KICAgICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICAgICAgPC9pcm9uLWxpc3Q+CiAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8L2lyb24tY29sbGFwc2U+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0ie3tfaGFzRGlzcGxheWFibGVOb2RlU3RhdHN9fSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InN1Yi1saXN0LWdyb3VwIG5vZGUtc3RhdHMiPgogICAgICAgICAgICAgIE5vZGUgU3RhdHMKICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdWItbGlzdC10YWJsZSI+CiAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Int7X25vZGVTdGF0cy50b3RhbEJ5dGVzfX0iPgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdWItbGlzdC10YWJsZS1yb3ciPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN1Yi1saXN0LXRhYmxlLWNlbGwiPk1lbW9yeTwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN1Yi1saXN0LXRhYmxlLWNlbGwiPgogICAgICAgICAgICAgICAgICAgICAgW1tfbm9kZVN0YXRzRm9ybWF0dGVkQnl0ZXNdXQogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Int7X2dldFRvdGFsTWljcm9zKF9ub2RlU3RhdHMpfX0iPgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdWItbGlzdC10YWJsZS1yb3ciPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN1Yi1saXN0LXRhYmxlLWNlbGwiPkNvbXB1dGUgVGltZTwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN1Yi1saXN0LXRhYmxlLWNlbGwiPgogICAgICAgICAgICAgICAgICAgICAgW1tfbm9kZVN0YXRzRm9ybWF0dGVkQ29tcHV0ZVRpbWVdXQogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Int7X25vZGVTdGF0cy5vdXRwdXRTaXplfX0iPgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdWItbGlzdC10YWJsZS1yb3ciPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN1Yi1saXN0LXRhYmxlLWNlbGwiPlRlbnNvciBPdXRwdXQgU2l6ZXM8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdWItbGlzdC10YWJsZS1jZWxsIj4KICAgICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9Int7X25vZGVTdGF0c0Zvcm1hdHRlZE91dHB1dFNpemVzfX0iPgogICAgICAgICAgICAgICAgICAgICAgICBbW2l0ZW1dXSA8YnI+CiAgICAgICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KCiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2Z1bmN0aW9uVXNhZ2VzLmxlbmd0aF1dIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3ViLWxpc3QtZ3JvdXAgcHJlZGVjZXNzb3JzIj4KICAgICAgICAgICAgICBVc2FnZXMgb2YgdGhlIEZ1bmN0aW9uICg8c3Bhbj5bW19mdW5jdGlvblVzYWdlcy5sZW5ndGhdXTwvc3Bhbj4pCiAgICAgICAgICAgICAgPGlyb24tbGlzdCBjbGFzcz0ic3ViLWxpc3QiIGlkPSJmdW5jdGlvblVzYWdlc0xpc3QiIGl0ZW1zPSJbW19mdW5jdGlvblVzYWdlc11dIj4KICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZT4KICAgICAgICAgICAgICAgICAgPHRmLW5vZGUtbGlzdC1pdGVtIGNsYXNzPSJub24tY29udHJvbC1saXN0LWl0ZW0iIGNhcmQtbm9kZT0iW1tfbm9kZV1dIiBpdGVtLW5vZGU9IltbaXRlbV1dIiBuYW1lPSJbW2l0ZW0ubmFtZV1dIiBpdGVtLXR5cGU9ImZ1bmN0aW9uVXNhZ2VzIiBjb2xvci1ieT0iW1tjb2xvckJ5XV0iIHRlbXBsYXRlLWluZGV4PSJbW190ZW1wbGF0ZUluZGV4XV0iPgogICAgICAgICAgICAgICAgICA8L3RmLW5vZGUtbGlzdC1pdGVtPgogICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICA8L2lyb24tbGlzdD4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L3RlbXBsYXRlPgoKICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shX2lzTGlicmFyeUZ1bmN0aW9uKF9ub2RlKV1dIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9nZ2xlLWluY2x1ZGUtZ3JvdXAiPgogICAgICAgICAgICAgIDxwYXBlci1idXR0b24gcmFpc2VkIGNsYXNzPSJ0b2dnbGUtaW5jbHVkZSIgb24tY2xpY2s9Il90b2dnbGVJbmNsdWRlIj4KICAgICAgICAgICAgICAgIDxzcGFuPltbX2F1eEJ1dHRvblRleHRdXTwvc3Bhbj4KICAgICAgICAgICAgICA8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L3RlbXBsYXRlPgoKICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0ie3tfaXNJblNlcmllcyhfbm9kZSl9fSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRvZ2dsZS1pbmNsdWRlLWdyb3VwIj4KICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uIHJhaXNlZCBjbGFzcz0idG9nZ2xlLWluY2x1ZGUiIG9uLWNsaWNrPSJfdG9nZ2xlR3JvdXAiPgogICAgICAgICAgICAgICAgPHNwYW4+W1tfZ3JvdXBCdXR0b25UZXh0XV08L3NwYW4+CiAgICAgICAgICAgICAgPC9wYXBlci1idXR0b24+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgIDwvaXJvbi1jb2xsYXBzZT4KICA8L3RlbXBsYXRlPgoKICA8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdGYtZ3JhcGgtaW5mby90Zi1ub2RlLWluZm8uaHRtbC5qcwooZnVuY3Rpb24oKXtQb2x5bWVyKHtpczoidGYtbm9kZS1pbmZvIixwcm9wZXJ0aWVzOntub2RlTmFtZTpTdHJpbmcsZ3JhcGhIaWVyYXJjaHk6T2JqZWN0LHJlbmRlckhpZXJhcmNoeTpPYmplY3QsY29sb3JCeTpTdHJpbmcsX3RlbXBsYXRlSW5kZXg6e3R5cGU6RnVuY3Rpb24sY29tcHV0ZWQ6Il9nZXRUZW1wbGF0ZUluZGV4KGdyYXBoSGllcmFyY2h5KSJ9LF9ub2RlOnt0eXBlOk9iamVjdCxjb21wdXRlZDoiX2dldE5vZGUobm9kZU5hbWUsIGdyYXBoSGllcmFyY2h5KSIsb2JzZXJ2ZXI6Il9yZXNldFN0YXRlIn0sX25vZGVTdGF0czp7dHlwZTpPYmplY3QsY29tcHV0ZWQ6Il9nZXROb2RlU3RhdHMobm9kZU5hbWUsIGdyYXBoSGllcmFyY2h5KSIsb2JzZXJ2ZXI6Il9yZXNldFN0YXRlIn0sX2hhc0Rpc3BsYXlhYmxlTm9kZVN0YXRzOnt0eXBlOk9iamVjdCxjb21wdXRlZDoiX2dldEhhc0Rpc3BsYXlhYmxlTm9kZVN0YXRzKF9ub2RlU3RhdHMpIn0sX25vZGVTdGF0c0Zvcm1hdHRlZEJ5dGVzOnt0eXBlOlN0cmluZywKY29tcHV0ZWQ6Il9nZXROb2RlU3RhdHNGb3JtYXR0ZWRCeXRlcyhfbm9kZVN0YXRzKSJ9LF9ub2RlU3RhdHNGb3JtYXR0ZWRDb21wdXRlVGltZTp7dHlwZTpTdHJpbmcsY29tcHV0ZWQ6Il9nZXROb2RlU3RhdHNGb3JtYXR0ZWRDb21wdXRlVGltZShfbm9kZVN0YXRzKSJ9LF9ub2RlU3RhdHNGb3JtYXR0ZWRPdXRwdXRTaXplczp7dHlwZTpBcnJheSxjb21wdXRlZDoiX2dldE5vZGVTdGF0c0Zvcm1hdHRlZE91dHB1dFNpemVzKF9ub2RlU3RhdHMpIn0sbm9kZUluY2x1ZGU6e3R5cGU6TnVtYmVyLG9ic2VydmVyOiJfbm9kZUluY2x1ZGVTdGF0ZUNoYW5nZWQifSxfYXR0cmlidXRlczp7dHlwZTpBcnJheSxjb21wdXRlZDoiX2dldEF0dHJpYnV0ZXMoX25vZGUpIn0sX2RldmljZTp7dHlwZTpTdHJpbmcsY29tcHV0ZWQ6Il9nZXREZXZpY2UoX25vZGUpIn0sX3N1Y2Nlc3NvcnM6e3R5cGU6T2JqZWN0LGNvbXB1dGVkOiJfZ2V0U3VjY2Vzc29ycyhfbm9kZSwgZ3JhcGhIaWVyYXJjaHkpIn0sCl9wcmVkZWNlc3NvcnM6e3R5cGU6T2JqZWN0LGNvbXB1dGVkOiJfZ2V0UHJlZGVjZXNzb3JzKF9ub2RlLCBncmFwaEhpZXJhcmNoeSkifSxfZnVuY3Rpb25Vc2FnZXM6e3R5cGU6QXJyYXksY29tcHV0ZWQ6Il9nZXRGdW5jdGlvblVzYWdlcyhfbm9kZSwgZ3JhcGhIaWVyYXJjaHkpIn0sX3N1Ym5vZGVzOnt0eXBlOkFycmF5LGNvbXB1dGVkOiJfZ2V0U3Vibm9kZXMoX25vZGUpIn0sX2V4cGFuZGVkOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITB9LF90b3RhbFByZWRlY2Vzc29yczp7dHlwZTpOdW1iZXIsY29tcHV0ZWQ6Il9nZXRUb3RhbFByZWQoX3ByZWRlY2Vzc29ycykifSxfdG90YWxTdWNjZXNzb3JzOnt0eXBlOk51bWJlcixjb21wdXRlZDoiX2dldFRvdGFsU3VjYyhfc3VjY2Vzc29ycykifSxfb3BlbmVkQ29udHJvbFByZWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sX29wZW5lZENvbnRyb2xTdWNjOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LF9hdXhCdXR0b25UZXh0OlN0cmluZyxfZ3JvdXBCdXR0b25UZXh0OlN0cmluZ30sCmV4cGFuZE5vZGU6ZnVuY3Rpb24oKXt0aGlzLmZpcmUoIl9ub2RlLmV4cGFuZCIsdGhpcy5ub2RlKX0sX2dldFRlbXBsYXRlSW5kZXg6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuZ2V0VGVtcGxhdGVJbmRleCgpfSxfZ2V0Tm9kZTpmdW5jdGlvbihhLGMpe3JldHVybiBjLm5vZGUoYSl9LF9nZXROb2RlU3RhdHM6ZnVuY3Rpb24oYSxjKXtyZXR1cm4oYT10aGlzLl9nZXROb2RlKGEsYykpP2Euc3RhdHM6bnVsbH0sX2dldFRvdGFsTWljcm9zOmZ1bmN0aW9uKGEpe3JldHVybiBhP2EuZ2V0VG90YWxNaWNyb3MoKTowfSxfZ2V0SGFzRGlzcGxheWFibGVOb2RlU3RhdHM6ZnVuY3Rpb24oYSl7cmV0dXJuIHRmLmdyYXBoLnV0aWwuaGFzRGlzcGxheWFibGVOb2RlU3RhdHMoYSl9LF9nZXROb2RlU3RhdHNGb3JtYXR0ZWRCeXRlczpmdW5jdGlvbihhKXtpZihhJiZhLnRvdGFsQnl0ZXMpcmV0dXJuIHRmLmdyYXBoLnV0aWwuY29udmVydFVuaXRzVG9IdW1hblJlYWRhYmxlKGEudG90YWxCeXRlcyx0Zi5ncmFwaC51dGlsLk1FTU9SWV9VTklUUyl9LApfZ2V0Tm9kZVN0YXRzRm9ybWF0dGVkQ29tcHV0ZVRpbWU6ZnVuY3Rpb24oYSl7aWYoYSYmYS5nZXRUb3RhbE1pY3JvcygpKXJldHVybiB0Zi5ncmFwaC51dGlsLmNvbnZlcnRVbml0c1RvSHVtYW5SZWFkYWJsZShhLmdldFRvdGFsTWljcm9zKCksdGYuZ3JhcGgudXRpbC5USU1FX1VOSVRTKX0sX2dldE5vZGVTdGF0c0Zvcm1hdHRlZE91dHB1dFNpemVzOmZ1bmN0aW9uKGEpe2lmKGEmJmEub3V0cHV0U2l6ZSYmYS5vdXRwdXRTaXplLmxlbmd0aClyZXR1cm4gXy5tYXAoYS5vdXRwdXRTaXplLGZ1bmN0aW9uKGMpe3JldHVybiAwPT09Yy5sZW5ndGg/InNjYWxhciI6IlsiK2Muam9pbigiLCAiKSsiXSJ9KX0sX2dldFByaW50YWJsZUhUTUxOb2RlTmFtZTpmdW5jdGlvbihhKXtyZXR1cm4oYXx8IiIpLnJlcGxhY2UoL1wvL2csIlx4M2N3YnJceDNlLyIpfSxfZ2V0UmVuZGVySW5mbzpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5yZW5kZXJIaWVyYXJjaHkuZ2V0T3JDcmVhdGVSZW5kZXJOb2RlQnlOYW1lKGEpfSwKX2dldEF0dHJpYnV0ZXM6ZnVuY3Rpb24oYSl7dGhpcy5hc3luYyh0aGlzLl9yZXNpemVMaXN0LmJpbmQodGhpcywiI2F0dHJpYnV0ZXNMaXN0IikpO2lmKCFhfHwhYS5hdHRyKXJldHVybltdO3ZhciBjPVtdO18uZWFjaChhLmF0dHIsZnVuY3Rpb24oZCl7ZC5rZXk9PT10Zi5ncmFwaC5MQVJHRV9BVFRSU19LRVk/Yz1jLmNvbmNhdChkLnZhbHVlLmxpc3Qucy5tYXAoZnVuY3Rpb24oZil7cmV0dXJue2tleTpmLHZhbHVlOiJUb28gbGFyZ2UgdG8gc2hvdy4uLiJ9fSkpOmMucHVzaCh7a2V5OmQua2V5LHZhbHVlOkpTT04uc3RyaW5naWZ5KGQudmFsdWUpfSl9KTtyZXR1cm4gY30sX2dldERldmljZTpmdW5jdGlvbihhKXtyZXR1cm4gYT9hLmRldmljZTpudWxsfSxfZ2V0U3VjY2Vzc29ycyhhLGMpe3RoaXMuX3JlZnJlc2hOb2RlSXRlbUxpc3QoImlucHV0c0xpc3QiKTtyZXR1cm4gYT90aGlzLl9jb252ZXJ0RWRnZUxpc3RUb0VkZ2VJbmZvTGlzdChjLmdldFN1Y2Nlc3NvcnMoYS5uYW1lKSwKITEsYS5pc0dyb3VwTm9kZSk6e3JlZ3VsYXI6W10sY29udHJvbDpbXX19LF9nZXRQcmVkZWNlc3NvcnMoYSxjKXt0aGlzLl9yZWZyZXNoTm9kZUl0ZW1MaXN0KCJvdXRwdXRzTGlzdCIpO3JldHVybiBhP3RoaXMuX2NvbnZlcnRFZGdlTGlzdFRvRWRnZUluZm9MaXN0KGMuZ2V0UHJlZGVjZXNzb3JzKGEubmFtZSksITAsYS5pc0dyb3VwTm9kZSk6e3JlZ3VsYXI6W10sY29udHJvbDpbXX19LF9nZXRGdW5jdGlvblVzYWdlcyhhLGMpe3RoaXMuX3JlZnJlc2hOb2RlSXRlbUxpc3QoImZ1bmN0aW9uVXNhZ2VzTGlzdCIpO3JldHVybiBhJiZhLnR5cGU9PT10Zi5ncmFwaC5Ob2RlVHlwZS5NRVRBPyhhPWMubGlicmFyeUZ1bmN0aW9uc1thLmFzc29jaWF0ZWRGdW5jdGlvbl0pP2EudXNhZ2VzOltdOltdfSxfcmVmcmVzaE5vZGVJdGVtTGlzdChhKXt0aGlzLmFzeW5jKHRoaXMuX3Jlc2l6ZUxpc3QuYmluZCh0aGlzLGAjJHthfWApKX0sX2NvbnZlcnRFZGdlTGlzdFRvRWRnZUluZm9MaXN0OmZ1bmN0aW9uKGEsCmMsZCl7dmFyIGY9bD0+Xy5tYXAobC5iYXNlRWRnZUxpc3Qsaz0+e3ZhciBtPWM/ay52OmsudztyZXR1cm57bmFtZTptLG5vZGU6dGhpcy5fZ2V0Tm9kZShtLHRoaXMuZ3JhcGhIaWVyYXJjaHkpLGVkZ2VMYWJlbDp0Zi5ncmFwaC5zY2VuZS5lZGdlLmdldExhYmVsRm9yQmFzZUVkZ2Uoayx0aGlzLnJlbmRlckhpZXJhcmNoeSkscmVuZGVySW5mbzp0aGlzLl9nZXRSZW5kZXJJbmZvKG0sdGhpcy5yZW5kZXJIaWVyYXJjaHkpfX0pLGc9ZnVuY3Rpb24obCl7dmFyIGs9W107Xy5lYWNoKGwsbT0+e3ZhciBwPWM/bS52Om0udztkJiYxIT1tLmJhc2VFZGdlTGlzdC5sZW5ndGg/ay5wdXNoKHtuYW1lOnAsbm9kZTp0aGlzLl9nZXROb2RlKHAsdGhpcy5ncmFwaEhpZXJhcmNoeSksZWRnZUxhYmVsOnRmLmdyYXBoLnNjZW5lLmVkZ2UuZ2V0TGFiZWxGb3JFZGdlKG0sdGhpcy5yZW5kZXJIaWVyYXJjaHkpLHJlbmRlckluZm86dGhpcy5fZ2V0UmVuZGVySW5mbyhwLHRoaXMucmVuZGVySGllcmFyY2h5KX0pOgprPWsuY29uY2F0KGYobSkpfSk7cmV0dXJuIGt9LmJpbmQodGhpcyk7cmV0dXJue3JlZ3VsYXI6ZyhhLnJlZ3VsYXIpLGNvbnRyb2w6ZyhhLmNvbnRyb2wpfX0sX2dldFN1Ym5vZGVzOmZ1bmN0aW9uKGEpe3JldHVybiBhJiZhLm1ldGFncmFwaD9hLm1ldGFncmFwaC5ub2RlcygpOm51bGx9LF9nZXRUb3RhbFByZWQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEucmVndWxhci5sZW5ndGgrYS5jb250cm9sLmxlbmd0aH0sX2dldFRvdGFsU3VjYzpmdW5jdGlvbihhKXtyZXR1cm4gYS5yZWd1bGFyLmxlbmd0aCthLmNvbnRyb2wubGVuZ3RofSxfdG9nZ2xlQ29udHJvbFByZWQ6ZnVuY3Rpb24oKXt0aGlzLl9vcGVuZWRDb250cm9sUHJlZD0hdGhpcy5fb3BlbmVkQ29udHJvbFByZWR9LF90b2dnbGVDb250cm9sU3VjYzpmdW5jdGlvbigpe3RoaXMuX29wZW5lZENvbnRyb2xTdWNjPSF0aGlzLl9vcGVuZWRDb250cm9sU3VjY30sX3RvZ2dsZUV4cGFuZGVkOmZ1bmN0aW9uKCl7dGhpcy5fZXhwYW5kZWQ9CiF0aGlzLl9leHBhbmRlZH0sX2dldFRvZ2dsZUljb246ZnVuY3Rpb24oYSl7cmV0dXJuIGE/ImV4cGFuZC1sZXNzIjoiZXhwYW5kLW1vcmUifSxfcmVzZXRTdGF0ZTpmdW5jdGlvbigpe3RoaXMuX29wZW5lZENvbnRyb2xTdWNjPXRoaXMuX29wZW5lZENvbnRyb2xQcmVkPSExO3RoaXMuc2V0KCJfZ3JvdXBCdXR0b25UZXh0Iix0Zi5ncmFwaC5zY2VuZS5ub2RlLmdldEdyb3VwU2V0dGluZ0xhYmVsKHRoaXMuX25vZGUpKTt0aGlzLl9ub2RlJiYoUG9seW1lci5kb20odGhpcy4kLm5vZGV0aXRsZSkuaW5uZXJIVE1MPXRoaXMuX2dldFByaW50YWJsZUhUTUxOb2RlTmFtZSh0aGlzLl9ub2RlLm5hbWUpKX0sX3Jlc2l6ZUxpc3Q6ZnVuY3Rpb24oYSl7KGE9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihhKSkmJmEuZmlyZSgiaXJvbi1yZXNpemUiKX0sX3RvZ2dsZUluY2x1ZGU6ZnVuY3Rpb24oKXt0aGlzLmZpcmUoIm5vZGUtdG9nZ2xlLWluY2x1c2lvbiIse25hbWU6dGhpcy5ub2RlTmFtZX0pfSwKX25vZGVJbmNsdWRlU3RhdGVDaGFuZ2VkOmZ1bmN0aW9uKGEpe3RoaXMuc2V0KCJfYXV4QnV0dG9uVGV4dCIsdGYuZ3JhcGguZ2V0SW5jbHVkZU5vZGVCdXR0b25TdHJpbmcoYSkpfSxfdG9nZ2xlR3JvdXA6ZnVuY3Rpb24oKXt2YXIgYT10Zi5ncmFwaC5zY2VuZS5ub2RlLmdldFNlcmllc05hbWUodGhpcy5fbm9kZSk7dGhpcy5maXJlKCJub2RlLXRvZ2dsZS1zZXJpZXNncm91cCIse25hbWU6YX0pfSxfaXNMaWJyYXJ5RnVuY3Rpb24oYSl7cmV0dXJuIGEmJmEubmFtZS5zdGFydHNXaXRoKHRmLmdyYXBoLkZVTkNUSU9OX0xJQlJBUllfTk9ERV9QUkVGSVgpfSxfaXNJblNlcmllczpmdW5jdGlvbihhKXtyZXR1cm4gdGYuZ3JhcGguc2NlbmUubm9kZS5jYW5CZUluU2VyaWVzKGEpfX0pfSkoKTsKPC9zY3JpcHQ+CjwvZG9tLW1vZHVsZT4KCgo8ZG9tLW1vZHVsZSBpZD0idGYtZ3JhcGgtaW5mbyI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIG1hcmdpbjogMDsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIG1heC1oZWlnaHQ6IDY1MHB4OwogICAgICAgIG92ZXJmbG93LXg6IGhpZGRlbjsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICB9CgogICAgICBoMiB7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICB9CiAgICA8L3N0eWxlPgogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJ7e3NlbGVjdGVkTm9kZX19Ij4KICAgICAgPHBhcGVyLW1hdGVyaWFsIGVsZXZhdGlvbj0iMSIgY2xhc3M9ImNhcmQiPgogICAgICAgIDx0Zi1ub2RlLWluZm8gZ3JhcGgtaGllcmFyY2h5PSJbW2dyYXBoSGllcmFyY2h5XV0iIHJlbmRlci1oaWVyYXJjaHk9IltbcmVuZGVySGllcmFyY2h5XV0iIGZsYXQtZ3JhcGg9IltbZ3JhcGhdXSIgbm9kZS1uYW1lPSJbW3NlbGVjdGVkTm9kZV1dIiBub2RlLWluY2x1ZGU9Iltbc2VsZWN0ZWROb2RlSW5jbHVkZV1dIiBoaWdobGlnaHRlZC1ub2RlPSJ7e2hpZ2hsaWdodGVkTm9kZX19IiBjb2xvci1ieT0iW1tjb2xvckJ5XV0iPgogICAgICAgIDwvdGYtbm9kZS1pbmZvPgogICAgICA8L3BhcGVyLW1hdGVyaWFsPgogICAgPC90ZW1wbGF0ZT4KICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfZXF1YWxzKGNvbG9yQnksICdvcF9jb21wYXRpYmlsaXR5JyldXSI+CiAgICAgIDx0Zi1ncmFwaC1vcC1jb21wYXQtY2FyZCBncmFwaC1oaWVyYXJjaHk9IltbZ3JhcGhIaWVyYXJjaHldXSIgaGllcmFyY2h5LXBhcmFtcz0iW1toaWVyYXJjaHlQYXJhbXNdXSIgcmVuZGVyLWhpZXJhcmNoeT0iW1tyZW5kZXJIaWVyYXJjaHldXSIgY29sb3ItYnk9IltbY29sb3JCeV1dIiBub2RlLXRpdGxlPSJbW2NvbXBhdE5vZGVUaXRsZV1dIj4KICAgICAgPC90Zi1ncmFwaC1vcC1jb21wYXQtY2FyZD4KICAgIDwvdGVtcGxhdGU+CiAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2hlYWx0aFBpbGxzQXZhaWxhYmxlKGRlYnVnZ2VyRGF0YUVuYWJsZWQsIG5vZGVOYW1lc1RvSGVhbHRoUGlsbHMpXV0iPgogICAgICA8dGYtZ3JhcGgtZGVidWdnZXItZGF0YS1jYXJkIHJlbmRlci1oaWVyYXJjaHk9IltbcmVuZGVySGllcmFyY2h5XV0iIGRlYnVnZ2VyLW51bWVyaWMtYWxlcnRzPSJbW2RlYnVnZ2VyTnVtZXJpY0FsZXJ0c11dIiBub2RlLW5hbWVzLXRvLWhlYWx0aC1waWxscz0iW1tub2RlTmFtZXNUb0hlYWx0aFBpbGxzXV0iIHNlbGVjdGVkLW5vZGU9Int7c2VsZWN0ZWROb2RlfX0iIGhpZ2hsaWdodGVkLW5vZGU9Int7aGlnaGxpZ2h0ZWROb2RlfX0iIGFyZS1oZWFsdGgtcGlsbHMtbG9hZGluZz0iW1thcmVIZWFsdGhQaWxsc0xvYWRpbmddXSIgYWxsLXN0ZXBzLW1vZGUtZW5hYmxlZD0ie3thbGxTdGVwc01vZGVFbmFibGVkfX0iIHNwZWNpZmljLWhlYWx0aC1waWxsLXN0ZXA9Int7c3BlY2lmaWNIZWFsdGhQaWxsU3RlcH19IiBoZWFsdGgtcGlsbC1zdGVwLWluZGV4PSJ7e2hlYWx0aFBpbGxTdGVwSW5kZXh9fSI+CiAgICAgIDwvdGYtZ3JhcGgtZGVidWdnZXItZGF0YS1jYXJkPgogICAgPC90ZW1wbGF0ZT4KICA8L3RlbXBsYXRlPgogIDxzY3JpcHQ+Ly9+fldFQlBBVEh+fi90Zi1ncmFwaC1pbmZvL3RmLWdyYXBoLWluZm8uaHRtbC5qcwooZnVuY3Rpb24oKXtQb2x5bWVyKHtpczoidGYtZ3JhcGgtaW5mbyIscHJvcGVydGllczp7dGl0bGU6U3RyaW5nLGdyYXBoSGllcmFyY2h5Ok9iamVjdCxncmFwaDpPYmplY3QscmVuZGVySGllcmFyY2h5Ok9iamVjdCxub2RlTmFtZXNUb0hlYWx0aFBpbGxzOk9iamVjdCxoZWFsdGhQaWxsU3RlcEluZGV4Ont0eXBlOk51bWJlcixub3RpZnk6ITB9LGNvbG9yQnk6U3RyaW5nLGNvbXBhdE5vZGVUaXRsZTpTdHJpbmcsc2VsZWN0ZWROb2RlOnt0eXBlOlN0cmluZyxub3RpZnk6ITB9LGhpZ2hsaWdodGVkTm9kZTp7dHlwZTpTdHJpbmcsbm90aWZ5OiEwfSxzZWxlY3RlZE5vZGVJbmNsdWRlOnt0eXBlOk51bWJlcixub3RpZnk6ITB9LGRlYnVnZ2VyRGF0YUVuYWJsZWQ6Qm9vbGVhbn0sbGlzdGVuZXJzOnsibm9kZS1saXN0LWl0ZW0tY2xpY2siOiJfbm9kZUxpc3RJdGVtQ2xpY2tlZCIsIm5vZGUtbGlzdC1pdGVtLW1vdXNlb3ZlciI6Il9ub2RlTGlzdEl0ZW1Nb3VzZW92ZXIiLCJub2RlLWxpc3QtaXRlbS1tb3VzZW91dCI6Il9ub2RlTGlzdEl0ZW1Nb3VzZW91dCJ9LApfbm9kZUxpc3RJdGVtQ2xpY2tlZDpmdW5jdGlvbihhKXt0aGlzLnNlbGVjdGVkTm9kZT1hLmRldGFpbC5ub2RlTmFtZX0sX25vZGVMaXN0SXRlbU1vdXNlb3ZlcjpmdW5jdGlvbihhKXt0aGlzLmhpZ2hsaWdodGVkTm9kZT1hLmRldGFpbC5ub2RlTmFtZX0sX25vZGVMaXN0SXRlbU1vdXNlb3V0OmZ1bmN0aW9uKCl7dGhpcy5oaWdobGlnaHRlZE5vZGU9bnVsbH0sX2hlYWx0aFBpbGxzQXZhaWxhYmxlOmZ1bmN0aW9uKGEsYyl7cmV0dXJuIGEmJmMmJjA8T2JqZWN0LmtleXMoYykubGVuZ3RofSxfZXF1YWxzOmZ1bmN0aW9uKGEsYyl7cmV0dXJuIGE9PT1jfX0pfSkoKTsKPC9zY3JpcHQ+CjwvZG9tLW1vZHVsZT4KCgoKCjxkb20tbW9kdWxlIGlkPSJ0Zi1ncmFwaC1ib2FyZCI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICA6Omhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CgogICAgICAvZGVlcC8gLmNsb3NlIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIGxlZnQ6IDE1cHg7CiAgICAgICAgYm90dG9tOiAxNXB4OwogICAgICB9CgogICAgICAuY29udGFpbmVyIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgfQoKICAgICAgLmNvbnRhaW5lci5sb2FkaW5nIHsKICAgICAgICBjdXJzb3I6IHByb2dyZXNzOwogICAgICAgIG9wYWNpdHk6IDAuMTsKICAgICAgfQoKICAgICAgLmNvbnRhaW5lci5sb2FkaW5nLmVycm9yIHsKICAgICAgICBjdXJzb3I6IGF1dG87CiAgICAgIH0KCiAgICAgICNpbmZvIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgcmlnaHQ6IDVweDsKICAgICAgICB0b3A6IDVweDsKICAgICAgICBwYWRkaW5nOiAwcHg7CiAgICAgICAgbWF4LXdpZHRoOiAzODBweDsKICAgICAgICBtaW4td2lkdGg6IDMyMHB4OwogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45KTsKICAgICAgICBAYXBwbHkgLS1zaGFkb3ctZWxldmF0aW9uLTJkcDsKICAgICAgfQoKICAgICAgI21haW4gewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgfQoKICAgICAgI3Byb2dyZXNzLWJhciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogNDBweDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgfQoKICAgICAgI3Byb2dyZXNzLW1zZyB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogNXB4OwogICAgICAgIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKICAgICAgICB3aWR0aDogNDAwcHg7CiAgICAgIH0KCiAgICAgIHBhcGVyLXByb2dyZXNzIHsKICAgICAgICB3aWR0aDogNDAwcHg7CiAgICAgICAgLS1wYXBlci1wcm9ncmVzcy1oZWlnaHQ6IDZweDsKICAgICAgICAtLXBhcGVyLXByb2dyZXNzLWFjdGl2ZS1jb2xvcjogI2YzOTEzZTsKICAgICAgfQoKICAgICAgLmNvbnRleHQtbWVudSB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2UyZTJlMjsKICAgICAgICBib3JkZXItcmFkaXVzOiAycHg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIG1pbi13aWR0aDogMTUwcHg7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2Q0ZDRkNDsKICAgICAgfQoKICAgICAgL2RlZXAvIC5jb250ZXh0LW1lbnUgdWwgewogICAgICAgIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICAgIH0KCiAgICAgIC9kZWVwLyAuY29udGV4dC1tZW51IHVsIGxpIHsKICAgICAgICBwYWRkaW5nOiA0cHggMTZweDsKICAgICAgfQoKICAgICAgL2RlZXAvIC5jb250ZXh0LW1lbnUgdWwgbGk6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmMzkxM2U7CiAgICAgICAgY29sb3I6IHdoaXRlOwogICAgICB9CiAgICA8L3N0eWxlPgogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19pc05vdENvbXBsZXRlKHByb2dyZXNzKV1dIj4KICAgICAgPGRpdiBpZD0icHJvZ3Jlc3MtYmFyIj4KICAgICAgICA8ZGl2IGlkPSJwcm9ncmVzcy1tc2ciPltbcHJvZ3Jlc3MubXNnXV08L2Rpdj4KICAgICAgICA8cGFwZXItcHJvZ3Jlc3MgdmFsdWU9IltbcHJvZ3Jlc3MudmFsdWVdXSI+PC9wYXBlci1wcm9ncmVzcz4KICAgICAgPC9kaXY+CiAgICA8L3RlbXBsYXRlPgogICAgPGRpdiBjbGFzcyQ9IltbX2dldENvbnRhaW5lckNsYXNzKHByb2dyZXNzKV1dIj4KICAgICAgPGRpdiBpZD0ibWFpbiI+CiAgICAgICAgPHRmLWdyYXBoIGlkPSJncmFwaCIgZ3JhcGgtaGllcmFyY2h5PSJ7e2dyYXBoSGllcmFyY2h5fX0iIGJhc2ljLWdyYXBoPSJbW2dyYXBoXV0iIGhpZXJhcmNoeS1wYXJhbXM9IltbaGllcmFyY2h5UGFyYW1zXV0iIHJlbmRlci1oaWVyYXJjaHk9Int7cmVuZGVySGllcmFyY2h5fX0iIGRldmljZXMtZm9yLXN0YXRzPSJbW2RldmljZXNGb3JTdGF0c11dIiBzdGF0cz0iW1tzdGF0c11dIiBzZWxlY3RlZC1ub2RlPSJ7e3NlbGVjdGVkTm9kZX19IiBoaWdobGlnaHRlZC1ub2RlPSJ7e19oaWdobGlnaHRlZE5vZGV9fSIgY29sb3ItYnk9IltbY29sb3JCeV1dIiBjb2xvci1ieS1wYXJhbXM9Int7Y29sb3JCeVBhcmFtc319IiBwcm9ncmVzcz0ie3twcm9ncmVzc319IiBlZGdlLWxhYmVsLWZ1bmN0aW9uPSJbW2VkZ2VMYWJlbEZ1bmN0aW9uXV0iIGVkZ2Utd2lkdGgtZnVuY3Rpb249IltbZWRnZVdpZHRoRnVuY3Rpb25dXSIgbm9kZS1uYW1lcy10by1oZWFsdGgtcGlsbHM9Iltbbm9kZU5hbWVzVG9IZWFsdGhQaWxsc11dIiBoZWFsdGgtcGlsbC1zdGVwLWluZGV4PSJbW2hlYWx0aFBpbGxTdGVwSW5kZXhdXSIgaGFuZGxlLW5vZGUtc2VsZWN0ZWQ9IltbaGFuZGxlTm9kZVNlbGVjdGVkXV0iIGhhbmRsZS1lZGdlLXNlbGVjdGVkPSJbW2hhbmRsZUVkZ2VTZWxlY3RlZF1dIiB0cmFjZS1pbnB1dHM9IltbdHJhY2VJbnB1dHNdXSI+PC90Zi1ncmFwaD4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgaWQ9ImluZm8iPgogICAgICAgIDx0Zi1ncmFwaC1pbmZvIGlkPSJncmFwaC1pbmZvIiB0aXRsZT0ic2VsZWN0ZWQiIGdyYXBoLWhpZXJhcmNoeT0iW1tncmFwaEhpZXJhcmNoeV1dIiBoaWVyYXJjaHktcGFyYW1zPSJbW2hpZXJhcmNoeVBhcmFtc11dIiByZW5kZXItaGllcmFyY2h5PSJbW3JlbmRlckhpZXJhcmNoeV1dIiBncmFwaD0iW1tncmFwaF1dIiBzZWxlY3RlZC1ub2RlPSJ7e3NlbGVjdGVkTm9kZX19IiBzZWxlY3RlZC1ub2RlLWluY2x1ZGU9Int7X3NlbGVjdGVkTm9kZUluY2x1ZGV9fSIgaGlnaGxpZ2h0ZWQtbm9kZT0ie3tfaGlnaGxpZ2h0ZWROb2RlfX0iIGNvbG9yLWJ5PSJbW2NvbG9yQnldXSIgY29sb3ItYnktcGFyYW1zPSJbW2NvbG9yQnlQYXJhbXNdXSIgZGVidWdnZXItZGF0YS1lbmFibGVkPSJbW2RlYnVnZ2VyRGF0YUVuYWJsZWRdXSIgYXJlLWhlYWx0aC1waWxscy1sb2FkaW5nPSJbW2FyZUhlYWx0aFBpbGxzTG9hZGluZ11dIiBkZWJ1Z2dlci1udW1lcmljLWFsZXJ0cz0iW1tkZWJ1Z2dlck51bWVyaWNBbGVydHNdXSIgbm9kZS1uYW1lcy10by1oZWFsdGgtcGlsbHM9Iltbbm9kZU5hbWVzVG9IZWFsdGhQaWxsc11dIiBhbGwtc3RlcHMtbW9kZS1lbmFibGVkPSJ7e2FsbFN0ZXBzTW9kZUVuYWJsZWR9fSIgc3BlY2lmaWMtaGVhbHRoLXBpbGwtc3RlcD0ie3tzcGVjaWZpY0hlYWx0aFBpbGxTdGVwfX0iIGhlYWx0aC1waWxsLXN0ZXAtaW5kZXg9Int7aGVhbHRoUGlsbFN0ZXBJbmRleH19IiBjb21wYXQtbm9kZS10aXRsZT0iW1tjb21wYXROb2RlVGl0bGVdXSIgb24tbm9kZS10b2dnbGUtaW5jbHVzaW9uPSJfb25Ob2RlSW5jbHVzaW9uVG9nZ2xlZCIgb24tbm9kZS10b2dnbGUtc2VyaWVzZ3JvdXA9Il9vbk5vZGVTZXJpZXNHcm91cFRvZ2dsZWQiPjwvdGYtZ3JhcGgtaW5mbz4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+Cgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdGYtZ3JhcGgtYm9hcmQvdGYtZ3JhcGgtYm9hcmQuaHRtbC5qcwpQb2x5bWVyKHtpczoidGYtZ3JhcGgtYm9hcmQiLHByb3BlcnRpZXM6e2dyYXBoSGllcmFyY2h5Ok9iamVjdCxncmFwaDpPYmplY3Qsc3RhdHM6T2JqZWN0LHByb2dyZXNzOk9iamVjdCx0cmFjZUlucHV0czpCb29sZWFuLGNvbG9yQnk6U3RyaW5nLGNvbG9yQnlQYXJhbXM6e3R5cGU6T2JqZWN0LG5vdGlmeTohMH0scmVuZGVySGllcmFyY2h5Ont0eXBlOk9iamVjdCxub3RpZnk6ITB9LGRlYnVnZ2VyRGF0YUVuYWJsZWQ6Qm9vbGVhbixhcmVIZWFsdGhQaWxsc0xvYWRpbmc6Qm9vbGVhbixkZWJ1Z2dlck51bWVyaWNBbGVydHM6e3R5cGU6QXJyYXksbm90aWZ5OiEwfSxub2RlTmFtZXNUb0hlYWx0aFBpbGxzOk9iamVjdCxhbGxTdGVwc01vZGVFbmFibGVkOnt0eXBlOkJvb2xlYW4sbm90aWZ5OiEwLHZhbHVlOiExfSxzcGVjaWZpY0hlYWx0aFBpbGxTdGVwOnt0eXBlOk51bWJlcixub3RpZnk6ITAsdmFsdWU6MH0saGVhbHRoUGlsbFN0ZXBJbmRleDpOdW1iZXIsc2VsZWN0ZWROb2RlOnt0eXBlOlN0cmluZywKbm90aWZ5OiEwfSxjb21wYXROb2RlVGl0bGU6e3R5cGU6U3RyaW5nLHZhbHVlOiJUUFUgQ29tcGF0aWJpbGl0eSJ9LGVkZ2VXaWR0aEZ1bmN0aW9uOk9iamVjdCxfc2VsZWN0ZWROb2RlSW5jbHVkZTpOdW1iZXIsX2hpZ2hsaWdodGVkTm9kZTpTdHJpbmcsaGFuZGxlTm9kZVNlbGVjdGVkOk9iamVjdCxlZGdlTGFiZWxGdW5jdGlvbjpPYmplY3QsaGFuZGxlRWRnZVNlbGVjdGVkOk9iamVjdH0sb2JzZXJ2ZXJzOlsiX3VwZGF0ZU5vZGVJbmNsdWRlKHNlbGVjdGVkTm9kZSwgcmVuZGVySGllcmFyY2h5KSJdLGZpdDpmdW5jdGlvbigpe3RoaXMuJC5ncmFwaC5maXQoKX0sX2lzTm90Q29tcGxldGU6ZnVuY3Rpb24oYSl7cmV0dXJuIDEwMD5hLnZhbHVlfSxfZ2V0Q29udGFpbmVyQ2xhc3M6ZnVuY3Rpb24oYSl7dmFyIGM9ImNvbnRhaW5lciI7YS5lcnJvciYmKGMrPSIgZXJyb3IiKTt0aGlzLl9pc05vdENvbXBsZXRlKGEpJiYoYys9IiBsb2FkaW5nIik7cmV0dXJuIGN9LF9vbk5vZGVJbmNsdXNpb25Ub2dnbGVkKGEpe3RoaXMuJC5ncmFwaC5ub2RlVG9nZ2xlRXh0cmFjdChhLmRldGFpbC5uYW1lKX0sCl9vbk5vZGVTZXJpZXNHcm91cFRvZ2dsZWQoYSl7dGhpcy4kLmdyYXBoLm5vZGVUb2dnbGVTZXJpZXNHcm91cChhLmRldGFpbC5uYW1lKX0sX3VwZGF0ZU5vZGVJbmNsdWRlKCl7Y29uc3QgYT10aGlzLnJlbmRlckhpZXJhcmNoeT90aGlzLnJlbmRlckhpZXJhcmNoeS5nZXROb2RlQnlOYW1lKHRoaXMuc2VsZWN0ZWROb2RlKTpudWxsO3RoaXMuX3NlbGVjdGVkTm9kZUluY2x1ZGU9YT9hLmluY2x1ZGU6dGYuZ3JhcGguSW5jbHVzaW9uVHlwZS5VTlNQRUNJRklFRH19KTsKPC9zY3JpcHQ+CgoKCgoKCgoKCgoKCjxzY3JpcHQ+Ly9+fldFQlBBVEh+fi9pcm9uLW1lbnUtYmVoYXZpb3IvaXJvbi1tZW51YmFyLWJlaGF2aW9yLmh0bWwuanMKUG9seW1lci5Jcm9uTWVudWJhckJlaGF2aW9ySW1wbD17aG9zdEF0dHJpYnV0ZXM6e3JvbGU6Im1lbnViYXIifSxrZXlCaW5kaW5nczp7bGVmdDoiX29uTGVmdEtleSIscmlnaHQ6Il9vblJpZ2h0S2V5In0sX29uVXBLZXk6ZnVuY3Rpb24oYSl7dGhpcy5mb2N1c2VkSXRlbS5jbGljaygpO2EuZGV0YWlsLmtleWJvYXJkRXZlbnQucHJldmVudERlZmF1bHQoKX0sX29uRG93bktleTpmdW5jdGlvbihhKXt0aGlzLmZvY3VzZWRJdGVtLmNsaWNrKCk7YS5kZXRhaWwua2V5Ym9hcmRFdmVudC5wcmV2ZW50RGVmYXVsdCgpfSxnZXQgX2lzUlRMKCl7cmV0dXJuInJ0bCI9PT13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzKS5kaXJlY3Rpb259LF9vbkxlZnRLZXk6ZnVuY3Rpb24oYSl7dGhpcy5faXNSVEw/dGhpcy5fZm9jdXNOZXh0KCk6dGhpcy5fZm9jdXNQcmV2aW91cygpO2EuZGV0YWlsLmtleWJvYXJkRXZlbnQucHJldmVudERlZmF1bHQoKX0sX29uUmlnaHRLZXk6ZnVuY3Rpb24oYSl7dGhpcy5faXNSVEw/CnRoaXMuX2ZvY3VzUHJldmlvdXMoKTp0aGlzLl9mb2N1c05leHQoKTthLmRldGFpbC5rZXlib2FyZEV2ZW50LnByZXZlbnREZWZhdWx0KCl9LF9vbktleWRvd246ZnVuY3Rpb24oYSl7dGhpcy5rZXlib2FyZEV2ZW50TWF0Y2hlc0tleXMoYSwidXAgZG93biBsZWZ0IHJpZ2h0IGVzYyIpfHx0aGlzLl9mb2N1c1dpdGhLZXlib2FyZEV2ZW50KGEpfX07UG9seW1lci5Jcm9uTWVudWJhckJlaGF2aW9yPVtQb2x5bWVyLklyb25NZW51QmVoYXZpb3IsUG9seW1lci5Jcm9uTWVudWJhckJlaGF2aW9ySW1wbF07Cjwvc2NyaXB0PgoKCgoKCgoKCjxkb20tbW9kdWxlIGlkPSJwYXBlci1yYWRpby1idXR0b24iPgogIDx0ZW1wbGF0ZSBzdHJpcC13aGl0ZXNwYWNlPgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIGxpbmUtaGVpZ2h0OiAwOwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLWJhc2U7CiAgICAgICAgLS1jYWxjdWxhdGVkLXBhcGVyLXJhZGlvLWJ1dHRvbi1zaXplOiB2YXIoLS1wYXBlci1yYWRpby1idXR0b24tc2l6ZSwgMTZweCk7CiAgICAgICAgLyogLTFweCBpcyBhIHNlbnRpbmVsIGZvciB0aGUgZGVmYXVsdCBhbmQgaXMgcmVwbGFjZSBpbiBgYXR0YWNoZWRgLiAqLwogICAgICAgIC0tY2FsY3VsYXRlZC1wYXBlci1yYWRpby1idXR0b24taW5rLXNpemU6IHZhcigtLXBhcGVyLXJhZGlvLWJ1dHRvbi1pbmstc2l6ZSwgLTFweCk7CiAgICAgIH0KCiAgICAgIDpob3N0KDpmb2N1cykgewogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgIH0KCiAgICAgICNyYWRpb0NvbnRhaW5lciB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWlubGluZTsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtY2VudGVyLWNlbnRlcjsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItcmFkaW8tYnV0dG9uLXNpemUpOwogICAgICAgIGhlaWdodDogdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1yYWRpby1idXR0b24tc2l6ZSk7CiAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItcmFkaW8tYnV0dG9uLXJhZGlvLWNvbnRhaW5lcjsKICAgICAgfQoKICAgICAgI2luayB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogNTAlOwogICAgICAgIGxlZnQ6IDUwJTsKICAgICAgICByaWdodDogYXV0bzsKICAgICAgICB3aWR0aDogdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1yYWRpby1idXR0b24taW5rLXNpemUpOwogICAgICAgIGhlaWdodDogdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1yYWRpby1idXR0b24taW5rLXNpemUpOwogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1yYWRpby1idXR0b24tdW5jaGVja2VkLWluay1jb2xvciwgdmFyKC0tcHJpbWFyeS10ZXh0LWNvbG9yKSk7CiAgICAgICAgb3BhY2l0eTogMC42OwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7CiAgICAgIH0KCiAgICAgICNpbmtbY2hlY2tlZF0gewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1yYWRpby1idXR0b24tY2hlY2tlZC1pbmstY29sb3IsIHZhcigtLXByaW1hcnktY29sb3IpKTsKICAgICAgfQoKICAgICAgI29mZlJhZGlvLCAjb25SYWRpbyB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgfQoKICAgICAgI29mZlJhZGlvIHsKICAgICAgICBib3JkZXI6IDJweCBzb2xpZCB2YXIoLS1wYXBlci1yYWRpby1idXR0b24tdW5jaGVja2VkLWNvbG9yLCB2YXIoLS1wcmltYXJ5LXRleHQtY29sb3IpKTsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci1yYWRpby1idXR0b24tdW5jaGVja2VkLWJhY2tncm91bmQtY29sb3IsIHRyYW5zcGFyZW50KTsKICAgICAgICB0cmFuc2l0aW9uOiBib3JkZXItY29sb3IgMC4yOHM7CiAgICAgIH0KCiAgICAgICNvblJhZGlvIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci1yYWRpby1idXR0b24tY2hlY2tlZC1jb2xvciwgdmFyKC0tcHJpbWFyeS1jb2xvcikpOwogICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgwKTsKICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDApOwogICAgICAgIHRyYW5zaXRpb246IC13ZWJraXQtdHJhbnNmb3JtIGVhc2UgMC4yOHM7CiAgICAgICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIGVhc2UgMC4yOHM7CiAgICAgICAgd2lsbC1jaGFuZ2U6IHRyYW5zZm9ybTsKICAgICAgfQoKICAgICAgOmhvc3QoW2NoZWNrZWRdKSAjb2ZmUmFkaW8gewogICAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tcGFwZXItcmFkaW8tYnV0dG9uLWNoZWNrZWQtY29sb3IsIHZhcigtLXByaW1hcnktY29sb3IpKTsKICAgICAgfQoKICAgICAgOmhvc3QoW2NoZWNrZWRdKSAjb25SYWRpbyB7CiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDAuNSk7CiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwLjUpOwogICAgICB9CgogICAgICAjcmFkaW9MYWJlbCB7CiAgICAgICAgbGluZS1oZWlnaHQ6IG5vcm1hbDsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CiAgICAgICAgbWFyZ2luLWxlZnQ6IHZhcigtLXBhcGVyLXJhZGlvLWJ1dHRvbi1sYWJlbC1zcGFjaW5nLCAxMHB4KTsKICAgICAgICB3aGl0ZS1zcGFjZTogbm9ybWFsOwogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1yYWRpby1idXR0b24tbGFiZWwtY29sb3IsIHZhcigtLXByaW1hcnktdGV4dC1jb2xvcikpOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1yYWRpby1idXR0b24tbGFiZWw7CiAgICAgIH0KCiAgICAgIDpob3N0KFtjaGVja2VkXSkgI3JhZGlvTGFiZWwgewogICAgICAgIEBhcHBseSAtLXBhcGVyLXJhZGlvLWJ1dHRvbi1sYWJlbC1jaGVja2VkOwogICAgICB9CgogICAgICAjcmFkaW9MYWJlbDpkaXIocnRsKSB7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDA7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiB2YXIoLS1wYXBlci1yYWRpby1idXR0b24tbGFiZWwtc3BhY2luZywgMTBweCk7CiAgICAgIH0KCiAgICAgICNyYWRpb0xhYmVsW2hpZGRlbl0gewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KCiAgICAgIC8qIGRpc2FibGVkIHN0YXRlICovCgogICAgICA6aG9zdChbZGlzYWJsZWRdKSAjb2ZmUmFkaW8gewogICAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tcGFwZXItcmFkaW8tYnV0dG9uLXVuY2hlY2tlZC1jb2xvciwgdmFyKC0tcHJpbWFyeS10ZXh0LWNvbG9yKSk7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICB9CgogICAgICA6aG9zdChbZGlzYWJsZWRdW2NoZWNrZWRdKSAjb25SYWRpbyB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItcmFkaW8tYnV0dG9uLXVuY2hlY2tlZC1jb2xvciwgdmFyKC0tcHJpbWFyeS10ZXh0LWNvbG9yKSk7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICB9CgogICAgICA6aG9zdChbZGlzYWJsZWRdKSAjcmFkaW9MYWJlbCB7CiAgICAgICAgLyogc2xpZ2h0bHkgZGFya2VyIHRoYW4gdGhlIGJ1dHRvbiwgc28gdGhhdCBpdCdzIHJlYWRhYmxlICovCiAgICAgICAgb3BhY2l0eTogMC42NTsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8ZGl2IGlkPSJyYWRpb0NvbnRhaW5lciI+CiAgICAgIDxkaXYgaWQ9Im9mZlJhZGlvIj48L2Rpdj4KICAgICAgPGRpdiBpZD0ib25SYWRpbyI+PC9kaXY+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGlkPSJyYWRpb0xhYmVsIj48c2xvdD48L3Nsb3Q+PC9kaXY+CiAgPC90ZW1wbGF0ZT4KCiAgPHNjcmlwdD4vL35+V0VCUEFUSH5+L3BhcGVyLXJhZGlvLWJ1dHRvbi9wYXBlci1yYWRpby1idXR0b24uaHRtbC5qcwpQb2x5bWVyKHtpczoicGFwZXItcmFkaW8tYnV0dG9uIixiZWhhdmlvcnM6W1BvbHltZXIuUGFwZXJDaGVja2VkRWxlbWVudEJlaGF2aW9yXSxob3N0QXR0cmlidXRlczp7cm9sZToicmFkaW8iLCJhcmlhLWNoZWNrZWQiOiExLHRhYmluZGV4OjB9LHByb3BlcnRpZXM6e2FyaWFBY3RpdmVBdHRyaWJ1dGU6e3R5cGU6U3RyaW5nLHZhbHVlOiJhcmlhLWNoZWNrZWQifX0scmVhZHk6ZnVuY3Rpb24oKXt0aGlzLl9yaXBwbGVDb250YWluZXI9dGhpcy4kLnJhZGlvQ29udGFpbmVyfSxhdHRhY2hlZDpmdW5jdGlvbigpe1BvbHltZXIuUmVuZGVyU3RhdHVzLmFmdGVyTmV4dFJlbmRlcih0aGlzLGZ1bmN0aW9uKCl7aWYoIi0xcHgiPT09dGhpcy5nZXRDb21wdXRlZFN0eWxlVmFsdWUoIi0tY2FsY3VsYXRlZC1wYXBlci1yYWRpby1idXR0b24taW5rLXNpemUiKS50cmltKCkpe3ZhciBhPXBhcnNlRmxvYXQodGhpcy5nZXRDb21wdXRlZFN0eWxlVmFsdWUoIi0tY2FsY3VsYXRlZC1wYXBlci1yYWRpby1idXR0b24tc2l6ZSIpLnRyaW0oKSksCmM9TWF0aC5mbG9vcigzKmEpO2MlMiE9PWElMiYmYysrO3RoaXMudXBkYXRlU3R5bGVzKHsiLS1wYXBlci1yYWRpby1idXR0b24taW5rLXNpemUiOmMrInB4In0pfX0pfX0pOwo8L3NjcmlwdD4KPC9kb20tbW9kdWxlPgoKCgoKPGRvbS1tb2R1bGUgaWQ9InBhcGVyLXJhZGlvLWdyb3VwIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgIH0KCiAgICAgIDpob3N0IDo6c2xvdHRlZCgqKSB7CiAgICAgICAgcGFkZGluZzogdmFyKC0tcGFwZXItcmFkaW8tZ3JvdXAtaXRlbS1wYWRkaW5nLCAxMnB4KTsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8c2xvdD48L3Nsb3Q+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPgoKPHNjcmlwdD4vL35+V0VCUEFUSH5+L3BhcGVyLXJhZGlvLWdyb3VwL3BhcGVyLXJhZGlvLWdyb3VwLmh0bWwuanMKUG9seW1lcih7aXM6InBhcGVyLXJhZGlvLWdyb3VwIixiZWhhdmlvcnM6W1BvbHltZXIuSXJvbk1lbnViYXJCZWhhdmlvcl0saG9zdEF0dHJpYnV0ZXM6e3JvbGU6InJhZGlvZ3JvdXAifSxwcm9wZXJ0aWVzOnthdHRyRm9yU2VsZWN0ZWQ6e3R5cGU6U3RyaW5nLHZhbHVlOiJuYW1lIn0sc2VsZWN0ZWRBdHRyaWJ1dGU6e3R5cGU6U3RyaW5nLHZhbHVlOiJjaGVja2VkIn0sc2VsZWN0YWJsZTp7dHlwZTpTdHJpbmcsdmFsdWU6InBhcGVyLXJhZGlvLWJ1dHRvbiJ9LGFsbG93RW1wdHlTZWxlY3Rpb246e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX19LHNlbGVjdDpmdW5jdGlvbihhKXt2YXIgYz10aGlzLl92YWx1ZVRvSXRlbShhKTtpZighY3x8IWMuaGFzQXR0cmlidXRlKCJkaXNhYmxlZCIpKXtpZih0aGlzLnNlbGVjdGVkKXtjPXRoaXMuX3ZhbHVlVG9JdGVtKHRoaXMuc2VsZWN0ZWQpO2lmKHRoaXMuc2VsZWN0ZWQ9PWEpaWYodGhpcy5hbGxvd0VtcHR5U2VsZWN0aW9uKWE9IiI7ZWxzZXtjJiYKKGMuY2hlY2tlZD0hMCk7cmV0dXJufWMmJihjLmNoZWNrZWQ9ITEpfVBvbHltZXIuSXJvblNlbGVjdGFibGVCZWhhdmlvci5zZWxlY3QuYXBwbHkodGhpcyxbYV0pO3RoaXMuZmlyZSgicGFwZXItcmFkaW8tZ3JvdXAtY2hhbmdlZCIpfX0sX2FjdGl2YXRlRm9jdXNlZEl0ZW06ZnVuY3Rpb24oKXt0aGlzLl9pdGVtQWN0aXZhdGUodGhpcy5fdmFsdWVGb3JJdGVtKHRoaXMuZm9jdXNlZEl0ZW0pLHRoaXMuZm9jdXNlZEl0ZW0pfSxfb25VcEtleTpmdW5jdGlvbihhKXt0aGlzLl9mb2N1c1ByZXZpb3VzKCk7YS5wcmV2ZW50RGVmYXVsdCgpO3RoaXMuX2FjdGl2YXRlRm9jdXNlZEl0ZW0oKX0sX29uRG93bktleTpmdW5jdGlvbihhKXt0aGlzLl9mb2N1c05leHQoKTthLnByZXZlbnREZWZhdWx0KCk7dGhpcy5fYWN0aXZhdGVGb2N1c2VkSXRlbSgpfSxfb25MZWZ0S2V5OmZ1bmN0aW9uKGEpe1BvbHltZXIuSXJvbk1lbnViYXJCZWhhdmlvckltcGwuX29uTGVmdEtleS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7CnRoaXMuX2FjdGl2YXRlRm9jdXNlZEl0ZW0oKX0sX29uUmlnaHRLZXk6ZnVuY3Rpb24oYSl7UG9seW1lci5Jcm9uTWVudWJhckJlaGF2aW9ySW1wbC5fb25SaWdodEtleS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy5fYWN0aXZhdGVGb2N1c2VkSXRlbSgpfX0pOwo8L3NjcmlwdD4KCgoKCgoKCjxkb20tbW9kdWxlIGlkPSJwYXBlci10b29sdGlwIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICB6LWluZGV4OiAxMDAyOwogICAgICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgLW1zLXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICB9CgogICAgICAjdG9vbHRpcCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1iYXNlOwogICAgICAgIGZvbnQtc2l6ZTogMTBweDsKICAgICAgICBsaW5lLWhlaWdodDogMTsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci10b29sdGlwLWJhY2tncm91bmQsICM2MTYxNjEpOwogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci10b29sdGlwLXRleHQtY29sb3IsIHdoaXRlKTsKICAgICAgICBwYWRkaW5nOiA4cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMnB4OwogICAgICAgIEBhcHBseSAtLXBhcGVyLXRvb2x0aXA7CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMga2V5RnJhbWVTY2FsZVVwIHsKICAgICAgICAwJSB7CiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDAuMCk7CiAgICAgICAgfQogICAgICAgIDEwMCUgewogICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxLjApOwogICAgICAgIH0KICAgICAgfQoKICAgICAgQGtleWZyYW1lcyBrZXlGcmFtZVNjYWxlRG93biB7CiAgICAgICAgMCUgewogICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxLjApOwogICAgICAgIH0KICAgICAgICAxMDAlIHsKICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMC4wKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMga2V5RnJhbWVGYWRlSW5PcGFjaXR5IHsKICAgICAgICAwJSB7CiAgICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIH0KICAgICAgICAxMDAlIHsKICAgICAgICAgIG9wYWNpdHk6IHZhcigtLXBhcGVyLXRvb2x0aXAtb3BhY2l0eSwgMC45KTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMga2V5RnJhbWVGYWRlT3V0T3BhY2l0eSB7CiAgICAgICAgMCUgewogICAgICAgICAgb3BhY2l0eTogdmFyKC0tcGFwZXItdG9vbHRpcC1vcGFjaXR5LCAwLjkpOwogICAgICAgIH0KICAgICAgICAxMDAlIHsKICAgICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgfQogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIGtleUZyYW1lU2xpZGVEb3duSW4gewogICAgICAgIDAlIHsKICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMjAwMHB4KTsKICAgICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgfQogICAgICAgIDEwJSB7CiAgICAgICAgICBvcGFjaXR5OiAwLjI7CiAgICAgICAgfQogICAgICAgIDEwMCUgewogICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOwogICAgICAgICAgb3BhY2l0eTogdmFyKC0tcGFwZXItdG9vbHRpcC1vcGFjaXR5LCAwLjkpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgQGtleWZyYW1lcyBrZXlGcmFtZVNsaWRlRG93bk91dCB7CiAgICAgICAgMCUgewogICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOwogICAgICAgICAgb3BhY2l0eTogdmFyKC0tcGFwZXItdG9vbHRpcC1vcGFjaXR5LCAwLjkpOwogICAgICAgIH0KICAgICAgICAxMCUgewogICAgICAgICAgb3BhY2l0eTogMC4yOwogICAgICAgIH0KICAgICAgICAxMDAlIHsKICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMjAwMHB4KTsKICAgICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgfQogICAgICB9CgogICAgICAuZmFkZS1pbi1hbmltYXRpb24gewogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiB2YXIoLS1wYXBlci10b29sdGlwLWRlbGF5LWluLCA1MDBtcyk7CiAgICAgICAgYW5pbWF0aW9uLW5hbWU6IGtleUZyYW1lRmFkZUluT3BhY2l0eTsKICAgICAgICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiAxOwogICAgICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGVhc2UtaW47CiAgICAgICAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1wYXBlci10b29sdGlwLWR1cmF0aW9uLWluLCA1MDBtcyk7CiAgICAgICAgYW5pbWF0aW9uLWZpbGwtbW9kZTogZm9yd2FyZHM7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItdG9vbHRpcC1hbmltYXRpb247CiAgICAgIH0KCiAgICAgIC5mYWRlLW91dC1hbmltYXRpb24gewogICAgICAgIG9wYWNpdHk6IHZhcigtLXBhcGVyLXRvb2x0aXAtb3BhY2l0eSwgMC45KTsKICAgICAgICBhbmltYXRpb24tZGVsYXk6IHZhcigtLXBhcGVyLXRvb2x0aXAtZGVsYXktb3V0LCAwbXMpOwogICAgICAgIGFuaW1hdGlvbi1uYW1lOiBrZXlGcmFtZUZhZGVPdXRPcGFjaXR5OwogICAgICAgIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IDE7CiAgICAgICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogZWFzZS1pbjsKICAgICAgICBhbmltYXRpb24tZHVyYXRpb246IHZhcigtLXBhcGVyLXRvb2x0aXAtZHVyYXRpb24tb3V0LCA1MDBtcyk7CiAgICAgICAgYW5pbWF0aW9uLWZpbGwtbW9kZTogZm9yd2FyZHM7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItdG9vbHRpcC1hbmltYXRpb247CiAgICAgIH0KCiAgICAgIC5zY2FsZS11cC1hbmltYXRpb24gewogICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMCk7CiAgICAgICAgb3BhY2l0eTogdmFyKC0tcGFwZXItdG9vbHRpcC1vcGFjaXR5LCAwLjkpOwogICAgICAgIGFuaW1hdGlvbi1kZWxheTogdmFyKC0tcGFwZXItdG9vbHRpcC1kZWxheS1pbiwgNTAwbXMpOwogICAgICAgIGFuaW1hdGlvbi1uYW1lOiBrZXlGcmFtZVNjYWxlVXA7CiAgICAgICAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogMTsKICAgICAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBlYXNlLWluOwogICAgICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tcGFwZXItdG9vbHRpcC1kdXJhdGlvbi1pbiwgNTAwbXMpOwogICAgICAgIGFuaW1hdGlvbi1maWxsLW1vZGU6IGZvcndhcmRzOwogICAgICAgIEBhcHBseSAtLXBhcGVyLXRvb2x0aXAtYW5pbWF0aW9uOwogICAgICB9CgogICAgICAuc2NhbGUtZG93bi1hbmltYXRpb24gewogICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7CiAgICAgICAgb3BhY2l0eTogdmFyKC0tcGFwZXItdG9vbHRpcC1vcGFjaXR5LCAwLjkpOwogICAgICAgIGFuaW1hdGlvbi1kZWxheTogdmFyKC0tcGFwZXItdG9vbHRpcC1kZWxheS1vdXQsIDUwMG1zKTsKICAgICAgICBhbmltYXRpb24tbmFtZToga2V5RnJhbWVTY2FsZURvd247CiAgICAgICAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogMTsKICAgICAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBlYXNlLWluOwogICAgICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tcGFwZXItdG9vbHRpcC1kdXJhdGlvbi1vdXQsIDUwMG1zKTsKICAgICAgICBhbmltYXRpb24tZmlsbC1tb2RlOiBmb3J3YXJkczsKICAgICAgICBAYXBwbHkgLS1wYXBlci10b29sdGlwLWFuaW1hdGlvbjsKICAgICAgfQoKICAgICAgLnNsaWRlLWRvd24tYW5pbWF0aW9uIHsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTIwMDBweCk7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICBhbmltYXRpb24tZGVsYXk6IHZhcigtLXBhcGVyLXRvb2x0aXAtZGVsYXktb3V0LCA1MDBtcyk7CiAgICAgICAgYW5pbWF0aW9uLW5hbWU6IGtleUZyYW1lU2xpZGVEb3duSW47CiAgICAgICAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogMTsKICAgICAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4wLCAwLjAsIDAuMiwgMSk7CiAgICAgICAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1wYXBlci10b29sdGlwLWR1cmF0aW9uLW91dCwgNTAwbXMpOwogICAgICAgIGFuaW1hdGlvbi1maWxsLW1vZGU6IGZvcndhcmRzOwogICAgICAgIEBhcHBseSAtLXBhcGVyLXRvb2x0aXAtYW5pbWF0aW9uOwogICAgICB9CgogICAgICAuc2xpZGUtZG93bi1hbmltYXRpb24tb3V0IHsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7CiAgICAgICAgb3BhY2l0eTogdmFyKC0tcGFwZXItdG9vbHRpcC1vcGFjaXR5LCAwLjkpOwogICAgICAgIGFuaW1hdGlvbi1kZWxheTogdmFyKC0tcGFwZXItdG9vbHRpcC1kZWxheS1vdXQsIDUwMG1zKTsKICAgICAgICBhbmltYXRpb24tbmFtZToga2V5RnJhbWVTbGlkZURvd25PdXQ7CiAgICAgICAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogMTsKICAgICAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC40LCAwLjAsIDEsIDEpOwogICAgICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tcGFwZXItdG9vbHRpcC1kdXJhdGlvbi1vdXQsIDUwMG1zKTsKICAgICAgICBhbmltYXRpb24tZmlsbC1tb2RlOiBmb3J3YXJkczsKICAgICAgICBAYXBwbHkgLS1wYXBlci10b29sdGlwLWFuaW1hdGlvbjsKICAgICAgfQoKICAgICAgLmNhbmNlbC1hbmltYXRpb24gewogICAgICAgIGFuaW1hdGlvbi1kZWxheTogLTMwcyAhaW1wb3J0YW50OwogICAgICB9CgogICAgICAvKiBUaGFua3MgSUUgMTAuICovCgogICAgICAuaGlkZGVuIHsKICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPGRpdiBpZD0idG9vbHRpcCIgY2xhc3M9ImhpZGRlbiI+CiAgICAgIDxzbG90Pjwvc2xvdD4KICAgIDwvZGl2PgogIDwvdGVtcGxhdGU+CgogIDxzY3JpcHQ+Ly9+fldFQlBBVEh+fi9wYXBlci10b29sdGlwL3BhcGVyLXRvb2x0aXAuaHRtbC5qcwpQb2x5bWVyKHtpczoicGFwZXItdG9vbHRpcCIsaG9zdEF0dHJpYnV0ZXM6e3JvbGU6InRvb2x0aXAiLHRhYmluZGV4Oi0xfSxwcm9wZXJ0aWVzOntmb3I6e3R5cGU6U3RyaW5nLG9ic2VydmVyOiJfZmluZFRhcmdldCJ9LG1hbnVhbE1vZGU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxvYnNlcnZlcjoiX21hbnVhbE1vZGVDaGFuZ2VkIn0scG9zaXRpb246e3R5cGU6U3RyaW5nLHZhbHVlOiJib3R0b20ifSxmaXRUb1Zpc2libGVCb3VuZHM6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sb2Zmc2V0Ont0eXBlOk51bWJlcix2YWx1ZToxNH0sbWFyZ2luVG9wOnt0eXBlOk51bWJlcix2YWx1ZToxNH0sYW5pbWF0aW9uRGVsYXk6e3R5cGU6TnVtYmVyLHZhbHVlOjUwMCxvYnNlcnZlcjoiX2RlbGF5Q2hhbmdlIn0sYW5pbWF0aW9uRW50cnk6e3R5cGU6U3RyaW5nLHZhbHVlOiIifSxhbmltYXRpb25FeGl0Ont0eXBlOlN0cmluZyx2YWx1ZToiIn0sYW5pbWF0aW9uQ29uZmlnOnt0eXBlOk9iamVjdCwKdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm57ZW50cnk6W3tuYW1lOiJmYWRlLWluLWFuaW1hdGlvbiIsbm9kZTp0aGlzLHRpbWluZzp7ZGVsYXk6MH19XSxleGl0Olt7bmFtZToiZmFkZS1vdXQtYW5pbWF0aW9uIixub2RlOnRoaXN9XX19fSxfc2hvd2luZzp7dHlwZTpCb29sZWFuLHZhbHVlOiExfX0sbGlzdGVuZXJzOnt3ZWJraXRBbmltYXRpb25FbmQ6Il9vbkFuaW1hdGlvbkVuZCJ9LGdldCB0YXJnZXQoKXt2YXIgYT1Qb2x5bWVyLmRvbSh0aGlzKS5wYXJlbnROb2RlLGM9UG9seW1lci5kb20odGhpcykuZ2V0T3duZXJSb290KCk7cmV0dXJuIHRoaXMuZm9yP1BvbHltZXIuZG9tKGMpLnF1ZXJ5U2VsZWN0b3IoIiMiK3RoaXMuZm9yKTphLm5vZGVUeXBlPT1Ob2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREU/Yy5ob3N0OmF9LGF0dGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fZmluZFRhcmdldCgpfSxkZXRhY2hlZDpmdW5jdGlvbigpe3RoaXMubWFudWFsTW9kZXx8dGhpcy5fcmVtb3ZlTGlzdGVuZXJzKCl9LApwbGF5QW5pbWF0aW9uOmZ1bmN0aW9uKGEpeyJlbnRyeSI9PT1hP3RoaXMuc2hvdygpOiJleGl0Ij09PWEmJnRoaXMuaGlkZSgpfSxjYW5jZWxBbmltYXRpb246ZnVuY3Rpb24oKXt0aGlzLiQudG9vbHRpcC5jbGFzc0xpc3QuYWRkKCJjYW5jZWwtYW5pbWF0aW9uIil9LHNob3c6ZnVuY3Rpb24oKXtpZighdGhpcy5fc2hvd2luZyl7aWYoIiI9PT1Qb2x5bWVyLmRvbSh0aGlzKS50ZXh0Q29udGVudC50cmltKCkpe2Zvcih2YXIgYT0hMCxjPVBvbHltZXIuZG9tKHRoaXMpLmdldEVmZmVjdGl2ZUNoaWxkTm9kZXMoKSxkPTA7ZDxjLmxlbmd0aDtkKyspaWYoIiIhPT1jW2RdLnRleHRDb250ZW50LnRyaW0oKSl7YT0hMTticmVha31pZihhKXJldHVybn10aGlzLl9zaG93aW5nPSEwO3RoaXMuJC50b29sdGlwLmNsYXNzTGlzdC5yZW1vdmUoImhpZGRlbiIpO3RoaXMuJC50b29sdGlwLmNsYXNzTGlzdC5yZW1vdmUoImNhbmNlbC1hbmltYXRpb24iKTt0aGlzLiQudG9vbHRpcC5jbGFzc0xpc3QucmVtb3ZlKHRoaXMuX2dldEFuaW1hdGlvblR5cGUoImV4aXQiKSk7CnRoaXMudXBkYXRlUG9zaXRpb24oKTt0aGlzLl9hbmltYXRpb25QbGF5aW5nPSEwO3RoaXMuJC50b29sdGlwLmNsYXNzTGlzdC5hZGQodGhpcy5fZ2V0QW5pbWF0aW9uVHlwZSgiZW50cnkiKSl9fSxoaWRlOmZ1bmN0aW9uKCl7dGhpcy5fc2hvd2luZyYmKHRoaXMuX2FuaW1hdGlvblBsYXlpbmc/KHRoaXMuX3Nob3dpbmc9ITEsdGhpcy5fY2FuY2VsQW5pbWF0aW9uKCkpOih0aGlzLl9vbkFuaW1hdGlvbkZpbmlzaCgpLHRoaXMuX3Nob3dpbmc9ITEsdGhpcy5fYW5pbWF0aW9uUGxheWluZz0hMCkpfSx1cGRhdGVQb3NpdGlvbjpmdW5jdGlvbigpe2lmKHRoaXMuX3RhcmdldCYmdGhpcy5vZmZzZXRQYXJlbnQpe3ZhciBhPXRoaXMub2Zmc2V0OzE0IT10aGlzLm1hcmdpblRvcCYmMTQ9PXRoaXMub2Zmc2V0JiYoYT10aGlzLm1hcmdpblRvcCk7dmFyIGM9dGhpcy5vZmZzZXRQYXJlbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksZD10aGlzLl90YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksCmY9dGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxnPShkLndpZHRoLWYud2lkdGgpLzIsbD0oZC5oZWlnaHQtZi5oZWlnaHQpLzIsaz1kLmxlZnQtYy5sZWZ0LG09ZC50b3AtYy50b3A7c3dpdGNoKHRoaXMucG9zaXRpb24pe2Nhc2UgInRvcCI6dmFyIHA9aytnO3ZhciBxPW0tZi5oZWlnaHQtYTticmVhaztjYXNlICJib3R0b20iOnA9aytnO3E9bStkLmhlaWdodCthO2JyZWFrO2Nhc2UgImxlZnQiOnA9ay1mLndpZHRoLWE7cT1tK2w7YnJlYWs7Y2FzZSAicmlnaHQiOnA9aytkLndpZHRoK2EscT1tK2x9dGhpcy5maXRUb1Zpc2libGVCb3VuZHM/KGMubGVmdCtwK2Yud2lkdGg+d2luZG93LmlubmVyV2lkdGg/KHRoaXMuc3R5bGUucmlnaHQ9IjBweCIsdGhpcy5zdHlsZS5sZWZ0PSJhdXRvIik6KHRoaXMuc3R5bGUubGVmdD1NYXRoLm1heCgwLHApKyJweCIsdGhpcy5zdHlsZS5yaWdodD0iYXV0byIpLGMudG9wK3ErZi5oZWlnaHQ+d2luZG93LmlubmVySGVpZ2h0Pyh0aGlzLnN0eWxlLmJvdHRvbT0KYy5oZWlnaHQrInB4Iix0aGlzLnN0eWxlLnRvcD0iYXV0byIpOih0aGlzLnN0eWxlLnRvcD1NYXRoLm1heCgtYy50b3AscSkrInB4Iix0aGlzLnN0eWxlLmJvdHRvbT0iYXV0byIpKToodGhpcy5zdHlsZS5sZWZ0PXArInB4Iix0aGlzLnN0eWxlLnRvcD1xKyJweCIpfX0sX2FkZExpc3RlbmVyczpmdW5jdGlvbigpe3RoaXMuX3RhcmdldCYmKHRoaXMubGlzdGVuKHRoaXMuX3RhcmdldCwibW91c2VlbnRlciIsInNob3ciKSx0aGlzLmxpc3Rlbih0aGlzLl90YXJnZXQsImZvY3VzIiwic2hvdyIpLHRoaXMubGlzdGVuKHRoaXMuX3RhcmdldCwibW91c2VsZWF2ZSIsImhpZGUiKSx0aGlzLmxpc3Rlbih0aGlzLl90YXJnZXQsImJsdXIiLCJoaWRlIiksdGhpcy5saXN0ZW4odGhpcy5fdGFyZ2V0LCJ0YXAiLCJoaWRlIikpO3RoaXMubGlzdGVuKHRoaXMuJC50b29sdGlwLCJhbmltYXRpb25lbmQiLCJfb25BbmltYXRpb25FbmQiKTt0aGlzLmxpc3Rlbih0aGlzLCJtb3VzZWVudGVyIiwiaGlkZSIpfSwKX2ZpbmRUYXJnZXQ6ZnVuY3Rpb24oKXt0aGlzLm1hbnVhbE1vZGV8fHRoaXMuX3JlbW92ZUxpc3RlbmVycygpO3RoaXMuX3RhcmdldD10aGlzLnRhcmdldDt0aGlzLm1hbnVhbE1vZGV8fHRoaXMuX2FkZExpc3RlbmVycygpfSxfZGVsYXlDaGFuZ2U6ZnVuY3Rpb24oYSl7NTAwIT09YSYmdGhpcy51cGRhdGVTdHlsZXMoeyItLXBhcGVyLXRvb2x0aXAtZGVsYXktaW4iOmErIm1zIn0pfSxfbWFudWFsTW9kZUNoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLm1hbnVhbE1vZGU/dGhpcy5fcmVtb3ZlTGlzdGVuZXJzKCk6dGhpcy5fYWRkTGlzdGVuZXJzKCl9LF9jYW5jZWxBbmltYXRpb246ZnVuY3Rpb24oKXt0aGlzLiQudG9vbHRpcC5jbGFzc0xpc3QucmVtb3ZlKHRoaXMuX2dldEFuaW1hdGlvblR5cGUoImVudHJ5IikpO3RoaXMuJC50b29sdGlwLmNsYXNzTGlzdC5yZW1vdmUodGhpcy5fZ2V0QW5pbWF0aW9uVHlwZSgiZXhpdCIpKTt0aGlzLiQudG9vbHRpcC5jbGFzc0xpc3QucmVtb3ZlKCJjYW5jZWwtYW5pbWF0aW9uIik7CnRoaXMuJC50b29sdGlwLmNsYXNzTGlzdC5hZGQoImhpZGRlbiIpfSxfb25BbmltYXRpb25GaW5pc2g6ZnVuY3Rpb24oKXt0aGlzLl9zaG93aW5nJiYodGhpcy4kLnRvb2x0aXAuY2xhc3NMaXN0LnJlbW92ZSh0aGlzLl9nZXRBbmltYXRpb25UeXBlKCJlbnRyeSIpKSx0aGlzLiQudG9vbHRpcC5jbGFzc0xpc3QucmVtb3ZlKCJjYW5jZWwtYW5pbWF0aW9uIiksdGhpcy4kLnRvb2x0aXAuY2xhc3NMaXN0LmFkZCh0aGlzLl9nZXRBbmltYXRpb25UeXBlKCJleGl0IikpKX0sX29uQW5pbWF0aW9uRW5kOmZ1bmN0aW9uKCl7dGhpcy5fYW5pbWF0aW9uUGxheWluZz0hMTt0aGlzLl9zaG93aW5nfHwodGhpcy4kLnRvb2x0aXAuY2xhc3NMaXN0LnJlbW92ZSh0aGlzLl9nZXRBbmltYXRpb25UeXBlKCJleGl0IikpLHRoaXMuJC50b29sdGlwLmNsYXNzTGlzdC5hZGQoImhpZGRlbiIpKX0sX2dldEFuaW1hdGlvblR5cGU6ZnVuY3Rpb24oYSl7aWYoImVudHJ5Ij09PWEmJiIiIT09dGhpcy5hbmltYXRpb25FbnRyeSlyZXR1cm4gdGhpcy5hbmltYXRpb25FbnRyeTsKaWYoImV4aXQiPT09YSYmIiIhPT10aGlzLmFuaW1hdGlvbkV4aXQpcmV0dXJuIHRoaXMuYW5pbWF0aW9uRXhpdDtpZih0aGlzLmFuaW1hdGlvbkNvbmZpZ1thXSYmInN0cmluZyI9PT10eXBlb2YgdGhpcy5hbmltYXRpb25Db25maWdbYV1bMF0ubmFtZSl7aWYodGhpcy5hbmltYXRpb25Db25maWdbYV1bMF0udGltaW5nJiZ0aGlzLmFuaW1hdGlvbkNvbmZpZ1thXVswXS50aW1pbmcuZGVsYXkmJjAhPT10aGlzLmFuaW1hdGlvbkNvbmZpZ1thXVswXS50aW1pbmcuZGVsYXkpe3ZhciBjPXRoaXMuYW5pbWF0aW9uQ29uZmlnW2FdWzBdLnRpbWluZy5kZWxheTsiZW50cnkiPT09YT90aGlzLnVwZGF0ZVN0eWxlcyh7Ii0tcGFwZXItdG9vbHRpcC1kZWxheS1pbiI6YysibXMifSk6ImV4aXQiPT09YSYmdGhpcy51cGRhdGVTdHlsZXMoeyItLXBhcGVyLXRvb2x0aXAtZGVsYXktb3V0IjpjKyJtcyJ9KX1yZXR1cm4gdGhpcy5hbmltYXRpb25Db25maWdbYV1bMF0ubmFtZX19LF9yZW1vdmVMaXN0ZW5lcnM6ZnVuY3Rpb24oKXt0aGlzLl90YXJnZXQmJgoodGhpcy51bmxpc3Rlbih0aGlzLl90YXJnZXQsIm1vdXNlZW50ZXIiLCJzaG93IiksdGhpcy51bmxpc3Rlbih0aGlzLl90YXJnZXQsImZvY3VzIiwic2hvdyIpLHRoaXMudW5saXN0ZW4odGhpcy5fdGFyZ2V0LCJtb3VzZWxlYXZlIiwiaGlkZSIpLHRoaXMudW5saXN0ZW4odGhpcy5fdGFyZ2V0LCJibHVyIiwiaGlkZSIpLHRoaXMudW5saXN0ZW4odGhpcy5fdGFyZ2V0LCJ0YXAiLCJoaWRlIikpO3RoaXMudW5saXN0ZW4odGhpcy4kLnRvb2x0aXAsImFuaW1hdGlvbmVuZCIsIl9vbkFuaW1hdGlvbkVuZCIpO3RoaXMudW5saXN0ZW4odGhpcywibW91c2VlbnRlciIsImhpZGUiKX19KTsKPC9zY3JpcHQ+CjwvZG9tLW1vZHVsZT4KCgoKCgoKCgoKCjxkb20tbW9kdWxlIGlkPSJ0Zi1ncmFwaC1ub2RlLXNlYXJjaCI+CiAgPHRlbXBsYXRlPgogICAgPGRpdiBpZD0ic2VhcmNoLWNvbnRhaW5lciI+CiAgICAgIDxwYXBlci1pbnB1dCBpZD0icnVucy1yZWdleCIgbGFiZWw9IlNlYXJjaCBub2Rlcy4gUmVnZXhlcyBzdXBwb3J0ZWQuIiB2YWx1ZT0ie3tfcmF3UmVnZXhJbnB1dH19Ij4KICAgICAgPC9wYXBlci1pbnB1dD4KICAgICAgPGRpdiBpZD0ic2VhcmNoLXJlc3VsdHMtYW5jaG9yIj4KICAgICAgICA8ZGl2IGlkPSJzZWFyY2gtcmVzdWx0cyI+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19yZWdleE1hdGNoZXNdXSI+CiAgICAgICAgICAgIDxkaXYgaWQ9InNlYXJjaC1tYXRjaCIgb24tY2xpY2s9Il9tYXRjaENsaWNrZWQiPltbaXRlbV1dPC9kaXY+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogICAgPHN0eWxlPgogICAgICAjc2VhcmNoLWNvbnRhaW5lciB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgb3ZlcmZsb3c6IHZpc2libGU7CiAgICAgIH0KCiAgICAgICNydW5zLXJlZ2V4IHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgI3NlYXJjaC1yZXN1bHRzLWFuY2hvciB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICAjc2VhcmNoLXJlc3VsdHMgewogICAgICAgIGNvbG9yOiAjZmZmOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBtYXgtaGVpZ2h0OiAyMDBweDsKICAgICAgICBvdmVyZmxvdy14OiBoaWRkZW47CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICB0ZXh0LWFsaWduOiByaWdodDsKICAgICAgICBtYXgtd2lkdGg6IDEwMCU7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgfQoKICAgICAgI3NlYXJjaC1tYXRjaCB7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgcGFkZGluZzogM3B4OwogICAgICAgIGZsb2F0OiByaWdodDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgIGRpcmVjdGlvbjogcnRsOwogICAgICB9CgogICAgICAjc2VhcmNoLW1hdGNoOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS10Yi1vcmFuZ2Utd2Vhayk7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CiAgPHNjcmlwdD4vL35+V0VCUEFUSH5+L3RmLWdyYXBoLW5vZGUtc2VhcmNoL3RmLWdyYXBoLW5vZGUtc2VhcmNoLmh0bWwuanMKUG9seW1lcih7aXM6InRmLWdyYXBoLW5vZGUtc2VhcmNoIixwcm9wZXJ0aWVzOntyZW5kZXJIaWVyYXJjaHk6T2JqZWN0LHNlbGVjdGVkTm9kZTp7dHlwZTpTdHJpbmcsbm90aWZ5OiEwfSxfcmF3UmVnZXhJbnB1dDp7dHlwZTpTdHJpbmcsdmFsdWU6IiJ9LF9yZWdleElucHV0Ont0eXBlOlN0cmluZyxjb21wdXRlZDoiX2NvbXB1dGVSZWdleElucHV0KHJlbmRlckhpZXJhcmNoeSwgX3Jhd1JlZ2V4SW5wdXQpIn0sX3ByZXZpb3VzUmVnZXhJbnB1dDp7dHlwZTpTdHJpbmcsdmFsdWU6IiJ9LF9zZWFyY2hUaW1lb3V0RGVsYXk6e3R5cGU6TnVtYmVyLHZhbHVlOjE1MCxyZWFkT25seTohMH0sX3NlYXJjaFBlbmRpbmc6Qm9vbGVhbixfbWF4UmVnZXhSZXN1bHRzOnt0eXBlOk51bWJlcix2YWx1ZTo0Mn0sX3JlZ2V4TWF0Y2hlczpBcnJheX0sb2JzZXJ2ZXJzOlsiX3JlZ2V4SW5wdXRDaGFuZ2VkKF9yZWdleElucHV0KSJdLF9jb21wdXRlUmVnZXhJbnB1dChhLGMpe3JldHVybiBjLnRyaW0oKX0sCl9yZWdleElucHV0Q2hhbmdlZCgpe3RoaXMuX3JlcXVlc3RTZWFyY2goKX0sX2NsZWFyU2VhcmNoUmVzdWx0cygpe3RoaXMuc2V0KCJfcmVnZXhNYXRjaGVzIixbXSl9LF9yZXF1ZXN0U2VhcmNoKCl7dGhpcy5fc2VhcmNoUGVuZGluZ3x8KHRoaXMuX3JlZ2V4SW5wdXQ9PT10aGlzLl9wcmV2aW91c1JlZ2V4SW5wdXQ/dGhpcy5fc2VhcmNoUGVuZGluZz0hMToodGhpcy5fc2VhcmNoUGVuZGluZz0hMCx0aGlzLl9leGVjdXRlU2VhcmNoKCksdGhpcy5hc3luYygoKT0+e3RoaXMuX3NlYXJjaFBlbmRpbmc9ITE7dGhpcy5fcmVxdWVzdFNlYXJjaCgpfSx0aGlzLl9zZWFyY2hUaW1lb3V0RGVsYXkpKSl9LF9leGVjdXRlU2VhcmNoKCl7aWYodGhpcy5fcHJldmlvdXNSZWdleElucHV0PXRoaXMuX3JlZ2V4SW5wdXQpe3RyeXt2YXIgYT1uZXcgUmVnRXhwKHRoaXMuX3JlZ2V4SW5wdXQpfWNhdGNoKGQpe3RoaXMuX2NsZWFyU2VhcmNoUmVzdWx0cygpO3JldHVybn12YXIgYz1bXTtfLmVhY2godGhpcy5yZW5kZXJIaWVyYXJjaHkuaGllcmFyY2h5LmdldE5vZGVNYXAoKSwKKGQsZik9PntpZihjLmxlbmd0aD49dGhpcy5fbWF4UmVnZXhSZXN1bHRzKXJldHVybiExO2EudGVzdChmKSYmYy5wdXNoKGYpfSk7dGhpcy5zZXQoIl9yZWdleE1hdGNoZXMiLGMpfWVsc2UgdGhpcy5fY2xlYXJTZWFyY2hSZXN1bHRzKCl9LF9tYXRjaENsaWNrZWQoYSl7dGhpcy5zZXQoInNlbGVjdGVkTm9kZSIsYS5tb2RlbC5pdGVtKX19KTsKPC9zY3JpcHQ+CjwvZG9tLW1vZHVsZT4KCgo8ZG9tLW1vZHVsZSBpZD0idGYtZ3JhcGgtY29udHJvbHMiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGNvbG9yOiBncmF5OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgIHBhcGVyLWRyb3Bkb3duLW1lbnUgewogICAgICAgIC0tcGFwZXItZHJvcGRvd24tbWVudS1pbnB1dDogewogICAgICAgICAgcGFkZGluZzogMDsKICAgICAgICAgIGNvbG9yOiBncmF5OwogICAgICAgIH0KICAgICAgICAtLWlyb24taWNvbi13aWR0aDogMTVweDsKICAgICAgICAtLWlyb24taWNvbi1oZWlnaHQ6IDE1cHg7CiAgICAgICAgLS1wcmltYXJ5LXRleHQtY29sb3I6IGdyYXk7CiAgICAgICAgLS1wYXBlci1pdGVtLW1pbi1oZWlnaHQ6IDMwcHg7CiAgICAgIH0KCiAgICAgIHBhcGVyLWJ1dHRvbltyYWlzZWRdLmtleWJvYXJkLWZvY3VzIHsKICAgICAgICBmb250LXdlaWdodDogbm9ybWFsOwogICAgICB9CgogICAgICAucnVuLWRyb3Bkb3duIHsKICAgICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lcjogewogICAgICAgICAgcGFkZGluZzogOHB4IDAgOHB4IDEwcHg7CiAgICAgICAgfQogICAgICB9CgogICAgICAuY29sb3ItZHJvcGRvd24gewogICAgICAgIC0tcGFwZXItaW5wdXQtY29udGFpbmVyOiB7CiAgICAgICAgICBwYWRkaW5nOiA5cHggMCAwIDEzcHg7CiAgICAgICAgfQogICAgICB9CgogICAgICB0YWJsZSB7CiAgICAgICAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsKICAgICAgICBib3JkZXItc3BhY2luZzogMDsKICAgICAgfQoKICAgICAgdGFibGUgdGQgewogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICB9CgogICAgICAuYWxsY29udHJvbHMgewogICAgICAgIHBhZGRpbmc6IDAgMjBweCAyMHB4OwogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICB9CgogICAgICAubGVnZW5kLWhvbGRlciB7CiAgICAgICAgYmFja2dyb3VuZDogI2U5ZTllOTsKICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgI2NjYzsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgIGNvbG9yOiAjNTU1OwogICAgICAgIHBhZGRpbmc6IDE1cHggMjBweDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgLnRvZ2dsZS1sZWdlbmQtYnV0dG9uIHsKICAgICAgICBtYXgtaGVpZ2h0OiAyMHB4OwogICAgICAgIG1heC13aWR0aDogMjBweDsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICB9CgogICAgICAudG9nZ2xlLWxlZ2VuZC10ZXh0IHsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwogICAgICB9CgogICAgICBwYXBlci1yYWRpby1idXR0b24gewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBhZGRpbmc6IDVweDsKICAgICAgfQogICAgICBzdmcuaWNvbiwKICAgICAgdGYtZ3JhcGgtaWNvbiB7CiAgICAgICAgd2lkdGg6IDYwcHg7CiAgICAgICAgaGVpZ2h0OiAxOHB4OwogICAgICB9CiAgICAgIC5kb21haW5WYWx1ZXMgewogICAgICAgIG1hcmdpbi1ib3R0b206IDEwcHg7CiAgICAgICAgd2lkdGg6IDE2NXB4OwogICAgICB9CiAgICAgIC5kb21haW5TdGFydCB7CiAgICAgICAgZmxvYXQ6IGxlZnQ7CiAgICAgIH0KICAgICAgLmRvbWFpbkVuZCB7CiAgICAgICAgZmxvYXQ6IHJpZ2h0OwogICAgICB9CiAgICAgIC5jb2xvckJveCB7CiAgICAgICAgd2lkdGg6IDIwcHg7CiAgICAgIH0KCiAgICAgIC5pbWFnZS1pY29uIHsKICAgICAgICB3aWR0aDogMjRweDsKICAgICAgICBoZWlnaHQ6IDI0cHg7CiAgICAgIH0KCiAgICAgIC5oZWxwLWljb24gewogICAgICAgIGhlaWdodDogMTVweDsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgfQoKICAgICAgLmdyYXkgewogICAgICAgIGNvbG9yOiAjNjY2OwogICAgICB9CgogICAgICAudGl0bGUgewogICAgICAgIGZvbnQtc2l6ZTogMTZweDsKICAgICAgICBtYXJnaW46IDhweCA1cHggOHB4IDA7CiAgICAgICAgY29sb3I6IGJsYWNrOwogICAgICB9CiAgICAgIC50aXRsZSBzbWFsbCB7CiAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKICAgICAgfQogICAgICAuZGV2aWNlTGlzdCwKICAgICAgLnhsYUNsdXN0ZXJMaXN0IHsKICAgICAgICBtYXgtaGVpZ2h0OiAyMDBweDsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICB9CgogICAgICAjZmlsZSB7CiAgICAgICAgcGFkZGluZzogOHB4IDA7CiAgICAgIH0KCiAgICAgIC5jb2xvci1sZWdlbmQtcm93IHsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGNsZWFyOiBib3RoOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgaGVpZ2h0OiAyMHB4OwogICAgICAgIG1hcmdpbi10b3A6IDVweDsKICAgICAgfQoKICAgICAgLmNvbG9yLWxlZ2VuZC1yb3cgLmxhYmVsLAogICAgICAuY29sb3ItbGVnZW5kLXJvdyBzdmcsCiAgICAgIC5jb2xvci1sZWdlbmQtcm93IHRmLWdyYXBoLWljb24gewogICAgICAgIGZsZXg6IDAgMCA0MHB4OwogICAgICAgIG1hcmdpbi1yaWdodDogMjBweDsKICAgICAgfQoKICAgICAgLmRldmljZXMtY2hlY2tib3ggaW5wdXQgewogICAgICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKICAgICAgfQoKICAgICAgLmNvbnRyb2wtaG9sZGVyIC5pY29uLWJ1dHRvbiB7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIG1hcmdpbjogMCAtNXB4OwogICAgICAgIHBhZGRpbmc6IDVweDsKICAgICAgfQoKICAgICAgLmJ1dHRvbi10ZXh0IHsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDIwcHg7CiAgICAgICAgdGV4dC10cmFuc2Zvcm06IG5vbmU7CiAgICAgIH0KCiAgICAgIC51cGxvYWQtYnV0dG9uIHsKICAgICAgICB3aWR0aDogMTY1cHg7CiAgICAgICAgaGVpZ2h0OiAyNXB4OwogICAgICAgIHRleHQtdHJhbnNmb3JtOiBub25lOwogICAgICAgIG1hcmdpbi10b3A6IDRweDsKICAgICAgfQoKICAgICAgLmJ1dHRvbi1pY29uIHsKICAgICAgICB3aWR0aDogMjZweDsKICAgICAgICBoZWlnaHQ6IDI2cHg7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLW9yYW5nZS01MDApOwogICAgICB9CgogICAgICAuaGlkZGVuLWlucHV0IHsKICAgICAgICBoZWlnaHQ6IDBweDsKICAgICAgICB3aWR0aDogMHB4OwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC5hbGxjb250cm9scyAuY29udHJvbC1ob2xkZXIgewogICAgICAgIGNsZWFyOiBib3RoOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICB9CgogICAgICAuYWxsY29udHJvbHMgLmNvbnRyb2wtaG9sZGVyIHBhcGVyLXJhZGlvLWdyb3VwIHsKICAgICAgICBtYXJnaW4tdG9wOiA1cHg7CiAgICAgIH0KCiAgICAgIHNwYW4uY291bnRlciB7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGNvbG9yOiBncmF5OwogICAgICB9CgogICAgICAucnVucyBwYXBlci1pdGVtIHsKICAgICAgICAtLXBhcGVyLWl0ZW06IHsKICAgICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgfQogICAgICB9CgogICAgICB0YWJsZS5jb250cm9sLWhvbGRlciB7CiAgICAgICAgYm9yZGVyOiAwOwogICAgICAgIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7CiAgICAgIH0KCiAgICAgIHRhYmxlLnRmLWdyYXBoLWNvbnRyb2xzIHRkLmlucHV0LWVsZW1lbnQtdGFibGUtZGF0YSB7CiAgICAgICAgcGFkZGluZzogMCAwIDAgMjBweDsKICAgICAgfQoKICAgICAgLnNwYWNlciB7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICB9CgogICAgICAuY29sb3ItdGV4dCB7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQoKICAgICAgLyoqIE92ZXJyaWRlIGlubGluZSBzdHlsZXMgdGhhdCBzdXBwcmVzcyBwb2ludGVyIGV2ZW50cyBmb3IgZGlzYWJsZWQgYnV0dG9ucy4gT3RoZXJ3aXNlLCB0aGUgKi8KICAgICAgLyogIHRvb2x0aXBzIGRvIG5vdCBhcHBlYXIuICovCiAgICAgIHBhcGVyLXJhZGlvLWdyb3VwIHBhcGVyLXJhZGlvLWJ1dHRvbiB7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IGF1dG8gIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgLmxlZ2VuZC1jbGFyaWZpZXIgewogICAgICAgIGNvbG9yOiAjMjY2MjM2OwogICAgICAgIGN1cnNvcjogaGVscDsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CiAgICAgIH0KCiAgICAgIC5sZWdlbmQtY2xhcmlmaWVyIHBhcGVyLXRvb2x0aXAgewogICAgICAgIHdpZHRoOiAxNTBweDsKICAgICAgfQoKICAgICAgLyoqIE90aGVyd2lzZSwgcG9seW1lciBVSSBjb250cm9scyBhcHBlYXIgYXRvcCBub2RlIHNlYXJjaC4gKi8KICAgICAgdGYtZ3JhcGgtbm9kZS1zZWFyY2ggewogICAgICAgIHotaW5kZXg6IDE7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgIHBhcGVyLWRyb3Bkb3duLW1lbnUgewogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8ZGl2IGNsYXNzPSJhbGxjb250cm9scyI+CiAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2wtaG9sZGVyIj4KICAgICAgICA8dGYtZ3JhcGgtbm9kZS1zZWFyY2ggc2VsZWN0ZWQtbm9kZT0ie3tzZWxlY3RlZE5vZGV9fSIgcmVuZGVyLWhpZXJhcmNoeT0iW1tyZW5kZXJIaWVyYXJjaHldXSI+PC90Zi1ncmFwaC1ub2RlLXNlYXJjaD4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2wtaG9sZGVyIj4KICAgICAgICA8cGFwZXItYnV0dG9uIGNsYXNzPSJpY29uLWJ1dHRvbiIgb24tdGFwPSJfZml0IiBhbHQ9IkZpdCB0byBzY3JlZW4iPgogICAgICAgICAgPGlyb24taWNvbiBpY29uPSJhc3BlY3QtcmF0aW8iIGNsYXNzPSJidXR0b24taWNvbiI+PC9pcm9uLWljb24+CiAgICAgICAgICA8c3BhbiBjbGFzcz0iYnV0dG9uLXRleHQiPkZpdCB0byBTY3JlZW48L3NwYW4+CiAgICAgICAgPC9wYXBlci1idXR0b24+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjb250cm9sLWhvbGRlciI+CiAgICAgICAgPHBhcGVyLWJ1dHRvbiBjbGFzcz0iaWNvbi1idXR0b24iIG9uLWNsaWNrPSJkb3dubG9hZCIgYWx0PSJEb3dubG9hZCBQTkciPgogICAgICAgICAgPGlyb24taWNvbiBpY29uPSJmaWxlLWRvd25sb2FkIiBjbGFzcz0iYnV0dG9uLWljb24iPjwvaXJvbi1pY29uPgogICAgICAgICAgPHNwYW4gY2xhc3M9ImJ1dHRvbi10ZXh0Ij5Eb3dubG9hZCBQTkc8L3NwYW4+CiAgICAgICAgPC9wYXBlci1idXR0b24+CiAgICAgICAgPGEgaHJlZj0iIyIgaWQ9ImdyYXBoZG93bmxvYWQiIGNsYXNzPSJ0aXRsZSIgZG93bmxvYWQ9ImdyYXBoLnBuZyI+PC9hPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY29udHJvbC1ob2xkZXIgcnVucyI+CiAgICAgICAgPGRpdiBjbGFzcz0idGl0bGUiPgogICAgICAgICAgUnVuIDxzcGFuIGNsYXNzPSJjb3VudGVyIj4oW1tkYXRhc2V0cy5sZW5ndGhdXSk8L3NwYW4+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPHBhcGVyLWRyb3Bkb3duLW1lbnUgbm8tbGFiZWwtZmxvYXQgbm8tYW5pbWF0aW9ucyBub2luayBob3Jpem9udGFsLWFsaWduPSJsZWZ0IiBjbGFzcz0icnVuLWRyb3Bkb3duIj4KICAgICAgICAgIDxwYXBlci1saXN0Ym94IGNsYXNzPSJkcm9wZG93bi1jb250ZW50IiBzZWxlY3RlZD0ie3tfc2VsZWN0ZWRSdW5JbmRleH19IiBzbG90PSJkcm9wZG93bi1jb250ZW50Ij4KICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tkYXRhc2V0c11dIj4KICAgICAgICAgICAgICA8cGFwZXItaXRlbT5bW2l0ZW0ubmFtZV1dPC9wYXBlci1pdGVtPgogICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPC9wYXBlci1saXN0Ym94PgogICAgICAgIDwvcGFwZXItZHJvcGRvd24tbWVudT4KICAgICAgPC9kaXY+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tzaG93U2Vzc2lvblJ1bnNEcm9wZG93bl1dIj4KICAgICAgICA8ZGl2IGNsYXNzPSJjb250cm9sLWhvbGRlciI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZSI+CiAgICAgICAgICAgIFRhZwogICAgICAgICAgICA8c3BhbiBjbGFzcz0iY291bnRlciI+KFtbX251bVRhZ3MoZGF0YXNldHMsIF9zZWxlY3RlZFJ1bkluZGV4KV1dKTwvc3Bhbj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPHBhcGVyLWRyb3Bkb3duLW1lbnUgbm8tbGFiZWwtZmxvYXQgbm8tYW5pbWF0aW9ucyBob3Jpem9udGFsLWFsaWduPSJsZWZ0IiBub2luayBjbGFzcz0icnVuLWRyb3Bkb3duIj4KICAgICAgICAgICAgPHBhcGVyLWxpc3Rib3ggY2xhc3M9ImRyb3Bkb3duLWNvbnRlbnQiIHNlbGVjdGVkPSJ7e19zZWxlY3RlZFRhZ0luZGV4fX0iIHNsb3Q9ImRyb3Bkb3duLWNvbnRlbnQiPgogICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX2dldFRhZ3MoZGF0YXNldHMsIF9zZWxlY3RlZFJ1bkluZGV4KV1dIj4KICAgICAgICAgICAgICAgIDxwYXBlci1pdGVtPltbaXRlbS5kaXNwbGF5TmFtZV1dPC9wYXBlci1pdGVtPgogICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDwvcGFwZXItbGlzdGJveD4KICAgICAgICAgIDwvcGFwZXItZHJvcGRvd24tbWVudT4KICAgICAgICA8L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW3Nob3dVcGxvYWRCdXR0b25dXSI+CiAgICAgICAgPGRpdiBjbGFzcz0iY29udHJvbC1ob2xkZXIiPgogICAgICAgICAgPGRpdiBjbGFzcz0idGl0bGUiPlVwbG9hZDwvZGl2PgogICAgICAgICAgPHBhcGVyLWJ1dHRvbiByYWlzZWQgY2xhc3M9InVwbG9hZC1idXR0b24iIG9uLWNsaWNrPSJfZ2V0RmlsZSIgdGl0bGU9IlVwbG9hZCBhIGdyYXBoIHBidHh0IGZpbGUgdG8gdmlldyB0aGUgZ3JhcGgiPgogICAgICAgICAgICBDaG9vc2UgRmlsZQogICAgICAgICAgPC9wYXBlci1idXR0b24+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJoaWRkZW4taW5wdXQiPgogICAgICAgICAgICA8aW5wdXQgdHlwZT0iZmlsZSIgaWQ9ImZpbGUiIG5hbWU9ImZpbGUiIG9uLWNoYW5nZT0iX3VwZGF0ZUZpbGVJbnB1dCIgYWNjZXB0PSIucGJ0eHQiPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2wtaG9sZGVyIj4KICAgICAgICA8cGFwZXItcmFkaW8tZ3JvdXAgc2VsZWN0ZWQ9Int7X3NlbGVjdGVkR3JhcGhUeXBlfX0iPgogICAgICAgICAgCiAgICAgICAgICA8cGFwZXItcmFkaW8tYnV0dG9uIG5hbWU9Im9wX2dyYXBoIiBkaXNhYmxlZD0iW1tfZ2V0U2VsZWN0aW9uT3BHcmFwaERpc2FibGVkKGRhdGFzZXRzLCBfc2VsZWN0ZWRSdW5JbmRleCwgX3NlbGVjdGVkVGFnSW5kZXgpXV0iPkdyYXBoPC9wYXBlci1yYWRpby1idXR0b24+CiAgICAgICAgICA8cGFwZXItcmFkaW8tYnV0dG9uIG5hbWU9ImNvbmNlcHR1YWxfZ3JhcGgiIGRpc2FibGVkPSJbW19nZXRTZWxlY3Rpb25Db25jZXB0dWFsR3JhcGhEaXNhYmxlZChkYXRhc2V0cywgX3NlbGVjdGVkUnVuSW5kZXgsIF9zZWxlY3RlZFRhZ0luZGV4KV1dIj5Db25jZXB0dWFsIEdyYXBoPC9wYXBlci1yYWRpby1idXR0b24+CiAgICAgICAgICA8cGFwZXItcmFkaW8tYnV0dG9uIG5hbWU9InByb2ZpbGUiIGRpc2FibGVkPSJbW19nZXRTZWxlY3Rpb25Qcm9maWxlRGlzYWJsZWQoZGF0YXNldHMsIF9zZWxlY3RlZFJ1bkluZGV4LCBfc2VsZWN0ZWRUYWdJbmRleCldXSI+UHJvZmlsZTwvcGFwZXItcmFkaW8tYnV0dG9uPgogICAgICAgIDwvcGFwZXItcmFkaW8tZ3JvdXA+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjb250cm9sLWhvbGRlciI+CiAgICAgICAgPGRpdj4KICAgICAgICAgIDxwYXBlci10b2dnbGUtYnV0dG9uIGNoZWNrZWQ9Int7dHJhY2VJbnB1dHN9fSIgY2xhc3M9InRpdGxlIj4KICAgICAgICAgICAgVHJhY2UgaW5wdXRzCiAgICAgICAgICA8L3BhcGVyLXRvZ2dsZS1idXR0b24+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbaGVhbHRoUGlsbHNGZWF0dXJlRW5hYmxlZF1dIj4KICAgICAgICA8ZGl2IGNsYXNzPSJjb250cm9sLWhvbGRlciI+CiAgICAgICAgICA8cGFwZXItdG9nZ2xlLWJ1dHRvbiBjaGVja2VkPSJ7e2hlYWx0aFBpbGxzVG9nZ2xlZE9ufX0iIGNsYXNzPSJ0aXRsZSI+U2hvdyBoZWFsdGggcGlsbHM8L3BhcGVyLXRvZ2dsZS1idXR0b24+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2wtaG9sZGVyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZSI+Q29sb3I8L2Rpdj4KICAgICAgICA8cGFwZXItcmFkaW8tZ3JvdXAgc2VsZWN0ZWQ9Int7Y29sb3JCeX19Ij4KICAgICAgICAgIDxwYXBlci1yYWRpby1idXR0b24gbmFtZT0ic3RydWN0dXJlIj5TdHJ1Y3R1cmU8L3BhcGVyLXJhZGlvLWJ1dHRvbj4KCiAgICAgICAgICA8cGFwZXItcmFkaW8tYnV0dG9uIG5hbWU9ImRldmljZSI+RGV2aWNlPC9wYXBlci1yYWRpby1idXR0b24+CgogICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbiBpZD0ieGxhLWNsdXN0ZXItcmFkaW8tYnV0dG9uIiBuYW1lPSJ4bGFfY2x1c3RlciIgZGlzYWJsZWQ9IltbIV94bGFDbHVzdGVyc1Byb3ZpZGVkKHJlbmRlckhpZXJhcmNoeSldXSI+CiAgICAgICAgICAgIFhMQSBDbHVzdGVyCiAgICAgICAgICA8L3BhcGVyLXJhZGlvLWJ1dHRvbj4KICAgICAgICAgIDxwYXBlci10b29sdGlwIGFuaW1hdGlvbi1kZWxheT0iMCIgZm9yPSJ4bGEtY2x1c3Rlci1yYWRpby1idXR0b24iIHBvc2l0aW9uPSJyaWdodCIgb2Zmc2V0PSIwIj4KICAgICAgICAgICAgQ29sb3JpbmcgYnkgWExBIGNsdXN0ZXIgaXMgb25seSBlbmFibGVkIGlmIGF0IGxlYXN0IDEgb3Agc3BlY2lmaWVzCiAgICAgICAgICAgIGFuIFhMQSBjbHVzdGVyLgogICAgICAgICAgPC9wYXBlci10b29sdGlwPgoKICAgICAgICAgIDxwYXBlci1yYWRpby1idXR0b24gaWQ9ImNvbXB1dGUtdGltZS1yYWRpby1idXR0b24iIG5hbWU9ImNvbXB1dGVfdGltZSIgZGlzYWJsZWQ9IltbIXN0YXRzXV0iPgogICAgICAgICAgICBDb21wdXRlIHRpbWUKICAgICAgICAgIDwvcGFwZXItcmFkaW8tYnV0dG9uPgogICAgICAgICAgPHBhcGVyLXRvb2x0aXAgYW5pbWF0aW9uLWRlbGF5PSIwIiBmb3I9ImNvbXB1dGUtdGltZS1yYWRpby1idXR0b24iIHBvc2l0aW9uPSJyaWdodCIgb2Zmc2V0PSIwIj4KICAgICAgICAgICAgQ29sb3JpbmcgYnkgY29tcHV0ZSB0aW1lIGlzIG9ubHkgZW5hYmxlZCBpZiB0aGUgUnVuTWV0YWRhdGEgcHJvdG8gaXMKICAgICAgICAgICAgcGFzc2VkIHRvIHRoZSBGaWxlV3JpdGVyIHdoZW4gYSBzcGVjaWZpYyBzZXNzaW9uIGlzIHJ1bi4KICAgICAgICAgIDwvcGFwZXItdG9vbHRpcD4KCiAgICAgICAgICA8cGFwZXItcmFkaW8tYnV0dG9uIGlkPSJtZW1vcnktcmFkaW8tYnV0dG9uIiBuYW1lPSJtZW1vcnkiIGRpc2FibGVkPSJbWyFzdGF0c11dIj4KICAgICAgICAgICAgTWVtb3J5CiAgICAgICAgICA8L3BhcGVyLXJhZGlvLWJ1dHRvbj4KICAgICAgICAgIDxwYXBlci10b29sdGlwIGFuaW1hdGlvbi1kZWxheT0iMCIgZm9yPSJtZW1vcnktcmFkaW8tYnV0dG9uIiBwb3NpdGlvbj0icmlnaHQiIG9mZnNldD0iMCI+CiAgICAgICAgICAgIENvbG9yaW5nIGJ5IG1lbW9yeSBpcyBvbmx5IGVuYWJsZWQgaWYgdGhlIFJ1bk1ldGFkYXRhIHByb3RvIGlzCiAgICAgICAgICAgIHBhc3NlZCB0byB0aGUgRmlsZVdyaXRlciB3aGVuIGEgc3BlY2lmaWMgc2Vzc2lvbiBpcyBydW4uCiAgICAgICAgICA8L3BhcGVyLXRvb2x0aXA+CgogICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbiBpZD0idHB1LWNvbXBhdGliaWxpdHktcmFkaW8tYnV0dG9uIiBuYW1lPSJvcF9jb21wYXRpYmlsaXR5Ij4KICAgICAgICAgICAgVFBVIENvbXBhdGliaWxpdHkKICAgICAgICAgIDwvcGFwZXItcmFkaW8tYnV0dG9uPgogICAgICAgICAgPHBhcGVyLXRvb2x0aXAgYW5pbWF0aW9uLWRlbGF5PSIwIiBmb3I9InRwdS1jb21wYXRpYmlsaXR5LXJhZGlvLWJ1dHRvbiIgcG9zaXRpb249InJpZ2h0IiBvZmZzZXQ9IjAiPgogICAgICAgICAgICBDb2xvcmluZyBieSB3aGV0aGVyIGFuIG9wZXJhdGlvbiBpcyBjb21wYXRpYmxlIGZvciB0aGUgVFBVIGRldmljZS4KICAgICAgICAgIDwvcGFwZXItdG9vbHRpcD4KICAgICAgICA8L3BhcGVyLXJhZGlvLWdyb3VwPgogICAgICAgIDxzcGFuIGNsYXNzPSJzcGFjZXIiPjwvc3Bhbj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXY+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19pc0dyYWRpZW50Q29sb3Jpbmcoc3RhdHMsIGNvbG9yQnkpXV0iPgogICAgICAgICAgPHN2ZyB3aWR0aD0iMTQwIiBoZWlnaHQ9IjIwIiBzdHlsZT0ibWFyZ2luOiAwIDVweCIgY2xhc3M9ImNvbG9yLXRleHQiPgogICAgICAgICAgICA8ZGVmcz4KICAgICAgICAgICAgICA8bGluZWFyZ3JhZGllbnQgaWQ9ImxpbmVhckdyYWRpZW50IiB4MT0iMCUiIHkxPSIwJSIgeDI9IjEwMCUiIHkyPSIwJSI+CiAgICAgICAgICAgICAgICA8c3RvcCBjbGFzcz0ic3RhcnQiIG9mZnNldD0iMCUiIHN0b3AtY29sb3IkPSJbW19jdXJyZW50R3JhZGllbnRQYXJhbXMuc3RhcnRDb2xvcl1dIiAvPgogICAgICAgICAgICAgICAgPHN0b3AgY2xhc3M9ImVuZCIgb2Zmc2V0PSIxMDAlIiBzdG9wLWNvbG9yJD0iW1tfY3VycmVudEdyYWRpZW50UGFyYW1zLmVuZENvbG9yXV0iIC8+CiAgICAgICAgICAgICAgPC9saW5lYXJncmFkaWVudD4KICAgICAgICAgICAgPC9kZWZzPgogICAgICAgICAgICA8cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTM1IiBoZWlnaHQ9IjIwIiBmaWxsPSJ1cmwoI2xpbmVhckdyYWRpZW50KSIgc3Ryb2tlPSJibGFjayIgLz4KICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgPGRpdiBjbGFzcz0iZG9tYWluVmFsdWVzIGNvbG9yLXRleHQiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJkb21haW5TdGFydCI+W1tfY3VycmVudEdyYWRpZW50UGFyYW1zLm1pblZhbHVlXV08L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iZG9tYWluRW5kIj5bW19jdXJyZW50R3JhZGllbnRQYXJhbXMubWF4VmFsdWVdXTwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8YnIgc3R5bGU9ImNsZWFyOiBib3RoIj4KICAgICAgICAgIDxkaXY+RGV2aWNlcyBpbmNsdWRlZCBpbiBzdGF0czo8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImRldmljZUxpc3QiPgogICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19jdXJyZW50RGV2aWNlc11dIj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2xvci1sZWdlbmQtcm93IGRldmljZXMtY2hlY2tib3giPgogICAgICAgICAgICAgICAgPHNwYW4+PGlucHV0IHR5cGU9ImNoZWNrYm94IiB2YWx1ZSQ9IltbaXRlbS5kZXZpY2VdXSIgY2hlY2tlZCQ9IltbaXRlbS51c2VkXV0iIG9uLWNsaWNrPSJfZGV2aWNlQ2hlY2tib3hDbGlja2VkIj48L3NwYW4+CiAgICAgICAgICAgICAgICA8c3Bhbj5bW2l0ZW0uc3VmZml4XV08L3NwYW4+CiAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbaXRlbS5pZ25vcmVkTXNnXV0iPgogICAgICAgICAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24gaWNvbj0iaGVscCIgY2xhc3M9ImhlbHAtaWNvbiI+PC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgICAgICAgICAgICAgPHBhcGVyLXRvb2x0aXAgcG9zaXRpb249InJpZ2h0IiBvZmZzZXQ9IjAiIGFuaW1hdGlvbi1kZWxheT0iMCI+W1tpdGVtLmlnbm9yZWRNc2ddXTwvcGFwZXItdG9vbHRpcD4KICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfZXF1YWxzKGNvbG9yQnksICdzdHJ1Y3R1cmUnKV1dIj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbG9yLXRleHQiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2xvci1sZWdlbmQtcm93Ij4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGFiZWwiPgogICAgICAgICAgICAgICAgY29sb3JzCiAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjb2xvci1sZWdlbmQtdmFsdWUiPnNhbWUgc3Vic3RydWN0dXJlPC9zcGFuPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sb3ItbGVnZW5kLXJvdyI+CiAgICAgICAgICAgICAgPHRmLWdyYXBoLWljb24gdHlwZT0iTUVUQSIgaGVpZ2h0PSIxNiIgZmlsbC1vdmVycmlkZT0iI2VlZSIgc3Ryb2tlLW92ZXJyaWRlPSIjYTZhNmE2Ij48L3RmLWdyYXBoLWljb24+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNvbG9yLWxlZ2VuZC12YWx1ZSI+dW5pcXVlIHN1YnN0cnVjdHVyZTwvc3Bhbj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfZXF1YWxzKGNvbG9yQnksICdkZXZpY2UnKV1dIj4KICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX2N1cnJlbnREZXZpY2VQYXJhbXNdXSI+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sb3ItbGVnZW5kLXJvdyI+CiAgICAgICAgICAgICAgICA8dGYtZ3JhcGgtaWNvbiB0eXBlPSJNRVRBIiBoZWlnaHQ9IjE2IiBmaWxsLW92ZXJyaWRlPSJbW2l0ZW0uY29sb3JdXSIgc3Ryb2tlLW92ZXJyaWRlPSIjYTZhNmE2Ij48L3RmLWdyYXBoLWljb24+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iY29sb3ItbGVnZW5kLXZhbHVlIj5bW2l0ZW0uZGV2aWNlXV08L3NwYW4+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbG9yLWxlZ2VuZC1yb3ciPgogICAgICAgICAgICAgIDx0Zi1ncmFwaC1pY29uIHR5cGU9Ik1FVEEiIGhlaWdodD0iMTYiIGZpbGwtb3ZlcnJpZGU9IiNlZWUiIHN0cm9rZS1vdmVycmlkZT0iI2E2YTZhNiI+PC90Zi1ncmFwaC1pY29uPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjb2xvci1sZWdlbmQtdmFsdWUiPnVua25vd24gZGV2aWNlPC9zcGFuPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19lcXVhbHMoY29sb3JCeSwgJ3hsYV9jbHVzdGVyJyldXSI+CiAgICAgICAgICA8ZGl2PgogICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19jdXJyZW50WGxhQ2x1c3RlclBhcmFtc11dIj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2xvci1sZWdlbmQtcm93Ij4KICAgICAgICAgICAgICAgIDxzdmc+CiAgICAgICAgICAgICAgICAgIDx1c2UgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHhsaW5rOmhyZWY9IiN1bmZpbGxlZC1yZWN0IiB4PSIwIiB5PSIwIiBzdHlsZT0iZmlsbDpbW2l0ZW0uY29sb3JdXSIgLz4KICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNvbG9yLWxlZ2VuZC12YWx1ZSI+W1tpdGVtLnhsYV9jbHVzdGVyXV08L3NwYW4+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbG9yLWxlZ2VuZC1yb3ciPgogICAgICAgICAgICAgIDxzdmc+CiAgICAgICAgICAgICAgICA8dXNlIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bGluazpocmVmPSIjZ3JleS1yZWN0IiB4PSIwIiB5PSIwIiAvPgogICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjb2xvci1sZWdlbmQtdmFsdWUiPnVua25vd24gWExBIGNsdXN0ZXI8L3NwYW4+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2VxdWFscyhjb2xvckJ5LCAnb3BfY29tcGF0aWJpbGl0eScpXV0iPgogICAgICAgICAgPGRpdiBjbGFzcz0iY29sb3ItdGV4dCI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbG9yLWxlZ2VuZC1yb3ciPgogICAgICAgICAgICAgIDx0Zi1ncmFwaC1pY29uIHR5cGU9Ik9QIiBoZWlnaHQ9IjE2IiBmaWxsLW92ZXJyaWRlPSIjMGY5ZDU4IiBzdHJva2Utb3ZlcnJpZGU9IiNjY2MiPjwvdGYtZ3JhcGgtaWNvbj4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iY29sb3ItbGVnZW5kLXZhbHVlIj5WYWxpZCBPcDwvc3Bhbj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbG9yLWxlZ2VuZC1yb3ciPgogICAgICAgICAgICAgIDx0Zi1ncmFwaC1pY29uIHR5cGU9Ik9QIiBoZWlnaHQ9IjE2IiBmaWxsLW92ZXJyaWRlPSIjZGI0NDM3IiBzdHJva2Utb3ZlcnJpZGU9IiNjY2MiPjwvdGYtZ3JhcGgtaWNvbj4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iY29sb3ItbGVnZW5kLXZhbHVlIj5JbnZhbGlkIE9wPC9zcGFuPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19zdGF0c05vdE51bGwoc3RhdHMpXV0iPgogICAgICAgICAgPGRpdiBjbGFzcz0iY29sb3ItbGVnZW5kLXJvdyI+CiAgICAgICAgICAgIDx0Zi1ncmFwaC1pY29uIHR5cGU9Ik1FVEEiIGhlaWdodD0iMTYiIGZhZGVkPjwvdGYtZ3JhcGgtaWNvbj4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNvbG9yLWxlZ2VuZC12YWx1ZSI+dW51c2VkIHN1YnN0cnVjdHVyZTwvc3Bhbj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJsZWdlbmQtaG9sZGVyIj4KICAgICAgPHBhcGVyLWljb24tYnV0dG9uIGljb249IltbX2dldFRvZ2dsZUxlZ2VuZEljb24oX2xlZ2VuZE9wZW5lZCldXSIgb24tY2xpY2s9Il90b2dnbGVMZWdlbmRPcGVuIiBjbGFzcz0idG9nZ2xlLWxlZ2VuZC1idXR0b24iPgogICAgICA8L3BhcGVyLWljb24tYnV0dG9uPgogICAgICA8c3BhbiBjbGFzcz0idG9nZ2xlLWxlZ2VuZC10ZXh0Ij4KICAgICAgICBbW19nZXRUb2dnbGVUZXh0KF9sZWdlbmRPcGVuZWQpXV0KICAgICAgPC9zcGFuPgogICAgICA8aXJvbi1jb2xsYXBzZSBvcGVuZWQ9IltbX2xlZ2VuZE9wZW5lZF1dIj4KICAgICAgICA8ZGl2PgogICAgICAgICAgPHRhYmxlPgogICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgPHRkPjxkaXYgY2xhc3M9InRpdGxlIj5HcmFwaDwvZGl2PjwvdGQ+CiAgICAgICAgICAgICAgPHRkPigqID0gZXhwYW5kYWJsZSk8L3RkPgogICAgICAgICAgICA8L3RyPgogICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgPHRmLWdyYXBoLWljb24gdHlwZT0iTUVUQSIgaGVpZ2h0PSIxNiIgZmlsbC1vdmVycmlkZT0iI2Q5ZDlkOSIgc3Ryb2tlLW92ZXJyaWRlPSIjY2NjIj48L3RmLWdyYXBoLWljb24+CiAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICBOYW1lc3BhY2U8c3BhbiBjbGFzcz0iZ3JheSI+Kjwvc3Bhbj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxlZ2VuZC1jbGFyaWZpZXIiPgogICAgICAgICAgICAgICAgICA8c3Bhbj4/PC9zcGFuPgogICAgICAgICAgICAgICAgICA8cGFwZXItdG9vbHRpcCBhbmltYXRpb24tZGVsYXk9IjAiIHBvc2l0aW9uPSJyaWdodCIgb2Zmc2V0PSIwIj4KICAgICAgICAgICAgICAgICAgICBFbmNhcHN1bGF0ZXMgYSBzZXQgb2Ygbm9kZXMuIE5hbWVzcGFjZSBpcyBoaWVyYXJjaGljYWwgYW5kCiAgICAgICAgICAgICAgICAgICAgYmFzZWQgb24gc2NvcGUuCiAgICAgICAgICAgICAgICAgIDwvcGFwZXItdG9vbHRpcD4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICA8dGYtZ3JhcGgtaWNvbiB0eXBlPSJPUCIgaGVpZ2h0PSIxNiI+PC90Zi1ncmFwaC1pY29uPgogICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgT3BOb2RlCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsZWdlbmQtY2xhcmlmaWVyIj4KICAgICAgICAgICAgICAgICAgPHNwYW4+Pzwvc3Bhbj4KICAgICAgICAgICAgICAgICAgPHBhcGVyLXRvb2x0aXAgYW5pbWF0aW9uLWRlbGF5PSIwIiBwb3NpdGlvbj0icmlnaHQiIG9mZnNldD0iMCI+CiAgICAgICAgICAgICAgICAgICAgTm9kZSB0aGF0IHBlcmZvcm1zIGFuIG9wZXJhdGlvbi4gVGhlc2Ugbm9kZXMgY2Fubm90IGV4cGFuZC4KICAgICAgICAgICAgICAgICAgPC9wYXBlci10b29sdGlwPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgIDx0Zi1ncmFwaC1pY29uIHR5cGU9IlNFUklFUyIgaGVpZ2h0PSIxNiI+PC90Zi1ncmFwaC1pY29uPgogICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgVW5jb25uZWN0ZWQgc2VyaWVzPHNwYW4gY2xhc3M9ImdyYXkiPio8L3NwYW4+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsZWdlbmQtY2xhcmlmaWVyIj4KICAgICAgICAgICAgICAgICAgPHNwYW4+Pzwvc3Bhbj4KICAgICAgICAgICAgICAgICAgPHBhcGVyLXRvb2x0aXAgYW5pbWF0aW9uLWRlbGF5PSIwIiBwb3NpdGlvbj0icmlnaHQiIG9mZnNldD0iMCI+CiAgICAgICAgICAgICAgICAgICAgU2VxdWVuY2Ugb2YgbnVtYmVyZWQgbm9kZXMgdGhhdCBhcmUgbm90IGNvbm5lY3RlZCB0byBlYWNoCiAgICAgICAgICAgICAgICAgICAgb3RoZXIuCiAgICAgICAgICAgICAgICAgIDwvcGFwZXItdG9vbHRpcD4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICA8dGYtZ3JhcGgtaWNvbiB0eXBlPSJTRVJJRVMiIGhlaWdodD0iMTYiIHZlcnRpY2FsPjwvdGYtZ3JhcGgtaWNvbj4KICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgIENvbm5lY3RlZCBzZXJpZXM8c3BhbiBjbGFzcz0iZ3JheSI+Kjwvc3Bhbj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxlZ2VuZC1jbGFyaWZpZXIiPgogICAgICAgICAgICAgICAgICA8c3Bhbj4/PC9zcGFuPgogICAgICAgICAgICAgICAgICA8cGFwZXItdG9vbHRpcCBhbmltYXRpb24tZGVsYXk9IjAiIHBvc2l0aW9uPSJyaWdodCIgb2Zmc2V0PSIwIj4KICAgICAgICAgICAgICAgICAgICBTZXF1ZW5jZSBvZiBudW1iZXJlZCBub2RlcyB0aGF0IGFyZSBjb25uZWN0ZWQgdG8gZWFjaCBvdGhlci4KICAgICAgICAgICAgICAgICAgPC9wYXBlci10b29sdGlwPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9Imljb24iPgogICAgICAgICAgICAgICAgICA8Y2lyY2xlIGZpbGw9IndoaXRlIiBzdHJva2U9IiM4NDg0ODQiIGN4PSIxMCIgY3k9IjEwIiByPSI1IiAvPgogICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICBDb25zdGFudAogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGVnZW5kLWNsYXJpZmllciI+CiAgICAgICAgICAgICAgICAgIDxzcGFuPj88L3NwYW4+CiAgICAgICAgICAgICAgICAgIDxwYXBlci10b29sdGlwIGFuaW1hdGlvbi1kZWxheT0iMCIgcG9zaXRpb249InJpZ2h0IiBvZmZzZXQ9IjAiPgogICAgICAgICAgICAgICAgICAgIE5vZGUgdGhhdCBvdXRwdXRzIGEgY29uc3RhbnQgdmFsdWUuCiAgICAgICAgICAgICAgICAgIDwvcGFwZXItdG9vbHRpcD4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICA8dGYtZ3JhcGgtaWNvbiB0eXBlPSJTVU1NQVJZIiBoZWlnaHQ9IjIwIj48L3RmLWdyYXBoLWljb24+CiAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICBTdW1tYXJ5CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsZWdlbmQtY2xhcmlmaWVyIj4KICAgICAgICAgICAgICAgICAgPHNwYW4+Pzwvc3Bhbj4KICAgICAgICAgICAgICAgICAgPHBhcGVyLXRvb2x0aXAgYW5pbWF0aW9uLWRlbGF5PSIwIiBwb3NpdGlvbj0icmlnaHQiIG9mZnNldD0iMCI+CiAgICAgICAgICAgICAgICAgICAgTm9kZSB0aGF0IGNvbGxlY3RzIGRhdGEgZm9yIHZpc3VhbGl6YXRpb24gd2l0aGluCiAgICAgICAgICAgICAgICAgICAgVGVuc29yQm9hcmQuCiAgICAgICAgICAgICAgICAgIDwvcGFwZXItdG9vbHRpcD4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPSJpY29uIiBoZWlnaHQ9IjE1cHgiIHByZXNlcnZlYXNwZWN0cmF0aW89InhNaW5ZTWlkIG1lZXQiIHZpZXdib3g9IjAgMCAxNSAxNSI+CiAgICAgICAgICAgICAgICAgIDxkZWZzPgogICAgICAgICAgICAgICAgICAgIDxtYXJrZXIgaWQ9ImRhdGFmbG93LWFycm93aGVhZC1sZWdlbmQiIGZpbGw9IiNiYmIiIG1hcmtlcndpZHRoPSIxMCIgbWFya2VyaGVpZ2h0PSIxMCIgcmVmeD0iOSIgcmVmeT0iNSIgb3JpZW50PSJhdXRvLXN0YXJ0LXJldmVyc2UiPgogICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTSAwLDAgTCAxMCw1IEwgMCwxMCBDIDMsNyAzLDMgMCwwIiAvPgogICAgICAgICAgICAgICAgICAgIDwvbWFya2VyPgogICAgICAgICAgICAgICAgICA8L2RlZnM+CiAgICAgICAgICAgICAgICAgIDxwYXRoIG1hcmtlci1lbmQ9InVybCgjZGF0YWZsb3ctYXJyb3doZWFkLWxlZ2VuZCkiIHN0cm9rZT0iI2JiYiIgZD0iTTIgOSBsIDI5IDAiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgLz4KICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgRGF0YWZsb3cgZWRnZQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGVnZW5kLWNsYXJpZmllciI+CiAgICAgICAgICAgICAgICAgIDxzcGFuPj88L3NwYW4+CiAgICAgICAgICAgICAgICAgIDxwYXBlci10b29sdGlwIGFuaW1hdGlvbi1kZWxheT0iMCIgcG9zaXRpb249InJpZ2h0IiBvZmZzZXQ9IjAiPgogICAgICAgICAgICAgICAgICAgIEVkZ2Ugc2hvd2luZyB0aGUgZGF0YSBmbG93IGJldHdlZW4gb3BlcmF0aW9ucy4gRWRnZXMgZmxvdwogICAgICAgICAgICAgICAgICAgIHVwd2FyZHMgdW5sZXNzIGFycm93aGVhZHMgc3BlY2lmeSBvdGhlcndpc2UuCiAgICAgICAgICAgICAgICAgIDwvcGFwZXItdG9vbHRpcD4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPSJpY29uIiBoZWlnaHQ9IjE1cHgiIHByZXNlcnZlYXNwZWN0cmF0aW89InhNaW5ZTWlkIG1lZXQiIHZpZXdib3g9IjAgMCAxNSAxNSI+CiAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZT0iI2JiYiIgZD0iTTIgOSBsIDI5IDAiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWRhc2hhcnJheT0iMiwgMiIgLz4KICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgQ29udHJvbCBkZXBlbmRlbmN5IGVkZ2UKICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxlZ2VuZC1jbGFyaWZpZXIiPgogICAgICAgICAgICAgICAgICA8c3Bhbj4/PC9zcGFuPgogICAgICAgICAgICAgICAgICA8cGFwZXItdG9vbHRpcCBhbmltYXRpb24tZGVsYXk9IjAiIHBvc2l0aW9uPSJyaWdodCIgb2Zmc2V0PSIwIj4KICAgICAgICAgICAgICAgICAgICBFZGdlIHNob3dpbmcgdGhlIGNvbnRyb2wgZGVwZW5kZW5jeSBiZXR3ZWVuIG9wZXJhdGlvbnMuCiAgICAgICAgICAgICAgICAgIDwvcGFwZXItdG9vbHRpcD4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPSJpY29uIiBoZWlnaHQ9IjE1cHgiIHByZXNlcnZlYXNwZWN0cmF0aW89InhNaW5ZTWlkIG1lZXQiIHZpZXdib3g9IjAgMCAxNSAxNSI+CiAgICAgICAgICAgICAgICAgIDxkZWZzPgogICAgICAgICAgICAgICAgICAgIDxtYXJrZXIgaWQ9InJlZmVyZW5jZS1hcnJvd2hlYWQtbGVnZW5kIiBmaWxsPSIjRkZCNzREIiBtYXJrZXJ3aWR0aD0iMTAiIG1hcmtlcmhlaWdodD0iMTAiIHJlZng9IjkiIHJlZnk9IjUiIG9yaWVudD0iYXV0by1zdGFydC1yZXZlcnNlIj4KICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0gMCwwIEwgMTAsNSBMIDAsMTAgQyAzLDcgMywzIDAsMCIgLz4KICAgICAgICAgICAgICAgICAgICA8L21hcmtlcj4KICAgICAgICAgICAgICAgICAgPC9kZWZzPgogICAgICAgICAgICAgICAgICA8cGF0aCBtYXJrZXItZW5kPSJ1cmwoI3JlZmVyZW5jZS1hcnJvd2hlYWQtbGVnZW5kKSIgc3Ryb2tlPSIjRkZCNzREIiBkPSJNMiA5IGwgMjkgMCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiAvPgogICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICBSZWZlcmVuY2UgZWRnZQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGVnZW5kLWNsYXJpZmllciI+CiAgICAgICAgICAgICAgICAgIDxzcGFuPj88L3NwYW4+CiAgICAgICAgICAgICAgICAgIDxwYXBlci10b29sdGlwIGFuaW1hdGlvbi1kZWxheT0iMCIgcG9zaXRpb249InJpZ2h0IiBvZmZzZXQ9IjAiPgogICAgICAgICAgICAgICAgICAgIEVkZ2Ugc2hvd2luZyB0aGF0IHRoZSBvdXRnb2luZyBvcGVyYXRpb24gbm9kZSBjYW4gbXV0YXRlIHRoZQogICAgICAgICAgICAgICAgICAgIGluY29taW5nIHRlbnNvci4KICAgICAgICAgICAgICAgICAgPC9wYXBlci10b29sdGlwPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgPC90cj4KICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvaXJvbi1jb2xsYXBzZT4KICAgIDwvZGl2PgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT4KCjxzY3JpcHQ+Ly9+fldFQlBBVEh+fi90Zi1ncmFwaC1jb250cm9scy90Zi1ncmFwaC1jb250cm9scy5qcwooZnVuY3Rpb24oYSl7KGZ1bmN0aW9uKGMpeyhmdW5jdGlvbihkKXtjb25zdCBmPS9kZXZpY2U6KFteOl0rOlswLTldKykkLyxnPVt7cmVnZXg6Zn1dLGw9W107bGV0IGs7KGZ1bmN0aW9uKHApe3AuQ09NUFVURV9USU1FPSJjb21wdXRlX3RpbWUiO3AuTUVNT1JZPSJtZW1vcnkiO3AuU1RSVUNUVVJFPSJzdHJ1Y3R1cmUiO3AuWExBX0NMVVNURVI9InhsYV9jbHVzdGVyIjtwLk9QX0NPTVBBVElCSUxJVFk9Im9wX2NvbXBhdGliaWxpdHkifSkoaz1kLkNvbG9yQnl8fChkLkNvbG9yQnk9e30pKTtjb25zdCBtPW5ldyBTZXQoW2suQ09NUFVURV9USU1FLGsuTUVNT1JZXSk7UG9seW1lcih7aXM6InRmLWdyYXBoLWNvbnRyb2xzIixwcm9wZXJ0aWVzOntzdGF0czp7dmFsdWU6bnVsbCx0eXBlOk9iamVjdCxvYnNlcnZlcjoiX3N0YXRzQ2hhbmdlZCJ9LGRldmljZXNGb3JTdGF0czp7dmFsdWU6bnVsbCx0eXBlOk9iamVjdCxub3RpZnk6ITAscmVhZG9ubHk6ITB9LGNvbG9yQnk6e3R5cGU6U3RyaW5nLAp2YWx1ZTprLlNUUlVDVFVSRSxub3RpZnk6ITB9LGNvbG9yQnlQYXJhbXM6e3R5cGU6T2JqZWN0LG5vdGlmeTohMCxyZWFkb25seTohMH0sZGF0YXNldHM6e3R5cGU6QXJyYXksb2JzZXJ2ZXI6Il9kYXRhc2V0c0NoYW5nZWQiLHZhbHVlOigpPT5bXX0scmVuZGVySGllcmFyY2h5Ont0eXBlOk9iamVjdH0sc2VsZWN0aW9uOnt0eXBlOk9iamVjdCxub3RpZnk6ITAscmVhZE9ubHk6ITAsY29tcHV0ZWQ6Il9jb21wdXRlU2VsZWN0aW9uKGRhdGFzZXRzLCBfc2VsZWN0ZWRSdW5JbmRleCwgX3NlbGVjdGVkVGFnSW5kZXgsIF9zZWxlY3RlZEdyYXBoVHlwZSkifSxzZWxlY3RlZEZpbGU6e3R5cGU6T2JqZWN0LG5vdGlmeTohMH0sX3NlbGVjdGVkUnVuSW5kZXg6e3R5cGU6TnVtYmVyLHZhbHVlOjAsb2JzZXJ2ZXI6Il9zZWxlY3RlZFJ1bkluZGV4Q2hhbmdlZCJ9LHRyYWNlSW5wdXRzOnt0eXBlOkJvb2xlYW4sbm90aWZ5OiEwLHZhbHVlOiExfSxfc2VsZWN0ZWRUYWdJbmRleDp7dHlwZTpOdW1iZXIsCnZhbHVlOjAsb2JzZXJ2ZXI6Il9zZWxlY3RlZFRhZ0luZGV4Q2hhbmdlZCJ9LF9zZWxlY3RlZEdyYXBoVHlwZTp7dHlwZTpTdHJpbmcsdmFsdWU6YS5ncmFwaC5TZWxlY3Rpb25UeXBlLk9QX0dSQVBIfSxzZWxlY3RlZE5vZGU6e3R5cGU6U3RyaW5nLG5vdGlmeTohMH0sX2N1cnJlbnREZXZpY2VzOnt0eXBlOkFycmF5LGNvbXB1dGVkOiJfZ2V0Q3VycmVudERldmljZXMoZGV2aWNlc0ZvclN0YXRzKSJ9LF9jdXJyZW50RGV2aWNlUGFyYW1zOnt0eXBlOkFycmF5LGNvbXB1dGVkOiJfZ2V0Q3VycmVudERldmljZVBhcmFtcyhjb2xvckJ5UGFyYW1zKSJ9LF9jdXJyZW50WGxhQ2x1c3RlclBhcmFtczp7dHlwZTpBcnJheSxjb21wdXRlZDoiX2dldEN1cnJlbnRYbGFDbHVzdGVyUGFyYW1zKGNvbG9yQnlQYXJhbXMpIn0sX2N1cnJlbnRHcmFkaWVudFBhcmFtczp7dHlwZTpPYmplY3QsY29tcHV0ZWQ6Il9nZXRDdXJyZW50R3JhZGllbnRQYXJhbXMoY29sb3JCeVBhcmFtcywgY29sb3JCeSkifSwKc2hvd1Nlc3Npb25SdW5zRHJvcGRvd246e3R5cGU6Qm9vbGVhbix2YWx1ZTohMH0sc2hvd1VwbG9hZEJ1dHRvbjp7dHlwZTpCb29sZWFuLHZhbHVlOiEwfSxoZWFsdGhQaWxsc0ZlYXR1cmVFbmFibGVkOkJvb2xlYW4saGVhbHRoUGlsbHNUb2dnbGVkT246e3R5cGU6Qm9vbGVhbixub3RpZnk6ITB9LF9sZWdlbmRPcGVuZWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMH19LF94bGFDbHVzdGVyc1Byb3ZpZGVkOmZ1bmN0aW9uKHApe3JldHVybiBwJiZwLmhpZXJhcmNoeSYmMDxwLmhpZXJhcmNoeS54bGFDbHVzdGVycy5sZW5ndGh9LF9zdGF0c0NoYW5nZWQ6ZnVuY3Rpb24ocCl7aWYobnVsbCE9cCl7dmFyIHE9e307Xy5lYWNoKHAuZGV2X3N0YXRzLGZ1bmN0aW9uKHIpe3ZhciB0PV8uc29tZShnLGZ1bmN0aW9uKEEpe3JldHVybiBBLnJlZ2V4LnRlc3Qoci5kZXZpY2UpfSksdj1fLnNvbWUobCxmdW5jdGlvbihBKXtyZXR1cm4gQS5yZWdleC50ZXN0KHIuZGV2aWNlKX0pO3QmJiF2JiYocVtyLmRldmljZV09CiEwKX0pO3RoaXMuc2V0KCJkZXZpY2VzRm9yU3RhdHMiLHEpfX0sX2dldEN1cnJlbnREZXZpY2VzOmZ1bmN0aW9uKHApe3ZhciBxPXRoaXMuc3RhdHM7cT0ocT9xLmRldl9zdGF0czpbXSkubWFwKHQ9PnQuZGV2aWNlKS5maWx0ZXIodD0+Zy5zb21lKHY9PnYucmVnZXgudGVzdCh0KSkpO2NvbnN0IHI9YS5ncmFwaC51dGlsLnJlbW92ZUNvbW1vblByZWZpeChxKTtpZigxPT1yLmxlbmd0aCl7Y29uc3QgdD1yWzBdLm1hdGNoKGYpO3QmJihyWzBdPXRbMV0pfXJldHVybiBxLm1hcCgodCx2KT0+e2xldCBBPW51bGw7bC5mb3JFYWNoKHk9Pnt5LnJlZ2V4LnRlc3QodCkmJihBPXkubXNnKX0pO3JldHVybntkZXZpY2U6dCxzdWZmaXg6clt2XSx1c2VkOnBbdF0saWdub3JlZE1zZzpBfX0pfSxfZGV2aWNlQ2hlY2tib3hDbGlja2VkOmZ1bmN0aW9uKHApe3A9cC50YXJnZXQ7Y29uc3QgcT1PYmplY3QuYXNzaWduKHt9LHRoaXMuZGV2aWNlc0ZvclN0YXRzKSxyPXAudmFsdWU7cC5jaGVja2VkPwpxW3JdPSEwOmRlbGV0ZSBxW3JdO3RoaXMuc2V0KCJkZXZpY2VzRm9yU3RhdHMiLHEpfSxfbnVtVGFnczpmdW5jdGlvbihwLHEpe3JldHVybiB0aGlzLl9nZXRUYWdzKHAscSkubGVuZ3RofSxfZ2V0VGFnczpmdW5jdGlvbihwLHEpe3JldHVybiBwJiZwW3FdP3BbcV0udGFnczpbXX0sX2ZpdDpmdW5jdGlvbigpe3RoaXMuZmlyZSgiZml0LXRhcCIpfSxfaXNHcmFkaWVudENvbG9yaW5nOmZ1bmN0aW9uKHAscSl7cmV0dXJuIG0uaGFzKHEpJiZudWxsIT1wfSxfZXF1YWxzOmZ1bmN0aW9uKHAscSl7cmV0dXJuIHA9PT1xfSxfZ2V0Q3VycmVudERldmljZVBhcmFtczpmdW5jdGlvbihwKXtwPXAuZGV2aWNlLmZpbHRlcih0PT5nLnNvbWUodj0+di5yZWdleC50ZXN0KHQuZGV2aWNlKSkpO2NvbnN0IHE9YS5ncmFwaC51dGlsLnJlbW92ZUNvbW1vblByZWZpeChwLm1hcCh0PT50LmRldmljZSkpO2lmKDE9PXEubGVuZ3RoKXt2YXIgcj1xWzBdLm1hdGNoKGYpO3ImJihxWzBdPXJbMV0pfXJldHVybiBwLm1hcCgodCwKdik9Pih7ZGV2aWNlOnFbdl0sY29sb3I6dC5jb2xvcn0pKX0sX2dldEN1cnJlbnRYbGFDbHVzdGVyUGFyYW1zOmZ1bmN0aW9uKHApe3JldHVybiBwLnhsYV9jbHVzdGVyfSxfZ2V0Q3VycmVudEdyYWRpZW50UGFyYW1zOmZ1bmN0aW9uKHAscSl7aWYodGhpcy5faXNHcmFkaWVudENvbG9yaW5nKHRoaXMuc3RhdHMscSkpe3A9cFtxXTt2YXIgcj1wLm1pblZhbHVlLHQ9cC5tYXhWYWx1ZTtxPT09ay5NRU1PUlk/KHI9YS5ncmFwaC51dGlsLmNvbnZlcnRVbml0c1RvSHVtYW5SZWFkYWJsZShyLGEuZ3JhcGgudXRpbC5NRU1PUllfVU5JVFMpLHQ9YS5ncmFwaC51dGlsLmNvbnZlcnRVbml0c1RvSHVtYW5SZWFkYWJsZSh0LGEuZ3JhcGgudXRpbC5NRU1PUllfVU5JVFMpKTpxPT09ay5DT01QVVRFX1RJTUUmJihyPWEuZ3JhcGgudXRpbC5jb252ZXJ0VW5pdHNUb0h1bWFuUmVhZGFibGUocixhLmdyYXBoLnV0aWwuVElNRV9VTklUUyksdD1hLmdyYXBoLnV0aWwuY29udmVydFVuaXRzVG9IdW1hblJlYWRhYmxlKHQsCmEuZ3JhcGgudXRpbC5USU1FX1VOSVRTKSk7cmV0dXJue21pblZhbHVlOnIsbWF4VmFsdWU6dCxzdGFydENvbG9yOnAuc3RhcnRDb2xvcixlbmRDb2xvcjpwLmVuZENvbG9yfX19LGRvd25sb2FkOmZ1bmN0aW9uKCl7dGhpcy4kLmdyYXBoZG93bmxvYWQuY2xpY2soKX0sX3VwZGF0ZUZpbGVJbnB1dDpmdW5jdGlvbihwKXt2YXIgcT1wLnRhcmdldC5maWxlc1swXTtpZihxKXtxPXEubmFtZTt2YXIgcj1xLmxhc3RJbmRleE9mKCIuIik7MDw9ciYmKHE9cS5zdWJzdHJpbmcoMCxyKSk7cj1xLmxhc3RJbmRleE9mKCIvIik7MDw9ciYmKHE9cS5zdWJzdHJpbmcocisxKSk7dGhpcy5fc2V0RG93bmxvYWRGaWxlbmFtZShxKTt0aGlzLnNldCgic2VsZWN0ZWRGaWxlIixwKX19LF9kYXRhc2V0c0NoYW5nZWQ6ZnVuY3Rpb24ocCxxKXtudWxsIT1xJiYodGhpcy5fc2VsZWN0ZWRSdW5JbmRleD0wKX0sX2NvbXB1dGVTZWxlY3Rpb246ZnVuY3Rpb24ocCxxLHIsdCl7cmV0dXJuIHBbcV0mJnBbcV0udGFnc1tyXT8Ke3J1bjpwW3FdLm5hbWUsdGFnOnBbcV0udGFnc1tyXS50YWcsdHlwZTp0fTpudWxsfSxfc2VsZWN0ZWRSdW5JbmRleENoYW5nZWQ6ZnVuY3Rpb24ocCl7dGhpcy5kYXRhc2V0cyYmKHRoaXMuY29sb3JCeT1rLlNUUlVDVFVSRSx0aGlzLl9zZWxlY3RlZFRhZ0luZGV4PTAsdGhpcy5fc2VsZWN0ZWRHcmFwaFR5cGU9dGhpcy5fZ2V0RGVmYXVsdFNlbGVjdGlvblR5cGUoKSx0aGlzLnRyYWNlSW5wdXRzPSExLHRoaXMuX3NldERvd25sb2FkRmlsZW5hbWUodGhpcy5kYXRhc2V0c1twXT90aGlzLmRhdGFzZXRzW3BdLm5hbWU6IiIpKX0sX3NlbGVjdGVkVGFnSW5kZXhDaGFuZ2VkKCl7dGhpcy5fc2VsZWN0ZWRHcmFwaFR5cGU9dGhpcy5fZ2V0RGVmYXVsdFNlbGVjdGlvblR5cGUoKX0sX2dldERlZmF1bHRTZWxlY3Rpb25UeXBlKCl7Y29uc3Qge2RhdGFzZXRzOnAsX3NlbGVjdGVkUnVuSW5kZXg6cSxfc2VsZWN0ZWRUYWdJbmRleDpyfT10aGlzO3JldHVybiBwJiZwW3FdJiZwW3FdLnRhZ3Nbcl0mJgohcFtxXS50YWdzW3JdLm9wR3JhcGg/cFtxXS50YWdzW3JdLnByb2ZpbGU/YS5ncmFwaC5TZWxlY3Rpb25UeXBlLlBST0ZJTEU6cFtxXS50YWdzW3JdLmNvbmNlcHR1YWxHcmFwaD9hLmdyYXBoLlNlbGVjdGlvblR5cGUuQ09OQ0VQVFVBTF9HUkFQSDphLmdyYXBoLlNlbGVjdGlvblR5cGUuT1BfR1JBUEg6YS5ncmFwaC5TZWxlY3Rpb25UeXBlLk9QX0dSQVBIfSxfZ2V0RmlsZTpmdW5jdGlvbigpe3RoaXMuJCQoIiNmaWxlIikuY2xpY2soKX0sX3NldERvd25sb2FkRmlsZW5hbWU6ZnVuY3Rpb24ocCl7dGhpcy4kLmdyYXBoZG93bmxvYWQuc2V0QXR0cmlidXRlKCJkb3dubG9hZCIscCsiLnBuZyIpfSxfc3RhdHNOb3ROdWxsOmZ1bmN0aW9uKHApe3JldHVybiBudWxsIT09cH0sX3RvZ2dsZUxlZ2VuZE9wZW4oKXt0aGlzLnNldCgiX2xlZ2VuZE9wZW5lZCIsIXRoaXMuX2xlZ2VuZE9wZW5lZCl9LF9nZXRUb2dnbGVUZXh0KHApe3JldHVybiBwPyJDbG9zZSBsZWdlbmQuIjoiRXhwYW5kIGxlZ2VuZC4ifSwKX2dldFRvZ2dsZUxlZ2VuZEljb24ocCl7cmV0dXJuIHA/ImV4cGFuZC1tb3JlIjoiZXhwYW5kLWxlc3MifSxfZ2V0U2VsZWN0aW9uT3BHcmFwaERpc2FibGVkKHAscSxyKXtyZXR1cm4hcFtxXXx8IXBbcV0udGFnc1tyXXx8IXBbcV0udGFnc1tyXS5vcEdyYXBofSxfZ2V0U2VsZWN0aW9uUHJvZmlsZURpc2FibGVkKHAscSxyKXtyZXR1cm4hcFtxXXx8IXBbcV0udGFnc1tyXXx8IXBbcV0udGFnc1tyXS5wcm9maWxlfSxfZ2V0U2VsZWN0aW9uQ29uY2VwdHVhbEdyYXBoRGlzYWJsZWQocCxxLHIpe3JldHVybiFwW3FdfHwhcFtxXS50YWdzW3JdfHwhcFtxXS50YWdzW3JdLmNvbmNlcHR1YWxHcmFwaH19KX0pKGMuY29udHJvbHN8fChjLmNvbnRyb2xzPXt9KSl9KShhLmdyYXBofHwoYS5ncmFwaD17fSkpfSkodGZ8fCh0Zj17fSkpOwo8L3NjcmlwdD4KCgoKCgoKPGRvbS1tb2R1bGUgaWQ9InRmLWdyYXBoLWRhc2hib2FyZC1sb2FkZXIiPiA8L2RvbS1tb2R1bGU+Cgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdGYtZ3JhcGgtbG9hZGVyL3RmLWdyYXBoLWRhc2hib2FyZC1sb2FkZXIuanMKaG09dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKGEsYyxkLGYpe3JldHVybiBuZXcgKGR8fChkPVByb21pc2UpKShmdW5jdGlvbihnLGwpe2Z1bmN0aW9uIGsocSl7dHJ5e3AoZi5uZXh0KHEpKX1jYXRjaChyKXtsKHIpfX1mdW5jdGlvbiBtKHEpe3RyeXtwKGZbInRocm93Il0ocSkpfWNhdGNoKHIpe2wocil9fWZ1bmN0aW9uIHAocSl7cS5kb25lP2cocS52YWx1ZSk6KG5ldyBkKGZ1bmN0aW9uKHIpe3IocS52YWx1ZSl9KSkudGhlbihrLG0pfXAoKGY9Zi5hcHBseShhLGN8fFtdKSkubmV4dCgpKX0pfTsKKGZ1bmN0aW9uKGEpeyhmdW5jdGlvbihjKXsoZnVuY3Rpb24oKXtQb2x5bWVyKHtpczoidGYtZ3JhcGgtZGFzaGJvYXJkLWxvYWRlciIscHJvcGVydGllczp7ZGF0YXNldHM6QXJyYXkscHJvZ3Jlc3M6e3R5cGU6T2JqZWN0LG5vdGlmeTohMH0sc2VsZWN0aW9uOk9iamVjdCxzZWxlY3RlZEZpbGU6T2JqZWN0LGNvbXBhdGliaWxpdHlQcm92aWRlcjp7dHlwZTpPYmplY3QsdmFsdWU6KCk9Pm5ldyBhLmdyYXBoLm9wLlRwdUNvbXBhdGliaWxpdHlQcm92aWRlcn0saGllcmFyY2h5UGFyYW1zOnt0eXBlOk9iamVjdCx2YWx1ZTooKT0+YS5ncmFwaC5oaWVyYXJjaHkuRGVmYXVsdEhpZXJhcmNoeVBhcmFtc30sb3V0R3JhcGhIaWVyYXJjaHk6e3R5cGU6T2JqZWN0LHJlYWRPbmx5OiEwLG5vdGlmeTohMH0sb3V0R3JhcGg6e3R5cGU6T2JqZWN0LHJlYWRPbmx5OiEwLG5vdGlmeTohMH0sb3V0U3RhdHM6e3R5cGU6T2JqZWN0LHJlYWRPbmx5OiEwLG5vdGlmeTohMH0sX2dyYXBoUnVuVGFnOk9iamVjdH0sCm9ic2VydmVyczpbIl9zZWxlY3Rpb25DaGFuZ2VkKHNlbGVjdGlvbiwgY29tcGF0aWJpbGl0eVByb3ZpZGVyKSIsIl9zZWxlY3RlZEZpbGVDaGFuZ2VkKHNlbGVjdGVkRmlsZSwgY29tcGF0aWJpbGl0eVByb3ZpZGVyKSJdLF9zZWxlY3Rpb25DaGFuZ2VkKCl7dGhpcy5kZWJvdW5jZSgic2VsZWN0aW9uY2hhbmdlIiwoKT0+e3RoaXMuX2xvYWQodGhpcy5zZWxlY3Rpb24pfSl9LF9sb2FkOmZ1bmN0aW9uKGQpe2NvbnN0IHtydW46Zix0YWc6Zyx0eXBlOmx9PWQ7c3dpdGNoKGwpe2Nhc2UgYS5ncmFwaC5TZWxlY3Rpb25UeXBlLk9QX0dSQVBIOmNhc2UgYS5ncmFwaC5TZWxlY3Rpb25UeXBlLkNPTkNFUFRVQUxfR1JBUEg6cmV0dXJuIHRoaXMuX3NldE91dFN0YXRzKG51bGwpLGQ9bmV3IFVSTFNlYXJjaFBhcmFtcyxkLnNldCgicnVuIixmKSxkLnNldCgiY29uY2VwdHVhbCIsU3RyaW5nKGw9PT1hLmdyYXBoLlNlbGVjdGlvblR5cGUuQ09OQ0VQVFVBTF9HUkFQSCkpLGcmJmQuc2V0KCJ0YWciLApnKSxkPVBrLmdldFJvdXRlcigpLnBsdWdpblJvdXRlKCJncmFwaHMiLCIvZ3JhcGgiLGQpLHRoaXMuX2ZldGNoQW5kQ29uc3RydWN0SGllcmFyY2hpY2FsR3JhcGgoZCkudGhlbigoKT0+e3RoaXMuX2dyYXBoUnVuVGFnPXtydW46Zix0YWc6Z319KTtjYXNlIGEuZ3JhcGguU2VsZWN0aW9uVHlwZS5QUk9GSUxFOnsoe3RhZ3M6ZH09dGhpcy5kYXRhc2V0cy5maW5kKCh7bmFtZTpxfSk9PnE9PT1mKSk7Y29uc3Qgaz1kLmZpbmQocT0+cS50YWc9PT1nKS5vcEdyYXBoP2c6bnVsbDtjb25zb2xlLmFzc2VydChkLmZpbmQocT0+cS50YWc9PT1rKSxgUmVxdWlyZWQgdGFnICgke2t9KSBpcyBtaXNzaW5nLmApO2Q9dGhpcy5fZ3JhcGhSdW5UYWcmJnRoaXMuX2dyYXBoUnVuVGFnLnJ1bj09PWYmJnRoaXMuX2dyYXBoUnVuVGFnLnRhZz09PWs/UHJvbWlzZS5yZXNvbHZlKCk6dGhpcy5fbG9hZCh7cnVuOmYsdGFnOmssdHlwZTphLmdyYXBoLlNlbGVjdGlvblR5cGUuT1BfR1JBUEh9KTtjb25zdCBtPQpuZXcgVVJMU2VhcmNoUGFyYW1zO20uc2V0KCJ0YWciLGcpO20uc2V0KCJydW4iLGYpO2NvbnN0IHA9UGsuZ2V0Um91dGVyKCkucGx1Z2luUm91dGUoImdyYXBocyIsIi9ydW5fbWV0YWRhdGEiLG0pO3JldHVybiBkLnRoZW4oKCk9PnRoaXMuX3JlYWRBbmRQYXJzZU1ldGFkYXRhKHApKX1kZWZhdWx0OnJldHVybiBQcm9taXNlLnJlamVjdChFcnJvcihgVW5rbm93biBzZWxlY3Rpb24gdHlwZTogJHtsfWApKX19LF9yZWFkQW5kUGFyc2VNZXRhZGF0YTpmdW5jdGlvbihkKXt0aGlzLnNldCgicHJvZ3Jlc3MiLHt2YWx1ZTowLG1zZzoiIn0pO2EuZ3JhcGgucGFyc2VyLmZldGNoQW5kUGFyc2VNZXRhZGF0YShkLGEuZ3JhcGgudXRpbC5nZXRUcmFja2VyKHRoaXMpKS50aGVuKGY9Pnt0aGlzLl9zZXRPdXRTdGF0cyhmKX0pfSxfZmV0Y2hBbmRDb25zdHJ1Y3RIaWVyYXJjaGljYWxHcmFwaDpmdW5jdGlvbihkLGYpe3JldHVybiBobSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7dGhpcy5zZXQoInByb2dyZXNzIiwKe3ZhbHVlOjAsbXNnOiIifSk7cmV0dXJuIGEuZ3JhcGgubG9hZGVyLmZldGNoQW5kQ29uc3RydWN0SGllcmFyY2hpY2FsR3JhcGgoYS5ncmFwaC51dGlsLmdldFRyYWNrZXIodGhpcyksZCxmLHRoaXMuY29tcGF0aWJpbGl0eVByb3ZpZGVyLHRoaXMuaGllcmFyY2h5UGFyYW1zKS50aGVuKCh7Z3JhcGg6ZyxncmFwaEhpZXJhcmNoeTpsfSk9Pnt0aGlzLl9zZXRPdXRHcmFwaChnKTt0aGlzLl9zZXRPdXRHcmFwaEhpZXJhcmNoeShsKX0pfSl9LF9zZWxlY3RlZEZpbGVDaGFuZ2VkOmZ1bmN0aW9uKGQpe2lmKGQpe2Q9ZC50YXJnZXQ7dmFyIGY9ZC5maWxlc1swXTtmJiYoZC52YWx1ZT0iIix0aGlzLl9mZXRjaEFuZENvbnN0cnVjdEhpZXJhcmNoaWNhbEdyYXBoKG51bGwsZikpfX19KX0pKGMubG9hZGVyfHwoYy5sb2FkZXI9e30pKX0pKGEuZ3JhcGh8fChhLmdyYXBoPXt9KSl9KSh0Znx8KHRmPXt9KSk7Cjwvc2NyaXB0PgoKCgoKCgo8ZG9tLW1vZHVsZSBpZD0idGYtZ3JhcGgtZGFzaGJvYXJkIj4KICA8dGVtcGxhdGU+CiAgICA8cGFwZXItZGlhbG9nIGlkPSJlcnJvci1kaWFsb2ciIHdpdGgtYmFja2Ryb3A+PC9wYXBlci1kaWFsb2c+CiAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2RhdGFzZXRzU3RhdGUoX2RhdGFzZXRzRmV0Y2hlZCwgX2RhdGFzZXRzLCAnRU1QVFknKV1dIj4KICAgICAgPGRpdiBzdHlsZT0ibWF4LXdpZHRoOiA1NDBweDsgbWFyZ2luOiA4MHB4IGF1dG8gMCBhdXRvOyI+CiAgICAgICAgPGgzPk5vIGdyYXBoIGRlZmluaXRpb24gZmlsZXMgd2VyZSBmb3VuZC48L2gzPgogICAgICAgIDxwPgogICAgICAgICAgVG8gc3RvcmUgYSBncmFwaCwgY3JlYXRlIGEKICAgICAgICAgIDxjb2RlPnRmLnN1bW1hcnkuRmlsZVdyaXRlcjwvY29kZT4KICAgICAgICAgIGFuZCBwYXNzIHRoZSBncmFwaCBlaXRoZXIgdmlhIHRoZSBjb25zdHJ1Y3Rvciwgb3IgYnkgY2FsbGluZyBpdHMKICAgICAgICAgIDxjb2RlPmFkZF9ncmFwaCgpPC9jb2RlPiBtZXRob2QuIFlvdSBtYXkgd2FudCB0byBjaGVjayBvdXQgdGhlCiAgICAgICAgICA8YSBocmVmPSJodHRwczovL3d3dy50ZW5zb3JmbG93Lm9yZy9nZXRfc3RhcnRlZC9ncmFwaF92aXoiPmdyYXBoIHZpc3VhbGl6ZXIgdHV0b3JpYWw8L2E+LgogICAgICAgIAoKICAgICAgICA8cD4KICAgICAgICAgIElmIHlvdeKAmXJlIG5ldyB0byB1c2luZyBUZW5zb3JCb2FyZCwgYW5kIHdhbnQgdG8gZmluZCBvdXQgaG93IHRvIGFkZAogICAgICAgICAgZGF0YSBhbmQgc2V0IHVwIHlvdXIgZXZlbnQgZmlsZXMsIGNoZWNrIG91dCB0aGUKICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCI+UkVBRE1FPC9hPgogICAgICAgICAgYW5kIHBlcmhhcHMgdGhlCiAgICAgICAgICA8YSBocmVmPSJodHRwczovL3d3dy50ZW5zb3JmbG93Lm9yZy9nZXRfc3RhcnRlZC9zdW1tYXJpZXNfYW5kX3RlbnNvcmJvYXJkIj5UZW5zb3JCb2FyZCB0dXRvcmlhbDwvYT4uCiAgICAgICAgCgogICAgICAgIDxwPgogICAgICAgICAgSWYgeW91IHRoaW5rIFRlbnNvckJvYXJkIGlzIGNvbmZpZ3VyZWQgcHJvcGVybHksIHBsZWFzZSBzZWUKICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCNteS10ZW5zb3Jib2FyZC1pc250LXNob3dpbmctYW55LWRhdGEtd2hhdHMtd3JvbmciPnRoZSBzZWN0aW9uIG9mIHRoZSBSRUFETUUgZGV2b3RlZCB0byBtaXNzaW5nIGRhdGEgcHJvYmxlbXM8L2E+CiAgICAgICAgICBhbmQgY29uc2lkZXIgZmlsaW5nIGFuIGlzc3VlIG9uIEdpdEh1Yi4KICAgICAgICAKICAgICAgPC9kaXY+CiAgICA8L3RlbXBsYXRlPgogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbWyFfZGF0YXNldHNTdGF0ZShkYXRhc2V0c0ZldGNoZWQsIF9kYXRhc2V0cywgJ1BSRVNFTlQnKV1dIj4KICAgICAgPHRmLWRhc2hib2FyZC1sYXlvdXQ+CiAgICAgICAgPHRmLWdyYXBoLWNvbnRyb2xzIGlkPSJjb250cm9scyIgY2xhc3M9InNpZGViYXIiIHNsb3Q9InNpZGViYXIiIGRldmljZXMtZm9yLXN0YXRzPSJ7e19kZXZpY2VzRm9yU3RhdHN9fSIgY29sb3ItYnktcGFyYW1zPSJbW19jb2xvckJ5UGFyYW1zXV0iIHN0YXRzPSJbW19zdGF0c11dIiBjb2xvci1ieT0ie3tfY29sb3JCeX19IiBkYXRhc2V0cz0iW1tfZGF0YXNldHNdXSIgcmVuZGVyLWhpZXJhcmNoeT0iW1tfcmVuZGVySGllcmFyY2h5XV0iIHNlbGVjdGlvbj0ie3tfc2VsZWN0aW9ufX0iIHNlbGVjdGVkLWZpbGU9Int7X3NlbGVjdGVkRmlsZX19IiBzZWxlY3RlZC1ub2RlPSJ7e19zZWxlY3RlZE5vZGV9fSIgaGVhbHRoLXBpbGxzLWZlYXR1cmUtZW5hYmxlZD0iW1tfZGVidWdnZXJEYXRhRW5hYmxlZF1dIiBoZWFsdGgtcGlsbHMtdG9nZ2xlZC1vbj0ie3toZWFsdGhQaWxsc1RvZ2dsZWRPbn19IiBvbi1maXQtdGFwPSJfZml0IiB0cmFjZS1pbnB1dHM9Int7X3RyYWNlSW5wdXRzfX0iPjwvdGYtZ3JhcGgtY29udHJvbHM+CiAgICAgICAgPGRpdiBjbGFzcz0iY2VudGVyIiBzbG90PSJjZW50ZXIiPgogICAgICAgICAgPHRmLWdyYXBoLWRhc2hib2FyZC1sb2FkZXIgaWQ9ImxvYWRlciIgZGF0YXNldHM9IltbX2RhdGFzZXRzXV0iIHNlbGVjdGlvbj0iW1tfc2VsZWN0aW9uXV0iIHNlbGVjdGVkLWZpbGU9IltbX3NlbGVjdGVkRmlsZV1dIiBvdXQtZ3JhcGgtaGllcmFyY2h5PSJ7e19ncmFwaEhpZXJhcmNoeX19IiBvdXQtZ3JhcGg9Int7X2dyYXBofX0iIG91dC1zdGF0cz0ie3tfc3RhdHN9fSIgcHJvZ3Jlc3M9Int7X3Byb2dyZXNzfX0iIGhpZXJhcmNoeS1wYXJhbXM9IltbX2hpZXJhcmNoeVBhcmFtc11dIiBjb21wYXRpYmlsaXR5LXByb3ZpZGVyPSJbW19jb21wYXRpYmlsaXR5UHJvdmlkZXJdXSI+PC90Zi1ncmFwaC1kYXNoYm9hcmQtbG9hZGVyPgogICAgICAgICAgPHRmLWdyYXBoLWJvYXJkIGlkPSJncmFwaGJvYXJkIiBkZXZpY2VzLWZvci1zdGF0cz0iW1tfZGV2aWNlc0ZvclN0YXRzXV0iIGNvbG9yLWJ5PSJbW19jb2xvckJ5XV0iIGNvbG9yLWJ5LXBhcmFtcz0ie3tfY29sb3JCeVBhcmFtc319IiBncmFwaC1oaWVyYXJjaHk9IltbX2dyYXBoSGllcmFyY2h5XV0iIGdyYXBoPSJbW19ncmFwaF1dIiBoaWVyYXJjaHktcGFyYW1zPSJbW19oaWVyYXJjaHlQYXJhbXNdXSIgcHJvZ3Jlc3M9IltbX3Byb2dyZXNzXV0iIGRlYnVnZ2VyLWRhdGEtZW5hYmxlZD0iW1tfZGVidWdnZXJEYXRhRW5hYmxlZF1dIiBhcmUtaGVhbHRoLXBpbGxzLWxvYWRpbmc9IltbX2FyZUhlYWx0aFBpbGxzTG9hZGluZ11dIiBkZWJ1Z2dlci1udW1lcmljLWFsZXJ0cz0iW1tfZGVidWdnZXJOdW1lcmljQWxlcnRzXV0iIG5vZGUtbmFtZXMtdG8taGVhbHRoLXBpbGxzPSJbW19ub2RlTmFtZXNUb0hlYWx0aFBpbGxzXV0iIGFsbC1zdGVwcy1tb2RlLWVuYWJsZWQ9Int7YWxsU3RlcHNNb2RlRW5hYmxlZH19IiBzcGVjaWZpYy1oZWFsdGgtcGlsbC1zdGVwPSJ7e3NwZWNpZmljSGVhbHRoUGlsbFN0ZXB9fSIgaGVhbHRoLXBpbGwtc3RlcC1pbmRleD0iW1tfaGVhbHRoUGlsbFN0ZXBJbmRleF1dIiByZW5kZXItaGllcmFyY2h5PSJ7e19yZW5kZXJIaWVyYXJjaHl9fSIgc2VsZWN0ZWQtbm9kZT0ie3tfc2VsZWN0ZWROb2RlfX0iIHN0YXRzPSJbW19zdGF0c11dIiB0cmFjZS1pbnB1dHM9IltbX3RyYWNlSW5wdXRzXV0iPjwvdGYtZ3JhcGgtYm9hcmQ+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvdGYtZGFzaGJvYXJkLWxheW91dD4KICAgIDwvdGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IC9kZWVwLyB7CiAgICAgICAgZm9udC1mYW1pbHk6ICdSb2JvdG8nLCBzYW5zLXNlcmlmOwogICAgICB9CgogICAgICAuc2lkZWJhciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIH0KCiAgICAgIC5jZW50ZXIgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIH0KCiAgICAgIHBhcGVyLWRpYWxvZyB7CiAgICAgICAgcGFkZGluZzogMjBweDsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+Cgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdGYtZ3JhcGgtZGFzaGJvYXJkL3RmLWdyYXBoLWRhc2hib2FyZC5odG1sLmpzClBvbHltZXIoe2lzOiJ0Zi1ncmFwaC1kYXNoYm9hcmQiLHByb3BlcnRpZXM6e19kYXRhc2V0czp7dHlwZTpBcnJheSx2YWx1ZTooKT0+W119LF9kYXRhc2V0c0ZldGNoZWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sX3NlbGVjdGVkRGF0YXNldDp7dHlwZTpOdW1iZXIsdmFsdWU6MH0sX3JlbmRlckhpZXJhcmNoeTp7dHlwZTpPYmplY3Qsb2JzZXJ2ZXI6Il9yZW5kZXJIaWVyYXJjaHlDaGFuZ2VkIn0sX3JlcXVlc3RNYW5hZ2VyOnt0eXBlOk9iamVjdCx2YWx1ZTooKT0+bmV3IFBrLlJlcXVlc3RNYW5hZ2VyfSxfY2FuY2VsbGVyOnt0eXBlOk9iamVjdCx2YWx1ZTooKT0+bmV3IFBrLkNhbmNlbGxlcn0sX2RlYnVnZ2VyRGF0YUVuYWJsZWQ6Qm9vbGVhbixhbGxTdGVwc01vZGVFbmFibGVkOkJvb2xlYW4sc3BlY2lmaWNIZWFsdGhQaWxsU3RlcDp7dHlwZTpOdW1iZXIsdmFsdWU6MH0saGVhbHRoUGlsbHNUb2dnbGVkT246e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxvYnNlcnZlcjoiX2hlYWx0aFBpbGxzVG9nZ2xlZE9uQ2hhbmdlZCJ9LApzZWxlY3RlZE5vZGU6e3R5cGU6U3RyaW5nLG5vdGlmeTohMH0sX2lzQXR0YWNoZWQ6Qm9vbGVhbixfaW5pdGlhbGl6ZWQ6Qm9vbGVhbixfYXJlSGVhbHRoUGlsbHNMb2FkaW5nOkJvb2xlYW4sX2RlYnVnZ2VyTnVtZXJpY0FsZXJ0czp7dHlwZTpBcnJheSx2YWx1ZTpbXSxub3RpZnk6ITB9LF9ub2RlTmFtZXNUb0hlYWx0aFBpbGxzOnt0eXBlOk9iamVjdCx2YWx1ZTp7fX0sX2hlYWx0aFBpbGxTdGVwSW5kZXg6TnVtYmVyLF9oZWFsdGhQaWxsUmVxdWVzdElkOnt0eXBlOk51bWJlcix2YWx1ZToxfSxfaGVhbHRoUGlsbFN0ZXBSZXF1ZXN0VGltZXJJZDpOdW1iZXIsX2hlYWx0aFBpbGxTdGVwUmVxdWVzdFRpbWVyRGVsYXk6e3R5cGU6TnVtYmVyLHZhbHVlOjUwMCxyZWFkT25seTohMH0scnVuczpBcnJheSxydW46e3R5cGU6U3RyaW5nLG5vdGlmeTohMCx2YWx1ZTpWbC5nZXRTdHJpbmdJbml0aWFsaXplcigicnVuIix7ZGVmYXVsdFZhbHVlOiIiLHVzZUxvY2FsU3RvcmFnZTohMX0pLG9ic2VydmVyOiJfcnVuT2JzZXJ2ZXIifSwKX3NlbGVjdGlvbjp7dHlwZTpPYmplY3R9LF9jb21wYXRpYmlsaXR5UHJvdmlkZXI6T2JqZWN0LF90cmFjZUlucHV0czpCb29sZWFufSxsaXN0ZW5lcnM6eyJub2RlLXRvZ2dsZS1leHBhbmQiOiJfaGFuZGxlTm9kZVRvZ2dsZUV4cGFuZCJ9LG9ic2VydmVyczpbIl9tYXliZUZldGNoSGVhbHRoUGlsbHMoX2RlYnVnZ2VyRGF0YUVuYWJsZWQsIGFsbFN0ZXBzTW9kZUVuYWJsZWQsIHNwZWNpZmljSGVhbHRoUGlsbFN0ZXAsIF9zZWxlY3RlZE5vZGUpIiwiX21heWJlSW5pdGlhbGl6ZURhc2hib2FyZChfaXNBdHRhY2hlZCkiLCJfZGV0ZXJtaW5lU2VsZWN0ZWREYXRhc2V0KF9kYXRhc2V0c0ZldGNoZWQsIF9kYXRhc2V0cywgcnVuKSIsIl91cGRhdGVTZWxlY3RlZERhdGFzZXROYW1lKF9kYXRhc2V0c0ZldGNoZWQsIF9kYXRhc2V0cywgX3NlbGVjdGVkRGF0YXNldCkiXSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuc2V0KCJfaXNBdHRhY2hlZCIsITApfSxkZXRhY2hlZDpmdW5jdGlvbigpe3RoaXMuc2V0KCJfaXNBdHRhY2hlZCIsCiExKX0scmVsb2FkOmZ1bmN0aW9uKCl7dGhpcy5fZGVidWdnZXJEYXRhRW5hYmxlZHx8dGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdChQay5nZXRSb3V0ZXIoKS5wbHVnaW5zTGlzdGluZygpKS50aGVuKHRoaXMuX2NhbmNlbGxlci5jYW5jZWxsYWJsZShhPT57YS5jYW5jZWxsZWR8fGEudmFsdWVbImRlYnVnZ2VyIl0mJnRoaXMuc2V0KCJfZGVidWdnZXJEYXRhRW5hYmxlZCIsITApfSkpO3RoaXMuX21heWJlRmV0Y2hIZWFsdGhQaWxscygpfSxfZml0OmZ1bmN0aW9uKCl7dGhpcy4kJCgiI2dyYXBoYm9hcmQiKS5maXQoKX0sX3J1bk9ic2VydmVyOlZsLmdldFN0cmluZ09ic2VydmVyKCJydW4iLHtkZWZhdWx0VmFsdWU6IiIscG9seW1lclByb3BlcnR5OiJydW4iLHVzZUxvY2FsU3RvcmFnZTohMX0pLF9mZXRjaERhdGFzZXQoKXtyZXR1cm4gdGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdChQay5nZXRSb3V0ZXIoKS5wbHVnaW5Sb3V0ZSgiZ3JhcGhzIiwiL2luZm8iKSl9LF9mZXRjaEhlYWx0aFBpbGxzKGEsCmMpe2E9e25vZGVfbmFtZXM6SlNPTi5zdHJpbmdpZnkoYSkscnVuOiJfX2RlYnVnZ2VyX2RhdGFfXyJ9O3ZvaWQgMCE9PWMmJihhLnN0ZXA9Yyk7Yz1Qay5nZXRSb3V0ZXIoKS5wbHVnaW5Sb3V0ZSgiZGVidWdnZXIiLCIvaGVhbHRoX3BpbGxzIik7cmV0dXJuIHRoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3QoYyxhKX0sX2ZldGNoRGVidWdnZXJOdW1lcmljc0FsZXJ0cygpe3JldHVybiB0aGlzLl9yZXF1ZXN0TWFuYWdlci5yZXF1ZXN0KFBrLmdldFJvdXRlcigpLnBsdWdpblJvdXRlKCJkZWJ1Z2dlciIsIi9udW1lcmljc19hbGVydF9yZXBvcnQiKSl9LF9ncmFwaFVybChhLGMsZCl7cmV0dXJuIFBrLmdldFJvdXRlcigpLnBsdWdpblJvdXRlKCJncmFwaHMiLCIvZ3JhcGgiLG5ldyBVUkxTZWFyY2hQYXJhbXMoe3J1bjphLGxpbWl0X2F0dHJfc2l6ZTpjLGxhcmdlX2F0dHJzX2tleTpkfSkpfSxfc2hvdWxkUmVxdWVzdEhlYWx0aFBpbGxzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RlYnVnZ2VyRGF0YUVuYWJsZWQmJgp0aGlzLmhlYWx0aFBpbGxzVG9nZ2xlZE9uJiZ0aGlzLl9yZW5kZXJIaWVyYXJjaHkmJnRoaXMuX2RhdGFzZXRzU3RhdGUodGhpcy5fZGF0YXNldHNGZXRjaGVkLHRoaXMuX2RhdGFzZXRzLCJQUkVTRU5UIil9LF9tYXliZUluaXRpYWxpemVEYXNoYm9hcmQ6ZnVuY3Rpb24oYSl7IXRoaXMuX2luaXRpYWxpemVkJiZhJiYodGhpcy5zZXQoIl9jb21wYXRpYmlsaXR5UHJvdmlkZXIiLG5ldyB0Zi5ncmFwaC5vcC5UcHVDb21wYXRpYmlsaXR5UHJvdmlkZXIpLHRoaXMuX2luaXRpYWxpemVkPSEwLHRoaXMuX2ZldGNoRGF0YXNldCgpLnRoZW4oYz0+e3RoaXMuX2RhdGFzZXRzPU9iamVjdC5rZXlzKGMpLnNvcnQoT2suY29tcGFyZVRhZ05hbWVzKS5tYXAoZD0+e2NvbnN0IGY9Y1tkXTt2YXIgZz1PYmplY3Qua2V5cyhmLnRhZ3MpLnNvcnQoT2suY29tcGFyZVRhZ05hbWVzKS5tYXAobD0+Zi50YWdzW2xdKS5tYXAoKHt0YWc6bCxjb25jZXB0dWFsX2dyYXBoOmssb3BfZ3JhcGg6bSxwcm9maWxlOnB9KT0+Cih7dGFnOmwsZGlzcGxheU5hbWU6bCxjb25jZXB0dWFsR3JhcGg6ayxvcEdyYXBoOm0scHJvZmlsZTpwfSkpO2c9Zi5ydW5fZ3JhcGg/W3t0YWc6bnVsbCxkaXNwbGF5TmFtZToiRGVmYXVsdCIsY29uY2VwdHVhbEdyYXBoOiExLG9wR3JhcGg6ITAscHJvZmlsZTohMX0sLi4uZ106ZztyZXR1cm57bmFtZTpkLHRhZ3M6Z319KTt0aGlzLl9kYXRhc2V0c0ZldGNoZWQ9ITB9KSl9LF9kZXRlcm1pbmVTZWxlY3RlZERhdGFzZXQoYSxjLGQpe2Q/KGM9Yy5maW5kSW5kZXgoZj0+Zi5uYW1lPT09ZCksLTE9PT1jP2EmJihhPXRoaXMuJCQoIiNlcnJvci1kaWFsb2ciKSxhLnRleHRDb250ZW50PWBObyBkYXRhc2V0IG5hbWVkICIke2R9IiBjb3VsZCBiZSBmb3VuZC5gLGEub3BlbigpKTp0aGlzLnNldCgiX3NlbGVjdGVkRGF0YXNldCIsYykpOnRoaXMuc2V0KCJfc2VsZWN0ZWREYXRhc2V0IiwwKX0sX3VwZGF0ZVNlbGVjdGVkRGF0YXNldE5hbWUoYSxjLGQpe2EmJihjLmxlbmd0aDw9ZHx8dGhpcy5zZXQoInJ1biIsCmNbZF0ubmFtZSkpfSxfcmVxdWVzdEhlYWx0aFBpbGxzOmZ1bmN0aW9uKCl7dGhpcy5zZXQoIl9hcmVIZWFsdGhQaWxsc0xvYWRpbmciLCEwKTt2YXIgYT0rK3RoaXMuX2hlYWx0aFBpbGxSZXF1ZXN0SWQ7bnVsbCE9PXRoaXMuX2hlYWx0aFBpbGxTdGVwUmVxdWVzdFRpbWVySWQmJih3aW5kb3cuY2xlYXJUaW1lb3V0KHRoaXMuX2hlYWx0aFBpbGxTdGVwUmVxdWVzdFRpbWVySWQpLHRoaXMuX2hlYWx0aFBpbGxTdGVwUmVxdWVzdFRpbWVySWQ9bnVsbCk7dGhpcy5hbGxTdGVwc01vZGVFbmFibGVkP3RoaXMuX2hlYWx0aFBpbGxTdGVwUmVxdWVzdFRpbWVySWQ9c2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMuX2hlYWx0aFBpbGxTdGVwUmVxdWVzdFRpbWVySWQ9bnVsbDt0aGlzLl9pbml0aWF0ZU5ldHdvcmtSZXF1ZXN0Rm9ySGVhbHRoUGlsbHMoYSl9LmJpbmQodGhpcyksdGhpcy5faGVhbHRoUGlsbFN0ZXBSZXF1ZXN0VGltZXJEZWxheSk6dGhpcy5faW5pdGlhdGVOZXR3b3JrUmVxdWVzdEZvckhlYWx0aFBpbGxzKGEpfSwKX2luaXRpYXRlTmV0d29ya1JlcXVlc3RGb3JIZWFsdGhQaWxsczpmdW5jdGlvbihhKXtpZih0aGlzLl9oZWFsdGhQaWxsUmVxdWVzdElkPT09YSl7dmFyIGM9dGhpcy5fZmV0Y2hIZWFsdGhQaWxscyh0aGlzLl9yZW5kZXJIaWVyYXJjaHkuZ2V0TmFtZXNPZlJlbmRlcmVkT3BzKCksdGhpcy5hbGxTdGVwc01vZGVFbmFibGVkP3RoaXMuc3BlY2lmaWNIZWFsdGhQaWxsU3RlcDp2b2lkIDApLGQ9dGhpcy5fZmV0Y2hEZWJ1Z2dlck51bWVyaWNzQWxlcnRzKCk7UHJvbWlzZS5hbGwoW2MsZF0pLnRoZW4oZnVuY3Rpb24oZil7dmFyIGc9ZlswXTtmPWZbMV07aWYodGhpcy5oZWFsdGhQaWxsc1RvZ2dsZWRPbiYmYT09PXRoaXMuX2hlYWx0aFBpbGxSZXF1ZXN0SWQpe2Zvcih2YXIgbCBpbiBnKXt0aGlzLnNldCgiX2hlYWx0aFBpbGxTdGVwSW5kZXgiLGdbbF0ubGVuZ3RoLTEpO2JyZWFrfXRoaXMuc2V0KCJfZGVidWdnZXJOdW1lcmljQWxlcnRzIixmKTt0aGlzLnNldCgiX25vZGVOYW1lc1RvSGVhbHRoUGlsbHMiLApnKTt0aGlzLnNldCgiX2FyZUhlYWx0aFBpbGxzTG9hZGluZyIsITEpO3RoaXMuc2V0KCJfaGVhbHRoUGlsbFN0ZXBSZXF1ZXN0VGltZXJJZCIsbnVsbCl9fS5iaW5kKHRoaXMpKX19LF9kYXRhc2V0c1N0YXRlOmZ1bmN0aW9uKGEsYyxkKXtyZXR1cm4gYT9jJiZjLmxlbmd0aD8iUFJFU0VOVCI9PT1kOiJFTVBUWSI9PT1kOiJOT1RfTE9BREVEIj09PWR9LF9yZW5kZXJIaWVyYXJjaHlDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5yZWxvYWQoKX0sX2hhbmRsZU5vZGVUb2dnbGVFeHBhbmQ6ZnVuY3Rpb24oKXt0aGlzLl9tYXliZUZldGNoSGVhbHRoUGlsbHMoKX0sX2hlYWx0aFBpbGxzVG9nZ2xlZE9uQ2hhbmdlZDpmdW5jdGlvbihhKXthP3RoaXMucmVsb2FkKCk6dGhpcy5zZXQoIl9ub2RlTmFtZXNUb0hlYWx0aFBpbGxzIix7fSl9LF9tYXliZUZldGNoSGVhbHRoUGlsbHM6ZnVuY3Rpb24oKXt0aGlzLl9zaG91bGRSZXF1ZXN0SGVhbHRoUGlsbHMoKSYmdGhpcy5fcmVxdWVzdEhlYWx0aFBpbGxzKCl9fSk7Cjwvc2NyaXB0PgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKPGRvbS1tb2R1bGUgaWQ9InZ6LWRpc3RyaWJ1dGlvbi1jaGFydCI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlIGluY2x1ZGU9InBsb3R0YWJsZS1zdHlsZSI+PC9zdHlsZT4KICAgIDxkaXYgaWQ9ImNoYXJ0ZGl2Ij48L2Rpdj4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICAgIGZsZXgtc2hyaW5rOiAxOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfQogICAgICAjY2hhcnRkaXYgewogICAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgZmxleC1zaHJpbms6IDE7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KICA8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdnotZGlzdHJpYnV0aW9uLWNoYXJ0L3Z6LWRpc3RyaWJ1dGlvbi1jaGFydC5qcwp2YXIgb207CihmdW5jdGlvbihhKXtjbGFzcyBje2NvbnN0cnVjdG9yKGQsZil7dGhpcy5ydW4yZGF0YXNldHM9e307dGhpcy5jb2xvclNjYWxlPWY7dGhpcy5idWlsZENoYXJ0KGQpfWdldERhdGFzZXQoZCl7dm9pZCAwPT09dGhpcy5ydW4yZGF0YXNldHNbZF0mJih0aGlzLnJ1bjJkYXRhc2V0c1tkXT1uZXcgUGxvdHRhYmxlLkRhdGFzZXQoW10se3J1bjpkfSkpO3JldHVybiB0aGlzLnJ1bjJkYXRhc2V0c1tkXX1idWlsZENoYXJ0KGQpe3RoaXMub3V0ZXImJnRoaXMub3V0ZXIuZGVzdHJveSgpO2Q9Ym0uZ2V0WENvbXBvbmVudHMoZCk7dGhpcy54QWNjZXNzb3I9ZC5hY2Nlc3Nvcjt0aGlzLnhTY2FsZT1kLnNjYWxlO3RoaXMueEF4aXM9ZC5heGlzO3RoaXMueEF4aXMubWFyZ2luKDApLnRpY2tMYWJlbFBhZGRpbmcoMyk7dGhpcy55U2NhbGU9bmV3IFBsb3R0YWJsZS5TY2FsZXMuTGluZWFyO3RoaXMueUF4aXM9bmV3IFBsb3R0YWJsZS5BeGVzLk51bWVyaWModGhpcy55U2NhbGUsImxlZnQiKTtkPQpibS5tdWx0aXNjYWxlRm9ybWF0dGVyKGJtLllfQVhJU19GT1JNQVRURVJfUFJFQ0lTSU9OKTt0aGlzLnlBeGlzLm1hcmdpbigwKS50aWNrTGFiZWxQYWRkaW5nKDUpLmZvcm1hdHRlcihkKTt0aGlzLnlBeGlzLnVzZXNUZXh0V2lkdGhBcHByb3hpbWF0aW9uKCk7ZD10aGlzLmJ1aWxkUGxvdCh0aGlzLnhBY2Nlc3Nvcix0aGlzLnhTY2FsZSx0aGlzLnlTY2FsZSk7dGhpcy5ncmlkbGluZXM9bmV3IFBsb3R0YWJsZS5Db21wb25lbnRzLkdyaWRsaW5lcyh0aGlzLnhTY2FsZSx0aGlzLnlTY2FsZSk7dGhpcy5jZW50ZXI9bmV3IFBsb3R0YWJsZS5Db21wb25lbnRzLkdyb3VwKFt0aGlzLmdyaWRsaW5lcyxkXSk7dGhpcy5vdXRlcj1uZXcgUGxvdHRhYmxlLkNvbXBvbmVudHMuVGFibGUoW1t0aGlzLnlBeGlzLHRoaXMuY2VudGVyXSxbbnVsbCx0aGlzLnhBeGlzXV0pfWJ1aWxkUGxvdChkLGYsZyl7bGV0IGw9WzAsMjI4LDE1ODcsMzA4NSw1RTMsNjkxNSw4NDEzLDk3NzIsMUU0XSxrPV8ucmFuZ2UobC5sZW5ndGgtCjEpLm1hcCh0PT4obFt0KzFdLWxbdF0pLzI1MDApLG09bC5tYXAoKHQsdik9PkE9PkFbdl1bMV0pLHA9bVs0XSxxPV8ucmFuZ2UobS5sZW5ndGgtMSkubWFwKHQ9PntsZXQgdj1uZXcgUGxvdHRhYmxlLlBsb3RzLkFyZWE7di54KGQsZik7bGV0IEE9NDx0P21bdF06bVt0KzFdO3YueSg0PHQ/bVt0KzFdOm1bdF0sZyk7di55MChBKTt2LmF0dHIoImZpbGwiLCh5LHgsQyk9PnRoaXMuY29sb3JTY2FsZS5zY2FsZShDLm1ldGFkYXRhKCkucnVuKSk7di5hdHRyKCJzdHJva2UiLCh5LHgsQyk9PnRoaXMuY29sb3JTY2FsZS5zY2FsZShDLm1ldGFkYXRhKCkucnVuKSk7di5hdHRyKCJzdHJva2Utd2VpZ2h0IiwoKT0+IjAuNXB4Iik7di5hdHRyKCJzdHJva2Utb3BhY2l0eSIsKCk9PmtbdF0pO3YuYXR0cigiZmlsbC1vcGFjaXR5IiwoKT0+a1t0XSk7cmV0dXJuIHZ9KSxyPW5ldyBQbG90dGFibGUuUGxvdHMuTGluZTtyLngoZCxmKTtyLnkocCxnKTtyLmF0dHIoInN0cm9rZSIsKHQsdixBKT0+dGhpcy5jb2xvclNjYWxlLnNjYWxlKEEucnVuKSk7CnRoaXMucGxvdHM9cTtyZXR1cm4gbmV3IFBsb3R0YWJsZS5Db21wb25lbnRzLkdyb3VwKHEpfXNldFZpc2libGVTZXJpZXMoZCl7dGhpcy5ydW5zPWQ7bGV0IGY9ZC5tYXAoZz0+dGhpcy5nZXREYXRhc2V0KGcpKTt0aGlzLnBsb3RzLmZvckVhY2goZz0+Zy5kYXRhc2V0cyhmKSl9c2V0U2VyaWVzRGF0YShkLGYpe3RoaXMuZ2V0RGF0YXNldChkKS5kYXRhKGYpfXJlbmRlclRvKGQpe3RoaXMudGFyZ2V0U1ZHPWQ7dGhpcy5vdXRlci5yZW5kZXJUbyhkKX1yZWRyYXcoKXt0aGlzLm91dGVyLnJlZHJhdygpfWRlc3Ryb3koKXt0aGlzLm91dGVyLmRlc3Ryb3koKX19YS5EaXN0cmlidXRpb25DaGFydD1jO1BvbHltZXIoe2lzOiJ2ei1kaXN0cmlidXRpb24tY2hhcnQiLHByb3BlcnRpZXM6e2NvbG9yU2NhbGU6e3R5cGU6T2JqZWN0LHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuKG5ldyBQbG90dGFibGUuU2NhbGVzLkNvbG9yKS5yYW5nZShkMy5zY2hlbWVDYXRlZ29yeTEwKX19LHhUeXBlOnt0eXBlOlN0cmluZywKdmFsdWU6InN0ZXAifSxfYXR0YWNoZWQ6Qm9vbGVhbixfY2hhcnQ6T2JqZWN0LF92aXNpYmxlU2VyaWVzQ2FjaGU6e3R5cGU6QXJyYXksdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm5bXX19LF9zZXJpZXNEYXRhQ2FjaGU6e3R5cGU6T2JqZWN0LHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJue319fSxfbWFrZUNoYXJ0QXN5bmNDYWxsYmFja0lkOnt0eXBlOk51bWJlcix2YWx1ZTpudWxsfX0sb2JzZXJ2ZXJzOlsiX21ha2VDaGFydCh4VHlwZSwgY29sb3JTY2FsZSwgX2F0dGFjaGVkKSIsIl9yZWxvYWRGcm9tQ2FjaGUoX2NoYXJ0KSJdLHNldFZpc2libGVTZXJpZXM6ZnVuY3Rpb24oZCl7dGhpcy5fdmlzaWJsZVNlcmllc0NhY2hlPWQ7dGhpcy5fY2hhcnQmJih0aGlzLl9jaGFydC5zZXRWaXNpYmxlU2VyaWVzKGQpLHRoaXMucmVkcmF3KCkpfSxzZXRTZXJpZXNEYXRhOmZ1bmN0aW9uKGQsZil7dGhpcy5fc2VyaWVzRGF0YUNhY2hlW2RdPWY7dGhpcy5fY2hhcnQmJnRoaXMuX2NoYXJ0LnNldFNlcmllc0RhdGEoZCwKZil9LHJlZHJhdzpmdW5jdGlvbigpe3RoaXMuX2NoYXJ0LnJlZHJhdygpfSxyZWFkeTpmdW5jdGlvbigpe3RoaXMuc2NvcGVTdWJ0cmVlKHRoaXMuJC5jaGFydGRpdiwhMCl9LF9tYWtlQ2hhcnQ6ZnVuY3Rpb24oZCxmLGcpe251bGw9PT10aGlzLl9tYWtlQ2hhcnRBc3luY0NhbGxiYWNrSWQmJnRoaXMuY2FuY2VsQXN5bmModGhpcy5fbWFrZUNoYXJ0QXN5bmNDYWxsYmFja0lkKTt0aGlzLl9tYWtlQ2hhcnRBc3luY0NhbGxiYWNrSWQ9dGhpcy5hc3luYyhmdW5jdGlvbigpe3RoaXMuX21ha2VDaGFydEFzeW5jQ2FsbGJhY2tJZD1udWxsO2lmKGcpe3RoaXMuX2NoYXJ0JiZ0aGlzLl9jaGFydC5kZXN0cm95KCk7dmFyIGw9bmV3IGMoZCxmKSxrPWQzLnNlbGVjdCh0aGlzLiQuY2hhcnRkaXYpO2wucmVuZGVyVG8oayk7dGhpcy5fY2hhcnQ9bH19LDM1MCl9LF9yZWxvYWRGcm9tQ2FjaGU6ZnVuY3Rpb24oKXt0aGlzLl9jaGFydCYmKHRoaXMuX2NoYXJ0LnNldFZpc2libGVTZXJpZXModGhpcy5fdmlzaWJsZVNlcmllc0NhY2hlKSwKdGhpcy5fdmlzaWJsZVNlcmllc0NhY2hlLmZvckVhY2goZnVuY3Rpb24oZCl7dGhpcy5fY2hhcnQuc2V0U2VyaWVzRGF0YShkLHRoaXMuX3Nlcmllc0RhdGFDYWNoZVtkXXx8W10pfS5iaW5kKHRoaXMpKSl9LGF0dGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fYXR0YWNoZWQ9ITB9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fYXR0YWNoZWQ9ITF9fSl9KShvbXx8KG9tPXt9KSk7Cjwvc2NyaXB0Pgo8L2RvbS1tb2R1bGU+CgoKCjxkb20tbW9kdWxlIGlkPSJ0Zi1kaXN0cmlidXRpb24tbG9hZGVyIj4KICA8dGVtcGxhdGU+CiAgICA8dGYtY2FyZC1oZWFkaW5nIHRhZz0iW1t0YWddXSIgcnVuPSJbW3J1bl1dIiBkaXNwbGF5LW5hbWU9IltbdGFnTWV0YWRhdGEuZGlzcGxheU5hbWVdXSIgZGVzY3JpcHRpb249IltbdGFnTWV0YWRhdGEuZGVzY3JpcHRpb25dXSIgY29sb3I9IltbX3J1bkNvbG9yXV0iPjwvdGYtY2FyZC1oZWFkaW5nPgogICAgCiAgICA8dnotZGlzdHJpYnV0aW9uLWNoYXJ0IGlkPSJjaGFydCIgeC10eXBlPSJbW3hUeXBlXV0iIGNvbG9yLXNjYWxlPSJbW19jb2xvclNjYWxlXV0iPjwvdnotZGlzdHJpYnV0aW9uLWNoYXJ0PgogICAgPGRpdiBzdHlsZT0iZGlzcGxheTogZmxleDsgZmxleC1kaXJlY3Rpb246IHJvdzsiPgogICAgICA8cGFwZXItaWNvbi1idXR0b24gc2VsZWN0ZWQkPSJbW19leHBhbmRlZF1dIiBpY29uPSJmdWxsc2NyZWVuIiBvbi10YXA9Il90b2dnbGVFeHBhbmRlZCI+PC9wYXBlci1pY29uLWJ1dHRvbj4KICAgIDwvZGl2PgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIHdpZHRoOiAzMzBweDsKICAgICAgICBoZWlnaHQ6IDIzNXB4OwogICAgICAgIG1hcmdpbi1yaWdodDogMTBweDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxNXB4OwogICAgICB9CiAgICAgIDpob3N0KFtfZXhwYW5kZWRdKSB7CiAgICAgICAgd2lkdGg6IDcwMHB4OwogICAgICAgIGhlaWdodDogNTAwcHg7CiAgICAgIH0KCiAgICAgIHZ6LWhpc3RvZ3JhbS10aW1lc2VyaWVzIHsKICAgICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIH0KCiAgICAgIHBhcGVyLWljb24tYnV0dG9uIHsKICAgICAgICBjb2xvcjogIzIxOTZmMzsKICAgICAgICBib3JkZXItcmFkaXVzOiAxMDAlOwogICAgICAgIHdpZHRoOiAzMnB4OwogICAgICAgIGhlaWdodDogMzJweDsKICAgICAgICBwYWRkaW5nOiA0cHg7CiAgICAgIH0KICAgICAgcGFwZXItaWNvbi1idXR0b25bc2VsZWN0ZWRdIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS10Yi11aS1saWdodC1hY2NlbnQpOwogICAgICB9CgogICAgICB0Zi1jYXJkLWhlYWRpbmcgewogICAgICAgIG1hcmdpbi1ib3R0b206IDEwcHg7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KICA8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdGYtZGlzdHJpYnV0aW9uLWRhc2hib2FyZC90Zi1kaXN0cmlidXRpb24tbG9hZGVyLmh0bWwuanMKUG9seW1lcih7aXM6InRmLWRpc3RyaWJ1dGlvbi1sb2FkZXIiLHByb3BlcnRpZXM6e3J1bjpTdHJpbmcsdGFnOlN0cmluZyx0YWdNZXRhZGF0YTpPYmplY3QseFR5cGU6U3RyaW5nLGRhdGFUb0xvYWQ6e3R5cGU6QXJyYXksY29tcHV0ZWQ6Il9jb21wdXRlRGF0YVRvTG9hZChydW4sIHRhZykifSxnZXREYXRhTG9hZE5hbWU6e3R5cGU6RnVuY3Rpb24sdmFsdWU6KCk9Pih7cnVuOmF9KT0+YX0sZ2V0RGF0YUxvYWRVcmw6e3R5cGU6RnVuY3Rpb24sdmFsdWU6KCk9Pih7dGFnOmEscnVuOmN9KT0+UGsuYWRkUGFyYW1zKFBrLmdldFJvdXRlcigpLnBsdWdpblJvdXRlKCJkaXN0cmlidXRpb25zIiwiL2Rpc3RyaWJ1dGlvbnMiKSx7dGFnOmEscnVuOmN9KX0sbG9hZERhdGFDYWxsYmFjazp7dHlwZTpGdW5jdGlvbix2YWx1ZTpmdW5jdGlvbigpe3JldHVybihhLGMsZCk9PnthPWQubWFwKGY9Pntjb25zdCBbZyxsLGtdPWY7ay53YWxsX3RpbWU9bmV3IERhdGUoMUUzKmcpO2suc3RlcD1sO3JldHVybiBrfSk7CmM9dGhpcy5nZXREYXRhTG9hZE5hbWUoYyk7dGhpcy4kLmNoYXJ0LnNldFNlcmllc0RhdGEoYyxhKTt0aGlzLiQuY2hhcnQuc2V0VmlzaWJsZVNlcmllcyhbY10pfX19LF9jb2xvclNjYWxlOnt0eXBlOk9iamVjdCx2YWx1ZTooKT0+KHtzY2FsZTpabC5ydW5zQ29sb3JTY2FsZX0pLHJlYWRPbmx5OiEwfSxfcnVuQ29sb3I6e3R5cGU6U3RyaW5nLGNvbXB1dGVkOiJfY29tcHV0ZVJ1bkNvbG9yKHJ1bikifSxfZXhwYW5kZWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9LHJlcXVlc3RNYW5hZ2VyOk9iamVjdCxfY2FuY2VsbGVyOnt0eXBlOk9iamVjdCx2YWx1ZTooKT0+bmV3IFBrLkNhbmNlbGxlcn19LG9ic2VydmVyczpbInJlbG9hZChydW4sIHRhZykiXSxiZWhhdmlvcnM6W1dsLkRhdGFMb2FkZXJCZWhhdmlvcl0sX2NvbXB1dGVEYXRhVG9Mb2FkKGEsYyl7cmV0dXJuW3tydW46YSx0YWc6Y31dfSxfY29tcHV0ZVJ1bkNvbG9yKGEpe3JldHVybiB0aGlzLl9jb2xvclNjYWxlLnNjYWxlKGEpfSwKcmVkcmF3KCl7dGhpcy4kLmNoYXJ0LnJlZHJhdygpfSxfdG9nZ2xlRXhwYW5kZWQoKXt0aGlzLnNldCgiX2V4cGFuZGVkIiwhdGhpcy5fZXhwYW5kZWQpO3RoaXMucmVkcmF3KCl9fSk7Cjwvc2NyaXB0Pgo8L2RvbS1tb2R1bGU+CgoKCjxkb20tbW9kdWxlIGlkPSJ0Zi1kaXN0cmlidXRpb24tZGFzaGJvYXJkIj4KICA8dGVtcGxhdGU+CiAgICA8dGYtZGFzaGJvYXJkLWxheW91dD4KICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhciIgc2xvdD0ic2lkZWJhciI+CiAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIj4KICAgICAgICAgIDx0Zi1vcHRpb24tc2VsZWN0b3IgaWQ9InhUeXBlU2VsZWN0b3IiIG5hbWU9Ikhvcml6b250YWwgYXhpcyIgc2VsZWN0ZWQtaWQ9Int7X3hUeXBlfX0iPgogICAgICAgICAgICA8cGFwZXItYnV0dG9uIGlkPSJzdGVwIj5zdGVwPC9wYXBlci1idXR0b24+CiAgICAgICAgICAgIDxwYXBlci1idXR0b24gaWQ9InJlbGF0aXZlIj5yZWxhdGl2ZTwvcGFwZXItYnV0dG9uPgogICAgICAgICAgICA8cGFwZXItYnV0dG9uIGlkPSJ3YWxsX3RpbWUiPndhbGw8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgIDwvdGYtb3B0aW9uLXNlbGVjdG9yPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiI+CiAgICAgICAgICA8dGYtcnVucy1zZWxlY3RvciBzZWxlY3RlZC1ydW5zPSJ7e19zZWxlY3RlZFJ1bnN9fSI+CiAgICAgICAgICA8L3RmLXJ1bnMtc2VsZWN0b3I+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgoKICAgICAgPGRpdiBjbGFzcz0iY2VudGVyIiBzbG90PSJjZW50ZXIiPgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfZGF0YU5vdEZvdW5kXV0iPgogICAgICAgICAgPGRpdiBjbGFzcz0ibm8tZGF0YS13YXJuaW5nIj4KICAgICAgICAgICAgPGgzPk5vIGRpc3RyaWJ1dGlvbiBkYXRhIHdhcyBmb3VuZC48L2gzPgogICAgICAgICAgICA8cD5Qcm9iYWJsZSBjYXVzZXM6CiAgICAgICAgICAgIDx1bD4KICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICBZb3UgaGF2ZW7igJl0IHdyaXR0ZW4gYW55IGhpc3RvZ3JhbSBkYXRhIHRvIHlvdXIgZXZlbnQgZmlsZXMuCiAgICAgICAgICAgICAgICAoSGlzdG9ncmFtcyBhbmQgZGlzdHJpYnV0aW9ucyBib3RoIHVzZSB0aGUgaGlzdG9ncmFtIHN1bW1hcnkKICAgICAgICAgICAgICAgIG9wZXJhdGlvbi4pCiAgICAgICAgICAgICAgPC9saT4KCiAgICAgICAgICAgICAgPGxpPlRlbnNvckJvYXJkIGNhbuKAmXQgZmluZCB5b3VyIGV2ZW50IGZpbGVzLjwvbGk+CiAgICAgICAgICAgIDwvdWw+CgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICBJZiB5b3XigJlyZSBuZXcgdG8gdXNpbmcgVGVuc29yQm9hcmQsIGFuZCB3YW50IHRvIGZpbmQgb3V0IGhvdyB0bwogICAgICAgICAgICAgIGFkZCBkYXRhIGFuZCBzZXQgdXAgeW91ciBldmVudCBmaWxlcywgY2hlY2sgb3V0IHRoZQogICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCI+UkVBRE1FPC9hPgogICAgICAgICAgICAgIGFuZCBwZXJoYXBzIHRoZQogICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL2dldF9zdGFydGVkL3N1bW1hcmllc19hbmRfdGVuc29yYm9hcmQiPlRlbnNvckJvYXJkIHR1dG9yaWFsPC9hPi4KICAgICAgICAgICAgCgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICBJZiB5b3UgdGhpbmsgVGVuc29yQm9hcmQgaXMgY29uZmlndXJlZCBwcm9wZXJseSwgcGxlYXNlIHNlZQogICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCNteS10ZW5zb3Jib2FyZC1pc250LXNob3dpbmctYW55LWRhdGEtd2hhdHMtd3JvbmciPnRoZSBzZWN0aW9uIG9mIHRoZSBSRUFETUUgZGV2b3RlZCB0byBtaXNzaW5nIGRhdGEgcHJvYmxlbXM8L2E+CiAgICAgICAgICAgICAgYW5kIGNvbnNpZGVyIGZpbGluZyBhbiBpc3N1ZSBvbiBHaXRIdWIuCiAgICAgICAgICAgIAogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIV9kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8dGYtdGFnLWZpbHRlcmVyIHRhZy1maWx0ZXI9Int7X3RhZ0ZpbHRlcn19Ij48L3RmLXRhZy1maWx0ZXJlcj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX2NhdGVnb3JpZXNdXSIgYXM9ImNhdGVnb3J5Ij4KICAgICAgICAgICAgPHRmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3IGNhdGVnb3J5PSJbW2NhdGVnb3J5XV0iIGluaXRpYWwtb3BlbmVkPSJbW19zaG91bGRPcGVuKGluZGV4KV1dIj4KICAgICAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8dGYtZGlzdHJpYnV0aW9uLWxvYWRlciBhY3RpdmU9IltbYWN0aXZlXV0iIHJ1bj0iW1tpdGVtLnJ1bl1dIiB0YWc9IltbaXRlbS50YWddXSIgdGFnLW1ldGFkYXRhPSJbW190YWdNZXRhZGF0YShfcnVuVG9UYWdJbmZvLCBpdGVtLnJ1biwgaXRlbS50YWcpXV0iIHgtdHlwZT0iW1tfeFR5cGVdXSIgcmVxdWVzdC1tYW5hZ2VyPSJbW19yZXF1ZXN0TWFuYWdlcl1dIj48L3RmLWRpc3RyaWJ1dGlvbi1sb2FkZXI+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPC90Zi1jYXRlZ29yeS1wYWdpbmF0ZWQtdmlldz4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPC9kaXY+CiAgICA8L3RmLWRhc2hib2FyZC1sYXlvdXQ+CgogICAgPHN0eWxlIGluY2x1ZGU9ImRhc2hib2FyZC1zdHlsZSI+PC9zdHlsZT4KICAgIDxzdHlsZT4KICAgICAgLm5vLWRhdGEtd2FybmluZyB7CiAgICAgICAgbWF4LXdpZHRoOiA1NDBweDsKICAgICAgICBtYXJnaW46IDgwcHggYXV0byAwIGF1dG87CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KCiAgPHNjcmlwdD4vL35+V0VCUEFUSH5+L3RmLWRpc3RyaWJ1dGlvbi1kYXNoYm9hcmQvdGYtZGlzdHJpYnV0aW9uLWRhc2hib2FyZC5odG1sLmpzClBvbHltZXIoe2lzOiJ0Zi1kaXN0cmlidXRpb24tZGFzaGJvYXJkIixwcm9wZXJ0aWVzOntfeFR5cGU6e3R5cGU6U3RyaW5nLHZhbHVlOiJzdGVwIn0sX3NlbGVjdGVkUnVuczpBcnJheSxfcnVuVG9UYWc6T2JqZWN0LF9ydW5Ub1RhZ0luZm86T2JqZWN0LF9kYXRhTm90Rm91bmQ6Qm9vbGVhbixfdGFnRmlsdGVyOlN0cmluZyxfY2F0ZWdvcmllc0RvbVJlYWR5OkJvb2xlYW4sX2NhdGVnb3JpZXM6e3R5cGU6QXJyYXksY29tcHV0ZWQ6Il9tYWtlQ2F0ZWdvcmllcyhfcnVuVG9UYWcsIF9zZWxlY3RlZFJ1bnMsIF90YWdGaWx0ZXIsIF9jYXRlZ29yaWVzRG9tUmVhZHkpIn0sX3JlcXVlc3RNYW5hZ2VyOnt0eXBlOk9iamVjdCx2YWx1ZTooKT0+bmV3IFBrLlJlcXVlc3RNYW5hZ2VyfX0scmVhZHkoKXt0aGlzLnJlbG9hZCgpfSxyZWxvYWQoKXt0aGlzLl9mZXRjaFRhZ3MoKS50aGVuKCgpPT57dGhpcy5fcmVsb2FkRGlzdHJpYnV0aW9ucygpfSl9LF9mZXRjaFRhZ3MoKXtjb25zdCBhPVBrLmdldFJvdXRlcigpLnBsdWdpblJvdXRlKCJkaXN0cmlidXRpb25zIiwKIi90YWdzIik7cmV0dXJuIHRoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3QoYSkudGhlbihjPT57aWYoIV8uaXNFcXVhbChjLHRoaXMuX3J1blRvVGFnSW5mbykpe3ZhciBkPV8ubWFwVmFsdWVzKGMsZz0+T2JqZWN0LmtleXMoZykpLGY9UGsuZ2V0VGFncyhkKTt0aGlzLnNldCgiX2RhdGFOb3RGb3VuZCIsMD09PWYubGVuZ3RoKTt0aGlzLnNldCgiX3J1blRvVGFnIixkKTt0aGlzLnNldCgiX3J1blRvVGFnSW5mbyIsYyk7dGhpcy5hc3luYygoKT0+e3RoaXMuc2V0KCJfY2F0ZWdvcmllc0RvbVJlYWR5IiwhMCl9KX19KX0sX3JlbG9hZERpc3RyaWJ1dGlvbnMoKXt0aGlzLnJvb3QucXVlcnlTZWxlY3RvckFsbCgidGYtZGlzdHJpYnV0aW9uLWxvYWRlciIpLmZvckVhY2goYT0+e2EucmVsb2FkKCl9KX0sX3Nob3VsZE9wZW4oYSl7cmV0dXJuIDI+PWF9LF9tYWtlQ2F0ZWdvcmllcyhhLGMsZCl7cmV0dXJuIFFrLmNhdGVnb3JpemVSdW5UYWdDb21iaW5hdGlvbnMoYSxjLGQpfSxfdGFnTWV0YWRhdGEoYSwKYyxkKXtyZXR1cm4gYVtjXVtkXX19KTsKPC9zY3JpcHQ+CjwvZG9tLW1vZHVsZT4KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCjxkb20tbW9kdWxlIGlkPSJ2ei1oaXN0b2dyYW0tdGltZXNlcmllcyI+CiAgPHRlbXBsYXRlPgogICAgPGRpdiBpZD0idG9vbHRpcCI+PHNwYW4+PC9zcGFuPjwvZGl2PgogICAgPHN2ZyBpZD0ic3ZnIj4KICAgICAgPGc+CiAgICAgICAgPGcgY2xhc3M9ImF4aXMgeCI+PC9nPgogICAgICAgIDxnIGNsYXNzPSJheGlzIHkiPjwvZz4KICAgICAgICA8ZyBjbGFzcz0iYXhpcyB5IHNsaWNlIj48L2c+CiAgICAgICAgPGcgY2xhc3M9InN0YWdlIj4KICAgICAgICAgIDxyZWN0IGNsYXNzPSJiYWNrZ3JvdW5kIj48L3JlY3Q+CiAgICAgICAgPC9nPgogICAgICAgIDxnIGNsYXNzPSJ4LWF4aXMtaG92ZXIiPjwvZz4KICAgICAgICA8ZyBjbGFzcz0ieS1heGlzLWhvdmVyIj48L2c+CiAgICAgICAgPGcgY2xhc3M9Inktc2xpY2UtYXhpcy1ob3ZlciI+PC9nPgogICAgICA8L2c+CiAgICA8L3N2Zz4KCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICAgIGZsZXgtc2hyaW5rOiAxOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfQoKICAgICAgc3ZnIHsKICAgICAgICBmb250LWZhbWlseTogcm9ib3RvLCBzYW5zLXNlcmlmOwogICAgICAgIG92ZXJmbG93OiB2aXNpYmxlOwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgICBmbGV4LXNocmluazogMTsKICAgICAgfQoKICAgICAgI3Rvb2x0aXAgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgfQoKICAgICAgLmJhY2tncm91bmQgewogICAgICAgIGZpbGwtb3BhY2l0eTogMDsKICAgICAgICBmaWxsOiByZWQ7CiAgICAgIH0KCiAgICAgIC5oaXN0b2dyYW0gewogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CgogICAgICAuaG92ZXIgewogICAgICAgIGZvbnQtc2l6ZTogOXB4OwogICAgICAgIGRvbWluYW50LWJhc2VsaW5lOiBtaWRkbGU7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgfQoKICAgICAgLmhvdmVyIGNpcmNsZSB7CiAgICAgICAgc3Ryb2tlOiB3aGl0ZTsKICAgICAgICBzdHJva2Utb3BhY2l0eTogMC41OwogICAgICAgIHN0cm9rZS13aWR0aDogMXB4OwogICAgICB9CgogICAgICAuaG92ZXIgdGV4dCB7CiAgICAgICAgZmlsbDogYmxhY2s7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgfQoKICAgICAgLmhvdmVyLmhvdmVyLWNsb3Nlc3QgY2lyY2xlIHsKICAgICAgICBmaWxsOiBibGFjayAhaW1wb3J0YW50OwogICAgICB9CgogICAgICAuaG92ZXIuaG92ZXItY2xvc2VzdCB0ZXh0IHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CgogICAgICAuYmFzZWxpbmUgewogICAgICAgIHN0cm9rZTogYmxhY2s7CiAgICAgICAgc3Ryb2tlLW9wYWNpdHk6IDAuMTsKICAgICAgfQoKICAgICAgLm91dGxpbmUgewogICAgICAgIGZpbGw6IG5vbmU7CiAgICAgICAgc3Ryb2tlOiB3aGl0ZTsKICAgICAgICBzdHJva2Utb3BhY2l0eTogMC41OwogICAgICB9CgogICAgICAub3V0bGluZS5vdXRsaW5lLWhvdmVyIHsKICAgICAgICBzdHJva2U6IGJsYWNrICFpbXBvcnRhbnQ7CiAgICAgICAgc3Ryb2tlLW9wYWNpdHk6IDE7CiAgICAgIH0KCiAgICAgIC54LWF4aXMtaG92ZXIsCiAgICAgIC55LWF4aXMtaG92ZXIsCiAgICAgIC55LXNsaWNlLWF4aXMtaG92ZXIgewogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CgogICAgICAueC1heGlzLWhvdmVyIC5sYWJlbCwKICAgICAgLnktYXhpcy1ob3ZlciAubGFiZWwsCiAgICAgIC55LXNsaWNlLWF4aXMtaG92ZXIgLmxhYmVsIHsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgICB0ZXh0LWFuY2hvcjogZW5kOwogICAgICB9CgogICAgICAueC1heGlzLWhvdmVyIHRleHQgewogICAgICAgIHRleHQtYW5jaG9yOiBtaWRkbGU7CiAgICAgIH0KCiAgICAgIC55LWF4aXMtaG92ZXIgdGV4dCwKICAgICAgLnktc2xpY2UtYXhpcy1ob3ZlciB0ZXh0IHsKICAgICAgICB0ZXh0LWFuY2hvcjogc3RhcnQ7CiAgICAgIH0KCiAgICAgIC54LWF4aXMtaG92ZXIgbGluZSwKICAgICAgLnktYXhpcy1ob3ZlciBsaW5lLAogICAgICAueS1zbGljZS1heGlzLWhvdmVyIGxpbmUgewogICAgICAgIHN0cm9rZTogYmxhY2s7CiAgICAgIH0KCiAgICAgIC54LWF4aXMtaG92ZXIgcmVjdCwKICAgICAgLnktYXhpcy1ob3ZlciByZWN0LAogICAgICAueS1zbGljZS1heGlzLWhvdmVyIHJlY3QgewogICAgICAgIGZpbGw6IHdoaXRlOwogICAgICB9CgogICAgICAuYXhpcyB7CiAgICAgICAgZm9udC1zaXplOiAxMXB4OwogICAgICB9CgogICAgICAuYXhpcyBwYXRoLmRvbWFpbiB7CiAgICAgICAgZmlsbDogbm9uZTsKICAgICAgfQoKICAgICAgLmF4aXMgLnRpY2sgbGluZSB7CiAgICAgICAgc3Ryb2tlOiAjZGRkOwogICAgICB9CgogICAgICAuYXhpcy5zbGljZSB7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgfQoKICAgICAgLmF4aXMuc2xpY2UgLnRpY2sgbGluZSB7CiAgICAgICAgc3Ryb2tlLWRhc2hhcnJheTogMjsKICAgICAgfQoKICAgICAgLnNtYWxsIC5heGlzIHRleHQgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KICAgICAgLnNtYWxsIC5heGlzIC50aWNrOmZpcnN0LW9mLXR5cGUgdGV4dCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH0KICAgICAgLnNtYWxsIC5heGlzIC50aWNrOmxhc3Qtb2YtdHlwZSB0ZXh0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQogICAgICAubWVkaXVtIC5heGlzIHRleHQgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KICAgICAgLm1lZGl1bSAuYXhpcyAudGljazpudGgtY2hpbGQoMm4gKyAxKSB0ZXh0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQogICAgICAubGFyZ2UgLmF4aXMgdGV4dCB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQogICAgICAubGFyZ2UgLmF4aXMgLnRpY2s6bnRoLWNoaWxkKDJuICsgMSkgdGV4dCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KCiAgPHNjcmlwdD4vL35+V0VCUEFUSH5+L3Z6LWhpc3RvZ3JhbS10aW1lc2VyaWVzL3Z6LWhpc3RvZ3JhbS10aW1lc2VyaWVzLmh0bWwuanMKUG9seW1lcih7aXM6InZ6LWhpc3RvZ3JhbS10aW1lc2VyaWVzIixwcm9wZXJ0aWVzOnttb2RlOnt0eXBlOlN0cmluZyx2YWx1ZToib2Zmc2V0In0sdGltZVByb3BlcnR5Ont0eXBlOlN0cmluZyx2YWx1ZToic3RlcCJ9LGJpbnM6e3R5cGU6U3RyaW5nLHZhbHVlOiJiaW5zIn0seDp7dHlwZTpTdHJpbmcsdmFsdWU6IngifSxkeDp7dHlwZTpTdHJpbmcsdmFsdWU6ImR4In0seTp7dHlwZTpTdHJpbmcsdmFsdWU6InkifSxjb2xvclNjYWxlOnt0eXBlOk9iamVjdCx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBkMy5zY2FsZU9yZGluYWwoZDMuc2NoZW1lQ2F0ZWdvcnkxMCl9fSxtb2RlVHJhbnNpdGlvbkR1cmF0aW9uOnt0eXBlOk51bWJlcix2YWx1ZTo1MDB9LF9hdHRhY2hlZDpCb29sZWFuLF9uYW1lOnt0eXBlOlN0cmluZyx2YWx1ZTpudWxsfSxfZGF0YTp7dHlwZTpBcnJheSx2YWx1ZTpudWxsfX0sb2JzZXJ2ZXJzOlsicmVkcmF3KHRpbWVQcm9wZXJ0eSwgX2F0dGFjaGVkKSIsIl9tb2RlUmVkcmF3KG1vZGUpIl0sCnJlYWR5OmZ1bmN0aW9uKCl7dGhpcy5zY29wZVN1YnRyZWUodGhpcy4kLnN2ZywhMCl9LGF0dGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fYXR0YWNoZWQ9ITB9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fYXR0YWNoZWQ9ITF9LHNldFNlcmllc0RhdGE6ZnVuY3Rpb24oYSxjKXt0aGlzLl9uYW1lPWE7dGhpcy5fZGF0YT1jO3RoaXMucmVkcmF3KCl9LHJlZHJhdzpmdW5jdGlvbigpe3RoaXMuX2RyYXcoMCl9LF9tb2RlUmVkcmF3OmZ1bmN0aW9uKCl7dGhpcy5fZHJhdyh0aGlzLm1vZGVUcmFuc2l0aW9uRHVyYXRpb24pfSxfZHJhdzpmdW5jdGlvbihhKXtpZih0aGlzLl9hdHRhY2hlZCYmdGhpcy5fZGF0YSl7aWYodm9pZCAwPT09YSl0aHJvdyBFcnJvcigidnotaGlzdG9ncmFtLXRpbWVzZXJpZXMgX2RyYXcgbmVlZHMgZHVyYXRpb24iKTtpZigwPj10aGlzLl9kYXRhLmxlbmd0aCl0aHJvdyBFcnJvcigiTm90IGVub3VnaCBzdGVwcyBpbiB0aGUgZGF0YSIpO2lmKCF0aGlzLl9kYXRhWzBdLmhhc093blByb3BlcnR5KHRoaXMuYmlucykpdGhyb3cgRXJyb3IoIk5vIGJpbnMgcHJvcGVydHkgb2YgJyIrCnRoaXMuYmlucysiJyBpbiBkYXRhIik7aWYoMD49dGhpcy5fZGF0YVswXVt0aGlzLmJpbnNdLmxlbmd0aCl0aHJvdyBFcnJvcigiTXVzdCBoYXZlIGF0IGxlYXN0IG9uZSBiaW4gaW4gYmlucyBpbiBkYXRhIik7aWYoIXRoaXMuX2RhdGFbMF1bdGhpcy5iaW5zXVswXS5oYXNPd25Qcm9wZXJ0eSh0aGlzLngpKXRocm93IEVycm9yKCJObyB4IHByb3BlcnR5ICciK3RoaXMueCsiJyBvbiBiaW5zIGRhdGEiKTtpZighdGhpcy5fZGF0YVswXVt0aGlzLmJpbnNdWzBdLmhhc093blByb3BlcnR5KHRoaXMuZHgpKXRocm93IEVycm9yKCJObyBkeCBwcm9wZXJ0eSAnIit0aGlzLmR4KyInIG9uIGJpbnMgZGF0YSIpO2lmKCF0aGlzLl9kYXRhWzBdW3RoaXMuYmluc11bMF0uaGFzT3duUHJvcGVydHkodGhpcy55KSl0aHJvdyBFcnJvcigiTm8geSBwcm9wZXJ0eSAnIit0aGlzLnkrIicgb24gYmlucyBkYXRhIik7dmFyIGM9dGhpcy50aW1lUHJvcGVydHksZD10aGlzLngsZj10aGlzLmJpbnMsZz10aGlzLmR4LApsPXRoaXMueSxrPXRoaXMuX2RhdGEsbT10aGlzLm1vZGUscD1kMy5oY2wodGhpcy5jb2xvclNjYWxlKHRoaXMuX25hbWUpKSxxPWQzLnNlbGVjdCh0aGlzLiQudG9vbHRpcCkscj1mdW5jdGlvbihFYSl7cmV0dXJuIEVhW2RdfSx0PWZ1bmN0aW9uKEVhKXtyZXR1cm4gRWFbbF19LHY9ZnVuY3Rpb24oRWEpe3JldHVybiBFYVtkXStFYVtnXX0sQT1mdW5jdGlvbihFYSl7cmV0dXJuIEVhW2NdfTsicmVsYXRpdmUiPT09YyYmKEE9ZnVuY3Rpb24oRWEpe3JldHVybiBFYS53YWxsX3RpbWUta1swXS53YWxsX3RpbWV9KTt2YXIgeT10aGlzLiQuc3ZnLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHg9eS53aWR0aCxDPXkuaGVpZ2h0LEY9NTtpZigib2Zmc2V0Ij09PW0pe3ZhciBEPUMvMi41O0Y9RCs1fWVsc2UgRD1DLUYtMjA7dmFyIEI9eC0yNC02MCxHPUMtRi0yMDtkMy5taW4oayxyKTtkMy5tYXgoayx2KTt2YXIgSz1kMy5mb3JtYXQoIi4zbiIpO3k9ZDMuZm9ybWF0KCIuMGYiKTsid2FsbF90aW1lIj09PQpjP3k9ZDMudGltZUZvcm1hdCgiJW0vJWQgJVgiKToicmVsYXRpdmUiPT09YyYmKHk9ZnVuY3Rpb24oRWEpe3JldHVybiBkMy5mb3JtYXQoIi4xciIpKEVhLzM2RTUpKyJoIn0pO3ZhciBMPWsubWFwKGZ1bmN0aW9uKEVhKXtyZXR1cm5bZDMubWluKEVhW2ZdLHIpLGQzLm1heChFYVtmXSx2KV19KSxKPWsubWFwKGZ1bmN0aW9uKEVhKXtyZXR1cm4gZDMuZXh0ZW50KEVhW2ZdLHQpfSksUD1kMy5leHRlbnQoayxBKSxTPSgid2FsbF90aW1lIj09PWM/ZDMuc2NhbGVUaW1lKCk6ZDMuc2NhbGVMaW5lYXIoKSkuZG9tYWluKFApLnJhbmdlKFswLCJvZmZzZXQiPT09bT9HOjBdKSxOPWQzLnNjYWxlTGluZWFyKCkuZG9tYWluKFswLGQzLm1heChrLGZ1bmN0aW9uKEVhLEdhKXtyZXR1cm4gSltHYV1bMV19KV0pLnJhbmdlKFtELDBdKSxUPWQzLnNjYWxlTGluZWFyKCkuZG9tYWluKE4uZG9tYWluKCkpLnJhbmdlKFs1MDAsMF0pLFk9ZDMuc2NhbGVMaW5lYXIoKS5kb21haW4oW2QzLm1pbihrLGZ1bmN0aW9uKEVhLApHYSl7cmV0dXJuIExbR2FdWzBdfSksZDMubWF4KGssZnVuY3Rpb24oRWEsR2Epe3JldHVybiBMW0dhXVsxXX0pXSkubmljZSgpLnJhbmdlKFswLEJdKSxhYT1kMy5zY2FsZUxpbmVhcigpLmRvbWFpbihZLmRvbWFpbigpKS5yYW5nZShbMCw1MDBdKSxoYT1kMy5zY2FsZUxpbmVhcigpLmRvbWFpbihkMy5leHRlbnQoayxBKSkucmFuZ2UoW3AuZGFya2VyKCkscC5icmlnaHRlcigpXSkuaW50ZXJwb2xhdGUoZDMuaW50ZXJwb2xhdGVIY2wpO3A9ZDMuYXhpc0JvdHRvbShZKS50aWNrcygpO3ZhciBYPWQzLmF4aXNSaWdodChTKS50aWNrcygpLnRpY2tGb3JtYXQoeSksY2E9ZDMuYXhpc1JpZ2h0KE4pLnRpY2tzKCkudGlja1NpemUoQis1KS50aWNrRm9ybWF0KEspLGVhPWZ1bmN0aW9uKEVhKXtyZXR1cm4gRWFbZF0rRWFbZ10vMn0sa2E9ZDMubGluZSgpLngoZnVuY3Rpb24oRWEpe3JldHVybiBhYShlYShFYSkpfSkueShmdW5jdGlvbihFYSl7cmV0dXJuIFQoRWFbbF0pfSksYmE9ZnVuY3Rpb24oRWEpe3JldHVybiJNIisKYWEoZWEoRWFbMF0pKSsiLCIrVCgwKSsiTCIra2EoRWEpLnNsaWNlKDEpKyJMIithYShlYShFYVtFYS5sZW5ndGgtMV0pKSsiLCIrVCgwKX0sbGE9dGhpcy4kLnN2Zzt5PWQzLnNlbGVjdChsYSk7YT15LnRyYW5zaXRpb24oKS5kdXJhdGlvbihhKTt5PXkuc2VsZWN0KCJnIikuY2xhc3NlZCgic21hbGwiLGZ1bmN0aW9uKCl7cmV0dXJuIDA8QiYmMTUwPj1CfSkuY2xhc3NlZCgibWVkaXVtIixmdW5jdGlvbigpe3JldHVybiAxNTA8QiYmMzAwPj1CfSkuY2xhc3NlZCgibGFyZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIDMwMDxCfSk7YT1hLnNlbGVjdCgiZyIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgyNCwiK0YrIikiKTt2YXIgd2E9ZDMuYmlzZWN0b3IodikubGVmdDtQPXkuc2VsZWN0KCIuc3RhZ2UiKS5vbigibW91c2VvdmVyIixmdW5jdGlvbigpe3hhLnN0eWxlKCJvcGFjaXR5IiwxKTt6YS5zdHlsZSgib3BhY2l0eSIsMSk7RmEuc3R5bGUoIm9wYWNpdHkiLDEpO1NhLnN0eWxlKCJvcGFjaXR5IiwKMSk7cS5zdHlsZSgib3BhY2l0eSIsMSl9KS5vbigibW91c2VvdXQiLGZ1bmN0aW9uKCl7eGEuc3R5bGUoIm9wYWNpdHkiLDApO3phLnN0eWxlKCJvcGFjaXR5IiwwKTtGYS5zdHlsZSgib3BhY2l0eSIsMCk7U2Euc3R5bGUoIm9wYWNpdHkiLDApO3hhLmNsYXNzZWQoImhvdmVyLWNsb3Nlc3QiLCExKTtDYS5jbGFzc2VkKCJvdXRsaW5lLWhvdmVyIiwhMSk7cS5zdHlsZSgib3BhY2l0eSIsMCl9KS5vbigibW91c2Vtb3ZlIixmdW5jdGlvbigpe2Z1bmN0aW9uIEVhKCRiKXtyZXR1cm4gTWF0aC5taW4oJGJbZl0ubGVuZ3RoLTEsd2EoJGJbZl0sZGIpKX12YXIgR2E9ZDMubW91c2UodGhpcyksZGI9WS5pbnZlcnQoR2FbMF0pO1MuaW52ZXJ0KEdhWzFdKTt2YXIgeGIsQ2I9SW5maW5pdHkseWI7eGEuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbigkYil7dmFyIGZjPUVhKCRiKTt5Yj0kYjt2YXIgQWE9WSgkYltmXVtmY11bZF0rJGJbZl1bZmNdW2ddLzIpO2ZjPU4oJGJbZl1bZmNdW2xdKTt2YXIgTWI9CiJvZmZzZXQiPT09bT9TKEEoJGIpKS0oRC1mYyk6ZmM7TWI9TWF0aC5hYnMoR2FbMV0tTWIpO01iPENiJiYoQ2I9TWIseGI9JGIpO3JldHVybiJ0cmFuc2xhdGUoIitBYSsiLCIrZmMrIikifSk7eGEuc2VsZWN0KCJ0ZXh0IikudGV4dChmdW5jdGlvbigkYil7dmFyIGZjPUVhKCRiKTtyZXR1cm4gJGJbZl1bZmNdW2xdfSk7eGEuY2xhc3NlZCgiaG92ZXItY2xvc2VzdCIsZnVuY3Rpb24oJGIpe3JldHVybiAkYj09PXhifSk7Q2EuY2xhc3NlZCgib3V0bGluZS1ob3ZlciIsZnVuY3Rpb24oJGIpe3JldHVybiAkYj09PXhifSk7dmFyIHRiPUVhKHliKTt6YS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKCl7cmV0dXJuInRyYW5zbGF0ZSgiK1koeWJbZl1bdGJdW2RdK3liW2ZdW3RiXVtnXS8yKSsiLCAiK0crIikifSkuc2VsZWN0KCJ0ZXh0IikudGV4dChmdW5jdGlvbigpe3JldHVybiBLKHliW2ZdW3RiXVtkXSt5YltmXVt0Yl1bZ10vMil9KTt2YXIgQ2M9WC50aWNrRm9ybWF0KCk7RmEuYXR0cigidHJhbnNmb3JtIiwKZnVuY3Rpb24oKXtyZXR1cm4idHJhbnNsYXRlKCIrQisiLCAiKygib2Zmc2V0Ij09PW0/UyhBKHhiKSk6MCkrIikifSkuc3R5bGUoImRpc3BsYXkiLCJvZmZzZXQiPT09bT8iIjoibm9uZSIpLnNlbGVjdCgidGV4dCIpLnRleHQoZnVuY3Rpb24oKXtyZXR1cm4gQ2MoQSh4YikpfSk7dmFyIFpiPWNhLnRpY2tGb3JtYXQoKTtTYS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKCl7cmV0dXJuInRyYW5zbGF0ZSgiK0IrIiwgIisoIm9mZnNldCI9PT1tPzA6Tih4YltmXVt0Yl1bbF0pKSsiKSJ9KS5zdHlsZSgiZGlzcGxheSIsIm9mZnNldCI9PT1tPyJub25lIjoiIikuc2VsZWN0KCJ0ZXh0IikudGV4dChmdW5jdGlvbigpe3JldHVybiBaYih4YltmXVt0Yl1bbF0pfSk7dmFyIGhkPWQzLm1vdXNlKGxhKTtxLnN0eWxlKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisoaGRbMF0rMTUpKyJweCwiKyhoZFsxXS0xNSkrInB4KSIpLnNlbGVjdCgic3BhbiIpLnRleHQoIm9mZnNldCI9PT1tP1piKHhiW2ZdW3RiXVtsXSk6Cigic3RlcCI9PT1jPyJzdGVwICI6IiIpK0NjKEEoeGIpKSl9KTtQLnNlbGVjdCgiLmJhY2tncm91bmQiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoLTI0LCIrLUYrIikiKS5hdHRyKCJ3aWR0aCIseCkuYXR0cigiaGVpZ2h0IixDKTtDPVAuc2VsZWN0QWxsKCIuaGlzdG9ncmFtIikuZGF0YShrKTtDLmV4aXQoKS5yZW1vdmUoKTt4PUMuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImhpc3RvZ3JhbSIpO0M9eC5tZXJnZShDKS5zb3J0KGZ1bmN0aW9uKEVhLEdhKXtyZXR1cm4gQShFYSktQShHYSl9KTtGPWEuc2VsZWN0QWxsKCIuaGlzdG9ncmFtIikuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihFYSl7cmV0dXJuInRyYW5zbGF0ZSgwLCAiKygib2Zmc2V0Ij09PW0/UyhBKEVhKSktRDowKSsiKSJ9KTt4LmFwcGVuZCgibGluZSIpLmF0dHIoImNsYXNzIiwiYmFzZWxpbmUiKTtGLnNlbGVjdCgiLmJhc2VsaW5lIikuc3R5bGUoInN0cm9rZS1vcGFjaXR5IixmdW5jdGlvbigpe3JldHVybiJvZmZzZXQiPT09Cm0/LjE6MH0pLmF0dHIoInkxIixEKS5hdHRyKCJ5MiIsRCkuYXR0cigieDIiLEIpO3guYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJvdXRsaW5lIik7dmFyIENhPUMuc2VsZWN0KCIub3V0bGluZSIpLmF0dHIoInZlY3Rvci1lZmZlY3QiLCJub24tc2NhbGluZy1zdHJva2UiKS5hdHRyKCJkIixmdW5jdGlvbihFYSl7cmV0dXJuIGJhKEVhW2ZdKX0pLnN0eWxlKCJzdHJva2Utd2lkdGgiLDEpO0Yuc2VsZWN0KCIub3V0bGluZSIpLmF0dHIoInRyYW5zZm9ybSIsInNjYWxlKCIrQi81MDArIiwgIitELzUwMCsiKSIpLnN0eWxlKCJzdHJva2UiLGZ1bmN0aW9uKEVhKXtyZXR1cm4ib2Zmc2V0Ij09PW0/IndoaXRlIjpoYShBKEVhKSl9KS5zdHlsZSgiZmlsbC1vcGFjaXR5IixmdW5jdGlvbigpe3JldHVybiJvZmZzZXQiPT09bT8xOjB9KS5zdHlsZSgiZmlsbCIsZnVuY3Rpb24oRWEpe3JldHVybiBoYShBKEVhKSl9KTt4PXguYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJob3ZlciIpLnN0eWxlKCJmaWxsIiwKZnVuY3Rpb24oRWEpe3JldHVybiBoYShBKEVhKSl9KTt2YXIgeGE9Qy5zZWxlY3QoIi5ob3ZlciIpO3guYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJyIiwyKTt4LmFwcGVuZCgidGV4dCIpLnN0eWxlKCJkaXNwbGF5Iiwibm9uZSIpLmF0dHIoImR4Iiw0KTt4PXkuc2VsZWN0KCIueC1heGlzLWhvdmVyIikuc2VsZWN0QWxsKCIubGFiZWwiKS5kYXRhKFsieCJdKTtDPXguZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImxhYmVsIik7dmFyIHphPXgubWVyZ2UoQyk7Qy5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4IiwtMjApLmF0dHIoInkiLDYpLmF0dHIoIndpZHRoIiw0MCkuYXR0cigiaGVpZ2h0IiwxNCk7Qy5hcHBlbmQoImxpbmUiKS5hdHRyKCJ4MSIsMCkuYXR0cigieDIiLDApLmF0dHIoInkxIiwwKS5hdHRyKCJ5MiIsNik7Qy5hcHBlbmQoInRleHQiKS5hdHRyKCJkeSIsMTgpO3g9eS5zZWxlY3QoIi55LWF4aXMtaG92ZXIiKS5zZWxlY3RBbGwoIi5sYWJlbCIpLmRhdGEoWyJ5Il0pOwpDPXguZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImxhYmVsIik7dmFyIEZhPXgubWVyZ2UoQyk7Qy5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4Iiw4KS5hdHRyKCJ5IiwtNikuYXR0cigid2lkdGgiLDQwKS5hdHRyKCJoZWlnaHQiLDE0KTtDLmFwcGVuZCgibGluZSIpLmF0dHIoIngxIiwwKS5hdHRyKCJ4MiIsNikuYXR0cigieTEiLDApLmF0dHIoInkyIiwwKTtDLmFwcGVuZCgidGV4dCIpLmF0dHIoImR4Iiw4KS5hdHRyKCJkeSIsNCk7eT15LnNlbGVjdCgiLnktc2xpY2UtYXhpcy1ob3ZlciIpLnNlbGVjdEFsbCgiLmxhYmVsIikuZGF0YShbInkiXSk7eD15LmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJsYWJlbCIpO3ZhciBTYT15Lm1lcmdlKHgpO3guYXBwZW5kKCJyZWN0IikuYXR0cigieCIsOCkuYXR0cigieSIsLTYpLmF0dHIoIndpZHRoIiw0MCkuYXR0cigiaGVpZ2h0IiwxNCk7eC5hcHBlbmQoImxpbmUiKS5hdHRyKCJ4MSIsMCkuYXR0cigieDIiLDYpLmF0dHIoInkxIiwKMCkuYXR0cigieTIiLDApO3guYXBwZW5kKCJ0ZXh0IikuYXR0cigiZHgiLDgpLmF0dHIoImR5Iiw0KTthLnNlbGVjdCgiLnkuYXhpcy5zbGljZSIpLnN0eWxlKCJvcGFjaXR5Iiwib2Zmc2V0Ij09PW0/MDoxKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMCwgIisoIm9mZnNldCI9PT1tPy1EOjApKyIpIikuY2FsbChjYSk7YS5zZWxlY3QoIi54LmF4aXMiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMCwgIitHKyIpIikuY2FsbChwKTthLnNlbGVjdCgiLnkuYXhpcyIpLnN0eWxlKCJvcGFjaXR5Iiwib2Zmc2V0Ij09PW0/MTowKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitCKyIsICIrKCJvZmZzZXQiPT09bT8wOkcpKyIpIikuY2FsbChYKTthLnNlbGVjdEFsbCgiLnRpY2sgdGV4dCIpLmF0dHIoImZpbGwiLCIjYWFhIik7YS5zZWxlY3RBbGwoIi5heGlzIHBhdGguZG9tYWluIikuYXR0cigic3Ryb2tlIiwibm9uZSIpfX19KTsKPC9zY3JpcHQ+CjwvZG9tLW1vZHVsZT4KCgoKPHNjcmlwdD4vL35+V0VCUEFUSH5+L3RmLWhpc3RvZ3JhbS1kYXNoYm9hcmQvaGlzdG9ncmFtQ29yZS5qcwp2YXIgcG07CihmdW5jdGlvbihhKXtmdW5jdGlvbiBjKGYpe2NvbnN0IFtnLGwsa109ZjtyZXR1cm57d2FsbF90aW1lOmcsc3RlcDpsLG1pbjpkMy5taW4oay5tYXAoKFttXSk9Pm0pKSxtYXg6ZDMubWF4KGsubWFwKChbLG1dKT0+bSkpLGJ1Y2tldHM6ay5tYXAoKFttLHAscV0pPT4oe2xlZnQ6bSxyaWdodDpwLGNvdW50OnF9KSl9fWZ1bmN0aW9uIGQoZixnLGwsaz0zMCl7bD09PWcmJihsPTEuMSpnKzEsZz1nLzEuMS0xKTtjb25zdCBtPShsLWcpL2s7bGV0IHA9MDtyZXR1cm4gZDMucmFuZ2UoZyxsLG0pLm1hcChxPT57Y29uc3Qgcj1xK207bGV0IHQ9MDtmb3IoO3A8Zi5idWNrZXRzLmxlbmd0aDspe2NvbnN0IEE9TWF0aC5taW4obCxmLmJ1Y2tldHNbcF0ucmlnaHQpO3ZhciB2PU1hdGgubWF4KGcsZi5idWNrZXRzW3BdLmxlZnQpO2NvbnN0IHk9TWF0aC5taW4oQSxyKS1NYXRoLm1heCh2LHEpO3Y9eS8oQS12KSpmLmJ1Y2tldHNbcF0uY291bnQ7dCs9MDx5P3Y6MDtpZihBPnIpYnJlYWs7cCsrfXJldHVybnt4OnEsCmR4Om0seTp0fX0pfWEuYmFja2VuZFRvSW50ZXJtZWRpYXRlPWM7YS5pbnRlcm1lZGlhdGVUb0QzPWQ7YS5iYWNrZW5kVG9Wej1mdW5jdGlvbihmKXtmPWYubWFwKGMpO2NvbnN0IGc9ZDMubWluKGYsaz0+ay5taW4pLGw9ZDMubWF4KGYsaz0+ay5tYXgpO3JldHVybiBmLm1hcChrPT4oe3dhbGxfdGltZTprLndhbGxfdGltZSxzdGVwOmsuc3RlcCxiaW5zOmQoayxnLGwpfSkpfX0pKHBtfHwocG09e30pKTsKPC9zY3JpcHQ+CgoKCjxkb20tbW9kdWxlIGlkPSJ0Zi1oaXN0b2dyYW0tbG9hZGVyIj4KICA8dGVtcGxhdGU+CiAgICA8dGYtY2FyZC1oZWFkaW5nIHRhZz0iW1t0YWddXSIgcnVuPSJbW3J1bl1dIiBkaXNwbGF5LW5hbWU9IltbdGFnTWV0YWRhdGEuZGlzcGxheU5hbWVdXSIgZGVzY3JpcHRpb249IltbdGFnTWV0YWRhdGEuZGVzY3JpcHRpb25dXSIgY29sb3I9IltbX3J1bkNvbG9yXV0iPjwvdGYtY2FyZC1oZWFkaW5nPgogICAgCiAgICA8dnotaGlzdG9ncmFtLXRpbWVzZXJpZXMgaWQ9ImNoYXJ0IiB0aW1lLXByb3BlcnR5PSJbW3RpbWVQcm9wZXJ0eV1dIiBtb2RlPSJbW2hpc3RvZ3JhbU1vZGVdXSIgY29sb3Itc2NhbGU9IltbX2NvbG9yU2NhbGVGdW5jdGlvbl1dIj48L3Z6LWhpc3RvZ3JhbS10aW1lc2VyaWVzPgogICAgPGRpdiBzdHlsZT0iZGlzcGxheTogZmxleDsgZmxleC1kaXJlY3Rpb246IHJvdzsiPgogICAgICA8cGFwZXItaWNvbi1idXR0b24gc2VsZWN0ZWQkPSJbW19leHBhbmRlZF1dIiBpY29uPSJmdWxsc2NyZWVuIiBvbi10YXA9Il90b2dnbGVFeHBhbmRlZCI+PC9wYXBlci1pY29uLWJ1dHRvbj4KICAgIDwvZGl2PgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIHdpZHRoOiAzMzBweDsKICAgICAgICBoZWlnaHQ6IDIzNXB4OwogICAgICAgIG1hcmdpbi1yaWdodDogMTBweDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxNXB4OwogICAgICB9CiAgICAgIDpob3N0KFtfZXhwYW5kZWRdKSB7CiAgICAgICAgd2lkdGg6IDcwMHB4OwogICAgICAgIGhlaWdodDogNTAwcHg7CiAgICAgIH0KCiAgICAgIHZ6LWhpc3RvZ3JhbS10aW1lc2VyaWVzIHsKICAgICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgd2lsbC1jaGFuZ2U6IHRyYW5zZm9ybTsKICAgICAgfQoKICAgICAgcGFwZXItaWNvbi1idXR0b24gewogICAgICAgIGNvbG9yOiAjMjE5NmYzOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDEwMCU7CiAgICAgICAgd2lkdGg6IDMycHg7CiAgICAgICAgaGVpZ2h0OiAzMnB4OwogICAgICAgIHBhZGRpbmc6IDRweDsKICAgICAgfQoKICAgICAgcGFwZXItaWNvbi1idXR0b25bc2VsZWN0ZWRdIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS10Yi11aS1saWdodC1hY2NlbnQpOwogICAgICB9CgogICAgICB0Zi1jYXJkLWhlYWRpbmcgewogICAgICAgIG1hcmdpbi1ib3R0b206IDEwcHg7CiAgICAgICAgd2lkdGg6IDkwJTsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgogIDxzY3JpcHQ+Ly9+fldFQlBBVEh+fi90Zi1oaXN0b2dyYW0tZGFzaGJvYXJkL3RmLWhpc3RvZ3JhbS1sb2FkZXIuaHRtbC5qcwpQb2x5bWVyKHtpczoidGYtaGlzdG9ncmFtLWxvYWRlciIscHJvcGVydGllczp7cnVuOlN0cmluZyx0YWc6U3RyaW5nLGRhdGFUb0xvYWQ6e3R5cGU6QXJyYXksY29tcHV0ZWQ6Il9jb21wdXRlRGF0YVRvTG9hZChydW4sIHRhZykifSxnZXREYXRhTG9hZE5hbWU6e3R5cGU6RnVuY3Rpb24sdmFsdWU6KCk9Pih7cnVuOmF9KT0+YX0sZ2V0RGF0YUxvYWRVcmw6e3R5cGU6RnVuY3Rpb24sdmFsdWU6KCk9Pih7dGFnOmEscnVuOmN9KT0+UGsuYWRkUGFyYW1zKFBrLmdldFJvdXRlcigpLnBsdWdpblJvdXRlKCJoaXN0b2dyYW1zIiwiL2hpc3RvZ3JhbXMiKSx7dGFnOmEscnVuOmN9KX0sbG9hZERhdGFDYWxsYmFjazp7dHlwZTpGdW5jdGlvbix2YWx1ZTpmdW5jdGlvbigpe3JldHVybihhLGMsZCk9PnthPXBtLmJhY2tlbmRUb1Z6KGQpO2M9dGhpcy5nZXREYXRhTG9hZE5hbWUoYyk7dGhpcy4kLmNoYXJ0LnNldFNlcmllc0RhdGEoYyxhKX19fSx0YWdNZXRhZGF0YTpPYmplY3QsdGltZVByb3BlcnR5OlN0cmluZywKaGlzdG9ncmFtTW9kZTpTdHJpbmcsX2NvbG9yU2NhbGVGdW5jdGlvbjp7dHlwZTpPYmplY3QsdmFsdWU6KCk9PlpsLnJ1bnNDb2xvclNjYWxlfSxfcnVuQ29sb3I6e3R5cGU6U3RyaW5nLGNvbXB1dGVkOiJfY29tcHV0ZVJ1bkNvbG9yKHJ1bikifSxfZXhwYW5kZWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9fSxvYnNlcnZlcnM6WyJyZWxvYWQocnVuLCB0YWcsIHJlcXVlc3RNYW5hZ2VyKSJdLGJlaGF2aW9yczpbV2wuRGF0YUxvYWRlckJlaGF2aW9yXSxfY29tcHV0ZURhdGFUb0xvYWQoYSxjKXtyZXR1cm5be3J1bjphLHRhZzpjfV19LF9jb21wdXRlUnVuQ29sb3IoYSl7cmV0dXJuIHRoaXMuX2NvbG9yU2NhbGVGdW5jdGlvbihhKX0scmVkcmF3KCl7dGhpcy4kLmNoYXJ0LnJlZHJhdygpfSxfdG9nZ2xlRXhwYW5kZWQoKXt0aGlzLnNldCgiX2V4cGFuZGVkIiwhdGhpcy5fZXhwYW5kZWQpO3RoaXMucmVkcmF3KCl9fSk7Cjwvc2NyaXB0Pgo8L2RvbS1tb2R1bGU+CgoKCjxkb20tbW9kdWxlIGlkPSJ0Zi1oaXN0b2dyYW0tZGFzaGJvYXJkIj4KICA8dGVtcGxhdGU+CiAgICA8dGYtZGFzaGJvYXJkLWxheW91dD4KICAgICAgPGRpdiBzbG90PSJzaWRlYmFyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24iPgogICAgICAgICAgPHRmLW9wdGlvbi1zZWxlY3RvciBpZD0iaGlzdG9ncmFtTW9kZVNlbGVjdG9yIiBuYW1lPSJIaXN0b2dyYW0gbW9kZSIgc2VsZWN0ZWQtaWQ9Int7X2hpc3RvZ3JhbU1vZGV9fSI+CiAgICAgICAgICAgIDxwYXBlci1idXR0b24gaWQ9Im92ZXJsYXkiPm92ZXJsYXk8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbiBpZD0ib2Zmc2V0Ij5vZmZzZXQ8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgIDwvdGYtb3B0aW9uLXNlbGVjdG9yPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiI+CiAgICAgICAgICA8dGYtb3B0aW9uLXNlbGVjdG9yIGlkPSJ0aW1lUHJvcGVydHlTZWxlY3RvciIgbmFtZT0iT2Zmc2V0IHRpbWUgYXhpcyIgc2VsZWN0ZWQtaWQ9Int7X3RpbWVQcm9wZXJ0eX19Ij4KICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbiBpZD0ic3RlcCI+c3RlcDwvcGFwZXItYnV0dG9uPgogICAgICAgICAgICA8cGFwZXItYnV0dG9uIGlkPSJyZWxhdGl2ZSI+cmVsYXRpdmU8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbiBpZD0id2FsbF90aW1lIj53YWxsPC9wYXBlci1idXR0b24+CiAgICAgICAgICA8L3RmLW9wdGlvbi1zZWxlY3Rvcj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24iPgogICAgICAgICAgPHRmLXJ1bnMtc2VsZWN0b3Igc2VsZWN0ZWQtcnVucz0ie3tfc2VsZWN0ZWRSdW5zfX0iPgogICAgICAgICAgPC90Zi1ydW5zLXNlbGVjdG9yPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBzbG90PSJjZW50ZXIiPgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfZGF0YU5vdEZvdW5kXV0iPgogICAgICAgICAgPGRpdiBjbGFzcz0ibm8tZGF0YS13YXJuaW5nIj4KICAgICAgICAgICAgPGgzPk5vIGhpc3RvZ3JhbSBkYXRhIHdhcyBmb3VuZC48L2gzPgogICAgICAgICAgICA8cD5Qcm9iYWJsZSBjYXVzZXM6CiAgICAgICAgICAgIDx1bD4KICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICBZb3UgaGF2ZW7igJl0IHdyaXR0ZW4gYW55IGhpc3RvZ3JhbSBkYXRhIHRvIHlvdXIgZXZlbnQgZmlsZXMuCiAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICA8bGk+VGVuc29yQm9hcmQgY2Fu4oCZdCBmaW5kIHlvdXIgZXZlbnQgZmlsZXMuPC9saT4KICAgICAgICAgICAgPC91bD4KCiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdeKAmXJlIG5ldyB0byB1c2luZyBUZW5zb3JCb2FyZCwgYW5kIHdhbnQgdG8gZmluZCBvdXQgaG93IHRvCiAgICAgICAgICAgICAgYWRkIGRhdGEgYW5kIHNldCB1cCB5b3VyIGV2ZW50IGZpbGVzLCBjaGVjayBvdXQgdGhlCiAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kIj5SRUFETUU8L2E+CiAgICAgICAgICAgICAgYW5kIHBlcmhhcHMgdGhlCiAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvZ2V0X3N0YXJ0ZWQvc3VtbWFyaWVzX2FuZF90ZW5zb3Jib2FyZCI+VGVuc29yQm9hcmQgdHV0b3JpYWw8L2E+LgogICAgICAgICAgICAKCiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdSB0aGluayBUZW5zb3JCb2FyZCBpcyBjb25maWd1cmVkIHByb3Blcmx5LCBwbGVhc2Ugc2VlCiAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kI215LXRlbnNvcmJvYXJkLWlzbnQtc2hvd2luZy1hbnktZGF0YS13aGF0cy13cm9uZyI+dGhlIHNlY3Rpb24gb2YgdGhlIFJFQURNRSBkZXZvdGVkIHRvIG1pc3NpbmcgZGF0YSBwcm9ibGVtczwvYT4KICAgICAgICAgICAgICBhbmQgY29uc2lkZXIgZmlsaW5nIGFuIGlzc3VlIG9uIEdpdEh1Yi4KICAgICAgICAgICAgCiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shX2RhdGFOb3RGb3VuZF1dIj4KICAgICAgICAgIDx0Zi10YWctZmlsdGVyZXIgdGFnLWZpbHRlcj0ie3tfdGFnRmlsdGVyfX0iPjwvdGYtdGFnLWZpbHRlcmVyPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tfY2F0ZWdvcmllc11dIiBhcz0iY2F0ZWdvcnkiPgogICAgICAgICAgICA8dGYtY2F0ZWdvcnktcGFnaW5hdGVkLXZpZXcgY2F0ZWdvcnk9IltbY2F0ZWdvcnldXSIgaW5pdGlhbC1vcGVuZWQ9IltbX3Nob3VsZE9wZW4oaW5kZXgpXV0iPgogICAgICAgICAgICAgIDx0ZW1wbGF0ZT4KICAgICAgICAgICAgICAgIDx0Zi1oaXN0b2dyYW0tbG9hZGVyIHJ1bj0iW1tpdGVtLnJ1bl1dIiB0YWc9IltbaXRlbS50YWddXSIgYWN0aXZlPSJbW2FjdGl2ZV1dIiB0YWctbWV0YWRhdGE9IltbX3RhZ01ldGFkYXRhKF9ydW5Ub1RhZ0luZm8sIGl0ZW0ucnVuLCBpdGVtLnRhZyldXSIgdGltZS1wcm9wZXJ0eT0iW1tfdGltZVByb3BlcnR5XV0iIGhpc3RvZ3JhbS1tb2RlPSJbW19oaXN0b2dyYW1Nb2RlXV0iIHJlcXVlc3QtbWFuYWdlcj0iW1tfcmVxdWVzdE1hbmFnZXJdXSI+PC90Zi1oaXN0b2dyYW0tbG9hZGVyPgogICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDwvdGYtY2F0ZWdvcnktcGFnaW5hdGVkLXZpZXc+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDwvZGl2PgogICAgPC90Zi1kYXNoYm9hcmQtbGF5b3V0PgoKICAgIDxzdHlsZSBpbmNsdWRlPSJkYXNoYm9hcmQtc3R5bGUiPjwvc3R5bGU+CiAgICA8c3R5bGU+CiAgICAgIC5uby1kYXRhLXdhcm5pbmcgewogICAgICAgIG1heC13aWR0aDogNTQwcHg7CiAgICAgICAgbWFyZ2luOiA4MHB4IGF1dG8gMCBhdXRvOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CgogIDxzY3JpcHQ+Ly9+fldFQlBBVEh+fi90Zi1oaXN0b2dyYW0tZGFzaGJvYXJkL3RmLWhpc3RvZ3JhbS1kYXNoYm9hcmQuaHRtbC5qcwpQb2x5bWVyKHtpczoidGYtaGlzdG9ncmFtLWRhc2hib2FyZCIscHJvcGVydGllczp7X2hpc3RvZ3JhbU1vZGU6e3R5cGU6U3RyaW5nLHZhbHVlOiJvZmZzZXQifSxfdGltZVByb3BlcnR5Ont0eXBlOlN0cmluZyx2YWx1ZToic3RlcCJ9LF9zZWxlY3RlZFJ1bnM6QXJyYXksX3J1blRvVGFnOk9iamVjdCxfcnVuVG9UYWdJbmZvOk9iamVjdCxfZGF0YU5vdEZvdW5kOkJvb2xlYW4sX3RhZ0ZpbHRlcjpTdHJpbmcsX3Jlc3RhbXA6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sX2NhdGVnb3JpZXNEb21SZWFkeTpCb29sZWFuLF9jYXRlZ29yaWVzOnt0eXBlOkFycmF5LGNvbXB1dGVkOiJfbWFrZUNhdGVnb3JpZXMoX3J1blRvVGFnLCBfc2VsZWN0ZWRSdW5zLCBfdGFnRmlsdGVyLCBfY2F0ZWdvcmllc0RvbVJlYWR5KSJ9LF9yZXF1ZXN0TWFuYWdlcjp7dHlwZTpPYmplY3QsdmFsdWU6KCk9Pm5ldyBQay5SZXF1ZXN0TWFuYWdlcn19LGxpc3RlbmVyczp7ImNvbnRlbnQtdmlzaWJpbGl0eS1jaGFuZ2VkIjoiX3JlZHJhd0NhdGVnb3J5UGFuZSJ9LApfcmVkcmF3Q2F0ZWdvcnlQYW5lKGEsYyl7YyYmYS50YXJnZXQucXVlcnlTZWxlY3RvckFsbCgidGYtaGlzdG9ncmFtLWxvYWRlciIpLmZvckVhY2goZD0+ZC5yZWRyYXcoKSl9LHJlYWR5KCl7dGhpcy5yZWxvYWQoKX0scmVsb2FkKCl7dGhpcy5fZmV0Y2hUYWdzKCkudGhlbigoKT0+e3RoaXMuX3JlbG9hZEhpc3RvZ3JhbXMoKX0pfSxfZmV0Y2hUYWdzKCl7Y29uc3QgYT1Qay5nZXRSb3V0ZXIoKS5wbHVnaW5Sb3V0ZSgiaGlzdG9ncmFtcyIsIi90YWdzIik7cmV0dXJuIHRoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3QoYSkudGhlbihjPT57aWYoIV8uaXNFcXVhbChjLHRoaXMuX3J1blRvVGFnSW5mbykpe3ZhciBkPV8ubWFwVmFsdWVzKGMsZz0+T2JqZWN0LmtleXMoZykpLGY9UGsuZ2V0VGFncyhkKTt0aGlzLnNldCgiX2RhdGFOb3RGb3VuZCIsMD09PWYubGVuZ3RoKTt0aGlzLnNldCgiX3J1blRvVGFnIixkKTt0aGlzLnNldCgiX3J1blRvVGFnSW5mbyIsYyk7dGhpcy5hc3luYygoKT0+Cnt0aGlzLnNldCgiX2NhdGVnb3JpZXNEb21SZWFkeSIsITApfSl9fSl9LF9yZWxvYWRIaXN0b2dyYW1zKCl7dGhpcy5yb290LnF1ZXJ5U2VsZWN0b3JBbGwoInRmLWhpc3RvZ3JhbS1sb2FkZXIiKS5mb3JFYWNoKGE9PnthLnJlbG9hZCgpfSl9LF9zaG91bGRPcGVuKGEpe3JldHVybiAyPj1hfSxfbWFrZUNhdGVnb3JpZXMoYSxjLGQpe3JldHVybiBRay5jYXRlZ29yaXplUnVuVGFnQ29tYmluYXRpb25zKGEsYyxkKX0sX3RhZ01ldGFkYXRhKGEsYyxkKXtyZXR1cm4gYVtjXVtkXX19KTsKPC9zY3JpcHQ+CjwvZG9tLW1vZHVsZT4KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgo8ZG9tLW1vZHVsZSBpZD0idGYtdGV4dC1sb2FkZXIiPgogIDx0ZW1wbGF0ZT4KICAgIDx0Zi1jYXJkLWhlYWRpbmcgcnVuPSJbW3J1bl1dIiB0YWc9IltbdGFnXV0iIGNvbG9yPSJbW19ydW5Db2xvcl1dIj4KICAgIDwvdGYtY2FyZC1oZWFkaW5nPgogICAgPHBhcGVyLW1hdGVyaWFsIGVsZXZhdGlvbj0iMSIgaWQ9InN0ZXBzLWNvbnRhaW5lciIgY2xhc3M9ImNvbnRhaW5lciBzY3JvbGxiYXIiIHN0eWxlPSJib3JkZXItY29sb3I6IFtbX3J1bkNvbG9yXV0iPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW190ZXh0c11dIj4KICAgICAgICA8cGFwZXItbWF0ZXJpYWwgZWxldmF0aW9uPSIxIiBjbGFzcz0ic3RlcC1jb250YWluZXIiPgogICAgICAgICAgc3RlcCA8c3BhbiBjbGFzcz0ic3RlcC12YWx1ZSI+W1tfZm9ybWF0U3RlcChpdGVtLnN0ZXApXV08L3NwYW4+CiAgICAgICAgPC9wYXBlci1tYXRlcmlhbD4KICAgICAgICA8cGFwZXItbWF0ZXJpYWwgZWxldmF0aW9uPSIxIiBjbGFzcz0idGV4dCI+CiAgICAgICAgICA8dGYtbWFya2Rvd24tdmlldyBodG1sPSJbW2l0ZW0udGV4dF1dIj48L3RmLW1hcmtkb3duLXZpZXc+CiAgICAgICAgPC9wYXBlci1tYXRlcmlhbD4KICAgICAgPC90ZW1wbGF0ZT4KICAgIDwvcGFwZXItbWF0ZXJpYWw+CiAgICA8c3R5bGUgaW5jbHVkZT0ic2Nyb2xsYmFyLXN0eWxlIj48L3N0eWxlPgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogYXV0bzsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDEwcHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTVweDsKICAgICAgfQogICAgICAuc2Nyb2xsYmFyIHsKICAgICAgICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtOwogICAgICB9CiAgICAgICNzdGVwcy1jb250YWluZXIgewogICAgICAgIGJvcmRlci1yYWRpdXM6IDNweDsKICAgICAgICBib3JkZXI6IDJweCBzb2xpZCAvKiBjb2xvciBjb21wdXRlZCBhbmQgc2V0IGFzIGlubGluZSBzdHlsZSAqLzsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBtYXgtaGVpZ2h0OiA1MDBweDsKICAgICAgICBvdmVyZmxvdzogYXV0bzsKICAgICAgICBwYWRkaW5nOiAxMHB4OwogICAgICB9CiAgICAgIC50ZXh0IHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsKICAgICAgICBib3JkZXItcmFkaXVzOiAwIDNweCAzcHggM3B4OwogICAgICAgIHBhZGRpbmc6IDVweDsKICAgICAgICB3b3JkLWJyZWFrOiBicmVhay13b3JkOwogICAgICB9CiAgICAgIC5zdGVwLWNvbnRhaW5lciB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tdGItdWktbGlnaHQtYWNjZW50KTsKICAgICAgICBib3JkZXItYm90dG9tOiBub25lOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDNweCAzcHggMCAwOwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNjY2M7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBmb250LXN0eWxlOiBpdGFsaWM7CiAgICAgICAgbWFyZ2luLWxlZnQ6IC0xcHg7IC8qIHRvIGNvcnJlY3QgZm9yIGJvcmRlciAqLwogICAgICAgIHBhZGRpbmc6IDNweDsKICAgICAgfQogICAgICAuc3RlcC1jb250YWluZXI6bm90KDpmaXJzdC1jaGlsZCkgewogICAgICAgIG1hcmdpbi10b3A6IDE1cHg7CiAgICAgIH0KCiAgICAgIHRmLWNhcmQtaGVhZGluZyB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTBweDsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgogIDxzY3JpcHQ+Ly9+fldFQlBBVEh+fi90Zi10ZXh0LWRhc2hib2FyZC90Zi10ZXh0LWxvYWRlci5odG1sLmpzClBvbHltZXIoe2lzOiJ0Zi10ZXh0LWxvYWRlciIscHJvcGVydGllczp7cnVuOlN0cmluZyx0YWc6U3RyaW5nLF9ydW5Db2xvcjp7dHlwZTpTdHJpbmcsY29tcHV0ZWQ6Il9jb21wdXRlUnVuQ29sb3IocnVuKSJ9LF90ZXh0czp7dHlwZTpBcnJheSx2YWx1ZTpbXX0scmVxdWVzdE1hbmFnZXI6T2JqZWN0LF9jYW5jZWxsZXI6e3R5cGU6T2JqZWN0LHZhbHVlOigpPT5uZXcgUGsuQ2FuY2VsbGVyfX0sX2NvbXB1dGVSdW5Db2xvcihhKXtyZXR1cm4gWmwucnVuc0NvbG9yU2NhbGUoYSl9LGF0dGFjaGVkKCl7dGhpcy5fYXR0YWNoZWQ9ITA7dGhpcy5yZWxvYWQoKX0scmVsb2FkKCl7aWYodGhpcy5fYXR0YWNoZWQpe3RoaXMuX2NhbmNlbGxlci5jYW5jZWxBbGwoKTt2YXIgYT1Qay5hZGRQYXJhbXMoUGsuZ2V0Um91dGVyKCkucGx1Z2luUm91dGUoInRleHQiLCIvdGV4dCIpLHt0YWc6dGhpcy50YWcscnVuOnRoaXMucnVufSksYz10aGlzLl9jYW5jZWxsZXIuY2FuY2VsbGFibGUoZD0+e2QuY2FuY2VsbGVkfHwKKGQ9ZC52YWx1ZS5tYXAoZj0+KHt3YWxsX3RpbWU6bmV3IERhdGUoMUUzKmYud2FsbF90aW1lKSxzdGVwOmYuc3RlcCx0ZXh0OmYudGV4dH0pKSx0aGlzLnNldCgiX3RleHRzIixkLnNsaWNlKCkucmV2ZXJzZSgpKSl9KTt0aGlzLnJlcXVlc3RNYW5hZ2VyLnJlcXVlc3QoYSkudGhlbihjKX19LF9mb3JtYXRTdGVwKGEpe3JldHVybiBkMy5mb3JtYXQoIiwiKShhKX19KTsKPC9zY3JpcHQ+CjwvZG9tLW1vZHVsZT4KCgoKPGRvbS1tb2R1bGUgaWQ9InRmLXRleHQtZGFzaGJvYXJkIj4KICA8dGVtcGxhdGU+CiAgICA8dGYtZGFzaGJvYXJkLWxheW91dD4KICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhciIgc2xvdD0ic2lkZWJhciI+CiAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIj4KICAgICAgICAgIDx0Zi1ydW5zLXNlbGVjdG9yIHNlbGVjdGVkLXJ1bnM9Int7X3NlbGVjdGVkUnVuc319Ij4KICAgICAgICAgIDwvdGYtcnVucy1zZWxlY3Rvcj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNlbnRlciIgc2xvdD0iY2VudGVyIj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2RhdGFOb3RGb3VuZF1dIj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im5vLWRhdGEtd2FybmluZyI+CiAgICAgICAgICAgIDxoMz5ObyB0ZXh0IGRhdGEgd2FzIGZvdW5kLjwvaDM+CiAgICAgICAgICAgIDxwPlByb2JhYmxlIGNhdXNlczoKICAgICAgICAgICAgPHVsPgogICAgICAgICAgICAgIDxsaT5Zb3UgaGF2ZW7igJl0IHdyaXR0ZW4gYW55IHRleHQgZGF0YSB0byB5b3VyIGV2ZW50IGZpbGVzLjwvbGk+CiAgICAgICAgICAgICAgPGxpPlRlbnNvckJvYXJkIGNhbuKAmXQgZmluZCB5b3VyIGV2ZW50IGZpbGVzLjwvbGk+CiAgICAgICAgICAgIDwvdWw+CgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICBJZiB5b3XigJlyZSBuZXcgdG8gdXNpbmcgVGVuc29yQm9hcmQsIGFuZCB3YW50IHRvIGZpbmQgb3V0IGhvdyB0bwogICAgICAgICAgICAgIGFkZCBkYXRhIGFuZCBzZXQgdXAgeW91ciBldmVudCBmaWxlcywgY2hlY2sgb3V0IHRoZQogICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCI+UkVBRE1FPC9hPgogICAgICAgICAgICAgIGFuZCBwZXJoYXBzIHRoZQogICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL2dldF9zdGFydGVkL3N1bW1hcmllc19hbmRfdGVuc29yYm9hcmQiPlRlbnNvckJvYXJkIHR1dG9yaWFsPC9hPi4KICAgICAgICAgICAgCgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICBJZiB5b3UgdGhpbmsgVGVuc29yQm9hcmQgaXMgY29uZmlndXJlZCBwcm9wZXJseSwgcGxlYXNlIHNlZQogICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCNteS10ZW5zb3Jib2FyZC1pc250LXNob3dpbmctYW55LWRhdGEtd2hhdHMtd3JvbmciPnRoZSBzZWN0aW9uIG9mIHRoZSBSRUFETUUgZGV2b3RlZCB0byBtaXNzaW5nIGRhdGEgcHJvYmxlbXM8L2E+CiAgICAgICAgICAgICAgYW5kIGNvbnNpZGVyIGZpbGluZyBhbiBpc3N1ZSBvbiBHaXRIdWIuCiAgICAgICAgICAgIAogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIV9kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8dGYtdGFnLWZpbHRlcmVyIHRhZy1maWx0ZXI9Int7X3RhZ0ZpbHRlcn19Ij48L3RmLXRhZy1maWx0ZXJlcj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX2NhdGVnb3JpZXNdXSIgYXM9ImNhdGVnb3J5Ij4KICAgICAgICAgICAgPHRmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3IGNhdGVnb3J5PSJbW2NhdGVnb3J5XV0iIGluaXRpYWwtb3BlbmVkPSJbW19zaG91bGRPcGVuKGluZGV4KV1dIj4KICAgICAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8dGYtdGV4dC1sb2FkZXIgYWN0aXZlPSJbW2FjdGl2ZV1dIiB0YWc9IltbaXRlbS50YWddXSIgcnVuPSJbW2l0ZW0ucnVuXV0iIHJlcXVlc3QtbWFuYWdlcj0iW1tfcmVxdWVzdE1hbmFnZXJdXSI+PC90Zi10ZXh0LWxvYWRlcj4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8L3RmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L2Rpdj4KICAgIDwvdGYtZGFzaGJvYXJkLWxheW91dD4KICAgIDxzdHlsZSBpbmNsdWRlPSJkYXNoYm9hcmQtc3R5bGUiPjwvc3R5bGU+CiAgICA8c3R5bGU+CiAgICAgIC5uby1kYXRhLXdhcm5pbmcgewogICAgICAgIG1heC13aWR0aDogNTQwcHg7CiAgICAgICAgbWFyZ2luOiA4MHB4IGF1dG8gMCBhdXRvOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CiAgPHNjcmlwdD4vL35+V0VCUEFUSH5+L3RmLXRleHQtZGFzaGJvYXJkL3RmLXRleHQtZGFzaGJvYXJkLmh0bWwuanMKUG9seW1lcih7aXM6InRmLXRleHQtZGFzaGJvYXJkIixwcm9wZXJ0aWVzOntfc2VsZWN0ZWRSdW5zOkFycmF5LF9ydW5Ub1RhZzpPYmplY3QsX2RhdGFOb3RGb3VuZDpCb29sZWFuLF90YWdGaWx0ZXI6U3RyaW5nLF9jYXRlZ29yaWVzRG9tUmVhZHk6Qm9vbGVhbixfY2F0ZWdvcmllczp7dHlwZTpBcnJheSxjb21wdXRlZDoiX21ha2VDYXRlZ29yaWVzKF9ydW5Ub1RhZywgX3NlbGVjdGVkUnVucywgX3RhZ0ZpbHRlciwgX2NhdGVnb3JpZXNEb21SZWFkeSkifSxfcmVxdWVzdE1hbmFnZXI6e3R5cGU6T2JqZWN0LHZhbHVlOigpPT5uZXcgUGsuUmVxdWVzdE1hbmFnZXJ9fSxyZWFkeSgpe3RoaXMucmVsb2FkKCl9LHJlbG9hZCgpe3RoaXMuX2ZldGNoVGFncygpLnRoZW4oKCk9Pnt0aGlzLl9yZWxvYWRUZXh0cygpfSl9LF9zaG91bGRPcGVuKGEpe3JldHVybiAyPj1hfSxfZmV0Y2hUYWdzKCl7Y29uc3QgYT1Qay5nZXRSb3V0ZXIoKS5wbHVnaW5Sb3V0ZSgidGV4dCIsIi90YWdzIik7cmV0dXJuIHRoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3QoYSkudGhlbihjPT4Ke2lmKCFfLmlzRXF1YWwoYyx0aGlzLl9ydW5Ub1RhZykpe3ZhciBkPVBrLmdldFRhZ3MoYyk7dGhpcy5zZXQoIl9kYXRhTm90Rm91bmQiLDA9PT1kLmxlbmd0aCk7dGhpcy5zZXQoIl9ydW5Ub1RhZyIsYyk7dGhpcy5hc3luYygoKT0+e3RoaXMuc2V0KCJfY2F0ZWdvcmllc0RvbVJlYWR5IiwhMCl9KX19KX0sX3JlbG9hZFRleHRzKCl7dGhpcy5yb290LnF1ZXJ5U2VsZWN0b3JBbGwoInRmLXRleHQtbG9hZGVyIikuZm9yRWFjaChhPT57YS5yZWxvYWQoKX0pfSxfbWFrZUNhdGVnb3JpZXMoYSxjLGQpe3JldHVybiBRay5jYXRlZ29yaXplUnVuVGFnQ29tYmluYXRpb25zKGEsYyxkKX19KTsKPC9zY3JpcHQ+CjwvZG9tLW1vZHVsZT4KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCjxkb20tbW9kdWxlIGlkPSJ0Zi1wci1jdXJ2ZS1jYXJkIj4KICA8dGVtcGxhdGU+CiAgICA8dGYtY2FyZC1oZWFkaW5nIHRhZz0iW1t0YWddXSIgZGlzcGxheS1uYW1lPSJbW3RhZ01ldGFkYXRhLmRpc3BsYXlOYW1lXV0iIGRlc2NyaXB0aW9uPSJbW3RhZ01ldGFkYXRhLmRlc2NyaXB0aW9uXV0iPjwvdGYtY2FyZC1oZWFkaW5nPgoKICAgIDx0Zi1saW5lLWNoYXJ0LWRhdGEtbG9hZGVyIHgtY29tcG9uZW50cy1jcmVhdGlvbi1tZXRob2Q9IltbX3hDb21wb25lbnRzQ3JlYXRpb25NZXRob2RdXSIgeS12YWx1ZS1hY2Nlc3Nvcj0iW1tfeVZhbHVlQWNjZXNzb3JdXSIgdG9vbHRpcC1jb2x1bW5zPSJbW190b29sdGlwQ29sdW1uc11dIiBjb2xvci1zY2FsZT0iW1tfY29sb3JTY2FsZUZ1bmN0aW9uXV0iIGRlZmF1bHQteC1yYW5nZT0iW1tfZGVmYXVsdFhSYW5nZV1dIiBkZWZhdWx0LXktcmFuZ2U9IltbX2RlZmF1bHRZUmFuZ2VdXSIgc21vb3RoaW5nLWVuYWJsZWQ9IltbX3Ntb290aGluZ0VuYWJsZWRdXSIgcmVxdWVzdC1tYW5hZ2VyPSJbW3JlcXVlc3RNYW5hZ2VyXV0iIGRhdGEtdG8tbG9hZD0iW1tydW5zXV0iIGRhdGEtc2VyaWVzPSJbW3J1bnNdXSIgbG9hZC1rZXk9IltbdGFnXV0iIGdldC1kYXRhLWxvYWQtdXJsPSJbW19kYXRhVXJsXV0iIGxvYWQtZGF0YS1jYWxsYmFjaz0iW1tfY3JlYXRlUHJvY2Vzc0RhdGFGdW5jdGlvbigpXV0iIGFjdGl2ZT0iW1thY3RpdmVdXSI+PC90Zi1saW5lLWNoYXJ0LWRhdGEtbG9hZGVyPgoKICAgIDxkaXYgaWQ9ImJ1dHRvbnMtcm93Ij4KICAgICAgPHBhcGVyLWljb24tYnV0dG9uIHNlbGVjdGVkJD0iW1tfZXhwYW5kZWRdXSIgaWNvbj0iZnVsbHNjcmVlbiIgb24tdGFwPSJfdG9nZ2xlRXhwYW5kZWQiPjwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgIDxwYXBlci1pY29uLWJ1dHRvbiBpY29uPSJzZXR0aW5ncy1vdmVyc2NhbiIgb24tdGFwPSJfcmVzZXREb21haW4iIHRpdGxlPSJSZXNldCBheGVzIHRvIFswLCAxXS4iPjwvcGFwZXItaWNvbi1idXR0b24+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGlkPSJzdGVwLWxlZ2VuZCI+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX3J1bnNXaXRoU3RlcEF2YWlsYWJsZV1dIiBhcz0icnVuIj4KICAgICAgICA8ZGl2IGNsYXNzPSJsZWdlbmQtcm93Ij4KICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbG9yLWJveCIgc3R5bGU9ImJhY2tncm91bmQ6IFtbX2NvbXB1dGVSdW5Db2xvcihydW4pXV07Ij48L2Rpdj4KICAgICAgICAgIFtbcnVuXV0gaXMgYXQKICAgICAgICAgIDxzcGFuIGNsYXNzPSJzdGVwLWxhYmVsLXRleHQiPgogICAgICAgICAgICBzdGVwIFtbX2NvbXB1dGVDdXJyZW50U3RlcEZvclJ1bihfcnVuVG9QckN1cnZlRW50cnksIHJ1bildXSA8L3NwYW4+PGJyPgogICAgICAgICAgPHNwYW4gY2xhc3M9IndhbGwtdGltZS1sYWJlbC10ZXh0Ij4KICAgICAgICAgICAgKFtbX2NvbXB1dGVDdXJyZW50V2FsbFRpbWVGb3JSdW4oX3J1blRvUHJDdXJ2ZUVudHJ5LCBydW4pXV0pCiAgICAgICAgICA8L3NwYW4+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICA8L2Rpdj4KCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgd2lkdGg6IDUwMHB4OwogICAgICAgIG1hcmdpbi1yaWdodDogMTBweDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAyNXB4OwogICAgICB9CiAgICAgIDpob3N0KFtfZXhwYW5kZWRdKSB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KICAgICAgdGYtbGluZS1jaGFydC1kYXRhLWxvYWRlciB7CiAgICAgICAgaGVpZ2h0OiAzMDBweDsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KICAgICAgOmhvc3QoW19leHBhbmRlZF0pIHRmLWxpbmUtY2hhcnQtZGF0YS1sb2FkZXIgewogICAgICAgIGhlaWdodDogNjAwcHg7CiAgICAgIH0KICAgICAgI2J1dHRvbnMtcm93IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICAgIH0KICAgICAgI2J1dHRvbnMtcm93IHBhcGVyLWljb24tYnV0dG9uIHsKICAgICAgICBjb2xvcjogIzIxOTZmMzsKICAgICAgICBib3JkZXItcmFkaXVzOiAxMDAlOwogICAgICAgIHdpZHRoOiAzMnB4OwogICAgICAgIGhlaWdodDogMzJweDsKICAgICAgICBwYWRkaW5nOiA0cHg7CiAgICAgIH0KICAgICAgI2J1dHRvbnMtcm93IHBhcGVyLWljb24tYnV0dG9uW3NlbGVjdGVkXSB7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tdGItdWktbGlnaHQtYWNjZW50KTsKICAgICAgfQogICAgICAjc3RlcC1sZWdlbmQgewogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgZm9udC1zaXplOiAwLjhlbTsKICAgICAgICBtYXgtaGVpZ2h0OiAyMDBweDsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIHBhZGRpbmc6IDAgMCAwIDEwcHg7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KICAgICAgLmxlZ2VuZC1yb3cgewogICAgICAgIG1hcmdpbjogNXB4IDAgNXB4IDA7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KICAgICAgLmNvbG9yLWJveCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDFweDsKICAgICAgICB3aWR0aDogMTBweDsKICAgICAgICBoZWlnaHQ6IDEwcHg7CiAgICAgIH0KICAgICAgLnN0ZXAtbGFiZWwtdGV4dCB7CiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICAgIH0KICAgICAgLndhbGwtdGltZS1sYWJlbC10ZXh0IHsKICAgICAgICBjb2xvcjogIzg4ODsKICAgICAgICBmb250LXNpemU6IDAuOGVtOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CiAgPHNjcmlwdD4vL35+V0VCUEFUSH5+L3RmLXByLWN1cnZlLWRhc2hib2FyZC90Zi1wci1jdXJ2ZS1jYXJkLmh0bWwuanMKUG9seW1lcih7aXM6InRmLXByLWN1cnZlLWNhcmQiLHByb3BlcnRpZXM6e3J1bnM6QXJyYXksdGFnOlN0cmluZyx0YWdNZXRhZGF0YTpPYmplY3QscnVuVG9TdGVwQ2FwOk9iamVjdCxyZXF1ZXN0TWFuYWdlcjpPYmplY3QsYWN0aXZlOkJvb2xlYW4sX2V4cGFuZGVkOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEscmVmbGVjdFRvQXR0cmlidXRlOiEwfSxfcnVuVG9QckN1cnZlRW50cnk6e3R5cGU6T2JqZWN0LHZhbHVlOigpPT4oe30pfSxfcHJldmlvdXNSdW5Ub1ByQ3VydmVFbnRyeTp7dHlwZTpPYmplY3QsdmFsdWU6KCk9Pih7fSl9LF9ydW5zV2l0aFN0ZXBBdmFpbGFibGU6e3R5cGU6QXJyYXksY29tcHV0ZWQ6Il9jb21wdXRlUnVuc1dpdGhTdGVwQXZhaWxhYmxlKHJ1bnMsIF9ydW5Ub1ByQ3VydmVFbnRyeSkifSxfc2V0T2ZSZWxldmFudFJ1bnM6e3R5cGU6T2JqZWN0LGNvbXB1dGVkOiJfY29tcHV0ZVNldE9mUmVsZXZhbnRSdW5zKF9ydW5zV2l0aFN0ZXBBdmFpbGFibGUpIn0sX3J1blRvRGF0YU92ZXJUaW1lOk9iamVjdCwKX2NvbG9yU2NhbGVGdW5jdGlvbjp7dHlwZTpPYmplY3QsdmFsdWU6KCk9Pih7c2NhbGU6WmwucnVuc0NvbG9yU2NhbGV9KX0sX2NhbmNlbGxlcjp7dHlwZTpPYmplY3QsdmFsdWU6KCk9Pm5ldyBQay5DYW5jZWxsZXJ9LF9hdHRhY2hlZDpCb29sZWFuLF94Q29tcG9uZW50c0NyZWF0aW9uTWV0aG9kOnt0eXBlOk9iamVjdCxyZWFkT25seTohMCx2YWx1ZTooKT0+KCk9Pntjb25zdCBhPW5ldyBQbG90dGFibGUuU2NhbGVzLkxpbmVhcjtyZXR1cm57c2NhbGU6YSxheGlzOm5ldyBQbG90dGFibGUuQXhlcy5OdW1lcmljKGEsImJvdHRvbSIpLGFjY2Vzc29yOmM9PmMucmVjYWxsfX19LF95VmFsdWVBY2Nlc3Nvcjp7dHlwZTpPYmplY3QscmVhZE9ubHk6ITAsdmFsdWU6KCk9PmE9PmEucHJlY2lzaW9ufSxfdG9vbHRpcENvbHVtbnM6e3R5cGU6QXJyYXkscmVhZE9ubHk6ITAsdmFsdWU6KCk9Pntjb25zdCBhPWJtLm11bHRpc2NhbGVGb3JtYXR0ZXIoYm0uWV9UT09MVElQX0ZPUk1BVFRFUl9QUkVDSVNJT04pLApjPWQ9PmlzTmFOKGQpPyJOYU4iOmEoZCk7cmV0dXJuW3t0aXRsZToiUnVuIixldmFsdWF0ZTpkPT5kLmRhdGFzZXQubWV0YWRhdGEoKS5uYW1lfSx7dGl0bGU6IlRocmVzaG9sZCIsZXZhbHVhdGU6ZD0+YyhkLmRhdHVtLnRocmVzaG9sZHMpfSx7dGl0bGU6IlByZWNpc2lvbiIsZXZhbHVhdGU6ZD0+YyhkLmRhdHVtLnByZWNpc2lvbil9LHt0aXRsZToiUmVjYWxsIixldmFsdWF0ZTpkPT5jKGQuZGF0dW0ucmVjYWxsKX0se3RpdGxlOiJUUCIsZXZhbHVhdGU6ZD0+ZC5kYXR1bS50cnVlX3Bvc2l0aXZlc30se3RpdGxlOiJGUCIsZXZhbHVhdGU6ZD0+ZC5kYXR1bS5mYWxzZV9wb3NpdGl2ZXN9LHt0aXRsZToiVE4iLGV2YWx1YXRlOmQ9PmQuZGF0dW0udHJ1ZV9uZWdhdGl2ZXN9LHt0aXRsZToiRk4iLGV2YWx1YXRlOmQ9PmQuZGF0dW0uZmFsc2VfbmVnYXRpdmVzfV19fSxfc2VyaWVzRGF0YUZpZWxkczp7dHlwZTpBcnJheSx2YWx1ZToidGhyZXNob2xkcyBwcmVjaXNpb24gcmVjYWxsIHRydWVfcG9zaXRpdmVzIGZhbHNlX3Bvc2l0aXZlcyB0cnVlX25lZ2F0aXZlcyBmYWxzZV9uZWdhdGl2ZXMiLnNwbGl0KCIgIiksCnJlYWRPbmx5OiEwfSxfZGVmYXVsdFhSYW5nZTp7dHlwZTpBcnJheSx2YWx1ZTpbLS4wNSwxLjA1XSxyZWFkT25seTohMH0sX2RlZmF1bHRZUmFuZ2U6e3R5cGU6QXJyYXksdmFsdWU6Wy0uMDUsMS4wNV0scmVhZE9ubHk6ITB9LF9kYXRhVXJsOnt0eXBlOkZ1bmN0aW9uLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIGE9Pntjb25zdCBjPXRoaXMudGFnO3JldHVybiBQay5hZGRQYXJhbXMoUGsuZ2V0Um91dGVyKCkucGx1Z2luUm91dGUoInByX2N1cnZlcyIsIi9wcl9jdXJ2ZXMiKSx7dGFnOmMscnVuOmF9KX19fSxfc21vb3RoaW5nRW5hYmxlZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExLHJlYWRPbmx5OiEwfX0sb2JzZXJ2ZXJzOlsicmVsb2FkKHJ1bnMsIHRhZykiLCJfc2V0Q2hhcnREYXRhKF9ydW5Ub1ByQ3VydmVFbnRyeSwgX3ByZXZpb3VzUnVuVG9QckN1cnZlRW50cnksIF9zZXRPZlJlbGV2YW50UnVucykiLCJfdXBkYXRlUnVuVG9QckN1cnZlRW50cnkoX3J1blRvRGF0YU92ZXJUaW1lLCBydW5Ub1N0ZXBDYXApIl0sCl9jcmVhdGVQcm9jZXNzRGF0YUZ1bmN0aW9uKCl7cmV0dXJuKGEsYyxkKT0+e3RoaXMuc2V0KCJfcnVuVG9EYXRhT3ZlclRpbWUiLE9iamVjdC5hc3NpZ24oe30sdGhpcy5fcnVuVG9EYXRhT3ZlclRpbWUsZCkpfX0sX2NvbXB1dGVSdW5Db2xvcihhKXtyZXR1cm4gdGhpcy5fY29sb3JTY2FsZUZ1bmN0aW9uLnNjYWxlKGEpfSxhdHRhY2hlZCgpe3RoaXMuX2F0dGFjaGVkPSEwO3RoaXMucmVsb2FkKCl9LHJlbG9hZCgpe3RoaXMuX2F0dGFjaGVkJiYoMD09PXRoaXMucnVucy5sZW5ndGg/dGhpcy5zZXQoIl9ydW5Ub0RhdGFPdmVyVGltZSIse30pOnRoaXMuJCQoInRmLWxpbmUtY2hhcnQtZGF0YS1sb2FkZXIiKS5yZWxvYWQoKSl9LF9zZXRDaGFydERhdGEoYSxjLGQpe18uZm9yT3duKGEsKGYsZyk9Pntjb25zdCBsPWNbZ107bCYmYVtnXS5zdGVwPT09bC5zdGVwfHwoZFtnXT90aGlzLl91cGRhdGVTZXJpZXNEYXRhRm9yUnVuKGcsZik6dGhpcy5fY2xlYXJTZXJpZXNEYXRhKGcpKX0pfSwKX3VwZGF0ZVNlcmllc0RhdGFGb3JSdW4oYSxjKXtjb25zdCBkPV8ucmVkdWNlKHRoaXMuX3Nlcmllc0RhdGFGaWVsZHMsKGcsbCk9PntnW2xdPWNbbF0uc2xpY2UoKS5yZXZlcnNlKCk7cmV0dXJuIGd9LHt9KSxmPUFycmF5KGRbdGhpcy5fc2VyaWVzRGF0YUZpZWxkc1swXV0ubGVuZ3RoKTtmb3IobGV0IGc9MDtnPGYubGVuZ3RoO2crKylmW2ddPV8ubWFwVmFsdWVzKGQsbD0+bFtnXSk7dGhpcy4kJCgidGYtbGluZS1jaGFydC1kYXRhLWxvYWRlciIpLnNldFNlcmllc0RhdGEoYSxmKX0sX2NsZWFyU2VyaWVzRGF0YShhKXt0aGlzLiQkKCJ0Zi1saW5lLWNoYXJ0LWRhdGEtbG9hZGVyIikuc2V0U2VyaWVzRGF0YShhLFtdKX0sX3VwZGF0ZVJ1blRvUHJDdXJ2ZUVudHJ5KGEsYyl7Y29uc3QgZD17fTtfLmZvck93bihhLChmLGcpPT57ZiYmZi5sZW5ndGgmJihkW2ddPXRoaXMuX2NvbXB1dGVFbnRyeUNsb3Nlc3RPckVxdWFsVG9TdGVwQ2FwKGNbZ10sZikpfSk7dGhpcy5zZXQoIl9wcmV2aW91c1J1blRvUHJDdXJ2ZUVudHJ5IiwKdGhpcy5fcnVuVG9QckN1cnZlRW50cnkpO3RoaXMuc2V0KCJfcnVuVG9QckN1cnZlRW50cnkiLGQpfSxfY29tcHV0ZUVudHJ5Q2xvc2VzdE9yRXF1YWxUb1N0ZXBDYXAoYSxjKXthPU1hdGgubWluKF8uc29ydGVkSW5kZXgoYy5tYXAoZD0+ZC5zdGVwKSxhKSxjLmxlbmd0aC0xKTtyZXR1cm4gY1thXX0sX2NvbXB1dGVSdW5zV2l0aFN0ZXBBdmFpbGFibGUoYSxjKXtyZXR1cm4gXy5maWx0ZXIoYSxkPT5jW2RdKS5zb3J0KCl9LF9jb21wdXRlU2V0T2ZSZWxldmFudFJ1bnMoYSl7Y29uc3QgYz17fTtfLmZvckVhY2goYSxkPT57Y1tkXT0hMH0pO3JldHVybiBjfSxfY29tcHV0ZUN1cnJlbnRTdGVwRm9yUnVuKGEsYyl7cmV0dXJuKGE9YVtjXSk/YS5zdGVwOm51bGx9LF9jb21wdXRlQ3VycmVudFdhbGxUaW1lRm9yUnVuKGEsYyl7cmV0dXJuKGE9YVtjXSk/KG5ldyBEYXRlKDFFMyphLndhbGxfdGltZSkpLnRvU3RyaW5nKCk6bnVsbH0sX3RvZ2dsZUV4cGFuZGVkKCl7dGhpcy5zZXQoIl9leHBhbmRlZCIsCiF0aGlzLl9leHBhbmRlZCk7dGhpcy5yZWRyYXcoKX0sX3Jlc2V0RG9tYWluKCl7dGhpcy4kJCgidGYtbGluZS1jaGFydC1kYXRhLWxvYWRlciIpLnJlc2V0RG9tYWluKCl9LHJlZHJhdygpe3RoaXMuJCQoInRmLWxpbmUtY2hhcnQtZGF0YS1sb2FkZXIiKS5yZWRyYXcoKX19KTsKPC9zY3JpcHQ+CjwvZG9tLW1vZHVsZT4KCgoKCgoKCgo8ZG9tLW1vZHVsZSBpZD0idGYtcHItY3VydmUtc3RlcHMtc2VsZWN0b3IiPgogIDx0ZW1wbGF0ZT4KICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX3J1bnNXaXRoU2xpZGVyc11dIiBhcz0icnVuIj4KICAgICAgPGRpdiBjbGFzcz0icnVuLXdpZGdldCI+CiAgICAgICAgPGRpdiBjbGFzcz0icnVuLWRpc3BsYXktY29udGFpbmVyIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InJ1bi1jb2xvci1ib3giIHN0eWxlPSJiYWNrZ3JvdW5kOltbX2NvbXB1dGVDb2xvckZvclJ1bihydW4pXV07Ij48L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9InJ1bi10ZXh0Ij4KICAgICAgICAgICAgW1tydW5dXQogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic3RlcC1kaXNwbGF5LWNvbnRhaW5lciI+CiAgICAgICAgICBbW19jb21wdXRlVGltZVRleHRGb3JSdW4ocnVuVG9BdmFpbGFibGVUaW1lRW50cmllcywgX3J1blRvU3RlcEluZGV4LAogICAgICAgICAgcnVuLCB0aW1lRGlzcGxheVR5cGUpXV0KICAgICAgICA8L2Rpdj4KICAgICAgICA8cGFwZXItc2xpZGVyIGRhdGEtcnVuJD0iW1tydW5dXSIgc3RlcD0iMSIgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG1heD0iW1tfY29tcHV0ZU1heFN0ZXBJbmRleEZvclJ1bihydW5Ub0F2YWlsYWJsZVRpbWVFbnRyaWVzLCBydW4pXV0iIHZhbHVlPSJbW19nZXRTdGVwKF9ydW5Ub1N0ZXBJbmRleCwgcnVuKV1dIiBvbi1pbW1lZGlhdGUtdmFsdWUtY2hhbmdlZD0iX3NsaWRlclZhbHVlQ2hhbmdlZCI+PC9wYXBlci1zbGlkZXI+CiAgICAgIDwvZGl2PgogICAgPC90ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgLnJ1bi13aWRnZXQgewogICAgICAgIG1hcmdpbjogMTBweCAwIDAgMDsKICAgICAgfQogICAgICBwYXBlci1zbGlkZXIgewogICAgICAgIG1hcmdpbjogLThweCAwIDAgLTE1cHg7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KICAgICAgLnN0ZXAtZGlzcGxheS1jb250YWluZXIgewogICAgICAgIGZvbnQtc2l6ZTogMC45ZW07CiAgICAgICAgbWFyZ2luOiAwIDE1cHggMCAwOwogICAgICB9CiAgICAgIC5ydW4tdGV4dCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICB9CiAgICAgIC5ydW4tY29sb3ItYm94IHsKICAgICAgICB3aWR0aDogMTJweDsKICAgICAgICBoZWlnaHQ6IDEycHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgogIDxzY3JpcHQ+Ly9+fldFQlBBVEh+fi90Zi1wci1jdXJ2ZS1kYXNoYm9hcmQvdGYtcHItY3VydmUtc3RlcHMtc2VsZWN0b3IuaHRtbC5qcwpQb2x5bWVyKHtpczoidGYtcHItY3VydmUtc3RlcHMtc2VsZWN0b3IiLHByb3BlcnRpZXM6e3J1bnM6QXJyYXkscnVuVG9BdmFpbGFibGVUaW1lRW50cmllczpPYmplY3QscnVuVG9TdGVwOnt0eXBlOk9iamVjdCxub3RpZnk6ITAsY29tcHV0ZWQ6Il9jb21wdXRlUnVuVG9TdGVwKHJ1blRvQXZhaWxhYmxlVGltZUVudHJpZXMsIF9ydW5Ub1N0ZXBJbmRleCkifSx0aW1lRGlzcGxheVR5cGU6U3RyaW5nLF9ydW5Ub1N0ZXBJbmRleDp7dHlwZTpPYmplY3QsdmFsdWU6KCk9Pih7fSl9LF9ydW5zV2l0aFNsaWRlcnM6e3R5cGU6QXJyYXksY29tcHV0ZWQ6Il9jb21wdXRlUnVuc1dpdGhTbGlkZXJzKHJ1bnMsIHJ1blRvQXZhaWxhYmxlVGltZUVudHJpZXMpIn19LG9ic2VydmVyczpbIl91cGRhdGVTdGVwc0Zvck5ld1J1bnMocnVuVG9BdmFpbGFibGVUaW1lRW50cmllcykiXSxfY29tcHV0ZUNvbG9yRm9yUnVuKGEpe3JldHVybiBabC5ydW5zQ29sb3JTY2FsZShhKX0sX2NvbXB1dGVUaW1lVGV4dEZvclJ1bihhLApjLGQsZil7Yz1jW2RdO2lmKCFfLmlzTnVtYmVyKGMpKXJldHVybiIiO2E9YVtkXTtpZighYSlyZXR1cm4iIjthPWFbY11bZl07aWYoInN0ZXAiPT09ZilyZXR1cm5gc3RlcCAke2F9YDtpZigicmVsYXRpdmUiPT09ZilyZXR1cm4gMT5hP2AkeygxRTMqYSkudG9GaXhlZCgyKX0gbXNgOmAke2EudG9GaXhlZCgyKX0gc2A7aWYoIndhbGxfdGltZSI9PT1mKXJldHVybihuZXcgRGF0ZSgxRTMqYSkpLnRvU3RyaW5nKCk7dGhyb3cgRXJyb3IoYFRoZSBkaXNwbGF5IHR5cGUgb2YgJHtmfSBpcyBub3QgcmVjb2duaXplZC5gKTt9LF9zbGlkZXJWYWx1ZUNoYW5nZWQoYSl7Y29uc3QgYz1hLnRhcmdldC5kYXRhc2V0LnJ1bixkPWEudGFyZ2V0LmltbWVkaWF0ZVZhbHVlLGY9T2JqZWN0LmFzc2lnbih7fSx0aGlzLl9ydW5Ub1N0ZXBJbmRleCk7aXNOYU4oZCk/ZGVsZXRlIGZbY106ZltjXT1hLnRhcmdldC5pbW1lZGlhdGVWYWx1ZTt0aGlzLl9ydW5Ub1N0ZXBJbmRleD1mfSxfY29tcHV0ZU1heFN0ZXBJbmRleEZvclJ1bihhLApjKXtyZXR1cm4oYT1hW2NdKSYmYS5sZW5ndGg/YS5sZW5ndGgtMTowfSxfdXBkYXRlU3RlcHNGb3JOZXdSdW5zKGEpe2NvbnN0IGM9T2JqZWN0LmFzc2lnbih7fSx0aGlzLl9ydW5Ub1N0ZXBJbmRleCk7Xy5mb3JPd24oYSwoZCxmKT0+e18uaXNOdW1iZXIoY1tmXSl8fChjW2ZdPWQubGVuZ3RoLTEpfSk7dGhpcy5fcnVuVG9TdGVwSW5kZXg9Y30sX2dldFN0ZXAoYSxjKXtyZXR1cm4gdGhpcy5fcnVuVG9TdGVwSW5kZXg/dGhpcy5fcnVuVG9TdGVwSW5kZXhbY106MH0sX2NvbXB1dGVSdW5Ub1N0ZXAoYSxjKXtjb25zdCBkPXt9O18uZm9yT3duKGMsKGYsZyk9Pntjb25zdCBsPWFbZ107bCYmKGRbZ109bFtmXS5zdGVwKX0pO3JldHVybiBkfSxfY29tcHV0ZVJ1bnNXaXRoU2xpZGVycyhhLGMpe3JldHVybiBhLmZpbHRlcihkPT5jW2RdKX19KTsKPC9zY3JpcHQ+CjwvZG9tLW1vZHVsZT4KCgoKPGRvbS1tb2R1bGUgaWQ9InRmLXByLWN1cnZlLWRhc2hib2FyZCI+CiAgPHRlbXBsYXRlPgogICAgPHRmLWRhc2hib2FyZC1sYXlvdXQ+CiAgICAgIDxkaXYgY2xhc3M9InNpZGViYXIiIHNsb3Q9InNpZGViYXIiPgogICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiI+CiAgICAgICAgICA8dGYtb3B0aW9uLXNlbGVjdG9yIGlkPSJ0aW1lLXR5cGUtc2VsZWN0b3IiIG5hbWU9IlRpbWUgRGlzcGxheSBUeXBlIiBzZWxlY3RlZC1pZD0ie3tfdGltZURpc3BsYXlUeXBlfX0iPgogICAgICAgICAgICA8cGFwZXItYnV0dG9uIGlkPSJzdGVwIj5zdGVwPC9wYXBlci1idXR0b24+PHBhcGVyLWJ1dHRvbiBpZD0icmVsYXRpdmUiPnJlbGF0aXZlPC9wYXBlci1idXR0b24+PHBhcGVyLWJ1dHRvbiBpZD0id2FsbF90aW1lIj53YWxsPC9wYXBlci1idXR0b24+CiAgICAgICAgICA8L3RmLW9wdGlvbi1zZWxlY3Rvcj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX3J1blRvQXZhaWxhYmxlVGltZUVudHJpZXNdXSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24iIGlkPSJzdGVwcy1zZWxlY3Rvci1jb250YWluZXIiPgogICAgICAgICAgICA8dGYtcHItY3VydmUtc3RlcHMtc2VsZWN0b3IgcnVucz0iW1tfcmVsZXZhbnRTZWxlY3RlZFJ1bnNdXSIgcnVuLXRvLXN0ZXA9Int7X3J1blRvU3RlcH19IiBydW4tdG8tYXZhaWxhYmxlLXRpbWUtZW50cmllcz0iW1tfcnVuVG9BdmFpbGFibGVUaW1lRW50cmllc11dIiB0aW1lLWRpc3BsYXktdHlwZT0iW1tfdGltZURpc3BsYXlUeXBlXV0iPjwvdGYtcHItY3VydmUtc3RlcHMtc2VsZWN0b3I+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiI+CiAgICAgICAgICA8dGYtcnVucy1zZWxlY3RvciBzZWxlY3RlZC1ydW5zPSJ7e19zZWxlY3RlZFJ1bnN9fSI+CiAgICAgICAgICA8L3RmLXJ1bnMtc2VsZWN0b3I+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjZW50ZXIiIHNsb3Q9ImNlbnRlciI+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJuby1kYXRhLXdhcm5pbmciPgogICAgICAgICAgICA8aDM+Tm8gcHJlY2lzaW9u4oCTcmVjYWxsIGN1cnZlIGRhdGEgd2FzIGZvdW5kLjwvaDM+CiAgICAgICAgICAgIDxwPlByb2JhYmxlIGNhdXNlczoKICAgICAgICAgICAgPHVsPgogICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgIFlvdSBoYXZlbuKAmXQgd3JpdHRlbiBhbnkgcHJlY2lzaW9u4oCTcmVjYWxsIGRhdGEgdG8geW91ciBldmVudAogICAgICAgICAgICAgICAgZmlsZXMuCiAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICBUZW5zb3JCb2FyZCBjYW7igJl0IGZpbmQgeW91ciBldmVudCBmaWxlcy4KICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICA8L3VsPgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICBJZiB5b3XigJlyZSBuZXcgdG8gdXNpbmcgVGVuc29yQm9hcmQsIGFuZCB3YW50IHRvIGZpbmQgb3V0IGhvdyB0bwogICAgICAgICAgICAgIGFkZCBkYXRhIGFuZCBzZXQgdXAgeW91ciBldmVudCBmaWxlcywgY2hlY2sgb3V0IHRoZQogICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCI+UkVBRE1FPC9hPgogICAgICAgICAgICAgIGFuZCBwZXJoYXBzIHRoZQogICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL2dldF9zdGFydGVkL3N1bW1hcmllc19hbmRfdGVuc29yYm9hcmQiPlRlbnNvckJvYXJkIHR1dG9yaWFsPC9hPi4KICAgICAgICAgICAgCgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICBJZiB5b3UgdGhpbmsgVGVuc29yQm9hcmQgaXMgY29uZmlndXJlZCBwcm9wZXJseSwgcGxlYXNlIHNlZQogICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCNteS10ZW5zb3Jib2FyZC1pc250LXNob3dpbmctYW55LWRhdGEtd2hhdHMtd3JvbmciPnRoZSBzZWN0aW9uIG9mIHRoZSBSRUFETUUgZGV2b3RlZCB0byBtaXNzaW5nIGRhdGEgcHJvYmxlbXM8L2E+CiAgICAgICAgICAgICAgYW5kIGNvbnNpZGVyIGZpbGluZyBhbiBpc3N1ZSBvbiBHaXRIdWIuCiAgICAgICAgICAgIAogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIV9kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8dGYtdGFnLWZpbHRlcmVyIHRhZy1maWx0ZXI9Int7X3RhZ0ZpbHRlcn19Ij48L3RmLXRhZy1maWx0ZXJlcj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX2NhdGVnb3JpZXNdXSIgYXM9ImNhdGVnb3J5Ij4KICAgICAgICAgICAgPHRmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3IGNhdGVnb3J5PSJbW2NhdGVnb3J5XV0iIGluaXRpYWwtb3BlbmVkPSJbW19zaG91bGRPcGVuKGluZGV4KV1dIj4KICAgICAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8dGYtcHItY3VydmUtY2FyZCBhY3RpdmU9IltbYWN0aXZlXV0iIHJ1bnM9IltbaXRlbS5ydW5zXV0iIHRhZz0iW1tpdGVtLnRhZ11dIiB0YWctbWV0YWRhdGE9IltbX3RhZ01ldGFkYXRhKF9ydW5Ub1RhZ0luZm8sIGl0ZW0ucnVucywgaXRlbS50YWcpXV0iIHJlcXVlc3QtbWFuYWdlcj0iW1tfcmVxdWVzdE1hbmFnZXJdXSIgcnVuLXRvLXN0ZXAtY2FwPSJbW19ydW5Ub1N0ZXBdXSI+PC90Zi1wci1jdXJ2ZS1jYXJkPgogICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDwvdGYtY2F0ZWdvcnktcGFnaW5hdGVkLXZpZXc+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDwvZGl2PgogICAgPC90Zi1kYXNoYm9hcmQtbGF5b3V0PgoKICAgIDxzdHlsZSBpbmNsdWRlPSJkYXNoYm9hcmQtc3R5bGUiPjwvc3R5bGU+CiAgICA8c3R5bGU+CiAgICAgIC5uby1kYXRhLXdhcm5pbmcgewogICAgICAgIG1heC13aWR0aDogNTQwcHg7CiAgICAgICAgbWFyZ2luOiA4MHB4IGF1dG8gMCBhdXRvOwogICAgICB9CiAgICAgIC8qKiBEbyBub3QgbGV0IHRoZSBzdGVwcyBzZWxlY3RvciBvY2NsdWRlIHRoZSBydW4gc2VsZWN0b3IuICovCiAgICAgICNzdGVwcy1zZWxlY3Rvci1jb250YWluZXIgewogICAgICAgIG1heC1oZWlnaHQ6IDQwJTsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CgogIDxzY3JpcHQ+Ly9+fldFQlBBVEh+fi90Zi1wci1jdXJ2ZS1kYXNoYm9hcmQvdGYtcHItY3VydmUtZGFzaGJvYXJkLmh0bWwuanMKUG9seW1lcih7aXM6InRmLXByLWN1cnZlLWRhc2hib2FyZCIscHJvcGVydGllczp7X3RpbWVEaXNwbGF5VHlwZTp7dHlwZTpTdHJpbmcsdmFsdWU6InN0ZXAifSxfc2VsZWN0ZWRSdW5zOnt0eXBlOkFycmF5LHZhbHVlOigpPT5bXX0sX3J1blRvVGFnSW5mbzp7dHlwZTpPYmplY3QsdmFsdWU6KCk9Pih7fSl9LF9ydW5Ub0F2YWlsYWJsZVRpbWVFbnRyaWVzOnt0eXBlOk9iamVjdCx2YWx1ZTp7fX0sX3JlbGV2YW50U2VsZWN0ZWRSdW5zOnt0eXBlOkFycmF5LGNvbXB1dGVkOiJfY29tcHV0ZVJlbGV2YW50U2VsZWN0ZWRSdW5zKF9zZWxlY3RlZFJ1bnMsIF9ydW5Ub1RhZ0luZm8pIn0sX3J1bnNXaXRoUHJDdXJ2ZURhdGE6QXJyYXksX3J1blRvU3RlcDp7dHlwZTpPYmplY3Qsbm90aWZ5OiEwfSxfZGF0YU5vdEZvdW5kOkJvb2xlYW4sX3RhZ0ZpbHRlcjpTdHJpbmcsX2NhdGVnb3JpZXNEb21SZWFkeTpCb29sZWFuLF9jYXRlZ29yaWVzOnt0eXBlOkFycmF5LGNvbXB1dGVkOiJfbWFrZUNhdGVnb3JpZXMoX3J1blRvVGFnSW5mbywgX3NlbGVjdGVkUnVucywgX3RhZ0ZpbHRlciwgX2NhdGVnb3JpZXNEb21SZWFkeSkifSwKX3JlcXVlc3RNYW5hZ2VyOnt0eXBlOk9iamVjdCx2YWx1ZTooKT0+bmV3IFBrLlJlcXVlc3RNYW5hZ2VyfSxfc3RlcDp7dHlwZTpOdW1iZXIsdmFsdWU6MCxub3RpZnk6ITB9fSxyZWFkeSgpe3RoaXMucmVsb2FkKCl9LHJlbG9hZCgpe1Byb21pc2UuYWxsKFt0aGlzLl9mZXRjaFRhZ3MoKSx0aGlzLl9mZXRjaFRpbWVFbnRyaWVzUGVyUnVuKCldKS50aGVuKCgpPT57dGhpcy5fcmVsb2FkQ2FyZHMoKX0pfSxfc2hvdWxkT3BlbihhKXtyZXR1cm4gMj49YX0sX2ZldGNoVGFncygpe2NvbnN0IGE9UGsuZ2V0Um91dGVyKCkucGx1Z2luUm91dGUoInByX2N1cnZlcyIsIi90YWdzIik7cmV0dXJuIHRoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3QoYSkudGhlbihjPT57aWYoIV8uaXNFcXVhbChjLHRoaXMuX3J1blRvVGFnSW5mbykpe3ZhciBkPV8ubWFwVmFsdWVzKGMsZj0+Xy5rZXlzKGYpKTtkPVBrLmdldFRhZ3MoZCk7dGhpcy5zZXQoIl9kYXRhTm90Rm91bmQiLDA9PT1kLmxlbmd0aCk7CnRoaXMuc2V0KCJfcnVuVG9UYWdJbmZvIixjKTt0aGlzLmFzeW5jKCgpPT57dGhpcy5zZXQoIl9jYXRlZ29yaWVzRG9tUmVhZHkiLCEwKX0pfX0pfSxfZmV0Y2hUaW1lRW50cmllc1BlclJ1bigpe2NvbnN0IGE9UGsuZ2V0Um91dGVyKCkucGx1Z2luUm91dGUoInByX2N1cnZlcyIsIi9hdmFpbGFibGVfdGltZV9lbnRyaWVzIik7cmV0dXJuIHRoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3QoYSkudGhlbihjPT57Xy5mb3JPd24oYyxkPT57Xy5mb3JFYWNoKGQsZj0+e2YucmVsYXRpdmU9Zi53YWxsX3RpbWUtZFswXS53YWxsX3RpbWV9KX0pO3RoaXMuc2V0KCJfcnVuVG9BdmFpbGFibGVUaW1lRW50cmllcyIsYyk7Yz1fLmtleXMoYykuc2xpY2UoKS5zb3J0KCk7Xy5pc0VxdWFsKGMsdGhpcy5fcnVuc1dpdGhQckN1cnZlRGF0YSl8fHRoaXMuc2V0KCJfcnVuc1dpdGhQckN1cnZlRGF0YSIsYyl9KX0sX3JlbG9hZENhcmRzKCl7Xy5mb3JFYWNoKHRoaXMucm9vdC5xdWVyeVNlbGVjdG9yQWxsKCJ0Zi1wci1jdXJ2ZS1jYXJkIiksCmE9PnthLnJlbG9hZCgpfSl9LF9tYWtlQ2F0ZWdvcmllcyhhLGMsZCl7YT1fLm1hcFZhbHVlcyhhLGY9Pk9iamVjdC5rZXlzKGYpKTtyZXR1cm4gUWsuY2F0ZWdvcml6ZVRhZ3MoYSxjLGQpfSxfY29tcHV0ZUNvbG9yRm9yUnVuKGEpe3JldHVybiBabC5ydW5zQ29sb3JTY2FsZShhKX0sX2NvbXB1dGVSZWxldmFudFNlbGVjdGVkUnVucyhhLGMpe3JldHVybiBhLmZpbHRlcihkPT5jW2RdKX0sX3RhZ01ldGFkYXRhKGEsYyxkKXtjb25zdCBmPXt9O2MuZm9yRWFjaChnPT57ZltnXT1hW2ddW2RdfSk7Yz1kLnJlcGxhY2UoL1wvcHJfY3VydmVzJC8sIiIpO3JldHVybiBhbS5hZ2dyZWdhdGVUYWdJbmZvKGYsYyl9fSk7Cjwvc2NyaXB0Pgo8L2RvbS1tb2R1bGU+CgoKCgoKCgoKCgoKCgoKCjxkb20tbW9kdWxlIGlkPSJwYXBlci1zcGlubmVyIj4KICA8dGVtcGxhdGUgc3RyaXAtd2hpdGVzcGFjZT4KICAgIDxzdHlsZSBpbmNsdWRlPSJwYXBlci1zcGlubmVyLXN0eWxlcyI+PC9zdHlsZT4KCiAgICA8ZGl2IGlkPSJzcGlubmVyQ29udGFpbmVyIiBjbGFzcy1uYW1lPSJbW19fY29tcHV0ZUNvbnRhaW5lckNsYXNzZXMoYWN0aXZlLCBfX2Nvb2xpbmdEb3duKV1dIiBvbi1hbmltYXRpb25lbmQ9Il9fcmVzZXQiIG9uLXdlYmtpdC1hbmltYXRpb24tZW5kPSJfX3Jlc2V0Ij4KICAgICAgPGRpdiBjbGFzcz0ic3Bpbm5lci1sYXllciBsYXllci0xIj4KICAgICAgICA8ZGl2IGNsYXNzPSJjaXJjbGUtY2xpcHBlciBsZWZ0Ij48L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJjaXJjbGUtY2xpcHBlciByaWdodCI+PC9kaXY+CiAgICAgIDwvZGl2PgoKICAgICAgPGRpdiBjbGFzcz0ic3Bpbm5lci1sYXllciBsYXllci0yIj4KICAgICAgICA8ZGl2IGNsYXNzPSJjaXJjbGUtY2xpcHBlciBsZWZ0Ij48L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJjaXJjbGUtY2xpcHBlciByaWdodCI+PC9kaXY+CiAgICAgIDwvZGl2PgoKICAgICAgPGRpdiBjbGFzcz0ic3Bpbm5lci1sYXllciBsYXllci0zIj4KICAgICAgICA8ZGl2IGNsYXNzPSJjaXJjbGUtY2xpcHBlciBsZWZ0Ij48L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJjaXJjbGUtY2xpcHBlciByaWdodCI+PC9kaXY+CiAgICAgIDwvZGl2PgoKICAgICAgPGRpdiBjbGFzcz0ic3Bpbm5lci1sYXllciBsYXllci00Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJjaXJjbGUtY2xpcHBlciBsZWZ0Ij48L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJjaXJjbGUtY2xpcHBlciByaWdodCI+PC9kaXY+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgPC90ZW1wbGF0ZT4KCiAgPHNjcmlwdD4vL35+V0VCUEFUSH5+L3BhcGVyLXNwaW5uZXIvcGFwZXItc3Bpbm5lci5odG1sLmpzClBvbHltZXIoe2lzOiJwYXBlci1zcGlubmVyIixiZWhhdmlvcnM6W1BvbHltZXIuUGFwZXJTcGlubmVyQmVoYXZpb3JdfSk7Cjwvc2NyaXB0Pgo8L2RvbS1tb2R1bGU+CgoKCgoKCgoKPGRvbS1tb2R1bGUgaWQ9ImlucHV0LXBpcGVsaW5lLWFuYWx5emVyIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGUgaW5jbHVkZT0icGxvdHRhYmxlLXN0eWxlIj48L3N0eWxlPgogICAgPHN0eWxlPgogICAgICAuc2VjdGlvbi1oZWFkZXIgewogICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICAgIGZvbnQtc2l6ZTogMjAwJTsKICAgICAgfQogICAgICAuc3ViLXNlY3Rpb24taGVhZGVyIHsKICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKICAgICAgICBmb250LXdlaWdodDogYm9sZDsKICAgICAgICBmb250LXNpemU6IDE1MCU7CiAgICAgIH0KICAgICAgI3N1bW1hcnktaG9zdCB7CiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICAgIH0KICAgICAgLmhpZ2hsaWdodGVkLXRleHQgewogICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICAgIGZvbnQtc2l6ZTogMTIwJTsKICAgICAgfQogICAgICAuc3RkZGV2LXRleHQgewogICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICAgICAgICBvcGFjaXR5OiAwLjc7CiAgICAgIH0KICAgICAgLmxlZnQtcGFuZSB7CiAgICAgICAgd2lkdGg6IDMwJTsKICAgICAgfQogICAgICAucmlnaHQtcGFuZSB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAzMDBweDsKICAgICAgfQogICAgICAudGFibGUtc3R5bGUgewogICAgICAgIHRhYmxlLWxheW91dDogZml4ZWQ7CiAgICAgICAgd2lkdGg6IDk1JTsKICAgICAgfQogICAgICAucGVyZm9ybWFuY2UtdGFibGUgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CiAgICAgIC54LWF4aXMtdGl0bGUgewogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICB0ZXh0LXRyYW5zZm9ybTogY2FwaXRhbGl6ZTsKICAgICAgfQogICAgICAueS1heGlzLXRpdGxlIHsKICAgICAgICB3cml0aW5nLW1vZGU6IGJ0LXJsOwogICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDI3MGRlZyk7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgdGV4dC10cmFuc2Zvcm06IGNhcGl0YWxpemU7CiAgICAgIH0KICAgICAgI3JlY29tbWVuZGF0aW9uX2RldGFpbHMgewogICAgICAgIGNvbG9yOiBncmVlbjsKICAgICAgfQogICAgICAjcmVjb21tZW5kYXRpb25fZGV0YWlscyBhIHsKICAgICAgICBjb2xvcjogI2ZmMzNjYzsKICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKICAgICAgfQogICAgICAjc3VtbWFyeV9jb25jbHVzaW9uIHsKICAgICAgICBmb250LXdlaWdodDogYm9sZGVyOwogICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICAgICAgICBjb2xvcjogdmFyKC0tc3VtbWFyeS1jb2xvciwgZ3JlZW4pOwogICAgICB9CiAgICAgICNzdW1tYXJ5X25leHRzdGVwIHsKICAgICAgICBmb250LXdlaWdodDogYm9sZGVyOwogICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICAgICAgICBjb2xvcjogZ3JlZW47CiAgICAgIH0KICAgICAgI3JlY29tbWVuZGF0aW9uX3RpdGxlIHsKICAgICAgICBmb250LXdlaWdodDogYm9sZGVyOwogICAgICAgIGZvbnQtc3R5bGU6IG5vcm1hbDsKICAgICAgICBjb2xvcjogYmxhY2s7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8ZGl2PgogICAgICA8ZGl2IGlkPSJzZWN0aW9uX3N1bW1hcnkiPgogICAgICAgIDxkaXYgaWQ9InRpdGxlX3N1bW1hcnkiPgogICAgICAgICAgPHAgY2xhc3M9InNlY3Rpb24taGVhZGVyIj4KICAgICAgICAgICAgU2VjdGlvbiAxOiBTdW1tYXJ5IG9mIGlucHV0LXBpcGVsaW5lIGFuYWx5c2lzCiAgICAgICAgICAKICAgICAgICA8L2Rpdj4KICAgICAgICA8cD48c3BhbiBpZD0ic3VtbWFyeV9jb25jbHVzaW9uIj5bW19zdW1tYXJ5X2NvbmNsdXNpb25dXTwvc3Bhbj4KICAgICAgICA8cD4KICAgICAgICAgIDxzcGFuIGlkPSJyZWNvbW1lbmRhdGlvbl90aXRsZSI+UmVjb21tZW5kYXRpb24gZm9yIG5leHQgc3RlcDogPC9zcGFuPjxzcGFuIGlkPSJzdW1tYXJ5X25leHRzdGVwIj5bW19zdW1tYXJ5X25leHRzdGVwXV08L3NwYW4+CiAgICAgICAgCiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGlkPSJzZWN0aW9uX2RldmljZV9zaWRlX2FuYWx5c2lzIiBoaWRkZW49IltbIV9zaG93X2RldmljZV9zaWRlX2FuYWx5c2lzXV0iPgogICAgICAgIDxkaXYgaWQ9InRpdGxlX2RldmljZV9zaWRlX2FuYWx5c2lzIj4KICAgICAgICAgIDxwIGNsYXNzPSJzZWN0aW9uLWhlYWRlciI+U2VjdGlvbiAyOiBEZXZpY2Utc2lkZSBhbmFseXNpcyBkZXRhaWxzCiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBpZD0ic2VjdGlvbl9kZXZpY2Vfc3RlcF90aW1lIj4KICAgICAgICAgIDxkaXYgaWQ9InRpdGxlX2RldmljZV9zdGVwX3RpbWUiPgogICAgICAgICAgICA8cCBjbGFzcz0ic3ViLXNlY3Rpb24taGVhZGVyIj5TZWN0aW9uIDIuMTogRGV2aWNlIHN0ZXAgdGltZQogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8dGFibGUgY2xhc3M9InRhYmxlLXN0eWxlIj4KICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgIDx0ZCBjbGFzcz0ibGVmdC1wYW5lIj4KICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJoaWdobGlnaHRlZC10ZXh0Ij4KICAgICAgICAgICAgICAgICAgICBEZXZpY2Ugc3RlcC10aW1lIHN0YXRpc3RpY3MgKGluIG1zKQogICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgICAgIDxzcGFuPjxiPkF2ZXJhZ2U6PC9iPiA8L3NwYW4+CiAgICAgICAgICAgICAgICAgIDxzcGFuPltbX3N0ZXB0aW1lX21zX2F2ZXJhZ2VdXSBtcyA8L3NwYW4+CiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzdGRkZXYtdGV4dCI+KM+DID0gW1tfc3RlcHRpbWVfbXNfc3RkZGV2XV0gbXMpPC9zcGFuPgogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICA8cD4KICAgICAgICAgICAgICAgICAgPHNwYW4+PGI+UmFuZ2U6PC9iPiA8L3NwYW4+CiAgICAgICAgICAgICAgICAgIDxzcGFuPltbX3N0ZXB0aW1lX21zX21pbmltdW1dXSAtIFtbX3N0ZXB0aW1lX21zX21heGltdW1dXQogICAgICAgICAgICAgICAgICAgIG1zPC9zcGFuPgogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICA8dGQ+PGRpdiBjbGFzcz0ieS1heGlzLXRpdGxlIj5taWxsaXNlY29uZHM8L2Rpdj48L3RkPgogICAgICAgICAgICAgIDx0ZCBjbGFzcz0icmlnaHQtcGFuZSI+CiAgICAgICAgICAgICAgICA8dnotbGluZS1jaGFydDIgaWQ9ImRldmljZV9zdGVwX2NoYXJ0IiBzdHlsZT0iaGVpZ2h0OjMwMHB4OyI+PC92ei1saW5lLWNoYXJ0Mj4KICAgICAgICAgICAgICAgIDxkaXY+PHAgY2xhc3M9IngtYXhpcy10aXRsZSI+dHJhaW5pbmcgc3RlcCBudW1iZXI8L2Rpdj4KICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICA8L3RyPgogICAgICAgICAgPC90YWJsZT4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGlkPSJzZWN0aW9uX2RldmljZV9pbmZlZWRkZXFfdGltZSI+CiAgICAgICAgICA8ZGl2IGlkPSJ0aXRsZV9kZXZpY2VfaW5mZWVkZGVxX3RpbWUiPgogICAgICAgICAgICA8cCBjbGFzcz0ic3ViLXNlY3Rpb24taGVhZGVyIj4KICAgICAgICAgICAgICA8c3Bhbj5TZWN0aW9uIDIuMjogUmFuZ2Ugb2YgZGV2aWNlIHRpbWUgd2FpdGluZyBmb3IgaW5wdXQgZGF0YQogICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgICA8c3Bhbj48aSBzdHlsZT0ib3BhY2l0eTowLjUiPmFjcm9zcyBjb3JlczwvaT4gYXQgZWFjaCBzdGVwIDwvc3Bhbj4KICAgICAgICAgICAgCiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDx0YWJsZSBjbGFzcz0idGFibGUtc3R5bGUiPgogICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgPHRkIGNsYXNzPSJsZWZ0LXBhbmUiPgogICAgICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJoaWdobGlnaHRlZC10ZXh0Ij4lIG9mIGRldmljZSBzdGVwIHRpbWUgd2FpdGluZyBmb3IgaW5wdXQgZGF0YTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgPHNwYW4+CiAgICAgICAgICAgICAgICAgICAgKGF2ZXJhZ2Ugb3ZlciB0aGUgbWF4aW11bSB3YWl0aW5nIHRpbWUgYWNyb3NzIGNvcmVzIGF0IGVhY2gKICAgICAgICAgICAgICAgICAgICBzdGVwKTwvc3Bhbj4KICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgICAgIDxzcGFuPjxiPkF2ZXJhZ2U6PC9iPiA8L3NwYW4+CiAgICAgICAgICAgICAgICAgIDxzcGFuPltbX2luZmVlZF9wZXJjZW50X2F2ZXJhZ2VdXSAlIDwvc3Bhbj4KICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InN0ZGRldi10ZXh0Ij4oz4MgPSBbW19pbmZlZWRfcGVyY2VudF9zdGRkZXZdXSAlKTwvc3Bhbj4KICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgICAgIDxzcGFuPjxiPlJhbmdlOjwvYj4gPC9zcGFuPgogICAgICAgICAgICAgICAgICA8c3Bhbj5bW19pbmZlZWRfcGVyY2VudF9taW5pbXVtXV0gLSBbW19pbmZlZWRfcGVyY2VudF9tYXhpbXVtXV0KICAgICAgICAgICAgICAgICAgICAlPC9zcGFuPgogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ5LWF4aXMtdGl0bGUiPjxwPiUgb2YgZGV2aWNlIHN0ZXAgdGltZTwvZGl2PgogICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgPHRkIGNsYXNzPSJyaWdodC1wYW5lIj4KICAgICAgICAgICAgICAgIDx2ei1saW5lLWNoYXJ0MiBpZD0iZGV2aWNlX2luZmVlZF9jaGFydCIgc3R5bGU9ImhlaWdodDozMDBweDsiPjwvdnotbGluZS1jaGFydDI+CiAgICAgICAgICAgICAgICA8ZGl2PjxwIGNsYXNzPSJ4LWF4aXMtdGl0bGUiPnRyYWluaW5nIHN0ZXAgbnVtYmVyPC9kaXY+CiAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgPC90cj4KICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGlkPSJzZWN0aW9uX2hvc3Rfc2lkZV9hbmFseXNpcyI+CiAgICAgICAgPGRpdiBpZD0idGl0bGVfaG9zdF9zaWRlX2FuYWx5c2lzIj4KICAgICAgICAgIDxwIGNsYXNzPSJzZWN0aW9uLWhlYWRlciI+U2VjdGlvbiAzOiBIb3N0LXNpZGUgYW5hbHlzaXMgZGV0YWlscwogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgaGlkZGVuJD0iW1shX3Nob3dfaG9zdF9zaWRlX2NoYXJ0XV0iPgogICAgICAgICAgPGRpdiBzdHlsZT0iaGVpZ2h0OjMwMHB4OyIgaWQ9Imhvc3Rfc2lkZV9jaGFydCI+PC9kaXY+CiAgICAgICAgICA8cD4KICAgICAgICAgICAgPHNwYW4+PGI+V2hhdCBjYW4gYmUgZG9uZSB0byByZWR1Y2UgYWJvdmUgY29tcG9uZW50cyBvZiB0aGUgaG9zdCBpbnB1dAogICAgICAgICAgICAgICAgdGltZTo8L2I+PC9zcGFuPgogICAgICAgICAgCiAgICAgICAgICA8ZGl2IGlkPSJyZWNvbW1lbmRhdGlvbl9kZXRhaWxzIj48L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGhpZGRlbiQ9IltbX3Nob3dfaG9zdF9zaWRlX2NoYXJ0XV0iPgogICAgICAgICAgSG9zdCBzaWRlIGFuYWx5c2lzIGNhbiBub3QgYmUgZG9uZSB3aXRob3V0IGluc3RydW1lbnRhdGlvbi4KICAgICAgICA8L2Rpdj4KICAgICAgICA8cD4KICAgICAgICAgIENsaWNrIHRoZSAiU2hvdyIgYnV0dG9uIGJlbG93IHRvIHNlZSB0aGUgc291cmNlIGRhdGEgb2YgdGhlIGJyZWFrZG93bi4KICAgICAgICAKICAgICAgICA8YnV0dG9uIG9uLWNsaWNrPSJvbkNsaWNrIj5bW190b2dnbGVfYnV0dG9uX3RleHRdXTwvYnV0dG9uPgogICAgICAgIDx0YWJsZSBjbGFzcz0icGVyZm9ybWFuY2UtdGFibGUiIGhpZGRlbiQ9IltbIV9zaG93X2hvc3Rfc2lkZV90YWJsZV1dIj4KICAgICAgICAgIDx0aGVhZD4KICAgICAgICAgICAgPHRyPjx0aD5JbnB1dCBPcDwvdGg+CiAgICAgICAgICAgIDx0aD5Db3VudDwvdGg+CiAgICAgICAgICAgIDx0aD5Ub3RhbCBUaW1lIChpbiBtcyk8L3RoPgogICAgICAgICAgICA8dGg+VG90YWwgVGltZSAoYXMgJSBvZiB0b3RhbCBpbnB1dC1wcm9jZXNzaW5nIHRpbWUpPC90aD4KICAgICAgICAgICAgPHRoPlRvdGFsIFNlbGYgVGltZSAoaW4gbXMpPC90aD4KICAgICAgICAgICAgPHRoPlRvdGFsIFNlbGYgVGltZSAoYXMgJSBvZiB0b3RhbCBpbnB1dC1wcm9jZXNzaW5nIHRpbWUpPC90aD4KICAgICAgICAgICAgPHRoPkNhdGVnb3J5PC90aD4KICAgICAgICAgIDwvdGhlYWQ+CiAgICAgICAgICA8dGJvZHkgaWQ9Imhvc3Rfc2lkZV90YWJsZV9jb250ZW50Ij48L3Rib2R5PgogICAgICAgIDwvdGFibGU+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgPC90ZW1wbGF0ZT4KCiAgPHNjcmlwdD4vL35+V0VCUEFUSH5+L3RmLWlucHV0LXBpcGVsaW5lL2lucHV0LXBpcGVsaW5lLWFuYWx5emVyLmh0bWwuanMKUG9seW1lcih7aXM6ImlucHV0LXBpcGVsaW5lLWFuYWx5emVyIixwcm9wZXJ0aWVzOntfZGF0YTp7dHlwZTpPYmplY3Qsb2JzZXJ2ZXI6Il91cGRhdGVWaWV3In0sX3Nob3dfZGV2aWNlX3NpZGVfYW5hbHlzaXM6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMCxub3RpZnk6ITB9LF9zaG93X2hvc3Rfc2lkZV9jaGFydDp7dHlwZTpCb29sZWFuLHZhbHVlOiEwLG5vdGlmeTohMH0sX3Nob3dfaG9zdF9zaWRlX3RhYmxlOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEsbm90aWZ5OiEwfSxfdG9nZ2xlX2J1dHRvbl90ZXh0Ont0eXBlOlN0cmluZyxjb21wdXRlZDoiX2dldFRvZ2dsZUJ1dHRvblRleHQoX3Nob3dfaG9zdF9zaWRlX3RhYmxlKSJ9LF9kZXZpY2VKc29uOnt0eXBlOlN0cmluZyxub3RpZnk6ITB9LF9ob3N0SnNvbjp7dHlwZTpTdHJpbmcsbm90aWZ5OiEwfSxfcmVjb21tZW5kYXRpb25Kc29uOnt0eXBlOlN0cmluZyxub3RpZnk6ITB9LF9hY3RpdmU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxub3RpZnk6ITAsCm9ic2VydmVyOiJfb25BY3RpdmVDaGFuZ2VkIn0sX3N1bW1hcnlfY29uY2x1c2lvbjp7dHlwZTpTdHJpbmcsbm90aWZ5OiEwfSxfc3VtbWFyeV9uZXh0c3RlcDp7dHlwZTpTdHJpbmcsbm90aWZ5OiEwfSxfaW5mZWVkX3BlcmNlbnRfYXZlcmFnZTp7dHlwZTpTdHJpbmcsbm90aWZ5OiEwfSxfaW5mZWVkX3BlcmNlbnRfc3RkZGV2Ont0eXBlOlN0cmluZyxub3RpZnk6ITB9LF9pbmZlZWRfcGVyY2VudF9taW5pbXVtOnt0eXBlOlN0cmluZyxub3RpZnk6ITB9LF9pbmZlZWRfcGVyY2VudF9tYXhpbXVtOnt0eXBlOlN0cmluZyxub3RpZnk6ITB9LF9zdGVwdGltZV9tc19hdmVyYWdlOnt0eXBlOlN0cmluZyxub3RpZnk6ITB9LF9zdGVwdGltZV9tc19zdGRkZXY6e3R5cGU6U3RyaW5nLG5vdGlmeTohMH0sX3N0ZXB0aW1lX21zX21pbmltdW06e3R5cGU6U3RyaW5nLG5vdGlmeTohMH0sX3N0ZXB0aW1lX21zX21heGltdW06e3R5cGU6U3RyaW5nLG5vdGlmeTohMH19LG9ic2VydmVyczpbIl9zaG93RGV2aWNlU3RlcENoYXJ0KF9kZXZpY2VKc29uKSIsCiJfc2hvd0RldmljZUluZmVlZENoYXJ0KF9kZXZpY2VKc29uKSIsIl9zaG93SG9zdENoYXJ0KF9ob3N0SnNvbikiLCJfc2hvd0hvc3RUYWJsZShfaG9zdEpzb24pIiwiX21ha2VSZWNvbW1lbmRhdGlvbnMoX3JlY29tbWVuZGF0aW9uSnNvbikiXSxvbkNsaWNrOmZ1bmN0aW9uKCl7dGhpcy5zZXQoIl9zaG93X2hvc3Rfc2lkZV90YWJsZSIsIXRoaXMuX3Nob3dfaG9zdF9zaWRlX3RhYmxlKX0sX29uQWN0aXZlQ2hhbmdlZDpmdW5jdGlvbihhKXthfHwodGhpcy5fc2hvd19ob3N0X3NpZGVfdGFibGU9dGhpcy5fc2hvd19ob3N0X3NpZGVfY2hhcnQ9dGhpcy5fc2hvd19kZXZpY2Vfc2lkZV9hbmFseXNpcz0hMSl9LF9nZXRUb2dnbGVCdXR0b25UZXh0OmZ1bmN0aW9uKGEpe3JldHVybihhPyJIaWRlIjoiU2hvdyIpKyIgSW5wdXQgT3AgU3RhdGlzdGljcyJ9LF91c1RvTXM6ZnVuY3Rpb24oYSl7cmV0dXJuIE1hdGguYWJzKE51bWJlcihhKSkvMUUzfSxfdXBkYXRlVmlldzpmdW5jdGlvbigpe2lmKHRoaXMuX2RhdGEmJgp0aGlzLl9hY3RpdmUpe3ZhciBhPXRoaXMuX2RhdGFbMF07dGhpcy5fZGV2aWNlSnNvbj1hO3RoaXMuX2hvc3RKc29uPXRoaXMuX2RhdGFbMl07dGhpcy5fcmVjb21tZW5kYXRpb25Kc29uPXRoaXMuX2RhdGFbM107dGhpcy5fc3VtbWFyeV9jb25jbHVzaW9uPWEucC5zdW1tYXJ5X2NvbmNsdXNpb247dGhpcy5fc3VtbWFyeV9uZXh0c3RlcD1hLnAuc3VtbWFyeV9uZXh0c3RlcDt0aGlzLl9pbmZlZWRfcGVyY2VudF9hdmVyYWdlPWEucC5pbmZlZWRfcGVyY2VudF9hdmVyYWdlO3RoaXMuX2luZmVlZF9wZXJjZW50X3N0ZGRldj1hLnAuaW5mZWVkX3BlcmNlbnRfc3RhbmRhcmRfZGV2aWF0aW9uO3RoaXMuX2luZmVlZF9wZXJjZW50X21pbmltdW09YS5wLmluZmVlZF9wZXJjZW50X21pbmltdW07dGhpcy5faW5mZWVkX3BlcmNlbnRfbWF4aW11bT1hLnAuaW5mZWVkX3BlcmNlbnRfbWF4aW11bTt0aGlzLl9zdGVwdGltZV9tc19hdmVyYWdlPWEucC5zdGVwdGltZV9tc19hdmVyYWdlO3RoaXMuX3N0ZXB0aW1lX21zX3N0ZGRldj0KYS5wLnN0ZXB0aW1lX21zX3N0YW5kYXJkX2RldmlhdGlvbjt0aGlzLl9zdGVwdGltZV9tc19taW5pbXVtPWEucC5zdGVwdGltZV9tc19taW5pbXVtO3RoaXMuX3N0ZXB0aW1lX21zX21heGltdW09YS5wLnN0ZXB0aW1lX21zX21heGltdW07dGhpcy5fc3VtbWFyeV9jb25jbHVzaW9uLmluY2x1ZGVzKCJISUdITFkiKT90aGlzLmN1c3RvbVN0eWxlWyItLXN1bW1hcnktY29sb3IiXT0icmVkIjp0aGlzLl9zdW1tYXJ5X2NvbmNsdXNpb24uaW5jbHVkZXMoIk1PREVSQVRFIikmJih0aGlzLmN1c3RvbVN0eWxlWyItLXN1bW1hcnktY29sb3IiXT0ib3JhbmdlIik7dGhpcy51cGRhdGVTdHlsZXMoKX19LF9zaG93RGV2aWNlU3RlcENoYXJ0OmZ1bmN0aW9uKGEpe2lmKGEmJjAhPWEucm93cy5sZW5ndGgmJnRoaXMuX2FjdGl2ZSl7dGhpcy5fc2hvd19kZXZpY2Vfc2lkZV9hbmFseXNpcz0hMDt2YXIgYz1bXSxkPVtdLGY9MCxnPS0xO2Eucm93cy5mb3JFYWNoKGZ1bmN0aW9uKGwpe2c9MDxnPysrZzoKTnVtYmVyKGwuY1swXS52KTtjLnB1c2goe3NjYWxhcjpsLmNbMV0udixzdGVwOmcsdHB1X3N0ZXA6TnVtYmVyKGwuY1swXS52KSxsb3dfd2F0ZXJtYXJrOjB9KTtkLnB1c2goe3NjYWxhcjpsLmNbMV0uditsLmNbMl0udixzdGVwOmcsbG93X3dhdGVybWFyazpsLmNbMV0udn0pO2Y9TWF0aC5tYXgoZixsLmNbMV0uditsLmNbMl0udil9KTtpZihhPXRoaXMuJC5kZXZpY2Vfc3RlcF9jaGFydClhLnNldFZpc2libGVTZXJpZXMoWyJkZXZpY2Ugc3RlcCB0aW1lIiwiY29tcHV0ZSB0aW1lIl0pLGEuc2V0U2VyaWVzRGF0YSgiZGV2aWNlIHN0ZXAgdGltZSIsZCksYS5zZXRTZXJpZXNEYXRhKCJjb21wdXRlIHRpbWUiLGMpLGEuZGVmYXVsdFlSYW5nZT1bMCwxLjEqZl0sYS5zbW9vdGhpbmdFbmFibGVkPSExLGEudG9vbHRpcENvbHVtbnM9W3t0aXRsZToiTmFtZSIsZXZhbHVhdGU6bD0+bC5kYXRhc2V0Lm1ldGFkYXRhKCkubmFtZX0se3RpdGxlOiJUaW1lKG1zKSIsZXZhbHVhdGU6bD0+bC5kYXR1bS5zY2FsYXIudG9GaXhlZCgyKX0sCnt0aXRsZToiU3RlcCIsZXZhbHVhdGU6bD0+bC5kYXR1bS5zdGVwfV0sYS5maWxsQXJlYT17aGlnaGVyQWNjZXNzb3I6bD0+bC5zY2FsYXIsbG93ZXJBY2Nlc3NvcjpsPT5sLmxvd193YXRlcm1hcmt9LGEueEF4aXNGb3JtYXR0ZXI9ZDMuZm9ybWF0KCJkIil9ZWxzZSB0aGlzLl9zaG93X2RldmljZV9zaWRlX2FuYWx5c2lzPSExfSxfc2hvd0RldmljZUluZmVlZENoYXJ0OmZ1bmN0aW9uKGEpe2lmKGEmJjAhPWEucm93cy5sZW5ndGgpe3ZhciBjPVtdLGQ9LTE7YS5yb3dzLmZvckVhY2goZnVuY3Rpb24oZil7ZD0wPGQ/KytkOk51bWJlcihmLmNbMF0udik7Yy5wdXNoKHtzdGVwOmQsdHB1X3N0ZXA6TnVtYmVyKGYuY1swXS52KSxzY2FsYXI6Zi5jWzRdLnYsbWluOmYuY1s1XS52LG1heDpmLmNbNl0udn0pfSk7aWYoYT10aGlzLiQuZGV2aWNlX2luZmVlZF9jaGFydClhLnNldFZpc2libGVTZXJpZXMoWyJpbnB1dCB0aW1lJSJdKSxhLnNldFNlcmllc0RhdGEoImlucHV0IHRpbWUlIixjKSwKYS50b29sdGlwQ29sdW1ucz1be3RpdGxlOiJOYW1lIixldmFsdWF0ZTpmPT5mLmRhdGFzZXQubWV0YWRhdGEoKS5uYW1lfSx7dGl0bGU6IlN0ZXAiLGV2YWx1YXRlOmY9PmYuZGF0dW0udHB1X3N0ZXB9LHt0aXRsZToiQXZlcmFnZSglKSIsZXZhbHVhdGU6Zj0+Zi5kYXR1bS5zY2FsYXIudG9GaXhlZCg0KSsiJSJ9LHt0aXRsZToiTWluKCUpIixldmFsdWF0ZTpmPT5mLmRhdHVtLm1pbi50b0ZpeGVkKDQpKyIlIn0se3RpdGxlOiJNYXgoJSkiLGV2YWx1YXRlOmY9PmYuZGF0dW0ubWF4LnRvRml4ZWQoNCkrIiUifV0sYS5maWxsQXJlYT17aGlnaGVyQWNjZXNzb3I6Zj0+Zi5tYXgsbG93ZXJBY2Nlc3NvcjpmPT5mLm1pbn0sYS54QXhpc0Zvcm1hdHRlcj1kMy5mb3JtYXQoImQiKX1lbHNlIHRoaXMuX3Nob3dfZGV2aWNlX3NpZGVfYW5hbHlzaXM9ITF9LF9zaG93SG9zdENoYXJ0OmZ1bmN0aW9uKGEpe2lmKGEpe3ZhciBjPXRoaXMuX3VzVG9NcyhhLnAudW5jbGFzc2lmaWVkX25vbmVxdWV1ZV91cyksCmQ9dGhpcy5fdXNUb01zKGEucC5kZW1hbmRlZF9maWxlX3JlYWRfdXMpLGY9dGhpcy5fdXNUb01zKGEucC5hZHZhbmNlZF9maWxlX3JlYWRfdXMpLGc9dGhpcy5fdXNUb01zKGEucC5wcmVwcm9jZXNzaW5nX3VzKTthPXRoaXMuX3VzVG9NcyhhLnAuZW5xdWV1ZV91cyk7dmFyIGw9YytkK2YrZythO3RoaXMuX3Nob3dfaG9zdF9zaWRlX2NoYXJ0PTA8bDswPGwmJihmPVt7TmFtZToiT3RoZXIgZGF0YSByZWFkaW5nIG9yIHByb2Nlc3NpbmciLFRvdGFsOmMvbCoxMDB9LHtOYW1lOiJSZWFkaW5nIGRhdGEgZnJvbSBmaWxlcyBvbiBkZW1hbmQiLFRvdGFsOmQvbCoxMDB9LHtOYW1lOiJSZWFkaW5nIGRhdGEgZnJvbSBmaWxlcyBpbiBhZHZhbmNlIFtpbmNsdWRpbmcgY2FjaGluZywgcHJlZmV0Y2hpbmcsIGludGVybGVhdmluZ10iLFRvdGFsOmYvbCoxMDB9LHtOYW1lOiJEYXRhIHByZXByb2Nlc3NpbmciLFRvdGFsOmcvbCoxMDB9LHtOYW1lOiJFbnF1ZXVpbmcgZGF0YSB0byBiZSB0cmFuc2ZlcnJlZCB0byBkZXZpY2UiLApUb3RhbDphL2wqMTAwfV0sZz1uZXcgUGxvdHRhYmxlLlNjYWxlcy5Db2xvcixkPW5ldyBQbG90dGFibGUuQ29tcG9uZW50cy5MZWdlbmQoZyksYz1kMy5zZWxlY3QodGhpcy4kLmhvc3Rfc2lkZV9jaGFydCksZj0obmV3IFBsb3R0YWJsZS5QbG90cy5QaWUpLmF0dHIoImZpbGwiLGZ1bmN0aW9uKGspe3JldHVybiBrLk5hbWV9LGcpLmFkZERhdGFzZXQobmV3IFBsb3R0YWJsZS5EYXRhc2V0KGYpKS5zZWN0b3JWYWx1ZShmdW5jdGlvbihrKXtyZXR1cm4gay5Ub3RhbH0pLmxhYmVsc0VuYWJsZWQoITApLmxhYmVsRm9ybWF0dGVyKGZ1bmN0aW9uKGspe3JldHVybiBOdW1iZXIoaykudG9GaXhlZCgyKSsiJSJ9KSxkPW5ldyBQbG90dGFibGUuQ29tcG9uZW50cy5UYWJsZShbW2YsZF1dKSxjLnNlbGVjdCgiKiIpLnJlbW92ZSgpLGQucmVuZGVyVG8oYykpfX0sX3Nob3dIb3N0VGFibGU6ZnVuY3Rpb24oYSl7aWYoYSl7dmFyIGM9dGhpcy4kLmhvc3Rfc2lkZV90YWJsZV9jb250ZW50O2MuaW5uZXJIVE1MPQoiIjt0aGlzLl9zaG93X2hvc3Rfc2lkZV90YWJsZT0hMTswIT1hLnJvd3MubGVuZ3RoJiZhLnJvd3MuZm9yRWFjaChmdW5jdGlvbihkKXtsZXQgZj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ciIpO1BvbHltZXIuZG9tKGMpLmFwcGVuZENoaWxkKGYpO2xldCBnPVtdO2cucHVzaChkLmNbMF0udik7Zy5wdXNoKGQuY1sxXS52KTtnLnB1c2goZC5jWzJdLnYudG9GaXhlZCgyKSk7Zy5wdXNoKCgxMDAqZC5jWzNdLnYpLnRvRml4ZWQoMikrIiUiKTtnLnB1c2goZC5jWzRdLnYudG9GaXhlZCgyKSk7Zy5wdXNoKCgxMDAqZC5jWzVdLnYpLnRvRml4ZWQoMikrIiUiKTtnLnB1c2goZC5jWzZdLnYpO2cuZm9yRWFjaChmdW5jdGlvbihsKXtsZXQgaz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpO1BvbHltZXIuZG9tKGYpLmFwcGVuZENoaWxkKGspO1BvbHltZXIuZG9tKGspLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGwpKX0pfSl9fSxfbWFrZVJlY29tbWVuZGF0aW9uczpmdW5jdGlvbihhKXtpZihhKXt2YXIgYz0KIiI7YS5yb3dzLmZvckVhY2goZnVuY3Rpb24oZCl7Yys9Ilx4M2NsaVx4M2UiK2QuY1swXS52KyJceDNjL2xpXHgzZSJ9KTt0aGlzLiQucmVjb21tZW5kYXRpb25fZGV0YWlscy5pbm5lckhUTUw9Y319LGF0dGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fYWN0aXZlPSEwO3RoaXMuX3VwZGF0ZVZpZXcoKX0sZGV0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl9hY3RpdmU9ITF9fSk7Cjwvc2NyaXB0Pgo8L2RvbS1tb2R1bGU+CgoKCgoKCgoKPGRvbS1tb2R1bGUgaWQ9Imlyb24taW1hZ2UiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfQoKICAgICAgI2Jhc2VVUklBbmNob3IgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KCiAgICAgICNzaXplZEltZ0RpdiB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMHB4OwogICAgICAgIHJpZ2h0OiAwcHg7CiAgICAgICAgYm90dG9tOiAwcHg7CiAgICAgICAgbGVmdDogMHB4OwoKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICB9CgogICAgICAjaW1nIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICB3aWR0aDogdmFyKC0taXJvbi1pbWFnZS13aWR0aCwgYXV0byk7CiAgICAgICAgaGVpZ2h0OiB2YXIoLS1pcm9uLWltYWdlLWhlaWdodCwgYXV0byk7CiAgICAgIH0KCiAgICAgIDpob3N0KFtzaXppbmddKSAjc2l6ZWRJbWdEaXYgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CgogICAgICA6aG9zdChbc2l6aW5nXSkgI2ltZyB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQoKICAgICAgI3BsYWNlaG9sZGVyIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwcHg7CiAgICAgICAgcmlnaHQ6IDBweDsKICAgICAgICBib3R0b206IDBweDsKICAgICAgICBsZWZ0OiAwcHg7CgogICAgICAgIGJhY2tncm91bmQtY29sb3I6IGluaGVyaXQ7CiAgICAgICAgb3BhY2l0eTogMTsKCiAgICAgICAgQGFwcGx5IC0taXJvbi1pbWFnZS1wbGFjZWhvbGRlcjsKICAgICAgfQoKICAgICAgI3BsYWNlaG9sZGVyLmZhZGVkLW91dCB7CiAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjVzIGxpbmVhcjsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxhIGlkPSJiYXNlVVJJQW5jaG9yIiBocmVmPSIjIj48L2E+CiAgICA8ZGl2IGlkPSJzaXplZEltZ0RpdiIgcm9sZT0iaW1nIiBoaWRkZW4kPSJbW19jb21wdXRlSW1nRGl2SGlkZGVuKHNpemluZyldXSIgYXJpYS1oaWRkZW4kPSJbW19jb21wdXRlSW1nRGl2QVJJQUhpZGRlbihhbHQpXV0iIGFyaWEtbGFiZWwkPSJbW19jb21wdXRlSW1nRGl2QVJJQUxhYmVsKGFsdCwgc3JjKV1dIj48L2Rpdj4KICAgIDxpbWcgaWQ9ImltZyIgYWx0JD0iW1thbHRdXSIgaGlkZGVuJD0iW1tfY29tcHV0ZUltZ0hpZGRlbihzaXppbmcpXV0iIGNyb3Nzb3JpZ2luJD0iW1tjcm9zc29yaWdpbl1dIiBvbi1sb2FkPSJfaW1nT25Mb2FkIiBvbi1lcnJvcj0iX2ltZ09uRXJyb3IiPgogICAgPGRpdiBpZD0icGxhY2Vob2xkZXIiIGhpZGRlbiQ9IltbX2NvbXB1dGVQbGFjZWhvbGRlckhpZGRlbihwcmVsb2FkLCBmYWRlLCBsb2FkaW5nLCBsb2FkZWQpXV0iIGNsYXNzJD0iW1tfY29tcHV0ZVBsYWNlaG9sZGVyQ2xhc3NOYW1lKHByZWxvYWQsIGZhZGUsIGxvYWRpbmcsIGxvYWRlZCldXSI+PC9kaXY+CiAgPC90ZW1wbGF0ZT4KCiAgPHNjcmlwdD4vL35+V0VCUEFUSH5+L2lyb24taW1hZ2UvaXJvbi1pbWFnZS5odG1sLmpzClBvbHltZXIoe2lzOiJpcm9uLWltYWdlIixwcm9wZXJ0aWVzOntzcmM6e3R5cGU6U3RyaW5nLHZhbHVlOiIifSxhbHQ6e3R5cGU6U3RyaW5nLHZhbHVlOm51bGx9LGNyb3Nzb3JpZ2luOnt0eXBlOlN0cmluZyx2YWx1ZTpudWxsfSxwcmV2ZW50TG9hZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxzaXppbmc6e3R5cGU6U3RyaW5nLHZhbHVlOm51bGwscmVmbGVjdFRvQXR0cmlidXRlOiEwfSxwb3NpdGlvbjp7dHlwZTpTdHJpbmcsdmFsdWU6ImNlbnRlciJ9LHByZWxvYWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0scGxhY2Vob2xkZXI6e3R5cGU6U3RyaW5nLHZhbHVlOm51bGwsb2JzZXJ2ZXI6Il9wbGFjZWhvbGRlckNoYW5nZWQifSxmYWRlOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGxvYWRlZDp7bm90aWZ5OiEwLHJlYWRPbmx5OiEwLHR5cGU6Qm9vbGVhbix2YWx1ZTohMX0sbG9hZGluZzp7bm90aWZ5OiEwLHJlYWRPbmx5OiEwLHR5cGU6Qm9vbGVhbix2YWx1ZTohMX0sZXJyb3I6e25vdGlmeTohMCwKcmVhZE9ubHk6ITAsdHlwZTpCb29sZWFuLHZhbHVlOiExfSx3aWR0aDp7b2JzZXJ2ZXI6Il93aWR0aENoYW5nZWQiLHR5cGU6TnVtYmVyLHZhbHVlOm51bGx9LGhlaWdodDp7b2JzZXJ2ZXI6Il9oZWlnaHRDaGFuZ2VkIix0eXBlOk51bWJlcix2YWx1ZTpudWxsfX0sb2JzZXJ2ZXJzOlsiX3RyYW5zZm9ybUNoYW5nZWQoc2l6aW5nLCBwb3NpdGlvbikiLCJfbG9hZFN0YXRlT2JzZXJ2ZXIoc3JjLCBwcmV2ZW50TG9hZCkiXSxjcmVhdGVkOmZ1bmN0aW9uKCl7dGhpcy5fcmVzb2x2ZWRTcmM9IiJ9LF9pbWdPbkxvYWQ6ZnVuY3Rpb24oKXt0aGlzLiQuaW1nLnNyYz09PXRoaXMuX3Jlc29sdmVTcmModGhpcy5zcmMpJiYodGhpcy5fc2V0TG9hZGluZyghMSksdGhpcy5fc2V0TG9hZGVkKCEwKSx0aGlzLl9zZXRFcnJvcighMSkpfSxfaW1nT25FcnJvcjpmdW5jdGlvbigpe3RoaXMuJC5pbWcuc3JjPT09dGhpcy5fcmVzb2x2ZVNyYyh0aGlzLnNyYykmJih0aGlzLiQuaW1nLnJlbW92ZUF0dHJpYnV0ZSgic3JjIiksCnRoaXMuJC5zaXplZEltZ0Rpdi5zdHlsZS5iYWNrZ3JvdW5kSW1hZ2U9IiIsdGhpcy5fc2V0TG9hZGluZyghMSksdGhpcy5fc2V0TG9hZGVkKCExKSx0aGlzLl9zZXRFcnJvcighMCkpfSxfY29tcHV0ZVBsYWNlaG9sZGVySGlkZGVuOmZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMucHJlbG9hZHx8IXRoaXMuZmFkZSYmIXRoaXMubG9hZGluZyYmdGhpcy5sb2FkZWR9LF9jb21wdXRlUGxhY2Vob2xkZXJDbGFzc05hbWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcmVsb2FkJiZ0aGlzLmZhZGUmJiF0aGlzLmxvYWRpbmcmJnRoaXMubG9hZGVkPyJmYWRlZC1vdXQiOiIifSxfY29tcHV0ZUltZ0RpdkhpZGRlbjpmdW5jdGlvbigpe3JldHVybiF0aGlzLnNpemluZ30sX2NvbXB1dGVJbWdEaXZBUklBSGlkZGVuOmZ1bmN0aW9uKCl7cmV0dXJuIiI9PT10aGlzLmFsdD8idHJ1ZSI6dm9pZCAwfSxfY29tcHV0ZUltZ0RpdkFSSUFMYWJlbDpmdW5jdGlvbigpe3JldHVybiBudWxsIT09dGhpcy5hbHQ/dGhpcy5hbHQ6CiIiPT09dGhpcy5zcmM/IiI6dGhpcy5fcmVzb2x2ZVNyYyh0aGlzLnNyYykucmVwbGFjZSgvWz98I10uKi9nLCIiKS5zcGxpdCgiLyIpLnBvcCgpfSxfY29tcHV0ZUltZ0hpZGRlbjpmdW5jdGlvbigpe3JldHVybiEhdGhpcy5zaXppbmd9LF93aWR0aENoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLnN0eWxlLndpZHRoPWlzTmFOKHRoaXMud2lkdGgpP3RoaXMud2lkdGg6dGhpcy53aWR0aCsicHgifSxfaGVpZ2h0Q2hhbmdlZDpmdW5jdGlvbigpe3RoaXMuc3R5bGUuaGVpZ2h0PWlzTmFOKHRoaXMuaGVpZ2h0KT90aGlzLmhlaWdodDp0aGlzLmhlaWdodCsicHgifSxfbG9hZFN0YXRlT2JzZXJ2ZXI6ZnVuY3Rpb24oYSxjKXt2YXIgZD10aGlzLl9yZXNvbHZlU3JjKGEpO2QhPT10aGlzLl9yZXNvbHZlZFNyYyYmKHRoaXMuX3Jlc29sdmVkU3JjPSIiLHRoaXMuJC5pbWcucmVtb3ZlQXR0cmlidXRlKCJzcmMiKSx0aGlzLiQuc2l6ZWRJbWdEaXYuc3R5bGUuYmFja2dyb3VuZEltYWdlPSIiLCIiPT09CmF8fGM/dGhpcy5fc2V0TG9hZGluZyghMSk6KHRoaXMuX3Jlc29sdmVkU3JjPWQsdGhpcy4kLmltZy5zcmM9dGhpcy5fcmVzb2x2ZWRTcmMsdGhpcy4kLnNpemVkSW1nRGl2LnN0eWxlLmJhY2tncm91bmRJbWFnZT0ndXJsKCInK3RoaXMuX3Jlc29sdmVkU3JjKyciKScsdGhpcy5fc2V0TG9hZGluZyghMCkpLHRoaXMuX3NldExvYWRlZCghMSksdGhpcy5fc2V0RXJyb3IoITEpKX0sX3BsYWNlaG9sZGVyQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMuJC5wbGFjZWhvbGRlci5zdHlsZS5iYWNrZ3JvdW5kSW1hZ2U9dGhpcy5wbGFjZWhvbGRlcj8ndXJsKCInK3RoaXMucGxhY2Vob2xkZXIrJyIpJzoiIn0sX3RyYW5zZm9ybUNoYW5nZWQ6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLiQuc2l6ZWRJbWdEaXYuc3R5bGUsYz10aGlzLiQucGxhY2Vob2xkZXIuc3R5bGU7YS5iYWNrZ3JvdW5kU2l6ZT1jLmJhY2tncm91bmRTaXplPXRoaXMuc2l6aW5nO2EuYmFja2dyb3VuZFBvc2l0aW9uPWMuYmFja2dyb3VuZFBvc2l0aW9uPQp0aGlzLnNpemluZz90aGlzLnBvc2l0aW9uOiIiO2EuYmFja2dyb3VuZFJlcGVhdD1jLmJhY2tncm91bmRSZXBlYXQ9dGhpcy5zaXppbmc/Im5vLXJlcGVhdCI6IiJ9LF9yZXNvbHZlU3JjOmZ1bmN0aW9uKGEpe2E9UG9seW1lci5SZXNvbHZlVXJsLnJlc29sdmVVcmwoYSx0aGlzLiQuYmFzZVVSSUFuY2hvci5ocmVmKTsiLyI9PT1hWzBdJiYoYT0obG9jYXRpb24ub3JpZ2lufHxsb2NhdGlvbi5wcm90b2NvbCsiLy8iK2xvY2F0aW9uLmhvc3QpK2EpO3JldHVybiBhfX0pOwo8L3NjcmlwdD4KPC9kb20tbW9kdWxlPgoKCgoKCgo8ZG9tLW1vZHVsZSBpZD0icGFwZXItY2FyZCI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlIGluY2x1ZGU9InBhcGVyLW1hdGVyaWFsLXN0eWxlcyI+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItY2FyZC1iYWNrZ3JvdW5kLWNvbG9yLCB2YXIoLS1wcmltYXJ5LWJhY2tncm91bmQtY29sb3IpKTsKICAgICAgICBib3JkZXItcmFkaXVzOiAycHg7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLWJhc2U7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItY2FyZDsKICAgICAgfQoKICAgICAgLyogSUUgMTAgc3VwcG9ydCBmb3IgSFRNTDUgaGlkZGVuIGF0dHIgKi8KICAgICAgOmhvc3QoW2hpZGRlbl0pLCBbaGlkZGVuXSB7CiAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgICB9CgogICAgICAuaGVhZGVyIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogaW5oZXJpdDsKICAgICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogaW5oZXJpdDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1jYXJkLWhlYWRlcjsKICAgICAgfQoKICAgICAgLmhlYWRlciBpcm9uLWltYWdlIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICAtLWlyb24taW1hZ2Utd2lkdGg6IDEwMCU7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWNhcmQtaGVhZGVyLWltYWdlOwogICAgICB9CgogICAgICAuaGVhZGVyIC50aXRsZS10ZXh0IHsKICAgICAgICBwYWRkaW5nOiAxNnB4OwogICAgICAgIGZvbnQtc2l6ZTogMjRweDsKICAgICAgICBmb250LXdlaWdodDogNDAwOwogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1jYXJkLWhlYWRlci1jb2xvciwgIzAwMCk7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWNhcmQtaGVhZGVyLXRleHQ7CiAgICAgIH0KCiAgICAgIC5oZWFkZXIgLnRpdGxlLXRleHQub3Zlci1pbWFnZSB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGJvdHRvbTogMHB4OwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1jYXJkLWhlYWRlci1pbWFnZS10ZXh0OwogICAgICB9CgogICAgICA6aG9zdCA6OnNsb3R0ZWQoLmNhcmQtY29udGVudCkgewogICAgICAgIHBhZGRpbmc6IDE2cHg7CiAgICAgICAgcG9zaXRpb246cmVsYXRpdmU7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWNhcmQtY29udGVudDsKICAgICAgfQoKICAgICAgOmhvc3QgOjpzbG90dGVkKC5jYXJkLWFjdGlvbnMpIHsKICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgI2U4ZThlODsKICAgICAgICBwYWRkaW5nOiA1cHggMTZweDsKICAgICAgICBwb3NpdGlvbjpyZWxhdGl2ZTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItY2FyZC1hY3Rpb25zOwogICAgICB9CgogICAgICA6aG9zdChbZWxldmF0aW9uPSIxIl0pIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1tYXRlcmlhbC1lbGV2YXRpb24tMTsKICAgICAgfQoKICAgICAgOmhvc3QoW2VsZXZhdGlvbj0iMiJdKSB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTI7CiAgICAgIH0KCiAgICAgIDpob3N0KFtlbGV2YXRpb249IjMiXSkgewogICAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi0zOwogICAgICB9CgogICAgICA6aG9zdChbZWxldmF0aW9uPSI0Il0pIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1tYXRlcmlhbC1lbGV2YXRpb24tNDsKICAgICAgfQoKICAgICAgOmhvc3QoW2VsZXZhdGlvbj0iNSJdKSB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTU7CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPGRpdiBjbGFzcz0iaGVhZGVyIj4KICAgICAgPGlyb24taW1hZ2UgaGlkZGVuJD0iW1shaW1hZ2VdXSIgYXJpYS1oaWRkZW4kPSJbW19pc0hpZGRlbihpbWFnZSldXSIgc3JjPSJbW2ltYWdlXV0iIGFsdD0iW1thbHRdXSIgcGxhY2Vob2xkZXI9IltbcGxhY2Vob2xkZXJJbWFnZV1dIiBwcmVsb2FkPSJbW3ByZWxvYWRJbWFnZV1dIiBmYWRlPSJbW2ZhZGVJbWFnZV1dIj48L2lyb24taW1hZ2U+CiAgICAgIDxkaXYgaGlkZGVuJD0iW1shaGVhZGluZ11dIiBjbGFzcyQ9InRpdGxlLXRleHQgW1tfY29tcHV0ZUhlYWRpbmdDbGFzcyhpbWFnZSldXSI+W1toZWFkaW5nXV08L2Rpdj4KICAgIDwvZGl2PgoKICAgIDxzbG90Pjwvc2xvdD4KICA8L3RlbXBsYXRlPgoKICA8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vcGFwZXItY2FyZC9wYXBlci1jYXJkLmh0bWwuanMKUG9seW1lcih7aXM6InBhcGVyLWNhcmQiLHByb3BlcnRpZXM6e2hlYWRpbmc6e3R5cGU6U3RyaW5nLHZhbHVlOiIiLG9ic2VydmVyOiJfaGVhZGluZ0NoYW5nZWQifSxpbWFnZTp7dHlwZTpTdHJpbmcsdmFsdWU6IiJ9LGFsdDp7dHlwZTpTdHJpbmd9LHByZWxvYWRJbWFnZTp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxmYWRlSW1hZ2U6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0scGxhY2Vob2xkZXJJbWFnZTp7dHlwZTpTdHJpbmcsdmFsdWU6bnVsbH0sZWxldmF0aW9uOnt0eXBlOk51bWJlcix2YWx1ZToxLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH0sYW5pbWF0ZWRTaGFkb3c6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sYW5pbWF0ZWQ6e3R5cGU6Qm9vbGVhbixyZWZsZWN0VG9BdHRyaWJ1dGU6ITAscmVhZE9ubHk6ITAsY29tcHV0ZWQ6Il9jb21wdXRlQW5pbWF0ZWQoYW5pbWF0ZWRTaGFkb3cpIn19LF9pc0hpZGRlbjpmdW5jdGlvbihhKXtyZXR1cm4gYT8iZmFsc2UiOiJ0cnVlIn0sX2hlYWRpbmdDaGFuZ2VkOmZ1bmN0aW9uKGEpe3ZhciBjPQp0aGlzLmdldEF0dHJpYnV0ZSgiaGVhZGluZyIpLGQ9dGhpcy5nZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiKTsic3RyaW5nIj09PXR5cGVvZiBkJiZkIT09Y3x8dGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiLGEpfSxfY29tcHV0ZUhlYWRpbmdDbGFzczpmdW5jdGlvbihhKXtyZXR1cm4gYT8iIG92ZXItaW1hZ2UiOiIifSxfY29tcHV0ZUFuaW1hdGVkOmZ1bmN0aW9uKGEpe3JldHVybiBhfX0pOwo8L3NjcmlwdD4KPC9kb20tbW9kdWxlPgoKCjxkb20tbW9kdWxlIGlkPSJvdmVydmlldy1wYWdlIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIHBhcGVyLWNhcmQgewogICAgICAgIG1hcmdpbjogNXB4OwogICAgICAgIC0tcGFwZXItY2FyZC1oZWFkZXItY29sb3I6ICNmNWY1ZjU7CiAgICAgICAgLS1wYXBlci1jYXJkLWhlYWRlcjogewogICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzQyODVmNDsKICAgICAgICB9CiAgICAgIH0KICAgICAgLmZsZXgtaG9yaXpvbnRhbCB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWhvcml6b250YWw7CiAgICAgIH0KICAgICAgLnN0ZXB0aW1lLWF2ZXJhZ2UgewogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICAgICAgICBjb2xvcjogdmFyKC0tc3VtbWFyeS1jb2xvciwgZ3JlZW4pOwogICAgICB9CiAgICAgIC50YWJsZS1zdHlsZSB7CiAgICAgICAgdGFibGUtbGF5b3V0OiBhdXRvOwogICAgICAgIHdpZHRoOiA5NSU7CiAgICAgIH0KICAgICAgLnRvcC1vcHMtdGFibGUgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CiAgICAgIHZ6LWxpbmUtY2hhcnQyLnN0ZXAtZ3JhcGggewogICAgICAgIHdpZHRoOiA4NjBweDsKICAgICAgICBoZWlnaHQ6IDIwMHB4OwogICAgICB9CiAgICAgIC54LWF4aXMtdGl0bGUgewogICAgICAgIHdpZHRoOiA4MCU7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIHRleHQtdHJhbnNmb3JtOiBjYXBpdGFsaXplOwogICAgICB9CiAgICAgIC55LWF4aXMtdGl0bGUgewogICAgICAgIHdpZHRoOiAxMHB4OwogICAgICAgIHdyaXRpbmctbW9kZTogYnQtcmw7CiAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMjcwZGVnKTsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICB0ZXh0LXRyYW5zZm9ybTogY2FwaXRhbGl6ZTsKICAgICAgfQogICAgICBkaXYuYm90dGxlbmVjay1zdGF0ZW1lbnQgewogICAgICAgIGNvbG9yOiB2YXIoLS1zdW1tYXJ5LWNvbG9yLCBncmVlbik7CiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGRlcjsKICAgICAgICBmb250LXN0eWxlOiBpdGFsaWM7CiAgICAgIH0KICAgICAgZGl2LmVycm9yTWVzc2FnZSB7CiAgICAgICAgY29sb3I6IHJlZDsKICAgICAgICBmb250LXNpemU6IDAuNWNtOwogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkZXI7CiAgICAgICAgbWFyZ2luLXRvcDogMC41Y207CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMC41Y207CiAgICAgIH0KICAgICAgZGl2LmJvdHRsZW5lY2tUaXBzIHsKICAgICAgICBjb2xvcjogIzAwMDAwMDsKICAgICAgfQogICAgICBkaXYuYm90dGxlbmVja1RpcHMgYSB7CiAgICAgICAgY29sb3I6ICNmZjMzY2M7CiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CiAgICAgIH0KICAgICAgZGl2LmRvY3VtZW50YXRpb25UaXBzIHsKICAgICAgICBjb2xvcjogIzY2NjY5OTsKICAgICAgfQogICAgICBkaXYuZG9jdW1lbnRhdGlvblRpcHMgYSB7CiAgICAgICAgY29sb3I6ICMzM2NjMDA7CiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8ZGl2IGNsYXNzPSJlcnJvck1lc3NhZ2UiIGhpZGRlbj0iW1shX2Vycm9yX21lc3NhZ2VdXSI+CiAgICAgIDxzcGFuPltbX2Vycm9yX21lc3NhZ2VdXTwvc3Bhbj4KICAgIDwvZGl2PgogICAgPGRpdiBoaWRkZW49IltbX2Vycm9yX21lc3NhZ2VdXSI+CiAgICAgIDxkaXYgY2xhc3M9ImNvbnRhaW5lciBmbGV4LWhvcml6b250YWwiPgogICAgICAgIDxwYXBlci1jYXJkIGhlYWRpbmc9IlBlcmZvcm1hbmNlIFN1bW1hcnkiPgogICAgICAgICAgPGRpdiBjbGFzcz0iY2FyZC1jb250ZW50Ij4KICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgPGI+QXZlcmFnZSBzdGVwIHRpbWU8L2I+IChsb3dlciBpcyBiZXR0ZXIpOgogICAgICAgICAgICAgIDxiPjxzcGFuIGNsYXNzPSJzdGVwdGltZS1hdmVyYWdlIj5bW19zdGVwdGltZV9tc19hdmVyYWdlXV0gbXM8L3NwYW4+CiAgICAgICAgICAgICAgPC9iPgogICAgICAgICAgICAgIDxpIHN0eWxlPSJvcGFjaXR5OjAuNyI+KHN0YW5kYXJkIGRldmlhdGlvbiA9CiAgICAgICAgICAgICAgICA8c3Bhbj5bW19zdGVwdGltZV9tc19zdGRkZXZdXTwvc3Bhbj4gbXMpPC9pPgogICAgICAgICAgICAKICAgICAgICAgICAgPHVsIGhpZGRlbiQ9IltbIV9pbmZlZWRfbXNfYXZlcmFnZV1dIj4KICAgICAgICAgICAgICA8bGk+QXZlcmFnZSBpbmZlZWQ6IDxzcGFuPltbX2luZmVlZF9tc19hdmVyYWdlXV08L3NwYW4+IG1zPC9saT4KICAgICAgICAgICAgICA8bGk+QXZlcmFnZSBjb21wdXRlOiA8c3Bhbj5bW19jb21wdXRlX21zX2F2ZXJhZ2VdXTwvc3Bhbj4gbXM8L2xpPgogICAgICAgICAgICA8L3VsPgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICA8Yj5Ib3N0IGlkbGUgdGltZTwvYj4gKGxvd2VyIGlzIGJldHRlcik6CiAgICAgICAgICAgICAgPHNwYW4+W1tfaG9zdF9pZGxlX3RpbWVfcGVyY2VudF1dPC9zcGFuPgogICAgICAgICAgICAKICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgPGI+VFBVIGlkbGUgdGltZTwvYj4gKGxvd2VyIGlzIGJldHRlcik6CiAgICAgICAgICAgICAgPHNwYW4+W1tfZGV2aWNlX2lkbGVfdGltZV9wZXJjZW50XV08L3NwYW4+CiAgICAgICAgICAgIAogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICA8Yj5VdGlsaXphdGlvbiBvZiBUUFUgTWF0cml4IFVuaXRzPC9iPiAoaGlnaGVyIGlzIGJldHRlcik6CiAgICAgICAgICAgICAgPHNwYW4+W1tfbXh1X3V0aWxpemF0aW9uX3BlcmNlbnRdXTwvc3Bhbj4KICAgICAgICAgICAgCiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L3BhcGVyLWNhcmQ+CiAgICAgICAgPHBhcGVyLWNhcmQgaGVhZGluZz0iU3RlcC10aW1lIEdyYXBoIj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImNhcmQtY29udGVudCIgaGlkZGVuPSJbWyFfc2hvd19zdGVwX3RpbWVfZ3JhcGhdXSI+CiAgICAgICAgICAgIDx0YWJsZSBjbGFzcz0idGFibGUtc3R5bGUiPgogICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgIDx0ZD48ZGl2IGNsYXNzPSJ5LWF4aXMtdGl0bGUiPm1pbGxpc2Vjb25kczwvZGl2PjwvdGQ+CiAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgIDx2ei1saW5lLWNoYXJ0MiBjbGFzcz0ic3RlcC1ncmFwaCIgaWQ9ImRldmljZV9zdGVwX2NoYXJ0Ij4KICAgICAgICAgICAgICAgICAgPC92ei1saW5lLWNoYXJ0Mj4KICAgICAgICAgICAgICAgICAgPGRpdj48cCBjbGFzcz0ieC1heGlzLXRpdGxlIj50cmFpbmluZyBzdGVwIG51bWJlcjwvZGl2PgogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICA8L3RhYmxlPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9wYXBlci1jYXJkPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY29udGFpbmVyIGZsZXgtaG9yaXpvbnRhbCI+CiAgICAgICAgPHBhcGVyLWNhcmQgaGVhZGluZyQ9IltbX3RvcF9vcHNfaGVhZGluZ11dIj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImNhcmQtY29udGVudCI+CiAgICAgICAgICAgIDxidXR0b24gb24tY2xpY2s9Im9uQ2xpY2tUb3BPcHMiPltbX3RvcF9vcHNfYnV0dG9uX3RleHRdXTwvYnV0dG9uPgogICAgICAgICAgICA8dGhyZWFkPgogICAgICAgICAgICAgICAgPC90aHJlYWQ+PHRhYmxlIGNsYXNzPSJ0b3Atb3BzLXRhYmxlIiBoaWRkZW4kPSJbWyFfc2hvd190b3Bfb3BzX3RhYmxlXV0iPgogICAgICAgICAgICAgIDx0cj48dGg+VGltZSAoJSk8L3RoPgogICAgICAgICAgICAgICAgPHRoPkN1bXVsYXRpdmUgdGltZSAoJSk8L3RoPgogICAgICAgICAgICAgICAgPHRoPkNhdGVnb3J5PC90aD4KICAgICAgICAgICAgICAgIDx0aD5PcGVyYXRpb248L3RoPgogICAgICAgICAgICAgICAgPHRoPkdGbG9wcy9zZWM8L3RoPgogICAgICAgICAgICAgIAogICAgICAgICAgICAgIDx0Ym9keSBpZD0idG9wX29wc190YWJsZV9jb250ZW50Ij48L3Rib2R5PgogICAgICAgICAgICA8L3RhYmxlPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9wYXBlci1jYXJkPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY29udGFpbmVyIGZsZXgtaG9yaXpvbnRhbCI+CiAgICAgICAgPHBhcGVyLWNhcmQgaGVhZGluZz0iUnVuIEVudmlyb25tZW50Ij4KICAgICAgICAgIDxkaXYgY2xhc3M9ImNhcmQtY29udGVudCI+CiAgICAgICAgICAgIDxwPjxiPk51bWJlciBvZiBIb3N0cyB1c2VkPC9iPjogPHNwYW4+W1tfaG9zdF9jb3VudF1dPC9zcGFuPgogICAgICAgICAgICA8cD48Yj5UUFUgdHlwZTwvYj46IENsb3VkIFRQVQogICAgICAgICAgICA8cD48Yj5OdW1iZXIgb2YgVFBVIGNvcmVzPC9iPjogPHNwYW4+IFtbX3RwdV9jb3JlX2NvdW50XV08L3NwYW4+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L3BhcGVyLWNhcmQ+CiAgICAgICAgPHBhcGVyLWNhcmQgaGVhZGluZz0iUmVjb21tZW5kYXRpb24gZm9yIE5leHQgU3RlcHMiPgogICAgICAgICAgPGRpdiBjbGFzcz0iY2FyZC1jb250ZW50Ij4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iYm90dGxlbmVjay1zdGF0ZW1lbnQiPjxzcGFuPltbX3N0YXRlbWVudF1dPC9zcGFuPjwvZGl2PgogICAgICAgICAgICA8ZGl2IGlkPSJob3N0X3NpZGVfdGlwcyI+PC9kaXY+CiAgICAgICAgICAgIDxkaXYgaWQ9ImRldmljZV9zaWRlX3RpcHMiPjwvZGl2PgogICAgICAgICAgICA8ZGl2IGlkPSJkb2N1bWVudGF0aW9uX3RpcHMiPjwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9wYXBlci1jYXJkPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogIDwvdGVtcGxhdGU+CgogIDxzY3JpcHQ+Ly9+fldFQlBBVEh+fi90Zi1vdmVydmlldy1wYWdlL292ZXJ2aWV3LXBhZ2UuaHRtbC5qcwpQb2x5bWVyKHtpczoib3ZlcnZpZXctcGFnZSIscHJvcGVydGllczp7X2RhdGE6e3R5cGU6T2JqZWN0LG9ic2VydmVyOiJfdXBkYXRlVmlldyJ9LF9zaG93X3RvcF9vcHNfdGFibGU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sX3Nob3dfc3RlcF90aW1lX2dyYXBoOnt0eXBlOkJvb2xlYW4sY29tcHV0ZWQ6Il9zaG91bGRTaG93U3RlcFRpbWVHcmFwaChfZGF0YSwgX2FjdGl2ZSkifSxfdG9wX29wc19idXR0b25fdGV4dDp7dHlwZTpTdHJpbmcsY29tcHV0ZWQ6Il9nZXRUb3BPcHNCdXR0b25UZXh0KF9zaG93X3RvcF9vcHNfdGFibGUpIn0sX2dlbmVyYWxBbmFseXNpc0pzb246e3R5cGU6U3RyaW5nfSxfaW5wdXRBbmFseXNpc0pzb246e3R5cGU6U3RyaW5nfSxfcnVuRW52aXJvbm1lbnRKc29uOnt0eXBlOlN0cmluZ30sX3JlY29tbWVuZGF0aW9uSnNvbjp7dHlwZTpTdHJpbmd9LF9hY3RpdmU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxvYnNlcnZlcjoiX29uQWN0aXZlQ2hhbmdlZCJ9LF9ob3N0X2lkbGVfdGltZV9wZXJjZW50Ont0eXBlOlN0cmluZ30sCl9kZXZpY2VfaWRsZV90aW1lX3BlcmNlbnQ6e3R5cGU6U3RyaW5nfSxfbXh1X3V0aWxpemF0aW9uX3BlcmNlbnQ6e3R5cGU6U3RyaW5nfSxfc3RlcHRpbWVfbXNfYXZlcmFnZTp7dHlwZTpTdHJpbmd9LF9zdGVwdGltZV9tc19zdGRkZXY6e3R5cGU6U3RyaW5nfSxfaW5mZWVkX21zX2F2ZXJhZ2U6e3R5cGU6U3RyaW5nLHZhbHVlOiIifSxfY29tcHV0ZV9tc19hdmVyYWdlOnt0eXBlOlN0cmluZyx2YWx1ZToiIn0sX3RvcF9vcHNfaGVhZGluZzp7dHlwZTpTdHJpbmd9LF9lcnJvcl9tZXNzYWdlOnt0eXBlOlN0cmluZ30sX2hvc3RfY291bnQ6e3R5cGU6U3RyaW5nfSxfdHB1X3R5cGU6e3R5cGU6U3RyaW5nfSxfdHB1X2NvcmVfY291bnQ6e3R5cGU6U3RyaW5nfSxfYmF0Y2hfc2l6ZTp7dHlwZTpTdHJpbmd9LF9jaGFuZ2VfbGlzdDp7dHlwZTpTdHJpbmd9LF9idWlsZF90aW1lOnt0eXBlOlN0cmluZ30sX2J1aWxkX3RhcmdldDp7dHlwZTpTdHJpbmd9LF9zdGF0ZW1lbnQ6e3R5cGU6U3RyaW5nfX0sCm9ic2VydmVyczpbIl9zaG93U3VtbWFyeShfaW5wdXRBbmFseXNpc0pzb24sIF9nZW5lcmFsQW5hbHlzaXNKc29uKSIsIl9zaG93UnVuRW52aXJvbm1lbnQoX3J1bkVudmlyb25tZW50SnNvbikiLCJfc2hvd0RldmljZVN0ZXBDaGFydChfaW5wdXRBbmFseXNpc0pzb24pIiwiX3Nob3dUb3BPcHNUYWJsZShfZ2VuZXJhbEFuYWx5c2lzSnNvbikiLCJfc2hvd1JlY29tbWVuZGF0aW9uKF9yZWNvbW1lbmRhdGlvbkpzb24pIl0sb25DbGlja1RvcE9wczpmdW5jdGlvbigpe3RoaXMuX3Nob3dfdG9wX29wc190YWJsZT0hdGhpcy5fc2hvd190b3Bfb3BzX3RhYmxlfSxfZ2V0VG9wT3BzQnV0dG9uVGV4dDpmdW5jdGlvbihhKXtyZXR1cm4oYT8iSGlkZSI6IlNob3ciKSsiIHRhYmxlIn0sX3VwZGF0ZVZpZXc6ZnVuY3Rpb24oKXtpZih0aGlzLl9kYXRhJiZ0aGlzLl9hY3RpdmUpe3RoaXMuX2dlbmVyYWxBbmFseXNpc0pzb249dGhpcy5fZGF0YVswXTt0aGlzLl9pbnB1dEFuYWx5c2lzSnNvbj10aGlzLl9kYXRhWzFdOwp0aGlzLl9ydW5FbnZpcm9ubWVudEpzb249dGhpcy5fZGF0YVsyXTt2YXIgYT10aGlzLl9kYXRhWzNdO3RoaXMuX3JlY29tbWVuZGF0aW9uSnNvbj1hO3RoaXMuX3N0YXRlbWVudD1hLnAuc3RhdGVtZW50O2E9ImdyZWVuIjt0aGlzLl9zdGF0ZW1lbnQuaW5jbHVkZXMoIkhJR0hMWSIpP2E9InJlZCI6dGhpcy5fc3RhdGVtZW50LmluY2x1ZGVzKCJNT0RFUkFURSIpJiYoYT0ib3JhbmdlIik7dGhpcy51cGRhdGVTdHlsZXMoeyItLXN1bW1hcnktY29sb3IiOmF9KX19LF9zaG93U3VtbWFyeTpmdW5jdGlvbihhLGMpe2EmJmMmJih0aGlzLl9ob3N0X2lkbGVfdGltZV9wZXJjZW50PWMucC5ob3N0X2lkbGVfdGltZV9wZXJjZW50LHRoaXMuX2RldmljZV9pZGxlX3RpbWVfcGVyY2VudD1jLnAuZGV2aWNlX2lkbGVfdGltZV9wZXJjZW50LHRoaXMuX214dV91dGlsaXphdGlvbl9wZXJjZW50PWMucC5teHVfdXRpbGl6YXRpb25fcGVyY2VudCx0aGlzLl9zdGVwdGltZV9tc19hdmVyYWdlPWEucC5zdGVwdGltZV9tc19hdmVyYWdlLAp0aGlzLl9zdGVwdGltZV9tc19zdGRkZXY9YS5wLnN0ZXB0aW1lX21zX3N0YW5kYXJkX2RldmlhdGlvbix0aGlzLl9jb21wdXRlX21zX2F2ZXJhZ2U9YS5wLmNvbXB1dGVfbXNfYXZlcmFnZSx0aGlzLl9pbmZlZWRfbXNfYXZlcmFnZT1hLnAuaW5mZWVkX21zX2F2ZXJhZ2UpfSxfc2hvd1J1bkVudmlyb25tZW50OmZ1bmN0aW9uKGEpe2EmJih0aGlzLl9lcnJvcl9tZXNzYWdlPWEucC5lcnJvcl9tZXNzYWdlLHRoaXMuX2hvc3RfY291bnQ9YS5wLmhvc3RfY291bnQsdGhpcy5fdHB1X3R5cGU9YS5wLnRwdV90eXBlLHRoaXMuX3RwdV9jb3JlX2NvdW50PWEucC50cHVfY29yZV9jb3VudCx0aGlzLl9iYXRjaF9zaXplPWEucC5iYXRjaF9zaXplLHRoaXMuX2NoYW5nZV9saXN0PWEucC5jaGFuZ2VfbGlzdCx0aGlzLl9idWlsZF90aW1lPWEucC5idWlsZF90aW1lLHRoaXMuX2J1aWxkX3RhcmdldD1hLnAuYnVpbGRfdGFyZ2V0KX0sX3Nob3dEZXZpY2VTdGVwQ2hhcnQ6ZnVuY3Rpb24oYSl7aWYodGhpcy5fc2hvd19zdGVwX3RpbWVfZ3JhcGgpe3ZhciBjPQpbXSxkPVtdLGY9MCxnPS0xO2Eucm93cy5mb3JFYWNoKGZ1bmN0aW9uKGwpe2c9MDxnPysrZzpOdW1iZXIobC5jWzBdLnYpO2MucHVzaCh7c2NhbGFyOmwuY1sxXS52LHN0ZXA6Zyx0cHVfc3RlcDpOdW1iZXIobC5jWzBdLnYpLGxvd193YXRlcm1hcms6MH0pO2QucHVzaCh7c2NhbGFyOmwuY1sxXS52K2wuY1syXS52LHN0ZXA6Zyxsb3dfd2F0ZXJtYXJrOmwuY1sxXS52fSk7Zj1NYXRoLm1heChmLGwuY1sxXS52K2wuY1syXS52KX0pO2lmKGE9dGhpcy4kJCgiI2RldmljZV9zdGVwX2NoYXJ0IikpYS5zZXRWaXNpYmxlU2VyaWVzKFsiY29tcHV0ZS10aW1lIiwic3RlcC10aW1lIFx4M2QgaW5wdXQtdGltZSArIGNvbXB1dGUtdGltZSJdKSxhLnNldFNlcmllc0RhdGEoImNvbXB1dGUtdGltZSIsYyksYS5zZXRTZXJpZXNEYXRhKCJzdGVwLXRpbWUgXHgzZCBpbnB1dC10aW1lICsgY29tcHV0ZS10aW1lIixkKSxhLmRlZmF1bHRZUmFuZ2U9WzAsMS4xKmZdLGEuc21vb3RoaW5nRW5hYmxlZD0KITEsYS50b29sdGlwQ29sdW1ucz1be3RpdGxlOiJOYW1lIixldmFsdWF0ZTpsPT5sLmRhdGFzZXQubWV0YWRhdGEoKS5uYW1lfSx7dGl0bGU6IlRpbWUobXMpIixldmFsdWF0ZTpsPT5sLmRhdHVtLnNjYWxhci50b0ZpeGVkKDIpfSx7dGl0bGU6IlN0ZXAiLGV2YWx1YXRlOmw9PmwuZGF0dW0uc3RlcH1dLGEuZmlsbEFyZWE9e2hpZ2hlckFjY2Vzc29yOmw9Pmwuc2NhbGFyLGxvd2VyQWNjZXNzb3I6bD0+bC5sb3dfd2F0ZXJtYXJrfSxhLnhBeGlzRm9ybWF0dGVyPWQzLmZvcm1hdCgiZCIpfX0sX3Nob3dUb3BPcHNUYWJsZTpmdW5jdGlvbihhKXtpZihhJiZhLnJvd3MmJmEucm93cy5sZW5ndGgmJnRoaXMuX2FjdGl2ZSl7dmFyIGM9MCxkPXRoaXMuJCQoIiN0b3Bfb3BzX3RhYmxlX2NvbnRlbnQiKTtkJiYoZC5pbm5lckhUTUw9IiIsYS5yb3dzLmZvckVhY2goZnVuY3Rpb24oZil7dmFyIGc9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidHIiKTtQb2x5bWVyLmRvbShkKS5hcHBlbmRDaGlsZChnKTsKdmFyIGw9W107bC5wdXNoKCgxMDAqZi5jWzBdLnYpLnRvRml4ZWQoMikrIiUiKTtsLnB1c2goKDEwMCpmLmNbMV0udikudG9GaXhlZCgyKSsiJSIpO2wucHVzaChmLmNbMl0udik7bC5wdXNoKGYuY1szXS52KTtsLnB1c2goZi5jWzRdLnYudG9GaXhlZCgyKSk7bC5mb3JFYWNoKGZ1bmN0aW9uKGspe3ZhciBtPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7UG9seW1lci5kb20oZykuYXBwZW5kQ2hpbGQobSk7UG9seW1lci5kb20obSkuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoaykpfSk7Yys9MX0pLHRoaXMuX3RvcF9vcHNfaGVhZGluZz0iVG9wICIrYysiIFRlbnNvckZsb3cgb3BlcmF0aW9ucyBleGVjdXRlZCBvbiBUUFUiLHRoaXMuX3Nob3dfdG9wX29wc190YWJsZT0hMSl9fSxfZ2VuZXJhdGVSZWNvbW1lbmRhdGlvbkh0bWw6ZnVuY3Rpb24oYSxjLGQsZil7dmFyIGc9Ilx4M2NwXHgzZVx4MjZuYnNwO1x4M2MvcFx4M2UiO2crPSdceDNjZGl2IGNsYXNzXHgzZCInKwpjKyciXHgzZSc7Zys9Ilx4M2NiXHgzZSIrZisiOlx4M2MvYlx4M2UiO2Eucm93cy5mb3JFYWNoKGZ1bmN0aW9uKGwpe2wuY1swXS52PT1kJiYoZys9Ilx4M2NsaVx4M2UiK2wuY1sxXS52KyJceDNjL2xpXHgzZSIpfSk7cmV0dXJuIGcrPSJceDNjL2Rpdlx4M2UifSxfc2hvd1JlY29tbWVuZGF0aW9uOmZ1bmN0aW9uKGEpe2lmKGEmJnRoaXMuX2FjdGl2ZSl7dmFyIGM9YS5wLmJvdHRsZW5lY2ssZD10aGlzLiQkKCIjaG9zdF9zaWRlX3RpcHMiKSxmPXRoaXMuJCQoIiNkZXZpY2Vfc2lkZV90aXBzIik7ZCYmZiYmKCJkZXZpY2UiPT1jPyhkLmlubmVySFRNTD0iIixmLmlubmVySFRNTD10aGlzLl9nZW5lcmF0ZVJlY29tbWVuZGF0aW9uSHRtbChhLCJib3R0bGVuZWNrVGlwcyIsImRldmljZSIsIk5leHQgdG9vbHMgdG8gdXNlIGZvciByZWR1Y2luZyB0aGUgVFBVIHRpbWUiKSk6Imhvc3QiPT1jPyhkLmlubmVySFRNTD10aGlzLl9nZW5lcmF0ZVJlY29tbWVuZGF0aW9uSHRtbChhLCJib3R0bGVuZWNrVGlwcyIsCiJob3N0IiwiTmV4dCB0b29scyB0byB1c2UgZm9yIHJlZHVjaW5nIHRoZSBpbnB1dCB0aW1lIiksZi5pbm5lckhUTUw9IiIpOihkLmlubmVySFRNTD10aGlzLl9nZW5lcmF0ZVJlY29tbWVuZGF0aW9uSHRtbChhLCJib3R0bGVuZWNrVGlwcyIsImhvc3QiLCJOZXh0IHRvb2xzIHRvIHVzZSBmb3IgcmVkdWNpbmcgdGhlIGlucHV0IHRpbWUiKSxmLmlubmVySFRNTD10aGlzLl9nZW5lcmF0ZVJlY29tbWVuZGF0aW9uSHRtbChhLCJib3R0bGVuZWNrVGlwcyIsImRldmljZSIsIk5leHQgdG9vbHMgdG8gdXNlIGZvciByZWR1Y2luZyB0aGUgVFBVIHRpbWUiKSksYz10aGlzLiQkKCIjZG9jdW1lbnRhdGlvbl90aXBzIikpJiYoYy5pbm5lckhUTUw9dGhpcy5fZ2VuZXJhdGVSZWNvbW1lbmRhdGlvbkh0bWwoYSwiZG9jdW1lbnRhdGlvblRpcHMiLCJkb2MiLCJPdGhlciB1c2VmdWwgcmVzb3VyY2VzIikpfX0sX29uQWN0aXZlQ2hhbmdlZDpmdW5jdGlvbihhKXthP3RoaXMuX3VwZGF0ZVZpZXcoKToKdGhpcy5fc2hvd190b3Bfb3BzX3RhYmxlPXRoaXMuX3Nob3dfc3RlcF90aW1lX2dyYXBoPSExfSxfc2hvdWxkU2hvd1N0ZXBUaW1lR3JhcGg6ZnVuY3Rpb24oYSxjKXtyZXR1cm4gYyYmYSYmYVsxXSYmYVsxXS5yb3dzJiZhWzFdLnJvd3MubGVuZ3RofSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX2FjdGl2ZT0hMDt0aGlzLl91cGRhdGVWaWV3KCl9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fYWN0aXZlPSExfX0pOwo8L3NjcmlwdD4KPC9kb20tbW9kdWxlPgoKCgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdGYtb3AtcHJvZmlsZS91dGlscy5qcwp2YXIgcW07CihmdW5jdGlvbihhKXtmdW5jdGlvbiBjKGwsayxtLHApe3JldHVybiJyZ2JhKCIrTWF0aC5yb3VuZCgyNTUqbCkrIiwiK01hdGgucm91bmQoMjU1KmspKyIsIitNYXRoLnJvdW5kKDI1NSptKSsiLCIrcCsiKSJ9ZnVuY3Rpb24gZChsLGs9MSxtPTEscD1NYXRoLnNxcnQpe2lmKGlzTmFOKGwpKXJldHVybiBjKGssayxrLG0pO2w9cChsKTtyZXR1cm4uNT5sP2MoaywyKmwqaywwLG0pOmMoMiooMS1sKSprLGssMCxtKX1mdW5jdGlvbiBmKGwpe3JldHVybiBsJiZsLm1ldHJpY3MmJmwubWV0cmljcy50aW1lP2wubWV0cmljcy5mbG9wcy9sLm1ldHJpY3MudGltZTpOYU59ZnVuY3Rpb24gZyhsKXtyZXR1cm4gbCYmbC5tZXRyaWNzJiZsLm1ldHJpY3MubWVtb3J5QmFuZHdpZHRoP2wubWV0cmljcy5tZW1vcnlCYW5kd2lkdGg6TmFOfWEuZmxhbWVDb2xvcj1kO2EuZmxvcHNDb2xvcj1mdW5jdGlvbihsKXtyZXR1cm4gZChsLC43KX07YS5id0NvbG9yPWZ1bmN0aW9uKGwpe3JldHVybiBkKDEtbCwKLjcpfTthLnV0aWxpemF0aW9uPWY7YS5tZW1vcnlVdGlsaXphdGlvbj1nO2EuaGFzTWVtb3J5VXRpbGl6YXRpb249ZnVuY3Rpb24obCl7cmV0dXJuIGwmJmwubWV0cmljcyYmbC5tZXRyaWNzLm1lbW9yeUJhbmR3aWR0aH07YS5oYXNGbG9wcz1mdW5jdGlvbihsKXtyZXR1cm4gbCYmbC5tZXRyaWNzJiZsLm1ldHJpY3MudGltZX07YS5wZXJjZW50PWZ1bmN0aW9uKGwpe3JldHVybiBpc05hTihsKT8iLSI6Ljk5NTw9bD8iMTAwJSI6MUUtNT5sPyIwLjAwJSI6KDEwMCpsKS50b1ByZWNpc2lvbigyKSsiJSJ9O2EudGltZVdhc3RlZD1mdW5jdGlvbihsKXtyZXR1cm4gbCYmbC5tZXRyaWNzP2wubWV0cmljcy50aW1lKigxLU1hdGgubWF4KGYobCksZyhsKSkpOk5hTn19KShxbXx8KHFtPXt9KSk7Cjwvc2NyaXB0PgoKCgo8ZG9tLW1vZHVsZSBpZD0idGYtb3AtdGFibGUtc3R5bGVzIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgICN0aW1lLAogICAgICAjd2FzdGVkLAogICAgICAjdXRpbGl6YXRpb24gewogICAgICAgIHdpZHRoOiA2MHB4OwogICAgICB9CiAgICAgICNuYW1lIHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgbWluLXdpZHRoOiA0MCU7CiAgICAgIH0KICAgICAgI3JvdywKICAgICAgI2hlYWRlciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICB9CiAgICAgICNyb3cgPiAqLAogICAgICAjaGVhZGVyID4gKiB7CiAgICAgICAgcGFkZGluZzogMC41ZW07CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICB9CiAgICAgICNoZWFkZXIgPiAqIHsKICAgICAgICBwYWRkaW5nLWJvdHRvbTogMDsKICAgICAgfQogICAgICAjcHJvdmVuYW5jZSB7CiAgICAgICAgZmxleDogMSAxIDAgIWltcG9ydGFudDsKICAgICAgfQogICAgICAjdXRpbGl6YXRpb24gewogICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT4KCgo8ZG9tLW1vZHVsZSBpZD0idGYtb3AtdGFibGUiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZSBpbmNsdWRlPSJ0Zi1vcC10YWJsZS1zdHlsZXMiPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7CiAgICAgIH0KICAgICAgI2hlYWRlciB7CiAgICAgICAgZm9udC1zaXplOiBzbWFsbGVyOwogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICAgIGNvbG9yOiAjNjY2OwogICAgICAgIHBhZGRpbmctYm90dG9tOiAwLjI1ZW07CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICM2NjY7CiAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICB9CiAgICAgIC8qIE1hdGNoIGluZGVudGVkIG5hbWVzICovCiAgICAgICNoZWFkZXIgPiAjbmFtZSB7CiAgICAgICAgcGFkZGluZy1sZWZ0OiAyZW07CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8ZGl2IGlkPSJoZWFkZXIiPgogICAgICA8c3BhbiBpZD0idGltZSI+VGltZTwvc3Bhbj4KICAgICAgPHNwYW4gaWQ9Indhc3RlZCI+V2FzdGVkPC9zcGFuPgogICAgICA8c3BhbiBpZD0ibmFtZSI+TmFtZTwvc3Bhbj4KICAgICAgPHNwYW4gaWQ9InByb3ZlbmFuY2UiPlRlbnNvckZsb3cgT3A8L3NwYW4+CiAgICAgIDxzcGFuIGlkPSJ1dGlsaXphdGlvbiI+RkxPUFM8L3NwYW4+CiAgICA8L2Rpdj4KICAgIDx0Zi1vcC10YWJsZS1lbnRyeSBub2RlPSJbW3Jvb3ROb2RlXV0iIGhlYWRlci1ob3Zlcj0iW1tfb25IZWFkZXJIb3Zlcl1dIiBoZWFkZXItY2xpY2s9IltbX29uSGVhZGVyQ2xpY2tdXSIgY2hpbGRyZW4tY291bnQ9Int7Y2hpbGRyZW5Db3VudH19IiBzaG93LXA5MD0ie3tzaG93UDkwfX0iIGJ5LXdhc3RlPSJ7e2J5V2FzdGV9fSIgZXhwYW5kZWQ9InRydWUiPgogICAgPC90Zi1vcC10YWJsZS1lbnRyeT4KICA8L3RlbXBsYXRlPgoKICA8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdGYtb3AtcHJvZmlsZS90Zi1vcC10YWJsZS5odG1sLmpzClBvbHltZXIoe2lzOiJ0Zi1vcC10YWJsZSIscHJvcGVydGllczp7cm9vdE5vZGU6e3R5cGU6T2JqZWN0fSxhY3RpdmU6e3R5cGU6T2JqZWN0LGNvbXB1dGVkOiJfYWN0aXZlKF9zZWxlY3RlZCwgX2hvdmVyKSIsbm90aWZ5OiEwfSxzaG93UDkwOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEsbm90aWZ5OiEwfSxieVdhc3RlOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEsbm90aWZ5OiEwfSxjaGlsZHJlbkNvdW50Ont0eXBlOk51bWJlcix2YWx1ZToxMCxub3RpZnk6ITB9LF9zZWxlY3RlZDp7dHlwZTpPYmplY3QsdmFsdWU6bnVsbCxub3RpZnk6ITB9LF9ob3Zlcjp7dHlwZTpPYmplY3QsdmFsdWU6bnVsbCxub3RpZnk6ITB9LF9vbkhlYWRlckhvdmVyOnt0eXBlOk9iamVjdCx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBhPT50aGlzLl9ob3Zlcj1hfX0sX29uSGVhZGVyQ2xpY2s6e3R5cGU6T2JqZWN0LHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIGE9Pnt0aGlzLl9zZWxlY3RlZCYmKHRoaXMuX3NlbGVjdGVkLnNlbGVjdGVkPQohMSk7dGhpcy5fc2VsZWN0ZWQ9YTthLnNlbGVjdGVkPSEwfX19fSxfYWN0aXZlOmZ1bmN0aW9uKGEsYyl7aWYoYylyZXR1cm4gYy5ub2RlO2lmKGEpcmV0dXJuIGEubm9kZX19KTsKPC9zY3JpcHQ+CjwvZG9tLW1vZHVsZT4KCgo8ZG9tLW1vZHVsZSBpZD0idGYtb3AtdGFibGUtZW50cnkiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZSBpbmNsdWRlPSJ0Zi1vcC10YWJsZS1zdHlsZXMiPgogICAgICAjcm93IHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMCAwIHJnYmEoMCwgMCwgMCwgMC4wNik7CiAgICAgICAgei1pbmRleDogMDsKICAgICAgfQogICAgICAjYmFyIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIHotaW5kZXg6IC0xOwogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNjZGU7CiAgICAgIH0KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CiAgICAgIDpob3N0KC5zZWxlY3RlZCkgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4wNCk7CiAgICAgIH0KICAgICAgOmhvc3QoLnNlbGVjdGVkKSA+ICNyb3cgewogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICB9CiAgICAgICNyb3c6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4wNSk7CiAgICAgIH0KICAgICAgI2Rpc2Nsb3N1cmUgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICB3aWR0aDogMWVtOwogICAgICB9CiAgICAgICNuYW1lIHsKICAgICAgICBmb250LWZhbWlseTogbW9ub3NwYWNlOwogICAgICB9CiAgICAgICN0aW1lLAogICAgICAjd2FzdGVkLAogICAgICAjdXRpbGl6YXRpb24gewogICAgICAgIGZvbnQtc2l6ZTogc21hbGxlcjsKICAgICAgfQogICAgICAvKiBVdGlsaXphdGlvbiBoYXMgYSBiYWNrZ3JvdW5kIGNvbG9yLCBzbyBpdCBzdHJldGNoZXMgdG8gZmlsbCB0aGUgcm93LgogICAgICAgICBJdHMgdGV4dCBpcyBpbiBhbiBpbm5lciBkaXYgdGhhdCByZW1haW5zIHZlcnRpY2FsbHkgY2VudGVyZWQuICovCiAgICAgICN1dGlsaXphdGlvbiB7CiAgICAgICAgYWxpZ24tc2VsZjogc3RyZXRjaDsKICAgICAgfQogICAgICAjdXRpbGl6YXRpb24gZGl2IHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgdG9wOiA1MCU7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpOwogICAgICB9CgogICAgICBbaGlkZGVuXSB7CiAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgICB9CiAgICA8L3N0eWxlPgogICAgPGRpdiBpZD0icm93IiBvbi1jbGljaz0iX2hhbmRsZUhlYWRlckNsaWNrIiBvbi1tb3VzZWVudGVyPSJfaGFuZGxlSGVhZGVyTW91c2VFbnRlciIgb24tbW91c2VsZWF2ZT0iX2hhbmRsZUhlYWRlck1vdXNlTGVhdmUiIGhpZGRlbj0iW1shbGV2ZWxdXSI+CiAgICAgIDxkaXYgaWQ9ImJhciIgc3R5bGUkPSJ3aWR0aDp7e19iYXJXaWR0aChub2RlKX19Ij48L2Rpdj4KICAgICAgPHNwYW4gaWQ9InRpbWUiPnt7X3BlcmNlbnQobm9kZSl9fTwvc3Bhbj4KICAgICAgPHNwYW4gaWQ9Indhc3RlZCI+e3tfdGltZVdhc3RlZChub2RlKX19PC9zcGFuPgogICAgICA8c3BhbiBpZD0ibmFtZSIgc3R5bGUkPSJwYWRkaW5nLWxlZnQ6W1tsZXZlbF1dZW07Ij4KICAgICAgICA8c3BhbiBpZD0iZGlzY2xvc3VyZSI+CiAgICAgICAgICA8c3BhbiBoaWRkZW49IltbIW5vZGUuY2hpbGRyZW4ubGVuZ3RoXV0iPgogICAgICAgICAgICA8c3BhbiBoaWRkZW49IltbZXhwYW5kZWRdXSI+4pa2PC9zcGFuPgogICAgICAgICAgICA8c3BhbiBoaWRkZW49IltbIWV4cGFuZGVkXV0iPuKWvDwvc3Bhbj4KICAgICAgICAgIDwvc3Bhbj4gPC9zcGFuPnt7bm9kZS5uYW1lfX0KICAgICAgPC9zcGFuPgogICAgICA8c3BhbiBpZD0icHJvdmVuYW5jZSI+e3tfcHJvdmVuYW5jZShub2RlKX19Jm5ic3A7PC9zcGFuPgogICAgICA8c3BhbiBpZD0idXRpbGl6YXRpb24iIGhpZGRlbj0iW1shX2hhc0Zsb3BzKG5vZGUpXV0iIHN0eWxlJD0iYmFja2dyb3VuZC1jb2xvcjp7e19mbGFtZUNvbG9yKG5vZGUpfX0iPgogICAgICAgIHt7X3V0aWxpemF0aW9uKG5vZGUpfX08L3NwYW4+CiAgICA8L2Rpdj4KICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tleHBhbmRlZF1dIj4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0ie3tfZ2V0S0NoaWxkcmVuKG5vZGUsIGNoaWxkcmVuQ291bnQsIHNob3dQOTAsIGxldmVsKX19IiBzb3J0PSJbW19zb3J0KGJ5V2FzdGUpXV0iPgogICAgICAgIDx0Zi1vcC10YWJsZS1lbnRyeSBub2RlPSJbW2l0ZW1dXSIgY2hpbGRyZW4tY291bnQ9Int7Y2hpbGRyZW5Db3VudH19IiBzaG93LXA5MD0ie3tzaG93UDkwfX0iIGJ5LXdhc3RlPSJ7e2J5V2FzdGV9fSIgbGV2ZWw9Int7X25leHRMZXZlbChsZXZlbCl9fSIgaGVhZGVyLWhvdmVyPSJ7e2hlYWRlckhvdmVyfX0iIGhlYWRlci1jbGljaz0ie3toZWFkZXJDbGlja319Ij4KICAgICAgICA8L3RmLW9wLXRhYmxlLWVudHJ5PgogICAgICA8L3RlbXBsYXRlPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2hhc0xlZnRvdXQobm9kZSwgY2hpbGRyZW5Db3VudCwgbGV2ZWwpXV0iPgogICAgICAgIDxzcGFuIGlkPSJuYW1lIiBzdHlsZSQ9InBhZGRpbmctbGVmdDpbW19nZXRQYWRkaW5nTGVmdChsZXZlbCldXWVtOyI+CiAgICAgICAgICBbW19udW1MZWZ0b3V0KG5vZGUsIGNoaWxkcmVuQ291bnQpXV0gY2F0ZWdvcmllcyBvciBvcHMgaGF2ZSBiZWVuIGxlZnQKICAgICAgICAgIG91dC4KICAgICAgICA8L3NwYW4+CiAgICAgIDwvdGVtcGxhdGU+CiAgICA8L3RlbXBsYXRlPgogIDwvdGVtcGxhdGU+CgogIDxzY3JpcHQ+Ly9+fldFQlBBVEh+fi90Zi1vcC1wcm9maWxlL3RmLW9wLXRhYmxlLmh0bWwtMi5qcwpQb2x5bWVyKHtpczoidGYtb3AtdGFibGUtZW50cnkiLHByb3BlcnRpZXM6e25vZGU6e3R5cGU6T2JqZWN0fSxsZXZlbDp7dHlwZTpOdW1iZXIsdmFsdWU6MH0saGVhZGVySG92ZXI6e3R5cGU6T2JqZWN0LHZhbHVlOigpPT5mdW5jdGlvbigpe30sbm90aWZ5OiEwfSxoZWFkZXJDbGljazp7dHlwZTpPYmplY3QsdmFsdWU6KCk9PmZ1bmN0aW9uKCl7fSxub3RpZnk6ITB9LGV4cGFuZGVkOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEsbm90aWZ5OiEwfSxzZWxlY3RlZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExLG9ic2VydmVyOiJfc2VsZWN0ZWRDaGFuZ2VkIn19LF9lcTpmdW5jdGlvbihhLGMpe3JldHVybiBhPT1jfSxfbmV4dExldmVsOmZ1bmN0aW9uKGEpe3JldHVybiBhKzF9LF9oYW5kbGVIZWFkZXJDbGljazpmdW5jdGlvbigpe3RoaXMuZXhwYW5kZWRePTE7dGhpcy5oZWFkZXJDbGljayh0aGlzKX0sX2hhbmRsZUhlYWRlck1vdXNlRW50ZXI6ZnVuY3Rpb24oKXt0aGlzLmhlYWRlckhvdmVyKHRoaXMpfSwKX2hhbmRsZUhlYWRlck1vdXNlTGVhdmU6ZnVuY3Rpb24oKXt0aGlzLmhlYWRlckhvdmVyKG51bGwpfSxfcGVyY2VudDpmdW5jdGlvbihhKXtyZXR1cm4gYS5tZXRyaWNzJiZhLm1ldHJpY3MudGltZT9xbS5wZXJjZW50KGEubWV0cmljcy50aW1lKToiIn0sX3RpbWVXYXN0ZWQ6ZnVuY3Rpb24oYSl7cmV0dXJuIHFtLnBlcmNlbnQocW0udGltZVdhc3RlZChhKSl9LF9wcm92ZW5hbmNlOmZ1bmN0aW9uKGEpe3JldHVybiBhLnhsYSYmYS54bGEucHJvdmVuYW5jZT9hLnhsYS5wcm92ZW5hbmNlLnJlcGxhY2UoL14uKlwvLywiIik6IiJ9LF91dGlsaXphdGlvbjpmdW5jdGlvbihhKXtyZXR1cm4gcW0ucGVyY2VudChxbS51dGlsaXphdGlvbihhKSl9LF9oYXNGbG9wczpxbS5oYXNGbG9wcyxfZmxhbWVDb2xvcjpmdW5jdGlvbihhKXtyZXR1cm4gcW0uZmxhbWVDb2xvcihxbS51dGlsaXphdGlvbihhKSwxLC4yKX0sX2JhcldpZHRoOmZ1bmN0aW9uKGEpe3JldHVybiBhLm1ldHJpY3MmJmEubWV0cmljcy50aW1lPwpxbS5wZXJjZW50KGEubWV0cmljcy50aW1lKTowfSxfc2VsZWN0ZWRDaGFuZ2VkOmZ1bmN0aW9uKGEpe3RoaXMuY2xhc3NMaXN0LnRvZ2dsZSgic2VsZWN0ZWQiLGEpfSxfZ2V0S0NoaWxkcmVuOmZ1bmN0aW9uKGEsYyxkLGYpe2lmKGQmJjA8YS5jaGlsZHJlbi5sZW5ndGgmJmEuY2hpbGRyZW5bMF0ubWV0cmljcyl7Zm9yKHZhciBnPWQ9MCxsPS45KmEubWV0cmljcy50aW1lO2c8TWF0aC5taW4oYyxhLmNoaWxkcmVuLmxlbmd0aCkmJiEoZD49bCk7ZysrKWQrPWEuY2hpbGRyZW5bZ10ubWV0cmljcy50aW1lO2M9Z31yZXR1cm4gZj9hLmNoaWxkcmVuLnNsaWNlKDAsYyk6YS5jaGlsZHJlbn0sX2hhc0xlZnRvdXQ6ZnVuY3Rpb24oYSxjLGQpe3JldHVybiBkP2EubnVtQ2hpbGRyZW4+TWF0aC5taW4oYyxhLmNoaWxkcmVuLmxlbmd0aCk6ITF9LF9udW1MZWZ0b3V0OmZ1bmN0aW9uKGEsYyl7cmV0dXJuIGEubnVtQ2hpbGRyZW4tTWF0aC5taW4oYyxhLmNoaWxkcmVuLmxlbmd0aCl9LF9nZXRQYWRkaW5nTGVmdDpmdW5jdGlvbihhKXtyZXR1cm4gYSsKNX0sX3NvcnQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGE/KGMsZCk9PnFtLnRpbWVXYXN0ZWQoZCktcW0udGltZVdhc3RlZChjKTowfX0pOwo8L3NjcmlwdD4KPC9kb20tbW9kdWxlPgoKCgoKCjxkb20tbW9kdWxlIGlkPSJ0Zi1vcC1iYXIiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBoZWlnaHQ6IDEuNWVtOwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjVlbTsKICAgICAgfQogICAgPC9zdHlsZT4KICAgICZuYnNwO1tbX3BlcmNlbnQodmFsdWUpXV0KICA8L3RlbXBsYXRlPgogIDxzY3JpcHQ+Ly9+fldFQlBBVEh+fi90Zi1vcC1wcm9maWxlL3RmLW9wLWRldGFpbHMuaHRtbC5qcwpQb2x5bWVyKHtpczoidGYtb3AtYmFyIixwcm9wZXJ0aWVzOnt2YWx1ZTp7dHlwZTpOdW1iZXJ9LGNvbG9yOnt0eXBlOlN0cmluZ319LG9ic2VydmVyczpbIl91cGRhdGVWYWx1ZSh2YWx1ZSwgY29sb3IpIl0sX3BlcmNlbnQ6cW0ucGVyY2VudCxfdXBkYXRlVmFsdWU6ZnVuY3Rpb24oYSxjKXtjJiYoYT1xbS5wZXJjZW50KGEpLHRoaXMuc3R5bGUuYmFja2dyb3VuZD1gbGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCAke2N9ICR7YX0sICNjY2MgJHthfSlgKX19KTsKPC9zY3JpcHQ+CjwvZG9tLW1vZHVsZT4KCgo8ZG9tLW1vZHVsZSBpZD0idGYtb3AtZGV0YWlscyI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICBwYXBlci1jYXJkIHsKICAgICAgICAtLXBhcGVyLWNhcmQtaGVhZGVyLWNvbG9yOiB3aGl0ZTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQogICAgICB0Zi1vcC1iYXIgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CiAgICAgICNzdWJoZWFkZXIgewogICAgICAgIHBhZGRpbmc6IDAgMTZweCA2cHg7CiAgICAgICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KTsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgdG9wOiAtMTBweDsKICAgICAgfQogICAgICAuY2FyZC1jb250ZW50IHsKICAgICAgICBiYWNrZ3JvdW5kOiAjZmZmOwogICAgICB9CiAgICAgIC5jYXJkLWNvbnRlbnQgPiBkaXYgewogICAgICAgIG1hcmdpbi1ib3R0b206IDFlbTsKICAgICAgfQogICAgICAuZXhwcmVzc2lvbiB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgd29yZC13cmFwOiBicmVhay13b3JkOwogICAgICB9CiAgICAgIC51bmF2YWlsYWJsZSB7CiAgICAgICAgZm9udC1zdHlsZTogaXRhbGljOwogICAgICAgIGNvbG9yOiAjNjY2OwogICAgICB9CgogICAgICAubGF5b3V0IHsKICAgICAgICBkaXNwbGF5OiB0YWJsZTsKICAgICAgICB3aWR0aDogNTAlOwogICAgICAgIGJvcmRlci1zcGFjaW5nOiAxZW0gMC4zZW07CiAgICAgIH0KICAgICAgLmxheW91dCA+ICogewogICAgICAgIGRpc3BsYXk6IHRhYmxlLXJvdzsKICAgICAgfQogICAgICAubGF5b3V0ID4gKiA+ICogewogICAgICAgIGRpc3BsYXk6IHRhYmxlLWNlbGw7CiAgICAgIH0KICAgICAgLmxheW91dCAuc2l6ZSwKICAgICAgLmxheW91dCAuc2l6ZS14IHsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgIH0KICAgICAgLmxheW91dCAuc2l6ZS14IHsKICAgICAgICBmb250LXdlaWdodDogYm9sZDsKICAgICAgICBjb2xvcjogIzg4ODsKICAgICAgfQogICAgICAubGF5b3V0IC5zZW1hbnRpY3MgewogICAgICAgIGZvbnQtc2l6ZTogc21hbGxlcjsKICAgICAgICBmb250LXdlaWdodDogYm9sZDsKICAgICAgICBjb2xvcjogIzQ4YzsKICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CiAgICAgIH0KICAgICAgLmxheW91dCAuYWxpZ25tZW50IHsKICAgICAgICAvKiBNYWtlIHRoZSBiYWNrZ3JvdW5kIGV4dGVuZCBvdXRzaWRlIHRoZSBib3ggKi8KICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgcGFkZGluZzogMC41ZW07CiAgICAgICAgbWFyZ2luLXRvcDogLTAuNWVtOwogICAgICAgIHdpZHRoOiA1MCU7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgfQogICAgPC9zdHlsZT4KICAgIDxwYXBlci1jYXJkIGlkPSJjYXJkIiBoZWFkaW5nPSJbW25vZGUubmFtZV1dIiBlbGV2YXRpb249IjIiPgogICAgICA8ZGl2IGlkPSJzdWJoZWFkZXIiPltbX3N1YmhlYWRlcihub2RlKV1dPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNhcmQtY29udGVudCI+CiAgICAgICAgPGRpdiBoaWRkZW49IltbIV9oYXNGbG9wcyhub2RlKV1dIj4KICAgICAgICAgIDxiPkZMT1BTIHV0aWxpemF0aW9uOiA8L2I+CiAgICAgICAgICA8dGYtb3AtYmFyIGNvbG9yPSJbW19mbG9wc0NvbG9yKG5vZGUpXV0iIHZhbHVlPSJbW191dGlsaXphdGlvbihub2RlKV1dIj48L3RmLW9wLWJhcj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGhpZGRlbj0iW1shX2hhc01lbW9yeVV0aWxpemF0aW9uKG5vZGUpXV0iPgogICAgICAgICAgPGI+TWVtb3J5IGJhbmR3aWR0aCB1dGlsaXphdGlvbjogPC9iPgogICAgICAgICAgPHRmLW9wLWJhciBjb2xvcj0iW1tfYndDb2xvcihub2RlKV1dIiB2YWx1ZT0iW1tfbWVtb3J5VXRpbGl6YXRpb24obm9kZSldXSI+PC90Zi1vcC1iYXI+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0idW5hdmFpbGFibGUiIGhpZGRlbj0iW1shX2Z1c2VkKG5vZGUpXV0iPgogICAgICAgICAgUGVyZm9ybWFuY2UgaW5mb3JtYXRpb24gZm9yIGluZGl2aWR1YWwgZnVzZWQgb3BlcmF0aW9ucyBpcyBub3QKICAgICAgICAgIGF2YWlsYWJsZS4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJ1bmF2YWlsYWJsZSIgaGlkZGVuPSJbWyFub2RlLmNhdGVnb3J5XV0iPgogICAgICAgICAgU2VsZWN0IGl0ZW1zIHdpdGhpbiB0aGlzIGNhdGVnb3J5IGZvciBwZXJmb3JtYW5jZSBkZXRhaWxzLgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgaGlkZGVuPSJbWyFub2RlLnhsYS5leHByZXNzaW9uXV0iPgogICAgICAgICAgPGI+WExBIEV4cHJlc3Npb246IDwvYj4KICAgICAgICAgIDxjb2RlIGNsYXNzPSJleHByZXNzaW9uIj5bW25vZGUueGxhLmV4cHJlc3Npb25dXTwvY29kZT4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGhpZGRlbj0iW1shbm9kZS54bGEucHJvdmVuYW5jZV1dIj4KICAgICAgICAgIDxiPlRlbnNvckZsb3cgTmFtZTogPC9iPgogICAgICAgICAgPGNvZGUgY2xhc3M9ImV4cHJlc3Npb24iPltbbm9kZS54bGEucHJvdmVuYW5jZV1dPC9jb2RlPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgaGlkZGVuPSJbWyFub2RlLnhsYS5sYXlvdXRdXSI+CiAgICAgICAgICA8Yj5MYXlvdXQ6IDwvYj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImxheW91dCIgaGlkZGVuPSJbWyFub2RlLnhsYS5sYXlvdXRdXSI+CiAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9Iltbbm9kZS54bGEubGF5b3V0LmRpbWVuc2lvbnNdXSI+CiAgICAgICAgICAgICAgPGRpdiBoaWRkZW49IltbIWluZGV4XV0iPjxzcGFuIGNsYXNzPSJzaXplLXgiPsOXPC9zcGFuPjwvZGl2PgogICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2l6ZSI+W1tpdGVtLnNpemVdXTwvc3Bhbj4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZW1hbnRpY3MiPltbaXRlbS5zZW1hbnRpY3NdXTwvc3Bhbj4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJhbGlnbm1lbnQiIHN0eWxlJD0iYmFja2dyb3VuZC1jb2xvcjpbW19kaW1lbnNpb25Db2xvcihpdGVtKV1dIj5bW19kaW1lbnNpb25IaW50KGl0ZW0pXV08L3NwYW4+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICA8L3BhcGVyLWNhcmQ+CiAgPC90ZW1wbGF0ZT4KCiAgPHNjcmlwdD4vL35+V0VCUEFUSH5+L3RmLW9wLXByb2ZpbGUvdGYtb3AtZGV0YWlscy5odG1sLTIuanMKUG9seW1lcih7aXM6InRmLW9wLWRldGFpbHMiLHByb3BlcnRpZXM6e25vZGU6e3R5cGU6T2JqZWN0LG5vdGlmeTohMCxvYnNlcnZlcjoiX3VwZGF0ZUNhcmQifX0sX3V0aWxpemF0aW9uOnFtLnV0aWxpemF0aW9uLF9tZW1vcnlVdGlsaXphdGlvbjpxbS5tZW1vcnlVdGlsaXphdGlvbixfaGFzRmxvcHM6cW0uaGFzRmxvcHMsX2hhc01lbW9yeVV0aWxpemF0aW9uOnFtLmhhc01lbW9yeVV0aWxpemF0aW9uLF91cGRhdGVDYXJkOmZ1bmN0aW9uKGEpe2EmJihhPXFtLmZsYW1lQ29sb3IocW0udXRpbGl6YXRpb24oYSksLjcpLHRoaXMuJC5jYXJkLnVwZGF0ZVN0eWxlcyh7Ii0tcGFwZXItY2FyZC1iYWNrZ3JvdW5kLWNvbG9yIjphfSkpfSxfc3ViaGVhZGVyOmZ1bmN0aW9uKGEpe3JldHVybiBhP2EueGxhP2EueGxhLmNhdGVnb3J5KyIgb3BlcmF0aW9uIjphLmNhdGVnb3J5PyJPcGVyYXRpb24gY2F0ZWdvcnkiOiJVbmtub3duIjpudWxsfSxfZnVzZWQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEmJgphLnhsYSYmIShhLm1ldHJpY3MmJmEubWV0cmljcy50aW1lKX0sX2RpbWVuc2lvbkNvbG9yOmZ1bmN0aW9uKGEpe2lmKCFhfHwhYS5hbGlnbm1lbnQpcmV0dXJuIG51bGw7YT1hLnNpemUvYS5hbGlnbm1lbnQ7cmV0dXJuIHFtLmZsYW1lQ29sb3IoYS9NYXRoLmNlaWwoYSksMSwuMjUsYz0+MS1NYXRoLnNxcnQoMS1jKSl9LF9kaW1lbnNpb25IaW50OmZ1bmN0aW9uKGEpe2lmKCFhfHwhYS5hbGlnbm1lbnQpcmV0dXJuIG51bGw7dmFyIGM9TWF0aC5jZWlsKGEuc2l6ZS9hLmFsaWdubWVudCksZD0xPT1jPyIiOiI6ICIrYysiIFx1MDBkNyAiK2EuYWxpZ25tZW50O3JldHVybiAwPT1hLnNpemUlYS5hbGlnbm1lbnQ/IkV4YWN0IGZpdCIrZDoiUGFkIHRvICIrYyphLmFsaWdubWVudCtkfSxfZmxvcHNDb2xvcjpmdW5jdGlvbihhKXtyZXR1cm4gcW0uZmxvcHNDb2xvcihxbS51dGlsaXphdGlvbihhKSl9LF9id0NvbG9yOmZ1bmN0aW9uKGEpe3JldHVybiBxbS5id0NvbG9yKHFtLm1lbW9yeVV0aWxpemF0aW9uKGEpKX19KTsKPC9zY3JpcHQ+CjwvZG9tLW1vZHVsZT4KCgoKCjxkb20tbW9kdWxlIGlkPSJ0Zi1vcC1wcm9maWxlIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDEuNWVtOwogICAgICB9CiAgICAgICNjb250cm9sIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZmxvdzogcm93IG5vd3JhcDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgICAgb3ZlcmZsb3c6IGF1dG87CiAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgICAgICBwYWRkaW5nOiAwLjVlbTsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogYm90dG9tOwogICAgICAgIHRleHQtYWxpZ246IGJvdHRvbTsKICAgICAgfQogICAgICAuY29udHJvbFJvd0xlZnQgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1mbG93OiByb3cgbm93cmFwOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgbGluZS1oZWlnaHQ6IDUwcHg7CiAgICAgICAgdGV4dC1hbGlnbjogYm90dG9tOwogICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDsKICAgICAgfQogICAgICAuY29udHJvbFJvd1JpZ2h0IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZmxvdzogcm93IG5vd3JhcDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGxpbmUtaGVpZ2h0OiA1MHB4OwogICAgICAgIHRleHQtYWxpZ246IGJvdHRvbTsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kOwogICAgICB9CiAgICAgIHBhcGVyLXNsaWRlciB7CiAgICAgICAgLS1wYXBlci1zbGlkZXItaW5wdXQ6IHsKICAgICAgICAgIHdpZHRoOiAxMDBweDsKICAgICAgICB9CiAgICAgICAgLS1wYXBlci1zbGlkZXItaGVpZ2h0OiAzcHg7CiAgICAgIH0KICAgICAgI2Rlc2NyaXB0aW9uIHsKICAgICAgICBtYXJnaW4tYm90dG9tOiAyZW07CiAgICAgICAgd2lkdGg6IDYwMHB4OwogICAgICB9CiAgICAgIFtoaWRkZW5dIHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICB9CiAgICA8L3N0eWxlPgogICAgPGRpdiBjbGFzcz0idGYtb3AtcHJvZmlsZSI+CiAgICAgIDxoMz4KICAgICAgICBPdmVyYWxsIFRQVSBGTE9QUyB1dGlsaXphdGlvbiBpcwogICAgICAgIDxzcGFuIHN0eWxlJD0iY29sb3I6W1tfZmxvcHNDb2xvcihfcm9vdCldXSI+CiAgICAgICAgICBbW191dGlsaXphdGlvblBlcmNlbnQoX3Jvb3QpXV08L3NwYW4+CiAgICAgICAgLCBtZW1vcnkgYmFuZHdpZHRoIHV0aWxpemF0aW9uIGlzCiAgICAgICAgPHNwYW4gc3R5bGUkPSJjb2xvcjpbW19id0NvbG9yKF9yb290KV1dIj4KICAgICAgICAgIFtbX21lbW9yeVV0aWxpemF0aW9uUGVyY2VudChfcm9vdCldXTwvc3Bhbj4KICAgICAgPC9oMz4KICAgICAgPGRpdiBpZD0iZGVzY3JpcHRpb24iPgogICAgICAgIDxwPgogICAgICAgICAgTW9kaWZ5aW5nIHlvdXIgbW9kZWwncyBhcmNoaXRlY3R1cmUsIGRhdGEgZGltZW5zaW9ucywgYW5kIGltcHJvdmluZwogICAgICAgICAgdGhlIGVmZmljaWVuY3kgb2YgQ1BVIG9wZXJhdGlvbnMgbWF5IGhlbHAgcmVhY2ggdGhlIFRQVSdzIEZMT1BTCiAgICAgICAgICBwb3RlbnRpYWwuCiAgICAgICAgCiAgICAgICAgPHA+CiAgICAgICAgICAiSWRsZSIgcmVwcmVzZW50cyB0aGUgcG9ydGlvbiBvZiB0aGUgdG90YWwgZXhlY3V0aW9uIHRpbWUgb24gZGV2aWNlCiAgICAgICAgICB0aGF0IGlzIGlkbGUuIFdhc3RlZCB0aW1lIGlzIGRlZmluZWQgYnkKICAgICAgICAgIDxjb2RlPlJ1bnRpbWVGcmFjdGlvbiAqICgxIC0gbWF4KEZsb3BzVXRpbGl6YXRpb24sCiAgICAgICAgICAgIE1lbW9yeVV0aWxpemF0aW9uKSk8L2NvZGU+LgogICAgICAgIAogICAgICA8L2Rpdj4KICAgICAgPGRpdiBpZD0iY29udHJvbCI+CiAgICAgICAgPHNwYW4gY2xhc3M9ImNvbnRyb2xSb3dMZWZ0IiBoaWRkZW4kPSJbWyFfaGFzVHdvUHJvZmlsZXNdXSI+QnkgUHJvZ3JhbQogICAgICAgICAgPHBhcGVyLXRvZ2dsZS1idXR0b24gY2hlY2tlZD0ie3tpc0J5Q2F0ZWdvcnl9fSI+IDwvcGFwZXItdG9nZ2xlLWJ1dHRvbj5CeSBDYXRlZ29yeTwvc3Bhbj4KICAgICAgICAKICAgICAgICA8c3BhbiBjbGFzcz0iY29udHJvbFJvd0xlZnQiPlNob3cgdG9wCiAgICAgICAgICA8cGFwZXItc2xpZGVyIG1pbj0iMTAiIG1heD0iMTAwIiBzbmFwcyBzdGVwPSIxMCIgdmFsdWU9Int7Y2hpbGRyZW5Db3VudH19IiBlZGl0YWJsZT4KICAgICAgICAgIDwvcGFwZXItc2xpZGVyPm9wczwvc3Bhbj4KICAgICAgICA8c3BhbiBjbGFzcz0iY29udHJvbFJvd1JpZ2h0Ij4mbmJzcDsKICAgICAgICAgIDxwYXBlci10b2dnbGUtYnV0dG9uIGNoZWNrZWQ9Int7YnlXYXN0ZX19Ij4gPC9wYXBlci10b2dnbGUtYnV0dG9uPlNvcnQKICAgICAgICAgIGJ5IHdhc3RlZCB0aW1lPC9zcGFuPgogICAgICAgIDxzcGFuIGNsYXNzPSJjb250cm9sUm93UmlnaHQiPm9mZiZuYnNwOwogICAgICAgICAgPHBhcGVyLXRvZ2dsZS1idXR0b24gY2hlY2tlZD0ie3tzaG93UDkwfX0iPiA8L3BhcGVyLXRvZ2dsZS1idXR0b24+VG9wCiAgICAgICAgICA5MCU8L3NwYW4+CiAgICAgIDwvZGl2PgogICAgICA8dGYtb3AtdGFibGUgcm9vdC1ub2RlPSJbW19yb290XV0iIGFjdGl2ZT0ie3thY3RpdmV9fSIgYnktd2FzdGU9Int7YnlXYXN0ZX19IiBzaG93LXA5MD0ie3tzaG93UDkwfX0iIGNoaWxkcmVuLWNvdW50PSJ7e2NoaWxkcmVuQ291bnR9fSI+CiAgICAgIDwvdGYtb3AtdGFibGU+CiAgICA8L2Rpdj4KICA8L3RlbXBsYXRlPgoKICA8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdGYtb3AtcHJvZmlsZS90Zi1vcC1wcm9maWxlLmh0bWwuanMKUG9seW1lcih7aXM6InRmLW9wLXByb2ZpbGUiLHByb3BlcnRpZXM6e19kYXRhOnt0eXBlOk9iamVjdCxub3RpZnk6ITB9LF9yb290Ont0eXBlOk9iamVjdCxub3RpZnk6ITB9LGFjdGl2ZTp7dHlwZTpPYmplY3Qsbm90aWZ5OiEwLHZhbHVlOm51bGx9LF9oYXNUd29Qcm9maWxlczp7dHlwZTpCb29sZWFuLGNvbXB1dGVkOiJfY2hlY2tQcm9maWxlcyhfZGF0YSkiLG5vdGlmeTohMH0saXNCeUNhdGVnb3J5Ont0eXBlOkJvb2xlYW4sdmFsdWU6ITEsbm90aWZ5OiEwfSxzaG93UDkwOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEsbm90aWZ5OiEwfSxieVdhc3RlOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEsbm90aWZ5OiEwfSxjaGlsZHJlbkNvdW50Ont0eXBlOk51bWJlcix2YWx1ZToxMCxub3RpZnk6ITB9fSxvYnNlcnZlcnM6WyJfZ2V0Um9vdChfZGF0YSwgaXNCeUNhdGVnb3J5KSJdLF9sb2FkOmZ1bmN0aW9uKGEpe3RoaXMuX2RhdGE9YX0sX2dldFJvb3Q6ZnVuY3Rpb24oYSxjKXt0aGlzLl9yb290PQp0aGlzLl9oYXNUd29Qcm9maWxlcz9jP2EuYnlDYXRlZ29yeTphLmJ5UHJvZ3JhbTphLmJ5Q2F0ZWdvcnl8fGEuYnlQcm9ncmFtfSxfY2hlY2tQcm9maWxlczpmdW5jdGlvbihhKXtyZXR1cm4gbnVsbCE9YS5ieVByb2dyYW0mJm51bGwhPWEuYnlDYXRlZ29yeX0sX3V0aWxpemF0aW9uUGVyY2VudDpmdW5jdGlvbihhKXtyZXR1cm4gcW0ucGVyY2VudChxbS51dGlsaXphdGlvbihhKSl9LF9tZW1vcnlVdGlsaXphdGlvblBlcmNlbnQ6ZnVuY3Rpb24oYSl7cmV0dXJuIHFtLnBlcmNlbnQocW0ubWVtb3J5VXRpbGl6YXRpb24oYSkpfSxfaGFzRmxvcHM6ZnVuY3Rpb24oYSl7cmV0dXJuIDA8YS5tZXRyaWNzLmZsb3BzfSxfZmxvcHNDb2xvcjpmdW5jdGlvbihhKXtyZXR1cm4gcW0uZmxvcHNDb2xvcihxbS51dGlsaXphdGlvbihhKSl9LF9id0NvbG9yOmZ1bmN0aW9uKGEpe3JldHVybiBxbS5id0NvbG9yKHFtLm1lbW9yeVV0aWxpemF0aW9uKGEpKX19KTsKPC9zY3JpcHQ+CjwvZG9tLW1vZHVsZT4KCjxzY3JpcHQ+Ly9+fldFQlBBVEh+fi90Zi1wcm9maWxlLWNvbW1vbi91dGlsLmpzCihmdW5jdGlvbihhKXsoZnVuY3Rpb24oYyl7KGZ1bmN0aW9uKGQpe2QudGltZT1mdW5jdGlvbihmLGcpe2xldCBsPURhdGUubm93KCk7Zz1nKCk7Y29uc29sZS5sb2coZiwiOiIsRGF0ZS5ub3coKS1sLCJtcyIpO3JldHVybiBnfTtkLmdldFRyYWNrZXI9ZnVuY3Rpb24oZil7cmV0dXJue3NldE1lc3NhZ2U6ZnVuY3Rpb24oZyl7Zi5zZXQoInByb2dyZXNzIix7dmFsdWU6Zi5wcm9ncmVzcy52YWx1ZSxtc2c6Z30pfSx1cGRhdGVQcm9ncmVzczpmdW5jdGlvbihnKXtmLnNldCgicHJvZ3Jlc3MiLHt2YWx1ZTpmLnByb2dyZXNzLnZhbHVlK2csbXNnOmYucHJvZ3Jlc3MubXNnfSl9LHJlcG9ydEVycm9yOmZ1bmN0aW9uKGcsbCl7Y29uc29sZS5lcnJvcihsLnN0YWNrKTtmLnNldCgicHJvZ3Jlc3MiLHt2YWx1ZTpmLnByb2dyZXNzLnZhbHVlLG1zZzpnLGVycm9yOiEwfSl9fX07ZC5ydW5UYXNrPWZ1bmN0aW9uKGYsZyxsLGspe2suc2V0TWVzc2FnZShmKTt0cnl7bGV0IG09YS5wcm9maWxlLnV0aWwudGltZShmLApsKTtrLnVwZGF0ZVByb2dyZXNzKGcpO3JldHVybiBtfWNhdGNoKG0pe2sucmVwb3J0RXJyb3IoIkZhaWxlZCAiK2YsbSl9fX0pKGMudXRpbHx8KGMudXRpbD17fSkpfSkoYS5wcm9maWxlfHwoYS5wcm9maWxlPXt9KSl9KSh0Znx8KHRmPXt9KSk7Cjwvc2NyaXB0PgoKPHNjcmlwdD4vL35+V0VCUEFUSH5+L21lbW9yeS12aWV3ZXIvdXRpbHMuanMKdmFyIHJtOwooZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYyhkLGYsZyxsKXtyZXR1cm4icmdiYSgiK01hdGgucm91bmQoMjU1KmQpKyIsIitNYXRoLnJvdW5kKDI1NSpmKSsiLCIrTWF0aC5yb3VuZCgyNTUqZykrIiwiK2wrIikifWEuYnl0ZXNUb01pQj1mdW5jdGlvbihkKXtyZXR1cm4gZC8xMDQ4NTc2fTthLmJ5dGVTaXplT2ZQcmltaXRpdmVUeXBlPWZ1bmN0aW9uKGQpe3N3aXRjaChkKXtjYXNlICJQUkVEIjpyZXR1cm4gMTtjYXNlICJTOCI6cmV0dXJuIDE7Y2FzZSAiUzE2IjpyZXR1cm4gMjtjYXNlICJTMzIiOnJldHVybiA0O2Nhc2UgIlM2NCI6cmV0dXJuIDg7Y2FzZSAiVTgiOnJldHVybiAxO2Nhc2UgIlUxNiI6cmV0dXJuIDI7Y2FzZSAiVTMyIjpyZXR1cm4gNDtjYXNlICJVNjQiOnJldHVybiA4O2Nhc2UgIkJGMTYiOnJldHVybiAyO2Nhc2UgIkYxNiI6cmV0dXJuIDI7Y2FzZSAiRjMyIjpyZXR1cm4gNDtjYXNlICJGNjQiOnJldHVybiA4O2Nhc2UgIkM2NCI6cmV0dXJuIDg7Y2FzZSAiVE9LRU4iOnJldHVybiAwO2RlZmF1bHQ6cmV0dXJuIGNvbnNvbGUuZXJyb3IoIlVuaGFuZGxlZCBwcmltaXRpdmUgdHlwZSAiKwpkKSwwfX07YS5mbGFtZUNvbG9yPWZ1bmN0aW9uKGQsZixnLGwpe3ZvaWQgMD09PWYmJihmPTEpO3ZvaWQgMD09PWcmJihnPTEpO3ZvaWQgMD09PWwmJihsPWs9PjEtTWF0aC5zcXJ0KDEtaykpO2lmKGlzTmFOKGQpKXJldHVybiBjKGYsZixmLGcpO2Q9bChkKTtyZXR1cm4uNT5kP2MoZiwyKmQqZiwwLGcpOmMoMiooMS1kKSpmLGYsMCxnKX07YS5wZXJjZW50PWZ1bmN0aW9uKGQpe3JldHVybiBpc05hTihkKT8iLSI6Ljk5NTw9ZD8iMTAwJSI6MUUtNT5kPyIwLjAwJSI6KDEwMCpkKS50b1ByZWNpc2lvbigyKSsiJSJ9fSkocm18fChybT17fSkpOwo8L3NjcmlwdD4KCgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vbWVtb3J5LXZpZXdlci9zaGFwZS5qcwp2YXIgc207CihmdW5jdGlvbihhKXtjbGFzcyBje2NvbnN0cnVjdG9yKGQpe3RoaXMuZWxlbWVudFR5cGU9ZC5lbGVtZW50VHlwZS50b1N0cmluZygpO3RoaXMuZGltZW5zaW9ucz1kLmRpbWVuc2lvbnMubWFwKGY9PnBhcnNlSW50KGYsMTApKTtkLnR1cGxlU2hhcGVzJiYodGhpcy50dXBsZVNoYXBlcz1kLnR1cGxlU2hhcGVzLm1hcChmPT5uZXcgYyhmKSkpO3RoaXMubGF5b3V0PWQubGF5b3V0fXJlc29sdmVTaGFwZUluZGV4KGQpe3JldHVybiBkLnJlZHVjZSgoZixnKT0+Zi50dXBsZVNoYXBlc1tnXSx0aGlzKX11bnBhZGRlZEhlYXBTaXplQnl0ZXMoKXtpZigiVE9LRU4iPT09dGhpcy5lbGVtZW50VHlwZSlyZXR1cm4gMDtpZigiVFVQTEUiPT09dGhpcy5lbGVtZW50VHlwZSlyZXR1cm4gOCp0aGlzLnR1cGxlU2hhcGVzLmxlbmd0aDtsZXQgZD0wO2lmKHRoaXMubGF5b3V0JiYiREVOU0UiIT10aGlzLmxheW91dC5mb3JtYXQpIlNQQVJTRSI9PXRoaXMubGF5b3V0LmZvcm1hdCYmKGY9cGFyc2VJbnQodGhpcy5sYXlvdXQubWF4U3BhcnNlRWxlbWVudHMsCjEwKSxkPWYqcm0uYnl0ZVNpemVPZlByaW1pdGl2ZVR5cGUodGhpcy5lbGVtZW50VHlwZSksZCs9Zip0aGlzLmRpbWVuc2lvbnMubGVuZ3RoKjgpO2Vsc2V7dmFyIGY9dGhpcy5kaW1lbnNpb25zLnJlZHVjZSgoZyxsKT0+ZypsLDEpO2QrPWYqcm0uYnl0ZVNpemVPZlByaW1pdGl2ZVR5cGUodGhpcy5lbGVtZW50VHlwZSl9cmV0dXJuIGR9aHVtYW5TdHJpbmdXaXRoTGF5b3V0KCl7aWYoIlRVUExFIj09PXRoaXMuZWxlbWVudFR5cGUpe3ZhciBkPSIoIjtsZXQgZj0iIjtmb3IoY29uc3QgZyBvZiB0aGlzLnR1cGxlU2hhcGVzKWQ9ZCtmK2cuaHVtYW5TdHJpbmdXaXRoTGF5b3V0KCksZj0iLCAiO3JldHVybiBkKz0iKSJ9ZD10aGlzLmVsZW1lbnRUeXBlLnRvTG93ZXJDYXNlKCkrIlsiO2QrPXRoaXMuZGltZW5zaW9ucy5qb2luKCkrIl0iOyJPUEFRVUUiIT09dGhpcy5lbGVtZW50VHlwZSYmIlRPS0VOIiE9PXRoaXMuZWxlbWVudFR5cGUmJjA8dGhpcy5kaW1lbnNpb25zLmxlbmd0aCYmdGhpcy5sYXlvdXQmJgooZCs9dGhpcy5odW1hbkxheW91dFN0cmluZyh0aGlzLmxheW91dCkpO3JldHVybiBkfWh1bWFuTGF5b3V0U3RyaW5nKGQpe3JldHVybiJTUEFSU0UiPT1kLmZvcm1hdD8ic3BhcnNleyIrZC5tYXhTcGFyc2VFbGVtZW50cysifSI6IkRFTlNFIj09ZC5mb3JtYXQ/InsiK2QubWlub3JUb01ham9yLmpvaW4oKSsifSI6IiJ9fWEuU2hhcGU9Y30pKHNtfHwoc209e30pKTsKPC9zY3JpcHQ+CjxzY3JpcHQ+Ly9+fldFQlBBVEh+fi9tZW1vcnktdmlld2VyL2xvZ2ljYWwtYnVmZmVyLmpzCnZhciB0bTsoZnVuY3Rpb24oYSl7Y2xhc3MgY3tjb25zdHJ1Y3RvcihkKXt0aGlzLmluc3RydWN0aW9uTmFtZT10aGlzLmNvbXB1dGF0aW9uTmFtZT0iIjt0aGlzLnNoYXBlSW5kZXg9W107dGhpcy5pZD1wYXJzZUludChkLmlkLDEwKTt0aGlzLnNpemU9cGFyc2VJbnQoZC5zaXplLDEwKTt0aGlzLmNvbG9yPXBhcnNlSW50KGQuY29sb3IsMTApO3RoaXMuaW5pdEJ1ZmZlckxvY2F0aW9uXyhkLmRlZmluZWRBdCl9aW5pdEJ1ZmZlckxvY2F0aW9uXyhkKXtkJiYodGhpcy5jb21wdXRhdGlvbk5hbWU9ZC5jb21wdXRhdGlvbk5hbWUsdGhpcy5pbnN0cnVjdGlvbk5hbWU9ZC5pbnN0cnVjdGlvbk5hbWUsdGhpcy5zaGFwZUluZGV4PWQuc2hhcGVJbmRleC5tYXAoZj0+cGFyc2VJbnQoZiwxMCkpKX19YS5Mb2dpY2FsQnVmZmVyPWN9KSh0bXx8KHRtPXt9KSk7Cjwvc2NyaXB0Pgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vbWVtb3J5LXZpZXdlci9idWZmZXItYWxsb2NhdGlvbi5qcwp2YXIgdW07KGZ1bmN0aW9uKGEpe2NsYXNzIGN7Y29uc3RydWN0b3IoZCl7dGhpcy5pbmRleD1wYXJzZUludChkLmluZGV4LDEwKTt0aGlzLnNpemU9cGFyc2VJbnQoZC5zaXplLDEwKTt0aGlzLmlzVGhyZWFkTG9jYWw9ZC5pc1RocmVhZExvY2FsfHwhMTt0aGlzLmFzc2lnbmVkPWQuYXNzaWduZWQubWFwKGY9Pm5ldyB2bS5CdWZmZXJBbGxvY2F0aW9uQXNzaWduZWQoZikpO3RoaXMuZ3JvdXBOYW1lPXRoaXMuZ2V0R3JvdXBOYW1lKGQpfWdldEdyb3VwTmFtZShkKXtyZXR1cm4gZC5pc0VudHJ5Q29tcHV0YXRpb25QYXJhbWV0ZXI/IlBhcmFtZXRlciI6ZC5tYXliZUxpdmVPdXQ/Ik91dHB1dCI6ZC5pc1RocmVhZExvY2FsPyJUaHJlYWQtbG9jYWwiOiJUZW1wb3JhcnkifX1hLkJ1ZmZlckFsbG9jYXRpb249Y30pKHVtfHwodW09e30pKTsKPC9zY3JpcHQ+CjxzY3JpcHQ+Ly9+fldFQlBBVEh+fi9tZW1vcnktdmlld2VyL2J1ZmZlci1hbGxvY2F0aW9uLWFzc2lnbmVkLmpzCnZhciB2bTsoZnVuY3Rpb24oYSl7Y2xhc3MgY3tjb25zdHJ1Y3RvcihkKXt0aGlzLmxvZ2ljYWxCdWZmZXJJZD1wYXJzZUludChkLmxvZ2ljYWxCdWZmZXJJZCwxMCk7dGhpcy5vZmZzZXQ9cGFyc2VJbnQoZC5vZmZzZXQsMTApO3RoaXMuc2l6ZT1wYXJzZUludChkLnNpemUsMTApfX1hLkJ1ZmZlckFsbG9jYXRpb25Bc3NpZ25lZD1jfSkodm18fCh2bT17fSkpOwo8L3NjcmlwdD4KPHNjcmlwdD4vL35+V0VCUEFUSH5+L21lbW9yeS12aWV3ZXIvaGxvLWluc3RydWN0aW9uLmpzCnZhciB3bTsoZnVuY3Rpb24oYSl7Y2xhc3MgY3tjb25zdHJ1Y3RvcihkKXt0aGlzLm5hbWU9ZC5uYW1lP2QubmFtZToiIjt0aGlzLm9wY29kZT1kLm9wY29kZT9kLm9wY29kZToiIjt0aGlzLnNoYXBlPWQuc2hhcGU/bmV3IHNtLlNoYXBlKGQuc2hhcGUpOm51bGw7ZC5tZXRhZGF0YSYmKHRoaXMudGZPcE5hbWU9ZC5tZXRhZGF0YS5vcE5hbWU/ZC5tZXRhZGF0YS5vcE5hbWU6IiIpfX1hLkhsb0luc3RydWN0aW9uPWN9KSh3bXx8KHdtPXt9KSk7Cjwvc2NyaXB0PgoKPHNjcmlwdD4vL35+V0VCUEFUSH5+L21lbW9yeS12aWV3ZXIvbWVtb3J5LXVzYWdlLmpzCnZhciB4bTsKKGZ1bmN0aW9uKGEpe2NsYXNzIGN7Y29uc3RydWN0b3IoZCl7dGhpcy5idWZmZXJzXz1bXTt0aGlzLmlkVG9CdWZmZXJfPXt9O3RoaXMuaWRUb0J1ZmZlckFsbG9jYXRpb25fPXt9O3RoaXMubmFtZVRvSGxvXz17fTt0aGlzLnVucGFkZGVkUGVha0hlYXBTaXplQnl0ZXM9dGhpcy5wZWFrSGVhcFNpemVCeXRlcz10aGlzLnJlc3RfPXRoaXMubkNvbG9yXz0wO3RoaXMucGVha0xvZ2ljYWxCdWZmZXJzPVtdO3RoaXMuaW5kZWZpbml0ZU1lbW9yeVVzYWdlQnl0ZXM9dGhpcy5wZWFrSGVhcFNpemVQb3NpdGlvbj0wO3RoaXMuaGVhcFNpemVzPVtdO3RoaXMudW5wYWRkZWRIZWFwU2l6ZXM9W107dGhpcy5tYXhIZWFwPVtdO3RoaXMubWF4SGVhcEJ5U2l6ZT1bXTt0aGlzLmJ5U2l6ZVRvTWF4SGVhcD1bXTt0aGlzLm1heEhlYXBUb0J5U2l6ZT1bXTt0aGlzLmxvZ2ljYWxCdWZmZXJTcGFucz17fTt0aGlzLnVuU2VlbkxvZ2ljYWxCdWZmZXJzXz1uZXcgU2V0O3RoaXMuc2VlbkJ1ZmZlckFsbG9jYXRpb25zXz1uZXcgU2V0Owp0aGlzLnNtYWxsQnVmZmVyU2l6ZT0xNjM4NDt0aGlzLmluaXRIbG9JbnN0cnVjdGlvbnNfKGQuaGxvTW9kdWxlKTt0aGlzLmluaXRNZW1vcnlVc2FnZV8oZC5idWZmZXJBc3NpZ25tZW50KTt0aGlzLmluaXRNYXhIZWFwXygpfWluaXRIbG9JbnN0cnVjdGlvbnNfKGQpe2lmKGQpZm9yKGNvbnN0IGYgb2YgZC5jb21wdXRhdGlvbnMpZm9yKGNvbnN0IGcgb2YgZi5pbnN0cnVjdGlvbnMpZy5uYW1lJiYodGhpcy5uYW1lVG9IbG9fW2cubmFtZV09bmV3IHdtLkhsb0luc3RydWN0aW9uKGcpKTtlbHNlIGNvbnNvbGUud2FybigiTWlzc2luZyBobG9Nb2R1bGUsIHNraXBwaW5nIHVucGFkZGVkIGFsbG9jYXRpb24gc2l6ZSBhbmFseXNpcyIpfWluaXRNZW1vcnlVc2FnZV8oZCl7ZD8odGhpcy5pbml0QnVmZmVyc18oZCksdGhpcy5pbml0QWxsb2NhdGlvbnNfKGQpLChkPXRoaXMuZ2V0SGJtSGVhcFRyYWNlXyhkKSk/dGhpcy5maW5kUGVha01lbW9yeVVzYWdlXyhkKTpjb25zb2xlLmVycm9yKCJNaXNzaW5nIGhibSBoZWFwIHNpbXVsYXRvciB0cmFjZS4iKSk6CmNvbnNvbGUuZXJyb3IoIk5vIGJ1ZmZlciBhc3NpZ25tZW50IGluZm8iKX1nZXRIYm1IZWFwVHJhY2VfKGQpe2Zvcihjb25zdCBmIG9mIGQuaGVhcFNpbXVsYXRvclRyYWNlcylmb3IoY29uc3QgZyBvZiBmLmV2ZW50cylpZihnLmJ1ZmZlcklkJiYoZD10aGlzLmlkVG9CdWZmZXJfW2cuYnVmZmVySWRdKSl7aWYoMCE9ZC5jb2xvcilicmVhaztyZXR1cm4gZn1yZXR1cm4gbnVsbH1pbml0QnVmZmVyc18oZCl7Zm9yKGxldCBmIG9mIGQubG9naWNhbEJ1ZmZlcnMpZD1uZXcgdG0uTG9naWNhbEJ1ZmZlcihmKSx0aGlzLmJ1ZmZlcnNfLnB1c2goZCksdGhpcy5pZFRvQnVmZmVyX1tkLmlkXT1kLHRoaXMudW5TZWVuTG9naWNhbEJ1ZmZlcnNfLmFkZChkLmlkKX1pbml0QWxsb2NhdGlvbnNfKGQpe2Zvcihjb25zdCBmIG9mIGQuYnVmZmVyQWxsb2NhdGlvbnMpe2Q9bmV3IHVtLkJ1ZmZlckFsbG9jYXRpb24oZik7Zm9yKGNvbnN0IGcgb2YgZi5hc3NpZ25lZClnLmxvZ2ljYWxCdWZmZXJJZCYmKHRoaXMuaWRUb0J1ZmZlckFsbG9jYXRpb25fW2cubG9naWNhbEJ1ZmZlcklkXT0KZCl9fW5ld0hlYXBPYmplY3RfKGQsZixnLGwsayl7Y29uc3QgbT1nP3JtLmJ5dGVzVG9NaUIoZy51bnBhZGRlZEhlYXBTaXplQnl0ZXMoKSk6MDtyZXR1cm57aW5zdHJ1Y3Rpb25OYW1lOmYuaW5zdHJ1Y3Rpb25OYW1lLGxvZ2ljYWxCdWZmZXJJZDpmLmlkLHVucGFkZGVkU2l6ZU1pQjptLHRmT3BOYW1lOmwudGZPcE5hbWUsb3Bjb2RlOmwub3Bjb2RlLHNpemVNaUI6cm0uYnl0ZXNUb01pQihmLnNpemUpLGNvbG9yOmQsc2hhcGU6Zz9nLmh1bWFuU3RyaW5nV2l0aExheW91dCgpOiIiLGdyb3VwTmFtZTprfX1hZGRIZWFwT2JqZWN0XyhkLGYsZyl7aWYoZi5zaXplPD1kLnNtYWxsQnVmZmVyU2l6ZSlkLnJlc3RfKz1mLnNpemU7ZWxzZSBpZihmLmluc3RydWN0aW9uTmFtZSl7dmFyIGw9ZC5uYW1lVG9IbG9fW2YuaW5zdHJ1Y3Rpb25OYW1lXTtpZihsKXt2YXIgaz1sLnNoYXBlLnJlc29sdmVTaGFwZUluZGV4KGYuc2hhcGVJbmRleCk7ZC5tYXhIZWFwLnB1c2goZC5uZXdIZWFwT2JqZWN0XyhkLm5Db2xvcl8rKywKZixrLGwsZykpfX19aW5pdE1heEhlYXBfKCl7Zm9yKHZhciBkIG9mIHRoaXMucGVha0xvZ2ljYWxCdWZmZXJzKXtjb25zdCBmPXRoaXMuaWRUb0J1ZmZlckFsbG9jYXRpb25fW2RdO3RoaXMuYWRkSGVhcE9iamVjdF8odGhpcyx0aGlzLmlkVG9CdWZmZXJfW2RdLGY/Zi5ncm91cE5hbWU6IiIpfTAhPXRoaXMucmVzdF8mJihkPSJzbWFsbCAoXHgzYyIrdGhpcy5zbWFsbEJ1ZmZlclNpemUvMTAyNCsiIEtpQikiLHRoaXMubWF4SGVhcC5wdXNoKHtpbnN0cnVjdGlvbk5hbWU6ZCxzaXplTWlCOnJtLmJ5dGVzVG9NaUIodGhpcy5yZXN0XyksY29sb3I6MCxncm91cE5hbWU6ZH0pKTtkPXRoaXMubWF4SGVhcC5tYXAoZnVuY3Rpb24oZixnKXtyZXR1cm57aW5kOmcsdmFsOmZ9fSk7ZC5zb3J0KChmLGcpPT5nLnZhbC5zaXplTWlCLWYudmFsLnNpemVNaUIpO3RoaXMubWF4SGVhcEJ5U2l6ZT1kLm1hcChmdW5jdGlvbihmKXtyZXR1cm4gZi52YWx9KTt0aGlzLmJ5U2l6ZVRvTWF4SGVhcD1kLm1hcChmdW5jdGlvbihmKXtyZXR1cm4gZi5pbmR9KTsKdGhpcy5tYXhIZWFwVG9CeVNpemUubGVuZ3RoPXRoaXMubWF4SGVhcC5sZW5ndGg7Zm9yKGQ9MDtkPHRoaXMuYnlTaXplVG9NYXhIZWFwLmxlbmd0aDtkKyspdGhpcy5tYXhIZWFwVG9CeVNpemVbdGhpcy5ieVNpemVUb01heEhlYXBbZF1dPWR9ZmluZFBlYWtNZW1vcnlVc2FnZV8oZCl7bGV0IGY9W10sZz1bXTt2YXIgbD1bXTtsZXQgaz1bXSxtPTAscD0wLHE9MCxyPTAsdD0wO2Zvcihjb25zdCB5IG9mIGQuZXZlbnRzKXtmLnB1c2gocm0uYnl0ZXNUb01pQihtKSk7Zy5wdXNoKHJtLmJ5dGVzVG9NaUIocCkpO2NvbnN0IHg9cGFyc2VJbnQoeS5idWZmZXJJZCwxMCk7ZD10aGlzLmlkVG9CdWZmZXJfW3hdO3RoaXMudW5TZWVuTG9naWNhbEJ1ZmZlcnNfLmRlbGV0ZSh4KTt2YXIgdj10aGlzLmlkVG9CdWZmZXJBbGxvY2F0aW9uX1t4XTt2JiZ0aGlzLnNlZW5CdWZmZXJBbGxvY2F0aW9uc18uYWRkKHYuaW5kZXgpO3Y9bnVsbDtkLmluc3RydWN0aW9uTmFtZSYmIiIhPWQuaW5zdHJ1Y3Rpb25OYW1lJiYKKHY9dGhpcy5uYW1lVG9IbG9fW2QuaW5zdHJ1Y3Rpb25OYW1lXS5zaGFwZS5yZXNvbHZlU2hhcGVJbmRleChkLnNoYXBlSW5kZXgpKTtzd2l0Y2goeS5raW5kLnRvU3RyaW5nKCkpe2Nhc2UgIkFMTE9DIjpjYXNlICJTSEFSRV9XSVRIIjpsLnB1c2goeCk7bSs9ZC5zaXplO3YmJihwKz12LnVucGFkZGVkSGVhcFNpemVCeXRlcygpKTt0aGlzLmxvZ2ljYWxCdWZmZXJTcGFuc1t4XT1bZi5sZW5ndGgsLTFdO20+cSYmKHE9bSxyPXAsdD1mLmxlbmd0aCxrPWwuc2xpY2UoKSk7YnJlYWs7Y2FzZSAiRlJFRSI6bD1sLmZpbHRlcihDPT5DIT09eCk7bS09ZC5zaXplO3YmJihwLT12LnVucGFkZGVkSGVhcFNpemVCeXRlcygpKTt0aGlzLmxvZ2ljYWxCdWZmZXJTcGFuc1t4XVsxXT1mLmxlbmd0aDswPm0mJmNvbnNvbGUuZXJyb3IoImhlYXBfc2l6ZV9ieXRlcyBceDNjIDAiKTticmVhaztkZWZhdWx0OmNvbnNvbGUubG9nKCJFUlJPUjogdW5rbm93biBoZWFwIGV2ZW50IGtpbmQ6Iix5KX19Zi5wdXNoKHJtLmJ5dGVzVG9NaUIobSkpOwpsPXRoaXMuZmluZEluZGVmaW5pdGVNZW1vcnlVc2FnZV8odGhpcy51blNlZW5Mb2dpY2FsQnVmZmVyc18pO3RoaXMucGVha0hlYXBTaXplQnl0ZXM9cStsO3RoaXMudW5wYWRkZWRQZWFrSGVhcFNpemVCeXRlcz1yK2w7dGhpcy5wZWFrTG9naWNhbEJ1ZmZlcnM9azt0aGlzLnBlYWtIZWFwU2l6ZVBvc2l0aW9uPXQ7Y29uc3QgQT1ybS5ieXRlc1RvTWlCKGwpO3RoaXMuaGVhcFNpemVzPWYubWFwKHk9PnkrQSk7dGhpcy51bnBhZGRlZEhlYXBTaXplcz1nLm1hcCh5PT55K0EpfWZpbmRJbmRlZmluaXRlTWVtb3J5VXNhZ2VfKGQpe2xldCBmPTA7ZC5mb3JFYWNoKGc9Pntjb25zdCBsPXRoaXMuaWRUb0J1ZmZlckFsbG9jYXRpb25fW2ddO2wuaXNUaHJlYWRMb2NhbHx8dGhpcy5zZWVuQnVmZmVyQWxsb2NhdGlvbnNfLmhhcyhsLmluZGV4KXx8KHRoaXMuc2VlbkJ1ZmZlckFsbG9jYXRpb25zXy5hZGQobC5pbmRleCksZis9bC5zaXplLHRoaXMuYWRkSGVhcE9iamVjdF8odGhpcyx0aGlzLmlkVG9CdWZmZXJfW2ddLApsLmdyb3VwTmFtZSkpfSk7cmV0dXJuIHRoaXMuaW5kZWZpbml0ZU1lbW9yeVVzYWdlQnl0ZXM9Zn19YS5NZW1vcnlVc2FnZT1jfSkoeG18fCh4bT17fSkpOwo8L3NjcmlwdD4KCgoKCgo8ZG9tLW1vZHVsZSBpZD0ibXYtbGluZS1jaGFydCI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlIGluY2x1ZGU9InBsb3R0YWJsZS1zdHlsZSI+PC9zdHlsZT4KICAgIDxkaXYgY2xhc3M9Im12LWxpbmUtY2hhcnQiPgogICAgICA8aDI+V29ya2luZyBTcGFjZSBTaXplIChNaUIpIHZzIFByb2dyYW0gT3JkZXIgKEhMTyBTZXF1ZW5jZSk8L2gyPgogICAgICA8ZGl2IGlkPSJjaGFydGRpdiIgc3R5bGU9IndpZHRoOjEyMDBweDtoZWlnaHQ6Mzg0cHgiPjwvZGl2PgogICAgICA8ZGl2IGlkPSJtYXhoZWFwLWRldGFpbHMiPgogICAgICAgIDxlbT5Ib3ZlciBvdmVyIGEgYmFyIGZvciBidWZmZXIgZGV0YWlscyB0byBhcHBlYXIgb24gdGhlIGxlZnQuPC9lbT4KICAgICAgPC9kaXY+CiAgICAgIDxoMz5CeSBQcm9ncmFtIE9yZGVyPC9oMz4KICAgICAgPGRpdiBpZD0ibWF4aGVhcGNoYXJ0IiBzdHlsZT0id2lkdGg6MTIwMHB4O2hlaWdodDoyMDBweCI+PC9kaXY+CiAgICAgIDxoMz5CeSBTaXplPC9oMz4KICAgICAgPGRpdiBpZD0ibWF4aGVhcHNpemVjaGFydCIgc3R5bGU9IndpZHRoOjEyMDBweDtoZWlnaHQ6MjAwcHgiPjwvZGl2PgogICAgPC9kaXY+CiAgPC90ZW1wbGF0ZT4KICA8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vbWVtb3J5LXZpZXdlci9tdi1saW5lLWNoYXJ0LmpzCnZhciB5bTsKKGZ1bmN0aW9uKCl7UG9seW1lcih7aXM6Im12LWxpbmUtY2hhcnQiLHByb3BlcnRpZXM6e2RhdGE6e3R5cGU6T2JqZWN0LG5vdGlmeTohMCxvYnNlcnZlcjoiX2RhdGFDaGFuZ2VkIn0sYWN0aXZlOnt0eXBlOk9iamVjdCxub3RpZnk6ITAsb2JzZXJ2ZXI6Il9yZW5kZXJTcGFucyJ9LGJ1ZmZlclNpemVzOnt0eXBlOkFycmF5LG5vdGlmeTohMH0sdW5wYWRkZWRCdWZmZXJTaXplczp7dHlwZTpBcnJheSxub3RpZnk6ITB9LG1heEhlYXA6e3R5cGU6QXJyYXksbm90aWZ5OiEwfSxtYXhIZWFwQnlTaXplOnt0eXBlOkFycmF5LG5vdGlmeTohMH0sc3BhblBsb3Q6e3R5cGU6T2JqZWN0LG5vdGlmeTohMH0sY29sb3JTY2FsZTp7dHlwZTpPYmplY3Qsbm90aWZ5OiEwfSxfc2VsZWN0ZWRFbnRpdHlJblNyY0NoYXJ0Ont0eXBlOk9iamVjdCxub3RpZnk6ITAsb2JzZXJ2ZXI6Il9zZWxlY3RlZEVudGl0eUNoYW5nZWQifSxfc2VsZWN0ZWRFbnRpdHlJbkRzdENoYXJ0Ont0eXBlOk9iamVjdCxub3RpZnk6ITAsCm9ic2VydmVyOiJfc2VsZWN0ZWRFbnRpdHlDaGFuZ2VkIn0sX3N5bWJvbFRvRXZlbnRDYWxsYmFjazp7dHlwZTpPYmplY3QsdmFsdWU6KCk9Pm5ldyBNYXB9fSxfbWFrZUNoYXJ0RGF0YXNldCgpe2lmKHRoaXMuZGF0YSl7dGhpcy5idWZmZXJTaXplcz10aGlzLmRhdGEuaGVhcFNpemVzLm1hcCgoZCxmKT0+W2YsZF0pO3RoaXMudW5wYWRkZWRCdWZmZXJTaXplcz10aGlzLmRhdGEudW5wYWRkZWRIZWFwU2l6ZXMubWFwKChkLGYpPT5bZixkXSk7dmFyIGE9dGhpcy5kYXRhLm1heEhlYXA7dGhpcy5kYXRhLm1heEhlYXAucmVkdWNlKGZ1bmN0aW9uKGQsZixnKXthW2ddLm9mZnNldD1kO3JldHVybiBkK2Yuc2l6ZU1pQn0sMCk7dGhpcy5tYXhIZWFwPWE7dmFyIGM9dGhpcy5kYXRhLm1heEhlYXBCeVNpemU7dGhpcy5kYXRhLm1heEhlYXBCeVNpemUucmVkdWNlKGZ1bmN0aW9uKGQsZixnKXtjW2ddLm9mZnNldEJ5U2l6ZT1kO3JldHVybiBkK2Yuc2l6ZU1pQn0sMCk7dGhpcy5tYXhIZWFwQnlTaXplPQpjfX0sX2RyYXdQcm9ncmFtT3JkZXIoKXtpZih0aGlzLmRhdGEpe3ZhciBhPW5ldyBQbG90dGFibGUuU2NhbGVzLkxpbmVhcixjPW5ldyBQbG90dGFibGUuU2NhbGVzLkxpbmVhcixkPW5ldyBQbG90dGFibGUuQXhlcy5OdW1lcmljKGEsImJvdHRvbSIpLGY9bmV3IFBsb3R0YWJsZS5BeGVzLk51bWVyaWMoYywibGVmdCIpLGc9bmV3IFBsb3R0YWJsZS5QbG90cy5MaW5lO2cuYWRkRGF0YXNldChuZXcgUGxvdHRhYmxlLkRhdGFzZXQodGhpcy5idWZmZXJTaXplcykpO2cueChmdW5jdGlvbih2KXtyZXR1cm4gdlswXX0sYSkueShmdW5jdGlvbih2KXtyZXR1cm4gdlsxXX0sYykuYXR0cigic3Ryb2tlIiwicmVkIik7dmFyIGw9bmV3IFBsb3R0YWJsZS5QbG90cy5MaW5lO2wuYWRkRGF0YXNldChuZXcgUGxvdHRhYmxlLkRhdGFzZXQodGhpcy51bnBhZGRlZEJ1ZmZlclNpemVzKSk7bC54KGZ1bmN0aW9uKHYpe3JldHVybiB2WzBdfSxhKS55KGZ1bmN0aW9uKHYpe3JldHVybiB2WzFdfSxjKS5hdHRyKCJzdHJva2UiLAoiZ3JleSIpO3ZhciBrPW5ldyBQbG90dGFibGUuUGxvdHMuUmVjdGFuZ2xlLG09dGhpcy5idWZmZXJTaXplcy5sZW5ndGgvNDA7ay5hZGREYXRhc2V0KG5ldyBQbG90dGFibGUuRGF0YXNldChbdGhpcy5idWZmZXJTaXplc1t0aGlzLmRhdGEucGVha0hlYXBTaXplUG9zaXRpb25dXSkpO2sueChmdW5jdGlvbih2KXtyZXR1cm4gdlswXS1tLzJ9LGEpLnkoZnVuY3Rpb24oKXtyZXR1cm4gMH0sYykueDIoZnVuY3Rpb24odil7cmV0dXJuIHZbMF0rbS8yfSkueTIoZnVuY3Rpb24odil7cmV0dXJuIHZbMV19KS5hdHRyKCJmaWxsIiwicmVkIikuYXR0cigib3BhY2l0eSIsLjMpO3ZhciBwPXRoaXMuY29sb3JTY2FsZSxxPW5ldyBQbG90dGFibGUuUGxvdHMuUmVjdGFuZ2xlLHI9dGhpcy5kYXRhLmxvZ2ljYWxCdWZmZXJTcGFucyx0PXRoaXMubWF4SGVhcC5tYXAodj0+e2NvbnN0IEE9clt2LmxvZ2ljYWxCdWZmZXJJZF07cmV0dXJuIEE/e2lkOnYubG9naWNhbEJ1ZmZlcklkLHNwYW46QSxzaXplOnYuc2l6ZU1pQiwKY29sb3I6di5jb2xvcn06bnVsbH0pO3Q9dC5maWx0ZXIodj0+bnVsbCE9PXYpO3EuYWRkRGF0YXNldChuZXcgUGxvdHRhYmxlLkRhdGFzZXQodCkpO3EueChmdW5jdGlvbih2KXtyZXR1cm4gdi5zcGFuWzBdfSxhKS55KGZ1bmN0aW9uKCl7cmV0dXJuIDB9LGMpLngyKGZ1bmN0aW9uKHYpe3JldHVybiB2LnNwYW5bMV19KS55MihmdW5jdGlvbih2KXtyZXR1cm4gdi5zaXplfSkuYXR0cigiZmlsbCIsZnVuY3Rpb24odil7cmV0dXJuKHYuY29sb3IlMTApLnRvU3RyaW5nKCl9LHApLmF0dHIoImZpbGwtb3BhY2l0eSIsMCk7dGhpcy5zcGFuUGxvdD1xO3A9bmV3IFBsb3R0YWJsZS5TY2FsZXMuQ29sb3I7cC5yYW5nZShbInJlZCIsImdyZXkiXSk7cC5kb21haW4oWyJTaXplcyIsIlVucGFkZGVkIFNpemVzIl0pO3A9bmV3IFBsb3R0YWJsZS5Db21wb25lbnRzLkxlZ2VuZChwKTtwLm1heEVudHJpZXNQZXJSb3coMik7YT1uZXcgUGxvdHRhYmxlLkNvbXBvbmVudHMuR3JpZGxpbmVzKGEsYyk7Cmc9bmV3IFBsb3R0YWJsZS5Db21wb25lbnRzLkdyb3VwKFtrLGcsbCxhLHFdKTtkPW5ldyBQbG90dGFibGUuQ29tcG9uZW50cy5UYWJsZShbW251bGwscF0sW2YsZ10sW251bGwsZF1dKTtmPWQzLnNlbGVjdCh0aGlzLiQuY2hhcnRkaXYpO2Yuc2VsZWN0QWxsKCIuY29tcG9uZW50IikucmVtb3ZlKCk7ZC5yZW5kZXJUbyhmKX19LF9kcmF3TWF4SGVhcCgpe2xldCBhPW5ldyBQbG90dGFibGUuU2NhbGVzLkxpbmVhcixjPW5ldyBQbG90dGFibGUuU2NhbGVzLkxpbmVhcjtuZXcgUGxvdHRhYmxlLkF4ZXMuTnVtZXJpYyhjLCJ0b3AiKTtuZXcgUGxvdHRhYmxlLkF4ZXMuTnVtZXJpYyhhLCJsZWZ0Iik7bGV0IGQ9dGhpcy5jb2xvclNjYWxlO2QzLnNlbGVjdCh0aGlzLiQubWF4aGVhcGNoYXJ0KS5zZWxlY3RBbGwoIi5jb21wb25lbnQiKS5yZW1vdmUoKTtkMy5zZWxlY3QodGhpcy4kLm1heGhlYXBzaXplY2hhcnQpLnNlbGVjdEFsbCgiLmNvbXBvbmVudCIpLnJlbW92ZSgpO3RoaXMuX21heEhlYXBDaGFydE1vdXNlTW92ZUtleSYmCih0aGlzLl91bmxpc3Rlbih0aGlzLl9tYXhIZWFwQ2hhcnRNb3VzZU1vdmVLZXkpLHRoaXMuX21heEhlYXBDaGFydE1vdXNlTW92ZUtleT1udWxsKTt0aGlzLl9tYXhIZWFwU2l6ZUNoYXJ0TW91c2VNb3ZlS2V5JiYodGhpcy5fdW5saXN0ZW4odGhpcy5fbWF4SGVhcFNpemVDaGFydE1vdXNlTW92ZUtleSksdGhpcy5fbWF4SGVhcFNpemVDaGFydE1vdXNlTW92ZUtleT1udWxsKTtsZXQgZj1uZXcgUGxvdHRhYmxlLlBsb3RzLlJlY3RhbmdsZTtmLmFkZERhdGFzZXQobmV3IFBsb3R0YWJsZS5EYXRhc2V0KHRoaXMubWF4SGVhcCkpLngoZnVuY3Rpb24obCl7cmV0dXJuIGwub2Zmc2V0fSxjKS55KGZ1bmN0aW9uKCl7cmV0dXJuIDB9LGEpLngyKGZ1bmN0aW9uKGwpe3JldHVybiBsLm9mZnNldCtsLnNpemVNaUJ9KS55MihmdW5jdGlvbigpe3JldHVybiAxMn0pLmF0dHIoImZpbGwiLGZ1bmN0aW9uKGwpe3JldHVybihsLmNvbG9yJTEwKS50b1N0cmluZygpfSxkKS5hdHRyKCJvcGFjaXR5IiwKIjAuNiIpLnJlbmRlclRvKGQzLnNlbGVjdCh0aGlzLiQubWF4aGVhcGNoYXJ0KSk7bGV0IGc9bmV3IFBsb3R0YWJsZS5QbG90cy5SZWN0YW5nbGU7Zy5hZGREYXRhc2V0KG5ldyBQbG90dGFibGUuRGF0YXNldCh0aGlzLm1heEhlYXBCeVNpemUpKS54KGZ1bmN0aW9uKGwpe3JldHVybiBsLm9mZnNldEJ5U2l6ZX0sYykueShmdW5jdGlvbigpe3JldHVybiAwfSxhKS54MihmdW5jdGlvbihsKXtyZXR1cm4gbC5vZmZzZXRCeVNpemUrbC5zaXplTWlCfSkueTIoZnVuY3Rpb24oKXtyZXR1cm4gMTJ9KS5hdHRyKCJmaWxsIixmdW5jdGlvbihsKXtyZXR1cm4obC5jb2xvciUxMCkudG9TdHJpbmcoKX0sZCkuYXR0cigib3BhY2l0eSIsIjAuNiIpLnJlbmRlclRvKGQzLnNlbGVjdCh0aGlzLiQubWF4aGVhcHNpemVjaGFydCkpO3RoaXMuX21heEhlYXBDaGFydE1vdXNlTW92ZUtleT10aGlzLl9saXN0ZW4odGhpcy4kLm1heGhlYXBjaGFydCwibW91c2Vtb3ZlIixsPT57dGhpcy5fb25Ib3ZlckludGVyYWN0aW9uKGwsCmYsZyx0aGlzLmRhdGEubWF4SGVhcFRvQnlTaXplKX0se3Bhc3NpdmU6ITB9KTt0aGlzLl9tYXhIZWFwU2l6ZUNoYXJ0TW91c2VNb3ZlS2V5PXRoaXMuX2xpc3Rlbih0aGlzLiQubWF4aGVhcHNpemVjaGFydCwibW91c2Vtb3ZlIixsPT57dGhpcy5fb25Ib3ZlckludGVyYWN0aW9uKGwsZyxmLHRoaXMuZGF0YS5ieVNpemVUb01heEhlYXApfSx7cGFzc2l2ZTohMH0pfSxfbGlzdGVuKGEsYyxkLGY9bnVsbCl7Y29uc3QgZz1TeW1ib2woKTthLmFkZEV2ZW50TGlzdGVuZXIoYyxkLGYpO3RoaXMuX3N5bWJvbFRvRXZlbnRDYWxsYmFjay5zZXQoZyx7ZXZlbnROYW1lOmMsbm9kZTphLGNhbGxiYWNrOmQsb3B0aW9uczpmfSk7cmV0dXJuIGd9LF91bmxpc3RlbihhKXtjb25zb2xlLmFzc2VydCh0aGlzLl9zeW1ib2xUb0V2ZW50Q2FsbGJhY2suaGFzKGEpLCJDYW5ub3QgdW5saXN0ZW4gYW4gdW5rbm93biBldmVudCIpO2E9dGhpcy5fc3ltYm9sVG9FdmVudENhbGxiYWNrLmdldChhKTtjb25zdCB7Y2FsbGJhY2s6YywKZXZlbnROYW1lOmQsbm9kZTpmLG9wdGlvbnM6Z309YTtmLnJlbW92ZUV2ZW50TGlzdGVuZXIoZCxjLGcpfSxfb25Ib3ZlckludGVyYWN0aW9uKGEsYyxkLGYpe3ZhciBnPWMucm9vdEVsZW1lbnQoKS5ub2RlKCk7KHtsZWZ0Omd9PWcuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpO2NvbnN0IGw9YS5jbGllbnRYLWc7KGE9Yy5lbnRpdGllcygpLmZpbmQoaz0+e2NvbnN0IHt4Om0sd2lkdGg6cH09ay5ib3VuZHM7cmV0dXJuIG08PWwmJm0rcD49bH0pKT8odGhpcy5hY3RpdmU9YS5kYXR1bSx0aGlzLl9zZWxlY3RlZEVudGl0eUluU3JjQ2hhcnQ9YSx0aGlzLl9zZWxlY3RlZEVudGl0eUluRHN0Q2hhcnQ9ZC5lbnRpdGllcygpW2ZbYS5pbmRleF1dKTp0aGlzLmFjdGl2ZT10aGlzLl9zZWxlY3RlZEVudGl0eUluRHN0Q2hhcnQ9dGhpcy5fc2VsZWN0ZWRFbnRpdHlJblNyY0NoYXJ0PW51bGx9LF9zZWxlY3RlZEVudGl0eUNoYW5nZWQoYSxjKXtjJiZjLnNlbGVjdGlvbi5hdHRyKCJvcGFjaXR5IiwKIjAuNiIpO2EmJmEuc2VsZWN0aW9uLmF0dHIoIm9wYWNpdHkiLCIxLjAiKX0sX3JlbmRlclNwYW5zKGEpe3RoaXMuc3BhblBsb3QmJih0aGlzLnNwYW5QbG90LnNlbGVjdGlvbnMoKS5hdHRyKCJmaWxsLW9wYWNpdHkiLCIwIiksYSYmdGhpcy5zcGFuUGxvdC5lbnRpdGllcygpLmZvckVhY2goZnVuY3Rpb24oYyl7Yy5zZWxlY3Rpb24uYXR0cigiZmlsbC1vcGFjaXR5IixjLmRhdHVtLmlkPT09YS5sb2dpY2FsQnVmZmVySWQ/MTowKX0pKX0sX3JlZHJhdzpmdW5jdGlvbigpe3RoaXMuZGF0YSYmKHRoaXMuY29sb3JTY2FsZT1uZXcgUGxvdHRhYmxlLlNjYWxlcy5Db2xvcigiQ2F0ZWdvcnkxMCIpLHRoaXMuX21ha2VDaGFydERhdGFzZXQoKSx0aGlzLl9kcmF3UHJvZ3JhbU9yZGVyKCksdGhpcy5fZHJhd01heEhlYXAoKSl9LF9kYXRhQ2hhbmdlZChhKXthJiZ0aGlzLl9yZWRyYXcoKX0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl9yZWRyYXcoKX19KX0pKHltfHwoeW09e30pKTsKPC9zY3JpcHQ+CjwvZG9tLW1vZHVsZT4KCgoKCgoKPGRvbS1tb2R1bGUgaWQ9InRmLW12LWJhciI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIGhlaWdodDogMS41ZW07CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNWVtOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT4KCgo8ZG9tLW1vZHVsZSBpZD0iYnVmZmVyLWRldGFpbHMiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgcGFwZXItY2FyZCB7CiAgICAgICAgLS1wYXBlci1jYXJkLWhlYWRlci1jb2xvcjogd2hpdGU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KICAgICAgdGYtbXYtYmFyIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQogICAgICAjc3ViaGVhZGVyIHsKICAgICAgICBwYWRkaW5nOiAwIDE2cHggNnB4OwogICAgICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyk7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHRvcDogLTEwcHg7CiAgICAgIH0KICAgICAgLmNhcmQtY29udGVudCB7CiAgICAgICAgYmFja2dyb3VuZDogI2ZmZjsKICAgICAgfQogICAgICAuY2FyZC1jb250ZW50ID4gZGl2IHsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxZW07CiAgICAgIH0KICAgICAgLmV4cHJlc3Npb24gewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDsKICAgICAgfQogICAgPC9zdHlsZT4KICAgIDxwYXBlci1jYXJkIGlkPSJjYXJkIiBoZWFkaW5nPSJbW25vZGUuaW5zdHJ1Y3Rpb25OYW1lXV0iIGhpZGRlbj0iW1shbm9kZV1dIiBlbGV2YXRpb249IjIiPgogICAgICA8ZGl2IGlkPSJzdWJoZWFkZXIiPltbX3N1YmhlYWRlcihub2RlKV1dPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNhcmQtY29udGVudCI+CiAgICAgICAgPGRpdiBoaWRkZW49IltbIXNpemVdXSI+CiAgICAgICAgICA8aDQ+U2l6ZTogPHNwYW4+W1tzaXplXV08L3NwYW4+PGI+IE1pQjwvYj48L2g0PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgaGlkZGVuPSJbWyF1bnBhZGRlZFNpemVdXSI+CiAgICAgICAgICA8Yj5VbnBhZGRlZCBTaXplOiA8L2I+PHNwYW4+W1t1bnBhZGRlZFNpemVdXTwvc3Bhbj48Yj4gTWlCPC9iPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgaGlkZGVuPSJbWyFwYWRkaW5nXV0iPgogICAgICAgICAgPGI+RXh0cmEgbWVtb3J5IGR1ZSB0byBwYWRkaW5nOiA8L2I+PHNwYW4+W1twYWRkaW5nXV08L3NwYW4+PGI+IE1pQjwvYj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGhpZGRlbj0iW1shZXhwYW5zaW9uXV0iPgogICAgICAgICAgPGI+RXhwYW5zaW9uOiA8L2I+PHNwYW4+W1tleHBhbnNpb25dXTwvc3Bhbj48Yj5YPC9iPgogICAgICAgICAgPHRmLW12LWJhciB2YWx1ZT0iW1t1dGlsaXphdGlvbl1dIj48L3RmLW12LWJhcj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGhpZGRlbj0iW1shbm9kZS5zaGFwZV1dIj4KICAgICAgICAgIDxiPlNoYXBlIChhbmQgbWlub3ItdG8tbWFqb3Igb3JkZXIpOiA8L2I+CiAgICAgICAgICA8Y29kZSBjbGFzcz0iZXhwcmVzc2lvbiI+W1tub2RlLnNoYXBlXV08L2NvZGU+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBoaWRkZW49IltbIW5vZGUudGZPcE5hbWVdXSI+CiAgICAgICAgICA8Yj5UZiBPcCBOYW1lOiA8L2I+CiAgICAgICAgICA8Y29kZSBjbGFzcz0iZXhwcmVzc2lvbiI+W1tub2RlLnRmT3BOYW1lXV08L2NvZGU+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBoaWRkZW49IltbIW5vZGUuZ3JvdXBOYW1lXV0iPgogICAgICAgICAgPGI+QWxsb2NhdGlvbiBUeXBlOiA8L2I+PHNwYW4+W1tub2RlLmdyb3VwTmFtZV1dPC9zcGFuPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIDwvcGFwZXItY2FyZD4KICA8L3RlbXBsYXRlPgogIDxzY3JpcHQ+Ly9+fldFQlBBVEh+fi9tZW1vcnktdmlld2VyL2J1ZmZlci1kZXRhaWxzLmpzCnZhciB6bTsKKGZ1bmN0aW9uKCl7UG9seW1lcih7aXM6InRmLW12LWJhciIscHJvcGVydGllczp7dmFsdWU6e3R5cGU6TnVtYmVyLG5vdGlmeTohMCxvYnNlcnZlcjoiX3VwZGF0ZVZhbHVlIn19LF91cGRhdGVWYWx1ZTpmdW5jdGlvbihhKXtjb25zdCBjPXJtLmZsYW1lQ29sb3IoYSk7YT1ybS5wZXJjZW50KGEpO3RoaXMuc3R5bGUuYmFja2dyb3VuZD1gbGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCAke2N9ICR7YX0sICNjY2MgJHthfSlgfX0pO1BvbHltZXIoe2lzOiJidWZmZXItZGV0YWlscyIscHJvcGVydGllczp7bm9kZTp7dHlwZTpPYmplY3Qsbm90aWZ5OiEwLG9ic2VydmVyOiJfdXBkYXRlQ2FyZCJ9LHNpemU6e3R5cGU6U3RyaW5nLG5vdGlmeTohMH0sdW5wYWRkZWRTaXplOnt0eXBlOlN0cmluZyxub3RpZnk6ITB9LHBhZGRpbmc6e3R5cGU6U3RyaW5nLG5vdGlmeTohMH0sZXhwYW5zaW9uOnt0eXBlOlN0cmluZyxub3RpZnk6ITB9LHV0aWxpemF0aW9uOnt0eXBlOk51bWJlcixub3RpZnk6ITB9fSwKX3VwZGF0ZUNhcmQ6ZnVuY3Rpb24oYSl7aWYoYSl7dGhpcy5zaXplPWEuc2l6ZU1pQi50b0ZpeGVkKDEpO3ZhciBjPSJyZ2IoMTkyLDE5MiwxOTIpIjthLnVucGFkZGVkU2l6ZU1pQiYmKHRoaXMudW5wYWRkZWRTaXplPWEudW5wYWRkZWRTaXplTWlCLnRvRml4ZWQoMSksdGhpcy5wYWRkaW5nPShhLnNpemVNaUItYS51bnBhZGRlZFNpemVNaUIpLnRvRml4ZWQoMSksdGhpcy51dGlsaXphdGlvbj1hLnVucGFkZGVkU2l6ZU1pQi9hLnNpemVNaUIsdGhpcy5leHBhbnNpb249KDEvdGhpcy51dGlsaXphdGlvbikudG9GaXhlZCgxKSxjPXJtLmZsYW1lQ29sb3IodGhpcy51dGlsaXphdGlvbiwuNykpO3RoaXMuJC5jYXJkLnVwZGF0ZVN0eWxlcyh7Ii0tcGFwZXItY2FyZC1iYWNrZ3JvdW5kLWNvbG9yIjpjfSk7dGhpcy4kLnN1YmhlYWRlci5zdHlsZS5iYWNrZ3JvdW5kQ29sb3I9Y319LF9zdWJoZWFkZXI6ZnVuY3Rpb24oYSl7cmV0dXJuIGEmJmEub3Bjb2RlP2Eub3Bjb2RlKyIgb3BlcmF0aW9uIjoKIiJ9fSl9KSh6bXx8KHptPXt9KSk7Cjwvc2NyaXB0Pgo8L2RvbS1tb2R1bGU+CgoKPGRvbS1tb2R1bGUgaWQ9Im1lbW9yeS12aWV3ZXItZGFzaGJvYXJkIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBvdmVyZmxvdy14OiBhdXRvOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CiAgICAgICNkZXNjcmlwdGlvbiB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMmVtOwogICAgICAgIHdpZHRoOiA2MDBweDsKICAgICAgfQogICAgICBtdi1saW5lLWNoYXJ0IHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8ZGl2IGNsYXNzPSJtZW1vcnktdmlld2VyLWRhc2hib2FyZCIgc3R5bGU9Im92ZXJmbG93OmF1dG8iPgogICAgICA8aDM+TW9kdWxlIG5hbWU6IDxzcGFuPltbbW9kdWxlTmFtZV9dXTwvc3Bhbj48L2gzPgogICAgICA8aDM+CiAgICAgICAgUGVhayBtZW1vcnkgYWxsb2NhdGlvbiBpcyA8c3Bhbj57e3BlYWtIZWFwU2l6ZU1pQl99fTwvc3Bhbj4gTWlCCiAgICAgICAgPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToyMHB4IiBoaWRkZW49Int7IXVucGFkZGVkUGVha0hlYXBTaXplTWlCX319Ij4oIHt7dW5wYWRkZWRQZWFrSGVhcFNpemVNaUJffX0gTWlCIHdpdGhvdXQgcGFkZGluZyk8L3NwYW4+CiAgICAgIDwvaDM+CiAgICAgIDxkaXYgaWQ9ImRlc2NyaXB0aW9uIj4KICAgICAgICA8cD4KICAgICAgICAgIE1vZGlmeWluZyB5b3VyIG1vZGVsJ3MgYXJjaGl0ZWN0dXJlLCBiYXRjaCBzaXplIGFuZCBkYXRhIGRpbWVudGlvbnMKICAgICAgICAgIG1heSBoZWxwIHJlZHVjZSB0aGUgbWVtb3J5IGZvb3RwcmludC4KICAgICAgICAKICAgICAgPC9kaXY+CiAgICAgIDxtdi1saW5lLWNoYXJ0IGRhdGE9Int7dXNhZ2V9fSIgYWN0aXZlPSJ7e2FjdGl2ZX19Ij48L212LWxpbmUtY2hhcnQ+CiAgICA8L2Rpdj4KICA8L3RlbXBsYXRlPgogIDxzY3JpcHQ+Ly9+fldFQlBBVEh+fi9tZW1vcnktdmlld2VyL21lbW9yeS12aWV3ZXItZGFzaGJvYXJkLmpzCnZhciBBbTsKKGZ1bmN0aW9uKCl7UG9seW1lcih7aXM6Im1lbW9yeS12aWV3ZXItZGFzaGJvYXJkIixwcm9wZXJ0aWVzOntfZGF0YTp7dHlwZTpPYmplY3Qsbm90aWZ5OiEwLG9ic2VydmVyOiJkYXRhQ2hhbmdlZF8ifSxobG9Nb2R1bGVfOnt0eXBlOk9iamVjdH0sbW9kdWxlTmFtZV86e3R5cGU6U3RyaW5nfSxwZWFrSGVhcFNpemVNaUJfOnt0eXBlOlN0cmluZ30sdW5wYWRkZWRQZWFrSGVhcFNpemVNaUJfOnt0eXBlOlN0cmluZ30sdXNhZ2U6e3R5cGU6T2JqZWN0LG5vdGlmeTohMH0sYWN0aXZlOnt0eXBlOk9iamVjdCxub3RpZnk6ITAsdmFsdWU6bnVsbH19LGRhdGFDaGFuZ2VkXyhhKXthJiZhLmhsb01vZHVsZSYmYS5idWZmZXJBc3NpZ25tZW50JiYodGhpcy5obG9Nb2R1bGVfPWEuaGxvTW9kdWxlLHRoaXMubW9kdWxlTmFtZV89dGhpcy5obG9Nb2R1bGVfLm5hbWU/dGhpcy5obG9Nb2R1bGVfLm5hbWU6IiIsdGhpcy51c2FnZT1uZXcgeG0uTWVtb3J5VXNhZ2UoYSksdGhpcy5wZWFrSGVhcFNpemVNaUJfPXJtLmJ5dGVzVG9NaUIodGhpcy51c2FnZS5wZWFrSGVhcFNpemVCeXRlcykudG9GaXhlZCgyKSwKdGhpcy51bnBhZGRlZFBlYWtIZWFwU2l6ZU1pQl89cm0uYnl0ZXNUb01pQih0aGlzLnVzYWdlLnVucGFkZGVkUGVha0hlYXBTaXplQnl0ZXMpLnRvRml4ZWQoMikpfX0pfSkoQW18fChBbT17fSkpOwo8L3NjcmlwdD4KPC9kb20tbW9kdWxlPgoKCgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vcG9kLXZpZXdlci9wcm90by5qcwo8L3NjcmlwdD4KCgo8ZG9tLW1vZHVsZSBpZD0iZGV0YWlscy1jYXJkIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIHBhcGVyLWNhcmQgewogICAgICAgIG1heC1oZWlnaHQ6IDUwdmg7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICAtLXBhcGVyLWNhcmQtaGVhZGVyLWNvbG9yOiB3aGl0ZTsKICAgICAgICAtLXBhcGVyLWNhcmQtaGVhZGVyOiB7CiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMTc4LCAzNCwgMzQpOwogICAgICAgIH0KICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgLmNhcmQtY29udGVudCA+IGRpdiB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMWVtOwogICAgICAgIHRvcDogLTVweDsKICAgICAgfQoKICAgICAgLnZhbHVlIHsKICAgICAgICBmb250LXdlaWdodDogbm9ybWFsOwogICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OwogICAgICB9CgogICAgICAuaW5mbyB7CiAgICAgICAgZm9udC1zaXplOiAyMHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICB9CgogICAgICAuY29kZS1zdHlsZSB7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8cGFwZXItY2FyZCBpZD0iY2FyZCIgaGVhZGluZz0iW1tfbmFtZV1dIiBoaWRkZW49IltbIV9uYW1lXV0iIGVsZXZhdGlvbj0iMiI+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9Iltbbm9kZXNdXSIgYXM9Im5vZGUiPgogICAgICAgIDxkaXYgY2xhc3M9ImNhcmQtY29udGVudCBpbmZvIj4KICAgICAgICAgIDxkaXYgaGlkZGVuPSJbW19pc1N0ZXAobm9kZSldXSI+CiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIERhdGEgVHJhbnNmZXJyZWQ6CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InZhbHVlIj5bW19zaXplTWlCKG5vZGUuZGF0YVNpemUpXV0gTWlCPC9zcGFuPgogICAgICAgICAgICAKICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgTGF0ZW5jeToKICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idmFsdWUiPltbX2Zvcm1hdChub2RlLmR1cmF0aW9uVXMpXV0gwrVzPC9zcGFuPgogICAgICAgICAgICAKICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgQlc6CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InZhbHVlIj4KICAgICAgICAgICAgICAgIFtbX2JhbmR3aWR0aChub2RlLmRhdGFTaXplLCBub2RlLmR1cmF0aW9uVXMpXV0gR2lCL3M8L3NwYW4+CiAgICAgICAgICAgIAogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGhpZGRlbj0iW1shX2lzQ2hhbm5lbChub2RlKV1dIj4KICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgU2VuZCBEZWxheToKICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idmFsdWUiPltbX2Zvcm1hdChub2RlLnNlbmREZWxheVVzKV1dIMK1czwvc3Bhbj4KICAgICAgICAgICAgCiAgICAgICAgICAgIDxwPkhsbyBOYW1lczoKICAgICAgICAgICAgPGNvZGUgY2xhc3M9ImNvZGUtc3R5bGUiPgogICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9Iltbbm9kZS5obG9OYW1lc11dIj4KICAgICAgICAgICAgICAgICJbW2l0ZW1dXSIKICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8L2NvZGU+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgaGlkZGVuPSJbWyFfaGFzUmVwbGljYUdyb3Vwcyhub2RlKV1dIj4KICAgICAgICAgICAgPHA+UmVwbGljYSBHcm91cHMKICAgICAgICAgICAgPGNvZGUgY2xhc3M9ImNvZGUtc3R5bGUiPgogICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9Iltbbm9kZS5yZXBsaWNhR3JvdXBzXV0iPgogICAgICAgICAgICAgICAge1tbaXRlbS5yZXBsaWNhSWRzXV19PGJyPgogICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDwvY29kZT4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBoaWRkZW49IltbIV9pc1N0ZXAobm9kZSldXSI+CiAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9Iltbc3RlcEJyZWFrZG93bkxheWVyc11dIj4KICAgICAgICAgICAgICA8cD4KICAgICAgICAgICAgICAgIFtbaXRlbS5sYWJlbF1dOgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InZhbHVlIj4KICAgICAgICAgICAgICAgICAgW1tfZ2V0U3RlcEJyZWFrZG93blZhbHVlKG5vZGUsIGl0ZW0ua2V5KV1dIMK1cwogICAgICAgICAgICAgICAgICBbW19nZXRTdGVwQnJlYWtkb3duUGN0KG5vZGUsIGl0ZW0ua2V5KV1dPC9zcGFuPgogICAgICAgICAgICAgIAogICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICA8L3BhcGVyLWNhcmQ+CiAgPC90ZW1wbGF0ZT4KICA8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vcG9kLXZpZXdlci9kZXRhaWxzLWNhcmQuanMKdmFyIEJtOwooZnVuY3Rpb24oKXtQb2x5bWVyKHtpczoiZGV0YWlscy1jYXJkIixwcm9wZXJ0aWVzOntub2Rlczp7dHlwZTpBcnJheX0sX25hbWU6e3R5cGU6U3RyaW5nLGNvbXB1dGVkOiJfY29tcHV0ZU5hbWUobm9kZXMpIn0sc3RlcEJyZWFrZG93bkxheWVyczp7dHlwZTpBcnJheSx2YWx1ZTooKT0+W3trZXk6ImhpZ2hGbG9wc0NvbXB1dGVVcyIsbGFiZWw6IkhpZ2ggZmxvcHMgY29tcHV0ZSJ9LHtrZXk6Imxvd0Zsb3BzQ29tcHV0ZVVzIixsYWJlbDoiTG93IGZsb3BzIGNvbXB1dGUifSx7a2V5OiJob3N0SW5mZWVkRHVyYXRpb25VcyIsbGFiZWw6IkluZmVlZCJ9LHtrZXk6Imhvc3RPdXRmZWVkRHVyYXRpb25VcyIsbGFiZWw6Ik91dGZlZWQifSx7a2V5OiJhbGxSZWR1Y2VDb21wdXRlRHVyYXRpb25VcyIsbGFiZWw6IkFsbFJlZHVjZSBjb21wdXRlIn0se2tleToiYWxsUmVkdWNlU3luY0R1cmF0aW9uVXMiLGxhYmVsOiJBbGxSZWR1Y2Ugc3luYyJ9LHtrZXk6InNlbmREdXJhdGlvblVzIixsYWJlbDoiU2VuZCJ9LAp7a2V5OiJyZWN2RHVyYXRpb25VcyIsbGFiZWw6IlJlY3YifV19fSxfaXNBbGxSZWR1Y2UoYSl7cmV0dXJuIHZvaWQgMCE9YS5yZXBsaWNhR3JvdXBzfSxfaXNDaGFubmVsKGEpe3JldHVybiB2b2lkIDAhPWEuY2hhbm5lbElkfSxfaXNTdGVwKGEpe3JldHVybiB2b2lkIDAhPWEuaG9zdE5hbWV9LF9oYXNSZXBsaWNhR3JvdXBzKGEpe3JldHVybiBhLnJlcGxpY2FHcm91cHMmJjA8YS5yZXBsaWNhR3JvdXBzLmxlbmd0aH0sX2NvbXB1dGVOYW1lOmZ1bmN0aW9uKGEpe2lmKGEmJjAhPWEubGVuZ3RoKXthPWFbMF07aWYodGhpcy5faXNDaGFubmVsKGEpKXJldHVybiJDaGFubmVsICMgIithLmNoYW5uZWxJZDtpZih0aGlzLl9pc0FsbFJlZHVjZShhKSlyZXR1cm4gYS5uYW1lO2lmKHRoaXMuX2lzU3RlcChhKSlyZXR1cm4iU3RlcCBicmVha2Rvd24gb2YgY2hpcCAiK2EuY2hpcElkKyIsIGNvcmUgIithLm5vZGVJZH19LF9ieXRlc1RvTWlCOmZ1bmN0aW9uKGEpe3JldHVybiBhLzEwNDg1NzZ9LApfc2l6ZU1pQjpmdW5jdGlvbihhKXtpZihhKXJldHVybiB0aGlzLl9mb3JtYXQodGhpcy5fYnl0ZXNUb01pQihhKSl9LF9iYW5kd2lkdGg6ZnVuY3Rpb24oYSxjKXtpZihhJiZjKXJldHVybiB0aGlzLl9mb3JtYXQoYS9jLzEwNzMuNzQpfSxfY2hpcElkOmZ1bmN0aW9uKGEpe3JldHVybiBNYXRoLmZsb29yKGEvMil9LF9ub2RlSWQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEmMX0sX2Zvcm1hdDpmdW5jdGlvbihhKXtyZXR1cm4gbnVsbD09YT8iIjphLnRvRml4ZWQoMil9LF9nZXRTdGVwQnJlYWtkb3duVmFsdWU6ZnVuY3Rpb24oYSxjKXtpZihjJiZhKXJldHVybiB0aGlzLl9mb3JtYXQoYVtjXT9hW2NdOjApfSxfZ2V0U3RlcEJyZWFrZG93blBjdDpmdW5jdGlvbihhLGMpe2lmKGMmJmEmJmEudG90YWxEdXJhdGlvblVzJiZhW2NdKXJldHVybihhW2NdL2EudG90YWxEdXJhdGlvblVzKjEwMCkudG9GaXhlZCgyKSsiJSJ9fSl9KShCbXx8KEJtPXt9KSk7Cjwvc2NyaXB0Pgo8L2RvbS1tb2R1bGU+CgoKCgoKCgoKPGRvbS1tb2R1bGUgaWQ9InN0YWNrLWJhci1jaGFydCI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiAxLjVlbTsKICAgICAgfQoKICAgICAgLmF4aXMgdGV4dCB7CiAgICAgICAgZm9udDogMTRweCBzYW5zLXNlcmlmOwogICAgICB9CgogICAgICAuc3ZnLWNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIHBhZGRpbmctYm90dG9tOiA5MCU7IC8qIGFzcGVjdCByYXRpbyAqLwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wOwogICAgICAgIHdpZHRoOiA5MCU7CiAgICAgIH0KCiAgICAgIC5zdmctY29udGVudC1yZXNwb25zaXZlIHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgbGVmdDogMDsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAxMHB4OwogICAgICB9CiAgICA8L3N0eWxlPgogICAgPGRpdiBjbGFzcz0ic3RhY2stYmFyLWNoYXJ0Ij4KICAgICAgPGRpdiBpZD0iY2hhcnQiPjwvZGl2PgogICAgPC9kaXY+CiAgPC90ZW1wbGF0ZT4KICA8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vcG9kLXZpZXdlci9zdGFjay1iYXItY2hhcnQuanMKdmFyIENtOwooZnVuY3Rpb24oKXtQb2x5bWVyKHtpczoic3RhY2stYmFyLWNoYXJ0Iixwcm9wZXJ0aWVzOntkYXRhOnt0eXBlOkFycmF5LHZhbHVlOigpPT5bXSxvYnNlcnZlcjoiX2RhdGFDaGFuZ2VkIn0sYWN0aXZlQmFyOnt0eXBlOk9iamVjdCxub3RpZnk6ITB9LHhEb21haW5GdW5jOnt0eXBlOk9iamVjdH0sc3RhY2tMYXllcnM6e3R5cGU6QXJyYXksdmFsdWU6KCk9PltdLG9ic2VydmVyOiJfb25TdGFja0xheWVyc0NoYW5nZWQifX0sc3RhY2tCYXJDaGFydDpmdW5jdGlvbihhKXtpZihhLmxlbmd0aCYmdGhpcy5pc0F0dGFjaGVkJiYwIT10aGlzLnN0YWNrTGF5ZXJzLmxlbmd0aCl7dmFyIGM9dGhpcy5zdGFja0xheWVycy5tYXAocD0+cC5rZXkpLGQ9dGhpcy5zdGFja0xheWVycy5tYXAocD0+cC5sYWJlbCksZj01MCphLmxlbmd0aCxnPWQzLnNjYWxlQmFuZCgpLnJhbmdlKFswLGZdKS5wYWRkaW5nKC40KSxsPWQzLnNjYWxlTGluZWFyKCkucmFuZ2UoWzI1MCwwXSksaz1kMy5zY2FsZU9yZGluYWwoZDMuc2NoZW1lQ2F0ZWdvcnkxMCkuZG9tYWluKFswLDE5XSksCm09ZDMuc2VsZWN0KHRoaXMuJC5jaGFydCkuc2VsZWN0KCJzdmciKTttLmVtcHR5KCkmJihtPWQzLnNlbGVjdCh0aGlzLiQuY2hhcnQpLmFwcGVuZCgic3ZnIikuYXR0cigid2lkdGgiLE1hdGgubWF4KDE2MDAsZisxMDArMjApKS5hdHRyKCJoZWlnaHQiLDMwMCkuYXBwZW5kKCJnIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKDEwMCwyMCkiKSxtLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwieCBheGlzIikuc3R5bGUoImZvbnQtc2l6ZSIsMTQpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgwLDI1NSkiKSxtLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwieSBheGlzIikuc3R5bGUoImZvbnQtc2l6ZSIsMTQpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgwLDApIikpO2M9ZDMuc3RhY2soKS5rZXlzKGMpLm9yZGVyKGQzLnN0YWNrT3JkZXJOb25lKS5vZmZzZXQoZDMuc3RhY2tPZmZzZXROb25lKShhKTtnLmRvbWFpbihhLm1hcCh0aGlzLnhEb21haW5GdW5jKSk7bC5kb21haW4oWzAsCmQzLm1heChjW2MubGVuZ3RoLTFdLHA9PnBbMF0rcFsxXSldKS5uaWNlKCk7dGhpcy5kcmF3TGF5ZXJzKG0sYyxnLGwsayk7dGhpcy5kcmF3QXhlcyhtLGcsbCwyNTApO2E9ZDMuc2VsZWN0KHRoaXMuJC5jaGFydCkuc2VsZWN0KCIubGVnZW5kIik7YS5lbXB0eSgpJiYoYT1tLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibGVnZW5kIikuYXR0cigiZm9udC1mYW1pbHkiLCJzYW5zLXNlcmlmIikuYXR0cigiZm9udC1zaXplIiwxNCkuYXR0cigidGV4dC1hbmNob3IiLCJzdGFydCIpKTt0aGlzLmRyYXdMZWdlbmQoYSxkLGspfX0sZHJhd0xheWVyczpmdW5jdGlvbihhLGMsZCxmLGcpe2xldCBsPXRoaXM7YT1hLnNlbGVjdEFsbCgiLmxheWVyIikuZGF0YShjKTtjPWEuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImxheWVyIikubWVyZ2UoYSkuc3R5bGUoImZpbGwiLChrLG0pPT5nKG0pKS5zZWxlY3RBbGwoInJlY3QiKS5kYXRhKGs9PmspO2MuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5tZXJnZShjKS5hdHRyKCJ3aWR0aCIsCmQuYmFuZHdpZHRoKCkpLmF0dHIoInkiLGs9PmYoa1sxXSkpLmF0dHIoImhlaWdodCIsaz0+ZihrWzBdKS1mKGtbMV0pKS5hdHRyKCJ4IixrPT5kKGwueERvbWFpbkZ1bmMoay5kYXRhKSkpLm9uKCJtb3VzZW92ZXIiLGZ1bmN0aW9uKGspe2QzLnNlbGVjdCh0aGlzKS5zdHlsZSgib3BhY2l0eSIsLjUpO2wuYWN0aXZlQmFyPWsuZGF0YX0pLm9uKCJtb3VzZW91dCIsZnVuY3Rpb24oKXtkMy5zZWxlY3QodGhpcykuc3R5bGUoIm9wYWNpdHkiLDEpO2wuYWN0aXZlQmFyPW51bGx9KS50cmFuc2l0aW9uKCkuZHVyYXRpb24oMUUzKTthLmV4aXQoKS5yZW1vdmUoKX0sZHJhd0F4ZXM6ZnVuY3Rpb24oYSxjLGQpe2Euc2VsZWN0KCIueC5heGlzIikudHJhbnNpdGlvbigpLmR1cmF0aW9uKDFFMykuY2FsbChkMy5heGlzQm90dG9tKGMpKTthLnNlbGVjdCgiLnkuYXhpcyIpLnRyYW5zaXRpb24oKS5kdXJhdGlvbigxRTMpLmNhbGwoZDMuYXhpc0xlZnQoZCkpfSxkcmF3TGVnZW5kOmZ1bmN0aW9uKGEsCmMsZCl7YT1hLnNlbGVjdEFsbCgiZyIpLmRhdGEoYy5zbGljZSgpKTthLmV4aXQoKS5yZW1vdmUoKTtjPWEuZW50ZXIoKS5hcHBlbmQoImciKTtjLmFwcGVuZCgicmVjdCIpLmF0dHIoIngiLDIwMCkuYXR0cigid2lkdGgiLDE5KS5hdHRyKCJoZWlnaHQiLDE5KTtjLmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLDIyNCkuYXR0cigieSIsOS41KS5hdHRyKCJkeSIsIjAuMzJlbSIpO2E9Yy5tZXJnZShhKTthLmF0dHIoInRyYW5zZm9ybSIsKGYsZyk9PmB0cmFuc2xhdGUoJHsxNTAqZy03NTAqTWF0aC5mbG9vcihnLzUpfSwgJHszMCpNYXRoLmZsb29yKGcvNSl9KWApO2Euc2VsZWN0KCJyZWN0IikuYXR0cigiZmlsbCIsKGYsZyk9PmQoZykpO2Euc2VsZWN0KCJ0ZXh0IikudGV4dChmPT5mKX0scmVkcmF3OmZ1bmN0aW9uKGEpe2EmJjAhPWEubGVuZ3RoJiZ0aGlzLnN0YWNrQmFyQ2hhcnQoYSl9LF9vblN0YWNrTGF5ZXJzQ2hhbmdlZDpmdW5jdGlvbihhKXthJiYwIT1hLmxlbmd0aCYmdGhpcy5yZWRyYXcodGhpcy5kYXRhKX0sCl9kYXRhQ2hhbmdlZDpmdW5jdGlvbihhKXthJiYwIT1hLmxlbmd0aCYmdGhpcy5yZWRyYXcoYSl9LGF0dGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5yZWRyYXcodGhpcy5kYXRhKX19KX0pKENtfHwoQ209e30pKTsKPC9zY3JpcHQ+CjwvZG9tLW1vZHVsZT4KCgoKCgoKCgoKPGRvbS1tb2R1bGUgaWQ9InRvcG9sb2d5LWdyYXBoIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGUgaXM9ImN1c3RvbS1zdHlsZSI+CiAgICAgIC5mbGV4LWhvcml6b250YWwgewogICAgICAgIEBhcHBseSAtLWxheW91dC1ob3Jpem9udGFsOwogICAgICB9CgogICAgICAuZmxleGNoaWxkIHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtZmxleDsKICAgICAgfQoKICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIG1hcmdpbi1yaWdodDogMS41ZW07CiAgICAgIH0KCiAgICAgIC5jZWxscyB7CiAgICAgICAgZmlsbDogI2FhYTsKICAgICAgfQoKICAgICAgLmxhYmVsIHsKICAgICAgICBmb250OiAyNHB4IHNhbnMtc2VyaWY7CiAgICAgICAgdGV4dC1hbmNob3I6IHN0YXJ0OwogICAgICB9CgogICAgICAvKiBkaXNhYmxlIHRleHQgc2VsZWN0aW9uICovCiAgICAgIHN2ZyAqOjpzZWxlY3Rpb24sCiAgICAgIHN2ZyAqOjotbW96LXNlbGVjdGlvbiwKICAgICAgc3ZnICo6Oi13ZWJraXQtc2VsZWN0aW9uIHsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgfQoKICAgICAgcmVjdC5zZWxlY3Rpb24gewogICAgICAgIGZpbGw6IHRyYW5zcGFyZW50OwogICAgICAgIHN0cm9rZTogIzMzMzsKICAgICAgICBzdHJva2UtZGFzaGFycmF5OiA0cHg7CiAgICAgICAgc3Ryb2tlLW9wYWNpdHk6IDAuNTsKICAgICAgfQoKICAgICAgcmVjdC5ib3JkZXJlZCB7CiAgICAgICAgc3Ryb2tlOiAjZTZlNmU2OwogICAgICAgIHN0cm9rZS13aWR0aDogMnB4OwogICAgICB9CgogICAgICByZWN0LmNlbGwtYm9yZGVyIHsKICAgICAgICBzdHJva2U6ICNlZWU7CiAgICAgICAgc3Ryb2tlLXdpZHRoOiAwLjNweDsKICAgICAgfQoKICAgICAgcmVjdC5jZWxsLXNlbGVjdGVkIHsKICAgICAgICBzdHJva2U6IHJnYig1MSwgMTAyLCAxNTMpOwogICAgICAgIHN0cm9rZS13aWR0aDogMC41cHg7CiAgICAgIH0KCiAgICAgIHJlY3QuY2VsbC1ob3ZlciB7CiAgICAgICAgc3Ryb2tlOiAjZjAwOwogICAgICAgIHN0cm9rZS13aWR0aDogMC4zcHg7CiAgICAgIH0KCiAgICAgICN0b29sdGlwIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsKICAgICAgICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDEwcHg7CiAgICAgICAgLW1vei1ib3JkZXItcmFkaXVzOiAxMHB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7CiAgICAgICAgLXdlYmtpdC1ib3gtc2hhZG93OiA0cHggNHB4IDEwcHggcmdiYSgwLCAwLCAwLCAwLjQpOwogICAgICAgIC1tb3otYm94LXNoYWRvdzogNHB4IDRweCAxMHB4IHJnYmEoMCwgMCwgMCwgMC40KTsKICAgICAgICBib3gtc2hhZG93OiA0cHggNHB4IDEwcHggcmdiYSgwLCAwLCAwLCAwLjQpOwogICAgICAgIGhlaWdodDogYXV0bzsKICAgICAgICBwYWRkaW5nOiAxMHB4OwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB3aWR0aDogMjAwcHg7CiAgICAgIH0KCiAgICAgICN0b29sdGlwLmhpZGRlbiB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQoKICAgICAgI3Rvb2x0aXAgcCB7CiAgICAgICAgZm9udDogMTJweCBzYW5zLXNlcmlmOwogICAgICAgIG1hcmdpbjogMDsKICAgICAgICBsaW5lLWhlaWdodDogMjBweDsKICAgICAgfQoKICAgICAgI292ZXJ2aWV3IHsKICAgICAgICBtYXJnaW4tbGVmdDogMjBweDsKICAgICAgfQoKICAgICAgcGFwZXItaXRlbTpob3Zlci5tZW51LW9wdGlvbiB7CiAgICAgICAgYmFja2dyb3VuZDogI2UwZTBlMDsKICAgICAgfQoKICAgICAgcGFwZXItc2xpZGVyIHsKICAgICAgICAtLXBhcGVyLXNsaWRlci1pbnB1dDogewogICAgICAgICAgd2lkdGg6IDE1MHB4OwogICAgICAgIH0KICAgICAgfQoKICAgICAgLm1ldHJpY3MtYnV0dG9uIHsKICAgICAgICBoZWlnaHQ6IDYwcHg7CiAgICAgICAgd2lkdGg6IDYwcHg7CiAgICAgIH0KCiAgICAgIC50b3BvLWhlYWRlciB7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDE2cHg7CiAgICAgIH0KCiAgICAgIC5jb250cm9sLXJvdy1sZWZ0IHsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1mbG93OiByb3cgbm93cmFwOwogICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDsKICAgICAgICBsaW5lLWhlaWdodDogNTBweDsKICAgICAgICBtYXJnaW4tbGVmdDogMTZweDsKICAgICAgICB0ZXh0LWFsaWduOiBib3R0b207CiAgICAgIH0KCiAgICAgIC5tZXRyaWNzLWxhYmVsIHsKICAgICAgICBwYWRkaW5nOiAwLjVlbTsKICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgICB9CgogICAgICAudG9wby10aXRsZSB7CiAgICAgICAgZm9udC1zaXplOiAyNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICAgIGxpbmUtaGVpZ2h0OiAzMnB4OwogICAgICAgIHRleHQtYWxpZ246IGJvdHRvbTsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogYm90dG9tOwogICAgICB9CgogICAgICAjY29udGFpbmVyIHsKICAgICAgICAvKiBUb29sdGlwIHNob3VsZCBwb3NpdGlvbiByZWxhdGl2ZSB0byB0aGUgY29udGFpbmVyLiAqLwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfQogICAgPC9zdHlsZT4KICAgIDxkaXYgY2xhc3M9InRvcG9sb2d5LWdyYXBoIj4KICAgICAgPGRpdiBjbGFzcz0idG9wby1oZWFkZXIgY29udGFpbmVyIGZsZXgtaG9yaXpvbnRhbCI+CiAgICAgICAgPGRpdiBjbGFzcz0iY29udHJvbC1yb3ctbGVmdCB0b3BvLXRpdGxlIj4KICAgICAgICAgIHt7X3RwdVR5cGV9fSB7e190b3RhbENvcmVDb3VudH19CiAgICAgICAgPC9kaXY+CiAgICAgICAgPHNwYW4gY2xhc3M9ImNvbnRyb2wtcm93LWxlZnQgbWV0cmljcy1sYWJlbCI+CiAgICAgICAgICBbW19nZXRTZWxlY3RlZE1ldHJpY0xhYmVsKG1ldHJpY3MsIHNlbGVjdGVkTWV0cmljSWR4KV1dPC9zcGFuPgogICAgICAgIDxwYXBlci1tZW51LWJ1dHRvbiBjbG9zZS1vbi1hY3RpdmF0ZT0idHJ1ZSI+CiAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24gcmFpc2VkIGljb249ImFycm93LWRyb3AtZG93biIgc2xvdD0iZHJvcGRvd24tdHJpZ2dlciIgY2xhc3M9ImRyb3Bkb3duLXRyaWdnZXIgbWV0cmljcy1idXR0b24iPgogICAgICAgICAgPC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgICAgIDxwYXBlci1saXN0Ym94IGNsYXNzPSJkcm9wZG93bi1jb250ZW50IiBzbG90PSJkcm9wZG93bi1jb250ZW50IiBzZWxlY3RlZD0ie3tzZWxlY3RlZE1ldHJpY0lkeH19Ij4KICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1ttZXRyaWNzXV0iPgogICAgICAgICAgICAgIDxwYXBlci1pdGVtIHZhbHVlPSJbW2l0ZW0ua2V5XV0iPltbaXRlbS5sYWJlbF1dPC9wYXBlci1pdGVtPgogICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPC9wYXBlci1saXN0Ym94PgogICAgICAgIDwvcGFwZXItbWVudS1idXR0b24+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGlkPSJjb250YWluZXIiPgogICAgICAgIDxkaXYgaWQ9InRwZ3JhcGgiPjwvZGl2PgogICAgICAgIDxkaXYgaWQ9InRvb2x0aXAiIGNsYXNzPSJoaWRkZW4iPgogICAgICAgICAgPHA+PHNwYW4gaWQ9InZhbHVlIj48L3NwYW4+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgPC90ZW1wbGF0ZT4KICA8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vcG9kLXZpZXdlci90b3BvbG9neS1ncmFwaC5qcwp2YXIgRG07CihmdW5jdGlvbigpe2NvbnN0IGE9IiNmZmZmZDkgI2VkZjhiMSAjYzdlOWI0ICM3ZmNkYmIgIzQxYjZjNCAjMWQ5MWMwICMyMjVlYTggIzI1MzQ5NCAjMDgxZDU4Ii5zcGxpdCgiICIpLGM9ZDMuc2NhbGVRdWFudGlsZSgpLmRvbWFpbihbMCwxXSkucmFuZ2UoYSk7UG9seW1lcih7aXM6InRvcG9sb2d5LWdyYXBoIixwcm9wZXJ0aWVzOntkYXRhOnt0eXBlOk9iamVjdH0scnVuRW52aXJvbm1lbnQ6e3R5cGU6T2JqZWN0fSxtZXRyaWNzOnt0eXBlOkFycmF5LHZhbHVlOigpPT5bXX0sYWN0aXZlQmFyOnt0eXBlOk9iamVjdCxvYnNlcnZlcjoiX2FjdGl2ZUJhckNoYW5nZWQifSxzZWxlY3RlZE1ldHJpY0lkeDp7dHlwZTpOdW1iZXIsdmFsdWU6MCxvYnNlcnZlcjoiX3NlbGVjdGVkTWV0cmljSWR4Q2hhbmdlZCJ9LF90b3BvRGF0YTp7dHlwZTpPYmplY3QsY29tcHV0ZWQ6Il9jb21wdXRlVG9wb0RhdGEoZGF0YSwgcnVuRW52aXJvbm1lbnQsIG1ldHJpY3MpIn0sX3hEaW1lbnNpb246e3R5cGU6TnVtYmVyLGNvbXB1dGVkOiJfY29tcHV0ZVhEaW1lbnNpb24ocnVuRW52aXJvbm1lbnQpIn0sCl95RGltZW5zaW9uOnt0eXBlOk51bWJlcixjb21wdXRlZDoiX2NvbXB1dGVZRGltZW5zaW9uKHJ1bkVudmlyb25tZW50KSJ9LF90b3RhbENvcmVDb3VudDp7dHlwZTpOdW1iZXIsY29tcHV0ZWQ6Il9jb21wdXRlVG90YWxDb3JlQ291bnQoX3hEaW1lbnNpb24sIF95RGltZW5zaW9uKSJ9LF90cHVUeXBlOnt0eXBlOlN0cmluZyxjb21wdXRlZDoiX2NvbXB1dGVUcHVUeXBlKHJ1bkVudmlyb25tZW50KSJ9LF9ob3N0WFN0cmlkZTp7dHlwZTpOdW1iZXIsY29tcHV0ZWQ6Il9jb21wdXRlSG9zdFhTdHJpZGUoX3RwdVR5cGUpIn0sX2hvc3RHcmlkV2lkdGg6e3R5cGU6TnVtYmVyfSxfaG9zdEdyaWRIZWlnaHQ6e3R5cGU6TnVtYmVyfSxfbm9kZUdyaWRIZWlnaHQ6e3R5cGU6TnVtYmVyfSxfbm9kZUdyaWRXaWR0aDp7dHlwZTpOdW1iZXJ9LF9nU1ZHOnt0eXBlOk9iamVjdH19LG9ic2VydmVyczpbImRyYXdUb3BvbG9neShfdG9wb0RhdGEsIHJ1bkVudmlyb25tZW50KSJdLF9jb21wdXRlVG9wb0RhdGE6ZnVuY3Rpb24oZCwKZixnKXtpZihkJiZmJiZmLnRvcG9sb2d5JiZnKXt2YXIgbD1wYXJzZUludChmLnRvcG9sb2d5LnhEaW1lbnNpb24sMTApO3JldHVybiBPYmplY3Qua2V5cyhkLnBvZFN0YXRzUGVyQ29yZSkubWFwKGs9Pntjb25zdCBtPWQucG9kU3RhdHNQZXJDb3JlW2tdO2xldCBwPWcubWFwKHE9Pm1bcS5rZXldP21bcS5rZXldOjApO3JldHVybnt4ZGltOm0uY2hpcElkJWwseWRpbTpNYXRoLmZsb29yKG0uY2hpcElkL2wpLG5pZDptLm5vZGVJZCxjaWQ6bS5jaGlwSWQscmlkOmQuY29yZUlkVG9SZXBsaWNhSWRNYXBba10saG9zdDptLmhvc3ROYW1lLHZhbHVlczpwLHRvdGFsOm0udG90YWxEdXJhdGlvblVzfX0pfX0sX2NvbXB1dGVUcHVUeXBlOmZ1bmN0aW9uKGQpe2lmKGQpcmV0dXJuIGQudHB1VHlwZX0sX2NvbXB1dGVYRGltZW5zaW9uOmZ1bmN0aW9uKGQpe2lmKGQmJmQudG9wb2xvZ3kpcmV0dXJuIHBhcnNlSW50KGQudG9wb2xvZ3kueERpbWVuc2lvbiwxMCl9LF9jb21wdXRlWURpbWVuc2lvbjpmdW5jdGlvbihkKXtpZihkJiYKZC50b3BvbG9neSlyZXR1cm4gcGFyc2VJbnQoZC50b3BvbG9neS55RGltZW5zaW9uLDEwKX0sX2NvbXB1dGVUb3RhbENvcmVDb3VudDpmdW5jdGlvbihkLGYpe3JldHVybiBkKmYqMn0sX2NvbXB1dGVIb3N0WFN0cmlkZTpmdW5jdGlvbihkKXtyZXR1cm4iVFBVIHYzIj09ZD80OjJ9LHRvcG9sb2d5R3JhcGg6ZnVuY3Rpb24oZCl7dGhpcy5faG9zdEdyaWRXaWR0aD10aGlzLmdldEhvc3RHcmlkU2l6ZSh0aGlzLl9ob3N0WFN0cmlkZSk7dGhpcy5faG9zdEdyaWRIZWlnaHQ9dGhpcy5nZXRIb3N0R3JpZFNpemUoMik7dGhpcy5fbm9kZUdyaWRXaWR0aD0xNTt0aGlzLl9ub2RlR3JpZEhlaWdodD0zMDt2YXIgZj10aGlzLl94RGltZW5zaW9uL3RoaXMuX2hvc3RYU3RyaWRlO2NvbnN0IGc9dGhpcy5feURpbWVuc2lvbi8yLGw9QXJyYXkuZnJvbShBcnJheSh0aGlzLl94RGltZW5zaW9uKS5rZXlzKCkpLGs9QXJyYXkuZnJvbShBcnJheSh0aGlzLl95RGltZW5zaW9uKS5rZXlzKCkpO3RoaXMuX2dTVkd8fAoodGhpcy5fZ1NWRz1kMy5zZWxlY3QodGhpcy4kLnRwZ3JhcGgpLmFwcGVuZCgic3ZnIikuYXR0cigid2lkdGgiLDE2MjApLmF0dHIoImhlaWdodCIsZyp0aGlzLl9ob3N0R3JpZEhlaWdodCsxNTApLmFwcGVuZCgiZyIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgzMCw1MCkiKSx0aGlzLl9nU1ZHLmFwcGVuZCgic3ZnOmciKS5jbGFzc2VkKCJncmFwaCIsITApLHRoaXMuX2dTVkcuYXBwZW5kKCJzdmc6ZyIpLmNsYXNzZWQoImxpbmsiLCEwKSx0aGlzLl9nU1ZHLmFwcGVuZCgic3ZnOmRlZnMiKS5hcHBlbmQoInN2ZzptYXJrZXIiKS5hdHRyKCJpZCIsImFycm93IikuYXR0cigidmlld0JveCIsIjAgLTUgMTAgMTAiKS5hdHRyKCJtYXJrZXJXaWR0aCIsNSkuYXR0cigibWFya2VySGVpZ2h0Iiw1KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJzdmc6cGF0aCIpLnN0eWxlKCJzdHJva2UiLCJyZWQiKS5zdHlsZSgiZmlsbCIsInJlZCIpLmF0dHIoImQiLCJNMCwtNUwxMCwwTDAsNSIpKTsKbGV0IG09dGhpcy5fZ1NWRy5zZWxlY3QoIi5ncmFwaCIpO2Y9dGhpcy5jcmVhdGVIb3N0RGF0YShmLGcpO3RoaXMuZHJhd0hvc3RDYXJkcyhtLGYsdGhpcy5faG9zdEdyaWRXaWR0aCx0aGlzLl9ob3N0R3JpZEhlaWdodCk7dGhpcy5kcmF3Tm9kZUNhcmRzKG0sZCxjKTt0aGlzLmRyYXdMYWJlbHMobSxsLGspO3RoaXMuZHJhd0xlZ2VuZChtLHRoaXMuX2hvc3RHcmlkSGVpZ2h0Kk1hdGguY2VpbCh0aGlzLl95RGltZW5zaW9uLzIpKzEwLGMpfSxnZXRIb3N0R3JpZFNpemUoZCl7cmV0dXJuIDMwKzEwKihkLTEpKzMwKmQrMTB9LGdldENoaXBYTG9jOmZ1bmN0aW9uKGQsZil7cmV0dXJuIGQqdGhpcy5faG9zdEdyaWRXaWR0aCsxNSs0MCpmfSxnZXRDaGlwWUxvYzpmdW5jdGlvbihkLGYpe3JldHVybiBkKnRoaXMuX2hvc3RHcmlkSGVpZ2h0KzE1KzQwKmZ9LGdldE5vZGVYTG9jOmZ1bmN0aW9uKGQsZixnKXtyZXR1cm4gdGhpcy5nZXRDaGlwWExvYyhkLGYpK2cqdGhpcy5fbm9kZUdyaWRXaWR0aH0sCmNyZWF0ZUhvc3REYXRhOmZ1bmN0aW9uKGQsZil7bGV0IGc9W107Zm9yKGxldCBsPTA7bDxkO2wrKylmb3IobGV0IGs9MDtrPGY7aysrKWcucHVzaCh7eGRpbTpsLHlkaW06a30pO3JldHVybiBnfSxkcmF3TGFiZWxzOmZ1bmN0aW9uKGQsZixnKXtmPWQuc2VsZWN0QWxsKCIueC1sYWJlbCIpLmRhdGEoZik7Zi5lbnRlcigpLmFwcGVuZCgidGV4dCIpLm1lcmdlKGYpLnRleHQobD0+bCkuYXR0cigieCIsKGwsayk9PnRoaXMuZ2V0Q2hpcFhMb2MoTWF0aC5mbG9vcihrL3RoaXMuX2hvc3RYU3RyaWRlKSxrJXRoaXMuX2hvc3RYU3RyaWRlKSkuYXR0cigieSIsMCkuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKDE1LCAtNikiKS5hdHRyKCJjbGFzcyIsIngtbGFiZWwiKS50cmFuc2l0aW9uKCkuZHVyYXRpb24oMUUzKTtmLmV4aXQoKS5yZW1vdmUoKTtkPWQuc2VsZWN0QWxsKCIueS1sYWJlbCIpLmRhdGEoZyk7ZC5lbnRlcigpLmFwcGVuZCgidGV4dCIpLm1lcmdlKGQpLnRleHQobD0+CmwpLmF0dHIoIngiLDApLmF0dHIoInkiLChsLGspPT50aGlzLmdldENoaXBZTG9jKE1hdGguZmxvb3Ioay8yKSxrJTIpKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoLTEyLDE1KSIpLmF0dHIoImNsYXNzIiwieS1sYWJlbCIpLnRyYW5zaXRpb24oKS5kdXJhdGlvbigxRTMpO2QuZXhpdCgpLnJlbW92ZSgpfSxkcmF3SG9zdENhcmRzOmZ1bmN0aW9uKGQsZixnLGwpe2Q9ZC5zZWxlY3RBbGwoIi5ob3N0IikuZGF0YShmKTtkLmVudGVyKCkuYXBwZW5kKCJyZWN0IikubWVyZ2UoZCkuYXR0cigieCIsaz0+ay54ZGltKmcpLmF0dHIoInkiLGs9PmsueWRpbSpsKS5hdHRyKCJyeCIsNCpnL2wpLmF0dHIoInJ5Iiw0KS5hdHRyKCJjbGFzcyIsImhvc3QgYm9yZGVyZWQiKS5hdHRyKCJ3aWR0aCIsZy0xMCkuYXR0cigiaGVpZ2h0IixsLTEwKS5hdHRyKCJib3JkZXIiLDEpLnN0eWxlKCJmaWxsIiwiRjBGMEYwIikuc3R5bGUoInN0cm9rZSIsCiJibGFjayIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLDEpLnRyYW5zaXRpb24oKS5kdXJhdGlvbigxRTMpO2QuZXhpdCgpLnJlbW92ZSgpfSxkcmF3Tm9kZUNhcmRzOmZ1bmN0aW9uKGQsZixnKXtkPWQuc2VsZWN0QWxsKCIubm9kZSIpLmRhdGEoZik7bGV0IGw9dGhpcyxrPU1hdGgubWF4KHRoaXMuc2VsZWN0ZWRNZXRyaWNJZHgsMCk7ZC5lbnRlcigpLmFwcGVuZCgicmVjdCIpLm1lcmdlKGQpLmF0dHIoImlkIixtPT4icmlkIittLnJpZCkuYXR0cigieCIsbT0+dGhpcy5nZXROb2RlWExvYyhNYXRoLmZsb29yKG0ueGRpbS90aGlzLl9ob3N0WFN0cmlkZSksbS54ZGltJXRoaXMuX2hvc3RYU3RyaWRlLG0ubmlkKSkuYXR0cigieSIsbT0+dGhpcy5nZXRDaGlwWUxvYyhNYXRoLmZsb29yKG0ueWRpbS8yKSxtLnlkaW0lMikpLmF0dHIoInJ4IiwyKS5hdHRyKCJyeSIsNCkuYXR0cigiY2xhc3MiLCJub2RlIGJvcmRlcmVkIikuYXR0cigid2lkdGgiLHRoaXMuX25vZGVHcmlkV2lkdGgpLmF0dHIoImhlaWdodCIsCnRoaXMuX25vZGVHcmlkSGVpZ2h0KS5hdHRyKCJib3JkZXIiLDEpLnN0eWxlKCJzdHJva2UiLCJibGFjayIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLDEpLnN0eWxlKCJmaWxsIixtPT5nKG0udmFsdWVzW2tdL20udG90YWwpKS5vbigibW91c2VvdmVyIixmdW5jdGlvbihtKXtkMy5zZWxlY3QodGhpcykuY2xhc3NlZCgiY2VsbC1ob3ZlciIsITApLnN0eWxlKCJvcGFjaXR5IiwuNSk7dmFyIHA9dGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtjb25zdCBxPWwuJC5jb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkscj1wLngrcC53aWR0aCs1LXEueDtwPXAueS1xLnk7ZDMuc2VsZWN0KGwuJC50b29sdGlwKS5zdHlsZSgibGVmdCIscisicHgiKS5zdHlsZSgidG9wIixwKyJweCIpLnNlbGVjdCgiI3ZhbHVlIikudGV4dChsLl9nZXRUb29sVGlwVGV4dChtKSk7ZDMuc2VsZWN0KGwuJC50b29sdGlwKS5jbGFzc2VkKCJoaWRkZW4iLCExKX0pLm9uKCJtb3VzZW91dCIsZnVuY3Rpb24oKXtkMy5zZWxlY3QodGhpcykuY2xhc3NlZCgiY2VsbC1ob3ZlciIsCiExKS5zdHlsZSgib3BhY2l0eSIsMSk7ZDMuc2VsZWN0KGwuJC50b29sdGlwKS5jbGFzc2VkKCJoaWRkZW4iLCEwKX0pLnRyYW5zaXRpb24oKS5kdXJhdGlvbigxRTMpO2QuZXhpdCgpLnJlbW92ZSgpfSxkcmF3TGlua3M6ZnVuY3Rpb24oZCxmKXtmJiZmLmxlbmd0aCYmZCYmKGQ9ZC5zZWxlY3QoIi5saW5rIikuc2VsZWN0QWxsKCJwYXRoIikuZGF0YShmKSxkLmVudGVyKCkuYXBwZW5kKCJzdmc6cGF0aCIpLm1lcmdlKGQpLmF0dHIoInN0cm9rZS13aWR0aCIsMikuYXR0cigic3Ryb2tlIiwicmVkIikuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCNhcnJvdykiKS5hdHRyKCJkIixnPT50aGlzLmxpbmtUb1BhdGgoZ1swXSxnWzFdKSksZC5leGl0KCkucmVtb3ZlKCkpfSxjb3JlSWRUb1BvczpmdW5jdGlvbihkKXt2YXIgZj1NYXRoLmZsb29yKGQvMik7Y29uc3QgZz1mJXRoaXMuX3hEaW1lbnNpb247Zj1NYXRoLmZsb29yKGYvdGhpcy5feERpbWVuc2lvbik7CnJldHVybnt4OjcuNSt0aGlzLmdldE5vZGVYTG9jKE1hdGguZmxvb3IoZy90aGlzLl9ob3N0WFN0cmlkZSksZyV0aGlzLl9ob3N0WFN0cmlkZSxkJjEpLHk6dGhpcy5nZXRDaGlwWUxvYyhNYXRoLmZsb29yKGYvMiksZiUyKSsxNX19LGxpbmtUb1BhdGg6ZnVuY3Rpb24oZCxmKXtkPXRoaXMuY29yZUlkVG9Qb3MoZD9kOjApO2Y9dGhpcy5jb3JlSWRUb1BvcyhmP2Y6MCk7cmV0dXJuIk0gIitkLngrIiAiK2QueSsiTCAiK2YueCsiICIrZi55fSxfZ2V0VG9vbFRpcFRleHQ6ZnVuY3Rpb24oZCl7Y29uc3QgZj0wPD10aGlzLnNlbGVjdGVkTWV0cmljSWR4P3RoaXMubWV0cmljc1t0aGlzLnNlbGVjdGVkTWV0cmljSWR4XS5sYWJlbDoiIixnPTA8PXRoaXMuc2VsZWN0ZWRNZXRyaWNJZHg/ZC52YWx1ZXNbdGhpcy5zZWxlY3RlZE1ldHJpY0lkeF06MCxsPW5ldyBJbnRsLk51bWJlckZvcm1hdChuYXZpZ2F0b3IubGFuZ3VhZ2Use3N0eWxlOiJwZXJjZW50IixtaW5pbXVtRnJhY3Rpb25EaWdpdHM6Mn0pOwpyZXR1cm5gcG9zOiAoJHtkLnlkaW19LCAke2QueGRpbX0pLAogICAgICAgIGhvc3Q6ICR7ZC5ob3N0fSwKICAgICAgICBjaGlwIGlkOiAke2QuY2lkfSwKICAgICAgICBjb3JlIGlkOiAke2QubmlkfSwKICAgICAgICByZXBsaWNhIGlkOiAke2QucmlkfQogICAgICAgICR7Zj9gJHtmfSBzcGVuZHMgJHtnLnRvRml4ZWQoMil9XHUwMGI1cyBpbiB0b3RhbCwKICAgICAgICAgICAgdGFraW5nICR7bC5mb3JtYXQoZy9kLnRvdGFsKX0gb2YgYSBzdGVwLmA6IiJ9YH0sZHJhd0xlZ2VuZDpmdW5jdGlvbihkLGYsZyl7ZD1kLnNlbGVjdEFsbCgiLmxlZ2VuZCIpLmRhdGEoWzBdLmNvbmNhdChnLnF1YW50aWxlcygpKSxsPT5sKTtkLmV4aXQoKS5yZW1vdmUoKTtnPWQuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImxlZ2VuZCIpO2cuYXBwZW5kKCJyZWN0IikuYXR0cigid2lkdGgiLDYwKS5hdHRyKCJoZWlnaHQiLDMwKS5tZXJnZShkLnNlbGVjdCgicmVjdCIpKS5hdHRyKCJ4IiwobCxrKT0+NjAqaykuYXR0cigieSIsZikuc3R5bGUoImZpbGwiLChsLGspPT5hW2tdKTtnLmFwcGVuZCgidGV4dCIpLm1lcmdlKGQuc2VsZWN0KCJ0ZXh0IikpLnRleHQobD0+Ilx1MjI2NSAwLiIrTWF0aC5yb3VuZCgxMCpsKSkuYXR0cigieCIsKGwsayk9PjYwKmspLmF0dHIoInkiLGYrNjApfSxkcmF3VG9wb2xvZ3k6ZnVuY3Rpb24oZCxmKXtkJiZmJiZ0aGlzLmlzQXR0YWNoZWQmJgp0aGlzLnRvcG9sb2d5R3JhcGgoZCl9LGF0dGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5kcmF3VG9wb2xvZ3kodGhpcy5fdG9wb0RhdGEsdGhpcy5ydW5FbnZpcm9ubWVudCl9LF9zZWxlY3RlZE1ldHJpY0lkeENoYW5nZWQ6ZnVuY3Rpb24oZCl7MD5kfHxkMy5zZWxlY3QodGhpcy4kLnRwZ3JhcGgpLnNlbGVjdEFsbCgiLm5vZGUiKS5zdHlsZSgiZmlsbCIsZj0+YyhmLnZhbHVlc1tkXS9mLnRvdGFsKSl9LF9hY3RpdmVCYXJDaGFuZ2VkOmZ1bmN0aW9uKGQpe3ZhciBmPWQzLnNjYWxlT3JkaW5hbChkMy5zY2hlbWVDYXRlZ29yeTEwKS5kb21haW4oZDMucmFuZ2UoMCwxOSkpO2lmKGQpaWYoZC5yZXBsaWNhR3JvdXBzJiYwPGQucmVwbGljYUdyb3Vwcy5sZW5ndGgpe2ZvcihsZXQgZz0wO2c8ZC5yZXBsaWNhR3JvdXBzLmxlbmd0aDtnKyspe2NvbnN0IGw9ZC5yZXBsaWNhR3JvdXBzW2ddLnJlcGxpY2FJZHM7Zm9yKGxldCBrPTA7azxsLmxlbmd0aDtrKyspZDMuc2VsZWN0KHRoaXMuJC50cGdyYXBoKS5zZWxlY3RBbGwoIiNyaWQiKwpsW2tdKS5zdHlsZSgiZmlsbCIsZihnJTIwKSl9dGhpcy5zZWxlY3RlZE1ldHJpY0lkeD0tMX1lbHNlIGQuc3JjQ29yZUlkcyYmKGY9ZC5zcmNDb3JlSWRzLm1hcCgoZyxsKT0+W2csZC5kc3RDb3JlSWRzW2xdXSksdGhpcy5kcmF3TGlua3ModGhpcy5fZ1NWRyxmKSl9LF9nZXRTZWxlY3RlZE1ldHJpY0xhYmVsOmZ1bmN0aW9uKGQsZil7cmV0dXJuIDA+Znx8IWR8fGY+ZC5sZW5ndGg/IlBsZWFzZSBzZWxlY3QgYSBtZXRyaWMiOiJDb2xvcjogIitkW2ZdLmxhYmVsfX0pfSkoRG18fChEbT17fSkpOwo8L3NjcmlwdD4KPC9kb20tbW9kdWxlPgoKCjxkb20tbW9kdWxlIGlkPSJwb2Qtdmlld2VyLWRhc2hib2FyZCI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiAxLjVlbTsKICAgICAgfQoKICAgICAgI2NvbnRyb2wgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1mbG93OiByb3cgbm93cmFwOwogICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICBvdmVyZmxvdzogYXV0bzsKICAgICAgICBwYWRkaW5nOiAwLjVlbTsKICAgICAgICB0ZXh0LWFsaWduOiBib3R0b207CiAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogYm90dG9tOwogICAgICB9CgogICAgICAuY29udHJvbC1yb3ctbGVmdCB7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZmxvdzogcm93IG5vd3JhcDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7CiAgICAgICAgbGluZS1oZWlnaHQ6IDUwcHg7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDE2cHg7CiAgICAgICAgdGV4dC1hbGlnbjogYm90dG9tOwogICAgICB9CgogICAgICBwYXBlci1zbGlkZXIgewogICAgICAgIC0tcGFwZXItc2xpZGVyLWlucHV0OiB7CiAgICAgICAgICB3aWR0aDogMTAwcHg7CiAgICAgICAgfQogICAgICAgIC0tcGFwZXItc2xpZGVyLWhlaWdodDogM3B4OwogICAgICB9CgogICAgICAuc3RlcC1udW0tdGV4dCB7CiAgICAgICAgZm9udC1zaXplOiAyMHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICAgIHBhZGRpbmctbGVmdDogMWVtOwogICAgICB9CgogICAgICAuc3RhY2stdGl0bGUgewogICAgICAgIGZvbnQtc2l6ZTogMjRweDsKICAgICAgICBsaW5lLWhlaWdodDogMzJweDsKICAgICAgfQoKICAgICAgLmJhci1jaGFydCB7CiAgICAgICAgb3ZlcmZsb3c6IGF1dG87CiAgICAgIH0KCiAgICAgICN0aXRsZSB7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDE2cHg7CiAgICAgIH0KCiAgICAgIC5lcnJvci1tZXNzYWdlIHsKICAgICAgICBjb2xvcjogcmVkOwogICAgICAgIGZvbnQtc2l6ZTogMzJweDsKICAgICAgICBmb250LXdlaWdodDogYm9sZDsKICAgICAgICBtYXJnaW4tbGVmdDogMTZweDsKICAgICAgICBtYXJnaW4tdG9wOiAzMnB4OwogICAgICB9CiAgICA8L3N0eWxlPgogICAgPGRpdiBjbGFzcz0iZXJyb3ItbWVzc2FnZSIgaGlkZGVuPSJbWyFfZXJyb3JNZXNzYWdlXV0iPgogICAgICA8c3Bhbj5bW19lcnJvck1lc3NhZ2VdXTwvc3Bhbj4KICAgIDwvZGl2PgogICAgPGRpdiBpZD0iY29udHJvbCIgaGlkZGVuPSJbW19lcnJvck1lc3NhZ2VdXSI+CiAgICAgIAogICAgICA8c3BhbiBjbGFzcz0iY29udHJvbC1yb3ctbGVmdCI+UGxlYXNlIHNlbGVjdCBhIHN0ZXAKICAgICAgICA8cGFwZXItc2xpZGVyIG1pbj0iMCIgbWF4PSJbW19tYXhTdGVwSWRdXSIgc25hcHMgc3RlcD0iMSIgdmFsdWU9Int7Y3VyU3RlcElkfX0iPgogICAgICAgIDwvcGFwZXItc2xpZGVyPgogICAgICAgIDxzcGFuIGNsYXNzPSJzdGVwLW51bS10ZXh0Ij5TdGVwIFtbX2dldFN0ZXBOdW0oX3BvZFN0YXRzTWFwKV1dPC9zcGFuPgogICAgICA8L3NwYW4+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9InBvZC12aWV3ZXItZGFzaGJvYXJkIiBoaWRkZW49IltbX2Vycm9yTWVzc2FnZV1dIj4KICAgICAgPGRpdiBpZD0idG9wby1ncmFwaCI+CiAgICAgICAgPHRvcG9sb2d5LWdyYXBoIHJ1bi1lbnZpcm9ubWVudD0iW1tfcnVuRW52aXJvbm1lbnRdXSIgZGF0YT0iW1tfcG9kU3RhdHNNYXBdXSIgbWV0cmljcz0iW1tfc3RlcEJyZWFrZG93bkxheWVyc11dIiBhY3RpdmUtYmFyPSJbW2FjdGl2ZUJhcl1dIj4KICAgICAgICA8L3RvcG9sb2d5LWdyYXBoPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBpZD0iY2hhbm5lbC1iYXJzIiBjbGFzcz0iYmFyLWNoYXJ0IiBoaWRkZW49IltbIV9jaGFubmVsRGJdXSI+CiAgICAgICAgPGRpdiBpZD0idGl0bGUiPgogICAgICAgICAgPGRpdiBjbGFzcz0ic3RhY2stdGl0bGUiPkxhdGVuY3kgb2YgU2VuZCBhbmQgUmVjdiBjaGFubmVsczwvZGl2PgogICAgICAgICAgPHA+KHgtYXhpczogY2hhbm5lbCBpZCwgeS1heGlzOiB0aW1lICjCtXMpKQogICAgICAgIDwvZGl2PgogICAgICAgIDxzdGFjay1iYXItY2hhcnQgZGF0YT0iW1tfY2hhbm5lbERiXV0iIHN0YWNrLWxheWVycz0iW1tfY2hhbm5lbExheWVyc11dIiB4LWRvbWFpbi1mdW5jPSJbW19jaGFubmVsRnVuY11dIiBhY3RpdmUtYmFyPSJ7e2FjdGl2ZUJhcn19Ij48L3N0YWNrLWJhci1jaGFydD4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgaWQ9ImFsbC1yZWR1Y2UtYmFycyIgY2xhc3M9ImJhci1jaGFydCIgaGlkZGVuPSJbWyFfYWxsUmVkdWNlRGJdXSI+CiAgICAgICAgPGRpdiBpZD0idGl0bGUiPgogICAgICAgICAgPGRpdiBjbGFzcz0ic3RhY2stdGl0bGUiPgogICAgICAgICAgICBEdXJhdGlvbiBvZiBhbGwtcmVkdWNlIG9wIG9yIGN1c3RvbSBmdXNpb24gZm9yIGFsbC1yZWR1Y2UKICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPHA+CiAgICAgICAgICAgICh4LWF4aXM6IHNob3J0IG5hbWVzIGZvciBhbGwtcmVkdWNlcyBvcHMgKGEjKSBvciBmdXNpb24gKGYjKSwKICAgICAgICAgICAgeS1heGlzOiB0aW1lICjCtXMpKQogICAgICAgICAgCiAgICAgICAgPC9kaXY+CiAgICAgICAgPHN0YWNrLWJhci1jaGFydCBkYXRhPSJbW19hbGxSZWR1Y2VEYl1dIiBzdGFjay1sYXllcnM9IltbX2FsbFJlZHVjZUxheWVyc11dIiB4LWRvbWFpbi1mdW5jPSJbW19hbGxSZWR1Y2VGdW5jXV0iIGFjdGl2ZS1iYXI9Int7YWN0aXZlQmFyfX0iPjwvc3RhY2stYmFyLWNoYXJ0PgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBpZD0ic3RhY2stYmFycyIgY2xhc3M9ImJhci1jaGFydCIgaGlkZGVuPSJbWyFfc3RlcFN0YXRzXV0iPgogICAgICAgIDxkaXYgaWQ9InRpdGxlIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InN0YWNrLXRpdGxlIj5TdGVwIGJyZWFrZG93bjwvZGl2PgogICAgICAgICAgPHA+KHgtYXhpczogZ2xvYmFsIGNoaXAgaWQsIGNvcmUgaWQsIHktYXhpczogdGltZSAowrVzKSkKICAgICAgICA8L2Rpdj4KICAgICAgICA8c3RhY2stYmFyLWNoYXJ0IGRhdGE9IltbX3N0ZXBTdGF0c11dIiBzdGFjay1sYXllcnM9IltbX3N0ZXBCcmVha2Rvd25MYXllcnNdXSIgeC1kb21haW4tZnVuYz0iW1tfc3RlcEJyZWFrZG93bkZ1bmNdXSIgYWN0aXZlLWJhcj0ie3thY3RpdmVCYXJ9fSI+PC9zdGFjay1iYXItY2hhcnQ+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgPC90ZW1wbGF0ZT4KICA8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vcG9kLXZpZXdlci9wb2Qtdmlld2VyLWRhc2hib2FyZC5qcwp2YXIgRW07CihmdW5jdGlvbigpe1BvbHltZXIoe2lzOiJwb2Qtdmlld2VyLWRhc2hib2FyZCIscHJvcGVydGllczp7ZGF0YTp7dHlwZTpPYmplY3Qsb2JzZXJ2ZXI6Il9kYXRhQ2hhbmdlZCJ9LGFjdGl2ZURldGFpbHM6e3R5cGU6QXJyYXksbm90aWZ5OiEwfSxhY3RpdmVCYXI6e3R5cGU6T2JqZWN0LG5vdGlmeTohMCxvYnNlcnZlcjoiX2FjdGl2ZUJhckNoYW5nZWQifSxjdXJTdGVwSWQ6e3R5cGU6TnVtYmVyLHZhbHVlOjB9LF9wb2RTdGF0c01hcHM6e3R5cGU6T2JqZWN0LGNvbXB1dGVkOiJfY29tcHV0ZVBvZFN0YXRzTWFwcyhkYXRhKSJ9LF9tYXhTdGVwSWQ6e3R5cGU6TnVtYmVyLGNvbXB1dGVkOiJfY29tcHV0ZU1heFN0ZXBJZChfcG9kU3RhdHNNYXBzKSJ9LF9lcnJvck1lc3NhZ2U6e3R5cGU6U3RyaW5nLGNvbXB1dGVkOiJfY29tcHV0ZUVycm9yTWVzc2FnZShfbWF4U3RlcElkKSJ9LF9ydW5FbnZpcm9ubWVudDp7dHlwZTpPYmplY3QsY29tcHV0ZWQ6Il9jb21wdXRlUnVuRW52aXJvbm1lbnQoZGF0YSkifSxfc3RlcEJyZWFrZG93bkxheWVyczp7dHlwZTpPYmplY3QsCnZhbHVlOigpPT5be2tleToiaGlnaEZsb3BzQ29tcHV0ZVVzIixsYWJlbDoiSGlnaCBmbG9wcyBjb21wdXRlIn0se2tleToibG93RmxvcHNDb21wdXRlVXMiLGxhYmVsOiJMb3cgZmxvcHMgY29tcHV0ZSJ9LHtrZXk6Imhvc3RJbmZlZWREdXJhdGlvblVzIixsYWJlbDoiSW5mZWVkIn0se2tleToiaG9zdE91dGZlZWREdXJhdGlvblVzIixsYWJlbDoiT3V0ZmVlZCJ9LHtrZXk6ImFsbFJlZHVjZUNvbXB1dGVEdXJhdGlvblVzIixsYWJlbDoiQWxsUmVkdWNlIGNvbXB1dGUifSx7a2V5OiJhbGxSZWR1Y2VTeW5jRHVyYXRpb25VcyIsbGFiZWw6IkFsbFJlZHVjZSBzeW5jIn0se2tleToic2VuZER1cmF0aW9uVXMiLGxhYmVsOiJTZW5kIn0se2tleToicmVjdkR1cmF0aW9uVXMiLGxhYmVsOiJSZWN2In1dfSxfcG9kU3RhdHNNYXA6e3R5cGU6T2JqZWN0LGNvbXB1dGVkOiJfY29tcHV0ZVBvZFN0YXRzTWFwKF9wb2RTdGF0c01hcHMsIGN1clN0ZXBJZCwgX3N0ZXBCcmVha2Rvd25MYXllcnMpIn0sCl9zdGVwU3RhdHM6e3R5cGU6QXJyYXksdmFsdWU6bnVsbCxjb21wdXRlZDoiX2NvbXB1dGVTdGVwU3RhdHMoX3BvZFN0YXRzTWFwKSJ9LF9jaGFubmVsRGI6e3R5cGU6QXJyYXksdmFsdWU6bnVsbCxjb21wdXRlZDoiX2NvbXB1dGVDaGFubmVsRGIoX3BvZFN0YXRzTWFwKSJ9LF9hbGxSZWR1Y2VEYjp7dHlwZTpBcnJheSx2YWx1ZTpudWxsLGNvbXB1dGVkOiJfY29tcHV0ZUFsbFJlZHVjZURiKF9wb2RTdGF0c01hcCkifSxfY2hhbm5lbExheWVyczp7dHlwZTpBcnJheSx2YWx1ZTooKT0+W3trZXk6ImR1cmF0aW9uVXMiLGxhYmVsOiJEdXJhdGlvbiAocykifV19LF9hbGxSZWR1Y2VMYXllcnM6e3R5cGU6QXJyYXksdmFsdWU6KCk9Plt7a2V5OiJkdXJhdGlvblVzIixsYWJlbDoiRHVyYXRpb24gKFx1MDBiNXMpIn1dfSxfc3RlcEJyZWFrZG93bkZ1bmM6e3R5cGU6T2JqZWN0LHZhbHVlOigpPT5hPT5gKCR7YS5jaGlwSWR9LCAke2Eubm9kZUlkfSlgfSxfY2hhbm5lbEZ1bmM6e3R5cGU6T2JqZWN0LAp2YWx1ZTooKT0+YT0+YS5jaGFubmVsSWR9LF9hbGxSZWR1Y2VGdW5jOnt0eXBlOk9iamVjdCx2YWx1ZTooKT0+ZnVuY3Rpb24oYSl7aWYoYS5uYW1lKXJldHVybiBhPWEubmFtZS5yZXBsYWNlKC9sbC1yZWR1Y2UufHVzaW9uLnxsbC1yZWR1Y2V8dXNpb24vLCIiKSwxPGEubGVuZ3RoP2E6YSsiMCJ9fX0sX2NvbXB1dGVQb2RTdGF0c01hcHMoYSl7cmV0dXJuIGE/YS5wb2RTdGF0c1NlcXVlbmNlLnBvZFN0YXRzTWFwOltdfSxfY29tcHV0ZVJ1bkVudmlyb25tZW50KGEpe2lmKGEpcmV0dXJuIGEucnVuRW52aXJvbm1lbnR9LF9jb21wdXRlTWF4U3RlcElkKGEpe3JldHVybiBhLmxlbmd0aC0xfSxfY29tcHV0ZUVycm9yTWVzc2FnZShhKXtyZXR1cm4gMDw9YT8iIjoiV0FSTklORzogTm8gc3RlcCB0aW1lIG1lYXN1cmVkLiBUaGlzIG1pZ2h0IGhhcHBlbiBpZiB5b3VyIHByb2ZpbGUgZHVyYXRpb24gaXMgdG9vIHNob3J0LCB0cnkgaW5jcmVhc2UgcHJvZmlsZSBkdXJhdGlvbiB0byBjb3ZlciBhIGZ1bGwgc3RlcC4gSWYgeW91IGhhdmUgYW4gaW5mZXJlbmNlIGpvYiBvciBub3QgdXNlIFRwdUVzdGltYXRvciwgcGxlYXNlIHNraXAgdGhpcyB0b29sLiJ9LApfcG9wdWxhdGVMb3dGbG9wc0NvbXB1dGUoYSxjKXtpZihhJiZjKXt2YXIgZD1hLnBvZFN0YXRzUGVyQ29yZTtmb3IobGV0IGYgaW4gZCl7bGV0IGc9ZFtmXTtpZihnLmhhc093blByb3BlcnR5KCJsb3dGbG9wc0NvbXB1dGVVcyIpKWJyZWFrO2cubG93RmxvcHNDb21wdXRlVXM9Zy50b3RhbER1cmF0aW9uVXM7Zm9yKGxldCBsPTA7bDxjLmxlbmd0aDtsKyspMSE9bCYmKGdbY1tsXS5rZXldfHwoZ1tjW2xdLmtleV09MCksZy5sb3dGbG9wc0NvbXB1dGVVcy09Z1tjW2xdLmtleV0pfXJldHVybiBhfX0sX2NvbXB1dGVQb2RTdGF0c01hcChhLGMsZCl7aWYoISghYXx8MD5jfHxjPj1hLmxlbmd0aCkmJmQpcmV0dXJuIHRoaXMuX3BvcHVsYXRlTG93RmxvcHNDb21wdXRlKGFbY10sZCl9LF9jb21wdXRlU3RlcFN0YXRzKGEpe2lmKGEmJmEucG9kU3RhdHNQZXJDb3JlKXt2YXIgYz1hLnBvZFN0YXRzUGVyQ29yZTtyZXR1cm4gT2JqZWN0LmtleXMoYykubWFwKGQ9PmNbZF0pLnNvcnQoKGQsZik9PgpkLmNoaXBJZC1mLmNoaXBJZCl9fSxfY29tcHV0ZUNoYW5uZWxEYihhKXtpZihhJiZhLmNoYW5uZWxEYiYmISgwPj1hLmNoYW5uZWxEYi5sZW5ndGgpKXJldHVybiBhLmNoYW5uZWxEYi5zbGljZSgpLnNvcnQoKGMsZCk9PmQuZHVyYXRpb25Vcy1jLmR1cmF0aW9uVXMpfSxfY29tcHV0ZUFsbFJlZHVjZURiKGEpe2lmKGEmJmEuYWxsUmVkdWNlT3BEYiYmISgwPj1hLmFsbFJlZHVjZU9wRGIubGVuZ3RoKSlyZXR1cm4gYS5hbGxSZWR1Y2VPcERiLnNsaWNlKCkuc29ydCgoYyxkKT0+ZC5kdXJhdGlvblVzLWMuZHVyYXRpb25Vcyl9LF9kYXRhQ2hhbmdlZChhKXthJiYodGhpcy5jdXJTdGVwSWQ9MCl9LF9hY3RpdmVCYXJDaGFuZ2VkKGEpe2EmJih0aGlzLmFjdGl2ZURldGFpbHM9W2FdKX0sX2dldFN0ZXBOdW0oYSl7cmV0dXJuIGE/YS5zdGVwTnVtOjB9fSl9KShFbXx8KEVtPXt9KSk7Cjwvc2NyaXB0Pgo8L2RvbS1tb2R1bGU+CgoKCgoKPHNjcmlwdD4vL35+V0VCUEFUSH5+L2lyb24tYWpheC9pcm9uLXJlcXVlc3QuaHRtbC5qcwpQb2x5bWVyKHtpczoiaXJvbi1yZXF1ZXN0Iixob3N0QXR0cmlidXRlczp7aGlkZGVuOiEwfSxwcm9wZXJ0aWVzOnt4aHI6e3R5cGU6T2JqZWN0LG5vdGlmeTohMCxyZWFkT25seTohMCx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBuZXcgWE1MSHR0cFJlcXVlc3R9fSxyZXNwb25zZTp7dHlwZTpPYmplY3Qsbm90aWZ5OiEwLHJlYWRPbmx5OiEwLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9fSxzdGF0dXM6e3R5cGU6TnVtYmVyLG5vdGlmeTohMCxyZWFkT25seTohMCx2YWx1ZTowfSxzdGF0dXNUZXh0Ont0eXBlOlN0cmluZyxub3RpZnk6ITAscmVhZE9ubHk6ITAsdmFsdWU6IiJ9LGNvbXBsZXRlczp7dHlwZTpPYmplY3QscmVhZE9ubHk6ITAsbm90aWZ5OiEwLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGEsYyl7dGhpcy5yZXNvbHZlQ29tcGxldGVzPWE7dGhpcy5yZWplY3RDb21wbGV0ZXM9Y30uYmluZCh0aGlzKSl9fSxwcm9ncmVzczp7dHlwZTpPYmplY3QsCm5vdGlmeTohMCxyZWFkT25seTohMCx2YWx1ZTpmdW5jdGlvbigpe3JldHVybnt9fX0sYWJvcnRlZDp7dHlwZTpCb29sZWFuLG5vdGlmeTohMCxyZWFkT25seTohMCx2YWx1ZTohMX0sZXJyb3JlZDp7dHlwZTpCb29sZWFuLG5vdGlmeTohMCxyZWFkT25seTohMCx2YWx1ZTohMX0sdGltZWRPdXQ6e3R5cGU6Qm9vbGVhbixub3RpZnk6ITAscmVhZE9ubHk6ITAsdmFsdWU6ITF9fSxnZXQgc3VjY2VlZGVkKCl7aWYodGhpcy5lcnJvcmVkfHx0aGlzLmFib3J0ZWR8fHRoaXMudGltZWRPdXQpcmV0dXJuITE7dmFyIGE9dGhpcy54aHIuc3RhdHVzfHwwO3JldHVybiAwPT09YXx8MjAwPD1hJiYzMDA+YX0sc2VuZDpmdW5jdGlvbihhKXt2YXIgYz10aGlzLnhocjtpZigwPGMucmVhZHlTdGF0ZSlyZXR1cm4gbnVsbDtjLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixmdW5jdGlvbihtKXt0aGlzLl9zZXRQcm9ncmVzcyh7bGVuZ3RoQ29tcHV0YWJsZTptLmxlbmd0aENvbXB1dGFibGUsbG9hZGVkOm0ubG9hZGVkLAp0b3RhbDptLnRvdGFsfSk7dGhpcy5maXJlKCJpcm9uLXJlcXVlc3QtcHJvZ3Jlc3MtY2hhbmdlZCIse3ZhbHVlOnRoaXMucHJvZ3Jlc3N9KX0uYmluZCh0aGlzKSk7Yy5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsZnVuY3Rpb24obSl7dGhpcy5fc2V0RXJyb3JlZCghMCk7dGhpcy5fdXBkYXRlU3RhdHVzKCk7dGhpcy5yZWplY3RDb21wbGV0ZXMoYS5yZWplY3RXaXRoUmVxdWVzdD97ZXJyb3I6bSxyZXF1ZXN0OnRoaXN9Om0pfS5iaW5kKHRoaXMpKTtjLmFkZEV2ZW50TGlzdGVuZXIoInRpbWVvdXQiLGZ1bmN0aW9uKG0pe3RoaXMuX3NldFRpbWVkT3V0KCEwKTt0aGlzLl91cGRhdGVTdGF0dXMoKTt0aGlzLnJlamVjdENvbXBsZXRlcyhhLnJlamVjdFdpdGhSZXF1ZXN0P3tlcnJvcjptLHJlcXVlc3Q6dGhpc306bSl9LmJpbmQodGhpcykpO2MuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLGZ1bmN0aW9uKCl7dGhpcy5fc2V0QWJvcnRlZCghMCk7dGhpcy5fdXBkYXRlU3RhdHVzKCk7dmFyIG09CkVycm9yKCJSZXF1ZXN0IGFib3J0ZWQuIik7dGhpcy5yZWplY3RDb21wbGV0ZXMoYS5yZWplY3RXaXRoUmVxdWVzdD97ZXJyb3I6bSxyZXF1ZXN0OnRoaXN9Om0pfS5iaW5kKHRoaXMpKTtjLmFkZEV2ZW50TGlzdGVuZXIoImxvYWRlbmQiLGZ1bmN0aW9uKCl7dGhpcy5fdXBkYXRlU3RhdHVzKCk7dGhpcy5fc2V0UmVzcG9uc2UodGhpcy5wYXJzZVJlc3BvbnNlKCkpO2lmKHRoaXMuc3VjY2VlZGVkKXRoaXMucmVzb2x2ZUNvbXBsZXRlcyh0aGlzKTtlbHNle3ZhciBtPUVycm9yKCJUaGUgcmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXMgY29kZTogIit0aGlzLnhoci5zdGF0dXMpO3RoaXMucmVqZWN0Q29tcGxldGVzKGEucmVqZWN0V2l0aFJlcXVlc3Q/e2Vycm9yOm0scmVxdWVzdDp0aGlzfTptKX19LmJpbmQodGhpcykpO3RoaXMudXJsPWEudXJsO3ZhciBkPSExIT09YS5hc3luYztjLm9wZW4oYS5tZXRob2R8fCJHRVQiLGEudXJsLGQpO3ZhciBmPXtqc29uOiJhcHBsaWNhdGlvbi9qc29uIiwKdGV4dDoidGV4dC9wbGFpbiIsaHRtbDoidGV4dC9odG1sIix4bWw6ImFwcGxpY2F0aW9uL3htbCIsYXJyYXlidWZmZXI6ImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSJ9W2EuaGFuZGxlQXNdLGc9YS5oZWFkZXJzfHxPYmplY3QuY3JlYXRlKG51bGwpLGw9T2JqZWN0LmNyZWF0ZShudWxsKSxrO2ZvcihrIGluIGcpbFtrLnRvTG93ZXJDYXNlKCldPWdba107Zz1sO2YmJiFnLmFjY2VwdCYmKGcuYWNjZXB0PWYpO09iamVjdC5rZXlzKGcpLmZvckVhY2goZnVuY3Rpb24obSl7L1tBLVpdLy50ZXN0KG0pJiZQb2x5bWVyLkJhc2UuX2Vycm9yKCJIZWFkZXJzIG11c3QgYmUgbG93ZXIgY2FzZSwgZ290IixtKTtjLnNldFJlcXVlc3RIZWFkZXIobSxnW21dKX0sdGhpcyk7aWYoZCl7Yy50aW1lb3V0PWEudGltZW91dDtkPWEuaGFuZGxlQXM7aWYoYS5qc29uUHJlZml4fHwhZClkPSJ0ZXh0IjtjLnJlc3BvbnNlVHlwZT1jLl9yZXNwb25zZVR5cGU9ZDthLmpzb25QcmVmaXgmJihjLl9qc29uUHJlZml4PQphLmpzb25QcmVmaXgpfWMud2l0aENyZWRlbnRpYWxzPSEhYS53aXRoQ3JlZGVudGlhbHM7ZD10aGlzLl9lbmNvZGVCb2R5T2JqZWN0KGEuYm9keSxnWyJjb250ZW50LXR5cGUiXSk7Yy5zZW5kKGQpO3JldHVybiB0aGlzLmNvbXBsZXRlc30scGFyc2VSZXNwb25zZTpmdW5jdGlvbigpe3ZhciBhPXRoaXMueGhyLGM9YS5yZXNwb25zZVR5cGV8fGEuX3Jlc3BvbnNlVHlwZSxkPSF0aGlzLnhoci5yZXNwb25zZVR5cGUsZj1hLl9qc29uUHJlZml4JiZhLl9qc29uUHJlZml4Lmxlbmd0aHx8MDt0cnl7c3dpdGNoKGMpe2Nhc2UgImpzb24iOmlmKGR8fHZvaWQgMD09PWEucmVzcG9uc2UpdHJ5e3JldHVybiBKU09OLnBhcnNlKGEucmVzcG9uc2VUZXh0KX1jYXRjaChnKXtyZXR1cm4gY29uc29sZS53YXJuKCJGYWlsZWQgdG8gcGFyc2UgSlNPTiBzZW50IGZyb20gIithLnJlc3BvbnNlVVJMKSxudWxsfXJldHVybiBhLnJlc3BvbnNlO2Nhc2UgInhtbCI6cmV0dXJuIGEucmVzcG9uc2VYTUw7Y2FzZSAiYmxvYiI6Y2FzZSAiZG9jdW1lbnQiOmNhc2UgImFycmF5YnVmZmVyIjpyZXR1cm4gYS5yZXNwb25zZTsKZGVmYXVsdDppZihmKXRyeXtyZXR1cm4gSlNPTi5wYXJzZShhLnJlc3BvbnNlVGV4dC5zdWJzdHJpbmcoZikpfWNhdGNoKGcpe3JldHVybiBjb25zb2xlLndhcm4oIkZhaWxlZCB0byBwYXJzZSBKU09OIHNlbnQgZnJvbSAiK2EucmVzcG9uc2VVUkwpLG51bGx9cmV0dXJuIGEucmVzcG9uc2VUZXh0fX1jYXRjaChnKXt0aGlzLnJlamVjdENvbXBsZXRlcyhFcnJvcigiQ291bGQgbm90IHBhcnNlIHJlc3BvbnNlLiAiK2cubWVzc2FnZSkpfX0sYWJvcnQ6ZnVuY3Rpb24oKXt0aGlzLl9zZXRBYm9ydGVkKCEwKTt0aGlzLnhoci5hYm9ydCgpfSxfZW5jb2RlQm9keU9iamVjdDpmdW5jdGlvbihhLGMpe2lmKCJzdHJpbmciPT10eXBlb2YgYSlyZXR1cm4gYTtzd2l0Y2goYyl7Y2FzZSAiYXBwbGljYXRpb24vanNvbiI6cmV0dXJuIEpTT04uc3RyaW5naWZ5KGEpO2Nhc2UgImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCI6cmV0dXJuIHRoaXMuX3d3d0Zvcm1VcmxFbmNvZGUoYSl9cmV0dXJuIGF9LApfd3d3Rm9ybVVybEVuY29kZTpmdW5jdGlvbihhKXtpZighYSlyZXR1cm4iIjt2YXIgYz1bXTtPYmplY3Qua2V5cyhhKS5mb3JFYWNoKGZ1bmN0aW9uKGQpe2MucHVzaCh0aGlzLl93d3dGb3JtVXJsRW5jb2RlUGllY2UoZCkrIlx4M2QiK3RoaXMuX3d3d0Zvcm1VcmxFbmNvZGVQaWVjZShhW2RdKSl9LHRoaXMpO3JldHVybiBjLmpvaW4oIlx4MjYiKX0sX3d3d0Zvcm1VcmxFbmNvZGVQaWVjZTpmdW5jdGlvbihhKXtyZXR1cm4gbnVsbCE9PWEmJnZvaWQgMCE9PWEmJmEudG9TdHJpbmc/ZW5jb2RlVVJJQ29tcG9uZW50KGEudG9TdHJpbmcoKS5yZXBsYWNlKC9ccj9cbi9nLCJcclxuIikpLnJlcGxhY2UoLyUyMC9nLCIrIik6IiJ9LF91cGRhdGVTdGF0dXM6ZnVuY3Rpb24oKXt0aGlzLl9zZXRTdGF0dXModGhpcy54aHIuc3RhdHVzKTt0aGlzLl9zZXRTdGF0dXNUZXh0KHZvaWQgMD09PXRoaXMueGhyLnN0YXR1c1RleHQ/IiI6dGhpcy54aHIuc3RhdHVzVGV4dCl9fSk7Cjwvc2NyaXB0PgoKCgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vZ29vZ2xlLWNoYXJ0L2dvb2dsZS1jaGFydC1sb2FkZXIuaHRtbC5qcwooZnVuY3Rpb24oKXtmdW5jdGlvbiBhKGspe3JldHVybiBnb29nbGVbMD09PWsuaW5kZXhPZigibWQtIik/Yy5DSEFSVFM6Yy5WSVNdfXZhciBjPXtDSEFSVFM6ImNoYXJ0cyIsVklTOiJ2aXN1YWxpemF0aW9uIn0sZD17YXJlYTp7Y3RvcjoiQXJlYUNoYXJ0In0sYmFyOntjdG9yOiJCYXJDaGFydCJ9LCJtZC1iYXIiOntjdG9yOiJCYXIiLHBrZzoiYmFyIn0sYnViYmxlOntjdG9yOiJCdWJibGVDaGFydCJ9LGNhbGVuZGFyOntjdG9yOiJDYWxlbmRhciIscGtnOiJjYWxlbmRhciJ9LGNhbmRsZXN0aWNrOntjdG9yOiJDYW5kbGVzdGlja0NoYXJ0In0sY29sdW1uOntjdG9yOiJDb2x1bW5DaGFydCJ9LGNvbWJvOntjdG9yOiJDb21ib0NoYXJ0In0sZ2F1Z2U6e2N0b3I6IkdhdWdlIixwa2c6ImdhdWdlIn0sZ2VvOntjdG9yOiJHZW9DaGFydCJ9LGhpc3RvZ3JhbTp7Y3RvcjoiSGlzdG9ncmFtIn0sbGluZTp7Y3RvcjoiTGluZUNoYXJ0In0sIm1kLWxpbmUiOntjdG9yOiJMaW5lIixwa2c6ImxpbmUifSwKb3JnOntjdG9yOiJPcmdDaGFydCIscGtnOiJvcmdjaGFydCJ9LHBpZTp7Y3RvcjoiUGllQ2hhcnQifSxzYW5rZXk6e2N0b3I6IlNhbmtleSIscGtnOiJzYW5rZXkifSxzY2F0dGVyOntjdG9yOiJTY2F0dGVyQ2hhcnQifSwibWQtc2NhdHRlciI6e2N0b3I6IlNjYXR0ZXIiLHBrZzoic2NhdHRlciJ9LCJzdGVwcGVkLWFyZWEiOntjdG9yOiJTdGVwcGVkQXJlYUNoYXJ0In0sdGFibGU6e2N0b3I6IlRhYmxlIixwa2c6InRhYmxlIn0sdGltZWxpbmU6e2N0b3I6IlRpbWVsaW5lIixwa2c6InRpbWVsaW5lIn0sdHJlZW1hcDp7Y3RvcjoiVHJlZU1hcCIscGtnOiJ0cmVlbWFwIn0sd29yZHRyZWU6e2N0b3I6IldvcmRUcmVlIixuYW1lc3BhY2U6Yy5WSVMscGtnOiJ3b3JkdHJlZSJ9fSxmPXt9LGc9e30sbD17fTtQb2x5bWVyKHtpczoiZ29vZ2xlLWNoYXJ0LWxvYWRlciIscHJvcGVydGllczp7cGFja2FnZXM6e3R5cGU6QXJyYXksdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm5bXX0sb2JzZXJ2ZXI6Il9sb2FkUGFja2FnZXMifSwKdHlwZTp7dHlwZTpTdHJpbmcsb2JzZXJ2ZXI6Il9sb2FkUGFja2FnZUZvclR5cGUifX0sZ2V0IF9jb3JlUGFja2FnZSgpe3JldHVybiBnLmNvcmVjaGFydD9nLmNvcmVjaGFydDp0aGlzLl9sb2FkUGFja2FnZXMoWyJjb3JlY2hhcnQiXSkudGhlbihmdW5jdGlvbihrKXtyZXR1cm4ga1swXX0pfSxfbG9hZFBhY2thZ2VzRGVib3VuY2U6ZnVuY3Rpb24oKXt0aGlzLmRlYm91bmNlKCJsb2FkUGFja2FnZXMiLGZ1bmN0aW9uKCl7dmFyIGs9T2JqZWN0LmtleXMoZik7ay5sZW5ndGgmJihmPXt9LGdvb2dsZS5jaGFydHMubG9hZCgiY3VycmVudCIse3BhY2thZ2VzOmssbGFuZ3VhZ2U6ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50Lmxhbmd8fCJlbiJ9KSxnb29nbGUuY2hhcnRzLnNldE9uTG9hZENhbGxiYWNrKGZ1bmN0aW9uKCl7ay5mb3JFYWNoKGZ1bmN0aW9uKG0pe3RoaXMuZmlyZSgibG9hZGVkIixtKTtsW21dKGdvb2dsZS52aXN1YWxpemF0aW9uKX0uYmluZCh0aGlzKSl9LmJpbmQodGhpcykpKX0sCjEwMCl9LF9sb2FkUGFja2FnZXM6ZnVuY3Rpb24oayl7dmFyIG09W107ay5mb3JFYWNoKGZ1bmN0aW9uKHApe2dbcF18fChmW3BdPSEwLGdbcF09bmV3IFByb21pc2UoZnVuY3Rpb24ocSl7bFtwXT1xfSksdGhpcy5fbG9hZFBhY2thZ2VzRGVib3VuY2UoKSk7bS5wdXNoKGdbcF0pfS5iaW5kKHRoaXMpKTtyZXR1cm4gUHJvbWlzZS5hbGwobSl9LF9sb2FkUGFja2FnZUZvclR5cGU6ZnVuY3Rpb24oayl7dmFyIG09ZFtrXTtyZXR1cm4gbT90aGlzLl9sb2FkUGFja2FnZXMoW20ucGtnfHwiY29yZWNoYXJ0Il0pLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4oZ29vZ2xlW20ubmFtZXNwYWNlXXx8YShrKSlbbS5jdG9yXX0pOlByb21pc2UucmVqZWN0KCJUaGlzIGNoYXJ0IHR5cGUgaXMgbm90IHlldCBzdXBwb3J0ZWQ6ICIrayl9LGNyZWF0ZTpmdW5jdGlvbihrLG0pe3JldHVybiB0aGlzLl9sb2FkUGFja2FnZUZvclR5cGUoaykudGhlbihmdW5jdGlvbihwKXtyZXR1cm4gbmV3IHAobSl9KX0sZmlyZU9uQ2hhcnRFdmVudDpmdW5jdGlvbihrLAptLHApe3JldHVybiB0aGlzLl9jb3JlUGFja2FnZS50aGVuKGZ1bmN0aW9uKHEpeyhwP3EuZXZlbnRzLmFkZE9uZVRpbWVMaXN0ZW5lcjpxLmV2ZW50cy5hZGRMaXN0ZW5lcikoayxtLGZ1bmN0aW9uKHIpe3RoaXMuZmlyZSgiZ29vZ2xlLWNoYXJ0LSIrbSx7Y2hhcnQ6ayxkYXRhOnJ9KX0uYmluZCh0aGlzKSl9LmJpbmQodGhpcykpfSxkYXRhVGFibGU6ZnVuY3Rpb24oayl7cmV0dXJuIHRoaXMuX2NvcmVQYWNrYWdlLnRoZW4oZnVuY3Rpb24obSl7cmV0dXJuIG51bGw9PWs/bmV3IG0uRGF0YVRhYmxlOmsuZ2V0TnVtYmVyT2ZSb3dzP2s6ay5jb2xzP25ldyBtLkRhdGFUYWJsZShrKTowPGsubGVuZ3RoP20uYXJyYXlUb0RhdGFUYWJsZShrKTowPT09ay5sZW5ndGg/UHJvbWlzZS5yZWplY3QoIkRhdGEgd2FzIGVtcHR5LiIpOlByb21pc2UucmVqZWN0KCJEYXRhIGZvcm1hdCB3YXMgbm90IHJlY29nbml6ZWQuIil9KX0sZGF0YVZpZXc6ZnVuY3Rpb24oayl7cmV0dXJuIHRoaXMuX2NvcmVQYWNrYWdlLnRoZW4oZnVuY3Rpb24obSl7cmV0dXJuIG5ldyBtLkRhdGFWaWV3KGspfSl9LApxdWVyeTpmdW5jdGlvbihrLG0pe3JldHVybiB0aGlzLl9jb3JlUGFja2FnZS50aGVuKGZ1bmN0aW9uKHApe3JldHVybiBuZXcgcC5RdWVyeShrLG0pfSl9fSl9KSgpOwo8L3NjcmlwdD4KCjxkb20tbW9kdWxlIGlkPSJnb29nbGUtY2hhcnQtc3R5bGVzIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiAtd2Via2l0LWZsZXg7CiAgICAgICAgZGlzcGxheTogLW1zLWZsZXg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgICB3aWR0aDogNDAwcHg7CiAgICAgICAgaGVpZ2h0OiAzMDBweDsKICAgICAgfQoKICAgICAgOmhvc3QoW3R5cGU9J2dhdWdlJ10pIHsKICAgICAgICB3aWR0aDogMzAwcHg7CiAgICAgICAgaGVpZ2h0OiAzMDBweDsKICAgICAgfQoKICAgICAgI2NoYXJ0ZGl2IHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+CgoKCjxkb20tbW9kdWxlIGlkPSJnb29nbGUtY2hhcnQiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZSBpbmNsdWRlPSJnb29nbGUtY2hhcnQtc3R5bGVzIj48L3N0eWxlPgogICAgPGdvb2dsZS1jaGFydC1sb2FkZXIgaWQ9ImxvYWRlciIgdHlwZT0iW1t0eXBlXV0iPjwvZ29vZ2xlLWNoYXJ0LWxvYWRlcj4KICAgIDxkaXYgaWQ9ImNoYXJ0ZGl2Ij48L2Rpdj4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+Cgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vZ29vZ2xlLWNoYXJ0L2dvb2dsZS1jaGFydC5odG1sLmpzCihmdW5jdGlvbigpe1BvbHltZXIoe2lzOiJnb29nbGUtY2hhcnQiLHByb3BlcnRpZXM6e3R5cGU6e3R5cGU6U3RyaW5nLHZhbHVlOiJjb2x1bW4iLG9ic2VydmVyOiJfdHlwZUNoYW5nZWQifSxldmVudHM6e3R5cGU6QXJyYXksdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm5bXX19LG9wdGlvbnM6e3R5cGU6T2JqZWN0fSxjb2xzOnt0eXBlOkFycmF5LG9ic2VydmVyOiJfcm93c09yQ29sdW1uc0NoYW5nZWQifSxyb3dzOnt0eXBlOkFycmF5LG9ic2VydmVyOiJfcm93c09yQ29sdW1uc0NoYW5nZWQifSxkYXRhOnt0eXBlOlN0cmluZyxvYnNlcnZlcjoiX2RhdGFDaGFuZ2VkIn0sdmlldzp7dHlwZTpPYmplY3Qsb2JzZXJ2ZXI6Il92aWV3Q2hhbmdlZCJ9LHNlbGVjdGlvbjp7dHlwZTpBcnJheSxub3RpZnk6ITAsb2JzZXJ2ZXI6Il9zZXRTZWxlY3Rpb24ifSxkcmF3bjp7dHlwZTpCb29sZWFuLHJlYWRPbmx5OiEwLHZhbHVlOiExfX0sb2JzZXJ2ZXJzOlsiX2RyYXcoX2NoYXJ0LCBfZGF0YVZpZXcpIiwKIl9zdWJPcHRpb25DaGFuZ2VkKG9wdGlvbnMuKikiXSxsaXN0ZW5lcnM6eyJnb29nbGUtY2hhcnQtc2VsZWN0IjoiX3VwZGF0ZVNlbGVjdGlvbiIsImdvb2dsZS1jaGFydC1yZWFkeSI6Il9vbkNoYXJ0UmVhZHkifSxfY2hhcnQ6bnVsbCxfZGF0YVZpZXc6bnVsbCxfc2VsZWN0aW9uOm51bGwsX3R5cGVDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy4kLmxvYWRlci5jcmVhdGUodGhpcy50eXBlLHRoaXMuJC5jaGFydGRpdikudGhlbihmdW5jdGlvbihhKXt2YXIgYz10aGlzLiQubG9hZGVyO09iamVjdC5rZXlzKHRoaXMuZXZlbnRzLmNvbmNhdChbInNlbGVjdCIsInJlYWR5Il0pLnJlZHVjZShmdW5jdGlvbihkLGYpe2RbZl09ITA7cmV0dXJuIGR9LHt9KSkuZm9yRWFjaChmdW5jdGlvbihkKXtjLmZpcmVPbkNoYXJ0RXZlbnQoYSxkKX0pO3RoaXMuX3NldERyYXduKCExKTt0aGlzLl9jaGFydD1hfS5iaW5kKHRoaXMpKX0sX3N1Yk9wdGlvbkNoYW5nZWQ6ZnVuY3Rpb24oYSl7dGhpcy5vcHRpb25zPQphLmJhc2U7dGhpcy5kZWJvdW5jZSgib3B0aW9uQ2hhbmdlUmVkcmF3IixmdW5jdGlvbigpe3RoaXMucmVkcmF3KCl9LDUpfSxfc2V0U2VsZWN0aW9uOmZ1bmN0aW9uKCl7dGhpcy5kcmF3biYmdGhpcy5zZWxlY3Rpb24mJnRoaXMuc2VsZWN0aW9uIT09dGhpcy5fc2VsZWN0aW9uJiYodGhpcy5fY2hhcnQuc2V0U2VsZWN0aW9uJiZ0aGlzLl9jaGFydC5zZXRTZWxlY3Rpb24odGhpcy5zZWxlY3Rpb24pLHRoaXMuX3NlbGVjdGlvbj10aGlzLnNlbGVjdGlvbil9LF91cGRhdGVTZWxlY3Rpb246ZnVuY3Rpb24oKXt0aGlzLnNlbGVjdGlvbj10aGlzLl9zZWxlY3Rpb249dGhpcy5fY2hhcnQuZ2V0U2VsZWN0aW9uKCl9LF9vbkNoYXJ0UmVhZHk6ZnVuY3Rpb24oKXt0aGlzLl9zZXREcmF3bighMCk7dGhpcy5fc2VsZWN0aW9uPW51bGw7dGhpcy5fc2V0U2VsZWN0aW9uKCl9LHJlZHJhdzpmdW5jdGlvbigpe3RoaXMuX2NoYXJ0JiZ0aGlzLl9kYXRhVmlldyYmdGhpcy5fZHJhdyh0aGlzLl9jaGFydCwKdGhpcy5fZGF0YVZpZXcpfSxfZHJhdzpmdW5jdGlvbihhLGMpe2lmKG51bGwhPWEmJm51bGwhPWMpdHJ5e3RoaXMuX3NldERyYXduKCExKSxhLmRyYXcoYyx0aGlzLm9wdGlvbnN8fHt9KX1jYXRjaChkKXt0aGlzLiQuY2hhcnRkaXYuaW5uZXJIVE1MPWR9fSxnZXQgaW1hZ2VVUkkoKXtyZXR1cm4gdGhpcy5fY2hhcnQ/dGhpcy5fY2hhcnQuZ2V0SW1hZ2VVUkkoKTpudWxsfSxfdmlld0NoYW5nZWQ6ZnVuY3Rpb24oYSl7YSYmKHRoaXMuX2RhdGFWaWV3PWEpfSxfcm93c09yQ29sdW1uc0NoYW5nZWQ6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLnJvd3MsYz10aGlzLmNvbHM7YSYmYyYmdGhpcy4kLmxvYWRlci5kYXRhVGFibGUoKS50aGVuKGZ1bmN0aW9uKGQpe2MuZm9yRWFjaChmdW5jdGlvbihmKXtkLmFkZENvbHVtbihmKX0pO2QuYWRkUm93cyhhKTtyZXR1cm4gZH0uYmluZCh0aGlzKSkudGhlbih0aGlzLiQubG9hZGVyLmRhdGFWaWV3LmJpbmQodGhpcy4kLmxvYWRlcikpLnRoZW4oZnVuY3Rpb24oZCl7dGhpcy5fZGF0YVZpZXc9CmR9LmJpbmQodGhpcykpLmNhdGNoKGZ1bmN0aW9uKGQpe3RoaXMuJC5jaGFydGRpdi5pbm5lckhUTUw9ZH0uYmluZCh0aGlzKSl9LF9kYXRhQ2hhbmdlZDpmdW5jdGlvbihhKXtpZihhKXt2YXIgYz0hMTt0cnl7YT1KU09OLnBhcnNlKGEpfWNhdGNoKGQpe2M9InN0cmluZyI9PXR5cGVvZiBhfHxhIGluc3RhbmNlb2YgU3RyaW5nfWE9Yz9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpcm9uLXJlcXVlc3QiKS5zZW5kKHt1cmw6YSxoYW5kbGVBczoianNvbiJ9KS50aGVuKGZ1bmN0aW9uKGQpe3JldHVybiBkLnJlc3BvbnNlfSk6UHJvbWlzZS5yZXNvbHZlKGEpO2EudGhlbih0aGlzLiQubG9hZGVyLmRhdGFUYWJsZS5iaW5kKHRoaXMuJC5sb2FkZXIpKS50aGVuKHRoaXMuJC5sb2FkZXIuZGF0YVZpZXcuYmluZCh0aGlzLiQubG9hZGVyKSkudGhlbihmdW5jdGlvbihkKXt0aGlzLl9kYXRhVmlldz1kfS5iaW5kKHRoaXMpKX19LGF0dGFjaGVkOmZ1bmN0aW9uKCl7dmFyIGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7CmEuc3JjPSJodHRwczovL3d3dy5nc3RhdGljLmNvbS9jaGFydHMvbG9hZGVyLmpzIjtkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKGEpfX0pfSkoKTsKPC9zY3JpcHQ+CgoKPGRvbS1tb2R1bGUgaWQ9Imdvb2dsZS1jaGFydC1kZW1vIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIGNvZGUgewogICAgICAgIGNvbG9yOiAjMDA3MDAwOwogICAgICB9CiAgICAgIGdvb2dsZS1jaGFydCB7CiAgICAgICAgaGVpZ2h0OiAzMDBweDsKICAgICAgICB3aWR0aDogNDAwcHg7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8ZGl2IGlkPSJkZW1vLWJvZHkiPgogICAgICA8cD4KICAgICAgICBXZWJzaXRlIHRyYWZmaWMgZGF0YSBieSBjb3VudHJ5IGZyb20gYW4gZXh0ZXJuYWwgSlNPTiByZXNvdXJjZSB3aGVyZSB0aGUKICAgICAgICBkYXRhIGlzIGluIHJhdyBEYXRhVGFibGUgZm9ybWF0LgogICAgICAKICAgICAgPGdvb2dsZS1jaGFydCB0eXBlPSJjb2x1bW4iIG9wdGlvbnM9InsmcXVvdDt0aXRsZSZxdW90OzogJnF1b3Q7VmlzaXRvcnMgYnkgQ291bnRyeSZxdW90OywgJnF1b3Q7bGVnZW5kJnF1b3Q7OiAmcXVvdDtub25lJnF1b3Q7fSIgZGF0YT0iW1tfZGF0YV1dIj4KICAgICAgPC9nb29nbGUtY2hhcnQ+CiAgICA8L2Rpdj4KICA8L3RlbXBsYXRlPgoKICA8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vZ29vZ2xlLWNoYXJ0L2dvb2dsZS1jaGFydC1kZW1vLmh0bWwuanMKUG9seW1lcih7aXM6Imdvb2dsZS1jaGFydC1kZW1vIixwcm9wZXJ0aWVzOntfZGF0YTp7dHlwZTpPYmplY3Qsb2JzZXJ2ZXI6Il91cGRhdGVWaWV3In19fSk7Cjwvc2NyaXB0Pgo8L2RvbS1tb2R1bGU+CgoKCgoKPGRvbS1tb2R1bGUgaWQ9InRmLXBsdWdpbi1kaWFsb2ciPgogIDx0ZW1wbGF0ZT4KICAgIAogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19vcGVuXV0iPgogICAgICA8ZGl2IGlkPSJkYXNoYm9hcmQtYmFja2Ryb3AiPjwvZGl2PgogICAgPC90ZW1wbGF0ZT4KICAgIDxwYXBlci1kaWFsb2cgaWQ9ImRpYWxvZyIgbW9kYWwgb3BlbmVkPSJ7e19vcGVufX0iIHdpdGgtYmFja2Ryb3A9IltbX3VzZU5hdGl2ZUJhY2tkcm9wXV0iPgogICAgICA8aDIgaWQ9ImRpYWxvZy10aXRsZSI+W1tfdGl0bGVdXTwvaDI+CiAgICAgIDxkaXYgY2xhc3M9ImN1c3RvbS1tZXNzYWdlIj5bW19jdXN0b21NZXNzYWdlXV08L2Rpdj4KICAgIDwvcGFwZXItZGlhbG9nPgogICAgPHN0eWxlPgogICAgICAvKiogV2UgcmVseSBvbiBhIHNlcGFyYXRlIGBfaGlkZGVuYCBwcm9wZXJ0eSBpbnN0ZWFkIG9mIGRpcmVjdGx5IG1ha2luZyB1c2UKICAgICAgICAgIG9mIHRoZSBgX29wZW5gIGF0dHJpYnV0ZSBiZWNhdXNlIHRoaXMgQ1NTIHNwZWNpZmljYXRpb24gbWF5IHN0cmFuZ2VseQogICAgICAgICAgYWZmZWN0IG90aGVyIGVsZW1lbnRzIHRocm91Z2hvdXQgVGVuc29yQm9hcmQuIFNlZSAjODk5LiAqLwogICAgICAjZGFzaGJvYXJkLWJhY2tkcm9wIHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuNik7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CgogICAgICAjZGlhbG9nLXRpdGxlIHsKICAgICAgICBwYWRkaW5nLWJvdHRvbTogMTVweDsKICAgICAgfQoKICAgICAgLmN1c3RvbS1tZXNzYWdlIHsKICAgICAgICBtYXJnaW4tdG9wOiAwOwogICAgICAgIG1hcmdpbi1ib3R0b206IDE1cHg7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KICA8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdGYtdGVuc29yYm9hcmQvcGx1Z2luLWRpYWxvZy5odG1sLmpzClBvbHltZXIoe2lzOiJ0Zi1wbHVnaW4tZGlhbG9nIixwcm9wZXJ0aWVzOntfdGl0bGU6e3R5cGU6U3RyaW5nLHZhbHVlOm51bGx9LF9jdXN0b21NZXNzYWdlOnt0eXBlOlN0cmluZyx2YWx1ZTpudWxsfSxfb3Blbjp7dHlwZTpCb29sZWFufSxfaGlkZGVuOnt0eXBlOkJvb2xlYW4sY29tcHV0ZWQ6Il9jb21wdXRlSGlkZGVuKF9vcGVuKSIscmVmbGVjdFRvQXR0cmlidXRlOiEwfSxfdXNlTmF0aXZlQmFja2Ryb3A6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxyZWFkT25seTohMH19LG9wZW5Ob1RlbnNvckZsb3dEaWFsb2coKXt0aGlzLm9wZW5EaWFsb2coIlRoaXMgcGx1Z2luIGlzIGRpc2FibGVkIHdpdGhvdXQgVGVuc29yRmxvdyIsJ1RvIGVuYWJsZSB0aGlzIHBsdWdpbiBpbiBUZW5zb3JCb2FyZCwgaW5zdGFsbCBUZW5zb3JGbG93IHdpdGggInBpcCBpbnN0YWxsIHRlbnNvcmZsb3ciIG9yIGVxdWl2YWxlbnQuJyl9LG9wZW5PbGRUZW5zb3JGbG93RGlhbG9nKGEpe3RoaXMub3BlbkRpYWxvZygiVGhpcyBwbHVnaW4gaXMgZGlzYWJsZWQgd2l0aG91dCBUZW5zb3JGbG93ICIrCmEsIlRvIGVuYWJsZSB0aGlzIHBsdWdpbiBpbiBUZW5zb3JCb2FyZCwgaW5zdGFsbCBUZW5zb3JGbG93ICIrYSsnIG9yIGdyZWF0ZXIgd2l0aCAicGlwIGluc3RhbGwgdGVuc29yZmxvdyIgb3IgZXF1aXZhbGVudC4nKX0sb3BlbkRpYWxvZyhhLGMpe3RoaXMuc2V0KCJfdGl0bGUiLGEpO3RoaXMuc2V0KCJfY3VzdG9tTWVzc2FnZSIsYyk7dGhpcy4kLmRpYWxvZy5vcGVuKCl9LGNsb3NlRGlhbG9nKCl7dGhpcy4kLmRpYWxvZy5jbG9zZSgpfSxfY29tcHV0ZUhpZGRlbihhKXtyZXR1cm4hYX19KTsKPC9zY3JpcHQ+CjwvZG9tLW1vZHVsZT4KCgoKCgo8ZG9tLW1vZHVsZSBpZD0idGYtcHJvZmlsZS1kYXNoYm9hcmQiPgogIDx0ZW1wbGF0ZT4KICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaXNTdGF0ZShfdG9wTGV2ZWxTdGF0ZSwgJ0lOX0NPTEFCJyldXSI+CiAgICAgIDxkaXYgc3R5bGU9Im1heC13aWR0aDogNTQwcHg7IG1hcmdpbjogODBweCBhdXRvIDAgYXV0bzsiPgogICAgICAgIDxoMz5Qcm9maWxpbmcgaXNu4oCZdCBzdXBwb3J0ZWQgaW4gQ29sYWIgeWV0LjwvaDM+CiAgICAgICAgPHA+CiAgICAgICAgICBQbGVhc2Ugc2VlCiAgICAgICAgICA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9pc3N1ZXMvMTkxMyIgcmVsPSJub29wZW5lciIgdGFyZ2V0PSJfYmxhbmsiPkdpdEh1YiBpc3N1ZSAjMTkxMzwvYT4KICAgICAgICAgIGZvciBtb3JlIGluZm9ybWF0aW9uLgogICAgICAgIAogICAgICA8L2Rpdj4KICAgIDwvdGVtcGxhdGU+CiAgICA8cGFwZXItdG9hc3QgaWQ9InRvYXN0IiBkdXJhdGlvbj0iMCIgdGV4dD0iIiBhbHdheXMtb24tdG9wPgogICAgICA8cGFwZXItYnV0dG9uIG9uY2xpY2s9InRvYXN0LnRvZ2dsZSgpIiBjbGFzcz0ieWVsbG93LWJ1dHRvbiI+Q2xvc2Ugbm93ITwvcGFwZXItYnV0dG9uPgogICAgPC9wYXBlci10b2FzdD4KICAgIDx0Zi1wbHVnaW4tZGlhbG9nIGlkPSJpbml0aWFsRGlhbG9nIj48L3RmLXBsdWdpbi1kaWFsb2c+CiAgICA8cGFwZXItZGlhbG9nIGlkPSJjYXB0dXJlUHJvZmlsZURpYWxvZyIgbW9kYWw+CiAgICAgIDxwYXBlci1pbnB1dCBsYWJlbD0iUHJvZmlsZXIgU2VydmljZSBVUkwgb3IgVFBVIG5hbWUiIGFsd2F5cy1mbG9hdC1sYWJlbCBwbGFjZWhvbGRlcj0ibG9jYWxob3N0OjYwMDkiIHZhbHVlPSJ7e19wcm9maWxlclNlcnZpY2VBZGRyZXNzfX0iIGF1dG8tdmFsaWRhdGUgcmVxdWlyZWQ+PC9wYXBlci1pbnB1dD4KICAgICAgPGxhYmVsIGlkPSJwcm9maWxlci1hZGRyZXNzLXR5cGUtbGFiZWwiPkFkZHJlc3MgVHlwZTo8L2xhYmVsPgogICAgICA8cGFwZXItcmFkaW8tZ3JvdXAgc2VsZWN0ZWQ9Int7X3Byb2ZpbGVyU2VydmljZUFkZHJlc3NUeXBlfX0iIGFyaWEtbGFiZWxsZWRieT0icHJvZmlsZXItYWRkcmVzcy10eXBlLWxhYmVsIj4KICAgICAgICA8cGFwZXItcmFkaW8tYnV0dG9uIG5hbWU9ImlwLWFkZHJlc3MiPklQIEFkZHJlc3M8L3BhcGVyLXJhZGlvLWJ1dHRvbj4KICAgICAgICA8cGFwZXItcmFkaW8tYnV0dG9uIG5hbWU9InRwdS1uYW1lIj5UUFUgTmFtZTwvcGFwZXItcmFkaW8tYnV0dG9uPgogICAgICA8L3BhcGVyLXJhZGlvLWdyb3VwPgogICAgICA8cGFwZXItaW5wdXQgbGFiZWw9IlByb2ZpbGluZyBEdXJhdGlvbiAobWlsbGlzZWNvbmRzKSIgYWx3YXlzLWZsb2F0LWxhYmVsIHR5cGU9Im51bWJlciIgbWluPSIxIiBtYXg9IjYwMDAwMCIgYXV0by12YWxpZGF0ZSBwYXR0ZXJuPSJbMC05XSsiIGVycm9yLW1lc3NhZ2U9IklucHV0IGlzIG5vdCBhbiBpbnRlZ2VyIGJldHdlZW4gMSB0byA2MDAwMDAiIHJlcXVpcmVkIHZhbHVlPSJ7e19wcm9maWxlRHVyYXRpb259fSI+PC9wYXBlci1pbnB1dD4KCiAgICAgIDxwYXBlci1pbnB1dCBsYWJlbD0iQXV0b21hdGljYWxseSByZXRyeSBOIHRpbWVzIHdoZW4gbm8gdHJhY2UgZXZlbnQgaXMgY29sbGVjdGVkIiBhbHdheXMtZmxvYXQtbGFiZWwgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG1heD0iMTAwIiBhdXRvLXZhbGlkYXRlIHBhdHRlcm49IlswLTldKyIgZXJyb3ItbWVzc2FnZT0iSW5wdXQgaXMgbm90IGFuIGludGVnZXIgYmV0d2VlbiAwIHRvIDEwMCIgcmVxdWlyZWQgdmFsdWU9Int7X3Byb2ZpbGVOdW1SZXRyeX19Ij48L3BhcGVyLWlucHV0PgoKICAgICAgPGRpdiBoaWRkZW49Int7IV9zaG91bGRTaG93VHB1T3B0aW9ucyhfcHJvZmlsZXJTZXJ2aWNlQWRkcmVzc1R5cGUpfX0iPgogICAgICAgIDxwYXBlci1jaGVja2JveCBjaGVja2VkPSJ7e19wcm9maWxlSW5jbHVkZURhdGFzZXRPcHN9fSI+VHJhY2UgZGF0YXNldCBvcHM8L3BhcGVyLWNoZWNrYm94PgogICAgICAgIDxwYXBlci1pbnB1dCBsYWJlbD0iU3Vic2V0IG9mIHdvcmtlciBUUFVzIHRvIHByb2ZpbGUgKG9wdGlvbmFsKSIgYWx3YXlzLWZsb2F0LWxhYmVsIHBsYWNlaG9sZGVyPSJMaXN0IG9mIElQcywgZS5nLiAxMC40LjEuMiwxMC40LjEuMyIgdmFsdWU9Int7X3Byb2ZpbGVXb3JrZXJMaXN0fX0iPjwvcGFwZXItaW5wdXQ+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJidXR0b25zIj4KICAgICAgICA8cGFwZXItYnV0dG9uIGRpYWxvZy1jb25maXJtIHJhaXNlZCBvbi10YXA9Il9jYXB0dXJlUHJvZmlsZSIgZGlzYWJsZWQkPSJbW19zaG91bGREaXNhYmxlQ2FwdHVyZVByb2ZpbGVCdXR0b24oX3Byb2ZpbGVyU2VydmljZUFkZHJlc3MsIF9wcm9maWxlRHVyYXRpb24sIF9wcm9maWxlTnVtUmV0cnkpXV0iPgogICAgICAgICAgQ2FwdHVyZTwvcGFwZXItYnV0dG9uPgogICAgICAgIDxwYXBlci1idXR0b24gZGlhbG9nLWNvbmZpcm0+Q2xvc2U8L3BhcGVyLWJ1dHRvbj4KICAgICAgPC9kaXY+CiAgICA8L3BhcGVyLWRpYWxvZz4KICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaXNTdGF0ZShfdG9wTGV2ZWxTdGF0ZSwgJ0xPQURJTkcnKV1dIj4KICAgICAgPGRpdiBpZD0icHJvZ3Jlc3MtYmFyIj4KICAgICAgICA8ZGl2IGlkPSJwcm9ncmVzcy1tc2ciPltbcHJvZ3Jlc3MubXNnXV08L2Rpdj4KICAgICAgICA8cGFwZXItcHJvZ3Jlc3MgdmFsdWU9IltbcHJvZ3Jlc3MudmFsdWVdXSI+PC9wYXBlci1wcm9ncmVzcz4KICAgICAgPC9kaXY+CiAgICA8L3RlbXBsYXRlPgogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19pc1N0YXRlKF90b3BMZXZlbFN0YXRlLCAnREFUQV9OT1RfRk9VTkQnKV1dIj4KICAgICAgPGRpdiBzdHlsZT0ibWF4LXdpZHRoOiA1NDBweDsgbWFyZ2luOiA4MHB4IGF1dG8gMCBhdXRvOyI+CiAgICAgICAgPGgzPk5vIHByb2ZpbGUgZGF0YSB3YXMgZm91bmQuPC9oMz4KCiAgICAgICAgPHBhcGVyLWJ1dHRvbiByYWlzZWQgb24tdGFwPSJfb3BlbkNhcHR1cmVQcm9maWxlRGlhbG9nIj5DYXB0dXJlIFByb2ZpbGU8L3BhcGVyLWJ1dHRvbj4KICAgICAgICA8cGFwZXItc3Bpbm5lciBjbGFzcz0iY2FwdHVyZS1zcGlubmVyIiBhY3RpdmU9IltbX2NhcHR1cmluZ1Byb2ZpbGVdXSI+PC9wYXBlci1zcGlubmVyPgoKICAgICAgICA8cD4KICAgICAgICAgIElmIHlvdSBoYXZlIGEgbW9kZWwgcnVubmluZyBvbiBDUFUsIEdQVSwgb3IgR29vZ2xlIENsb3VkIFRQVSwgeW91IG1heQogICAgICAgICAgYmUgYWJsZSB0byB1c2UgdGhlIGFib3ZlIGJ1dHRvbiB0byBjYXB0dXJlIGEgcHJvZmlsZS4KICAgICAgICAKCiAgICAgICAgPHA+CiAgICAgICAgICBJZiB5b3XigJlyZSBhIENQVSBvciBHUFUgdXNlciwgcGxlYXNlIHVzZSB0aGUgSVAgYWRkcmVzcyBvcHRpb24uIFlvdSBtYXkKICAgICAgICAgIHdhbnQgdG8gY2hlY2sgb3V0IHRoZQogICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9jb2xhYi5yZXNlYXJjaC5nb29nbGUuY29tL2dpdGh1Yi90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL2RvY3MvcjIvdGVuc29yYm9hcmRfcHJvZmlsaW5nX2tlcmFzLmlweW5iIiByZWw9Im5vb3BlbmVyIiB0YXJnZXQ9Il9ibGFuayI+dHV0b3JpYWw8L2E+CiAgICAgICAgICBvbiBob3cgdG8gc3RhcnQgYSBUZW5zb3JGbG93IHByb2ZpbGVyIHNlcnZlciBhbmQgcHJvZmlsZSBhIEtlcmFzIG1vZGVsCiAgICAgICAgICBvbiBhIEdQVS4KICAgICAgICAKCiAgICAgICAgPHA+CiAgICAgICAgICBJZiB5b3UncmUgYSBUUFUgdXNlciwgcGxlYXNlIHVzZSB0aGUgVFBVIG5hbWUgb3B0aW9uIGFuZCB5b3UgbWF5IHdhbnQKICAgICAgICAgIHRvIGNoZWNrIG91dCB0aGUKICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vY2xvdWQuZ29vZ2xlLmNvbS90cHUvZG9jcy9jbG91ZC10cHUtdG9vbHMiIHJlbD0ibm9vcGVuZXIiIHRhcmdldD0iX2JsYW5rIj50dXRvcmlhbDwvYT4KICAgICAgICAgIG9uIGhvdyB0byBpbnRlcnByZXRpbmcgdGhlIHByb2ZpbGluZyByZXN1bHRzLgogICAgICAgIAoKICAgICAgICA8cD4KICAgICAgICAgIElmIHlvdSB0aGluayBwcm9maWxpbmcgaXMgZG9uZSBwcm9wZXJseSwgcGxlYXNlIHNlZSB0aGUgcGFnZSBvZgogICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9jbG91ZC5nb29nbGUuY29tL3RwdS9kb2NzL3Ryb3VibGVzaG9vdGluZyIgcmVsPSJub29wZW5lciIgdGFyZ2V0PSJfYmxhbmsiPkdvb2dsZSBDbG91ZCBUUFUgVHJvdWJsZXNob290aW5nIGFuZCBGQVE8L2E+CiAgICAgICAgICBhbmQgY29uc2lkZXIgZmlsaW5nIGFuIGlzc3VlIG9uIEdpdEh1Yi4KICAgICAgICAKICAgICAgPC9kaXY+CiAgICA8L3RlbXBsYXRlPgogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19pc1N0YXRlKF90b3BMZXZlbFN0YXRlLCAnQUNUSVZFJyldXSI+CiAgICAgIDx0Zi1kYXNoYm9hcmQtbGF5b3V0PgogICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXIiIHNsb3Q9InNpZGViYXIiPgogICAgICAgICAgPGRpdiBjbGFzcz0iYWxsY29udHJvbHMiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24iPgogICAgICAgICAgICAgIDxwYXBlci1idXR0b24gcmFpc2VkIG9uLXRhcD0iX29wZW5DYXB0dXJlUHJvZmlsZURpYWxvZyI+Q2FwdHVyZSBQcm9maWxlPC9wYXBlci1idXR0b24+CiAgICAgICAgICAgICAgPHBhcGVyLXNwaW5uZXIgY2xhc3M9ImNhcHR1cmUtc3Bpbm5lciIgYWN0aXZlPSJbW19jYXB0dXJpbmdQcm9maWxlXV0iPjwvcGFwZXItc3Bpbm5lcj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiI+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGl0bGUiPgogICAgICAgICAgICAgICAgUnVucyA8c3BhbiBjbGFzcz0iY291bnRlciI+KFtbX2RhdGFzZXRzLmxlbmd0aF1dKTwvc3Bhbj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICA8cGFwZXItZHJvcGRvd24tbWVudSBuby1sYWJlbC1mbG9hdCBuby1hbmltYXRpb25zIG5vaW5rIGhvcml6b250YWwtYWxpZ249ImxlZnQiPgogICAgICAgICAgICAgICAgPHBhcGVyLWxpc3Rib3ggaWQ9Imxpc3RfYm94X3J1biIgc2xvdD0iZHJvcGRvd24tY29udGVudCIgc2VsZWN0ZWQ9Int7c2VsZWN0ZWREYXRhc2V0SW5kZXh9fSI+CiAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpZD0icnVuX2l0ZW1zIiBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX2RhdGFzZXRzXV0iPgogICAgICAgICAgICAgICAgICAgIDxwYXBlci1pdGVtPltbaXRlbS5uYW1lXV08L3BhcGVyLWl0ZW0+CiAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8L3BhcGVyLWxpc3Rib3g+CiAgICAgICAgICAgICAgPC9wYXBlci1kcm9wZG93bi1tZW51PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZSI+CiAgICAgICAgICAgICAgICBUb29scyA8c3BhbiBjbGFzcz0iY291bnRlciI+KFtbX2FjdGl2ZVRvb2xzTGlzdC5sZW5ndGhdXSk8L3NwYW4+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPHBhcGVyLWRyb3Bkb3duLW1lbnUgbm8tbGFiZWwtZmxvYXQgbm8tYW5pbWF0aW9ucyBub2luayBob3Jpem9udGFsLWFsaWduPSJsZWZ0Ij4KICAgICAgICAgICAgICAgIDxwYXBlci1saXN0Ym94IGlkPSJsaXN0X2JveF90b29sIiBzbG90PSJkcm9wZG93bi1jb250ZW50IiBzZWxlY3RlZD0ie3tzZWxlY3RlZFRvb2xJbmRleH19Ij4KICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlkPSJ0b29sX2l0ZW1zIiBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX2FjdGl2ZVRvb2xzTGlzdF1dIj4KICAgICAgICAgICAgICAgICAgICA8cGFwZXItaXRlbT5bW2l0ZW1dXTwvcGFwZXItaXRlbT4KICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbWyFfaGFzQWN0aXZlVG9vbHMoKV1dIiByZXN0YW1wPSJ0cnVlIj4KICAgICAgICAgICAgICAgICAgICA8cGFwZXItaXRlbT5Ob25lPC9wYXBlci1pdGVtPgogICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgICAgPC9wYXBlci1saXN0Ym94PgogICAgICAgICAgICAgIDwvcGFwZXItZHJvcGRvd24tbWVudT4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiI+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGl0bGUiPgogICAgICAgICAgICAgICAgSG9zdHMgPHNwYW4gY2xhc3M9ImNvdW50ZXIiPihbW19hY3RpdmVIb3N0c0xpc3QubGVuZ3RoXV0pPC9zcGFuPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDxwYXBlci1kcm9wZG93bi1tZW51IG5vLWxhYmVsLWZsb2F0IG5vLWFuaW1hdGlvbnMgbm9pbmsgaG9yaXpvbnRhbC1hbGlnbj0ibGVmdCI+CiAgICAgICAgICAgICAgICA8cGFwZXItbGlzdGJveCBpZD0ibGlzdF9ib3hfaG9zdCIgc2xvdD0iZHJvcGRvd24tY29udGVudCIgc2VsZWN0ZWQ9Int7c2VsZWN0ZWRIb3N0SW5kZXh9fSI+CiAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpZD0iaG9zdF9pdGVtcyIgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19hY3RpdmVIb3N0c0xpc3RdXSI+CiAgICAgICAgICAgICAgICAgICAgPHBhcGVyLWl0ZW0+W1tfZ2V0SG9zdERpc3BsYXlOYW1lKGl0ZW0pXV08L3BhcGVyLWl0ZW0+CiAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8L3BhcGVyLWxpc3Rib3g+CiAgICAgICAgICAgICAgPC9wYXBlci1kcm9wZG93bi1tZW51PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIGRldGFpbHMtY29udGFpbmVyIj4KICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2lzQ3VycmVudFRvb2woX3Rvb2xJblNjb3BlLCAnb3BfcHJvZmlsZScpXV0iIHJlc3RhbXA9InRydWUiPgogICAgICAgICAgICAgICAgPHRmLW9wLWRldGFpbHMgaGlkZGVuPSJbWyFfYWN0aXZlT3BEZXRhaWxzXV0iIG5vZGU9IltbX2FjdGl2ZU9wRGV0YWlsc11dIj48L3RmLW9wLWRldGFpbHM+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2lzQ3VycmVudFRvb2woX3Rvb2xJblNjb3BlLCAnbWVtb3J5X3ZpZXdlcicpXV0iIHJlc3RhbXA9InRydWUiPgogICAgICAgICAgICAgICAgPGJ1ZmZlci1kZXRhaWxzIGhpZGRlbj0iW1shX2FjdGl2ZUJ1ZmZlckRldGFpbHNdXSIgbm9kZT0iW1tfYWN0aXZlQnVmZmVyRGV0YWlsc11dIj48L2J1ZmZlci1kZXRhaWxzPgogICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19pc0N1cnJlbnRUb29sKF90b29sSW5TY29wZSwgJ3BvZF92aWV3ZXInKV1dIiByZXN0YW1wPSJ0cnVlIj4KICAgICAgICAgICAgICAgIDxkZXRhaWxzLWNhcmQgaGlkZGVuPSJbWyFfYWN0aXZlUG9kRGV0YWlsc11dIiBub2Rlcz0iW1tfYWN0aXZlUG9kRGV0YWlsc11dIj48L2RldGFpbHMtY2FyZD4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImNlbnRlciIgc2xvdD0iY2VudGVyIj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaXNDdXJyZW50VG9vbChfdG9vbEluU2NvcGUsICd0cmFjZV92aWV3ZXInKV1dIiByZXN0YW1wPSJ0cnVlIj4KICAgICAgICAgICAgPGlmcmFtZSBpZD0idHZfaWZyYW1lIiBoZWlnaHQ9IjEwMCUiIHdpZHRoPSIxMDAlIiBzcmMkPSJbW190cmFjZURhdGFVcmxdXSI+CiAgICAgICAgICAgIDwvaWZyYW1lPgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaXNDdXJyZW50VG9vbChfdG9vbEluU2NvcGUsICdvcF9wcm9maWxlJyldXSIgcmVzdGFtcD0idHJ1ZSI+CiAgICAgICAgICAgIDx0Zi1vcC1wcm9maWxlIF9kYXRhPSJbW19vcFByb2ZpbGVEYXRhXV0iIGFjdGl2ZT0ie3tfYWN0aXZlT3BEZXRhaWxzfX0iPjwvdGYtb3AtcHJvZmlsZT4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2lzQ3VycmVudFRvb2woX3Rvb2xJblNjb3BlLCAnaW5wdXRfcGlwZWxpbmVfYW5hbHl6ZXInKV1dIiByZXN0YW1wPSJ0cnVlIj4KICAgICAgICAgICAgPGlucHV0LXBpcGVsaW5lLWFuYWx5emVyIF9kYXRhPSJbW19pbnB1dFBpcGVsaW5lRGF0YV1dIj48L2lucHV0LXBpcGVsaW5lLWFuYWx5emVyPgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaXNDdXJyZW50VG9vbChfdG9vbEluU2NvcGUsICdvdmVydmlld19wYWdlJyldXSIgcmVzdGFtcD0idHJ1ZSI+CiAgICAgICAgICAgIDxvdmVydmlldy1wYWdlIF9kYXRhPSJbW19vdmVydmlld1BhZ2VEYXRhXV0iPjwvb3ZlcnZpZXctcGFnZT4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2lzQ3VycmVudFRvb2woX3Rvb2xJblNjb3BlLCAncG9kX3ZpZXdlcicpXV0iIHJlc3RhbXA9InRydWUiPgogICAgICAgICAgICA8cG9kLXZpZXdlci1kYXNoYm9hcmQgZGF0YT0iW1tfcG9kVmlld2VyRGF0YV1dIiBhY3RpdmUtZGV0YWlscz0ie3tfYWN0aXZlUG9kRGV0YWlsc319Ij48L3BvZC12aWV3ZXItZGFzaGJvYXJkPgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaXNDdXJyZW50VG9vbChfdG9vbEluU2NvcGUsICdtZW1vcnlfdmlld2VyJyldXSIgcmVzdGFtcD0idHJ1ZSI+CiAgICAgICAgICAgIDxtZW1vcnktdmlld2VyLWRhc2hib2FyZCBfZGF0YT0iW1tfbWVtb3J5Vmlld2VyRGF0YV1dIiBhY3RpdmU9Int7X2FjdGl2ZUJ1ZmZlckRldGFpbHN9fSI+PC9tZW1vcnktdmlld2VyLWRhc2hib2FyZD4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2lzQ3VycmVudFRvb2woX3Rvb2xJblNjb3BlLCAnZ29vZ2xlX2NoYXJ0X2RlbW8nKV1dIiByZXN0YW1wPSJ0cnVlIj4KICAgICAgICAgICAgPGdvb2dsZS1jaGFydC1kZW1vIF9kYXRhPSJbW19nb29nbGVDaGFydERlbW9EYXRhXV0iPjwvZ29vZ2xlLWNoYXJ0LWRlbW8+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvZGl2PgogICAgICA8L3RmLWRhc2hib2FyZC1sYXlvdXQ+CiAgICA8L3RlbXBsYXRlPgogICAgPHN0eWxlIGluY2x1ZGU9ImRhc2hib2FyZC1zdHlsZSI+PC9zdHlsZT4KCiAgICA8c3R5bGU+CiAgICAgIC5jZW50ZXIgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIH0KICAgICAgaWZyYW1lIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgIH0KICAgICAgI3Byb2dyZXNzLWJhciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogNDBweDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgfQogICAgICAjcHJvZ3Jlc3MtbXNnIHsKICAgICAgICB3aWR0aDogNDAwcHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogNXB4OwogICAgICB9CiAgICAgIHBhcGVyLXByb2dyZXNzIHsKICAgICAgICB3aWR0aDogNDAwcHg7CiAgICAgICAgLS1wYXBlci1wcm9ncmVzcy1oZWlnaHQ6IDZweDsKICAgICAgICAtLXBhcGVyLXByb2dyZXNzLWFjdGl2ZS1jb2xvcjogI2YzOTEzZTsKICAgICAgfQogICAgICBwYXBlci1kcm9wZG93bi1tZW51IHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQogICAgICAuZGV0YWlscy1jb250YWluZXIgewogICAgICAgIHBhZGRpbmctcmlnaHQ6IDVweDsKICAgICAgfQogICAgICB0Zi1vcC1kZXRhaWxzLAogICAgICBidWZmZXItZGV0YWlscywKICAgICAgZGV0YWlscy1jYXJkIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtOwogICAgICB9CiAgICAgIC55ZWxsb3ctYnV0dG9uIHsKICAgICAgICBjb2xvcjogI2VlZmY0MTsKICAgICAgICB0ZXh0LXRyYW5zZm9ybTogbm9uZTsKICAgICAgfQogICAgICAuY2FwdHVyZS1zcGlubmVyIHsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDVweDsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CiAgPHNjcmlwdD4vL35+V0VCUEFUSH5+L3RmLXByb2ZpbGUtZGFzaGJvYXJkL3RmLXByb2ZpbGUtZGFzaGJvYXJkLmh0bWwuanMKKGZ1bmN0aW9uKCl7UG9seW1lcih7aXM6InRmLXByb2ZpbGUtZGFzaGJvYXJkIixwcm9wZXJ0aWVzOntfcmVxdWVzdE1hbmFnZXI6e3R5cGU6T2JqZWN0LHZhbHVlOigpPT5uZXcgUGsuUmVxdWVzdE1hbmFnZXJ9LF9pc0F0dGFjaGVkOkJvb2xlYW4sX2lzQXZhaWxhYmxlOkJvb2xlYW4sX2luaXRpYWxpemVkOkJvb2xlYW4sX2RhdGFOb3RGb3VuZDpCb29sZWFuLF9kYXRhc2V0czp7dHlwZTpBcnJheSxub3RpZnk6ITAsb2JzZXJ2ZXI6Il9kYXRhc2V0c0NoYW5nZWQifSxfYWN0aXZlVG9vbHNMaXN0Ont0eXBlOkFycmF5LGNvbXB1dGVkOiJfZ2V0QWN0aXZlVG9vbHNMaXN0KHNlbGVjdGVkRGF0YXNldEluZGV4LCBfZGF0YXNldHMpIixvYnNlcnZlcjoiX2FjdGl2ZVRvb2xzQ2hhbmdlZCJ9LF9hY3RpdmVIb3N0c0xpc3Q6e3R5cGU6QXJyYXksb2JzZXJ2ZXI6Il9hY3RpdmVIb3N0c0NoYW5nZWQifSxfaW5Db2xhYjp7dHlwZTpCb29sZWFuLHZhbHVlOigpPT4hISh3aW5kb3cuVEVOU09SQk9BUkRfRU5WfHwKe30pLklOX0NPTEFCLHJlYWRPbmx5OiEwfSxfdG9wTGV2ZWxTdGF0ZTp7dHlwZTpTdHJpbmcsY29tcHV0ZWQ6Il9jb21wdXRlVG9wTGV2ZWxTdGF0ZShfaW5Db2xhYiwgX2RhdGFOb3RGb3VuZCwgcHJvZ3Jlc3MpIixyZWFkT25seTohMH0scHJvZ3Jlc3M6e3R5cGU6T2JqZWN0LG5vdGlmeTohMH0sc2VsZWN0ZWREYXRhc2V0SW5kZXg6e3R5cGU6TnVtYmVyLG5vdGlmeTohMCx2YWx1ZTowfSxzZWxlY3RlZFRvb2xJbmRleDp7dHlwZTpOdW1iZXIsbm90aWZ5OiEwLHZhbHVlOjB9LHNlbGVjdGVkSG9zdEluZGV4Ont0eXBlOk51bWJlcixub3RpZnk6ITAsdmFsdWU6MH0sdHJhY2VWaWV3ZXJCYXNlVXJsOnt0eXBlOlN0cmluZyx2YWx1ZToidHJhY2Vfdmlld2VyX2luZGV4Lmh0bWwifSxfcHJvZmlsZXJTZXJ2aWNlQWRkcmVzczpTdHJpbmcsX3Byb2ZpbGVyU2VydmljZUFkZHJlc3NUeXBlOnt0eXBlOlN0cmluZyx2YWx1ZToiaXAtYWRkcmVzcyJ9LF9wcm9maWxlRHVyYXRpb246e3R5cGU6U3RyaW5nLAp2YWx1ZToiMTAwMCJ9LF9wcm9maWxlTnVtUmV0cnk6e3R5cGU6U3RyaW5nLHZhbHVlOiIzIn0sX3Byb2ZpbGVXb3JrZXJMaXN0Ont0eXBlOlN0cmluZ30sX3Byb2ZpbGVJbmNsdWRlRGF0YXNldE9wczp7dHlwZTpCb29sZWFuLHZhbHVlOiEwfSxfdHJhY2VEYXRhVXJsOnt0eXBlOlN0cmluZyx2YWx1ZToiIn0sX29wUHJvZmlsZURhdGE6e3R5cGU6T2JqZWN0fSxfaW5wdXRQaXBlbGluZURhdGE6e3R5cGU6T2JqZWN0fSxfb3ZlcnZpZXdQYWdlRGF0YTp7dHlwZTpPYmplY3R9LF9tZW1vcnlWaWV3ZXJEYXRhOnt0eXBlOk9iamVjdH0sX3BvZFZpZXdlckRhdGE6e3R5cGU6T2JqZWN0fSxfZ29vZ2xlQ2hhcnREZW1vRGF0YTp7dHlwZTpPYmplY3R9LF9zZWxlY3RlZERhdGFzZXROYW1lOnt0eXBlOlN0cmluZyxub3RpZnk6ITAsY29tcHV0ZWQ6Il9nZXRTZWxlY3RlZERhdGFzZXROYW1lKHNlbGVjdGVkRGF0YXNldEluZGV4LCBfZGF0YXNldHMpIn0sX3NlbGVjdGVkVG9vbE5hbWU6e3R5cGU6U3RyaW5nLApub3RpZnk6ITAsY29tcHV0ZWQ6Il9nZXRTZWxlY3RlZChzZWxlY3RlZFRvb2xJbmRleCwgX2FjdGl2ZVRvb2xzTGlzdCkifSxfc2VsZWN0ZWRIb3N0TmFtZTp7dHlwZTpTdHJpbmcsbm90aWZ5OiEwLGNvbXB1dGVkOiJfZ2V0U2VsZWN0ZWQoc2VsZWN0ZWRIb3N0SW5kZXgsIF9hY3RpdmVIb3N0c0xpc3QpIn0sX3Rvb2xJblNjb3BlOnt0eXBlOlN0cmluZ30sX2FjdGl2ZU9wRGV0YWlsczp7dHlwZTpPYmplY3QsdmFsdWU6KCk9Pnt9fSxfYWN0aXZlQnVmZmVyRGV0YWlsczp7dHlwZTpPYmplY3QsdmFsdWU6KCk9Pnt9fSxfYWN0aXZlUG9kRGV0YWlsczp7dHlwZTpBcnJheX0sX2NhcHR1cmluZ1Byb2ZpbGU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX19LHJlbG9hZDpmdW5jdGlvbigpe30scmVhZHk6ZnVuY3Rpb24oKXt9LG9ic2VydmVyczpbIl9tYXliZUluaXRpYWxpemVEYXNoYm9hcmQoX2lzQXR0YWNoZWQsIF9pc0F2YWlsYWJsZSkiLCJfbWF5YmVVcGRhdGVEYXRhKF9zZWxlY3RlZEhvc3ROYW1lKSIsCiJfbWF5YmVVcGRhdGVBY3RpdmVIb3N0cyhfc2VsZWN0ZWREYXRhc2V0TmFtZSwgX3NlbGVjdGVkVG9vbE5hbWUpIl0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLnNldCgiX2lzQXR0YWNoZWQiLCEwKTt0aGlzLl9yZXF1ZXN0TWFuYWdlci5yZXF1ZXN0KFBrLmdldFJvdXRlcigpLnBsdWdpbnNMaXN0aW5nKCkpLnRoZW4oYT0+eyJwcm9maWxlImluIGE/KHRoaXMuJC5pbml0aWFsRGlhbG9nLmNsb3NlRGlhbG9nKCksdGhpcy5zZXQoIl9pc0F2YWlsYWJsZSIsITApKToodGhpcy4kLmluaXRpYWxEaWFsb2cub3Blbk9sZFRlbnNvckZsb3dEaWFsb2coIjEuMTQiKSx0aGlzLnNldCgiX2lzQXZhaWxhYmxlIiwhMSkpfSl9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5zZXQoIl9pc0F0dGFjaGVkIiwhMSl9LF9vcGVuQ2FwdHVyZVByb2ZpbGVEaWFsb2c6ZnVuY3Rpb24oKXt0aGlzLiQuY2FwdHVyZVByb2ZpbGVEaWFsb2cub3BlbigpfSxfc2hvdWxkRGlzYWJsZUNhcHR1cmVQcm9maWxlQnV0dG9uOmZ1bmN0aW9uKGEsCmMsZCl7cmV0dXJuIWF8fCIiPT09Y3x8IiI9PT1kfSxfc2hvdWxkU2hvd1RwdU9wdGlvbnM6ZnVuY3Rpb24oYSl7cmV0dXJuInRwdS1uYW1lIj09YX0sX2NhcHR1cmVQcm9maWxlOmZ1bmN0aW9uKCl7dGhpcy5fY2FwdHVyaW5nUHJvZmlsZT0hMDtjb25zdCBhPVBrLmFkZFBhcmFtcyhQay5nZXRSb3V0ZXIoKS5wbHVnaW5Sb3V0ZSgicHJvZmlsZSIsIi9jYXB0dXJlX3Byb2ZpbGUiKSx7c2VydmljZV9hZGRyOnRoaXMuX3Byb2ZpbGVyU2VydmljZUFkZHJlc3MudHJpbSgpLGlzX3RwdV9uYW1lOiJ0cHUtbmFtZSI9PXRoaXMuX3Byb2ZpbGVyU2VydmljZUFkZHJlc3NUeXBlLGR1cmF0aW9uOnRoaXMuX3Byb2ZpbGVEdXJhdGlvbix3b3JrZXJfbGlzdDp0aGlzLl9wcm9maWxlV29ya2VyTGlzdCxpbmNsdWRlX2RhdGFzZXRfb3BzOnRoaXMuX3Byb2ZpbGVJbmNsdWRlRGF0YXNldE9wcyxudW1fcmV0cnk6dGhpcy5fcHJvZmlsZU51bVJldHJ5fSk7dGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdChhKS50aGVuKGM9Pgp7dGhpcy5fY2FwdHVyaW5nUHJvZmlsZT0hMTtudWxsIT1jLmVycm9yP3RoaXMuX3Nob3dUb2FzdCgiRmFpbGVkIHRvIGNhcHR1cmUgcHJvZmlsZTogIitjLmVycm9yKTp0aGlzLl9zaG93VG9hc3QoYy5yZXN1bHQpfSkuY2F0Y2goYz0+e3RoaXMuX2NhcHR1cmluZ1Byb2ZpbGU9ITE7dGhpcy5fc2hvd1RvYXN0KCJGYWlsZWQgdG8gY2FwdHVyZSBwcm9maWxlOiAiK2MpfSl9LF9zaG93VG9hc3QoYSl7dGhpcy4kLnRvYXN0LnRleHQ9YTt0aGlzLiQudG9hc3Qub3BlbigpfSxfbWF5YmVJbml0aWFsaXplRGFzaGJvYXJkOmZ1bmN0aW9uKGEsYyl7aWYoIXRoaXMuX2luaXRpYWxpemVkJiZhJiZjKXt0aGlzLl9pbml0aWFsaXplZD0hMDt2YXIgZD1Qay5nZXRSb3V0ZXIoKS5wbHVnaW5Sb3V0ZSgicHJvZmlsZSIsIi90b29scyIpO3RoaXMuc2V0KCJwcm9ncmVzcyIse3ZhbHVlOjAsbXNnOiIifSk7dmFyIGY9dGhpcyxnPXRmLnByb2ZpbGUudXRpbC5nZXRUcmFja2VyKHRoaXMpO3RmLnByb2ZpbGUudXRpbC5ydW5UYXNrKCJMb2FkaW5nIGRhdGFzZXRzIiwKMjAsKCk9Pntjb25zb2xlLmxvZygic3RhcnQgY291bnRpbmciKTtyZXR1cm4gZi5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdChkKX0sZykudGhlbihsPT50Zi5wcm9maWxlLnV0aWwucnVuVGFzaygiUHJvY2Vzc2luZyBkYXRhc2V0cyIsNzAsKCk9Pm5ldyBQcm9taXNlKGZ1bmN0aW9uKGspe2YuX3Byb2Nlc3NSdW5Ub1Rvb2wobCk7ayhudWxsKX0pLGcpKS50aGVuKCgpPT50Zi5wcm9maWxlLnV0aWwucnVuVGFzaygiRG9uZSIsMTAsKCk9Pm51bGwsZykpfX0sX3Byb2Nlc3NSdW5Ub1Rvb2w6ZnVuY3Rpb24oYSl7YT1fLm1hcChhLChjLGQpPT4oe25hbWU6ZCxhY3RpdmVUb29sczpjfSkpO2Euc29ydCgoYyxkKT0+MC1Pay5jb21wYXJlVGFnTmFtZXMoYy5uYW1lLGQubmFtZSkpO3RoaXMuc2V0KCJfZGF0YU5vdEZvdW5kIiwwPT09YS5sZW5ndGgpO3RoaXMuc2V0KCJfZGF0YXNldHMiLGEpfSxfZ2V0U2VsZWN0ZWQ6ZnVuY3Rpb24oYSxjKXtpZihudWxsIT1hKXJldHVybiBjJiYwPD1hJiZhPApjLmxlbmd0aD9jW2FdOm51bGx9LF9nZXRTZWxlY3RlZERhdGFzZXROYW1lOmZ1bmN0aW9uKGEsYyl7aWYobnVsbCE9YSlyZXR1cm4gYyYmMDw9YSYmYTxjLmxlbmd0aD9jW2FdLm5hbWU6IiJ9LF9nZXRBY3RpdmVUb29sc0xpc3Q6ZnVuY3Rpb24oYSxjKXtpZihudWxsIT1hKXJldHVybiBjJiYwPD1hJiZhPGMubGVuZ3RoPyh0aGlzLnNlbGVjdGVkVG9vbEluZGV4PTAsY1thXS5hY3RpdmVUb29scyk6W119LF9tYXliZVVwZGF0ZURhdGE6ZnVuY3Rpb24oYSl7aWYobnVsbCE9YSl7dmFyIGM9dGhpcy5fc2VsZWN0ZWREYXRhc2V0TmFtZSxkPXRoaXMuX3NlbGVjdGVkVG9vbE5hbWU7aWYobnVsbCE9YyYmbnVsbCE9ZClpZih0aGlzLl90b29sSW5TY29wZT0idW5kZWZpbmVkIixkLnN0YXJ0c1dpdGgoInRyYWNlX3ZpZXdlciIpKXt2YXIgZj1Qay5hZGRQYXJhbXMoUGsuZ2V0Um91dGVyKCkucGx1Z2luUm91dGUoInByb2ZpbGUiLCIvZGF0YSIpLHt0YWc6ZCxydW46Yyxob3N0OmF9KSxnPWQuZW5kc1dpdGgoIkAiKTsKdGhpcy5fdHJhY2VEYXRhVXJsPXRoaXMudHJhY2VWaWV3ZXJCYXNlVXJsKyI/dHJhY2VfZGF0YV91cmxceDNkIitlbmNvZGVVUklDb21wb25lbnQoZikrIlx4MjZpc19zdHJlYW1pbmdceDNkIitnO3RoaXMuX3Rvb2xJblNjb3BlPSJ0cmFjZV92aWV3ZXIifWVsc2V7dGhpcy5zZXQoInByb2dyZXNzIix7dmFsdWU6MCxtc2c6IiJ9KTtsZXQgbD10aGlzLGs9dGYucHJvZmlsZS51dGlsLmdldFRyYWNrZXIodGhpcyk7dGYucHJvZmlsZS51dGlsLnJ1blRhc2soIlJlYWRpbmcgIitkKyIgdG9vbCBkYXRhIiwyMCwoKT0+bC5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdChQay5hZGRQYXJhbXMoUGsuZ2V0Um91dGVyKCkucGx1Z2luUm91dGUoInByb2ZpbGUiLCIvZGF0YSIpLHt0YWc6ZCxob3N0OmEscnVuOmN9KSksaykuY2F0Y2goKCk9Pnt9KS50aGVuKG09PnRmLnByb2ZpbGUudXRpbC5ydW5UYXNrKCJEb25lIiw4MCwoKT0+e2wuX3VwZGF0ZVRvb2xEYXRhKGQsbSl9LGspKX19fSxfdXBkYXRlVG9vbERhdGE6ZnVuY3Rpb24oYSwKYyl7c3dpdGNoKGEpe2Nhc2UgIm9wX3Byb2ZpbGUiOnRoaXMuX29wUHJvZmlsZURhdGE9Yzt0aGlzLl90b29sSW5TY29wZT0ib3BfcHJvZmlsZSI7YnJlYWs7Y2FzZSAiaW5wdXRfcGlwZWxpbmVfYW5hbHl6ZXIiOnRoaXMuX2lucHV0UGlwZWxpbmVEYXRhPWM7dGhpcy5fdG9vbEluU2NvcGU9ImlucHV0X3BpcGVsaW5lX2FuYWx5emVyIjticmVhaztjYXNlICJvdmVydmlld19wYWdlIjp0aGlzLl9vdmVydmlld1BhZ2VEYXRhPWM7dGhpcy5fdG9vbEluU2NvcGU9Im92ZXJ2aWV3X3BhZ2UiO2JyZWFrO2Nhc2UgIm1lbW9yeV92aWV3ZXIiOnRoaXMuX21lbW9yeVZpZXdlckRhdGE9Yzt0aGlzLl90b29sSW5TY29wZT0ibWVtb3J5X3ZpZXdlciI7YnJlYWs7Y2FzZSAicG9kX3ZpZXdlciI6dGhpcy5fcG9kVmlld2VyRGF0YT1jO3RoaXMuX3Rvb2xJblNjb3BlPSJwb2Rfdmlld2VyIjticmVhaztjYXNlICJnb29nbGVfY2hhcnRfZGVtbyI6dGhpcy5fZ29vZ2xlQ2hhcnREZW1vRGF0YT1jLHRoaXMuX3Rvb2xJblNjb3BlPQoiZ29vZ2xlX2NoYXJ0X2RlbW8ifX0sX21heWJlVXBkYXRlQWN0aXZlSG9zdHM6ZnVuY3Rpb24oYSxjKXtpZihudWxsPT1hfHxudWxsPT1jKXJldHVybiBudWxsO3RoaXMuX2FjdGl2ZUhvc3RzTGlzdD1bXTthPVBrLmFkZFBhcmFtcyhQay5nZXRSb3V0ZXIoKS5wbHVnaW5Sb3V0ZSgicHJvZmlsZSIsIi9ob3N0cyIpLHt0YWc6YyxydW46YX0pO3RoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3QoYSkudGhlbihkPT57dGhpcy5zZXQoIl9hY3RpdmVIb3N0c0xpc3QiLGQuc29ydCgoZixnKT0+T2suY29tcGFyZVRhZ05hbWVzKGYsZykpKX0pfSxfZGF0YXNldHNDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5fZGF0YXNldHMmJih0aGlzLnNlbGVjdGVkRGF0YXNldEluZGV4PTApfSxfYWN0aXZlVG9vbHNDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5fYWN0aXZlVG9vbHNMaXN0JiZ0aGlzLmFzeW5jKGZ1bmN0aW9uKCl7dGhpcy5zZXQoInNlbGVjdGVkVG9vbEluZGV4IiwtMSk7dGhpcy5zZXQoInNlbGVjdGVkVG9vbEluZGV4IiwKMCl9LmJpbmQodGhpcykpfSxfYWN0aXZlSG9zdHNDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5fYWN0aXZlSG9zdHNMaXN0JiZ0aGlzLmFzeW5jKGZ1bmN0aW9uKCl7dGhpcy5zZXQoInNlbGVjdGVkSG9zdEluZGV4IiwtMSk7dGhpcy5zZXQoInNlbGVjdGVkSG9zdEluZGV4IiwwKX0uYmluZCh0aGlzKSl9LF9pc0N1cnJlbnRUb29sOmZ1bmN0aW9uKGEsYyl7cmV0dXJuIGE9PWN9LF9oYXNBY3RpdmVUb29sczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hY3RpdmVUb29sc0xpc3QmJjA8dGhpcy5fYWN0aXZlVG9vbHNMaXN0Lmxlbmd0aD8hMDohMX0sX2dldEhvc3REaXNwbGF5TmFtZTpmdW5jdGlvbihhKXtyZXR1cm4gbnVsbD09YT8iIjoiIj09YT8iZGVmYXVsdCI6YS5zbGljZSgwLC0xKX0sX2NvbXB1dGVUb3BMZXZlbFN0YXRlOmZ1bmN0aW9uKGEsYyxkKXtyZXR1cm4gYT8iSU5fQ09MQUIiOmM/IkRBVEFfTk9UX0ZPVU5EIjohZHx8MTAwPmQudmFsdWU/IkxPQURJTkciOiJBQ1RJVkUifSwKX2lzU3RhdGU6ZnVuY3Rpb24oYSxjKXtyZXR1cm4gYT09PWN9fSk7JGwucmVnaXN0ZXJEYXNoYm9hcmQoe3BsdWdpbjoicHJvZmlsZSIsZWxlbWVudE5hbWU6InRmLXByb2ZpbGUtZGFzaGJvYXJkIixpc1JlbG9hZERpc2FibGVkOiEwfSl9KSgpOwo8L3NjcmlwdD4KPC9kb20tbW9kdWxlPgoKCgoKCgoKCgoKCgoKCgo8ZG9tLW1vZHVsZSBpZD0idGYtYmVob2xkZXItdmlkZW8iPgogIDx0ZW1wbGF0ZT4KICAgIDxkaXYgaWQ9ImNvbnRhaW5lciI+CiAgICAgIDxpbWcgaWQ9InZpZGVvIiBzcmMkPSJbW19pbWFnZVVSTF1dIj4KICAgIDwvZGl2PgoKICAgIDxzdHlsZT4KICAgICAgaW1nIHsKICAgICAgICBpbWFnZS1yZW5kZXJpbmc6IHBpeGVsYXRlZDsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDEwcHg7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KCiAgPHNjcmlwdD4vL35+V0VCUEFUSH5+L3RmLWJlaG9sZGVyLWRhc2hib2FyZC90Zi1iZWhvbGRlci12aWRlby5odG1sLmpzCihmdW5jdGlvbigpe2NvbnN0IGE9UGsuZ2V0Um91dGVyKCkucGx1Z2luUm91dGUoImJlaG9sZGVyIiwiL2JlaG9sZGVyLWZyYW1lIiksYz1Qay5nZXRSb3V0ZXIoKS5wbHVnaW5Sb3V0ZSgiYmVob2xkZXIiLCIvcGluZyIpO1BvbHltZXIoe2lzOiJ0Zi1iZWhvbGRlci12aWRlbyIscHJvcGVydGllczp7ZnBzOnt0eXBlOk51bWJlcix2YWx1ZToxMCxvYnNlcnZlcjoiX2Zwc0NoYW5nZWQifSxwaW5nU2xlZXA6e3R5cGU6TnVtYmVyLHZhbHVlOjFFM30seGhyVGltZW91dDp7dHlwZTpOdW1iZXIsdmFsdWU6MjUwMH0sX2ltYWdlVVJMOnt0eXBlOlN0cmluZyx2YWx1ZToiZGF0YTppbWFnZS9naWY7YmFzZTY0LFIwbEdPRGxoQVFBQkFBRC9BQ3dBQUFBQUFRQUJBQUFDQURzXHgzZCJ9LF94aHI6T2JqZWN0LF90aW1lcjpOdW1iZXIsX2lzRGVhZDpCb29sZWFufSxhdHRhY2hlZCgpe3RoaXMuc2V0KCJfaW1hZ2VVUkwiLGEpO3RoaXMuX3BpbmcoKX0sZGV0YWNoZWQoKXt0aGlzLl9jbGVhcigpOwp0aGlzLnNldCgiX2ltYWdlVVJMIiwiZGF0YTppbWFnZS9naWY7YmFzZTY0LFIwbEdPRGxoQVFBQkFBRC9BQ3dBQUFBQUFRQUJBQUFDQURzXHgzZCIpfSxfcGluZygpe3RoaXMuX2NsZWFyKCk7dGhpcy5feGhyPW5ldyBYTUxIdHRwUmVxdWVzdDt0aGlzLl94aHIub3BlbigiR0VUIixjLCEwKTt0aGlzLl94aHIudGltZW91dD10aGlzLnhoclRpbWVvdXQ7dGhpcy5feGhyLm9ubG9hZD10aGlzLl9vblBpbmdMb2FkLmJpbmQodGhpcyk7dGhpcy5feGhyLm9uZXJyb3I9dGhpcy5fb25QaW5nLmJpbmQodGhpcywhMSx0aGlzLnBpbmdTbGVlcCk7dGhpcy5feGhyLm9udGltZW91dD10aGlzLl9vblBpbmcuYmluZCh0aGlzLCExLDEpO3RoaXMuX3hoci5zZW5kKG51bGwpfSxfb25QaW5nTG9hZCgpe2lmKDIwMD09dGhpcy5feGhyLnN0YXR1cyl7Y29uc3QgZD1KU09OLnBhcnNlKHRoaXMuX3hoci5yZXNwb25zZVRleHQpO3RoaXMuX29uUGluZygiYWxpdmUiPT1kLnN0YXR1cyx0aGlzLnBpbmdTbGVlcCl9ZWxzZSB0aGlzLl9vblBpbmcoITEsCnRoaXMucGluZ1NsZWVwKX0sX29uUGluZyhkLGYpe2QmJnRoaXMuX2lzRGVhZCYmdGhpcy5zZXQoIl9pbWFnZVVSTCIsYSsiP3RceDNkIisobmV3IERhdGUpLmdldFRpbWUoKSk7dGhpcy5faXNEZWFkPSFkO3RoaXMuX3RpbWVyPXdpbmRvdy5zZXRUaW1lb3V0KCgpPT50aGlzLl9waW5nKCksZil9LF9jbGVhcigpe3RoaXMuX3RpbWVyJiYod2luZG93LmNsZWFyVGltZW91dCh0aGlzLl90aW1lciksdGhpcy5fdGltZXI9bnVsbCk7dGhpcy5feGhyJiYodGhpcy5feGhyLnJlYWR5U3RhdGU8WE1MSHR0cFJlcXVlc3QuRE9ORSYmdGhpcy5feGhyLmFib3J0KCksdGhpcy5feGhyPW51bGwpfSxfZnBzQ2hhbmdlZChkLGYpezA9PWQ/dGhpcy5fY2xlYXIoKTowPT1mJiZ0aGlzLl9waW5nKCl9fSl9KSgpOwo8L3NjcmlwdD4KPC9kb20tbW9kdWxlPgoKCgoKPGRvbS1tb2R1bGUgaWQ9InRmLWJlaG9sZGVyLWluZm8iPgogIDx0ZW1wbGF0ZT4KICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX2l0ZW1zXV0iPgogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLWluZm8iIHN0eWxlJD0iaGVpZ2h0OiBbW2l0ZW0uaGVpZ2h0XV1weCI+CiAgICAgICAgPHVsPgogICAgICAgICAgPGxpPltbaXRlbS5uYW1lXV08L2xpPgogICAgICAgICAgPGxpPnNoYXBlOiBbW2l0ZW0uc2hhcGVdXTwvbGk+CiAgICAgICAgICA8bGk+cmFuZ2U6IFsgW1tpdGVtLm1pbl1dLCBbW2l0ZW0ubWF4XV0gXTwvbGk+CiAgICAgICAgICA8bGk+bWVhbjogW1tpdGVtLm1lYW5dXTwvbGk+CiAgICAgICAgPC91bD4KICAgICAgPC9kaXY+CiAgICA8L3RlbXBsYXRlPgoKICAgIDxzdHlsZT4KICAgICAgLnNlY3Rpb24taW5mbyB7CiAgICAgICAgbWFyZ2luOiAwIDAgNXB4IDA7CiAgICAgIH0KICAgICAgLnNlY3Rpb24taW5mbyB1bCB7CiAgICAgICAgbGlzdC1zdHlsZS10eXBlOiBub25lOwogICAgICAgIG1hcmdpbjogMDsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDEwcHg7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KCiAgPHNjcmlwdD4vL35+V0VCUEFUSH5+L3RmLWJlaG9sZGVyLWRhc2hib2FyZC90Zi1iZWhvbGRlci1pbmZvLmh0bWwuanMKKGZ1bmN0aW9uKCl7Y29uc3QgYT1Qay5nZXRSb3V0ZXIoKS5wbHVnaW5Sb3V0ZSgiYmVob2xkZXIiLCIvc2VjdGlvbi1pbmZvIik7UG9seW1lcih7aXM6InRmLWJlaG9sZGVyLWluZm8iLHByb3BlcnRpZXM6e2Zwczp7dHlwZTpOdW1iZXIsdmFsdWU6MTAsb2JzZXJ2ZXI6Il9mcHNDaGFuZ2VkIn0seGhyVGltZW91dDp7dHlwZTpOdW1iZXIsdmFsdWU6MUU0fSxfaXRlbXM6e3R5cGU6QXJyYXksdmFsdWU6KCk9Plt7bmFtZToiTG9hZGluZy4uLiJ9XX0sX3hocjpPYmplY3QsX3RpbWVyOk51bWJlcn0sYXR0YWNoZWQoKXt0aGlzLl9sb2FkKCl9LGRldGFjaGVkKCl7dGhpcy5fY2xlYXIoKX0sX2xvYWQoKXt0aGlzLl9jbGVhcigpO3RoaXMuX3hocj1uZXcgWE1MSHR0cFJlcXVlc3Q7dGhpcy5feGhyLm9wZW4oIkdFVCIsYSwhMCk7dGhpcy5feGhyLnRpbWVvdXQ9dGhpcy54aHJUaW1lb3V0O3RoaXMuX3hoci5vbmxvYWQ9dGhpcy5fb25Mb2FkLmJpbmQodGhpcyk7dGhpcy5feGhyLm9uZXJyb3I9CnRoaXMuX3JldHJ5LmJpbmQodGhpcyx0aGlzLl9nZXRTbGVlcCgpKTt0aGlzLl94aHIub250aW1lb3V0PXRoaXMuX3JldHJ5LmJpbmQodGhpcywxKTt0aGlzLl94aHIuc2VuZChudWxsKX0sX29uTG9hZCgpe2lmKDIwMD09dGhpcy5feGhyLnN0YXR1cyl7Y29uc3QgYz1KU09OLnBhcnNlKHRoaXMuX3hoci5yZXNwb25zZVRleHQpO2NvbnNvbGUuYXNzZXJ0KEFycmF5LmlzQXJyYXkoYyksIkV4cGVjdGVkIHJlc3BvbnNlIHRvIGJlIGluIGFuIGFycmF5Iik7dGhpcy5faXRlbXM9Y310aGlzLl9yZXRyeSh0aGlzLl9nZXRTbGVlcCgpKX0sX3JldHJ5KGMpe3RoaXMuX3RpbWVyPXdpbmRvdy5zZXRUaW1lb3V0KHRoaXMuX2xvYWQuYmluZCh0aGlzKSxjKX0sX2dldFNsZWVwKCl7cmV0dXJuIDFFMy8oMD09PXRoaXMuZnBzPzE6dGhpcy5mcHMpfSxfY2xlYXIoKXt0aGlzLl90aW1lciYmKHdpbmRvdy5jbGVhclRpbWVvdXQodGhpcy5fdGltZXIpLHRoaXMuX3RpbWVyPW51bGwpO3RoaXMuX3hociYmCih0aGlzLl94aHIucmVhZHlTdGF0ZTxYTUxIdHRwUmVxdWVzdC5ET05FJiZ0aGlzLl94aHIuYWJvcnQoKSx0aGlzLl94aHI9bnVsbCl9LF9mcHNDaGFuZ2VkKGMsZCl7MD09Yz90aGlzLl9jbGVhcigpOjA9PWQmJnRoaXMuX2xvYWQoKX19KX0pKCk7Cjwvc2NyaXB0Pgo8L2RvbS1tb2R1bGU+CgoKPGRvbS1tb2R1bGUgaWQ9InRmLWJlaG9sZGVyLWRhc2hib2FyZCI+CiAgPHRlbXBsYXRlPgogICAgPHRmLXBsdWdpbi1kaWFsb2cgaWQ9ImluaXRpYWxEaWFsb2ciPjwvdGYtcGx1Z2luLWRpYWxvZz4KICAgIDx0Zi1kYXNoYm9hcmQtbGF5b3V0PgogICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyIiBzbG90PSJzaWRlYmFyIj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2NvbnRyb2xzX2Rpc2FibGVkXV0iPgogICAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIj4KICAgICAgICAgICAgPHAgY2xhc3M9ImNvbnRyb2xzLWRpc2FibGVkLW1lc3NhZ2UiPgogICAgICAgICAgICAgIENvbnRyb2xzIGRpc2FibGVkOiBkaXJlY3RvcnkgaXMgbm90IHdyaXRlYWJsZS4KICAgICAgICAgICAgCiAgICAgICAgICAgIDxwIGNsYXNzPSJkaXNjbGFpbWVyIj4KICAgICAgICAgICAgICBCZWhvbGRlciByZXF1aXJlcyB3cml0ZSBhY2Nlc3MgdG8gdGhlIGxvZyBkaXJlY3RvcnkgaW4gb3JkZXIgdG8KICAgICAgICAgICAgICBjb21tdW5pY2F0ZSB2aXN1YWxpemF0aW9uIGNoYW5nZXMgdG8gdGhlIDxjb2RlPkJlaG9sZGVyPC9jb2RlPgogICAgICAgICAgICAgIGluc3RhbmNlIGluIHlvdXIgbW9kZWwuCiAgICAgICAgICAgIAogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24iPgogICAgICAgICAgPGgzPlZhbHVlczwvaDM+CiAgICAgICAgICA8cGFwZXItcmFkaW8tZ3JvdXAgaWQ9InZhbHVlc1NlbGVjdG9yIiBzZWxlY3RlZD0ie3tfdmFsdWVzfX0iPgogICAgICAgICAgICA8cGFwZXItcmFkaW8tYnV0dG9uIG5hbWU9InRyYWluYWJsZV92YXJpYWJsZXMiIGRpc2FibGVkPSJbW19jb250cm9sc19kaXNhYmxlZF1dIj4KICAgICAgICAgICAgICA8cHJlPnRmLnRyYWluYWJsZV92YXJpYWJsZXMoKTwvcHJlPgogICAgICAgICAgICA8L3BhcGVyLXJhZGlvLWJ1dHRvbj4KICAgICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbiBpZD0ib3B0aW9uLWFycmF5cyIgbmFtZT0iYXJyYXlzIiBkaXNhYmxlZD0iW1tfY29udHJvbHNfZGlzYWJsZWRdXSI+CiAgICAgICAgICAgICAgPHByZT5iLnVwZGF0ZShhcnJheXM9W05QX0FSUkFZU10pPC9wcmU+CiAgICAgICAgICAgIDwvcGFwZXItcmFkaW8tYnV0dG9uPgogICAgICAgICAgICA8cGFwZXItcmFkaW8tYnV0dG9uIGlkPSJvcHRpb24tZnJhbWVzIiBuYW1lPSJmcmFtZXMiIGRpc2FibGVkPSJbW19jb250cm9sc19kaXNhYmxlZF1dIj4KICAgICAgICAgICAgICA8cHJlPmIudXBkYXRlKGZyYW1lPU5QX0FSUkFZKTwvcHJlPgogICAgICAgICAgICA8L3BhcGVyLXJhZGlvLWJ1dHRvbj4KICAgICAgICAgIDwvcGFwZXItcmFkaW8tZ3JvdXA+CgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW192YWx1ZXNOb3RGcmFtZShfdmFsdWVzKV1dIj4KICAgICAgICAgICAgPHBhcGVyLWNoZWNrYm94IGNoZWNrZWQ9Int7X3Nob3dBbGx9fSIgZGlzYWJsZWQ9IltbX2NvbnRyb2xzX2Rpc2FibGVkXV0iPlNob3cgYWxsIGRhdGEgPGk+KGNhbiBiZSByZXNvdXJjZSBpbnRlbnNpdmUpPC9pPjwvcGFwZXItY2hlY2tib3g+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvZGl2PgoKICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX3ZhbHVlc05vdEZyYW1lKF92YWx1ZXMpXV0iPgogICAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIj4KICAgICAgICAgICAgPGgzPk1vZGU8L2gzPgogICAgICAgICAgICA8cGFwZXItcmFkaW8tZ3JvdXAgaWQ9Im1vZGVTZWxlY3RvciIgc2VsZWN0ZWQ9Int7X21vZGV9fSI+CiAgICAgICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbiBuYW1lPSJjdXJyZW50IiBkaXNhYmxlZD0iW1tfY29udHJvbHNfZGlzYWJsZWRdXSI+CiAgICAgICAgICAgICAgICBjdXJyZW50IHZhbHVlcwogICAgICAgICAgICAgIDwvcGFwZXItcmFkaW8tYnV0dG9uPgogICAgICAgICAgICAgIDxwYXBlci1yYWRpby1idXR0b24gbmFtZT0idmFyaWFuY2UiIGRpc2FibGVkPSJbW19jb250cm9sc19kaXNhYmxlZF1dIj4KICAgICAgICAgICAgICAgIHZhcmlhbmNlIG92ZXIgdHJhaW4gc3RlcHMKICAgICAgICAgICAgICA8L3BhcGVyLXJhZGlvLWJ1dHRvbj4KICAgICAgICAgICAgPC9wYXBlci1yYWRpby1ncm91cD4KICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW192YXJpYW5jZVNlbGVjdGVkKF9tb2RlKV1dIj4KICAgICAgICAgICAgICA8aDQ+VmFyaWFuY2UgdGltZXN0ZXBzOiB7e193aW5kb3dTaXplfX08L2g0PgogICAgICAgICAgICAgIDxwYXBlci1zbGlkZXIgaWQ9IndpbmRvd1NsaWRlciIgdmFsdWU9Int7X3dpbmRvd1NpemV9fSIgdHlwZT0ibnVtYmVyIiBzdGVwPSIxIiBtaW49IjIiIG1heD0iMjAiIHBpbj0idHJ1ZSIgZGlzYWJsZWQ9IltbX2NvbnRyb2xzX2Rpc2FibGVkXV0iPgogICAgICAgICAgICAgIDwvcGFwZXItc2xpZGVyPgogICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPC9kaXY+CgogICAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIj4KICAgICAgICAgICAgPGgzPkltYWdlIHNjYWxpbmc8L2gzPgogICAgICAgICAgICA8cGFwZXItcmFkaW8tZ3JvdXAgaWQ9InNjYWxpbmdTZWxlY3RvciIgc2VsZWN0ZWQ9Int7X3NjYWxpbmd9fSI+CiAgICAgICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbiBpZD0ib3B0aW9uLWxheWVyIiBuYW1lPSJsYXllciIgZGlzYWJsZWQ9IltbX2NvbnRyb2xzX2Rpc2FibGVkXV0iPgogICAgICAgICAgICAgICAgcGVyIHNlY3Rpb24KICAgICAgICAgICAgICA8L3BhcGVyLXJhZGlvLWJ1dHRvbj4KICAgICAgICAgICAgICA8cGFwZXItdG9vbHRpcCBmb3I9Im9wdGlvbi1sYXllciIgcG9zaXRpb249InJpZ2h0Ij4KICAgICAgICAgICAgICAgIEJsYWNrIGlzIHRoZSBsb3dlc3QgdmFsdWUgaW4gdGhhdCBzZWN0aW9uLCB3aGl0ZSBpcyB0aGF0IGxhcmdlc3QKICAgICAgICAgICAgICAgIHZhbHVlIGluIHRoYXQgc2VjdGlvbi4KICAgICAgICAgICAgICA8L3BhcGVyLXRvb2x0aXA+CgogICAgICAgICAgICAgIDxwYXBlci1yYWRpby1idXR0b24gaWQ9Im9wdGlvbi1uZXR3b3JrIiBuYW1lPSJuZXR3b3JrIiBkaXNhYmxlZD0iW1tfY29udHJvbHNfZGlzYWJsZWRdXSI+CiAgICAgICAgICAgICAgICBhbGwgc2VjdGlvbnMKICAgICAgICAgICAgICA8L3BhcGVyLXJhZGlvLWJ1dHRvbj4KICAgICAgICAgICAgICA8cGFwZXItdG9vbHRpcCBmb3I9Im9wdGlvbi1uZXR3b3JrIiBwb3NpdGlvbj0icmlnaHQiPgogICAgICAgICAgICAgICAgQmxhY2sgaXMgdGhlIHNtYWxsZXN0IHZhbHVlIGluIGFsbCBzZWN0aW9ucywgd2hpdGUgaXMgdGhlCiAgICAgICAgICAgICAgICBsYXJnZXN0IHZhbHVlIGluIGFsbCBzZWN0aW9ucy4KICAgICAgICAgICAgICA8L3BhcGVyLXRvb2x0aXA+CiAgICAgICAgICAgIDwvcGFwZXItcmFkaW8tZ3JvdXA+CgogICAgICAgICAgICA8ZGl2IGlkPSJjb2xvcm1hcC1zZWxlY3Rpb24iPgogICAgICAgICAgICAgIDxkaXYgaWQ9ImNvbG9ybWFwLXNlbGVjdGlvbi1sYWJlbCI+Q29sb3JtYXA6PC9kaXY+CiAgICAgICAgICAgICAgPHBhcGVyLWRyb3Bkb3duLW1lbnUgbm8tbGFiZWwtZmxvYXQgc2VsZWN0ZWQtaXRlbS1sYWJlbD0ie3tfY29sb3JtYXB9fSIgZGlzYWJsZWQ9IltbX2NvbnRyb2xzX2Rpc2FibGVkXV0iPgogICAgICAgICAgICAgICAgPHBhcGVyLWxpc3Rib3ggc2xvdD0iZHJvcGRvd24tY29udGVudCIgc2VsZWN0ZWQ9IjAiPgogICAgICAgICAgICAgICAgICA8cGFwZXItaXRlbT5tYWdtYTwvcGFwZXItaXRlbT4KICAgICAgICAgICAgICAgICAgPHBhcGVyLWl0ZW0+aW5mZXJubzwvcGFwZXItaXRlbT4KICAgICAgICAgICAgICAgICAgPHBhcGVyLWl0ZW0+cGxhc21hPC9wYXBlci1pdGVtPgogICAgICAgICAgICAgICAgICA8cGFwZXItaXRlbT52aXJpZGlzPC9wYXBlci1pdGVtPgogICAgICAgICAgICAgICAgICA8cGFwZXItaXRlbT5ncmF5c2NhbGU8L3BhcGVyLWl0ZW0+CiAgICAgICAgICAgICAgICA8L3BhcGVyLWxpc3Rib3g+CiAgICAgICAgICAgICAgPC9wYXBlci1kcm9wZG93bi1tZW51PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvdGVtcGxhdGU+CgogICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiI+CiAgICAgICAgICA8aDM+VXBkYXRlcyBwZXIgc2Vjb25kOiB7e19GUFN9fTwvaDM+CiAgICAgICAgICA8cGFwZXItc2xpZGVyIGlkPSJGUFNTbGlkZXIiIHZhbHVlPSJ7e19GUFN9fSIgdHlwZT0ibnVtYmVyIiBzdGVwPSIxIiBtaW49IjAiIG1heD0iMzAiIHBpbj0idHJ1ZSIgZGlzYWJsZWQ9IltbX2NvbnRyb2xzX2Rpc2FibGVkXV0iPgogICAgICAgICAgPC9wYXBlci1zbGlkZXI+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiI+CiAgICAgICAgICA8ZGl2PgogICAgICAgICAgICA8cGFwZXItYnV0dG9uIGNsYXNzPSJ4LWJ1dHRvbiIgaWQ9InJlY29yZF9idXR0b24iIG9uLXRhcD0iX3RvZ2dsZVJlY29yZCIgZGlzYWJsZWQ9IltbX2NvbnRyb2xzX2Rpc2FibGVkXV0iPgogICAgICAgICAgICAgIFtbX3JlY29yZFRleHRdXQogICAgICAgICAgICA8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24iPgogICAgICAgICAgPHAgY2xhc3M9ImRpc2NsYWltZXIiPgogICAgICAgICAgICBOb3RlOiBCZWhvbGRlciBjdXJyZW50bHkgb25seSB3b3JrcyB3ZWxsIG9uIGxvY2FsIGZpbGUgc3lzdGVtcy4KICAgICAgICAgIAogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY2VudGVyIiBzbG90PSJjZW50ZXIiPgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shX2lzX2FjdGl2ZV1dIj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im5vLWRhdGEtd2FybmluZyI+CiAgICAgICAgICAgIDxoMz5ObyBCZWhvbGRlciBkYXRhIHdhcyBmb3VuZC48L2gzPgoKICAgICAgICAgICAgPHA+UHJvYmFibGUgY2F1c2VzOgogICAgICAgICAgICA8dWw+CiAgICAgICAgICAgICAgPGxpPllvdXIgc2NyaXB0IGlzbid0IHJ1bm5pbmcuPC9saT4KICAgICAgICAgICAgICA8bGk+WW91IGFyZW4ndCBjYWxsaW5nIDxjb2RlPmJlaG9sZGVyLnVwZGF0ZSgpPC9jb2RlPi48L2xpPgogICAgICAgICAgICA8L3VsPgoKICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgVG8gdXNlIEJlaG9sZGVyLCBpbXBvcnQgYW5kIGluc3RhbnRpYXRlIHRoZQogICAgICAgICAgICAgIDxjb2RlPkJlaG9sZGVyPC9jb2RlPiBjbGFzcywgYW5kIGNhbGwgaXRzCiAgICAgICAgICAgICAgPGNvZGU+dXBkYXRlPC9jb2RlPiBtZXRob2Qgd2l0aCBhIDxjb2RlPlNlc3Npb248L2NvZGU+IGFyZ3VtZW50CiAgICAgICAgICAgICAgYWZ0ZXIgZXZlcnkgdHJhaW4gc3RlcDoKICAgICAgICAgICAgCgogICAgICAgICAgICA8cHJlPmZyb20gdGVuc29yYm9hcmQucGx1Z2lucy5iZWhvbGRlciBpbXBvcnQgQmVob2xkZXIKYmVob2xkZXIgPSBCZWhvbGRlcihMT0dfRElSRUNUT1JZKQoKIyBpbnNpZGUgdHJhaW4gbG9vcApiZWhvbGRlci51cGRhdGUoCiAgc2Vzc2lvbj1zZXNzLAogIGFycmF5cz1saXN0X29mX25wX2FycmF5cywgICMgb3B0aW9uYWwgYXJndW1lbnQKICBmcmFtZT10d29fZGltZW5zaW9uYWxfbnBfYXJyYXksICAjIG9wdGlvbmFsIGFyZ3VtZW50Cik8L3ByZT4KICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgSWYgdXNpbmcgPGNvZGU+dGYudHJhaW4uTW9uaXRvcmVkU2Vzc2lvbjwvY29kZT4sIHlvdSBjYW4gdXNlCiAgICAgICAgICAgICAgPGNvZGU+QmVob2xkZXJIb29rPC9jb2RlPjoKICAgICAgICAgICAgCgogICAgICAgICAgICA8cHJlPmZyb20gdGVuc29yYm9hcmQucGx1Z2lucy5iZWhvbGRlciBpbXBvcnQgQmVob2xkZXJIb29rCmJlaG9sZGVyX2hvb2sgPSBCZWhvbGRlckhvb2soTE9HX0RJUkVDVE9SWSkKd2l0aCBNb25pdG9yZWRTZXNzaW9uKC4uLiwgaG9va3M9W2JlaG9sZGVyX2hvb2tdKSBhcyBzZXNzOgogIHNlc3MucnVuKHRyYWluX29wKTwvcHJlPgoKICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgSWYgeW91IHRoaW5rIGV2ZXJ5dGhpbmcgaXMgc2V0IHVwIHByb3Blcmx5LCBwbGVhc2Ugc2VlCiAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvdGVuc29yYm9hcmQvcGx1Z2lucy9iZWhvbGRlci9SRUFETUUubWQiPnRoZSBSRUFETUU8L2E+CiAgICAgICAgICAgICAgZm9yIG1vcmUgaW5mb3JtYXRpb24gYW5kIGNvbnNpZGVyIGZpbGluZyBhbiBpc3N1ZSBvbiBHaXRIdWIuCiAgICAgICAgICAgIAoKICAgICAgICAgICAgPHAgY2xhc3M9ImRpc2NsYWltZXIiPgogICAgICAgICAgICAgIE5vdGU6IEJlaG9sZGVyIGN1cnJlbnRseSBvbmx5IHdvcmtzIHdlbGwgb24gbG9jYWwgZmlsZSBzeXN0ZW1zLgogICAgICAgICAgICAKICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvdGVtcGxhdGU+CgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaXNfYWN0aXZlXV0iPgogICAgICAgICAgPHRmLWJlaG9sZGVyLXZpZGVvIGlkPSJ2aWRlbyIgZnBzPSJbW19GUFNdXSI+PC90Zi1iZWhvbGRlci12aWRlbz4KCiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX3ZhbHVlc05vdEZyYW1lKF92YWx1ZXMpXV0iPgogICAgICAgICAgICA8dGYtYmVob2xkZXItaW5mbyBpZD0iaW5mbyIgZnBzPSJbW19GUFNdXSI+IDwvdGYtYmVob2xkZXItaW5mbz4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPC9kaXY+CiAgICA8L3RmLWRhc2hib2FyZC1sYXlvdXQ+CiAgICA8c3R5bGUgaW5jbHVkZT0iZGFzaGJvYXJkLXN0eWxlIj48L3N0eWxlPgogICAgPHN0eWxlPgogICAgICAuY2VudGVyIHsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICB9CgogICAgICAubm8tZGF0YS13YXJuaW5nIHsKICAgICAgICBtYXgtd2lkdGg6IDU0MHB4OwogICAgICAgIG1hcmdpbjogODBweCBhdXRvIDA7CiAgICAgIH0KCiAgICAgIHBhcGVyLWNoZWNrYm94IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwYWRkaW5nOiA0cHg7CiAgICAgIH0KCiAgICAgIHBhcGVyLXJhZGlvLWJ1dHRvbiB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBwYWRkaW5nOiA1cHg7CgogICAgICAgIC0tcGFwZXItcmFkaW8tYnV0dG9uLXJhZGlvLWNvbnRhaW5lcjogewogICAgICAgICAgZmxleC1ncm93OiAwOwogICAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgfQoKICAgICAgICAtLXBhcGVyLXJhZGlvLWJ1dHRvbi1sYWJlbDogewogICAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICAgIH0KICAgICAgfQoKICAgICAgcGFwZXItcmFkaW8tZ3JvdXAgewogICAgICAgIG1hcmdpbi10b3A6IDVweDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgcGFwZXItc2xpZGVyIHsKICAgICAgICAtLXBhcGVyLXNsaWRlci1hY3RpdmUtY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLWtub2ItY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLWtub2Itc3RhcnQtYm9yZGVyLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1rbm9iLXN0YXJ0LWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1tYXJrZXJzLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1waW4tY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLXBpbi1zdGFydC1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgZmxleC1ncm93OiAyOwogICAgICB9CgogICAgICBwcmUgewogICAgICAgIGRpc3BsYXk6IGlubGluZTsKICAgICAgfQoKICAgICAgcGFwZXItYnV0dG9uI3JlY29yZF9idXR0b24gewogICAgICAgIGNvbG9yOiAjZDMyZjJmOwogICAgICB9CgogICAgICBwYXBlci1idXR0b24jcmVjb3JkX2J1dHRvbi5pcy1yZWNvcmRpbmcgewogICAgICAgIGJhY2tncm91bmQ6ICNkMzJmMmY7CiAgICAgICAgY29sb3I6IHdoaXRlOwogICAgICB9CgogICAgICAuc2lkZWJhci1zZWN0aW9uLmJlaG9sZGVyLWRhc2hib2FyZDpsYXN0LWNoaWxkIHsKICAgICAgICBmbGV4LWdyb3c6IDA7CiAgICAgIH0KCiAgICAgICNjb2xvcm1hcC1zZWxlY3Rpb24gewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgbWFyZ2luLXRvcDogNXB4OwogICAgICB9CgogICAgICAjY29sb3JtYXAtc2VsZWN0aW9uLWxhYmVsIHsKICAgICAgICBtYXJnaW4tdG9wOiAxM3B4OwogICAgICB9CgogICAgICAjY29sb3JtYXAtc2VsZWN0aW9uIHBhcGVyLWRyb3Bkb3duLW1lbnUgewogICAgICAgIG1hcmdpbi1sZWZ0OiAxMHB4OwogICAgICAgIC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWZvY3VzLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICB3aWR0aDogMTA1cHg7CiAgICAgIH0KCiAgICAgIGg0IHsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKICAgICAgICBtYXJnaW46IDVweCAwOwogICAgICB9CgogICAgICBwLmRpc2NsYWltZXIgewogICAgICAgIGNvbG9yOiAjOTk5OwogICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICAgICAgfQoKICAgICAgcC5jb250cm9scy1kaXNhYmxlZC1tZXNzYWdlIHsKICAgICAgICBjb2xvcjogI2MwMDsKICAgICAgICBmb250LXdlaWdodDogYm9sZDsKICAgICAgfQoKICAgICAgLnNpZGViYXIgewogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgogIDxzY3JpcHQ+Ly9+fldFQlBBVEh+fi90Zi1iZWhvbGRlci1kYXNoYm9hcmQvdGYtYmVob2xkZXItZGFzaGJvYXJkLmh0bWwuanMKKGZ1bmN0aW9uKCl7UG9seW1lcih7aXM6InRmLWJlaG9sZGVyLWRhc2hib2FyZCIscHJvcGVydGllczp7X3JlcXVlc3RNYW5hZ2VyOnt0eXBlOk9iamVjdCx2YWx1ZTooKT0+bmV3IFBrLlJlcXVlc3RNYW5hZ2VyKDEwLDApfSxfaXNBdmFpbGFibGU6Qm9vbGVhbixfdmFsdWVzOnt0eXBlOlN0cmluZyx2YWx1ZToidHJhaW5hYmxlX3ZhcmlhYmxlcyIsb2JzZXJ2ZXI6Il9jb25maWdDaGFuZ2VkIn0sX21vZGU6e3R5cGU6U3RyaW5nLHZhbHVlOiJ2YXJpYW5jZSIsb2JzZXJ2ZXI6Il9jb25maWdDaGFuZ2VkIn0sX3NjYWxpbmc6e3R5cGU6U3RyaW5nLHZhbHVlOiJsYXllciIsb2JzZXJ2ZXI6Il9jb25maWdDaGFuZ2VkIn0sX3dpbmRvd1NpemU6e3R5cGU6TnVtYmVyLHZhbHVlOjE1LG9ic2VydmVyOiJfY29uZmlnQ2hhbmdlZCJ9LF9wcmV2aW91c0ZQUzp7dHlwZTpOdW1iZXIsdmFsdWU6MzB9LF9GUFM6e3R5cGU6TnVtYmVyLHZhbHVlOjEwLG9ic2VydmVyOiJfY29uZmlnQ2hhbmdlZCJ9LApfcmVjb3JkVGV4dDp7dHlwZTpTdHJpbmcsdmFsdWU6InN0YXJ0IHJlY29yZGluZyJ9LF9pc1JlY29yZGluZzp7dHlwZTpCb29sZWFuLHZhbHVlOiExLG9ic2VydmVyOiJfY29uZmlnQ2hhbmdlZCJ9LF9zaG93QWxsOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEsb2JzZXJ2ZXI6Il9jb25maWdDaGFuZ2VkIn0sX2NvbG9ybWFwOnt0eXBlOlN0cmluZyx2YWx1ZToibWFnbWEiLG9ic2VydmVyOiJfY29uZmlnQ2hhbmdlZCJ9LF9pc19hY3RpdmU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxvYnNlcnZlcjoiX2NvbmZpZ0NoYW5nZWQifSxfY29udHJvbHNfZGlzYWJsZWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxvYnNlcnZlcjoiX2NvbmZpZ0NoYW5nZWQifX0sX3ZhbHVlc05vdEZyYW1lKGEpe3JldHVybiJmcmFtZXMiIT09YX0sX3ZhcmlhbmNlU2VsZWN0ZWQoYSl7cmV0dXJuInZhcmlhbmNlIj09PWF9LF9jb25maWdDaGFuZ2VkKCl7aWYodGhpcy5faXNfYWN0aXZlJiYhdGhpcy5fY29udHJvbHNfZGlzYWJsZWQpe3ZhciBhPQpbdGhpcy5fdmFsdWVzLHRoaXMuX21vZGUsdGhpcy5fc2NhbGluZyx0aGlzLl93aW5kb3dTaXplLHRoaXMuX0ZQUyx0aGlzLl9pc1JlY29yZGluZyx0aGlzLl9zaG93QWxsLHRoaXMuX2NvbG9ybWFwXSxjO2ZvcihjIG9mIGEpaWYoInVuZGVmaW5lZCI9PT10eXBlb2YgY3x8IiI9PT1jKXJldHVybjthPVBrLmdldFJvdXRlcigpLnBsdWdpblJvdXRlKCJiZWhvbGRlciIsIi9jaGFuZ2UtY29uZmlnIik7dGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdChhLHt2YWx1ZXM6dGhpcy5fdmFsdWVzLG1vZGU6dGhpcy5fbW9kZSxzY2FsaW5nOnRoaXMuX3NjYWxpbmcsd2luZG93X3NpemU6dGhpcy5fd2luZG93U2l6ZSxGUFM6dGhpcy5fRlBTLGlzX3JlY29yZGluZzp0aGlzLl9pc1JlY29yZGluZyxzaG93X2FsbDp0aGlzLl9zaG93QWxsLGNvbG9ybWFwOnRoaXMuX2NvbG9ybWFwfSl9fSxfdG9nZ2xlUmVjb3JkKCl7InN0YXJ0IHJlY29yZGluZyI9PXRoaXMuX3JlY29yZFRleHQ/KHRoaXMuc2V0KCJfcmVjb3JkVGV4dCIsCiJzdG9wIHJlY29yZGluZyIpLHRoaXMuc2V0KCJfaXNSZWNvcmRpbmciLCEwKSk6KHRoaXMuc2V0KCJfcmVjb3JkVGV4dCIsInN0YXJ0IHJlY29yZGluZyIpLHRoaXMuc2V0KCJfaXNSZWNvcmRpbmciLCExKSk7dGhpcy4kLnJlY29yZF9idXR0b24uY2xhc3NMaXN0LnRvZ2dsZSgiaXMtcmVjb3JkaW5nIil9LGF0dGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdChQay5nZXRSb3V0ZXIoKS5wbHVnaW5zTGlzdGluZygpKS50aGVuKGE9PnsiYmVob2xkZXIiaW4gYT8odGhpcy4kLmluaXRpYWxEaWFsb2cuY2xvc2VEaWFsb2coKSx0aGlzLnNldCgiX2lzQXZhaWxhYmxlIiwhMCkpOih0aGlzLiQuaW5pdGlhbERpYWxvZy5vcGVuTm9UZW5zb3JGbG93RGlhbG9nKCksdGhpcy5zZXQoIl9pc0F2YWlsYWJsZSIsITEpKX0pfSxyZWFkeSgpe3RoaXMucmVsb2FkKCl9LHJlbG9hZCgpe2lmKHRoaXMuX2lzQXZhaWxhYmxlKXtjb25zdCBhPVBrLmdldFJvdXRlcigpLnBsdWdpblJvdXRlKCJiZWhvbGRlciIsCiIvaXMtYWN0aXZlIik7dGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdChhKS50aGVuKGM9Pnt0aGlzLnNldCgiX2lzX2FjdGl2ZSIsYy5pc19hY3RpdmUpO3RoaXMuc2V0KCJfY29udHJvbHNfZGlzYWJsZWQiLCFjLmlzX2NvbmZpZ193cml0YWJsZSl9KX19fSk7JGwucmVnaXN0ZXJEYXNoYm9hcmQoe3BsdWdpbjoiYmVob2xkZXIiLGVsZW1lbnROYW1lOiJ0Zi1iZWhvbGRlci1kYXNoYm9hcmQiLHNob3VsZFJlbW92ZURvbTohMH0pfSkoKTsKPC9zY3JpcHQ+CjwvZG9tLW1vZHVsZT4KCgoKPGlyb24taWNvbnNldC1zdmcgbmFtZT0iYXYiIHNpemU9IjI0Ij4KPHN2Zz48ZGVmcz4KPGcgaWQ9ImFkZC10by1xdWV1ZSI+PHBhdGggZD0iTTIxIDNIM2MtMS4xMSAwLTIgLjg5LTIgMnYxMmMwIDEuMS44OSAyIDIgMmg1djJoOHYtMmg1YzEuMSAwIDEuOTktLjkgMS45OS0yTDIzIDVjMC0xLjExLS45LTItMi0yem0wIDE0SDNWNWgxOHYxMnptLTUtN3YyaC0zdjNoLTJ2LTNIOHYtMmgzVjdoMnYzaDN6IiAvPjwvZz4KPGcgaWQ9ImFpcnBsYXkiPjxwYXRoIGQ9Ik02IDIyaDEybC02LTZ6TTIxIDNIM2MtMS4xIDAtMiAuOS0yIDJ2MTJjMCAxLjEuOSAyIDIgMmg0di0ySDNWNWgxOHYxMmgtNHYyaDRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnoiIC8+PC9nPgo8ZyBpZD0iYWxidW0iPjxwYXRoIGQ9Ik0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0wIDE0LjVjLTIuNDkgMC00LjUtMi4wMS00LjUtNC41UzkuNTEgNy41IDEyIDcuNXM0LjUgMi4wMSA0LjUgNC41LTIuMDEgNC41LTQuNSA0LjV6bTAtNS41Yy0uNTUgMC0xIC40NS0xIDFzLjQ1IDEgMSAxIDEtLjQ1IDEtMS0uNDUtMS0xLTF6IiAvPjwvZz4KPGcgaWQ9ImFydC10cmFjayI+PHBhdGggZD0iTTIyIDEzaC04di0yaDh2MnptMC02aC04djJoOFY3em0tOCAxMGg4di0yaC04djJ6bS0yLTh2NmMwIDEuMS0uOSAyLTIgMkg0Yy0xLjEgMC0yLS45LTItMlY5YzAtMS4xLjktMiAyLTJoNmMxLjEgMCAyIC45IDIgMnptLTEuNSA2bC0yLjI1LTMtMS43NSAyLjI2LTEuMjUtMS41MUwzLjUgMTVoN3oiIC8+PC9nPgo8ZyBpZD0iYXYtdGltZXIiPjxwYXRoIGQ9Ik0xMSAxN2MwIC41NS40NSAxIDEgMXMxLS40NSAxLTEtLjQ1LTEtMS0xLTEgLjQ1LTEgMXptMC0xNHY0aDJWNS4wOGMzLjM5LjQ5IDYgMy4zOSA2IDYuOTIgMCAzLjg3LTMuMTMgNy03IDdzLTctMy4xMy03LTdjMC0xLjY4LjU5LTMuMjIgMS41OC00LjQyTDEyIDEzbDEuNDEtMS40MS02LjgtNi44di4wMkM0LjQyIDYuNDUgMyA5LjA1IDMgMTJjMCA0Ljk3IDQuMDIgOSA5IDkgNC45NyAwIDktNC4wMyA5LTlzLTQuMDMtOS05LTloLTF6bTcgOWMwLS41NS0uNDUtMS0xLTFzLTEgLjQ1LTEgMSAuNDUgMSAxIDEgMS0uNDUgMS0xek02IDEyYzAgLjU1LjQ1IDEgMSAxczEtLjQ1IDEtMS0uNDUtMS0xLTEtMSAuNDUtMSAxeiIgLz48L2c+CjxnIGlkPSJicmFuZGluZy13YXRlcm1hcmsiPjxwYXRoIGQ9Ik0yMSAzSDNjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMThjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptMCAxNmgtOXYtNmg5djZ6IiAvPjwvZz4KPGcgaWQ9ImNhbGwtdG8tYWN0aW9uIj48cGF0aCBkPSJNMjEgM0gzYy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE4YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bTAgMTZIM3YtM2gxOHYzeiIgLz48L2c+CjxnIGlkPSJjbG9zZWQtY2FwdGlvbiI+PHBhdGggZD0iTTE5IDRINWMtMS4xMSAwLTIgLjktMiAydjEyYzAgMS4xLjg5IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjZjMC0xLjEtLjktMi0yLTJ6bS04IDdIOS41di0uNWgtMnYzaDJWMTNIMTF2MWMwIC41NS0uNDUgMS0xIDFIN2MtLjU1IDAtMS0uNDUtMS0xdi00YzAtLjU1LjQ1LTEgMS0xaDNjLjU1IDAgMSAuNDUgMSAxdjF6bTcgMGgtMS41di0uNWgtMnYzaDJWMTNIMTh2MWMwIC41NS0uNDUgMS0xIDFoLTNjLS41NSAwLTEtLjQ1LTEtMXYtNGMwLS41NS40NS0xIDEtMWgzYy41NSAwIDEgLjQ1IDEgMXYxeiIgLz48L2c+CjxnIGlkPSJlcXVhbGl6ZXIiPjxwYXRoIGQ9Ik0xMCAyMGg0VjRoLTR2MTZ6bS02IDBoNHYtOEg0djh6TTE2IDl2MTFoNFY5aC00eiIgLz48L2c+CjxnIGlkPSJleHBsaWNpdCI+PHBhdGggZD0iTTE5IDNINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tNCA2aC00djJoNHYyaC00djJoNHYySDlWN2g2djJ6IiAvPjwvZz4KPGcgaWQ9ImZhc3QtZm9yd2FyZCI+PHBhdGggZD0iTTQgMThsOC41LTZMNCA2djEyem05LTEydjEybDguNS02TDEzIDZ6IiAvPjwvZz4KPGcgaWQ9ImZhc3QtcmV3aW5kIj48cGF0aCBkPSJNMTEgMThWNmwtOC41IDYgOC41IDZ6bS41LTZsOC41IDZWNmwtOC41IDZ6IiAvPjwvZz4KPGcgaWQ9ImZlYXR1cmVkLXBsYXktbGlzdCI+PHBhdGggZD0iTTIxIDNIM2MtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxOGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tOSA4SDNWOWg5djJ6bTAtNEgzVjVoOXYyeiIgLz48L2c+CjxnIGlkPSJmZWF0dXJlZC12aWRlbyI+PHBhdGggZD0iTTIxIDNIM2MtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxOGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tOSA5SDNWNWg5djd6IiAvPjwvZz4KPGcgaWQ9ImZpYmVyLWR2ciI+PHBhdGggZD0iTTE3LjUgMTAuNWgydjFoLTJ6bS0xMyAwaDJ2M2gtMnpNMjEgM0gzYy0xLjExIDAtMiAuODktMiAydjE0YzAgMS4xLjg5IDIgMiAyaDE4YzEuMTEgMCAyLS45IDItMlY1YzAtMS4xMS0uODktMi0yLTJ6TTggMTMuNWMwIC44NS0uNjUgMS41LTEuNSAxLjVIM1Y5aDMuNWMuODUgMCAxLjUuNjUgMS41IDEuNXYzem00LjYyIDEuNWgtMS41TDkuMzcgOWgxLjVsMSAzLjQzIDEtMy40M2gxLjVsLTEuNzUgNnpNMjEgMTEuNWMwIC42LS40IDEuMTUtLjkgMS40TDIxIDE1aC0xLjVsLS44NS0ySDE3LjV2MkgxNlY5aDMuNWMuODUgMCAxLjUuNjUgMS41IDEuNXYxeiIgLz48L2c+CjxnIGlkPSJmaWJlci1tYW51YWwtcmVjb3JkIj48Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSI4IiAvPjwvZz4KPGcgaWQ9ImZpYmVyLW5ldyI+PHBhdGggZD0iTTIwIDRINGMtMS4xMSAwLTEuOTkuODktMS45OSAyTDIgMThjMCAxLjExLjg5IDIgMiAyaDE2YzEuMTEgMCAyLS44OSAyLTJWNmMwLTEuMTEtLjg5LTItMi0yek04LjUgMTVINy4zbC0yLjU1LTMuNVYxNUgzLjVWOWgxLjI1bDIuNSAzLjVWOUg4LjV2NnptNS00Ljc0SDExdjEuMTJoMi41djEuMjZIMTF2MS4xMWgyLjVWMTVoLTRWOWg0djEuMjZ6bTcgMy43NGMwIC41NS0uNDUgMS0xIDFoLTRjLS41NSAwLTEtLjQ1LTEtMVY5aDEuMjV2NC41MWgxLjEzVjkuOTloMS4yNXYzLjUxaDEuMTJWOWgxLjI1djV6IiAvPjwvZz4KPGcgaWQ9ImZpYmVyLXBpbiI+PHBhdGggZD0iTTUuNSAxMC41aDJ2MWgtMnpNMjAgNEg0Yy0xLjExIDAtMS45OS44OS0xLjk5IDJMMiAxOGMwIDEuMTEuODkgMiAyIDJoMTZjMS4xMSAwIDItLjg5IDItMlY2YzAtMS4xMS0uODktMi0yLTJ6TTkgMTEuNWMwIC44NS0uNjUgMS41LTEuNSAxLjVoLTJ2Mkg0VjloMy41Yy44NSAwIDEuNS42NSAxLjUgMS41djF6bTMuNSAzLjVIMTFWOWgxLjV2NnptNy41IDBoLTEuMmwtMi41NS0zLjVWMTVIMTVWOWgxLjI1bDIuNSAzLjVWOUgyMHY2eiIgLz48L2c+CjxnIGlkPSJmaWJlci1zbWFydC1yZWNvcmQiPjxnPjxjaXJjbGUgY3g9IjkiIGN5PSIxMiIgcj0iOCIgLz48cGF0aCBkPSJNMTcgNC4yNnYyLjA5YzIuMzMuODIgNCAzLjA0IDQgNS42NXMtMS42NyA0LjgzLTQgNS42NXYyLjA5YzMuNDUtLjg5IDYtNC4wMSA2LTcuNzRzLTIuNTUtNi44NS02LTcuNzR6IiAvPjwvZz48L2c+CjxnIGlkPSJmb3J3YXJkLTEwIj48cGF0aCBkPSJNNCAxM2MwIDQuNCAzLjYgOCA4IDhzOC0zLjYgOC04aC0yYzAgMy4zLTIuNyA2LTYgNnMtNi0yLjctNi02IDIuNy02IDYtNnY0bDUtNS01LTV2NGMtNC40IDAtOCAzLjYtOCA4em02LjggM0gxMHYtMy4zTDkgMTN2LS43bDEuOC0uNmguMVYxNnptNC4zLTEuOGMwIC4zIDAgLjYtLjEuOGwtLjMuNnMtLjMuMy0uNS4zLS40LjEtLjYuMS0uNCAwLS42LS4xLS4zLS4yLS41LS4zLS4yLS4zLS4zLS42LS4xLS41LS4xLS44di0uN2MwLS4zIDAtLjYuMS0uOGwuMy0uNnMuMy0uMy41LS4zLjQtLjEuNi0uMS40IDAgLjYuMS4zLjIuNS4zLjIuMy4zLjYuMS41LjEuOHYuN3ptLS44LS44di0uNXMtLjEtLjItLjEtLjMtLjEtLjEtLjItLjItLjItLjEtLjMtLjEtLjIgMC0uMy4xbC0uMi4ycy0uMS4yLS4xLjN2MnMuMS4yLjEuMy4xLjEuMi4yLjIuMS4zLjEuMiAwIC4zLS4xbC4yLS4ycy4xLS4yLjEtLjN2LTEuNXoiIC8+PC9nPgo8ZyBpZD0iZm9yd2FyZC0zMCI+PHBhdGggZD0iTTkuNiAxMy41aC40Yy4yIDAgLjQtLjEuNS0uMnMuMi0uMi4yLS40di0uMnMtLjEtLjEtLjEtLjItLjEtLjEtLjItLjFoLS41cy0uMS4xLS4yLjEtLjEuMS0uMS4ydi4yaC0xYzAtLjIgMC0uMy4xLS41cy4yLS4zLjMtLjQuMy0uMi40LS4yLjQtLjEuNS0uMWMuMiAwIC40IDAgLjYuMXMuMy4xLjUuMi4yLjIuMy40LjEuMy4xLjV2LjNzLS4xLjItLjEuMy0uMS4yLS4yLjItLjIuMS0uMy4yYy4yLjEuNC4yLjUuNHMuMi40LjIuNmMwIC4yIDAgLjQtLjEuNXMtLjIuMy0uMy40LS4zLjItLjUuMi0uNC4xLS42LjFjLS4yIDAtLjQgMC0uNS0uMXMtLjMtLjEtLjUtLjItLjItLjItLjMtLjQtLjEtLjQtLjEtLjZoLjh2LjJzLjEuMS4xLjIuMS4xLjIuMWguNXMuMS0uMS4yLS4xLjEtLjEuMS0uMnYtLjVzLS4xLS4xLS4xLS4yLS4xLS4xLS4yLS4xaC0uNnYtLjd6bTUuNy43YzAgLjMgMCAuNi0uMS44bC0uMy42cy0uMy4zLS41LjMtLjQuMS0uNi4xLS40IDAtLjYtLjEtLjMtLjItLjUtLjMtLjItLjMtLjMtLjYtLjEtLjUtLjEtLjh2LS43YzAtLjMgMC0uNi4xLS44bC4zLS42cy4zLS4zLjUtLjMuNC0uMS42LS4xLjQgMCAuNi4xLjMuMi41LjMuMi4zLjMuNi4xLjUuMS44di43em0tLjktLjh2LS41cy0uMS0uMi0uMS0uMy0uMS0uMS0uMi0uMi0uMi0uMS0uMy0uMS0uMiAwLS4zLjFsLS4yLjJzLS4xLjItLjEuM3Yycy4xLjIuMS4zLjEuMS4yLjIuMi4xLjMuMS4yIDAgLjMtLjFsLjItLjJzLjEtLjIuMS0uM3YtMS41ek00IDEzYzAgNC40IDMuNiA4IDggOHM4LTMuNiA4LThoLTJjMCAzLjMtMi43IDYtNiA2cy02LTIuNy02LTYgMi43LTYgNi02djRsNS01LTUtNXY0Yy00LjQgMC04IDMuNi04IDh6IiAvPjwvZz4KPGcgaWQ9ImZvcndhcmQtNSI+PHBhdGggZD0iTTQgMTNjMCA0LjQgMy42IDggOCA4czgtMy42IDgtOGgtMmMwIDMuMy0yLjcgNi02IDZzLTYtMi43LTYtNiAyLjctNiA2LTZ2NGw1LTUtNS01djRjLTQuNCAwLTggMy42LTggOHptNi43LjlsLjItMi4yaDIuNHYuN2gtMS43bC0uMS45cy4xIDAgLjEtLjEuMSAwIC4xLS4xLjEgMCAuMiAwaC4yYy4yIDAgLjQgMCAuNS4xcy4zLjIuNC4zLjIuMy4zLjUuMS40LjEuNmMwIC4yIDAgLjQtLjEuNXMtLjEuMy0uMy41LS4zLjItLjUuMy0uNC4xLS42LjFjLS4yIDAtLjQgMC0uNS0uMXMtLjMtLjEtLjUtLjItLjItLjItLjMtLjQtLjEtLjMtLjEtLjVoLjhjMCAuMi4xLjMuMi40cy4yLjEuNC4xYy4xIDAgLjIgMCAuMy0uMWwuMi0uMnMuMS0uMi4xLS4zdi0uNmwtLjEtLjItLjItLjJzLS4yLS4xLS4zLS4xaC0uMnMtLjEgMC0uMi4xLS4xIDAtLjEuMS0uMS4xLS4xLjFoLS42eiIgLz48L2c+CjxnIGlkPSJnYW1lcyI+PHBhdGggZD0iTTE1IDcuNVYySDl2NS41bDMgMyAzLTN6TTcuNSA5SDJ2Nmg1LjVsMy0zLTMtM3pNOSAxNi41VjIyaDZ2LTUuNWwtMy0zLTMgM3pNMTYuNSA5bC0zIDMgMyAzSDIyVjloLTUuNXoiIC8+PC9nPgo8ZyBpZD0iaGQiPjxwYXRoIGQ9Ik0xOSAzSDVjLTEuMTEgMC0yIC45LTIgMnYxNGMwIDEuMS44OSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tOCAxMkg5LjV2LTJoLTJ2Mkg2VjloMS41djIuNWgyVjlIMTF2NnptMi02aDRjLjU1IDAgMSAuNDUgMSAxdjRjMCAuNTUtLjQ1IDEtMSAxaC00Vjl6bTEuNSA0LjVoMnYtM2gtMnYzeiIgLz48L2c+CjxnIGlkPSJoZWFyaW5nIj48cGF0aCBkPSJNMTcgMjBjLS4yOSAwLS41Ni0uMDYtLjc2LS4xNS0uNzEtLjM3LTEuMjEtLjg4LTEuNzEtMi4zOC0uNTEtMS41Ni0xLjQ3LTIuMjktMi4zOS0zLS43OS0uNjEtMS42MS0xLjI0LTIuMzItMi41M0M5LjI5IDEwLjk4IDkgOS45MyA5IDljMC0yLjggMi4yLTUgNS01czUgMi4yIDUgNWgyYzAtMy45My0zLjA3LTctNy03UzcgNS4wNyA3IDljMCAxLjI2LjM4IDIuNjUgMS4wNyAzLjkuOTEgMS42NSAxLjk4IDIuNDggMi44NSAzLjE1LjgxLjYyIDEuMzkgMS4wNyAxLjcxIDIuMDUuNiAxLjgyIDEuMzcgMi44NCAyLjczIDMuNTUuNTEuMjMgMS4wNy4zNSAxLjY0LjM1IDIuMjEgMCA0LTEuNzkgNC00aC0yYzAgMS4xLS45IDItMiAyek03LjY0IDIuNjRMNi4yMiAxLjIyQzQuMjMgMy4yMSAzIDUuOTYgMyA5czEuMjMgNS43OSAzLjIyIDcuNzhsMS40MS0xLjQxQzYuMDEgMTMuNzQgNSAxMS40OSA1IDlzMS4wMS00Ljc0IDIuNjQtNi4zNnpNMTEuNSA5YzAgMS4zOCAxLjEyIDIuNSAyLjUgMi41czIuNS0xLjEyIDIuNS0yLjUtMS4xMi0yLjUtMi41LTIuNS0yLjUgMS4xMi0yLjUgMi41eiIgLz48L2c+CjxnIGlkPSJoaWdoLXF1YWxpdHkiPjxwYXRoIGQ9Ik0xOSA0SDVjLTEuMTEgMC0yIC45LTIgMnYxMmMwIDEuMS44OSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0yem0tOCAxMUg5LjV2LTJoLTJ2Mkg2VjloMS41djIuNWgyVjlIMTF2NnptNy0xYzAgLjU1LS40NSAxLTEgMWgtLjc1djEuNWgtMS41VjE1SDE0Yy0uNTUgMC0xLS40NS0xLTF2LTRjMC0uNTUuNDUtMSAxLTFoM2MuNTUgMCAxIC40NSAxIDF2NHptLTMuNS0uNWgydi0zaC0ydjN6IiAvPjwvZz4KPGcgaWQ9ImxpYnJhcnktYWRkIj48cGF0aCBkPSJNNCA2SDJ2MTRjMCAxLjEuOSAyIDIgMmgxNHYtMkg0VjZ6bTE2LTRIOGMtMS4xIDAtMiAuOS0yIDJ2MTJjMCAxLjEuOSAyIDIgMmgxMmMxLjEgMCAyLS45IDItMlY0YzAtMS4xLS45LTItMi0yem0tMSA5aC00djRoLTJ2LTRIOVY5aDRWNWgydjRoNHYyeiIgLz48L2c+CjxnIGlkPSJsaWJyYXJ5LWJvb2tzIj48cGF0aCBkPSJNNCA2SDJ2MTRjMCAxLjEuOSAyIDIgMmgxNHYtMkg0VjZ6bTE2LTRIOGMtMS4xIDAtMiAuOS0yIDJ2MTJjMCAxLjEuOSAyIDIgMmgxMmMxLjEgMCAyLS45IDItMlY0YzAtMS4xLS45LTItMi0yem0tMSA5SDlWOWgxMHYyem0tNCA0SDl2LTJoNnYyem00LThIOVY1aDEwdjJ6IiAvPjwvZz4KPGcgaWQ9ImxpYnJhcnktbXVzaWMiPjxwYXRoIGQ9Ik0yMCAySDhjLTEuMSAwLTIgLjktMiAydjEyYzAgMS4xLjkgMiAyIDJoMTJjMS4xIDAgMi0uOSAyLTJWNGMwLTEuMS0uOS0yLTItMnptLTIgNWgtM3Y1LjVjMCAxLjM4LTEuMTIgMi41LTIuNSAyLjVTMTAgMTMuODggMTAgMTIuNXMxLjEyLTIuNSAyLjUtMi41Yy41NyAwIDEuMDguMTkgMS41LjUxVjVoNHYyek00IDZIMnYxNGMwIDEuMS45IDIgMiAyaDE0di0ySDRWNnoiIC8+PC9nPgo8ZyBpZD0ibG9vcCI+PHBhdGggZD0iTTEyIDRWMUw4IDVsNCA0VjZjMy4zMSAwIDYgMi42OSA2IDYgMCAxLjAxLS4yNSAxLjk3LS43IDIuOGwxLjQ2IDEuNDZDMTkuNTQgMTUuMDMgMjAgMTMuNTcgMjAgMTJjMC00LjQyLTMuNTgtOC04LTh6bTAgMTRjLTMuMzEgMC02LTIuNjktNi02IDAtMS4wMS4yNS0xLjk3LjctMi44TDUuMjQgNy43NEM0LjQ2IDguOTcgNCAxMC40MyA0IDEyYzAgNC40MiAzLjU4IDggOCA4djNsNC00LTQtNHYzeiIgLz48L2c+CjxnIGlkPSJtaWMiPjxwYXRoIGQ9Ik0xMiAxNGMxLjY2IDAgMi45OS0xLjM0IDIuOTktM0wxNSA1YzAtMS42Ni0xLjM0LTMtMy0zUzkgMy4zNCA5IDV2NmMwIDEuNjYgMS4zNCAzIDMgM3ptNS4zLTNjMCAzLTIuNTQgNS4xLTUuMyA1LjFTNi43IDE0IDYuNyAxMUg1YzAgMy40MSAyLjcyIDYuMjMgNiA2LjcyVjIxaDJ2LTMuMjhjMy4yOC0uNDggNi0zLjMgNi02LjcyaC0xLjd6IiAvPjwvZz4KPGcgaWQ9Im1pYy1ub25lIj48cGF0aCBkPSJNMTIgMTRjMS42NiAwIDIuOTktMS4zNCAyLjk5LTNMMTUgNWMwLTEuNjYtMS4zNC0zLTMtM1M5IDMuMzQgOSA1djZjMCAxLjY2IDEuMzQgMyAzIDN6bS0xLjItOS4xYzAtLjY2LjU0LTEuMiAxLjItMS4yLjY2IDAgMS4yLjU0IDEuMiAxLjJsLS4wMSA2LjJjMCAuNjYtLjUzIDEuMi0xLjE5IDEuMi0uNjYgMC0xLjItLjU0LTEuMi0xLjJWNC45em02LjUgNi4xYzAgMy0yLjU0IDUuMS01LjMgNS4xUzYuNyAxNCA2LjcgMTFINWMwIDMuNDEgMi43MiA2LjIzIDYgNi43MlYyMWgydi0zLjI4YzMuMjgtLjQ4IDYtMy4zIDYtNi43MmgtMS43eiIgLz48L2c+CjxnIGlkPSJtaWMtb2ZmIj48cGF0aCBkPSJNMTkgMTFoLTEuN2MwIC43NC0uMTYgMS40My0uNDMgMi4wNWwxLjIzIDEuMjNjLjU2LS45OC45LTIuMDkuOS0zLjI4em0tNC4wMi4xN2MwLS4wNi4wMi0uMTEuMDItLjE3VjVjMC0xLjY2LTEuMzQtMy0zLTNTOSAzLjM0IDkgNXYuMThsNS45OCA1Ljk5ek00LjI3IDNMMyA0LjI3bDYuMDEgNi4wMVYxMWMwIDEuNjYgMS4zMyAzIDIuOTkgMyAuMjIgMCAuNDQtLjAzLjY1LS4wOGwxLjY2IDEuNjZjLS43MS4zMy0xLjUuNTItMi4zMS41Mi0yLjc2IDAtNS4zLTIuMS01LjMtNS4xSDVjMCAzLjQxIDIuNzIgNi4yMyA2IDYuNzJWMjFoMnYtMy4yOGMuOTEtLjEzIDEuNzctLjQ1IDIuNTQtLjlMMTkuNzMgMjEgMjEgMTkuNzMgNC4yNyAzeiIgLz48L2c+CjxnIGlkPSJtb3ZpZSI+PHBhdGggZD0iTTE4IDRsMiA0aC0zbC0yLTRoLTJsMiA0aC0zbC0yLTRIOGwyIDRIN0w1IDRINGMtMS4xIDAtMS45OS45LTEuOTkgMkwyIDE4YzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJWNGgtNHoiIC8+PC9nPgo8ZyBpZD0ibXVzaWMtdmlkZW8iPjxwYXRoIGQ9Ik0yMSAzSDNjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMThjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptMCAxNkgzVjVoMTh2MTR6TTggMTVjMC0xLjY2IDEuMzQtMyAzLTMgLjM1IDAgLjY5LjA3IDEgLjE4VjZoNXYyaC0zdjcuMDNjLS4wMiAxLjY0LTEuMzUgMi45Ny0zIDIuOTctMS42NiAwLTMtMS4zNC0zLTN6IiAvPjwvZz4KPGcgaWQ9Im5ldy1yZWxlYXNlcyI+PHBhdGggZD0iTTIzIDEybC0yLjQ0LTIuNzguMzQtMy42OC0zLjYxLS44Mi0xLjg5LTMuMThMMTIgMyA4LjYgMS41NCA2LjcxIDQuNzJsLTMuNjEuODEuMzQgMy42OEwxIDEybDIuNDQgMi43OC0uMzQgMy42OSAzLjYxLjgyIDEuODkgMy4xOEwxMiAyMWwzLjQgMS40NiAxLjg5LTMuMTggMy42MS0uODItLjM0LTMuNjhMMjMgMTJ6bS0xMCA1aC0ydi0yaDJ2MnptMC00aC0yVjdoMnY2eiIgLz48L2c+CjxnIGlkPSJub3QtaW50ZXJlc3RlZCI+PHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTAgMThjLTQuNDIgMC04LTMuNTgtOC04IDAtMS44NS42My0zLjU1IDEuNjktNC45TDE2LjkgMTguMzFDMTUuNTUgMTkuMzcgMTMuODUgMjAgMTIgMjB6bTYuMzEtMy4xTDcuMSA1LjY5QzguNDUgNC42MyAxMC4xNSA0IDEyIDRjNC40MiAwIDggMy41OCA4IDggMCAxLjg1LS42MyAzLjU1LTEuNjkgNC45eiIgLz48L2c+CjxnIGlkPSJub3RlIj48cGF0aCBkPSJNMjIgMTBsLTYtNkg0Yy0xLjEgMC0yIC45LTIgMnYxMi4wMWMwIDEuMS45IDEuOTkgMiAxLjk5bDE2LS4wMWMxLjEgMCAyLS44OSAyLTEuOTl2LTh6bS03LTQuNWw1LjUgNS41SDE1VjUuNXoiIC8+PC9nPgo8ZyBpZD0icGF1c2UiPjxwYXRoIGQ9Ik02IDE5aDRWNUg2djE0em04LTE0djE0aDRWNWgtNHoiIC8+PC9nPgo8ZyBpZD0icGF1c2UtY2lyY2xlLWZpbGxlZCI+PHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bS0xIDE0SDlWOGgydjh6bTQgMGgtMlY4aDJ2OHoiIC8+PC9nPgo8ZyBpZD0icGF1c2UtY2lyY2xlLW91dGxpbmUiPjxwYXRoIGQ9Ik05IDE2aDJWOEg5djh6bTMtMTRDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTAgMThjLTQuNDEgMC04LTMuNTktOC04czMuNTktOCA4LTggOCAzLjU5IDggOC0zLjU5IDgtOCA4em0xLTRoMlY4aC0ydjh6IiAvPjwvZz4KPGcgaWQ9InBsYXktYXJyb3ciPjxwYXRoIGQ9Ik04IDV2MTRsMTEtN3oiIC8+PC9nPgo8ZyBpZD0icGxheS1jaXJjbGUtZmlsbGVkIj48cGF0aCBkPSJNMTIgMkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptLTIgMTQuNXYtOWw2IDQuNS02IDQuNXoiIC8+PC9nPgo8ZyBpZD0icGxheS1jaXJjbGUtb3V0bGluZSI+PHBhdGggZD0iTTEwIDE2LjVsNi00LjUtNi00LjV2OXpNMTIgMkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptMCAxOGMtNC40MSAwLTgtMy41OS04LThzMy41OS04IDgtOCA4IDMuNTkgOCA4LTMuNTkgOC04IDh6IiAvPjwvZz4KPGcgaWQ9InBsYXlsaXN0LWFkZCI+PHBhdGggZD0iTTE0IDEwSDJ2MmgxMnYtMnptMC00SDJ2MmgxMlY2em00IDh2LTRoLTJ2NGgtNHYyaDR2NGgydi00aDR2LTJoLTR6TTIgMTZoOHYtMkgydjJ6IiAvPjwvZz4KPGcgaWQ9InBsYXlsaXN0LWFkZC1jaGVjayI+PHBhdGggZD0iTTE0IDEwSDJ2MmgxMnYtMnptMC00SDJ2MmgxMlY2ek0yIDE2aDh2LTJIMnYyem0xOS41LTQuNUwyMyAxM2wtNi45OSA3LTQuNTEtNC41TDEzIDE0bDMuMDEgMyA1LjQ5LTUuNXoiIC8+PC9nPgo8ZyBpZD0icGxheWxpc3QtcGxheSI+PHBhdGggZD0iTTE5IDlIMnYyaDE3Vjl6bTAtNEgydjJoMTdWNXpNMiAxNWgxM3YtMkgydjJ6bTE1LTJ2Nmw1LTMtNS0zeiIgLz48L2c+CjxnIGlkPSJxdWV1ZSI+PHBhdGggZD0iTTQgNkgydjE0YzAgMS4xLjkgMiAyIDJoMTR2LTJINFY2em0xNi00SDhjLTEuMSAwLTIgLjktMiAydjEyYzAgMS4xLjkgMiAyIDJoMTJjMS4xIDAgMi0uOSAyLTJWNGMwLTEuMS0uOS0yLTItMnptLTEgOWgtNHY0aC0ydi00SDlWOWg0VjVoMnY0aDR2MnoiIC8+PC9nPgo8ZyBpZD0icXVldWUtbXVzaWMiPjxwYXRoIGQ9Ik0xNSA2SDN2MmgxMlY2em0wIDRIM3YyaDEydi0yek0zIDE2aDh2LTJIM3Yyek0xNyA2djguMThjLS4zMS0uMTEtLjY1LS4xOC0xLS4xOC0xLjY2IDAtMyAxLjM0LTMgM3MxLjM0IDMgMyAzIDMtMS4zNCAzLTNWOGgzVjZoLTV6IiAvPjwvZz4KPGcgaWQ9InF1ZXVlLXBsYXktbmV4dCI+PHBhdGggZD0iTTIxIDNIM2MtMS4xMSAwLTIgLjg5LTIgMnYxMmMwIDEuMS44OSAyIDIgMmg1djJoOHYtMmgydi0ySDNWNWgxOHY4aDJWNWMwLTEuMTEtLjktMi0yLTJ6bS04IDdWN2gtMnYzSDh2MmgzdjNoMnYtM2gzdi0yaC0zem0xMSA4bC00LjUgNC41TDE4IDIxbDMtMy0zLTMgMS41LTEuNUwyNCAxOHoiIC8+PC9nPgo8ZyBpZD0icmFkaW8iPjxwYXRoIGQ9Ik0zLjI0IDYuMTVDMi41MSA2LjQzIDIgNy4xNyAyIDh2MTJjMCAxLjEuODkgMiAyIDJoMTZjMS4xMSAwIDItLjkgMi0yVjhjMC0xLjExLS44OS0yLTItMkg4LjNsOC4yNi0zLjM0TDE1Ljg4IDEgMy4yNCA2LjE1ek03IDIwYy0xLjY2IDAtMy0xLjM0LTMtM3MxLjM0LTMgMy0zIDMgMS4zNCAzIDMtMS4zNCAzLTMgM3ptMTMtOGgtMnYtMmgtMnYySDRWOGgxNnY0eiIgLz48L2c+CjxnIGlkPSJyZWNlbnQtYWN0b3JzIj48cGF0aCBkPSJNMjEgNXYxNGgyVjVoLTJ6bS00IDE0aDJWNWgtMnYxNHpNMTQgNUgyYy0uNTUgMC0xIC40NS0xIDF2MTJjMCAuNTUuNDUgMSAxIDFoMTJjLjU1IDAgMS0uNDUgMS0xVjZjMC0uNTUtLjQ1LTEtMS0xek04IDcuNzVjMS4yNCAwIDIuMjUgMS4wMSAyLjI1IDIuMjVTOS4yNCAxMi4yNSA4IDEyLjI1IDUuNzUgMTEuMjQgNS43NSAxMCA2Ljc2IDcuNzUgOCA3Ljc1ek0xMi41IDE3aC05di0uNzVjMC0xLjUgMy0yLjI1IDQuNS0yLjI1czQuNS43NSA0LjUgMi4yNVYxN3oiIC8+PC9nPgo8ZyBpZD0icmVtb3ZlLWZyb20tcXVldWUiPjxwYXRoIGQ9Ik0yMSAzSDNjLTEuMTEgMC0yIC44OS0yIDJ2MTJjMCAxLjEuODkgMiAyIDJoNXYyaDh2LTJoNWMxLjEgMCAxLjk5LS45IDEuOTktMkwyMyA1YzAtMS4xMS0uOS0yLTItMnptMCAxNEgzVjVoMTh2MTJ6bS01LTd2Mkg4di0yaDh6IiAvPjwvZz4KPGcgaWQ9InJlcGVhdCI+PHBhdGggZD0iTTcgN2gxMHYzbDQtNC00LTR2M0g1djZoMlY3em0xMCAxMEg3di0zbC00IDQgNCA0di0zaDEydi02aC0ydjR6IiAvPjwvZz4KPGcgaWQ9InJlcGVhdC1vbmUiPjxwYXRoIGQ9Ik03IDdoMTB2M2w0LTQtNC00djNINXY2aDJWN3ptMTAgMTBIN3YtM2wtNCA0IDQgNHYtM2gxMnYtNmgtMnY0em0tNC0yVjloLTFsLTIgMXYxaDEuNXY0SDEzeiIgLz48L2c+CjxnIGlkPSJyZXBsYXkiPjxwYXRoIGQ9Ik0xMiA1VjFMNyA2bDUgNVY3YzMuMzEgMCA2IDIuNjkgNiA2cy0yLjY5IDYtNiA2LTYtMi42OS02LTZINGMwIDQuNDIgMy41OCA4IDggOHM4LTMuNTggOC04LTMuNTgtOC04LTh6IiAvPjwvZz4KPGcgaWQ9InJlcGxheS0xMCI+PHBhdGggZD0iTTEyIDVWMUw3IDZsNSA1VjdjMy4zIDAgNiAyLjcgNiA2cy0yLjcgNi02IDYtNi0yLjctNi02SDRjMCA0LjQgMy42IDggOCA4czgtMy42IDgtOC0zLjYtOC04LTh6bS0xLjEgMTFIMTB2LTMuM0w5IDEzdi0uN2wxLjgtLjZoLjFWMTZ6bTQuMy0xLjhjMCAuMyAwIC42LS4xLjhsLS4zLjZzLS4zLjMtLjUuMy0uNC4xLS42LjEtLjQgMC0uNi0uMS0uMy0uMi0uNS0uMy0uMi0uMy0uMy0uNi0uMS0uNS0uMS0uOHYtLjdjMC0uMyAwLS42LjEtLjhsLjMtLjZzLjMtLjMuNS0uMy40LS4xLjYtLjEuNCAwIC42LjFjLjIuMS4zLjIuNS4zcy4yLjMuMy42LjEuNS4xLjh2Ljd6bS0uOS0uOHYtLjVzLS4xLS4yLS4xLS4zLS4xLS4xLS4yLS4yLS4yLS4xLS4zLS4xLS4yIDAtLjMuMWwtLjIuMnMtLjEuMi0uMS4zdjJzLjEuMi4xLjMuMS4xLjIuMi4yLjEuMy4xLjIgMCAuMy0uMWwuMi0uMnMuMS0uMi4xLS4zdi0xLjV6IiAvPjwvZz4KPGcgaWQ9InJlcGxheS0zMCI+PHBhdGggZD0iTTEyIDVWMUw3IDZsNSA1VjdjMy4zIDAgNiAyLjcgNiA2cy0yLjcgNi02IDYtNi0yLjctNi02SDRjMCA0LjQgMy42IDggOCA4czgtMy42IDgtOC0zLjYtOC04LTh6bS0yLjQgOC41aC40Yy4yIDAgLjQtLjEuNS0uMnMuMi0uMi4yLS40di0uMnMtLjEtLjEtLjEtLjItLjEtLjEtLjItLjFoLS41cy0uMS4xLS4yLjEtLjEuMS0uMS4ydi4yaC0xYzAtLjIgMC0uMy4xLS41cy4yLS4zLjMtLjQuMy0uMi40LS4yLjQtLjEuNS0uMWMuMiAwIC40IDAgLjYuMXMuMy4xLjUuMi4yLjIuMy40LjEuMy4xLjV2LjNzLS4xLjItLjEuMy0uMS4yLS4yLjItLjIuMS0uMy4yYy4yLjEuNC4yLjUuNHMuMi40LjIuNmMwIC4yIDAgLjQtLjEuNXMtLjIuMy0uMy40LS4zLjItLjUuMi0uNC4xLS42LjFjLS4yIDAtLjQgMC0uNS0uMXMtLjMtLjEtLjUtLjItLjItLjItLjMtLjQtLjEtLjQtLjEtLjZoLjh2LjJzLjEuMS4xLjIuMS4xLjIuMWguNXMuMS0uMS4yLS4xLjEtLjEuMS0uMnYtLjVzLS4xLS4xLS4xLS4yLS4xLS4xLS4yLS4xaC0uNnYtLjd6bTUuNy43YzAgLjMgMCAuNi0uMS44bC0uMy42cy0uMy4zLS41LjMtLjQuMS0uNi4xLS40IDAtLjYtLjEtLjMtLjItLjUtLjMtLjItLjMtLjMtLjYtLjEtLjUtLjEtLjh2LS43YzAtLjMgMC0uNi4xLS44bC4zLS42cy4zLS4zLjUtLjMuNC0uMS42LS4xLjQgMCAuNi4xLjMuMi41LjMuMi4zLjMuNi4xLjUuMS44di43em0tLjgtLjh2LS41YzAtLjEtLjEtLjItLjEtLjNzLS4xLS4xLS4yLS4yLS4yLS4xLS4zLS4xLS4yIDAtLjMuMWwtLjIuMnMtLjEuMi0uMS4zdjJzLjEuMi4xLjMuMS4xLjIuMi4yLjEuMy4xLjIgMCAuMy0uMWwuMi0uMnMuMS0uMi4xLS4zdi0xLjV6IiAvPjwvZz4KPGcgaWQ9InJlcGxheS01Ij48cGF0aCBkPSJNMTIgNVYxTDcgNmw1IDVWN2MzLjMgMCA2IDIuNyA2IDZzLTIuNyA2LTYgNi02LTIuNy02LTZINGMwIDQuNCAzLjYgOCA4IDhzOC0zLjYgOC04LTMuNi04LTgtOHptLTEuMyA4LjlsLjItMi4yaDIuNHYuN2gtMS43bC0uMS45cy4xIDAgLjEtLjEuMSAwIC4xLS4xLjEgMCAuMiAwaC4yYy4yIDAgLjQgMCAuNS4xcy4zLjIuNC4zLjIuMy4zLjUuMS40LjEuNmMwIC4yIDAgLjQtLjEuNXMtLjEuMy0uMy41LS4zLjItLjQuMy0uNC4xLS42LjFjLS4yIDAtLjQgMC0uNS0uMXMtLjMtLjEtLjUtLjItLjItLjItLjMtLjQtLjEtLjMtLjEtLjVoLjhjMCAuMi4xLjMuMi40cy4yLjEuNC4xYy4xIDAgLjIgMCAuMy0uMWwuMi0uMnMuMS0uMi4xLS4zdi0uNmwtLjEtLjItLjItLjJzLS4yLS4xLS4zLS4xaC0uMnMtLjEgMC0uMi4xLS4xIDAtLjEuMS0uMS4xLS4xLjFoLS43eiIgLz48L2c+CjxnIGlkPSJzaHVmZmxlIj48cGF0aCBkPSJNMTAuNTkgOS4xN0w1LjQxIDQgNCA1LjQxbDUuMTcgNS4xNyAxLjQyLTEuNDF6TTE0LjUgNGwyLjA0IDIuMDRMNCAxOC41OSA1LjQxIDIwIDE3Ljk2IDcuNDYgMjAgOS41VjRoLTUuNXptLjMzIDkuNDFsLTEuNDEgMS40MSAzLjEzIDMuMTNMMTQuNSAyMEgyMHYtNS41bC0yLjA0IDIuMDQtMy4xMy0zLjEzeiIgLz48L2c+CjxnIGlkPSJza2lwLW5leHQiPjxwYXRoIGQ9Ik02IDE4bDguNS02TDYgNnYxMnpNMTYgNnYxMmgyVjZoLTJ6IiAvPjwvZz4KPGcgaWQ9InNraXAtcHJldmlvdXMiPjxwYXRoIGQ9Ik02IDZoMnYxMkg2em0zLjUgNmw4LjUgNlY2eiIgLz48L2c+CjxnIGlkPSJzbG93LW1vdGlvbi12aWRlbyI+PHBhdGggZD0iTTEzLjA1IDkuNzlMMTAgNy41djlsMy4wNS0yLjI5TDE2IDEyem0wIDBMMTAgNy41djlsMy4wNS0yLjI5TDE2IDEyem0wIDBMMTAgNy41djlsMy4wNS0yLjI5TDE2IDEyek0xMSA0LjA3VjIuMDVjLTIuMDEuMi0zLjg0IDEtNS4zMiAyLjIxTDcuMSA1LjY5YzEuMTEtLjg2IDIuNDQtMS40NCAzLjktMS42MnpNNS42OSA3LjFMNC4yNiA1LjY4QzMuMDUgNy4xNiAyLjI1IDguOTkgMi4wNSAxMWgyLjAyYy4xOC0xLjQ2Ljc2LTIuNzkgMS42Mi0zLjl6TTQuMDcgMTNIMi4wNWMuMiAyLjAxIDEgMy44NCAyLjIxIDUuMzJsMS40My0xLjQzYy0uODYtMS4xLTEuNDQtMi40My0xLjYyLTMuODl6bTEuNjEgNi43NEM3LjE2IDIwLjk1IDkgMjEuNzUgMTEgMjEuOTV2LTIuMDJjLTEuNDYtLjE4LTIuNzktLjc2LTMuOS0xLjYybC0xLjQyIDEuNDN6TTIyIDEyYzAgNS4xNi0zLjkyIDkuNDItOC45NSA5Ljk1di0yLjAyQzE2Ljk3IDE5LjQxIDIwIDE2LjA1IDIwIDEycy0zLjAzLTcuNDEtNi45NS03LjkzVjIuMDVDMTguMDggMi41OCAyMiA2Ljg0IDIyIDEyeiIgLz48L2c+CjxnIGlkPSJzbm9vemUiPjxwYXRoIGQ9Ik03Ljg4IDMuMzlMNi42IDEuODYgMiA1LjcxbDEuMjkgMS41MyA0LjU5LTMuODV6TTIyIDUuNzJsLTQuNi0zLjg2LTEuMjkgMS41MyA0LjYgMy44NkwyMiA1Ljcyek0xMiA0Yy00Ljk3IDAtOSA0LjAzLTkgOXM0LjAyIDkgOSA5YzQuOTcgMCA5LTQuMDMgOS05cy00LjAzLTktOS05em0wIDE2Yy0zLjg3IDAtNy0zLjEzLTctN3MzLjEzLTcgNy03IDcgMy4xMyA3IDctMy4xMyA3LTcgN3ptLTMtOWgzLjYzTDkgMTUuMlYxN2g2di0yaC0zLjYzTDE1IDEwLjhWOUg5djJ6IiAvPjwvZz4KPGcgaWQ9InNvcnQtYnktYWxwaGEiPjxwYXRoIGQ9Ik0xNC45NCA0LjY2aC00LjcybDIuMzYtMi4zNnptLTQuNjkgMTQuNzFoNC42NmwtMi4zMyAyLjMzek02LjEgNi4yN0wxLjYgMTcuNzNoMS44NGwuOTItMi40NWg1LjExbC45MiAyLjQ1aDEuODRMNy43NCA2LjI3SDYuMXptLTEuMTMgNy4zN2wxLjk0LTUuMTggMS45NCA1LjE4SDQuOTd6bTEwLjc2IDIuNWg2LjEydjEuNTloLTguNTN2LTEuMjlsNS45Mi04LjU2aC01Ljg4di0xLjZoOC4zdjEuMjZsLTUuOTMgOC42eiIgLz48L2c+CjxnIGlkPSJzdG9wIj48cGF0aCBkPSJNNiA2aDEydjEySDZ6IiAvPjwvZz4KPGcgaWQ9InN1YnNjcmlwdGlvbnMiPjxwYXRoIGQ9Ik0yMCA4SDRWNmgxNnYyem0tMi02SDZ2MmgxMlYyem00IDEwdjhjMCAxLjEtLjkgMi0yIDJINGMtMS4xIDAtMi0uOS0yLTJ2LThjMC0xLjEuOS0yIDItMmgxNmMxLjEgMCAyIC45IDIgMnptLTYgNGwtNi0zLjI3djYuNTNMMTYgMTZ6IiAvPjwvZz4KPGcgaWQ9InN1YnRpdGxlcyI+PHBhdGggZD0iTTIwIDRINGMtMS4xIDAtMiAuOS0yIDJ2MTJjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0yek00IDEyaDR2Mkg0di0yem0xMCA2SDR2LTJoMTB2MnptNiAwaC00di0yaDR2MnptMC00SDEwdi0yaDEwdjJ6IiAvPjwvZz4KPGcgaWQ9InN1cnJvdW5kLXNvdW5kIj48cGF0aCBkPSJNMjAgNEg0Yy0xLjEgMC0yIC45LTIgMnYxMmMwIDEuMS45IDIgMiAyaDE2YzEuMSAwIDItLjkgMi0yVjZjMC0xLjEtLjktMi0yLTJ6TTcuNzYgMTYuMjRsLTEuNDEgMS40MUM0Ljc4IDE2LjEgNCAxNC4wNSA0IDEyYzAtMi4wNS43OC00LjEgMi4zNC01LjY2bDEuNDEgMS40MUM2LjU5IDguOTMgNiAxMC40NiA2IDEycy41OSAzLjA3IDEuNzYgNC4yNHpNMTIgMTZjLTIuMjEgMC00LTEuNzktNC00czEuNzktNCA0LTQgNCAxLjc5IDQgNC0xLjc5IDQtNCA0em01LjY2IDEuNjZsLTEuNDEtMS40MUMxNy40MSAxNS4wNyAxOCAxMy41NCAxOCAxMnMtLjU5LTMuMDctMS43Ni00LjI0bDEuNDEtMS40MUMxOS4yMiA3LjkgMjAgOS45NSAyMCAxMmMwIDIuMDUtLjc4IDQuMS0yLjM0IDUuNjZ6TTEyIDEwYy0xLjEgMC0yIC45LTIgMnMuOSAyIDIgMiAyLS45IDItMi0uOS0yLTItMnoiIC8+PC9nPgo8ZyBpZD0idmlkZW8tY2FsbCI+PHBhdGggZD0iTTE3IDEwLjVWN2MwLS41NS0uNDUtMS0xLTFINGMtLjU1IDAtMSAuNDUtMSAxdjEwYzAgLjU1LjQ1IDEgMSAxaDEyYy41NSAwIDEtLjQ1IDEtMXYtMy41bDQgNHYtMTFsLTQgNHpNMTQgMTNoLTN2M0g5di0zSDZ2LTJoM1Y4aDJ2M2gzdjJ6IiAvPjwvZz4KPGcgaWQ9InZpZGVvLWxhYmVsIj48cGF0aCBkPSJNMjEgM0gzYy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE4YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bTAgMTNIM1Y1aDE4djExeiIgLz48L2c+CjxnIGlkPSJ2aWRlby1saWJyYXJ5Ij48cGF0aCBkPSJNNCA2SDJ2MTRjMCAxLjEuOSAyIDIgMmgxNHYtMkg0VjZ6bTE2LTRIOGMtMS4xIDAtMiAuOS0yIDJ2MTJjMCAxLjEuOSAyIDIgMmgxMmMxLjEgMCAyLS45IDItMlY0YzAtMS4xLS45LTItMi0yem0tOCAxMi41di05bDYgNC41LTYgNC41eiIgLz48L2c+CjxnIGlkPSJ2aWRlb2NhbSI+PHBhdGggZD0iTTE3IDEwLjVWN2MwLS41NS0uNDUtMS0xLTFINGMtLjU1IDAtMSAuNDUtMSAxdjEwYzAgLjU1LjQ1IDEgMSAxaDEyYy41NSAwIDEtLjQ1IDEtMXYtMy41bDQgNHYtMTFsLTQgNHoiIC8+PC9nPgo8ZyBpZD0idmlkZW9jYW0tb2ZmIj48cGF0aCBkPSJNMjEgNi41bC00IDRWN2MwLS41NS0uNDUtMS0xLTFIOS44MkwyMSAxNy4xOFY2LjV6TTMuMjcgMkwyIDMuMjcgNC43MyA2SDRjLS41NSAwLTEgLjQ1LTEgMXYxMGMwIC41NS40NSAxIDEgMWgxMmMuMjEgMCAuMzktLjA4LjU0LS4xOEwxOS43MyAyMSAyMSAxOS43MyAzLjI3IDJ6IiAvPjwvZz4KPGcgaWQ9InZvbHVtZS1kb3duIj48cGF0aCBkPSJNMTguNSAxMmMwLTEuNzctMS4wMi0zLjI5LTIuNS00LjAzdjguMDVjMS40OC0uNzMgMi41LTIuMjUgMi41LTQuMDJ6TTUgOXY2aDRsNSA1VjRMOSA5SDV6IiAvPjwvZz4KPGcgaWQ9InZvbHVtZS1tdXRlIj48cGF0aCBkPSJNNyA5djZoNGw1IDVWNGwtNSA1SDd6IiAvPjwvZz4KPGcgaWQ9InZvbHVtZS1vZmYiPjxwYXRoIGQ9Ik0xNi41IDEyYzAtMS43Ny0xLjAyLTMuMjktMi41LTQuMDN2Mi4yMWwyLjQ1IDIuNDVjLjAzLS4yLjA1LS40MS4wNS0uNjN6bTIuNSAwYzAgLjk0LS4yIDEuODItLjU0IDIuNjRsMS41MSAxLjUxQzIwLjYzIDE0LjkxIDIxIDEzLjUgMjEgMTJjMC00LjI4LTIuOTktNy44Ni03LTguNzd2Mi4wNmMyLjg5Ljg2IDUgMy41NCA1IDYuNzF6TTQuMjcgM0wzIDQuMjcgNy43MyA5SDN2Nmg0bDUgNXYtNi43M2w0LjI1IDQuMjVjLS42Ny41Mi0xLjQyLjkzLTIuMjUgMS4xOHYyLjA2YzEuMzgtLjMxIDIuNjMtLjk1IDMuNjktMS44MUwxOS43MyAyMSAyMSAxOS43M2wtOS05TDQuMjcgM3pNMTIgNEw5LjkxIDYuMDkgMTIgOC4xOFY0eiIgLz48L2c+CjxnIGlkPSJ2b2x1bWUtdXAiPjxwYXRoIGQ9Ik0zIDl2Nmg0bDUgNVY0TDcgOUgzem0xMy41IDNjMC0xLjc3LTEuMDItMy4yOS0yLjUtNC4wM3Y4LjA1YzEuNDgtLjczIDIuNS0yLjI1IDIuNS00LjAyek0xNCAzLjIzdjIuMDZjMi44OS44NiA1IDMuNTQgNSA2Ljcxcy0yLjExIDUuODUtNSA2LjcxdjIuMDZjNC4wMS0uOTEgNy00LjQ5IDctOC43N3MtMi45OS03Ljg2LTctOC43N3oiIC8+PC9nPgo8ZyBpZD0id2ViIj48cGF0aCBkPSJNMjAgNEg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0yem0tNSAxNEg0di00aDExdjR6bTAtNUg0VjloMTF2NHptNSA1aC00VjloNHY5eiIgLz48L2c+CjxnIGlkPSJ3ZWItYXNzZXQiPjxwYXRoIGQ9Ik0xOSA0SDVjLTEuMTEgMC0yIC45LTIgMnYxMmMwIDEuMS44OSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS44OS0yLTItMnptMCAxNEg1VjhoMTR2MTB6IiAvPjwvZz4KPC9kZWZzPjwvc3ZnPgo8L2lyb24taWNvbnNldC1zdmc+CgoKCjxpcm9uLWljb25zZXQtc3ZnIG5hbWU9ImNvbW11bmljYXRpb24iIHNpemU9IjI0Ij4KPHN2Zz48ZGVmcz4KPGcgaWQ9ImJ1c2luZXNzIj48cGF0aCBkPSJNMTIgN1YzSDJ2MThoMjBWN0gxMnpNNiAxOUg0di0yaDJ2MnptMC00SDR2LTJoMnYyem0wLTRINFY5aDJ2MnptMC00SDRWNWgydjJ6bTQgMTJIOHYtMmgydjJ6bTAtNEg4di0yaDJ2MnptMC00SDhWOWgydjJ6bTAtNEg4VjVoMnYyem0xMCAxMmgtOHYtMmgydi0yaC0ydi0yaDJ2LTJoLTJWOWg4djEwem0tMi04aC0ydjJoMnYtMnptMCA0aC0ydjJoMnYtMnoiIC8+PC9nPgo8ZyBpZD0iY2FsbCI+PHBhdGggZD0iTTYuNjIgMTAuNzljMS40NCAyLjgzIDMuNzYgNS4xNCA2LjU5IDYuNTlsMi4yLTIuMmMuMjctLjI3LjY3LS4zNiAxLjAyLS4yNCAxLjEyLjM3IDIuMzMuNTcgMy41Ny41Ny41NSAwIDEgLjQ1IDEgMVYyMGMwIC41NS0uNDUgMS0xIDEtOS4zOSAwLTE3LTcuNjEtMTctMTcgMC0uNTUuNDUtMSAxLTFoMy41Yy41NSAwIDEgLjQ1IDEgMSAwIDEuMjUuMiAyLjQ1LjU3IDMuNTcuMTEuMzUuMDMuNzQtLjI1IDEuMDJsLTIuMiAyLjJ6IiAvPjwvZz4KPGcgaWQ9ImNhbGwtZW5kIj48cGF0aCBkPSJNMTIgOWMtMS42IDAtMy4xNS4yNS00LjYuNzJ2My4xYzAgLjM5LS4yMy43NC0uNTYuOS0uOTguNDktMS44NyAxLjEyLTIuNjYgMS44NS0uMTguMTgtLjQzLjI4LS43LjI4LS4yOCAwLS41My0uMTEtLjcxLS4yOUwuMjkgMTMuMDhjLS4xOC0uMTctLjI5LS40Mi0uMjktLjcgMC0uMjguMTEtLjUzLjI5LS43MUMzLjM0IDguNzggNy40NiA3IDEyIDdzOC42NiAxLjc4IDExLjcxIDQuNjdjLjE4LjE4LjI5LjQzLjI5LjcxIDAgLjI4LS4xMS41My0uMjkuNzFsLTIuNDggMi40OGMtLjE4LjE4LS40My4yOS0uNzEuMjktLjI3IDAtLjUyLS4xMS0uNy0uMjgtLjc5LS43NC0xLjY5LTEuMzYtMi42Ny0xLjg1LS4zMy0uMTYtLjU2LS41LS41Ni0uOXYtMy4xQzE1LjE1IDkuMjUgMTMuNiA5IDEyIDl6IiAvPjwvZz4KPGcgaWQ9ImNhbGwtbWFkZSI+PHBhdGggZD0iTTkgNXYyaDYuNTlMNCAxOC41OSA1LjQxIDIwIDE3IDguNDFWMTVoMlY1eiIgLz48L2c+CjxnIGlkPSJjYWxsLW1lcmdlIj48cGF0aCBkPSJNMTcgMjAuNDFMMTguNDEgMTkgMTUgMTUuNTkgMTMuNTkgMTcgMTcgMjAuNDF6TTcuNSA4SDExdjUuNTlMNS41OSAxOSA3IDIwLjQxbDYtNlY4aDMuNUwxMiAzLjUgNy41IDh6IiAvPjwvZz4KPGcgaWQ9ImNhbGwtbWlzc2VkIj48cGF0aCBkPSJNMTkuNTkgN0wxMiAxNC41OSA2LjQxIDlIMTFWN0gzdjhoMnYtNC41OWw3IDcgOS05eiIgLz48L2c+CjxnIGlkPSJjYWxsLW1pc3NlZC1vdXRnb2luZyI+PHBhdGggZD0iTTMgOC40MWw5IDkgNy03VjE1aDJWN2gtOHYyaDQuNTlMMTIgMTQuNTkgNC40MSA3IDMgOC40MXoiIC8+PC9nPgo8ZyBpZD0iY2FsbC1yZWNlaXZlZCI+PHBhdGggZD0iTTIwIDUuNDFMMTguNTkgNCA3IDE1LjU5VjlINXYxMGgxMHYtMkg4LjQxeiIgLz48L2c+CjxnIGlkPSJjYWxsLXNwbGl0Ij48cGF0aCBkPSJNMTQgNGwyLjI5IDIuMjktMi44OCAyLjg4IDEuNDIgMS40MiAyLjg4LTIuODhMMjAgMTBWNHptLTQgMEg0djZsMi4yOS0yLjI5IDQuNzEgNC43VjIwaDJ2LTguNDFsLTUuMjktNS4zeiIgLz48L2c+CjxnIGlkPSJjaGF0Ij48cGF0aCBkPSJNMjAgMkg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMjJsNC00aDE0YzEuMSAwIDItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6TTYgOWgxMnYySDZWOXptOCA1SDZ2LTJoOHYyem00LTZINlY2aDEydjJ6IiAvPjwvZz4KPGcgaWQ9ImNoYXQtYnViYmxlIj48cGF0aCBkPSJNMjAgMkg0Yy0xLjEgMC0yIC45LTIgMnYxOGw0LTRoMTRjMS4xIDAgMi0uOSAyLTJWNGMwLTEuMS0uOS0yLTItMnoiIC8+PC9nPgo8ZyBpZD0iY2hhdC1idWJibGUtb3V0bGluZSI+PHBhdGggZD0iTTIwIDJINGMtMS4xIDAtMiAuOS0yIDJ2MThsNC00aDE0YzEuMSAwIDItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6bTAgMTRINmwtMiAyVjRoMTZ2MTJ6IiAvPjwvZz4KPGcgaWQ9ImNsZWFyLWFsbCI+PHBhdGggZD0iTTUgMTNoMTR2LTJINXYyem0tMiA0aDE0di0ySDN2MnpNNyA3djJoMTRWN0g3eiIgLz48L2c+CjxnIGlkPSJjb21tZW50Ij48cGF0aCBkPSJNMjEuOTkgNGMwLTEuMS0uODktMi0xLjk5LTJINGMtMS4xIDAtMiAuOS0yIDJ2MTJjMCAxLjEuOSAyIDIgMmgxNGw0IDQtLjAxLTE4ek0xOCAxNEg2di0yaDEydjJ6bTAtM0g2VjloMTJ2MnptMC0zSDZWNmgxMnYyeiIgLz48L2c+CjxnIGlkPSJjb250YWN0LW1haWwiPjxwYXRoIGQ9Ik0yMSA4VjdsLTMgMi0zLTJ2MWwzIDIgMy0yem0xLTVIMkMuOSAzIDAgMy45IDAgNXYxNGMwIDEuMS45IDIgMiAyaDIwYzEuMSAwIDEuOTktLjkgMS45OS0yTDI0IDVjMC0xLjEtLjktMi0yLTJ6TTggNmMxLjY2IDAgMyAxLjM0IDMgM3MtMS4zNCAzLTMgMy0zLTEuMzQtMy0zIDEuMzQtMyAzLTN6bTYgMTJIMnYtMWMwLTIgNC0zLjEgNi0zLjFzNiAxLjEgNiAzLjF2MXptOC02aC04VjZoOHY2eiIgLz48L2c+CjxnIGlkPSJjb250YWN0LXBob25lIj48cGF0aCBkPSJNMjIgM0gyQy45IDMgMCAzLjkgMCA1djE0YzAgMS4xLjkgMiAyIDJoMjBjMS4xIDAgMS45OS0uOSAxLjk5LTJMMjQgNWMwLTEuMS0uOS0yLTItMnpNOCA2YzEuNjYgMCAzIDEuMzQgMyAzcy0xLjM0IDMtMyAzLTMtMS4zNC0zLTMgMS4zNC0zIDMtM3ptNiAxMkgydi0xYzAtMiA0LTMuMSA2LTMuMXM2IDEuMSA2IDMuMXYxem0zLjg1LTRoMS42NEwyMSAxNmwtMS45OSAxLjk5Yy0xLjMxLS45OC0yLjI4LTIuMzgtMi43My0zLjk5LS4xOC0uNjQtLjI4LTEuMzEtLjI4LTJzLjEtMS4zNi4yOC0yYy40NS0xLjYyIDEuNDItMy4wMSAyLjczLTMuOTlMMjEgOGwtMS41MSAyaC0xLjY0Yy0uMjIuNjMtLjM1IDEuMy0uMzUgMnMuMTMgMS4zNy4zNSAyeiIgLz48L2c+CjxnIGlkPSJjb250YWN0cyI+PHBhdGggZD0iTTIwIDBINHYyaDE2VjB6TTQgMjRoMTZ2LTJINHYyek0yMCA0SDRjLTEuMSAwLTIgLjktMiAydjEyYzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJWNmMwLTEuMS0uOS0yLTItMnptLTggMi43NWMxLjI0IDAgMi4yNSAxLjAxIDIuMjUgMi4yNXMtMS4wMSAyLjI1LTIuMjUgMi4yNVM5Ljc1IDEwLjI0IDkuNzUgOSAxMC43NiA2Ljc1IDEyIDYuNzV6TTE3IDE3SDd2LTEuNWMwLTEuNjcgMy4zMy0yLjUgNS0yLjVzNSAuODMgNSAyLjVWMTd6IiAvPjwvZz4KPGcgaWQ9ImRpYWxlci1zaXAiPjxwYXRoIGQ9Ik0xNyAzaC0xdjVoMVYzem0tMiAyaC0yVjRoMlYzaC0zdjNoMnYxaC0ydjFoM1Y1em0zLTJ2NWgxVjZoMlYzaC0zem0yIDJoLTFWNGgxdjF6bTAgMTAuNWMtMS4yNSAwLTIuNDUtLjItMy41Ny0uNTctLjM1LS4xMS0uNzQtLjAzLTEuMDEuMjRsLTIuMiAyLjJjLTIuODMtMS40NC01LjE1LTMuNzUtNi41OS02LjU5bDIuMi0yLjIxYy4yNy0uMjYuMzUtLjY1LjI0LTFDOC43IDYuNDUgOC41IDUuMjUgOC41IDRjMC0uNTUtLjQ1LTEtMS0xSDRjLS41NSAwLTEgLjQ1LTEgMSAwIDkuMzkgNy42MSAxNyAxNyAxNyAuNTUgMCAxLS40NSAxLTF2LTMuNWMwLS41NS0uNDUtMS0xLTF6IiAvPjwvZz4KPGcgaWQ9ImRpYWxwYWQiPjxwYXRoIGQ9Ik0xMiAxOWMtMS4xIDAtMiAuOS0yIDJzLjkgMiAyIDIgMi0uOSAyLTItLjktMi0yLTJ6TTYgMWMtMS4xIDAtMiAuOS0yIDJzLjkgMiAyIDIgMi0uOSAyLTItLjktMi0yLTJ6bTAgNmMtMS4xIDAtMiAuOS0yIDJzLjkgMiAyIDIgMi0uOSAyLTItLjktMi0yLTJ6bTAgNmMtMS4xIDAtMiAuOS0yIDJzLjkgMiAyIDIgMi0uOSAyLTItLjktMi0yLTJ6bTEyLThjMS4xIDAgMi0uOSAyLTJzLS45LTItMi0yLTIgLjktMiAyIC45IDIgMiAyem0tNiA4Yy0xLjEgMC0yIC45LTIgMnMuOSAyIDIgMiAyLS45IDItMi0uOS0yLTItMnptNiAwYy0xLjEgMC0yIC45LTIgMnMuOSAyIDIgMiAyLS45IDItMi0uOS0yLTItMnptMC02Yy0xLjEgMC0yIC45LTIgMnMuOSAyIDIgMiAyLS45IDItMi0uOS0yLTItMnptLTYgMGMtMS4xIDAtMiAuOS0yIDJzLjkgMiAyIDIgMi0uOSAyLTItLjktMi0yLTJ6bTAtNmMtMS4xIDAtMiAuOS0yIDJzLjkgMiAyIDIgMi0uOSAyLTItLjktMi0yLTJ6IiAvPjwvZz4KPGcgaWQ9ImVtYWlsIj48cGF0aCBkPSJNMjAgNEg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0yem0wIDRsLTggNS04LTVWNmw4IDUgOC01djJ6IiAvPjwvZz4KPGcgaWQ9ImZvcnVtIj48cGF0aCBkPSJNMjEgNmgtMnY5SDZ2MmMwIC41NS40NSAxIDEgMWgxMWw0IDRWN2MwLS41NS0uNDUtMS0xLTF6bS00IDZWM2MwLS41NS0uNDUtMS0xLTFIM2MtLjU1IDAtMSAuNDUtMSAxdjE0bDQtNGgxMGMuNTUgMCAxLS40NSAxLTF6IiAvPjwvZz4KPGcgaWQ9ImltcG9ydC1jb250YWN0cyI+PHBhdGggZD0iTTIxIDVjLTEuMTEtLjM1LTIuMzMtLjUtMy41LS41LTEuOTUgMC00LjA1LjQtNS41IDEuNS0xLjQ1LTEuMS0zLjU1LTEuNS01LjUtMS41UzIuNDUgNC45IDEgNnYxNC42NWMwIC4yNS4yNS41LjUuNS4xIDAgLjE1LS4wNS4yNS0uMDVDMy4xIDIwLjQ1IDUuMDUgMjAgNi41IDIwYzEuOTUgMCA0LjA1LjQgNS41IDEuNSAxLjM1LS44NSAzLjgtMS41IDUuNS0xLjUgMS42NSAwIDMuMzUuMyA0Ljc1IDEuMDUuMS4wNS4xNS4wNS4yNS4wNS4yNSAwIC41LS4yNS41LS41VjZjLS42LS40NS0xLjI1LS43NS0yLTF6bTAgMTMuNWMtMS4xLS4zNS0yLjMtLjUtMy41LS41LTEuNyAwLTQuMTUuNjUtNS41IDEuNVY4YzEuMzUtLjg1IDMuOC0xLjUgNS41LTEuNSAxLjIgMCAyLjQuMTUgMy41LjV2MTEuNXoiIC8+PC9nPgo8ZyBpZD0iaW1wb3J0LWV4cG9ydCI+PHBhdGggZD0iTTkgM0w1IDYuOTloM1YxNGgyVjYuOTloM0w5IDN6bTcgMTQuMDFWMTBoLTJ2Ny4wMWgtM0wxNSAyMWw0LTMuOTloLTN6IiAvPjwvZz4KPGcgaWQ9ImludmVydC1jb2xvcnMtb2ZmIj48cGF0aCBkPSJNMjAuNjUgMjAuODdsLTIuMzUtMi4zNS02LjMtNi4yOS0zLjU2LTMuNTctMS40Mi0xLjQxTDQuMjcgNC41IDMgNS43N2wyLjc4IDIuNzhjLTIuNTUgMy4xNC0yLjM2IDcuNzYuNTYgMTAuNjlDNy45IDIwLjggOS45NSAyMS41OCAxMiAyMS41OGMxLjc5IDAgMy41Ny0uNTkgNS4wMy0xLjc4bDIuNyAyLjdMMjEgMjEuMjNsLS4zNS0uMzZ6TTEyIDE5LjU5Yy0xLjYgMC0zLjExLS42Mi00LjI0LTEuNzZDNi42MiAxNi42OSA2IDE1LjE5IDYgMTMuNTljMC0xLjMyLjQzLTIuNTcgMS4yMS0zLjZMMTIgMTQuNzd2NC44MnpNMTIgNS4xdjQuNThsNy4yNSA3LjI2YzEuMzctMi45Ni44NC02LjU3LTEuNi05LjAxTDEyIDIuMjdsLTMuNyAzLjcgMS40MSAxLjQxTDEyIDUuMXoiIC8+PC9nPgo8ZyBpZD0ibGl2ZS1oZWxwIj48cGF0aCBkPSJNMTkgMkg1Yy0xLjExIDAtMiAuOS0yIDJ2MTRjMCAxLjEuODkgMiAyIDJoNGwzIDMgMy0zaDRjMS4xIDAgMi0uOSAyLTJWNGMwLTEuMS0uOS0yLTItMnptLTYgMTZoLTJ2LTJoMnYyem0yLjA3LTcuNzVsLS45LjkyQzEzLjQ1IDExLjkgMTMgMTIuNSAxMyAxNGgtMnYtLjVjMC0xLjEuNDUtMi4xIDEuMTctMi44M2wxLjI0LTEuMjZjLjM3LS4zNi41OS0uODYuNTktMS40MSAwLTEuMS0uOS0yLTItMnMtMiAuOS0yIDJIOGMwLTIuMjEgMS43OS00IDQtNHM0IDEuNzkgNCA0YzAgLjg4LS4zNiAxLjY4LS45MyAyLjI1eiIgLz48L2c+CjxnIGlkPSJsb2NhdGlvbi1vZmYiPjxwYXRoIGQ9Ik0xMiA2LjVjMS4zOCAwIDIuNSAxLjEyIDIuNSAyLjUgMCAuNzQtLjMzIDEuMzktLjgzIDEuODVsMy42MyAzLjYzYy45OC0xLjg2IDEuNy0zLjggMS43LTUuNDggMC0zLjg3LTMuMTMtNy03LTctMS45OCAwLTMuNzYuODMtNS4wNCAyLjE1bDMuMTkgMy4xOWMuNDYtLjUyIDEuMTEtLjg0IDEuODUtLjg0em00LjM3IDkuNmwtNC42My00LjYzLS4xMS0uMTFMMy4yNyAzIDIgNC4yN2wzLjE4IDMuMThDNS4wNyA3Ljk1IDUgOC40NyA1IDljMCA1LjI1IDcgMTMgNyAxM3MxLjY3LTEuODUgMy4zOC00LjM1TDE4LjczIDIxIDIwIDE5LjczbC0zLjYzLTMuNjN6IiAvPjwvZz4KPGcgaWQ9ImxvY2F0aW9uLW9uIj48cGF0aCBkPSJNMTIgMkM4LjEzIDIgNSA1LjEzIDUgOWMwIDUuMjUgNyAxMyA3IDEzczctNy43NSA3LTEzYzAtMy44Ny0zLjEzLTctNy03em0wIDkuNWMtMS4zOCAwLTIuNS0xLjEyLTIuNS0yLjVzMS4xMi0yLjUgMi41LTIuNSAyLjUgMS4xMiAyLjUgMi41LTEuMTIgMi41LTIuNSAyLjV6IiAvPjwvZz4KPGcgaWQ9Im1haWwtb3V0bGluZSI+PHBhdGggZD0iTTIwIDRINGMtMS4xIDAtMS45OS45LTEuOTkgMkwyIDE4YzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJWNmMwLTEuMS0uOS0yLTItMnptMCAxNEg0VjhsOCA1IDgtNXYxMHptLTgtN0w0IDZoMTZsLTggNXoiIC8+PC9nPgo8ZyBpZD0ibWVzc2FnZSI+PHBhdGggZD0iTTIwIDJINGMtMS4xIDAtMS45OS45LTEuOTkgMkwyIDIybDQtNGgxNGMxLjEgMCAyLS45IDItMlY0YzAtMS4xLS45LTItMi0yem0tMiAxMkg2di0yaDEydjJ6bTAtM0g2VjloMTJ2MnptMC0zSDZWNmgxMnYyeiIgLz48L2c+CjxnIGlkPSJuby1zaW0iPjxwYXRoIGQ9Ik0xOC45OSA1YzAtMS4xLS44OS0yLTEuOTktMmgtN0w3LjY2IDUuMzQgMTkgMTYuNjggMTguOTkgNXpNMy42NSAzLjg4TDIuMzggNS4xNSA1IDcuNzdWMTljMCAxLjEuOSAyIDIgMmgxMC4wMWMuMzUgMCAuNjctLjEuOTYtLjI2bDEuODggMS44OCAxLjI3LTEuMjdMMy42NSAzLjg4eiIgLz48L2c+CjxnIGlkPSJwaG9uZSI+PHBhdGggZD0iTTYuNjIgMTAuNzljMS40NCAyLjgzIDMuNzYgNS4xNCA2LjU5IDYuNTlsMi4yLTIuMmMuMjctLjI3LjY3LS4zNiAxLjAyLS4yNCAxLjEyLjM3IDIuMzMuNTcgMy41Ny41Ny41NSAwIDEgLjQ1IDEgMVYyMGMwIC41NS0uNDUgMS0xIDEtOS4zOSAwLTE3LTcuNjEtMTctMTcgMC0uNTUuNDUtMSAxLTFoMy41Yy41NSAwIDEgLjQ1IDEgMSAwIDEuMjUuMiAyLjQ1LjU3IDMuNTcuMTEuMzUuMDMuNzQtLjI1IDEuMDJsLTIuMiAyLjJ6IiAvPjwvZz4KPGcgaWQ9InBob25lbGluay1lcmFzZSI+PHBhdGggZD0iTTEzIDguMmwtMS0xLTQgNC00LTQtMSAxIDQgNC00IDQgMSAxIDQtNCA0IDQgMS0xLTQtNCA0LTR6TTE5IDFIOWMtMS4xIDAtMiAuOS0yIDJ2M2gyVjRoMTB2MTZIOXYtMkg3djNjMCAxLjEuOSAyIDIgMmgxMGMxLjEgMCAyLS45IDItMlYzYzAtMS4xLS45LTItMi0yeiIgLz48L2c+CjxnIGlkPSJwaG9uZWxpbmstbG9jayI+PHBhdGggZD0iTTE5IDFIOWMtMS4xIDAtMiAuOS0yIDJ2M2gyVjRoMTB2MTZIOXYtMkg3djNjMCAxLjEuOSAyIDIgMmgxMGMxLjEgMCAyLS45IDItMlYzYzAtMS4xLS45LTItMi0yem0tOC4yIDEwVjkuNUMxMC44IDguMSA5LjQgNyA4IDdTNS4yIDguMSA1LjIgOS41VjExYy0uNiAwLTEuMi42LTEuMiAxLjJ2My41YzAgLjcuNiAxLjMgMS4yIDEuM2g1LjVjLjcgMCAxLjMtLjYgMS4zLTEuMnYtMy41YzAtLjctLjYtMS4zLTEuMi0xLjN6bS0xLjMgMGgtM1Y5LjVjMC0uOC43LTEuMyAxLjUtMS4zczEuNS41IDEuNSAxLjNWMTF6IiAvPjwvZz4KPGcgaWQ9InBob25lbGluay1yaW5nIj48cGF0aCBkPSJNMjAuMSA3LjdsLTEgMWMxLjggMS44IDEuOCA0LjYgMCA2LjVsMSAxYzIuNS0yLjMgMi41LTYuMSAwLTguNXpNMTggOS44bC0xIDFjLjUuNy41IDEuNiAwIDIuM2wxIDFjMS4yLTEuMiAxLjItMyAwLTQuM3pNMTQgMUg0Yy0xLjEgMC0yIC45LTIgMnYxOGMwIDEuMS45IDIgMiAyaDEwYzEuMSAwIDItLjkgMi0yVjNjMC0xLjEtLjktMi0yLTJ6bTAgMTlINFY0aDEwdjE2eiIgLz48L2c+CjxnIGlkPSJwaG9uZWxpbmstc2V0dXAiPjxwYXRoIGQ9Ik0xMS44IDEyLjV2LTFsMS4xLS44Yy4xLS4xLjEtLjIuMS0uM2wtMS0xLjdjLS4xLS4xLS4yLS4yLS4zLS4xbC0xLjMuNGMtLjMtLjItLjYtLjQtLjktLjVsLS4yLTEuM2MwLS4xLS4xLS4yLS4zLS4ySDdjLS4xIDAtLjIuMS0uMy4ybC0uMiAxLjNjLS4zLjEtLjYuMy0uOS41bC0xLjMtLjVjLS4xIDAtLjIgMC0uMy4xbC0xIDEuN2MtLjEuMSAwIC4yLjEuM2wxLjEuOHYxbC0xLjEuOGMtLjEuMi0uMS4zLS4xLjRsMSAxLjdjLjEuMS4yLjIuMy4xbDEuNC0uNGMuMy4yLjYuNC45LjVsLjIgMS4zYy0uMS4xLjEuMi4yLjJoMmMuMSAwIC4yLS4xLjMtLjJsLjItMS4zYy4zLS4xLjYtLjMuOS0uNWwxLjMuNWMuMSAwIC4yIDAgLjMtLjFsMS0xLjdjLjEtLjEgMC0uMi0uMS0uM2wtMS4xLS45ek04IDE0Yy0xLjEgMC0yLS45LTItMnMuOS0yIDItMiAyIC45IDIgMi0uOSAyLTIgMnpNMTkgMUg5Yy0xLjEgMC0yIC45LTIgMnYzaDJWNGgxMHYxNkg5di0ySDd2M2MwIDEuMS45IDIgMiAyaDEwYzEuMSAwIDItLjkgMi0yVjNjMC0xLjEtLjktMi0yLTJ6IiAvPjwvZz4KPGcgaWQ9InBvcnRhYmxlLXdpZmktb2ZmIj48cGF0aCBkPSJNMTcuNTYgMTQuMjRjLjI4LS42OS40NC0xLjQ1LjQ0LTIuMjQgMC0zLjMxLTIuNjktNi02LTYtLjc5IDAtMS41NS4xNi0yLjI0LjQ0bDEuNjIgMS42MmMuMi0uMDMuNDEtLjA2LjYyLS4wNiAyLjIxIDAgNCAxLjc5IDQgNCAwIC4yMS0uMDIuNDItLjA1LjYzbDEuNjEgMS42MXpNMTIgNGM0LjQyIDAgOCAzLjU4IDggOCAwIDEuMzUtLjM1IDIuNjItLjk1IDMuNzRsMS40NyAxLjQ3QzIxLjQ2IDE1LjY5IDIyIDEzLjkxIDIyIDEyYzAtNS41Mi00LjQ4LTEwLTEwLTEwLTEuOTEgMC0zLjY5LjU1LTUuMjEgMS40N2wxLjQ2IDEuNDZDOS4zNyA0LjM0IDEwLjY1IDQgMTIgNHpNMy4yNyAyLjVMMiAzLjc3bDIuMSAyLjFDMi43OSA3LjU3IDIgOS42OSAyIDEyYzAgMy43IDIuMDEgNi45MiA0Ljk5IDguNjVsMS0xLjczQzUuNjEgMTcuNTMgNCAxNC45NiA0IDEyYzAtMS43Ni41Ny0zLjM4IDEuNTMtNC42OWwxLjQzIDEuNDRDNi4zNiA5LjY4IDYgMTAuOCA2IDEyYzAgMi4yMiAxLjIxIDQuMTUgMyA1LjE5bDEtMS43NGMtMS4xOS0uNy0yLTEuOTctMi0zLjQ1IDAtLjY1LjE3LTEuMjUuNDQtMS43OWwxLjU4IDEuNThMMTAgMTJjMCAxLjEuOSAyIDIgMmwuMjEtLjAyLjAxLjAxIDcuNTEgNy41MUwyMSAyMC4yMyA0LjI3IDMuNWwtMS0xeiIgLz48L2c+CjxnIGlkPSJwcmVzZW50LXRvLWFsbCI+PHBhdGggZD0iTTIxIDNIM2MtMS4xMSAwLTIgLjg5LTIgMnYxNGMwIDEuMTEuODkgMiAyIDJoMThjMS4xMSAwIDItLjg5IDItMlY1YzAtMS4xMS0uODktMi0yLTJ6bTAgMTYuMDJIM1Y0Ljk4aDE4djE0LjA0ek0xMCAxMkg4bDQtNCA0IDRoLTJ2NGgtNHYtNHoiIC8+PC9nPgo8ZyBpZD0icmluZy12b2x1bWUiPjxwYXRoIGQ9Ik0yMy43MSAxNi42N0MyMC42NiAxMy43OCAxNi41NCAxMiAxMiAxMiA3LjQ2IDEyIDMuMzQgMTMuNzguMjkgMTYuNjdjLS4xOC4xOC0uMjkuNDMtLjI5LjcxIDAgLjI4LjExLjUzLjI5LjcxbDIuNDggMi40OGMuMTguMTguNDMuMjkuNzEuMjkuMjcgMCAuNTItLjExLjctLjI4Ljc5LS43NCAxLjY5LTEuMzYgMi42Ni0xLjg1LjMzLS4xNi41Ni0uNS41Ni0uOXYtMy4xYzEuNDUtLjQ4IDMtLjczIDQuNi0uNzNzMy4xNS4yNSA0LjYuNzJ2My4xYzAgLjM5LjIzLjc0LjU2LjkuOTguNDkgMS44NyAxLjEyIDIuNjYgMS44NS4xOC4xOC40My4yOC43LjI4LjI4IDAgLjUzLS4xMS43MS0uMjlsMi40OC0yLjQ4Yy4xOC0uMTguMjktLjQzLjI5LS43MSAwLS4yNy0uMTEtLjUyLS4yOS0uN3pNMjEuMTYgNi4yNmwtMS40MS0xLjQxLTMuNTYgMy41NSAxLjQxIDEuNDFzMy40NS0zLjUyIDMuNTYtMy41NXpNMTMgMmgtMnY1aDJWMnpNNi40IDkuODFMNy44MSA4LjQgNC4yNiA0Ljg0IDIuODQgNi4yNmMuMTEuMDMgMy41NiAzLjU1IDMuNTYgMy41NXoiIC8+PC9nPgo8ZyBpZD0icnNzLWZlZWQiPjxjaXJjbGUgY3g9IjYuMTgiIGN5PSIxNy44MiIgcj0iMi4xOCIgLz48cGF0aCBkPSJNNCA0LjQ0djIuODNjNy4wMyAwIDEyLjczIDUuNyAxMi43MyAxMi43M2gyLjgzYzAtOC41OS02Ljk3LTE1LjU2LTE1LjU2LTE1LjU2em0wIDUuNjZ2Mi44M2MzLjkgMCA3LjA3IDMuMTcgNy4wNyA3LjA3aDIuODNjMC01LjQ3LTQuNDMtOS45LTkuOS05Ljl6IiAvPjwvZz4KPGcgaWQ9InNjcmVlbi1zaGFyZSI+PHBhdGggZD0iTTIwIDE4YzEuMSAwIDEuOTktLjkgMS45OS0yTDIyIDZjMC0xLjExLS45LTItMi0ySDRjLTEuMTEgMC0yIC44OS0yIDJ2MTBjMCAxLjEuODkgMiAyIDJIMHYyaDI0di0yaC00em0tNy0zLjUzdi0yLjE5Yy0yLjc4IDAtNC42MS44NS02IDIuNzIuNTYtMi42NyAyLjExLTUuMzMgNi01Ljg3VjdsNCAzLjczLTQgMy43NHoiIC8+PC9nPgo8ZyBpZD0ic3BlYWtlci1waG9uZSI+PHBhdGggZD0iTTcgNy4wN0w4LjQzIDguNWMuOTEtLjkxIDIuMTgtMS40OCAzLjU3LTEuNDhzMi42Ni41NyAzLjU3IDEuNDhMMTcgNy4wN0MxNS43MiA1Ljc5IDEzLjk1IDUgMTIgNXMtMy43Mi43OS01IDIuMDd6TTEyIDFDOC45OCAxIDYuMjQgMi4yMyA0LjI1IDQuMjFsMS40MSAxLjQxQzcuMjggNCA5LjUzIDMgMTIgM3M0LjcyIDEgNi4zNCAyLjYybDEuNDEtMS40MUMxNy43NiAyLjIzIDE1LjAyIDEgMTIgMXptMi44NiA5LjAxTDkuMTQgMTBDOC41MSAxMCA4IDEwLjUxIDggMTEuMTR2OS43MWMwIC42My41MSAxLjE0IDEuMTQgMS4xNGg1LjcxYy42MyAwIDEuMTQtLjUxIDEuMTQtMS4xNHYtOS43MWMuMDEtLjYzLS41LTEuMTMtMS4xMy0xLjEzek0xNSAyMEg5di04aDZ2OHoiIC8+PC9nPgo8ZyBpZD0ic3RheS1jdXJyZW50LWxhbmRzY2FwZSI+PHBhdGggZD0iTTEuMDEgN0wxIDE3YzAgMS4xLjkgMiAyIDJoMThjMS4xIDAgMi0uOSAyLTJWN2MwLTEuMS0uOS0yLTItMkgzYy0xLjEgMC0xLjk5LjktMS45OSAyek0xOSA3djEwSDVWN2gxNHoiIC8+PC9nPgo8ZyBpZD0ic3RheS1jdXJyZW50LXBvcnRyYWl0Ij48cGF0aCBkPSJNMTcgMS4wMUw3IDFjLTEuMSAwLTEuOTkuOS0xLjk5IDJ2MThjMCAxLjEuODkgMiAxLjk5IDJoMTBjMS4xIDAgMi0uOSAyLTJWM2MwLTEuMS0uOS0xLjk5LTItMS45OXpNMTcgMTlIN1Y1aDEwdjE0eiIgLz48L2c+CjxnIGlkPSJzdGF5LXByaW1hcnktbGFuZHNjYXBlIj48cGF0aCBkPSJNMS4wMSA3TDEgMTdjMCAxLjEuOSAyIDIgMmgxOGMxLjEgMCAyLS45IDItMlY3YzAtMS4xLS45LTItMi0ySDNjLTEuMSAwLTEuOTkuOS0xLjk5IDJ6TTE5IDd2MTBINVY3aDE0eiIgLz48L2c+CjxnIGlkPSJzdGF5LXByaW1hcnktcG9ydHJhaXQiPjxwYXRoIGQ9Ik0xNyAxLjAxTDcgMWMtMS4xIDAtMS45OS45LTEuOTkgMnYxOGMwIDEuMS44OSAyIDEuOTkgMmgxMGMxLjEgMCAyLS45IDItMlYzYzAtMS4xLS45LTEuOTktMi0xLjk5ek0xNyAxOUg3VjVoMTB2MTR6IiAvPjwvZz4KPGcgaWQ9InN0b3Atc2NyZWVuLXNoYXJlIj48cGF0aCBkPSJNMjEuMjIgMTguMDJsMiAySDI0di0yaC0yLjc4em0uNzctMmwuMDEtMTBjMC0xLjExLS45LTItMi0ySDcuMjJsNS4yMyA1LjIzYy4xOC0uMDQuMzYtLjA3LjU1LS4xVjcuMDJsNCAzLjczLTEuNTggMS40NyA1LjU0IDUuNTRjLjYxLS4zMyAxLjAzLS45OSAxLjAzLTEuNzR6TTIuMzkgMS43M0wxLjExIDNsMS41NCAxLjU0Yy0uNC4zNi0uNjUuODktLjY1IDEuNDh2MTBjMCAxLjEuODkgMiAyIDJIMHYyaDE4LjEzbDIuNzEgMi43MSAxLjI3LTEuMjdMMi4zOSAxLjczek03IDE1LjAyYy4zMS0xLjQ4LjkyLTIuOTUgMi4wNy00LjA2bDEuNTkgMS41OWMtMS41NC4zOC0yLjcgMS4xOC0zLjY2IDIuNDd6IiAvPjwvZz4KPGcgaWQ9InN3YXAtY2FsbHMiPjxwYXRoIGQ9Ik0xOCA0bC00IDRoM3Y3YzAgMS4xLS45IDItMiAycy0yLS45LTItMlY4YzAtMi4yMS0xLjc5LTQtNC00UzUgNS43OSA1IDh2N0gybDQgNCA0LTRIN1Y4YzAtMS4xLjktMiAyLTJzMiAuOSAyIDJ2N2MwIDIuMjEgMS43OSA0IDQgNHM0LTEuNzkgNC00VjhoM2wtNC00eiIgLz48L2c+CjxnIGlkPSJ0ZXh0c21zIj48cGF0aCBkPSJNMjAgMkg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMjJsNC00aDE0YzEuMSAwIDItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6TTkgMTFIN1Y5aDJ2MnptNCAwaC0yVjloMnYyem00IDBoLTJWOWgydjJ6IiAvPjwvZz4KPGcgaWQ9InZvaWNlbWFpbCI+PHBhdGggZD0iTTE4LjUgNkMxNS40NiA2IDEzIDguNDYgMTMgMTEuNWMwIDEuMzMuNDcgMi41NSAxLjI2IDMuNUg5Ljc0Yy43OS0uOTUgMS4yNi0yLjE3IDEuMjYtMy41QzExIDguNDYgOC41NCA2IDUuNSA2UzAgOC40NiAwIDExLjUgMi40NiAxNyA1LjUgMTdoMTNjMy4wNCAwIDUuNS0yLjQ2IDUuNS01LjVTMjEuNTQgNiAxOC41IDZ6bS0xMyA5QzMuNTcgMTUgMiAxMy40MyAyIDExLjVTMy41NyA4IDUuNSA4IDkgOS41NyA5IDExLjUgNy40MyAxNSA1LjUgMTV6bTEzIDBjLTEuOTMgMC0zLjUtMS41Ny0zLjUtMy41UzE2LjU3IDggMTguNSA4IDIyIDkuNTcgMjIgMTEuNSAyMC40MyAxNSAxOC41IDE1eiIgLz48L2c+CjxnIGlkPSJ2cG4ta2V5Ij48cGF0aCBkPSJNMTIuNjUgMTBDMTEuODMgNy42NyA5LjYxIDYgNyA2Yy0zLjMxIDAtNiAyLjY5LTYgNnMyLjY5IDYgNiA2YzIuNjEgMCA0LjgzLTEuNjcgNS42NS00SDE3djRoNHYtNGgydi00SDEyLjY1ek03IDE0Yy0xLjEgMC0yLS45LTItMnMuOS0yIDItMiAyIC45IDIgMi0uOSAyLTIgMnoiIC8+PC9nPgo8L2RlZnM+PC9zdmc+CjwvaXJvbi1pY29uc2V0LXN2Zz4KCgoKCjxpcm9uLWljb25zZXQtc3ZnIG5hbWU9ImVkaXRvciIgc2l6ZT0iMjQiPgo8c3ZnPjxkZWZzPgo8ZyBpZD0iYXR0YWNoLWZpbGUiPjxwYXRoIGQ9Ik0xNi41IDZ2MTEuNWMwIDIuMjEtMS43OSA0LTQgNHMtNC0xLjc5LTQtNFY1YzAtMS4zOCAxLjEyLTIuNSAyLjUtMi41czIuNSAxLjEyIDIuNSAyLjV2MTAuNWMwIC41NS0uNDUgMS0xIDFzLTEtLjQ1LTEtMVY2SDEwdjkuNWMwIDEuMzggMS4xMiAyLjUgMi41IDIuNXMyLjUtMS4xMiAyLjUtMi41VjVjMC0yLjIxLTEuNzktNC00LTRTNyAyLjc5IDcgNXYxMi41YzAgMy4wNCAyLjQ2IDUuNSA1LjUgNS41czUuNS0yLjQ2IDUuNS01LjVWNmgtMS41eiIgLz48L2c+CjxnIGlkPSJhdHRhY2gtbW9uZXkiPjxwYXRoIGQ9Ik0xMS44IDEwLjljLTIuMjctLjU5LTMtMS4yLTMtMi4xNSAwLTEuMDkgMS4wMS0xLjg1IDIuNy0xLjg1IDEuNzggMCAyLjQ0Ljg1IDIuNSAyLjFoMi4yMWMtLjA3LTEuNzItMS4xMi0zLjMtMy4yMS0zLjgxVjNoLTN2Mi4xNmMtMS45NC40Mi0zLjUgMS42OC0zLjUgMy42MSAwIDIuMzEgMS45MSAzLjQ2IDQuNyA0LjEzIDIuNS42IDMgMS40OCAzIDIuNDEgMCAuNjktLjQ5IDEuNzktMi43IDEuNzktMi4wNiAwLTIuODctLjkyLTIuOTgtMi4xaC0yLjJjLjEyIDIuMTkgMS43NiAzLjQyIDMuNjggMy44M1YyMWgzdi0yLjE1YzEuOTUtLjM3IDMuNS0xLjUgMy41LTMuNTUgMC0yLjg0LTIuNDMtMy44MS00LjctNC40eiIgLz48L2c+CjxnIGlkPSJib3JkZXItYWxsIj48cGF0aCBkPSJNMyAzdjE4aDE4VjNIM3ptOCAxNkg1di02aDZ2NnptMC04SDVWNWg2djZ6bTggOGgtNnYtNmg2djZ6bTAtOGgtNlY1aDZ2NnoiIC8+PC9nPgo8ZyBpZD0iYm9yZGVyLWJvdHRvbSI+PHBhdGggZD0iTTkgMTFIN3YyaDJ2LTJ6bTQgNGgtMnYyaDJ2LTJ6TTkgM0g3djJoMlYzem00IDhoLTJ2Mmgydi0yek01IDNIM3YyaDJWM3ptOCA0aC0ydjJoMlY3em00IDRoLTJ2Mmgydi0yem0tNC04aC0ydjJoMlYzem00IDBoLTJ2MmgyVjN6bTIgMTBoMnYtMmgtMnYyem0wIDRoMnYtMmgtMnYyek01IDdIM3YyaDJWN3ptMTQtNHYyaDJWM2gtMnptMCA2aDJWN2gtMnYyek01IDExSDN2Mmgydi0yek0zIDIxaDE4di0ySDN2MnptMi02SDN2Mmgydi0yeiIgLz48L2c+CjxnIGlkPSJib3JkZXItY2xlYXIiPjxwYXRoIGQ9Ik03IDVoMlYzSDd2MnptMCA4aDJ2LTJIN3Yyem0wIDhoMnYtMkg3djJ6bTQtNGgydi0yaC0ydjJ6bTAgNGgydi0yaC0ydjJ6bS04IDBoMnYtMkgzdjJ6bTAtNGgydi0ySDN2MnptMC00aDJ2LTJIM3Yyem0wLTRoMlY3SDN2MnptMC00aDJWM0gzdjJ6bTggOGgydi0yaC0ydjJ6bTggNGgydi0yaC0ydjJ6bTAtNGgydi0yaC0ydjJ6bTAgOGgydi0yaC0ydjJ6bTAtMTJoMlY3aC0ydjJ6bS04IDBoMlY3aC0ydjJ6bTgtNnYyaDJWM2gtMnptLTggMmgyVjNoLTJ2MnptNCAxNmgydi0yaC0ydjJ6bTAtOGgydi0yaC0ydjJ6bTAtOGgyVjNoLTJ2MnoiIC8+PC9nPgo8ZyBpZD0iYm9yZGVyLWNvbG9yIj48cGF0aCBkPSJNMTcuNzUgN0wxNCAzLjI1bC0xMCAxMFYxN2gzLjc1bDEwLTEwem0yLjk2LTIuOTZjLjM5LS4zOS4zOS0xLjAyIDAtMS40MUwxOC4zNy4yOWMtLjM5LS4zOS0xLjAyLS4zOS0xLjQxIDBMMTUgMi4yNSAxOC43NSA2bDEuOTYtMS45NnoiIC8+PHBhdGggZmlsbC1vcGFjaXR5PSIuMzYiIGQ9Ik0wIDIwaDI0djRIMHoiIC8+PC9nPgo8ZyBpZD0iYm9yZGVyLWhvcml6b250YWwiPjxwYXRoIGQ9Ik0zIDIxaDJ2LTJIM3Yyek01IDdIM3YyaDJWN3pNMyAxN2gydi0ySDN2MnptNCA0aDJ2LTJIN3Yyek01IDNIM3YyaDJWM3ptNCAwSDd2MmgyVjN6bTggMGgtMnYyaDJWM3ptLTQgNGgtMnYyaDJWN3ptMC00aC0ydjJoMlYzem02IDE0aDJ2LTJoLTJ2MnptLTggNGgydi0yaC0ydjJ6bS04LThoMTh2LTJIM3Yyek0xOSAzdjJoMlYzaC0yem0wIDZoMlY3aC0ydjJ6bS04IDhoMnYtMmgtMnYyem00IDRoMnYtMmgtMnYyem00IDBoMnYtMmgtMnYyeiIgLz48L2c+CjxnIGlkPSJib3JkZXItaW5uZXIiPjxwYXRoIGQ9Ik0zIDIxaDJ2LTJIM3Yyem00IDBoMnYtMkg3djJ6TTUgN0gzdjJoMlY3ek0zIDE3aDJ2LTJIM3Yyek05IDNIN3YyaDJWM3pNNSAzSDN2MmgyVjN6bTEyIDBoLTJ2MmgyVjN6bTIgNmgyVjdoLTJ2MnptMC02djJoMlYzaC0yem0tNCAxOGgydi0yaC0ydjJ6TTEzIDNoLTJ2OEgzdjJoOHY4aDJ2LThoOHYtMmgtOFYzem02IDE4aDJ2LTJoLTJ2MnptMC00aDJ2LTJoLTJ2MnoiIC8+PC9nPgo8ZyBpZD0iYm9yZGVyLWxlZnQiPjxwYXRoIGQ9Ik0xMSAyMWgydi0yaC0ydjJ6bTAtNGgydi0yaC0ydjJ6bTAtMTJoMlYzaC0ydjJ6bTAgNGgyVjdoLTJ2MnptMCA0aDJ2LTJoLTJ2MnptLTQgOGgydi0ySDd2MnpNNyA1aDJWM0g3djJ6bTAgOGgydi0ySDd2MnptLTQgOGgyVjNIM3YxOHpNMTkgOWgyVjdoLTJ2MnptLTQgMTJoMnYtMmgtMnYyem00LTRoMnYtMmgtMnYyem0wLTE0djJoMlYzaC0yem0wIDEwaDJ2LTJoLTJ2MnptMCA4aDJ2LTJoLTJ2MnptLTQtOGgydi0yaC0ydjJ6bTAtOGgyVjNoLTJ2MnoiIC8+PC9nPgo8ZyBpZD0iYm9yZGVyLW91dGVyIj48cGF0aCBkPSJNMTMgN2gtMnYyaDJWN3ptMCA0aC0ydjJoMnYtMnptNCAwaC0ydjJoMnYtMnpNMyAzdjE4aDE4VjNIM3ptMTYgMTZINVY1aDE0djE0em0tNi00aC0ydjJoMnYtMnptLTQtNEg3djJoMnYtMnoiIC8+PC9nPgo8ZyBpZD0iYm9yZGVyLXJpZ2h0Ij48cGF0aCBkPSJNNyAyMWgydi0ySDd2MnpNMyA1aDJWM0gzdjJ6bTQgMGgyVjNIN3Yyem0wIDhoMnYtMkg3djJ6bS00IDhoMnYtMkgzdjJ6bTggMGgydi0yaC0ydjJ6bS04LThoMnYtMkgzdjJ6bTAgNGgydi0ySDN2MnptMC04aDJWN0gzdjJ6bTggOGgydi0yaC0ydjJ6bTQtNGgydi0yaC0ydjJ6bTQtMTB2MThoMlYzaC0yem0tNCAxOGgydi0yaC0ydjJ6bTAtMTZoMlYzaC0ydjJ6bS00IDhoMnYtMmgtMnYyem0wLThoMlYzaC0ydjJ6bTAgNGgyVjdoLTJ2MnoiIC8+PC9nPgo8ZyBpZD0iYm9yZGVyLXN0eWxlIj48cGF0aCBkPSJNMTUgMjFoMnYtMmgtMnYyem00IDBoMnYtMmgtMnYyek03IDIxaDJ2LTJIN3Yyem00IDBoMnYtMmgtMnYyem04LTRoMnYtMmgtMnYyem0wLTRoMnYtMmgtMnYyek0zIDN2MThoMlY1aDE2VjNIM3ptMTYgNmgyVjdoLTJ2MnoiIC8+PC9nPgo8ZyBpZD0iYm9yZGVyLXRvcCI+PHBhdGggZD0iTTcgMjFoMnYtMkg3djJ6bTAtOGgydi0ySDd2MnptNCAwaDJ2LTJoLTJ2MnptMCA4aDJ2LTJoLTJ2MnptLTgtNGgydi0ySDN2MnptMCA0aDJ2LTJIM3Yyem0wLThoMnYtMkgzdjJ6bTAtNGgyVjdIM3Yyem04IDhoMnYtMmgtMnYyem04LThoMlY3aC0ydjJ6bTAgNGgydi0yaC0ydjJ6TTMgM3YyaDE4VjNIM3ptMTYgMTRoMnYtMmgtMnYyem0tNCA0aDJ2LTJoLTJ2MnpNMTEgOWgyVjdoLTJ2MnptOCAxMmgydi0yaC0ydjJ6bS00LThoMnYtMmgtMnYyeiIgLz48L2c+CjxnIGlkPSJib3JkZXItdmVydGljYWwiPjxwYXRoIGQ9Ik0zIDloMlY3SDN2MnptMC00aDJWM0gzdjJ6bTQgMTZoMnYtMkg3djJ6bTAtOGgydi0ySDd2MnptLTQgMGgydi0ySDN2MnptMCA4aDJ2LTJIM3Yyem0wLTRoMnYtMkgzdjJ6TTcgNWgyVjNIN3Yyem0xMiAxMmgydi0yaC0ydjJ6bS04IDRoMlYzaC0ydjE4em04IDBoMnYtMmgtMnYyem0wLThoMnYtMmgtMnYyem0wLTEwdjJoMlYzaC0yem0wIDZoMlY3aC0ydjJ6bS00LTRoMlYzaC0ydjJ6bTAgMTZoMnYtMmgtMnYyem0wLThoMnYtMmgtMnYyeiIgLz48L2c+CjxnIGlkPSJidWJibGUtY2hhcnQiPjxjaXJjbGUgY3g9IjcuMiIgY3k9IjE0LjQiIHI9IjMuMiIgLz48Y2lyY2xlIGN4PSIxNC44IiBjeT0iMTgiIHI9IjIiIC8+PGNpcmNsZSBjeD0iMTUuMiIgY3k9IjguOCIgcj0iNC44IiAvPjwvZz4KPGcgaWQ9ImRyYWctaGFuZGxlIj48cGF0aCBkPSJNMjAgOUg0djJoMTZWOXpNNCAxNWgxNnYtMkg0djJ6IiAvPjwvZz4KPGcgaWQ9ImZvcm1hdC1hbGlnbi1jZW50ZXIiPjxwYXRoIGQ9Ik03IDE1djJoMTB2LTJIN3ptLTQgNmgxOHYtMkgzdjJ6bTAtOGgxOHYtMkgzdjJ6bTQtNnYyaDEwVjdIN3pNMyAzdjJoMThWM0gzeiIgLz48L2c+CjxnIGlkPSJmb3JtYXQtYWxpZ24tanVzdGlmeSI+PHBhdGggZD0iTTMgMjFoMTh2LTJIM3Yyem0wLTRoMTh2LTJIM3Yyem0wLTRoMTh2LTJIM3Yyem0wLTRoMThWN0gzdjJ6bTAtNnYyaDE4VjNIM3oiIC8+PC9nPgo8ZyBpZD0iZm9ybWF0LWFsaWduLWxlZnQiPjxwYXRoIGQ9Ik0xNSAxNUgzdjJoMTJ2LTJ6bTAtOEgzdjJoMTJWN3pNMyAxM2gxOHYtMkgzdjJ6bTAgOGgxOHYtMkgzdjJ6TTMgM3YyaDE4VjNIM3oiIC8+PC9nPgo8ZyBpZD0iZm9ybWF0LWFsaWduLXJpZ2h0Ij48cGF0aCBkPSJNMyAyMWgxOHYtMkgzdjJ6bTYtNGgxMnYtMkg5djJ6bS02LTRoMTh2LTJIM3Yyem02LTRoMTJWN0g5djJ6TTMgM3YyaDE4VjNIM3oiIC8+PC9nPgo8ZyBpZD0iZm9ybWF0LWJvbGQiPjxwYXRoIGQ9Ik0xNS42IDEwLjc5Yy45Ny0uNjcgMS42NS0xLjc3IDEuNjUtMi43OSAwLTIuMjYtMS43NS00LTQtNEg3djE0aDcuMDRjMi4wOSAwIDMuNzEtMS43IDMuNzEtMy43OSAwLTEuNTItLjg2LTIuODItMi4xNS0zLjQyek0xMCA2LjVoM2MuODMgMCAxLjUuNjcgMS41IDEuNXMtLjY3IDEuNS0xLjUgMS41aC0zdi0zem0zLjUgOUgxMHYtM2gzLjVjLjgzIDAgMS41LjY3IDEuNSAxLjVzLS42NyAxLjUtMS41IDEuNXoiIC8+PC9nPgo8ZyBpZD0iZm9ybWF0LWNsZWFyIj48cGF0aCBkPSJNMy4yNyA1TDIgNi4yN2w2Ljk3IDYuOTdMNi41IDE5aDNsMS41Ny0zLjY2TDE2LjczIDIxIDE4IDE5LjczIDMuNTUgNS4yNyAzLjI3IDV6TTYgNXYuMThMOC44MiA4aDIuNGwtLjcyIDEuNjggMi4xIDIuMUwxNC4yMSA4SDIwVjVINnoiIC8+PC9nPgo8ZyBpZD0iZm9ybWF0LWNvbG9yLWZpbGwiPjxwYXRoIGQ9Ik0xNi41NiA4Ljk0TDcuNjIgMCA2LjIxIDEuNDFsMi4zOCAyLjM4LTUuMTUgNS4xNWMtLjU5LjU5LS41OSAxLjU0IDAgMi4xMmw1LjUgNS41Yy4yOS4yOS42OC40NCAxLjA2LjQ0cy43Ny0uMTUgMS4wNi0uNDRsNS41LTUuNWMuNTktLjU4LjU5LTEuNTMgMC0yLjEyek01LjIxIDEwTDEwIDUuMjEgMTQuNzkgMTBINS4yMXpNMTkgMTEuNXMtMiAyLjE3LTIgMy41YzAgMS4xLjkgMiAyIDJzMi0uOSAyLTJjMC0xLjMzLTItMy41LTItMy41eiIgLz48cGF0aCBmaWxsLW9wYWNpdHk9Ii4zNiIgZD0iTTAgMjBoMjR2NEgweiIgLz48L2c+CjxnIGlkPSJmb3JtYXQtY29sb3ItcmVzZXQiPjxwYXRoIGQ9Ik0xOCAxNGMwLTQtNi0xMC44LTYtMTAuOHMtMS4zMyAxLjUxLTIuNzMgMy41Mmw4LjU5IDguNTljLjA5LS40Mi4xNC0uODYuMTQtMS4zMXptLS44OCAzLjEyTDEyLjUgMTIuNSA1LjI3IDUuMjcgNCA2LjU1bDMuMzIgMy4zMkM2LjU1IDExLjMyIDYgMTIuNzkgNiAxNGMwIDMuMzEgMi42OSA2IDYgNiAxLjUyIDAgMi45LS41NyAzLjk2LTEuNWwyLjYzIDIuNjMgMS4yNy0xLjI3LTIuNzQtMi43NHoiIC8+PC9nPgo8ZyBpZD0iZm9ybWF0LWNvbG9yLXRleHQiPjxwYXRoIGZpbGwtb3BhY2l0eT0iLjM2IiBkPSJNMCAyMGgyNHY0SDB6IiAvPjxwYXRoIGQ9Ik0xMSAzTDUuNSAxN2gyLjI1bDEuMTItM2g2LjI1bDEuMTIgM2gyLjI1TDEzIDNoLTJ6bS0xLjM4IDlMMTIgNS42NyAxNC4zOCAxMkg5LjYyeiIgLz48L2c+CjxnIGlkPSJmb3JtYXQtaW5kZW50LWRlY3JlYXNlIj48cGF0aCBkPSJNMTEgMTdoMTB2LTJIMTF2MnptLTgtNWw0IDRWOGwtNCA0em0wIDloMTh2LTJIM3Yyek0zIDN2MmgxOFYzSDN6bTggNmgxMFY3SDExdjJ6bTAgNGgxMHYtMkgxMXYyeiIgLz48L2c+CjxnIGlkPSJmb3JtYXQtaW5kZW50LWluY3JlYXNlIj48cGF0aCBkPSJNMyAyMWgxOHYtMkgzdjJ6TTMgOHY4bDQtNC00LTR6bTggOWgxMHYtMkgxMXYyek0zIDN2MmgxOFYzSDN6bTggNmgxMFY3SDExdjJ6bTAgNGgxMHYtMkgxMXYyeiIgLz48L2c+CjxnIGlkPSJmb3JtYXQtaXRhbGljIj48cGF0aCBkPSJNMTAgNHYzaDIuMjFsLTMuNDIgOEg2djNoOHYtM2gtMi4yMWwzLjQyLThIMThWNHoiIC8+PC9nPgo8ZyBpZD0iZm9ybWF0LWxpbmUtc3BhY2luZyI+PHBhdGggZD0iTTYgN2gyLjVMNSAzLjUgMS41IDdINHYxMEgxLjVMNSAyMC41IDguNSAxN0g2Vjd6bTQtMnYyaDEyVjVIMTB6bTAgMTRoMTJ2LTJIMTB2MnptMC02aDEydi0ySDEwdjJ6IiAvPjwvZz4KPGcgaWQ9ImZvcm1hdC1saXN0LWJ1bGxldGVkIj48cGF0aCBkPSJNNCAxMC41Yy0uODMgMC0xLjUuNjctMS41IDEuNXMuNjcgMS41IDEuNSAxLjUgMS41LS42NyAxLjUtMS41LS42Ny0xLjUtMS41LTEuNXptMC02Yy0uODMgMC0xLjUuNjctMS41IDEuNVMzLjE3IDcuNSA0IDcuNSA1LjUgNi44MyA1LjUgNiA0LjgzIDQuNSA0IDQuNXptMCAxMmMtLjgzIDAtMS41LjY4LTEuNSAxLjVzLjY4IDEuNSAxLjUgMS41IDEuNS0uNjggMS41LTEuNS0uNjctMS41LTEuNS0xLjV6TTcgMTloMTR2LTJIN3Yyem0wLTZoMTR2LTJIN3Yyem0wLTh2MmgxNFY1SDd6IiAvPjwvZz4KPGcgaWQ9ImZvcm1hdC1saXN0LW51bWJlcmVkIj48cGF0aCBkPSJNMiAxN2gydi41SDN2MWgxdi41SDJ2MWgzdi00SDJ2MXptMS05aDFWNEgydjFoMXYzem0tMSAzaDEuOEwyIDEzLjF2LjloM3YtMUgzLjJMNSAxMC45VjEwSDJ2MXptNS02djJoMTRWNUg3em0wIDE0aDE0di0ySDd2MnptMC02aDE0di0ySDd2MnoiIC8+PC9nPgo8ZyBpZD0iZm9ybWF0LXBhaW50Ij48cGF0aCBkPSJNMTggNFYzYzAtLjU1LS40NS0xLTEtMUg1Yy0uNTUgMC0xIC40NS0xIDF2NGMwIC41NS40NSAxIDEgMWgxMmMuNTUgMCAxLS40NSAxLTFWNmgxdjRIOXYxMWMwIC41NS40NSAxIDEgMWgyYy41NSAwIDEtLjQ1IDEtMXYtOWg4VjRoLTN6IiAvPjwvZz4KPGcgaWQ9ImZvcm1hdC1xdW90ZSI+PHBhdGggZD0iTTYgMTdoM2wyLTRWN0g1djZoM3ptOCAwaDNsMi00VjdoLTZ2NmgzeiIgLz48L2c+CjxnIGlkPSJmb3JtYXQtc2hhcGVzIj48cGF0aCBkPSJNMjMgN1YxaC02djJIN1YxSDF2NmgydjEwSDF2Nmg2di0yaDEwdjJoNnYtNmgtMlY3aDJ6TTMgM2gydjJIM1Yzem0yIDE4SDN2LTJoMnYyem0xMi0ySDd2LTJINVY3aDJWNWgxMHYyaDJ2MTBoLTJ2MnptNCAyaC0ydi0yaDJ2MnpNMTkgNVYzaDJ2MmgtMnptLTUuMjcgOWgtMy40OWwtLjczIDJINy44OWwzLjQtOWgxLjRsMy40MSA5aC0xLjYzbC0uNzQtMnptLTMuMDQtMS4yNmgyLjYxTDEyIDguOTFsLTEuMzEgMy44M3oiIC8+PC9nPgo8ZyBpZD0iZm9ybWF0LXNpemUiPjxwYXRoIGQ9Ik05IDR2M2g1djEyaDNWN2g1VjRIOXptLTYgOGgzdjdoM3YtN2gzVjlIM3YzeiIgLz48L2c+CjxnIGlkPSJmb3JtYXQtc3RyaWtldGhyb3VnaCI+PHBhdGggZD0iTTEwIDE5aDR2LTNoLTR2M3pNNSA0djNoNXYzaDRWN2g1VjRINXpNMyAxNGgxOHYtMkgzdjJ6IiAvPjwvZz4KPGcgaWQ9ImZvcm1hdC10ZXh0ZGlyZWN0aW9uLWwtdG8tciI+PHBhdGggZD0iTTkgMTB2NWgyVjRoMnYxMWgyVjRoMlYySDlDNi43OSAyIDUgMy43OSA1IDZzMS43OSA0IDQgNHptMTIgOGwtNC00djNINXYyaDEydjNsNC00eiIgLz48L2c+CjxnIGlkPSJmb3JtYXQtdGV4dGRpcmVjdGlvbi1yLXRvLWwiPjxwYXRoIGQ9Ik0xMCAxMHY1aDJWNGgydjExaDJWNGgyVjJoLThDNy43OSAyIDYgMy43OSA2IDZzMS43OSA0IDQgNHptLTIgN3YtM2wtNCA0IDQgNHYtM2gxMnYtMkg4eiIgLz48L2c+CjxnIGlkPSJmb3JtYXQtdW5kZXJsaW5lZCI+PHBhdGggZD0iTTEyIDE3YzMuMzEgMCA2LTIuNjkgNi02VjNoLTIuNXY4YzAgMS45My0xLjU3IDMuNS0zLjUgMy41UzguNSAxMi45MyA4LjUgMTFWM0g2djhjMCAzLjMxIDIuNjkgNiA2IDZ6bS03IDJ2MmgxNHYtMkg1eiIgLz48L2c+CjxnIGlkPSJmdW5jdGlvbnMiPjxwYXRoIGQ9Ik0xOCA0SDZ2Mmw2LjUgNkw2IDE4djJoMTJ2LTNoLTdsNS01LTUtNWg3eiIgLz48L2c+CjxnIGlkPSJoaWdobGlnaHQiPjxwYXRoIGQ9Ik02IDE0bDMgM3Y1aDZ2LTVsMy0zVjlINnptNS0xMmgydjNoLTJ6TTMuNSA1Ljg3NUw0LjkxNCA0LjQ2bDIuMTIgMi4xMjJMNS42MiA3Ljk5N3ptMTMuNDYuNzFsMi4xMjMtMi4xMiAxLjQxNCAxLjQxNEwxOC4zNzUgOHoiIC8+PC9nPgo8ZyBpZD0iaW5zZXJ0LWNoYXJ0Ij48cGF0aCBkPSJNMTkgM0g1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6TTkgMTdIN3YtN2gydjd6bTQgMGgtMlY3aDJ2MTB6bTQgMGgtMnYtNGgydjR6IiAvPjwvZz4KPGcgaWQ9Imluc2VydC1jb21tZW50Ij48cGF0aCBkPSJNMjAgMkg0Yy0xLjEgMC0yIC45LTIgMnYxMmMwIDEuMS45IDIgMiAyaDE0bDQgNFY0YzAtMS4xLS45LTItMi0yem0tMiAxMkg2di0yaDEydjJ6bTAtM0g2VjloMTJ2MnptMC0zSDZWNmgxMnYyeiIgLz48L2c+CjxnIGlkPSJpbnNlcnQtZHJpdmUtZmlsZSI+PHBhdGggZD0iTTYgMmMtMS4xIDAtMS45OS45LTEuOTkgMkw0IDIwYzAgMS4xLjg5IDIgMS45OSAySDE4YzEuMSAwIDItLjkgMi0yVjhsLTYtNkg2em03IDdWMy41TDE4LjUgOUgxM3oiIC8+PC9nPgo8ZyBpZD0iaW5zZXJ0LWVtb3RpY29uIj48cGF0aCBkPSJNMTEuOTkgMkM2LjQ3IDIgMiA2LjQ4IDIgMTJzNC40NyAxMCA5Ljk5IDEwQzE3LjUyIDIyIDIyIDE3LjUyIDIyIDEyUzE3LjUyIDIgMTEuOTkgMnpNMTIgMjBjLTQuNDIgMC04LTMuNTgtOC04czMuNTgtOCA4LTggOCAzLjU4IDggOC0zLjU4IDgtOCA4em0zLjUtOWMuODMgMCAxLjUtLjY3IDEuNS0xLjVTMTYuMzMgOCAxNS41IDggMTQgOC42NyAxNCA5LjVzLjY3IDEuNSAxLjUgMS41em0tNyAwYy44MyAwIDEuNS0uNjcgMS41LTEuNVM5LjMzIDggOC41IDggNyA4LjY3IDcgOS41IDcuNjcgMTEgOC41IDExem0zLjUgNi41YzIuMzMgMCA0LjMxLTEuNDYgNS4xMS0zLjVINi44OWMuOCAyLjA0IDIuNzggMy41IDUuMTEgMy41eiIgLz48L2c+CjxnIGlkPSJpbnNlcnQtaW52aXRhdGlvbiI+PHBhdGggZD0iTTE3IDEyaC01djVoNXYtNXpNMTYgMXYySDhWMUg2djJINWMtMS4xMSAwLTEuOTkuOS0xLjk5IDJMMyAxOWMwIDEuMS44OSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yaC0xVjFoLTJ6bTMgMThINVY4aDE0djExeiIgLz48L2c+CjxnIGlkPSJpbnNlcnQtbGluayI+PHBhdGggZD0iTTMuOSAxMmMwLTEuNzEgMS4zOS0zLjEgMy4xLTMuMWg0VjdIN2MtMi43NiAwLTUgMi4yNC01IDVzMi4yNCA1IDUgNWg0di0xLjlIN2MtMS43MSAwLTMuMS0xLjM5LTMuMS0zLjF6TTggMTNoOHYtMkg4djJ6bTktNmgtNHYxLjloNGMxLjcxIDAgMy4xIDEuMzkgMy4xIDMuMXMtMS4zOSAzLjEtMy4xIDMuMWgtNFYxN2g0YzIuNzYgMCA1LTIuMjQgNS01cy0yLjI0LTUtNS01eiIgLz48L2c+CjxnIGlkPSJpbnNlcnQtcGhvdG8iPjxwYXRoIGQ9Ik0yMSAxOVY1YzAtMS4xLS45LTItMi0ySDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJ6TTguNSAxMy41bDIuNSAzLjAxTDE0LjUgMTJsNC41IDZINWwzLjUtNC41eiIgLz48L2c+CjxnIGlkPSJsaW5lYXItc2NhbGUiPjxwYXRoIGQ9Ik0xOS41IDkuNWMtMS4wMyAwLTEuOS42Mi0yLjI5IDEuNWgtMi45MmMtLjM5LS44OC0xLjI2LTEuNS0yLjI5LTEuNXMtMS45LjYyLTIuMjkgMS41SDYuNzljLS4zOS0uODgtMS4yNi0xLjUtMi4yOS0xLjVDMy4xMiA5LjUgMiAxMC42MiAyIDEyczEuMTIgMi41IDIuNSAyLjVjMS4wMyAwIDEuOS0uNjIgMi4yOS0xLjVoMi45MmMuMzkuODggMS4yNiAxLjUgMi4yOSAxLjVzMS45LS42MiAyLjI5LTEuNWgyLjkyYy4zOS44OCAxLjI2IDEuNSAyLjI5IDEuNSAxLjM4IDAgMi41LTEuMTIgMi41LTIuNXMtMS4xMi0yLjUtMi41LTIuNXoiIC8+PC9nPgo8ZyBpZD0ibWVyZ2UtdHlwZSI+PHBhdGggZD0iTTE3IDIwLjQxTDE4LjQxIDE5IDE1IDE1LjU5IDEzLjU5IDE3IDE3IDIwLjQxek03LjUgOEgxMXY1LjU5TDUuNTkgMTkgNyAyMC40MWw2LTZWOGgzLjVMMTIgMy41IDcuNSA4eiIgLz48L2c+CjxnIGlkPSJtb2RlLWNvbW1lbnQiPjxwYXRoIGQ9Ik0yMS45OSA0YzAtMS4xLS44OS0yLTEuOTktMkg0Yy0xLjEgMC0yIC45LTIgMnYxMmMwIDEuMS45IDIgMiAyaDE0bDQgNC0uMDEtMTh6IiAvPjwvZz4KPGcgaWQ9Im1vZGUtZWRpdCI+PHBhdGggZD0iTTMgMTcuMjVWMjFoMy43NUwxNy44MSA5Ljk0bC0zLjc1LTMuNzVMMyAxNy4yNXpNMjAuNzEgNy4wNGMuMzktLjM5LjM5LTEuMDIgMC0xLjQxbC0yLjM0LTIuMzRjLS4zOS0uMzktMS4wMi0uMzktMS40MSAwbC0xLjgzIDEuODMgMy43NSAzLjc1IDEuODMtMS44M3oiIC8+PC9nPgo8ZyBpZD0ibW9uZXRpemF0aW9uLW9uIj48cGF0aCBkPSJNMTIgMkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptMS40MSAxNi4wOVYyMGgtMi42N3YtMS45M2MtMS43MS0uMzYtMy4xNi0xLjQ2LTMuMjctMy40aDEuOTZjLjEgMS4wNS44MiAxLjg3IDIuNjUgMS44NyAxLjk2IDAgMi40LS45OCAyLjQtMS41OSAwLS44My0uNDQtMS42MS0yLjY3LTIuMTQtMi40OC0uNi00LjE4LTEuNjItNC4xOC0zLjY3IDAtMS43MiAxLjM5LTIuODQgMy4xMS0zLjIxVjRoMi42N3YxLjk1YzEuODYuNDUgMi43OSAxLjg2IDIuODUgMy4zOUgxNC4zYy0uMDUtMS4xMS0uNjQtMS44Ny0yLjIyLTEuODctMS41IDAtMi40LjY4LTIuNCAxLjY0IDAgLjg0LjY1IDEuMzkgMi42NyAxLjkxczQuMTggMS4zOSA0LjE4IDMuOTFjLS4wMSAxLjgzLTEuMzggMi44My0zLjEyIDMuMTZ6IiAvPjwvZz4KPGcgaWQ9Im1vbmV5LW9mZiI+PHBhdGggZD0iTTEyLjUgNi45YzEuNzggMCAyLjQ0Ljg1IDIuNSAyLjFoMi4yMWMtLjA3LTEuNzItMS4xMi0zLjMtMy4yMS0zLjgxVjNoLTN2Mi4xNmMtLjUzLjEyLTEuMDMuMy0xLjQ4LjU0bDEuNDcgMS40N2MuNDEtLjE3LjkxLS4yNyAxLjUxLS4yN3pNNS4zMyA0LjA2TDQuMDYgNS4zMyA3LjUgOC43N2MwIDIuMDggMS41NiAzLjIxIDMuOTEgMy45MWwzLjUxIDMuNTFjLS4zNC40OC0xLjA1LjkxLTIuNDIuOTEtMi4wNiAwLTIuODctLjkyLTIuOTgtMi4xaC0yLjJjLjEyIDIuMTkgMS43NiAzLjQyIDMuNjggMy44M1YyMWgzdi0yLjE1Yy45Ni0uMTggMS44Mi0uNTUgMi40NS0xLjEybDIuMjIgMi4yMiAxLjI3LTEuMjdMNS4zMyA0LjA2eiIgLz48L2c+CjxnIGlkPSJtdWx0aWxpbmUtY2hhcnQiPjxwYXRoIGQ9Ik0yMiA2LjkybC0xLjQxLTEuNDEtMi44NSAzLjIxQzE1LjY4IDYuNCAxMi44MyA1IDkuNjEgNSA2LjcyIDUgNC4wNyA2LjE2IDIgOGwxLjQyIDEuNDJDNS4xMiA3LjkzIDcuMjcgNyA5LjYxIDdjMi43NCAwIDUuMDkgMS4yNiA2Ljc3IDMuMjRsLTIuODggMy4yNC00LTRMMiAxNi45OWwxLjUgMS41IDYtNi4wMSA0IDQgNC4wNS00LjU1Yy43NSAxLjM1IDEuMjUgMi45IDEuNDQgNC41NUgyMWMtLjIyLTIuMy0uOTUtNC4zOS0yLjA0LTYuMTRMMjIgNi45MnoiIC8+PC9nPgo8ZyBpZD0icGllLWNoYXJ0Ij48cGF0aCBkPSJNMTEgMnYyMGMtNS4wNy0uNS05LTQuNzktOS0xMHMzLjkzLTkuNSA5LTEwem0yLjAzIDB2OC45OUgyMmMtLjQ3LTQuNzQtNC4yNC04LjUyLTguOTctOC45OXptMCAxMS4wMVYyMmM0Ljc0LS40NyA4LjUtNC4yNSA4Ljk3LTguOTloLTguOTd6IiAvPjwvZz4KPGcgaWQ9InBpZS1jaGFydC1vdXRsaW5lZCI+PHBhdGggZD0iTTEyIDJDNi41IDIgMiA2LjUgMiAxMnM0LjUgMTAgMTAgMTAgMTAtNC41IDEwLTEwUzE3LjUgMiAxMiAyem0xIDIuMDdjMy42MS40NSA2LjQ4IDMuMzMgNi45MyA2LjkzSDEzVjQuMDd6TTQgMTJjMC00LjA2IDMuMDctNy40NCA3LTcuOTN2MTUuODdjLTMuOTMtLjUtNy0zLjg4LTctNy45NHptOSA3LjkzVjEzaDYuOTNjLS40NSAzLjYxLTMuMzIgNi40OC02LjkzIDYuOTN6IiAvPjwvZz4KPGcgaWQ9InB1Ymxpc2giPjxwYXRoIGQ9Ik01IDR2MmgxNFY0SDV6bTAgMTBoNHY2aDZ2LTZoNGwtNy03LTcgN3oiIC8+PC9nPgo8ZyBpZD0ic2hvcnQtdGV4dCI+PHBhdGggZD0iTTQgOWgxNnYySDR6bTAgNGgxMHYySDR6IiAvPjwvZz4KPGcgaWQ9InNob3ctY2hhcnQiPjxwYXRoIGQ9Ik0zLjUgMTguNDlsNi02LjAxIDQgNEwyMiA2LjkybC0xLjQxLTEuNDEtNy4wOSA3Ljk3LTQtNEwyIDE2Ljk5eiIgLz48L2c+CjxnIGlkPSJzcGFjZS1iYXIiPjxwYXRoIGQ9Ik0xOCA5djRINlY5SDR2NmgxNlY5eiIgLz48L2c+CjxnIGlkPSJzdHJpa2V0aHJvdWdoLXMiPjxwYXRoIGQ9Ik03LjI0IDguNzVjLS4yNi0uNDgtLjM5LTEuMDMtLjM5LTEuNjcgMC0uNjEuMTMtMS4xNi40LTEuNjcuMjYtLjUuNjMtLjkzIDEuMTEtMS4yOS40OC0uMzUgMS4wNS0uNjMgMS43LS44My42Ni0uMTkgMS4zOS0uMjkgMi4xOC0uMjkuODEgMCAxLjU0LjExIDIuMjEuMzQuNjYuMjIgMS4yMy41NCAxLjY5Ljk0LjQ3LjQuODMuODggMS4wOCAxLjQzLjI1LjU1LjM4IDEuMTUuMzggMS44MWgtMy4wMWMwLS4zMS0uMDUtLjU5LS4xNS0uODUtLjA5LS4yNy0uMjQtLjQ5LS40NC0uNjgtLjItLjE5LS40NS0uMzMtLjc1LS40NC0uMy0uMS0uNjYtLjE2LTEuMDYtLjE2LS4zOSAwLS43NC4wNC0xLjAzLjEzLS4yOS4wOS0uNTMuMjEtLjcyLjM2LS4xOS4xNi0uMzQuMzQtLjQ0LjU1LS4xLjIxLS4xNS40My0uMTUuNjYgMCAuNDguMjUuODguNzQgMS4yMS4zOC4yNS43Ny40OCAxLjQxLjdINy4zOWMtLjA1LS4wOC0uMTEtLjE3LS4xNS0uMjV6TTIxIDEydi0ySDN2Mmg5LjYyYy4xOC4wNy40LjE0LjU1LjIuMzcuMTcuNjYuMzQuODcuNTEuMjEuMTcuMzUuMzYuNDMuNTcuMDcuMi4xMS40My4xMS42OSAwIC4yMy0uMDUuNDUtLjE0LjY2LS4wOS4yLS4yMy4zOC0uNDIuNTMtLjE5LjE1LS40Mi4yNi0uNzEuMzUtLjI5LjA4LS42My4xMy0xLjAxLjEzLS40MyAwLS44My0uMDQtMS4xOC0uMTNzLS42Ni0uMjMtLjkxLS40MmMtLjI1LS4xOS0uNDUtLjQ0LS41OS0uNzUtLjE0LS4zMS0uMjUtLjc2LS4yNS0xLjIxSDYuNGMwIC41NS4wOCAxLjEzLjI0IDEuNTguMTYuNDUuMzcuODUuNjUgMS4yMS4yOC4zNS42LjY2Ljk4LjkyLjM3LjI2Ljc4LjQ4IDEuMjIuNjUuNDQuMTcuOS4zIDEuMzguMzkuNDguMDguOTYuMTMgMS40NC4xMy44IDAgMS41My0uMDkgMi4xOC0uMjhzMS4yMS0uNDUgMS42Ny0uNzljLjQ2LS4zNC44Mi0uNzcgMS4wNy0xLjI3cy4zOC0xLjA3LjM4LTEuNzFjMC0uNi0uMS0xLjE0LS4zMS0xLjYxLS4wNS0uMTEtLjExLS4yMy0uMTctLjMzSDIxeiIgLz48L2c+CjxnIGlkPSJ0ZXh0LWZpZWxkcyI+PHBhdGggZD0iTTIuNSA0djNoNXYxMmgzVjdoNVY0aC0xM3ptMTkgNWgtOXYzaDN2N2gzdi03aDNWOXoiIC8+PC9nPgo8ZyBpZD0idGl0bGUiPjxwYXRoIGQ9Ik01IDR2M2g1LjV2MTJoM1Y3SDE5VjR6IiAvPjwvZz4KPGcgaWQ9InZlcnRpY2FsLWFsaWduLWJvdHRvbSI+PHBhdGggZD0iTTE2IDEzaC0zVjNoLTJ2MTBIOGw0IDQgNC00ek00IDE5djJoMTZ2LTJINHoiIC8+PC9nPgo8ZyBpZD0idmVydGljYWwtYWxpZ24tY2VudGVyIj48cGF0aCBkPSJNOCAxOWgzdjRoMnYtNGgzbC00LTQtNCA0em04LTE0aC0zVjFoLTJ2NEg4bDQgNCA0LTR6TTQgMTF2MmgxNnYtMkg0eiIgLz48L2c+CjxnIGlkPSJ2ZXJ0aWNhbC1hbGlnbi10b3AiPjxwYXRoIGQ9Ik04IDExaDN2MTBoMlYxMWgzbC00LTQtNCA0ek00IDN2MmgxNlYzSDR6IiAvPjwvZz4KPGcgaWQ9IndyYXAtdGV4dCI+PHBhdGggZD0iTTQgMTloNnYtMkg0djJ6TTIwIDVINHYyaDE2VjV6bS0zIDZINHYyaDEzLjI1YzEuMSAwIDIgLjkgMiAycy0uOSAyLTIgMkgxNXYtMmwtMyAzIDMgM3YtMmgyYzIuMjEgMCA0LTEuNzkgNC00cy0xLjc5LTQtNC00eiIgLz48L2c+CjwvZGVmcz48L3N2Zz4KPC9pcm9uLWljb25zZXQtc3ZnPgoKCgo8aXJvbi1pY29uc2V0LXN2ZyBuYW1lPSJoYXJkd2FyZSIgc2l6ZT0iMjQiPgo8c3ZnPjxkZWZzPgo8ZyBpZD0iY2FzdCI+PHBhdGggZD0iTTIxIDNIM2MtMS4xIDAtMiAuOS0yIDJ2M2gyVjVoMTh2MTRoLTd2Mmg3YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6TTEgMTh2M2gzYzAtMS42Ni0xLjM0LTMtMy0zem0wLTR2MmMyLjc2IDAgNSAyLjI0IDUgNWgyYzAtMy44Ny0zLjEzLTctNy03em0wLTR2MmM0Ljk3IDAgOSA0LjAzIDkgOWgyYzAtNi4wOC00LjkzLTExLTExLTExeiIgLz48L2c+CjxnIGlkPSJjYXN0LWNvbm5lY3RlZCI+PHBhdGggZD0iTTEgMTh2M2gzYzAtMS42Ni0xLjM0LTMtMy0zem0wLTR2MmMyLjc2IDAgNSAyLjI0IDUgNWgyYzAtMy44Ny0zLjEzLTctNy03em0xOC03SDV2MS42M2MzLjk2IDEuMjggNy4wOSA0LjQxIDguMzcgOC4zN0gxOVY3ek0xIDEwdjJjNC45NyAwIDkgNC4wMyA5IDloMmMwLTYuMDgtNC45My0xMS0xMS0xMXptMjAtN0gzYy0xLjEgMC0yIC45LTIgMnYzaDJWNWgxOHYxNGgtN3YyaDdjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnoiIC8+PC9nPgo8ZyBpZD0iY29tcHV0ZXIiPjxwYXRoIGQ9Ik0yMCAxOGMxLjEgMCAxLjk5LS45IDEuOTktMkwyMiA2YzAtMS4xLS45LTItMi0ySDRjLTEuMSAwLTIgLjktMiAydjEwYzAgMS4xLjkgMiAyIDJIMHYyaDI0di0yaC00ek00IDZoMTZ2MTBINFY2eiIgLz48L2c+CjxnIGlkPSJkZXNrdG9wLW1hYyI+PHBhdGggZD0iTTIxIDJIM2MtMS4xIDAtMiAuOS0yIDJ2MTJjMCAxLjEuOSAyIDIgMmg3bC0yIDN2MWg4di0xbC0yLTNoN2MxLjEgMCAyLS45IDItMlY0YzAtMS4xLS45LTItMi0yem0wIDEySDNWNGgxOHYxMHoiIC8+PC9nPgo8ZyBpZD0iZGVza3RvcC13aW5kb3dzIj48cGF0aCBkPSJNMjEgMkgzYy0xLjEgMC0yIC45LTIgMnYxMmMwIDEuMS45IDIgMiAyaDd2Mkg4djJoOHYtMmgtMnYtMmg3YzEuMSAwIDItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6bTAgMTRIM1Y0aDE4djEyeiIgLz48L2c+CjxnIGlkPSJkZXZlbG9wZXItYm9hcmQiPjxwYXRoIGQ9Ik0yMiA5VjdoLTJWNWMwLTEuMS0uOS0yLTItMkg0Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0ydi0yaDJ2LTJoLTJ2LTJoMnYtMmgtMlY5aDJ6bS00IDEwSDRWNWgxNHYxNHpNNiAxM2g1djRINnptNi02aDR2M2gtNHpNNiA3aDV2NUg2em02IDRoNHY2aC00eiIgLz48L2c+CjxnIGlkPSJkZXZpY2UtaHViIj48cGF0aCBkPSJNMTcgMTZsLTQtNFY4LjgyQzE0LjE2IDguNCAxNSA3LjMgMTUgNmMwLTEuNjYtMS4zNC0zLTMtM1M5IDQuMzQgOSA2YzAgMS4zLjg0IDIuNCAyIDIuODJWMTJsLTQgNEgzdjVoNXYtMy4wNWw0LTQuMiA0IDQuMlYyMWg1di01aC00eiIgLz48L2c+CjxnIGlkPSJkZXZpY2VzLW90aGVyIj48cGF0aCBkPSJNMyA2aDE4VjRIM2MtMS4xIDAtMiAuOS0yIDJ2MTJjMCAxLjEuOSAyIDIgMmg0di0ySDNWNnptMTAgNkg5djEuNzhjLS42MS41NS0xIDEuMzMtMSAyLjIycy4zOSAxLjY3IDEgMi4yMlYyMGg0di0xLjc4Yy42MS0uNTUgMS0xLjM0IDEtMi4yMnMtLjM5LTEuNjctMS0yLjIyVjEyem0tMiA1LjVjLS44MyAwLTEuNS0uNjctMS41LTEuNXMuNjctMS41IDEuNS0xLjUgMS41LjY3IDEuNSAxLjUtLjY3IDEuNS0xLjUgMS41ek0yMiA4aC02Yy0uNSAwLTEgLjUtMSAxdjEwYzAgLjUuNSAxIDEgMWg2Yy41IDAgMS0uNSAxLTFWOWMwLS41LS41LTEtMS0xem0tMSAxMGgtNHYtOGg0djh6IiAvPjwvZz4KPGcgaWQ9ImRvY2siPjxwYXRoIGQ9Ik04IDIzaDh2LTJIOHYyem04LTIxLjk5TDggMWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmg4YzEuMSAwIDItLjkgMi0yVjNjMC0xLjEtLjktMS45OS0yLTEuOTl6TTE2IDE1SDhWNWg4djEweiIgLz48L2c+CjxnIGlkPSJnYW1lcGFkIj48cGF0aCBkPSJNMTUgNy41VjJIOXY1LjVsMyAzIDMtM3pNNy41IDlIMnY2aDUuNWwzLTMtMy0zek05IDE2LjVWMjJoNnYtNS41bC0zLTMtMyAzek0xNi41IDlsLTMgMyAzIDNIMjJWOWgtNS41eiIgLz48L2c+CjxnIGlkPSJoZWFkc2V0Ij48cGF0aCBkPSJNMTIgMWMtNC45NyAwLTkgNC4wMy05IDl2N2MwIDEuNjYgMS4zNCAzIDMgM2gzdi04SDV2LTJjMC0zLjg3IDMuMTMtNyA3LTdzNyAzLjEzIDcgN3YyaC00djhoM2MxLjY2IDAgMy0xLjM0IDMtM3YtN2MwLTQuOTctNC4wMy05LTktOXoiIC8+PC9nPgo8ZyBpZD0iaGVhZHNldC1taWMiPjxwYXRoIGQ9Ik0xMiAxYy00Ljk3IDAtOSA0LjAzLTkgOXY3YzAgMS42NiAxLjM0IDMgMyAzaDN2LThINXYtMmMwLTMuODcgMy4xMy03IDctN3M3IDMuMTMgNyA3djJoLTR2OGg0djFoLTd2Mmg2YzEuNjYgMCAzLTEuMzQgMy0zVjEwYzAtNC45Ny00LjAzLTktOS05eiIgLz48L2c+CjxnIGlkPSJrZXlib2FyZCI+PHBhdGggZD0iTTIwIDVINGMtMS4xIDAtMS45OS45LTEuOTkgMkwyIDE3YzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJWN2MwLTEuMS0uOS0yLTItMnptLTkgM2gydjJoLTJWOHptMCAzaDJ2MmgtMnYtMnpNOCA4aDJ2Mkg4Vjh6bTAgM2gydjJIOHYtMnptLTEgMkg1di0yaDJ2MnptMC0zSDVWOGgydjJ6bTkgN0g4di0yaDh2MnptMC00aC0ydi0yaDJ2MnptMC0zaC0yVjhoMnYyem0zIDNoLTJ2LTJoMnYyem0wLTNoLTJWOGgydjJ6IiAvPjwvZz4KPGcgaWQ9ImtleWJvYXJkLWFycm93LWRvd24iPjxwYXRoIGQ9Ik03LjQxIDcuODRMMTIgMTIuNDJsNC41OS00LjU4TDE4IDkuMjVsLTYgNi02LTZ6IiAvPjwvZz4KPGcgaWQ9ImtleWJvYXJkLWFycm93LWxlZnQiPjxwYXRoIGQ9Ik0xNS40MSAxNi4wOWwtNC41OC00LjU5IDQuNTgtNC41OUwxNCA1LjVsLTYgNiA2IDZ6IiAvPjwvZz4KPGcgaWQ9ImtleWJvYXJkLWFycm93LXJpZ2h0Ij48cGF0aCBkPSJNOC41OSAxNi4zNGw0LjU4LTQuNTktNC41OC00LjU5TDEwIDUuNzVsNiA2LTYgNnoiIC8+PC9nPgo8ZyBpZD0ia2V5Ym9hcmQtYXJyb3ctdXAiPjxwYXRoIGQ9Ik03LjQxIDE1LjQxTDEyIDEwLjgzbDQuNTkgNC41OEwxOCAxNGwtNi02LTYgNnoiIC8+PC9nPgo8ZyBpZD0ia2V5Ym9hcmQtYmFja3NwYWNlIj48cGF0aCBkPSJNMjEgMTFINi44M2wzLjU4LTMuNTlMOSA2bC02IDYgNiA2IDEuNDEtMS40MUw2LjgzIDEzSDIxeiIgLz48L2c+CjxnIGlkPSJrZXlib2FyZC1jYXBzbG9jayI+PHBhdGggZD0iTTEyIDguNDFMMTYuNTkgMTMgMTggMTEuNTlsLTYtNi02IDZMNy40MSAxMyAxMiA4LjQxek02IDE4aDEydi0ySDZ2MnoiIC8+PC9nPgo8ZyBpZD0ia2V5Ym9hcmQtaGlkZSI+PHBhdGggZD0iTTIwIDNINGMtMS4xIDAtMS45OS45LTEuOTkgMkwyIDE1YzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptLTkgM2gydjJoLTJWNnptMCAzaDJ2MmgtMlY5ek04IDZoMnYySDhWNnptMCAzaDJ2Mkg4Vjl6bS0xIDJINVY5aDJ2MnptMC0zSDVWNmgydjJ6bTkgN0g4di0yaDh2MnptMC00aC0yVjloMnYyem0wLTNoLTJWNmgydjJ6bTMgM2gtMlY5aDJ2MnptMC0zaC0yVjZoMnYyem0tNyAxNWw0LTRIOGw0IDR6IiAvPjwvZz4KPGcgaWQ9ImtleWJvYXJkLXJldHVybiI+PHBhdGggZD0iTTE5IDd2NEg1LjgzbDMuNTgtMy41OUw4IDZsLTYgNiA2IDYgMS40MS0xLjQxTDUuODMgMTNIMjFWN3oiIC8+PC9nPgo8ZyBpZD0ia2V5Ym9hcmQtdGFiIj48cGF0aCBkPSJNMTEuNTkgNy40MUwxNS4xNyAxMUgxdjJoMTQuMTdsLTMuNTkgMy41OUwxMyAxOGw2LTYtNi02LTEuNDEgMS40MXpNMjAgNnYxMmgyVjZoLTJ6IiAvPjwvZz4KPGcgaWQ9ImtleWJvYXJkLXZvaWNlIj48cGF0aCBkPSJNMTIgMTVjMS42NiAwIDIuOTktMS4zNCAyLjk5LTNMMTUgNmMwLTEuNjYtMS4zNC0zLTMtM1M5IDQuMzQgOSA2djZjMCAxLjY2IDEuMzQgMyAzIDN6bTUuMy0zYzAgMy0yLjU0IDUuMS01LjMgNS4xUzYuNyAxNSA2LjcgMTJINWMwIDMuNDIgMi43MiA2LjIzIDYgNi43MlYyMmgydi0zLjI4YzMuMjgtLjQ4IDYtMy4zIDYtNi43MmgtMS43eiIgLz48L2c+CjxnIGlkPSJsYXB0b3AiPjxwYXRoIGQ9Ik0yMCAxOGMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0ySDRjLTEuMSAwLTIgLjktMiAydjEwYzAgMS4xLjkgMiAyIDJIMHYyaDI0di0yaC00ek00IDZoMTZ2MTBINFY2eiIgLz48L2c+CjxnIGlkPSJsYXB0b3AtY2hyb21lYm9vayI+PHBhdGggZD0iTTIyIDE4VjNIMnYxNUgwdjJoMjR2LTJoLTJ6bS04IDBoLTR2LTFoNHYxem02LTNINFY1aDE2djEweiIgLz48L2c+CjxnIGlkPSJsYXB0b3AtbWFjIj48cGF0aCBkPSJNMjAgMThjMS4xIDAgMS45OS0uOSAxLjk5LTJMMjIgNWMwLTEuMS0uOS0yLTItMkg0Yy0xLjEgMC0yIC45LTIgMnYxMWMwIDEuMS45IDIgMiAySDBjMCAxLjEuOSAyIDIgMmgyMGMxLjEgMCAyLS45IDItMmgtNHpNNCA1aDE2djExSDRWNXptOCAxNGMtLjU1IDAtMS0uNDUtMS0xcy40NS0xIDEtMSAxIC40NSAxIDEtLjQ1IDEtMSAxeiIgLz48L2c+CjxnIGlkPSJsYXB0b3Atd2luZG93cyI+PHBhdGggZD0iTTIwIDE4di0xYzEuMSAwIDEuOTktLjkgMS45OS0yTDIyIDVjMC0xLjEtLjktMi0yLTJINGMtMS4xIDAtMiAuOS0yIDJ2MTBjMCAxLjEuOSAyIDIgMnYxSDB2MmgyNHYtMmgtNHpNNCA1aDE2djEwSDRWNXoiIC8+PC9nPgo8ZyBpZD0ibWVtb3J5Ij48cGF0aCBkPSJNMTUgOUg5djZoNlY5em0tMiA0aC0ydi0yaDJ2MnptOC0yVjloLTJWN2MwLTEuMS0uOS0yLTItMmgtMlYzaC0ydjJoLTJWM0g5djJIN2MtMS4xIDAtMiAuOS0yIDJ2MkgzdjJoMnYySDN2MmgydjJjMCAxLjEuOSAyIDIgMmgydjJoMnYtMmgydjJoMnYtMmgyYzEuMSAwIDItLjkgMi0ydi0yaDJ2LTJoLTJ2LTJoMnptLTQgNkg3VjdoMTB2MTB6IiAvPjwvZz4KPGcgaWQ9Im1vdXNlIj48cGF0aCBkPSJNMTMgMS4wN1Y5aDdjMC00LjA4LTMuMDUtNy40NC03LTcuOTN6TTQgMTVjMCA0LjQyIDMuNTggOCA4IDhzOC0zLjU4IDgtOHYtNEg0djR6bTctMTMuOTNDNy4wNSAxLjU2IDQgNC45MiA0IDloN1YxLjA3eiIgLz48L2c+CjxnIGlkPSJwaG9uZS1hbmRyb2lkIj48cGF0aCBkPSJNMTYgMUg4QzYuMzQgMSA1IDIuMzQgNSA0djE2YzAgMS42NiAxLjM0IDMgMyAzaDhjMS42NiAwIDMtMS4zNCAzLTNWNGMwLTEuNjYtMS4zNC0zLTMtM3ptLTIgMjBoLTR2LTFoNHYxem0zLjI1LTNINi43NVY0aDEwLjV2MTR6IiAvPjwvZz4KPGcgaWQ9InBob25lLWlwaG9uZSI+PHBhdGggZD0iTTE1LjUgMWgtOEM2LjEyIDEgNSAyLjEyIDUgMy41djE3QzUgMjEuODggNi4xMiAyMyA3LjUgMjNoOGMxLjM4IDAgMi41LTEuMTIgMi41LTIuNXYtMTdDMTggMi4xMiAxNi44OCAxIDE1LjUgMXptLTQgMjFjLS44MyAwLTEuNS0uNjctMS41LTEuNXMuNjctMS41IDEuNS0xLjUgMS41LjY3IDEuNSAxLjUtLjY3IDEuNS0xLjUgMS41em00LjUtNEg3VjRoOXYxNHoiIC8+PC9nPgo8ZyBpZD0icGhvbmVsaW5rIj48cGF0aCBkPSJNNCA2aDE4VjRINGMtMS4xIDAtMiAuOS0yIDJ2MTFIMHYzaDE0di0zSDRWNnptMTkgMmgtNmMtLjU1IDAtMSAuNDUtMSAxdjEwYzAgLjU1LjQ1IDEgMSAxaDZjLjU1IDAgMS0uNDUgMS0xVjljMC0uNTUtLjQ1LTEtMS0xem0tMSA5aC00di03aDR2N3oiIC8+PC9nPgo8ZyBpZD0icGhvbmVsaW5rLW9mZiI+PHBhdGggZD0iTTIyIDZWNEg2LjgybDIgMkgyMnpNMS45MiAxLjY1TC42NSAyLjkybDEuODIgMS44MkMyLjE4IDUuMDggMiA1LjUyIDIgNnYxMUgwdjNoMTcuNzNsMi4zNSAyLjM1IDEuMjctMS4yN0wzLjg5IDMuNjIgMS45MiAxLjY1ek00IDYuMjdMMTQuNzMgMTdINFY2LjI3ek0yMyA4aC02Yy0uNTUgMC0xIC40NS0xIDF2NC4xOGwyIDJWMTBoNHY3aC0yLjE4bDMgM0gyM2MuNTUgMCAxLS40NSAxLTFWOWMwLS41NS0uNDUtMS0xLTF6IiAvPjwvZz4KPGcgaWQ9InBvd2VyLWlucHV0Ij48cGF0aCBkPSJNMiA5djJoMTlWOUgyem0wIDZoNXYtMkgydjJ6bTcgMGg1di0ySDl2MnptNyAwaDV2LTJoLTV2MnoiIC8+PC9nPgo8ZyBpZD0icm91dGVyIj48cGF0aCBkPSJNMjAuMiA1LjlsLjgtLjhDMTkuNiAzLjcgMTcuOCAzIDE2IDNzLTMuNi43LTUgMi4xbC44LjhDMTMgNC44IDE0LjUgNC4yIDE2IDQuMnMzIC42IDQuMiAxLjd6bS0uOS44Yy0uOS0uOS0yLjEtMS40LTMuMy0xLjRzLTIuNC41LTMuMyAxLjRsLjguOGMuNy0uNyAxLjYtMSAyLjUtMSAuOSAwIDEuOC4zIDIuNSAxbC44LS44ek0xOSAxM2gtMlY5aC0ydjRINWMtMS4xIDAtMiAuOS0yIDJ2NGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0ydi00YzAtMS4xLS45LTItMi0yek04IDE4SDZ2LTJoMnYyem0zLjUgMGgtMnYtMmgydjJ6bTMuNSAwaC0ydi0yaDJ2MnoiIC8+PC9nPgo8ZyBpZD0ic2Nhbm5lciI+PHBhdGggZD0iTTE5LjggMTAuN0w0LjIgNWwtLjcgMS45TDE3LjYgMTJINWMtMS4xIDAtMiAuOS0yIDJ2NGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0ydi01LjVjMC0uOC0uNS0xLjYtMS4yLTEuOHpNNyAxN0g1di0yaDJ2MnptMTIgMEg5di0yaDEwdjJ6IiAvPjwvZz4KPGcgaWQ9InNlY3VyaXR5Ij48cGF0aCBkPSJNMTIgMUwzIDV2NmMwIDUuNTUgMy44NCAxMC43NCA5IDEyIDUuMTYtMS4yNiA5LTYuNDUgOS0xMlY1bC05LTR6bTAgMTAuOTloN2MtLjUzIDQuMTItMy4yOCA3Ljc5LTcgOC45NFYxMkg1VjYuM2w3LTMuMTF2OC44eiIgLz48L2c+CjxnIGlkPSJzaW0tY2FyZCI+PHBhdGggZD0iTTE5Ljk5IDRjMC0xLjEtLjg5LTItMS45OS0yaC04TDQgOHYxMmMwIDEuMS45IDIgMiAyaDEyLjAxYzEuMSAwIDEuOTktLjkgMS45OS0ybC0uMDEtMTZ6TTkgMTlIN3YtMmgydjJ6bTggMGgtMnYtMmgydjJ6bS04LTRIN3YtNGgydjR6bTQgNGgtMnYtNGgydjR6bTAtNmgtMnYtMmgydjJ6bTQgMmgtMnYtNGgydjR6IiAvPjwvZz4KPGcgaWQ9InNtYXJ0cGhvbmUiPjxwYXRoIGQ9Ik0xNyAxLjAxTDcgMWMtMS4xIDAtMiAuOS0yIDJ2MThjMCAxLjEuOSAyIDIgMmgxMGMxLjEgMCAyLS45IDItMlYzYzAtMS4xLS45LTEuOTktMi0xLjk5ek0xNyAxOUg3VjVoMTB2MTR6IiAvPjwvZz4KPGcgaWQ9InNwZWFrZXIiPjxwYXRoIGQ9Ik0xNyAySDdjLTEuMSAwLTIgLjktMiAydjE2YzAgMS4xLjkgMS45OSAyIDEuOTlMMTcgMjJjMS4xIDAgMi0uOSAyLTJWNGMwLTEuMS0uOS0yLTItMnptLTUgMmMxLjEgMCAyIC45IDIgMnMtLjkgMi0yIDJjLTEuMTEgMC0yLS45LTItMnMuODktMiAyLTJ6bTAgMTZjLTIuNzYgMC01LTIuMjQtNS01czIuMjQtNSA1LTUgNSAyLjI0IDUgNS0yLjI0IDUtNSA1em0wLThjLTEuNjYgMC0zIDEuMzQtMyAzczEuMzQgMyAzIDMgMy0xLjM0IDMtMy0xLjM0LTMtMy0zeiIgLz48L2c+CjxnIGlkPSJzcGVha2VyLWdyb3VwIj48cGF0aCBkPSJNMTguMiAxSDkuOEM4LjgxIDEgOCAxLjgxIDggMi44djE0LjRjMCAuOTkuODEgMS43OSAxLjggMS43OWw4LjQuMDFjLjk5IDAgMS44LS44MSAxLjgtMS44VjIuOGMwLS45OS0uODEtMS44LTEuOC0xLjh6TTE0IDNjMS4xIDAgMiAuODkgMiAycy0uOSAyLTIgMi0yLS44OS0yLTIgLjktMiAyLTJ6bTAgMTMuNWMtMi4yMSAwLTQtMS43OS00LTRzMS43OS00IDQtNCA0IDEuNzkgNCA0LTEuNzkgNC00IDR6IiAvPjxjaXJjbGUgY3g9IjE0IiBjeT0iMTIuNSIgcj0iMi41IiAvPjxwYXRoIGQ9Ik02IDVINHYxNmMwIDEuMS44OSAyIDIgMmgxMHYtMkg2VjV6IiAvPjwvZz4KPGcgaWQ9InRhYmxldCI+PHBhdGggZD0iTTIxIDRIM2MtMS4xIDAtMiAuOS0yIDJ2MTJjMCAxLjEuOSAyIDIgMmgxOGMxLjEgMCAxLjk5LS45IDEuOTktMkwyMyA2YzAtMS4xLS45LTItMi0yem0tMiAxNEg1VjZoMTR2MTJ6IiAvPjwvZz4KPGcgaWQ9InRhYmxldC1hbmRyb2lkIj48cGF0aCBkPSJNMTggMEg2QzQuMzQgMCAzIDEuMzQgMyAzdjE4YzAgMS42NiAxLjM0IDMgMyAzaDEyYzEuNjYgMCAzLTEuMzQgMy0zVjNjMC0xLjY2LTEuMzQtMy0zLTN6bS00IDIyaC00di0xaDR2MXptNS4yNS0zSDQuNzVWM2gxNC41djE2eiIgLz48L2c+CjxnIGlkPSJ0YWJsZXQtbWFjIj48cGF0aCBkPSJNMTguNSAwaC0xNEMzLjEyIDAgMiAxLjEyIDIgMi41djE5QzIgMjIuODggMy4xMiAyNCA0LjUgMjRoMTRjMS4zOCAwIDIuNS0xLjEyIDIuNS0yLjV2LTE5QzIxIDEuMTIgMTkuODggMCAxOC41IDB6bS03IDIzYy0uODMgMC0xLjUtLjY3LTEuNS0xLjVzLjY3LTEuNSAxLjUtMS41IDEuNS42NyAxLjUgMS41LS42NyAxLjUtMS41IDEuNXptNy41LTRINFYzaDE1djE2eiIgLz48L2c+CjxnIGlkPSJ0b3lzIj48cGF0aCBkPSJNMTIgMTJjMC0zIDIuNS01LjUgNS41LTUuNVMyMyA5IDIzIDEySDEyem0wIDBjMCAzLTIuNSA1LjUtNS41IDUuNVMxIDE1IDEgMTJoMTF6bTAgMGMtMyAwLTUuNS0yLjUtNS41LTUuNVM5IDEgMTIgMXYxMXptMCAwYzMgMCA1LjUgMi41IDUuNSA1LjVTMTUgMjMgMTIgMjNWMTJ6IiAvPjwvZz4KPGcgaWQ9InR2Ij48cGF0aCBkPSJNMjEgM0gzYy0xLjEgMC0yIC45LTIgMnYxMmMwIDEuMS45IDIgMiAyaDV2Mmg4di0yaDVjMS4xIDAgMS45OS0uOSAxLjk5LTJMMjMgNWMwLTEuMS0uOS0yLTItMnptMCAxNEgzVjVoMTh2MTJ6IiAvPjwvZz4KPGcgaWQ9InZpZGVvZ2FtZS1hc3NldCI+PHBhdGggZD0iTTIxIDZIM2MtMS4xIDAtMiAuOS0yIDJ2OGMwIDEuMS45IDIgMiAyaDE4YzEuMSAwIDItLjkgMi0yVjhjMC0xLjEtLjktMi0yLTJ6bS0xMCA3SDh2M0g2di0zSDN2LTJoM1Y4aDJ2M2gzdjJ6bTQuNSAyYy0uODMgMC0xLjUtLjY3LTEuNS0xLjVzLjY3LTEuNSAxLjUtMS41IDEuNS42NyAxLjUgMS41LS42NyAxLjUtMS41IDEuNXptNC0zYy0uODMgMC0xLjUtLjY3LTEuNS0xLjVTMTguNjcgOSAxOS41IDlzMS41LjY3IDEuNSAxLjUtLjY3IDEuNS0xLjUgMS41eiIgLz48L2c+CjxnIGlkPSJ3YXRjaCI+PHBhdGggZD0iTTIwIDEyYzAtMi41NC0xLjE5LTQuODEtMy4wNC02LjI3TDE2IDBIOGwtLjk1IDUuNzNDNS4xOSA3LjE5IDQgOS40NSA0IDEyczEuMTkgNC44MSAzLjA1IDYuMjdMOCAyNGg4bC45Ni01LjczQzE4LjgxIDE2LjgxIDIwIDE0LjU0IDIwIDEyek02IDEyYzAtMy4zMSAyLjY5LTYgNi02czYgMi42OSA2IDYtMi42OSA2LTYgNi02LTIuNjktNi02eiIgLz48L2c+CjwvZGVmcz48L3N2Zz4KPC9pcm9uLWljb25zZXQtc3ZnPgoKCgoKCgoKCjxkb20tbW9kdWxlIGlkPSJpcm9uLXBhZ2VzIj4KCiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH0KCiAgICAgIDpob3N0ID4gOjpzbG90dGVkKDpub3Qoc2xvdCk6bm90KC5pcm9uLXNlbGVjdGVkKSkgewogICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8c2xvdD48L3Nsb3Q+CiAgPC90ZW1wbGF0ZT4KCiAgPHNjcmlwdD4vL35+V0VCUEFUSH5+L2lyb24tcGFnZXMvaXJvbi1wYWdlcy5odG1sLmpzClBvbHltZXIoe2lzOiJpcm9uLXBhZ2VzIixiZWhhdmlvcnM6W1BvbHltZXIuSXJvblJlc2l6YWJsZUJlaGF2aW9yLFBvbHltZXIuSXJvblNlbGVjdGFibGVCZWhhdmlvcl0scHJvcGVydGllczp7YWN0aXZhdGVFdmVudDp7dHlwZTpTdHJpbmcsdmFsdWU6bnVsbH19LG9ic2VydmVyczpbIl9zZWxlY3RlZFBhZ2VDaGFuZ2VkKHNlbGVjdGVkKSJdLF9zZWxlY3RlZFBhZ2VDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5hc3luYyh0aGlzLm5vdGlmeVJlc2l6ZSl9fSk7Cjwvc2NyaXB0Pgo8L2RvbS1tb2R1bGU+CgoKCgoKCgoKCgoKCgoKCgoKCgoKCjxkb20tbW9kdWxlIGlkPSJwYXBlci10YWIiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIEBhcHBseSAtLWxheW91dC1pbmxpbmU7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWNlbnRlcjsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtY2VudGVyLWp1c3RpZmllZDsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtZmxleC1hdXRvOwoKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgcGFkZGluZzogMCAxMnB4OwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLWJhc2U7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItdGFiOwogICAgICB9CgogICAgICA6aG9zdCg6Zm9jdXMpIHsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICB9CgogICAgICA6aG9zdChbbGlua10pIHsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICB9CgogICAgICAudGFiLWNvbnRlbnQgewogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVooMCk7CiAgICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWigwKTsKICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMXMgY3ViaWMtYmV6aWVyKDAuNCwgMC4wLCAxLCAxKTsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtaG9yaXpvbnRhbDsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtY2VudGVyLWNlbnRlcjsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtZmxleC1hdXRvOwogICAgICAgIEBhcHBseSAtLXBhcGVyLXRhYi1jb250ZW50OwogICAgICB9CgogICAgICA6aG9zdCg6bm90KC5pcm9uLXNlbGVjdGVkKSkgPiAudGFiLWNvbnRlbnQgewogICAgICAgIG9wYWNpdHk6IDAuODsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItdGFiLWNvbnRlbnQtdW5zZWxlY3RlZDsKICAgICAgfQoKICAgICAgOmhvc3QoOmZvY3VzKSAudGFiLWNvbnRlbnQgewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgICAgfQoKICAgICAgcGFwZXItcmlwcGxlIHsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItdGFiLWluaywgdmFyKC0tcGFwZXIteWVsbG93LWExMDApKTsKICAgICAgfQoKICAgICAgLnRhYi1jb250ZW50ID4gOjpzbG90dGVkKGEpIHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtZmxleC1hdXRvOwoKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPGRpdiBjbGFzcz0idGFiLWNvbnRlbnQiPgogICAgICA8c2xvdD48L3Nsb3Q+CiAgICA8L2Rpdj4KICA8L3RlbXBsYXRlPgoKICA8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vcGFwZXItdGFicy9wYXBlci10YWIuaHRtbC5qcwpQb2x5bWVyKHtpczoicGFwZXItdGFiIixiZWhhdmlvcnM6W1BvbHltZXIuSXJvbkNvbnRyb2xTdGF0ZSxQb2x5bWVyLklyb25CdXR0b25TdGF0ZSxQb2x5bWVyLlBhcGVyUmlwcGxlQmVoYXZpb3JdLHByb3BlcnRpZXM6e2xpbms6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9fSxob3N0QXR0cmlidXRlczp7cm9sZToidGFiIn0sbGlzdGVuZXJzOntkb3duOiJfdXBkYXRlTm9pbmsiLHRhcDoiX29uVGFwIn0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVOb2luaygpfSxnZXQgX3BhcmVudE5vaW5rKCl7dmFyIGE9UG9seW1lci5kb20odGhpcykucGFyZW50Tm9kZTtyZXR1cm4hIWEmJiEhYS5ub2lua30sX3VwZGF0ZU5vaW5rOmZ1bmN0aW9uKCl7dGhpcy5ub2luaz0hIXRoaXMubm9pbmt8fCEhdGhpcy5fcGFyZW50Tm9pbmt9LF9vblRhcDpmdW5jdGlvbihhKXtpZih0aGlzLmxpbmspe3ZhciBjPXRoaXMucXVlcnlFZmZlY3RpdmVDaGlsZHJlbigiYSIpOwpjJiZhLnRhcmdldCE9PWMmJmMuY2xpY2soKX19fSk7Cjwvc2NyaXB0Pgo8L2RvbS1tb2R1bGU+CgoKCgoKCgoKCgo8aXJvbi1pY29uc2V0LXN2ZyBuYW1lPSJwYXBlci10YWJzIiBzaXplPSIyNCI+Cjxzdmc+PGRlZnM+CjxnIGlkPSJjaGV2cm9uLWxlZnQiPjxwYXRoIGQ9Ik0xNS40MSA3LjQxTDE0IDZsLTYgNiA2IDYgMS40MS0xLjQxTDEwLjgzIDEyeiIgLz48L2c+CjxnIGlkPSJjaGV2cm9uLXJpZ2h0Ij48cGF0aCBkPSJNMTAgNkw4LjU5IDcuNDEgMTMuMTcgMTJsLTQuNTggNC41OUwxMCAxOGw2LTZ6IiAvPjwvZz4KPC9kZWZzPjwvc3ZnPgo8L2lyb24taWNvbnNldC1zdmc+CgoKCgoKPGRvbS1tb2R1bGUgaWQ9InBhcGVyLXRhYnMiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIEBhcHBseSAtLWxheW91dDsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtY2VudGVyOwoKICAgICAgICBoZWlnaHQ6IDQ4cHg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIC1tcy11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwoKICAgICAgICAvKiBOT1RFOiBCb3RoIHZhbHVlcyBhcmUgbmVlZGVkLCBzaW5jZSBzb21lIHBob25lcyByZXF1aXJlIHRoZSB2YWx1ZSB0byBiZSBgdHJhbnNwYXJlbnRgLiAqLwogICAgICAgIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwKTsKICAgICAgICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHRyYW5zcGFyZW50OwoKICAgICAgICBAYXBwbHkgLS1wYXBlci10YWJzOwogICAgICB9CgogICAgICA6aG9zdCg6ZGlyKHJ0bCkpIHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtaG9yaXpvbnRhbC1yZXZlcnNlOwogICAgICB9CgogICAgICAjdGFic0NvbnRhaW5lciB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWZsZXgtYXV0bzsKICAgICAgICBAYXBwbHkgLS1wYXBlci10YWJzLWNvbnRhaW5lcjsKICAgICAgfQoKICAgICAgI3RhYnNDb250ZW50IHsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgLW1vei1mbGV4LWJhc2lzOiBhdXRvOwogICAgICAgIC1tcy1mbGV4LWJhc2lzOiBhdXRvOwogICAgICAgIGZsZXgtYmFzaXM6IGF1dG87CiAgICAgICAgQGFwcGx5IC0tcGFwZXItdGFicy1jb250ZW50OwogICAgICB9CgogICAgICAjdGFic0NvbnRlbnQuc2Nyb2xsYWJsZSB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgIH0KCiAgICAgICN0YWJzQ29udGVudDpub3QoLnNjcm9sbGFibGUpLAogICAgICAjdGFic0NvbnRlbnQuc2Nyb2xsYWJsZS5maXQtY29udGFpbmVyIHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtaG9yaXpvbnRhbDsKICAgICAgfQoKICAgICAgI3RhYnNDb250ZW50LnNjcm9sbGFibGUuZml0LWNvbnRhaW5lciB7CiAgICAgICAgbWluLXdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAjdGFic0NvbnRlbnQuc2Nyb2xsYWJsZS5maXQtY29udGFpbmVyID4gOjpzbG90dGVkKCopIHsKICAgICAgICAvKiBJRSAtIHByZXZlbnQgdGFicyBmcm9tIGNvbXByZXNzaW5nIHdoZW4gdGhleSBzaG91bGQgc2Nyb2xsLiAqLwogICAgICAgIC1tcy1mbGV4OiAxIDAgYXV0bzsKICAgICAgICAtd2Via2l0LWZsZXg6IDEgMCBhdXRvOwogICAgICAgIGZsZXg6IDEgMCBhdXRvOwogICAgICB9CgogICAgICAuaGlkZGVuIHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICB9CgogICAgICAubm90LXZpc2libGUgewogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICB9CgogICAgICBwYXBlci1pY29uLWJ1dHRvbiB7CiAgICAgICAgd2lkdGg6IDQ4cHg7CiAgICAgICAgaGVpZ2h0OiA0OHB4OwogICAgICAgIHBhZGRpbmc6IDEycHg7CiAgICAgICAgbWFyZ2luOiAwIDRweDsKICAgICAgfQoKICAgICAgI3NlbGVjdGlvbkJhciB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGhlaWdodDogMDsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgICBib3JkZXItYm90dG9tOiAycHggc29saWQgdmFyKC0tcGFwZXItdGFicy1zZWxlY3Rpb24tYmFyLWNvbG9yLCB2YXIoLS1wYXBlci15ZWxsb3ctYTEwMCkpOwogICAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDApOwogICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMCk7CiAgICAgICAgICAtd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46IGxlZnQgY2VudGVyOwogICAgICAgIHRyYW5zZm9ybS1vcmlnaW46IGxlZnQgY2VudGVyOwogICAgICAgICAgdHJhbnNpdGlvbjogLXdlYmtpdC10cmFuc2Zvcm07CiAgICAgICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci10YWJzLXNlbGVjdGlvbi1iYXI7CiAgICAgIH0KCiAgICAgICNzZWxlY3Rpb25CYXIuYWxpZ24tYm90dG9tIHsKICAgICAgICB0b3A6IDA7CiAgICAgICAgYm90dG9tOiBhdXRvOwogICAgICB9CgogICAgICAjc2VsZWN0aW9uQmFyLmV4cGFuZCB7CiAgICAgICAgdHJhbnNpdGlvbi1kdXJhdGlvbjogMC4xNXM7CiAgICAgICAgdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjQsIDAuMCwgMSwgMSk7CiAgICAgIH0KCiAgICAgICNzZWxlY3Rpb25CYXIuY29udHJhY3QgewogICAgICAgIHRyYW5zaXRpb24tZHVyYXRpb246IDAuMThzOwogICAgICAgIHRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4wLCAwLjAsIDAuMiwgMSk7CiAgICAgIH0KCiAgICAgICN0YWJzQ29udGVudCA+IDo6c2xvdHRlZCg6bm90KCNzZWxlY3Rpb25CYXIpKSB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxwYXBlci1pY29uLWJ1dHRvbiBpY29uPSJwYXBlci10YWJzOmNoZXZyb24tbGVmdCIgY2xhc3MkPSJbW19jb21wdXRlU2Nyb2xsQnV0dG9uQ2xhc3MoX2xlZnRIaWRkZW4sIHNjcm9sbGFibGUsIGhpZGVTY3JvbGxCdXR0b25zKV1dIiBvbi11cD0iX29uU2Nyb2xsQnV0dG9uVXAiIG9uLWRvd249Il9vbkxlZnRTY3JvbGxCdXR0b25Eb3duIiB0YWJpbmRleD0iLTEiPjwvcGFwZXItaWNvbi1idXR0b24+CgogICAgPGRpdiBpZD0idGFic0NvbnRhaW5lciIgb24tdHJhY2s9Il9zY3JvbGwiIG9uLWRvd249Il9kb3duIj4KICAgICAgPGRpdiBpZD0idGFic0NvbnRlbnQiIGNsYXNzJD0iW1tfY29tcHV0ZVRhYnNDb250ZW50Q2xhc3Moc2Nyb2xsYWJsZSwgZml0Q29udGFpbmVyKV1dIj4KICAgICAgICA8ZGl2IGlkPSJzZWxlY3Rpb25CYXIiIGNsYXNzJD0iW1tfY29tcHV0ZVNlbGVjdGlvbkJhckNsYXNzKG5vQmFyLCBhbGlnbkJvdHRvbSldXSIgb24tdHJhbnNpdGlvbmVuZD0iX29uQmFyVHJhbnNpdGlvbkVuZCI+PC9kaXY+CiAgICAgICAgPHNsb3Q+PC9zbG90PgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgoKICAgIDxwYXBlci1pY29uLWJ1dHRvbiBpY29uPSJwYXBlci10YWJzOmNoZXZyb24tcmlnaHQiIGNsYXNzJD0iW1tfY29tcHV0ZVNjcm9sbEJ1dHRvbkNsYXNzKF9yaWdodEhpZGRlbiwgc2Nyb2xsYWJsZSwgaGlkZVNjcm9sbEJ1dHRvbnMpXV0iIG9uLXVwPSJfb25TY3JvbGxCdXR0b25VcCIgb24tZG93bj0iX29uUmlnaHRTY3JvbGxCdXR0b25Eb3duIiB0YWJpbmRleD0iLTEiPjwvcGFwZXItaWNvbi1idXR0b24+CgogIDwvdGVtcGxhdGU+CgogIDxzY3JpcHQ+Ly9+fldFQlBBVEh+fi9wYXBlci10YWJzL3BhcGVyLXRhYnMuaHRtbC5qcwpQb2x5bWVyKHtpczoicGFwZXItdGFicyIsYmVoYXZpb3JzOltQb2x5bWVyLklyb25SZXNpemFibGVCZWhhdmlvcixQb2x5bWVyLklyb25NZW51YmFyQmVoYXZpb3JdLHByb3BlcnRpZXM6e25vaW5rOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEsb2JzZXJ2ZXI6Il9ub2lua0NoYW5nZWQifSxub0Jhcjp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxub1NsaWRlOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LHNjcm9sbGFibGU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sZml0Q29udGFpbmVyOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGRpc2FibGVEcmFnOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGhpZGVTY3JvbGxCdXR0b25zOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGFsaWduQm90dG9tOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LHNlbGVjdGFibGU6e3R5cGU6U3RyaW5nLHZhbHVlOiJwYXBlci10YWIifSxhdXRvc2VsZWN0Ont0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGF1dG9zZWxlY3REZWxheTp7dHlwZTpOdW1iZXIsCnZhbHVlOjB9LF9zdGVwOnt0eXBlOk51bWJlcix2YWx1ZToxMH0sX2hvbGREZWxheTp7dHlwZTpOdW1iZXIsdmFsdWU6MX0sX2xlZnRIaWRkZW46e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sX3JpZ2h0SGlkZGVuOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LF9wcmV2aW91c1RhYjp7dHlwZTpPYmplY3R9fSxob3N0QXR0cmlidXRlczp7cm9sZToidGFibGlzdCJ9LGxpc3RlbmVyczp7Imlyb24tcmVzaXplIjoiX29uVGFiU2l6aW5nQ2hhbmdlZCIsImlyb24taXRlbXMtY2hhbmdlZCI6Il9vblRhYlNpemluZ0NoYW5nZWQiLCJpcm9uLXNlbGVjdCI6Il9vbklyb25TZWxlY3QiLCJpcm9uLWRlc2VsZWN0IjoiX29uSXJvbkRlc2VsZWN0In0sa2V5QmluZGluZ3M6eyJsZWZ0OmtleXVwIHJpZ2h0OmtleXVwIjoiX29uQXJyb3dLZXl1cCJ9LGNyZWF0ZWQ6ZnVuY3Rpb24oKXt0aGlzLl9ob2xkSm9iPW51bGw7dGhpcy5fcGVuZGluZ0FjdGl2YXRpb25UaW1lb3V0PXRoaXMuX3BlbmRpbmdBY3RpdmF0aW9uSXRlbT0Kdm9pZCAwO3RoaXMuX2JpbmREZWxheWVkQWN0aXZhdGlvbkhhbmRsZXI9dGhpcy5fZGVsYXllZEFjdGl2YXRpb25IYW5kbGVyLmJpbmQodGhpcyk7dGhpcy5hZGRFdmVudExpc3RlbmVyKCJibHVyIix0aGlzLl9vbkJsdXJDYXB0dXJlLmJpbmQodGhpcyksITApfSxyZWFkeTpmdW5jdGlvbigpe3RoaXMuc2V0U2Nyb2xsRGlyZWN0aW9uKCJ5Iix0aGlzLiQudGFic0NvbnRhaW5lcil9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fY2FuY2VsUGVuZGluZ0FjdGl2YXRpb24oKX0sX25vaW5rQ2hhbmdlZDpmdW5jdGlvbihhKXtQb2x5bWVyLmRvbSh0aGlzKS5xdWVyeVNlbGVjdG9yQWxsKCJwYXBlci10YWIiKS5mb3JFYWNoKGE/dGhpcy5fc2V0Tm9pbmtBdHRyaWJ1dGU6dGhpcy5fcmVtb3ZlTm9pbmtBdHRyaWJ1dGUpfSxfc2V0Tm9pbmtBdHRyaWJ1dGU6ZnVuY3Rpb24oYSl7YS5zZXRBdHRyaWJ1dGUoIm5vaW5rIiwiIil9LF9yZW1vdmVOb2lua0F0dHJpYnV0ZTpmdW5jdGlvbihhKXthLnJlbW92ZUF0dHJpYnV0ZSgibm9pbmsiKX0sCl9jb21wdXRlU2Nyb2xsQnV0dG9uQ2xhc3M6ZnVuY3Rpb24oYSxjLGQpe3JldHVybiFjfHxkPyJoaWRkZW4iOmE/Im5vdC12aXNpYmxlIjoiIn0sX2NvbXB1dGVUYWJzQ29udGVudENsYXNzOmZ1bmN0aW9uKGEsYyl7cmV0dXJuIGE/InNjcm9sbGFibGUiKyhjPyIgZml0LWNvbnRhaW5lciI6IiIpOiIgZml0LWNvbnRhaW5lciJ9LF9jb21wdXRlU2VsZWN0aW9uQmFyQ2xhc3M6ZnVuY3Rpb24oYSxjKXtyZXR1cm4gYT8iaGlkZGVuIjpjPyJhbGlnbi1ib3R0b20iOiIifSxfb25UYWJTaXppbmdDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5kZWJvdW5jZSgiX29uVGFiU2l6aW5nQ2hhbmdlZCIsZnVuY3Rpb24oKXt0aGlzLl9zY3JvbGwoKTt0aGlzLl90YWJDaGFuZ2VkKHRoaXMuc2VsZWN0ZWRJdGVtKX0sMTApfSxfb25Jcm9uU2VsZWN0OmZ1bmN0aW9uKGEpe3RoaXMuX3RhYkNoYW5nZWQoYS5kZXRhaWwuaXRlbSx0aGlzLl9wcmV2aW91c1RhYik7dGhpcy5fcHJldmlvdXNUYWI9YS5kZXRhaWwuaXRlbTsKdGhpcy5jYW5jZWxEZWJvdW5jZXIoInRhYi1jaGFuZ2VkIil9LF9vbklyb25EZXNlbGVjdDpmdW5jdGlvbigpe3RoaXMuZGVib3VuY2UoInRhYi1jaGFuZ2VkIixmdW5jdGlvbigpe3RoaXMuX3RhYkNoYW5nZWQobnVsbCx0aGlzLl9wcmV2aW91c1RhYik7dGhpcy5fcHJldmlvdXNUYWI9bnVsbH0sMSl9LF9hY3RpdmF0ZUhhbmRsZXI6ZnVuY3Rpb24oKXt0aGlzLl9jYW5jZWxQZW5kaW5nQWN0aXZhdGlvbigpO1BvbHltZXIuSXJvbk1lbnVCZWhhdmlvckltcGwuX2FjdGl2YXRlSGFuZGxlci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LF9zY2hlZHVsZUFjdGl2YXRpb246ZnVuY3Rpb24oYSxjKXt0aGlzLl9wZW5kaW5nQWN0aXZhdGlvbkl0ZW09YTt0aGlzLl9wZW5kaW5nQWN0aXZhdGlvblRpbWVvdXQ9dGhpcy5hc3luYyh0aGlzLl9iaW5kRGVsYXllZEFjdGl2YXRpb25IYW5kbGVyLGMpfSxfZGVsYXllZEFjdGl2YXRpb25IYW5kbGVyOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5fcGVuZGluZ0FjdGl2YXRpb25JdGVtOwp0aGlzLl9wZW5kaW5nQWN0aXZhdGlvblRpbWVvdXQ9dGhpcy5fcGVuZGluZ0FjdGl2YXRpb25JdGVtPXZvaWQgMDthLmZpcmUodGhpcy5hY3RpdmF0ZUV2ZW50LG51bGwse2J1YmJsZXM6ITAsY2FuY2VsYWJsZTohMH0pfSxfY2FuY2VsUGVuZGluZ0FjdGl2YXRpb246ZnVuY3Rpb24oKXt2b2lkIDAhPT10aGlzLl9wZW5kaW5nQWN0aXZhdGlvblRpbWVvdXQmJih0aGlzLmNhbmNlbEFzeW5jKHRoaXMuX3BlbmRpbmdBY3RpdmF0aW9uVGltZW91dCksdGhpcy5fcGVuZGluZ0FjdGl2YXRpb25UaW1lb3V0PXRoaXMuX3BlbmRpbmdBY3RpdmF0aW9uSXRlbT12b2lkIDApfSxfb25BcnJvd0tleXVwOmZ1bmN0aW9uKCl7dGhpcy5hdXRvc2VsZWN0JiZ0aGlzLl9zY2hlZHVsZUFjdGl2YXRpb24odGhpcy5mb2N1c2VkSXRlbSx0aGlzLmF1dG9zZWxlY3REZWxheSl9LF9vbkJsdXJDYXB0dXJlOmZ1bmN0aW9uKGEpe2EudGFyZ2V0PT09dGhpcy5fcGVuZGluZ0FjdGl2YXRpb25JdGVtJiZ0aGlzLl9jYW5jZWxQZW5kaW5nQWN0aXZhdGlvbigpfSwKZ2V0IF90YWJDb250YWluZXJTY3JvbGxTaXplKCl7cmV0dXJuIE1hdGgubWF4KDAsdGhpcy4kLnRhYnNDb250YWluZXIuc2Nyb2xsV2lkdGgtdGhpcy4kLnRhYnNDb250YWluZXIub2Zmc2V0V2lkdGgpfSxfc2Nyb2xsOmZ1bmN0aW9uKGEsYyl7dGhpcy5zY3JvbGxhYmxlJiZ0aGlzLl9hZmZlY3RTY3JvbGwoYyYmLWMuZGR4fHwwKX0sX2Rvd246ZnVuY3Rpb24oKXt0aGlzLmFzeW5jKGZ1bmN0aW9uKCl7dGhpcy5fZGVmYXVsdEZvY3VzQXN5bmMmJih0aGlzLmNhbmNlbEFzeW5jKHRoaXMuX2RlZmF1bHRGb2N1c0FzeW5jKSx0aGlzLl9kZWZhdWx0Rm9jdXNBc3luYz1udWxsKX0sMSl9LF9hZmZlY3RTY3JvbGw6ZnVuY3Rpb24oYSl7dGhpcy4kLnRhYnNDb250YWluZXIuc2Nyb2xsTGVmdCs9YTthPXRoaXMuJC50YWJzQ29udGFpbmVyLnNjcm9sbExlZnQ7dGhpcy5fbGVmdEhpZGRlbj0wPT09YTt0aGlzLl9yaWdodEhpZGRlbj1hPT09dGhpcy5fdGFiQ29udGFpbmVyU2Nyb2xsU2l6ZX0sCl9vbkxlZnRTY3JvbGxCdXR0b25Eb3duOmZ1bmN0aW9uKCl7dGhpcy5fc2Nyb2xsVG9MZWZ0KCk7dGhpcy5faG9sZEpvYj1zZXRJbnRlcnZhbCh0aGlzLl9zY3JvbGxUb0xlZnQuYmluZCh0aGlzKSx0aGlzLl9ob2xkRGVsYXkpfSxfb25SaWdodFNjcm9sbEJ1dHRvbkRvd246ZnVuY3Rpb24oKXt0aGlzLl9zY3JvbGxUb1JpZ2h0KCk7dGhpcy5faG9sZEpvYj1zZXRJbnRlcnZhbCh0aGlzLl9zY3JvbGxUb1JpZ2h0LmJpbmQodGhpcyksdGhpcy5faG9sZERlbGF5KX0sX29uU2Nyb2xsQnV0dG9uVXA6ZnVuY3Rpb24oKXtjbGVhckludGVydmFsKHRoaXMuX2hvbGRKb2IpO3RoaXMuX2hvbGRKb2I9bnVsbH0sX3Njcm9sbFRvTGVmdDpmdW5jdGlvbigpe3RoaXMuX2FmZmVjdFNjcm9sbCgtdGhpcy5fc3RlcCl9LF9zY3JvbGxUb1JpZ2h0OmZ1bmN0aW9uKCl7dGhpcy5fYWZmZWN0U2Nyb2xsKHRoaXMuX3N0ZXApfSxfdGFiQ2hhbmdlZDpmdW5jdGlvbihhLGMpe2lmKGEpe3ZhciBkPXRoaXMuJC50YWJzQ29udGVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSwKZj1kLndpZHRoLGc9YS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtkPWcubGVmdC1kLmxlZnQ7dGhpcy5fcG9zPXt3aWR0aDp0aGlzLl9jYWxjUGVyY2VudChnLndpZHRoLGYpLGxlZnQ6dGhpcy5fY2FsY1BlcmNlbnQoZCxmKX07aWYodGhpcy5ub1NsaWRlfHxudWxsPT1jKXRoaXMuJC5zZWxlY3Rpb25CYXIuY2xhc3NMaXN0LnJlbW92ZSgiZXhwYW5kIiksdGhpcy4kLnNlbGVjdGlvbkJhci5jbGFzc0xpc3QucmVtb3ZlKCJjb250cmFjdCIpLHRoaXMuX3Bvc2l0aW9uQmFyKHRoaXMuX3Bvcy53aWR0aCx0aGlzLl9wb3MubGVmdCk7ZWxzZXt2YXIgbD1jLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2M9dGhpcy5pdGVtcy5pbmRleE9mKGMpO2E9dGhpcy5pdGVtcy5pbmRleE9mKGEpO3RoaXMuJC5zZWxlY3Rpb25CYXIuY2xhc3NMaXN0LmFkZCgiZXhwYW5kIik7YT1jPGE7dGhpcy5faXNSVEwmJihhPSFhKTthP3RoaXMuX3Bvc2l0aW9uQmFyKHRoaXMuX2NhbGNQZXJjZW50KGcubGVmdCtnLndpZHRoLQpsLmxlZnQsZiktNSx0aGlzLl9sZWZ0KTp0aGlzLl9wb3NpdGlvbkJhcih0aGlzLl9jYWxjUGVyY2VudChsLmxlZnQrbC53aWR0aC1nLmxlZnQsZiktNSx0aGlzLl9jYWxjUGVyY2VudChkLGYpKzUpO3RoaXMuc2Nyb2xsYWJsZSYmdGhpcy5fc2Nyb2xsVG9TZWxlY3RlZElmTmVlZGVkKGcud2lkdGgsZCl9fWVsc2UgdGhpcy4kLnNlbGVjdGlvbkJhci5jbGFzc0xpc3QucmVtb3ZlKCJleHBhbmQiKSx0aGlzLiQuc2VsZWN0aW9uQmFyLmNsYXNzTGlzdC5yZW1vdmUoImNvbnRyYWN0IiksdGhpcy5fcG9zaXRpb25CYXIoMCwwKX0sX3Njcm9sbFRvU2VsZWN0ZWRJZk5lZWRlZDpmdW5jdGlvbihhLGMpe2MtPXRoaXMuJC50YWJzQ29udGFpbmVyLnNjcm9sbExlZnQ7MD5jP3RoaXMuJC50YWJzQ29udGFpbmVyLnNjcm9sbExlZnQrPWM6KGMrPWEtdGhpcy4kLnRhYnNDb250YWluZXIub2Zmc2V0V2lkdGgsMDxjJiYodGhpcy4kLnRhYnNDb250YWluZXIuc2Nyb2xsTGVmdCs9YykpfSxfY2FsY1BlcmNlbnQ6ZnVuY3Rpb24oYSwKYyl7cmV0dXJuIDEwMCphL2N9LF9wb3NpdGlvbkJhcjpmdW5jdGlvbihhLGMpe2E9YXx8MDtjPWN8fDA7dGhpcy5fd2lkdGg9YTt0aGlzLl9sZWZ0PWM7dGhpcy50cmFuc2Zvcm0oInRyYW5zbGF0ZVgoIitjKyIlKSBzY2FsZVgoIithLzEwMCsiKSIsdGhpcy4kLnNlbGVjdGlvbkJhcil9LF9vbkJhclRyYW5zaXRpb25FbmQ6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLiQuc2VsZWN0aW9uQmFyLmNsYXNzTGlzdDthLmNvbnRhaW5zKCJleHBhbmQiKT8oYS5yZW1vdmUoImV4cGFuZCIpLGEuYWRkKCJjb250cmFjdCIpLHRoaXMuX3Bvc2l0aW9uQmFyKHRoaXMuX3Bvcy53aWR0aCx0aGlzLl9wb3MubGVmdCkpOmEuY29udGFpbnMoImNvbnRyYWN0IikmJmEucmVtb3ZlKCJjb250cmFjdCIpfX0pOwo8L3NjcmlwdD4KPC9kb20tbW9kdWxlPgoKCgoKCgoKCgoKCgoKCgo8ZG9tLW1vZHVsZSBpZD0idGYtaW5mZXJlbmNlLXBhbmVsIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGUgaWQ9ImxpbnRlci1wYXBlci1idXR0b24tc3R5bGUiPgogICAgICAvKioKICAgICAgICogVGhpcyBzdHlsZSBwcmVzZXJ2ZXMgdGhlIHN0eWxpbmcgcHJldmlvdXMgdG8KICAgICAgICogaHR0cHM6Ly9naXRodWIuY29tL1BvbHltZXJFbGVtZW50cy9wYXBlci1idXR0b24vcHVsbC8xMTUKICAgICAgICogVGhpcyBjaGFuZ2UgY2FuIGJyZWFrIHRoZSBsYXlvdXQgb2YgcGFwZXItYnV0dG9uIGNvbnRlbnQuCiAgICAgICAqIFJlbW92ZSB0aGlzIHN0eWxlIHRvIGFwcGx5IHRoZSBjaGFuZ2UuCiAgICAgICAqLwogICAgICBwYXBlci1idXR0b24gewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgZm9udC1mYW1pbHk6IGluaGVyaXQ7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgIH0KICAgICAgdGYtb3B0aW9uLXNlbGVjdG9yIC5tb2RlbC10eXBlLWJ1dHRvbiB7CiAgICAgICAgd2lkdGg6IGF1dG87CiAgICAgIH0KICAgICAgLmZsZXgtaG9sZGVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICB9CiAgICAgIC50aXRsZSB7CiAgICAgICAgZm9udC1zaXplOiAzMnB4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDIwcHg7CiAgICAgIH0KICAgICAgLmhlbHAtaWNvbiB7CiAgICAgICAgd2lkdGg6IDE1cHg7CiAgICAgICAgaGVpZ2h0OiAxNXB4OwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgICAgY29sb3I6ICM3NTc1NzU7CiAgICAgIH0KICAgICAgLnRvb2x0aXAgewogICAgICAgIHdpZHRoOiA1MDBweDsKICAgICAgfQogICAgICAuaW5wdXQtaW4tcm93IHsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDEwcHg7CiAgICAgIH0KICAgICAgLmZsZXgtZ3JvdyB7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICB9CiAgICAgIC5tb2RlbC10eXBlLWxhYmVsIHsKICAgICAgICBwYWRkaW5nLXRvcDogMTBweDsKICAgICAgfQogICAgICAuYWRkLW1vZGVsLWJ1dHRvbi1ob2xkZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIH0KICAgICAgLmNoZWNrYm94IHsKICAgICAgICBtYXJnaW4tdG9wOiAzMHB4OwogICAgICAgIG1hcmdpbi1sZWZ0OiAxMHB4OwogICAgICB9CiAgICAgIC5wcmVkaWN0LWNoZWNrYm94IHsKICAgICAgICBtYXJnaW4tdG9wOiA0M3B4OwogICAgICAgIG1hcmdpbi1sZWZ0OiAxMHB4OwogICAgICB9CiAgICAgIHBhcGVyLWlucHV0IHsKICAgICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1mb2N1cy1jb2xvcjogI2Y1N2MwMDsKICAgICAgfQogICAgICBwYXBlci1yYWRpby1idXR0b24gewogICAgICAgIC0tcGFwZXItcmFkaW8tYnV0dG9uLXVuY2hlY2tlZC1jb2xvcjogIzNjNDA0MzsKICAgICAgICAtLXBhcGVyLXJhZGlvLWJ1dHRvbi11bmNoZWNrZWQtaW5rLWNvbG9yOiAjM2M0MDQzOwogICAgICAgIC0tcGFwZXItcmFkaW8tYnV0dG9uLWNoZWNrZWQtY29sb3I6ICMzYzQwNDM7CiAgICAgICAgLS1wYXBlci1yYWRpby1idXR0b24tY2hlY2tlZC1pbmstY29sb3I6ICMzYzQwNDM7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8ZGl2IGNsYXNzPSJ0aXRsZSI+U2V0IHVwIHlvdXIgZGF0YSBhbmQgbW9kZWw8L2Rpdj4KICAgIDxwYXBlci1pbnB1dCBhbHdheXMtZmxvYXQtbGFiZWwgbGFiZWw9IkluZmVyZW5jZSBhZGRyZXNzIiBwbGFjZWhvbGRlcj0iW1tpbmZlcmVuY2VBZGRyZXNzMV1dIiB2YWx1ZT0ie3tpbmZlcmVuY2VBZGRyZXNzMX19Ij4KICAgIDwvcGFwZXItaW5wdXQ+CiAgICA8ZGl2IGNsYXNzPSJmbGV4LWhvbGRlciI+CiAgICAgIDxwYXBlci1pbnB1dCBhbHdheXMtZmxvYXQtbGFiZWwgbGFiZWw9Ik1vZGVsIG5hbWUiIHBsYWNlaG9sZGVyPSJbW21vZGVsTmFtZTFdXSIgdmFsdWU9Int7bW9kZWxOYW1lMX19IiBjbGFzcz0iaW5wdXQtaW4tcm93Ij4KICAgICAgPC9wYXBlci1pbnB1dD4KICAgICAgPHBhcGVyLWlucHV0IGFsd2F5cy1mbG9hdC1sYWJlbCBsYWJlbD0iTW9kZWwgdmVyc2lvbiAob3B0aW9uYWwpIiBwbGFjZWhvbGRlcj0iW1ttb2RlbFZlcnNpb24xXV0iIHZhbHVlPSJ7e21vZGVsVmVyc2lvbjF9fSIgY2xhc3M9ImlucHV0LWluLXJvdyI+CiAgICAgIDwvcGFwZXItaW5wdXQ+CiAgICAgIDxwYXBlci1pbnB1dCBhbHdheXMtZmxvYXQtbGFiZWwgbGFiZWw9Ik1vZGVsIHNpZ25hdHVyZSAob3B0aW9uYWwpIiBwbGFjZWhvbGRlcj0iW1ttb2RlbFNpZ25hdHVyZTFdXSIgdmFsdWU9Int7bW9kZWxTaWduYXR1cmUxfX0iIGNsYXNzPSJpbnB1dC1pbi1yb3ciPgogICAgICA8L3BhcGVyLWlucHV0PgogICAgPC9kaXY+CiAgICA8ZGl2IGhpZGRlbiQ9Int7aGlkZU1vZGVsUGFuZTJ9fSI+CiAgICAgIDxwYXBlci1pbnB1dCBhbHdheXMtZmxvYXQtbGFiZWwgbGFiZWw9IkluZmVyZW5jZSBhZGRyZXNzIiBwbGFjZWhvbGRlcj0iW1tpbmZlcmVuY2VBZGRyZXNzMl1dIiB2YWx1ZT0ie3tpbmZlcmVuY2VBZGRyZXNzMn19Ij4KICAgICAgPC9wYXBlci1pbnB1dD4KICAgICAgPGRpdiBjbGFzcz0iZmxleC1ob2xkZXIiPgogICAgICAgIDxwYXBlci1pbnB1dCBhbHdheXMtZmxvYXQtbGFiZWwgbGFiZWw9Ik1vZGVsIG5hbWUiIHBsYWNlaG9sZGVyPSJbW21vZGVsTmFtZTJdXSIgdmFsdWU9Int7bW9kZWxOYW1lMn19IiBjbGFzcz0iaW5wdXQtaW4tcm93Ij4KICAgICAgICA8L3BhcGVyLWlucHV0PgogICAgICAgIDxwYXBlci1pbnB1dCBhbHdheXMtZmxvYXQtbGFiZWwgbGFiZWw9Ik1vZGVsIHZlcnNpb24gKG9wdGlvbmFsKSIgcGxhY2Vob2xkZXI9IltbbW9kZWxWZXJzaW9uMl1dIiB2YWx1ZT0ie3ttb2RlbFZlcnNpb24yfX0iIGNsYXNzPSJpbnB1dC1pbi1yb3ciPgogICAgICAgIDwvcGFwZXItaW5wdXQ+CiAgICAgICAgPHBhcGVyLWlucHV0IGFsd2F5cy1mbG9hdC1sYWJlbCBsYWJlbD0iTW9kZWwgc2lnbmF0dXJlIChvcHRpb25hbCkiIHBsYWNlaG9sZGVyPSJbW21vZGVsU2lnbmF0dXJlMl1dIiB2YWx1ZT0ie3ttb2RlbFNpZ25hdHVyZTJ9fSIgY2xhc3M9ImlucHV0LWluLXJvdyI+CiAgICAgICAgPC9wYXBlci1pbnB1dD4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImFkZC1tb2RlbC1idXR0b24taG9sZGVyIiBoaWRkZW4kPSJ7eyFoaWRlTW9kZWxQYW5lMn19Ij4KICAgICAgPHBhcGVyLWJ1dHRvbiBvbi10YXA9ImFkZE1vZGVsQ2xpY2tlZF8iIGNsYXNzPSJtYWluLWJ1dHRvbiI+CiAgICAgICAgQWRkIGFub3RoZXIgbW9kZWwgZm9yIGNvbXBhcmlzb24KICAgICAgPC9wYXBlci1idXR0b24+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImZsZXgtaG9sZGVyIj4KICAgICAgPGRpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJtb2RlbC10eXBlLWxhYmVsIj5Nb2RlbCBUeXBlPC9kaXY+CiAgICAgICAgPHBhcGVyLXJhZGlvLWdyb3VwIHNlbGVjdGVkPSJ7e21vZGVsVHlwZX19Ij4KICAgICAgICAgIDxwYXBlci1yYWRpby1idXR0b24gbmFtZT0iY2xhc3NpZmljYXRpb24iPkNsYXNzaWZpY2F0aW9uPC9wYXBlci1yYWRpby1idXR0b24+CiAgICAgICAgICA8cGFwZXItcmFkaW8tYnV0dG9uIG5hbWU9InJlZ3Jlc3Npb24iPlJlZ3Jlc3Npb248L3BhcGVyLXJhZGlvLWJ1dHRvbj4KICAgICAgICA8L3BhcGVyLXJhZGlvLWdyb3VwPgogICAgICA8L2Rpdj4KICAgICAgPHBhcGVyLWNoZWNrYm94IGNoZWNrZWQ9Int7dXNlUHJlZGljdEFwaX19IiBjbGFzcz0icHJlZGljdC1jaGVja2JveCI+CiAgICAgICAgVXNlcyBQcmVkaWN0IEFQSQogICAgICA8L3BhcGVyLWNoZWNrYm94PgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJmbGV4LWhvbGRlciI+CiAgICAgIDxwYXBlci1pbnB1dCBhbHdheXMtZmxvYXQtbGFiZWwgbGFiZWw9IklucHV0IHRlbnNvciBuYW1lIiBwbGFjZWhvbGRlcj0iW1twcmVkaWN0SW5wdXRUZW5zb3JdXSIgdmFsdWU9Int7cHJlZGljdElucHV0VGVuc29yfX0iIGNsYXNzPSJpbnB1dC1pbi1yb3ciIGhpZGRlbiQ9Iltbc2hvdWxkRGlzYWJsZVByZWRpY3RUZW5zb3JDb250cm9sc18odXNlUHJlZGljdEFwaSldXSI+CiAgICAgIDwvcGFwZXItaW5wdXQ+CiAgICAgIDxwYXBlci1pbnB1dCBhbHdheXMtZmxvYXQtbGFiZWwgbGFiZWw9Ik91dHB1dCB0ZW5zb3IgbmFtZSIgcGxhY2Vob2xkZXI9IltbcHJlZGljdE91dHB1dFRlbnNvcl1dIiB2YWx1ZT0ie3twcmVkaWN0T3V0cHV0VGVuc29yfX0iIGNsYXNzPSJpbnB1dC1pbi1yb3ciIGhpZGRlbiQ9Iltbc2hvdWxkRGlzYWJsZVByZWRpY3RUZW5zb3JDb250cm9sc18odXNlUHJlZGljdEFwaSldXSI+CiAgICAgIDwvcGFwZXItaW5wdXQ+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImZsZXgtaG9sZGVyIj4KICAgICAgPHBhcGVyLWlucHV0IGFsd2F5cy1mbG9hdC1sYWJlbCBsYWJlbD0iUGF0aCB0byBleGFtcGxlcyIgdmFsdWU9Int7ZXhhbXBsZXNQYXRofX0iIGNsYXNzPSJmbGV4LWdyb3ciPgogICAgICA8L3BhcGVyLWlucHV0PgogICAgICA8cGFwZXItY2hlY2tib3ggY2hlY2tlZD0ie3tzZXF1ZW5jZUV4YW1wbGVzfX0iIGNsYXNzPSJjaGVja2JveCI+CiAgICAgICAgU2VxdWVuY2VFeGFtcGxlcwogICAgICA8L3BhcGVyLWNoZWNrYm94PgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJmbGV4LWhvbGRlciI+CiAgICAgIDxwYXBlci1pbnB1dCBhbHdheXMtZmxvYXQtbGFiZWwgdHlwZT0ibnVtYmVyIiBjbGFzcz0iaW5wdXQtaW4tcm93IGZsZXgtZ3JvdyIgbGFiZWw9Ik1heGltdW0gbnVtYmVyIG9mIGV4YW1wbGVzIHRvIGxvYWQiIHBsYWNlaG9sZGVyPSJbW21heEV4YW1wbGVzXV0iIHZhbHVlPSJ7e21heEV4YW1wbGVzfX0iPgogICAgICA8L3BhcGVyLWlucHV0PgogICAgICA8cGFwZXItaW5wdXQgYWx3YXlzLWZsb2F0LWxhYmVsIHR5cGU9Im51bWJlciIgY2xhc3M9ImlucHV0LWluLXJvdyBmbGV4LWdyb3ciIGxhYmVsPSJTYW1wbGluZyByYXRpbyAoMC4yID0gc2FtcGxlIH4yMCUgb2YgZXhhbXBsZXMpIiBwbGFjZWhvbGRlcj0iW1tzYW1wbGluZ09kZHNdXSIgdmFsdWU9Int7c2FtcGxpbmdPZGRzfX0iPgogICAgICA8L3BhcGVyLWlucHV0PgogICAgPC9kaXY+CiAgICA8cGFwZXItaW5wdXQgYWx3YXlzLWZsb2F0LWxhYmVsIGxhYmVsPSJQYXRoIHRvIGxhYmVsIGRpY3Rpb25hcnkgKG9wdGlvbmFsKSIgcGxhY2Vob2xkZXI9IltbbGFiZWxWb2NhYlBhdGhdXSIgdmFsdWU9Int7bGFiZWxWb2NhYlBhdGh9fSIgZGlzYWJsZWQ9Iltbc2hvdWxkRGlzYWJsZUNsYXNzaWZpY2F0aW9uQ29udHJvbHNfKG1vZGVsVHlwZSldXSI+CiAgICA8L3BhcGVyLWlucHV0PgogICAgPGRpdiBjbGFzcz0iZmxleC1ob2xkZXIiPgogICAgICA8cGFwZXItaWNvbi1idXR0b24gaWNvbj0iaGVscCIgY2xhc3M9ImhlbHAtaWNvbiI+PC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgPGRpdj5NYXBzIHByZWRpY3RlZCBjbGFzcyBpbmRpY2VzIHRvIGxhYmVscyBmcm9tIHRleHQgZmlsZTwvZGl2PgogICAgICA8cGFwZXItdG9vbHRpcCBjbGFzcz0idG9vbHRpcCIgYW5pbWF0aW9uLWRlbGF5PSIwIiBwb3NpdGlvbj0iYm90dG9tIiBvZmZzZXQ9IjAiPgogICAgICAgIEFuIG9wdGlvbmFsIHRleHQgZmlsZSBmb3IgdXNlIHdpdGggdGhlIHJlc3VsdHMgb2YgYSBjbGFzc2lmaWNhdGlvbgogICAgICAgIG1vZGVsLiBDbGFzc2lmaWNhdGlvbiBtb2RlbHMgcmV0dXJuIHByZWRpY3RlZCBjbGFzc2VzIGFzIGluZGljZXMuIElmIGEKICAgICAgICB2b2NhYiBmaWxlIGlzIHByb3ZpZGVkLCBlYWNoIHByZWRpY3RlZCBjbGFzcyBpbmRleCB3aWxsIGJlIG1hcHBlZCB0byBhCiAgICAgICAgbGFiZWwgZnJvbSB0aGlzIGZpbGUgZm9yIHVzZSBpbiB0aGUgZGlzcGxheS4gRWFjaCBsaW5lIGluIHRoZSBmaWxlCiAgICAgICAgY29ycmVzcG9uZHMgdG8gYSBsYWJlbCwgd2l0aCB0aGUgZmlyc3QgbGluZSBjb3JyZXNwb25kaW5nIHRvIGNsYXNzIGluZGV4CiAgICAgICAgMC4KICAgICAgPC9wYXBlci10b29sdGlwPgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJmbGV4LWhvbGRlciI+CiAgICAgIDxwYXBlci1pbnB1dCBhbHdheXMtZmxvYXQtbGFiZWwgdHlwZT0ibnVtYmVyIiBsYWJlbD0iTWF4IGNsYXNzZXMgdG8gZGlzcGxheSIgcGxhY2Vob2xkZXI9IltbbWF4Q2xhc3Nlc1RvRGlzcGxheV1dIiB2YWx1ZT0ie3ttYXhDbGFzc2VzVG9EaXNwbGF5fX0iIGNsYXNzPSJpbnB1dC1pbi1yb3ciIGRpc2FibGVkPSJbW3Nob3VsZERpc2FibGVNdWx0aUNsYXNzQ29udHJvbHNfKG11bHRpQ2xhc3MpXV0iPgogICAgICA8L3BhcGVyLWlucHV0PgogICAgICA8cGFwZXItY2hlY2tib3ggZGlzYWJsZWQ9Iltbc2hvdWxkRGlzYWJsZUNsYXNzaWZpY2F0aW9uQ29udHJvbHNfKG1vZGVsVHlwZSldXSIgY2hlY2tlZD0ie3ttdWx0aUNsYXNzfX0iIGNsYXNzPSJjaGVja2JveCI+CiAgICAgICAgTXVsdGktY2xhc3MgY2xhc3NpZmljYXRpb24gbW9kZWwKICAgICAgPC9wYXBlci1jaGVja2JveD4KICAgIDwvZGl2PgogIDwvdGVtcGxhdGU+CgogIDxzY3JpcHQ+Ly9+fldFQlBBVEh+fi90Zi1pbnRlcmFjdGl2ZS1pbmZlcmVuY2UtZGFzaGJvYXJkL3RmLWluZmVyZW5jZS1wYW5lbC5odG1sLmpzClBvbHltZXIoe2lzOiJ0Zi1pbmZlcmVuY2UtcGFuZWwiLHByb3BlcnRpZXM6e2V4YW1wbGVzUGF0aDp7dHlwZTpTdHJpbmcsdmFsdWU6VmwuZ2V0U3RyaW5nSW5pdGlhbGl6ZXIoImV4YW1wbGVzUGF0aCIse2RlZmF1bHRWYWx1ZToiIn0pLG9ic2VydmVyOiJleGFtcGxlc1BhdGhDaGFuZ2VkXyIsbm90aWZ5OiEwfSxoaWRlTW9kZWxQYW5lMjp7dHlwZTpCb29sZWFuLHZhbHVlOlZsLmdldEJvb2xlYW5Jbml0aWFsaXplcigiaGlkZU1vZGVsUGFuZTIiLHtkZWZhdWx0VmFsdWU6ITB9KSxvYnNlcnZlcjoiaGlkZU1vZGVsUGFuZTJDaGFuZ2VkXyJ9LG1vZGVsTmFtZTp7dHlwZTpTdHJpbmcsdmFsdWU6IiIsbm90aWZ5OiEwfSxtb2RlbE5hbWUxOnt0eXBlOlN0cmluZyx2YWx1ZTpWbC5nZXRTdHJpbmdJbml0aWFsaXplcigibW9kZWxOYW1lMSIse2RlZmF1bHRWYWx1ZToiIn0pLG9ic2VydmVyOiJtb2RlbE5hbWUxQ2hhbmdlZF8iLG5vdGlmeTohMH0sbW9kZWxOYW1lMjp7dHlwZTpTdHJpbmcsCnZhbHVlOlZsLmdldFN0cmluZ0luaXRpYWxpemVyKCJtb2RlbE5hbWUyIix7ZGVmYXVsdFZhbHVlOiIifSksb2JzZXJ2ZXI6Im1vZGVsTmFtZTJDaGFuZ2VkXyIsbm90aWZ5OiEwfSxpbmZlcmVuY2VBZGRyZXNzOnt0eXBlOlN0cmluZyx2YWx1ZToiIixub3RpZnk6ITB9LGluZmVyZW5jZUFkZHJlc3MxOnt0eXBlOlN0cmluZyx2YWx1ZTpWbC5nZXRTdHJpbmdJbml0aWFsaXplcigiaW5mZXJlbmNlQWRkcmVzczEiLHtkZWZhdWx0VmFsdWU6IiJ9KSxvYnNlcnZlcjoiaW5mZXJlbmNlQWRkcmVzczFDaGFuZ2VkXyIsbm90aWZ5OiEwfSxpbmZlcmVuY2VBZGRyZXNzMjp7dHlwZTpTdHJpbmcsdmFsdWU6VmwuZ2V0U3RyaW5nSW5pdGlhbGl6ZXIoImluZmVyZW5jZUFkZHJlc3MyIix7ZGVmYXVsdFZhbHVlOiIifSksb2JzZXJ2ZXI6ImluZmVyZW5jZUFkZHJlc3MyQ2hhbmdlZF8iLG5vdGlmeTohMH0sbW9kZWxUeXBlOnt0eXBlOlN0cmluZyx2YWx1ZTpWbC5nZXRTdHJpbmdJbml0aWFsaXplcigibW9kZWxUeXBlIiwKe2RlZmF1bHRWYWx1ZToiY2xhc3NpZmljYXRpb24ifSksb2JzZXJ2ZXI6Im1vZGVsVHlwZUNoYW5nZWRfIixub3RpZnk6ITB9LG1vZGVsVmVyc2lvbjp7dHlwZTpTdHJpbmcsdmFsdWU6IiIsbm90aWZ5OiEwfSxtb2RlbFZlcnNpb24xOnt0eXBlOlN0cmluZyx2YWx1ZTpWbC5nZXRTdHJpbmdJbml0aWFsaXplcigibW9kZWxWZXJzaW9uMSIse2RlZmF1bHRWYWx1ZToiIn0pLG9ic2VydmVyOiJtb2RlbFZlcnNpb24xQ2hhbmdlZF8iLG5vdGlmeTohMH0sbW9kZWxWZXJzaW9uMjp7dHlwZTpTdHJpbmcsdmFsdWU6VmwuZ2V0U3RyaW5nSW5pdGlhbGl6ZXIoIm1vZGVsVmVyc2lvbjIiLHtkZWZhdWx0VmFsdWU6IiJ9KSxvYnNlcnZlcjoibW9kZWxWZXJzaW9uMkNoYW5nZWRfIixub3RpZnk6ITB9LG1vZGVsU2lnbmF0dXJlOnt0eXBlOlN0cmluZyx2YWx1ZToiIixub3RpZnk6ITB9LG1vZGVsU2lnbmF0dXJlMTp7dHlwZTpTdHJpbmcsdmFsdWU6VmwuZ2V0U3RyaW5nSW5pdGlhbGl6ZXIoIm1vZGVsU2lnbmF0dXJlMSIsCntkZWZhdWx0VmFsdWU6IiJ9KSxvYnNlcnZlcjoibW9kZWxTaWduYXR1cmUxQ2hhbmdlZF8iLG5vdGlmeTohMH0sbW9kZWxTaWduYXR1cmUyOnt0eXBlOlN0cmluZyx2YWx1ZTpWbC5nZXRTdHJpbmdJbml0aWFsaXplcigibW9kZWxTaWduYXR1cmUyIix7ZGVmYXVsdFZhbHVlOiIifSksb2JzZXJ2ZXI6Im1vZGVsU2lnbmF0dXJlMkNoYW5nZWRfIixub3RpZnk6ITB9LG1heEV4YW1wbGVzOnt0eXBlOk51bWJlcix2YWx1ZTpWbC5nZXRTdHJpbmdJbml0aWFsaXplcigibWF4RXhhbXBsZXMiLHtkZWZhdWx0VmFsdWU6IjEwMDAifSksb2JzZXJ2ZXI6Im1heEV4YW1wbGVzQ2hhbmdlZF8iLG5vdGlmeTohMH0sbGFiZWxWb2NhYlBhdGg6e3R5cGU6U3RyaW5nLHZhbHVlOlZsLmdldFN0cmluZ0luaXRpYWxpemVyKCJsYWJlbFZvY2FiUGF0aCIse2RlZmF1bHRWYWx1ZToiIn0pLG9ic2VydmVyOiJsYWJlbFZvY2FiUGF0aENoYW5nZWRfIixub3RpZnk6ITB9LG11bHRpQ2xhc3M6e3R5cGU6Qm9vbGVhbiwKbm90aWZ5OiEwLHZhbHVlOlZsLmdldEJvb2xlYW5Jbml0aWFsaXplcigibXVsdGlDbGFzcyIse2RlZmF1bHRWYWx1ZTohMX0pLG9ic2VydmVyOiJtdWx0aUNsYXNzQ2hhbmdlZF8ifSxzZXF1ZW5jZUV4YW1wbGVzOnt0eXBlOkJvb2xlYW4sbm90aWZ5OiEwLHZhbHVlOlZsLmdldEJvb2xlYW5Jbml0aWFsaXplcigic2VxdWVuY2VFeGFtcGxlcyIse2RlZmF1bHRWYWx1ZTohMX0pLG9ic2VydmVyOiJzZXF1ZW5jZUV4YW1wbGVzQ2hhbmdlZF8ifSxtYXhDbGFzc2VzVG9EaXNwbGF5Ont0eXBlOk51bWJlcix2YWx1ZTpWbC5nZXRTdHJpbmdJbml0aWFsaXplcigibWF4Q2xhc3Nlc1RvRGlzcGxheSIse2RlZmF1bHRWYWx1ZToiNSJ9KSxvYnNlcnZlcjoibWF4Q2xhc3Nlc1RvRGlzcGxheUNoYW5nZWRfIixub3RpZnk6ITB9LHNhbXBsaW5nT2Rkczp7dHlwZTpOdW1iZXIsdmFsdWU6VmwuZ2V0U3RyaW5nSW5pdGlhbGl6ZXIoInNhbXBsaW5nT2RkcyIse2RlZmF1bHRWYWx1ZToiMSJ9KSxvYnNlcnZlcjoic2FtcGxpbmdPZGRzQ2hhbmdlZF8iLApub3RpZnk6ITB9LHVzZVByZWRpY3RBcGk6e3R5cGU6Qm9vbGVhbixub3RpZnk6ITAsdmFsdWU6VmwuZ2V0Qm9vbGVhbkluaXRpYWxpemVyKCJ1c2VQcmVkaWN0QXBpIix7ZGVmYXVsdFZhbHVlOiExfSksb2JzZXJ2ZXI6InVzZVByZWRpY3RBcGlDaGFuZ2VkXyJ9LHByZWRpY3RJbnB1dFRlbnNvcjp7dHlwZTpTdHJpbmcsdmFsdWU6VmwuZ2V0U3RyaW5nSW5pdGlhbGl6ZXIoInByZWRpY3RJbnB1dFRlbnNvciIse2RlZmF1bHRWYWx1ZToiZXhhbXBsZXMifSksb2JzZXJ2ZXI6InByZWRpY3RJbnB1dFRlbnNvckNoYW5nZWRfIixub3RpZnk6ITB9LHByZWRpY3RPdXRwdXRUZW5zb3I6e3R5cGU6U3RyaW5nLHZhbHVlOlZsLmdldFN0cmluZ0luaXRpYWxpemVyKCJwcmVkaWN0T3V0cHV0VGVuc29yIix7ZGVmYXVsdFZhbHVlOiJwcm9iYWJpbGl0aWVzIn0pLG9ic2VydmVyOiJwcmVkaWN0T3V0cHV0VGVuc29yQ2hhbmdlZF8iLG5vdGlmeTohMH19LG9ic2VydmVyczpbInVwZGF0ZU1vZGVsTmFtZShtb2RlbE5hbWUxLCBtb2RlbE5hbWUyKSIsCiJ1cGRhdGVJbmZlcmVuY2VBZGRyZXNzKGluZmVyZW5jZUFkZHJlc3MxLCBpbmZlcmVuY2VBZGRyZXNzMikiLCJ1cGRhdGVNb2RlbFZlcnNpb24obW9kZWxWZXJzaW9uMSwgbW9kZWxWZXJzaW9uMikiLCJ1cGRhdGVNb2RlbFNpZ25hdHVyZShtb2RlbFNpZ25hdHVyZTEsIG1vZGVsU2lnbmF0dXJlMikiXSx1cGRhdGVNb2RlbE5hbWU6ZnVuY3Rpb24oYSxjKXt0aGlzLm1vZGVsTmFtZT1hKyIsIitjO3RoaXMubW9kZWxOYW1lPXRoaXMubW9kZWxOYW1lLnJlcGxhY2UoLyheLCl8KCwkKS9nLCIiKX0sdXBkYXRlSW5mZXJlbmNlQWRkcmVzczpmdW5jdGlvbihhLGMpe3RoaXMuaW5mZXJlbmNlQWRkcmVzcz1hKyIsIitjO3RoaXMuaW5mZXJlbmNlQWRkcmVzcz10aGlzLmluZmVyZW5jZUFkZHJlc3MucmVwbGFjZSgvKF4sKXwoLCQpL2csIiIpfSx1cGRhdGVNb2RlbFZlcnNpb246ZnVuY3Rpb24oYSxjKXt0aGlzLm1vZGVsVmVyc2lvbj1hKyIsIitjfSx1cGRhdGVNb2RlbFNpZ25hdHVyZTpmdW5jdGlvbihhLApjKXt0aGlzLm1vZGVsU2lnbmF0dXJlPWErIiwiK2N9LGFkZE1vZGVsQ2xpY2tlZF86ZnVuY3Rpb24oKXt0aGlzLmhpZGVNb2RlbFBhbmUyPSF0aGlzLmhpZGVNb2RlbFBhbmUyfSxleGFtcGxlc1BhdGhDaGFuZ2VkXzpWbC5nZXRTdHJpbmdPYnNlcnZlcigiZXhhbXBsZXNQYXRoIix7ZGVmYXVsdFZhbHVlOiIifSksbW9kZWxOYW1lMUNoYW5nZWRfOlZsLmdldFN0cmluZ09ic2VydmVyKCJtb2RlbE5hbWUxIix7ZGVmYXVsdFZhbHVlOiIifSksbW9kZWxOYW1lMkNoYW5nZWRfOlZsLmdldFN0cmluZ09ic2VydmVyKCJtb2RlbE5hbWUyIix7ZGVmYXVsdFZhbHVlOiIifSksaW5mZXJlbmNlQWRkcmVzczFDaGFuZ2VkXzpWbC5nZXRTdHJpbmdPYnNlcnZlcigiaW5mZXJlbmNlQWRkcmVzczEiLHtkZWZhdWx0VmFsdWU6IiJ9KSxpbmZlcmVuY2VBZGRyZXNzMkNoYW5nZWRfOlZsLmdldFN0cmluZ09ic2VydmVyKCJpbmZlcmVuY2VBZGRyZXNzMiIse2RlZmF1bHRWYWx1ZToiIn0pLG1vZGVsVHlwZUNoYW5nZWRfOlZsLmdldFN0cmluZ09ic2VydmVyKCJtb2RlbFR5cGUiLAp7ZGVmYXVsdFZhbHVlOiJjbGFzc2lmaWNhdGlvbiJ9KSxtb2RlbFZlcnNpb24xQ2hhbmdlZF86VmwuZ2V0U3RyaW5nT2JzZXJ2ZXIoIm1vZGVsVmVyc2lvbjEiLHtkZWZhdWx0VmFsdWU6IiJ9KSxtb2RlbFZlcnNpb24yQ2hhbmdlZF86VmwuZ2V0U3RyaW5nT2JzZXJ2ZXIoIm1vZGVsVmVyc2lvbjIiLHtkZWZhdWx0VmFsdWU6IiJ9KSxtb2RlbFNpZ25hdHVyZTFDaGFuZ2VkXzpWbC5nZXRTdHJpbmdPYnNlcnZlcigibW9kZWxTaWduYXR1cmUxIix7ZGVmYXVsdFZhbHVlOiIifSksbW9kZWxTaWduYXR1cmUyQ2hhbmdlZF86VmwuZ2V0U3RyaW5nT2JzZXJ2ZXIoIm1vZGVsU2lnbmF0dXJlMiIse2RlZmF1bHRWYWx1ZToiIn0pLG1heEV4YW1wbGVzQ2hhbmdlZF86VmwuZ2V0U3RyaW5nT2JzZXJ2ZXIoIm1heEV4YW1wbGVzIix7ZGVmYXVsdFZhbHVlOiIxMDAwIn0pLGxhYmVsVm9jYWJQYXRoQ2hhbmdlZF86VmwuZ2V0U3RyaW5nT2JzZXJ2ZXIoImxhYmVsVm9jYWJQYXRoIix7ZGVmYXVsdFZhbHVlOiIifSksCm1heENsYXNzZXNUb0Rpc3BsYXlDaGFuZ2VkXzpWbC5nZXRTdHJpbmdPYnNlcnZlcigibWF4Q2xhc3Nlc1RvRGlzcGxheSIse2RlZmF1bHRWYWx1ZToiNSJ9KSxzYW1wbGluZ09kZHNDaGFuZ2VkXzpWbC5nZXRTdHJpbmdPYnNlcnZlcigic2FtcGxpbmdPZGRzIix7ZGVmYXVsdFZhbHVlOiIxIn0pLG11bHRpQ2xhc3NDaGFuZ2VkXzpWbC5nZXRCb29sZWFuT2JzZXJ2ZXIoIm11bHRpQ2xhc3MiLHtkZWZhdWx0VmFsdWU6ITF9KSxzZXF1ZW5jZUV4YW1wbGVzQ2hhbmdlZF86VmwuZ2V0Qm9vbGVhbk9ic2VydmVyKCJzZXF1ZW5jZUV4YW1wbGVzIix7ZGVmYXVsdFZhbHVlOiExfSksaGlkZU1vZGVsUGFuZTJDaGFuZ2VkXzpWbC5nZXRCb29sZWFuT2JzZXJ2ZXIoImhpZGVNb2RlbFBhbmUyIix7ZGVmYXVsdFZhbHVlOiEwfSksdXNlUHJlZGljdEFwaUNoYW5nZWRfOlZsLmdldEJvb2xlYW5PYnNlcnZlcigidXNlUHJlZGljdEFwaSIse2RlZmF1bHRWYWx1ZTohMX0pLHByZWRpY3RPdXRwdXRUZW5zb3JDaGFuZ2VkXzpWbC5nZXRTdHJpbmdPYnNlcnZlcigicHJlZGljdE91dHB1dFRlbnNvciIsCntkZWZhdWx0VmFsdWU6InByb2JhYmlsaXRpZXMifSkscHJlZGljdElucHV0VGVuc29yQ2hhbmdlZF86VmwuZ2V0U3RyaW5nT2JzZXJ2ZXIoInByZWRpY3RJbnB1dFRlbnNvciIse2RlZmF1bHRWYWx1ZToiZXhhbXBsZXMifSksc2hvdWxkRGlzYWJsZUNsYXNzaWZpY2F0aW9uQ29udHJvbHNfOmZ1bmN0aW9uKGEpe3JldHVybiJyZWdyZXNzaW9uIj09YX0sc2hvdWxkRGlzYWJsZU11bHRpQ2xhc3NDb250cm9sc186ZnVuY3Rpb24oYSl7cmV0dXJuIWF9LHNob3VsZERpc2FibGVQcmVkaWN0VGVuc29yQ29udHJvbHNfOmZ1bmN0aW9uKGEpe3JldHVybiFhfX0pOwo8L3NjcmlwdD4KPC9kb20tbW9kdWxlPgoKCgoKCgoKCgoKPGRvbS1tb2R1bGUgaWQ9InZ6LWJhci1jaGFydCI+CiAgPHRlbXBsYXRlPgogICAgPGRpdiBpZD0idG9vbHRpcCI+CiAgICAgIDx0YWJsZT4KICAgICAgICA8dGhlYWQ+CiAgICAgICAgICA8dHIgaWQ9InRvb2x0aXAtdGFibGUtaGVhZGVyLXJvdyI+PC90cj4KICAgICAgICA8L3RoZWFkPgogICAgICAgIDx0Ym9keT48L3Rib2R5PgogICAgICA8L3RhYmxlPgogICAgPC9kaXY+CiAgICA8ZGl2IGlkPSJjaGFydGRpdiI+PC9kaXY+CiAgICA8c3R5bGUgaW5jbHVkZT0icGxvdHRhYmxlLXN0eWxlIj48L3N0eWxlPgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgZmxleC1zaHJpbms6IDE7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgIH0KICAgICAgZGl2IHsKICAgICAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICAgIGZsZXgtc2hyaW5rOiAxOwogICAgICB9CiAgICAgIHRkIHsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDVweDsKICAgICAgICBwYWRkaW5nLXJpZ2h0OiA1cHg7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgIH0KICAgICAgI3Rvb2x0aXAgewogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIGJveC1zaGFkb3c6IDAgMXB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMyk7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC44KTsKICAgICAgICBjb2xvcjogd2hpdGU7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjRlbTsKICAgICAgICBwYWRkaW5nOiA4cHg7CiAgICAgICAgei1pbmRleDogNTsKICAgICAgICBjdXJzb3I6IG5vbmU7CiAgICAgICAgbWFyZ2luLXRvcDogMTBweDsKICAgICAgfQogICAgICAuc3dhdGNoIHsKICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICAgICAgd2lkdGg6IDE0cHg7CiAgICAgICAgaGVpZ2h0OiAxNHB4OwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIGJvcmRlcjogMnB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgMCk7CiAgICAgIH0KICAgICAgLmNsb3Nlc3QgLnN3YXRjaCB7CiAgICAgICAgYm9yZGVyOiAycHggc29saWQgd2hpdGU7CiAgICAgIH0KICAgICAgdGggewogICAgICAgIHBhZGRpbmctbGVmdDogNXB4OwogICAgICAgIHBhZGRpbmctcmlnaHQ6IDVweDsKICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CiAgPHNjcmlwdD4vL35+V0VCUEFUSH5+L3Z6LWJhci1jaGFydC92ei1iYXItY2hhcnQuanMKdmFyIEZtOwooZnVuY3Rpb24oKXtQb2x5bWVyKHtpczoidnotYmFyLWNoYXJ0Iixwcm9wZXJ0aWVzOntkYXRhOk9iamVjdCxsaW5lczp7dHlwZTpPYmplY3QsdmFsdWU6KCk9Pih7fSl9LGNvbG9yU2NhbGU6e3R5cGU6T2JqZWN0LHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuKG5ldyBQbG90dGFibGUuU2NhbGVzLkNvbG9yKS5yYW5nZShkMy5zY2hlbWVDYXRlZ29yeTEwKX19LGxpbmVzQ29sb3JTY2FsZTp7dHlwZTpPYmplY3QsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IFBsb3R0YWJsZS5TY2FsZXMuQ29sb3IpLnJhbmdlKGQzLnNjaGVtZUNhdGVnb3J5MTApfX0sdG9vbHRpcENvbHVtbnM6e3R5cGU6QXJyYXksdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm5be3RpdGxlOiJOYW1lIixldmFsdWF0ZTpmdW5jdGlvbihjKXtyZXR1cm4gYy5rZXl9fSx7dGl0bGU6IlgiLGV2YWx1YXRlOmZ1bmN0aW9uKGMpe3JldHVybiBjLnZhbHVlLnh9fSx7dGl0bGU6IlkiLGV2YWx1YXRlOmZ1bmN0aW9uKGMpe3JldHVybiBjLnZhbHVlLnl9fV19fSxfYXR0YWNoZWQ6Qm9vbGVhbiwKX2NoYXJ0Ok9iamVjdH0sb2JzZXJ2ZXJzOlsiX21ha2VDaGFydChkYXRhLCBsaW5lcywgY29sb3JTY2FsZSwgbGluZXNDb2xvclNjYWxlLCB0b29sdGlwQ29sdW1ucywgX2F0dGFjaGVkKSJdLHJlZHJhdzpmdW5jdGlvbigpe3RoaXMuX2NoYXJ0JiZ0aGlzLl9jaGFydC5yZWRyYXcoKX0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl9hdHRhY2hlZD0hMH0sZGV0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl9hdHRhY2hlZD0hMX0scmVhZHk6ZnVuY3Rpb24oKXt0aGlzLnNjb3BlU3VidHJlZSh0aGlzLiQudG9vbHRpcCwhMCk7dGhpcy5zY29wZVN1YnRyZWUodGhpcy4kLmNoYXJ0ZGl2LCEwKX0sX21ha2VDaGFydDpmdW5jdGlvbigpe3RoaXMuX2NoYXJ0JiZ0aGlzLl9jaGFydC5kZXN0cm95KCk7dmFyIGM9ZDMuc2VsZWN0KHRoaXMuJC50b29sdGlwKTtjPW5ldyBhKHRoaXMuZGF0YSx0aGlzLmxpbmVzLHRoaXMuY29sb3JTY2FsZSx0aGlzLmxpbmVzQ29sb3JTY2FsZSxjLHRoaXMudG9vbHRpcENvbHVtbnMpOwp2YXIgZD1kMy5zZWxlY3QodGhpcy4kLmNoYXJ0ZGl2KTtjLnJlbmRlclRvKGQpO3RoaXMuX2NoYXJ0PWN9fSk7Y2xhc3MgYXtjb25zdHJ1Y3RvcihjLGQsZixnLGwsayl7Zi5kb21haW4oXy5zb3J0QnkoXy5rZXlzKGMpKSk7dGhpcy5kYXRhPWM7dGhpcy5saW5lcz1kO3RoaXMuY29sb3JTY2FsZT1mO3RoaXMubGluZXNDb2xvclNjYWxlPWc7dGhpcy50b29sdGlwPWw7dGhpcy5vdXRlcj10aGlzLnBsb3Q9bnVsbDt0aGlzLmJ1aWxkQ2hhcnQoYyxkLGYsZyk7dGhpcy5zZXR1cFRvb2x0aXBzKGspfWJ1aWxkQ2hhcnQoYyxkLGYpe3RoaXMub3V0ZXImJnRoaXMub3V0ZXIuZGVzdHJveSgpO3ZhciBnPW5ldyBQbG90dGFibGUuU2NhbGVzLkNhdGVnb3J5O2NvbnN0IGw9bmV3IFBsb3R0YWJsZS5TY2FsZXMuTGluZWFyLGs9bmV3IFBsb3R0YWJsZS5BeGVzLkNhdGVnb3J5KGcsImJvdHRvbSIpLG09bmV3IFBsb3R0YWJsZS5BeGVzLk51bWVyaWMobCwibGVmdCIpLHA9bmV3IFBsb3R0YWJsZS5QbG90cy5DbHVzdGVyZWRCYXI7CnAueChmdW5jdGlvbihyKXtyZXR1cm4gci54fSxnKTtwLnkoZnVuY3Rpb24ocil7cmV0dXJuIHIueX0sbCk7Xy5rZXlzKGMpLmZvckVhY2gocj0+cC5hZGREYXRhc2V0KChuZXcgUGxvdHRhYmxlLkRhdGFzZXQoY1tyXSkpLm1ldGFkYXRhKHIpKSk7cC5hdHRyKCJmaWxsIixmdW5jdGlvbihyLHQsdil7cmV0dXJuIGYuc2NhbGUodi5tZXRhZGF0YSgpKX0pO3RoaXMucGxvdD1wO2NvbnN0IHE9Xy5rZXlzKGQpO2lmKDA8cS5sZW5ndGgpe2NvbnN0IHI9bmV3IFBsb3R0YWJsZS5QbG90cy5MaW5lO3IueChmdW5jdGlvbih0KXtyZXR1cm4gdC54fSxnKTtyLnkoZnVuY3Rpb24odCl7cmV0dXJuIHQueX0sbCk7cS5mb3JFYWNoKHQ9PnIuYWRkRGF0YXNldCgobmV3IFBsb3R0YWJsZS5EYXRhc2V0KGRbdF0pKS5tZXRhZGF0YSh0KSkpO3IuYXR0cigic3Ryb2tlIiwodCx2LEEpPT50aGlzLmxpbmVzQ29sb3JTY2FsZS5zY2FsZShBLm1ldGFkYXRhKCkpKTtnPW5ldyBQbG90dGFibGUuQ29tcG9uZW50cy5Hcm91cChbcCwKcl0pO3RoaXMub3V0ZXI9bmV3IFBsb3R0YWJsZS5Db21wb25lbnRzLlRhYmxlKFtbbSxnXSxbbnVsbCxrXV0pfWVsc2UgdGhpcy5vdXRlcj1uZXcgUGxvdHRhYmxlLkNvbXBvbmVudHMuVGFibGUoW1ttLHBdLFtudWxsLGtdXSl9c2V0dXBUb29sdGlwcyhjKXt2YXIgZD10aGlzLnRvb2x0aXAuc2VsZWN0KCJ0aGVhZCB0ciIpO2Quc2VsZWN0QWxsKCJ0aCIpLmRhdGEoYykuZW50ZXIoKS5hcHBlbmQoInRoIikudGV4dChnPT5nLnRpdGxlKTtkLmluc2VydCgidGgiLCI6Zmlyc3QtY2hpbGQiKTtjb25zdCBmPXRoaXMucGxvdDtkPW5ldyBibS5Qb2ludGVySW50ZXJhY3Rpb247ZC5hdHRhY2hUbyhmKTtkLm9uUG9pbnRlck1vdmUoZz0+eyhnPWYuZW50aXR5TmVhcmVzdChnKSkmJnRoaXMuZHJhd1Rvb2x0aXBzKGcsYyl9KTtkLm9uUG9pbnRlckV4aXQoKCk9Pnt0aGlzLnRvb2x0aXAuc3R5bGUoIm9wYWNpdHkiLDApfSl9ZHJhd1Rvb2x0aXBzKGMsZCl7Y29uc3QgZj1jLmRhdHVtLngsZz1jLmRhdGFzZXQubWV0YWRhdGEoKTsKdmFyIGw9Xy5tYXBWYWx1ZXModGhpcy5kYXRhLHA9Pl8uZmlsdGVyKHAscT0+cS54PT1mKSk7bD1fLnBpY2tCeShsLHA9PjA8cC5sZW5ndGgpO2w9Xy5tYXBWYWx1ZXMobCxwPT5wWzBdKTtsPWQzLmVudHJpZXMobCk7Y29uc3Qgaz10aGlzLnRvb2x0aXAuc2VsZWN0KCJ0Ym9keSIpLmh0bWwoIiIpLnNlbGVjdEFsbCgidHIiKS5kYXRhKGwpLmVudGVyKCkuYXBwZW5kKCJ0ciIpO2suc3R5bGUoIndoaXRlLXNwYWNlIiwibm93cmFwIik7ay5jbGFzc2VkKCJjbG9zZXN0IixwPT5wLmtleT09Zyk7Y29uc3QgbT10aGlzLmNvbG9yU2NhbGU7ay5hcHBlbmQoInRkIikuYXBwZW5kKCJkaXYiKS5jbGFzc2VkKCJzd2F0Y2giLCEwKS5zdHlsZSgiYmFja2dyb3VuZC1jb2xvciIscD0+bS5zY2FsZShwLmtleSkpO18uZWFjaChkLHA9PntrLmFwcGVuZCgidGQiKS50ZXh0KHE9PnAuZXZhbHVhdGUocSkpfSk7dGhpcy50b29sdGlwLnN0eWxlKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitjLnBvc2l0aW9uLngrCiJweCwiK2MucG9zaXRpb24ueSsicHgpIik7dGhpcy50b29sdGlwLnN0eWxlKCJvcGFjaXR5IiwxKX1yZW5kZXJUbyhjKXt0aGlzLnRhcmdldFNWRz1jO3RoaXMub3V0ZXIucmVuZGVyVG8oYyl9cmVkcmF3KCl7dGhpcy5vdXRlci5yZWRyYXcoKX1kZXN0cm95KCl7dGhpcy5vdXRlci5kZXN0cm95KCl9fX0pKEZtfHwoRm09e30pKTsKPC9zY3JpcHQ+CjwvZG9tLW1vZHVsZT4KCgoKCgo8ZG9tLW1vZHVsZSBpZD0idGYtY29uZnVzaW9uLW1hdHJpeCI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICB0YWJsZSB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICB9CiAgICAgIHRkIHsKICAgICAgICB0ZXh0LWFsaWduOiByaWdodDsKICAgICAgfQogICAgICB0aCwKICAgICAgdGQgewogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBwYWRkaW5nOiAzcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKICAgICAgfQogICAgICAuZmxleCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2U7CiAgICAgIH0KICAgICAgLnByZWQtbGFiZWwgewogICAgICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICAgICAgZm9udC1zaXplOiAxMHB4OwogICAgICB9CiAgICAgIC50b3RhbC1sYWJlbCB7CiAgICAgICAgY29sb3I6ICM1ZjYzNjg7CiAgICAgICAgZm9udC1zaXplOiAxMHB4OwogICAgICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICAgIH0KICAgICAgLnRvdGFsLWNlbGwgewogICAgICAgIGNvbG9yOiAjNWY2MzY4OwogICAgICB9CiAgICAgIC5hY3R1YWwtbGFiZWwgewogICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OwogICAgICAgIGZvbnQtc2l6ZTogMTBweDsKICAgICAgfQogICAgICAubi1sYWJlbCB7CiAgICAgICAgZm9udC1zaXplOiAxMHB4OwogICAgICAgIHZlcnRpY2FsLWFsaWduOiBib3R0b207CiAgICAgIH0KICAgICAgLnZhbHVlLWNlbGwgewogICAgICAgIGNvbG9yOiAjMjAyMTI0OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIGxpZ2h0Z3JleTsKICAgICAgfQogICAgICAucGFyZW50aGV0aWNhbCB7CiAgICAgICAgcGFkZGluZy1yaWdodDogNXB4OwogICAgICAgIHdpZHRoOiA1MHB4OwogICAgICB9CiAgICA8L3N0eWxlPgogICAgPGRpdiBpZD0iaG9sZGVyIj48L2Rpdj4KICA8L3RlbXBsYXRlPgoKICA8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdGYtaW50ZXJhY3RpdmUtaW5mZXJlbmNlLWRhc2hib2FyZC90Zi1jb25mdXNpb24tbWF0cml4Lmh0bWwuanMKUG9seW1lcih7aXM6InRmLWNvbmZ1c2lvbi1tYXRyaXgiLHByb3BlcnRpZXM6e2NvdW50czpPYmplY3QsYWxsSXRlbXM6e3R5cGU6QXJyYXksdmFsdWU6KCk9PltdfSxsYWJlbDpTdHJpbmcsYmFja2dyb3VuZDp7dHlwZTpPYmplY3QsdmFsdWU6ZDMuY29sb3IoImdyYXkiKX19LG9ic2VydmVyczpbImRyYXdNYXRyaXgoY291bnRzLCBhbGxJdGVtcykiXSxyZWFkeTpmdW5jdGlvbigpe3RoaXMuc2NvcGVTdWJ0cmVlKHRoaXMuJC5ob2xkZXIsITApfSxkcmF3TWF0cml4OmZ1bmN0aW9uKGEsYyl7dGhpcy4kLmhvbGRlci5pbm5lckhUTUw9IiI7aWYoYSl7dmFyIGQ9YztpZihudWxsPT1kfHwwPT1kLmxlbmd0aCl7Yz1uZXcgU2V0O3ZhciBmPU9iamVjdC5rZXlzKGEpO2Zvcih2YXIgZz0wO2c8Zi5sZW5ndGg7ZysrKXtjLmFkZChmW2ddKTt2YXIgbD1PYmplY3Qua2V5cyhhW2ZbZ11dKTtmb3IobGV0IHE9MDtxPGwubGVuZ3RoO3ErKyljLmFkZChsW3FdKX1kPUFycmF5LmZyb20oYy52YWx1ZXMoKSl9ZD0KZC5zb3J0KCk7Mj09ZC5sZW5ndGgmJiJObyI9PWRbMF0mJiJZZXMiPT1kWzFdJiYoZD1kLnJldmVyc2UoKSk7dmFyIGs9QXJyYXkoZC5sZW5ndGgpO18uZmlsbChrLDApO3ZhciBtPVtdO2ZvcihjPTA7YzxkLmxlbmd0aDtjKyspZj1BcnJheShkLmxlbmd0aCksXy5maWxsKGYsMCksbS5wdXNoKGYpO2ZvcihjPTA7YzxkLmxlbmd0aDtjKyspZm9yKGY9MDtmPGQubGVuZ3RoO2YrKylnPWRbY10sbD1kW2ZdLGcgaW4gYSYmbCBpbiBhW2ddJiYobVtjXVtmXT1hW2ddW2xdKTthPVtdO3ZhciBwPTA7Zm9yKGM9MDtjPG0ubGVuZ3RoO2MrKylmb3IoZj1tW2NdLnJlZHVjZSgocSxyKT0+cStyLDApLGEucHVzaChbMF0uY29uY2F0KG1bY10pLmNvbmNhdChbZl0pKSxmPTA7ZjxtLmxlbmd0aDtmKyspa1tmXSs9bVtjXVtmXSxwKz1tW2NdW2ZdO2M9dGhpcy5nZXRJbmRpY2VzKG0ubGVuZ3RoKzIpO2w9ZDMuc2VsZWN0KHRoaXMuJC5ob2xkZXIpLmFwcGVuZCgidGFibGUiKTtmPWwuYXBwZW5kKCJ0aGVhZCIpOwpnPWwuYXBwZW5kKCJ0Ym9keSIpO2w9bC5hcHBlbmQoInRmb290Iik7Zi5hcHBlbmQoInRyIikuc2VsZWN0QWxsKCJ0aCIpLmRhdGEoYykuZW50ZXIoKS5hcHBlbmQoInRoIikudGV4dChxPT4wPT1xP3RoaXMubGFiZWw6cTw9bS5sZW5ndGg/IlByZWRpY3RlZCAiK2RbcS0xXToiVG90YWwiKS5hdHRyKCJjbGFzcyIscT0+MD09cT8ibi1sYWJlbCI6cTw9bS5sZW5ndGg/InByZWQtbGFiZWwiOiJ0b3RhbC1sYWJlbCIpO2E9Zy5zZWxlY3RBbGwoInRyIikuZGF0YShhKS5lbnRlcigpLmFwcGVuZCgidHIiKS5zZWxlY3RBbGwoInRkIikuZGF0YSgocSxyKT0+cS5tYXAoKHQsdik9PjA9PXY/e3ZhbHVlOiJBY3R1YWwgIitkW3JdfTp7dmFsdWU6dCxyb3c6cn0pKS5lbnRlcigpLmFwcGVuZCgidGQiKS5hdHRyKCJjbGFzcyIsKHEscik9PjA9PXI/ImFjdHVhbC1sYWJlbCI6cjw9bS5sZW5ndGg/InZhbHVlLWNlbGwiOiJ0b3RhbC1jZWxsIikuc3R5bGUoImJhY2tncm91bmQiLChxLHIpPT57aWYoMD09CnJ8fHI+bS5sZW5ndGgpcmV0dXJuIiNGRkZGRkYiO3I9dGhpcy5iYWNrZ3JvdW5kO3Iub3BhY2l0eT1xLnZhbHVlL3A7cmV0dXJuIHIrIiJ9KS5hcHBlbmQoImRpdiIpLmNsYXNzZWQoImZsZXgiLCEwKTthLmFwcGVuZCgiZGl2IikuY2xhc3NlZCgicGFyZW50aGV0aWNhbCIsKHEscik9PiEhcikudGV4dChxPT4icm93ImluIHE/IigiK3EudmFsdWUrIikiOiIiKTthLmFwcGVuZCgiZGl2IikudGV4dCgocSxyKT0+MDxyP2QzLmZvcm1hdCgiLC4xJSIpKHEudmFsdWUvcCk6cS52YWx1ZSk7YT1sLmFwcGVuZCgidHIiKS5zZWxlY3RBbGwoInRkIikuZGF0YShjKS5lbnRlcigpLmFwcGVuZCgidGQiKTthLmNsYXNzZWQoInRvdGFsLWxhYmVsIiwocSxyKT0+MD09cik7YS5jbGFzc2VkKCJ0b3RhbC1jZWxsIiwocSxyKT0+MCE9cik7YT1hLmFwcGVuZCgiZGl2IikuY2xhc3NlZCgiZmxleCIsITApO2EuYXBwZW5kKCJkaXYiKS5jbGFzc2VkKCJwYXJlbnRoZXRpY2FsIiwocSxyKT0+ISFyKS50ZXh0KHE9PgowPT1xPyJUb3RhbCI6cTw9bS5sZW5ndGg/IigiK2tbcS0xXSsiKSI6IiIpO2EuYXBwZW5kKCJkaXYiKS50ZXh0KHE9PjA9PXE/IiI6cTw9bS5sZW5ndGg/ZDMuZm9ybWF0KCIsLjElIikoa1txLTFdL3ApOiIiKX19LGdldEluZGljZXM6ZnVuY3Rpb24oYSl7cmV0dXJuIEFycmF5LmFwcGx5KG51bGwse2xlbmd0aDphfSkubWFwKE51bWJlci5jYWxsLE51bWJlcil9fSk7Cjwvc2NyaXB0Pgo8L2RvbS1tb2R1bGU+CgoKCgoKPGRvbS1tb2R1bGUgaWQ9InRmLWluZmVyZW5jZS12aWV3ZXIiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CiAgICAgIC5ydW5zLWhvbGRlciB7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW4tcmV2ZXJzZTsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIG1heC1oZWlnaHQ6IDIwMHB4OwogICAgICB9CiAgICAgIC5yb3cgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgY29sb3I6ICMzYzQwNDM7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICB9CiAgICAgIC5oZWFkZXIgewogICAgICAgIGNvbG9yOiAjODA4NjhiOwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBwYWRkaW5nOiA0cHggMDsKICAgICAgICBib3JkZXItYm90dG9tOiBzb2xpZCAxcHggI2RhZGNlMDsKICAgICAgICBib3JkZXItdG9wOiBzb2xpZCAxcHggI2RhZGNlMDsKICAgICAgfQogICAgICAuZGFyay1yb3ctb25lIHsKICAgICAgICBiYWNrZ3JvdW5kOiAjY2JmMGY4OwogICAgICB9CiAgICAgIC5kYXJrLXJvdy10d28gewogICAgICAgIGJhY2tncm91bmQ6ICNmZmYzZTA7CiAgICAgIH0KICAgICAgLndoaXRlLXJvdyB7CiAgICAgICAgYmFja2dyb3VuZDogd2hpdGU7CiAgICAgIH0KICAgICAgLm1hcmtlciB7CiAgICAgICAgZmxleDogMC41OwogICAgICAgIG1hcmdpbi1yaWdodDogNXB4OwogICAgICB9CiAgICAgIC5tYXJrZXIubWFyay1vbmUgewogICAgICAgIGJhY2tncm91bmQ6ICMwMDdiODM7CiAgICAgICAgcGFkZGluZy1sZWZ0OiAxcHg7CiAgICAgIH0KICAgICAgLm1hcmtlci5tYXJrLXR3byB7CiAgICAgICAgYmFja2dyb3VuZDogI2ZmOTgwMDsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDFweDsKICAgICAgfQogICAgICAucnVuIHsKICAgICAgICBmbGV4OiAxMDsKICAgICAgfQogICAgICAubXVsdGktbW9kZWwgewogICAgICAgIGZsZXg6IDEwOwogICAgICB9CiAgICAgIC5vbmUtbW9kZWwgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KICAgICAgLnNob3ctbGFiZWwgewogICAgICAgIGZsZXg6IDIwOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQogICAgICAubm8tbGFiZWwgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KICAgICAgLnNjb3JlIHsKICAgICAgICBmbGV4OiAxMDsKICAgICAgfQogICAgICAuYXJyb3cgewogICAgICAgIGZsZXg6IDI7CiAgICAgIH0KICAgICAgLmRlbHRhIHsKICAgICAgICBmbGV4OiAxMDsKICAgICAgfQogICAgICAudGV4dCB7CiAgICAgICAgbWFyZ2luLXRvcDogNHB4OwogICAgICB9CiAgICAgIC5ncmVlbiB7CiAgICAgICAgY29sb3I6IGdyZWVuOwogICAgICB9CiAgICAgIC5yZWQgewogICAgICAgIGNvbG9yOiByZWQ7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8ZGl2IGNsYXNzPSJyb3cgaGVhZGVyIj4KICAgICAgPGRpdiBjbGFzcz0ibWFya2VyIj48L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0icnVuIj5SdW48L2Rpdj4KICAgICAgPGRpdiBjbGFzcyQ9IltbZ2V0TW9kZWxIZWFkZXJDbGFzcyhpbmZlcmVuY2VzKV1dIj5Nb2RlbDwvZGl2PgogICAgICA8ZGl2IGNsYXNzJD0iW1tnZXRMYWJlbEhlYWRlckNsYXNzKG1vZGVsVHlwZSldXSI+TGFiZWw8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0ic2NvcmUiPltbZ2V0U2NvcmVMYWJlbChtb2RlbFR5cGUpXV08L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iYXJyb3ciPjwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJkZWx0YSI+RGVsdGE8L2Rpdj4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0icnVucy1ob2xkZXIiPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW2luZmVyZW5jZXNdXSIgYXM9Im1vZGVsc0luZmVyZW5jZSIgaW5kZXgtYXM9InJ1bmluZGV4Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJyb3dzLWZvci1ydW4iPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1ttb2RlbHNJbmZlcmVuY2VdXSIgYXM9ImluZmVyZW5jZSIgaW5kZXgtYXM9Im1vZGVsaW5kZXgiPgogICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW2dldEluZmVyZW5jZUxpc3QoaW5mZXJlbmNlLCBtYXhFbnRyaWVzUGVyUnVuKV1dIj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzJD0iW1tnZXRSb3dDbGFzcyhydW5pbmRleCwgaW5mZXJlbmNlcywgbW9kZWxpbmRleCldXSI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzJD0iW1tnZXRNYXJrZXJDbGFzcyhydW5pbmRleCwgaW5mZXJlbmNlcywgbW9kZWxpbmRleCldXSI+PC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJydW4gdGV4dCI+W1tnZXRSdW5OdW1iZXIocnVuaW5kZXgpXV08L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3MkPSJbW2dldE1vZGVsQ2xhc3MoaW5mZXJlbmNlcyldXSI+CiAgICAgICAgICAgICAgICAgIDxkaXY+W1tnZXRNb2RlbE5hbWUobW9kZWxOYW1lcywgbW9kZWxpbmRleCldXTwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzJD0iW1tnZXRMYWJlbENsYXNzKG1vZGVsVHlwZSldXSI+CiAgICAgICAgICAgICAgICAgIDxkaXY+W1tnZXRMYWJlbChpdGVtKV1dPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InNjb3JlIHRleHQiPltbZ2V0UHJpbnRhYmxlU2NvcmUoaXRlbS5zY29yZSldXTwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYXJyb3ciPgogICAgICAgICAgICAgICAgICA8aXJvbi1pY29uIGljb249IltbZ2V0SWNvbihydW5pbmRleCwgaW5kZXgsIG1vZGVsaW5kZXgpXV0iIGNsYXNzJD0iW1tnZXRJY29uQ2xhc3MocnVuaW5kZXgsIGluZGV4LCBtb2RlbGluZGV4KV1dIj4KICAgICAgICAgICAgICAgICAgPC9pcm9uLWljb24+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRlbHRhIHRleHQiPgogICAgICAgICAgICAgICAgICBbW2dldFByaW50YWJsZURlbHRhKHJ1bmluZGV4LCBpbmRleCwgbW9kZWxpbmRleCldXQogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvZGl2PgogICAgICA8L3RlbXBsYXRlPgogICAgPC9kaXY+CiAgPC90ZW1wbGF0ZT4KCiAgPHNjcmlwdD4vL35+V0VCUEFUSH5+L3RmLWludGVyYWN0aXZlLWluZmVyZW5jZS1kYXNoYm9hcmQvdGYtaW5mZXJlbmNlLXZpZXdlci5odG1sLmpzClBvbHltZXIoe2lzOiJ0Zi1pbmZlcmVuY2Utdmlld2VyIixwcm9wZXJ0aWVzOntpbmZlcmVuY2VzOkFycmF5LG1vZGVsVHlwZTpTdHJpbmcsbW9kZWxOYW1lczpBcnJheSxtYXhFbnRyaWVzUGVyUnVuOnt0eXBlOk51bWJlcix2YWx1ZTo1fX0sZ2V0TGFiZWw6ZnVuY3Rpb24oYSl7bGV0IGM9YS5sYWJlbDthLnZvY2FiTGFiZWwmJihjKz0iICgiK2Eudm9jYWJMYWJlbCsiKSIpO3JldHVybiBjfSxnZXRMYWJlbENsYXNzOmZ1bmN0aW9uKGEpe3JldHVybiJjbGFzc2lmaWNhdGlvbiI9PWE/InNob3ctbGFiZWwgdGV4dCI6Im5vLWxhYmVsIn0sZ2V0TGFiZWxIZWFkZXJDbGFzczpmdW5jdGlvbihhKXtyZXR1cm4iY2xhc3NpZmljYXRpb24iPT1hPyJzaG93LWxhYmVsIjoibm8tbGFiZWwifSxnZXRNb2RlbENsYXNzOmZ1bmN0aW9uKGEpe3JldHVybiBhJiYxPGFbMF0ubGVuZ3RoPyJtdWx0aS1tb2RlbCB0ZXh0Ijoib25lLW1vZGVsIn0sZ2V0TW9kZWxIZWFkZXJDbGFzczpmdW5jdGlvbihhKXtyZXR1cm4gYSYmCjE8YVswXS5sZW5ndGg/Im11bHRpLW1vZGVsIjoib25lLW1vZGVsIn0sZ2V0U2NvcmVMYWJlbDpmdW5jdGlvbihhKXtyZXR1cm4iY2xhc3NpZmljYXRpb24iPT1hPyJTY29yZSI6IlZhbHVlIn0sZ2V0SWNvbkNsYXNzOmZ1bmN0aW9uKGEsYyxkKXtyZXR1cm4gdGhpcy5nZXRJY29uRGVjaXNpb24oYSxjLGQsImdyZWVuIiwicmVkIil9LGdldEljb246ZnVuY3Rpb24oYSxjLGQpe3JldHVybiB0aGlzLmdldEljb25EZWNpc2lvbihhLGMsZCwiaWNvbnM6YXJyb3ctdXB3YXJkIiwiaWNvbnM6YXJyb3ctZG93bndhcmQiKX0sZ2V0SWNvbkRlY2lzaW9uOmZ1bmN0aW9uKGEsYyxkLGYsZyl7aWYoMD09YSlyZXR1cm4iIjtjb25zdCBsPXRoaXMuaW5mZXJlbmNlc1thXVtkXVtjXS5sYWJlbDtjPXRoaXMuaW5mZXJlbmNlc1thXVtkXVtjXS5zY29yZTthPXRoaXMuaW5mZXJlbmNlc1thLTFdW2RdO2ZvcihkPTA7ZDxhLmxlbmd0aDtkKyspaWYoYVtkXS5sYWJlbD09bCl7aWYoYVtkXS5zY29yZT5jKXJldHVybiBnOwppZihhW2RdLnNjb3JlPGMpYnJlYWs7cmV0dXJuIiJ9cmV0dXJuIGZ9LGdldFJ1bk51bWJlcjpmdW5jdGlvbihhKXtyZXR1cm4gYSsxfSxnZXRNb2RlbE5hbWU6ZnVuY3Rpb24oYSxjKXtyZXR1cm4gYVtjXX0sZ2V0TWFya2VyQ2xhc3M6ZnVuY3Rpb24oYSxjLGQpe3JldHVybiJtYXJrZXIiKyhhPT1jLmxlbmd0aC0xPzA9PWQ/IiBtYXJrLW9uZSI6IiBtYXJrLXR3byI6IiIpfSxnZXRSb3dDbGFzczpmdW5jdGlvbihhLGMsZCl7bGV0IGY9InJvdyAiO3JldHVybiBmPWE9PWMubGVuZ3RoLTE/ZisoMD09ZD8iZGFyay1yb3ctb25lIjoiZGFyay1yb3ctdHdvIik6Zisid2hpdGUtcm93In0sZ2V0SW5mZXJlbmNlOmZ1bmN0aW9uKGEpe3JldHVybiBhfSxnZXRQcmludGFibGVTY29yZTpmdW5jdGlvbihhKXtyZXR1cm4gYS50b0ZpeGVkKDMpfSxnZXRQcmludGFibGVEZWx0YTpmdW5jdGlvbihhLGMsZCl7aWYoMD09YSlyZXR1cm4iIjtjb25zdCBmPXRoaXMuaW5mZXJlbmNlc1thXVtkXVtjXS5sYWJlbDsKYz10aGlzLmluZmVyZW5jZXNbYV1bZF1bY10uc2NvcmU7YT10aGlzLmluZmVyZW5jZXNbYS0xXVtkXTtmb3IoZD0wO2Q8YS5sZW5ndGg7ZCsrKWlmKGFbZF0ubGFiZWw9PWYpcmV0dXJuKGMtYVtkXS5zY29yZSkudG9GaXhlZCg2KTtyZXR1cm4iIn0sZ2V0SW5mZXJlbmNlTGlzdDpmdW5jdGlvbihhLGMpe3JldHVybiBhLnNsaWNlKDAsYyl9fSk7Cjwvc2NyaXB0Pgo8L2RvbS1tb2R1bGU+CgoKCgoKCgoKCgoKCgoKPHNjcmlwdD4vL35+V0VCUEFUSH5+L2ZhY2V0cy1kaXZlL2xpYi9ib3VuZGVkLW9iamVjdC5qcwovKgoKIENvcHlyaWdodCAyMDE3IEdvb2dsZSBJbmMuCgogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKCiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCgogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiovCnZhciBHbTsoZnVuY3Rpb24oYSl7YVthLkJvdHRvbT0wXT0iQm90dG9tIjthW2EuTGVmdD0xXT0iTGVmdCI7YVthLlJpZ2h0PTJdPSJSaWdodCI7YVthLlRvcD0zXT0iVG9wIn0pKEdtfHwoR209e30pKTsKY2xhc3MgSG17c2hvdWxkQmVWaXNpYmxlKGEsYyxkLGYpe2lmKHZvaWQgMCE9PXRoaXMubWluU2NhbGUpcmV0dXJuIHRoaXMuc2NhbGVEb3dufHxjPj10aGlzLm1pblNjYWxlO2lmKCF0aGlzLmJvdW5kaW5nQm94KXJldHVybiEwO2NvbnN0IGc9dGhpcy5ib3VuZGluZ0JveDtpZihnLmxlZnQ+ZC54K2YucmlnaHR8fGcucmlnaHQ8ZC54K2YubGVmdHx8Zy5ib3R0b20+ZC55K2YudG9wfHxnLnRvcDxkLnkrZi5ib3R0b20pcmV0dXJuITE7Zj10aGlzLmVsZW1lbnRNYXJnaW58fHtib3R0b206MCxsZWZ0OjAscmlnaHQ6MCx0b3A6MH07ZD12b2lkIDA9PT10aGlzLndpZHRoP2EuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGgrZi5sZWZ0K2YucmlnaHQ6dGhpcy53aWR0aDthPXZvaWQgMD09PXRoaXMuaGVpZ2h0P2EuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0K2YudG9wK2YuYm90dG9tOnRoaXMuaGVpZ2h0O2Y9aXNGaW5pdGUoZy50b3ApJiZpc0Zpbml0ZShnLmJvdHRvbSk/CmcudG9wLWcuYm90dG9tOkluZmluaXR5O3JldHVybihpc0Zpbml0ZShnLmxlZnQpJiZpc0Zpbml0ZShnLnJpZ2h0KT9nLnJpZ2h0LWcubGVmdDpJbmZpbml0eSkqYz49ZCYmZipjPj1hfX07Cjwvc2NyaXB0PgoKPHNjcmlwdD4vL35+V0VCUEFUSH5+L2ZhY2V0cy1kaXZlL2xpYi9zb3J0aW5nLmpzCmZ1bmN0aW9uIEltKGEsYyl7cmV0dXJuIG51bGwhPT1hJiZ2b2lkIDAhPT1hfHxudWxsIT09YyYmdm9pZCAwIT09Yz9udWxsPT09YXx8dm9pZCAwPT09YT8tMTpudWxsPT09Y3x8dm9pZCAwPT09Yz8xOiJudW1iZXIiPT09dHlwZW9mIGEmJiJudW1iZXIiPT09dHlwZW9mIGM/aXNOYU4oYSkmJmlzTmFOKGMpPzA6aXNOYU4oYSk/LTE6aXNOYU4oYyk/MTphLWM6InN0cmluZyIhPT10eXBlb2YgYT8tMToic3RyaW5nIiE9PXR5cGVvZiBjPzE6YS5sb2NhbGVDb21wYXJlKGMpOmE9PT1jPzA6dm9pZCAwPT09YT8tMToxfQpmdW5jdGlvbiBKbShhLGMpe3JldHVybiBudWxsIT09YSYmdm9pZCAwIT09YXx8bnVsbCE9PWMmJnZvaWQgMCE9PWM/bnVsbD09PWF8fHZvaWQgMD09PWE/LTE6bnVsbD09PWN8fHZvaWQgMD09PWM/MToibnVtYmVyIj09PXR5cGVvZiBhJiYibnVtYmVyIj09PXR5cGVvZiBjP2lzTmFOKGEpJiZpc05hTihjKT8wOmlzTmFOKGEpPy0xOmlzTmFOKGMpPzE6Yy1hOiJzdHJpbmciIT09dHlwZW9mIGE/LTE6InN0cmluZyIhPT10eXBlb2YgYz8xOi1hLmxvY2FsZUNvbXBhcmUoYyk6YT09PWM/MDp2b2lkIDA9PT1hPy0xOjF9CmZ1bmN0aW9uIEttKGEsYyl7cmV0dXJuIG51bGwhPT1hJiZ2b2lkIDAhPT1hfHxudWxsIT09YyYmdm9pZCAwIT09Yz9udWxsPT09YXx8dm9pZCAwPT09YT8tMTpudWxsPT09Y3x8dm9pZCAwPT09Yz8xOiJzdHJpbmciPT09dHlwZW9mIGEmJiJzdHJpbmciPT09dHlwZW9mIGM/YS5sb2NhbGVDb21wYXJlKGMpOiJudW1iZXIiIT09dHlwZW9mIGE/LTE6Im51bWJlciIhPT10eXBlb2YgYz8xOmlzTmFOKGEpJiZpc05hTihjKT8wOmlzTmFOKGEpPy0xOmlzTmFOKGMpPzE6YS1jOmE9PT1jPzA6dm9pZCAwPT09YT8tMToxfTsKPC9zY3JpcHQ+Cgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vZmFjZXRzLWRpdmUvbGliL2dyaWQuanMKY29uc3QgTG09KGEsYyxkLGYpPT57YT1NYXRoLmZsb29yKDFFLTYrZC5taW5XaWR0aC9mLml0ZW1Bc3BlY3RSYXRpbyk7cmV0dXJuIDE8YT9jJWEvKGEtMSk6MH0sTW09KGEsYyxkLGYpPT57YT1NYXRoLmZsb29yKDFFLTYrZC5taW5XaWR0aC9mLml0ZW1Bc3BlY3RSYXRpbyk7ZD1NYXRoLmNlaWwoZC5pdGVtcy5sZW5ndGgvYSk7cmV0dXJuIDE8ZD9NYXRoLmZsb29yKGMvYSkvKGQtMSk6MH0sTm09KGEsYyk9Pntjb25zdCBkPSJyaWdodCI9PT1jPzE6Im1pZGRsZSI9PT1jPy41OjAsZj0idG9wIj09PWE/MToibWlkZGxlIj09PWE/LjU6MDtyZXR1cm4oZyxsLGssbSk9Pntjb25zdCBwPWsuaW5uZXJXaWR0aC1tLml0ZW1Bc3BlY3RSYXRpbyxxPWsuaW5uZXJIZWlnaHQtMTtyZXR1cm57eDpMbShnLGwsayxtKS9wKihrLm1pbldpZHRoLW0uaXRlbUFzcGVjdFJhdGlvKStkKihrLmlubmVyV2lkdGgtay5taW5XaWR0aCkvcCx5Ok1tKGcsbCxrLG0pL3EqKGsubWluSGVpZ2h0LTEpK2YqKGsuaW5uZXJIZWlnaHQtCmsubWluSGVpZ2h0KS9xfX19LE9tPU5tKCJib3R0b20iLCJsZWZ0Iik7dmFyIFBtOyhmdW5jdGlvbihhKXthW2EuVGlnaHQ9MF09IlRpZ2h0IjthW2EuVW5pZm9ybT0xXT0iVW5pZm9ybSJ9KShQbXx8KFBtPXt9KSk7CmNsYXNzIFFte2NvbnN0cnVjdG9yKGEpe3RoaXMuaXRlbXM9YTt0aGlzLmNlbGxNYXJnaW49dGhpcy5pdGVtQXNwZWN0UmF0aW89MTt0aGlzLmNlbGxQYWRkaW5nPXtib3R0b206MCxsZWZ0OjAscmlnaHQ6MCx0b3A6MH07dGhpcy50YXJnZXRHcmlkQXNwZWN0UmF0aW89MTt0aGlzLm1pbkNlbGxBc3BlY3RSYXRpbz0wO3RoaXMubWF4Q2VsbEFzcGVjdFJhdGlvPUluZmluaXR5O3RoaXMudmVydGljYWxGYWNldD0oKT0+bnVsbDt0aGlzLmhvcml6b250YWxGYWNldD0oKT0+bnVsbDt0aGlzLnZlcnRpY2FsS2V5Q29tcGFyZT1KbTt0aGlzLmhvcml6b250YWxLZXlDb21wYXJlPUltO3RoaXMudmVydGljYWxLZXlzPVtdO3RoaXMudmVydGljYWxLZXlzSGFzaD17fTt0aGlzLmhvcml6b250YWxLZXlzPVtdO3RoaXMuaG9yaXpvbnRhbEtleXNIYXNoPXt9O3RoaXMuY2VsbHM9e307dGhpcy5oZWlnaHQ9dGhpcy53aWR0aD10aGlzLmxvbmdlc3RDZWxsTGVuZ3RoPTA7dGhpcy5pdGVtUG9zaXRpb25TZXR0ZXI9CihjLGQsZik9PntjLng9ZDtjLnk9Zn07dGhpcy5jb21wdXRlSXRlbVBvc2l0aW9uPU9tO3RoaXMuaG9yaXpvbnRhbEdyaWRBbGlnbm1lbnQ9dGhpcy52ZXJ0aWNhbEdyaWRBbGlnbm1lbnQ9UG0uVGlnaHQ7dGhpcy5jZWxsSXRlbUNvbXBhcmF0b3I9bnVsbH1jbGVhcigpe3RoaXMudmVydGljYWxLZXlzPVtdO3RoaXMudmVydGljYWxLZXlzSGFzaD17fTt0aGlzLmhvcml6b250YWxLZXlzPVtdO3RoaXMuaG9yaXpvbnRhbEtleXNIYXNoPXt9O3RoaXMuY2VsbHM9e307dGhpcy5oZWlnaHQ9dGhpcy53aWR0aD10aGlzLmxvbmdlc3RDZWxsTGVuZ3RoPTB9YXJyYW5nZSgpe3RoaXMuZmFjZXRJdGVtc0ludG9DZWxscygpO3ZhciBhPXRoaXMuY29tcHV0ZU9wdGltYWxDZWxsQXNwZWN0UmF0aW8odGhpcy50YXJnZXRHcmlkQXNwZWN0UmF0aW8pLGM9TWF0aC5taW4odGhpcy5tYXhDZWxsQXNwZWN0UmF0aW8sTWF0aC5tYXgodGhpcy5taW5DZWxsQXNwZWN0UmF0aW8sYSkpO2E9W107Y29uc3QgZD0KW107Zm9yKHZhciBmPTA7Zjx0aGlzLnZlcnRpY2FsS2V5cy5sZW5ndGg7ZisrKWZvcih2YXIgZz0wO2c8dGhpcy5ob3Jpem9udGFsS2V5cy5sZW5ndGg7ZysrKXt2YXIgbD10aGlzLmdldE9yQ3JlYXRlQ2VsbCh0aGlzLnZlcnRpY2FsS2V5c1tmXSx0aGlzLmhvcml6b250YWxLZXlzW2ddKTtbbC5taW5XaWR0aCxsLm1pbkhlaWdodF09dGhpcy5jb21wdXRlQ2VsbERpbWVuc2lvbnMoYyxsLml0ZW1zLmxlbmd0aCk7YVtmXT1NYXRoLm1heChhW2ZdfHwwLGwubWluSGVpZ2h0KTtkW2ddPU1hdGgubWF4KGRbZ118fDAsbC5taW5XaWR0aCl9Zm9yKGM9MDtjPHRoaXMudmVydGljYWxLZXlzLmxlbmd0aDtjKyspZm9yKGY9MDtmPHRoaXMuaG9yaXpvbnRhbEtleXMubGVuZ3RoO2YrKylnPXRoaXMuZ2V0Q2VsbCh0aGlzLnZlcnRpY2FsS2V5c1tjXSx0aGlzLmhvcml6b250YWxLZXlzW2ZdKSxjPHRoaXMudmVydGljYWxLZXlzLmxlbmd0aC0xJiYoZy5zaWJsaW5ncy5hYm92ZT10aGlzLmdldENlbGwodGhpcy52ZXJ0aWNhbEtleXNbYysKMV0sdGhpcy5ob3Jpem9udGFsS2V5c1tmXSkpLDA8YyYmKGcuc2libGluZ3MuYmVsb3c9dGhpcy5nZXRDZWxsKHRoaXMudmVydGljYWxLZXlzW2MtMV0sdGhpcy5ob3Jpem9udGFsS2V5c1tmXSkpLDA8ZiYmKGcuc2libGluZ3MubGVmdD10aGlzLmdldENlbGwodGhpcy52ZXJ0aWNhbEtleXNbY10sdGhpcy5ob3Jpem9udGFsS2V5c1tmLTFdKSksZjx0aGlzLmhvcml6b250YWxLZXlzLmxlbmd0aC0xJiYoZy5zaWJsaW5ncy5yaWdodD10aGlzLmdldENlbGwodGhpcy52ZXJ0aWNhbEtleXNbY10sdGhpcy5ob3Jpem9udGFsS2V5c1tmKzFdKSk7aWYodGhpcy52ZXJ0aWNhbEdyaWRBbGlnbm1lbnQ9PT1QbS5Vbmlmb3JtKWZvcihjPU1hdGgubWF4KC4uLmEpLGY9MDtmPGEubGVuZ3RoO2YrKylhW2ZdPWM7aWYodGhpcy5ob3Jpem9udGFsR3JpZEFsaWdubWVudD09PVBtLlVuaWZvcm0pZm9yKGM9TWF0aC5tYXgoLi4uZCksZj0wO2Y8ZC5sZW5ndGg7ZisrKWRbZl09Yztmb3IoYz0wO2M8dGhpcy52ZXJ0aWNhbEtleXMubGVuZ3RoO2MrKylmb3IoZj0KMDtmPHRoaXMuaG9yaXpvbnRhbEtleXMubGVuZ3RoO2YrKylnPXRoaXMuZ2V0Q2VsbCh0aGlzLnZlcnRpY2FsS2V5c1tjXSx0aGlzLmhvcml6b250YWxLZXlzW2ZdKSxnLmhlaWdodD1hW2NdLGcud2lkdGg9ZFtmXSxnLmlubmVySGVpZ2h0PWcuaGVpZ2h0LXRoaXMuY2VsbFBhZGRpbmcudG9wLXRoaXMuY2VsbFBhZGRpbmcuYm90dG9tLGcuaW5uZXJXaWR0aD1nLndpZHRoLXRoaXMuY2VsbFBhZGRpbmcubGVmdC10aGlzLmNlbGxQYWRkaW5nLnJpZ2h0O2M9dGhpcy5jZWxsTWFyZ2luKnRoaXMuaXRlbUFzcGVjdFJhdGlvO2ZvcihmPTA7Zjx0aGlzLnZlcnRpY2FsS2V5cy5sZW5ndGg7ZisrKWZvcihnPTA7Zzx0aGlzLmhvcml6b250YWxLZXlzLmxlbmd0aDtnKyspbD10aGlzLmdldENlbGwodGhpcy52ZXJ0aWNhbEtleXNbZl0sdGhpcy5ob3Jpem9udGFsS2V5c1tnXSksbC55PWY/dGhpcy5nZXRDZWxsKHRoaXMudmVydGljYWxLZXlzW2YtMV0sdGhpcy5ob3Jpem9udGFsS2V5c1tnXSkueSsKYVtmLTFdK2M6MCxsLmNvbnRlbnRZPWwueSt0aGlzLmNlbGxQYWRkaW5nLmJvdHRvbSxsLng9Zz90aGlzLmdldENlbGwodGhpcy52ZXJ0aWNhbEtleXNbZl0sdGhpcy5ob3Jpem9udGFsS2V5c1tnLTFdKS54K2RbZy0xXStjOjAsbC5jb250ZW50WD1sLngrdGhpcy5jZWxsUGFkZGluZy5sZWZ0O3RoaXMuZWFjaENlbGwoaz0+e3RoaXMud2lkdGg9TWF0aC5tYXgodGhpcy53aWR0aCxrLngray53aWR0aCk7dGhpcy5oZWlnaHQ9TWF0aC5tYXgodGhpcy5oZWlnaHQsay55K2suaGVpZ2h0KX0pO3RoaXMucG9zaXRpb25JdGVtcygpfXBvc2l0aW9uSXRlbXMoKXt0aGlzLmVhY2hDZWxsKGE9Pntjb25zdCBjPU1hdGgubWF4KDAsYS5pbm5lcldpZHRoLXRoaXMuaXRlbUFzcGVjdFJhdGlvKSxkPU1hdGgubWF4KDAsYS5pbm5lckhlaWdodC0xKSxmPWEuaXRlbXMuc2xpY2UoMCk7dGhpcy5jZWxsSXRlbUNvbXBhcmF0b3ImJmYuc29ydCh0aGlzLmNlbGxJdGVtQ29tcGFyYXRvcik7Zm9yKGxldCBnPQowO2c8Zi5sZW5ndGg7ZysrKXtjb25zdCBsPXRoaXMuY29tcHV0ZUl0ZW1Qb3NpdGlvbihmW2ddLGcsYSx0aGlzKTt0aGlzLml0ZW1Qb3NpdGlvblNldHRlcihmW2ddLGEuY29udGVudFgrKCFsfHxpc05hTihsLngpPzA6TWF0aC5tYXgoMCxNYXRoLm1pbigxLGwueCkpKSpjLGEuY29udGVudFkrKCFsfHxpc05hTihsLnkpPzA6TWF0aC5tYXgoMCxNYXRoLm1pbigxLGwueSkpKSpkKX19KX1mYWNldEl0ZW1zSW50b0NlbGxzKCl7dGhpcy5jbGVhcigpO3RoaXMuZWFjaEl0ZW0oYT0+e2NvbnN0IGM9dGhpcy5nZXRPckNyZWF0ZUNlbGwodGhpcy52ZXJ0aWNhbEZhY2V0KGEpLHRoaXMuaG9yaXpvbnRhbEZhY2V0KGEpKTtjLml0ZW1zLnB1c2goYSk7dGhpcy5sb25nZXN0Q2VsbExlbmd0aD1NYXRoLm1heCh0aGlzLmxvbmdlc3RDZWxsTGVuZ3RoLGMuaXRlbXMubGVuZ3RoKX0pO2Zvcihjb25zdCBhIGluIHRoaXMudmVydGljYWxLZXlzSGFzaCl0aGlzLnZlcnRpY2FsS2V5cy5wdXNoKHRoaXMudmVydGljYWxLZXlzSGFzaFthXSk7CnRoaXMudmVydGljYWxLZXlzLnNvcnQodGhpcy52ZXJ0aWNhbEtleUNvbXBhcmUpO2Zvcihjb25zdCBhIGluIHRoaXMuaG9yaXpvbnRhbEtleXNIYXNoKXRoaXMuaG9yaXpvbnRhbEtleXMucHVzaCh0aGlzLmhvcml6b250YWxLZXlzSGFzaFthXSk7dGhpcy5ob3Jpem9udGFsS2V5cy5zb3J0KHRoaXMuaG9yaXpvbnRhbEtleUNvbXBhcmUpfWVhY2hJdGVtKGEpe2lmKHRoaXMuaXRlbXMpZm9yKGxldCBjPTA7Yzx0aGlzLml0ZW1zLmxlbmd0aDtjKyspYS5jYWxsKHRoaXMsdGhpcy5pdGVtc1tjXSl9ZWFjaENlbGwoYSl7Zm9yKGNvbnN0IGMgaW4gdGhpcy5jZWxscylhLmNhbGwodGhpcyx0aGlzLmNlbGxzW2NdKX1nZXRDb21wb3VuZEtleShhLGMpe3JldHVybiB0eXBlb2YgYSsiXHUwMDFmIithKyJcdTAwMWUiK3R5cGVvZiBjKyJcdTAwMWYiK2N9Z2V0Q2VsbChhLGMpe2E9dGhpcy5nZXRDb21wb3VuZEtleShhLGMpO3JldHVybiBhIGluIHRoaXMuY2VsbHM/dGhpcy5jZWxsc1thXTpudWxsfWdldENlbGxzKCl7cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuY2VsbHMpLm1hcChhPT4KdGhpcy5jZWxsc1thXSl9Z2V0T3JDcmVhdGVDZWxsKGEsYyl7bGV0IGQ9dGhpcy5nZXRDZWxsKGEsYyk7aWYoZClyZXR1cm4gZDt0aGlzLmFkZFZlcnRpY2FsS2V5KGEpO3RoaXMuYWRkSG9yaXpvbnRhbEtleShjKTtjb25zdCBmPXRoaXMuZ2V0Q29tcG91bmRLZXkoYSxjKTtkPXt2ZXJ0aWNhbEtleTphLGhvcml6b250YWxLZXk6Yyxjb21wb3VuZEtleTpmLGl0ZW1zOltdLHNpYmxpbmdzOnt9fTtyZXR1cm4gdGhpcy5jZWxsc1tmXT1kfWdldFJvdyhhKXtjb25zdCBjPVtdO2ZvcihsZXQgZD0wO2Q8dGhpcy5ob3Jpem9udGFsS2V5cy5sZW5ndGg7ZCsrKXtjb25zdCBmPXRoaXMuZ2V0Q2VsbChhLHRoaXMuaG9yaXpvbnRhbEtleXNbZF0pO2YmJmMucHVzaChmKX1yZXR1cm4gY31nZXRDb2x1bW4oYSl7Y29uc3QgYz1bXTtmb3IobGV0IGQ9MDtkPHRoaXMudmVydGljYWxLZXlzLmxlbmd0aDtkKyspe2NvbnN0IGY9dGhpcy5nZXRDZWxsKHRoaXMudmVydGljYWxLZXlzW2RdLGEpO2YmJmMucHVzaChmKX1yZXR1cm4gY31hZGRWZXJ0aWNhbEtleShhKXtjb25zdCBjPQp0eXBlb2YgYSsiXHUwMDFmIithO2MgaW4gdGhpcy52ZXJ0aWNhbEtleXNIYXNofHwodGhpcy52ZXJ0aWNhbEtleXNIYXNoW2NdPWEpfWFkZEhvcml6b250YWxLZXkoYSl7Y29uc3QgYz10eXBlb2YgYSsiXHUwMDFmIithO2MgaW4gdGhpcy5ob3Jpem9udGFsS2V5c0hhc2h8fCh0aGlzLmhvcml6b250YWxLZXlzSGFzaFtjXT1hKX1jb21wdXRlT3B0aW1hbENlbGxBc3BlY3RSYXRpbyhhKXt2YXIgYz10aGlzLnZlcnRpY2FsS2V5cy5sZW5ndGgsZD10aGlzLmhvcml6b250YWxLZXlzLmxlbmd0aDtpZighY3x8IWQpcmV0dXJuIDE7bGV0IGY9Yy9kLGc9ZixsPUluZmluaXR5LGs9MCxtPUluZmluaXR5O2M9TWF0aC5taW4oMjAsTWF0aC5tYXgoYyxkLHRoaXMubG9uZ2VzdENlbGxMZW5ndGgpKTtmb3IoZD0wO2Q8Yzspe2QrKztjb25zdCBwPXRoaXMuY29tcHV0ZUdyaWRBc3BlY3RSYXRpbyhmKSxxPU1hdGguYWJzKDEtcC9hKTtxPGwmJihnPWYsbD1xKTtpZiguMDAxPnEpYnJlYWs7cD5hPyhtPQpmLGYtPShtLWspLzIpOihrPWYsZj1pc0Zpbml0ZShtKT9mKyhtLWspLzI6MipmKX1yZXR1cm4gZ31jb21wdXRlR3JpZEFzcGVjdFJhdGlvKGEpe2NvbnN0IGM9dGhpcy52ZXJ0aWNhbEtleXMubGVuZ3RoLGQ9dGhpcy5ob3Jpem9udGFsS2V5cy5sZW5ndGg7bGV0IGY9LUluZmluaXR5LGc9LUluZmluaXR5LGw9LUluZmluaXR5LGs9LUluZmluaXR5O2NvbnN0IG09W107Zm9yKGxldCBwPTA7cDxjO3ArKyl7bVtwXT1bXTtmb3IobGV0IHE9MDtxPGQ7cSsrKXtjb25zdCByPW1bcF1bcV09e3dpZHRoOnE/bVtwXVtxLTFdLndpZHRoOjAsaGVpZ2h0OnA/bVtwLTFdW3FdLmhlaWdodDowfSx0PXRoaXMuZ2V0Q2VsbCh0aGlzLnZlcnRpY2FsS2V5c1twXSx0aGlzLmhvcml6b250YWxLZXlzW3FdKTtpZighdHx8IXQuaXRlbXN8fCF0Lml0ZW1zLmxlbmd0aCljb250aW51ZTtjb25zdCBbdixBXT10aGlzLmNvbXB1dGVDZWxsRGltZW5zaW9ucyhhLHQuaXRlbXMubGVuZ3RoKTtyLndpZHRoKz12O3IuaGVpZ2h0Kz0KQTtmPU1hdGgubWF4KGYsci53aWR0aCk7Zz1NYXRoLm1heChnLEEpO2w9TWF0aC5tYXgobCx2KTtrPU1hdGgubWF4KGssci5oZWlnaHQpfX10aGlzLnZlcnRpY2FsR3JpZEFsaWdubWVudD09PVBtLlVuaWZvcm0mJihrPWcqYyk7dGhpcy5ob3Jpem9udGFsR3JpZEFsaWdubWVudD09PVBtLlVuaWZvcm0mJihmPWwqZCk7YT10aGlzLmNlbGxNYXJnaW4qdGhpcy5pdGVtQXNwZWN0UmF0aW87cmV0dXJuKGYrYSooZC0xKSkvKGsrYSooYy0xKSl9Y29tcHV0ZUNlbGxEaW1lbnNpb25zKGEsYyl7Y29uc3QgZD1bdGhpcy5pdGVtQXNwZWN0UmF0aW8qKHRoaXMuY2VsbFBhZGRpbmcubGVmdCt0aGlzLmNlbGxQYWRkaW5nLnJpZ2h0KSx0aGlzLml0ZW1Bc3BlY3RSYXRpbyoodGhpcy5jZWxsUGFkZGluZy50b3ArdGhpcy5jZWxsUGFkZGluZy5ib3R0b20pXTtpZighYylyZXR1cm4gZDthPU1hdGgubWluKGMsTWF0aC5jZWlsKE1hdGguc3FydChhKmMpL3RoaXMuaXRlbUFzcGVjdFJhdGlvKSk7ZFswXSs9CnRoaXMuaXRlbUFzcGVjdFJhdGlvKmE7ZFsxXSs9TWF0aC5jZWlsKGMvYSk7cmV0dXJuIGR9fTsKPC9zY3JpcHQ+Cgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vZmFjZXRzLWRpdmUvbGliL2F4aXMuanMKY2xhc3MgUm0gZXh0ZW5kcyBIbXtjb25zdHJ1Y3RvcihhLGMpe3N1cGVyKCk7dGhpcy5zaWRlPWE7dGhpcy5jZWxsPWM7c3dpdGNoKGEpe2Nhc2UgR20uTGVmdDp0aGlzLm1pblNjYWxlPTMwL2MuaW5uZXJIZWlnaHQ7Zm9yKGE9Yy5zaWJsaW5ncy5sZWZ0OyEoIWF8fGEuaXRlbXMubGVuZ3RofHxhLnNpYmxpbmdzLmFib3ZlJiZhLnNpYmxpbmdzLmFib3ZlLml0ZW1zLmxlbmd0aCk7KWE9YS5zaWJsaW5ncy5sZWZ0O2EmJih0aGlzLm1pblNjYWxlPU1hdGgubWF4KHRoaXMubWluU2NhbGUsMzkuMi8oYy5jb250ZW50WC0oYS5jb250ZW50WCthLmlubmVyV2lkdGgpKSkpO2JyZWFrO2Nhc2UgR20uQm90dG9tOnRoaXMubWluU2NhbGU9MzAvYy5pbm5lcldpZHRoO2ZvcihhPWMuc2libGluZ3MuYmVsb3c7ISghYXx8YS5pdGVtcy5sZW5ndGh8fGEuc2libGluZ3MucmlnaHQmJmEuc2libGluZ3MucmlnaHQuaXRlbXMubGVuZ3RoKTspYT1hLnNpYmxpbmdzLmJlbG93O2EmJih0aGlzLm1pblNjYWxlPQpNYXRoLm1heCh0aGlzLm1pblNjYWxlLDM5LjIvKGMuY29udGVudFktKGEuY29udGVudFkrYS5pbm5lckhlaWdodCkpKSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBFcnJvcigiQXhlcyBmb3Igc3BlY2lmaWVkIHNpZGUgYXJlIG5vdCBpbXBsZW1lbnRlZC4iKTt9fXN0cm9rZVdpZHRoKGEpe3JldHVybiAxLjIvYX1wYXRoKGEpe2NvbnN0IGM9NC9hLGQ9Ni9hO3JldHVybiB0aGlzLnNpZGU9PT1HbS5MZWZ0P2BNICR7dGhpcy5jZWxsLmNvbnRlbnRYLWMtZH0sJHt0aGlzLmNlbGwuY29udGVudFkrLjYvYX0gaCAke2R9IHYgJHt0aGlzLmNlbGwuaW5uZXJIZWlnaHQtMS4yL2F9IGggLSR7ZH1gOnRoaXMuc2lkZT09PUdtLkJvdHRvbT9gTSAke3RoaXMuY2VsbC5jb250ZW50WCsuNi9hfSwke3RoaXMuY2VsbC5jb250ZW50WS1jLWR9IHYgJHtkfSBoICR7dGhpcy5jZWxsLmlubmVyV2lkdGgtMS4yL2F9IHYgLSR7ZH1gOiIifWtleSgpe3JldHVybmAke3RoaXMuY2VsbC5jb21wb3VuZEtleX0tJHt0aGlzLnNpZGV9YH19CjsKPC9zY3JpcHQ+CgoKPHNjcmlwdD4vL35+V0VCUEFUSH5+L2ZhY2V0cy1kaXZlL2xpYi9kYXRhLWV4YW1wbGUuanMKPC9zY3JpcHQ+CgoKCjxzY3JpcHQ+Ly9+fldFQlBBVEh+fi9mYWNldHMtZGl2ZS9saWIvbGFiZWwuanMKPC9zY3JpcHQ+Cgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vZmFjZXRzLWRpdmUvbGliL2xheW91dC5qcwpjbGFzcyBTbXtjb25zdHJ1Y3Rvcigpe3RoaXMuZ3JpZD17Ym90dG9tOjAsbGVmdDowLHJpZ2h0OjAsdG9wOjB9O3RoaXMudmlld3BvcnQ9e2hlaWdodDowLHdpZHRoOjB9O3RoaXMucGFkZGluZz17Ym90dG9tOjAsbGVmdDowLHJpZ2h0OjAsdG9wOjB9fWNvbXB1dGVTY2FsZSgpe2NvbnN0IGE9dGhpcy52aWV3cG9ydC53aWR0aC10aGlzLnBhZGRpbmcubGVmdC10aGlzLnBhZGRpbmcucmlnaHQsYz10aGlzLnZpZXdwb3J0LmhlaWdodC10aGlzLnBhZGRpbmcudG9wLXRoaXMucGFkZGluZy5ib3R0b207aWYoaXNOYU4oYSl8fDA+PWF8fGlzTmFOKGMpfHwwPj1jKXJldHVybiBOYU47Y29uc3QgZD10aGlzLmdyaWQucmlnaHQtdGhpcy5ncmlkLmxlZnQsZj10aGlzLmdyaWQudG9wLXRoaXMuZ3JpZC5ib3R0b207cmV0dXJuIGlzTmFOKGQpfHwwPj1kfHxpc05hTihmKXx8MD49Zj9OYU46YS9jPmQvZj9jL2Y6YS9kfWNvbXB1dGVDYW1lcmEoKXtjb25zdCBhPXRoaXMuY29tcHV0ZVNjYWxlKCk7CmlmKGlzTmFOKGEpfHwwPj1hKXJldHVybntwb3NpdGlvbjp7eDpOYU4seTpOYU59LGZydXN0dW06e2JvdHRvbTpOYU4sbGVmdDpOYU4scmlnaHQ6TmFOLHRvcDpOYU59fTtjb25zdCBjPXRoaXMudmlld3BvcnQud2lkdGgvYSxkPXRoaXMudmlld3BvcnQuaGVpZ2h0L2E7cmV0dXJue3Bvc2l0aW9uOnt4OnRoaXMuZ3JpZC5sZWZ0LShjLSh0aGlzLnBhZGRpbmcubGVmdCt0aGlzLnBhZGRpbmcucmlnaHQpL2EtKHRoaXMuZ3JpZC5yaWdodC10aGlzLmdyaWQubGVmdCkpLzItdGhpcy5wYWRkaW5nLmxlZnQvYSx5OnRoaXMuZ3JpZC50b3ArKGQtKHRoaXMucGFkZGluZy50b3ArdGhpcy5wYWRkaW5nLmJvdHRvbSkvYS0odGhpcy5ncmlkLnRvcC10aGlzLmdyaWQuYm90dG9tKSkvMit0aGlzLnBhZGRpbmcudG9wL2F9LGZydXN0dW06e2JvdHRvbTotZCxsZWZ0OjAscmlnaHQ6Yyx0b3A6MH19fXJlZHVjZVBhZGRpbmdUb0ZpdFdpZHRoKGEpe2lmKDIwMD5hKXRoaXMucGFkZGluZy5sZWZ0PTAsdGhpcy5wYWRkaW5nLnJpZ2h0PQowO2Vsc2UgaWYodGhpcy5wYWRkaW5nLmxlZnQrdGhpcy5wYWRkaW5nLnJpZ2h0KzIwMD5hKXtjb25zdCBjPXRoaXMucGFkZGluZy5sZWZ0K3RoaXMucGFkZGluZy5yaWdodDthLT0yMDA7dGhpcy5wYWRkaW5nLmxlZnQ9dGhpcy5wYWRkaW5nLmxlZnQvYyphfHwwO3RoaXMucGFkZGluZy5yaWdodD10aGlzLnBhZGRpbmcucmlnaHQvYyphfHwwfX1yZWR1Y2VQYWRkaW5nVG9GaXRIZWlnaHQoYSl7aWYoMjAwPmEpdGhpcy5wYWRkaW5nLnRvcD0wLHRoaXMucGFkZGluZy5ib3R0b209MDtlbHNlIGlmKHRoaXMucGFkZGluZy50b3ArdGhpcy5wYWRkaW5nLmJvdHRvbSsyMDA+YSl7Y29uc3QgYz10aGlzLnBhZGRpbmcudG9wK3RoaXMucGFkZGluZy5ib3R0b207YS09MjAwO3RoaXMucGFkZGluZy50b3A9dGhpcy5wYWRkaW5nLnRvcC9jKmF8fDA7dGhpcy5wYWRkaW5nLmJvdHRvbT10aGlzLnBhZGRpbmcuYm90dG9tL2MqYXx8MH19fTsKPC9zY3JpcHQ+CgoKPHNjcmlwdD4vL35+V0VCUEFUSH5+L2ZhY2V0cy1kaXZlL2xpYi90ZXh0LmpzCnZhciBUbTsoZnVuY3Rpb24oYSl7YVthLkxlZnQ9MF09IkxlZnQiO2FbYS5SaWdodD0xXT0iUmlnaHQiO2FbYS5DZW50ZXI9Ml09IkNlbnRlciJ9KShUbXx8KFRtPXt9KSk7dmFyIFVtOyhmdW5jdGlvbihhKXthW2EuVG9wPTBdPSJUb3AiO2FbYS5Cb3R0b209MV09IkJvdHRvbSI7YVthLk1pZGRsZT0yXT0iTWlkZGxlIn0pKFVtfHwoVW09e30pKTtjb25zdCBWbT17eDowLHk6MCxnbHlwaEFzcGVjdFJhdGlvOi42LGxpbmVIZWlnaHQ6MS4xLGhvcml6b250YWxBbGlnbjpUbS5DZW50ZXIsdmVydGljYWxBbGlnbjpVbS5NaWRkbGV9OwpjbGFzcyBXbXtjb25zdHJ1Y3RvcihhKXt0aGlzLnNldHRpbmdzPU9iamVjdC5hc3NpZ24oe30sVm0sYSl9Zml0KGEpe2E9YS50cmltKCk7Y29uc3Qge21heDpjLHNlZ21lbnRzOmR9PXRoaXMuc3BsaXQoYSkse2N1dG9mZjpmLHdpZHRoOmcsaGVpZ2h0Omx9PXRoaXMuY29tcHV0ZUN1dG9mZihkLGEubGVuZ3RoLGMpO2E9Zyp0aGlzLnNldHRpbmdzLmdseXBoQXNwZWN0UmF0aW87YT1hL2w+dGhpcy5zZXR0aW5ncy53aWR0aC90aGlzLnNldHRpbmdzLmhlaWdodD90aGlzLnNldHRpbmdzLndpZHRoL2E6dGhpcy5zZXR0aW5ncy5oZWlnaHQvbDtjb25zdCBrPXRoaXMuc2V0dGluZ3MuaG9yaXpvbnRhbEFsaWduPT09VG0uTGVmdD8wOnRoaXMuc2V0dGluZ3MuaG9yaXpvbnRhbEFsaWduPT09VG0uUmlnaHQ/MTouNSxtPU1hdGgubWF4KDAsdGhpcy5zZXR0aW5ncy5oZWlnaHQtbCphKSoodGhpcy5zZXR0aW5ncy52ZXJ0aWNhbEFsaWduPT09VW0uVG9wPzA6dGhpcy5zZXR0aW5ncy52ZXJ0aWNhbEFsaWduPT09ClVtLkJvdHRvbT8xOi41KSxwPXRoaXMud3JhcExpbmVzKGQsZikscT1bXTtmb3IobGV0IHI9MDtyPHAubGVuZ3RoO3IrKyl7Y29uc3Qge3N0YXJ0UG9zOnQsZW5kUG9zOnZ9PXBbcl07bGV0IEE9IiI7Zm9yKGxldCB5PXQ7eTx2O3krKylBKz1kW3ldLnRleHQ7cS5wdXNoKHt0ZXh0OkEseDp0aGlzLnNldHRpbmdzLngraypNYXRoLm1heCgwLHRoaXMuc2V0dGluZ3Mud2lkdGgtQS5sZW5ndGgqdGhpcy5zZXR0aW5ncy5nbHlwaEFzcGVjdFJhdGlvKmEpLHk6dGhpcy5zZXR0aW5ncy55K20rcip0aGlzLnNldHRpbmdzLmxpbmVIZWlnaHQqYX0pfXJldHVybntsaW5lczpxLGZvbnRTaXplOmF9fXNwbGl0KGEpe2NvbnN0IGM9W107bGV0IGQ9MSxmPS9ccy8udGVzdChhLmNoYXJBdCgwKSksZz0wLGw9MDtmb3IoO2Q8PWEubGVuZ3RoOyl7Y29uc3Qgaz1hLmNoYXJBdChkKSxtPS9ccy8udGVzdChrKTtrLmxlbmd0aCYmZj09PW18fChsPU1hdGgubWF4KGwsZC1nKSxjLnB1c2goe3RleHQ6YS5zdWJzdHJpbmcoZywKZCksd2hpdGVzcGFjZTpmfSksZz1kKTtmPW07ZCsrfXJldHVybnttYXg6bCxzZWdtZW50czpjfX1jb21wdXRlVGV4dFJlY3QoYSxjKXtsZXQgZD0wLGY9MCxnPTAsbD0xO2ZvcihsZXQgaz0wO2s8YS5sZW5ndGg7aysrKXtjb25zdCB7dGV4dDptLHdoaXRlc3BhY2U6cH09YVtrXSxxPW0ubGVuZ3RoO2lmKCFwfHxkKXA/ZCtxPD1jP2QrPXE6KGY9ZD0wLGwrPXRoaXMuc2V0dGluZ3MubGluZUhlaWdodCk6ZCtxPD1jP2Y9ZCs9cTooZj9kPWY9cTooZz1NYXRoLm1heChnLHEpLGQ9Zj0wKSxsKz10aGlzLnNldHRpbmdzLmxpbmVIZWlnaHQpLGc9TWF0aC5tYXgoZyxmKX1yZXR1cm57d2lkdGg6ZyxoZWlnaHQ6bH19Y29tcHV0ZUN1dG9mZihhLGMsZCl7Y29uc3QgZj10aGlzLnNldHRpbmdzLndpZHRoL3RoaXMuc2V0dGluZ3MuaGVpZ2h0O2xldCBnPWQrKGMtZCkvMixsPWcsaz1udWxsLG09SW5maW5pdHk7Y29uc3QgcD1NYXRoLm1pbigyMCwoYS5sZW5ndGgrMSkvMik7bGV0IHE9MDtmb3IoO3E8CnA7KXtxKys7Y29uc3Qgcj10aGlzLmNvbXB1dGVUZXh0UmVjdChhLGcpLHQ9ci53aWR0aC9yLmhlaWdodCp0aGlzLnNldHRpbmdzLmdseXBoQXNwZWN0UmF0aW8sdj1NYXRoLmFicygxLXQvZik7djxtJiYobD1nLGs9cixtPXYpO2lmKC4wMT52KWJyZWFrO3Q+Zj9jPWc6ZD1nO2c9ZCsoYy1kKS8yfXJldHVybntjdXRvZmY6bCx3aWR0aDprLndpZHRoLGhlaWdodDprLmhlaWdodH19d3JhcExpbmVzKGEsYyl7Y29uc3QgZD1bXTtsZXQgZj0wLGc9MCxsPTAsaz0wO2ZvcihsZXQgbT0wO208YS5sZW5ndGg7bSsrKXtjb25zdCB7dGV4dDpwLHdoaXRlc3BhY2U6cX09YVttXSxyPXAubGVuZ3RoO3EmJiFsP2Y9Zz1tKzE6cT9sK3I8PWM/bCs9cjooZC5wdXNoKHtzdGFydFBvczpmLGVuZFBvczpnLHRleHRMZW5ndGg6a30pLGw9az0wLGY9Zz1tKzEpOmwrcjw9Yz8oaz1sKz1yLGc9bSsxKTprPyhkLnB1c2goe3N0YXJ0UG9zOmYsZW5kUG9zOmcsdGV4dExlbmd0aDprfSksbD1rPXIsZj1tLGc9bSsKMSk6KGQucHVzaCh7c3RhcnRQb3M6bSxlbmRQb3M6bSsxLHRleHRMZW5ndGg6cn0pLGw9az0wLGY9Zz1tKzEpfWc+ZiYmZC5wdXNoKHtzdGFydFBvczpmLGVuZFBvczpnLHRleHRMZW5ndGg6a30pO3JldHVybiBkfX07Cjwvc2NyaXB0PgoKPHNjcmlwdD4vL35+V0VCUEFUSH5+L3RmLWltcG9ydHMvdGhyZWUuanMKKGZ1bmN0aW9uKGEsYyl7Im9iamVjdCI9PT10eXBlb2YgZXhwb3J0cyYmInVuZGVmaW5lZCIhPT10eXBlb2YgbW9kdWxlP2MoZXhwb3J0cyk6ImZ1bmN0aW9uIj09PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFsiZXhwb3J0cyJdLGMpOihhPWF8fHNlbGYsYyhhLlRIUkVFPXt9KSl9KSh0aGlzLGZ1bmN0aW9uKGEpe2Z1bmN0aW9uIGMoKXt9ZnVuY3Rpb24gZChiLGUpe3RoaXMueD1ifHwwO3RoaXMueT1lfHwwfWZ1bmN0aW9uIGYoYixlLGgsbil7dGhpcy5feD1ifHwwO3RoaXMuX3k9ZXx8MDt0aGlzLl96PWh8fDA7dGhpcy5fdz12b2lkIDAhPT1uP246MX1mdW5jdGlvbiBnKGIsZSxoKXt0aGlzLng9Ynx8MDt0aGlzLnk9ZXx8MDt0aGlzLno9aHx8MH1mdW5jdGlvbiBsKCl7dGhpcy5lbGVtZW50cz1bMSwwLDAsMCwxLDAsMCwwLDFdOzA8YXJndW1lbnRzLmxlbmd0aCYmY29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4MzogdGhlIGNvbnN0cnVjdG9yIG5vIGxvbmdlciByZWFkcyBhcmd1bWVudHMuIHVzZSAuc2V0KCkgaW5zdGVhZC4iKX0KZnVuY3Rpb24gayhiLGUsaCxuLHUsdyx6LEUsSCxJKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiaWQiLHt2YWx1ZTpLbisrfSk7dGhpcy51dWlkPW9iLmdlbmVyYXRlVVVJRCgpO3RoaXMubmFtZT0iIjt0aGlzLmltYWdlPXZvaWQgMCE9PWI/YjprLkRFRkFVTFRfSU1BR0U7dGhpcy5taXBtYXBzPVtdO3RoaXMubWFwcGluZz12b2lkIDAhPT1lP2U6ay5ERUZBVUxUX01BUFBJTkc7dGhpcy53cmFwUz12b2lkIDAhPT1oP2g6MTAwMTt0aGlzLndyYXBUPXZvaWQgMCE9PW4/bjoxMDAxO3RoaXMubWFnRmlsdGVyPXZvaWQgMCE9PXU/dToxMDA2O3RoaXMubWluRmlsdGVyPXZvaWQgMCE9PXc/dzoxMDA4O3RoaXMuYW5pc290cm9weT12b2lkIDAhPT1IP0g6MTt0aGlzLmZvcm1hdD12b2lkIDAhPT16P3o6MTAyMzt0aGlzLnR5cGU9dm9pZCAwIT09RT9FOjEwMDk7dGhpcy5vZmZzZXQ9bmV3IGQoMCwwKTt0aGlzLnJlcGVhdD1uZXcgZCgxLDEpO3RoaXMuY2VudGVyPW5ldyBkKDAsMCk7CnRoaXMucm90YXRpb249MDt0aGlzLm1hdHJpeEF1dG9VcGRhdGU9ITA7dGhpcy5tYXRyaXg9bmV3IGw7dGhpcy5nZW5lcmF0ZU1pcG1hcHM9ITA7dGhpcy5wcmVtdWx0aXBseUFscGhhPSExO3RoaXMuZmxpcFk9ITA7dGhpcy51bnBhY2tBbGlnbm1lbnQ9NDt0aGlzLmVuY29kaW5nPXZvaWQgMCE9PUk/STozRTM7dGhpcy52ZXJzaW9uPTA7dGhpcy5vblVwZGF0ZT1udWxsfWZ1bmN0aW9uIG0oYixlLGgsbil7dGhpcy54PWJ8fDA7dGhpcy55PWV8fDA7dGhpcy56PWh8fDA7dGhpcy53PXZvaWQgMCE9PW4/bjoxfWZ1bmN0aW9uIHAoYixlLGgpe3RoaXMud2lkdGg9Yjt0aGlzLmhlaWdodD1lO3RoaXMuc2Npc3Nvcj1uZXcgbSgwLDAsYixlKTt0aGlzLnNjaXNzb3JUZXN0PSExO3RoaXMudmlld3BvcnQ9bmV3IG0oMCwwLGIsZSk7aD1ofHx7fTt0aGlzLnRleHR1cmU9bmV3IGsodm9pZCAwLHZvaWQgMCxoLndyYXBTLGgud3JhcFQsaC5tYWdGaWx0ZXIsaC5taW5GaWx0ZXIsaC5mb3JtYXQsaC50eXBlLApoLmFuaXNvdHJvcHksaC5lbmNvZGluZyk7dGhpcy50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcz12b2lkIDAhPT1oLmdlbmVyYXRlTWlwbWFwcz9oLmdlbmVyYXRlTWlwbWFwczohMTt0aGlzLnRleHR1cmUubWluRmlsdGVyPXZvaWQgMCE9PWgubWluRmlsdGVyP2gubWluRmlsdGVyOjEwMDY7dGhpcy5kZXB0aEJ1ZmZlcj12b2lkIDAhPT1oLmRlcHRoQnVmZmVyP2guZGVwdGhCdWZmZXI6ITA7dGhpcy5zdGVuY2lsQnVmZmVyPXZvaWQgMCE9PWguc3RlbmNpbEJ1ZmZlcj9oLnN0ZW5jaWxCdWZmZXI6ITA7dGhpcy5kZXB0aFRleHR1cmU9dm9pZCAwIT09aC5kZXB0aFRleHR1cmU/aC5kZXB0aFRleHR1cmU6bnVsbH1mdW5jdGlvbiBxKGIsZSxoKXtwLmNhbGwodGhpcyxiLGUsaCk7dGhpcy5zYW1wbGVzPTR9ZnVuY3Rpb24gcihiLGUsaCl7cC5jYWxsKHRoaXMsYixlLGgpfWZ1bmN0aW9uIHQoYixlLGgsbix1LHcseixFLEgsSSxPLFEpe2suY2FsbCh0aGlzLG51bGwsdyx6LEUsSCxJLG4sdSwKTyxRKTt0aGlzLmltYWdlPXtkYXRhOmIsd2lkdGg6ZSxoZWlnaHQ6aH07dGhpcy5tYWdGaWx0ZXI9dm9pZCAwIT09SD9IOjEwMDM7dGhpcy5taW5GaWx0ZXI9dm9pZCAwIT09ST9JOjEwMDM7dGhpcy5mbGlwWT10aGlzLmdlbmVyYXRlTWlwbWFwcz0hMTt0aGlzLnVucGFja0FsaWdubWVudD0xfWZ1bmN0aW9uIHYoYixlKXt0aGlzLm1pbj12b2lkIDAhPT1iP2I6bmV3IGcoSW5maW5pdHksSW5maW5pdHksSW5maW5pdHkpO3RoaXMubWF4PXZvaWQgMCE9PWU/ZTpuZXcgZygtSW5maW5pdHksLUluZmluaXR5LC1JbmZpbml0eSl9ZnVuY3Rpb24gQShiLGUpe3RoaXMuY2VudGVyPXZvaWQgMCE9PWI/YjpuZXcgZzt0aGlzLnJhZGl1cz12b2lkIDAhPT1lP2U6MH1mdW5jdGlvbiB5KGIsZSl7dGhpcy5ub3JtYWw9dm9pZCAwIT09Yj9iOm5ldyBnKDEsMCwwKTt0aGlzLmNvbnN0YW50PXZvaWQgMCE9PWU/ZTowfWZ1bmN0aW9uIHgoYixlLGgsbix1LHcpe3RoaXMucGxhbmVzPVt2b2lkIDAhPT1iPwpiOm5ldyB5LHZvaWQgMCE9PWU/ZTpuZXcgeSx2b2lkIDAhPT1oP2g6bmV3IHksdm9pZCAwIT09bj9uOm5ldyB5LHZvaWQgMCE9PXU/dTpuZXcgeSx2b2lkIDAhPT13P3c6bmV3IHldfWZ1bmN0aW9uIEMoKXt0aGlzLmVsZW1lbnRzPVsxLDAsMCwwLDAsMSwwLDAsMCwwLDEsMCwwLDAsMCwxXTswPGFyZ3VtZW50cy5sZW5ndGgmJmNvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDQ6IHRoZSBjb25zdHJ1Y3RvciBubyBsb25nZXIgcmVhZHMgYXJndW1lbnRzLiB1c2UgLnNldCgpIGluc3RlYWQuIil9ZnVuY3Rpb24gRihiKXt2YXIgZT17fSxoO2ZvcihoIGluIGIpe2VbaF09e307Zm9yKHZhciBuIGluIGJbaF0pe3ZhciB1PWJbaF1bbl07ZVtoXVtuXT11JiYodS5pc0NvbG9yfHx1LmlzTWF0cml4M3x8dS5pc01hdHJpeDR8fHUuaXNWZWN0b3IyfHx1LmlzVmVjdG9yM3x8dS5pc1ZlY3RvcjR8fHUuaXNUZXh0dXJlKT91LmNsb25lKCk6QXJyYXkuaXNBcnJheSh1KT91LnNsaWNlKCk6dX19cmV0dXJuIGV9CmZ1bmN0aW9uIEQoYil7Zm9yKHZhciBlPXt9LGg9MDtoPGIubGVuZ3RoO2grKyl7dmFyIG49RihiW2hdKSx1O2Zvcih1IGluIG4pZVt1XT1uW3VdfXJldHVybiBlfWZ1bmN0aW9uIEIoYixlLGgpe3JldHVybiB2b2lkIDA9PT1lJiZ2b2lkIDA9PT1oP3RoaXMuc2V0KGIpOnRoaXMuc2V0UkdCKGIsZSxoKX1mdW5jdGlvbiBHKCl7ZnVuY3Rpb24gYih1LHcpeyExIT09aCYmKG4odSx3KSxlLnJlcXVlc3RBbmltYXRpb25GcmFtZShiKSl9dmFyIGU9bnVsbCxoPSExLG49bnVsbDtyZXR1cm57c3RhcnQ6ZnVuY3Rpb24oKXshMCE9PWgmJm51bGwhPT1uJiYoZS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoYiksaD0hMCl9LHN0b3A6ZnVuY3Rpb24oKXtoPSExfSxzZXRBbmltYXRpb25Mb29wOmZ1bmN0aW9uKHUpe249dX0sc2V0Q29udGV4dDpmdW5jdGlvbih1KXtlPXV9fX1mdW5jdGlvbiBLKGIpe2Z1bmN0aW9uIGUodSx3KXt2YXIgej11LmFycmF5LEU9dS5keW5hbWljPzM1MDQ4OjM1MDQ0LEg9Yi5jcmVhdGVCdWZmZXIoKTsKYi5iaW5kQnVmZmVyKHcsSCk7Yi5idWZmZXJEYXRhKHcseixFKTt1Lm9uVXBsb2FkQ2FsbGJhY2soKTt3PTUxMjY7eiBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheT93PTUxMjY6eiBpbnN0YW5jZW9mIEZsb2F0NjRBcnJheT9jb25zb2xlLndhcm4oIlRIUkVFLldlYkdMQXR0cmlidXRlczogVW5zdXBwb3J0ZWQgZGF0YSBidWZmZXIgZm9ybWF0OiBGbG9hdDY0QXJyYXkuIik6eiBpbnN0YW5jZW9mIFVpbnQxNkFycmF5P3c9NTEyMzp6IGluc3RhbmNlb2YgSW50MTZBcnJheT93PTUxMjI6eiBpbnN0YW5jZW9mIFVpbnQzMkFycmF5P3c9NTEyNTp6IGluc3RhbmNlb2YgSW50MzJBcnJheT93PTUxMjQ6eiBpbnN0YW5jZW9mIEludDhBcnJheT93PTUxMjA6eiBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkmJih3PTUxMjEpO3JldHVybntidWZmZXI6SCx0eXBlOncsYnl0ZXNQZXJFbGVtZW50OnouQllURVNfUEVSX0VMRU1FTlQsdmVyc2lvbjp1LnZlcnNpb259fWZ1bmN0aW9uIGgodSx3LHope3ZhciBFPQp3LmFycmF5LEg9dy51cGRhdGVSYW5nZTtiLmJpbmRCdWZmZXIoeix1KTshMT09PXcuZHluYW1pYz9iLmJ1ZmZlckRhdGEoeixFLDM1MDQ0KTotMT09PUguY291bnQ/Yi5idWZmZXJTdWJEYXRhKHosMCxFKTowPT09SC5jb3VudD9jb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTE9iamVjdHMudXBkYXRlQnVmZmVyOiBkeW5hbWljIFRIUkVFLkJ1ZmZlckF0dHJpYnV0ZSBtYXJrZWQgYXMgbmVlZHNVcGRhdGUgYnV0IHVwZGF0ZVJhbmdlLmNvdW50IGlzIDAsIGVuc3VyZSB5b3UgYXJlIHVzaW5nIHNldCBtZXRob2RzIG9yIHVwZGF0aW5nIG1hbnVhbGx5LiIpOihiLmJ1ZmZlclN1YkRhdGEoeixILm9mZnNldCpFLkJZVEVTX1BFUl9FTEVNRU5ULEUuc3ViYXJyYXkoSC5vZmZzZXQsSC5vZmZzZXQrSC5jb3VudCkpLEguY291bnQ9LTEpfXZhciBuPW5ldyBXZWFrTWFwO3JldHVybntnZXQ6ZnVuY3Rpb24odSl7dS5pc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlJiYodT11LmRhdGEpO3JldHVybiBuLmdldCh1KX0sCnJlbW92ZTpmdW5jdGlvbih1KXt1LmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUmJih1PXUuZGF0YSk7dmFyIHc9bi5nZXQodSk7dyYmKGIuZGVsZXRlQnVmZmVyKHcuYnVmZmVyKSxuLmRlbGV0ZSh1KSl9LHVwZGF0ZTpmdW5jdGlvbih1LHcpe3UuaXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZSYmKHU9dS5kYXRhKTt2YXIgej1uLmdldCh1KTt2b2lkIDA9PT16P24uc2V0KHUsZSh1LHcpKTp6LnZlcnNpb248dS52ZXJzaW9uJiYoaCh6LmJ1ZmZlcix1LHcpLHoudmVyc2lvbj11LnZlcnNpb24pfX19ZnVuY3Rpb24gTChiLGUsaCxuLHUsdyl7dGhpcy5hPWI7dGhpcy5iPWU7dGhpcy5jPWg7dGhpcy5ub3JtYWw9biYmbi5pc1ZlY3RvcjM/bjpuZXcgZzt0aGlzLnZlcnRleE5vcm1hbHM9QXJyYXkuaXNBcnJheShuKT9uOltdO3RoaXMuY29sb3I9dSYmdS5pc0NvbG9yP3U6bmV3IEI7dGhpcy52ZXJ0ZXhDb2xvcnM9QXJyYXkuaXNBcnJheSh1KT91OltdO3RoaXMubWF0ZXJpYWxJbmRleD0Kdm9pZCAwIT09dz93OjB9ZnVuY3Rpb24gSihiLGUsaCxuKXt0aGlzLl94PWJ8fDA7dGhpcy5feT1lfHwwO3RoaXMuX3o9aHx8MDt0aGlzLl9vcmRlcj1ufHxKLkRlZmF1bHRPcmRlcn1mdW5jdGlvbiBQKCl7dGhpcy5tYXNrPTF9ZnVuY3Rpb24gUygpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJpZCIse3ZhbHVlOkxuKyt9KTt0aGlzLnV1aWQ9b2IuZ2VuZXJhdGVVVUlEKCk7dGhpcy5uYW1lPSIiO3RoaXMudHlwZT0iT2JqZWN0M0QiO3RoaXMucGFyZW50PW51bGw7dGhpcy5jaGlsZHJlbj1bXTt0aGlzLnVwPVMuRGVmYXVsdFVwLmNsb25lKCk7dmFyIGI9bmV3IGcsZT1uZXcgSixoPW5ldyBmLG49bmV3IGcoMSwxLDEpO2Uub25DaGFuZ2UoZnVuY3Rpb24oKXtoLnNldEZyb21FdWxlcihlLCExKX0pO2gub25DaGFuZ2UoZnVuY3Rpb24oKXtlLnNldEZyb21RdWF0ZXJuaW9uKGgsdm9pZCAwLCExKX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRoaXMse3Bvc2l0aW9uOntjb25maWd1cmFibGU6ITAsCmVudW1lcmFibGU6ITAsdmFsdWU6Yn0scm90YXRpb246e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHZhbHVlOmV9LHF1YXRlcm5pb246e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHZhbHVlOmh9LHNjYWxlOntjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx2YWx1ZTpufSxtb2RlbFZpZXdNYXRyaXg6e3ZhbHVlOm5ldyBDfSxub3JtYWxNYXRyaXg6e3ZhbHVlOm5ldyBsfX0pO3RoaXMubWF0cml4PW5ldyBDO3RoaXMubWF0cml4V29ybGQ9bmV3IEM7dGhpcy5tYXRyaXhBdXRvVXBkYXRlPVMuRGVmYXVsdE1hdHJpeEF1dG9VcGRhdGU7dGhpcy5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlPSExO3RoaXMubGF5ZXJzPW5ldyBQO3RoaXMudmlzaWJsZT0hMDt0aGlzLnJlY2VpdmVTaGFkb3c9dGhpcy5jYXN0U2hhZG93PSExO3RoaXMuZnJ1c3R1bUN1bGxlZD0hMDt0aGlzLnJlbmRlck9yZGVyPTA7dGhpcy51c2VyRGF0YT17fX1mdW5jdGlvbiBOKCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsCiJpZCIse3ZhbHVlOk1uKz0yfSk7dGhpcy51dWlkPW9iLmdlbmVyYXRlVVVJRCgpO3RoaXMubmFtZT0iIjt0aGlzLnR5cGU9Ikdlb21ldHJ5Ijt0aGlzLnZlcnRpY2VzPVtdO3RoaXMuY29sb3JzPVtdO3RoaXMuZmFjZXM9W107dGhpcy5mYWNlVmVydGV4VXZzPVtbXV07dGhpcy5tb3JwaFRhcmdldHM9W107dGhpcy5tb3JwaE5vcm1hbHM9W107dGhpcy5za2luV2VpZ2h0cz1bXTt0aGlzLnNraW5JbmRpY2VzPVtdO3RoaXMubGluZURpc3RhbmNlcz1bXTt0aGlzLmJvdW5kaW5nU3BoZXJlPXRoaXMuYm91bmRpbmdCb3g9bnVsbDt0aGlzLmdyb3Vwc05lZWRVcGRhdGU9dGhpcy5saW5lRGlzdGFuY2VzTmVlZFVwZGF0ZT10aGlzLmNvbG9yc05lZWRVcGRhdGU9dGhpcy5ub3JtYWxzTmVlZFVwZGF0ZT10aGlzLnV2c05lZWRVcGRhdGU9dGhpcy52ZXJ0aWNlc05lZWRVcGRhdGU9dGhpcy5lbGVtZW50c05lZWRVcGRhdGU9ITF9ZnVuY3Rpb24gVChiLGUsaCl7aWYoQXJyYXkuaXNBcnJheShiKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGU6IGFycmF5IHNob3VsZCBiZSBhIFR5cGVkIEFycmF5LiIpOwp0aGlzLm5hbWU9IiI7dGhpcy5hcnJheT1iO3RoaXMuaXRlbVNpemU9ZTt0aGlzLmNvdW50PXZvaWQgMCE9PWI/Yi5sZW5ndGgvZTowO3RoaXMubm9ybWFsaXplZD0hMD09PWg7dGhpcy5keW5hbWljPSExO3RoaXMudXBkYXRlUmFuZ2U9e29mZnNldDowLGNvdW50Oi0xfTt0aGlzLnZlcnNpb249MH1mdW5jdGlvbiBZKGIsZSxoKXtULmNhbGwodGhpcyxuZXcgSW50OEFycmF5KGIpLGUsaCl9ZnVuY3Rpb24gYWEoYixlLGgpe1QuY2FsbCh0aGlzLG5ldyBVaW50OEFycmF5KGIpLGUsaCl9ZnVuY3Rpb24gaGEoYixlLGgpe1QuY2FsbCh0aGlzLG5ldyBVaW50OENsYW1wZWRBcnJheShiKSxlLGgpfWZ1bmN0aW9uIFgoYixlLGgpe1QuY2FsbCh0aGlzLG5ldyBJbnQxNkFycmF5KGIpLGUsaCl9ZnVuY3Rpb24gY2EoYixlLGgpe1QuY2FsbCh0aGlzLG5ldyBVaW50MTZBcnJheShiKSxlLGgpfWZ1bmN0aW9uIGVhKGIsZSxoKXtULmNhbGwodGhpcyxuZXcgSW50MzJBcnJheShiKSxlLGgpfWZ1bmN0aW9uIGthKGIsCmUsaCl7VC5jYWxsKHRoaXMsbmV3IFVpbnQzMkFycmF5KGIpLGUsaCl9ZnVuY3Rpb24gYmEoYixlLGgpe1QuY2FsbCh0aGlzLG5ldyBGbG9hdDMyQXJyYXkoYiksZSxoKX1mdW5jdGlvbiBsYShiLGUsaCl7VC5jYWxsKHRoaXMsbmV3IEZsb2F0NjRBcnJheShiKSxlLGgpfWZ1bmN0aW9uIHdhKCl7dGhpcy52ZXJ0aWNlcz1bXTt0aGlzLm5vcm1hbHM9W107dGhpcy5jb2xvcnM9W107dGhpcy51dnM9W107dGhpcy51dnMyPVtdO3RoaXMuZ3JvdXBzPVtdO3RoaXMubW9ycGhUYXJnZXRzPXt9O3RoaXMuc2tpbldlaWdodHM9W107dGhpcy5za2luSW5kaWNlcz1bXTt0aGlzLmJvdW5kaW5nU3BoZXJlPXRoaXMuYm91bmRpbmdCb3g9bnVsbDt0aGlzLmdyb3Vwc05lZWRVcGRhdGU9dGhpcy51dnNOZWVkVXBkYXRlPXRoaXMuY29sb3JzTmVlZFVwZGF0ZT10aGlzLm5vcm1hbHNOZWVkVXBkYXRlPXRoaXMudmVydGljZXNOZWVkVXBkYXRlPSExfWZ1bmN0aW9uIENhKGIpe2lmKDA9PT1iLmxlbmd0aClyZXR1cm4tSW5maW5pdHk7CmZvcih2YXIgZT1iWzBdLGg9MSxuPWIubGVuZ3RoO2g8bjsrK2gpYltoXT5lJiYoZT1iW2hdKTtyZXR1cm4gZX1mdW5jdGlvbiB4YSgpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJpZCIse3ZhbHVlOk5uKz0yfSk7dGhpcy51dWlkPW9iLmdlbmVyYXRlVVVJRCgpO3RoaXMubmFtZT0iIjt0aGlzLnR5cGU9IkJ1ZmZlckdlb21ldHJ5Ijt0aGlzLmluZGV4PW51bGw7dGhpcy5hdHRyaWJ1dGVzPXt9O3RoaXMubW9ycGhBdHRyaWJ1dGVzPXt9O3RoaXMuZ3JvdXBzPVtdO3RoaXMuYm91bmRpbmdTcGhlcmU9dGhpcy5ib3VuZGluZ0JveD1udWxsO3RoaXMuZHJhd1JhbmdlPXtzdGFydDowLGNvdW50OkluZmluaXR5fTt0aGlzLnVzZXJEYXRhPXt9fWZ1bmN0aW9uIHphKGIsZSxoLG4sdSx3KXtOLmNhbGwodGhpcyk7dGhpcy50eXBlPSJCb3hHZW9tZXRyeSI7dGhpcy5wYXJhbWV0ZXJzPXt3aWR0aDpiLGhlaWdodDplLGRlcHRoOmgsd2lkdGhTZWdtZW50czpuLGhlaWdodFNlZ21lbnRzOnUsCmRlcHRoU2VnbWVudHM6d307dGhpcy5mcm9tQnVmZmVyR2VvbWV0cnkobmV3IEZhKGIsZSxoLG4sdSx3KSk7dGhpcy5tZXJnZVZlcnRpY2VzKCl9ZnVuY3Rpb24gRmEoYixlLGgsbix1LHcpe2Z1bmN0aW9uIHooVyxaLGZhLHFhLHJhLGlhLHRhLG5hLHZhLEJhLHNhKXt2YXIgRGE9aWEvdmEsSGE9dGEvQmEsS2E9aWEvMixOYT10YS8yLExhPW5hLzI7dGE9dmErMTt2YXIgZmI9QmErMSxjYj1pYT0wLEphLGhiLFVhPW5ldyBnO2ZvcihoYj0wO2hiPGZiO2hiKyspe3ZhciBIYj1oYipIYS1OYTtmb3IoSmE9MDtKYTx0YTtKYSsrKVVhW1ddPShKYSpEYS1LYSkqcWEsVWFbWl09SGIqcmEsVWFbZmFdPUxhLEkucHVzaChVYS54LFVhLnksVWEueiksVWFbV109MCxVYVtaXT0wLFVhW2ZhXT0wPG5hPzE6LTEsTy5wdXNoKFVhLngsVWEueSxVYS56KSxRLnB1c2goSmEvdmEpLFEucHVzaCgxLWhiL0JhKSxpYSs9MX1mb3IoaGI9MDtoYjxCYTtoYisrKWZvcihKYT0wO0phPHZhO0phKyspVz1SK0phKwp0YSooaGIrMSksWj1SKyhKYSsxKSt0YSooaGIrMSksZmE9UisoSmErMSkrdGEqaGIsSC5wdXNoKFIrSmErdGEqaGIsVyxmYSksSC5wdXNoKFcsWixmYSksY2IrPTY7RS5hZGRHcm91cChVLGNiLHNhKTtVKz1jYjtSKz1pYX14YS5jYWxsKHRoaXMpO3RoaXMudHlwZT0iQm94QnVmZmVyR2VvbWV0cnkiO3RoaXMucGFyYW1ldGVycz17d2lkdGg6YixoZWlnaHQ6ZSxkZXB0aDpoLHdpZHRoU2VnbWVudHM6bixoZWlnaHRTZWdtZW50czp1LGRlcHRoU2VnbWVudHM6d307dmFyIEU9dGhpcztiPWJ8fDE7ZT1lfHwxO2g9aHx8MTtuPU1hdGguZmxvb3Iobil8fDE7dT1NYXRoLmZsb29yKHUpfHwxO3c9TWF0aC5mbG9vcih3KXx8MTt2YXIgSD1bXSxJPVtdLE89W10sUT1bXSxSPTAsVT0wO3ooInoiLCJ5IiwieCIsLTEsLTEsaCxlLGIsdyx1LDApO3ooInoiLCJ5IiwieCIsMSwtMSxoLGUsLWIsdyx1LDEpO3ooIngiLCJ6IiwieSIsMSwxLGIsaCxlLG4sdywyKTt6KCJ4IiwieiIsInkiLDEsLTEsYiwKaCwtZSxuLHcsMyk7eigieCIsInkiLCJ6IiwxLC0xLGIsZSxoLG4sdSw0KTt6KCJ4IiwieSIsInoiLC0xLC0xLGIsZSwtaCxuLHUsNSk7dGhpcy5zZXRJbmRleChIKTt0aGlzLmFkZEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBiYShJLDMpKTt0aGlzLmFkZEF0dHJpYnV0ZSgibm9ybWFsIixuZXcgYmEoTywzKSk7dGhpcy5hZGRBdHRyaWJ1dGUoInV2IixuZXcgYmEoUSwyKSl9ZnVuY3Rpb24gU2EoYixlLGgsbil7Ti5jYWxsKHRoaXMpO3RoaXMudHlwZT0iUGxhbmVHZW9tZXRyeSI7dGhpcy5wYXJhbWV0ZXJzPXt3aWR0aDpiLGhlaWdodDplLHdpZHRoU2VnbWVudHM6aCxoZWlnaHRTZWdtZW50czpufTt0aGlzLmZyb21CdWZmZXJHZW9tZXRyeShuZXcgRWEoYixlLGgsbikpO3RoaXMubWVyZ2VWZXJ0aWNlcygpfWZ1bmN0aW9uIEVhKGIsZSxoLG4pe3hhLmNhbGwodGhpcyk7dGhpcy50eXBlPSJQbGFuZUJ1ZmZlckdlb21ldHJ5Ijt0aGlzLnBhcmFtZXRlcnM9e3dpZHRoOmIsaGVpZ2h0OmUsCndpZHRoU2VnbWVudHM6aCxoZWlnaHRTZWdtZW50czpufTtiPWJ8fDE7ZT1lfHwxO3ZhciB1PWIvMix3PWUvMjtoPU1hdGguZmxvb3IoaCl8fDE7bj1NYXRoLmZsb29yKG4pfHwxO3ZhciB6PWgrMSxFPW4rMSxIPWIvaCxJPWUvbixPPVtdLFE9W10sUj1bXSxVPVtdO2ZvcihiPTA7YjxFO2IrKyl7dmFyIFc9YipJLXc7Zm9yKGU9MDtlPHo7ZSsrKVEucHVzaChlKkgtdSwtVywwKSxSLnB1c2goMCwwLDEpLFUucHVzaChlL2gpLFUucHVzaCgxLWIvbil9Zm9yKGI9MDtiPG47YisrKWZvcihlPTA7ZTxoO2UrKyl1PWUreiooYisxKSx3PWUrMSt6KihiKzEpLEU9ZSsxK3oqYixPLnB1c2goZSt6KmIsdSxFKSxPLnB1c2godSx3LEUpO3RoaXMuc2V0SW5kZXgoTyk7dGhpcy5hZGRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgYmEoUSwzKSk7dGhpcy5hZGRBdHRyaWJ1dGUoIm5vcm1hbCIsbmV3IGJhKFIsMykpO3RoaXMuYWRkQXR0cmlidXRlKCJ1diIsbmV3IGJhKFUsMikpfWZ1bmN0aW9uIEdhKCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsCiJpZCIse3ZhbHVlOk9uKyt9KTt0aGlzLnV1aWQ9b2IuZ2VuZXJhdGVVVUlEKCk7dGhpcy5uYW1lPSIiO3RoaXMudHlwZT0iTWF0ZXJpYWwiO3RoaXMubGlnaHRzPXRoaXMuZm9nPSEwO3RoaXMuYmxlbmRpbmc9MTt0aGlzLnNpZGU9MDt0aGlzLnZlcnRleFRhbmdlbnRzPXRoaXMuZmxhdFNoYWRpbmc9ITE7dGhpcy52ZXJ0ZXhDb2xvcnM9MDt0aGlzLm9wYWNpdHk9MTt0aGlzLnRyYW5zcGFyZW50PSExO3RoaXMuYmxlbmRTcmM9MjA0O3RoaXMuYmxlbmREc3Q9MjA1O3RoaXMuYmxlbmRFcXVhdGlvbj0xMDA7dGhpcy5ibGVuZEVxdWF0aW9uQWxwaGE9dGhpcy5ibGVuZERzdEFscGhhPXRoaXMuYmxlbmRTcmNBbHBoYT1udWxsO3RoaXMuZGVwdGhGdW5jPTM7dGhpcy5kZXB0aFdyaXRlPXRoaXMuZGVwdGhUZXN0PSEwO3RoaXMuY2xpcHBpbmdQbGFuZXM9bnVsbDt0aGlzLmNsaXBTaGFkb3dzPXRoaXMuY2xpcEludGVyc2VjdGlvbj0hMTt0aGlzLnNoYWRvd1NpZGU9bnVsbDt0aGlzLmNvbG9yV3JpdGU9CiEwO3RoaXMucHJlY2lzaW9uPW51bGw7dGhpcy5wb2x5Z29uT2Zmc2V0PSExO3RoaXMucG9seWdvbk9mZnNldFVuaXRzPXRoaXMucG9seWdvbk9mZnNldEZhY3Rvcj0wO3RoaXMuZGl0aGVyaW5nPSExO3RoaXMuYWxwaGFUZXN0PTA7dGhpcy5wcmVtdWx0aXBsaWVkQWxwaGE9ITE7dGhpcy52aXNpYmxlPSEwO3RoaXMudXNlckRhdGE9e307dGhpcy5uZWVkc1VwZGF0ZT0hMH1mdW5jdGlvbiBkYihiKXtHYS5jYWxsKHRoaXMpO3RoaXMudHlwZT0iU2hhZGVyTWF0ZXJpYWwiO3RoaXMuZGVmaW5lcz17fTt0aGlzLnVuaWZvcm1zPXt9O3RoaXMudmVydGV4U2hhZGVyPSJ2b2lkIG1haW4oKSB7XG5cdGdsX1Bvc2l0aW9uIFx4M2QgcHJvamVjdGlvbk1hdHJpeCAqIG1vZGVsVmlld01hdHJpeCAqIHZlYzQoIHBvc2l0aW9uLCAxLjAgKTtcbn0iO3RoaXMuZnJhZ21lbnRTaGFkZXI9InZvaWQgbWFpbigpIHtcblx0Z2xfRnJhZ0NvbG9yIFx4M2QgdmVjNCggMS4wLCAwLjAsIDAuMCwgMS4wICk7XG59IjsKdGhpcy5saW5ld2lkdGg9MTt0aGlzLndpcmVmcmFtZT0hMTt0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xO3RoaXMubW9ycGhOb3JtYWxzPXRoaXMubW9ycGhUYXJnZXRzPXRoaXMuc2tpbm5pbmc9dGhpcy5jbGlwcGluZz10aGlzLmxpZ2h0cz10aGlzLmZvZz0hMTt0aGlzLmV4dGVuc2lvbnM9e2Rlcml2YXRpdmVzOiExLGZyYWdEZXB0aDohMSxkcmF3QnVmZmVyczohMSxzaGFkZXJUZXh0dXJlTE9EOiExfTt0aGlzLmRlZmF1bHRBdHRyaWJ1dGVWYWx1ZXM9e2NvbG9yOlsxLDEsMV0sdXY6WzAsMF0sdXYyOlswLDBdfTt0aGlzLmluZGV4MEF0dHJpYnV0ZU5hbWU9dm9pZCAwO3RoaXMudW5pZm9ybXNOZWVkVXBkYXRlPSExO3ZvaWQgMCE9PWImJih2b2lkIDAhPT1iLmF0dHJpYnV0ZXMmJmNvbnNvbGUuZXJyb3IoIlRIUkVFLlNoYWRlck1hdGVyaWFsOiBhdHRyaWJ1dGVzIHNob3VsZCBub3cgYmUgZGVmaW5lZCBpbiBUSFJFRS5CdWZmZXJHZW9tZXRyeSBpbnN0ZWFkLiIpLHRoaXMuc2V0VmFsdWVzKGIpKX0KZnVuY3Rpb24geGIoYixlKXt0aGlzLm9yaWdpbj12b2lkIDAhPT1iP2I6bmV3IGc7dGhpcy5kaXJlY3Rpb249dm9pZCAwIT09ZT9lOm5ldyBnfWZ1bmN0aW9uIENiKGIsZSxoKXt0aGlzLmE9dm9pZCAwIT09Yj9iOm5ldyBnO3RoaXMuYj12b2lkIDAhPT1lP2U6bmV3IGc7dGhpcy5jPXZvaWQgMCE9PWg/aDpuZXcgZ31mdW5jdGlvbiB5YihiKXtHYS5jYWxsKHRoaXMpO3RoaXMudHlwZT0iTWVzaEJhc2ljTWF0ZXJpYWwiO3RoaXMuY29sb3I9bmV3IEIoMTY3NzcyMTUpO3RoaXMubGlnaHRNYXA9dGhpcy5tYXA9bnVsbDt0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PTE7dGhpcy5hb01hcD1udWxsO3RoaXMuYW9NYXBJbnRlbnNpdHk9MTt0aGlzLmVudk1hcD10aGlzLmFscGhhTWFwPXRoaXMuc3BlY3VsYXJNYXA9bnVsbDt0aGlzLmNvbWJpbmU9MDt0aGlzLnJlZmxlY3Rpdml0eT0xO3RoaXMucmVmcmFjdGlvblJhdGlvPS45ODt0aGlzLndpcmVmcmFtZT0hMTt0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0KMTt0aGlzLndpcmVmcmFtZUxpbmVqb2luPXRoaXMud2lyZWZyYW1lTGluZWNhcD0icm91bmQiO3RoaXMubGlnaHRzPXRoaXMubW9ycGhUYXJnZXRzPXRoaXMuc2tpbm5pbmc9ITE7dGhpcy5zZXRWYWx1ZXMoYil9ZnVuY3Rpb24gdGIoYixlKXtTLmNhbGwodGhpcyk7dGhpcy50eXBlPSJNZXNoIjt0aGlzLmdlb21ldHJ5PXZvaWQgMCE9PWI/YjpuZXcgeGE7dGhpcy5tYXRlcmlhbD12b2lkIDAhPT1lP2U6bmV3IHliKHtjb2xvcjoxNjc3NzIxNSpNYXRoLnJhbmRvbSgpfSk7dGhpcy5kcmF3TW9kZT0wO3RoaXMudXBkYXRlTW9ycGhUYXJnZXRzKCl9ZnVuY3Rpb24gQ2MoYixlLGgsbil7ZnVuY3Rpb24gdShRLFIpe2UuYnVmZmVycy5jb2xvci5zZXRDbGVhcihRLnIsUS5nLFEuYixSLG4pfXZhciB3PW5ldyBCKDApLHo9MCxFLEgsST1udWxsLE89MDtyZXR1cm57Z2V0Q2xlYXJDb2xvcjpmdW5jdGlvbigpe3JldHVybiB3fSxzZXRDbGVhckNvbG9yOmZ1bmN0aW9uKFEsUil7dy5zZXQoUSk7Cno9dm9pZCAwIT09Uj9SOjE7dSh3LHopfSxnZXRDbGVhckFscGhhOmZ1bmN0aW9uKCl7cmV0dXJuIHp9LHNldENsZWFyQWxwaGE6ZnVuY3Rpb24oUSl7ej1RO3Uodyx6KX0scmVuZGVyOmZ1bmN0aW9uKFEsUixVLFcpe1I9Ui5iYWNrZ3JvdW5kO1U9Yi52cjsoVT1VLmdldFNlc3Npb24mJlUuZ2V0U2Vzc2lvbigpKSYmImFkZGl0aXZlIj09PVUuZW52aXJvbm1lbnRCbGVuZE1vZGUmJihSPW51bGwpO251bGw9PT1SPyh1KHcseiksST1udWxsLE89MCk6UiYmUi5pc0NvbG9yJiYodShSLDEpLFc9ITAsST1udWxsLE89MCk7KGIuYXV0b0NsZWFyfHxXKSYmYi5jbGVhcihiLmF1dG9DbGVhckNvbG9yLGIuYXV0b0NsZWFyRGVwdGgsYi5hdXRvQ2xlYXJTdGVuY2lsKTtpZihSJiYoUi5pc0N1YmVUZXh0dXJlfHxSLmlzV2ViR0xSZW5kZXJUYXJnZXRDdWJlKSl7dm9pZCAwPT09SCYmKEg9bmV3IHRiKG5ldyBGYSgxLDEsMSksbmV3IGRiKHt0eXBlOiJCYWNrZ3JvdW5kQ3ViZU1hdGVyaWFsIix1bmlmb3JtczpGKGlkLmN1YmUudW5pZm9ybXMpLAp2ZXJ0ZXhTaGFkZXI6aWQuY3ViZS52ZXJ0ZXhTaGFkZXIsZnJhZ21lbnRTaGFkZXI6aWQuY3ViZS5mcmFnbWVudFNoYWRlcixzaWRlOjEsZGVwdGhUZXN0OiExLGRlcHRoV3JpdGU6ITEsZm9nOiExfSkpLEguZ2VvbWV0cnkucmVtb3ZlQXR0cmlidXRlKCJub3JtYWwiKSxILmdlb21ldHJ5LnJlbW92ZUF0dHJpYnV0ZSgidXYiKSxILm9uQmVmb3JlUmVuZGVyPWZ1bmN0aW9uKFosZmEscWEpe3RoaXMubWF0cml4V29ybGQuY29weVBvc2l0aW9uKHFhLm1hdHJpeFdvcmxkKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KEgubWF0ZXJpYWwsIm1hcCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnVuaWZvcm1zLnRDdWJlLnZhbHVlfX0pLGgudXBkYXRlKEgpKTtXPVIuaXNXZWJHTFJlbmRlclRhcmdldEN1YmU/Ui50ZXh0dXJlOlI7SC5tYXRlcmlhbC51bmlmb3Jtcy50Q3ViZS52YWx1ZT1XO0gubWF0ZXJpYWwudW5pZm9ybXMudEZsaXAudmFsdWU9Ui5pc1dlYkdMUmVuZGVyVGFyZ2V0Q3ViZT8KMTotMTtpZihJIT09Unx8TyE9PVcudmVyc2lvbilILm1hdGVyaWFsLm5lZWRzVXBkYXRlPSEwLEk9UixPPVcudmVyc2lvbjtRLnVuc2hpZnQoSCxILmdlb21ldHJ5LEgubWF0ZXJpYWwsMCwwLG51bGwpfWVsc2UgaWYoUiYmUi5pc1RleHR1cmUpe3ZvaWQgMD09PUUmJihFPW5ldyB0YihuZXcgRWEoMiwyKSxuZXcgZGIoe3R5cGU6IkJhY2tncm91bmRNYXRlcmlhbCIsdW5pZm9ybXM6RihpZC5iYWNrZ3JvdW5kLnVuaWZvcm1zKSx2ZXJ0ZXhTaGFkZXI6aWQuYmFja2dyb3VuZC52ZXJ0ZXhTaGFkZXIsZnJhZ21lbnRTaGFkZXI6aWQuYmFja2dyb3VuZC5mcmFnbWVudFNoYWRlcixzaWRlOjAsZGVwdGhUZXN0OiExLGRlcHRoV3JpdGU6ITEsZm9nOiExfSkpLEUuZ2VvbWV0cnkucmVtb3ZlQXR0cmlidXRlKCJub3JtYWwiKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRS5tYXRlcmlhbCwibWFwIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudW5pZm9ybXMudDJELnZhbHVlfX0pLGgudXBkYXRlKEUpKTsKRS5tYXRlcmlhbC51bmlmb3Jtcy50MkQudmFsdWU9UjshMD09PVIubWF0cml4QXV0b1VwZGF0ZSYmUi51cGRhdGVNYXRyaXgoKTtFLm1hdGVyaWFsLnVuaWZvcm1zLnV2VHJhbnNmb3JtLnZhbHVlLmNvcHkoUi5tYXRyaXgpO2lmKEkhPT1SfHxPIT09Ui52ZXJzaW9uKUUubWF0ZXJpYWwubmVlZHNVcGRhdGU9ITAsST1SLE89Ui52ZXJzaW9uO1EudW5zaGlmdChFLEUuZ2VvbWV0cnksRS5tYXRlcmlhbCwwLDAsbnVsbCl9fX19ZnVuY3Rpb24gWmIoYixlLGgsbil7dmFyIHU7dGhpcy5zZXRNb2RlPWZ1bmN0aW9uKHcpe3U9d307dGhpcy5yZW5kZXI9ZnVuY3Rpb24odyx6KXtiLmRyYXdBcnJheXModSx3LHopO2gudXBkYXRlKHosdSl9O3RoaXMucmVuZGVySW5zdGFuY2VzPWZ1bmN0aW9uKHcseixFKXtpZihuLmlzV2ViR0wyKXZhciBIPWI7ZWxzZSBpZihIPWUuZ2V0KCJBTkdMRV9pbnN0YW5jZWRfYXJyYXlzIiksbnVsbD09PUgpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMQnVmZmVyUmVuZGVyZXI6IHVzaW5nIFRIUkVFLkluc3RhbmNlZEJ1ZmZlckdlb21ldHJ5IGJ1dCBoYXJkd2FyZSBkb2VzIG5vdCBzdXBwb3J0IGV4dGVuc2lvbiBBTkdMRV9pbnN0YW5jZWRfYXJyYXlzLiIpOwpyZXR1cm59SFtuLmlzV2ViR0wyPyJkcmF3QXJyYXlzSW5zdGFuY2VkIjoiZHJhd0FycmF5c0luc3RhbmNlZEFOR0xFIl0odSx6LEUsdy5tYXhJbnN0YW5jZWRDb3VudCk7aC51cGRhdGUoRSx1LHcubWF4SW5zdGFuY2VkQ291bnQpfX1mdW5jdGlvbiBoZChiLGUsaCl7ZnVuY3Rpb24gbihpYSl7aWYoImhpZ2hwIj09PWlhKXtpZigwPGIuZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KDM1NjMzLDM2MzM4KS5wcmVjaXNpb24mJjA8Yi5nZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoMzU2MzIsMzYzMzgpLnByZWNpc2lvbilyZXR1cm4iaGlnaHAiO2lhPSJtZWRpdW1wIn1yZXR1cm4ibWVkaXVtcCI9PT1pYSYmMDxiLmdldFNoYWRlclByZWNpc2lvbkZvcm1hdCgzNTYzMywzNjMzNykucHJlY2lzaW9uJiYwPGIuZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KDM1NjMyLDM2MzM3KS5wcmVjaXNpb24/Im1lZGl1bXAiOiJsb3dwIn12YXIgdSx3PSJ1bmRlZmluZWQiIT09dHlwZW9mIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQmJgpiIGluc3RhbmNlb2YgV2ViR0wyUmVuZGVyaW5nQ29udGV4dCx6PXZvaWQgMCE9PWgucHJlY2lzaW9uP2gucHJlY2lzaW9uOiJoaWdocCIsRT1uKHopO0UhPT16JiYoY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiIseiwibm90IHN1cHBvcnRlZCwgdXNpbmciLEUsImluc3RlYWQuIiksej1FKTtoPSEwPT09aC5sb2dhcml0aG1pY0RlcHRoQnVmZmVyO0U9Yi5nZXRQYXJhbWV0ZXIoMzQ5MzApO3ZhciBIPWIuZ2V0UGFyYW1ldGVyKDM1NjYwKSxJPWIuZ2V0UGFyYW1ldGVyKDMzNzkpLE89Yi5nZXRQYXJhbWV0ZXIoMzQwNzYpLFE9Yi5nZXRQYXJhbWV0ZXIoMzQ5MjEpLFI9Yi5nZXRQYXJhbWV0ZXIoMzYzNDcpLFU9Yi5nZXRQYXJhbWV0ZXIoMzYzNDgpLFc9Yi5nZXRQYXJhbWV0ZXIoMzYzNDkpLFo9MDxILGZhPXd8fCEhZS5nZXQoIk9FU190ZXh0dXJlX2Zsb2F0IikscWE9WiYmZmEscmE9dz9iLmdldFBhcmFtZXRlcigzNjE4Myk6MDtyZXR1cm57aXNXZWJHTDI6dyxnZXRNYXhBbmlzb3Ryb3B5OmZ1bmN0aW9uKCl7aWYodm9pZCAwIT09CnUpcmV0dXJuIHU7dmFyIGlhPWUuZ2V0KCJFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKTtyZXR1cm4gdT1udWxsIT09aWE/Yi5nZXRQYXJhbWV0ZXIoaWEuTUFYX1RFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhUKTowfSxnZXRNYXhQcmVjaXNpb246bixwcmVjaXNpb246eixsb2dhcml0aG1pY0RlcHRoQnVmZmVyOmgsbWF4VGV4dHVyZXM6RSxtYXhWZXJ0ZXhUZXh0dXJlczpILG1heFRleHR1cmVTaXplOkksbWF4Q3ViZW1hcFNpemU6TyxtYXhBdHRyaWJ1dGVzOlEsbWF4VmVydGV4VW5pZm9ybXM6UixtYXhWYXJ5aW5nczpVLG1heEZyYWdtZW50VW5pZm9ybXM6Vyx2ZXJ0ZXhUZXh0dXJlczpaLGZsb2F0RnJhZ21lbnRUZXh0dXJlczpmYSxmbG9hdFZlcnRleFRleHR1cmVzOnFhLG1heFNhbXBsZXM6cmF9fWZ1bmN0aW9uICRiKCl7ZnVuY3Rpb24gYigpe0kudmFsdWUhPT1uJiYoSS52YWx1ZT1uLEkubmVlZHNVcGRhdGU9MDx1KTtoLm51bVBsYW5lcz11O2gubnVtSW50ZXJzZWN0aW9uPQowfWZ1bmN0aW9uIGUoTyxRLFIsVSl7dmFyIFc9bnVsbCE9PU8/Ty5sZW5ndGg6MCxaPW51bGw7aWYoMCE9PVcpe1o9SS52YWx1ZTtpZighMCE9PVV8fG51bGw9PT1aKXtVPVIrNCpXO1E9US5tYXRyaXhXb3JsZEludmVyc2U7SC5nZXROb3JtYWxNYXRyaXgoUSk7aWYobnVsbD09PVp8fFoubGVuZ3RoPFUpWj1uZXcgRmxvYXQzMkFycmF5KFUpO2ZvcihVPTA7VSE9PVc7KytVLFIrPTQpRS5jb3B5KE9bVV0pLmFwcGx5TWF0cml4NChRLEgpLEUubm9ybWFsLnRvQXJyYXkoWixSKSxaW1IrM109RS5jb25zdGFudH1JLnZhbHVlPVo7SS5uZWVkc1VwZGF0ZT0hMH1oLm51bVBsYW5lcz1XO3JldHVybiBafXZhciBoPXRoaXMsbj1udWxsLHU9MCx3PSExLHo9ITEsRT1uZXcgeSxIPW5ldyBsLEk9e3ZhbHVlOm51bGwsbmVlZHNVcGRhdGU6ITF9O3RoaXMudW5pZm9ybT1JO3RoaXMubnVtSW50ZXJzZWN0aW9uPXRoaXMubnVtUGxhbmVzPTA7dGhpcy5pbml0PWZ1bmN0aW9uKE8sUSxSKXt2YXIgVT0KMCE9PU8ubGVuZ3RofHxRfHwwIT09dXx8dzt3PVE7bj1lKE8sUiwwKTt1PU8ubGVuZ3RoO3JldHVybiBVfTt0aGlzLmJlZ2luU2hhZG93cz1mdW5jdGlvbigpe3o9ITA7ZShudWxsKX07dGhpcy5lbmRTaGFkb3dzPWZ1bmN0aW9uKCl7ej0hMTtiKCl9O3RoaXMuc2V0U3RhdGU9ZnVuY3Rpb24oTyxRLFIsVSxXLFope2lmKCF3fHxudWxsPT09T3x8MD09PU8ubGVuZ3RofHx6JiYhUil6P2UobnVsbCk6YigpO2Vsc2V7Uj16PzA6dTt2YXIgZmE9NCpSLHFhPVcuY2xpcHBpbmdTdGF0ZXx8bnVsbDtJLnZhbHVlPXFhO3FhPWUoTyxVLGZhLFopO2ZvcihPPTA7TyE9PWZhOysrTylxYVtPXT1uW09dO1cuY2xpcHBpbmdTdGF0ZT1xYTt0aGlzLm51bUludGVyc2VjdGlvbj1RP3RoaXMubnVtUGxhbmVzOjA7dGhpcy5udW1QbGFuZXMrPVJ9fX1mdW5jdGlvbiBmYyhiKXt2YXIgZT17fTtyZXR1cm57Z2V0OmZ1bmN0aW9uKGgpe2lmKHZvaWQgMCE9PWVbaF0pcmV0dXJuIGVbaF07c3dpdGNoKGgpe2Nhc2UgIldFQkdMX2RlcHRoX3RleHR1cmUiOnZhciBuPQpiLmdldEV4dGVuc2lvbigiV0VCR0xfZGVwdGhfdGV4dHVyZSIpfHxiLmdldEV4dGVuc2lvbigiTU9aX1dFQkdMX2RlcHRoX3RleHR1cmUiKXx8Yi5nZXRFeHRlbnNpb24oIldFQktJVF9XRUJHTF9kZXB0aF90ZXh0dXJlIik7YnJlYWs7Y2FzZSAiRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIjpuPWIuZ2V0RXh0ZW5zaW9uKCJFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKXx8Yi5nZXRFeHRlbnNpb24oIk1PWl9FWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKXx8Yi5nZXRFeHRlbnNpb24oIldFQktJVF9FWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKTticmVhaztjYXNlICJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0YyI6bj1iLmdldEV4dGVuc2lvbigiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMiKXx8Yi5nZXRFeHRlbnNpb24oIk1PWl9XRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0YyIpfHxiLmdldEV4dGVuc2lvbigiV0VCS0lUX1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjIik7CmJyZWFrO2Nhc2UgIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9wdnJ0YyI6bj1iLmdldEV4dGVuc2lvbigiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjIil8fGIuZ2V0RXh0ZW5zaW9uKCJXRUJLSVRfV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjIik7YnJlYWs7ZGVmYXVsdDpuPWIuZ2V0RXh0ZW5zaW9uKGgpfW51bGw9PT1uJiZjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6ICIraCsiIGV4dGVuc2lvbiBub3Qgc3VwcG9ydGVkLiIpO3JldHVybiBlW2hdPW59fX1mdW5jdGlvbiBBYShiLGUsaCl7ZnVuY3Rpb24gbih6KXt2YXIgRT16LnRhcmdldDt6PXVbRS5pZF07bnVsbCE9PXouaW5kZXgmJmUucmVtb3ZlKHouaW5kZXgpO2Zvcih2YXIgSCBpbiB6LmF0dHJpYnV0ZXMpZS5yZW1vdmUoei5hdHRyaWJ1dGVzW0hdKTtFLnJlbW92ZUV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLG4pO2RlbGV0ZSB1W0UuaWRdO2lmKEg9d1t6LmlkXSllLnJlbW92ZShIKSxkZWxldGUgd1t6LmlkXTsKaC5tZW1vcnkuZ2VvbWV0cmllcy0tfXZhciB1PXt9LHc9e307cmV0dXJue2dldDpmdW5jdGlvbih6LEUpe3ZhciBIPXVbRS5pZF07aWYoSClyZXR1cm4gSDtFLmFkZEV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLG4pO0UuaXNCdWZmZXJHZW9tZXRyeT9IPUU6RS5pc0dlb21ldHJ5JiYodm9pZCAwPT09RS5fYnVmZmVyR2VvbWV0cnkmJihFLl9idWZmZXJHZW9tZXRyeT0obmV3IHhhKS5zZXRGcm9tT2JqZWN0KHopKSxIPUUuX2J1ZmZlckdlb21ldHJ5KTt1W0UuaWRdPUg7aC5tZW1vcnkuZ2VvbWV0cmllcysrO3JldHVybiBIfSx1cGRhdGU6ZnVuY3Rpb24oeil7dmFyIEU9ei5pbmRleCxIPXouYXR0cmlidXRlcztudWxsIT09RSYmZS51cGRhdGUoRSwzNDk2Myk7Zm9yKHZhciBJIGluIEgpZS51cGRhdGUoSFtJXSwzNDk2Mik7ej16Lm1vcnBoQXR0cmlidXRlcztmb3IoSSBpbiB6KXtFPXpbSV07SD0wO2Zvcih2YXIgTz1FLmxlbmd0aDtIPE87SCsrKWUudXBkYXRlKEVbSF0sMzQ5NjIpfX0sCmdldFdpcmVmcmFtZUF0dHJpYnV0ZTpmdW5jdGlvbih6KXt2YXIgRT13W3ouaWRdO2lmKEUpcmV0dXJuIEU7RT1bXTt2YXIgSD16LmluZGV4LEk9ei5hdHRyaWJ1dGVzO2lmKG51bGwhPT1IKXtIPUguYXJyYXk7ST0wO2Zvcih2YXIgTz1ILmxlbmd0aDtJPE87SSs9Myl7dmFyIFE9SFtJKzBdLFI9SFtJKzFdLFU9SFtJKzJdO0UucHVzaChRLFIsUixVLFUsUSl9fWVsc2UgZm9yKEg9SS5wb3NpdGlvbi5hcnJheSxJPTAsTz1ILmxlbmd0aC8zLTE7STxPO0krPTMpUT1JKzAsUj1JKzEsVT1JKzIsRS5wdXNoKFEsUixSLFUsVSxRKTtFPW5ldyAoNjU1MzU8Q2EoRSk/a2E6Y2EpKEUsMSk7ZS51cGRhdGUoRSwzNDk2Myk7cmV0dXJuIHdbei5pZF09RX19fWZ1bmN0aW9uIE1iKGIsZSxoLG4pe3ZhciB1LHcsejt0aGlzLnNldE1vZGU9ZnVuY3Rpb24oRSl7dT1FfTt0aGlzLnNldEluZGV4PWZ1bmN0aW9uKEUpe3c9RS50eXBlO3o9RS5ieXRlc1BlckVsZW1lbnR9O3RoaXMucmVuZGVyPWZ1bmN0aW9uKEUsCkgpe2IuZHJhd0VsZW1lbnRzKHUsSCx3LEUqeik7aC51cGRhdGUoSCx1KX07dGhpcy5yZW5kZXJJbnN0YW5jZXM9ZnVuY3Rpb24oRSxILEkpe2lmKG4uaXNXZWJHTDIpdmFyIE89YjtlbHNlIGlmKE89ZS5nZXQoIkFOR0xFX2luc3RhbmNlZF9hcnJheXMiKSxudWxsPT09Tyl7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xJbmRleGVkQnVmZmVyUmVuZGVyZXI6IHVzaW5nIFRIUkVFLkluc3RhbmNlZEJ1ZmZlckdlb21ldHJ5IGJ1dCBoYXJkd2FyZSBkb2VzIG5vdCBzdXBwb3J0IGV4dGVuc2lvbiBBTkdMRV9pbnN0YW5jZWRfYXJyYXlzLiIpO3JldHVybn1PW24uaXNXZWJHTDI/ImRyYXdFbGVtZW50c0luc3RhbmNlZCI6ImRyYXdFbGVtZW50c0luc3RhbmNlZEFOR0xFIl0odSxJLHcsSCp6LEUubWF4SW5zdGFuY2VkQ291bnQpO2gudXBkYXRlKEksdSxFLm1heEluc3RhbmNlZENvdW50KX19ZnVuY3Rpb24gamMoKXt2YXIgYj17ZnJhbWU6MCxjYWxsczowLHRyaWFuZ2xlczowLHBvaW50czowLApsaW5lczowfTtyZXR1cm57bWVtb3J5OntnZW9tZXRyaWVzOjAsdGV4dHVyZXM6MH0scmVuZGVyOmIscHJvZ3JhbXM6bnVsbCxhdXRvUmVzZXQ6ITAscmVzZXQ6ZnVuY3Rpb24oKXtiLmZyYW1lKys7Yi5jYWxscz0wO2IudHJpYW5nbGVzPTA7Yi5wb2ludHM9MDtiLmxpbmVzPTB9LHVwZGF0ZTpmdW5jdGlvbihlLGgsbil7bj1ufHwxO2IuY2FsbHMrKztzd2l0Y2goaCl7Y2FzZSA0OmIudHJpYW5nbGVzKz1lLzMqbjticmVhaztjYXNlIDU6Y2FzZSA2OmIudHJpYW5nbGVzKz1uKihlLTIpO2JyZWFrO2Nhc2UgMTpiLmxpbmVzKz1lLzIqbjticmVhaztjYXNlIDM6Yi5saW5lcys9biooZS0xKTticmVhaztjYXNlIDI6Yi5saW5lcys9biplO2JyZWFrO2Nhc2UgMDpiLnBvaW50cys9biplO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xJbmZvOiBVbmtub3duIGRyYXcgbW9kZToiLGgpfX19fWZ1bmN0aW9uIHRkKGIsZSl7cmV0dXJuIE1hdGguYWJzKGVbMV0pLU1hdGguYWJzKGJbMV0pfQpmdW5jdGlvbiBOZChiKXt2YXIgZT17fSxoPW5ldyBGbG9hdDMyQXJyYXkoOCk7cmV0dXJue3VwZGF0ZTpmdW5jdGlvbihuLHUsdyx6KXt2YXIgRT1uLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcyxIPUUubGVuZ3RoO249ZVt1LmlkXTtpZih2b2lkIDA9PT1uKXtuPVtdO2Zvcih2YXIgST0wO0k8SDtJKyspbltJXT1bSSwwXTtlW3UuaWRdPW59dmFyIE89dy5tb3JwaFRhcmdldHMmJnUubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uO3c9dy5tb3JwaE5vcm1hbHMmJnUubW9ycGhBdHRyaWJ1dGVzLm5vcm1hbDtmb3IoST0wO0k8SDtJKyspe3ZhciBRPW5bSV07MCE9PVFbMV0mJihPJiZ1LnJlbW92ZUF0dHJpYnV0ZSgibW9ycGhUYXJnZXQiK0kpLHcmJnUucmVtb3ZlQXR0cmlidXRlKCJtb3JwaE5vcm1hbCIrSSkpfWZvcihJPTA7STxIO0krKylRPW5bSV0sUVswXT1JLFFbMV09RVtJXTtuLnNvcnQodGQpO2ZvcihJPTA7OD5JO0krKyl7aWYoUT1uW0ldKWlmKEU9UVswXSxIPVFbMV0pe08mJnUuYWRkQXR0cmlidXRlKCJtb3JwaFRhcmdldCIrCkksT1tFXSk7dyYmdS5hZGRBdHRyaWJ1dGUoIm1vcnBoTm9ybWFsIitJLHdbRV0pO2hbSV09SDtjb250aW51ZX1oW0ldPTB9ei5nZXRVbmlmb3JtcygpLnNldFZhbHVlKGIsIm1vcnBoVGFyZ2V0SW5mbHVlbmNlcyIsaCl9fX1mdW5jdGlvbiAkZyhiLGUpe3ZhciBoPXt9O3JldHVybnt1cGRhdGU6ZnVuY3Rpb24obil7dmFyIHU9ZS5yZW5kZXIuZnJhbWUsdz1uLmdlb21ldHJ5LHo9Yi5nZXQobix3KTtoW3ouaWRdIT09dSYmKHcuaXNHZW9tZXRyeSYmei51cGRhdGVGcm9tT2JqZWN0KG4pLGIudXBkYXRlKHopLGhbei5pZF09dSk7cmV0dXJuIHp9LGRpc3Bvc2U6ZnVuY3Rpb24oKXtoPXt9fX19ZnVuY3Rpb24gdWQoYixlLGgsbix1LHcseixFLEgsSSl7Yj12b2lkIDAhPT1iP2I6W107ay5jYWxsKHRoaXMsYix2b2lkIDAhPT1lP2U6MzAxLGgsbix1LHcsdm9pZCAwIT09ej96OjEwMjIsRSxILEkpO3RoaXMuZmxpcFk9ITF9ZnVuY3Rpb24gS2UoYixlLGgsbil7ay5jYWxsKHRoaXMsbnVsbCk7CnRoaXMuaW1hZ2U9e2RhdGE6Yix3aWR0aDplLGhlaWdodDpoLGRlcHRoOm59O3RoaXMubWluRmlsdGVyPXRoaXMubWFnRmlsdGVyPTEwMDM7dGhpcy53cmFwUj0xMDAxO3RoaXMuZmxpcFk9dGhpcy5nZW5lcmF0ZU1pcG1hcHM9ITF9ZnVuY3Rpb24gTGUoYixlLGgsbil7ay5jYWxsKHRoaXMsbnVsbCk7dGhpcy5pbWFnZT17ZGF0YTpiLHdpZHRoOmUsaGVpZ2h0OmgsZGVwdGg6bn07dGhpcy5taW5GaWx0ZXI9dGhpcy5tYWdGaWx0ZXI9MTAwMzt0aGlzLndyYXBSPTEwMDE7dGhpcy5mbGlwWT10aGlzLmdlbmVyYXRlTWlwbWFwcz0hMX1mdW5jdGlvbiBNZShiLGUsaCl7dmFyIG49YlswXTtpZigwPj1ufHwwPG4pcmV0dXJuIGI7dmFyIHU9ZSpoLHc9U2tbdV07dm9pZCAwPT09dyYmKHc9bmV3IEZsb2F0MzJBcnJheSh1KSxTa1t1XT13KTtpZigwIT09ZSlmb3Iobi50b0FycmF5KHcsMCksbj0xLHU9MDtuIT09ZTsrK24pdSs9aCxiW25dLnRvQXJyYXkodyx1KTtyZXR1cm4gd31mdW5jdGlvbiBhYyhiLAplKXtpZihiLmxlbmd0aCE9PWUubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgaD0wLG49Yi5sZW5ndGg7aDxuO2grKylpZihiW2hdIT09ZVtoXSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBrYyhiLGUpe2Zvcih2YXIgaD0wLG49ZS5sZW5ndGg7aDxuO2grKyliW2hdPWVbaF19ZnVuY3Rpb24gVGsoYixlKXt2YXIgaD1Va1tlXTt2b2lkIDA9PT1oJiYoaD1uZXcgSW50MzJBcnJheShlKSxVa1tlXT1oKTtmb3IodmFyIG49MDtuIT09ZTsrK24paFtuXT1iLmFsbG9jYXRlVGV4dHVyZVVuaXQoKTtyZXR1cm4gaH1mdW5jdGlvbiBQbihiLGUpe3ZhciBoPXRoaXMuY2FjaGU7aFswXSE9PWUmJihiLnVuaWZvcm0xZih0aGlzLmFkZHIsZSksaFswXT1lKX1mdW5jdGlvbiBRbihiLGUpe3ZhciBoPXRoaXMuY2FjaGU7aFswXSE9PWUmJihiLnVuaWZvcm0xaSh0aGlzLmFkZHIsZSksaFswXT1lKX1mdW5jdGlvbiBSbihiLGUpe3ZhciBoPXRoaXMuY2FjaGU7aWYodm9pZCAwIT09ZS54KXtpZihoWzBdIT09CmUueHx8aFsxXSE9PWUueSliLnVuaWZvcm0yZih0aGlzLmFkZHIsZS54LGUueSksaFswXT1lLngsaFsxXT1lLnl9ZWxzZSBhYyhoLGUpfHwoYi51bmlmb3JtMmZ2KHRoaXMuYWRkcixlKSxrYyhoLGUpKX1mdW5jdGlvbiBTbihiLGUpe3ZhciBoPXRoaXMuY2FjaGU7aWYodm9pZCAwIT09ZS54KXtpZihoWzBdIT09ZS54fHxoWzFdIT09ZS55fHxoWzJdIT09ZS56KWIudW5pZm9ybTNmKHRoaXMuYWRkcixlLngsZS55LGUueiksaFswXT1lLngsaFsxXT1lLnksaFsyXT1lLnp9ZWxzZSBpZih2b2lkIDAhPT1lLnIpe2lmKGhbMF0hPT1lLnJ8fGhbMV0hPT1lLmd8fGhbMl0hPT1lLmIpYi51bmlmb3JtM2YodGhpcy5hZGRyLGUucixlLmcsZS5iKSxoWzBdPWUucixoWzFdPWUuZyxoWzJdPWUuYn1lbHNlIGFjKGgsZSl8fChiLnVuaWZvcm0zZnYodGhpcy5hZGRyLGUpLGtjKGgsZSkpfWZ1bmN0aW9uIFRuKGIsZSl7dmFyIGg9dGhpcy5jYWNoZTtpZih2b2lkIDAhPT1lLngpe2lmKGhbMF0hPT1lLnh8fApoWzFdIT09ZS55fHxoWzJdIT09ZS56fHxoWzNdIT09ZS53KWIudW5pZm9ybTRmKHRoaXMuYWRkcixlLngsZS55LGUueixlLncpLGhbMF09ZS54LGhbMV09ZS55LGhbMl09ZS56LGhbM109ZS53fWVsc2UgYWMoaCxlKXx8KGIudW5pZm9ybTRmdih0aGlzLmFkZHIsZSksa2MoaCxlKSl9ZnVuY3Rpb24gVW4oYixlKXt2YXIgaD10aGlzLmNhY2hlLG49ZS5lbGVtZW50czt2b2lkIDA9PT1uP2FjKGgsZSl8fChiLnVuaWZvcm1NYXRyaXgyZnYodGhpcy5hZGRyLCExLGUpLGtjKGgsZSkpOmFjKGgsbil8fChWay5zZXQobiksYi51bmlmb3JtTWF0cml4MmZ2KHRoaXMuYWRkciwhMSxWayksa2MoaCxuKSl9ZnVuY3Rpb24gVm4oYixlKXt2YXIgaD10aGlzLmNhY2hlLG49ZS5lbGVtZW50czt2b2lkIDA9PT1uP2FjKGgsZSl8fChiLnVuaWZvcm1NYXRyaXgzZnYodGhpcy5hZGRyLCExLGUpLGtjKGgsZSkpOmFjKGgsbil8fChXay5zZXQobiksYi51bmlmb3JtTWF0cml4M2Z2KHRoaXMuYWRkciwhMSwKV2spLGtjKGgsbikpfWZ1bmN0aW9uIFduKGIsZSl7dmFyIGg9dGhpcy5jYWNoZSxuPWUuZWxlbWVudHM7dm9pZCAwPT09bj9hYyhoLGUpfHwoYi51bmlmb3JtTWF0cml4NGZ2KHRoaXMuYWRkciwhMSxlKSxrYyhoLGUpKTphYyhoLG4pfHwoWGsuc2V0KG4pLGIudW5pZm9ybU1hdHJpeDRmdih0aGlzLmFkZHIsITEsWGspLGtjKGgsbikpfWZ1bmN0aW9uIFhuKGIsZSxoKXt2YXIgbj10aGlzLmNhY2hlLHU9aC5hbGxvY2F0ZVRleHR1cmVVbml0KCk7blswXSE9PXUmJihiLnVuaWZvcm0xaSh0aGlzLmFkZHIsdSksblswXT11KTtoLnNhZmVTZXRUZXh0dXJlMkQoZXx8WWssdSl9ZnVuY3Rpb24gWW4oYixlLGgpe3ZhciBuPXRoaXMuY2FjaGUsdT1oLmFsbG9jYXRlVGV4dHVyZVVuaXQoKTtuWzBdIT09dSYmKGIudW5pZm9ybTFpKHRoaXMuYWRkcix1KSxuWzBdPXUpO2guc2V0VGV4dHVyZTJEQXJyYXkoZXx8Wm4sdSl9ZnVuY3Rpb24gJG4oYixlLGgpe3ZhciBuPXRoaXMuY2FjaGUsdT1oLmFsbG9jYXRlVGV4dHVyZVVuaXQoKTsKblswXSE9PXUmJihiLnVuaWZvcm0xaSh0aGlzLmFkZHIsdSksblswXT11KTtoLnNldFRleHR1cmUzRChlfHxhbyx1KX1mdW5jdGlvbiBibyhiLGUsaCl7dmFyIG49dGhpcy5jYWNoZSx1PWguYWxsb2NhdGVUZXh0dXJlVW5pdCgpO25bMF0hPT11JiYoYi51bmlmb3JtMWkodGhpcy5hZGRyLHUpLG5bMF09dSk7aC5zYWZlU2V0VGV4dHVyZUN1YmUoZXx8WmssdSl9ZnVuY3Rpb24gJGsoYixlKXt2YXIgaD10aGlzLmNhY2hlO2FjKGgsZSl8fChiLnVuaWZvcm0yaXYodGhpcy5hZGRyLGUpLGtjKGgsZSkpfWZ1bmN0aW9uIGFsKGIsZSl7dmFyIGg9dGhpcy5jYWNoZTthYyhoLGUpfHwoYi51bmlmb3JtM2l2KHRoaXMuYWRkcixlKSxrYyhoLGUpKX1mdW5jdGlvbiBibChiLGUpe3ZhciBoPXRoaXMuY2FjaGU7YWMoaCxlKXx8KGIudW5pZm9ybTRpdih0aGlzLmFkZHIsZSksa2MoaCxlKSl9ZnVuY3Rpb24gY28oYil7c3dpdGNoKGIpe2Nhc2UgNTEyNjpyZXR1cm4gUG47Y2FzZSAzNTY2NDpyZXR1cm4gUm47CmNhc2UgMzU2NjU6cmV0dXJuIFNuO2Nhc2UgMzU2NjY6cmV0dXJuIFRuO2Nhc2UgMzU2NzQ6cmV0dXJuIFVuO2Nhc2UgMzU2NzU6cmV0dXJuIFZuO2Nhc2UgMzU2NzY6cmV0dXJuIFduO2Nhc2UgMzU2Nzg6Y2FzZSAzNjE5ODpyZXR1cm4gWG47Y2FzZSAzNTY3OTpyZXR1cm4gJG47Y2FzZSAzNTY4MDpyZXR1cm4gYm87Y2FzZSAzNjI4OTpyZXR1cm4gWW47Y2FzZSA1MTI0OmNhc2UgMzU2NzA6cmV0dXJuIFFuO2Nhc2UgMzU2Njc6Y2FzZSAzNTY3MTpyZXR1cm4gJGs7Y2FzZSAzNTY2ODpjYXNlIDM1NjcyOnJldHVybiBhbDtjYXNlIDM1NjY5OmNhc2UgMzU2NzM6cmV0dXJuIGJsfX1mdW5jdGlvbiBlbyhiLGUpe3ZhciBoPXRoaXMuY2FjaGU7YWMoaCxlKXx8KGIudW5pZm9ybTFmdih0aGlzLmFkZHIsZSksa2MoaCxlKSl9ZnVuY3Rpb24gZm8oYixlKXt2YXIgaD10aGlzLmNhY2hlO2FjKGgsZSl8fChiLnVuaWZvcm0xaXYodGhpcy5hZGRyLGUpLGtjKGgsZSkpfWZ1bmN0aW9uIGdvKGIsZSl7dmFyIGg9CnRoaXMuY2FjaGU7ZT1NZShlLHRoaXMuc2l6ZSwyKTthYyhoLGUpfHwoYi51bmlmb3JtMmZ2KHRoaXMuYWRkcixlKSx0aGlzLnVwZGF0ZUNhY2hlKGUpKX1mdW5jdGlvbiBobyhiLGUpe3ZhciBoPXRoaXMuY2FjaGU7ZT1NZShlLHRoaXMuc2l6ZSwzKTthYyhoLGUpfHwoYi51bmlmb3JtM2Z2KHRoaXMuYWRkcixlKSx0aGlzLnVwZGF0ZUNhY2hlKGUpKX1mdW5jdGlvbiBpbyhiLGUpe3ZhciBoPXRoaXMuY2FjaGU7ZT1NZShlLHRoaXMuc2l6ZSw0KTthYyhoLGUpfHwoYi51bmlmb3JtNGZ2KHRoaXMuYWRkcixlKSx0aGlzLnVwZGF0ZUNhY2hlKGUpKX1mdW5jdGlvbiBqbyhiLGUpe3ZhciBoPXRoaXMuY2FjaGU7ZT1NZShlLHRoaXMuc2l6ZSw0KTthYyhoLGUpfHwoYi51bmlmb3JtTWF0cml4MmZ2KHRoaXMuYWRkciwhMSxlKSx0aGlzLnVwZGF0ZUNhY2hlKGUpKX1mdW5jdGlvbiBrbyhiLGUpe3ZhciBoPXRoaXMuY2FjaGU7ZT1NZShlLHRoaXMuc2l6ZSw5KTthYyhoLGUpfHwoYi51bmlmb3JtTWF0cml4M2Z2KHRoaXMuYWRkciwKITEsZSksdGhpcy51cGRhdGVDYWNoZShlKSl9ZnVuY3Rpb24gbG8oYixlKXt2YXIgaD10aGlzLmNhY2hlO2U9TWUoZSx0aGlzLnNpemUsMTYpO2FjKGgsZSl8fChiLnVuaWZvcm1NYXRyaXg0ZnYodGhpcy5hZGRyLCExLGUpLHRoaXMudXBkYXRlQ2FjaGUoZSkpfWZ1bmN0aW9uIG1vKGIsZSxoKXt2YXIgbj10aGlzLmNhY2hlLHU9ZS5sZW5ndGgsdz1UayhoLHUpOyExPT09YWMobix3KSYmKGIudW5pZm9ybTFpdih0aGlzLmFkZHIsdyksa2Mobix3KSk7Zm9yKGI9MDtiIT09dTsrK2IpaC5zYWZlU2V0VGV4dHVyZTJEKGVbYl18fFlrLHdbYl0pfWZ1bmN0aW9uIG5vKGIsZSxoKXt2YXIgbj10aGlzLmNhY2hlLHU9ZS5sZW5ndGgsdz1UayhoLHUpOyExPT09YWMobix3KSYmKGIudW5pZm9ybTFpdih0aGlzLmFkZHIsdyksa2Mobix3KSk7Zm9yKGI9MDtiIT09dTsrK2IpaC5zYWZlU2V0VGV4dHVyZUN1YmUoZVtiXXx8Wmssd1tiXSl9ZnVuY3Rpb24gb28oYil7c3dpdGNoKGIpe2Nhc2UgNTEyNjpyZXR1cm4gZW87CmNhc2UgMzU2NjQ6cmV0dXJuIGdvO2Nhc2UgMzU2NjU6cmV0dXJuIGhvO2Nhc2UgMzU2NjY6cmV0dXJuIGlvO2Nhc2UgMzU2NzQ6cmV0dXJuIGpvO2Nhc2UgMzU2NzU6cmV0dXJuIGtvO2Nhc2UgMzU2NzY6cmV0dXJuIGxvO2Nhc2UgMzU2Nzg6cmV0dXJuIG1vO2Nhc2UgMzU2ODA6cmV0dXJuIG5vO2Nhc2UgNTEyNDpjYXNlIDM1NjcwOnJldHVybiBmbztjYXNlIDM1NjY3OmNhc2UgMzU2NzE6cmV0dXJuICRrO2Nhc2UgMzU2Njg6Y2FzZSAzNTY3MjpyZXR1cm4gYWw7Y2FzZSAzNTY2OTpjYXNlIDM1NjczOnJldHVybiBibH19ZnVuY3Rpb24gcG8oYixlLGgpe3RoaXMuaWQ9Yjt0aGlzLmFkZHI9aDt0aGlzLmNhY2hlPVtdO3RoaXMuc2V0VmFsdWU9Y28oZS50eXBlKX1mdW5jdGlvbiBjbChiLGUsaCl7dGhpcy5pZD1iO3RoaXMuYWRkcj1oO3RoaXMuY2FjaGU9W107dGhpcy5zaXplPWUuc2l6ZTt0aGlzLnNldFZhbHVlPW9vKGUudHlwZSl9ZnVuY3Rpb24gZGwoYil7dGhpcy5pZD1iO3RoaXMuc2VxPQpbXTt0aGlzLm1hcD17fX1mdW5jdGlvbiBlbChiLGUpe2Iuc2VxLnB1c2goZSk7Yi5tYXBbZS5pZF09ZX1mdW5jdGlvbiBxbyhiLGUsaCl7dmFyIG49Yi5uYW1lLHU9bi5sZW5ndGg7Zm9yKHJpLmxhc3RJbmRleD0wOzspe3ZhciB3PXJpLmV4ZWMobiksej1yaS5sYXN0SW5kZXgsRT13WzFdLEg9d1szXTsiXSI9PT13WzJdJiYoRXw9MCk7aWYodm9pZCAwPT09SHx8IlsiPT09SCYmeisyPT09dSl7ZWwoaCx2b2lkIDA9PT1IP25ldyBwbyhFLGIsZSk6bmV3IGNsKEUsYixlKSk7YnJlYWt9ZWxzZSB3PWgubWFwW0VdLHZvaWQgMD09PXcmJih3PW5ldyBkbChFKSxlbChoLHcpKSxoPXd9fWZ1bmN0aW9uIE9kKGIsZSl7dGhpcy5zZXE9W107dGhpcy5tYXA9e307Zm9yKHZhciBoPWIuZ2V0UHJvZ3JhbVBhcmFtZXRlcihlLDM1NzE4KSxuPTA7bjxoOysrbil7dmFyIHU9Yi5nZXRBY3RpdmVVbmlmb3JtKGUsbik7cW8odSxiLmdldFVuaWZvcm1Mb2NhdGlvbihlLHUubmFtZSksdGhpcyl9fWZ1bmN0aW9uIHJvKGIpe2I9CmIuc3BsaXQoIlxuIik7Zm9yKHZhciBlPTA7ZTxiLmxlbmd0aDtlKyspYltlXT1lKzErIjogIitiW2VdO3JldHVybiBiLmpvaW4oIlxuIil9ZnVuY3Rpb24gZmwoYixlLGgsbil7dmFyIHU9Yi5jcmVhdGVTaGFkZXIoZSk7Yi5zaGFkZXJTb3VyY2UodSxoKTtiLmNvbXBpbGVTaGFkZXIodSk7ITA9PT1uJiYoITE9PT1iLmdldFNoYWRlclBhcmFtZXRlcih1LDM1NzEzKSYmY29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xTaGFkZXI6IFNoYWRlciBjb3VsZG4ndCBjb21waWxlLiIpLCIiIT09Yi5nZXRTaGFkZXJJbmZvTG9nKHUpJiZjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMU2hhZGVyOiBnbC5nZXRTaGFkZXJJbmZvTG9nKCkiLDM1NjMzPT09ZT8idmVydGV4IjoiZnJhZ21lbnQiLGIuZ2V0U2hhZGVySW5mb0xvZyh1KSxybyhoKSkpO3JldHVybiB1fWZ1bmN0aW9uIGdsKGIpe3N3aXRjaChiKXtjYXNlIDNFMzpyZXR1cm5bIkxpbmVhciIsIiggdmFsdWUgKSJdO2Nhc2UgMzAwMTpyZXR1cm5bInNSR0IiLAoiKCB2YWx1ZSApIl07Y2FzZSAzMDAyOnJldHVyblsiUkdCRSIsIiggdmFsdWUgKSJdO2Nhc2UgMzAwNDpyZXR1cm5bIlJHQk0iLCIoIHZhbHVlLCA3LjAgKSJdO2Nhc2UgMzAwNTpyZXR1cm5bIlJHQk0iLCIoIHZhbHVlLCAxNi4wICkiXTtjYXNlIDMwMDY6cmV0dXJuWyJSR0JEIiwiKCB2YWx1ZSwgMjU2LjAgKSJdO2Nhc2UgMzAwNzpyZXR1cm5bIkdhbW1hIiwiKCB2YWx1ZSwgZmxvYXQoIEdBTU1BX0ZBQ1RPUiApICkiXTtkZWZhdWx0OnRocm93IEVycm9yKCJ1bnN1cHBvcnRlZCBlbmNvZGluZzogIitiKTt9fWZ1bmN0aW9uIGFoKGIsZSl7ZT1nbChlKTtyZXR1cm4idmVjNCAiK2IrIiggdmVjNCB2YWx1ZSApIHsgcmV0dXJuICIrZVswXSsiVG9MaW5lYXIiK2VbMV0rIjsgfSJ9ZnVuY3Rpb24gc28oYixlKXtlPWdsKGUpO3JldHVybiJ2ZWM0ICIrYisiKCB2ZWM0IHZhbHVlICkgeyByZXR1cm4gTGluZWFyVG8iK2VbMF0rZVsxXSsiOyB9In1mdW5jdGlvbiB0byhiLGUpe3N3aXRjaChlKXtjYXNlIDE6ZT0KIkxpbmVhciI7YnJlYWs7Y2FzZSAyOmU9IlJlaW5oYXJkIjticmVhaztjYXNlIDM6ZT0iVW5jaGFydGVkMiI7YnJlYWs7Y2FzZSA0OmU9Ik9wdGltaXplZENpbmVvbiI7YnJlYWs7Y2FzZSA1OmU9IkFDRVNGaWxtaWMiO2JyZWFrO2RlZmF1bHQ6dGhyb3cgRXJyb3IoInVuc3VwcG9ydGVkIHRvbmVNYXBwaW5nOiAiK2UpO31yZXR1cm4idmVjMyAiK2IrIiggdmVjMyBjb2xvciApIHsgcmV0dXJuICIrZSsiVG9uZU1hcHBpbmcoIGNvbG9yICk7IH0ifWZ1bmN0aW9uIHVvKGIsZSxoKXtiPWJ8fHt9O3JldHVybltiLmRlcml2YXRpdmVzfHxlLmVudk1hcEN1YmVVVnx8ZS5idW1wTWFwfHxlLm5vcm1hbE1hcCYmIWUub2JqZWN0U3BhY2VOb3JtYWxNYXB8fGUuZmxhdFNoYWRpbmc/IiNleHRlbnNpb24gR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIDogZW5hYmxlIjoiIiwoYi5mcmFnRGVwdGh8fGUubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlcikmJmguZ2V0KCJFWFRfZnJhZ19kZXB0aCIpPyIjZXh0ZW5zaW9uIEdMX0VYVF9mcmFnX2RlcHRoIDogZW5hYmxlIjoKIiIsYi5kcmF3QnVmZmVycyYmaC5nZXQoIldFQkdMX2RyYXdfYnVmZmVycyIpPyIjZXh0ZW5zaW9uIEdMX0VYVF9kcmF3X2J1ZmZlcnMgOiByZXF1aXJlIjoiIiwoYi5zaGFkZXJUZXh0dXJlTE9EfHxlLmVudk1hcCkmJmguZ2V0KCJFWFRfc2hhZGVyX3RleHR1cmVfbG9kIik/IiNleHRlbnNpb24gR0xfRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCA6IGVuYWJsZSI6IiJdLmZpbHRlcihPZikuam9pbigiXG4iKX1mdW5jdGlvbiB2byhiKXt2YXIgZT1bXSxoO2ZvcihoIGluIGIpe3ZhciBuPWJbaF07ITEhPT1uJiZlLnB1c2goIiNkZWZpbmUgIitoKyIgIituKX1yZXR1cm4gZS5qb2luKCJcbiIpfWZ1bmN0aW9uIHdvKGIsZSl7Zm9yKHZhciBoPXt9LG49Yi5nZXRQcm9ncmFtUGFyYW1ldGVyKGUsMzU3MjEpLHU9MDt1PG47dSsrKXt2YXIgdz1iLmdldEFjdGl2ZUF0dHJpYihlLHUpLm5hbWU7aFt3XT1iLmdldEF0dHJpYkxvY2F0aW9uKGUsdyl9cmV0dXJuIGh9ZnVuY3Rpb24gT2YoYil7cmV0dXJuIiIhPT0KYn1mdW5jdGlvbiBobChiLGUpe3JldHVybiBiLnJlcGxhY2UoL05VTV9ESVJfTElHSFRTL2csZS5udW1EaXJMaWdodHMpLnJlcGxhY2UoL05VTV9TUE9UX0xJR0hUUy9nLGUubnVtU3BvdExpZ2h0cykucmVwbGFjZSgvTlVNX1JFQ1RfQVJFQV9MSUdIVFMvZyxlLm51bVJlY3RBcmVhTGlnaHRzKS5yZXBsYWNlKC9OVU1fUE9JTlRfTElHSFRTL2csZS5udW1Qb2ludExpZ2h0cykucmVwbGFjZSgvTlVNX0hFTUlfTElHSFRTL2csZS5udW1IZW1pTGlnaHRzKX1mdW5jdGlvbiBpbChiLGUpe3JldHVybiBiLnJlcGxhY2UoL05VTV9DTElQUElOR19QTEFORVMvZyxlLm51bUNsaXBwaW5nUGxhbmVzKS5yZXBsYWNlKC9VTklPTl9DTElQUElOR19QTEFORVMvZyxlLm51bUNsaXBwaW5nUGxhbmVzLWUubnVtQ2xpcEludGVyc2VjdGlvbil9ZnVuY3Rpb24gc2koYil7cmV0dXJuIGIucmVwbGFjZSgvXlsgXHRdKiNpbmNsdWRlICs8KFtcd1xkLi9dKyk+L2dtLGZ1bmN0aW9uKGUsaCl7ZT16YltoXTtpZih2b2lkIDA9PT0KZSl0aHJvdyBFcnJvcigiQ2FuIG5vdCByZXNvbHZlICNpbmNsdWRlIFx4M2MiK2grIlx4M2UiKTtyZXR1cm4gc2koZSl9KX1mdW5jdGlvbiBqbChiKXtyZXR1cm4gYi5yZXBsYWNlKC8jcHJhZ21hIHVucm9sbF9sb29wW1xzXSs/Zm9yIFwoIGludCBpID0gKFxkKyk7IGkgPCAoXGQrKTsgaSBcK1wrIFwpIFx7KFtcc1xTXSs/KSg/PVx9KVx9L2csZnVuY3Rpb24oZSxoLG4sdSl7ZT0iIjtmb3IoaD1wYXJzZUludChoKTtoPHBhcnNlSW50KG4pO2grKyllKz11LnJlcGxhY2UoL1xbIGkgXF0vZywiWyAiK2grIiBdIik7cmV0dXJuIGV9KX1mdW5jdGlvbiB4byhiLGUsaCxuLHUsdyx6LEUpe3ZhciBIPWIuY29udGV4dCxJPW4uZGVmaW5lcyxPPXUudmVydGV4U2hhZGVyLFE9dS5mcmFnbWVudFNoYWRlcixSPSJTSEFET1dNQVBfVFlQRV9CQVNJQyI7MT09PXcuc2hhZG93TWFwVHlwZT9SPSJTSEFET1dNQVBfVFlQRV9QQ0YiOjI9PT13LnNoYWRvd01hcFR5cGUmJihSPSJTSEFET1dNQVBfVFlQRV9QQ0ZfU09GVCIpOwp2YXIgVT0iRU5WTUFQX1RZUEVfQ1VCRSIsVz0iRU5WTUFQX01PREVfUkVGTEVDVElPTiIsWj0iRU5WTUFQX0JMRU5ESU5HX01VTFRJUExZIjtpZih3LmVudk1hcCl7c3dpdGNoKG4uZW52TWFwLm1hcHBpbmcpe2Nhc2UgMzAxOmNhc2UgMzAyOlU9IkVOVk1BUF9UWVBFX0NVQkUiO2JyZWFrO2Nhc2UgMzA2OmNhc2UgMzA3OlU9IkVOVk1BUF9UWVBFX0NVQkVfVVYiO2JyZWFrO2Nhc2UgMzAzOmNhc2UgMzA0OlU9IkVOVk1BUF9UWVBFX0VRVUlSRUMiO2JyZWFrO2Nhc2UgMzA1OlU9IkVOVk1BUF9UWVBFX1NQSEVSRSJ9c3dpdGNoKG4uZW52TWFwLm1hcHBpbmcpe2Nhc2UgMzAyOmNhc2UgMzA0Olc9IkVOVk1BUF9NT0RFX1JFRlJBQ1RJT04ifXN3aXRjaChuLmNvbWJpbmUpe2Nhc2UgMDpaPSJFTlZNQVBfQkxFTkRJTkdfTVVMVElQTFkiO2JyZWFrO2Nhc2UgMTpaPSJFTlZNQVBfQkxFTkRJTkdfTUlYIjticmVhaztjYXNlIDI6Wj0iRU5WTUFQX0JMRU5ESU5HX0FERCJ9fXZhciBmYT0wPGIuZ2FtbWFGYWN0b3I/CmIuZ2FtbWFGYWN0b3I6MSxxYT16LmlzV2ViR0wyPyIiOnVvKG4uZXh0ZW5zaW9ucyx3LGUpLHJhPXZvKEkpLGlhPUguY3JlYXRlUHJvZ3JhbSgpO24uaXNSYXdTaGFkZXJNYXRlcmlhbD8oST1bcmFdLmZpbHRlcihPZikuam9pbigiXG4iKSwwPEkubGVuZ3RoJiYoSSs9IlxuIiksZT1bcWEscmFdLmZpbHRlcihPZikuam9pbigiXG4iKSwwPGUubGVuZ3RoJiYoZSs9IlxuIikpOihJPVsicHJlY2lzaW9uICIrdy5wcmVjaXNpb24rIiBmbG9hdDsiLCJwcmVjaXNpb24gIit3LnByZWNpc2lvbisiIGludDsiLCIjZGVmaW5lIFNIQURFUl9OQU1FICIrdS5uYW1lLHJhLHcuc3VwcG9ydHNWZXJ0ZXhUZXh0dXJlcz8iI2RlZmluZSBWRVJURVhfVEVYVFVSRVMiOiIiLCIjZGVmaW5lIEdBTU1BX0ZBQ1RPUiAiK2ZhLCIjZGVmaW5lIE1BWF9CT05FUyAiK3cubWF4Qm9uZXMsdy51c2VGb2cmJncuZm9nPyIjZGVmaW5lIFVTRV9GT0ciOiIiLHcudXNlRm9nJiZ3LmZvZ0V4cD8iI2RlZmluZSBGT0dfRVhQMiI6CiIiLHcubWFwPyIjZGVmaW5lIFVTRV9NQVAiOiIiLHcuZW52TWFwPyIjZGVmaW5lIFVTRV9FTlZNQVAiOiIiLHcuZW52TWFwPyIjZGVmaW5lICIrVzoiIix3LmxpZ2h0TWFwPyIjZGVmaW5lIFVTRV9MSUdIVE1BUCI6IiIsdy5hb01hcD8iI2RlZmluZSBVU0VfQU9NQVAiOiIiLHcuZW1pc3NpdmVNYXA/IiNkZWZpbmUgVVNFX0VNSVNTSVZFTUFQIjoiIix3LmJ1bXBNYXA/IiNkZWZpbmUgVVNFX0JVTVBNQVAiOiIiLHcubm9ybWFsTWFwPyIjZGVmaW5lIFVTRV9OT1JNQUxNQVAiOiIiLHcubm9ybWFsTWFwJiZ3Lm9iamVjdFNwYWNlTm9ybWFsTWFwPyIjZGVmaW5lIE9CSkVDVFNQQUNFX05PUk1BTE1BUCI6IiIsdy5kaXNwbGFjZW1lbnRNYXAmJncuc3VwcG9ydHNWZXJ0ZXhUZXh0dXJlcz8iI2RlZmluZSBVU0VfRElTUExBQ0VNRU5UTUFQIjoiIix3LnNwZWN1bGFyTWFwPyIjZGVmaW5lIFVTRV9TUEVDVUxBUk1BUCI6IiIsdy5yb3VnaG5lc3NNYXA/IiNkZWZpbmUgVVNFX1JPVUdITkVTU01BUCI6CiIiLHcubWV0YWxuZXNzTWFwPyIjZGVmaW5lIFVTRV9NRVRBTE5FU1NNQVAiOiIiLHcuYWxwaGFNYXA/IiNkZWZpbmUgVVNFX0FMUEhBTUFQIjoiIix3LnZlcnRleFRhbmdlbnRzPyIjZGVmaW5lIFVTRV9UQU5HRU5UIjoiIix3LnZlcnRleENvbG9ycz8iI2RlZmluZSBVU0VfQ09MT1IiOiIiLHcuZmxhdFNoYWRpbmc/IiNkZWZpbmUgRkxBVF9TSEFERUQiOiIiLHcuc2tpbm5pbmc/IiNkZWZpbmUgVVNFX1NLSU5OSU5HIjoiIix3LnVzZVZlcnRleFRleHR1cmU/IiNkZWZpbmUgQk9ORV9URVhUVVJFIjoiIix3Lm1vcnBoVGFyZ2V0cz8iI2RlZmluZSBVU0VfTU9SUEhUQVJHRVRTIjoiIix3Lm1vcnBoTm9ybWFscyYmITE9PT13LmZsYXRTaGFkaW5nPyIjZGVmaW5lIFVTRV9NT1JQSE5PUk1BTFMiOiIiLHcuZG91YmxlU2lkZWQ/IiNkZWZpbmUgRE9VQkxFX1NJREVEIjoiIix3LmZsaXBTaWRlZD8iI2RlZmluZSBGTElQX1NJREVEIjoiIix3LnNoYWRvd01hcEVuYWJsZWQ/IiNkZWZpbmUgVVNFX1NIQURPV01BUCI6CiIiLHcuc2hhZG93TWFwRW5hYmxlZD8iI2RlZmluZSAiK1I6IiIsdy5zaXplQXR0ZW51YXRpb24/IiNkZWZpbmUgVVNFX1NJWkVBVFRFTlVBVElPTiI6IiIsdy5sb2dhcml0aG1pY0RlcHRoQnVmZmVyPyIjZGVmaW5lIFVTRV9MT0dERVBUSEJVRiI6IiIsdy5sb2dhcml0aG1pY0RlcHRoQnVmZmVyJiYoei5pc1dlYkdMMnx8ZS5nZXQoIkVYVF9mcmFnX2RlcHRoIikpPyIjZGVmaW5lIFVTRV9MT0dERVBUSEJVRl9FWFQiOiIiLCJ1bmlmb3JtIG1hdDQgbW9kZWxNYXRyaXg7IiwidW5pZm9ybSBtYXQ0IG1vZGVsVmlld01hdHJpeDsiLCJ1bmlmb3JtIG1hdDQgcHJvamVjdGlvbk1hdHJpeDsiLCJ1bmlmb3JtIG1hdDQgdmlld01hdHJpeDsiLCJ1bmlmb3JtIG1hdDMgbm9ybWFsTWF0cml4OyIsInVuaWZvcm0gdmVjMyBjYW1lcmFQb3NpdGlvbjsiLCJhdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjsiLCJhdHRyaWJ1dGUgdmVjMyBub3JtYWw7IiwiYXR0cmlidXRlIHZlYzIgdXY7IiwiI2lmZGVmIFVTRV9UQU5HRU5UIiwKIlx0YXR0cmlidXRlIHZlYzQgdGFuZ2VudDsiLCIjZW5kaWYiLCIjaWZkZWYgVVNFX0NPTE9SIiwiXHRhdHRyaWJ1dGUgdmVjMyBjb2xvcjsiLCIjZW5kaWYiLCIjaWZkZWYgVVNFX01PUlBIVEFSR0VUUyIsIlx0YXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQwOyIsIlx0YXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQxOyIsIlx0YXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQyOyIsIlx0YXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQzOyIsIlx0I2lmZGVmIFVTRV9NT1JQSE5PUk1BTFMiLCJcdFx0YXR0cmlidXRlIHZlYzMgbW9ycGhOb3JtYWwwOyIsIlx0XHRhdHRyaWJ1dGUgdmVjMyBtb3JwaE5vcm1hbDE7IiwiXHRcdGF0dHJpYnV0ZSB2ZWMzIG1vcnBoTm9ybWFsMjsiLCJcdFx0YXR0cmlidXRlIHZlYzMgbW9ycGhOb3JtYWwzOyIsIlx0I2Vsc2UiLCJcdFx0YXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQ0OyIsIlx0XHRhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDU7IiwiXHRcdGF0dHJpYnV0ZSB2ZWMzIG1vcnBoVGFyZ2V0NjsiLAoiXHRcdGF0dHJpYnV0ZSB2ZWMzIG1vcnBoVGFyZ2V0NzsiLCJcdCNlbmRpZiIsIiNlbmRpZiIsIiNpZmRlZiBVU0VfU0tJTk5JTkciLCJcdGF0dHJpYnV0ZSB2ZWM0IHNraW5JbmRleDsiLCJcdGF0dHJpYnV0ZSB2ZWM0IHNraW5XZWlnaHQ7IiwiI2VuZGlmIiwiXG4iXS5maWx0ZXIoT2YpLmpvaW4oIlxuIiksZT1bcWEsInByZWNpc2lvbiAiK3cucHJlY2lzaW9uKyIgZmxvYXQ7IiwicHJlY2lzaW9uICIrdy5wcmVjaXNpb24rIiBpbnQ7IiwiI2RlZmluZSBTSEFERVJfTkFNRSAiK3UubmFtZSxyYSx3LmFscGhhVGVzdD8iI2RlZmluZSBBTFBIQVRFU1QgIit3LmFscGhhVGVzdCsody5hbHBoYVRlc3QlMT8iIjoiLjAiKToiIiwiI2RlZmluZSBHQU1NQV9GQUNUT1IgIitmYSx3LnVzZUZvZyYmdy5mb2c/IiNkZWZpbmUgVVNFX0ZPRyI6IiIsdy51c2VGb2cmJncuZm9nRXhwPyIjZGVmaW5lIEZPR19FWFAyIjoiIix3Lm1hcD8iI2RlZmluZSBVU0VfTUFQIjoiIix3Lm1hdGNhcD8iI2RlZmluZSBVU0VfTUFUQ0FQIjoKIiIsdy5lbnZNYXA/IiNkZWZpbmUgVVNFX0VOVk1BUCI6IiIsdy5lbnZNYXA/IiNkZWZpbmUgIitVOiIiLHcuZW52TWFwPyIjZGVmaW5lICIrVzoiIix3LmVudk1hcD8iI2RlZmluZSAiK1o6IiIsdy5saWdodE1hcD8iI2RlZmluZSBVU0VfTElHSFRNQVAiOiIiLHcuYW9NYXA/IiNkZWZpbmUgVVNFX0FPTUFQIjoiIix3LmVtaXNzaXZlTWFwPyIjZGVmaW5lIFVTRV9FTUlTU0lWRU1BUCI6IiIsdy5idW1wTWFwPyIjZGVmaW5lIFVTRV9CVU1QTUFQIjoiIix3Lm5vcm1hbE1hcD8iI2RlZmluZSBVU0VfTk9STUFMTUFQIjoiIix3Lm5vcm1hbE1hcCYmdy5vYmplY3RTcGFjZU5vcm1hbE1hcD8iI2RlZmluZSBPQkpFQ1RTUEFDRV9OT1JNQUxNQVAiOiIiLHcuc3BlY3VsYXJNYXA/IiNkZWZpbmUgVVNFX1NQRUNVTEFSTUFQIjoiIix3LnJvdWdobmVzc01hcD8iI2RlZmluZSBVU0VfUk9VR0hORVNTTUFQIjoiIix3Lm1ldGFsbmVzc01hcD8iI2RlZmluZSBVU0VfTUVUQUxORVNTTUFQIjoiIix3LmFscGhhTWFwPwoiI2RlZmluZSBVU0VfQUxQSEFNQVAiOiIiLHcudmVydGV4VGFuZ2VudHM/IiNkZWZpbmUgVVNFX1RBTkdFTlQiOiIiLHcudmVydGV4Q29sb3JzPyIjZGVmaW5lIFVTRV9DT0xPUiI6IiIsdy5ncmFkaWVudE1hcD8iI2RlZmluZSBVU0VfR1JBRElFTlRNQVAiOiIiLHcuZmxhdFNoYWRpbmc/IiNkZWZpbmUgRkxBVF9TSEFERUQiOiIiLHcuZG91YmxlU2lkZWQ/IiNkZWZpbmUgRE9VQkxFX1NJREVEIjoiIix3LmZsaXBTaWRlZD8iI2RlZmluZSBGTElQX1NJREVEIjoiIix3LnNoYWRvd01hcEVuYWJsZWQ/IiNkZWZpbmUgVVNFX1NIQURPV01BUCI6IiIsdy5zaGFkb3dNYXBFbmFibGVkPyIjZGVmaW5lICIrUjoiIix3LnByZW11bHRpcGxpZWRBbHBoYT8iI2RlZmluZSBQUkVNVUxUSVBMSUVEX0FMUEhBIjoiIix3LnBoeXNpY2FsbHlDb3JyZWN0TGlnaHRzPyIjZGVmaW5lIFBIWVNJQ0FMTFlfQ09SUkVDVF9MSUdIVFMiOiIiLHcubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlcj8iI2RlZmluZSBVU0VfTE9HREVQVEhCVUYiOgoiIix3LmxvZ2FyaXRobWljRGVwdGhCdWZmZXImJih6LmlzV2ViR0wyfHxlLmdldCgiRVhUX2ZyYWdfZGVwdGgiKSk/IiNkZWZpbmUgVVNFX0xPR0RFUFRIQlVGX0VYVCI6IiIsdy5lbnZNYXAmJih6LmlzV2ViR0wyfHxlLmdldCgiRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCIpKT8iI2RlZmluZSBURVhUVVJFX0xPRF9FWFQiOiIiLCJ1bmlmb3JtIG1hdDQgdmlld01hdHJpeDsiLCJ1bmlmb3JtIHZlYzMgY2FtZXJhUG9zaXRpb247IiwwIT09dy50b25lTWFwcGluZz8iI2RlZmluZSBUT05FX01BUFBJTkciOiIiLDAhPT13LnRvbmVNYXBwaW5nP3piLnRvbmVtYXBwaW5nX3BhcnNfZnJhZ21lbnQ6IiIsMCE9PXcudG9uZU1hcHBpbmc/dG8oInRvbmVNYXBwaW5nIix3LnRvbmVNYXBwaW5nKToiIix3LmRpdGhlcmluZz8iI2RlZmluZSBESVRIRVJJTkciOiIiLHcub3V0cHV0RW5jb2Rpbmd8fHcubWFwRW5jb2Rpbmd8fHcubWF0Y2FwRW5jb2Rpbmd8fHcuZW52TWFwRW5jb2Rpbmd8fHcuZW1pc3NpdmVNYXBFbmNvZGluZz8KemIuZW5jb2RpbmdzX3BhcnNfZnJhZ21lbnQ6IiIsdy5tYXBFbmNvZGluZz9haCgibWFwVGV4ZWxUb0xpbmVhciIsdy5tYXBFbmNvZGluZyk6IiIsdy5tYXRjYXBFbmNvZGluZz9haCgibWF0Y2FwVGV4ZWxUb0xpbmVhciIsdy5tYXRjYXBFbmNvZGluZyk6IiIsdy5lbnZNYXBFbmNvZGluZz9haCgiZW52TWFwVGV4ZWxUb0xpbmVhciIsdy5lbnZNYXBFbmNvZGluZyk6IiIsdy5lbWlzc2l2ZU1hcEVuY29kaW5nP2FoKCJlbWlzc2l2ZU1hcFRleGVsVG9MaW5lYXIiLHcuZW1pc3NpdmVNYXBFbmNvZGluZyk6IiIsdy5vdXRwdXRFbmNvZGluZz9zbygibGluZWFyVG9PdXRwdXRUZXhlbCIsdy5vdXRwdXRFbmNvZGluZyk6IiIsdy5kZXB0aFBhY2tpbmc/IiNkZWZpbmUgREVQVEhfUEFDS0lORyAiK24uZGVwdGhQYWNraW5nOiIiLCJcbiJdLmZpbHRlcihPZikuam9pbigiXG4iKSk7Tz1zaShPKTtPPWhsKE8sdyk7Tz1pbChPLHcpO1E9c2koUSk7UT1obChRLHcpO1E9aWwoUSx3KTtPPWpsKE8pOwpRPWpsKFEpO3ouaXNXZWJHTDImJiFuLmlzUmF3U2hhZGVyTWF0ZXJpYWwmJih6PSExLFI9L15ccyojdmVyc2lvblxzKzMwMFxzK2VzXHMqXG4vLG4uaXNTaGFkZXJNYXRlcmlhbCYmbnVsbCE9PU8ubWF0Y2goUikmJm51bGwhPT1RLm1hdGNoKFIpJiYoej0hMCxPPU8ucmVwbGFjZShSLCIiKSxRPVEucmVwbGFjZShSLCIiKSksST0iI3ZlcnNpb24gMzAwIGVzXG5cbiNkZWZpbmUgYXR0cmlidXRlIGluXG4jZGVmaW5lIHZhcnlpbmcgb3V0XG4jZGVmaW5lIHRleHR1cmUyRCB0ZXh0dXJlXG4iK0ksZT1bIiN2ZXJzaW9uIDMwMCBlc1xuXG4jZGVmaW5lIHZhcnlpbmcgaW4iLHo/IiI6Im91dCBoaWdocCB2ZWM0IHBjX2ZyYWdDb2xvcjsiLHo/IiI6IiNkZWZpbmUgZ2xfRnJhZ0NvbG9yIHBjX2ZyYWdDb2xvciIsIiNkZWZpbmUgZ2xfRnJhZ0RlcHRoRVhUIGdsX0ZyYWdEZXB0aFxuI2RlZmluZSB0ZXh0dXJlMkQgdGV4dHVyZVxuI2RlZmluZSB0ZXh0dXJlQ3ViZSB0ZXh0dXJlXG4jZGVmaW5lIHRleHR1cmUyRFByb2ogdGV4dHVyZVByb2pcbiNkZWZpbmUgdGV4dHVyZTJETG9kRVhUIHRleHR1cmVMb2RcbiNkZWZpbmUgdGV4dHVyZTJEUHJvakxvZEVYVCB0ZXh0dXJlUHJvakxvZFxuI2RlZmluZSB0ZXh0dXJlQ3ViZUxvZEVYVCB0ZXh0dXJlTG9kXG4jZGVmaW5lIHRleHR1cmUyREdyYWRFWFQgdGV4dHVyZUdyYWRcbiNkZWZpbmUgdGV4dHVyZTJEUHJvakdyYWRFWFQgdGV4dHVyZVByb2pHcmFkXG4jZGVmaW5lIHRleHR1cmVDdWJlR3JhZEVYVCB0ZXh0dXJlR3JhZCJdLmpvaW4oIlxuIikrCiJcbiIrZSk7UT1lK1E7Tz1mbChILDM1NjMzLEkrTyxiLmRlYnVnLmNoZWNrU2hhZGVyRXJyb3JzKTtRPWZsKEgsMzU2MzIsUSxiLmRlYnVnLmNoZWNrU2hhZGVyRXJyb3JzKTtILmF0dGFjaFNoYWRlcihpYSxPKTtILmF0dGFjaFNoYWRlcihpYSxRKTt2b2lkIDAhPT1uLmluZGV4MEF0dHJpYnV0ZU5hbWU/SC5iaW5kQXR0cmliTG9jYXRpb24oaWEsMCxuLmluZGV4MEF0dHJpYnV0ZU5hbWUpOiEwPT09dy5tb3JwaFRhcmdldHMmJkguYmluZEF0dHJpYkxvY2F0aW9uKGlhLDAsInBvc2l0aW9uIik7SC5saW5rUHJvZ3JhbShpYSk7aWYoYi5kZWJ1Zy5jaGVja1NoYWRlckVycm9ycyl7Yj1ILmdldFByb2dyYW1JbmZvTG9nKGlhKS50cmltKCk7dz1ILmdldFNoYWRlckluZm9Mb2coTykudHJpbSgpO3o9SC5nZXRTaGFkZXJJbmZvTG9nKFEpLnRyaW0oKTtVPVI9ITA7aWYoITE9PT1ILmdldFByb2dyYW1QYXJhbWV0ZXIoaWEsMzU3MTQpKVI9ITEsY29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xQcm9ncmFtOiBzaGFkZXIgZXJyb3I6ICIsCkguZ2V0RXJyb3IoKSwiMzU3MTUiLEguZ2V0UHJvZ3JhbVBhcmFtZXRlcihpYSwzNTcxNSksImdsLmdldFByb2dyYW1JbmZvTG9nIixiLHcseik7ZWxzZSBpZigiIiE9PWIpY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFByb2dyYW06IGdsLmdldFByb2dyYW1JbmZvTG9nKCkiLGIpO2Vsc2UgaWYoIiI9PT13fHwiIj09PXopVT0hMTtVJiYodGhpcy5kaWFnbm9zdGljcz17cnVubmFibGU6UixtYXRlcmlhbDpuLHByb2dyYW1Mb2c6Yix2ZXJ0ZXhTaGFkZXI6e2xvZzp3LHByZWZpeDpJfSxmcmFnbWVudFNoYWRlcjp7bG9nOnoscHJlZml4OmV9fSl9SC5kZWxldGVTaGFkZXIoTyk7SC5kZWxldGVTaGFkZXIoUSk7dmFyIHRhO3RoaXMuZ2V0VW5pZm9ybXM9ZnVuY3Rpb24oKXt2b2lkIDA9PT10YSYmKHRhPW5ldyBPZChILGlhLEUpKTtyZXR1cm4gdGF9O3ZhciBuYTt0aGlzLmdldEF0dHJpYnV0ZXM9ZnVuY3Rpb24oKXt2b2lkIDA9PT1uYSYmKG5hPXdvKEgsaWEpKTtyZXR1cm4gbmF9O3RoaXMuZGVzdHJveT0KZnVuY3Rpb24oKXtILmRlbGV0ZVByb2dyYW0oaWEpO3RoaXMucHJvZ3JhbT12b2lkIDB9O09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRoaXMse3VuaWZvcm1zOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUHJvZ3JhbTogLnVuaWZvcm1zIGlzIG5vdyAuZ2V0VW5pZm9ybXMoKS4iKTtyZXR1cm4gdGhpcy5nZXRVbmlmb3JtcygpfX0sYXR0cmlidXRlczp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFByb2dyYW06IC5hdHRyaWJ1dGVzIGlzIG5vdyAuZ2V0QXR0cmlidXRlcygpLiIpO3JldHVybiB0aGlzLmdldEF0dHJpYnV0ZXMoKX19fSk7dGhpcy5uYW1lPXUubmFtZTt0aGlzLmlkPXlvKys7dGhpcy5jb2RlPWg7dGhpcy51c2VkVGltZXM9MTt0aGlzLnByb2dyYW09aWE7dGhpcy52ZXJ0ZXhTaGFkZXI9Tzt0aGlzLmZyYWdtZW50U2hhZGVyPVE7cmV0dXJuIHRoaXN9ZnVuY3Rpb24gem8oYixlLGgsbil7ZnVuY3Rpb24gdShJKXtJPQpJLnNrZWxldG9uLmJvbmVzO2lmKGguZmxvYXRWZXJ0ZXhUZXh0dXJlcylyZXR1cm4gMTAyNDt2YXIgTz1NYXRoLm1pbihNYXRoLmZsb29yKChoLm1heFZlcnRleFVuaWZvcm1zLTIwKS80KSxJLmxlbmd0aCk7cmV0dXJuIE88SS5sZW5ndGg/KGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogU2tlbGV0b24gaGFzICIrSS5sZW5ndGgrIiBib25lcy4gVGhpcyBHUFUgc3VwcG9ydHMgIitPKyIuIiksMCk6T31mdW5jdGlvbiB3KEksTyl7aWYoSSlJLmlzVGV4dHVyZT9RPUkuZW5jb2Rpbmc6SS5pc1dlYkdMUmVuZGVyVGFyZ2V0JiYoY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFByb2dyYW1zLmdldFRleHR1cmVFbmNvZGluZ0Zyb21NYXA6IGRvbid0IHVzZSByZW5kZXIgdGFyZ2V0cyBhcyB0ZXh0dXJlcy4gVXNlIHRoZWlyIC50ZXh0dXJlIHByb3BlcnR5IGluc3RlYWQuIiksUT1JLnRleHR1cmUuZW5jb2RpbmcpO2Vsc2UgdmFyIFE9M0UzOzNFMz09PVEmJk8mJihRPTMwMDcpOwpyZXR1cm4gUX12YXIgej1bXSxFPXtNZXNoRGVwdGhNYXRlcmlhbDoiZGVwdGgiLE1lc2hEaXN0YW5jZU1hdGVyaWFsOiJkaXN0YW5jZVJHQkEiLE1lc2hOb3JtYWxNYXRlcmlhbDoibm9ybWFsIixNZXNoQmFzaWNNYXRlcmlhbDoiYmFzaWMiLE1lc2hMYW1iZXJ0TWF0ZXJpYWw6ImxhbWJlcnQiLE1lc2hQaG9uZ01hdGVyaWFsOiJwaG9uZyIsTWVzaFRvb25NYXRlcmlhbDoicGhvbmciLE1lc2hTdGFuZGFyZE1hdGVyaWFsOiJwaHlzaWNhbCIsTWVzaFBoeXNpY2FsTWF0ZXJpYWw6InBoeXNpY2FsIixNZXNoTWF0Y2FwTWF0ZXJpYWw6Im1hdGNhcCIsTGluZUJhc2ljTWF0ZXJpYWw6ImJhc2ljIixMaW5lRGFzaGVkTWF0ZXJpYWw6ImRhc2hlZCIsUG9pbnRzTWF0ZXJpYWw6InBvaW50cyIsU2hhZG93TWF0ZXJpYWw6InNoYWRvdyIsU3ByaXRlTWF0ZXJpYWw6InNwcml0ZSJ9LEg9InByZWNpc2lvbiBzdXBwb3J0c1ZlcnRleFRleHR1cmVzIG1hcCBtYXBFbmNvZGluZyBtYXRjYXAgbWF0Y2FwRW5jb2RpbmcgZW52TWFwIGVudk1hcE1vZGUgZW52TWFwRW5jb2RpbmcgbGlnaHRNYXAgYW9NYXAgZW1pc3NpdmVNYXAgZW1pc3NpdmVNYXBFbmNvZGluZyBidW1wTWFwIG5vcm1hbE1hcCBvYmplY3RTcGFjZU5vcm1hbE1hcCBkaXNwbGFjZW1lbnRNYXAgc3BlY3VsYXJNYXAgcm91Z2huZXNzTWFwIG1ldGFsbmVzc01hcCBncmFkaWVudE1hcCBhbHBoYU1hcCBjb21iaW5lIHZlcnRleENvbG9ycyB2ZXJ0ZXhUYW5nZW50cyBmb2cgdXNlRm9nIGZvZ0V4cCBmbGF0U2hhZGluZyBzaXplQXR0ZW51YXRpb24gbG9nYXJpdGhtaWNEZXB0aEJ1ZmZlciBza2lubmluZyBtYXhCb25lcyB1c2VWZXJ0ZXhUZXh0dXJlIG1vcnBoVGFyZ2V0cyBtb3JwaE5vcm1hbHMgbWF4TW9ycGhUYXJnZXRzIG1heE1vcnBoTm9ybWFscyBwcmVtdWx0aXBsaWVkQWxwaGEgbnVtRGlyTGlnaHRzIG51bVBvaW50TGlnaHRzIG51bVNwb3RMaWdodHMgbnVtSGVtaUxpZ2h0cyBudW1SZWN0QXJlYUxpZ2h0cyBzaGFkb3dNYXBFbmFibGVkIHNoYWRvd01hcFR5cGUgdG9uZU1hcHBpbmcgcGh5c2ljYWxseUNvcnJlY3RMaWdodHMgYWxwaGFUZXN0IGRvdWJsZVNpZGVkIGZsaXBTaWRlZCBudW1DbGlwcGluZ1BsYW5lcyBudW1DbGlwSW50ZXJzZWN0aW9uIGRlcHRoUGFja2luZyBkaXRoZXJpbmciLnNwbGl0KCIgIik7CnRoaXMuZ2V0UGFyYW1ldGVycz1mdW5jdGlvbihJLE8sUSxSLFUsVyxaKXt2YXIgZmE9RVtJLnR5cGVdLHFhPVouaXNTa2lubmVkTWVzaD91KFopOjAscmE9aC5wcmVjaXNpb247bnVsbCE9PUkucHJlY2lzaW9uJiYocmE9aC5nZXRNYXhQcmVjaXNpb24oSS5wcmVjaXNpb24pLHJhIT09SS5wcmVjaXNpb24mJmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xQcm9ncmFtLmdldFBhcmFtZXRlcnM6IixJLnByZWNpc2lvbiwibm90IHN1cHBvcnRlZCwgdXNpbmciLHJhLCJpbnN0ZWFkLiIpKTt2YXIgaWE9Yi5nZXRSZW5kZXJUYXJnZXQoKTtyZXR1cm57c2hhZGVySUQ6ZmEscHJlY2lzaW9uOnJhLHN1cHBvcnRzVmVydGV4VGV4dHVyZXM6aC52ZXJ0ZXhUZXh0dXJlcyxvdXRwdXRFbmNvZGluZzp3KGlhP2lhLnRleHR1cmU6bnVsbCxiLmdhbW1hT3V0cHV0KSxtYXA6ISFJLm1hcCxtYXBFbmNvZGluZzp3KEkubWFwLGIuZ2FtbWFJbnB1dCksbWF0Y2FwOiEhSS5tYXRjYXAsbWF0Y2FwRW5jb2Rpbmc6dyhJLm1hdGNhcCwKYi5nYW1tYUlucHV0KSxlbnZNYXA6ISFJLmVudk1hcCxlbnZNYXBNb2RlOkkuZW52TWFwJiZJLmVudk1hcC5tYXBwaW5nLGVudk1hcEVuY29kaW5nOncoSS5lbnZNYXAsYi5nYW1tYUlucHV0KSxlbnZNYXBDdWJlVVY6ISFJLmVudk1hcCYmKDMwNj09PUkuZW52TWFwLm1hcHBpbmd8fDMwNz09PUkuZW52TWFwLm1hcHBpbmcpLGxpZ2h0TWFwOiEhSS5saWdodE1hcCxhb01hcDohIUkuYW9NYXAsZW1pc3NpdmVNYXA6ISFJLmVtaXNzaXZlTWFwLGVtaXNzaXZlTWFwRW5jb2Rpbmc6dyhJLmVtaXNzaXZlTWFwLGIuZ2FtbWFJbnB1dCksYnVtcE1hcDohIUkuYnVtcE1hcCxub3JtYWxNYXA6ISFJLm5vcm1hbE1hcCxvYmplY3RTcGFjZU5vcm1hbE1hcDoxPT09SS5ub3JtYWxNYXBUeXBlLGRpc3BsYWNlbWVudE1hcDohIUkuZGlzcGxhY2VtZW50TWFwLHJvdWdobmVzc01hcDohIUkucm91Z2huZXNzTWFwLG1ldGFsbmVzc01hcDohIUkubWV0YWxuZXNzTWFwLHNwZWN1bGFyTWFwOiEhSS5zcGVjdWxhck1hcCwKYWxwaGFNYXA6ISFJLmFscGhhTWFwLGdyYWRpZW50TWFwOiEhSS5ncmFkaWVudE1hcCxjb21iaW5lOkkuY29tYmluZSx2ZXJ0ZXhUYW5nZW50czpJLm5vcm1hbE1hcCYmSS52ZXJ0ZXhUYW5nZW50cyx2ZXJ0ZXhDb2xvcnM6SS52ZXJ0ZXhDb2xvcnMsZm9nOiEhUix1c2VGb2c6SS5mb2csZm9nRXhwOlImJlIuaXNGb2dFeHAyLGZsYXRTaGFkaW5nOkkuZmxhdFNoYWRpbmcsc2l6ZUF0dGVudWF0aW9uOkkuc2l6ZUF0dGVudWF0aW9uLGxvZ2FyaXRobWljRGVwdGhCdWZmZXI6aC5sb2dhcml0aG1pY0RlcHRoQnVmZmVyLHNraW5uaW5nOkkuc2tpbm5pbmcmJjA8cWEsbWF4Qm9uZXM6cWEsdXNlVmVydGV4VGV4dHVyZTpoLmZsb2F0VmVydGV4VGV4dHVyZXMsbW9ycGhUYXJnZXRzOkkubW9ycGhUYXJnZXRzLG1vcnBoTm9ybWFsczpJLm1vcnBoTm9ybWFscyxtYXhNb3JwaFRhcmdldHM6Yi5tYXhNb3JwaFRhcmdldHMsbWF4TW9ycGhOb3JtYWxzOmIubWF4TW9ycGhOb3JtYWxzLG51bURpckxpZ2h0czpPLmRpcmVjdGlvbmFsLmxlbmd0aCwKbnVtUG9pbnRMaWdodHM6Ty5wb2ludC5sZW5ndGgsbnVtU3BvdExpZ2h0czpPLnNwb3QubGVuZ3RoLG51bVJlY3RBcmVhTGlnaHRzOk8ucmVjdEFyZWEubGVuZ3RoLG51bUhlbWlMaWdodHM6Ty5oZW1pLmxlbmd0aCxudW1DbGlwcGluZ1BsYW5lczpVLG51bUNsaXBJbnRlcnNlY3Rpb246VyxkaXRoZXJpbmc6SS5kaXRoZXJpbmcsc2hhZG93TWFwRW5hYmxlZDpiLnNoYWRvd01hcC5lbmFibGVkJiZaLnJlY2VpdmVTaGFkb3cmJjA8US5sZW5ndGgsc2hhZG93TWFwVHlwZTpiLnNoYWRvd01hcC50eXBlLHRvbmVNYXBwaW5nOmIudG9uZU1hcHBpbmcscGh5c2ljYWxseUNvcnJlY3RMaWdodHM6Yi5waHlzaWNhbGx5Q29ycmVjdExpZ2h0cyxwcmVtdWx0aXBsaWVkQWxwaGE6SS5wcmVtdWx0aXBsaWVkQWxwaGEsYWxwaGFUZXN0OkkuYWxwaGFUZXN0LGRvdWJsZVNpZGVkOjI9PT1JLnNpZGUsZmxpcFNpZGVkOjE9PT1JLnNpZGUsZGVwdGhQYWNraW5nOnZvaWQgMCE9PUkuZGVwdGhQYWNraW5nPwpJLmRlcHRoUGFja2luZzohMX19O3RoaXMuZ2V0UHJvZ3JhbUNvZGU9ZnVuY3Rpb24oSSxPKXt2YXIgUT1bXTtPLnNoYWRlcklEP1EucHVzaChPLnNoYWRlcklEKTooUS5wdXNoKEkuZnJhZ21lbnRTaGFkZXIpLFEucHVzaChJLnZlcnRleFNoYWRlcikpO2lmKHZvaWQgMCE9PUkuZGVmaW5lcylmb3IodmFyIFIgaW4gSS5kZWZpbmVzKVEucHVzaChSKSxRLnB1c2goSS5kZWZpbmVzW1JdKTtmb3IoUj0wO1I8SC5sZW5ndGg7UisrKVEucHVzaChPW0hbUl1dKTtRLnB1c2goSS5vbkJlZm9yZUNvbXBpbGUudG9TdHJpbmcoKSk7US5wdXNoKGIuZ2FtbWFPdXRwdXQpO1EucHVzaChiLmdhbW1hRmFjdG9yKTtyZXR1cm4gUS5qb2luKCl9O3RoaXMuYWNxdWlyZVByb2dyYW09ZnVuY3Rpb24oSSxPLFEsUil7Zm9yKHZhciBVLFc9MCxaPXoubGVuZ3RoO1c8WjtXKyspe3ZhciBmYT16W1ddO2lmKGZhLmNvZGU9PT1SKXtVPWZhOysrVS51c2VkVGltZXM7YnJlYWt9fXZvaWQgMD09PVUmJihVPW5ldyB4byhiLAplLFIsSSxPLFEsaCxuKSx6LnB1c2goVSkpO3JldHVybiBVfTt0aGlzLnJlbGVhc2VQcm9ncmFtPWZ1bmN0aW9uKEkpezA9PT0tLUkudXNlZFRpbWVzJiYoelt6LmluZGV4T2YoSSldPXpbei5sZW5ndGgtMV0sei5wb3AoKSxJLmRlc3Ryb3koKSl9O3RoaXMucHJvZ3JhbXM9en1mdW5jdGlvbiBBbygpe3ZhciBiPW5ldyBXZWFrTWFwO3JldHVybntnZXQ6ZnVuY3Rpb24oZSl7dmFyIGg9Yi5nZXQoZSk7dm9pZCAwPT09aCYmKGg9e30sYi5zZXQoZSxoKSk7cmV0dXJuIGh9LHJlbW92ZTpmdW5jdGlvbihlKXtiLmRlbGV0ZShlKX0sdXBkYXRlOmZ1bmN0aW9uKGUsaCxuKXtiLmdldChlKVtoXT1ufSxkaXNwb3NlOmZ1bmN0aW9uKCl7Yj1uZXcgV2Vha01hcH19fWZ1bmN0aW9uIEJvKGIsZSl7cmV0dXJuIGIuZ3JvdXBPcmRlciE9PWUuZ3JvdXBPcmRlcj9iLmdyb3VwT3JkZXItZS5ncm91cE9yZGVyOmIucmVuZGVyT3JkZXIhPT1lLnJlbmRlck9yZGVyP2IucmVuZGVyT3JkZXItZS5yZW5kZXJPcmRlcjoKYi5wcm9ncmFtIT09ZS5wcm9ncmFtP2IucHJvZ3JhbS5pZC1lLnByb2dyYW0uaWQ6Yi5tYXRlcmlhbC5pZCE9PWUubWF0ZXJpYWwuaWQ/Yi5tYXRlcmlhbC5pZC1lLm1hdGVyaWFsLmlkOmIueiE9PWUuej9iLnotZS56OmIuaWQtZS5pZH1mdW5jdGlvbiBDbyhiLGUpe3JldHVybiBiLmdyb3VwT3JkZXIhPT1lLmdyb3VwT3JkZXI/Yi5ncm91cE9yZGVyLWUuZ3JvdXBPcmRlcjpiLnJlbmRlck9yZGVyIT09ZS5yZW5kZXJPcmRlcj9iLnJlbmRlck9yZGVyLWUucmVuZGVyT3JkZXI6Yi56IT09ZS56P2Uuei1iLno6Yi5pZC1lLmlkfWZ1bmN0aW9uIGtsKCl7ZnVuY3Rpb24gYih6LEUsSCxJLE8sUSl7dmFyIFI9ZVtoXTt2b2lkIDA9PT1SPyhSPXtpZDp6LmlkLG9iamVjdDp6LGdlb21ldHJ5OkUsbWF0ZXJpYWw6SCxwcm9ncmFtOkgucHJvZ3JhbXx8dyxncm91cE9yZGVyOkkscmVuZGVyT3JkZXI6ei5yZW5kZXJPcmRlcix6Ok8sZ3JvdXA6UX0sZVtoXT1SKTooUi5pZD16LmlkLFIub2JqZWN0PQp6LFIuZ2VvbWV0cnk9RSxSLm1hdGVyaWFsPUgsUi5wcm9ncmFtPUgucHJvZ3JhbXx8dyxSLmdyb3VwT3JkZXI9SSxSLnJlbmRlck9yZGVyPXoucmVuZGVyT3JkZXIsUi56PU8sUi5ncm91cD1RKTtoKys7cmV0dXJuIFJ9dmFyIGU9W10saD0wLG49W10sdT1bXSx3PXtpZDotMX07cmV0dXJue29wYXF1ZTpuLHRyYW5zcGFyZW50OnUsaW5pdDpmdW5jdGlvbigpe2g9MDtuLmxlbmd0aD0wO3UubGVuZ3RoPTB9LHB1c2g6ZnVuY3Rpb24oeixFLEgsSSxPLFEpe3o9Yih6LEUsSCxJLE8sUSk7KCEwPT09SC50cmFuc3BhcmVudD91Om4pLnB1c2goeil9LHVuc2hpZnQ6ZnVuY3Rpb24oeixFLEgsSSxPLFEpe3o9Yih6LEUsSCxJLE8sUSk7KCEwPT09SC50cmFuc3BhcmVudD91Om4pLnVuc2hpZnQoeil9LHNvcnQ6ZnVuY3Rpb24oKXsxPG4ubGVuZ3RoJiZuLnNvcnQoQm8pOzE8dS5sZW5ndGgmJnUuc29ydChDbyl9fX1mdW5jdGlvbiBEbygpe2Z1bmN0aW9uIGIoaCl7aD1oLnRhcmdldDtoLnJlbW92ZUV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLApiKTtkZWxldGUgZVtoLmlkXX12YXIgZT17fTtyZXR1cm57Z2V0OmZ1bmN0aW9uKGgsbil7dmFyIHU9ZVtoLmlkXTtpZih2b2lkIDA9PT11KXt2YXIgdz1uZXcga2w7ZVtoLmlkXT17fTtlW2guaWRdW24uaWRdPXc7aC5hZGRFdmVudExpc3RlbmVyKCJkaXNwb3NlIixiKX1lbHNlIHc9dVtuLmlkXSx2b2lkIDA9PT13JiYodz1uZXcga2wsdVtuLmlkXT13KTtyZXR1cm4gd30sZGlzcG9zZTpmdW5jdGlvbigpe2U9e319fX1mdW5jdGlvbiBFbygpe3ZhciBiPXt9O3JldHVybntnZXQ6ZnVuY3Rpb24oZSl7aWYodm9pZCAwIT09YltlLmlkXSlyZXR1cm4gYltlLmlkXTtzd2l0Y2goZS50eXBlKXtjYXNlICJEaXJlY3Rpb25hbExpZ2h0Ijp2YXIgaD17ZGlyZWN0aW9uOm5ldyBnLGNvbG9yOm5ldyBCLHNoYWRvdzohMSxzaGFkb3dCaWFzOjAsc2hhZG93UmFkaXVzOjEsc2hhZG93TWFwU2l6ZTpuZXcgZH07YnJlYWs7Y2FzZSAiU3BvdExpZ2h0IjpoPXtwb3NpdGlvbjpuZXcgZyxkaXJlY3Rpb246bmV3IGcsCmNvbG9yOm5ldyBCLGRpc3RhbmNlOjAsY29uZUNvczowLHBlbnVtYnJhQ29zOjAsZGVjYXk6MCxzaGFkb3c6ITEsc2hhZG93QmlhczowLHNoYWRvd1JhZGl1czoxLHNoYWRvd01hcFNpemU6bmV3IGR9O2JyZWFrO2Nhc2UgIlBvaW50TGlnaHQiOmg9e3Bvc2l0aW9uOm5ldyBnLGNvbG9yOm5ldyBCLGRpc3RhbmNlOjAsZGVjYXk6MCxzaGFkb3c6ITEsc2hhZG93QmlhczowLHNoYWRvd1JhZGl1czoxLHNoYWRvd01hcFNpemU6bmV3IGQsc2hhZG93Q2FtZXJhTmVhcjoxLHNoYWRvd0NhbWVyYUZhcjoxRTN9O2JyZWFrO2Nhc2UgIkhlbWlzcGhlcmVMaWdodCI6aD17ZGlyZWN0aW9uOm5ldyBnLHNreUNvbG9yOm5ldyBCLGdyb3VuZENvbG9yOm5ldyBCfTticmVhaztjYXNlICJSZWN0QXJlYUxpZ2h0IjpoPXtjb2xvcjpuZXcgQixwb3NpdGlvbjpuZXcgZyxoYWxmV2lkdGg6bmV3IGcsaGFsZkhlaWdodDpuZXcgZ319cmV0dXJuIGJbZS5pZF09aH19fWZ1bmN0aW9uIEZvKCl7Zm9yKHZhciBiPQpuZXcgRW8sZT17aWQ6R28rKyxoYXNoOntzdGF0ZUlEOi0xLGRpcmVjdGlvbmFsTGVuZ3RoOi0xLHBvaW50TGVuZ3RoOi0xLHNwb3RMZW5ndGg6LTEscmVjdEFyZWFMZW5ndGg6LTEsaGVtaUxlbmd0aDotMSxzaGFkb3dzTGVuZ3RoOi0xfSxhbWJpZW50OlswLDAsMF0scHJvYmU6W10sZGlyZWN0aW9uYWw6W10sZGlyZWN0aW9uYWxTaGFkb3dNYXA6W10sZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXg6W10sc3BvdDpbXSxzcG90U2hhZG93TWFwOltdLHNwb3RTaGFkb3dNYXRyaXg6W10scmVjdEFyZWE6W10scG9pbnQ6W10scG9pbnRTaGFkb3dNYXA6W10scG9pbnRTaGFkb3dNYXRyaXg6W10saGVtaTpbXX0saD0wOzk+aDtoKyspZS5wcm9iZS5wdXNoKG5ldyBnKTt2YXIgbj1uZXcgZyx1PW5ldyBDLHc9bmV3IEM7cmV0dXJue3NldHVwOmZ1bmN0aW9uKHosRSxIKXtmb3IodmFyIEk9MCxPPTAsUT0wLFI9MDs5PlI7UisrKWUucHJvYmVbUl0uc2V0KDAsMCwwKTt2YXIgVT0wLFc9MCxaPTAsZmE9CjAscWE9MDtIPUgubWF0cml4V29ybGRJbnZlcnNlO1I9MDtmb3IodmFyIHJhPXoubGVuZ3RoO1I8cmE7UisrKXt2YXIgaWE9eltSXSx0YT1pYS5jb2xvcixuYT1pYS5pbnRlbnNpdHksdmE9aWEuZGlzdGFuY2UsQmE9aWEuc2hhZG93JiZpYS5zaGFkb3cubWFwP2lhLnNoYWRvdy5tYXAudGV4dHVyZTpudWxsO2lmKGlhLmlzQW1iaWVudExpZ2h0KUkrPXRhLnIqbmEsTys9dGEuZypuYSxRKz10YS5iKm5hO2Vsc2UgaWYoaWEuaXNMaWdodFByb2JlKWZvcihCYT0wOzk+QmE7QmErKyllLnByb2JlW0JhXS5hZGRTY2FsZWRWZWN0b3IoaWEuc2guY29lZmZpY2llbnRzW0JhXSxuYSk7ZWxzZSBpZihpYS5pc0RpcmVjdGlvbmFsTGlnaHQpe3ZhciBzYT1iLmdldChpYSk7c2EuY29sb3IuY29weShpYS5jb2xvcikubXVsdGlwbHlTY2FsYXIoaWEuaW50ZW5zaXR5KTtzYS5kaXJlY3Rpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKGlhLm1hdHJpeFdvcmxkKTtuLnNldEZyb21NYXRyaXhQb3NpdGlvbihpYS50YXJnZXQubWF0cml4V29ybGQpOwpzYS5kaXJlY3Rpb24uc3ViKG4pO3NhLmRpcmVjdGlvbi50cmFuc2Zvcm1EaXJlY3Rpb24oSCk7aWYoc2Euc2hhZG93PWlhLmNhc3RTaGFkb3cpbmE9aWEuc2hhZG93LHNhLnNoYWRvd0JpYXM9bmEuYmlhcyxzYS5zaGFkb3dSYWRpdXM9bmEucmFkaXVzLHNhLnNoYWRvd01hcFNpemU9bmEubWFwU2l6ZTtlLmRpcmVjdGlvbmFsU2hhZG93TWFwW1VdPUJhO2UuZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXhbVV09aWEuc2hhZG93Lm1hdHJpeDtlLmRpcmVjdGlvbmFsW1VdPXNhO1UrK31lbHNlIGlmKGlhLmlzU3BvdExpZ2h0KXtzYT1iLmdldChpYSk7c2EucG9zaXRpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKGlhLm1hdHJpeFdvcmxkKTtzYS5wb3NpdGlvbi5hcHBseU1hdHJpeDQoSCk7c2EuY29sb3IuY29weSh0YSkubXVsdGlwbHlTY2FsYXIobmEpO3NhLmRpc3RhbmNlPXZhO3NhLmRpcmVjdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oaWEubWF0cml4V29ybGQpO24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKGlhLnRhcmdldC5tYXRyaXhXb3JsZCk7CnNhLmRpcmVjdGlvbi5zdWIobik7c2EuZGlyZWN0aW9uLnRyYW5zZm9ybURpcmVjdGlvbihIKTtzYS5jb25lQ29zPU1hdGguY29zKGlhLmFuZ2xlKTtzYS5wZW51bWJyYUNvcz1NYXRoLmNvcyhpYS5hbmdsZSooMS1pYS5wZW51bWJyYSkpO3NhLmRlY2F5PWlhLmRlY2F5O2lmKHNhLnNoYWRvdz1pYS5jYXN0U2hhZG93KW5hPWlhLnNoYWRvdyxzYS5zaGFkb3dCaWFzPW5hLmJpYXMsc2Euc2hhZG93UmFkaXVzPW5hLnJhZGl1cyxzYS5zaGFkb3dNYXBTaXplPW5hLm1hcFNpemU7ZS5zcG90U2hhZG93TWFwW1pdPUJhO2Uuc3BvdFNoYWRvd01hdHJpeFtaXT1pYS5zaGFkb3cubWF0cml4O2Uuc3BvdFtaXT1zYTtaKyt9ZWxzZSBpZihpYS5pc1JlY3RBcmVhTGlnaHQpc2E9Yi5nZXQoaWEpLHNhLmNvbG9yLmNvcHkodGEpLm11bHRpcGx5U2NhbGFyKG5hKSxzYS5wb3NpdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oaWEubWF0cml4V29ybGQpLHNhLnBvc2l0aW9uLmFwcGx5TWF0cml4NChIKSwKdy5pZGVudGl0eSgpLHUuY29weShpYS5tYXRyaXhXb3JsZCksdS5wcmVtdWx0aXBseShIKSx3LmV4dHJhY3RSb3RhdGlvbih1KSxzYS5oYWxmV2lkdGguc2V0KC41KmlhLndpZHRoLDAsMCksc2EuaGFsZkhlaWdodC5zZXQoMCwuNSppYS5oZWlnaHQsMCksc2EuaGFsZldpZHRoLmFwcGx5TWF0cml4NCh3KSxzYS5oYWxmSGVpZ2h0LmFwcGx5TWF0cml4NCh3KSxlLnJlY3RBcmVhW2ZhXT1zYSxmYSsrO2Vsc2UgaWYoaWEuaXNQb2ludExpZ2h0KXtzYT1iLmdldChpYSk7c2EucG9zaXRpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKGlhLm1hdHJpeFdvcmxkKTtzYS5wb3NpdGlvbi5hcHBseU1hdHJpeDQoSCk7c2EuY29sb3IuY29weShpYS5jb2xvcikubXVsdGlwbHlTY2FsYXIoaWEuaW50ZW5zaXR5KTtzYS5kaXN0YW5jZT1pYS5kaXN0YW5jZTtzYS5kZWNheT1pYS5kZWNheTtpZihzYS5zaGFkb3c9aWEuY2FzdFNoYWRvdyluYT1pYS5zaGFkb3csc2Euc2hhZG93Qmlhcz1uYS5iaWFzLHNhLnNoYWRvd1JhZGl1cz0KbmEucmFkaXVzLHNhLnNoYWRvd01hcFNpemU9bmEubWFwU2l6ZSxzYS5zaGFkb3dDYW1lcmFOZWFyPW5hLmNhbWVyYS5uZWFyLHNhLnNoYWRvd0NhbWVyYUZhcj1uYS5jYW1lcmEuZmFyO2UucG9pbnRTaGFkb3dNYXBbV109QmE7ZS5wb2ludFNoYWRvd01hdHJpeFtXXT1pYS5zaGFkb3cubWF0cml4O2UucG9pbnRbV109c2E7VysrfWVsc2UgaWEuaXNIZW1pc3BoZXJlTGlnaHQmJihzYT1iLmdldChpYSksc2EuZGlyZWN0aW9uLnNldEZyb21NYXRyaXhQb3NpdGlvbihpYS5tYXRyaXhXb3JsZCksc2EuZGlyZWN0aW9uLnRyYW5zZm9ybURpcmVjdGlvbihIKSxzYS5kaXJlY3Rpb24ubm9ybWFsaXplKCksc2Euc2t5Q29sb3IuY29weShpYS5jb2xvcikubXVsdGlwbHlTY2FsYXIobmEpLHNhLmdyb3VuZENvbG9yLmNvcHkoaWEuZ3JvdW5kQ29sb3IpLm11bHRpcGx5U2NhbGFyKG5hKSxlLmhlbWlbcWFdPXNhLHFhKyspfWUuYW1iaWVudFswXT1JO2UuYW1iaWVudFsxXT1PO2UuYW1iaWVudFsyXT0KUTtlLmRpcmVjdGlvbmFsLmxlbmd0aD1VO2Uuc3BvdC5sZW5ndGg9WjtlLnJlY3RBcmVhLmxlbmd0aD1mYTtlLnBvaW50Lmxlbmd0aD1XO2UuaGVtaS5sZW5ndGg9cWE7ZS5oYXNoLnN0YXRlSUQ9ZS5pZDtlLmhhc2guZGlyZWN0aW9uYWxMZW5ndGg9VTtlLmhhc2gucG9pbnRMZW5ndGg9VztlLmhhc2guc3BvdExlbmd0aD1aO2UuaGFzaC5yZWN0QXJlYUxlbmd0aD1mYTtlLmhhc2guaGVtaUxlbmd0aD1xYTtlLmhhc2guc2hhZG93c0xlbmd0aD1FLmxlbmd0aH0sc3RhdGU6ZX19ZnVuY3Rpb24gbGwoKXt2YXIgYj1uZXcgRm8sZT1bXSxoPVtdO3JldHVybntpbml0OmZ1bmN0aW9uKCl7ZS5sZW5ndGg9MDtoLmxlbmd0aD0wfSxzdGF0ZTp7bGlnaHRzQXJyYXk6ZSxzaGFkb3dzQXJyYXk6aCxsaWdodHM6Yn0sc2V0dXBMaWdodHM6ZnVuY3Rpb24obil7Yi5zZXR1cChlLGgsbil9LHB1c2hMaWdodDpmdW5jdGlvbihuKXtlLnB1c2gobil9LHB1c2hTaGFkb3c6ZnVuY3Rpb24obil7aC5wdXNoKG4pfX19CmZ1bmN0aW9uIEhvKCl7ZnVuY3Rpb24gYihoKXtoPWgudGFyZ2V0O2gucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsYik7ZGVsZXRlIGVbaC5pZF19dmFyIGU9e307cmV0dXJue2dldDpmdW5jdGlvbihoLG4pe2lmKHZvaWQgMD09PWVbaC5pZF0pe3ZhciB1PW5ldyBsbDtlW2guaWRdPXt9O2VbaC5pZF1bbi5pZF09dTtoLmFkZEV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLGIpfWVsc2Ugdm9pZCAwPT09ZVtoLmlkXVtuLmlkXT8odT1uZXcgbGwsZVtoLmlkXVtuLmlkXT11KTp1PWVbaC5pZF1bbi5pZF07cmV0dXJuIHV9LGRpc3Bvc2U6ZnVuY3Rpb24oKXtlPXt9fX19ZnVuY3Rpb24gUGQoYil7R2EuY2FsbCh0aGlzKTt0aGlzLnR5cGU9Ik1lc2hEZXB0aE1hdGVyaWFsIjt0aGlzLmRlcHRoUGFja2luZz0zMjAwO3RoaXMubW9ycGhUYXJnZXRzPXRoaXMuc2tpbm5pbmc9ITE7dGhpcy5kaXNwbGFjZW1lbnRNYXA9dGhpcy5hbHBoYU1hcD10aGlzLm1hcD1udWxsO3RoaXMuZGlzcGxhY2VtZW50U2NhbGU9CjE7dGhpcy5kaXNwbGFjZW1lbnRCaWFzPTA7dGhpcy53aXJlZnJhbWU9ITE7dGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9MTt0aGlzLmxpZ2h0cz10aGlzLmZvZz0hMTt0aGlzLnNldFZhbHVlcyhiKX1mdW5jdGlvbiBRZChiKXtHYS5jYWxsKHRoaXMpO3RoaXMudHlwZT0iTWVzaERpc3RhbmNlTWF0ZXJpYWwiO3RoaXMucmVmZXJlbmNlUG9zaXRpb249bmV3IGc7dGhpcy5uZWFyRGlzdGFuY2U9MTt0aGlzLmZhckRpc3RhbmNlPTFFMzt0aGlzLm1vcnBoVGFyZ2V0cz10aGlzLnNraW5uaW5nPSExO3RoaXMuZGlzcGxhY2VtZW50TWFwPXRoaXMuYWxwaGFNYXA9dGhpcy5tYXA9bnVsbDt0aGlzLmRpc3BsYWNlbWVudFNjYWxlPTE7dGhpcy5kaXNwbGFjZW1lbnRCaWFzPTA7dGhpcy5saWdodHM9dGhpcy5mb2c9ITE7dGhpcy5zZXRWYWx1ZXMoYil9ZnVuY3Rpb24gbWwoYixlLGgpe2Z1bmN0aW9uIG4odmEsQmEsc2EsRGEsSGEsS2Epe3ZhciBOYT12YS5nZW9tZXRyeTt2YXIgTGE9UTt2YXIgZmI9CnZhLmN1c3RvbURlcHRoTWF0ZXJpYWw7c2EmJihMYT1SLGZiPXZhLmN1c3RvbURpc3RhbmNlTWF0ZXJpYWwpO2ZiP0xhPWZiOihmYj0hMSxCYS5tb3JwaFRhcmdldHMmJihOYSYmTmEuaXNCdWZmZXJHZW9tZXRyeT9mYj1OYS5tb3JwaEF0dHJpYnV0ZXMmJk5hLm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbiYmMDxOYS5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24ubGVuZ3RoOk5hJiZOYS5pc0dlb21ldHJ5JiYoZmI9TmEubW9ycGhUYXJnZXRzJiYwPE5hLm1vcnBoVGFyZ2V0cy5sZW5ndGgpKSx2YS5pc1NraW5uZWRNZXNoJiYhMT09PUJhLnNraW5uaW5nJiZjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMU2hhZG93TWFwOiBUSFJFRS5Ta2lubmVkTWVzaCB3aXRoIG1hdGVyaWFsLnNraW5uaW5nIHNldCB0byBmYWxzZToiLHZhKSx2YT12YS5pc1NraW5uZWRNZXNoJiZCYS5za2lubmluZyxOYT0wLGZiJiYoTmF8PTEpLHZhJiYoTmF8PTIpLExhPUxhW05hXSk7Yi5sb2NhbENsaXBwaW5nRW5hYmxlZCYmCiEwPT09QmEuY2xpcFNoYWRvd3MmJjAhPT1CYS5jbGlwcGluZ1BsYW5lcy5sZW5ndGgmJihOYT1MYS51dWlkLGZiPUJhLnV1aWQsdmE9VVtOYV0sdm9pZCAwPT09dmEmJih2YT17fSxVW05hXT12YSksTmE9dmFbZmJdLHZvaWQgMD09PU5hJiYoTmE9TGEuY2xvbmUoKSx2YVtmYl09TmEpLExhPU5hKTtMYS52aXNpYmxlPUJhLnZpc2libGU7TGEud2lyZWZyYW1lPUJhLndpcmVmcmFtZTtMYS5zaWRlPW51bGwhPUJhLnNoYWRvd1NpZGU/QmEuc2hhZG93U2lkZTpXW0JhLnNpZGVdO0xhLmNsaXBTaGFkb3dzPUJhLmNsaXBTaGFkb3dzO0xhLmNsaXBwaW5nUGxhbmVzPUJhLmNsaXBwaW5nUGxhbmVzO0xhLmNsaXBJbnRlcnNlY3Rpb249QmEuY2xpcEludGVyc2VjdGlvbjtMYS53aXJlZnJhbWVMaW5ld2lkdGg9QmEud2lyZWZyYW1lTGluZXdpZHRoO0xhLmxpbmV3aWR0aD1CYS5saW5ld2lkdGg7c2EmJkxhLmlzTWVzaERpc3RhbmNlTWF0ZXJpYWwmJihMYS5yZWZlcmVuY2VQb3NpdGlvbi5jb3B5KERhKSwKTGEubmVhckRpc3RhbmNlPUhhLExhLmZhckRpc3RhbmNlPUthKTtyZXR1cm4gTGF9ZnVuY3Rpb24gdSh2YSxCYSxzYSxEYSl7aWYoITEhPT12YS52aXNpYmxlKXtpZih2YS5sYXllcnMudGVzdChCYS5sYXllcnMpJiYodmEuaXNNZXNofHx2YS5pc0xpbmV8fHZhLmlzUG9pbnRzKSYmdmEuY2FzdFNoYWRvdyYmKCF2YS5mcnVzdHVtQ3VsbGVkfHx3LmludGVyc2VjdHNPYmplY3QodmEpKSl7dmEubW9kZWxWaWV3TWF0cml4Lm11bHRpcGx5TWF0cmljZXMoc2EubWF0cml4V29ybGRJbnZlcnNlLHZhLm1hdHJpeFdvcmxkKTt2YXIgSGE9ZS51cGRhdGUodmEpLEthPXZhLm1hdGVyaWFsO2lmKEFycmF5LmlzQXJyYXkoS2EpKWZvcih2YXIgTmE9SGEuZ3JvdXBzLExhPTAsZmI9TmEubGVuZ3RoO0xhPGZiO0xhKyspe3ZhciBjYj1OYVtMYV0sSmE9S2FbY2IubWF0ZXJpYWxJbmRleF07SmEmJkphLnZpc2libGUmJihKYT1uKHZhLEphLERhLE8sc2EubmVhcixzYS5mYXIpLGIucmVuZGVyQnVmZmVyRGlyZWN0KHNhLApudWxsLEhhLEphLHZhLGNiKSl9ZWxzZSBLYS52aXNpYmxlJiYoSmE9bih2YSxLYSxEYSxPLHNhLm5lYXIsc2EuZmFyKSxiLnJlbmRlckJ1ZmZlckRpcmVjdChzYSxudWxsLEhhLEphLHZhLG51bGwpKX12YT12YS5jaGlsZHJlbjtIYT0wO2ZvcihLYT12YS5sZW5ndGg7SGE8S2E7SGErKyl1KHZhW0hhXSxCYSxzYSxEYSl9fXZhciB3PW5ldyB4LHo9bmV3IEMsRT1uZXcgZCxIPW5ldyBkKGgsaCksST1uZXcgZyxPPW5ldyBnLFE9QXJyYXkoNCksUj1BcnJheSg0KSxVPXt9LFc9ezA6MSwxOjAsMjoyfSxaPVtuZXcgZygxLDAsMCksbmV3IGcoLTEsMCwwKSxuZXcgZygwLDAsMSksbmV3IGcoMCwwLC0xKSxuZXcgZygwLDEsMCksbmV3IGcoMCwtMSwwKV0sZmE9W25ldyBnKDAsMSwwKSxuZXcgZygwLDEsMCksbmV3IGcoMCwxLDApLG5ldyBnKDAsMSwwKSxuZXcgZygwLDAsMSksbmV3IGcoMCwwLC0xKV0scWE9W25ldyBtLG5ldyBtLG5ldyBtLG5ldyBtLG5ldyBtLG5ldyBtXTtmb3IoaD0wOzQhPT0KaDsrK2gpe3ZhciByYT0wIT09KGgmMSksaWE9MCE9PShoJjIpLHRhPW5ldyBQZCh7ZGVwdGhQYWNraW5nOjMyMDEsbW9ycGhUYXJnZXRzOnJhLHNraW5uaW5nOmlhfSk7UVtoXT10YTtyYT1uZXcgUWQoe21vcnBoVGFyZ2V0czpyYSxza2lubmluZzppYX0pO1JbaF09cmF9dmFyIG5hPXRoaXM7dGhpcy5lbmFibGVkPSExO3RoaXMuYXV0b1VwZGF0ZT0hMDt0aGlzLm5lZWRzVXBkYXRlPSExO3RoaXMudHlwZT0xO3RoaXMucmVuZGVyPWZ1bmN0aW9uKHZhLEJhLHNhKXtpZighMSE9PW5hLmVuYWJsZWQmJighMSE9PW5hLmF1dG9VcGRhdGV8fCExIT09bmEubmVlZHNVcGRhdGUpJiYwIT09dmEubGVuZ3RoKXt2YXIgRGE9Yi5nZXRSZW5kZXJUYXJnZXQoKSxIYT1iLnN0YXRlO0hhLnNldEJsZW5kaW5nKDApO0hhLmJ1ZmZlcnMuY29sb3Iuc2V0Q2xlYXIoMSwxLDEsMSk7SGEuYnVmZmVycy5kZXB0aC5zZXRUZXN0KCEwKTtIYS5zZXRTY2lzc29yVGVzdCghMSk7Zm9yKHZhciBLYSxOYT0wLExhPQp2YS5sZW5ndGg7TmE8TGE7TmErKyl7dmFyIGZiPXZhW05hXTtLYT1mYi5zaGFkb3c7dmFyIGNiPWZiJiZmYi5pc1BvaW50TGlnaHQ7aWYodm9pZCAwPT09S2EpY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFNoYWRvd01hcDoiLGZiLCJoYXMgbm8gc2hhZG93LiIpO2Vsc2V7dmFyIEphPUthLmNhbWVyYTtFLmNvcHkoS2EubWFwU2l6ZSk7RS5taW4oSCk7aWYoY2Ipe3ZhciBoYj1FLngsVWE9RS55O3FhWzBdLnNldCgyKmhiLFVhLGhiLFVhKTtxYVsxXS5zZXQoMCxVYSxoYixVYSk7cWFbMl0uc2V0KDMqaGIsVWEsaGIsVWEpO3FhWzNdLnNldChoYixVYSxoYixVYSk7cWFbNF0uc2V0KDMqaGIsMCxoYixVYSk7cWFbNV0uc2V0KGhiLDAsaGIsVWEpO0UueCo9NDtFLnkqPTJ9bnVsbD09PUthLm1hcCYmKEthLm1hcD1uZXcgcChFLngsRS55LHttaW5GaWx0ZXI6MTAwMyxtYWdGaWx0ZXI6MTAwMyxmb3JtYXQ6MTAyM30pLEthLm1hcC50ZXh0dXJlLm5hbWU9ZmIubmFtZSsiLnNoYWRvd01hcCIsCkphLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKSk7S2EuaXNTcG90TGlnaHRTaGFkb3cmJkthLnVwZGF0ZShmYik7aGI9S2EubWFwO1VhPUthLm1hdHJpeDtPLnNldEZyb21NYXRyaXhQb3NpdGlvbihmYi5tYXRyaXhXb3JsZCk7SmEucG9zaXRpb24uY29weShPKTtjYj8oS2E9NixVYS5tYWtlVHJhbnNsYXRpb24oLU8ueCwtTy55LC1PLnopKTooS2E9MSxJLnNldEZyb21NYXRyaXhQb3NpdGlvbihmYi50YXJnZXQubWF0cml4V29ybGQpLEphLmxvb2tBdChJKSxKYS51cGRhdGVNYXRyaXhXb3JsZCgpLFVhLnNldCguNSwwLDAsLjUsMCwuNSwwLC41LDAsMCwuNSwuNSwwLDAsMCwxKSxVYS5tdWx0aXBseShKYS5wcm9qZWN0aW9uTWF0cml4KSxVYS5tdWx0aXBseShKYS5tYXRyaXhXb3JsZEludmVyc2UpKTtiLnNldFJlbmRlclRhcmdldChoYik7Yi5jbGVhcigpO2ZvcihmYj0wO2ZiPEthO2ZiKyspY2ImJihJLmNvcHkoSmEucG9zaXRpb24pLEkuYWRkKFpbZmJdKSxKYS51cC5jb3B5KGZhW2ZiXSksCkphLmxvb2tBdChJKSxKYS51cGRhdGVNYXRyaXhXb3JsZCgpLEhhLnZpZXdwb3J0KHFhW2ZiXSkpLHoubXVsdGlwbHlNYXRyaWNlcyhKYS5wcm9qZWN0aW9uTWF0cml4LEphLm1hdHJpeFdvcmxkSW52ZXJzZSksdy5zZXRGcm9tTWF0cml4KHopLHUoQmEsc2EsSmEsY2IpfX1uYS5uZWVkc1VwZGF0ZT0hMTtiLnNldFJlbmRlclRhcmdldChEYSl9fX1mdW5jdGlvbiBJbyhiLGUsaCxuKXtmdW5jdGlvbiB1KG1hLElhLE9hKXt2YXIgdWI9bmV3IFVpbnQ4QXJyYXkoNCksYWI9Yi5jcmVhdGVUZXh0dXJlKCk7Yi5iaW5kVGV4dHVyZShtYSxhYik7Yi50ZXhQYXJhbWV0ZXJpKG1hLDEwMjQxLDk3MjgpO2IudGV4UGFyYW1ldGVyaShtYSwxMDI0MCw5NzI4KTtmb3IobWE9MDttYTxPYTttYSsrKWIudGV4SW1hZ2UyRChJYSttYSwwLDY0MDgsMSwxLDAsNjQwOCw1MTIxLHViKTtyZXR1cm4gYWJ9ZnVuY3Rpb24gdyhtYSxJYSl7cWFbbWFdPTE7MD09PXJhW21hXSYmKGIuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkobWEpLApyYVttYV09MSk7aWFbbWFdIT09SWEmJigobi5pc1dlYkdMMj9iOmUuZ2V0KCJBTkdMRV9pbnN0YW5jZWRfYXJyYXlzIikpW24uaXNXZWJHTDI/InZlcnRleEF0dHJpYkRpdmlzb3IiOiJ2ZXJ0ZXhBdHRyaWJEaXZpc29yQU5HTEUiXShtYSxJYSksaWFbbWFdPUlhKX1mdW5jdGlvbiB6KG1hKXshMCE9PXRhW21hXSYmKGIuZW5hYmxlKG1hKSx0YVttYV09ITApfWZ1bmN0aW9uIEUobWEpeyExIT09dGFbbWFdJiYoYi5kaXNhYmxlKG1hKSx0YVttYV09ITEpfWZ1bmN0aW9uIEgobWEsSWEsT2EsdWIsYWIsS2IsbGIsUWEpe2lmKDA9PT1tYSlCYSYmKEUoMzA0MiksQmE9ITEpO2Vsc2UgaWYoQmF8fCh6KDMwNDIpLEJhPSEwKSw1IT09bWEpe2lmKG1hIT09c2F8fFFhIT09Y2Ipe2lmKDEwMCE9PURhfHwxMDAhPT1OYSliLmJsZW5kRXF1YXRpb24oMzI3NzQpLE5hPURhPTEwMDtpZihRYSlzd2l0Y2gobWEpe2Nhc2UgMTpiLmJsZW5kRnVuY1NlcGFyYXRlKDEsNzcxLDEsNzcxKTticmVhaztjYXNlIDI6Yi5ibGVuZEZ1bmMoMSwKMSk7YnJlYWs7Y2FzZSAzOmIuYmxlbmRGdW5jU2VwYXJhdGUoMCwwLDc2OSw3NzEpO2JyZWFrO2Nhc2UgNDpiLmJsZW5kRnVuY1NlcGFyYXRlKDAsNzY4LDAsNzcwKTticmVhaztkZWZhdWx0OmNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMU3RhdGU6IEludmFsaWQgYmxlbmRpbmc6ICIsbWEpfWVsc2Ugc3dpdGNoKG1hKXtjYXNlIDE6Yi5ibGVuZEZ1bmNTZXBhcmF0ZSg3NzAsNzcxLDEsNzcxKTticmVhaztjYXNlIDI6Yi5ibGVuZEZ1bmMoNzcwLDEpO2JyZWFrO2Nhc2UgMzpiLmJsZW5kRnVuYygwLDc2OSk7YnJlYWs7Y2FzZSA0OmIuYmxlbmRGdW5jKDAsNzY4KTticmVhaztkZWZhdWx0OmNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMU3RhdGU6IEludmFsaWQgYmxlbmRpbmc6ICIsbWEpfWZiPUxhPUthPUhhPW51bGw7c2E9bWE7Y2I9UWF9fWVsc2V7YWI9YWJ8fElhO0tiPUtifHxPYTtsYj1sYnx8dWI7aWYoSWEhPT1EYXx8YWIhPT1OYSliLmJsZW5kRXF1YXRpb25TZXBhcmF0ZShoLmNvbnZlcnQoSWEpLApoLmNvbnZlcnQoYWIpKSxEYT1JYSxOYT1hYjtpZihPYSE9PUhhfHx1YiE9PUthfHxLYiE9PUxhfHxsYiE9PWZiKWIuYmxlbmRGdW5jU2VwYXJhdGUoaC5jb252ZXJ0KE9hKSxoLmNvbnZlcnQodWIpLGguY29udmVydChLYiksaC5jb252ZXJ0KGxiKSksSGE9T2EsS2E9dWIsTGE9S2IsZmI9bGI7c2E9bWE7Y2I9bnVsbH19ZnVuY3Rpb24gSShtYSl7SmEhPT1tYSYmKG1hP2IuZnJvbnRGYWNlKDIzMDQpOmIuZnJvbnRGYWNlKDIzMDUpLEphPW1hKX1mdW5jdGlvbiBPKG1hKXswIT09bWE/KHooMjg4NCksbWEhPT1oYiYmKDE9PT1tYT9iLmN1bGxGYWNlKDEwMjkpOjI9PT1tYT9iLmN1bGxGYWNlKDEwMjgpOmIuY3VsbEZhY2UoMTAzMikpKTpFKDI4ODQpO2hiPW1hfWZ1bmN0aW9uIFEobWEsSWEsT2Epe2lmKG1hKXtpZih6KDMyODIzKSxIYiE9PUlhfHxxYiE9PU9hKWIucG9seWdvbk9mZnNldChJYSxPYSksSGI9SWEscWI9T2F9ZWxzZSBFKDMyODIzKX1mdW5jdGlvbiBSKG1hKXt2b2lkIDA9PT0KbWEmJihtYT0zMzk4NCtqYS0xKTt5YSE9PW1hJiYoYi5hY3RpdmVUZXh0dXJlKG1hKSx5YT1tYSl9dmFyIFU9bmV3IGZ1bmN0aW9uKCl7dmFyIG1hPSExLElhPW5ldyBtLE9hPW51bGwsdWI9bmV3IG0oMCwwLDAsMCk7cmV0dXJue3NldE1hc2s6ZnVuY3Rpb24oYWIpe09hPT09YWJ8fG1hfHwoYi5jb2xvck1hc2soYWIsYWIsYWIsYWIpLE9hPWFiKX0sc2V0TG9ja2VkOmZ1bmN0aW9uKGFiKXttYT1hYn0sc2V0Q2xlYXI6ZnVuY3Rpb24oYWIsS2IsbGIsUWEsbmIpeyEwPT09bmImJihhYio9UWEsS2IqPVFhLGxiKj1RYSk7SWEuc2V0KGFiLEtiLGxiLFFhKTshMT09PXViLmVxdWFscyhJYSkmJihiLmNsZWFyQ29sb3IoYWIsS2IsbGIsUWEpLHViLmNvcHkoSWEpKX0scmVzZXQ6ZnVuY3Rpb24oKXttYT0hMTtPYT1udWxsO3ViLnNldCgtMSwwLDAsMCl9fX0sVz1uZXcgZnVuY3Rpb24oKXt2YXIgbWE9ITEsSWE9bnVsbCxPYT1udWxsLHViPW51bGw7cmV0dXJue3NldFRlc3Q6ZnVuY3Rpb24oYWIpe2FiPwp6KDI5MjkpOkUoMjkyOSl9LHNldE1hc2s6ZnVuY3Rpb24oYWIpe0lhPT09YWJ8fG1hfHwoYi5kZXB0aE1hc2soYWIpLElhPWFiKX0sc2V0RnVuYzpmdW5jdGlvbihhYil7aWYoT2EhPT1hYil7aWYoYWIpc3dpdGNoKGFiKXtjYXNlIDA6Yi5kZXB0aEZ1bmMoNTEyKTticmVhaztjYXNlIDE6Yi5kZXB0aEZ1bmMoNTE5KTticmVhaztjYXNlIDI6Yi5kZXB0aEZ1bmMoNTEzKTticmVhaztjYXNlIDM6Yi5kZXB0aEZ1bmMoNTE1KTticmVhaztjYXNlIDQ6Yi5kZXB0aEZ1bmMoNTE0KTticmVhaztjYXNlIDU6Yi5kZXB0aEZ1bmMoNTE4KTticmVhaztjYXNlIDY6Yi5kZXB0aEZ1bmMoNTE2KTticmVhaztjYXNlIDc6Yi5kZXB0aEZ1bmMoNTE3KTticmVhaztkZWZhdWx0OmIuZGVwdGhGdW5jKDUxNSl9ZWxzZSBiLmRlcHRoRnVuYyg1MTUpO09hPWFifX0sc2V0TG9ja2VkOmZ1bmN0aW9uKGFiKXttYT1hYn0sc2V0Q2xlYXI6ZnVuY3Rpb24oYWIpe3ViIT09YWImJihiLmNsZWFyRGVwdGgoYWIpLHViPQphYil9LHJlc2V0OmZ1bmN0aW9uKCl7bWE9ITE7dWI9T2E9SWE9bnVsbH19fSxaPW5ldyBmdW5jdGlvbigpe3ZhciBtYT0hMSxJYT1udWxsLE9hPW51bGwsdWI9bnVsbCxhYj1udWxsLEtiPW51bGwsbGI9bnVsbCxRYT1udWxsLG5iPW51bGw7cmV0dXJue3NldFRlc3Q6ZnVuY3Rpb24ocGIpe3BiP3ooMjk2MCk6RSgyOTYwKX0sc2V0TWFzazpmdW5jdGlvbihwYil7SWE9PT1wYnx8bWF8fChiLnN0ZW5jaWxNYXNrKHBiKSxJYT1wYil9LHNldEZ1bmM6ZnVuY3Rpb24ocGIsdmIsQWIpe2lmKE9hIT09cGJ8fHViIT09dmJ8fGFiIT09QWIpYi5zdGVuY2lsRnVuYyhwYix2YixBYiksT2E9cGIsdWI9dmIsYWI9QWJ9LHNldE9wOmZ1bmN0aW9uKHBiLHZiLEFiKXtpZihLYiE9PXBifHxsYiE9PXZifHxRYSE9PUFiKWIuc3RlbmNpbE9wKHBiLHZiLEFiKSxLYj1wYixsYj12YixRYT1BYn0sc2V0TG9ja2VkOmZ1bmN0aW9uKHBiKXttYT1wYn0sc2V0Q2xlYXI6ZnVuY3Rpb24ocGIpe25iIT09cGImJihiLmNsZWFyU3RlbmNpbChwYiksCm5iPXBiKX0scmVzZXQ6ZnVuY3Rpb24oKXttYT0hMTtuYj1RYT1sYj1LYj1hYj11Yj1PYT1JYT1udWxsfX19LGZhPWIuZ2V0UGFyYW1ldGVyKDM0OTIxKSxxYT1uZXcgVWludDhBcnJheShmYSkscmE9bmV3IFVpbnQ4QXJyYXkoZmEpLGlhPW5ldyBVaW50OEFycmF5KGZhKSx0YT17fSxuYT1udWxsLHZhPW51bGwsQmE9bnVsbCxzYT1udWxsLERhPW51bGwsSGE9bnVsbCxLYT1udWxsLE5hPW51bGwsTGE9bnVsbCxmYj1udWxsLGNiPSExLEphPW51bGwsaGI9bnVsbCxVYT1udWxsLEhiPW51bGwscWI9bnVsbCxqYT1iLmdldFBhcmFtZXRlcigzNTY2MSkscGE9ITE7ZmE9MDtmYT1iLmdldFBhcmFtZXRlcig3OTM4KTstMSE9PWZhLmluZGV4T2YoIldlYkdMIik/KGZhPXBhcnNlRmxvYXQoL15XZWJHTCAoWzAtOV0pLy5leGVjKGZhKVsxXSkscGE9MTw9ZmEpOi0xIT09ZmEuaW5kZXhPZigiT3BlbkdMIEVTIikmJihmYT1wYXJzZUZsb2F0KC9eT3BlbkdMIEVTIChbMC05XSkvLmV4ZWMoZmEpWzFdKSwKcGE9Mjw9ZmEpO3ZhciB5YT1udWxsLFZhPXt9LFphPW5ldyBtLFRhPW5ldyBtLGliPXt9O2liWzM1NTNdPXUoMzU1MywzNTUzLDEpO2liWzM0MDY3XT11KDM0MDY3LDM0MDY5LDYpO1Uuc2V0Q2xlYXIoMCwwLDAsMSk7Vy5zZXRDbGVhcigxKTtaLnNldENsZWFyKDApO3ooMjkyOSk7Vy5zZXRGdW5jKDMpO0koITEpO08oMSk7eigyODg0KTtIKDApO3JldHVybntidWZmZXJzOntjb2xvcjpVLGRlcHRoOlcsc3RlbmNpbDpafSxpbml0QXR0cmlidXRlczpmdW5jdGlvbigpe2Zvcih2YXIgbWE9MCxJYT1xYS5sZW5ndGg7bWE8SWE7bWErKylxYVttYV09MH0sZW5hYmxlQXR0cmlidXRlOmZ1bmN0aW9uKG1hKXt3KG1hLDApfSxlbmFibGVBdHRyaWJ1dGVBbmREaXZpc29yOncsZGlzYWJsZVVudXNlZEF0dHJpYnV0ZXM6ZnVuY3Rpb24oKXtmb3IodmFyIG1hPTAsSWE9cmEubGVuZ3RoO21hIT09SWE7KyttYSlyYVttYV0hPT1xYVttYV0mJihiLmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShtYSksCnJhW21hXT0wKX0sZW5hYmxlOnosZGlzYWJsZTpFLGdldENvbXByZXNzZWRUZXh0dXJlRm9ybWF0czpmdW5jdGlvbigpe2lmKG51bGw9PT1uYSYmKG5hPVtdLGUuZ2V0KCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfcHZydGMiKXx8ZS5nZXQoIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjIil8fGUuZ2V0KCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfZXRjMSIpfHxlLmdldCgiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX2FzdGMiKSkpZm9yKHZhciBtYT1iLmdldFBhcmFtZXRlcigzNDQ2NyksSWE9MDtJYTxtYS5sZW5ndGg7SWErKyluYS5wdXNoKG1hW0lhXSk7cmV0dXJuIG5hfSx1c2VQcm9ncmFtOmZ1bmN0aW9uKG1hKXtyZXR1cm4gdmEhPT1tYT8oYi51c2VQcm9ncmFtKG1hKSx2YT1tYSwhMCk6ITF9LHNldEJsZW5kaW5nOkgsc2V0TWF0ZXJpYWw6ZnVuY3Rpb24obWEsSWEpezI9PT1tYS5zaWRlP0UoMjg4NCk6eigyODg0KTt2YXIgT2E9MT09PW1hLnNpZGU7SWEmJihPYT0KIU9hKTtJKE9hKTsxPT09bWEuYmxlbmRpbmcmJiExPT09bWEudHJhbnNwYXJlbnQ/SCgwKTpIKG1hLmJsZW5kaW5nLG1hLmJsZW5kRXF1YXRpb24sbWEuYmxlbmRTcmMsbWEuYmxlbmREc3QsbWEuYmxlbmRFcXVhdGlvbkFscGhhLG1hLmJsZW5kU3JjQWxwaGEsbWEuYmxlbmREc3RBbHBoYSxtYS5wcmVtdWx0aXBsaWVkQWxwaGEpO1cuc2V0RnVuYyhtYS5kZXB0aEZ1bmMpO1cuc2V0VGVzdChtYS5kZXB0aFRlc3QpO1cuc2V0TWFzayhtYS5kZXB0aFdyaXRlKTtVLnNldE1hc2sobWEuY29sb3JXcml0ZSk7UShtYS5wb2x5Z29uT2Zmc2V0LG1hLnBvbHlnb25PZmZzZXRGYWN0b3IsbWEucG9seWdvbk9mZnNldFVuaXRzKX0sc2V0RmxpcFNpZGVkOkksc2V0Q3VsbEZhY2U6TyxzZXRMaW5lV2lkdGg6ZnVuY3Rpb24obWEpe21hIT09VWEmJihwYSYmYi5saW5lV2lkdGgobWEpLFVhPW1hKX0sc2V0UG9seWdvbk9mZnNldDpRLHNldFNjaXNzb3JUZXN0OmZ1bmN0aW9uKG1hKXttYT96KDMwODkpOgpFKDMwODkpfSxhY3RpdmVUZXh0dXJlOlIsYmluZFRleHR1cmU6ZnVuY3Rpb24obWEsSWEpe251bGw9PT15YSYmUigpO3ZhciBPYT1WYVt5YV07dm9pZCAwPT09T2EmJihPYT17dHlwZTp2b2lkIDAsdGV4dHVyZTp2b2lkIDB9LFZhW3lhXT1PYSk7aWYoT2EudHlwZSE9PW1hfHxPYS50ZXh0dXJlIT09SWEpYi5iaW5kVGV4dHVyZShtYSxJYXx8aWJbbWFdKSxPYS50eXBlPW1hLE9hLnRleHR1cmU9SWF9LGNvbXByZXNzZWRUZXhJbWFnZTJEOmZ1bmN0aW9uKCl7dHJ5e2IuY29tcHJlc3NlZFRleEltYWdlMkQuYXBwbHkoYixhcmd1bWVudHMpfWNhdGNoKG1hKXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFN0YXRlOiIsbWEpfX0sdGV4SW1hZ2UyRDpmdW5jdGlvbigpe3RyeXtiLnRleEltYWdlMkQuYXBwbHkoYixhcmd1bWVudHMpfWNhdGNoKG1hKXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFN0YXRlOiIsbWEpfX0sdGV4SW1hZ2UzRDpmdW5jdGlvbigpe3RyeXtiLnRleEltYWdlM0QuYXBwbHkoYiwKYXJndW1lbnRzKX1jYXRjaChtYSl7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xTdGF0ZToiLG1hKX19LHNjaXNzb3I6ZnVuY3Rpb24obWEpeyExPT09WmEuZXF1YWxzKG1hKSYmKGIuc2Npc3NvcihtYS54LG1hLnksbWEueixtYS53KSxaYS5jb3B5KG1hKSl9LHZpZXdwb3J0OmZ1bmN0aW9uKG1hKXshMT09PVRhLmVxdWFscyhtYSkmJihiLnZpZXdwb3J0KG1hLngsbWEueSxtYS56LG1hLncpLFRhLmNvcHkobWEpKX0scmVzZXQ6ZnVuY3Rpb24oKXtmb3IodmFyIG1hPTA7bWE8cmEubGVuZ3RoO21hKyspMT09PXJhW21hXSYmKGIuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KG1hKSxyYVttYV09MCk7dGE9e307eWE9bmE9bnVsbDtWYT17fTtoYj1KYT1zYT12YT1udWxsO1UucmVzZXQoKTtXLnJlc2V0KCk7Wi5yZXNldCgpfX19ZnVuY3Rpb24gSm8oYixlLGgsbix1LHcseil7ZnVuY3Rpb24gRShqYSxwYSl7cmV0dXJuIGhiP25ldyBPZmZzY3JlZW5DYW52YXMoamEscGEpOmRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIsCiJjYW52YXMiKX1mdW5jdGlvbiBIKGphLHBhLHlhLFZhKXt2YXIgWmE9MTtpZihqYS53aWR0aD5WYXx8amEuaGVpZ2h0PlZhKVphPVZhL01hdGgubWF4KGphLndpZHRoLGphLmhlaWdodCk7aWYoMT5aYXx8ITA9PT1wYSl7aWYoInVuZGVmaW5lZCIhPT10eXBlb2YgSFRNTEltYWdlRWxlbWVudCYmamEgaW5zdGFuY2VvZiBIVE1MSW1hZ2VFbGVtZW50fHwidW5kZWZpbmVkIiE9PXR5cGVvZiBIVE1MQ2FudmFzRWxlbWVudCYmamEgaW5zdGFuY2VvZiBIVE1MQ2FudmFzRWxlbWVudHx8InVuZGVmaW5lZCIhPT10eXBlb2YgSW1hZ2VCaXRtYXAmJmphIGluc3RhbmNlb2YgSW1hZ2VCaXRtYXApcmV0dXJuIFZhPXBhP29iLmZsb29yUG93ZXJPZlR3bzpNYXRoLmZsb29yLHBhPVZhKFphKmphLndpZHRoKSxaYT1WYShaYSpqYS5oZWlnaHQpLHZvaWQgMD09PUphJiYoSmE9RShwYSxaYSkpLHlhPXlhP0UocGEsWmEpOkphLHlhLndpZHRoPXBhLHlhLmhlaWdodD1aYSx5YS5nZXRDb250ZXh0KCIyZCIpLmRyYXdJbWFnZShqYSwKMCwwLHBhLFphKSxjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFRleHR1cmUgaGFzIGJlZW4gcmVzaXplZCBmcm9tICgiK2phLndpZHRoKyJ4IitqYS5oZWlnaHQrIikgdG8gKCIrcGErIngiK1phKyIpLiIpLHlhOyJkYXRhImluIGphJiZjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IEltYWdlIGluIERhdGFUZXh0dXJlIGlzIHRvbyBiaWcgKCIramEud2lkdGgrIngiK2phLmhlaWdodCsiKS4iKX1yZXR1cm4gamF9ZnVuY3Rpb24gSShqYSl7cmV0dXJuIG9iLmlzUG93ZXJPZlR3byhqYS53aWR0aCkmJm9iLmlzUG93ZXJPZlR3byhqYS5oZWlnaHQpfWZ1bmN0aW9uIE8oamEpe3JldHVybiB1LmlzV2ViR0wyPyExOjEwMDEhPT1qYS53cmFwU3x8MTAwMSE9PWphLndyYXBUfHwxMDAzIT09amEubWluRmlsdGVyJiYxMDA2IT09amEubWluRmlsdGVyfWZ1bmN0aW9uIFEoamEscGEpe3JldHVybiBqYS5nZW5lcmF0ZU1pcG1hcHMmJnBhJiYxMDAzIT09amEubWluRmlsdGVyJiYKMTAwNiE9PWphLm1pbkZpbHRlcn1mdW5jdGlvbiBSKGphLHBhLHlhLFZhKXtiLmdlbmVyYXRlTWlwbWFwKGphKTtuLmdldChwYSkuX19tYXhNaXBMZXZlbD1NYXRoLmxvZyhNYXRoLm1heCh5YSxWYSkpKk1hdGguTE9HMkV9ZnVuY3Rpb24gVShqYSxwYSl7aWYoIXUuaXNXZWJHTDIpcmV0dXJuIGphO3ZhciB5YT1qYTs2NDAzPT09amEmJig1MTI2PT09cGEmJih5YT0zMzMyNiksNTEzMT09PXBhJiYoeWE9MzMzMjUpLDUxMjE9PT1wYSYmKHlhPTMzMzIxKSk7NjQwNz09PWphJiYoNTEyNj09PXBhJiYoeWE9MzQ4MzcpLDUxMzE9PT1wYSYmKHlhPTM0ODQzKSw1MTIxPT09cGEmJih5YT0zMjg0OSkpOzY0MDg9PT1qYSYmKDUxMjY9PT1wYSYmKHlhPTM0ODM2KSw1MTMxPT09cGEmJih5YT0zNDg0MiksNTEyMT09PXBhJiYoeWE9MzI4NTYpKTszMzMyNT09PXlhfHwzMzMyNj09PXlhfHwzNDg0Mj09PXlhfHwzNDgzNj09PXlhP2UuZ2V0KCJFWFRfY29sb3JfYnVmZmVyX2Zsb2F0Iik6KDM0ODQzPT09CnlhfHwzNDgzNz09PXlhKSYmY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBGbG9hdGluZyBwb2ludCB0ZXh0dXJlcyB3aXRoIFJHQiBmb3JtYXQgbm90IHN1cHBvcnRlZC4gUGxlYXNlIHVzZSBSR0JBIGluc3RlYWQuIik7cmV0dXJuIHlhfWZ1bmN0aW9uIFcoamEpe3JldHVybiAxMDAzPT09amF8fDEwMDQ9PT1qYXx8MTAwNT09PWphPzk3Mjg6OTcyOX1mdW5jdGlvbiBaKGphKXtqYT1qYS50YXJnZXQ7amEucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsWik7cWEoamEpO2phLmlzVmlkZW9UZXh0dXJlJiZkZWxldGUgY2JbamEuaWRdO3oubWVtb3J5LnRleHR1cmVzLS19ZnVuY3Rpb24gZmEoamEpe2phPWphLnRhcmdldDtqYS5yZW1vdmVFdmVudExpc3RlbmVyKCJkaXNwb3NlIixmYSk7cmEoamEpO3oubWVtb3J5LnRleHR1cmVzLS19ZnVuY3Rpb24gcWEoamEpe3ZhciBwYT1uLmdldChqYSk7dm9pZCAwIT09cGEuX193ZWJnbEluaXQmJihiLmRlbGV0ZVRleHR1cmUocGEuX193ZWJnbFRleHR1cmUpLApuLnJlbW92ZShqYSkpfWZ1bmN0aW9uIHJhKGphKXt2YXIgcGE9bi5nZXQoamEpLHlhPW4uZ2V0KGphLnRleHR1cmUpO2lmKGphKXt2b2lkIDAhPT15YS5fX3dlYmdsVGV4dHVyZSYmYi5kZWxldGVUZXh0dXJlKHlhLl9fd2ViZ2xUZXh0dXJlKTtqYS5kZXB0aFRleHR1cmUmJmphLmRlcHRoVGV4dHVyZS5kaXNwb3NlKCk7aWYoamEuaXNXZWJHTFJlbmRlclRhcmdldEN1YmUpZm9yKHlhPTA7Nj55YTt5YSsrKWIuZGVsZXRlRnJhbWVidWZmZXIocGEuX193ZWJnbEZyYW1lYnVmZmVyW3lhXSkscGEuX193ZWJnbERlcHRoYnVmZmVyJiZiLmRlbGV0ZVJlbmRlcmJ1ZmZlcihwYS5fX3dlYmdsRGVwdGhidWZmZXJbeWFdKTtlbHNlIGIuZGVsZXRlRnJhbWVidWZmZXIocGEuX193ZWJnbEZyYW1lYnVmZmVyKSxwYS5fX3dlYmdsRGVwdGhidWZmZXImJmIuZGVsZXRlUmVuZGVyYnVmZmVyKHBhLl9fd2ViZ2xEZXB0aGJ1ZmZlcik7bi5yZW1vdmUoamEudGV4dHVyZSk7bi5yZW1vdmUoamEpfX1mdW5jdGlvbiBpYShqYSwKcGEpe3ZhciB5YT1uLmdldChqYSk7amEuaXNWaWRlb1RleHR1cmUmJmZiKGphKTtpZigwPGphLnZlcnNpb24mJnlhLl9fdmVyc2lvbiE9PWphLnZlcnNpb24pe3ZhciBWYT1qYS5pbWFnZTtpZih2b2lkIDA9PT1WYSljb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFRleHR1cmUgbWFya2VkIGZvciB1cGRhdGUgYnV0IGltYWdlIGlzIHVuZGVmaW5lZCIpO2Vsc2UgaWYoITE9PT1WYS5jb21wbGV0ZSljb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFRleHR1cmUgbWFya2VkIGZvciB1cGRhdGUgYnV0IGltYWdlIGlzIGluY29tcGxldGUiKTtlbHNle3NhKHlhLGphLHBhKTtyZXR1cm59fWguYWN0aXZlVGV4dHVyZSgzMzk4NCtwYSk7aC5iaW5kVGV4dHVyZSgzNTUzLHlhLl9fd2ViZ2xUZXh0dXJlKX1mdW5jdGlvbiB0YShqYSxwYSl7dmFyIHlhPW4uZ2V0KGphKTtpZig2PT09amEuaW1hZ2UubGVuZ3RoKWlmKDA8amEudmVyc2lvbiYmeWEuX192ZXJzaW9uIT09CmphLnZlcnNpb24pe0JhKHlhLGphKTtoLmFjdGl2ZVRleHR1cmUoMzM5ODQrcGEpO2guYmluZFRleHR1cmUoMzQwNjcseWEuX193ZWJnbFRleHR1cmUpO2IucGl4ZWxTdG9yZWkoMzc0NDAsamEuZmxpcFkpO3BhPWphJiZqYS5pc0NvbXByZXNzZWRUZXh0dXJlO2Zvcih2YXIgVmE9amEuaW1hZ2VbMF0mJmphLmltYWdlWzBdLmlzRGF0YVRleHR1cmUsWmE9W10sVGE9MDs2PlRhO1RhKyspWmFbVGFdPXBhfHxWYT9WYT9qYS5pbWFnZVtUYV0uaW1hZ2U6amEuaW1hZ2VbVGFdOkgoamEuaW1hZ2VbVGFdLCExLCEwLHUubWF4Q3ViZW1hcFNpemUpO3ZhciBpYj1aYVswXSxtYT1JKGliKXx8dS5pc1dlYkdMMixJYT13LmNvbnZlcnQoamEuZm9ybWF0KSxPYT13LmNvbnZlcnQoamEudHlwZSksdWI9VShJYSxPYSk7dmEoMzQwNjcsamEsbWEpO2ZvcihUYT0wOzY+VGE7VGErKylpZihwYSlmb3IodmFyIGFiLEtiPVphW1RhXS5taXBtYXBzLGxiPTAsUWE9S2IubGVuZ3RoO2xiPFFhO2xiKyspYWI9S2JbbGJdLAoxMDIzIT09amEuZm9ybWF0JiYxMDIyIT09amEuZm9ybWF0Py0xPGguZ2V0Q29tcHJlc3NlZFRleHR1cmVGb3JtYXRzKCkuaW5kZXhPZihJYSk/aC5jb21wcmVzc2VkVGV4SW1hZ2UyRCgzNDA2OStUYSxsYix1YixhYi53aWR0aCxhYi5oZWlnaHQsMCxhYi5kYXRhKTpjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IEF0dGVtcHQgdG8gbG9hZCB1bnN1cHBvcnRlZCBjb21wcmVzc2VkIHRleHR1cmUgZm9ybWF0IGluIC5zZXRUZXh0dXJlQ3ViZSgpIik6aC50ZXhJbWFnZTJEKDM0MDY5K1RhLGxiLHViLGFiLndpZHRoLGFiLmhlaWdodCwwLElhLE9hLGFiLmRhdGEpO2Vsc2UgVmE/aC50ZXhJbWFnZTJEKDM0MDY5K1RhLDAsdWIsWmFbVGFdLndpZHRoLFphW1RhXS5oZWlnaHQsMCxJYSxPYSxaYVtUYV0uZGF0YSk6aC50ZXhJbWFnZTJEKDM0MDY5K1RhLDAsdWIsSWEsT2EsWmFbVGFdKTt5YS5fX21heE1pcExldmVsPXBhP0tiLmxlbmd0aC0xOjA7UShqYSxtYSkmJlIoMzQwNjcsCmphLGliLndpZHRoLGliLmhlaWdodCk7eWEuX192ZXJzaW9uPWphLnZlcnNpb247aWYoamEub25VcGRhdGUpamEub25VcGRhdGUoamEpfWVsc2UgaC5hY3RpdmVUZXh0dXJlKDMzOTg0K3BhKSxoLmJpbmRUZXh0dXJlKDM0MDY3LHlhLl9fd2ViZ2xUZXh0dXJlKX1mdW5jdGlvbiBuYShqYSxwYSl7aC5hY3RpdmVUZXh0dXJlKDMzOTg0K3BhKTtoLmJpbmRUZXh0dXJlKDM0MDY3LG4uZ2V0KGphKS5fX3dlYmdsVGV4dHVyZSl9ZnVuY3Rpb24gdmEoamEscGEseWEpe3lhPyhiLnRleFBhcmFtZXRlcmkoamEsMTAyNDIsdy5jb252ZXJ0KHBhLndyYXBTKSksYi50ZXhQYXJhbWV0ZXJpKGphLDEwMjQzLHcuY29udmVydChwYS53cmFwVCkpLDMyODc5IT09amEmJjM1ODY2IT09amF8fGIudGV4UGFyYW1ldGVyaShqYSwzMjg4Mix3LmNvbnZlcnQocGEud3JhcFIpKSxiLnRleFBhcmFtZXRlcmkoamEsMTAyNDAsdy5jb252ZXJ0KHBhLm1hZ0ZpbHRlcikpLGIudGV4UGFyYW1ldGVyaShqYSwxMDI0MSwKdy5jb252ZXJ0KHBhLm1pbkZpbHRlcikpKTooYi50ZXhQYXJhbWV0ZXJpKGphLDEwMjQyLDMzMDcxKSxiLnRleFBhcmFtZXRlcmkoamEsMTAyNDMsMzMwNzEpLDMyODc5IT09amEmJjM1ODY2IT09amF8fGIudGV4UGFyYW1ldGVyaShqYSwzMjg4MiwzMzA3MSksMTAwMT09PXBhLndyYXBTJiYxMDAxPT09cGEud3JhcFR8fGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogVGV4dHVyZSBpcyBub3QgcG93ZXIgb2YgdHdvLiBUZXh0dXJlLndyYXBTIGFuZCBUZXh0dXJlLndyYXBUIHNob3VsZCBiZSBzZXQgdG8gVEhSRUUuQ2xhbXBUb0VkZ2VXcmFwcGluZy4iKSxiLnRleFBhcmFtZXRlcmkoamEsMTAyNDAsVyhwYS5tYWdGaWx0ZXIpKSxiLnRleFBhcmFtZXRlcmkoamEsMTAyNDEsVyhwYS5taW5GaWx0ZXIpKSwxMDAzIT09cGEubWluRmlsdGVyJiYxMDA2IT09cGEubWluRmlsdGVyJiZjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFRleHR1cmUgaXMgbm90IHBvd2VyIG9mIHR3by4gVGV4dHVyZS5taW5GaWx0ZXIgc2hvdWxkIGJlIHNldCB0byBUSFJFRS5OZWFyZXN0RmlsdGVyIG9yIFRIUkVFLkxpbmVhckZpbHRlci4iKSk7CiEoeWE9ZS5nZXQoIkVYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpKXx8MTAxNT09PXBhLnR5cGUmJm51bGw9PT1lLmdldCgiT0VTX3RleHR1cmVfZmxvYXRfbGluZWFyIil8fDEwMTY9PT1wYS50eXBlJiZudWxsPT09KHUuaXNXZWJHTDJ8fGUuZ2V0KCJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0X2xpbmVhciIpKXx8ISgxPHBhLmFuaXNvdHJvcHl8fG4uZ2V0KHBhKS5fX2N1cnJlbnRBbmlzb3Ryb3B5KXx8KGIudGV4UGFyYW1ldGVyZihqYSx5YS5URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVCxNYXRoLm1pbihwYS5hbmlzb3Ryb3B5LHUuZ2V0TWF4QW5pc290cm9weSgpKSksbi5nZXQocGEpLl9fY3VycmVudEFuaXNvdHJvcHk9cGEuYW5pc290cm9weSl9ZnVuY3Rpb24gQmEoamEscGEpe3ZvaWQgMD09PWphLl9fd2ViZ2xJbml0JiYoamEuX193ZWJnbEluaXQ9ITAscGEuYWRkRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsWiksamEuX193ZWJnbFRleHR1cmU9Yi5jcmVhdGVUZXh0dXJlKCksCnoubWVtb3J5LnRleHR1cmVzKyspfWZ1bmN0aW9uIHNhKGphLHBhLHlhKXt2YXIgVmE9MzU1MztwYS5pc0RhdGFUZXh0dXJlMkRBcnJheSYmKFZhPTM1ODY2KTtwYS5pc0RhdGFUZXh0dXJlM0QmJihWYT0zMjg3OSk7QmEoamEscGEpO2guYWN0aXZlVGV4dHVyZSgzMzk4NCt5YSk7aC5iaW5kVGV4dHVyZShWYSxqYS5fX3dlYmdsVGV4dHVyZSk7Yi5waXhlbFN0b3JlaSgzNzQ0MCxwYS5mbGlwWSk7Yi5waXhlbFN0b3JlaSgzNzQ0MSxwYS5wcmVtdWx0aXBseUFscGhhKTtiLnBpeGVsU3RvcmVpKDMzMTcscGEudW5wYWNrQWxpZ25tZW50KTt5YT1PKHBhKSYmITE9PT1JKHBhLmltYWdlKTt5YT1IKHBhLmltYWdlLHlhLCExLHUubWF4VGV4dHVyZVNpemUpO3ZhciBaYT1JKHlhKXx8dS5pc1dlYkdMMixUYT13LmNvbnZlcnQocGEuZm9ybWF0KSxpYj13LmNvbnZlcnQocGEudHlwZSksbWE9VShUYSxpYik7dmEoVmEscGEsWmEpO3ZhciBJYT1wYS5taXBtYXBzO2lmKHBhLmlzRGVwdGhUZXh0dXJlKXttYT0KNjQwMjtpZigxMDE1PT09cGEudHlwZSl7aWYoIXUuaXNXZWJHTDIpdGhyb3cgRXJyb3IoIkZsb2F0IERlcHRoIFRleHR1cmUgb25seSBzdXBwb3J0ZWQgaW4gV2ViR0wyLjAiKTttYT0zNjAxMn1lbHNlIHUuaXNXZWJHTDImJihtYT0zMzE4OSk7MTAyNj09PXBhLmZvcm1hdCYmNjQwMj09PW1hJiYxMDEyIT09cGEudHlwZSYmMTAxNCE9PXBhLnR5cGUmJihjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFVzZSBVbnNpZ25lZFNob3J0VHlwZSBvciBVbnNpZ25lZEludFR5cGUgZm9yIERlcHRoRm9ybWF0IERlcHRoVGV4dHVyZS4iKSxwYS50eXBlPTEwMTIsaWI9dy5jb252ZXJ0KHBhLnR5cGUpKTsxMDI3PT09cGEuZm9ybWF0JiYobWE9MzQwNDEsMTAyMCE9PXBhLnR5cGUmJihjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFVzZSBVbnNpZ25lZEludDI0OFR5cGUgZm9yIERlcHRoU3RlbmNpbEZvcm1hdCBEZXB0aFRleHR1cmUuIikscGEudHlwZT0xMDIwLGliPQp3LmNvbnZlcnQocGEudHlwZSkpKTtoLnRleEltYWdlMkQoMzU1MywwLG1hLHlhLndpZHRoLHlhLmhlaWdodCwwLFRhLGliLG51bGwpfWVsc2UgaWYocGEuaXNEYXRhVGV4dHVyZSlpZigwPElhLmxlbmd0aCYmWmEpe2Zvcih2YXIgT2E9MCx1Yj1JYS5sZW5ndGg7T2E8dWI7T2ErKylWYT1JYVtPYV0saC50ZXhJbWFnZTJEKDM1NTMsT2EsbWEsVmEud2lkdGgsVmEuaGVpZ2h0LDAsVGEsaWIsVmEuZGF0YSk7cGEuZ2VuZXJhdGVNaXBtYXBzPSExO2phLl9fbWF4TWlwTGV2ZWw9SWEubGVuZ3RoLTF9ZWxzZSBoLnRleEltYWdlMkQoMzU1MywwLG1hLHlhLndpZHRoLHlhLmhlaWdodCwwLFRhLGliLHlhLmRhdGEpLGphLl9fbWF4TWlwTGV2ZWw9MDtlbHNlIGlmKHBhLmlzQ29tcHJlc3NlZFRleHR1cmUpe09hPTA7Zm9yKHViPUlhLmxlbmd0aDtPYTx1YjtPYSsrKVZhPUlhW09hXSwxMDIzIT09cGEuZm9ybWF0JiYxMDIyIT09cGEuZm9ybWF0Py0xPGguZ2V0Q29tcHJlc3NlZFRleHR1cmVGb3JtYXRzKCkuaW5kZXhPZihUYSk/CmguY29tcHJlc3NlZFRleEltYWdlMkQoMzU1MyxPYSxtYSxWYS53aWR0aCxWYS5oZWlnaHQsMCxWYS5kYXRhKTpjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IEF0dGVtcHQgdG8gbG9hZCB1bnN1cHBvcnRlZCBjb21wcmVzc2VkIHRleHR1cmUgZm9ybWF0IGluIC51cGxvYWRUZXh0dXJlKCkiKTpoLnRleEltYWdlMkQoMzU1MyxPYSxtYSxWYS53aWR0aCxWYS5oZWlnaHQsMCxUYSxpYixWYS5kYXRhKTtqYS5fX21heE1pcExldmVsPUlhLmxlbmd0aC0xfWVsc2UgaWYocGEuaXNEYXRhVGV4dHVyZTJEQXJyYXkpaC50ZXhJbWFnZTNEKDM1ODY2LDAsbWEseWEud2lkdGgseWEuaGVpZ2h0LHlhLmRlcHRoLDAsVGEsaWIseWEuZGF0YSksamEuX19tYXhNaXBMZXZlbD0wO2Vsc2UgaWYocGEuaXNEYXRhVGV4dHVyZTNEKWgudGV4SW1hZ2UzRCgzMjg3OSwwLG1hLHlhLndpZHRoLHlhLmhlaWdodCx5YS5kZXB0aCwwLFRhLGliLHlhLmRhdGEpLGphLl9fbWF4TWlwTGV2ZWw9MDtlbHNlIGlmKDA8CklhLmxlbmd0aCYmWmEpe09hPTA7Zm9yKHViPUlhLmxlbmd0aDtPYTx1YjtPYSsrKVZhPUlhW09hXSxoLnRleEltYWdlMkQoMzU1MyxPYSxtYSxUYSxpYixWYSk7cGEuZ2VuZXJhdGVNaXBtYXBzPSExO2phLl9fbWF4TWlwTGV2ZWw9SWEubGVuZ3RoLTF9ZWxzZSBoLnRleEltYWdlMkQoMzU1MywwLG1hLFRhLGliLHlhKSxqYS5fX21heE1pcExldmVsPTA7UShwYSxaYSkmJlIoMzU1MyxwYSx5YS53aWR0aCx5YS5oZWlnaHQpO2phLl9fdmVyc2lvbj1wYS52ZXJzaW9uO2lmKHBhLm9uVXBkYXRlKXBhLm9uVXBkYXRlKHBhKX1mdW5jdGlvbiBEYShqYSxwYSx5YSxWYSl7dmFyIFphPXcuY29udmVydChwYS50ZXh0dXJlLmZvcm1hdCksVGE9dy5jb252ZXJ0KHBhLnRleHR1cmUudHlwZSksaWI9VShaYSxUYSk7aC50ZXhJbWFnZTJEKFZhLDAsaWIscGEud2lkdGgscGEuaGVpZ2h0LDAsWmEsVGEsbnVsbCk7Yi5iaW5kRnJhbWVidWZmZXIoMzYxNjAsamEpO2IuZnJhbWVidWZmZXJUZXh0dXJlMkQoMzYxNjAsCnlhLFZhLG4uZ2V0KHBhLnRleHR1cmUpLl9fd2ViZ2xUZXh0dXJlLDApO2IuYmluZEZyYW1lYnVmZmVyKDM2MTYwLG51bGwpfWZ1bmN0aW9uIEhhKGphLHBhLHlhKXtiLmJpbmRSZW5kZXJidWZmZXIoMzYxNjEsamEpO2lmKHBhLmRlcHRoQnVmZmVyJiYhcGEuc3RlbmNpbEJ1ZmZlcil5YT8oeWE9TGEocGEpLGIucmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKDM2MTYxLHlhLDMzMTg5LHBhLndpZHRoLHBhLmhlaWdodCkpOmIucmVuZGVyYnVmZmVyU3RvcmFnZSgzNjE2MSwzMzE4OSxwYS53aWR0aCxwYS5oZWlnaHQpLGIuZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoMzYxNjAsMzYwOTYsMzYxNjEsamEpO2Vsc2UgaWYocGEuZGVwdGhCdWZmZXImJnBhLnN0ZW5jaWxCdWZmZXIpeWE/KHlhPUxhKHBhKSxiLnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSgzNjE2MSx5YSwzNDA0MSxwYS53aWR0aCxwYS5oZWlnaHQpKTpiLnJlbmRlcmJ1ZmZlclN0b3JhZ2UoMzYxNjEsMzQwNDEsCnBhLndpZHRoLHBhLmhlaWdodCksYi5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcigzNjE2MCwzMzMwNiwzNjE2MSxqYSk7ZWxzZXtqYT13LmNvbnZlcnQocGEudGV4dHVyZS5mb3JtYXQpO3ZhciBWYT13LmNvbnZlcnQocGEudGV4dHVyZS50eXBlKTtqYT1VKGphLFZhKTt5YT8oeWE9TGEocGEpLGIucmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKDM2MTYxLHlhLGphLHBhLndpZHRoLHBhLmhlaWdodCkpOmIucmVuZGVyYnVmZmVyU3RvcmFnZSgzNjE2MSxqYSxwYS53aWR0aCxwYS5oZWlnaHQpfWIuYmluZFJlbmRlcmJ1ZmZlcigzNjE2MSxudWxsKX1mdW5jdGlvbiBLYShqYSxwYSl7aWYocGEmJnBhLmlzV2ViR0xSZW5kZXJUYXJnZXRDdWJlKXRocm93IEVycm9yKCJEZXB0aCBUZXh0dXJlIHdpdGggY3ViZSByZW5kZXIgdGFyZ2V0cyBpcyBub3Qgc3VwcG9ydGVkIik7Yi5iaW5kRnJhbWVidWZmZXIoMzYxNjAsamEpO2lmKCFwYS5kZXB0aFRleHR1cmV8fCFwYS5kZXB0aFRleHR1cmUuaXNEZXB0aFRleHR1cmUpdGhyb3cgRXJyb3IoInJlbmRlclRhcmdldC5kZXB0aFRleHR1cmUgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBUSFJFRS5EZXB0aFRleHR1cmUiKTsKbi5nZXQocGEuZGVwdGhUZXh0dXJlKS5fX3dlYmdsVGV4dHVyZSYmcGEuZGVwdGhUZXh0dXJlLmltYWdlLndpZHRoPT09cGEud2lkdGgmJnBhLmRlcHRoVGV4dHVyZS5pbWFnZS5oZWlnaHQ9PT1wYS5oZWlnaHR8fChwYS5kZXB0aFRleHR1cmUuaW1hZ2Uud2lkdGg9cGEud2lkdGgscGEuZGVwdGhUZXh0dXJlLmltYWdlLmhlaWdodD1wYS5oZWlnaHQscGEuZGVwdGhUZXh0dXJlLm5lZWRzVXBkYXRlPSEwKTtpYShwYS5kZXB0aFRleHR1cmUsMCk7amE9bi5nZXQocGEuZGVwdGhUZXh0dXJlKS5fX3dlYmdsVGV4dHVyZTtpZigxMDI2PT09cGEuZGVwdGhUZXh0dXJlLmZvcm1hdCliLmZyYW1lYnVmZmVyVGV4dHVyZTJEKDM2MTYwLDM2MDk2LDM1NTMsamEsMCk7ZWxzZSBpZigxMDI3PT09cGEuZGVwdGhUZXh0dXJlLmZvcm1hdCliLmZyYW1lYnVmZmVyVGV4dHVyZTJEKDM2MTYwLDMzMzA2LDM1NTMsamEsMCk7ZWxzZSB0aHJvdyBFcnJvcigiVW5rbm93biBkZXB0aFRleHR1cmUgZm9ybWF0Iik7Cn1mdW5jdGlvbiBOYShqYSl7dmFyIHBhPW4uZ2V0KGphKSx5YT0hMD09PWphLmlzV2ViR0xSZW5kZXJUYXJnZXRDdWJlO2lmKGphLmRlcHRoVGV4dHVyZSl7aWYoeWEpdGhyb3cgRXJyb3IoInRhcmdldC5kZXB0aFRleHR1cmUgbm90IHN1cHBvcnRlZCBpbiBDdWJlIHJlbmRlciB0YXJnZXRzIik7S2EocGEuX193ZWJnbEZyYW1lYnVmZmVyLGphKX1lbHNlIGlmKHlhKWZvcihwYS5fX3dlYmdsRGVwdGhidWZmZXI9W10seWE9MDs2PnlhO3lhKyspYi5iaW5kRnJhbWVidWZmZXIoMzYxNjAscGEuX193ZWJnbEZyYW1lYnVmZmVyW3lhXSkscGEuX193ZWJnbERlcHRoYnVmZmVyW3lhXT1iLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpLEhhKHBhLl9fd2ViZ2xEZXB0aGJ1ZmZlclt5YV0samEpO2Vsc2UgYi5iaW5kRnJhbWVidWZmZXIoMzYxNjAscGEuX193ZWJnbEZyYW1lYnVmZmVyKSxwYS5fX3dlYmdsRGVwdGhidWZmZXI9Yi5jcmVhdGVSZW5kZXJidWZmZXIoKSxIYShwYS5fX3dlYmdsRGVwdGhidWZmZXIsCmphKTtiLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxudWxsKX1mdW5jdGlvbiBMYShqYSl7cmV0dXJuIHUuaXNXZWJHTDImJmphLmlzV2ViR0xNdWx0aXNhbXBsZVJlbmRlclRhcmdldD9NYXRoLm1pbih1Lm1heFNhbXBsZXMsamEuc2FtcGxlcyk6MH1mdW5jdGlvbiBmYihqYSl7dmFyIHBhPWphLmlkLHlhPXoucmVuZGVyLmZyYW1lO2NiW3BhXSE9PXlhJiYoY2JbcGFdPXlhLGphLnVwZGF0ZSgpKX12YXIgY2I9e30sSmEsaGI9InVuZGVmaW5lZCIhPT10eXBlb2YgT2Zmc2NyZWVuQ2FudmFzLFVhPTAsSGI9ITEscWI9ITE7dGhpcy5hbGxvY2F0ZVRleHR1cmVVbml0PWZ1bmN0aW9uKCl7dmFyIGphPVVhO2phPj11Lm1heFRleHR1cmVzJiZjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMVGV4dHVyZXM6IFRyeWluZyB0byB1c2UgIitqYSsiIHRleHR1cmUgdW5pdHMgd2hpbGUgdGhpcyBHUFUgc3VwcG9ydHMgb25seSAiK3UubWF4VGV4dHVyZXMpO1VhKz0xO3JldHVybiBqYX07dGhpcy5yZXNldFRleHR1cmVVbml0cz0KZnVuY3Rpb24oKXtVYT0wfTt0aGlzLnNldFRleHR1cmUyRD1pYTt0aGlzLnNldFRleHR1cmUyREFycmF5PWZ1bmN0aW9uKGphLHBhKXt2YXIgeWE9bi5nZXQoamEpOzA8amEudmVyc2lvbiYmeWEuX192ZXJzaW9uIT09amEudmVyc2lvbj9zYSh5YSxqYSxwYSk6KGguYWN0aXZlVGV4dHVyZSgzMzk4NCtwYSksaC5iaW5kVGV4dHVyZSgzNTg2Nix5YS5fX3dlYmdsVGV4dHVyZSkpfTt0aGlzLnNldFRleHR1cmUzRD1mdW5jdGlvbihqYSxwYSl7dmFyIHlhPW4uZ2V0KGphKTswPGphLnZlcnNpb24mJnlhLl9fdmVyc2lvbiE9PWphLnZlcnNpb24/c2EoeWEsamEscGEpOihoLmFjdGl2ZVRleHR1cmUoMzM5ODQrcGEpLGguYmluZFRleHR1cmUoMzI4NzkseWEuX193ZWJnbFRleHR1cmUpKX07dGhpcy5zZXRUZXh0dXJlQ3ViZT10YTt0aGlzLnNldFRleHR1cmVDdWJlRHluYW1pYz1uYTt0aGlzLnNldHVwUmVuZGVyVGFyZ2V0PWZ1bmN0aW9uKGphKXt2YXIgcGE9bi5nZXQoamEpLHlhPW4uZ2V0KGphLnRleHR1cmUpOwpqYS5hZGRFdmVudExpc3RlbmVyKCJkaXNwb3NlIixmYSk7eWEuX193ZWJnbFRleHR1cmU9Yi5jcmVhdGVUZXh0dXJlKCk7ei5tZW1vcnkudGV4dHVyZXMrKzt2YXIgVmE9ITA9PT1qYS5pc1dlYkdMUmVuZGVyVGFyZ2V0Q3ViZSxaYT0hMD09PWphLmlzV2ViR0xNdWx0aXNhbXBsZVJlbmRlclRhcmdldCxUYT1JKGphKXx8dS5pc1dlYkdMMjtpZihWYSlmb3IocGEuX193ZWJnbEZyYW1lYnVmZmVyPVtdLFphPTA7Nj5aYTtaYSsrKXBhLl9fd2ViZ2xGcmFtZWJ1ZmZlcltaYV09Yi5jcmVhdGVGcmFtZWJ1ZmZlcigpO2Vsc2UgaWYocGEuX193ZWJnbEZyYW1lYnVmZmVyPWIuY3JlYXRlRnJhbWVidWZmZXIoKSxaYSlpZih1LmlzV2ViR0wyKXtwYS5fX3dlYmdsTXVsdGlzYW1wbGVkRnJhbWVidWZmZXI9Yi5jcmVhdGVGcmFtZWJ1ZmZlcigpO3BhLl9fd2ViZ2xDb2xvclJlbmRlcmJ1ZmZlcj1iLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpO2IuYmluZFJlbmRlcmJ1ZmZlcigzNjE2MSxwYS5fX3dlYmdsQ29sb3JSZW5kZXJidWZmZXIpOwpaYT13LmNvbnZlcnQoamEudGV4dHVyZS5mb3JtYXQpO3ZhciBpYj13LmNvbnZlcnQoamEudGV4dHVyZS50eXBlKTtaYT1VKFphLGliKTtpYj1MYShqYSk7Yi5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoMzYxNjEsaWIsWmEsamEud2lkdGgsamEuaGVpZ2h0KTtiLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxwYS5fX3dlYmdsTXVsdGlzYW1wbGVkRnJhbWVidWZmZXIpO2IuZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoMzYxNjAsMzYwNjQsMzYxNjEscGEuX193ZWJnbENvbG9yUmVuZGVyYnVmZmVyKTtiLmJpbmRSZW5kZXJidWZmZXIoMzYxNjEsbnVsbCk7amEuZGVwdGhCdWZmZXImJihwYS5fX3dlYmdsRGVwdGhSZW5kZXJidWZmZXI9Yi5jcmVhdGVSZW5kZXJidWZmZXIoKSxIYShwYS5fX3dlYmdsRGVwdGhSZW5kZXJidWZmZXIsamEsITApKTtiLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxudWxsKX1lbHNlIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogV2ViR0xNdWx0aXNhbXBsZVJlbmRlclRhcmdldCBjYW4gb25seSBiZSB1c2VkIHdpdGggV2ViR0wyLiIpOwppZihWYSl7aC5iaW5kVGV4dHVyZSgzNDA2Nyx5YS5fX3dlYmdsVGV4dHVyZSk7dmEoMzQwNjcsamEudGV4dHVyZSxUYSk7Zm9yKFphPTA7Nj5aYTtaYSsrKURhKHBhLl9fd2ViZ2xGcmFtZWJ1ZmZlcltaYV0samEsMzYwNjQsMzQwNjkrWmEpO1EoamEudGV4dHVyZSxUYSkmJlIoMzQwNjcsamEudGV4dHVyZSxqYS53aWR0aCxqYS5oZWlnaHQpO2guYmluZFRleHR1cmUoMzQwNjcsbnVsbCl9ZWxzZSBoLmJpbmRUZXh0dXJlKDM1NTMseWEuX193ZWJnbFRleHR1cmUpLHZhKDM1NTMsamEudGV4dHVyZSxUYSksRGEocGEuX193ZWJnbEZyYW1lYnVmZmVyLGphLDM2MDY0LDM1NTMpLFEoamEudGV4dHVyZSxUYSkmJlIoMzU1MyxqYS50ZXh0dXJlLGphLndpZHRoLGphLmhlaWdodCksaC5iaW5kVGV4dHVyZSgzNTUzLG51bGwpO2phLmRlcHRoQnVmZmVyJiZOYShqYSl9O3RoaXMudXBkYXRlUmVuZGVyVGFyZ2V0TWlwbWFwPWZ1bmN0aW9uKGphKXt2YXIgcGE9amEudGV4dHVyZSx5YT1JKGphKXx8CnUuaXNXZWJHTDI7aWYoUShwYSx5YSkpe3lhPWphLmlzV2ViR0xSZW5kZXJUYXJnZXRDdWJlPzM0MDY3OjM1NTM7dmFyIFZhPW4uZ2V0KHBhKS5fX3dlYmdsVGV4dHVyZTtoLmJpbmRUZXh0dXJlKHlhLFZhKTtSKHlhLHBhLGphLndpZHRoLGphLmhlaWdodCk7aC5iaW5kVGV4dHVyZSh5YSxudWxsKX19O3RoaXMudXBkYXRlTXVsdGlzYW1wbGVSZW5kZXJUYXJnZXQ9ZnVuY3Rpb24oamEpe2lmKGphLmlzV2ViR0xNdWx0aXNhbXBsZVJlbmRlclRhcmdldClpZih1LmlzV2ViR0wyKXt2YXIgcGE9bi5nZXQoamEpO2IuYmluZEZyYW1lYnVmZmVyKDM2MDA4LHBhLl9fd2ViZ2xNdWx0aXNhbXBsZWRGcmFtZWJ1ZmZlcik7Yi5iaW5kRnJhbWVidWZmZXIoMzYwMDkscGEuX193ZWJnbEZyYW1lYnVmZmVyKTtwYT1qYS53aWR0aDt2YXIgeWE9amEuaGVpZ2h0LFZhPTE2Mzg0O2phLmRlcHRoQnVmZmVyJiYoVmF8PTI1Nik7amEuc3RlbmNpbEJ1ZmZlciYmKFZhfD0xMDI0KTtiLmJsaXRGcmFtZWJ1ZmZlcigwLAowLHBhLHlhLDAsMCxwYSx5YSxWYSw5NzI4KX1lbHNlIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogV2ViR0xNdWx0aXNhbXBsZVJlbmRlclRhcmdldCBjYW4gb25seSBiZSB1c2VkIHdpdGggV2ViR0wyLiIpfTt0aGlzLnNhZmVTZXRUZXh0dXJlMkQ9ZnVuY3Rpb24oamEscGEpe2phJiZqYS5pc1dlYkdMUmVuZGVyVGFyZ2V0JiYoITE9PT1IYiYmKGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xUZXh0dXJlcy5zYWZlU2V0VGV4dHVyZTJEOiBkb24ndCB1c2UgcmVuZGVyIHRhcmdldHMgYXMgdGV4dHVyZXMuIFVzZSB0aGVpciAudGV4dHVyZSBwcm9wZXJ0eSBpbnN0ZWFkLiIpLEhiPSEwKSxqYT1qYS50ZXh0dXJlKTtpYShqYSxwYSl9O3RoaXMuc2FmZVNldFRleHR1cmVDdWJlPWZ1bmN0aW9uKGphLHBhKXtqYSYmamEuaXNXZWJHTFJlbmRlclRhcmdldEN1YmUmJighMT09PXFiJiYoY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFRleHR1cmVzLnNhZmVTZXRUZXh0dXJlQ3ViZTogZG9uJ3QgdXNlIGN1YmUgcmVuZGVyIHRhcmdldHMgYXMgdGV4dHVyZXMuIFVzZSB0aGVpciAudGV4dHVyZSBwcm9wZXJ0eSBpbnN0ZWFkLiIpLApxYj0hMCksamE9amEudGV4dHVyZSk7amEmJmphLmlzQ3ViZVRleHR1cmV8fEFycmF5LmlzQXJyYXkoamEuaW1hZ2UpJiY2PT09amEuaW1hZ2UubGVuZ3RoP3RhKGphLHBhKTpuYShqYSxwYSl9fWZ1bmN0aW9uIG5sKGIsZSxoKXtyZXR1cm57Y29udmVydDpmdW5jdGlvbihuKXtpZigxRTM9PT1uKXJldHVybiAxMDQ5NztpZigxMDAxPT09bilyZXR1cm4gMzMwNzE7aWYoMTAwMj09PW4pcmV0dXJuIDMzNjQ4O2lmKDEwMDM9PT1uKXJldHVybiA5NzI4O2lmKDEwMDQ9PT1uKXJldHVybiA5OTg0O2lmKDEwMDU9PT1uKXJldHVybiA5OTg2O2lmKDEwMDY9PT1uKXJldHVybiA5NzI5O2lmKDEwMDc9PT1uKXJldHVybiA5OTg1O2lmKDEwMDg9PT1uKXJldHVybiA5OTg3O2lmKDEwMDk9PT1uKXJldHVybiA1MTIxO2lmKDEwMTc9PT1uKXJldHVybiAzMjgxOTtpZigxMDE4PT09bilyZXR1cm4gMzI4MjA7aWYoMTAxOT09PW4pcmV0dXJuIDMzNjM1O2lmKDEwMTA9PT1uKXJldHVybiA1MTIwO2lmKDEwMTE9PT0KbilyZXR1cm4gNTEyMjtpZigxMDEyPT09bilyZXR1cm4gNTEyMztpZigxMDEzPT09bilyZXR1cm4gNTEyNDtpZigxMDE0PT09bilyZXR1cm4gNTEyNTtpZigxMDE1PT09bilyZXR1cm4gNTEyNjtpZigxMDE2PT09bil7aWYoaC5pc1dlYkdMMilyZXR1cm4gNTEzMTt2YXIgdT1lLmdldCgiT0VTX3RleHR1cmVfaGFsZl9mbG9hdCIpO2lmKG51bGwhPT11KXJldHVybiB1LkhBTEZfRkxPQVRfT0VTfWlmKDEwMjE9PT1uKXJldHVybiA2NDA2O2lmKDEwMjI9PT1uKXJldHVybiA2NDA3O2lmKDEwMjM9PT1uKXJldHVybiA2NDA4O2lmKDEwMjQ9PT1uKXJldHVybiA2NDA5O2lmKDEwMjU9PT1uKXJldHVybiA2NDEwO2lmKDEwMjY9PT1uKXJldHVybiA2NDAyO2lmKDEwMjc9PT1uKXJldHVybiAzNDA0MTtpZigxMDI4PT09bilyZXR1cm4gNjQwMztpZigxMDA9PT1uKXJldHVybiAzMjc3NDtpZigxMDE9PT1uKXJldHVybiAzMjc3ODtpZigxMDI9PT1uKXJldHVybiAzMjc3OTtpZigyMDA9PT1uKXJldHVybiAwOwppZigyMDE9PT1uKXJldHVybiAxO2lmKDIwMj09PW4pcmV0dXJuIDc2ODtpZigyMDM9PT1uKXJldHVybiA3Njk7aWYoMjA0PT09bilyZXR1cm4gNzcwO2lmKDIwNT09PW4pcmV0dXJuIDc3MTtpZigyMDY9PT1uKXJldHVybiA3NzI7aWYoMjA3PT09bilyZXR1cm4gNzczO2lmKDIwOD09PW4pcmV0dXJuIDc3NDtpZigyMDk9PT1uKXJldHVybiA3NzU7aWYoMjEwPT09bilyZXR1cm4gNzc2O2lmKDMzNzc2PT09bnx8MzM3Nzc9PT1ufHwzMzc3OD09PW58fDMzNzc5PT09bilpZih1PWUuZ2V0KCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0YyIpLG51bGwhPT11KXtpZigzMzc3Nj09PW4pcmV0dXJuIHUuQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVDtpZigzMzc3Nz09PW4pcmV0dXJuIHUuQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQ7aWYoMzM3Nzg9PT1uKXJldHVybiB1LkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfRVhUO2lmKDMzNzc5PT09bilyZXR1cm4gdS5DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0VYVH1pZigzNTg0MD09PQpufHwzNTg0MT09PW58fDM1ODQyPT09bnx8MzU4NDM9PT1uKWlmKHU9ZS5nZXQoIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9wdnJ0YyIpLG51bGwhPT11KXtpZigzNTg0MD09PW4pcmV0dXJuIHUuQ09NUFJFU1NFRF9SR0JfUFZSVENfNEJQUFYxX0lNRztpZigzNTg0MT09PW4pcmV0dXJuIHUuQ09NUFJFU1NFRF9SR0JfUFZSVENfMkJQUFYxX0lNRztpZigzNTg0Mj09PW4pcmV0dXJuIHUuQ09NUFJFU1NFRF9SR0JBX1BWUlRDXzRCUFBWMV9JTUc7aWYoMzU4NDM9PT1uKXJldHVybiB1LkNPTVBSRVNTRURfUkdCQV9QVlJUQ18yQlBQVjFfSU1HfWlmKDM2MTk2PT09biYmKHU9ZS5nZXQoIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9ldGMxIiksbnVsbCE9PXUpKXJldHVybiB1LkNPTVBSRVNTRURfUkdCX0VUQzFfV0VCR0w7aWYoMzc4MDg9PT1ufHwzNzgwOT09PW58fDM3ODEwPT09bnx8Mzc4MTE9PT1ufHwzNzgxMj09PW58fDM3ODEzPT09bnx8Mzc4MTQ9PT1ufHwzNzgxNT09PW58fDM3ODE2PT09Cm58fDM3ODE3PT09bnx8Mzc4MTg9PT1ufHwzNzgxOT09PW58fDM3ODIwPT09bnx8Mzc4MjE9PT1uKWlmKHU9ZS5nZXQoIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9hc3RjIiksbnVsbCE9PXUpcmV0dXJuIG47aWYoMTAzPT09bnx8MTA0PT09bil7aWYoaC5pc1dlYkdMMil7aWYoMTAzPT09bilyZXR1cm4gMzI3NzU7aWYoMTA0PT09bilyZXR1cm4gMzI3NzZ9dT1lLmdldCgiRVhUX2JsZW5kX21pbm1heCIpO2lmKG51bGwhPT11KXtpZigxMDM9PT1uKXJldHVybiB1Lk1JTl9FWFQ7aWYoMTA0PT09bilyZXR1cm4gdS5NQVhfRVhUfX1pZigxMDIwPT09bil7aWYoaC5pc1dlYkdMMilyZXR1cm4gMzQwNDI7dT1lLmdldCgiV0VCR0xfZGVwdGhfdGV4dHVyZSIpO2lmKG51bGwhPT11KXJldHVybiB1LlVOU0lHTkVEX0lOVF8yNF84X1dFQkdMfXJldHVybiAwfX19ZnVuY3Rpb24gTmUoKXtTLmNhbGwodGhpcyk7dGhpcy50eXBlPSJHcm91cCJ9ZnVuY3Rpb24gamQoKXtTLmNhbGwodGhpcyk7dGhpcy50eXBlPQoiQ2FtZXJhIjt0aGlzLm1hdHJpeFdvcmxkSW52ZXJzZT1uZXcgQzt0aGlzLnByb2plY3Rpb25NYXRyaXg9bmV3IEM7dGhpcy5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZT1uZXcgQ31mdW5jdGlvbiBjYyhiLGUsaCxuKXtqZC5jYWxsKHRoaXMpO3RoaXMudHlwZT0iUGVyc3BlY3RpdmVDYW1lcmEiO3RoaXMuZm92PXZvaWQgMCE9PWI/Yjo1MDt0aGlzLnpvb209MTt0aGlzLm5lYXI9dm9pZCAwIT09aD9oOi4xO3RoaXMuZmFyPXZvaWQgMCE9PW4/bjoyRTM7dGhpcy5mb2N1cz0xMDt0aGlzLmFzcGVjdD12b2lkIDAhPT1lP2U6MTt0aGlzLnZpZXc9bnVsbDt0aGlzLmZpbG1HYXVnZT0zNTt0aGlzLmZpbG1PZmZzZXQ9MDt0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX1mdW5jdGlvbiBQZihiKXtjYy5jYWxsKHRoaXMpO3RoaXMuY2FtZXJhcz1ifHxbXX1mdW5jdGlvbiBvbChiLGUsaCl7cGwuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKGUubWF0cml4V29ybGQpO3FsLnNldEZyb21NYXRyaXhQb3NpdGlvbihoLm1hdHJpeFdvcmxkKTsKdmFyIG49cGwuZGlzdGFuY2VUbyhxbCksdT1lLnByb2plY3Rpb25NYXRyaXguZWxlbWVudHMsdz1oLnByb2plY3Rpb25NYXRyaXguZWxlbWVudHMsej11WzE0XS8odVsxMF0tMSk7aD11WzE0XS8odVsxMF0rMSk7dmFyIEU9KHVbOV0rMSkvdVs1XSxIPSh1WzldLTEpL3VbNV0sST0odVs4XS0xKS91WzBdLE89KHdbOF0rMSkvd1swXTt1PXoqSTt3PXoqTztPPW4vKC1JK08pO0k9TyotSTtlLm1hdHJpeFdvcmxkLmRlY29tcG9zZShiLnBvc2l0aW9uLGIucXVhdGVybmlvbixiLnNjYWxlKTtiLnRyYW5zbGF0ZVgoSSk7Yi50cmFuc2xhdGVaKE8pO2IubWF0cml4V29ybGQuY29tcG9zZShiLnBvc2l0aW9uLGIucXVhdGVybmlvbixiLnNjYWxlKTtiLm1hdHJpeFdvcmxkSW52ZXJzZS5nZXRJbnZlcnNlKGIubWF0cml4V29ybGQpO2U9eitPO3o9aCtPO2IucHJvamVjdGlvbk1hdHJpeC5tYWtlUGVyc3BlY3RpdmUodS1JLHcrKG4tSSksRSpoL3oqZSxIKmgveiplLGUseil9ZnVuY3Rpb24gcmwoYil7ZnVuY3Rpb24gZSgpe3JldHVybiBudWxsIT09CnomJiEwPT09ei5pc1ByZXNlbnRpbmd9ZnVuY3Rpb24gaCgpe2lmKGUoKSl7dmFyIHNhPXouZ2V0RXllUGFyYW1ldGVycygibGVmdCIpLERhPXNhLnJlbmRlcldpZHRoKlI7c2E9c2EucmVuZGVySGVpZ2h0KlI7bmE9Yi5nZXRQaXhlbFJhdGlvKCk7Yi5nZXRTaXplKHRhKTtiLnNldERyYXdpbmdCdWZmZXJTaXplKDIqRGEsc2EsMSk7QmEuc3RhcnQoKX1lbHNlIHcuZW5hYmxlZCYmYi5zZXREcmF3aW5nQnVmZmVyU2l6ZSh0YS53aWR0aCx0YS5oZWlnaHQsbmEpLEJhLnN0b3AoKX1mdW5jdGlvbiBuKHNhKXtmb3IodmFyIERhPW5hdmlnYXRvci5nZXRHYW1lcGFkcyYmbmF2aWdhdG9yLmdldEdhbWVwYWRzKCksSGE9MCxLYT0wLE5hPURhLmxlbmd0aDtIYTxOYTtIYSsrKXt2YXIgTGE9RGFbSGFdO2lmKExhJiYoIkRheWRyZWFtIENvbnRyb2xsZXIiPT09TGEuaWR8fCJHZWFyIFZSIENvbnRyb2xsZXIiPT09TGEuaWR8fCJPY3VsdXMgR28gQ29udHJvbGxlciI9PT1MYS5pZHx8Ik9wZW5WUiBHYW1lcGFkIj09PQpMYS5pZHx8TGEuaWQuc3RhcnRzV2l0aCgiT2N1bHVzIFRvdWNoIil8fExhLmlkLnN0YXJ0c1dpdGgoIlNwYXRpYWwgQ29udHJvbGxlciIpKSl7aWYoS2E9PT1zYSlyZXR1cm4gTGE7S2ErK319fWZ1bmN0aW9uIHUoKXtmb3IodmFyIHNhPTA7c2E8SS5sZW5ndGg7c2ErKyl7dmFyIERhPUlbc2FdLEhhPW4oc2EpO2lmKHZvaWQgMCE9PUhhJiZ2b2lkIDAhPT1IYS5wb3NlKXtpZihudWxsPT09SGEucG9zZSlicmVhazt2YXIgS2E9SGEucG9zZTshMT09PUthLmhhc1Bvc2l0aW9uJiZEYS5wb3NpdGlvbi5zZXQoLjIsLS42LC0uMDUpO251bGwhPT1LYS5wb3NpdGlvbiYmRGEucG9zaXRpb24uZnJvbUFycmF5KEthLnBvc2l0aW9uKTtudWxsIT09S2Eub3JpZW50YXRpb24mJkRhLnF1YXRlcm5pb24uZnJvbUFycmF5KEthLm9yaWVudGF0aW9uKTtEYS5tYXRyaXguY29tcG9zZShEYS5wb3NpdGlvbixEYS5xdWF0ZXJuaW9uLERhLnNjYWxlKTtEYS5tYXRyaXgucHJlbXVsdGlwbHkoTyk7RGEubWF0cml4LmRlY29tcG9zZShEYS5wb3NpdGlvbiwKRGEucXVhdGVybmlvbixEYS5zY2FsZSk7RGEubWF0cml4V29ybGROZWVkc1VwZGF0ZT0hMDtEYS52aXNpYmxlPSEwO0thPSJEYXlkcmVhbSBDb250cm9sbGVyIj09PUhhLmlkPzA6MTt2YVtzYV0hPT1IYS5idXR0b25zW0thXS5wcmVzc2VkJiYodmFbc2FdPUhhLmJ1dHRvbnNbS2FdLnByZXNzZWQsITA9PT12YVtzYV0/RGEuZGlzcGF0Y2hFdmVudCh7dHlwZToic2VsZWN0c3RhcnQifSk6KERhLmRpc3BhdGNoRXZlbnQoe3R5cGU6InNlbGVjdGVuZCJ9KSxEYS5kaXNwYXRjaEV2ZW50KHt0eXBlOiJzZWxlY3QifSkpKX1lbHNlIERhLnZpc2libGU9ITF9fXZhciB3PXRoaXMsej1udWxsLEU9bnVsbCxIPW51bGwsST1bXSxPPW5ldyBDLFE9bmV3IEMsUj0xLFU9InN0YWdlIjsidW5kZWZpbmVkIiE9PXR5cGVvZiB3aW5kb3cmJiJWUkZyYW1lRGF0YSJpbiB3aW5kb3cmJihFPW5ldyB3aW5kb3cuVlJGcmFtZURhdGEsd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInZyZGlzcGxheXByZXNlbnRjaGFuZ2UiLApoLCExKSk7dmFyIFc9bmV3IEMsWj1uZXcgZixmYT1uZXcgZyxxYT1uZXcgY2M7cWEuYm91bmRzPW5ldyBtKDAsMCwuNSwxKTtxYS5sYXllcnMuZW5hYmxlKDEpO3ZhciByYT1uZXcgY2M7cmEuYm91bmRzPW5ldyBtKC41LDAsLjUsMSk7cmEubGF5ZXJzLmVuYWJsZSgyKTt2YXIgaWE9bmV3IFBmKFtxYSxyYV0pO2lhLmxheWVycy5lbmFibGUoMSk7aWEubGF5ZXJzLmVuYWJsZSgyKTt2YXIgdGE9bmV3IGQsbmEsdmE9W107dGhpcy5lbmFibGVkPSExO3RoaXMuZ2V0Q29udHJvbGxlcj1mdW5jdGlvbihzYSl7dmFyIERhPUlbc2FdO3ZvaWQgMD09PURhJiYoRGE9bmV3IE5lLERhLm1hdHJpeEF1dG9VcGRhdGU9ITEsRGEudmlzaWJsZT0hMSxJW3NhXT1EYSk7cmV0dXJuIERhfTt0aGlzLmdldERldmljZT1mdW5jdGlvbigpe3JldHVybiB6fTt0aGlzLnNldERldmljZT1mdW5jdGlvbihzYSl7dm9pZCAwIT09c2EmJih6PXNhKTtCYS5zZXRDb250ZXh0KHNhKX07dGhpcy5zZXRGcmFtZWJ1ZmZlclNjYWxlRmFjdG9yPQpmdW5jdGlvbihzYSl7Uj1zYX07dGhpcy5zZXRGcmFtZU9mUmVmZXJlbmNlVHlwZT1mdW5jdGlvbihzYSl7VT1zYX07dGhpcy5zZXRQb3NlVGFyZ2V0PWZ1bmN0aW9uKHNhKXt2b2lkIDAhPT1zYSYmKEg9c2EpfTt0aGlzLmdldENhbWVyYT1mdW5jdGlvbihzYSl7dmFyIERhPSJzdGFnZSI9PT1VPzEuNjowO2lmKCExPT09ZSgpKXJldHVybiBzYS5wb3NpdGlvbi5zZXQoMCxEYSwwKSxzYS5yb3RhdGlvbi5zZXQoMCwwLDApLHNhO3ouZGVwdGhOZWFyPXNhLm5lYXI7ei5kZXB0aEZhcj1zYS5mYXI7ei5nZXRGcmFtZURhdGEoRSk7aWYoInN0YWdlIj09PVUpe3ZhciBIYT16LnN0YWdlUGFyYW1ldGVycztIYT9PLmZyb21BcnJheShIYS5zaXR0aW5nVG9TdGFuZGluZ1RyYW5zZm9ybSk6Ty5tYWtlVHJhbnNsYXRpb24oMCxEYSwwKX1EYT1FLnBvc2U7SGE9bnVsbCE9PUg/SDpzYTtIYS5tYXRyaXguY29weShPKTtIYS5tYXRyaXguZGVjb21wb3NlKEhhLnBvc2l0aW9uLEhhLnF1YXRlcm5pb24sCkhhLnNjYWxlKTtudWxsIT09RGEub3JpZW50YXRpb24mJihaLmZyb21BcnJheShEYS5vcmllbnRhdGlvbiksSGEucXVhdGVybmlvbi5tdWx0aXBseShaKSk7bnVsbCE9PURhLnBvc2l0aW9uJiYoWi5zZXRGcm9tUm90YXRpb25NYXRyaXgoTyksZmEuZnJvbUFycmF5KERhLnBvc2l0aW9uKSxmYS5hcHBseVF1YXRlcm5pb24oWiksSGEucG9zaXRpb24uYWRkKGZhKSk7SGEudXBkYXRlTWF0cml4V29ybGQoKTtxYS5uZWFyPXNhLm5lYXI7cmEubmVhcj1zYS5uZWFyO3FhLmZhcj1zYS5mYXI7cmEuZmFyPXNhLmZhcjtxYS5tYXRyaXhXb3JsZEludmVyc2UuZnJvbUFycmF5KEUubGVmdFZpZXdNYXRyaXgpO3JhLm1hdHJpeFdvcmxkSW52ZXJzZS5mcm9tQXJyYXkoRS5yaWdodFZpZXdNYXRyaXgpO1EuZ2V0SW52ZXJzZShPKTsic3RhZ2UiPT09VSYmKHFhLm1hdHJpeFdvcmxkSW52ZXJzZS5tdWx0aXBseShRKSxyYS5tYXRyaXhXb3JsZEludmVyc2UubXVsdGlwbHkoUSkpO3NhPUhhLnBhcmVudDsKbnVsbCE9PXNhJiYoVy5nZXRJbnZlcnNlKHNhLm1hdHJpeFdvcmxkKSxxYS5tYXRyaXhXb3JsZEludmVyc2UubXVsdGlwbHkoVykscmEubWF0cml4V29ybGRJbnZlcnNlLm11bHRpcGx5KFcpKTtxYS5tYXRyaXhXb3JsZC5nZXRJbnZlcnNlKHFhLm1hdHJpeFdvcmxkSW52ZXJzZSk7cmEubWF0cml4V29ybGQuZ2V0SW52ZXJzZShyYS5tYXRyaXhXb3JsZEludmVyc2UpO3FhLnByb2plY3Rpb25NYXRyaXguZnJvbUFycmF5KEUubGVmdFByb2plY3Rpb25NYXRyaXgpO3JhLnByb2plY3Rpb25NYXRyaXguZnJvbUFycmF5KEUucmlnaHRQcm9qZWN0aW9uTWF0cml4KTtvbChpYSxxYSxyYSk7c2E9ei5nZXRMYXllcnMoKTtzYS5sZW5ndGgmJihzYT1zYVswXSxudWxsIT09c2EubGVmdEJvdW5kcyYmND09PXNhLmxlZnRCb3VuZHMubGVuZ3RoJiZxYS5ib3VuZHMuZnJvbUFycmF5KHNhLmxlZnRCb3VuZHMpLG51bGwhPT1zYS5yaWdodEJvdW5kcyYmND09PXNhLnJpZ2h0Qm91bmRzLmxlbmd0aCYmCnJhLmJvdW5kcy5mcm9tQXJyYXkoc2EucmlnaHRCb3VuZHMpKTt1KCk7cmV0dXJuIGlhfTt0aGlzLmdldFN0YW5kaW5nTWF0cml4PWZ1bmN0aW9uKCl7cmV0dXJuIE99O3RoaXMuaXNQcmVzZW50aW5nPWU7dmFyIEJhPW5ldyBHO3RoaXMuc2V0QW5pbWF0aW9uTG9vcD1mdW5jdGlvbihzYSl7QmEuc2V0QW5pbWF0aW9uTG9vcChzYSk7ZSgpJiZCYS5zdGFydCgpfTt0aGlzLnN1Ym1pdEZyYW1lPWZ1bmN0aW9uKCl7ZSgpJiZ6LnN1Ym1pdEZyYW1lKCl9O3RoaXMuZGlzcG9zZT1mdW5jdGlvbigpeyJ1bmRlZmluZWQiIT09dHlwZW9mIHdpbmRvdyYmd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInZyZGlzcGxheXByZXNlbnRjaGFuZ2UiLGgpfX1mdW5jdGlvbiBLbyhiKXtmdW5jdGlvbiBlKCl7cmV0dXJuIG51bGwhPT1FJiZudWxsIT09SX1mdW5jdGlvbiBoKGlhKXt2YXIgdGE9UltVLmluZGV4T2YoaWEuaW5wdXRTb3VyY2UpXTt0YSYmdGEuZGlzcGF0Y2hFdmVudCh7dHlwZTppYS50eXBlfSl9CmZ1bmN0aW9uIG4oKXtiLnNldEZyYW1lYnVmZmVyKG51bGwpO2Iuc2V0UmVuZGVyVGFyZ2V0KGIuZ2V0UmVuZGVyVGFyZ2V0KCkpO3JhLnN0b3AoKX1mdW5jdGlvbiB1KGlhLHRhKXtudWxsPT09dGE/aWEubWF0cml4V29ybGQuY29weShpYS5tYXRyaXgpOmlhLm1hdHJpeFdvcmxkLm11bHRpcGx5TWF0cmljZXModGEubWF0cml4V29ybGQsaWEubWF0cml4KTtpYS5tYXRyaXhXb3JsZEludmVyc2UuZ2V0SW52ZXJzZShpYS5tYXRyaXhXb3JsZCl9dmFyIHc9Yi5jb250ZXh0LHo9bnVsbCxFPW51bGwsSD0xLEk9bnVsbCxPPSJzdGFnZSIsUT1udWxsLFI9W10sVT1bXSxXPW5ldyBjYztXLmxheWVycy5lbmFibGUoMSk7Vy52aWV3cG9ydD1uZXcgbTt2YXIgWj1uZXcgY2M7Wi5sYXllcnMuZW5hYmxlKDIpO1oudmlld3BvcnQ9bmV3IG07dmFyIGZhPW5ldyBQZihbVyxaXSk7ZmEubGF5ZXJzLmVuYWJsZSgxKTtmYS5sYXllcnMuZW5hYmxlKDIpO3RoaXMuZW5hYmxlZD0hMTt0aGlzLmdldENvbnRyb2xsZXI9CmZ1bmN0aW9uKGlhKXt2YXIgdGE9UltpYV07dm9pZCAwPT09dGEmJih0YT1uZXcgTmUsdGEubWF0cml4QXV0b1VwZGF0ZT0hMSx0YS52aXNpYmxlPSExLFJbaWFdPXRhKTtyZXR1cm4gdGF9O3RoaXMuZ2V0RGV2aWNlPWZ1bmN0aW9uKCl7cmV0dXJuIHp9O3RoaXMuc2V0RGV2aWNlPWZ1bmN0aW9uKGlhKXt2b2lkIDAhPT1pYSYmKHo9aWEpO2lhIGluc3RhbmNlb2YgWFJEZXZpY2UmJncuc2V0Q29tcGF0aWJsZVhSRGV2aWNlKGlhKX07dGhpcy5zZXRGcmFtZWJ1ZmZlclNjYWxlRmFjdG9yPWZ1bmN0aW9uKGlhKXtIPWlhfTt0aGlzLnNldEZyYW1lT2ZSZWZlcmVuY2VUeXBlPWZ1bmN0aW9uKGlhKXtPPWlhfTt0aGlzLnNldFNlc3Npb249ZnVuY3Rpb24oaWEpe0U9aWE7bnVsbCE9PUUmJihFLmFkZEV2ZW50TGlzdGVuZXIoInNlbGVjdCIsaCksRS5hZGRFdmVudExpc3RlbmVyKCJzZWxlY3RzdGFydCIsaCksRS5hZGRFdmVudExpc3RlbmVyKCJzZWxlY3RlbmQiLGgpLEUuYWRkRXZlbnRMaXN0ZW5lcigiZW5kIiwKbiksRS5iYXNlTGF5ZXI9bmV3IFhSV2ViR0xMYXllcihFLHcse2ZyYW1lYnVmZmVyU2NhbGVGYWN0b3I6SH0pLEUucmVxdWVzdEZyYW1lT2ZSZWZlcmVuY2UoTykudGhlbihmdW5jdGlvbih0YSl7ST10YTtiLnNldEZyYW1lYnVmZmVyKEUuYmFzZUxheWVyLmZyYW1lYnVmZmVyKTtyYS5zZXRDb250ZXh0KEUpO3JhLnN0YXJ0KCl9KSxVPUUuZ2V0SW5wdXRTb3VyY2VzKCksRS5hZGRFdmVudExpc3RlbmVyKCJpbnB1dHNvdXJjZXNjaGFuZ2UiLGZ1bmN0aW9uKCl7VT1FLmdldElucHV0U291cmNlcygpO2NvbnNvbGUubG9nKFUpO2Zvcih2YXIgdGE9MDt0YTxSLmxlbmd0aDt0YSsrKVJbdGFdLnVzZXJEYXRhLmlucHV0U291cmNlPVVbdGFdfSkpfTt0aGlzLmdldENhbWVyYT1mdW5jdGlvbihpYSl7aWYoZSgpKXt2YXIgdGE9aWEucGFyZW50LG5hPWZhLmNhbWVyYXM7dShmYSx0YSk7Zm9yKHZhciB2YT0wO3ZhPG5hLmxlbmd0aDt2YSsrKXUobmFbdmFdLHRhKTtpYS5tYXRyaXhXb3JsZC5jb3B5KGZhLm1hdHJpeFdvcmxkKTsKaWE9aWEuY2hpbGRyZW47dmE9MDtmb3IodGE9aWEubGVuZ3RoO3ZhPHRhO3ZhKyspaWFbdmFdLnVwZGF0ZU1hdHJpeFdvcmxkKCEwKTtvbChmYSxXLFopO3JldHVybiBmYX1yZXR1cm4gaWF9O3RoaXMuaXNQcmVzZW50aW5nPWU7dmFyIHFhPW51bGwscmE9bmV3IEc7cmEuc2V0QW5pbWF0aW9uTG9vcChmdW5jdGlvbihpYSx0YSl7UT10YS5nZXREZXZpY2VQb3NlKEkpO2lmKG51bGwhPT1RKWZvcih2YXIgbmE9RS5iYXNlTGF5ZXIsdmE9dGEudmlld3MsQmE9MDtCYTx2YS5sZW5ndGg7QmErKyl7dmFyIHNhPXZhW0JhXSxEYT1uYS5nZXRWaWV3cG9ydChzYSksSGE9US5nZXRWaWV3TWF0cml4KHNhKSxLYT1mYS5jYW1lcmFzW0JhXTtLYS5tYXRyaXguZnJvbUFycmF5KEhhKS5nZXRJbnZlcnNlKEthLm1hdHJpeCk7S2EucHJvamVjdGlvbk1hdHJpeC5mcm9tQXJyYXkoc2EucHJvamVjdGlvbk1hdHJpeCk7S2Eudmlld3BvcnQuc2V0KERhLngsRGEueSxEYS53aWR0aCxEYS5oZWlnaHQpOzA9PT0KQmEmJmZhLm1hdHJpeC5jb3B5KEthLm1hdHJpeCl9Zm9yKEJhPTA7QmE8Ui5sZW5ndGg7QmErKyl7bmE9UltCYV07aWYodmE9VVtCYV0paWYodmE9dGEuZ2V0SW5wdXRQb3NlKHZhLEkpLG51bGwhPT12YSl7InRhcmdldFJheSJpbiB2YT9uYS5tYXRyaXguZWxlbWVudHM9dmEudGFyZ2V0UmF5LnRyYW5zZm9ybU1hdHJpeDoicG9pbnRlck1hdHJpeCJpbiB2YSYmKG5hLm1hdHJpeC5lbGVtZW50cz12YS5wb2ludGVyTWF0cml4KTtuYS5tYXRyaXguZGVjb21wb3NlKG5hLnBvc2l0aW9uLG5hLnJvdGF0aW9uLG5hLnNjYWxlKTtuYS52aXNpYmxlPSEwO2NvbnRpbnVlfW5hLnZpc2libGU9ITF9cWEmJnFhKGlhKX0pO3RoaXMuc2V0QW5pbWF0aW9uTG9vcD1mdW5jdGlvbihpYSl7cWE9aWF9O3RoaXMuZGlzcG9zZT1mdW5jdGlvbigpe307dGhpcy5nZXRTdGFuZGluZ01hdHJpeD1mdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViWFJNYW5hZ2VyOiBnZXRTdGFuZGluZ01hdHJpeCgpIGlzIG5vIGxvbmdlciBuZWVkZWQuIik7CnJldHVybiBuZXcgQ307dGhpcy5zdWJtaXRGcmFtZT1mdW5jdGlvbigpe319ZnVuY3Rpb24gdGkoYil7dmFyIGU7ZnVuY3Rpb24gaCgpe3JldHVybiBudWxsPT09T2E/UmI6MX1mdW5jdGlvbiBuKCl7VmI9bmV3IGZjKFlhKTt1Yz1uZXcgaGQoWWEsVmIsYik7dWMuaXNXZWJHTDJ8fChWYi5nZXQoIldFQkdMX2RlcHRoX3RleHR1cmUiKSxWYi5nZXQoIk9FU190ZXh0dXJlX2Zsb2F0IiksVmIuZ2V0KCJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0IiksVmIuZ2V0KCJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0X2xpbmVhciIpLFZiLmdldCgiT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIiksVmIuZ2V0KCJPRVNfZWxlbWVudF9pbmRleF91aW50IiksVmIuZ2V0KCJBTkdMRV9pbnN0YW5jZWRfYXJyYXlzIikpO1ZiLmdldCgiT0VTX3RleHR1cmVfZmxvYXRfbGluZWFyIik7a2Q9bmV3IG5sKFlhLFZiLHVjKTtCYj1uZXcgSW8oWWEsVmIsa2QsdWMpO0JiLnNjaXNzb3IodmIuY29weSh2ZCkubXVsdGlwbHlTY2FsYXIoUmIpKTsKQmIudmlld3BvcnQocGIuY29weSh3ZCkubXVsdGlwbHlTY2FsYXIoUmIpKTtSZD1uZXcgamMoWWEpO3ZjPW5ldyBBbztQYz1uZXcgSm8oWWEsVmIsQmIsdmMsdWMsa2QsUmQpO2JoPW5ldyBLKFlhKTt1aT1uZXcgQWEoWWEsYmgsUmQpO09lPW5ldyAkZyh1aSxSZCk7c2w9bmV3IE5kKFlhKTtnZT1uZXcgem8oaWIsVmIsdWMsUGMpO2NoPW5ldyBEbztQZT1uZXcgSG87U2Q9bmV3IENjKGliLEJiLE9lLHBhKTt0bD1uZXcgWmIoWWEsVmIsUmQsdWMpO3VsPW5ldyBNYihZYSxWYixSZCx1Yyk7UmQucHJvZ3JhbXM9Z2UucHJvZ3JhbXM7aWIuY29udGV4dD1ZYTtpYi5jYXBhYmlsaXRpZXM9dWM7aWIuZXh0ZW5zaW9ucz1WYjtpYi5wcm9wZXJ0aWVzPXZjO2liLnJlbmRlckxpc3RzPWNoO2liLnN0YXRlPUJiO2liLmluZm89UmR9ZnVuY3Rpb24gdShWKXtWLnByZXZlbnREZWZhdWx0KCk7Y29uc29sZS5sb2coIlRIUkVFLldlYkdMUmVuZGVyZXI6IENvbnRleHQgTG9zdC4iKTttYT0hMH1mdW5jdGlvbiB3KCl7Y29uc29sZS5sb2coIlRIUkVFLldlYkdMUmVuZGVyZXI6IENvbnRleHQgUmVzdG9yZWQuIik7Cm1hPSExO24oKX1mdW5jdGlvbiB6KFYpe1Y9Vi50YXJnZXQ7Vi5yZW1vdmVFdmVudExpc3RlbmVyKCJkaXNwb3NlIix6KTtFKFYpfWZ1bmN0aW9uIEUoVil7SChWKTt2Yy5yZW1vdmUoVil9ZnVuY3Rpb24gSChWKXt2YXIgZGE9dmMuZ2V0KFYpLnByb2dyYW07Vi5wcm9ncmFtPXZvaWQgMDt2b2lkIDAhPT1kYSYmZ2UucmVsZWFzZVByb2dyYW0oZGEpfWZ1bmN0aW9uIEkoVixkYSl7Vi5yZW5kZXIoZnVuY3Rpb24ob2Epe2liLnJlbmRlckJ1ZmZlckltbWVkaWF0ZShvYSxkYSl9KX1mdW5jdGlvbiBPKFYsZGEsb2Epe2lmKG9hJiZvYS5pc0luc3RhbmNlZEJ1ZmZlckdlb21ldHJ5JiYhdWMuaXNXZWJHTDImJm51bGw9PT1WYi5nZXQoIkFOR0xFX2luc3RhbmNlZF9hcnJheXMiKSljb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFJlbmRlcmVyLnNldHVwVmVydGV4QXR0cmlidXRlczogdXNpbmcgVEhSRUUuSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnkgYnV0IGhhcmR3YXJlIGRvZXMgbm90IHN1cHBvcnQgZXh0ZW5zaW9uIEFOR0xFX2luc3RhbmNlZF9hcnJheXMuIik7CmVsc2V7QmIuaW5pdEF0dHJpYnV0ZXMoKTt2YXIgTWE9b2EuYXR0cmlidXRlcztkYT1kYS5nZXRBdHRyaWJ1dGVzKCk7Vj1WLmRlZmF1bHRBdHRyaWJ1dGVWYWx1ZXM7Zm9yKHZhciBXYSBpbiBkYSl7dmFyIFJhPWRhW1dhXTtpZigwPD1SYSl7dmFyIFhhPU1hW1dhXTtpZih2b2lkIDAhPT1YYSl7dmFyICRhPVhhLm5vcm1hbGl6ZWQsRmI9WGEuaXRlbVNpemUscmI9YmguZ2V0KFhhKTtpZih2b2lkIDAhPT1yYil7dmFyIGdiPXJiLmJ1ZmZlcixsZD1yYi50eXBlO3JiPXJiLmJ5dGVzUGVyRWxlbWVudDtpZihYYS5pc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlKXt2YXIgUWM9WGEuZGF0YSxUZD1RYy5zdHJpZGU7WGE9WGEub2Zmc2V0O1FjJiZRYy5pc0luc3RhbmNlZEludGVybGVhdmVkQnVmZmVyPyhCYi5lbmFibGVBdHRyaWJ1dGVBbmREaXZpc29yKFJhLFFjLm1lc2hQZXJBdHRyaWJ1dGUpLHZvaWQgMD09PW9hLm1heEluc3RhbmNlZENvdW50JiYob2EubWF4SW5zdGFuY2VkQ291bnQ9ClFjLm1lc2hQZXJBdHRyaWJ1dGUqUWMuY291bnQpKTpCYi5lbmFibGVBdHRyaWJ1dGUoUmEpO1lhLmJpbmRCdWZmZXIoMzQ5NjIsZ2IpO1lhLnZlcnRleEF0dHJpYlBvaW50ZXIoUmEsRmIsbGQsJGEsVGQqcmIsWGEqcmIpfWVsc2UgWGEuaXNJbnN0YW5jZWRCdWZmZXJBdHRyaWJ1dGU/KEJiLmVuYWJsZUF0dHJpYnV0ZUFuZERpdmlzb3IoUmEsWGEubWVzaFBlckF0dHJpYnV0ZSksdm9pZCAwPT09b2EubWF4SW5zdGFuY2VkQ291bnQmJihvYS5tYXhJbnN0YW5jZWRDb3VudD1YYS5tZXNoUGVyQXR0cmlidXRlKlhhLmNvdW50KSk6QmIuZW5hYmxlQXR0cmlidXRlKFJhKSxZYS5iaW5kQnVmZmVyKDM0OTYyLGdiKSxZYS52ZXJ0ZXhBdHRyaWJQb2ludGVyKFJhLEZiLGxkLCRhLDAsMCl9fWVsc2UgaWYodm9pZCAwIT09ViYmKCRhPVZbV2FdLHZvaWQgMCE9PSRhKSlzd2l0Y2goJGEubGVuZ3RoKXtjYXNlIDI6WWEudmVydGV4QXR0cmliMmZ2KFJhLCRhKTticmVhaztjYXNlIDM6WWEudmVydGV4QXR0cmliM2Z2KFJhLAokYSk7YnJlYWs7Y2FzZSA0OllhLnZlcnRleEF0dHJpYjRmdihSYSwkYSk7YnJlYWs7ZGVmYXVsdDpZYS52ZXJ0ZXhBdHRyaWIxZnYoUmEsJGEpfX19QmIuZGlzYWJsZVVudXNlZEF0dHJpYnV0ZXMoKX19ZnVuY3Rpb24gUShWLGRhLG9hLE1hKXtpZighMSE9PVYudmlzaWJsZSl7aWYoVi5sYXllcnMudGVzdChkYS5sYXllcnMpKWlmKFYuaXNHcm91cClvYT1WLnJlbmRlck9yZGVyO2Vsc2UgaWYoVi5pc0xpZ2h0KVRhLnB1c2hMaWdodChWKSxWLmNhc3RTaGFkb3cmJlRhLnB1c2hTaGFkb3coVik7ZWxzZSBpZihWLmlzU3ByaXRlKXtpZighVi5mcnVzdHVtQ3VsbGVkfHx2aS5pbnRlcnNlY3RzU3ByaXRlKFYpKXtNYSYmVWQuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKFYubWF0cml4V29ybGQpLmFwcGx5TWF0cml4NChRZik7dmFyIFdhPU9lLnVwZGF0ZShWKSxSYT1WLm1hdGVyaWFsO1JhLnZpc2libGUmJlphLnB1c2goVixXYSxSYSxvYSxVZC56LG51bGwpfX1lbHNlIGlmKFYuaXNJbW1lZGlhdGVSZW5kZXJPYmplY3QpTWEmJgpVZC5zZXRGcm9tTWF0cml4UG9zaXRpb24oVi5tYXRyaXhXb3JsZCkuYXBwbHlNYXRyaXg0KFFmKSxaYS5wdXNoKFYsbnVsbCxWLm1hdGVyaWFsLG9hLFVkLnosbnVsbCk7ZWxzZSBpZihWLmlzTWVzaHx8Vi5pc0xpbmV8fFYuaXNQb2ludHMpaWYoVi5pc1NraW5uZWRNZXNoJiZWLnNrZWxldG9uLnVwZGF0ZSgpLCFWLmZydXN0dW1DdWxsZWR8fHZpLmludGVyc2VjdHNPYmplY3QoVikpaWYoTWEmJlVkLnNldEZyb21NYXRyaXhQb3NpdGlvbihWLm1hdHJpeFdvcmxkKS5hcHBseU1hdHJpeDQoUWYpLFdhPU9lLnVwZGF0ZShWKSxSYT1WLm1hdGVyaWFsLEFycmF5LmlzQXJyYXkoUmEpKWZvcih2YXIgWGE9V2EuZ3JvdXBzLCRhPTAsRmI9WGEubGVuZ3RoOyRhPEZiOyRhKyspe3ZhciByYj1YYVskYV0sZ2I9UmFbcmIubWF0ZXJpYWxJbmRleF07Z2ImJmdiLnZpc2libGUmJlphLnB1c2goVixXYSxnYixvYSxVZC56LHJiKX1lbHNlIFJhLnZpc2libGUmJlphLnB1c2goVixXYSxSYSxvYSxVZC56LApudWxsKTtWPVYuY2hpbGRyZW47JGE9MDtmb3IoRmI9Vi5sZW5ndGg7JGE8RmI7JGErKylRKFZbJGFdLGRhLG9hLE1hKX19ZnVuY3Rpb24gUihWLGRhLG9hLE1hKXtmb3IodmFyIFdhPTAsUmE9Vi5sZW5ndGg7V2E8UmE7V2ErKyl7dmFyIFhhPVZbV2FdLCRhPVhhLm9iamVjdCxGYj1YYS5nZW9tZXRyeSxyYj12b2lkIDA9PT1NYT9YYS5tYXRlcmlhbDpNYTtYYT1YYS5ncm91cDtpZihvYS5pc0FycmF5Q2FtZXJhKXtuYj1vYTtmb3IodmFyIGdiPW9hLmNhbWVyYXMsbGQ9MCxRYz1nYi5sZW5ndGg7bGQ8UWM7bGQrKyl7dmFyIFRkPWdiW2xkXTtpZigkYS5sYXllcnMudGVzdChUZC5sYXllcnMpKXtpZigidmlld3BvcnQiaW4gVGQpQmIudmlld3BvcnQocGIuY29weShUZC52aWV3cG9ydCkpO2Vsc2V7dmFyIGRoPVRkLmJvdW5kcztCYi52aWV3cG9ydChwYi5zZXQoZGgueCpPYixkaC55KldiLGRoLnoqT2IsZGgudypXYikubXVsdGlwbHlTY2FsYXIoUmIpKX1UYS5zZXR1cExpZ2h0cyhUZCk7ClUoJGEsZGEsVGQsRmIscmIsWGEpfX19ZWxzZSBuYj1udWxsLFUoJGEsZGEsb2EsRmIscmIsWGEpfX1mdW5jdGlvbiBVKFYsZGEsb2EsTWEsV2EsUmEpe1Yub25CZWZvcmVSZW5kZXIoaWIsZGEsb2EsTWEsV2EsUmEpO1RhPVBlLmdldChkYSxuYnx8b2EpO1YubW9kZWxWaWV3TWF0cml4Lm11bHRpcGx5TWF0cmljZXMob2EubWF0cml4V29ybGRJbnZlcnNlLFYubWF0cml4V29ybGQpO1Yubm9ybWFsTWF0cml4LmdldE5vcm1hbE1hdHJpeChWLm1vZGVsVmlld01hdHJpeCk7Vi5pc0ltbWVkaWF0ZVJlbmRlck9iamVjdD8oQmIuc2V0TWF0ZXJpYWwoV2EpLE1hPVoob2EsZGEuZm9nLFdhLFYpLEtiPWU9bnVsbCxsYj0hMSxJKFYsTWEpKTppYi5yZW5kZXJCdWZmZXJEaXJlY3Qob2EsZGEuZm9nLE1hLFdhLFYsUmEpO1RhPVBlLmdldChkYSxuYnx8b2EpfWZ1bmN0aW9uIFcoVixkYSxvYSl7dmFyIE1hPXZjLmdldChWKSxXYT1UYS5zdGF0ZS5saWdodHMsUmE9TWEubGlnaHRzSGFzaCxYYT1XYS5zdGF0ZS5oYXNoOwpvYT1nZS5nZXRQYXJhbWV0ZXJzKFYsV2Euc3RhdGUsVGEuc3RhdGUuc2hhZG93c0FycmF5LGRhLFJjLm51bVBsYW5lcyxSYy5udW1JbnRlcnNlY3Rpb24sb2EpO3ZhciAkYT1nZS5nZXRQcm9ncmFtQ29kZShWLG9hKSxGYj1NYS5wcm9ncmFtLHJiPSEwO2lmKHZvaWQgMD09PUZiKVYuYWRkRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIseik7ZWxzZSBpZihGYi5jb2RlIT09JGEpSChWKTtlbHNle2lmKFJhLnN0YXRlSUQhPT1YYS5zdGF0ZUlEfHxSYS5kaXJlY3Rpb25hbExlbmd0aCE9PVhhLmRpcmVjdGlvbmFsTGVuZ3RofHxSYS5wb2ludExlbmd0aCE9PVhhLnBvaW50TGVuZ3RofHxSYS5zcG90TGVuZ3RoIT09WGEuc3BvdExlbmd0aHx8UmEucmVjdEFyZWFMZW5ndGghPT1YYS5yZWN0QXJlYUxlbmd0aHx8UmEuaGVtaUxlbmd0aCE9PVhhLmhlbWlMZW5ndGh8fFJhLnNoYWRvd3NMZW5ndGghPT1YYS5zaGFkb3dzTGVuZ3RoKVJhLnN0YXRlSUQ9WGEuc3RhdGVJRCxSYS5kaXJlY3Rpb25hbExlbmd0aD0KWGEuZGlyZWN0aW9uYWxMZW5ndGgsUmEucG9pbnRMZW5ndGg9WGEucG9pbnRMZW5ndGgsUmEuc3BvdExlbmd0aD1YYS5zcG90TGVuZ3RoLFJhLnJlY3RBcmVhTGVuZ3RoPVhhLnJlY3RBcmVhTGVuZ3RoLFJhLmhlbWlMZW5ndGg9WGEuaGVtaUxlbmd0aCxSYS5zaGFkb3dzTGVuZ3RoPVhhLnNoYWRvd3NMZW5ndGg7ZWxzZSBpZih2b2lkIDAhPT1vYS5zaGFkZXJJRClyZXR1cm47cmI9ITF9cmImJihvYS5zaGFkZXJJRD8oJGE9aWRbb2Euc2hhZGVySURdLE1hLnNoYWRlcj17bmFtZTpWLnR5cGUsdW5pZm9ybXM6RigkYS51bmlmb3JtcyksdmVydGV4U2hhZGVyOiRhLnZlcnRleFNoYWRlcixmcmFnbWVudFNoYWRlcjokYS5mcmFnbWVudFNoYWRlcn0pOk1hLnNoYWRlcj17bmFtZTpWLnR5cGUsdW5pZm9ybXM6Vi51bmlmb3Jtcyx2ZXJ0ZXhTaGFkZXI6Vi52ZXJ0ZXhTaGFkZXIsZnJhZ21lbnRTaGFkZXI6Vi5mcmFnbWVudFNoYWRlcn0sJGE9Z2UuZ2V0UHJvZ3JhbUNvZGUoVixvYSksRmI9CmdlLmFjcXVpcmVQcm9ncmFtKFYsTWEuc2hhZGVyLG9hLCRhKSxNYS5wcm9ncmFtPUZiLFYucHJvZ3JhbT1GYik7b2E9RmIuZ2V0QXR0cmlidXRlcygpO2lmKFYubW9ycGhUYXJnZXRzKWZvcigkYT1WLm51bVN1cHBvcnRlZE1vcnBoVGFyZ2V0cz0wOyRhPGliLm1heE1vcnBoVGFyZ2V0czskYSsrKTA8PW9hWyJtb3JwaFRhcmdldCIrJGFdJiZWLm51bVN1cHBvcnRlZE1vcnBoVGFyZ2V0cysrO2lmKFYubW9ycGhOb3JtYWxzKWZvcigkYT1WLm51bVN1cHBvcnRlZE1vcnBoTm9ybWFscz0wOyRhPGliLm1heE1vcnBoTm9ybWFsczskYSsrKTA8PW9hWyJtb3JwaE5vcm1hbCIrJGFdJiZWLm51bVN1cHBvcnRlZE1vcnBoTm9ybWFscysrO29hPU1hLnNoYWRlci51bmlmb3JtcztpZighVi5pc1NoYWRlck1hdGVyaWFsJiYhVi5pc1Jhd1NoYWRlck1hdGVyaWFsfHwhMD09PVYuY2xpcHBpbmcpTWEubnVtQ2xpcHBpbmdQbGFuZXM9UmMubnVtUGxhbmVzLE1hLm51bUludGVyc2VjdGlvbj1SYy5udW1JbnRlcnNlY3Rpb24sCm9hLmNsaXBwaW5nUGxhbmVzPVJjLnVuaWZvcm07TWEuZm9nPWRhO3ZvaWQgMD09PVJhJiYoTWEubGlnaHRzSGFzaD1SYT17fSk7UmEuc3RhdGVJRD1YYS5zdGF0ZUlEO1JhLmRpcmVjdGlvbmFsTGVuZ3RoPVhhLmRpcmVjdGlvbmFsTGVuZ3RoO1JhLnBvaW50TGVuZ3RoPVhhLnBvaW50TGVuZ3RoO1JhLnNwb3RMZW5ndGg9WGEuc3BvdExlbmd0aDtSYS5yZWN0QXJlYUxlbmd0aD1YYS5yZWN0QXJlYUxlbmd0aDtSYS5oZW1pTGVuZ3RoPVhhLmhlbWlMZW5ndGg7UmEuc2hhZG93c0xlbmd0aD1YYS5zaGFkb3dzTGVuZ3RoO1YubGlnaHRzJiYob2EuYW1iaWVudExpZ2h0Q29sb3IudmFsdWU9V2Euc3RhdGUuYW1iaWVudCxvYS5saWdodFByb2JlLnZhbHVlPVdhLnN0YXRlLnByb2JlLG9hLmRpcmVjdGlvbmFsTGlnaHRzLnZhbHVlPVdhLnN0YXRlLmRpcmVjdGlvbmFsLG9hLnNwb3RMaWdodHMudmFsdWU9V2Euc3RhdGUuc3BvdCxvYS5yZWN0QXJlYUxpZ2h0cy52YWx1ZT1XYS5zdGF0ZS5yZWN0QXJlYSwKb2EucG9pbnRMaWdodHMudmFsdWU9V2Euc3RhdGUucG9pbnQsb2EuaGVtaXNwaGVyZUxpZ2h0cy52YWx1ZT1XYS5zdGF0ZS5oZW1pLG9hLmRpcmVjdGlvbmFsU2hhZG93TWFwLnZhbHVlPVdhLnN0YXRlLmRpcmVjdGlvbmFsU2hhZG93TWFwLG9hLmRpcmVjdGlvbmFsU2hhZG93TWF0cml4LnZhbHVlPVdhLnN0YXRlLmRpcmVjdGlvbmFsU2hhZG93TWF0cml4LG9hLnNwb3RTaGFkb3dNYXAudmFsdWU9V2Euc3RhdGUuc3BvdFNoYWRvd01hcCxvYS5zcG90U2hhZG93TWF0cml4LnZhbHVlPVdhLnN0YXRlLnNwb3RTaGFkb3dNYXRyaXgsb2EucG9pbnRTaGFkb3dNYXAudmFsdWU9V2Euc3RhdGUucG9pbnRTaGFkb3dNYXAsb2EucG9pbnRTaGFkb3dNYXRyaXgudmFsdWU9V2Euc3RhdGUucG9pbnRTaGFkb3dNYXRyaXgpO1Y9TWEucHJvZ3JhbS5nZXRVbmlmb3JtcygpO1Y9T2Quc2VxV2l0aFZhbHVlKFYuc2VxLG9hKTtNYS51bmlmb3Jtc0xpc3Q9Vn1mdW5jdGlvbiBaKFYsZGEsb2EsTWEpe1BjLnJlc2V0VGV4dHVyZVVuaXRzKCk7CnZhciBXYT12Yy5nZXQob2EpLFJhPVdhLmxpZ2h0c0hhc2gsWGE9VGEuc3RhdGUubGlnaHRzLnN0YXRlLmhhc2g7ZWgmJih3aXx8ViE9PVFhKSYmUmMuc2V0U3RhdGUob2EuY2xpcHBpbmdQbGFuZXMsb2EuY2xpcEludGVyc2VjdGlvbixvYS5jbGlwU2hhZG93cyxWLFdhLFY9PT1RYSYmb2EuaWQ9PT1hYik7ITE9PT1vYS5uZWVkc1VwZGF0ZSYmKHZvaWQgMD09PVdhLnByb2dyYW0/b2EubmVlZHNVcGRhdGU9ITA6b2EuZm9nJiZXYS5mb2chPT1kYT9vYS5uZWVkc1VwZGF0ZT0hMDohb2EubGlnaHRzfHxSYS5zdGF0ZUlEPT09WGEuc3RhdGVJRCYmUmEuZGlyZWN0aW9uYWxMZW5ndGg9PT1YYS5kaXJlY3Rpb25hbExlbmd0aCYmUmEucG9pbnRMZW5ndGg9PT1YYS5wb2ludExlbmd0aCYmUmEuc3BvdExlbmd0aD09PVhhLnNwb3RMZW5ndGgmJlJhLnJlY3RBcmVhTGVuZ3RoPT09WGEucmVjdEFyZWFMZW5ndGgmJlJhLmhlbWlMZW5ndGg9PT1YYS5oZW1pTGVuZ3RoJiZSYS5zaGFkb3dzTGVuZ3RoPT09ClhhLnNoYWRvd3NMZW5ndGg/dm9pZCAwPT09V2EubnVtQ2xpcHBpbmdQbGFuZXN8fFdhLm51bUNsaXBwaW5nUGxhbmVzPT09UmMubnVtUGxhbmVzJiZXYS5udW1JbnRlcnNlY3Rpb249PT1SYy5udW1JbnRlcnNlY3Rpb258fChvYS5uZWVkc1VwZGF0ZT0hMCk6b2EubmVlZHNVcGRhdGU9ITApO29hLm5lZWRzVXBkYXRlJiYoVyhvYSxkYSxNYSksb2EubmVlZHNVcGRhdGU9ITEpO3ZhciAkYT0hMTtYYT1SYT0hMTt2YXIgRmI9V2EucHJvZ3JhbSxyYj1GYi5nZXRVbmlmb3JtcygpLGdiPVdhLnNoYWRlci51bmlmb3JtcztCYi51c2VQcm9ncmFtKEZiLnByb2dyYW0pJiYoWGE9UmE9JGE9ITApO29hLmlkIT09YWImJihhYj1vYS5pZCxSYT0hMCk7aWYoJGF8fFFhIT09Vil7cmIuc2V0VmFsdWUoWWEsInByb2plY3Rpb25NYXRyaXgiLFYucHJvamVjdGlvbk1hdHJpeCk7dWMubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlciYmcmIuc2V0VmFsdWUoWWEsImxvZ0RlcHRoQnVmRkMiLDIvKE1hdGgubG9nKFYuZmFyKwoxKS9NYXRoLkxOMikpO1FhIT09ViYmKFFhPVYsWGE9UmE9ITApO2lmKG9hLmlzU2hhZGVyTWF0ZXJpYWx8fG9hLmlzTWVzaFBob25nTWF0ZXJpYWx8fG9hLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWx8fG9hLmVudk1hcCkkYT1yYi5tYXAuY2FtZXJhUG9zaXRpb24sdm9pZCAwIT09JGEmJiRhLnNldFZhbHVlKFlhLFVkLnNldEZyb21NYXRyaXhQb3NpdGlvbihWLm1hdHJpeFdvcmxkKSk7KG9hLmlzTWVzaFBob25nTWF0ZXJpYWx8fG9hLmlzTWVzaExhbWJlcnRNYXRlcmlhbHx8b2EuaXNNZXNoQmFzaWNNYXRlcmlhbHx8b2EuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbHx8b2EuaXNTaGFkZXJNYXRlcmlhbHx8b2Euc2tpbm5pbmcpJiZyYi5zZXRWYWx1ZShZYSwidmlld01hdHJpeCIsVi5tYXRyaXhXb3JsZEludmVyc2UpfWlmKG9hLnNraW5uaW5nJiYocmIuc2V0T3B0aW9uYWwoWWEsTWEsImJpbmRNYXRyaXgiKSxyYi5zZXRPcHRpb25hbChZYSxNYSwiYmluZE1hdHJpeEludmVyc2UiKSxWPU1hLnNrZWxldG9uKSlpZigkYT0KVi5ib25lcyx1Yy5mbG9hdFZlcnRleFRleHR1cmVzKXtpZih2b2lkIDA9PT1WLmJvbmVUZXh0dXJlKXskYT1NYXRoLnNxcnQoNCokYS5sZW5ndGgpOyRhPW9iLmNlaWxQb3dlck9mVHdvKCRhKTskYT1NYXRoLm1heCgkYSw0KTt2YXIgbGQ9bmV3IEZsb2F0MzJBcnJheSgkYSokYSo0KTtsZC5zZXQoVi5ib25lTWF0cmljZXMpO3ZhciBRYz1uZXcgdChsZCwkYSwkYSwxMDIzLDEwMTUpO1FjLm5lZWRzVXBkYXRlPSEwO1YuYm9uZU1hdHJpY2VzPWxkO1YuYm9uZVRleHR1cmU9UWM7Vi5ib25lVGV4dHVyZVNpemU9JGF9cmIuc2V0VmFsdWUoWWEsImJvbmVUZXh0dXJlIixWLmJvbmVUZXh0dXJlLFBjKTtyYi5zZXRWYWx1ZShZYSwiYm9uZVRleHR1cmVTaXplIixWLmJvbmVUZXh0dXJlU2l6ZSl9ZWxzZSByYi5zZXRPcHRpb25hbChZYSxWLCJib25lTWF0cmljZXMiKTtSYSYmKHJiLnNldFZhbHVlKFlhLCJ0b25lTWFwcGluZ0V4cG9zdXJlIixpYi50b25lTWFwcGluZ0V4cG9zdXJlKSxyYi5zZXRWYWx1ZShZYSwKInRvbmVNYXBwaW5nV2hpdGVQb2ludCIsaWIudG9uZU1hcHBpbmdXaGl0ZVBvaW50KSxvYS5saWdodHMmJmNiKGdiLFhhKSxkYSYmb2EuZm9nJiZuYShnYixkYSksb2EuaXNNZXNoQmFzaWNNYXRlcmlhbD9mYShnYixvYSk6b2EuaXNNZXNoTGFtYmVydE1hdGVyaWFsPyhmYShnYixvYSksdmEoZ2Isb2EpKTpvYS5pc01lc2hQaG9uZ01hdGVyaWFsPyhmYShnYixvYSksb2EuaXNNZXNoVG9vbk1hdGVyaWFsP3NhKGdiLG9hKTpCYShnYixvYSkpOm9hLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWw/KGZhKGdiLG9hKSxvYS5pc01lc2hQaHlzaWNhbE1hdGVyaWFsP0hhKGdiLG9hKTpEYShnYixvYSkpOm9hLmlzTWVzaE1hdGNhcE1hdGVyaWFsPyhmYShnYixvYSksS2EoZ2Isb2EpKTpvYS5pc01lc2hEZXB0aE1hdGVyaWFsPyhmYShnYixvYSksTmEoZ2Isb2EpKTpvYS5pc01lc2hEaXN0YW5jZU1hdGVyaWFsPyhmYShnYixvYSksTGEoZ2Isb2EpKTpvYS5pc01lc2hOb3JtYWxNYXRlcmlhbD8oZmEoZ2IsCm9hKSxmYihnYixvYSkpOm9hLmlzTGluZUJhc2ljTWF0ZXJpYWw/KHFhKGdiLG9hKSxvYS5pc0xpbmVEYXNoZWRNYXRlcmlhbCYmcmEoZ2Isb2EpKTpvYS5pc1BvaW50c01hdGVyaWFsP2lhKGdiLG9hKTpvYS5pc1Nwcml0ZU1hdGVyaWFsP3RhKGdiLG9hKTpvYS5pc1NoYWRvd01hdGVyaWFsJiYoZ2IuY29sb3IudmFsdWUuY29weShvYS5jb2xvciksZ2Iub3BhY2l0eS52YWx1ZT1vYS5vcGFjaXR5KSx2b2lkIDAhPT1nYi5sdGNfMSYmKGdiLmx0Y18xLnZhbHVlPWJiLkxUQ18xKSx2b2lkIDAhPT1nYi5sdGNfMiYmKGdiLmx0Y18yLnZhbHVlPWJiLkxUQ18yKSxPZC51cGxvYWQoWWEsV2EudW5pZm9ybXNMaXN0LGdiLFBjKSk7b2EuaXNTaGFkZXJNYXRlcmlhbCYmITA9PT1vYS51bmlmb3Jtc05lZWRVcGRhdGUmJihPZC51cGxvYWQoWWEsV2EudW5pZm9ybXNMaXN0LGdiLFBjKSxvYS51bmlmb3Jtc05lZWRVcGRhdGU9ITEpO29hLmlzU3ByaXRlTWF0ZXJpYWwmJnJiLnNldFZhbHVlKFlhLAoiY2VudGVyIixNYS5jZW50ZXIpO3JiLnNldFZhbHVlKFlhLCJtb2RlbFZpZXdNYXRyaXgiLE1hLm1vZGVsVmlld01hdHJpeCk7cmIuc2V0VmFsdWUoWWEsIm5vcm1hbE1hdHJpeCIsTWEubm9ybWFsTWF0cml4KTtyYi5zZXRWYWx1ZShZYSwibW9kZWxNYXRyaXgiLE1hLm1hdHJpeFdvcmxkKTtyZXR1cm4gRmJ9ZnVuY3Rpb24gZmEoVixkYSl7Vi5vcGFjaXR5LnZhbHVlPWRhLm9wYWNpdHk7ZGEuY29sb3ImJlYuZGlmZnVzZS52YWx1ZS5jb3B5KGRhLmNvbG9yKTtkYS5lbWlzc2l2ZSYmVi5lbWlzc2l2ZS52YWx1ZS5jb3B5KGRhLmVtaXNzaXZlKS5tdWx0aXBseVNjYWxhcihkYS5lbWlzc2l2ZUludGVuc2l0eSk7ZGEubWFwJiYoVi5tYXAudmFsdWU9ZGEubWFwKTtkYS5hbHBoYU1hcCYmKFYuYWxwaGFNYXAudmFsdWU9ZGEuYWxwaGFNYXApO2RhLnNwZWN1bGFyTWFwJiYoVi5zcGVjdWxhck1hcC52YWx1ZT1kYS5zcGVjdWxhck1hcCk7ZGEuZW52TWFwJiYoVi5lbnZNYXAudmFsdWU9ZGEuZW52TWFwLApWLmZsaXBFbnZNYXAudmFsdWU9ZGEuZW52TWFwLmlzQ3ViZVRleHR1cmU/LTE6MSxWLnJlZmxlY3Rpdml0eS52YWx1ZT1kYS5yZWZsZWN0aXZpdHksVi5yZWZyYWN0aW9uUmF0aW8udmFsdWU9ZGEucmVmcmFjdGlvblJhdGlvLFYubWF4TWlwTGV2ZWwudmFsdWU9dmMuZ2V0KGRhLmVudk1hcCkuX19tYXhNaXBMZXZlbCk7ZGEubGlnaHRNYXAmJihWLmxpZ2h0TWFwLnZhbHVlPWRhLmxpZ2h0TWFwLFYubGlnaHRNYXBJbnRlbnNpdHkudmFsdWU9ZGEubGlnaHRNYXBJbnRlbnNpdHkpO2RhLmFvTWFwJiYoVi5hb01hcC52YWx1ZT1kYS5hb01hcCxWLmFvTWFwSW50ZW5zaXR5LnZhbHVlPWRhLmFvTWFwSW50ZW5zaXR5KTtpZihkYS5tYXApdmFyIG9hPWRhLm1hcDtlbHNlIGRhLnNwZWN1bGFyTWFwP29hPWRhLnNwZWN1bGFyTWFwOmRhLmRpc3BsYWNlbWVudE1hcD9vYT1kYS5kaXNwbGFjZW1lbnRNYXA6ZGEubm9ybWFsTWFwP29hPWRhLm5vcm1hbE1hcDpkYS5idW1wTWFwP29hPWRhLmJ1bXBNYXA6CmRhLnJvdWdobmVzc01hcD9vYT1kYS5yb3VnaG5lc3NNYXA6ZGEubWV0YWxuZXNzTWFwP29hPWRhLm1ldGFsbmVzc01hcDpkYS5hbHBoYU1hcD9vYT1kYS5hbHBoYU1hcDpkYS5lbWlzc2l2ZU1hcCYmKG9hPWRhLmVtaXNzaXZlTWFwKTt2b2lkIDAhPT1vYSYmKG9hLmlzV2ViR0xSZW5kZXJUYXJnZXQmJihvYT1vYS50ZXh0dXJlKSwhMD09PW9hLm1hdHJpeEF1dG9VcGRhdGUmJm9hLnVwZGF0ZU1hdHJpeCgpLFYudXZUcmFuc2Zvcm0udmFsdWUuY29weShvYS5tYXRyaXgpKX1mdW5jdGlvbiBxYShWLGRhKXtWLmRpZmZ1c2UudmFsdWUuY29weShkYS5jb2xvcik7Vi5vcGFjaXR5LnZhbHVlPWRhLm9wYWNpdHl9ZnVuY3Rpb24gcmEoVixkYSl7Vi5kYXNoU2l6ZS52YWx1ZT1kYS5kYXNoU2l6ZTtWLnRvdGFsU2l6ZS52YWx1ZT1kYS5kYXNoU2l6ZStkYS5nYXBTaXplO1Yuc2NhbGUudmFsdWU9ZGEuc2NhbGV9ZnVuY3Rpb24gaWEoVixkYSl7Vi5kaWZmdXNlLnZhbHVlLmNvcHkoZGEuY29sb3IpOwpWLm9wYWNpdHkudmFsdWU9ZGEub3BhY2l0eTtWLnNpemUudmFsdWU9ZGEuc2l6ZSpSYjtWLnNjYWxlLnZhbHVlPS41KldiO1YubWFwLnZhbHVlPWRhLm1hcDtudWxsIT09ZGEubWFwJiYoITA9PT1kYS5tYXAubWF0cml4QXV0b1VwZGF0ZSYmZGEubWFwLnVwZGF0ZU1hdHJpeCgpLFYudXZUcmFuc2Zvcm0udmFsdWUuY29weShkYS5tYXAubWF0cml4KSl9ZnVuY3Rpb24gdGEoVixkYSl7Vi5kaWZmdXNlLnZhbHVlLmNvcHkoZGEuY29sb3IpO1Yub3BhY2l0eS52YWx1ZT1kYS5vcGFjaXR5O1Yucm90YXRpb24udmFsdWU9ZGEucm90YXRpb247Vi5tYXAudmFsdWU9ZGEubWFwO251bGwhPT1kYS5tYXAmJighMD09PWRhLm1hcC5tYXRyaXhBdXRvVXBkYXRlJiZkYS5tYXAudXBkYXRlTWF0cml4KCksVi51dlRyYW5zZm9ybS52YWx1ZS5jb3B5KGRhLm1hcC5tYXRyaXgpKX1mdW5jdGlvbiBuYShWLGRhKXtWLmZvZ0NvbG9yLnZhbHVlLmNvcHkoZGEuY29sb3IpO2RhLmlzRm9nPyhWLmZvZ05lYXIudmFsdWU9CmRhLm5lYXIsVi5mb2dGYXIudmFsdWU9ZGEuZmFyKTpkYS5pc0ZvZ0V4cDImJihWLmZvZ0RlbnNpdHkudmFsdWU9ZGEuZGVuc2l0eSl9ZnVuY3Rpb24gdmEoVixkYSl7ZGEuZW1pc3NpdmVNYXAmJihWLmVtaXNzaXZlTWFwLnZhbHVlPWRhLmVtaXNzaXZlTWFwKX1mdW5jdGlvbiBCYShWLGRhKXtWLnNwZWN1bGFyLnZhbHVlLmNvcHkoZGEuc3BlY3VsYXIpO1Yuc2hpbmluZXNzLnZhbHVlPU1hdGgubWF4KGRhLnNoaW5pbmVzcywxRS00KTtkYS5lbWlzc2l2ZU1hcCYmKFYuZW1pc3NpdmVNYXAudmFsdWU9ZGEuZW1pc3NpdmVNYXApO2RhLmJ1bXBNYXAmJihWLmJ1bXBNYXAudmFsdWU9ZGEuYnVtcE1hcCxWLmJ1bXBTY2FsZS52YWx1ZT1kYS5idW1wU2NhbGUsMT09PWRhLnNpZGUmJihWLmJ1bXBTY2FsZS52YWx1ZSo9LTEpKTtkYS5ub3JtYWxNYXAmJihWLm5vcm1hbE1hcC52YWx1ZT1kYS5ub3JtYWxNYXAsVi5ub3JtYWxTY2FsZS52YWx1ZS5jb3B5KGRhLm5vcm1hbFNjYWxlKSwxPT09ZGEuc2lkZSYmClYubm9ybWFsU2NhbGUudmFsdWUubmVnYXRlKCkpO2RhLmRpc3BsYWNlbWVudE1hcCYmKFYuZGlzcGxhY2VtZW50TWFwLnZhbHVlPWRhLmRpc3BsYWNlbWVudE1hcCxWLmRpc3BsYWNlbWVudFNjYWxlLnZhbHVlPWRhLmRpc3BsYWNlbWVudFNjYWxlLFYuZGlzcGxhY2VtZW50Qmlhcy52YWx1ZT1kYS5kaXNwbGFjZW1lbnRCaWFzKX1mdW5jdGlvbiBzYShWLGRhKXtCYShWLGRhKTtkYS5ncmFkaWVudE1hcCYmKFYuZ3JhZGllbnRNYXAudmFsdWU9ZGEuZ3JhZGllbnRNYXApfWZ1bmN0aW9uIERhKFYsZGEpe1Yucm91Z2huZXNzLnZhbHVlPWRhLnJvdWdobmVzcztWLm1ldGFsbmVzcy52YWx1ZT1kYS5tZXRhbG5lc3M7ZGEucm91Z2huZXNzTWFwJiYoVi5yb3VnaG5lc3NNYXAudmFsdWU9ZGEucm91Z2huZXNzTWFwKTtkYS5tZXRhbG5lc3NNYXAmJihWLm1ldGFsbmVzc01hcC52YWx1ZT1kYS5tZXRhbG5lc3NNYXApO2RhLmVtaXNzaXZlTWFwJiYoVi5lbWlzc2l2ZU1hcC52YWx1ZT1kYS5lbWlzc2l2ZU1hcCk7CmRhLmJ1bXBNYXAmJihWLmJ1bXBNYXAudmFsdWU9ZGEuYnVtcE1hcCxWLmJ1bXBTY2FsZS52YWx1ZT1kYS5idW1wU2NhbGUsMT09PWRhLnNpZGUmJihWLmJ1bXBTY2FsZS52YWx1ZSo9LTEpKTtkYS5ub3JtYWxNYXAmJihWLm5vcm1hbE1hcC52YWx1ZT1kYS5ub3JtYWxNYXAsVi5ub3JtYWxTY2FsZS52YWx1ZS5jb3B5KGRhLm5vcm1hbFNjYWxlKSwxPT09ZGEuc2lkZSYmVi5ub3JtYWxTY2FsZS52YWx1ZS5uZWdhdGUoKSk7ZGEuZGlzcGxhY2VtZW50TWFwJiYoVi5kaXNwbGFjZW1lbnRNYXAudmFsdWU9ZGEuZGlzcGxhY2VtZW50TWFwLFYuZGlzcGxhY2VtZW50U2NhbGUudmFsdWU9ZGEuZGlzcGxhY2VtZW50U2NhbGUsVi5kaXNwbGFjZW1lbnRCaWFzLnZhbHVlPWRhLmRpc3BsYWNlbWVudEJpYXMpO2RhLmVudk1hcCYmKFYuZW52TWFwSW50ZW5zaXR5LnZhbHVlPWRhLmVudk1hcEludGVuc2l0eSl9ZnVuY3Rpb24gSGEoVixkYSl7RGEoVixkYSk7Vi5yZWZsZWN0aXZpdHkudmFsdWU9ZGEucmVmbGVjdGl2aXR5OwpWLmNsZWFyQ29hdC52YWx1ZT1kYS5jbGVhckNvYXQ7Vi5jbGVhckNvYXRSb3VnaG5lc3MudmFsdWU9ZGEuY2xlYXJDb2F0Um91Z2huZXNzfWZ1bmN0aW9uIEthKFYsZGEpe2RhLm1hdGNhcCYmKFYubWF0Y2FwLnZhbHVlPWRhLm1hdGNhcCk7ZGEuYnVtcE1hcCYmKFYuYnVtcE1hcC52YWx1ZT1kYS5idW1wTWFwLFYuYnVtcFNjYWxlLnZhbHVlPWRhLmJ1bXBTY2FsZSwxPT09ZGEuc2lkZSYmKFYuYnVtcFNjYWxlLnZhbHVlKj0tMSkpO2RhLm5vcm1hbE1hcCYmKFYubm9ybWFsTWFwLnZhbHVlPWRhLm5vcm1hbE1hcCxWLm5vcm1hbFNjYWxlLnZhbHVlLmNvcHkoZGEubm9ybWFsU2NhbGUpLDE9PT1kYS5zaWRlJiZWLm5vcm1hbFNjYWxlLnZhbHVlLm5lZ2F0ZSgpKTtkYS5kaXNwbGFjZW1lbnRNYXAmJihWLmRpc3BsYWNlbWVudE1hcC52YWx1ZT1kYS5kaXNwbGFjZW1lbnRNYXAsVi5kaXNwbGFjZW1lbnRTY2FsZS52YWx1ZT1kYS5kaXNwbGFjZW1lbnRTY2FsZSxWLmRpc3BsYWNlbWVudEJpYXMudmFsdWU9CmRhLmRpc3BsYWNlbWVudEJpYXMpfWZ1bmN0aW9uIE5hKFYsZGEpe2RhLmRpc3BsYWNlbWVudE1hcCYmKFYuZGlzcGxhY2VtZW50TWFwLnZhbHVlPWRhLmRpc3BsYWNlbWVudE1hcCxWLmRpc3BsYWNlbWVudFNjYWxlLnZhbHVlPWRhLmRpc3BsYWNlbWVudFNjYWxlLFYuZGlzcGxhY2VtZW50Qmlhcy52YWx1ZT1kYS5kaXNwbGFjZW1lbnRCaWFzKX1mdW5jdGlvbiBMYShWLGRhKXtkYS5kaXNwbGFjZW1lbnRNYXAmJihWLmRpc3BsYWNlbWVudE1hcC52YWx1ZT1kYS5kaXNwbGFjZW1lbnRNYXAsVi5kaXNwbGFjZW1lbnRTY2FsZS52YWx1ZT1kYS5kaXNwbGFjZW1lbnRTY2FsZSxWLmRpc3BsYWNlbWVudEJpYXMudmFsdWU9ZGEuZGlzcGxhY2VtZW50Qmlhcyk7Vi5yZWZlcmVuY2VQb3NpdGlvbi52YWx1ZS5jb3B5KGRhLnJlZmVyZW5jZVBvc2l0aW9uKTtWLm5lYXJEaXN0YW5jZS52YWx1ZT1kYS5uZWFyRGlzdGFuY2U7Vi5mYXJEaXN0YW5jZS52YWx1ZT1kYS5mYXJEaXN0YW5jZX1mdW5jdGlvbiBmYihWLApkYSl7ZGEuYnVtcE1hcCYmKFYuYnVtcE1hcC52YWx1ZT1kYS5idW1wTWFwLFYuYnVtcFNjYWxlLnZhbHVlPWRhLmJ1bXBTY2FsZSwxPT09ZGEuc2lkZSYmKFYuYnVtcFNjYWxlLnZhbHVlKj0tMSkpO2RhLm5vcm1hbE1hcCYmKFYubm9ybWFsTWFwLnZhbHVlPWRhLm5vcm1hbE1hcCxWLm5vcm1hbFNjYWxlLnZhbHVlLmNvcHkoZGEubm9ybWFsU2NhbGUpLDE9PT1kYS5zaWRlJiZWLm5vcm1hbFNjYWxlLnZhbHVlLm5lZ2F0ZSgpKTtkYS5kaXNwbGFjZW1lbnRNYXAmJihWLmRpc3BsYWNlbWVudE1hcC52YWx1ZT1kYS5kaXNwbGFjZW1lbnRNYXAsVi5kaXNwbGFjZW1lbnRTY2FsZS52YWx1ZT1kYS5kaXNwbGFjZW1lbnRTY2FsZSxWLmRpc3BsYWNlbWVudEJpYXMudmFsdWU9ZGEuZGlzcGxhY2VtZW50Qmlhcyl9ZnVuY3Rpb24gY2IoVixkYSl7Vi5hbWJpZW50TGlnaHRDb2xvci5uZWVkc1VwZGF0ZT1kYTtWLmxpZ2h0UHJvYmUubmVlZHNVcGRhdGU9ZGE7Vi5kaXJlY3Rpb25hbExpZ2h0cy5uZWVkc1VwZGF0ZT0KZGE7Vi5wb2ludExpZ2h0cy5uZWVkc1VwZGF0ZT1kYTtWLnNwb3RMaWdodHMubmVlZHNVcGRhdGU9ZGE7Vi5yZWN0QXJlYUxpZ2h0cy5uZWVkc1VwZGF0ZT1kYTtWLmhlbWlzcGhlcmVMaWdodHMubmVlZHNVcGRhdGU9ZGF9Y29uc29sZS5sb2coIlRIUkVFLldlYkdMUmVuZGVyZXIiLCIxMDQiKTtiPWJ8fHt9O3ZhciBKYT12b2lkIDAhPT1iLmNhbnZhcz9iLmNhbnZhczpkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLCJjYW52YXMiKSxoYj12b2lkIDAhPT1iLmNvbnRleHQ/Yi5jb250ZXh0Om51bGwsVWE9dm9pZCAwIT09Yi5hbHBoYT9iLmFscGhhOiExLEhiPXZvaWQgMCE9PWIuZGVwdGg/Yi5kZXB0aDohMCxxYj12b2lkIDAhPT1iLnN0ZW5jaWw/Yi5zdGVuY2lsOiEwLGphPXZvaWQgMCE9PWIuYW50aWFsaWFzP2IuYW50aWFsaWFzOiExLHBhPXZvaWQgMCE9PWIucHJlbXVsdGlwbGllZEFscGhhP2IucHJlbXVsdGlwbGllZEFscGhhOgohMCx5YT12b2lkIDAhPT1iLnByZXNlcnZlRHJhd2luZ0J1ZmZlcj9iLnByZXNlcnZlRHJhd2luZ0J1ZmZlcjohMSxWYT12b2lkIDAhPT1iLnBvd2VyUHJlZmVyZW5jZT9iLnBvd2VyUHJlZmVyZW5jZToiZGVmYXVsdCIsWmE9bnVsbCxUYT1udWxsO3RoaXMuZG9tRWxlbWVudD1KYTt0aGlzLmNvbnRleHQ9bnVsbDt0aGlzLmRlYnVnPXtjaGVja1NoYWRlckVycm9yczohMX07dGhpcy5zb3J0T2JqZWN0cz10aGlzLmF1dG9DbGVhclN0ZW5jaWw9dGhpcy5hdXRvQ2xlYXJEZXB0aD10aGlzLmF1dG9DbGVhckNvbG9yPXRoaXMuYXV0b0NsZWFyPSEwO3RoaXMuY2xpcHBpbmdQbGFuZXM9W107dGhpcy5sb2NhbENsaXBwaW5nRW5hYmxlZD0hMTt0aGlzLmdhbW1hRmFjdG9yPTI7dGhpcy5waHlzaWNhbGx5Q29ycmVjdExpZ2h0cz10aGlzLmdhbW1hT3V0cHV0PXRoaXMuZ2FtbWFJbnB1dD0hMTt0aGlzLnRvbmVNYXBwaW5nV2hpdGVQb2ludD10aGlzLnRvbmVNYXBwaW5nRXhwb3N1cmU9dGhpcy50b25lTWFwcGluZz0KMTt0aGlzLm1heE1vcnBoVGFyZ2V0cz04O3RoaXMubWF4TW9ycGhOb3JtYWxzPTQ7dmFyIGliPXRoaXMsbWE9ITEsSWE9bnVsbCxPYT1udWxsLHViPW51bGwsYWI9LTE7dmFyIEtiPWU9bnVsbDt2YXIgbGI9ITE7dmFyIFFhPW51bGwsbmI9bnVsbCxwYj1uZXcgbSx2Yj1uZXcgbSxBYj1udWxsLE9iPUphLndpZHRoLFdiPUphLmhlaWdodCxSYj0xLHdkPW5ldyBtKDAsMCxPYixXYiksdmQ9bmV3IG0oMCwwLE9iLFdiKSx4aT0hMSx2aT1uZXcgeCxSYz1uZXcgJGIsZWg9ITEsd2k9ITEsUWY9bmV3IEMsVWQ9bmV3IGc7dHJ5e1VhPXthbHBoYTpVYSxkZXB0aDpIYixzdGVuY2lsOnFiLGFudGlhbGlhczpqYSxwcmVtdWx0aXBsaWVkQWxwaGE6cGEscHJlc2VydmVEcmF3aW5nQnVmZmVyOnlhLHBvd2VyUHJlZmVyZW5jZTpWYX07SmEuYWRkRXZlbnRMaXN0ZW5lcigid2ViZ2xjb250ZXh0bG9zdCIsdSwhMSk7SmEuYWRkRXZlbnRMaXN0ZW5lcigid2ViZ2xjb250ZXh0cmVzdG9yZWQiLHcsITEpOwp2YXIgWWE9aGJ8fEphLmdldENvbnRleHQoIndlYmdsIixVYSl8fEphLmdldENvbnRleHQoImV4cGVyaW1lbnRhbC13ZWJnbCIsVWEpO2lmKG51bGw9PT1ZYSl7aWYobnVsbCE9PUphLmdldENvbnRleHQoIndlYmdsIikpdGhyb3cgRXJyb3IoIkVycm9yIGNyZWF0aW5nIFdlYkdMIGNvbnRleHQgd2l0aCB5b3VyIHNlbGVjdGVkIGF0dHJpYnV0ZXMuIik7dGhyb3cgRXJyb3IoIkVycm9yIGNyZWF0aW5nIFdlYkdMIGNvbnRleHQuIik7fXZvaWQgMD09PVlhLmdldFNoYWRlclByZWNpc2lvbkZvcm1hdCYmKFlhLmdldFNoYWRlclByZWNpc2lvbkZvcm1hdD1mdW5jdGlvbigpe3JldHVybntyYW5nZU1pbjoxLHJhbmdlTWF4OjEscHJlY2lzaW9uOjF9fSl9Y2F0Y2goVil7dGhyb3cgY29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xSZW5kZXJlcjogIitWLm1lc3NhZ2UpLFY7fXZhciBWYix1YyxCYixSZCx2YyxQYyxiaCx1aSxPZSxnZSxjaCxQZSxTZCxzbCx0bCx1bCxrZDtuKCk7dmFyIHhkPSJ1bmRlZmluZWQiIT09CnR5cGVvZiBuYXZpZ2F0b3ImJiJ4ciJpbiBuYXZpZ2F0b3I/bmV3IEtvKGliKTpuZXcgcmwoaWIpO3RoaXMudnI9eGQ7dmFyIHZsPW5ldyBtbChpYixPZSx1Yy5tYXhUZXh0dXJlU2l6ZSk7dGhpcy5zaGFkb3dNYXA9dmw7dGhpcy5nZXRDb250ZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIFlhfTt0aGlzLmdldENvbnRleHRBdHRyaWJ1dGVzPWZ1bmN0aW9uKCl7cmV0dXJuIFlhLmdldENvbnRleHRBdHRyaWJ1dGVzKCl9O3RoaXMuZm9yY2VDb250ZXh0TG9zcz1mdW5jdGlvbigpe3ZhciBWPVZiLmdldCgiV0VCR0xfbG9zZV9jb250ZXh0Iik7ViYmVi5sb3NlQ29udGV4dCgpfTt0aGlzLmZvcmNlQ29udGV4dFJlc3RvcmU9ZnVuY3Rpb24oKXt2YXIgVj1WYi5nZXQoIldFQkdMX2xvc2VfY29udGV4dCIpO1YmJlYucmVzdG9yZUNvbnRleHQoKX07dGhpcy5nZXRQaXhlbFJhdGlvPWZ1bmN0aW9uKCl7cmV0dXJuIFJifTt0aGlzLnNldFBpeGVsUmF0aW89ZnVuY3Rpb24oKXt2YXIgVj13aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbzsKdm9pZCAwIT09ViYmKFJiPVYsdGhpcy5zZXRTaXplKE9iLFdiLCExKSl9O3RoaXMuZ2V0U2l6ZT1mdW5jdGlvbihWKXt2b2lkIDA9PT1WJiYoY29uc29sZS53YXJuKCJXZWJHTFJlbmRlcmVyOiAuZ2V0c2l6ZSgpIG5vdyByZXF1aXJlcyBhIFZlY3RvcjIgYXMgYW4gYXJndW1lbnQiKSxWPW5ldyBkKTtyZXR1cm4gVi5zZXQoT2IsV2IpfTt0aGlzLnNldFNpemU9ZnVuY3Rpb24oVixkYSxvYSl7eGQuaXNQcmVzZW50aW5nKCk/Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBDYW4ndCBjaGFuZ2Ugc2l6ZSB3aGlsZSBWUiBkZXZpY2UgaXMgcHJlc2VudGluZy4iKTooT2I9VixXYj1kYSxKYS53aWR0aD1WKlJiLEphLmhlaWdodD1kYSpSYiwhMSE9PW9hJiYoSmEuc3R5bGUud2lkdGg9VisicHgiLEphLnN0eWxlLmhlaWdodD1kYSsicHgiKSx0aGlzLnNldFZpZXdwb3J0KFYsZGEpKX07dGhpcy5nZXREcmF3aW5nQnVmZmVyU2l6ZT1mdW5jdGlvbihWKXt2b2lkIDA9PT1WJiYoY29uc29sZS53YXJuKCJXZWJHTFJlbmRlcmVyOiAuZ2V0ZHJhd2luZ0J1ZmZlclNpemUoKSBub3cgcmVxdWlyZXMgYSBWZWN0b3IyIGFzIGFuIGFyZ3VtZW50IiksClY9bmV3IGQpO3JldHVybiBWLnNldChPYipSYixXYipSYil9O3RoaXMuc2V0RHJhd2luZ0J1ZmZlclNpemU9ZnVuY3Rpb24oVixkYSxvYSl7T2I9VjtXYj1kYTtSYj1vYTtKYS53aWR0aD1WKm9hO0phLmhlaWdodD1kYSpvYTt0aGlzLnNldFZpZXdwb3J0KFYsZGEpfTt0aGlzLmdldEN1cnJlbnRWaWV3cG9ydD1mdW5jdGlvbihWKXt2b2lkIDA9PT1WJiYoY29uc29sZS53YXJuKCJXZWJHTFJlbmRlcmVyOiAuZ2V0Q3VycmVudFZpZXdwb3J0KCkgbm93IHJlcXVpcmVzIGEgVmVjdG9yNCBhcyBhbiBhcmd1bWVudCIpLFY9bmV3IG0pO3JldHVybiBWLmNvcHkocGIpfTt0aGlzLmdldFZpZXdwb3J0PWZ1bmN0aW9uKFYpe3JldHVybiBWLmNvcHkod2QpfTt0aGlzLnNldFZpZXdwb3J0PWZ1bmN0aW9uKFYsZGEpeygwKS5pc1ZlY3RvcjQ/d2Quc2V0KCgwKS54LCgwKS55LCgwKS56LCgwKS53KTp3ZC5zZXQoMCwwLFYsZGEpO0JiLnZpZXdwb3J0KHBiLmNvcHkod2QpLm11bHRpcGx5U2NhbGFyKFJiKSl9Owp0aGlzLmdldFNjaXNzb3I9ZnVuY3Rpb24oVil7cmV0dXJuIFYuY29weSh2ZCl9O3RoaXMuc2V0U2Npc3Nvcj1mdW5jdGlvbihWLGRhLG9hLE1hKXtWLmlzVmVjdG9yND92ZC5zZXQoVi54LFYueSxWLnosVi53KTp2ZC5zZXQoVixkYSxvYSxNYSk7QmIuc2Npc3Nvcih2Yi5jb3B5KHZkKS5tdWx0aXBseVNjYWxhcihSYikpfTt0aGlzLmdldFNjaXNzb3JUZXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHhpfTt0aGlzLnNldFNjaXNzb3JUZXN0PWZ1bmN0aW9uKFYpe0JiLnNldFNjaXNzb3JUZXN0KHhpPVYpfTt0aGlzLmdldENsZWFyQ29sb3I9ZnVuY3Rpb24oKXtyZXR1cm4gU2QuZ2V0Q2xlYXJDb2xvcigpfTt0aGlzLnNldENsZWFyQ29sb3I9ZnVuY3Rpb24oKXtTZC5zZXRDbGVhckNvbG9yLmFwcGx5KFNkLGFyZ3VtZW50cyl9O3RoaXMuZ2V0Q2xlYXJBbHBoYT1mdW5jdGlvbigpe3JldHVybiBTZC5nZXRDbGVhckFscGhhKCl9O3RoaXMuc2V0Q2xlYXJBbHBoYT1mdW5jdGlvbigpe1NkLnNldENsZWFyQWxwaGEuYXBwbHkoU2QsCmFyZ3VtZW50cyl9O3RoaXMuY2xlYXI9ZnVuY3Rpb24oVixkYSxvYSl7dmFyIE1hPTA7aWYodm9pZCAwPT09Vnx8VilNYXw9MTYzODQ7aWYodm9pZCAwPT09ZGF8fGRhKU1hfD0yNTY7aWYodm9pZCAwPT09b2F8fG9hKU1hfD0xMDI0O1lhLmNsZWFyKE1hKX07dGhpcy5jbGVhckNvbG9yPWZ1bmN0aW9uKCl7dGhpcy5jbGVhcighMCwhMSwhMSl9O3RoaXMuY2xlYXJEZXB0aD1mdW5jdGlvbigpe3RoaXMuY2xlYXIoITEsITAsITEpfTt0aGlzLmNsZWFyU3RlbmNpbD1mdW5jdGlvbigpe3RoaXMuY2xlYXIoITEsITEsITApfTt0aGlzLmRpc3Bvc2U9ZnVuY3Rpb24oKXtKYS5yZW1vdmVFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRsb3N0Iix1LCExKTtKYS5yZW1vdmVFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRyZXN0b3JlZCIsdywhMSk7Y2guZGlzcG9zZSgpO1BlLmRpc3Bvc2UoKTt2Yy5kaXNwb3NlKCk7T2UuZGlzcG9zZSgpO3hkLmRpc3Bvc2UoKTtmaC5zdG9wKCl9O3RoaXMucmVuZGVyQnVmZmVySW1tZWRpYXRlPQpmdW5jdGlvbihWLGRhKXtCYi5pbml0QXR0cmlidXRlcygpO3ZhciBvYT12Yy5nZXQoVik7Vi5oYXNQb3NpdGlvbnMmJiFvYS5wb3NpdGlvbiYmKG9hLnBvc2l0aW9uPVlhLmNyZWF0ZUJ1ZmZlcigpKTtWLmhhc05vcm1hbHMmJiFvYS5ub3JtYWwmJihvYS5ub3JtYWw9WWEuY3JlYXRlQnVmZmVyKCkpO1YuaGFzVXZzJiYhb2EudXYmJihvYS51dj1ZYS5jcmVhdGVCdWZmZXIoKSk7Vi5oYXNDb2xvcnMmJiFvYS5jb2xvciYmKG9hLmNvbG9yPVlhLmNyZWF0ZUJ1ZmZlcigpKTtkYT1kYS5nZXRBdHRyaWJ1dGVzKCk7Vi5oYXNQb3NpdGlvbnMmJihZYS5iaW5kQnVmZmVyKDM0OTYyLG9hLnBvc2l0aW9uKSxZYS5idWZmZXJEYXRhKDM0OTYyLFYucG9zaXRpb25BcnJheSwzNTA0OCksQmIuZW5hYmxlQXR0cmlidXRlKGRhLnBvc2l0aW9uKSxZYS52ZXJ0ZXhBdHRyaWJQb2ludGVyKGRhLnBvc2l0aW9uLDMsNTEyNiwhMSwwLDApKTtWLmhhc05vcm1hbHMmJihZYS5iaW5kQnVmZmVyKDM0OTYyLG9hLm5vcm1hbCksCllhLmJ1ZmZlckRhdGEoMzQ5NjIsVi5ub3JtYWxBcnJheSwzNTA0OCksQmIuZW5hYmxlQXR0cmlidXRlKGRhLm5vcm1hbCksWWEudmVydGV4QXR0cmliUG9pbnRlcihkYS5ub3JtYWwsMyw1MTI2LCExLDAsMCkpO1YuaGFzVXZzJiYoWWEuYmluZEJ1ZmZlcigzNDk2MixvYS51diksWWEuYnVmZmVyRGF0YSgzNDk2MixWLnV2QXJyYXksMzUwNDgpLEJiLmVuYWJsZUF0dHJpYnV0ZShkYS51diksWWEudmVydGV4QXR0cmliUG9pbnRlcihkYS51diwyLDUxMjYsITEsMCwwKSk7Vi5oYXNDb2xvcnMmJihZYS5iaW5kQnVmZmVyKDM0OTYyLG9hLmNvbG9yKSxZYS5idWZmZXJEYXRhKDM0OTYyLFYuY29sb3JBcnJheSwzNTA0OCksQmIuZW5hYmxlQXR0cmlidXRlKGRhLmNvbG9yKSxZYS52ZXJ0ZXhBdHRyaWJQb2ludGVyKGRhLmNvbG9yLDMsNTEyNiwhMSwwLDApKTtCYi5kaXNhYmxlVW51c2VkQXR0cmlidXRlcygpO1lhLmRyYXdBcnJheXMoNCwwLFYuY291bnQpO1YuY291bnQ9MH07dGhpcy5yZW5kZXJCdWZmZXJEaXJlY3Q9CmZ1bmN0aW9uKFYsZGEsb2EsTWEsV2EsUmEpe0JiLnNldE1hdGVyaWFsKE1hLFdhLmlzTWVzaCYmMD5XYS5tYXRyaXhXb3JsZC5kZXRlcm1pbmFudCgpKTt2YXIgWGE9WihWLGRhLE1hLFdhKSwkYT0hMTtpZihlIT09b2EuaWR8fEtiIT09WGEuaWR8fGxiIT09KCEwPT09TWEud2lyZWZyYW1lKSllPW9hLmlkLEtiPVhhLmlkLGxiPSEwPT09TWEud2lyZWZyYW1lLCRhPSEwO1dhLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcyYmKHNsLnVwZGF0ZShXYSxvYSxNYSxYYSksJGE9ITApO3ZhciBGYj1vYS5pbmRleCxyYj1vYS5hdHRyaWJ1dGVzLnBvc2l0aW9uO2RhPTE7ITA9PT1NYS53aXJlZnJhbWUmJihGYj11aS5nZXRXaXJlZnJhbWVBdHRyaWJ1dGUob2EpLGRhPTIpO1Y9dGw7aWYobnVsbCE9PUZiKXt2YXIgZ2I9YmguZ2V0KEZiKTtWPXVsO1Yuc2V0SW5kZXgoZ2IpfSRhJiYoTyhNYSxYYSxvYSksbnVsbCE9PUZiJiZZYS5iaW5kQnVmZmVyKDM0OTYzLGdiLmJ1ZmZlcikpO2diPUluZmluaXR5OwpudWxsIT09RmI/Z2I9RmIuY291bnQ6dm9pZCAwIT09cmImJihnYj1yYi5jb3VudCk7cmI9b2EuZHJhd1JhbmdlLnN0YXJ0KmRhO1hhPW51bGwhPT1SYT9SYS5zdGFydCpkYTowO0ZiPU1hdGgubWF4KHJiLFhhKTtSYT1NYXRoLm1heCgwLE1hdGgubWluKGdiLHJiK29hLmRyYXdSYW5nZS5jb3VudCpkYSxYYSsobnVsbCE9PVJhP1JhLmNvdW50KmRhOkluZmluaXR5KSktMS1GYisxKTtpZigwIT09UmEpe2lmKFdhLmlzTWVzaClpZighMD09PU1hLndpcmVmcmFtZSlCYi5zZXRMaW5lV2lkdGgoTWEud2lyZWZyYW1lTGluZXdpZHRoKmgoKSksVi5zZXRNb2RlKDEpO2Vsc2Ugc3dpdGNoKFdhLmRyYXdNb2RlKXtjYXNlIDA6Vi5zZXRNb2RlKDQpO2JyZWFrO2Nhc2UgMTpWLnNldE1vZGUoNSk7YnJlYWs7Y2FzZSAyOlYuc2V0TW9kZSg2KX1lbHNlIFdhLmlzTGluZT8oTWE9TWEubGluZXdpZHRoLHZvaWQgMD09PU1hJiYoTWE9MSksQmIuc2V0TGluZVdpZHRoKE1hKmgoKSksV2EuaXNMaW5lU2VnbWVudHM/ClYuc2V0TW9kZSgxKTpXYS5pc0xpbmVMb29wP1Yuc2V0TW9kZSgyKTpWLnNldE1vZGUoMykpOldhLmlzUG9pbnRzP1Yuc2V0TW9kZSgwKTpXYS5pc1Nwcml0ZSYmVi5zZXRNb2RlKDQpO29hJiZvYS5pc0luc3RhbmNlZEJ1ZmZlckdlb21ldHJ5PzA8b2EubWF4SW5zdGFuY2VkQ291bnQmJlYucmVuZGVySW5zdGFuY2VzKG9hLEZiLFJhKTpWLnJlbmRlcihGYixSYSl9fTt0aGlzLmNvbXBpbGU9ZnVuY3Rpb24oVixkYSl7VGE9UGUuZ2V0KFYsZGEpO1RhLmluaXQoKTtWLnRyYXZlcnNlKGZ1bmN0aW9uKG9hKXtvYS5pc0xpZ2h0JiYoVGEucHVzaExpZ2h0KG9hKSxvYS5jYXN0U2hhZG93JiZUYS5wdXNoU2hhZG93KG9hKSl9KTtUYS5zZXR1cExpZ2h0cyhkYSk7Vi50cmF2ZXJzZShmdW5jdGlvbihvYSl7aWYob2EubWF0ZXJpYWwpaWYoQXJyYXkuaXNBcnJheShvYS5tYXRlcmlhbCkpZm9yKHZhciBNYT0wO01hPG9hLm1hdGVyaWFsLmxlbmd0aDtNYSsrKVcob2EubWF0ZXJpYWxbTWFdLFYuZm9nLApvYSk7ZWxzZSBXKG9hLm1hdGVyaWFsLFYuZm9nLG9hKX0pfTt2YXIgeWk9bnVsbCxmaD1uZXcgRztmaC5zZXRBbmltYXRpb25Mb29wKGZ1bmN0aW9uKFYpe3hkLmlzUHJlc2VudGluZygpfHx5aSYmeWkoVil9KTsidW5kZWZpbmVkIiE9PXR5cGVvZiB3aW5kb3cmJmZoLnNldENvbnRleHQod2luZG93KTt0aGlzLnNldEFuaW1hdGlvbkxvb3A9ZnVuY3Rpb24oVil7eWk9Vjt4ZC5zZXRBbmltYXRpb25Mb29wKFYpO2ZoLnN0YXJ0KCl9O3RoaXMucmVuZGVyPWZ1bmN0aW9uKFYsZGEsb2EsTWEpe2lmKHZvaWQgMCE9PW9hKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXIucmVuZGVyKCk6IHRoZSByZW5kZXJUYXJnZXQgYXJndW1lbnQgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIC5zZXRSZW5kZXJUYXJnZXQoKSBpbnN0ZWFkLiIpO3ZhciBXYT1vYX1pZih2b2lkIDAhPT1NYSl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyLnJlbmRlcigpOiB0aGUgZm9yY2VDbGVhciBhcmd1bWVudCBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLmNsZWFyKCkgaW5zdGVhZC4iKTsKdmFyIFJhPU1hfWRhJiZkYS5pc0NhbWVyYT9tYXx8KEtiPWU9bnVsbCxsYj0hMSxhYj0tMSxRYT1udWxsLCEwPT09Vi5hdXRvVXBkYXRlJiZWLnVwZGF0ZU1hdHJpeFdvcmxkKCksbnVsbD09PWRhLnBhcmVudCYmZGEudXBkYXRlTWF0cml4V29ybGQoKSx4ZC5lbmFibGVkJiYoZGE9eGQuZ2V0Q2FtZXJhKGRhKSksVGE9UGUuZ2V0KFYsZGEpLFRhLmluaXQoKSxWLm9uQmVmb3JlUmVuZGVyKGliLFYsZGEsV2F8fE9hKSxRZi5tdWx0aXBseU1hdHJpY2VzKGRhLnByb2plY3Rpb25NYXRyaXgsZGEubWF0cml4V29ybGRJbnZlcnNlKSx2aS5zZXRGcm9tTWF0cml4KFFmKSx3aT10aGlzLmxvY2FsQ2xpcHBpbmdFbmFibGVkLGVoPVJjLmluaXQodGhpcy5jbGlwcGluZ1BsYW5lcyx3aSxkYSksWmE9Y2guZ2V0KFYsZGEpLFphLmluaXQoKSxRKFYsZGEsMCxpYi5zb3J0T2JqZWN0cyksITA9PT1pYi5zb3J0T2JqZWN0cyYmWmEuc29ydCgpLGVoJiZSYy5iZWdpblNoYWRvd3MoKSx2bC5yZW5kZXIoVGEuc3RhdGUuc2hhZG93c0FycmF5LApWLGRhKSxUYS5zZXR1cExpZ2h0cyhkYSksZWgmJlJjLmVuZFNoYWRvd3MoKSx0aGlzLmluZm8uYXV0b1Jlc2V0JiZ0aGlzLmluZm8ucmVzZXQoKSx2b2lkIDAhPT1XYSYmdGhpcy5zZXRSZW5kZXJUYXJnZXQoV2EpLFNkLnJlbmRlcihaYSxWLGRhLFJhKSxvYT1aYS5vcGFxdWUsTWE9WmEudHJhbnNwYXJlbnQsVi5vdmVycmlkZU1hdGVyaWFsPyhXYT1WLm92ZXJyaWRlTWF0ZXJpYWwsb2EubGVuZ3RoJiZSKG9hLFYsZGEsV2EpLE1hLmxlbmd0aCYmUihNYSxWLGRhLFdhKSk6KG9hLmxlbmd0aCYmUihvYSxWLGRhKSxNYS5sZW5ndGgmJlIoTWEsVixkYSkpLG51bGwhPT1PYSYmKFBjLnVwZGF0ZVJlbmRlclRhcmdldE1pcG1hcChPYSksUGMudXBkYXRlTXVsdGlzYW1wbGVSZW5kZXJUYXJnZXQoT2EpKSxCYi5idWZmZXJzLmRlcHRoLnNldFRlc3QoITApLEJiLmJ1ZmZlcnMuZGVwdGguc2V0TWFzayghMCksQmIuYnVmZmVycy5jb2xvci5zZXRNYXNrKCEwKSxCYi5zZXRQb2x5Z29uT2Zmc2V0KCExKSwKeGQuZW5hYmxlZCYmeGQuc3VibWl0RnJhbWUoKSxUYT1aYT1udWxsKTpjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFJlbmRlcmVyLnJlbmRlcjogY2FtZXJhIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBUSFJFRS5DYW1lcmEuIil9O3RoaXMuc2V0RnJhbWVidWZmZXI9ZnVuY3Rpb24oVil7SWE9Vn07dGhpcy5nZXRSZW5kZXJUYXJnZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gT2F9O3RoaXMuc2V0UmVuZGVyVGFyZ2V0PWZ1bmN0aW9uKFYsZGEpeyhPYT1WKSYmdm9pZCAwPT09dmMuZ2V0KFYpLl9fd2ViZ2xGcmFtZWJ1ZmZlciYmUGMuc2V0dXBSZW5kZXJUYXJnZXQoVik7dmFyIG9hPUlhLE1hPSExO1Y/KG9hPXZjLmdldChWKS5fX3dlYmdsRnJhbWVidWZmZXIsVi5pc1dlYkdMUmVuZGVyVGFyZ2V0Q3ViZT8ob2E9b2FbZGF8fDBdLE1hPSEwKTpvYT1WLmlzV2ViR0xNdWx0aXNhbXBsZVJlbmRlclRhcmdldD92Yy5nZXQoVikuX193ZWJnbE11bHRpc2FtcGxlZEZyYW1lYnVmZmVyOm9hLHBiLmNvcHkoVi52aWV3cG9ydCksCnZiLmNvcHkoVi5zY2lzc29yKSxBYj1WLnNjaXNzb3JUZXN0KToocGIuY29weSh3ZCkubXVsdGlwbHlTY2FsYXIoUmIpLHZiLmNvcHkodmQpLm11bHRpcGx5U2NhbGFyKFJiKSxBYj14aSk7dWIhPT1vYSYmKFlhLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxvYSksdWI9b2EpO0JiLnZpZXdwb3J0KHBiKTtCYi5zY2lzc29yKHZiKTtCYi5zZXRTY2lzc29yVGVzdChBYik7TWEmJihWPXZjLmdldChWLnRleHR1cmUpLFlhLmZyYW1lYnVmZmVyVGV4dHVyZTJEKDM2MTYwLDM2MDY0LDM0MDY5KyhkYXx8MCksVi5fX3dlYmdsVGV4dHVyZSwwKSl9O3RoaXMucmVhZFJlbmRlclRhcmdldFBpeGVscz1mdW5jdGlvbihWLGRhLG9hLE1hLFdhLFJhKXtpZihWJiZWLmlzV2ViR0xSZW5kZXJUYXJnZXQpe3ZhciBYYT12Yy5nZXQoVikuX193ZWJnbEZyYW1lYnVmZmVyO2lmKFhhKXt2YXIgJGE9ITE7WGEhPT11YiYmKFlhLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxYYSksJGE9ITApO3RyeXt2YXIgRmI9Vi50ZXh0dXJlLApyYj1GYi5mb3JtYXQsZ2I9RmIudHlwZTsxMDIzIT09cmImJmtkLmNvbnZlcnQocmIpIT09WWEuZ2V0UGFyYW1ldGVyKDM1NzM5KT9jb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFJlbmRlcmVyLnJlYWRSZW5kZXJUYXJnZXRQaXhlbHM6IHJlbmRlclRhcmdldCBpcyBub3QgaW4gUkdCQSBvciBpbXBsZW1lbnRhdGlvbiBkZWZpbmVkIGZvcm1hdC4iKToxMDA5PT09Z2J8fGtkLmNvbnZlcnQoZ2IpPT09WWEuZ2V0UGFyYW1ldGVyKDM1NzM4KXx8MTAxNT09PWdiJiYodWMuaXNXZWJHTDJ8fFZiLmdldCgiT0VTX3RleHR1cmVfZmxvYXQiKXx8VmIuZ2V0KCJXRUJHTF9jb2xvcl9idWZmZXJfZmxvYXQiKSl8fDEwMTY9PT1nYiYmKHVjLmlzV2ViR0wyP1ZiLmdldCgiRVhUX2NvbG9yX2J1ZmZlcl9mbG9hdCIpOlZiLmdldCgiRVhUX2NvbG9yX2J1ZmZlcl9oYWxmX2Zsb2F0IikpPzM2MDUzPT09WWEuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cygzNjE2MCk/MDw9ZGEmJmRhPD1WLndpZHRoLU1hJiYKMDw9b2EmJm9hPD1WLmhlaWdodC1XYSYmWWEucmVhZFBpeGVscyhkYSxvYSxNYSxXYSxrZC5jb252ZXJ0KHJiKSxrZC5jb252ZXJ0KGdiKSxSYSk6Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xSZW5kZXJlci5yZWFkUmVuZGVyVGFyZ2V0UGl4ZWxzOiByZWFkUGl4ZWxzIGZyb20gcmVuZGVyVGFyZ2V0IGZhaWxlZC4gRnJhbWVidWZmZXIgbm90IGNvbXBsZXRlLiIpOmNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMUmVuZGVyZXIucmVhZFJlbmRlclRhcmdldFBpeGVsczogcmVuZGVyVGFyZ2V0IGlzIG5vdCBpbiBVbnNpZ25lZEJ5dGVUeXBlIG9yIGltcGxlbWVudGF0aW9uIGRlZmluZWQgdHlwZS4iKX1maW5hbGx5eyRhJiZZYS5iaW5kRnJhbWVidWZmZXIoMzYxNjAsdWIpfX19ZWxzZSBjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFJlbmRlcmVyLnJlYWRSZW5kZXJUYXJnZXRQaXhlbHM6IHJlbmRlclRhcmdldCBpcyBub3QgVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQuIil9O3RoaXMuY29weUZyYW1lYnVmZmVyVG9UZXh0dXJlPQpmdW5jdGlvbihWLGRhLG9hKXt2YXIgTWE9ZGEuaW1hZ2Uud2lkdGgsV2E9ZGEuaW1hZ2UuaGVpZ2h0LFJhPWtkLmNvbnZlcnQoZGEuZm9ybWF0KTtQYy5zZXRUZXh0dXJlMkQoZGEsMCk7WWEuY29weVRleEltYWdlMkQoMzU1MyxvYXx8MCxSYSxWLngsVi55LE1hLFdhLDApfTt0aGlzLmNvcHlUZXh0dXJlVG9UZXh0dXJlPWZ1bmN0aW9uKFYsZGEsb2EsTWEpe3ZhciBXYT1kYS5pbWFnZS53aWR0aCxSYT1kYS5pbWFnZS5oZWlnaHQsWGE9a2QuY29udmVydChvYS5mb3JtYXQpLCRhPWtkLmNvbnZlcnQob2EudHlwZSk7UGMuc2V0VGV4dHVyZTJEKG9hLDApO2RhLmlzRGF0YVRleHR1cmU/WWEudGV4U3ViSW1hZ2UyRCgzNTUzLE1hfHwwLFYueCxWLnksV2EsUmEsWGEsJGEsZGEuaW1hZ2UuZGF0YSk6WWEudGV4U3ViSW1hZ2UyRCgzNTUzLE1hfHwwLFYueCxWLnksWGEsJGEsZGEuaW1hZ2UpfX1mdW5jdGlvbiBnaChiLGUpe3RoaXMubmFtZT0iIjt0aGlzLmNvbG9yPW5ldyBCKGIpO3RoaXMuZGVuc2l0eT0Kdm9pZCAwIT09ZT9lOjIuNUUtNH1mdW5jdGlvbiBoaChiLGUsaCl7dGhpcy5uYW1lPSIiO3RoaXMuY29sb3I9bmV3IEIoYik7dGhpcy5uZWFyPXZvaWQgMCE9PWU/ZToxO3RoaXMuZmFyPXZvaWQgMCE9PWg/aDoxRTN9ZnVuY3Rpb24gaWgoKXtTLmNhbGwodGhpcyk7dGhpcy50eXBlPSJTY2VuZSI7dGhpcy5vdmVycmlkZU1hdGVyaWFsPXRoaXMuZm9nPXRoaXMuYmFja2dyb3VuZD1udWxsO3RoaXMuYXV0b1VwZGF0ZT0hMH1mdW5jdGlvbiBoZShiLGUpe3RoaXMuYXJyYXk9Yjt0aGlzLnN0cmlkZT1lO3RoaXMuY291bnQ9dm9pZCAwIT09Yj9iLmxlbmd0aC9lOjA7dGhpcy5keW5hbWljPSExO3RoaXMudXBkYXRlUmFuZ2U9e29mZnNldDowLGNvdW50Oi0xfTt0aGlzLnZlcnNpb249MH1mdW5jdGlvbiBSZihiLGUsaCxuKXt0aGlzLmRhdGE9Yjt0aGlzLml0ZW1TaXplPWU7dGhpcy5vZmZzZXQ9aDt0aGlzLm5vcm1hbGl6ZWQ9ITA9PT1ufWZ1bmN0aW9uIFZkKGIpe0dhLmNhbGwodGhpcyk7CnRoaXMudHlwZT0iU3ByaXRlTWF0ZXJpYWwiO3RoaXMuY29sb3I9bmV3IEIoMTY3NzcyMTUpO3RoaXMubWFwPW51bGw7dGhpcy5yb3RhdGlvbj0wO3RoaXMuc2l6ZUF0dGVudWF0aW9uPSEwO3RoaXMubGlnaHRzPSExO3RoaXMudHJhbnNwYXJlbnQ9ITA7dGhpcy5zZXRWYWx1ZXMoYil9ZnVuY3Rpb24gU2YoYil7Uy5jYWxsKHRoaXMpO3RoaXMudHlwZT0iU3ByaXRlIjtpZih2b2lkIDA9PT1RZSl7UWU9bmV3IHhhO3ZhciBlPW5ldyBoZShuZXcgRmxvYXQzMkFycmF5KFstLjUsLS41LDAsMCwwLC41LC0uNSwwLDEsMCwuNSwuNSwwLDEsMSwtLjUsLjUsMCwwLDFdKSw1KTtRZS5zZXRJbmRleChbMCwxLDIsMCwyLDNdKTtRZS5hZGRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgUmYoZSwzLDAsITEpKTtRZS5hZGRBdHRyaWJ1dGUoInV2IixuZXcgUmYoZSwyLDMsITEpKX10aGlzLmdlb21ldHJ5PVFlO3RoaXMubWF0ZXJpYWw9dm9pZCAwIT09Yj9iOm5ldyBWZDt0aGlzLmNlbnRlcj1uZXcgZCguNSwKLjUpfWZ1bmN0aW9uIFRmKCl7Uy5jYWxsKHRoaXMpO3RoaXMudHlwZT0iTE9EIjtPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0aGlzLHtsZXZlbHM6e2VudW1lcmFibGU6ITAsdmFsdWU6W119fSl9ZnVuY3Rpb24gVWYoYixlKXtiJiZiLmlzR2VvbWV0cnkmJmNvbnNvbGUuZXJyb3IoIlRIUkVFLlNraW5uZWRNZXNoIG5vIGxvbmdlciBzdXBwb3J0cyBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIik7dGIuY2FsbCh0aGlzLGIsZSk7dGhpcy50eXBlPSJTa2lubmVkTWVzaCI7dGhpcy5iaW5kTW9kZT0iYXR0YWNoZWQiO3RoaXMuYmluZE1hdHJpeD1uZXcgQzt0aGlzLmJpbmRNYXRyaXhJbnZlcnNlPW5ldyBDfWZ1bmN0aW9uIGpoKGIsZSl7Yj1ifHxbXTt0aGlzLmJvbmVzPWIuc2xpY2UoMCk7dGhpcy5ib25lTWF0cmljZXM9bmV3IEZsb2F0MzJBcnJheSgxNip0aGlzLmJvbmVzLmxlbmd0aCk7aWYodm9pZCAwPT09ZSl0aGlzLmNhbGN1bGF0ZUludmVyc2VzKCk7CmVsc2UgaWYodGhpcy5ib25lcy5sZW5ndGg9PT1lLmxlbmd0aCl0aGlzLmJvbmVJbnZlcnNlcz1lLnNsaWNlKDApO2Vsc2UgZm9yKGNvbnNvbGUud2FybigiVEhSRUUuU2tlbGV0b24gYm9uZUludmVyc2VzIGlzIHRoZSB3cm9uZyBsZW5ndGguIiksdGhpcy5ib25lSW52ZXJzZXM9W10sYj0wLGU9dGhpcy5ib25lcy5sZW5ndGg7YjxlO2IrKyl0aGlzLmJvbmVJbnZlcnNlcy5wdXNoKG5ldyBDKX1mdW5jdGlvbiB6aSgpe1MuY2FsbCh0aGlzKTt0aGlzLnR5cGU9IkJvbmUifWZ1bmN0aW9uIExiKGIpe0dhLmNhbGwodGhpcyk7dGhpcy50eXBlPSJMaW5lQmFzaWNNYXRlcmlhbCI7dGhpcy5jb2xvcj1uZXcgQigxNjc3NzIxNSk7dGhpcy5saW5ld2lkdGg9MTt0aGlzLmxpbmVqb2luPXRoaXMubGluZWNhcD0icm91bmQiO3RoaXMubGlnaHRzPSExO3RoaXMuc2V0VmFsdWVzKGIpfWZ1bmN0aW9uIGxjKGIsZSxoKXsxPT09aCYmY29uc29sZS5lcnJvcigiVEhSRUUuTGluZTogcGFyYW1ldGVyIFRIUkVFLkxpbmVQaWVjZXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC4gVXNlIFRIUkVFLkxpbmVTZWdtZW50cyBpbnN0ZWFkLiIpOwpTLmNhbGwodGhpcyk7dGhpcy50eXBlPSJMaW5lIjt0aGlzLmdlb21ldHJ5PXZvaWQgMCE9PWI/YjpuZXcgeGE7dGhpcy5tYXRlcmlhbD12b2lkIDAhPT1lP2U6bmV3IExiKHtjb2xvcjoxNjc3NzIxNSpNYXRoLnJhbmRvbSgpfSl9ZnVuY3Rpb24gUGIoYixlKXtsYy5jYWxsKHRoaXMsYixlKTt0aGlzLnR5cGU9IkxpbmVTZWdtZW50cyJ9ZnVuY3Rpb24ga2goYixlKXtsYy5jYWxsKHRoaXMsYixlKTt0aGlzLnR5cGU9IkxpbmVMb29wIn1mdW5jdGlvbiBTYyhiKXtHYS5jYWxsKHRoaXMpO3RoaXMudHlwZT0iUG9pbnRzTWF0ZXJpYWwiO3RoaXMuY29sb3I9bmV3IEIoMTY3NzcyMTUpO3RoaXMubWFwPW51bGw7dGhpcy5zaXplPTE7dGhpcy5zaXplQXR0ZW51YXRpb249ITA7dGhpcy5saWdodHM9dGhpcy5tb3JwaFRhcmdldHM9ITE7dGhpcy5zZXRWYWx1ZXMoYil9ZnVuY3Rpb24gUmUoYixlKXtTLmNhbGwodGhpcyk7dGhpcy50eXBlPSJQb2ludHMiO3RoaXMuZ2VvbWV0cnk9dm9pZCAwIT09CmI/YjpuZXcgeGE7dGhpcy5tYXRlcmlhbD12b2lkIDAhPT1lP2U6bmV3IFNjKHtjb2xvcjoxNjc3NzIxNSpNYXRoLnJhbmRvbSgpfSl9ZnVuY3Rpb24gQWkoYixlLGgsbix1LHcseixFLEgpe2suY2FsbCh0aGlzLGIsZSxoLG4sdSx3LHosRSxIKTt0aGlzLmZvcm1hdD12b2lkIDAhPT16P3o6MTAyMjt0aGlzLm1pbkZpbHRlcj12b2lkIDAhPT13P3c6MTAwNjt0aGlzLm1hZ0ZpbHRlcj12b2lkIDAhPT11P3U6MTAwNjt0aGlzLmdlbmVyYXRlTWlwbWFwcz0hMX1mdW5jdGlvbiBTZShiLGUsaCxuLHUsdyx6LEUsSCxJLE8sUSl7ay5jYWxsKHRoaXMsbnVsbCx3LHosRSxILEksbix1LE8sUSk7dGhpcy5pbWFnZT17d2lkdGg6ZSxoZWlnaHQ6aH07dGhpcy5taXBtYXBzPWI7dGhpcy5nZW5lcmF0ZU1pcG1hcHM9dGhpcy5mbGlwWT0hMX1mdW5jdGlvbiBWZihiLGUsaCxuLHUsdyx6LEUsSCl7ay5jYWxsKHRoaXMsYixlLGgsbix1LHcseixFLEgpO3RoaXMubmVlZHNVcGRhdGU9ITB9ZnVuY3Rpb24gV2YoYiwKZSxoLG4sdSx3LHosRSxILEkpe0k9dm9pZCAwIT09ST9JOjEwMjY7aWYoMTAyNiE9PUkmJjEwMjchPT1JKXRocm93IEVycm9yKCJEZXB0aFRleHR1cmUgZm9ybWF0IG11c3QgYmUgZWl0aGVyIFRIUkVFLkRlcHRoRm9ybWF0IG9yIFRIUkVFLkRlcHRoU3RlbmNpbEZvcm1hdCIpO3ZvaWQgMD09PWgmJjEwMjY9PT1JJiYoaD0xMDEyKTt2b2lkIDA9PT1oJiYxMDI3PT09SSYmKGg9MTAyMCk7ay5jYWxsKHRoaXMsbnVsbCxuLHUsdyx6LEUsSSxoLEgpO3RoaXMuaW1hZ2U9e3dpZHRoOmIsaGVpZ2h0OmV9O3RoaXMubWFnRmlsdGVyPXZvaWQgMCE9PXo/ejoxMDAzO3RoaXMubWluRmlsdGVyPXZvaWQgMCE9PUU/RToxMDAzO3RoaXMuZ2VuZXJhdGVNaXBtYXBzPXRoaXMuZmxpcFk9ITF9ZnVuY3Rpb24gVGUoYil7eGEuY2FsbCh0aGlzKTt0aGlzLnR5cGU9IldpcmVmcmFtZUdlb21ldHJ5Ijt2YXIgZT1bXSxoLG4sdSx3PVswLDBdLHo9e30sRT1bImEiLCJiIiwiYyJdO2lmKGImJmIuaXNHZW9tZXRyeSl7dmFyIEg9CmIuZmFjZXM7dmFyIEk9MDtmb3Iobj1ILmxlbmd0aDtJPG47SSsrKXt2YXIgTz1IW0ldO2ZvcihoPTA7Mz5oO2grKyl7dmFyIFE9T1tFW2hdXTt2YXIgUj1PW0VbKGgrMSklM11dO3dbMF09TWF0aC5taW4oUSxSKTt3WzFdPU1hdGgubWF4KFEsUik7UT13WzBdKyIsIit3WzFdO3ZvaWQgMD09PXpbUV0mJih6W1FdPXtpbmRleDE6d1swXSxpbmRleDI6d1sxXX0pfX1mb3IoUSBpbiB6KUk9eltRXSxFPWIudmVydGljZXNbSS5pbmRleDFdLGUucHVzaChFLngsRS55LEUueiksRT1iLnZlcnRpY2VzW0kuaW5kZXgyXSxlLnB1c2goRS54LEUueSxFLnopfWVsc2UgaWYoYiYmYi5pc0J1ZmZlckdlb21ldHJ5KWlmKEU9bmV3IGcsbnVsbCE9PWIuaW5kZXgpe0g9Yi5hdHRyaWJ1dGVzLnBvc2l0aW9uO089Yi5pbmRleDt2YXIgVT1iLmdyb3VwczswPT09VS5sZW5ndGgmJihVPVt7c3RhcnQ6MCxjb3VudDpPLmNvdW50LG1hdGVyaWFsSW5kZXg6MH1dKTtiPTA7Zm9yKHU9VS5sZW5ndGg7Yjx1OysrYilmb3IoST0KVVtiXSxoPUkuc3RhcnQsbj1JLmNvdW50LEk9aCxuPWgrbjtJPG47SSs9Mylmb3IoaD0wOzM+aDtoKyspUT1PLmdldFgoSStoKSxSPU8uZ2V0WChJKyhoKzEpJTMpLHdbMF09TWF0aC5taW4oUSxSKSx3WzFdPU1hdGgubWF4KFEsUiksUT13WzBdKyIsIit3WzFdLHZvaWQgMD09PXpbUV0mJih6W1FdPXtpbmRleDE6d1swXSxpbmRleDI6d1sxXX0pO2ZvcihRIGluIHopST16W1FdLEUuZnJvbUJ1ZmZlckF0dHJpYnV0ZShILEkuaW5kZXgxKSxlLnB1c2goRS54LEUueSxFLnopLEUuZnJvbUJ1ZmZlckF0dHJpYnV0ZShILEkuaW5kZXgyKSxlLnB1c2goRS54LEUueSxFLnopfWVsc2UgZm9yKEg9Yi5hdHRyaWJ1dGVzLnBvc2l0aW9uLEk9MCxuPUguY291bnQvMztJPG47SSsrKWZvcihoPTA7Mz5oO2grKyl6PTMqSStoLEUuZnJvbUJ1ZmZlckF0dHJpYnV0ZShILHopLGUucHVzaChFLngsRS55LEUueiksej0zKkkrKGgrMSklMyxFLmZyb21CdWZmZXJBdHRyaWJ1dGUoSCx6KSxlLnB1c2goRS54LApFLnksRS56KTt0aGlzLmFkZEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBiYShlLDMpKX1mdW5jdGlvbiBYZihiLGUsaCl7Ti5jYWxsKHRoaXMpO3RoaXMudHlwZT0iUGFyYW1ldHJpY0dlb21ldHJ5Ijt0aGlzLnBhcmFtZXRlcnM9e2Z1bmM6YixzbGljZXM6ZSxzdGFja3M6aH07dGhpcy5mcm9tQnVmZmVyR2VvbWV0cnkobmV3IFVlKGIsZSxoKSk7dGhpcy5tZXJnZVZlcnRpY2VzKCl9ZnVuY3Rpb24gVWUoYixlLGgpe3hhLmNhbGwodGhpcyk7dGhpcy50eXBlPSJQYXJhbWV0cmljQnVmZmVyR2VvbWV0cnkiO3RoaXMucGFyYW1ldGVycz17ZnVuYzpiLHNsaWNlczplLHN0YWNrczpofTt2YXIgbj1bXSx1PVtdLHc9W10sej1bXSxFPW5ldyBnLEg9bmV3IGcsST1uZXcgZyxPPW5ldyBnLFE9bmV3IGcsUixVOzM+Yi5sZW5ndGgmJmNvbnNvbGUuZXJyb3IoIlRIUkVFLlBhcmFtZXRyaWNHZW9tZXRyeTogRnVuY3Rpb24gbXVzdCBub3cgbW9kaWZ5IGEgVmVjdG9yMyBhcyB0aGlyZCBwYXJhbWV0ZXIuIik7CnZhciBXPWUrMTtmb3IoUj0wO1I8PWg7UisrKXt2YXIgWj1SL2g7Zm9yKFU9MDtVPD1lO1UrKyl7dmFyIGZhPVUvZTtiKGZhLFosSCk7dS5wdXNoKEgueCxILnksSC56KTswPD1mYS0xRS01PyhiKGZhLTFFLTUsWixJKSxPLnN1YlZlY3RvcnMoSCxJKSk6KGIoZmErMUUtNSxaLEkpLE8uc3ViVmVjdG9ycyhJLEgpKTswPD1aLTFFLTU/KGIoZmEsWi0xRS01LEkpLFEuc3ViVmVjdG9ycyhILEkpKTooYihmYSxaKzFFLTUsSSksUS5zdWJWZWN0b3JzKEksSCkpO0UuY3Jvc3NWZWN0b3JzKE8sUSkubm9ybWFsaXplKCk7dy5wdXNoKEUueCxFLnksRS56KTt6LnB1c2goZmEsWil9fWZvcihSPTA7UjxoO1IrKylmb3IoVT0wO1U8ZTtVKyspYj1SKlcrVSsxLEU9KFIrMSkqVytVKzEsSD0oUisxKSpXK1Usbi5wdXNoKFIqVytVLGIsSCksbi5wdXNoKGIsRSxIKTt0aGlzLnNldEluZGV4KG4pO3RoaXMuYWRkQXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IGJhKHUsMykpO3RoaXMuYWRkQXR0cmlidXRlKCJub3JtYWwiLApuZXcgYmEodywzKSk7dGhpcy5hZGRBdHRyaWJ1dGUoInV2IixuZXcgYmEoeiwyKSl9ZnVuY3Rpb24gWWYoYixlLGgsbil7Ti5jYWxsKHRoaXMpO3RoaXMudHlwZT0iUG9seWhlZHJvbkdlb21ldHJ5Ijt0aGlzLnBhcmFtZXRlcnM9e3ZlcnRpY2VzOmIsaW5kaWNlczplLHJhZGl1czpoLGRldGFpbDpufTt0aGlzLmZyb21CdWZmZXJHZW9tZXRyeShuZXcgemMoYixlLGgsbikpO3RoaXMubWVyZ2VWZXJ0aWNlcygpfWZ1bmN0aW9uIHpjKGIsZSxoLG4pe2Z1bmN0aW9uIHUoVyxaLGZhLHFhKXtxYT1NYXRoLnBvdygyLHFhKTt2YXIgcmE9W10saWEsdGE7Zm9yKGlhPTA7aWE8PXFhO2lhKyspe3JhW2lhXT1bXTt2YXIgbmE9Vy5jbG9uZSgpLmxlcnAoZmEsaWEvcWEpLHZhPVouY2xvbmUoKS5sZXJwKGZhLGlhL3FhKSxCYT1xYS1pYTtmb3IodGE9MDt0YTw9QmE7dGErKylyYVtpYV1bdGFdPTA9PT10YSYmaWE9PT1xYT9uYTpuYS5jbG9uZSgpLmxlcnAodmEsdGEvQmEpfWZvcihpYT0wO2lhPHFhO2lhKyspZm9yKHRhPQowO3RhPDIqKHFhLWlhKS0xO3RhKyspVz1NYXRoLmZsb29yKHRhLzIpLDA9PT10YSUyPyh6KHJhW2lhXVtXKzFdKSx6KHJhW2lhKzFdW1ddKSx6KHJhW2lhXVtXXSkpOih6KHJhW2lhXVtXKzFdKSx6KHJhW2lhKzFdW1crMV0pLHoocmFbaWErMV1bV10pKX1mdW5jdGlvbiB3KCl7Zm9yKHZhciBXPTA7VzxVLmxlbmd0aDtXKz02KXt2YXIgWj1VW1crMF0sZmE9VVtXKzJdLHFhPVVbVys0XSxyYT1NYXRoLm1pbihaLGZhLHFhKTsuOTxNYXRoLm1heChaLGZhLHFhKSYmLjE+cmEmJiguMj5aJiYoVVtXKzBdKz0xKSwuMj5mYSYmKFVbVysyXSs9MSksLjI+cWEmJihVW1crNF0rPTEpKX19ZnVuY3Rpb24geihXKXtSLnB1c2goVy54LFcueSxXLnopfWZ1bmN0aW9uIEUoVyxaKXtXKj0zO1oueD1iW1crMF07Wi55PWJbVysxXTtaLno9YltXKzJdfWZ1bmN0aW9uIEgoKXtmb3IodmFyIFc9bmV3IGcsWj1uZXcgZyxmYT1uZXcgZyxxYT1uZXcgZyxyYT1uZXcgZCxpYT1uZXcgZCx0YT1uZXcgZCxuYT0KMCx2YT0wO25hPFIubGVuZ3RoO25hKz05LHZhKz02KXtXLnNldChSW25hKzBdLFJbbmErMV0sUltuYSsyXSk7Wi5zZXQoUltuYSszXSxSW25hKzRdLFJbbmErNV0pO2ZhLnNldChSW25hKzZdLFJbbmErN10sUltuYSs4XSk7cmEuc2V0KFVbdmErMF0sVVt2YSsxXSk7aWEuc2V0KFVbdmErMl0sVVt2YSszXSk7dGEuc2V0KFVbdmErNF0sVVt2YSs1XSk7cWEuY29weShXKS5hZGQoWikuYWRkKGZhKS5kaXZpZGVTY2FsYXIoMyk7dmFyIEJhPU8ocWEpO0kocmEsdmErMCxXLEJhKTtJKGlhLHZhKzIsWixCYSk7SSh0YSx2YSs0LGZhLEJhKX19ZnVuY3Rpb24gSShXLFosZmEscWEpezA+cWEmJjE9PT1XLngmJihVW1pdPVcueC0xKTswPT09ZmEueCYmMD09PWZhLnomJihVW1pdPXFhLzIvTWF0aC5QSSsuNSl9ZnVuY3Rpb24gTyhXKXtyZXR1cm4gTWF0aC5hdGFuMihXLnosLVcueCl9ZnVuY3Rpb24gUShXKXtyZXR1cm4gTWF0aC5hdGFuMigtVy55LE1hdGguc3FydChXLngqVy54K1cueipXLnopKX0KeGEuY2FsbCh0aGlzKTt0aGlzLnR5cGU9IlBvbHloZWRyb25CdWZmZXJHZW9tZXRyeSI7dGhpcy5wYXJhbWV0ZXJzPXt2ZXJ0aWNlczpiLGluZGljZXM6ZSxyYWRpdXM6aCxkZXRhaWw6bn07aD1ofHwxO249bnx8MDt2YXIgUj1bXSxVPVtdOyhmdW5jdGlvbihXKXtmb3IodmFyIFo9bmV3IGcsZmE9bmV3IGcscWE9bmV3IGcscmE9MDtyYTxlLmxlbmd0aDtyYSs9MylFKGVbcmErMF0sWiksRShlW3JhKzFdLGZhKSxFKGVbcmErMl0scWEpLHUoWixmYSxxYSxXKX0pKG4pOyhmdW5jdGlvbihXKXtmb3IodmFyIFo9bmV3IGcsZmE9MDtmYTxSLmxlbmd0aDtmYSs9MylaLng9UltmYSswXSxaLnk9UltmYSsxXSxaLno9UltmYSsyXSxaLm5vcm1hbGl6ZSgpLm11bHRpcGx5U2NhbGFyKFcpLFJbZmErMF09Wi54LFJbZmErMV09Wi55LFJbZmErMl09Wi56fSkoaCk7KGZ1bmN0aW9uKCl7Zm9yKHZhciBXPW5ldyBnLFo9MDtaPFIubGVuZ3RoO1orPTMpe1cueD1SW1orMF07Vy55PVJbWisxXTtXLno9ClJbWisyXTt2YXIgZmE9TyhXKS8yL01hdGguUEkrLjUscWE9UShXKS9NYXRoLlBJKy41O1UucHVzaChmYSwxLXFhKX1IKCk7dygpfSkoKTt0aGlzLmFkZEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBiYShSLDMpKTt0aGlzLmFkZEF0dHJpYnV0ZSgibm9ybWFsIixuZXcgYmEoUi5zbGljZSgpLDMpKTt0aGlzLmFkZEF0dHJpYnV0ZSgidXYiLG5ldyBiYShVLDIpKTswPT09bj90aGlzLmNvbXB1dGVWZXJ0ZXhOb3JtYWxzKCk6dGhpcy5ub3JtYWxpemVOb3JtYWxzKCl9ZnVuY3Rpb24gWmYoYixlKXtOLmNhbGwodGhpcyk7dGhpcy50eXBlPSJUZXRyYWhlZHJvbkdlb21ldHJ5Ijt0aGlzLnBhcmFtZXRlcnM9e3JhZGl1czpiLGRldGFpbDplfTt0aGlzLmZyb21CdWZmZXJHZW9tZXRyeShuZXcgVmUoYixlKSk7dGhpcy5tZXJnZVZlcnRpY2VzKCl9ZnVuY3Rpb24gVmUoYixlKXt6Yy5jYWxsKHRoaXMsWzEsMSwxLC0xLC0xLDEsLTEsMSwtMSwxLC0xLC0xXSxbMiwxLDAsMCwzLDIsMSwzLDAsMiwKMywxXSxiLGUpO3RoaXMudHlwZT0iVGV0cmFoZWRyb25CdWZmZXJHZW9tZXRyeSI7dGhpcy5wYXJhbWV0ZXJzPXtyYWRpdXM6YixkZXRhaWw6ZX19ZnVuY3Rpb24gJGYoYixlKXtOLmNhbGwodGhpcyk7dGhpcy50eXBlPSJPY3RhaGVkcm9uR2VvbWV0cnkiO3RoaXMucGFyYW1ldGVycz17cmFkaXVzOmIsZGV0YWlsOmV9O3RoaXMuZnJvbUJ1ZmZlckdlb21ldHJ5KG5ldyBpZShiLGUpKTt0aGlzLm1lcmdlVmVydGljZXMoKX1mdW5jdGlvbiBpZShiLGUpe3pjLmNhbGwodGhpcyxbMSwwLDAsLTEsMCwwLDAsMSwwLDAsLTEsMCwwLDAsMSwwLDAsLTFdLFswLDIsNCwwLDQsMywwLDMsNSwwLDUsMiwxLDIsNSwxLDUsMywxLDMsNCwxLDQsMl0sYixlKTt0aGlzLnR5cGU9Ik9jdGFoZWRyb25CdWZmZXJHZW9tZXRyeSI7dGhpcy5wYXJhbWV0ZXJzPXtyYWRpdXM6YixkZXRhaWw6ZX19ZnVuY3Rpb24gYWcoYixlKXtOLmNhbGwodGhpcyk7dGhpcy50eXBlPSJJY29zYWhlZHJvbkdlb21ldHJ5Ijt0aGlzLnBhcmFtZXRlcnM9CntyYWRpdXM6YixkZXRhaWw6ZX07dGhpcy5mcm9tQnVmZmVyR2VvbWV0cnkobmV3IFdlKGIsZSkpO3RoaXMubWVyZ2VWZXJ0aWNlcygpfWZ1bmN0aW9uIFdlKGIsZSl7dmFyIGg9KDErTWF0aC5zcXJ0KDUpKS8yO3pjLmNhbGwodGhpcyxbLTEsaCwwLDEsaCwwLC0xLC1oLDAsMSwtaCwwLDAsLTEsaCwwLDEsaCwwLC0xLC1oLDAsMSwtaCxoLDAsLTEsaCwwLDEsLWgsMCwtMSwtaCwwLDFdLFswLDExLDUsMCw1LDEsMCwxLDcsMCw3LDEwLDAsMTAsMTEsMSw1LDksNSwxMSw0LDExLDEwLDIsMTAsNyw2LDcsMSw4LDMsOSw0LDMsNCwyLDMsMiw2LDMsNiw4LDMsOCw5LDQsOSw1LDIsNCwxMSw2LDIsMTAsOCw2LDcsOSw4LDFdLGIsZSk7dGhpcy50eXBlPSJJY29zYWhlZHJvbkJ1ZmZlckdlb21ldHJ5Ijt0aGlzLnBhcmFtZXRlcnM9e3JhZGl1czpiLGRldGFpbDplfX1mdW5jdGlvbiBiZyhiLGUpe04uY2FsbCh0aGlzKTt0aGlzLnR5cGU9IkRvZGVjYWhlZHJvbkdlb21ldHJ5Ijt0aGlzLnBhcmFtZXRlcnM9CntyYWRpdXM6YixkZXRhaWw6ZX07dGhpcy5mcm9tQnVmZmVyR2VvbWV0cnkobmV3IFhlKGIsZSkpO3RoaXMubWVyZ2VWZXJ0aWNlcygpfWZ1bmN0aW9uIFhlKGIsZSl7dmFyIGg9KDErTWF0aC5zcXJ0KDUpKS8yLG49MS9oO3pjLmNhbGwodGhpcyxbLTEsLTEsLTEsLTEsLTEsMSwtMSwxLC0xLC0xLDEsMSwxLC0xLC0xLDEsLTEsMSwxLDEsLTEsMSwxLDEsMCwtbiwtaCwwLC1uLGgsMCxuLC1oLDAsbixoLC1uLC1oLDAsLW4saCwwLG4sLWgsMCxuLGgsMCwtaCwwLC1uLGgsMCwtbiwtaCwwLG4saCwwLG5dLFszLDExLDcsMyw3LDE1LDMsMTUsMTMsNywxOSwxNyw3LDE3LDYsNyw2LDE1LDE3LDQsOCwxNyw4LDEwLDE3LDEwLDYsOCwwLDE2LDgsMTYsMiw4LDIsMTAsMCwxMiwxLDAsMSwxOCwwLDE4LDE2LDYsMTAsMiw2LDIsMTMsNiwxMywxNSwyLDE2LDE4LDIsMTgsMywyLDMsMTMsMTgsMSw5LDE4LDksMTEsMTgsMTEsMyw0LDE0LDEyLDQsMTIsMCw0LDAsOCwxMSw5LDUsMTEsNSwxOSwxMSwKMTksNywxOSw1LDE0LDE5LDE0LDQsMTksNCwxNywxLDEyLDE0LDEsMTQsNSwxLDUsOV0sYixlKTt0aGlzLnR5cGU9IkRvZGVjYWhlZHJvbkJ1ZmZlckdlb21ldHJ5Ijt0aGlzLnBhcmFtZXRlcnM9e3JhZGl1czpiLGRldGFpbDplfX1mdW5jdGlvbiBjZyhiLGUsaCxuLHUsdyl7Ti5jYWxsKHRoaXMpO3RoaXMudHlwZT0iVHViZUdlb21ldHJ5Ijt0aGlzLnBhcmFtZXRlcnM9e3BhdGg6Yix0dWJ1bGFyU2VnbWVudHM6ZSxyYWRpdXM6aCxyYWRpYWxTZWdtZW50czpuLGNsb3NlZDp1fTt2b2lkIDAhPT13JiZjb25zb2xlLndhcm4oIlRIUkVFLlR1YmVHZW9tZXRyeTogdGFwZXIgaGFzIGJlZW4gcmVtb3ZlZC4iKTtiPW5ldyBqZShiLGUsaCxuLHUpO3RoaXMudGFuZ2VudHM9Yi50YW5nZW50czt0aGlzLm5vcm1hbHM9Yi5ub3JtYWxzO3RoaXMuYmlub3JtYWxzPWIuYmlub3JtYWxzO3RoaXMuZnJvbUJ1ZmZlckdlb21ldHJ5KGIpO3RoaXMubWVyZ2VWZXJ0aWNlcygpfWZ1bmN0aW9uIGplKGIsCmUsaCxuLHUpe2Z1bmN0aW9uIHcoaWEpe1I9Yi5nZXRQb2ludEF0KGlhL2UsUik7dmFyIHRhPUgubm9ybWFsc1tpYV07aWE9SC5iaW5vcm1hbHNbaWFdO2ZvcihXPTA7Vzw9bjtXKyspe3ZhciBuYT1XL24qTWF0aC5QSSoyLHZhPU1hdGguc2luKG5hKTtuYT0tTWF0aC5jb3MobmEpO08ueD1uYSp0YS54K3ZhKmlhLng7Ty55PW5hKnRhLnkrdmEqaWEueTtPLno9bmEqdGEueit2YSppYS56O08ubm9ybWFsaXplKCk7ZmEucHVzaChPLngsTy55LE8ueik7SS54PVIueCtoKk8ueDtJLnk9Ui55K2gqTy55O0kuej1SLnoraCpPLno7Wi5wdXNoKEkueCxJLnksSS56KX19ZnVuY3Rpb24geigpe2ZvcihXPTE7Vzw9ZTtXKyspZm9yKFU9MTtVPD1uO1UrKyl7dmFyIGlhPShuKzEpKlcrKFUtMSksdGE9KG4rMSkqVytVLG5hPShuKzEpKihXLTEpK1U7cmEucHVzaCgobisxKSooVy0xKSsoVS0xKSxpYSxuYSk7cmEucHVzaChpYSx0YSxuYSl9fWZ1bmN0aW9uIEUoKXtmb3IoVT0wO1U8PWU7VSsrKWZvcihXPQowO1c8PW47VysrKVEueD1VL2UsUS55PVcvbixxYS5wdXNoKFEueCxRLnkpfXhhLmNhbGwodGhpcyk7dGhpcy50eXBlPSJUdWJlQnVmZmVyR2VvbWV0cnkiO3RoaXMucGFyYW1ldGVycz17cGF0aDpiLHR1YnVsYXJTZWdtZW50czplLHJhZGl1czpoLHJhZGlhbFNlZ21lbnRzOm4sY2xvc2VkOnV9O2U9ZXx8NjQ7aD1ofHwxO249bnx8ODt1PXV8fCExO3ZhciBIPWIuY29tcHV0ZUZyZW5ldEZyYW1lcyhlLHUpO3RoaXMudGFuZ2VudHM9SC50YW5nZW50czt0aGlzLm5vcm1hbHM9SC5ub3JtYWxzO3RoaXMuYmlub3JtYWxzPUguYmlub3JtYWxzO3ZhciBJPW5ldyBnLE89bmV3IGcsUT1uZXcgZCxSPW5ldyBnLFUsVyxaPVtdLGZhPVtdLHFhPVtdLHJhPVtdOyhmdW5jdGlvbigpe2ZvcihVPTA7VTxlO1UrKyl3KFUpO3coITE9PT11P2U6MCk7RSgpO3ooKX0pKCk7dGhpcy5zZXRJbmRleChyYSk7dGhpcy5hZGRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgYmEoWiwzKSk7dGhpcy5hZGRBdHRyaWJ1dGUoIm5vcm1hbCIsCm5ldyBiYShmYSwzKSk7dGhpcy5hZGRBdHRyaWJ1dGUoInV2IixuZXcgYmEocWEsMikpfWZ1bmN0aW9uIGRnKGIsZSxoLG4sdSx3LHope04uY2FsbCh0aGlzKTt0aGlzLnR5cGU9IlRvcnVzS25vdEdlb21ldHJ5Ijt0aGlzLnBhcmFtZXRlcnM9e3JhZGl1czpiLHR1YmU6ZSx0dWJ1bGFyU2VnbWVudHM6aCxyYWRpYWxTZWdtZW50czpuLHA6dSxxOnd9O3ZvaWQgMCE9PXomJmNvbnNvbGUud2FybigiVEhSRUUuVG9ydXNLbm90R2VvbWV0cnk6IGhlaWdodFNjYWxlIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSAuc2NhbGUoIHgsIHksIHogKSBpbnN0ZWFkLiIpO3RoaXMuZnJvbUJ1ZmZlckdlb21ldHJ5KG5ldyBZZShiLGUsaCxuLHUsdykpO3RoaXMubWVyZ2VWZXJ0aWNlcygpfWZ1bmN0aW9uIFllKGIsZSxoLG4sdSx3KXtmdW5jdGlvbiB6KHZhLEJhLHNhLERhLEhhKXt2YXIgS2E9TWF0aC5zaW4odmEpO0JhPXNhL0JhKnZhO3NhPU1hdGguY29zKEJhKTtIYS54PURhKigyK3NhKSouNSpNYXRoLmNvcyh2YSk7CkhhLnk9RGEqKDIrc2EpKkthKi41O0hhLno9RGEqTWF0aC5zaW4oQmEpKi41fXhhLmNhbGwodGhpcyk7dGhpcy50eXBlPSJUb3J1c0tub3RCdWZmZXJHZW9tZXRyeSI7dGhpcy5wYXJhbWV0ZXJzPXtyYWRpdXM6Yix0dWJlOmUsdHVidWxhclNlZ21lbnRzOmgscmFkaWFsU2VnbWVudHM6bixwOnUscTp3fTtiPWJ8fDE7ZT1lfHwuNDtoPU1hdGguZmxvb3IoaCl8fDY0O249TWF0aC5mbG9vcihuKXx8ODt1PXV8fDI7dz13fHwzO3ZhciBFPVtdLEg9W10sST1bXSxPPVtdLFEsUj1uZXcgZyxVPW5ldyBnLFc9bmV3IGcsWj1uZXcgZyxmYT1uZXcgZyxxYT1uZXcgZyxyYT1uZXcgZztmb3IoUT0wO1E8PWg7KytRKXt2YXIgaWE9US9oKnUqTWF0aC5QSSoyO3ooaWEsdSx3LGIsVyk7eihpYSsuMDEsdSx3LGIsWik7cWEuc3ViVmVjdG9ycyhaLFcpO3JhLmFkZFZlY3RvcnMoWixXKTtmYS5jcm9zc1ZlY3RvcnMocWEscmEpO3JhLmNyb3NzVmVjdG9ycyhmYSxxYSk7ZmEubm9ybWFsaXplKCk7cmEubm9ybWFsaXplKCk7CmZvcihpYT0wO2lhPD1uOysraWEpe3ZhciB0YT1pYS9uKk1hdGguUEkqMixuYT0tZSpNYXRoLmNvcyh0YSk7dGE9ZSpNYXRoLnNpbih0YSk7Ui54PVcueCsobmEqcmEueCt0YSpmYS54KTtSLnk9Vy55KyhuYSpyYS55K3RhKmZhLnkpO1Iuej1XLnorKG5hKnJhLnordGEqZmEueik7SC5wdXNoKFIueCxSLnksUi56KTtVLnN1YlZlY3RvcnMoUixXKS5ub3JtYWxpemUoKTtJLnB1c2goVS54LFUueSxVLnopO08ucHVzaChRL2gpO08ucHVzaChpYS9uKX19Zm9yKGlhPTE7aWE8PWg7aWErKylmb3IoUT0xO1E8PW47USsrKWI9KG4rMSkqaWErKFEtMSksZT0obisxKSppYStRLHU9KG4rMSkqKGlhLTEpK1EsRS5wdXNoKChuKzEpKihpYS0xKSsoUS0xKSxiLHUpLEUucHVzaChiLGUsdSk7dGhpcy5zZXRJbmRleChFKTt0aGlzLmFkZEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBiYShILDMpKTt0aGlzLmFkZEF0dHJpYnV0ZSgibm9ybWFsIixuZXcgYmEoSSwzKSk7dGhpcy5hZGRBdHRyaWJ1dGUoInV2IiwKbmV3IGJhKE8sMikpfWZ1bmN0aW9uIGVnKGIsZSxoLG4sdSl7Ti5jYWxsKHRoaXMpO3RoaXMudHlwZT0iVG9ydXNHZW9tZXRyeSI7dGhpcy5wYXJhbWV0ZXJzPXtyYWRpdXM6Yix0dWJlOmUscmFkaWFsU2VnbWVudHM6aCx0dWJ1bGFyU2VnbWVudHM6bixhcmM6dX07dGhpcy5mcm9tQnVmZmVyR2VvbWV0cnkobmV3IFplKGIsZSxoLG4sdSkpO3RoaXMubWVyZ2VWZXJ0aWNlcygpfWZ1bmN0aW9uIFplKGIsZSxoLG4sdSl7eGEuY2FsbCh0aGlzKTt0aGlzLnR5cGU9IlRvcnVzQnVmZmVyR2VvbWV0cnkiO3RoaXMucGFyYW1ldGVycz17cmFkaXVzOmIsdHViZTplLHJhZGlhbFNlZ21lbnRzOmgsdHVidWxhclNlZ21lbnRzOm4sYXJjOnV9O2I9Ynx8MTtlPWV8fC40O2g9TWF0aC5mbG9vcihoKXx8ODtuPU1hdGguZmxvb3Iobil8fDY7dT11fHwyKk1hdGguUEk7dmFyIHc9W10sej1bXSxFPVtdLEg9W10sST1uZXcgZyxPPW5ldyBnLFE9bmV3IGcsUixVO2ZvcihSPTA7Ujw9aDtSKyspZm9yKFU9CjA7VTw9bjtVKyspe3ZhciBXPVUvbip1LFo9Ui9oKk1hdGguUEkqMjtPLng9KGIrZSpNYXRoLmNvcyhaKSkqTWF0aC5jb3MoVyk7Ty55PShiK2UqTWF0aC5jb3MoWikpKk1hdGguc2luKFcpO08uej1lKk1hdGguc2luKFopO3oucHVzaChPLngsTy55LE8ueik7SS54PWIqTWF0aC5jb3MoVyk7SS55PWIqTWF0aC5zaW4oVyk7US5zdWJWZWN0b3JzKE8sSSkubm9ybWFsaXplKCk7RS5wdXNoKFEueCxRLnksUS56KTtILnB1c2goVS9uKTtILnB1c2goUi9oKX1mb3IoUj0xO1I8PWg7UisrKWZvcihVPTE7VTw9bjtVKyspYj0obisxKSooUi0xKStVLTEsZT0obisxKSooUi0xKStVLHU9KG4rMSkqUitVLHcucHVzaCgobisxKSpSK1UtMSxiLHUpLHcucHVzaChiLGUsdSk7dGhpcy5zZXRJbmRleCh3KTt0aGlzLmFkZEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBiYSh6LDMpKTt0aGlzLmFkZEF0dHJpYnV0ZSgibm9ybWFsIixuZXcgYmEoRSwzKSk7dGhpcy5hZGRBdHRyaWJ1dGUoInV2IixuZXcgYmEoSCwKMikpfWZ1bmN0aW9uIHdsKGIsZSxoLG4sdSl7aWYodT09PTA8TG8oYixlLGgsbikpZm9yKHU9ZTt1PGg7dSs9bil2YXIgdz14bCh1LGJbdV0sYlt1KzFdLHcpO2Vsc2UgZm9yKHU9aC1uO3U+PWU7dS09bil3PXhsKHUsYlt1XSxiW3UrMV0sdyk7dyYma2Uodyx3Lm5leHQpJiYoZmcodyksdz13Lm5leHQpO3JldHVybiB3fWZ1bmN0aW9uIGdnKGIsZSl7aWYoIWIpcmV0dXJuIGI7ZXx8KGU9Yik7ZG97dmFyIGg9ITE7aWYoYi5zdGVpbmVyfHwha2UoYixiLm5leHQpJiYwIT09d2MoYi5wcmV2LGIsYi5uZXh0KSliPWIubmV4dDtlbHNle2ZnKGIpO2I9ZT1iLnByZXY7aWYoYj09PWIubmV4dClicmVhaztoPSEwfX13aGlsZShofHxiIT09ZSk7cmV0dXJuIGV9ZnVuY3Rpb24gaGcoYixlLGgsbix1LHcseil7aWYoYil7IXomJncmJk1vKGIsbix1LHcpO2Zvcih2YXIgRT1iLEgsSTtiLnByZXYhPT1iLm5leHQ7KWlmKEg9Yi5wcmV2LEk9Yi5uZXh0LHc/Tm8oYixuLHUsdyk6T28oYikpZS5wdXNoKEguaS8KaCksZS5wdXNoKGIuaS9oKSxlLnB1c2goSS5pL2gpLGZnKGIpLEU9Yj1JLm5leHQ7ZWxzZSBpZihiPUksYj09PUUpe3o/MT09PXo/KGI9UG8oYixlLGgpLGhnKGIsZSxoLG4sdSx3LDIpKToyPT09eiYmUW8oYixlLGgsbix1LHcpOmhnKGdnKGIpLGUsaCxuLHUsdywxKTticmVha319fWZ1bmN0aW9uIE9vKGIpe3ZhciBlPWIucHJldixoPWIubmV4dDtpZigwPD13YyhlLGIsaCkpcmV0dXJuITE7Zm9yKHZhciBuPWIubmV4dC5uZXh0O24hPT1iLnByZXY7KXtpZihsaChlLngsZS55LGIueCxiLnksaC54LGgueSxuLngsbi55KSYmMDw9d2Mobi5wcmV2LG4sbi5uZXh0KSlyZXR1cm4hMTtuPW4ubmV4dH1yZXR1cm4hMH1mdW5jdGlvbiBObyhiLGUsaCxuKXt2YXIgdT1iLnByZXYsdz1iLm5leHQ7aWYoMDw9d2ModSxiLHcpKXJldHVybiExO3ZhciB6PXUueD5iLng/dS54PncueD91Lng6dy54OmIueD53Lng/Yi54OncueCxFPXUueT5iLnk/dS55PncueT91Lnk6dy55OmIueT53Lnk/Yi55OncueSwKSD1CaSh1Lng8Yi54P3UueDx3Lng/dS54OncueDpiLng8dy54P2IueDp3LngsdS55PGIueT91Lnk8dy55P3UueTp3Lnk6Yi55PHcueT9iLnk6dy55LGUsaCxuKTtlPUJpKHosRSxlLGgsbik7Zm9yKGg9Yi5uZXh0WjtoJiZoLno8PWU7KXtpZihoIT09Yi5wcmV2JiZoIT09Yi5uZXh0JiZsaCh1LngsdS55LGIueCxiLnksdy54LHcueSxoLngsaC55KSYmMDw9d2MoaC5wcmV2LGgsaC5uZXh0KSlyZXR1cm4hMTtoPWgubmV4dFp9Zm9yKGg9Yi5wcmV2WjtoJiZoLno+PUg7KXtpZihoIT09Yi5wcmV2JiZoIT09Yi5uZXh0JiZsaCh1LngsdS55LGIueCxiLnksdy54LHcueSxoLngsaC55KSYmMDw9d2MoaC5wcmV2LGgsaC5uZXh0KSlyZXR1cm4hMTtoPWgucHJldlp9cmV0dXJuITB9ZnVuY3Rpb24gUG8oYixlLGgpe3ZhciBuPWI7ZG97dmFyIHU9bi5wcmV2LHc9bi5uZXh0Lm5leHQ7IWtlKHUsdykmJnlsKHUsbixuLm5leHQsdykmJmlnKHUsdykmJmlnKHcsdSkmJihlLnB1c2godS5pL2gpLGUucHVzaChuLmkvCmgpLGUucHVzaCh3LmkvaCksZmcobiksZmcobi5uZXh0KSxuPWI9dyk7bj1uLm5leHR9d2hpbGUobiE9PWIpO3JldHVybiBufWZ1bmN0aW9uIFFvKGIsZSxoLG4sdSx3KXt2YXIgej1iO2Rve2Zvcih2YXIgRT16Lm5leHQubmV4dDtFIT09ei5wcmV2Oyl7aWYoei5pIT09RS5pJiZSbyh6LEUpKXtiPXpsKHosRSk7ej1nZyh6LHoubmV4dCk7Yj1nZyhiLGIubmV4dCk7aGcoeixlLGgsbix1LHcpO2hnKGIsZSxoLG4sdSx3KTtyZXR1cm59RT1FLm5leHR9ej16Lm5leHR9d2hpbGUoeiE9PWIpfWZ1bmN0aW9uIFNvKGIsZSxoLG4pe3ZhciB1PVtdLHc7dmFyIHo9MDtmb3Iodz1lLmxlbmd0aDt6PHc7eisrKXt2YXIgRT1lW3pdKm47dmFyIEg9ejx3LTE/ZVt6KzFdKm46Yi5sZW5ndGg7RT13bChiLEUsSCxuLCExKTtFPT09RS5uZXh0JiYoRS5zdGVpbmVyPSEwKTt1LnB1c2goVG8oRSkpfXUuc29ydChVbyk7Zm9yKHo9MDt6PHUubGVuZ3RoO3orKylWbyh1W3pdLGgpLGg9Z2coaCxoLm5leHQpOwpyZXR1cm4gaH1mdW5jdGlvbiBVbyhiLGUpe3JldHVybiBiLngtZS54fWZ1bmN0aW9uIFZvKGIsZSl7aWYoZT1XbyhiLGUpKWI9emwoZSxiKSxnZyhiLGIubmV4dCl9ZnVuY3Rpb24gV28oYixlKXt2YXIgaD1lLG49Yi54LHU9Yi55LHc9LUluZmluaXR5O2Rve2lmKHU8PWgueSYmdT49aC5uZXh0LnkmJmgubmV4dC55IT09aC55KXt2YXIgej1oLngrKHUtaC55KSooaC5uZXh0LngtaC54KS8oaC5uZXh0LnktaC55KTtpZih6PD1uJiZ6Pncpe3c9ejtpZih6PT09bil7aWYodT09PWgueSlyZXR1cm4gaDtpZih1PT09aC5uZXh0LnkpcmV0dXJuIGgubmV4dH12YXIgRT1oLng8aC5uZXh0Lng/aDpoLm5leHR9fWg9aC5uZXh0fXdoaWxlKGghPT1lKTtpZighRSlyZXR1cm4gbnVsbDtpZihuPT09dylyZXR1cm4gRS5wcmV2O2U9RTt6PUUueDt2YXIgSD1FLnksST1JbmZpbml0eTtmb3IoaD1FLm5leHQ7aCE9PWU7KXtpZihuPj1oLngmJmgueD49eiYmbiE9PWgueCYmbGgodTxIP246dyx1LHosSCwKdTxIP3c6bix1LGgueCxoLnkpKXt2YXIgTz1NYXRoLmFicyh1LWgueSkvKG4taC54KTsoTzxJfHxPPT09SSYmaC54PkUueCkmJmlnKGgsYikmJihFPWgsST1PKX1oPWgubmV4dH1yZXR1cm4gRX1mdW5jdGlvbiBNbyhiLGUsaCxuKXt2YXIgdT1iO2RvIG51bGw9PT11LnomJih1Lno9QmkodS54LHUueSxlLGgsbikpLHUucHJldlo9dS5wcmV2LHU9dS5uZXh0Wj11Lm5leHQ7d2hpbGUodSE9PWIpO3UucHJldloubmV4dFo9bnVsbDt1LnByZXZaPW51bGw7WG8odSl9ZnVuY3Rpb24gWG8oYil7dmFyIGUsaCxuLHUsdz0xO2Rve3ZhciB6PWI7dmFyIEU9Yj1udWxsO2ZvcihoPTA7ejspe2grKzt2YXIgSD16O2ZvcihlPW49MDtlPHcmJihuKyssSD1ILm5leHRaLEgpO2UrKyk7Zm9yKHU9dzswPG58fDA8dSYmSDspMCE9PW4mJigwPT09dXx8IUh8fHouejw9SC56KT8oZT16LHo9ei5uZXh0WixuLS0pOihlPUgsSD1ILm5leHRaLHUtLSksRT9FLm5leHRaPWU6Yj1lLGUucHJldlo9RSxFPWU7ej1IfUUubmV4dFo9Cm51bGw7dyo9Mn13aGlsZSgxPGgpO3JldHVybiBifWZ1bmN0aW9uIEJpKGIsZSxoLG4sdSl7Yj0zMjc2NyooYi1oKSp1O2U9MzI3NjcqKGUtbikqdTtiPShifGI8PDgpJjE2NzExOTM1O2I9KGJ8Yjw8NCkmMjUyNjQ1MTM1O2I9KGJ8Yjw8MikmODU4OTkzNDU5O2U9KGV8ZTw8OCkmMTY3MTE5MzU7ZT0oZXxlPDw0KSYyNTI2NDUxMzU7ZT0oZXxlPDwyKSY4NTg5OTM0NTk7cmV0dXJuKGJ8Yjw8MSkmMTQzMTY1NTc2NXwoKGV8ZTw8MSkmMTQzMTY1NTc2NSk8PDF9ZnVuY3Rpb24gVG8oYil7dmFyIGU9YixoPWI7ZG8gZS54PGgueCYmKGg9ZSksZT1lLm5leHQ7d2hpbGUoZSE9PWIpO3JldHVybiBofWZ1bmN0aW9uIGxoKGIsZSxoLG4sdSx3LHosRSl7cmV0dXJuIDA8PSh1LXopKihlLUUpLShiLXopKih3LUUpJiYwPD0oYi16KSoobi1FKS0oaC16KSooZS1FKSYmMDw9KGgteikqKHctRSktKHUteikqKG4tRSl9ZnVuY3Rpb24gUm8oYixlKXtyZXR1cm4gYi5uZXh0LmkhPT1lLmkmJmIucHJldi5pIT09CmUuaSYmIVlvKGIsZSkmJmlnKGIsZSkmJmlnKGUsYikmJlpvKGIsZSl9ZnVuY3Rpb24gd2MoYixlLGgpe3JldHVybihlLnktYi55KSooaC54LWUueCktKGUueC1iLngpKihoLnktZS55KX1mdW5jdGlvbiBrZShiLGUpe3JldHVybiBiLng9PT1lLngmJmIueT09PWUueX1mdW5jdGlvbiB5bChiLGUsaCxuKXtyZXR1cm4ga2UoYixlKSYma2UoaCxuKXx8a2UoYixuKSYma2UoaCxlKT8hMDowPHdjKGIsZSxoKSE9PTA8d2MoYixlLG4pJiYwPHdjKGgsbixiKSE9PTA8d2MoaCxuLGUpfWZ1bmN0aW9uIFlvKGIsZSl7dmFyIGg9Yjtkb3tpZihoLmkhPT1iLmkmJmgubmV4dC5pIT09Yi5pJiZoLmkhPT1lLmkmJmgubmV4dC5pIT09ZS5pJiZ5bChoLGgubmV4dCxiLGUpKXJldHVybiEwO2g9aC5uZXh0fXdoaWxlKGghPT1iKTtyZXR1cm4hMX1mdW5jdGlvbiBpZyhiLGUpe3JldHVybiAwPndjKGIucHJldixiLGIubmV4dCk/MDw9d2MoYixlLGIubmV4dCkmJjA8PXdjKGIsYi5wcmV2LGUpOjA+d2MoYiwKZSxiLnByZXYpfHwwPndjKGIsYi5uZXh0LGUpfWZ1bmN0aW9uIFpvKGIsZSl7dmFyIGg9YixuPSExLHU9KGIueCtlLngpLzI7ZT0oYi55K2UueSkvMjtkbyBoLnk+ZSE9PWgubmV4dC55PmUmJmgubmV4dC55IT09aC55JiZ1PChoLm5leHQueC1oLngpKihlLWgueSkvKGgubmV4dC55LWgueSkraC54JiYobj0hbiksaD1oLm5leHQ7d2hpbGUoaCE9PWIpO3JldHVybiBufWZ1bmN0aW9uIHpsKGIsZSl7dmFyIGg9bmV3IENpKGIuaSxiLngsYi55KSxuPW5ldyBDaShlLmksZS54LGUueSksdT1iLm5leHQsdz1lLnByZXY7Yi5uZXh0PWU7ZS5wcmV2PWI7aC5uZXh0PXU7dS5wcmV2PWg7bi5uZXh0PWg7aC5wcmV2PW47dy5uZXh0PW47bi5wcmV2PXc7cmV0dXJuIG59ZnVuY3Rpb24geGwoYixlLGgsbil7Yj1uZXcgQ2koYixlLGgpO24/KGIubmV4dD1uLm5leHQsYi5wcmV2PW4sbi5uZXh0LnByZXY9YixuLm5leHQ9Yik6KGIucHJldj1iLGIubmV4dD1iKTtyZXR1cm4gYn1mdW5jdGlvbiBmZyhiKXtiLm5leHQucHJldj0KYi5wcmV2O2IucHJldi5uZXh0PWIubmV4dDtiLnByZXZaJiYoYi5wcmV2Wi5uZXh0Wj1iLm5leHRaKTtiLm5leHRaJiYoYi5uZXh0Wi5wcmV2Wj1iLnByZXZaKX1mdW5jdGlvbiBDaShiLGUsaCl7dGhpcy5pPWI7dGhpcy54PWU7dGhpcy55PWg7dGhpcy5uZXh0Wj10aGlzLnByZXZaPXRoaXMuej10aGlzLm5leHQ9dGhpcy5wcmV2PW51bGw7dGhpcy5zdGVpbmVyPSExfWZ1bmN0aW9uIExvKGIsZSxoLG4pe2Zvcih2YXIgdT0wLHc9aC1uO2U8aDtlKz1uKXUrPShiW3ddLWJbZV0pKihiW2UrMV0rYlt3KzFdKSx3PWU7cmV0dXJuIHV9ZnVuY3Rpb24gQWwoYil7dmFyIGU9Yi5sZW5ndGg7MjxlJiZiW2UtMV0uZXF1YWxzKGJbMF0pJiZiLnBvcCgpfWZ1bmN0aW9uIEJsKGIsZSl7Zm9yKHZhciBoPTA7aDxlLmxlbmd0aDtoKyspYi5wdXNoKGVbaF0ueCksYi5wdXNoKGVbaF0ueSl9ZnVuY3Rpb24gbGUoYixlKXtOLmNhbGwodGhpcyk7dGhpcy50eXBlPSJFeHRydWRlR2VvbWV0cnkiO3RoaXMucGFyYW1ldGVycz0Ke3NoYXBlczpiLG9wdGlvbnM6ZX07dGhpcy5mcm9tQnVmZmVyR2VvbWV0cnkobmV3IG1kKGIsZSkpO3RoaXMubWVyZ2VWZXJ0aWNlcygpfWZ1bmN0aW9uIG1kKGIsZSl7ZnVuY3Rpb24gaChIKXtmdW5jdGlvbiBJKFFhLG5iLHBiKXtuYnx8Y29uc29sZS5lcnJvcigiVEhSRUUuRXh0cnVkZUdlb21ldHJ5OiB2ZWMgZG9lcyBub3QgZXhpc3QiKTtyZXR1cm4gbmIuY2xvbmUoKS5tdWx0aXBseVNjYWxhcihwYikuYWRkKFFhKX1mdW5jdGlvbiBPKFFhLG5iLHBiKXt2YXIgdmI9UWEueC1uYi54O3ZhciBBYj1RYS55LW5iLnk7dmFyIE9iPXBiLngtUWEueDt2YXIgV2I9cGIueS1RYS55LFJiPXZiKnZiK0FiKkFiO2lmKE1hdGguYWJzKHZiKldiLUFiKk9iKT5OdW1iZXIuRVBTSUxPTil7dmFyIHdkPU1hdGguc3FydChSYiksdmQ9TWF0aC5zcXJ0KE9iKk9iK1diKldiKTtSYj1uYi54LUFiL3dkO25iPW5iLnkrdmIvd2Q7V2I9KChwYi54LVdiL3ZkLVJiKSpXYi0ocGIueStPYi92ZC1uYikqT2IpLwoodmIqV2ItQWIqT2IpO09iPVJiK3ZiKldiLVFhLng7dmI9bmIrQWIqV2ItUWEueTtBYj1PYipPYit2Yip2YjtpZigyPj1BYilyZXR1cm4gbmV3IGQoT2IsdmIpO0FiPU1hdGguc3FydChBYi8yKX1lbHNlIFFhPSExLHZiPk51bWJlci5FUFNJTE9OP09iPk51bWJlci5FUFNJTE9OJiYoUWE9ITApOnZiPC1OdW1iZXIuRVBTSUxPTj9PYjwtTnVtYmVyLkVQU0lMT04mJihRYT0hMCk6TWF0aC5zaWduKEFiKT09PU1hdGguc2lnbihXYikmJihRYT0hMCksUWE/KE9iPS1BYixBYj1NYXRoLnNxcnQoUmIpKTooT2I9dmIsdmI9QWIsQWI9TWF0aC5zcXJ0KFJiLzIpKTtyZXR1cm4gbmV3IGQoT2IvQWIsdmIvQWIpfWZ1bmN0aW9uIFEoUWEsbmIpe2ZvcihtYT1RYS5sZW5ndGg7MDw9LS1tYTspe3ZhciBwYj1tYTt2YXIgdmI9bWEtMTswPnZiJiYodmI9UWEubGVuZ3RoLTEpO3ZhciBBYixPYj1pYSsyKkRhO2ZvcihBYj0wO0FiPE9iO0FiKyspe3ZhciBXYj1aYSpBYixSYj1aYSooQWIrMSk7VyhuYisKcGIrV2IsbmIrdmIrV2IsbmIrdmIrUmIsbmIrcGIrUmIpfX19ZnVuY3Rpb24gUihRYSxuYixwYil7cWEucHVzaChRYSk7cWEucHVzaChuYik7cWEucHVzaChwYil9ZnVuY3Rpb24gVShRYSxuYixwYil7WihRYSk7WihuYik7WihwYik7UWE9dS5sZW5ndGgvMztRYT1LYS5nZW5lcmF0ZVRvcFVWKG4sdSxRYS0zLFFhLTIsUWEtMSk7ZmEoUWFbMF0pO2ZhKFFhWzFdKTtmYShRYVsyXSl9ZnVuY3Rpb24gVyhRYSxuYixwYix2Yil7WihRYSk7WihuYik7Wih2Yik7WihuYik7WihwYik7Wih2Yik7UWE9dS5sZW5ndGgvMztRYT1LYS5nZW5lcmF0ZVNpZGVXYWxsVVYobix1LFFhLTYsUWEtMyxRYS0yLFFhLTEpO2ZhKFFhWzBdKTtmYShRYVsxXSk7ZmEoUWFbM10pO2ZhKFFhWzFdKTtmYShRYVsyXSk7ZmEoUWFbM10pfWZ1bmN0aW9uIFooUWEpe3UucHVzaChxYVszKlFhXSk7dS5wdXNoKHFhWzMqUWErMV0pO3UucHVzaChxYVszKlFhKzJdKX1mdW5jdGlvbiBmYShRYSl7dy5wdXNoKFFhLngpO3cucHVzaChRYS55KX0KdmFyIHFhPVtdLHJhPXZvaWQgMCE9PWUuY3VydmVTZWdtZW50cz9lLmN1cnZlU2VnbWVudHM6MTIsaWE9dm9pZCAwIT09ZS5zdGVwcz9lLnN0ZXBzOjEsdGE9dm9pZCAwIT09ZS5kZXB0aD9lLmRlcHRoOjEwMCxuYT12b2lkIDAhPT1lLmJldmVsRW5hYmxlZD9lLmJldmVsRW5hYmxlZDohMCx2YT12b2lkIDAhPT1lLmJldmVsVGhpY2tuZXNzP2UuYmV2ZWxUaGlja25lc3M6NixCYT12b2lkIDAhPT1lLmJldmVsU2l6ZT9lLmJldmVsU2l6ZTp2YS0yLHNhPXZvaWQgMCE9PWUuYmV2ZWxPZmZzZXQ/ZS5iZXZlbE9mZnNldDowLERhPXZvaWQgMCE9PWUuYmV2ZWxTZWdtZW50cz9lLmJldmVsU2VnbWVudHM6MyxIYT1lLmV4dHJ1ZGVQYXRoLEthPXZvaWQgMCE9PWUuVVZHZW5lcmF0b3I/ZS5VVkdlbmVyYXRvcjokbzt2b2lkIDAhPT1lLmFtb3VudCYmKGNvbnNvbGUud2FybigiVEhSRUUuRXh0cnVkZUJ1ZmZlckdlb21ldHJ5OiBhbW91bnQgaGFzIGJlZW4gcmVuYW1lZCB0byBkZXB0aC4iKSx0YT0KZS5hbW91bnQpO3ZhciBOYT0hMTtpZihIYSl7dmFyIExhPUhhLmdldFNwYWNlZFBvaW50cyhpYSk7TmE9ITA7bmE9ITE7dmFyIGZiPUhhLmNvbXB1dGVGcmVuZXRGcmFtZXMoaWEsITEpO3ZhciBjYj1uZXcgZzt2YXIgSmE9bmV3IGc7dmFyIGhiPW5ldyBnfW5hfHwoc2E9QmE9dmE9RGE9MCk7dmFyIFVhO3JhPUguZXh0cmFjdFBvaW50cyhyYSk7SD1yYS5zaGFwZTt2YXIgSGI9cmEuaG9sZXM7aWYoIXlkLmlzQ2xvY2tXaXNlKEgpKXtIPUgucmV2ZXJzZSgpO3ZhciBxYj0wO2ZvcihVYT1IYi5sZW5ndGg7cWI8VWE7cWIrKyl7dmFyIGphPUhiW3FiXTt5ZC5pc0Nsb2NrV2lzZShqYSkmJihIYltxYl09amEucmV2ZXJzZSgpKX19dmFyIHBhPXlkLnRyaWFuZ3VsYXRlU2hhcGUoSCxIYikseWE9SDtxYj0wO2ZvcihVYT1IYi5sZW5ndGg7cWI8VWE7cWIrKylqYT1IYltxYl0sSD1ILmNvbmNhdChqYSk7dmFyIFZhLFphPUgubGVuZ3RoLFRhLGliPXBhLmxlbmd0aDtyYT1bXTt2YXIgbWE9MDt2YXIgSWE9CnlhLmxlbmd0aDt2YXIgT2E9SWEtMTtmb3IoVmE9bWErMTttYTxJYTttYSsrLE9hKyssVmErKylPYT09PUlhJiYoT2E9MCksVmE9PT1JYSYmKFZhPTApLHJhW21hXT1PKHlhW21hXSx5YVtPYV0seWFbVmFdKTtIYT1bXTt2YXIgdWI9cmEuY29uY2F0KCk7cWI9MDtmb3IoVWE9SGIubGVuZ3RoO3FiPFVhO3FiKyspe2phPUhiW3FiXTt2YXIgYWI9W107bWE9MDtJYT1qYS5sZW5ndGg7T2E9SWEtMTtmb3IoVmE9bWErMTttYTxJYTttYSsrLE9hKyssVmErKylPYT09PUlhJiYoT2E9MCksVmE9PT1JYSYmKFZhPTApLGFiW21hXT1PKGphW21hXSxqYVtPYV0samFbVmFdKTtIYS5wdXNoKGFiKTt1Yj11Yi5jb25jYXQoYWIpfWZvcihPYT0wO09hPERhO09hKyspe0lhPU9hL0RhO3ZhciBLYj12YSpNYXRoLmNvcyhJYSpNYXRoLlBJLzIpO1ZhPUJhKk1hdGguc2luKElhKk1hdGguUEkvMikrc2E7bWE9MDtmb3IoSWE9eWEubGVuZ3RoO21hPElhO21hKyspe3ZhciBsYj1JKHlhW21hXSxyYVttYV0sVmEpOwpSKGxiLngsbGIueSwtS2IpfXFiPTA7Zm9yKFVhPUhiLmxlbmd0aDtxYjxVYTtxYisrKWZvcihqYT1IYltxYl0sYWI9SGFbcWJdLG1hPTAsSWE9amEubGVuZ3RoO21hPElhO21hKyspbGI9SShqYVttYV0sYWJbbWFdLFZhKSxSKGxiLngsbGIueSwtS2IpfVZhPUJhK3NhO2ZvcihtYT0wO21hPFphO21hKyspbGI9bmE/SShIW21hXSx1YlttYV0sVmEpOkhbbWFdLE5hPyhKYS5jb3B5KGZiLm5vcm1hbHNbMF0pLm11bHRpcGx5U2NhbGFyKGxiLngpLGNiLmNvcHkoZmIuYmlub3JtYWxzWzBdKS5tdWx0aXBseVNjYWxhcihsYi55KSxoYi5jb3B5KExhWzBdKS5hZGQoSmEpLmFkZChjYiksUihoYi54LGhiLnksaGIueikpOlIobGIueCxsYi55LDApO2ZvcihJYT0xO0lhPD1pYTtJYSsrKWZvcihtYT0wO21hPFphO21hKyspbGI9bmE/SShIW21hXSx1YlttYV0sVmEpOkhbbWFdLE5hPyhKYS5jb3B5KGZiLm5vcm1hbHNbSWFdKS5tdWx0aXBseVNjYWxhcihsYi54KSxjYi5jb3B5KGZiLmJpbm9ybWFsc1tJYV0pLm11bHRpcGx5U2NhbGFyKGxiLnkpLApoYi5jb3B5KExhW0lhXSkuYWRkKEphKS5hZGQoY2IpLFIoaGIueCxoYi55LGhiLnopKTpSKGxiLngsbGIueSx0YS9pYSpJYSk7Zm9yKE9hPURhLTE7MDw9T2E7T2EtLSl7SWE9T2EvRGE7S2I9dmEqTWF0aC5jb3MoSWEqTWF0aC5QSS8yKTtWYT1CYSpNYXRoLnNpbihJYSpNYXRoLlBJLzIpK3NhO21hPTA7Zm9yKElhPXlhLmxlbmd0aDttYTxJYTttYSsrKWxiPUkoeWFbbWFdLHJhW21hXSxWYSksUihsYi54LGxiLnksdGErS2IpO3FiPTA7Zm9yKFVhPUhiLmxlbmd0aDtxYjxVYTtxYisrKWZvcihqYT1IYltxYl0sYWI9SGFbcWJdLG1hPTAsSWE9amEubGVuZ3RoO21hPElhO21hKyspbGI9SShqYVttYV0sYWJbbWFdLFZhKSxOYT9SKGxiLngsbGIueStMYVtpYS0xXS55LExhW2lhLTFdLngrS2IpOlIobGIueCxsYi55LHRhK0tiKX0oZnVuY3Rpb24oKXt2YXIgUWE9dS5sZW5ndGgvMztpZihuYSl7dmFyIG5iPTAqWmE7Zm9yKG1hPTA7bWE8aWI7bWErKylUYT1wYVttYV0sVShUYVsyXStuYiwKVGFbMV0rbmIsVGFbMF0rbmIpO25iPVphKihpYSsyKkRhKTtmb3IobWE9MDttYTxpYjttYSsrKVRhPXBhW21hXSxVKFRhWzBdK25iLFRhWzFdK25iLFRhWzJdK25iKX1lbHNle2ZvcihtYT0wO21hPGliO21hKyspVGE9cGFbbWFdLFUoVGFbMl0sVGFbMV0sVGFbMF0pO2ZvcihtYT0wO21hPGliO21hKyspVGE9cGFbbWFdLFUoVGFbMF0rWmEqaWEsVGFbMV0rWmEqaWEsVGFbMl0rWmEqaWEpfW4uYWRkR3JvdXAoUWEsdS5sZW5ndGgvMy1RYSwwKX0pKCk7KGZ1bmN0aW9uKCl7dmFyIFFhPXUubGVuZ3RoLzMsbmI9MDtRKHlhLG5iKTtuYis9eWEubGVuZ3RoO3FiPTA7Zm9yKFVhPUhiLmxlbmd0aDtxYjxVYTtxYisrKWphPUhiW3FiXSxRKGphLG5iKSxuYis9amEubGVuZ3RoO24uYWRkR3JvdXAoUWEsdS5sZW5ndGgvMy1RYSwxKX0pKCl9eGEuY2FsbCh0aGlzKTt0aGlzLnR5cGU9IkV4dHJ1ZGVCdWZmZXJHZW9tZXRyeSI7dGhpcy5wYXJhbWV0ZXJzPXtzaGFwZXM6YixvcHRpb25zOmV9O2I9CkFycmF5LmlzQXJyYXkoYik/YjpbYl07Zm9yKHZhciBuPXRoaXMsdT1bXSx3PVtdLHo9MCxFPWIubGVuZ3RoO3o8RTt6KyspaChiW3pdKTt0aGlzLmFkZEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBiYSh1LDMpKTt0aGlzLmFkZEF0dHJpYnV0ZSgidXYiLG5ldyBiYSh3LDIpKTt0aGlzLmNvbXB1dGVWZXJ0ZXhOb3JtYWxzKCl9ZnVuY3Rpb24gQ2woYixlLGgpe2guc2hhcGVzPVtdO2lmKEFycmF5LmlzQXJyYXkoYikpZm9yKHZhciBuPTAsdT1iLmxlbmd0aDtuPHU7bisrKWguc2hhcGVzLnB1c2goYltuXS51dWlkKTtlbHNlIGguc2hhcGVzLnB1c2goYi51dWlkKTt2b2lkIDAhPT1lLmV4dHJ1ZGVQYXRoJiYoaC5vcHRpb25zLmV4dHJ1ZGVQYXRoPWUuZXh0cnVkZVBhdGgudG9KU09OKCkpO3JldHVybiBofWZ1bmN0aW9uIGpnKGIsZSl7Ti5jYWxsKHRoaXMpO3RoaXMudHlwZT0iVGV4dEdlb21ldHJ5Ijt0aGlzLnBhcmFtZXRlcnM9e3RleHQ6YixwYXJhbWV0ZXJzOmV9O3RoaXMuZnJvbUJ1ZmZlckdlb21ldHJ5KG5ldyAkZShiLAplKSk7dGhpcy5tZXJnZVZlcnRpY2VzKCl9ZnVuY3Rpb24gJGUoYixlKXtlPWV8fHt9O3ZhciBoPWUuZm9udDtpZighaHx8IWguaXNGb250KXJldHVybiBjb25zb2xlLmVycm9yKCJUSFJFRS5UZXh0R2VvbWV0cnk6IGZvbnQgcGFyYW1ldGVyIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBUSFJFRS5Gb250LiIpLG5ldyBOO2I9aC5nZW5lcmF0ZVNoYXBlcyhiLGUuc2l6ZSk7ZS5kZXB0aD12b2lkIDAhPT1lLmhlaWdodD9lLmhlaWdodDo1MDt2b2lkIDA9PT1lLmJldmVsVGhpY2tuZXNzJiYoZS5iZXZlbFRoaWNrbmVzcz0xMCk7dm9pZCAwPT09ZS5iZXZlbFNpemUmJihlLmJldmVsU2l6ZT04KTt2b2lkIDA9PT1lLmJldmVsRW5hYmxlZCYmKGUuYmV2ZWxFbmFibGVkPSExKTttZC5jYWxsKHRoaXMsYixlKTt0aGlzLnR5cGU9IlRleHRCdWZmZXJHZW9tZXRyeSJ9ZnVuY3Rpb24ga2coYixlLGgsbix1LHcseil7Ti5jYWxsKHRoaXMpO3RoaXMudHlwZT0iU3BoZXJlR2VvbWV0cnkiO3RoaXMucGFyYW1ldGVycz0Ke3JhZGl1czpiLHdpZHRoU2VnbWVudHM6ZSxoZWlnaHRTZWdtZW50czpoLHBoaVN0YXJ0Om4scGhpTGVuZ3RoOnUsdGhldGFTdGFydDp3LHRoZXRhTGVuZ3RoOnp9O3RoaXMuZnJvbUJ1ZmZlckdlb21ldHJ5KG5ldyBXZChiLGUsaCxuLHUsdyx6KSk7dGhpcy5tZXJnZVZlcnRpY2VzKCl9ZnVuY3Rpb24gV2QoYixlLGgsbix1LHcseil7eGEuY2FsbCh0aGlzKTt0aGlzLnR5cGU9IlNwaGVyZUJ1ZmZlckdlb21ldHJ5Ijt0aGlzLnBhcmFtZXRlcnM9e3JhZGl1czpiLHdpZHRoU2VnbWVudHM6ZSxoZWlnaHRTZWdtZW50czpoLHBoaVN0YXJ0Om4scGhpTGVuZ3RoOnUsdGhldGFTdGFydDp3LHRoZXRhTGVuZ3RoOnp9O2I9Ynx8MTtlPU1hdGgubWF4KDMsTWF0aC5mbG9vcihlKXx8OCk7aD1NYXRoLm1heCgyLE1hdGguZmxvb3IoaCl8fDYpO249dm9pZCAwIT09bj9uOjA7dT12b2lkIDAhPT11P3U6MipNYXRoLlBJO3c9dm9pZCAwIT09dz93OjA7ej12b2lkIDAhPT16P3o6TWF0aC5QSTt2YXIgRT0Kdyt6LEgsSSxPPTAsUT1bXSxSPW5ldyBnLFU9bmV3IGcsVz1bXSxaPVtdLGZhPVtdLHFhPVtdO2ZvcihJPTA7STw9aDtJKyspe3ZhciByYT1bXSxpYT1JL2gsdGE9MD09ST8uNS9lOkk9PWg/LS41L2U6MDtmb3IoSD0wO0g8PWU7SCsrKXt2YXIgbmE9SC9lO1IueD0tYipNYXRoLmNvcyhuK25hKnUpKk1hdGguc2luKHcraWEqeik7Ui55PWIqTWF0aC5jb3ModytpYSp6KTtSLno9YipNYXRoLnNpbihuK25hKnUpKk1hdGguc2luKHcraWEqeik7Wi5wdXNoKFIueCxSLnksUi56KTtVLmNvcHkoUikubm9ybWFsaXplKCk7ZmEucHVzaChVLngsVS55LFUueik7cWEucHVzaChuYSt0YSwxLWlhKTtyYS5wdXNoKE8rKyl9US5wdXNoKHJhKX1mb3IoST0wO0k8aDtJKyspZm9yKEg9MDtIPGU7SCsrKWI9UVtJXVtIKzFdLG49UVtJXVtIXSx1PVFbSSsxXVtIXSx6PVFbSSsxXVtIKzFdLCgwIT09SXx8MDx3KSYmVy5wdXNoKGIsbix6KSwoSSE9PWgtMXx8RTxNYXRoLlBJKSYmVy5wdXNoKG4sdSx6KTt0aGlzLnNldEluZGV4KFcpOwp0aGlzLmFkZEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBiYShaLDMpKTt0aGlzLmFkZEF0dHJpYnV0ZSgibm9ybWFsIixuZXcgYmEoZmEsMykpO3RoaXMuYWRkQXR0cmlidXRlKCJ1diIsbmV3IGJhKHFhLDIpKX1mdW5jdGlvbiBsZyhiLGUsaCxuLHUsdyl7Ti5jYWxsKHRoaXMpO3RoaXMudHlwZT0iUmluZ0dlb21ldHJ5Ijt0aGlzLnBhcmFtZXRlcnM9e2lubmVyUmFkaXVzOmIsb3V0ZXJSYWRpdXM6ZSx0aGV0YVNlZ21lbnRzOmgscGhpU2VnbWVudHM6bix0aGV0YVN0YXJ0OnUsdGhldGFMZW5ndGg6d307dGhpcy5mcm9tQnVmZmVyR2VvbWV0cnkobmV3IGFmKGIsZSxoLG4sdSx3KSk7dGhpcy5tZXJnZVZlcnRpY2VzKCl9ZnVuY3Rpb24gYWYoYixlLGgsbix1LHcpe3hhLmNhbGwodGhpcyk7dGhpcy50eXBlPSJSaW5nQnVmZmVyR2VvbWV0cnkiO3RoaXMucGFyYW1ldGVycz17aW5uZXJSYWRpdXM6YixvdXRlclJhZGl1czplLHRoZXRhU2VnbWVudHM6aCxwaGlTZWdtZW50czpuLHRoZXRhU3RhcnQ6dSwKdGhldGFMZW5ndGg6d307Yj1ifHwuNTtlPWV8fDE7dT12b2lkIDAhPT11P3U6MDt3PXZvaWQgMCE9PXc/dzoyKk1hdGguUEk7aD12b2lkIDAhPT1oP01hdGgubWF4KDMsaCk6ODtuPXZvaWQgMCE9PW4/TWF0aC5tYXgoMSxuKToxO3ZhciB6PVtdLEU9W10sSD1bXSxJPVtdLE89YixRPShlLWIpL24sUj1uZXcgZyxVPW5ldyBkLFcsWjtmb3IoVz0wO1c8PW47VysrKXtmb3IoWj0wO1o8PWg7WisrKWI9dStaL2gqdyxSLng9TypNYXRoLmNvcyhiKSxSLnk9TypNYXRoLnNpbihiKSxFLnB1c2goUi54LFIueSxSLnopLEgucHVzaCgwLDAsMSksVS54PShSLngvZSsxKS8yLFUueT0oUi55L2UrMSkvMixJLnB1c2goVS54LFUueSk7Tys9UX1mb3IoVz0wO1c8bjtXKyspZm9yKGU9VyooaCsxKSxaPTA7WjxoO1orKyliPVorZSx1PWIraCsxLHc9YitoKzIsTz1iKzEsei5wdXNoKGIsdSxPKSx6LnB1c2godSx3LE8pO3RoaXMuc2V0SW5kZXgoeik7dGhpcy5hZGRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgYmEoRSwKMykpO3RoaXMuYWRkQXR0cmlidXRlKCJub3JtYWwiLG5ldyBiYShILDMpKTt0aGlzLmFkZEF0dHJpYnV0ZSgidXYiLG5ldyBiYShJLDIpKX1mdW5jdGlvbiBtZyhiLGUsaCxuKXtOLmNhbGwodGhpcyk7dGhpcy50eXBlPSJMYXRoZUdlb21ldHJ5Ijt0aGlzLnBhcmFtZXRlcnM9e3BvaW50czpiLHNlZ21lbnRzOmUscGhpU3RhcnQ6aCxwaGlMZW5ndGg6bn07dGhpcy5mcm9tQnVmZmVyR2VvbWV0cnkobmV3IGJmKGIsZSxoLG4pKTt0aGlzLm1lcmdlVmVydGljZXMoKX1mdW5jdGlvbiBiZihiLGUsaCxuKXt4YS5jYWxsKHRoaXMpO3RoaXMudHlwZT0iTGF0aGVCdWZmZXJHZW9tZXRyeSI7dGhpcy5wYXJhbWV0ZXJzPXtwb2ludHM6YixzZWdtZW50czplLHBoaVN0YXJ0OmgscGhpTGVuZ3RoOm59O2U9TWF0aC5mbG9vcihlKXx8MTI7aD1ofHwwO249bnx8MipNYXRoLlBJO249b2IuY2xhbXAobiwwLDIqTWF0aC5QSSk7dmFyIHU9W10sdz1bXSx6PVtdLEU9MS9lLEg9bmV3IGcsST1uZXcgZCxPOwpmb3IoTz0wO088PWU7TysrKXt2YXIgUT1oK08qRSpuO3ZhciBSPU1hdGguc2luKFEpLFU9TWF0aC5jb3MoUSk7Zm9yKFE9MDtRPD1iLmxlbmd0aC0xO1ErKylILng9YltRXS54KlIsSC55PWJbUV0ueSxILno9YltRXS54KlUsdy5wdXNoKEgueCxILnksSC56KSxJLng9Ty9lLEkueT1RLyhiLmxlbmd0aC0xKSx6LnB1c2goSS54LEkueSl9Zm9yKE89MDtPPGU7TysrKWZvcihRPTA7UTxiLmxlbmd0aC0xO1ErKyloPVErTypiLmxlbmd0aCxFPWgrYi5sZW5ndGgsSD1oK2IubGVuZ3RoKzEsST1oKzEsdS5wdXNoKGgsRSxJKSx1LnB1c2goRSxILEkpO3RoaXMuc2V0SW5kZXgodSk7dGhpcy5hZGRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgYmEodywzKSk7dGhpcy5hZGRBdHRyaWJ1dGUoInV2IixuZXcgYmEoeiwyKSk7dGhpcy5jb21wdXRlVmVydGV4Tm9ybWFscygpO2lmKG49PT0yKk1hdGguUEkpZm9yKG49dGhpcy5hdHRyaWJ1dGVzLm5vcm1hbC5hcnJheSx1PW5ldyBnLHc9bmV3IGcsej0KbmV3IGcsaD1lKmIubGVuZ3RoKjMsUT1PPTA7TzxiLmxlbmd0aDtPKyssUSs9Myl1Lng9bltRKzBdLHUueT1uW1ErMV0sdS56PW5bUSsyXSx3Lng9bltoK1ErMF0sdy55PW5baCtRKzFdLHcuej1uW2grUSsyXSx6LmFkZFZlY3RvcnModSx3KS5ub3JtYWxpemUoKSxuW1ErMF09bltoK1ErMF09ei54LG5bUSsxXT1uW2grUSsxXT16LnksbltRKzJdPW5baCtRKzJdPXouen1mdW5jdGlvbiBtZShiLGUpe04uY2FsbCh0aGlzKTt0aGlzLnR5cGU9IlNoYXBlR2VvbWV0cnkiOyJvYmplY3QiPT09dHlwZW9mIGUmJihjb25zb2xlLndhcm4oIlRIUkVFLlNoYXBlR2VvbWV0cnk6IE9wdGlvbnMgcGFyYW1ldGVyIGhhcyBiZWVuIHJlbW92ZWQuIiksZT1lLmN1cnZlU2VnbWVudHMpO3RoaXMucGFyYW1ldGVycz17c2hhcGVzOmIsY3VydmVTZWdtZW50czplfTt0aGlzLmZyb21CdWZmZXJHZW9tZXRyeShuZXcgbmUoYixlKSk7dGhpcy5tZXJnZVZlcnRpY2VzKCl9ZnVuY3Rpb24gbmUoYixlKXtmdW5jdGlvbiBoKE8pe3ZhciBRLApSPXUubGVuZ3RoLzM7Tz1PLmV4dHJhY3RQb2ludHMoZSk7dmFyIFU9Ty5zaGFwZSxXPU8uaG9sZXM7ITE9PT15ZC5pc0Nsb2NrV2lzZShVKSYmKFU9VS5yZXZlcnNlKCkpO089MDtmb3IoUT1XLmxlbmd0aDtPPFE7TysrKXt2YXIgWj1XW09dOyEwPT09eWQuaXNDbG9ja1dpc2UoWikmJihXW09dPVoucmV2ZXJzZSgpKX12YXIgZmE9eWQudHJpYW5ndWxhdGVTaGFwZShVLFcpO089MDtmb3IoUT1XLmxlbmd0aDtPPFE7TysrKVo9V1tPXSxVPVUuY29uY2F0KFopO089MDtmb3IoUT1VLmxlbmd0aDtPPFE7TysrKVo9VVtPXSx1LnB1c2goWi54LFoueSwwKSx3LnB1c2goMCwwLDEpLHoucHVzaChaLngsWi55KTtPPTA7Zm9yKFE9ZmEubGVuZ3RoO088UTtPKyspVT1mYVtPXSxuLnB1c2goVVswXStSLFVbMV0rUixVWzJdK1IpLEgrPTN9eGEuY2FsbCh0aGlzKTt0aGlzLnR5cGU9IlNoYXBlQnVmZmVyR2VvbWV0cnkiO3RoaXMucGFyYW1ldGVycz17c2hhcGVzOmIsY3VydmVTZWdtZW50czplfTsKZT1lfHwxMjt2YXIgbj1bXSx1PVtdLHc9W10sej1bXSxFPTAsSD0wO2lmKCExPT09QXJyYXkuaXNBcnJheShiKSloKGIpO2Vsc2UgZm9yKHZhciBJPTA7STxiLmxlbmd0aDtJKyspaChiW0ldKSx0aGlzLmFkZEdyb3VwKEUsSCxJKSxFKz1ILEg9MDt0aGlzLnNldEluZGV4KG4pO3RoaXMuYWRkQXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IGJhKHUsMykpO3RoaXMuYWRkQXR0cmlidXRlKCJub3JtYWwiLG5ldyBiYSh3LDMpKTt0aGlzLmFkZEF0dHJpYnV0ZSgidXYiLG5ldyBiYSh6LDIpKX1mdW5jdGlvbiBEbChiLGUpe2Uuc2hhcGVzPVtdO2lmKEFycmF5LmlzQXJyYXkoYikpZm9yKHZhciBoPTAsbj1iLmxlbmd0aDtoPG47aCsrKWUuc2hhcGVzLnB1c2goYltoXS51dWlkKTtlbHNlIGUuc2hhcGVzLnB1c2goYi51dWlkKTtyZXR1cm4gZX1mdW5jdGlvbiBjZihiLGUpe3hhLmNhbGwodGhpcyk7dGhpcy50eXBlPSJFZGdlc0dlb21ldHJ5Ijt0aGlzLnBhcmFtZXRlcnM9e3RocmVzaG9sZEFuZ2xlOmV9Owp2YXIgaD1bXTtlPU1hdGguY29zKG9iLkRFRzJSQUQqKHZvaWQgMCE9PWU/ZToxKSk7dmFyIG49WzAsMF0sdT17fSx3PVsiYSIsImIiLCJjIl07aWYoYi5pc0J1ZmZlckdlb21ldHJ5KXt2YXIgej1uZXcgTjt6LmZyb21CdWZmZXJHZW9tZXRyeShiKX1lbHNlIHo9Yi5jbG9uZSgpO3oubWVyZ2VWZXJ0aWNlcygpO3ouY29tcHV0ZUZhY2VOb3JtYWxzKCk7Yj16LnZlcnRpY2VzO3o9ei5mYWNlcztmb3IodmFyIEU9MCxIPXoubGVuZ3RoO0U8SDtFKyspZm9yKHZhciBJPXpbRV0sTz0wOzM+TztPKyspe3ZhciBRPUlbd1tPXV07dmFyIFI9SVt3WyhPKzEpJTNdXTtuWzBdPU1hdGgubWluKFEsUik7blsxXT1NYXRoLm1heChRLFIpO1E9blswXSsiLCIrblsxXTt2b2lkIDA9PT11W1FdP3VbUV09e2luZGV4MTpuWzBdLGluZGV4MjpuWzFdLGZhY2UxOkUsZmFjZTI6dm9pZCAwfTp1W1FdLmZhY2UyPUV9Zm9yKFEgaW4gdSlpZihuPXVbUV0sdm9pZCAwPT09bi5mYWNlMnx8eltuLmZhY2UxXS5ub3JtYWwuZG90KHpbbi5mYWNlMl0ubm9ybWFsKTw9CmUpdz1iW24uaW5kZXgxXSxoLnB1c2gody54LHcueSx3LnopLHc9YltuLmluZGV4Ml0saC5wdXNoKHcueCx3Lnksdy56KTt0aGlzLmFkZEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBiYShoLDMpKX1mdW5jdGlvbiBvZShiLGUsaCxuLHUsdyx6LEUpe04uY2FsbCh0aGlzKTt0aGlzLnR5cGU9IkN5bGluZGVyR2VvbWV0cnkiO3RoaXMucGFyYW1ldGVycz17cmFkaXVzVG9wOmIscmFkaXVzQm90dG9tOmUsaGVpZ2h0OmgscmFkaWFsU2VnbWVudHM6bixoZWlnaHRTZWdtZW50czp1LG9wZW5FbmRlZDp3LHRoZXRhU3RhcnQ6eix0aGV0YUxlbmd0aDpFfTt0aGlzLmZyb21CdWZmZXJHZW9tZXRyeShuZXcgemQoYixlLGgsbix1LHcseixFKSk7dGhpcy5tZXJnZVZlcnRpY2VzKCl9ZnVuY3Rpb24gemQoYixlLGgsbix1LHcseixFKXtmdW5jdGlvbiBIKHJhKXt2YXIgaWEsdGE9bmV3IGQsbmE9bmV3IGcsdmE9MCxCYT0hMD09PXJhP2I6ZSxzYT0hMD09PXJhPzE6LTE7dmFyIERhPVc7Zm9yKGlhPQoxO2lhPD1uO2lhKyspUS5wdXNoKDAsZmEqc2EsMCksUi5wdXNoKDAsc2EsMCksVS5wdXNoKC41LC41KSxXKys7dmFyIEhhPVc7Zm9yKGlhPTA7aWE8PW47aWErKyl7dmFyIEthPWlhL24qRSt6LE5hPU1hdGguY29zKEthKTtLYT1NYXRoLnNpbihLYSk7bmEueD1CYSpLYTtuYS55PWZhKnNhO25hLno9QmEqTmE7US5wdXNoKG5hLngsbmEueSxuYS56KTtSLnB1c2goMCxzYSwwKTt0YS54PS41Kk5hKy41O3RhLnk9LjUqS2Eqc2ErLjU7VS5wdXNoKHRhLngsdGEueSk7VysrfWZvcihpYT0wO2lhPG47aWErKyl0YT1EYStpYSxuYT1IYStpYSwhMD09PXJhP08ucHVzaChuYSxuYSsxLHRhKTpPLnB1c2gobmErMSxuYSx0YSksdmErPTM7SS5hZGRHcm91cChxYSx2YSwhMD09PXJhPzE6Mik7cWErPXZhfXhhLmNhbGwodGhpcyk7dGhpcy50eXBlPSJDeWxpbmRlckJ1ZmZlckdlb21ldHJ5Ijt0aGlzLnBhcmFtZXRlcnM9e3JhZGl1c1RvcDpiLHJhZGl1c0JvdHRvbTplLGhlaWdodDpoLHJhZGlhbFNlZ21lbnRzOm4sCmhlaWdodFNlZ21lbnRzOnUsb3BlbkVuZGVkOncsdGhldGFTdGFydDp6LHRoZXRhTGVuZ3RoOkV9O3ZhciBJPXRoaXM7Yj12b2lkIDAhPT1iP2I6MTtlPXZvaWQgMCE9PWU/ZToxO2g9aHx8MTtuPU1hdGguZmxvb3Iobil8fDg7dT1NYXRoLmZsb29yKHUpfHwxO3c9dm9pZCAwIT09dz93OiExO3o9dm9pZCAwIT09ej96OjA7RT12b2lkIDAhPT1FP0U6MipNYXRoLlBJO3ZhciBPPVtdLFE9W10sUj1bXSxVPVtdLFc9MCxaPVtdLGZhPWgvMixxYT0wOyhmdW5jdGlvbigpe3ZhciByYSxpYSx0YT1uZXcgZyxuYT1uZXcgZyx2YT0wLEJhPShlLWIpL2g7Zm9yKGlhPTA7aWE8PXU7aWErKyl7dmFyIHNhPVtdLERhPWlhL3UsSGE9RGEqKGUtYikrYjtmb3IocmE9MDtyYTw9bjtyYSsrKXt2YXIgS2E9cmEvbixOYT1LYSpFK3osTGE9TWF0aC5zaW4oTmEpO05hPU1hdGguY29zKE5hKTtuYS54PUhhKkxhO25hLnk9LURhKmgrZmE7bmEuej1IYSpOYTtRLnB1c2gobmEueCxuYS55LG5hLnopO3RhLnNldChMYSwKQmEsTmEpLm5vcm1hbGl6ZSgpO1IucHVzaCh0YS54LHRhLnksdGEueik7VS5wdXNoKEthLDEtRGEpO3NhLnB1c2goVysrKX1aLnB1c2goc2EpfWZvcihyYT0wO3JhPG47cmErKylmb3IoaWE9MDtpYTx1O2lhKyspdGE9WltpYSsxXVtyYV0sbmE9WltpYSsxXVtyYSsxXSxCYT1aW2lhXVtyYSsxXSxPLnB1c2goWltpYV1bcmFdLHRhLEJhKSxPLnB1c2godGEsbmEsQmEpLHZhKz02O0kuYWRkR3JvdXAocWEsdmEsMCk7cWErPXZhfSkoKTshMT09PXcmJigwPGImJkgoITApLDA8ZSYmSCghMSkpO3RoaXMuc2V0SW5kZXgoTyk7dGhpcy5hZGRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgYmEoUSwzKSk7dGhpcy5hZGRBdHRyaWJ1dGUoIm5vcm1hbCIsbmV3IGJhKFIsMykpO3RoaXMuYWRkQXR0cmlidXRlKCJ1diIsbmV3IGJhKFUsMikpfWZ1bmN0aW9uIG5nKGIsZSxoLG4sdSx3LHope29lLmNhbGwodGhpcywwLGIsZSxoLG4sdSx3LHopO3RoaXMudHlwZT0iQ29uZUdlb21ldHJ5Ijt0aGlzLnBhcmFtZXRlcnM9CntyYWRpdXM6YixoZWlnaHQ6ZSxyYWRpYWxTZWdtZW50czpoLGhlaWdodFNlZ21lbnRzOm4sb3BlbkVuZGVkOnUsdGhldGFTdGFydDp3LHRoZXRhTGVuZ3RoOnp9fWZ1bmN0aW9uIG9nKGIsZSxoLG4sdSx3LHope3pkLmNhbGwodGhpcywwLGIsZSxoLG4sdSx3LHopO3RoaXMudHlwZT0iQ29uZUJ1ZmZlckdlb21ldHJ5Ijt0aGlzLnBhcmFtZXRlcnM9e3JhZGl1czpiLGhlaWdodDplLHJhZGlhbFNlZ21lbnRzOmgsaGVpZ2h0U2VnbWVudHM6bixvcGVuRW5kZWQ6dSx0aGV0YVN0YXJ0OncsdGhldGFMZW5ndGg6en19ZnVuY3Rpb24gcGcoYixlLGgsbil7Ti5jYWxsKHRoaXMpO3RoaXMudHlwZT0iQ2lyY2xlR2VvbWV0cnkiO3RoaXMucGFyYW1ldGVycz17cmFkaXVzOmIsc2VnbWVudHM6ZSx0aGV0YVN0YXJ0OmgsdGhldGFMZW5ndGg6bn07dGhpcy5mcm9tQnVmZmVyR2VvbWV0cnkobmV3IGRmKGIsZSxoLG4pKTt0aGlzLm1lcmdlVmVydGljZXMoKX1mdW5jdGlvbiBkZihiLGUsaCxuKXt4YS5jYWxsKHRoaXMpOwp0aGlzLnR5cGU9IkNpcmNsZUJ1ZmZlckdlb21ldHJ5Ijt0aGlzLnBhcmFtZXRlcnM9e3JhZGl1czpiLHNlZ21lbnRzOmUsdGhldGFTdGFydDpoLHRoZXRhTGVuZ3RoOm59O2I9Ynx8MTtlPXZvaWQgMCE9PWU/TWF0aC5tYXgoMyxlKTo4O2g9dm9pZCAwIT09aD9oOjA7bj12b2lkIDAhPT1uP246MipNYXRoLlBJO3ZhciB1PVtdLHc9W10sej1bXSxFPVtdLEgsST1uZXcgZyxPPW5ldyBkO3cucHVzaCgwLDAsMCk7ei5wdXNoKDAsMCwxKTtFLnB1c2goLjUsLjUpO3ZhciBRPTA7Zm9yKEg9MztRPD1lO1ErKyxIKz0zKXt2YXIgUj1oK1EvZSpuO0kueD1iKk1hdGguY29zKFIpO0kueT1iKk1hdGguc2luKFIpO3cucHVzaChJLngsSS55LEkueik7ei5wdXNoKDAsMCwxKTtPLng9KHdbSF0vYisxKS8yO08ueT0od1tIKzFdL2IrMSkvMjtFLnB1c2goTy54LE8ueSl9Zm9yKEg9MTtIPD1lO0grKyl1LnB1c2goSCxIKzEsMCk7dGhpcy5zZXRJbmRleCh1KTt0aGlzLmFkZEF0dHJpYnV0ZSgicG9zaXRpb24iLApuZXcgYmEodywzKSk7dGhpcy5hZGRBdHRyaWJ1dGUoIm5vcm1hbCIsbmV3IGJhKHosMykpO3RoaXMuYWRkQXR0cmlidXRlKCJ1diIsbmV3IGJhKEUsMikpfWZ1bmN0aW9uIHBlKGIpe0dhLmNhbGwodGhpcyk7dGhpcy50eXBlPSJTaGFkb3dNYXRlcmlhbCI7dGhpcy5jb2xvcj1uZXcgQigwKTt0aGlzLnRyYW5zcGFyZW50PSEwO3RoaXMuc2V0VmFsdWVzKGIpfWZ1bmN0aW9uIGVmKGIpe2RiLmNhbGwodGhpcyxiKTt0aGlzLnR5cGU9IlJhd1NoYWRlck1hdGVyaWFsIn1mdW5jdGlvbiBuZChiKXtHYS5jYWxsKHRoaXMpO3RoaXMuZGVmaW5lcz17U1RBTkRBUkQ6IiJ9O3RoaXMudHlwZT0iTWVzaFN0YW5kYXJkTWF0ZXJpYWwiO3RoaXMuY29sb3I9bmV3IEIoMTY3NzcyMTUpO3RoaXMubWV0YWxuZXNzPXRoaXMucm91Z2huZXNzPS41O3RoaXMubGlnaHRNYXA9dGhpcy5tYXA9bnVsbDt0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PTE7dGhpcy5hb01hcD1udWxsO3RoaXMuYW9NYXBJbnRlbnNpdHk9CjE7dGhpcy5lbWlzc2l2ZT1uZXcgQigwKTt0aGlzLmVtaXNzaXZlSW50ZW5zaXR5PTE7dGhpcy5idW1wTWFwPXRoaXMuZW1pc3NpdmVNYXA9bnVsbDt0aGlzLmJ1bXBTY2FsZT0xO3RoaXMubm9ybWFsTWFwPW51bGw7dGhpcy5ub3JtYWxNYXBUeXBlPTA7dGhpcy5ub3JtYWxTY2FsZT1uZXcgZCgxLDEpO3RoaXMuZGlzcGxhY2VtZW50TWFwPW51bGw7dGhpcy5kaXNwbGFjZW1lbnRTY2FsZT0xO3RoaXMuZGlzcGxhY2VtZW50Qmlhcz0wO3RoaXMuZW52TWFwPXRoaXMuYWxwaGFNYXA9dGhpcy5tZXRhbG5lc3NNYXA9dGhpcy5yb3VnaG5lc3NNYXA9bnVsbDt0aGlzLmVudk1hcEludGVuc2l0eT0xO3RoaXMucmVmcmFjdGlvblJhdGlvPS45ODt0aGlzLndpcmVmcmFtZT0hMTt0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xO3RoaXMud2lyZWZyYW1lTGluZWpvaW49dGhpcy53aXJlZnJhbWVMaW5lY2FwPSJyb3VuZCI7dGhpcy5tb3JwaE5vcm1hbHM9dGhpcy5tb3JwaFRhcmdldHM9dGhpcy5za2lubmluZz0KITE7dGhpcy5zZXRWYWx1ZXMoYil9ZnVuY3Rpb24gcWUoYil7bmQuY2FsbCh0aGlzKTt0aGlzLmRlZmluZXM9e1BIWVNJQ0FMOiIifTt0aGlzLnR5cGU9Ik1lc2hQaHlzaWNhbE1hdGVyaWFsIjt0aGlzLnJlZmxlY3Rpdml0eT0uNTt0aGlzLmNsZWFyQ29hdFJvdWdobmVzcz10aGlzLmNsZWFyQ29hdD0wO3RoaXMuc2V0VmFsdWVzKGIpfWZ1bmN0aW9uIFRjKGIpe0dhLmNhbGwodGhpcyk7dGhpcy50eXBlPSJNZXNoUGhvbmdNYXRlcmlhbCI7dGhpcy5jb2xvcj1uZXcgQigxNjc3NzIxNSk7dGhpcy5zcGVjdWxhcj1uZXcgQigxMTE4NDgxKTt0aGlzLnNoaW5pbmVzcz0zMDt0aGlzLmxpZ2h0TWFwPXRoaXMubWFwPW51bGw7dGhpcy5saWdodE1hcEludGVuc2l0eT0xO3RoaXMuYW9NYXA9bnVsbDt0aGlzLmFvTWFwSW50ZW5zaXR5PTE7dGhpcy5lbWlzc2l2ZT1uZXcgQigwKTt0aGlzLmVtaXNzaXZlSW50ZW5zaXR5PTE7dGhpcy5idW1wTWFwPXRoaXMuZW1pc3NpdmVNYXA9bnVsbDt0aGlzLmJ1bXBTY2FsZT0KMTt0aGlzLm5vcm1hbE1hcD1udWxsO3RoaXMubm9ybWFsTWFwVHlwZT0wO3RoaXMubm9ybWFsU2NhbGU9bmV3IGQoMSwxKTt0aGlzLmRpc3BsYWNlbWVudE1hcD1udWxsO3RoaXMuZGlzcGxhY2VtZW50U2NhbGU9MTt0aGlzLmRpc3BsYWNlbWVudEJpYXM9MDt0aGlzLmVudk1hcD10aGlzLmFscGhhTWFwPXRoaXMuc3BlY3VsYXJNYXA9bnVsbDt0aGlzLmNvbWJpbmU9MDt0aGlzLnJlZmxlY3Rpdml0eT0xO3RoaXMucmVmcmFjdGlvblJhdGlvPS45ODt0aGlzLndpcmVmcmFtZT0hMTt0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xO3RoaXMud2lyZWZyYW1lTGluZWpvaW49dGhpcy53aXJlZnJhbWVMaW5lY2FwPSJyb3VuZCI7dGhpcy5tb3JwaE5vcm1hbHM9dGhpcy5tb3JwaFRhcmdldHM9dGhpcy5za2lubmluZz0hMTt0aGlzLnNldFZhbHVlcyhiKX1mdW5jdGlvbiByZShiKXtUYy5jYWxsKHRoaXMpO3RoaXMuZGVmaW5lcz17VE9PTjoiIn07dGhpcy50eXBlPSJNZXNoVG9vbk1hdGVyaWFsIjsKdGhpcy5ncmFkaWVudE1hcD1udWxsO3RoaXMuc2V0VmFsdWVzKGIpfWZ1bmN0aW9uIHNlKGIpe0dhLmNhbGwodGhpcyk7dGhpcy50eXBlPSJNZXNoTm9ybWFsTWF0ZXJpYWwiO3RoaXMuYnVtcE1hcD1udWxsO3RoaXMuYnVtcFNjYWxlPTE7dGhpcy5ub3JtYWxNYXA9bnVsbDt0aGlzLm5vcm1hbE1hcFR5cGU9MDt0aGlzLm5vcm1hbFNjYWxlPW5ldyBkKDEsMSk7dGhpcy5kaXNwbGFjZW1lbnRNYXA9bnVsbDt0aGlzLmRpc3BsYWNlbWVudFNjYWxlPTE7dGhpcy5kaXNwbGFjZW1lbnRCaWFzPTA7dGhpcy53aXJlZnJhbWU9ITE7dGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9MTt0aGlzLm1vcnBoTm9ybWFscz10aGlzLm1vcnBoVGFyZ2V0cz10aGlzLnNraW5uaW5nPXRoaXMubGlnaHRzPXRoaXMuZm9nPSExO3RoaXMuc2V0VmFsdWVzKGIpfWZ1bmN0aW9uIHRlKGIpe0dhLmNhbGwodGhpcyk7dGhpcy50eXBlPSJNZXNoTGFtYmVydE1hdGVyaWFsIjt0aGlzLmNvbG9yPW5ldyBCKDE2Nzc3MjE1KTsKdGhpcy5saWdodE1hcD10aGlzLm1hcD1udWxsO3RoaXMubGlnaHRNYXBJbnRlbnNpdHk9MTt0aGlzLmFvTWFwPW51bGw7dGhpcy5hb01hcEludGVuc2l0eT0xO3RoaXMuZW1pc3NpdmU9bmV3IEIoMCk7dGhpcy5lbWlzc2l2ZUludGVuc2l0eT0xO3RoaXMuZW52TWFwPXRoaXMuYWxwaGFNYXA9dGhpcy5zcGVjdWxhck1hcD10aGlzLmVtaXNzaXZlTWFwPW51bGw7dGhpcy5jb21iaW5lPTA7dGhpcy5yZWZsZWN0aXZpdHk9MTt0aGlzLnJlZnJhY3Rpb25SYXRpbz0uOTg7dGhpcy53aXJlZnJhbWU9ITE7dGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9MTt0aGlzLndpcmVmcmFtZUxpbmVqb2luPXRoaXMud2lyZWZyYW1lTGluZWNhcD0icm91bmQiO3RoaXMubW9ycGhOb3JtYWxzPXRoaXMubW9ycGhUYXJnZXRzPXRoaXMuc2tpbm5pbmc9ITE7dGhpcy5zZXRWYWx1ZXMoYil9ZnVuY3Rpb24gdWUoYil7R2EuY2FsbCh0aGlzKTt0aGlzLmRlZmluZXM9e01BVENBUDoiIn07dGhpcy50eXBlPSJNZXNoTWF0Y2FwTWF0ZXJpYWwiOwp0aGlzLmNvbG9yPW5ldyBCKDE2Nzc3MjE1KTt0aGlzLmJ1bXBNYXA9dGhpcy5tYXA9dGhpcy5tYXRjYXA9bnVsbDt0aGlzLmJ1bXBTY2FsZT0xO3RoaXMubm9ybWFsTWFwPW51bGw7dGhpcy5ub3JtYWxNYXBUeXBlPTA7dGhpcy5ub3JtYWxTY2FsZT1uZXcgZCgxLDEpO3RoaXMuZGlzcGxhY2VtZW50TWFwPW51bGw7dGhpcy5kaXNwbGFjZW1lbnRTY2FsZT0xO3RoaXMuZGlzcGxhY2VtZW50Qmlhcz0wO3RoaXMuYWxwaGFNYXA9bnVsbDt0aGlzLmxpZ2h0cz10aGlzLm1vcnBoTm9ybWFscz10aGlzLm1vcnBoVGFyZ2V0cz10aGlzLnNraW5uaW5nPSExO3RoaXMuc2V0VmFsdWVzKGIpfWZ1bmN0aW9uIHZlKGIpe0xiLmNhbGwodGhpcyk7dGhpcy50eXBlPSJMaW5lRGFzaGVkTWF0ZXJpYWwiO3RoaXMuc2NhbGU9MTt0aGlzLmRhc2hTaXplPTM7dGhpcy5nYXBTaXplPTE7dGhpcy5zZXRWYWx1ZXMoYil9ZnVuY3Rpb24gRGMoYixlLGgsbil7dGhpcy5wYXJhbWV0ZXJQb3NpdGlvbnM9Yjt0aGlzLl9jYWNoZWRJbmRleD0KMDt0aGlzLnJlc3VsdEJ1ZmZlcj12b2lkIDAhPT1uP246bmV3IGUuY29uc3RydWN0b3IoaCk7dGhpcy5zYW1wbGVWYWx1ZXM9ZTt0aGlzLnZhbHVlU2l6ZT1ofWZ1bmN0aW9uIG1oKGIsZSxoLG4pe0RjLmNhbGwodGhpcyxiLGUsaCxuKTt0aGlzLl9vZmZzZXROZXh0PXRoaXMuX3dlaWdodE5leHQ9dGhpcy5fb2Zmc2V0UHJldj10aGlzLl93ZWlnaHRQcmV2PS0wfWZ1bmN0aW9uIHFnKGIsZSxoLG4pe0RjLmNhbGwodGhpcyxiLGUsaCxuKX1mdW5jdGlvbiBuaChiLGUsaCxuKXtEYy5jYWxsKHRoaXMsYixlLGgsbil9ZnVuY3Rpb24gbWMoYixlLGgsbil7aWYodm9pZCAwPT09Yil0aHJvdyBFcnJvcigiVEhSRUUuS2V5ZnJhbWVUcmFjazogdHJhY2sgbmFtZSBpcyB1bmRlZmluZWQiKTtpZih2b2lkIDA9PT1lfHwwPT09ZS5sZW5ndGgpdGhyb3cgRXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IG5vIGtleWZyYW1lcyBpbiB0cmFjayBuYW1lZCAiK2IpO3RoaXMubmFtZT1iO3RoaXMudGltZXM9CmdjLmNvbnZlcnRBcnJheShlLHRoaXMuVGltZUJ1ZmZlclR5cGUpO3RoaXMudmFsdWVzPWdjLmNvbnZlcnRBcnJheShoLHRoaXMuVmFsdWVCdWZmZXJUeXBlKTt0aGlzLnNldEludGVycG9sYXRpb24obnx8dGhpcy5EZWZhdWx0SW50ZXJwb2xhdGlvbil9ZnVuY3Rpb24gb2goYixlLGgpe21jLmNhbGwodGhpcyxiLGUsaCl9ZnVuY3Rpb24gcGgoYixlLGgsbil7bWMuY2FsbCh0aGlzLGIsZSxoLG4pfWZ1bmN0aW9uIGZmKGIsZSxoLG4pe21jLmNhbGwodGhpcyxiLGUsaCxuKX1mdW5jdGlvbiBxaChiLGUsaCxuKXtEYy5jYWxsKHRoaXMsYixlLGgsbil9ZnVuY3Rpb24gcmcoYixlLGgsbil7bWMuY2FsbCh0aGlzLGIsZSxoLG4pfWZ1bmN0aW9uIHJoKGIsZSxoLG4pe21jLmNhbGwodGhpcyxiLGUsaCxuKX1mdW5jdGlvbiBnZihiLGUsaCxuKXttYy5jYWxsKHRoaXMsYixlLGgsbil9ZnVuY3Rpb24gSWMoYixlLGgpe3RoaXMubmFtZT1iO3RoaXMudHJhY2tzPWg7dGhpcy5kdXJhdGlvbj12b2lkIDAhPT0KZT9lOi0xO3RoaXMudXVpZD1vYi5nZW5lcmF0ZVVVSUQoKTswPnRoaXMuZHVyYXRpb24mJnRoaXMucmVzZXREdXJhdGlvbigpfWZ1bmN0aW9uIGFwKGIpe3N3aXRjaChiLnRvTG93ZXJDYXNlKCkpe2Nhc2UgInNjYWxhciI6Y2FzZSAiZG91YmxlIjpjYXNlICJmbG9hdCI6Y2FzZSAibnVtYmVyIjpjYXNlICJpbnRlZ2VyIjpyZXR1cm4gZmY7Y2FzZSAidmVjdG9yIjpjYXNlICJ2ZWN0b3IyIjpjYXNlICJ2ZWN0b3IzIjpjYXNlICJ2ZWN0b3I0IjpyZXR1cm4gZ2Y7Y2FzZSAiY29sb3IiOnJldHVybiBwaDtjYXNlICJxdWF0ZXJuaW9uIjpyZXR1cm4gcmc7Y2FzZSAiYm9vbCI6Y2FzZSAiYm9vbGVhbiI6cmV0dXJuIG9oO2Nhc2UgInN0cmluZyI6cmV0dXJuIHJofXRocm93IEVycm9yKCJUSFJFRS5LZXlmcmFtZVRyYWNrOiBVbnN1cHBvcnRlZCB0eXBlTmFtZTogIitiKTt9ZnVuY3Rpb24gYnAoYil7aWYodm9pZCAwPT09Yi50eXBlKXRocm93IEVycm9yKCJUSFJFRS5LZXlmcmFtZVRyYWNrOiB0cmFjayB0eXBlIHVuZGVmaW5lZCwgY2FuIG5vdCBwYXJzZSIpOwp2YXIgZT1hcChiLnR5cGUpO2lmKHZvaWQgMD09PWIudGltZXMpe3ZhciBoPVtdLG49W107Z2MuZmxhdHRlbkpTT04oYi5rZXlzLGgsbiwidmFsdWUiKTtiLnRpbWVzPWg7Yi52YWx1ZXM9bn1yZXR1cm4gdm9pZCAwIT09ZS5wYXJzZT9lLnBhcnNlKGIpOm5ldyBlKGIubmFtZSxiLnRpbWVzLGIudmFsdWVzLGIuaW50ZXJwb2xhdGlvbil9ZnVuY3Rpb24gRGkoYixlLGgpe3ZhciBuPXRoaXMsdT0hMSx3PTAsej0wLEU9dm9pZCAwO3RoaXMub25TdGFydD12b2lkIDA7dGhpcy5vbkxvYWQ9Yjt0aGlzLm9uUHJvZ3Jlc3M9ZTt0aGlzLm9uRXJyb3I9aDt0aGlzLml0ZW1TdGFydD1mdW5jdGlvbihIKXt6Kys7aWYoITE9PT11JiZ2b2lkIDAhPT1uLm9uU3RhcnQpbi5vblN0YXJ0KEgsdyx6KTt1PSEwfTt0aGlzLml0ZW1FbmQ9ZnVuY3Rpb24oSCl7dysrO2lmKHZvaWQgMCE9PW4ub25Qcm9ncmVzcyluLm9uUHJvZ3Jlc3MoSCx3LHopO2lmKHc9PT16JiYodT0hMSx2b2lkIDAhPT1uLm9uTG9hZCkpbi5vbkxvYWQoKX07CnRoaXMuaXRlbUVycm9yPWZ1bmN0aW9uKEgpe2lmKHZvaWQgMCE9PW4ub25FcnJvciluLm9uRXJyb3IoSCl9O3RoaXMucmVzb2x2ZVVSTD1mdW5jdGlvbihIKXtyZXR1cm4gRT9FKEgpOkh9O3RoaXMuc2V0VVJMTW9kaWZpZXI9ZnVuY3Rpb24oSCl7RT1IO3JldHVybiB0aGlzfX1mdW5jdGlvbiBVYyhiKXt0aGlzLm1hbmFnZXI9dm9pZCAwIT09Yj9iOkFjfWZ1bmN0aW9uIEVsKGIpe3RoaXMubWFuYWdlcj12b2lkIDAhPT1iP2I6QWN9ZnVuY3Rpb24gRmwoYil7dGhpcy5tYW5hZ2VyPXZvaWQgMCE9PWI/YjpBYzt0aGlzLl9wYXJzZXI9bnVsbH1mdW5jdGlvbiBFaShiKXt0aGlzLm1hbmFnZXI9dm9pZCAwIT09Yj9iOkFjO3RoaXMuX3BhcnNlcj1udWxsfWZ1bmN0aW9uIHNnKGIpe3RoaXMubWFuYWdlcj12b2lkIDAhPT1iP2I6QWN9ZnVuY3Rpb24gRmkoYil7dGhpcy5tYW5hZ2VyPXZvaWQgMCE9PWI/YjpBY31mdW5jdGlvbiBzaChiKXt0aGlzLm1hbmFnZXI9dm9pZCAwIT09Yj9iOkFjfQpmdW5jdGlvbiBlYigpe3RoaXMudHlwZT0iQ3VydmUiO3RoaXMuYXJjTGVuZ3RoRGl2aXNpb25zPTIwMH1mdW5jdGlvbiBFYyhiLGUsaCxuLHUsdyx6LEUpe2ViLmNhbGwodGhpcyk7dGhpcy50eXBlPSJFbGxpcHNlQ3VydmUiO3RoaXMuYVg9Ynx8MDt0aGlzLmFZPWV8fDA7dGhpcy54UmFkaXVzPWh8fDE7dGhpcy55UmFkaXVzPW58fDE7dGhpcy5hU3RhcnRBbmdsZT11fHwwO3RoaXMuYUVuZEFuZ2xlPXd8fDIqTWF0aC5QSTt0aGlzLmFDbG9ja3dpc2U9enx8ITE7dGhpcy5hUm90YXRpb249RXx8MH1mdW5jdGlvbiBoZihiLGUsaCxuLHUsdyl7RWMuY2FsbCh0aGlzLGIsZSxoLGgsbix1LHcpO3RoaXMudHlwZT0iQXJjQ3VydmUifWZ1bmN0aW9uIEdpKCl7ZnVuY3Rpb24gYih3LHosRSxIKXtlPXc7aD1FO249LTMqdyszKnotMipFLUg7dT0yKnctMip6K0UrSH12YXIgZT0wLGg9MCxuPTAsdT0wO3JldHVybntpbml0Q2F0bXVsbFJvbTpmdW5jdGlvbih3LHosRSxILEkpe2IoeixFLEkqKEUtCncpLEkqKEgteikpfSxpbml0Tm9udW5pZm9ybUNhdG11bGxSb206ZnVuY3Rpb24odyx6LEUsSCxJLE8sUSl7Yih6LEUsKCh6LXcpL0ktKEUtdykvKEkrTykrKEUteikvTykqTywoKEUteikvTy0oSC16KS8oTytRKSsoSC1FKS9RKSpPKX0sY2FsYzpmdW5jdGlvbih3KXt2YXIgej13Knc7cmV0dXJuIGUraCp3K24qeit1Knoqd319fWZ1bmN0aW9uIHJjKGIsZSxoLG4pe2ViLmNhbGwodGhpcyk7dGhpcy50eXBlPSJDYXRtdWxsUm9tQ3VydmUzIjt0aGlzLnBvaW50cz1ifHxbXTt0aGlzLmNsb3NlZD1lfHwhMTt0aGlzLmN1cnZlVHlwZT1ofHwiY2VudHJpcGV0YWwiO3RoaXMudGVuc2lvbj1ufHwuNX1mdW5jdGlvbiBHbChiLGUsaCxuLHUpe2U9LjUqKG4tZSk7dT0uNSoodS1oKTt2YXIgdz1iKmI7cmV0dXJuKDIqaC0yKm4rZSt1KSpiKncrKC0zKmgrMypuLTIqZS11KSp3K2UqYitofWZ1bmN0aW9uIGNwKGIsZSl7Yj0xLWI7cmV0dXJuIGIqYiplfWZ1bmN0aW9uIGRwKGIsZSl7cmV0dXJuIDIqCigxLWIpKmIqZX1mdW5jdGlvbiBlcChiLGUpe3JldHVybiBiKmIqZX1mdW5jdGlvbiB0ZyhiLGUsaCxuKXtyZXR1cm4gY3AoYixlKStkcChiLGgpK2VwKGIsbil9ZnVuY3Rpb24gZnAoYixlKXtiPTEtYjtyZXR1cm4gYipiKmIqZX1mdW5jdGlvbiBncChiLGUpe3ZhciBoPTEtYjtyZXR1cm4gMypoKmgqYiplfWZ1bmN0aW9uIGhwKGIsZSl7cmV0dXJuIDMqKDEtYikqYipiKmV9ZnVuY3Rpb24gaXAoYixlKXtyZXR1cm4gYipiKmIqZX1mdW5jdGlvbiB1ZyhiLGUsaCxuLHUpe3JldHVybiBmcChiLGUpK2dwKGIsaCkraHAoYixuKStpcChiLHUpfWZ1bmN0aW9uIFZjKGIsZSxoLG4pe2ViLmNhbGwodGhpcyk7dGhpcy50eXBlPSJDdWJpY0JlemllckN1cnZlIjt0aGlzLnYwPWJ8fG5ldyBkO3RoaXMudjE9ZXx8bmV3IGQ7dGhpcy52Mj1ofHxuZXcgZDt0aGlzLnYzPW58fG5ldyBkfWZ1bmN0aW9uIG9kKGIsZSxoLG4pe2ViLmNhbGwodGhpcyk7dGhpcy50eXBlPSJDdWJpY0JlemllckN1cnZlMyI7CnRoaXMudjA9Ynx8bmV3IGc7dGhpcy52MT1lfHxuZXcgZzt0aGlzLnYyPWh8fG5ldyBnO3RoaXMudjM9bnx8bmV3IGd9ZnVuY3Rpb24gQmMoYixlKXtlYi5jYWxsKHRoaXMpO3RoaXMudHlwZT0iTGluZUN1cnZlIjt0aGlzLnYxPWJ8fG5ldyBkO3RoaXMudjI9ZXx8bmV3IGR9ZnVuY3Rpb24gV2MoYixlKXtlYi5jYWxsKHRoaXMpO3RoaXMudHlwZT0iTGluZUN1cnZlMyI7dGhpcy52MT1ifHxuZXcgZzt0aGlzLnYyPWV8fG5ldyBnfWZ1bmN0aW9uIFhjKGIsZSxoKXtlYi5jYWxsKHRoaXMpO3RoaXMudHlwZT0iUXVhZHJhdGljQmV6aWVyQ3VydmUiO3RoaXMudjA9Ynx8bmV3IGQ7dGhpcy52MT1lfHxuZXcgZDt0aGlzLnYyPWh8fG5ldyBkfWZ1bmN0aW9uIHBkKGIsZSxoKXtlYi5jYWxsKHRoaXMpO3RoaXMudHlwZT0iUXVhZHJhdGljQmV6aWVyQ3VydmUzIjt0aGlzLnYwPWJ8fG5ldyBnO3RoaXMudjE9ZXx8bmV3IGc7dGhpcy52Mj1ofHxuZXcgZ31mdW5jdGlvbiBZYyhiKXtlYi5jYWxsKHRoaXMpOwp0aGlzLnR5cGU9IlNwbGluZUN1cnZlIjt0aGlzLnBvaW50cz1ifHxbXX1mdW5jdGlvbiBBZCgpe2ViLmNhbGwodGhpcyk7dGhpcy50eXBlPSJDdXJ2ZVBhdGgiO3RoaXMuY3VydmVzPVtdO3RoaXMuYXV0b0Nsb3NlPSExfWZ1bmN0aW9uIFpjKGIpe0FkLmNhbGwodGhpcyk7dGhpcy50eXBlPSJQYXRoIjt0aGlzLmN1cnJlbnRQb2ludD1uZXcgZDtiJiZ0aGlzLnNldEZyb21Qb2ludHMoYil9ZnVuY3Rpb24gWGQoYil7WmMuY2FsbCh0aGlzLGIpO3RoaXMudXVpZD1vYi5nZW5lcmF0ZVVVSUQoKTt0aGlzLnR5cGU9IlNoYXBlIjt0aGlzLmhvbGVzPVtdfWZ1bmN0aW9uIFNiKGIsZSl7Uy5jYWxsKHRoaXMpO3RoaXMudHlwZT0iTGlnaHQiO3RoaXMuY29sb3I9bmV3IEIoYik7dGhpcy5pbnRlbnNpdHk9dm9pZCAwIT09ZT9lOjE7dGhpcy5yZWNlaXZlU2hhZG93PXZvaWQgMH1mdW5jdGlvbiB0aChiLGUsaCl7U2IuY2FsbCh0aGlzLGIsaCk7dGhpcy50eXBlPSJIZW1pc3BoZXJlTGlnaHQiO3RoaXMuY2FzdFNoYWRvdz0Kdm9pZCAwO3RoaXMucG9zaXRpb24uY29weShTLkRlZmF1bHRVcCk7dGhpcy51cGRhdGVNYXRyaXgoKTt0aGlzLmdyb3VuZENvbG9yPW5ldyBCKGUpfWZ1bmN0aW9uIHdlKGIpe3RoaXMuY2FtZXJhPWI7dGhpcy5iaWFzPTA7dGhpcy5yYWRpdXM9MTt0aGlzLm1hcFNpemU9bmV3IGQoNTEyLDUxMik7dGhpcy5tYXA9bnVsbDt0aGlzLm1hdHJpeD1uZXcgQ31mdW5jdGlvbiB1aCgpe3dlLmNhbGwodGhpcyxuZXcgY2MoNTAsMSwuNSw1MDApKX1mdW5jdGlvbiB2aChiLGUsaCxuLHUsdyl7U2IuY2FsbCh0aGlzLGIsZSk7dGhpcy50eXBlPSJTcG90TGlnaHQiO3RoaXMucG9zaXRpb24uY29weShTLkRlZmF1bHRVcCk7dGhpcy51cGRhdGVNYXRyaXgoKTt0aGlzLnRhcmdldD1uZXcgUztPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywicG93ZXIiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbnRlbnNpdHkqTWF0aC5QSX0sc2V0OmZ1bmN0aW9uKHope3RoaXMuaW50ZW5zaXR5PXovTWF0aC5QSX19KTsKdGhpcy5kaXN0YW5jZT12b2lkIDAhPT1oP2g6MDt0aGlzLmFuZ2xlPXZvaWQgMCE9PW4/bjpNYXRoLlBJLzM7dGhpcy5wZW51bWJyYT12b2lkIDAhPT11P3U6MDt0aGlzLmRlY2F5PXZvaWQgMCE9PXc/dzoxO3RoaXMuc2hhZG93PW5ldyB1aH1mdW5jdGlvbiB3aChiLGUsaCxuKXtTYi5jYWxsKHRoaXMsYixlKTt0aGlzLnR5cGU9IlBvaW50TGlnaHQiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJwb3dlciIse2dldDpmdW5jdGlvbigpe3JldHVybiA0KnRoaXMuaW50ZW5zaXR5Kk1hdGguUEl9LHNldDpmdW5jdGlvbih1KXt0aGlzLmludGVuc2l0eT11Lyg0Kk1hdGguUEkpfX0pO3RoaXMuZGlzdGFuY2U9dm9pZCAwIT09aD9oOjA7dGhpcy5kZWNheT12b2lkIDAhPT1uP246MTt0aGlzLnNoYWRvdz1uZXcgd2UobmV3IGNjKDkwLDEsLjUsNTAwKSl9ZnVuY3Rpb24gdmcoYixlLGgsbix1LHcpe2pkLmNhbGwodGhpcyk7dGhpcy50eXBlPSJPcnRob2dyYXBoaWNDYW1lcmEiO3RoaXMuem9vbT0KMTt0aGlzLnZpZXc9bnVsbDt0aGlzLmxlZnQ9dm9pZCAwIT09Yj9iOi0xO3RoaXMucmlnaHQ9dm9pZCAwIT09ZT9lOjE7dGhpcy50b3A9dm9pZCAwIT09aD9oOjE7dGhpcy5ib3R0b209dm9pZCAwIT09bj9uOi0xO3RoaXMubmVhcj12b2lkIDAhPT11P3U6LjE7dGhpcy5mYXI9dm9pZCAwIT09dz93OjJFMzt0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX1mdW5jdGlvbiB4aCgpe3dlLmNhbGwodGhpcyxuZXcgdmcoLTUsNSw1LC01LC41LDUwMCkpfWZ1bmN0aW9uIHloKGIsZSl7U2IuY2FsbCh0aGlzLGIsZSk7dGhpcy50eXBlPSJEaXJlY3Rpb25hbExpZ2h0Ijt0aGlzLnBvc2l0aW9uLmNvcHkoUy5EZWZhdWx0VXApO3RoaXMudXBkYXRlTWF0cml4KCk7dGhpcy50YXJnZXQ9bmV3IFM7dGhpcy5zaGFkb3c9bmV3IHhofWZ1bmN0aW9uIHpoKGIsZSl7U2IuY2FsbCh0aGlzLGIsZSk7dGhpcy50eXBlPSJBbWJpZW50TGlnaHQiO3RoaXMuY2FzdFNoYWRvdz12b2lkIDB9ZnVuY3Rpb24gQWgoYiwKZSxoLG4pe1NiLmNhbGwodGhpcyxiLGUpO3RoaXMudHlwZT0iUmVjdEFyZWFMaWdodCI7dGhpcy53aWR0aD12b2lkIDAhPT1oP2g6MTA7dGhpcy5oZWlnaHQ9dm9pZCAwIT09bj9uOjEwfWZ1bmN0aW9uIEJoKGIpe3RoaXMubWFuYWdlcj12b2lkIDAhPT1iP2I6QWM7dGhpcy50ZXh0dXJlcz17fX1mdW5jdGlvbiBIaShiKXt0aGlzLm1hbmFnZXI9dm9pZCAwIT09Yj9iOkFjfWZ1bmN0aW9uIElpKGIpe3RoaXMubWFuYWdlcj12b2lkIDAhPT1iP2I6QWM7dGhpcy5yZXNvdXJjZVBhdGg9IiJ9ZnVuY3Rpb24gSmkoYil7InVuZGVmaW5lZCI9PT10eXBlb2YgY3JlYXRlSW1hZ2VCaXRtYXAmJmNvbnNvbGUud2FybigiVEhSRUUuSW1hZ2VCaXRtYXBMb2FkZXI6IGNyZWF0ZUltYWdlQml0bWFwKCkgbm90IHN1cHBvcnRlZC4iKTsidW5kZWZpbmVkIj09PXR5cGVvZiBmZXRjaCYmY29uc29sZS53YXJuKCJUSFJFRS5JbWFnZUJpdG1hcExvYWRlcjogZmV0Y2goKSBub3Qgc3VwcG9ydGVkLiIpO3RoaXMubWFuYWdlcj0Kdm9pZCAwIT09Yj9iOkFjO3RoaXMub3B0aW9ucz12b2lkIDB9ZnVuY3Rpb24gS2koKXt0aGlzLnR5cGU9IlNoYXBlUGF0aCI7dGhpcy5jb2xvcj1uZXcgQjt0aGlzLnN1YlBhdGhzPVtdO3RoaXMuY3VycmVudFBhdGg9bnVsbH1mdW5jdGlvbiBMaShiKXt0aGlzLnR5cGU9IkZvbnQiO3RoaXMuZGF0YT1ifWZ1bmN0aW9uIGpwKGIsZSxoKXtiPUFycmF5LmZyb20/QXJyYXkuZnJvbShiKTpTdHJpbmcoYikuc3BsaXQoIiIpO2UvPWgucmVzb2x1dGlvbjtmb3IodmFyIG49KGguYm91bmRpbmdCb3gueU1heC1oLmJvdW5kaW5nQm94LnlNaW4raC51bmRlcmxpbmVUaGlja25lc3MpKmUsdT1bXSx3PTAsej0wLEU9MDtFPGIubGVuZ3RoO0UrKyl7dmFyIEg9YltFXTsiXG4iPT09SD8odz0wLHotPW4pOihIPWtwKEgsZSx3LHosaCksdys9SC5vZmZzZXRYLHUucHVzaChILnBhdGgpKX1yZXR1cm4gdX1mdW5jdGlvbiBrcChiLGUsaCxuLHUpe2lmKGI9dS5nbHlwaHNbYl18fHUuZ2x5cGhzWyI/Il0pe3U9Cm5ldyBLaTtpZihiLm8pZm9yKHZhciB3PWIuX2NhY2hlZE91dGxpbmV8fChiLl9jYWNoZWRPdXRsaW5lPWIuby5zcGxpdCgiICIpKSx6PTAsRT13Lmxlbmd0aDt6PEU7KXN3aXRjaCh3W3orK10pe2Nhc2UgIm0iOnZhciBIPXdbeisrXSplK2g7dmFyIEk9d1t6KytdKmUrbjt1Lm1vdmVUbyhILEkpO2JyZWFrO2Nhc2UgImwiOkg9d1t6KytdKmUraDtJPXdbeisrXSplK247dS5saW5lVG8oSCxJKTticmVhaztjYXNlICJxIjpIPXdbeisrXSplK2g7ST13W3orK10qZStuO3ZhciBPPXdbeisrXSplK2g7dmFyIFE9d1t6KytdKmUrbjt1LnF1YWRyYXRpY0N1cnZlVG8oTyxRLEgsSSk7YnJlYWs7Y2FzZSAiYiI6SD13W3orK10qZStoO0k9d1t6KytdKmUrbjtPPXdbeisrXSplK2g7UT13W3orK10qZStuO3ZhciBSPXdbeisrXSplK2g7dmFyIFU9d1t6KytdKmUrbjt1LmJlemllckN1cnZlVG8oTyxRLFIsVSxILEkpfXJldHVybntvZmZzZXRYOmIuaGEqZSxwYXRoOnV9fX1mdW5jdGlvbiBIbChiKXt0aGlzLm1hbmFnZXI9CnZvaWQgMCE9PWI/YjpBY31mdW5jdGlvbiB3Zygpe31mdW5jdGlvbiBNaShiKXt0aGlzLm1hbmFnZXI9dm9pZCAwIT09Yj9iOkFjfWZ1bmN0aW9uIENoKCl7dGhpcy5jb2VmZmljaWVudHM9W107Zm9yKHZhciBiPTA7OT5iO2IrKyl0aGlzLmNvZWZmaWNpZW50cy5wdXNoKG5ldyBnKX1mdW5jdGlvbiAkYyhiLGUpe1NiLmNhbGwodGhpcyx2b2lkIDAsZSk7dGhpcy5zaD12b2lkIDAhPT1iP2I6bmV3IENofWZ1bmN0aW9uIE5pKGIsZSxoKXskYy5jYWxsKHRoaXMsdm9pZCAwLGgpO2I9KG5ldyBCKS5zZXQoYik7aD0obmV3IEIpLnNldChlKTtlPW5ldyBnKGIucixiLmcsYi5iKTtiPW5ldyBnKGgucixoLmcsaC5iKTtoPU1hdGguc3FydChNYXRoLlBJKTt2YXIgbj1oKk1hdGguc3FydCguNzUpO3RoaXMuc2guY29lZmZpY2llbnRzWzBdLmNvcHkoZSkuYWRkKGIpLm11bHRpcGx5U2NhbGFyKGgpO3RoaXMuc2guY29lZmZpY2llbnRzWzFdLmNvcHkoZSkuc3ViKGIpLm11bHRpcGx5U2NhbGFyKG4pfQpmdW5jdGlvbiBPaShiLGUpeyRjLmNhbGwodGhpcyx2b2lkIDAsZSk7Yj0obmV3IEIpLnNldChiKTt0aGlzLnNoLmNvZWZmaWNpZW50c1swXS5zZXQoYi5yLGIuZyxiLmIpLm11bHRpcGx5U2NhbGFyKDIqTWF0aC5zcXJ0KE1hdGguUEkpKX1mdW5jdGlvbiBJbCgpe3RoaXMudHlwZT0iU3RlcmVvQ2FtZXJhIjt0aGlzLmFzcGVjdD0xO3RoaXMuZXllU2VwPS4wNjQ7dGhpcy5jYW1lcmFMPW5ldyBjYzt0aGlzLmNhbWVyYUwubGF5ZXJzLmVuYWJsZSgxKTt0aGlzLmNhbWVyYUwubWF0cml4QXV0b1VwZGF0ZT0hMTt0aGlzLmNhbWVyYVI9bmV3IGNjO3RoaXMuY2FtZXJhUi5sYXllcnMuZW5hYmxlKDIpO3RoaXMuY2FtZXJhUi5tYXRyaXhBdXRvVXBkYXRlPSExfWZ1bmN0aW9uIHhnKGIsZSxoLG4pe1MuY2FsbCh0aGlzKTt0aGlzLnR5cGU9IkN1YmVDYW1lcmEiO3ZhciB1PW5ldyBjYyg5MCwxLGIsZSk7dS51cC5zZXQoMCwtMSwwKTt1Lmxvb2tBdChuZXcgZygxLDAsMCkpO3RoaXMuYWRkKHUpOwp2YXIgdz1uZXcgY2MoOTAsMSxiLGUpO3cudXAuc2V0KDAsLTEsMCk7dy5sb29rQXQobmV3IGcoLTEsMCwwKSk7dGhpcy5hZGQodyk7dmFyIHo9bmV3IGNjKDkwLDEsYixlKTt6LnVwLnNldCgwLDAsMSk7ei5sb29rQXQobmV3IGcoMCwxLDApKTt0aGlzLmFkZCh6KTt2YXIgRT1uZXcgY2MoOTAsMSxiLGUpO0UudXAuc2V0KDAsMCwtMSk7RS5sb29rQXQobmV3IGcoMCwtMSwwKSk7dGhpcy5hZGQoRSk7dmFyIEg9bmV3IGNjKDkwLDEsYixlKTtILnVwLnNldCgwLC0xLDApO0gubG9va0F0KG5ldyBnKDAsMCwxKSk7dGhpcy5hZGQoSCk7dmFyIEk9bmV3IGNjKDkwLDEsYixlKTtJLnVwLnNldCgwLC0xLDApO0kubG9va0F0KG5ldyBnKDAsMCwtMSkpO3RoaXMuYWRkKEkpO249bnx8e2Zvcm1hdDoxMDIyLG1hZ0ZpbHRlcjoxMDA2LG1pbkZpbHRlcjoxMDA2fTt0aGlzLnJlbmRlclRhcmdldD1uZXcgcihoLGgsbik7dGhpcy5yZW5kZXJUYXJnZXQudGV4dHVyZS5uYW1lPSJDdWJlQ2FtZXJhIjsKdGhpcy51cGRhdGU9ZnVuY3Rpb24oTyxRKXtudWxsPT09dGhpcy5wYXJlbnQmJnRoaXMudXBkYXRlTWF0cml4V29ybGQoKTt2YXIgUj1PLmdldFJlbmRlclRhcmdldCgpLFU9dGhpcy5yZW5kZXJUYXJnZXQsVz1VLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzO1UudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHM9ITE7Ty5zZXRSZW5kZXJUYXJnZXQoVSwwKTtPLnJlbmRlcihRLHUpO08uc2V0UmVuZGVyVGFyZ2V0KFUsMSk7Ty5yZW5kZXIoUSx3KTtPLnNldFJlbmRlclRhcmdldChVLDIpO08ucmVuZGVyKFEseik7Ty5zZXRSZW5kZXJUYXJnZXQoVSwzKTtPLnJlbmRlcihRLEUpO08uc2V0UmVuZGVyVGFyZ2V0KFUsNCk7Ty5yZW5kZXIoUSxIKTtVLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzPVc7Ty5zZXRSZW5kZXJUYXJnZXQoVSw1KTtPLnJlbmRlcihRLEkpO08uc2V0UmVuZGVyVGFyZ2V0KFIpfTt0aGlzLmNsZWFyPWZ1bmN0aW9uKE8sUSxSLFUpe2Zvcih2YXIgVz1PLmdldFJlbmRlclRhcmdldCgpLApaPXRoaXMucmVuZGVyVGFyZ2V0LGZhPTA7Nj5mYTtmYSsrKU8uc2V0UmVuZGVyVGFyZ2V0KFosZmEpLE8uY2xlYXIoUSxSLFUpO08uc2V0UmVuZGVyVGFyZ2V0KFcpfX1mdW5jdGlvbiBQaShiKXt0aGlzLmF1dG9TdGFydD12b2lkIDAhPT1iP2I6ITA7dGhpcy5lbGFwc2VkVGltZT10aGlzLm9sZFRpbWU9dGhpcy5zdGFydFRpbWU9MDt0aGlzLnJ1bm5pbmc9ITF9ZnVuY3Rpb24gUWkoKXtTLmNhbGwodGhpcyk7dGhpcy50eXBlPSJBdWRpb0xpc3RlbmVyIjt0aGlzLmNvbnRleHQ9UmkuZ2V0Q29udGV4dCgpO3RoaXMuZ2Fpbj10aGlzLmNvbnRleHQuY3JlYXRlR2FpbigpO3RoaXMuZ2Fpbi5jb25uZWN0KHRoaXMuY29udGV4dC5kZXN0aW5hdGlvbik7dGhpcy5maWx0ZXI9bnVsbDt0aGlzLnRpbWVEZWx0YT0wfWZ1bmN0aW9uIGpmKGIpe1MuY2FsbCh0aGlzKTt0aGlzLnR5cGU9IkF1ZGlvIjt0aGlzLmxpc3RlbmVyPWI7dGhpcy5jb250ZXh0PWIuY29udGV4dDt0aGlzLmdhaW49dGhpcy5jb250ZXh0LmNyZWF0ZUdhaW4oKTsKdGhpcy5nYWluLmNvbm5lY3QoYi5nZXRJbnB1dCgpKTt0aGlzLmF1dG9wbGF5PSExO3RoaXMuYnVmZmVyPW51bGw7dGhpcy5kZXR1bmU9MDt0aGlzLmxvb3A9ITE7dGhpcy5vZmZzZXQ9dGhpcy5zdGFydFRpbWU9MDt0aGlzLnBsYXliYWNrUmF0ZT0xO3RoaXMuaXNQbGF5aW5nPSExO3RoaXMuaGFzUGxheWJhY2tDb250cm9sPSEwO3RoaXMuc291cmNlVHlwZT0iZW1wdHkiO3RoaXMuZmlsdGVycz1bXX1mdW5jdGlvbiBTaShiKXtqZi5jYWxsKHRoaXMsYik7dGhpcy5wYW5uZXI9dGhpcy5jb250ZXh0LmNyZWF0ZVBhbm5lcigpO3RoaXMucGFubmVyLmNvbm5lY3QodGhpcy5nYWluKX1mdW5jdGlvbiBUaShiLGUpe3RoaXMuYW5hbHlzZXI9Yi5jb250ZXh0LmNyZWF0ZUFuYWx5c2VyKCk7dGhpcy5hbmFseXNlci5mZnRTaXplPXZvaWQgMCE9PWU/ZToyMDQ4O3RoaXMuZGF0YT1uZXcgVWludDhBcnJheSh0aGlzLmFuYWx5c2VyLmZyZXF1ZW5jeUJpbkNvdW50KTtiLmdldE91dHB1dCgpLmNvbm5lY3QodGhpcy5hbmFseXNlcil9CmZ1bmN0aW9uIFVpKGIsZSxoKXt0aGlzLmJpbmRpbmc9Yjt0aGlzLnZhbHVlU2l6ZT1oO2I9RmxvYXQ2NEFycmF5O3N3aXRjaChlKXtjYXNlICJxdWF0ZXJuaW9uIjplPXRoaXMuX3NsZXJwO2JyZWFrO2Nhc2UgInN0cmluZyI6Y2FzZSAiYm9vbCI6Yj1BcnJheTtlPXRoaXMuX3NlbGVjdDticmVhaztkZWZhdWx0OmU9dGhpcy5fbGVycH10aGlzLmJ1ZmZlcj1uZXcgYig0KmgpO3RoaXMuX21peEJ1ZmZlclJlZ2lvbj1lO3RoaXMucmVmZXJlbmNlQ291bnQ9dGhpcy51c2VDb3VudD10aGlzLmN1bXVsYXRpdmVXZWlnaHQ9MH1mdW5jdGlvbiBKbChiLGUsaCl7aD1ofHxzYy5wYXJzZVRyYWNrTmFtZShlKTt0aGlzLl90YXJnZXRHcm91cD1iO3RoaXMuX2JpbmRpbmdzPWIuc3Vic2NyaWJlXyhlLGgpfWZ1bmN0aW9uIHNjKGIsZSxoKXt0aGlzLnBhdGg9ZTt0aGlzLnBhcnNlZFBhdGg9aHx8c2MucGFyc2VUcmFja05hbWUoZSk7dGhpcy5ub2RlPXNjLmZpbmROb2RlKGIsdGhpcy5wYXJzZWRQYXRoLm5vZGVOYW1lKXx8CmI7dGhpcy5yb290Tm9kZT1ifWZ1bmN0aW9uIEtsKCl7dGhpcy51dWlkPW9iLmdlbmVyYXRlVVVJRCgpO3RoaXMuX29iamVjdHM9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTt0aGlzLm5DYWNoZWRPYmplY3RzXz0wO3ZhciBiPXt9O3RoaXMuX2luZGljZXNCeVVVSUQ9Yjtmb3IodmFyIGU9MCxoPWFyZ3VtZW50cy5sZW5ndGg7ZSE9PWg7KytlKWJbYXJndW1lbnRzW2VdLnV1aWRdPWU7dGhpcy5fcGF0aHM9W107dGhpcy5fcGFyc2VkUGF0aHM9W107dGhpcy5fYmluZGluZ3M9W107dGhpcy5fYmluZGluZ3NJbmRpY2VzQnlQYXRoPXt9O3ZhciBuPXRoaXM7dGhpcy5zdGF0cz17b2JqZWN0czp7Z2V0IHRvdGFsKCl7cmV0dXJuIG4uX29iamVjdHMubGVuZ3RofSxnZXQgaW5Vc2UoKXtyZXR1cm4gdGhpcy50b3RhbC1uLm5DYWNoZWRPYmplY3RzX319LGdldCBiaW5kaW5nc1Blck9iamVjdCgpe3JldHVybiBuLl9iaW5kaW5ncy5sZW5ndGh9fX1mdW5jdGlvbiBMbChiLAplLGgpe3RoaXMuX21peGVyPWI7dGhpcy5fY2xpcD1lO3RoaXMuX2xvY2FsUm9vdD1ofHxudWxsO2I9ZS50cmFja3M7ZT1iLmxlbmd0aDtoPUFycmF5KGUpO2Zvcih2YXIgbj17ZW5kaW5nU3RhcnQ6MjQwMCxlbmRpbmdFbmQ6MjQwMH0sdT0wO3UhPT1lOysrdSl7dmFyIHc9Ylt1XS5jcmVhdGVJbnRlcnBvbGFudChudWxsKTtoW3VdPXc7dy5zZXR0aW5ncz1ufXRoaXMuX2ludGVycG9sYW50U2V0dGluZ3M9bjt0aGlzLl9pbnRlcnBvbGFudHM9aDt0aGlzLl9wcm9wZXJ0eUJpbmRpbmdzPUFycmF5KGUpO3RoaXMuX3dlaWdodEludGVycG9sYW50PXRoaXMuX3RpbWVTY2FsZUludGVycG9sYW50PXRoaXMuX2J5Q2xpcENhY2hlSW5kZXg9dGhpcy5fY2FjaGVJbmRleD1udWxsO3RoaXMubG9vcD0yMjAxO3RoaXMuX2xvb3BDb3VudD0tMTt0aGlzLl9zdGFydFRpbWU9bnVsbDt0aGlzLnRpbWU9MDt0aGlzLl9lZmZlY3RpdmVXZWlnaHQ9dGhpcy53ZWlnaHQ9dGhpcy5fZWZmZWN0aXZlVGltZVNjYWxlPQp0aGlzLnRpbWVTY2FsZT0xO3RoaXMucmVwZXRpdGlvbnM9SW5maW5pdHk7dGhpcy5wYXVzZWQ9ITE7dGhpcy5lbmFibGVkPSEwO3RoaXMuY2xhbXBXaGVuRmluaXNoZWQ9ITE7dGhpcy56ZXJvU2xvcGVBdEVuZD10aGlzLnplcm9TbG9wZUF0U3RhcnQ9ITB9ZnVuY3Rpb24gVmkoYil7dGhpcy5fcm9vdD1iO3RoaXMuX2luaXRNZW1vcnlNYW5hZ2VyKCk7dGhpcy50aW1lPXRoaXMuX2FjY3VJbmRleD0wO3RoaXMudGltZVNjYWxlPTF9ZnVuY3Rpb24gRGgoYixlKXsic3RyaW5nIj09PXR5cGVvZiBiJiYoY29uc29sZS53YXJuKCJUSFJFRS5Vbmlmb3JtOiBUeXBlIHBhcmFtZXRlciBpcyBubyBsb25nZXIgbmVlZGVkLiIpLGI9ZSk7dGhpcy52YWx1ZT1ifWZ1bmN0aW9uIFdpKCl7eGEuY2FsbCh0aGlzKTt0aGlzLnR5cGU9Ikluc3RhbmNlZEJ1ZmZlckdlb21ldHJ5Ijt0aGlzLm1heEluc3RhbmNlZENvdW50PXZvaWQgMH1mdW5jdGlvbiBYaShiLGUsaCl7aGUuY2FsbCh0aGlzLGIsZSk7dGhpcy5tZXNoUGVyQXR0cmlidXRlPQpofHwxfWZ1bmN0aW9uIFlpKGIsZSxoLG4peyJudW1iZXIiPT09dHlwZW9mIGgmJihuPWgsaD0hMSxjb25zb2xlLmVycm9yKCJUSFJFRS5JbnN0YW5jZWRCdWZmZXJBdHRyaWJ1dGU6IFRoZSBjb25zdHJ1Y3RvciBub3cgZXhwZWN0cyBub3JtYWxpemVkIGFzIHRoZSB0aGlyZCBhcmd1bWVudC4iKSk7VC5jYWxsKHRoaXMsYixlLGgpO3RoaXMubWVzaFBlckF0dHJpYnV0ZT1ufHwxfWZ1bmN0aW9uIE1sKGIsZSxoLG4pe3RoaXMucmF5PW5ldyB4YihiLGUpO3RoaXMubmVhcj1ofHwwO3RoaXMuZmFyPW58fEluZmluaXR5O3RoaXMucGFyYW1zPXtNZXNoOnt9LExpbmU6e30sTE9EOnt9LFBvaW50czp7dGhyZXNob2xkOjF9LFNwcml0ZTp7fX07T2JqZWN0LmRlZmluZVByb3BlcnRpZXModGhpcy5wYXJhbXMse1BvaW50Q2xvdWQ6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuUmF5Y2FzdGVyOiBwYXJhbXMuUG9pbnRDbG91ZCBoYXMgYmVlbiByZW5hbWVkIHRvIHBhcmFtcy5Qb2ludHMuIik7CnJldHVybiB0aGlzLlBvaW50c319fSl9ZnVuY3Rpb24gTmwoYixlKXtyZXR1cm4gYi5kaXN0YW5jZS1lLmRpc3RhbmNlfWZ1bmN0aW9uIFppKGIsZSxoLG4pe2lmKCExIT09Yi52aXNpYmxlJiYoYi5yYXljYXN0KGUsaCksITA9PT1uKSl7Yj1iLmNoaWxkcmVuO249MDtmb3IodmFyIHU9Yi5sZW5ndGg7bjx1O24rKylaaShiW25dLGUsaCwhMCl9fWZ1bmN0aW9uIE9sKGIsZSxoKXt0aGlzLnJhZGl1cz12b2lkIDAhPT1iP2I6MTt0aGlzLnBoaT12b2lkIDAhPT1lP2U6MDt0aGlzLnRoZXRhPXZvaWQgMCE9PWg/aDowO3JldHVybiB0aGlzfWZ1bmN0aW9uIFBsKGIsZSxoKXt0aGlzLnJhZGl1cz12b2lkIDAhPT1iP2I6MTt0aGlzLnRoZXRhPXZvaWQgMCE9PWU/ZTowO3RoaXMueT12b2lkIDAhPT1oP2g6MDtyZXR1cm4gdGhpc31mdW5jdGlvbiAkaShiLGUpe3RoaXMubWluPXZvaWQgMCE9PWI/YjpuZXcgZChJbmZpbml0eSxJbmZpbml0eSk7dGhpcy5tYXg9dm9pZCAwIT09ZT9lOm5ldyBkKC1JbmZpbml0eSwKLUluZmluaXR5KX1mdW5jdGlvbiBhaihiLGUpe3RoaXMuc3RhcnQ9dm9pZCAwIT09Yj9iOm5ldyBnO3RoaXMuZW5kPXZvaWQgMCE9PWU/ZTpuZXcgZ31mdW5jdGlvbiB5ZyhiKXtTLmNhbGwodGhpcyk7dGhpcy5tYXRlcmlhbD1iO3RoaXMucmVuZGVyPWZ1bmN0aW9uKCl7fX1mdW5jdGlvbiB6ZyhiLGUsaCxuKXt0aGlzLm9iamVjdD1iO3RoaXMuc2l6ZT12b2lkIDAhPT1lP2U6MTtiPXZvaWQgMCE9PWg/aDoxNjcxMTY4MDtuPXZvaWQgMCE9PW4/bjoxO2U9MDsoaD10aGlzLm9iamVjdC5nZW9tZXRyeSkmJmguaXNHZW9tZXRyeT9lPTMqaC5mYWNlcy5sZW5ndGg6aCYmaC5pc0J1ZmZlckdlb21ldHJ5JiYoZT1oLmF0dHJpYnV0ZXMubm9ybWFsLmNvdW50KTtoPW5ldyB4YTtlPW5ldyBiYSg2KmUsMyk7aC5hZGRBdHRyaWJ1dGUoInBvc2l0aW9uIixlKTtQYi5jYWxsKHRoaXMsaCxuZXcgTGIoe2NvbG9yOmIsbGluZXdpZHRoOm59KSk7dGhpcy5tYXRyaXhBdXRvVXBkYXRlPSExO3RoaXMudXBkYXRlKCl9CmZ1bmN0aW9uIGtmKGIsZSl7Uy5jYWxsKHRoaXMpO3RoaXMubGlnaHQ9Yjt0aGlzLmxpZ2h0LnVwZGF0ZU1hdHJpeFdvcmxkKCk7dGhpcy5tYXRyaXg9Yi5tYXRyaXhXb3JsZDt0aGlzLm1hdHJpeEF1dG9VcGRhdGU9ITE7dGhpcy5jb2xvcj1lO2I9bmV3IHhhO2U9WzAsMCwwLDAsMCwxLDAsMCwwLDEsMCwxLDAsMCwwLC0xLDAsMSwwLDAsMCwwLDEsMSwwLDAsMCwwLC0xLDFdO2Zvcih2YXIgaD0wLG49MTszMj5oO2grKyxuKyspe3ZhciB1PWgvMzIqTWF0aC5QSSoyLHc9bi8zMipNYXRoLlBJKjI7ZS5wdXNoKE1hdGguY29zKHUpLE1hdGguc2luKHUpLDEsTWF0aC5jb3ModyksTWF0aC5zaW4odyksMSl9Yi5hZGRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgYmEoZSwzKSk7ZT1uZXcgTGIoe2ZvZzohMX0pO3RoaXMuY29uZT1uZXcgUGIoYixlKTt0aGlzLmFkZCh0aGlzLmNvbmUpO3RoaXMudXBkYXRlKCl9ZnVuY3Rpb24gUWwoYil7dmFyIGU9W107YiYmYi5pc0JvbmUmJmUucHVzaChiKTsKZm9yKHZhciBoPTA7aDxiLmNoaWxkcmVuLmxlbmd0aDtoKyspZS5wdXNoLmFwcGx5KGUsUWwoYi5jaGlsZHJlbltoXSkpO3JldHVybiBlfWZ1bmN0aW9uIGxmKGIpe2Zvcih2YXIgZT1RbChiKSxoPW5ldyB4YSxuPVtdLHU9W10sdz1uZXcgQigwLDAsMSksej1uZXcgQigwLDEsMCksRT0wO0U8ZS5sZW5ndGg7RSsrKXt2YXIgSD1lW0VdO0gucGFyZW50JiZILnBhcmVudC5pc0JvbmUmJihuLnB1c2goMCwwLDApLG4ucHVzaCgwLDAsMCksdS5wdXNoKHcucix3Lmcsdy5iKSx1LnB1c2goei5yLHouZyx6LmIpKX1oLmFkZEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBiYShuLDMpKTtoLmFkZEF0dHJpYnV0ZSgiY29sb3IiLG5ldyBiYSh1LDMpKTtuPW5ldyBMYih7dmVydGV4Q29sb3JzOjIsZGVwdGhUZXN0OiExLGRlcHRoV3JpdGU6ITEsdHJhbnNwYXJlbnQ6ITB9KTtQYi5jYWxsKHRoaXMsaCxuKTt0aGlzLnJvb3Q9Yjt0aGlzLmJvbmVzPWU7dGhpcy5tYXRyaXg9Yi5tYXRyaXhXb3JsZDt0aGlzLm1hdHJpeEF1dG9VcGRhdGU9CiExfWZ1bmN0aW9uIG1mKGIsZSxoKXt0aGlzLmxpZ2h0PWI7dGhpcy5saWdodC51cGRhdGVNYXRyaXhXb3JsZCgpO3RoaXMuY29sb3I9aDtiPW5ldyBXZChlLDQsMik7ZT1uZXcgeWIoe3dpcmVmcmFtZTohMCxmb2c6ITF9KTt0Yi5jYWxsKHRoaXMsYixlKTt0aGlzLm1hdHJpeD10aGlzLmxpZ2h0Lm1hdHJpeFdvcmxkO3RoaXMubWF0cml4QXV0b1VwZGF0ZT0hMTt0aGlzLnVwZGF0ZSgpfWZ1bmN0aW9uIG5mKGIsZSl7dGhpcy50eXBlPSJSZWN0QXJlYUxpZ2h0SGVscGVyIjt0aGlzLmxpZ2h0PWI7dGhpcy5jb2xvcj1lO2I9bmV3IHhhO2IuYWRkQXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IGJhKFsxLDEsMCwtMSwxLDAsLTEsLTEsMCwxLC0xLDAsMSwxLDBdLDMpKTtiLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpO2U9bmV3IExiKHtmb2c6ITF9KTtsYy5jYWxsKHRoaXMsYixlKTtiPW5ldyB4YTtiLmFkZEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBiYShbMSwxLDAsLTEsMSwwLC0xLC0xLAowLDEsMSwwLC0xLC0xLDAsMSwtMSwwXSwzKSk7Yi5jb21wdXRlQm91bmRpbmdTcGhlcmUoKTt0aGlzLmFkZChuZXcgdGIoYixuZXcgeWIoe3NpZGU6MSxmb2c6ITF9KSkpO3RoaXMudXBkYXRlKCl9ZnVuY3Rpb24gb2YoYixlLGgpe1MuY2FsbCh0aGlzKTt0aGlzLmxpZ2h0PWI7dGhpcy5saWdodC51cGRhdGVNYXRyaXhXb3JsZCgpO3RoaXMubWF0cml4PWIubWF0cml4V29ybGQ7dGhpcy5tYXRyaXhBdXRvVXBkYXRlPSExO3RoaXMuY29sb3I9aDtiPW5ldyBpZShlKTtiLnJvdGF0ZVkoLjUqTWF0aC5QSSk7dGhpcy5tYXRlcmlhbD1uZXcgeWIoe3dpcmVmcmFtZTohMCxmb2c6ITF9KTt2b2lkIDA9PT10aGlzLmNvbG9yJiYodGhpcy5tYXRlcmlhbC52ZXJ0ZXhDb2xvcnM9Mik7ZT1iLmdldEF0dHJpYnV0ZSgicG9zaXRpb24iKTtiLmFkZEF0dHJpYnV0ZSgiY29sb3IiLG5ldyBUKG5ldyBGbG9hdDMyQXJyYXkoMyplLmNvdW50KSwzKSk7dGhpcy5hZGQobmV3IHRiKGIsdGhpcy5tYXRlcmlhbCkpOwp0aGlzLnVwZGF0ZSgpfWZ1bmN0aW9uIHBmKGIsZSl7dGhpcy5saWdodFByb2JlPWI7dGhpcy5zaXplPWU7Yj1uZXcgZGIoe2RlZmluZXM6e0dBTU1BX09VVFBVVDoiIn0sdW5pZm9ybXM6e3NoOnt2YWx1ZTp0aGlzLmxpZ2h0UHJvYmUuc2guY29lZmZpY2llbnRzfSxpbnRlbnNpdHk6e3ZhbHVlOnRoaXMubGlnaHRQcm9iZS5pbnRlbnNpdHl9fSx2ZXJ0ZXhTaGFkZXI6InZhcnlpbmcgdmVjMyB2Tm9ybWFsO1xudm9pZCBtYWluKCkge1xuXHR2Tm9ybWFsIFx4M2Qgbm9ybWFsaXplKCBub3JtYWxNYXRyaXggKiBub3JtYWwgKTtcblx0Z2xfUG9zaXRpb24gXHgzZCBwcm9qZWN0aW9uTWF0cml4ICogbW9kZWxWaWV3TWF0cml4ICogdmVjNCggcG9zaXRpb24sIDEuMCApO1xufSIsZnJhZ21lbnRTaGFkZXI6IiNkZWZpbmUgUkVDSVBST0NBTF9QSSAwLjMxODMwOTg4NlxudmVjMyBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCBpbiB2ZWMzIG5vcm1hbCwgaW4gbWF0NCBtYXRyaXggKSB7XG5cdC8vIG1hdHJpeCBpcyBhc3N1bWVkIHRvIGJlIG9ydGhvZ29uYWxcblx0cmV0dXJuIG5vcm1hbGl6ZSggKCB2ZWM0KCBub3JtYWwsIDAuMCApICogbWF0cml4ICkueHl6ICk7XG59XG52ZWMzIGxpbmVhclRvT3V0cHV0KCBpbiB2ZWMzIGEgKSB7XG5cdCNpZmRlZiBHQU1NQV9PVVRQVVRcblx0XHRyZXR1cm4gcG93KCBhLCB2ZWMzKCAxLjAgLyBmbG9hdCggR0FNTUFfRkFDVE9SICkgKSApO1xuXHQjZWxzZVxuXHRcdHJldHVybiBhO1xuXHQjZW5kaWZcbn1cbi8vIHNvdXJjZTogaHR0cHM6Ly9ncmFwaGljcy5zdGFuZm9yZC5lZHUvcGFwZXJzL2Vudm1hcC9lbnZtYXAucGRmXG52ZWMzIHNoR2V0SXJyYWRpYW5jZUF0KCBpbiB2ZWMzIG5vcm1hbCwgaW4gdmVjMyBzaENvZWZmaWNpZW50c1sgOSBdICkge1xuXHQvLyBub3JtYWwgaXMgYXNzdW1lZCB0byBoYXZlIHVuaXQgbGVuZ3RoXG5cdGZsb2F0IHggXHgzZCBub3JtYWwueCwgeSBceDNkIG5vcm1hbC55LCB6IFx4M2Qgbm9ybWFsLno7XG5cdC8vIGJhbmQgMFxuXHR2ZWMzIHJlc3VsdCBceDNkIHNoQ29lZmZpY2llbnRzWyAwIF0gKiAwLjg4NjIyNztcblx0Ly8gYmFuZCAxXG5cdHJlc3VsdCArXHgzZCBzaENvZWZmaWNpZW50c1sgMSBdICogMi4wICogMC41MTE2NjQgKiB5O1xuXHRyZXN1bHQgK1x4M2Qgc2hDb2VmZmljaWVudHNbIDIgXSAqIDIuMCAqIDAuNTExNjY0ICogejtcblx0cmVzdWx0ICtceDNkIHNoQ29lZmZpY2llbnRzWyAzIF0gKiAyLjAgKiAwLjUxMTY2NCAqIHg7XG5cdC8vIGJhbmQgMlxuXHRyZXN1bHQgK1x4M2Qgc2hDb2VmZmljaWVudHNbIDQgXSAqIDIuMCAqIDAuNDI5MDQzICogeCAqIHk7XG5cdHJlc3VsdCArXHgzZCBzaENvZWZmaWNpZW50c1sgNSBdICogMi4wICogMC40MjkwNDMgKiB5ICogejtcblx0cmVzdWx0ICtceDNkIHNoQ29lZmZpY2llbnRzWyA2IF0gKiAoIDAuNzQzMTI1ICogeiAqIHogLSAwLjI0NzcwOCApO1xuXHRyZXN1bHQgK1x4M2Qgc2hDb2VmZmljaWVudHNbIDcgXSAqIDIuMCAqIDAuNDI5MDQzICogeCAqIHo7XG5cdHJlc3VsdCArXHgzZCBzaENvZWZmaWNpZW50c1sgOCBdICogMC40MjkwNDMgKiAoIHggKiB4IC0geSAqIHkgKTtcblx0cmV0dXJuIHJlc3VsdDtcbn1cbnVuaWZvcm0gdmVjMyBzaFsgOSBdOyAvLyBzaCBjb2VmZmljaWVudHNcbnVuaWZvcm0gZmxvYXQgaW50ZW5zaXR5OyAvLyBsaWdodCBwcm9iZSBpbnRlbnNpdHlcbnZhcnlpbmcgdmVjMyB2Tm9ybWFsO1xudm9pZCBtYWluKCkge1xuXHR2ZWMzIG5vcm1hbCBceDNkIG5vcm1hbGl6ZSggdk5vcm1hbCApO1xuXHR2ZWMzIHdvcmxkTm9ybWFsIFx4M2QgaW52ZXJzZVRyYW5zZm9ybURpcmVjdGlvbiggbm9ybWFsLCB2aWV3TWF0cml4ICk7XG5cdHZlYzMgaXJyYWRpYW5jZSBceDNkIHNoR2V0SXJyYWRpYW5jZUF0KCB3b3JsZE5vcm1hbCwgc2ggKTtcblx0dmVjMyBvdXRnb2luZ0xpZ2h0IFx4M2QgUkVDSVBST0NBTF9QSSAqIGlycmFkaWFuY2UgKiBpbnRlbnNpdHk7XG5cdG91dGdvaW5nTGlnaHQgXHgzZCBsaW5lYXJUb091dHB1dCggb3V0Z29pbmdMaWdodCApO1xuXHRnbF9GcmFnQ29sb3IgXHgzZCB2ZWM0KCBvdXRnb2luZ0xpZ2h0LCAxLjAgKTtcbn0ifSk7CmU9bmV3IFdkKDEsMzIsMTYpO3RiLmNhbGwodGhpcyxlLGIpO3RoaXMub25CZWZvcmVSZW5kZXIoKX1mdW5jdGlvbiBFaChiLGUsaCxuKXtiPWJ8fDEwO2U9ZXx8MTA7aD1uZXcgQih2b2lkIDAhPT1oP2g6NDQ3MzkyNCk7bj1uZXcgQih2b2lkIDAhPT1uP246ODk0Nzg0OCk7dmFyIHU9ZS8yLHc9Yi9lLHo9Yi8yO2I9W107Zm9yKHZhciBFPVtdLEg9MCxJPTAsTz0tejtIPD1lO0grKyxPKz13KXtiLnB1c2goLXosMCxPLHosMCxPKTtiLnB1c2goTywwLC16LE8sMCx6KTt2YXIgUT1IPT09dT9oOm47US50b0FycmF5KEUsSSk7SSs9MztRLnRvQXJyYXkoRSxJKTtJKz0zO1EudG9BcnJheShFLEkpO0krPTM7US50b0FycmF5KEUsSSk7SSs9M31lPW5ldyB4YTtlLmFkZEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBiYShiLDMpKTtlLmFkZEF0dHJpYnV0ZSgiY29sb3IiLG5ldyBiYShFLDMpKTtoPW5ldyBMYih7dmVydGV4Q29sb3JzOjJ9KTtQYi5jYWxsKHRoaXMsZSxoKX1mdW5jdGlvbiBGaChiLAplLGgsbix1LHcpe2I9Ynx8MTA7ZT1lfHwxNjtoPWh8fDg7bj1ufHw2NDt1PW5ldyBCKHZvaWQgMCE9PXU/dTo0NDczOTI0KTt3PW5ldyBCKHZvaWQgMCE9PXc/dzo4OTQ3ODQ4KTt2YXIgej1bXSxFPVtdLEg7Zm9yKEg9MDtIPD1lO0grKyl7dmFyIEk9SC9lKjIqTWF0aC5QSTt2YXIgTz1NYXRoLnNpbihJKSpiO0k9TWF0aC5jb3MoSSkqYjt6LnB1c2goMCwwLDApO3oucHVzaChPLDAsSSk7dmFyIFE9SCYxP3U6dztFLnB1c2goUS5yLFEuZyxRLmIpO0UucHVzaChRLnIsUS5nLFEuYil9Zm9yKEg9MDtIPD1oO0grKyl7UT1IJjE/dTp3O3ZhciBSPWItYi9oKkg7Zm9yKGU9MDtlPG47ZSsrKUk9ZS9uKjIqTWF0aC5QSSxPPU1hdGguc2luKEkpKlIsST1NYXRoLmNvcyhJKSpSLHoucHVzaChPLDAsSSksRS5wdXNoKFEucixRLmcsUS5iKSxJPShlKzEpL24qMipNYXRoLlBJLE89TWF0aC5zaW4oSSkqUixJPU1hdGguY29zKEkpKlIsei5wdXNoKE8sMCxJKSxFLnB1c2goUS5yLFEuZyxRLmIpfWI9Cm5ldyB4YTtiLmFkZEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBiYSh6LDMpKTtiLmFkZEF0dHJpYnV0ZSgiY29sb3IiLG5ldyBiYShFLDMpKTt6PW5ldyBMYih7dmVydGV4Q29sb3JzOjJ9KTtQYi5jYWxsKHRoaXMsYix6KX1mdW5jdGlvbiBxZihiLGUsaCxuKXt0aGlzLmF1ZGlvPWI7dGhpcy5yYW5nZT1lfHwxO3RoaXMuZGl2aXNpb25zSW5uZXJBbmdsZT1ofHwxNjt0aGlzLmRpdmlzaW9uc091dGVyQW5nbGU9bnx8MjtiPW5ldyB4YTtiLmFkZEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBUKG5ldyBGbG9hdDMyQXJyYXkoMyooMyoodGhpcy5kaXZpc2lvbnNJbm5lckFuZ2xlKzIqdGhpcy5kaXZpc2lvbnNPdXRlckFuZ2xlKSszKSksMykpO2U9bmV3IExiKHtjb2xvcjo2NTI4MH0pO2g9bmV3IExiKHtjb2xvcjoxNjc3Njk2MH0pO2xjLmNhbGwodGhpcyxiLFtoLGVdKTt0aGlzLnVwZGF0ZSgpfWZ1bmN0aW9uIEFnKGIsZSxoLG4pe3RoaXMub2JqZWN0PWI7dGhpcy5zaXplPXZvaWQgMCE9PQplP2U6MTtiPXZvaWQgMCE9PWg/aDoxNjc3Njk2MDtuPXZvaWQgMCE9PW4/bjoxO2U9MDsoaD10aGlzLm9iamVjdC5nZW9tZXRyeSkmJmguaXNHZW9tZXRyeT9lPWguZmFjZXMubGVuZ3RoOmNvbnNvbGUud2FybigiVEhSRUUuRmFjZU5vcm1hbHNIZWxwZXI6IG9ubHkgVEhSRUUuR2VvbWV0cnkgaXMgc3VwcG9ydGVkLiBVc2UgVEhSRUUuVmVydGV4Tm9ybWFsc0hlbHBlciwgaW5zdGVhZC4iKTtoPW5ldyB4YTtlPW5ldyBiYSg2KmUsMyk7aC5hZGRBdHRyaWJ1dGUoInBvc2l0aW9uIixlKTtQYi5jYWxsKHRoaXMsaCxuZXcgTGIoe2NvbG9yOmIsbGluZXdpZHRoOm59KSk7dGhpcy5tYXRyaXhBdXRvVXBkYXRlPSExO3RoaXMudXBkYXRlKCl9ZnVuY3Rpb24gcmYoYixlLGgpe1MuY2FsbCh0aGlzKTt0aGlzLmxpZ2h0PWI7dGhpcy5saWdodC51cGRhdGVNYXRyaXhXb3JsZCgpO3RoaXMubWF0cml4PWIubWF0cml4V29ybGQ7dGhpcy5tYXRyaXhBdXRvVXBkYXRlPSExO3RoaXMuY29sb3I9aDsKdm9pZCAwPT09ZSYmKGU9MSk7Yj1uZXcgeGE7Yi5hZGRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgYmEoWy1lLGUsMCxlLGUsMCxlLC1lLDAsLWUsLWUsMCwtZSxlLDBdLDMpKTtlPW5ldyBMYih7Zm9nOiExfSk7dGhpcy5saWdodFBsYW5lPW5ldyBsYyhiLGUpO3RoaXMuYWRkKHRoaXMubGlnaHRQbGFuZSk7Yj1uZXcgeGE7Yi5hZGRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgYmEoWzAsMCwwLDAsMCwxXSwzKSk7dGhpcy50YXJnZXRMaW5lPW5ldyBsYyhiLGUpO3RoaXMuYWRkKHRoaXMudGFyZ2V0TGluZSk7dGhpcy51cGRhdGUoKX1mdW5jdGlvbiBCZyhiKXtmdW5jdGlvbiBlKFUsVyxaKXtoKFUsWik7aChXLFopfWZ1bmN0aW9uIGgoVSxXKXt3LnB1c2goMCwwLDApO3oucHVzaChXLnIsVy5nLFcuYik7dm9pZCAwPT09RVtVXSYmKEVbVV09W10pO0VbVV0ucHVzaCh3Lmxlbmd0aC8zLTEpfXZhciBuPW5ldyB4YSx1PW5ldyBMYih7Y29sb3I6MTY3NzcyMTUsdmVydGV4Q29sb3JzOjF9KSwKdz1bXSx6PVtdLEU9e30sSD1uZXcgQigxNjc1NTIwMCksST1uZXcgQigxNjcxMTY4MCksTz1uZXcgQig0Mzc3NSksUT1uZXcgQigxNjc3NzIxNSksUj1uZXcgQigzMzU1NDQzKTtlKCJuMSIsIm4yIixIKTtlKCJuMiIsIm40IixIKTtlKCJuNCIsIm4zIixIKTtlKCJuMyIsIm4xIixIKTtlKCJmMSIsImYyIixIKTtlKCJmMiIsImY0IixIKTtlKCJmNCIsImYzIixIKTtlKCJmMyIsImYxIixIKTtlKCJuMSIsImYxIixIKTtlKCJuMiIsImYyIixIKTtlKCJuMyIsImYzIixIKTtlKCJuNCIsImY0IixIKTtlKCJwIiwibjEiLEkpO2UoInAiLCJuMiIsSSk7ZSgicCIsIm4zIixJKTtlKCJwIiwibjQiLEkpO2UoInUxIiwidTIiLE8pO2UoInUyIiwidTMiLE8pO2UoInUzIiwidTEiLE8pO2UoImMiLCJ0IixRKTtlKCJwIiwiYyIsUik7ZSgiY24xIiwiY24yIixSKTtlKCJjbjMiLCJjbjQiLFIpO2UoImNmMSIsImNmMiIsUik7ZSgiY2YzIiwiY2Y0IixSKTtuLmFkZEF0dHJpYnV0ZSgicG9zaXRpb24iLApuZXcgYmEodywzKSk7bi5hZGRBdHRyaWJ1dGUoImNvbG9yIixuZXcgYmEoeiwzKSk7UGIuY2FsbCh0aGlzLG4sdSk7dGhpcy5jYW1lcmE9Yjt0aGlzLmNhbWVyYS51cGRhdGVQcm9qZWN0aW9uTWF0cml4JiZ0aGlzLmNhbWVyYS51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCk7dGhpcy5tYXRyaXg9Yi5tYXRyaXhXb3JsZDt0aGlzLm1hdHJpeEF1dG9VcGRhdGU9ITE7dGhpcy5wb2ludE1hcD1FO3RoaXMudXBkYXRlKCl9ZnVuY3Rpb24gQmQoYixlKXt0aGlzLm9iamVjdD1iO3ZvaWQgMD09PWUmJihlPTE2Nzc2OTYwKTtiPW5ldyBVaW50MTZBcnJheShbMCwxLDEsMiwyLDMsMywwLDQsNSw1LDYsNiw3LDcsNCwwLDQsMSw1LDIsNiwzLDddKTt2YXIgaD1uZXcgRmxvYXQzMkFycmF5KDI0KSxuPW5ldyB4YTtuLnNldEluZGV4KG5ldyBUKGIsMSkpO24uYWRkQXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IFQoaCwzKSk7UGIuY2FsbCh0aGlzLG4sbmV3IExiKHtjb2xvcjplfSkpO3RoaXMubWF0cml4QXV0b1VwZGF0ZT0KITE7dGhpcy51cGRhdGUoKX1mdW5jdGlvbiBDZyhiLGUpe3RoaXMudHlwZT0iQm94M0hlbHBlciI7dGhpcy5ib3g9YjtiPXZvaWQgMCE9PWU/ZToxNjc3Njk2MDtlPW5ldyBVaW50MTZBcnJheShbMCwxLDEsMiwyLDMsMywwLDQsNSw1LDYsNiw3LDcsNCwwLDQsMSw1LDIsNiwzLDddKTt2YXIgaD1uZXcgeGE7aC5zZXRJbmRleChuZXcgVChlLDEpKTtoLmFkZEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBiYShbMSwxLDEsLTEsMSwxLC0xLC0xLDEsMSwtMSwxLDEsMSwtMSwtMSwxLC0xLC0xLC0xLC0xLDEsLTEsLTFdLDMpKTtQYi5jYWxsKHRoaXMsaCxuZXcgTGIoe2NvbG9yOmJ9KSk7dGhpcy5nZW9tZXRyeS5jb21wdXRlQm91bmRpbmdTcGhlcmUoKX1mdW5jdGlvbiBEZyhiLGUsaCl7dGhpcy50eXBlPSJQbGFuZUhlbHBlciI7dGhpcy5wbGFuZT1iO3RoaXMuc2l6ZT12b2lkIDA9PT1lPzE6ZTtiPXZvaWQgMCE9PWg/aDoxNjc3Njk2MDtlPW5ldyB4YTtlLmFkZEF0dHJpYnV0ZSgicG9zaXRpb24iLApuZXcgYmEoWzEsLTEsMSwtMSwxLDEsLTEsLTEsMSwxLDEsMSwtMSwxLDEsLTEsLTEsMSwxLC0xLDEsMSwxLDEsMCwwLDEsMCwwLDBdLDMpKTtlLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpO2xjLmNhbGwodGhpcyxlLG5ldyBMYih7Y29sb3I6Yn0pKTtlPW5ldyB4YTtlLmFkZEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBiYShbMSwxLDEsLTEsMSwxLC0xLC0xLDEsMSwxLDEsLTEsLTEsMSwxLC0xLDFdLDMpKTtlLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpO3RoaXMuYWRkKG5ldyB0YihlLG5ldyB5Yih7Y29sb3I6YixvcGFjaXR5Oi4yLHRyYW5zcGFyZW50OiEwLGRlcHRoV3JpdGU6ITF9KSkpfWZ1bmN0aW9uIENkKGIsZSxoLG4sdSx3KXtTLmNhbGwodGhpcyk7dm9pZCAwPT09YiYmKGI9bmV3IGcoMCwwLDEpKTt2b2lkIDA9PT1lJiYoZT1uZXcgZygwLDAsMCkpO3ZvaWQgMD09PWgmJihoPTEpO3ZvaWQgMD09PW4mJihuPTE2Nzc2OTYwKTt2b2lkIDA9PT11JiYodT0uMipoKTt2b2lkIDA9PT0KdyYmKHc9LjIqdSk7dm9pZCAwPT09R2gmJihHaD1uZXcgeGEsR2guYWRkQXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IGJhKFswLDAsMCwwLDEsMF0sMykpLGJqPW5ldyB6ZCgwLC41LDEsNSwxKSxiai50cmFuc2xhdGUoMCwtLjUsMCkpO3RoaXMucG9zaXRpb24uY29weShlKTt0aGlzLmxpbmU9bmV3IGxjKEdoLG5ldyBMYih7Y29sb3I6bn0pKTt0aGlzLmxpbmUubWF0cml4QXV0b1VwZGF0ZT0hMTt0aGlzLmFkZCh0aGlzLmxpbmUpO3RoaXMuY29uZT1uZXcgdGIoYmosbmV3IHliKHtjb2xvcjpufSkpO3RoaXMuY29uZS5tYXRyaXhBdXRvVXBkYXRlPSExO3RoaXMuYWRkKHRoaXMuY29uZSk7dGhpcy5zZXREaXJlY3Rpb24oYik7dGhpcy5zZXRMZW5ndGgoaCx1LHcpfWZ1bmN0aW9uIEVnKGIpe2I9Ynx8MTt2YXIgZT1bMCwwLDAsYiwwLDAsMCwwLDAsMCxiLDAsMCwwLDAsMCwwLGJdO2I9bmV3IHhhO2IuYWRkQXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IGJhKGUsMykpO2IuYWRkQXR0cmlidXRlKCJjb2xvciIsCm5ldyBiYShbMSwwLDAsMSwuNiwwLDAsMSwwLC42LDEsMCwwLDAsMSwwLC42LDFdLDMpKTtlPW5ldyBMYih7dmVydGV4Q29sb3JzOjJ9KTtQYi5jYWxsKHRoaXMsYixlKX1mdW5jdGlvbiBSbChiKXtjb25zb2xlLndhcm4oIlRIUkVFLkNsb3NlZFNwbGluZUN1cnZlMyBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgVEhSRUUuQ2F0bXVsbFJvbUN1cnZlMyBpbnN0ZWFkLiIpO3JjLmNhbGwodGhpcyxiKTt0aGlzLnR5cGU9ImNhdG11bGxyb20iO3RoaXMuY2xvc2VkPSEwfWZ1bmN0aW9uIFNsKGIpe2NvbnNvbGUud2FybigiVEhSRUUuU3BsaW5lQ3VydmUzIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSBUSFJFRS5DYXRtdWxsUm9tQ3VydmUzIGluc3RlYWQuIik7cmMuY2FsbCh0aGlzLGIpO3RoaXMudHlwZT0iY2F0bXVsbHJvbSJ9ZnVuY3Rpb24gY2ooYil7Y29uc29sZS53YXJuKCJUSFJFRS5TcGxpbmUgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFRIUkVFLkNhdG11bGxSb21DdXJ2ZTMgaW5zdGVhZC4iKTsKcmMuY2FsbCh0aGlzLGIpO3RoaXMudHlwZT0iY2F0bXVsbHJvbSJ9dm9pZCAwPT09TnVtYmVyLkVQU0lMT04mJihOdW1iZXIuRVBTSUxPTj1NYXRoLnBvdygyLC01MikpO3ZvaWQgMD09PU51bWJlci5pc0ludGVnZXImJihOdW1iZXIuaXNJbnRlZ2VyPWZ1bmN0aW9uKGIpe3JldHVybiJudW1iZXIiPT09dHlwZW9mIGImJmlzRmluaXRlKGIpJiZNYXRoLmZsb29yKGIpPT09Yn0pO3ZvaWQgMD09PU1hdGguc2lnbiYmKE1hdGguc2lnbj1mdW5jdGlvbihiKXtyZXR1cm4gMD5iPy0xOjA8Yj8xOitifSk7ITE9PT0ibmFtZSJpbiBGdW5jdGlvbi5wcm90b3R5cGUmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShGdW5jdGlvbi5wcm90b3R5cGUsIm5hbWUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b1N0cmluZygpLm1hdGNoKC9eXHMqZnVuY3Rpb25ccyooW15cKFxzXSopLylbMV19fSk7dm9pZCAwPT09T2JqZWN0LmFzc2lnbiYmZnVuY3Rpb24oKXtPYmplY3QuYXNzaWduPWZ1bmN0aW9uKGIpe2lmKHZvaWQgMD09PQpifHxudWxsPT09Yil0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY29udmVydCB1bmRlZmluZWQgb3IgbnVsbCB0byBvYmplY3QiKTtmb3IodmFyIGU9T2JqZWN0KGIpLGg9MTtoPGFyZ3VtZW50cy5sZW5ndGg7aCsrKXt2YXIgbj1hcmd1bWVudHNbaF07aWYodm9pZCAwIT09biYmbnVsbCE9PW4pZm9yKHZhciB1IGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4sdSkmJihlW3VdPW5bdV0pfXJldHVybiBlfX0oKTtPYmplY3QuYXNzaWduKGMucHJvdG90eXBlLHthZGRFdmVudExpc3RlbmVyOmZ1bmN0aW9uKGIsZSl7dm9pZCAwPT09dGhpcy5fbGlzdGVuZXJzJiYodGhpcy5fbGlzdGVuZXJzPXt9KTt2YXIgaD10aGlzLl9saXN0ZW5lcnM7dm9pZCAwPT09aFtiXSYmKGhbYl09W10pOy0xPT09aFtiXS5pbmRleE9mKGUpJiZoW2JdLnB1c2goZSl9LGhhc0V2ZW50TGlzdGVuZXI6ZnVuY3Rpb24oYixlKXtpZih2b2lkIDA9PT10aGlzLl9saXN0ZW5lcnMpcmV0dXJuITE7CnZhciBoPXRoaXMuX2xpc3RlbmVycztyZXR1cm4gdm9pZCAwIT09aFtiXSYmLTEhPT1oW2JdLmluZGV4T2YoZSl9LHJlbW92ZUV2ZW50TGlzdGVuZXI6ZnVuY3Rpb24oYixlKXt2b2lkIDAhPT10aGlzLl9saXN0ZW5lcnMmJihiPXRoaXMuX2xpc3RlbmVyc1tiXSx2b2lkIDAhPT1iJiYoZT1iLmluZGV4T2YoZSksLTEhPT1lJiZiLnNwbGljZShlLDEpKSl9LGRpc3BhdGNoRXZlbnQ6ZnVuY3Rpb24oYil7aWYodm9pZCAwIT09dGhpcy5fbGlzdGVuZXJzKXt2YXIgZT10aGlzLl9saXN0ZW5lcnNbYi50eXBlXTtpZih2b2lkIDAhPT1lKXtiLnRhcmdldD10aGlzO2U9ZS5zbGljZSgwKTtmb3IodmFyIGg9MCxuPWUubGVuZ3RoO2g8bjtoKyspZVtoXS5jYWxsKHRoaXMsYil9fX19KTt2YXIgb2I9e0RFRzJSQUQ6TWF0aC5QSS8xODAsUkFEMkRFRzoxODAvTWF0aC5QSSxnZW5lcmF0ZVVVSUQ6ZnVuY3Rpb24oKXtmb3IodmFyIGI9W10sZT0wOzI1Nj5lO2UrKyliW2VdPSgxNj5lPyIwIjoiIikrZS50b1N0cmluZygxNik7CnJldHVybiBmdW5jdGlvbigpe3ZhciBoPTQyOTQ5NjcyOTUqTWF0aC5yYW5kb20oKXwwLG49NDI5NDk2NzI5NSpNYXRoLnJhbmRvbSgpfDAsdT00Mjk0OTY3Mjk1Kk1hdGgucmFuZG9tKCl8MCx3PTQyOTQ5NjcyOTUqTWF0aC5yYW5kb20oKXwwO3JldHVybihiW2gmMjU1XStiW2g+PjgmMjU1XStiW2g+PjE2JjI1NV0rYltoPj4yNCYyNTVdKyItIitiW24mMjU1XStiW24+PjgmMjU1XSsiLSIrYltuPj4xNiYxNXw2NF0rYltuPj4yNCYyNTVdKyItIitiW3UmNjN8MTI4XStiW3U+PjgmMjU1XSsiLSIrYlt1Pj4xNiYyNTVdK2JbdT4+MjQmMjU1XStiW3cmMjU1XStiW3c+PjgmMjU1XStiW3c+PjE2JjI1NV0rYlt3Pj4yNCYyNTVdKS50b1VwcGVyQ2FzZSgpfX0oKSxjbGFtcDpmdW5jdGlvbihiLGUsaCl7cmV0dXJuIE1hdGgubWF4KGUsTWF0aC5taW4oaCxiKSl9LGV1Y2xpZGVhbk1vZHVsbzpmdW5jdGlvbihiLGUpe3JldHVybihiJWUrZSklZX0sbWFwTGluZWFyOmZ1bmN0aW9uKGIsZSxoLApuLHUpe3JldHVybiBuKyhiLWUpKih1LW4pLyhoLWUpfSxsZXJwOmZ1bmN0aW9uKGIsZSxoKXtyZXR1cm4oMS1oKSpiK2gqZX0sc21vb3Roc3RlcDpmdW5jdGlvbihiLGUsaCl7aWYoYjw9ZSlyZXR1cm4gMDtpZihiPj1oKXJldHVybiAxO2I9KGItZSkvKGgtZSk7cmV0dXJuIGIqYiooMy0yKmIpfSxzbW9vdGhlcnN0ZXA6ZnVuY3Rpb24oYixlLGgpe2lmKGI8PWUpcmV0dXJuIDA7aWYoYj49aClyZXR1cm4gMTtiPShiLWUpLyhoLWUpO3JldHVybiBiKmIqYiooYiooNipiLTE1KSsxMCl9LHJhbmRJbnQ6ZnVuY3Rpb24oYixlKXtyZXR1cm4gYitNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqKGUtYisxKSl9LHJhbmRGbG9hdDpmdW5jdGlvbihiLGUpe3JldHVybiBiK01hdGgucmFuZG9tKCkqKGUtYil9LHJhbmRGbG9hdFNwcmVhZDpmdW5jdGlvbihiKXtyZXR1cm4gYiooLjUtTWF0aC5yYW5kb20oKSl9LGRlZ1RvUmFkOmZ1bmN0aW9uKGIpe3JldHVybiBiKm9iLkRFRzJSQUR9LHJhZFRvRGVnOmZ1bmN0aW9uKGIpe3JldHVybiBiKgpvYi5SQUQyREVHfSxpc1Bvd2VyT2ZUd286ZnVuY3Rpb24oYil7cmV0dXJuIDA9PT0oYiZiLTEpJiYwIT09Yn0sY2VpbFBvd2VyT2ZUd286ZnVuY3Rpb24oYil7cmV0dXJuIE1hdGgucG93KDIsTWF0aC5jZWlsKE1hdGgubG9nKGIpL01hdGguTE4yKSl9LGZsb29yUG93ZXJPZlR3bzpmdW5jdGlvbihiKXtyZXR1cm4gTWF0aC5wb3coMixNYXRoLmZsb29yKE1hdGgubG9nKGIpL01hdGguTE4yKSl9fTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhkLnByb3RvdHlwZSx7d2lkdGg6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnh9LHNldDpmdW5jdGlvbihiKXt0aGlzLng9Yn19LGhlaWdodDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueX0sc2V0OmZ1bmN0aW9uKGIpe3RoaXMueT1ifX19KTtPYmplY3QuYXNzaWduKGQucHJvdG90eXBlLHtpc1ZlY3RvcjI6ITAsc2V0OmZ1bmN0aW9uKGIsZSl7dGhpcy54PWI7dGhpcy55PWU7cmV0dXJuIHRoaXN9LHNldFNjYWxhcjpmdW5jdGlvbihiKXt0aGlzLnk9CnRoaXMueD1iO3JldHVybiB0aGlzfSxzZXRYOmZ1bmN0aW9uKGIpe3RoaXMueD1iO3JldHVybiB0aGlzfSxzZXRZOmZ1bmN0aW9uKGIpe3RoaXMueT1iO3JldHVybiB0aGlzfSxzZXRDb21wb25lbnQ6ZnVuY3Rpb24oYixlKXtzd2l0Y2goYil7Y2FzZSAwOnRoaXMueD1lO2JyZWFrO2Nhc2UgMTp0aGlzLnk9ZTticmVhaztkZWZhdWx0OnRocm93IEVycm9yKCJpbmRleCBpcyBvdXQgb2YgcmFuZ2U6ICIrYik7fXJldHVybiB0aGlzfSxnZXRDb21wb25lbnQ6ZnVuY3Rpb24oYil7c3dpdGNoKGIpe2Nhc2UgMDpyZXR1cm4gdGhpcy54O2Nhc2UgMTpyZXR1cm4gdGhpcy55O2RlZmF1bHQ6dGhyb3cgRXJyb3IoImluZGV4IGlzIG91dCBvZiByYW5nZTogIitiKTt9fSxjbG9uZTpmdW5jdGlvbigpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLngsdGhpcy55KX0sY29weTpmdW5jdGlvbihiKXt0aGlzLng9Yi54O3RoaXMueT1iLnk7cmV0dXJuIHRoaXN9LGFkZDpmdW5jdGlvbihiLAplKXtpZih2b2lkIDAhPT1lKXJldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjI6IC5hZGQoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5hZGRWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLmFkZFZlY3RvcnMoYixlKTt0aGlzLngrPWIueDt0aGlzLnkrPWIueTtyZXR1cm4gdGhpc30sYWRkU2NhbGFyOmZ1bmN0aW9uKGIpe3RoaXMueCs9Yjt0aGlzLnkrPWI7cmV0dXJuIHRoaXN9LGFkZFZlY3RvcnM6ZnVuY3Rpb24oYixlKXt0aGlzLng9Yi54K2UueDt0aGlzLnk9Yi55K2UueTtyZXR1cm4gdGhpc30sYWRkU2NhbGVkVmVjdG9yOmZ1bmN0aW9uKGIsZSl7dGhpcy54Kz1iLngqZTt0aGlzLnkrPWIueSplO3JldHVybiB0aGlzfSxzdWI6ZnVuY3Rpb24oYixlKXtpZih2b2lkIDAhPT1lKXJldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjI6IC5zdWIoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5zdWJWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4iKSwKdGhpcy5zdWJWZWN0b3JzKGIsZSk7dGhpcy54LT1iLng7dGhpcy55LT1iLnk7cmV0dXJuIHRoaXN9LHN1YlNjYWxhcjpmdW5jdGlvbihiKXt0aGlzLngtPWI7dGhpcy55LT1iO3JldHVybiB0aGlzfSxzdWJWZWN0b3JzOmZ1bmN0aW9uKGIsZSl7dGhpcy54PWIueC1lLng7dGhpcy55PWIueS1lLnk7cmV0dXJuIHRoaXN9LG11bHRpcGx5OmZ1bmN0aW9uKGIpe3RoaXMueCo9Yi54O3RoaXMueSo9Yi55O3JldHVybiB0aGlzfSxtdWx0aXBseVNjYWxhcjpmdW5jdGlvbihiKXt0aGlzLngqPWI7dGhpcy55Kj1iO3JldHVybiB0aGlzfSxkaXZpZGU6ZnVuY3Rpb24oYil7dGhpcy54Lz1iLng7dGhpcy55Lz1iLnk7cmV0dXJuIHRoaXN9LGRpdmlkZVNjYWxhcjpmdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5tdWx0aXBseVNjYWxhcigxL2IpfSxhcHBseU1hdHJpeDM6ZnVuY3Rpb24oYil7dmFyIGU9dGhpcy54LGg9dGhpcy55O2I9Yi5lbGVtZW50czt0aGlzLng9YlswXSplK2JbM10qaCtiWzZdO3RoaXMueT0KYlsxXSplK2JbNF0qaCtiWzddO3JldHVybiB0aGlzfSxtaW46ZnVuY3Rpb24oYil7dGhpcy54PU1hdGgubWluKHRoaXMueCxiLngpO3RoaXMueT1NYXRoLm1pbih0aGlzLnksYi55KTtyZXR1cm4gdGhpc30sbWF4OmZ1bmN0aW9uKGIpe3RoaXMueD1NYXRoLm1heCh0aGlzLngsYi54KTt0aGlzLnk9TWF0aC5tYXgodGhpcy55LGIueSk7cmV0dXJuIHRoaXN9LGNsYW1wOmZ1bmN0aW9uKGIsZSl7dGhpcy54PU1hdGgubWF4KGIueCxNYXRoLm1pbihlLngsdGhpcy54KSk7dGhpcy55PU1hdGgubWF4KGIueSxNYXRoLm1pbihlLnksdGhpcy55KSk7cmV0dXJuIHRoaXN9LGNsYW1wU2NhbGFyOmZ1bmN0aW9uKGIsZSl7dGhpcy54PU1hdGgubWF4KGIsTWF0aC5taW4oZSx0aGlzLngpKTt0aGlzLnk9TWF0aC5tYXgoYixNYXRoLm1pbihlLHRoaXMueSkpO3JldHVybiB0aGlzfSxjbGFtcExlbmd0aDpmdW5jdGlvbihiLGUpe3ZhciBoPXRoaXMubGVuZ3RoKCk7cmV0dXJuIHRoaXMuZGl2aWRlU2NhbGFyKGh8fAoxKS5tdWx0aXBseVNjYWxhcihNYXRoLm1heChiLE1hdGgubWluKGUsaCkpKX0sZmxvb3I6ZnVuY3Rpb24oKXt0aGlzLng9TWF0aC5mbG9vcih0aGlzLngpO3RoaXMueT1NYXRoLmZsb29yKHRoaXMueSk7cmV0dXJuIHRoaXN9LGNlaWw6ZnVuY3Rpb24oKXt0aGlzLng9TWF0aC5jZWlsKHRoaXMueCk7dGhpcy55PU1hdGguY2VpbCh0aGlzLnkpO3JldHVybiB0aGlzfSxyb3VuZDpmdW5jdGlvbigpe3RoaXMueD1NYXRoLnJvdW5kKHRoaXMueCk7dGhpcy55PU1hdGgucm91bmQodGhpcy55KTtyZXR1cm4gdGhpc30scm91bmRUb1plcm86ZnVuY3Rpb24oKXt0aGlzLng9MD50aGlzLng/TWF0aC5jZWlsKHRoaXMueCk6TWF0aC5mbG9vcih0aGlzLngpO3RoaXMueT0wPnRoaXMueT9NYXRoLmNlaWwodGhpcy55KTpNYXRoLmZsb29yKHRoaXMueSk7cmV0dXJuIHRoaXN9LG5lZ2F0ZTpmdW5jdGlvbigpe3RoaXMueD0tdGhpcy54O3RoaXMueT0tdGhpcy55O3JldHVybiB0aGlzfSxkb3Q6ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMueCoKYi54K3RoaXMueSpiLnl9LGNyb3NzOmZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLngqYi55LXRoaXMueSpiLnh9LGxlbmd0aFNxOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueCp0aGlzLngrdGhpcy55KnRoaXMueX0sbGVuZ3RoOmZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLngqdGhpcy54K3RoaXMueSp0aGlzLnkpfSxtYW5oYXR0YW5MZW5ndGg6ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5hYnModGhpcy54KStNYXRoLmFicyh0aGlzLnkpfSxub3JtYWxpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kaXZpZGVTY2FsYXIodGhpcy5sZW5ndGgoKXx8MSl9LGFuZ2xlOmZ1bmN0aW9uKCl7dmFyIGI9TWF0aC5hdGFuMih0aGlzLnksdGhpcy54KTswPmImJihiKz0yKk1hdGguUEkpO3JldHVybiBifSxkaXN0YW5jZVRvOmZ1bmN0aW9uKGIpe3JldHVybiBNYXRoLnNxcnQodGhpcy5kaXN0YW5jZVRvU3F1YXJlZChiKSl9LGRpc3RhbmNlVG9TcXVhcmVkOmZ1bmN0aW9uKGIpe3ZhciBlPQp0aGlzLngtYi54O2I9dGhpcy55LWIueTtyZXR1cm4gZSplK2IqYn0sbWFuaGF0dGFuRGlzdGFuY2VUbzpmdW5jdGlvbihiKXtyZXR1cm4gTWF0aC5hYnModGhpcy54LWIueCkrTWF0aC5hYnModGhpcy55LWIueSl9LHNldExlbmd0aDpmdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5ub3JtYWxpemUoKS5tdWx0aXBseVNjYWxhcihiKX0sbGVycDpmdW5jdGlvbihiLGUpe3RoaXMueCs9KGIueC10aGlzLngpKmU7dGhpcy55Kz0oYi55LXRoaXMueSkqZTtyZXR1cm4gdGhpc30sbGVycFZlY3RvcnM6ZnVuY3Rpb24oYixlLGgpe3JldHVybiB0aGlzLnN1YlZlY3RvcnMoZSxiKS5tdWx0aXBseVNjYWxhcihoKS5hZGQoYil9LGVxdWFsczpmdW5jdGlvbihiKXtyZXR1cm4gYi54PT09dGhpcy54JiZiLnk9PT10aGlzLnl9LGZyb21BcnJheTpmdW5jdGlvbihiLGUpe3ZvaWQgMD09PWUmJihlPTApO3RoaXMueD1iW2VdO3RoaXMueT1iW2UrMV07cmV0dXJuIHRoaXN9LHRvQXJyYXk6ZnVuY3Rpb24oYiwKZSl7dm9pZCAwPT09YiYmKGI9W10pO3ZvaWQgMD09PWUmJihlPTApO2JbZV09dGhpcy54O2JbZSsxXT10aGlzLnk7cmV0dXJuIGJ9LGZyb21CdWZmZXJBdHRyaWJ1dGU6ZnVuY3Rpb24oYixlLGgpe3ZvaWQgMCE9PWgmJmNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMjogb2Zmc2V0IGhhcyBiZWVuIHJlbW92ZWQgZnJvbSAuZnJvbUJ1ZmZlckF0dHJpYnV0ZSgpLiIpO3RoaXMueD1iLmdldFgoZSk7dGhpcy55PWIuZ2V0WShlKTtyZXR1cm4gdGhpc30scm90YXRlQXJvdW5kOmZ1bmN0aW9uKGIsZSl7dmFyIGg9TWF0aC5jb3MoZSk7ZT1NYXRoLnNpbihlKTt2YXIgbj10aGlzLngtYi54LHU9dGhpcy55LWIueTt0aGlzLng9bipoLXUqZStiLng7dGhpcy55PW4qZSt1KmgrYi55O3JldHVybiB0aGlzfX0pO09iamVjdC5hc3NpZ24oZix7c2xlcnA6ZnVuY3Rpb24oYixlLGgsbil7cmV0dXJuIGguY29weShiKS5zbGVycChlLG4pfSxzbGVycEZsYXQ6ZnVuY3Rpb24oYixlLGgsbix1LHcseil7dmFyIEU9CmhbbiswXSxIPWhbbisxXSxJPWhbbisyXTtoPWhbbiszXTtuPXVbdyswXTt2YXIgTz11W3crMV0sUT11W3crMl07dT11W3crM107aWYoaCE9PXV8fEUhPT1ufHxIIT09T3x8SSE9PVEpe3c9MS16O3ZhciBSPUUqbitIKk8rSSpRK2gqdSxVPTA8PVI/MTotMSxXPTEtUipSO1c+TnVtYmVyLkVQU0lMT04mJihXPU1hdGguc3FydChXKSxSPU1hdGguYXRhbjIoVyxSKlUpLHc9TWF0aC5zaW4odypSKS9XLHo9TWF0aC5zaW4oeipSKS9XKTtVKj16O0U9RSp3K24qVTtIPUgqdytPKlU7ST1JKncrUSpVO2g9aCp3K3UqVTt3PT09MS16JiYoej0xL01hdGguc3FydChFKkUrSCpIK0kqSStoKmgpLEUqPXosSCo9eixJKj16LGgqPXopfWJbZV09RTtiW2UrMV09SDtiW2UrMl09STtiW2UrM109aH19KTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhmLnByb3RvdHlwZSx7eDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3h9LHNldDpmdW5jdGlvbihiKXt0aGlzLl94PWI7dGhpcy5vbkNoYW5nZUNhbGxiYWNrKCl9fSwKeTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3l9LHNldDpmdW5jdGlvbihiKXt0aGlzLl95PWI7dGhpcy5vbkNoYW5nZUNhbGxiYWNrKCl9fSx6OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fen0sc2V0OmZ1bmN0aW9uKGIpe3RoaXMuX3o9Yjt0aGlzLm9uQ2hhbmdlQ2FsbGJhY2soKX19LHc6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93fSxzZXQ6ZnVuY3Rpb24oYil7dGhpcy5fdz1iO3RoaXMub25DaGFuZ2VDYWxsYmFjaygpfX19KTtPYmplY3QuYXNzaWduKGYucHJvdG90eXBlLHtpc1F1YXRlcm5pb246ITAsc2V0OmZ1bmN0aW9uKGIsZSxoLG4pe3RoaXMuX3g9Yjt0aGlzLl95PWU7dGhpcy5fej1oO3RoaXMuX3c9bjt0aGlzLm9uQ2hhbmdlQ2FsbGJhY2soKTtyZXR1cm4gdGhpc30sY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy5feCx0aGlzLl95LHRoaXMuX3osdGhpcy5fdyl9LGNvcHk6ZnVuY3Rpb24oYil7dGhpcy5feD0KYi54O3RoaXMuX3k9Yi55O3RoaXMuX3o9Yi56O3RoaXMuX3c9Yi53O3RoaXMub25DaGFuZ2VDYWxsYmFjaygpO3JldHVybiB0aGlzfSxzZXRGcm9tRXVsZXI6ZnVuY3Rpb24oYixlKXtpZighYnx8IWIuaXNFdWxlcil0aHJvdyBFcnJvcigiVEhSRUUuUXVhdGVybmlvbjogLnNldEZyb21FdWxlcigpIG5vdyBleHBlY3RzIGFuIEV1bGVyIHJvdGF0aW9uIHJhdGhlciB0aGFuIGEgVmVjdG9yMyBhbmQgb3JkZXIuIik7dmFyIGg9Yi5feCxuPWIuX3ksdT1iLl96O2I9Yi5vcmRlcjt2YXIgdz1NYXRoLmNvcyx6PU1hdGguc2luLEU9dyhoLzIpLEg9dyhuLzIpO3c9dyh1LzIpO2g9eihoLzIpO249eihuLzIpO3U9eih1LzIpOyJYWVoiPT09Yj8odGhpcy5feD1oKkgqdytFKm4qdSx0aGlzLl95PUUqbip3LWgqSCp1LHRoaXMuX3o9RSpIKnUraCpuKncsdGhpcy5fdz1FKkgqdy1oKm4qdSk6IllYWiI9PT1iPyh0aGlzLl94PWgqSCp3K0Uqbip1LHRoaXMuX3k9RSpuKnctaCpIKnUsdGhpcy5fej1FKgpIKnUtaCpuKncsdGhpcy5fdz1FKkgqdytoKm4qdSk6IlpYWSI9PT1iPyh0aGlzLl94PWgqSCp3LUUqbip1LHRoaXMuX3k9RSpuKncraCpIKnUsdGhpcy5fej1FKkgqdStoKm4qdyx0aGlzLl93PUUqSCp3LWgqbip1KToiWllYIj09PWI/KHRoaXMuX3g9aCpIKnctRSpuKnUsdGhpcy5feT1FKm4qdytoKkgqdSx0aGlzLl96PUUqSCp1LWgqbip3LHRoaXMuX3c9RSpIKncraCpuKnUpOiJZWlgiPT09Yj8odGhpcy5feD1oKkgqdytFKm4qdSx0aGlzLl95PUUqbip3K2gqSCp1LHRoaXMuX3o9RSpIKnUtaCpuKncsdGhpcy5fdz1FKkgqdy1oKm4qdSk6IlhaWSI9PT1iJiYodGhpcy5feD1oKkgqdy1FKm4qdSx0aGlzLl95PUUqbip3LWgqSCp1LHRoaXMuX3o9RSpIKnUraCpuKncsdGhpcy5fdz1FKkgqdytoKm4qdSk7aWYoITEhPT1lKXRoaXMub25DaGFuZ2VDYWxsYmFjaygpO3JldHVybiB0aGlzfSxzZXRGcm9tQXhpc0FuZ2xlOmZ1bmN0aW9uKGIsZSl7ZS89Mjt2YXIgaD1NYXRoLnNpbihlKTsKdGhpcy5feD1iLngqaDt0aGlzLl95PWIueSpoO3RoaXMuX3o9Yi56Kmg7dGhpcy5fdz1NYXRoLmNvcyhlKTt0aGlzLm9uQ2hhbmdlQ2FsbGJhY2soKTtyZXR1cm4gdGhpc30sc2V0RnJvbVJvdGF0aW9uTWF0cml4OmZ1bmN0aW9uKGIpe3ZhciBlPWIuZWxlbWVudHMsaD1lWzBdO2I9ZVs0XTt2YXIgbj1lWzhdLHU9ZVsxXSx3PWVbNV0sej1lWzldLEU9ZVsyXSxIPWVbNl07ZT1lWzEwXTt2YXIgST1oK3crZTswPEk/KGg9LjUvTWF0aC5zcXJ0KEkrMSksdGhpcy5fdz0uMjUvaCx0aGlzLl94PShILXopKmgsdGhpcy5feT0obi1FKSpoLHRoaXMuX3o9KHUtYikqaCk6aD53JiZoPmU/KGg9MipNYXRoLnNxcnQoMStoLXctZSksdGhpcy5fdz0oSC16KS9oLHRoaXMuX3g9LjI1KmgsdGhpcy5feT0oYit1KS9oLHRoaXMuX3o9KG4rRSkvaCk6dz5lPyhoPTIqTWF0aC5zcXJ0KDErdy1oLWUpLHRoaXMuX3c9KG4tRSkvaCx0aGlzLl94PShiK3UpL2gsdGhpcy5feT0uMjUqaCx0aGlzLl96PSh6K0gpLwpoKTooaD0yKk1hdGguc3FydCgxK2UtaC13KSx0aGlzLl93PSh1LWIpL2gsdGhpcy5feD0obitFKS9oLHRoaXMuX3k9KHorSCkvaCx0aGlzLl96PS4yNSpoKTt0aGlzLm9uQ2hhbmdlQ2FsbGJhY2soKTtyZXR1cm4gdGhpc30sc2V0RnJvbVVuaXRWZWN0b3JzOmZ1bmN0aW9uKGIsZSl7dmFyIGg9Yi5kb3QoZSkrMTsxRS02Pmg/KGg9MCxNYXRoLmFicyhiLngpPk1hdGguYWJzKGIueik/KHRoaXMuX3g9LWIueSx0aGlzLl95PWIueCx0aGlzLl96PTApOih0aGlzLl94PTAsdGhpcy5feT0tYi56LHRoaXMuX3o9Yi55KSk6KHRoaXMuX3g9Yi55KmUuei1iLnoqZS55LHRoaXMuX3k9Yi56KmUueC1iLngqZS56LHRoaXMuX3o9Yi54KmUueS1iLnkqZS54KTt0aGlzLl93PWg7cmV0dXJuIHRoaXMubm9ybWFsaXplKCl9LGFuZ2xlVG86ZnVuY3Rpb24oYil7cmV0dXJuIDIqTWF0aC5hY29zKE1hdGguYWJzKG9iLmNsYW1wKHRoaXMuZG90KGIpLC0xLDEpKSl9LHJvdGF0ZVRvd2FyZHM6ZnVuY3Rpb24oYiwKZSl7dmFyIGg9dGhpcy5hbmdsZVRvKGIpO2lmKDA9PT1oKXJldHVybiB0aGlzO3RoaXMuc2xlcnAoYixNYXRoLm1pbigxLGUvaCkpO3JldHVybiB0aGlzfSxpbnZlcnNlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uanVnYXRlKCl9LGNvbmp1Z2F0ZTpmdW5jdGlvbigpe3RoaXMuX3gqPS0xO3RoaXMuX3kqPS0xO3RoaXMuX3oqPS0xO3RoaXMub25DaGFuZ2VDYWxsYmFjaygpO3JldHVybiB0aGlzfSxkb3Q6ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuX3gqYi5feCt0aGlzLl95KmIuX3krdGhpcy5feipiLl96K3RoaXMuX3cqYi5fd30sbGVuZ3RoU3E6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5feCp0aGlzLl94K3RoaXMuX3kqdGhpcy5feSt0aGlzLl96KnRoaXMuX3ordGhpcy5fdyp0aGlzLl93fSxsZW5ndGg6ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMuX3gqdGhpcy5feCt0aGlzLl95KnRoaXMuX3krdGhpcy5feip0aGlzLl96K3RoaXMuX3cqdGhpcy5fdyl9LG5vcm1hbGl6ZTpmdW5jdGlvbigpe3ZhciBiPQp0aGlzLmxlbmd0aCgpOzA9PT1iPyh0aGlzLl96PXRoaXMuX3k9dGhpcy5feD0wLHRoaXMuX3c9MSk6KGI9MS9iLHRoaXMuX3gqPWIsdGhpcy5feSo9Yix0aGlzLl96Kj1iLHRoaXMuX3cqPWIpO3RoaXMub25DaGFuZ2VDYWxsYmFjaygpO3JldHVybiB0aGlzfSxtdWx0aXBseTpmdW5jdGlvbihiLGUpe3JldHVybiB2b2lkIDAhPT1lPyhjb25zb2xlLndhcm4oIlRIUkVFLlF1YXRlcm5pb246IC5tdWx0aXBseSgpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLm11bHRpcGx5UXVhdGVybmlvbnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMubXVsdGlwbHlRdWF0ZXJuaW9ucyhiLGUpKTp0aGlzLm11bHRpcGx5UXVhdGVybmlvbnModGhpcyxiKX0scHJlbXVsdGlwbHk6ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMubXVsdGlwbHlRdWF0ZXJuaW9ucyhiLHRoaXMpfSxtdWx0aXBseVF1YXRlcm5pb25zOmZ1bmN0aW9uKGIsZSl7dmFyIGg9Yi5feCxuPWIuX3ksdT1iLl96O2I9Yi5fdzsKdmFyIHc9ZS5feCx6PWUuX3ksRT1lLl96O2U9ZS5fdzt0aGlzLl94PWgqZStiKncrbipFLXUqejt0aGlzLl95PW4qZStiKnordSp3LWgqRTt0aGlzLl96PXUqZStiKkUraCp6LW4qdzt0aGlzLl93PWIqZS1oKnctbip6LXUqRTt0aGlzLm9uQ2hhbmdlQ2FsbGJhY2soKTtyZXR1cm4gdGhpc30sc2xlcnA6ZnVuY3Rpb24oYixlKXtpZigwPT09ZSlyZXR1cm4gdGhpcztpZigxPT09ZSlyZXR1cm4gdGhpcy5jb3B5KGIpO3ZhciBoPXRoaXMuX3gsbj10aGlzLl95LHU9dGhpcy5feix3PXRoaXMuX3csej13KmIuX3craCpiLl94K24qYi5feSt1KmIuX3o7MD56Pyh0aGlzLl93PS1iLl93LHRoaXMuX3g9LWIuX3gsdGhpcy5feT0tYi5feSx0aGlzLl96PS1iLl96LHo9LXopOnRoaXMuY29weShiKTtpZigxPD16KXJldHVybiB0aGlzLl93PXcsdGhpcy5feD1oLHRoaXMuX3k9bix0aGlzLl96PXUsdGhpcztiPTEteip6O2lmKGI8PU51bWJlci5FUFNJTE9OKXJldHVybiB6PTEtZSx0aGlzLl93PXoqCncrZSp0aGlzLl93LHRoaXMuX3g9eipoK2UqdGhpcy5feCx0aGlzLl95PXoqbitlKnRoaXMuX3ksdGhpcy5fej16KnUrZSp0aGlzLl96LHRoaXMubm9ybWFsaXplKCk7Yj1NYXRoLnNxcnQoYik7dmFyIEU9TWF0aC5hdGFuMihiLHopO3o9TWF0aC5zaW4oKDEtZSkqRSkvYjtlPU1hdGguc2luKGUqRSkvYjt0aGlzLl93PXcqeit0aGlzLl93KmU7dGhpcy5feD1oKnordGhpcy5feCplO3RoaXMuX3k9bip6K3RoaXMuX3kqZTt0aGlzLl96PXUqeit0aGlzLl96KmU7dGhpcy5vbkNoYW5nZUNhbGxiYWNrKCk7cmV0dXJuIHRoaXN9LGVxdWFsczpmdW5jdGlvbihiKXtyZXR1cm4gYi5feD09PXRoaXMuX3gmJmIuX3k9PT10aGlzLl95JiZiLl96PT09dGhpcy5feiYmYi5fdz09PXRoaXMuX3d9LGZyb21BcnJheTpmdW5jdGlvbihiLGUpe3ZvaWQgMD09PWUmJihlPTApO3RoaXMuX3g9YltlXTt0aGlzLl95PWJbZSsxXTt0aGlzLl96PWJbZSsyXTt0aGlzLl93PWJbZSszXTt0aGlzLm9uQ2hhbmdlQ2FsbGJhY2soKTsKcmV0dXJuIHRoaXN9LHRvQXJyYXk6ZnVuY3Rpb24oYixlKXt2b2lkIDA9PT1iJiYoYj1bXSk7dm9pZCAwPT09ZSYmKGU9MCk7YltlXT10aGlzLl94O2JbZSsxXT10aGlzLl95O2JbZSsyXT10aGlzLl96O2JbZSszXT10aGlzLl93O3JldHVybiBifSxvbkNoYW5nZTpmdW5jdGlvbihiKXt0aGlzLm9uQ2hhbmdlQ2FsbGJhY2s9YjtyZXR1cm4gdGhpc30sb25DaGFuZ2VDYWxsYmFjazpmdW5jdGlvbigpe319KTtPYmplY3QuYXNzaWduKGcucHJvdG90eXBlLHtpc1ZlY3RvcjM6ITAsc2V0OmZ1bmN0aW9uKGIsZSxoKXt0aGlzLng9Yjt0aGlzLnk9ZTt0aGlzLno9aDtyZXR1cm4gdGhpc30sc2V0U2NhbGFyOmZ1bmN0aW9uKGIpe3RoaXMuej10aGlzLnk9dGhpcy54PWI7cmV0dXJuIHRoaXN9LHNldFg6ZnVuY3Rpb24oYil7dGhpcy54PWI7cmV0dXJuIHRoaXN9LHNldFk6ZnVuY3Rpb24oYil7dGhpcy55PWI7cmV0dXJuIHRoaXN9LHNldFo6ZnVuY3Rpb24oYil7dGhpcy56PWI7cmV0dXJuIHRoaXN9LApzZXRDb21wb25lbnQ6ZnVuY3Rpb24oYixlKXtzd2l0Y2goYil7Y2FzZSAwOnRoaXMueD1lO2JyZWFrO2Nhc2UgMTp0aGlzLnk9ZTticmVhaztjYXNlIDI6dGhpcy56PWU7YnJlYWs7ZGVmYXVsdDp0aHJvdyBFcnJvcigiaW5kZXggaXMgb3V0IG9mIHJhbmdlOiAiK2IpO31yZXR1cm4gdGhpc30sZ2V0Q29tcG9uZW50OmZ1bmN0aW9uKGIpe3N3aXRjaChiKXtjYXNlIDA6cmV0dXJuIHRoaXMueDtjYXNlIDE6cmV0dXJuIHRoaXMueTtjYXNlIDI6cmV0dXJuIHRoaXMuejtkZWZhdWx0OnRocm93IEVycm9yKCJpbmRleCBpcyBvdXQgb2YgcmFuZ2U6ICIrYik7fX0sY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy54LHRoaXMueSx0aGlzLnopfSxjb3B5OmZ1bmN0aW9uKGIpe3RoaXMueD1iLng7dGhpcy55PWIueTt0aGlzLno9Yi56O3JldHVybiB0aGlzfSxhZGQ6ZnVuY3Rpb24oYixlKXtpZih2b2lkIDAhPT1lKXJldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5hZGQoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5hZGRWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4iKSwKdGhpcy5hZGRWZWN0b3JzKGIsZSk7dGhpcy54Kz1iLng7dGhpcy55Kz1iLnk7dGhpcy56Kz1iLno7cmV0dXJuIHRoaXN9LGFkZFNjYWxhcjpmdW5jdGlvbihiKXt0aGlzLngrPWI7dGhpcy55Kz1iO3RoaXMueis9YjtyZXR1cm4gdGhpc30sYWRkVmVjdG9yczpmdW5jdGlvbihiLGUpe3RoaXMueD1iLngrZS54O3RoaXMueT1iLnkrZS55O3RoaXMuej1iLnorZS56O3JldHVybiB0aGlzfSxhZGRTY2FsZWRWZWN0b3I6ZnVuY3Rpb24oYixlKXt0aGlzLngrPWIueCplO3RoaXMueSs9Yi55KmU7dGhpcy56Kz1iLnoqZTtyZXR1cm4gdGhpc30sc3ViOmZ1bmN0aW9uKGIsZSl7aWYodm9pZCAwIT09ZSlyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuc3ViKCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAuc3ViVmVjdG9ycyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5zdWJWZWN0b3JzKGIsZSk7dGhpcy54LT1iLng7dGhpcy55LT1iLnk7dGhpcy56LT1iLno7CnJldHVybiB0aGlzfSxzdWJTY2FsYXI6ZnVuY3Rpb24oYil7dGhpcy54LT1iO3RoaXMueS09Yjt0aGlzLnotPWI7cmV0dXJuIHRoaXN9LHN1YlZlY3RvcnM6ZnVuY3Rpb24oYixlKXt0aGlzLng9Yi54LWUueDt0aGlzLnk9Yi55LWUueTt0aGlzLno9Yi56LWUuejtyZXR1cm4gdGhpc30sbXVsdGlwbHk6ZnVuY3Rpb24oYixlKXtpZih2b2lkIDAhPT1lKXJldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5tdWx0aXBseSgpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLm11bHRpcGx5VmVjdG9ycyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5tdWx0aXBseVZlY3RvcnMoYixlKTt0aGlzLngqPWIueDt0aGlzLnkqPWIueTt0aGlzLnoqPWIuejtyZXR1cm4gdGhpc30sbXVsdGlwbHlTY2FsYXI6ZnVuY3Rpb24oYil7dGhpcy54Kj1iO3RoaXMueSo9Yjt0aGlzLnoqPWI7cmV0dXJuIHRoaXN9LG11bHRpcGx5VmVjdG9yczpmdW5jdGlvbihiLGUpe3RoaXMueD1iLngqCmUueDt0aGlzLnk9Yi55KmUueTt0aGlzLno9Yi56KmUuejtyZXR1cm4gdGhpc30sYXBwbHlFdWxlcjpmdW5jdGlvbigpe3ZhciBiPW5ldyBmO3JldHVybiBmdW5jdGlvbihlKXtlJiZlLmlzRXVsZXJ8fGNvbnNvbGUuZXJyb3IoIlRIUkVFLlZlY3RvcjM6IC5hcHBseUV1bGVyKCkgbm93IGV4cGVjdHMgYW4gRXVsZXIgcm90YXRpb24gcmF0aGVyIHRoYW4gYSBWZWN0b3IzIGFuZCBvcmRlci4iKTtyZXR1cm4gdGhpcy5hcHBseVF1YXRlcm5pb24oYi5zZXRGcm9tRXVsZXIoZSkpfX0oKSxhcHBseUF4aXNBbmdsZTpmdW5jdGlvbigpe3ZhciBiPW5ldyBmO3JldHVybiBmdW5jdGlvbihlLGgpe3JldHVybiB0aGlzLmFwcGx5UXVhdGVybmlvbihiLnNldEZyb21BeGlzQW5nbGUoZSxoKSl9fSgpLGFwcGx5TWF0cml4MzpmdW5jdGlvbihiKXt2YXIgZT10aGlzLngsaD10aGlzLnksbj10aGlzLno7Yj1iLmVsZW1lbnRzO3RoaXMueD1iWzBdKmUrYlszXSpoK2JbNl0qbjt0aGlzLnk9YlsxXSplKwpiWzRdKmgrYls3XSpuO3RoaXMuej1iWzJdKmUrYls1XSpoK2JbOF0qbjtyZXR1cm4gdGhpc30sYXBwbHlNYXRyaXg0OmZ1bmN0aW9uKGIpe3ZhciBlPXRoaXMueCxoPXRoaXMueSxuPXRoaXMuejtiPWIuZWxlbWVudHM7dmFyIHU9MS8oYlszXSplK2JbN10qaCtiWzExXSpuK2JbMTVdKTt0aGlzLng9KGJbMF0qZStiWzRdKmgrYls4XSpuK2JbMTJdKSp1O3RoaXMueT0oYlsxXSplK2JbNV0qaCtiWzldKm4rYlsxM10pKnU7dGhpcy56PShiWzJdKmUrYls2XSpoK2JbMTBdKm4rYlsxNF0pKnU7cmV0dXJuIHRoaXN9LGFwcGx5UXVhdGVybmlvbjpmdW5jdGlvbihiKXt2YXIgZT10aGlzLngsaD10aGlzLnksbj10aGlzLnosdT1iLngsdz1iLnksej1iLno7Yj1iLnc7dmFyIEU9YiplK3cqbi16KmgsSD1iKmgreiplLXUqbixJPWIqbit1KmgtdyplO2U9LXUqZS13KmgteipuO3RoaXMueD1FKmIrZSotdStIKi16LUkqLXc7dGhpcy55PUgqYitlKi13K0kqLXUtRSotejt0aGlzLno9SSpiK2UqLXorCkUqLXctSCotdTtyZXR1cm4gdGhpc30scHJvamVjdDpmdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5hcHBseU1hdHJpeDQoYi5tYXRyaXhXb3JsZEludmVyc2UpLmFwcGx5TWF0cml4NChiLnByb2plY3Rpb25NYXRyaXgpfSx1bnByb2plY3Q6ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuYXBwbHlNYXRyaXg0KGIucHJvamVjdGlvbk1hdHJpeEludmVyc2UpLmFwcGx5TWF0cml4NChiLm1hdHJpeFdvcmxkKX0sdHJhbnNmb3JtRGlyZWN0aW9uOmZ1bmN0aW9uKGIpe3ZhciBlPXRoaXMueCxoPXRoaXMueSxuPXRoaXMuejtiPWIuZWxlbWVudHM7dGhpcy54PWJbMF0qZStiWzRdKmgrYls4XSpuO3RoaXMueT1iWzFdKmUrYls1XSpoK2JbOV0qbjt0aGlzLno9YlsyXSplK2JbNl0qaCtiWzEwXSpuO3JldHVybiB0aGlzLm5vcm1hbGl6ZSgpfSxkaXZpZGU6ZnVuY3Rpb24oYil7dGhpcy54Lz1iLng7dGhpcy55Lz1iLnk7dGhpcy56Lz1iLno7cmV0dXJuIHRoaXN9LGRpdmlkZVNjYWxhcjpmdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5tdWx0aXBseVNjYWxhcigxLwpiKX0sbWluOmZ1bmN0aW9uKGIpe3RoaXMueD1NYXRoLm1pbih0aGlzLngsYi54KTt0aGlzLnk9TWF0aC5taW4odGhpcy55LGIueSk7dGhpcy56PU1hdGgubWluKHRoaXMueixiLnopO3JldHVybiB0aGlzfSxtYXg6ZnVuY3Rpb24oYil7dGhpcy54PU1hdGgubWF4KHRoaXMueCxiLngpO3RoaXMueT1NYXRoLm1heCh0aGlzLnksYi55KTt0aGlzLno9TWF0aC5tYXgodGhpcy56LGIueik7cmV0dXJuIHRoaXN9LGNsYW1wOmZ1bmN0aW9uKGIsZSl7dGhpcy54PU1hdGgubWF4KGIueCxNYXRoLm1pbihlLngsdGhpcy54KSk7dGhpcy55PU1hdGgubWF4KGIueSxNYXRoLm1pbihlLnksdGhpcy55KSk7dGhpcy56PU1hdGgubWF4KGIueixNYXRoLm1pbihlLnosdGhpcy56KSk7cmV0dXJuIHRoaXN9LGNsYW1wU2NhbGFyOmZ1bmN0aW9uKGIsZSl7dGhpcy54PU1hdGgubWF4KGIsTWF0aC5taW4oZSx0aGlzLngpKTt0aGlzLnk9TWF0aC5tYXgoYixNYXRoLm1pbihlLHRoaXMueSkpO3RoaXMuej1NYXRoLm1heChiLApNYXRoLm1pbihlLHRoaXMueikpO3JldHVybiB0aGlzfSxjbGFtcExlbmd0aDpmdW5jdGlvbihiLGUpe3ZhciBoPXRoaXMubGVuZ3RoKCk7cmV0dXJuIHRoaXMuZGl2aWRlU2NhbGFyKGh8fDEpLm11bHRpcGx5U2NhbGFyKE1hdGgubWF4KGIsTWF0aC5taW4oZSxoKSkpfSxmbG9vcjpmdW5jdGlvbigpe3RoaXMueD1NYXRoLmZsb29yKHRoaXMueCk7dGhpcy55PU1hdGguZmxvb3IodGhpcy55KTt0aGlzLno9TWF0aC5mbG9vcih0aGlzLnopO3JldHVybiB0aGlzfSxjZWlsOmZ1bmN0aW9uKCl7dGhpcy54PU1hdGguY2VpbCh0aGlzLngpO3RoaXMueT1NYXRoLmNlaWwodGhpcy55KTt0aGlzLno9TWF0aC5jZWlsKHRoaXMueik7cmV0dXJuIHRoaXN9LHJvdW5kOmZ1bmN0aW9uKCl7dGhpcy54PU1hdGgucm91bmQodGhpcy54KTt0aGlzLnk9TWF0aC5yb3VuZCh0aGlzLnkpO3RoaXMuej1NYXRoLnJvdW5kKHRoaXMueik7cmV0dXJuIHRoaXN9LHJvdW5kVG9aZXJvOmZ1bmN0aW9uKCl7dGhpcy54PQowPnRoaXMueD9NYXRoLmNlaWwodGhpcy54KTpNYXRoLmZsb29yKHRoaXMueCk7dGhpcy55PTA+dGhpcy55P01hdGguY2VpbCh0aGlzLnkpOk1hdGguZmxvb3IodGhpcy55KTt0aGlzLno9MD50aGlzLno/TWF0aC5jZWlsKHRoaXMueik6TWF0aC5mbG9vcih0aGlzLnopO3JldHVybiB0aGlzfSxuZWdhdGU6ZnVuY3Rpb24oKXt0aGlzLng9LXRoaXMueDt0aGlzLnk9LXRoaXMueTt0aGlzLno9LXRoaXMuejtyZXR1cm4gdGhpc30sZG90OmZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLngqYi54K3RoaXMueSpiLnkrdGhpcy56KmIuen0sbGVuZ3RoU3E6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54KnRoaXMueCt0aGlzLnkqdGhpcy55K3RoaXMueip0aGlzLnp9LGxlbmd0aDpmdW5jdGlvbigpe3JldHVybiBNYXRoLnNxcnQodGhpcy54KnRoaXMueCt0aGlzLnkqdGhpcy55K3RoaXMueip0aGlzLnopfSxtYW5oYXR0YW5MZW5ndGg6ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5hYnModGhpcy54KStNYXRoLmFicyh0aGlzLnkpKwpNYXRoLmFicyh0aGlzLnopfSxub3JtYWxpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kaXZpZGVTY2FsYXIodGhpcy5sZW5ndGgoKXx8MSl9LHNldExlbmd0aDpmdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5ub3JtYWxpemUoKS5tdWx0aXBseVNjYWxhcihiKX0sbGVycDpmdW5jdGlvbihiLGUpe3RoaXMueCs9KGIueC10aGlzLngpKmU7dGhpcy55Kz0oYi55LXRoaXMueSkqZTt0aGlzLnorPShiLnotdGhpcy56KSplO3JldHVybiB0aGlzfSxsZXJwVmVjdG9yczpmdW5jdGlvbihiLGUsaCl7cmV0dXJuIHRoaXMuc3ViVmVjdG9ycyhlLGIpLm11bHRpcGx5U2NhbGFyKGgpLmFkZChiKX0sY3Jvc3M6ZnVuY3Rpb24oYixlKXtyZXR1cm4gdm9pZCAwIT09ZT8oY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuY3Jvc3MoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5jcm9zc1ZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMuY3Jvc3NWZWN0b3JzKGIsZSkpOnRoaXMuY3Jvc3NWZWN0b3JzKHRoaXMsCmIpfSxjcm9zc1ZlY3RvcnM6ZnVuY3Rpb24oYixlKXt2YXIgaD1iLngsbj1iLnk7Yj1iLno7dmFyIHU9ZS54LHc9ZS55O2U9ZS56O3RoaXMueD1uKmUtYip3O3RoaXMueT1iKnUtaCplO3RoaXMuej1oKnctbip1O3JldHVybiB0aGlzfSxwcm9qZWN0T25WZWN0b3I6ZnVuY3Rpb24oYil7dmFyIGU9Yi5kb3QodGhpcykvYi5sZW5ndGhTcSgpO3JldHVybiB0aGlzLmNvcHkoYikubXVsdGlwbHlTY2FsYXIoZSl9LHByb2plY3RPblBsYW5lOmZ1bmN0aW9uKCl7dmFyIGI9bmV3IGc7cmV0dXJuIGZ1bmN0aW9uKGUpe2IuY29weSh0aGlzKS5wcm9qZWN0T25WZWN0b3IoZSk7cmV0dXJuIHRoaXMuc3ViKGIpfX0oKSxyZWZsZWN0OmZ1bmN0aW9uKCl7dmFyIGI9bmV3IGc7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnN1YihiLmNvcHkoZSkubXVsdGlwbHlTY2FsYXIoMip0aGlzLmRvdChlKSkpfX0oKSxhbmdsZVRvOmZ1bmN0aW9uKGIpe3JldHVybiBNYXRoLmFjb3Mob2IuY2xhbXAodGhpcy5kb3QoYikvCk1hdGguc3FydCh0aGlzLmxlbmd0aFNxKCkqYi5sZW5ndGhTcSgpKSwtMSwxKSl9LGRpc3RhbmNlVG86ZnVuY3Rpb24oYil7cmV0dXJuIE1hdGguc3FydCh0aGlzLmRpc3RhbmNlVG9TcXVhcmVkKGIpKX0sZGlzdGFuY2VUb1NxdWFyZWQ6ZnVuY3Rpb24oYil7dmFyIGU9dGhpcy54LWIueCxoPXRoaXMueS1iLnk7Yj10aGlzLnotYi56O3JldHVybiBlKmUraCpoK2IqYn0sbWFuaGF0dGFuRGlzdGFuY2VUbzpmdW5jdGlvbihiKXtyZXR1cm4gTWF0aC5hYnModGhpcy54LWIueCkrTWF0aC5hYnModGhpcy55LWIueSkrTWF0aC5hYnModGhpcy56LWIueil9LHNldEZyb21TcGhlcmljYWw6ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuc2V0RnJvbVNwaGVyaWNhbENvb3JkcyhiLnJhZGl1cyxiLnBoaSxiLnRoZXRhKX0sc2V0RnJvbVNwaGVyaWNhbENvb3JkczpmdW5jdGlvbihiLGUsaCl7dmFyIG49TWF0aC5zaW4oZSkqYjt0aGlzLng9bipNYXRoLnNpbihoKTt0aGlzLnk9TWF0aC5jb3MoZSkqYjsKdGhpcy56PW4qTWF0aC5jb3MoaCk7cmV0dXJuIHRoaXN9LHNldEZyb21DeWxpbmRyaWNhbDpmdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5zZXRGcm9tQ3lsaW5kcmljYWxDb29yZHMoYi5yYWRpdXMsYi50aGV0YSxiLnkpfSxzZXRGcm9tQ3lsaW5kcmljYWxDb29yZHM6ZnVuY3Rpb24oYixlLGgpe3RoaXMueD1iKk1hdGguc2luKGUpO3RoaXMueT1oO3RoaXMuej1iKk1hdGguY29zKGUpO3JldHVybiB0aGlzfSxzZXRGcm9tTWF0cml4UG9zaXRpb246ZnVuY3Rpb24oYil7Yj1iLmVsZW1lbnRzO3RoaXMueD1iWzEyXTt0aGlzLnk9YlsxM107dGhpcy56PWJbMTRdO3JldHVybiB0aGlzfSxzZXRGcm9tTWF0cml4U2NhbGU6ZnVuY3Rpb24oYil7dmFyIGU9dGhpcy5zZXRGcm9tTWF0cml4Q29sdW1uKGIsMCkubGVuZ3RoKCksaD10aGlzLnNldEZyb21NYXRyaXhDb2x1bW4oYiwxKS5sZW5ndGgoKTtiPXRoaXMuc2V0RnJvbU1hdHJpeENvbHVtbihiLDIpLmxlbmd0aCgpO3RoaXMueD1lO3RoaXMueT0KaDt0aGlzLno9YjtyZXR1cm4gdGhpc30sc2V0RnJvbU1hdHJpeENvbHVtbjpmdW5jdGlvbihiLGUpe3JldHVybiB0aGlzLmZyb21BcnJheShiLmVsZW1lbnRzLDQqZSl9LGVxdWFsczpmdW5jdGlvbihiKXtyZXR1cm4gYi54PT09dGhpcy54JiZiLnk9PT10aGlzLnkmJmIuej09PXRoaXMuen0sZnJvbUFycmF5OmZ1bmN0aW9uKGIsZSl7dm9pZCAwPT09ZSYmKGU9MCk7dGhpcy54PWJbZV07dGhpcy55PWJbZSsxXTt0aGlzLno9YltlKzJdO3JldHVybiB0aGlzfSx0b0FycmF5OmZ1bmN0aW9uKGIsZSl7dm9pZCAwPT09YiYmKGI9W10pO3ZvaWQgMD09PWUmJihlPTApO2JbZV09dGhpcy54O2JbZSsxXT10aGlzLnk7YltlKzJdPXRoaXMuejtyZXR1cm4gYn0sZnJvbUJ1ZmZlckF0dHJpYnV0ZTpmdW5jdGlvbihiLGUsaCl7dm9pZCAwIT09aCYmY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiBvZmZzZXQgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIC5mcm9tQnVmZmVyQXR0cmlidXRlKCkuIik7CnRoaXMueD1iLmdldFgoZSk7dGhpcy55PWIuZ2V0WShlKTt0aGlzLno9Yi5nZXRaKGUpO3JldHVybiB0aGlzfX0pO09iamVjdC5hc3NpZ24obC5wcm90b3R5cGUse2lzTWF0cml4MzohMCxzZXQ6ZnVuY3Rpb24oYixlLGgsbix1LHcseixFLEgpe3ZhciBJPXRoaXMuZWxlbWVudHM7SVswXT1iO0lbMV09bjtJWzJdPXo7SVszXT1lO0lbNF09dTtJWzVdPUU7SVs2XT1oO0lbN109dztJWzhdPUg7cmV0dXJuIHRoaXN9LGlkZW50aXR5OmZ1bmN0aW9uKCl7dGhpcy5zZXQoMSwwLDAsMCwxLDAsMCwwLDEpO3JldHVybiB0aGlzfSxjbG9uZTpmdW5jdGlvbigpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuZnJvbUFycmF5KHRoaXMuZWxlbWVudHMpfSxjb3B5OmZ1bmN0aW9uKGIpe3ZhciBlPXRoaXMuZWxlbWVudHM7Yj1iLmVsZW1lbnRzO2VbMF09YlswXTtlWzFdPWJbMV07ZVsyXT1iWzJdO2VbM109YlszXTtlWzRdPWJbNF07ZVs1XT1iWzVdO2VbNl09Yls2XTtlWzddPWJbN107ZVs4XT0KYls4XTtyZXR1cm4gdGhpc30sc2V0RnJvbU1hdHJpeDQ6ZnVuY3Rpb24oYil7Yj1iLmVsZW1lbnRzO3RoaXMuc2V0KGJbMF0sYls0XSxiWzhdLGJbMV0sYls1XSxiWzldLGJbMl0sYls2XSxiWzEwXSk7cmV0dXJuIHRoaXN9LGFwcGx5VG9CdWZmZXJBdHRyaWJ1dGU6ZnVuY3Rpb24oKXt2YXIgYj1uZXcgZztyZXR1cm4gZnVuY3Rpb24oZSl7Zm9yKHZhciBoPTAsbj1lLmNvdW50O2g8bjtoKyspYi54PWUuZ2V0WChoKSxiLnk9ZS5nZXRZKGgpLGIuej1lLmdldFooaCksYi5hcHBseU1hdHJpeDModGhpcyksZS5zZXRYWVooaCxiLngsYi55LGIueik7cmV0dXJuIGV9fSgpLG11bHRpcGx5OmZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLm11bHRpcGx5TWF0cmljZXModGhpcyxiKX0scHJlbXVsdGlwbHk6ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMubXVsdGlwbHlNYXRyaWNlcyhiLHRoaXMpfSxtdWx0aXBseU1hdHJpY2VzOmZ1bmN0aW9uKGIsZSl7dmFyIGg9Yi5lbGVtZW50cyxuPWUuZWxlbWVudHM7CmU9dGhpcy5lbGVtZW50cztiPWhbMF07dmFyIHU9aFszXSx3PWhbNl0sej1oWzFdLEU9aFs0XSxIPWhbN10sST1oWzJdLE89aFs1XTtoPWhbOF07dmFyIFE9blswXSxSPW5bM10sVT1uWzZdLFc9blsxXSxaPW5bNF0sZmE9bls3XSxxYT1uWzJdLHJhPW5bNV07bj1uWzhdO2VbMF09YipRK3UqVyt3KnFhO2VbM109YipSK3UqWit3KnJhO2VbNl09YipVK3UqZmErdypuO2VbMV09eipRK0UqVytIKnFhO2VbNF09eipSK0UqWitIKnJhO2VbN109eipVK0UqZmErSCpuO2VbMl09SSpRK08qVytoKnFhO2VbNV09SSpSK08qWitoKnJhO2VbOF09SSpVK08qZmEraCpuO3JldHVybiB0aGlzfSxtdWx0aXBseVNjYWxhcjpmdW5jdGlvbihiKXt2YXIgZT10aGlzLmVsZW1lbnRzO2VbMF0qPWI7ZVszXSo9YjtlWzZdKj1iO2VbMV0qPWI7ZVs0XSo9YjtlWzddKj1iO2VbMl0qPWI7ZVs1XSo9YjtlWzhdKj1iO3JldHVybiB0aGlzfSxkZXRlcm1pbmFudDpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZWxlbWVudHMsCmU9YlswXSxoPWJbMV0sbj1iWzJdLHU9YlszXSx3PWJbNF0sej1iWzVdLEU9Yls2XSxIPWJbN107Yj1iWzhdO3JldHVybiBlKncqYi1lKnoqSC1oKnUqYitoKnoqRStuKnUqSC1uKncqRX0sZ2V0SW52ZXJzZTpmdW5jdGlvbihiLGUpe2ImJmIuaXNNYXRyaXg0JiZjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXgzOiAuZ2V0SW52ZXJzZSgpIG5vIGxvbmdlciB0YWtlcyBhIE1hdHJpeDQgYXJndW1lbnQuIik7dmFyIGg9Yi5lbGVtZW50cztiPXRoaXMuZWxlbWVudHM7dmFyIG49aFswXSx1PWhbMV0sdz1oWzJdLHo9aFszXSxFPWhbNF0sSD1oWzVdLEk9aFs2XSxPPWhbN107aD1oWzhdO3ZhciBRPWgqRS1IKk8sUj1IKkktaCp6LFU9Typ6LUUqSSxXPW4qUSt1KlIrdypVO2lmKDA9PT1XKXtpZighMD09PWUpdGhyb3cgRXJyb3IoIlRIUkVFLk1hdHJpeDM6IC5nZXRJbnZlcnNlKCkgY2FuJ3QgaW52ZXJ0IG1hdHJpeCwgZGV0ZXJtaW5hbnQgaXMgMCIpO2NvbnNvbGUud2FybigiVEhSRUUuTWF0cml4MzogLmdldEludmVyc2UoKSBjYW4ndCBpbnZlcnQgbWF0cml4LCBkZXRlcm1pbmFudCBpcyAwIik7CnJldHVybiB0aGlzLmlkZW50aXR5KCl9ZT0xL1c7YlswXT1RKmU7YlsxXT0odypPLWgqdSkqZTtiWzJdPShIKnUtdypFKSplO2JbM109UiplO2JbNF09KGgqbi13KkkpKmU7Yls1XT0odyp6LUgqbikqZTtiWzZdPVUqZTtiWzddPSh1KkktTypuKSplO2JbOF09KEUqbi11KnopKmU7cmV0dXJuIHRoaXN9LHRyYW5zcG9zZTpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZWxlbWVudHM7dmFyIGU9YlsxXTtiWzFdPWJbM107YlszXT1lO2U9YlsyXTtiWzJdPWJbNl07Yls2XT1lO2U9Yls1XTtiWzVdPWJbN107Yls3XT1lO3JldHVybiB0aGlzfSxnZXROb3JtYWxNYXRyaXg6ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuc2V0RnJvbU1hdHJpeDQoYikuZ2V0SW52ZXJzZSh0aGlzKS50cmFuc3Bvc2UoKX0sdHJhbnNwb3NlSW50b0FycmF5OmZ1bmN0aW9uKGIpe3ZhciBlPXRoaXMuZWxlbWVudHM7YlswXT1lWzBdO2JbMV09ZVszXTtiWzJdPWVbNl07YlszXT1lWzFdO2JbNF09ZVs0XTtiWzVdPWVbN107Yls2XT0KZVsyXTtiWzddPWVbNV07Yls4XT1lWzhdO3JldHVybiB0aGlzfSxzZXRVdlRyYW5zZm9ybTpmdW5jdGlvbihiLGUsaCxuLHUsdyx6KXt2YXIgRT1NYXRoLmNvcyh1KTt1PU1hdGguc2luKHUpO3RoaXMuc2V0KGgqRSxoKnUsLWgqKEUqdyt1KnopK3crYiwtbip1LG4qRSwtbiooLXUqdytFKnopK3orZSwwLDAsMSl9LHNjYWxlOmZ1bmN0aW9uKGIsZSl7dmFyIGg9dGhpcy5lbGVtZW50cztoWzBdKj1iO2hbM10qPWI7aFs2XSo9YjtoWzFdKj1lO2hbNF0qPWU7aFs3XSo9ZTtyZXR1cm4gdGhpc30scm90YXRlOmZ1bmN0aW9uKGIpe3ZhciBlPU1hdGguY29zKGIpO2I9TWF0aC5zaW4oYik7dmFyIGg9dGhpcy5lbGVtZW50cyxuPWhbMF0sdT1oWzNdLHc9aFs2XSx6PWhbMV0sRT1oWzRdLEg9aFs3XTtoWzBdPWUqbitiKno7aFszXT1lKnUrYipFO2hbNl09ZSp3K2IqSDtoWzFdPS1iKm4rZSp6O2hbNF09LWIqdStlKkU7aFs3XT0tYip3K2UqSDtyZXR1cm4gdGhpc30sdHJhbnNsYXRlOmZ1bmN0aW9uKGIsCmUpe3ZhciBoPXRoaXMuZWxlbWVudHM7aFswXSs9YipoWzJdO2hbM10rPWIqaFs1XTtoWzZdKz1iKmhbOF07aFsxXSs9ZSpoWzJdO2hbNF0rPWUqaFs1XTtoWzddKz1lKmhbOF07cmV0dXJuIHRoaXN9LGVxdWFsczpmdW5jdGlvbihiKXt2YXIgZT10aGlzLmVsZW1lbnRzO2I9Yi5lbGVtZW50cztmb3IodmFyIGg9MDs5Pmg7aCsrKWlmKGVbaF0hPT1iW2hdKXJldHVybiExO3JldHVybiEwfSxmcm9tQXJyYXk6ZnVuY3Rpb24oYixlKXt2b2lkIDA9PT1lJiYoZT0wKTtmb3IodmFyIGg9MDs5Pmg7aCsrKXRoaXMuZWxlbWVudHNbaF09YltoK2VdO3JldHVybiB0aGlzfSx0b0FycmF5OmZ1bmN0aW9uKGIsZSl7dm9pZCAwPT09YiYmKGI9W10pO3ZvaWQgMD09PWUmJihlPTApO3ZhciBoPXRoaXMuZWxlbWVudHM7YltlXT1oWzBdO2JbZSsxXT1oWzFdO2JbZSsyXT1oWzJdO2JbZSszXT1oWzNdO2JbZSs0XT1oWzRdO2JbZSs1XT1oWzVdO2JbZSs2XT1oWzZdO2JbZSs3XT1oWzddO2JbZSs4XT1oWzhdOwpyZXR1cm4gYn19KTt2YXIgc2YsWWQ9e2dldERhdGFVUkw6ZnVuY3Rpb24oYil7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBIVE1MQ2FudmFzRWxlbWVudClyZXR1cm4gYi5zcmM7aWYoIShiIGluc3RhbmNlb2YgSFRNTENhbnZhc0VsZW1lbnQpKXt2b2lkIDA9PT1zZiYmKHNmPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIsImNhbnZhcyIpKTtzZi53aWR0aD1iLndpZHRoO3NmLmhlaWdodD1iLmhlaWdodDt2YXIgZT1zZi5nZXRDb250ZXh0KCIyZCIpO2IgaW5zdGFuY2VvZiBJbWFnZURhdGE/ZS5wdXRJbWFnZURhdGEoYiwwLDApOmUuZHJhd0ltYWdlKGIsMCwwLGIud2lkdGgsYi5oZWlnaHQpO2I9c2Z9cmV0dXJuIDIwNDg8Yi53aWR0aHx8MjA0ODxiLmhlaWdodD9iLnRvRGF0YVVSTCgiaW1hZ2UvanBlZyIsLjYpOmIudG9EYXRhVVJMKCJpbWFnZS9wbmciKX19LEtuPTA7ay5ERUZBVUxUX0lNQUdFPXZvaWQgMDtrLkRFRkFVTFRfTUFQUElORz0KMzAwO2sucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShjLnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOmssaXNUZXh0dXJlOiEwLHVwZGF0ZU1hdHJpeDpmdW5jdGlvbigpe3RoaXMubWF0cml4LnNldFV2VHJhbnNmb3JtKHRoaXMub2Zmc2V0LngsdGhpcy5vZmZzZXQueSx0aGlzLnJlcGVhdC54LHRoaXMucmVwZWF0LnksdGhpcy5yb3RhdGlvbix0aGlzLmNlbnRlci54LHRoaXMuY2VudGVyLnkpfSxjbG9uZTpmdW5jdGlvbigpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX0sY29weTpmdW5jdGlvbihiKXt0aGlzLm5hbWU9Yi5uYW1lO3RoaXMuaW1hZ2U9Yi5pbWFnZTt0aGlzLm1pcG1hcHM9Yi5taXBtYXBzLnNsaWNlKDApO3RoaXMubWFwcGluZz1iLm1hcHBpbmc7dGhpcy53cmFwUz1iLndyYXBTO3RoaXMud3JhcFQ9Yi53cmFwVDt0aGlzLm1hZ0ZpbHRlcj1iLm1hZ0ZpbHRlcjt0aGlzLm1pbkZpbHRlcj1iLm1pbkZpbHRlcjt0aGlzLmFuaXNvdHJvcHk9CmIuYW5pc290cm9weTt0aGlzLmZvcm1hdD1iLmZvcm1hdDt0aGlzLnR5cGU9Yi50eXBlO3RoaXMub2Zmc2V0LmNvcHkoYi5vZmZzZXQpO3RoaXMucmVwZWF0LmNvcHkoYi5yZXBlYXQpO3RoaXMuY2VudGVyLmNvcHkoYi5jZW50ZXIpO3RoaXMucm90YXRpb249Yi5yb3RhdGlvbjt0aGlzLm1hdHJpeEF1dG9VcGRhdGU9Yi5tYXRyaXhBdXRvVXBkYXRlO3RoaXMubWF0cml4LmNvcHkoYi5tYXRyaXgpO3RoaXMuZ2VuZXJhdGVNaXBtYXBzPWIuZ2VuZXJhdGVNaXBtYXBzO3RoaXMucHJlbXVsdGlwbHlBbHBoYT1iLnByZW11bHRpcGx5QWxwaGE7dGhpcy5mbGlwWT1iLmZsaXBZO3RoaXMudW5wYWNrQWxpZ25tZW50PWIudW5wYWNrQWxpZ25tZW50O3RoaXMuZW5jb2Rpbmc9Yi5lbmNvZGluZztyZXR1cm4gdGhpc30sdG9KU09OOmZ1bmN0aW9uKGIpe3ZhciBlPXZvaWQgMD09PWJ8fCJzdHJpbmciPT09dHlwZW9mIGI7aWYoIWUmJnZvaWQgMCE9PWIudGV4dHVyZXNbdGhpcy51dWlkXSlyZXR1cm4gYi50ZXh0dXJlc1t0aGlzLnV1aWRdOwp2YXIgaD17bWV0YWRhdGE6e3ZlcnNpb246NC41LHR5cGU6IlRleHR1cmUiLGdlbmVyYXRvcjoiVGV4dHVyZS50b0pTT04ifSx1dWlkOnRoaXMudXVpZCxuYW1lOnRoaXMubmFtZSxtYXBwaW5nOnRoaXMubWFwcGluZyxyZXBlYXQ6W3RoaXMucmVwZWF0LngsdGhpcy5yZXBlYXQueV0sb2Zmc2V0Olt0aGlzLm9mZnNldC54LHRoaXMub2Zmc2V0LnldLGNlbnRlcjpbdGhpcy5jZW50ZXIueCx0aGlzLmNlbnRlci55XSxyb3RhdGlvbjp0aGlzLnJvdGF0aW9uLHdyYXA6W3RoaXMud3JhcFMsdGhpcy53cmFwVF0sZm9ybWF0OnRoaXMuZm9ybWF0LHR5cGU6dGhpcy50eXBlLGVuY29kaW5nOnRoaXMuZW5jb2RpbmcsbWluRmlsdGVyOnRoaXMubWluRmlsdGVyLG1hZ0ZpbHRlcjp0aGlzLm1hZ0ZpbHRlcixhbmlzb3Ryb3B5OnRoaXMuYW5pc290cm9weSxmbGlwWTp0aGlzLmZsaXBZLHByZW11bHRpcGx5QWxwaGE6dGhpcy5wcmVtdWx0aXBseUFscGhhLHVucGFja0FsaWdubWVudDp0aGlzLnVucGFja0FsaWdubWVudH07CmlmKHZvaWQgMCE9PXRoaXMuaW1hZ2Upe3ZhciBuPXRoaXMuaW1hZ2U7dm9pZCAwPT09bi51dWlkJiYobi51dWlkPW9iLmdlbmVyYXRlVVVJRCgpKTtpZighZSYmdm9pZCAwPT09Yi5pbWFnZXNbbi51dWlkXSl7aWYoQXJyYXkuaXNBcnJheShuKSl7dmFyIHU9W107Zm9yKHZhciB3PTAsej1uLmxlbmd0aDt3PHo7dysrKXUucHVzaChZZC5nZXREYXRhVVJMKG5bd10pKX1lbHNlIHU9WWQuZ2V0RGF0YVVSTChuKTtiLmltYWdlc1tuLnV1aWRdPXt1dWlkOm4udXVpZCx1cmw6dX19aC5pbWFnZT1uLnV1aWR9ZXx8KGIudGV4dHVyZXNbdGhpcy51dWlkXT1oKTtyZXR1cm4gaH0sZGlzcG9zZTpmdW5jdGlvbigpe3RoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZToiZGlzcG9zZSJ9KX0sdHJhbnNmb3JtVXY6ZnVuY3Rpb24oYil7aWYoMzAwIT09dGhpcy5tYXBwaW5nKXJldHVybiBiO2IuYXBwbHlNYXRyaXgzKHRoaXMubWF0cml4KTtpZigwPmIueHx8MTxiLngpc3dpdGNoKHRoaXMud3JhcFMpe2Nhc2UgMUUzOmIueC09Ck1hdGguZmxvb3IoYi54KTticmVhaztjYXNlIDEwMDE6Yi54PTA+Yi54PzA6MTticmVhaztjYXNlIDEwMDI6Yi54PTE9PT1NYXRoLmFicyhNYXRoLmZsb29yKGIueCklMik/TWF0aC5jZWlsKGIueCktYi54OmIueC1NYXRoLmZsb29yKGIueCl9aWYoMD5iLnl8fDE8Yi55KXN3aXRjaCh0aGlzLndyYXBUKXtjYXNlIDFFMzpiLnktPU1hdGguZmxvb3IoYi55KTticmVhaztjYXNlIDEwMDE6Yi55PTA+Yi55PzA6MTticmVhaztjYXNlIDEwMDI6Yi55PTE9PT1NYXRoLmFicyhNYXRoLmZsb29yKGIueSklMik/TWF0aC5jZWlsKGIueSktYi55OmIueS1NYXRoLmZsb29yKGIueSl9dGhpcy5mbGlwWSYmKGIueT0xLWIueSk7cmV0dXJuIGJ9fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGsucHJvdG90eXBlLCJuZWVkc1VwZGF0ZSIse3NldDpmdW5jdGlvbihiKXshMD09PWImJnRoaXMudmVyc2lvbisrfX0pO09iamVjdC5hc3NpZ24obS5wcm90b3R5cGUse2lzVmVjdG9yNDohMCxzZXQ6ZnVuY3Rpb24oYiwKZSxoLG4pe3RoaXMueD1iO3RoaXMueT1lO3RoaXMuej1oO3RoaXMudz1uO3JldHVybiB0aGlzfSxzZXRTY2FsYXI6ZnVuY3Rpb24oYil7dGhpcy53PXRoaXMuej10aGlzLnk9dGhpcy54PWI7cmV0dXJuIHRoaXN9LHNldFg6ZnVuY3Rpb24oYil7dGhpcy54PWI7cmV0dXJuIHRoaXN9LHNldFk6ZnVuY3Rpb24oYil7dGhpcy55PWI7cmV0dXJuIHRoaXN9LHNldFo6ZnVuY3Rpb24oYil7dGhpcy56PWI7cmV0dXJuIHRoaXN9LHNldFc6ZnVuY3Rpb24oYil7dGhpcy53PWI7cmV0dXJuIHRoaXN9LHNldENvbXBvbmVudDpmdW5jdGlvbihiLGUpe3N3aXRjaChiKXtjYXNlIDA6dGhpcy54PWU7YnJlYWs7Y2FzZSAxOnRoaXMueT1lO2JyZWFrO2Nhc2UgMjp0aGlzLno9ZTticmVhaztjYXNlIDM6dGhpcy53PWU7YnJlYWs7ZGVmYXVsdDp0aHJvdyBFcnJvcigiaW5kZXggaXMgb3V0IG9mIHJhbmdlOiAiK2IpO31yZXR1cm4gdGhpc30sZ2V0Q29tcG9uZW50OmZ1bmN0aW9uKGIpe3N3aXRjaChiKXtjYXNlIDA6cmV0dXJuIHRoaXMueDsKY2FzZSAxOnJldHVybiB0aGlzLnk7Y2FzZSAyOnJldHVybiB0aGlzLno7Y2FzZSAzOnJldHVybiB0aGlzLnc7ZGVmYXVsdDp0aHJvdyBFcnJvcigiaW5kZXggaXMgb3V0IG9mIHJhbmdlOiAiK2IpO319LGNsb25lOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMueCx0aGlzLnksdGhpcy56LHRoaXMudyl9LGNvcHk6ZnVuY3Rpb24oYil7dGhpcy54PWIueDt0aGlzLnk9Yi55O3RoaXMuej1iLno7dGhpcy53PXZvaWQgMCE9PWIudz9iLnc6MTtyZXR1cm4gdGhpc30sYWRkOmZ1bmN0aW9uKGIsZSl7aWYodm9pZCAwIT09ZSlyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3I0OiAuYWRkKCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAuYWRkVmVjdG9ycyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5hZGRWZWN0b3JzKGIsZSk7dGhpcy54Kz1iLng7dGhpcy55Kz1iLnk7dGhpcy56Kz1iLno7dGhpcy53Kz1iLnc7cmV0dXJuIHRoaXN9LAphZGRTY2FsYXI6ZnVuY3Rpb24oYil7dGhpcy54Kz1iO3RoaXMueSs9Yjt0aGlzLnorPWI7dGhpcy53Kz1iO3JldHVybiB0aGlzfSxhZGRWZWN0b3JzOmZ1bmN0aW9uKGIsZSl7dGhpcy54PWIueCtlLng7dGhpcy55PWIueStlLnk7dGhpcy56PWIueitlLno7dGhpcy53PWIudytlLnc7cmV0dXJuIHRoaXN9LGFkZFNjYWxlZFZlY3RvcjpmdW5jdGlvbihiLGUpe3RoaXMueCs9Yi54KmU7dGhpcy55Kz1iLnkqZTt0aGlzLnorPWIueiplO3RoaXMudys9Yi53KmU7cmV0dXJuIHRoaXN9LHN1YjpmdW5jdGlvbihiLGUpe2lmKHZvaWQgMCE9PWUpcmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yNDogLnN1YigpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLnN1YlZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMuc3ViVmVjdG9ycyhiLGUpO3RoaXMueC09Yi54O3RoaXMueS09Yi55O3RoaXMuei09Yi56O3RoaXMudy09Yi53O3JldHVybiB0aGlzfSxzdWJTY2FsYXI6ZnVuY3Rpb24oYil7dGhpcy54LT0KYjt0aGlzLnktPWI7dGhpcy56LT1iO3RoaXMudy09YjtyZXR1cm4gdGhpc30sc3ViVmVjdG9yczpmdW5jdGlvbihiLGUpe3RoaXMueD1iLngtZS54O3RoaXMueT1iLnktZS55O3RoaXMuej1iLnotZS56O3RoaXMudz1iLnctZS53O3JldHVybiB0aGlzfSxtdWx0aXBseVNjYWxhcjpmdW5jdGlvbihiKXt0aGlzLngqPWI7dGhpcy55Kj1iO3RoaXMueio9Yjt0aGlzLncqPWI7cmV0dXJuIHRoaXN9LGFwcGx5TWF0cml4NDpmdW5jdGlvbihiKXt2YXIgZT10aGlzLngsaD10aGlzLnksbj10aGlzLnosdT10aGlzLnc7Yj1iLmVsZW1lbnRzO3RoaXMueD1iWzBdKmUrYls0XSpoK2JbOF0qbitiWzEyXSp1O3RoaXMueT1iWzFdKmUrYls1XSpoK2JbOV0qbitiWzEzXSp1O3RoaXMuej1iWzJdKmUrYls2XSpoK2JbMTBdKm4rYlsxNF0qdTt0aGlzLnc9YlszXSplK2JbN10qaCtiWzExXSpuK2JbMTVdKnU7cmV0dXJuIHRoaXN9LGRpdmlkZVNjYWxhcjpmdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5tdWx0aXBseVNjYWxhcigxLwpiKX0sc2V0QXhpc0FuZ2xlRnJvbVF1YXRlcm5pb246ZnVuY3Rpb24oYil7dGhpcy53PTIqTWF0aC5hY29zKGIudyk7dmFyIGU9TWF0aC5zcXJ0KDEtYi53KmIudyk7MUUtND5lPyh0aGlzLng9MSx0aGlzLno9dGhpcy55PTApOih0aGlzLng9Yi54L2UsdGhpcy55PWIueS9lLHRoaXMuej1iLnovZSk7cmV0dXJuIHRoaXN9LHNldEF4aXNBbmdsZUZyb21Sb3RhdGlvbk1hdHJpeDpmdW5jdGlvbihiKXtiPWIuZWxlbWVudHM7dmFyIGU9YlswXTt2YXIgaD1iWzRdO3ZhciBuPWJbOF0sdT1iWzFdLHc9Yls1XSx6PWJbOV07dmFyIEU9YlsyXTt2YXIgSD1iWzZdO3ZhciBJPWJbMTBdO2lmKC4wMT5NYXRoLmFicyhoLXUpJiYuMDE+TWF0aC5hYnMobi1FKSYmLjAxPk1hdGguYWJzKHotSCkpe2lmKC4xPk1hdGguYWJzKGgrdSkmJi4xPk1hdGguYWJzKG4rRSkmJi4xPk1hdGguYWJzKHorSCkmJi4xPk1hdGguYWJzKGUrdytJLTMpKXJldHVybiB0aGlzLnNldCgxLDAsMCwwKSx0aGlzO2I9TWF0aC5QSTsKZT0oZSsxKS8yO3c9KHcrMSkvMjtJPShJKzEpLzI7aD0oaCt1KS80O249KG4rRSkvNDt6PSh6K0gpLzQ7ZT53JiZlPkk/LjAxPmU/KEg9MCxoPUU9LjcwNzEwNjc4MSk6KEg9TWF0aC5zcXJ0KGUpLEU9aC9ILGg9bi9IKTp3Pkk/LjAxPnc/KEg9LjcwNzEwNjc4MSxFPTAsaD0uNzA3MTA2NzgxKTooRT1NYXRoLnNxcnQodyksSD1oL0UsaD16L0UpOi4wMT5JPyhFPUg9LjcwNzEwNjc4MSxoPTApOihoPU1hdGguc3FydChJKSxIPW4vaCxFPXovaCk7dGhpcy5zZXQoSCxFLGgsYik7cmV0dXJuIHRoaXN9Yj1NYXRoLnNxcnQoKEgteikqKEgteikrKG4tRSkqKG4tRSkrKHUtaCkqKHUtaCkpOy4wMDE+TWF0aC5hYnMoYikmJihiPTEpO3RoaXMueD0oSC16KS9iO3RoaXMueT0obi1FKS9iO3RoaXMuej0odS1oKS9iO3RoaXMudz1NYXRoLmFjb3MoKGUrdytJLTEpLzIpO3JldHVybiB0aGlzfSxtaW46ZnVuY3Rpb24oYil7dGhpcy54PU1hdGgubWluKHRoaXMueCxiLngpO3RoaXMueT1NYXRoLm1pbih0aGlzLnksCmIueSk7dGhpcy56PU1hdGgubWluKHRoaXMueixiLnopO3RoaXMudz1NYXRoLm1pbih0aGlzLncsYi53KTtyZXR1cm4gdGhpc30sbWF4OmZ1bmN0aW9uKGIpe3RoaXMueD1NYXRoLm1heCh0aGlzLngsYi54KTt0aGlzLnk9TWF0aC5tYXgodGhpcy55LGIueSk7dGhpcy56PU1hdGgubWF4KHRoaXMueixiLnopO3RoaXMudz1NYXRoLm1heCh0aGlzLncsYi53KTtyZXR1cm4gdGhpc30sY2xhbXA6ZnVuY3Rpb24oYixlKXt0aGlzLng9TWF0aC5tYXgoYi54LE1hdGgubWluKGUueCx0aGlzLngpKTt0aGlzLnk9TWF0aC5tYXgoYi55LE1hdGgubWluKGUueSx0aGlzLnkpKTt0aGlzLno9TWF0aC5tYXgoYi56LE1hdGgubWluKGUueix0aGlzLnopKTt0aGlzLnc9TWF0aC5tYXgoYi53LE1hdGgubWluKGUudyx0aGlzLncpKTtyZXR1cm4gdGhpc30sY2xhbXBTY2FsYXI6ZnVuY3Rpb24oKXt2YXIgYixlO3JldHVybiBmdW5jdGlvbihoLG4pe3ZvaWQgMD09PWImJihiPW5ldyBtLGU9bmV3IG0pO2Iuc2V0KGgsCmgsaCxoKTtlLnNldChuLG4sbixuKTtyZXR1cm4gdGhpcy5jbGFtcChiLGUpfX0oKSxjbGFtcExlbmd0aDpmdW5jdGlvbihiLGUpe3ZhciBoPXRoaXMubGVuZ3RoKCk7cmV0dXJuIHRoaXMuZGl2aWRlU2NhbGFyKGh8fDEpLm11bHRpcGx5U2NhbGFyKE1hdGgubWF4KGIsTWF0aC5taW4oZSxoKSkpfSxmbG9vcjpmdW5jdGlvbigpe3RoaXMueD1NYXRoLmZsb29yKHRoaXMueCk7dGhpcy55PU1hdGguZmxvb3IodGhpcy55KTt0aGlzLno9TWF0aC5mbG9vcih0aGlzLnopO3RoaXMudz1NYXRoLmZsb29yKHRoaXMudyk7cmV0dXJuIHRoaXN9LGNlaWw6ZnVuY3Rpb24oKXt0aGlzLng9TWF0aC5jZWlsKHRoaXMueCk7dGhpcy55PU1hdGguY2VpbCh0aGlzLnkpO3RoaXMuej1NYXRoLmNlaWwodGhpcy56KTt0aGlzLnc9TWF0aC5jZWlsKHRoaXMudyk7cmV0dXJuIHRoaXN9LHJvdW5kOmZ1bmN0aW9uKCl7dGhpcy54PU1hdGgucm91bmQodGhpcy54KTt0aGlzLnk9TWF0aC5yb3VuZCh0aGlzLnkpOwp0aGlzLno9TWF0aC5yb3VuZCh0aGlzLnopO3RoaXMudz1NYXRoLnJvdW5kKHRoaXMudyk7cmV0dXJuIHRoaXN9LHJvdW5kVG9aZXJvOmZ1bmN0aW9uKCl7dGhpcy54PTA+dGhpcy54P01hdGguY2VpbCh0aGlzLngpOk1hdGguZmxvb3IodGhpcy54KTt0aGlzLnk9MD50aGlzLnk/TWF0aC5jZWlsKHRoaXMueSk6TWF0aC5mbG9vcih0aGlzLnkpO3RoaXMuej0wPnRoaXMuej9NYXRoLmNlaWwodGhpcy56KTpNYXRoLmZsb29yKHRoaXMueik7dGhpcy53PTA+dGhpcy53P01hdGguY2VpbCh0aGlzLncpOk1hdGguZmxvb3IodGhpcy53KTtyZXR1cm4gdGhpc30sbmVnYXRlOmZ1bmN0aW9uKCl7dGhpcy54PS10aGlzLng7dGhpcy55PS10aGlzLnk7dGhpcy56PS10aGlzLno7dGhpcy53PS10aGlzLnc7cmV0dXJuIHRoaXN9LGRvdDpmdW5jdGlvbihiKXtyZXR1cm4gdGhpcy54KmIueCt0aGlzLnkqYi55K3RoaXMueipiLnordGhpcy53KmIud30sbGVuZ3RoU3E6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54Kgp0aGlzLngrdGhpcy55KnRoaXMueSt0aGlzLnoqdGhpcy56K3RoaXMudyp0aGlzLnd9LGxlbmd0aDpmdW5jdGlvbigpe3JldHVybiBNYXRoLnNxcnQodGhpcy54KnRoaXMueCt0aGlzLnkqdGhpcy55K3RoaXMueip0aGlzLnordGhpcy53KnRoaXMudyl9LG1hbmhhdHRhbkxlbmd0aDpmdW5jdGlvbigpe3JldHVybiBNYXRoLmFicyh0aGlzLngpK01hdGguYWJzKHRoaXMueSkrTWF0aC5hYnModGhpcy56KStNYXRoLmFicyh0aGlzLncpfSxub3JtYWxpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kaXZpZGVTY2FsYXIodGhpcy5sZW5ndGgoKXx8MSl9LHNldExlbmd0aDpmdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5ub3JtYWxpemUoKS5tdWx0aXBseVNjYWxhcihiKX0sbGVycDpmdW5jdGlvbihiLGUpe3RoaXMueCs9KGIueC10aGlzLngpKmU7dGhpcy55Kz0oYi55LXRoaXMueSkqZTt0aGlzLnorPShiLnotdGhpcy56KSplO3RoaXMudys9KGIudy10aGlzLncpKmU7cmV0dXJuIHRoaXN9LGxlcnBWZWN0b3JzOmZ1bmN0aW9uKGIsCmUsaCl7cmV0dXJuIHRoaXMuc3ViVmVjdG9ycyhlLGIpLm11bHRpcGx5U2NhbGFyKGgpLmFkZChiKX0sZXF1YWxzOmZ1bmN0aW9uKGIpe3JldHVybiBiLng9PT10aGlzLngmJmIueT09PXRoaXMueSYmYi56PT09dGhpcy56JiZiLnc9PT10aGlzLnd9LGZyb21BcnJheTpmdW5jdGlvbihiLGUpe3ZvaWQgMD09PWUmJihlPTApO3RoaXMueD1iW2VdO3RoaXMueT1iW2UrMV07dGhpcy56PWJbZSsyXTt0aGlzLnc9YltlKzNdO3JldHVybiB0aGlzfSx0b0FycmF5OmZ1bmN0aW9uKGIsZSl7dm9pZCAwPT09YiYmKGI9W10pO3ZvaWQgMD09PWUmJihlPTApO2JbZV09dGhpcy54O2JbZSsxXT10aGlzLnk7YltlKzJdPXRoaXMuejtiW2UrM109dGhpcy53O3JldHVybiBifSxmcm9tQnVmZmVyQXR0cmlidXRlOmZ1bmN0aW9uKGIsZSxoKXt2b2lkIDAhPT1oJiZjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjQ6IG9mZnNldCBoYXMgYmVlbiByZW1vdmVkIGZyb20gLmZyb21CdWZmZXJBdHRyaWJ1dGUoKS4iKTsKdGhpcy54PWIuZ2V0WChlKTt0aGlzLnk9Yi5nZXRZKGUpO3RoaXMuej1iLmdldFooZSk7dGhpcy53PWIuZ2V0VyhlKTtyZXR1cm4gdGhpc319KTtwLnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoYy5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpwLGlzV2ViR0xSZW5kZXJUYXJnZXQ6ITAsc2V0U2l6ZTpmdW5jdGlvbihiLGUpe2lmKHRoaXMud2lkdGghPT1ifHx0aGlzLmhlaWdodCE9PWUpdGhpcy53aWR0aD1iLHRoaXMuaGVpZ2h0PWUsdGhpcy5kaXNwb3NlKCk7dGhpcy52aWV3cG9ydC5zZXQoMCwwLGIsZSk7dGhpcy5zY2lzc29yLnNldCgwLDAsYixlKX0sY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9LGNvcHk6ZnVuY3Rpb24oYil7dGhpcy53aWR0aD1iLndpZHRoO3RoaXMuaGVpZ2h0PWIuaGVpZ2h0O3RoaXMudmlld3BvcnQuY29weShiLnZpZXdwb3J0KTt0aGlzLnRleHR1cmU9Yi50ZXh0dXJlLmNsb25lKCk7CnRoaXMuZGVwdGhCdWZmZXI9Yi5kZXB0aEJ1ZmZlcjt0aGlzLnN0ZW5jaWxCdWZmZXI9Yi5zdGVuY2lsQnVmZmVyO3RoaXMuZGVwdGhUZXh0dXJlPWIuZGVwdGhUZXh0dXJlO3JldHVybiB0aGlzfSxkaXNwb3NlOmZ1bmN0aW9uKCl7dGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiJkaXNwb3NlIn0pfX0pO3EucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShwLnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOnEsaXNXZWJHTE11bHRpc2FtcGxlUmVuZGVyVGFyZ2V0OiEwLGNvcHk6ZnVuY3Rpb24oYil7cC5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsYik7dGhpcy5zYW1wbGVzPWIuc2FtcGxlcztyZXR1cm4gdGhpc319KTtyLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHAucHJvdG90eXBlKTtyLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1yO3IucHJvdG90eXBlLmlzV2ViR0xSZW5kZXJUYXJnZXRDdWJlPSEwO3QucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoay5wcm90b3R5cGUpOwp0LnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj10O3QucHJvdG90eXBlLmlzRGF0YVRleHR1cmU9ITA7T2JqZWN0LmFzc2lnbih2LnByb3RvdHlwZSx7aXNCb3gzOiEwLHNldDpmdW5jdGlvbihiLGUpe3RoaXMubWluLmNvcHkoYik7dGhpcy5tYXguY29weShlKTtyZXR1cm4gdGhpc30sc2V0RnJvbUFycmF5OmZ1bmN0aW9uKGIpe2Zvcih2YXIgZT1JbmZpbml0eSxoPUluZmluaXR5LG49SW5maW5pdHksdT0tSW5maW5pdHksdz0tSW5maW5pdHksej0tSW5maW5pdHksRT0wLEg9Yi5sZW5ndGg7RTxIO0UrPTMpe3ZhciBJPWJbRV0sTz1iW0UrMV0sUT1iW0UrMl07STxlJiYoZT1JKTtPPGgmJihoPU8pO1E8biYmKG49USk7ST51JiYodT1JKTtPPncmJih3PU8pO1E+eiYmKHo9USl9dGhpcy5taW4uc2V0KGUsaCxuKTt0aGlzLm1heC5zZXQodSx3LHopO3JldHVybiB0aGlzfSxzZXRGcm9tQnVmZmVyQXR0cmlidXRlOmZ1bmN0aW9uKGIpe2Zvcih2YXIgZT1JbmZpbml0eSxoPUluZmluaXR5LG49SW5maW5pdHksCnU9LUluZmluaXR5LHc9LUluZmluaXR5LHo9LUluZmluaXR5LEU9MCxIPWIuY291bnQ7RTxIO0UrKyl7dmFyIEk9Yi5nZXRYKEUpLE89Yi5nZXRZKEUpLFE9Yi5nZXRaKEUpO0k8ZSYmKGU9SSk7TzxoJiYoaD1PKTtRPG4mJihuPVEpO0k+dSYmKHU9SSk7Tz53JiYodz1PKTtRPnomJih6PVEpfXRoaXMubWluLnNldChlLGgsbik7dGhpcy5tYXguc2V0KHUsdyx6KTtyZXR1cm4gdGhpc30sc2V0RnJvbVBvaW50czpmdW5jdGlvbihiKXt0aGlzLm1ha2VFbXB0eSgpO2Zvcih2YXIgZT0wLGg9Yi5sZW5ndGg7ZTxoO2UrKyl0aGlzLmV4cGFuZEJ5UG9pbnQoYltlXSk7cmV0dXJuIHRoaXN9LHNldEZyb21DZW50ZXJBbmRTaXplOmZ1bmN0aW9uKCl7dmFyIGI9bmV3IGc7cmV0dXJuIGZ1bmN0aW9uKGUsaCl7aD1iLmNvcHkoaCkubXVsdGlwbHlTY2FsYXIoLjUpO3RoaXMubWluLmNvcHkoZSkuc3ViKGgpO3RoaXMubWF4LmNvcHkoZSkuYWRkKGgpO3JldHVybiB0aGlzfX0oKSxzZXRGcm9tT2JqZWN0OmZ1bmN0aW9uKGIpe3RoaXMubWFrZUVtcHR5KCk7CnJldHVybiB0aGlzLmV4cGFuZEJ5T2JqZWN0KGIpfSxjbG9uZTpmdW5jdGlvbigpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX0sY29weTpmdW5jdGlvbihiKXt0aGlzLm1pbi5jb3B5KGIubWluKTt0aGlzLm1heC5jb3B5KGIubWF4KTtyZXR1cm4gdGhpc30sbWFrZUVtcHR5OmZ1bmN0aW9uKCl7dGhpcy5taW4ueD10aGlzLm1pbi55PXRoaXMubWluLno9SW5maW5pdHk7dGhpcy5tYXgueD10aGlzLm1heC55PXRoaXMubWF4Lno9LUluZmluaXR5O3JldHVybiB0aGlzfSxpc0VtcHR5OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWF4Lng8dGhpcy5taW4ueHx8dGhpcy5tYXgueTx0aGlzLm1pbi55fHx0aGlzLm1heC56PHRoaXMubWluLnp9LGdldENlbnRlcjpmdW5jdGlvbihiKXt2b2lkIDA9PT1iJiYoY29uc29sZS53YXJuKCJUSFJFRS5Cb3gzOiAuZ2V0Q2VudGVyKCkgdGFyZ2V0IGlzIG5vdyByZXF1aXJlZCIpLGI9bmV3IGcpO3JldHVybiB0aGlzLmlzRW1wdHkoKT8KYi5zZXQoMCwwLDApOmIuYWRkVmVjdG9ycyh0aGlzLm1pbix0aGlzLm1heCkubXVsdGlwbHlTY2FsYXIoLjUpfSxnZXRTaXplOmZ1bmN0aW9uKGIpe3ZvaWQgMD09PWImJihjb25zb2xlLndhcm4oIlRIUkVFLkJveDM6IC5nZXRTaXplKCkgdGFyZ2V0IGlzIG5vdyByZXF1aXJlZCIpLGI9bmV3IGcpO3JldHVybiB0aGlzLmlzRW1wdHkoKT9iLnNldCgwLDAsMCk6Yi5zdWJWZWN0b3JzKHRoaXMubWF4LHRoaXMubWluKX0sZXhwYW5kQnlQb2ludDpmdW5jdGlvbihiKXt0aGlzLm1pbi5taW4oYik7dGhpcy5tYXgubWF4KGIpO3JldHVybiB0aGlzfSxleHBhbmRCeVZlY3RvcjpmdW5jdGlvbihiKXt0aGlzLm1pbi5zdWIoYik7dGhpcy5tYXguYWRkKGIpO3JldHVybiB0aGlzfSxleHBhbmRCeVNjYWxhcjpmdW5jdGlvbihiKXt0aGlzLm1pbi5hZGRTY2FsYXIoLWIpO3RoaXMubWF4LmFkZFNjYWxhcihiKTtyZXR1cm4gdGhpc30sZXhwYW5kQnlPYmplY3Q6ZnVuY3Rpb24oKXtmdW5jdGlvbiBiKHcpe3ZhciB6PQp3Lmdlb21ldHJ5O2lmKHZvaWQgMCE9PXopaWYoei5pc0dlb21ldHJ5KWZvcih6PXoudmVydGljZXMsaD0wLG49ei5sZW5ndGg7aDxuO2grKyl1LmNvcHkoeltoXSksdS5hcHBseU1hdHJpeDQody5tYXRyaXhXb3JsZCksZS5leHBhbmRCeVBvaW50KHUpO2Vsc2UgaWYoei5pc0J1ZmZlckdlb21ldHJ5JiYoej16LmF0dHJpYnV0ZXMucG9zaXRpb24sdm9pZCAwIT09eikpZm9yKGg9MCxuPXouY291bnQ7aDxuO2grKyl1LmZyb21CdWZmZXJBdHRyaWJ1dGUoeixoKS5hcHBseU1hdHJpeDQody5tYXRyaXhXb3JsZCksZS5leHBhbmRCeVBvaW50KHUpfXZhciBlLGgsbix1PW5ldyBnO3JldHVybiBmdW5jdGlvbih3KXtlPXRoaXM7dy51cGRhdGVNYXRyaXhXb3JsZCghMCk7dy50cmF2ZXJzZShiKTtyZXR1cm4gdGhpc319KCksY29udGFpbnNQb2ludDpmdW5jdGlvbihiKXtyZXR1cm4gYi54PHRoaXMubWluLnh8fGIueD50aGlzLm1heC54fHxiLnk8dGhpcy5taW4ueXx8Yi55PnRoaXMubWF4Lnl8fApiLno8dGhpcy5taW4uenx8Yi56PnRoaXMubWF4Lno/ITE6ITB9LGNvbnRhaW5zQm94OmZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLm1pbi54PD1iLm1pbi54JiZiLm1heC54PD10aGlzLm1heC54JiZ0aGlzLm1pbi55PD1iLm1pbi55JiZiLm1heC55PD10aGlzLm1heC55JiZ0aGlzLm1pbi56PD1iLm1pbi56JiZiLm1heC56PD10aGlzLm1heC56fSxnZXRQYXJhbWV0ZXI6ZnVuY3Rpb24oYixlKXt2b2lkIDA9PT1lJiYoY29uc29sZS53YXJuKCJUSFJFRS5Cb3gzOiAuZ2V0UGFyYW1ldGVyKCkgdGFyZ2V0IGlzIG5vdyByZXF1aXJlZCIpLGU9bmV3IGcpO3JldHVybiBlLnNldCgoYi54LXRoaXMubWluLngpLyh0aGlzLm1heC54LXRoaXMubWluLngpLChiLnktdGhpcy5taW4ueSkvKHRoaXMubWF4LnktdGhpcy5taW4ueSksKGIuei10aGlzLm1pbi56KS8odGhpcy5tYXguei10aGlzLm1pbi56KSl9LGludGVyc2VjdHNCb3g6ZnVuY3Rpb24oYil7cmV0dXJuIGIubWF4Lng8dGhpcy5taW4ueHx8CmIubWluLng+dGhpcy5tYXgueHx8Yi5tYXgueTx0aGlzLm1pbi55fHxiLm1pbi55PnRoaXMubWF4Lnl8fGIubWF4Lno8dGhpcy5taW4uenx8Yi5taW4uej50aGlzLm1heC56PyExOiEwfSxpbnRlcnNlY3RzU3BoZXJlOmZ1bmN0aW9uKCl7dmFyIGI9bmV3IGc7cmV0dXJuIGZ1bmN0aW9uKGUpe3RoaXMuY2xhbXBQb2ludChlLmNlbnRlcixiKTtyZXR1cm4gYi5kaXN0YW5jZVRvU3F1YXJlZChlLmNlbnRlcik8PWUucmFkaXVzKmUucmFkaXVzfX0oKSxpbnRlcnNlY3RzUGxhbmU6ZnVuY3Rpb24oYil7aWYoMDxiLm5vcm1hbC54KXt2YXIgZT1iLm5vcm1hbC54KnRoaXMubWluLng7dmFyIGg9Yi5ub3JtYWwueCp0aGlzLm1heC54fWVsc2UgZT1iLm5vcm1hbC54KnRoaXMubWF4LngsaD1iLm5vcm1hbC54KnRoaXMubWluLng7MDxiLm5vcm1hbC55PyhlKz1iLm5vcm1hbC55KnRoaXMubWluLnksaCs9Yi5ub3JtYWwueSp0aGlzLm1heC55KTooZSs9Yi5ub3JtYWwueSp0aGlzLm1heC55LGgrPQpiLm5vcm1hbC55KnRoaXMubWluLnkpOzA8Yi5ub3JtYWwuej8oZSs9Yi5ub3JtYWwueip0aGlzLm1pbi56LGgrPWIubm9ybWFsLnoqdGhpcy5tYXgueik6KGUrPWIubm9ybWFsLnoqdGhpcy5tYXgueixoKz1iLm5vcm1hbC56KnRoaXMubWluLnopO3JldHVybiBlPD0tYi5jb25zdGFudCYmaD49LWIuY29uc3RhbnR9LGludGVyc2VjdHNUcmlhbmdsZTpmdW5jdGlvbigpe2Z1bmN0aW9uIGIoUSl7dmFyIFI7dmFyIFU9MDtmb3IoUj1RLmxlbmd0aC0zO1U8PVI7VSs9Myl7RS5mcm9tQXJyYXkoUSxVKTt2YXIgVz1lLmRvdChFKSxaPWguZG90KEUpLGZhPW4uZG90KEUpO2lmKE1hdGgubWF4KC1NYXRoLm1heChXLFosZmEpLE1hdGgubWluKFcsWixmYSkpPkkueCpNYXRoLmFicyhFLngpK0kueSpNYXRoLmFicyhFLnkpK0kueipNYXRoLmFicyhFLnopKXJldHVybiExfXJldHVybiEwfXZhciBlPW5ldyBnLGg9bmV3IGcsbj1uZXcgZyx1PW5ldyBnLHc9bmV3IGcsej1uZXcgZyxFPW5ldyBnLEg9Cm5ldyBnLEk9bmV3IGcsTz1uZXcgZztyZXR1cm4gZnVuY3Rpb24oUSl7aWYodGhpcy5pc0VtcHR5KCkpcmV0dXJuITE7dGhpcy5nZXRDZW50ZXIoSCk7SS5zdWJWZWN0b3JzKHRoaXMubWF4LEgpO2Uuc3ViVmVjdG9ycyhRLmEsSCk7aC5zdWJWZWN0b3JzKFEuYixIKTtuLnN1YlZlY3RvcnMoUS5jLEgpO3Uuc3ViVmVjdG9ycyhoLGUpO3cuc3ViVmVjdG9ycyhuLGgpO3ouc3ViVmVjdG9ycyhlLG4pO1E9WzAsLXUueix1LnksMCwtdy56LHcueSwwLC16Lnosei55LHUueiwwLC11Lngsdy56LDAsLXcueCx6LnosMCwtei54LC11LnksdS54LDAsLXcueSx3LngsMCwtei55LHoueCwwXTtpZighYihRKSlyZXR1cm4hMTtRPVsxLDAsMCwwLDEsMCwwLDAsMV07aWYoIWIoUSkpcmV0dXJuITE7Ty5jcm9zc1ZlY3RvcnModSx3KTtRPVtPLngsTy55LE8uel07cmV0dXJuIGIoUSl9fSgpLGNsYW1wUG9pbnQ6ZnVuY3Rpb24oYixlKXt2b2lkIDA9PT1lJiYoY29uc29sZS53YXJuKCJUSFJFRS5Cb3gzOiAuY2xhbXBQb2ludCgpIHRhcmdldCBpcyBub3cgcmVxdWlyZWQiKSwKZT1uZXcgZyk7cmV0dXJuIGUuY29weShiKS5jbGFtcCh0aGlzLm1pbix0aGlzLm1heCl9LGRpc3RhbmNlVG9Qb2ludDpmdW5jdGlvbigpe3ZhciBiPW5ldyBnO3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gYi5jb3B5KGUpLmNsYW1wKHRoaXMubWluLHRoaXMubWF4KS5zdWIoZSkubGVuZ3RoKCl9fSgpLGdldEJvdW5kaW5nU3BoZXJlOmZ1bmN0aW9uKCl7dmFyIGI9bmV3IGc7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZvaWQgMD09PWUmJmNvbnNvbGUuZXJyb3IoIlRIUkVFLkJveDM6IC5nZXRCb3VuZGluZ1NwaGVyZSgpIHRhcmdldCBpcyBub3cgcmVxdWlyZWQiKTt0aGlzLmdldENlbnRlcihlLmNlbnRlcik7ZS5yYWRpdXM9LjUqdGhpcy5nZXRTaXplKGIpLmxlbmd0aCgpO3JldHVybiBlfX0oKSxpbnRlcnNlY3Q6ZnVuY3Rpb24oYil7dGhpcy5taW4ubWF4KGIubWluKTt0aGlzLm1heC5taW4oYi5tYXgpO3RoaXMuaXNFbXB0eSgpJiZ0aGlzLm1ha2VFbXB0eSgpO3JldHVybiB0aGlzfSx1bmlvbjpmdW5jdGlvbihiKXt0aGlzLm1pbi5taW4oYi5taW4pOwp0aGlzLm1heC5tYXgoYi5tYXgpO3JldHVybiB0aGlzfSxhcHBseU1hdHJpeDQ6ZnVuY3Rpb24oKXt2YXIgYj1bbmV3IGcsbmV3IGcsbmV3IGcsbmV3IGcsbmV3IGcsbmV3IGcsbmV3IGcsbmV3IGddO3JldHVybiBmdW5jdGlvbihlKXtpZih0aGlzLmlzRW1wdHkoKSlyZXR1cm4gdGhpcztiWzBdLnNldCh0aGlzLm1pbi54LHRoaXMubWluLnksdGhpcy5taW4ueikuYXBwbHlNYXRyaXg0KGUpO2JbMV0uc2V0KHRoaXMubWluLngsdGhpcy5taW4ueSx0aGlzLm1heC56KS5hcHBseU1hdHJpeDQoZSk7YlsyXS5zZXQodGhpcy5taW4ueCx0aGlzLm1heC55LHRoaXMubWluLnopLmFwcGx5TWF0cml4NChlKTtiWzNdLnNldCh0aGlzLm1pbi54LHRoaXMubWF4LnksdGhpcy5tYXgueikuYXBwbHlNYXRyaXg0KGUpO2JbNF0uc2V0KHRoaXMubWF4LngsdGhpcy5taW4ueSx0aGlzLm1pbi56KS5hcHBseU1hdHJpeDQoZSk7Yls1XS5zZXQodGhpcy5tYXgueCx0aGlzLm1pbi55LHRoaXMubWF4LnopLmFwcGx5TWF0cml4NChlKTsKYls2XS5zZXQodGhpcy5tYXgueCx0aGlzLm1heC55LHRoaXMubWluLnopLmFwcGx5TWF0cml4NChlKTtiWzddLnNldCh0aGlzLm1heC54LHRoaXMubWF4LnksdGhpcy5tYXgueikuYXBwbHlNYXRyaXg0KGUpO3RoaXMuc2V0RnJvbVBvaW50cyhiKTtyZXR1cm4gdGhpc319KCksdHJhbnNsYXRlOmZ1bmN0aW9uKGIpe3RoaXMubWluLmFkZChiKTt0aGlzLm1heC5hZGQoYik7cmV0dXJuIHRoaXN9LGVxdWFsczpmdW5jdGlvbihiKXtyZXR1cm4gYi5taW4uZXF1YWxzKHRoaXMubWluKSYmYi5tYXguZXF1YWxzKHRoaXMubWF4KX19KTtPYmplY3QuYXNzaWduKEEucHJvdG90eXBlLHtzZXQ6ZnVuY3Rpb24oYixlKXt0aGlzLmNlbnRlci5jb3B5KGIpO3RoaXMucmFkaXVzPWU7cmV0dXJuIHRoaXN9LHNldEZyb21Qb2ludHM6ZnVuY3Rpb24oKXt2YXIgYj1uZXcgdjtyZXR1cm4gZnVuY3Rpb24oZSxoKXt2YXIgbj10aGlzLmNlbnRlcjt2b2lkIDAhPT1oP24uY29weShoKTpiLnNldEZyb21Qb2ludHMoZSkuZ2V0Q2VudGVyKG4pOwpmb3IodmFyIHU9aD0wLHc9ZS5sZW5ndGg7dTx3O3UrKyloPU1hdGgubWF4KGgsbi5kaXN0YW5jZVRvU3F1YXJlZChlW3VdKSk7dGhpcy5yYWRpdXM9TWF0aC5zcXJ0KGgpO3JldHVybiB0aGlzfX0oKSxjbG9uZTpmdW5jdGlvbigpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX0sY29weTpmdW5jdGlvbihiKXt0aGlzLmNlbnRlci5jb3B5KGIuY2VudGVyKTt0aGlzLnJhZGl1cz1iLnJhZGl1cztyZXR1cm4gdGhpc30sZW1wdHk6ZnVuY3Rpb24oKXtyZXR1cm4gMD49dGhpcy5yYWRpdXN9LGNvbnRhaW5zUG9pbnQ6ZnVuY3Rpb24oYil7cmV0dXJuIGIuZGlzdGFuY2VUb1NxdWFyZWQodGhpcy5jZW50ZXIpPD10aGlzLnJhZGl1cyp0aGlzLnJhZGl1c30sZGlzdGFuY2VUb1BvaW50OmZ1bmN0aW9uKGIpe3JldHVybiBiLmRpc3RhbmNlVG8odGhpcy5jZW50ZXIpLXRoaXMucmFkaXVzfSxpbnRlcnNlY3RzU3BoZXJlOmZ1bmN0aW9uKGIpe3ZhciBlPXRoaXMucmFkaXVzKwpiLnJhZGl1cztyZXR1cm4gYi5jZW50ZXIuZGlzdGFuY2VUb1NxdWFyZWQodGhpcy5jZW50ZXIpPD1lKmV9LGludGVyc2VjdHNCb3g6ZnVuY3Rpb24oYil7cmV0dXJuIGIuaW50ZXJzZWN0c1NwaGVyZSh0aGlzKX0saW50ZXJzZWN0c1BsYW5lOmZ1bmN0aW9uKGIpe3JldHVybiBNYXRoLmFicyhiLmRpc3RhbmNlVG9Qb2ludCh0aGlzLmNlbnRlcikpPD10aGlzLnJhZGl1c30sY2xhbXBQb2ludDpmdW5jdGlvbihiLGUpe3ZhciBoPXRoaXMuY2VudGVyLmRpc3RhbmNlVG9TcXVhcmVkKGIpO3ZvaWQgMD09PWUmJihjb25zb2xlLndhcm4oIlRIUkVFLlNwaGVyZTogLmNsYW1wUG9pbnQoKSB0YXJnZXQgaXMgbm93IHJlcXVpcmVkIiksZT1uZXcgZyk7ZS5jb3B5KGIpO2g+dGhpcy5yYWRpdXMqdGhpcy5yYWRpdXMmJihlLnN1Yih0aGlzLmNlbnRlcikubm9ybWFsaXplKCksZS5tdWx0aXBseVNjYWxhcih0aGlzLnJhZGl1cykuYWRkKHRoaXMuY2VudGVyKSk7cmV0dXJuIGV9LGdldEJvdW5kaW5nQm94OmZ1bmN0aW9uKGIpe3ZvaWQgMD09PQpiJiYoY29uc29sZS53YXJuKCJUSFJFRS5TcGhlcmU6IC5nZXRCb3VuZGluZ0JveCgpIHRhcmdldCBpcyBub3cgcmVxdWlyZWQiKSxiPW5ldyB2KTtiLnNldCh0aGlzLmNlbnRlcix0aGlzLmNlbnRlcik7Yi5leHBhbmRCeVNjYWxhcih0aGlzLnJhZGl1cyk7cmV0dXJuIGJ9LGFwcGx5TWF0cml4NDpmdW5jdGlvbihiKXt0aGlzLmNlbnRlci5hcHBseU1hdHJpeDQoYik7dGhpcy5yYWRpdXMqPWIuZ2V0TWF4U2NhbGVPbkF4aXMoKTtyZXR1cm4gdGhpc30sdHJhbnNsYXRlOmZ1bmN0aW9uKGIpe3RoaXMuY2VudGVyLmFkZChiKTtyZXR1cm4gdGhpc30sZXF1YWxzOmZ1bmN0aW9uKGIpe3JldHVybiBiLmNlbnRlci5lcXVhbHModGhpcy5jZW50ZXIpJiZiLnJhZGl1cz09PXRoaXMucmFkaXVzfX0pO09iamVjdC5hc3NpZ24oeS5wcm90b3R5cGUse3NldDpmdW5jdGlvbihiLGUpe3RoaXMubm9ybWFsLmNvcHkoYik7dGhpcy5jb25zdGFudD1lO3JldHVybiB0aGlzfSxzZXRDb21wb25lbnRzOmZ1bmN0aW9uKGIsCmUsaCxuKXt0aGlzLm5vcm1hbC5zZXQoYixlLGgpO3RoaXMuY29uc3RhbnQ9bjtyZXR1cm4gdGhpc30sc2V0RnJvbU5vcm1hbEFuZENvcGxhbmFyUG9pbnQ6ZnVuY3Rpb24oYixlKXt0aGlzLm5vcm1hbC5jb3B5KGIpO3RoaXMuY29uc3RhbnQ9LWUuZG90KHRoaXMubm9ybWFsKTtyZXR1cm4gdGhpc30sc2V0RnJvbUNvcGxhbmFyUG9pbnRzOmZ1bmN0aW9uKCl7dmFyIGI9bmV3IGcsZT1uZXcgZztyZXR1cm4gZnVuY3Rpb24oaCxuLHUpe249Yi5zdWJWZWN0b3JzKHUsbikuY3Jvc3MoZS5zdWJWZWN0b3JzKGgsbikpLm5vcm1hbGl6ZSgpO3RoaXMuc2V0RnJvbU5vcm1hbEFuZENvcGxhbmFyUG9pbnQobixoKTtyZXR1cm4gdGhpc319KCksY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9LGNvcHk6ZnVuY3Rpb24oYil7dGhpcy5ub3JtYWwuY29weShiLm5vcm1hbCk7dGhpcy5jb25zdGFudD1iLmNvbnN0YW50O3JldHVybiB0aGlzfSxub3JtYWxpemU6ZnVuY3Rpb24oKXt2YXIgYj0KMS90aGlzLm5vcm1hbC5sZW5ndGgoKTt0aGlzLm5vcm1hbC5tdWx0aXBseVNjYWxhcihiKTt0aGlzLmNvbnN0YW50Kj1iO3JldHVybiB0aGlzfSxuZWdhdGU6ZnVuY3Rpb24oKXt0aGlzLmNvbnN0YW50Kj0tMTt0aGlzLm5vcm1hbC5uZWdhdGUoKTtyZXR1cm4gdGhpc30sZGlzdGFuY2VUb1BvaW50OmZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLm5vcm1hbC5kb3QoYikrdGhpcy5jb25zdGFudH0sZGlzdGFuY2VUb1NwaGVyZTpmdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5kaXN0YW5jZVRvUG9pbnQoYi5jZW50ZXIpLWIucmFkaXVzfSxwcm9qZWN0UG9pbnQ6ZnVuY3Rpb24oYixlKXt2b2lkIDA9PT1lJiYoY29uc29sZS53YXJuKCJUSFJFRS5QbGFuZTogLnByb2plY3RQb2ludCgpIHRhcmdldCBpcyBub3cgcmVxdWlyZWQiKSxlPW5ldyBnKTtyZXR1cm4gZS5jb3B5KHRoaXMubm9ybWFsKS5tdWx0aXBseVNjYWxhcigtdGhpcy5kaXN0YW5jZVRvUG9pbnQoYikpLmFkZChiKX0saW50ZXJzZWN0TGluZTpmdW5jdGlvbigpe3ZhciBiPQpuZXcgZztyZXR1cm4gZnVuY3Rpb24oZSxoKXt2b2lkIDA9PT1oJiYoY29uc29sZS53YXJuKCJUSFJFRS5QbGFuZTogLmludGVyc2VjdExpbmUoKSB0YXJnZXQgaXMgbm93IHJlcXVpcmVkIiksaD1uZXcgZyk7dmFyIG49ZS5kZWx0YShiKSx1PXRoaXMubm9ybWFsLmRvdChuKTtpZigwPT09dSl7aWYoMD09PXRoaXMuZGlzdGFuY2VUb1BvaW50KGUuc3RhcnQpKXJldHVybiBoLmNvcHkoZS5zdGFydCl9ZWxzZSBpZih1PS0oZS5zdGFydC5kb3QodGhpcy5ub3JtYWwpK3RoaXMuY29uc3RhbnQpL3UsISgwPnV8fDE8dSkpcmV0dXJuIGguY29weShuKS5tdWx0aXBseVNjYWxhcih1KS5hZGQoZS5zdGFydCl9fSgpLGludGVyc2VjdHNMaW5lOmZ1bmN0aW9uKGIpe3ZhciBlPXRoaXMuZGlzdGFuY2VUb1BvaW50KGIuc3RhcnQpO2I9dGhpcy5kaXN0YW5jZVRvUG9pbnQoYi5lbmQpO3JldHVybiAwPmUmJjA8Ynx8MD5iJiYwPGV9LGludGVyc2VjdHNCb3g6ZnVuY3Rpb24oYil7cmV0dXJuIGIuaW50ZXJzZWN0c1BsYW5lKHRoaXMpfSwKaW50ZXJzZWN0c1NwaGVyZTpmdW5jdGlvbihiKXtyZXR1cm4gYi5pbnRlcnNlY3RzUGxhbmUodGhpcyl9LGNvcGxhbmFyUG9pbnQ6ZnVuY3Rpb24oYil7dm9pZCAwPT09YiYmKGNvbnNvbGUud2FybigiVEhSRUUuUGxhbmU6IC5jb3BsYW5hclBvaW50KCkgdGFyZ2V0IGlzIG5vdyByZXF1aXJlZCIpLGI9bmV3IGcpO3JldHVybiBiLmNvcHkodGhpcy5ub3JtYWwpLm11bHRpcGx5U2NhbGFyKC10aGlzLmNvbnN0YW50KX0sYXBwbHlNYXRyaXg0OmZ1bmN0aW9uKCl7dmFyIGI9bmV3IGcsZT1uZXcgbDtyZXR1cm4gZnVuY3Rpb24oaCxuKXtuPW58fGUuZ2V0Tm9ybWFsTWF0cml4KGgpO2g9dGhpcy5jb3BsYW5hclBvaW50KGIpLmFwcGx5TWF0cml4NChoKTtuPXRoaXMubm9ybWFsLmFwcGx5TWF0cml4MyhuKS5ub3JtYWxpemUoKTt0aGlzLmNvbnN0YW50PS1oLmRvdChuKTtyZXR1cm4gdGhpc319KCksdHJhbnNsYXRlOmZ1bmN0aW9uKGIpe3RoaXMuY29uc3RhbnQtPWIuZG90KHRoaXMubm9ybWFsKTsKcmV0dXJuIHRoaXN9LGVxdWFsczpmdW5jdGlvbihiKXtyZXR1cm4gYi5ub3JtYWwuZXF1YWxzKHRoaXMubm9ybWFsKSYmYi5jb25zdGFudD09PXRoaXMuY29uc3RhbnR9fSk7T2JqZWN0LmFzc2lnbih4LnByb3RvdHlwZSx7c2V0OmZ1bmN0aW9uKGIsZSxoLG4sdSx3KXt2YXIgej10aGlzLnBsYW5lczt6WzBdLmNvcHkoYik7elsxXS5jb3B5KGUpO3pbMl0uY29weShoKTt6WzNdLmNvcHkobik7els0XS5jb3B5KHUpO3pbNV0uY29weSh3KTtyZXR1cm4gdGhpc30sY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9LGNvcHk6ZnVuY3Rpb24oYil7Zm9yKHZhciBlPXRoaXMucGxhbmVzLGg9MDs2Pmg7aCsrKWVbaF0uY29weShiLnBsYW5lc1toXSk7cmV0dXJuIHRoaXN9LHNldEZyb21NYXRyaXg6ZnVuY3Rpb24oYil7dmFyIGU9dGhpcy5wbGFuZXMsaD1iLmVsZW1lbnRzO2I9aFswXTt2YXIgbj1oWzFdLHU9aFsyXSx3PWhbM10sej1oWzRdLApFPWhbNV0sSD1oWzZdLEk9aFs3XSxPPWhbOF0sUT1oWzldLFI9aFsxMF0sVT1oWzExXSxXPWhbMTJdLFo9aFsxM10sZmE9aFsxNF07aD1oWzE1XTtlWzBdLnNldENvbXBvbmVudHMody1iLEkteixVLU8saC1XKS5ub3JtYWxpemUoKTtlWzFdLnNldENvbXBvbmVudHModytiLEkreixVK08saCtXKS5ub3JtYWxpemUoKTtlWzJdLnNldENvbXBvbmVudHModytuLEkrRSxVK1EsaCtaKS5ub3JtYWxpemUoKTtlWzNdLnNldENvbXBvbmVudHMody1uLEktRSxVLVEsaC1aKS5ub3JtYWxpemUoKTtlWzRdLnNldENvbXBvbmVudHMody11LEktSCxVLVIsaC1mYSkubm9ybWFsaXplKCk7ZVs1XS5zZXRDb21wb25lbnRzKHcrdSxJK0gsVStSLGgrZmEpLm5vcm1hbGl6ZSgpO3JldHVybiB0aGlzfSxpbnRlcnNlY3RzT2JqZWN0OmZ1bmN0aW9uKCl7dmFyIGI9bmV3IEE7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciBoPWUuZ2VvbWV0cnk7bnVsbD09PWguYm91bmRpbmdTcGhlcmUmJmguY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCk7CmIuY29weShoLmJvdW5kaW5nU3BoZXJlKS5hcHBseU1hdHJpeDQoZS5tYXRyaXhXb3JsZCk7cmV0dXJuIHRoaXMuaW50ZXJzZWN0c1NwaGVyZShiKX19KCksaW50ZXJzZWN0c1Nwcml0ZTpmdW5jdGlvbigpe3ZhciBiPW5ldyBBO3JldHVybiBmdW5jdGlvbihlKXtiLmNlbnRlci5zZXQoMCwwLDApO2IucmFkaXVzPS43MDcxMDY3ODExODY1NDc2O2IuYXBwbHlNYXRyaXg0KGUubWF0cml4V29ybGQpO3JldHVybiB0aGlzLmludGVyc2VjdHNTcGhlcmUoYil9fSgpLGludGVyc2VjdHNTcGhlcmU6ZnVuY3Rpb24oYil7dmFyIGU9dGhpcy5wbGFuZXMsaD1iLmNlbnRlcjtiPS1iLnJhZGl1cztmb3IodmFyIG49MDs2Pm47bisrKWlmKGVbbl0uZGlzdGFuY2VUb1BvaW50KGgpPGIpcmV0dXJuITE7cmV0dXJuITB9LGludGVyc2VjdHNCb3g6ZnVuY3Rpb24oKXt2YXIgYj1uZXcgZztyZXR1cm4gZnVuY3Rpb24oZSl7Zm9yKHZhciBoPXRoaXMucGxhbmVzLG49MDs2Pm47bisrKXt2YXIgdT1oW25dOwpiLng9MDx1Lm5vcm1hbC54P2UubWF4Lng6ZS5taW4ueDtiLnk9MDx1Lm5vcm1hbC55P2UubWF4Lnk6ZS5taW4ueTtiLno9MDx1Lm5vcm1hbC56P2UubWF4Lno6ZS5taW4uejtpZigwPnUuZGlzdGFuY2VUb1BvaW50KGIpKXJldHVybiExfXJldHVybiEwfX0oKSxjb250YWluc1BvaW50OmZ1bmN0aW9uKGIpe2Zvcih2YXIgZT10aGlzLnBsYW5lcyxoPTA7Nj5oO2grKylpZigwPmVbaF0uZGlzdGFuY2VUb1BvaW50KGIpKXJldHVybiExO3JldHVybiEwfX0pO09iamVjdC5hc3NpZ24oQy5wcm90b3R5cGUse2lzTWF0cml4NDohMCxzZXQ6ZnVuY3Rpb24oYixlLGgsbix1LHcseixFLEgsSSxPLFEsUixVLFcsWil7dmFyIGZhPXRoaXMuZWxlbWVudHM7ZmFbMF09YjtmYVs0XT1lO2ZhWzhdPWg7ZmFbMTJdPW47ZmFbMV09dTtmYVs1XT13O2ZhWzldPXo7ZmFbMTNdPUU7ZmFbMl09SDtmYVs2XT1JO2ZhWzEwXT1PO2ZhWzE0XT1RO2ZhWzNdPVI7ZmFbN109VTtmYVsxMV09VztmYVsxNV09WjtyZXR1cm4gdGhpc30sCmlkZW50aXR5OmZ1bmN0aW9uKCl7dGhpcy5zZXQoMSwwLDAsMCwwLDEsMCwwLDAsMCwxLDAsMCwwLDAsMSk7cmV0dXJuIHRoaXN9LGNsb25lOmZ1bmN0aW9uKCl7cmV0dXJuKG5ldyBDKS5mcm9tQXJyYXkodGhpcy5lbGVtZW50cyl9LGNvcHk6ZnVuY3Rpb24oYil7dmFyIGU9dGhpcy5lbGVtZW50cztiPWIuZWxlbWVudHM7ZVswXT1iWzBdO2VbMV09YlsxXTtlWzJdPWJbMl07ZVszXT1iWzNdO2VbNF09Yls0XTtlWzVdPWJbNV07ZVs2XT1iWzZdO2VbN109Yls3XTtlWzhdPWJbOF07ZVs5XT1iWzldO2VbMTBdPWJbMTBdO2VbMTFdPWJbMTFdO2VbMTJdPWJbMTJdO2VbMTNdPWJbMTNdO2VbMTRdPWJbMTRdO2VbMTVdPWJbMTVdO3JldHVybiB0aGlzfSxjb3B5UG9zaXRpb246ZnVuY3Rpb24oYil7dmFyIGU9dGhpcy5lbGVtZW50cztiPWIuZWxlbWVudHM7ZVsxMl09YlsxMl07ZVsxM109YlsxM107ZVsxNF09YlsxNF07cmV0dXJuIHRoaXN9LGV4dHJhY3RCYXNpczpmdW5jdGlvbihiLGUsaCl7Yi5zZXRGcm9tTWF0cml4Q29sdW1uKHRoaXMsCjApO2Uuc2V0RnJvbU1hdHJpeENvbHVtbih0aGlzLDEpO2guc2V0RnJvbU1hdHJpeENvbHVtbih0aGlzLDIpO3JldHVybiB0aGlzfSxtYWtlQmFzaXM6ZnVuY3Rpb24oYixlLGgpe3RoaXMuc2V0KGIueCxlLngsaC54LDAsYi55LGUueSxoLnksMCxiLnosZS56LGgueiwwLDAsMCwwLDEpO3JldHVybiB0aGlzfSxleHRyYWN0Um90YXRpb246ZnVuY3Rpb24oKXt2YXIgYj1uZXcgZztyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIGg9dGhpcy5lbGVtZW50cyxuPWUuZWxlbWVudHMsdT0xL2Iuc2V0RnJvbU1hdHJpeENvbHVtbihlLDApLmxlbmd0aCgpLHc9MS9iLnNldEZyb21NYXRyaXhDb2x1bW4oZSwxKS5sZW5ndGgoKTtlPTEvYi5zZXRGcm9tTWF0cml4Q29sdW1uKGUsMikubGVuZ3RoKCk7aFswXT1uWzBdKnU7aFsxXT1uWzFdKnU7aFsyXT1uWzJdKnU7aFszXT0wO2hbNF09bls0XSp3O2hbNV09bls1XSp3O2hbNl09bls2XSp3O2hbN109MDtoWzhdPW5bOF0qZTtoWzldPW5bOV0qZTtoWzEwXT0KblsxMF0qZTtoWzExXT0wO2hbMTJdPTA7aFsxM109MDtoWzE0XT0wO2hbMTVdPTE7cmV0dXJuIHRoaXN9fSgpLG1ha2VSb3RhdGlvbkZyb21FdWxlcjpmdW5jdGlvbihiKXtiJiZiLmlzRXVsZXJ8fGNvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDQ6IC5tYWtlUm90YXRpb25Gcm9tRXVsZXIoKSBub3cgZXhwZWN0cyBhIEV1bGVyIHJvdGF0aW9uIHJhdGhlciB0aGFuIGEgVmVjdG9yMyBhbmQgb3JkZXIuIik7dmFyIGU9dGhpcy5lbGVtZW50cyxoPWIueCxuPWIueSx1PWIueix3PU1hdGguY29zKGgpO2g9TWF0aC5zaW4oaCk7dmFyIHo9TWF0aC5jb3Mobik7bj1NYXRoLnNpbihuKTt2YXIgRT1NYXRoLmNvcyh1KTt1PU1hdGguc2luKHUpO2lmKCJYWVoiPT09Yi5vcmRlcil7Yj13KkU7dmFyIEg9dyp1LEk9aCpFLE89aCp1O2VbMF09eipFO2VbNF09LXoqdTtlWzhdPW47ZVsxXT1IK0kqbjtlWzVdPWItTypuO2VbOV09LWgqejtlWzJdPU8tYipuO2VbNl09SStIKm47ZVsxMF09dyp6fWVsc2UiWVhaIj09PQpiLm9yZGVyPyhiPXoqRSxIPXoqdSxJPW4qRSxPPW4qdSxlWzBdPWIrTypoLGVbNF09SSpoLUgsZVs4XT13Km4sZVsxXT13KnUsZVs1XT13KkUsZVs5XT0taCxlWzJdPUgqaC1JLGVbNl09TytiKmgsZVsxMF09dyp6KToiWlhZIj09PWIub3JkZXI/KGI9eipFLEg9eip1LEk9bipFLE89bip1LGVbMF09Yi1PKmgsZVs0XT0tdyp1LGVbOF09SStIKmgsZVsxXT1IK0kqaCxlWzVdPXcqRSxlWzldPU8tYipoLGVbMl09LXcqbixlWzZdPWgsZVsxMF09dyp6KToiWllYIj09PWIub3JkZXI/KGI9dypFLEg9dyp1LEk9aCpFLE89aCp1LGVbMF09eipFLGVbNF09SSpuLUgsZVs4XT1iKm4rTyxlWzFdPXoqdSxlWzVdPU8qbitiLGVbOV09SCpuLUksZVsyXT0tbixlWzZdPWgqeixlWzEwXT13KnopOiJZWlgiPT09Yi5vcmRlcj8oYj13KnosSD13Km4sST1oKnosTz1oKm4sZVswXT16KkUsZVs0XT1PLWIqdSxlWzhdPUkqdStILGVbMV09dSxlWzVdPXcqRSxlWzldPS1oKkUsZVsyXT0tbipFLGVbNl09SCoKdStJLGVbMTBdPWItTyp1KToiWFpZIj09PWIub3JkZXImJihiPXcqeixIPXcqbixJPWgqeixPPWgqbixlWzBdPXoqRSxlWzRdPS11LGVbOF09bipFLGVbMV09Yip1K08sZVs1XT13KkUsZVs5XT1IKnUtSSxlWzJdPUkqdS1ILGVbNl09aCpFLGVbMTBdPU8qdStiKTtlWzNdPTA7ZVs3XT0wO2VbMTFdPTA7ZVsxMl09MDtlWzEzXT0wO2VbMTRdPTA7ZVsxNV09MTtyZXR1cm4gdGhpc30sbWFrZVJvdGF0aW9uRnJvbVF1YXRlcm5pb246ZnVuY3Rpb24oKXt2YXIgYj1uZXcgZygwLDAsMCksZT1uZXcgZygxLDEsMSk7cmV0dXJuIGZ1bmN0aW9uKGgpe3JldHVybiB0aGlzLmNvbXBvc2UoYixoLGUpfX0oKSxsb29rQXQ6ZnVuY3Rpb24oKXt2YXIgYj1uZXcgZyxlPW5ldyBnLGg9bmV3IGc7cmV0dXJuIGZ1bmN0aW9uKG4sdSx3KXt2YXIgej10aGlzLmVsZW1lbnRzO2guc3ViVmVjdG9ycyhuLHUpOzA9PT1oLmxlbmd0aFNxKCkmJihoLno9MSk7aC5ub3JtYWxpemUoKTtiLmNyb3NzVmVjdG9ycyh3LApoKTswPT09Yi5sZW5ndGhTcSgpJiYoMT09PU1hdGguYWJzKHcueik/aC54Kz0xRS00Omgueis9MUUtNCxoLm5vcm1hbGl6ZSgpLGIuY3Jvc3NWZWN0b3JzKHcsaCkpO2Iubm9ybWFsaXplKCk7ZS5jcm9zc1ZlY3RvcnMoaCxiKTt6WzBdPWIueDt6WzRdPWUueDt6WzhdPWgueDt6WzFdPWIueTt6WzVdPWUueTt6WzldPWgueTt6WzJdPWIuejt6WzZdPWUuejt6WzEwXT1oLno7cmV0dXJuIHRoaXN9fSgpLG11bHRpcGx5OmZ1bmN0aW9uKGIsZSl7cmV0dXJuIHZvaWQgMCE9PWU/KGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLm11bHRpcGx5KCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAubXVsdGlwbHlNYXRyaWNlcyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5tdWx0aXBseU1hdHJpY2VzKGIsZSkpOnRoaXMubXVsdGlwbHlNYXRyaWNlcyh0aGlzLGIpfSxwcmVtdWx0aXBseTpmdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5tdWx0aXBseU1hdHJpY2VzKGIsdGhpcyl9LAptdWx0aXBseU1hdHJpY2VzOmZ1bmN0aW9uKGIsZSl7dmFyIGg9Yi5lbGVtZW50cyxuPWUuZWxlbWVudHM7ZT10aGlzLmVsZW1lbnRzO2I9aFswXTt2YXIgdT1oWzRdLHc9aFs4XSx6PWhbMTJdLEU9aFsxXSxIPWhbNV0sST1oWzldLE89aFsxM10sUT1oWzJdLFI9aFs2XSxVPWhbMTBdLFc9aFsxNF0sWj1oWzNdLGZhPWhbN10scWE9aFsxMV07aD1oWzE1XTt2YXIgcmE9blswXSxpYT1uWzRdLHRhPW5bOF0sbmE9blsxMl0sdmE9blsxXSxCYT1uWzVdLHNhPW5bOV0sRGE9blsxM10sSGE9blsyXSxLYT1uWzZdLE5hPW5bMTBdLExhPW5bMTRdLGZiPW5bM10sY2I9bls3XSxKYT1uWzExXTtuPW5bMTVdO2VbMF09YipyYSt1KnZhK3cqSGEreipmYjtlWzRdPWIqaWErdSpCYSt3KkthK3oqY2I7ZVs4XT1iKnRhK3Uqc2ErdypOYSt6KkphO2VbMTJdPWIqbmErdSpEYSt3KkxhK3oqbjtlWzFdPUUqcmErSCp2YStJKkhhK08qZmI7ZVs1XT1FKmlhK0gqQmErSSpLYStPKmNiO2VbOV09RSp0YStIKnNhKwpJKk5hK08qSmE7ZVsxM109RSpuYStIKkRhK0kqTGErTypuO2VbMl09USpyYStSKnZhK1UqSGErVypmYjtlWzZdPVEqaWErUipCYStVKkthK1cqY2I7ZVsxMF09USp0YStSKnNhK1UqTmErVypKYTtlWzE0XT1RKm5hK1IqRGErVSpMYStXKm47ZVszXT1aKnJhK2ZhKnZhK3FhKkhhK2gqZmI7ZVs3XT1aKmlhK2ZhKkJhK3FhKkthK2gqY2I7ZVsxMV09Wip0YStmYSpzYStxYSpOYStoKkphO2VbMTVdPVoqbmErZmEqRGErcWEqTGEraCpuO3JldHVybiB0aGlzfSxtdWx0aXBseVNjYWxhcjpmdW5jdGlvbihiKXt2YXIgZT10aGlzLmVsZW1lbnRzO2VbMF0qPWI7ZVs0XSo9YjtlWzhdKj1iO2VbMTJdKj1iO2VbMV0qPWI7ZVs1XSo9YjtlWzldKj1iO2VbMTNdKj1iO2VbMl0qPWI7ZVs2XSo9YjtlWzEwXSo9YjtlWzE0XSo9YjtlWzNdKj1iO2VbN10qPWI7ZVsxMV0qPWI7ZVsxNV0qPWI7cmV0dXJuIHRoaXN9LGFwcGx5VG9CdWZmZXJBdHRyaWJ1dGU6ZnVuY3Rpb24oKXt2YXIgYj1uZXcgZztyZXR1cm4gZnVuY3Rpb24oZSl7Zm9yKHZhciBoPQowLG49ZS5jb3VudDtoPG47aCsrKWIueD1lLmdldFgoaCksYi55PWUuZ2V0WShoKSxiLno9ZS5nZXRaKGgpLGIuYXBwbHlNYXRyaXg0KHRoaXMpLGUuc2V0WFlaKGgsYi54LGIueSxiLnopO3JldHVybiBlfX0oKSxkZXRlcm1pbmFudDpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZWxlbWVudHMsZT1iWzBdLGg9Yls0XSxuPWJbOF0sdT1iWzEyXSx3PWJbMV0sej1iWzVdLEU9Yls5XSxIPWJbMTNdLEk9YlsyXSxPPWJbNl0sUT1iWzEwXSxSPWJbMTRdO3JldHVybiBiWzNdKigrdSpFKk8tbipIKk8tdSp6KlEraCpIKlErbip6KlItaCpFKlIpK2JbN10qKCtlKkUqUi1lKkgqUSt1KncqUS1uKncqUituKkgqSS11KkUqSSkrYlsxMV0qKCtlKkgqTy1lKnoqUi11KncqTytoKncqUit1KnoqSS1oKkgqSSkrYlsxNV0qKC1uKnoqSS1lKkUqTytlKnoqUStuKncqTy1oKncqUStoKkUqSSl9LHRyYW5zcG9zZTpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZWxlbWVudHM7dmFyIGU9YlsxXTtiWzFdPWJbNF07Yls0XT0KZTtlPWJbMl07YlsyXT1iWzhdO2JbOF09ZTtlPWJbNl07Yls2XT1iWzldO2JbOV09ZTtlPWJbM107YlszXT1iWzEyXTtiWzEyXT1lO2U9Yls3XTtiWzddPWJbMTNdO2JbMTNdPWU7ZT1iWzExXTtiWzExXT1iWzE0XTtiWzE0XT1lO3JldHVybiB0aGlzfSxzZXRQb3NpdGlvbjpmdW5jdGlvbihiKXt2YXIgZT10aGlzLmVsZW1lbnRzO2VbMTJdPWIueDtlWzEzXT1iLnk7ZVsxNF09Yi56O3JldHVybiB0aGlzfSxnZXRJbnZlcnNlOmZ1bmN0aW9uKGIsZSl7dmFyIGg9dGhpcy5lbGVtZW50cyxuPWIuZWxlbWVudHM7Yj1uWzBdO3ZhciB1PW5bMV0sdz1uWzJdLHo9blszXSxFPW5bNF0sSD1uWzVdLEk9bls2XSxPPW5bN10sUT1uWzhdLFI9bls5XSxVPW5bMTBdLFc9blsxMV0sWj1uWzEyXSxmYT1uWzEzXSxxYT1uWzE0XTtuPW5bMTVdO3ZhciByYT1SKnFhKk8tZmEqVSpPK2ZhKkkqVy1IKnFhKlctUipJKm4rSCpVKm4saWE9WipVKk8tUSpxYSpPLVoqSSpXK0UqcWEqVytRKkkqbi1FKlUqbix0YT0KUSpmYSpPLVoqUipPK1oqSCpXLUUqZmEqVy1RKkgqbitFKlIqbixuYT1aKlIqSS1RKmZhKkktWipIKlUrRSpmYSpVK1EqSCpxYS1FKlIqcWEsdmE9YipyYSt1KmlhK3cqdGEreipuYTtpZigwPT09dmEpe2lmKCEwPT09ZSl0aHJvdyBFcnJvcigiVEhSRUUuTWF0cml4NDogLmdldEludmVyc2UoKSBjYW4ndCBpbnZlcnQgbWF0cml4LCBkZXRlcm1pbmFudCBpcyAwIik7Y29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAuZ2V0SW52ZXJzZSgpIGNhbid0IGludmVydCBtYXRyaXgsIGRldGVybWluYW50IGlzIDAiKTtyZXR1cm4gdGhpcy5pZGVudGl0eSgpfWU9MS92YTtoWzBdPXJhKmU7aFsxXT0oZmEqVSp6LVIqcWEqei1mYSp3KlcrdSpxYSpXK1IqdypuLXUqVSpuKSplO2hbMl09KEgqcWEqei1mYSpJKnorZmEqdypPLXUqcWEqTy1IKncqbit1KkkqbikqZTtoWzNdPShSKkkqei1IKlUqei1SKncqTyt1KlUqTytIKncqVy11KkkqVykqZTtoWzRdPWlhKmU7aFs1XT0oUSpxYSp6LVoqVSp6KwpaKncqVy1iKnFhKlctUSp3Km4rYipVKm4pKmU7aFs2XT0oWipJKnotRSpxYSp6LVoqdypPK2IqcWEqTytFKncqbi1iKkkqbikqZTtoWzddPShFKlUqei1RKkkqeitRKncqTy1iKlUqTy1FKncqVytiKkkqVykqZTtoWzhdPXRhKmU7aFs5XT0oWipSKnotUSpmYSp6LVoqdSpXK2IqZmEqVytRKnUqbi1iKlIqbikqZTtoWzEwXT0oRSpmYSp6LVoqSCp6K1oqdSpPLWIqZmEqTy1FKnUqbitiKkgqbikqZTtoWzExXT0oUSpIKnotRSpSKnotUSp1Kk8rYipSKk8rRSp1KlctYipIKlcpKmU7aFsxMl09bmEqZTtoWzEzXT0oUSpmYSp3LVoqUip3K1oqdSpVLWIqZmEqVS1RKnUqcWErYipSKnFhKSplO2hbMTRdPShaKkgqdy1FKmZhKnctWip1KkkrYipmYSpJK0UqdSpxYS1iKkgqcWEpKmU7aFsxNV09KEUqUip3LVEqSCp3K1EqdSpJLWIqUipJLUUqdSpVK2IqSCpVKSplO3JldHVybiB0aGlzfSxzY2FsZTpmdW5jdGlvbihiKXt2YXIgZT10aGlzLmVsZW1lbnRzLGg9Yi54LG49Yi55O2I9Yi56O2VbMF0qPQpoO2VbNF0qPW47ZVs4XSo9YjtlWzFdKj1oO2VbNV0qPW47ZVs5XSo9YjtlWzJdKj1oO2VbNl0qPW47ZVsxMF0qPWI7ZVszXSo9aDtlWzddKj1uO2VbMTFdKj1iO3JldHVybiB0aGlzfSxnZXRNYXhTY2FsZU9uQXhpczpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZWxlbWVudHM7cmV0dXJuIE1hdGguc3FydChNYXRoLm1heChiWzBdKmJbMF0rYlsxXSpiWzFdK2JbMl0qYlsyXSxiWzRdKmJbNF0rYls1XSpiWzVdK2JbNl0qYls2XSxiWzhdKmJbOF0rYls5XSpiWzldK2JbMTBdKmJbMTBdKSl9LG1ha2VUcmFuc2xhdGlvbjpmdW5jdGlvbihiLGUsaCl7dGhpcy5zZXQoMSwwLDAsYiwwLDEsMCxlLDAsMCwxLGgsMCwwLDAsMSk7cmV0dXJuIHRoaXN9LG1ha2VSb3RhdGlvblg6ZnVuY3Rpb24oYil7dmFyIGU9TWF0aC5jb3MoYik7Yj1NYXRoLnNpbihiKTt0aGlzLnNldCgxLDAsMCwwLDAsZSwtYiwwLDAsYixlLDAsMCwwLDAsMSk7cmV0dXJuIHRoaXN9LG1ha2VSb3RhdGlvblk6ZnVuY3Rpb24oYil7dmFyIGU9Ck1hdGguY29zKGIpO2I9TWF0aC5zaW4oYik7dGhpcy5zZXQoZSwwLGIsMCwwLDEsMCwwLC1iLDAsZSwwLDAsMCwwLDEpO3JldHVybiB0aGlzfSxtYWtlUm90YXRpb25aOmZ1bmN0aW9uKGIpe3ZhciBlPU1hdGguY29zKGIpO2I9TWF0aC5zaW4oYik7dGhpcy5zZXQoZSwtYiwwLDAsYixlLDAsMCwwLDAsMSwwLDAsMCwwLDEpO3JldHVybiB0aGlzfSxtYWtlUm90YXRpb25BeGlzOmZ1bmN0aW9uKGIsZSl7dmFyIGg9TWF0aC5jb3MoZSk7ZT1NYXRoLnNpbihlKTt2YXIgbj0xLWgsdT1iLngsdz1iLnk7Yj1iLno7dmFyIHo9bip1LEU9bip3O3RoaXMuc2V0KHoqdStoLHoqdy1lKmIseipiK2UqdywwLHoqdytlKmIsRSp3K2gsRSpiLWUqdSwwLHoqYi1lKncsRSpiK2UqdSxuKmIqYitoLDAsMCwwLDAsMSk7cmV0dXJuIHRoaXN9LG1ha2VTY2FsZTpmdW5jdGlvbihiLGUsaCl7dGhpcy5zZXQoYiwwLDAsMCwwLGUsMCwwLDAsMCxoLDAsMCwwLDAsMSk7cmV0dXJuIHRoaXN9LG1ha2VTaGVhcjpmdW5jdGlvbihiLAplLGgpe3RoaXMuc2V0KDEsZSxoLDAsYiwxLGgsMCxiLGUsMSwwLDAsMCwwLDEpO3JldHVybiB0aGlzfSxjb21wb3NlOmZ1bmN0aW9uKGIsZSxoKXt2YXIgbj10aGlzLmVsZW1lbnRzLHU9ZS5feCx3PWUuX3ksej1lLl96LEU9ZS5fdyxIPXUrdSxJPXcrdyxPPXorejtlPXUqSDt2YXIgUT11Kkk7dSo9Tzt2YXIgUj13Kkk7dyo9Tzt6Kj1PO0gqPUU7SSo9RTtFKj1PO089aC54O3ZhciBVPWgueTtoPWguejtuWzBdPSgxLShSK3opKSpPO25bMV09KFErRSkqTztuWzJdPSh1LUkpKk87blszXT0wO25bNF09KFEtRSkqVTtuWzVdPSgxLShlK3opKSpVO25bNl09KHcrSCkqVTtuWzddPTA7bls4XT0odStJKSpoO25bOV09KHctSCkqaDtuWzEwXT0oMS0oZStSKSkqaDtuWzExXT0wO25bMTJdPWIueDtuWzEzXT1iLnk7blsxNF09Yi56O25bMTVdPTE7cmV0dXJuIHRoaXN9LGRlY29tcG9zZTpmdW5jdGlvbigpe3ZhciBiPW5ldyBnLGU9bmV3IEM7cmV0dXJuIGZ1bmN0aW9uKGgsbix1KXt2YXIgdz0KdGhpcy5lbGVtZW50cyx6PWIuc2V0KHdbMF0sd1sxXSx3WzJdKS5sZW5ndGgoKSxFPWIuc2V0KHdbNF0sd1s1XSx3WzZdKS5sZW5ndGgoKSxIPWIuc2V0KHdbOF0sd1s5XSx3WzEwXSkubGVuZ3RoKCk7MD50aGlzLmRldGVybWluYW50KCkmJih6PS16KTtoLng9d1sxMl07aC55PXdbMTNdO2guej13WzE0XTtlLmNvcHkodGhpcyk7aD0xL3o7dz0xL0U7dmFyIEk9MS9IO2UuZWxlbWVudHNbMF0qPWg7ZS5lbGVtZW50c1sxXSo9aDtlLmVsZW1lbnRzWzJdKj1oO2UuZWxlbWVudHNbNF0qPXc7ZS5lbGVtZW50c1s1XSo9dztlLmVsZW1lbnRzWzZdKj13O2UuZWxlbWVudHNbOF0qPUk7ZS5lbGVtZW50c1s5XSo9STtlLmVsZW1lbnRzWzEwXSo9STtuLnNldEZyb21Sb3RhdGlvbk1hdHJpeChlKTt1Lng9ejt1Lnk9RTt1Lno9SDtyZXR1cm4gdGhpc319KCksbWFrZVBlcnNwZWN0aXZlOmZ1bmN0aW9uKGIsZSxoLG4sdSx3KXt2b2lkIDA9PT13JiZjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5tYWtlUGVyc3BlY3RpdmUoKSBoYXMgYmVlbiByZWRlZmluZWQgYW5kIGhhcyBhIG5ldyBzaWduYXR1cmUuIFBsZWFzZSBjaGVjayB0aGUgZG9jcy4iKTsKdmFyIHo9dGhpcy5lbGVtZW50czt6WzBdPTIqdS8oZS1iKTt6WzRdPTA7els4XT0oZStiKS8oZS1iKTt6WzEyXT0wO3pbMV09MDt6WzVdPTIqdS8oaC1uKTt6WzldPShoK24pLyhoLW4pO3pbMTNdPTA7elsyXT0wO3pbNl09MDt6WzEwXT0tKHcrdSkvKHctdSk7elsxNF09LTIqdyp1Lyh3LXUpO3pbM109MDt6WzddPTA7elsxMV09LTE7elsxNV09MDtyZXR1cm4gdGhpc30sbWFrZU9ydGhvZ3JhcGhpYzpmdW5jdGlvbihiLGUsaCxuLHUsdyl7dmFyIHo9dGhpcy5lbGVtZW50cyxFPTEvKGUtYiksSD0xLyhoLW4pLEk9MS8ody11KTt6WzBdPTIqRTt6WzRdPTA7els4XT0wO3pbMTJdPS0oKGUrYikqRSk7elsxXT0wO3pbNV09MipIO3pbOV09MDt6WzEzXT0tKChoK24pKkgpO3pbMl09MDt6WzZdPTA7elsxMF09LTIqSTt6WzE0XT0tKCh3K3UpKkkpO3pbM109MDt6WzddPTA7elsxMV09MDt6WzE1XT0xO3JldHVybiB0aGlzfSxlcXVhbHM6ZnVuY3Rpb24oYil7dmFyIGU9dGhpcy5lbGVtZW50czsKYj1iLmVsZW1lbnRzO2Zvcih2YXIgaD0wOzE2Pmg7aCsrKWlmKGVbaF0hPT1iW2hdKXJldHVybiExO3JldHVybiEwfSxmcm9tQXJyYXk6ZnVuY3Rpb24oYixlKXt2b2lkIDA9PT1lJiYoZT0wKTtmb3IodmFyIGg9MDsxNj5oO2grKyl0aGlzLmVsZW1lbnRzW2hdPWJbaCtlXTtyZXR1cm4gdGhpc30sdG9BcnJheTpmdW5jdGlvbihiLGUpe3ZvaWQgMD09PWImJihiPVtdKTt2b2lkIDA9PT1lJiYoZT0wKTt2YXIgaD10aGlzLmVsZW1lbnRzO2JbZV09aFswXTtiW2UrMV09aFsxXTtiW2UrMl09aFsyXTtiW2UrM109aFszXTtiW2UrNF09aFs0XTtiW2UrNV09aFs1XTtiW2UrNl09aFs2XTtiW2UrN109aFs3XTtiW2UrOF09aFs4XTtiW2UrOV09aFs5XTtiW2UrMTBdPWhbMTBdO2JbZSsxMV09aFsxMV07YltlKzEyXT1oWzEyXTtiW2UrMTNdPWhbMTNdO2JbZSsxNF09aFsxNF07YltlKzE1XT1oWzE1XTtyZXR1cm4gYn19KTt2YXIgemI9e2FscGhhbWFwX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0FMUEhBTUFQXG5cdGRpZmZ1c2VDb2xvci5hICpceDNkIHRleHR1cmUyRCggYWxwaGFNYXAsIHZVdiApLmc7XG4jZW5kaWYiLAphbHBoYW1hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0FMUEhBTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIGFscGhhTWFwO1xuI2VuZGlmIixhbHBoYXRlc3RfZnJhZ21lbnQ6IiNpZmRlZiBBTFBIQVRFU1Rcblx0aWYgKCBkaWZmdXNlQ29sb3IuYSBceDNjIEFMUEhBVEVTVCApIGRpc2NhcmQ7XG4jZW5kaWYiLGFvbWFwX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0FPTUFQXG5cdGZsb2F0IGFtYmllbnRPY2NsdXNpb24gXHgzZCAoIHRleHR1cmUyRCggYW9NYXAsIHZVdjIgKS5yIC0gMS4wICkgKiBhb01hcEludGVuc2l0eSArIDEuMDtcblx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICpceDNkIGFtYmllbnRPY2NsdXNpb247XG5cdCNpZiBkZWZpbmVkKCBVU0VfRU5WTUFQICkgXHgyNlx4MjYgZGVmaW5lZCggUEhZU0lDQUwgKVxuXHRcdGZsb2F0IGRvdE5WIFx4M2Qgc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkubm9ybWFsLCBnZW9tZXRyeS52aWV3RGlyICkgKTtcblx0XHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdFNwZWN1bGFyICpceDNkIGNvbXB1dGVTcGVjdWxhck9jY2x1c2lvbiggZG90TlYsIGFtYmllbnRPY2NsdXNpb24sIG1hdGVyaWFsLnNwZWN1bGFyUm91Z2huZXNzICk7XG5cdCNlbmRpZlxuI2VuZGlmIiwKYW9tYXBfcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9BT01BUFxuXHR1bmlmb3JtIHNhbXBsZXIyRCBhb01hcDtcblx0dW5pZm9ybSBmbG9hdCBhb01hcEludGVuc2l0eTtcbiNlbmRpZiIsYmVnaW5fdmVydGV4OiJ2ZWMzIHRyYW5zZm9ybWVkIFx4M2QgdmVjMyggcG9zaXRpb24gKTsiLGJlZ2lubm9ybWFsX3ZlcnRleDoidmVjMyBvYmplY3ROb3JtYWwgXHgzZCB2ZWMzKCBub3JtYWwgKTtcbiNpZmRlZiBVU0VfVEFOR0VOVFxuXHR2ZWMzIG9iamVjdFRhbmdlbnQgXHgzZCB2ZWMzKCB0YW5nZW50Lnh5eiApO1xuI2VuZGlmIixic2RmczoidmVjMiBpbnRlZ3JhdGVTcGVjdWxhckJSREYoIGNvbnN0IGluIGZsb2F0IGRvdE5WLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MgKSB7XG5cdGNvbnN0IHZlYzQgYzAgXHgzZCB2ZWM0KCAtIDEsIC0gMC4wMjc1LCAtIDAuNTcyLCAwLjAyMiApO1xuXHRjb25zdCB2ZWM0IGMxIFx4M2QgdmVjNCggMSwgMC4wNDI1LCAxLjA0LCAtIDAuMDQgKTtcblx0dmVjNCByIFx4M2Qgcm91Z2huZXNzICogYzAgKyBjMTtcblx0ZmxvYXQgYTAwNCBceDNkIG1pbiggci54ICogci54LCBleHAyKCAtIDkuMjggKiBkb3ROViApICkgKiByLnggKyByLnk7XG5cdHJldHVybiB2ZWMyKCAtMS4wNCwgMS4wNCApICogYTAwNCArIHIuenc7XG59XG5mbG9hdCBwdW5jdHVhbExpZ2h0SW50ZW5zaXR5VG9JcnJhZGlhbmNlRmFjdG9yKCBjb25zdCBpbiBmbG9hdCBsaWdodERpc3RhbmNlLCBjb25zdCBpbiBmbG9hdCBjdXRvZmZEaXN0YW5jZSwgY29uc3QgaW4gZmxvYXQgZGVjYXlFeHBvbmVudCApIHtcbiNpZiBkZWZpbmVkICggUEhZU0lDQUxMWV9DT1JSRUNUX0xJR0hUUyApXG5cdGZsb2F0IGRpc3RhbmNlRmFsbG9mZiBceDNkIDEuMCAvIG1heCggcG93KCBsaWdodERpc3RhbmNlLCBkZWNheUV4cG9uZW50ICksIDAuMDEgKTtcblx0aWYoIGN1dG9mZkRpc3RhbmNlIFx4M2UgMC4wICkge1xuXHRcdGRpc3RhbmNlRmFsbG9mZiAqXHgzZCBwb3cyKCBzYXR1cmF0ZSggMS4wIC0gcG93NCggbGlnaHREaXN0YW5jZSAvIGN1dG9mZkRpc3RhbmNlICkgKSApO1xuXHR9XG5cdHJldHVybiBkaXN0YW5jZUZhbGxvZmY7XG4jZWxzZVxuXHRpZiggY3V0b2ZmRGlzdGFuY2UgXHgzZSAwLjAgXHgyNlx4MjYgZGVjYXlFeHBvbmVudCBceDNlIDAuMCApIHtcblx0XHRyZXR1cm4gcG93KCBzYXR1cmF0ZSggLWxpZ2h0RGlzdGFuY2UgLyBjdXRvZmZEaXN0YW5jZSArIDEuMCApLCBkZWNheUV4cG9uZW50ICk7XG5cdH1cblx0cmV0dXJuIDEuMDtcbiNlbmRpZlxufVxudmVjMyBCUkRGX0RpZmZ1c2VfTGFtYmVydCggY29uc3QgaW4gdmVjMyBkaWZmdXNlQ29sb3IgKSB7XG5cdHJldHVybiBSRUNJUFJPQ0FMX1BJICogZGlmZnVzZUNvbG9yO1xufVxudmVjMyBGX1NjaGxpY2soIGNvbnN0IGluIHZlYzMgc3BlY3VsYXJDb2xvciwgY29uc3QgaW4gZmxvYXQgZG90TEggKSB7XG5cdGZsb2F0IGZyZXNuZWwgXHgzZCBleHAyKCAoIC01LjU1NDczICogZG90TEggLSA2Ljk4MzE2ICkgKiBkb3RMSCApO1xuXHRyZXR1cm4gKCAxLjAgLSBzcGVjdWxhckNvbG9yICkgKiBmcmVzbmVsICsgc3BlY3VsYXJDb2xvcjtcbn1cbmZsb2F0IEdfR0dYX1NtaXRoKCBjb25zdCBpbiBmbG9hdCBhbHBoYSwgY29uc3QgaW4gZmxvYXQgZG90TkwsIGNvbnN0IGluIGZsb2F0IGRvdE5WICkge1xuXHRmbG9hdCBhMiBceDNkIHBvdzIoIGFscGhhICk7XG5cdGZsb2F0IGdsIFx4M2QgZG90TkwgKyBzcXJ0KCBhMiArICggMS4wIC0gYTIgKSAqIHBvdzIoIGRvdE5MICkgKTtcblx0ZmxvYXQgZ3YgXHgzZCBkb3ROViArIHNxcnQoIGEyICsgKCAxLjAgLSBhMiApICogcG93MiggZG90TlYgKSApO1xuXHRyZXR1cm4gMS4wIC8gKCBnbCAqIGd2ICk7XG59XG5mbG9hdCBHX0dHWF9TbWl0aENvcnJlbGF0ZWQoIGNvbnN0IGluIGZsb2F0IGFscGhhLCBjb25zdCBpbiBmbG9hdCBkb3ROTCwgY29uc3QgaW4gZmxvYXQgZG90TlYgKSB7XG5cdGZsb2F0IGEyIFx4M2QgcG93MiggYWxwaGEgKTtcblx0ZmxvYXQgZ3YgXHgzZCBkb3ROTCAqIHNxcnQoIGEyICsgKCAxLjAgLSBhMiApICogcG93MiggZG90TlYgKSApO1xuXHRmbG9hdCBnbCBceDNkIGRvdE5WICogc3FydCggYTIgKyAoIDEuMCAtIGEyICkgKiBwb3cyKCBkb3ROTCApICk7XG5cdHJldHVybiAwLjUgLyBtYXgoIGd2ICsgZ2wsIEVQU0lMT04gKTtcbn1cbmZsb2F0IERfR0dYKCBjb25zdCBpbiBmbG9hdCBhbHBoYSwgY29uc3QgaW4gZmxvYXQgZG90TkggKSB7XG5cdGZsb2F0IGEyIFx4M2QgcG93MiggYWxwaGEgKTtcblx0ZmxvYXQgZGVub20gXHgzZCBwb3cyKCBkb3ROSCApICogKCBhMiAtIDEuMCApICsgMS4wO1xuXHRyZXR1cm4gUkVDSVBST0NBTF9QSSAqIGEyIC8gcG93MiggZGVub20gKTtcbn1cbnZlYzMgQlJERl9TcGVjdWxhcl9HR1goIGNvbnN0IGluIEluY2lkZW50TGlnaHQgaW5jaWRlbnRMaWdodCwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gdmVjMyBzcGVjdWxhckNvbG9yLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MgKSB7XG5cdGZsb2F0IGFscGhhIFx4M2QgcG93Miggcm91Z2huZXNzICk7XG5cdHZlYzMgaGFsZkRpciBceDNkIG5vcm1hbGl6ZSggaW5jaWRlbnRMaWdodC5kaXJlY3Rpb24gKyBnZW9tZXRyeS52aWV3RGlyICk7XG5cdGZsb2F0IGRvdE5MIFx4M2Qgc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkubm9ybWFsLCBpbmNpZGVudExpZ2h0LmRpcmVjdGlvbiApICk7XG5cdGZsb2F0IGRvdE5WIFx4M2Qgc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkubm9ybWFsLCBnZW9tZXRyeS52aWV3RGlyICkgKTtcblx0ZmxvYXQgZG90TkggXHgzZCBzYXR1cmF0ZSggZG90KCBnZW9tZXRyeS5ub3JtYWwsIGhhbGZEaXIgKSApO1xuXHRmbG9hdCBkb3RMSCBceDNkIHNhdHVyYXRlKCBkb3QoIGluY2lkZW50TGlnaHQuZGlyZWN0aW9uLCBoYWxmRGlyICkgKTtcblx0dmVjMyBGIFx4M2QgRl9TY2hsaWNrKCBzcGVjdWxhckNvbG9yLCBkb3RMSCApO1xuXHRmbG9hdCBHIFx4M2QgR19HR1hfU21pdGhDb3JyZWxhdGVkKCBhbHBoYSwgZG90TkwsIGRvdE5WICk7XG5cdGZsb2F0IEQgXHgzZCBEX0dHWCggYWxwaGEsIGRvdE5IICk7XG5cdHJldHVybiBGICogKCBHICogRCApO1xufVxudmVjMiBMVENfVXYoIGNvbnN0IGluIHZlYzMgTiwgY29uc3QgaW4gdmVjMyBWLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MgKSB7XG5cdGNvbnN0IGZsb2F0IExVVF9TSVpFICBceDNkIDY0LjA7XG5cdGNvbnN0IGZsb2F0IExVVF9TQ0FMRSBceDNkICggTFVUX1NJWkUgLSAxLjAgKSAvIExVVF9TSVpFO1xuXHRjb25zdCBmbG9hdCBMVVRfQklBUyAgXHgzZCAwLjUgLyBMVVRfU0laRTtcblx0ZmxvYXQgZG90TlYgXHgzZCBzYXR1cmF0ZSggZG90KCBOLCBWICkgKTtcblx0dmVjMiB1diBceDNkIHZlYzIoIHJvdWdobmVzcywgc3FydCggMS4wIC0gZG90TlYgKSApO1xuXHR1diBceDNkIHV2ICogTFVUX1NDQUxFICsgTFVUX0JJQVM7XG5cdHJldHVybiB1djtcbn1cbmZsb2F0IExUQ19DbGlwcGVkU3BoZXJlRm9ybUZhY3RvciggY29uc3QgaW4gdmVjMyBmICkge1xuXHRmbG9hdCBsIFx4M2QgbGVuZ3RoKCBmICk7XG5cdHJldHVybiBtYXgoICggbCAqIGwgKyBmLnogKSAvICggbCArIDEuMCApLCAwLjAgKTtcbn1cbnZlYzMgTFRDX0VkZ2VWZWN0b3JGb3JtRmFjdG9yKCBjb25zdCBpbiB2ZWMzIHYxLCBjb25zdCBpbiB2ZWMzIHYyICkge1xuXHRmbG9hdCB4IFx4M2QgZG90KCB2MSwgdjIgKTtcblx0ZmxvYXQgeSBceDNkIGFicyggeCApO1xuXHRmbG9hdCBhIFx4M2QgMC44NTQzOTg1ICsgKCAwLjQ5NjUxNTUgKyAwLjAxNDUyMDYgKiB5ICkgKiB5O1xuXHRmbG9hdCBiIFx4M2QgMy40MTc1OTQwICsgKCA0LjE2MTY3MjQgKyB5ICkgKiB5O1xuXHRmbG9hdCB2IFx4M2QgYSAvIGI7XG5cdGZsb2F0IHRoZXRhX3NpbnRoZXRhIFx4M2QgKCB4IFx4M2UgMC4wICkgPyB2IDogMC41ICogaW52ZXJzZXNxcnQoIG1heCggMS4wIC0geCAqIHgsIDFlLTcgKSApIC0gdjtcblx0cmV0dXJuIGNyb3NzKCB2MSwgdjIgKSAqIHRoZXRhX3NpbnRoZXRhO1xufVxudmVjMyBMVENfRXZhbHVhdGUoIGNvbnN0IGluIHZlYzMgTiwgY29uc3QgaW4gdmVjMyBWLCBjb25zdCBpbiB2ZWMzIFAsIGNvbnN0IGluIG1hdDMgbUludiwgY29uc3QgaW4gdmVjMyByZWN0Q29vcmRzWyA0IF0gKSB7XG5cdHZlYzMgdjEgXHgzZCByZWN0Q29vcmRzWyAxIF0gLSByZWN0Q29vcmRzWyAwIF07XG5cdHZlYzMgdjIgXHgzZCByZWN0Q29vcmRzWyAzIF0gLSByZWN0Q29vcmRzWyAwIF07XG5cdHZlYzMgbGlnaHROb3JtYWwgXHgzZCBjcm9zcyggdjEsIHYyICk7XG5cdGlmKCBkb3QoIGxpZ2h0Tm9ybWFsLCBQIC0gcmVjdENvb3Jkc1sgMCBdICkgXHgzYyAwLjAgKSByZXR1cm4gdmVjMyggMC4wICk7XG5cdHZlYzMgVDEsIFQyO1xuXHRUMSBceDNkIG5vcm1hbGl6ZSggViAtIE4gKiBkb3QoIFYsIE4gKSApO1xuXHRUMiBceDNkIC0gY3Jvc3MoIE4sIFQxICk7XG5cdG1hdDMgbWF0IFx4M2QgbUludiAqIHRyYW5zcG9zZU1hdDMoIG1hdDMoIFQxLCBUMiwgTiApICk7XG5cdHZlYzMgY29vcmRzWyA0IF07XG5cdGNvb3Jkc1sgMCBdIFx4M2QgbWF0ICogKCByZWN0Q29vcmRzWyAwIF0gLSBQICk7XG5cdGNvb3Jkc1sgMSBdIFx4M2QgbWF0ICogKCByZWN0Q29vcmRzWyAxIF0gLSBQICk7XG5cdGNvb3Jkc1sgMiBdIFx4M2QgbWF0ICogKCByZWN0Q29vcmRzWyAyIF0gLSBQICk7XG5cdGNvb3Jkc1sgMyBdIFx4M2QgbWF0ICogKCByZWN0Q29vcmRzWyAzIF0gLSBQICk7XG5cdGNvb3Jkc1sgMCBdIFx4M2Qgbm9ybWFsaXplKCBjb29yZHNbIDAgXSApO1xuXHRjb29yZHNbIDEgXSBceDNkIG5vcm1hbGl6ZSggY29vcmRzWyAxIF0gKTtcblx0Y29vcmRzWyAyIF0gXHgzZCBub3JtYWxpemUoIGNvb3Jkc1sgMiBdICk7XG5cdGNvb3Jkc1sgMyBdIFx4M2Qgbm9ybWFsaXplKCBjb29yZHNbIDMgXSApO1xuXHR2ZWMzIHZlY3RvckZvcm1GYWN0b3IgXHgzZCB2ZWMzKCAwLjAgKTtcblx0dmVjdG9yRm9ybUZhY3RvciArXHgzZCBMVENfRWRnZVZlY3RvckZvcm1GYWN0b3IoIGNvb3Jkc1sgMCBdLCBjb29yZHNbIDEgXSApO1xuXHR2ZWN0b3JGb3JtRmFjdG9yICtceDNkIExUQ19FZGdlVmVjdG9yRm9ybUZhY3RvciggY29vcmRzWyAxIF0sIGNvb3Jkc1sgMiBdICk7XG5cdHZlY3RvckZvcm1GYWN0b3IgK1x4M2QgTFRDX0VkZ2VWZWN0b3JGb3JtRmFjdG9yKCBjb29yZHNbIDIgXSwgY29vcmRzWyAzIF0gKTtcblx0dmVjdG9yRm9ybUZhY3RvciArXHgzZCBMVENfRWRnZVZlY3RvckZvcm1GYWN0b3IoIGNvb3Jkc1sgMyBdLCBjb29yZHNbIDAgXSApO1xuXHRmbG9hdCByZXN1bHQgXHgzZCBMVENfQ2xpcHBlZFNwaGVyZUZvcm1GYWN0b3IoIHZlY3RvckZvcm1GYWN0b3IgKTtcblx0cmV0dXJuIHZlYzMoIHJlc3VsdCApO1xufVxudmVjMyBCUkRGX1NwZWN1bGFyX0dHWF9FbnZpcm9ubWVudCggY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gdmVjMyBzcGVjdWxhckNvbG9yLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MgKSB7XG5cdGZsb2F0IGRvdE5WIFx4M2Qgc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkubm9ybWFsLCBnZW9tZXRyeS52aWV3RGlyICkgKTtcblx0dmVjMiBicmRmIFx4M2QgaW50ZWdyYXRlU3BlY3VsYXJCUkRGKCBkb3ROViwgcm91Z2huZXNzICk7XG5cdHJldHVybiBzcGVjdWxhckNvbG9yICogYnJkZi54ICsgYnJkZi55O1xufVxudm9pZCBCUkRGX1NwZWN1bGFyX011bHRpc2NhdHRlcmluZ19FbnZpcm9ubWVudCggY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gdmVjMyBzcGVjdWxhckNvbG9yLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MsIGlub3V0IHZlYzMgc2luZ2xlU2NhdHRlciwgaW5vdXQgdmVjMyBtdWx0aVNjYXR0ZXIgKSB7XG5cdGZsb2F0IGRvdE5WIFx4M2Qgc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkubm9ybWFsLCBnZW9tZXRyeS52aWV3RGlyICkgKTtcblx0dmVjMyBGIFx4M2QgRl9TY2hsaWNrKCBzcGVjdWxhckNvbG9yLCBkb3ROViApO1xuXHR2ZWMyIGJyZGYgXHgzZCBpbnRlZ3JhdGVTcGVjdWxhckJSREYoIGRvdE5WLCByb3VnaG5lc3MgKTtcblx0dmVjMyBGc3NFc3MgXHgzZCBGICogYnJkZi54ICsgYnJkZi55O1xuXHRmbG9hdCBFc3MgXHgzZCBicmRmLnggKyBicmRmLnk7XG5cdGZsb2F0IEVtcyBceDNkIDEuMCAtIEVzcztcblx0dmVjMyBGYXZnIFx4M2Qgc3BlY3VsYXJDb2xvciArICggMS4wIC0gc3BlY3VsYXJDb2xvciApICogMC4wNDc2MTk7XHR2ZWMzIEZtcyBceDNkIEZzc0VzcyAqIEZhdmcgLyAoIDEuMCAtIEVtcyAqIEZhdmcgKTtcblx0c2luZ2xlU2NhdHRlciArXHgzZCBGc3NFc3M7XG5cdG11bHRpU2NhdHRlciArXHgzZCBGbXMgKiBFbXM7XG59XG5mbG9hdCBHX0JsaW5uUGhvbmdfSW1wbGljaXQoICkge1xuXHRyZXR1cm4gMC4yNTtcbn1cbmZsb2F0IERfQmxpbm5QaG9uZyggY29uc3QgaW4gZmxvYXQgc2hpbmluZXNzLCBjb25zdCBpbiBmbG9hdCBkb3ROSCApIHtcblx0cmV0dXJuIFJFQ0lQUk9DQUxfUEkgKiAoIHNoaW5pbmVzcyAqIDAuNSArIDEuMCApICogcG93KCBkb3ROSCwgc2hpbmluZXNzICk7XG59XG52ZWMzIEJSREZfU3BlY3VsYXJfQmxpbm5QaG9uZyggY29uc3QgaW4gSW5jaWRlbnRMaWdodCBpbmNpZGVudExpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiB2ZWMzIHNwZWN1bGFyQ29sb3IsIGNvbnN0IGluIGZsb2F0IHNoaW5pbmVzcyApIHtcblx0dmVjMyBoYWxmRGlyIFx4M2Qgbm9ybWFsaXplKCBpbmNpZGVudExpZ2h0LmRpcmVjdGlvbiArIGdlb21ldHJ5LnZpZXdEaXIgKTtcblx0ZmxvYXQgZG90TkggXHgzZCBzYXR1cmF0ZSggZG90KCBnZW9tZXRyeS5ub3JtYWwsIGhhbGZEaXIgKSApO1xuXHRmbG9hdCBkb3RMSCBceDNkIHNhdHVyYXRlKCBkb3QoIGluY2lkZW50TGlnaHQuZGlyZWN0aW9uLCBoYWxmRGlyICkgKTtcblx0dmVjMyBGIFx4M2QgRl9TY2hsaWNrKCBzcGVjdWxhckNvbG9yLCBkb3RMSCApO1xuXHRmbG9hdCBHIFx4M2QgR19CbGlublBob25nX0ltcGxpY2l0KCApO1xuXHRmbG9hdCBEIFx4M2QgRF9CbGlublBob25nKCBzaGluaW5lc3MsIGRvdE5IICk7XG5cdHJldHVybiBGICogKCBHICogRCApO1xufVxuZmxvYXQgR0dYUm91Z2huZXNzVG9CbGlubkV4cG9uZW50KCBjb25zdCBpbiBmbG9hdCBnZ3hSb3VnaG5lc3MgKSB7XG5cdHJldHVybiAoIDIuMCAvIHBvdzIoIGdneFJvdWdobmVzcyArIDAuMDAwMSApIC0gMi4wICk7XG59XG5mbG9hdCBCbGlubkV4cG9uZW50VG9HR1hSb3VnaG5lc3MoIGNvbnN0IGluIGZsb2F0IGJsaW5uRXhwb25lbnQgKSB7XG5cdHJldHVybiBzcXJ0KCAyLjAgLyAoIGJsaW5uRXhwb25lbnQgKyAyLjAgKSApO1xufSIsCmJ1bXBtYXBfcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9CVU1QTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIGJ1bXBNYXA7XG5cdHVuaWZvcm0gZmxvYXQgYnVtcFNjYWxlO1xuXHR2ZWMyIGRIZHh5X2Z3ZCgpIHtcblx0XHR2ZWMyIGRTVGR4IFx4M2QgZEZkeCggdlV2ICk7XG5cdFx0dmVjMiBkU1RkeSBceDNkIGRGZHkoIHZVdiApO1xuXHRcdGZsb2F0IEhsbCBceDNkIGJ1bXBTY2FsZSAqIHRleHR1cmUyRCggYnVtcE1hcCwgdlV2ICkueDtcblx0XHRmbG9hdCBkQnggXHgzZCBidW1wU2NhbGUgKiB0ZXh0dXJlMkQoIGJ1bXBNYXAsIHZVdiArIGRTVGR4ICkueCAtIEhsbDtcblx0XHRmbG9hdCBkQnkgXHgzZCBidW1wU2NhbGUgKiB0ZXh0dXJlMkQoIGJ1bXBNYXAsIHZVdiArIGRTVGR5ICkueCAtIEhsbDtcblx0XHRyZXR1cm4gdmVjMiggZEJ4LCBkQnkgKTtcblx0fVxuXHR2ZWMzIHBlcnR1cmJOb3JtYWxBcmIoIHZlYzMgc3VyZl9wb3MsIHZlYzMgc3VyZl9ub3JtLCB2ZWMyIGRIZHh5ICkge1xuXHRcdHZlYzMgdlNpZ21hWCBceDNkIHZlYzMoIGRGZHgoIHN1cmZfcG9zLnggKSwgZEZkeCggc3VyZl9wb3MueSApLCBkRmR4KCBzdXJmX3Bvcy56ICkgKTtcblx0XHR2ZWMzIHZTaWdtYVkgXHgzZCB2ZWMzKCBkRmR5KCBzdXJmX3Bvcy54ICksIGRGZHkoIHN1cmZfcG9zLnkgKSwgZEZkeSggc3VyZl9wb3MueiApICk7XG5cdFx0dmVjMyB2TiBceDNkIHN1cmZfbm9ybTtcblx0XHR2ZWMzIFIxIFx4M2QgY3Jvc3MoIHZTaWdtYVksIHZOICk7XG5cdFx0dmVjMyBSMiBceDNkIGNyb3NzKCB2TiwgdlNpZ21hWCApO1xuXHRcdGZsb2F0IGZEZXQgXHgzZCBkb3QoIHZTaWdtYVgsIFIxICk7XG5cdFx0ZkRldCAqXHgzZCAoIGZsb2F0KCBnbF9Gcm9udEZhY2luZyApICogMi4wIC0gMS4wICk7XG5cdFx0dmVjMyB2R3JhZCBceDNkIHNpZ24oIGZEZXQgKSAqICggZEhkeHkueCAqIFIxICsgZEhkeHkueSAqIFIyICk7XG5cdFx0cmV0dXJuIG5vcm1hbGl6ZSggYWJzKCBmRGV0ICkgKiBzdXJmX25vcm0gLSB2R3JhZCApO1xuXHR9XG4jZW5kaWYiLApjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ6IiNpZiBOVU1fQ0xJUFBJTkdfUExBTkVTIFx4M2UgMFxuXHR2ZWM0IHBsYW5lO1xuXHQjcHJhZ21hIHVucm9sbF9sb29wXG5cdGZvciAoIGludCBpIFx4M2QgMDsgaSBceDNjIFVOSU9OX0NMSVBQSU5HX1BMQU5FUzsgaSArKyApIHtcblx0XHRwbGFuZSBceDNkIGNsaXBwaW5nUGxhbmVzWyBpIF07XG5cdFx0aWYgKCBkb3QoIHZWaWV3UG9zaXRpb24sIHBsYW5lLnh5eiApIFx4M2UgcGxhbmUudyApIGRpc2NhcmQ7XG5cdH1cblx0I2lmIFVOSU9OX0NMSVBQSU5HX1BMQU5FUyBceDNjIE5VTV9DTElQUElOR19QTEFORVNcblx0XHRib29sIGNsaXBwZWQgXHgzZCB0cnVlO1xuXHRcdCNwcmFnbWEgdW5yb2xsX2xvb3Bcblx0XHRmb3IgKCBpbnQgaSBceDNkIFVOSU9OX0NMSVBQSU5HX1BMQU5FUzsgaSBceDNjIE5VTV9DTElQUElOR19QTEFORVM7IGkgKysgKSB7XG5cdFx0XHRwbGFuZSBceDNkIGNsaXBwaW5nUGxhbmVzWyBpIF07XG5cdFx0XHRjbGlwcGVkIFx4M2QgKCBkb3QoIHZWaWV3UG9zaXRpb24sIHBsYW5lLnh5eiApIFx4M2UgcGxhbmUudyApIFx4MjZceDI2IGNsaXBwZWQ7XG5cdFx0fVxuXHRcdGlmICggY2xpcHBlZCApIGRpc2NhcmQ7XG5cdCNlbmRpZlxuI2VuZGlmIiwKY2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ6IiNpZiBOVU1fQ0xJUFBJTkdfUExBTkVTIFx4M2UgMFxuXHQjaWYgISBkZWZpbmVkKCBQSFlTSUNBTCApIFx4MjZceDI2ICEgZGVmaW5lZCggUEhPTkcgKSBceDI2XHgyNiAhIGRlZmluZWQoIE1BVENBUCApXG5cdFx0dmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247XG5cdCNlbmRpZlxuXHR1bmlmb3JtIHZlYzQgY2xpcHBpbmdQbGFuZXNbIE5VTV9DTElQUElOR19QTEFORVMgXTtcbiNlbmRpZiIsY2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4OiIjaWYgTlVNX0NMSVBQSU5HX1BMQU5FUyBceDNlIDAgXHgyNlx4MjYgISBkZWZpbmVkKCBQSFlTSUNBTCApIFx4MjZceDI2ICEgZGVmaW5lZCggUEhPTkcgKSBceDI2XHgyNiAhIGRlZmluZWQoIE1BVENBUCApXG5cdHZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uO1xuI2VuZGlmIixjbGlwcGluZ19wbGFuZXNfdmVydGV4OiIjaWYgTlVNX0NMSVBQSU5HX1BMQU5FUyBceDNlIDAgXHgyNlx4MjYgISBkZWZpbmVkKCBQSFlTSUNBTCApIFx4MjZceDI2ICEgZGVmaW5lZCggUEhPTkcgKSBceDI2XHgyNiAhIGRlZmluZWQoIE1BVENBUCApXG5cdHZWaWV3UG9zaXRpb24gXHgzZCAtIG12UG9zaXRpb24ueHl6O1xuI2VuZGlmIiwKY29sb3JfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfQ09MT1Jcblx0ZGlmZnVzZUNvbG9yLnJnYiAqXHgzZCB2Q29sb3I7XG4jZW5kaWYiLGNvbG9yX3BhcnNfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfQ09MT1Jcblx0dmFyeWluZyB2ZWMzIHZDb2xvcjtcbiNlbmRpZiIsY29sb3JfcGFyc192ZXJ0ZXg6IiNpZmRlZiBVU0VfQ09MT1Jcblx0dmFyeWluZyB2ZWMzIHZDb2xvcjtcbiNlbmRpZiIsY29sb3JfdmVydGV4OiIjaWZkZWYgVVNFX0NPTE9SXG5cdHZDb2xvci54eXogXHgzZCBjb2xvci54eXo7XG4jZW5kaWYiLGNvbW1vbjoiI2RlZmluZSBQSSAzLjE0MTU5MjY1MzU5XG4jZGVmaW5lIFBJMiA2LjI4MzE4NTMwNzE4XG4jZGVmaW5lIFBJX0hBTEYgMS41NzA3OTYzMjY3OTQ5XG4jZGVmaW5lIFJFQ0lQUk9DQUxfUEkgMC4zMTgzMDk4ODYxOFxuI2RlZmluZSBSRUNJUFJPQ0FMX1BJMiAwLjE1OTE1NDk0XG4jZGVmaW5lIExPRzIgMS40NDI2OTVcbiNkZWZpbmUgRVBTSUxPTiAxZS02XG4jZGVmaW5lIHNhdHVyYXRlKGEpIGNsYW1wKCBhLCAwLjAsIDEuMCApXG4jZGVmaW5lIHdoaXRlQ29tcGxpbWVudChhKSAoIDEuMCAtIHNhdHVyYXRlKCBhICkgKVxuZmxvYXQgcG93MiggY29uc3QgaW4gZmxvYXQgeCApIHsgcmV0dXJuIHgqeDsgfVxuZmxvYXQgcG93MyggY29uc3QgaW4gZmxvYXQgeCApIHsgcmV0dXJuIHgqeCp4OyB9XG5mbG9hdCBwb3c0KCBjb25zdCBpbiBmbG9hdCB4ICkgeyBmbG9hdCB4MiBceDNkIHgqeDsgcmV0dXJuIHgyKngyOyB9XG5mbG9hdCBhdmVyYWdlKCBjb25zdCBpbiB2ZWMzIGNvbG9yICkgeyByZXR1cm4gZG90KCBjb2xvciwgdmVjMyggMC4zMzMzICkgKTsgfVxuaGlnaHAgZmxvYXQgcmFuZCggY29uc3QgaW4gdmVjMiB1diApIHtcblx0Y29uc3QgaGlnaHAgZmxvYXQgYSBceDNkIDEyLjk4OTgsIGIgXHgzZCA3OC4yMzMsIGMgXHgzZCA0Mzc1OC41NDUzO1xuXHRoaWdocCBmbG9hdCBkdCBceDNkIGRvdCggdXYueHksIHZlYzIoIGEsYiApICksIHNuIFx4M2QgbW9kKCBkdCwgUEkgKTtcblx0cmV0dXJuIGZyYWN0KHNpbihzbikgKiBjKTtcbn1cbnN0cnVjdCBJbmNpZGVudExpZ2h0IHtcblx0dmVjMyBjb2xvcjtcblx0dmVjMyBkaXJlY3Rpb247XG5cdGJvb2wgdmlzaWJsZTtcbn07XG5zdHJ1Y3QgUmVmbGVjdGVkTGlnaHQge1xuXHR2ZWMzIGRpcmVjdERpZmZ1c2U7XG5cdHZlYzMgZGlyZWN0U3BlY3VsYXI7XG5cdHZlYzMgaW5kaXJlY3REaWZmdXNlO1xuXHR2ZWMzIGluZGlyZWN0U3BlY3VsYXI7XG59O1xuc3RydWN0IEdlb21ldHJpY0NvbnRleHQge1xuXHR2ZWMzIHBvc2l0aW9uO1xuXHR2ZWMzIG5vcm1hbDtcblx0dmVjMyB2aWV3RGlyO1xufTtcbnZlYzMgdHJhbnNmb3JtRGlyZWN0aW9uKCBpbiB2ZWMzIGRpciwgaW4gbWF0NCBtYXRyaXggKSB7XG5cdHJldHVybiBub3JtYWxpemUoICggbWF0cml4ICogdmVjNCggZGlyLCAwLjAgKSApLnh5eiApO1xufVxudmVjMyBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCBpbiB2ZWMzIGRpciwgaW4gbWF0NCBtYXRyaXggKSB7XG5cdHJldHVybiBub3JtYWxpemUoICggdmVjNCggZGlyLCAwLjAgKSAqIG1hdHJpeCApLnh5eiApO1xufVxudmVjMyBwcm9qZWN0T25QbGFuZShpbiB2ZWMzIHBvaW50LCBpbiB2ZWMzIHBvaW50T25QbGFuZSwgaW4gdmVjMyBwbGFuZU5vcm1hbCApIHtcblx0ZmxvYXQgZGlzdGFuY2UgXHgzZCBkb3QoIHBsYW5lTm9ybWFsLCBwb2ludCAtIHBvaW50T25QbGFuZSApO1xuXHRyZXR1cm4gLSBkaXN0YW5jZSAqIHBsYW5lTm9ybWFsICsgcG9pbnQ7XG59XG5mbG9hdCBzaWRlT2ZQbGFuZSggaW4gdmVjMyBwb2ludCwgaW4gdmVjMyBwb2ludE9uUGxhbmUsIGluIHZlYzMgcGxhbmVOb3JtYWwgKSB7XG5cdHJldHVybiBzaWduKCBkb3QoIHBvaW50IC0gcG9pbnRPblBsYW5lLCBwbGFuZU5vcm1hbCApICk7XG59XG52ZWMzIGxpbmVQbGFuZUludGVyc2VjdCggaW4gdmVjMyBwb2ludE9uTGluZSwgaW4gdmVjMyBsaW5lRGlyZWN0aW9uLCBpbiB2ZWMzIHBvaW50T25QbGFuZSwgaW4gdmVjMyBwbGFuZU5vcm1hbCApIHtcblx0cmV0dXJuIGxpbmVEaXJlY3Rpb24gKiAoIGRvdCggcGxhbmVOb3JtYWwsIHBvaW50T25QbGFuZSAtIHBvaW50T25MaW5lICkgLyBkb3QoIHBsYW5lTm9ybWFsLCBsaW5lRGlyZWN0aW9uICkgKSArIHBvaW50T25MaW5lO1xufVxubWF0MyB0cmFuc3Bvc2VNYXQzKCBjb25zdCBpbiBtYXQzIG0gKSB7XG5cdG1hdDMgdG1wO1xuXHR0bXBbIDAgXSBceDNkIHZlYzMoIG1bIDAgXS54LCBtWyAxIF0ueCwgbVsgMiBdLnggKTtcblx0dG1wWyAxIF0gXHgzZCB2ZWMzKCBtWyAwIF0ueSwgbVsgMSBdLnksIG1bIDIgXS55ICk7XG5cdHRtcFsgMiBdIFx4M2QgdmVjMyggbVsgMCBdLnosIG1bIDEgXS56LCBtWyAyIF0ueiApO1xuXHRyZXR1cm4gdG1wO1xufVxuZmxvYXQgbGluZWFyVG9SZWxhdGl2ZUx1bWluYW5jZSggY29uc3QgaW4gdmVjMyBjb2xvciApIHtcblx0dmVjMyB3ZWlnaHRzIFx4M2QgdmVjMyggMC4yMTI2LCAwLjcxNTIsIDAuMDcyMiApO1xuXHRyZXR1cm4gZG90KCB3ZWlnaHRzLCBjb2xvci5yZ2IgKTtcbn0iLApjdWJlX3V2X3JlZmxlY3Rpb25fZnJhZ21lbnQ6IiNpZmRlZiBFTlZNQVBfVFlQRV9DVUJFX1VWXG4jZGVmaW5lIGN1YmVVVl90ZXh0dXJlU2l6ZSAoMTAyNC4wKVxuaW50IGdldEZhY2VGcm9tRGlyZWN0aW9uKHZlYzMgZGlyZWN0aW9uKSB7XG5cdHZlYzMgYWJzRGlyZWN0aW9uIFx4M2QgYWJzKGRpcmVjdGlvbik7XG5cdGludCBmYWNlIFx4M2QgLTE7XG5cdGlmKCBhYnNEaXJlY3Rpb24ueCBceDNlIGFic0RpcmVjdGlvbi56ICkge1xuXHRcdGlmKGFic0RpcmVjdGlvbi54IFx4M2UgYWJzRGlyZWN0aW9uLnkgKVxuXHRcdFx0ZmFjZSBceDNkIGRpcmVjdGlvbi54IFx4M2UgMC4wID8gMCA6IDM7XG5cdFx0ZWxzZVxuXHRcdFx0ZmFjZSBceDNkIGRpcmVjdGlvbi55IFx4M2UgMC4wID8gMSA6IDQ7XG5cdH1cblx0ZWxzZSB7XG5cdFx0aWYoYWJzRGlyZWN0aW9uLnogXHgzZSBhYnNEaXJlY3Rpb24ueSApXG5cdFx0XHRmYWNlIFx4M2QgZGlyZWN0aW9uLnogXHgzZSAwLjAgPyAyIDogNTtcblx0XHRlbHNlXG5cdFx0XHRmYWNlIFx4M2QgZGlyZWN0aW9uLnkgXHgzZSAwLjAgPyAxIDogNDtcblx0fVxuXHRyZXR1cm4gZmFjZTtcbn1cbiNkZWZpbmUgY3ViZVVWX21heExvZHMxICAobG9nMihjdWJlVVZfdGV4dHVyZVNpemUqMC4yNSkgLSAxLjApXG4jZGVmaW5lIGN1YmVVVl9yYW5nZUNsYW1wIChleHAyKCg2LjAgLSAxLjApICogMi4wKSlcbnZlYzIgTWlwTGV2ZWxJbmZvKCB2ZWMzIHZlYywgZmxvYXQgcm91Z2huZXNzTGV2ZWwsIGZsb2F0IHJvdWdobmVzcyApIHtcblx0ZmxvYXQgc2NhbGUgXHgzZCBleHAyKGN1YmVVVl9tYXhMb2RzMSAtIHJvdWdobmVzc0xldmVsKTtcblx0ZmxvYXQgZHhSb3VnaG5lc3MgXHgzZCBkRmR4KHJvdWdobmVzcyk7XG5cdGZsb2F0IGR5Um91Z2huZXNzIFx4M2QgZEZkeShyb3VnaG5lc3MpO1xuXHR2ZWMzIGR4IFx4M2QgZEZkeCggdmVjICogc2NhbGUgKiBkeFJvdWdobmVzcyApO1xuXHR2ZWMzIGR5IFx4M2QgZEZkeSggdmVjICogc2NhbGUgKiBkeVJvdWdobmVzcyApO1xuXHRmbG9hdCBkIFx4M2QgbWF4KCBkb3QoIGR4LCBkeCApLCBkb3QoIGR5LCBkeSApICk7XG5cdGQgXHgzZCBjbGFtcChkLCAxLjAsIGN1YmVVVl9yYW5nZUNsYW1wKTtcblx0ZmxvYXQgbWlwTGV2ZWwgXHgzZCAwLjUgKiBsb2cyKGQpO1xuXHRyZXR1cm4gdmVjMihmbG9vcihtaXBMZXZlbCksIGZyYWN0KG1pcExldmVsKSk7XG59XG4jZGVmaW5lIGN1YmVVVl9tYXhMb2RzMiAobG9nMihjdWJlVVZfdGV4dHVyZVNpemUqMC4yNSkgLSAyLjApXG4jZGVmaW5lIGN1YmVVVl9yY3BUZXh0dXJlU2l6ZSAoMS4wIC8gY3ViZVVWX3RleHR1cmVTaXplKVxudmVjMiBnZXRDdWJlVVYodmVjMyBkaXJlY3Rpb24sIGZsb2F0IHJvdWdobmVzc0xldmVsLCBmbG9hdCBtaXBMZXZlbCkge1xuXHRtaXBMZXZlbCBceDNkIHJvdWdobmVzc0xldmVsIFx4M2UgY3ViZVVWX21heExvZHMyIC0gMy4wID8gMC4wIDogbWlwTGV2ZWw7XG5cdGZsb2F0IGEgXHgzZCAxNi4wICogY3ViZVVWX3JjcFRleHR1cmVTaXplO1xuXHR2ZWMyIGV4cDJfcGFja2VkIFx4M2QgZXhwMiggdmVjMiggcm91Z2huZXNzTGV2ZWwsIG1pcExldmVsICkgKTtcblx0dmVjMiByY3BfZXhwMl9wYWNrZWQgXHgzZCB2ZWMyKCAxLjAgKSAvIGV4cDJfcGFja2VkO1xuXHRmbG9hdCBwb3dTY2FsZSBceDNkIGV4cDJfcGFja2VkLnggKiBleHAyX3BhY2tlZC55O1xuXHRmbG9hdCBzY2FsZSBceDNkIHJjcF9leHAyX3BhY2tlZC54ICogcmNwX2V4cDJfcGFja2VkLnkgKiAwLjI1O1xuXHRmbG9hdCBtaXBPZmZzZXQgXHgzZCAwLjc1KigxLjAgLSByY3BfZXhwMl9wYWNrZWQueSkgKiByY3BfZXhwMl9wYWNrZWQueDtcblx0Ym9vbCBiUmVzIFx4M2QgbWlwTGV2ZWwgXHgzZFx4M2QgMC4wO1xuXHRzY2FsZSBceDNkICBiUmVzIFx4MjZceDI2IChzY2FsZSBceDNjIGEpID8gYSA6IHNjYWxlO1xuXHR2ZWMzIHI7XG5cdHZlYzIgb2Zmc2V0O1xuXHRpbnQgZmFjZSBceDNkIGdldEZhY2VGcm9tRGlyZWN0aW9uKGRpcmVjdGlvbik7XG5cdGZsb2F0IHJjcFBvd1NjYWxlIFx4M2QgMS4wIC8gcG93U2NhbGU7XG5cdGlmKCBmYWNlIFx4M2RceDNkIDApIHtcblx0XHRyIFx4M2QgdmVjMyhkaXJlY3Rpb24ueCwgLWRpcmVjdGlvbi56LCBkaXJlY3Rpb24ueSk7XG5cdFx0b2Zmc2V0IFx4M2QgdmVjMigwLjArbWlwT2Zmc2V0LDAuNzUgKiByY3BQb3dTY2FsZSk7XG5cdFx0b2Zmc2V0LnkgXHgzZCBiUmVzIFx4MjZceDI2IChvZmZzZXQueSBceDNjIDIuMCphKSA/IGEgOiBvZmZzZXQueTtcblx0fVxuXHRlbHNlIGlmKCBmYWNlIFx4M2RceDNkIDEpIHtcblx0XHRyIFx4M2QgdmVjMyhkaXJlY3Rpb24ueSwgZGlyZWN0aW9uLngsIGRpcmVjdGlvbi56KTtcblx0XHRvZmZzZXQgXHgzZCB2ZWMyKHNjYWxlK21pcE9mZnNldCwgMC43NSAqIHJjcFBvd1NjYWxlKTtcblx0XHRvZmZzZXQueSBceDNkIGJSZXMgXHgyNlx4MjYgKG9mZnNldC55IFx4M2MgMi4wKmEpID8gYSA6IG9mZnNldC55O1xuXHR9XG5cdGVsc2UgaWYoIGZhY2UgXHgzZFx4M2QgMikge1xuXHRcdHIgXHgzZCB2ZWMzKGRpcmVjdGlvbi56LCBkaXJlY3Rpb24ueCwgZGlyZWN0aW9uLnkpO1xuXHRcdG9mZnNldCBceDNkIHZlYzIoMi4wKnNjYWxlK21pcE9mZnNldCwgMC43NSAqIHJjcFBvd1NjYWxlKTtcblx0XHRvZmZzZXQueSBceDNkIGJSZXMgXHgyNlx4MjYgKG9mZnNldC55IFx4M2MgMi4wKmEpID8gYSA6IG9mZnNldC55O1xuXHR9XG5cdGVsc2UgaWYoIGZhY2UgXHgzZFx4M2QgMykge1xuXHRcdHIgXHgzZCB2ZWMzKGRpcmVjdGlvbi54LCBkaXJlY3Rpb24ueiwgZGlyZWN0aW9uLnkpO1xuXHRcdG9mZnNldCBceDNkIHZlYzIoMC4wK21pcE9mZnNldCwwLjUgKiByY3BQb3dTY2FsZSk7XG5cdFx0b2Zmc2V0LnkgXHgzZCBiUmVzIFx4MjZceDI2IChvZmZzZXQueSBceDNjIDIuMCphKSA/IDAuMCA6IG9mZnNldC55O1xuXHR9XG5cdGVsc2UgaWYoIGZhY2UgXHgzZFx4M2QgNCkge1xuXHRcdHIgXHgzZCB2ZWMzKGRpcmVjdGlvbi55LCBkaXJlY3Rpb24ueCwgLWRpcmVjdGlvbi56KTtcblx0XHRvZmZzZXQgXHgzZCB2ZWMyKHNjYWxlK21pcE9mZnNldCwgMC41ICogcmNwUG93U2NhbGUpO1xuXHRcdG9mZnNldC55IFx4M2QgYlJlcyBceDI2XHgyNiAob2Zmc2V0LnkgXHgzYyAyLjAqYSkgPyAwLjAgOiBvZmZzZXQueTtcblx0fVxuXHRlbHNlIHtcblx0XHRyIFx4M2QgdmVjMyhkaXJlY3Rpb24ueiwgLWRpcmVjdGlvbi54LCBkaXJlY3Rpb24ueSk7XG5cdFx0b2Zmc2V0IFx4M2QgdmVjMigyLjAqc2NhbGUrbWlwT2Zmc2V0LCAwLjUgKiByY3BQb3dTY2FsZSk7XG5cdFx0b2Zmc2V0LnkgXHgzZCBiUmVzIFx4MjZceDI2IChvZmZzZXQueSBceDNjIDIuMCphKSA/IDAuMCA6IG9mZnNldC55O1xuXHR9XG5cdHIgXHgzZCBub3JtYWxpemUocik7XG5cdGZsb2F0IHRleGVsT2Zmc2V0IFx4M2QgMC41ICogY3ViZVVWX3JjcFRleHR1cmVTaXplO1xuXHR2ZWMyIHMgXHgzZCAoIHIueXogLyBhYnMoIHIueCApICsgdmVjMiggMS4wICkgKSAqIDAuNTtcblx0dmVjMiBiYXNlIFx4M2Qgb2Zmc2V0ICsgdmVjMiggdGV4ZWxPZmZzZXQgKTtcblx0cmV0dXJuIGJhc2UgKyBzICogKCBzY2FsZSAtIDIuMCAqIHRleGVsT2Zmc2V0ICk7XG59XG4jZGVmaW5lIGN1YmVVVl9tYXhMb2RzMyAobG9nMihjdWJlVVZfdGV4dHVyZVNpemUqMC4yNSkgLSAzLjApXG52ZWM0IHRleHR1cmVDdWJlVVYoIHNhbXBsZXIyRCBlbnZNYXAsIHZlYzMgcmVmbGVjdGVkRGlyZWN0aW9uLCBmbG9hdCByb3VnaG5lc3MgKSB7XG5cdGZsb2F0IHJvdWdobmVzc1ZhbCBceDNkIHJvdWdobmVzcyogY3ViZVVWX21heExvZHMzO1xuXHRmbG9hdCByMSBceDNkIGZsb29yKHJvdWdobmVzc1ZhbCk7XG5cdGZsb2F0IHIyIFx4M2QgcjEgKyAxLjA7XG5cdGZsb2F0IHQgXHgzZCBmcmFjdChyb3VnaG5lc3NWYWwpO1xuXHR2ZWMyIG1pcEluZm8gXHgzZCBNaXBMZXZlbEluZm8ocmVmbGVjdGVkRGlyZWN0aW9uLCByMSwgcm91Z2huZXNzKTtcblx0ZmxvYXQgcyBceDNkIG1pcEluZm8ueTtcblx0ZmxvYXQgbGV2ZWwwIFx4M2QgbWlwSW5mby54O1xuXHRmbG9hdCBsZXZlbDEgXHgzZCBsZXZlbDAgKyAxLjA7XG5cdGxldmVsMSBceDNkIGxldmVsMSBceDNlIDUuMCA/IDUuMCA6IGxldmVsMTtcblx0bGV2ZWwwICtceDNkIG1pbiggZmxvb3IoIHMgKyAwLjUgKSwgNS4wICk7XG5cdHZlYzIgdXZfMTAgXHgzZCBnZXRDdWJlVVYocmVmbGVjdGVkRGlyZWN0aW9uLCByMSwgbGV2ZWwwKTtcblx0dmVjNCBjb2xvcjEwIFx4M2QgZW52TWFwVGV4ZWxUb0xpbmVhcih0ZXh0dXJlMkQoZW52TWFwLCB1dl8xMCkpO1xuXHR2ZWMyIHV2XzIwIFx4M2QgZ2V0Q3ViZVVWKHJlZmxlY3RlZERpcmVjdGlvbiwgcjIsIGxldmVsMCk7XG5cdHZlYzQgY29sb3IyMCBceDNkIGVudk1hcFRleGVsVG9MaW5lYXIodGV4dHVyZTJEKGVudk1hcCwgdXZfMjApKTtcblx0dmVjNCByZXN1bHQgXHgzZCBtaXgoY29sb3IxMCwgY29sb3IyMCwgdCk7XG5cdHJldHVybiB2ZWM0KHJlc3VsdC5yZ2IsIDEuMCk7XG59XG4jZW5kaWYiLApkZWZhdWx0bm9ybWFsX3ZlcnRleDoidmVjMyB0cmFuc2Zvcm1lZE5vcm1hbCBceDNkIG5vcm1hbE1hdHJpeCAqIG9iamVjdE5vcm1hbDtcbiNpZmRlZiBGTElQX1NJREVEXG5cdHRyYW5zZm9ybWVkTm9ybWFsIFx4M2QgLSB0cmFuc2Zvcm1lZE5vcm1hbDtcbiNlbmRpZlxuI2lmZGVmIFVTRV9UQU5HRU5UXG5cdHZlYzMgdHJhbnNmb3JtZWRUYW5nZW50IFx4M2Qgbm9ybWFsTWF0cml4ICogb2JqZWN0VGFuZ2VudDtcblx0I2lmZGVmIEZMSVBfU0lERURcblx0XHR0cmFuc2Zvcm1lZFRhbmdlbnQgXHgzZCAtIHRyYW5zZm9ybWVkVGFuZ2VudDtcblx0I2VuZGlmXG4jZW5kaWYiLGRpc3BsYWNlbWVudG1hcF9wYXJzX3ZlcnRleDoiI2lmZGVmIFVTRV9ESVNQTEFDRU1FTlRNQVBcblx0dW5pZm9ybSBzYW1wbGVyMkQgZGlzcGxhY2VtZW50TWFwO1xuXHR1bmlmb3JtIGZsb2F0IGRpc3BsYWNlbWVudFNjYWxlO1xuXHR1bmlmb3JtIGZsb2F0IGRpc3BsYWNlbWVudEJpYXM7XG4jZW5kaWYiLGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg6IiNpZmRlZiBVU0VfRElTUExBQ0VNRU5UTUFQXG5cdHRyYW5zZm9ybWVkICtceDNkIG5vcm1hbGl6ZSggb2JqZWN0Tm9ybWFsICkgKiAoIHRleHR1cmUyRCggZGlzcGxhY2VtZW50TWFwLCB1diApLnggKiBkaXNwbGFjZW1lbnRTY2FsZSArIGRpc3BsYWNlbWVudEJpYXMgKTtcbiNlbmRpZiIsCmVtaXNzaXZlbWFwX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0VNSVNTSVZFTUFQXG5cdHZlYzQgZW1pc3NpdmVDb2xvciBceDNkIHRleHR1cmUyRCggZW1pc3NpdmVNYXAsIHZVdiApO1xuXHRlbWlzc2l2ZUNvbG9yLnJnYiBceDNkIGVtaXNzaXZlTWFwVGV4ZWxUb0xpbmVhciggZW1pc3NpdmVDb2xvciApLnJnYjtcblx0dG90YWxFbWlzc2l2ZVJhZGlhbmNlICpceDNkIGVtaXNzaXZlQ29sb3IucmdiO1xuI2VuZGlmIixlbWlzc2l2ZW1hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0VNSVNTSVZFTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIGVtaXNzaXZlTWFwO1xuI2VuZGlmIixlbmNvZGluZ3NfZnJhZ21lbnQ6ImdsX0ZyYWdDb2xvciBceDNkIGxpbmVhclRvT3V0cHV0VGV4ZWwoIGdsX0ZyYWdDb2xvciApOyIsZW5jb2RpbmdzX3BhcnNfZnJhZ21lbnQ6IlxudmVjNCBMaW5lYXJUb0xpbmVhciggaW4gdmVjNCB2YWx1ZSApIHtcblx0cmV0dXJuIHZhbHVlO1xufVxudmVjNCBHYW1tYVRvTGluZWFyKCBpbiB2ZWM0IHZhbHVlLCBpbiBmbG9hdCBnYW1tYUZhY3RvciApIHtcblx0cmV0dXJuIHZlYzQoIHBvdyggdmFsdWUucmdiLCB2ZWMzKCBnYW1tYUZhY3RvciApICksIHZhbHVlLmEgKTtcbn1cbnZlYzQgTGluZWFyVG9HYW1tYSggaW4gdmVjNCB2YWx1ZSwgaW4gZmxvYXQgZ2FtbWFGYWN0b3IgKSB7XG5cdHJldHVybiB2ZWM0KCBwb3coIHZhbHVlLnJnYiwgdmVjMyggMS4wIC8gZ2FtbWFGYWN0b3IgKSApLCB2YWx1ZS5hICk7XG59XG52ZWM0IHNSR0JUb0xpbmVhciggaW4gdmVjNCB2YWx1ZSApIHtcblx0cmV0dXJuIHZlYzQoIG1peCggcG93KCB2YWx1ZS5yZ2IgKiAwLjk0Nzg2NzI5ODYgKyB2ZWMzKCAwLjA1MjEzMjcwMTQgKSwgdmVjMyggMi40ICkgKSwgdmFsdWUucmdiICogMC4wNzczOTkzODA4LCB2ZWMzKCBsZXNzVGhhbkVxdWFsKCB2YWx1ZS5yZ2IsIHZlYzMoIDAuMDQwNDUgKSApICkgKSwgdmFsdWUuYSApO1xufVxudmVjNCBMaW5lYXJUb3NSR0IoIGluIHZlYzQgdmFsdWUgKSB7XG5cdHJldHVybiB2ZWM0KCBtaXgoIHBvdyggdmFsdWUucmdiLCB2ZWMzKCAwLjQxNjY2ICkgKSAqIDEuMDU1IC0gdmVjMyggMC4wNTUgKSwgdmFsdWUucmdiICogMTIuOTIsIHZlYzMoIGxlc3NUaGFuRXF1YWwoIHZhbHVlLnJnYiwgdmVjMyggMC4wMDMxMzA4ICkgKSApICksIHZhbHVlLmEgKTtcbn1cbnZlYzQgUkdCRVRvTGluZWFyKCBpbiB2ZWM0IHZhbHVlICkge1xuXHRyZXR1cm4gdmVjNCggdmFsdWUucmdiICogZXhwMiggdmFsdWUuYSAqIDI1NS4wIC0gMTI4LjAgKSwgMS4wICk7XG59XG52ZWM0IExpbmVhclRvUkdCRSggaW4gdmVjNCB2YWx1ZSApIHtcblx0ZmxvYXQgbWF4Q29tcG9uZW50IFx4M2QgbWF4KCBtYXgoIHZhbHVlLnIsIHZhbHVlLmcgKSwgdmFsdWUuYiApO1xuXHRmbG9hdCBmRXhwIFx4M2QgY2xhbXAoIGNlaWwoIGxvZzIoIG1heENvbXBvbmVudCApICksIC0xMjguMCwgMTI3LjAgKTtcblx0cmV0dXJuIHZlYzQoIHZhbHVlLnJnYiAvIGV4cDIoIGZFeHAgKSwgKCBmRXhwICsgMTI4LjAgKSAvIDI1NS4wICk7XG59XG52ZWM0IFJHQk1Ub0xpbmVhciggaW4gdmVjNCB2YWx1ZSwgaW4gZmxvYXQgbWF4UmFuZ2UgKSB7XG5cdHJldHVybiB2ZWM0KCB2YWx1ZS5yZ2IgKiB2YWx1ZS5hICogbWF4UmFuZ2UsIDEuMCApO1xufVxudmVjNCBMaW5lYXJUb1JHQk0oIGluIHZlYzQgdmFsdWUsIGluIGZsb2F0IG1heFJhbmdlICkge1xuXHRmbG9hdCBtYXhSR0IgXHgzZCBtYXgoIHZhbHVlLnIsIG1heCggdmFsdWUuZywgdmFsdWUuYiApICk7XG5cdGZsb2F0IE0gXHgzZCBjbGFtcCggbWF4UkdCIC8gbWF4UmFuZ2UsIDAuMCwgMS4wICk7XG5cdE0gXHgzZCBjZWlsKCBNICogMjU1LjAgKSAvIDI1NS4wO1xuXHRyZXR1cm4gdmVjNCggdmFsdWUucmdiIC8gKCBNICogbWF4UmFuZ2UgKSwgTSApO1xufVxudmVjNCBSR0JEVG9MaW5lYXIoIGluIHZlYzQgdmFsdWUsIGluIGZsb2F0IG1heFJhbmdlICkge1xuXHRyZXR1cm4gdmVjNCggdmFsdWUucmdiICogKCAoIG1heFJhbmdlIC8gMjU1LjAgKSAvIHZhbHVlLmEgKSwgMS4wICk7XG59XG52ZWM0IExpbmVhclRvUkdCRCggaW4gdmVjNCB2YWx1ZSwgaW4gZmxvYXQgbWF4UmFuZ2UgKSB7XG5cdGZsb2F0IG1heFJHQiBceDNkIG1heCggdmFsdWUuciwgbWF4KCB2YWx1ZS5nLCB2YWx1ZS5iICkgKTtcblx0ZmxvYXQgRCBceDNkIG1heCggbWF4UmFuZ2UgLyBtYXhSR0IsIDEuMCApO1xuXHREIFx4M2QgbWluKCBmbG9vciggRCApIC8gMjU1LjAsIDEuMCApO1xuXHRyZXR1cm4gdmVjNCggdmFsdWUucmdiICogKCBEICogKCAyNTUuMCAvIG1heFJhbmdlICkgKSwgRCApO1xufVxuY29uc3QgbWF0MyBjTG9nTHV2TSBceDNkIG1hdDMoIDAuMjIwOSwgMC4zMzkwLCAwLjQxODQsIDAuMTEzOCwgMC42NzgwLCAwLjczMTksIDAuMDEwMiwgMC4xMTMwLCAwLjI5NjkgKTtcbnZlYzQgTGluZWFyVG9Mb2dMdXYoIGluIHZlYzQgdmFsdWUgKSAge1xuXHR2ZWMzIFhwX1lfWFlacCBceDNkIGNMb2dMdXZNICogdmFsdWUucmdiO1xuXHRYcF9ZX1hZWnAgXHgzZCBtYXgoIFhwX1lfWFlacCwgdmVjMyggMWUtNiwgMWUtNiwgMWUtNiApICk7XG5cdHZlYzQgdlJlc3VsdDtcblx0dlJlc3VsdC54eSBceDNkIFhwX1lfWFlacC54eSAvIFhwX1lfWFlacC56O1xuXHRmbG9hdCBMZSBceDNkIDIuMCAqIGxvZzIoWHBfWV9YWVpwLnkpICsgMTI3LjA7XG5cdHZSZXN1bHQudyBceDNkIGZyYWN0KCBMZSApO1xuXHR2UmVzdWx0LnogXHgzZCAoIExlIC0gKCBmbG9vciggdlJlc3VsdC53ICogMjU1LjAgKSApIC8gMjU1LjAgKSAvIDI1NS4wO1xuXHRyZXR1cm4gdlJlc3VsdDtcbn1cbmNvbnN0IG1hdDMgY0xvZ0x1dkludmVyc2VNIFx4M2QgbWF0MyggNi4wMDE0LCAtMi43MDA4LCAtMS43OTk2LCAtMS4zMzIwLCAzLjEwMjksIC01Ljc3MjEsIDAuMzAwOCwgLTEuMDg4MiwgNS42MjY4ICk7XG52ZWM0IExvZ0x1dlRvTGluZWFyKCBpbiB2ZWM0IHZhbHVlICkge1xuXHRmbG9hdCBMZSBceDNkIHZhbHVlLnogKiAyNTUuMCArIHZhbHVlLnc7XG5cdHZlYzMgWHBfWV9YWVpwO1xuXHRYcF9ZX1hZWnAueSBceDNkIGV4cDIoICggTGUgLSAxMjcuMCApIC8gMi4wICk7XG5cdFhwX1lfWFlacC56IFx4M2QgWHBfWV9YWVpwLnkgLyB2YWx1ZS55O1xuXHRYcF9ZX1hZWnAueCBceDNkIHZhbHVlLnggKiBYcF9ZX1hZWnAuejtcblx0dmVjMyB2UkdCIFx4M2QgY0xvZ0x1dkludmVyc2VNICogWHBfWV9YWVpwLnJnYjtcblx0cmV0dXJuIHZlYzQoIG1heCggdlJHQiwgMC4wICksIDEuMCApO1xufSIsCmVudm1hcF9mcmFnbWVudDoiI2lmZGVmIFVTRV9FTlZNQVBcblx0I2lmIGRlZmluZWQoIFVTRV9CVU1QTUFQICkgfHwgZGVmaW5lZCggVVNFX05PUk1BTE1BUCApIHx8IGRlZmluZWQoIFBIT05HIClcblx0XHR2ZWMzIGNhbWVyYVRvVmVydGV4IFx4M2Qgbm9ybWFsaXplKCB2V29ybGRQb3NpdGlvbiAtIGNhbWVyYVBvc2l0aW9uICk7XG5cdFx0dmVjMyB3b3JsZE5vcm1hbCBceDNkIGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIG5vcm1hbCwgdmlld01hdHJpeCApO1xuXHRcdCNpZmRlZiBFTlZNQVBfTU9ERV9SRUZMRUNUSU9OXG5cdFx0XHR2ZWMzIHJlZmxlY3RWZWMgXHgzZCByZWZsZWN0KCBjYW1lcmFUb1ZlcnRleCwgd29ybGROb3JtYWwgKTtcblx0XHQjZWxzZVxuXHRcdFx0dmVjMyByZWZsZWN0VmVjIFx4M2QgcmVmcmFjdCggY2FtZXJhVG9WZXJ0ZXgsIHdvcmxkTm9ybWFsLCByZWZyYWN0aW9uUmF0aW8gKTtcblx0XHQjZW5kaWZcblx0I2Vsc2Vcblx0XHR2ZWMzIHJlZmxlY3RWZWMgXHgzZCB2UmVmbGVjdDtcblx0I2VuZGlmXG5cdCNpZmRlZiBFTlZNQVBfVFlQRV9DVUJFXG5cdFx0dmVjNCBlbnZDb2xvciBceDNkIHRleHR1cmVDdWJlKCBlbnZNYXAsIHZlYzMoIGZsaXBFbnZNYXAgKiByZWZsZWN0VmVjLngsIHJlZmxlY3RWZWMueXogKSApO1xuXHQjZWxpZiBkZWZpbmVkKCBFTlZNQVBfVFlQRV9FUVVJUkVDIClcblx0XHR2ZWMyIHNhbXBsZVVWO1xuXHRcdHJlZmxlY3RWZWMgXHgzZCBub3JtYWxpemUoIHJlZmxlY3RWZWMgKTtcblx0XHRzYW1wbGVVVi55IFx4M2QgYXNpbiggY2xhbXAoIHJlZmxlY3RWZWMueSwgLSAxLjAsIDEuMCApICkgKiBSRUNJUFJPQ0FMX1BJICsgMC41O1xuXHRcdHNhbXBsZVVWLnggXHgzZCBhdGFuKCByZWZsZWN0VmVjLnosIHJlZmxlY3RWZWMueCApICogUkVDSVBST0NBTF9QSTIgKyAwLjU7XG5cdFx0dmVjNCBlbnZDb2xvciBceDNkIHRleHR1cmUyRCggZW52TWFwLCBzYW1wbGVVViApO1xuXHQjZWxpZiBkZWZpbmVkKCBFTlZNQVBfVFlQRV9TUEhFUkUgKVxuXHRcdHJlZmxlY3RWZWMgXHgzZCBub3JtYWxpemUoIHJlZmxlY3RWZWMgKTtcblx0XHR2ZWMzIHJlZmxlY3RWaWV3IFx4M2Qgbm9ybWFsaXplKCAoIHZpZXdNYXRyaXggKiB2ZWM0KCByZWZsZWN0VmVjLCAwLjAgKSApLnh5eiArIHZlYzMoIDAuMCwgMC4wLCAxLjAgKSApO1xuXHRcdHZlYzQgZW52Q29sb3IgXHgzZCB0ZXh0dXJlMkQoIGVudk1hcCwgcmVmbGVjdFZpZXcueHkgKiAwLjUgKyAwLjUgKTtcblx0I2Vsc2Vcblx0XHR2ZWM0IGVudkNvbG9yIFx4M2QgdmVjNCggMC4wICk7XG5cdCNlbmRpZlxuXHRlbnZDb2xvciBceDNkIGVudk1hcFRleGVsVG9MaW5lYXIoIGVudkNvbG9yICk7XG5cdCNpZmRlZiBFTlZNQVBfQkxFTkRJTkdfTVVMVElQTFlcblx0XHRvdXRnb2luZ0xpZ2h0IFx4M2QgbWl4KCBvdXRnb2luZ0xpZ2h0LCBvdXRnb2luZ0xpZ2h0ICogZW52Q29sb3IueHl6LCBzcGVjdWxhclN0cmVuZ3RoICogcmVmbGVjdGl2aXR5ICk7XG5cdCNlbGlmIGRlZmluZWQoIEVOVk1BUF9CTEVORElOR19NSVggKVxuXHRcdG91dGdvaW5nTGlnaHQgXHgzZCBtaXgoIG91dGdvaW5nTGlnaHQsIGVudkNvbG9yLnh5eiwgc3BlY3VsYXJTdHJlbmd0aCAqIHJlZmxlY3Rpdml0eSApO1xuXHQjZWxpZiBkZWZpbmVkKCBFTlZNQVBfQkxFTkRJTkdfQUREIClcblx0XHRvdXRnb2luZ0xpZ2h0ICtceDNkIGVudkNvbG9yLnh5eiAqIHNwZWN1bGFyU3RyZW5ndGggKiByZWZsZWN0aXZpdHk7XG5cdCNlbmRpZlxuI2VuZGlmIiwKZW52bWFwX3BhcnNfZnJhZ21lbnQ6IiNpZiBkZWZpbmVkKCBVU0VfRU5WTUFQICkgfHwgZGVmaW5lZCggUEhZU0lDQUwgKVxuXHR1bmlmb3JtIGZsb2F0IHJlZmxlY3Rpdml0eTtcblx0dW5pZm9ybSBmbG9hdCBlbnZNYXBJbnRlbnNpdHk7XG4jZW5kaWZcbiNpZmRlZiBVU0VfRU5WTUFQXG5cdCNpZiAhIGRlZmluZWQoIFBIWVNJQ0FMICkgXHgyNlx4MjYgKCBkZWZpbmVkKCBVU0VfQlVNUE1BUCApIHx8IGRlZmluZWQoIFVTRV9OT1JNQUxNQVAgKSB8fCBkZWZpbmVkKCBQSE9ORyApIClcblx0XHR2YXJ5aW5nIHZlYzMgdldvcmxkUG9zaXRpb247XG5cdCNlbmRpZlxuXHQjaWZkZWYgRU5WTUFQX1RZUEVfQ1VCRVxuXHRcdHVuaWZvcm0gc2FtcGxlckN1YmUgZW52TWFwO1xuXHQjZWxzZVxuXHRcdHVuaWZvcm0gc2FtcGxlcjJEIGVudk1hcDtcblx0I2VuZGlmXG5cdHVuaWZvcm0gZmxvYXQgZmxpcEVudk1hcDtcblx0dW5pZm9ybSBpbnQgbWF4TWlwTGV2ZWw7XG5cdCNpZiBkZWZpbmVkKCBVU0VfQlVNUE1BUCApIHx8IGRlZmluZWQoIFVTRV9OT1JNQUxNQVAgKSB8fCBkZWZpbmVkKCBQSE9ORyApIHx8IGRlZmluZWQoIFBIWVNJQ0FMIClcblx0XHR1bmlmb3JtIGZsb2F0IHJlZnJhY3Rpb25SYXRpbztcblx0I2Vsc2Vcblx0XHR2YXJ5aW5nIHZlYzMgdlJlZmxlY3Q7XG5cdCNlbmRpZlxuI2VuZGlmIiwKZW52bWFwX3BhcnNfdmVydGV4OiIjaWZkZWYgVVNFX0VOVk1BUFxuXHQjaWYgZGVmaW5lZCggVVNFX0JVTVBNQVAgKSB8fCBkZWZpbmVkKCBVU0VfTk9STUFMTUFQICkgfHwgZGVmaW5lZCggUEhPTkcgKVxuXHRcdHZhcnlpbmcgdmVjMyB2V29ybGRQb3NpdGlvbjtcblx0I2Vsc2Vcblx0XHR2YXJ5aW5nIHZlYzMgdlJlZmxlY3Q7XG5cdFx0dW5pZm9ybSBmbG9hdCByZWZyYWN0aW9uUmF0aW87XG5cdCNlbmRpZlxuI2VuZGlmIixlbnZtYXBfcGh5c2ljYWxfcGFyc19mcmFnbWVudDoiI2lmIGRlZmluZWQoIFVTRV9FTlZNQVAgKSBceDI2XHgyNiBkZWZpbmVkKCBQSFlTSUNBTCApXG5cdHZlYzMgZ2V0TGlnaHRQcm9iZUluZGlyZWN0SXJyYWRpYW5jZSggY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gaW50IG1heE1JUExldmVsICkge1xuXHRcdHZlYzMgd29ybGROb3JtYWwgXHgzZCBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCBnZW9tZXRyeS5ub3JtYWwsIHZpZXdNYXRyaXggKTtcblx0XHQjaWZkZWYgRU5WTUFQX1RZUEVfQ1VCRVxuXHRcdFx0dmVjMyBxdWVyeVZlYyBceDNkIHZlYzMoIGZsaXBFbnZNYXAgKiB3b3JsZE5vcm1hbC54LCB3b3JsZE5vcm1hbC55eiApO1xuXHRcdFx0I2lmZGVmIFRFWFRVUkVfTE9EX0VYVFxuXHRcdFx0XHR2ZWM0IGVudk1hcENvbG9yIFx4M2QgdGV4dHVyZUN1YmVMb2RFWFQoIGVudk1hcCwgcXVlcnlWZWMsIGZsb2F0KCBtYXhNSVBMZXZlbCApICk7XG5cdFx0XHQjZWxzZVxuXHRcdFx0XHR2ZWM0IGVudk1hcENvbG9yIFx4M2QgdGV4dHVyZUN1YmUoIGVudk1hcCwgcXVlcnlWZWMsIGZsb2F0KCBtYXhNSVBMZXZlbCApICk7XG5cdFx0XHQjZW5kaWZcblx0XHRcdGVudk1hcENvbG9yLnJnYiBceDNkIGVudk1hcFRleGVsVG9MaW5lYXIoIGVudk1hcENvbG9yICkucmdiO1xuXHRcdCNlbGlmIGRlZmluZWQoIEVOVk1BUF9UWVBFX0NVQkVfVVYgKVxuXHRcdFx0dmVjMyBxdWVyeVZlYyBceDNkIHZlYzMoIGZsaXBFbnZNYXAgKiB3b3JsZE5vcm1hbC54LCB3b3JsZE5vcm1hbC55eiApO1xuXHRcdFx0dmVjNCBlbnZNYXBDb2xvciBceDNkIHRleHR1cmVDdWJlVVYoIGVudk1hcCwgcXVlcnlWZWMsIDEuMCApO1xuXHRcdCNlbHNlXG5cdFx0XHR2ZWM0IGVudk1hcENvbG9yIFx4M2QgdmVjNCggMC4wICk7XG5cdFx0I2VuZGlmXG5cdFx0cmV0dXJuIFBJICogZW52TWFwQ29sb3IucmdiICogZW52TWFwSW50ZW5zaXR5O1xuXHR9XG5cdGZsb2F0IGdldFNwZWN1bGFyTUlQTGV2ZWwoIGNvbnN0IGluIGZsb2F0IGJsaW5uU2hpbmluZXNzRXhwb25lbnQsIGNvbnN0IGluIGludCBtYXhNSVBMZXZlbCApIHtcblx0XHRmbG9hdCBtYXhNSVBMZXZlbFNjYWxhciBceDNkIGZsb2F0KCBtYXhNSVBMZXZlbCApO1xuXHRcdGZsb2F0IGRlc2lyZWRNSVBMZXZlbCBceDNkIG1heE1JUExldmVsU2NhbGFyICsgMC43OTI0OCAtIDAuNSAqIGxvZzIoIHBvdzIoIGJsaW5uU2hpbmluZXNzRXhwb25lbnQgKSArIDEuMCApO1xuXHRcdHJldHVybiBjbGFtcCggZGVzaXJlZE1JUExldmVsLCAwLjAsIG1heE1JUExldmVsU2NhbGFyICk7XG5cdH1cblx0dmVjMyBnZXRMaWdodFByb2JlSW5kaXJlY3RSYWRpYW5jZSggY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gZmxvYXQgYmxpbm5TaGluaW5lc3NFeHBvbmVudCwgY29uc3QgaW4gaW50IG1heE1JUExldmVsICkge1xuXHRcdCNpZmRlZiBFTlZNQVBfTU9ERV9SRUZMRUNUSU9OXG5cdFx0XHR2ZWMzIHJlZmxlY3RWZWMgXHgzZCByZWZsZWN0KCAtZ2VvbWV0cnkudmlld0RpciwgZ2VvbWV0cnkubm9ybWFsICk7XG5cdFx0I2Vsc2Vcblx0XHRcdHZlYzMgcmVmbGVjdFZlYyBceDNkIHJlZnJhY3QoIC1nZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5ub3JtYWwsIHJlZnJhY3Rpb25SYXRpbyApO1xuXHRcdCNlbmRpZlxuXHRcdHJlZmxlY3RWZWMgXHgzZCBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCByZWZsZWN0VmVjLCB2aWV3TWF0cml4ICk7XG5cdFx0ZmxvYXQgc3BlY3VsYXJNSVBMZXZlbCBceDNkIGdldFNwZWN1bGFyTUlQTGV2ZWwoIGJsaW5uU2hpbmluZXNzRXhwb25lbnQsIG1heE1JUExldmVsICk7XG5cdFx0I2lmZGVmIEVOVk1BUF9UWVBFX0NVQkVcblx0XHRcdHZlYzMgcXVlcnlSZWZsZWN0VmVjIFx4M2QgdmVjMyggZmxpcEVudk1hcCAqIHJlZmxlY3RWZWMueCwgcmVmbGVjdFZlYy55eiApO1xuXHRcdFx0I2lmZGVmIFRFWFRVUkVfTE9EX0VYVFxuXHRcdFx0XHR2ZWM0IGVudk1hcENvbG9yIFx4M2QgdGV4dHVyZUN1YmVMb2RFWFQoIGVudk1hcCwgcXVlcnlSZWZsZWN0VmVjLCBzcGVjdWxhck1JUExldmVsICk7XG5cdFx0XHQjZWxzZVxuXHRcdFx0XHR2ZWM0IGVudk1hcENvbG9yIFx4M2QgdGV4dHVyZUN1YmUoIGVudk1hcCwgcXVlcnlSZWZsZWN0VmVjLCBzcGVjdWxhck1JUExldmVsICk7XG5cdFx0XHQjZW5kaWZcblx0XHRcdGVudk1hcENvbG9yLnJnYiBceDNkIGVudk1hcFRleGVsVG9MaW5lYXIoIGVudk1hcENvbG9yICkucmdiO1xuXHRcdCNlbGlmIGRlZmluZWQoIEVOVk1BUF9UWVBFX0NVQkVfVVYgKVxuXHRcdFx0dmVjMyBxdWVyeVJlZmxlY3RWZWMgXHgzZCB2ZWMzKCBmbGlwRW52TWFwICogcmVmbGVjdFZlYy54LCByZWZsZWN0VmVjLnl6ICk7XG5cdFx0XHR2ZWM0IGVudk1hcENvbG9yIFx4M2QgdGV4dHVyZUN1YmVVViggZW52TWFwLCBxdWVyeVJlZmxlY3RWZWMsIEJsaW5uRXhwb25lbnRUb0dHWFJvdWdobmVzcyhibGlublNoaW5pbmVzc0V4cG9uZW50ICkpO1xuXHRcdCNlbGlmIGRlZmluZWQoIEVOVk1BUF9UWVBFX0VRVUlSRUMgKVxuXHRcdFx0dmVjMiBzYW1wbGVVVjtcblx0XHRcdHNhbXBsZVVWLnkgXHgzZCBhc2luKCBjbGFtcCggcmVmbGVjdFZlYy55LCAtIDEuMCwgMS4wICkgKSAqIFJFQ0lQUk9DQUxfUEkgKyAwLjU7XG5cdFx0XHRzYW1wbGVVVi54IFx4M2QgYXRhbiggcmVmbGVjdFZlYy56LCByZWZsZWN0VmVjLnggKSAqIFJFQ0lQUk9DQUxfUEkyICsgMC41O1xuXHRcdFx0I2lmZGVmIFRFWFRVUkVfTE9EX0VYVFxuXHRcdFx0XHR2ZWM0IGVudk1hcENvbG9yIFx4M2QgdGV4dHVyZTJETG9kRVhUKCBlbnZNYXAsIHNhbXBsZVVWLCBzcGVjdWxhck1JUExldmVsICk7XG5cdFx0XHQjZWxzZVxuXHRcdFx0XHR2ZWM0IGVudk1hcENvbG9yIFx4M2QgdGV4dHVyZTJEKCBlbnZNYXAsIHNhbXBsZVVWLCBzcGVjdWxhck1JUExldmVsICk7XG5cdFx0XHQjZW5kaWZcblx0XHRcdGVudk1hcENvbG9yLnJnYiBceDNkIGVudk1hcFRleGVsVG9MaW5lYXIoIGVudk1hcENvbG9yICkucmdiO1xuXHRcdCNlbGlmIGRlZmluZWQoIEVOVk1BUF9UWVBFX1NQSEVSRSApXG5cdFx0XHR2ZWMzIHJlZmxlY3RWaWV3IFx4M2Qgbm9ybWFsaXplKCAoIHZpZXdNYXRyaXggKiB2ZWM0KCByZWZsZWN0VmVjLCAwLjAgKSApLnh5eiArIHZlYzMoIDAuMCwwLjAsMS4wICkgKTtcblx0XHRcdCNpZmRlZiBURVhUVVJFX0xPRF9FWFRcblx0XHRcdFx0dmVjNCBlbnZNYXBDb2xvciBceDNkIHRleHR1cmUyRExvZEVYVCggZW52TWFwLCByZWZsZWN0Vmlldy54eSAqIDAuNSArIDAuNSwgc3BlY3VsYXJNSVBMZXZlbCApO1xuXHRcdFx0I2Vsc2Vcblx0XHRcdFx0dmVjNCBlbnZNYXBDb2xvciBceDNkIHRleHR1cmUyRCggZW52TWFwLCByZWZsZWN0Vmlldy54eSAqIDAuNSArIDAuNSwgc3BlY3VsYXJNSVBMZXZlbCApO1xuXHRcdFx0I2VuZGlmXG5cdFx0XHRlbnZNYXBDb2xvci5yZ2IgXHgzZCBlbnZNYXBUZXhlbFRvTGluZWFyKCBlbnZNYXBDb2xvciApLnJnYjtcblx0XHQjZW5kaWZcblx0XHRyZXR1cm4gZW52TWFwQ29sb3IucmdiICogZW52TWFwSW50ZW5zaXR5O1xuXHR9XG4jZW5kaWYiLAplbnZtYXBfdmVydGV4OiIjaWZkZWYgVVNFX0VOVk1BUFxuXHQjaWYgZGVmaW5lZCggVVNFX0JVTVBNQVAgKSB8fCBkZWZpbmVkKCBVU0VfTk9STUFMTUFQICkgfHwgZGVmaW5lZCggUEhPTkcgKVxuXHRcdHZXb3JsZFBvc2l0aW9uIFx4M2Qgd29ybGRQb3NpdGlvbi54eXo7XG5cdCNlbHNlXG5cdFx0dmVjMyBjYW1lcmFUb1ZlcnRleCBceDNkIG5vcm1hbGl6ZSggd29ybGRQb3NpdGlvbi54eXogLSBjYW1lcmFQb3NpdGlvbiApO1xuXHRcdHZlYzMgd29ybGROb3JtYWwgXHgzZCBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCB0cmFuc2Zvcm1lZE5vcm1hbCwgdmlld01hdHJpeCApO1xuXHRcdCNpZmRlZiBFTlZNQVBfTU9ERV9SRUZMRUNUSU9OXG5cdFx0XHR2UmVmbGVjdCBceDNkIHJlZmxlY3QoIGNhbWVyYVRvVmVydGV4LCB3b3JsZE5vcm1hbCApO1xuXHRcdCNlbHNlXG5cdFx0XHR2UmVmbGVjdCBceDNkIHJlZnJhY3QoIGNhbWVyYVRvVmVydGV4LCB3b3JsZE5vcm1hbCwgcmVmcmFjdGlvblJhdGlvICk7XG5cdFx0I2VuZGlmXG5cdCNlbmRpZlxuI2VuZGlmIiwKZm9nX3ZlcnRleDoiI2lmZGVmIFVTRV9GT0dcblx0Zm9nRGVwdGggXHgzZCAtbXZQb3NpdGlvbi56O1xuI2VuZGlmIixmb2dfcGFyc192ZXJ0ZXg6IiNpZmRlZiBVU0VfRk9HXG5cdHZhcnlpbmcgZmxvYXQgZm9nRGVwdGg7XG4jZW5kaWYiLGZvZ19mcmFnbWVudDoiI2lmZGVmIFVTRV9GT0dcblx0I2lmZGVmIEZPR19FWFAyXG5cdFx0ZmxvYXQgZm9nRmFjdG9yIFx4M2Qgd2hpdGVDb21wbGltZW50KCBleHAyKCAtIGZvZ0RlbnNpdHkgKiBmb2dEZW5zaXR5ICogZm9nRGVwdGggKiBmb2dEZXB0aCAqIExPRzIgKSApO1xuXHQjZWxzZVxuXHRcdGZsb2F0IGZvZ0ZhY3RvciBceDNkIHNtb290aHN0ZXAoIGZvZ05lYXIsIGZvZ0ZhciwgZm9nRGVwdGggKTtcblx0I2VuZGlmXG5cdGdsX0ZyYWdDb2xvci5yZ2IgXHgzZCBtaXgoIGdsX0ZyYWdDb2xvci5yZ2IsIGZvZ0NvbG9yLCBmb2dGYWN0b3IgKTtcbiNlbmRpZiIsZm9nX3BhcnNfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfRk9HXG5cdHVuaWZvcm0gdmVjMyBmb2dDb2xvcjtcblx0dmFyeWluZyBmbG9hdCBmb2dEZXB0aDtcblx0I2lmZGVmIEZPR19FWFAyXG5cdFx0dW5pZm9ybSBmbG9hdCBmb2dEZW5zaXR5O1xuXHQjZWxzZVxuXHRcdHVuaWZvcm0gZmxvYXQgZm9nTmVhcjtcblx0XHR1bmlmb3JtIGZsb2F0IGZvZ0Zhcjtcblx0I2VuZGlmXG4jZW5kaWYiLApncmFkaWVudG1hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVE9PTlxuXHR1bmlmb3JtIHNhbXBsZXIyRCBncmFkaWVudE1hcDtcblx0dmVjMyBnZXRHcmFkaWVudElycmFkaWFuY2UoIHZlYzMgbm9ybWFsLCB2ZWMzIGxpZ2h0RGlyZWN0aW9uICkge1xuXHRcdGZsb2F0IGRvdE5MIFx4M2QgZG90KCBub3JtYWwsIGxpZ2h0RGlyZWN0aW9uICk7XG5cdFx0dmVjMiBjb29yZCBceDNkIHZlYzIoIGRvdE5MICogMC41ICsgMC41LCAwLjAgKTtcblx0XHQjaWZkZWYgVVNFX0dSQURJRU5UTUFQXG5cdFx0XHRyZXR1cm4gdGV4dHVyZTJEKCBncmFkaWVudE1hcCwgY29vcmQgKS5yZ2I7XG5cdFx0I2Vsc2Vcblx0XHRcdHJldHVybiAoIGNvb3JkLnggXHgzYyAwLjcgKSA/IHZlYzMoIDAuNyApIDogdmVjMyggMS4wICk7XG5cdFx0I2VuZGlmXG5cdH1cbiNlbmRpZiIsbGlnaHRtYXBfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfTElHSFRNQVBcblx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICtceDNkIFBJICogdGV4dHVyZTJEKCBsaWdodE1hcCwgdlV2MiApLnh5eiAqIGxpZ2h0TWFwSW50ZW5zaXR5O1xuI2VuZGlmIiwKbGlnaHRtYXBfcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9MSUdIVE1BUFxuXHR1bmlmb3JtIHNhbXBsZXIyRCBsaWdodE1hcDtcblx0dW5pZm9ybSBmbG9hdCBsaWdodE1hcEludGVuc2l0eTtcbiNlbmRpZiIsbGlnaHRzX2xhbWJlcnRfdmVydGV4OiJ2ZWMzIGRpZmZ1c2UgXHgzZCB2ZWMzKCAxLjAgKTtcbkdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnk7XG5nZW9tZXRyeS5wb3NpdGlvbiBceDNkIG12UG9zaXRpb24ueHl6O1xuZ2VvbWV0cnkubm9ybWFsIFx4M2Qgbm9ybWFsaXplKCB0cmFuc2Zvcm1lZE5vcm1hbCApO1xuZ2VvbWV0cnkudmlld0RpciBceDNkIG5vcm1hbGl6ZSggLW12UG9zaXRpb24ueHl6ICk7XG5HZW9tZXRyaWNDb250ZXh0IGJhY2tHZW9tZXRyeTtcbmJhY2tHZW9tZXRyeS5wb3NpdGlvbiBceDNkIGdlb21ldHJ5LnBvc2l0aW9uO1xuYmFja0dlb21ldHJ5Lm5vcm1hbCBceDNkIC1nZW9tZXRyeS5ub3JtYWw7XG5iYWNrR2VvbWV0cnkudmlld0RpciBceDNkIGdlb21ldHJ5LnZpZXdEaXI7XG52TGlnaHRGcm9udCBceDNkIHZlYzMoIDAuMCApO1xudkluZGlyZWN0RnJvbnQgXHgzZCB2ZWMzKCAwLjAgKTtcbiNpZmRlZiBET1VCTEVfU0lERURcblx0dkxpZ2h0QmFjayBceDNkIHZlYzMoIDAuMCApO1xuXHR2SW5kaXJlY3RCYWNrIFx4M2QgdmVjMyggMC4wICk7XG4jZW5kaWZcbkluY2lkZW50TGlnaHQgZGlyZWN0TGlnaHQ7XG5mbG9hdCBkb3ROTDtcbnZlYzMgZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlO1xuI2lmIE5VTV9QT0lOVF9MSUdIVFMgXHgzZSAwXG5cdCNwcmFnbWEgdW5yb2xsX2xvb3Bcblx0Zm9yICggaW50IGkgXHgzZCAwOyBpIFx4M2MgTlVNX1BPSU5UX0xJR0hUUzsgaSArKyApIHtcblx0XHRnZXRQb2ludERpcmVjdExpZ2h0SXJyYWRpYW5jZSggcG9pbnRMaWdodHNbIGkgXSwgZ2VvbWV0cnksIGRpcmVjdExpZ2h0ICk7XG5cdFx0ZG90TkwgXHgzZCBkb3QoIGdlb21ldHJ5Lm5vcm1hbCwgZGlyZWN0TGlnaHQuZGlyZWN0aW9uICk7XG5cdFx0ZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlIFx4M2QgUEkgKiBkaXJlY3RMaWdodC5jb2xvcjtcblx0XHR2TGlnaHRGcm9udCArXHgzZCBzYXR1cmF0ZSggZG90TkwgKSAqIGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZTtcblx0XHQjaWZkZWYgRE9VQkxFX1NJREVEXG5cdFx0XHR2TGlnaHRCYWNrICtceDNkIHNhdHVyYXRlKCAtZG90TkwgKSAqIGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZTtcblx0XHQjZW5kaWZcblx0fVxuI2VuZGlmXG4jaWYgTlVNX1NQT1RfTElHSFRTIFx4M2UgMFxuXHQjcHJhZ21hIHVucm9sbF9sb29wXG5cdGZvciAoIGludCBpIFx4M2QgMDsgaSBceDNjIE5VTV9TUE9UX0xJR0hUUzsgaSArKyApIHtcblx0XHRnZXRTcG90RGlyZWN0TGlnaHRJcnJhZGlhbmNlKCBzcG90TGlnaHRzWyBpIF0sIGdlb21ldHJ5LCBkaXJlY3RMaWdodCApO1xuXHRcdGRvdE5MIFx4M2QgZG90KCBnZW9tZXRyeS5ub3JtYWwsIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiApO1xuXHRcdGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZSBceDNkIFBJICogZGlyZWN0TGlnaHQuY29sb3I7XG5cdFx0dkxpZ2h0RnJvbnQgK1x4M2Qgc2F0dXJhdGUoIGRvdE5MICkgKiBkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2U7XG5cdFx0I2lmZGVmIERPVUJMRV9TSURFRFxuXHRcdFx0dkxpZ2h0QmFjayArXHgzZCBzYXR1cmF0ZSggLWRvdE5MICkgKiBkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2U7XG5cdFx0I2VuZGlmXG5cdH1cbiNlbmRpZlxuI2lmIE5VTV9ESVJfTElHSFRTIFx4M2UgMFxuXHQjcHJhZ21hIHVucm9sbF9sb29wXG5cdGZvciAoIGludCBpIFx4M2QgMDsgaSBceDNjIE5VTV9ESVJfTElHSFRTOyBpICsrICkge1xuXHRcdGdldERpcmVjdGlvbmFsRGlyZWN0TGlnaHRJcnJhZGlhbmNlKCBkaXJlY3Rpb25hbExpZ2h0c1sgaSBdLCBnZW9tZXRyeSwgZGlyZWN0TGlnaHQgKTtcblx0XHRkb3ROTCBceDNkIGRvdCggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKTtcblx0XHRkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2UgXHgzZCBQSSAqIGRpcmVjdExpZ2h0LmNvbG9yO1xuXHRcdHZMaWdodEZyb250ICtceDNkIHNhdHVyYXRlKCBkb3ROTCApICogZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlO1xuXHRcdCNpZmRlZiBET1VCTEVfU0lERURcblx0XHRcdHZMaWdodEJhY2sgK1x4M2Qgc2F0dXJhdGUoIC1kb3ROTCApICogZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlO1xuXHRcdCNlbmRpZlxuXHR9XG4jZW5kaWZcbiNpZiBOVU1fSEVNSV9MSUdIVFMgXHgzZSAwXG5cdCNwcmFnbWEgdW5yb2xsX2xvb3Bcblx0Zm9yICggaW50IGkgXHgzZCAwOyBpIFx4M2MgTlVNX0hFTUlfTElHSFRTOyBpICsrICkge1xuXHRcdHZJbmRpcmVjdEZyb250ICtceDNkIGdldEhlbWlzcGhlcmVMaWdodElycmFkaWFuY2UoIGhlbWlzcGhlcmVMaWdodHNbIGkgXSwgZ2VvbWV0cnkgKTtcblx0XHQjaWZkZWYgRE9VQkxFX1NJREVEXG5cdFx0XHR2SW5kaXJlY3RCYWNrICtceDNkIGdldEhlbWlzcGhlcmVMaWdodElycmFkaWFuY2UoIGhlbWlzcGhlcmVMaWdodHNbIGkgXSwgYmFja0dlb21ldHJ5ICk7XG5cdFx0I2VuZGlmXG5cdH1cbiNlbmRpZiIsCmxpZ2h0c19wYXJzX2JlZ2luOiJ1bmlmb3JtIHZlYzMgYW1iaWVudExpZ2h0Q29sb3I7XG51bmlmb3JtIHZlYzMgbGlnaHRQcm9iZVsgOSBdO1xudmVjMyBzaEdldElycmFkaWFuY2VBdCggaW4gdmVjMyBub3JtYWwsIGluIHZlYzMgc2hDb2VmZmljaWVudHNbIDkgXSApIHtcblx0ZmxvYXQgeCBceDNkIG5vcm1hbC54LCB5IFx4M2Qgbm9ybWFsLnksIHogXHgzZCBub3JtYWwuejtcblx0dmVjMyByZXN1bHQgXHgzZCBzaENvZWZmaWNpZW50c1sgMCBdICogMC44ODYyMjc7XG5cdHJlc3VsdCArXHgzZCBzaENvZWZmaWNpZW50c1sgMSBdICogMi4wICogMC41MTE2NjQgKiB5O1xuXHRyZXN1bHQgK1x4M2Qgc2hDb2VmZmljaWVudHNbIDIgXSAqIDIuMCAqIDAuNTExNjY0ICogejtcblx0cmVzdWx0ICtceDNkIHNoQ29lZmZpY2llbnRzWyAzIF0gKiAyLjAgKiAwLjUxMTY2NCAqIHg7XG5cdHJlc3VsdCArXHgzZCBzaENvZWZmaWNpZW50c1sgNCBdICogMi4wICogMC40MjkwNDMgKiB4ICogeTtcblx0cmVzdWx0ICtceDNkIHNoQ29lZmZpY2llbnRzWyA1IF0gKiAyLjAgKiAwLjQyOTA0MyAqIHkgKiB6O1xuXHRyZXN1bHQgK1x4M2Qgc2hDb2VmZmljaWVudHNbIDYgXSAqICggMC43NDMxMjUgKiB6ICogeiAtIDAuMjQ3NzA4ICk7XG5cdHJlc3VsdCArXHgzZCBzaENvZWZmaWNpZW50c1sgNyBdICogMi4wICogMC40MjkwNDMgKiB4ICogejtcblx0cmVzdWx0ICtceDNkIHNoQ29lZmZpY2llbnRzWyA4IF0gKiAwLjQyOTA0MyAqICggeCAqIHggLSB5ICogeSApO1xuXHRyZXR1cm4gcmVzdWx0O1xufVxudmVjMyBnZXRMaWdodFByb2JlSXJyYWRpYW5jZSggY29uc3QgaW4gdmVjMyBsaWdodFByb2JlWyA5IF0sIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnkgKSB7XG5cdHZlYzMgd29ybGROb3JtYWwgXHgzZCBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCBnZW9tZXRyeS5ub3JtYWwsIHZpZXdNYXRyaXggKTtcblx0dmVjMyBpcnJhZGlhbmNlIFx4M2Qgc2hHZXRJcnJhZGlhbmNlQXQoIHdvcmxkTm9ybWFsLCBsaWdodFByb2JlICk7XG5cdHJldHVybiBpcnJhZGlhbmNlO1xufVxudmVjMyBnZXRBbWJpZW50TGlnaHRJcnJhZGlhbmNlKCBjb25zdCBpbiB2ZWMzIGFtYmllbnRMaWdodENvbG9yICkge1xuXHR2ZWMzIGlycmFkaWFuY2UgXHgzZCBhbWJpZW50TGlnaHRDb2xvcjtcblx0I2lmbmRlZiBQSFlTSUNBTExZX0NPUlJFQ1RfTElHSFRTXG5cdFx0aXJyYWRpYW5jZSAqXHgzZCBQSTtcblx0I2VuZGlmXG5cdHJldHVybiBpcnJhZGlhbmNlO1xufVxuI2lmIE5VTV9ESVJfTElHSFRTIFx4M2UgMFxuXHRzdHJ1Y3QgRGlyZWN0aW9uYWxMaWdodCB7XG5cdFx0dmVjMyBkaXJlY3Rpb247XG5cdFx0dmVjMyBjb2xvcjtcblx0XHRpbnQgc2hhZG93O1xuXHRcdGZsb2F0IHNoYWRvd0JpYXM7XG5cdFx0ZmxvYXQgc2hhZG93UmFkaXVzO1xuXHRcdHZlYzIgc2hhZG93TWFwU2l6ZTtcblx0fTtcblx0dW5pZm9ybSBEaXJlY3Rpb25hbExpZ2h0IGRpcmVjdGlvbmFsTGlnaHRzWyBOVU1fRElSX0xJR0hUUyBdO1xuXHR2b2lkIGdldERpcmVjdGlvbmFsRGlyZWN0TGlnaHRJcnJhZGlhbmNlKCBjb25zdCBpbiBEaXJlY3Rpb25hbExpZ2h0IGRpcmVjdGlvbmFsTGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIG91dCBJbmNpZGVudExpZ2h0IGRpcmVjdExpZ2h0ICkge1xuXHRcdGRpcmVjdExpZ2h0LmNvbG9yIFx4M2QgZGlyZWN0aW9uYWxMaWdodC5jb2xvcjtcblx0XHRkaXJlY3RMaWdodC5kaXJlY3Rpb24gXHgzZCBkaXJlY3Rpb25hbExpZ2h0LmRpcmVjdGlvbjtcblx0XHRkaXJlY3RMaWdodC52aXNpYmxlIFx4M2QgdHJ1ZTtcblx0fVxuI2VuZGlmXG4jaWYgTlVNX1BPSU5UX0xJR0hUUyBceDNlIDBcblx0c3RydWN0IFBvaW50TGlnaHQge1xuXHRcdHZlYzMgcG9zaXRpb247XG5cdFx0dmVjMyBjb2xvcjtcblx0XHRmbG9hdCBkaXN0YW5jZTtcblx0XHRmbG9hdCBkZWNheTtcblx0XHRpbnQgc2hhZG93O1xuXHRcdGZsb2F0IHNoYWRvd0JpYXM7XG5cdFx0ZmxvYXQgc2hhZG93UmFkaXVzO1xuXHRcdHZlYzIgc2hhZG93TWFwU2l6ZTtcblx0XHRmbG9hdCBzaGFkb3dDYW1lcmFOZWFyO1xuXHRcdGZsb2F0IHNoYWRvd0NhbWVyYUZhcjtcblx0fTtcblx0dW5pZm9ybSBQb2ludExpZ2h0IHBvaW50TGlnaHRzWyBOVU1fUE9JTlRfTElHSFRTIF07XG5cdHZvaWQgZ2V0UG9pbnREaXJlY3RMaWdodElycmFkaWFuY2UoIGNvbnN0IGluIFBvaW50TGlnaHQgcG9pbnRMaWdodCwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgb3V0IEluY2lkZW50TGlnaHQgZGlyZWN0TGlnaHQgKSB7XG5cdFx0dmVjMyBsVmVjdG9yIFx4M2QgcG9pbnRMaWdodC5wb3NpdGlvbiAtIGdlb21ldHJ5LnBvc2l0aW9uO1xuXHRcdGRpcmVjdExpZ2h0LmRpcmVjdGlvbiBceDNkIG5vcm1hbGl6ZSggbFZlY3RvciApO1xuXHRcdGZsb2F0IGxpZ2h0RGlzdGFuY2UgXHgzZCBsZW5ndGgoIGxWZWN0b3IgKTtcblx0XHRkaXJlY3RMaWdodC5jb2xvciBceDNkIHBvaW50TGlnaHQuY29sb3I7XG5cdFx0ZGlyZWN0TGlnaHQuY29sb3IgKlx4M2QgcHVuY3R1YWxMaWdodEludGVuc2l0eVRvSXJyYWRpYW5jZUZhY3RvciggbGlnaHREaXN0YW5jZSwgcG9pbnRMaWdodC5kaXN0YW5jZSwgcG9pbnRMaWdodC5kZWNheSApO1xuXHRcdGRpcmVjdExpZ2h0LnZpc2libGUgXHgzZCAoIGRpcmVjdExpZ2h0LmNvbG9yICFceDNkIHZlYzMoIDAuMCApICk7XG5cdH1cbiNlbmRpZlxuI2lmIE5VTV9TUE9UX0xJR0hUUyBceDNlIDBcblx0c3RydWN0IFNwb3RMaWdodCB7XG5cdFx0dmVjMyBwb3NpdGlvbjtcblx0XHR2ZWMzIGRpcmVjdGlvbjtcblx0XHR2ZWMzIGNvbG9yO1xuXHRcdGZsb2F0IGRpc3RhbmNlO1xuXHRcdGZsb2F0IGRlY2F5O1xuXHRcdGZsb2F0IGNvbmVDb3M7XG5cdFx0ZmxvYXQgcGVudW1icmFDb3M7XG5cdFx0aW50IHNoYWRvdztcblx0XHRmbG9hdCBzaGFkb3dCaWFzO1xuXHRcdGZsb2F0IHNoYWRvd1JhZGl1cztcblx0XHR2ZWMyIHNoYWRvd01hcFNpemU7XG5cdH07XG5cdHVuaWZvcm0gU3BvdExpZ2h0IHNwb3RMaWdodHNbIE5VTV9TUE9UX0xJR0hUUyBdO1xuXHR2b2lkIGdldFNwb3REaXJlY3RMaWdodElycmFkaWFuY2UoIGNvbnN0IGluIFNwb3RMaWdodCBzcG90TGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIG91dCBJbmNpZGVudExpZ2h0IGRpcmVjdExpZ2h0ICApIHtcblx0XHR2ZWMzIGxWZWN0b3IgXHgzZCBzcG90TGlnaHQucG9zaXRpb24gLSBnZW9tZXRyeS5wb3NpdGlvbjtcblx0XHRkaXJlY3RMaWdodC5kaXJlY3Rpb24gXHgzZCBub3JtYWxpemUoIGxWZWN0b3IgKTtcblx0XHRmbG9hdCBsaWdodERpc3RhbmNlIFx4M2QgbGVuZ3RoKCBsVmVjdG9yICk7XG5cdFx0ZmxvYXQgYW5nbGVDb3MgXHgzZCBkb3QoIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiwgc3BvdExpZ2h0LmRpcmVjdGlvbiApO1xuXHRcdGlmICggYW5nbGVDb3MgXHgzZSBzcG90TGlnaHQuY29uZUNvcyApIHtcblx0XHRcdGZsb2F0IHNwb3RFZmZlY3QgXHgzZCBzbW9vdGhzdGVwKCBzcG90TGlnaHQuY29uZUNvcywgc3BvdExpZ2h0LnBlbnVtYnJhQ29zLCBhbmdsZUNvcyApO1xuXHRcdFx0ZGlyZWN0TGlnaHQuY29sb3IgXHgzZCBzcG90TGlnaHQuY29sb3I7XG5cdFx0XHRkaXJlY3RMaWdodC5jb2xvciAqXHgzZCBzcG90RWZmZWN0ICogcHVuY3R1YWxMaWdodEludGVuc2l0eVRvSXJyYWRpYW5jZUZhY3RvciggbGlnaHREaXN0YW5jZSwgc3BvdExpZ2h0LmRpc3RhbmNlLCBzcG90TGlnaHQuZGVjYXkgKTtcblx0XHRcdGRpcmVjdExpZ2h0LnZpc2libGUgXHgzZCB0cnVlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRkaXJlY3RMaWdodC5jb2xvciBceDNkIHZlYzMoIDAuMCApO1xuXHRcdFx0ZGlyZWN0TGlnaHQudmlzaWJsZSBceDNkIGZhbHNlO1xuXHRcdH1cblx0fVxuI2VuZGlmXG4jaWYgTlVNX1JFQ1RfQVJFQV9MSUdIVFMgXHgzZSAwXG5cdHN0cnVjdCBSZWN0QXJlYUxpZ2h0IHtcblx0XHR2ZWMzIGNvbG9yO1xuXHRcdHZlYzMgcG9zaXRpb247XG5cdFx0dmVjMyBoYWxmV2lkdGg7XG5cdFx0dmVjMyBoYWxmSGVpZ2h0O1xuXHR9O1xuXHR1bmlmb3JtIHNhbXBsZXIyRCBsdGNfMTtcdHVuaWZvcm0gc2FtcGxlcjJEIGx0Y18yO1xuXHR1bmlmb3JtIFJlY3RBcmVhTGlnaHQgcmVjdEFyZWFMaWdodHNbIE5VTV9SRUNUX0FSRUFfTElHSFRTIF07XG4jZW5kaWZcbiNpZiBOVU1fSEVNSV9MSUdIVFMgXHgzZSAwXG5cdHN0cnVjdCBIZW1pc3BoZXJlTGlnaHQge1xuXHRcdHZlYzMgZGlyZWN0aW9uO1xuXHRcdHZlYzMgc2t5Q29sb3I7XG5cdFx0dmVjMyBncm91bmRDb2xvcjtcblx0fTtcblx0dW5pZm9ybSBIZW1pc3BoZXJlTGlnaHQgaGVtaXNwaGVyZUxpZ2h0c1sgTlVNX0hFTUlfTElHSFRTIF07XG5cdHZlYzMgZ2V0SGVtaXNwaGVyZUxpZ2h0SXJyYWRpYW5jZSggY29uc3QgaW4gSGVtaXNwaGVyZUxpZ2h0IGhlbWlMaWdodCwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSApIHtcblx0XHRmbG9hdCBkb3ROTCBceDNkIGRvdCggZ2VvbWV0cnkubm9ybWFsLCBoZW1pTGlnaHQuZGlyZWN0aW9uICk7XG5cdFx0ZmxvYXQgaGVtaURpZmZ1c2VXZWlnaHQgXHgzZCAwLjUgKiBkb3ROTCArIDAuNTtcblx0XHR2ZWMzIGlycmFkaWFuY2UgXHgzZCBtaXgoIGhlbWlMaWdodC5ncm91bmRDb2xvciwgaGVtaUxpZ2h0LnNreUNvbG9yLCBoZW1pRGlmZnVzZVdlaWdodCApO1xuXHRcdCNpZm5kZWYgUEhZU0lDQUxMWV9DT1JSRUNUX0xJR0hUU1xuXHRcdFx0aXJyYWRpYW5jZSAqXHgzZCBQSTtcblx0XHQjZW5kaWZcblx0XHRyZXR1cm4gaXJyYWRpYW5jZTtcblx0fVxuI2VuZGlmIiwKbGlnaHRzX3Bob25nX2ZyYWdtZW50OiJCbGlublBob25nTWF0ZXJpYWwgbWF0ZXJpYWw7XG5tYXRlcmlhbC5kaWZmdXNlQ29sb3IgXHgzZCBkaWZmdXNlQ29sb3IucmdiO1xubWF0ZXJpYWwuc3BlY3VsYXJDb2xvciBceDNkIHNwZWN1bGFyO1xubWF0ZXJpYWwuc3BlY3VsYXJTaGluaW5lc3MgXHgzZCBzaGluaW5lc3M7XG5tYXRlcmlhbC5zcGVjdWxhclN0cmVuZ3RoIFx4M2Qgc3BlY3VsYXJTdHJlbmd0aDsiLGxpZ2h0c19waG9uZ19wYXJzX2ZyYWdtZW50OiJ2YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjtcbiNpZm5kZWYgRkxBVF9TSEFERURcblx0dmFyeWluZyB2ZWMzIHZOb3JtYWw7XG4jZW5kaWZcbnN0cnVjdCBCbGlublBob25nTWF0ZXJpYWwge1xuXHR2ZWMzXHRkaWZmdXNlQ29sb3I7XG5cdHZlYzNcdHNwZWN1bGFyQ29sb3I7XG5cdGZsb2F0XHRzcGVjdWxhclNoaW5pbmVzcztcblx0ZmxvYXRcdHNwZWN1bGFyU3RyZW5ndGg7XG59O1xudm9pZCBSRV9EaXJlY3RfQmxpbm5QaG9uZyggY29uc3QgaW4gSW5jaWRlbnRMaWdodCBkaXJlY3RMaWdodCwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gQmxpbm5QaG9uZ01hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCApIHtcblx0I2lmZGVmIFRPT05cblx0XHR2ZWMzIGlycmFkaWFuY2UgXHgzZCBnZXRHcmFkaWVudElycmFkaWFuY2UoIGdlb21ldHJ5Lm5vcm1hbCwgZGlyZWN0TGlnaHQuZGlyZWN0aW9uICkgKiBkaXJlY3RMaWdodC5jb2xvcjtcblx0I2Vsc2Vcblx0XHRmbG9hdCBkb3ROTCBceDNkIHNhdHVyYXRlKCBkb3QoIGdlb21ldHJ5Lm5vcm1hbCwgZGlyZWN0TGlnaHQuZGlyZWN0aW9uICkgKTtcblx0XHR2ZWMzIGlycmFkaWFuY2UgXHgzZCBkb3ROTCAqIGRpcmVjdExpZ2h0LmNvbG9yO1xuXHQjZW5kaWZcblx0I2lmbmRlZiBQSFlTSUNBTExZX0NPUlJFQ1RfTElHSFRTXG5cdFx0aXJyYWRpYW5jZSAqXHgzZCBQSTtcblx0I2VuZGlmXG5cdHJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgK1x4M2QgaXJyYWRpYW5jZSAqIEJSREZfRGlmZnVzZV9MYW1iZXJ0KCBtYXRlcmlhbC5kaWZmdXNlQ29sb3IgKTtcblx0cmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXIgK1x4M2QgaXJyYWRpYW5jZSAqIEJSREZfU3BlY3VsYXJfQmxpbm5QaG9uZyggZGlyZWN0TGlnaHQsIGdlb21ldHJ5LCBtYXRlcmlhbC5zcGVjdWxhckNvbG9yLCBtYXRlcmlhbC5zcGVjdWxhclNoaW5pbmVzcyApICogbWF0ZXJpYWwuc3BlY3VsYXJTdHJlbmd0aDtcbn1cbnZvaWQgUkVfSW5kaXJlY3REaWZmdXNlX0JsaW5uUGhvbmcoIGNvbnN0IGluIHZlYzMgaXJyYWRpYW5jZSwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gQmxpbm5QaG9uZ01hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCApIHtcblx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICtceDNkIGlycmFkaWFuY2UgKiBCUkRGX0RpZmZ1c2VfTGFtYmVydCggbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICk7XG59XG4jZGVmaW5lIFJFX0RpcmVjdFx0XHRcdFx0UkVfRGlyZWN0X0JsaW5uUGhvbmdcbiNkZWZpbmUgUkVfSW5kaXJlY3REaWZmdXNlXHRcdFJFX0luZGlyZWN0RGlmZnVzZV9CbGlublBob25nXG4jZGVmaW5lIE1hdGVyaWFsX0xpZ2h0UHJvYmVMT0QoIG1hdGVyaWFsIClcdCgwKSIsCmxpZ2h0c19waHlzaWNhbF9mcmFnbWVudDoiUGh5c2ljYWxNYXRlcmlhbCBtYXRlcmlhbDtcbm1hdGVyaWFsLmRpZmZ1c2VDb2xvciBceDNkIGRpZmZ1c2VDb2xvci5yZ2IgKiAoIDEuMCAtIG1ldGFsbmVzc0ZhY3RvciApO1xubWF0ZXJpYWwuc3BlY3VsYXJSb3VnaG5lc3MgXHgzZCBjbGFtcCggcm91Z2huZXNzRmFjdG9yLCAwLjA0LCAxLjAgKTtcbiNpZmRlZiBTVEFOREFSRFxuXHRtYXRlcmlhbC5zcGVjdWxhckNvbG9yIFx4M2QgbWl4KCB2ZWMzKCBERUZBVUxUX1NQRUNVTEFSX0NPRUZGSUNJRU5UICksIGRpZmZ1c2VDb2xvci5yZ2IsIG1ldGFsbmVzc0ZhY3RvciApO1xuI2Vsc2Vcblx0bWF0ZXJpYWwuc3BlY3VsYXJDb2xvciBceDNkIG1peCggdmVjMyggTUFYSU1VTV9TUEVDVUxBUl9DT0VGRklDSUVOVCAqIHBvdzIoIHJlZmxlY3Rpdml0eSApICksIGRpZmZ1c2VDb2xvci5yZ2IsIG1ldGFsbmVzc0ZhY3RvciApO1xuXHRtYXRlcmlhbC5jbGVhckNvYXQgXHgzZCBzYXR1cmF0ZSggY2xlYXJDb2F0ICk7XHRtYXRlcmlhbC5jbGVhckNvYXRSb3VnaG5lc3MgXHgzZCBjbGFtcCggY2xlYXJDb2F0Um91Z2huZXNzLCAwLjA0LCAxLjAgKTtcbiNlbmRpZiIsCmxpZ2h0c19waHlzaWNhbF9wYXJzX2ZyYWdtZW50OiJzdHJ1Y3QgUGh5c2ljYWxNYXRlcmlhbCB7XG5cdHZlYzNcdGRpZmZ1c2VDb2xvcjtcblx0ZmxvYXRcdHNwZWN1bGFyUm91Z2huZXNzO1xuXHR2ZWMzXHRzcGVjdWxhckNvbG9yO1xuXHQjaWZuZGVmIFNUQU5EQVJEXG5cdFx0ZmxvYXQgY2xlYXJDb2F0O1xuXHRcdGZsb2F0IGNsZWFyQ29hdFJvdWdobmVzcztcblx0I2VuZGlmXG59O1xuI2RlZmluZSBNQVhJTVVNX1NQRUNVTEFSX0NPRUZGSUNJRU5UIDAuMTZcbiNkZWZpbmUgREVGQVVMVF9TUEVDVUxBUl9DT0VGRklDSUVOVCAwLjA0XG5mbG9hdCBjbGVhckNvYXRESFJBcHByb3goIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcywgY29uc3QgaW4gZmxvYXQgZG90TkwgKSB7XG5cdHJldHVybiBERUZBVUxUX1NQRUNVTEFSX0NPRUZGSUNJRU5UICsgKCAxLjAgLSBERUZBVUxUX1NQRUNVTEFSX0NPRUZGSUNJRU5UICkgKiAoIHBvdyggMS4wIC0gZG90TkwsIDUuMCApICogcG93KCAxLjAgLSByb3VnaG5lc3MsIDIuMCApICk7XG59XG4jaWYgTlVNX1JFQ1RfQVJFQV9MSUdIVFMgXHgzZSAwXG5cdHZvaWQgUkVfRGlyZWN0X1JlY3RBcmVhX1BoeXNpY2FsKCBjb25zdCBpbiBSZWN0QXJlYUxpZ2h0IHJlY3RBcmVhTGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIFBoeXNpY2FsTWF0ZXJpYWwgbWF0ZXJpYWwsIGlub3V0IFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ICkge1xuXHRcdHZlYzMgbm9ybWFsIFx4M2QgZ2VvbWV0cnkubm9ybWFsO1xuXHRcdHZlYzMgdmlld0RpciBceDNkIGdlb21ldHJ5LnZpZXdEaXI7XG5cdFx0dmVjMyBwb3NpdGlvbiBceDNkIGdlb21ldHJ5LnBvc2l0aW9uO1xuXHRcdHZlYzMgbGlnaHRQb3MgXHgzZCByZWN0QXJlYUxpZ2h0LnBvc2l0aW9uO1xuXHRcdHZlYzMgaGFsZldpZHRoIFx4M2QgcmVjdEFyZWFMaWdodC5oYWxmV2lkdGg7XG5cdFx0dmVjMyBoYWxmSGVpZ2h0IFx4M2QgcmVjdEFyZWFMaWdodC5oYWxmSGVpZ2h0O1xuXHRcdHZlYzMgbGlnaHRDb2xvciBceDNkIHJlY3RBcmVhTGlnaHQuY29sb3I7XG5cdFx0ZmxvYXQgcm91Z2huZXNzIFx4M2QgbWF0ZXJpYWwuc3BlY3VsYXJSb3VnaG5lc3M7XG5cdFx0dmVjMyByZWN0Q29vcmRzWyA0IF07XG5cdFx0cmVjdENvb3Jkc1sgMCBdIFx4M2QgbGlnaHRQb3MgKyBoYWxmV2lkdGggLSBoYWxmSGVpZ2h0O1x0XHRyZWN0Q29vcmRzWyAxIF0gXHgzZCBsaWdodFBvcyAtIGhhbGZXaWR0aCAtIGhhbGZIZWlnaHQ7XG5cdFx0cmVjdENvb3Jkc1sgMiBdIFx4M2QgbGlnaHRQb3MgLSBoYWxmV2lkdGggKyBoYWxmSGVpZ2h0O1xuXHRcdHJlY3RDb29yZHNbIDMgXSBceDNkIGxpZ2h0UG9zICsgaGFsZldpZHRoICsgaGFsZkhlaWdodDtcblx0XHR2ZWMyIHV2IFx4M2QgTFRDX1V2KCBub3JtYWwsIHZpZXdEaXIsIHJvdWdobmVzcyApO1xuXHRcdHZlYzQgdDEgXHgzZCB0ZXh0dXJlMkQoIGx0Y18xLCB1diApO1xuXHRcdHZlYzQgdDIgXHgzZCB0ZXh0dXJlMkQoIGx0Y18yLCB1diApO1xuXHRcdG1hdDMgbUludiBceDNkIG1hdDMoXG5cdFx0XHR2ZWMzKCB0MS54LCAwLCB0MS55ICksXG5cdFx0XHR2ZWMzKCAgICAwLCAxLCAgICAwICksXG5cdFx0XHR2ZWMzKCB0MS56LCAwLCB0MS53IClcblx0XHQpO1xuXHRcdHZlYzMgZnJlc25lbCBceDNkICggbWF0ZXJpYWwuc3BlY3VsYXJDb2xvciAqIHQyLnggKyAoIHZlYzMoIDEuMCApIC0gbWF0ZXJpYWwuc3BlY3VsYXJDb2xvciApICogdDIueSApO1xuXHRcdHJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyICtceDNkIGxpZ2h0Q29sb3IgKiBmcmVzbmVsICogTFRDX0V2YWx1YXRlKCBub3JtYWwsIHZpZXdEaXIsIHBvc2l0aW9uLCBtSW52LCByZWN0Q29vcmRzICk7XG5cdFx0cmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArXHgzZCBsaWdodENvbG9yICogbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICogTFRDX0V2YWx1YXRlKCBub3JtYWwsIHZpZXdEaXIsIHBvc2l0aW9uLCBtYXQzKCAxLjAgKSwgcmVjdENvb3JkcyApO1xuXHR9XG4jZW5kaWZcbnZvaWQgUkVfRGlyZWN0X1BoeXNpY2FsKCBjb25zdCBpbiBJbmNpZGVudExpZ2h0IGRpcmVjdExpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiBQaHlzaWNhbE1hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCApIHtcblx0ZmxvYXQgZG90TkwgXHgzZCBzYXR1cmF0ZSggZG90KCBnZW9tZXRyeS5ub3JtYWwsIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiApICk7XG5cdHZlYzMgaXJyYWRpYW5jZSBceDNkIGRvdE5MICogZGlyZWN0TGlnaHQuY29sb3I7XG5cdCNpZm5kZWYgUEhZU0lDQUxMWV9DT1JSRUNUX0xJR0hUU1xuXHRcdGlycmFkaWFuY2UgKlx4M2QgUEk7XG5cdCNlbmRpZlxuXHQjaWZuZGVmIFNUQU5EQVJEXG5cdFx0ZmxvYXQgY2xlYXJDb2F0REhSIFx4M2QgbWF0ZXJpYWwuY2xlYXJDb2F0ICogY2xlYXJDb2F0REhSQXBwcm94KCBtYXRlcmlhbC5jbGVhckNvYXRSb3VnaG5lc3MsIGRvdE5MICk7XG5cdCNlbHNlXG5cdFx0ZmxvYXQgY2xlYXJDb2F0REhSIFx4M2QgMC4wO1xuXHQjZW5kaWZcblx0cmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXIgK1x4M2QgKCAxLjAgLSBjbGVhckNvYXRESFIgKSAqIGlycmFkaWFuY2UgKiBCUkRGX1NwZWN1bGFyX0dHWCggZGlyZWN0TGlnaHQsIGdlb21ldHJ5LCBtYXRlcmlhbC5zcGVjdWxhckNvbG9yLCBtYXRlcmlhbC5zcGVjdWxhclJvdWdobmVzcyApO1xuXHRyZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICtceDNkICggMS4wIC0gY2xlYXJDb2F0REhSICkgKiBpcnJhZGlhbmNlICogQlJERl9EaWZmdXNlX0xhbWJlcnQoIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciApO1xuXHQjaWZuZGVmIFNUQU5EQVJEXG5cdFx0cmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXIgK1x4M2QgaXJyYWRpYW5jZSAqIG1hdGVyaWFsLmNsZWFyQ29hdCAqIEJSREZfU3BlY3VsYXJfR0dYKCBkaXJlY3RMaWdodCwgZ2VvbWV0cnksIHZlYzMoIERFRkFVTFRfU1BFQ1VMQVJfQ09FRkZJQ0lFTlQgKSwgbWF0ZXJpYWwuY2xlYXJDb2F0Um91Z2huZXNzICk7XG5cdCNlbmRpZlxufVxudm9pZCBSRV9JbmRpcmVjdERpZmZ1c2VfUGh5c2ljYWwoIGNvbnN0IGluIHZlYzMgaXJyYWRpYW5jZSwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gUGh5c2ljYWxNYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgKSB7XG5cdCNpZm5kZWYgRU5WTUFQX1RZUEVfQ1VCRV9VVlxuXHRcdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArXHgzZCBpcnJhZGlhbmNlICogQlJERl9EaWZmdXNlX0xhbWJlcnQoIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciApO1xuXHQjZW5kaWZcbn1cbnZvaWQgUkVfSW5kaXJlY3RTcGVjdWxhcl9QaHlzaWNhbCggY29uc3QgaW4gdmVjMyByYWRpYW5jZSwgY29uc3QgaW4gdmVjMyBpcnJhZGlhbmNlLCBjb25zdCBpbiB2ZWMzIGNsZWFyQ29hdFJhZGlhbmNlLCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiBQaHlzaWNhbE1hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCkge1xuXHQjaWZuZGVmIFNUQU5EQVJEXG5cdFx0ZmxvYXQgZG90TlYgXHgzZCBzYXR1cmF0ZSggZG90KCBnZW9tZXRyeS5ub3JtYWwsIGdlb21ldHJ5LnZpZXdEaXIgKSApO1xuXHRcdGZsb2F0IGRvdE5MIFx4M2QgZG90TlY7XG5cdFx0ZmxvYXQgY2xlYXJDb2F0REhSIFx4M2QgbWF0ZXJpYWwuY2xlYXJDb2F0ICogY2xlYXJDb2F0REhSQXBwcm94KCBtYXRlcmlhbC5jbGVhckNvYXRSb3VnaG5lc3MsIGRvdE5MICk7XG5cdCNlbHNlXG5cdFx0ZmxvYXQgY2xlYXJDb2F0REhSIFx4M2QgMC4wO1xuXHQjZW5kaWZcblx0ZmxvYXQgY2xlYXJDb2F0SW52IFx4M2QgMS4wIC0gY2xlYXJDb2F0REhSO1xuXHQjaWYgZGVmaW5lZCggRU5WTUFQX1RZUEVfQ1VCRV9VViApXG5cdFx0dmVjMyBzaW5nbGVTY2F0dGVyaW5nIFx4M2QgdmVjMyggMC4wICk7XG5cdFx0dmVjMyBtdWx0aVNjYXR0ZXJpbmcgXHgzZCB2ZWMzKCAwLjAgKTtcblx0XHR2ZWMzIGNvc2luZVdlaWdodGVkSXJyYWRpYW5jZSBceDNkIGlycmFkaWFuY2UgKiBSRUNJUFJPQ0FMX1BJO1xuXHRcdEJSREZfU3BlY3VsYXJfTXVsdGlzY2F0dGVyaW5nX0Vudmlyb25tZW50KCBnZW9tZXRyeSwgbWF0ZXJpYWwuc3BlY3VsYXJDb2xvciwgbWF0ZXJpYWwuc3BlY3VsYXJSb3VnaG5lc3MsIHNpbmdsZVNjYXR0ZXJpbmcsIG11bHRpU2NhdHRlcmluZyApO1xuXHRcdHZlYzMgZGlmZnVzZSBceDNkIG1hdGVyaWFsLmRpZmZ1c2VDb2xvcjtcblx0XHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdFNwZWN1bGFyICtceDNkIGNsZWFyQ29hdEludiAqIHJhZGlhbmNlICogc2luZ2xlU2NhdHRlcmluZztcblx0XHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgK1x4M2QgbXVsdGlTY2F0dGVyaW5nICogY29zaW5lV2VpZ2h0ZWRJcnJhZGlhbmNlO1xuXHRcdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArXHgzZCBkaWZmdXNlICogY29zaW5lV2VpZ2h0ZWRJcnJhZGlhbmNlO1xuXHQjZWxzZVxuXHRcdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0U3BlY3VsYXIgK1x4M2QgY2xlYXJDb2F0SW52ICogcmFkaWFuY2UgKiBCUkRGX1NwZWN1bGFyX0dHWF9FbnZpcm9ubWVudCggZ2VvbWV0cnksIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IsIG1hdGVyaWFsLnNwZWN1bGFyUm91Z2huZXNzICk7XG5cdCNlbmRpZlxuXHQjaWZuZGVmIFNUQU5EQVJEXG5cdFx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3RTcGVjdWxhciArXHgzZCBjbGVhckNvYXRSYWRpYW5jZSAqIG1hdGVyaWFsLmNsZWFyQ29hdCAqIEJSREZfU3BlY3VsYXJfR0dYX0Vudmlyb25tZW50KCBnZW9tZXRyeSwgdmVjMyggREVGQVVMVF9TUEVDVUxBUl9DT0VGRklDSUVOVCApLCBtYXRlcmlhbC5jbGVhckNvYXRSb3VnaG5lc3MgKTtcblx0I2VuZGlmXG59XG4jZGVmaW5lIFJFX0RpcmVjdFx0XHRcdFx0UkVfRGlyZWN0X1BoeXNpY2FsXG4jZGVmaW5lIFJFX0RpcmVjdF9SZWN0QXJlYVx0XHRSRV9EaXJlY3RfUmVjdEFyZWFfUGh5c2ljYWxcbiNkZWZpbmUgUkVfSW5kaXJlY3REaWZmdXNlXHRcdFJFX0luZGlyZWN0RGlmZnVzZV9QaHlzaWNhbFxuI2RlZmluZSBSRV9JbmRpcmVjdFNwZWN1bGFyXHRcdFJFX0luZGlyZWN0U3BlY3VsYXJfUGh5c2ljYWxcbiNkZWZpbmUgTWF0ZXJpYWxfQmxpbm5TaGluaW5lc3NFeHBvbmVudCggbWF0ZXJpYWwgKSAgIEdHWFJvdWdobmVzc1RvQmxpbm5FeHBvbmVudCggbWF0ZXJpYWwuc3BlY3VsYXJSb3VnaG5lc3MgKVxuI2RlZmluZSBNYXRlcmlhbF9DbGVhckNvYXRfQmxpbm5TaGluaW5lc3NFeHBvbmVudCggbWF0ZXJpYWwgKSAgIEdHWFJvdWdobmVzc1RvQmxpbm5FeHBvbmVudCggbWF0ZXJpYWwuY2xlYXJDb2F0Um91Z2huZXNzIClcbmZsb2F0IGNvbXB1dGVTcGVjdWxhck9jY2x1c2lvbiggY29uc3QgaW4gZmxvYXQgZG90TlYsIGNvbnN0IGluIGZsb2F0IGFtYmllbnRPY2NsdXNpb24sIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcyApIHtcblx0cmV0dXJuIHNhdHVyYXRlKCBwb3coIGRvdE5WICsgYW1iaWVudE9jY2x1c2lvbiwgZXhwMiggLSAxNi4wICogcm91Z2huZXNzIC0gMS4wICkgKSAtIDEuMCArIGFtYmllbnRPY2NsdXNpb24gKTtcbn0iLApsaWdodHNfZnJhZ21lbnRfYmVnaW46IlxuR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeTtcbmdlb21ldHJ5LnBvc2l0aW9uIFx4M2QgLSB2Vmlld1Bvc2l0aW9uO1xuZ2VvbWV0cnkubm9ybWFsIFx4M2Qgbm9ybWFsO1xuZ2VvbWV0cnkudmlld0RpciBceDNkIG5vcm1hbGl6ZSggdlZpZXdQb3NpdGlvbiApO1xuSW5jaWRlbnRMaWdodCBkaXJlY3RMaWdodDtcbiNpZiAoIE5VTV9QT0lOVF9MSUdIVFMgXHgzZSAwICkgXHgyNlx4MjYgZGVmaW5lZCggUkVfRGlyZWN0IClcblx0UG9pbnRMaWdodCBwb2ludExpZ2h0O1xuXHQjcHJhZ21hIHVucm9sbF9sb29wXG5cdGZvciAoIGludCBpIFx4M2QgMDsgaSBceDNjIE5VTV9QT0lOVF9MSUdIVFM7IGkgKysgKSB7XG5cdFx0cG9pbnRMaWdodCBceDNkIHBvaW50TGlnaHRzWyBpIF07XG5cdFx0Z2V0UG9pbnREaXJlY3RMaWdodElycmFkaWFuY2UoIHBvaW50TGlnaHQsIGdlb21ldHJ5LCBkaXJlY3RMaWdodCApO1xuXHRcdCNpZmRlZiBVU0VfU0hBRE9XTUFQXG5cdFx0ZGlyZWN0TGlnaHQuY29sb3IgKlx4M2QgYWxsKCBidmVjMiggcG9pbnRMaWdodC5zaGFkb3csIGRpcmVjdExpZ2h0LnZpc2libGUgKSApID8gZ2V0UG9pbnRTaGFkb3coIHBvaW50U2hhZG93TWFwWyBpIF0sIHBvaW50TGlnaHQuc2hhZG93TWFwU2l6ZSwgcG9pbnRMaWdodC5zaGFkb3dCaWFzLCBwb2ludExpZ2h0LnNoYWRvd1JhZGl1cywgdlBvaW50U2hhZG93Q29vcmRbIGkgXSwgcG9pbnRMaWdodC5zaGFkb3dDYW1lcmFOZWFyLCBwb2ludExpZ2h0LnNoYWRvd0NhbWVyYUZhciApIDogMS4wO1xuXHRcdCNlbmRpZlxuXHRcdFJFX0RpcmVjdCggZGlyZWN0TGlnaHQsIGdlb21ldHJ5LCBtYXRlcmlhbCwgcmVmbGVjdGVkTGlnaHQgKTtcblx0fVxuI2VuZGlmXG4jaWYgKCBOVU1fU1BPVF9MSUdIVFMgXHgzZSAwICkgXHgyNlx4MjYgZGVmaW5lZCggUkVfRGlyZWN0IClcblx0U3BvdExpZ2h0IHNwb3RMaWdodDtcblx0I3ByYWdtYSB1bnJvbGxfbG9vcFxuXHRmb3IgKCBpbnQgaSBceDNkIDA7IGkgXHgzYyBOVU1fU1BPVF9MSUdIVFM7IGkgKysgKSB7XG5cdFx0c3BvdExpZ2h0IFx4M2Qgc3BvdExpZ2h0c1sgaSBdO1xuXHRcdGdldFNwb3REaXJlY3RMaWdodElycmFkaWFuY2UoIHNwb3RMaWdodCwgZ2VvbWV0cnksIGRpcmVjdExpZ2h0ICk7XG5cdFx0I2lmZGVmIFVTRV9TSEFET1dNQVBcblx0XHRkaXJlY3RMaWdodC5jb2xvciAqXHgzZCBhbGwoIGJ2ZWMyKCBzcG90TGlnaHQuc2hhZG93LCBkaXJlY3RMaWdodC52aXNpYmxlICkgKSA/IGdldFNoYWRvdyggc3BvdFNoYWRvd01hcFsgaSBdLCBzcG90TGlnaHQuc2hhZG93TWFwU2l6ZSwgc3BvdExpZ2h0LnNoYWRvd0JpYXMsIHNwb3RMaWdodC5zaGFkb3dSYWRpdXMsIHZTcG90U2hhZG93Q29vcmRbIGkgXSApIDogMS4wO1xuXHRcdCNlbmRpZlxuXHRcdFJFX0RpcmVjdCggZGlyZWN0TGlnaHQsIGdlb21ldHJ5LCBtYXRlcmlhbCwgcmVmbGVjdGVkTGlnaHQgKTtcblx0fVxuI2VuZGlmXG4jaWYgKCBOVU1fRElSX0xJR0hUUyBceDNlIDAgKSBceDI2XHgyNiBkZWZpbmVkKCBSRV9EaXJlY3QgKVxuXHREaXJlY3Rpb25hbExpZ2h0IGRpcmVjdGlvbmFsTGlnaHQ7XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3Bcblx0Zm9yICggaW50IGkgXHgzZCAwOyBpIFx4M2MgTlVNX0RJUl9MSUdIVFM7IGkgKysgKSB7XG5cdFx0ZGlyZWN0aW9uYWxMaWdodCBceDNkIGRpcmVjdGlvbmFsTGlnaHRzWyBpIF07XG5cdFx0Z2V0RGlyZWN0aW9uYWxEaXJlY3RMaWdodElycmFkaWFuY2UoIGRpcmVjdGlvbmFsTGlnaHQsIGdlb21ldHJ5LCBkaXJlY3RMaWdodCApO1xuXHRcdCNpZmRlZiBVU0VfU0hBRE9XTUFQXG5cdFx0ZGlyZWN0TGlnaHQuY29sb3IgKlx4M2QgYWxsKCBidmVjMiggZGlyZWN0aW9uYWxMaWdodC5zaGFkb3csIGRpcmVjdExpZ2h0LnZpc2libGUgKSApID8gZ2V0U2hhZG93KCBkaXJlY3Rpb25hbFNoYWRvd01hcFsgaSBdLCBkaXJlY3Rpb25hbExpZ2h0LnNoYWRvd01hcFNpemUsIGRpcmVjdGlvbmFsTGlnaHQuc2hhZG93QmlhcywgZGlyZWN0aW9uYWxMaWdodC5zaGFkb3dSYWRpdXMsIHZEaXJlY3Rpb25hbFNoYWRvd0Nvb3JkWyBpIF0gKSA6IDEuMDtcblx0XHQjZW5kaWZcblx0XHRSRV9EaXJlY3QoIGRpcmVjdExpZ2h0LCBnZW9tZXRyeSwgbWF0ZXJpYWwsIHJlZmxlY3RlZExpZ2h0ICk7XG5cdH1cbiNlbmRpZlxuI2lmICggTlVNX1JFQ1RfQVJFQV9MSUdIVFMgXHgzZSAwICkgXHgyNlx4MjYgZGVmaW5lZCggUkVfRGlyZWN0X1JlY3RBcmVhIClcblx0UmVjdEFyZWFMaWdodCByZWN0QXJlYUxpZ2h0O1xuXHQjcHJhZ21hIHVucm9sbF9sb29wXG5cdGZvciAoIGludCBpIFx4M2QgMDsgaSBceDNjIE5VTV9SRUNUX0FSRUFfTElHSFRTOyBpICsrICkge1xuXHRcdHJlY3RBcmVhTGlnaHQgXHgzZCByZWN0QXJlYUxpZ2h0c1sgaSBdO1xuXHRcdFJFX0RpcmVjdF9SZWN0QXJlYSggcmVjdEFyZWFMaWdodCwgZ2VvbWV0cnksIG1hdGVyaWFsLCByZWZsZWN0ZWRMaWdodCApO1xuXHR9XG4jZW5kaWZcbiNpZiBkZWZpbmVkKCBSRV9JbmRpcmVjdERpZmZ1c2UgKVxuXHR2ZWMzIGlycmFkaWFuY2UgXHgzZCBnZXRBbWJpZW50TGlnaHRJcnJhZGlhbmNlKCBhbWJpZW50TGlnaHRDb2xvciApO1xuXHRpcnJhZGlhbmNlICtceDNkIGdldExpZ2h0UHJvYmVJcnJhZGlhbmNlKCBsaWdodFByb2JlLCBnZW9tZXRyeSApO1xuXHQjaWYgKCBOVU1fSEVNSV9MSUdIVFMgXHgzZSAwIClcblx0XHQjcHJhZ21hIHVucm9sbF9sb29wXG5cdFx0Zm9yICggaW50IGkgXHgzZCAwOyBpIFx4M2MgTlVNX0hFTUlfTElHSFRTOyBpICsrICkge1xuXHRcdFx0aXJyYWRpYW5jZSArXHgzZCBnZXRIZW1pc3BoZXJlTGlnaHRJcnJhZGlhbmNlKCBoZW1pc3BoZXJlTGlnaHRzWyBpIF0sIGdlb21ldHJ5ICk7XG5cdFx0fVxuXHQjZW5kaWZcbiNlbmRpZlxuI2lmIGRlZmluZWQoIFJFX0luZGlyZWN0U3BlY3VsYXIgKVxuXHR2ZWMzIHJhZGlhbmNlIFx4M2QgdmVjMyggMC4wICk7XG5cdHZlYzMgY2xlYXJDb2F0UmFkaWFuY2UgXHgzZCB2ZWMzKCAwLjAgKTtcbiNlbmRpZiIsCmxpZ2h0c19mcmFnbWVudF9tYXBzOiIjaWYgZGVmaW5lZCggUkVfSW5kaXJlY3REaWZmdXNlIClcblx0I2lmZGVmIFVTRV9MSUdIVE1BUFxuXHRcdHZlYzMgbGlnaHRNYXBJcnJhZGlhbmNlIFx4M2QgdGV4dHVyZTJEKCBsaWdodE1hcCwgdlV2MiApLnh5eiAqIGxpZ2h0TWFwSW50ZW5zaXR5O1xuXHRcdCNpZm5kZWYgUEhZU0lDQUxMWV9DT1JSRUNUX0xJR0hUU1xuXHRcdFx0bGlnaHRNYXBJcnJhZGlhbmNlICpceDNkIFBJO1xuXHRcdCNlbmRpZlxuXHRcdGlycmFkaWFuY2UgK1x4M2QgbGlnaHRNYXBJcnJhZGlhbmNlO1xuXHQjZW5kaWZcblx0I2lmIGRlZmluZWQoIFVTRV9FTlZNQVAgKSBceDI2XHgyNiBkZWZpbmVkKCBQSFlTSUNBTCApIFx4MjZceDI2IGRlZmluZWQoIEVOVk1BUF9UWVBFX0NVQkVfVVYgKVxuXHRcdGlycmFkaWFuY2UgK1x4M2QgZ2V0TGlnaHRQcm9iZUluZGlyZWN0SXJyYWRpYW5jZSggZ2VvbWV0cnksIG1heE1pcExldmVsICk7XG5cdCNlbmRpZlxuI2VuZGlmXG4jaWYgZGVmaW5lZCggVVNFX0VOVk1BUCApIFx4MjZceDI2IGRlZmluZWQoIFJFX0luZGlyZWN0U3BlY3VsYXIgKVxuXHRyYWRpYW5jZSArXHgzZCBnZXRMaWdodFByb2JlSW5kaXJlY3RSYWRpYW5jZSggZ2VvbWV0cnksIE1hdGVyaWFsX0JsaW5uU2hpbmluZXNzRXhwb25lbnQoIG1hdGVyaWFsICksIG1heE1pcExldmVsICk7XG5cdCNpZm5kZWYgU1RBTkRBUkRcblx0XHRjbGVhckNvYXRSYWRpYW5jZSArXHgzZCBnZXRMaWdodFByb2JlSW5kaXJlY3RSYWRpYW5jZSggZ2VvbWV0cnksIE1hdGVyaWFsX0NsZWFyQ29hdF9CbGlublNoaW5pbmVzc0V4cG9uZW50KCBtYXRlcmlhbCApLCBtYXhNaXBMZXZlbCApO1xuXHQjZW5kaWZcbiNlbmRpZiIsCmxpZ2h0c19mcmFnbWVudF9lbmQ6IiNpZiBkZWZpbmVkKCBSRV9JbmRpcmVjdERpZmZ1c2UgKVxuXHRSRV9JbmRpcmVjdERpZmZ1c2UoIGlycmFkaWFuY2UsIGdlb21ldHJ5LCBtYXRlcmlhbCwgcmVmbGVjdGVkTGlnaHQgKTtcbiNlbmRpZlxuI2lmIGRlZmluZWQoIFJFX0luZGlyZWN0U3BlY3VsYXIgKVxuXHRSRV9JbmRpcmVjdFNwZWN1bGFyKCByYWRpYW5jZSwgaXJyYWRpYW5jZSwgY2xlYXJDb2F0UmFkaWFuY2UsIGdlb21ldHJ5LCBtYXRlcmlhbCwgcmVmbGVjdGVkTGlnaHQgKTtcbiNlbmRpZiIsbG9nZGVwdGhidWZfZnJhZ21lbnQ6IiNpZiBkZWZpbmVkKCBVU0VfTE9HREVQVEhCVUYgKSBceDI2XHgyNiBkZWZpbmVkKCBVU0VfTE9HREVQVEhCVUZfRVhUIClcblx0Z2xfRnJhZ0RlcHRoRVhUIFx4M2QgbG9nMiggdkZyYWdEZXB0aCApICogbG9nRGVwdGhCdWZGQyAqIDAuNTtcbiNlbmRpZiIsbG9nZGVwdGhidWZfcGFyc19mcmFnbWVudDoiI2lmIGRlZmluZWQoIFVTRV9MT0dERVBUSEJVRiApIFx4MjZceDI2IGRlZmluZWQoIFVTRV9MT0dERVBUSEJVRl9FWFQgKVxuXHR1bmlmb3JtIGZsb2F0IGxvZ0RlcHRoQnVmRkM7XG5cdHZhcnlpbmcgZmxvYXQgdkZyYWdEZXB0aDtcbiNlbmRpZiIsCmxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4OiIjaWZkZWYgVVNFX0xPR0RFUFRIQlVGXG5cdCNpZmRlZiBVU0VfTE9HREVQVEhCVUZfRVhUXG5cdFx0dmFyeWluZyBmbG9hdCB2RnJhZ0RlcHRoO1xuXHQjZWxzZVxuXHRcdHVuaWZvcm0gZmxvYXQgbG9nRGVwdGhCdWZGQztcblx0I2VuZGlmXG4jZW5kaWYiLGxvZ2RlcHRoYnVmX3ZlcnRleDoiI2lmZGVmIFVTRV9MT0dERVBUSEJVRlxuXHQjaWZkZWYgVVNFX0xPR0RFUFRIQlVGX0VYVFxuXHRcdHZGcmFnRGVwdGggXHgzZCAxLjAgKyBnbF9Qb3NpdGlvbi53O1xuXHQjZWxzZVxuXHRcdGdsX1Bvc2l0aW9uLnogXHgzZCBsb2cyKCBtYXgoIEVQU0lMT04sIGdsX1Bvc2l0aW9uLncgKyAxLjAgKSApICogbG9nRGVwdGhCdWZGQyAtIDEuMDtcblx0XHRnbF9Qb3NpdGlvbi56ICpceDNkIGdsX1Bvc2l0aW9uLnc7XG5cdCNlbmRpZlxuI2VuZGlmIixtYXBfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfTUFQXG5cdHZlYzQgdGV4ZWxDb2xvciBceDNkIHRleHR1cmUyRCggbWFwLCB2VXYgKTtcblx0dGV4ZWxDb2xvciBceDNkIG1hcFRleGVsVG9MaW5lYXIoIHRleGVsQ29sb3IgKTtcblx0ZGlmZnVzZUNvbG9yICpceDNkIHRleGVsQ29sb3I7XG4jZW5kaWYiLAptYXBfcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9NQVBcblx0dW5pZm9ybSBzYW1wbGVyMkQgbWFwO1xuI2VuZGlmIixtYXBfcGFydGljbGVfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfTUFQXG5cdHZlYzIgdXYgXHgzZCAoIHV2VHJhbnNmb3JtICogdmVjMyggZ2xfUG9pbnRDb29yZC54LCAxLjAgLSBnbF9Qb2ludENvb3JkLnksIDEgKSApLnh5O1xuXHR2ZWM0IG1hcFRleGVsIFx4M2QgdGV4dHVyZTJEKCBtYXAsIHV2ICk7XG5cdGRpZmZ1c2VDb2xvciAqXHgzZCBtYXBUZXhlbFRvTGluZWFyKCBtYXBUZXhlbCApO1xuI2VuZGlmIixtYXBfcGFydGljbGVfcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9NQVBcblx0dW5pZm9ybSBtYXQzIHV2VHJhbnNmb3JtO1xuXHR1bmlmb3JtIHNhbXBsZXIyRCBtYXA7XG4jZW5kaWYiLG1ldGFsbmVzc21hcF9mcmFnbWVudDoiZmxvYXQgbWV0YWxuZXNzRmFjdG9yIFx4M2QgbWV0YWxuZXNzO1xuI2lmZGVmIFVTRV9NRVRBTE5FU1NNQVBcblx0dmVjNCB0ZXhlbE1ldGFsbmVzcyBceDNkIHRleHR1cmUyRCggbWV0YWxuZXNzTWFwLCB2VXYgKTtcblx0bWV0YWxuZXNzRmFjdG9yICpceDNkIHRleGVsTWV0YWxuZXNzLmI7XG4jZW5kaWYiLAptZXRhbG5lc3NtYXBfcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9NRVRBTE5FU1NNQVBcblx0dW5pZm9ybSBzYW1wbGVyMkQgbWV0YWxuZXNzTWFwO1xuI2VuZGlmIixtb3JwaG5vcm1hbF92ZXJ0ZXg6IiNpZmRlZiBVU0VfTU9SUEhOT1JNQUxTXG5cdG9iamVjdE5vcm1hbCArXHgzZCAoIG1vcnBoTm9ybWFsMCAtIG5vcm1hbCApICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAwIF07XG5cdG9iamVjdE5vcm1hbCArXHgzZCAoIG1vcnBoTm9ybWFsMSAtIG5vcm1hbCApICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAxIF07XG5cdG9iamVjdE5vcm1hbCArXHgzZCAoIG1vcnBoTm9ybWFsMiAtIG5vcm1hbCApICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAyIF07XG5cdG9iamVjdE5vcm1hbCArXHgzZCAoIG1vcnBoTm9ybWFsMyAtIG5vcm1hbCApICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAzIF07XG4jZW5kaWYiLG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4OiIjaWZkZWYgVVNFX01PUlBIVEFSR0VUU1xuXHQjaWZuZGVmIFVTRV9NT1JQSE5PUk1BTFNcblx0dW5pZm9ybSBmbG9hdCBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDggXTtcblx0I2Vsc2Vcblx0dW5pZm9ybSBmbG9hdCBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDQgXTtcblx0I2VuZGlmXG4jZW5kaWYiLAptb3JwaHRhcmdldF92ZXJ0ZXg6IiNpZmRlZiBVU0VfTU9SUEhUQVJHRVRTXG5cdHRyYW5zZm9ybWVkICtceDNkICggbW9ycGhUYXJnZXQwIC0gcG9zaXRpb24gKSAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgMCBdO1xuXHR0cmFuc2Zvcm1lZCArXHgzZCAoIG1vcnBoVGFyZ2V0MSAtIHBvc2l0aW9uICkgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDEgXTtcblx0dHJhbnNmb3JtZWQgK1x4M2QgKCBtb3JwaFRhcmdldDIgLSBwb3NpdGlvbiApICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAyIF07XG5cdHRyYW5zZm9ybWVkICtceDNkICggbW9ycGhUYXJnZXQzIC0gcG9zaXRpb24gKSAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgMyBdO1xuXHQjaWZuZGVmIFVTRV9NT1JQSE5PUk1BTFNcblx0dHJhbnNmb3JtZWQgK1x4M2QgKCBtb3JwaFRhcmdldDQgLSBwb3NpdGlvbiApICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyA0IF07XG5cdHRyYW5zZm9ybWVkICtceDNkICggbW9ycGhUYXJnZXQ1IC0gcG9zaXRpb24gKSAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgNSBdO1xuXHR0cmFuc2Zvcm1lZCArXHgzZCAoIG1vcnBoVGFyZ2V0NiAtIHBvc2l0aW9uICkgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDYgXTtcblx0dHJhbnNmb3JtZWQgK1x4M2QgKCBtb3JwaFRhcmdldDcgLSBwb3NpdGlvbiApICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyA3IF07XG5cdCNlbmRpZlxuI2VuZGlmIiwKbm9ybWFsX2ZyYWdtZW50X2JlZ2luOiIjaWZkZWYgRkxBVF9TSEFERURcblx0dmVjMyBmZHggXHgzZCB2ZWMzKCBkRmR4KCB2Vmlld1Bvc2l0aW9uLnggKSwgZEZkeCggdlZpZXdQb3NpdGlvbi55ICksIGRGZHgoIHZWaWV3UG9zaXRpb24ueiApICk7XG5cdHZlYzMgZmR5IFx4M2QgdmVjMyggZEZkeSggdlZpZXdQb3NpdGlvbi54ICksIGRGZHkoIHZWaWV3UG9zaXRpb24ueSApLCBkRmR5KCB2Vmlld1Bvc2l0aW9uLnogKSApO1xuXHR2ZWMzIG5vcm1hbCBceDNkIG5vcm1hbGl6ZSggY3Jvc3MoIGZkeCwgZmR5ICkgKTtcbiNlbHNlXG5cdHZlYzMgbm9ybWFsIFx4M2Qgbm9ybWFsaXplKCB2Tm9ybWFsICk7XG5cdCNpZmRlZiBET1VCTEVfU0lERURcblx0XHRub3JtYWwgXHgzZCBub3JtYWwgKiAoIGZsb2F0KCBnbF9Gcm9udEZhY2luZyApICogMi4wIC0gMS4wICk7XG5cdCNlbmRpZlxuXHQjaWZkZWYgVVNFX1RBTkdFTlRcblx0XHR2ZWMzIHRhbmdlbnQgXHgzZCBub3JtYWxpemUoIHZUYW5nZW50ICk7XG5cdFx0dmVjMyBiaXRhbmdlbnQgXHgzZCBub3JtYWxpemUoIHZCaXRhbmdlbnQgKTtcblx0XHQjaWZkZWYgRE9VQkxFX1NJREVEXG5cdFx0XHR0YW5nZW50IFx4M2QgdGFuZ2VudCAqICggZmxvYXQoIGdsX0Zyb250RmFjaW5nICkgKiAyLjAgLSAxLjAgKTtcblx0XHRcdGJpdGFuZ2VudCBceDNkIGJpdGFuZ2VudCAqICggZmxvYXQoIGdsX0Zyb250RmFjaW5nICkgKiAyLjAgLSAxLjAgKTtcblx0XHQjZW5kaWZcblx0I2VuZGlmXG4jZW5kaWYiLApub3JtYWxfZnJhZ21lbnRfbWFwczoiI2lmZGVmIFVTRV9OT1JNQUxNQVBcblx0I2lmZGVmIE9CSkVDVFNQQUNFX05PUk1BTE1BUFxuXHRcdG5vcm1hbCBceDNkIHRleHR1cmUyRCggbm9ybWFsTWFwLCB2VXYgKS54eXogKiAyLjAgLSAxLjA7XG5cdFx0I2lmZGVmIEZMSVBfU0lERURcblx0XHRcdG5vcm1hbCBceDNkIC0gbm9ybWFsO1xuXHRcdCNlbmRpZlxuXHRcdCNpZmRlZiBET1VCTEVfU0lERURcblx0XHRcdG5vcm1hbCBceDNkIG5vcm1hbCAqICggZmxvYXQoIGdsX0Zyb250RmFjaW5nICkgKiAyLjAgLSAxLjAgKTtcblx0XHQjZW5kaWZcblx0XHRub3JtYWwgXHgzZCBub3JtYWxpemUoIG5vcm1hbE1hdHJpeCAqIG5vcm1hbCApO1xuXHQjZWxzZVxuXHRcdCNpZmRlZiBVU0VfVEFOR0VOVFxuXHRcdFx0bWF0MyB2VEJOIFx4M2QgbWF0MyggdGFuZ2VudCwgYml0YW5nZW50LCBub3JtYWwgKTtcblx0XHRcdHZlYzMgbWFwTiBceDNkIHRleHR1cmUyRCggbm9ybWFsTWFwLCB2VXYgKS54eXogKiAyLjAgLSAxLjA7XG5cdFx0XHRtYXBOLnh5IFx4M2Qgbm9ybWFsU2NhbGUgKiBtYXBOLnh5O1xuXHRcdFx0bm9ybWFsIFx4M2Qgbm9ybWFsaXplKCB2VEJOICogbWFwTiApO1xuXHRcdCNlbHNlXG5cdFx0XHRub3JtYWwgXHgzZCBwZXJ0dXJiTm9ybWFsMkFyYiggLXZWaWV3UG9zaXRpb24sIG5vcm1hbCApO1xuXHRcdCNlbmRpZlxuXHQjZW5kaWZcbiNlbGlmIGRlZmluZWQoIFVTRV9CVU1QTUFQIClcblx0bm9ybWFsIFx4M2QgcGVydHVyYk5vcm1hbEFyYiggLXZWaWV3UG9zaXRpb24sIG5vcm1hbCwgZEhkeHlfZndkKCkgKTtcbiNlbmRpZiIsCm5vcm1hbG1hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX05PUk1BTE1BUFxuXHR1bmlmb3JtIHNhbXBsZXIyRCBub3JtYWxNYXA7XG5cdHVuaWZvcm0gdmVjMiBub3JtYWxTY2FsZTtcblx0I2lmZGVmIE9CSkVDVFNQQUNFX05PUk1BTE1BUFxuXHRcdHVuaWZvcm0gbWF0MyBub3JtYWxNYXRyaXg7XG5cdCNlbHNlXG5cdFx0dmVjMyBwZXJ0dXJiTm9ybWFsMkFyYiggdmVjMyBleWVfcG9zLCB2ZWMzIHN1cmZfbm9ybSApIHtcblx0XHRcdHZlYzMgcTAgXHgzZCB2ZWMzKCBkRmR4KCBleWVfcG9zLnggKSwgZEZkeCggZXllX3Bvcy55ICksIGRGZHgoIGV5ZV9wb3MueiApICk7XG5cdFx0XHR2ZWMzIHExIFx4M2QgdmVjMyggZEZkeSggZXllX3Bvcy54ICksIGRGZHkoIGV5ZV9wb3MueSApLCBkRmR5KCBleWVfcG9zLnogKSApO1xuXHRcdFx0dmVjMiBzdDAgXHgzZCBkRmR4KCB2VXYuc3QgKTtcblx0XHRcdHZlYzIgc3QxIFx4M2QgZEZkeSggdlV2LnN0ICk7XG5cdFx0XHRmbG9hdCBzY2FsZSBceDNkIHNpZ24oIHN0MS50ICogc3QwLnMgLSBzdDAudCAqIHN0MS5zICk7XG5cdFx0XHR2ZWMzIFMgXHgzZCBub3JtYWxpemUoICggcTAgKiBzdDEudCAtIHExICogc3QwLnQgKSAqIHNjYWxlICk7XG5cdFx0XHR2ZWMzIFQgXHgzZCBub3JtYWxpemUoICggLSBxMCAqIHN0MS5zICsgcTEgKiBzdDAucyApICogc2NhbGUgKTtcblx0XHRcdHZlYzMgTiBceDNkIG5vcm1hbGl6ZSggc3VyZl9ub3JtICk7XG5cdFx0XHRtYXQzIHRzbiBceDNkIG1hdDMoIFMsIFQsIE4gKTtcblx0XHRcdHZlYzMgbWFwTiBceDNkIHRleHR1cmUyRCggbm9ybWFsTWFwLCB2VXYgKS54eXogKiAyLjAgLSAxLjA7XG5cdFx0XHRtYXBOLnh5ICpceDNkIG5vcm1hbFNjYWxlO1xuXHRcdFx0bWFwTi54eSAqXHgzZCAoIGZsb2F0KCBnbF9Gcm9udEZhY2luZyApICogMi4wIC0gMS4wICk7XG5cdFx0XHRyZXR1cm4gbm9ybWFsaXplKCB0c24gKiBtYXBOICk7XG5cdFx0fVxuXHQjZW5kaWZcbiNlbmRpZiIsCnBhY2tpbmc6InZlYzMgcGFja05vcm1hbFRvUkdCKCBjb25zdCBpbiB2ZWMzIG5vcm1hbCApIHtcblx0cmV0dXJuIG5vcm1hbGl6ZSggbm9ybWFsICkgKiAwLjUgKyAwLjU7XG59XG52ZWMzIHVucGFja1JHQlRvTm9ybWFsKCBjb25zdCBpbiB2ZWMzIHJnYiApIHtcblx0cmV0dXJuIDIuMCAqIHJnYi54eXogLSAxLjA7XG59XG5jb25zdCBmbG9hdCBQYWNrVXBzY2FsZSBceDNkIDI1Ni4gLyAyNTUuO2NvbnN0IGZsb2F0IFVucGFja0Rvd25zY2FsZSBceDNkIDI1NS4gLyAyNTYuO1xuY29uc3QgdmVjMyBQYWNrRmFjdG9ycyBceDNkIHZlYzMoIDI1Ni4gKiAyNTYuICogMjU2LiwgMjU2LiAqIDI1Ni4sICAyNTYuICk7XG5jb25zdCB2ZWM0IFVucGFja0ZhY3RvcnMgXHgzZCBVbnBhY2tEb3duc2NhbGUgLyB2ZWM0KCBQYWNrRmFjdG9ycywgMS4gKTtcbmNvbnN0IGZsb2F0IFNoaWZ0UmlnaHQ4IFx4M2QgMS4gLyAyNTYuO1xudmVjNCBwYWNrRGVwdGhUb1JHQkEoIGNvbnN0IGluIGZsb2F0IHYgKSB7XG5cdHZlYzQgciBceDNkIHZlYzQoIGZyYWN0KCB2ICogUGFja0ZhY3RvcnMgKSwgdiApO1xuXHRyLnl6dyAtXHgzZCByLnh5eiAqIFNoaWZ0UmlnaHQ4O1x0cmV0dXJuIHIgKiBQYWNrVXBzY2FsZTtcbn1cbmZsb2F0IHVucGFja1JHQkFUb0RlcHRoKCBjb25zdCBpbiB2ZWM0IHYgKSB7XG5cdHJldHVybiBkb3QoIHYsIFVucGFja0ZhY3RvcnMgKTtcbn1cbmZsb2F0IHZpZXdaVG9PcnRob2dyYXBoaWNEZXB0aCggY29uc3QgaW4gZmxvYXQgdmlld1osIGNvbnN0IGluIGZsb2F0IG5lYXIsIGNvbnN0IGluIGZsb2F0IGZhciApIHtcblx0cmV0dXJuICggdmlld1ogKyBuZWFyICkgLyAoIG5lYXIgLSBmYXIgKTtcbn1cbmZsb2F0IG9ydGhvZ3JhcGhpY0RlcHRoVG9WaWV3WiggY29uc3QgaW4gZmxvYXQgbGluZWFyQ2xpcFosIGNvbnN0IGluIGZsb2F0IG5lYXIsIGNvbnN0IGluIGZsb2F0IGZhciApIHtcblx0cmV0dXJuIGxpbmVhckNsaXBaICogKCBuZWFyIC0gZmFyICkgLSBuZWFyO1xufVxuZmxvYXQgdmlld1pUb1BlcnNwZWN0aXZlRGVwdGgoIGNvbnN0IGluIGZsb2F0IHZpZXdaLCBjb25zdCBpbiBmbG9hdCBuZWFyLCBjb25zdCBpbiBmbG9hdCBmYXIgKSB7XG5cdHJldHVybiAoKCBuZWFyICsgdmlld1ogKSAqIGZhciApIC8gKCggZmFyIC0gbmVhciApICogdmlld1ogKTtcbn1cbmZsb2F0IHBlcnNwZWN0aXZlRGVwdGhUb1ZpZXdaKCBjb25zdCBpbiBmbG9hdCBpbnZDbGlwWiwgY29uc3QgaW4gZmxvYXQgbmVhciwgY29uc3QgaW4gZmxvYXQgZmFyICkge1xuXHRyZXR1cm4gKCBuZWFyICogZmFyICkgLyAoICggZmFyIC0gbmVhciApICogaW52Q2xpcFogLSBmYXIgKTtcbn0iLApwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50OiIjaWZkZWYgUFJFTVVMVElQTElFRF9BTFBIQVxuXHRnbF9GcmFnQ29sb3IucmdiICpceDNkIGdsX0ZyYWdDb2xvci5hO1xuI2VuZGlmIixwcm9qZWN0X3ZlcnRleDoidmVjNCBtdlBvc2l0aW9uIFx4M2QgbW9kZWxWaWV3TWF0cml4ICogdmVjNCggdHJhbnNmb3JtZWQsIDEuMCApO1xuZ2xfUG9zaXRpb24gXHgzZCBwcm9qZWN0aW9uTWF0cml4ICogbXZQb3NpdGlvbjsiLGRpdGhlcmluZ19mcmFnbWVudDoiI2lmIGRlZmluZWQoIERJVEhFUklORyApXG5cdGdsX0ZyYWdDb2xvci5yZ2IgXHgzZCBkaXRoZXJpbmcoIGdsX0ZyYWdDb2xvci5yZ2IgKTtcbiNlbmRpZiIsZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ6IiNpZiBkZWZpbmVkKCBESVRIRVJJTkcgKVxuXHR2ZWMzIGRpdGhlcmluZyggdmVjMyBjb2xvciApIHtcblx0XHRmbG9hdCBncmlkX3Bvc2l0aW9uIFx4M2QgcmFuZCggZ2xfRnJhZ0Nvb3JkLnh5ICk7XG5cdFx0dmVjMyBkaXRoZXJfc2hpZnRfUkdCIFx4M2QgdmVjMyggMC4yNSAvIDI1NS4wLCAtMC4yNSAvIDI1NS4wLCAwLjI1IC8gMjU1LjAgKTtcblx0XHRkaXRoZXJfc2hpZnRfUkdCIFx4M2QgbWl4KCAyLjAgKiBkaXRoZXJfc2hpZnRfUkdCLCAtMi4wICogZGl0aGVyX3NoaWZ0X1JHQiwgZ3JpZF9wb3NpdGlvbiApO1xuXHRcdHJldHVybiBjb2xvciArIGRpdGhlcl9zaGlmdF9SR0I7XG5cdH1cbiNlbmRpZiIsCnJvdWdobmVzc21hcF9mcmFnbWVudDoiZmxvYXQgcm91Z2huZXNzRmFjdG9yIFx4M2Qgcm91Z2huZXNzO1xuI2lmZGVmIFVTRV9ST1VHSE5FU1NNQVBcblx0dmVjNCB0ZXhlbFJvdWdobmVzcyBceDNkIHRleHR1cmUyRCggcm91Z2huZXNzTWFwLCB2VXYgKTtcblx0cm91Z2huZXNzRmFjdG9yICpceDNkIHRleGVsUm91Z2huZXNzLmc7XG4jZW5kaWYiLHJvdWdobmVzc21hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX1JPVUdITkVTU01BUFxuXHR1bmlmb3JtIHNhbXBsZXIyRCByb3VnaG5lc3NNYXA7XG4jZW5kaWYiLHNoYWRvd21hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX1NIQURPV01BUFxuXHQjaWYgTlVNX0RJUl9MSUdIVFMgXHgzZSAwXG5cdFx0dW5pZm9ybSBzYW1wbGVyMkQgZGlyZWN0aW9uYWxTaGFkb3dNYXBbIE5VTV9ESVJfTElHSFRTIF07XG5cdFx0dmFyeWluZyB2ZWM0IHZEaXJlY3Rpb25hbFNoYWRvd0Nvb3JkWyBOVU1fRElSX0xJR0hUUyBdO1xuXHQjZW5kaWZcblx0I2lmIE5VTV9TUE9UX0xJR0hUUyBceDNlIDBcblx0XHR1bmlmb3JtIHNhbXBsZXIyRCBzcG90U2hhZG93TWFwWyBOVU1fU1BPVF9MSUdIVFMgXTtcblx0XHR2YXJ5aW5nIHZlYzQgdlNwb3RTaGFkb3dDb29yZFsgTlVNX1NQT1RfTElHSFRTIF07XG5cdCNlbmRpZlxuXHQjaWYgTlVNX1BPSU5UX0xJR0hUUyBceDNlIDBcblx0XHR1bmlmb3JtIHNhbXBsZXIyRCBwb2ludFNoYWRvd01hcFsgTlVNX1BPSU5UX0xJR0hUUyBdO1xuXHRcdHZhcnlpbmcgdmVjNCB2UG9pbnRTaGFkb3dDb29yZFsgTlVNX1BPSU5UX0xJR0hUUyBdO1xuXHQjZW5kaWZcblx0ZmxvYXQgdGV4dHVyZTJEQ29tcGFyZSggc2FtcGxlcjJEIGRlcHRocywgdmVjMiB1diwgZmxvYXQgY29tcGFyZSApIHtcblx0XHRyZXR1cm4gc3RlcCggY29tcGFyZSwgdW5wYWNrUkdCQVRvRGVwdGgoIHRleHR1cmUyRCggZGVwdGhzLCB1diApICkgKTtcblx0fVxuXHRmbG9hdCB0ZXh0dXJlMkRTaGFkb3dMZXJwKCBzYW1wbGVyMkQgZGVwdGhzLCB2ZWMyIHNpemUsIHZlYzIgdXYsIGZsb2F0IGNvbXBhcmUgKSB7XG5cdFx0Y29uc3QgdmVjMiBvZmZzZXQgXHgzZCB2ZWMyKCAwLjAsIDEuMCApO1xuXHRcdHZlYzIgdGV4ZWxTaXplIFx4M2QgdmVjMiggMS4wICkgLyBzaXplO1xuXHRcdHZlYzIgY2VudHJvaWRVViBceDNkIGZsb29yKCB1diAqIHNpemUgKyAwLjUgKSAvIHNpemU7XG5cdFx0ZmxvYXQgbGIgXHgzZCB0ZXh0dXJlMkRDb21wYXJlKCBkZXB0aHMsIGNlbnRyb2lkVVYgKyB0ZXhlbFNpemUgKiBvZmZzZXQueHgsIGNvbXBhcmUgKTtcblx0XHRmbG9hdCBsdCBceDNkIHRleHR1cmUyRENvbXBhcmUoIGRlcHRocywgY2VudHJvaWRVViArIHRleGVsU2l6ZSAqIG9mZnNldC54eSwgY29tcGFyZSApO1xuXHRcdGZsb2F0IHJiIFx4M2QgdGV4dHVyZTJEQ29tcGFyZSggZGVwdGhzLCBjZW50cm9pZFVWICsgdGV4ZWxTaXplICogb2Zmc2V0Lnl4LCBjb21wYXJlICk7XG5cdFx0ZmxvYXQgcnQgXHgzZCB0ZXh0dXJlMkRDb21wYXJlKCBkZXB0aHMsIGNlbnRyb2lkVVYgKyB0ZXhlbFNpemUgKiBvZmZzZXQueXksIGNvbXBhcmUgKTtcblx0XHR2ZWMyIGYgXHgzZCBmcmFjdCggdXYgKiBzaXplICsgMC41ICk7XG5cdFx0ZmxvYXQgYSBceDNkIG1peCggbGIsIGx0LCBmLnkgKTtcblx0XHRmbG9hdCBiIFx4M2QgbWl4KCByYiwgcnQsIGYueSApO1xuXHRcdGZsb2F0IGMgXHgzZCBtaXgoIGEsIGIsIGYueCApO1xuXHRcdHJldHVybiBjO1xuXHR9XG5cdGZsb2F0IGdldFNoYWRvdyggc2FtcGxlcjJEIHNoYWRvd01hcCwgdmVjMiBzaGFkb3dNYXBTaXplLCBmbG9hdCBzaGFkb3dCaWFzLCBmbG9hdCBzaGFkb3dSYWRpdXMsIHZlYzQgc2hhZG93Q29vcmQgKSB7XG5cdFx0ZmxvYXQgc2hhZG93IFx4M2QgMS4wO1xuXHRcdHNoYWRvd0Nvb3JkLnh5eiAvXHgzZCBzaGFkb3dDb29yZC53O1xuXHRcdHNoYWRvd0Nvb3JkLnogK1x4M2Qgc2hhZG93Qmlhcztcblx0XHRidmVjNCBpbkZydXN0dW1WZWMgXHgzZCBidmVjNCAoIHNoYWRvd0Nvb3JkLnggXHgzZVx4M2QgMC4wLCBzaGFkb3dDb29yZC54IFx4M2NceDNkIDEuMCwgc2hhZG93Q29vcmQueSBceDNlXHgzZCAwLjAsIHNoYWRvd0Nvb3JkLnkgXHgzY1x4M2QgMS4wICk7XG5cdFx0Ym9vbCBpbkZydXN0dW0gXHgzZCBhbGwoIGluRnJ1c3R1bVZlYyApO1xuXHRcdGJ2ZWMyIGZydXN0dW1UZXN0VmVjIFx4M2QgYnZlYzIoIGluRnJ1c3R1bSwgc2hhZG93Q29vcmQueiBceDNjXHgzZCAxLjAgKTtcblx0XHRib29sIGZydXN0dW1UZXN0IFx4M2QgYWxsKCBmcnVzdHVtVGVzdFZlYyApO1xuXHRcdGlmICggZnJ1c3R1bVRlc3QgKSB7XG5cdFx0I2lmIGRlZmluZWQoIFNIQURPV01BUF9UWVBFX1BDRiApXG5cdFx0XHR2ZWMyIHRleGVsU2l6ZSBceDNkIHZlYzIoIDEuMCApIC8gc2hhZG93TWFwU2l6ZTtcblx0XHRcdGZsb2F0IGR4MCBceDNkIC0gdGV4ZWxTaXplLnggKiBzaGFkb3dSYWRpdXM7XG5cdFx0XHRmbG9hdCBkeTAgXHgzZCAtIHRleGVsU2l6ZS55ICogc2hhZG93UmFkaXVzO1xuXHRcdFx0ZmxvYXQgZHgxIFx4M2QgKyB0ZXhlbFNpemUueCAqIHNoYWRvd1JhZGl1cztcblx0XHRcdGZsb2F0IGR5MSBceDNkICsgdGV4ZWxTaXplLnkgKiBzaGFkb3dSYWRpdXM7XG5cdFx0XHRzaGFkb3cgXHgzZCAoXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDAsIGR5MCApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggMC4wLCBkeTAgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MSwgZHkwICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDAsIDAuMCApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5LCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgxLCAwLjAgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MCwgZHkxICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCAwLjAsIGR5MSApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgxLCBkeTEgKSwgc2hhZG93Q29vcmQueiApXG5cdFx0XHQpICogKCAxLjAgLyA5LjAgKTtcblx0XHQjZWxpZiBkZWZpbmVkKCBTSEFET1dNQVBfVFlQRV9QQ0ZfU09GVCApXG5cdFx0XHR2ZWMyIHRleGVsU2l6ZSBceDNkIHZlYzIoIDEuMCApIC8gc2hhZG93TWFwU2l6ZTtcblx0XHRcdGZsb2F0IGR4MCBceDNkIC0gdGV4ZWxTaXplLnggKiBzaGFkb3dSYWRpdXM7XG5cdFx0XHRmbG9hdCBkeTAgXHgzZCAtIHRleGVsU2l6ZS55ICogc2hhZG93UmFkaXVzO1xuXHRcdFx0ZmxvYXQgZHgxIFx4M2QgKyB0ZXhlbFNpemUueCAqIHNoYWRvd1JhZGl1cztcblx0XHRcdGZsb2F0IGR5MSBceDNkICsgdGV4ZWxTaXplLnkgKiBzaGFkb3dSYWRpdXM7XG5cdFx0XHRzaGFkb3cgXHgzZCAoXG5cdFx0XHRcdHRleHR1cmUyRFNoYWRvd0xlcnAoIHNoYWRvd01hcCwgc2hhZG93TWFwU2l6ZSwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDAsIGR5MCApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRTaGFkb3dMZXJwKCBzaGFkb3dNYXAsIHNoYWRvd01hcFNpemUsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggMC4wLCBkeTAgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEU2hhZG93TGVycCggc2hhZG93TWFwLCBzaGFkb3dNYXBTaXplLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MSwgZHkwICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRFNoYWRvd0xlcnAoIHNoYWRvd01hcCwgc2hhZG93TWFwU2l6ZSwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDAsIDAuMCApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRTaGFkb3dMZXJwKCBzaGFkb3dNYXAsIHNoYWRvd01hcFNpemUsIHNoYWRvd0Nvb3JkLnh5LCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRTaGFkb3dMZXJwKCBzaGFkb3dNYXAsIHNoYWRvd01hcFNpemUsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgxLCAwLjAgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEU2hhZG93TGVycCggc2hhZG93TWFwLCBzaGFkb3dNYXBTaXplLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MCwgZHkxICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRFNoYWRvd0xlcnAoIHNoYWRvd01hcCwgc2hhZG93TWFwU2l6ZSwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCAwLjAsIGR5MSApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRTaGFkb3dMZXJwKCBzaGFkb3dNYXAsIHNoYWRvd01hcFNpemUsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgxLCBkeTEgKSwgc2hhZG93Q29vcmQueiApXG5cdFx0XHQpICogKCAxLjAgLyA5LjAgKTtcblx0XHQjZWxzZVxuXHRcdFx0c2hhZG93IFx4M2QgdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSwgc2hhZG93Q29vcmQueiApO1xuXHRcdCNlbmRpZlxuXHRcdH1cblx0XHRyZXR1cm4gc2hhZG93O1xuXHR9XG5cdHZlYzIgY3ViZVRvVVYoIHZlYzMgdiwgZmxvYXQgdGV4ZWxTaXplWSApIHtcblx0XHR2ZWMzIGFic1YgXHgzZCBhYnMoIHYgKTtcblx0XHRmbG9hdCBzY2FsZVRvQ3ViZSBceDNkIDEuMCAvIG1heCggYWJzVi54LCBtYXgoIGFic1YueSwgYWJzVi56ICkgKTtcblx0XHRhYnNWICpceDNkIHNjYWxlVG9DdWJlO1xuXHRcdHYgKlx4M2Qgc2NhbGVUb0N1YmUgKiAoIDEuMCAtIDIuMCAqIHRleGVsU2l6ZVkgKTtcblx0XHR2ZWMyIHBsYW5hciBceDNkIHYueHk7XG5cdFx0ZmxvYXQgYWxtb3N0QVRleGVsIFx4M2QgMS41ICogdGV4ZWxTaXplWTtcblx0XHRmbG9hdCBhbG1vc3RPbmUgXHgzZCAxLjAgLSBhbG1vc3RBVGV4ZWw7XG5cdFx0aWYgKCBhYnNWLnogXHgzZVx4M2QgYWxtb3N0T25lICkge1xuXHRcdFx0aWYgKCB2LnogXHgzZSAwLjAgKVxuXHRcdFx0XHRwbGFuYXIueCBceDNkIDQuMCAtIHYueDtcblx0XHR9IGVsc2UgaWYgKCBhYnNWLnggXHgzZVx4M2QgYWxtb3N0T25lICkge1xuXHRcdFx0ZmxvYXQgc2lnblggXHgzZCBzaWduKCB2LnggKTtcblx0XHRcdHBsYW5hci54IFx4M2Qgdi56ICogc2lnblggKyAyLjAgKiBzaWduWDtcblx0XHR9IGVsc2UgaWYgKCBhYnNWLnkgXHgzZVx4M2QgYWxtb3N0T25lICkge1xuXHRcdFx0ZmxvYXQgc2lnblkgXHgzZCBzaWduKCB2LnkgKTtcblx0XHRcdHBsYW5hci54IFx4M2Qgdi54ICsgMi4wICogc2lnblkgKyAyLjA7XG5cdFx0XHRwbGFuYXIueSBceDNkIHYueiAqIHNpZ25ZIC0gMi4wO1xuXHRcdH1cblx0XHRyZXR1cm4gdmVjMiggMC4xMjUsIDAuMjUgKSAqIHBsYW5hciArIHZlYzIoIDAuMzc1LCAwLjc1ICk7XG5cdH1cblx0ZmxvYXQgZ2V0UG9pbnRTaGFkb3coIHNhbXBsZXIyRCBzaGFkb3dNYXAsIHZlYzIgc2hhZG93TWFwU2l6ZSwgZmxvYXQgc2hhZG93QmlhcywgZmxvYXQgc2hhZG93UmFkaXVzLCB2ZWM0IHNoYWRvd0Nvb3JkLCBmbG9hdCBzaGFkb3dDYW1lcmFOZWFyLCBmbG9hdCBzaGFkb3dDYW1lcmFGYXIgKSB7XG5cdFx0dmVjMiB0ZXhlbFNpemUgXHgzZCB2ZWMyKCAxLjAgKSAvICggc2hhZG93TWFwU2l6ZSAqIHZlYzIoIDQuMCwgMi4wICkgKTtcblx0XHR2ZWMzIGxpZ2h0VG9Qb3NpdGlvbiBceDNkIHNoYWRvd0Nvb3JkLnh5ejtcblx0XHRmbG9hdCBkcCBceDNkICggbGVuZ3RoKCBsaWdodFRvUG9zaXRpb24gKSAtIHNoYWRvd0NhbWVyYU5lYXIgKSAvICggc2hhZG93Q2FtZXJhRmFyIC0gc2hhZG93Q2FtZXJhTmVhciApO1x0XHRkcCArXHgzZCBzaGFkb3dCaWFzO1xuXHRcdHZlYzMgYmQzRCBceDNkIG5vcm1hbGl6ZSggbGlnaHRUb1Bvc2l0aW9uICk7XG5cdFx0I2lmIGRlZmluZWQoIFNIQURPV01BUF9UWVBFX1BDRiApIHx8IGRlZmluZWQoIFNIQURPV01BUF9UWVBFX1BDRl9TT0ZUIClcblx0XHRcdHZlYzIgb2Zmc2V0IFx4M2QgdmVjMiggLSAxLCAxICkgKiBzaGFkb3dSYWRpdXMgKiB0ZXhlbFNpemUueTtcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueHl5LCB0ZXhlbFNpemUueSApLCBkcCApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC55eXksIHRleGVsU2l6ZS55ICksIGRwICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnh5eCwgdGV4ZWxTaXplLnkgKSwgZHAgKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueXl4LCB0ZXhlbFNpemUueSApLCBkcCApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCwgdGV4ZWxTaXplLnkgKSwgZHAgKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueHh5LCB0ZXhlbFNpemUueSApLCBkcCApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC55eHksIHRleGVsU2l6ZS55ICksIGRwICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnh4eCwgdGV4ZWxTaXplLnkgKSwgZHAgKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueXh4LCB0ZXhlbFNpemUueSApLCBkcCApXG5cdFx0XHQpICogKCAxLjAgLyA5LjAgKTtcblx0XHQjZWxzZVxuXHRcdFx0cmV0dXJuIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QsIHRleGVsU2l6ZS55ICksIGRwICk7XG5cdFx0I2VuZGlmXG5cdH1cbiNlbmRpZiIsCnNoYWRvd21hcF9wYXJzX3ZlcnRleDoiI2lmZGVmIFVTRV9TSEFET1dNQVBcblx0I2lmIE5VTV9ESVJfTElHSFRTIFx4M2UgMFxuXHRcdHVuaWZvcm0gbWF0NCBkaXJlY3Rpb25hbFNoYWRvd01hdHJpeFsgTlVNX0RJUl9MSUdIVFMgXTtcblx0XHR2YXJ5aW5nIHZlYzQgdkRpcmVjdGlvbmFsU2hhZG93Q29vcmRbIE5VTV9ESVJfTElHSFRTIF07XG5cdCNlbmRpZlxuXHQjaWYgTlVNX1NQT1RfTElHSFRTIFx4M2UgMFxuXHRcdHVuaWZvcm0gbWF0NCBzcG90U2hhZG93TWF0cml4WyBOVU1fU1BPVF9MSUdIVFMgXTtcblx0XHR2YXJ5aW5nIHZlYzQgdlNwb3RTaGFkb3dDb29yZFsgTlVNX1NQT1RfTElHSFRTIF07XG5cdCNlbmRpZlxuXHQjaWYgTlVNX1BPSU5UX0xJR0hUUyBceDNlIDBcblx0XHR1bmlmb3JtIG1hdDQgcG9pbnRTaGFkb3dNYXRyaXhbIE5VTV9QT0lOVF9MSUdIVFMgXTtcblx0XHR2YXJ5aW5nIHZlYzQgdlBvaW50U2hhZG93Q29vcmRbIE5VTV9QT0lOVF9MSUdIVFMgXTtcblx0I2VuZGlmXG4jZW5kaWYiLApzaGFkb3dtYXBfdmVydGV4OiIjaWZkZWYgVVNFX1NIQURPV01BUFxuXHQjaWYgTlVNX0RJUl9MSUdIVFMgXHgzZSAwXG5cdCNwcmFnbWEgdW5yb2xsX2xvb3Bcblx0Zm9yICggaW50IGkgXHgzZCAwOyBpIFx4M2MgTlVNX0RJUl9MSUdIVFM7IGkgKysgKSB7XG5cdFx0dkRpcmVjdGlvbmFsU2hhZG93Q29vcmRbIGkgXSBceDNkIGRpcmVjdGlvbmFsU2hhZG93TWF0cml4WyBpIF0gKiB3b3JsZFBvc2l0aW9uO1xuXHR9XG5cdCNlbmRpZlxuXHQjaWYgTlVNX1NQT1RfTElHSFRTIFx4M2UgMFxuXHQjcHJhZ21hIHVucm9sbF9sb29wXG5cdGZvciAoIGludCBpIFx4M2QgMDsgaSBceDNjIE5VTV9TUE9UX0xJR0hUUzsgaSArKyApIHtcblx0XHR2U3BvdFNoYWRvd0Nvb3JkWyBpIF0gXHgzZCBzcG90U2hhZG93TWF0cml4WyBpIF0gKiB3b3JsZFBvc2l0aW9uO1xuXHR9XG5cdCNlbmRpZlxuXHQjaWYgTlVNX1BPSU5UX0xJR0hUUyBceDNlIDBcblx0I3ByYWdtYSB1bnJvbGxfbG9vcFxuXHRmb3IgKCBpbnQgaSBceDNkIDA7IGkgXHgzYyBOVU1fUE9JTlRfTElHSFRTOyBpICsrICkge1xuXHRcdHZQb2ludFNoYWRvd0Nvb3JkWyBpIF0gXHgzZCBwb2ludFNoYWRvd01hdHJpeFsgaSBdICogd29ybGRQb3NpdGlvbjtcblx0fVxuXHQjZW5kaWZcbiNlbmRpZiIsCnNoYWRvd21hc2tfcGFyc19mcmFnbWVudDoiZmxvYXQgZ2V0U2hhZG93TWFzaygpIHtcblx0ZmxvYXQgc2hhZG93IFx4M2QgMS4wO1xuXHQjaWZkZWYgVVNFX1NIQURPV01BUFxuXHQjaWYgTlVNX0RJUl9MSUdIVFMgXHgzZSAwXG5cdERpcmVjdGlvbmFsTGlnaHQgZGlyZWN0aW9uYWxMaWdodDtcblx0I3ByYWdtYSB1bnJvbGxfbG9vcFxuXHRmb3IgKCBpbnQgaSBceDNkIDA7IGkgXHgzYyBOVU1fRElSX0xJR0hUUzsgaSArKyApIHtcblx0XHRkaXJlY3Rpb25hbExpZ2h0IFx4M2QgZGlyZWN0aW9uYWxMaWdodHNbIGkgXTtcblx0XHRzaGFkb3cgKlx4M2QgYm9vbCggZGlyZWN0aW9uYWxMaWdodC5zaGFkb3cgKSA/IGdldFNoYWRvdyggZGlyZWN0aW9uYWxTaGFkb3dNYXBbIGkgXSwgZGlyZWN0aW9uYWxMaWdodC5zaGFkb3dNYXBTaXplLCBkaXJlY3Rpb25hbExpZ2h0LnNoYWRvd0JpYXMsIGRpcmVjdGlvbmFsTGlnaHQuc2hhZG93UmFkaXVzLCB2RGlyZWN0aW9uYWxTaGFkb3dDb29yZFsgaSBdICkgOiAxLjA7XG5cdH1cblx0I2VuZGlmXG5cdCNpZiBOVU1fU1BPVF9MSUdIVFMgXHgzZSAwXG5cdFNwb3RMaWdodCBzcG90TGlnaHQ7XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3Bcblx0Zm9yICggaW50IGkgXHgzZCAwOyBpIFx4M2MgTlVNX1NQT1RfTElHSFRTOyBpICsrICkge1xuXHRcdHNwb3RMaWdodCBceDNkIHNwb3RMaWdodHNbIGkgXTtcblx0XHRzaGFkb3cgKlx4M2QgYm9vbCggc3BvdExpZ2h0LnNoYWRvdyApID8gZ2V0U2hhZG93KCBzcG90U2hhZG93TWFwWyBpIF0sIHNwb3RMaWdodC5zaGFkb3dNYXBTaXplLCBzcG90TGlnaHQuc2hhZG93Qmlhcywgc3BvdExpZ2h0LnNoYWRvd1JhZGl1cywgdlNwb3RTaGFkb3dDb29yZFsgaSBdICkgOiAxLjA7XG5cdH1cblx0I2VuZGlmXG5cdCNpZiBOVU1fUE9JTlRfTElHSFRTIFx4M2UgMFxuXHRQb2ludExpZ2h0IHBvaW50TGlnaHQ7XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3Bcblx0Zm9yICggaW50IGkgXHgzZCAwOyBpIFx4M2MgTlVNX1BPSU5UX0xJR0hUUzsgaSArKyApIHtcblx0XHRwb2ludExpZ2h0IFx4M2QgcG9pbnRMaWdodHNbIGkgXTtcblx0XHRzaGFkb3cgKlx4M2QgYm9vbCggcG9pbnRMaWdodC5zaGFkb3cgKSA/IGdldFBvaW50U2hhZG93KCBwb2ludFNoYWRvd01hcFsgaSBdLCBwb2ludExpZ2h0LnNoYWRvd01hcFNpemUsIHBvaW50TGlnaHQuc2hhZG93QmlhcywgcG9pbnRMaWdodC5zaGFkb3dSYWRpdXMsIHZQb2ludFNoYWRvd0Nvb3JkWyBpIF0sIHBvaW50TGlnaHQuc2hhZG93Q2FtZXJhTmVhciwgcG9pbnRMaWdodC5zaGFkb3dDYW1lcmFGYXIgKSA6IDEuMDtcblx0fVxuXHQjZW5kaWZcblx0I2VuZGlmXG5cdHJldHVybiBzaGFkb3c7XG59IiwKc2tpbmJhc2VfdmVydGV4OiIjaWZkZWYgVVNFX1NLSU5OSU5HXG5cdG1hdDQgYm9uZU1hdFggXHgzZCBnZXRCb25lTWF0cml4KCBza2luSW5kZXgueCApO1xuXHRtYXQ0IGJvbmVNYXRZIFx4M2QgZ2V0Qm9uZU1hdHJpeCggc2tpbkluZGV4LnkgKTtcblx0bWF0NCBib25lTWF0WiBceDNkIGdldEJvbmVNYXRyaXgoIHNraW5JbmRleC56ICk7XG5cdG1hdDQgYm9uZU1hdFcgXHgzZCBnZXRCb25lTWF0cml4KCBza2luSW5kZXgudyApO1xuI2VuZGlmIixza2lubmluZ19wYXJzX3ZlcnRleDoiI2lmZGVmIFVTRV9TS0lOTklOR1xuXHR1bmlmb3JtIG1hdDQgYmluZE1hdHJpeDtcblx0dW5pZm9ybSBtYXQ0IGJpbmRNYXRyaXhJbnZlcnNlO1xuXHQjaWZkZWYgQk9ORV9URVhUVVJFXG5cdFx0dW5pZm9ybSBzYW1wbGVyMkQgYm9uZVRleHR1cmU7XG5cdFx0dW5pZm9ybSBpbnQgYm9uZVRleHR1cmVTaXplO1xuXHRcdG1hdDQgZ2V0Qm9uZU1hdHJpeCggY29uc3QgaW4gZmxvYXQgaSApIHtcblx0XHRcdGZsb2F0IGogXHgzZCBpICogNC4wO1xuXHRcdFx0ZmxvYXQgeCBceDNkIG1vZCggaiwgZmxvYXQoIGJvbmVUZXh0dXJlU2l6ZSApICk7XG5cdFx0XHRmbG9hdCB5IFx4M2QgZmxvb3IoIGogLyBmbG9hdCggYm9uZVRleHR1cmVTaXplICkgKTtcblx0XHRcdGZsb2F0IGR4IFx4M2QgMS4wIC8gZmxvYXQoIGJvbmVUZXh0dXJlU2l6ZSApO1xuXHRcdFx0ZmxvYXQgZHkgXHgzZCAxLjAgLyBmbG9hdCggYm9uZVRleHR1cmVTaXplICk7XG5cdFx0XHR5IFx4M2QgZHkgKiAoIHkgKyAwLjUgKTtcblx0XHRcdHZlYzQgdjEgXHgzZCB0ZXh0dXJlMkQoIGJvbmVUZXh0dXJlLCB2ZWMyKCBkeCAqICggeCArIDAuNSApLCB5ICkgKTtcblx0XHRcdHZlYzQgdjIgXHgzZCB0ZXh0dXJlMkQoIGJvbmVUZXh0dXJlLCB2ZWMyKCBkeCAqICggeCArIDEuNSApLCB5ICkgKTtcblx0XHRcdHZlYzQgdjMgXHgzZCB0ZXh0dXJlMkQoIGJvbmVUZXh0dXJlLCB2ZWMyKCBkeCAqICggeCArIDIuNSApLCB5ICkgKTtcblx0XHRcdHZlYzQgdjQgXHgzZCB0ZXh0dXJlMkQoIGJvbmVUZXh0dXJlLCB2ZWMyKCBkeCAqICggeCArIDMuNSApLCB5ICkgKTtcblx0XHRcdG1hdDQgYm9uZSBceDNkIG1hdDQoIHYxLCB2MiwgdjMsIHY0ICk7XG5cdFx0XHRyZXR1cm4gYm9uZTtcblx0XHR9XG5cdCNlbHNlXG5cdFx0dW5pZm9ybSBtYXQ0IGJvbmVNYXRyaWNlc1sgTUFYX0JPTkVTIF07XG5cdFx0bWF0NCBnZXRCb25lTWF0cml4KCBjb25zdCBpbiBmbG9hdCBpICkge1xuXHRcdFx0bWF0NCBib25lIFx4M2QgYm9uZU1hdHJpY2VzWyBpbnQoaSkgXTtcblx0XHRcdHJldHVybiBib25lO1xuXHRcdH1cblx0I2VuZGlmXG4jZW5kaWYiLApza2lubmluZ192ZXJ0ZXg6IiNpZmRlZiBVU0VfU0tJTk5JTkdcblx0dmVjNCBza2luVmVydGV4IFx4M2QgYmluZE1hdHJpeCAqIHZlYzQoIHRyYW5zZm9ybWVkLCAxLjAgKTtcblx0dmVjNCBza2lubmVkIFx4M2QgdmVjNCggMC4wICk7XG5cdHNraW5uZWQgK1x4M2QgYm9uZU1hdFggKiBza2luVmVydGV4ICogc2tpbldlaWdodC54O1xuXHRza2lubmVkICtceDNkIGJvbmVNYXRZICogc2tpblZlcnRleCAqIHNraW5XZWlnaHQueTtcblx0c2tpbm5lZCArXHgzZCBib25lTWF0WiAqIHNraW5WZXJ0ZXggKiBza2luV2VpZ2h0Lno7XG5cdHNraW5uZWQgK1x4M2QgYm9uZU1hdFcgKiBza2luVmVydGV4ICogc2tpbldlaWdodC53O1xuXHR0cmFuc2Zvcm1lZCBceDNkICggYmluZE1hdHJpeEludmVyc2UgKiBza2lubmVkICkueHl6O1xuI2VuZGlmIixza2lubm9ybWFsX3ZlcnRleDoiI2lmZGVmIFVTRV9TS0lOTklOR1xuXHRtYXQ0IHNraW5NYXRyaXggXHgzZCBtYXQ0KCAwLjAgKTtcblx0c2tpbk1hdHJpeCArXHgzZCBza2luV2VpZ2h0LnggKiBib25lTWF0WDtcblx0c2tpbk1hdHJpeCArXHgzZCBza2luV2VpZ2h0LnkgKiBib25lTWF0WTtcblx0c2tpbk1hdHJpeCArXHgzZCBza2luV2VpZ2h0LnogKiBib25lTWF0Wjtcblx0c2tpbk1hdHJpeCArXHgzZCBza2luV2VpZ2h0LncgKiBib25lTWF0Vztcblx0c2tpbk1hdHJpeCAgXHgzZCBiaW5kTWF0cml4SW52ZXJzZSAqIHNraW5NYXRyaXggKiBiaW5kTWF0cml4O1xuXHRvYmplY3ROb3JtYWwgXHgzZCB2ZWM0KCBza2luTWF0cml4ICogdmVjNCggb2JqZWN0Tm9ybWFsLCAwLjAgKSApLnh5ejtcblx0I2lmZGVmIFVTRV9UQU5HRU5UXG5cdFx0b2JqZWN0VGFuZ2VudCBceDNkIHZlYzQoIHNraW5NYXRyaXggKiB2ZWM0KCBvYmplY3RUYW5nZW50LCAwLjAgKSApLnh5ejtcblx0I2VuZGlmXG4jZW5kaWYiLApzcGVjdWxhcm1hcF9mcmFnbWVudDoiZmxvYXQgc3BlY3VsYXJTdHJlbmd0aDtcbiNpZmRlZiBVU0VfU1BFQ1VMQVJNQVBcblx0dmVjNCB0ZXhlbFNwZWN1bGFyIFx4M2QgdGV4dHVyZTJEKCBzcGVjdWxhck1hcCwgdlV2ICk7XG5cdHNwZWN1bGFyU3RyZW5ndGggXHgzZCB0ZXhlbFNwZWN1bGFyLnI7XG4jZWxzZVxuXHRzcGVjdWxhclN0cmVuZ3RoIFx4M2QgMS4wO1xuI2VuZGlmIixzcGVjdWxhcm1hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX1NQRUNVTEFSTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIHNwZWN1bGFyTWFwO1xuI2VuZGlmIix0b25lbWFwcGluZ19mcmFnbWVudDoiI2lmIGRlZmluZWQoIFRPTkVfTUFQUElORyApXG5cdGdsX0ZyYWdDb2xvci5yZ2IgXHgzZCB0b25lTWFwcGluZyggZ2xfRnJhZ0NvbG9yLnJnYiApO1xuI2VuZGlmIix0b25lbWFwcGluZ19wYXJzX2ZyYWdtZW50OiIjaWZuZGVmIHNhdHVyYXRlXG5cdCNkZWZpbmUgc2F0dXJhdGUoYSkgY2xhbXAoIGEsIDAuMCwgMS4wIClcbiNlbmRpZlxudW5pZm9ybSBmbG9hdCB0b25lTWFwcGluZ0V4cG9zdXJlO1xudW5pZm9ybSBmbG9hdCB0b25lTWFwcGluZ1doaXRlUG9pbnQ7XG52ZWMzIExpbmVhclRvbmVNYXBwaW5nKCB2ZWMzIGNvbG9yICkge1xuXHRyZXR1cm4gdG9uZU1hcHBpbmdFeHBvc3VyZSAqIGNvbG9yO1xufVxudmVjMyBSZWluaGFyZFRvbmVNYXBwaW5nKCB2ZWMzIGNvbG9yICkge1xuXHRjb2xvciAqXHgzZCB0b25lTWFwcGluZ0V4cG9zdXJlO1xuXHRyZXR1cm4gc2F0dXJhdGUoIGNvbG9yIC8gKCB2ZWMzKCAxLjAgKSArIGNvbG9yICkgKTtcbn1cbiNkZWZpbmUgVW5jaGFydGVkMkhlbHBlciggeCApIG1heCggKCAoIHggKiAoIDAuMTUgKiB4ICsgMC4xMCAqIDAuNTAgKSArIDAuMjAgKiAwLjAyICkgLyAoIHggKiAoIDAuMTUgKiB4ICsgMC41MCApICsgMC4yMCAqIDAuMzAgKSApIC0gMC4wMiAvIDAuMzAsIHZlYzMoIDAuMCApIClcbnZlYzMgVW5jaGFydGVkMlRvbmVNYXBwaW5nKCB2ZWMzIGNvbG9yICkge1xuXHRjb2xvciAqXHgzZCB0b25lTWFwcGluZ0V4cG9zdXJlO1xuXHRyZXR1cm4gc2F0dXJhdGUoIFVuY2hhcnRlZDJIZWxwZXIoIGNvbG9yICkgLyBVbmNoYXJ0ZWQySGVscGVyKCB2ZWMzKCB0b25lTWFwcGluZ1doaXRlUG9pbnQgKSApICk7XG59XG52ZWMzIE9wdGltaXplZENpbmVvblRvbmVNYXBwaW5nKCB2ZWMzIGNvbG9yICkge1xuXHRjb2xvciAqXHgzZCB0b25lTWFwcGluZ0V4cG9zdXJlO1xuXHRjb2xvciBceDNkIG1heCggdmVjMyggMC4wICksIGNvbG9yIC0gMC4wMDQgKTtcblx0cmV0dXJuIHBvdyggKCBjb2xvciAqICggNi4yICogY29sb3IgKyAwLjUgKSApIC8gKCBjb2xvciAqICggNi4yICogY29sb3IgKyAxLjcgKSArIDAuMDYgKSwgdmVjMyggMi4yICkgKTtcbn1cbnZlYzMgQUNFU0ZpbG1pY1RvbmVNYXBwaW5nKCB2ZWMzIGNvbG9yICkge1xuXHRjb2xvciAqXHgzZCB0b25lTWFwcGluZ0V4cG9zdXJlO1xuXHRyZXR1cm4gc2F0dXJhdGUoICggY29sb3IgKiAoIDIuNTEgKiBjb2xvciArIDAuMDMgKSApIC8gKCBjb2xvciAqICggMi40MyAqIGNvbG9yICsgMC41OSApICsgMC4xNCApICk7XG59IiwKdXZfcGFyc19mcmFnbWVudDoiI2lmIGRlZmluZWQoIFVTRV9NQVAgKSB8fCBkZWZpbmVkKCBVU0VfQlVNUE1BUCApIHx8IGRlZmluZWQoIFVTRV9OT1JNQUxNQVAgKSB8fCBkZWZpbmVkKCBVU0VfU1BFQ1VMQVJNQVAgKSB8fCBkZWZpbmVkKCBVU0VfQUxQSEFNQVAgKSB8fCBkZWZpbmVkKCBVU0VfRU1JU1NJVkVNQVAgKSB8fCBkZWZpbmVkKCBVU0VfUk9VR0hORVNTTUFQICkgfHwgZGVmaW5lZCggVVNFX01FVEFMTkVTU01BUCApXG5cdHZhcnlpbmcgdmVjMiB2VXY7XG4jZW5kaWYiLHV2X3BhcnNfdmVydGV4OiIjaWYgZGVmaW5lZCggVVNFX01BUCApIHx8IGRlZmluZWQoIFVTRV9CVU1QTUFQICkgfHwgZGVmaW5lZCggVVNFX05PUk1BTE1BUCApIHx8IGRlZmluZWQoIFVTRV9TUEVDVUxBUk1BUCApIHx8IGRlZmluZWQoIFVTRV9BTFBIQU1BUCApIHx8IGRlZmluZWQoIFVTRV9FTUlTU0lWRU1BUCApIHx8IGRlZmluZWQoIFVTRV9ST1VHSE5FU1NNQVAgKSB8fCBkZWZpbmVkKCBVU0VfTUVUQUxORVNTTUFQIClcblx0dmFyeWluZyB2ZWMyIHZVdjtcblx0dW5pZm9ybSBtYXQzIHV2VHJhbnNmb3JtO1xuI2VuZGlmIiwKdXZfdmVydGV4OiIjaWYgZGVmaW5lZCggVVNFX01BUCApIHx8IGRlZmluZWQoIFVTRV9CVU1QTUFQICkgfHwgZGVmaW5lZCggVVNFX05PUk1BTE1BUCApIHx8IGRlZmluZWQoIFVTRV9TUEVDVUxBUk1BUCApIHx8IGRlZmluZWQoIFVTRV9BTFBIQU1BUCApIHx8IGRlZmluZWQoIFVTRV9FTUlTU0lWRU1BUCApIHx8IGRlZmluZWQoIFVTRV9ST1VHSE5FU1NNQVAgKSB8fCBkZWZpbmVkKCBVU0VfTUVUQUxORVNTTUFQIClcblx0dlV2IFx4M2QgKCB1dlRyYW5zZm9ybSAqIHZlYzMoIHV2LCAxICkgKS54eTtcbiNlbmRpZiIsdXYyX3BhcnNfZnJhZ21lbnQ6IiNpZiBkZWZpbmVkKCBVU0VfTElHSFRNQVAgKSB8fCBkZWZpbmVkKCBVU0VfQU9NQVAgKVxuXHR2YXJ5aW5nIHZlYzIgdlV2MjtcbiNlbmRpZiIsdXYyX3BhcnNfdmVydGV4OiIjaWYgZGVmaW5lZCggVVNFX0xJR0hUTUFQICkgfHwgZGVmaW5lZCggVVNFX0FPTUFQIClcblx0YXR0cmlidXRlIHZlYzIgdXYyO1xuXHR2YXJ5aW5nIHZlYzIgdlV2MjtcbiNlbmRpZiIsCnV2Ml92ZXJ0ZXg6IiNpZiBkZWZpbmVkKCBVU0VfTElHSFRNQVAgKSB8fCBkZWZpbmVkKCBVU0VfQU9NQVAgKVxuXHR2VXYyIFx4M2QgdXYyO1xuI2VuZGlmIix3b3JsZHBvc192ZXJ0ZXg6IiNpZiBkZWZpbmVkKCBVU0VfRU5WTUFQICkgfHwgZGVmaW5lZCggRElTVEFOQ0UgKSB8fCBkZWZpbmVkICggVVNFX1NIQURPV01BUCApXG5cdHZlYzQgd29ybGRQb3NpdGlvbiBceDNkIG1vZGVsTWF0cml4ICogdmVjNCggdHJhbnNmb3JtZWQsIDEuMCApO1xuI2VuZGlmIixiYWNrZ3JvdW5kX2ZyYWc6InVuaWZvcm0gc2FtcGxlcjJEIHQyRDtcbnZhcnlpbmcgdmVjMiB2VXY7XG52b2lkIG1haW4oKSB7XG5cdHZlYzQgdGV4Q29sb3IgXHgzZCB0ZXh0dXJlMkQoIHQyRCwgdlV2ICk7XG5cdGdsX0ZyYWdDb2xvciBceDNkIG1hcFRleGVsVG9MaW5lYXIoIHRleENvbG9yICk7XG5cdCNpbmNsdWRlIFx4M2N0b25lbWFwcGluZ19mcmFnbWVudFx4M2Vcblx0I2luY2x1ZGUgXHgzY2VuY29kaW5nc19mcmFnbWVudFx4M2Vcbn0iLApiYWNrZ3JvdW5kX3ZlcnQ6InZhcnlpbmcgdmVjMiB2VXY7XG51bmlmb3JtIG1hdDMgdXZUcmFuc2Zvcm07XG52b2lkIG1haW4oKSB7XG5cdHZVdiBceDNkICggdXZUcmFuc2Zvcm0gKiB2ZWMzKCB1diwgMSApICkueHk7XG5cdGdsX1Bvc2l0aW9uIFx4M2QgdmVjNCggcG9zaXRpb24ueHksIDEuMCwgMS4wICk7XG59IixjdWJlX2ZyYWc6InVuaWZvcm0gc2FtcGxlckN1YmUgdEN1YmU7XG51bmlmb3JtIGZsb2F0IHRGbGlwO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xudmFyeWluZyB2ZWMzIHZXb3JsZERpcmVjdGlvbjtcbnZvaWQgbWFpbigpIHtcblx0dmVjNCB0ZXhDb2xvciBceDNkIHRleHR1cmVDdWJlKCB0Q3ViZSwgdmVjMyggdEZsaXAgKiB2V29ybGREaXJlY3Rpb24ueCwgdldvcmxkRGlyZWN0aW9uLnl6ICkgKTtcblx0Z2xfRnJhZ0NvbG9yIFx4M2QgbWFwVGV4ZWxUb0xpbmVhciggdGV4Q29sb3IgKTtcblx0Z2xfRnJhZ0NvbG9yLmEgKlx4M2Qgb3BhY2l0eTtcblx0I2luY2x1ZGUgXHgzY3RvbmVtYXBwaW5nX2ZyYWdtZW50XHgzZVxuXHQjaW5jbHVkZSBceDNjZW5jb2RpbmdzX2ZyYWdtZW50XHgzZVxufSIsCmN1YmVfdmVydDoidmFyeWluZyB2ZWMzIHZXb3JsZERpcmVjdGlvbjtcbiNpbmNsdWRlIFx4M2Njb21tb25ceDNlXG52b2lkIG1haW4oKSB7XG5cdHZXb3JsZERpcmVjdGlvbiBceDNkIHRyYW5zZm9ybURpcmVjdGlvbiggcG9zaXRpb24sIG1vZGVsTWF0cml4ICk7XG5cdCNpbmNsdWRlIFx4M2NiZWdpbl92ZXJ0ZXhceDNlXG5cdCNpbmNsdWRlIFx4M2Nwcm9qZWN0X3ZlcnRleFx4M2Vcblx0Z2xfUG9zaXRpb24ueiBceDNkIGdsX1Bvc2l0aW9uLnc7XG59IixkZXB0aF9mcmFnOiIjaWYgREVQVEhfUEFDS0lORyBceDNkXHgzZCAzMjAwXG5cdHVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcbiNlbmRpZlxuI2luY2x1ZGUgXHgzY2NvbW1vblx4M2VcbiNpbmNsdWRlIFx4M2NwYWNraW5nXHgzZVxuI2luY2x1ZGUgXHgzY3V2X3BhcnNfZnJhZ21lbnRceDNlXG4jaW5jbHVkZSBceDNjbWFwX3BhcnNfZnJhZ21lbnRceDNlXG4jaW5jbHVkZSBceDNjYWxwaGFtYXBfcGFyc19mcmFnbWVudFx4M2VcbiNpbmNsdWRlIFx4M2Nsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50XHgzZVxuI2luY2x1ZGUgXHgzY2NsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50XHgzZVxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSBceDNjY2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50XHgzZVxuXHR2ZWM0IGRpZmZ1c2VDb2xvciBceDNkIHZlYzQoIDEuMCApO1xuXHQjaWYgREVQVEhfUEFDS0lORyBceDNkXHgzZCAzMjAwXG5cdFx0ZGlmZnVzZUNvbG9yLmEgXHgzZCBvcGFjaXR5O1xuXHQjZW5kaWZcblx0I2luY2x1ZGUgXHgzY21hcF9mcmFnbWVudFx4M2Vcblx0I2luY2x1ZGUgXHgzY2FscGhhbWFwX2ZyYWdtZW50XHgzZVxuXHQjaW5jbHVkZSBceDNjYWxwaGF0ZXN0X2ZyYWdtZW50XHgzZVxuXHQjaW5jbHVkZSBceDNjbG9nZGVwdGhidWZfZnJhZ21lbnRceDNlXG5cdCNpZiBERVBUSF9QQUNLSU5HIFx4M2RceDNkIDMyMDBcblx0XHRnbF9GcmFnQ29sb3IgXHgzZCB2ZWM0KCB2ZWMzKCAxLjAgLSBnbF9GcmFnQ29vcmQueiApLCBvcGFjaXR5ICk7XG5cdCNlbGlmIERFUFRIX1BBQ0tJTkcgXHgzZFx4M2QgMzIwMVxuXHRcdGdsX0ZyYWdDb2xvciBceDNkIHBhY2tEZXB0aFRvUkdCQSggZ2xfRnJhZ0Nvb3JkLnogKTtcblx0I2VuZGlmXG59IiwKZGVwdGhfdmVydDoiI2luY2x1ZGUgXHgzY2NvbW1vblx4M2VcbiNpbmNsdWRlIFx4M2N1dl9wYXJzX3ZlcnRleFx4M2VcbiNpbmNsdWRlIFx4M2NkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXhceDNlXG4jaW5jbHVkZSBceDNjbW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXhceDNlXG4jaW5jbHVkZSBceDNjc2tpbm5pbmdfcGFyc192ZXJ0ZXhceDNlXG4jaW5jbHVkZSBceDNjbG9nZGVwdGhidWZfcGFyc192ZXJ0ZXhceDNlXG4jaW5jbHVkZSBceDNjY2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4XHgzZVxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSBceDNjdXZfdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjc2tpbmJhc2VfdmVydGV4XHgzZVxuXHQjaWZkZWYgVVNFX0RJU1BMQUNFTUVOVE1BUFxuXHRcdCNpbmNsdWRlIFx4M2NiZWdpbm5vcm1hbF92ZXJ0ZXhceDNlXG5cdFx0I2luY2x1ZGUgXHgzY21vcnBobm9ybWFsX3ZlcnRleFx4M2Vcblx0XHQjaW5jbHVkZSBceDNjc2tpbm5vcm1hbF92ZXJ0ZXhceDNlXG5cdCNlbmRpZlxuXHQjaW5jbHVkZSBceDNjYmVnaW5fdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjbW9ycGh0YXJnZXRfdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjc2tpbm5pbmdfdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjZGlzcGxhY2VtZW50bWFwX3ZlcnRleFx4M2Vcblx0I2luY2x1ZGUgXHgzY3Byb2plY3RfdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjbG9nZGVwdGhidWZfdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjY2xpcHBpbmdfcGxhbmVzX3ZlcnRleFx4M2Vcbn0iLApkaXN0YW5jZVJHQkFfZnJhZzoiI2RlZmluZSBESVNUQU5DRVxudW5pZm9ybSB2ZWMzIHJlZmVyZW5jZVBvc2l0aW9uO1xudW5pZm9ybSBmbG9hdCBuZWFyRGlzdGFuY2U7XG51bmlmb3JtIGZsb2F0IGZhckRpc3RhbmNlO1xudmFyeWluZyB2ZWMzIHZXb3JsZFBvc2l0aW9uO1xuI2luY2x1ZGUgXHgzY2NvbW1vblx4M2VcbiNpbmNsdWRlIFx4M2NwYWNraW5nXHgzZVxuI2luY2x1ZGUgXHgzY3V2X3BhcnNfZnJhZ21lbnRceDNlXG4jaW5jbHVkZSBceDNjbWFwX3BhcnNfZnJhZ21lbnRceDNlXG4jaW5jbHVkZSBceDNjYWxwaGFtYXBfcGFyc19mcmFnbWVudFx4M2VcbiNpbmNsdWRlIFx4M2NjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudFx4M2VcbnZvaWQgbWFpbiAoKSB7XG5cdCNpbmNsdWRlIFx4M2NjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnRceDNlXG5cdHZlYzQgZGlmZnVzZUNvbG9yIFx4M2QgdmVjNCggMS4wICk7XG5cdCNpbmNsdWRlIFx4M2NtYXBfZnJhZ21lbnRceDNlXG5cdCNpbmNsdWRlIFx4M2NhbHBoYW1hcF9mcmFnbWVudFx4M2Vcblx0I2luY2x1ZGUgXHgzY2FscGhhdGVzdF9mcmFnbWVudFx4M2Vcblx0ZmxvYXQgZGlzdCBceDNkIGxlbmd0aCggdldvcmxkUG9zaXRpb24gLSByZWZlcmVuY2VQb3NpdGlvbiApO1xuXHRkaXN0IFx4M2QgKCBkaXN0IC0gbmVhckRpc3RhbmNlICkgLyAoIGZhckRpc3RhbmNlIC0gbmVhckRpc3RhbmNlICk7XG5cdGRpc3QgXHgzZCBzYXR1cmF0ZSggZGlzdCApO1xuXHRnbF9GcmFnQ29sb3IgXHgzZCBwYWNrRGVwdGhUb1JHQkEoIGRpc3QgKTtcbn0iLApkaXN0YW5jZVJHQkFfdmVydDoiI2RlZmluZSBESVNUQU5DRVxudmFyeWluZyB2ZWMzIHZXb3JsZFBvc2l0aW9uO1xuI2luY2x1ZGUgXHgzY2NvbW1vblx4M2VcbiNpbmNsdWRlIFx4M2N1dl9wYXJzX3ZlcnRleFx4M2VcbiNpbmNsdWRlIFx4M2NkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXhceDNlXG4jaW5jbHVkZSBceDNjbW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXhceDNlXG4jaW5jbHVkZSBceDNjc2tpbm5pbmdfcGFyc192ZXJ0ZXhceDNlXG4jaW5jbHVkZSBceDNjY2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4XHgzZVxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSBceDNjdXZfdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjc2tpbmJhc2VfdmVydGV4XHgzZVxuXHQjaWZkZWYgVVNFX0RJU1BMQUNFTUVOVE1BUFxuXHRcdCNpbmNsdWRlIFx4M2NiZWdpbm5vcm1hbF92ZXJ0ZXhceDNlXG5cdFx0I2luY2x1ZGUgXHgzY21vcnBobm9ybWFsX3ZlcnRleFx4M2Vcblx0XHQjaW5jbHVkZSBceDNjc2tpbm5vcm1hbF92ZXJ0ZXhceDNlXG5cdCNlbmRpZlxuXHQjaW5jbHVkZSBceDNjYmVnaW5fdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjbW9ycGh0YXJnZXRfdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjc2tpbm5pbmdfdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjZGlzcGxhY2VtZW50bWFwX3ZlcnRleFx4M2Vcblx0I2luY2x1ZGUgXHgzY3Byb2plY3RfdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjd29ybGRwb3NfdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjY2xpcHBpbmdfcGxhbmVzX3ZlcnRleFx4M2Vcblx0dldvcmxkUG9zaXRpb24gXHgzZCB3b3JsZFBvc2l0aW9uLnh5ejtcbn0iLAplcXVpcmVjdF9mcmFnOiJ1bmlmb3JtIHNhbXBsZXIyRCB0RXF1aXJlY3Q7XG52YXJ5aW5nIHZlYzMgdldvcmxkRGlyZWN0aW9uO1xuI2luY2x1ZGUgXHgzY2NvbW1vblx4M2VcbnZvaWQgbWFpbigpIHtcblx0dmVjMyBkaXJlY3Rpb24gXHgzZCBub3JtYWxpemUoIHZXb3JsZERpcmVjdGlvbiApO1xuXHR2ZWMyIHNhbXBsZVVWO1xuXHRzYW1wbGVVVi55IFx4M2QgYXNpbiggY2xhbXAoIGRpcmVjdGlvbi55LCAtIDEuMCwgMS4wICkgKSAqIFJFQ0lQUk9DQUxfUEkgKyAwLjU7XG5cdHNhbXBsZVVWLnggXHgzZCBhdGFuKCBkaXJlY3Rpb24ueiwgZGlyZWN0aW9uLnggKSAqIFJFQ0lQUk9DQUxfUEkyICsgMC41O1xuXHR2ZWM0IHRleENvbG9yIFx4M2QgdGV4dHVyZTJEKCB0RXF1aXJlY3QsIHNhbXBsZVVWICk7XG5cdGdsX0ZyYWdDb2xvciBceDNkIG1hcFRleGVsVG9MaW5lYXIoIHRleENvbG9yICk7XG5cdCNpbmNsdWRlIFx4M2N0b25lbWFwcGluZ19mcmFnbWVudFx4M2Vcblx0I2luY2x1ZGUgXHgzY2VuY29kaW5nc19mcmFnbWVudFx4M2Vcbn0iLAplcXVpcmVjdF92ZXJ0OiJ2YXJ5aW5nIHZlYzMgdldvcmxkRGlyZWN0aW9uO1xuI2luY2x1ZGUgXHgzY2NvbW1vblx4M2VcbnZvaWQgbWFpbigpIHtcblx0dldvcmxkRGlyZWN0aW9uIFx4M2QgdHJhbnNmb3JtRGlyZWN0aW9uKCBwb3NpdGlvbiwgbW9kZWxNYXRyaXggKTtcblx0I2luY2x1ZGUgXHgzY2JlZ2luX3ZlcnRleFx4M2Vcblx0I2luY2x1ZGUgXHgzY3Byb2plY3RfdmVydGV4XHgzZVxufSIsbGluZWRhc2hlZF9mcmFnOiJ1bmlmb3JtIHZlYzMgZGlmZnVzZTtcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcbnVuaWZvcm0gZmxvYXQgZGFzaFNpemU7XG51bmlmb3JtIGZsb2F0IHRvdGFsU2l6ZTtcbnZhcnlpbmcgZmxvYXQgdkxpbmVEaXN0YW5jZTtcbiNpbmNsdWRlIFx4M2Njb21tb25ceDNlXG4jaW5jbHVkZSBceDNjY29sb3JfcGFyc19mcmFnbWVudFx4M2VcbiNpbmNsdWRlIFx4M2Nmb2dfcGFyc19mcmFnbWVudFx4M2VcbiNpbmNsdWRlIFx4M2Nsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50XHgzZVxuI2luY2x1ZGUgXHgzY2NsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50XHgzZVxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSBceDNjY2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50XHgzZVxuXHRpZiAoIG1vZCggdkxpbmVEaXN0YW5jZSwgdG90YWxTaXplICkgXHgzZSBkYXNoU2l6ZSApIHtcblx0XHRkaXNjYXJkO1xuXHR9XG5cdHZlYzMgb3V0Z29pbmdMaWdodCBceDNkIHZlYzMoIDAuMCApO1xuXHR2ZWM0IGRpZmZ1c2VDb2xvciBceDNkIHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTtcblx0I2luY2x1ZGUgXHgzY2xvZ2RlcHRoYnVmX2ZyYWdtZW50XHgzZVxuXHQjaW5jbHVkZSBceDNjY29sb3JfZnJhZ21lbnRceDNlXG5cdG91dGdvaW5nTGlnaHQgXHgzZCBkaWZmdXNlQ29sb3IucmdiO1xuXHRnbF9GcmFnQ29sb3IgXHgzZCB2ZWM0KCBvdXRnb2luZ0xpZ2h0LCBkaWZmdXNlQ29sb3IuYSApO1xuXHQjaW5jbHVkZSBceDNjcHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudFx4M2Vcblx0I2luY2x1ZGUgXHgzY3RvbmVtYXBwaW5nX2ZyYWdtZW50XHgzZVxuXHQjaW5jbHVkZSBceDNjZW5jb2RpbmdzX2ZyYWdtZW50XHgzZVxuXHQjaW5jbHVkZSBceDNjZm9nX2ZyYWdtZW50XHgzZVxufSIsCmxpbmVkYXNoZWRfdmVydDoidW5pZm9ybSBmbG9hdCBzY2FsZTtcbmF0dHJpYnV0ZSBmbG9hdCBsaW5lRGlzdGFuY2U7XG52YXJ5aW5nIGZsb2F0IHZMaW5lRGlzdGFuY2U7XG4jaW5jbHVkZSBceDNjY29tbW9uXHgzZVxuI2luY2x1ZGUgXHgzY2NvbG9yX3BhcnNfdmVydGV4XHgzZVxuI2luY2x1ZGUgXHgzY2ZvZ19wYXJzX3ZlcnRleFx4M2VcbiNpbmNsdWRlIFx4M2Nsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleFx4M2VcbiNpbmNsdWRlIFx4M2NjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXhceDNlXG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIFx4M2Njb2xvcl92ZXJ0ZXhceDNlXG5cdHZMaW5lRGlzdGFuY2UgXHgzZCBzY2FsZSAqIGxpbmVEaXN0YW5jZTtcblx0dmVjNCBtdlBvc2l0aW9uIFx4M2QgbW9kZWxWaWV3TWF0cml4ICogdmVjNCggcG9zaXRpb24sIDEuMCApO1xuXHRnbF9Qb3NpdGlvbiBceDNkIHByb2plY3Rpb25NYXRyaXggKiBtdlBvc2l0aW9uO1xuXHQjaW5jbHVkZSBceDNjbG9nZGVwdGhidWZfdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjY2xpcHBpbmdfcGxhbmVzX3ZlcnRleFx4M2Vcblx0I2luY2x1ZGUgXHgzY2ZvZ192ZXJ0ZXhceDNlXG59IiwKbWVzaGJhc2ljX2ZyYWc6InVuaWZvcm0gdmVjMyBkaWZmdXNlO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xuI2lmbmRlZiBGTEFUX1NIQURFRFxuXHR2YXJ5aW5nIHZlYzMgdk5vcm1hbDtcbiNlbmRpZlxuI2luY2x1ZGUgXHgzY2NvbW1vblx4M2VcbiNpbmNsdWRlIFx4M2Njb2xvcl9wYXJzX2ZyYWdtZW50XHgzZVxuI2luY2x1ZGUgXHgzY3V2X3BhcnNfZnJhZ21lbnRceDNlXG4jaW5jbHVkZSBceDNjdXYyX3BhcnNfZnJhZ21lbnRceDNlXG4jaW5jbHVkZSBceDNjbWFwX3BhcnNfZnJhZ21lbnRceDNlXG4jaW5jbHVkZSBceDNjYWxwaGFtYXBfcGFyc19mcmFnbWVudFx4M2VcbiNpbmNsdWRlIFx4M2Nhb21hcF9wYXJzX2ZyYWdtZW50XHgzZVxuI2luY2x1ZGUgXHgzY2xpZ2h0bWFwX3BhcnNfZnJhZ21lbnRceDNlXG4jaW5jbHVkZSBceDNjZW52bWFwX3BhcnNfZnJhZ21lbnRceDNlXG4jaW5jbHVkZSBceDNjZm9nX3BhcnNfZnJhZ21lbnRceDNlXG4jaW5jbHVkZSBceDNjc3BlY3VsYXJtYXBfcGFyc19mcmFnbWVudFx4M2VcbiNpbmNsdWRlIFx4M2Nsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50XHgzZVxuI2luY2x1ZGUgXHgzY2NsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50XHgzZVxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSBceDNjY2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50XHgzZVxuXHR2ZWM0IGRpZmZ1c2VDb2xvciBceDNkIHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTtcblx0I2luY2x1ZGUgXHgzY2xvZ2RlcHRoYnVmX2ZyYWdtZW50XHgzZVxuXHQjaW5jbHVkZSBceDNjbWFwX2ZyYWdtZW50XHgzZVxuXHQjaW5jbHVkZSBceDNjY29sb3JfZnJhZ21lbnRceDNlXG5cdCNpbmNsdWRlIFx4M2NhbHBoYW1hcF9mcmFnbWVudFx4M2Vcblx0I2luY2x1ZGUgXHgzY2FscGhhdGVzdF9mcmFnbWVudFx4M2Vcblx0I2luY2x1ZGUgXHgzY3NwZWN1bGFybWFwX2ZyYWdtZW50XHgzZVxuXHRSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCBceDNkIFJlZmxlY3RlZExpZ2h0KCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSApO1xuXHQjaWZkZWYgVVNFX0xJR0hUTUFQXG5cdFx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICtceDNkIHRleHR1cmUyRCggbGlnaHRNYXAsIHZVdjIgKS54eXogKiBsaWdodE1hcEludGVuc2l0eTtcblx0I2Vsc2Vcblx0XHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgK1x4M2QgdmVjMyggMS4wICk7XG5cdCNlbmRpZlxuXHQjaW5jbHVkZSBceDNjYW9tYXBfZnJhZ21lbnRceDNlXG5cdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSAqXHgzZCBkaWZmdXNlQ29sb3IucmdiO1xuXHR2ZWMzIG91dGdvaW5nTGlnaHQgXHgzZCByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2U7XG5cdCNpbmNsdWRlIFx4M2NlbnZtYXBfZnJhZ21lbnRceDNlXG5cdGdsX0ZyYWdDb2xvciBceDNkIHZlYzQoIG91dGdvaW5nTGlnaHQsIGRpZmZ1c2VDb2xvci5hICk7XG5cdCNpbmNsdWRlIFx4M2NwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50XHgzZVxuXHQjaW5jbHVkZSBceDNjdG9uZW1hcHBpbmdfZnJhZ21lbnRceDNlXG5cdCNpbmNsdWRlIFx4M2NlbmNvZGluZ3NfZnJhZ21lbnRceDNlXG5cdCNpbmNsdWRlIFx4M2Nmb2dfZnJhZ21lbnRceDNlXG59IiwKbWVzaGJhc2ljX3ZlcnQ6IiNpbmNsdWRlIFx4M2Njb21tb25ceDNlXG4jaW5jbHVkZSBceDNjdXZfcGFyc192ZXJ0ZXhceDNlXG4jaW5jbHVkZSBceDNjdXYyX3BhcnNfdmVydGV4XHgzZVxuI2luY2x1ZGUgXHgzY2Vudm1hcF9wYXJzX3ZlcnRleFx4M2VcbiNpbmNsdWRlIFx4M2Njb2xvcl9wYXJzX3ZlcnRleFx4M2VcbiNpbmNsdWRlIFx4M2Nmb2dfcGFyc192ZXJ0ZXhceDNlXG4jaW5jbHVkZSBceDNjbW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXhceDNlXG4jaW5jbHVkZSBceDNjc2tpbm5pbmdfcGFyc192ZXJ0ZXhceDNlXG4jaW5jbHVkZSBceDNjbG9nZGVwdGhidWZfcGFyc192ZXJ0ZXhceDNlXG4jaW5jbHVkZSBceDNjY2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4XHgzZVxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSBceDNjdXZfdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjdXYyX3ZlcnRleFx4M2Vcblx0I2luY2x1ZGUgXHgzY2NvbG9yX3ZlcnRleFx4M2Vcblx0I2luY2x1ZGUgXHgzY3NraW5iYXNlX3ZlcnRleFx4M2Vcblx0I2lmZGVmIFVTRV9FTlZNQVBcblx0I2luY2x1ZGUgXHgzY2JlZ2lubm9ybWFsX3ZlcnRleFx4M2Vcblx0I2luY2x1ZGUgXHgzY21vcnBobm9ybWFsX3ZlcnRleFx4M2Vcblx0I2luY2x1ZGUgXHgzY3NraW5ub3JtYWxfdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjZGVmYXVsdG5vcm1hbF92ZXJ0ZXhceDNlXG5cdCNlbmRpZlxuXHQjaW5jbHVkZSBceDNjYmVnaW5fdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjbW9ycGh0YXJnZXRfdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjc2tpbm5pbmdfdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjcHJvamVjdF92ZXJ0ZXhceDNlXG5cdCNpbmNsdWRlIFx4M2Nsb2dkZXB0aGJ1Zl92ZXJ0ZXhceDNlXG5cdCNpbmNsdWRlIFx4M2N3b3JsZHBvc192ZXJ0ZXhceDNlXG5cdCNpbmNsdWRlIFx4M2NjbGlwcGluZ19wbGFuZXNfdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjZW52bWFwX3ZlcnRleFx4M2Vcblx0I2luY2x1ZGUgXHgzY2ZvZ192ZXJ0ZXhceDNlXG59IiwKbWVzaGxhbWJlcnRfZnJhZzoidW5pZm9ybSB2ZWMzIGRpZmZ1c2U7XG51bmlmb3JtIHZlYzMgZW1pc3NpdmU7XG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG52YXJ5aW5nIHZlYzMgdkxpZ2h0RnJvbnQ7XG52YXJ5aW5nIHZlYzMgdkluZGlyZWN0RnJvbnQ7XG4jaWZkZWYgRE9VQkxFX1NJREVEXG5cdHZhcnlpbmcgdmVjMyB2TGlnaHRCYWNrO1xuXHR2YXJ5aW5nIHZlYzMgdkluZGlyZWN0QmFjaztcbiNlbmRpZlxuI2luY2x1ZGUgXHgzY2NvbW1vblx4M2VcbiNpbmNsdWRlIFx4M2NwYWNraW5nXHgzZVxuI2luY2x1ZGUgXHgzY2RpdGhlcmluZ19wYXJzX2ZyYWdtZW50XHgzZVxuI2luY2x1ZGUgXHgzY2NvbG9yX3BhcnNfZnJhZ21lbnRceDNlXG4jaW5jbHVkZSBceDNjdXZfcGFyc19mcmFnbWVudFx4M2VcbiNpbmNsdWRlIFx4M2N1djJfcGFyc19mcmFnbWVudFx4M2VcbiNpbmNsdWRlIFx4M2NtYXBfcGFyc19mcmFnbWVudFx4M2VcbiNpbmNsdWRlIFx4M2NhbHBoYW1hcF9wYXJzX2ZyYWdtZW50XHgzZVxuI2luY2x1ZGUgXHgzY2FvbWFwX3BhcnNfZnJhZ21lbnRceDNlXG4jaW5jbHVkZSBceDNjbGlnaHRtYXBfcGFyc19mcmFnbWVudFx4M2VcbiNpbmNsdWRlIFx4M2NlbWlzc2l2ZW1hcF9wYXJzX2ZyYWdtZW50XHgzZVxuI2luY2x1ZGUgXHgzY2Vudm1hcF9wYXJzX2ZyYWdtZW50XHgzZVxuI2luY2x1ZGUgXHgzY2JzZGZzXHgzZVxuI2luY2x1ZGUgXHgzY2xpZ2h0c19wYXJzX2JlZ2luXHgzZVxuI2luY2x1ZGUgXHgzY2ZvZ19wYXJzX2ZyYWdtZW50XHgzZVxuI2luY2x1ZGUgXHgzY3NoYWRvd21hcF9wYXJzX2ZyYWdtZW50XHgzZVxuI2luY2x1ZGUgXHgzY3NoYWRvd21hc2tfcGFyc19mcmFnbWVudFx4M2VcbiNpbmNsdWRlIFx4M2NzcGVjdWxhcm1hcF9wYXJzX2ZyYWdtZW50XHgzZVxuI2luY2x1ZGUgXHgzY2xvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnRceDNlXG4jaW5jbHVkZSBceDNjY2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnRceDNlXG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIFx4M2NjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnRceDNlXG5cdHZlYzQgZGlmZnVzZUNvbG9yIFx4M2QgdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApO1xuXHRSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCBceDNkIFJlZmxlY3RlZExpZ2h0KCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSApO1xuXHR2ZWMzIHRvdGFsRW1pc3NpdmVSYWRpYW5jZSBceDNkIGVtaXNzaXZlO1xuXHQjaW5jbHVkZSBceDNjbG9nZGVwdGhidWZfZnJhZ21lbnRceDNlXG5cdCNpbmNsdWRlIFx4M2NtYXBfZnJhZ21lbnRceDNlXG5cdCNpbmNsdWRlIFx4M2Njb2xvcl9mcmFnbWVudFx4M2Vcblx0I2luY2x1ZGUgXHgzY2FscGhhbWFwX2ZyYWdtZW50XHgzZVxuXHQjaW5jbHVkZSBceDNjYWxwaGF0ZXN0X2ZyYWdtZW50XHgzZVxuXHQjaW5jbHVkZSBceDNjc3BlY3VsYXJtYXBfZnJhZ21lbnRceDNlXG5cdCNpbmNsdWRlIFx4M2NlbWlzc2l2ZW1hcF9mcmFnbWVudFx4M2Vcblx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlIFx4M2QgZ2V0QW1iaWVudExpZ2h0SXJyYWRpYW5jZSggYW1iaWVudExpZ2h0Q29sb3IgKTtcblx0I2lmZGVmIERPVUJMRV9TSURFRFxuXHRcdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArXHgzZCAoIGdsX0Zyb250RmFjaW5nICkgPyB2SW5kaXJlY3RGcm9udCA6IHZJbmRpcmVjdEJhY2s7XG5cdCNlbHNlXG5cdFx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICtceDNkIHZJbmRpcmVjdEZyb250O1xuXHQjZW5kaWZcblx0I2luY2x1ZGUgXHgzY2xpZ2h0bWFwX2ZyYWdtZW50XHgzZVxuXHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKlx4M2QgQlJERl9EaWZmdXNlX0xhbWJlcnQoIGRpZmZ1c2VDb2xvci5yZ2IgKTtcblx0I2lmZGVmIERPVUJMRV9TSURFRFxuXHRcdHJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgXHgzZCAoIGdsX0Zyb250RmFjaW5nICkgPyB2TGlnaHRGcm9udCA6IHZMaWdodEJhY2s7XG5cdCNlbHNlXG5cdFx0cmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSBceDNkIHZMaWdodEZyb250O1xuXHQjZW5kaWZcblx0cmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSAqXHgzZCBCUkRGX0RpZmZ1c2VfTGFtYmVydCggZGlmZnVzZUNvbG9yLnJnYiApICogZ2V0U2hhZG93TWFzaygpO1xuXHQjaW5jbHVkZSBceDNjYW9tYXBfZnJhZ21lbnRceDNlXG5cdHZlYzMgb3V0Z29pbmdMaWdodCBceDNkIHJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKyByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKyB0b3RhbEVtaXNzaXZlUmFkaWFuY2U7XG5cdCNpbmNsdWRlIFx4M2NlbnZtYXBfZnJhZ21lbnRceDNlXG5cdGdsX0ZyYWdDb2xvciBceDNkIHZlYzQoIG91dGdvaW5nTGlnaHQsIGRpZmZ1c2VDb2xvci5hICk7XG5cdCNpbmNsdWRlIFx4M2N0b25lbWFwcGluZ19mcmFnbWVudFx4M2Vcblx0I2luY2x1ZGUgXHgzY2VuY29kaW5nc19mcmFnbWVudFx4M2Vcblx0I2luY2x1ZGUgXHgzY2ZvZ19mcmFnbWVudFx4M2Vcblx0I2luY2x1ZGUgXHgzY3ByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnRceDNlXG5cdCNpbmNsdWRlIFx4M2NkaXRoZXJpbmdfZnJhZ21lbnRceDNlXG59IiwKbWVzaGxhbWJlcnRfdmVydDoiI2RlZmluZSBMQU1CRVJUXG52YXJ5aW5nIHZlYzMgdkxpZ2h0RnJvbnQ7XG52YXJ5aW5nIHZlYzMgdkluZGlyZWN0RnJvbnQ7XG4jaWZkZWYgRE9VQkxFX1NJREVEXG5cdHZhcnlpbmcgdmVjMyB2TGlnaHRCYWNrO1xuXHR2YXJ5aW5nIHZlYzMgdkluZGlyZWN0QmFjaztcbiNlbmRpZlxuI2luY2x1ZGUgXHgzY2NvbW1vblx4M2VcbiNpbmNsdWRlIFx4M2N1dl9wYXJzX3ZlcnRleFx4M2VcbiNpbmNsdWRlIFx4M2N1djJfcGFyc192ZXJ0ZXhceDNlXG4jaW5jbHVkZSBceDNjZW52bWFwX3BhcnNfdmVydGV4XHgzZVxuI2luY2x1ZGUgXHgzY2JzZGZzXHgzZVxuI2luY2x1ZGUgXHgzY2xpZ2h0c19wYXJzX2JlZ2luXHgzZVxuI2luY2x1ZGUgXHgzY2NvbG9yX3BhcnNfdmVydGV4XHgzZVxuI2luY2x1ZGUgXHgzY2ZvZ19wYXJzX3ZlcnRleFx4M2VcbiNpbmNsdWRlIFx4M2Ntb3JwaHRhcmdldF9wYXJzX3ZlcnRleFx4M2VcbiNpbmNsdWRlIFx4M2Nza2lubmluZ19wYXJzX3ZlcnRleFx4M2VcbiNpbmNsdWRlIFx4M2NzaGFkb3dtYXBfcGFyc192ZXJ0ZXhceDNlXG4jaW5jbHVkZSBceDNjbG9nZGVwdGhidWZfcGFyc192ZXJ0ZXhceDNlXG4jaW5jbHVkZSBceDNjY2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4XHgzZVxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSBceDNjdXZfdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjdXYyX3ZlcnRleFx4M2Vcblx0I2luY2x1ZGUgXHgzY2NvbG9yX3ZlcnRleFx4M2Vcblx0I2luY2x1ZGUgXHgzY2JlZ2lubm9ybWFsX3ZlcnRleFx4M2Vcblx0I2luY2x1ZGUgXHgzY21vcnBobm9ybWFsX3ZlcnRleFx4M2Vcblx0I2luY2x1ZGUgXHgzY3NraW5iYXNlX3ZlcnRleFx4M2Vcblx0I2luY2x1ZGUgXHgzY3NraW5ub3JtYWxfdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjZGVmYXVsdG5vcm1hbF92ZXJ0ZXhceDNlXG5cdCNpbmNsdWRlIFx4M2NiZWdpbl92ZXJ0ZXhceDNlXG5cdCNpbmNsdWRlIFx4M2Ntb3JwaHRhcmdldF92ZXJ0ZXhceDNlXG5cdCNpbmNsdWRlIFx4M2Nza2lubmluZ192ZXJ0ZXhceDNlXG5cdCNpbmNsdWRlIFx4M2Nwcm9qZWN0X3ZlcnRleFx4M2Vcblx0I2luY2x1ZGUgXHgzY2xvZ2RlcHRoYnVmX3ZlcnRleFx4M2Vcblx0I2luY2x1ZGUgXHgzY2NsaXBwaW5nX3BsYW5lc192ZXJ0ZXhceDNlXG5cdCNpbmNsdWRlIFx4M2N3b3JsZHBvc192ZXJ0ZXhceDNlXG5cdCNpbmNsdWRlIFx4M2NlbnZtYXBfdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjbGlnaHRzX2xhbWJlcnRfdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjc2hhZG93bWFwX3ZlcnRleFx4M2Vcblx0I2luY2x1ZGUgXHgzY2ZvZ192ZXJ0ZXhceDNlXG59IiwKbWVzaG1hdGNhcF9mcmFnOiIjZGVmaW5lIE1BVENBUFxudW5pZm9ybSB2ZWMzIGRpZmZ1c2U7XG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG51bmlmb3JtIHNhbXBsZXIyRCBtYXRjYXA7XG52YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjtcbiNpZm5kZWYgRkxBVF9TSEFERURcblx0dmFyeWluZyB2ZWMzIHZOb3JtYWw7XG4jZW5kaWZcbiNpbmNsdWRlIFx4M2Njb21tb25ceDNlXG4jaW5jbHVkZSBceDNjdXZfcGFyc19mcmFnbWVudFx4M2VcbiNpbmNsdWRlIFx4M2NtYXBfcGFyc19mcmFnbWVudFx4M2VcbiNpbmNsdWRlIFx4M2NhbHBoYW1hcF9wYXJzX2ZyYWdtZW50XHgzZVxuI2luY2x1ZGUgXHgzY2ZvZ19wYXJzX2ZyYWdtZW50XHgzZVxuI2luY2x1ZGUgXHgzY2J1bXBtYXBfcGFyc19mcmFnbWVudFx4M2VcbiNpbmNsdWRlIFx4M2Nub3JtYWxtYXBfcGFyc19mcmFnbWVudFx4M2VcbiNpbmNsdWRlIFx4M2Nsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50XHgzZVxuI2luY2x1ZGUgXHgzY2NsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50XHgzZVxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSBceDNjY2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50XHgzZVxuXHR2ZWM0IGRpZmZ1c2VDb2xvciBceDNkIHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTtcblx0I2luY2x1ZGUgXHgzY2xvZ2RlcHRoYnVmX2ZyYWdtZW50XHgzZVxuXHQjaW5jbHVkZSBceDNjbWFwX2ZyYWdtZW50XHgzZVxuXHQjaW5jbHVkZSBceDNjYWxwaGFtYXBfZnJhZ21lbnRceDNlXG5cdCNpbmNsdWRlIFx4M2NhbHBoYXRlc3RfZnJhZ21lbnRceDNlXG5cdCNpbmNsdWRlIFx4M2Nub3JtYWxfZnJhZ21lbnRfYmVnaW5ceDNlXG5cdCNpbmNsdWRlIFx4M2Nub3JtYWxfZnJhZ21lbnRfbWFwc1x4M2Vcblx0dmVjMyB2aWV3RGlyIFx4M2Qgbm9ybWFsaXplKCB2Vmlld1Bvc2l0aW9uICk7XG5cdHZlYzMgeCBceDNkIG5vcm1hbGl6ZSggdmVjMyggdmlld0Rpci56LCAwLjAsIC0gdmlld0Rpci54ICkgKTtcblx0dmVjMyB5IFx4M2QgY3Jvc3MoIHZpZXdEaXIsIHggKTtcblx0dmVjMiB1diBceDNkIHZlYzIoIGRvdCggeCwgbm9ybWFsICksIGRvdCggeSwgbm9ybWFsICkgKSAqIDAuNDk1ICsgMC41O1xuXHQjaWZkZWYgVVNFX01BVENBUFxuXHRcdHZlYzQgbWF0Y2FwQ29sb3IgXHgzZCB0ZXh0dXJlMkQoIG1hdGNhcCwgdXYgKTtcblx0XHRtYXRjYXBDb2xvciBceDNkIG1hdGNhcFRleGVsVG9MaW5lYXIoIG1hdGNhcENvbG9yICk7XG5cdCNlbHNlXG5cdFx0dmVjNCBtYXRjYXBDb2xvciBceDNkIHZlYzQoIDEuMCApO1xuXHQjZW5kaWZcblx0dmVjMyBvdXRnb2luZ0xpZ2h0IFx4M2QgZGlmZnVzZUNvbG9yLnJnYiAqIG1hdGNhcENvbG9yLnJnYjtcblx0Z2xfRnJhZ0NvbG9yIFx4M2QgdmVjNCggb3V0Z29pbmdMaWdodCwgZGlmZnVzZUNvbG9yLmEgKTtcblx0I2luY2x1ZGUgXHgzY3ByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnRceDNlXG5cdCNpbmNsdWRlIFx4M2N0b25lbWFwcGluZ19mcmFnbWVudFx4M2Vcblx0I2luY2x1ZGUgXHgzY2VuY29kaW5nc19mcmFnbWVudFx4M2Vcblx0I2luY2x1ZGUgXHgzY2ZvZ19mcmFnbWVudFx4M2Vcbn0iLAptZXNobWF0Y2FwX3ZlcnQ6IiNkZWZpbmUgTUFUQ0FQXG52YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjtcbiNpZm5kZWYgRkxBVF9TSEFERURcblx0dmFyeWluZyB2ZWMzIHZOb3JtYWw7XG4jZW5kaWZcbiNpbmNsdWRlIFx4M2Njb21tb25ceDNlXG4jaW5jbHVkZSBceDNjdXZfcGFyc192ZXJ0ZXhceDNlXG4jaW5jbHVkZSBceDNjZGlzcGxhY2VtZW50bWFwX3BhcnNfdmVydGV4XHgzZVxuI2luY2x1ZGUgXHgzY2ZvZ19wYXJzX3ZlcnRleFx4M2VcbiNpbmNsdWRlIFx4M2Ntb3JwaHRhcmdldF9wYXJzX3ZlcnRleFx4M2VcbiNpbmNsdWRlIFx4M2Nza2lubmluZ19wYXJzX3ZlcnRleFx4M2VcbiNpbmNsdWRlIFx4M2Nsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleFx4M2VcbiNpbmNsdWRlIFx4M2NjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXhceDNlXG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIFx4M2N1dl92ZXJ0ZXhceDNlXG5cdCNpbmNsdWRlIFx4M2NiZWdpbm5vcm1hbF92ZXJ0ZXhceDNlXG5cdCNpbmNsdWRlIFx4M2Ntb3JwaG5vcm1hbF92ZXJ0ZXhceDNlXG5cdCNpbmNsdWRlIFx4M2Nza2luYmFzZV92ZXJ0ZXhceDNlXG5cdCNpbmNsdWRlIFx4M2Nza2lubm9ybWFsX3ZlcnRleFx4M2Vcblx0I2luY2x1ZGUgXHgzY2RlZmF1bHRub3JtYWxfdmVydGV4XHgzZVxuXHQjaWZuZGVmIEZMQVRfU0hBREVEXG5cdFx0dk5vcm1hbCBceDNkIG5vcm1hbGl6ZSggdHJhbnNmb3JtZWROb3JtYWwgKTtcblx0I2VuZGlmXG5cdCNpbmNsdWRlIFx4M2NiZWdpbl92ZXJ0ZXhceDNlXG5cdCNpbmNsdWRlIFx4M2Ntb3JwaHRhcmdldF92ZXJ0ZXhceDNlXG5cdCNpbmNsdWRlIFx4M2Nza2lubmluZ192ZXJ0ZXhceDNlXG5cdCNpbmNsdWRlIFx4M2NkaXNwbGFjZW1lbnRtYXBfdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjcHJvamVjdF92ZXJ0ZXhceDNlXG5cdCNpbmNsdWRlIFx4M2Nsb2dkZXB0aGJ1Zl92ZXJ0ZXhceDNlXG5cdCNpbmNsdWRlIFx4M2NjbGlwcGluZ19wbGFuZXNfdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjZm9nX3ZlcnRleFx4M2Vcblx0dlZpZXdQb3NpdGlvbiBceDNkIC0gbXZQb3NpdGlvbi54eXo7XG59IiwKbWVzaHBob25nX2ZyYWc6IiNkZWZpbmUgUEhPTkdcbnVuaWZvcm0gdmVjMyBkaWZmdXNlO1xudW5pZm9ybSB2ZWMzIGVtaXNzaXZlO1xudW5pZm9ybSB2ZWMzIHNwZWN1bGFyO1xudW5pZm9ybSBmbG9hdCBzaGluaW5lc3M7XG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG4jaW5jbHVkZSBceDNjY29tbW9uXHgzZVxuI2luY2x1ZGUgXHgzY3BhY2tpbmdceDNlXG4jaW5jbHVkZSBceDNjZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnRceDNlXG4jaW5jbHVkZSBceDNjY29sb3JfcGFyc19mcmFnbWVudFx4M2VcbiNpbmNsdWRlIFx4M2N1dl9wYXJzX2ZyYWdtZW50XHgzZVxuI2luY2x1ZGUgXHgzY3V2Ml9wYXJzX2ZyYWdtZW50XHgzZVxuI2luY2x1ZGUgXHgzY21hcF9wYXJzX2ZyYWdtZW50XHgzZVxuI2luY2x1ZGUgXHgzY2FscGhhbWFwX3BhcnNfZnJhZ21lbnRceDNlXG4jaW5jbHVkZSBceDNjYW9tYXBfcGFyc19mcmFnbWVudFx4M2VcbiNpbmNsdWRlIFx4M2NsaWdodG1hcF9wYXJzX2ZyYWdtZW50XHgzZVxuI2luY2x1ZGUgXHgzY2VtaXNzaXZlbWFwX3BhcnNfZnJhZ21lbnRceDNlXG4jaW5jbHVkZSBceDNjZW52bWFwX3BhcnNfZnJhZ21lbnRceDNlXG4jaW5jbHVkZSBceDNjZ3JhZGllbnRtYXBfcGFyc19mcmFnbWVudFx4M2VcbiNpbmNsdWRlIFx4M2Nmb2dfcGFyc19mcmFnbWVudFx4M2VcbiNpbmNsdWRlIFx4M2Nic2Rmc1x4M2VcbiNpbmNsdWRlIFx4M2NsaWdodHNfcGFyc19iZWdpblx4M2VcbiNpbmNsdWRlIFx4M2NsaWdodHNfcGhvbmdfcGFyc19mcmFnbWVudFx4M2VcbiNpbmNsdWRlIFx4M2NzaGFkb3dtYXBfcGFyc19mcmFnbWVudFx4M2VcbiNpbmNsdWRlIFx4M2NidW1wbWFwX3BhcnNfZnJhZ21lbnRceDNlXG4jaW5jbHVkZSBceDNjbm9ybWFsbWFwX3BhcnNfZnJhZ21lbnRceDNlXG4jaW5jbHVkZSBceDNjc3BlY3VsYXJtYXBfcGFyc19mcmFnbWVudFx4M2VcbiNpbmNsdWRlIFx4M2Nsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50XHgzZVxuI2luY2x1ZGUgXHgzY2NsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50XHgzZVxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSBceDNjY2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50XHgzZVxuXHR2ZWM0IGRpZmZ1c2VDb2xvciBceDNkIHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTtcblx0UmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgXHgzZCBSZWZsZWN0ZWRMaWdodCggdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICkgKTtcblx0dmVjMyB0b3RhbEVtaXNzaXZlUmFkaWFuY2UgXHgzZCBlbWlzc2l2ZTtcblx0I2luY2x1ZGUgXHgzY2xvZ2RlcHRoYnVmX2ZyYWdtZW50XHgzZVxuXHQjaW5jbHVkZSBceDNjbWFwX2ZyYWdtZW50XHgzZVxuXHQjaW5jbHVkZSBceDNjY29sb3JfZnJhZ21lbnRceDNlXG5cdCNpbmNsdWRlIFx4M2NhbHBoYW1hcF9mcmFnbWVudFx4M2Vcblx0I2luY2x1ZGUgXHgzY2FscGhhdGVzdF9mcmFnbWVudFx4M2Vcblx0I2luY2x1ZGUgXHgzY3NwZWN1bGFybWFwX2ZyYWdtZW50XHgzZVxuXHQjaW5jbHVkZSBceDNjbm9ybWFsX2ZyYWdtZW50X2JlZ2luXHgzZVxuXHQjaW5jbHVkZSBceDNjbm9ybWFsX2ZyYWdtZW50X21hcHNceDNlXG5cdCNpbmNsdWRlIFx4M2NlbWlzc2l2ZW1hcF9mcmFnbWVudFx4M2Vcblx0I2luY2x1ZGUgXHgzY2xpZ2h0c19waG9uZ19mcmFnbWVudFx4M2Vcblx0I2luY2x1ZGUgXHgzY2xpZ2h0c19mcmFnbWVudF9iZWdpblx4M2Vcblx0I2luY2x1ZGUgXHgzY2xpZ2h0c19mcmFnbWVudF9tYXBzXHgzZVxuXHQjaW5jbHVkZSBceDNjbGlnaHRzX2ZyYWdtZW50X2VuZFx4M2Vcblx0I2luY2x1ZGUgXHgzY2FvbWFwX2ZyYWdtZW50XHgzZVxuXHR2ZWMzIG91dGdvaW5nTGlnaHQgXHgzZCByZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICsgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICsgcmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXIgKyByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdFNwZWN1bGFyICsgdG90YWxFbWlzc2l2ZVJhZGlhbmNlO1xuXHQjaW5jbHVkZSBceDNjZW52bWFwX2ZyYWdtZW50XHgzZVxuXHRnbF9GcmFnQ29sb3IgXHgzZCB2ZWM0KCBvdXRnb2luZ0xpZ2h0LCBkaWZmdXNlQ29sb3IuYSApO1xuXHQjaW5jbHVkZSBceDNjdG9uZW1hcHBpbmdfZnJhZ21lbnRceDNlXG5cdCNpbmNsdWRlIFx4M2NlbmNvZGluZ3NfZnJhZ21lbnRceDNlXG5cdCNpbmNsdWRlIFx4M2Nmb2dfZnJhZ21lbnRceDNlXG5cdCNpbmNsdWRlIFx4M2NwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50XHgzZVxuXHQjaW5jbHVkZSBceDNjZGl0aGVyaW5nX2ZyYWdtZW50XHgzZVxufSIsCm1lc2hwaG9uZ192ZXJ0OiIjZGVmaW5lIFBIT05HXG52YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjtcbiNpZm5kZWYgRkxBVF9TSEFERURcblx0dmFyeWluZyB2ZWMzIHZOb3JtYWw7XG4jZW5kaWZcbiNpbmNsdWRlIFx4M2Njb21tb25ceDNlXG4jaW5jbHVkZSBceDNjdXZfcGFyc192ZXJ0ZXhceDNlXG4jaW5jbHVkZSBceDNjdXYyX3BhcnNfdmVydGV4XHgzZVxuI2luY2x1ZGUgXHgzY2Rpc3BsYWNlbWVudG1hcF9wYXJzX3ZlcnRleFx4M2VcbiNpbmNsdWRlIFx4M2NlbnZtYXBfcGFyc192ZXJ0ZXhceDNlXG4jaW5jbHVkZSBceDNjY29sb3JfcGFyc192ZXJ0ZXhceDNlXG4jaW5jbHVkZSBceDNjZm9nX3BhcnNfdmVydGV4XHgzZVxuI2luY2x1ZGUgXHgzY21vcnBodGFyZ2V0X3BhcnNfdmVydGV4XHgzZVxuI2luY2x1ZGUgXHgzY3NraW5uaW5nX3BhcnNfdmVydGV4XHgzZVxuI2luY2x1ZGUgXHgzY3NoYWRvd21hcF9wYXJzX3ZlcnRleFx4M2VcbiNpbmNsdWRlIFx4M2Nsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleFx4M2VcbiNpbmNsdWRlIFx4M2NjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXhceDNlXG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIFx4M2N1dl92ZXJ0ZXhceDNlXG5cdCNpbmNsdWRlIFx4M2N1djJfdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjY29sb3JfdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjYmVnaW5ub3JtYWxfdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjbW9ycGhub3JtYWxfdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjc2tpbmJhc2VfdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjc2tpbm5vcm1hbF92ZXJ0ZXhceDNlXG5cdCNpbmNsdWRlIFx4M2NkZWZhdWx0bm9ybWFsX3ZlcnRleFx4M2VcbiNpZm5kZWYgRkxBVF9TSEFERURcblx0dk5vcm1hbCBceDNkIG5vcm1hbGl6ZSggdHJhbnNmb3JtZWROb3JtYWwgKTtcbiNlbmRpZlxuXHQjaW5jbHVkZSBceDNjYmVnaW5fdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjbW9ycGh0YXJnZXRfdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjc2tpbm5pbmdfdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjZGlzcGxhY2VtZW50bWFwX3ZlcnRleFx4M2Vcblx0I2luY2x1ZGUgXHgzY3Byb2plY3RfdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjbG9nZGVwdGhidWZfdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjY2xpcHBpbmdfcGxhbmVzX3ZlcnRleFx4M2Vcblx0dlZpZXdQb3NpdGlvbiBceDNkIC0gbXZQb3NpdGlvbi54eXo7XG5cdCNpbmNsdWRlIFx4M2N3b3JsZHBvc192ZXJ0ZXhceDNlXG5cdCNpbmNsdWRlIFx4M2NlbnZtYXBfdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjc2hhZG93bWFwX3ZlcnRleFx4M2Vcblx0I2luY2x1ZGUgXHgzY2ZvZ192ZXJ0ZXhceDNlXG59IiwKbWVzaHBoeXNpY2FsX2ZyYWc6IiNkZWZpbmUgUEhZU0lDQUxcbnVuaWZvcm0gdmVjMyBkaWZmdXNlO1xudW5pZm9ybSB2ZWMzIGVtaXNzaXZlO1xudW5pZm9ybSBmbG9hdCByb3VnaG5lc3M7XG51bmlmb3JtIGZsb2F0IG1ldGFsbmVzcztcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcbiNpZm5kZWYgU1RBTkRBUkRcblx0dW5pZm9ybSBmbG9hdCBjbGVhckNvYXQ7XG5cdHVuaWZvcm0gZmxvYXQgY2xlYXJDb2F0Um91Z2huZXNzO1xuI2VuZGlmXG52YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjtcbiNpZm5kZWYgRkxBVF9TSEFERURcblx0dmFyeWluZyB2ZWMzIHZOb3JtYWw7XG5cdCNpZmRlZiBVU0VfVEFOR0VOVFxuXHRcdHZhcnlpbmcgdmVjMyB2VGFuZ2VudDtcblx0XHR2YXJ5aW5nIHZlYzMgdkJpdGFuZ2VudDtcblx0I2VuZGlmXG4jZW5kaWZcbiNpbmNsdWRlIFx4M2Njb21tb25ceDNlXG4jaW5jbHVkZSBceDNjcGFja2luZ1x4M2VcbiNpbmNsdWRlIFx4M2NkaXRoZXJpbmdfcGFyc19mcmFnbWVudFx4M2VcbiNpbmNsdWRlIFx4M2Njb2xvcl9wYXJzX2ZyYWdtZW50XHgzZVxuI2luY2x1ZGUgXHgzY3V2X3BhcnNfZnJhZ21lbnRceDNlXG4jaW5jbHVkZSBceDNjdXYyX3BhcnNfZnJhZ21lbnRceDNlXG4jaW5jbHVkZSBceDNjbWFwX3BhcnNfZnJhZ21lbnRceDNlXG4jaW5jbHVkZSBceDNjYWxwaGFtYXBfcGFyc19mcmFnbWVudFx4M2VcbiNpbmNsdWRlIFx4M2Nhb21hcF9wYXJzX2ZyYWdtZW50XHgzZVxuI2luY2x1ZGUgXHgzY2xpZ2h0bWFwX3BhcnNfZnJhZ21lbnRceDNlXG4jaW5jbHVkZSBceDNjZW1pc3NpdmVtYXBfcGFyc19mcmFnbWVudFx4M2VcbiNpbmNsdWRlIFx4M2Nic2Rmc1x4M2VcbiNpbmNsdWRlIFx4M2NjdWJlX3V2X3JlZmxlY3Rpb25fZnJhZ21lbnRceDNlXG4jaW5jbHVkZSBceDNjZW52bWFwX3BhcnNfZnJhZ21lbnRceDNlXG4jaW5jbHVkZSBceDNjZW52bWFwX3BoeXNpY2FsX3BhcnNfZnJhZ21lbnRceDNlXG4jaW5jbHVkZSBceDNjZm9nX3BhcnNfZnJhZ21lbnRceDNlXG4jaW5jbHVkZSBceDNjbGlnaHRzX3BhcnNfYmVnaW5ceDNlXG4jaW5jbHVkZSBceDNjbGlnaHRzX3BoeXNpY2FsX3BhcnNfZnJhZ21lbnRceDNlXG4jaW5jbHVkZSBceDNjc2hhZG93bWFwX3BhcnNfZnJhZ21lbnRceDNlXG4jaW5jbHVkZSBceDNjYnVtcG1hcF9wYXJzX2ZyYWdtZW50XHgzZVxuI2luY2x1ZGUgXHgzY25vcm1hbG1hcF9wYXJzX2ZyYWdtZW50XHgzZVxuI2luY2x1ZGUgXHgzY3JvdWdobmVzc21hcF9wYXJzX2ZyYWdtZW50XHgzZVxuI2luY2x1ZGUgXHgzY21ldGFsbmVzc21hcF9wYXJzX2ZyYWdtZW50XHgzZVxuI2luY2x1ZGUgXHgzY2xvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnRceDNlXG4jaW5jbHVkZSBceDNjY2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnRceDNlXG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIFx4M2NjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnRceDNlXG5cdHZlYzQgZGlmZnVzZUNvbG9yIFx4M2QgdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApO1xuXHRSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCBceDNkIFJlZmxlY3RlZExpZ2h0KCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSApO1xuXHR2ZWMzIHRvdGFsRW1pc3NpdmVSYWRpYW5jZSBceDNkIGVtaXNzaXZlO1xuXHQjaW5jbHVkZSBceDNjbG9nZGVwdGhidWZfZnJhZ21lbnRceDNlXG5cdCNpbmNsdWRlIFx4M2NtYXBfZnJhZ21lbnRceDNlXG5cdCNpbmNsdWRlIFx4M2Njb2xvcl9mcmFnbWVudFx4M2Vcblx0I2luY2x1ZGUgXHgzY2FscGhhbWFwX2ZyYWdtZW50XHgzZVxuXHQjaW5jbHVkZSBceDNjYWxwaGF0ZXN0X2ZyYWdtZW50XHgzZVxuXHQjaW5jbHVkZSBceDNjcm91Z2huZXNzbWFwX2ZyYWdtZW50XHgzZVxuXHQjaW5jbHVkZSBceDNjbWV0YWxuZXNzbWFwX2ZyYWdtZW50XHgzZVxuXHQjaW5jbHVkZSBceDNjbm9ybWFsX2ZyYWdtZW50X2JlZ2luXHgzZVxuXHQjaW5jbHVkZSBceDNjbm9ybWFsX2ZyYWdtZW50X21hcHNceDNlXG5cdCNpbmNsdWRlIFx4M2NlbWlzc2l2ZW1hcF9mcmFnbWVudFx4M2Vcblx0I2luY2x1ZGUgXHgzY2xpZ2h0c19waHlzaWNhbF9mcmFnbWVudFx4M2Vcblx0I2luY2x1ZGUgXHgzY2xpZ2h0c19mcmFnbWVudF9iZWdpblx4M2Vcblx0I2luY2x1ZGUgXHgzY2xpZ2h0c19mcmFnbWVudF9tYXBzXHgzZVxuXHQjaW5jbHVkZSBceDNjbGlnaHRzX2ZyYWdtZW50X2VuZFx4M2Vcblx0I2luY2x1ZGUgXHgzY2FvbWFwX2ZyYWdtZW50XHgzZVxuXHR2ZWMzIG91dGdvaW5nTGlnaHQgXHgzZCByZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICsgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICsgcmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXIgKyByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdFNwZWN1bGFyICsgdG90YWxFbWlzc2l2ZVJhZGlhbmNlO1xuXHRnbF9GcmFnQ29sb3IgXHgzZCB2ZWM0KCBvdXRnb2luZ0xpZ2h0LCBkaWZmdXNlQ29sb3IuYSApO1xuXHQjaW5jbHVkZSBceDNjdG9uZW1hcHBpbmdfZnJhZ21lbnRceDNlXG5cdCNpbmNsdWRlIFx4M2NlbmNvZGluZ3NfZnJhZ21lbnRceDNlXG5cdCNpbmNsdWRlIFx4M2Nmb2dfZnJhZ21lbnRceDNlXG5cdCNpbmNsdWRlIFx4M2NwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50XHgzZVxuXHQjaW5jbHVkZSBceDNjZGl0aGVyaW5nX2ZyYWdtZW50XHgzZVxufSIsCm1lc2hwaHlzaWNhbF92ZXJ0OiIjZGVmaW5lIFBIWVNJQ0FMXG52YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjtcbiNpZm5kZWYgRkxBVF9TSEFERURcblx0dmFyeWluZyB2ZWMzIHZOb3JtYWw7XG5cdCNpZmRlZiBVU0VfVEFOR0VOVFxuXHRcdHZhcnlpbmcgdmVjMyB2VGFuZ2VudDtcblx0XHR2YXJ5aW5nIHZlYzMgdkJpdGFuZ2VudDtcblx0I2VuZGlmXG4jZW5kaWZcbiNpbmNsdWRlIFx4M2Njb21tb25ceDNlXG4jaW5jbHVkZSBceDNjdXZfcGFyc192ZXJ0ZXhceDNlXG4jaW5jbHVkZSBceDNjdXYyX3BhcnNfdmVydGV4XHgzZVxuI2luY2x1ZGUgXHgzY2Rpc3BsYWNlbWVudG1hcF9wYXJzX3ZlcnRleFx4M2VcbiNpbmNsdWRlIFx4M2Njb2xvcl9wYXJzX3ZlcnRleFx4M2VcbiNpbmNsdWRlIFx4M2Nmb2dfcGFyc192ZXJ0ZXhceDNlXG4jaW5jbHVkZSBceDNjbW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXhceDNlXG4jaW5jbHVkZSBceDNjc2tpbm5pbmdfcGFyc192ZXJ0ZXhceDNlXG4jaW5jbHVkZSBceDNjc2hhZG93bWFwX3BhcnNfdmVydGV4XHgzZVxuI2luY2x1ZGUgXHgzY2xvZ2RlcHRoYnVmX3BhcnNfdmVydGV4XHgzZVxuI2luY2x1ZGUgXHgzY2NsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleFx4M2VcbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgXHgzY3V2X3ZlcnRleFx4M2Vcblx0I2luY2x1ZGUgXHgzY3V2Ml92ZXJ0ZXhceDNlXG5cdCNpbmNsdWRlIFx4M2Njb2xvcl92ZXJ0ZXhceDNlXG5cdCNpbmNsdWRlIFx4M2NiZWdpbm5vcm1hbF92ZXJ0ZXhceDNlXG5cdCNpbmNsdWRlIFx4M2Ntb3JwaG5vcm1hbF92ZXJ0ZXhceDNlXG5cdCNpbmNsdWRlIFx4M2Nza2luYmFzZV92ZXJ0ZXhceDNlXG5cdCNpbmNsdWRlIFx4M2Nza2lubm9ybWFsX3ZlcnRleFx4M2Vcblx0I2luY2x1ZGUgXHgzY2RlZmF1bHRub3JtYWxfdmVydGV4XHgzZVxuI2lmbmRlZiBGTEFUX1NIQURFRFxuXHR2Tm9ybWFsIFx4M2Qgbm9ybWFsaXplKCB0cmFuc2Zvcm1lZE5vcm1hbCApO1xuXHQjaWZkZWYgVVNFX1RBTkdFTlRcblx0XHR2VGFuZ2VudCBceDNkIG5vcm1hbGl6ZSggdHJhbnNmb3JtZWRUYW5nZW50ICk7XG5cdFx0dkJpdGFuZ2VudCBceDNkIG5vcm1hbGl6ZSggY3Jvc3MoIHZOb3JtYWwsIHZUYW5nZW50ICkgKiB0YW5nZW50LncgKTtcblx0I2VuZGlmXG4jZW5kaWZcblx0I2luY2x1ZGUgXHgzY2JlZ2luX3ZlcnRleFx4M2Vcblx0I2luY2x1ZGUgXHgzY21vcnBodGFyZ2V0X3ZlcnRleFx4M2Vcblx0I2luY2x1ZGUgXHgzY3NraW5uaW5nX3ZlcnRleFx4M2Vcblx0I2luY2x1ZGUgXHgzY2Rpc3BsYWNlbWVudG1hcF92ZXJ0ZXhceDNlXG5cdCNpbmNsdWRlIFx4M2Nwcm9qZWN0X3ZlcnRleFx4M2Vcblx0I2luY2x1ZGUgXHgzY2xvZ2RlcHRoYnVmX3ZlcnRleFx4M2Vcblx0I2luY2x1ZGUgXHgzY2NsaXBwaW5nX3BsYW5lc192ZXJ0ZXhceDNlXG5cdHZWaWV3UG9zaXRpb24gXHgzZCAtIG12UG9zaXRpb24ueHl6O1xuXHQjaW5jbHVkZSBceDNjd29ybGRwb3NfdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjc2hhZG93bWFwX3ZlcnRleFx4M2Vcblx0I2luY2x1ZGUgXHgzY2ZvZ192ZXJ0ZXhceDNlXG59IiwKbm9ybWFsX2ZyYWc6IiNkZWZpbmUgTk9STUFMXG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG4jaWYgZGVmaW5lZCggRkxBVF9TSEFERUQgKSB8fCBkZWZpbmVkKCBVU0VfQlVNUE1BUCApIHx8ICggZGVmaW5lZCggVVNFX05PUk1BTE1BUCApIFx4MjZceDI2ICEgZGVmaW5lZCggT0JKRUNUU1BBQ0VfTk9STUFMTUFQICkgKVxuXHR2YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjtcbiNlbmRpZlxuI2lmbmRlZiBGTEFUX1NIQURFRFxuXHR2YXJ5aW5nIHZlYzMgdk5vcm1hbDtcblx0I2lmZGVmIFVTRV9UQU5HRU5UXG5cdFx0dmFyeWluZyB2ZWMzIHZUYW5nZW50O1xuXHRcdHZhcnlpbmcgdmVjMyB2Qml0YW5nZW50O1xuXHQjZW5kaWZcbiNlbmRpZlxuI2luY2x1ZGUgXHgzY3BhY2tpbmdceDNlXG4jaW5jbHVkZSBceDNjdXZfcGFyc19mcmFnbWVudFx4M2VcbiNpbmNsdWRlIFx4M2NidW1wbWFwX3BhcnNfZnJhZ21lbnRceDNlXG4jaW5jbHVkZSBceDNjbm9ybWFsbWFwX3BhcnNfZnJhZ21lbnRceDNlXG4jaW5jbHVkZSBceDNjbG9nZGVwdGhidWZfcGFyc19mcmFnbWVudFx4M2VcbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgXHgzY2xvZ2RlcHRoYnVmX2ZyYWdtZW50XHgzZVxuXHQjaW5jbHVkZSBceDNjbm9ybWFsX2ZyYWdtZW50X2JlZ2luXHgzZVxuXHQjaW5jbHVkZSBceDNjbm9ybWFsX2ZyYWdtZW50X21hcHNceDNlXG5cdGdsX0ZyYWdDb2xvciBceDNkIHZlYzQoIHBhY2tOb3JtYWxUb1JHQiggbm9ybWFsICksIG9wYWNpdHkgKTtcbn0iLApub3JtYWxfdmVydDoiI2RlZmluZSBOT1JNQUxcbiNpZiBkZWZpbmVkKCBGTEFUX1NIQURFRCApIHx8IGRlZmluZWQoIFVTRV9CVU1QTUFQICkgfHwgKCBkZWZpbmVkKCBVU0VfTk9STUFMTUFQICkgXHgyNlx4MjYgISBkZWZpbmVkKCBPQkpFQ1RTUEFDRV9OT1JNQUxNQVAgKSApXG5cdHZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uO1xuI2VuZGlmXG4jaWZuZGVmIEZMQVRfU0hBREVEXG5cdHZhcnlpbmcgdmVjMyB2Tm9ybWFsO1xuXHQjaWZkZWYgVVNFX1RBTkdFTlRcblx0XHR2YXJ5aW5nIHZlYzMgdlRhbmdlbnQ7XG5cdFx0dmFyeWluZyB2ZWMzIHZCaXRhbmdlbnQ7XG5cdCNlbmRpZlxuI2VuZGlmXG4jaW5jbHVkZSBceDNjdXZfcGFyc192ZXJ0ZXhceDNlXG4jaW5jbHVkZSBceDNjZGlzcGxhY2VtZW50bWFwX3BhcnNfdmVydGV4XHgzZVxuI2luY2x1ZGUgXHgzY21vcnBodGFyZ2V0X3BhcnNfdmVydGV4XHgzZVxuI2luY2x1ZGUgXHgzY3NraW5uaW5nX3BhcnNfdmVydGV4XHgzZVxuI2luY2x1ZGUgXHgzY2xvZ2RlcHRoYnVmX3BhcnNfdmVydGV4XHgzZVxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSBceDNjdXZfdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjYmVnaW5ub3JtYWxfdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjbW9ycGhub3JtYWxfdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjc2tpbmJhc2VfdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjc2tpbm5vcm1hbF92ZXJ0ZXhceDNlXG5cdCNpbmNsdWRlIFx4M2NkZWZhdWx0bm9ybWFsX3ZlcnRleFx4M2VcbiNpZm5kZWYgRkxBVF9TSEFERURcblx0dk5vcm1hbCBceDNkIG5vcm1hbGl6ZSggdHJhbnNmb3JtZWROb3JtYWwgKTtcblx0I2lmZGVmIFVTRV9UQU5HRU5UXG5cdFx0dlRhbmdlbnQgXHgzZCBub3JtYWxpemUoIHRyYW5zZm9ybWVkVGFuZ2VudCApO1xuXHRcdHZCaXRhbmdlbnQgXHgzZCBub3JtYWxpemUoIGNyb3NzKCB2Tm9ybWFsLCB2VGFuZ2VudCApICogdGFuZ2VudC53ICk7XG5cdCNlbmRpZlxuI2VuZGlmXG5cdCNpbmNsdWRlIFx4M2NiZWdpbl92ZXJ0ZXhceDNlXG5cdCNpbmNsdWRlIFx4M2Ntb3JwaHRhcmdldF92ZXJ0ZXhceDNlXG5cdCNpbmNsdWRlIFx4M2Nza2lubmluZ192ZXJ0ZXhceDNlXG5cdCNpbmNsdWRlIFx4M2NkaXNwbGFjZW1lbnRtYXBfdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjcHJvamVjdF92ZXJ0ZXhceDNlXG5cdCNpbmNsdWRlIFx4M2Nsb2dkZXB0aGJ1Zl92ZXJ0ZXhceDNlXG4jaWYgZGVmaW5lZCggRkxBVF9TSEFERUQgKSB8fCBkZWZpbmVkKCBVU0VfQlVNUE1BUCApIHx8ICggZGVmaW5lZCggVVNFX05PUk1BTE1BUCApIFx4MjZceDI2ICEgZGVmaW5lZCggT0JKRUNUU1BBQ0VfTk9STUFMTUFQICkgKVxuXHR2Vmlld1Bvc2l0aW9uIFx4M2QgLSBtdlBvc2l0aW9uLnh5ejtcbiNlbmRpZlxufSIsCnBvaW50c19mcmFnOiJ1bmlmb3JtIHZlYzMgZGlmZnVzZTtcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcbiNpbmNsdWRlIFx4M2Njb21tb25ceDNlXG4jaW5jbHVkZSBceDNjY29sb3JfcGFyc19mcmFnbWVudFx4M2VcbiNpbmNsdWRlIFx4M2NtYXBfcGFydGljbGVfcGFyc19mcmFnbWVudFx4M2VcbiNpbmNsdWRlIFx4M2Nmb2dfcGFyc19mcmFnbWVudFx4M2VcbiNpbmNsdWRlIFx4M2Nsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50XHgzZVxuI2luY2x1ZGUgXHgzY2NsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50XHgzZVxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSBceDNjY2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50XHgzZVxuXHR2ZWMzIG91dGdvaW5nTGlnaHQgXHgzZCB2ZWMzKCAwLjAgKTtcblx0dmVjNCBkaWZmdXNlQ29sb3IgXHgzZCB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7XG5cdCNpbmNsdWRlIFx4M2Nsb2dkZXB0aGJ1Zl9mcmFnbWVudFx4M2Vcblx0I2luY2x1ZGUgXHgzY21hcF9wYXJ0aWNsZV9mcmFnbWVudFx4M2Vcblx0I2luY2x1ZGUgXHgzY2NvbG9yX2ZyYWdtZW50XHgzZVxuXHQjaW5jbHVkZSBceDNjYWxwaGF0ZXN0X2ZyYWdtZW50XHgzZVxuXHRvdXRnb2luZ0xpZ2h0IFx4M2QgZGlmZnVzZUNvbG9yLnJnYjtcblx0Z2xfRnJhZ0NvbG9yIFx4M2QgdmVjNCggb3V0Z29pbmdMaWdodCwgZGlmZnVzZUNvbG9yLmEgKTtcblx0I2luY2x1ZGUgXHgzY3ByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnRceDNlXG5cdCNpbmNsdWRlIFx4M2N0b25lbWFwcGluZ19mcmFnbWVudFx4M2Vcblx0I2luY2x1ZGUgXHgzY2VuY29kaW5nc19mcmFnbWVudFx4M2Vcblx0I2luY2x1ZGUgXHgzY2ZvZ19mcmFnbWVudFx4M2Vcbn0iLApwb2ludHNfdmVydDoidW5pZm9ybSBmbG9hdCBzaXplO1xudW5pZm9ybSBmbG9hdCBzY2FsZTtcbiNpbmNsdWRlIFx4M2Njb21tb25ceDNlXG4jaW5jbHVkZSBceDNjY29sb3JfcGFyc192ZXJ0ZXhceDNlXG4jaW5jbHVkZSBceDNjZm9nX3BhcnNfdmVydGV4XHgzZVxuI2luY2x1ZGUgXHgzY21vcnBodGFyZ2V0X3BhcnNfdmVydGV4XHgzZVxuI2luY2x1ZGUgXHgzY2xvZ2RlcHRoYnVmX3BhcnNfdmVydGV4XHgzZVxuI2luY2x1ZGUgXHgzY2NsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleFx4M2VcbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgXHgzY2NvbG9yX3ZlcnRleFx4M2Vcblx0I2luY2x1ZGUgXHgzY2JlZ2luX3ZlcnRleFx4M2Vcblx0I2luY2x1ZGUgXHgzY21vcnBodGFyZ2V0X3ZlcnRleFx4M2Vcblx0I2luY2x1ZGUgXHgzY3Byb2plY3RfdmVydGV4XHgzZVxuXHRnbF9Qb2ludFNpemUgXHgzZCBzaXplO1xuXHQjaWZkZWYgVVNFX1NJWkVBVFRFTlVBVElPTlxuXHRcdGJvb2wgaXNQZXJzcGVjdGl2ZSBceDNkICggcHJvamVjdGlvbk1hdHJpeFsgMiBdWyAzIF0gXHgzZFx4M2QgLSAxLjAgKTtcblx0XHRpZiAoIGlzUGVyc3BlY3RpdmUgKSBnbF9Qb2ludFNpemUgKlx4M2QgKCBzY2FsZSAvIC0gbXZQb3NpdGlvbi56ICk7XG5cdCNlbmRpZlxuXHQjaW5jbHVkZSBceDNjbG9nZGVwdGhidWZfdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjY2xpcHBpbmdfcGxhbmVzX3ZlcnRleFx4M2Vcblx0I2luY2x1ZGUgXHgzY3dvcmxkcG9zX3ZlcnRleFx4M2Vcblx0I2luY2x1ZGUgXHgzY2ZvZ192ZXJ0ZXhceDNlXG59IiwKc2hhZG93X2ZyYWc6InVuaWZvcm0gdmVjMyBjb2xvcjtcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcbiNpbmNsdWRlIFx4M2Njb21tb25ceDNlXG4jaW5jbHVkZSBceDNjcGFja2luZ1x4M2VcbiNpbmNsdWRlIFx4M2Nmb2dfcGFyc19mcmFnbWVudFx4M2VcbiNpbmNsdWRlIFx4M2Nic2Rmc1x4M2VcbiNpbmNsdWRlIFx4M2NsaWdodHNfcGFyc19iZWdpblx4M2VcbiNpbmNsdWRlIFx4M2NzaGFkb3dtYXBfcGFyc19mcmFnbWVudFx4M2VcbiNpbmNsdWRlIFx4M2NzaGFkb3dtYXNrX3BhcnNfZnJhZ21lbnRceDNlXG52b2lkIG1haW4oKSB7XG5cdGdsX0ZyYWdDb2xvciBceDNkIHZlYzQoIGNvbG9yLCBvcGFjaXR5ICogKCAxLjAgLSBnZXRTaGFkb3dNYXNrKCkgKSApO1xuXHQjaW5jbHVkZSBceDNjZm9nX2ZyYWdtZW50XHgzZVxufSIsc2hhZG93X3ZlcnQ6IiNpbmNsdWRlIFx4M2Nmb2dfcGFyc192ZXJ0ZXhceDNlXG4jaW5jbHVkZSBceDNjc2hhZG93bWFwX3BhcnNfdmVydGV4XHgzZVxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSBceDNjYmVnaW5fdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjcHJvamVjdF92ZXJ0ZXhceDNlXG5cdCNpbmNsdWRlIFx4M2N3b3JsZHBvc192ZXJ0ZXhceDNlXG5cdCNpbmNsdWRlIFx4M2NzaGFkb3dtYXBfdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjZm9nX3ZlcnRleFx4M2Vcbn0iLApzcHJpdGVfZnJhZzoidW5pZm9ybSB2ZWMzIGRpZmZ1c2U7XG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG4jaW5jbHVkZSBceDNjY29tbW9uXHgzZVxuI2luY2x1ZGUgXHgzY3V2X3BhcnNfZnJhZ21lbnRceDNlXG4jaW5jbHVkZSBceDNjbWFwX3BhcnNfZnJhZ21lbnRceDNlXG4jaW5jbHVkZSBceDNjZm9nX3BhcnNfZnJhZ21lbnRceDNlXG4jaW5jbHVkZSBceDNjbG9nZGVwdGhidWZfcGFyc19mcmFnbWVudFx4M2VcbiNpbmNsdWRlIFx4M2NjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudFx4M2VcbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgXHgzY2NsaXBwaW5nX3BsYW5lc19mcmFnbWVudFx4M2Vcblx0dmVjMyBvdXRnb2luZ0xpZ2h0IFx4M2QgdmVjMyggMC4wICk7XG5cdHZlYzQgZGlmZnVzZUNvbG9yIFx4M2QgdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApO1xuXHQjaW5jbHVkZSBceDNjbG9nZGVwdGhidWZfZnJhZ21lbnRceDNlXG5cdCNpbmNsdWRlIFx4M2NtYXBfZnJhZ21lbnRceDNlXG5cdCNpbmNsdWRlIFx4M2NhbHBoYXRlc3RfZnJhZ21lbnRceDNlXG5cdG91dGdvaW5nTGlnaHQgXHgzZCBkaWZmdXNlQ29sb3IucmdiO1xuXHRnbF9GcmFnQ29sb3IgXHgzZCB2ZWM0KCBvdXRnb2luZ0xpZ2h0LCBkaWZmdXNlQ29sb3IuYSApO1xuXHQjaW5jbHVkZSBceDNjdG9uZW1hcHBpbmdfZnJhZ21lbnRceDNlXG5cdCNpbmNsdWRlIFx4M2NlbmNvZGluZ3NfZnJhZ21lbnRceDNlXG5cdCNpbmNsdWRlIFx4M2Nmb2dfZnJhZ21lbnRceDNlXG59IiwKc3ByaXRlX3ZlcnQ6InVuaWZvcm0gZmxvYXQgcm90YXRpb247XG51bmlmb3JtIHZlYzIgY2VudGVyO1xuI2luY2x1ZGUgXHgzY2NvbW1vblx4M2VcbiNpbmNsdWRlIFx4M2N1dl9wYXJzX3ZlcnRleFx4M2VcbiNpbmNsdWRlIFx4M2Nmb2dfcGFyc192ZXJ0ZXhceDNlXG4jaW5jbHVkZSBceDNjbG9nZGVwdGhidWZfcGFyc192ZXJ0ZXhceDNlXG4jaW5jbHVkZSBceDNjY2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4XHgzZVxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSBceDNjdXZfdmVydGV4XHgzZVxuXHR2ZWM0IG12UG9zaXRpb24gXHgzZCBtb2RlbFZpZXdNYXRyaXggKiB2ZWM0KCAwLjAsIDAuMCwgMC4wLCAxLjAgKTtcblx0dmVjMiBzY2FsZTtcblx0c2NhbGUueCBceDNkIGxlbmd0aCggdmVjMyggbW9kZWxNYXRyaXhbIDAgXS54LCBtb2RlbE1hdHJpeFsgMCBdLnksIG1vZGVsTWF0cml4WyAwIF0ueiApICk7XG5cdHNjYWxlLnkgXHgzZCBsZW5ndGgoIHZlYzMoIG1vZGVsTWF0cml4WyAxIF0ueCwgbW9kZWxNYXRyaXhbIDEgXS55LCBtb2RlbE1hdHJpeFsgMSBdLnogKSApO1xuXHQjaWZuZGVmIFVTRV9TSVpFQVRURU5VQVRJT05cblx0XHRib29sIGlzUGVyc3BlY3RpdmUgXHgzZCAoIHByb2plY3Rpb25NYXRyaXhbIDIgXVsgMyBdIFx4M2RceDNkIC0gMS4wICk7XG5cdFx0aWYgKCBpc1BlcnNwZWN0aXZlICkgc2NhbGUgKlx4M2QgLSBtdlBvc2l0aW9uLno7XG5cdCNlbmRpZlxuXHR2ZWMyIGFsaWduZWRQb3NpdGlvbiBceDNkICggcG9zaXRpb24ueHkgLSAoIGNlbnRlciAtIHZlYzIoIDAuNSApICkgKSAqIHNjYWxlO1xuXHR2ZWMyIHJvdGF0ZWRQb3NpdGlvbjtcblx0cm90YXRlZFBvc2l0aW9uLnggXHgzZCBjb3MoIHJvdGF0aW9uICkgKiBhbGlnbmVkUG9zaXRpb24ueCAtIHNpbiggcm90YXRpb24gKSAqIGFsaWduZWRQb3NpdGlvbi55O1xuXHRyb3RhdGVkUG9zaXRpb24ueSBceDNkIHNpbiggcm90YXRpb24gKSAqIGFsaWduZWRQb3NpdGlvbi54ICsgY29zKCByb3RhdGlvbiApICogYWxpZ25lZFBvc2l0aW9uLnk7XG5cdG12UG9zaXRpb24ueHkgK1x4M2Qgcm90YXRlZFBvc2l0aW9uO1xuXHRnbF9Qb3NpdGlvbiBceDNkIHByb2plY3Rpb25NYXRyaXggKiBtdlBvc2l0aW9uO1xuXHQjaW5jbHVkZSBceDNjbG9nZGVwdGhidWZfdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjY2xpcHBpbmdfcGxhbmVzX3ZlcnRleFx4M2Vcblx0I2luY2x1ZGUgXHgzY2ZvZ192ZXJ0ZXhceDNlXG59In0sCmxwPXtjbG9uZTpGLG1lcmdlOkR9LG1wPXthbGljZWJsdWU6MTU3OTIzODMsYW50aXF1ZXdoaXRlOjE2NDQ0Mzc1LGFxdWE6NjU1MzUsYXF1YW1hcmluZTo4Mzg4NTY0LGF6dXJlOjE1Nzk0MTc1LGJlaWdlOjE2MTE5MjYwLGJpc3F1ZToxNjc3MDI0NCxibGFjazowLGJsYW5jaGVkYWxtb25kOjE2NzcyMDQ1LGJsdWU6MjU1LGJsdWV2aW9sZXQ6OTA1NTIwMixicm93bjoxMDgyNDIzNCxidXJseXdvb2Q6MTQ1OTYyMzEsY2FkZXRibHVlOjYyNjY1MjgsY2hhcnRyZXVzZTo4Mzg4MzUyLGNob2NvbGF0ZToxMzc4OTQ3MCxjb3JhbDoxNjc0NDI3Mixjb3JuZmxvd2VyYmx1ZTo2NTkxOTgxLGNvcm5zaWxrOjE2Nzc1Mzg4LGNyaW1zb246MTQ0MjMxMDAsY3lhbjo2NTUzNSxkYXJrYmx1ZToxMzksZGFya2N5YW46MzU3MjMsZGFya2dvbGRlbnJvZDoxMjA5MjkzOSxkYXJrZ3JheToxMTExOTAxNyxkYXJrZ3JlZW46MjU2MDAsZGFya2dyZXk6MTExMTkwMTcsZGFya2toYWtpOjEyNDMzMjU5LGRhcmttYWdlbnRhOjkxMDk2NDMsCmRhcmtvbGl2ZWdyZWVuOjU1OTc5OTksZGFya29yYW5nZToxNjc0NzUyMCxkYXJrb3JjaGlkOjEwMDQwMDEyLGRhcmtyZWQ6OTEwOTUwNCxkYXJrc2FsbW9uOjE1MzA4NDEwLGRhcmtzZWFncmVlbjo5NDE5OTE5LGRhcmtzbGF0ZWJsdWU6NDczNDM0NyxkYXJrc2xhdGVncmF5OjMxMDA0OTUsZGFya3NsYXRlZ3JleTozMTAwNDk1LGRhcmt0dXJxdW9pc2U6NTI5NDUsZGFya3Zpb2xldDo5Njk5NTM5LGRlZXBwaW5rOjE2NzE2OTQ3LGRlZXBza3libHVlOjQ5MTUxLGRpbWdyYXk6NjkwODI2NSxkaW1ncmV5OjY5MDgyNjUsZG9kZ2VyYmx1ZToyMDAzMTk5LGZpcmVicmljazoxMTY3NDE0NixmbG9yYWx3aGl0ZToxNjc3NTkyMCxmb3Jlc3RncmVlbjoyMjYzODQyLGZ1Y2hzaWE6MTY3MTE5MzUsZ2FpbnNib3JvOjE0NDc0NDYwLGdob3N0d2hpdGU6MTYzMTY2NzEsZ29sZDoxNjc2NjcyMCxnb2xkZW5yb2Q6MTQzMjkxMjAsZ3JheTo4NDIxNTA0LGdyZWVuOjMyNzY4LGdyZWVueWVsbG93OjExNDAzMDU1LApncmV5Ojg0MjE1MDQsaG9uZXlkZXc6MTU3OTQxNjAsaG90cGluazoxNjczODc0MCxpbmRpYW5yZWQ6MTM0NTg1MjQsaW5kaWdvOjQ5MTUzMzAsaXZvcnk6MTY3NzcyMDAsa2hha2k6MTU3ODc2NjAsbGF2ZW5kZXI6MTUxMzI0MTAsbGF2ZW5kZXJibHVzaDoxNjc3MzM2NSxsYXduZ3JlZW46ODE5MDk3NixsZW1vbmNoaWZmb246MTY3NzU4ODUsbGlnaHRibHVlOjExMzkzMjU0LGxpZ2h0Y29yYWw6MTU3NjE1MzYsbGlnaHRjeWFuOjE0NzQ1NTk5LGxpZ2h0Z29sZGVucm9keWVsbG93OjE2NDQ4MjEwLGxpZ2h0Z3JheToxMzg4MjMyMyxsaWdodGdyZWVuOjk0OTgyNTYsbGlnaHRncmV5OjEzODgyMzIzLGxpZ2h0cGluazoxNjc1ODQ2NSxsaWdodHNhbG1vbjoxNjc1Mjc2MixsaWdodHNlYWdyZWVuOjIxNDI4OTAsbGlnaHRza3libHVlOjg5MDAzNDYsbGlnaHRzbGF0ZWdyYXk6NzgzMzc1MyxsaWdodHNsYXRlZ3JleTo3ODMzNzUzLGxpZ2h0c3RlZWxibHVlOjExNTg0NzM0LGxpZ2h0eWVsbG93OjE2Nzc3MTg0LApsaW1lOjY1MjgwLGxpbWVncmVlbjozMzI5MzMwLGxpbmVuOjE2NDQ1NjcwLG1hZ2VudGE6MTY3MTE5MzUsbWFyb29uOjgzODg2MDgsbWVkaXVtYXF1YW1hcmluZTo2NzM3MzIyLG1lZGl1bWJsdWU6MjA1LG1lZGl1bW9yY2hpZDoxMjIxMTY2NyxtZWRpdW1wdXJwbGU6OTY2MjY4MyxtZWRpdW1zZWFncmVlbjozOTc4MDk3LG1lZGl1bXNsYXRlYmx1ZTo4MDg3NzkwLG1lZGl1bXNwcmluZ2dyZWVuOjY0MTU0LG1lZGl1bXR1cnF1b2lzZTo0NzcyMzAwLG1lZGl1bXZpb2xldHJlZDoxMzA0NzE3MyxtaWRuaWdodGJsdWU6MTY0NDkxMixtaW50Y3JlYW06MTYxMjE4NTAsbWlzdHlyb3NlOjE2NzcwMjczLG1vY2Nhc2luOjE2NzcwMjI5LG5hdmFqb3doaXRlOjE2NzY4Njg1LG5hdnk6MTI4LG9sZGxhY2U6MTY2NDM1NTgsb2xpdmU6ODQyMTM3NixvbGl2ZWRyYWI6NzA0ODczOSxvcmFuZ2U6MTY3NTM5MjAsb3JhbmdlcmVkOjE2NzI5MzQ0LG9yY2hpZDoxNDMxNTczNCxwYWxlZ29sZGVucm9kOjE1NjU3MTMwLApwYWxlZ3JlZW46MTAwMjU4ODAscGFsZXR1cnF1b2lzZToxMTUyOTk2NixwYWxldmlvbGV0cmVkOjE0MzgxMjAzLHBhcGF5YXdoaXA6MTY3NzMwNzcscGVhY2hwdWZmOjE2NzY3NjczLHBlcnU6MTM0Njg5OTEscGluazoxNjc2MTAzNSxwbHVtOjE0NTI0NjM3LHBvd2RlcmJsdWU6MTE1OTE5MTAscHVycGxlOjgzODg3MzYscmViZWNjYXB1cnBsZTo2Njk3ODgxLHJlZDoxNjcxMTY4MCxyb3N5YnJvd246MTIzNTc1MTkscm95YWxibHVlOjQyODY5NDUsc2FkZGxlYnJvd246OTEyNzE4NyxzYWxtb246MTY0MTY4ODIsc2FuZHlicm93bjoxNjAzMjg2NCxzZWFncmVlbjozMDUwMzI3LHNlYXNoZWxsOjE2Nzc0NjM4LHNpZW5uYToxMDUwNjc5NyxzaWx2ZXI6MTI2MzIyNTYsc2t5Ymx1ZTo4OTAwMzMxLHNsYXRlYmx1ZTo2OTcwMDYxLHNsYXRlZ3JheTo3MzcyOTQ0LHNsYXRlZ3JleTo3MzcyOTQ0LHNub3c6MTY3NzU5MzAsc3ByaW5nZ3JlZW46NjU0MDcsc3RlZWxibHVlOjQ2MjA5ODAsdGFuOjEzODA4NzgwLAp0ZWFsOjMyODk2LHRoaXN0bGU6MTQyMDQ4ODgsdG9tYXRvOjE2NzM3MDk1LHR1cnF1b2lzZTo0MjUxODU2LHZpb2xldDoxNTYzMTA4Nix3aGVhdDoxNjExMzMzMSx3aGl0ZToxNjc3NzIxNSx3aGl0ZXNtb2tlOjE2MTE5Mjg1LHllbGxvdzoxNjc3Njk2MCx5ZWxsb3dncmVlbjoxMDE0NTA3NH07T2JqZWN0LmFzc2lnbihCLnByb3RvdHlwZSx7aXNDb2xvcjohMCxyOjEsZzoxLGI6MSxzZXQ6ZnVuY3Rpb24oYil7YiYmYi5pc0NvbG9yP3RoaXMuY29weShiKToibnVtYmVyIj09PXR5cGVvZiBiP3RoaXMuc2V0SGV4KGIpOiJzdHJpbmciPT09dHlwZW9mIGImJnRoaXMuc2V0U3R5bGUoYik7cmV0dXJuIHRoaXN9LHNldFNjYWxhcjpmdW5jdGlvbihiKXt0aGlzLmI9dGhpcy5nPXRoaXMucj1iO3JldHVybiB0aGlzfSxzZXRIZXg6ZnVuY3Rpb24oYil7Yj1NYXRoLmZsb29yKGIpO3RoaXMucj0oYj4+MTYmMjU1KS8yNTU7dGhpcy5nPShiPj44JjI1NSkvMjU1O3RoaXMuYj0oYiYyNTUpLzI1NTsKcmV0dXJuIHRoaXN9LHNldFJHQjpmdW5jdGlvbihiLGUsaCl7dGhpcy5yPWI7dGhpcy5nPWU7dGhpcy5iPWg7cmV0dXJuIHRoaXN9LHNldEhTTDpmdW5jdGlvbigpe2Z1bmN0aW9uIGIoZSxoLG4pezA+biYmKG4rPTEpOzE8biYmLS1uO3JldHVybiBuPDEvNj9lKzYqKGgtZSkqbjouNT5uP2g6bjwyLzM/ZSs2KihoLWUpKigyLzMtbik6ZX1yZXR1cm4gZnVuY3Rpb24oZSxoLG4pe2U9b2IuZXVjbGlkZWFuTW9kdWxvKGUsMSk7aD1vYi5jbGFtcChoLDAsMSk7bj1vYi5jbGFtcChuLDAsMSk7MD09PWg/dGhpcy5yPXRoaXMuZz10aGlzLmI9bjooaD0uNT49bj9uKigxK2gpOm4raC1uKmgsbj0yKm4taCx0aGlzLnI9YihuLGgsZSsxLzMpLHRoaXMuZz1iKG4saCxlKSx0aGlzLmI9YihuLGgsZS0xLzMpKTtyZXR1cm4gdGhpc319KCksc2V0U3R5bGU6ZnVuY3Rpb24oYil7ZnVuY3Rpb24gZSh6KXt2b2lkIDAhPT16JiYxPnBhcnNlRmxvYXQoeikmJmNvbnNvbGUud2FybigiVEhSRUUuQ29sb3I6IEFscGhhIGNvbXBvbmVudCBvZiAiKwpiKyIgd2lsbCBiZSBpZ25vcmVkLiIpfXZhciBoO2lmKGg9L14oKD86cmdifGhzbClhPylcKFxzKihbXlwpXSopXCkvLmV4ZWMoYikpe3ZhciBuPWhbMl07c3dpdGNoKGhbMV0pe2Nhc2UgInJnYiI6Y2FzZSAicmdiYSI6aWYoaD0vXihcZCspXHMqLFxzKihcZCspXHMqLFxzKihcZCspXHMqKCxccyooWzAtOV0qXC4/WzAtOV0rKVxzKik/JC8uZXhlYyhuKSlyZXR1cm4gdGhpcy5yPU1hdGgubWluKDI1NSxwYXJzZUludChoWzFdLDEwKSkvMjU1LHRoaXMuZz1NYXRoLm1pbigyNTUscGFyc2VJbnQoaFsyXSwxMCkpLzI1NSx0aGlzLmI9TWF0aC5taW4oMjU1LHBhcnNlSW50KGhbM10sMTApKS8yNTUsZShoWzVdKSx0aGlzO2lmKGg9L14oXGQrKSVccyosXHMqKFxkKyklXHMqLFxzKihcZCspJVxzKigsXHMqKFswLTldKlwuP1swLTldKylccyopPyQvLmV4ZWMobikpcmV0dXJuIHRoaXMucj1NYXRoLm1pbigxMDAscGFyc2VJbnQoaFsxXSwxMCkpLzEwMCx0aGlzLmc9TWF0aC5taW4oMTAwLHBhcnNlSW50KGhbMl0sCjEwKSkvMTAwLHRoaXMuYj1NYXRoLm1pbigxMDAscGFyc2VJbnQoaFszXSwxMCkpLzEwMCxlKGhbNV0pLHRoaXM7YnJlYWs7Y2FzZSAiaHNsIjpjYXNlICJoc2xhIjppZihoPS9eKFswLTldKlwuP1swLTldKylccyosXHMqKFxkKyklXHMqLFxzKihcZCspJVxzKigsXHMqKFswLTldKlwuP1swLTldKylccyopPyQvLmV4ZWMobikpe249cGFyc2VGbG9hdChoWzFdKS8zNjA7dmFyIHU9cGFyc2VJbnQoaFsyXSwxMCkvMTAwLHc9cGFyc2VJbnQoaFszXSwxMCkvMTAwO2UoaFs1XSk7cmV0dXJuIHRoaXMuc2V0SFNMKG4sdSx3KX19fWVsc2UgaWYoaD0vXiMoW0EtRmEtZjAtOV0rKSQvLmV4ZWMoYikpe2g9aFsxXTtuPWgubGVuZ3RoO2lmKDM9PT1uKXJldHVybiB0aGlzLnI9cGFyc2VJbnQoaC5jaGFyQXQoMCkraC5jaGFyQXQoMCksMTYpLzI1NSx0aGlzLmc9cGFyc2VJbnQoaC5jaGFyQXQoMSkraC5jaGFyQXQoMSksMTYpLzI1NSx0aGlzLmI9cGFyc2VJbnQoaC5jaGFyQXQoMikraC5jaGFyQXQoMiksCjE2KS8yNTUsdGhpcztpZig2PT09bilyZXR1cm4gdGhpcy5yPXBhcnNlSW50KGguY2hhckF0KDApK2guY2hhckF0KDEpLDE2KS8yNTUsdGhpcy5nPXBhcnNlSW50KGguY2hhckF0KDIpK2guY2hhckF0KDMpLDE2KS8yNTUsdGhpcy5iPXBhcnNlSW50KGguY2hhckF0KDQpK2guY2hhckF0KDUpLDE2KS8yNTUsdGhpc31iJiYwPGIubGVuZ3RoJiYoaD1tcFtiXSx2b2lkIDAhPT1oP3RoaXMuc2V0SGV4KGgpOmNvbnNvbGUud2FybigiVEhSRUUuQ29sb3I6IFVua25vd24gY29sb3IgIitiKSk7cmV0dXJuIHRoaXN9LGNsb25lOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMucix0aGlzLmcsdGhpcy5iKX0sY29weTpmdW5jdGlvbihiKXt0aGlzLnI9Yi5yO3RoaXMuZz1iLmc7dGhpcy5iPWIuYjtyZXR1cm4gdGhpc30sY29weUdhbW1hVG9MaW5lYXI6ZnVuY3Rpb24oYixlKXt2b2lkIDA9PT1lJiYoZT0yKTt0aGlzLnI9TWF0aC5wb3coYi5yLGUpO3RoaXMuZz1NYXRoLnBvdyhiLmcsCmUpO3RoaXMuYj1NYXRoLnBvdyhiLmIsZSk7cmV0dXJuIHRoaXN9LGNvcHlMaW5lYXJUb0dhbW1hOmZ1bmN0aW9uKGIsZSl7dm9pZCAwPT09ZSYmKGU9Mik7ZT0wPGU/MS9lOjE7dGhpcy5yPU1hdGgucG93KGIucixlKTt0aGlzLmc9TWF0aC5wb3coYi5nLGUpO3RoaXMuYj1NYXRoLnBvdyhiLmIsZSk7cmV0dXJuIHRoaXN9LGNvbnZlcnRHYW1tYVRvTGluZWFyOmZ1bmN0aW9uKGIpe3RoaXMuY29weUdhbW1hVG9MaW5lYXIodGhpcyxiKTtyZXR1cm4gdGhpc30sY29udmVydExpbmVhclRvR2FtbWE6ZnVuY3Rpb24oYil7dGhpcy5jb3B5TGluZWFyVG9HYW1tYSh0aGlzLGIpO3JldHVybiB0aGlzfSxjb3B5U1JHQlRvTGluZWFyOmZ1bmN0aW9uKCl7ZnVuY3Rpb24gYihlKXtyZXR1cm4uMDQwNDU+ZT8uMDc3Mzk5MzgwOCplOk1hdGgucG93KC45NDc4NjcyOTg2KmUrLjA1MjEzMjcwMTQsMi40KX1yZXR1cm4gZnVuY3Rpb24oZSl7dGhpcy5yPWIoZS5yKTt0aGlzLmc9YihlLmcpO3RoaXMuYj0KYihlLmIpO3JldHVybiB0aGlzfX0oKSxjb3B5TGluZWFyVG9TUkdCOmZ1bmN0aW9uKCl7ZnVuY3Rpb24gYihlKXtyZXR1cm4uMDAzMTMwOD5lPzEyLjkyKmU6MS4wNTUqTWF0aC5wb3coZSwuNDE2NjYpLS4wNTV9cmV0dXJuIGZ1bmN0aW9uKGUpe3RoaXMucj1iKGUucik7dGhpcy5nPWIoZS5nKTt0aGlzLmI9YihlLmIpO3JldHVybiB0aGlzfX0oKSxjb252ZXJ0U1JHQlRvTGluZWFyOmZ1bmN0aW9uKCl7dGhpcy5jb3B5U1JHQlRvTGluZWFyKHRoaXMpO3JldHVybiB0aGlzfSxjb252ZXJ0TGluZWFyVG9TUkdCOmZ1bmN0aW9uKCl7dGhpcy5jb3B5TGluZWFyVG9TUkdCKHRoaXMpO3JldHVybiB0aGlzfSxnZXRIZXg6ZnVuY3Rpb24oKXtyZXR1cm4gMjU1KnRoaXMucjw8MTZeMjU1KnRoaXMuZzw8OF4yNTUqdGhpcy5iPDwwfSxnZXRIZXhTdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4oIjAwMDAwMCIrdGhpcy5nZXRIZXgoKS50b1N0cmluZygxNikpLnNsaWNlKC02KX0sZ2V0SFNMOmZ1bmN0aW9uKGIpe3ZvaWQgMD09PQpiJiYoY29uc29sZS53YXJuKCJUSFJFRS5Db2xvcjogLmdldEhTTCgpIHRhcmdldCBpcyBub3cgcmVxdWlyZWQiKSxiPXtoOjAsczowLGw6MH0pO3ZhciBlPXRoaXMucixoPXRoaXMuZyxuPXRoaXMuYix1PU1hdGgubWF4KGUsaCxuKSx3PU1hdGgubWluKGUsaCxuKSx6LEU9KHcrdSkvMjtpZih3PT09dSl3PXo9MDtlbHNle3ZhciBIPXUtdzt3PS41Pj1FP0gvKHUrdyk6SC8oMi11LXcpO3N3aXRjaCh1KXtjYXNlIGU6ej0oaC1uKS9IKyhoPG4/NjowKTticmVhaztjYXNlIGg6ej0obi1lKS9IKzI7YnJlYWs7Y2FzZSBuOno9KGUtaCkvSCs0fXovPTZ9Yi5oPXo7Yi5zPXc7Yi5sPUU7cmV0dXJuIGJ9LGdldFN0eWxlOmZ1bmN0aW9uKCl7cmV0dXJuInJnYigiKygyNTUqdGhpcy5yfDApKyIsIisoMjU1KnRoaXMuZ3wwKSsiLCIrKDI1NSp0aGlzLmJ8MCkrIikifSxvZmZzZXRIU0w6ZnVuY3Rpb24oKXt2YXIgYj17fTtyZXR1cm4gZnVuY3Rpb24oZSxoLG4pe3RoaXMuZ2V0SFNMKGIpO2IuaCs9CmU7Yi5zKz1oO2IubCs9bjt0aGlzLnNldEhTTChiLmgsYi5zLGIubCk7cmV0dXJuIHRoaXN9fSgpLGFkZDpmdW5jdGlvbihiKXt0aGlzLnIrPWIucjt0aGlzLmcrPWIuZzt0aGlzLmIrPWIuYjtyZXR1cm4gdGhpc30sYWRkQ29sb3JzOmZ1bmN0aW9uKGIsZSl7dGhpcy5yPWIucitlLnI7dGhpcy5nPWIuZytlLmc7dGhpcy5iPWIuYitlLmI7cmV0dXJuIHRoaXN9LGFkZFNjYWxhcjpmdW5jdGlvbihiKXt0aGlzLnIrPWI7dGhpcy5nKz1iO3RoaXMuYis9YjtyZXR1cm4gdGhpc30sc3ViOmZ1bmN0aW9uKGIpe3RoaXMucj1NYXRoLm1heCgwLHRoaXMuci1iLnIpO3RoaXMuZz1NYXRoLm1heCgwLHRoaXMuZy1iLmcpO3RoaXMuYj1NYXRoLm1heCgwLHRoaXMuYi1iLmIpO3JldHVybiB0aGlzfSxtdWx0aXBseTpmdW5jdGlvbihiKXt0aGlzLnIqPWIucjt0aGlzLmcqPWIuZzt0aGlzLmIqPWIuYjtyZXR1cm4gdGhpc30sbXVsdGlwbHlTY2FsYXI6ZnVuY3Rpb24oYil7dGhpcy5yKj1iO3RoaXMuZyo9CmI7dGhpcy5iKj1iO3JldHVybiB0aGlzfSxsZXJwOmZ1bmN0aW9uKGIsZSl7dGhpcy5yKz0oYi5yLXRoaXMucikqZTt0aGlzLmcrPShiLmctdGhpcy5nKSplO3RoaXMuYis9KGIuYi10aGlzLmIpKmU7cmV0dXJuIHRoaXN9LGxlcnBIU0w6ZnVuY3Rpb24oKXt2YXIgYj17aDowLHM6MCxsOjB9LGU9e2g6MCxzOjAsbDowfTtyZXR1cm4gZnVuY3Rpb24oaCxuKXt0aGlzLmdldEhTTChiKTtoLmdldEhTTChlKTtoPW9iLmxlcnAoYi5oLGUuaCxuKTt2YXIgdT1vYi5sZXJwKGIucyxlLnMsbik7bj1vYi5sZXJwKGIubCxlLmwsbik7dGhpcy5zZXRIU0woaCx1LG4pO3JldHVybiB0aGlzfX0oKSxlcXVhbHM6ZnVuY3Rpb24oYil7cmV0dXJuIGIucj09PXRoaXMuciYmYi5nPT09dGhpcy5nJiZiLmI9PT10aGlzLmJ9LGZyb21BcnJheTpmdW5jdGlvbihiLGUpe3ZvaWQgMD09PWUmJihlPTApO3RoaXMucj1iW2VdO3RoaXMuZz1iW2UrMV07dGhpcy5iPWJbZSsyXTtyZXR1cm4gdGhpc30sdG9BcnJheTpmdW5jdGlvbihiLAplKXt2b2lkIDA9PT1iJiYoYj1bXSk7dm9pZCAwPT09ZSYmKGU9MCk7YltlXT10aGlzLnI7YltlKzFdPXRoaXMuZztiW2UrMl09dGhpcy5iO3JldHVybiBifSx0b0pTT046ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRIZXgoKX19KTt2YXIgYmI9e2NvbW1vbjp7ZGlmZnVzZTp7dmFsdWU6bmV3IEIoMTU2NTg3MzQpfSxvcGFjaXR5Ont2YWx1ZToxfSxtYXA6e3ZhbHVlOm51bGx9LHV2VHJhbnNmb3JtOnt2YWx1ZTpuZXcgbH0sYWxwaGFNYXA6e3ZhbHVlOm51bGx9fSxzcGVjdWxhcm1hcDp7c3BlY3VsYXJNYXA6e3ZhbHVlOm51bGx9fSxlbnZtYXA6e2Vudk1hcDp7dmFsdWU6bnVsbH0sZmxpcEVudk1hcDp7dmFsdWU6LTF9LHJlZmxlY3Rpdml0eTp7dmFsdWU6MX0scmVmcmFjdGlvblJhdGlvOnt2YWx1ZTouOTh9LG1heE1pcExldmVsOnt2YWx1ZTowfX0sYW9tYXA6e2FvTWFwOnt2YWx1ZTpudWxsfSxhb01hcEludGVuc2l0eTp7dmFsdWU6MX19LGxpZ2h0bWFwOntsaWdodE1hcDp7dmFsdWU6bnVsbH0sCmxpZ2h0TWFwSW50ZW5zaXR5Ont2YWx1ZToxfX0sZW1pc3NpdmVtYXA6e2VtaXNzaXZlTWFwOnt2YWx1ZTpudWxsfX0sYnVtcG1hcDp7YnVtcE1hcDp7dmFsdWU6bnVsbH0sYnVtcFNjYWxlOnt2YWx1ZToxfX0sbm9ybWFsbWFwOntub3JtYWxNYXA6e3ZhbHVlOm51bGx9LG5vcm1hbFNjYWxlOnt2YWx1ZTpuZXcgZCgxLDEpfX0sZGlzcGxhY2VtZW50bWFwOntkaXNwbGFjZW1lbnRNYXA6e3ZhbHVlOm51bGx9LGRpc3BsYWNlbWVudFNjYWxlOnt2YWx1ZToxfSxkaXNwbGFjZW1lbnRCaWFzOnt2YWx1ZTowfX0scm91Z2huZXNzbWFwOntyb3VnaG5lc3NNYXA6e3ZhbHVlOm51bGx9fSxtZXRhbG5lc3NtYXA6e21ldGFsbmVzc01hcDp7dmFsdWU6bnVsbH19LGdyYWRpZW50bWFwOntncmFkaWVudE1hcDp7dmFsdWU6bnVsbH19LGZvZzp7Zm9nRGVuc2l0eTp7dmFsdWU6Mi41RS00fSxmb2dOZWFyOnt2YWx1ZToxfSxmb2dGYXI6e3ZhbHVlOjJFM30sZm9nQ29sb3I6e3ZhbHVlOm5ldyBCKDE2Nzc3MjE1KX19LApsaWdodHM6e2FtYmllbnRMaWdodENvbG9yOnt2YWx1ZTpbXX0sbGlnaHRQcm9iZTp7dmFsdWU6W119LGRpcmVjdGlvbmFsTGlnaHRzOnt2YWx1ZTpbXSxwcm9wZXJ0aWVzOntkaXJlY3Rpb246e30sY29sb3I6e30sc2hhZG93Ont9LHNoYWRvd0JpYXM6e30sc2hhZG93UmFkaXVzOnt9LHNoYWRvd01hcFNpemU6e319fSxkaXJlY3Rpb25hbFNoYWRvd01hcDp7dmFsdWU6W119LGRpcmVjdGlvbmFsU2hhZG93TWF0cml4Ont2YWx1ZTpbXX0sc3BvdExpZ2h0czp7dmFsdWU6W10scHJvcGVydGllczp7Y29sb3I6e30scG9zaXRpb246e30sZGlyZWN0aW9uOnt9LGRpc3RhbmNlOnt9LGNvbmVDb3M6e30scGVudW1icmFDb3M6e30sZGVjYXk6e30sc2hhZG93Ont9LHNoYWRvd0JpYXM6e30sc2hhZG93UmFkaXVzOnt9LHNoYWRvd01hcFNpemU6e319fSxzcG90U2hhZG93TWFwOnt2YWx1ZTpbXX0sc3BvdFNoYWRvd01hdHJpeDp7dmFsdWU6W119LHBvaW50TGlnaHRzOnt2YWx1ZTpbXSxwcm9wZXJ0aWVzOntjb2xvcjp7fSwKcG9zaXRpb246e30sZGVjYXk6e30sZGlzdGFuY2U6e30sc2hhZG93Ont9LHNoYWRvd0JpYXM6e30sc2hhZG93UmFkaXVzOnt9LHNoYWRvd01hcFNpemU6e30sc2hhZG93Q2FtZXJhTmVhcjp7fSxzaGFkb3dDYW1lcmFGYXI6e319fSxwb2ludFNoYWRvd01hcDp7dmFsdWU6W119LHBvaW50U2hhZG93TWF0cml4Ont2YWx1ZTpbXX0saGVtaXNwaGVyZUxpZ2h0czp7dmFsdWU6W10scHJvcGVydGllczp7ZGlyZWN0aW9uOnt9LHNreUNvbG9yOnt9LGdyb3VuZENvbG9yOnt9fX0scmVjdEFyZWFMaWdodHM6e3ZhbHVlOltdLHByb3BlcnRpZXM6e2NvbG9yOnt9LHBvc2l0aW9uOnt9LHdpZHRoOnt9LGhlaWdodDp7fX19fSxwb2ludHM6e2RpZmZ1c2U6e3ZhbHVlOm5ldyBCKDE1NjU4NzM0KX0sb3BhY2l0eTp7dmFsdWU6MX0sc2l6ZTp7dmFsdWU6MX0sc2NhbGU6e3ZhbHVlOjF9LG1hcDp7dmFsdWU6bnVsbH0sdXZUcmFuc2Zvcm06e3ZhbHVlOm5ldyBsfX0sc3ByaXRlOntkaWZmdXNlOnt2YWx1ZTpuZXcgQigxNTY1ODczNCl9LApvcGFjaXR5Ont2YWx1ZToxfSxjZW50ZXI6e3ZhbHVlOm5ldyBkKC41LC41KX0scm90YXRpb246e3ZhbHVlOjB9LG1hcDp7dmFsdWU6bnVsbH0sdXZUcmFuc2Zvcm06e3ZhbHVlOm5ldyBsfX19LGlkPXtiYXNpYzp7dW5pZm9ybXM6RChbYmIuY29tbW9uLGJiLnNwZWN1bGFybWFwLGJiLmVudm1hcCxiYi5hb21hcCxiYi5saWdodG1hcCxiYi5mb2ddKSx2ZXJ0ZXhTaGFkZXI6emIubWVzaGJhc2ljX3ZlcnQsZnJhZ21lbnRTaGFkZXI6emIubWVzaGJhc2ljX2ZyYWd9LGxhbWJlcnQ6e3VuaWZvcm1zOkQoW2JiLmNvbW1vbixiYi5zcGVjdWxhcm1hcCxiYi5lbnZtYXAsYmIuYW9tYXAsYmIubGlnaHRtYXAsYmIuZW1pc3NpdmVtYXAsYmIuZm9nLGJiLmxpZ2h0cyx7ZW1pc3NpdmU6e3ZhbHVlOm5ldyBCKDApfX1dKSx2ZXJ0ZXhTaGFkZXI6emIubWVzaGxhbWJlcnRfdmVydCxmcmFnbWVudFNoYWRlcjp6Yi5tZXNobGFtYmVydF9mcmFnfSxwaG9uZzp7dW5pZm9ybXM6RChbYmIuY29tbW9uLGJiLnNwZWN1bGFybWFwLApiYi5lbnZtYXAsYmIuYW9tYXAsYmIubGlnaHRtYXAsYmIuZW1pc3NpdmVtYXAsYmIuYnVtcG1hcCxiYi5ub3JtYWxtYXAsYmIuZGlzcGxhY2VtZW50bWFwLGJiLmdyYWRpZW50bWFwLGJiLmZvZyxiYi5saWdodHMse2VtaXNzaXZlOnt2YWx1ZTpuZXcgQigwKX0sc3BlY3VsYXI6e3ZhbHVlOm5ldyBCKDExMTg0ODEpfSxzaGluaW5lc3M6e3ZhbHVlOjMwfX1dKSx2ZXJ0ZXhTaGFkZXI6emIubWVzaHBob25nX3ZlcnQsZnJhZ21lbnRTaGFkZXI6emIubWVzaHBob25nX2ZyYWd9LHN0YW5kYXJkOnt1bmlmb3JtczpEKFtiYi5jb21tb24sYmIuZW52bWFwLGJiLmFvbWFwLGJiLmxpZ2h0bWFwLGJiLmVtaXNzaXZlbWFwLGJiLmJ1bXBtYXAsYmIubm9ybWFsbWFwLGJiLmRpc3BsYWNlbWVudG1hcCxiYi5yb3VnaG5lc3NtYXAsYmIubWV0YWxuZXNzbWFwLGJiLmZvZyxiYi5saWdodHMse2VtaXNzaXZlOnt2YWx1ZTpuZXcgQigwKX0scm91Z2huZXNzOnt2YWx1ZTouNX0sbWV0YWxuZXNzOnt2YWx1ZTouNX0sCmVudk1hcEludGVuc2l0eTp7dmFsdWU6MX19XSksdmVydGV4U2hhZGVyOnpiLm1lc2hwaHlzaWNhbF92ZXJ0LGZyYWdtZW50U2hhZGVyOnpiLm1lc2hwaHlzaWNhbF9mcmFnfSxtYXRjYXA6e3VuaWZvcm1zOkQoW2JiLmNvbW1vbixiYi5idW1wbWFwLGJiLm5vcm1hbG1hcCxiYi5kaXNwbGFjZW1lbnRtYXAsYmIuZm9nLHttYXRjYXA6e3ZhbHVlOm51bGx9fV0pLHZlcnRleFNoYWRlcjp6Yi5tZXNobWF0Y2FwX3ZlcnQsZnJhZ21lbnRTaGFkZXI6emIubWVzaG1hdGNhcF9mcmFnfSxwb2ludHM6e3VuaWZvcm1zOkQoW2JiLnBvaW50cyxiYi5mb2ddKSx2ZXJ0ZXhTaGFkZXI6emIucG9pbnRzX3ZlcnQsZnJhZ21lbnRTaGFkZXI6emIucG9pbnRzX2ZyYWd9LGRhc2hlZDp7dW5pZm9ybXM6RChbYmIuY29tbW9uLGJiLmZvZyx7c2NhbGU6e3ZhbHVlOjF9LGRhc2hTaXplOnt2YWx1ZToxfSx0b3RhbFNpemU6e3ZhbHVlOjJ9fV0pLHZlcnRleFNoYWRlcjp6Yi5saW5lZGFzaGVkX3ZlcnQsZnJhZ21lbnRTaGFkZXI6emIubGluZWRhc2hlZF9mcmFnfSwKZGVwdGg6e3VuaWZvcm1zOkQoW2JiLmNvbW1vbixiYi5kaXNwbGFjZW1lbnRtYXBdKSx2ZXJ0ZXhTaGFkZXI6emIuZGVwdGhfdmVydCxmcmFnbWVudFNoYWRlcjp6Yi5kZXB0aF9mcmFnfSxub3JtYWw6e3VuaWZvcm1zOkQoW2JiLmNvbW1vbixiYi5idW1wbWFwLGJiLm5vcm1hbG1hcCxiYi5kaXNwbGFjZW1lbnRtYXAse29wYWNpdHk6e3ZhbHVlOjF9fV0pLHZlcnRleFNoYWRlcjp6Yi5ub3JtYWxfdmVydCxmcmFnbWVudFNoYWRlcjp6Yi5ub3JtYWxfZnJhZ30sc3ByaXRlOnt1bmlmb3JtczpEKFtiYi5zcHJpdGUsYmIuZm9nXSksdmVydGV4U2hhZGVyOnpiLnNwcml0ZV92ZXJ0LGZyYWdtZW50U2hhZGVyOnpiLnNwcml0ZV9mcmFnfSxiYWNrZ3JvdW5kOnt1bmlmb3Jtczp7dXZUcmFuc2Zvcm06e3ZhbHVlOm5ldyBsfSx0MkQ6e3ZhbHVlOm51bGx9fSx2ZXJ0ZXhTaGFkZXI6emIuYmFja2dyb3VuZF92ZXJ0LGZyYWdtZW50U2hhZGVyOnpiLmJhY2tncm91bmRfZnJhZ30sY3ViZTp7dW5pZm9ybXM6e3RDdWJlOnt2YWx1ZTpudWxsfSwKdEZsaXA6e3ZhbHVlOi0xfSxvcGFjaXR5Ont2YWx1ZToxfX0sdmVydGV4U2hhZGVyOnpiLmN1YmVfdmVydCxmcmFnbWVudFNoYWRlcjp6Yi5jdWJlX2ZyYWd9LGVxdWlyZWN0Ont1bmlmb3Jtczp7dEVxdWlyZWN0Ont2YWx1ZTpudWxsfX0sdmVydGV4U2hhZGVyOnpiLmVxdWlyZWN0X3ZlcnQsZnJhZ21lbnRTaGFkZXI6emIuZXF1aXJlY3RfZnJhZ30sZGlzdGFuY2VSR0JBOnt1bmlmb3JtczpEKFtiYi5jb21tb24sYmIuZGlzcGxhY2VtZW50bWFwLHtyZWZlcmVuY2VQb3NpdGlvbjp7dmFsdWU6bmV3IGd9LG5lYXJEaXN0YW5jZTp7dmFsdWU6MX0sZmFyRGlzdGFuY2U6e3ZhbHVlOjFFM319XSksdmVydGV4U2hhZGVyOnpiLmRpc3RhbmNlUkdCQV92ZXJ0LGZyYWdtZW50U2hhZGVyOnpiLmRpc3RhbmNlUkdCQV9mcmFnfSxzaGFkb3c6e3VuaWZvcm1zOkQoW2JiLmxpZ2h0cyxiYi5mb2cse2NvbG9yOnt2YWx1ZTpuZXcgQigwKX0sb3BhY2l0eTp7dmFsdWU6MX19XSksdmVydGV4U2hhZGVyOnpiLnNoYWRvd192ZXJ0LApmcmFnbWVudFNoYWRlcjp6Yi5zaGFkb3dfZnJhZ319O2lkLnBoeXNpY2FsPXt1bmlmb3JtczpEKFtpZC5zdGFuZGFyZC51bmlmb3Jtcyx7Y2xlYXJDb2F0Ont2YWx1ZTowfSxjbGVhckNvYXRSb3VnaG5lc3M6e3ZhbHVlOjB9fV0pLHZlcnRleFNoYWRlcjp6Yi5tZXNocGh5c2ljYWxfdmVydCxmcmFnbWVudFNoYWRlcjp6Yi5tZXNocGh5c2ljYWxfZnJhZ307T2JqZWN0LmFzc2lnbihMLnByb3RvdHlwZSx7Y2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9LGNvcHk6ZnVuY3Rpb24oYil7dGhpcy5hPWIuYTt0aGlzLmI9Yi5iO3RoaXMuYz1iLmM7dGhpcy5ub3JtYWwuY29weShiLm5vcm1hbCk7dGhpcy5jb2xvci5jb3B5KGIuY29sb3IpO3RoaXMubWF0ZXJpYWxJbmRleD1iLm1hdGVyaWFsSW5kZXg7Zm9yKHZhciBlPTAsaD1iLnZlcnRleE5vcm1hbHMubGVuZ3RoO2U8aDtlKyspdGhpcy52ZXJ0ZXhOb3JtYWxzW2VdPWIudmVydGV4Tm9ybWFsc1tlXS5jbG9uZSgpOwplPTA7Zm9yKGg9Yi52ZXJ0ZXhDb2xvcnMubGVuZ3RoO2U8aDtlKyspdGhpcy52ZXJ0ZXhDb2xvcnNbZV09Yi52ZXJ0ZXhDb2xvcnNbZV0uY2xvbmUoKTtyZXR1cm4gdGhpc319KTtKLlJvdGF0aW9uT3JkZXJzPSJYWVogWVpYIFpYWSBYWlkgWVhaIFpZWCIuc3BsaXQoIiAiKTtKLkRlZmF1bHRPcmRlcj0iWFlaIjtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhKLnByb3RvdHlwZSx7eDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3h9LHNldDpmdW5jdGlvbihiKXt0aGlzLl94PWI7dGhpcy5vbkNoYW5nZUNhbGxiYWNrKCl9fSx5OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5feX0sc2V0OmZ1bmN0aW9uKGIpe3RoaXMuX3k9Yjt0aGlzLm9uQ2hhbmdlQ2FsbGJhY2soKX19LHo6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl96fSxzZXQ6ZnVuY3Rpb24oYil7dGhpcy5fej1iO3RoaXMub25DaGFuZ2VDYWxsYmFjaygpfX0sb3JkZXI6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9vcmRlcn0sCnNldDpmdW5jdGlvbihiKXt0aGlzLl9vcmRlcj1iO3RoaXMub25DaGFuZ2VDYWxsYmFjaygpfX19KTtPYmplY3QuYXNzaWduKEoucHJvdG90eXBlLHtpc0V1bGVyOiEwLHNldDpmdW5jdGlvbihiLGUsaCxuKXt0aGlzLl94PWI7dGhpcy5feT1lO3RoaXMuX3o9aDt0aGlzLl9vcmRlcj1ufHx0aGlzLl9vcmRlcjt0aGlzLm9uQ2hhbmdlQ2FsbGJhY2soKTtyZXR1cm4gdGhpc30sY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy5feCx0aGlzLl95LHRoaXMuX3osdGhpcy5fb3JkZXIpfSxjb3B5OmZ1bmN0aW9uKGIpe3RoaXMuX3g9Yi5feDt0aGlzLl95PWIuX3k7dGhpcy5fej1iLl96O3RoaXMuX29yZGVyPWIuX29yZGVyO3RoaXMub25DaGFuZ2VDYWxsYmFjaygpO3JldHVybiB0aGlzfSxzZXRGcm9tUm90YXRpb25NYXRyaXg6ZnVuY3Rpb24oYixlLGgpe3ZhciBuPW9iLmNsYW1wLHU9Yi5lbGVtZW50cztiPXVbMF07dmFyIHc9dVs0XSx6PXVbOF0sRT0KdVsxXSxIPXVbNV0sST11WzldLE89dVsyXSxRPXVbNl07dT11WzEwXTtlPWV8fHRoaXMuX29yZGVyOyJYWVoiPT09ZT8odGhpcy5feT1NYXRoLmFzaW4obih6LC0xLDEpKSwuOTk5OTk+TWF0aC5hYnMoeik/KHRoaXMuX3g9TWF0aC5hdGFuMigtSSx1KSx0aGlzLl96PU1hdGguYXRhbjIoLXcsYikpOih0aGlzLl94PU1hdGguYXRhbjIoUSxIKSx0aGlzLl96PTApKToiWVhaIj09PWU/KHRoaXMuX3g9TWF0aC5hc2luKC1uKEksLTEsMSkpLC45OTk5OT5NYXRoLmFicyhJKT8odGhpcy5feT1NYXRoLmF0YW4yKHosdSksdGhpcy5fej1NYXRoLmF0YW4yKEUsSCkpOih0aGlzLl95PU1hdGguYXRhbjIoLU8sYiksdGhpcy5fej0wKSk6IlpYWSI9PT1lPyh0aGlzLl94PU1hdGguYXNpbihuKFEsLTEsMSkpLC45OTk5OT5NYXRoLmFicyhRKT8odGhpcy5feT1NYXRoLmF0YW4yKC1PLHUpLHRoaXMuX3o9TWF0aC5hdGFuMigtdyxIKSk6KHRoaXMuX3k9MCx0aGlzLl96PU1hdGguYXRhbjIoRSxiKSkpOgoiWllYIj09PWU/KHRoaXMuX3k9TWF0aC5hc2luKC1uKE8sLTEsMSkpLC45OTk5OT5NYXRoLmFicyhPKT8odGhpcy5feD1NYXRoLmF0YW4yKFEsdSksdGhpcy5fej1NYXRoLmF0YW4yKEUsYikpOih0aGlzLl94PTAsdGhpcy5fej1NYXRoLmF0YW4yKC13LEgpKSk6IllaWCI9PT1lPyh0aGlzLl96PU1hdGguYXNpbihuKEUsLTEsMSkpLC45OTk5OT5NYXRoLmFicyhFKT8odGhpcy5feD1NYXRoLmF0YW4yKC1JLEgpLHRoaXMuX3k9TWF0aC5hdGFuMigtTyxiKSk6KHRoaXMuX3g9MCx0aGlzLl95PU1hdGguYXRhbjIoeix1KSkpOiJYWlkiPT09ZT8odGhpcy5fej1NYXRoLmFzaW4oLW4odywtMSwxKSksLjk5OTk5Pk1hdGguYWJzKHcpPyh0aGlzLl94PU1hdGguYXRhbjIoUSxIKSx0aGlzLl95PU1hdGguYXRhbjIoeixiKSk6KHRoaXMuX3g9TWF0aC5hdGFuMigtSSx1KSx0aGlzLl95PTApKTpjb25zb2xlLndhcm4oIlRIUkVFLkV1bGVyOiAuc2V0RnJvbVJvdGF0aW9uTWF0cml4KCkgZ2l2ZW4gdW5zdXBwb3J0ZWQgb3JkZXI6ICIrCmUpO3RoaXMuX29yZGVyPWU7aWYoITEhPT1oKXRoaXMub25DaGFuZ2VDYWxsYmFjaygpO3JldHVybiB0aGlzfSxzZXRGcm9tUXVhdGVybmlvbjpmdW5jdGlvbigpe3ZhciBiPW5ldyBDO3JldHVybiBmdW5jdGlvbihlLGgsbil7Yi5tYWtlUm90YXRpb25Gcm9tUXVhdGVybmlvbihlKTtyZXR1cm4gdGhpcy5zZXRGcm9tUm90YXRpb25NYXRyaXgoYixoLG4pfX0oKSxzZXRGcm9tVmVjdG9yMzpmdW5jdGlvbihiLGUpe3JldHVybiB0aGlzLnNldChiLngsYi55LGIueixlfHx0aGlzLl9vcmRlcil9LHJlb3JkZXI6ZnVuY3Rpb24oKXt2YXIgYj1uZXcgZjtyZXR1cm4gZnVuY3Rpb24oZSl7Yi5zZXRGcm9tRXVsZXIodGhpcyk7cmV0dXJuIHRoaXMuc2V0RnJvbVF1YXRlcm5pb24oYixlKX19KCksZXF1YWxzOmZ1bmN0aW9uKGIpe3JldHVybiBiLl94PT09dGhpcy5feCYmYi5feT09PXRoaXMuX3kmJmIuX3o9PT10aGlzLl96JiZiLl9vcmRlcj09PXRoaXMuX29yZGVyfSxmcm9tQXJyYXk6ZnVuY3Rpb24oYil7dGhpcy5feD0KYlswXTt0aGlzLl95PWJbMV07dGhpcy5fej1iWzJdO3ZvaWQgMCE9PWJbM10mJih0aGlzLl9vcmRlcj1iWzNdKTt0aGlzLm9uQ2hhbmdlQ2FsbGJhY2soKTtyZXR1cm4gdGhpc30sdG9BcnJheTpmdW5jdGlvbihiLGUpe3ZvaWQgMD09PWImJihiPVtdKTt2b2lkIDA9PT1lJiYoZT0wKTtiW2VdPXRoaXMuX3g7YltlKzFdPXRoaXMuX3k7YltlKzJdPXRoaXMuX3o7YltlKzNdPXRoaXMuX29yZGVyO3JldHVybiBifSx0b1ZlY3RvcjM6ZnVuY3Rpb24oYil7cmV0dXJuIGI/Yi5zZXQodGhpcy5feCx0aGlzLl95LHRoaXMuX3opOm5ldyBnKHRoaXMuX3gsdGhpcy5feSx0aGlzLl96KX0sb25DaGFuZ2U6ZnVuY3Rpb24oYil7dGhpcy5vbkNoYW5nZUNhbGxiYWNrPWI7cmV0dXJuIHRoaXN9LG9uQ2hhbmdlQ2FsbGJhY2s6ZnVuY3Rpb24oKXt9fSk7T2JqZWN0LmFzc2lnbihQLnByb3RvdHlwZSx7c2V0OmZ1bmN0aW9uKGIpe3RoaXMubWFzaz0xPDxifDB9LGVuYWJsZTpmdW5jdGlvbihiKXt0aGlzLm1hc2s9CnRoaXMubWFza3wxPDxifDB9LHRvZ2dsZTpmdW5jdGlvbihiKXt0aGlzLm1hc2tePTE8PGJ8MH0sZGlzYWJsZTpmdW5jdGlvbihiKXt0aGlzLm1hc2smPX4oMTw8YnwwKX0sdGVzdDpmdW5jdGlvbihiKXtyZXR1cm4gMCE9PSh0aGlzLm1hc2smYi5tYXNrKX19KTt2YXIgTG49MDtTLkRlZmF1bHRVcD1uZXcgZygwLDEsMCk7Uy5EZWZhdWx0TWF0cml4QXV0b1VwZGF0ZT0hMDtTLnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoYy5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpTLGlzT2JqZWN0M0Q6ITAsb25CZWZvcmVSZW5kZXI6ZnVuY3Rpb24oKXt9LG9uQWZ0ZXJSZW5kZXI6ZnVuY3Rpb24oKXt9LGFwcGx5TWF0cml4OmZ1bmN0aW9uKGIpe3RoaXMubWF0cml4QXV0b1VwZGF0ZSYmdGhpcy51cGRhdGVNYXRyaXgoKTt0aGlzLm1hdHJpeC5wcmVtdWx0aXBseShiKTt0aGlzLm1hdHJpeC5kZWNvbXBvc2UodGhpcy5wb3NpdGlvbix0aGlzLnF1YXRlcm5pb24sdGhpcy5zY2FsZSl9LAphcHBseVF1YXRlcm5pb246ZnVuY3Rpb24oYil7dGhpcy5xdWF0ZXJuaW9uLnByZW11bHRpcGx5KGIpO3JldHVybiB0aGlzfSxzZXRSb3RhdGlvbkZyb21BeGlzQW5nbGU6ZnVuY3Rpb24oYixlKXt0aGlzLnF1YXRlcm5pb24uc2V0RnJvbUF4aXNBbmdsZShiLGUpfSxzZXRSb3RhdGlvbkZyb21FdWxlcjpmdW5jdGlvbihiKXt0aGlzLnF1YXRlcm5pb24uc2V0RnJvbUV1bGVyKGIsITApfSxzZXRSb3RhdGlvbkZyb21NYXRyaXg6ZnVuY3Rpb24oYil7dGhpcy5xdWF0ZXJuaW9uLnNldEZyb21Sb3RhdGlvbk1hdHJpeChiKX0sc2V0Um90YXRpb25Gcm9tUXVhdGVybmlvbjpmdW5jdGlvbihiKXt0aGlzLnF1YXRlcm5pb24uY29weShiKX0scm90YXRlT25BeGlzOmZ1bmN0aW9uKCl7dmFyIGI9bmV3IGY7cmV0dXJuIGZ1bmN0aW9uKGUsaCl7Yi5zZXRGcm9tQXhpc0FuZ2xlKGUsaCk7dGhpcy5xdWF0ZXJuaW9uLm11bHRpcGx5KGIpO3JldHVybiB0aGlzfX0oKSxyb3RhdGVPbldvcmxkQXhpczpmdW5jdGlvbigpe3ZhciBiPQpuZXcgZjtyZXR1cm4gZnVuY3Rpb24oZSxoKXtiLnNldEZyb21BeGlzQW5nbGUoZSxoKTt0aGlzLnF1YXRlcm5pb24ucHJlbXVsdGlwbHkoYik7cmV0dXJuIHRoaXN9fSgpLHJvdGF0ZVg6ZnVuY3Rpb24oKXt2YXIgYj1uZXcgZygxLDAsMCk7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnJvdGF0ZU9uQXhpcyhiLGUpfX0oKSxyb3RhdGVZOmZ1bmN0aW9uKCl7dmFyIGI9bmV3IGcoMCwxLDApO3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5yb3RhdGVPbkF4aXMoYixlKX19KCkscm90YXRlWjpmdW5jdGlvbigpe3ZhciBiPW5ldyBnKDAsMCwxKTtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucm90YXRlT25BeGlzKGIsZSl9fSgpLHRyYW5zbGF0ZU9uQXhpczpmdW5jdGlvbigpe3ZhciBiPW5ldyBnO3JldHVybiBmdW5jdGlvbihlLGgpe2IuY29weShlKS5hcHBseVF1YXRlcm5pb24odGhpcy5xdWF0ZXJuaW9uKTt0aGlzLnBvc2l0aW9uLmFkZChiLm11bHRpcGx5U2NhbGFyKGgpKTsKcmV0dXJuIHRoaXN9fSgpLHRyYW5zbGF0ZVg6ZnVuY3Rpb24oKXt2YXIgYj1uZXcgZygxLDAsMCk7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnRyYW5zbGF0ZU9uQXhpcyhiLGUpfX0oKSx0cmFuc2xhdGVZOmZ1bmN0aW9uKCl7dmFyIGI9bmV3IGcoMCwxLDApO3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy50cmFuc2xhdGVPbkF4aXMoYixlKX19KCksdHJhbnNsYXRlWjpmdW5jdGlvbigpe3ZhciBiPW5ldyBnKDAsMCwxKTtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMudHJhbnNsYXRlT25BeGlzKGIsZSl9fSgpLGxvY2FsVG9Xb3JsZDpmdW5jdGlvbihiKXtyZXR1cm4gYi5hcHBseU1hdHJpeDQodGhpcy5tYXRyaXhXb3JsZCl9LHdvcmxkVG9Mb2NhbDpmdW5jdGlvbigpe3ZhciBiPW5ldyBDO3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZS5hcHBseU1hdHJpeDQoYi5nZXRJbnZlcnNlKHRoaXMubWF0cml4V29ybGQpKX19KCksbG9va0F0OmZ1bmN0aW9uKCl7dmFyIGI9Cm5ldyBmLGU9bmV3IEMsaD1uZXcgZyxuPW5ldyBnO3JldHVybiBmdW5jdGlvbih1LHcseil7dS5pc1ZlY3RvcjM/aC5jb3B5KHUpOmguc2V0KHUsdyx6KTt1PXRoaXMucGFyZW50O3RoaXMudXBkYXRlV29ybGRNYXRyaXgoITAsITEpO24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHRoaXMubWF0cml4V29ybGQpO3RoaXMuaXNDYW1lcmF8fHRoaXMuaXNMaWdodD9lLmxvb2tBdChuLGgsdGhpcy51cCk6ZS5sb29rQXQoaCxuLHRoaXMudXApO3RoaXMucXVhdGVybmlvbi5zZXRGcm9tUm90YXRpb25NYXRyaXgoZSk7dSYmKGUuZXh0cmFjdFJvdGF0aW9uKHUubWF0cml4V29ybGQpLGIuc2V0RnJvbVJvdGF0aW9uTWF0cml4KGUpLHRoaXMucXVhdGVybmlvbi5wcmVtdWx0aXBseShiLmludmVyc2UoKSkpfX0oKSxhZGQ6ZnVuY3Rpb24oYil7aWYoMTxhcmd1bWVudHMubGVuZ3RoKXtmb3IodmFyIGU9MDtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXRoaXMuYWRkKGFyZ3VtZW50c1tlXSk7cmV0dXJuIHRoaXN9aWYoYj09PQp0aGlzKXJldHVybiBjb25zb2xlLmVycm9yKCJUSFJFRS5PYmplY3QzRC5hZGQ6IG9iamVjdCBjYW4ndCBiZSBhZGRlZCBhcyBhIGNoaWxkIG9mIGl0c2VsZi4iLGIpLHRoaXM7YiYmYi5pc09iamVjdDNEPyhudWxsIT09Yi5wYXJlbnQmJmIucGFyZW50LnJlbW92ZShiKSxiLnBhcmVudD10aGlzLGIuZGlzcGF0Y2hFdmVudCh7dHlwZToiYWRkZWQifSksdGhpcy5jaGlsZHJlbi5wdXNoKGIpKTpjb25zb2xlLmVycm9yKCJUSFJFRS5PYmplY3QzRC5hZGQ6IG9iamVjdCBub3QgYW4gaW5zdGFuY2Ugb2YgVEhSRUUuT2JqZWN0M0QuIixiKTtyZXR1cm4gdGhpc30scmVtb3ZlOmZ1bmN0aW9uKGIpe2lmKDE8YXJndW1lbnRzLmxlbmd0aCl7Zm9yKHZhciBlPTA7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl0aGlzLnJlbW92ZShhcmd1bWVudHNbZV0pO3JldHVybiB0aGlzfWU9dGhpcy5jaGlsZHJlbi5pbmRleE9mKGIpOy0xIT09ZSYmKGIucGFyZW50PW51bGwsYi5kaXNwYXRjaEV2ZW50KHt0eXBlOiJyZW1vdmVkIn0pLAp0aGlzLmNoaWxkcmVuLnNwbGljZShlLDEpKTtyZXR1cm4gdGhpc30sZ2V0T2JqZWN0QnlJZDpmdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5nZXRPYmplY3RCeVByb3BlcnR5KCJpZCIsYil9LGdldE9iamVjdEJ5TmFtZTpmdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5nZXRPYmplY3RCeVByb3BlcnR5KCJuYW1lIixiKX0sZ2V0T2JqZWN0QnlQcm9wZXJ0eTpmdW5jdGlvbihiLGUpe2lmKHRoaXNbYl09PT1lKXJldHVybiB0aGlzO2Zvcih2YXIgaD0wLG49dGhpcy5jaGlsZHJlbi5sZW5ndGg7aDxuO2grKyl7dmFyIHU9dGhpcy5jaGlsZHJlbltoXS5nZXRPYmplY3RCeVByb3BlcnR5KGIsZSk7aWYodm9pZCAwIT09dSlyZXR1cm4gdX19LGdldFdvcmxkUG9zaXRpb246ZnVuY3Rpb24oYil7dm9pZCAwPT09YiYmKGNvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC5nZXRXb3JsZFBvc2l0aW9uKCkgdGFyZ2V0IGlzIG5vdyByZXF1aXJlZCIpLGI9bmV3IGcpO3RoaXMudXBkYXRlTWF0cml4V29ybGQoITApOwpyZXR1cm4gYi5zZXRGcm9tTWF0cml4UG9zaXRpb24odGhpcy5tYXRyaXhXb3JsZCl9LGdldFdvcmxkUXVhdGVybmlvbjpmdW5jdGlvbigpe3ZhciBiPW5ldyBnLGU9bmV3IGc7cmV0dXJuIGZ1bmN0aW9uKGgpe3ZvaWQgMD09PWgmJihjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdDNEOiAuZ2V0V29ybGRRdWF0ZXJuaW9uKCkgdGFyZ2V0IGlzIG5vdyByZXF1aXJlZCIpLGg9bmV3IGYpO3RoaXMudXBkYXRlTWF0cml4V29ybGQoITApO3RoaXMubWF0cml4V29ybGQuZGVjb21wb3NlKGIsaCxlKTtyZXR1cm4gaH19KCksZ2V0V29ybGRTY2FsZTpmdW5jdGlvbigpe3ZhciBiPW5ldyBnLGU9bmV3IGY7cmV0dXJuIGZ1bmN0aW9uKGgpe3ZvaWQgMD09PWgmJihjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdDNEOiAuZ2V0V29ybGRTY2FsZSgpIHRhcmdldCBpcyBub3cgcmVxdWlyZWQiKSxoPW5ldyBnKTt0aGlzLnVwZGF0ZU1hdHJpeFdvcmxkKCEwKTt0aGlzLm1hdHJpeFdvcmxkLmRlY29tcG9zZShiLAplLGgpO3JldHVybiBofX0oKSxnZXRXb3JsZERpcmVjdGlvbjpmdW5jdGlvbihiKXt2b2lkIDA9PT1iJiYoY29uc29sZS53YXJuKCJUSFJFRS5PYmplY3QzRDogLmdldFdvcmxkRGlyZWN0aW9uKCkgdGFyZ2V0IGlzIG5vdyByZXF1aXJlZCIpLGI9bmV3IGcpO3RoaXMudXBkYXRlTWF0cml4V29ybGQoITApO3ZhciBlPXRoaXMubWF0cml4V29ybGQuZWxlbWVudHM7cmV0dXJuIGIuc2V0KGVbOF0sZVs5XSxlWzEwXSkubm9ybWFsaXplKCl9LHJheWNhc3Q6ZnVuY3Rpb24oKXt9LHRyYXZlcnNlOmZ1bmN0aW9uKGIpe2IodGhpcyk7Zm9yKHZhciBlPXRoaXMuY2hpbGRyZW4saD0wLG49ZS5sZW5ndGg7aDxuO2grKyllW2hdLnRyYXZlcnNlKGIpfSx0cmF2ZXJzZVZpc2libGU6ZnVuY3Rpb24oYil7aWYoITEhPT10aGlzLnZpc2libGUpe2IodGhpcyk7Zm9yKHZhciBlPXRoaXMuY2hpbGRyZW4saD0wLG49ZS5sZW5ndGg7aDxuO2grKyllW2hdLnRyYXZlcnNlVmlzaWJsZShiKX19LHRyYXZlcnNlQW5jZXN0b3JzOmZ1bmN0aW9uKGIpe3ZhciBlPQp0aGlzLnBhcmVudDtudWxsIT09ZSYmKGIoZSksZS50cmF2ZXJzZUFuY2VzdG9ycyhiKSl9LHVwZGF0ZU1hdHJpeDpmdW5jdGlvbigpe3RoaXMubWF0cml4LmNvbXBvc2UodGhpcy5wb3NpdGlvbix0aGlzLnF1YXRlcm5pb24sdGhpcy5zY2FsZSk7dGhpcy5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlPSEwfSx1cGRhdGVNYXRyaXhXb3JsZDpmdW5jdGlvbihiKXt0aGlzLm1hdHJpeEF1dG9VcGRhdGUmJnRoaXMudXBkYXRlTWF0cml4KCk7aWYodGhpcy5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlfHxiKW51bGw9PT10aGlzLnBhcmVudD90aGlzLm1hdHJpeFdvcmxkLmNvcHkodGhpcy5tYXRyaXgpOnRoaXMubWF0cml4V29ybGQubXVsdGlwbHlNYXRyaWNlcyh0aGlzLnBhcmVudC5tYXRyaXhXb3JsZCx0aGlzLm1hdHJpeCksdGhpcy5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlPSExLGI9ITA7Zm9yKHZhciBlPXRoaXMuY2hpbGRyZW4saD0wLG49ZS5sZW5ndGg7aDxuO2grKyllW2hdLnVwZGF0ZU1hdHJpeFdvcmxkKGIpfSwKdXBkYXRlV29ybGRNYXRyaXg6ZnVuY3Rpb24oYixlKXt2YXIgaD10aGlzLnBhcmVudDshMD09PWImJm51bGwhPT1oJiZoLnVwZGF0ZVdvcmxkTWF0cml4KCEwLCExKTt0aGlzLm1hdHJpeEF1dG9VcGRhdGUmJnRoaXMudXBkYXRlTWF0cml4KCk7bnVsbD09PXRoaXMucGFyZW50P3RoaXMubWF0cml4V29ybGQuY29weSh0aGlzLm1hdHJpeCk6dGhpcy5tYXRyaXhXb3JsZC5tdWx0aXBseU1hdHJpY2VzKHRoaXMucGFyZW50Lm1hdHJpeFdvcmxkLHRoaXMubWF0cml4KTtpZighMD09PWUpZm9yKGI9dGhpcy5jaGlsZHJlbixlPTAsaD1iLmxlbmd0aDtlPGg7ZSsrKWJbZV0udXBkYXRlV29ybGRNYXRyaXgoITEsITApfSx0b0pTT046ZnVuY3Rpb24oYil7ZnVuY3Rpb24gZShPLFEpe3ZvaWQgMD09PU9bUS51dWlkXSYmKE9bUS51dWlkXT1RLnRvSlNPTihiKSk7cmV0dXJuIFEudXVpZH1mdW5jdGlvbiBoKE8pe3ZhciBRPVtdLFI7Zm9yKFIgaW4gTyl7dmFyIFU9T1tSXTtkZWxldGUgVS5tZXRhZGF0YTsKUS5wdXNoKFUpfXJldHVybiBRfXZhciBuPXZvaWQgMD09PWJ8fCJzdHJpbmciPT09dHlwZW9mIGIsdT17fTtuJiYoYj17Z2VvbWV0cmllczp7fSxtYXRlcmlhbHM6e30sdGV4dHVyZXM6e30saW1hZ2VzOnt9LHNoYXBlczp7fX0sdS5tZXRhZGF0YT17dmVyc2lvbjo0LjUsdHlwZToiT2JqZWN0IixnZW5lcmF0b3I6Ik9iamVjdDNELnRvSlNPTiJ9KTt2YXIgdz17fTt3LnV1aWQ9dGhpcy51dWlkO3cudHlwZT10aGlzLnR5cGU7IiIhPT10aGlzLm5hbWUmJih3Lm5hbWU9dGhpcy5uYW1lKTshMD09PXRoaXMuY2FzdFNoYWRvdyYmKHcuY2FzdFNoYWRvdz0hMCk7ITA9PT10aGlzLnJlY2VpdmVTaGFkb3cmJih3LnJlY2VpdmVTaGFkb3c9ITApOyExPT09dGhpcy52aXNpYmxlJiYody52aXNpYmxlPSExKTshMT09PXRoaXMuZnJ1c3R1bUN1bGxlZCYmKHcuZnJ1c3R1bUN1bGxlZD0hMSk7MCE9PXRoaXMucmVuZGVyT3JkZXImJih3LnJlbmRlck9yZGVyPXRoaXMucmVuZGVyT3JkZXIpOyJ7fSIhPT0KSlNPTi5zdHJpbmdpZnkodGhpcy51c2VyRGF0YSkmJih3LnVzZXJEYXRhPXRoaXMudXNlckRhdGEpO3cubGF5ZXJzPXRoaXMubGF5ZXJzLm1hc2s7dy5tYXRyaXg9dGhpcy5tYXRyaXgudG9BcnJheSgpOyExPT09dGhpcy5tYXRyaXhBdXRvVXBkYXRlJiYody5tYXRyaXhBdXRvVXBkYXRlPSExKTt0aGlzLmlzTWVzaCYmMCE9PXRoaXMuZHJhd01vZGUmJih3LmRyYXdNb2RlPXRoaXMuZHJhd01vZGUpO2lmKHRoaXMuaXNNZXNofHx0aGlzLmlzTGluZXx8dGhpcy5pc1BvaW50cyl7dy5nZW9tZXRyeT1lKGIuZ2VvbWV0cmllcyx0aGlzLmdlb21ldHJ5KTt2YXIgej10aGlzLmdlb21ldHJ5LnBhcmFtZXRlcnM7aWYodm9pZCAwIT09eiYmdm9pZCAwIT09ei5zaGFwZXMpaWYoej16LnNoYXBlcyxBcnJheS5pc0FycmF5KHopKWZvcih2YXIgRT0wLEg9ei5sZW5ndGg7RTxIO0UrKyllKGIuc2hhcGVzLHpbRV0pO2Vsc2UgZShiLnNoYXBlcyx6KX1pZih2b2lkIDAhPT10aGlzLm1hdGVyaWFsKWlmKEFycmF5LmlzQXJyYXkodGhpcy5tYXRlcmlhbCkpe3o9CltdO0U9MDtmb3IoSD10aGlzLm1hdGVyaWFsLmxlbmd0aDtFPEg7RSsrKXoucHVzaChlKGIubWF0ZXJpYWxzLHRoaXMubWF0ZXJpYWxbRV0pKTt3Lm1hdGVyaWFsPXp9ZWxzZSB3Lm1hdGVyaWFsPWUoYi5tYXRlcmlhbHMsdGhpcy5tYXRlcmlhbCk7aWYoMDx0aGlzLmNoaWxkcmVuLmxlbmd0aClmb3Iody5jaGlsZHJlbj1bXSxFPTA7RTx0aGlzLmNoaWxkcmVuLmxlbmd0aDtFKyspdy5jaGlsZHJlbi5wdXNoKHRoaXMuY2hpbGRyZW5bRV0udG9KU09OKGIpLm9iamVjdCk7aWYobil7bj1oKGIuZ2VvbWV0cmllcyk7RT1oKGIubWF0ZXJpYWxzKTtIPWgoYi50ZXh0dXJlcyk7dmFyIEk9aChiLmltYWdlcyk7ej1oKGIuc2hhcGVzKTswPG4ubGVuZ3RoJiYodS5nZW9tZXRyaWVzPW4pOzA8RS5sZW5ndGgmJih1Lm1hdGVyaWFscz1FKTswPEgubGVuZ3RoJiYodS50ZXh0dXJlcz1IKTswPEkubGVuZ3RoJiYodS5pbWFnZXM9SSk7MDx6Lmxlbmd0aCYmKHUuc2hhcGVzPXopfXUub2JqZWN0PXc7cmV0dXJuIHV9LApjbG9uZTpmdW5jdGlvbihiKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyxiKX0sY29weTpmdW5jdGlvbihiLGUpe3ZvaWQgMD09PWUmJihlPSEwKTt0aGlzLm5hbWU9Yi5uYW1lO3RoaXMudXAuY29weShiLnVwKTt0aGlzLnBvc2l0aW9uLmNvcHkoYi5wb3NpdGlvbik7dGhpcy5xdWF0ZXJuaW9uLmNvcHkoYi5xdWF0ZXJuaW9uKTt0aGlzLnNjYWxlLmNvcHkoYi5zY2FsZSk7dGhpcy5tYXRyaXguY29weShiLm1hdHJpeCk7dGhpcy5tYXRyaXhXb3JsZC5jb3B5KGIubWF0cml4V29ybGQpO3RoaXMubWF0cml4QXV0b1VwZGF0ZT1iLm1hdHJpeEF1dG9VcGRhdGU7dGhpcy5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlPWIubWF0cml4V29ybGROZWVkc1VwZGF0ZTt0aGlzLmxheWVycy5tYXNrPWIubGF5ZXJzLm1hc2s7dGhpcy52aXNpYmxlPWIudmlzaWJsZTt0aGlzLmNhc3RTaGFkb3c9Yi5jYXN0U2hhZG93O3RoaXMucmVjZWl2ZVNoYWRvdz1iLnJlY2VpdmVTaGFkb3c7CnRoaXMuZnJ1c3R1bUN1bGxlZD1iLmZydXN0dW1DdWxsZWQ7dGhpcy5yZW5kZXJPcmRlcj1iLnJlbmRlck9yZGVyO3RoaXMudXNlckRhdGE9SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShiLnVzZXJEYXRhKSk7aWYoITA9PT1lKWZvcihlPTA7ZTxiLmNoaWxkcmVuLmxlbmd0aDtlKyspdGhpcy5hZGQoYi5jaGlsZHJlbltlXS5jbG9uZSgpKTtyZXR1cm4gdGhpc319KTt2YXIgTW49MDtOLnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoYy5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpOLGlzR2VvbWV0cnk6ITAsYXBwbHlNYXRyaXg6ZnVuY3Rpb24oYil7Zm9yKHZhciBlPShuZXcgbCkuZ2V0Tm9ybWFsTWF0cml4KGIpLGg9MCxuPXRoaXMudmVydGljZXMubGVuZ3RoO2g8bjtoKyspdGhpcy52ZXJ0aWNlc1toXS5hcHBseU1hdHJpeDQoYik7aD0wO2ZvcihuPXRoaXMuZmFjZXMubGVuZ3RoO2g8bjtoKyspe2I9dGhpcy5mYWNlc1toXTtiLm5vcm1hbC5hcHBseU1hdHJpeDMoZSkubm9ybWFsaXplKCk7CmZvcih2YXIgdT0wLHc9Yi52ZXJ0ZXhOb3JtYWxzLmxlbmd0aDt1PHc7dSsrKWIudmVydGV4Tm9ybWFsc1t1XS5hcHBseU1hdHJpeDMoZSkubm9ybWFsaXplKCl9bnVsbCE9PXRoaXMuYm91bmRpbmdCb3gmJnRoaXMuY29tcHV0ZUJvdW5kaW5nQm94KCk7bnVsbCE9PXRoaXMuYm91bmRpbmdTcGhlcmUmJnRoaXMuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCk7dGhpcy5ub3JtYWxzTmVlZFVwZGF0ZT10aGlzLnZlcnRpY2VzTmVlZFVwZGF0ZT0hMDtyZXR1cm4gdGhpc30scm90YXRlWDpmdW5jdGlvbigpe3ZhciBiPW5ldyBDO3JldHVybiBmdW5jdGlvbihlKXtiLm1ha2VSb3RhdGlvblgoZSk7dGhpcy5hcHBseU1hdHJpeChiKTtyZXR1cm4gdGhpc319KCkscm90YXRlWTpmdW5jdGlvbigpe3ZhciBiPW5ldyBDO3JldHVybiBmdW5jdGlvbihlKXtiLm1ha2VSb3RhdGlvblkoZSk7dGhpcy5hcHBseU1hdHJpeChiKTtyZXR1cm4gdGhpc319KCkscm90YXRlWjpmdW5jdGlvbigpe3ZhciBiPW5ldyBDOwpyZXR1cm4gZnVuY3Rpb24oZSl7Yi5tYWtlUm90YXRpb25aKGUpO3RoaXMuYXBwbHlNYXRyaXgoYik7cmV0dXJuIHRoaXN9fSgpLHRyYW5zbGF0ZTpmdW5jdGlvbigpe3ZhciBiPW5ldyBDO3JldHVybiBmdW5jdGlvbihlLGgsbil7Yi5tYWtlVHJhbnNsYXRpb24oZSxoLG4pO3RoaXMuYXBwbHlNYXRyaXgoYik7cmV0dXJuIHRoaXN9fSgpLHNjYWxlOmZ1bmN0aW9uKCl7dmFyIGI9bmV3IEM7cmV0dXJuIGZ1bmN0aW9uKGUsaCxuKXtiLm1ha2VTY2FsZShlLGgsbik7dGhpcy5hcHBseU1hdHJpeChiKTtyZXR1cm4gdGhpc319KCksbG9va0F0OmZ1bmN0aW9uKCl7dmFyIGI9bmV3IFM7cmV0dXJuIGZ1bmN0aW9uKGUpe2IubG9va0F0KGUpO2IudXBkYXRlTWF0cml4KCk7dGhpcy5hcHBseU1hdHJpeChiLm1hdHJpeCl9fSgpLGZyb21CdWZmZXJHZW9tZXRyeTpmdW5jdGlvbihiKXtmdW5jdGlvbiBlKFcsWixmYSxxYSl7dmFyIHJhPXZvaWQgMD09PUU/W106W2guY29sb3JzW1ddLmNsb25lKCksCmguY29sb3JzW1pdLmNsb25lKCksaC5jb2xvcnNbZmFdLmNsb25lKCldLGlhPXZvaWQgMD09PXo/W106WyhuZXcgZykuZnJvbUFycmF5KHosMypXKSwobmV3IGcpLmZyb21BcnJheSh6LDMqWiksKG5ldyBnKS5mcm9tQXJyYXkoeiwzKmZhKV07cWE9bmV3IEwoVyxaLGZhLGlhLHJhLHFhKTtoLmZhY2VzLnB1c2gocWEpO3ZvaWQgMCE9PUgmJmguZmFjZVZlcnRleFV2c1swXS5wdXNoKFsobmV3IGQpLmZyb21BcnJheShILDIqVyksKG5ldyBkKS5mcm9tQXJyYXkoSCwyKlopLChuZXcgZCkuZnJvbUFycmF5KEgsMipmYSldKTt2b2lkIDAhPT1JJiZoLmZhY2VWZXJ0ZXhVdnNbMV0ucHVzaChbKG5ldyBkKS5mcm9tQXJyYXkoSSwyKlcpLChuZXcgZCkuZnJvbUFycmF5KEksMipaKSwobmV3IGQpLmZyb21BcnJheShJLDIqZmEpXSl9dmFyIGg9dGhpcyxuPW51bGwhPT1iLmluZGV4P2IuaW5kZXguYXJyYXk6dm9pZCAwLHU9Yi5hdHRyaWJ1dGVzLHc9dS5wb3NpdGlvbi5hcnJheSx6PXZvaWQgMCE9PQp1Lm5vcm1hbD91Lm5vcm1hbC5hcnJheTp2b2lkIDAsRT12b2lkIDAhPT11LmNvbG9yP3UuY29sb3IuYXJyYXk6dm9pZCAwLEg9dm9pZCAwIT09dS51dj91LnV2LmFycmF5OnZvaWQgMCxJPXZvaWQgMCE9PXUudXYyP3UudXYyLmFycmF5OnZvaWQgMDt2b2lkIDAhPT1JJiYodGhpcy5mYWNlVmVydGV4VXZzWzFdPVtdKTtmb3IodmFyIE89dT0wO3U8dy5sZW5ndGg7dSs9MyxPKz0yKWgudmVydGljZXMucHVzaCgobmV3IGcpLmZyb21BcnJheSh3LHUpKSx2b2lkIDAhPT1FJiZoLmNvbG9ycy5wdXNoKChuZXcgQikuZnJvbUFycmF5KEUsdSkpO3ZhciBRPWIuZ3JvdXBzO2lmKDA8US5sZW5ndGgpZm9yKHU9MDt1PFEubGVuZ3RoO3UrKyl7dz1RW3VdO3ZhciBSPXcuc3RhcnQsVT13LmNvdW50O089Ujtmb3IoUis9VTtPPFI7Tys9Myl2b2lkIDAhPT1uP2UobltPXSxuW08rMV0sbltPKzJdLHcubWF0ZXJpYWxJbmRleCk6ZShPLE8rMSxPKzIsdy5tYXRlcmlhbEluZGV4KX1lbHNlIGlmKHZvaWQgMCE9PQpuKWZvcih1PTA7dTxuLmxlbmd0aDt1Kz0zKWUoblt1XSxuW3UrMV0sblt1KzJdKTtlbHNlIGZvcih1PTA7dTx3Lmxlbmd0aC8zO3UrPTMpZSh1LHUrMSx1KzIpO3RoaXMuY29tcHV0ZUZhY2VOb3JtYWxzKCk7bnVsbCE9PWIuYm91bmRpbmdCb3gmJih0aGlzLmJvdW5kaW5nQm94PWIuYm91bmRpbmdCb3guY2xvbmUoKSk7bnVsbCE9PWIuYm91bmRpbmdTcGhlcmUmJih0aGlzLmJvdW5kaW5nU3BoZXJlPWIuYm91bmRpbmdTcGhlcmUuY2xvbmUoKSk7cmV0dXJuIHRoaXN9LGNlbnRlcjpmdW5jdGlvbigpe3ZhciBiPW5ldyBnO3JldHVybiBmdW5jdGlvbigpe3RoaXMuY29tcHV0ZUJvdW5kaW5nQm94KCk7dGhpcy5ib3VuZGluZ0JveC5nZXRDZW50ZXIoYikubmVnYXRlKCk7dGhpcy50cmFuc2xhdGUoYi54LGIueSxiLnopO3JldHVybiB0aGlzfX0oKSxub3JtYWxpemU6ZnVuY3Rpb24oKXt0aGlzLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpO3ZhciBiPXRoaXMuYm91bmRpbmdTcGhlcmUuY2VudGVyLAplPXRoaXMuYm91bmRpbmdTcGhlcmUucmFkaXVzO2U9MD09PWU/MToxL2U7dmFyIGg9bmV3IEM7aC5zZXQoZSwwLDAsLWUqYi54LDAsZSwwLC1lKmIueSwwLDAsZSwtZSpiLnosMCwwLDAsMSk7dGhpcy5hcHBseU1hdHJpeChoKTtyZXR1cm4gdGhpc30sY29tcHV0ZUZhY2VOb3JtYWxzOmZ1bmN0aW9uKCl7Zm9yKHZhciBiPW5ldyBnLGU9bmV3IGcsaD0wLG49dGhpcy5mYWNlcy5sZW5ndGg7aDxuO2grKyl7dmFyIHU9dGhpcy5mYWNlc1toXSx3PXRoaXMudmVydGljZXNbdS5hXSx6PXRoaXMudmVydGljZXNbdS5iXTtiLnN1YlZlY3RvcnModGhpcy52ZXJ0aWNlc1t1LmNdLHopO2Uuc3ViVmVjdG9ycyh3LHopO2IuY3Jvc3MoZSk7Yi5ub3JtYWxpemUoKTt1Lm5vcm1hbC5jb3B5KGIpfX0sY29tcHV0ZVZlcnRleE5vcm1hbHM6ZnVuY3Rpb24oYil7dm9pZCAwPT09YiYmKGI9ITApO3ZhciBlO3ZhciBoPUFycmF5KHRoaXMudmVydGljZXMubGVuZ3RoKTt2YXIgbj0wO2ZvcihlPXRoaXMudmVydGljZXMubGVuZ3RoO248CmU7bisrKWhbbl09bmV3IGc7aWYoYil7dmFyIHU9bmV3IGcsdz1uZXcgZztiPTA7Zm9yKG49dGhpcy5mYWNlcy5sZW5ndGg7YjxuO2IrKyl7ZT10aGlzLmZhY2VzW2JdO3ZhciB6PXRoaXMudmVydGljZXNbZS5hXTt2YXIgRT10aGlzLnZlcnRpY2VzW2UuYl07dmFyIEg9dGhpcy52ZXJ0aWNlc1tlLmNdO3Uuc3ViVmVjdG9ycyhILEUpO3cuc3ViVmVjdG9ycyh6LEUpO3UuY3Jvc3Modyk7aFtlLmFdLmFkZCh1KTtoW2UuYl0uYWRkKHUpO2hbZS5jXS5hZGQodSl9fWVsc2UgZm9yKHRoaXMuY29tcHV0ZUZhY2VOb3JtYWxzKCksYj0wLG49dGhpcy5mYWNlcy5sZW5ndGg7YjxuO2IrKyllPXRoaXMuZmFjZXNbYl0saFtlLmFdLmFkZChlLm5vcm1hbCksaFtlLmJdLmFkZChlLm5vcm1hbCksaFtlLmNdLmFkZChlLm5vcm1hbCk7bj0wO2ZvcihlPXRoaXMudmVydGljZXMubGVuZ3RoO248ZTtuKyspaFtuXS5ub3JtYWxpemUoKTtiPTA7Zm9yKG49dGhpcy5mYWNlcy5sZW5ndGg7YjxuO2IrKyllPQp0aGlzLmZhY2VzW2JdLHo9ZS52ZXJ0ZXhOb3JtYWxzLDM9PT16Lmxlbmd0aD8oelswXS5jb3B5KGhbZS5hXSkselsxXS5jb3B5KGhbZS5iXSkselsyXS5jb3B5KGhbZS5jXSkpOih6WzBdPWhbZS5hXS5jbG9uZSgpLHpbMV09aFtlLmJdLmNsb25lKCkselsyXT1oW2UuY10uY2xvbmUoKSk7MDx0aGlzLmZhY2VzLmxlbmd0aCYmKHRoaXMubm9ybWFsc05lZWRVcGRhdGU9ITApfSxjb21wdXRlRmxhdFZlcnRleE5vcm1hbHM6ZnVuY3Rpb24oKXt2YXIgYjt0aGlzLmNvbXB1dGVGYWNlTm9ybWFscygpO3ZhciBlPTA7Zm9yKGI9dGhpcy5mYWNlcy5sZW5ndGg7ZTxiO2UrKyl7dmFyIGg9dGhpcy5mYWNlc1tlXTt2YXIgbj1oLnZlcnRleE5vcm1hbHM7Mz09PW4ubGVuZ3RoPyhuWzBdLmNvcHkoaC5ub3JtYWwpLG5bMV0uY29weShoLm5vcm1hbCksblsyXS5jb3B5KGgubm9ybWFsKSk6KG5bMF09aC5ub3JtYWwuY2xvbmUoKSxuWzFdPWgubm9ybWFsLmNsb25lKCksblsyXT1oLm5vcm1hbC5jbG9uZSgpKX0wPAp0aGlzLmZhY2VzLmxlbmd0aCYmKHRoaXMubm9ybWFsc05lZWRVcGRhdGU9ITApfSxjb21wdXRlTW9ycGhOb3JtYWxzOmZ1bmN0aW9uKCl7dmFyIGIsZTt2YXIgaD0wO2ZvcihlPXRoaXMuZmFjZXMubGVuZ3RoO2g8ZTtoKyspe3ZhciBuPXRoaXMuZmFjZXNbaF07bi5fX29yaWdpbmFsRmFjZU5vcm1hbD9uLl9fb3JpZ2luYWxGYWNlTm9ybWFsLmNvcHkobi5ub3JtYWwpOm4uX19vcmlnaW5hbEZhY2VOb3JtYWw9bi5ub3JtYWwuY2xvbmUoKTtuLl9fb3JpZ2luYWxWZXJ0ZXhOb3JtYWxzfHwobi5fX29yaWdpbmFsVmVydGV4Tm9ybWFscz1bXSk7dmFyIHU9MDtmb3IoYj1uLnZlcnRleE5vcm1hbHMubGVuZ3RoO3U8Yjt1Kyspbi5fX29yaWdpbmFsVmVydGV4Tm9ybWFsc1t1XT9uLl9fb3JpZ2luYWxWZXJ0ZXhOb3JtYWxzW3VdLmNvcHkobi52ZXJ0ZXhOb3JtYWxzW3VdKTpuLl9fb3JpZ2luYWxWZXJ0ZXhOb3JtYWxzW3VdPW4udmVydGV4Tm9ybWFsc1t1XS5jbG9uZSgpfXZhciB3PW5ldyBOOwp3LmZhY2VzPXRoaXMuZmFjZXM7dT0wO2ZvcihiPXRoaXMubW9ycGhUYXJnZXRzLmxlbmd0aDt1PGI7dSsrKXtpZighdGhpcy5tb3JwaE5vcm1hbHNbdV0pe3RoaXMubW9ycGhOb3JtYWxzW3VdPXt9O3RoaXMubW9ycGhOb3JtYWxzW3VdLmZhY2VOb3JtYWxzPVtdO3RoaXMubW9ycGhOb3JtYWxzW3VdLnZlcnRleE5vcm1hbHM9W107bj10aGlzLm1vcnBoTm9ybWFsc1t1XS5mYWNlTm9ybWFsczt2YXIgej10aGlzLm1vcnBoTm9ybWFsc1t1XS52ZXJ0ZXhOb3JtYWxzO2g9MDtmb3IoZT10aGlzLmZhY2VzLmxlbmd0aDtoPGU7aCsrKXt2YXIgRT1uZXcgZzt2YXIgSD17YTpuZXcgZyxiOm5ldyBnLGM6bmV3IGd9O24ucHVzaChFKTt6LnB1c2goSCl9fXo9dGhpcy5tb3JwaE5vcm1hbHNbdV07dy52ZXJ0aWNlcz10aGlzLm1vcnBoVGFyZ2V0c1t1XS52ZXJ0aWNlczt3LmNvbXB1dGVGYWNlTm9ybWFscygpO3cuY29tcHV0ZVZlcnRleE5vcm1hbHMoKTtoPTA7Zm9yKGU9dGhpcy5mYWNlcy5sZW5ndGg7aDwKZTtoKyspbj10aGlzLmZhY2VzW2hdLEU9ei5mYWNlTm9ybWFsc1toXSxIPXoudmVydGV4Tm9ybWFsc1toXSxFLmNvcHkobi5ub3JtYWwpLEguYS5jb3B5KG4udmVydGV4Tm9ybWFsc1swXSksSC5iLmNvcHkobi52ZXJ0ZXhOb3JtYWxzWzFdKSxILmMuY29weShuLnZlcnRleE5vcm1hbHNbMl0pfWg9MDtmb3IoZT10aGlzLmZhY2VzLmxlbmd0aDtoPGU7aCsrKW49dGhpcy5mYWNlc1toXSxuLm5vcm1hbD1uLl9fb3JpZ2luYWxGYWNlTm9ybWFsLG4udmVydGV4Tm9ybWFscz1uLl9fb3JpZ2luYWxWZXJ0ZXhOb3JtYWxzfSxjb21wdXRlQm91bmRpbmdCb3g6ZnVuY3Rpb24oKXtudWxsPT09dGhpcy5ib3VuZGluZ0JveCYmKHRoaXMuYm91bmRpbmdCb3g9bmV3IHYpO3RoaXMuYm91bmRpbmdCb3guc2V0RnJvbVBvaW50cyh0aGlzLnZlcnRpY2VzKX0sY29tcHV0ZUJvdW5kaW5nU3BoZXJlOmZ1bmN0aW9uKCl7bnVsbD09PXRoaXMuYm91bmRpbmdTcGhlcmUmJih0aGlzLmJvdW5kaW5nU3BoZXJlPQpuZXcgQSk7dGhpcy5ib3VuZGluZ1NwaGVyZS5zZXRGcm9tUG9pbnRzKHRoaXMudmVydGljZXMpfSxtZXJnZTpmdW5jdGlvbihiLGUsaCl7aWYoYiYmYi5pc0dlb21ldHJ5KXt2YXIgbix1PXRoaXMudmVydGljZXMubGVuZ3RoLHc9dGhpcy52ZXJ0aWNlcyx6PWIudmVydGljZXMsRT10aGlzLmZhY2VzLEg9Yi5mYWNlcyxJPXRoaXMuZmFjZVZlcnRleFV2c1swXSxPPWIuZmFjZVZlcnRleFV2c1swXSxRPXRoaXMuY29sb3JzLFI9Yi5jb2xvcnM7dm9pZCAwPT09aCYmKGg9MCk7dm9pZCAwIT09ZSYmKG49KG5ldyBsKS5nZXROb3JtYWxNYXRyaXgoZSkpO2I9MDtmb3IodmFyIFU9ei5sZW5ndGg7YjxVO2IrKyl7dmFyIFc9eltiXS5jbG9uZSgpO3ZvaWQgMCE9PWUmJlcuYXBwbHlNYXRyaXg0KGUpO3cucHVzaChXKX1iPTA7Zm9yKFU9Ui5sZW5ndGg7YjxVO2IrKylRLnB1c2goUltiXS5jbG9uZSgpKTtiPTA7Zm9yKFU9SC5sZW5ndGg7YjxVO2IrKyl7ej1IW2JdO3ZhciBaPXoudmVydGV4Tm9ybWFsczsKUj16LnZlcnRleENvbG9ycztRPW5ldyBMKHouYSt1LHouYit1LHouYyt1KTtRLm5vcm1hbC5jb3B5KHoubm9ybWFsKTt2b2lkIDAhPT1uJiZRLm5vcm1hbC5hcHBseU1hdHJpeDMobikubm9ybWFsaXplKCk7ZT0wO2Zvcih3PVoubGVuZ3RoO2U8dztlKyspVz1aW2VdLmNsb25lKCksdm9pZCAwIT09biYmVy5hcHBseU1hdHJpeDMobikubm9ybWFsaXplKCksUS52ZXJ0ZXhOb3JtYWxzLnB1c2goVyk7US5jb2xvci5jb3B5KHouY29sb3IpO2U9MDtmb3Iodz1SLmxlbmd0aDtlPHc7ZSsrKVc9UltlXSxRLnZlcnRleENvbG9ycy5wdXNoKFcuY2xvbmUoKSk7US5tYXRlcmlhbEluZGV4PXoubWF0ZXJpYWxJbmRleCtoO0UucHVzaChRKX1iPTA7Zm9yKFU9Ty5sZW5ndGg7YjxVO2IrKylpZihoPU9bYl0sbj1bXSx2b2lkIDAhPT1oKXtlPTA7Zm9yKHc9aC5sZW5ndGg7ZTx3O2UrKyluLnB1c2goaFtlXS5jbG9uZSgpKTtJLnB1c2gobil9fWVsc2UgY29uc29sZS5lcnJvcigiVEhSRUUuR2VvbWV0cnkubWVyZ2UoKTogZ2VvbWV0cnkgbm90IGFuIGluc3RhbmNlIG9mIFRIUkVFLkdlb21ldHJ5LiIsCmIpfSxtZXJnZU1lc2g6ZnVuY3Rpb24oYil7YiYmYi5pc01lc2g/KGIubWF0cml4QXV0b1VwZGF0ZSYmYi51cGRhdGVNYXRyaXgoKSx0aGlzLm1lcmdlKGIuZ2VvbWV0cnksYi5tYXRyaXgpKTpjb25zb2xlLmVycm9yKCJUSFJFRS5HZW9tZXRyeS5tZXJnZU1lc2goKTogbWVzaCBub3QgYW4gaW5zdGFuY2Ugb2YgVEhSRUUuTWVzaC4iLGIpfSxtZXJnZVZlcnRpY2VzOmZ1bmN0aW9uKCl7dmFyIGI9e30sZT1bXSxoPVtdLG49TWF0aC5wb3coMTAsNCksdTt2YXIgdz0wO2Zvcih1PXRoaXMudmVydGljZXMubGVuZ3RoO3c8dTt3Kyspe3ZhciB6PXRoaXMudmVydGljZXNbd107ej1NYXRoLnJvdW5kKHoueCpuKSsiXyIrTWF0aC5yb3VuZCh6LnkqbikrIl8iK01hdGgucm91bmQoei56Km4pO3ZvaWQgMD09PWJbel0/KGJbel09dyxlLnB1c2godGhpcy52ZXJ0aWNlc1t3XSksaFt3XT1lLmxlbmd0aC0xKTpoW3ddPWhbYlt6XV19Yj1bXTt3PTA7Zm9yKHU9dGhpcy5mYWNlcy5sZW5ndGg7dzx1O3crKylmb3Iobj0KdGhpcy5mYWNlc1t3XSxuLmE9aFtuLmFdLG4uYj1oW24uYl0sbi5jPWhbbi5jXSxuPVtuLmEsbi5iLG4uY10sej0wOzM+ejt6KyspaWYoblt6XT09PW5bKHorMSklM10pe2IucHVzaCh3KTticmVha31mb3Iodz1iLmxlbmd0aC0xOzA8PXc7dy0tKWZvcihuPWJbd10sdGhpcy5mYWNlcy5zcGxpY2UobiwxKSxoPTAsdT10aGlzLmZhY2VWZXJ0ZXhVdnMubGVuZ3RoO2g8dTtoKyspdGhpcy5mYWNlVmVydGV4VXZzW2hdLnNwbGljZShuLDEpO3c9dGhpcy52ZXJ0aWNlcy5sZW5ndGgtZS5sZW5ndGg7dGhpcy52ZXJ0aWNlcz1lO3JldHVybiB3fSxzZXRGcm9tUG9pbnRzOmZ1bmN0aW9uKGIpe3RoaXMudmVydGljZXM9W107Zm9yKHZhciBlPTAsaD1iLmxlbmd0aDtlPGg7ZSsrKXt2YXIgbj1iW2VdO3RoaXMudmVydGljZXMucHVzaChuZXcgZyhuLngsbi55LG4uenx8MCkpfXJldHVybiB0aGlzfSxzb3J0RmFjZXNCeU1hdGVyaWFsSW5kZXg6ZnVuY3Rpb24oKXtmb3IodmFyIGI9dGhpcy5mYWNlcywKZT1iLmxlbmd0aCxoPTA7aDxlO2grKyliW2hdLl9pZD1oO2Iuc29ydChmdW5jdGlvbihILEkpe3JldHVybiBILm1hdGVyaWFsSW5kZXgtSS5tYXRlcmlhbEluZGV4fSk7dmFyIG49dGhpcy5mYWNlVmVydGV4VXZzWzBdLHU9dGhpcy5mYWNlVmVydGV4VXZzWzFdLHcsejtuJiZuLmxlbmd0aD09PWUmJih3PVtdKTt1JiZ1Lmxlbmd0aD09PWUmJih6PVtdKTtmb3IoaD0wO2g8ZTtoKyspe3ZhciBFPWJbaF0uX2lkO3cmJncucHVzaChuW0VdKTt6JiZ6LnB1c2godVtFXSl9dyYmKHRoaXMuZmFjZVZlcnRleFV2c1swXT13KTt6JiYodGhpcy5mYWNlVmVydGV4VXZzWzFdPXopfSx0b0pTT046ZnVuY3Rpb24oKXtmdW5jdGlvbiBiKG5hLHZhLEJhKXtyZXR1cm4gQmE/bmF8MTw8dmE6bmEmfigxPDx2YSl9ZnVuY3Rpb24gZShuYSl7dmFyIHZhPW5hLngudG9TdHJpbmcoKStuYS55LnRvU3RyaW5nKCkrbmEuei50b1N0cmluZygpO2lmKHZvaWQgMCE9PUlbdmFdKXJldHVybiBJW3ZhXTtJW3ZhXT1ILmxlbmd0aC8KMztILnB1c2gobmEueCxuYS55LG5hLnopO3JldHVybiBJW3ZhXX1mdW5jdGlvbiBoKG5hKXt2YXIgdmE9bmEuci50b1N0cmluZygpK25hLmcudG9TdHJpbmcoKStuYS5iLnRvU3RyaW5nKCk7aWYodm9pZCAwIT09UVt2YV0pcmV0dXJuIFFbdmFdO1FbdmFdPU8ubGVuZ3RoO08ucHVzaChuYS5nZXRIZXgoKSk7cmV0dXJuIFFbdmFdfWZ1bmN0aW9uIG4obmEpe3ZhciB2YT1uYS54LnRvU3RyaW5nKCkrbmEueS50b1N0cmluZygpO2lmKHZvaWQgMCE9PVVbdmFdKXJldHVybiBVW3ZhXTtVW3ZhXT1SLmxlbmd0aC8yO1IucHVzaChuYS54LG5hLnkpO3JldHVybiBVW3ZhXX12YXIgdT17bWV0YWRhdGE6e3ZlcnNpb246NC41LHR5cGU6Ikdlb21ldHJ5IixnZW5lcmF0b3I6Ikdlb21ldHJ5LnRvSlNPTiJ9fTt1LnV1aWQ9dGhpcy51dWlkO3UudHlwZT10aGlzLnR5cGU7IiIhPT10aGlzLm5hbWUmJih1Lm5hbWU9dGhpcy5uYW1lKTtpZih2b2lkIDAhPT10aGlzLnBhcmFtZXRlcnMpe3ZhciB3PXRoaXMucGFyYW1ldGVycywKejtmb3IoeiBpbiB3KXZvaWQgMCE9PXdbel0mJih1W3pdPXdbel0pO3JldHVybiB1fXc9W107Zm9yKHo9MDt6PHRoaXMudmVydGljZXMubGVuZ3RoO3orKyl7dmFyIEU9dGhpcy52ZXJ0aWNlc1t6XTt3LnB1c2goRS54LEUueSxFLnopfUU9W107dmFyIEg9W10sST17fSxPPVtdLFE9e30sUj1bXSxVPXt9O2Zvcih6PTA7ejx0aGlzLmZhY2VzLmxlbmd0aDt6Kyspe3ZhciBXPXRoaXMuZmFjZXNbel0sWj12b2lkIDAhPT10aGlzLmZhY2VWZXJ0ZXhVdnNbMF1bel0sZmE9MDxXLm5vcm1hbC5sZW5ndGgoKSxxYT0wPFcudmVydGV4Tm9ybWFscy5sZW5ndGgscmE9MSE9PVcuY29sb3Iucnx8MSE9PVcuY29sb3IuZ3x8MSE9PVcuY29sb3IuYixpYT0wPFcudmVydGV4Q29sb3JzLmxlbmd0aCx0YT0wO3RhPWIodGEsMCwwKTt0YT1iKHRhLDEsITApO3RhPWIodGEsMiwhMSk7dGE9Yih0YSwzLFopO3RhPWIodGEsNCxmYSk7dGE9Yih0YSw1LHFhKTt0YT1iKHRhLDYscmEpO3RhPWIodGEsNyxpYSk7CkUucHVzaCh0YSk7RS5wdXNoKFcuYSxXLmIsVy5jKTtFLnB1c2goVy5tYXRlcmlhbEluZGV4KTtaJiYoWj10aGlzLmZhY2VWZXJ0ZXhVdnNbMF1bel0sRS5wdXNoKG4oWlswXSksbihaWzFdKSxuKFpbMl0pKSk7ZmEmJkUucHVzaChlKFcubm9ybWFsKSk7cWEmJihmYT1XLnZlcnRleE5vcm1hbHMsRS5wdXNoKGUoZmFbMF0pLGUoZmFbMV0pLGUoZmFbMl0pKSk7cmEmJkUucHVzaChoKFcuY29sb3IpKTtpYSYmKFc9Vy52ZXJ0ZXhDb2xvcnMsRS5wdXNoKGgoV1swXSksaChXWzFdKSxoKFdbMl0pKSl9dS5kYXRhPXt9O3UuZGF0YS52ZXJ0aWNlcz13O3UuZGF0YS5ub3JtYWxzPUg7MDxPLmxlbmd0aCYmKHUuZGF0YS5jb2xvcnM9Tyk7MDxSLmxlbmd0aCYmKHUuZGF0YS51dnM9W1JdKTt1LmRhdGEuZmFjZXM9RTtyZXR1cm4gdX0sY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IE4pLmNvcHkodGhpcyl9LGNvcHk6ZnVuY3Rpb24oYil7dmFyIGUsaCxuO3RoaXMudmVydGljZXM9W107dGhpcy5jb2xvcnM9CltdO3RoaXMuZmFjZXM9W107dGhpcy5mYWNlVmVydGV4VXZzPVtbXV07dGhpcy5tb3JwaFRhcmdldHM9W107dGhpcy5tb3JwaE5vcm1hbHM9W107dGhpcy5za2luV2VpZ2h0cz1bXTt0aGlzLnNraW5JbmRpY2VzPVtdO3RoaXMubGluZURpc3RhbmNlcz1bXTt0aGlzLmJvdW5kaW5nU3BoZXJlPXRoaXMuYm91bmRpbmdCb3g9bnVsbDt0aGlzLm5hbWU9Yi5uYW1lO3ZhciB1PWIudmVydGljZXM7dmFyIHc9MDtmb3IoZT11Lmxlbmd0aDt3PGU7dysrKXRoaXMudmVydGljZXMucHVzaCh1W3ddLmNsb25lKCkpO3U9Yi5jb2xvcnM7dz0wO2ZvcihlPXUubGVuZ3RoO3c8ZTt3KyspdGhpcy5jb2xvcnMucHVzaCh1W3ddLmNsb25lKCkpO3U9Yi5mYWNlczt3PTA7Zm9yKGU9dS5sZW5ndGg7dzxlO3crKyl0aGlzLmZhY2VzLnB1c2godVt3XS5jbG9uZSgpKTt3PTA7Zm9yKGU9Yi5mYWNlVmVydGV4VXZzLmxlbmd0aDt3PGU7dysrKXt2YXIgej1iLmZhY2VWZXJ0ZXhVdnNbd107dm9pZCAwPT09dGhpcy5mYWNlVmVydGV4VXZzW3ddJiYKKHRoaXMuZmFjZVZlcnRleFV2c1t3XT1bXSk7dT0wO2ZvcihoPXoubGVuZ3RoO3U8aDt1Kyspe3ZhciBFPXpbdV0sSD1bXTt2YXIgST0wO2ZvcihuPUUubGVuZ3RoO0k8bjtJKyspSC5wdXNoKEVbSV0uY2xvbmUoKSk7dGhpcy5mYWNlVmVydGV4VXZzW3ddLnB1c2goSCl9fUk9Yi5tb3JwaFRhcmdldHM7dz0wO2ZvcihlPUkubGVuZ3RoO3c8ZTt3Kyspe249e307bi5uYW1lPUlbd10ubmFtZTtpZih2b2lkIDAhPT1JW3ddLnZlcnRpY2VzKWZvcihuLnZlcnRpY2VzPVtdLHU9MCxoPUlbd10udmVydGljZXMubGVuZ3RoO3U8aDt1Kyspbi52ZXJ0aWNlcy5wdXNoKElbd10udmVydGljZXNbdV0uY2xvbmUoKSk7aWYodm9pZCAwIT09SVt3XS5ub3JtYWxzKWZvcihuLm5vcm1hbHM9W10sdT0wLGg9SVt3XS5ub3JtYWxzLmxlbmd0aDt1PGg7dSsrKW4ubm9ybWFscy5wdXNoKElbd10ubm9ybWFsc1t1XS5jbG9uZSgpKTt0aGlzLm1vcnBoVGFyZ2V0cy5wdXNoKG4pfUk9Yi5tb3JwaE5vcm1hbHM7Cnc9MDtmb3IoZT1JLmxlbmd0aDt3PGU7dysrKXtuPXt9O2lmKHZvaWQgMCE9PUlbd10udmVydGV4Tm9ybWFscylmb3Iobi52ZXJ0ZXhOb3JtYWxzPVtdLHU9MCxoPUlbd10udmVydGV4Tm9ybWFscy5sZW5ndGg7dTxoO3UrKyl6PUlbd10udmVydGV4Tm9ybWFsc1t1XSxFPXt9LEUuYT16LmEuY2xvbmUoKSxFLmI9ei5iLmNsb25lKCksRS5jPXouYy5jbG9uZSgpLG4udmVydGV4Tm9ybWFscy5wdXNoKEUpO2lmKHZvaWQgMCE9PUlbd10uZmFjZU5vcm1hbHMpZm9yKG4uZmFjZU5vcm1hbHM9W10sdT0wLGg9SVt3XS5mYWNlTm9ybWFscy5sZW5ndGg7dTxoO3UrKyluLmZhY2VOb3JtYWxzLnB1c2goSVt3XS5mYWNlTm9ybWFsc1t1XS5jbG9uZSgpKTt0aGlzLm1vcnBoTm9ybWFscy5wdXNoKG4pfXU9Yi5za2luV2VpZ2h0czt3PTA7Zm9yKGU9dS5sZW5ndGg7dzxlO3crKyl0aGlzLnNraW5XZWlnaHRzLnB1c2godVt3XS5jbG9uZSgpKTt1PWIuc2tpbkluZGljZXM7dz0wO2ZvcihlPXUubGVuZ3RoO3c8CmU7dysrKXRoaXMuc2tpbkluZGljZXMucHVzaCh1W3ddLmNsb25lKCkpO3U9Yi5saW5lRGlzdGFuY2VzO3c9MDtmb3IoZT11Lmxlbmd0aDt3PGU7dysrKXRoaXMubGluZURpc3RhbmNlcy5wdXNoKHVbd10pO3c9Yi5ib3VuZGluZ0JveDtudWxsIT09dyYmKHRoaXMuYm91bmRpbmdCb3g9dy5jbG9uZSgpKTt3PWIuYm91bmRpbmdTcGhlcmU7bnVsbCE9PXcmJih0aGlzLmJvdW5kaW5nU3BoZXJlPXcuY2xvbmUoKSk7dGhpcy5lbGVtZW50c05lZWRVcGRhdGU9Yi5lbGVtZW50c05lZWRVcGRhdGU7dGhpcy52ZXJ0aWNlc05lZWRVcGRhdGU9Yi52ZXJ0aWNlc05lZWRVcGRhdGU7dGhpcy51dnNOZWVkVXBkYXRlPWIudXZzTmVlZFVwZGF0ZTt0aGlzLm5vcm1hbHNOZWVkVXBkYXRlPWIubm9ybWFsc05lZWRVcGRhdGU7dGhpcy5jb2xvcnNOZWVkVXBkYXRlPWIuY29sb3JzTmVlZFVwZGF0ZTt0aGlzLmxpbmVEaXN0YW5jZXNOZWVkVXBkYXRlPWIubGluZURpc3RhbmNlc05lZWRVcGRhdGU7dGhpcy5ncm91cHNOZWVkVXBkYXRlPQpiLmdyb3Vwc05lZWRVcGRhdGU7cmV0dXJuIHRoaXN9LGRpc3Bvc2U6ZnVuY3Rpb24oKXt0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImRpc3Bvc2UifSl9fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KFQucHJvdG90eXBlLCJuZWVkc1VwZGF0ZSIse3NldDpmdW5jdGlvbihiKXshMD09PWImJnRoaXMudmVyc2lvbisrfX0pO09iamVjdC5hc3NpZ24oVC5wcm90b3R5cGUse2lzQnVmZmVyQXR0cmlidXRlOiEwLG9uVXBsb2FkQ2FsbGJhY2s6ZnVuY3Rpb24oKXt9LHNldEFycmF5OmZ1bmN0aW9uKGIpe2lmKEFycmF5LmlzQXJyYXkoYikpdGhyb3cgbmV3IFR5cGVFcnJvcigiVEhSRUUuQnVmZmVyQXR0cmlidXRlOiBhcnJheSBzaG91bGQgYmUgYSBUeXBlZCBBcnJheS4iKTt0aGlzLmNvdW50PXZvaWQgMCE9PWI/Yi5sZW5ndGgvdGhpcy5pdGVtU2l6ZTowO3RoaXMuYXJyYXk9YjtyZXR1cm4gdGhpc30sc2V0RHluYW1pYzpmdW5jdGlvbihiKXt0aGlzLmR5bmFtaWM9YjtyZXR1cm4gdGhpc30sCmNvcHk6ZnVuY3Rpb24oYil7dGhpcy5uYW1lPWIubmFtZTt0aGlzLmFycmF5PW5ldyBiLmFycmF5LmNvbnN0cnVjdG9yKGIuYXJyYXkpO3RoaXMuaXRlbVNpemU9Yi5pdGVtU2l6ZTt0aGlzLmNvdW50PWIuY291bnQ7dGhpcy5ub3JtYWxpemVkPWIubm9ybWFsaXplZDt0aGlzLmR5bmFtaWM9Yi5keW5hbWljO3JldHVybiB0aGlzfSxjb3B5QXQ6ZnVuY3Rpb24oYixlLGgpe2IqPXRoaXMuaXRlbVNpemU7aCo9ZS5pdGVtU2l6ZTtmb3IodmFyIG49MCx1PXRoaXMuaXRlbVNpemU7bjx1O24rKyl0aGlzLmFycmF5W2Irbl09ZS5hcnJheVtoK25dO3JldHVybiB0aGlzfSxjb3B5QXJyYXk6ZnVuY3Rpb24oYil7dGhpcy5hcnJheS5zZXQoYik7cmV0dXJuIHRoaXN9LGNvcHlDb2xvcnNBcnJheTpmdW5jdGlvbihiKXtmb3IodmFyIGU9dGhpcy5hcnJheSxoPTAsbj0wLHU9Yi5sZW5ndGg7bjx1O24rKyl7dmFyIHc9YltuXTt2b2lkIDA9PT13JiYoY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGUuY29weUNvbG9yc0FycmF5KCk6IGNvbG9yIGlzIHVuZGVmaW5lZCIsCm4pLHc9bmV3IEIpO2VbaCsrXT13LnI7ZVtoKytdPXcuZztlW2grK109dy5ifXJldHVybiB0aGlzfSxjb3B5VmVjdG9yMnNBcnJheTpmdW5jdGlvbihiKXtmb3IodmFyIGU9dGhpcy5hcnJheSxoPTAsbj0wLHU9Yi5sZW5ndGg7bjx1O24rKyl7dmFyIHc9YltuXTt2b2lkIDA9PT13JiYoY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGUuY29weVZlY3RvcjJzQXJyYXkoKTogdmVjdG9yIGlzIHVuZGVmaW5lZCIsbiksdz1uZXcgZCk7ZVtoKytdPXcueDtlW2grK109dy55fXJldHVybiB0aGlzfSxjb3B5VmVjdG9yM3NBcnJheTpmdW5jdGlvbihiKXtmb3IodmFyIGU9dGhpcy5hcnJheSxoPTAsbj0wLHU9Yi5sZW5ndGg7bjx1O24rKyl7dmFyIHc9YltuXTt2b2lkIDA9PT13JiYoY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGUuY29weVZlY3RvcjNzQXJyYXkoKTogdmVjdG9yIGlzIHVuZGVmaW5lZCIsbiksdz1uZXcgZyk7ZVtoKytdPXcueDtlW2grK109dy55OwplW2grK109dy56fXJldHVybiB0aGlzfSxjb3B5VmVjdG9yNHNBcnJheTpmdW5jdGlvbihiKXtmb3IodmFyIGU9dGhpcy5hcnJheSxoPTAsbj0wLHU9Yi5sZW5ndGg7bjx1O24rKyl7dmFyIHc9YltuXTt2b2lkIDA9PT13JiYoY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGUuY29weVZlY3RvcjRzQXJyYXkoKTogdmVjdG9yIGlzIHVuZGVmaW5lZCIsbiksdz1uZXcgbSk7ZVtoKytdPXcueDtlW2grK109dy55O2VbaCsrXT13Lno7ZVtoKytdPXcud31yZXR1cm4gdGhpc30sc2V0OmZ1bmN0aW9uKGIsZSl7dm9pZCAwPT09ZSYmKGU9MCk7dGhpcy5hcnJheS5zZXQoYixlKTtyZXR1cm4gdGhpc30sZ2V0WDpmdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5hcnJheVtiKnRoaXMuaXRlbVNpemVdfSxzZXRYOmZ1bmN0aW9uKGIsZSl7dGhpcy5hcnJheVtiKnRoaXMuaXRlbVNpemVdPWU7cmV0dXJuIHRoaXN9LGdldFk6ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuYXJyYXlbYip0aGlzLml0ZW1TaXplKwoxXX0sc2V0WTpmdW5jdGlvbihiLGUpe3RoaXMuYXJyYXlbYip0aGlzLml0ZW1TaXplKzFdPWU7cmV0dXJuIHRoaXN9LGdldFo6ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuYXJyYXlbYip0aGlzLml0ZW1TaXplKzJdfSxzZXRaOmZ1bmN0aW9uKGIsZSl7dGhpcy5hcnJheVtiKnRoaXMuaXRlbVNpemUrMl09ZTtyZXR1cm4gdGhpc30sZ2V0VzpmdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5hcnJheVtiKnRoaXMuaXRlbVNpemUrM119LHNldFc6ZnVuY3Rpb24oYixlKXt0aGlzLmFycmF5W2IqdGhpcy5pdGVtU2l6ZSszXT1lO3JldHVybiB0aGlzfSxzZXRYWTpmdW5jdGlvbihiLGUsaCl7Yio9dGhpcy5pdGVtU2l6ZTt0aGlzLmFycmF5W2IrMF09ZTt0aGlzLmFycmF5W2IrMV09aDtyZXR1cm4gdGhpc30sc2V0WFlaOmZ1bmN0aW9uKGIsZSxoLG4pe2IqPXRoaXMuaXRlbVNpemU7dGhpcy5hcnJheVtiKzBdPWU7dGhpcy5hcnJheVtiKzFdPWg7dGhpcy5hcnJheVtiKzJdPW47cmV0dXJuIHRoaXN9LApzZXRYWVpXOmZ1bmN0aW9uKGIsZSxoLG4sdSl7Yio9dGhpcy5pdGVtU2l6ZTt0aGlzLmFycmF5W2IrMF09ZTt0aGlzLmFycmF5W2IrMV09aDt0aGlzLmFycmF5W2IrMl09bjt0aGlzLmFycmF5W2IrM109dTtyZXR1cm4gdGhpc30sb25VcGxvYWQ6ZnVuY3Rpb24oYil7dGhpcy5vblVwbG9hZENhbGxiYWNrPWI7cmV0dXJuIHRoaXN9LGNsb25lOmZ1bmN0aW9uKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMuYXJyYXksdGhpcy5pdGVtU2l6ZSkpLmNvcHkodGhpcyl9fSk7WS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShULnByb3RvdHlwZSk7WS5wcm90b3R5cGUuY29uc3RydWN0b3I9WTthYS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShULnByb3RvdHlwZSk7YWEucHJvdG90eXBlLmNvbnN0cnVjdG9yPWFhO2hhLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKFQucHJvdG90eXBlKTtoYS5wcm90b3R5cGUuY29uc3RydWN0b3I9aGE7WC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShULnByb3RvdHlwZSk7ClgucHJvdG90eXBlLmNvbnN0cnVjdG9yPVg7Y2EucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoVC5wcm90b3R5cGUpO2NhLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1jYTtlYS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShULnByb3RvdHlwZSk7ZWEucHJvdG90eXBlLmNvbnN0cnVjdG9yPWVhO2thLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKFQucHJvdG90eXBlKTtrYS5wcm90b3R5cGUuY29uc3RydWN0b3I9a2E7YmEucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoVC5wcm90b3R5cGUpO2JhLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1iYTtsYS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShULnByb3RvdHlwZSk7bGEucHJvdG90eXBlLmNvbnN0cnVjdG9yPWxhO09iamVjdC5hc3NpZ24od2EucHJvdG90eXBlLHtjb21wdXRlR3JvdXBzOmZ1bmN0aW9uKGIpe3ZhciBlPVtdLGg9dm9pZCAwO2I9Yi5mYWNlcztmb3IodmFyIG49MDtuPGIubGVuZ3RoO24rKyl7dmFyIHU9YltuXTtpZih1Lm1hdGVyaWFsSW5kZXghPT0KaCl7aD11Lm1hdGVyaWFsSW5kZXg7dm9pZCAwIT09dyYmKHcuY291bnQ9MypuLXcuc3RhcnQsZS5wdXNoKHcpKTt2YXIgdz17c3RhcnQ6MypuLG1hdGVyaWFsSW5kZXg6aH19fXZvaWQgMCE9PXcmJih3LmNvdW50PTMqbi13LnN0YXJ0LGUucHVzaCh3KSk7dGhpcy5ncm91cHM9ZX0sZnJvbUdlb21ldHJ5OmZ1bmN0aW9uKGIpe3ZhciBlPWIuZmFjZXMsaD1iLnZlcnRpY2VzLG49Yi5mYWNlVmVydGV4VXZzLHU9blswXSYmMDxuWzBdLmxlbmd0aCx3PW5bMV0mJjA8blsxXS5sZW5ndGgsej1iLm1vcnBoVGFyZ2V0cyxFPXoubGVuZ3RoO2lmKDA8RSl7dmFyIEg9W107Zm9yKHZhciBJPTA7STxFO0krKylIW0ldPXtuYW1lOnpbSV0ubmFtZSxkYXRhOltdfTt0aGlzLm1vcnBoVGFyZ2V0cy5wb3NpdGlvbj1IfXZhciBPPWIubW9ycGhOb3JtYWxzLFE9Ty5sZW5ndGg7aWYoMDxRKXt2YXIgUj1bXTtmb3IoST0wO0k8UTtJKyspUltJXT17bmFtZTpPW0ldLm5hbWUsZGF0YTpbXX07dGhpcy5tb3JwaFRhcmdldHMubm9ybWFsPQpSfXZhciBVPWIuc2tpbkluZGljZXMsVz1iLnNraW5XZWlnaHRzLFo9VS5sZW5ndGg9PT1oLmxlbmd0aCxmYT1XLmxlbmd0aD09PWgubGVuZ3RoOzA8aC5sZW5ndGgmJjA9PT1lLmxlbmd0aCYmY29uc29sZS5lcnJvcigiVEhSRUUuRGlyZWN0R2VvbWV0cnk6IEZhY2VsZXNzIGdlb21ldHJpZXMgYXJlIG5vdCBzdXBwb3J0ZWQuIik7Zm9yKEk9MDtJPGUubGVuZ3RoO0krKyl7dmFyIHFhPWVbSV07dGhpcy52ZXJ0aWNlcy5wdXNoKGhbcWEuYV0saFtxYS5iXSxoW3FhLmNdKTt2YXIgcmE9cWEudmVydGV4Tm9ybWFsczszPT09cmEubGVuZ3RoP3RoaXMubm9ybWFscy5wdXNoKHJhWzBdLHJhWzFdLHJhWzJdKToocmE9cWEubm9ybWFsLHRoaXMubm9ybWFscy5wdXNoKHJhLHJhLHJhKSk7cmE9cWEudmVydGV4Q29sb3JzOzM9PT1yYS5sZW5ndGg/dGhpcy5jb2xvcnMucHVzaChyYVswXSxyYVsxXSxyYVsyXSk6KHJhPXFhLmNvbG9yLHRoaXMuY29sb3JzLnB1c2gocmEscmEscmEpKTshMD09PXUmJgoocmE9blswXVtJXSx2b2lkIDAhPT1yYT90aGlzLnV2cy5wdXNoKHJhWzBdLHJhWzFdLHJhWzJdKTooY29uc29sZS53YXJuKCJUSFJFRS5EaXJlY3RHZW9tZXRyeS5mcm9tR2VvbWV0cnkoKTogVW5kZWZpbmVkIHZlcnRleFV2ICIsSSksdGhpcy51dnMucHVzaChuZXcgZCxuZXcgZCxuZXcgZCkpKTshMD09PXcmJihyYT1uWzFdW0ldLHZvaWQgMCE9PXJhP3RoaXMudXZzMi5wdXNoKHJhWzBdLHJhWzFdLHJhWzJdKTooY29uc29sZS53YXJuKCJUSFJFRS5EaXJlY3RHZW9tZXRyeS5mcm9tR2VvbWV0cnkoKTogVW5kZWZpbmVkIHZlcnRleFV2MiAiLEkpLHRoaXMudXZzMi5wdXNoKG5ldyBkLG5ldyBkLG5ldyBkKSkpO2ZvcihyYT0wO3JhPEU7cmErKyl7dmFyIGlhPXpbcmFdLnZlcnRpY2VzO0hbcmFdLmRhdGEucHVzaChpYVtxYS5hXSxpYVtxYS5iXSxpYVtxYS5jXSl9Zm9yKHJhPTA7cmE8UTtyYSsrKWlhPU9bcmFdLnZlcnRleE5vcm1hbHNbSV0sUltyYV0uZGF0YS5wdXNoKGlhLmEsaWEuYiwKaWEuYyk7WiYmdGhpcy5za2luSW5kaWNlcy5wdXNoKFVbcWEuYV0sVVtxYS5iXSxVW3FhLmNdKTtmYSYmdGhpcy5za2luV2VpZ2h0cy5wdXNoKFdbcWEuYV0sV1txYS5iXSxXW3FhLmNdKX10aGlzLmNvbXB1dGVHcm91cHMoYik7dGhpcy52ZXJ0aWNlc05lZWRVcGRhdGU9Yi52ZXJ0aWNlc05lZWRVcGRhdGU7dGhpcy5ub3JtYWxzTmVlZFVwZGF0ZT1iLm5vcm1hbHNOZWVkVXBkYXRlO3RoaXMuY29sb3JzTmVlZFVwZGF0ZT1iLmNvbG9yc05lZWRVcGRhdGU7dGhpcy51dnNOZWVkVXBkYXRlPWIudXZzTmVlZFVwZGF0ZTt0aGlzLmdyb3Vwc05lZWRVcGRhdGU9Yi5ncm91cHNOZWVkVXBkYXRlO3JldHVybiB0aGlzfX0pO3ZhciBObj0xO3hhLnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoYy5wcm90b3R5cGUpLHtjb25zdHJ1Y3Rvcjp4YSxpc0J1ZmZlckdlb21ldHJ5OiEwLGdldEluZGV4OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5kZXh9LHNldEluZGV4OmZ1bmN0aW9uKGIpe3RoaXMuaW5kZXg9CkFycmF5LmlzQXJyYXkoYik/bmV3ICg2NTUzNTxDYShiKT9rYTpjYSkoYiwxKTpifSxhZGRBdHRyaWJ1dGU6ZnVuY3Rpb24oYixlLGgpe2lmKCEoZSYmZS5pc0J1ZmZlckF0dHJpYnV0ZXx8ZSYmZS5pc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlKSlyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJHZW9tZXRyeTogLmFkZEF0dHJpYnV0ZSgpIG5vdyBleHBlY3RzICggbmFtZSwgYXR0cmlidXRlICkuIiksdGhpcy5hZGRBdHRyaWJ1dGUoYixuZXcgVChlLGgpKTtpZigiaW5kZXgiPT09YilyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJHZW9tZXRyeS5hZGRBdHRyaWJ1dGU6IFVzZSAuc2V0SW5kZXgoKSBmb3IgaW5kZXggYXR0cmlidXRlLiIpLHRoaXMuc2V0SW5kZXgoZSksdGhpczt0aGlzLmF0dHJpYnV0ZXNbYl09ZTtyZXR1cm4gdGhpc30sZ2V0QXR0cmlidXRlOmZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmF0dHJpYnV0ZXNbYl19LHJlbW92ZUF0dHJpYnV0ZTpmdW5jdGlvbihiKXtkZWxldGUgdGhpcy5hdHRyaWJ1dGVzW2JdOwpyZXR1cm4gdGhpc30sYWRkR3JvdXA6ZnVuY3Rpb24oYixlLGgpe3RoaXMuZ3JvdXBzLnB1c2goe3N0YXJ0OmIsY291bnQ6ZSxtYXRlcmlhbEluZGV4OnZvaWQgMCE9PWg/aDowfSl9LGNsZWFyR3JvdXBzOmZ1bmN0aW9uKCl7dGhpcy5ncm91cHM9W119LHNldERyYXdSYW5nZTpmdW5jdGlvbihiLGUpe3RoaXMuZHJhd1JhbmdlLnN0YXJ0PWI7dGhpcy5kcmF3UmFuZ2UuY291bnQ9ZX0sYXBwbHlNYXRyaXg6ZnVuY3Rpb24oYil7dmFyIGU9dGhpcy5hdHRyaWJ1dGVzLnBvc2l0aW9uO3ZvaWQgMCE9PWUmJihiLmFwcGx5VG9CdWZmZXJBdHRyaWJ1dGUoZSksZS5uZWVkc1VwZGF0ZT0hMCk7dmFyIGg9dGhpcy5hdHRyaWJ1dGVzLm5vcm1hbDt2b2lkIDAhPT1oJiYoZT0obmV3IGwpLmdldE5vcm1hbE1hdHJpeChiKSxlLmFwcGx5VG9CdWZmZXJBdHRyaWJ1dGUoaCksaC5uZWVkc1VwZGF0ZT0hMCk7aD10aGlzLmF0dHJpYnV0ZXMudGFuZ2VudDt2b2lkIDAhPT1oJiYoZT0obmV3IGwpLmdldE5vcm1hbE1hdHJpeChiKSwKZS5hcHBseVRvQnVmZmVyQXR0cmlidXRlKGgpLGgubmVlZHNVcGRhdGU9ITApO251bGwhPT10aGlzLmJvdW5kaW5nQm94JiZ0aGlzLmNvbXB1dGVCb3VuZGluZ0JveCgpO251bGwhPT10aGlzLmJvdW5kaW5nU3BoZXJlJiZ0aGlzLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpO3JldHVybiB0aGlzfSxyb3RhdGVYOmZ1bmN0aW9uKCl7dmFyIGI9bmV3IEM7cmV0dXJuIGZ1bmN0aW9uKGUpe2IubWFrZVJvdGF0aW9uWChlKTt0aGlzLmFwcGx5TWF0cml4KGIpO3JldHVybiB0aGlzfX0oKSxyb3RhdGVZOmZ1bmN0aW9uKCl7dmFyIGI9bmV3IEM7cmV0dXJuIGZ1bmN0aW9uKGUpe2IubWFrZVJvdGF0aW9uWShlKTt0aGlzLmFwcGx5TWF0cml4KGIpO3JldHVybiB0aGlzfX0oKSxyb3RhdGVaOmZ1bmN0aW9uKCl7dmFyIGI9bmV3IEM7cmV0dXJuIGZ1bmN0aW9uKGUpe2IubWFrZVJvdGF0aW9uWihlKTt0aGlzLmFwcGx5TWF0cml4KGIpO3JldHVybiB0aGlzfX0oKSx0cmFuc2xhdGU6ZnVuY3Rpb24oKXt2YXIgYj0KbmV3IEM7cmV0dXJuIGZ1bmN0aW9uKGUsaCxuKXtiLm1ha2VUcmFuc2xhdGlvbihlLGgsbik7dGhpcy5hcHBseU1hdHJpeChiKTtyZXR1cm4gdGhpc319KCksc2NhbGU6ZnVuY3Rpb24oKXt2YXIgYj1uZXcgQztyZXR1cm4gZnVuY3Rpb24oZSxoLG4pe2IubWFrZVNjYWxlKGUsaCxuKTt0aGlzLmFwcGx5TWF0cml4KGIpO3JldHVybiB0aGlzfX0oKSxsb29rQXQ6ZnVuY3Rpb24oKXt2YXIgYj1uZXcgUztyZXR1cm4gZnVuY3Rpb24oZSl7Yi5sb29rQXQoZSk7Yi51cGRhdGVNYXRyaXgoKTt0aGlzLmFwcGx5TWF0cml4KGIubWF0cml4KX19KCksY2VudGVyOmZ1bmN0aW9uKCl7dmFyIGI9bmV3IGc7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5jb21wdXRlQm91bmRpbmdCb3goKTt0aGlzLmJvdW5kaW5nQm94LmdldENlbnRlcihiKS5uZWdhdGUoKTt0aGlzLnRyYW5zbGF0ZShiLngsYi55LGIueik7cmV0dXJuIHRoaXN9fSgpLHNldEZyb21PYmplY3Q6ZnVuY3Rpb24oYil7dmFyIGU9Yi5nZW9tZXRyeTsKaWYoYi5pc1BvaW50c3x8Yi5pc0xpbmUpe2I9bmV3IGJhKDMqZS52ZXJ0aWNlcy5sZW5ndGgsMyk7dmFyIGg9bmV3IGJhKDMqZS5jb2xvcnMubGVuZ3RoLDMpO3RoaXMuYWRkQXR0cmlidXRlKCJwb3NpdGlvbiIsYi5jb3B5VmVjdG9yM3NBcnJheShlLnZlcnRpY2VzKSk7dGhpcy5hZGRBdHRyaWJ1dGUoImNvbG9yIixoLmNvcHlDb2xvcnNBcnJheShlLmNvbG9ycykpO2UubGluZURpc3RhbmNlcyYmZS5saW5lRGlzdGFuY2VzLmxlbmd0aD09PWUudmVydGljZXMubGVuZ3RoJiYoYj1uZXcgYmEoZS5saW5lRGlzdGFuY2VzLmxlbmd0aCwxKSx0aGlzLmFkZEF0dHJpYnV0ZSgibGluZURpc3RhbmNlIixiLmNvcHlBcnJheShlLmxpbmVEaXN0YW5jZXMpKSk7bnVsbCE9PWUuYm91bmRpbmdTcGhlcmUmJih0aGlzLmJvdW5kaW5nU3BoZXJlPWUuYm91bmRpbmdTcGhlcmUuY2xvbmUoKSk7bnVsbCE9PWUuYm91bmRpbmdCb3gmJih0aGlzLmJvdW5kaW5nQm94PWUuYm91bmRpbmdCb3guY2xvbmUoKSl9ZWxzZSBiLmlzTWVzaCYmCmUmJmUuaXNHZW9tZXRyeSYmdGhpcy5mcm9tR2VvbWV0cnkoZSk7cmV0dXJuIHRoaXN9LHNldEZyb21Qb2ludHM6ZnVuY3Rpb24oYil7Zm9yKHZhciBlPVtdLGg9MCxuPWIubGVuZ3RoO2g8bjtoKyspe3ZhciB1PWJbaF07ZS5wdXNoKHUueCx1LnksdS56fHwwKX10aGlzLmFkZEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBiYShlLDMpKTtyZXR1cm4gdGhpc30sdXBkYXRlRnJvbU9iamVjdDpmdW5jdGlvbihiKXt2YXIgZT1iLmdlb21ldHJ5O2lmKGIuaXNNZXNoKXt2YXIgaD1lLl9fZGlyZWN0R2VvbWV0cnk7ITA9PT1lLmVsZW1lbnRzTmVlZFVwZGF0ZSYmKGg9dm9pZCAwLGUuZWxlbWVudHNOZWVkVXBkYXRlPSExKTtpZih2b2lkIDA9PT1oKXJldHVybiB0aGlzLmZyb21HZW9tZXRyeShlKTtoLnZlcnRpY2VzTmVlZFVwZGF0ZT1lLnZlcnRpY2VzTmVlZFVwZGF0ZTtoLm5vcm1hbHNOZWVkVXBkYXRlPWUubm9ybWFsc05lZWRVcGRhdGU7aC5jb2xvcnNOZWVkVXBkYXRlPWUuY29sb3JzTmVlZFVwZGF0ZTsKaC51dnNOZWVkVXBkYXRlPWUudXZzTmVlZFVwZGF0ZTtoLmdyb3Vwc05lZWRVcGRhdGU9ZS5ncm91cHNOZWVkVXBkYXRlO2UudmVydGljZXNOZWVkVXBkYXRlPSExO2Uubm9ybWFsc05lZWRVcGRhdGU9ITE7ZS5jb2xvcnNOZWVkVXBkYXRlPSExO2UudXZzTmVlZFVwZGF0ZT0hMTtlLmdyb3Vwc05lZWRVcGRhdGU9ITE7ZT1ofSEwPT09ZS52ZXJ0aWNlc05lZWRVcGRhdGUmJihoPXRoaXMuYXR0cmlidXRlcy5wb3NpdGlvbix2b2lkIDAhPT1oJiYoaC5jb3B5VmVjdG9yM3NBcnJheShlLnZlcnRpY2VzKSxoLm5lZWRzVXBkYXRlPSEwKSxlLnZlcnRpY2VzTmVlZFVwZGF0ZT0hMSk7ITA9PT1lLm5vcm1hbHNOZWVkVXBkYXRlJiYoaD10aGlzLmF0dHJpYnV0ZXMubm9ybWFsLHZvaWQgMCE9PWgmJihoLmNvcHlWZWN0b3Izc0FycmF5KGUubm9ybWFscyksaC5uZWVkc1VwZGF0ZT0hMCksZS5ub3JtYWxzTmVlZFVwZGF0ZT0hMSk7ITA9PT1lLmNvbG9yc05lZWRVcGRhdGUmJihoPXRoaXMuYXR0cmlidXRlcy5jb2xvciwKdm9pZCAwIT09aCYmKGguY29weUNvbG9yc0FycmF5KGUuY29sb3JzKSxoLm5lZWRzVXBkYXRlPSEwKSxlLmNvbG9yc05lZWRVcGRhdGU9ITEpO2UudXZzTmVlZFVwZGF0ZSYmKGg9dGhpcy5hdHRyaWJ1dGVzLnV2LHZvaWQgMCE9PWgmJihoLmNvcHlWZWN0b3Iyc0FycmF5KGUudXZzKSxoLm5lZWRzVXBkYXRlPSEwKSxlLnV2c05lZWRVcGRhdGU9ITEpO2UubGluZURpc3RhbmNlc05lZWRVcGRhdGUmJihoPXRoaXMuYXR0cmlidXRlcy5saW5lRGlzdGFuY2Usdm9pZCAwIT09aCYmKGguY29weUFycmF5KGUubGluZURpc3RhbmNlcyksaC5uZWVkc1VwZGF0ZT0hMCksZS5saW5lRGlzdGFuY2VzTmVlZFVwZGF0ZT0hMSk7ZS5ncm91cHNOZWVkVXBkYXRlJiYoZS5jb21wdXRlR3JvdXBzKGIuZ2VvbWV0cnkpLHRoaXMuZ3JvdXBzPWUuZ3JvdXBzLGUuZ3JvdXBzTmVlZFVwZGF0ZT0hMSk7cmV0dXJuIHRoaXN9LGZyb21HZW9tZXRyeTpmdW5jdGlvbihiKXtiLl9fZGlyZWN0R2VvbWV0cnk9KG5ldyB3YSkuZnJvbUdlb21ldHJ5KGIpOwpyZXR1cm4gdGhpcy5mcm9tRGlyZWN0R2VvbWV0cnkoYi5fX2RpcmVjdEdlb21ldHJ5KX0sZnJvbURpcmVjdEdlb21ldHJ5OmZ1bmN0aW9uKGIpe3RoaXMuYWRkQXR0cmlidXRlKCJwb3NpdGlvbiIsKG5ldyBUKG5ldyBGbG9hdDMyQXJyYXkoMypiLnZlcnRpY2VzLmxlbmd0aCksMykpLmNvcHlWZWN0b3Izc0FycmF5KGIudmVydGljZXMpKTswPGIubm9ybWFscy5sZW5ndGgmJnRoaXMuYWRkQXR0cmlidXRlKCJub3JtYWwiLChuZXcgVChuZXcgRmxvYXQzMkFycmF5KDMqYi5ub3JtYWxzLmxlbmd0aCksMykpLmNvcHlWZWN0b3Izc0FycmF5KGIubm9ybWFscykpOzA8Yi5jb2xvcnMubGVuZ3RoJiZ0aGlzLmFkZEF0dHJpYnV0ZSgiY29sb3IiLChuZXcgVChuZXcgRmxvYXQzMkFycmF5KDMqYi5jb2xvcnMubGVuZ3RoKSwzKSkuY29weUNvbG9yc0FycmF5KGIuY29sb3JzKSk7MDxiLnV2cy5sZW5ndGgmJnRoaXMuYWRkQXR0cmlidXRlKCJ1diIsKG5ldyBUKG5ldyBGbG9hdDMyQXJyYXkoMioKYi51dnMubGVuZ3RoKSwyKSkuY29weVZlY3RvcjJzQXJyYXkoYi51dnMpKTswPGIudXZzMi5sZW5ndGgmJnRoaXMuYWRkQXR0cmlidXRlKCJ1djIiLChuZXcgVChuZXcgRmxvYXQzMkFycmF5KDIqYi51dnMyLmxlbmd0aCksMikpLmNvcHlWZWN0b3Iyc0FycmF5KGIudXZzMikpO3RoaXMuZ3JvdXBzPWIuZ3JvdXBzO2Zvcih2YXIgZSBpbiBiLm1vcnBoVGFyZ2V0cyl7Zm9yKHZhciBoPVtdLG49Yi5tb3JwaFRhcmdldHNbZV0sdT0wLHc9bi5sZW5ndGg7dTx3O3UrKyl7dmFyIHo9blt1XSxFPW5ldyBiYSgzKnouZGF0YS5sZW5ndGgsMyk7RS5uYW1lPXoubmFtZTtoLnB1c2goRS5jb3B5VmVjdG9yM3NBcnJheSh6LmRhdGEpKX10aGlzLm1vcnBoQXR0cmlidXRlc1tlXT1ofTA8Yi5za2luSW5kaWNlcy5sZW5ndGgmJihlPW5ldyBiYSg0KmIuc2tpbkluZGljZXMubGVuZ3RoLDQpLHRoaXMuYWRkQXR0cmlidXRlKCJza2luSW5kZXgiLGUuY29weVZlY3RvcjRzQXJyYXkoYi5za2luSW5kaWNlcykpKTsKMDxiLnNraW5XZWlnaHRzLmxlbmd0aCYmKGU9bmV3IGJhKDQqYi5za2luV2VpZ2h0cy5sZW5ndGgsNCksdGhpcy5hZGRBdHRyaWJ1dGUoInNraW5XZWlnaHQiLGUuY29weVZlY3RvcjRzQXJyYXkoYi5za2luV2VpZ2h0cykpKTtudWxsIT09Yi5ib3VuZGluZ1NwaGVyZSYmKHRoaXMuYm91bmRpbmdTcGhlcmU9Yi5ib3VuZGluZ1NwaGVyZS5jbG9uZSgpKTtudWxsIT09Yi5ib3VuZGluZ0JveCYmKHRoaXMuYm91bmRpbmdCb3g9Yi5ib3VuZGluZ0JveC5jbG9uZSgpKTtyZXR1cm4gdGhpc30sY29tcHV0ZUJvdW5kaW5nQm94OmZ1bmN0aW9uKCl7dmFyIGI9bmV3IHY7cmV0dXJuIGZ1bmN0aW9uKCl7bnVsbD09PXRoaXMuYm91bmRpbmdCb3gmJih0aGlzLmJvdW5kaW5nQm94PW5ldyB2KTt2YXIgZT10aGlzLmF0dHJpYnV0ZXMucG9zaXRpb24saD10aGlzLm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbjtpZih2b2lkIDAhPT1lKXtpZih0aGlzLmJvdW5kaW5nQm94LnNldEZyb21CdWZmZXJBdHRyaWJ1dGUoZSksCmgpe2U9MDtmb3IodmFyIG49aC5sZW5ndGg7ZTxuO2UrKyliLnNldEZyb21CdWZmZXJBdHRyaWJ1dGUoaFtlXSksdGhpcy5ib3VuZGluZ0JveC5leHBhbmRCeVBvaW50KGIubWluKSx0aGlzLmJvdW5kaW5nQm94LmV4cGFuZEJ5UG9pbnQoYi5tYXgpfX1lbHNlIHRoaXMuYm91bmRpbmdCb3gubWFrZUVtcHR5KCk7KGlzTmFOKHRoaXMuYm91bmRpbmdCb3gubWluLngpfHxpc05hTih0aGlzLmJvdW5kaW5nQm94Lm1pbi55KXx8aXNOYU4odGhpcy5ib3VuZGluZ0JveC5taW4ueikpJiZjb25zb2xlLmVycm9yKCdUSFJFRS5CdWZmZXJHZW9tZXRyeS5jb21wdXRlQm91bmRpbmdCb3g6IENvbXB1dGVkIG1pbi9tYXggaGF2ZSBOYU4gdmFsdWVzLiBUaGUgInBvc2l0aW9uIiBhdHRyaWJ1dGUgaXMgbGlrZWx5IHRvIGhhdmUgTmFOIHZhbHVlcy4nLHRoaXMpfX0oKSxjb21wdXRlQm91bmRpbmdTcGhlcmU6ZnVuY3Rpb24oKXt2YXIgYj1uZXcgdixlPW5ldyB2LGg9bmV3IGc7cmV0dXJuIGZ1bmN0aW9uKCl7bnVsbD09PQp0aGlzLmJvdW5kaW5nU3BoZXJlJiYodGhpcy5ib3VuZGluZ1NwaGVyZT1uZXcgQSk7dmFyIG49dGhpcy5hdHRyaWJ1dGVzLnBvc2l0aW9uLHU9dGhpcy5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb247aWYobil7dmFyIHc9dGhpcy5ib3VuZGluZ1NwaGVyZS5jZW50ZXI7Yi5zZXRGcm9tQnVmZmVyQXR0cmlidXRlKG4pO2lmKHUpZm9yKHZhciB6PTAsRT11Lmxlbmd0aDt6PEU7eisrKXt2YXIgSD11W3pdO2Uuc2V0RnJvbUJ1ZmZlckF0dHJpYnV0ZShIKTtiLmV4cGFuZEJ5UG9pbnQoZS5taW4pO2IuZXhwYW5kQnlQb2ludChlLm1heCl9Yi5nZXRDZW50ZXIodyk7dmFyIEk9MDt6PTA7Zm9yKEU9bi5jb3VudDt6PEU7eisrKWguZnJvbUJ1ZmZlckF0dHJpYnV0ZShuLHopLEk9TWF0aC5tYXgoSSx3LmRpc3RhbmNlVG9TcXVhcmVkKGgpKTtpZih1KWZvcih6PTAsRT11Lmxlbmd0aDt6PEU7eisrKXtIPXVbel07bj0wO2Zvcih2YXIgTz1ILmNvdW50O248TztuKyspaC5mcm9tQnVmZmVyQXR0cmlidXRlKEgsCm4pLEk9TWF0aC5tYXgoSSx3LmRpc3RhbmNlVG9TcXVhcmVkKGgpKX10aGlzLmJvdW5kaW5nU3BoZXJlLnJhZGl1cz1NYXRoLnNxcnQoSSk7aXNOYU4odGhpcy5ib3VuZGluZ1NwaGVyZS5yYWRpdXMpJiZjb25zb2xlLmVycm9yKCdUSFJFRS5CdWZmZXJHZW9tZXRyeS5jb21wdXRlQm91bmRpbmdTcGhlcmUoKTogQ29tcHV0ZWQgcmFkaXVzIGlzIE5hTi4gVGhlICJwb3NpdGlvbiIgYXR0cmlidXRlIGlzIGxpa2VseSB0byBoYXZlIE5hTiB2YWx1ZXMuJyx0aGlzKX19fSgpLGNvbXB1dGVGYWNlTm9ybWFsczpmdW5jdGlvbigpe30sY29tcHV0ZVZlcnRleE5vcm1hbHM6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLmluZGV4LGU9dGhpcy5hdHRyaWJ1dGVzO2lmKGUucG9zaXRpb24pe3ZhciBoPWUucG9zaXRpb24uYXJyYXk7aWYodm9pZCAwPT09ZS5ub3JtYWwpdGhpcy5hZGRBdHRyaWJ1dGUoIm5vcm1hbCIsbmV3IFQobmV3IEZsb2F0MzJBcnJheShoLmxlbmd0aCksMykpO2Vsc2UgZm9yKHZhciBuPQplLm5vcm1hbC5hcnJheSx1PTAsdz1uLmxlbmd0aDt1PHc7dSsrKW5bdV09MDtuPWUubm9ybWFsLmFycmF5O3ZhciB6PW5ldyBnLEU9bmV3IGcsSD1uZXcgZyxJPW5ldyBnLE89bmV3IGc7aWYoYil7dmFyIFE9Yi5hcnJheTt1PTA7Zm9yKHc9Yi5jb3VudDt1PHc7dSs9Myl7Yj0zKlFbdSswXTt2YXIgUj0zKlFbdSsxXTt2YXIgVT0zKlFbdSsyXTt6LmZyb21BcnJheShoLGIpO0UuZnJvbUFycmF5KGgsUik7SC5mcm9tQXJyYXkoaCxVKTtJLnN1YlZlY3RvcnMoSCxFKTtPLnN1YlZlY3RvcnMoeixFKTtJLmNyb3NzKE8pO25bYl0rPUkueDtuW2IrMV0rPUkueTtuW2IrMl0rPUkuejtuW1JdKz1JLng7bltSKzFdKz1JLnk7bltSKzJdKz1JLno7bltVXSs9SS54O25bVSsxXSs9SS55O25bVSsyXSs9SS56fX1lbHNlIGZvcih1PTAsdz1oLmxlbmd0aDt1PHc7dSs9OSl6LmZyb21BcnJheShoLHUpLEUuZnJvbUFycmF5KGgsdSszKSxILmZyb21BcnJheShoLHUrNiksSS5zdWJWZWN0b3JzKEgsRSksCk8uc3ViVmVjdG9ycyh6LEUpLEkuY3Jvc3MoTyksblt1XT1JLngsblt1KzFdPUkueSxuW3UrMl09SS56LG5bdSszXT1JLngsblt1KzRdPUkueSxuW3UrNV09SS56LG5bdSs2XT1JLngsblt1KzddPUkueSxuW3UrOF09SS56O3RoaXMubm9ybWFsaXplTm9ybWFscygpO2Uubm9ybWFsLm5lZWRzVXBkYXRlPSEwfX0sbWVyZ2U6ZnVuY3Rpb24oYixlKXtpZihiJiZiLmlzQnVmZmVyR2VvbWV0cnkpe3ZvaWQgMD09PWUmJihlPTAsY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJHZW9tZXRyeS5tZXJnZSgpOiBPdmVyd3JpdGluZyBvcmlnaW5hbCBnZW9tZXRyeSwgc3RhcnRpbmcgYXQgb2Zmc2V0XHgzZDAuIFVzZSBCdWZmZXJHZW9tZXRyeVV0aWxzLm1lcmdlQnVmZmVyR2VvbWV0cmllcygpIGZvciBsb3NzbGVzcyBtZXJnZS4iKSk7dmFyIGg9dGhpcy5hdHRyaWJ1dGVzLG47Zm9yKG4gaW4gaClpZih2b2lkIDAhPT1iLmF0dHJpYnV0ZXNbbl0pe3ZhciB1PWhbbl0uYXJyYXksdz1iLmF0dHJpYnV0ZXNbbl0sCno9dy5hcnJheSxFPXcuaXRlbVNpemUqZTt3PU1hdGgubWluKHoubGVuZ3RoLHUubGVuZ3RoLUUpO2Zvcih2YXIgSD0wO0g8dztIKyssRSsrKXVbRV09eltIXX1yZXR1cm4gdGhpc31jb25zb2xlLmVycm9yKCJUSFJFRS5CdWZmZXJHZW9tZXRyeS5tZXJnZSgpOiBnZW9tZXRyeSBub3QgYW4gaW5zdGFuY2Ugb2YgVEhSRUUuQnVmZmVyR2VvbWV0cnkuIixiKX0sbm9ybWFsaXplTm9ybWFsczpmdW5jdGlvbigpe3ZhciBiPW5ldyBnO3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLmF0dHJpYnV0ZXMubm9ybWFsLGg9MCxuPWUuY291bnQ7aDxuO2grKyliLng9ZS5nZXRYKGgpLGIueT1lLmdldFkoaCksYi56PWUuZ2V0WihoKSxiLm5vcm1hbGl6ZSgpLGUuc2V0WFlaKGgsYi54LGIueSxiLnopfX0oKSx0b05vbkluZGV4ZWQ6ZnVuY3Rpb24oKXtmdW5jdGlvbiBiKE8sUSl7dmFyIFI9Ty5hcnJheTtPPU8uaXRlbVNpemU7Zm9yKHZhciBVPW5ldyBSLmNvbnN0cnVjdG9yKFEubGVuZ3RoKgpPKSxXLFo9MCxmYT0wLHFhPVEubGVuZ3RoO2ZhPHFhO2ZhKyspe1c9UVtmYV0qTztmb3IodmFyIHJhPTA7cmE8TztyYSsrKVVbWisrXT1SW1crK119cmV0dXJuIG5ldyBUKFUsTyl9aWYobnVsbD09PXRoaXMuaW5kZXgpcmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnkudG9Ob25JbmRleGVkKCk6IEdlb21ldHJ5IGlzIGFscmVhZHkgbm9uLWluZGV4ZWQuIiksdGhpczt2YXIgZT1uZXcgeGEsaD10aGlzLmluZGV4LmFycmF5LG49dGhpcy5hdHRyaWJ1dGVzLHU7Zm9yKHUgaW4gbil7dmFyIHc9blt1XTt3PWIodyxoKTtlLmFkZEF0dHJpYnV0ZSh1LHcpfXZhciB6PXRoaXMubW9ycGhBdHRyaWJ1dGVzO2Zvcih1IGluIHope3ZhciBFPVtdLEg9elt1XTtuPTA7Zm9yKHZhciBJPUgubGVuZ3RoO248STtuKyspdz1IW25dLHc9Yih3LGgpLEUucHVzaCh3KTtlLm1vcnBoQXR0cmlidXRlc1t1XT1FfWg9dGhpcy5ncm91cHM7bj0wO2Zvcih1PWgubGVuZ3RoO248dTtuKyspdz0KaFtuXSxlLmFkZEdyb3VwKHcuc3RhcnQsdy5jb3VudCx3Lm1hdGVyaWFsSW5kZXgpO3JldHVybiBlfSx0b0pTT046ZnVuY3Rpb24oKXt2YXIgYj17bWV0YWRhdGE6e3ZlcnNpb246NC41LHR5cGU6IkJ1ZmZlckdlb21ldHJ5IixnZW5lcmF0b3I6IkJ1ZmZlckdlb21ldHJ5LnRvSlNPTiJ9fTtiLnV1aWQ9dGhpcy51dWlkO2IudHlwZT10aGlzLnR5cGU7IiIhPT10aGlzLm5hbWUmJihiLm5hbWU9dGhpcy5uYW1lKTswPE9iamVjdC5rZXlzKHRoaXMudXNlckRhdGEpLmxlbmd0aCYmKGIudXNlckRhdGE9dGhpcy51c2VyRGF0YSk7aWYodm9pZCAwIT09dGhpcy5wYXJhbWV0ZXJzKXt2YXIgZT10aGlzLnBhcmFtZXRlcnM7Zm9yKEkgaW4gZSl2b2lkIDAhPT1lW0ldJiYoYltJXT1lW0ldKTtyZXR1cm4gYn1iLmRhdGE9e2F0dHJpYnV0ZXM6e319O2U9dGhpcy5pbmRleDtudWxsIT09ZSYmKGIuZGF0YS5pbmRleD17dHlwZTplLmFycmF5LmNvbnN0cnVjdG9yLm5hbWUsYXJyYXk6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZS5hcnJheSl9KTsKdmFyIGg9dGhpcy5hdHRyaWJ1dGVzO2ZvcihJIGluIGgpe2U9aFtJXTt2YXIgbj17aXRlbVNpemU6ZS5pdGVtU2l6ZSx0eXBlOmUuYXJyYXkuY29uc3RydWN0b3IubmFtZSxhcnJheTpBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChlLmFycmF5KSxub3JtYWxpemVkOmUubm9ybWFsaXplZH07IiIhPT1lLm5hbWUmJihuLm5hbWU9ZS5uYW1lKTtiLmRhdGEuYXR0cmlidXRlc1tJXT1ufWg9e307dmFyIHU9ITE7Zm9yKEkgaW4gdGhpcy5tb3JwaEF0dHJpYnV0ZXMpe2Zvcih2YXIgdz10aGlzLm1vcnBoQXR0cmlidXRlc1tJXSx6PVtdLEU9MCxIPXcubGVuZ3RoO0U8SDtFKyspZT13W0VdLG49e2l0ZW1TaXplOmUuaXRlbVNpemUsdHlwZTplLmFycmF5LmNvbnN0cnVjdG9yLm5hbWUsYXJyYXk6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZS5hcnJheSksbm9ybWFsaXplZDplLm5vcm1hbGl6ZWR9LCIiIT09ZS5uYW1lJiYobi5uYW1lPWUubmFtZSksei5wdXNoKG4pOzA8ei5sZW5ndGgmJgooaFtJXT16LHU9ITApfXUmJihiLmRhdGEubW9ycGhBdHRyaWJ1dGVzPWgpO3ZhciBJPXRoaXMuZ3JvdXBzOzA8SS5sZW5ndGgmJihiLmRhdGEuZ3JvdXBzPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoSSkpKTtJPXRoaXMuYm91bmRpbmdTcGhlcmU7bnVsbCE9PUkmJihiLmRhdGEuYm91bmRpbmdTcGhlcmU9e2NlbnRlcjpJLmNlbnRlci50b0FycmF5KCkscmFkaXVzOkkucmFkaXVzfSk7cmV0dXJuIGJ9LGNsb25lOmZ1bmN0aW9uKCl7cmV0dXJuKG5ldyB4YSkuY29weSh0aGlzKX0sY29weTpmdW5jdGlvbihiKXt2YXIgZTt0aGlzLmluZGV4PW51bGw7dGhpcy5hdHRyaWJ1dGVzPXt9O3RoaXMubW9ycGhBdHRyaWJ1dGVzPXt9O3RoaXMuZ3JvdXBzPVtdO3RoaXMuYm91bmRpbmdTcGhlcmU9dGhpcy5ib3VuZGluZ0JveD1udWxsO3RoaXMubmFtZT1iLm5hbWU7dmFyIGg9Yi5pbmRleDtudWxsIT09aCYmdGhpcy5zZXRJbmRleChoLmNsb25lKCkpO2g9Yi5hdHRyaWJ1dGVzO2Zvcih6IGluIGgpdGhpcy5hZGRBdHRyaWJ1dGUoeiwKaFt6XS5jbG9uZSgpKTt2YXIgbj1iLm1vcnBoQXR0cmlidXRlcztmb3IoeiBpbiBuKXt2YXIgdT1bXSx3PW5bel07aD0wO2ZvcihlPXcubGVuZ3RoO2g8ZTtoKyspdS5wdXNoKHdbaF0uY2xvbmUoKSk7dGhpcy5tb3JwaEF0dHJpYnV0ZXNbel09dX12YXIgej1iLmdyb3VwcztoPTA7Zm9yKGU9ei5sZW5ndGg7aDxlO2grKyluPXpbaF0sdGhpcy5hZGRHcm91cChuLnN0YXJ0LG4uY291bnQsbi5tYXRlcmlhbEluZGV4KTt6PWIuYm91bmRpbmdCb3g7bnVsbCE9PXomJih0aGlzLmJvdW5kaW5nQm94PXouY2xvbmUoKSk7ej1iLmJvdW5kaW5nU3BoZXJlO251bGwhPT16JiYodGhpcy5ib3VuZGluZ1NwaGVyZT16LmNsb25lKCkpO3RoaXMuZHJhd1JhbmdlLnN0YXJ0PWIuZHJhd1JhbmdlLnN0YXJ0O3RoaXMuZHJhd1JhbmdlLmNvdW50PWIuZHJhd1JhbmdlLmNvdW50O3RoaXMudXNlckRhdGE9Yi51c2VyRGF0YTtyZXR1cm4gdGhpc30sZGlzcG9zZTpmdW5jdGlvbigpe3RoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZToiZGlzcG9zZSJ9KX19KTsKemEucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoTi5wcm90b3R5cGUpO3phLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj16YTtGYS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh4YS5wcm90b3R5cGUpO0ZhLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1GYTtTYS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShOLnByb3RvdHlwZSk7U2EucHJvdG90eXBlLmNvbnN0cnVjdG9yPVNhO0VhLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHhhLnByb3RvdHlwZSk7RWEucHJvdG90eXBlLmNvbnN0cnVjdG9yPUVhO3ZhciBPbj0wO0dhLnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoYy5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpHYSxpc01hdGVyaWFsOiEwLG9uQmVmb3JlQ29tcGlsZTpmdW5jdGlvbigpe30sc2V0VmFsdWVzOmZ1bmN0aW9uKGIpe2lmKHZvaWQgMCE9PWIpZm9yKHZhciBlIGluIGIpe3ZhciBoPWJbZV07aWYodm9pZCAwPT09aCljb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsOiAnIisKZSsiJyBwYXJhbWV0ZXIgaXMgdW5kZWZpbmVkLiIpO2Vsc2UgaWYoInNoYWRpbmciPT09ZSljb25zb2xlLndhcm4oIlRIUkVFLiIrdGhpcy50eXBlKyI6IC5zaGFkaW5nIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSB0aGUgYm9vbGVhbiAuZmxhdFNoYWRpbmcgaW5zdGVhZC4iKSx0aGlzLmZsYXRTaGFkaW5nPTE9PT1oPyEwOiExO2Vsc2V7dmFyIG49dGhpc1tlXTt2b2lkIDA9PT1uP2NvbnNvbGUud2FybigiVEhSRUUuIit0aGlzLnR5cGUrIjogJyIrZSsiJyBpcyBub3QgYSBwcm9wZXJ0eSBvZiB0aGlzIG1hdGVyaWFsLiIpOm4mJm4uaXNDb2xvcj9uLnNldChoKTpuJiZuLmlzVmVjdG9yMyYmaCYmaC5pc1ZlY3RvcjM/bi5jb3B5KGgpOnRoaXNbZV09aH19fSx0b0pTT046ZnVuY3Rpb24oYil7ZnVuY3Rpb24gZSh1KXt2YXIgdz1bXSx6O2Zvcih6IGluIHUpe3ZhciBFPXVbel07ZGVsZXRlIEUubWV0YWRhdGE7dy5wdXNoKEUpfXJldHVybiB3fXZhciBoPXZvaWQgMD09PWJ8fCJzdHJpbmciPT09CnR5cGVvZiBiO2gmJihiPXt0ZXh0dXJlczp7fSxpbWFnZXM6e319KTt2YXIgbj17bWV0YWRhdGE6e3ZlcnNpb246NC41LHR5cGU6Ik1hdGVyaWFsIixnZW5lcmF0b3I6Ik1hdGVyaWFsLnRvSlNPTiJ9fTtuLnV1aWQ9dGhpcy51dWlkO24udHlwZT10aGlzLnR5cGU7IiIhPT10aGlzLm5hbWUmJihuLm5hbWU9dGhpcy5uYW1lKTt0aGlzLmNvbG9yJiZ0aGlzLmNvbG9yLmlzQ29sb3ImJihuLmNvbG9yPXRoaXMuY29sb3IuZ2V0SGV4KCkpO3ZvaWQgMCE9PXRoaXMucm91Z2huZXNzJiYobi5yb3VnaG5lc3M9dGhpcy5yb3VnaG5lc3MpO3ZvaWQgMCE9PXRoaXMubWV0YWxuZXNzJiYobi5tZXRhbG5lc3M9dGhpcy5tZXRhbG5lc3MpO3RoaXMuZW1pc3NpdmUmJnRoaXMuZW1pc3NpdmUuaXNDb2xvciYmKG4uZW1pc3NpdmU9dGhpcy5lbWlzc2l2ZS5nZXRIZXgoKSk7MSE9PXRoaXMuZW1pc3NpdmVJbnRlbnNpdHkmJihuLmVtaXNzaXZlSW50ZW5zaXR5PXRoaXMuZW1pc3NpdmVJbnRlbnNpdHkpOwp0aGlzLnNwZWN1bGFyJiZ0aGlzLnNwZWN1bGFyLmlzQ29sb3ImJihuLnNwZWN1bGFyPXRoaXMuc3BlY3VsYXIuZ2V0SGV4KCkpO3ZvaWQgMCE9PXRoaXMuc2hpbmluZXNzJiYobi5zaGluaW5lc3M9dGhpcy5zaGluaW5lc3MpO3ZvaWQgMCE9PXRoaXMuY2xlYXJDb2F0JiYobi5jbGVhckNvYXQ9dGhpcy5jbGVhckNvYXQpO3ZvaWQgMCE9PXRoaXMuY2xlYXJDb2F0Um91Z2huZXNzJiYobi5jbGVhckNvYXRSb3VnaG5lc3M9dGhpcy5jbGVhckNvYXRSb3VnaG5lc3MpO3RoaXMubWFwJiZ0aGlzLm1hcC5pc1RleHR1cmUmJihuLm1hcD10aGlzLm1hcC50b0pTT04oYikudXVpZCk7dGhpcy5tYXRjYXAmJnRoaXMubWF0Y2FwLmlzVGV4dHVyZSYmKG4ubWF0Y2FwPXRoaXMubWF0Y2FwLnRvSlNPTihiKS51dWlkKTt0aGlzLmFscGhhTWFwJiZ0aGlzLmFscGhhTWFwLmlzVGV4dHVyZSYmKG4uYWxwaGFNYXA9dGhpcy5hbHBoYU1hcC50b0pTT04oYikudXVpZCk7dGhpcy5saWdodE1hcCYmdGhpcy5saWdodE1hcC5pc1RleHR1cmUmJgoobi5saWdodE1hcD10aGlzLmxpZ2h0TWFwLnRvSlNPTihiKS51dWlkKTt0aGlzLmFvTWFwJiZ0aGlzLmFvTWFwLmlzVGV4dHVyZSYmKG4uYW9NYXA9dGhpcy5hb01hcC50b0pTT04oYikudXVpZCxuLmFvTWFwSW50ZW5zaXR5PXRoaXMuYW9NYXBJbnRlbnNpdHkpO3RoaXMuYnVtcE1hcCYmdGhpcy5idW1wTWFwLmlzVGV4dHVyZSYmKG4uYnVtcE1hcD10aGlzLmJ1bXBNYXAudG9KU09OKGIpLnV1aWQsbi5idW1wU2NhbGU9dGhpcy5idW1wU2NhbGUpO3RoaXMubm9ybWFsTWFwJiZ0aGlzLm5vcm1hbE1hcC5pc1RleHR1cmUmJihuLm5vcm1hbE1hcD10aGlzLm5vcm1hbE1hcC50b0pTT04oYikudXVpZCxuLm5vcm1hbE1hcFR5cGU9dGhpcy5ub3JtYWxNYXBUeXBlLG4ubm9ybWFsU2NhbGU9dGhpcy5ub3JtYWxTY2FsZS50b0FycmF5KCkpO3RoaXMuZGlzcGxhY2VtZW50TWFwJiZ0aGlzLmRpc3BsYWNlbWVudE1hcC5pc1RleHR1cmUmJihuLmRpc3BsYWNlbWVudE1hcD10aGlzLmRpc3BsYWNlbWVudE1hcC50b0pTT04oYikudXVpZCwKbi5kaXNwbGFjZW1lbnRTY2FsZT10aGlzLmRpc3BsYWNlbWVudFNjYWxlLG4uZGlzcGxhY2VtZW50Qmlhcz10aGlzLmRpc3BsYWNlbWVudEJpYXMpO3RoaXMucm91Z2huZXNzTWFwJiZ0aGlzLnJvdWdobmVzc01hcC5pc1RleHR1cmUmJihuLnJvdWdobmVzc01hcD10aGlzLnJvdWdobmVzc01hcC50b0pTT04oYikudXVpZCk7dGhpcy5tZXRhbG5lc3NNYXAmJnRoaXMubWV0YWxuZXNzTWFwLmlzVGV4dHVyZSYmKG4ubWV0YWxuZXNzTWFwPXRoaXMubWV0YWxuZXNzTWFwLnRvSlNPTihiKS51dWlkKTt0aGlzLmVtaXNzaXZlTWFwJiZ0aGlzLmVtaXNzaXZlTWFwLmlzVGV4dHVyZSYmKG4uZW1pc3NpdmVNYXA9dGhpcy5lbWlzc2l2ZU1hcC50b0pTT04oYikudXVpZCk7dGhpcy5zcGVjdWxhck1hcCYmdGhpcy5zcGVjdWxhck1hcC5pc1RleHR1cmUmJihuLnNwZWN1bGFyTWFwPXRoaXMuc3BlY3VsYXJNYXAudG9KU09OKGIpLnV1aWQpO3RoaXMuZW52TWFwJiZ0aGlzLmVudk1hcC5pc1RleHR1cmUmJgoobi5lbnZNYXA9dGhpcy5lbnZNYXAudG9KU09OKGIpLnV1aWQsbi5yZWZsZWN0aXZpdHk9dGhpcy5yZWZsZWN0aXZpdHksdm9pZCAwIT09dGhpcy5jb21iaW5lJiYobi5jb21iaW5lPXRoaXMuY29tYmluZSksdm9pZCAwIT09dGhpcy5lbnZNYXBJbnRlbnNpdHkmJihuLmVudk1hcEludGVuc2l0eT10aGlzLmVudk1hcEludGVuc2l0eSkpO3RoaXMuZ3JhZGllbnRNYXAmJnRoaXMuZ3JhZGllbnRNYXAuaXNUZXh0dXJlJiYobi5ncmFkaWVudE1hcD10aGlzLmdyYWRpZW50TWFwLnRvSlNPTihiKS51dWlkKTt2b2lkIDAhPT10aGlzLnNpemUmJihuLnNpemU9dGhpcy5zaXplKTt2b2lkIDAhPT10aGlzLnNpemVBdHRlbnVhdGlvbiYmKG4uc2l6ZUF0dGVudWF0aW9uPXRoaXMuc2l6ZUF0dGVudWF0aW9uKTsxIT09dGhpcy5ibGVuZGluZyYmKG4uYmxlbmRpbmc9dGhpcy5ibGVuZGluZyk7ITA9PT10aGlzLmZsYXRTaGFkaW5nJiYobi5mbGF0U2hhZGluZz10aGlzLmZsYXRTaGFkaW5nKTswIT09CnRoaXMuc2lkZSYmKG4uc2lkZT10aGlzLnNpZGUpOzAhPT10aGlzLnZlcnRleENvbG9ycyYmKG4udmVydGV4Q29sb3JzPXRoaXMudmVydGV4Q29sb3JzKTsxPnRoaXMub3BhY2l0eSYmKG4ub3BhY2l0eT10aGlzLm9wYWNpdHkpOyEwPT09dGhpcy50cmFuc3BhcmVudCYmKG4udHJhbnNwYXJlbnQ9dGhpcy50cmFuc3BhcmVudCk7bi5kZXB0aEZ1bmM9dGhpcy5kZXB0aEZ1bmM7bi5kZXB0aFRlc3Q9dGhpcy5kZXB0aFRlc3Q7bi5kZXB0aFdyaXRlPXRoaXMuZGVwdGhXcml0ZTswIT09dGhpcy5yb3RhdGlvbiYmKG4ucm90YXRpb249dGhpcy5yb3RhdGlvbik7ITA9PT10aGlzLnBvbHlnb25PZmZzZXQmJihuLnBvbHlnb25PZmZzZXQ9ITApOzAhPT10aGlzLnBvbHlnb25PZmZzZXRGYWN0b3ImJihuLnBvbHlnb25PZmZzZXRGYWN0b3I9dGhpcy5wb2x5Z29uT2Zmc2V0RmFjdG9yKTswIT09dGhpcy5wb2x5Z29uT2Zmc2V0VW5pdHMmJihuLnBvbHlnb25PZmZzZXRVbml0cz10aGlzLnBvbHlnb25PZmZzZXRVbml0cyk7CjEhPT10aGlzLmxpbmV3aWR0aCYmKG4ubGluZXdpZHRoPXRoaXMubGluZXdpZHRoKTt2b2lkIDAhPT10aGlzLmRhc2hTaXplJiYobi5kYXNoU2l6ZT10aGlzLmRhc2hTaXplKTt2b2lkIDAhPT10aGlzLmdhcFNpemUmJihuLmdhcFNpemU9dGhpcy5nYXBTaXplKTt2b2lkIDAhPT10aGlzLnNjYWxlJiYobi5zY2FsZT10aGlzLnNjYWxlKTshMD09PXRoaXMuZGl0aGVyaW5nJiYobi5kaXRoZXJpbmc9ITApOzA8dGhpcy5hbHBoYVRlc3QmJihuLmFscGhhVGVzdD10aGlzLmFscGhhVGVzdCk7ITA9PT10aGlzLnByZW11bHRpcGxpZWRBbHBoYSYmKG4ucHJlbXVsdGlwbGllZEFscGhhPXRoaXMucHJlbXVsdGlwbGllZEFscGhhKTshMD09PXRoaXMud2lyZWZyYW1lJiYobi53aXJlZnJhbWU9dGhpcy53aXJlZnJhbWUpOzE8dGhpcy53aXJlZnJhbWVMaW5ld2lkdGgmJihuLndpcmVmcmFtZUxpbmV3aWR0aD10aGlzLndpcmVmcmFtZUxpbmV3aWR0aCk7InJvdW5kIiE9PXRoaXMud2lyZWZyYW1lTGluZWNhcCYmCihuLndpcmVmcmFtZUxpbmVjYXA9dGhpcy53aXJlZnJhbWVMaW5lY2FwKTsicm91bmQiIT09dGhpcy53aXJlZnJhbWVMaW5lam9pbiYmKG4ud2lyZWZyYW1lTGluZWpvaW49dGhpcy53aXJlZnJhbWVMaW5lam9pbik7ITA9PT10aGlzLm1vcnBoVGFyZ2V0cyYmKG4ubW9ycGhUYXJnZXRzPSEwKTshMD09PXRoaXMuc2tpbm5pbmcmJihuLnNraW5uaW5nPSEwKTshMT09PXRoaXMudmlzaWJsZSYmKG4udmlzaWJsZT0hMSk7Int9IiE9PUpTT04uc3RyaW5naWZ5KHRoaXMudXNlckRhdGEpJiYobi51c2VyRGF0YT10aGlzLnVzZXJEYXRhKTtoJiYoaD1lKGIudGV4dHVyZXMpLGI9ZShiLmltYWdlcyksMDxoLmxlbmd0aCYmKG4udGV4dHVyZXM9aCksMDxiLmxlbmd0aCYmKG4uaW1hZ2VzPWIpKTtyZXR1cm4gbn0sY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9LGNvcHk6ZnVuY3Rpb24oYil7dGhpcy5uYW1lPWIubmFtZTt0aGlzLmZvZz1iLmZvZzsKdGhpcy5saWdodHM9Yi5saWdodHM7dGhpcy5ibGVuZGluZz1iLmJsZW5kaW5nO3RoaXMuc2lkZT1iLnNpZGU7dGhpcy5mbGF0U2hhZGluZz1iLmZsYXRTaGFkaW5nO3RoaXMudmVydGV4Q29sb3JzPWIudmVydGV4Q29sb3JzO3RoaXMub3BhY2l0eT1iLm9wYWNpdHk7dGhpcy50cmFuc3BhcmVudD1iLnRyYW5zcGFyZW50O3RoaXMuYmxlbmRTcmM9Yi5ibGVuZFNyYzt0aGlzLmJsZW5kRHN0PWIuYmxlbmREc3Q7dGhpcy5ibGVuZEVxdWF0aW9uPWIuYmxlbmRFcXVhdGlvbjt0aGlzLmJsZW5kU3JjQWxwaGE9Yi5ibGVuZFNyY0FscGhhO3RoaXMuYmxlbmREc3RBbHBoYT1iLmJsZW5kRHN0QWxwaGE7dGhpcy5ibGVuZEVxdWF0aW9uQWxwaGE9Yi5ibGVuZEVxdWF0aW9uQWxwaGE7dGhpcy5kZXB0aEZ1bmM9Yi5kZXB0aEZ1bmM7dGhpcy5kZXB0aFRlc3Q9Yi5kZXB0aFRlc3Q7dGhpcy5kZXB0aFdyaXRlPWIuZGVwdGhXcml0ZTt0aGlzLmNvbG9yV3JpdGU9Yi5jb2xvcldyaXRlO3RoaXMucHJlY2lzaW9uPQpiLnByZWNpc2lvbjt0aGlzLnBvbHlnb25PZmZzZXQ9Yi5wb2x5Z29uT2Zmc2V0O3RoaXMucG9seWdvbk9mZnNldEZhY3Rvcj1iLnBvbHlnb25PZmZzZXRGYWN0b3I7dGhpcy5wb2x5Z29uT2Zmc2V0VW5pdHM9Yi5wb2x5Z29uT2Zmc2V0VW5pdHM7dGhpcy5kaXRoZXJpbmc9Yi5kaXRoZXJpbmc7dGhpcy5hbHBoYVRlc3Q9Yi5hbHBoYVRlc3Q7dGhpcy5wcmVtdWx0aXBsaWVkQWxwaGE9Yi5wcmVtdWx0aXBsaWVkQWxwaGE7dGhpcy52aXNpYmxlPWIudmlzaWJsZTt0aGlzLnVzZXJEYXRhPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoYi51c2VyRGF0YSkpO3RoaXMuY2xpcFNoYWRvd3M9Yi5jbGlwU2hhZG93czt0aGlzLmNsaXBJbnRlcnNlY3Rpb249Yi5jbGlwSW50ZXJzZWN0aW9uO3ZhciBlPWIuY2xpcHBpbmdQbGFuZXMsaD1udWxsO2lmKG51bGwhPT1lKXt2YXIgbj1lLmxlbmd0aDtoPUFycmF5KG4pO2Zvcih2YXIgdT0wO3UhPT1uOysrdSloW3VdPWVbdV0uY2xvbmUoKX10aGlzLmNsaXBwaW5nUGxhbmVzPQpoO3RoaXMuc2hhZG93U2lkZT1iLnNoYWRvd1NpZGU7cmV0dXJuIHRoaXN9LGRpc3Bvc2U6ZnVuY3Rpb24oKXt0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImRpc3Bvc2UifSl9fSk7ZGIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoR2EucHJvdG90eXBlKTtkYi5wcm90b3R5cGUuY29uc3RydWN0b3I9ZGI7ZGIucHJvdG90eXBlLmlzU2hhZGVyTWF0ZXJpYWw9ITA7ZGIucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oYil7R2EucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLGIpO3RoaXMuZnJhZ21lbnRTaGFkZXI9Yi5mcmFnbWVudFNoYWRlcjt0aGlzLnZlcnRleFNoYWRlcj1iLnZlcnRleFNoYWRlcjt0aGlzLnVuaWZvcm1zPUYoYi51bmlmb3Jtcyk7dGhpcy5kZWZpbmVzPU9iamVjdC5hc3NpZ24oe30sYi5kZWZpbmVzKTt0aGlzLndpcmVmcmFtZT1iLndpcmVmcmFtZTt0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD1iLndpcmVmcmFtZUxpbmV3aWR0aDt0aGlzLmxpZ2h0cz1iLmxpZ2h0czt0aGlzLmNsaXBwaW5nPQpiLmNsaXBwaW5nO3RoaXMuc2tpbm5pbmc9Yi5za2lubmluZzt0aGlzLm1vcnBoVGFyZ2V0cz1iLm1vcnBoVGFyZ2V0czt0aGlzLm1vcnBoTm9ybWFscz1iLm1vcnBoTm9ybWFsczt0aGlzLmV4dGVuc2lvbnM9Yi5leHRlbnNpb25zO3JldHVybiB0aGlzfTtkYi5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKGIpe3ZhciBlPUdhLnByb3RvdHlwZS50b0pTT04uY2FsbCh0aGlzLGIpO2UudW5pZm9ybXM9e307Zm9yKHZhciBoIGluIHRoaXMudW5pZm9ybXMpe3ZhciBuPXRoaXMudW5pZm9ybXNbaF0udmFsdWU7ZS51bmlmb3Jtc1toXT1uJiZuLmlzVGV4dHVyZT97dHlwZToidCIsdmFsdWU6bi50b0pTT04oYikudXVpZH06biYmbi5pc0NvbG9yP3t0eXBlOiJjIix2YWx1ZTpuLmdldEhleCgpfTpuJiZuLmlzVmVjdG9yMj97dHlwZToidjIiLHZhbHVlOm4udG9BcnJheSgpfTpuJiZuLmlzVmVjdG9yMz97dHlwZToidjMiLHZhbHVlOm4udG9BcnJheSgpfTpuJiZuLmlzVmVjdG9yND97dHlwZToidjQiLAp2YWx1ZTpuLnRvQXJyYXkoKX06biYmbi5pc01hdHJpeDM/e3R5cGU6Im0zIix2YWx1ZTpuLnRvQXJyYXkoKX06biYmbi5pc01hdHJpeDQ/e3R5cGU6Im00Iix2YWx1ZTpuLnRvQXJyYXkoKX06e3ZhbHVlOm59fTA8T2JqZWN0LmtleXModGhpcy5kZWZpbmVzKS5sZW5ndGgmJihlLmRlZmluZXM9dGhpcy5kZWZpbmVzKTtlLnZlcnRleFNoYWRlcj10aGlzLnZlcnRleFNoYWRlcjtlLmZyYWdtZW50U2hhZGVyPXRoaXMuZnJhZ21lbnRTaGFkZXI7Yj17fTtmb3IodmFyIHUgaW4gdGhpcy5leHRlbnNpb25zKSEwPT09dGhpcy5leHRlbnNpb25zW3VdJiYoYlt1XT0hMCk7MDxPYmplY3Qua2V5cyhiKS5sZW5ndGgmJihlLmV4dGVuc2lvbnM9Yik7cmV0dXJuIGV9O09iamVjdC5hc3NpZ24oeGIucHJvdG90eXBlLHtzZXQ6ZnVuY3Rpb24oYixlKXt0aGlzLm9yaWdpbi5jb3B5KGIpO3RoaXMuZGlyZWN0aW9uLmNvcHkoZSk7cmV0dXJuIHRoaXN9LGNsb25lOmZ1bmN0aW9uKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKS5jb3B5KHRoaXMpfSwKY29weTpmdW5jdGlvbihiKXt0aGlzLm9yaWdpbi5jb3B5KGIub3JpZ2luKTt0aGlzLmRpcmVjdGlvbi5jb3B5KGIuZGlyZWN0aW9uKTtyZXR1cm4gdGhpc30sYXQ6ZnVuY3Rpb24oYixlKXt2b2lkIDA9PT1lJiYoY29uc29sZS53YXJuKCJUSFJFRS5SYXk6IC5hdCgpIHRhcmdldCBpcyBub3cgcmVxdWlyZWQiKSxlPW5ldyBnKTtyZXR1cm4gZS5jb3B5KHRoaXMuZGlyZWN0aW9uKS5tdWx0aXBseVNjYWxhcihiKS5hZGQodGhpcy5vcmlnaW4pfSxsb29rQXQ6ZnVuY3Rpb24oYil7dGhpcy5kaXJlY3Rpb24uY29weShiKS5zdWIodGhpcy5vcmlnaW4pLm5vcm1hbGl6ZSgpO3JldHVybiB0aGlzfSxyZWNhc3Q6ZnVuY3Rpb24oKXt2YXIgYj1uZXcgZztyZXR1cm4gZnVuY3Rpb24oZSl7dGhpcy5vcmlnaW4uY29weSh0aGlzLmF0KGUsYikpO3JldHVybiB0aGlzfX0oKSxjbG9zZXN0UG9pbnRUb1BvaW50OmZ1bmN0aW9uKGIsZSl7dm9pZCAwPT09ZSYmKGNvbnNvbGUud2FybigiVEhSRUUuUmF5OiAuY2xvc2VzdFBvaW50VG9Qb2ludCgpIHRhcmdldCBpcyBub3cgcmVxdWlyZWQiKSwKZT1uZXcgZyk7ZS5zdWJWZWN0b3JzKGIsdGhpcy5vcmlnaW4pO2I9ZS5kb3QodGhpcy5kaXJlY3Rpb24pO3JldHVybiAwPmI/ZS5jb3B5KHRoaXMub3JpZ2luKTplLmNvcHkodGhpcy5kaXJlY3Rpb24pLm11bHRpcGx5U2NhbGFyKGIpLmFkZCh0aGlzLm9yaWdpbil9LGRpc3RhbmNlVG9Qb2ludDpmdW5jdGlvbihiKXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMuZGlzdGFuY2VTcVRvUG9pbnQoYikpfSxkaXN0YW5jZVNxVG9Qb2ludDpmdW5jdGlvbigpe3ZhciBiPW5ldyBnO3JldHVybiBmdW5jdGlvbihlKXt2YXIgaD1iLnN1YlZlY3RvcnMoZSx0aGlzLm9yaWdpbikuZG90KHRoaXMuZGlyZWN0aW9uKTtpZigwPmgpcmV0dXJuIHRoaXMub3JpZ2luLmRpc3RhbmNlVG9TcXVhcmVkKGUpO2IuY29weSh0aGlzLmRpcmVjdGlvbikubXVsdGlwbHlTY2FsYXIoaCkuYWRkKHRoaXMub3JpZ2luKTtyZXR1cm4gYi5kaXN0YW5jZVRvU3F1YXJlZChlKX19KCksZGlzdGFuY2VTcVRvU2VnbWVudDpmdW5jdGlvbigpe3ZhciBiPQpuZXcgZyxlPW5ldyBnLGg9bmV3IGc7cmV0dXJuIGZ1bmN0aW9uKG4sdSx3LHope2IuY29weShuKS5hZGQodSkubXVsdGlwbHlTY2FsYXIoLjUpO2UuY29weSh1KS5zdWIobikubm9ybWFsaXplKCk7aC5jb3B5KHRoaXMub3JpZ2luKS5zdWIoYik7dmFyIEU9LjUqbi5kaXN0YW5jZVRvKHUpLEg9LXRoaXMuZGlyZWN0aW9uLmRvdChlKSxJPWguZG90KHRoaXMuZGlyZWN0aW9uKSxPPS1oLmRvdChlKSxRPWgubGVuZ3RoU3EoKSxSPU1hdGguYWJzKDEtSCpIKTtpZigwPFIpe249SCpPLUk7dT1IKkktTzt2YXIgVT1FKlI7MDw9bj91Pj0tVT91PD1VPyhFPTEvUixuKj1FLHUqPUUsSD1uKihuK0gqdSsyKkkpK3UqKEgqbit1KzIqTykrUSk6KHU9RSxuPU1hdGgubWF4KDAsLShIKnUrSSkpLEg9LW4qbit1Kih1KzIqTykrUSk6KHU9LUUsbj1NYXRoLm1heCgwLC0oSCp1K0kpKSxIPS1uKm4rdSoodSsyKk8pK1EpOnU8PS1VPyhuPU1hdGgubWF4KDAsLSgtSCpFK0kpKSx1PTA8bj8tRTpNYXRoLm1pbihNYXRoLm1heCgtRSwKLU8pLEUpLEg9LW4qbit1Kih1KzIqTykrUSk6dTw9VT8obj0wLHU9TWF0aC5taW4oTWF0aC5tYXgoLUUsLU8pLEUpLEg9dSoodSsyKk8pK1EpOihuPU1hdGgubWF4KDAsLShIKkUrSSkpLHU9MDxuP0U6TWF0aC5taW4oTWF0aC5tYXgoLUUsLU8pLEUpLEg9LW4qbit1Kih1KzIqTykrUSl9ZWxzZSB1PTA8SD8tRTpFLG49TWF0aC5tYXgoMCwtKEgqdStJKSksSD0tbipuK3UqKHUrMipPKStRO3cmJncuY29weSh0aGlzLmRpcmVjdGlvbikubXVsdGlwbHlTY2FsYXIobikuYWRkKHRoaXMub3JpZ2luKTt6JiZ6LmNvcHkoZSkubXVsdGlwbHlTY2FsYXIodSkuYWRkKGIpO3JldHVybiBIfX0oKSxpbnRlcnNlY3RTcGhlcmU6ZnVuY3Rpb24oKXt2YXIgYj1uZXcgZztyZXR1cm4gZnVuY3Rpb24oZSxoKXtiLnN1YlZlY3RvcnMoZS5jZW50ZXIsdGhpcy5vcmlnaW4pO3ZhciBuPWIuZG90KHRoaXMuZGlyZWN0aW9uKSx1PWIuZG90KGIpLW4qbjtlPWUucmFkaXVzKmUucmFkaXVzO2lmKHU+ZSlyZXR1cm4gbnVsbDsKZT1NYXRoLnNxcnQoZS11KTt1PW4tZTtuKz1lO3JldHVybiAwPnUmJjA+bj9udWxsOjA+dT90aGlzLmF0KG4saCk6dGhpcy5hdCh1LGgpfX0oKSxpbnRlcnNlY3RzU3BoZXJlOmZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmRpc3RhbmNlU3FUb1BvaW50KGIuY2VudGVyKTw9Yi5yYWRpdXMqYi5yYWRpdXN9LGRpc3RhbmNlVG9QbGFuZTpmdW5jdGlvbihiKXt2YXIgZT1iLm5vcm1hbC5kb3QodGhpcy5kaXJlY3Rpb24pO2lmKDA9PT1lKXJldHVybiAwPT09Yi5kaXN0YW5jZVRvUG9pbnQodGhpcy5vcmlnaW4pPzA6bnVsbDtiPS0odGhpcy5vcmlnaW4uZG90KGIubm9ybWFsKStiLmNvbnN0YW50KS9lO3JldHVybiAwPD1iP2I6bnVsbH0saW50ZXJzZWN0UGxhbmU6ZnVuY3Rpb24oYixlKXtiPXRoaXMuZGlzdGFuY2VUb1BsYW5lKGIpO3JldHVybiBudWxsPT09Yj9udWxsOnRoaXMuYXQoYixlKX0saW50ZXJzZWN0c1BsYW5lOmZ1bmN0aW9uKGIpe3ZhciBlPWIuZGlzdGFuY2VUb1BvaW50KHRoaXMub3JpZ2luKTsKcmV0dXJuIDA9PT1lfHwwPmIubm9ybWFsLmRvdCh0aGlzLmRpcmVjdGlvbikqZT8hMDohMX0saW50ZXJzZWN0Qm94OmZ1bmN0aW9uKGIsZSl7dmFyIGg9MS90aGlzLmRpcmVjdGlvbi54O3ZhciBuPTEvdGhpcy5kaXJlY3Rpb24ueTt2YXIgdT0xL3RoaXMuZGlyZWN0aW9uLnosdz10aGlzLm9yaWdpbjtpZigwPD1oKXt2YXIgej0oYi5taW4ueC13LngpKmg7aCo9Yi5tYXgueC13Lnh9ZWxzZSB6PShiLm1heC54LXcueCkqaCxoKj1iLm1pbi54LXcueDtpZigwPD1uKXt2YXIgRT0oYi5taW4ueS13LnkpKm47bio9Yi5tYXgueS13Lnl9ZWxzZSBFPShiLm1heC55LXcueSkqbixuKj1iLm1pbi55LXcueTtpZih6Pm58fEU+aClyZXR1cm4gbnVsbDtpZihFPnp8fHohPT16KXo9RTtpZihuPGh8fGghPT1oKWg9bjswPD11PyhFPShiLm1pbi56LXcueikqdSxiPShiLm1heC56LXcueikqdSk6KEU9KGIubWF4Lnotdy56KSp1LGI9KGIubWluLnotdy56KSp1KTtpZih6PmJ8fEU+aClyZXR1cm4gbnVsbDsKaWYoRT56fHx6IT09eil6PUU7aWYoYjxofHxoIT09aCloPWI7cmV0dXJuIDA+aD9udWxsOnRoaXMuYXQoMDw9ej96OmgsZSl9LGludGVyc2VjdHNCb3g6ZnVuY3Rpb24oKXt2YXIgYj1uZXcgZztyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIG51bGwhPT10aGlzLmludGVyc2VjdEJveChlLGIpfX0oKSxpbnRlcnNlY3RUcmlhbmdsZTpmdW5jdGlvbigpe3ZhciBiPW5ldyBnLGU9bmV3IGcsaD1uZXcgZyxuPW5ldyBnO3JldHVybiBmdW5jdGlvbih1LHcseixFLEgpe2Uuc3ViVmVjdG9ycyh3LHUpO2guc3ViVmVjdG9ycyh6LHUpO24uY3Jvc3NWZWN0b3JzKGUsaCk7dz10aGlzLmRpcmVjdGlvbi5kb3Qobik7aWYoMDx3KXtpZihFKXJldHVybiBudWxsO0U9MX1lbHNlIGlmKDA+dylFPS0xLHc9LXc7ZWxzZSByZXR1cm4gbnVsbDtiLnN1YlZlY3RvcnModGhpcy5vcmlnaW4sdSk7dT1FKnRoaXMuZGlyZWN0aW9uLmRvdChoLmNyb3NzVmVjdG9ycyhiLGgpKTtpZigwPnUpcmV0dXJuIG51bGw7Cno9RSp0aGlzLmRpcmVjdGlvbi5kb3QoZS5jcm9zcyhiKSk7aWYoMD56fHx1K3o+dylyZXR1cm4gbnVsbDt1PS1FKmIuZG90KG4pO3JldHVybiAwPnU/bnVsbDp0aGlzLmF0KHUvdyxIKX19KCksYXBwbHlNYXRyaXg0OmZ1bmN0aW9uKGIpe3RoaXMub3JpZ2luLmFwcGx5TWF0cml4NChiKTt0aGlzLmRpcmVjdGlvbi50cmFuc2Zvcm1EaXJlY3Rpb24oYik7cmV0dXJuIHRoaXN9LGVxdWFsczpmdW5jdGlvbihiKXtyZXR1cm4gYi5vcmlnaW4uZXF1YWxzKHRoaXMub3JpZ2luKSYmYi5kaXJlY3Rpb24uZXF1YWxzKHRoaXMuZGlyZWN0aW9uKX19KTtPYmplY3QuYXNzaWduKENiLHtnZXROb3JtYWw6ZnVuY3Rpb24oKXt2YXIgYj1uZXcgZztyZXR1cm4gZnVuY3Rpb24oZSxoLG4sdSl7dm9pZCAwPT09dSYmKGNvbnNvbGUud2FybigiVEhSRUUuVHJpYW5nbGU6IC5nZXROb3JtYWwoKSB0YXJnZXQgaXMgbm93IHJlcXVpcmVkIiksdT1uZXcgZyk7dS5zdWJWZWN0b3JzKG4saCk7Yi5zdWJWZWN0b3JzKGUsCmgpO3UuY3Jvc3MoYik7ZT11Lmxlbmd0aFNxKCk7cmV0dXJuIDA8ZT91Lm11bHRpcGx5U2NhbGFyKDEvTWF0aC5zcXJ0KGUpKTp1LnNldCgwLDAsMCl9fSgpLGdldEJhcnljb29yZDpmdW5jdGlvbigpe3ZhciBiPW5ldyBnLGU9bmV3IGcsaD1uZXcgZztyZXR1cm4gZnVuY3Rpb24obix1LHcseixFKXtiLnN1YlZlY3RvcnMoeix1KTtlLnN1YlZlY3RvcnModyx1KTtoLnN1YlZlY3RvcnMobix1KTtuPWIuZG90KGIpO3U9Yi5kb3QoZSk7dz1iLmRvdChoKTt2YXIgSD1lLmRvdChlKTt6PWUuZG90KGgpO3ZhciBJPW4qSC11KnU7dm9pZCAwPT09RSYmKGNvbnNvbGUud2FybigiVEhSRUUuVHJpYW5nbGU6IC5nZXRCYXJ5Y29vcmQoKSB0YXJnZXQgaXMgbm93IHJlcXVpcmVkIiksRT1uZXcgZyk7aWYoMD09PUkpcmV0dXJuIEUuc2V0KC0yLC0xLC0xKTtJPTEvSTtIPShIKnctdSp6KSpJO249KG4qei11KncpKkk7cmV0dXJuIEUuc2V0KDEtSC1uLG4sSCl9fSgpLGNvbnRhaW5zUG9pbnQ6ZnVuY3Rpb24oKXt2YXIgYj0KbmV3IGc7cmV0dXJuIGZ1bmN0aW9uKGUsaCxuLHUpe0NiLmdldEJhcnljb29yZChlLGgsbix1LGIpO3JldHVybiAwPD1iLngmJjA8PWIueSYmMT49Yi54K2IueX19KCksZ2V0VVY6ZnVuY3Rpb24oKXt2YXIgYj1uZXcgZztyZXR1cm4gZnVuY3Rpb24oZSxoLG4sdSx3LHosRSxIKXt0aGlzLmdldEJhcnljb29yZChlLGgsbix1LGIpO0guc2V0KDAsMCk7SC5hZGRTY2FsZWRWZWN0b3IodyxiLngpO0guYWRkU2NhbGVkVmVjdG9yKHosYi55KTtILmFkZFNjYWxlZFZlY3RvcihFLGIueik7cmV0dXJuIEh9fSgpfSk7T2JqZWN0LmFzc2lnbihDYi5wcm90b3R5cGUse3NldDpmdW5jdGlvbihiLGUsaCl7dGhpcy5hLmNvcHkoYik7dGhpcy5iLmNvcHkoZSk7dGhpcy5jLmNvcHkoaCk7cmV0dXJuIHRoaXN9LHNldEZyb21Qb2ludHNBbmRJbmRpY2VzOmZ1bmN0aW9uKGIsZSxoLG4pe3RoaXMuYS5jb3B5KGJbZV0pO3RoaXMuYi5jb3B5KGJbaF0pO3RoaXMuYy5jb3B5KGJbbl0pO3JldHVybiB0aGlzfSwKY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9LGNvcHk6ZnVuY3Rpb24oYil7dGhpcy5hLmNvcHkoYi5hKTt0aGlzLmIuY29weShiLmIpO3RoaXMuYy5jb3B5KGIuYyk7cmV0dXJuIHRoaXN9LGdldEFyZWE6ZnVuY3Rpb24oKXt2YXIgYj1uZXcgZyxlPW5ldyBnO3JldHVybiBmdW5jdGlvbigpe2Iuc3ViVmVjdG9ycyh0aGlzLmMsdGhpcy5iKTtlLnN1YlZlY3RvcnModGhpcy5hLHRoaXMuYik7cmV0dXJuLjUqYi5jcm9zcyhlKS5sZW5ndGgoKX19KCksZ2V0TWlkcG9pbnQ6ZnVuY3Rpb24oYil7dm9pZCAwPT09YiYmKGNvbnNvbGUud2FybigiVEhSRUUuVHJpYW5nbGU6IC5nZXRNaWRwb2ludCgpIHRhcmdldCBpcyBub3cgcmVxdWlyZWQiKSxiPW5ldyBnKTtyZXR1cm4gYi5hZGRWZWN0b3JzKHRoaXMuYSx0aGlzLmIpLmFkZCh0aGlzLmMpLm11bHRpcGx5U2NhbGFyKDEvMyl9LGdldE5vcm1hbDpmdW5jdGlvbihiKXtyZXR1cm4gQ2IuZ2V0Tm9ybWFsKHRoaXMuYSwKdGhpcy5iLHRoaXMuYyxiKX0sZ2V0UGxhbmU6ZnVuY3Rpb24oYil7dm9pZCAwPT09YiYmKGNvbnNvbGUud2FybigiVEhSRUUuVHJpYW5nbGU6IC5nZXRQbGFuZSgpIHRhcmdldCBpcyBub3cgcmVxdWlyZWQiKSxiPW5ldyBnKTtyZXR1cm4gYi5zZXRGcm9tQ29wbGFuYXJQb2ludHModGhpcy5hLHRoaXMuYix0aGlzLmMpfSxnZXRCYXJ5Y29vcmQ6ZnVuY3Rpb24oYixlKXtyZXR1cm4gQ2IuZ2V0QmFyeWNvb3JkKGIsdGhpcy5hLHRoaXMuYix0aGlzLmMsZSl9LGNvbnRhaW5zUG9pbnQ6ZnVuY3Rpb24oYil7cmV0dXJuIENiLmNvbnRhaW5zUG9pbnQoYix0aGlzLmEsdGhpcy5iLHRoaXMuYyl9LGdldFVWOmZ1bmN0aW9uKGIsZSxoLG4sdSl7cmV0dXJuIENiLmdldFVWKGIsdGhpcy5hLHRoaXMuYix0aGlzLmMsZSxoLG4sdSl9LGludGVyc2VjdHNCb3g6ZnVuY3Rpb24oYil7cmV0dXJuIGIuaW50ZXJzZWN0c1RyaWFuZ2xlKHRoaXMpfSxjbG9zZXN0UG9pbnRUb1BvaW50OmZ1bmN0aW9uKCl7dmFyIGI9Cm5ldyBnLGU9bmV3IGcsaD1uZXcgZyxuPW5ldyBnLHU9bmV3IGcsdz1uZXcgZztyZXR1cm4gZnVuY3Rpb24oeixFKXt2b2lkIDA9PT1FJiYoY29uc29sZS53YXJuKCJUSFJFRS5UcmlhbmdsZTogLmNsb3Nlc3RQb2ludFRvUG9pbnQoKSB0YXJnZXQgaXMgbm93IHJlcXVpcmVkIiksRT1uZXcgZyk7dmFyIEg9dGhpcy5hLEk9dGhpcy5iLE89dGhpcy5jO2Iuc3ViVmVjdG9ycyhJLEgpO2Uuc3ViVmVjdG9ycyhPLEgpO24uc3ViVmVjdG9ycyh6LEgpO3ZhciBRPWIuZG90KG4pLFI9ZS5kb3Qobik7aWYoMD49USYmMD49UilyZXR1cm4gRS5jb3B5KEgpO3Uuc3ViVmVjdG9ycyh6LEkpO3ZhciBVPWIuZG90KHUpLFc9ZS5kb3QodSk7aWYoMDw9VSYmVzw9VSlyZXR1cm4gRS5jb3B5KEkpO3ZhciBaPVEqVy1VKlI7aWYoMD49WiYmMDw9USYmMD49VSlyZXR1cm4gST1RLyhRLVUpLEUuY29weShIKS5hZGRTY2FsZWRWZWN0b3IoYixJKTt3LnN1YlZlY3RvcnMoeixPKTt6PWIuZG90KHcpO3ZhciBmYT0KZS5kb3Qodyk7aWYoMDw9ZmEmJno8PWZhKXJldHVybiBFLmNvcHkoTyk7UT16KlItUSpmYTtpZigwPj1RJiYwPD1SJiYwPj1mYSlyZXR1cm4gWj1SLyhSLWZhKSxFLmNvcHkoSCkuYWRkU2NhbGVkVmVjdG9yKGUsWik7Uj1VKmZhLXoqVztpZigwPj1SJiYwPD1XLVUmJjA8PXotZmEpcmV0dXJuIGguc3ViVmVjdG9ycyhPLEkpLFo9KFctVSkvKFctVSsoei1mYSkpLEUuY29weShJKS5hZGRTY2FsZWRWZWN0b3IoaCxaKTtPPTEvKFIrUStaKTtJPVEqTztaKj1PO3JldHVybiBFLmNvcHkoSCkuYWRkU2NhbGVkVmVjdG9yKGIsSSkuYWRkU2NhbGVkVmVjdG9yKGUsWil9fSgpLGVxdWFsczpmdW5jdGlvbihiKXtyZXR1cm4gYi5hLmVxdWFscyh0aGlzLmEpJiZiLmIuZXF1YWxzKHRoaXMuYikmJmIuYy5lcXVhbHModGhpcy5jKX19KTt5Yi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShHYS5wcm90b3R5cGUpO3liLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj15Yjt5Yi5wcm90b3R5cGUuaXNNZXNoQmFzaWNNYXRlcmlhbD0KITA7eWIucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oYil7R2EucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLGIpO3RoaXMuY29sb3IuY29weShiLmNvbG9yKTt0aGlzLm1hcD1iLm1hcDt0aGlzLmxpZ2h0TWFwPWIubGlnaHRNYXA7dGhpcy5saWdodE1hcEludGVuc2l0eT1iLmxpZ2h0TWFwSW50ZW5zaXR5O3RoaXMuYW9NYXA9Yi5hb01hcDt0aGlzLmFvTWFwSW50ZW5zaXR5PWIuYW9NYXBJbnRlbnNpdHk7dGhpcy5zcGVjdWxhck1hcD1iLnNwZWN1bGFyTWFwO3RoaXMuYWxwaGFNYXA9Yi5hbHBoYU1hcDt0aGlzLmVudk1hcD1iLmVudk1hcDt0aGlzLmNvbWJpbmU9Yi5jb21iaW5lO3RoaXMucmVmbGVjdGl2aXR5PWIucmVmbGVjdGl2aXR5O3RoaXMucmVmcmFjdGlvblJhdGlvPWIucmVmcmFjdGlvblJhdGlvO3RoaXMud2lyZWZyYW1lPWIud2lyZWZyYW1lO3RoaXMud2lyZWZyYW1lTGluZXdpZHRoPWIud2lyZWZyYW1lTGluZXdpZHRoO3RoaXMud2lyZWZyYW1lTGluZWNhcD1iLndpcmVmcmFtZUxpbmVjYXA7CnRoaXMud2lyZWZyYW1lTGluZWpvaW49Yi53aXJlZnJhbWVMaW5lam9pbjt0aGlzLnNraW5uaW5nPWIuc2tpbm5pbmc7dGhpcy5tb3JwaFRhcmdldHM9Yi5tb3JwaFRhcmdldHM7cmV0dXJuIHRoaXN9O3RiLnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoUy5wcm90b3R5cGUpLHtjb25zdHJ1Y3Rvcjp0Yixpc01lc2g6ITAsc2V0RHJhd01vZGU6ZnVuY3Rpb24oYil7dGhpcy5kcmF3TW9kZT1ifSxjb3B5OmZ1bmN0aW9uKGIpe1MucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLGIpO3RoaXMuZHJhd01vZGU9Yi5kcmF3TW9kZTt2b2lkIDAhPT1iLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcyYmKHRoaXMubW9ycGhUYXJnZXRJbmZsdWVuY2VzPWIubW9ycGhUYXJnZXRJbmZsdWVuY2VzLnNsaWNlKCkpO3ZvaWQgMCE9PWIubW9ycGhUYXJnZXREaWN0aW9uYXJ5JiYodGhpcy5tb3JwaFRhcmdldERpY3Rpb25hcnk9T2JqZWN0LmFzc2lnbih7fSxiLm1vcnBoVGFyZ2V0RGljdGlvbmFyeSkpOwpyZXR1cm4gdGhpc30sdXBkYXRlTW9ycGhUYXJnZXRzOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZW9tZXRyeTtpZihiLmlzQnVmZmVyR2VvbWV0cnkpe2I9Yi5tb3JwaEF0dHJpYnV0ZXM7dmFyIGU9T2JqZWN0LmtleXMoYik7aWYoMDxlLmxlbmd0aCl7dmFyIGg9YltlWzBdXTtpZih2b2lkIDAhPT1oKWZvcih0aGlzLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcz1bXSx0aGlzLm1vcnBoVGFyZ2V0RGljdGlvbmFyeT17fSxiPTAsZT1oLmxlbmd0aDtiPGU7YisrKXt2YXIgbj1oW2JdLm5hbWV8fFN0cmluZyhiKTt0aGlzLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcy5wdXNoKDApO3RoaXMubW9ycGhUYXJnZXREaWN0aW9uYXJ5W25dPWJ9fX1lbHNlIGI9Yi5tb3JwaFRhcmdldHMsdm9pZCAwIT09YiYmMDxiLmxlbmd0aCYmY29uc29sZS5lcnJvcigiVEhSRUUuTWVzaC51cGRhdGVNb3JwaFRhcmdldHMoKSBubyBsb25nZXIgc3VwcG9ydHMgVEhSRUUuR2VvbWV0cnkuIFVzZSBUSFJFRS5CdWZmZXJHZW9tZXRyeSBpbnN0ZWFkLiIpfSwKcmF5Y2FzdDpmdW5jdGlvbigpe2Z1bmN0aW9uIGIoaWEsdGEsbmEsdmEsQmEsc2EsRGEsSGEpe2lmKG51bGw9PT0oMT09PXRhLnNpZGU/dmEuaW50ZXJzZWN0VHJpYW5nbGUoRGEsc2EsQmEsITAsSGEpOnZhLmludGVyc2VjdFRyaWFuZ2xlKEJhLHNhLERhLDIhPT10YS5zaWRlLEhhKSkpcmV0dXJuIG51bGw7cmEuY29weShIYSk7cmEuYXBwbHlNYXRyaXg0KGlhLm1hdHJpeFdvcmxkKTt0YT1uYS5yYXkub3JpZ2luLmRpc3RhbmNlVG8ocmEpO3JldHVybiB0YTxuYS5uZWFyfHx0YT5uYS5mYXI/bnVsbDp7ZGlzdGFuY2U6dGEscG9pbnQ6cmEuY2xvbmUoKSxvYmplY3Q6aWF9fWZ1bmN0aW9uIGUoaWEsdGEsbmEsdmEsQmEsc2EsRGEsSGEsS2EsTmEpe3cuZnJvbUJ1ZmZlckF0dHJpYnV0ZShCYSxIYSk7ei5mcm9tQnVmZmVyQXR0cmlidXRlKEJhLEthKTtFLmZyb21CdWZmZXJBdHRyaWJ1dGUoQmEsTmEpO0JhPWlhLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcztpZih0YS5tb3JwaFRhcmdldHMmJgpzYSYmQmEpe1Euc2V0KDAsMCwwKTtSLnNldCgwLDAsMCk7VS5zZXQoMCwwLDApO2Zvcih2YXIgTGE9MCxmYj1zYS5sZW5ndGg7TGE8ZmI7TGErKyl7dmFyIGNiPUJhW0xhXSxKYT1zYVtMYV07MCE9PWNiJiYoSC5mcm9tQnVmZmVyQXR0cmlidXRlKEphLEhhKSxJLmZyb21CdWZmZXJBdHRyaWJ1dGUoSmEsS2EpLE8uZnJvbUJ1ZmZlckF0dHJpYnV0ZShKYSxOYSksUS5hZGRTY2FsZWRWZWN0b3IoSC5zdWIodyksY2IpLFIuYWRkU2NhbGVkVmVjdG9yKEkuc3ViKHopLGNiKSxVLmFkZFNjYWxlZFZlY3RvcihPLnN1YihFKSxjYikpfXcuYWRkKFEpO3ouYWRkKFIpO0UuYWRkKFUpfWlmKGlhPWIoaWEsdGEsbmEsdmEsdyx6LEUscWEpKURhJiYoVy5mcm9tQnVmZmVyQXR0cmlidXRlKERhLEhhKSxaLmZyb21CdWZmZXJBdHRyaWJ1dGUoRGEsS2EpLGZhLmZyb21CdWZmZXJBdHRyaWJ1dGUoRGEsTmEpLGlhLnV2PUNiLmdldFVWKHFhLHcseixFLFcsWixmYSxuZXcgZCkpLERhPW5ldyBMKEhhLEthLApOYSksQ2IuZ2V0Tm9ybWFsKHcseixFLERhLm5vcm1hbCksaWEuZmFjZT1EYTtyZXR1cm4gaWF9dmFyIGg9bmV3IEMsbj1uZXcgeGIsdT1uZXcgQSx3PW5ldyBnLHo9bmV3IGcsRT1uZXcgZyxIPW5ldyBnLEk9bmV3IGcsTz1uZXcgZyxRPW5ldyBnLFI9bmV3IGcsVT1uZXcgZyxXPW5ldyBkLFo9bmV3IGQsZmE9bmV3IGQscWE9bmV3IGcscmE9bmV3IGc7cmV0dXJuIGZ1bmN0aW9uKGlhLHRhKXt2YXIgbmE9dGhpcy5nZW9tZXRyeSx2YT10aGlzLm1hdGVyaWFsLEJhPXRoaXMubWF0cml4V29ybGQ7aWYodm9pZCAwIT09dmEmJihudWxsPT09bmEuYm91bmRpbmdTcGhlcmUmJm5hLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpLHUuY29weShuYS5ib3VuZGluZ1NwaGVyZSksdS5hcHBseU1hdHJpeDQoQmEpLCExIT09aWEucmF5LmludGVyc2VjdHNTcGhlcmUodSkmJihoLmdldEludmVyc2UoQmEpLG4uY29weShpYS5yYXkpLmFwcGx5TWF0cml4NChoKSxudWxsPT09bmEuYm91bmRpbmdCb3h8fCExIT09Cm4uaW50ZXJzZWN0c0JveChuYS5ib3VuZGluZ0JveCkpKSlpZihuYS5pc0J1ZmZlckdlb21ldHJ5KXt2YXIgc2E9bmEuaW5kZXg7QmE9bmEuYXR0cmlidXRlcy5wb3NpdGlvbjt2YXIgRGE9bmEubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uLEhhPW5hLmF0dHJpYnV0ZXMudXYsS2E9bmEuZ3JvdXBzLE5hPW5hLmRyYXdSYW5nZSxMYSxmYjtpZihudWxsIT09c2EpaWYoQXJyYXkuaXNBcnJheSh2YSkpe3ZhciBjYj0wO2ZvcihMYT1LYS5sZW5ndGg7Y2I8TGE7Y2IrKyl7dmFyIEphPUthW2NiXTt2YXIgaGI9dmFbSmEubWF0ZXJpYWxJbmRleF07dmFyIFVhPU1hdGgubWF4KEphLnN0YXJ0LE5hLnN0YXJ0KTtmb3IoZmI9bmE9TWF0aC5taW4oSmEuc3RhcnQrSmEuY291bnQsTmEuc3RhcnQrTmEuY291bnQpO1VhPGZiO1VhKz0zKXtuYT1zYS5nZXRYKFVhKTt2YXIgSGI9c2EuZ2V0WChVYSsxKTt2YXIgcWI9c2EuZ2V0WChVYSsyKTtpZihuYT1lKHRoaXMsaGIsaWEsbixCYSxEYSxIYSxuYSxIYiwKcWIpKW5hLmZhY2VJbmRleD1NYXRoLmZsb29yKFVhLzMpLG5hLmZhY2UubWF0ZXJpYWxJbmRleD1KYS5tYXRlcmlhbEluZGV4LHRhLnB1c2gobmEpfX19ZWxzZSBmb3IoVWE9TWF0aC5tYXgoMCxOYS5zdGFydCksbmE9TWF0aC5taW4oc2EuY291bnQsTmEuc3RhcnQrTmEuY291bnQpLGNiPVVhLExhPW5hO2NiPExhO2NiKz0zKXtpZihuYT1zYS5nZXRYKGNiKSxIYj1zYS5nZXRYKGNiKzEpLHFiPXNhLmdldFgoY2IrMiksbmE9ZSh0aGlzLHZhLGlhLG4sQmEsRGEsSGEsbmEsSGIscWIpKW5hLmZhY2VJbmRleD1NYXRoLmZsb29yKGNiLzMpLHRhLnB1c2gobmEpfWVsc2UgaWYodm9pZCAwIT09QmEpaWYoQXJyYXkuaXNBcnJheSh2YSkpZm9yKGNiPTAsTGE9S2EubGVuZ3RoO2NiPExhO2NiKyspZm9yKEphPUthW2NiXSxoYj12YVtKYS5tYXRlcmlhbEluZGV4XSxVYT1NYXRoLm1heChKYS5zdGFydCxOYS5zdGFydCksZmI9bmE9TWF0aC5taW4oSmEuc3RhcnQrSmEuY291bnQsTmEuc3RhcnQrCk5hLmNvdW50KTtVYTxmYjtVYSs9Myl7aWYobmE9VWEsSGI9VWErMSxxYj1VYSsyLG5hPWUodGhpcyxoYixpYSxuLEJhLERhLEhhLG5hLEhiLHFiKSluYS5mYWNlSW5kZXg9TWF0aC5mbG9vcihVYS8zKSxuYS5mYWNlLm1hdGVyaWFsSW5kZXg9SmEubWF0ZXJpYWxJbmRleCx0YS5wdXNoKG5hKX1lbHNlIGZvcihVYT1NYXRoLm1heCgwLE5hLnN0YXJ0KSxuYT1NYXRoLm1pbihCYS5jb3VudCxOYS5zdGFydCtOYS5jb3VudCksY2I9VWEsTGE9bmE7Y2I8TGE7Y2IrPTMpaWYobmE9Y2IsSGI9Y2IrMSxxYj1jYisyLG5hPWUodGhpcyx2YSxpYSxuLEJhLERhLEhhLG5hLEhiLHFiKSluYS5mYWNlSW5kZXg9TWF0aC5mbG9vcihjYi8zKSx0YS5wdXNoKG5hKX1lbHNlIGlmKG5hLmlzR2VvbWV0cnkpZm9yKEJhPUFycmF5LmlzQXJyYXkodmEpLERhPW5hLnZlcnRpY2VzLEhhPW5hLmZhY2VzLG5hPW5hLmZhY2VWZXJ0ZXhVdnNbMF0sMDxuYS5sZW5ndGgmJihzYT1uYSksTGE9MCxKYT1IYS5sZW5ndGg7TGE8CkphO0xhKyspaWYoaGI9SGFbTGFdLG5hPUJhP3ZhW2hiLm1hdGVyaWFsSW5kZXhdOnZhLHZvaWQgMCE9PW5hJiYoS2E9RGFbaGIuYV0sTmE9RGFbaGIuYl0sY2I9RGFbaGIuY10sbmE9Yih0aGlzLG5hLGlhLG4sS2EsTmEsY2IscWEpKSlzYSYmc2FbTGFdJiYoVWE9c2FbTGFdLFcuY29weShVYVswXSksWi5jb3B5KFVhWzFdKSxmYS5jb3B5KFVhWzJdKSxuYS51dj1DYi5nZXRVVihxYSxLYSxOYSxjYixXLFosZmEsbmV3IGQpKSxuYS5mYWNlPWhiLG5hLmZhY2VJbmRleD1MYSx0YS5wdXNoKG5hKX19KCksY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy5nZW9tZXRyeSx0aGlzLm1hdGVyaWFsKSkuY29weSh0aGlzKX19KTt1ZC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShrLnByb3RvdHlwZSk7dWQucHJvdG90eXBlLmNvbnN0cnVjdG9yPXVkO3VkLnByb3RvdHlwZS5pc0N1YmVUZXh0dXJlPSEwO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh1ZC5wcm90b3R5cGUsCiJpbWFnZXMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbWFnZX0sc2V0OmZ1bmN0aW9uKGIpe3RoaXMuaW1hZ2U9Yn19KTtLZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShrLnByb3RvdHlwZSk7S2UucHJvdG90eXBlLmNvbnN0cnVjdG9yPUtlO0tlLnByb3RvdHlwZS5pc0RhdGFUZXh0dXJlMkRBcnJheT0hMDtMZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShrLnByb3RvdHlwZSk7TGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPUxlO0xlLnByb3RvdHlwZS5pc0RhdGFUZXh0dXJlM0Q9ITA7dmFyIFlrPW5ldyBrLFpuPW5ldyBLZSxhbz1uZXcgTGUsWms9bmV3IHVkLFNrPVtdLFVrPVtdLFhrPW5ldyBGbG9hdDMyQXJyYXkoMTYpLFdrPW5ldyBGbG9hdDMyQXJyYXkoOSksVms9bmV3IEZsb2F0MzJBcnJheSg0KTtjbC5wcm90b3R5cGUudXBkYXRlQ2FjaGU9ZnVuY3Rpb24oYil7dmFyIGU9dGhpcy5jYWNoZTtiIGluc3RhbmNlb2YgRmxvYXQzMkFycmF5JiZlLmxlbmd0aCE9PWIubGVuZ3RoJiYKKHRoaXMuY2FjaGU9bmV3IEZsb2F0MzJBcnJheShiLmxlbmd0aCkpO2tjKGUsYil9O2RsLnByb3RvdHlwZS5zZXRWYWx1ZT1mdW5jdGlvbihiLGUsaCl7Zm9yKHZhciBuPXRoaXMuc2VxLHU9MCx3PW4ubGVuZ3RoO3UhPT13OysrdSl7dmFyIHo9blt1XTt6LnNldFZhbHVlKGIsZVt6LmlkXSxoKX19O3ZhciByaT0vKFtcd1xkX10rKShcXSk/KFxbfFwuKT8vZztPZC5wcm90b3R5cGUuc2V0VmFsdWU9ZnVuY3Rpb24oYixlLGgsbil7ZT10aGlzLm1hcFtlXTt2b2lkIDAhPT1lJiZlLnNldFZhbHVlKGIsaCxuKX07T2QucHJvdG90eXBlLnNldE9wdGlvbmFsPWZ1bmN0aW9uKGIsZSxoKXtlPWVbaF07dm9pZCAwIT09ZSYmdGhpcy5zZXRWYWx1ZShiLGgsZSl9O09kLnVwbG9hZD1mdW5jdGlvbihiLGUsaCxuKXtmb3IodmFyIHU9MCx3PWUubGVuZ3RoO3UhPT13OysrdSl7dmFyIHo9ZVt1XSxFPWhbei5pZF07ITEhPT1FLm5lZWRzVXBkYXRlJiZ6LnNldFZhbHVlKGIsRS52YWx1ZSxuKX19O09kLnNlcVdpdGhWYWx1ZT0KZnVuY3Rpb24oYixlKXtmb3IodmFyIGg9W10sbj0wLHU9Yi5sZW5ndGg7biE9PXU7KytuKXt2YXIgdz1iW25dO3cuaWQgaW4gZSYmaC5wdXNoKHcpfXJldHVybiBofTt2YXIgeW89MCxHbz0wO1BkLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEdhLnByb3RvdHlwZSk7UGQucHJvdG90eXBlLmNvbnN0cnVjdG9yPVBkO1BkLnByb3RvdHlwZS5pc01lc2hEZXB0aE1hdGVyaWFsPSEwO1BkLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKGIpe0dhLnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyxiKTt0aGlzLmRlcHRoUGFja2luZz1iLmRlcHRoUGFja2luZzt0aGlzLnNraW5uaW5nPWIuc2tpbm5pbmc7dGhpcy5tb3JwaFRhcmdldHM9Yi5tb3JwaFRhcmdldHM7dGhpcy5tYXA9Yi5tYXA7dGhpcy5hbHBoYU1hcD1iLmFscGhhTWFwO3RoaXMuZGlzcGxhY2VtZW50TWFwPWIuZGlzcGxhY2VtZW50TWFwO3RoaXMuZGlzcGxhY2VtZW50U2NhbGU9Yi5kaXNwbGFjZW1lbnRTY2FsZTt0aGlzLmRpc3BsYWNlbWVudEJpYXM9CmIuZGlzcGxhY2VtZW50Qmlhczt0aGlzLndpcmVmcmFtZT1iLndpcmVmcmFtZTt0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD1iLndpcmVmcmFtZUxpbmV3aWR0aDtyZXR1cm4gdGhpc307UWQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoR2EucHJvdG90eXBlKTtRZC5wcm90b3R5cGUuY29uc3RydWN0b3I9UWQ7UWQucHJvdG90eXBlLmlzTWVzaERpc3RhbmNlTWF0ZXJpYWw9ITA7UWQucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oYil7R2EucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLGIpO3RoaXMucmVmZXJlbmNlUG9zaXRpb24uY29weShiLnJlZmVyZW5jZVBvc2l0aW9uKTt0aGlzLm5lYXJEaXN0YW5jZT1iLm5lYXJEaXN0YW5jZTt0aGlzLmZhckRpc3RhbmNlPWIuZmFyRGlzdGFuY2U7dGhpcy5za2lubmluZz1iLnNraW5uaW5nO3RoaXMubW9ycGhUYXJnZXRzPWIubW9ycGhUYXJnZXRzO3RoaXMubWFwPWIubWFwO3RoaXMuYWxwaGFNYXA9Yi5hbHBoYU1hcDt0aGlzLmRpc3BsYWNlbWVudE1hcD0KYi5kaXNwbGFjZW1lbnRNYXA7dGhpcy5kaXNwbGFjZW1lbnRTY2FsZT1iLmRpc3BsYWNlbWVudFNjYWxlO3RoaXMuZGlzcGxhY2VtZW50Qmlhcz1iLmRpc3BsYWNlbWVudEJpYXM7cmV0dXJuIHRoaXN9O05lLnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoUy5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpOZSxpc0dyb3VwOiEwfSk7amQucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShTLnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOmpkLGlzQ2FtZXJhOiEwLGNvcHk6ZnVuY3Rpb24oYixlKXtTLnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyxiLGUpO3RoaXMubWF0cml4V29ybGRJbnZlcnNlLmNvcHkoYi5tYXRyaXhXb3JsZEludmVyc2UpO3RoaXMucHJvamVjdGlvbk1hdHJpeC5jb3B5KGIucHJvamVjdGlvbk1hdHJpeCk7dGhpcy5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZS5jb3B5KGIucHJvamVjdGlvbk1hdHJpeEludmVyc2UpO3JldHVybiB0aGlzfSwKZ2V0V29ybGREaXJlY3Rpb246ZnVuY3Rpb24oYil7dm9pZCAwPT09YiYmKGNvbnNvbGUud2FybigiVEhSRUUuQ2FtZXJhOiAuZ2V0V29ybGREaXJlY3Rpb24oKSB0YXJnZXQgaXMgbm93IHJlcXVpcmVkIiksYj1uZXcgZyk7dGhpcy51cGRhdGVNYXRyaXhXb3JsZCghMCk7dmFyIGU9dGhpcy5tYXRyaXhXb3JsZC5lbGVtZW50cztyZXR1cm4gYi5zZXQoLWVbOF0sLWVbOV0sLWVbMTBdKS5ub3JtYWxpemUoKX0sdXBkYXRlTWF0cml4V29ybGQ6ZnVuY3Rpb24oYil7Uy5wcm90b3R5cGUudXBkYXRlTWF0cml4V29ybGQuY2FsbCh0aGlzLGIpO3RoaXMubWF0cml4V29ybGRJbnZlcnNlLmdldEludmVyc2UodGhpcy5tYXRyaXhXb3JsZCl9LGNsb25lOmZ1bmN0aW9uKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKS5jb3B5KHRoaXMpfX0pO2NjLnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoamQucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6Y2MsaXNQZXJzcGVjdGl2ZUNhbWVyYTohMCwKY29weTpmdW5jdGlvbihiLGUpe2pkLnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyxiLGUpO3RoaXMuZm92PWIuZm92O3RoaXMuem9vbT1iLnpvb207dGhpcy5uZWFyPWIubmVhcjt0aGlzLmZhcj1iLmZhcjt0aGlzLmZvY3VzPWIuZm9jdXM7dGhpcy5hc3BlY3Q9Yi5hc3BlY3Q7dGhpcy52aWV3PW51bGw9PT1iLnZpZXc/bnVsbDpPYmplY3QuYXNzaWduKHt9LGIudmlldyk7dGhpcy5maWxtR2F1Z2U9Yi5maWxtR2F1Z2U7dGhpcy5maWxtT2Zmc2V0PWIuZmlsbU9mZnNldDtyZXR1cm4gdGhpc30sc2V0Rm9jYWxMZW5ndGg6ZnVuY3Rpb24oYil7dGhpcy5mb3Y9MipvYi5SQUQyREVHKk1hdGguYXRhbiguNSp0aGlzLmdldEZpbG1IZWlnaHQoKS9iKTt0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX0sZ2V0Rm9jYWxMZW5ndGg6ZnVuY3Rpb24oKXtyZXR1cm4uNSp0aGlzLmdldEZpbG1IZWlnaHQoKS9NYXRoLnRhbiguNSpvYi5ERUcyUkFEKnRoaXMuZm92KX0sZ2V0RWZmZWN0aXZlRk9WOmZ1bmN0aW9uKCl7cmV0dXJuIDIqCm9iLlJBRDJERUcqTWF0aC5hdGFuKE1hdGgudGFuKC41Km9iLkRFRzJSQUQqdGhpcy5mb3YpL3RoaXMuem9vbSl9LGdldEZpbG1XaWR0aDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmZpbG1HYXVnZSpNYXRoLm1pbih0aGlzLmFzcGVjdCwxKX0sZ2V0RmlsbUhlaWdodDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmZpbG1HYXVnZS9NYXRoLm1heCh0aGlzLmFzcGVjdCwxKX0sc2V0Vmlld09mZnNldDpmdW5jdGlvbihiLGUsaCxuLHUsdyl7dGhpcy5hc3BlY3Q9Yi9lO251bGw9PT10aGlzLnZpZXcmJih0aGlzLnZpZXc9e2VuYWJsZWQ6ITAsZnVsbFdpZHRoOjEsZnVsbEhlaWdodDoxLG9mZnNldFg6MCxvZmZzZXRZOjAsd2lkdGg6MSxoZWlnaHQ6MX0pO3RoaXMudmlldy5lbmFibGVkPSEwO3RoaXMudmlldy5mdWxsV2lkdGg9Yjt0aGlzLnZpZXcuZnVsbEhlaWdodD1lO3RoaXMudmlldy5vZmZzZXRYPWg7dGhpcy52aWV3Lm9mZnNldFk9bjt0aGlzLnZpZXcud2lkdGg9dTt0aGlzLnZpZXcuaGVpZ2h0PQp3O3RoaXMudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpfSxjbGVhclZpZXdPZmZzZXQ6ZnVuY3Rpb24oKXtudWxsIT09dGhpcy52aWV3JiYodGhpcy52aWV3LmVuYWJsZWQ9ITEpO3RoaXMudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpfSx1cGRhdGVQcm9qZWN0aW9uTWF0cml4OmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5uZWFyLGU9YipNYXRoLnRhbiguNSpvYi5ERUcyUkFEKnRoaXMuZm92KS90aGlzLnpvb20saD0yKmUsbj10aGlzLmFzcGVjdCpoLHU9LS41Km4sdz10aGlzLnZpZXc7aWYobnVsbCE9PXRoaXMudmlldyYmdGhpcy52aWV3LmVuYWJsZWQpe3ZhciB6PXcuZnVsbFdpZHRoLEU9dy5mdWxsSGVpZ2h0O3UrPXcub2Zmc2V0WCpuL3o7ZS09dy5vZmZzZXRZKmgvRTtuKj13LndpZHRoL3o7aCo9dy5oZWlnaHQvRX13PXRoaXMuZmlsbU9mZnNldDswIT09dyYmKHUrPWIqdy90aGlzLmdldEZpbG1XaWR0aCgpKTt0aGlzLnByb2plY3Rpb25NYXRyaXgubWFrZVBlcnNwZWN0aXZlKHUsdSsKbixlLGUtaCxiLHRoaXMuZmFyKTt0aGlzLnByb2plY3Rpb25NYXRyaXhJbnZlcnNlLmdldEludmVyc2UodGhpcy5wcm9qZWN0aW9uTWF0cml4KX0sdG9KU09OOmZ1bmN0aW9uKGIpe2I9Uy5wcm90b3R5cGUudG9KU09OLmNhbGwodGhpcyxiKTtiLm9iamVjdC5mb3Y9dGhpcy5mb3Y7Yi5vYmplY3Quem9vbT10aGlzLnpvb207Yi5vYmplY3QubmVhcj10aGlzLm5lYXI7Yi5vYmplY3QuZmFyPXRoaXMuZmFyO2Iub2JqZWN0LmZvY3VzPXRoaXMuZm9jdXM7Yi5vYmplY3QuYXNwZWN0PXRoaXMuYXNwZWN0O251bGwhPT10aGlzLnZpZXcmJihiLm9iamVjdC52aWV3PU9iamVjdC5hc3NpZ24oe30sdGhpcy52aWV3KSk7Yi5vYmplY3QuZmlsbUdhdWdlPXRoaXMuZmlsbUdhdWdlO2Iub2JqZWN0LmZpbG1PZmZzZXQ9dGhpcy5maWxtT2Zmc2V0O3JldHVybiBifX0pO1BmLnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoY2MucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6UGYsaXNBcnJheUNhbWVyYTohMH0pOwp2YXIgcGw9bmV3IGcscWw9bmV3IGc7T2JqZWN0LmFzc2lnbihnaC5wcm90b3R5cGUse2lzRm9nRXhwMjohMCxjbG9uZTpmdW5jdGlvbigpe3JldHVybiBuZXcgZ2godGhpcy5jb2xvcix0aGlzLmRlbnNpdHkpfSx0b0pTT046ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToiRm9nRXhwMiIsY29sb3I6dGhpcy5jb2xvci5nZXRIZXgoKSxkZW5zaXR5OnRoaXMuZGVuc2l0eX19fSk7T2JqZWN0LmFzc2lnbihoaC5wcm90b3R5cGUse2lzRm9nOiEwLGNsb25lOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBoaCh0aGlzLmNvbG9yLHRoaXMubmVhcix0aGlzLmZhcil9LHRvSlNPTjpmdW5jdGlvbigpe3JldHVybnt0eXBlOiJGb2ciLGNvbG9yOnRoaXMuY29sb3IuZ2V0SGV4KCksbmVhcjp0aGlzLm5lYXIsZmFyOnRoaXMuZmFyfX19KTtpaC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKFMucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6aWgsaXNTY2VuZTohMCxjb3B5OmZ1bmN0aW9uKGIsCmUpe1MucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLGIsZSk7bnVsbCE9PWIuYmFja2dyb3VuZCYmKHRoaXMuYmFja2dyb3VuZD1iLmJhY2tncm91bmQuY2xvbmUoKSk7bnVsbCE9PWIuZm9nJiYodGhpcy5mb2c9Yi5mb2cuY2xvbmUoKSk7bnVsbCE9PWIub3ZlcnJpZGVNYXRlcmlhbCYmKHRoaXMub3ZlcnJpZGVNYXRlcmlhbD1iLm92ZXJyaWRlTWF0ZXJpYWwuY2xvbmUoKSk7dGhpcy5hdXRvVXBkYXRlPWIuYXV0b1VwZGF0ZTt0aGlzLm1hdHJpeEF1dG9VcGRhdGU9Yi5tYXRyaXhBdXRvVXBkYXRlO3JldHVybiB0aGlzfSx0b0pTT046ZnVuY3Rpb24oYil7dmFyIGU9Uy5wcm90b3R5cGUudG9KU09OLmNhbGwodGhpcyxiKTtudWxsIT09dGhpcy5iYWNrZ3JvdW5kJiYoZS5vYmplY3QuYmFja2dyb3VuZD10aGlzLmJhY2tncm91bmQudG9KU09OKGIpKTtudWxsIT09dGhpcy5mb2cmJihlLm9iamVjdC5mb2c9dGhpcy5mb2cudG9KU09OKCkpO3JldHVybiBlfSxkaXNwb3NlOmZ1bmN0aW9uKCl7dGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiJkaXNwb3NlIn0pfX0pOwpPYmplY3QuZGVmaW5lUHJvcGVydHkoaGUucHJvdG90eXBlLCJuZWVkc1VwZGF0ZSIse3NldDpmdW5jdGlvbihiKXshMD09PWImJnRoaXMudmVyc2lvbisrfX0pO09iamVjdC5hc3NpZ24oaGUucHJvdG90eXBlLHtpc0ludGVybGVhdmVkQnVmZmVyOiEwLG9uVXBsb2FkQ2FsbGJhY2s6ZnVuY3Rpb24oKXt9LHNldEFycmF5OmZ1bmN0aW9uKGIpe2lmKEFycmF5LmlzQXJyYXkoYikpdGhyb3cgbmV3IFR5cGVFcnJvcigiVEhSRUUuQnVmZmVyQXR0cmlidXRlOiBhcnJheSBzaG91bGQgYmUgYSBUeXBlZCBBcnJheS4iKTt0aGlzLmNvdW50PXZvaWQgMCE9PWI/Yi5sZW5ndGgvdGhpcy5zdHJpZGU6MDt0aGlzLmFycmF5PWI7cmV0dXJuIHRoaXN9LHNldER5bmFtaWM6ZnVuY3Rpb24oYil7dGhpcy5keW5hbWljPWI7cmV0dXJuIHRoaXN9LGNvcHk6ZnVuY3Rpb24oYil7dGhpcy5hcnJheT1uZXcgYi5hcnJheS5jb25zdHJ1Y3RvcihiLmFycmF5KTt0aGlzLmNvdW50PWIuY291bnQ7dGhpcy5zdHJpZGU9CmIuc3RyaWRlO3RoaXMuZHluYW1pYz1iLmR5bmFtaWM7cmV0dXJuIHRoaXN9LGNvcHlBdDpmdW5jdGlvbihiLGUsaCl7Yio9dGhpcy5zdHJpZGU7aCo9ZS5zdHJpZGU7Zm9yKHZhciBuPTAsdT10aGlzLnN0cmlkZTtuPHU7bisrKXRoaXMuYXJyYXlbYituXT1lLmFycmF5W2grbl07cmV0dXJuIHRoaXN9LHNldDpmdW5jdGlvbihiLGUpe3ZvaWQgMD09PWUmJihlPTApO3RoaXMuYXJyYXkuc2V0KGIsZSk7cmV0dXJuIHRoaXN9LGNsb25lOmZ1bmN0aW9uKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKS5jb3B5KHRoaXMpfSxvblVwbG9hZDpmdW5jdGlvbihiKXt0aGlzLm9uVXBsb2FkQ2FsbGJhY2s9YjtyZXR1cm4gdGhpc319KTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhSZi5wcm90b3R5cGUse2NvdW50OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kYXRhLmNvdW50fX0sYXJyYXk6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRhdGEuYXJyYXl9fX0pO09iamVjdC5hc3NpZ24oUmYucHJvdG90eXBlLAp7aXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZTohMCxzZXRYOmZ1bmN0aW9uKGIsZSl7dGhpcy5kYXRhLmFycmF5W2IqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldF09ZTtyZXR1cm4gdGhpc30sc2V0WTpmdW5jdGlvbihiLGUpe3RoaXMuZGF0YS5hcnJheVtiKnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQrMV09ZTtyZXR1cm4gdGhpc30sc2V0WjpmdW5jdGlvbihiLGUpe3RoaXMuZGF0YS5hcnJheVtiKnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQrMl09ZTtyZXR1cm4gdGhpc30sc2V0VzpmdW5jdGlvbihiLGUpe3RoaXMuZGF0YS5hcnJheVtiKnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQrM109ZTtyZXR1cm4gdGhpc30sZ2V0WDpmdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5W2IqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldF19LGdldFk6ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuZGF0YS5hcnJheVtiKnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQrCjFdfSxnZXRaOmZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmRhdGEuYXJyYXlbYip0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0KzJdfSxnZXRXOmZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmRhdGEuYXJyYXlbYip0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0KzNdfSxzZXRYWTpmdW5jdGlvbihiLGUsaCl7Yj1iKnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQ7dGhpcy5kYXRhLmFycmF5W2IrMF09ZTt0aGlzLmRhdGEuYXJyYXlbYisxXT1oO3JldHVybiB0aGlzfSxzZXRYWVo6ZnVuY3Rpb24oYixlLGgsbil7Yj1iKnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQ7dGhpcy5kYXRhLmFycmF5W2IrMF09ZTt0aGlzLmRhdGEuYXJyYXlbYisxXT1oO3RoaXMuZGF0YS5hcnJheVtiKzJdPW47cmV0dXJuIHRoaXN9LHNldFhZWlc6ZnVuY3Rpb24oYixlLGgsbix1KXtiPWIqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldDt0aGlzLmRhdGEuYXJyYXlbYiswXT1lO3RoaXMuZGF0YS5hcnJheVtiKwoxXT1oO3RoaXMuZGF0YS5hcnJheVtiKzJdPW47dGhpcy5kYXRhLmFycmF5W2IrM109dTtyZXR1cm4gdGhpc319KTtWZC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShHYS5wcm90b3R5cGUpO1ZkLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1WZDtWZC5wcm90b3R5cGUuaXNTcHJpdGVNYXRlcmlhbD0hMDtWZC5wcm90b3R5cGUuY29weT1mdW5jdGlvbihiKXtHYS5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsYik7dGhpcy5jb2xvci5jb3B5KGIuY29sb3IpO3RoaXMubWFwPWIubWFwO3RoaXMucm90YXRpb249Yi5yb3RhdGlvbjt0aGlzLnNpemVBdHRlbnVhdGlvbj1iLnNpemVBdHRlbnVhdGlvbjtyZXR1cm4gdGhpc307dmFyIFFlO1NmLnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoUy5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpTZixpc1Nwcml0ZTohMCxyYXljYXN0OmZ1bmN0aW9uKCl7ZnVuY3Rpb24gYihVLFcsWixmYSxxYSxyYSl7dS5zdWJWZWN0b3JzKFUsWikuYWRkU2NhbGFyKC41KS5tdWx0aXBseShmYSk7CnZvaWQgMCE9PXFhPyh3Lng9cmEqdS54LXFhKnUueSx3Lnk9cWEqdS54K3JhKnUueSk6dy5jb3B5KHUpO1UuY29weShXKTtVLngrPXcueDtVLnkrPXcueTtVLmFwcGx5TWF0cml4NCh6KX12YXIgZT1uZXcgZyxoPW5ldyBnLG49bmV3IGcsdT1uZXcgZCx3PW5ldyBkLHo9bmV3IEMsRT1uZXcgZyxIPW5ldyBnLEk9bmV3IGcsTz1uZXcgZCxRPW5ldyBkLFI9bmV3IGQ7cmV0dXJuIGZ1bmN0aW9uKFUsVyl7aC5zZXRGcm9tTWF0cml4U2NhbGUodGhpcy5tYXRyaXhXb3JsZCk7ei5nZXRJbnZlcnNlKHRoaXMubW9kZWxWaWV3TWF0cml4KS5wcmVtdWx0aXBseSh0aGlzLm1hdHJpeFdvcmxkKTtuLnNldEZyb21NYXRyaXhQb3NpdGlvbih0aGlzLm1vZGVsVmlld01hdHJpeCk7dmFyIFo9dGhpcy5tYXRlcmlhbC5yb3RhdGlvbjtpZigwIT09Wil7dmFyIGZhPU1hdGguY29zKFopO3ZhciBxYT1NYXRoLnNpbihaKX1aPXRoaXMuY2VudGVyO2IoRS5zZXQoLS41LC0uNSwwKSxuLFosaCxxYSxmYSk7YihILnNldCguNSwKLS41LDApLG4sWixoLHFhLGZhKTtiKEkuc2V0KC41LC41LDApLG4sWixoLHFhLGZhKTtPLnNldCgwLDApO1Euc2V0KDEsMCk7Ui5zZXQoMSwxKTt2YXIgcmE9VS5yYXkuaW50ZXJzZWN0VHJpYW5nbGUoRSxILEksITEsZSk7aWYobnVsbD09PXJhJiYoYihILnNldCgtLjUsLjUsMCksbixaLGgscWEsZmEpLFEuc2V0KDAsMSkscmE9VS5yYXkuaW50ZXJzZWN0VHJpYW5nbGUoRSxJLEgsITEsZSksbnVsbD09PXJhKSlyZXR1cm47cWE9VS5yYXkub3JpZ2luLmRpc3RhbmNlVG8oZSk7cWE8VS5uZWFyfHxxYT5VLmZhcnx8Vy5wdXNoKHtkaXN0YW5jZTpxYSxwb2ludDplLmNsb25lKCksdXY6Q2IuZ2V0VVYoZSxFLEgsSSxPLFEsUixuZXcgZCksZmFjZTpudWxsLG9iamVjdDp0aGlzfSl9fSgpLGNsb25lOmZ1bmN0aW9uKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMubWF0ZXJpYWwpKS5jb3B5KHRoaXMpfSxjb3B5OmZ1bmN0aW9uKGIpe1MucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLApiKTt2b2lkIDAhPT1iLmNlbnRlciYmdGhpcy5jZW50ZXIuY29weShiLmNlbnRlcik7cmV0dXJuIHRoaXN9fSk7VGYucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShTLnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOlRmLGlzTE9EOiEwLGNvcHk6ZnVuY3Rpb24oYil7Uy5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsYiwhMSk7Yj1iLmxldmVscztmb3IodmFyIGU9MCxoPWIubGVuZ3RoO2U8aDtlKyspe3ZhciBuPWJbZV07dGhpcy5hZGRMZXZlbChuLm9iamVjdC5jbG9uZSgpLG4uZGlzdGFuY2UpfXJldHVybiB0aGlzfSxhZGRMZXZlbDpmdW5jdGlvbihiLGUpe3ZvaWQgMD09PWUmJihlPTApO2U9TWF0aC5hYnMoZSk7Zm9yKHZhciBoPXRoaXMubGV2ZWxzLG49MDtuPGgubGVuZ3RoJiYhKGU8aFtuXS5kaXN0YW5jZSk7bisrKTtoLnNwbGljZShuLDAse2Rpc3RhbmNlOmUsb2JqZWN0OmJ9KTt0aGlzLmFkZChiKTtyZXR1cm4gdGhpc30sZ2V0T2JqZWN0Rm9yRGlzdGFuY2U6ZnVuY3Rpb24oYil7Zm9yKHZhciBlPQp0aGlzLmxldmVscyxoPTEsbj1lLmxlbmd0aDtoPG4mJiEoYjxlW2hdLmRpc3RhbmNlKTtoKyspO3JldHVybiBlW2gtMV0ub2JqZWN0fSxyYXljYXN0OmZ1bmN0aW9uKCl7dmFyIGI9bmV3IGc7cmV0dXJuIGZ1bmN0aW9uKGUsaCl7Yi5zZXRGcm9tTWF0cml4UG9zaXRpb24odGhpcy5tYXRyaXhXb3JsZCk7dGhpcy5nZXRPYmplY3RGb3JEaXN0YW5jZShlLnJheS5vcmlnaW4uZGlzdGFuY2VUbyhiKSkucmF5Y2FzdChlLGgpfX0oKSx1cGRhdGU6ZnVuY3Rpb24oKXt2YXIgYj1uZXcgZyxlPW5ldyBnO3JldHVybiBmdW5jdGlvbihoKXt2YXIgbj10aGlzLmxldmVscztpZigxPG4ubGVuZ3RoKXtiLnNldEZyb21NYXRyaXhQb3NpdGlvbihoLm1hdHJpeFdvcmxkKTtlLnNldEZyb21NYXRyaXhQb3NpdGlvbih0aGlzLm1hdHJpeFdvcmxkKTtoPWIuZGlzdGFuY2VUbyhlKTtuWzBdLm9iamVjdC52aXNpYmxlPSEwO2Zvcih2YXIgdT0xLHc9bi5sZW5ndGg7dTx3O3UrKylpZihoPj1uW3VdLmRpc3RhbmNlKW5bdS0KMV0ub2JqZWN0LnZpc2libGU9ITEsblt1XS5vYmplY3QudmlzaWJsZT0hMDtlbHNlIGJyZWFrO2Zvcig7dTx3O3UrKyluW3VdLm9iamVjdC52aXNpYmxlPSExfX19KCksdG9KU09OOmZ1bmN0aW9uKGIpe2I9Uy5wcm90b3R5cGUudG9KU09OLmNhbGwodGhpcyxiKTtiLm9iamVjdC5sZXZlbHM9W107Zm9yKHZhciBlPXRoaXMubGV2ZWxzLGg9MCxuPWUubGVuZ3RoO2g8bjtoKyspe3ZhciB1PWVbaF07Yi5vYmplY3QubGV2ZWxzLnB1c2goe29iamVjdDp1Lm9iamVjdC51dWlkLGRpc3RhbmNlOnUuZGlzdGFuY2V9KX1yZXR1cm4gYn19KTtVZi5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKHRiLnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOlVmLGlzU2tpbm5lZE1lc2g6ITAsYmluZDpmdW5jdGlvbihiLGUpe3RoaXMuc2tlbGV0b249Yjt2b2lkIDA9PT1lJiYodGhpcy51cGRhdGVNYXRyaXhXb3JsZCghMCksdGhpcy5za2VsZXRvbi5jYWxjdWxhdGVJbnZlcnNlcygpLGU9CnRoaXMubWF0cml4V29ybGQpO3RoaXMuYmluZE1hdHJpeC5jb3B5KGUpO3RoaXMuYmluZE1hdHJpeEludmVyc2UuZ2V0SW52ZXJzZShlKX0scG9zZTpmdW5jdGlvbigpe3RoaXMuc2tlbGV0b24ucG9zZSgpfSxub3JtYWxpemVTa2luV2VpZ2h0czpmdW5jdGlvbigpe2Zvcih2YXIgYj1uZXcgbSxlPXRoaXMuZ2VvbWV0cnkuYXR0cmlidXRlcy5za2luV2VpZ2h0LGg9MCxuPWUuY291bnQ7aDxuO2grKyl7Yi54PWUuZ2V0WChoKTtiLnk9ZS5nZXRZKGgpO2Iuej1lLmdldFooaCk7Yi53PWUuZ2V0VyhoKTt2YXIgdT0xL2IubWFuaGF0dGFuTGVuZ3RoKCk7SW5maW5pdHkhPT11P2IubXVsdGlwbHlTY2FsYXIodSk6Yi5zZXQoMSwwLDAsMCk7ZS5zZXRYWVpXKGgsYi54LGIueSxiLnosYi53KX19LHVwZGF0ZU1hdHJpeFdvcmxkOmZ1bmN0aW9uKGIpe3RiLnByb3RvdHlwZS51cGRhdGVNYXRyaXhXb3JsZC5jYWxsKHRoaXMsYik7ImF0dGFjaGVkIj09PXRoaXMuYmluZE1vZGU/dGhpcy5iaW5kTWF0cml4SW52ZXJzZS5nZXRJbnZlcnNlKHRoaXMubWF0cml4V29ybGQpOgoiZGV0YWNoZWQiPT09dGhpcy5iaW5kTW9kZT90aGlzLmJpbmRNYXRyaXhJbnZlcnNlLmdldEludmVyc2UodGhpcy5iaW5kTWF0cml4KTpjb25zb2xlLndhcm4oIlRIUkVFLlNraW5uZWRNZXNoOiBVbnJlY29nbml6ZWQgYmluZE1vZGU6ICIrdGhpcy5iaW5kTW9kZSl9LGNsb25lOmZ1bmN0aW9uKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMuZ2VvbWV0cnksdGhpcy5tYXRlcmlhbCkpLmNvcHkodGhpcyl9fSk7T2JqZWN0LmFzc2lnbihqaC5wcm90b3R5cGUse2NhbGN1bGF0ZUludmVyc2VzOmZ1bmN0aW9uKCl7dGhpcy5ib25lSW52ZXJzZXM9W107Zm9yKHZhciBiPTAsZT10aGlzLmJvbmVzLmxlbmd0aDtiPGU7YisrKXt2YXIgaD1uZXcgQzt0aGlzLmJvbmVzW2JdJiZoLmdldEludmVyc2UodGhpcy5ib25lc1tiXS5tYXRyaXhXb3JsZCk7dGhpcy5ib25lSW52ZXJzZXMucHVzaChoKX19LHBvc2U6ZnVuY3Rpb24oKXt2YXIgYixlO3ZhciBoPTA7Zm9yKGU9dGhpcy5ib25lcy5sZW5ndGg7aDwKZTtoKyspKGI9dGhpcy5ib25lc1toXSkmJmIubWF0cml4V29ybGQuZ2V0SW52ZXJzZSh0aGlzLmJvbmVJbnZlcnNlc1toXSk7aD0wO2ZvcihlPXRoaXMuYm9uZXMubGVuZ3RoO2g8ZTtoKyspaWYoYj10aGlzLmJvbmVzW2hdKWIucGFyZW50JiZiLnBhcmVudC5pc0JvbmU/KGIubWF0cml4LmdldEludmVyc2UoYi5wYXJlbnQubWF0cml4V29ybGQpLGIubWF0cml4Lm11bHRpcGx5KGIubWF0cml4V29ybGQpKTpiLm1hdHJpeC5jb3B5KGIubWF0cml4V29ybGQpLGIubWF0cml4LmRlY29tcG9zZShiLnBvc2l0aW9uLGIucXVhdGVybmlvbixiLnNjYWxlKX0sdXBkYXRlOmZ1bmN0aW9uKCl7dmFyIGI9bmV3IEMsZT1uZXcgQztyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIGg9dGhpcy5ib25lcyxuPXRoaXMuYm9uZUludmVyc2VzLHU9dGhpcy5ib25lTWF0cmljZXMsdz10aGlzLmJvbmVUZXh0dXJlLHo9MCxFPWgubGVuZ3RoO3o8RTt6KyspYi5tdWx0aXBseU1hdHJpY2VzKGhbel0/aFt6XS5tYXRyaXhXb3JsZDoKZSxuW3pdKSxiLnRvQXJyYXkodSwxNip6KTt2b2lkIDAhPT13JiYody5uZWVkc1VwZGF0ZT0hMCl9fSgpLGNsb25lOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBqaCh0aGlzLmJvbmVzLHRoaXMuYm9uZUludmVyc2VzKX0sZ2V0Qm9uZUJ5TmFtZTpmdW5jdGlvbihiKXtmb3IodmFyIGU9MCxoPXRoaXMuYm9uZXMubGVuZ3RoO2U8aDtlKyspe3ZhciBuPXRoaXMuYm9uZXNbZV07aWYobi5uYW1lPT09YilyZXR1cm4gbn19fSk7emkucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShTLnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOnppLGlzQm9uZTohMH0pO0xiLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEdhLnByb3RvdHlwZSk7TGIucHJvdG90eXBlLmNvbnN0cnVjdG9yPUxiO0xiLnByb3RvdHlwZS5pc0xpbmVCYXNpY01hdGVyaWFsPSEwO0xiLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKGIpe0dhLnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyxiKTt0aGlzLmNvbG9yLmNvcHkoYi5jb2xvcik7CnRoaXMubGluZXdpZHRoPWIubGluZXdpZHRoO3RoaXMubGluZWNhcD1iLmxpbmVjYXA7dGhpcy5saW5lam9pbj1iLmxpbmVqb2luO3JldHVybiB0aGlzfTtsYy5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKFMucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6bGMsaXNMaW5lOiEwLGNvbXB1dGVMaW5lRGlzdGFuY2VzOmZ1bmN0aW9uKCl7dmFyIGI9bmV3IGcsZT1uZXcgZztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgaD10aGlzLmdlb21ldHJ5O2lmKGguaXNCdWZmZXJHZW9tZXRyeSlpZihudWxsPT09aC5pbmRleCl7Zm9yKHZhciBuPWguYXR0cmlidXRlcy5wb3NpdGlvbix1PVswXSx3PTEsej1uLmNvdW50O3c8ejt3KyspYi5mcm9tQnVmZmVyQXR0cmlidXRlKG4sdy0xKSxlLmZyb21CdWZmZXJBdHRyaWJ1dGUobix3KSx1W3ddPXVbdy0xXSx1W3ddKz1iLmRpc3RhbmNlVG8oZSk7aC5hZGRBdHRyaWJ1dGUoImxpbmVEaXN0YW5jZSIsbmV3IGJhKHUsMSkpfWVsc2UgY29uc29sZS53YXJuKCJUSFJFRS5MaW5lLmNvbXB1dGVMaW5lRGlzdGFuY2VzKCk6IENvbXB1dGF0aW9uIG9ubHkgcG9zc2libGUgd2l0aCBub24taW5kZXhlZCBCdWZmZXJHZW9tZXRyeS4iKTsKZWxzZSBpZihoLmlzR2VvbWV0cnkpZm9yKG49aC52ZXJ0aWNlcyx1PWgubGluZURpc3RhbmNlcyx1WzBdPTAsdz0xLHo9bi5sZW5ndGg7dzx6O3crKyl1W3ddPXVbdy0xXSx1W3ddKz1uW3ctMV0uZGlzdGFuY2VUbyhuW3ddKTtyZXR1cm4gdGhpc319KCkscmF5Y2FzdDpmdW5jdGlvbigpe3ZhciBiPW5ldyBDLGU9bmV3IHhiLGg9bmV3IEE7cmV0dXJuIGZ1bmN0aW9uKG4sdSl7dmFyIHc9bi5saW5lUHJlY2lzaW9uLHo9dGhpcy5nZW9tZXRyeSxFPXRoaXMubWF0cml4V29ybGQ7bnVsbD09PXouYm91bmRpbmdTcGhlcmUmJnouY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCk7aC5jb3B5KHouYm91bmRpbmdTcGhlcmUpO2guYXBwbHlNYXRyaXg0KEUpO2gucmFkaXVzKz13O2lmKCExIT09bi5yYXkuaW50ZXJzZWN0c1NwaGVyZShoKSl7Yi5nZXRJbnZlcnNlKEUpO2UuY29weShuLnJheSkuYXBwbHlNYXRyaXg0KGIpO3cvPSh0aGlzLnNjYWxlLngrdGhpcy5zY2FsZS55K3RoaXMuc2NhbGUueikvCjM7dyo9dzt2YXIgSD1uZXcgZyxJPW5ldyBnO0U9bmV3IGc7dmFyIE89bmV3IGcsUT10aGlzJiZ0aGlzLmlzTGluZVNlZ21lbnRzPzI6MTtpZih6LmlzQnVmZmVyR2VvbWV0cnkpe3ZhciBSPXouaW5kZXgsVT16LmF0dHJpYnV0ZXMucG9zaXRpb24uYXJyYXk7aWYobnVsbCE9PVIpe1I9Ui5hcnJheTt6PTA7Zm9yKHZhciBXPVIubGVuZ3RoLTE7ejxXO3orPVEpe3ZhciBaPVJbeisxXTtILmZyb21BcnJheShVLDMqUlt6XSk7SS5mcm9tQXJyYXkoVSwzKlopO1o9ZS5kaXN0YW5jZVNxVG9TZWdtZW50KEgsSSxPLEUpO1o+d3x8KE8uYXBwbHlNYXRyaXg0KHRoaXMubWF0cml4V29ybGQpLFo9bi5yYXkub3JpZ2luLmRpc3RhbmNlVG8oTyksWjxuLm5lYXJ8fFo+bi5mYXJ8fHUucHVzaCh7ZGlzdGFuY2U6Wixwb2ludDpFLmNsb25lKCkuYXBwbHlNYXRyaXg0KHRoaXMubWF0cml4V29ybGQpLGluZGV4OnosZmFjZTpudWxsLGZhY2VJbmRleDpudWxsLG9iamVjdDp0aGlzfSkpfX1lbHNlIGZvcih6PQowLFc9VS5sZW5ndGgvMy0xO3o8Vzt6Kz1RKUguZnJvbUFycmF5KFUsMyp6KSxJLmZyb21BcnJheShVLDMqeiszKSxaPWUuZGlzdGFuY2VTcVRvU2VnbWVudChILEksTyxFKSxaPnd8fChPLmFwcGx5TWF0cml4NCh0aGlzLm1hdHJpeFdvcmxkKSxaPW4ucmF5Lm9yaWdpbi5kaXN0YW5jZVRvKE8pLFo8bi5uZWFyfHxaPm4uZmFyfHx1LnB1c2goe2Rpc3RhbmNlOloscG9pbnQ6RS5jbG9uZSgpLmFwcGx5TWF0cml4NCh0aGlzLm1hdHJpeFdvcmxkKSxpbmRleDp6LGZhY2U6bnVsbCxmYWNlSW5kZXg6bnVsbCxvYmplY3Q6dGhpc30pKX1lbHNlIGlmKHouaXNHZW9tZXRyeSlmb3IoSD16LnZlcnRpY2VzLEk9SC5sZW5ndGgsej0wO3o8SS0xO3orPVEpWj1lLmRpc3RhbmNlU3FUb1NlZ21lbnQoSFt6XSxIW3orMV0sTyxFKSxaPnd8fChPLmFwcGx5TWF0cml4NCh0aGlzLm1hdHJpeFdvcmxkKSxaPW4ucmF5Lm9yaWdpbi5kaXN0YW5jZVRvKE8pLFo8bi5uZWFyfHxaPm4uZmFyfHx1LnB1c2goe2Rpc3RhbmNlOlosCnBvaW50OkUuY2xvbmUoKS5hcHBseU1hdHJpeDQodGhpcy5tYXRyaXhXb3JsZCksaW5kZXg6eixmYWNlOm51bGwsZmFjZUluZGV4Om51bGwsb2JqZWN0OnRoaXN9KSl9fX0oKSxjbG9uZTpmdW5jdGlvbigpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLmdlb21ldHJ5LHRoaXMubWF0ZXJpYWwpKS5jb3B5KHRoaXMpfX0pO1BiLnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUobGMucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6UGIsaXNMaW5lU2VnbWVudHM6ITAsY29tcHV0ZUxpbmVEaXN0YW5jZXM6ZnVuY3Rpb24oKXt2YXIgYj1uZXcgZyxlPW5ldyBnO3JldHVybiBmdW5jdGlvbigpe3ZhciBoPXRoaXMuZ2VvbWV0cnk7aWYoaC5pc0J1ZmZlckdlb21ldHJ5KWlmKG51bGw9PT1oLmluZGV4KXtmb3IodmFyIG49aC5hdHRyaWJ1dGVzLnBvc2l0aW9uLHU9W10sdz0wLHo9bi5jb3VudDt3PHo7dys9MiliLmZyb21CdWZmZXJBdHRyaWJ1dGUobix3KSxlLmZyb21CdWZmZXJBdHRyaWJ1dGUobiwKdysxKSx1W3ddPTA9PT13PzA6dVt3LTFdLHVbdysxXT11W3ddK2IuZGlzdGFuY2VUbyhlKTtoLmFkZEF0dHJpYnV0ZSgibGluZURpc3RhbmNlIixuZXcgYmEodSwxKSl9ZWxzZSBjb25zb2xlLndhcm4oIlRIUkVFLkxpbmVTZWdtZW50cy5jb21wdXRlTGluZURpc3RhbmNlcygpOiBDb21wdXRhdGlvbiBvbmx5IHBvc3NpYmxlIHdpdGggbm9uLWluZGV4ZWQgQnVmZmVyR2VvbWV0cnkuIik7ZWxzZSBpZihoLmlzR2VvbWV0cnkpZm9yKG49aC52ZXJ0aWNlcyx1PWgubGluZURpc3RhbmNlcyx3PTAsej1uLmxlbmd0aDt3PHo7dys9MiliLmNvcHkoblt3XSksZS5jb3B5KG5bdysxXSksdVt3XT0wPT09dz8wOnVbdy0xXSx1W3crMV09dVt3XStiLmRpc3RhbmNlVG8oZSk7cmV0dXJuIHRoaXN9fSgpfSk7a2gucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShsYy5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpraCxpc0xpbmVMb29wOiEwfSk7U2MucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoR2EucHJvdG90eXBlKTsKU2MucHJvdG90eXBlLmNvbnN0cnVjdG9yPVNjO1NjLnByb3RvdHlwZS5pc1BvaW50c01hdGVyaWFsPSEwO1NjLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKGIpe0dhLnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyxiKTt0aGlzLmNvbG9yLmNvcHkoYi5jb2xvcik7dGhpcy5tYXA9Yi5tYXA7dGhpcy5zaXplPWIuc2l6ZTt0aGlzLnNpemVBdHRlbnVhdGlvbj1iLnNpemVBdHRlbnVhdGlvbjt0aGlzLm1vcnBoVGFyZ2V0cz1iLm1vcnBoVGFyZ2V0cztyZXR1cm4gdGhpc307UmUucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShTLnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOlJlLGlzUG9pbnRzOiEwLHJheWNhc3Q6ZnVuY3Rpb24oKXt2YXIgYj1uZXcgQyxlPW5ldyB4YixoPW5ldyBBO3JldHVybiBmdW5jdGlvbihuLHUpe2Z1bmN0aW9uIHcoZmEscWEpe3ZhciByYT1lLmRpc3RhbmNlU3FUb1BvaW50KGZhKTtyYTxPJiYoZS5jbG9zZXN0UG9pbnRUb1BvaW50KGZhLFEpLFEuYXBwbHlNYXRyaXg0KEgpLApmYT1uLnJheS5vcmlnaW4uZGlzdGFuY2VUbyhRKSxmYTxuLm5lYXJ8fGZhPm4uZmFyfHx1LnB1c2goe2Rpc3RhbmNlOmZhLGRpc3RhbmNlVG9SYXk6TWF0aC5zcXJ0KHJhKSxwb2ludDpRLmNsb25lKCksaW5kZXg6cWEsZmFjZTpudWxsLG9iamVjdDp6fSkpfXZhciB6PXRoaXMsRT10aGlzLmdlb21ldHJ5LEg9dGhpcy5tYXRyaXhXb3JsZCxJPW4ucGFyYW1zLlBvaW50cy50aHJlc2hvbGQ7bnVsbD09PUUuYm91bmRpbmdTcGhlcmUmJkUuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCk7aC5jb3B5KEUuYm91bmRpbmdTcGhlcmUpO2guYXBwbHlNYXRyaXg0KEgpO2gucmFkaXVzKz1JO2lmKCExIT09bi5yYXkuaW50ZXJzZWN0c1NwaGVyZShoKSl7Yi5nZXRJbnZlcnNlKEgpO2UuY29weShuLnJheSkuYXBwbHlNYXRyaXg0KGIpO0kvPSh0aGlzLnNjYWxlLngrdGhpcy5zY2FsZS55K3RoaXMuc2NhbGUueikvMzt2YXIgTz1JKkk7ST1uZXcgZzt2YXIgUT1uZXcgZztpZihFLmlzQnVmZmVyR2VvbWV0cnkpe3ZhciBSPQpFLmluZGV4O0U9RS5hdHRyaWJ1dGVzLnBvc2l0aW9uLmFycmF5O2lmKG51bGwhPT1SKXt2YXIgVT1SLmFycmF5O1I9MDtmb3IodmFyIFc9VS5sZW5ndGg7UjxXO1IrKyl7dmFyIFo9VVtSXTtJLmZyb21BcnJheShFLDMqWik7dyhJLFopfX1lbHNlIGZvcihSPTAsVT1FLmxlbmd0aC8zO1I8VTtSKyspSS5mcm9tQXJyYXkoRSwzKlIpLHcoSSxSKX1lbHNlIGZvcihJPUUudmVydGljZXMsUj0wLFU9SS5sZW5ndGg7UjxVO1IrKyl3KElbUl0sUil9fX0oKSxjbG9uZTpmdW5jdGlvbigpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLmdlb21ldHJ5LHRoaXMubWF0ZXJpYWwpKS5jb3B5KHRoaXMpfX0pO0FpLnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoay5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpBaSxpc1ZpZGVvVGV4dHVyZTohMCx1cGRhdGU6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLmltYWdlO2IucmVhZHlTdGF0ZT49Yi5IQVZFX0NVUlJFTlRfREFUQSYmCih0aGlzLm5lZWRzVXBkYXRlPSEwKX19KTtTZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShrLnByb3RvdHlwZSk7U2UucHJvdG90eXBlLmNvbnN0cnVjdG9yPVNlO1NlLnByb3RvdHlwZS5pc0NvbXByZXNzZWRUZXh0dXJlPSEwO1ZmLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGsucHJvdG90eXBlKTtWZi5wcm90b3R5cGUuY29uc3RydWN0b3I9VmY7VmYucHJvdG90eXBlLmlzQ2FudmFzVGV4dHVyZT0hMDtXZi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShrLnByb3RvdHlwZSk7V2YucHJvdG90eXBlLmNvbnN0cnVjdG9yPVdmO1dmLnByb3RvdHlwZS5pc0RlcHRoVGV4dHVyZT0hMDtUZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh4YS5wcm90b3R5cGUpO1RlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1UZTtYZi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShOLnByb3RvdHlwZSk7WGYucHJvdG90eXBlLmNvbnN0cnVjdG9yPVhmO1VlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHhhLnByb3RvdHlwZSk7ClVlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1VZTtZZi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShOLnByb3RvdHlwZSk7WWYucHJvdG90eXBlLmNvbnN0cnVjdG9yPVlmO3pjLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHhhLnByb3RvdHlwZSk7emMucHJvdG90eXBlLmNvbnN0cnVjdG9yPXpjO1pmLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKE4ucHJvdG90eXBlKTtaZi5wcm90b3R5cGUuY29uc3RydWN0b3I9WmY7VmUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoemMucHJvdG90eXBlKTtWZS5wcm90b3R5cGUuY29uc3RydWN0b3I9VmU7JGYucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoTi5wcm90b3R5cGUpOyRmLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj0kZjtpZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh6Yy5wcm90b3R5cGUpO2llLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1pZTthZy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShOLnByb3RvdHlwZSk7YWcucHJvdG90eXBlLmNvbnN0cnVjdG9yPQphZztXZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh6Yy5wcm90b3R5cGUpO1dlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1XZTtiZy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShOLnByb3RvdHlwZSk7YmcucHJvdG90eXBlLmNvbnN0cnVjdG9yPWJnO1hlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHpjLnByb3RvdHlwZSk7WGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPVhlO2NnLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKE4ucHJvdG90eXBlKTtjZy5wcm90b3R5cGUuY29uc3RydWN0b3I9Y2c7amUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoeGEucHJvdG90eXBlKTtqZS5wcm90b3R5cGUuY29uc3RydWN0b3I9amU7amUucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3ZhciBiPXhhLnByb3RvdHlwZS50b0pTT04uY2FsbCh0aGlzKTtiLnBhdGg9dGhpcy5wYXJhbWV0ZXJzLnBhdGgudG9KU09OKCk7cmV0dXJuIGJ9O2RnLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKE4ucHJvdG90eXBlKTsKZGcucHJvdG90eXBlLmNvbnN0cnVjdG9yPWRnO1llLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHhhLnByb3RvdHlwZSk7WWUucHJvdG90eXBlLmNvbnN0cnVjdG9yPVllO2VnLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKE4ucHJvdG90eXBlKTtlZy5wcm90b3R5cGUuY29uc3RydWN0b3I9ZWc7WmUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoeGEucHJvdG90eXBlKTtaZS5wcm90b3R5cGUuY29uc3RydWN0b3I9WmU7dmFyIG5wPXt0cmlhbmd1bGF0ZTpmdW5jdGlvbihiLGUsaCl7aD1ofHwyO3ZhciBuPWUmJmUubGVuZ3RoLHU9bj9lWzBdKmg6Yi5sZW5ndGgsdz13bChiLDAsdSxoLCEwKSx6PVtdO2lmKCF3KXJldHVybiB6O24mJih3PVNvKGIsZSx3LGgpKTtpZihiLmxlbmd0aD44MCpoKXt2YXIgRT1lPWJbMF07dmFyIEg9bj1iWzFdO2Zvcih2YXIgST1oO0k8dTtJKz1oKXt2YXIgTz1iW0ldO3ZhciBRPWJbSSsxXTtPPEUmJihFPU8pO1E8SCYmKEg9USk7Tz5lJiYoZT1PKTtRPm4mJihuPQpRKX1PPU1hdGgubWF4KGUtRSxuLUgpO089MCE9PU8/MS9POjB9aGcodyx6LGgsRSxILE8pO3JldHVybiB6fX0seWQ9e2FyZWE6ZnVuY3Rpb24oYil7Zm9yKHZhciBlPWIubGVuZ3RoLGg9MCxuPWUtMSx1PTA7dTxlO249dSsrKWgrPWJbbl0ueCpiW3VdLnktYlt1XS54KmJbbl0ueTtyZXR1cm4uNSpofSxpc0Nsb2NrV2lzZTpmdW5jdGlvbihiKXtyZXR1cm4gMD55ZC5hcmVhKGIpfSx0cmlhbmd1bGF0ZVNoYXBlOmZ1bmN0aW9uKGIsZSl7dmFyIGg9W10sbj1bXSx1PVtdO0FsKGIpO0JsKGgsYik7dmFyIHc9Yi5sZW5ndGg7ZS5mb3JFYWNoKEFsKTtmb3IoYj0wO2I8ZS5sZW5ndGg7YisrKW4ucHVzaCh3KSx3Kz1lW2JdLmxlbmd0aCxCbChoLGVbYl0pO2U9bnAudHJpYW5ndWxhdGUoaCxuKTtmb3IoYj0wO2I8ZS5sZW5ndGg7Yis9Myl1LnB1c2goZS5zbGljZShiLGIrMykpO3JldHVybiB1fX07bGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoTi5wcm90b3R5cGUpO2xlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj0KbGU7bGUucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3ZhciBiPU4ucHJvdG90eXBlLnRvSlNPTi5jYWxsKHRoaXMpO3JldHVybiBDbCh0aGlzLnBhcmFtZXRlcnMuc2hhcGVzLHRoaXMucGFyYW1ldGVycy5vcHRpb25zLGIpfTttZC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh4YS5wcm90b3R5cGUpO21kLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1tZDttZC5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7dmFyIGI9eGEucHJvdG90eXBlLnRvSlNPTi5jYWxsKHRoaXMpO3JldHVybiBDbCh0aGlzLnBhcmFtZXRlcnMuc2hhcGVzLHRoaXMucGFyYW1ldGVycy5vcHRpb25zLGIpfTt2YXIgJG89e2dlbmVyYXRlVG9wVVY6ZnVuY3Rpb24oYixlLGgsbix1KXtiPWVbMypuXTtuPWVbMypuKzFdO3ZhciB3PWVbMyp1XTt1PWVbMyp1KzFdO3JldHVybltuZXcgZChlWzMqaF0sZVszKmgrMV0pLG5ldyBkKGIsbiksbmV3IGQodyx1KV19LGdlbmVyYXRlU2lkZVdhbGxVVjpmdW5jdGlvbihiLGUsCmgsbix1LHcpe2I9ZVszKmhdO3ZhciB6PWVbMypoKzFdO2g9ZVszKmgrMl07dmFyIEU9ZVszKm5dLEg9ZVszKm4rMV07bj1lWzMqbisyXTt2YXIgST1lWzMqdV0sTz1lWzMqdSsxXTt1PWVbMyp1KzJdO3ZhciBRPWVbMyp3XSxSPWVbMyp3KzFdO2U9ZVszKncrMl07cmV0dXJuLjAxPk1hdGguYWJzKHotSCk/W25ldyBkKGIsMS1oKSxuZXcgZChFLDEtbiksbmV3IGQoSSwxLXUpLG5ldyBkKFEsMS1lKV06W25ldyBkKHosMS1oKSxuZXcgZChILDEtbiksbmV3IGQoTywxLXUpLG5ldyBkKFIsMS1lKV19fTtqZy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShOLnByb3RvdHlwZSk7amcucHJvdG90eXBlLmNvbnN0cnVjdG9yPWpnOyRlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKG1kLnByb3RvdHlwZSk7JGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPSRlO2tnLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKE4ucHJvdG90eXBlKTtrZy5wcm90b3R5cGUuY29uc3RydWN0b3I9a2c7V2QucHJvdG90eXBlPQpPYmplY3QuY3JlYXRlKHhhLnByb3RvdHlwZSk7V2QucHJvdG90eXBlLmNvbnN0cnVjdG9yPVdkO2xnLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKE4ucHJvdG90eXBlKTtsZy5wcm90b3R5cGUuY29uc3RydWN0b3I9bGc7YWYucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoeGEucHJvdG90eXBlKTthZi5wcm90b3R5cGUuY29uc3RydWN0b3I9YWY7bWcucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoTi5wcm90b3R5cGUpO21nLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1tZztiZi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh4YS5wcm90b3R5cGUpO2JmLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1iZjttZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShOLnByb3RvdHlwZSk7bWUucHJvdG90eXBlLmNvbnN0cnVjdG9yPW1lO21lLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXt2YXIgYj1OLnByb3RvdHlwZS50b0pTT04uY2FsbCh0aGlzKTtyZXR1cm4gRGwodGhpcy5wYXJhbWV0ZXJzLnNoYXBlcyxiKX07Cm5lLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHhhLnByb3RvdHlwZSk7bmUucHJvdG90eXBlLmNvbnN0cnVjdG9yPW5lO25lLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXt2YXIgYj14YS5wcm90b3R5cGUudG9KU09OLmNhbGwodGhpcyk7cmV0dXJuIERsKHRoaXMucGFyYW1ldGVycy5zaGFwZXMsYil9O2NmLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHhhLnByb3RvdHlwZSk7Y2YucHJvdG90eXBlLmNvbnN0cnVjdG9yPWNmO29lLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKE4ucHJvdG90eXBlKTtvZS5wcm90b3R5cGUuY29uc3RydWN0b3I9b2U7emQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoeGEucHJvdG90eXBlKTt6ZC5wcm90b3R5cGUuY29uc3RydWN0b3I9emQ7bmcucHJvdG90eXBlPU9iamVjdC5jcmVhdGUob2UucHJvdG90eXBlKTtuZy5wcm90b3R5cGUuY29uc3RydWN0b3I9bmc7b2cucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoemQucHJvdG90eXBlKTtvZy5wcm90b3R5cGUuY29uc3RydWN0b3I9Cm9nO3BnLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKE4ucHJvdG90eXBlKTtwZy5wcm90b3R5cGUuY29uc3RydWN0b3I9cGc7ZGYucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoeGEucHJvdG90eXBlKTtkZi5wcm90b3R5cGUuY29uc3RydWN0b3I9ZGY7dmFyIHhjPU9iamVjdC5mcmVlemUoe1dpcmVmcmFtZUdlb21ldHJ5OlRlLFBhcmFtZXRyaWNHZW9tZXRyeTpYZixQYXJhbWV0cmljQnVmZmVyR2VvbWV0cnk6VWUsVGV0cmFoZWRyb25HZW9tZXRyeTpaZixUZXRyYWhlZHJvbkJ1ZmZlckdlb21ldHJ5OlZlLE9jdGFoZWRyb25HZW9tZXRyeTokZixPY3RhaGVkcm9uQnVmZmVyR2VvbWV0cnk6aWUsSWNvc2FoZWRyb25HZW9tZXRyeTphZyxJY29zYWhlZHJvbkJ1ZmZlckdlb21ldHJ5OldlLERvZGVjYWhlZHJvbkdlb21ldHJ5OmJnLERvZGVjYWhlZHJvbkJ1ZmZlckdlb21ldHJ5OlhlLFBvbHloZWRyb25HZW9tZXRyeTpZZixQb2x5aGVkcm9uQnVmZmVyR2VvbWV0cnk6emMsVHViZUdlb21ldHJ5OmNnLApUdWJlQnVmZmVyR2VvbWV0cnk6amUsVG9ydXNLbm90R2VvbWV0cnk6ZGcsVG9ydXNLbm90QnVmZmVyR2VvbWV0cnk6WWUsVG9ydXNHZW9tZXRyeTplZyxUb3J1c0J1ZmZlckdlb21ldHJ5OlplLFRleHRHZW9tZXRyeTpqZyxUZXh0QnVmZmVyR2VvbWV0cnk6JGUsU3BoZXJlR2VvbWV0cnk6a2csU3BoZXJlQnVmZmVyR2VvbWV0cnk6V2QsUmluZ0dlb21ldHJ5OmxnLFJpbmdCdWZmZXJHZW9tZXRyeTphZixQbGFuZUdlb21ldHJ5OlNhLFBsYW5lQnVmZmVyR2VvbWV0cnk6RWEsTGF0aGVHZW9tZXRyeTptZyxMYXRoZUJ1ZmZlckdlb21ldHJ5OmJmLFNoYXBlR2VvbWV0cnk6bWUsU2hhcGVCdWZmZXJHZW9tZXRyeTpuZSxFeHRydWRlR2VvbWV0cnk6bGUsRXh0cnVkZUJ1ZmZlckdlb21ldHJ5Om1kLEVkZ2VzR2VvbWV0cnk6Y2YsQ29uZUdlb21ldHJ5Om5nLENvbmVCdWZmZXJHZW9tZXRyeTpvZyxDeWxpbmRlckdlb21ldHJ5Om9lLEN5bGluZGVyQnVmZmVyR2VvbWV0cnk6emQsQ2lyY2xlR2VvbWV0cnk6cGcsCkNpcmNsZUJ1ZmZlckdlb21ldHJ5OmRmLEJveEdlb21ldHJ5OnphLEJveEJ1ZmZlckdlb21ldHJ5OkZhfSk7cGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoR2EucHJvdG90eXBlKTtwZS5wcm90b3R5cGUuY29uc3RydWN0b3I9cGU7cGUucHJvdG90eXBlLmlzU2hhZG93TWF0ZXJpYWw9ITA7cGUucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oYil7R2EucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLGIpO3RoaXMuY29sb3IuY29weShiLmNvbG9yKTtyZXR1cm4gdGhpc307ZWYucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZGIucHJvdG90eXBlKTtlZi5wcm90b3R5cGUuY29uc3RydWN0b3I9ZWY7ZWYucHJvdG90eXBlLmlzUmF3U2hhZGVyTWF0ZXJpYWw9ITA7bmQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoR2EucHJvdG90eXBlKTtuZC5wcm90b3R5cGUuY29uc3RydWN0b3I9bmQ7bmQucHJvdG90eXBlLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWw9ITA7bmQucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oYil7R2EucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLApiKTt0aGlzLmRlZmluZXM9e1NUQU5EQVJEOiIifTt0aGlzLmNvbG9yLmNvcHkoYi5jb2xvcik7dGhpcy5yb3VnaG5lc3M9Yi5yb3VnaG5lc3M7dGhpcy5tZXRhbG5lc3M9Yi5tZXRhbG5lc3M7dGhpcy5tYXA9Yi5tYXA7dGhpcy5saWdodE1hcD1iLmxpZ2h0TWFwO3RoaXMubGlnaHRNYXBJbnRlbnNpdHk9Yi5saWdodE1hcEludGVuc2l0eTt0aGlzLmFvTWFwPWIuYW9NYXA7dGhpcy5hb01hcEludGVuc2l0eT1iLmFvTWFwSW50ZW5zaXR5O3RoaXMuZW1pc3NpdmUuY29weShiLmVtaXNzaXZlKTt0aGlzLmVtaXNzaXZlTWFwPWIuZW1pc3NpdmVNYXA7dGhpcy5lbWlzc2l2ZUludGVuc2l0eT1iLmVtaXNzaXZlSW50ZW5zaXR5O3RoaXMuYnVtcE1hcD1iLmJ1bXBNYXA7dGhpcy5idW1wU2NhbGU9Yi5idW1wU2NhbGU7dGhpcy5ub3JtYWxNYXA9Yi5ub3JtYWxNYXA7dGhpcy5ub3JtYWxNYXBUeXBlPWIubm9ybWFsTWFwVHlwZTt0aGlzLm5vcm1hbFNjYWxlLmNvcHkoYi5ub3JtYWxTY2FsZSk7CnRoaXMuZGlzcGxhY2VtZW50TWFwPWIuZGlzcGxhY2VtZW50TWFwO3RoaXMuZGlzcGxhY2VtZW50U2NhbGU9Yi5kaXNwbGFjZW1lbnRTY2FsZTt0aGlzLmRpc3BsYWNlbWVudEJpYXM9Yi5kaXNwbGFjZW1lbnRCaWFzO3RoaXMucm91Z2huZXNzTWFwPWIucm91Z2huZXNzTWFwO3RoaXMubWV0YWxuZXNzTWFwPWIubWV0YWxuZXNzTWFwO3RoaXMuYWxwaGFNYXA9Yi5hbHBoYU1hcDt0aGlzLmVudk1hcD1iLmVudk1hcDt0aGlzLmVudk1hcEludGVuc2l0eT1iLmVudk1hcEludGVuc2l0eTt0aGlzLnJlZnJhY3Rpb25SYXRpbz1iLnJlZnJhY3Rpb25SYXRpbzt0aGlzLndpcmVmcmFtZT1iLndpcmVmcmFtZTt0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD1iLndpcmVmcmFtZUxpbmV3aWR0aDt0aGlzLndpcmVmcmFtZUxpbmVjYXA9Yi53aXJlZnJhbWVMaW5lY2FwO3RoaXMud2lyZWZyYW1lTGluZWpvaW49Yi53aXJlZnJhbWVMaW5lam9pbjt0aGlzLnNraW5uaW5nPWIuc2tpbm5pbmc7dGhpcy5tb3JwaFRhcmdldHM9CmIubW9ycGhUYXJnZXRzO3RoaXMubW9ycGhOb3JtYWxzPWIubW9ycGhOb3JtYWxzO3JldHVybiB0aGlzfTtxZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShuZC5wcm90b3R5cGUpO3FlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1xZTtxZS5wcm90b3R5cGUuaXNNZXNoUGh5c2ljYWxNYXRlcmlhbD0hMDtxZS5wcm90b3R5cGUuY29weT1mdW5jdGlvbihiKXtuZC5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsYik7dGhpcy5kZWZpbmVzPXtQSFlTSUNBTDoiIn07dGhpcy5yZWZsZWN0aXZpdHk9Yi5yZWZsZWN0aXZpdHk7dGhpcy5jbGVhckNvYXQ9Yi5jbGVhckNvYXQ7dGhpcy5jbGVhckNvYXRSb3VnaG5lc3M9Yi5jbGVhckNvYXRSb3VnaG5lc3M7cmV0dXJuIHRoaXN9O1RjLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEdhLnByb3RvdHlwZSk7VGMucHJvdG90eXBlLmNvbnN0cnVjdG9yPVRjO1RjLnByb3RvdHlwZS5pc01lc2hQaG9uZ01hdGVyaWFsPSEwO1RjLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKGIpe0dhLnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcywKYik7dGhpcy5jb2xvci5jb3B5KGIuY29sb3IpO3RoaXMuc3BlY3VsYXIuY29weShiLnNwZWN1bGFyKTt0aGlzLnNoaW5pbmVzcz1iLnNoaW5pbmVzczt0aGlzLm1hcD1iLm1hcDt0aGlzLmxpZ2h0TWFwPWIubGlnaHRNYXA7dGhpcy5saWdodE1hcEludGVuc2l0eT1iLmxpZ2h0TWFwSW50ZW5zaXR5O3RoaXMuYW9NYXA9Yi5hb01hcDt0aGlzLmFvTWFwSW50ZW5zaXR5PWIuYW9NYXBJbnRlbnNpdHk7dGhpcy5lbWlzc2l2ZS5jb3B5KGIuZW1pc3NpdmUpO3RoaXMuZW1pc3NpdmVNYXA9Yi5lbWlzc2l2ZU1hcDt0aGlzLmVtaXNzaXZlSW50ZW5zaXR5PWIuZW1pc3NpdmVJbnRlbnNpdHk7dGhpcy5idW1wTWFwPWIuYnVtcE1hcDt0aGlzLmJ1bXBTY2FsZT1iLmJ1bXBTY2FsZTt0aGlzLm5vcm1hbE1hcD1iLm5vcm1hbE1hcDt0aGlzLm5vcm1hbE1hcFR5cGU9Yi5ub3JtYWxNYXBUeXBlO3RoaXMubm9ybWFsU2NhbGUuY29weShiLm5vcm1hbFNjYWxlKTt0aGlzLmRpc3BsYWNlbWVudE1hcD1iLmRpc3BsYWNlbWVudE1hcDsKdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT1iLmRpc3BsYWNlbWVudFNjYWxlO3RoaXMuZGlzcGxhY2VtZW50Qmlhcz1iLmRpc3BsYWNlbWVudEJpYXM7dGhpcy5zcGVjdWxhck1hcD1iLnNwZWN1bGFyTWFwO3RoaXMuYWxwaGFNYXA9Yi5hbHBoYU1hcDt0aGlzLmVudk1hcD1iLmVudk1hcDt0aGlzLmNvbWJpbmU9Yi5jb21iaW5lO3RoaXMucmVmbGVjdGl2aXR5PWIucmVmbGVjdGl2aXR5O3RoaXMucmVmcmFjdGlvblJhdGlvPWIucmVmcmFjdGlvblJhdGlvO3RoaXMud2lyZWZyYW1lPWIud2lyZWZyYW1lO3RoaXMud2lyZWZyYW1lTGluZXdpZHRoPWIud2lyZWZyYW1lTGluZXdpZHRoO3RoaXMud2lyZWZyYW1lTGluZWNhcD1iLndpcmVmcmFtZUxpbmVjYXA7dGhpcy53aXJlZnJhbWVMaW5lam9pbj1iLndpcmVmcmFtZUxpbmVqb2luO3RoaXMuc2tpbm5pbmc9Yi5za2lubmluZzt0aGlzLm1vcnBoVGFyZ2V0cz1iLm1vcnBoVGFyZ2V0czt0aGlzLm1vcnBoTm9ybWFscz1iLm1vcnBoTm9ybWFsczsKcmV0dXJuIHRoaXN9O3JlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKFRjLnByb3RvdHlwZSk7cmUucHJvdG90eXBlLmNvbnN0cnVjdG9yPXJlO3JlLnByb3RvdHlwZS5pc01lc2hUb29uTWF0ZXJpYWw9ITA7cmUucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oYil7VGMucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLGIpO3RoaXMuZ3JhZGllbnRNYXA9Yi5ncmFkaWVudE1hcDtyZXR1cm4gdGhpc307c2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoR2EucHJvdG90eXBlKTtzZS5wcm90b3R5cGUuY29uc3RydWN0b3I9c2U7c2UucHJvdG90eXBlLmlzTWVzaE5vcm1hbE1hdGVyaWFsPSEwO3NlLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKGIpe0dhLnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyxiKTt0aGlzLmJ1bXBNYXA9Yi5idW1wTWFwO3RoaXMuYnVtcFNjYWxlPWIuYnVtcFNjYWxlO3RoaXMubm9ybWFsTWFwPWIubm9ybWFsTWFwO3RoaXMubm9ybWFsTWFwVHlwZT1iLm5vcm1hbE1hcFR5cGU7CnRoaXMubm9ybWFsU2NhbGUuY29weShiLm5vcm1hbFNjYWxlKTt0aGlzLmRpc3BsYWNlbWVudE1hcD1iLmRpc3BsYWNlbWVudE1hcDt0aGlzLmRpc3BsYWNlbWVudFNjYWxlPWIuZGlzcGxhY2VtZW50U2NhbGU7dGhpcy5kaXNwbGFjZW1lbnRCaWFzPWIuZGlzcGxhY2VtZW50Qmlhczt0aGlzLndpcmVmcmFtZT1iLndpcmVmcmFtZTt0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD1iLndpcmVmcmFtZUxpbmV3aWR0aDt0aGlzLnNraW5uaW5nPWIuc2tpbm5pbmc7dGhpcy5tb3JwaFRhcmdldHM9Yi5tb3JwaFRhcmdldHM7dGhpcy5tb3JwaE5vcm1hbHM9Yi5tb3JwaE5vcm1hbHM7cmV0dXJuIHRoaXN9O3RlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEdhLnByb3RvdHlwZSk7dGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPXRlO3RlLnByb3RvdHlwZS5pc01lc2hMYW1iZXJ0TWF0ZXJpYWw9ITA7dGUucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oYil7R2EucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLApiKTt0aGlzLmNvbG9yLmNvcHkoYi5jb2xvcik7dGhpcy5tYXA9Yi5tYXA7dGhpcy5saWdodE1hcD1iLmxpZ2h0TWFwO3RoaXMubGlnaHRNYXBJbnRlbnNpdHk9Yi5saWdodE1hcEludGVuc2l0eTt0aGlzLmFvTWFwPWIuYW9NYXA7dGhpcy5hb01hcEludGVuc2l0eT1iLmFvTWFwSW50ZW5zaXR5O3RoaXMuZW1pc3NpdmUuY29weShiLmVtaXNzaXZlKTt0aGlzLmVtaXNzaXZlTWFwPWIuZW1pc3NpdmVNYXA7dGhpcy5lbWlzc2l2ZUludGVuc2l0eT1iLmVtaXNzaXZlSW50ZW5zaXR5O3RoaXMuc3BlY3VsYXJNYXA9Yi5zcGVjdWxhck1hcDt0aGlzLmFscGhhTWFwPWIuYWxwaGFNYXA7dGhpcy5lbnZNYXA9Yi5lbnZNYXA7dGhpcy5jb21iaW5lPWIuY29tYmluZTt0aGlzLnJlZmxlY3Rpdml0eT1iLnJlZmxlY3Rpdml0eTt0aGlzLnJlZnJhY3Rpb25SYXRpbz1iLnJlZnJhY3Rpb25SYXRpbzt0aGlzLndpcmVmcmFtZT1iLndpcmVmcmFtZTt0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD1iLndpcmVmcmFtZUxpbmV3aWR0aDsKdGhpcy53aXJlZnJhbWVMaW5lY2FwPWIud2lyZWZyYW1lTGluZWNhcDt0aGlzLndpcmVmcmFtZUxpbmVqb2luPWIud2lyZWZyYW1lTGluZWpvaW47dGhpcy5za2lubmluZz1iLnNraW5uaW5nO3RoaXMubW9ycGhUYXJnZXRzPWIubW9ycGhUYXJnZXRzO3RoaXMubW9ycGhOb3JtYWxzPWIubW9ycGhOb3JtYWxzO3JldHVybiB0aGlzfTt1ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShHYS5wcm90b3R5cGUpO3VlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj11ZTt1ZS5wcm90b3R5cGUuaXNNZXNoTWF0Y2FwTWF0ZXJpYWw9ITA7dWUucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oYil7R2EucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLGIpO3RoaXMuZGVmaW5lcz17TUFUQ0FQOiIifTt0aGlzLmNvbG9yLmNvcHkoYi5jb2xvcik7dGhpcy5tYXRjYXA9Yi5tYXRjYXA7dGhpcy5tYXA9Yi5tYXA7dGhpcy5idW1wTWFwPWIuYnVtcE1hcDt0aGlzLmJ1bXBTY2FsZT1iLmJ1bXBTY2FsZTt0aGlzLm5vcm1hbE1hcD0KYi5ub3JtYWxNYXA7dGhpcy5ub3JtYWxNYXBUeXBlPWIubm9ybWFsTWFwVHlwZTt0aGlzLm5vcm1hbFNjYWxlLmNvcHkoYi5ub3JtYWxTY2FsZSk7dGhpcy5kaXNwbGFjZW1lbnRNYXA9Yi5kaXNwbGFjZW1lbnRNYXA7dGhpcy5kaXNwbGFjZW1lbnRTY2FsZT1iLmRpc3BsYWNlbWVudFNjYWxlO3RoaXMuZGlzcGxhY2VtZW50Qmlhcz1iLmRpc3BsYWNlbWVudEJpYXM7dGhpcy5hbHBoYU1hcD1iLmFscGhhTWFwO3RoaXMuc2tpbm5pbmc9Yi5za2lubmluZzt0aGlzLm1vcnBoVGFyZ2V0cz1iLm1vcnBoVGFyZ2V0czt0aGlzLm1vcnBoTm9ybWFscz1iLm1vcnBoTm9ybWFscztyZXR1cm4gdGhpc307dmUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoTGIucHJvdG90eXBlKTt2ZS5wcm90b3R5cGUuY29uc3RydWN0b3I9dmU7dmUucHJvdG90eXBlLmlzTGluZURhc2hlZE1hdGVyaWFsPSEwO3ZlLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKGIpe0xiLnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyxiKTsKdGhpcy5zY2FsZT1iLnNjYWxlO3RoaXMuZGFzaFNpemU9Yi5kYXNoU2l6ZTt0aGlzLmdhcFNpemU9Yi5nYXBTaXplO3JldHVybiB0aGlzfTt2YXIgb3A9T2JqZWN0LmZyZWV6ZSh7U2hhZG93TWF0ZXJpYWw6cGUsU3ByaXRlTWF0ZXJpYWw6VmQsUmF3U2hhZGVyTWF0ZXJpYWw6ZWYsU2hhZGVyTWF0ZXJpYWw6ZGIsUG9pbnRzTWF0ZXJpYWw6U2MsTWVzaFBoeXNpY2FsTWF0ZXJpYWw6cWUsTWVzaFN0YW5kYXJkTWF0ZXJpYWw6bmQsTWVzaFBob25nTWF0ZXJpYWw6VGMsTWVzaFRvb25NYXRlcmlhbDpyZSxNZXNoTm9ybWFsTWF0ZXJpYWw6c2UsTWVzaExhbWJlcnRNYXRlcmlhbDp0ZSxNZXNoRGVwdGhNYXRlcmlhbDpQZCxNZXNoRGlzdGFuY2VNYXRlcmlhbDpRZCxNZXNoQmFzaWNNYXRlcmlhbDp5YixNZXNoTWF0Y2FwTWF0ZXJpYWw6dWUsTGluZURhc2hlZE1hdGVyaWFsOnZlLExpbmVCYXNpY01hdGVyaWFsOkxiLE1hdGVyaWFsOkdhfSksZ2M9e2FycmF5U2xpY2U6ZnVuY3Rpb24oYixlLApoKXtyZXR1cm4gZ2MuaXNUeXBlZEFycmF5KGIpP25ldyBiLmNvbnN0cnVjdG9yKGIuc3ViYXJyYXkoZSx2b2lkIDAhPT1oP2g6Yi5sZW5ndGgpKTpiLnNsaWNlKGUsaCl9LGNvbnZlcnRBcnJheTpmdW5jdGlvbihiLGUsaCl7cmV0dXJuIWJ8fCFoJiZiLmNvbnN0cnVjdG9yPT09ZT9iOiJudW1iZXIiPT09dHlwZW9mIGUuQllURVNfUEVSX0VMRU1FTlQ/bmV3IGUoYik6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYil9LGlzVHlwZWRBcnJheTpmdW5jdGlvbihiKXtyZXR1cm4gQXJyYXlCdWZmZXIuaXNWaWV3KGIpJiYhKGIgaW5zdGFuY2VvZiBEYXRhVmlldyl9LGdldEtleWZyYW1lT3JkZXI6ZnVuY3Rpb24oYil7Zm9yKHZhciBlPWIubGVuZ3RoLGg9QXJyYXkoZSksbj0wO24hPT1lOysrbiloW25dPW47aC5zb3J0KGZ1bmN0aW9uKHUsdyl7cmV0dXJuIGJbdV0tYlt3XX0pO3JldHVybiBofSxzb3J0ZWRBcnJheTpmdW5jdGlvbihiLGUsaCl7Zm9yKHZhciBuPWIubGVuZ3RoLHU9bmV3IGIuY29uc3RydWN0b3IobiksCnc9MCx6PTA7eiE9PW47Kyt3KWZvcih2YXIgRT1oW3ddKmUsSD0wO0ghPT1lOysrSCl1W3orK109YltFK0hdO3JldHVybiB1fSxmbGF0dGVuSlNPTjpmdW5jdGlvbihiLGUsaCxuKXtmb3IodmFyIHU9MSx3PWJbMF07dm9pZCAwIT09dyYmdm9pZCAwPT09d1tuXTspdz1iW3UrK107aWYodm9pZCAwIT09dyl7dmFyIHo9d1tuXTtpZih2b2lkIDAhPT16KWlmKEFycmF5LmlzQXJyYXkoeikpe2RvIHo9d1tuXSx2b2lkIDAhPT16JiYoZS5wdXNoKHcudGltZSksaC5wdXNoLmFwcGx5KGgseikpLHc9Ylt1KytdO3doaWxlKHZvaWQgMCE9PXcpfWVsc2UgaWYodm9pZCAwIT09ei50b0FycmF5KXtkbyB6PXdbbl0sdm9pZCAwIT09eiYmKGUucHVzaCh3LnRpbWUpLHoudG9BcnJheShoLGgubGVuZ3RoKSksdz1iW3UrK107d2hpbGUodm9pZCAwIT09dyl9ZWxzZXtkbyB6PXdbbl0sdm9pZCAwIT09eiYmKGUucHVzaCh3LnRpbWUpLGgucHVzaCh6KSksdz1iW3UrK107d2hpbGUodm9pZCAwIT09dyl9fX19OwpPYmplY3QuYXNzaWduKERjLnByb3RvdHlwZSx7ZXZhbHVhdGU6ZnVuY3Rpb24oYil7dmFyIGU9dGhpcy5wYXJhbWV0ZXJQb3NpdGlvbnMsaD10aGlzLl9jYWNoZWRJbmRleCxuPWVbaF0sdT1lW2gtMV07YTp7Yjp7Yzp7ZDppZighKGI8bikpe2Zvcih2YXIgdz1oKzI7Oyl7aWYodm9pZCAwPT09bil7aWYoYjx1KWJyZWFrIGQ7dGhpcy5fY2FjaGVkSW5kZXg9aD1lLmxlbmd0aDtyZXR1cm4gdGhpcy5hZnRlckVuZF8oaC0xLGIsdSl9aWYoaD09PXcpYnJlYWs7dT1uO249ZVsrK2hdO2lmKGI8bilicmVhayBifW49ZS5sZW5ndGg7YnJlYWsgY31pZihiPj11KWJyZWFrIGE7ZWxzZXt3PWVbMV07Yjx3JiYoaD0yLHU9dyk7Zm9yKHc9aC0yOzspe2lmKHZvaWQgMD09PXUpcmV0dXJuIHRoaXMuX2NhY2hlZEluZGV4PTAsdGhpcy5iZWZvcmVTdGFydF8oMCxiLG4pO2lmKGg9PT13KWJyZWFrO249dTt1PWVbLS1oLTFdO2lmKGI+PXUpYnJlYWsgYn1uPWg7aD0wfX1mb3IoO2g8bjspdT1oK24+Pj4KMSxiPGVbdV0/bj11Omg9dSsxO249ZVtoXTt1PWVbaC0xXTtpZih2b2lkIDA9PT11KXJldHVybiB0aGlzLl9jYWNoZWRJbmRleD0wLHRoaXMuYmVmb3JlU3RhcnRfKDAsYixuKTtpZih2b2lkIDA9PT1uKXJldHVybiB0aGlzLl9jYWNoZWRJbmRleD1oPWUubGVuZ3RoLHRoaXMuYWZ0ZXJFbmRfKGgtMSx1LGIpfXRoaXMuX2NhY2hlZEluZGV4PWg7dGhpcy5pbnRlcnZhbENoYW5nZWRfKGgsdSxuKX1yZXR1cm4gdGhpcy5pbnRlcnBvbGF0ZV8oaCx1LGIsbil9LHNldHRpbmdzOm51bGwsRGVmYXVsdFNldHRpbmdzXzp7fSxnZXRTZXR0aW5nc186ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXR0aW5nc3x8dGhpcy5EZWZhdWx0U2V0dGluZ3NffSxjb3B5U2FtcGxlVmFsdWVfOmZ1bmN0aW9uKGIpe3ZhciBlPXRoaXMucmVzdWx0QnVmZmVyLGg9dGhpcy5zYW1wbGVWYWx1ZXMsbj10aGlzLnZhbHVlU2l6ZTtiKj1uO2Zvcih2YXIgdT0wO3UhPT1uOysrdSllW3VdPWhbYit1XTtyZXR1cm4gZX0sCmludGVycG9sYXRlXzpmdW5jdGlvbigpe3Rocm93IEVycm9yKCJjYWxsIHRvIGFic3RyYWN0IG1ldGhvZCIpO30saW50ZXJ2YWxDaGFuZ2VkXzpmdW5jdGlvbigpe319KTtPYmplY3QuYXNzaWduKERjLnByb3RvdHlwZSx7YmVmb3JlU3RhcnRfOkRjLnByb3RvdHlwZS5jb3B5U2FtcGxlVmFsdWVfLGFmdGVyRW5kXzpEYy5wcm90b3R5cGUuY29weVNhbXBsZVZhbHVlX30pO21oLnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoRGMucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6bWgsRGVmYXVsdFNldHRpbmdzXzp7ZW5kaW5nU3RhcnQ6MjQwMCxlbmRpbmdFbmQ6MjQwMH0saW50ZXJ2YWxDaGFuZ2VkXzpmdW5jdGlvbihiLGUsaCl7dmFyIG49dGhpcy5wYXJhbWV0ZXJQb3NpdGlvbnMsdT1iLTIsdz1iKzEsej1uW3VdLEU9blt3XTtpZih2b2lkIDA9PT16KXN3aXRjaCh0aGlzLmdldFNldHRpbmdzXygpLmVuZGluZ1N0YXJ0KXtjYXNlIDI0MDE6dT1iO3o9MiplLWg7YnJlYWs7CmNhc2UgMjQwMjp1PW4ubGVuZ3RoLTI7ej1lK25bdV0tblt1KzFdO2JyZWFrO2RlZmF1bHQ6dT1iLHo9aH1pZih2b2lkIDA9PT1FKXN3aXRjaCh0aGlzLmdldFNldHRpbmdzXygpLmVuZGluZ0VuZCl7Y2FzZSAyNDAxOnc9YjtFPTIqaC1lO2JyZWFrO2Nhc2UgMjQwMjp3PTE7RT1oK25bMV0tblswXTticmVhaztkZWZhdWx0Onc9Yi0xLEU9ZX1iPS41KihoLWUpO249dGhpcy52YWx1ZVNpemU7dGhpcy5fd2VpZ2h0UHJldj1iLyhlLXopO3RoaXMuX3dlaWdodE5leHQ9Yi8oRS1oKTt0aGlzLl9vZmZzZXRQcmV2PXUqbjt0aGlzLl9vZmZzZXROZXh0PXcqbn0saW50ZXJwb2xhdGVfOmZ1bmN0aW9uKGIsZSxoLG4pe3ZhciB1PXRoaXMucmVzdWx0QnVmZmVyLHc9dGhpcy5zYW1wbGVWYWx1ZXMsej10aGlzLnZhbHVlU2l6ZTtiKj16O3ZhciBFPWIteixIPXRoaXMuX29mZnNldFByZXYsST10aGlzLl9vZmZzZXROZXh0LE89dGhpcy5fd2VpZ2h0UHJldixRPXRoaXMuX3dlaWdodE5leHQsUj0oaC0KZSkvKG4tZSk7aD1SKlI7bj1oKlI7ZT0tTypuKzIqTypoLU8qUjtPPSgxK08pKm4rKC0xLjUtMipPKSpoKygtLjUrTykqUisxO1I9KC0xLVEpKm4rKDEuNStRKSpoKy41KlI7UT1RKm4tUSpoO2ZvcihoPTA7aCE9PXo7KytoKXVbaF09ZSp3W0graF0rTyp3W0UraF0rUip3W2IraF0rUSp3W0kraF07cmV0dXJuIHV9fSk7cWcucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShEYy5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpxZyxpbnRlcnBvbGF0ZV86ZnVuY3Rpb24oYixlLGgsbil7dmFyIHU9dGhpcy5yZXN1bHRCdWZmZXIsdz10aGlzLnNhbXBsZVZhbHVlcyx6PXRoaXMudmFsdWVTaXplO2IqPXo7dmFyIEU9Yi16O2U9KGgtZSkvKG4tZSk7aD0xLWU7Zm9yKG49MDtuIT09ejsrK24pdVtuXT13W0Urbl0qaCt3W2Irbl0qZTtyZXR1cm4gdX19KTtuaC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKERjLnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOm5oLAppbnRlcnBvbGF0ZV86ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY29weVNhbXBsZVZhbHVlXyhiLTEpfX0pO09iamVjdC5hc3NpZ24obWMse3RvSlNPTjpmdW5jdGlvbihiKXt2YXIgZT1iLmNvbnN0cnVjdG9yO2lmKHZvaWQgMCE9PWUudG9KU09OKWU9ZS50b0pTT04oYik7ZWxzZXtlPXtuYW1lOmIubmFtZSx0aW1lczpnYy5jb252ZXJ0QXJyYXkoYi50aW1lcyxBcnJheSksdmFsdWVzOmdjLmNvbnZlcnRBcnJheShiLnZhbHVlcyxBcnJheSl9O3ZhciBoPWIuZ2V0SW50ZXJwb2xhdGlvbigpO2ghPT1iLkRlZmF1bHRJbnRlcnBvbGF0aW9uJiYoZS5pbnRlcnBvbGF0aW9uPWgpfWUudHlwZT1iLlZhbHVlVHlwZU5hbWU7cmV0dXJuIGV9fSk7T2JqZWN0LmFzc2lnbihtYy5wcm90b3R5cGUse2NvbnN0cnVjdG9yOm1jLFRpbWVCdWZmZXJUeXBlOkZsb2F0MzJBcnJheSxWYWx1ZUJ1ZmZlclR5cGU6RmxvYXQzMkFycmF5LERlZmF1bHRJbnRlcnBvbGF0aW9uOjIzMDEsSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kRGlzY3JldGU6ZnVuY3Rpb24oYil7cmV0dXJuIG5ldyBuaCh0aGlzLnRpbWVzLAp0aGlzLnZhbHVlcyx0aGlzLmdldFZhbHVlU2l6ZSgpLGIpfSxJbnRlcnBvbGFudEZhY3RvcnlNZXRob2RMaW5lYXI6ZnVuY3Rpb24oYil7cmV0dXJuIG5ldyBxZyh0aGlzLnRpbWVzLHRoaXMudmFsdWVzLHRoaXMuZ2V0VmFsdWVTaXplKCksYil9LEludGVycG9sYW50RmFjdG9yeU1ldGhvZFNtb290aDpmdW5jdGlvbihiKXtyZXR1cm4gbmV3IG1oKHRoaXMudGltZXMsdGhpcy52YWx1ZXMsdGhpcy5nZXRWYWx1ZVNpemUoKSxiKX0sc2V0SW50ZXJwb2xhdGlvbjpmdW5jdGlvbihiKXtzd2l0Y2goYil7Y2FzZSAyMzAwOnZhciBlPXRoaXMuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kRGlzY3JldGU7YnJlYWs7Y2FzZSAyMzAxOmU9dGhpcy5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RMaW5lYXI7YnJlYWs7Y2FzZSAyMzAyOmU9dGhpcy5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RTbW9vdGh9aWYodm9pZCAwPT09ZSl7ZT0idW5zdXBwb3J0ZWQgaW50ZXJwb2xhdGlvbiBmb3IgIit0aGlzLlZhbHVlVHlwZU5hbWUrCiIga2V5ZnJhbWUgdHJhY2sgbmFtZWQgIit0aGlzLm5hbWU7aWYodm9pZCAwPT09dGhpcy5jcmVhdGVJbnRlcnBvbGFudClpZihiIT09dGhpcy5EZWZhdWx0SW50ZXJwb2xhdGlvbil0aGlzLnNldEludGVycG9sYXRpb24odGhpcy5EZWZhdWx0SW50ZXJwb2xhdGlvbik7ZWxzZSB0aHJvdyBFcnJvcihlKTtjb25zb2xlLndhcm4oIlRIUkVFLktleWZyYW1lVHJhY2s6IixlKTtyZXR1cm4gdGhpc310aGlzLmNyZWF0ZUludGVycG9sYW50PWU7cmV0dXJuIHRoaXN9LGdldEludGVycG9sYXRpb246ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5jcmVhdGVJbnRlcnBvbGFudCl7Y2FzZSB0aGlzLkludGVycG9sYW50RmFjdG9yeU1ldGhvZERpc2NyZXRlOnJldHVybiAyMzAwO2Nhc2UgdGhpcy5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RMaW5lYXI6cmV0dXJuIDIzMDE7Y2FzZSB0aGlzLkludGVycG9sYW50RmFjdG9yeU1ldGhvZFNtb290aDpyZXR1cm4gMjMwMn19LGdldFZhbHVlU2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnZhbHVlcy5sZW5ndGgvCnRoaXMudGltZXMubGVuZ3RofSxzaGlmdDpmdW5jdGlvbihiKXtpZigwIT09Yilmb3IodmFyIGU9dGhpcy50aW1lcyxoPTAsbj1lLmxlbmd0aDtoIT09bjsrK2gpZVtoXSs9YjtyZXR1cm4gdGhpc30sc2NhbGU6ZnVuY3Rpb24oYil7aWYoMSE9PWIpZm9yKHZhciBlPXRoaXMudGltZXMsaD0wLG49ZS5sZW5ndGg7aCE9PW47KytoKWVbaF0qPWI7cmV0dXJuIHRoaXN9LHRyaW06ZnVuY3Rpb24oYixlKXtmb3IodmFyIGg9dGhpcy50aW1lcyxuPWgubGVuZ3RoLHU9MCx3PW4tMTt1IT09biYmaFt1XTxiOykrK3U7Zm9yKDstMSE9PXcmJmhbd10+ZTspLS13OysrdztpZigwIT09dXx8dyE9PW4pdT49dyYmKHc9TWF0aC5tYXgodywxKSx1PXctMSksYj10aGlzLmdldFZhbHVlU2l6ZSgpLHRoaXMudGltZXM9Z2MuYXJyYXlTbGljZShoLHUsdyksdGhpcy52YWx1ZXM9Z2MuYXJyYXlTbGljZSh0aGlzLnZhbHVlcyx1KmIsdypiKTtyZXR1cm4gdGhpc30sdmFsaWRhdGU6ZnVuY3Rpb24oKXt2YXIgYj0KITAsZT10aGlzLmdldFZhbHVlU2l6ZSgpOzAhPT1lLU1hdGguZmxvb3IoZSkmJihjb25zb2xlLmVycm9yKCJUSFJFRS5LZXlmcmFtZVRyYWNrOiBJbnZhbGlkIHZhbHVlIHNpemUgaW4gdHJhY2suIix0aGlzKSxiPSExKTt2YXIgaD10aGlzLnRpbWVzO2U9dGhpcy52YWx1ZXM7dmFyIG49aC5sZW5ndGg7MD09PW4mJihjb25zb2xlLmVycm9yKCJUSFJFRS5LZXlmcmFtZVRyYWNrOiBUcmFjayBpcyBlbXB0eS4iLHRoaXMpLGI9ITEpO2Zvcih2YXIgdT1udWxsLHc9MDt3IT09bjt3Kyspe3ZhciB6PWhbd107aWYoIm51bWJlciI9PT10eXBlb2YgeiYmaXNOYU4oeikpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IFRpbWUgaXMgbm90IGEgdmFsaWQgbnVtYmVyLiIsdGhpcyx3LHopO2I9ITE7YnJlYWt9aWYobnVsbCE9PXUmJnU+eil7Y29uc29sZS5lcnJvcigiVEhSRUUuS2V5ZnJhbWVUcmFjazogT3V0IG9mIG9yZGVyIGtleXMuIix0aGlzLHcseix1KTtiPSExO2JyZWFrfXU9Cnp9aWYodm9pZCAwIT09ZSYmZ2MuaXNUeXBlZEFycmF5KGUpKWZvcih3PTAsaD1lLmxlbmd0aDt3IT09aDsrK3cpaWYobj1lW3ddLGlzTmFOKG4pKXtjb25zb2xlLmVycm9yKCJUSFJFRS5LZXlmcmFtZVRyYWNrOiBWYWx1ZSBpcyBub3QgYSB2YWxpZCBudW1iZXIuIix0aGlzLHcsbik7Yj0hMTticmVha31yZXR1cm4gYn0sb3B0aW1pemU6ZnVuY3Rpb24oKXtmb3IodmFyIGI9dGhpcy50aW1lcyxlPXRoaXMudmFsdWVzLGg9dGhpcy5nZXRWYWx1ZVNpemUoKSxuPTIzMDI9PT10aGlzLmdldEludGVycG9sYXRpb24oKSx1PTEsdz1iLmxlbmd0aC0xLHo9MTt6PHc7Kyt6KXt2YXIgRT0hMSxIPWJbel07aWYoSCE9PWJbeisxXSYmKDEhPT16fHxIIT09SFswXSkpaWYobilFPSEwO2Vsc2V7dmFyIEk9eipoLE89SS1oLFE9SStoO2ZvcihIPTA7SCE9PWg7KytIKXt2YXIgUj1lW0krSF07aWYoUiE9PWVbTytIXXx8UiE9PWVbUStIXSl7RT0hMDticmVha319fWlmKEUpe2lmKHohPT11KWZvcihiW3VdPQpiW3pdLEU9eipoLEk9dSpoLEg9MDtIIT09aDsrK0gpZVtJK0hdPWVbRStIXTsrK3V9fWlmKDA8dyl7Ylt1XT1iW3ddO0U9dypoO0k9dSpoO2ZvcihIPTA7SCE9PWg7KytIKWVbSStIXT1lW0UrSF07Kyt1fXUhPT1iLmxlbmd0aCYmKHRoaXMudGltZXM9Z2MuYXJyYXlTbGljZShiLDAsdSksdGhpcy52YWx1ZXM9Z2MuYXJyYXlTbGljZShlLDAsdSpoKSk7cmV0dXJuIHRoaXN9LGNsb25lOmZ1bmN0aW9uKCl7dmFyIGI9Z2MuYXJyYXlTbGljZSh0aGlzLnRpbWVzLDApLGU9Z2MuYXJyYXlTbGljZSh0aGlzLnZhbHVlcywwKTtiPW5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMubmFtZSxiLGUpO2IuY3JlYXRlSW50ZXJwb2xhbnQ9dGhpcy5jcmVhdGVJbnRlcnBvbGFudDtyZXR1cm4gYn19KTtvaC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKG1jLnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOm9oLFZhbHVlVHlwZU5hbWU6ImJvb2wiLFZhbHVlQnVmZmVyVHlwZTpBcnJheSwKRGVmYXVsdEludGVycG9sYXRpb246MjMwMCxJbnRlcnBvbGFudEZhY3RvcnlNZXRob2RMaW5lYXI6dm9pZCAwLEludGVycG9sYW50RmFjdG9yeU1ldGhvZFNtb290aDp2b2lkIDB9KTtwaC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKG1jLnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOnBoLFZhbHVlVHlwZU5hbWU6ImNvbG9yIn0pO2ZmLnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUobWMucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6ZmYsVmFsdWVUeXBlTmFtZToibnVtYmVyIn0pO3FoLnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoRGMucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6cWgsaW50ZXJwb2xhdGVfOmZ1bmN0aW9uKGIsZSxoLG4pe3ZhciB1PXRoaXMucmVzdWx0QnVmZmVyLHc9dGhpcy5zYW1wbGVWYWx1ZXMsej10aGlzLnZhbHVlU2l6ZTtiKj16O2U9KGgtZSkvKG4tZSk7Zm9yKGg9Yit6O2IhPT1oO2IrPTQpZi5zbGVycEZsYXQodSwKMCx3LGIteix3LGIsZSk7cmV0dXJuIHV9fSk7cmcucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShtYy5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpyZyxWYWx1ZVR5cGVOYW1lOiJxdWF0ZXJuaW9uIixEZWZhdWx0SW50ZXJwb2xhdGlvbjoyMzAxLEludGVycG9sYW50RmFjdG9yeU1ldGhvZExpbmVhcjpmdW5jdGlvbihiKXtyZXR1cm4gbmV3IHFoKHRoaXMudGltZXMsdGhpcy52YWx1ZXMsdGhpcy5nZXRWYWx1ZVNpemUoKSxiKX0sSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kU21vb3RoOnZvaWQgMH0pO3JoLnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUobWMucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6cmgsVmFsdWVUeXBlTmFtZToic3RyaW5nIixWYWx1ZUJ1ZmZlclR5cGU6QXJyYXksRGVmYXVsdEludGVycG9sYXRpb246MjMwMCxJbnRlcnBvbGFudEZhY3RvcnlNZXRob2RMaW5lYXI6dm9pZCAwLEludGVycG9sYW50RmFjdG9yeU1ldGhvZFNtb290aDp2b2lkIDB9KTsKZ2YucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShtYy5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpnZixWYWx1ZVR5cGVOYW1lOiJ2ZWN0b3IifSk7T2JqZWN0LmFzc2lnbihJYyx7cGFyc2U6ZnVuY3Rpb24oYil7Zm9yKHZhciBlPVtdLGg9Yi50cmFja3Msbj0xLyhiLmZwc3x8MSksdT0wLHc9aC5sZW5ndGg7dSE9PXc7Kyt1KWUucHVzaChicChoW3VdKS5zY2FsZShuKSk7cmV0dXJuIG5ldyBJYyhiLm5hbWUsYi5kdXJhdGlvbixlKX0sdG9KU09OOmZ1bmN0aW9uKGIpe3ZhciBlPVtdLGg9Yi50cmFja3M7Yj17bmFtZTpiLm5hbWUsZHVyYXRpb246Yi5kdXJhdGlvbix0cmFja3M6ZSx1dWlkOmIudXVpZH07Zm9yKHZhciBuPTAsdT1oLmxlbmd0aDtuIT09dTsrK24pZS5wdXNoKG1jLnRvSlNPTihoW25dKSk7cmV0dXJuIGJ9LENyZWF0ZUZyb21Nb3JwaFRhcmdldFNlcXVlbmNlOmZ1bmN0aW9uKGIsZSxoLG4pe2Zvcih2YXIgdT1lLmxlbmd0aCx3PVtdLHo9MDt6PHU7eisrKXt2YXIgRT0KW10sSD1bXTtFLnB1c2goKHordS0xKSV1LHosKHorMSkldSk7SC5wdXNoKDAsMSwwKTt2YXIgST1nYy5nZXRLZXlmcmFtZU9yZGVyKEUpO0U9Z2Muc29ydGVkQXJyYXkoRSwxLEkpO0g9Z2Muc29ydGVkQXJyYXkoSCwxLEkpO258fDAhPT1FWzBdfHwoRS5wdXNoKHUpLEgucHVzaChIWzBdKSk7dy5wdXNoKChuZXcgZmYoIi5tb3JwaFRhcmdldEluZmx1ZW5jZXNbIitlW3pdLm5hbWUrIl0iLEUsSCkpLnNjYWxlKDEvaCkpfXJldHVybiBuZXcgSWMoYiwtMSx3KX0sZmluZEJ5TmFtZTpmdW5jdGlvbihiLGUpe3ZhciBoPWI7QXJyYXkuaXNBcnJheShiKXx8KGg9Yi5nZW9tZXRyeSYmYi5nZW9tZXRyeS5hbmltYXRpb25zfHxiLmFuaW1hdGlvbnMpO2ZvcihiPTA7YjxoLmxlbmd0aDtiKyspaWYoaFtiXS5uYW1lPT09ZSlyZXR1cm4gaFtiXTtyZXR1cm4gbnVsbH0sQ3JlYXRlQ2xpcHNGcm9tTW9ycGhUYXJnZXRTZXF1ZW5jZXM6ZnVuY3Rpb24oYixlLGgpe2Zvcih2YXIgbj17fSx1PS9eKFtcdy1dKj8pKFtcZF0rKSQvLAp3PTAsej1iLmxlbmd0aDt3PHo7dysrKXt2YXIgRT1iW3ddLEg9RS5uYW1lLm1hdGNoKHUpO2lmKEgmJjE8SC5sZW5ndGgpe3ZhciBJPUhbMV07KEg9bltJXSl8fChuW0ldPUg9W10pO0gucHVzaChFKX19Yj1bXTtmb3IoSSBpbiBuKWIucHVzaChJYy5DcmVhdGVGcm9tTW9ycGhUYXJnZXRTZXF1ZW5jZShJLG5bSV0sZSxoKSk7cmV0dXJuIGJ9LHBhcnNlQW5pbWF0aW9uOmZ1bmN0aW9uKGIsZSl7ZnVuY3Rpb24gaChaLGZhLHFhLHJhLGlhKXtpZigwIT09cWEubGVuZ3RoKXt2YXIgdGE9W10sbmE9W107Z2MuZmxhdHRlbkpTT04ocWEsdGEsbmEscmEpOzAhPT10YS5sZW5ndGgmJmlhLnB1c2gobmV3IFooZmEsdGEsbmEpKX19aWYoIWIpcmV0dXJuIGNvbnNvbGUuZXJyb3IoIlRIUkVFLkFuaW1hdGlvbkNsaXA6IE5vIGFuaW1hdGlvbiBpbiBKU09OTG9hZGVyIGRhdGEuIiksbnVsbDt2YXIgbj1bXSx1PWIubmFtZXx8ImRlZmF1bHQiLHc9Yi5sZW5ndGh8fC0xLHo9Yi5mcHN8fDMwO2I9Yi5oaWVyYXJjaHl8fApbXTtmb3IodmFyIEU9MDtFPGIubGVuZ3RoO0UrKyl7dmFyIEg9YltFXS5rZXlzO2lmKEgmJjAhPT1ILmxlbmd0aClpZihIWzBdLm1vcnBoVGFyZ2V0cyl7dz17fTtmb3IodmFyIEk9MDtJPEgubGVuZ3RoO0krKylpZihIW0ldLm1vcnBoVGFyZ2V0cylmb3IodmFyIE89MDtPPEhbSV0ubW9ycGhUYXJnZXRzLmxlbmd0aDtPKyspd1tIW0ldLm1vcnBoVGFyZ2V0c1tPXV09LTE7Zm9yKHZhciBRIGluIHcpe3ZhciBSPVtdLFU9W107Zm9yKE89MDtPIT09SFtJXS5tb3JwaFRhcmdldHMubGVuZ3RoOysrTyl7dmFyIFc9SFtJXTtSLnB1c2goVy50aW1lKTtVLnB1c2goVy5tb3JwaFRhcmdldD09PVE/MTowKX1uLnB1c2gobmV3IGZmKCIubW9ycGhUYXJnZXRJbmZsdWVuY2VbIitRKyJdIixSLFUpKX13PXcubGVuZ3RoKih6fHwxKX1lbHNlIEk9Ii5ib25lc1siK2VbRV0ubmFtZSsiXSIsaChnZixJKyIucG9zaXRpb24iLEgsInBvcyIsbiksaChyZyxJKyIucXVhdGVybmlvbiIsSCwicm90IixuKSwKaChnZixJKyIuc2NhbGUiLEgsInNjbCIsbil9cmV0dXJuIDA9PT1uLmxlbmd0aD9udWxsOm5ldyBJYyh1LHcsbil9fSk7T2JqZWN0LmFzc2lnbihJYy5wcm90b3R5cGUse3Jlc2V0RHVyYXRpb246ZnVuY3Rpb24oKXtmb3IodmFyIGI9MCxlPTAsaD10aGlzLnRyYWNrcy5sZW5ndGg7ZSE9PWg7KytlKXt2YXIgbj10aGlzLnRyYWNrc1tlXTtiPU1hdGgubWF4KGIsbi50aW1lc1tuLnRpbWVzLmxlbmd0aC0xXSl9dGhpcy5kdXJhdGlvbj1iO3JldHVybiB0aGlzfSx0cmltOmZ1bmN0aW9uKCl7Zm9yKHZhciBiPTA7Yjx0aGlzLnRyYWNrcy5sZW5ndGg7YisrKXRoaXMudHJhY2tzW2JdLnRyaW0oMCx0aGlzLmR1cmF0aW9uKTtyZXR1cm4gdGhpc30sdmFsaWRhdGU6ZnVuY3Rpb24oKXtmb3IodmFyIGI9ITAsZT0wO2U8dGhpcy50cmFja3MubGVuZ3RoO2UrKyliPWImJnRoaXMudHJhY2tzW2VdLnZhbGlkYXRlKCk7cmV0dXJuIGJ9LG9wdGltaXplOmZ1bmN0aW9uKCl7Zm9yKHZhciBiPTA7Yjx0aGlzLnRyYWNrcy5sZW5ndGg7YisrKXRoaXMudHJhY2tzW2JdLm9wdGltaXplKCk7CnJldHVybiB0aGlzfSxjbG9uZTpmdW5jdGlvbigpe2Zvcih2YXIgYj1bXSxlPTA7ZTx0aGlzLnRyYWNrcy5sZW5ndGg7ZSsrKWIucHVzaCh0aGlzLnRyYWNrc1tlXS5jbG9uZSgpKTtyZXR1cm4gbmV3IEljKHRoaXMubmFtZSx0aGlzLmR1cmF0aW9uLGIpfX0pO3ZhciB4ZT17ZW5hYmxlZDohMSxmaWxlczp7fSxhZGQ6ZnVuY3Rpb24oYixlKXshMSE9PXRoaXMuZW5hYmxlZCYmKHRoaXMuZmlsZXNbYl09ZSl9LGdldDpmdW5jdGlvbihiKXtpZighMSE9PXRoaXMuZW5hYmxlZClyZXR1cm4gdGhpcy5maWxlc1tiXX0scmVtb3ZlOmZ1bmN0aW9uKGIpe2RlbGV0ZSB0aGlzLmZpbGVzW2JdfSxjbGVhcjpmdW5jdGlvbigpe3RoaXMuZmlsZXM9e319fSxBYz1uZXcgRGksYWQ9e307T2JqZWN0LmFzc2lnbihVYy5wcm90b3R5cGUse2xvYWQ6ZnVuY3Rpb24oYixlLGgsbil7dm9pZCAwPT09YiYmKGI9IiIpO3ZvaWQgMCE9PXRoaXMucGF0aCYmKGI9dGhpcy5wYXRoK2IpO2I9dGhpcy5tYW5hZ2VyLnJlc29sdmVVUkwoYik7CnZhciB1PXRoaXMsdz14ZS5nZXQoYik7aWYodm9pZCAwIT09dylyZXR1cm4gdS5tYW5hZ2VyLml0ZW1TdGFydChiKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZSYmZSh3KTt1Lm1hbmFnZXIuaXRlbUVuZChiKX0sMCksdztpZih2b2lkIDAhPT1hZFtiXSlhZFtiXS5wdXNoKHtvbkxvYWQ6ZSxvblByb2dyZXNzOmgsb25FcnJvcjpufSk7ZWxzZXt2YXIgej1iLm1hdGNoKC9eZGF0YTooLio/KSg7YmFzZTY0KT8sKC4qKSQvKTtpZih6KXtoPXpbMV07dmFyIEU9ISF6WzJdO3o9elszXTt6PWRlY29kZVVSSUNvbXBvbmVudCh6KTtFJiYoej1hdG9iKHopKTt0cnl7dmFyIEg9KHRoaXMucmVzcG9uc2VUeXBlfHwiIikudG9Mb3dlckNhc2UoKTtzd2l0Y2goSCl7Y2FzZSAiYXJyYXlidWZmZXIiOmNhc2UgImJsb2IiOnZhciBJPW5ldyBVaW50OEFycmF5KHoubGVuZ3RoKTtmb3IoRT0wO0U8ei5sZW5ndGg7RSsrKUlbRV09ei5jaGFyQ29kZUF0KEUpO3ZhciBPPSJibG9iIj09PUg/bmV3IEJsb2IoW0kuYnVmZmVyXSwKe3R5cGU6aH0pOkkuYnVmZmVyO2JyZWFrO2Nhc2UgImRvY3VtZW50IjpPPShuZXcgRE9NUGFyc2VyKS5wYXJzZUZyb21TdHJpbmcoeixoKTticmVhaztjYXNlICJqc29uIjpPPUpTT04ucGFyc2Uoeik7YnJlYWs7ZGVmYXVsdDpPPXp9c2V0VGltZW91dChmdW5jdGlvbigpe2UmJmUoTyk7dS5tYW5hZ2VyLml0ZW1FbmQoYil9LDApfWNhdGNoKFIpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXtuJiZuKFIpO3UubWFuYWdlci5pdGVtRXJyb3IoYik7dS5tYW5hZ2VyLml0ZW1FbmQoYil9LDApfX1lbHNle2FkW2JdPVtdO2FkW2JdLnB1c2goe29uTG9hZDplLG9uUHJvZ3Jlc3M6aCxvbkVycm9yOm59KTt2YXIgUT1uZXcgWE1MSHR0cFJlcXVlc3Q7US5vcGVuKCJHRVQiLGIsITApO1EuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsZnVuY3Rpb24oUil7dmFyIFU9dGhpcy5yZXNwb25zZTt4ZS5hZGQoYixVKTt2YXIgVz1hZFtiXTtkZWxldGUgYWRbYl07aWYoMjAwPT09dGhpcy5zdGF0dXN8fDA9PT10aGlzLnN0YXR1cyl7MD09PQp0aGlzLnN0YXR1cyYmY29uc29sZS53YXJuKCJUSFJFRS5GaWxlTG9hZGVyOiBIVFRQIFN0YXR1cyAwIHJlY2VpdmVkLiIpO2Zvcih2YXIgWj0wLGZhPVcubGVuZ3RoO1o8ZmE7WisrKXt2YXIgcWE9V1taXTtpZihxYS5vbkxvYWQpcWEub25Mb2FkKFUpfX1lbHNle1o9MDtmb3IoZmE9Vy5sZW5ndGg7WjxmYTtaKyspaWYocWE9V1taXSxxYS5vbkVycm9yKXFhLm9uRXJyb3IoUik7dS5tYW5hZ2VyLml0ZW1FcnJvcihiKX11Lm1hbmFnZXIuaXRlbUVuZChiKX0sITEpO1EuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLGZ1bmN0aW9uKFIpe2Zvcih2YXIgVT1hZFtiXSxXPTAsWj1VLmxlbmd0aDtXPFo7VysrKXt2YXIgZmE9VVtXXTtpZihmYS5vblByb2dyZXNzKWZhLm9uUHJvZ3Jlc3MoUil9fSwhMSk7US5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsZnVuY3Rpb24oUil7dmFyIFU9YWRbYl07ZGVsZXRlIGFkW2JdO2Zvcih2YXIgVz0wLFo9VS5sZW5ndGg7VzxaO1crKyl7dmFyIGZhPVVbV107CmlmKGZhLm9uRXJyb3IpZmEub25FcnJvcihSKX11Lm1hbmFnZXIuaXRlbUVycm9yKGIpO3UubWFuYWdlci5pdGVtRW5kKGIpfSwhMSk7US5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIsZnVuY3Rpb24oUil7dmFyIFU9YWRbYl07ZGVsZXRlIGFkW2JdO2Zvcih2YXIgVz0wLFo9VS5sZW5ndGg7VzxaO1crKyl7dmFyIGZhPVVbV107aWYoZmEub25FcnJvcilmYS5vbkVycm9yKFIpfXUubWFuYWdlci5pdGVtRXJyb3IoYik7dS5tYW5hZ2VyLml0ZW1FbmQoYil9LCExKTt2b2lkIDAhPT10aGlzLnJlc3BvbnNlVHlwZSYmKFEucmVzcG9uc2VUeXBlPXRoaXMucmVzcG9uc2VUeXBlKTt2b2lkIDAhPT10aGlzLndpdGhDcmVkZW50aWFscyYmKFEud2l0aENyZWRlbnRpYWxzPXRoaXMud2l0aENyZWRlbnRpYWxzKTtRLm92ZXJyaWRlTWltZVR5cGUmJlEub3ZlcnJpZGVNaW1lVHlwZSh2b2lkIDAhPT10aGlzLm1pbWVUeXBlP3RoaXMubWltZVR5cGU6InRleHQvcGxhaW4iKTtmb3IoRSBpbiB0aGlzLnJlcXVlc3RIZWFkZXIpUS5zZXRSZXF1ZXN0SGVhZGVyKEUsCnRoaXMucmVxdWVzdEhlYWRlcltFXSk7US5zZW5kKG51bGwpfXUubWFuYWdlci5pdGVtU3RhcnQoYik7cmV0dXJuIFF9fSxzZXRQYXRoOmZ1bmN0aW9uKGIpe3RoaXMucGF0aD1iO3JldHVybiB0aGlzfSxzZXRSZXNwb25zZVR5cGU6ZnVuY3Rpb24oYil7dGhpcy5yZXNwb25zZVR5cGU9YjtyZXR1cm4gdGhpc30sc2V0V2l0aENyZWRlbnRpYWxzOmZ1bmN0aW9uKGIpe3RoaXMud2l0aENyZWRlbnRpYWxzPWI7cmV0dXJuIHRoaXN9LHNldE1pbWVUeXBlOmZ1bmN0aW9uKGIpe3RoaXMubWltZVR5cGU9YjtyZXR1cm4gdGhpc30sc2V0UmVxdWVzdEhlYWRlcjpmdW5jdGlvbihiKXt0aGlzLnJlcXVlc3RIZWFkZXI9YjtyZXR1cm4gdGhpc319KTtPYmplY3QuYXNzaWduKEVsLnByb3RvdHlwZSx7bG9hZDpmdW5jdGlvbihiLGUsaCxuKXt2YXIgdT10aGlzLHc9bmV3IFVjKHUubWFuYWdlcik7dy5zZXRQYXRoKHUucGF0aCk7dy5sb2FkKGIsZnVuY3Rpb24oeil7ZSh1LnBhcnNlKEpTT04ucGFyc2UoeikpKX0sCmgsbil9LHBhcnNlOmZ1bmN0aW9uKGIpe2Zvcih2YXIgZT1bXSxoPTA7aDxiLmxlbmd0aDtoKyspe3ZhciBuPUljLnBhcnNlKGJbaF0pO2UucHVzaChuKX1yZXR1cm4gZX0sc2V0UGF0aDpmdW5jdGlvbihiKXt0aGlzLnBhdGg9YjtyZXR1cm4gdGhpc319KTtPYmplY3QuYXNzaWduKEZsLnByb3RvdHlwZSx7bG9hZDpmdW5jdGlvbihiLGUsaCxuKXtmdW5jdGlvbiB1KFIpe0gubG9hZChiW1JdLGZ1bmN0aW9uKFUpe1U9dy5fcGFyc2VyKFUsITApO3pbUl09e3dpZHRoOlUud2lkdGgsaGVpZ2h0OlUuaGVpZ2h0LGZvcm1hdDpVLmZvcm1hdCxtaXBtYXBzOlUubWlwbWFwc307SSs9MTs2PT09SSYmKDE9PT1VLm1pcG1hcENvdW50JiYoRS5taW5GaWx0ZXI9MTAwNiksRS5mb3JtYXQ9VS5mb3JtYXQsRS5uZWVkc1VwZGF0ZT0hMCxlJiZlKEUpKX0saCxuKX12YXIgdz10aGlzLHo9W10sRT1uZXcgU2U7RS5pbWFnZT16O3ZhciBIPW5ldyBVYyh0aGlzLm1hbmFnZXIpO0guc2V0UGF0aCh0aGlzLnBhdGgpOwpILnNldFJlc3BvbnNlVHlwZSgiYXJyYXlidWZmZXIiKTtpZihBcnJheS5pc0FycmF5KGIpKWZvcih2YXIgST0wLE89MCxRPWIubGVuZ3RoO088UTsrK08pdShPKTtlbHNlIEgubG9hZChiLGZ1bmN0aW9uKFIpe1I9dy5fcGFyc2VyKFIsITApO2lmKFIuaXNDdWJlbWFwKWZvcih2YXIgVT1SLm1pcG1hcHMubGVuZ3RoL1IubWlwbWFwQ291bnQsVz0wO1c8VTtXKyspe3pbV109e21pcG1hcHM6W119O2Zvcih2YXIgWj0wO1o8Ui5taXBtYXBDb3VudDtaKyspeltXXS5taXBtYXBzLnB1c2goUi5taXBtYXBzW1cqUi5taXBtYXBDb3VudCtaXSkseltXXS5mb3JtYXQ9Ui5mb3JtYXQseltXXS53aWR0aD1SLndpZHRoLHpbV10uaGVpZ2h0PVIuaGVpZ2h0fWVsc2UgRS5pbWFnZS53aWR0aD1SLndpZHRoLEUuaW1hZ2UuaGVpZ2h0PVIuaGVpZ2h0LEUubWlwbWFwcz1SLm1pcG1hcHM7MT09PVIubWlwbWFwQ291bnQmJihFLm1pbkZpbHRlcj0xMDA2KTtFLmZvcm1hdD1SLmZvcm1hdDtFLm5lZWRzVXBkYXRlPQohMDtlJiZlKEUpfSxoLG4pO3JldHVybiBFfSxzZXRQYXRoOmZ1bmN0aW9uKGIpe3RoaXMucGF0aD1iO3JldHVybiB0aGlzfX0pO09iamVjdC5hc3NpZ24oRWkucHJvdG90eXBlLHtsb2FkOmZ1bmN0aW9uKGIsZSxoLG4pe3ZhciB1PXRoaXMsdz1uZXcgdCx6PW5ldyBVYyh0aGlzLm1hbmFnZXIpO3ouc2V0UmVzcG9uc2VUeXBlKCJhcnJheWJ1ZmZlciIpO3ouc2V0UGF0aCh0aGlzLnBhdGgpO3oubG9hZChiLGZ1bmN0aW9uKEUpe2lmKEU9dS5fcGFyc2VyKEUpKXZvaWQgMCE9PUUuaW1hZ2U/dy5pbWFnZT1FLmltYWdlOnZvaWQgMCE9PUUuZGF0YSYmKHcuaW1hZ2Uud2lkdGg9RS53aWR0aCx3LmltYWdlLmhlaWdodD1FLmhlaWdodCx3LmltYWdlLmRhdGE9RS5kYXRhKSx3LndyYXBTPXZvaWQgMCE9PUUud3JhcFM/RS53cmFwUzoxMDAxLHcud3JhcFQ9dm9pZCAwIT09RS53cmFwVD9FLndyYXBUOjEwMDEsdy5tYWdGaWx0ZXI9dm9pZCAwIT09RS5tYWdGaWx0ZXI/RS5tYWdGaWx0ZXI6MTAwNiwKdy5taW5GaWx0ZXI9dm9pZCAwIT09RS5taW5GaWx0ZXI/RS5taW5GaWx0ZXI6MTAwOCx3LmFuaXNvdHJvcHk9dm9pZCAwIT09RS5hbmlzb3Ryb3B5P0UuYW5pc290cm9weToxLHZvaWQgMCE9PUUuZm9ybWF0JiYody5mb3JtYXQ9RS5mb3JtYXQpLHZvaWQgMCE9PUUudHlwZSYmKHcudHlwZT1FLnR5cGUpLHZvaWQgMCE9PUUubWlwbWFwcyYmKHcubWlwbWFwcz1FLm1pcG1hcHMpLDE9PT1FLm1pcG1hcENvdW50JiYody5taW5GaWx0ZXI9MTAwNiksdy5uZWVkc1VwZGF0ZT0hMCxlJiZlKHcsRSl9LGgsbik7cmV0dXJuIHd9LHNldFBhdGg6ZnVuY3Rpb24oYil7dGhpcy5wYXRoPWI7cmV0dXJuIHRoaXN9fSk7T2JqZWN0LmFzc2lnbihzZy5wcm90b3R5cGUse2Nyb3NzT3JpZ2luOiJhbm9ueW1vdXMiLGxvYWQ6ZnVuY3Rpb24oYixlLGgsbil7ZnVuY3Rpb24gdSgpe0gucmVtb3ZlRXZlbnRMaXN0ZW5lcigibG9hZCIsdSwhMSk7SC5yZW1vdmVFdmVudExpc3RlbmVyKCJlcnJvciIsdywhMSk7CnhlLmFkZChiLHRoaXMpO2UmJmUodGhpcyk7ei5tYW5hZ2VyLml0ZW1FbmQoYil9ZnVuY3Rpb24gdyhJKXtILnJlbW92ZUV2ZW50TGlzdGVuZXIoImxvYWQiLHUsITEpO0gucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZXJyb3IiLHcsITEpO24mJm4oSSk7ei5tYW5hZ2VyLml0ZW1FcnJvcihiKTt6Lm1hbmFnZXIuaXRlbUVuZChiKX12b2lkIDA9PT1iJiYoYj0iIik7dm9pZCAwIT09dGhpcy5wYXRoJiYoYj10aGlzLnBhdGgrYik7Yj10aGlzLm1hbmFnZXIucmVzb2x2ZVVSTChiKTt2YXIgej10aGlzLEU9eGUuZ2V0KGIpO2lmKHZvaWQgMCE9PUUpcmV0dXJuIHoubWFuYWdlci5pdGVtU3RhcnQoYiksc2V0VGltZW91dChmdW5jdGlvbigpe2UmJmUoRSk7ei5tYW5hZ2VyLml0ZW1FbmQoYil9LDApLEU7dmFyIEg9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiwiaW1nIik7SC5hZGRFdmVudExpc3RlbmVyKCJsb2FkIix1LCExKTtILmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIiwKdywhMSk7ImRhdGE6IiE9PWIuc3Vic3RyKDAsNSkmJnZvaWQgMCE9PXRoaXMuY3Jvc3NPcmlnaW4mJihILmNyb3NzT3JpZ2luPXRoaXMuY3Jvc3NPcmlnaW4pO3oubWFuYWdlci5pdGVtU3RhcnQoYik7SC5zcmM9YjtyZXR1cm4gSH0sc2V0Q3Jvc3NPcmlnaW46ZnVuY3Rpb24oYil7dGhpcy5jcm9zc09yaWdpbj1iO3JldHVybiB0aGlzfSxzZXRQYXRoOmZ1bmN0aW9uKGIpe3RoaXMucGF0aD1iO3JldHVybiB0aGlzfX0pO09iamVjdC5hc3NpZ24oRmkucHJvdG90eXBlLHtjcm9zc09yaWdpbjoiYW5vbnltb3VzIixsb2FkOmZ1bmN0aW9uKGIsZSxoLG4pe2Z1bmN0aW9uIHUoSCl7ei5sb2FkKGJbSF0sZnVuY3Rpb24oSSl7dy5pbWFnZXNbSF09STtFKys7Nj09PUUmJih3Lm5lZWRzVXBkYXRlPSEwLGUmJmUodykpfSx2b2lkIDAsbil9dmFyIHc9bmV3IHVkLHo9bmV3IHNnKHRoaXMubWFuYWdlcik7ei5zZXRDcm9zc09yaWdpbih0aGlzLmNyb3NzT3JpZ2luKTt6LnNldFBhdGgodGhpcy5wYXRoKTsKdmFyIEU9MDtmb3IoaD0wO2g8Yi5sZW5ndGg7KytoKXUoaCk7cmV0dXJuIHd9LHNldENyb3NzT3JpZ2luOmZ1bmN0aW9uKGIpe3RoaXMuY3Jvc3NPcmlnaW49YjtyZXR1cm4gdGhpc30sc2V0UGF0aDpmdW5jdGlvbihiKXt0aGlzLnBhdGg9YjtyZXR1cm4gdGhpc319KTtPYmplY3QuYXNzaWduKHNoLnByb3RvdHlwZSx7Y3Jvc3NPcmlnaW46ImFub255bW91cyIsbG9hZDpmdW5jdGlvbihiLGUsaCxuKXt2YXIgdT1uZXcgayx3PW5ldyBzZyh0aGlzLm1hbmFnZXIpO3cuc2V0Q3Jvc3NPcmlnaW4odGhpcy5jcm9zc09yaWdpbik7dy5zZXRQYXRoKHRoaXMucGF0aCk7dy5sb2FkKGIsZnVuY3Rpb24oeil7dS5pbWFnZT16O3o9MDxiLnNlYXJjaCgvXC5qcGU/ZygkfFw/KS9pKXx8MD09PWIuc2VhcmNoKC9eZGF0YTppbWFnZVwvanBlZy8pO3UuZm9ybWF0PXo/MTAyMjoxMDIzO3UubmVlZHNVcGRhdGU9ITA7dm9pZCAwIT09ZSYmZSh1KX0saCxuKTtyZXR1cm4gdX0sc2V0Q3Jvc3NPcmlnaW46ZnVuY3Rpb24oYil7dGhpcy5jcm9zc09yaWdpbj0KYjtyZXR1cm4gdGhpc30sc2V0UGF0aDpmdW5jdGlvbihiKXt0aGlzLnBhdGg9YjtyZXR1cm4gdGhpc319KTtPYmplY3QuYXNzaWduKGViLnByb3RvdHlwZSx7Z2V0UG9pbnQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkN1cnZlOiAuZ2V0UG9pbnQoKSBub3QgaW1wbGVtZW50ZWQuIik7cmV0dXJuIG51bGx9LGdldFBvaW50QXQ6ZnVuY3Rpb24oYixlKXtiPXRoaXMuZ2V0VXRvVG1hcHBpbmcoYik7cmV0dXJuIHRoaXMuZ2V0UG9pbnQoYixlKX0sZ2V0UG9pbnRzOmZ1bmN0aW9uKGIpe3ZvaWQgMD09PWImJihiPTUpO2Zvcih2YXIgZT1bXSxoPTA7aDw9YjtoKyspZS5wdXNoKHRoaXMuZ2V0UG9pbnQoaC9iKSk7cmV0dXJuIGV9LGdldFNwYWNlZFBvaW50czpmdW5jdGlvbihiKXt2b2lkIDA9PT1iJiYoYj01KTtmb3IodmFyIGU9W10saD0wO2g8PWI7aCsrKWUucHVzaCh0aGlzLmdldFBvaW50QXQoaC9iKSk7cmV0dXJuIGV9LGdldExlbmd0aDpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0TGVuZ3RocygpOwpyZXR1cm4gYltiLmxlbmd0aC0xXX0sZ2V0TGVuZ3RoczpmdW5jdGlvbihiKXt2b2lkIDA9PT1iJiYoYj10aGlzLmFyY0xlbmd0aERpdmlzaW9ucyk7aWYodGhpcy5jYWNoZUFyY0xlbmd0aHMmJnRoaXMuY2FjaGVBcmNMZW5ndGhzLmxlbmd0aD09PWIrMSYmIXRoaXMubmVlZHNVcGRhdGUpcmV0dXJuIHRoaXMuY2FjaGVBcmNMZW5ndGhzO3RoaXMubmVlZHNVcGRhdGU9ITE7dmFyIGU9W10saD10aGlzLmdldFBvaW50KDApLG4sdT0wO2UucHVzaCgwKTtmb3Iobj0xO248PWI7bisrKXt2YXIgdz10aGlzLmdldFBvaW50KG4vYik7dSs9dy5kaXN0YW5jZVRvKGgpO2UucHVzaCh1KTtoPXd9cmV0dXJuIHRoaXMuY2FjaGVBcmNMZW5ndGhzPWV9LHVwZGF0ZUFyY0xlbmd0aHM6ZnVuY3Rpb24oKXt0aGlzLm5lZWRzVXBkYXRlPSEwO3RoaXMuZ2V0TGVuZ3RocygpfSxnZXRVdG9UbWFwcGluZzpmdW5jdGlvbihiLGUpe3ZhciBoPXRoaXMuZ2V0TGVuZ3RocygpLG49aC5sZW5ndGg7ZT1lP2U6YioKaFtuLTFdO2Zvcih2YXIgdT0wLHc9bi0xLHo7dTw9dzspaWYoYj1NYXRoLmZsb29yKHUrKHctdSkvMiksej1oW2JdLWUsMD56KXU9YisxO2Vsc2UgaWYoMDx6KXc9Yi0xO2Vsc2V7dz1iO2JyZWFrfWI9dztpZihoW2JdPT09ZSlyZXR1cm4gYi8obi0xKTt1PWhbYl07cmV0dXJuKGIrKGUtdSkvKGhbYisxXS11KSkvKG4tMSl9LGdldFRhbmdlbnQ6ZnVuY3Rpb24oYil7dmFyIGU9Yi0xRS00O2IrPTFFLTQ7MD5lJiYoZT0wKTsxPGImJihiPTEpO2U9dGhpcy5nZXRQb2ludChlKTtyZXR1cm4gdGhpcy5nZXRQb2ludChiKS5jbG9uZSgpLnN1YihlKS5ub3JtYWxpemUoKX0sZ2V0VGFuZ2VudEF0OmZ1bmN0aW9uKGIpe2I9dGhpcy5nZXRVdG9UbWFwcGluZyhiKTtyZXR1cm4gdGhpcy5nZXRUYW5nZW50KGIpfSxjb21wdXRlRnJlbmV0RnJhbWVzOmZ1bmN0aW9uKGIsZSl7dmFyIGg9bmV3IGcsbj1bXSx1PVtdLHc9W10sej1uZXcgZyxFPW5ldyBDLEg7Zm9yKEg9MDtIPD1iO0grKyl7dmFyIEk9CkgvYjtuW0hdPXRoaXMuZ2V0VGFuZ2VudEF0KEkpO25bSF0ubm9ybWFsaXplKCl9dVswXT1uZXcgZzt3WzBdPW5ldyBnO0g9TnVtYmVyLk1BWF9WQUxVRTtJPU1hdGguYWJzKG5bMF0ueCk7dmFyIE89TWF0aC5hYnMoblswXS55KSxRPU1hdGguYWJzKG5bMF0ueik7STw9SCYmKEg9SSxoLnNldCgxLDAsMCkpO088PUgmJihIPU8saC5zZXQoMCwxLDApKTtRPD1IJiZoLnNldCgwLDAsMSk7ei5jcm9zc1ZlY3RvcnMoblswXSxoKS5ub3JtYWxpemUoKTt1WzBdLmNyb3NzVmVjdG9ycyhuWzBdLHopO3dbMF0uY3Jvc3NWZWN0b3JzKG5bMF0sdVswXSk7Zm9yKEg9MTtIPD1iO0grKyl1W0hdPXVbSC0xXS5jbG9uZSgpLHdbSF09d1tILTFdLmNsb25lKCksei5jcm9zc1ZlY3RvcnMobltILTFdLG5bSF0pLHoubGVuZ3RoKCk+TnVtYmVyLkVQU0lMT04mJih6Lm5vcm1hbGl6ZSgpLGg9TWF0aC5hY29zKG9iLmNsYW1wKG5bSC0xXS5kb3QobltIXSksLTEsMSkpLHVbSF0uYXBwbHlNYXRyaXg0KEUubWFrZVJvdGF0aW9uQXhpcyh6LApoKSkpLHdbSF0uY3Jvc3NWZWN0b3JzKG5bSF0sdVtIXSk7aWYoITA9PT1lKWZvcihoPU1hdGguYWNvcyhvYi5jbGFtcCh1WzBdLmRvdCh1W2JdKSwtMSwxKSksaC89YiwwPG5bMF0uZG90KHouY3Jvc3NWZWN0b3JzKHVbMF0sdVtiXSkpJiYoaD0taCksSD0xO0g8PWI7SCsrKXVbSF0uYXBwbHlNYXRyaXg0KEUubWFrZVJvdGF0aW9uQXhpcyhuW0hdLGgqSCkpLHdbSF0uY3Jvc3NWZWN0b3JzKG5bSF0sdVtIXSk7cmV0dXJue3RhbmdlbnRzOm4sbm9ybWFsczp1LGJpbm9ybWFsczp3fX0sY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9LGNvcHk6ZnVuY3Rpb24oYil7dGhpcy5hcmNMZW5ndGhEaXZpc2lvbnM9Yi5hcmNMZW5ndGhEaXZpc2lvbnM7cmV0dXJuIHRoaXN9LHRvSlNPTjpmdW5jdGlvbigpe3ZhciBiPXttZXRhZGF0YTp7dmVyc2lvbjo0LjUsdHlwZToiQ3VydmUiLGdlbmVyYXRvcjoiQ3VydmUudG9KU09OIn19O2IuYXJjTGVuZ3RoRGl2aXNpb25zPQp0aGlzLmFyY0xlbmd0aERpdmlzaW9ucztiLnR5cGU9dGhpcy50eXBlO3JldHVybiBifSxmcm9tSlNPTjpmdW5jdGlvbihiKXt0aGlzLmFyY0xlbmd0aERpdmlzaW9ucz1iLmFyY0xlbmd0aERpdmlzaW9ucztyZXR1cm4gdGhpc319KTtFYy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlYi5wcm90b3R5cGUpO0VjLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1FYztFYy5wcm90b3R5cGUuaXNFbGxpcHNlQ3VydmU9ITA7RWMucHJvdG90eXBlLmdldFBvaW50PWZ1bmN0aW9uKGIsZSl7ZT1lfHxuZXcgZDtmb3IodmFyIGg9MipNYXRoLlBJLG49dGhpcy5hRW5kQW5nbGUtdGhpcy5hU3RhcnRBbmdsZSx1PU1hdGguYWJzKG4pPE51bWJlci5FUFNJTE9OOzA+bjspbis9aDtmb3IoO24+aDspbi09aDtuPE51bWJlci5FUFNJTE9OJiYobj11PzA6aCk7ITAhPT10aGlzLmFDbG9ja3dpc2V8fHV8fChuPW49PT1oPy1oOm4taCk7aD10aGlzLmFTdGFydEFuZ2xlK2IqbjtiPXRoaXMuYVgrdGhpcy54UmFkaXVzKgpNYXRoLmNvcyhoKTt2YXIgdz10aGlzLmFZK3RoaXMueVJhZGl1cypNYXRoLnNpbihoKTswIT09dGhpcy5hUm90YXRpb24mJihoPU1hdGguY29zKHRoaXMuYVJvdGF0aW9uKSxuPU1hdGguc2luKHRoaXMuYVJvdGF0aW9uKSx1PWItdGhpcy5hWCx3LT10aGlzLmFZLGI9dSpoLXcqbit0aGlzLmFYLHc9dSpuK3cqaCt0aGlzLmFZKTtyZXR1cm4gZS5zZXQoYix3KX07RWMucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oYil7ZWIucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLGIpO3RoaXMuYVg9Yi5hWDt0aGlzLmFZPWIuYVk7dGhpcy54UmFkaXVzPWIueFJhZGl1czt0aGlzLnlSYWRpdXM9Yi55UmFkaXVzO3RoaXMuYVN0YXJ0QW5nbGU9Yi5hU3RhcnRBbmdsZTt0aGlzLmFFbmRBbmdsZT1iLmFFbmRBbmdsZTt0aGlzLmFDbG9ja3dpc2U9Yi5hQ2xvY2t3aXNlO3RoaXMuYVJvdGF0aW9uPWIuYVJvdGF0aW9uO3JldHVybiB0aGlzfTtFYy5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7dmFyIGI9CmViLnByb3RvdHlwZS50b0pTT04uY2FsbCh0aGlzKTtiLmFYPXRoaXMuYVg7Yi5hWT10aGlzLmFZO2IueFJhZGl1cz10aGlzLnhSYWRpdXM7Yi55UmFkaXVzPXRoaXMueVJhZGl1cztiLmFTdGFydEFuZ2xlPXRoaXMuYVN0YXJ0QW5nbGU7Yi5hRW5kQW5nbGU9dGhpcy5hRW5kQW5nbGU7Yi5hQ2xvY2t3aXNlPXRoaXMuYUNsb2Nrd2lzZTtiLmFSb3RhdGlvbj10aGlzLmFSb3RhdGlvbjtyZXR1cm4gYn07RWMucHJvdG90eXBlLmZyb21KU09OPWZ1bmN0aW9uKGIpe2ViLnByb3RvdHlwZS5mcm9tSlNPTi5jYWxsKHRoaXMsYik7dGhpcy5hWD1iLmFYO3RoaXMuYVk9Yi5hWTt0aGlzLnhSYWRpdXM9Yi54UmFkaXVzO3RoaXMueVJhZGl1cz1iLnlSYWRpdXM7dGhpcy5hU3RhcnRBbmdsZT1iLmFTdGFydEFuZ2xlO3RoaXMuYUVuZEFuZ2xlPWIuYUVuZEFuZ2xlO3RoaXMuYUNsb2Nrd2lzZT1iLmFDbG9ja3dpc2U7dGhpcy5hUm90YXRpb249Yi5hUm90YXRpb247cmV0dXJuIHRoaXN9O2hmLnByb3RvdHlwZT0KT2JqZWN0LmNyZWF0ZShFYy5wcm90b3R5cGUpO2hmLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1oZjtoZi5wcm90b3R5cGUuaXNBcmNDdXJ2ZT0hMDt2YXIgSGg9bmV3IGcsZGo9bmV3IEdpLGVqPW5ldyBHaSxmaj1uZXcgR2k7cmMucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZWIucHJvdG90eXBlKTtyYy5wcm90b3R5cGUuY29uc3RydWN0b3I9cmM7cmMucHJvdG90eXBlLmlzQ2F0bXVsbFJvbUN1cnZlMz0hMDtyYy5wcm90b3R5cGUuZ2V0UG9pbnQ9ZnVuY3Rpb24oYixlKXtlPWV8fG5ldyBnO3ZhciBoPXRoaXMucG9pbnRzLG49aC5sZW5ndGg7Yio9bi0odGhpcy5jbG9zZWQ/MDoxKTt2YXIgdT1NYXRoLmZsb29yKGIpO2ItPXU7dGhpcy5jbG9zZWQ/dSs9MDx1PzA6KE1hdGguZmxvb3IoTWF0aC5hYnModSkvbikrMSkqbjowPT09YiYmdT09PW4tMSYmKHU9bi0yLGI9MSk7aWYodGhpcy5jbG9zZWR8fDA8dSl2YXIgdz1oWyh1LTEpJW5dO2Vsc2UgSGguc3ViVmVjdG9ycyhoWzBdLGhbMV0pLmFkZChoWzBdKSwKdz1IaDt2YXIgej1oW3Ulbl07dmFyIEU9aFsodSsxKSVuXTt0aGlzLmNsb3NlZHx8dSsyPG4/aD1oWyh1KzIpJW5dOihIaC5zdWJWZWN0b3JzKGhbbi0xXSxoW24tMl0pLmFkZChoW24tMV0pLGg9SGgpO2lmKCJjZW50cmlwZXRhbCI9PT10aGlzLmN1cnZlVHlwZXx8ImNob3JkYWwiPT09dGhpcy5jdXJ2ZVR5cGUpe3ZhciBIPSJjaG9yZGFsIj09PXRoaXMuY3VydmVUeXBlPy41Oi4yNTtuPU1hdGgucG93KHcuZGlzdGFuY2VUb1NxdWFyZWQoeiksSCk7dT1NYXRoLnBvdyh6LmRpc3RhbmNlVG9TcXVhcmVkKEUpLEgpO0g9TWF0aC5wb3coRS5kaXN0YW5jZVRvU3F1YXJlZChoKSxIKTsxRS00PnUmJih1PTEpOzFFLTQ+biYmKG49dSk7MUUtND5IJiYoSD11KTtkai5pbml0Tm9udW5pZm9ybUNhdG11bGxSb20ody54LHoueCxFLngsaC54LG4sdSxIKTtlai5pbml0Tm9udW5pZm9ybUNhdG11bGxSb20ody55LHoueSxFLnksaC55LG4sdSxIKTtmai5pbml0Tm9udW5pZm9ybUNhdG11bGxSb20ody56LAp6LnosRS56LGgueixuLHUsSCl9ZWxzZSJjYXRtdWxscm9tIj09PXRoaXMuY3VydmVUeXBlJiYoZGouaW5pdENhdG11bGxSb20ody54LHoueCxFLngsaC54LHRoaXMudGVuc2lvbiksZWouaW5pdENhdG11bGxSb20ody55LHoueSxFLnksaC55LHRoaXMudGVuc2lvbiksZmouaW5pdENhdG11bGxSb20ody56LHoueixFLnosaC56LHRoaXMudGVuc2lvbikpO2Uuc2V0KGRqLmNhbGMoYiksZWouY2FsYyhiKSxmai5jYWxjKGIpKTtyZXR1cm4gZX07cmMucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oYil7ZWIucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLGIpO3RoaXMucG9pbnRzPVtdO2Zvcih2YXIgZT0wLGg9Yi5wb2ludHMubGVuZ3RoO2U8aDtlKyspdGhpcy5wb2ludHMucHVzaChiLnBvaW50c1tlXS5jbG9uZSgpKTt0aGlzLmNsb3NlZD1iLmNsb3NlZDt0aGlzLmN1cnZlVHlwZT1iLmN1cnZlVHlwZTt0aGlzLnRlbnNpb249Yi50ZW5zaW9uO3JldHVybiB0aGlzfTtyYy5wcm90b3R5cGUudG9KU09OPQpmdW5jdGlvbigpe3ZhciBiPWViLnByb3RvdHlwZS50b0pTT04uY2FsbCh0aGlzKTtiLnBvaW50cz1bXTtmb3IodmFyIGU9MCxoPXRoaXMucG9pbnRzLmxlbmd0aDtlPGg7ZSsrKWIucG9pbnRzLnB1c2godGhpcy5wb2ludHNbZV0udG9BcnJheSgpKTtiLmNsb3NlZD10aGlzLmNsb3NlZDtiLmN1cnZlVHlwZT10aGlzLmN1cnZlVHlwZTtiLnRlbnNpb249dGhpcy50ZW5zaW9uO3JldHVybiBifTtyYy5wcm90b3R5cGUuZnJvbUpTT049ZnVuY3Rpb24oYil7ZWIucHJvdG90eXBlLmZyb21KU09OLmNhbGwodGhpcyxiKTt0aGlzLnBvaW50cz1bXTtmb3IodmFyIGU9MCxoPWIucG9pbnRzLmxlbmd0aDtlPGg7ZSsrKXt2YXIgbj1iLnBvaW50c1tlXTt0aGlzLnBvaW50cy5wdXNoKChuZXcgZykuZnJvbUFycmF5KG4pKX10aGlzLmNsb3NlZD1iLmNsb3NlZDt0aGlzLmN1cnZlVHlwZT1iLmN1cnZlVHlwZTt0aGlzLnRlbnNpb249Yi50ZW5zaW9uO3JldHVybiB0aGlzfTtWYy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlYi5wcm90b3R5cGUpOwpWYy5wcm90b3R5cGUuY29uc3RydWN0b3I9VmM7VmMucHJvdG90eXBlLmlzQ3ViaWNCZXppZXJDdXJ2ZT0hMDtWYy5wcm90b3R5cGUuZ2V0UG9pbnQ9ZnVuY3Rpb24oYixlKXtlPWV8fG5ldyBkO3ZhciBoPXRoaXMudjAsbj10aGlzLnYxLHU9dGhpcy52Mix3PXRoaXMudjM7ZS5zZXQodWcoYixoLngsbi54LHUueCx3LngpLHVnKGIsaC55LG4ueSx1Lnksdy55KSk7cmV0dXJuIGV9O1ZjLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKGIpe2ViLnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyxiKTt0aGlzLnYwLmNvcHkoYi52MCk7dGhpcy52MS5jb3B5KGIudjEpO3RoaXMudjIuY29weShiLnYyKTt0aGlzLnYzLmNvcHkoYi52Myk7cmV0dXJuIHRoaXN9O1ZjLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXt2YXIgYj1lYi5wcm90b3R5cGUudG9KU09OLmNhbGwodGhpcyk7Yi52MD10aGlzLnYwLnRvQXJyYXkoKTtiLnYxPXRoaXMudjEudG9BcnJheSgpO2IudjI9dGhpcy52Mi50b0FycmF5KCk7CmIudjM9dGhpcy52My50b0FycmF5KCk7cmV0dXJuIGJ9O1ZjLnByb3RvdHlwZS5mcm9tSlNPTj1mdW5jdGlvbihiKXtlYi5wcm90b3R5cGUuZnJvbUpTT04uY2FsbCh0aGlzLGIpO3RoaXMudjAuZnJvbUFycmF5KGIudjApO3RoaXMudjEuZnJvbUFycmF5KGIudjEpO3RoaXMudjIuZnJvbUFycmF5KGIudjIpO3RoaXMudjMuZnJvbUFycmF5KGIudjMpO3JldHVybiB0aGlzfTtvZC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlYi5wcm90b3R5cGUpO29kLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1vZDtvZC5wcm90b3R5cGUuaXNDdWJpY0JlemllckN1cnZlMz0hMDtvZC5wcm90b3R5cGUuZ2V0UG9pbnQ9ZnVuY3Rpb24oYixlKXtlPWV8fG5ldyBnO3ZhciBoPXRoaXMudjAsbj10aGlzLnYxLHU9dGhpcy52Mix3PXRoaXMudjM7ZS5zZXQodWcoYixoLngsbi54LHUueCx3LngpLHVnKGIsaC55LG4ueSx1Lnksdy55KSx1ZyhiLGgueixuLnosdS56LHcueikpO3JldHVybiBlfTtvZC5wcm90b3R5cGUuY29weT0KZnVuY3Rpb24oYil7ZWIucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLGIpO3RoaXMudjAuY29weShiLnYwKTt0aGlzLnYxLmNvcHkoYi52MSk7dGhpcy52Mi5jb3B5KGIudjIpO3RoaXMudjMuY29weShiLnYzKTtyZXR1cm4gdGhpc307b2QucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3ZhciBiPWViLnByb3RvdHlwZS50b0pTT04uY2FsbCh0aGlzKTtiLnYwPXRoaXMudjAudG9BcnJheSgpO2IudjE9dGhpcy52MS50b0FycmF5KCk7Yi52Mj10aGlzLnYyLnRvQXJyYXkoKTtiLnYzPXRoaXMudjMudG9BcnJheSgpO3JldHVybiBifTtvZC5wcm90b3R5cGUuZnJvbUpTT049ZnVuY3Rpb24oYil7ZWIucHJvdG90eXBlLmZyb21KU09OLmNhbGwodGhpcyxiKTt0aGlzLnYwLmZyb21BcnJheShiLnYwKTt0aGlzLnYxLmZyb21BcnJheShiLnYxKTt0aGlzLnYyLmZyb21BcnJheShiLnYyKTt0aGlzLnYzLmZyb21BcnJheShiLnYzKTtyZXR1cm4gdGhpc307QmMucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZWIucHJvdG90eXBlKTsKQmMucHJvdG90eXBlLmNvbnN0cnVjdG9yPUJjO0JjLnByb3RvdHlwZS5pc0xpbmVDdXJ2ZT0hMDtCYy5wcm90b3R5cGUuZ2V0UG9pbnQ9ZnVuY3Rpb24oYixlKXtlPWV8fG5ldyBkOzE9PT1iP2UuY29weSh0aGlzLnYyKTooZS5jb3B5KHRoaXMudjIpLnN1Yih0aGlzLnYxKSxlLm11bHRpcGx5U2NhbGFyKGIpLmFkZCh0aGlzLnYxKSk7cmV0dXJuIGV9O0JjLnByb3RvdHlwZS5nZXRQb2ludEF0PWZ1bmN0aW9uKGIsZSl7cmV0dXJuIHRoaXMuZ2V0UG9pbnQoYixlKX07QmMucHJvdG90eXBlLmdldFRhbmdlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52Mi5jbG9uZSgpLnN1Yih0aGlzLnYxKS5ub3JtYWxpemUoKX07QmMucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oYil7ZWIucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLGIpO3RoaXMudjEuY29weShiLnYxKTt0aGlzLnYyLmNvcHkoYi52Mik7cmV0dXJuIHRoaXN9O0JjLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXt2YXIgYj1lYi5wcm90b3R5cGUudG9KU09OLmNhbGwodGhpcyk7CmIudjE9dGhpcy52MS50b0FycmF5KCk7Yi52Mj10aGlzLnYyLnRvQXJyYXkoKTtyZXR1cm4gYn07QmMucHJvdG90eXBlLmZyb21KU09OPWZ1bmN0aW9uKGIpe2ViLnByb3RvdHlwZS5mcm9tSlNPTi5jYWxsKHRoaXMsYik7dGhpcy52MS5mcm9tQXJyYXkoYi52MSk7dGhpcy52Mi5mcm9tQXJyYXkoYi52Mik7cmV0dXJuIHRoaXN9O1djLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGViLnByb3RvdHlwZSk7V2MucHJvdG90eXBlLmNvbnN0cnVjdG9yPVdjO1djLnByb3RvdHlwZS5pc0xpbmVDdXJ2ZTM9ITA7V2MucHJvdG90eXBlLmdldFBvaW50PWZ1bmN0aW9uKGIsZSl7ZT1lfHxuZXcgZzsxPT09Yj9lLmNvcHkodGhpcy52Mik6KGUuY29weSh0aGlzLnYyKS5zdWIodGhpcy52MSksZS5tdWx0aXBseVNjYWxhcihiKS5hZGQodGhpcy52MSkpO3JldHVybiBlfTtXYy5wcm90b3R5cGUuZ2V0UG9pbnRBdD1mdW5jdGlvbihiLGUpe3JldHVybiB0aGlzLmdldFBvaW50KGIsZSl9O1djLnByb3RvdHlwZS5jb3B5PQpmdW5jdGlvbihiKXtlYi5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsYik7dGhpcy52MS5jb3B5KGIudjEpO3RoaXMudjIuY29weShiLnYyKTtyZXR1cm4gdGhpc307V2MucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3ZhciBiPWViLnByb3RvdHlwZS50b0pTT04uY2FsbCh0aGlzKTtiLnYxPXRoaXMudjEudG9BcnJheSgpO2IudjI9dGhpcy52Mi50b0FycmF5KCk7cmV0dXJuIGJ9O1djLnByb3RvdHlwZS5mcm9tSlNPTj1mdW5jdGlvbihiKXtlYi5wcm90b3R5cGUuZnJvbUpTT04uY2FsbCh0aGlzLGIpO3RoaXMudjEuZnJvbUFycmF5KGIudjEpO3RoaXMudjIuZnJvbUFycmF5KGIudjIpO3JldHVybiB0aGlzfTtYYy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlYi5wcm90b3R5cGUpO1hjLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1YYztYYy5wcm90b3R5cGUuaXNRdWFkcmF0aWNCZXppZXJDdXJ2ZT0hMDtYYy5wcm90b3R5cGUuZ2V0UG9pbnQ9ZnVuY3Rpb24oYixlKXtlPWV8fG5ldyBkOwp2YXIgaD10aGlzLnYwLG49dGhpcy52MSx1PXRoaXMudjI7ZS5zZXQodGcoYixoLngsbi54LHUueCksdGcoYixoLnksbi55LHUueSkpO3JldHVybiBlfTtYYy5wcm90b3R5cGUuY29weT1mdW5jdGlvbihiKXtlYi5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsYik7dGhpcy52MC5jb3B5KGIudjApO3RoaXMudjEuY29weShiLnYxKTt0aGlzLnYyLmNvcHkoYi52Mik7cmV0dXJuIHRoaXN9O1hjLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXt2YXIgYj1lYi5wcm90b3R5cGUudG9KU09OLmNhbGwodGhpcyk7Yi52MD10aGlzLnYwLnRvQXJyYXkoKTtiLnYxPXRoaXMudjEudG9BcnJheSgpO2IudjI9dGhpcy52Mi50b0FycmF5KCk7cmV0dXJuIGJ9O1hjLnByb3RvdHlwZS5mcm9tSlNPTj1mdW5jdGlvbihiKXtlYi5wcm90b3R5cGUuZnJvbUpTT04uY2FsbCh0aGlzLGIpO3RoaXMudjAuZnJvbUFycmF5KGIudjApO3RoaXMudjEuZnJvbUFycmF5KGIudjEpO3RoaXMudjIuZnJvbUFycmF5KGIudjIpOwpyZXR1cm4gdGhpc307cGQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZWIucHJvdG90eXBlKTtwZC5wcm90b3R5cGUuY29uc3RydWN0b3I9cGQ7cGQucHJvdG90eXBlLmlzUXVhZHJhdGljQmV6aWVyQ3VydmUzPSEwO3BkLnByb3RvdHlwZS5nZXRQb2ludD1mdW5jdGlvbihiLGUpe2U9ZXx8bmV3IGc7dmFyIGg9dGhpcy52MCxuPXRoaXMudjEsdT10aGlzLnYyO2Uuc2V0KHRnKGIsaC54LG4ueCx1LngpLHRnKGIsaC55LG4ueSx1LnkpLHRnKGIsaC56LG4ueix1LnopKTtyZXR1cm4gZX07cGQucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oYil7ZWIucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLGIpO3RoaXMudjAuY29weShiLnYwKTt0aGlzLnYxLmNvcHkoYi52MSk7dGhpcy52Mi5jb3B5KGIudjIpO3JldHVybiB0aGlzfTtwZC5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7dmFyIGI9ZWIucHJvdG90eXBlLnRvSlNPTi5jYWxsKHRoaXMpO2IudjA9dGhpcy52MC50b0FycmF5KCk7Yi52MT0KdGhpcy52MS50b0FycmF5KCk7Yi52Mj10aGlzLnYyLnRvQXJyYXkoKTtyZXR1cm4gYn07cGQucHJvdG90eXBlLmZyb21KU09OPWZ1bmN0aW9uKGIpe2ViLnByb3RvdHlwZS5mcm9tSlNPTi5jYWxsKHRoaXMsYik7dGhpcy52MC5mcm9tQXJyYXkoYi52MCk7dGhpcy52MS5mcm9tQXJyYXkoYi52MSk7dGhpcy52Mi5mcm9tQXJyYXkoYi52Mik7cmV0dXJuIHRoaXN9O1ljLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGViLnByb3RvdHlwZSk7WWMucHJvdG90eXBlLmNvbnN0cnVjdG9yPVljO1ljLnByb3RvdHlwZS5pc1NwbGluZUN1cnZlPSEwO1ljLnByb3RvdHlwZS5nZXRQb2ludD1mdW5jdGlvbihiLGUpe2U9ZXx8bmV3IGQ7dmFyIGg9dGhpcy5wb2ludHMsbj0oaC5sZW5ndGgtMSkqYjtiPU1hdGguZmxvb3Iobik7bi09Yjt2YXIgdT1oWzA9PT1iP2I6Yi0xXSx3PWhbYl0sej1oW2I+aC5sZW5ndGgtMj9oLmxlbmd0aC0xOmIrMV07aD1oW2I+aC5sZW5ndGgtMz9oLmxlbmd0aC0xOmIrMl07CmUuc2V0KEdsKG4sdS54LHcueCx6LngsaC54KSxHbChuLHUueSx3Lnksei55LGgueSkpO3JldHVybiBlfTtZYy5wcm90b3R5cGUuY29weT1mdW5jdGlvbihiKXtlYi5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsYik7dGhpcy5wb2ludHM9W107Zm9yKHZhciBlPTAsaD1iLnBvaW50cy5sZW5ndGg7ZTxoO2UrKyl0aGlzLnBvaW50cy5wdXNoKGIucG9pbnRzW2VdLmNsb25lKCkpO3JldHVybiB0aGlzfTtZYy5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7dmFyIGI9ZWIucHJvdG90eXBlLnRvSlNPTi5jYWxsKHRoaXMpO2IucG9pbnRzPVtdO2Zvcih2YXIgZT0wLGg9dGhpcy5wb2ludHMubGVuZ3RoO2U8aDtlKyspYi5wb2ludHMucHVzaCh0aGlzLnBvaW50c1tlXS50b0FycmF5KCkpO3JldHVybiBifTtZYy5wcm90b3R5cGUuZnJvbUpTT049ZnVuY3Rpb24oYil7ZWIucHJvdG90eXBlLmZyb21KU09OLmNhbGwodGhpcyxiKTt0aGlzLnBvaW50cz1bXTtmb3IodmFyIGU9MCxoPWIucG9pbnRzLmxlbmd0aDtlPApoO2UrKyl7dmFyIG49Yi5wb2ludHNbZV07dGhpcy5wb2ludHMucHVzaCgobmV3IGQpLmZyb21BcnJheShuKSl9cmV0dXJuIHRoaXN9O3ZhciBnaj1PYmplY3QuZnJlZXplKHtBcmNDdXJ2ZTpoZixDYXRtdWxsUm9tQ3VydmUzOnJjLEN1YmljQmV6aWVyQ3VydmU6VmMsQ3ViaWNCZXppZXJDdXJ2ZTM6b2QsRWxsaXBzZUN1cnZlOkVjLExpbmVDdXJ2ZTpCYyxMaW5lQ3VydmUzOldjLFF1YWRyYXRpY0JlemllckN1cnZlOlhjLFF1YWRyYXRpY0JlemllckN1cnZlMzpwZCxTcGxpbmVDdXJ2ZTpZY30pO0FkLnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoZWIucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6QWQsYWRkOmZ1bmN0aW9uKGIpe3RoaXMuY3VydmVzLnB1c2goYil9LGNsb3NlUGF0aDpmdW5jdGlvbigpe3ZhciBiPXRoaXMuY3VydmVzWzBdLmdldFBvaW50KDApLGU9dGhpcy5jdXJ2ZXNbdGhpcy5jdXJ2ZXMubGVuZ3RoLTFdLmdldFBvaW50KDEpO2IuZXF1YWxzKGUpfHwKdGhpcy5jdXJ2ZXMucHVzaChuZXcgQmMoZSxiKSl9LGdldFBvaW50OmZ1bmN0aW9uKGIpe3ZhciBlPWIqdGhpcy5nZXRMZW5ndGgoKSxoPXRoaXMuZ2V0Q3VydmVMZW5ndGhzKCk7Zm9yKGI9MDtiPGgubGVuZ3RoOyl7aWYoaFtiXT49ZSlyZXR1cm4gZT1oW2JdLWUsYj10aGlzLmN1cnZlc1tiXSxoPWIuZ2V0TGVuZ3RoKCksYi5nZXRQb2ludEF0KDA9PT1oPzA6MS1lL2gpO2IrK31yZXR1cm4gbnVsbH0sZ2V0TGVuZ3RoOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRDdXJ2ZUxlbmd0aHMoKTtyZXR1cm4gYltiLmxlbmd0aC0xXX0sdXBkYXRlQXJjTGVuZ3RoczpmdW5jdGlvbigpe3RoaXMubmVlZHNVcGRhdGU9ITA7dGhpcy5jYWNoZUxlbmd0aHM9bnVsbDt0aGlzLmdldEN1cnZlTGVuZ3RocygpfSxnZXRDdXJ2ZUxlbmd0aHM6ZnVuY3Rpb24oKXtpZih0aGlzLmNhY2hlTGVuZ3RocyYmdGhpcy5jYWNoZUxlbmd0aHMubGVuZ3RoPT09dGhpcy5jdXJ2ZXMubGVuZ3RoKXJldHVybiB0aGlzLmNhY2hlTGVuZ3RoczsKZm9yKHZhciBiPVtdLGU9MCxoPTAsbj10aGlzLmN1cnZlcy5sZW5ndGg7aDxuO2grKyllKz10aGlzLmN1cnZlc1toXS5nZXRMZW5ndGgoKSxiLnB1c2goZSk7cmV0dXJuIHRoaXMuY2FjaGVMZW5ndGhzPWJ9LGdldFNwYWNlZFBvaW50czpmdW5jdGlvbihiKXt2b2lkIDA9PT1iJiYoYj00MCk7Zm9yKHZhciBlPVtdLGg9MDtoPD1iO2grKyllLnB1c2godGhpcy5nZXRQb2ludChoL2IpKTt0aGlzLmF1dG9DbG9zZSYmZS5wdXNoKGVbMF0pO3JldHVybiBlfSxnZXRQb2ludHM6ZnVuY3Rpb24oYil7Yj1ifHwxMjtmb3IodmFyIGU9W10saCxuPTAsdT10aGlzLmN1cnZlcztuPHUubGVuZ3RoO24rKyl7dmFyIHc9dVtuXTt3PXcuZ2V0UG9pbnRzKHcmJncuaXNFbGxpcHNlQ3VydmU/MipiOncmJih3LmlzTGluZUN1cnZlfHx3LmlzTGluZUN1cnZlMyk/MTp3JiZ3LmlzU3BsaW5lQ3VydmU/Yip3LnBvaW50cy5sZW5ndGg6Yik7Zm9yKHZhciB6PTA7ejx3Lmxlbmd0aDt6Kyspe3ZhciBFPXdbel07CmgmJmguZXF1YWxzKEUpfHwoZS5wdXNoKEUpLGg9RSl9fXRoaXMuYXV0b0Nsb3NlJiYxPGUubGVuZ3RoJiYhZVtlLmxlbmd0aC0xXS5lcXVhbHMoZVswXSkmJmUucHVzaChlWzBdKTtyZXR1cm4gZX0sY29weTpmdW5jdGlvbihiKXtlYi5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsYik7dGhpcy5jdXJ2ZXM9W107Zm9yKHZhciBlPTAsaD1iLmN1cnZlcy5sZW5ndGg7ZTxoO2UrKyl0aGlzLmN1cnZlcy5wdXNoKGIuY3VydmVzW2VdLmNsb25lKCkpO3RoaXMuYXV0b0Nsb3NlPWIuYXV0b0Nsb3NlO3JldHVybiB0aGlzfSx0b0pTT046ZnVuY3Rpb24oKXt2YXIgYj1lYi5wcm90b3R5cGUudG9KU09OLmNhbGwodGhpcyk7Yi5hdXRvQ2xvc2U9dGhpcy5hdXRvQ2xvc2U7Yi5jdXJ2ZXM9W107Zm9yKHZhciBlPTAsaD10aGlzLmN1cnZlcy5sZW5ndGg7ZTxoO2UrKyliLmN1cnZlcy5wdXNoKHRoaXMuY3VydmVzW2VdLnRvSlNPTigpKTtyZXR1cm4gYn0sZnJvbUpTT046ZnVuY3Rpb24oYil7ZWIucHJvdG90eXBlLmZyb21KU09OLmNhbGwodGhpcywKYik7dGhpcy5hdXRvQ2xvc2U9Yi5hdXRvQ2xvc2U7dGhpcy5jdXJ2ZXM9W107Zm9yKHZhciBlPTAsaD1iLmN1cnZlcy5sZW5ndGg7ZTxoO2UrKyl7dmFyIG49Yi5jdXJ2ZXNbZV07dGhpcy5jdXJ2ZXMucHVzaCgobmV3IGdqW24udHlwZV0pLmZyb21KU09OKG4pKX1yZXR1cm4gdGhpc319KTtaYy5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKEFkLnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOlpjLHNldEZyb21Qb2ludHM6ZnVuY3Rpb24oYil7dGhpcy5tb3ZlVG8oYlswXS54LGJbMF0ueSk7Zm9yKHZhciBlPTEsaD1iLmxlbmd0aDtlPGg7ZSsrKXRoaXMubGluZVRvKGJbZV0ueCxiW2VdLnkpfSxtb3ZlVG86ZnVuY3Rpb24oYixlKXt0aGlzLmN1cnJlbnRQb2ludC5zZXQoYixlKX0sbGluZVRvOmZ1bmN0aW9uKGIsZSl7dmFyIGg9bmV3IEJjKHRoaXMuY3VycmVudFBvaW50LmNsb25lKCksbmV3IGQoYixlKSk7dGhpcy5jdXJ2ZXMucHVzaChoKTt0aGlzLmN1cnJlbnRQb2ludC5zZXQoYiwKZSl9LHF1YWRyYXRpY0N1cnZlVG86ZnVuY3Rpb24oYixlLGgsbil7Yj1uZXcgWGModGhpcy5jdXJyZW50UG9pbnQuY2xvbmUoKSxuZXcgZChiLGUpLG5ldyBkKGgsbikpO3RoaXMuY3VydmVzLnB1c2goYik7dGhpcy5jdXJyZW50UG9pbnQuc2V0KGgsbil9LGJlemllckN1cnZlVG86ZnVuY3Rpb24oYixlLGgsbix1LHcpe2I9bmV3IFZjKHRoaXMuY3VycmVudFBvaW50LmNsb25lKCksbmV3IGQoYixlKSxuZXcgZChoLG4pLG5ldyBkKHUsdykpO3RoaXMuY3VydmVzLnB1c2goYik7dGhpcy5jdXJyZW50UG9pbnQuc2V0KHUsdyl9LHNwbGluZVRocnU6ZnVuY3Rpb24oYil7dmFyIGU9W3RoaXMuY3VycmVudFBvaW50LmNsb25lKCldLmNvbmNhdChiKTtlPW5ldyBZYyhlKTt0aGlzLmN1cnZlcy5wdXNoKGUpO3RoaXMuY3VycmVudFBvaW50LmNvcHkoYltiLmxlbmd0aC0xXSl9LGFyYzpmdW5jdGlvbihiLGUsaCxuLHUsdyl7dGhpcy5hYnNhcmMoYit0aGlzLmN1cnJlbnRQb2ludC54LGUrdGhpcy5jdXJyZW50UG9pbnQueSwKaCxuLHUsdyl9LGFic2FyYzpmdW5jdGlvbihiLGUsaCxuLHUsdyl7dGhpcy5hYnNlbGxpcHNlKGIsZSxoLGgsbix1LHcpfSxlbGxpcHNlOmZ1bmN0aW9uKGIsZSxoLG4sdSx3LHosRSl7dGhpcy5hYnNlbGxpcHNlKGIrdGhpcy5jdXJyZW50UG9pbnQueCxlK3RoaXMuY3VycmVudFBvaW50LnksaCxuLHUsdyx6LEUpfSxhYnNlbGxpcHNlOmZ1bmN0aW9uKGIsZSxoLG4sdSx3LHosRSl7Yj1uZXcgRWMoYixlLGgsbix1LHcseixFKTswPHRoaXMuY3VydmVzLmxlbmd0aCYmKGU9Yi5nZXRQb2ludCgwKSxlLmVxdWFscyh0aGlzLmN1cnJlbnRQb2ludCl8fHRoaXMubGluZVRvKGUueCxlLnkpKTt0aGlzLmN1cnZlcy5wdXNoKGIpO2I9Yi5nZXRQb2ludCgxKTt0aGlzLmN1cnJlbnRQb2ludC5jb3B5KGIpfSxjb3B5OmZ1bmN0aW9uKGIpe0FkLnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyxiKTt0aGlzLmN1cnJlbnRQb2ludC5jb3B5KGIuY3VycmVudFBvaW50KTtyZXR1cm4gdGhpc30sdG9KU09OOmZ1bmN0aW9uKCl7dmFyIGI9CkFkLnByb3RvdHlwZS50b0pTT04uY2FsbCh0aGlzKTtiLmN1cnJlbnRQb2ludD10aGlzLmN1cnJlbnRQb2ludC50b0FycmF5KCk7cmV0dXJuIGJ9LGZyb21KU09OOmZ1bmN0aW9uKGIpe0FkLnByb3RvdHlwZS5mcm9tSlNPTi5jYWxsKHRoaXMsYik7dGhpcy5jdXJyZW50UG9pbnQuZnJvbUFycmF5KGIuY3VycmVudFBvaW50KTtyZXR1cm4gdGhpc319KTtYZC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKFpjLnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOlhkLGdldFBvaW50c0hvbGVzOmZ1bmN0aW9uKGIpe2Zvcih2YXIgZT1bXSxoPTAsbj10aGlzLmhvbGVzLmxlbmd0aDtoPG47aCsrKWVbaF09dGhpcy5ob2xlc1toXS5nZXRQb2ludHMoYik7cmV0dXJuIGV9LGV4dHJhY3RQb2ludHM6ZnVuY3Rpb24oYil7cmV0dXJue3NoYXBlOnRoaXMuZ2V0UG9pbnRzKGIpLGhvbGVzOnRoaXMuZ2V0UG9pbnRzSG9sZXMoYil9fSxjb3B5OmZ1bmN0aW9uKGIpe1pjLnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcywKYik7dGhpcy5ob2xlcz1bXTtmb3IodmFyIGU9MCxoPWIuaG9sZXMubGVuZ3RoO2U8aDtlKyspdGhpcy5ob2xlcy5wdXNoKGIuaG9sZXNbZV0uY2xvbmUoKSk7cmV0dXJuIHRoaXN9LHRvSlNPTjpmdW5jdGlvbigpe3ZhciBiPVpjLnByb3RvdHlwZS50b0pTT04uY2FsbCh0aGlzKTtiLnV1aWQ9dGhpcy51dWlkO2IuaG9sZXM9W107Zm9yKHZhciBlPTAsaD10aGlzLmhvbGVzLmxlbmd0aDtlPGg7ZSsrKWIuaG9sZXMucHVzaCh0aGlzLmhvbGVzW2VdLnRvSlNPTigpKTtyZXR1cm4gYn0sZnJvbUpTT046ZnVuY3Rpb24oYil7WmMucHJvdG90eXBlLmZyb21KU09OLmNhbGwodGhpcyxiKTt0aGlzLnV1aWQ9Yi51dWlkO3RoaXMuaG9sZXM9W107Zm9yKHZhciBlPTAsaD1iLmhvbGVzLmxlbmd0aDtlPGg7ZSsrKXt2YXIgbj1iLmhvbGVzW2VdO3RoaXMuaG9sZXMucHVzaCgobmV3IFpjKS5mcm9tSlNPTihuKSl9cmV0dXJuIHRoaXN9fSk7U2IucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShTLnByb3RvdHlwZSksCntjb25zdHJ1Y3RvcjpTYixpc0xpZ2h0OiEwLGNvcHk6ZnVuY3Rpb24oYil7Uy5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsYik7dGhpcy5jb2xvci5jb3B5KGIuY29sb3IpO3RoaXMuaW50ZW5zaXR5PWIuaW50ZW5zaXR5O3JldHVybiB0aGlzfSx0b0pTT046ZnVuY3Rpb24oYil7Yj1TLnByb3RvdHlwZS50b0pTT04uY2FsbCh0aGlzLGIpO2Iub2JqZWN0LmNvbG9yPXRoaXMuY29sb3IuZ2V0SGV4KCk7Yi5vYmplY3QuaW50ZW5zaXR5PXRoaXMuaW50ZW5zaXR5O3ZvaWQgMCE9PXRoaXMuZ3JvdW5kQ29sb3ImJihiLm9iamVjdC5ncm91bmRDb2xvcj10aGlzLmdyb3VuZENvbG9yLmdldEhleCgpKTt2b2lkIDAhPT10aGlzLmRpc3RhbmNlJiYoYi5vYmplY3QuZGlzdGFuY2U9dGhpcy5kaXN0YW5jZSk7dm9pZCAwIT09dGhpcy5hbmdsZSYmKGIub2JqZWN0LmFuZ2xlPXRoaXMuYW5nbGUpO3ZvaWQgMCE9PXRoaXMuZGVjYXkmJihiLm9iamVjdC5kZWNheT10aGlzLmRlY2F5KTt2b2lkIDAhPT0KdGhpcy5wZW51bWJyYSYmKGIub2JqZWN0LnBlbnVtYnJhPXRoaXMucGVudW1icmEpO3ZvaWQgMCE9PXRoaXMuc2hhZG93JiYoYi5vYmplY3Quc2hhZG93PXRoaXMuc2hhZG93LnRvSlNPTigpKTtyZXR1cm4gYn19KTt0aC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKFNiLnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOnRoLGlzSGVtaXNwaGVyZUxpZ2h0OiEwLGNvcHk6ZnVuY3Rpb24oYil7U2IucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLGIpO3RoaXMuZ3JvdW5kQ29sb3IuY29weShiLmdyb3VuZENvbG9yKTtyZXR1cm4gdGhpc319KTtPYmplY3QuYXNzaWduKHdlLnByb3RvdHlwZSx7Y29weTpmdW5jdGlvbihiKXt0aGlzLmNhbWVyYT1iLmNhbWVyYS5jbG9uZSgpO3RoaXMuYmlhcz1iLmJpYXM7dGhpcy5yYWRpdXM9Yi5yYWRpdXM7dGhpcy5tYXBTaXplLmNvcHkoYi5tYXBTaXplKTtyZXR1cm4gdGhpc30sY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9LAp0b0pTT046ZnVuY3Rpb24oKXt2YXIgYj17fTswIT09dGhpcy5iaWFzJiYoYi5iaWFzPXRoaXMuYmlhcyk7MSE9PXRoaXMucmFkaXVzJiYoYi5yYWRpdXM9dGhpcy5yYWRpdXMpO2lmKDUxMiE9PXRoaXMubWFwU2l6ZS54fHw1MTIhPT10aGlzLm1hcFNpemUueSliLm1hcFNpemU9dGhpcy5tYXBTaXplLnRvQXJyYXkoKTtiLmNhbWVyYT10aGlzLmNhbWVyYS50b0pTT04oITEpLm9iamVjdDtkZWxldGUgYi5jYW1lcmEubWF0cml4O3JldHVybiBifX0pO3VoLnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUod2UucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6dWgsaXNTcG90TGlnaHRTaGFkb3c6ITAsdXBkYXRlOmZ1bmN0aW9uKGIpe3ZhciBlPXRoaXMuY2FtZXJhLGg9MipvYi5SQUQyREVHKmIuYW5nbGUsbj10aGlzLm1hcFNpemUud2lkdGgvdGhpcy5tYXBTaXplLmhlaWdodDtiPWIuZGlzdGFuY2V8fGUuZmFyO2lmKGghPT1lLmZvdnx8biE9PWUuYXNwZWN0fHxiIT09ZS5mYXIpZS5mb3Y9CmgsZS5hc3BlY3Q9bixlLmZhcj1iLGUudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpfX0pO3ZoLnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoU2IucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6dmgsaXNTcG90TGlnaHQ6ITAsY29weTpmdW5jdGlvbihiKXtTYi5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsYik7dGhpcy5kaXN0YW5jZT1iLmRpc3RhbmNlO3RoaXMuYW5nbGU9Yi5hbmdsZTt0aGlzLnBlbnVtYnJhPWIucGVudW1icmE7dGhpcy5kZWNheT1iLmRlY2F5O3RoaXMudGFyZ2V0PWIudGFyZ2V0LmNsb25lKCk7dGhpcy5zaGFkb3c9Yi5zaGFkb3cuY2xvbmUoKTtyZXR1cm4gdGhpc319KTt3aC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKFNiLnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOndoLGlzUG9pbnRMaWdodDohMCxjb3B5OmZ1bmN0aW9uKGIpe1NiLnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyxiKTt0aGlzLmRpc3RhbmNlPWIuZGlzdGFuY2U7CnRoaXMuZGVjYXk9Yi5kZWNheTt0aGlzLnNoYWRvdz1iLnNoYWRvdy5jbG9uZSgpO3JldHVybiB0aGlzfX0pO3ZnLnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoamQucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6dmcsaXNPcnRob2dyYXBoaWNDYW1lcmE6ITAsY29weTpmdW5jdGlvbihiLGUpe2pkLnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyxiLGUpO3RoaXMubGVmdD1iLmxlZnQ7dGhpcy5yaWdodD1iLnJpZ2h0O3RoaXMudG9wPWIudG9wO3RoaXMuYm90dG9tPWIuYm90dG9tO3RoaXMubmVhcj1iLm5lYXI7dGhpcy5mYXI9Yi5mYXI7dGhpcy56b29tPWIuem9vbTt0aGlzLnZpZXc9bnVsbD09PWIudmlldz9udWxsOk9iamVjdC5hc3NpZ24oe30sYi52aWV3KTtyZXR1cm4gdGhpc30sc2V0Vmlld09mZnNldDpmdW5jdGlvbihiLGUsaCxuLHUsdyl7bnVsbD09PXRoaXMudmlldyYmKHRoaXMudmlldz17ZW5hYmxlZDohMCxmdWxsV2lkdGg6MSxmdWxsSGVpZ2h0OjEsb2Zmc2V0WDowLApvZmZzZXRZOjAsd2lkdGg6MSxoZWlnaHQ6MX0pO3RoaXMudmlldy5lbmFibGVkPSEwO3RoaXMudmlldy5mdWxsV2lkdGg9Yjt0aGlzLnZpZXcuZnVsbEhlaWdodD1lO3RoaXMudmlldy5vZmZzZXRYPWg7dGhpcy52aWV3Lm9mZnNldFk9bjt0aGlzLnZpZXcud2lkdGg9dTt0aGlzLnZpZXcuaGVpZ2h0PXc7dGhpcy51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl9LGNsZWFyVmlld09mZnNldDpmdW5jdGlvbigpe251bGwhPT10aGlzLnZpZXcmJih0aGlzLnZpZXcuZW5hYmxlZD0hMSk7dGhpcy51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl9LHVwZGF0ZVByb2plY3Rpb25NYXRyaXg6ZnVuY3Rpb24oKXt2YXIgYj0odGhpcy5yaWdodC10aGlzLmxlZnQpLygyKnRoaXMuem9vbSksZT0odGhpcy50b3AtdGhpcy5ib3R0b20pLygyKnRoaXMuem9vbSksaD0odGhpcy5yaWdodCt0aGlzLmxlZnQpLzIsbj0odGhpcy50b3ArdGhpcy5ib3R0b20pLzIsdT1oLWI7aCs9YjtiPW4rZTtlPW4tZTtpZihudWxsIT09CnRoaXMudmlldyYmdGhpcy52aWV3LmVuYWJsZWQpe2g9dGhpcy56b29tLyh0aGlzLnZpZXcud2lkdGgvdGhpcy52aWV3LmZ1bGxXaWR0aCk7ZT10aGlzLnpvb20vKHRoaXMudmlldy5oZWlnaHQvdGhpcy52aWV3LmZ1bGxIZWlnaHQpO3ZhciB3PSh0aGlzLnJpZ2h0LXRoaXMubGVmdCkvdGhpcy52aWV3LndpZHRoO249KHRoaXMudG9wLXRoaXMuYm90dG9tKS90aGlzLnZpZXcuaGVpZ2h0O3UrPXRoaXMudmlldy5vZmZzZXRYL2gqdztoPXUrdGhpcy52aWV3LndpZHRoL2gqdztiLT10aGlzLnZpZXcub2Zmc2V0WS9lKm47ZT1iLXRoaXMudmlldy5oZWlnaHQvZSpufXRoaXMucHJvamVjdGlvbk1hdHJpeC5tYWtlT3J0aG9ncmFwaGljKHUsaCxiLGUsdGhpcy5uZWFyLHRoaXMuZmFyKTt0aGlzLnByb2plY3Rpb25NYXRyaXhJbnZlcnNlLmdldEludmVyc2UodGhpcy5wcm9qZWN0aW9uTWF0cml4KX0sdG9KU09OOmZ1bmN0aW9uKGIpe2I9Uy5wcm90b3R5cGUudG9KU09OLmNhbGwodGhpcyxiKTsKYi5vYmplY3Quem9vbT10aGlzLnpvb207Yi5vYmplY3QubGVmdD10aGlzLmxlZnQ7Yi5vYmplY3QucmlnaHQ9dGhpcy5yaWdodDtiLm9iamVjdC50b3A9dGhpcy50b3A7Yi5vYmplY3QuYm90dG9tPXRoaXMuYm90dG9tO2Iub2JqZWN0Lm5lYXI9dGhpcy5uZWFyO2Iub2JqZWN0LmZhcj10aGlzLmZhcjtudWxsIT09dGhpcy52aWV3JiYoYi5vYmplY3Qudmlldz1PYmplY3QuYXNzaWduKHt9LHRoaXMudmlldykpO3JldHVybiBifX0pO3hoLnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUod2UucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6eGh9KTt5aC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKFNiLnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOnloLGlzRGlyZWN0aW9uYWxMaWdodDohMCxjb3B5OmZ1bmN0aW9uKGIpe1NiLnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyxiKTt0aGlzLnRhcmdldD1iLnRhcmdldC5jbG9uZSgpO3RoaXMuc2hhZG93PWIuc2hhZG93LmNsb25lKCk7CnJldHVybiB0aGlzfX0pO3poLnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoU2IucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6emgsaXNBbWJpZW50TGlnaHQ6ITB9KTtBaC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKFNiLnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOkFoLGlzUmVjdEFyZWFMaWdodDohMCxjb3B5OmZ1bmN0aW9uKGIpe1NiLnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyxiKTt0aGlzLndpZHRoPWIud2lkdGg7dGhpcy5oZWlnaHQ9Yi5oZWlnaHQ7cmV0dXJuIHRoaXN9LHRvSlNPTjpmdW5jdGlvbihiKXtiPVNiLnByb3RvdHlwZS50b0pTT04uY2FsbCh0aGlzLGIpO2Iub2JqZWN0LndpZHRoPXRoaXMud2lkdGg7Yi5vYmplY3QuaGVpZ2h0PXRoaXMuaGVpZ2h0O3JldHVybiBifX0pO09iamVjdC5hc3NpZ24oQmgucHJvdG90eXBlLHtsb2FkOmZ1bmN0aW9uKGIsZSxoLG4pe3ZhciB1PXRoaXMsdz1uZXcgVWModS5tYW5hZ2VyKTt3LnNldFBhdGgodS5wYXRoKTsKdy5sb2FkKGIsZnVuY3Rpb24oeil7ZSh1LnBhcnNlKEpTT04ucGFyc2UoeikpKX0saCxuKX0scGFyc2U6ZnVuY3Rpb24oYil7ZnVuY3Rpb24gZShFKXt2b2lkIDA9PT1oW0VdJiZjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsTG9hZGVyOiBVbmRlZmluZWQgdGV4dHVyZSIsRSk7cmV0dXJuIGhbRV19dmFyIGg9dGhpcy50ZXh0dXJlcyxuPW5ldyBvcFtiLnR5cGVdO3ZvaWQgMCE9PWIudXVpZCYmKG4udXVpZD1iLnV1aWQpO3ZvaWQgMCE9PWIubmFtZSYmKG4ubmFtZT1iLm5hbWUpO3ZvaWQgMCE9PWIuY29sb3ImJm4uY29sb3Iuc2V0SGV4KGIuY29sb3IpO3ZvaWQgMCE9PWIucm91Z2huZXNzJiYobi5yb3VnaG5lc3M9Yi5yb3VnaG5lc3MpO3ZvaWQgMCE9PWIubWV0YWxuZXNzJiYobi5tZXRhbG5lc3M9Yi5tZXRhbG5lc3MpO3ZvaWQgMCE9PWIuZW1pc3NpdmUmJm4uZW1pc3NpdmUuc2V0SGV4KGIuZW1pc3NpdmUpO3ZvaWQgMCE9PWIuc3BlY3VsYXImJm4uc3BlY3VsYXIuc2V0SGV4KGIuc3BlY3VsYXIpOwp2b2lkIDAhPT1iLnNoaW5pbmVzcyYmKG4uc2hpbmluZXNzPWIuc2hpbmluZXNzKTt2b2lkIDAhPT1iLmNsZWFyQ29hdCYmKG4uY2xlYXJDb2F0PWIuY2xlYXJDb2F0KTt2b2lkIDAhPT1iLmNsZWFyQ29hdFJvdWdobmVzcyYmKG4uY2xlYXJDb2F0Um91Z2huZXNzPWIuY2xlYXJDb2F0Um91Z2huZXNzKTt2b2lkIDAhPT1iLnZlcnRleENvbG9ycyYmKG4udmVydGV4Q29sb3JzPWIudmVydGV4Q29sb3JzKTt2b2lkIDAhPT1iLmZvZyYmKG4uZm9nPWIuZm9nKTt2b2lkIDAhPT1iLmZsYXRTaGFkaW5nJiYobi5mbGF0U2hhZGluZz1iLmZsYXRTaGFkaW5nKTt2b2lkIDAhPT1iLmJsZW5kaW5nJiYobi5ibGVuZGluZz1iLmJsZW5kaW5nKTt2b2lkIDAhPT1iLmNvbWJpbmUmJihuLmNvbWJpbmU9Yi5jb21iaW5lKTt2b2lkIDAhPT1iLnNpZGUmJihuLnNpZGU9Yi5zaWRlKTt2b2lkIDAhPT1iLm9wYWNpdHkmJihuLm9wYWNpdHk9Yi5vcGFjaXR5KTt2b2lkIDAhPT1iLnRyYW5zcGFyZW50JiYobi50cmFuc3BhcmVudD0KYi50cmFuc3BhcmVudCk7dm9pZCAwIT09Yi5hbHBoYVRlc3QmJihuLmFscGhhVGVzdD1iLmFscGhhVGVzdCk7dm9pZCAwIT09Yi5kZXB0aFRlc3QmJihuLmRlcHRoVGVzdD1iLmRlcHRoVGVzdCk7dm9pZCAwIT09Yi5kZXB0aFdyaXRlJiYobi5kZXB0aFdyaXRlPWIuZGVwdGhXcml0ZSk7dm9pZCAwIT09Yi5jb2xvcldyaXRlJiYobi5jb2xvcldyaXRlPWIuY29sb3JXcml0ZSk7dm9pZCAwIT09Yi53aXJlZnJhbWUmJihuLndpcmVmcmFtZT1iLndpcmVmcmFtZSk7dm9pZCAwIT09Yi53aXJlZnJhbWVMaW5ld2lkdGgmJihuLndpcmVmcmFtZUxpbmV3aWR0aD1iLndpcmVmcmFtZUxpbmV3aWR0aCk7dm9pZCAwIT09Yi53aXJlZnJhbWVMaW5lY2FwJiYobi53aXJlZnJhbWVMaW5lY2FwPWIud2lyZWZyYW1lTGluZWNhcCk7dm9pZCAwIT09Yi53aXJlZnJhbWVMaW5lam9pbiYmKG4ud2lyZWZyYW1lTGluZWpvaW49Yi53aXJlZnJhbWVMaW5lam9pbik7dm9pZCAwIT09Yi5yb3RhdGlvbiYmKG4ucm90YXRpb249CmIucm90YXRpb24pOzEhPT1iLmxpbmV3aWR0aCYmKG4ubGluZXdpZHRoPWIubGluZXdpZHRoKTt2b2lkIDAhPT1iLmRhc2hTaXplJiYobi5kYXNoU2l6ZT1iLmRhc2hTaXplKTt2b2lkIDAhPT1iLmdhcFNpemUmJihuLmdhcFNpemU9Yi5nYXBTaXplKTt2b2lkIDAhPT1iLnNjYWxlJiYobi5zY2FsZT1iLnNjYWxlKTt2b2lkIDAhPT1iLnBvbHlnb25PZmZzZXQmJihuLnBvbHlnb25PZmZzZXQ9Yi5wb2x5Z29uT2Zmc2V0KTt2b2lkIDAhPT1iLnBvbHlnb25PZmZzZXRGYWN0b3ImJihuLnBvbHlnb25PZmZzZXRGYWN0b3I9Yi5wb2x5Z29uT2Zmc2V0RmFjdG9yKTt2b2lkIDAhPT1iLnBvbHlnb25PZmZzZXRVbml0cyYmKG4ucG9seWdvbk9mZnNldFVuaXRzPWIucG9seWdvbk9mZnNldFVuaXRzKTt2b2lkIDAhPT1iLnNraW5uaW5nJiYobi5za2lubmluZz1iLnNraW5uaW5nKTt2b2lkIDAhPT1iLm1vcnBoVGFyZ2V0cyYmKG4ubW9ycGhUYXJnZXRzPWIubW9ycGhUYXJnZXRzKTt2b2lkIDAhPT0KYi5kaXRoZXJpbmcmJihuLmRpdGhlcmluZz1iLmRpdGhlcmluZyk7dm9pZCAwIT09Yi52aXNpYmxlJiYobi52aXNpYmxlPWIudmlzaWJsZSk7dm9pZCAwIT09Yi51c2VyRGF0YSYmKG4udXNlckRhdGE9Yi51c2VyRGF0YSk7aWYodm9pZCAwIT09Yi51bmlmb3Jtcylmb3IodmFyIHUgaW4gYi51bmlmb3Jtcyl7dmFyIHc9Yi51bmlmb3Jtc1t1XTtuLnVuaWZvcm1zW3VdPXt9O3N3aXRjaCh3LnR5cGUpe2Nhc2UgInQiOm4udW5pZm9ybXNbdV0udmFsdWU9ZSh3LnZhbHVlKTticmVhaztjYXNlICJjIjpuLnVuaWZvcm1zW3VdLnZhbHVlPShuZXcgQikuc2V0SGV4KHcudmFsdWUpO2JyZWFrO2Nhc2UgInYyIjpuLnVuaWZvcm1zW3VdLnZhbHVlPShuZXcgZCkuZnJvbUFycmF5KHcudmFsdWUpO2JyZWFrO2Nhc2UgInYzIjpuLnVuaWZvcm1zW3VdLnZhbHVlPShuZXcgZykuZnJvbUFycmF5KHcudmFsdWUpO2JyZWFrO2Nhc2UgInY0IjpuLnVuaWZvcm1zW3VdLnZhbHVlPShuZXcgbSkuZnJvbUFycmF5KHcudmFsdWUpOwpicmVhaztjYXNlICJtMyI6bi51bmlmb3Jtc1t1XS52YWx1ZT0obmV3IGwpLmZyb21BcnJheSh3LnZhbHVlKTtjYXNlICJtNCI6bi51bmlmb3Jtc1t1XS52YWx1ZT0obmV3IEMpLmZyb21BcnJheSh3LnZhbHVlKTticmVhaztkZWZhdWx0Om4udW5pZm9ybXNbdV0udmFsdWU9dy52YWx1ZX19dm9pZCAwIT09Yi5kZWZpbmVzJiYobi5kZWZpbmVzPWIuZGVmaW5lcyk7dm9pZCAwIT09Yi52ZXJ0ZXhTaGFkZXImJihuLnZlcnRleFNoYWRlcj1iLnZlcnRleFNoYWRlcik7dm9pZCAwIT09Yi5mcmFnbWVudFNoYWRlciYmKG4uZnJhZ21lbnRTaGFkZXI9Yi5mcmFnbWVudFNoYWRlcik7aWYodm9pZCAwIT09Yi5leHRlbnNpb25zKWZvcih2YXIgeiBpbiBiLmV4dGVuc2lvbnMpbi5leHRlbnNpb25zW3pdPWIuZXh0ZW5zaW9uc1t6XTt2b2lkIDAhPT1iLnNoYWRpbmcmJihuLmZsYXRTaGFkaW5nPTE9PT1iLnNoYWRpbmcpO3ZvaWQgMCE9PWIuc2l6ZSYmKG4uc2l6ZT1iLnNpemUpO3ZvaWQgMCE9PWIuc2l6ZUF0dGVudWF0aW9uJiYKKG4uc2l6ZUF0dGVudWF0aW9uPWIuc2l6ZUF0dGVudWF0aW9uKTt2b2lkIDAhPT1iLm1hcCYmKG4ubWFwPWUoYi5tYXApKTt2b2lkIDAhPT1iLm1hdGNhcCYmKG4ubWF0Y2FwPWUoYi5tYXRjYXApKTt2b2lkIDAhPT1iLmFscGhhTWFwJiYobi5hbHBoYU1hcD1lKGIuYWxwaGFNYXApLG4udHJhbnNwYXJlbnQ9ITApO3ZvaWQgMCE9PWIuYnVtcE1hcCYmKG4uYnVtcE1hcD1lKGIuYnVtcE1hcCkpO3ZvaWQgMCE9PWIuYnVtcFNjYWxlJiYobi5idW1wU2NhbGU9Yi5idW1wU2NhbGUpO3ZvaWQgMCE9PWIubm9ybWFsTWFwJiYobi5ub3JtYWxNYXA9ZShiLm5vcm1hbE1hcCkpO3ZvaWQgMCE9PWIubm9ybWFsTWFwVHlwZSYmKG4ubm9ybWFsTWFwVHlwZT1iLm5vcm1hbE1hcFR5cGUpO3ZvaWQgMCE9PWIubm9ybWFsU2NhbGUmJih1PWIubm9ybWFsU2NhbGUsITE9PT1BcnJheS5pc0FycmF5KHUpJiYodT1bdSx1XSksbi5ub3JtYWxTY2FsZT0obmV3IGQpLmZyb21BcnJheSh1KSk7dm9pZCAwIT09CmIuZGlzcGxhY2VtZW50TWFwJiYobi5kaXNwbGFjZW1lbnRNYXA9ZShiLmRpc3BsYWNlbWVudE1hcCkpO3ZvaWQgMCE9PWIuZGlzcGxhY2VtZW50U2NhbGUmJihuLmRpc3BsYWNlbWVudFNjYWxlPWIuZGlzcGxhY2VtZW50U2NhbGUpO3ZvaWQgMCE9PWIuZGlzcGxhY2VtZW50QmlhcyYmKG4uZGlzcGxhY2VtZW50Qmlhcz1iLmRpc3BsYWNlbWVudEJpYXMpO3ZvaWQgMCE9PWIucm91Z2huZXNzTWFwJiYobi5yb3VnaG5lc3NNYXA9ZShiLnJvdWdobmVzc01hcCkpO3ZvaWQgMCE9PWIubWV0YWxuZXNzTWFwJiYobi5tZXRhbG5lc3NNYXA9ZShiLm1ldGFsbmVzc01hcCkpO3ZvaWQgMCE9PWIuZW1pc3NpdmVNYXAmJihuLmVtaXNzaXZlTWFwPWUoYi5lbWlzc2l2ZU1hcCkpO3ZvaWQgMCE9PWIuZW1pc3NpdmVJbnRlbnNpdHkmJihuLmVtaXNzaXZlSW50ZW5zaXR5PWIuZW1pc3NpdmVJbnRlbnNpdHkpO3ZvaWQgMCE9PWIuc3BlY3VsYXJNYXAmJihuLnNwZWN1bGFyTWFwPWUoYi5zcGVjdWxhck1hcCkpOwp2b2lkIDAhPT1iLmVudk1hcCYmKG4uZW52TWFwPWUoYi5lbnZNYXApKTt2b2lkIDAhPT1iLmVudk1hcEludGVuc2l0eSYmKG4uZW52TWFwSW50ZW5zaXR5PWIuZW52TWFwSW50ZW5zaXR5KTt2b2lkIDAhPT1iLnJlZmxlY3Rpdml0eSYmKG4ucmVmbGVjdGl2aXR5PWIucmVmbGVjdGl2aXR5KTt2b2lkIDAhPT1iLmxpZ2h0TWFwJiYobi5saWdodE1hcD1lKGIubGlnaHRNYXApKTt2b2lkIDAhPT1iLmxpZ2h0TWFwSW50ZW5zaXR5JiYobi5saWdodE1hcEludGVuc2l0eT1iLmxpZ2h0TWFwSW50ZW5zaXR5KTt2b2lkIDAhPT1iLmFvTWFwJiYobi5hb01hcD1lKGIuYW9NYXApKTt2b2lkIDAhPT1iLmFvTWFwSW50ZW5zaXR5JiYobi5hb01hcEludGVuc2l0eT1iLmFvTWFwSW50ZW5zaXR5KTt2b2lkIDAhPT1iLmdyYWRpZW50TWFwJiYobi5ncmFkaWVudE1hcD1lKGIuZ3JhZGllbnRNYXApKTtyZXR1cm4gbn0sc2V0UGF0aDpmdW5jdGlvbihiKXt0aGlzLnBhdGg9YjtyZXR1cm4gdGhpc30sc2V0VGV4dHVyZXM6ZnVuY3Rpb24oYil7dGhpcy50ZXh0dXJlcz0KYjtyZXR1cm4gdGhpc319KTt2YXIgaGo9e2RlY29kZVRleHQ6ZnVuY3Rpb24oYil7aWYoInVuZGVmaW5lZCIhPT10eXBlb2YgVGV4dERlY29kZXIpcmV0dXJuKG5ldyBUZXh0RGVjb2RlcikuZGVjb2RlKGIpO2Zvcih2YXIgZT0iIixoPTAsbj1iLmxlbmd0aDtoPG47aCsrKWUrPVN0cmluZy5mcm9tQ2hhckNvZGUoYltoXSk7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChlc2NhcGUoZSkpfSxleHRyYWN0VXJsQmFzZTpmdW5jdGlvbihiKXt2YXIgZT1iLmxhc3RJbmRleE9mKCIvIik7cmV0dXJuLTE9PT1lPyIuLyI6Yi5zdWJzdHIoMCxlKzEpfX07T2JqZWN0LmFzc2lnbihIaS5wcm90b3R5cGUse2xvYWQ6ZnVuY3Rpb24oYixlLGgsbil7dmFyIHU9dGhpcyx3PW5ldyBVYyh1Lm1hbmFnZXIpO3cuc2V0UGF0aCh1LnBhdGgpO3cubG9hZChiLGZ1bmN0aW9uKHope2UodS5wYXJzZShKU09OLnBhcnNlKHopKSl9LGgsbil9LHBhcnNlOmZ1bmN0aW9uKGIpe3ZhciBlPW5ldyB4YSxoPWIuZGF0YS5pbmRleDsKaWYodm9pZCAwIT09aCl7dmFyIG49bmV3IGlqW2gudHlwZV0oaC5hcnJheSk7ZS5zZXRJbmRleChuZXcgVChuLDEpKX1oPWIuZGF0YS5hdHRyaWJ1dGVzO2Zvcih2YXIgdSBpbiBoKXt2YXIgdz1oW3VdO249bmV3IGlqW3cudHlwZV0ody5hcnJheSk7bj1uZXcgVChuLHcuaXRlbVNpemUsdy5ub3JtYWxpemVkKTt2b2lkIDAhPT13Lm5hbWUmJihuLm5hbWU9dy5uYW1lKTtlLmFkZEF0dHJpYnV0ZSh1LG4pfXZhciB6PWIuZGF0YS5tb3JwaEF0dHJpYnV0ZXM7aWYoeilmb3IodSBpbiB6KXt2YXIgRT16W3VdLEg9W107aD0wO2Zvcih2YXIgST1FLmxlbmd0aDtoPEk7aCsrKXc9RVtoXSxuPW5ldyBpalt3LnR5cGVdKHcuYXJyYXkpLG49bmV3IFQobix3Lml0ZW1TaXplLHcubm9ybWFsaXplZCksdm9pZCAwIT09dy5uYW1lJiYobi5uYW1lPXcubmFtZSksSC5wdXNoKG4pO2UubW9ycGhBdHRyaWJ1dGVzW3VdPUh9dT1iLmRhdGEuZ3JvdXBzfHxiLmRhdGEuZHJhd2NhbGxzfHxiLmRhdGEub2Zmc2V0czsKaWYodm9pZCAwIT09dSlmb3IoaD0wLHc9dS5sZW5ndGg7aCE9PXc7KytoKW49dVtoXSxlLmFkZEdyb3VwKG4uc3RhcnQsbi5jb3VudCxuLm1hdGVyaWFsSW5kZXgpO2g9Yi5kYXRhLmJvdW5kaW5nU3BoZXJlO3ZvaWQgMCE9PWgmJih1PW5ldyBnLHZvaWQgMCE9PWguY2VudGVyJiZ1LmZyb21BcnJheShoLmNlbnRlciksZS5ib3VuZGluZ1NwaGVyZT1uZXcgQSh1LGgucmFkaXVzKSk7Yi5uYW1lJiYoZS5uYW1lPWIubmFtZSk7Yi51c2VyRGF0YSYmKGUudXNlckRhdGE9Yi51c2VyRGF0YSk7cmV0dXJuIGV9LHNldFBhdGg6ZnVuY3Rpb24oYil7dGhpcy5wYXRoPWI7cmV0dXJuIHRoaXN9fSk7dmFyIGlqPXtJbnQ4QXJyYXksVWludDhBcnJheSxVaW50OENsYW1wZWRBcnJheToidW5kZWZpbmVkIiE9PXR5cGVvZiBVaW50OENsYW1wZWRBcnJheT9VaW50OENsYW1wZWRBcnJheTpVaW50OEFycmF5LEludDE2QXJyYXksVWludDE2QXJyYXksSW50MzJBcnJheSxVaW50MzJBcnJheSxGbG9hdDMyQXJyYXksCkZsb2F0NjRBcnJheX07T2JqZWN0LmFzc2lnbihJaS5wcm90b3R5cGUse2Nyb3NzT3JpZ2luOiJhbm9ueW1vdXMiLGxvYWQ6ZnVuY3Rpb24oYixlLGgsbil7dmFyIHU9dGhpcyx3PXZvaWQgMD09PXRoaXMucGF0aD9oai5leHRyYWN0VXJsQmFzZShiKTp0aGlzLnBhdGg7dGhpcy5yZXNvdXJjZVBhdGg9dGhpcy5yZXNvdXJjZVBhdGh8fHc7dz1uZXcgVWModS5tYW5hZ2VyKTt3LnNldFBhdGgodGhpcy5wYXRoKTt3LmxvYWQoYixmdW5jdGlvbih6KXt2YXIgRT1udWxsO3RyeXtFPUpTT04ucGFyc2Uoeil9Y2F0Y2goSCl7dm9pZCAwIT09biYmbihIKTtjb25zb2xlLmVycm9yKCJUSFJFRTpPYmplY3RMb2FkZXI6IENhbid0IHBhcnNlICIrYisiLiIsSC5tZXNzYWdlKTtyZXR1cm59ej1FLm1ldGFkYXRhO3ZvaWQgMD09PXp8fHZvaWQgMD09PXoudHlwZXx8Imdlb21ldHJ5Ij09PXoudHlwZS50b0xvd2VyQ2FzZSgpP2NvbnNvbGUuZXJyb3IoIlRIUkVFLk9iamVjdExvYWRlcjogQ2FuJ3QgbG9hZCAiKwpiKTp1LnBhcnNlKEUsZSl9LGgsbil9LHNldFBhdGg6ZnVuY3Rpb24oYil7dGhpcy5wYXRoPWI7cmV0dXJuIHRoaXN9LHNldFJlc291cmNlUGF0aDpmdW5jdGlvbihiKXt0aGlzLnJlc291cmNlUGF0aD1iO3JldHVybiB0aGlzfSxzZXRDcm9zc09yaWdpbjpmdW5jdGlvbihiKXt0aGlzLmNyb3NzT3JpZ2luPWI7cmV0dXJuIHRoaXN9LHBhcnNlOmZ1bmN0aW9uKGIsZSl7dmFyIGg9dGhpcy5wYXJzZVNoYXBlKGIuc2hhcGVzKTtoPXRoaXMucGFyc2VHZW9tZXRyaWVzKGIuZ2VvbWV0cmllcyxoKTt2YXIgbj10aGlzLnBhcnNlSW1hZ2VzKGIuaW1hZ2VzLGZ1bmN0aW9uKCl7dm9pZCAwIT09ZSYmZSh1KX0pO249dGhpcy5wYXJzZVRleHR1cmVzKGIudGV4dHVyZXMsbik7bj10aGlzLnBhcnNlTWF0ZXJpYWxzKGIubWF0ZXJpYWxzLG4pO3ZhciB1PXRoaXMucGFyc2VPYmplY3QoYi5vYmplY3QsaCxuKTtiLmFuaW1hdGlvbnMmJih1LmFuaW1hdGlvbnM9dGhpcy5wYXJzZUFuaW1hdGlvbnMoYi5hbmltYXRpb25zKSk7CnZvaWQgMCE9PWIuaW1hZ2VzJiYwIT09Yi5pbWFnZXMubGVuZ3RofHx2b2lkIDA9PT1lfHxlKHUpO3JldHVybiB1fSxwYXJzZVNoYXBlOmZ1bmN0aW9uKGIpe3ZhciBlPXt9O2lmKHZvaWQgMCE9PWIpZm9yKHZhciBoPTAsbj1iLmxlbmd0aDtoPG47aCsrKXt2YXIgdT0obmV3IFhkKS5mcm9tSlNPTihiW2hdKTtlW3UudXVpZF09dX1yZXR1cm4gZX0scGFyc2VHZW9tZXRyaWVzOmZ1bmN0aW9uKGIsZSl7dmFyIGg9e307aWYodm9pZCAwIT09Yilmb3IodmFyIG49bmV3IEhpLHU9MCx3PWIubGVuZ3RoO3U8dzt1Kyspe3ZhciB6PWJbdV07c3dpdGNoKHoudHlwZSl7Y2FzZSAiUGxhbmVHZW9tZXRyeSI6Y2FzZSAiUGxhbmVCdWZmZXJHZW9tZXRyeSI6dmFyIEU9bmV3IHhjW3oudHlwZV0oei53aWR0aCx6LmhlaWdodCx6LndpZHRoU2VnbWVudHMsei5oZWlnaHRTZWdtZW50cyk7YnJlYWs7Y2FzZSAiQm94R2VvbWV0cnkiOmNhc2UgIkJveEJ1ZmZlckdlb21ldHJ5IjpjYXNlICJDdWJlR2VvbWV0cnkiOkU9Cm5ldyB4Y1t6LnR5cGVdKHoud2lkdGgsei5oZWlnaHQsei5kZXB0aCx6LndpZHRoU2VnbWVudHMsei5oZWlnaHRTZWdtZW50cyx6LmRlcHRoU2VnbWVudHMpO2JyZWFrO2Nhc2UgIkNpcmNsZUdlb21ldHJ5IjpjYXNlICJDaXJjbGVCdWZmZXJHZW9tZXRyeSI6RT1uZXcgeGNbei50eXBlXSh6LnJhZGl1cyx6LnNlZ21lbnRzLHoudGhldGFTdGFydCx6LnRoZXRhTGVuZ3RoKTticmVhaztjYXNlICJDeWxpbmRlckdlb21ldHJ5IjpjYXNlICJDeWxpbmRlckJ1ZmZlckdlb21ldHJ5IjpFPW5ldyB4Y1t6LnR5cGVdKHoucmFkaXVzVG9wLHoucmFkaXVzQm90dG9tLHouaGVpZ2h0LHoucmFkaWFsU2VnbWVudHMsei5oZWlnaHRTZWdtZW50cyx6Lm9wZW5FbmRlZCx6LnRoZXRhU3RhcnQsei50aGV0YUxlbmd0aCk7YnJlYWs7Y2FzZSAiQ29uZUdlb21ldHJ5IjpjYXNlICJDb25lQnVmZmVyR2VvbWV0cnkiOkU9bmV3IHhjW3oudHlwZV0oei5yYWRpdXMsei5oZWlnaHQsei5yYWRpYWxTZWdtZW50cywKei5oZWlnaHRTZWdtZW50cyx6Lm9wZW5FbmRlZCx6LnRoZXRhU3RhcnQsei50aGV0YUxlbmd0aCk7YnJlYWs7Y2FzZSAiU3BoZXJlR2VvbWV0cnkiOmNhc2UgIlNwaGVyZUJ1ZmZlckdlb21ldHJ5IjpFPW5ldyB4Y1t6LnR5cGVdKHoucmFkaXVzLHoud2lkdGhTZWdtZW50cyx6LmhlaWdodFNlZ21lbnRzLHoucGhpU3RhcnQsei5waGlMZW5ndGgsei50aGV0YVN0YXJ0LHoudGhldGFMZW5ndGgpO2JyZWFrO2Nhc2UgIkRvZGVjYWhlZHJvbkdlb21ldHJ5IjpjYXNlICJEb2RlY2FoZWRyb25CdWZmZXJHZW9tZXRyeSI6Y2FzZSAiSWNvc2FoZWRyb25HZW9tZXRyeSI6Y2FzZSAiSWNvc2FoZWRyb25CdWZmZXJHZW9tZXRyeSI6Y2FzZSAiT2N0YWhlZHJvbkdlb21ldHJ5IjpjYXNlICJPY3RhaGVkcm9uQnVmZmVyR2VvbWV0cnkiOmNhc2UgIlRldHJhaGVkcm9uR2VvbWV0cnkiOmNhc2UgIlRldHJhaGVkcm9uQnVmZmVyR2VvbWV0cnkiOkU9bmV3IHhjW3oudHlwZV0oei5yYWRpdXMsei5kZXRhaWwpOwpicmVhaztjYXNlICJSaW5nR2VvbWV0cnkiOmNhc2UgIlJpbmdCdWZmZXJHZW9tZXRyeSI6RT1uZXcgeGNbei50eXBlXSh6LmlubmVyUmFkaXVzLHoub3V0ZXJSYWRpdXMsei50aGV0YVNlZ21lbnRzLHoucGhpU2VnbWVudHMsei50aGV0YVN0YXJ0LHoudGhldGFMZW5ndGgpO2JyZWFrO2Nhc2UgIlRvcnVzR2VvbWV0cnkiOmNhc2UgIlRvcnVzQnVmZmVyR2VvbWV0cnkiOkU9bmV3IHhjW3oudHlwZV0oei5yYWRpdXMsei50dWJlLHoucmFkaWFsU2VnbWVudHMsei50dWJ1bGFyU2VnbWVudHMsei5hcmMpO2JyZWFrO2Nhc2UgIlRvcnVzS25vdEdlb21ldHJ5IjpjYXNlICJUb3J1c0tub3RCdWZmZXJHZW9tZXRyeSI6RT1uZXcgeGNbei50eXBlXSh6LnJhZGl1cyx6LnR1YmUsei50dWJ1bGFyU2VnbWVudHMsei5yYWRpYWxTZWdtZW50cyx6LnAsei5xKTticmVhaztjYXNlICJUdWJlR2VvbWV0cnkiOmNhc2UgIlR1YmVCdWZmZXJHZW9tZXRyeSI6RT1uZXcgeGNbei50eXBlXSgobmV3IGdqW3oucGF0aC50eXBlXSkuZnJvbUpTT04oei5wYXRoKSwKei50dWJ1bGFyU2VnbWVudHMsei5yYWRpdXMsei5yYWRpYWxTZWdtZW50cyx6LmNsb3NlZCk7YnJlYWs7Y2FzZSAiTGF0aGVHZW9tZXRyeSI6Y2FzZSAiTGF0aGVCdWZmZXJHZW9tZXRyeSI6RT1uZXcgeGNbei50eXBlXSh6LnBvaW50cyx6LnNlZ21lbnRzLHoucGhpU3RhcnQsei5waGlMZW5ndGgpO2JyZWFrO2Nhc2UgIlBvbHloZWRyb25HZW9tZXRyeSI6Y2FzZSAiUG9seWhlZHJvbkJ1ZmZlckdlb21ldHJ5IjpFPW5ldyB4Y1t6LnR5cGVdKHoudmVydGljZXMsei5pbmRpY2VzLHoucmFkaXVzLHouZGV0YWlscyk7YnJlYWs7Y2FzZSAiU2hhcGVHZW9tZXRyeSI6Y2FzZSAiU2hhcGVCdWZmZXJHZW9tZXRyeSI6RT1bXTtmb3IodmFyIEg9MCxJPXouc2hhcGVzLmxlbmd0aDtIPEk7SCsrKXt2YXIgTz1lW3ouc2hhcGVzW0hdXTtFLnB1c2goTyl9RT1uZXcgeGNbei50eXBlXShFLHouY3VydmVTZWdtZW50cyk7YnJlYWs7Y2FzZSAiRXh0cnVkZUdlb21ldHJ5IjpjYXNlICJFeHRydWRlQnVmZmVyR2VvbWV0cnkiOkU9CltdO0g9MDtmb3IoST16LnNoYXBlcy5sZW5ndGg7SDxJO0grKylPPWVbei5zaGFwZXNbSF1dLEUucHVzaChPKTtIPXoub3B0aW9ucy5leHRydWRlUGF0aDt2b2lkIDAhPT1IJiYoei5vcHRpb25zLmV4dHJ1ZGVQYXRoPShuZXcgZ2pbSC50eXBlXSkuZnJvbUpTT04oSCkpO0U9bmV3IHhjW3oudHlwZV0oRSx6Lm9wdGlvbnMpO2JyZWFrO2Nhc2UgIkJ1ZmZlckdlb21ldHJ5IjpFPW4ucGFyc2Uoeik7YnJlYWs7Y2FzZSAiR2VvbWV0cnkiOiJUSFJFRSJpbiB3aW5kb3cmJiJMZWdhY3lKU09OTG9hZGVyImluIFRIUkVFP0U9KG5ldyBUSFJFRS5MZWdhY3lKU09OTG9hZGVyKS5wYXJzZSh6LHRoaXMucmVzb3VyY2VQYXRoKS5nZW9tZXRyeTpjb25zb2xlLmVycm9yKCdUSFJFRS5PYmplY3RMb2FkZXI6IFlvdSBoYXZlIHRvIGltcG9ydCBMZWdhY3lKU09OTG9hZGVyIGluIG9yZGVyIGxvYWQgZ2VvbWV0cnkgZGF0YSBvZiB0eXBlICJHZW9tZXRyeSIuJyk7YnJlYWs7ZGVmYXVsdDpjb25zb2xlLndhcm4oJ1RIUkVFLk9iamVjdExvYWRlcjogVW5zdXBwb3J0ZWQgZ2VvbWV0cnkgdHlwZSAiJysKei50eXBlKyciJyk7Y29udGludWV9RS51dWlkPXoudXVpZDt2b2lkIDAhPT16Lm5hbWUmJihFLm5hbWU9ei5uYW1lKTshMD09PUUuaXNCdWZmZXJHZW9tZXRyeSYmdm9pZCAwIT09ei51c2VyRGF0YSYmKEUudXNlckRhdGE9ei51c2VyRGF0YSk7aFt6LnV1aWRdPUV9cmV0dXJuIGh9LHBhcnNlTWF0ZXJpYWxzOmZ1bmN0aW9uKGIsZSl7dmFyIGg9e30sbj17fTtpZih2b2lkIDAhPT1iKXt2YXIgdT1uZXcgQmg7dS5zZXRUZXh0dXJlcyhlKTtlPTA7Zm9yKHZhciB3PWIubGVuZ3RoO2U8dztlKyspe3ZhciB6PWJbZV07aWYoIk11bHRpTWF0ZXJpYWwiPT09ei50eXBlKXtmb3IodmFyIEU9W10sSD0wO0g8ei5tYXRlcmlhbHMubGVuZ3RoO0grKyl7dmFyIEk9ei5tYXRlcmlhbHNbSF07dm9pZCAwPT09aFtJLnV1aWRdJiYoaFtJLnV1aWRdPXUucGFyc2UoSSkpO0UucHVzaChoW0kudXVpZF0pfW5bei51dWlkXT1FfWVsc2Ugdm9pZCAwPT09aFt6LnV1aWRdJiYoaFt6LnV1aWRdPXUucGFyc2UoeikpLApuW3oudXVpZF09aFt6LnV1aWRdfX1yZXR1cm4gbn0scGFyc2VBbmltYXRpb25zOmZ1bmN0aW9uKGIpe2Zvcih2YXIgZT1bXSxoPTA7aDxiLmxlbmd0aDtoKyspe3ZhciBuPWJbaF0sdT1JYy5wYXJzZShuKTt2b2lkIDAhPT1uLnV1aWQmJih1LnV1aWQ9bi51dWlkKTtlLnB1c2godSl9cmV0dXJuIGV9LHBhcnNlSW1hZ2VzOmZ1bmN0aW9uKGIsZSl7ZnVuY3Rpb24gaChSKXtuLm1hbmFnZXIuaXRlbVN0YXJ0KFIpO3JldHVybiB3LmxvYWQoUixmdW5jdGlvbigpe24ubWFuYWdlci5pdGVtRW5kKFIpfSx2b2lkIDAsZnVuY3Rpb24oKXtuLm1hbmFnZXIuaXRlbUVycm9yKFIpO24ubWFuYWdlci5pdGVtRW5kKFIpfSl9dmFyIG49dGhpcyx1PXt9O2lmKHZvaWQgMCE9PWImJjA8Yi5sZW5ndGgpe2U9bmV3IERpKGUpO3ZhciB3PW5ldyBzZyhlKTt3LnNldENyb3NzT3JpZ2luKHRoaXMuY3Jvc3NPcmlnaW4pO2U9MDtmb3IodmFyIHo9Yi5sZW5ndGg7ZTx6O2UrKyl7dmFyIEU9YltlXSxIPUUudXJsOwppZihBcnJheS5pc0FycmF5KEgpKXt1W0UudXVpZF09W107Zm9yKHZhciBJPTAsTz1ILmxlbmd0aDtJPE87SSsrKXt2YXIgUT1IW0ldO1E9L14oXC9cLyl8KFthLXpdKzooXC9cLyk/KS9pLnRlc3QoUSk/UTpuLnJlc291cmNlUGF0aCtRO3VbRS51dWlkXS5wdXNoKGgoUSkpfX1lbHNlIFE9L14oXC9cLyl8KFthLXpdKzooXC9cLyk/KS9pLnRlc3QoRS51cmwpP0UudXJsOm4ucmVzb3VyY2VQYXRoK0UudXJsLHVbRS51dWlkXT1oKFEpfX1yZXR1cm4gdX0scGFyc2VUZXh0dXJlczpmdW5jdGlvbihiLGUpe2Z1bmN0aW9uIGgoSCxJKXtpZigibnVtYmVyIj09PXR5cGVvZiBIKXJldHVybiBIO2NvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0TG9hZGVyLnBhcnNlVGV4dHVyZTogQ29uc3RhbnQgc2hvdWxkIGJlIGluIG51bWVyaWMgZm9ybS4iLEgpO3JldHVybiBJW0hdfXZhciBuPXt9O2lmKHZvaWQgMCE9PWIpZm9yKHZhciB1PTAsdz1iLmxlbmd0aDt1PHc7dSsrKXt2YXIgej1iW3VdO3ZvaWQgMD09PQp6LmltYWdlJiZjb25zb2xlLndhcm4oJ1RIUkVFLk9iamVjdExvYWRlcjogTm8gImltYWdlIiBzcGVjaWZpZWQgZm9yJyx6LnV1aWQpO3ZvaWQgMD09PWVbei5pbWFnZV0mJmNvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0TG9hZGVyOiBVbmRlZmluZWQgaW1hZ2UiLHouaW1hZ2UpO3ZhciBFPUFycmF5LmlzQXJyYXkoZVt6LmltYWdlXSk/bmV3IHVkKGVbei5pbWFnZV0pOm5ldyBrKGVbei5pbWFnZV0pO0UubmVlZHNVcGRhdGU9ITA7RS51dWlkPXoudXVpZDt2b2lkIDAhPT16Lm5hbWUmJihFLm5hbWU9ei5uYW1lKTt2b2lkIDAhPT16Lm1hcHBpbmcmJihFLm1hcHBpbmc9aCh6Lm1hcHBpbmcscHApKTt2b2lkIDAhPT16Lm9mZnNldCYmRS5vZmZzZXQuZnJvbUFycmF5KHoub2Zmc2V0KTt2b2lkIDAhPT16LnJlcGVhdCYmRS5yZXBlYXQuZnJvbUFycmF5KHoucmVwZWF0KTt2b2lkIDAhPT16LmNlbnRlciYmRS5jZW50ZXIuZnJvbUFycmF5KHouY2VudGVyKTt2b2lkIDAhPT16LnJvdGF0aW9uJiYKKEUucm90YXRpb249ei5yb3RhdGlvbik7dm9pZCAwIT09ei53cmFwJiYoRS53cmFwUz1oKHoud3JhcFswXSxUbCksRS53cmFwVD1oKHoud3JhcFsxXSxUbCkpO3ZvaWQgMCE9PXouZm9ybWF0JiYoRS5mb3JtYXQ9ei5mb3JtYXQpO3ZvaWQgMCE9PXoudHlwZSYmKEUudHlwZT16LnR5cGUpO3ZvaWQgMCE9PXouZW5jb2RpbmcmJihFLmVuY29kaW5nPXouZW5jb2RpbmcpO3ZvaWQgMCE9PXoubWluRmlsdGVyJiYoRS5taW5GaWx0ZXI9aCh6Lm1pbkZpbHRlcixVbCkpO3ZvaWQgMCE9PXoubWFnRmlsdGVyJiYoRS5tYWdGaWx0ZXI9aCh6Lm1hZ0ZpbHRlcixVbCkpO3ZvaWQgMCE9PXouYW5pc290cm9weSYmKEUuYW5pc290cm9weT16LmFuaXNvdHJvcHkpO3ZvaWQgMCE9PXouZmxpcFkmJihFLmZsaXBZPXouZmxpcFkpO3ZvaWQgMCE9PXoucHJlbXVsdGlwbHlBbHBoYSYmKEUucHJlbXVsdGlwbHlBbHBoYT16LnByZW11bHRpcGx5QWxwaGEpO3ZvaWQgMCE9PXoudW5wYWNrQWxpZ25tZW50JiYoRS51bnBhY2tBbGlnbm1lbnQ9CnoudW5wYWNrQWxpZ25tZW50KTtuW3oudXVpZF09RX1yZXR1cm4gbn0scGFyc2VPYmplY3Q6ZnVuY3Rpb24oYixlLGgpe2Z1bmN0aW9uIG4oSSl7dm9pZCAwPT09ZVtJXSYmY29uc29sZS53YXJuKCJUSFJFRS5PYmplY3RMb2FkZXI6IFVuZGVmaW5lZCBnZW9tZXRyeSIsSSk7cmV0dXJuIGVbSV19ZnVuY3Rpb24gdShJKXtpZih2b2lkIDAhPT1JKXtpZihBcnJheS5pc0FycmF5KEkpKXtmb3IodmFyIE89W10sUT0wLFI9SS5sZW5ndGg7UTxSO1ErKyl7dmFyIFU9SVtRXTt2b2lkIDA9PT1oW1VdJiZjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdExvYWRlcjogVW5kZWZpbmVkIG1hdGVyaWFsIixVKTtPLnB1c2goaFtVXSl9cmV0dXJuIE99dm9pZCAwPT09aFtJXSYmY29uc29sZS53YXJuKCJUSFJFRS5PYmplY3RMb2FkZXI6IFVuZGVmaW5lZCBtYXRlcmlhbCIsSSk7cmV0dXJuIGhbSV19fXN3aXRjaChiLnR5cGUpe2Nhc2UgIlNjZW5lIjp2YXIgdz1uZXcgaWg7dm9pZCAwIT09Yi5iYWNrZ3JvdW5kJiYKTnVtYmVyLmlzSW50ZWdlcihiLmJhY2tncm91bmQpJiYody5iYWNrZ3JvdW5kPW5ldyBCKGIuYmFja2dyb3VuZCkpO3ZvaWQgMCE9PWIuZm9nJiYoIkZvZyI9PT1iLmZvZy50eXBlP3cuZm9nPW5ldyBoaChiLmZvZy5jb2xvcixiLmZvZy5uZWFyLGIuZm9nLmZhcik6IkZvZ0V4cDIiPT09Yi5mb2cudHlwZSYmKHcuZm9nPW5ldyBnaChiLmZvZy5jb2xvcixiLmZvZy5kZW5zaXR5KSkpO2JyZWFrO2Nhc2UgIlBlcnNwZWN0aXZlQ2FtZXJhIjp3PW5ldyBjYyhiLmZvdixiLmFzcGVjdCxiLm5lYXIsYi5mYXIpO3ZvaWQgMCE9PWIuZm9jdXMmJih3LmZvY3VzPWIuZm9jdXMpO3ZvaWQgMCE9PWIuem9vbSYmKHcuem9vbT1iLnpvb20pO3ZvaWQgMCE9PWIuZmlsbUdhdWdlJiYody5maWxtR2F1Z2U9Yi5maWxtR2F1Z2UpO3ZvaWQgMCE9PWIuZmlsbU9mZnNldCYmKHcuZmlsbU9mZnNldD1iLmZpbG1PZmZzZXQpO3ZvaWQgMCE9PWIudmlldyYmKHcudmlldz1PYmplY3QuYXNzaWduKHt9LGIudmlldykpOwpicmVhaztjYXNlICJPcnRob2dyYXBoaWNDYW1lcmEiOnc9bmV3IHZnKGIubGVmdCxiLnJpZ2h0LGIudG9wLGIuYm90dG9tLGIubmVhcixiLmZhcik7dm9pZCAwIT09Yi56b29tJiYody56b29tPWIuem9vbSk7dm9pZCAwIT09Yi52aWV3JiYody52aWV3PU9iamVjdC5hc3NpZ24oe30sYi52aWV3KSk7YnJlYWs7Y2FzZSAiQW1iaWVudExpZ2h0Ijp3PW5ldyB6aChiLmNvbG9yLGIuaW50ZW5zaXR5KTticmVhaztjYXNlICJEaXJlY3Rpb25hbExpZ2h0Ijp3PW5ldyB5aChiLmNvbG9yLGIuaW50ZW5zaXR5KTticmVhaztjYXNlICJQb2ludExpZ2h0Ijp3PW5ldyB3aChiLmNvbG9yLGIuaW50ZW5zaXR5LGIuZGlzdGFuY2UsYi5kZWNheSk7YnJlYWs7Y2FzZSAiUmVjdEFyZWFMaWdodCI6dz1uZXcgQWgoYi5jb2xvcixiLmludGVuc2l0eSxiLndpZHRoLGIuaGVpZ2h0KTticmVhaztjYXNlICJTcG90TGlnaHQiOnc9bmV3IHZoKGIuY29sb3IsYi5pbnRlbnNpdHksYi5kaXN0YW5jZSxiLmFuZ2xlLApiLnBlbnVtYnJhLGIuZGVjYXkpO2JyZWFrO2Nhc2UgIkhlbWlzcGhlcmVMaWdodCI6dz1uZXcgdGgoYi5jb2xvcixiLmdyb3VuZENvbG9yLGIuaW50ZW5zaXR5KTticmVhaztjYXNlICJTa2lubmVkTWVzaCI6Y29uc29sZS53YXJuKCJUSFJFRS5PYmplY3RMb2FkZXIucGFyc2VPYmplY3QoKSBkb2VzIG5vdCBzdXBwb3J0IFNraW5uZWRNZXNoIHlldC4iKTtjYXNlICJNZXNoIjp3PW4oYi5nZW9tZXRyeSk7dmFyIHo9dShiLm1hdGVyaWFsKTt3PXcuYm9uZXMmJjA8dy5ib25lcy5sZW5ndGg/bmV3IFVmKHcseik6bmV3IHRiKHcseik7dm9pZCAwIT09Yi5kcmF3TW9kZSYmdy5zZXREcmF3TW9kZShiLmRyYXdNb2RlKTticmVhaztjYXNlICJMT0QiOnc9bmV3IFRmO2JyZWFrO2Nhc2UgIkxpbmUiOnc9bmV3IGxjKG4oYi5nZW9tZXRyeSksdShiLm1hdGVyaWFsKSxiLm1vZGUpO2JyZWFrO2Nhc2UgIkxpbmVMb29wIjp3PW5ldyBraChuKGIuZ2VvbWV0cnkpLHUoYi5tYXRlcmlhbCkpO2JyZWFrOwpjYXNlICJMaW5lU2VnbWVudHMiOnc9bmV3IFBiKG4oYi5nZW9tZXRyeSksdShiLm1hdGVyaWFsKSk7YnJlYWs7Y2FzZSAiUG9pbnRDbG91ZCI6Y2FzZSAiUG9pbnRzIjp3PW5ldyBSZShuKGIuZ2VvbWV0cnkpLHUoYi5tYXRlcmlhbCkpO2JyZWFrO2Nhc2UgIlNwcml0ZSI6dz1uZXcgU2YodShiLm1hdGVyaWFsKSk7YnJlYWs7Y2FzZSAiR3JvdXAiOnc9bmV3IE5lO2JyZWFrO2RlZmF1bHQ6dz1uZXcgU313LnV1aWQ9Yi51dWlkO3ZvaWQgMCE9PWIubmFtZSYmKHcubmFtZT1iLm5hbWUpO3ZvaWQgMCE9PWIubWF0cml4Pyh3Lm1hdHJpeC5mcm9tQXJyYXkoYi5tYXRyaXgpLHZvaWQgMCE9PWIubWF0cml4QXV0b1VwZGF0ZSYmKHcubWF0cml4QXV0b1VwZGF0ZT1iLm1hdHJpeEF1dG9VcGRhdGUpLHcubWF0cml4QXV0b1VwZGF0ZSYmdy5tYXRyaXguZGVjb21wb3NlKHcucG9zaXRpb24sdy5xdWF0ZXJuaW9uLHcuc2NhbGUpKToodm9pZCAwIT09Yi5wb3NpdGlvbiYmdy5wb3NpdGlvbi5mcm9tQXJyYXkoYi5wb3NpdGlvbiksCnZvaWQgMCE9PWIucm90YXRpb24mJncucm90YXRpb24uZnJvbUFycmF5KGIucm90YXRpb24pLHZvaWQgMCE9PWIucXVhdGVybmlvbiYmdy5xdWF0ZXJuaW9uLmZyb21BcnJheShiLnF1YXRlcm5pb24pLHZvaWQgMCE9PWIuc2NhbGUmJncuc2NhbGUuZnJvbUFycmF5KGIuc2NhbGUpKTt2b2lkIDAhPT1iLmNhc3RTaGFkb3cmJih3LmNhc3RTaGFkb3c9Yi5jYXN0U2hhZG93KTt2b2lkIDAhPT1iLnJlY2VpdmVTaGFkb3cmJih3LnJlY2VpdmVTaGFkb3c9Yi5yZWNlaXZlU2hhZG93KTtiLnNoYWRvdyYmKHZvaWQgMCE9PWIuc2hhZG93LmJpYXMmJih3LnNoYWRvdy5iaWFzPWIuc2hhZG93LmJpYXMpLHZvaWQgMCE9PWIuc2hhZG93LnJhZGl1cyYmKHcuc2hhZG93LnJhZGl1cz1iLnNoYWRvdy5yYWRpdXMpLHZvaWQgMCE9PWIuc2hhZG93Lm1hcFNpemUmJncuc2hhZG93Lm1hcFNpemUuZnJvbUFycmF5KGIuc2hhZG93Lm1hcFNpemUpLHZvaWQgMCE9PWIuc2hhZG93LmNhbWVyYSYmKHcuc2hhZG93LmNhbWVyYT0KdGhpcy5wYXJzZU9iamVjdChiLnNoYWRvdy5jYW1lcmEpKSk7dm9pZCAwIT09Yi52aXNpYmxlJiYody52aXNpYmxlPWIudmlzaWJsZSk7dm9pZCAwIT09Yi5mcnVzdHVtQ3VsbGVkJiYody5mcnVzdHVtQ3VsbGVkPWIuZnJ1c3R1bUN1bGxlZCk7dm9pZCAwIT09Yi5yZW5kZXJPcmRlciYmKHcucmVuZGVyT3JkZXI9Yi5yZW5kZXJPcmRlcik7dm9pZCAwIT09Yi51c2VyRGF0YSYmKHcudXNlckRhdGE9Yi51c2VyRGF0YSk7dm9pZCAwIT09Yi5sYXllcnMmJih3LmxheWVycy5tYXNrPWIubGF5ZXJzKTtpZih2b2lkIDAhPT1iLmNoaWxkcmVuKXt6PWIuY2hpbGRyZW47Zm9yKHZhciBFPTA7RTx6Lmxlbmd0aDtFKyspdy5hZGQodGhpcy5wYXJzZU9iamVjdCh6W0VdLGUsaCkpfWlmKCJMT0QiPT09Yi50eXBlKWZvcihiPWIubGV2ZWxzLHo9MDt6PGIubGVuZ3RoO3orKyl7RT1iW3pdO3ZhciBIPXcuZ2V0T2JqZWN0QnlQcm9wZXJ0eSgidXVpZCIsRS5vYmplY3QpO3ZvaWQgMCE9PUgmJncuYWRkTGV2ZWwoSCwKRS5kaXN0YW5jZSl9cmV0dXJuIHd9fSk7dmFyIHBwPXtVVk1hcHBpbmc6MzAwLEN1YmVSZWZsZWN0aW9uTWFwcGluZzozMDEsQ3ViZVJlZnJhY3Rpb25NYXBwaW5nOjMwMixFcXVpcmVjdGFuZ3VsYXJSZWZsZWN0aW9uTWFwcGluZzozMDMsRXF1aXJlY3Rhbmd1bGFyUmVmcmFjdGlvbk1hcHBpbmc6MzA0LFNwaGVyaWNhbFJlZmxlY3Rpb25NYXBwaW5nOjMwNSxDdWJlVVZSZWZsZWN0aW9uTWFwcGluZzozMDYsQ3ViZVVWUmVmcmFjdGlvbk1hcHBpbmc6MzA3fSxUbD17UmVwZWF0V3JhcHBpbmc6MUUzLENsYW1wVG9FZGdlV3JhcHBpbmc6MTAwMSxNaXJyb3JlZFJlcGVhdFdyYXBwaW5nOjEwMDJ9LFVsPXtOZWFyZXN0RmlsdGVyOjEwMDMsTmVhcmVzdE1pcE1hcE5lYXJlc3RGaWx0ZXI6MTAwNCxOZWFyZXN0TWlwTWFwTGluZWFyRmlsdGVyOjEwMDUsTGluZWFyRmlsdGVyOjEwMDYsTGluZWFyTWlwTWFwTmVhcmVzdEZpbHRlcjoxMDA3LExpbmVhck1pcE1hcExpbmVhckZpbHRlcjoxMDA4fTsKSmkucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpKaSxzZXRPcHRpb25zOmZ1bmN0aW9uKGIpe3RoaXMub3B0aW9ucz1iO3JldHVybiB0aGlzfSxsb2FkOmZ1bmN0aW9uKGIsZSxoLG4pe3ZvaWQgMD09PWImJihiPSIiKTt2b2lkIDAhPT10aGlzLnBhdGgmJihiPXRoaXMucGF0aCtiKTtiPXRoaXMubWFuYWdlci5yZXNvbHZlVVJMKGIpO3ZhciB1PXRoaXMsdz14ZS5nZXQoYik7aWYodm9pZCAwIT09dylyZXR1cm4gdS5tYW5hZ2VyLml0ZW1TdGFydChiKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZSYmZSh3KTt1Lm1hbmFnZXIuaXRlbUVuZChiKX0sMCksdztmZXRjaChiKS50aGVuKGZ1bmN0aW9uKHope3JldHVybiB6LmJsb2IoKX0pLnRoZW4oZnVuY3Rpb24oeil7cmV0dXJuIHZvaWQgMD09PXUub3B0aW9ucz9jcmVhdGVJbWFnZUJpdG1hcCh6KTpjcmVhdGVJbWFnZUJpdG1hcCh6LHUub3B0aW9ucyl9KS50aGVuKGZ1bmN0aW9uKHope3hlLmFkZChiLHopO2UmJmUoeik7dS5tYW5hZ2VyLml0ZW1FbmQoYil9KS5jYXRjaChmdW5jdGlvbih6KXtuJiYKbih6KTt1Lm1hbmFnZXIuaXRlbUVycm9yKGIpO3UubWFuYWdlci5pdGVtRW5kKGIpfSk7dS5tYW5hZ2VyLml0ZW1TdGFydChiKX0sc2V0Q3Jvc3NPcmlnaW46ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sc2V0UGF0aDpmdW5jdGlvbihiKXt0aGlzLnBhdGg9YjtyZXR1cm4gdGhpc319O09iamVjdC5hc3NpZ24oS2kucHJvdG90eXBlLHttb3ZlVG86ZnVuY3Rpb24oYixlKXt0aGlzLmN1cnJlbnRQYXRoPW5ldyBaYzt0aGlzLnN1YlBhdGhzLnB1c2godGhpcy5jdXJyZW50UGF0aCk7dGhpcy5jdXJyZW50UGF0aC5tb3ZlVG8oYixlKX0sbGluZVRvOmZ1bmN0aW9uKGIsZSl7dGhpcy5jdXJyZW50UGF0aC5saW5lVG8oYixlKX0scXVhZHJhdGljQ3VydmVUbzpmdW5jdGlvbihiLGUsaCxuKXt0aGlzLmN1cnJlbnRQYXRoLnF1YWRyYXRpY0N1cnZlVG8oYixlLGgsbil9LGJlemllckN1cnZlVG86ZnVuY3Rpb24oYixlLGgsbix1LHcpe3RoaXMuY3VycmVudFBhdGguYmV6aWVyQ3VydmVUbyhiLGUsCmgsbix1LHcpfSxzcGxpbmVUaHJ1OmZ1bmN0aW9uKGIpe3RoaXMuY3VycmVudFBhdGguc3BsaW5lVGhydShiKX0sdG9TaGFwZXM6ZnVuY3Rpb24oYixlKXtmdW5jdGlvbiBoKGZhKXtmb3IodmFyIHFhPVtdLHJhPTAsaWE9ZmEubGVuZ3RoO3JhPGlhO3JhKyspe3ZhciB0YT1mYVtyYV0sbmE9bmV3IFhkO25hLmN1cnZlcz10YS5jdXJ2ZXM7cWEucHVzaChuYSl9cmV0dXJuIHFhfWZ1bmN0aW9uIG4oZmEscWEpe2Zvcih2YXIgcmE9cWEubGVuZ3RoLGlhPSExLHRhPXJhLTEsbmE9MDtuYTxyYTt0YT1uYSsrKXt2YXIgdmE9cWFbdGFdLEJhPXFhW25hXSxzYT1CYS54LXZhLngsRGE9QmEueS12YS55O2lmKE1hdGguYWJzKERhKT5OdW1iZXIuRVBTSUxPTil7aWYoMD5EYSYmKHZhPXFhW25hXSxzYT0tc2EsQmE9cWFbdGFdLERhPS1EYSksIShmYS55PHZhLnl8fGZhLnk+QmEueSkpaWYoZmEueT09PXZhLnkpe2lmKGZhLng9PT12YS54KXJldHVybiEwfWVsc2V7dGE9RGEqKGZhLngtdmEueCktc2EqCihmYS55LXZhLnkpO2lmKDA9PT10YSlyZXR1cm4hMDswPnRhfHwoaWE9IWlhKX19ZWxzZSBpZihmYS55PT09dmEueSYmKEJhLng8PWZhLngmJmZhLng8PXZhLnh8fHZhLng8PWZhLngmJmZhLng8PUJhLngpKXJldHVybiEwfXJldHVybiBpYX12YXIgdT15ZC5pc0Nsb2NrV2lzZSx3PXRoaXMuc3ViUGF0aHM7aWYoMD09PXcubGVuZ3RoKXJldHVybltdO2lmKCEwPT09ZSlyZXR1cm4gaCh3KTtlPVtdO2lmKDE9PT13Lmxlbmd0aCl7dmFyIHo9d1swXTt2YXIgRT1uZXcgWGQ7RS5jdXJ2ZXM9ei5jdXJ2ZXM7ZS5wdXNoKEUpO3JldHVybiBlfXZhciBIPSF1KHdbMF0uZ2V0UG9pbnRzKCkpO0g9Yj8hSDpIO0U9W107dmFyIEk9W10sTz1bXSxRPTA7SVtRXT12b2lkIDA7T1tRXT1bXTtmb3IodmFyIFI9MCxVPXcubGVuZ3RoO1I8VTtSKyspe3o9d1tSXTt2YXIgVz16LmdldFBvaW50cygpO3ZhciBaPXUoVyk7KFo9Yj8hWjpaKT8oIUgmJklbUV0mJlErKyxJW1FdPXtzOm5ldyBYZCxwOld9LElbUV0ucy5jdXJ2ZXM9CnouY3VydmVzLEgmJlErKyxPW1FdPVtdKTpPW1FdLnB1c2goe2g6eixwOldbMF19KX1pZighSVswXSlyZXR1cm4gaCh3KTtpZigxPEkubGVuZ3RoKXtSPSExO2I9W107dT0wO2Zvcih3PUkubGVuZ3RoO3U8dzt1KyspRVt1XT1bXTt1PTA7Zm9yKHc9SS5sZW5ndGg7dTx3O3UrKylmb3Ioej1PW3VdLFo9MDtaPHoubGVuZ3RoO1orKyl7SD16W1pdO1E9ITA7Zm9yKFc9MDtXPEkubGVuZ3RoO1crKyluKEgucCxJW1ddLnApJiYodSE9PVcmJmIucHVzaCh7ZnJvbXM6dSx0b3M6Vyxob2xlOlp9KSxRPyhRPSExLEVbV10ucHVzaChIKSk6Uj0hMCk7USYmRVt1XS5wdXNoKEgpfTA8Yi5sZW5ndGgmJihSfHwoTz1FKSl9Uj0wO2Zvcih1PUkubGVuZ3RoO1I8dTtSKyspZm9yKEU9SVtSXS5zLGUucHVzaChFKSxiPU9bUl0sdz0wLHo9Yi5sZW5ndGg7dzx6O3crKylFLmhvbGVzLnB1c2goYlt3XS5oKTtyZXR1cm4gZX19KTtPYmplY3QuYXNzaWduKExpLnByb3RvdHlwZSx7aXNGb250OiEwLGdlbmVyYXRlU2hhcGVzOmZ1bmN0aW9uKGIsCmUpe3ZvaWQgMD09PWUmJihlPTEwMCk7dmFyIGg9W107Yj1qcChiLGUsdGhpcy5kYXRhKTtlPTA7Zm9yKHZhciBuPWIubGVuZ3RoO2U8bjtlKyspQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkoaCxiW2VdLnRvU2hhcGVzKCkpO3JldHVybiBofX0pO09iamVjdC5hc3NpZ24oSGwucHJvdG90eXBlLHtsb2FkOmZ1bmN0aW9uKGIsZSxoLG4pe3ZhciB1PXRoaXMsdz1uZXcgVWModGhpcy5tYW5hZ2VyKTt3LnNldFBhdGgodGhpcy5wYXRoKTt3LmxvYWQoYixmdW5jdGlvbih6KXt0cnl7dmFyIEU9SlNPTi5wYXJzZSh6KX1jYXRjaChIKXtjb25zb2xlLndhcm4oIlRIUkVFLkZvbnRMb2FkZXI6IHR5cGVmYWNlLmpzIHN1cHBvcnQgaXMgYmVpbmcgZGVwcmVjYXRlZC4gVXNlIHR5cGVmYWNlLmpzb24gaW5zdGVhZC4iKSxFPUpTT04ucGFyc2Uoei5zdWJzdHJpbmcoNjUsei5sZW5ndGgtMikpfXo9dS5wYXJzZShFKTtlJiZlKHopfSxoLG4pfSxwYXJzZTpmdW5jdGlvbihiKXtyZXR1cm4gbmV3IExpKGIpfSwKc2V0UGF0aDpmdW5jdGlvbihiKXt0aGlzLnBhdGg9YjtyZXR1cm4gdGhpc319KTt3Zy5IYW5kbGVycz17aGFuZGxlcnM6W10sYWRkOmZ1bmN0aW9uKGIsZSl7dGhpcy5oYW5kbGVycy5wdXNoKGIsZSl9LGdldDpmdW5jdGlvbihiKXtmb3IodmFyIGU9dGhpcy5oYW5kbGVycyxoPTAsbj1lLmxlbmd0aDtoPG47aCs9Mil7dmFyIHU9ZVtoKzFdO2lmKGVbaF0udGVzdChiKSlyZXR1cm4gdX1yZXR1cm4gbnVsbH19O09iamVjdC5hc3NpZ24od2cucHJvdG90eXBlLHtjcm9zc09yaWdpbjoiYW5vbnltb3VzIixvbkxvYWRTdGFydDpmdW5jdGlvbigpe30sb25Mb2FkUHJvZ3Jlc3M6ZnVuY3Rpb24oKXt9LG9uTG9hZENvbXBsZXRlOmZ1bmN0aW9uKCl7fSxpbml0TWF0ZXJpYWxzOmZ1bmN0aW9uKGIsZSxoKXtmb3IodmFyIG49W10sdT0wO3U8Yi5sZW5ndGg7Kyt1KW5bdV09dGhpcy5jcmVhdGVNYXRlcmlhbChiW3VdLGUsaCk7cmV0dXJuIG59LGNyZWF0ZU1hdGVyaWFsOmZ1bmN0aW9uKCl7dmFyIGI9CntOb0JsZW5kaW5nOjAsTm9ybWFsQmxlbmRpbmc6MSxBZGRpdGl2ZUJsZW5kaW5nOjIsU3VidHJhY3RpdmVCbGVuZGluZzozLE11bHRpcGx5QmxlbmRpbmc6NCxDdXN0b21CbGVuZGluZzo1fSxlPW5ldyBCLGg9bmV3IHNoLG49bmV3IEJoO3JldHVybiBmdW5jdGlvbih1LHcseil7ZnVuY3Rpb24gRShSLFUsVyxaLGZhKXtSPXcrUjt2YXIgcWE9d2cuSGFuZGxlcnMuZ2V0KFIpO251bGwhPT1xYT9SPXFhLmxvYWQoUik6KGguc2V0Q3Jvc3NPcmlnaW4oeiksUj1oLmxvYWQoUikpO3ZvaWQgMCE9PVUmJihSLnJlcGVhdC5mcm9tQXJyYXkoVSksMSE9PVVbMF0mJihSLndyYXBTPTFFMyksMSE9PVVbMV0mJihSLndyYXBUPTFFMykpO3ZvaWQgMCE9PVcmJlIub2Zmc2V0LmZyb21BcnJheShXKTt2b2lkIDAhPT1aJiYoInJlcGVhdCI9PT1aWzBdJiYoUi53cmFwUz0xRTMpLCJtaXJyb3IiPT09WlswXSYmKFIud3JhcFM9MTAwMiksInJlcGVhdCI9PT1aWzFdJiYoUi53cmFwVD0xRTMpLCJtaXJyb3IiPT09ClpbMV0mJihSLndyYXBUPTEwMDIpKTt2b2lkIDAhPT1mYSYmKFIuYW5pc290cm9weT1mYSk7VT1vYi5nZW5lcmF0ZVVVSUQoKTtIW1VdPVI7cmV0dXJuIFV9dmFyIEg9e30sST17dXVpZDpvYi5nZW5lcmF0ZVVVSUQoKSx0eXBlOiJNZXNoTGFtYmVydE1hdGVyaWFsIn0sTztmb3IoTyBpbiB1KXt2YXIgUT11W09dO3N3aXRjaChPKXtjYXNlICJEYmdDb2xvciI6Y2FzZSAiRGJnSW5kZXgiOmNhc2UgIm9wdGljYWxEZW5zaXR5IjpjYXNlICJpbGx1bWluYXRpb24iOmJyZWFrO2Nhc2UgIkRiZ05hbWUiOkkubmFtZT1RO2JyZWFrO2Nhc2UgImJsZW5kaW5nIjpJLmJsZW5kaW5nPWJbUV07YnJlYWs7Y2FzZSAiY29sb3JBbWJpZW50IjpjYXNlICJtYXBBbWJpZW50Ijpjb25zb2xlLndhcm4oIlRIUkVFLkxvYWRlci5jcmVhdGVNYXRlcmlhbDoiLE8sImlzIG5vIGxvbmdlciBzdXBwb3J0ZWQuIik7YnJlYWs7Y2FzZSAiY29sb3JEaWZmdXNlIjpJLmNvbG9yPWUuZnJvbUFycmF5KFEpLmdldEhleCgpOwpicmVhaztjYXNlICJjb2xvclNwZWN1bGFyIjpJLnNwZWN1bGFyPWUuZnJvbUFycmF5KFEpLmdldEhleCgpO2JyZWFrO2Nhc2UgImNvbG9yRW1pc3NpdmUiOkkuZW1pc3NpdmU9ZS5mcm9tQXJyYXkoUSkuZ2V0SGV4KCk7YnJlYWs7Y2FzZSAic3BlY3VsYXJDb2VmIjpJLnNoaW5pbmVzcz1RO2JyZWFrO2Nhc2UgInNoYWRpbmciOiJiYXNpYyI9PT1RLnRvTG93ZXJDYXNlKCkmJihJLnR5cGU9Ik1lc2hCYXNpY01hdGVyaWFsIik7InBob25nIj09PVEudG9Mb3dlckNhc2UoKSYmKEkudHlwZT0iTWVzaFBob25nTWF0ZXJpYWwiKTsic3RhbmRhcmQiPT09US50b0xvd2VyQ2FzZSgpJiYoSS50eXBlPSJNZXNoU3RhbmRhcmRNYXRlcmlhbCIpO2JyZWFrO2Nhc2UgIm1hcERpZmZ1c2UiOkkubWFwPUUoUSx1Lm1hcERpZmZ1c2VSZXBlYXQsdS5tYXBEaWZmdXNlT2Zmc2V0LHUubWFwRGlmZnVzZVdyYXAsdS5tYXBEaWZmdXNlQW5pc290cm9weSk7YnJlYWs7Y2FzZSAibWFwRGlmZnVzZVJlcGVhdCI6Y2FzZSAibWFwRGlmZnVzZU9mZnNldCI6Y2FzZSAibWFwRGlmZnVzZVdyYXAiOmNhc2UgIm1hcERpZmZ1c2VBbmlzb3Ryb3B5IjpicmVhazsKY2FzZSAibWFwRW1pc3NpdmUiOkkuZW1pc3NpdmVNYXA9RShRLHUubWFwRW1pc3NpdmVSZXBlYXQsdS5tYXBFbWlzc2l2ZU9mZnNldCx1Lm1hcEVtaXNzaXZlV3JhcCx1Lm1hcEVtaXNzaXZlQW5pc290cm9weSk7YnJlYWs7Y2FzZSAibWFwRW1pc3NpdmVSZXBlYXQiOmNhc2UgIm1hcEVtaXNzaXZlT2Zmc2V0IjpjYXNlICJtYXBFbWlzc2l2ZVdyYXAiOmNhc2UgIm1hcEVtaXNzaXZlQW5pc290cm9weSI6YnJlYWs7Y2FzZSAibWFwTGlnaHQiOkkubGlnaHRNYXA9RShRLHUubWFwTGlnaHRSZXBlYXQsdS5tYXBMaWdodE9mZnNldCx1Lm1hcExpZ2h0V3JhcCx1Lm1hcExpZ2h0QW5pc290cm9weSk7YnJlYWs7Y2FzZSAibWFwTGlnaHRSZXBlYXQiOmNhc2UgIm1hcExpZ2h0T2Zmc2V0IjpjYXNlICJtYXBMaWdodFdyYXAiOmNhc2UgIm1hcExpZ2h0QW5pc290cm9weSI6YnJlYWs7Y2FzZSAibWFwQU8iOkkuYW9NYXA9RShRLHUubWFwQU9SZXBlYXQsdS5tYXBBT09mZnNldCx1Lm1hcEFPV3JhcCwKdS5tYXBBT0FuaXNvdHJvcHkpO2JyZWFrO2Nhc2UgIm1hcEFPUmVwZWF0IjpjYXNlICJtYXBBT09mZnNldCI6Y2FzZSAibWFwQU9XcmFwIjpjYXNlICJtYXBBT0FuaXNvdHJvcHkiOmJyZWFrO2Nhc2UgIm1hcEJ1bXAiOkkuYnVtcE1hcD1FKFEsdS5tYXBCdW1wUmVwZWF0LHUubWFwQnVtcE9mZnNldCx1Lm1hcEJ1bXBXcmFwLHUubWFwQnVtcEFuaXNvdHJvcHkpO2JyZWFrO2Nhc2UgIm1hcEJ1bXBTY2FsZSI6SS5idW1wU2NhbGU9UTticmVhaztjYXNlICJtYXBCdW1wUmVwZWF0IjpjYXNlICJtYXBCdW1wT2Zmc2V0IjpjYXNlICJtYXBCdW1wV3JhcCI6Y2FzZSAibWFwQnVtcEFuaXNvdHJvcHkiOmJyZWFrO2Nhc2UgIm1hcE5vcm1hbCI6SS5ub3JtYWxNYXA9RShRLHUubWFwTm9ybWFsUmVwZWF0LHUubWFwTm9ybWFsT2Zmc2V0LHUubWFwTm9ybWFsV3JhcCx1Lm1hcE5vcm1hbEFuaXNvdHJvcHkpO2JyZWFrO2Nhc2UgIm1hcE5vcm1hbEZhY3RvciI6SS5ub3JtYWxTY2FsZT1RO2JyZWFrOwpjYXNlICJtYXBOb3JtYWxSZXBlYXQiOmNhc2UgIm1hcE5vcm1hbE9mZnNldCI6Y2FzZSAibWFwTm9ybWFsV3JhcCI6Y2FzZSAibWFwTm9ybWFsQW5pc290cm9weSI6YnJlYWs7Y2FzZSAibWFwU3BlY3VsYXIiOkkuc3BlY3VsYXJNYXA9RShRLHUubWFwU3BlY3VsYXJSZXBlYXQsdS5tYXBTcGVjdWxhck9mZnNldCx1Lm1hcFNwZWN1bGFyV3JhcCx1Lm1hcFNwZWN1bGFyQW5pc290cm9weSk7YnJlYWs7Y2FzZSAibWFwU3BlY3VsYXJSZXBlYXQiOmNhc2UgIm1hcFNwZWN1bGFyT2Zmc2V0IjpjYXNlICJtYXBTcGVjdWxhcldyYXAiOmNhc2UgIm1hcFNwZWN1bGFyQW5pc290cm9weSI6YnJlYWs7Y2FzZSAibWFwTWV0YWxuZXNzIjpJLm1ldGFsbmVzc01hcD1FKFEsdS5tYXBNZXRhbG5lc3NSZXBlYXQsdS5tYXBNZXRhbG5lc3NPZmZzZXQsdS5tYXBNZXRhbG5lc3NXcmFwLHUubWFwTWV0YWxuZXNzQW5pc290cm9weSk7YnJlYWs7Y2FzZSAibWFwTWV0YWxuZXNzUmVwZWF0IjpjYXNlICJtYXBNZXRhbG5lc3NPZmZzZXQiOmNhc2UgIm1hcE1ldGFsbmVzc1dyYXAiOmNhc2UgIm1hcE1ldGFsbmVzc0FuaXNvdHJvcHkiOmJyZWFrOwpjYXNlICJtYXBSb3VnaG5lc3MiOkkucm91Z2huZXNzTWFwPUUoUSx1Lm1hcFJvdWdobmVzc1JlcGVhdCx1Lm1hcFJvdWdobmVzc09mZnNldCx1Lm1hcFJvdWdobmVzc1dyYXAsdS5tYXBSb3VnaG5lc3NBbmlzb3Ryb3B5KTticmVhaztjYXNlICJtYXBSb3VnaG5lc3NSZXBlYXQiOmNhc2UgIm1hcFJvdWdobmVzc09mZnNldCI6Y2FzZSAibWFwUm91Z2huZXNzV3JhcCI6Y2FzZSAibWFwUm91Z2huZXNzQW5pc290cm9weSI6YnJlYWs7Y2FzZSAibWFwQWxwaGEiOkkuYWxwaGFNYXA9RShRLHUubWFwQWxwaGFSZXBlYXQsdS5tYXBBbHBoYU9mZnNldCx1Lm1hcEFscGhhV3JhcCx1Lm1hcEFscGhhQW5pc290cm9weSk7YnJlYWs7Y2FzZSAibWFwQWxwaGFSZXBlYXQiOmNhc2UgIm1hcEFscGhhT2Zmc2V0IjpjYXNlICJtYXBBbHBoYVdyYXAiOmNhc2UgIm1hcEFscGhhQW5pc290cm9weSI6YnJlYWs7Y2FzZSAiZmxpcFNpZGVkIjpJLnNpZGU9MTticmVhaztjYXNlICJkb3VibGVTaWRlZCI6SS5zaWRlPQoyO2JyZWFrO2Nhc2UgInRyYW5zcGFyZW5jeSI6Y29uc29sZS53YXJuKCJUSFJFRS5Mb2FkZXIuY3JlYXRlTWF0ZXJpYWw6IHRyYW5zcGFyZW5jeSBoYXMgYmVlbiByZW5hbWVkIHRvIG9wYWNpdHkiKTtJLm9wYWNpdHk9UTticmVhaztjYXNlICJkZXB0aFRlc3QiOmNhc2UgImRlcHRoV3JpdGUiOmNhc2UgImNvbG9yV3JpdGUiOmNhc2UgIm9wYWNpdHkiOmNhc2UgInJlZmxlY3Rpdml0eSI6Y2FzZSAidHJhbnNwYXJlbnQiOmNhc2UgInZpc2libGUiOmNhc2UgIndpcmVmcmFtZSI6SVtPXT1RO2JyZWFrO2Nhc2UgInZlcnRleENvbG9ycyI6ITA9PT1RJiYoSS52ZXJ0ZXhDb2xvcnM9Mik7ImZhY2UiPT09USYmKEkudmVydGV4Q29sb3JzPTEpO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS5lcnJvcigiVEhSRUUuTG9hZGVyLmNyZWF0ZU1hdGVyaWFsOiBVbnN1cHBvcnRlZCIsTyxRKX19Ik1lc2hCYXNpY01hdGVyaWFsIj09PUkudHlwZSYmZGVsZXRlIEkuZW1pc3NpdmU7Ik1lc2hQaG9uZ01hdGVyaWFsIiE9PQpJLnR5cGUmJmRlbGV0ZSBJLnNwZWN1bGFyOzE+SS5vcGFjaXR5JiYoSS50cmFuc3BhcmVudD0hMCk7bi5zZXRUZXh0dXJlcyhIKTtyZXR1cm4gbi5wYXJzZShJKX19KCl9KTt2YXIgSWgsUmk9e2dldENvbnRleHQ6ZnVuY3Rpb24oKXt2b2lkIDA9PT1JaCYmKEloPW5ldyAod2luZG93LkF1ZGlvQ29udGV4dHx8d2luZG93LndlYmtpdEF1ZGlvQ29udGV4dCkpO3JldHVybiBJaH0sc2V0Q29udGV4dDpmdW5jdGlvbihiKXtJaD1ifX07T2JqZWN0LmFzc2lnbihNaS5wcm90b3R5cGUse2xvYWQ6ZnVuY3Rpb24oYixlLGgsbil7dmFyIHU9bmV3IFVjKHRoaXMubWFuYWdlcik7dS5zZXRSZXNwb25zZVR5cGUoImFycmF5YnVmZmVyIik7dS5zZXRQYXRoKHRoaXMucGF0aCk7dS5sb2FkKGIsZnVuY3Rpb24odyl7dz13LnNsaWNlKDApO1JpLmdldENvbnRleHQoKS5kZWNvZGVBdWRpb0RhdGEodyxmdW5jdGlvbih6KXtlKHopfSl9LGgsbil9LHNldFBhdGg6ZnVuY3Rpb24oYil7dGhpcy5wYXRoPWI7CnJldHVybiB0aGlzfX0pO09iamVjdC5hc3NpZ24oQ2gucHJvdG90eXBlLHtpc1NwaGVyaWNhbEhhcm1vbmljczM6ITAsc2V0OmZ1bmN0aW9uKGIpe2Zvcih2YXIgZT0wOzk+ZTtlKyspdGhpcy5jb2VmZmljaWVudHNbZV0uY29weShiW2VdKTtyZXR1cm4gdGhpc30semVybzpmdW5jdGlvbigpe2Zvcih2YXIgYj0wOzk+YjtiKyspdGhpcy5jb2VmZmljaWVudHNbYl0uc2V0KDAsMCwwKTtyZXR1cm4gdGhpc30sZ2V0QXQ6ZnVuY3Rpb24oYixlKXt2YXIgaD1iLngsbj1iLnk7Yj1iLno7dmFyIHU9dGhpcy5jb2VmZmljaWVudHM7ZT0uMjgyMDk1KnVbMF07ZSs9LjQ4ODYwMyp1WzFdKm47ZSs9LjQ4ODYwMyp1WzJdKmI7ZSs9LjQ4ODYwMyp1WzNdKmg7ZSs9MS4wOTI1NDgqdVs0XSpoKm47ZSs9MS4wOTI1NDgqdVs1XSpuKmI7ZSs9LjMxNTM5Mip1WzZdKigzKmIqYi0xKTtlKz0xLjA5MjU0OCp1WzddKmgqYjtyZXR1cm4gZSs9LjU0NjI3NCp1WzhdKihoKmgtbipuKX0sZ2V0SXJyYWRpYW5jZUF0OmZ1bmN0aW9uKGIsCmUpe3ZhciBoPWIueCxuPWIueTtiPWIuejt2YXIgdT10aGlzLmNvZWZmaWNpZW50cztlPS44ODYyMjcqdVswXTtlKz0xLjAyMzMyOCp1WzFdKm47ZSs9MS4wMjMzMjgqdVsyXSpiO2UrPTEuMDIzMzI4KnVbM10qaDtlKz0uODU4MDg2KnVbNF0qaCpuO2UrPS44NTgwODYqdVs1XSpuKmI7ZSs9dVs2XSooLjc0MzEyNSpiKmItLjI0NzcwOCk7ZSs9Ljg1ODA4Nip1WzddKmgqYjtyZXR1cm4gZSs9LjQyOTA0Myp1WzhdKihoKmgtbipuKX0sYWRkOmZ1bmN0aW9uKGIpe2Zvcih2YXIgZT0wOzk+ZTtlKyspdGhpcy5jb2VmZmljaWVudHNbZV0uYWRkKGIuY29lZmZpY2llbnRzW2VdKTtyZXR1cm4gdGhpc30sc2NhbGU6ZnVuY3Rpb24oYil7Zm9yKHZhciBlPTA7OT5lO2UrKyl0aGlzLmNvZWZmaWNpZW50c1tlXS5tdWx0aXBseVNjYWxhcihiKTtyZXR1cm4gdGhpc30sbGVycDpmdW5jdGlvbihiLGUpe2Zvcih2YXIgaD0wOzk+aDtoKyspdGhpcy5jb2VmZmljaWVudHNbaF0ubGVycChiLmNvZWZmaWNpZW50c1toXSwKZSk7cmV0dXJuIHRoaXN9LGVxdWFsczpmdW5jdGlvbihiKXtmb3IodmFyIGU9MDs5PmU7ZSsrKWlmKCF0aGlzLmNvZWZmaWNpZW50c1tlXS5lcXVhbHMoYi5jb2VmZmljaWVudHNbZV0pKXJldHVybiExO3JldHVybiEwfSxjb3B5OmZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLnNldChiLmNvZWZmaWNpZW50cyl9LGNsb25lOmZ1bmN0aW9uKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKS5jb3B5KHRoaXMpfSxmcm9tQXJyYXk6ZnVuY3Rpb24oYil7Zm9yKHZhciBlPXRoaXMuY29lZmZpY2llbnRzLGg9MDs5Pmg7aCsrKWVbaF0uZnJvbUFycmF5KGIsMypoKTtyZXR1cm4gdGhpc30sdG9BcnJheTpmdW5jdGlvbigpe2Zvcih2YXIgYj1bXSxlPXRoaXMuY29lZmZpY2llbnRzLGg9MDs5Pmg7aCsrKWVbaF0udG9BcnJheShiLDMqaCk7cmV0dXJuIGJ9fSk7T2JqZWN0LmFzc2lnbihDaCx7Z2V0QmFzaXNBdDpmdW5jdGlvbihiLGUpe3ZhciBoPWIueCxuPWIueTtiPWIuejtlWzBdPS4yODIwOTU7CmVbMV09LjQ4ODYwMypuO2VbMl09LjQ4ODYwMypiO2VbM109LjQ4ODYwMypoO2VbNF09MS4wOTI1NDgqaCpuO2VbNV09MS4wOTI1NDgqbipiO2VbNl09LjMxNTM5MiooMypiKmItMSk7ZVs3XT0xLjA5MjU0OCpoKmI7ZVs4XT0uNTQ2Mjc0KihoKmgtbipuKX19KTskYy5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKFNiLnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOiRjLGlzTGlnaHRQcm9iZTohMCxjb3B5OmZ1bmN0aW9uKGIpe1NiLnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyxiKTt0aGlzLnNoLmNvcHkoYi5zaCk7dGhpcy5pbnRlbnNpdHk9Yi5pbnRlbnNpdHk7cmV0dXJuIHRoaXN9LHRvSlNPTjpmdW5jdGlvbihiKXtyZXR1cm4gU2IucHJvdG90eXBlLnRvSlNPTi5jYWxsKHRoaXMsYil9fSk7TmkucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZSgkYy5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpOaSxpc0hlbWlzcGhlcmVMaWdodFByb2JlOiEwLApjb3B5OmZ1bmN0aW9uKGIpeyRjLnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyxiKTtyZXR1cm4gdGhpc30sdG9KU09OOmZ1bmN0aW9uKGIpe3JldHVybiAkYy5wcm90b3R5cGUudG9KU09OLmNhbGwodGhpcyxiKX19KTtPaS5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKCRjLnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOk9pLGlzQW1iaWVudExpZ2h0UHJvYmU6ITAsY29weTpmdW5jdGlvbihiKXskYy5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsYik7cmV0dXJuIHRoaXN9LHRvSlNPTjpmdW5jdGlvbihiKXtyZXR1cm4gJGMucHJvdG90eXBlLnRvSlNPTi5jYWxsKHRoaXMsYil9fSk7T2JqZWN0LmFzc2lnbihJbC5wcm90b3R5cGUse3VwZGF0ZTpmdW5jdGlvbigpe3ZhciBiLGUsaCxuLHUsdyx6LEUsSD1uZXcgQyxJPW5ldyBDO3JldHVybiBmdW5jdGlvbihPKXtpZihiIT09dGhpc3x8ZSE9PU8uZm9jdXN8fGghPT1PLmZvdnx8biE9PU8uYXNwZWN0KnRoaXMuYXNwZWN0fHwKdSE9PU8ubmVhcnx8dyE9PU8uZmFyfHx6IT09Ty56b29tfHxFIT09dGhpcy5leWVTZXApe2I9dGhpcztlPU8uZm9jdXM7aD1PLmZvdjtuPU8uYXNwZWN0KnRoaXMuYXNwZWN0O3U9Ty5uZWFyO3c9Ty5mYXI7ej1PLnpvb207dmFyIFE9Ty5wcm9qZWN0aW9uTWF0cml4LmNsb25lKCk7RT10aGlzLmV5ZVNlcC8yO3ZhciBSPUUqdS9lLFU9dSpNYXRoLnRhbihvYi5ERUcyUkFEKmgqLjUpL3o7SS5lbGVtZW50c1sxMl09LUU7SC5lbGVtZW50c1sxMl09RTt2YXIgVz0tVSpuK1I7dmFyIFo9VSpuK1I7US5lbGVtZW50c1swXT0yKnUvKFotVyk7US5lbGVtZW50c1s4XT0oWitXKS8oWi1XKTt0aGlzLmNhbWVyYUwucHJvamVjdGlvbk1hdHJpeC5jb3B5KFEpO1c9LVUqbi1SO1o9VSpuLVI7US5lbGVtZW50c1swXT0yKnUvKFotVyk7US5lbGVtZW50c1s4XT0oWitXKS8oWi1XKTt0aGlzLmNhbWVyYVIucHJvamVjdGlvbk1hdHJpeC5jb3B5KFEpfXRoaXMuY2FtZXJhTC5tYXRyaXhXb3JsZC5jb3B5KE8ubWF0cml4V29ybGQpLm11bHRpcGx5KEkpOwp0aGlzLmNhbWVyYVIubWF0cml4V29ybGQuY29weShPLm1hdHJpeFdvcmxkKS5tdWx0aXBseShIKX19KCl9KTt4Zy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShTLnByb3RvdHlwZSk7eGcucHJvdG90eXBlLmNvbnN0cnVjdG9yPXhnO09iamVjdC5hc3NpZ24oUGkucHJvdG90eXBlLHtzdGFydDpmdW5jdGlvbigpe3RoaXMub2xkVGltZT10aGlzLnN0YXJ0VGltZT0oInVuZGVmaW5lZCI9PT10eXBlb2YgcGVyZm9ybWFuY2U/RGF0ZTpwZXJmb3JtYW5jZSkubm93KCk7dGhpcy5lbGFwc2VkVGltZT0wO3RoaXMucnVubmluZz0hMH0sc3RvcDpmdW5jdGlvbigpe3RoaXMuZ2V0RWxhcHNlZFRpbWUoKTt0aGlzLmF1dG9TdGFydD10aGlzLnJ1bm5pbmc9ITF9LGdldEVsYXBzZWRUaW1lOmZ1bmN0aW9uKCl7dGhpcy5nZXREZWx0YSgpO3JldHVybiB0aGlzLmVsYXBzZWRUaW1lfSxnZXREZWx0YTpmdW5jdGlvbigpe3ZhciBiPTA7aWYodGhpcy5hdXRvU3RhcnQmJiF0aGlzLnJ1bm5pbmcpcmV0dXJuIHRoaXMuc3RhcnQoKSwKMDtpZih0aGlzLnJ1bm5pbmcpe3ZhciBlPSgidW5kZWZpbmVkIj09PXR5cGVvZiBwZXJmb3JtYW5jZT9EYXRlOnBlcmZvcm1hbmNlKS5ub3coKTtiPShlLXRoaXMub2xkVGltZSkvMUUzO3RoaXMub2xkVGltZT1lO3RoaXMuZWxhcHNlZFRpbWUrPWJ9cmV0dXJuIGJ9fSk7UWkucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShTLnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOlFpLGdldElucHV0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2Fpbn0scmVtb3ZlRmlsdGVyOmZ1bmN0aW9uKCl7bnVsbCE9PXRoaXMuZmlsdGVyJiYodGhpcy5nYWluLmRpc2Nvbm5lY3QodGhpcy5maWx0ZXIpLHRoaXMuZmlsdGVyLmRpc2Nvbm5lY3QodGhpcy5jb250ZXh0LmRlc3RpbmF0aW9uKSx0aGlzLmdhaW4uY29ubmVjdCh0aGlzLmNvbnRleHQuZGVzdGluYXRpb24pLHRoaXMuZmlsdGVyPW51bGwpO3JldHVybiB0aGlzfSxnZXRGaWx0ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5maWx0ZXJ9LApzZXRGaWx0ZXI6ZnVuY3Rpb24oYil7bnVsbCE9PXRoaXMuZmlsdGVyPyh0aGlzLmdhaW4uZGlzY29ubmVjdCh0aGlzLmZpbHRlciksdGhpcy5maWx0ZXIuZGlzY29ubmVjdCh0aGlzLmNvbnRleHQuZGVzdGluYXRpb24pKTp0aGlzLmdhaW4uZGlzY29ubmVjdCh0aGlzLmNvbnRleHQuZGVzdGluYXRpb24pO3RoaXMuZmlsdGVyPWI7dGhpcy5nYWluLmNvbm5lY3QodGhpcy5maWx0ZXIpO3RoaXMuZmlsdGVyLmNvbm5lY3QodGhpcy5jb250ZXh0LmRlc3RpbmF0aW9uKTtyZXR1cm4gdGhpc30sZ2V0TWFzdGVyVm9sdW1lOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2Fpbi5nYWluLnZhbHVlfSxzZXRNYXN0ZXJWb2x1bWU6ZnVuY3Rpb24oYil7dGhpcy5nYWluLmdhaW4uc2V0VGFyZ2V0QXRUaW1lKGIsdGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lLC4wMSk7cmV0dXJuIHRoaXN9LHVwZGF0ZU1hdHJpeFdvcmxkOmZ1bmN0aW9uKCl7dmFyIGI9bmV3IGcsZT1uZXcgZixoPW5ldyBnLG49bmV3IGcsCnU9bmV3IFBpO3JldHVybiBmdW5jdGlvbih3KXtTLnByb3RvdHlwZS51cGRhdGVNYXRyaXhXb3JsZC5jYWxsKHRoaXMsdyk7dz10aGlzLmNvbnRleHQubGlzdGVuZXI7dmFyIHo9dGhpcy51cDt0aGlzLnRpbWVEZWx0YT11LmdldERlbHRhKCk7dGhpcy5tYXRyaXhXb3JsZC5kZWNvbXBvc2UoYixlLGgpO24uc2V0KDAsMCwtMSkuYXBwbHlRdWF0ZXJuaW9uKGUpO2lmKHcucG9zaXRpb25YKXt2YXIgRT10aGlzLmNvbnRleHQuY3VycmVudFRpbWUrdGhpcy50aW1lRGVsdGE7dy5wb3NpdGlvblgubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUoYi54LEUpO3cucG9zaXRpb25ZLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKGIueSxFKTt3LnBvc2l0aW9uWi5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZShiLnosRSk7dy5mb3J3YXJkWC5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZShuLngsRSk7dy5mb3J3YXJkWS5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZShuLnksRSk7dy5mb3J3YXJkWi5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZShuLnosCkUpO3cudXBYLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKHoueCxFKTt3LnVwWS5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZSh6LnksRSk7dy51cFoubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUoei56LEUpfWVsc2Ugdy5zZXRQb3NpdGlvbihiLngsYi55LGIueiksdy5zZXRPcmllbnRhdGlvbihuLngsbi55LG4ueix6Lngsei55LHoueil9fSgpfSk7amYucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShTLnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOmpmLGdldE91dHB1dDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdhaW59LHNldE5vZGVTb3VyY2U6ZnVuY3Rpb24oYil7dGhpcy5oYXNQbGF5YmFja0NvbnRyb2w9ITE7dGhpcy5zb3VyY2VUeXBlPSJhdWRpb05vZGUiO3RoaXMuc291cmNlPWI7dGhpcy5jb25uZWN0KCk7cmV0dXJuIHRoaXN9LHNldE1lZGlhRWxlbWVudFNvdXJjZTpmdW5jdGlvbihiKXt0aGlzLmhhc1BsYXliYWNrQ29udHJvbD0hMTt0aGlzLnNvdXJjZVR5cGU9CiJtZWRpYU5vZGUiO3RoaXMuc291cmNlPXRoaXMuY29udGV4dC5jcmVhdGVNZWRpYUVsZW1lbnRTb3VyY2UoYik7dGhpcy5jb25uZWN0KCk7cmV0dXJuIHRoaXN9LHNldEJ1ZmZlcjpmdW5jdGlvbihiKXt0aGlzLmJ1ZmZlcj1iO3RoaXMuc291cmNlVHlwZT0iYnVmZmVyIjt0aGlzLmF1dG9wbGF5JiZ0aGlzLnBsYXkoKTtyZXR1cm4gdGhpc30scGxheTpmdW5jdGlvbigpe2lmKCEwPT09dGhpcy5pc1BsYXlpbmcpY29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogQXVkaW8gaXMgYWxyZWFkeSBwbGF5aW5nLiIpO2Vsc2UgaWYoITE9PT10aGlzLmhhc1BsYXliYWNrQ29udHJvbCljb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvOiB0aGlzIEF1ZGlvIGhhcyBubyBwbGF5YmFjayBjb250cm9sLiIpO2Vsc2V7dmFyIGI9dGhpcy5jb250ZXh0LmNyZWF0ZUJ1ZmZlclNvdXJjZSgpO2IuYnVmZmVyPXRoaXMuYnVmZmVyO2IubG9vcD10aGlzLmxvb3A7Yi5vbmVuZGVkPXRoaXMub25FbmRlZC5iaW5kKHRoaXMpOwp0aGlzLnN0YXJ0VGltZT10aGlzLmNvbnRleHQuY3VycmVudFRpbWU7Yi5zdGFydCh0aGlzLnN0YXJ0VGltZSx0aGlzLm9mZnNldCk7dGhpcy5pc1BsYXlpbmc9ITA7dGhpcy5zb3VyY2U9Yjt0aGlzLnNldERldHVuZSh0aGlzLmRldHVuZSk7dGhpcy5zZXRQbGF5YmFja1JhdGUodGhpcy5wbGF5YmFja1JhdGUpO3JldHVybiB0aGlzLmNvbm5lY3QoKX19LHBhdXNlOmZ1bmN0aW9uKCl7aWYoITE9PT10aGlzLmhhc1BsYXliYWNrQ29udHJvbCljb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvOiB0aGlzIEF1ZGlvIGhhcyBubyBwbGF5YmFjayBjb250cm9sLiIpO2Vsc2UgcmV0dXJuITA9PT10aGlzLmlzUGxheWluZyYmKHRoaXMuc291cmNlLnN0b3AoKSx0aGlzLnNvdXJjZS5vbmVuZGVkPW51bGwsdGhpcy5vZmZzZXQrPSh0aGlzLmNvbnRleHQuY3VycmVudFRpbWUtdGhpcy5zdGFydFRpbWUpKnRoaXMucGxheWJhY2tSYXRlLHRoaXMuaXNQbGF5aW5nPSExKSx0aGlzfSxzdG9wOmZ1bmN0aW9uKCl7aWYoITE9PT0KdGhpcy5oYXNQbGF5YmFja0NvbnRyb2wpY29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogdGhpcyBBdWRpbyBoYXMgbm8gcGxheWJhY2sgY29udHJvbC4iKTtlbHNlIHJldHVybiB0aGlzLnNvdXJjZS5zdG9wKCksdGhpcy5zb3VyY2Uub25lbmRlZD1udWxsLHRoaXMub2Zmc2V0PTAsdGhpcy5pc1BsYXlpbmc9ITEsdGhpc30sY29ubmVjdDpmdW5jdGlvbigpe2lmKDA8dGhpcy5maWx0ZXJzLmxlbmd0aCl7dGhpcy5zb3VyY2UuY29ubmVjdCh0aGlzLmZpbHRlcnNbMF0pO2Zvcih2YXIgYj0xLGU9dGhpcy5maWx0ZXJzLmxlbmd0aDtiPGU7YisrKXRoaXMuZmlsdGVyc1tiLTFdLmNvbm5lY3QodGhpcy5maWx0ZXJzW2JdKTt0aGlzLmZpbHRlcnNbdGhpcy5maWx0ZXJzLmxlbmd0aC0xXS5jb25uZWN0KHRoaXMuZ2V0T3V0cHV0KCkpfWVsc2UgdGhpcy5zb3VyY2UuY29ubmVjdCh0aGlzLmdldE91dHB1dCgpKTtyZXR1cm4gdGhpc30sZGlzY29ubmVjdDpmdW5jdGlvbigpe2lmKDA8dGhpcy5maWx0ZXJzLmxlbmd0aCl7dGhpcy5zb3VyY2UuZGlzY29ubmVjdCh0aGlzLmZpbHRlcnNbMF0pOwpmb3IodmFyIGI9MSxlPXRoaXMuZmlsdGVycy5sZW5ndGg7YjxlO2IrKyl0aGlzLmZpbHRlcnNbYi0xXS5kaXNjb25uZWN0KHRoaXMuZmlsdGVyc1tiXSk7dGhpcy5maWx0ZXJzW3RoaXMuZmlsdGVycy5sZW5ndGgtMV0uZGlzY29ubmVjdCh0aGlzLmdldE91dHB1dCgpKX1lbHNlIHRoaXMuc291cmNlLmRpc2Nvbm5lY3QodGhpcy5nZXRPdXRwdXQoKSk7cmV0dXJuIHRoaXN9LGdldEZpbHRlcnM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5maWx0ZXJzfSxzZXRGaWx0ZXJzOmZ1bmN0aW9uKGIpe2J8fChiPVtdKTshMD09PXRoaXMuaXNQbGF5aW5nPyh0aGlzLmRpc2Nvbm5lY3QoKSx0aGlzLmZpbHRlcnM9Yix0aGlzLmNvbm5lY3QoKSk6dGhpcy5maWx0ZXJzPWI7cmV0dXJuIHRoaXN9LHNldERldHVuZTpmdW5jdGlvbihiKXt0aGlzLmRldHVuZT1iO2lmKHZvaWQgMCE9PXRoaXMuc291cmNlLmRldHVuZSlyZXR1cm4hMD09PXRoaXMuaXNQbGF5aW5nJiZ0aGlzLnNvdXJjZS5kZXR1bmUuc2V0VGFyZ2V0QXRUaW1lKHRoaXMuZGV0dW5lLAp0aGlzLmNvbnRleHQuY3VycmVudFRpbWUsLjAxKSx0aGlzfSxnZXREZXR1bmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kZXR1bmV9LGdldEZpbHRlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldEZpbHRlcnMoKVswXX0sc2V0RmlsdGVyOmZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLnNldEZpbHRlcnMoYj9bYl06W10pfSxzZXRQbGF5YmFja1JhdGU6ZnVuY3Rpb24oYil7aWYoITE9PT10aGlzLmhhc1BsYXliYWNrQ29udHJvbCljb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvOiB0aGlzIEF1ZGlvIGhhcyBubyBwbGF5YmFjayBjb250cm9sLiIpO2Vsc2UgcmV0dXJuIHRoaXMucGxheWJhY2tSYXRlPWIsITA9PT10aGlzLmlzUGxheWluZyYmdGhpcy5zb3VyY2UucGxheWJhY2tSYXRlLnNldFRhcmdldEF0VGltZSh0aGlzLnBsYXliYWNrUmF0ZSx0aGlzLmNvbnRleHQuY3VycmVudFRpbWUsLjAxKSx0aGlzfSxnZXRQbGF5YmFja1JhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wbGF5YmFja1JhdGV9LApvbkVuZGVkOmZ1bmN0aW9uKCl7dGhpcy5pc1BsYXlpbmc9ITF9LGdldExvb3A6ZnVuY3Rpb24oKXtyZXR1cm4hMT09PXRoaXMuaGFzUGxheWJhY2tDb250cm9sPyhjb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvOiB0aGlzIEF1ZGlvIGhhcyBubyBwbGF5YmFjayBjb250cm9sLiIpLCExKTp0aGlzLmxvb3B9LHNldExvb3A6ZnVuY3Rpb24oYil7aWYoITE9PT10aGlzLmhhc1BsYXliYWNrQ29udHJvbCljb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvOiB0aGlzIEF1ZGlvIGhhcyBubyBwbGF5YmFjayBjb250cm9sLiIpO2Vsc2UgcmV0dXJuIHRoaXMubG9vcD1iLCEwPT09dGhpcy5pc1BsYXlpbmcmJih0aGlzLnNvdXJjZS5sb29wPXRoaXMubG9vcCksdGhpc30sZ2V0Vm9sdW1lOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2Fpbi5nYWluLnZhbHVlfSxzZXRWb2x1bWU6ZnVuY3Rpb24oYil7dGhpcy5nYWluLmdhaW4uc2V0VGFyZ2V0QXRUaW1lKGIsdGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lLC4wMSk7CnJldHVybiB0aGlzfX0pO1NpLnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoamYucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6U2ksZ2V0T3V0cHV0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFubmVyfSxnZXRSZWZEaXN0YW5jZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnBhbm5lci5yZWZEaXN0YW5jZX0sc2V0UmVmRGlzdGFuY2U6ZnVuY3Rpb24oYil7dGhpcy5wYW5uZXIucmVmRGlzdGFuY2U9YjtyZXR1cm4gdGhpc30sZ2V0Um9sbG9mZkZhY3RvcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLnBhbm5lci5yb2xsb2ZmRmFjdG9yfSxzZXRSb2xsb2ZmRmFjdG9yOmZ1bmN0aW9uKGIpe3RoaXMucGFubmVyLnJvbGxvZmZGYWN0b3I9YjtyZXR1cm4gdGhpc30sZ2V0RGlzdGFuY2VNb2RlbDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnBhbm5lci5kaXN0YW5jZU1vZGVsfSxzZXREaXN0YW5jZU1vZGVsOmZ1bmN0aW9uKGIpe3RoaXMucGFubmVyLmRpc3RhbmNlTW9kZWw9YjsKcmV0dXJuIHRoaXN9LGdldE1heERpc3RhbmNlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFubmVyLm1heERpc3RhbmNlfSxzZXRNYXhEaXN0YW5jZTpmdW5jdGlvbihiKXt0aGlzLnBhbm5lci5tYXhEaXN0YW5jZT1iO3JldHVybiB0aGlzfSxzZXREaXJlY3Rpb25hbENvbmU6ZnVuY3Rpb24oYixlLGgpe3RoaXMucGFubmVyLmNvbmVJbm5lckFuZ2xlPWI7dGhpcy5wYW5uZXIuY29uZU91dGVyQW5nbGU9ZTt0aGlzLnBhbm5lci5jb25lT3V0ZXJHYWluPWg7cmV0dXJuIHRoaXN9LHVwZGF0ZU1hdHJpeFdvcmxkOmZ1bmN0aW9uKCl7dmFyIGI9bmV3IGcsZT1uZXcgZixoPW5ldyBnLG49bmV3IGc7cmV0dXJuIGZ1bmN0aW9uKHUpe1MucHJvdG90eXBlLnVwZGF0ZU1hdHJpeFdvcmxkLmNhbGwodGhpcyx1KTtpZighMCE9PXRoaXMuaGFzUGxheWJhY2tDb250cm9sfHwhMSE9PXRoaXMuaXNQbGF5aW5nKWlmKHRoaXMubWF0cml4V29ybGQuZGVjb21wb3NlKGIsZSxoKSxuLnNldCgwLDAsMSkuYXBwbHlRdWF0ZXJuaW9uKGUpLAp1PXRoaXMucGFubmVyLHUucG9zaXRpb25YKXt2YXIgdz10aGlzLmNvbnRleHQuY3VycmVudFRpbWUrdGhpcy5saXN0ZW5lci50aW1lRGVsdGE7dS5wb3NpdGlvblgubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUoYi54LHcpO3UucG9zaXRpb25ZLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKGIueSx3KTt1LnBvc2l0aW9uWi5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZShiLnosdyk7dS5vcmllbnRhdGlvblgubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUobi54LHcpO3Uub3JpZW50YXRpb25ZLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKG4ueSx3KTt1Lm9yaWVudGF0aW9uWi5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZShuLnosdyl9ZWxzZSB1LnNldFBvc2l0aW9uKGIueCxiLnksYi56KSx1LnNldE9yaWVudGF0aW9uKG4ueCxuLnksbi56KX19KCl9KTtPYmplY3QuYXNzaWduKFRpLnByb3RvdHlwZSx7Z2V0RnJlcXVlbmN5RGF0YTpmdW5jdGlvbigpe3RoaXMuYW5hbHlzZXIuZ2V0Qnl0ZUZyZXF1ZW5jeURhdGEodGhpcy5kYXRhKTsKcmV0dXJuIHRoaXMuZGF0YX0sZ2V0QXZlcmFnZUZyZXF1ZW5jeTpmdW5jdGlvbigpe2Zvcih2YXIgYj0wLGU9dGhpcy5nZXRGcmVxdWVuY3lEYXRhKCksaD0wO2g8ZS5sZW5ndGg7aCsrKWIrPWVbaF07cmV0dXJuIGIvZS5sZW5ndGh9fSk7T2JqZWN0LmFzc2lnbihVaS5wcm90b3R5cGUse2FjY3VtdWxhdGU6ZnVuY3Rpb24oYixlKXt2YXIgaD10aGlzLmJ1ZmZlcixuPXRoaXMudmFsdWVTaXplO2I9YipuK247dmFyIHU9dGhpcy5jdW11bGF0aXZlV2VpZ2h0O2lmKDA9PT11KXtmb3IodT0wO3UhPT1uOysrdSloW2IrdV09aFt1XTt1PWV9ZWxzZSB1Kz1lLHRoaXMuX21peEJ1ZmZlclJlZ2lvbihoLGIsMCxlL3Usbik7dGhpcy5jdW11bGF0aXZlV2VpZ2h0PXV9LGFwcGx5OmZ1bmN0aW9uKGIpe3ZhciBlPXRoaXMudmFsdWVTaXplLGg9dGhpcy5idWZmZXI7Yj1iKmUrZTt2YXIgbj10aGlzLmN1bXVsYXRpdmVXZWlnaHQsdT10aGlzLmJpbmRpbmc7dGhpcy5jdW11bGF0aXZlV2VpZ2h0PTA7CjE+biYmdGhpcy5fbWl4QnVmZmVyUmVnaW9uKGgsYiwzKmUsMS1uLGUpO249ZTtmb3IodmFyIHc9ZStlO24hPT13OysrbilpZihoW25dIT09aFtuK2VdKXt1LnNldFZhbHVlKGgsYik7YnJlYWt9fSxzYXZlT3JpZ2luYWxTdGF0ZTpmdW5jdGlvbigpe3ZhciBiPXRoaXMuYnVmZmVyLGU9dGhpcy52YWx1ZVNpemUsaD0zKmU7dGhpcy5iaW5kaW5nLmdldFZhbHVlKGIsaCk7Zm9yKHZhciBuPWU7biE9PWg7KytuKWJbbl09YltoK24lZV07dGhpcy5jdW11bGF0aXZlV2VpZ2h0PTB9LHJlc3RvcmVPcmlnaW5hbFN0YXRlOmZ1bmN0aW9uKCl7dGhpcy5iaW5kaW5nLnNldFZhbHVlKHRoaXMuYnVmZmVyLDMqdGhpcy52YWx1ZVNpemUpfSxfc2VsZWN0OmZ1bmN0aW9uKGIsZSxoLG4sdSl7aWYoLjU8PW4pZm9yKG49MDtuIT09dTsrK24pYltlK25dPWJbaCtuXX0sX3NsZXJwOmZ1bmN0aW9uKGIsZSxoLG4pe2Yuc2xlcnBGbGF0KGIsZSxiLGUsYixoLG4pfSxfbGVycDpmdW5jdGlvbihiLGUsaCxuLAp1KXtmb3IodmFyIHc9MS1uLHo9MDt6IT09dTsrK3ope3ZhciBFPWUrejtiW0VdPWJbRV0qdytiW2grel0qbn19fSk7T2JqZWN0LmFzc2lnbihKbC5wcm90b3R5cGUse2dldFZhbHVlOmZ1bmN0aW9uKGIsZSl7dGhpcy5iaW5kKCk7dmFyIGg9dGhpcy5fYmluZGluZ3NbdGhpcy5fdGFyZ2V0R3JvdXAubkNhY2hlZE9iamVjdHNfXTt2b2lkIDAhPT1oJiZoLmdldFZhbHVlKGIsZSl9LHNldFZhbHVlOmZ1bmN0aW9uKGIsZSl7Zm9yKHZhciBoPXRoaXMuX2JpbmRpbmdzLG49dGhpcy5fdGFyZ2V0R3JvdXAubkNhY2hlZE9iamVjdHNfLHU9aC5sZW5ndGg7biE9PXU7KytuKWhbbl0uc2V0VmFsdWUoYixlKX0sYmluZDpmdW5jdGlvbigpe2Zvcih2YXIgYj10aGlzLl9iaW5kaW5ncyxlPXRoaXMuX3RhcmdldEdyb3VwLm5DYWNoZWRPYmplY3RzXyxoPWIubGVuZ3RoO2UhPT1oOysrZSliW2VdLmJpbmQoKX0sdW5iaW5kOmZ1bmN0aW9uKCl7Zm9yKHZhciBiPXRoaXMuX2JpbmRpbmdzLGU9dGhpcy5fdGFyZ2V0R3JvdXAubkNhY2hlZE9iamVjdHNfLApoPWIubGVuZ3RoO2UhPT1oOysrZSliW2VdLnVuYmluZCgpfX0pO09iamVjdC5hc3NpZ24oc2Mse0NvbXBvc2l0ZTpKbCxjcmVhdGU6ZnVuY3Rpb24oYixlLGgpe3JldHVybiBiJiZiLmlzQW5pbWF0aW9uT2JqZWN0R3JvdXA/bmV3IHNjLkNvbXBvc2l0ZShiLGUsaCk6bmV3IHNjKGIsZSxoKX0sc2FuaXRpemVOb2RlTmFtZTpmdW5jdGlvbigpe3ZhciBiPS9bXFtcXVwuOlwvXS9nO3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKC9ccy9nLCJfIikucmVwbGFjZShiLCIiKX19KCkscGFyc2VUcmFja05hbWU6ZnVuY3Rpb24oKXt2YXIgYj0iW14iKyJcXFtcXF1cXC46XFwvIi5yZXBsYWNlKCJcXC4iLCIiKSsiXSIsZT0vKCg/OldDK1tcLzpdKSopLy5zb3VyY2UucmVwbGFjZSgiV0MiLCJbXlxcW1xcXVxcLjpcXC9dIik7Yj0vKFdDT0QrKT8vLnNvdXJjZS5yZXBsYWNlKCJXQ09EIixiKTt2YXIgaD0vKD86XC4oV0MrKSg/OlxbKC4rKVxdKT8pPy8uc291cmNlLnJlcGxhY2UoIldDIiwKIlteXFxbXFxdXFwuOlxcL10iKSxuPS9cLihXQyspKD86XFsoLispXF0pPy8uc291cmNlLnJlcGxhY2UoIldDIiwiW15cXFtcXF1cXC46XFwvXSIpLHU9bmV3IFJlZ0V4cCgiXiIrZStiK2grbisiJCIpLHc9WyJtYXRlcmlhbCIsIm1hdGVyaWFscyIsImJvbmVzIl07cmV0dXJuIGZ1bmN0aW9uKHope3ZhciBFPXUuZXhlYyh6KTtpZighRSl0aHJvdyBFcnJvcigiUHJvcGVydHlCaW5kaW5nOiBDYW5ub3QgcGFyc2UgdHJhY2tOYW1lOiAiK3opO0U9e25vZGVOYW1lOkVbMl0sb2JqZWN0TmFtZTpFWzNdLG9iamVjdEluZGV4OkVbNF0scHJvcGVydHlOYW1lOkVbNV0scHJvcGVydHlJbmRleDpFWzZdfTt2YXIgSD1FLm5vZGVOYW1lJiZFLm5vZGVOYW1lLmxhc3RJbmRleE9mKCIuIik7aWYodm9pZCAwIT09SCYmLTEhPT1IKXt2YXIgST1FLm5vZGVOYW1lLnN1YnN0cmluZyhIKzEpOy0xIT09dy5pbmRleE9mKEkpJiYoRS5ub2RlTmFtZT1FLm5vZGVOYW1lLnN1YnN0cmluZygwLEgpLEUub2JqZWN0TmFtZT0KSSl9aWYobnVsbD09PUUucHJvcGVydHlOYW1lfHwwPT09RS5wcm9wZXJ0eU5hbWUubGVuZ3RoKXRocm93IEVycm9yKCJQcm9wZXJ0eUJpbmRpbmc6IGNhbiBub3QgcGFyc2UgcHJvcGVydHlOYW1lIGZyb20gdHJhY2tOYW1lOiAiK3opO3JldHVybiBFfX0oKSxmaW5kTm9kZTpmdW5jdGlvbihiLGUpe2lmKCFlfHwiIj09PWV8fCJyb290Ij09PWV8fCIuIj09PWV8fC0xPT09ZXx8ZT09PWIubmFtZXx8ZT09PWIudXVpZClyZXR1cm4gYjtpZihiLnNrZWxldG9uKXt2YXIgaD1iLnNrZWxldG9uLmdldEJvbmVCeU5hbWUoZSk7aWYodm9pZCAwIT09aClyZXR1cm4gaH1pZihiLmNoaWxkcmVuKXt2YXIgbj1mdW5jdGlvbih1KXtmb3IodmFyIHc9MDt3PHUubGVuZ3RoO3crKyl7dmFyIHo9dVt3XTtpZih6Lm5hbWU9PT1lfHx6LnV1aWQ9PT1lKXJldHVybiB6O2lmKHo9bih6LmNoaWxkcmVuKSlyZXR1cm4gen1yZXR1cm4gbnVsbH07aWYoYj1uKGIuY2hpbGRyZW4pKXJldHVybiBifXJldHVybiBudWxsfX0pOwpPYmplY3QuYXNzaWduKHNjLnByb3RvdHlwZSx7X2dldFZhbHVlX3VuYXZhaWxhYmxlOmZ1bmN0aW9uKCl7fSxfc2V0VmFsdWVfdW5hdmFpbGFibGU6ZnVuY3Rpb24oKXt9LEJpbmRpbmdUeXBlOntEaXJlY3Q6MCxFbnRpcmVBcnJheToxLEFycmF5RWxlbWVudDoyLEhhc0Zyb21Ub0FycmF5OjN9LFZlcnNpb25pbmc6e05vbmU6MCxOZWVkc1VwZGF0ZToxLE1hdHJpeFdvcmxkTmVlZHNVcGRhdGU6Mn0sR2V0dGVyQnlCaW5kaW5nVHlwZTpbZnVuY3Rpb24oYixlKXtiW2VdPXRoaXMubm9kZVt0aGlzLnByb3BlcnR5TmFtZV19LGZ1bmN0aW9uKGIsZSl7Zm9yKHZhciBoPXRoaXMucmVzb2x2ZWRQcm9wZXJ0eSxuPTAsdT1oLmxlbmd0aDtuIT09dTsrK24pYltlKytdPWhbbl19LGZ1bmN0aW9uKGIsZSl7YltlXT10aGlzLnJlc29sdmVkUHJvcGVydHlbdGhpcy5wcm9wZXJ0eUluZGV4XX0sZnVuY3Rpb24oYixlKXt0aGlzLnJlc29sdmVkUHJvcGVydHkudG9BcnJheShiLGUpfV0sU2V0dGVyQnlCaW5kaW5nVHlwZUFuZFZlcnNpb25pbmc6W1tmdW5jdGlvbihiLAplKXt0aGlzLnRhcmdldE9iamVjdFt0aGlzLnByb3BlcnR5TmFtZV09YltlXX0sZnVuY3Rpb24oYixlKXt0aGlzLnRhcmdldE9iamVjdFt0aGlzLnByb3BlcnR5TmFtZV09YltlXTt0aGlzLnRhcmdldE9iamVjdC5uZWVkc1VwZGF0ZT0hMH0sZnVuY3Rpb24oYixlKXt0aGlzLnRhcmdldE9iamVjdFt0aGlzLnByb3BlcnR5TmFtZV09YltlXTt0aGlzLnRhcmdldE9iamVjdC5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlPSEwfV0sW2Z1bmN0aW9uKGIsZSl7Zm9yKHZhciBoPXRoaXMucmVzb2x2ZWRQcm9wZXJ0eSxuPTAsdT1oLmxlbmd0aDtuIT09dTsrK24paFtuXT1iW2UrK119LGZ1bmN0aW9uKGIsZSl7Zm9yKHZhciBoPXRoaXMucmVzb2x2ZWRQcm9wZXJ0eSxuPTAsdT1oLmxlbmd0aDtuIT09dTsrK24paFtuXT1iW2UrK107dGhpcy50YXJnZXRPYmplY3QubmVlZHNVcGRhdGU9ITB9LGZ1bmN0aW9uKGIsZSl7Zm9yKHZhciBoPXRoaXMucmVzb2x2ZWRQcm9wZXJ0eSxuPTAsdT1oLmxlbmd0aDtuIT09CnU7KytuKWhbbl09YltlKytdO3RoaXMudGFyZ2V0T2JqZWN0Lm1hdHJpeFdvcmxkTmVlZHNVcGRhdGU9ITB9XSxbZnVuY3Rpb24oYixlKXt0aGlzLnJlc29sdmVkUHJvcGVydHlbdGhpcy5wcm9wZXJ0eUluZGV4XT1iW2VdfSxmdW5jdGlvbihiLGUpe3RoaXMucmVzb2x2ZWRQcm9wZXJ0eVt0aGlzLnByb3BlcnR5SW5kZXhdPWJbZV07dGhpcy50YXJnZXRPYmplY3QubmVlZHNVcGRhdGU9ITB9LGZ1bmN0aW9uKGIsZSl7dGhpcy5yZXNvbHZlZFByb3BlcnR5W3RoaXMucHJvcGVydHlJbmRleF09YltlXTt0aGlzLnRhcmdldE9iamVjdC5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlPSEwfV0sW2Z1bmN0aW9uKGIsZSl7dGhpcy5yZXNvbHZlZFByb3BlcnR5LmZyb21BcnJheShiLGUpfSxmdW5jdGlvbihiLGUpe3RoaXMucmVzb2x2ZWRQcm9wZXJ0eS5mcm9tQXJyYXkoYixlKTt0aGlzLnRhcmdldE9iamVjdC5uZWVkc1VwZGF0ZT0hMH0sZnVuY3Rpb24oYixlKXt0aGlzLnJlc29sdmVkUHJvcGVydHkuZnJvbUFycmF5KGIsCmUpO3RoaXMudGFyZ2V0T2JqZWN0Lm1hdHJpeFdvcmxkTmVlZHNVcGRhdGU9ITB9XV0sZ2V0VmFsdWU6ZnVuY3Rpb24oYixlKXt0aGlzLmJpbmQoKTt0aGlzLmdldFZhbHVlKGIsZSl9LHNldFZhbHVlOmZ1bmN0aW9uKGIsZSl7dGhpcy5iaW5kKCk7dGhpcy5zZXRWYWx1ZShiLGUpfSxiaW5kOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5ub2RlLGU9dGhpcy5wYXJzZWRQYXRoLGg9ZS5vYmplY3ROYW1lLG49ZS5wcm9wZXJ0eU5hbWUsdT1lLnByb3BlcnR5SW5kZXg7Ynx8KHRoaXMubm9kZT1iPXNjLmZpbmROb2RlKHRoaXMucm9vdE5vZGUsZS5ub2RlTmFtZSl8fHRoaXMucm9vdE5vZGUpO3RoaXMuZ2V0VmFsdWU9dGhpcy5fZ2V0VmFsdWVfdW5hdmFpbGFibGU7dGhpcy5zZXRWYWx1ZT10aGlzLl9zZXRWYWx1ZV91bmF2YWlsYWJsZTtpZihiKXtpZihoKXt2YXIgdz1lLm9iamVjdEluZGV4O3N3aXRjaChoKXtjYXNlICJtYXRlcmlhbHMiOmlmKCFiLm1hdGVyaWFsKXtjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IENhbiBub3QgYmluZCB0byBtYXRlcmlhbCBhcyBub2RlIGRvZXMgbm90IGhhdmUgYSBtYXRlcmlhbC4iLAp0aGlzKTtyZXR1cm59aWYoIWIubWF0ZXJpYWwubWF0ZXJpYWxzKXtjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IENhbiBub3QgYmluZCB0byBtYXRlcmlhbC5tYXRlcmlhbHMgYXMgbm9kZS5tYXRlcmlhbCBkb2VzIG5vdCBoYXZlIGEgbWF0ZXJpYWxzIGFycmF5LiIsdGhpcyk7cmV0dXJufWI9Yi5tYXRlcmlhbC5tYXRlcmlhbHM7YnJlYWs7Y2FzZSAiYm9uZXMiOmlmKCFiLnNrZWxldG9uKXtjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IENhbiBub3QgYmluZCB0byBib25lcyBhcyBub2RlIGRvZXMgbm90IGhhdmUgYSBza2VsZXRvbi4iLHRoaXMpO3JldHVybn1iPWIuc2tlbGV0b24uYm9uZXM7Zm9yKGg9MDtoPGIubGVuZ3RoO2grKylpZihiW2hdLm5hbWU9PT13KXt3PWg7YnJlYWt9YnJlYWs7ZGVmYXVsdDppZih2b2lkIDA9PT1iW2hdKXtjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IENhbiBub3QgYmluZCB0byBvYmplY3ROYW1lIG9mIG5vZGUgdW5kZWZpbmVkLiIsCnRoaXMpO3JldHVybn1iPWJbaF19aWYodm9pZCAwIT09dyl7aWYodm9pZCAwPT09Ylt3XSl7Y29uc29sZS5lcnJvcigiVEhSRUUuUHJvcGVydHlCaW5kaW5nOiBUcnlpbmcgdG8gYmluZCB0byBvYmplY3RJbmRleCBvZiBvYmplY3ROYW1lLCBidXQgaXMgdW5kZWZpbmVkLiIsdGhpcyxiKTtyZXR1cm59Yj1iW3ddfX13PWJbbl07aWYodm9pZCAwPT09dyljb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IFRyeWluZyB0byB1cGRhdGUgcHJvcGVydHkgZm9yIHRyYWNrOiAiK2Uubm9kZU5hbWUrIi4iK24rIiBidXQgaXQgd2Fzbid0IGZvdW5kLiIsYik7ZWxzZXtlPXRoaXMuVmVyc2lvbmluZy5Ob25lO3RoaXMudGFyZ2V0T2JqZWN0PWI7dm9pZCAwIT09Yi5uZWVkc1VwZGF0ZT9lPXRoaXMuVmVyc2lvbmluZy5OZWVkc1VwZGF0ZTp2b2lkIDAhPT1iLm1hdHJpeFdvcmxkTmVlZHNVcGRhdGUmJihlPXRoaXMuVmVyc2lvbmluZy5NYXRyaXhXb3JsZE5lZWRzVXBkYXRlKTtoPQp0aGlzLkJpbmRpbmdUeXBlLkRpcmVjdDtpZih2b2lkIDAhPT11KXtpZigibW9ycGhUYXJnZXRJbmZsdWVuY2VzIj09PW4pe2lmKCFiLmdlb21ldHJ5KXtjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IENhbiBub3QgYmluZCB0byBtb3JwaFRhcmdldEluZmx1ZW5jZXMgYmVjYXVzZSBub2RlIGRvZXMgbm90IGhhdmUgYSBnZW9tZXRyeS4iLHRoaXMpO3JldHVybn1pZihiLmdlb21ldHJ5LmlzQnVmZmVyR2VvbWV0cnkpe2lmKCFiLmdlb21ldHJ5Lm1vcnBoQXR0cmlidXRlcyl7Y29uc29sZS5lcnJvcigiVEhSRUUuUHJvcGVydHlCaW5kaW5nOiBDYW4gbm90IGJpbmQgdG8gbW9ycGhUYXJnZXRJbmZsdWVuY2VzIGJlY2F1c2Ugbm9kZSBkb2VzIG5vdCBoYXZlIGEgZ2VvbWV0cnkubW9ycGhBdHRyaWJ1dGVzLiIsdGhpcyk7cmV0dXJufWZvcihoPTA7aDx0aGlzLm5vZGUuZ2VvbWV0cnkubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uLmxlbmd0aDtoKyspaWYoYi5nZW9tZXRyeS5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb25baF0ubmFtZT09PQp1KXt1PWg7YnJlYWt9fWVsc2V7aWYoIWIuZ2VvbWV0cnkubW9ycGhUYXJnZXRzKXtjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IENhbiBub3QgYmluZCB0byBtb3JwaFRhcmdldEluZmx1ZW5jZXMgYmVjYXVzZSBub2RlIGRvZXMgbm90IGhhdmUgYSBnZW9tZXRyeS5tb3JwaFRhcmdldHMuIix0aGlzKTtyZXR1cm59Zm9yKGg9MDtoPHRoaXMubm9kZS5nZW9tZXRyeS5tb3JwaFRhcmdldHMubGVuZ3RoO2grKylpZihiLmdlb21ldHJ5Lm1vcnBoVGFyZ2V0c1toXS5uYW1lPT09dSl7dT1oO2JyZWFrfX19aD10aGlzLkJpbmRpbmdUeXBlLkFycmF5RWxlbWVudDt0aGlzLnJlc29sdmVkUHJvcGVydHk9dzt0aGlzLnByb3BlcnR5SW5kZXg9dX1lbHNlIHZvaWQgMCE9PXcuZnJvbUFycmF5JiZ2b2lkIDAhPT13LnRvQXJyYXk/KGg9dGhpcy5CaW5kaW5nVHlwZS5IYXNGcm9tVG9BcnJheSx0aGlzLnJlc29sdmVkUHJvcGVydHk9dyk6QXJyYXkuaXNBcnJheSh3KT8oaD10aGlzLkJpbmRpbmdUeXBlLkVudGlyZUFycmF5LAp0aGlzLnJlc29sdmVkUHJvcGVydHk9dyk6dGhpcy5wcm9wZXJ0eU5hbWU9bjt0aGlzLmdldFZhbHVlPXRoaXMuR2V0dGVyQnlCaW5kaW5nVHlwZVtoXTt0aGlzLnNldFZhbHVlPXRoaXMuU2V0dGVyQnlCaW5kaW5nVHlwZUFuZFZlcnNpb25pbmdbaF1bZV19fWVsc2UgY29uc29sZS5lcnJvcigiVEhSRUUuUHJvcGVydHlCaW5kaW5nOiBUcnlpbmcgdG8gdXBkYXRlIG5vZGUgZm9yIHRyYWNrOiAiK3RoaXMucGF0aCsiIGJ1dCBpdCB3YXNuJ3QgZm91bmQuIil9LHVuYmluZDpmdW5jdGlvbigpe3RoaXMubm9kZT1udWxsO3RoaXMuZ2V0VmFsdWU9dGhpcy5fZ2V0VmFsdWVfdW5ib3VuZDt0aGlzLnNldFZhbHVlPXRoaXMuX3NldFZhbHVlX3VuYm91bmR9fSk7T2JqZWN0LmFzc2lnbihzYy5wcm90b3R5cGUse19nZXRWYWx1ZV91bmJvdW5kOnNjLnByb3RvdHlwZS5nZXRWYWx1ZSxfc2V0VmFsdWVfdW5ib3VuZDpzYy5wcm90b3R5cGUuc2V0VmFsdWV9KTtPYmplY3QuYXNzaWduKEtsLnByb3RvdHlwZSwKe2lzQW5pbWF0aW9uT2JqZWN0R3JvdXA6ITAsYWRkOmZ1bmN0aW9uKCl7Zm9yKHZhciBiPXRoaXMuX29iamVjdHMsZT1iLmxlbmd0aCxoPXRoaXMubkNhY2hlZE9iamVjdHNfLG49dGhpcy5faW5kaWNlc0J5VVVJRCx1PXRoaXMuX3BhdGhzLHc9dGhpcy5fcGFyc2VkUGF0aHMsej10aGlzLl9iaW5kaW5ncyxFPXoubGVuZ3RoLEg9dm9pZCAwLEk9MCxPPWFyZ3VtZW50cy5sZW5ndGg7SSE9PU87KytJKXt2YXIgUT1hcmd1bWVudHNbSV0sUj1RLnV1aWQsVT1uW1JdO2lmKHZvaWQgMD09PVUpe1U9ZSsrO25bUl09VTtiLnB1c2goUSk7Uj0wO2Zvcih2YXIgVz1FO1IhPT1XOysrUil6W1JdLnB1c2gobmV3IHNjKFEsdVtSXSx3W1JdKSl9ZWxzZSBpZihVPGgpe0g9YltVXTt2YXIgWj0tLWg7Vz1iW1pdO25bVy51dWlkXT1VO2JbVV09VztuW1JdPVo7YltaXT1RO1I9MDtmb3IoVz1FO1IhPT1XOysrUil7dmFyIGZhPXpbUl0scWE9ZmFbVV07ZmFbVV09ZmFbWl07dm9pZCAwPT09cWEmJihxYT1uZXcgc2MoUSwKdVtSXSx3W1JdKSk7ZmFbWl09cWF9fWVsc2UgYltVXSE9PUgmJmNvbnNvbGUuZXJyb3IoIlRIUkVFLkFuaW1hdGlvbk9iamVjdEdyb3VwOiBEaWZmZXJlbnQgb2JqZWN0cyB3aXRoIHRoZSBzYW1lIFVVSUQgZGV0ZWN0ZWQuIENsZWFuIHRoZSBjYWNoZXMgb3IgcmVjcmVhdGUgeW91ciBpbmZyYXN0cnVjdHVyZSB3aGVuIHJlbG9hZGluZyBzY2VuZXMuIil9dGhpcy5uQ2FjaGVkT2JqZWN0c189aH0scmVtb3ZlOmZ1bmN0aW9uKCl7Zm9yKHZhciBiPXRoaXMuX29iamVjdHMsZT10aGlzLm5DYWNoZWRPYmplY3RzXyxoPXRoaXMuX2luZGljZXNCeVVVSUQsbj10aGlzLl9iaW5kaW5ncyx1PW4ubGVuZ3RoLHc9MCx6PWFyZ3VtZW50cy5sZW5ndGg7dyE9PXo7Kyt3KXt2YXIgRT1hcmd1bWVudHNbd10sSD1FLnV1aWQsST1oW0hdO2lmKHZvaWQgMCE9PUkmJkk+PWUpe3ZhciBPPWUrKyxRPWJbT107aFtRLnV1aWRdPUk7YltJXT1RO2hbSF09TztiW09dPUU7RT0wO2ZvcihIPXU7RSE9PUg7KytFKXtRPQpuW0VdO3ZhciBSPVFbSV07UVtJXT1RW09dO1FbT109Un19fXRoaXMubkNhY2hlZE9iamVjdHNfPWV9LHVuY2FjaGU6ZnVuY3Rpb24oKXtmb3IodmFyIGI9dGhpcy5fb2JqZWN0cyxlPWIubGVuZ3RoLGg9dGhpcy5uQ2FjaGVkT2JqZWN0c18sbj10aGlzLl9pbmRpY2VzQnlVVUlELHU9dGhpcy5fYmluZGluZ3Msdz11Lmxlbmd0aCx6PTAsRT1hcmd1bWVudHMubGVuZ3RoO3ohPT1FOysreil7dmFyIEg9YXJndW1lbnRzW3pdLnV1aWQsST1uW0hdO2lmKHZvaWQgMCE9PUkpaWYoZGVsZXRlIG5bSF0sSTxoKXtIPS0taDt2YXIgTz1iW0hdLFE9LS1lLFI9YltRXTtuW08udXVpZF09STtiW0ldPU87bltSLnV1aWRdPUg7YltIXT1SO2IucG9wKCk7Tz0wO2ZvcihSPXc7TyE9PVI7KytPKXt2YXIgVT11W09dLFc9VVtRXTtVW0ldPVVbSF07VVtIXT1XO1UucG9wKCl9fWVsc2UgZm9yKFE9LS1lLFI9YltRXSxuW1IudXVpZF09SSxiW0ldPVIsYi5wb3AoKSxPPTAsUj13O08hPT1SOysrTylVPXVbT10sClVbSV09VVtRXSxVLnBvcCgpfXRoaXMubkNhY2hlZE9iamVjdHNfPWh9LHN1YnNjcmliZV86ZnVuY3Rpb24oYixlKXt2YXIgaD10aGlzLl9iaW5kaW5nc0luZGljZXNCeVBhdGgsbj1oW2JdLHU9dGhpcy5fYmluZGluZ3M7aWYodm9pZCAwIT09bilyZXR1cm4gdVtuXTt2YXIgdz10aGlzLl9wYXRocyx6PXRoaXMuX3BhcnNlZFBhdGhzLEU9dGhpcy5fb2JqZWN0cyxIPXRoaXMubkNhY2hlZE9iamVjdHNfLEk9QXJyYXkoRS5sZW5ndGgpO249dS5sZW5ndGg7aFtiXT1uO3cucHVzaChiKTt6LnB1c2goZSk7dS5wdXNoKEkpO2g9SDtmb3Iobj1FLmxlbmd0aDtoIT09bjsrK2gpSVtoXT1uZXcgc2MoRVtoXSxiLGUpO3JldHVybiBJfSx1bnN1YnNjcmliZV86ZnVuY3Rpb24oYil7dmFyIGU9dGhpcy5fYmluZGluZ3NJbmRpY2VzQnlQYXRoLGg9ZVtiXTtpZih2b2lkIDAhPT1oKXt2YXIgbj10aGlzLl9wYXRocyx1PXRoaXMuX3BhcnNlZFBhdGhzLHc9dGhpcy5fYmluZGluZ3Msej13Lmxlbmd0aC0KMSxFPXdbel07ZVtiW3pdXT1oO3dbaF09RTt3LnBvcCgpO3VbaF09dVt6XTt1LnBvcCgpO25baF09blt6XTtuLnBvcCgpfX19KTtPYmplY3QuYXNzaWduKExsLnByb3RvdHlwZSx7cGxheTpmdW5jdGlvbigpe3RoaXMuX21peGVyLl9hY3RpdmF0ZUFjdGlvbih0aGlzKTtyZXR1cm4gdGhpc30sc3RvcDpmdW5jdGlvbigpe3RoaXMuX21peGVyLl9kZWFjdGl2YXRlQWN0aW9uKHRoaXMpO3JldHVybiB0aGlzLnJlc2V0KCl9LHJlc2V0OmZ1bmN0aW9uKCl7dGhpcy5wYXVzZWQ9ITE7dGhpcy5lbmFibGVkPSEwO3RoaXMudGltZT0wO3RoaXMuX2xvb3BDb3VudD0tMTt0aGlzLl9zdGFydFRpbWU9bnVsbDtyZXR1cm4gdGhpcy5zdG9wRmFkaW5nKCkuc3RvcFdhcnBpbmcoKX0saXNSdW5uaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZW5hYmxlZCYmIXRoaXMucGF1c2VkJiYwIT09dGhpcy50aW1lU2NhbGUmJm51bGw9PT10aGlzLl9zdGFydFRpbWUmJnRoaXMuX21peGVyLl9pc0FjdGl2ZUFjdGlvbih0aGlzKX0sCmlzU2NoZWR1bGVkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21peGVyLl9pc0FjdGl2ZUFjdGlvbih0aGlzKX0sc3RhcnRBdDpmdW5jdGlvbihiKXt0aGlzLl9zdGFydFRpbWU9YjtyZXR1cm4gdGhpc30sc2V0TG9vcDpmdW5jdGlvbihiLGUpe3RoaXMubG9vcD1iO3RoaXMucmVwZXRpdGlvbnM9ZTtyZXR1cm4gdGhpc30sc2V0RWZmZWN0aXZlV2VpZ2h0OmZ1bmN0aW9uKGIpe3RoaXMud2VpZ2h0PWI7dGhpcy5fZWZmZWN0aXZlV2VpZ2h0PXRoaXMuZW5hYmxlZD9iOjA7cmV0dXJuIHRoaXMuc3RvcEZhZGluZygpfSxnZXRFZmZlY3RpdmVXZWlnaHQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZWZmZWN0aXZlV2VpZ2h0fSxmYWRlSW46ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuX3NjaGVkdWxlRmFkaW5nKGIsMCwxKX0sZmFkZU91dDpmdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5fc2NoZWR1bGVGYWRpbmcoYiwxLDApfSxjcm9zc0ZhZGVGcm9tOmZ1bmN0aW9uKGIsZSxoKXtiLmZhZGVPdXQoZSk7CnRoaXMuZmFkZUluKGUpO2lmKGgpe2g9dGhpcy5fY2xpcC5kdXJhdGlvbjt2YXIgbj1iLl9jbGlwLmR1cmF0aW9uLHU9aC9uO2Iud2FycCgxLG4vaCxlKTt0aGlzLndhcnAodSwxLGUpfXJldHVybiB0aGlzfSxjcm9zc0ZhZGVUbzpmdW5jdGlvbihiLGUsaCl7cmV0dXJuIGIuY3Jvc3NGYWRlRnJvbSh0aGlzLGUsaCl9LHN0b3BGYWRpbmc6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLl93ZWlnaHRJbnRlcnBvbGFudDtudWxsIT09YiYmKHRoaXMuX3dlaWdodEludGVycG9sYW50PW51bGwsdGhpcy5fbWl4ZXIuX3Rha2VCYWNrQ29udHJvbEludGVycG9sYW50KGIpKTtyZXR1cm4gdGhpc30sc2V0RWZmZWN0aXZlVGltZVNjYWxlOmZ1bmN0aW9uKGIpe3RoaXMudGltZVNjYWxlPWI7dGhpcy5fZWZmZWN0aXZlVGltZVNjYWxlPXRoaXMucGF1c2VkPzA6YjtyZXR1cm4gdGhpcy5zdG9wV2FycGluZygpfSxnZXRFZmZlY3RpdmVUaW1lU2NhbGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZWZmZWN0aXZlVGltZVNjYWxlfSwKc2V0RHVyYXRpb246ZnVuY3Rpb24oYil7dGhpcy50aW1lU2NhbGU9dGhpcy5fY2xpcC5kdXJhdGlvbi9iO3JldHVybiB0aGlzLnN0b3BXYXJwaW5nKCl9LHN5bmNXaXRoOmZ1bmN0aW9uKGIpe3RoaXMudGltZT1iLnRpbWU7dGhpcy50aW1lU2NhbGU9Yi50aW1lU2NhbGU7cmV0dXJuIHRoaXMuc3RvcFdhcnBpbmcoKX0saGFsdDpmdW5jdGlvbihiKXtyZXR1cm4gdGhpcy53YXJwKHRoaXMuX2VmZmVjdGl2ZVRpbWVTY2FsZSwwLGIpfSx3YXJwOmZ1bmN0aW9uKGIsZSxoKXt2YXIgbj10aGlzLl9taXhlcix1PW4udGltZSx3PXRoaXMuX3RpbWVTY2FsZUludGVycG9sYW50LHo9dGhpcy50aW1lU2NhbGU7bnVsbD09PXcmJih0aGlzLl90aW1lU2NhbGVJbnRlcnBvbGFudD13PW4uX2xlbmRDb250cm9sSW50ZXJwb2xhbnQoKSk7bj13LnBhcmFtZXRlclBvc2l0aW9uczt3PXcuc2FtcGxlVmFsdWVzO25bMF09dTtuWzFdPXUraDt3WzBdPWIvejt3WzFdPWUvejtyZXR1cm4gdGhpc30sc3RvcFdhcnBpbmc6ZnVuY3Rpb24oKXt2YXIgYj0KdGhpcy5fdGltZVNjYWxlSW50ZXJwb2xhbnQ7bnVsbCE9PWImJih0aGlzLl90aW1lU2NhbGVJbnRlcnBvbGFudD1udWxsLHRoaXMuX21peGVyLl90YWtlQmFja0NvbnRyb2xJbnRlcnBvbGFudChiKSk7cmV0dXJuIHRoaXN9LGdldE1peGVyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21peGVyfSxnZXRDbGlwOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NsaXB9LGdldFJvb3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbG9jYWxSb290fHx0aGlzLl9taXhlci5fcm9vdH0sX3VwZGF0ZTpmdW5jdGlvbihiLGUsaCxuKXtpZih0aGlzLmVuYWJsZWQpe3ZhciB1PXRoaXMuX3N0YXJ0VGltZTtpZihudWxsIT09dSl7ZT0oYi11KSpoO2lmKDA+ZXx8MD09PWgpcmV0dXJuO3RoaXMuX3N0YXJ0VGltZT1udWxsO2UqPWh9ZSo9dGhpcy5fdXBkYXRlVGltZVNjYWxlKGIpO2g9dGhpcy5fdXBkYXRlVGltZShlKTtiPXRoaXMuX3VwZGF0ZVdlaWdodChiKTtpZigwPGIpe2U9dGhpcy5faW50ZXJwb2xhbnRzOwp1PXRoaXMuX3Byb3BlcnR5QmluZGluZ3M7Zm9yKHZhciB3PTAsej1lLmxlbmd0aDt3IT09ejsrK3cpZVt3XS5ldmFsdWF0ZShoKSx1W3ddLmFjY3VtdWxhdGUobixiKX19ZWxzZSB0aGlzLl91cGRhdGVXZWlnaHQoYil9LF91cGRhdGVXZWlnaHQ6ZnVuY3Rpb24oYil7dmFyIGU9MDtpZih0aGlzLmVuYWJsZWQpe2U9dGhpcy53ZWlnaHQ7dmFyIGg9dGhpcy5fd2VpZ2h0SW50ZXJwb2xhbnQ7aWYobnVsbCE9PWgpe3ZhciBuPWguZXZhbHVhdGUoYilbMF07ZSo9bjtiPmgucGFyYW1ldGVyUG9zaXRpb25zWzFdJiYodGhpcy5zdG9wRmFkaW5nKCksMD09PW4mJih0aGlzLmVuYWJsZWQ9ITEpKX19cmV0dXJuIHRoaXMuX2VmZmVjdGl2ZVdlaWdodD1lfSxfdXBkYXRlVGltZVNjYWxlOmZ1bmN0aW9uKGIpe3ZhciBlPTA7aWYoIXRoaXMucGF1c2VkKXtlPXRoaXMudGltZVNjYWxlO3ZhciBoPXRoaXMuX3RpbWVTY2FsZUludGVycG9sYW50O2lmKG51bGwhPT1oKXt2YXIgbj1oLmV2YWx1YXRlKGIpWzBdOwplKj1uO2I+aC5wYXJhbWV0ZXJQb3NpdGlvbnNbMV0mJih0aGlzLnN0b3BXYXJwaW5nKCksMD09PWU/dGhpcy5wYXVzZWQ9ITA6dGhpcy50aW1lU2NhbGU9ZSl9fXJldHVybiB0aGlzLl9lZmZlY3RpdmVUaW1lU2NhbGU9ZX0sX3VwZGF0ZVRpbWU6ZnVuY3Rpb24oYil7dmFyIGU9dGhpcy50aW1lK2IsaD10aGlzLl9jbGlwLmR1cmF0aW9uLG49dGhpcy5sb29wLHU9dGhpcy5fbG9vcENvdW50LHc9MjIwMj09PW47aWYoMD09PWIpcmV0dXJuLTE9PT11P2U6dyYmMT09PSh1JjEpP2gtZTplO2lmKDIyMDA9PT1uKWE6e2lmKC0xPT09dSYmKHRoaXMuX2xvb3BDb3VudD0wLHRoaXMuX3NldEVuZGluZ3MoITAsITAsITEpKSxlPj1oKWU9aDtlbHNlIGlmKDA+ZSllPTA7ZWxzZSBicmVhayBhO3RoaXMuY2xhbXBXaGVuRmluaXNoZWQ/dGhpcy5wYXVzZWQ9ITA6dGhpcy5lbmFibGVkPSExO3RoaXMuX21peGVyLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImZpbmlzaGVkIixhY3Rpb246dGhpcyxkaXJlY3Rpb246MD4KYj8tMToxfSl9ZWxzZXstMT09PXUmJigwPD1iPyh1PTAsdGhpcy5fc2V0RW5kaW5ncyghMCwwPT09dGhpcy5yZXBldGl0aW9ucyx3KSk6dGhpcy5fc2V0RW5kaW5ncygwPT09dGhpcy5yZXBldGl0aW9ucywhMCx3KSk7aWYoZT49aHx8MD5lKXtuPU1hdGguZmxvb3IoZS9oKTtlLT1oKm47dSs9TWF0aC5hYnMobik7dmFyIHo9dGhpcy5yZXBldGl0aW9ucy11OzA+PXo/KHRoaXMuY2xhbXBXaGVuRmluaXNoZWQ/dGhpcy5wYXVzZWQ9ITA6dGhpcy5lbmFibGVkPSExLGU9MDxiP2g6MCx0aGlzLl9taXhlci5kaXNwYXRjaEV2ZW50KHt0eXBlOiJmaW5pc2hlZCIsYWN0aW9uOnRoaXMsZGlyZWN0aW9uOjA8Yj8xOi0xfSkpOigxPT09ej8oYj0wPmIsdGhpcy5fc2V0RW5kaW5ncyhiLCFiLHcpKTp0aGlzLl9zZXRFbmRpbmdzKCExLCExLHcpLHRoaXMuX2xvb3BDb3VudD11LHRoaXMuX21peGVyLmRpc3BhdGNoRXZlbnQoe3R5cGU6Imxvb3AiLGFjdGlvbjp0aGlzLGxvb3BEZWx0YTpufSkpfWlmKHcmJgoxPT09KHUmMSkpcmV0dXJuIHRoaXMudGltZT1lLGgtZX1yZXR1cm4gdGhpcy50aW1lPWV9LF9zZXRFbmRpbmdzOmZ1bmN0aW9uKGIsZSxoKXt2YXIgbj10aGlzLl9pbnRlcnBvbGFudFNldHRpbmdzO2g/KG4uZW5kaW5nU3RhcnQ9MjQwMSxuLmVuZGluZ0VuZD0yNDAxKToobi5lbmRpbmdTdGFydD1iP3RoaXMuemVyb1Nsb3BlQXRTdGFydD8yNDAxOjI0MDA6MjQwMixuLmVuZGluZ0VuZD1lP3RoaXMuemVyb1Nsb3BlQXRFbmQ/MjQwMToyNDAwOjI0MDIpfSxfc2NoZWR1bGVGYWRpbmc6ZnVuY3Rpb24oYixlLGgpe3ZhciBuPXRoaXMuX21peGVyLHU9bi50aW1lLHc9dGhpcy5fd2VpZ2h0SW50ZXJwb2xhbnQ7bnVsbD09PXcmJih0aGlzLl93ZWlnaHRJbnRlcnBvbGFudD13PW4uX2xlbmRDb250cm9sSW50ZXJwb2xhbnQoKSk7bj13LnBhcmFtZXRlclBvc2l0aW9uczt3PXcuc2FtcGxlVmFsdWVzO25bMF09dTt3WzBdPWU7blsxXT11K2I7d1sxXT1oO3JldHVybiB0aGlzfX0pO1ZpLnByb3RvdHlwZT0KT2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKGMucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6VmksX2JpbmRBY3Rpb246ZnVuY3Rpb24oYixlKXt2YXIgaD1iLl9sb2NhbFJvb3R8fHRoaXMuX3Jvb3Qsbj1iLl9jbGlwLnRyYWNrcyx1PW4ubGVuZ3RoLHc9Yi5fcHJvcGVydHlCaW5kaW5ncztiPWIuX2ludGVycG9sYW50czt2YXIgej1oLnV1aWQsRT10aGlzLl9iaW5kaW5nc0J5Um9vdEFuZE5hbWUsSD1FW3pdO3ZvaWQgMD09PUgmJihIPXt9LEVbel09SCk7Zm9yKEU9MDtFIT09dTsrK0Upe3ZhciBJPW5bRV0sTz1JLm5hbWUsUT1IW09dO2lmKHZvaWQgMD09PVEpe1E9d1tFXTtpZih2b2lkIDAhPT1RKXtudWxsPT09US5fY2FjaGVJbmRleCYmKCsrUS5yZWZlcmVuY2VDb3VudCx0aGlzLl9hZGRJbmFjdGl2ZUJpbmRpbmcoUSx6LE8pKTtjb250aW51ZX1RPW5ldyBVaShzYy5jcmVhdGUoaCxPLGUmJmUuX3Byb3BlcnR5QmluZGluZ3NbRV0uYmluZGluZy5wYXJzZWRQYXRoKSxJLlZhbHVlVHlwZU5hbWUsCkkuZ2V0VmFsdWVTaXplKCkpOysrUS5yZWZlcmVuY2VDb3VudDt0aGlzLl9hZGRJbmFjdGl2ZUJpbmRpbmcoUSx6LE8pfXdbRV09UTtiW0VdLnJlc3VsdEJ1ZmZlcj1RLmJ1ZmZlcn19LF9hY3RpdmF0ZUFjdGlvbjpmdW5jdGlvbihiKXtpZighdGhpcy5faXNBY3RpdmVBY3Rpb24oYikpe2lmKG51bGw9PT1iLl9jYWNoZUluZGV4KXt2YXIgZT0oYi5fbG9jYWxSb290fHx0aGlzLl9yb290KS51dWlkLGg9Yi5fY2xpcC51dWlkLG49dGhpcy5fYWN0aW9uc0J5Q2xpcFtoXTt0aGlzLl9iaW5kQWN0aW9uKGIsbiYmbi5rbm93bkFjdGlvbnNbMF0pO3RoaXMuX2FkZEluYWN0aXZlQWN0aW9uKGIsaCxlKX1lPWIuX3Byb3BlcnR5QmluZGluZ3M7aD0wO2ZvcihuPWUubGVuZ3RoO2ghPT1uOysraCl7dmFyIHU9ZVtoXTswPT09dS51c2VDb3VudCsrJiYodGhpcy5fbGVuZEJpbmRpbmcodSksdS5zYXZlT3JpZ2luYWxTdGF0ZSgpKX10aGlzLl9sZW5kQWN0aW9uKGIpfX0sX2RlYWN0aXZhdGVBY3Rpb246ZnVuY3Rpb24oYil7aWYodGhpcy5faXNBY3RpdmVBY3Rpb24oYikpe2Zvcih2YXIgZT0KYi5fcHJvcGVydHlCaW5kaW5ncyxoPTAsbj1lLmxlbmd0aDtoIT09bjsrK2gpe3ZhciB1PWVbaF07MD09PS0tdS51c2VDb3VudCYmKHUucmVzdG9yZU9yaWdpbmFsU3RhdGUoKSx0aGlzLl90YWtlQmFja0JpbmRpbmcodSkpfXRoaXMuX3Rha2VCYWNrQWN0aW9uKGIpfX0sX2luaXRNZW1vcnlNYW5hZ2VyOmZ1bmN0aW9uKCl7dGhpcy5fYWN0aW9ucz1bXTt0aGlzLl9uQWN0aXZlQWN0aW9ucz0wO3RoaXMuX2FjdGlvbnNCeUNsaXA9e307dGhpcy5fYmluZGluZ3M9W107dGhpcy5fbkFjdGl2ZUJpbmRpbmdzPTA7dGhpcy5fYmluZGluZ3NCeVJvb3RBbmROYW1lPXt9O3RoaXMuX2NvbnRyb2xJbnRlcnBvbGFudHM9W107dGhpcy5fbkFjdGl2ZUNvbnRyb2xJbnRlcnBvbGFudHM9MDt2YXIgYj10aGlzO3RoaXMuc3RhdHM9e2FjdGlvbnM6e2dldCB0b3RhbCgpe3JldHVybiBiLl9hY3Rpb25zLmxlbmd0aH0sZ2V0IGluVXNlKCl7cmV0dXJuIGIuX25BY3RpdmVBY3Rpb25zfX0sYmluZGluZ3M6e2dldCB0b3RhbCgpe3JldHVybiBiLl9iaW5kaW5ncy5sZW5ndGh9LApnZXQgaW5Vc2UoKXtyZXR1cm4gYi5fbkFjdGl2ZUJpbmRpbmdzfX0sY29udHJvbEludGVycG9sYW50czp7Z2V0IHRvdGFsKCl7cmV0dXJuIGIuX2NvbnRyb2xJbnRlcnBvbGFudHMubGVuZ3RofSxnZXQgaW5Vc2UoKXtyZXR1cm4gYi5fbkFjdGl2ZUNvbnRyb2xJbnRlcnBvbGFudHN9fX19LF9pc0FjdGl2ZUFjdGlvbjpmdW5jdGlvbihiKXtiPWIuX2NhY2hlSW5kZXg7cmV0dXJuIG51bGwhPT1iJiZiPHRoaXMuX25BY3RpdmVBY3Rpb25zfSxfYWRkSW5hY3RpdmVBY3Rpb246ZnVuY3Rpb24oYixlLGgpe3ZhciBuPXRoaXMuX2FjdGlvbnMsdT10aGlzLl9hY3Rpb25zQnlDbGlwLHc9dVtlXTt2b2lkIDA9PT13Pyh3PXtrbm93bkFjdGlvbnM6W2JdLGFjdGlvbkJ5Um9vdDp7fX0sYi5fYnlDbGlwQ2FjaGVJbmRleD0wLHVbZV09dyk6KGU9dy5rbm93bkFjdGlvbnMsYi5fYnlDbGlwQ2FjaGVJbmRleD1lLmxlbmd0aCxlLnB1c2goYikpO2IuX2NhY2hlSW5kZXg9bi5sZW5ndGg7bi5wdXNoKGIpOwp3LmFjdGlvbkJ5Um9vdFtoXT1ifSxfcmVtb3ZlSW5hY3RpdmVBY3Rpb246ZnVuY3Rpb24oYil7dmFyIGU9dGhpcy5fYWN0aW9ucyxoPWVbZS5sZW5ndGgtMV0sbj1iLl9jYWNoZUluZGV4O2guX2NhY2hlSW5kZXg9bjtlW25dPWg7ZS5wb3AoKTtiLl9jYWNoZUluZGV4PW51bGw7ZT1iLl9jbGlwLnV1aWQ7aD10aGlzLl9hY3Rpb25zQnlDbGlwO249aFtlXTt2YXIgdT1uLmtub3duQWN0aW9ucyx3PXVbdS5sZW5ndGgtMV0sej1iLl9ieUNsaXBDYWNoZUluZGV4O3cuX2J5Q2xpcENhY2hlSW5kZXg9ejt1W3pdPXc7dS5wb3AoKTtiLl9ieUNsaXBDYWNoZUluZGV4PW51bGw7ZGVsZXRlIG4uYWN0aW9uQnlSb290WyhiLl9sb2NhbFJvb3R8fHRoaXMuX3Jvb3QpLnV1aWRdOzA9PT11Lmxlbmd0aCYmZGVsZXRlIGhbZV07dGhpcy5fcmVtb3ZlSW5hY3RpdmVCaW5kaW5nc0ZvckFjdGlvbihiKX0sX3JlbW92ZUluYWN0aXZlQmluZGluZ3NGb3JBY3Rpb246ZnVuY3Rpb24oYil7Yj1iLl9wcm9wZXJ0eUJpbmRpbmdzOwpmb3IodmFyIGU9MCxoPWIubGVuZ3RoO2UhPT1oOysrZSl7dmFyIG49YltlXTswPT09LS1uLnJlZmVyZW5jZUNvdW50JiZ0aGlzLl9yZW1vdmVJbmFjdGl2ZUJpbmRpbmcobil9fSxfbGVuZEFjdGlvbjpmdW5jdGlvbihiKXt2YXIgZT10aGlzLl9hY3Rpb25zLGg9Yi5fY2FjaGVJbmRleCxuPXRoaXMuX25BY3RpdmVBY3Rpb25zKyssdT1lW25dO2IuX2NhY2hlSW5kZXg9bjtlW25dPWI7dS5fY2FjaGVJbmRleD1oO2VbaF09dX0sX3Rha2VCYWNrQWN0aW9uOmZ1bmN0aW9uKGIpe3ZhciBlPXRoaXMuX2FjdGlvbnMsaD1iLl9jYWNoZUluZGV4LG49LS10aGlzLl9uQWN0aXZlQWN0aW9ucyx1PWVbbl07Yi5fY2FjaGVJbmRleD1uO2Vbbl09Yjt1Ll9jYWNoZUluZGV4PWg7ZVtoXT11fSxfYWRkSW5hY3RpdmVCaW5kaW5nOmZ1bmN0aW9uKGIsZSxoKXt2YXIgbj10aGlzLl9iaW5kaW5nc0J5Um9vdEFuZE5hbWUsdT1uW2VdLHc9dGhpcy5fYmluZGluZ3M7dm9pZCAwPT09dSYmKHU9e30sbltlXT0KdSk7dVtoXT1iO2IuX2NhY2hlSW5kZXg9dy5sZW5ndGg7dy5wdXNoKGIpfSxfcmVtb3ZlSW5hY3RpdmVCaW5kaW5nOmZ1bmN0aW9uKGIpe3ZhciBlPXRoaXMuX2JpbmRpbmdzLGg9Yi5iaW5kaW5nLG49aC5yb290Tm9kZS51dWlkO2g9aC5wYXRoO3ZhciB1PXRoaXMuX2JpbmRpbmdzQnlSb290QW5kTmFtZSx3PXVbbl0sej1lW2UubGVuZ3RoLTFdO2I9Yi5fY2FjaGVJbmRleDt6Ll9jYWNoZUluZGV4PWI7ZVtiXT16O2UucG9wKCk7ZGVsZXRlIHdbaF07YTp7Zm9yKHZhciBFIGluIHcpYnJlYWsgYTtkZWxldGUgdVtuXX19LF9sZW5kQmluZGluZzpmdW5jdGlvbihiKXt2YXIgZT10aGlzLl9iaW5kaW5ncyxoPWIuX2NhY2hlSW5kZXgsbj10aGlzLl9uQWN0aXZlQmluZGluZ3MrKyx1PWVbbl07Yi5fY2FjaGVJbmRleD1uO2Vbbl09Yjt1Ll9jYWNoZUluZGV4PWg7ZVtoXT11fSxfdGFrZUJhY2tCaW5kaW5nOmZ1bmN0aW9uKGIpe3ZhciBlPXRoaXMuX2JpbmRpbmdzLGg9Yi5fY2FjaGVJbmRleCwKbj0tLXRoaXMuX25BY3RpdmVCaW5kaW5ncyx1PWVbbl07Yi5fY2FjaGVJbmRleD1uO2Vbbl09Yjt1Ll9jYWNoZUluZGV4PWg7ZVtoXT11fSxfbGVuZENvbnRyb2xJbnRlcnBvbGFudDpmdW5jdGlvbigpe3ZhciBiPXRoaXMuX2NvbnRyb2xJbnRlcnBvbGFudHMsZT10aGlzLl9uQWN0aXZlQ29udHJvbEludGVycG9sYW50cysrLGg9YltlXTt2b2lkIDA9PT1oJiYoaD1uZXcgcWcobmV3IEZsb2F0MzJBcnJheSgyKSxuZXcgRmxvYXQzMkFycmF5KDIpLDEsdGhpcy5fY29udHJvbEludGVycG9sYW50c1Jlc3VsdEJ1ZmZlciksaC5fX2NhY2hlSW5kZXg9ZSxiW2VdPWgpO3JldHVybiBofSxfdGFrZUJhY2tDb250cm9sSW50ZXJwb2xhbnQ6ZnVuY3Rpb24oYil7dmFyIGU9dGhpcy5fY29udHJvbEludGVycG9sYW50cyxoPWIuX19jYWNoZUluZGV4LG49LS10aGlzLl9uQWN0aXZlQ29udHJvbEludGVycG9sYW50cyx1PWVbbl07Yi5fX2NhY2hlSW5kZXg9bjtlW25dPWI7dS5fX2NhY2hlSW5kZXg9Cmg7ZVtoXT11fSxfY29udHJvbEludGVycG9sYW50c1Jlc3VsdEJ1ZmZlcjpuZXcgRmxvYXQzMkFycmF5KDEpLGNsaXBBY3Rpb246ZnVuY3Rpb24oYixlKXt2YXIgaD1lfHx0aGlzLl9yb290LG49aC51dWlkO2g9InN0cmluZyI9PT10eXBlb2YgYj9JYy5maW5kQnlOYW1lKGgsYik6YjtiPW51bGwhPT1oP2gudXVpZDpiO3ZhciB1PXRoaXMuX2FjdGlvbnNCeUNsaXBbYl0sdz1udWxsO2lmKHZvaWQgMCE9PXUpe3c9dS5hY3Rpb25CeVJvb3Rbbl07aWYodm9pZCAwIT09dylyZXR1cm4gdzt3PXUua25vd25BY3Rpb25zWzBdO251bGw9PT1oJiYoaD13Ll9jbGlwKX1pZihudWxsPT09aClyZXR1cm4gbnVsbDtlPW5ldyBMbCh0aGlzLGgsZSk7dGhpcy5fYmluZEFjdGlvbihlLHcpO3RoaXMuX2FkZEluYWN0aXZlQWN0aW9uKGUsYixuKTtyZXR1cm4gZX0sZXhpc3RpbmdBY3Rpb246ZnVuY3Rpb24oYixlKXt2YXIgaD1lfHx0aGlzLl9yb290O2U9aC51dWlkO2g9InN0cmluZyI9PT10eXBlb2YgYj8KSWMuZmluZEJ5TmFtZShoLGIpOmI7Yj10aGlzLl9hY3Rpb25zQnlDbGlwW2g/aC51dWlkOmJdO3JldHVybiB2b2lkIDAhPT1iP2IuYWN0aW9uQnlSb290W2VdfHxudWxsOm51bGx9LHN0b3BBbGxBY3Rpb246ZnVuY3Rpb24oKXtmb3IodmFyIGI9dGhpcy5fYWN0aW9ucyxlPXRoaXMuX25BY3RpdmVBY3Rpb25zLGg9dGhpcy5fYmluZGluZ3Msbj10aGlzLl9uQWN0aXZlQmluZGluZ3MsdT10aGlzLl9uQWN0aXZlQmluZGluZ3M9dGhpcy5fbkFjdGl2ZUFjdGlvbnM9MDt1IT09ZTsrK3UpYlt1XS5yZXNldCgpO2Zvcih1PTA7dSE9PW47Kyt1KWhbdV0udXNlQ291bnQ9MDtyZXR1cm4gdGhpc30sdXBkYXRlOmZ1bmN0aW9uKGIpe2IqPXRoaXMudGltZVNjYWxlO2Zvcih2YXIgZT10aGlzLl9hY3Rpb25zLGg9dGhpcy5fbkFjdGl2ZUFjdGlvbnMsbj10aGlzLnRpbWUrPWIsdT1NYXRoLnNpZ24oYiksdz10aGlzLl9hY2N1SW5kZXhePTEsej0wO3ohPT1oOysreillW3pdLl91cGRhdGUobixiLHUsCncpO2I9dGhpcy5fYmluZGluZ3M7ZT10aGlzLl9uQWN0aXZlQmluZGluZ3M7Zm9yKHo9MDt6IT09ZTsrK3opYlt6XS5hcHBseSh3KTtyZXR1cm4gdGhpc30sZ2V0Um9vdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yb290fSx1bmNhY2hlQ2xpcDpmdW5jdGlvbihiKXt2YXIgZT10aGlzLl9hY3Rpb25zO2I9Yi51dWlkO3ZhciBoPXRoaXMuX2FjdGlvbnNCeUNsaXAsbj1oW2JdO2lmKHZvaWQgMCE9PW4pe249bi5rbm93bkFjdGlvbnM7Zm9yKHZhciB1PTAsdz1uLmxlbmd0aDt1IT09dzsrK3Upe3ZhciB6PW5bdV07dGhpcy5fZGVhY3RpdmF0ZUFjdGlvbih6KTt2YXIgRT16Ll9jYWNoZUluZGV4LEg9ZVtlLmxlbmd0aC0xXTt6Ll9jYWNoZUluZGV4PW51bGw7ei5fYnlDbGlwQ2FjaGVJbmRleD1udWxsO0guX2NhY2hlSW5kZXg9RTtlW0VdPUg7ZS5wb3AoKTt0aGlzLl9yZW1vdmVJbmFjdGl2ZUJpbmRpbmdzRm9yQWN0aW9uKHopfWRlbGV0ZSBoW2JdfX0sdW5jYWNoZVJvb3Q6ZnVuY3Rpb24oYil7Yj0KYi51dWlkO3ZhciBlPXRoaXMuX2FjdGlvbnNCeUNsaXA7Zm9yKG4gaW4gZSl7dmFyIGg9ZVtuXS5hY3Rpb25CeVJvb3RbYl07dm9pZCAwIT09aCYmKHRoaXMuX2RlYWN0aXZhdGVBY3Rpb24oaCksdGhpcy5fcmVtb3ZlSW5hY3RpdmVBY3Rpb24oaCkpfXZhciBuPXRoaXMuX2JpbmRpbmdzQnlSb290QW5kTmFtZVtiXTtpZih2b2lkIDAhPT1uKWZvcih2YXIgdSBpbiBuKWI9blt1XSxiLnJlc3RvcmVPcmlnaW5hbFN0YXRlKCksdGhpcy5fcmVtb3ZlSW5hY3RpdmVCaW5kaW5nKGIpfSx1bmNhY2hlQWN0aW9uOmZ1bmN0aW9uKGIsZSl7Yj10aGlzLmV4aXN0aW5nQWN0aW9uKGIsZSk7bnVsbCE9PWImJih0aGlzLl9kZWFjdGl2YXRlQWN0aW9uKGIpLHRoaXMuX3JlbW92ZUluYWN0aXZlQWN0aW9uKGIpKX19KTtEaC5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IERoKHZvaWQgMD09PXRoaXMudmFsdWUuY2xvbmU/dGhpcy52YWx1ZTp0aGlzLnZhbHVlLmNsb25lKCkpfTtXaS5wcm90b3R5cGU9Ck9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZSh4YS5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpXaSxpc0luc3RhbmNlZEJ1ZmZlckdlb21ldHJ5OiEwLGNvcHk6ZnVuY3Rpb24oYil7eGEucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLGIpO3RoaXMubWF4SW5zdGFuY2VkQ291bnQ9Yi5tYXhJbnN0YW5jZWRDb3VudDtyZXR1cm4gdGhpc30sY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9fSk7WGkucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShoZS5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpYaSxpc0luc3RhbmNlZEludGVybGVhdmVkQnVmZmVyOiEwLGNvcHk6ZnVuY3Rpb24oYil7aGUucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLGIpO3RoaXMubWVzaFBlckF0dHJpYnV0ZT1iLm1lc2hQZXJBdHRyaWJ1dGU7cmV0dXJuIHRoaXN9fSk7WWkucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShULnByb3RvdHlwZSksCntjb25zdHJ1Y3RvcjpZaSxpc0luc3RhbmNlZEJ1ZmZlckF0dHJpYnV0ZTohMCxjb3B5OmZ1bmN0aW9uKGIpe1QucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLGIpO3RoaXMubWVzaFBlckF0dHJpYnV0ZT1iLm1lc2hQZXJBdHRyaWJ1dGU7cmV0dXJuIHRoaXN9fSk7T2JqZWN0LmFzc2lnbihNbC5wcm90b3R5cGUse2xpbmVQcmVjaXNpb246MSxzZXQ6ZnVuY3Rpb24oYixlKXt0aGlzLnJheS5zZXQoYixlKX0sc2V0RnJvbUNhbWVyYTpmdW5jdGlvbihiLGUpe2UmJmUuaXNQZXJzcGVjdGl2ZUNhbWVyYT8odGhpcy5yYXkub3JpZ2luLnNldEZyb21NYXRyaXhQb3NpdGlvbihlLm1hdHJpeFdvcmxkKSx0aGlzLnJheS5kaXJlY3Rpb24uc2V0KGIueCxiLnksLjUpLnVucHJvamVjdChlKS5zdWIodGhpcy5yYXkub3JpZ2luKS5ub3JtYWxpemUoKSk6ZSYmZS5pc09ydGhvZ3JhcGhpY0NhbWVyYT8odGhpcy5yYXkub3JpZ2luLnNldChiLngsYi55LChlLm5lYXIrZS5mYXIpLyhlLm5lYXItZS5mYXIpKS51bnByb2plY3QoZSksCnRoaXMucmF5LmRpcmVjdGlvbi5zZXQoMCwwLC0xKS50cmFuc2Zvcm1EaXJlY3Rpb24oZS5tYXRyaXhXb3JsZCkpOmNvbnNvbGUuZXJyb3IoIlRIUkVFLlJheWNhc3RlcjogVW5zdXBwb3J0ZWQgY2FtZXJhIHR5cGUuIil9LGludGVyc2VjdE9iamVjdDpmdW5jdGlvbihiLGUsaCl7aD1ofHxbXTtaaShiLHRoaXMsaCxlKTtoLnNvcnQoTmwpO3JldHVybiBofSxpbnRlcnNlY3RPYmplY3RzOmZ1bmN0aW9uKGIsZSxoKXtoPWh8fFtdO2lmKCExPT09QXJyYXkuaXNBcnJheShiKSlyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5SYXljYXN0ZXIuaW50ZXJzZWN0T2JqZWN0czogb2JqZWN0cyBpcyBub3QgYW4gQXJyYXkuIiksaDtmb3IodmFyIG49MCx1PWIubGVuZ3RoO248dTtuKyspWmkoYltuXSx0aGlzLGgsZSk7aC5zb3J0KE5sKTtyZXR1cm4gaH19KTtPYmplY3QuYXNzaWduKE9sLnByb3RvdHlwZSx7c2V0OmZ1bmN0aW9uKGIsZSxoKXt0aGlzLnJhZGl1cz1iO3RoaXMucGhpPWU7dGhpcy50aGV0YT0KaDtyZXR1cm4gdGhpc30sY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9LGNvcHk6ZnVuY3Rpb24oYil7dGhpcy5yYWRpdXM9Yi5yYWRpdXM7dGhpcy5waGk9Yi5waGk7dGhpcy50aGV0YT1iLnRoZXRhO3JldHVybiB0aGlzfSxtYWtlU2FmZTpmdW5jdGlvbigpe3RoaXMucGhpPU1hdGgubWF4KDFFLTYsTWF0aC5taW4oTWF0aC5QSS0xRS02LHRoaXMucGhpKSk7cmV0dXJuIHRoaXN9LHNldEZyb21WZWN0b3IzOmZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLnNldEZyb21DYXJ0ZXNpYW5Db29yZHMoYi54LGIueSxiLnopfSxzZXRGcm9tQ2FydGVzaWFuQ29vcmRzOmZ1bmN0aW9uKGIsZSxoKXt0aGlzLnJhZGl1cz1NYXRoLnNxcnQoYipiK2UqZStoKmgpOzA9PT10aGlzLnJhZGl1cz90aGlzLnBoaT10aGlzLnRoZXRhPTA6KHRoaXMudGhldGE9TWF0aC5hdGFuMihiLGgpLHRoaXMucGhpPU1hdGguYWNvcyhvYi5jbGFtcChlL3RoaXMucmFkaXVzLAotMSwxKSkpO3JldHVybiB0aGlzfX0pO09iamVjdC5hc3NpZ24oUGwucHJvdG90eXBlLHtzZXQ6ZnVuY3Rpb24oYixlLGgpe3RoaXMucmFkaXVzPWI7dGhpcy50aGV0YT1lO3RoaXMueT1oO3JldHVybiB0aGlzfSxjbG9uZTpmdW5jdGlvbigpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX0sY29weTpmdW5jdGlvbihiKXt0aGlzLnJhZGl1cz1iLnJhZGl1czt0aGlzLnRoZXRhPWIudGhldGE7dGhpcy55PWIueTtyZXR1cm4gdGhpc30sc2V0RnJvbVZlY3RvcjM6ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuc2V0RnJvbUNhcnRlc2lhbkNvb3JkcyhiLngsYi55LGIueil9LHNldEZyb21DYXJ0ZXNpYW5Db29yZHM6ZnVuY3Rpb24oYixlLGgpe3RoaXMucmFkaXVzPU1hdGguc3FydChiKmIraCpoKTt0aGlzLnRoZXRhPU1hdGguYXRhbjIoYixoKTt0aGlzLnk9ZTtyZXR1cm4gdGhpc319KTtPYmplY3QuYXNzaWduKCRpLnByb3RvdHlwZSx7c2V0OmZ1bmN0aW9uKGIsZSl7dGhpcy5taW4uY29weShiKTsKdGhpcy5tYXguY29weShlKTtyZXR1cm4gdGhpc30sc2V0RnJvbVBvaW50czpmdW5jdGlvbihiKXt0aGlzLm1ha2VFbXB0eSgpO2Zvcih2YXIgZT0wLGg9Yi5sZW5ndGg7ZTxoO2UrKyl0aGlzLmV4cGFuZEJ5UG9pbnQoYltlXSk7cmV0dXJuIHRoaXN9LHNldEZyb21DZW50ZXJBbmRTaXplOmZ1bmN0aW9uKCl7dmFyIGI9bmV3IGQ7cmV0dXJuIGZ1bmN0aW9uKGUsaCl7aD1iLmNvcHkoaCkubXVsdGlwbHlTY2FsYXIoLjUpO3RoaXMubWluLmNvcHkoZSkuc3ViKGgpO3RoaXMubWF4LmNvcHkoZSkuYWRkKGgpO3JldHVybiB0aGlzfX0oKSxjbG9uZTpmdW5jdGlvbigpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX0sY29weTpmdW5jdGlvbihiKXt0aGlzLm1pbi5jb3B5KGIubWluKTt0aGlzLm1heC5jb3B5KGIubWF4KTtyZXR1cm4gdGhpc30sbWFrZUVtcHR5OmZ1bmN0aW9uKCl7dGhpcy5taW4ueD10aGlzLm1pbi55PUluZmluaXR5O3RoaXMubWF4Lng9dGhpcy5tYXgueT0KLUluZmluaXR5O3JldHVybiB0aGlzfSxpc0VtcHR5OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWF4Lng8dGhpcy5taW4ueHx8dGhpcy5tYXgueTx0aGlzLm1pbi55fSxnZXRDZW50ZXI6ZnVuY3Rpb24oYil7dm9pZCAwPT09YiYmKGNvbnNvbGUud2FybigiVEhSRUUuQm94MjogLmdldENlbnRlcigpIHRhcmdldCBpcyBub3cgcmVxdWlyZWQiKSxiPW5ldyBkKTtyZXR1cm4gdGhpcy5pc0VtcHR5KCk/Yi5zZXQoMCwwKTpiLmFkZFZlY3RvcnModGhpcy5taW4sdGhpcy5tYXgpLm11bHRpcGx5U2NhbGFyKC41KX0sZ2V0U2l6ZTpmdW5jdGlvbihiKXt2b2lkIDA9PT1iJiYoY29uc29sZS53YXJuKCJUSFJFRS5Cb3gyOiAuZ2V0U2l6ZSgpIHRhcmdldCBpcyBub3cgcmVxdWlyZWQiKSxiPW5ldyBkKTtyZXR1cm4gdGhpcy5pc0VtcHR5KCk/Yi5zZXQoMCwwKTpiLnN1YlZlY3RvcnModGhpcy5tYXgsdGhpcy5taW4pfSxleHBhbmRCeVBvaW50OmZ1bmN0aW9uKGIpe3RoaXMubWluLm1pbihiKTt0aGlzLm1heC5tYXgoYik7CnJldHVybiB0aGlzfSxleHBhbmRCeVZlY3RvcjpmdW5jdGlvbihiKXt0aGlzLm1pbi5zdWIoYik7dGhpcy5tYXguYWRkKGIpO3JldHVybiB0aGlzfSxleHBhbmRCeVNjYWxhcjpmdW5jdGlvbihiKXt0aGlzLm1pbi5hZGRTY2FsYXIoLWIpO3RoaXMubWF4LmFkZFNjYWxhcihiKTtyZXR1cm4gdGhpc30sY29udGFpbnNQb2ludDpmdW5jdGlvbihiKXtyZXR1cm4gYi54PHRoaXMubWluLnh8fGIueD50aGlzLm1heC54fHxiLnk8dGhpcy5taW4ueXx8Yi55PnRoaXMubWF4Lnk/ITE6ITB9LGNvbnRhaW5zQm94OmZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLm1pbi54PD1iLm1pbi54JiZiLm1heC54PD10aGlzLm1heC54JiZ0aGlzLm1pbi55PD1iLm1pbi55JiZiLm1heC55PD10aGlzLm1heC55fSxnZXRQYXJhbWV0ZXI6ZnVuY3Rpb24oYixlKXt2b2lkIDA9PT1lJiYoY29uc29sZS53YXJuKCJUSFJFRS5Cb3gyOiAuZ2V0UGFyYW1ldGVyKCkgdGFyZ2V0IGlzIG5vdyByZXF1aXJlZCIpLGU9bmV3IGQpOwpyZXR1cm4gZS5zZXQoKGIueC10aGlzLm1pbi54KS8odGhpcy5tYXgueC10aGlzLm1pbi54KSwoYi55LXRoaXMubWluLnkpLyh0aGlzLm1heC55LXRoaXMubWluLnkpKX0saW50ZXJzZWN0c0JveDpmdW5jdGlvbihiKXtyZXR1cm4gYi5tYXgueDx0aGlzLm1pbi54fHxiLm1pbi54PnRoaXMubWF4Lnh8fGIubWF4Lnk8dGhpcy5taW4ueXx8Yi5taW4ueT50aGlzLm1heC55PyExOiEwfSxjbGFtcFBvaW50OmZ1bmN0aW9uKGIsZSl7dm9pZCAwPT09ZSYmKGNvbnNvbGUud2FybigiVEhSRUUuQm94MjogLmNsYW1wUG9pbnQoKSB0YXJnZXQgaXMgbm93IHJlcXVpcmVkIiksZT1uZXcgZCk7cmV0dXJuIGUuY29weShiKS5jbGFtcCh0aGlzLm1pbix0aGlzLm1heCl9LGRpc3RhbmNlVG9Qb2ludDpmdW5jdGlvbigpe3ZhciBiPW5ldyBkO3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gYi5jb3B5KGUpLmNsYW1wKHRoaXMubWluLHRoaXMubWF4KS5zdWIoZSkubGVuZ3RoKCl9fSgpLGludGVyc2VjdDpmdW5jdGlvbihiKXt0aGlzLm1pbi5tYXgoYi5taW4pOwp0aGlzLm1heC5taW4oYi5tYXgpO3JldHVybiB0aGlzfSx1bmlvbjpmdW5jdGlvbihiKXt0aGlzLm1pbi5taW4oYi5taW4pO3RoaXMubWF4Lm1heChiLm1heCk7cmV0dXJuIHRoaXN9LHRyYW5zbGF0ZTpmdW5jdGlvbihiKXt0aGlzLm1pbi5hZGQoYik7dGhpcy5tYXguYWRkKGIpO3JldHVybiB0aGlzfSxlcXVhbHM6ZnVuY3Rpb24oYil7cmV0dXJuIGIubWluLmVxdWFscyh0aGlzLm1pbikmJmIubWF4LmVxdWFscyh0aGlzLm1heCl9fSk7T2JqZWN0LmFzc2lnbihhai5wcm90b3R5cGUse3NldDpmdW5jdGlvbihiLGUpe3RoaXMuc3RhcnQuY29weShiKTt0aGlzLmVuZC5jb3B5KGUpO3JldHVybiB0aGlzfSxjbG9uZTpmdW5jdGlvbigpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX0sY29weTpmdW5jdGlvbihiKXt0aGlzLnN0YXJ0LmNvcHkoYi5zdGFydCk7dGhpcy5lbmQuY29weShiLmVuZCk7cmV0dXJuIHRoaXN9LGdldENlbnRlcjpmdW5jdGlvbihiKXt2b2lkIDA9PT0KYiYmKGNvbnNvbGUud2FybigiVEhSRUUuTGluZTM6IC5nZXRDZW50ZXIoKSB0YXJnZXQgaXMgbm93IHJlcXVpcmVkIiksYj1uZXcgZyk7cmV0dXJuIGIuYWRkVmVjdG9ycyh0aGlzLnN0YXJ0LHRoaXMuZW5kKS5tdWx0aXBseVNjYWxhciguNSl9LGRlbHRhOmZ1bmN0aW9uKGIpe3ZvaWQgMD09PWImJihjb25zb2xlLndhcm4oIlRIUkVFLkxpbmUzOiAuZGVsdGEoKSB0YXJnZXQgaXMgbm93IHJlcXVpcmVkIiksYj1uZXcgZyk7cmV0dXJuIGIuc3ViVmVjdG9ycyh0aGlzLmVuZCx0aGlzLnN0YXJ0KX0sZGlzdGFuY2VTcTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN0YXJ0LmRpc3RhbmNlVG9TcXVhcmVkKHRoaXMuZW5kKX0sZGlzdGFuY2U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdGFydC5kaXN0YW5jZVRvKHRoaXMuZW5kKX0sYXQ6ZnVuY3Rpb24oYixlKXt2b2lkIDA9PT1lJiYoY29uc29sZS53YXJuKCJUSFJFRS5MaW5lMzogLmF0KCkgdGFyZ2V0IGlzIG5vdyByZXF1aXJlZCIpLGU9Cm5ldyBnKTtyZXR1cm4gdGhpcy5kZWx0YShlKS5tdWx0aXBseVNjYWxhcihiKS5hZGQodGhpcy5zdGFydCl9LGNsb3Nlc3RQb2ludFRvUG9pbnRQYXJhbWV0ZXI6ZnVuY3Rpb24oKXt2YXIgYj1uZXcgZyxlPW5ldyBnO3JldHVybiBmdW5jdGlvbihoLG4pe2Iuc3ViVmVjdG9ycyhoLHRoaXMuc3RhcnQpO2Uuc3ViVmVjdG9ycyh0aGlzLmVuZCx0aGlzLnN0YXJ0KTtoPWUuZG90KGIpL2UuZG90KGUpO24mJihoPW9iLmNsYW1wKGgsMCwxKSk7cmV0dXJuIGh9fSgpLGNsb3Nlc3RQb2ludFRvUG9pbnQ6ZnVuY3Rpb24oYixlLGgpe2I9dGhpcy5jbG9zZXN0UG9pbnRUb1BvaW50UGFyYW1ldGVyKGIsZSk7dm9pZCAwPT09aCYmKGNvbnNvbGUud2FybigiVEhSRUUuTGluZTM6IC5jbG9zZXN0UG9pbnRUb1BvaW50KCkgdGFyZ2V0IGlzIG5vdyByZXF1aXJlZCIpLGg9bmV3IGcpO3JldHVybiB0aGlzLmRlbHRhKGgpLm11bHRpcGx5U2NhbGFyKGIpLmFkZCh0aGlzLnN0YXJ0KX0sYXBwbHlNYXRyaXg0OmZ1bmN0aW9uKGIpe3RoaXMuc3RhcnQuYXBwbHlNYXRyaXg0KGIpOwp0aGlzLmVuZC5hcHBseU1hdHJpeDQoYik7cmV0dXJuIHRoaXN9LGVxdWFsczpmdW5jdGlvbihiKXtyZXR1cm4gYi5zdGFydC5lcXVhbHModGhpcy5zdGFydCkmJmIuZW5kLmVxdWFscyh0aGlzLmVuZCl9fSk7eWcucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoUy5wcm90b3R5cGUpO3lnLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj15Zzt5Zy5wcm90b3R5cGUuaXNJbW1lZGlhdGVSZW5kZXJPYmplY3Q9ITA7emcucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoUGIucHJvdG90eXBlKTt6Zy5wcm90b3R5cGUuY29uc3RydWN0b3I9emc7emcucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbigpe3ZhciBiPW5ldyBnLGU9bmV3IGcsaD1uZXcgbDtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj1bImEiLCJiIiwiYyJdO3RoaXMub2JqZWN0LnVwZGF0ZU1hdHJpeFdvcmxkKCEwKTtoLmdldE5vcm1hbE1hdHJpeCh0aGlzLm9iamVjdC5tYXRyaXhXb3JsZCk7dmFyIHU9dGhpcy5vYmplY3QubWF0cml4V29ybGQsdz0KdGhpcy5nZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uLHo9dGhpcy5vYmplY3QuZ2VvbWV0cnk7aWYoeiYmei5pc0dlb21ldHJ5KWZvcih2YXIgRT16LnZlcnRpY2VzLEg9ei5mYWNlcyxJPXo9MCxPPUgubGVuZ3RoO0k8TztJKyspZm9yKHZhciBRPUhbSV0sUj0wLFU9US52ZXJ0ZXhOb3JtYWxzLmxlbmd0aDtSPFU7UisrKXt2YXIgVz1RLnZlcnRleE5vcm1hbHNbUl07Yi5jb3B5KEVbUVtuW1JdXV0pLmFwcGx5TWF0cml4NCh1KTtlLmNvcHkoVykuYXBwbHlNYXRyaXgzKGgpLm5vcm1hbGl6ZSgpLm11bHRpcGx5U2NhbGFyKHRoaXMuc2l6ZSkuYWRkKGIpO3cuc2V0WFlaKHosYi54LGIueSxiLnopO3orPTE7dy5zZXRYWVooeixlLngsZS55LGUueik7eis9MX1lbHNlIGlmKHomJnouaXNCdWZmZXJHZW9tZXRyeSlmb3Iobj16LmF0dHJpYnV0ZXMucG9zaXRpb24sRT16LmF0dHJpYnV0ZXMubm9ybWFsLFI9ej0wLFU9bi5jb3VudDtSPFU7UisrKWIuc2V0KG4uZ2V0WChSKSxuLmdldFkoUiksCm4uZ2V0WihSKSkuYXBwbHlNYXRyaXg0KHUpLGUuc2V0KEUuZ2V0WChSKSxFLmdldFkoUiksRS5nZXRaKFIpKSxlLmFwcGx5TWF0cml4MyhoKS5ub3JtYWxpemUoKS5tdWx0aXBseVNjYWxhcih0aGlzLnNpemUpLmFkZChiKSx3LnNldFhZWih6LGIueCxiLnksYi56KSx6Kz0xLHcuc2V0WFlaKHosZS54LGUueSxlLnopLHorPTE7dy5uZWVkc1VwZGF0ZT0hMH19KCk7a2YucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoUy5wcm90b3R5cGUpO2tmLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1rZjtrZi5wcm90b3R5cGUuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuY29uZS5nZW9tZXRyeS5kaXNwb3NlKCk7dGhpcy5jb25lLm1hdGVyaWFsLmRpc3Bvc2UoKX07a2YucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbigpe3ZhciBiPW5ldyBnO3JldHVybiBmdW5jdGlvbigpe3RoaXMubGlnaHQudXBkYXRlTWF0cml4V29ybGQoKTt2YXIgZT10aGlzLmxpZ2h0LmRpc3RhbmNlP3RoaXMubGlnaHQuZGlzdGFuY2U6CjFFMyxoPWUqTWF0aC50YW4odGhpcy5saWdodC5hbmdsZSk7dGhpcy5jb25lLnNjYWxlLnNldChoLGgsZSk7Yi5zZXRGcm9tTWF0cml4UG9zaXRpb24odGhpcy5saWdodC50YXJnZXQubWF0cml4V29ybGQpO3RoaXMuY29uZS5sb29rQXQoYik7dm9pZCAwIT09dGhpcy5jb2xvcj90aGlzLmNvbmUubWF0ZXJpYWwuY29sb3Iuc2V0KHRoaXMuY29sb3IpOnRoaXMuY29uZS5tYXRlcmlhbC5jb2xvci5jb3B5KHRoaXMubGlnaHQuY29sb3IpfX0oKTtsZi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShQYi5wcm90b3R5cGUpO2xmLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1sZjtsZi5wcm90b3R5cGUudXBkYXRlTWF0cml4V29ybGQ9ZnVuY3Rpb24oKXt2YXIgYj1uZXcgZyxlPW5ldyBDLGg9bmV3IEM7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciB1PXRoaXMuYm9uZXMsdz10aGlzLmdlb21ldHJ5LHo9dy5nZXRBdHRyaWJ1dGUoInBvc2l0aW9uIik7aC5nZXRJbnZlcnNlKHRoaXMucm9vdC5tYXRyaXhXb3JsZCk7CmZvcih2YXIgRT0wLEg9MDtFPHUubGVuZ3RoO0UrKyl7dmFyIEk9dVtFXTtJLnBhcmVudCYmSS5wYXJlbnQuaXNCb25lJiYoZS5tdWx0aXBseU1hdHJpY2VzKGgsSS5tYXRyaXhXb3JsZCksYi5zZXRGcm9tTWF0cml4UG9zaXRpb24oZSksei5zZXRYWVooSCxiLngsYi55LGIueiksZS5tdWx0aXBseU1hdHJpY2VzKGgsSS5wYXJlbnQubWF0cml4V29ybGQpLGIuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKGUpLHouc2V0WFlaKEgrMSxiLngsYi55LGIueiksSCs9Mil9dy5nZXRBdHRyaWJ1dGUoInBvc2l0aW9uIikubmVlZHNVcGRhdGU9ITA7Uy5wcm90b3R5cGUudXBkYXRlTWF0cml4V29ybGQuY2FsbCh0aGlzLG4pfX0oKTttZi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0Yi5wcm90b3R5cGUpO21mLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1tZjttZi5wcm90b3R5cGUuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuZ2VvbWV0cnkuZGlzcG9zZSgpO3RoaXMubWF0ZXJpYWwuZGlzcG9zZSgpfTttZi5wcm90b3R5cGUudXBkYXRlPQpmdW5jdGlvbigpe3ZvaWQgMCE9PXRoaXMuY29sb3I/dGhpcy5tYXRlcmlhbC5jb2xvci5zZXQodGhpcy5jb2xvcik6dGhpcy5tYXRlcmlhbC5jb2xvci5jb3B5KHRoaXMubGlnaHQuY29sb3IpfTtuZi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShsYy5wcm90b3R5cGUpO25mLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1uZjtuZi5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKCl7dGhpcy5zY2FsZS5zZXQoLjUqdGhpcy5saWdodC53aWR0aCwuNSp0aGlzLmxpZ2h0LmhlaWdodCwxKTtpZih2b2lkIDAhPT10aGlzLmNvbG9yKXRoaXMubWF0ZXJpYWwuY29sb3Iuc2V0KHRoaXMuY29sb3IpLHRoaXMuY2hpbGRyZW5bMF0ubWF0ZXJpYWwuY29sb3Iuc2V0KHRoaXMuY29sb3IpO2Vsc2V7dGhpcy5tYXRlcmlhbC5jb2xvci5jb3B5KHRoaXMubGlnaHQuY29sb3IpLm11bHRpcGx5U2NhbGFyKHRoaXMubGlnaHQuaW50ZW5zaXR5KTt2YXIgYj10aGlzLm1hdGVyaWFsLmNvbG9yLGU9TWF0aC5tYXgoYi5yLApiLmcsYi5iKTsxPGUmJmIubXVsdGlwbHlTY2FsYXIoMS9lKTt0aGlzLmNoaWxkcmVuWzBdLm1hdGVyaWFsLmNvbG9yLmNvcHkodGhpcy5tYXRlcmlhbC5jb2xvcil9fTtuZi5wcm90b3R5cGUuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuZ2VvbWV0cnkuZGlzcG9zZSgpO3RoaXMubWF0ZXJpYWwuZGlzcG9zZSgpO3RoaXMuY2hpbGRyZW5bMF0uZ2VvbWV0cnkuZGlzcG9zZSgpO3RoaXMuY2hpbGRyZW5bMF0ubWF0ZXJpYWwuZGlzcG9zZSgpfTtvZi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShTLnByb3RvdHlwZSk7b2YucHJvdG90eXBlLmNvbnN0cnVjdG9yPW9mO29mLnByb3RvdHlwZS5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5jaGlsZHJlblswXS5nZW9tZXRyeS5kaXNwb3NlKCk7dGhpcy5jaGlsZHJlblswXS5tYXRlcmlhbC5kaXNwb3NlKCl9O29mLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oKXt2YXIgYj1uZXcgZyxlPW5ldyBCLGg9bmV3IEI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49CnRoaXMuY2hpbGRyZW5bMF07aWYodm9pZCAwIT09dGhpcy5jb2xvcil0aGlzLm1hdGVyaWFsLmNvbG9yLnNldCh0aGlzLmNvbG9yKTtlbHNle3ZhciB1PW4uZ2VvbWV0cnkuZ2V0QXR0cmlidXRlKCJjb2xvciIpO2UuY29weSh0aGlzLmxpZ2h0LmNvbG9yKTtoLmNvcHkodGhpcy5saWdodC5ncm91bmRDb2xvcik7Zm9yKHZhciB3PTAsej11LmNvdW50O3c8ejt3Kyspe3ZhciBFPXc8ei8yP2U6aDt1LnNldFhZWih3LEUucixFLmcsRS5iKX11Lm5lZWRzVXBkYXRlPSEwfW4ubG9va0F0KGIuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHRoaXMubGlnaHQubWF0cml4V29ybGQpLm5lZ2F0ZSgpKX19KCk7cGYucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodGIucHJvdG90eXBlKTtwZi5wcm90b3R5cGUuY29uc3RydWN0b3I9cGY7cGYucHJvdG90eXBlLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLmdlb21ldHJ5LmRpc3Bvc2UoKTt0aGlzLm1hdGVyaWFsLmRpc3Bvc2UoKX07cGYucHJvdG90eXBlLm9uQmVmb3JlUmVuZGVyPQpmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucG9zaXRpb24uY29weSh0aGlzLmxpZ2h0UHJvYmUucG9zaXRpb24pO3RoaXMuc2NhbGUuc2V0KDEsMSwxKS5tdWx0aXBseVNjYWxhcih0aGlzLnNpemUpO3RoaXMubWF0ZXJpYWwudW5pZm9ybXMuaW50ZW5zaXR5LnZhbHVlPXRoaXMubGlnaHRQcm9iZS5pbnRlbnNpdHl9fSgpO0VoLnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoUGIucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6RWgsY29weTpmdW5jdGlvbihiKXtQYi5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsYik7dGhpcy5nZW9tZXRyeS5jb3B5KGIuZ2VvbWV0cnkpO3RoaXMubWF0ZXJpYWwuY29weShiLm1hdGVyaWFsKTtyZXR1cm4gdGhpc30sY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9fSk7RmgucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoUGIucHJvdG90eXBlKTtGaC5wcm90b3R5cGUuY29uc3RydWN0b3I9CkZoO3FmLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGxjLnByb3RvdHlwZSk7cWYucHJvdG90eXBlLmNvbnN0cnVjdG9yPXFmO3FmLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBiKFcsWixmYSxxYSl7ZmE9KFotVykvZmE7VS5zZXRYWVooSCwwLDAsMCk7SSsrO2ZvcihPPVc7TzxaO08rPWZhKVE9SCtJLFUuc2V0WFlaKFEsTWF0aC5zaW4oTykqaCwwLE1hdGguY29zKE8pKmgpLFUuc2V0WFlaKFErMSxNYXRoLnNpbihNYXRoLm1pbihPK2ZhLFopKSpoLDAsTWF0aC5jb3MoTWF0aC5taW4oTytmYSxaKSkqaCksVS5zZXRYWVooUSsyLDAsMCwwKSxJKz0zO1IuYWRkR3JvdXAoSCxJLHFhKTtIKz1JO0k9MH12YXIgZT10aGlzLmF1ZGlvLGg9dGhpcy5yYW5nZSxuPXRoaXMuZGl2aXNpb25zSW5uZXJBbmdsZSx1PXRoaXMuZGl2aXNpb25zT3V0ZXJBbmdsZSx3PW9iLmRlZ1RvUmFkKGUucGFubmVyLmNvbmVJbm5lckFuZ2xlKTtlPW9iLmRlZ1RvUmFkKGUucGFubmVyLmNvbmVPdXRlckFuZ2xlKTsKdmFyIHo9dy8yLEU9ZS8yLEg9MCxJPTAsTyxRLFI9dGhpcy5nZW9tZXRyeSxVPVIuYXR0cmlidXRlcy5wb3NpdGlvbjtSLmNsZWFyR3JvdXBzKCk7YigtRSwteix1LDApO2IoLXoseixuLDEpO2IoeixFLHUsMCk7VS5uZWVkc1VwZGF0ZT0hMDt3PT09ZSYmKHRoaXMubWF0ZXJpYWxbMF0udmlzaWJsZT0hMSl9O3FmLnByb3RvdHlwZS5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5nZW9tZXRyeS5kaXNwb3NlKCk7dGhpcy5tYXRlcmlhbFswXS5kaXNwb3NlKCk7dGhpcy5tYXRlcmlhbFsxXS5kaXNwb3NlKCl9O0FnLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKFBiLnByb3RvdHlwZSk7QWcucHJvdG90eXBlLmNvbnN0cnVjdG9yPUFnO0FnLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oKXt2YXIgYj1uZXcgZyxlPW5ldyBnLGg9bmV3IGw7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5vYmplY3QudXBkYXRlTWF0cml4V29ybGQoITApO2guZ2V0Tm9ybWFsTWF0cml4KHRoaXMub2JqZWN0Lm1hdHJpeFdvcmxkKTsKdmFyIG49dGhpcy5vYmplY3QubWF0cml4V29ybGQsdT10aGlzLmdlb21ldHJ5LmF0dHJpYnV0ZXMucG9zaXRpb24sdz10aGlzLm9iamVjdC5nZW9tZXRyeSx6PXcudmVydGljZXM7dz13LmZhY2VzO2Zvcih2YXIgRT0wLEg9MCxJPXcubGVuZ3RoO0g8STtIKyspe3ZhciBPPXdbSF0sUT1PLm5vcm1hbDtiLmNvcHkoeltPLmFdKS5hZGQoeltPLmJdKS5hZGQoeltPLmNdKS5kaXZpZGVTY2FsYXIoMykuYXBwbHlNYXRyaXg0KG4pO2UuY29weShRKS5hcHBseU1hdHJpeDMoaCkubm9ybWFsaXplKCkubXVsdGlwbHlTY2FsYXIodGhpcy5zaXplKS5hZGQoYik7dS5zZXRYWVooRSxiLngsYi55LGIueik7RSs9MTt1LnNldFhZWihFLGUueCxlLnksZS56KTtFKz0xfXUubmVlZHNVcGRhdGU9ITB9fSgpO3JmLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKFMucHJvdG90eXBlKTtyZi5wcm90b3R5cGUuY29uc3RydWN0b3I9cmY7cmYucHJvdG90eXBlLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLmxpZ2h0UGxhbmUuZ2VvbWV0cnkuZGlzcG9zZSgpOwp0aGlzLmxpZ2h0UGxhbmUubWF0ZXJpYWwuZGlzcG9zZSgpO3RoaXMudGFyZ2V0TGluZS5nZW9tZXRyeS5kaXNwb3NlKCk7dGhpcy50YXJnZXRMaW5lLm1hdGVyaWFsLmRpc3Bvc2UoKX07cmYucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbigpe3ZhciBiPW5ldyBnLGU9bmV3IGcsaD1uZXcgZztyZXR1cm4gZnVuY3Rpb24oKXtiLnNldEZyb21NYXRyaXhQb3NpdGlvbih0aGlzLmxpZ2h0Lm1hdHJpeFdvcmxkKTtlLnNldEZyb21NYXRyaXhQb3NpdGlvbih0aGlzLmxpZ2h0LnRhcmdldC5tYXRyaXhXb3JsZCk7aC5zdWJWZWN0b3JzKGUsYik7dGhpcy5saWdodFBsYW5lLmxvb2tBdChlKTt2b2lkIDAhPT10aGlzLmNvbG9yPyh0aGlzLmxpZ2h0UGxhbmUubWF0ZXJpYWwuY29sb3Iuc2V0KHRoaXMuY29sb3IpLHRoaXMudGFyZ2V0TGluZS5tYXRlcmlhbC5jb2xvci5zZXQodGhpcy5jb2xvcikpOih0aGlzLmxpZ2h0UGxhbmUubWF0ZXJpYWwuY29sb3IuY29weSh0aGlzLmxpZ2h0LmNvbG9yKSwKdGhpcy50YXJnZXRMaW5lLm1hdGVyaWFsLmNvbG9yLmNvcHkodGhpcy5saWdodC5jb2xvcikpO3RoaXMudGFyZ2V0TGluZS5sb29rQXQoZSk7dGhpcy50YXJnZXRMaW5lLnNjYWxlLno9aC5sZW5ndGgoKX19KCk7QmcucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoUGIucHJvdG90eXBlKTtCZy5wcm90b3R5cGUuY29uc3RydWN0b3I9Qmc7QmcucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGIodyx6LEUsSCl7bi5zZXQoeixFLEgpLnVucHJvamVjdCh1KTt3PWhbd107aWYodm9pZCAwIT09dylmb3Ioej1lLmdldEF0dHJpYnV0ZSgicG9zaXRpb24iKSxFPTAsSD13Lmxlbmd0aDtFPEg7RSsrKXouc2V0WFlaKHdbRV0sbi54LG4ueSxuLnopfXZhciBlLGgsbj1uZXcgZyx1PW5ldyBqZDtyZXR1cm4gZnVuY3Rpb24oKXtlPXRoaXMuZ2VvbWV0cnk7aD10aGlzLnBvaW50TWFwO3UucHJvamVjdGlvbk1hdHJpeEludmVyc2UuY29weSh0aGlzLmNhbWVyYS5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZSk7CmIoImMiLDAsMCwtMSk7YigidCIsMCwwLDEpO2IoIm4xIiwtMSwtMSwtMSk7YigibjIiLDEsLTEsLTEpO2IoIm4zIiwtMSwxLC0xKTtiKCJuNCIsMSwxLC0xKTtiKCJmMSIsLTEsLTEsMSk7YigiZjIiLDEsLTEsMSk7YigiZjMiLC0xLDEsMSk7YigiZjQiLDEsMSwxKTtiKCJ1MSIsLjcsMS4xLC0xKTtiKCJ1MiIsLS43LDEuMSwtMSk7YigidTMiLDAsMiwtMSk7YigiY2YxIiwtMSwwLDEpO2IoImNmMiIsMSwwLDEpO2IoImNmMyIsMCwtMSwxKTtiKCJjZjQiLDAsMSwxKTtiKCJjbjEiLC0xLDAsLTEpO2IoImNuMiIsMSwwLC0xKTtiKCJjbjMiLDAsLTEsLTEpO2IoImNuNCIsMCwxLC0xKTtlLmdldEF0dHJpYnV0ZSgicG9zaXRpb24iKS5uZWVkc1VwZGF0ZT0hMH19KCk7QmQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoUGIucHJvdG90eXBlKTtCZC5wcm90b3R5cGUuY29uc3RydWN0b3I9QmQ7QmQucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbigpe3ZhciBiPW5ldyB2O3JldHVybiBmdW5jdGlvbihlKXt2b2lkIDAhPT0KZSYmY29uc29sZS53YXJuKCJUSFJFRS5Cb3hIZWxwZXI6IC51cGRhdGUoKSBoYXMgbm8gbG9uZ2VyIGFyZ3VtZW50cy4iKTt2b2lkIDAhPT10aGlzLm9iamVjdCYmYi5zZXRGcm9tT2JqZWN0KHRoaXMub2JqZWN0KTtpZighYi5pc0VtcHR5KCkpe2U9Yi5taW47dmFyIGg9Yi5tYXgsbj10aGlzLmdlb21ldHJ5LmF0dHJpYnV0ZXMucG9zaXRpb24sdT1uLmFycmF5O3VbMF09aC54O3VbMV09aC55O3VbMl09aC56O3VbM109ZS54O3VbNF09aC55O3VbNV09aC56O3VbNl09ZS54O3VbN109ZS55O3VbOF09aC56O3VbOV09aC54O3VbMTBdPWUueTt1WzExXT1oLno7dVsxMl09aC54O3VbMTNdPWgueTt1WzE0XT1lLno7dVsxNV09ZS54O3VbMTZdPWgueTt1WzE3XT1lLno7dVsxOF09ZS54O3VbMTldPWUueTt1WzIwXT1lLno7dVsyMV09aC54O3VbMjJdPWUueTt1WzIzXT1lLno7bi5uZWVkc1VwZGF0ZT0hMDt0aGlzLmdlb21ldHJ5LmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpfX19KCk7QmQucHJvdG90eXBlLnNldEZyb21PYmplY3Q9CmZ1bmN0aW9uKGIpe3RoaXMub2JqZWN0PWI7dGhpcy51cGRhdGUoKTtyZXR1cm4gdGhpc307QmQucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oYil7UGIucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLGIpO3RoaXMub2JqZWN0PWIub2JqZWN0O3JldHVybiB0aGlzfTtCZC5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9O0NnLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKFBiLnByb3RvdHlwZSk7Q2cucHJvdG90eXBlLmNvbnN0cnVjdG9yPUNnO0NnLnByb3RvdHlwZS51cGRhdGVNYXRyaXhXb3JsZD1mdW5jdGlvbihiKXt2YXIgZT10aGlzLmJveDtlLmlzRW1wdHkoKXx8KGUuZ2V0Q2VudGVyKHRoaXMucG9zaXRpb24pLGUuZ2V0U2l6ZSh0aGlzLnNjYWxlKSx0aGlzLnNjYWxlLm11bHRpcGx5U2NhbGFyKC41KSxTLnByb3RvdHlwZS51cGRhdGVNYXRyaXhXb3JsZC5jYWxsKHRoaXMsYikpfTtEZy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShsYy5wcm90b3R5cGUpOwpEZy5wcm90b3R5cGUuY29uc3RydWN0b3I9RGc7RGcucHJvdG90eXBlLnVwZGF0ZU1hdHJpeFdvcmxkPWZ1bmN0aW9uKGIpe3ZhciBlPS10aGlzLnBsYW5lLmNvbnN0YW50OzFFLTg+TWF0aC5hYnMoZSkmJihlPTFFLTgpO3RoaXMuc2NhbGUuc2V0KC41KnRoaXMuc2l6ZSwuNSp0aGlzLnNpemUsZSk7dGhpcy5jaGlsZHJlblswXS5tYXRlcmlhbC5zaWRlPTA+ZT8xOjA7dGhpcy5sb29rQXQodGhpcy5wbGFuZS5ub3JtYWwpO1MucHJvdG90eXBlLnVwZGF0ZU1hdHJpeFdvcmxkLmNhbGwodGhpcyxiKX07dmFyIEdoLGJqO0NkLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKFMucHJvdG90eXBlKTtDZC5wcm90b3R5cGUuY29uc3RydWN0b3I9Q2Q7Q2QucHJvdG90eXBlLnNldERpcmVjdGlvbj1mdW5jdGlvbigpe3ZhciBiPW5ldyBnLGU7cmV0dXJuIGZ1bmN0aW9uKGgpey45OTk5OTxoLnk/dGhpcy5xdWF0ZXJuaW9uLnNldCgwLDAsMCwxKTotLjk5OTk5PmgueT90aGlzLnF1YXRlcm5pb24uc2V0KDEsCjAsMCwwKTooYi5zZXQoaC56LDAsLWgueCkubm9ybWFsaXplKCksZT1NYXRoLmFjb3MoaC55KSx0aGlzLnF1YXRlcm5pb24uc2V0RnJvbUF4aXNBbmdsZShiLGUpKX19KCk7Q2QucHJvdG90eXBlLnNldExlbmd0aD1mdW5jdGlvbihiLGUsaCl7dm9pZCAwPT09ZSYmKGU9LjIqYik7dm9pZCAwPT09aCYmKGg9LjIqZSk7dGhpcy5saW5lLnNjYWxlLnNldCgxLE1hdGgubWF4KDAsYi1lKSwxKTt0aGlzLmxpbmUudXBkYXRlTWF0cml4KCk7dGhpcy5jb25lLnNjYWxlLnNldChoLGUsaCk7dGhpcy5jb25lLnBvc2l0aW9uLnk9Yjt0aGlzLmNvbmUudXBkYXRlTWF0cml4KCl9O0NkLnByb3RvdHlwZS5zZXRDb2xvcj1mdW5jdGlvbihiKXt0aGlzLmxpbmUubWF0ZXJpYWwuY29sb3IuY29weShiKTt0aGlzLmNvbmUubWF0ZXJpYWwuY29sb3IuY29weShiKX07Q2QucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oYil7Uy5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsYiwhMSk7dGhpcy5saW5lLmNvcHkoYi5saW5lKTsKdGhpcy5jb25lLmNvcHkoYi5jb25lKTtyZXR1cm4gdGhpc307Q2QucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKS5jb3B5KHRoaXMpfTtFZy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShQYi5wcm90b3R5cGUpO0VnLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1FZztlYi5jcmVhdGU9ZnVuY3Rpb24oYixlKXtjb25zb2xlLmxvZygiVEhSRUUuQ3VydmUuY3JlYXRlKCkgaGFzIGJlZW4gZGVwcmVjYXRlZCIpO2IucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZWIucHJvdG90eXBlKTtiLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1iO2IucHJvdG90eXBlLmdldFBvaW50PWU7cmV0dXJuIGJ9O09iamVjdC5hc3NpZ24oQWQucHJvdG90eXBlLHtjcmVhdGVQb2ludHNHZW9tZXRyeTpmdW5jdGlvbihiKXtjb25zb2xlLndhcm4oIlRIUkVFLkN1cnZlUGF0aDogLmNyZWF0ZVBvaW50c0dlb21ldHJ5KCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG5ldyBUSFJFRS5HZW9tZXRyeSgpLnNldEZyb21Qb2ludHMoIHBvaW50cyApIGluc3RlYWQuIik7CmI9dGhpcy5nZXRQb2ludHMoYik7cmV0dXJuIHRoaXMuY3JlYXRlR2VvbWV0cnkoYil9LGNyZWF0ZVNwYWNlZFBvaW50c0dlb21ldHJ5OmZ1bmN0aW9uKGIpe2NvbnNvbGUud2FybigiVEhSRUUuQ3VydmVQYXRoOiAuY3JlYXRlU3BhY2VkUG9pbnRzR2VvbWV0cnkoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLkdlb21ldHJ5KCkuc2V0RnJvbVBvaW50cyggcG9pbnRzICkgaW5zdGVhZC4iKTtiPXRoaXMuZ2V0U3BhY2VkUG9pbnRzKGIpO3JldHVybiB0aGlzLmNyZWF0ZUdlb21ldHJ5KGIpfSxjcmVhdGVHZW9tZXRyeTpmdW5jdGlvbihiKXtjb25zb2xlLndhcm4oIlRIUkVFLkN1cnZlUGF0aDogLmNyZWF0ZUdlb21ldHJ5KCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG5ldyBUSFJFRS5HZW9tZXRyeSgpLnNldEZyb21Qb2ludHMoIHBvaW50cyApIGluc3RlYWQuIik7Zm9yKHZhciBlPW5ldyBOLGg9MCxuPWIubGVuZ3RoO2g8bjtoKyspe3ZhciB1PWJbaF07ZS52ZXJ0aWNlcy5wdXNoKG5ldyBnKHUueCwKdS55LHUuenx8MCkpfXJldHVybiBlfX0pO09iamVjdC5hc3NpZ24oWmMucHJvdG90eXBlLHtmcm9tUG9pbnRzOmZ1bmN0aW9uKGIpe2NvbnNvbGUud2FybigiVEhSRUUuUGF0aDogLmZyb21Qb2ludHMoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5zZXRGcm9tUG9pbnRzKCkuIik7dGhpcy5zZXRGcm9tUG9pbnRzKGIpfX0pO1JsLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHJjLnByb3RvdHlwZSk7U2wucHJvdG90eXBlPU9iamVjdC5jcmVhdGUocmMucHJvdG90eXBlKTtjai5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShyYy5wcm90b3R5cGUpO09iamVjdC5hc3NpZ24oY2oucHJvdG90eXBlLHtpbml0RnJvbUFycmF5OmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuU3BsaW5lOiAuaW5pdEZyb21BcnJheSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LGdldENvbnRyb2xQb2ludHNBcnJheTpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlNwbGluZTogLmdldENvbnRyb2xQb2ludHNBcnJheSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LApyZXBhcmFtZXRyaXplQnlBcmNMZW5ndGg6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5TcGxpbmU6IC5yZXBhcmFtZXRyaXplQnlBcmNMZW5ndGgoKSBoYXMgYmVlbiByZW1vdmVkLiIpfX0pO0VoLnByb3RvdHlwZS5zZXRDb2xvcnM9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5HcmlkSGVscGVyOiBzZXRDb2xvcnMoKSBoYXMgYmVlbiBkZXByZWNhdGVkLCBwYXNzIHRoZW0gaW4gdGhlIGNvbnN0cnVjdG9yIGluc3RlYWQuIil9O2xmLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5Ta2VsZXRvbkhlbHBlcjogdXBkYXRlKCkgbm8gbG9uZ2VyIG5lZWRzIHRvIGJlIGNhbGxlZC4iKX07T2JqZWN0LmFzc2lnbih3Zy5wcm90b3R5cGUse2V4dHJhY3RVcmxCYXNlOmZ1bmN0aW9uKGIpe2NvbnNvbGUud2FybigiVEhSRUUuTG9hZGVyOiAuZXh0cmFjdFVybEJhc2UoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgVEhSRUUuTG9hZGVyVXRpbHMuZXh0cmFjdFVybEJhc2UoKSBpbnN0ZWFkLiIpOwpyZXR1cm4gaGouZXh0cmFjdFVybEJhc2UoYil9fSk7T2JqZWN0LmFzc2lnbihJaS5wcm90b3R5cGUse3NldFRleHR1cmVQYXRoOmZ1bmN0aW9uKGIpe2NvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0TG9hZGVyOiAuc2V0VGV4dHVyZVBhdGgoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5zZXRSZXNvdXJjZVBhdGgoKS4iKTtyZXR1cm4gdGhpcy5zZXRSZXNvdXJjZVBhdGgoYil9fSk7T2JqZWN0LmFzc2lnbigkaS5wcm90b3R5cGUse2NlbnRlcjpmdW5jdGlvbihiKXtjb25zb2xlLndhcm4oIlRIUkVFLkJveDI6IC5jZW50ZXIoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRDZW50ZXIoKS4iKTtyZXR1cm4gdGhpcy5nZXRDZW50ZXIoYil9LGVtcHR5OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5Cb3gyOiAuZW1wdHkoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pc0VtcHR5KCkuIik7cmV0dXJuIHRoaXMuaXNFbXB0eSgpfSxpc0ludGVyc2VjdGlvbkJveDpmdW5jdGlvbihiKXtjb25zb2xlLndhcm4oIlRIUkVFLkJveDI6IC5pc0ludGVyc2VjdGlvbkJveCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNCb3goKS4iKTsKcmV0dXJuIHRoaXMuaW50ZXJzZWN0c0JveChiKX0sc2l6ZTpmdW5jdGlvbihiKXtjb25zb2xlLndhcm4oIlRIUkVFLkJveDI6IC5zaXplKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0U2l6ZSgpLiIpO3JldHVybiB0aGlzLmdldFNpemUoYil9fSk7T2JqZWN0LmFzc2lnbih2LnByb3RvdHlwZSx7Y2VudGVyOmZ1bmN0aW9uKGIpe2NvbnNvbGUud2FybigiVEhSRUUuQm94MzogLmNlbnRlcigpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldENlbnRlcigpLiIpO3JldHVybiB0aGlzLmdldENlbnRlcihiKX0sZW1wdHk6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkJveDM6IC5lbXB0eSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmlzRW1wdHkoKS4iKTtyZXR1cm4gdGhpcy5pc0VtcHR5KCl9LGlzSW50ZXJzZWN0aW9uQm94OmZ1bmN0aW9uKGIpe2NvbnNvbGUud2FybigiVEhSRUUuQm94MzogLmlzSW50ZXJzZWN0aW9uQm94KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaW50ZXJzZWN0c0JveCgpLiIpOwpyZXR1cm4gdGhpcy5pbnRlcnNlY3RzQm94KGIpfSxpc0ludGVyc2VjdGlvblNwaGVyZTpmdW5jdGlvbihiKXtjb25zb2xlLndhcm4oIlRIUkVFLkJveDM6IC5pc0ludGVyc2VjdGlvblNwaGVyZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNTcGhlcmUoKS4iKTtyZXR1cm4gdGhpcy5pbnRlcnNlY3RzU3BoZXJlKGIpfSxzaXplOmZ1bmN0aW9uKGIpe2NvbnNvbGUud2FybigiVEhSRUUuQm94MzogLnNpemUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRTaXplKCkuIik7cmV0dXJuIHRoaXMuZ2V0U2l6ZShiKX19KTthai5wcm90b3R5cGUuY2VudGVyPWZ1bmN0aW9uKGIpe2NvbnNvbGUud2FybigiVEhSRUUuTGluZTM6IC5jZW50ZXIoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRDZW50ZXIoKS4iKTtyZXR1cm4gdGhpcy5nZXRDZW50ZXIoYil9O09iamVjdC5hc3NpZ24ob2Ise3JhbmRvbTE2OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5NYXRoOiAucmFuZG9tMTYoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgTWF0aC5yYW5kb20oKSBpbnN0ZWFkLiIpOwpyZXR1cm4gTWF0aC5yYW5kb20oKX0sbmVhcmVzdFBvd2VyT2ZUd286ZnVuY3Rpb24oYil7Y29uc29sZS53YXJuKCJUSFJFRS5NYXRoOiAubmVhcmVzdFBvd2VyT2ZUd28oKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5mbG9vclBvd2VyT2ZUd28oKS4iKTtyZXR1cm4gb2IuZmxvb3JQb3dlck9mVHdvKGIpfSxuZXh0UG93ZXJPZlR3bzpmdW5jdGlvbihiKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdGg6IC5uZXh0UG93ZXJPZlR3bygpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmNlaWxQb3dlck9mVHdvKCkuIik7cmV0dXJuIG9iLmNlaWxQb3dlck9mVHdvKGIpfX0pO09iamVjdC5hc3NpZ24obC5wcm90b3R5cGUse2ZsYXR0ZW5Ub0FycmF5T2Zmc2V0OmZ1bmN0aW9uKGIsZSl7Y29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXgzOiAuZmxhdHRlblRvQXJyYXlPZmZzZXQoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnRvQXJyYXkoKSBpbnN0ZWFkLiIpO3JldHVybiB0aGlzLnRvQXJyYXkoYixlKX0sCm11bHRpcGx5VmVjdG9yMzpmdW5jdGlvbihiKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDM6IC5tdWx0aXBseVZlY3RvcjMoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgdmVjdG9yLmFwcGx5TWF0cml4MyggbWF0cml4ICkgaW5zdGVhZC4iKTtyZXR1cm4gYi5hcHBseU1hdHJpeDModGhpcyl9LG11bHRpcGx5VmVjdG9yM0FycmF5OmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4MzogLm11bHRpcGx5VmVjdG9yM0FycmF5KCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sYXBwbHlUb0J1ZmZlcjpmdW5jdGlvbihiKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDM6IC5hcHBseVRvQnVmZmVyKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG1hdHJpeC5hcHBseVRvQnVmZmVyQXR0cmlidXRlKCBhdHRyaWJ1dGUgKSBpbnN0ZWFkLiIpO3JldHVybiB0aGlzLmFwcGx5VG9CdWZmZXJBdHRyaWJ1dGUoYil9LGFwcGx5VG9WZWN0b3IzQXJyYXk6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXgzOiAuYXBwbHlUb1ZlY3RvcjNBcnJheSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9fSk7Ck9iamVjdC5hc3NpZ24oQy5wcm90b3R5cGUse2V4dHJhY3RQb3NpdGlvbjpmdW5jdGlvbihiKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5leHRyYWN0UG9zaXRpb24oKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5jb3B5UG9zaXRpb24oKS4iKTtyZXR1cm4gdGhpcy5jb3B5UG9zaXRpb24oYil9LGZsYXR0ZW5Ub0FycmF5T2Zmc2V0OmZ1bmN0aW9uKGIsZSl7Y29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAuZmxhdHRlblRvQXJyYXlPZmZzZXQoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnRvQXJyYXkoKSBpbnN0ZWFkLiIpO3JldHVybiB0aGlzLnRvQXJyYXkoYixlKX0sZ2V0UG9zaXRpb246ZnVuY3Rpb24oKXt2YXIgYjtyZXR1cm4gZnVuY3Rpb24oKXt2b2lkIDA9PT1iJiYoYj1uZXcgZyk7Y29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAuZ2V0UG9zaXRpb24oKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgVmVjdG9yMy5zZXRGcm9tTWF0cml4UG9zaXRpb24oIG1hdHJpeCApIGluc3RlYWQuIik7CnJldHVybiBiLnNldEZyb21NYXRyaXhDb2x1bW4odGhpcywzKX19KCksc2V0Um90YXRpb25Gcm9tUXVhdGVybmlvbjpmdW5jdGlvbihiKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5zZXRSb3RhdGlvbkZyb21RdWF0ZXJuaW9uKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAubWFrZVJvdGF0aW9uRnJvbVF1YXRlcm5pb24oKS4iKTtyZXR1cm4gdGhpcy5tYWtlUm90YXRpb25Gcm9tUXVhdGVybmlvbihiKX0sbXVsdGlwbHlUb0FycmF5OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAubXVsdGlwbHlUb0FycmF5KCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sbXVsdGlwbHlWZWN0b3IzOmZ1bmN0aW9uKGIpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLm11bHRpcGx5VmVjdG9yMygpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSB2ZWN0b3IuYXBwbHlNYXRyaXg0KCBtYXRyaXggKSBpbnN0ZWFkLiIpO3JldHVybiBiLmFwcGx5TWF0cml4NCh0aGlzKX0sbXVsdGlwbHlWZWN0b3I0OmZ1bmN0aW9uKGIpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLm11bHRpcGx5VmVjdG9yNCgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSB2ZWN0b3IuYXBwbHlNYXRyaXg0KCBtYXRyaXggKSBpbnN0ZWFkLiIpOwpyZXR1cm4gYi5hcHBseU1hdHJpeDQodGhpcyl9LG11bHRpcGx5VmVjdG9yM0FycmF5OmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogLm11bHRpcGx5VmVjdG9yM0FycmF5KCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0scm90YXRlQXhpczpmdW5jdGlvbihiKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5yb3RhdGVBeGlzKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFZlY3RvcjMudHJhbnNmb3JtRGlyZWN0aW9uKCBtYXRyaXggKSBpbnN0ZWFkLiIpO2IudHJhbnNmb3JtRGlyZWN0aW9uKHRoaXMpfSxjcm9zc1ZlY3RvcjpmdW5jdGlvbihiKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5jcm9zc1ZlY3RvcigpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSB2ZWN0b3IuYXBwbHlNYXRyaXg0KCBtYXRyaXggKSBpbnN0ZWFkLiIpO3JldHVybiBiLmFwcGx5TWF0cml4NCh0aGlzKX0sdHJhbnNsYXRlOmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogLnRyYW5zbGF0ZSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LApyb3RhdGVYOmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogLnJvdGF0ZVgoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxyb3RhdGVZOmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogLnJvdGF0ZVkoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxyb3RhdGVaOmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogLnJvdGF0ZVooKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxyb3RhdGVCeUF4aXM6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiAucm90YXRlQnlBeGlzKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sYXBwbHlUb0J1ZmZlcjpmdW5jdGlvbihiKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5hcHBseVRvQnVmZmVyKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG1hdHJpeC5hcHBseVRvQnVmZmVyQXR0cmlidXRlKCBhdHRyaWJ1dGUgKSBpbnN0ZWFkLiIpO3JldHVybiB0aGlzLmFwcGx5VG9CdWZmZXJBdHRyaWJ1dGUoYil9LAphcHBseVRvVmVjdG9yM0FycmF5OmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogLmFwcGx5VG9WZWN0b3IzQXJyYXkoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxtYWtlRnJ1c3R1bTpmdW5jdGlvbihiLGUsaCxuLHUsdyl7Y29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAubWFrZUZydXN0dW0oKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLm1ha2VQZXJzcGVjdGl2ZSggbGVmdCwgcmlnaHQsIHRvcCwgYm90dG9tLCBuZWFyLCBmYXIgKSBpbnN0ZWFkLiIpO3JldHVybiB0aGlzLm1ha2VQZXJzcGVjdGl2ZShiLGUsbixoLHUsdyl9fSk7eS5wcm90b3R5cGUuaXNJbnRlcnNlY3Rpb25MaW5lPWZ1bmN0aW9uKGIpe2NvbnNvbGUud2FybigiVEhSRUUuUGxhbmU6IC5pc0ludGVyc2VjdGlvbkxpbmUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pbnRlcnNlY3RzTGluZSgpLiIpO3JldHVybiB0aGlzLmludGVyc2VjdHNMaW5lKGIpfTtmLnByb3RvdHlwZS5tdWx0aXBseVZlY3RvcjM9CmZ1bmN0aW9uKGIpe2NvbnNvbGUud2FybigiVEhSRUUuUXVhdGVybmlvbjogLm11bHRpcGx5VmVjdG9yMygpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBpcyBub3cgdmVjdG9yLmFwcGx5UXVhdGVybmlvbiggcXVhdGVybmlvbiApIGluc3RlYWQuIik7cmV0dXJuIGIuYXBwbHlRdWF0ZXJuaW9uKHRoaXMpfTtPYmplY3QuYXNzaWduKHhiLnByb3RvdHlwZSx7aXNJbnRlcnNlY3Rpb25Cb3g6ZnVuY3Rpb24oYil7Y29uc29sZS53YXJuKCJUSFJFRS5SYXk6IC5pc0ludGVyc2VjdGlvbkJveCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNCb3goKS4iKTtyZXR1cm4gdGhpcy5pbnRlcnNlY3RzQm94KGIpfSxpc0ludGVyc2VjdGlvblBsYW5lOmZ1bmN0aW9uKGIpe2NvbnNvbGUud2FybigiVEhSRUUuUmF5OiAuaXNJbnRlcnNlY3Rpb25QbGFuZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNQbGFuZSgpLiIpO3JldHVybiB0aGlzLmludGVyc2VjdHNQbGFuZShiKX0saXNJbnRlcnNlY3Rpb25TcGhlcmU6ZnVuY3Rpb24oYil7Y29uc29sZS53YXJuKCJUSFJFRS5SYXk6IC5pc0ludGVyc2VjdGlvblNwaGVyZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNTcGhlcmUoKS4iKTsKcmV0dXJuIHRoaXMuaW50ZXJzZWN0c1NwaGVyZShiKX19KTtPYmplY3QuYXNzaWduKENiLnByb3RvdHlwZSx7YXJlYTpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuVHJpYW5nbGU6IC5hcmVhKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0QXJlYSgpLiIpO3JldHVybiB0aGlzLmdldEFyZWEoKX0sYmFyeWNvb3JkRnJvbVBvaW50OmZ1bmN0aW9uKGIsZSl7Y29uc29sZS53YXJuKCJUSFJFRS5UcmlhbmdsZTogLmJhcnljb29yZEZyb21Qb2ludCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldEJhcnljb29yZCgpLiIpO3JldHVybiB0aGlzLmdldEJhcnljb29yZChiLGUpfSxtaWRwb2ludDpmdW5jdGlvbihiKXtjb25zb2xlLndhcm4oIlRIUkVFLlRyaWFuZ2xlOiAubWlkcG9pbnQoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRNaWRwb2ludCgpLiIpO3JldHVybiB0aGlzLmdldE1pZHBvaW50KGIpfSxub3JtYWw6ZnVuY3Rpb24oYil7Y29uc29sZS53YXJuKCJUSFJFRS5UcmlhbmdsZTogLm5vcm1hbCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldE5vcm1hbCgpLiIpOwpyZXR1cm4gdGhpcy5nZXROb3JtYWwoYil9LHBsYW5lOmZ1bmN0aW9uKGIpe2NvbnNvbGUud2FybigiVEhSRUUuVHJpYW5nbGU6IC5wbGFuZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldFBsYW5lKCkuIik7cmV0dXJuIHRoaXMuZ2V0UGxhbmUoYil9fSk7T2JqZWN0LmFzc2lnbihDYix7YmFyeWNvb3JkRnJvbVBvaW50OmZ1bmN0aW9uKGIsZSxoLG4sdSl7Y29uc29sZS53YXJuKCJUSFJFRS5UcmlhbmdsZTogLmJhcnljb29yZEZyb21Qb2ludCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldEJhcnljb29yZCgpLiIpO3JldHVybiBDYi5nZXRCYXJ5Y29vcmQoYixlLGgsbix1KX0sbm9ybWFsOmZ1bmN0aW9uKGIsZSxoLG4pe2NvbnNvbGUud2FybigiVEhSRUUuVHJpYW5nbGU6IC5ub3JtYWwoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXROb3JtYWwoKS4iKTtyZXR1cm4gQ2IuZ2V0Tm9ybWFsKGIsZSxoLG4pfX0pO09iamVjdC5hc3NpZ24oWGQucHJvdG90eXBlLHtleHRyYWN0QWxsUG9pbnRzOmZ1bmN0aW9uKGIpe2NvbnNvbGUud2FybigiVEhSRUUuU2hhcGU6IC5leHRyYWN0QWxsUG9pbnRzKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIC5leHRyYWN0UG9pbnRzKCkgaW5zdGVhZC4iKTsKcmV0dXJuIHRoaXMuZXh0cmFjdFBvaW50cyhiKX0sZXh0cnVkZTpmdW5jdGlvbihiKXtjb25zb2xlLndhcm4oIlRIUkVFLlNoYXBlOiAuZXh0cnVkZSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBFeHRydWRlR2VvbWV0cnkoKSBpbnN0ZWFkLiIpO3JldHVybiBuZXcgbGUodGhpcyxiKX0sbWFrZUdlb21ldHJ5OmZ1bmN0aW9uKGIpe2NvbnNvbGUud2FybigiVEhSRUUuU2hhcGU6IC5tYWtlR2VvbWV0cnkoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgU2hhcGVHZW9tZXRyeSgpIGluc3RlYWQuIik7cmV0dXJuIG5ldyBtZSh0aGlzLGIpfX0pO09iamVjdC5hc3NpZ24oZC5wcm90b3R5cGUse2Zyb21BdHRyaWJ1dGU6ZnVuY3Rpb24oYixlLGgpe2NvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMjogLmZyb21BdHRyaWJ1dGUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5mcm9tQnVmZmVyQXR0cmlidXRlKCkuIik7cmV0dXJuIHRoaXMuZnJvbUJ1ZmZlckF0dHJpYnV0ZShiLGUsaCl9LGRpc3RhbmNlVG9NYW5oYXR0YW46ZnVuY3Rpb24oYil7Y29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IyOiAuZGlzdGFuY2VUb01hbmhhdHRhbigpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLm1hbmhhdHRhbkRpc3RhbmNlVG8oKS4iKTsKcmV0dXJuIHRoaXMubWFuaGF0dGFuRGlzdGFuY2VUbyhiKX0sbGVuZ3RoTWFuaGF0dGFuOmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IyOiAubGVuZ3RoTWFuaGF0dGFuKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAubWFuaGF0dGFuTGVuZ3RoKCkuIik7cmV0dXJuIHRoaXMubWFuaGF0dGFuTGVuZ3RoKCl9fSk7T2JqZWN0LmFzc2lnbihnLnByb3RvdHlwZSx7c2V0RXVsZXJGcm9tUm90YXRpb25NYXRyaXg6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5WZWN0b3IzOiAuc2V0RXVsZXJGcm9tUm90YXRpb25NYXRyaXgoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgRXVsZXIuc2V0RnJvbVJvdGF0aW9uTWF0cml4KCkgaW5zdGVhZC4iKX0sc2V0RXVsZXJGcm9tUXVhdGVybmlvbjpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlZlY3RvcjM6IC5zZXRFdWxlckZyb21RdWF0ZXJuaW9uKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIEV1bGVyLnNldEZyb21RdWF0ZXJuaW9uKCkgaW5zdGVhZC4iKX0sCmdldFBvc2l0aW9uRnJvbU1hdHJpeDpmdW5jdGlvbihiKXtjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5nZXRQb3NpdGlvbkZyb21NYXRyaXgoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5zZXRGcm9tTWF0cml4UG9zaXRpb24oKS4iKTtyZXR1cm4gdGhpcy5zZXRGcm9tTWF0cml4UG9zaXRpb24oYil9LGdldFNjYWxlRnJvbU1hdHJpeDpmdW5jdGlvbihiKXtjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5nZXRTY2FsZUZyb21NYXRyaXgoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5zZXRGcm9tTWF0cml4U2NhbGUoKS4iKTtyZXR1cm4gdGhpcy5zZXRGcm9tTWF0cml4U2NhbGUoYil9LGdldENvbHVtbkZyb21NYXRyaXg6ZnVuY3Rpb24oYixlKXtjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5nZXRDb2x1bW5Gcm9tTWF0cml4KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0RnJvbU1hdHJpeENvbHVtbigpLiIpO3JldHVybiB0aGlzLnNldEZyb21NYXRyaXhDb2x1bW4oZSwKYil9LGFwcGx5UHJvamVjdGlvbjpmdW5jdGlvbihiKXtjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5hcHBseVByb2plY3Rpb24oKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLmFwcGx5TWF0cml4NCggbSApIGluc3RlYWQuIik7cmV0dXJuIHRoaXMuYXBwbHlNYXRyaXg0KGIpfSxmcm9tQXR0cmlidXRlOmZ1bmN0aW9uKGIsZSxoKXtjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5mcm9tQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZnJvbUJ1ZmZlckF0dHJpYnV0ZSgpLiIpO3JldHVybiB0aGlzLmZyb21CdWZmZXJBdHRyaWJ1dGUoYixlLGgpfSxkaXN0YW5jZVRvTWFuaGF0dGFuOmZ1bmN0aW9uKGIpe2NvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLmRpc3RhbmNlVG9NYW5oYXR0YW4oKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5tYW5oYXR0YW5EaXN0YW5jZVRvKCkuIik7cmV0dXJuIHRoaXMubWFuaGF0dGFuRGlzdGFuY2VUbyhiKX0sbGVuZ3RoTWFuaGF0dGFuOmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAubGVuZ3RoTWFuaGF0dGFuKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAubWFuaGF0dGFuTGVuZ3RoKCkuIik7CnJldHVybiB0aGlzLm1hbmhhdHRhbkxlbmd0aCgpfX0pO09iamVjdC5hc3NpZ24obS5wcm90b3R5cGUse2Zyb21BdHRyaWJ1dGU6ZnVuY3Rpb24oYixlLGgpe2NvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yNDogLmZyb21BdHRyaWJ1dGUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5mcm9tQnVmZmVyQXR0cmlidXRlKCkuIik7cmV0dXJuIHRoaXMuZnJvbUJ1ZmZlckF0dHJpYnV0ZShiLGUsaCl9LGxlbmd0aE1hbmhhdHRhbjpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yNDogLmxlbmd0aE1hbmhhdHRhbigpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLm1hbmhhdHRhbkxlbmd0aCgpLiIpO3JldHVybiB0aGlzLm1hbmhhdHRhbkxlbmd0aCgpfX0pO09iamVjdC5hc3NpZ24oTi5wcm90b3R5cGUse2NvbXB1dGVUYW5nZW50czpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkdlb21ldHJ5OiAuY29tcHV0ZVRhbmdlbnRzKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sY29tcHV0ZUxpbmVEaXN0YW5jZXM6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5HZW9tZXRyeTogLmNvbXB1dGVMaW5lRGlzdGFuY2VzKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFRIUkVFLkxpbmUuY29tcHV0ZUxpbmVEaXN0YW5jZXMoKSBpbnN0ZWFkLiIpfX0pOwpPYmplY3QuYXNzaWduKFMucHJvdG90eXBlLHtnZXRDaGlsZEJ5TmFtZTpmdW5jdGlvbihiKXtjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdDNEOiAuZ2V0Q2hpbGRCeU5hbWUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRPYmplY3RCeU5hbWUoKS4iKTtyZXR1cm4gdGhpcy5nZXRPYmplY3RCeU5hbWUoYil9LHJlbmRlckRlcHRoOmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5PYmplY3QzRDogLnJlbmRlckRlcHRoIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSAucmVuZGVyT3JkZXIsIGluc3RlYWQuIil9LHRyYW5zbGF0ZTpmdW5jdGlvbihiLGUpe2NvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC50cmFuc2xhdGUoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLnRyYW5zbGF0ZU9uQXhpcyggYXhpcywgZGlzdGFuY2UgKSBpbnN0ZWFkLiIpO3JldHVybiB0aGlzLnRyYW5zbGF0ZU9uQXhpcyhlLGIpfSxnZXRXb3JsZFJvdGF0aW9uOmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuT2JqZWN0M0Q6IC5nZXRXb3JsZFJvdGF0aW9uKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFRIUkVFLk9iamVjdDNELmdldFdvcmxkUXVhdGVybmlvbiggdGFyZ2V0ICkgaW5zdGVhZC4iKX19KTsKT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoUy5wcm90b3R5cGUse2V1bGVyT3JkZXI6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC5ldWxlck9yZGVyIGlzIG5vdyAucm90YXRpb24ub3JkZXIuIik7cmV0dXJuIHRoaXMucm90YXRpb24ub3JkZXJ9LHNldDpmdW5jdGlvbihiKXtjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdDNEOiAuZXVsZXJPcmRlciBpcyBub3cgLnJvdGF0aW9uLm9yZGVyLiIpO3RoaXMucm90YXRpb24ub3JkZXI9Yn19LHVzZVF1YXRlcm5pb246e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC51c2VRdWF0ZXJuaW9uIGhhcyBiZWVuIHJlbW92ZWQuIFRoZSBsaWJyYXJ5IG5vdyB1c2VzIHF1YXRlcm5pb25zIGJ5IGRlZmF1bHQuIil9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC51c2VRdWF0ZXJuaW9uIGhhcyBiZWVuIHJlbW92ZWQuIFRoZSBsaWJyYXJ5IG5vdyB1c2VzIHF1YXRlcm5pb25zIGJ5IGRlZmF1bHQuIil9fX0pOwpPYmplY3QuZGVmaW5lUHJvcGVydGllcyhUZi5wcm90b3R5cGUse29iamVjdHM6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuTE9EOiAub2JqZWN0cyBoYXMgYmVlbiByZW5hbWVkIHRvIC5sZXZlbHMuIik7cmV0dXJuIHRoaXMubGV2ZWxzfX19KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoamgucHJvdG90eXBlLCJ1c2VWZXJ0ZXhUZXh0dXJlIix7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5Ta2VsZXRvbjogdXNlVmVydGV4VGV4dHVyZSBoYXMgYmVlbiByZW1vdmVkLiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLlNrZWxldG9uOiB1c2VWZXJ0ZXhUZXh0dXJlIGhhcyBiZWVuIHJlbW92ZWQuIil9fSk7VWYucHJvdG90eXBlLmluaXRCb25lcz1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlNraW5uZWRNZXNoOiBpbml0Qm9uZXMoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoZWIucHJvdG90eXBlLAoiX19hcmNMZW5ndGhEaXZpc2lvbnMiLHtnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkN1cnZlOiAuX19hcmNMZW5ndGhEaXZpc2lvbnMgaXMgbm93IC5hcmNMZW5ndGhEaXZpc2lvbnMuIik7cmV0dXJuIHRoaXMuYXJjTGVuZ3RoRGl2aXNpb25zfSxzZXQ6ZnVuY3Rpb24oYil7Y29uc29sZS53YXJuKCJUSFJFRS5DdXJ2ZTogLl9fYXJjTGVuZ3RoRGl2aXNpb25zIGlzIG5vdyAuYXJjTGVuZ3RoRGl2aXNpb25zLiIpO3RoaXMuYXJjTGVuZ3RoRGl2aXNpb25zPWJ9fSk7Y2MucHJvdG90eXBlLnNldExlbnM9ZnVuY3Rpb24oYixlKXtjb25zb2xlLndhcm4oIlRIUkVFLlBlcnNwZWN0aXZlQ2FtZXJhLnNldExlbnMgaXMgZGVwcmVjYXRlZC4gVXNlIC5zZXRGb2NhbExlbmd0aCBhbmQgLmZpbG1HYXVnZSBmb3IgYSBwaG90b2dyYXBoaWMgc2V0dXAuIik7dm9pZCAwIT09ZSYmKHRoaXMuZmlsbUdhdWdlPWUpO3RoaXMuc2V0Rm9jYWxMZW5ndGgoYil9O09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFNiLnByb3RvdHlwZSwKe29ubHlTaGFkb3c6e3NldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5vbmx5U2hhZG93IGhhcyBiZWVuIHJlbW92ZWQuIil9fSxzaGFkb3dDYW1lcmFGb3Y6e3NldDpmdW5jdGlvbihiKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhRm92IGlzIG5vdyAuc2hhZG93LmNhbWVyYS5mb3YuIik7dGhpcy5zaGFkb3cuY2FtZXJhLmZvdj1ifX0sc2hhZG93Q2FtZXJhTGVmdDp7c2V0OmZ1bmN0aW9uKGIpe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dDYW1lcmFMZWZ0IGlzIG5vdyAuc2hhZG93LmNhbWVyYS5sZWZ0LiIpO3RoaXMuc2hhZG93LmNhbWVyYS5sZWZ0PWJ9fSxzaGFkb3dDYW1lcmFSaWdodDp7c2V0OmZ1bmN0aW9uKGIpe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dDYW1lcmFSaWdodCBpcyBub3cgLnNoYWRvdy5jYW1lcmEucmlnaHQuIik7dGhpcy5zaGFkb3cuY2FtZXJhLnJpZ2h0PWJ9fSxzaGFkb3dDYW1lcmFUb3A6e3NldDpmdW5jdGlvbihiKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhVG9wIGlzIG5vdyAuc2hhZG93LmNhbWVyYS50b3AuIik7CnRoaXMuc2hhZG93LmNhbWVyYS50b3A9Yn19LHNoYWRvd0NhbWVyYUJvdHRvbTp7c2V0OmZ1bmN0aW9uKGIpe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dDYW1lcmFCb3R0b20gaXMgbm93IC5zaGFkb3cuY2FtZXJhLmJvdHRvbS4iKTt0aGlzLnNoYWRvdy5jYW1lcmEuYm90dG9tPWJ9fSxzaGFkb3dDYW1lcmFOZWFyOntzZXQ6ZnVuY3Rpb24oYil7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0NhbWVyYU5lYXIgaXMgbm93IC5zaGFkb3cuY2FtZXJhLm5lYXIuIik7dGhpcy5zaGFkb3cuY2FtZXJhLm5lYXI9Yn19LHNoYWRvd0NhbWVyYUZhcjp7c2V0OmZ1bmN0aW9uKGIpe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dDYW1lcmFGYXIgaXMgbm93IC5zaGFkb3cuY2FtZXJhLmZhci4iKTt0aGlzLnNoYWRvdy5jYW1lcmEuZmFyPWJ9fSxzaGFkb3dDYW1lcmFWaXNpYmxlOntzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhVmlzaWJsZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLkNhbWVyYUhlbHBlciggbGlnaHQuc2hhZG93LmNhbWVyYSApIGluc3RlYWQuIil9fSwKc2hhZG93Qmlhczp7c2V0OmZ1bmN0aW9uKGIpe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dCaWFzIGlzIG5vdyAuc2hhZG93LmJpYXMuIik7dGhpcy5zaGFkb3cuYmlhcz1ifX0sc2hhZG93RGFya25lc3M6e3NldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dEYXJrbmVzcyBoYXMgYmVlbiByZW1vdmVkLiIpfX0sc2hhZG93TWFwV2lkdGg6e3NldDpmdW5jdGlvbihiKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93TWFwV2lkdGggaXMgbm93IC5zaGFkb3cubWFwU2l6ZS53aWR0aC4iKTt0aGlzLnNoYWRvdy5tYXBTaXplLndpZHRoPWJ9fSxzaGFkb3dNYXBIZWlnaHQ6e3NldDpmdW5jdGlvbihiKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93TWFwSGVpZ2h0IGlzIG5vdyAuc2hhZG93Lm1hcFNpemUuaGVpZ2h0LiIpO3RoaXMuc2hhZG93Lm1hcFNpemUuaGVpZ2h0PWJ9fX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFQucHJvdG90eXBlLAp7bGVuZ3RoOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckF0dHJpYnV0ZTogLmxlbmd0aCBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLmNvdW50IGluc3RlYWQuIik7cmV0dXJuIHRoaXMuYXJyYXkubGVuZ3RofX0sY29weUluZGljZXNBcnJheTpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkJ1ZmZlckF0dHJpYnV0ZTogLmNvcHlJbmRpY2VzQXJyYXkoKSBoYXMgYmVlbiByZW1vdmVkLiIpfX0pO09iamVjdC5hc3NpZ24oeGEucHJvdG90eXBlLHthZGRJbmRleDpmdW5jdGlvbihiKXtjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuYWRkSW5kZXgoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5zZXRJbmRleCgpLiIpO3RoaXMuc2V0SW5kZXgoYil9LGFkZERyYXdDYWxsOmZ1bmN0aW9uKGIsZSxoKXt2b2lkIDAhPT1oJiZjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuYWRkRHJhd0NhbGwoKSBubyBsb25nZXIgc3VwcG9ydHMgaW5kZXhPZmZzZXQuIik7CmNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5hZGREcmF3Q2FsbCgpIGlzIG5vdyAuYWRkR3JvdXAoKS4iKTt0aGlzLmFkZEdyb3VwKGIsZSl9LGNsZWFyRHJhd0NhbGxzOmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJHZW9tZXRyeTogLmNsZWFyRHJhd0NhbGxzKCkgaXMgbm93IC5jbGVhckdyb3VwcygpLiIpO3RoaXMuY2xlYXJHcm91cHMoKX0sY29tcHV0ZVRhbmdlbnRzOmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJHZW9tZXRyeTogLmNvbXB1dGVUYW5nZW50cygpIGhhcyBiZWVuIHJlbW92ZWQuIil9LGNvbXB1dGVPZmZzZXRzOmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJHZW9tZXRyeTogLmNvbXB1dGVPZmZzZXRzKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX19KTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyh4YS5wcm90b3R5cGUse2RyYXdjYWxsczp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5kcmF3Y2FsbHMgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ3JvdXBzLiIpOwpyZXR1cm4gdGhpcy5ncm91cHN9fSxvZmZzZXRzOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAub2Zmc2V0cyBoYXMgYmVlbiByZW5hbWVkIHRvIC5ncm91cHMuIik7cmV0dXJuIHRoaXMuZ3JvdXBzfX19KTtPYmplY3QuYXNzaWduKG1kLnByb3RvdHlwZSx7Z2V0QXJyYXlzOmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuRXh0cnVkZUJ1ZmZlckdlb21ldHJ5OiAuZ2V0QXJyYXlzKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sYWRkU2hhcGVMaXN0OmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuRXh0cnVkZUJ1ZmZlckdlb21ldHJ5OiAuYWRkU2hhcGVMaXN0KCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sYWRkU2hhcGU6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5FeHRydWRlQnVmZmVyR2VvbWV0cnk6IC5hZGRTaGFwZSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9fSk7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRGgucHJvdG90eXBlLAp7ZHluYW1pYzp7c2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5Vbmlmb3JtOiAuZHluYW1pYyBoYXMgYmVlbiByZW1vdmVkLiBVc2Ugb2JqZWN0Lm9uQmVmb3JlUmVuZGVyKCkgaW5zdGVhZC4iKX19LG9uVXBkYXRlOnt2YWx1ZTpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuVW5pZm9ybTogLm9uVXBkYXRlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG9iamVjdC5vbkJlZm9yZVJlbmRlcigpIGluc3RlYWQuIik7cmV0dXJuIHRoaXN9fX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEdhLnByb3RvdHlwZSx7d3JhcEFyb3VuZDp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5NYXRlcmlhbDogLndyYXBBcm91bmQgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5NYXRlcmlhbDogLndyYXBBcm91bmQgaGFzIGJlZW4gcmVtb3ZlZC4iKX19LG92ZXJkcmF3OntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsOiAub3ZlcmRyYXcgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sCnNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0ZXJpYWw6IC5vdmVyZHJhdyBoYXMgYmVlbiByZW1vdmVkLiIpfX0sd3JhcFJHQjp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5NYXRlcmlhbDogLndyYXBSR0IgaGFzIGJlZW4gcmVtb3ZlZC4iKTtyZXR1cm4gbmV3IEJ9fSxzaGFkaW5nOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS4iK3RoaXMudHlwZSsiOiAuc2hhZGluZyBoYXMgYmVlbiByZW1vdmVkLiBVc2UgdGhlIGJvb2xlYW4gLmZsYXRTaGFkaW5nIGluc3RlYWQuIil9LHNldDpmdW5jdGlvbihiKXtjb25zb2xlLndhcm4oIlRIUkVFLiIrdGhpcy50eXBlKyI6IC5zaGFkaW5nIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSB0aGUgYm9vbGVhbiAuZmxhdFNoYWRpbmcgaW5zdGVhZC4iKTt0aGlzLmZsYXRTaGFkaW5nPTE9PT1ifX19KTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhUYy5wcm90b3R5cGUse21ldGFsOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk1lc2hQaG9uZ01hdGVyaWFsOiAubWV0YWwgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFRIUkVFLk1lc2hTdGFuZGFyZE1hdGVyaWFsIGluc3RlYWQuIik7CnJldHVybiExfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk1lc2hQaG9uZ01hdGVyaWFsOiAubWV0YWwgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFRIUkVFLk1lc2hTdGFuZGFyZE1hdGVyaWFsIGluc3RlYWQiKX19fSk7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZGIucHJvdG90eXBlLHtkZXJpdmF0aXZlczp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5TaGFkZXJNYXRlcmlhbDogLmRlcml2YXRpdmVzIGhhcyBiZWVuIG1vdmVkIHRvIC5leHRlbnNpb25zLmRlcml2YXRpdmVzLiIpO3JldHVybiB0aGlzLmV4dGVuc2lvbnMuZGVyaXZhdGl2ZXN9LHNldDpmdW5jdGlvbihiKXtjb25zb2xlLndhcm4oIlRIUkVFLiBTaGFkZXJNYXRlcmlhbDogLmRlcml2YXRpdmVzIGhhcyBiZWVuIG1vdmVkIHRvIC5leHRlbnNpb25zLmRlcml2YXRpdmVzLiIpO3RoaXMuZXh0ZW5zaW9ucy5kZXJpdmF0aXZlcz1ifX19KTtPYmplY3QuYXNzaWduKHRpLnByb3RvdHlwZSwKe2NsZWFyVGFyZ2V0OmZ1bmN0aW9uKGIsZSxoLG4pe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmNsZWFyVGFyZ2V0KCkgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIC5zZXRSZW5kZXJUYXJnZXQoKSBhbmQgLmNsZWFyKCkgaW5zdGVhZC4iKTt0aGlzLnNldFJlbmRlclRhcmdldChiKTt0aGlzLmNsZWFyKGUsaCxuKX0sYW5pbWF0ZTpmdW5jdGlvbihiKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5hbmltYXRlKCkgaXMgbm93IC5zZXRBbmltYXRpb25Mb29wKCkuIik7dGhpcy5zZXRBbmltYXRpb25Mb29wKGIpfSxnZXRDdXJyZW50UmVuZGVyVGFyZ2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZ2V0Q3VycmVudFJlbmRlclRhcmdldCgpIGlzIG5vdyAuZ2V0UmVuZGVyVGFyZ2V0KCkuIik7cmV0dXJuIHRoaXMuZ2V0UmVuZGVyVGFyZ2V0KCl9LGdldE1heEFuaXNvdHJvcHk6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nZXRNYXhBbmlzb3Ryb3B5KCkgaXMgbm93IC5jYXBhYmlsaXRpZXMuZ2V0TWF4QW5pc290cm9weSgpLiIpOwpyZXR1cm4gdGhpcy5jYXBhYmlsaXRpZXMuZ2V0TWF4QW5pc290cm9weSgpfSxnZXRQcmVjaXNpb246ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nZXRQcmVjaXNpb24oKSBpcyBub3cgLmNhcGFiaWxpdGllcy5wcmVjaXNpb24uIik7cmV0dXJuIHRoaXMuY2FwYWJpbGl0aWVzLnByZWNpc2lvbn0scmVzZXRHTFN0YXRlOmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAucmVzZXRHTFN0YXRlKCkgaXMgbm93IC5zdGF0ZS5yZXNldCgpLiIpO3JldHVybiB0aGlzLnN0YXRlLnJlc2V0KCl9LHN1cHBvcnRzRmxvYXRUZXh0dXJlczpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnN1cHBvcnRzRmxvYXRUZXh0dXJlcygpIGlzIG5vdyAuZXh0ZW5zaW9ucy5nZXQoICdPRVNfdGV4dHVyZV9mbG9hdCcgKS4iKTtyZXR1cm4gdGhpcy5leHRlbnNpb25zLmdldCgiT0VTX3RleHR1cmVfZmxvYXQiKX0sCnN1cHBvcnRzSGFsZkZsb2F0VGV4dHVyZXM6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zdXBwb3J0c0hhbGZGbG9hdFRleHR1cmVzKCkgaXMgbm93IC5leHRlbnNpb25zLmdldCggJ09FU190ZXh0dXJlX2hhbGZfZmxvYXQnICkuIik7cmV0dXJuIHRoaXMuZXh0ZW5zaW9ucy5nZXQoIk9FU190ZXh0dXJlX2hhbGZfZmxvYXQiKX0sc3VwcG9ydHNTdGFuZGFyZERlcml2YXRpdmVzOmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNTdGFuZGFyZERlcml2YXRpdmVzKCkgaXMgbm93IC5leHRlbnNpb25zLmdldCggJ09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcycgKS4iKTtyZXR1cm4gdGhpcy5leHRlbnNpb25zLmdldCgiT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIil9LHN1cHBvcnRzQ29tcHJlc3NlZFRleHR1cmVTM1RDOmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNDb21wcmVzc2VkVGV4dHVyZVMzVEMoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCAnV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMnICkuIik7CnJldHVybiB0aGlzLmV4dGVuc2lvbnMuZ2V0KCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0YyIpfSxzdXBwb3J0c0NvbXByZXNzZWRUZXh0dXJlUFZSVEM6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zdXBwb3J0c0NvbXByZXNzZWRUZXh0dXJlUFZSVEMoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCAnV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjJyApLiIpO3JldHVybiB0aGlzLmV4dGVuc2lvbnMuZ2V0KCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfcHZydGMiKX0sc3VwcG9ydHNCbGVuZE1pbk1heDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnN1cHBvcnRzQmxlbmRNaW5NYXgoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCAnRVhUX2JsZW5kX21pbm1heCcgKS4iKTtyZXR1cm4gdGhpcy5leHRlbnNpb25zLmdldCgiRVhUX2JsZW5kX21pbm1heCIpfSxzdXBwb3J0c1ZlcnRleFRleHR1cmVzOmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNWZXJ0ZXhUZXh0dXJlcygpIGlzIG5vdyAuY2FwYWJpbGl0aWVzLnZlcnRleFRleHR1cmVzLiIpOwpyZXR1cm4gdGhpcy5jYXBhYmlsaXRpZXMudmVydGV4VGV4dHVyZXN9LHN1cHBvcnRzSW5zdGFuY2VkQXJyYXlzOmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNJbnN0YW5jZWRBcnJheXMoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCAnQU5HTEVfaW5zdGFuY2VkX2FycmF5cycgKS4iKTtyZXR1cm4gdGhpcy5leHRlbnNpb25zLmdldCgiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpfSxlbmFibGVTY2lzc29yVGVzdDpmdW5jdGlvbihiKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5lbmFibGVTY2lzc29yVGVzdCgpIGlzIG5vdyAuc2V0U2Npc3NvclRlc3QoKS4iKTt0aGlzLnNldFNjaXNzb3JUZXN0KGIpfSxpbml0TWF0ZXJpYWw6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5pbml0TWF0ZXJpYWwoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxhZGRQcmVQbHVnaW46ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5hZGRQcmVQbHVnaW4oKSBoYXMgYmVlbiByZW1vdmVkLiIpfSwKYWRkUG9zdFBsdWdpbjpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmFkZFBvc3RQbHVnaW4oKSBoYXMgYmVlbiByZW1vdmVkLiIpfSx1cGRhdGVTaGFkb3dNYXA6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC51cGRhdGVTaGFkb3dNYXAoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxzZXRGYWNlQ3VsbGluZzpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNldEZhY2VDdWxsaW5nKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sYWxsb2NUZXh0dXJlVW5pdDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmFsbG9jVGV4dHVyZVVuaXQoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxzZXRUZXh0dXJlOmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2V0VGV4dHVyZSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LHNldFRleHR1cmUyRDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNldFRleHR1cmUyRCgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LApzZXRUZXh0dXJlQ3ViZTpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNldFRleHR1cmVDdWJlKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX19KTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0aS5wcm90b3R5cGUse3NoYWRvd01hcEVuYWJsZWQ6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNoYWRvd01hcC5lbmFibGVkfSxzZXQ6ZnVuY3Rpb24oYil7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwRW5hYmxlZCBpcyBub3cgLnNoYWRvd01hcC5lbmFibGVkLiIpO3RoaXMuc2hhZG93TWFwLmVuYWJsZWQ9Yn19LHNoYWRvd01hcFR5cGU6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNoYWRvd01hcC50eXBlfSxzZXQ6ZnVuY3Rpb24oYil7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwVHlwZSBpcyBub3cgLnNoYWRvd01hcC50eXBlLiIpO3RoaXMuc2hhZG93TWFwLnR5cGU9Yn19LApzaGFkb3dNYXBDdWxsRmFjZTp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwQ3VsbEZhY2UgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IE1hdGVyaWFsLnNoYWRvd1NpZGUgaW5zdGVhZC4iKX0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwQ3VsbEZhY2UgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IE1hdGVyaWFsLnNoYWRvd1NpZGUgaW5zdGVhZC4iKX19fSk7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMobWwucHJvdG90eXBlLHtjdWxsRmFjZTp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwLmN1bGxGYWNlIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuIil9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcC5jdWxsRmFjZSBoYXMgYmVlbiByZW1vdmVkLiBTZXQgTWF0ZXJpYWwuc2hhZG93U2lkZSBpbnN0ZWFkLiIpfX0sCnJlbmRlclJldmVyc2VTaWRlZDp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwLnJlbmRlclJldmVyc2VTaWRlZCBoYXMgYmVlbiByZW1vdmVkLiBTZXQgTWF0ZXJpYWwuc2hhZG93U2lkZSBpbnN0ZWFkLiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXAucmVuZGVyUmV2ZXJzZVNpZGVkIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuIil9fSxyZW5kZXJTaW5nbGVTaWRlZDp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwLnJlbmRlclNpbmdsZVNpZGVkIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuIil9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcC5yZW5kZXJTaW5nbGVTaWRlZCBoYXMgYmVlbiByZW1vdmVkLiBTZXQgTWF0ZXJpYWwuc2hhZG93U2lkZSBpbnN0ZWFkLiIpfX19KTsKT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoci5wcm90b3R5cGUse2FjdGl2ZUN1YmVGYWNlOntzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0Q3ViZTogLmFjdGl2ZUN1YmVGYWNlIGhhcyBiZWVuIHJlbW92ZWQuIEl0IGlzIG5vdyB0aGUgc2Vjb25kIHBhcmFtZXRlciBvZiBXZWJHTFJlbmRlcmVyLnNldFJlbmRlclRhcmdldCgpLiIpfX0sYWN0aXZlTWlwTWFwTGV2ZWw6e3NldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXRDdWJlOiAuYWN0aXZlTWlwTWFwTGV2ZWwgaGFzIGJlZW4gcmVtb3ZlZC4gSXQgaXMgbm93IHRoZSB0aGlyZCBwYXJhbWV0ZXIgb2YgV2ViR0xSZW5kZXJlci5zZXRSZW5kZXJUYXJnZXQoKS4iKX19fSk7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMocC5wcm90b3R5cGUse3dyYXBTOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAud3JhcFMgaXMgbm93IC50ZXh0dXJlLndyYXBTLiIpOwpyZXR1cm4gdGhpcy50ZXh0dXJlLndyYXBTfSxzZXQ6ZnVuY3Rpb24oYil7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLndyYXBTIGlzIG5vdyAudGV4dHVyZS53cmFwUy4iKTt0aGlzLnRleHR1cmUud3JhcFM9Yn19LHdyYXBUOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAud3JhcFQgaXMgbm93IC50ZXh0dXJlLndyYXBULiIpO3JldHVybiB0aGlzLnRleHR1cmUud3JhcFR9LHNldDpmdW5jdGlvbihiKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAud3JhcFQgaXMgbm93IC50ZXh0dXJlLndyYXBULiIpO3RoaXMudGV4dHVyZS53cmFwVD1ifX0sbWFnRmlsdGVyOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAubWFnRmlsdGVyIGlzIG5vdyAudGV4dHVyZS5tYWdGaWx0ZXIuIik7cmV0dXJuIHRoaXMudGV4dHVyZS5tYWdGaWx0ZXJ9LApzZXQ6ZnVuY3Rpb24oYil7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLm1hZ0ZpbHRlciBpcyBub3cgLnRleHR1cmUubWFnRmlsdGVyLiIpO3RoaXMudGV4dHVyZS5tYWdGaWx0ZXI9Yn19LG1pbkZpbHRlcjp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLm1pbkZpbHRlciBpcyBub3cgLnRleHR1cmUubWluRmlsdGVyLiIpO3JldHVybiB0aGlzLnRleHR1cmUubWluRmlsdGVyfSxzZXQ6ZnVuY3Rpb24oYil7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLm1pbkZpbHRlciBpcyBub3cgLnRleHR1cmUubWluRmlsdGVyLiIpO3RoaXMudGV4dHVyZS5taW5GaWx0ZXI9Yn19LGFuaXNvdHJvcHk6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5hbmlzb3Ryb3B5IGlzIG5vdyAudGV4dHVyZS5hbmlzb3Ryb3B5LiIpO3JldHVybiB0aGlzLnRleHR1cmUuYW5pc290cm9weX0sCnNldDpmdW5jdGlvbihiKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAuYW5pc290cm9weSBpcyBub3cgLnRleHR1cmUuYW5pc290cm9weS4iKTt0aGlzLnRleHR1cmUuYW5pc290cm9weT1ifX0sb2Zmc2V0OntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAub2Zmc2V0IGlzIG5vdyAudGV4dHVyZS5vZmZzZXQuIik7cmV0dXJuIHRoaXMudGV4dHVyZS5vZmZzZXR9LHNldDpmdW5jdGlvbihiKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAub2Zmc2V0IGlzIG5vdyAudGV4dHVyZS5vZmZzZXQuIik7dGhpcy50ZXh0dXJlLm9mZnNldD1ifX0scmVwZWF0OntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAucmVwZWF0IGlzIG5vdyAudGV4dHVyZS5yZXBlYXQuIik7cmV0dXJuIHRoaXMudGV4dHVyZS5yZXBlYXR9LHNldDpmdW5jdGlvbihiKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAucmVwZWF0IGlzIG5vdyAudGV4dHVyZS5yZXBlYXQuIik7CnRoaXMudGV4dHVyZS5yZXBlYXQ9Yn19LGZvcm1hdDp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLmZvcm1hdCBpcyBub3cgLnRleHR1cmUuZm9ybWF0LiIpO3JldHVybiB0aGlzLnRleHR1cmUuZm9ybWF0fSxzZXQ6ZnVuY3Rpb24oYil7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLmZvcm1hdCBpcyBub3cgLnRleHR1cmUuZm9ybWF0LiIpO3RoaXMudGV4dHVyZS5mb3JtYXQ9Yn19LHR5cGU6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC50eXBlIGlzIG5vdyAudGV4dHVyZS50eXBlLiIpO3JldHVybiB0aGlzLnRleHR1cmUudHlwZX0sc2V0OmZ1bmN0aW9uKGIpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC50eXBlIGlzIG5vdyAudGV4dHVyZS50eXBlLiIpO3RoaXMudGV4dHVyZS50eXBlPWJ9fSxnZW5lcmF0ZU1pcG1hcHM6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5nZW5lcmF0ZU1pcG1hcHMgaXMgbm93IC50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcy4iKTsKcmV0dXJuIHRoaXMudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHN9LHNldDpmdW5jdGlvbihiKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAuZ2VuZXJhdGVNaXBtYXBzIGlzIG5vdyAudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHMuIik7dGhpcy50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcz1ifX19KTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhybC5wcm90b3R5cGUse3N0YW5kaW5nOntzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYlZSTWFuYWdlcjogLnN0YW5kaW5nIGhhcyBiZWVuIHJlbW92ZWQuIil9fSx1c2VySGVpZ2h0OntzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYlZSTWFuYWdlcjogLnVzZXJIZWlnaHQgaGFzIGJlZW4gcmVtb3ZlZC4iKX19fSk7amYucHJvdG90eXBlLmxvYWQ9ZnVuY3Rpb24oYil7Y29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogLmxvYWQgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIFRIUkVFLkF1ZGlvTG9hZGVyIGluc3RlYWQuIik7CnZhciBlPXRoaXM7KG5ldyBNaSkubG9hZChiLGZ1bmN0aW9uKGgpe2Uuc2V0QnVmZmVyKGgpfSk7cmV0dXJuIHRoaXN9O1RpLnByb3RvdHlwZS5nZXREYXRhPWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5BdWRpb0FuYWx5c2VyOiAuZ2V0RGF0YSgpIGlzIG5vdyAuZ2V0RnJlcXVlbmN5RGF0YSgpLiIpO3JldHVybiB0aGlzLmdldEZyZXF1ZW5jeURhdGEoKX07eGcucHJvdG90eXBlLnVwZGF0ZUN1YmVNYXA9ZnVuY3Rpb24oYixlKXtjb25zb2xlLndhcm4oIlRIUkVFLkN1YmVDYW1lcmE6IC51cGRhdGVDdWJlTWFwKCkgaXMgbm93IC51cGRhdGUoKS4iKTtyZXR1cm4gdGhpcy51cGRhdGUoYixlKX07WWQuY3Jvc3NPcmlnaW49dm9pZCAwO1lkLmxvYWRUZXh0dXJlPWZ1bmN0aW9uKGIsZSxoLG4pe2NvbnNvbGUud2FybigiVEhSRUUuSW1hZ2VVdGlscy5sb2FkVGV4dHVyZSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgVEhSRUUuVGV4dHVyZUxvYWRlcigpIGluc3RlYWQuIik7dmFyIHU9Cm5ldyBzaDt1LnNldENyb3NzT3JpZ2luKHRoaXMuY3Jvc3NPcmlnaW4pO2I9dS5sb2FkKGIsaCx2b2lkIDAsbik7ZSYmKGIubWFwcGluZz1lKTtyZXR1cm4gYn07WWQubG9hZFRleHR1cmVDdWJlPWZ1bmN0aW9uKGIsZSxoLG4pe2NvbnNvbGUud2FybigiVEhSRUUuSW1hZ2VVdGlscy5sb2FkVGV4dHVyZUN1YmUgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIFRIUkVFLkN1YmVUZXh0dXJlTG9hZGVyKCkgaW5zdGVhZC4iKTt2YXIgdT1uZXcgRmk7dS5zZXRDcm9zc09yaWdpbih0aGlzLmNyb3NzT3JpZ2luKTtiPXUubG9hZChiLGgsdm9pZCAwLG4pO2UmJihiLm1hcHBpbmc9ZSk7cmV0dXJuIGJ9O1lkLmxvYWRDb21wcmVzc2VkVGV4dHVyZT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkltYWdlVXRpbHMubG9hZENvbXByZXNzZWRUZXh0dXJlIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBUSFJFRS5ERFNMb2FkZXIgaW5zdGVhZC4iKX07WWQubG9hZENvbXByZXNzZWRUZXh0dXJlQ3ViZT0KZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5JbWFnZVV0aWxzLmxvYWRDb21wcmVzc2VkVGV4dHVyZUN1YmUgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFRIUkVFLkREU0xvYWRlciBpbnN0ZWFkLiIpfTthLldlYkdMTXVsdGlzYW1wbGVSZW5kZXJUYXJnZXQ9cTthLldlYkdMUmVuZGVyVGFyZ2V0Q3ViZT1yO2EuV2ViR0xSZW5kZXJUYXJnZXQ9cDthLldlYkdMUmVuZGVyZXI9dGk7YS5TaGFkZXJMaWI9aWQ7YS5Vbmlmb3Jtc0xpYj1iYjthLlVuaWZvcm1zVXRpbHM9bHA7YS5TaGFkZXJDaHVuaz16YjthLkZvZ0V4cDI9Z2g7YS5Gb2c9aGg7YS5TY2VuZT1paDthLlNwcml0ZT1TZjthLkxPRD1UZjthLlNraW5uZWRNZXNoPVVmO2EuU2tlbGV0b249amg7YS5Cb25lPXppO2EuTWVzaD10YjthLkxpbmVTZWdtZW50cz1QYjthLkxpbmVMb29wPWtoO2EuTGluZT1sYzthLlBvaW50cz1SZTthLkdyb3VwPU5lO2EuVmlkZW9UZXh0dXJlPUFpO2EuRGF0YVRleHR1cmU9dDthLkRhdGFUZXh0dXJlMkRBcnJheT0KS2U7YS5EYXRhVGV4dHVyZTNEPUxlO2EuQ29tcHJlc3NlZFRleHR1cmU9U2U7YS5DdWJlVGV4dHVyZT11ZDthLkNhbnZhc1RleHR1cmU9VmY7YS5EZXB0aFRleHR1cmU9V2Y7YS5UZXh0dXJlPWs7YS5BbmltYXRpb25Mb2FkZXI9RWw7YS5Db21wcmVzc2VkVGV4dHVyZUxvYWRlcj1GbDthLkRhdGFUZXh0dXJlTG9hZGVyPUVpO2EuQ3ViZVRleHR1cmVMb2FkZXI9Rmk7YS5UZXh0dXJlTG9hZGVyPXNoO2EuT2JqZWN0TG9hZGVyPUlpO2EuTWF0ZXJpYWxMb2FkZXI9Qmg7YS5CdWZmZXJHZW9tZXRyeUxvYWRlcj1IaTthLkRlZmF1bHRMb2FkaW5nTWFuYWdlcj1BYzthLkxvYWRpbmdNYW5hZ2VyPURpO2EuSW1hZ2VMb2FkZXI9c2c7YS5JbWFnZUJpdG1hcExvYWRlcj1KaTthLkZvbnRMb2FkZXI9SGw7YS5GaWxlTG9hZGVyPVVjO2EuTG9hZGVyPXdnO2EuTG9hZGVyVXRpbHM9aGo7YS5DYWNoZT14ZTthLkF1ZGlvTG9hZGVyPU1pO2EuU3BvdExpZ2h0U2hhZG93PXVoO2EuU3BvdExpZ2h0PXZoOwphLlBvaW50TGlnaHQ9d2g7YS5SZWN0QXJlYUxpZ2h0PUFoO2EuSGVtaXNwaGVyZUxpZ2h0PXRoO2EuSGVtaXNwaGVyZUxpZ2h0UHJvYmU9Tmk7YS5EaXJlY3Rpb25hbExpZ2h0U2hhZG93PXhoO2EuRGlyZWN0aW9uYWxMaWdodD15aDthLkFtYmllbnRMaWdodD16aDthLkFtYmllbnRMaWdodFByb2JlPU9pO2EuTGlnaHRTaGFkb3c9d2U7YS5MaWdodD1TYjthLkxpZ2h0UHJvYmU9JGM7YS5TdGVyZW9DYW1lcmE9SWw7YS5QZXJzcGVjdGl2ZUNhbWVyYT1jYzthLk9ydGhvZ3JhcGhpY0NhbWVyYT12ZzthLkN1YmVDYW1lcmE9eGc7YS5BcnJheUNhbWVyYT1QZjthLkNhbWVyYT1qZDthLkF1ZGlvTGlzdGVuZXI9UWk7YS5Qb3NpdGlvbmFsQXVkaW89U2k7YS5BdWRpb0NvbnRleHQ9Umk7YS5BdWRpb0FuYWx5c2VyPVRpO2EuQXVkaW89amY7YS5WZWN0b3JLZXlmcmFtZVRyYWNrPWdmO2EuU3RyaW5nS2V5ZnJhbWVUcmFjaz1yaDthLlF1YXRlcm5pb25LZXlmcmFtZVRyYWNrPXJnO2EuTnVtYmVyS2V5ZnJhbWVUcmFjaz0KZmY7YS5Db2xvcktleWZyYW1lVHJhY2s9cGg7YS5Cb29sZWFuS2V5ZnJhbWVUcmFjaz1vaDthLlByb3BlcnR5TWl4ZXI9VWk7YS5Qcm9wZXJ0eUJpbmRpbmc9c2M7YS5LZXlmcmFtZVRyYWNrPW1jO2EuQW5pbWF0aW9uVXRpbHM9Z2M7YS5BbmltYXRpb25PYmplY3RHcm91cD1LbDthLkFuaW1hdGlvbk1peGVyPVZpO2EuQW5pbWF0aW9uQ2xpcD1JYzthLlVuaWZvcm09RGg7YS5JbnN0YW5jZWRCdWZmZXJHZW9tZXRyeT1XaTthLkJ1ZmZlckdlb21ldHJ5PXhhO2EuR2VvbWV0cnk9TjthLkludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlPVJmO2EuSW5zdGFuY2VkSW50ZXJsZWF2ZWRCdWZmZXI9WGk7YS5JbnRlcmxlYXZlZEJ1ZmZlcj1oZTthLkluc3RhbmNlZEJ1ZmZlckF0dHJpYnV0ZT1ZaTthLkZhY2UzPUw7YS5PYmplY3QzRD1TO2EuUmF5Y2FzdGVyPU1sO2EuTGF5ZXJzPVA7YS5FdmVudERpc3BhdGNoZXI9YzthLkNsb2NrPVBpO2EuUXVhdGVybmlvbkxpbmVhckludGVycG9sYW50PXFoOwphLkxpbmVhckludGVycG9sYW50PXFnO2EuRGlzY3JldGVJbnRlcnBvbGFudD1uaDthLkN1YmljSW50ZXJwb2xhbnQ9bWg7YS5JbnRlcnBvbGFudD1EYzthLlRyaWFuZ2xlPUNiO2EuTWF0aD1vYjthLlNwaGVyaWNhbD1PbDthLkN5bGluZHJpY2FsPVBsO2EuUGxhbmU9eTthLkZydXN0dW09eDthLlNwaGVyZT1BO2EuUmF5PXhiO2EuTWF0cml4ND1DO2EuTWF0cml4Mz1sO2EuQm94Mz12O2EuQm94Mj0kaTthLkxpbmUzPWFqO2EuRXVsZXI9SjthLlZlY3RvcjQ9bTthLlZlY3RvcjM9ZzthLlZlY3RvcjI9ZDthLlF1YXRlcm5pb249ZjthLkNvbG9yPUI7YS5TcGhlcmljYWxIYXJtb25pY3MzPUNoO2EuSW1tZWRpYXRlUmVuZGVyT2JqZWN0PXlnO2EuVmVydGV4Tm9ybWFsc0hlbHBlcj16ZzthLlNwb3RMaWdodEhlbHBlcj1rZjthLlNrZWxldG9uSGVscGVyPWxmO2EuUG9pbnRMaWdodEhlbHBlcj1tZjthLlJlY3RBcmVhTGlnaHRIZWxwZXI9bmY7YS5IZW1pc3BoZXJlTGlnaHRIZWxwZXI9b2Y7CmEuTGlnaHRQcm9iZUhlbHBlcj1wZjthLkdyaWRIZWxwZXI9RWg7YS5Qb2xhckdyaWRIZWxwZXI9Rmg7YS5Qb3NpdGlvbmFsQXVkaW9IZWxwZXI9cWY7YS5GYWNlTm9ybWFsc0hlbHBlcj1BZzthLkRpcmVjdGlvbmFsTGlnaHRIZWxwZXI9cmY7YS5DYW1lcmFIZWxwZXI9Qmc7YS5Cb3hIZWxwZXI9QmQ7YS5Cb3gzSGVscGVyPUNnO2EuUGxhbmVIZWxwZXI9RGc7YS5BcnJvd0hlbHBlcj1DZDthLkF4ZXNIZWxwZXI9RWc7YS5TaGFwZT1YZDthLlBhdGg9WmM7YS5TaGFwZVBhdGg9S2k7YS5Gb250PUxpO2EuQ3VydmVQYXRoPUFkO2EuQ3VydmU9ZWI7YS5JbWFnZVV0aWxzPVlkO2EuU2hhcGVVdGlscz15ZDthLldlYkdMVXRpbHM9bmw7YS5XaXJlZnJhbWVHZW9tZXRyeT1UZTthLlBhcmFtZXRyaWNHZW9tZXRyeT1YZjthLlBhcmFtZXRyaWNCdWZmZXJHZW9tZXRyeT1VZTthLlRldHJhaGVkcm9uR2VvbWV0cnk9WmY7YS5UZXRyYWhlZHJvbkJ1ZmZlckdlb21ldHJ5PVZlO2EuT2N0YWhlZHJvbkdlb21ldHJ5PQokZjthLk9jdGFoZWRyb25CdWZmZXJHZW9tZXRyeT1pZTthLkljb3NhaGVkcm9uR2VvbWV0cnk9YWc7YS5JY29zYWhlZHJvbkJ1ZmZlckdlb21ldHJ5PVdlO2EuRG9kZWNhaGVkcm9uR2VvbWV0cnk9Ymc7YS5Eb2RlY2FoZWRyb25CdWZmZXJHZW9tZXRyeT1YZTthLlBvbHloZWRyb25HZW9tZXRyeT1ZZjthLlBvbHloZWRyb25CdWZmZXJHZW9tZXRyeT16YzthLlR1YmVHZW9tZXRyeT1jZzthLlR1YmVCdWZmZXJHZW9tZXRyeT1qZTthLlRvcnVzS25vdEdlb21ldHJ5PWRnO2EuVG9ydXNLbm90QnVmZmVyR2VvbWV0cnk9WWU7YS5Ub3J1c0dlb21ldHJ5PWVnO2EuVG9ydXNCdWZmZXJHZW9tZXRyeT1aZTthLlRleHRHZW9tZXRyeT1qZzthLlRleHRCdWZmZXJHZW9tZXRyeT0kZTthLlNwaGVyZUdlb21ldHJ5PWtnO2EuU3BoZXJlQnVmZmVyR2VvbWV0cnk9V2Q7YS5SaW5nR2VvbWV0cnk9bGc7YS5SaW5nQnVmZmVyR2VvbWV0cnk9YWY7YS5QbGFuZUdlb21ldHJ5PVNhO2EuUGxhbmVCdWZmZXJHZW9tZXRyeT0KRWE7YS5MYXRoZUdlb21ldHJ5PW1nO2EuTGF0aGVCdWZmZXJHZW9tZXRyeT1iZjthLlNoYXBlR2VvbWV0cnk9bWU7YS5TaGFwZUJ1ZmZlckdlb21ldHJ5PW5lO2EuRXh0cnVkZUdlb21ldHJ5PWxlO2EuRXh0cnVkZUJ1ZmZlckdlb21ldHJ5PW1kO2EuRWRnZXNHZW9tZXRyeT1jZjthLkNvbmVHZW9tZXRyeT1uZzthLkNvbmVCdWZmZXJHZW9tZXRyeT1vZzthLkN5bGluZGVyR2VvbWV0cnk9b2U7YS5DeWxpbmRlckJ1ZmZlckdlb21ldHJ5PXpkO2EuQ2lyY2xlR2VvbWV0cnk9cGc7YS5DaXJjbGVCdWZmZXJHZW9tZXRyeT1kZjthLkJveEdlb21ldHJ5PXphO2EuQ3ViZUdlb21ldHJ5PXphO2EuQm94QnVmZmVyR2VvbWV0cnk9RmE7YS5TaGFkb3dNYXRlcmlhbD1wZTthLlNwcml0ZU1hdGVyaWFsPVZkO2EuUmF3U2hhZGVyTWF0ZXJpYWw9ZWY7YS5TaGFkZXJNYXRlcmlhbD1kYjthLlBvaW50c01hdGVyaWFsPVNjO2EuTWVzaFBoeXNpY2FsTWF0ZXJpYWw9cWU7YS5NZXNoU3RhbmRhcmRNYXRlcmlhbD0KbmQ7YS5NZXNoUGhvbmdNYXRlcmlhbD1UYzthLk1lc2hUb29uTWF0ZXJpYWw9cmU7YS5NZXNoTm9ybWFsTWF0ZXJpYWw9c2U7YS5NZXNoTGFtYmVydE1hdGVyaWFsPXRlO2EuTWVzaERlcHRoTWF0ZXJpYWw9UGQ7YS5NZXNoRGlzdGFuY2VNYXRlcmlhbD1RZDthLk1lc2hCYXNpY01hdGVyaWFsPXliO2EuTWVzaE1hdGNhcE1hdGVyaWFsPXVlO2EuTGluZURhc2hlZE1hdGVyaWFsPXZlO2EuTGluZUJhc2ljTWF0ZXJpYWw9TGI7YS5NYXRlcmlhbD1HYTthLkZsb2F0NjRCdWZmZXJBdHRyaWJ1dGU9bGE7YS5GbG9hdDMyQnVmZmVyQXR0cmlidXRlPWJhO2EuVWludDMyQnVmZmVyQXR0cmlidXRlPWthO2EuSW50MzJCdWZmZXJBdHRyaWJ1dGU9ZWE7YS5VaW50MTZCdWZmZXJBdHRyaWJ1dGU9Y2E7YS5JbnQxNkJ1ZmZlckF0dHJpYnV0ZT1YO2EuVWludDhDbGFtcGVkQnVmZmVyQXR0cmlidXRlPWhhO2EuVWludDhCdWZmZXJBdHRyaWJ1dGU9YWE7YS5JbnQ4QnVmZmVyQXR0cmlidXRlPVk7YS5CdWZmZXJBdHRyaWJ1dGU9ClQ7YS5BcmNDdXJ2ZT1oZjthLkNhdG11bGxSb21DdXJ2ZTM9cmM7YS5DdWJpY0JlemllckN1cnZlPVZjO2EuQ3ViaWNCZXppZXJDdXJ2ZTM9b2Q7YS5FbGxpcHNlQ3VydmU9RWM7YS5MaW5lQ3VydmU9QmM7YS5MaW5lQ3VydmUzPVdjO2EuUXVhZHJhdGljQmV6aWVyQ3VydmU9WGM7YS5RdWFkcmF0aWNCZXppZXJDdXJ2ZTM9cGQ7YS5TcGxpbmVDdXJ2ZT1ZYzthLlJFVklTSU9OPSIxMDQiO2EuTU9VU0U9e0xFRlQ6MCxNSURETEU6MSxSSUdIVDoyfTthLkN1bGxGYWNlTm9uZT0wO2EuQ3VsbEZhY2VCYWNrPTE7YS5DdWxsRmFjZUZyb250PTI7YS5DdWxsRmFjZUZyb250QmFjaz0zO2EuRnJvbnRGYWNlRGlyZWN0aW9uQ1c9MDthLkZyb250RmFjZURpcmVjdGlvbkNDVz0xO2EuQmFzaWNTaGFkb3dNYXA9MDthLlBDRlNoYWRvd01hcD0xO2EuUENGU29mdFNoYWRvd01hcD0yO2EuRnJvbnRTaWRlPTA7YS5CYWNrU2lkZT0xO2EuRG91YmxlU2lkZT0yO2EuRmxhdFNoYWRpbmc9MTthLlNtb290aFNoYWRpbmc9CjI7YS5Ob0NvbG9ycz0wO2EuRmFjZUNvbG9ycz0xO2EuVmVydGV4Q29sb3JzPTI7YS5Ob0JsZW5kaW5nPTA7YS5Ob3JtYWxCbGVuZGluZz0xO2EuQWRkaXRpdmVCbGVuZGluZz0yO2EuU3VidHJhY3RpdmVCbGVuZGluZz0zO2EuTXVsdGlwbHlCbGVuZGluZz00O2EuQ3VzdG9tQmxlbmRpbmc9NTthLkFkZEVxdWF0aW9uPTEwMDthLlN1YnRyYWN0RXF1YXRpb249MTAxO2EuUmV2ZXJzZVN1YnRyYWN0RXF1YXRpb249MTAyO2EuTWluRXF1YXRpb249MTAzO2EuTWF4RXF1YXRpb249MTA0O2EuWmVyb0ZhY3Rvcj0yMDA7YS5PbmVGYWN0b3I9MjAxO2EuU3JjQ29sb3JGYWN0b3I9MjAyO2EuT25lTWludXNTcmNDb2xvckZhY3Rvcj0yMDM7YS5TcmNBbHBoYUZhY3Rvcj0yMDQ7YS5PbmVNaW51c1NyY0FscGhhRmFjdG9yPTIwNTthLkRzdEFscGhhRmFjdG9yPTIwNjthLk9uZU1pbnVzRHN0QWxwaGFGYWN0b3I9MjA3O2EuRHN0Q29sb3JGYWN0b3I9MjA4O2EuT25lTWludXNEc3RDb2xvckZhY3Rvcj0KMjA5O2EuU3JjQWxwaGFTYXR1cmF0ZUZhY3Rvcj0yMTA7YS5OZXZlckRlcHRoPTA7YS5BbHdheXNEZXB0aD0xO2EuTGVzc0RlcHRoPTI7YS5MZXNzRXF1YWxEZXB0aD0zO2EuRXF1YWxEZXB0aD00O2EuR3JlYXRlckVxdWFsRGVwdGg9NTthLkdyZWF0ZXJEZXB0aD02O2EuTm90RXF1YWxEZXB0aD03O2EuTXVsdGlwbHlPcGVyYXRpb249MDthLk1peE9wZXJhdGlvbj0xO2EuQWRkT3BlcmF0aW9uPTI7YS5Ob1RvbmVNYXBwaW5nPTA7YS5MaW5lYXJUb25lTWFwcGluZz0xO2EuUmVpbmhhcmRUb25lTWFwcGluZz0yO2EuVW5jaGFydGVkMlRvbmVNYXBwaW5nPTM7YS5DaW5lb25Ub25lTWFwcGluZz00O2EuQUNFU0ZpbG1pY1RvbmVNYXBwaW5nPTU7YS5VVk1hcHBpbmc9MzAwO2EuQ3ViZVJlZmxlY3Rpb25NYXBwaW5nPTMwMTthLkN1YmVSZWZyYWN0aW9uTWFwcGluZz0zMDI7YS5FcXVpcmVjdGFuZ3VsYXJSZWZsZWN0aW9uTWFwcGluZz0zMDM7YS5FcXVpcmVjdGFuZ3VsYXJSZWZyYWN0aW9uTWFwcGluZz0KMzA0O2EuU3BoZXJpY2FsUmVmbGVjdGlvbk1hcHBpbmc9MzA1O2EuQ3ViZVVWUmVmbGVjdGlvbk1hcHBpbmc9MzA2O2EuQ3ViZVVWUmVmcmFjdGlvbk1hcHBpbmc9MzA3O2EuUmVwZWF0V3JhcHBpbmc9MUUzO2EuQ2xhbXBUb0VkZ2VXcmFwcGluZz0xMDAxO2EuTWlycm9yZWRSZXBlYXRXcmFwcGluZz0xMDAyO2EuTmVhcmVzdEZpbHRlcj0xMDAzO2EuTmVhcmVzdE1pcE1hcE5lYXJlc3RGaWx0ZXI9MTAwNDthLk5lYXJlc3RNaXBNYXBMaW5lYXJGaWx0ZXI9MTAwNTthLkxpbmVhckZpbHRlcj0xMDA2O2EuTGluZWFyTWlwTWFwTmVhcmVzdEZpbHRlcj0xMDA3O2EuTGluZWFyTWlwTWFwTGluZWFyRmlsdGVyPTEwMDg7YS5VbnNpZ25lZEJ5dGVUeXBlPTEwMDk7YS5CeXRlVHlwZT0xMDEwO2EuU2hvcnRUeXBlPTEwMTE7YS5VbnNpZ25lZFNob3J0VHlwZT0xMDEyO2EuSW50VHlwZT0xMDEzO2EuVW5zaWduZWRJbnRUeXBlPTEwMTQ7YS5GbG9hdFR5cGU9MTAxNTthLkhhbGZGbG9hdFR5cGU9CjEwMTY7YS5VbnNpZ25lZFNob3J0NDQ0NFR5cGU9MTAxNzthLlVuc2lnbmVkU2hvcnQ1NTUxVHlwZT0xMDE4O2EuVW5zaWduZWRTaG9ydDU2NVR5cGU9MTAxOTthLlVuc2lnbmVkSW50MjQ4VHlwZT0xMDIwO2EuQWxwaGFGb3JtYXQ9MTAyMTthLlJHQkZvcm1hdD0xMDIyO2EuUkdCQUZvcm1hdD0xMDIzO2EuTHVtaW5hbmNlRm9ybWF0PTEwMjQ7YS5MdW1pbmFuY2VBbHBoYUZvcm1hdD0xMDI1O2EuUkdCRUZvcm1hdD0xMDIzO2EuRGVwdGhGb3JtYXQ9MTAyNjthLkRlcHRoU3RlbmNpbEZvcm1hdD0xMDI3O2EuUmVkRm9ybWF0PTEwMjg7YS5SR0JfUzNUQ19EWFQxX0Zvcm1hdD0zMzc3NjthLlJHQkFfUzNUQ19EWFQxX0Zvcm1hdD0zMzc3NzthLlJHQkFfUzNUQ19EWFQzX0Zvcm1hdD0zMzc3ODthLlJHQkFfUzNUQ19EWFQ1X0Zvcm1hdD0zMzc3OTthLlJHQl9QVlJUQ180QlBQVjFfRm9ybWF0PTM1ODQwO2EuUkdCX1BWUlRDXzJCUFBWMV9Gb3JtYXQ9MzU4NDE7YS5SR0JBX1BWUlRDXzRCUFBWMV9Gb3JtYXQ9CjM1ODQyO2EuUkdCQV9QVlJUQ18yQlBQVjFfRm9ybWF0PTM1ODQzO2EuUkdCX0VUQzFfRm9ybWF0PTM2MTk2O2EuUkdCQV9BU1RDXzR4NF9Gb3JtYXQ9Mzc4MDg7YS5SR0JBX0FTVENfNXg0X0Zvcm1hdD0zNzgwOTthLlJHQkFfQVNUQ181eDVfRm9ybWF0PTM3ODEwO2EuUkdCQV9BU1RDXzZ4NV9Gb3JtYXQ9Mzc4MTE7YS5SR0JBX0FTVENfNng2X0Zvcm1hdD0zNzgxMjthLlJHQkFfQVNUQ184eDVfRm9ybWF0PTM3ODEzO2EuUkdCQV9BU1RDXzh4Nl9Gb3JtYXQ9Mzc4MTQ7YS5SR0JBX0FTVENfOHg4X0Zvcm1hdD0zNzgxNTthLlJHQkFfQVNUQ18xMHg1X0Zvcm1hdD0zNzgxNjthLlJHQkFfQVNUQ18xMHg2X0Zvcm1hdD0zNzgxNzthLlJHQkFfQVNUQ18xMHg4X0Zvcm1hdD0zNzgxODthLlJHQkFfQVNUQ18xMHgxMF9Gb3JtYXQ9Mzc4MTk7YS5SR0JBX0FTVENfMTJ4MTBfRm9ybWF0PTM3ODIwO2EuUkdCQV9BU1RDXzEyeDEyX0Zvcm1hdD0zNzgyMTthLkxvb3BPbmNlPTIyMDA7YS5Mb29wUmVwZWF0PQoyMjAxO2EuTG9vcFBpbmdQb25nPTIyMDI7YS5JbnRlcnBvbGF0ZURpc2NyZXRlPTIzMDA7YS5JbnRlcnBvbGF0ZUxpbmVhcj0yMzAxO2EuSW50ZXJwb2xhdGVTbW9vdGg9MjMwMjthLlplcm9DdXJ2YXR1cmVFbmRpbmc9MjQwMDthLlplcm9TbG9wZUVuZGluZz0yNDAxO2EuV3JhcEFyb3VuZEVuZGluZz0yNDAyO2EuVHJpYW5nbGVzRHJhd01vZGU9MDthLlRyaWFuZ2xlU3RyaXBEcmF3TW9kZT0xO2EuVHJpYW5nbGVGYW5EcmF3TW9kZT0yO2EuTGluZWFyRW5jb2Rpbmc9M0UzO2Euc1JHQkVuY29kaW5nPTMwMDE7YS5HYW1tYUVuY29kaW5nPTMwMDc7YS5SR0JFRW5jb2Rpbmc9MzAwMjthLkxvZ0x1dkVuY29kaW5nPTMwMDM7YS5SR0JNN0VuY29kaW5nPTMwMDQ7YS5SR0JNMTZFbmNvZGluZz0zMDA1O2EuUkdCREVuY29kaW5nPTMwMDY7YS5CYXNpY0RlcHRoUGFja2luZz0zMjAwO2EuUkdCQURlcHRoUGFja2luZz0zMjAxO2EuVGFuZ2VudFNwYWNlTm9ybWFsTWFwPTA7YS5PYmplY3RTcGFjZU5vcm1hbE1hcD0KMTthLkZhY2U0PWZ1bmN0aW9uKGIsZSxoLG4sdSx3LHope2NvbnNvbGUud2FybigiVEhSRUUuRmFjZTQgaGFzIGJlZW4gcmVtb3ZlZC4gQSBUSFJFRS5GYWNlMyB3aWxsIGJlIGNyZWF0ZWQgaW5zdGVhZC4iKTtyZXR1cm4gbmV3IEwoYixlLGgsdSx3LHopfTthLkxpbmVTdHJpcD0wO2EuTGluZVBpZWNlcz0xO2EuTWVzaEZhY2VNYXRlcmlhbD1mdW5jdGlvbihiKXtjb25zb2xlLndhcm4oIlRIUkVFLk1lc2hGYWNlTWF0ZXJpYWwgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIGFuIEFycmF5IGluc3RlYWQuIik7cmV0dXJuIGJ9O2EuTXVsdGlNYXRlcmlhbD1mdW5jdGlvbihiKXt2b2lkIDA9PT1iJiYoYj1bXSk7Y29uc29sZS53YXJuKCJUSFJFRS5NdWx0aU1hdGVyaWFsIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBhbiBBcnJheSBpbnN0ZWFkLiIpO2IuaXNNdWx0aU1hdGVyaWFsPSEwO2IubWF0ZXJpYWxzPWI7Yi5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBiLnNsaWNlKCl9O3JldHVybiBifTthLlBvaW50Q2xvdWQ9CmZ1bmN0aW9uKGIsZSl7Y29uc29sZS53YXJuKCJUSFJFRS5Qb2ludENsb3VkIGhhcyBiZWVuIHJlbmFtZWQgdG8gVEhSRUUuUG9pbnRzLiIpO3JldHVybiBuZXcgUmUoYixlKX07YS5QYXJ0aWNsZT1mdW5jdGlvbihiKXtjb25zb2xlLndhcm4oIlRIUkVFLlBhcnRpY2xlIGhhcyBiZWVuIHJlbmFtZWQgdG8gVEhSRUUuU3ByaXRlLiIpO3JldHVybiBuZXcgU2YoYil9O2EuUGFydGljbGVTeXN0ZW09ZnVuY3Rpb24oYixlKXtjb25zb2xlLndhcm4oIlRIUkVFLlBhcnRpY2xlU3lzdGVtIGhhcyBiZWVuIHJlbmFtZWQgdG8gVEhSRUUuUG9pbnRzLiIpO3JldHVybiBuZXcgUmUoYixlKX07YS5Qb2ludENsb3VkTWF0ZXJpYWw9ZnVuY3Rpb24oYil7Y29uc29sZS53YXJuKCJUSFJFRS5Qb2ludENsb3VkTWF0ZXJpYWwgaGFzIGJlZW4gcmVuYW1lZCB0byBUSFJFRS5Qb2ludHNNYXRlcmlhbC4iKTtyZXR1cm4gbmV3IFNjKGIpfTthLlBhcnRpY2xlQmFzaWNNYXRlcmlhbD1mdW5jdGlvbihiKXtjb25zb2xlLndhcm4oIlRIUkVFLlBhcnRpY2xlQmFzaWNNYXRlcmlhbCBoYXMgYmVlbiByZW5hbWVkIHRvIFRIUkVFLlBvaW50c01hdGVyaWFsLiIpOwpyZXR1cm4gbmV3IFNjKGIpfTthLlBhcnRpY2xlU3lzdGVtTWF0ZXJpYWw9ZnVuY3Rpb24oYil7Y29uc29sZS53YXJuKCJUSFJFRS5QYXJ0aWNsZVN5c3RlbU1hdGVyaWFsIGhhcyBiZWVuIHJlbmFtZWQgdG8gVEhSRUUuUG9pbnRzTWF0ZXJpYWwuIik7cmV0dXJuIG5ldyBTYyhiKX07YS5WZXJ0ZXg9ZnVuY3Rpb24oYixlLGgpe2NvbnNvbGUud2FybigiVEhSRUUuVmVydGV4IGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBUSFJFRS5WZWN0b3IzIGluc3RlYWQuIik7cmV0dXJuIG5ldyBnKGIsZSxoKX07YS5EeW5hbWljQnVmZmVyQXR0cmlidXRlPWZ1bmN0aW9uKGIsZSl7Y29uc29sZS53YXJuKCJUSFJFRS5EeW5hbWljQnVmZmVyQXR0cmlidXRlIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBuZXcgVEhSRUUuQnVmZmVyQXR0cmlidXRlKCkuc2V0RHluYW1pYyggdHJ1ZSApIGluc3RlYWQuIik7cmV0dXJuKG5ldyBUKGIsZSkpLnNldER5bmFtaWMoITApfTthLkludDhBdHRyaWJ1dGU9ZnVuY3Rpb24oYiwKZSl7Y29uc29sZS53YXJuKCJUSFJFRS5JbnQ4QXR0cmlidXRlIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBuZXcgVEhSRUUuSW50OEJ1ZmZlckF0dHJpYnV0ZSgpIGluc3RlYWQuIik7cmV0dXJuIG5ldyBZKGIsZSl9O2EuVWludDhBdHRyaWJ1dGU9ZnVuY3Rpb24oYixlKXtjb25zb2xlLndhcm4oIlRIUkVFLlVpbnQ4QXR0cmlidXRlIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBuZXcgVEhSRUUuVWludDhCdWZmZXJBdHRyaWJ1dGUoKSBpbnN0ZWFkLiIpO3JldHVybiBuZXcgYWEoYixlKX07YS5VaW50OENsYW1wZWRBdHRyaWJ1dGU9ZnVuY3Rpb24oYixlKXtjb25zb2xlLndhcm4oIlRIUkVFLlVpbnQ4Q2xhbXBlZEF0dHJpYnV0ZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLlVpbnQ4Q2xhbXBlZEJ1ZmZlckF0dHJpYnV0ZSgpIGluc3RlYWQuIik7cmV0dXJuIG5ldyBoYShiLGUpfTthLkludDE2QXR0cmlidXRlPWZ1bmN0aW9uKGIsZSl7Y29uc29sZS53YXJuKCJUSFJFRS5JbnQxNkF0dHJpYnV0ZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLkludDE2QnVmZmVyQXR0cmlidXRlKCkgaW5zdGVhZC4iKTsKcmV0dXJuIG5ldyBYKGIsZSl9O2EuVWludDE2QXR0cmlidXRlPWZ1bmN0aW9uKGIsZSl7Y29uc29sZS53YXJuKCJUSFJFRS5VaW50MTZBdHRyaWJ1dGUgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG5ldyBUSFJFRS5VaW50MTZCdWZmZXJBdHRyaWJ1dGUoKSBpbnN0ZWFkLiIpO3JldHVybiBuZXcgY2EoYixlKX07YS5JbnQzMkF0dHJpYnV0ZT1mdW5jdGlvbihiLGUpe2NvbnNvbGUud2FybigiVEhSRUUuSW50MzJBdHRyaWJ1dGUgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG5ldyBUSFJFRS5JbnQzMkJ1ZmZlckF0dHJpYnV0ZSgpIGluc3RlYWQuIik7cmV0dXJuIG5ldyBlYShiLGUpfTthLlVpbnQzMkF0dHJpYnV0ZT1mdW5jdGlvbihiLGUpe2NvbnNvbGUud2FybigiVEhSRUUuVWludDMyQXR0cmlidXRlIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBuZXcgVEhSRUUuVWludDMyQnVmZmVyQXR0cmlidXRlKCkgaW5zdGVhZC4iKTtyZXR1cm4gbmV3IGthKGIsZSl9O2EuRmxvYXQzMkF0dHJpYnV0ZT1mdW5jdGlvbihiLAplKXtjb25zb2xlLndhcm4oIlRIUkVFLkZsb2F0MzJBdHRyaWJ1dGUgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG5ldyBUSFJFRS5GbG9hdDMyQnVmZmVyQXR0cmlidXRlKCkgaW5zdGVhZC4iKTtyZXR1cm4gbmV3IGJhKGIsZSl9O2EuRmxvYXQ2NEF0dHJpYnV0ZT1mdW5jdGlvbihiLGUpe2NvbnNvbGUud2FybigiVEhSRUUuRmxvYXQ2NEF0dHJpYnV0ZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLkZsb2F0NjRCdWZmZXJBdHRyaWJ1dGUoKSBpbnN0ZWFkLiIpO3JldHVybiBuZXcgbGEoYixlKX07YS5DbG9zZWRTcGxpbmVDdXJ2ZTM9Umw7YS5TcGxpbmVDdXJ2ZTM9U2w7YS5TcGxpbmU9Y2o7YS5BeGlzSGVscGVyPWZ1bmN0aW9uKGIpe2NvbnNvbGUud2FybigiVEhSRUUuQXhpc0hlbHBlciBoYXMgYmVlbiByZW5hbWVkIHRvIFRIUkVFLkF4ZXNIZWxwZXIuIik7cmV0dXJuIG5ldyBFZyhiKX07YS5Cb3VuZGluZ0JveEhlbHBlcj1mdW5jdGlvbihiLGUpe2NvbnNvbGUud2FybigiVEhSRUUuQm91bmRpbmdCb3hIZWxwZXIgaGFzIGJlZW4gZGVwcmVjYXRlZC4gQ3JlYXRpbmcgYSBUSFJFRS5Cb3hIZWxwZXIgaW5zdGVhZC4iKTsKcmV0dXJuIG5ldyBCZChiLGUpfTthLkVkZ2VzSGVscGVyPWZ1bmN0aW9uKGIsZSl7Y29uc29sZS53YXJuKCJUSFJFRS5FZGdlc0hlbHBlciBoYXMgYmVlbiByZW1vdmVkLiBVc2UgVEhSRUUuRWRnZXNHZW9tZXRyeSBpbnN0ZWFkLiIpO3JldHVybiBuZXcgUGIobmV3IGNmKGIuZ2VvbWV0cnkpLG5ldyBMYih7Y29sb3I6dm9pZCAwIT09ZT9lOjE2Nzc3MjE1fSkpfTthLldpcmVmcmFtZUhlbHBlcj1mdW5jdGlvbihiLGUpe2NvbnNvbGUud2FybigiVEhSRUUuV2lyZWZyYW1lSGVscGVyIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBUSFJFRS5XaXJlZnJhbWVHZW9tZXRyeSBpbnN0ZWFkLiIpO3JldHVybiBuZXcgUGIobmV3IFRlKGIuZ2VvbWV0cnkpLG5ldyBMYih7Y29sb3I6dm9pZCAwIT09ZT9lOjE2Nzc3MjE1fSkpfTthLlhIUkxvYWRlcj1mdW5jdGlvbihiKXtjb25zb2xlLndhcm4oIlRIUkVFLlhIUkxvYWRlciBoYXMgYmVlbiByZW5hbWVkIHRvIFRIUkVFLkZpbGVMb2FkZXIuIik7cmV0dXJuIG5ldyBVYyhiKX07CmEuQmluYXJ5VGV4dHVyZUxvYWRlcj1mdW5jdGlvbihiKXtjb25zb2xlLndhcm4oIlRIUkVFLkJpbmFyeVRleHR1cmVMb2FkZXIgaGFzIGJlZW4gcmVuYW1lZCB0byBUSFJFRS5EYXRhVGV4dHVyZUxvYWRlci4iKTtyZXR1cm4gbmV3IEVpKGIpfTthLkdlb21ldHJ5VXRpbHM9e21lcmdlOmZ1bmN0aW9uKGIsZSxoKXtjb25zb2xlLndhcm4oIlRIUkVFLkdlb21ldHJ5VXRpbHM6IC5tZXJnZSgpIGhhcyBiZWVuIG1vdmVkIHRvIEdlb21ldHJ5LiBVc2UgZ2VvbWV0cnkubWVyZ2UoIGdlb21ldHJ5MiwgbWF0cml4LCBtYXRlcmlhbEluZGV4T2Zmc2V0ICkgaW5zdGVhZC4iKTtpZihlLmlzTWVzaCl7ZS5tYXRyaXhBdXRvVXBkYXRlJiZlLnVwZGF0ZU1hdHJpeCgpO3ZhciBuPWUubWF0cml4O2U9ZS5nZW9tZXRyeX1iLm1lcmdlKGUsbixoKX0sY2VudGVyOmZ1bmN0aW9uKGIpe2NvbnNvbGUud2FybigiVEhSRUUuR2VvbWV0cnlVdGlsczogLmNlbnRlcigpIGhhcyBiZWVuIG1vdmVkIHRvIEdlb21ldHJ5LiBVc2UgZ2VvbWV0cnkuY2VudGVyKCkgaW5zdGVhZC4iKTsKcmV0dXJuIGIuY2VudGVyKCl9fTthLlByb2plY3Rvcj1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlByb2plY3RvciBoYXMgYmVlbiBtb3ZlZCB0byAvZXhhbXBsZXMvanMvcmVuZGVyZXJzL1Byb2plY3Rvci5qcy4iKTt0aGlzLnByb2plY3RWZWN0b3I9ZnVuY3Rpb24oYixlKXtjb25zb2xlLndhcm4oIlRIUkVFLlByb2plY3RvcjogLnByb2plY3RWZWN0b3IoKSBpcyBub3cgdmVjdG9yLnByb2plY3QoKS4iKTtiLnByb2plY3QoZSl9O3RoaXMudW5wcm9qZWN0VmVjdG9yPWZ1bmN0aW9uKGIsZSl7Y29uc29sZS53YXJuKCJUSFJFRS5Qcm9qZWN0b3I6IC51bnByb2plY3RWZWN0b3IoKSBpcyBub3cgdmVjdG9yLnVucHJvamVjdCgpLiIpO2IudW5wcm9qZWN0KGUpfTt0aGlzLnBpY2tpbmdSYXk9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9qZWN0b3I6IC5waWNraW5nUmF5KCkgaXMgbm93IHJheWNhc3Rlci5zZXRGcm9tQ2FtZXJhKCkuIil9fTthLkNhbnZhc1JlbmRlcmVyPQpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkNhbnZhc1JlbmRlcmVyIGhhcyBiZWVuIHJlbW92ZWQiKX07YS5KU09OTG9hZGVyPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuSlNPTkxvYWRlciBoYXMgYmVlbiByZW1vdmVkLiIpfTthLlNjZW5lVXRpbHM9e2NyZWF0ZU11bHRpTWF0ZXJpYWxPYmplY3Q6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5TY2VuZVV0aWxzIGhhcyBiZWVuIG1vdmVkIHRvIC9leGFtcGxlcy9qcy91dGlscy9TY2VuZVV0aWxzLmpzIil9LGRldGFjaDpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlNjZW5lVXRpbHMgaGFzIGJlZW4gbW92ZWQgdG8gL2V4YW1wbGVzL2pzL3V0aWxzL1NjZW5lVXRpbHMuanMiKX0sYXR0YWNoOmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuU2NlbmVVdGlscyBoYXMgYmVlbiBtb3ZlZCB0byAvZXhhbXBsZXMvanMvdXRpbHMvU2NlbmVVdGlscy5qcyIpfX07YS5MZW5zRmxhcmU9CmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTGVuc0ZsYXJlIGhhcyBiZWVuIG1vdmVkIHRvIC9leGFtcGxlcy9qcy9vYmplY3RzL0xlbnNmbGFyZS5qcyIpfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoYSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9KTsKPC9zY3JpcHQ+CjxzY3JpcHQ+Ly9+fldFQlBBVEh+fi90Zi1pbXBvcnRzL09yYml0Q29udHJvbHMuanMKVEhSRUUuT3JiaXRDb250cm9scz1mdW5jdGlvbihhLGMpe2Z1bmN0aW9uIGQoKXtyZXR1cm4gMipNYXRoLlBJLzYwLzYwKlguYXV0b1JvdGF0ZVNwZWVkfWZ1bmN0aW9uIGYoKXtyZXR1cm4gTWF0aC5wb3coLjk1LFguem9vbVNwZWVkKX1mdW5jdGlvbiBnKEFhKXt4YS50aGV0YS09QWF9ZnVuY3Rpb24gbChBYSl7eGEucGhpLT1BYX1mdW5jdGlvbiBrKEFhKXtYLm9iamVjdC5pc1BlcnNwZWN0aXZlQ2FtZXJhP3phLz1BYTpYLm9iamVjdC5pc09ydGhvZ3JhcGhpY0NhbWVyYT8oWC5vYmplY3Quem9vbT1NYXRoLm1heChYLm1pblpvb20sTWF0aC5taW4oWC5tYXhab29tLFgub2JqZWN0Lnpvb20qQWEpKSxYLm9iamVjdC51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCksU2E9ITApOihjb25zb2xlLndhcm4oIldBUk5JTkc6IE9yYml0Q29udHJvbHMuanMgZW5jb3VudGVyZWQgYW4gdW5rbm93biBjYW1lcmEgdHlwZSAtIGRvbGx5L3pvb20gZGlzYWJsZWQuIiksWC5lbmFibGVab29tPSExKX1mdW5jdGlvbiBtKEFhKXtYLm9iamVjdC5pc1BlcnNwZWN0aXZlQ2FtZXJhPwp6YSo9QWE6WC5vYmplY3QuaXNPcnRob2dyYXBoaWNDYW1lcmE/KFgub2JqZWN0Lnpvb209TWF0aC5tYXgoWC5taW5ab29tLE1hdGgubWluKFgubWF4Wm9vbSxYLm9iamVjdC56b29tL0FhKSksWC5vYmplY3QudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpLFNhPSEwKTooY29uc29sZS53YXJuKCJXQVJOSU5HOiBPcmJpdENvbnRyb2xzLmpzIGVuY291bnRlcmVkIGFuIHVua25vd24gY2FtZXJhIHR5cGUgLSBkb2xseS96b29tIGRpc2FibGVkLiIpLFguZW5hYmxlWm9vbT0hMSl9ZnVuY3Rpb24gcChBYSl7RWEuc2V0KEFhLmNsaWVudFgsQWEuY2xpZW50WSl9ZnVuY3Rpb24gcShBYSl7dGIuc2V0KEFhLmNsaWVudFgsQWEuY2xpZW50WSl9ZnVuY3Rpb24gcihBYSl7eGIuc2V0KEFhLmNsaWVudFgsQWEuY2xpZW50WSl9ZnVuY3Rpb24gdChBYSl7R2Euc2V0KEFhLmNsaWVudFgsQWEuY2xpZW50WSk7ZGIuc3ViVmVjdG9ycyhHYSxFYSkubXVsdGlwbHlTY2FsYXIoWC5yb3RhdGVTcGVlZCk7QWE9ClguZG9tRWxlbWVudD09PWRvY3VtZW50P1guZG9tRWxlbWVudC5ib2R5OlguZG9tRWxlbWVudDtnKDIqTWF0aC5QSSpkYi54L0FhLmNsaWVudEhlaWdodCk7bCgyKk1hdGguUEkqZGIueS9BYS5jbGllbnRIZWlnaHQpO0VhLmNvcHkoR2EpO1gudXBkYXRlKCl9ZnVuY3Rpb24gdihBYSl7Q2Muc2V0KEFhLmNsaWVudFgsQWEuY2xpZW50WSk7WmIuc3ViVmVjdG9ycyhDYyx0Yik7MDxaYi55P2soZigpKTowPlpiLnkmJm0oZigpKTt0Yi5jb3B5KENjKTtYLnVwZGF0ZSgpfWZ1bmN0aW9uIEEoQWEpe0NiLnNldChBYS5jbGllbnRYLEFhLmNsaWVudFkpO3liLnN1YlZlY3RvcnMoQ2IseGIpLm11bHRpcGx5U2NhbGFyKFgucGFuU3BlZWQpO2ZjKHliLngseWIueSk7eGIuY29weShDYik7WC51cGRhdGUoKX1mdW5jdGlvbiB5KCl7fWZ1bmN0aW9uIHgoQWEpezA+QWEuZGVsdGFZP20oZigpKTowPEFhLmRlbHRhWSYmayhmKCkpO1gudXBkYXRlKCl9ZnVuY3Rpb24gQyhBYSl7dmFyIE1iPSExO3N3aXRjaChBYS5rZXlDb2RlKXtjYXNlIFgua2V5cy5VUDpmYygwLApYLmtleVBhblNwZWVkKTtNYj0hMDticmVhaztjYXNlIFgua2V5cy5CT1RUT006ZmMoMCwtWC5rZXlQYW5TcGVlZCk7TWI9ITA7YnJlYWs7Y2FzZSBYLmtleXMuTEVGVDpmYyhYLmtleVBhblNwZWVkLDApO01iPSEwO2JyZWFrO2Nhc2UgWC5rZXlzLlJJR0hUOmZjKC1YLmtleVBhblNwZWVkLDApLE1iPSEwfU1iJiYoQWEucHJldmVudERlZmF1bHQoKSxYLnVwZGF0ZSgpKX1mdW5jdGlvbiBGKEFhKXtFYS5zZXQoQWEudG91Y2hlc1swXS5wYWdlWCxBYS50b3VjaGVzWzBdLnBhZ2VZKX1mdW5jdGlvbiBEKEFhKXtpZihYLmVuYWJsZVpvb20pe3ZhciBNYj1BYS50b3VjaGVzWzBdLnBhZ2VYLUFhLnRvdWNoZXNbMV0ucGFnZVgsamM9QWEudG91Y2hlc1swXS5wYWdlWS1BYS50b3VjaGVzWzFdLnBhZ2VZO3RiLnNldCgwLE1hdGguc3FydChNYipNYitqYypqYykpfVguZW5hYmxlUGFuJiZ4Yi5zZXQoLjUqKEFhLnRvdWNoZXNbMF0ucGFnZVgrQWEudG91Y2hlc1sxXS5wYWdlWCksLjUqKEFhLnRvdWNoZXNbMF0ucGFnZVkrCkFhLnRvdWNoZXNbMV0ucGFnZVkpKX1mdW5jdGlvbiBCKEFhKXtHYS5zZXQoQWEudG91Y2hlc1swXS5wYWdlWCxBYS50b3VjaGVzWzBdLnBhZ2VZKTtkYi5zdWJWZWN0b3JzKEdhLEVhKS5tdWx0aXBseVNjYWxhcihYLnJvdGF0ZVNwZWVkKTtBYT1YLmRvbUVsZW1lbnQ9PT1kb2N1bWVudD9YLmRvbUVsZW1lbnQuYm9keTpYLmRvbUVsZW1lbnQ7ZygyKk1hdGguUEkqZGIueC9BYS5jbGllbnRIZWlnaHQpO2woMipNYXRoLlBJKmRiLnkvQWEuY2xpZW50SGVpZ2h0KTtFYS5jb3B5KEdhKTtYLnVwZGF0ZSgpfWZ1bmN0aW9uIEcoQWEpe2lmKFguZW5hYmxlWm9vbSl7dmFyIE1iPUFhLnRvdWNoZXNbMF0ucGFnZVgtQWEudG91Y2hlc1sxXS5wYWdlWCxqYz1BYS50b3VjaGVzWzBdLnBhZ2VZLUFhLnRvdWNoZXNbMV0ucGFnZVk7Q2Muc2V0KDAsTWF0aC5zcXJ0KE1iKk1iK2pjKmpjKSk7WmIuc2V0KDAsTWF0aC5wb3coQ2MueS90Yi55LFguem9vbVNwZWVkKSk7ayhaYi55KTt0Yi5jb3B5KENjKX1YLmVuYWJsZVBhbiYmCihDYi5zZXQoLjUqKEFhLnRvdWNoZXNbMF0ucGFnZVgrQWEudG91Y2hlc1sxXS5wYWdlWCksLjUqKEFhLnRvdWNoZXNbMF0ucGFnZVkrQWEudG91Y2hlc1sxXS5wYWdlWSkpLHliLnN1YlZlY3RvcnMoQ2IseGIpLm11bHRpcGx5U2NhbGFyKFgucGFuU3BlZWQpLGZjKHliLngseWIueSkseGIuY29weShDYikpO1gudXBkYXRlKCl9ZnVuY3Rpb24gSygpe31mdW5jdGlvbiBMKEFhKXtpZighMSE9PVguZW5hYmxlZCl7QWEucHJldmVudERlZmF1bHQoKTtYLmRvbUVsZW1lbnQuZm9jdXM/WC5kb21FbGVtZW50LmZvY3VzKCk6d2luZG93LmZvY3VzKCk7c3dpdGNoKEFhLmJ1dHRvbil7Y2FzZSBYLm1vdXNlQnV0dG9ucy5MRUZUOmlmKEFhLmN0cmxLZXl8fEFhLm1ldGFLZXl8fEFhLnNoaWZ0S2V5KXtpZighMT09PVguZW5hYmxlUGFuKXJldHVybjtyKEFhKTtsYT1iYS5QQU59ZWxzZXtpZighMT09PVguZW5hYmxlUm90YXRlKXJldHVybjtwKEFhKTtsYT1iYS5ST1RBVEV9YnJlYWs7Y2FzZSBYLm1vdXNlQnV0dG9ucy5NSURETEU6aWYoITE9PT0KWC5lbmFibGVab29tKXJldHVybjtxKEFhKTtsYT1iYS5ET0xMWTticmVhaztjYXNlIFgubW91c2VCdXR0b25zLlJJR0hUOmlmKCExPT09WC5lbmFibGVQYW4pcmV0dXJuO3IoQWEpO2xhPWJhLlBBTn1sYSE9PWJhLk5PTkUmJihkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLEosITEpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLFAsITEpLFguZGlzcGF0Y2hFdmVudChlYSkpfX1mdW5jdGlvbiBKKEFhKXtpZighMSE9PVguZW5hYmxlZClzd2l0Y2goQWEucHJldmVudERlZmF1bHQoKSxsYSl7Y2FzZSBiYS5ST1RBVEU6aWYoITE9PT1YLmVuYWJsZVJvdGF0ZSlicmVhazt0KEFhKTticmVhaztjYXNlIGJhLkRPTExZOmlmKCExPT09WC5lbmFibGVab29tKWJyZWFrO3YoQWEpO2JyZWFrO2Nhc2UgYmEuUEFOOiExIT09WC5lbmFibGVQYW4mJkEoQWEpfX1mdW5jdGlvbiBQKEFhKXshMSE9PVguZW5hYmxlZCYmKHkoQWEpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsCkosITEpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLFAsITEpLFguZGlzcGF0Y2hFdmVudChrYSksbGE9YmEuTk9ORSl9ZnVuY3Rpb24gUyhBYSl7ITE9PT1YLmVuYWJsZWR8fCExPT09WC5lbmFibGVab29tfHxsYSE9PWJhLk5PTkUmJmxhIT09YmEuUk9UQVRFfHwoQWEucHJldmVudERlZmF1bHQoKSxBYS5zdG9wUHJvcGFnYXRpb24oKSxYLmRpc3BhdGNoRXZlbnQoZWEpLHgoQWEpLFguZGlzcGF0Y2hFdmVudChrYSkpfWZ1bmN0aW9uIE4oQWEpeyExIT09WC5lbmFibGVkJiYhMSE9PVguZW5hYmxlS2V5cyYmITEhPT1YLmVuYWJsZVBhbiYmQyhBYSl9ZnVuY3Rpb24gVChBYSl7aWYoITEhPT1YLmVuYWJsZWQpe0FhLnByZXZlbnREZWZhdWx0KCk7c3dpdGNoKEFhLnRvdWNoZXMubGVuZ3RoKXtjYXNlIDE6aWYoITE9PT1YLmVuYWJsZVJvdGF0ZSlyZXR1cm47RihBYSk7bGE9YmEuVE9VQ0hfUk9UQVRFO2JyZWFrO2Nhc2UgMjppZighMT09PVguZW5hYmxlWm9vbSYmCiExPT09WC5lbmFibGVQYW4pcmV0dXJuO0QoQWEpO2xhPWJhLlRPVUNIX0RPTExZX1BBTjticmVhaztkZWZhdWx0OmxhPWJhLk5PTkV9bGEhPT1iYS5OT05FJiZYLmRpc3BhdGNoRXZlbnQoZWEpfX1mdW5jdGlvbiBZKEFhKXtpZighMSE9PVguZW5hYmxlZClzd2l0Y2goQWEucHJldmVudERlZmF1bHQoKSxBYS5zdG9wUHJvcGFnYXRpb24oKSxBYS50b3VjaGVzLmxlbmd0aCl7Y2FzZSAxOmlmKCExPT09WC5lbmFibGVSb3RhdGUpYnJlYWs7aWYobGEhPT1iYS5UT1VDSF9ST1RBVEUpYnJlYWs7QihBYSk7YnJlYWs7Y2FzZSAyOmlmKCExPT09WC5lbmFibGVab29tJiYhMT09PVguZW5hYmxlUGFuKWJyZWFrO2lmKGxhIT09YmEuVE9VQ0hfRE9MTFlfUEFOKWJyZWFrO0coQWEpO2JyZWFrO2RlZmF1bHQ6bGE9YmEuTk9ORX19ZnVuY3Rpb24gYWEoQWEpeyExIT09WC5lbmFibGVkJiYoSyhBYSksWC5kaXNwYXRjaEV2ZW50KGthKSxsYT1iYS5OT05FKX1mdW5jdGlvbiBoYShBYSl7ITEhPT1YLmVuYWJsZWQmJgpBYS5wcmV2ZW50RGVmYXVsdCgpfXRoaXMub2JqZWN0PWE7dGhpcy5kb21FbGVtZW50PXZvaWQgMCE9PWM/Yzpkb2N1bWVudDt0aGlzLmVuYWJsZWQ9ITA7dGhpcy50YXJnZXQ9bmV3IFRIUkVFLlZlY3RvcjM7dGhpcy5taW5EaXN0YW5jZT0wO3RoaXMubWF4RGlzdGFuY2U9SW5maW5pdHk7dGhpcy5taW5ab29tPTA7dGhpcy5tYXhab29tPUluZmluaXR5O3RoaXMubWluUG9sYXJBbmdsZT0wO3RoaXMubWF4UG9sYXJBbmdsZT1NYXRoLlBJO3RoaXMubWluQXppbXV0aEFuZ2xlPS1JbmZpbml0eTt0aGlzLm1heEF6aW11dGhBbmdsZT1JbmZpbml0eTt0aGlzLmVuYWJsZURhbXBpbmc9ITE7dGhpcy5kYW1waW5nRmFjdG9yPS4yNTt0aGlzLmVuYWJsZVpvb209ITA7dGhpcy56b29tU3BlZWQ9MTt0aGlzLmVuYWJsZVJvdGF0ZT0hMDt0aGlzLnJvdGF0ZVNwZWVkPTE7dGhpcy5lbmFibGVQYW49ITA7dGhpcy5wYW5TcGVlZD0xO3RoaXMuc2NyZWVuU3BhY2VQYW5uaW5nPSExO3RoaXMua2V5UGFuU3BlZWQ9Cjc7dGhpcy5hdXRvUm90YXRlPSExO3RoaXMuYXV0b1JvdGF0ZVNwZWVkPTI7dGhpcy5lbmFibGVLZXlzPSEwO3RoaXMua2V5cz17TEVGVDozNyxVUDozOCxSSUdIVDozOSxCT1RUT006NDB9O3RoaXMubW91c2VCdXR0b25zPXtMRUZUOlRIUkVFLk1PVVNFLkxFRlQsTUlERExFOlRIUkVFLk1PVVNFLk1JRERMRSxSSUdIVDpUSFJFRS5NT1VTRS5SSUdIVH07dGhpcy50YXJnZXQwPXRoaXMudGFyZ2V0LmNsb25lKCk7dGhpcy5wb3NpdGlvbjA9dGhpcy5vYmplY3QucG9zaXRpb24uY2xvbmUoKTt0aGlzLnpvb20wPXRoaXMub2JqZWN0Lnpvb207dGhpcy5nZXRQb2xhckFuZ2xlPWZ1bmN0aW9uKCl7cmV0dXJuIENhLnBoaX07dGhpcy5nZXRBemltdXRoYWxBbmdsZT1mdW5jdGlvbigpe3JldHVybiBDYS50aGV0YX07dGhpcy5zYXZlU3RhdGU9ZnVuY3Rpb24oKXtYLnRhcmdldDAuY29weShYLnRhcmdldCk7WC5wb3NpdGlvbjAuY29weShYLm9iamVjdC5wb3NpdGlvbik7WC56b29tMD1YLm9iamVjdC56b29tfTsKdGhpcy5yZXNldD1mdW5jdGlvbigpe1gudGFyZ2V0LmNvcHkoWC50YXJnZXQwKTtYLm9iamVjdC5wb3NpdGlvbi5jb3B5KFgucG9zaXRpb24wKTtYLm9iamVjdC56b29tPVguem9vbTA7WC5vYmplY3QudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpO1guZGlzcGF0Y2hFdmVudChjYSk7WC51cGRhdGUoKTtsYT1iYS5OT05FfTt0aGlzLnVwZGF0ZT1mdW5jdGlvbigpe3ZhciBBYT1uZXcgVEhSRUUuVmVjdG9yMyxNYj0obmV3IFRIUkVFLlF1YXRlcm5pb24pLnNldEZyb21Vbml0VmVjdG9ycyhhLnVwLG5ldyBUSFJFRS5WZWN0b3IzKDAsMSwwKSksamM9TWIuY2xvbmUoKS5pbnZlcnNlKCksdGQ9bmV3IFRIUkVFLlZlY3RvcjMsTmQ9bmV3IFRIUkVFLlF1YXRlcm5pb247cmV0dXJuIGZ1bmN0aW9uKCl7dmFyICRnPVgub2JqZWN0LnBvc2l0aW9uO0FhLmNvcHkoJGcpLnN1YihYLnRhcmdldCk7QWEuYXBwbHlRdWF0ZXJuaW9uKE1iKTtDYS5zZXRGcm9tVmVjdG9yMyhBYSk7WC5hdXRvUm90YXRlJiYKbGE9PT1iYS5OT05FJiZnKGQoKSk7Q2EudGhldGErPXhhLnRoZXRhO0NhLnBoaSs9eGEucGhpO0NhLnRoZXRhPU1hdGgubWF4KFgubWluQXppbXV0aEFuZ2xlLE1hdGgubWluKFgubWF4QXppbXV0aEFuZ2xlLENhLnRoZXRhKSk7Q2EucGhpPU1hdGgubWF4KFgubWluUG9sYXJBbmdsZSxNYXRoLm1pbihYLm1heFBvbGFyQW5nbGUsQ2EucGhpKSk7Q2EubWFrZVNhZmUoKTtDYS5yYWRpdXMqPXphO0NhLnJhZGl1cz1NYXRoLm1heChYLm1pbkRpc3RhbmNlLE1hdGgubWluKFgubWF4RGlzdGFuY2UsQ2EucmFkaXVzKSk7WC50YXJnZXQuYWRkKEZhKTtBYS5zZXRGcm9tU3BoZXJpY2FsKENhKTtBYS5hcHBseVF1YXRlcm5pb24oamMpOyRnLmNvcHkoWC50YXJnZXQpLmFkZChBYSk7WC5vYmplY3QubG9va0F0KFgudGFyZ2V0KTshMD09PVguZW5hYmxlRGFtcGluZz8oeGEudGhldGEqPTEtWC5kYW1waW5nRmFjdG9yLHhhLnBoaSo9MS1YLmRhbXBpbmdGYWN0b3IsRmEubXVsdGlwbHlTY2FsYXIoMS0KWC5kYW1waW5nRmFjdG9yKSk6KHhhLnNldCgwLDAsMCksRmEuc2V0KDAsMCwwKSk7emE9MTtyZXR1cm4gU2F8fHRkLmRpc3RhbmNlVG9TcXVhcmVkKFgub2JqZWN0LnBvc2l0aW9uKT53YXx8OCooMS1OZC5kb3QoWC5vYmplY3QucXVhdGVybmlvbikpPndhPyhYLmRpc3BhdGNoRXZlbnQoY2EpLHRkLmNvcHkoWC5vYmplY3QucG9zaXRpb24pLE5kLmNvcHkoWC5vYmplY3QucXVhdGVybmlvbiksU2E9ITEsITApOiExfX0oKTt0aGlzLmRpc3Bvc2U9ZnVuY3Rpb24oKXtYLmRvbUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY29udGV4dG1lbnUiLGhhLCExKTtYLmRvbUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIixMLCExKTtYLmRvbUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigid2hlZWwiLFMsITEpO1guZG9tRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJ0b3VjaHN0YXJ0IixULCExKTtYLmRvbUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigidG91Y2hlbmQiLAphYSwhMSk7WC5kb21FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNobW92ZSIsWSwhMSk7ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIixKLCExKTtkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZXVwIixQLCExKTt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsTiwhMSl9O3ZhciBYPXRoaXMsY2E9e3R5cGU6ImNoYW5nZSJ9LGVhPXt0eXBlOiJzdGFydCJ9LGthPXt0eXBlOiJlbmQifSxiYT17Tk9ORTotMSxST1RBVEU6MCxET0xMWToxLFBBTjoyLFRPVUNIX1JPVEFURTozLFRPVUNIX0RPTExZX1BBTjo0fSxsYT1iYS5OT05FLHdhPTFFLTYsQ2E9bmV3IFRIUkVFLlNwaGVyaWNhbCx4YT1uZXcgVEhSRUUuU3BoZXJpY2FsLHphPTEsRmE9bmV3IFRIUkVFLlZlY3RvcjMsU2E9ITEsRWE9bmV3IFRIUkVFLlZlY3RvcjIsR2E9bmV3IFRIUkVFLlZlY3RvcjIsZGI9bmV3IFRIUkVFLlZlY3RvcjIseGI9bmV3IFRIUkVFLlZlY3RvcjIsCkNiPW5ldyBUSFJFRS5WZWN0b3IyLHliPW5ldyBUSFJFRS5WZWN0b3IyLHRiPW5ldyBUSFJFRS5WZWN0b3IyLENjPW5ldyBUSFJFRS5WZWN0b3IyLFpiPW5ldyBUSFJFRS5WZWN0b3IyLGhkPWZ1bmN0aW9uKCl7dmFyIEFhPW5ldyBUSFJFRS5WZWN0b3IzO3JldHVybiBmdW5jdGlvbihNYixqYyl7QWEuc2V0RnJvbU1hdHJpeENvbHVtbihqYywwKTtBYS5tdWx0aXBseVNjYWxhcigtTWIpO0ZhLmFkZChBYSl9fSgpLCRiPWZ1bmN0aW9uKCl7dmFyIEFhPW5ldyBUSFJFRS5WZWN0b3IzO3JldHVybiBmdW5jdGlvbihNYixqYyl7ITA9PT1YLnNjcmVlblNwYWNlUGFubmluZz9BYS5zZXRGcm9tTWF0cml4Q29sdW1uKGpjLDEpOihBYS5zZXRGcm9tTWF0cml4Q29sdW1uKGpjLDApLEFhLmNyb3NzVmVjdG9ycyhYLm9iamVjdC51cCxBYSkpO0FhLm11bHRpcGx5U2NhbGFyKE1iKTtGYS5hZGQoQWEpfX0oKSxmYz1mdW5jdGlvbigpe3ZhciBBYT1uZXcgVEhSRUUuVmVjdG9yMztyZXR1cm4gZnVuY3Rpb24oTWIsCmpjKXt2YXIgdGQ9WC5kb21FbGVtZW50PT09ZG9jdW1lbnQ/WC5kb21FbGVtZW50LmJvZHk6WC5kb21FbGVtZW50O2lmKFgub2JqZWN0LmlzUGVyc3BlY3RpdmVDYW1lcmEpe0FhLmNvcHkoWC5vYmplY3QucG9zaXRpb24pLnN1YihYLnRhcmdldCk7dmFyIE5kPUFhLmxlbmd0aCgpO05kKj1NYXRoLnRhbihYLm9iamVjdC5mb3YvMipNYXRoLlBJLzE4MCk7aGQoMipNYipOZC90ZC5jbGllbnRIZWlnaHQsWC5vYmplY3QubWF0cml4KTskYigyKmpjKk5kL3RkLmNsaWVudEhlaWdodCxYLm9iamVjdC5tYXRyaXgpfWVsc2UgWC5vYmplY3QuaXNPcnRob2dyYXBoaWNDYW1lcmE/KGhkKE1iKihYLm9iamVjdC5yaWdodC1YLm9iamVjdC5sZWZ0KS9YLm9iamVjdC56b29tL3RkLmNsaWVudFdpZHRoLFgub2JqZWN0Lm1hdHJpeCksJGIoamMqKFgub2JqZWN0LnRvcC1YLm9iamVjdC5ib3R0b20pL1gub2JqZWN0Lnpvb20vdGQuY2xpZW50SGVpZ2h0LFgub2JqZWN0Lm1hdHJpeCkpOihjb25zb2xlLndhcm4oIldBUk5JTkc6IE9yYml0Q29udHJvbHMuanMgZW5jb3VudGVyZWQgYW4gdW5rbm93biBjYW1lcmEgdHlwZSAtIHBhbiBkaXNhYmxlZC4iKSwKWC5lbmFibGVQYW49ITEpfX0oKTtYLmRvbUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY29udGV4dG1lbnUiLGhhLCExKTtYLmRvbUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIixMLCExKTtYLmRvbUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigid2hlZWwiLFMsITEpO1guZG9tRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaHN0YXJ0IixULCExKTtYLmRvbUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hlbmQiLGFhLCExKTtYLmRvbUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2htb3ZlIixZLCExKTt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsTiwhMSk7dGhpcy51cGRhdGUoKX07VEhSRUUuT3JiaXRDb250cm9scy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShUSFJFRS5FdmVudERpc3BhdGNoZXIucHJvdG90eXBlKTtUSFJFRS5PcmJpdENvbnRyb2xzLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1USFJFRS5PcmJpdENvbnRyb2xzOwpPYmplY3QuZGVmaW5lUHJvcGVydGllcyhUSFJFRS5PcmJpdENvbnRyb2xzLnByb3RvdHlwZSx7Y2VudGVyOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk9yYml0Q29udHJvbHM6IC5jZW50ZXIgaGFzIGJlZW4gcmVuYW1lZCB0byAudGFyZ2V0Iik7cmV0dXJuIHRoaXMudGFyZ2V0fX0sbm9ab29tOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk9yYml0Q29udHJvbHM6IC5ub1pvb20gaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIC5lbmFibGVab29tIGluc3RlYWQuIik7cmV0dXJuIXRoaXMuZW5hYmxlWm9vbX0sc2V0OmZ1bmN0aW9uKGEpe2NvbnNvbGUud2FybigiVEhSRUUuT3JiaXRDb250cm9sczogLm5vWm9vbSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLmVuYWJsZVpvb20gaW5zdGVhZC4iKTt0aGlzLmVuYWJsZVpvb209IWF9fSxub1JvdGF0ZTp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5PcmJpdENvbnRyb2xzOiAubm9Sb3RhdGUgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIC5lbmFibGVSb3RhdGUgaW5zdGVhZC4iKTsKcmV0dXJuIXRoaXMuZW5hYmxlUm90YXRlfSxzZXQ6ZnVuY3Rpb24oYSl7Y29uc29sZS53YXJuKCJUSFJFRS5PcmJpdENvbnRyb2xzOiAubm9Sb3RhdGUgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIC5lbmFibGVSb3RhdGUgaW5zdGVhZC4iKTt0aGlzLmVuYWJsZVJvdGF0ZT0hYX19LG5vUGFuOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk9yYml0Q29udHJvbHM6IC5ub1BhbiBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLmVuYWJsZVBhbiBpbnN0ZWFkLiIpO3JldHVybiF0aGlzLmVuYWJsZVBhbn0sc2V0OmZ1bmN0aW9uKGEpe2NvbnNvbGUud2FybigiVEhSRUUuT3JiaXRDb250cm9sczogLm5vUGFuIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSAuZW5hYmxlUGFuIGluc3RlYWQuIik7dGhpcy5lbmFibGVQYW49IWF9fSxub0tleXM6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuT3JiaXRDb250cm9sczogLm5vS2V5cyBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLmVuYWJsZUtleXMgaW5zdGVhZC4iKTsKcmV0dXJuIXRoaXMuZW5hYmxlS2V5c30sc2V0OmZ1bmN0aW9uKGEpe2NvbnNvbGUud2FybigiVEhSRUUuT3JiaXRDb250cm9sczogLm5vS2V5cyBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLmVuYWJsZUtleXMgaW5zdGVhZC4iKTt0aGlzLmVuYWJsZUtleXM9IWF9fSxzdGF0aWNNb3Zpbmc6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuT3JiaXRDb250cm9sczogLnN0YXRpY01vdmluZyBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLmVuYWJsZURhbXBpbmcgaW5zdGVhZC4iKTtyZXR1cm4hdGhpcy5lbmFibGVEYW1waW5nfSxzZXQ6ZnVuY3Rpb24oYSl7Y29uc29sZS53YXJuKCJUSFJFRS5PcmJpdENvbnRyb2xzOiAuc3RhdGljTW92aW5nIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSAuZW5hYmxlRGFtcGluZyBpbnN0ZWFkLiIpO3RoaXMuZW5hYmxlRGFtcGluZz0hYX19LGR5bmFtaWNEYW1waW5nRmFjdG9yOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk9yYml0Q29udHJvbHM6IC5keW5hbWljRGFtcGluZ0ZhY3RvciBoYXMgYmVlbiByZW5hbWVkLiBVc2UgLmRhbXBpbmdGYWN0b3IgaW5zdGVhZC4iKTsKcmV0dXJuIHRoaXMuZGFtcGluZ0ZhY3Rvcn0sc2V0OmZ1bmN0aW9uKGEpe2NvbnNvbGUud2FybigiVEhSRUUuT3JiaXRDb250cm9sczogLmR5bmFtaWNEYW1waW5nRmFjdG9yIGhhcyBiZWVuIHJlbmFtZWQuIFVzZSAuZGFtcGluZ0ZhY3RvciBpbnN0ZWFkLiIpO3RoaXMuZGFtcGluZ0ZhY3Rvcj1hfX19KTsKPC9zY3JpcHQ+Cgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vZmFjZXRzLWRpdmUvbGliL3Nwcml0ZS1hdGxhcy5qcwpjbGFzcyBYbSBleHRlbmRzIFRIUkVFLlRleHR1cmV7Y29uc3RydWN0b3IoYSxjLGQpe2NvbnN0IGY9TWF0aC5jZWlsKE1hdGguc3FydChhKSksZz1NYXRoLmNlaWwoYS9mKSxsPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpO2wud2lkdGg9YypmO2wuaGVpZ2h0PWQqZztjb25zdCBrPWwuZ2V0Q29udGV4dCgiMmQiKTtzdXBlcihsKTt0aGlzLmNhcGFjaXR5PWE7dGhpcy5pbWFnZVdpZHRoPWM7dGhpcy5pbWFnZUhlaWdodD1kO3RoaXMuc3ByaXRlQ29sdW1ucz1mO3RoaXMuc3ByaXRlUm93cz1nO3RoaXMuY2FudmFzPWw7dGhpcy5jb250ZXh0PWs7dGhpcy5tYWdGaWx0ZXI9dGhpcy5taW5GaWx0ZXI9VEhSRUUuTGluZWFyRmlsdGVyO3RoaXMuZHJhd1RpbWVvdXQ9NTA7dGhpcy53YWl0VGltZW91dD0xO3RoaXMuZHJhd1F1ZXVlPVtdO3RoaXMuaXNEcmF3UXVldWVkPSExO3RoaXMubGFzdENsZWFyVGltZXN0YW1wPTA7dGhpcy5jYWxsYmFja1F1ZXVlPVtdO3RoaXMucGVuZGluZ0ltYWdlQ291bnQ9CjA7dGhpcy5maXR0ZXI9bmV3IFdtKHt4Oi4xMjUqYyx5Oi4xMjUqZCx3aWR0aDouNzUqYyxoZWlnaHQ6Ljc1KmR9KX1jbGVhclF1ZXVlcygpe3RoaXMuZHJhd1F1ZXVlPVtdO3RoaXMuY2FsbGJhY2tRdWV1ZT1bXTt0aGlzLnBlbmRpbmdJbWFnZUNvdW50PTA7cmV0dXJuIHRoaXMubGFzdENsZWFyVGltZXN0YW1wPURhdGUubm93KCl9c2V0U3ByaXRlSW1hZ2VEYXRhKGEsYyxkKXt0aGlzLmRyYXdRdWV1ZS5wdXNoKHtzcHJpdGVJbmRleDphLHRpbWVzdGFtcDpEYXRlLm5vdygpLGltYWdlRGF0YTpjLGNhbGxiYWNrOmR9KTt0aGlzLnF1ZXVlRHJhdygpfXNldEF0bGFzVXJsKGEsYyxkKXtjb25zdCBmPXRoaXMuY2xlYXJRdWV1ZXMoKSxnPW5ldyBJbWFnZTt2b2lkIDAhPT1jJiYoZy5jcm9zc09yaWdpbj1jKTt0aGlzLnBlbmRpbmdJbWFnZUNvdW50Kys7Zy5vbmVycm9yPSgpPT57dGhpcy5sYXN0Q2xlYXJUaW1lc3RhbXA+Znx8dGhpcy5wZW5kaW5nSW1hZ2VDb3VudC0tfTtnLm9ubG9hZD0KKCk9PntpZighKHRoaXMubGFzdENsZWFyVGltZXN0YW1wPmYpJiYodGhpcy5wZW5kaW5nSW1hZ2VDb3VudC0tLHRoaXMudXBkYXRlUHJvcGVydGllc1RvTWF0Y2hJbWFnZURpbWVuc2lvbnMoZy53aWR0aCxnLmhlaWdodCksdGhpcy5jb250ZXh0LmRyYXdJbWFnZShnLDAsMCx0aGlzLmNhbnZhcy53aWR0aCx0aGlzLmNhbnZhcy5oZWlnaHQpLHRoaXMubmVlZHNVcGRhdGU9ITAsZCYmdGhpcy5jYWxsYmFja1F1ZXVlLnB1c2goe2NhbGxiYWNrOmQsYXJnczpbZ119KSx0aGlzLm9uRHJhd0ZpbmlzaGVkKSl0aGlzLm9uRHJhd0ZpbmlzaGVkKCl9O2cuc3JjPWF9dXBkYXRlUHJvcGVydGllc1RvTWF0Y2hJbWFnZURpbWVuc2lvbnMoYSxjKXtpZihhIT09dGhpcy5pbWFnZVdpZHRoKnRoaXMuc3ByaXRlQ29sdW1uc3x8YyE9PXRoaXMuaW1hZ2VIZWlnaHQqdGhpcy5zcHJpdGVSb3dzKXt2YXIgZD1hL3RoaXMuaW1hZ2VXaWR0aCxmPWMvdGhpcy5pbWFnZUhlaWdodDtpZihkKmY8dGhpcy5jYXBhY2l0eSl0aHJvdyBFcnJvcigiQXRsYXMgaW1hZ2UgdG9vIHNtYWxsIHRvIGFjY29tbW9kYXRlIGF0bGFzIGNhcGFjaXR5LiIpOwppZihkIT09TWF0aC5yb3VuZChkKXx8ZiE9PU1hdGgucm91bmQoZikpdGhyb3cgRXJyb3IoIkF0bGFzIGltYWdlIGRpbWVuc2lvbnMgZG8gbm90IGZpdCBzcHJpdGUgaW1hZ2UgZGltZW5zaW9ucy4iKTt0aGlzLnNwcml0ZUNvbHVtbnM9ZDt0aGlzLnNwcml0ZVJvd3M9Zjt0aGlzLmNhbnZhcy53aWR0aD1hO3RoaXMuY2FudmFzLmhlaWdodD1jfX1wb3N0UmVuZGVyKCl7aWYoISh0aGlzLmRyYXdRdWV1ZS5sZW5ndGh8fDA8dGhpcy5wZW5kaW5nSW1hZ2VDb3VudCkpZm9yKDt0aGlzLmNhbGxiYWNrUXVldWUubGVuZ3RoOyl7Y29uc3Qge2NhbGxiYWNrOmEsYXJnczpjfT10aGlzLmNhbGxiYWNrUXVldWUuc2hpZnQoKTthLmFwcGx5KG51bGwsYyl9fXF1ZXVlRHJhdygpe3RoaXMuaXNEcmF3UXVldWVkfHwodGhpcy5pc0RyYXdRdWV1ZWQ9ITAsc2V0VGltZW91dCgoKT0+e3RoaXMuaXNEcmF3UXVldWVkJiZ0aGlzLndvcmtPbkRyYXdKb2JzKCl9LHRoaXMud2FpdFRpbWVvdXQpKX13b3JrT25EcmF3Sm9icygpe3RoaXMuaXNEcmF3UXVldWVkPQohMTtjb25zdCBhPURhdGUubm93KCksYz1hKyh0aGlzLmRyYXdUaW1lb3V0fHxJbmZpbml0eSk7Zm9yKDt0aGlzLmRyYXdRdWV1ZS5sZW5ndGgmJkRhdGUubm93KCk8Yzspe2NvbnN0IHtzcHJpdGVJbmRleDpwLHRpbWVzdGFtcDpxLGltYWdlRGF0YTpyLGltYWdlOnQsY2FsbGJhY2s6dn09dGhpcy5kcmF3UXVldWUuc2hpZnQoKTtpZih0KXt2YXIgZD10aGlzLmltYWdlV2lkdGgsZj10aGlzLmltYWdlSGVpZ2h0LGc9cCV0aGlzLnNwcml0ZUNvbHVtbnMqZCxsPWYqTWF0aC5mbG9vcihwL3RoaXMuc3ByaXRlQ29sdW1ucyk7dGhpcy5jb250ZXh0LmNsZWFyUmVjdChnLGwsZCxmKTt0aGlzLmNvbnRleHQuZHJhd0ltYWdlKHQsZyxsLGQsZik7ImZ1bmN0aW9uIj09PXR5cGVvZiB2JiZ0aGlzLmNhbGxiYWNrUXVldWUucHVzaCh7Y2FsbGJhY2s6dixhcmdzOltwXX0pfWVsc2UgaWYociYmInRleHQiPT09ci50eXBlKXtkPXAldGhpcy5zcHJpdGVDb2x1bW5zKnRoaXMuaW1hZ2VXaWR0aDtmPXRoaXMuaW1hZ2VIZWlnaHQqCk1hdGguZmxvb3IocC90aGlzLnNwcml0ZUNvbHVtbnMpO3ZhciBrPWQrdGhpcy5pbWFnZVdpZHRoLzIsbT1mK3RoaXMuaW1hZ2VIZWlnaHQvMjtnPXRoaXMuZml0dGVyLmZpdChyLmRhdGErIiIpO2w9dGhpcy5jb250ZXh0O2wuY2xlYXJSZWN0KGQsZix0aGlzLmltYWdlV2lkdGgsdGhpcy5pbWFnZUhlaWdodCk7bC5zYXZlKCk7bC50cmFuc2xhdGUoayxtKTtsLnNjYWxlKHRoaXMuaW1hZ2VXaWR0aCx0aGlzLmltYWdlSGVpZ2h0KTtsLmJlZ2luUGF0aCgpO2wuYXJjKDAsMCwuNSwwLDIqTWF0aC5QSSk7bC5yZXN0b3JlKCk7bC5maWxsU3R5bGU9IiM1NTU1NTUiO2wuZmlsbCgpO2wuZmlsbFN0eWxlPSJ3aGl0ZSI7bC50ZXh0QmFzZWxpbmU9ImhhbmdpbmciO2wuZm9udD1gJHtyLnNwZWNpYWw/Iml0YWxpYyI6ImJvbGQifSAke2cuZm9udFNpemV9cHggJHsiJ1JvYm90byBNb25vJywgJ0NvbnNvbGFzJywgJ01lbmxvJywgbW9ub3NwYWNlIn1gO2s9Zy5saW5lcztmb3IobT0wO208ay5sZW5ndGg7bSsrKXtjb25zdCBBPQprW21dO2wuZmlsbFRleHQoQS50ZXh0LGQrQS54LGYrQS55LEEudGV4dC5sZW5ndGgqdGhpcy5maXR0ZXIuc2V0dGluZ3MuZ2x5cGhBc3BlY3RSYXRpbypnLmZvbnRTaXplKX0iZnVuY3Rpb24iPT09dHlwZW9mIHYmJnRoaXMuY2FsbGJhY2tRdWV1ZS5wdXNoKHtjYWxsYmFjazp2LGFyZ3M6W3BdfSl9ZWxzZSBpZihyKXtjb25zdCBBPW5ldyBJbWFnZTt0aGlzLnBlbmRpbmdJbWFnZUNvdW50Kys7QS5vbmxvYWQ9KCk9PnthPHRoaXMubGFzdENsZWFyVGltZXN0YW1wfHwodGhpcy5wZW5kaW5nSW1hZ2VDb3VudC0tLHRoaXMuZHJhd1F1ZXVlLnVuc2hpZnQoe3Nwcml0ZUluZGV4OnAsdGltZXN0YW1wOnEsaW1hZ2U6QSxjYWxsYmFjazp2fSksdGhpcy5xdWV1ZURyYXcoKSl9O0Eub25lcnJvcj0oKT0+e2E8dGhpcy5sYXN0Q2xlYXJUaW1lc3RhbXB8fCh0aGlzLnBlbmRpbmdJbWFnZUNvdW50LS0sdGhpcy5kcmF3UXVldWUucHVzaCh7c3ByaXRlSW5kZXg6cCx0aW1lc3RhbXA6cSxpbWFnZURhdGE6ciwKY2FsbGJhY2s6dn0pLHRoaXMucXVldWVEcmF3KCkpfTtBLnNyYz0ic3ZnIj09PXIudHlwZT9VUkwuY3JlYXRlT2JqZWN0VVJMKG5ldyBCbG9iKFtyLmRhdGFdLHt0eXBlOiJpbWFnZS9zdmcreG1sO2NoYXJzZXRceDNkdXRmLTgifSkpOmBkYXRhOiR7ci50eXBlfTtiYXNlNjQsJHtyLmRhdGF9YH19aWYodGhpcy5kcmF3UXVldWUubGVuZ3RofHwwPHRoaXMucGVuZGluZ0ltYWdlQ291bnQpdGhpcy5xdWV1ZURyYXcoKTtlbHNlIGlmKHRoaXMubmVlZHNVcGRhdGU9ITAsdGhpcy5vbkRyYXdGaW5pc2hlZCl0aGlzLm9uRHJhd0ZpbmlzaGVkKCl9fTsKPC9zY3JpcHQ+CgoKCjxzY3JpcHQ+Ly9+fldFQlBBVEh+fi9mYWNldHMtZGl2ZS9saWIvc3ByaXRlLW1hdGVyaWFsLmpzCmNsYXNzIFltIGV4dGVuZHMgVEhSRUUuUmF3U2hhZGVyTWF0ZXJpYWx7Y29uc3RydWN0b3IoYSxjKXtzdXBlcih7dmVydGV4U2hhZGVyOiJcblxuICBwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4gIHByZWNpc2lvbiBoaWdocCBpbnQ7XG5cbiAgI2RlZmluZSBTSEFERVJfTkFNRSBTcHJpdGVNYXRlcmlhbFxuXG4gIC8vIFN0YW5kYXJkIHVuaWZvcm1zIHByb3ZpZGVkIGJ5IFRIUkVFLmpzIGZvciBwcm9qZWN0aW5nIHRocm91Z2ggdGhlIGNhbWVyYS5cbiAgdW5pZm9ybSBtYXQ0IG1vZGVsVmlld01hdHJpeDtcbiAgdW5pZm9ybSBtYXQ0IHByb2plY3Rpb25NYXRyaXg7XG5cbiAgdW5pZm9ybSBmbG9hdCB0aW1lO1xuXG4gIHVuaWZvcm0gZmxvYXQgc3ByaXRlQ29sdW1ucztcbiAgdW5pZm9ybSBmbG9hdCBzcHJpdGVSb3dzO1xuXG4gIGF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uO1xuICBhdHRyaWJ1dGUgdmVjMyBiYXNlUG9zaXRpb247XG5cbiAgYXR0cmlidXRlIHZlYzQgY29sb3I7XG4gIGF0dHJpYnV0ZSB2ZWM0IGJhc2VDb2xvcjtcblxuICBhdHRyaWJ1dGUgZmxvYXQgb3BhY2l0eTtcbiAgYXR0cmlidXRlIGZsb2F0IGJhc2VPcGFjaXR5O1xuXG4gIGF0dHJpYnV0ZSBmbG9hdCB0aW1lc3RhbXA7XG4gIGF0dHJpYnV0ZSBmbG9hdCBiYXNlVGltZXN0YW1wO1xuXG4gIGF0dHJpYnV0ZSBmbG9hdCB2ZXJ0ZXhJbmRleDtcblxuICBhdHRyaWJ1dGUgZmxvYXQgdGV4dHVyZUluZGV4O1xuICBhdHRyaWJ1dGUgZmxvYXQgYmFzZVRleHR1cmVJbmRleDtcblxuICBhdHRyaWJ1dGUgZmxvYXQgdGV4dHVyZVRpbWVzdGFtcDtcbiAgYXR0cmlidXRlIGZsb2F0IGJhc2VUZXh0dXJlVGltZXN0YW1wO1xuXG4gIC8vIENvbXB1dGVkIFVWIGNvb3JkaW5hdGVzIGludG8gdGhlIGRlZmF1bHRUZXh0dXJlIGJhc2VkIG9uIHRoZSB2ZXJ0ZXhJbmRleC5cbiAgdmFyeWluZyB2ZWMyIHZEZWZhdWx0VXY7XG5cbiAgLy8gQ29tcHV0ZWQgVVYgY29vcmRpbmF0ZXMgaW50byB0aGUgc3ByaXRlIHRleHR1cmUgYXRsYXMuXG4gIHZhcnlpbmcgdmVjMiB2U3ByaXRlVXY7XG5cbiAgLy8gSW50ZXJwb2xhdGVkIGNvbG9yIHVzZWQgYnkgdGhlIGZyYWdtZW50IHNoYWRlci5cbiAgdmFyeWluZyB2ZWM0IHZDb2xvcjtcblxuICAvLyBJbnRlcnBvbGF0ZWQgb3BhY2l0eSB1c2VkIGJ5IHRoZSBmcmFnbWVudCBzaGFkZXIuXG4gIHZhcnlpbmcgZmxvYXQgdk9wYWNpdHk7XG5cbiAgLy8gRGVncmVlIG9mIG1peGluZyBiZXR3ZWVuIGJhc2UgYW5kIGN1cnJlbnQgdGV4dHVyZS5cbiAgdmFyeWluZyBmbG9hdCB2VGV4dHVyZU1peDtcblxuICBmbG9hdCBhcHBseUVhc2luZyhmbG9hdCB0KSB7XG4gICAgcmV0dXJuIHQgXHgzYyAwLjUgPyA0LjAgKiB0ICogdCAqIHQgOlxuICAgICAgNC4wICogKHQgLSAxLjApICogKHQgLSAxLjApICogKHQgLSAxLjApICsgMS4wO1xuICB9XG5cbiAgdm9pZCBtYWluKCkge1xuXG4gICAgLy8gQ29tcHV0ZSBkZWZhdWx0IFVWcy4gQSBceDNkXHgzZSAoMCwwKSwgQiBceDNkXHgzZSAoMSwwKSwgZXRjLlxuICAgIHZEZWZhdWx0VXYueCBceDNkIG1vZChmbG9vcigodmVydGV4SW5kZXggKyAxLjApIC8gMi4wKSwgMi4wKTtcbiAgICB2RGVmYXVsdFV2LnkgXHgzZCBtb2QoZmxvb3IodmVydGV4SW5kZXggLyAyLjApLCAyLjApO1xuXG4gICAgLy8gRGV0ZXJtaW5lIHRoZSByb3cgYW5kIGNvbHVtbiBpbmRpY2VzIGZvciB0aGlzIHNwcml0ZS5cbiAgICBmbG9hdCBzcHJpdGVJbmRleCBceDNkIGZsb29yKHZlcnRleEluZGV4IC8gNC4wKSArIDAuNTtcbiAgICBmbG9hdCBjb2x1bW5JbmRleCBceDNkIGZsb29yKG1vZChzcHJpdGVJbmRleCwgc3ByaXRlQ29sdW1ucykpO1xuICAgIGZsb2F0IHJvd0luZGV4IFx4M2Qgc3ByaXRlUm93cyAtIDEuMCAtIGZsb29yKHNwcml0ZUluZGV4IC8gc3ByaXRlQ29sdW1ucyk7XG5cbiAgICAvLyBDb21wdXRlIHNwcml0ZSBVVnMgZnJvbSByb3cgYW5kIGNvbHVtbiBpbmRpY2VzLlxuICAgIHZTcHJpdGVVdi54IFx4M2QgKGNvbHVtbkluZGV4ICsgdkRlZmF1bHRVdi54KSAvIHNwcml0ZUNvbHVtbnM7XG4gICAgdlNwcml0ZVV2LnkgXHgzZCAocm93SW5kZXggKyB2RGVmYXVsdFV2LnkpIC8gc3ByaXRlUm93cztcblxuICAgIGZsb2F0IGJsZW5kIFx4M2QgYXBwbHlFYXNpbmcoc21vb3Roc3RlcChiYXNlVGltZXN0YW1wLCB0aW1lc3RhbXAsIHRpbWUpKTtcblxuICAgIHZUZXh0dXJlTWl4IFx4M2QgbWl4KGJhc2VUZXh0dXJlSW5kZXgsIHRleHR1cmVJbmRleCxcbiAgICAgICAgc21vb3Roc3RlcChiYXNlVGV4dHVyZVRpbWVzdGFtcCwgdGV4dHVyZVRpbWVzdGFtcCwgdGltZSkpO1xuXG4gICAgdkNvbG9yIFx4M2QgbWl4KGJhc2VDb2xvciwgY29sb3IsIGJsZW5kKTtcblxuICAgIHZPcGFjaXR5IFx4M2QgbWl4KGJhc2VPcGFjaXR5LCBvcGFjaXR5LCBibGVuZCk7XG5cbiAgICBnbF9Qb3NpdGlvbiBceDNkIHByb2plY3Rpb25NYXRyaXggKiBtb2RlbFZpZXdNYXRyaXggKlxuICAgICAgICB2ZWM0KG1peChiYXNlUG9zaXRpb24sIHBvc2l0aW9uLCB2ZWMzKGJsZW5kKSksIDEuMCk7XG5cbiAgfVxuXG4iLApmcmFnbWVudFNoYWRlcjoiXG5cbiAgcHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuICBwcmVjaXNpb24gaGlnaHAgaW50O1xuXG4gICNkZWZpbmUgU0hBREVSX05BTUUgU3ByaXRlTWF0ZXJpYWxcblxuICAvLyBMaWdodG5lc3MgdGhhdCBzaG91bGQgaWRlYWxseSBleGFjdGx5IG1hdGNoIHRoZSB2Q29sb3IuXG4gICNkZWZpbmUgVEFSR0VUX0xJR0hUTkVTUyAwLjZcblxuICB1bmlmb3JtIGZsb2F0IHRpbWU7XG5cbiAgdW5pZm9ybSBzYW1wbGVyMkQgZGVmYXVsdFRleHR1cmU7XG4gIHVuaWZvcm0gc2FtcGxlcjJEIHNwcml0ZUF0bGFzO1xuXG4gIHZhcnlpbmcgdmVjMiB2RGVmYXVsdFV2O1xuICB2YXJ5aW5nIHZlYzIgdlNwcml0ZVV2O1xuICB2YXJ5aW5nIHZlYzQgdkNvbG9yO1xuICB2YXJ5aW5nIGZsb2F0IHZPcGFjaXR5O1xuICB2YXJ5aW5nIGZsb2F0IHZUZXh0dXJlTWl4O1xuXG4gIC8vIENvbXB1dGUgcmVsYXRpdmUgbHVtaW5hbmNlIGZyb20gUkdCLlxuICBmbG9hdCByZ2JUb0wodmVjMyByZ2IpIHtcbiAgICByZXR1cm4gZG90KHJnYiwgdmVjMygwLjMsIDAuNTksIDAuMTEpKTtcbiAgfVxuXG4gIC8vIEFwcGx5IGx1bWluYW5jZSBlYXNpbmcuXG4gIGZsb2F0IGVhc2VMKGZsb2F0IGwpIHtcbiAgICByZXR1cm4gMS4wIC0gKDEuMCAtIGwpICogKDEuMCAtIGwpICogKDEuMCAtIGwpO1xuICB9XG5cbiAgdm9pZCBtYWluKCkge1xuICAgIGlmICh2T3BhY2l0eSBceDNjXHgzZCAwLjA1KSB7XG4gICAgICBkaXNjYXJkO1xuICAgIH1cblxuICAgIC8vIEludGVycG9sYXRlIGJldHdlZW4gZGVmYXVsdCB0ZXh0dXJlIGFuZCBzcHJpdGUgdGV4dHVyZS5cbiAgICB2ZWM0IGRlZmF1bHRDb2xvciBceDNkXG4gICAgICB2VGV4dHVyZU1peCBceDNjIDEuMCA/IHRleHR1cmUyRChkZWZhdWx0VGV4dHVyZSwgdkRlZmF1bHRVdikgOiB2ZWM0KDAuMCk7XG4gICAgdmVjNCBzcHJpdGVDb2xvciBceDNkXG4gICAgICB2VGV4dHVyZU1peCBceDNlIDAuMCA/IHRleHR1cmUyRChzcHJpdGVBdGxhcywgdlNwcml0ZVV2KSA6IHZlYzQoMC4wKTtcbiAgICB2ZWM0IG1peGVkQ29sb3IgXHgzZCBtaXgoZGVmYXVsdENvbG9yLCBzcHJpdGVDb2xvciwgdlRleHR1cmVNaXgpO1xuXG4gICAgLy8gTGlnaHRuZXNzIG9mIHRoZSBtaXhlZCBwaXhlbC5cbiAgICBmbG9hdCBtaXhlZEwgXHgzZCByZ2JUb0wobWl4ZWRDb2xvci5yZ2IpO1xuXG4gICAgLy8gVXNpbmcgdGhlIG1peGVkIGFuZCB0YXJnZXQgbGlnaHRuZXNzLCBkZXRlcm1pbmUgdGhlIGNvbG9yIHRoYXQncyBiZXR3ZWVuXG4gICAgLy8gYmxhY2ssIHZDb2xvciBhbmQgd2hpdGUuXG4gICAgdmVjMyBjb2xvciBceDNkIG1peGVkTCBceDNjIFRBUkdFVF9MSUdIVE5FU1MgP1xuICAgICAgICBtaXgodmVjMygwLjApLCB2Q29sb3IucmdiLCBlYXNlTChtaXhlZEwgLyBUQVJHRVRfTElHSFRORVNTKSkgOlxuICAgICAgICBtaXgodmVjMygxLjApLCB2Q29sb3IucmdiLFxuICAgICAgICAgICAgZWFzZUwoKDEuMCAtIG1peGVkTCkgLyAoMS4wIC0gVEFSR0VUX0xJR0hUTkVTUykpKTtcblxuICAgIHZlYzMgZmluYWxDb2xvciBceDNkIG1peChtaXhlZENvbG9yLnJnYiwgY29sb3IsIHZDb2xvci5hKTtcblxuICAgIC8vIEFwcGx5IG9wYWNpdHkuXG4gICAgZ2xfRnJhZ0NvbG9yIFx4M2QgdmVjNChmaW5hbENvbG9yLCBtaXhlZENvbG9yLmEgKiB2T3BhY2l0eSk7XG4gIH1cbiIsCnVuaWZvcm1zOnt0aW1lOnt0eXBlOiJmIix2YWx1ZTowfSxkZWZhdWx0VGV4dHVyZTp7dHlwZToidCIsdmFsdWU6YX0sc3ByaXRlQXRsYXM6e3R5cGU6InQiLHZhbHVlOmN9LHNwcml0ZUNvbHVtbnM6e3R5cGU6ImYiLHZhbHVlOmM/Yy5zcHJpdGVDb2x1bW5zOjF9LHNwcml0ZVJvd3M6e3R5cGU6ImYiLHZhbHVlOmM/Yy5zcHJpdGVSb3dzOjF9fSx0cmFuc3BhcmVudDohMH0pfWdldCB0aW1lKCl7cmV0dXJuIHRoaXMudW5pZm9ybXMudGltZS52YWx1ZX1zZXQgdGltZShhKXt0aGlzLnVuaWZvcm1zLnRpbWUudmFsdWU9YX1nZXQgZGVmYXVsdFRleHR1cmUoKXtyZXR1cm4gdGhpcy51bmlmb3Jtcy5kZWZhdWx0VGV4dHVyZS52YWx1ZX1zZXQgZGVmYXVsdFRleHR1cmUoYSl7dGhpcy51bmlmb3Jtcy5kZWZhdWx0VGV4dHVyZS52YWx1ZT1hfWdldCBzcHJpdGVBdGxhcygpe3JldHVybiB0aGlzLnVuaWZvcm1zLnNwcml0ZUF0bGFzLnZhbHVlfXNldCBzcHJpdGVBdGxhcyhhKXt0aGlzLnVuaWZvcm1zLnNwcml0ZUF0bGFzLnZhbHVlPQphfXVwZGF0ZUF0bGFzVW5pZm9ybXMoKXt0aGlzLnVuaWZvcm1zLnNwcml0ZUNvbHVtbnMudmFsdWU9dGhpcy5zcHJpdGVBdGxhcy5zcHJpdGVDb2x1bW5zO3RoaXMudW5pZm9ybXMuc3ByaXRlUm93cy52YWx1ZT10aGlzLnNwcml0ZUF0bGFzLnNwcml0ZVJvd3N9YXBwbHlFYXNpbmcoYSl7cmV0dXJuLjU+YT80KmEqYSphOjQqKGEtMSkqKGEtMSkqKGEtMSkrMX19Owo8L3NjcmlwdD4KCgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vZmFjZXRzLWRpdmUvbGliL3Nwcml0ZS1tZXNoLmpzCmNsYXNzIFpte2NvbnN0cnVjdG9yKGEsYyl7dGhpcy5fc3ByaXRlTWVzaD1hO3RoaXMuX3Nwcml0ZUluZGV4PWN9Z2V0IHNwcml0ZU1lc2goKXtyZXR1cm4gdGhpcy5fc3ByaXRlTWVzaH1nZXQgc3ByaXRlSW5kZXgoKXtyZXR1cm4gdGhpcy5fc3ByaXRlSW5kZXh9Z2V0IHgoKXtyZXR1cm4gdGhpcy5fc3ByaXRlTWVzaC5nZXRYKHRoaXMuX3Nwcml0ZUluZGV4KX1zZXQgeChhKXt0aGlzLl9zcHJpdGVNZXNoLnNldFgodGhpcy5fc3ByaXRlSW5kZXgsYSl9Z2V0IHkoKXtyZXR1cm4gdGhpcy5fc3ByaXRlTWVzaC5nZXRZKHRoaXMuX3Nwcml0ZUluZGV4KX1zZXQgeShhKXt0aGlzLl9zcHJpdGVNZXNoLnNldFkodGhpcy5fc3ByaXRlSW5kZXgsYSl9Z2V0IHooKXtyZXR1cm4gdGhpcy5fc3ByaXRlTWVzaC5nZXRaKHRoaXMuX3Nwcml0ZUluZGV4KX1zZXQgeihhKXt0aGlzLl9zcHJpdGVNZXNoLnNldFoodGhpcy5fc3ByaXRlSW5kZXgsYSl9Z2V0IHIoKXtyZXR1cm4gdGhpcy5fc3ByaXRlTWVzaC5nZXRSKHRoaXMuX3Nwcml0ZUluZGV4KX1zZXQgcihhKXt0aGlzLl9zcHJpdGVNZXNoLnNldFIodGhpcy5fc3ByaXRlSW5kZXgsCmEpfWdldCBnKCl7cmV0dXJuIHRoaXMuX3Nwcml0ZU1lc2guZ2V0Ryh0aGlzLl9zcHJpdGVJbmRleCl9c2V0IGcoYSl7dGhpcy5fc3ByaXRlTWVzaC5zZXRHKHRoaXMuX3Nwcml0ZUluZGV4LGEpfWdldCBiKCl7cmV0dXJuIHRoaXMuX3Nwcml0ZU1lc2guZ2V0Qih0aGlzLl9zcHJpdGVJbmRleCl9c2V0IGIoYSl7dGhpcy5fc3ByaXRlTWVzaC5zZXRCKHRoaXMuX3Nwcml0ZUluZGV4LGEpfWdldCBhKCl7cmV0dXJuIHRoaXMuX3Nwcml0ZU1lc2guZ2V0QSh0aGlzLl9zcHJpdGVJbmRleCl9c2V0IGEoYSl7dGhpcy5fc3ByaXRlTWVzaC5zZXRBKHRoaXMuX3Nwcml0ZUluZGV4LGEpfWdldCBvcGFjaXR5KCl7cmV0dXJuIHRoaXMuX3Nwcml0ZU1lc2guZ2V0T3BhY2l0eSh0aGlzLl9zcHJpdGVJbmRleCl9c2V0IG9wYWNpdHkoYSl7dGhpcy5fc3ByaXRlTWVzaC5zZXRPcGFjaXR5KHRoaXMuX3Nwcml0ZUluZGV4LGEpfWdldCB0aW1lc3RhbXAoKXtyZXR1cm4gdGhpcy5fc3ByaXRlTWVzaC5nZXRUaW1lc3RhbXAodGhpcy5fc3ByaXRlSW5kZXgpfXNldCB0aW1lc3RhbXAoYSl7dGhpcy5fc3ByaXRlTWVzaC5zZXRUaW1lc3RhbXAodGhpcy5fc3ByaXRlSW5kZXgsCmEpfWdldCBiYXNlWCgpe3JldHVybiB0aGlzLl9zcHJpdGVNZXNoLmdldEJhc2VYKHRoaXMuX3Nwcml0ZUluZGV4KX1zZXQgYmFzZVgoYSl7dGhpcy5fc3ByaXRlTWVzaC5zZXRCYXNlWCh0aGlzLl9zcHJpdGVJbmRleCxhKX1nZXQgYmFzZVkoKXtyZXR1cm4gdGhpcy5fc3ByaXRlTWVzaC5nZXRCYXNlWSh0aGlzLl9zcHJpdGVJbmRleCl9c2V0IGJhc2VZKGEpe3RoaXMuX3Nwcml0ZU1lc2guc2V0QmFzZVkodGhpcy5fc3ByaXRlSW5kZXgsYSl9Z2V0IGJhc2VaKCl7cmV0dXJuIHRoaXMuX3Nwcml0ZU1lc2guZ2V0QmFzZVoodGhpcy5fc3ByaXRlSW5kZXgpfXNldCBiYXNlWihhKXt0aGlzLl9zcHJpdGVNZXNoLnNldEJhc2VaKHRoaXMuX3Nwcml0ZUluZGV4LGEpfWdldCBiYXNlUigpe3JldHVybiB0aGlzLl9zcHJpdGVNZXNoLmdldEJhc2VSKHRoaXMuX3Nwcml0ZUluZGV4KX1zZXQgYmFzZVIoYSl7dGhpcy5fc3ByaXRlTWVzaC5zZXRCYXNlUih0aGlzLl9zcHJpdGVJbmRleCxhKX1nZXQgYmFzZUcoKXtyZXR1cm4gdGhpcy5fc3ByaXRlTWVzaC5nZXRCYXNlRyh0aGlzLl9zcHJpdGVJbmRleCl9c2V0IGJhc2VHKGEpe3RoaXMuX3Nwcml0ZU1lc2guc2V0QmFzZUcodGhpcy5fc3ByaXRlSW5kZXgsCmEpfWdldCBiYXNlQigpe3JldHVybiB0aGlzLl9zcHJpdGVNZXNoLmdldEJhc2VCKHRoaXMuX3Nwcml0ZUluZGV4KX1zZXQgYmFzZUIoYSl7dGhpcy5fc3ByaXRlTWVzaC5zZXRCYXNlQih0aGlzLl9zcHJpdGVJbmRleCxhKX1nZXQgYmFzZUEoKXtyZXR1cm4gdGhpcy5fc3ByaXRlTWVzaC5nZXRCYXNlQSh0aGlzLl9zcHJpdGVJbmRleCl9c2V0IGJhc2VBKGEpe3RoaXMuX3Nwcml0ZU1lc2guc2V0QmFzZUEodGhpcy5fc3ByaXRlSW5kZXgsYSl9Z2V0IGJhc2VPcGFjaXR5KCl7cmV0dXJuIHRoaXMuX3Nwcml0ZU1lc2guZ2V0QmFzZU9wYWNpdHkodGhpcy5fc3ByaXRlSW5kZXgpfXNldCBiYXNlT3BhY2l0eShhKXt0aGlzLl9zcHJpdGVNZXNoLnNldEJhc2VPcGFjaXR5KHRoaXMuX3Nwcml0ZUluZGV4LGEpfWdldCBiYXNlVGltZXN0YW1wKCl7cmV0dXJuIHRoaXMuX3Nwcml0ZU1lc2guZ2V0QmFzZVRpbWVzdGFtcCh0aGlzLl9zcHJpdGVJbmRleCl9c2V0IGJhc2VUaW1lc3RhbXAoYSl7dGhpcy5fc3ByaXRlTWVzaC5zZXRCYXNlVGltZXN0YW1wKHRoaXMuX3Nwcml0ZUluZGV4LAphKX1nZXQgdGV4dHVyZUluZGV4KCl7cmV0dXJuIHRoaXMuX3Nwcml0ZU1lc2guZ2V0VGV4dHVyZUluZGV4KHRoaXMuX3Nwcml0ZUluZGV4KX1zZXQgdGV4dHVyZUluZGV4KGEpe3RoaXMuX3Nwcml0ZU1lc2guc2V0VGV4dHVyZUluZGV4KHRoaXMuX3Nwcml0ZUluZGV4LGEpfWdldCBiYXNlVGV4dHVyZUluZGV4KCl7cmV0dXJuIHRoaXMuX3Nwcml0ZU1lc2guZ2V0QmFzZVRleHR1cmVJbmRleCh0aGlzLl9zcHJpdGVJbmRleCl9c2V0IGJhc2VUZXh0dXJlSW5kZXgoYSl7dGhpcy5fc3ByaXRlTWVzaC5zZXRCYXNlVGV4dHVyZUluZGV4KHRoaXMuX3Nwcml0ZUluZGV4LGEpfWdldCB0ZXh0dXJlVGltZXN0YW1wKCl7cmV0dXJuIHRoaXMuX3Nwcml0ZU1lc2guZ2V0VGV4dHVyZVRpbWVzdGFtcCh0aGlzLl9zcHJpdGVJbmRleCl9c2V0IHRleHR1cmVUaW1lc3RhbXAoYSl7dGhpcy5fc3ByaXRlTWVzaC5zZXRUZXh0dXJlVGltZXN0YW1wKHRoaXMuX3Nwcml0ZUluZGV4LGEpfWdldCBiYXNlVGV4dHVyZVRpbWVzdGFtcCgpe3JldHVybiB0aGlzLl9zcHJpdGVNZXNoLmdldEJhc2VUZXh0dXJlVGltZXN0YW1wKHRoaXMuX3Nwcml0ZUluZGV4KX1zZXQgYmFzZVRleHR1cmVUaW1lc3RhbXAoYSl7dGhpcy5fc3ByaXRlTWVzaC5zZXRCYXNlVGV4dHVyZVRpbWVzdGFtcCh0aGlzLl9zcHJpdGVJbmRleCwKYSl9cmViYXNlKGEpe3RoaXMuX3Nwcml0ZU1lc2gucmViYXNlKHRoaXMuX3Nwcml0ZUluZGV4LGEpfXNldFNwcml0ZUltYWdlRGF0YShhLGMpe3RoaXMuX3Nwcml0ZU1lc2guc2V0U3ByaXRlSW1hZ2VEYXRhKHRoaXMuX3Nwcml0ZUluZGV4LGEsYyl9c3dpdGNoVGV4dHVyZXMoYSxjKXt0aGlzLl9zcHJpdGVNZXNoLnN3aXRjaFRleHR1cmVzKHRoaXMuX3Nwcml0ZUluZGV4LGEsYyl9fQpjbGFzcyAkbSBleHRlbmRzIFRIUkVFLk1lc2h7Y29uc3RydWN0b3IoYSxjPTMyLGQ9MzIpe3N1cGVyKCk7dGhpcy5jYXBhY2l0eT1hO3RoaXMuaW1hZ2VXaWR0aD1jO3RoaXMuaW1hZ2VIZWlnaHQ9ZDt0aGlzLm5leHRJbmRleD0wO3RoaXMuc3ByaXRlV2lkdGg9dGhpcy5pbWFnZVdpZHRoL3RoaXMuaW1hZ2VIZWlnaHQ7dGhpcy5zcHJpdGVIZWlnaHQ9MTt0aGlzLmdlb21ldHJ5PW5ldyBUSFJFRS5CdWZmZXJHZW9tZXRyeTt0aGlzLnBvc2l0aW9uRGF0YT1uZXcgRmxvYXQzMkFycmF5KDEyKmEpO3RoaXMucG9zaXRpb25BdHRyaWJ1dGU9bmV3IFRIUkVFLkJ1ZmZlckF0dHJpYnV0ZSh0aGlzLnBvc2l0aW9uRGF0YSwzKTt0aGlzLnBvc2l0aW9uQXR0cmlidXRlLnNldER5bmFtaWMoITApO3RoaXMuZ2VvbWV0cnkuYWRkQXR0cmlidXRlKCJwb3NpdGlvbiIsdGhpcy5wb3NpdGlvbkF0dHJpYnV0ZSk7dGhpcy5iYXNlUG9zaXRpb25EYXRhPW5ldyBGbG9hdDMyQXJyYXkoMTIqYSk7dGhpcy5iYXNlUG9zaXRpb25BdHRyaWJ1dGU9Cm5ldyBUSFJFRS5CdWZmZXJBdHRyaWJ1dGUodGhpcy5iYXNlUG9zaXRpb25EYXRhLDMpO3RoaXMuYmFzZVBvc2l0aW9uQXR0cmlidXRlLnNldER5bmFtaWMoITApO3RoaXMuZ2VvbWV0cnkuYWRkQXR0cmlidXRlKCJiYXNlUG9zaXRpb24iLHRoaXMuYmFzZVBvc2l0aW9uQXR0cmlidXRlKTt0aGlzLmNvbG9yRGF0YT1uZXcgVWludDhBcnJheSgxNiphKTt0aGlzLmNvbG9yQXR0cmlidXRlPW5ldyBUSFJFRS5CdWZmZXJBdHRyaWJ1dGUodGhpcy5jb2xvckRhdGEsNCk7dGhpcy5jb2xvckF0dHJpYnV0ZS5ub3JtYWxpemVkPSEwO3RoaXMuY29sb3JBdHRyaWJ1dGUuc2V0RHluYW1pYyghMCk7dGhpcy5nZW9tZXRyeS5hZGRBdHRyaWJ1dGUoImNvbG9yIix0aGlzLmNvbG9yQXR0cmlidXRlKTt0aGlzLmJhc2VDb2xvckRhdGE9bmV3IFVpbnQ4QXJyYXkoMTYqYSk7dGhpcy5iYXNlQ29sb3JBdHRyaWJ1dGU9bmV3IFRIUkVFLkJ1ZmZlckF0dHJpYnV0ZSh0aGlzLmJhc2VDb2xvckRhdGEsNCk7dGhpcy5iYXNlQ29sb3JBdHRyaWJ1dGUubm9ybWFsaXplZD0KITA7dGhpcy5iYXNlQ29sb3JBdHRyaWJ1dGUuc2V0RHluYW1pYyghMCk7dGhpcy5nZW9tZXRyeS5hZGRBdHRyaWJ1dGUoImJhc2VDb2xvciIsdGhpcy5iYXNlQ29sb3JBdHRyaWJ1dGUpO3RoaXMub3BhY2l0eURhdGE9bmV3IEZsb2F0MzJBcnJheSg0KmEpO3RoaXMub3BhY2l0eUF0dHJpYnV0ZT1uZXcgVEhSRUUuQnVmZmVyQXR0cmlidXRlKHRoaXMub3BhY2l0eURhdGEsMSk7dGhpcy5vcGFjaXR5QXR0cmlidXRlLnNldER5bmFtaWMoITApO3RoaXMuZ2VvbWV0cnkuYWRkQXR0cmlidXRlKCJvcGFjaXR5Iix0aGlzLm9wYWNpdHlBdHRyaWJ1dGUpO3RoaXMuYmFzZU9wYWNpdHlEYXRhPW5ldyBGbG9hdDMyQXJyYXkoNCphKTt0aGlzLmJhc2VPcGFjaXR5QXR0cmlidXRlPW5ldyBUSFJFRS5CdWZmZXJBdHRyaWJ1dGUodGhpcy5iYXNlT3BhY2l0eURhdGEsMSk7dGhpcy5iYXNlT3BhY2l0eUF0dHJpYnV0ZS5zZXREeW5hbWljKCEwKTt0aGlzLmdlb21ldHJ5LmFkZEF0dHJpYnV0ZSgiYmFzZU9wYWNpdHkiLAp0aGlzLmJhc2VPcGFjaXR5QXR0cmlidXRlKTt0aGlzLnRpbWVzdGFtcERhdGE9bmV3IEZsb2F0MzJBcnJheSg0KmEpO3RoaXMudGltZXN0YW1wQXR0cmlidXRlPW5ldyBUSFJFRS5CdWZmZXJBdHRyaWJ1dGUodGhpcy50aW1lc3RhbXBEYXRhLDEpO3RoaXMudGltZXN0YW1wQXR0cmlidXRlLnNldER5bmFtaWMoITApO3RoaXMuZ2VvbWV0cnkuYWRkQXR0cmlidXRlKCJ0aW1lc3RhbXAiLHRoaXMudGltZXN0YW1wQXR0cmlidXRlKTt0aGlzLmJhc2VUaW1lc3RhbXBEYXRhPW5ldyBGbG9hdDMyQXJyYXkoNCphKTt0aGlzLmJhc2VUaW1lc3RhbXBBdHRyaWJ1dGU9bmV3IFRIUkVFLkJ1ZmZlckF0dHJpYnV0ZSh0aGlzLmJhc2VUaW1lc3RhbXBEYXRhLDEpO3RoaXMuYmFzZVRpbWVzdGFtcEF0dHJpYnV0ZS5zZXREeW5hbWljKCEwKTt0aGlzLmdlb21ldHJ5LmFkZEF0dHJpYnV0ZSgiYmFzZVRpbWVzdGFtcCIsdGhpcy5iYXNlVGltZXN0YW1wQXR0cmlidXRlKTt0aGlzLmZhY2VJbmRleERhdGE9Cm5ldyBVaW50MzJBcnJheSg2KmEpO2Zvcih2YXIgZj0wO2Y8YTtmKyspe3ZhciBnPTYqZjtjb25zdCBsPTQqZjt0aGlzLmZhY2VJbmRleERhdGFbZyswXT1sKzA7dGhpcy5mYWNlSW5kZXhEYXRhW2crMV09bCsxO3RoaXMuZmFjZUluZGV4RGF0YVtnKzJdPWwrMjt0aGlzLmZhY2VJbmRleERhdGFbZyszXT1sKzA7dGhpcy5mYWNlSW5kZXhEYXRhW2crNF09bCsyO3RoaXMuZmFjZUluZGV4RGF0YVtnKzVdPWwrM310aGlzLmZhY2VJbmRleEF0dHJpYnV0ZT1uZXcgVEhSRUUuQnVmZmVyQXR0cmlidXRlKHRoaXMuZmFjZUluZGV4RGF0YSwxKTt0aGlzLmdlb21ldHJ5LnNldEluZGV4KHRoaXMuZmFjZUluZGV4QXR0cmlidXRlKTt0aGlzLnRleHR1cmVJbmRleERhdGE9bmV3IEZsb2F0MzJBcnJheSg0KmEpO3RoaXMudGV4dHVyZUluZGV4QXR0cmlidXRlPW5ldyBUSFJFRS5CdWZmZXJBdHRyaWJ1dGUodGhpcy50ZXh0dXJlSW5kZXhEYXRhLDEpO3RoaXMudGV4dHVyZUluZGV4QXR0cmlidXRlLnNldER5bmFtaWMoITApOwp0aGlzLmdlb21ldHJ5LmFkZEF0dHJpYnV0ZSgidGV4dHVyZUluZGV4Iix0aGlzLnRleHR1cmVJbmRleEF0dHJpYnV0ZSk7dGhpcy5iYXNlVGV4dHVyZUluZGV4RGF0YT1uZXcgRmxvYXQzMkFycmF5KDQqYSk7dGhpcy5iYXNlVGV4dHVyZUluZGV4QXR0cmlidXRlPW5ldyBUSFJFRS5CdWZmZXJBdHRyaWJ1dGUodGhpcy5iYXNlVGV4dHVyZUluZGV4RGF0YSwxKTt0aGlzLmJhc2VUZXh0dXJlSW5kZXhBdHRyaWJ1dGUuc2V0RHluYW1pYyghMCk7dGhpcy5nZW9tZXRyeS5hZGRBdHRyaWJ1dGUoImJhc2VUZXh0dXJlSW5kZXgiLHRoaXMuYmFzZVRleHR1cmVJbmRleEF0dHJpYnV0ZSk7dGhpcy50ZXh0dXJlVGltZXN0YW1wRGF0YT1uZXcgRmxvYXQzMkFycmF5KDQqYSk7dGhpcy50ZXh0dXJlVGltZXN0YW1wQXR0cmlidXRlPW5ldyBUSFJFRS5CdWZmZXJBdHRyaWJ1dGUodGhpcy50ZXh0dXJlVGltZXN0YW1wRGF0YSwxKTt0aGlzLnRleHR1cmVUaW1lc3RhbXBBdHRyaWJ1dGUuc2V0RHluYW1pYyghMCk7CnRoaXMuZ2VvbWV0cnkuYWRkQXR0cmlidXRlKCJ0ZXh0dXJlVGltZXN0YW1wIix0aGlzLnRleHR1cmVUaW1lc3RhbXBBdHRyaWJ1dGUpO3RoaXMuYmFzZVRleHR1cmVUaW1lc3RhbXBEYXRhPW5ldyBGbG9hdDMyQXJyYXkoNCphKTt0aGlzLmJhc2VUZXh0dXJlVGltZXN0YW1wQXR0cmlidXRlPW5ldyBUSFJFRS5CdWZmZXJBdHRyaWJ1dGUodGhpcy5iYXNlVGV4dHVyZVRpbWVzdGFtcERhdGEsMSk7dGhpcy5iYXNlVGV4dHVyZVRpbWVzdGFtcEF0dHJpYnV0ZS5zZXREeW5hbWljKCEwKTt0aGlzLmdlb21ldHJ5LmFkZEF0dHJpYnV0ZSgiYmFzZVRleHR1cmVUaW1lc3RhbXAiLHRoaXMuYmFzZVRleHR1cmVUaW1lc3RhbXBBdHRyaWJ1dGUpO2Y9NCphO3RoaXMudmVydGV4SW5kZXhEYXRhPW5ldyBGbG9hdDMyQXJyYXkoZik7Zm9yKGc9MDtnPGY7ZysrKXRoaXMudmVydGV4SW5kZXhEYXRhW2ddPWc7dGhpcy52ZXJ0ZXhJbmRleEF0dHJpYnV0ZT1uZXcgVEhSRUUuQnVmZmVyQXR0cmlidXRlKHRoaXMudmVydGV4SW5kZXhEYXRhLAoxKTt0aGlzLmdlb21ldHJ5LmFkZEF0dHJpYnV0ZSgidmVydGV4SW5kZXgiLHRoaXMudmVydGV4SW5kZXhBdHRyaWJ1dGUpO3RoaXMuZGVmYXVsdFRleHR1cmVDYW52YXM9dGhpcy5jcmVhdGVEZWZhdWx0VGV4dHVyZUNhbnZhcygpO3RoaXMuZGVmYXVsdFRleHR1cmU9bmV3IFRIUkVFLlRleHR1cmUodGhpcy5kZWZhdWx0VGV4dHVyZUNhbnZhcyk7dGhpcy5kZWZhdWx0VGV4dHVyZS5taW5GaWx0ZXI9VEhSRUUuTGluZWFyRmlsdGVyO3RoaXMuZGVmYXVsdFRleHR1cmUubWFnRmlsdGVyPVRIUkVFLk5lYXJlc3RGaWx0ZXI7dGhpcy5kZWZhdWx0VGV4dHVyZS5uZWVkc1VwZGF0ZT0hMDt0aGlzLnNwcml0ZUF0bGFzPW5ldyBYbShhLGMsZCk7dGhpcy5tYXRlcmlhbD1uZXcgWW0odGhpcy5kZWZhdWx0VGV4dHVyZSx0aGlzLnNwcml0ZUF0bGFzKTt0aGlzLm9uQmVmb3JlUmVuZGVyPSgpPT57dGhpcy5tYXRlcmlhbC51cGRhdGVBdGxhc1VuaWZvcm1zKCl9O3RoaXMudGltZT10aGlzLmNvbnN0cnVjdGlvblRpbWVzdGFtcD0KRGF0ZS5ub3coKTt0aGlzLmZydXN0dW1DdWxsZWQ9ITF9Y3JlYXRlU3ByaXRlKCl7cmV0dXJuIG5ldyBabSh0aGlzLHRoaXMubmV4dEluZGV4KyspfWdldCB0aW1lKCl7cmV0dXJuIHRoaXMubWF0ZXJpYWwudGltZSt0aGlzLmNvbnN0cnVjdGlvblRpbWVzdGFtcH1zZXQgdGltZShhKXt0aGlzLm1hdGVyaWFsLnRpbWU9YS10aGlzLmNvbnN0cnVjdGlvblRpbWVzdGFtcH1jcmVhdGVEZWZhdWx0VGV4dHVyZUNhbnZhcygpe2NvbnN0IGE9dGhpcy5kZWZhdWx0VGV4dHVyZUNhbnZhcz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKSxjPWEud2lkdGg9dGhpcy5pbWFnZVdpZHRoLGQ9YS5oZWlnaHQ9dGhpcy5pbWFnZUhlaWdodCxmPWEuZ2V0Q29udGV4dCgiMmQiKSxnPW5ldyBJbWFnZTtnLm9ubG9hZD0oKT0+e2YuZHJhd0ltYWdlKGcsMCwwLGMsZCk7dGhpcy5kZWZhdWx0VGV4dHVyZS5uZWVkc1VwZGF0ZT0hMH07Zy5zcmM9VVJMLmNyZWF0ZU9iamVjdFVSTChuZXcgQmxvYihbJ1xuXHgzY3N2ZyB2ZXJzaW9uXHgzZCIxLjEiXG4gICAgIGJhc2VQcm9maWxlXHgzZCJmdWxsIlxuICAgICB3aWR0aFx4M2QiMTI4IiBoZWlnaHRceDNkIjEyOCJcbiAgICAgeG1sbnNceDNkImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIlxuICAgICB4bWxuczp4bGlua1x4M2QiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayJceDNlXG4gIFx4M2NkZWZzXHgzZVxuICAgIFx4M2NsaW5lYXJHcmFkaWVudCBpZFx4M2QibGluZWFyR3JhZGllbnQzNzc0Ilx4M2VcbiAgICAgIFx4M2NzdG9wXG4gICAgICAgICBzdHlsZVx4M2Qic3RvcC1jb2xvcjojODA4MDgwO3N0b3Atb3BhY2l0eToxOyJcbiAgICAgICAgIG9mZnNldFx4M2QiMCIgL1x4M2VcbiAgICAgIFx4M2NzdG9wXG4gICAgICAgICBzdHlsZVx4M2Qic3RvcC1jb2xvcjojNTU1NTU1O3N0b3Atb3BhY2l0eToxOyJcbiAgICAgICAgIG9mZnNldFx4M2QiMSIgL1x4M2VcbiAgICBceDNjL2xpbmVhckdyYWRpZW50XHgzZVxuICAgIFx4M2NyYWRpYWxHcmFkaWVudFxuICAgICAgIHhsaW5rOmhyZWZceDNkIiNsaW5lYXJHcmFkaWVudDM3NzQiXG4gICAgICAgaWRceDNkInJhZGlhbEdyYWRpZW50Mzc4MCJcbiAgICAgICBjeFx4M2QiODAiXG4gICAgICAgY3lceDNkIjQwIlxuICAgICAgIGZ4XHgzZCI4MCJcbiAgICAgICBmeVx4M2QiNDAiXG4gICAgICAgclx4M2QiODAiXG4gICAgICAgZ3JhZGllbnRVbml0c1x4M2QidXNlclNwYWNlT25Vc2UiXG4gICAgICAgc3ByZWFkTWV0aG9kXHgzZCJwYWQiIC9ceDNlXG4gIFx4M2MvZGVmc1x4M2VcbiAgXHgzY2NpcmNsZSBjeFx4M2QiNTAlIiBjeVx4M2QiNTAlIiByXHgzZCI1MCUiIGZpbGxceDNkInVybCgjcmFkaWFsR3JhZGllbnQzNzgwKSIgL1x4M2Vcblx4M2Mvc3ZnXHgzZVxuJ10sCnt0eXBlOiJpbWFnZS9zdmcreG1sO2NoYXJzZXRceDNkdXRmLTgifSkpO3JldHVybiBhfWdldFgoYSl7cmV0dXJuIHRoaXMucG9zaXRpb25EYXRhWzEyKmFdfXNldFgoYSxjKXthKj0xMjt0aGlzLnBvc2l0aW9uRGF0YVthKzBdPWM7dGhpcy5wb3NpdGlvbkRhdGFbYSszXT1jK3RoaXMuc3ByaXRlV2lkdGg7dGhpcy5wb3NpdGlvbkRhdGFbYSs2XT1jK3RoaXMuc3ByaXRlV2lkdGg7dGhpcy5wb3NpdGlvbkRhdGFbYSs5XT1jO3RoaXMucG9zaXRpb25BdHRyaWJ1dGUubmVlZHNVcGRhdGU9ITB9Z2V0WShhKXtyZXR1cm4gdGhpcy5wb3NpdGlvbkRhdGFbMTIqYSsxXX1zZXRZKGEsYyl7YSo9MTI7dGhpcy5wb3NpdGlvbkRhdGFbYSsxXT1jO3RoaXMucG9zaXRpb25EYXRhW2ErNF09Yzt0aGlzLnBvc2l0aW9uRGF0YVthKzddPWMrdGhpcy5zcHJpdGVIZWlnaHQ7dGhpcy5wb3NpdGlvbkRhdGFbYSsxMF09Yyt0aGlzLnNwcml0ZUhlaWdodDt0aGlzLnBvc2l0aW9uQXR0cmlidXRlLm5lZWRzVXBkYXRlPQohMH1nZXRaKGEpe3JldHVybiB0aGlzLnBvc2l0aW9uRGF0YVsxMiphKzJdfXNldFooYSxjKXthKj0xMjt0aGlzLnBvc2l0aW9uRGF0YVthKzJdPWM7dGhpcy5wb3NpdGlvbkRhdGFbYSs1XT1jO3RoaXMucG9zaXRpb25EYXRhW2ErOF09Yzt0aGlzLnBvc2l0aW9uRGF0YVthKzExXT1jO3RoaXMucG9zaXRpb25BdHRyaWJ1dGUubmVlZHNVcGRhdGU9ITB9Z2V0UihhKXtyZXR1cm4gdGhpcy5jb2xvckRhdGFbMTYqYV19c2V0UihhLGMpe2EqPTE2O3RoaXMuY29sb3JEYXRhW2ErMF09Yzt0aGlzLmNvbG9yRGF0YVthKzRdPWM7dGhpcy5jb2xvckRhdGFbYSs4XT1jO3RoaXMuY29sb3JEYXRhW2ErMTJdPWM7dGhpcy5jb2xvckF0dHJpYnV0ZS5uZWVkc1VwZGF0ZT0hMH1nZXRHKGEpe3JldHVybiB0aGlzLmNvbG9yRGF0YVsxNiphKzFdfXNldEcoYSxjKXthKj0xNjt0aGlzLmNvbG9yRGF0YVthKzFdPWM7dGhpcy5jb2xvckRhdGFbYSs1XT1jO3RoaXMuY29sb3JEYXRhW2ErOV09Yzt0aGlzLmNvbG9yRGF0YVthKwoxM109Yzt0aGlzLmNvbG9yQXR0cmlidXRlLm5lZWRzVXBkYXRlPSEwfWdldEIoYSl7cmV0dXJuIHRoaXMuY29sb3JEYXRhWzE2KmErMl19c2V0QihhLGMpe2EqPTE2O3RoaXMuY29sb3JEYXRhW2ErMl09Yzt0aGlzLmNvbG9yRGF0YVthKzZdPWM7dGhpcy5jb2xvckRhdGFbYSsxMF09Yzt0aGlzLmNvbG9yRGF0YVthKzE0XT1jO3RoaXMuY29sb3JBdHRyaWJ1dGUubmVlZHNVcGRhdGU9ITB9Z2V0QShhKXtyZXR1cm4gdGhpcy5jb2xvckRhdGFbMTYqYSszXX1zZXRBKGEsYyl7YSo9MTY7dGhpcy5jb2xvckRhdGFbYSszXT1jO3RoaXMuY29sb3JEYXRhW2ErN109Yzt0aGlzLmNvbG9yRGF0YVthKzExXT1jO3RoaXMuY29sb3JEYXRhW2ErMTVdPWM7dGhpcy5jb2xvckF0dHJpYnV0ZS5uZWVkc1VwZGF0ZT0hMH1nZXRCYXNlWChhKXtyZXR1cm4gdGhpcy5iYXNlUG9zaXRpb25EYXRhWzEyKmFdfXNldEJhc2VYKGEsYyl7YSo9MTI7dGhpcy5iYXNlUG9zaXRpb25EYXRhW2ErMF09Yzt0aGlzLmJhc2VQb3NpdGlvbkRhdGFbYSsKM109Yyt0aGlzLnNwcml0ZVdpZHRoO3RoaXMuYmFzZVBvc2l0aW9uRGF0YVthKzZdPWMrdGhpcy5zcHJpdGVXaWR0aDt0aGlzLmJhc2VQb3NpdGlvbkRhdGFbYSs5XT1jO3RoaXMuYmFzZVBvc2l0aW9uQXR0cmlidXRlLm5lZWRzVXBkYXRlPSEwfWdldEJhc2VZKGEpe3JldHVybiB0aGlzLmJhc2VQb3NpdGlvbkRhdGFbMTIqYSsxXX1zZXRCYXNlWShhLGMpe2EqPTEyO3RoaXMuYmFzZVBvc2l0aW9uRGF0YVthKzFdPWM7dGhpcy5iYXNlUG9zaXRpb25EYXRhW2ErNF09Yzt0aGlzLmJhc2VQb3NpdGlvbkRhdGFbYSs3XT1jK3RoaXMuc3ByaXRlSGVpZ2h0O3RoaXMuYmFzZVBvc2l0aW9uRGF0YVthKzEwXT1jK3RoaXMuc3ByaXRlSGVpZ2h0O3RoaXMuYmFzZVBvc2l0aW9uQXR0cmlidXRlLm5lZWRzVXBkYXRlPSEwfWdldEJhc2VaKGEpe3JldHVybiB0aGlzLmJhc2VQb3NpdGlvbkRhdGFbMTIqYSsyXX1zZXRCYXNlWihhLGMpe2EqPTEyO3RoaXMuYmFzZVBvc2l0aW9uRGF0YVthKzJdPWM7CnRoaXMuYmFzZVBvc2l0aW9uRGF0YVthKzVdPWM7dGhpcy5iYXNlUG9zaXRpb25EYXRhW2ErOF09Yzt0aGlzLmJhc2VQb3NpdGlvbkRhdGFbYSsxMV09Yzt0aGlzLmJhc2VQb3NpdGlvbkF0dHJpYnV0ZS5uZWVkc1VwZGF0ZT0hMH1nZXRCYXNlUihhKXtyZXR1cm4gdGhpcy5iYXNlQ29sb3JEYXRhWzE2KmFdfXNldEJhc2VSKGEsYyl7YSo9MTY7dGhpcy5iYXNlQ29sb3JEYXRhW2ErMF09Yzt0aGlzLmJhc2VDb2xvckRhdGFbYSs0XT1jO3RoaXMuYmFzZUNvbG9yRGF0YVthKzhdPWM7dGhpcy5iYXNlQ29sb3JEYXRhW2ErMTJdPWM7dGhpcy5iYXNlQ29sb3JBdHRyaWJ1dGUubmVlZHNVcGRhdGU9ITB9Z2V0QmFzZUcoYSl7cmV0dXJuIHRoaXMuYmFzZUNvbG9yRGF0YVsxNiphKzFdfXNldEJhc2VHKGEsYyl7YSo9MTY7dGhpcy5iYXNlQ29sb3JEYXRhW2ErMV09Yzt0aGlzLmJhc2VDb2xvckRhdGFbYSs1XT1jO3RoaXMuYmFzZUNvbG9yRGF0YVthKzldPWM7dGhpcy5iYXNlQ29sb3JEYXRhW2ErCjEzXT1jO3RoaXMuYmFzZUNvbG9yQXR0cmlidXRlLm5lZWRzVXBkYXRlPSEwfWdldEJhc2VCKGEpe3JldHVybiB0aGlzLmJhc2VDb2xvckRhdGFbMTYqYSsyXX1zZXRCYXNlQihhLGMpe2EqPTE2O3RoaXMuYmFzZUNvbG9yRGF0YVthKzJdPWM7dGhpcy5iYXNlQ29sb3JEYXRhW2ErNl09Yzt0aGlzLmJhc2VDb2xvckRhdGFbYSsxMF09Yzt0aGlzLmJhc2VDb2xvckRhdGFbYSsxNF09Yzt0aGlzLmJhc2VDb2xvckF0dHJpYnV0ZS5uZWVkc1VwZGF0ZT0hMH1nZXRCYXNlQShhKXtyZXR1cm4gdGhpcy5iYXNlQ29sb3JEYXRhWzE2KmErM119c2V0QmFzZUEoYSxjKXthKj0xNjt0aGlzLmJhc2VDb2xvckRhdGFbYSszXT1jO3RoaXMuYmFzZUNvbG9yRGF0YVthKzddPWM7dGhpcy5iYXNlQ29sb3JEYXRhW2ErMTFdPWM7dGhpcy5iYXNlQ29sb3JEYXRhW2ErMTVdPWM7dGhpcy5iYXNlQ29sb3JBdHRyaWJ1dGUubmVlZHNVcGRhdGU9ITB9Z2V0T3BhY2l0eShhKXtyZXR1cm4gdGhpcy5vcGFjaXR5RGF0YVs0KgphXX1zZXRPcGFjaXR5KGEsYyl7YSo9NDt0aGlzLm9wYWNpdHlEYXRhW2ErMF09Yzt0aGlzLm9wYWNpdHlEYXRhW2ErMV09Yzt0aGlzLm9wYWNpdHlEYXRhW2ErMl09Yzt0aGlzLm9wYWNpdHlEYXRhW2ErM109Yzt0aGlzLm9wYWNpdHlBdHRyaWJ1dGUubmVlZHNVcGRhdGU9ITB9Z2V0QmFzZU9wYWNpdHkoYSl7cmV0dXJuIHRoaXMuYmFzZU9wYWNpdHlEYXRhWzQqYV19c2V0QmFzZU9wYWNpdHkoYSxjKXthKj00O3RoaXMuYmFzZU9wYWNpdHlEYXRhW2ErMF09Yzt0aGlzLmJhc2VPcGFjaXR5RGF0YVthKzFdPWM7dGhpcy5iYXNlT3BhY2l0eURhdGFbYSsyXT1jO3RoaXMuYmFzZU9wYWNpdHlEYXRhW2ErM109Yzt0aGlzLmJhc2VPcGFjaXR5QXR0cmlidXRlLm5lZWRzVXBkYXRlPSEwfWdldFRpbWVzdGFtcChhKXtyZXR1cm4gdGhpcy50aW1lc3RhbXBEYXRhWzQqYV0rdGhpcy5jb25zdHJ1Y3Rpb25UaW1lc3RhbXB9c2V0VGltZXN0YW1wKGEsYyl7YSo9NDtjLT10aGlzLmNvbnN0cnVjdGlvblRpbWVzdGFtcDsKdGhpcy50aW1lc3RhbXBEYXRhW2ErMF09Yzt0aGlzLnRpbWVzdGFtcERhdGFbYSsxXT1jO3RoaXMudGltZXN0YW1wRGF0YVthKzJdPWM7dGhpcy50aW1lc3RhbXBEYXRhW2ErM109Yzt0aGlzLnRpbWVzdGFtcEF0dHJpYnV0ZS5uZWVkc1VwZGF0ZT0hMH1nZXRCYXNlVGltZXN0YW1wKGEpe3JldHVybiB0aGlzLmJhc2VUaW1lc3RhbXBEYXRhWzQqYV0rdGhpcy5jb25zdHJ1Y3Rpb25UaW1lc3RhbXB9c2V0QmFzZVRpbWVzdGFtcChhLGMpe2EqPTQ7Yy09dGhpcy5jb25zdHJ1Y3Rpb25UaW1lc3RhbXA7dGhpcy5iYXNlVGltZXN0YW1wRGF0YVthKzBdPWM7dGhpcy5iYXNlVGltZXN0YW1wRGF0YVthKzFdPWM7dGhpcy5iYXNlVGltZXN0YW1wRGF0YVthKzJdPWM7dGhpcy5iYXNlVGltZXN0YW1wRGF0YVthKzNdPWM7dGhpcy5iYXNlVGltZXN0YW1wQXR0cmlidXRlLm5lZWRzVXBkYXRlPSEwfWdldFRleHR1cmVJbmRleChhKXtyZXR1cm4gdGhpcy50ZXh0dXJlSW5kZXhEYXRhWzQqYV19c2V0VGV4dHVyZUluZGV4KGEsCmMpe2EqPTQ7dGhpcy50ZXh0dXJlSW5kZXhEYXRhW2ErMF09Yzt0aGlzLnRleHR1cmVJbmRleERhdGFbYSsxXT1jO3RoaXMudGV4dHVyZUluZGV4RGF0YVthKzJdPWM7dGhpcy50ZXh0dXJlSW5kZXhEYXRhW2ErM109Yzt0aGlzLnRleHR1cmVJbmRleEF0dHJpYnV0ZS5uZWVkc1VwZGF0ZT0hMH1nZXRCYXNlVGV4dHVyZUluZGV4KGEpe3JldHVybiB0aGlzLmJhc2VUZXh0dXJlSW5kZXhEYXRhWzQqYV19c2V0QmFzZVRleHR1cmVJbmRleChhLGMpe2EqPTQ7dGhpcy5iYXNlVGV4dHVyZUluZGV4RGF0YVthKzBdPWM7dGhpcy5iYXNlVGV4dHVyZUluZGV4RGF0YVthKzFdPWM7dGhpcy5iYXNlVGV4dHVyZUluZGV4RGF0YVthKzJdPWM7dGhpcy5iYXNlVGV4dHVyZUluZGV4RGF0YVthKzNdPWM7dGhpcy5iYXNlVGV4dHVyZUluZGV4QXR0cmlidXRlLm5lZWRzVXBkYXRlPSEwfWdldFRleHR1cmVUaW1lc3RhbXAoYSl7cmV0dXJuIHRoaXMudGV4dHVyZVRpbWVzdGFtcERhdGFbNCphXSt0aGlzLmNvbnN0cnVjdGlvblRpbWVzdGFtcH1zZXRUZXh0dXJlVGltZXN0YW1wKGEsCmMpe2EqPTQ7Yy09dGhpcy5jb25zdHJ1Y3Rpb25UaW1lc3RhbXA7dGhpcy50ZXh0dXJlVGltZXN0YW1wRGF0YVthKzBdPWM7dGhpcy50ZXh0dXJlVGltZXN0YW1wRGF0YVthKzFdPWM7dGhpcy50ZXh0dXJlVGltZXN0YW1wRGF0YVthKzJdPWM7dGhpcy50ZXh0dXJlVGltZXN0YW1wRGF0YVthKzNdPWM7dGhpcy50ZXh0dXJlVGltZXN0YW1wQXR0cmlidXRlLm5lZWRzVXBkYXRlPSEwfWdldEJhc2VUZXh0dXJlVGltZXN0YW1wKGEpe3JldHVybiB0aGlzLmJhc2VUZXh0dXJlVGltZXN0YW1wRGF0YVs0KmFdK3RoaXMuY29uc3RydWN0aW9uVGltZXN0YW1wfXNldEJhc2VUZXh0dXJlVGltZXN0YW1wKGEsYyl7YSo9NDtjLT10aGlzLmNvbnN0cnVjdGlvblRpbWVzdGFtcDt0aGlzLmJhc2VUZXh0dXJlVGltZXN0YW1wRGF0YVthKzBdPWM7dGhpcy5iYXNlVGV4dHVyZVRpbWVzdGFtcERhdGFbYSsxXT1jO3RoaXMuYmFzZVRleHR1cmVUaW1lc3RhbXBEYXRhW2ErMl09Yzt0aGlzLmJhc2VUZXh0dXJlVGltZXN0YW1wRGF0YVthKwozXT1jO3RoaXMuYmFzZVRleHR1cmVUaW1lc3RhbXBBdHRyaWJ1dGUubmVlZHNVcGRhdGU9ITB9cmViYXNlKGEsYyl7Yz12b2lkIDA9PT1jP3RoaXMudGltZTpjO2NvbnN0IGQ9dGhpcy5nZXRCYXNlVGltZXN0YW1wKGEpLGY9dGhpcy5nZXRUaW1lc3RhbXAoYSksZz1jPj1mPzE6Yzw9ZD8wOnRoaXMubWF0ZXJpYWwuYXBwbHlFYXNpbmcoKGMtZCkvKGYtZCkpLGw9KGssbSk9PmsqZyttKigxLWcpO3RoaXMuc2V0QmFzZVgoYSxsKHRoaXMuZ2V0WChhKSx0aGlzLmdldEJhc2VYKGEpKSk7dGhpcy5zZXRCYXNlWShhLGwodGhpcy5nZXRZKGEpLHRoaXMuZ2V0QmFzZVkoYSkpKTt0aGlzLnNldEJhc2VaKGEsbCh0aGlzLmdldFooYSksdGhpcy5nZXRCYXNlWihhKSkpO3RoaXMuc2V0QmFzZVIoYSxsKHRoaXMuZ2V0UihhKSx0aGlzLmdldEJhc2VSKGEpKSk7dGhpcy5zZXRCYXNlRyhhLGwodGhpcy5nZXRHKGEpLHRoaXMuZ2V0QmFzZUcoYSkpKTt0aGlzLnNldEJhc2VCKGEsbCh0aGlzLmdldEIoYSksCnRoaXMuZ2V0QmFzZUIoYSkpKTt0aGlzLnNldEJhc2VBKGEsbCh0aGlzLmdldEEoYSksdGhpcy5nZXRCYXNlQShhKSkpO3RoaXMuc2V0QmFzZU9wYWNpdHkoYSxsKHRoaXMuZ2V0T3BhY2l0eShhKSx0aGlzLmdldEJhc2VPcGFjaXR5KGEpKSk7Yz1jPj1mP2M6bChmLGQpO3RoaXMuc2V0QmFzZVRpbWVzdGFtcChhLGMpfXNldFNwcml0ZUltYWdlRGF0YShhLGMsZCl7dGhpcy5zcHJpdGVBdGxhcy5zZXRTcHJpdGVJbWFnZURhdGEoYSxjLGQpfXN3aXRjaFRleHR1cmVzKGEsYyxkKXtjb25zdCBmPXRoaXMuZ2V0VGV4dHVyZUluZGV4KGEpO3RoaXMuc2V0QmFzZVRleHR1cmVJbmRleChhLGYpO3RoaXMuc2V0VGV4dHVyZUluZGV4KGEsMD09PWY/MTowKTt0aGlzLnNldEJhc2VUZXh0dXJlVGltZXN0YW1wKGEsYyk7dGhpcy5zZXRUZXh0dXJlVGltZXN0YW1wKGEsZCl9ZmluZFNwcml0ZXMoYSxjKXtjb25zdCBkPVtdO2ZvcihsZXQgZj0wO2Y8dGhpcy5jYXBhY2l0eTtmKyspe2NvbnN0IGc9MTIqCmY7YT49dGhpcy5wb3NpdGlvbkRhdGFbZyswXSYmYTw9dGhpcy5wb3NpdGlvbkRhdGFbZys2XSYmYz49dGhpcy5wb3NpdGlvbkRhdGFbZysxXSYmYzw9dGhpcy5wb3NpdGlvbkRhdGFbZys3XSYmZC5wdXNoKGYpfXJldHVybiBkfX07Cjwvc2NyaXB0PgoKPHNjcmlwdD4vL35+V0VCUEFUSH5+L2ZhY2V0cy1kaXZlL2xpYi93b3JkdHJlZS5qcwpjb25zdCBhbj0vXGJbLSdcd10rXGIvZztmdW5jdGlvbiBibihhKXtyZXR1cm5gJHt0eXBlb2YgYX1cdTAwMUYke2F9YH1mdW5jdGlvbiBjbihhKXtyZXR1cm4gYS50b0xvd2VyQ2FzZSgpLm1hdGNoKGFuKXx8W119CmZ1bmN0aW9uIGRuKGEpe2lmKDI+YS52YWx1ZUNvdW50KXJldHVybiBudWxsO2Zvcih2YXIgYz0oZyxsKT0+e2ZvcihsZXQgaz0wO2s8Zy5sZW5ndGg7aysrKWxbZ1trXV09ITB9LGQ9e30sZj1hO2Y7KWMoZi5jb21tb25Xb3JkcyxkKSxmPWYucGFyZW50O2ZvcihmPTA7ZjxhLmNoaWxkcmVuLmxlbmd0aDtmKyspYyhhLmNoaWxkcmVuW2ZdLmNvbW1vbldvcmRzLGQpO2M9e307Zm9yKGNvbnN0IGcgaW4gYS52YWx1ZUhhc2gpe2NvbnN0IHtjb3VudDpsLHdvcmRzOmt9PWEudmFsdWVIYXNoW2ddO2Zvcihjb25zdCBtIGluIGspbSBpbiBkfHwoY1ttXT0oY1ttXXx8MCkrbCxjW21dPT09YS50b3RhbENvdW50JiYoYS5jb21tb25Xb3Jkcy5wdXNoKG0pLGRbbV09ITAsZGVsZXRlIGNbbV0pKX1hPW51bGw7ZD0wO2Zvcihjb25zdCBnIGluIGMpY1tnXT5kJiYoYT1nLGQ9Y1tnXSk7cmV0dXJuIGF9CmZ1bmN0aW9uIGVuKGEpe3ZhciBjPXtwYXJlbnQ6bnVsbCxjb21tb25Xb3JkczpbXSxsZXZlbDoxLG9yZGVyOjAsdG90YWxDb3VudDowLHZhbHVlSGFzaDp7fSx2YWx1ZUNvdW50OjAsbm9uVmFsdWVDb3VudDowLGNoaWxkcmVuOltdfTtjb25zdCBkPXtyb290OmMsbm9kZUhhc2g6e30saGlnaGVzdExldmVsOjEsbGV2ZWxIYXNoOnsxOmN9fTtmb3IodmFyIGYgaW4gYSl7aWYoIWEuaGFzT3duUHJvcGVydHkoZikpY29udGludWU7Y29uc3Qge3ZhbHVlOnEsY291bnQ6cix3b3Jkczp0fT1hW2ZdOyJzdHJpbmciPT09dHlwZW9mIHE/KGMudmFsdWVIYXNoW2ZdPXt2YWx1ZTpxLGNvdW50OnIsd29yZHM6dH0sYy52YWx1ZUNvdW50Kz1yKTpjLm5vblZhbHVlQ291bnQrPXI7Yy50b3RhbENvdW50Kz1yO2Qubm9kZUhhc2hbZl09Y31hPWMubGV2ZWw7aWYoYy5ub25WYWx1ZUNvdW50KXthKys7Zj17cGFyZW50OmMsY29tbW9uV29yZHM6W10sbGV2ZWw6YSxvcmRlcjowLHRvdGFsQ291bnQ6Yy5ub25WYWx1ZUNvdW50LAp2YWx1ZUhhc2g6e30sdmFsdWVDb3VudDowLG5vblZhbHVlQ291bnQ6Yy5ub25WYWx1ZUNvdW50LGNoaWxkcmVuOltdfTtjLm5vblZhbHVlQ291bnQ9MDtjLmNoaWxkcmVuLnB1c2goZik7ZC5oaWdoZXN0TGV2ZWw9YTtkLmxldmVsSGFzaFthXT1mO2Zvcih2YXIgZyBpbiBkLm5vZGVIYXNoKWcgaW4gYy52YWx1ZUhhc2h8fChkLm5vZGVIYXNoW2ddPWYpfWM9W2NdO2ZvcihnPXE9PnEudmFsdWVDb3VudCtxLm5vblZhbHVlQ291bnQ7MTAwPmEmJmMubGVuZ3RoOyl7Zj0wO3ZhciBsPWcoY1tmXSk7Zm9yKHZhciBrPTE7azxjLmxlbmd0aDtrKyspe2NvbnN0IHE9ZyhjW2tdKTtxPmwmJihmPWssbD1xKX1sPWNbZl07aWYoaz1kbihsKSl7YSsrO2Y9e3BhcmVudDpsLGNvbW1vbldvcmRzOltrXSxsZXZlbDphLG9yZGVyOjAsdG90YWxDb3VudDowLHZhbHVlSGFzaDp7fSx2YWx1ZUNvdW50OjAsbm9uVmFsdWVDb3VudDowLGNoaWxkcmVuOltdfTtsLmNoaWxkcmVuLnB1c2goZik7Yy5wdXNoKGYpOwpmb3IoY29uc3QgcSBpbiBsLnZhbHVlSGFzaCl7aWYoIWwudmFsdWVIYXNoLmhhc093blByb3BlcnR5KHEpKWNvbnRpbnVlO2NvbnN0IHt2YWx1ZTpyLGNvdW50OnQsd29yZHM6dn09bC52YWx1ZUhhc2hbcV07diYmayBpbiB2JiYoZi52YWx1ZUhhc2hbcV09e3ZhbHVlOnIsY291bnQ6dCx3b3Jkczp2fSxmLnZhbHVlQ291bnQrPXQsZi50b3RhbENvdW50Kz10LGRlbGV0ZSBsLnZhbHVlSGFzaFtxXSxsLnZhbHVlQ291bnQtPXQsZC5ub2RlSGFzaFtxXT1mLGQuaGlnaGVzdExldmVsPWEsZC5sZXZlbEhhc2hbYV09Zil9fWVsc2UgYy5zcGxpY2UoZiwxKX1sZXQgbT0wO2NvbnN0IHA9cT0+e3Eub3JkZXI9KyttO2ZvcihsZXQgcj0wO3I8cS5jaGlsZHJlbi5sZW5ndGg7cisrKXAocS5jaGlsZHJlbltyXSl9O3AoZC5yb290KTtyZXR1cm4gZH07Cjwvc2NyaXB0PgoKPHNjcmlwdD4vL35+V0VCUEFUSH5+L2ZhY2V0cy1kaXZlL2xpYi9zdGF0cy5qcwpmdW5jdGlvbiBmbihhKXtpZighYXx8IWEubGVuZ3RoKXJldHVybltdO2NvbnN0IGM9e307Zm9yKGxldCBkPTA7ZDxhLmxlbmd0aDtkKyspaWYoYVtkXSl7Y29uc3QgZj1PYmplY3Qua2V5cyhhW2RdKTtmb3IobGV0IGc9MDtnPGYubGVuZ3RoO2crKyljW2ZbZ11dPSEwfXJldHVybiBPYmplY3Qua2V5cyhjKX1jb25zdCBnbj1hPT4ibnVtYmVyIj09PXR5cGVvZiBhJiZhPj4wPT09YTsKY2xhc3MgaG57Y29uc3RydWN0b3IoKXt0aGlzLnVuaXF1ZUNvdW50PXRoaXMudG90YWxDb3VudD0wO3RoaXMudmFsdWVIYXNoPXt9O3RoaXMub3RoZXJDb3VudD10aGlzLnN0cmluZ0NvdW50PXRoaXMuaW50ZWdlckNvdW50PXRoaXMubnVtYmVyQ291bnQ9MDt0aGlzLnN0cmluZ0xlbmd0aHNDb3VudD10aGlzLnN0cmluZ01lYW5MZW5ndGg9dGhpcy5zdHJpbmdNYXhMZW5ndGg9dGhpcy5zdHJpbmdNaW5MZW5ndGg9dGhpcy5udW1iZXJNYXg9dGhpcy5udW1iZXJNaW49bnVsbDt0aGlzLnN0cmluZ0xlbmd0aHNIYXNoPXt9O3RoaXMudG90YWxXb3JkQ291bnQ9dGhpcy5tdWx0aXdvcmRDb3VudD0wO3RoaXMud29yZENvdW50cz17fTt0aGlzLnVuaXF1ZVdvcmRDb3VudD0wO3RoaXMud29yZFRyZWU9bnVsbH1pc051bWVyaWMoKXtyZXR1cm4gMDx0aGlzLm51bWJlckNvdW50JiZudWxsIT09dGhpcy5udW1iZXJNaW4mJm51bGwhPT10aGlzLm51bWJlck1heCYmdGhpcy5udW1iZXJNYXg+dGhpcy5udW1iZXJNaW59aXNJbnRlZ2VyKCl7cmV0dXJuIDA8CnRoaXMubnVtYmVyQ291bnQmJnRoaXMuaW50ZWdlckNvdW50PT09dGhpcy5udW1iZXJDb3VudH1hZGRWYWx1ZShhKXt0aGlzLnRvdGFsQ291bnQrKztjb25zdCBjPWJuKGEpO2MgaW4gdGhpcy52YWx1ZUhhc2h8fCh0aGlzLnZhbHVlSGFzaFtjXT17dmFsdWU6YSxjb3VudDowfSx0aGlzLnVuaXF1ZUNvdW50KyspO3RoaXMudmFsdWVIYXNoW2NdLmNvdW50Kys7c3dpdGNoKHR5cGVvZiBhKXtjYXNlICJudW1iZXIiOnRoaXMuaW5jb3Jwb3JhdGVOdW1iZXJWYWx1ZShhKTticmVhaztjYXNlICJzdHJpbmciOnRoaXMuaW5jb3Jwb3JhdGVTdHJpbmdWYWx1ZShjLGEpO2JyZWFrO2RlZmF1bHQ6dGhpcy5vdGhlckNvdW50Kyt9fWluY29ycG9yYXRlTnVtYmVyVmFsdWUoYSl7dGhpcy5udW1iZXJDb3VudCsrO2duKGEpJiZ0aGlzLmludGVnZXJDb3VudCsrO2lzTmFOKGEpfHwodGhpcy5udW1iZXJNaW49bnVsbD09PXRoaXMubnVtYmVyTWluP2E6TWF0aC5taW4odGhpcy5udW1iZXJNaW4sYSksdGhpcy5udW1iZXJNYXg9Cm51bGw9PT10aGlzLm51bWJlck1heD9hOk1hdGgubWF4KHRoaXMubnVtYmVyTWF4LGEpKX1pbmNvcnBvcmF0ZVN0cmluZ1ZhbHVlKGEsYyl7dGhpcy5zdHJpbmdDb3VudCsrO3ZhciBkPWMubGVuZ3RoO2QgaW4gdGhpcy5zdHJpbmdMZW5ndGhzSGFzaHx8KHRoaXMuc3RyaW5nTGVuZ3Roc0NvdW50PSh0aGlzLnN0cmluZ0xlbmd0aHNDb3VudHx8MCkrMSk7dGhpcy5zdHJpbmdMZW5ndGhzSGFzaFtkXT0odGhpcy5zdHJpbmdMZW5ndGhzSGFzaFtkXXx8MCkrMTt0aGlzLnN0cmluZ01pbkxlbmd0aD1udWxsPT09dGhpcy5zdHJpbmdNaW5MZW5ndGg/ZDpNYXRoLm1pbih0aGlzLnN0cmluZ01pbkxlbmd0aCxkKTt0aGlzLnN0cmluZ01heExlbmd0aD1udWxsPT09dGhpcy5zdHJpbmdNYXhMZW5ndGg/ZDpNYXRoLm1heCh0aGlzLnN0cmluZ01heExlbmd0aCxkKTt0aGlzLnN0cmluZ01lYW5MZW5ndGg9KHRoaXMuc3RyaW5nTWVhbkxlbmd0aHx8MCkqKHRoaXMuc3RyaW5nQ291bnQtMSkvdGhpcy5zdHJpbmdDb3VudCsKZC90aGlzLnN0cmluZ0NvdW50O2lmKCF0aGlzLnZhbHVlSGFzaFthXS53b3Jkcyl7Yz1jbihjLnRvTG93ZXJDYXNlKCkpOzE8Yy5sZW5ndGgmJih0aGlzLm11bHRpd29yZENvdW50KyssdGhpcy50b3RhbFdvcmRDb3VudCs9Yy5sZW5ndGgpO2Q9dGhpcy52YWx1ZUhhc2hbYV0ud29yZHM9e307Zm9yKGxldCBmPTA7ZjxjLmxlbmd0aDtmKyspe2NvbnN0IGc9Y1tmXTtkW2ddPShkW2ddfHwwKSsxO2cgaW4gdGhpcy53b3JkQ291bnRzfHwodGhpcy53b3JkQ291bnRzW2ddPTAsdGhpcy51bmlxdWVXb3JkQ291bnQrKyl9fWE9dGhpcy52YWx1ZUhhc2hbYV0ud29yZHM7Zm9yKGNvbnN0IGYgaW4gYSl0aGlzLndvcmRDb3VudHNbZl09KHRoaXMud29yZENvdW50c1tmXXx8MCkrMX19CmZ1bmN0aW9uIGpuKGEpe2lmKCFhfHwhYS5sZW5ndGgpcmV0dXJue307Y29uc3QgYz17fTtmb3IobGV0IGQ9MDtkPGEubGVuZ3RoO2QrKyl7Y29uc3QgZj1hW2RdO2lmKG51bGw9PWYpY29udGludWU7Y29uc3QgZz1PYmplY3Qua2V5cyhmKTtmb3IobGV0IGw9MDtsPGcubGVuZ3RoO2wrKyl7Y29uc3Qgaz1nW2xdLG09ZltrXTtrIGluIGN8fChjW2tdPW5ldyBobik7Y1trXS5hZGRWYWx1ZShtKX19Zm9yKGNvbnN0IGQgaW4gYylhPWNbZF0sYS5tdWx0aXdvcmRDb3VudCYmKGEud29yZFRyZWU9ZW4oYS52YWx1ZUhhc2gpKTtyZXR1cm4gY307Cjwvc2NyaXB0PgoKPHNjcmlwdD4vL35+V0VCUEFUSH5+L2ZhY2V0cy1kaXZlL2xpYi9zdHJpbmctZm9ybWF0LmpzCmZ1bmN0aW9uIGtuKGEpe3JldHVybiBhLnJlcGxhY2UoLyhbXFdfXSkvZywiJDFcdTIwMGIiKX1mdW5jdGlvbiBsbihhKXtyZXR1cm4gNjU+YS5sZW5ndGg/YTphLnN1YnN0cigwLDMwKSsiLi4uIithLnN1YnN0cigtMzApfTsKPC9zY3JpcHQ+CgoKCgo8ZG9tLW1vZHVsZSBpZD0iZmFjZXRzLWRpdmUtdmlzIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQogICAgICAubGFiZWxzIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1iYXNlOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtaGVhZGxpbmU7CiAgICAgIH0KICAgICAgLnJvdGF0ZSB7CiAgICAgICAgc3Ryb2tlLWRhc2hhcnJheTogMS41LCAwLjU7CiAgICAgICAgYW5pbWF0aW9uOiByb3RhdGUgMXMgbGluZWFyIGluZmluaXRlOwogICAgICB9CiAgICAgIEBrZXlmcmFtZXMgcm90YXRlIHsKICAgICAgICBmcm9tIHsKICAgICAgICAgIHN0cm9rZS1kYXNob2Zmc2V0OiAwOwogICAgICAgIH0KICAgICAgICB0byB7CiAgICAgICAgICBzdHJva2UtZGFzaG9mZnNldDogMjsKICAgICAgICB9CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8ZGl2IGlkPSJob2xkZXIiPgogICAgICAKICAgIDwvZGl2PgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT4KCjxzY3JpcHQ+Ly9+fldFQlBBVEh+fi9mYWNldHMtZGl2ZS9jb21wb25lbnRzL2ZhY2V0cy1kaXZlLXZpcy9mYWNldHMtZGl2ZS12aXMuanMKLyoKCiBDb3B5cmlnaHQgMjAxOCBHb29nbGUgSW5jLgoKIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CgogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAoKIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgoqLwpjb25zdCBtbj17Ym90dG9tOjYsbGVmdDo2LHJpZ2h0OjYsdG9wOjZ9LG5uPXsiXHVmZmZjT1RIRVJcdWZmZmMiOiJvdGhlciIsIlx1ZmZmY05PX1dPUkRTXHVmZmZjIjoibm9uLXdvcmRzIiwiXHVmZmZjQUxMX1dPUkRTXHVmZmZjIjoib3RoZXIifSxvbj1hPT5udWxsIT09YSYmYSBpbiBubj97bGFiZWw6bm5bYV0sc3BlY2lhbDohMH06Im51bWJlciIhPT10eXBlb2YgYSYmInN0cmluZyIhPT10eXBlb2YgYT97bGFiZWw6IiIrYSxzcGVjaWFsOiEwfTp7bGFiZWw6bG4oIiIrYSksc3BlY2lhbDohMX0scG49IiM0Mjg1RjQgI0RCNDQzNyAjRjRCNDAwICMwRjlENTggI0FCNDdCQyAjMDBBQ0MxICNGRjcwNDMgIzlFOUQyNCAjNUM2QkMwICNGMDYyOTIgIzAwNzk2QiAjQzIxODVCIi5zcGxpdCgiICIpLHFuPSIjNDI4NUY0ICMwRjlENTggIzAwQUNDMSAjOUU5RDI0ICM1QzZCQzAgIzAwNzk2QiAjNjA3RDhCIi5zcGxpdCgiICIpLHJuPSIjREI0NDM3ICNGNEI0MDAgI0FCNDdCQyAjRjA2MjkyICNBQjQ3QkMgIzc5NTU0OCAjRkY3MDQzICNDMjE4NUIiLnNwbGl0KCIgIiksCnNuPSIjNDI4NUY0ICNDNTM5MjkgI0Y3Q0I0RCAjMEI4MDQzICM1RTM1QjEgIzgwREVFQSAjRkY3MDQzICNDMENBMzMiLnNwbGl0KCIgIiksdG49eyJhbGlnbm1lbnQtYmFzZWxpbmUiOiJtaWRkbGUiLGZpbGw6IiM0NDQ0NDQiLCJmb250LXNpemUiOjE4LCJmb250LXN0eWxlIjoibm9ybWFsIiwidGV4dC1hbmNob3IiOiJtaWRkbGUiLHg6MCx5OjB9O2NsYXNzIHVuIGV4dGVuZHMgSG17fQpjbGFzcyB2bntjb25zdHJ1Y3RvcihhKXt0aGlzLmVsZW09YTt0aGlzLmVuZFRpbWVzdGFtcD0wO3RoaXMucmVuZGVyUXVldWVkPSExO3RoaXMubGFiZWxzPVtdO3RoaXMuYXV0b0NvbG9yQnk9ITE7dGhpcy5ob3Jpem9udGFsRmFjZXRJbmZvPXRoaXMudmVydGljYWxGYWNldEluZm89bnVsbH1yZWFkeSgpe3RoaXMubGF5b3V0PW5ldyBTbTt0aGlzLmhvbGRlcj10aGlzLmVsZW0uJC5ob2xkZXI7dGhpcy5lbGVtLnNjb3BlU3VidHJlZSh0aGlzLmhvbGRlciwhMCk7dGhpcy5jZWxsQmFja2dyb3VuZFNWRz1kMy5zZWxlY3QodGhpcy5ob2xkZXIpLmFwcGVuZCgic3ZnIikuc3R5bGUoImxlZnQiLDApLnN0eWxlKCJwb3NpdGlvbiIsImFic29sdXRlIikuc3R5bGUoInRvcCIsMCk7dGhpcy5jZWxsQmFja2dyb3VuZFNWR1Jvb3Q9dGhpcy5jZWxsQmFja2dyb3VuZFNWRy5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsInJvb3QiKTt0aGlzLmNlbGxCYWNrZ3JvdW5kTGF5ZXI9dGhpcy5jZWxsQmFja2dyb3VuZFNWR1Jvb3QuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLAoibGFiZWxzIik7dGhpcy5zY2VuZT1uZXcgVEhSRUUuU2NlbmU7dGhpcy5jYW1lcmE9bmV3IFRIUkVFLk9ydGhvZ3JhcGhpY0NhbWVyYSgwLDEwMCwwLDEwMCwuMSwxRTMpO3RyeXt0aGlzLnJlbmRlcmVyPW5ldyBUSFJFRS5XZWJHTFJlbmRlcmVyKHthbHBoYTohMH0pLHRoaXMucmVuZGVyZXIuc2V0UGl4ZWxSYXRpbygpLGQzLnNlbGVjdCh0aGlzLnJlbmRlcmVyLmRvbUVsZW1lbnQpLnN0eWxlKCJsZWZ0IiwwKS5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJub25lIikuc3R5bGUoInBvc2l0aW9uIiwiYWJzb2x1dGUiKS5zdHlsZSgidG9wIiwwKSx0aGlzLmhvbGRlci5hcHBlbmRDaGlsZCh0aGlzLnJlbmRlcmVyLmRvbUVsZW1lbnQpfWNhdGNoKGEpe310aGlzLnpvb209ZDMuem9vbSgpLnNjYWxlRXh0ZW50KFsxLDUwMF0pLm9uKCJ6b29tIix0aGlzLnpvb21lZC5iaW5kKHRoaXMpKTtkMy5zZWxlY3QodGhpcy5lbGVtKS5jYWxsKHRoaXMuem9vbSk7dGhpcy5sYWJlbHNBbmRBeGVzU1ZHPQpkMy5zZWxlY3QodGhpcy5ob2xkZXIpLmFwcGVuZCgic3ZnIikuc3R5bGUoImxlZnQiLDApLnN0eWxlKCJwb3NpdGlvbiIsImFic29sdXRlIikuc3R5bGUoInRvcCIsMCk7dGhpcy5sYWJlbHNBbmRBeGVzU1ZHUm9vdD10aGlzLmxhYmVsc0FuZEF4ZXNTVkcuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJyb290Iik7dGhpcy5sYWJlbHNMYXllcj10aGlzLmxhYmVsc0FuZEF4ZXNTVkdSb290LmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibGFiZWxzIik7dGhpcy5heGVzTGF5ZXI9dGhpcy5sYWJlbHNBbmRBeGVzU1ZHUm9vdC5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImF4ZXMiKTt0aGlzLmNvbXBhcmVkTGF5ZXI9dGhpcy5sYWJlbHNBbmRBeGVzU1ZHUm9vdC5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImNvbXBhcmVkYm94ZXMiKTt0aGlzLnNlbGVjdGVkTGF5ZXI9dGhpcy5sYWJlbHNBbmRBeGVzU1ZHUm9vdC5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsInNlbGVjdGVkYm94ZXMiKTsKdGhpcy5sYWJlbHNBbmRBeGVzU1ZHLm9uKCJjbGljayIsdGhpcy5jbGlja2VkLmJpbmQodGhpcykpO3RoaXMucmVuZGVyZXJ8fCh0aGlzLmxhYmVsc0FuZEF4ZXNTVkcuc3R5bGUoImRpc3BsYXkiLCJub25lIiksdGhpcy5jZWxsQmFja2dyb3VuZFNWRy5zdHlsZSgiZGlzcGxheSIsIm5vbmUiKSxkMy5zZWxlY3QodGhpcy5ob2xkZXIpLmFwcGVuZCgicCIpLmF0dHIoImNsYXNzIiwiZXJyb3IiKS5zdHlsZSgiY29sb3IiLCJkYXJrcmVkIikuaHRtbCgnXG4gICAgICAgICAgICBceDNjc3Ryb25nXHgzZUVSUk9SXHgzYy9zdHJvbmdceDNlOiBGYWNldHMgRGl2ZSByZXF1aXJlcyBXZWJHTCwgYW5kIGl0IGlzIG5vdFxuICAgICAgICAgICAgZW5hYmxlZCBpbiB5b3VyIGJyb3dzZXIuIFNlZVxuICAgICAgICAgICAgXHgzY2EgcmVsXHgzZCJub3JlZmVycmVyIiBocmVmXHgzZCJodHRwOi8vd2ViZ2xyZXBvcnQuY29tLyJceDNlXG4gICAgICAgICAgICBXZWJHTCBSZXBvcnRceDNjL2FceDNlIGZvciBkZXRhaWxzLlxuICAgICAgICAgICcpKX16b29tZWQoKXtjb25zdCB7eDphLAp5OmMsazpkfT1kMy5ldmVudC50cmFuc2Zvcm0sZj10aGlzLnNjYWxlL2Q7dGhpcy5jYW1lcmEudG9wKj1mO3RoaXMuY2FtZXJhLmxlZnQqPWY7dGhpcy5jYW1lcmEucmlnaHQqPWY7dGhpcy5jYW1lcmEuYm90dG9tKj1mO3RoaXMuY2FtZXJhLnBvc2l0aW9uLnNldCgtYS9kLGMvZCx0aGlzLmNhbWVyYS5wb3NpdGlvbi56KTt0aGlzLmNhbWVyYS51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCk7dGhpcy5zY2FsZT1kO3RoaXMudHJhbnNmb3JtU1ZHKCk7dGhpcy51cGRhdGVPYmplY3RWaXNpYmlsaXR5KCk7dGhpcy5xdWV1ZVJlbmRlclNjZW5lKCl9Y2xpY2tlZCgpe3ZhciBhPXRoaXMuZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxjPWQzLmV2ZW50O2E9dGhpcy5zcHJpdGVNZXNoLmZpbmRTcHJpdGVzKHRoaXMuY2FtZXJhLnBvc2l0aW9uLngrKGMuY2xpZW50WC1hLmxlZnQpL3RoaXMuc2NhbGUsdGhpcy5jYW1lcmEucG9zaXRpb24ueS0oYy5jbGllbnRZLWEudG9wKS90aGlzLnNjYWxlKTsKdmFyIGQ9e307aWYoYy5jdHJsS2V5KWZvcihjPTA7Yzx0aGlzLmVsZW0uc2VsZWN0ZWRJbmRpY2VzLmxlbmd0aDtjKyspZFt0aGlzLmVsZW0uc2VsZWN0ZWRJbmRpY2VzW2NdXT0hMDtmb3IoYz0wO2M8YS5sZW5ndGg7YysrKWRbYVtjXV09ITA7dGhpcy5lbGVtLnNldCgic2VsZWN0ZWRJbmRpY2VzIixBcnJheS5mcm9tKE9iamVjdC5rZXlzKGQpLm1hcChmPT4rZikpKTthPVtdO2ZvcihkPTA7ZDx0aGlzLmVsZW0uc2VsZWN0ZWRJbmRpY2VzLmxlbmd0aDtkKyspYS5wdXNoKHRoaXMuZWxlbS5kYXRhW3RoaXMuZWxlbS5zZWxlY3RlZEluZGljZXNbZF1dKTt0aGlzLmVsZW0uc2V0KCJzZWxlY3RlZERhdGEiLGEpfXNlbGVjdGVkSW5kaWNlc1VwZGF0ZWQoKXt0aGlzLnNwcml0ZU1lc2gmJnRoaXMudXBkYXRlU2VsZWN0ZWRCb3hlcygpfWNvbXBhcmVkSW5kaWNlc1VwZGF0ZWQoKXtpZih0aGlzLnNwcml0ZU1lc2gpe3ZhciBhPVtdO2ZvcihsZXQgYz0wO2M8dGhpcy5lbGVtLmNvbXBhcmVkSW5kaWNlcy5sZW5ndGg7YysrKWEucHVzaCh0aGlzLmVsZW0uZGF0YVt0aGlzLmVsZW0uY29tcGFyZWRJbmRpY2VzW2NdXSk7CnRoaXMuZWxlbS5zZXQoImNvbXBhcmVkRGF0YSIsYSk7dGhpcy51cGRhdGVDb21wYXJlZEJveGVzKCl9fXVwZGF0ZVNlbGVjdGVkQm94ZXMoKXt2YXIgYT10aGlzLmVsZW0uc2VsZWN0ZWRJbmRpY2VzLm1hcChkPT4oe3g6dGhpcy5zcHJpdGVNZXNoLmdldFgoZCkseTp0aGlzLnNwcml0ZU1lc2guZ2V0WShkKX0pKTthPXRoaXMuc2VsZWN0ZWRMYXllci5zZWxlY3RBbGwoIi5zZWxlY3RlZCIpLmRhdGEoYSk7dmFyIGM9YS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoInNlbGVjdGVkIiwhMCkuYXR0cigidHJhbnNmb3JtIixkPT5gdHJhbnNsYXRlKCR7LjUrKGQueHx8MCl9LCR7LjUrKGQueXx8MCl9KSBzY2FsZSgkezN9KWApLnN0eWxlKCJvcGFjaXR5IiwwKTtjLmFwcGVuZCgicmVjdCIpLmF0dHIoIngiLC0uNSkuYXR0cigieSIsLS41KS5hdHRyKCJ3aWR0aCIsMSkuYXR0cigiaGVpZ2h0IiwxKS5hdHRyKCJzdHJva2UiLCIjNDgzZDA2IikuYXR0cigic3Ryb2tlLWxpbmVjYXAiLAoicm91bmQiKS5hdHRyKCJzdHJva2UtbGluZWpvaW4iLCJyb3VuZCIpLmF0dHIoInN0cm9rZS1vcGFjaXR5IiwwKS5hdHRyKCJzdHJva2Utd2lkdGgiLC4zKS5hdHRyKCJmaWxsLW9wYWNpdHkiLDApO2MuYXBwZW5kKCJyZWN0IikuYXR0cigieCIsLS41KS5hdHRyKCJ5IiwtLjUpLmF0dHIoIndpZHRoIiwxKS5hdHRyKCJoZWlnaHQiLDEpLmF0dHIoInN0cm9rZSIsIiNmYWQ0MTEiKS5hdHRyKCJzdHJva2UtbGluZWNhcCIsInJvdW5kIikuYXR0cigic3Ryb2tlLWxpbmVqb2luIiwicm91bmQiKS5hdHRyKCJzdHJva2Utb3BhY2l0eSIsMCkuYXR0cigic3Ryb2tlLXdpZHRoIiwuMTUpLmF0dHIoImZpbGwtb3BhY2l0eSIsMCk7Yz1jLm1lcmdlKGEpO2MudHJhbnNpdGlvbigpLmF0dHIoInRyYW5zZm9ybSIsZD0+YHRyYW5zbGF0ZSgkey41KyhkLnh8fDApfSwkey41KyhkLnl8fDApfSkgc2NhbGUoJHsuOH0pYCkuc3R5bGUoIm9wYWNpdHkiLDEpO2Muc2VsZWN0QWxsKCJyZWN0IikuY2xhc3NlZCgicm90YXRlIiwKITApLmF0dHIoInN0cm9rZS1vcGFjaXR5IiwxKTthLmV4aXQoKS50cmFuc2l0aW9uKCkuc3R5bGUoIm9wYWNpdHkiLDApLnJlbW92ZSgpfXVwZGF0ZUNvbXBhcmVkQm94ZXMoKXt2YXIgYT10aGlzLmVsZW0uY29tcGFyZWRJbmRpY2VzLm1hcChkPT4oe3g6dGhpcy5zcHJpdGVNZXNoLmdldFgoZCkseTp0aGlzLnNwcml0ZU1lc2guZ2V0WShkKX0pKTthPXRoaXMuY29tcGFyZWRMYXllci5zZWxlY3RBbGwoIi5jb21wYXJlZCIpLmRhdGEoYSk7dmFyIGM9YS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoImNvbXBhcmVkIiwhMCkuYXR0cigidHJhbnNmb3JtIixkPT5gdHJhbnNsYXRlKCR7LjUrKGQueHx8MCl9LCR7LjUrKGQueXx8MCl9KSBzY2FsZSgkezN9KWApLnN0eWxlKCJvcGFjaXR5IiwwKTtjLmFwcGVuZCgicmVjdCIpLmF0dHIoIngiLC0uNSkuYXR0cigieSIsLS41KS5hdHRyKCJ3aWR0aCIsMSkuYXR0cigiaGVpZ2h0IiwxKS5hdHRyKCJzdHJva2UiLCIjNDRmZjQ0IikuYXR0cigic3Ryb2tlLWxpbmVjYXAiLAoicm91bmQiKS5hdHRyKCJzdHJva2UtbGluZWpvaW4iLCJyb3VuZCIpLmF0dHIoInN0cm9rZS1vcGFjaXR5IiwwKS5hdHRyKCJzdHJva2Utd2lkdGgiLC4zKS5hdHRyKCJmaWxsLW9wYWNpdHkiLDApO2MuYXBwZW5kKCJyZWN0IikuYXR0cigieCIsLS41KS5hdHRyKCJ5IiwtLjUpLmF0dHIoIndpZHRoIiwxKS5hdHRyKCJoZWlnaHQiLDEpLmF0dHIoInN0cm9rZSIsIiMxZDZiMWQiKS5hdHRyKCJzdHJva2UtbGluZWNhcCIsInJvdW5kIikuYXR0cigic3Ryb2tlLWxpbmVqb2luIiwicm91bmQiKS5hdHRyKCJzdHJva2Utb3BhY2l0eSIsMCkuYXR0cigic3Ryb2tlLXdpZHRoIiwuMTUpLmF0dHIoImZpbGwtb3BhY2l0eSIsMCk7Yz1jLm1lcmdlKGEpO2MudHJhbnNpdGlvbigpLmF0dHIoInRyYW5zZm9ybSIsZD0+YHRyYW5zbGF0ZSgkey41KyhkLnh8fDApfSwkey41KyhkLnl8fDApfSkgc2NhbGUoJHsuOH0pYCkuc3R5bGUoIm9wYWNpdHkiLDEpO2Muc2VsZWN0QWxsKCJyZWN0IikuY2xhc3NlZCgicm90YXRlIiwKITApLmF0dHIoInN0cm9rZS1vcGFjaXR5IiwxKTthLmV4aXQoKS50cmFuc2l0aW9uKCkuc3R5bGUoIm9wYWNpdHkiLDApLnJlbW92ZSgpfWZpdFRvVmlld3BvcnQoKXtjb25zdCBhPXRoaXMuZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtpZihhLndpZHRoJiZhLmhlaWdodCl7dGhpcy5sYXlvdXQudmlld3BvcnQud2lkdGg9YS53aWR0aDt0aGlzLmxheW91dC52aWV3cG9ydC5oZWlnaHQ9YS5oZWlnaHQ7dGhpcy5sYXlvdXQucGFkZGluZy5ib3R0b209dGhpcy5lbGVtLnNjZW5lUGFkZGluZzt0aGlzLmxheW91dC5wYWRkaW5nLmxlZnQ9dGhpcy5lbGVtLnNjZW5lUGFkZGluZzt0aGlzLmxheW91dC5wYWRkaW5nLnJpZ2h0PXRoaXMuZWxlbS5zY2VuZVBhZGRpbmc7dGhpcy5sYXlvdXQucGFkZGluZy50b3A9dGhpcy5lbGVtLnNjZW5lUGFkZGluZzt0aGlzLmxheW91dC5ncmlkPXtib3R0b206MCxsZWZ0OjAscmlnaHQ6dGhpcy5ncmlkLndpZHRoLHRvcDp0aGlzLmdyaWQuaGVpZ2h0fTsKaWYodGhpcy5sYWJlbHMubGVuZ3RoKXt2YXIgYz0wLGQ9MCxmPTAsZz0wO3RoaXMubGFiZWxzTGF5ZXIuc2VsZWN0QWxsKCIubGFiZWwiKS5lYWNoKGZ1bmN0aW9uKG0pe3ZhciBwPWQzLnNlbGVjdCh0aGlzKS5zZWxlY3QoIi5jdXJyZW50Iikubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2NvbnN0IHE9bS5lbGVtZW50TWFyZ2lufHx7Ym90dG9tOjAsbGVmdDowLHJpZ2h0OjAsdG9wOjB9LHI9cC5oZWlnaHQrcS50b3ArcS5ib3R0b207cD1wLndpZHRoK3EubGVmdCtxLnJpZ2h0O3N3aXRjaChtLnNpZGUpe2Nhc2UgR20uQm90dG9tOmM9TWF0aC5tYXgoYyxyKTticmVhaztjYXNlIEdtLlRvcDpnPU1hdGgubWF4KGcscik7YnJlYWs7Y2FzZSBHbS5MZWZ0OmQ9TWF0aC5tYXgoZCxwKTticmVhaztjYXNlIEdtLlJpZ2h0OmY9TWF0aC5tYXgoZixwKTticmVhaztkZWZhdWx0OnRocm93IEVycm9yKCJVbnJlY29nbml6ZWQgU2lkZS4iKTt9fSk7dGhpcy5sYXlvdXQucGFkZGluZy5ib3R0b20rPQpjO3RoaXMubGF5b3V0LnBhZGRpbmcubGVmdCs9ZDt0aGlzLmxheW91dC5wYWRkaW5nLnJpZ2h0Kz1mO3RoaXMubGF5b3V0LnBhZGRpbmcudG9wKz1nfXRoaXMubGF5b3V0LnJlZHVjZVBhZGRpbmdUb0ZpdFdpZHRoKGEud2lkdGgpO3RoaXMubGF5b3V0LnJlZHVjZVBhZGRpbmdUb0ZpdEhlaWdodChhLmhlaWdodCk7dGhpcy5zY2FsZT10aGlzLmxheW91dC5jb21wdXRlU2NhbGUoKTt2YXIge3Bvc2l0aW9uOmwsZnJ1c3R1bTprfT10aGlzLmxheW91dC5jb21wdXRlQ2FtZXJhKCk7dGhpcy5jYW1lcmEubGVmdD1rLmxlZnQ7dGhpcy5jYW1lcmEucmlnaHQ9ay5yaWdodDt0aGlzLmNhbWVyYS50b3A9ay50b3A7dGhpcy5jYW1lcmEuYm90dG9tPWsuYm90dG9tO3RoaXMuY2FtZXJhLnBvc2l0aW9uLnNldChsLngsbC55LDEwMCk7dGhpcy5jYW1lcmEudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpO2QzLnNlbGVjdCh0aGlzLmVsZW0pLmNhbGwodGhpcy56b29tLnRyYW5zZm9ybSxkMy56b29tSWRlbnRpdHkuc2NhbGUodGhpcy5zY2FsZSkudHJhbnNsYXRlKC10aGlzLmNhbWVyYS5wb3NpdGlvbi54LAp0aGlzLmNhbWVyYS5wb3NpdGlvbi55KSk7dGhpcy50cmFuc2Zvcm1TVkcoKTt0aGlzLnVwZGF0ZU9iamVjdFZpc2liaWxpdHkoKTt0aGlzLnF1ZXVlUmVuZGVyU2NlbmUoKX1lbHNlIHNldFRpbWVvdXQoKCk9PnRoaXMuZml0VG9WaWV3cG9ydCgpLDEwMCl9em9vbUluKCl7dGhpcy56b29tLnNjYWxlQnkoZDMuc2VsZWN0KHRoaXMuZWxlbSksMS4xKX16b29tT3V0KCl7dGhpcy56b29tLnNjYWxlQnkoZDMuc2VsZWN0KHRoaXMuZWxlbSksMS8xLjEpfXRyYW5zZm9ybVNWRygpe2NvbnN0IGE9LXRoaXMuY2FtZXJhLnBvc2l0aW9uLngqdGhpcy5zY2FsZSxjPXRoaXMuY2FtZXJhLnBvc2l0aW9uLnkqdGhpcy5zY2FsZTt0aGlzLmNlbGxCYWNrZ3JvdW5kU1ZHUm9vdC5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHthfSwke2N9KSBzY2FsZSgke3RoaXMuc2NhbGV9LCR7LXRoaXMuc2NhbGV9KWApO3RoaXMubGFiZWxzQW5kQXhlc1NWR1Jvb3QuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7YX0sJHtjfSkgc2NhbGUoJHt0aGlzLnNjYWxlfSwkey10aGlzLnNjYWxlfSlgKTsKdGhpcy5sYWJlbHNBbmRBeGVzU1ZHUm9vdC5zZWxlY3RBbGwoIi51bnNjYWxlIikuYXR0cigidHJhbnNmb3JtIixgc2NhbGUoJHsxL3RoaXMuc2NhbGV9KWApO3RoaXMuYXhlc0xheWVyLnNlbGVjdEFsbCgiLmF4aXMiKS5zZWxlY3QoInBhdGgiKS5hdHRyKCJkIixkPT5kLnBhdGgodGhpcy5zY2FsZSkpLmF0dHIoInN0cm9rZS13aWR0aCIsZD0+ZC5zdHJva2VXaWR0aCh0aGlzLnNjYWxlKSl9aXNWaXNpYmxlKGEsYyl7cmV0dXJuIGEuc2hvdWxkQmVWaXNpYmxlKGMsdGhpcy5zY2FsZSx0aGlzLmNhbWVyYS5wb3NpdGlvbix0aGlzLmNhbWVyYSl9dXBkYXRlT2JqZWN0VmlzaWJpbGl0eSgpe2NvbnN0IGE9dGhpczt2YXIgYz10aGlzLmxhYmVsc0xheWVyLnNlbGVjdEFsbCgiLmxhYmVsIik7Y29uc3QgZD1jLmZpbHRlcihmdW5jdGlvbihnKXtyZXR1cm4odm9pZCAwPT09Zy52aXNpYmxlfHwhZy52aXNpYmxlKSYmYS5pc1Zpc2libGUoZyx0aGlzKX0pLmVhY2goZz0+Zy52aXNpYmxlPSEwKSwKZj1jLmZpbHRlcihmdW5jdGlvbihnKXtyZXR1cm4odm9pZCAwPT09Zy52aXNpYmxlfHxnLnZpc2libGUpJiYhYS5pc1Zpc2libGUoZyx0aGlzKX0pLmVhY2goZz0+Zy52aXNpYmxlPSExKTtkLnNlbGVjdEFsbCgiLm9wYWNpdHkiKS50cmFuc2l0aW9uKCkuZHVyYXRpb24odGhpcy5lbGVtLnR3ZWVuRHVyYXRpb24pLmF0dHIoIm9wYWNpdHkiLDEpO2Yuc2VsZWN0QWxsKCIub3BhY2l0eSIpLnRyYW5zaXRpb24oKS5kdXJhdGlvbih0aGlzLmVsZW0udHdlZW5EdXJhdGlvbikuYXR0cigib3BhY2l0eSIsMCk7Yy5maWx0ZXIoZz0+ISFnLnNjYWxlRG93bikuc2VsZWN0QWxsKCIuc2NhbGUiKS5hdHRyKCJ0cmFuc2Zvcm0iLGc9PmBzY2FsZSgke3RoaXMuc2NhbGU8Zy5taW5TY2FsZT90aGlzLnNjYWxlL2cubWluU2NhbGU6MX0pYCk7Yz10aGlzLmF4ZXNMYXllci5zZWxlY3RBbGwoIi5heGlzIikuZWFjaChmdW5jdGlvbihnKXtnLnZpc2libGU9YS5pc1Zpc2libGUoZyx0aGlzKX0pO2MuZmlsdGVyKGc9PgohIWcudmlzaWJsZSkuc2VsZWN0KCJwYXRoIikudHJhbnNpdGlvbigpLmR1cmF0aW9uKHRoaXMuZWxlbS50d2VlbkR1cmF0aW9uKS5hdHRyKCJzdHJva2Utb3BhY2l0eSIsMSk7Yy5maWx0ZXIoZz0+IWcudmlzaWJsZSkuc2VsZWN0KCJwYXRoIikudHJhbnNpdGlvbigpLmR1cmF0aW9uKHRoaXMuZWxlbS50d2VlbkR1cmF0aW9uKS5hdHRyKCJzdHJva2Utb3BhY2l0eSIsMCl9YWRkVmVydGljYWxGYWNldExhYmVscyhhKXt0aGlzLmVsZW0udmVydGljYWxGYWNldCBpbiB0aGlzLnN0YXRzJiZ0aGlzLmdyaWQuZ2V0Q29sdW1uKHRoaXMuZ3JpZC5ob3Jpem9udGFsS2V5c1t0aGlzLmdyaWQuaG9yaXpvbnRhbEtleXMubGVuZ3RoLTFdKS5mb3JFYWNoKGM9Pntjb25zdCBkPXRoaXMudmVydGljYWxGYWNldEluZm8ubGFiZWxpbmdGdW5jdGlvbihjLnZlcnRpY2FsS2V5KSxmPW5ldyB1bjtmLnRleHQ9ZC5sYWJlbDtmLng9Yy54K2Mud2lkdGg7Zi55PWMuY29udGVudFkrYy5pbm5lckhlaWdodC8KMjtmLnNpZGU9R20uUmlnaHQ7Zi5jZWxsPWM7Zi5hdHRyaWJ1dGVzPXsiYWxpZ25tZW50LWJhc2VsaW5lIjoibWlkZGxlIixmaWxsOiIjNjY2NjY2IiwiZm9udC1zaXplIjp0blsiZm9udC1zaXplIl0sInRleHQtYW5jaG9yIjoic3RhcnQiLCJmb250LXN0eWxlIjpkLnNwZWNpYWw/Iml0YWxpYyI6Im5vcm1hbCJ9O2Yub2Zmc2V0UG9zaXRpb249e3g6OH07Zi5taW5TY2FsZT10blsiZm9udC1zaXplIl0vKGMuaGVpZ2h0K3RoaXMuZ3JpZC5jZWxsTWFyZ2luKTtmLnNjYWxlRG93bj0hMDthLnB1c2goZil9KX1hZGRIb3Jpem9udGFsRmFjZXRMYWJlbHMoYSl7dGhpcy5lbGVtLmhvcml6b250YWxGYWNldCBpbiB0aGlzLnN0YXRzJiZ0aGlzLmdyaWQuZ2V0Um93KHRoaXMuZ3JpZC52ZXJ0aWNhbEtleXNbdGhpcy5ncmlkLnZlcnRpY2FsS2V5cy5sZW5ndGgtMV0pLmZvckVhY2goYz0+e2NvbnN0IGQ9dGhpcy5ob3Jpem9udGFsRmFjZXRJbmZvLmxhYmVsaW5nRnVuY3Rpb24oYy5ob3Jpem9udGFsS2V5KSwKZj1uZXcgdW47Zi50ZXh0PWQubGFiZWw7Zi54PWMuY29udGVudFgrYy5pbm5lcldpZHRoLzI7Zi55PWMueStjLmhlaWdodDtmLnNpZGU9R20uVG9wO2YuY2VsbD1jO2Yucm90YXRlPS00NTtmLmF0dHJpYnV0ZXM9eyJhbGlnbm1lbnQtYmFzZWxpbmUiOiJpZGVvZ3JhcGhpYyIsZmlsbDoiI2RkNjYyMiIsImZvbnQtc2l6ZSI6dG5bImZvbnQtc2l6ZSJdLCJ0ZXh0LWFuY2hvciI6InN0YXJ0IiwiZm9udC1zdHlsZSI6ZC5zcGVjaWFsPyJpdGFsaWMiOiJub3JtYWwifTtmLm9mZnNldFBvc2l0aW9uPXt4OjgseTotOH07Zi5taW5TY2FsZT10blsiZm9udC1zaXplIl0vKGMud2lkdGgrdGhpcy5ncmlkLmNlbGxNYXJnaW4vMik7Zi5zY2FsZURvd249ITA7YS5wdXNoKGYpfSl9YWRkVmVydGljYWxQb3NpdGlvbmluZ0xhYmVscyhhKXtpZigic2NhdHRlciI9PT10aGlzLmVsZW0ucG9zaXRpb25Nb2RlJiZ0aGlzLmVsZW0udmVydGljYWxQb3NpdGlvbiBpbiB0aGlzLnN0YXRzKXt2YXIgYz10aGlzLnN0YXRzW3RoaXMuZWxlbS52ZXJ0aWNhbFBvc2l0aW9uXSwKZD10aGlzLmZvcm1hdE51bWJlcihjLm51bWJlck1pbiksZj10aGlzLmZvcm1hdE51bWJlcihjLm51bWJlck1heCksZz0oZC5sZW5ndGgrMykvKGQubGVuZ3RoK2YubGVuZ3RoKzYpO3RoaXMuZ3JpZC5lYWNoQ2VsbChsPT57aWYobC5pdGVtcy5sZW5ndGgpe2Zvcih2YXIgaz1sLnNpYmxpbmdzLmxlZnQ7ISgha3x8ay5pdGVtcy5sZW5ndGh8fGsuc2libGluZ3MuYWJvdmUmJmsuc2libGluZ3MuYWJvdmUuaXRlbXMubGVuZ3RoKTspaz1rLnNpYmxpbmdzLmxlZnQ7az1rP2suY29udGVudFgray5pbm5lcldpZHRoOi1JbmZpbml0eTt2YXIgbT1sLngrOCxwPWwuY29udGVudFkscT1sLmNvbnRlbnRZK2wuaW5uZXJIZWlnaHQscj1uZXcgdW47ci5pZD1gJHtsLmNvbXBvdW5kS2V5fS1sZWZ0LXN0YXJ0YDtyLnRleHQ9ZDtyLng9bC54Kzg7ci55PWwueSsodGhpcy5lbGVtLmhvcml6b250YWxQb3NpdGlvbj84OjApO3Iuc2lkZT1HbS5MZWZ0O3IuY2VsbD1sO3Iucm90YXRlPS05MDtyLmF0dHJpYnV0ZXM9CnsiYWxpZ25tZW50LWJhc2VsaW5lIjoiaWRlb2dyYXBoaWMiLGZpbGw6IiMyMjU1YWEiLCJmb250LXNpemUiOjE2LCJ0ZXh0LWFuY2hvciI6InN0YXJ0In07ci5vZmZzZXRQb3NpdGlvbj17eDptbi5ib3R0b20seTotbW4ucmlnaHR9O3IuYm91bmRpbmdCb3g9e2JvdHRvbTpwLGxlZnQ6ayxyaWdodDptLHRvcDpwK2wuaW5uZXJIZWlnaHQqKE1hdGgubWF4KGcsLjEpLS4wNSl9O3IuZWxlbWVudE1hcmdpbj1tbjthLnB1c2gocik7cj1uZXcgdW47ci5pZD1gJHtsLmNvbXBvdW5kS2V5fS1sZWZ0LWVuZGA7ci50ZXh0PWY7ci54PWwueCs4O3IueT1sLnkrbC5oZWlnaHQ7ci5zaWRlPUdtLkxlZnQ7ci5jZWxsPWw7ci5yb3RhdGU9LTkwO3IuYXR0cmlidXRlcz17ImFsaWdubWVudC1iYXNlbGluZSI6ImlkZW9ncmFwaGljIixmaWxsOiIjMjI1NWFhIiwiZm9udC1zaXplIjoxNiwidGV4dC1hbmNob3IiOiJlbmQifTtyLm9mZnNldFBvc2l0aW9uPXt4Oi1tbi50b3AseTotbW4ucmlnaHR9O3IuYm91bmRpbmdCb3g9Cntib3R0b206cCtsLmlubmVySGVpZ2h0KihNYXRoLm1pbihnLC45KSsuMDUpLGxlZnQ6ayxyaWdodDptLHRvcDpxfTtyLmVsZW1lbnRNYXJnaW49bW47YS5wdXNoKHIpfX0pfX1hZGRIb3Jpem9udGFsUG9zaXRpb25pbmdMYWJlbHMoYSl7aWYoInNjYXR0ZXIiPT09dGhpcy5lbGVtLnBvc2l0aW9uTW9kZSYmdGhpcy5lbGVtLmhvcml6b250YWxQb3NpdGlvbiBpbiB0aGlzLnN0YXRzKXt2YXIgYz10aGlzLnN0YXRzW3RoaXMuZWxlbS5ob3Jpem9udGFsUG9zaXRpb25dLGQ9dGhpcy5mb3JtYXROdW1iZXIoYy5udW1iZXJNaW4pLGY9dGhpcy5mb3JtYXROdW1iZXIoYy5udW1iZXJNYXgpLGc9KGQubGVuZ3RoKzMpLyhkLmxlbmd0aCtmLmxlbmd0aCs2KTt0aGlzLmdyaWQuZWFjaENlbGwobD0+e2lmKGwuaXRlbXMubGVuZ3RoKXtmb3IodmFyIGs9bC5zaWJsaW5ncy5iZWxvdzshKCFrfHxrLml0ZW1zLmxlbmd0aHx8ay5zaWJsaW5ncy5yaWdodCYmay5zaWJsaW5ncy5yaWdodC5pdGVtcy5sZW5ndGgpOylrPQprLnNpYmxpbmdzLmJlbG93O2s9az9rLmNvbnRlbnRZK2suaW5uZXJIZWlnaHQ6LUluZmluaXR5O3ZhciBtPWwuY29udGVudFkscD1sLmNvbnRlbnRYLHE9cCtsLmlubmVyV2lkdGgscj1uZXcgdW47ci5pZD1gJHtsLmNvbXBvdW5kS2V5fS1ib3R0b20tc3RhcnRgO3IudGV4dD1kO3IueD1sLngrKHRoaXMuZWxlbS52ZXJ0aWNhbFBvc2l0aW9uPzg6MCk7ci55PWwueSs4O3Iuc2lkZT1HbS5Cb3R0b207ci5jZWxsPWw7ci5hdHRyaWJ1dGVzPXsiYWxpZ25tZW50LWJhc2VsaW5lIjoiaGFuZ2luZyIsZmlsbDoiIzExODg0NCIsImZvbnQtc2l6ZSI6MTYsInRleHQtYW5jaG9yIjoic3RhcnQifTtyLm9mZnNldFBvc2l0aW9uPXt4Om1uLmxlZnQseTptbi50b3B9O3IuYm91bmRpbmdCb3g9e2JvdHRvbTprLGxlZnQ6cCxyaWdodDpwK2wuaW5uZXJXaWR0aCooTWF0aC5tYXgoZywuMSktLjA1KSx0b3A6bX07ci5lbGVtZW50TWFyZ2luPW1uO2EucHVzaChyKTtyPW5ldyB1bjtyLmlkPWAke2wuY29tcG91bmRLZXl9LWJvdHRvbS1lbmRgOwpyLnRleHQ9ZjtyLng9bC54K2wud2lkdGg7ci55PWwueSs4O3Iuc2lkZT1HbS5Cb3R0b207ci5jZWxsPWw7ci5hdHRyaWJ1dGVzPXsiYWxpZ25tZW50LWJhc2VsaW5lIjoiaGFuZ2luZyIsZmlsbDoiIzExODg0NCIsImZvbnQtc2l6ZSI6MTYsInRleHQtYW5jaG9yIjoiZW5kIn07ci5vZmZzZXRQb3NpdGlvbj17eDotbW4ucmlnaHQseTptbi50b3B9O3IuYm91bmRpbmdCb3g9e2JvdHRvbTprLGxlZnQ6cCtsLmlubmVyV2lkdGgqKE1hdGgubWluKGcsLjkpKy4wNSkscmlnaHQ6cSx0b3A6bX07ci5lbGVtZW50TWFyZ2luPW1uO2EucHVzaChyKX19KX19ZGV0ZXJtaW5lTGFiZWxzKCl7Y29uc3QgYT1bXTt0aGlzLmFkZFZlcnRpY2FsRmFjZXRMYWJlbHMoYSk7dGhpcy5hZGRIb3Jpem9udGFsRmFjZXRMYWJlbHMoYSk7dGhpcy5hZGRWZXJ0aWNhbFBvc2l0aW9uaW5nTGFiZWxzKGEpO3RoaXMuYWRkSG9yaXpvbnRhbFBvc2l0aW9uaW5nTGFiZWxzKGEpO3JldHVybiBhfXVwZGF0ZUNlbGxCYWNrZ3JvdW5kcygpe3ZhciBhPQp0aGlzLmdyaWQuZ2V0Q2VsbHMoKS5maWx0ZXIoYz0+Yy5pdGVtcy5sZW5ndGgpO2E9dGhpcy5jZWxsQmFja2dyb3VuZExheWVyLnNlbGVjdEFsbCgiLmNlbGwiKS5kYXRhKGEsYz0+Yy5jb21wb3VuZEtleSk7YS5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIiwiY2VsbCIpLmF0dHIoIngiLGM9PmMuY29udGVudFh8fDApLmF0dHIoInkiLGM9PmMuY29udGVudFl8fDApLmF0dHIoIndpZHRoIixjPT5jLmlubmVyV2lkdGh8fDApLmF0dHIoImhlaWdodCIsYz0+Yy5pbm5lckhlaWdodHx8MCkuYXR0cigiZmlsbCIsIiNmOGY4ZjkiKS5hdHRyKCJmaWxsLW9wYWNpdHkiLDApLm1lcmdlKGEpLnRyYW5zaXRpb24oKS5kdXJhdGlvbih0aGlzLmVsZW0udHdlZW5EdXJhdGlvbikuYXR0cigieCIsYz0+Yy5jb250ZW50WHx8MCkuYXR0cigieSIsYz0+Yy5jb250ZW50WXx8MCkuYXR0cigid2lkdGgiLGM9PmMuaW5uZXJXaWR0aHx8MCkuYXR0cigiaGVpZ2h0IixjPT5jLmlubmVySGVpZ2h0fHwKMCkuYXR0cigiZmlsbC1vcGFjaXR5IiwxKTthLmV4aXQoKS50cmFuc2l0aW9uKCkuZHVyYXRpb24odGhpcy5lbGVtLnR3ZWVuRHVyYXRpb24pLnJlbW92ZSgpLmF0dHIoImZpbGwtb3BhY2l0eSIsMCl9dXBkYXRlQXhlcygpe2NvbnN0IGE9W107InN0YWNrZWQiIT09dGhpcy5lbGVtLnBvc2l0aW9uTW9kZSYmdGhpcy5ncmlkLmVhY2hDZWxsKGY9PntpZihmLml0ZW1zLmxlbmd0aCl7aWYodGhpcy5lbGVtLnZlcnRpY2FsUG9zaXRpb24pe2NvbnN0IGc9bmV3IFJtKEdtLkxlZnQsZik7YS5wdXNoKGcpfXRoaXMuZWxlbS5ob3Jpem9udGFsUG9zaXRpb24mJihmPW5ldyBSbShHbS5Cb3R0b20sZiksYS5wdXNoKGYpKX19KTtjb25zdCBjPXRoaXMuYXhlc0xheWVyLnNlbGVjdEFsbCgiLmF4aXMiKS5kYXRhKGEsZj0+Zi5rZXkoKSksZD1jLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJheGlzIikuYXR0cigib3BhY2l0eSIsMCk7ZC5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIixmPT4KZi5wYXRoKHRoaXMuc2NhbGUpKS5hdHRyKCJzdHJva2UiLGY9PmYuc2lkZT09PUdtLkxlZnQ/IiMyMjU1YWEiOiIjMTE4ODQ0IikuYXR0cigic3Ryb2tlLXdpZHRoIixmPT5mLnN0cm9rZVdpZHRoKHRoaXMuc2NhbGUpKS5hdHRyKCJzdHJva2Utb3BhY2l0eSIsMCkuYXR0cigiZmlsbCIsIm5vbmUiKTtkLm1lcmdlKGMpLnRyYW5zaXRpb24oKS5kdXJhdGlvbih0aGlzLmVsZW0udHdlZW5EdXJhdGlvbikuYXR0cigib3BhY2l0eSIsMSk7ZC5tZXJnZShjKS5zZWxlY3QoInBhdGgiKS50cmFuc2l0aW9uKCkuZHVyYXRpb24odGhpcy5lbGVtLnR3ZWVuRHVyYXRpb24pLmF0dHIoImQiLGY9PmYucGF0aCh0aGlzLnNjYWxlKSk7Yy5leGl0KCkudHJhbnNpdGlvbigpLmR1cmF0aW9uKHRoaXMuZWxlbS50d2VlbkR1cmF0aW9uKS5yZW1vdmUoKS5hdHRyKCJvcGFjaXR5IiwwKX11cGRhdGVMYWJlbHMoKXtpZih0aGlzLnNjYWxlKXt0aGlzLmxhYmVscz10aGlzLmRldGVybWluZUxhYmVscygpO3ZhciBhPQp0aGlzLmxhYmVsc0xheWVyLnNlbGVjdEFsbCgiLmxhYmVsIikuZGF0YSh0aGlzLmxhYmVscyxsPT5sLmlkfHxgJHtsLnNpZGV9LSR7bC50ZXh0fWApO2EuZWFjaChmdW5jdGlvbihsKXtjb25zdCBrPWQzLnNlbGVjdCh0aGlzKSxtPWsuc2VsZWN0KCIuY3VycmVudCIpO2wudGV4dCE9PW0udGV4dCgpJiYobS5hdHRyKCJmaWxsLW9wYWNpdHkiLDApLGsuc2VsZWN0KCIub2xkIikuYXR0cigiZmlsbC1vcGFjaXR5IiwxKS50ZXh0KG0udGV4dCgpKSl9KS5zZWxlY3QoIi5jdXJyZW50IikudGV4dChsPT5sLnRleHQpO3ZhciBjPWw9Pms9PnZvaWQgMD09PWsuYXR0cmlidXRlc3x8dm9pZCAwPT09ay5hdHRyaWJ1dGVzW2xdP3RuW2xdOmsuYXR0cmlidXRlc1tsXSxkPWEuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImxhYmVsIikuYXR0cigidHJhbnNmb3JtIixsPT5gdHJhbnNsYXRlKCR7bC54fSwke2wueX0pYCksZj1kLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiZmxpcCIpLmF0dHIoInRyYW5zZm9ybSIsCiJzY2FsZSgxLC0xKSIpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwicm90YXRlIikuYXR0cigidHJhbnNmb3JtIixsPT4icm90YXRlKCIrKCJyb3RhdGUiaW4gbD9sLnJvdGF0ZTowKSsiKSIpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwidW5zY2FsZSIpLmF0dHIoInRyYW5zZm9ybSIsYHNjYWxlKCR7MS90aGlzLnNjYWxlfSlgKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsInBvc2l0aW9uIikuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJvcGFjaXR5IHNjYWxlIiksZz1mLmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIiwib2xkIikuYXR0cigiZmlsbC1vcGFjaXR5IiwwKTtmPWYuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJjdXJyZW50IikuYXR0cigiZmlsbC1vcGFjaXR5IiwwKS50ZXh0KGw9PmwudGV4dCk7Zm9yKGNvbnN0IGwgaW4gdG4pdG4uaGFzT3duUHJvcGVydHkobCkmJihnLmF0dHIobCxjKGwpKSxmLmF0dHIobCxjKGwpKSk7Zz1kLm1lcmdlKGEpLnRyYW5zaXRpb24oKS5kdXJhdGlvbih0aGlzLmVsZW0udHdlZW5EdXJhdGlvbikuYXR0cigidHJhbnNmb3JtIiwKbD0+YHRyYW5zbGF0ZSgke2wueH0sJHtsLnl9KWApO2cuc2VsZWN0KCIucm90YXRlIikuYXR0cigidHJhbnNmb3JtIixsPT4icm90YXRlKCIrKCJyb3RhdGUiaW4gbD9sLnJvdGF0ZTowKSsiKSIpO2cuZmlsdGVyKGw9PiEhbC5vZmZzZXRQb3NpdGlvbikuc2VsZWN0KCIucG9zaXRpb24iKS5hdHRyKCJ0cmFuc2Zvcm0iLGw9PmB0cmFuc2xhdGUoJHtsLm9mZnNldFBvc2l0aW9uLnh8fDB9LCR7bC5vZmZzZXRQb3NpdGlvbi55fHwwfSlgKTtkPWcuc2VsZWN0KCIub2xkIikuYXR0cigiZmlsbC1vcGFjaXR5IiwwKTtnPWcuc2VsZWN0KCIuY3VycmVudCIpLmF0dHIoImZpbGwtb3BhY2l0eSIsMSk7Zm9yKGNvbnN0IGwgaW4gdG4pdG4uaGFzT3duUHJvcGVydHkobCkmJihkLmF0dHIobCxjKGwpKSxnLmF0dHIobCxjKGwpKSk7YS5leGl0KCkudHJhbnNpdGlvbigpLmR1cmF0aW9uKHRoaXMuZWxlbS50d2VlbkR1cmF0aW9uKS5yZW1vdmUoKS5zZWxlY3QoIi5jdXJyZW50IikuYXR0cigiZmlsbC1vcGFjaXR5IiwKMCl9fWRhdGFDaGFuZ2UoKXtjb25zdCBhPXRoaXMuZWxlbS5kYXRhO2lmKGEmJmEubGVuZ3RoKXt0aGlzLnJlc2l6ZUhhbmRsZXIoKTt0aGlzLnN0YXRzPWpuKGEpO2lmKHRoaXMuaXRlbXMpaWYodGhpcy5pdGVtcy5sZW5ndGghPT1hLmxlbmd0aCl0aGlzLmluaXRpYWxpemVTcHJpdGVNZXNoKCksdGhpcy51cGRhdGVJbWFnZUZpZWxkTmFtZSgpO2Vsc2UgZm9yKGxldCBjPTA7YzxhLmxlbmd0aDtjKyspdGhpcy5pdGVtc1tjXS5kYXRhPWFbY107ZWxzZSB0aGlzLmluaXRpYWxpemVTcHJpdGVNZXNoKCksdGhpcy5waWNrQ29sb3JCeUZpZWxkKCksdGhpcy5waWNrVGV4dERyYXdpbmdGaWVsZCgpO3RoaXMudXBkYXRlR3JpZEZhY2V0aW5nKCk7dGhpcy51cGRhdGVHcmlkSXRlbVBvc2l0aW9ucygpO3RoaXMudXBkYXRlQ29sb3JzKCl9fWluaXRpYWxpemVTcHJpdGVNZXNoKCl7dGhpcy5zcHJpdGVNZXNoJiYodGhpcy5zY2VuZS5yZW1vdmUodGhpcy5zcHJpdGVNZXNoKSx0aGlzLnNwcml0ZU1lc2guc3ByaXRlQXRsYXMuY2xlYXJRdWV1ZXMoKSwKZGVsZXRlIHRoaXMuc3ByaXRlTWVzaCk7Y29uc3QgYT10aGlzLmVsZW0uZGF0YSxjPWEubGVuZ3RoO3ZhciBkPXRoaXMuZWxlbS5zcHJpdGVJbWFnZVdpZHRoLGY9dGhpcy5lbGVtLnNwcml0ZUltYWdlSGVpZ2h0O2NvbnN0IGc9ZC9mO3RoaXMuc3ByaXRlTWVzaD1uZXcgJG0oYyxkLGYpO3RoaXMuc2NlbmUuYWRkKHRoaXMuc3ByaXRlTWVzaCk7dGhpcy5zcHJpdGVNZXNoLnNwcml0ZUF0bGFzLm9uRHJhd0ZpbmlzaGVkPSgpPT50aGlzLnF1ZXVlUmVuZGVyU2NlbmUoKTt0aGlzLml0ZW1zPVtdO2Q9TWF0aC5jZWlsKE1hdGguc3FydChjKSk7Zj1NYXRoLmNlaWwoYy9kKTtmb3IobGV0IGw9MDtsPGM7bCsrKXtjb25zdCBrPXRoaXMuc3ByaXRlTWVzaC5jcmVhdGVTcHJpdGUoKTtrLng9ZC8yO2sueT1mLzI7ay5vcGFjaXR5PTA7ay50aW1lc3RhbXA9RGF0ZS5ub3coKTtrLnJlYmFzZShrLnRpbWVzdGFtcCk7dGhpcy5pdGVtcy5wdXNoKHtzcHJpdGU6ayxkYXRhOmFbbF19KX10aGlzLmdyaWQ9Cm5ldyBRbSh0aGlzLml0ZW1zKTt0aGlzLmdyaWQuY2VsbE1hcmdpbj0xO3RoaXMuZ3JpZC5pdGVtQXNwZWN0UmF0aW89Zzt0aGlzLmdyaWQuaXRlbVBvc2l0aW9uU2V0dGVyPShsLGssbSk9Pntjb25zdCBwPURhdGUubm93KCk7bC5zcHJpdGUucmViYXNlKHApO2wuc3ByaXRlLng9aztsLnNwcml0ZS55PW07bC5zcHJpdGUub3BhY2l0eT0xO2wuc3ByaXRlLnRpbWVzdGFtcD1wK3RoaXMuZWxlbS50d2VlbkR1cmF0aW9uO3RoaXMucmVuZGVyVW50aWwobC5zcHJpdGUudGltZXN0YW1wKX19ZmlsdGVyZWREYXRhSW5kaWNlc0NoYW5nZSgpe2NvbnN0IGE9dGhpcy5lbGVtLmZpbHRlcmVkRGF0YUluZGljZXMsYz1bXTtpZihhKWZvcih2YXIgZD0wO2Q8YS5sZW5ndGg7ZCsrKXt2YXIgZj1hW2RdO2Y8dGhpcy5pdGVtcy5sZW5ndGgmJihjW2ZdPSEwKX1kPVtdO2Y9W107Y29uc3QgZz1EYXRlLm5vdygpLGw9Zyt0aGlzLmVsZW0udHdlZW5EdXJhdGlvbjtmb3IobGV0IGs9MDtrPHRoaXMuaXRlbXMubGVuZ3RoO2srKyl7Y29uc3QgbT0KdGhpcy5pdGVtc1trXTshYXx8Y1trXT8oZC5wdXNoKG0uZGF0YSksZi5wdXNoKG0pLG0uc3ByaXRlLm9wYWNpdHl8fChtLnNwcml0ZS5yZWJhc2UoZyksbS5zcHJpdGUudGltZXN0YW1wPWwsbS5zcHJpdGUub3BhY2l0eT0xKSk6MDxtLnNwcml0ZS5vcGFjaXR5JiYobS5zcHJpdGUucmViYXNlKGcpLG0uc3ByaXRlLnRpbWVzdGFtcD1sLG0uc3ByaXRlLm9wYWNpdHk9MCl9dGhpcy5yZW5kZXJVbnRpbChsKTt0aGlzLnN0YXRzPWpuKGQpO3RoaXMuZ3JpZC5pdGVtcz1mO3RoaXMudXBkYXRlR3JpZEZhY2V0aW5nKCk7dGhpcy51cGRhdGVHcmlkSXRlbVBvc2l0aW9ucygpfXBpY2tDb2xvckJ5RmllbGQoKXtsZXQgYT1udWxsLGM9SW5maW5pdHk7Zm9yKGNvbnN0IGQgaW4gdGhpcy5zdGF0cylpZih0aGlzLnN0YXRzLmhhc093blByb3BlcnR5KGQpKXtjb25zdCBmPXRoaXMuc3RhdHNbZF0sZz1NYXRoLmFicyhmLnVuaXF1ZUNvdW50LXBuLmxlbmd0aCk7MTxmLnVuaXF1ZUNvdW50JiZnPGMmJgooYT1kLGM9Zyl9aXNGaW5pdGUoYykmJmEgaW4gdGhpcy5zdGF0cyYmKHRoaXMuYXV0b0NvbG9yQnk9ITAsdGhpcy5lbGVtLnNldCgiY29sb3JCeSIsYSkpfXBpY2tUZXh0RHJhd2luZ0ZpZWxkKCl7bGV0IGE9IiIsYz0tSW5maW5pdHk7Zm9yKGNvbnN0IGYgaW4gdGhpcy5zdGF0cylpZih0aGlzLnN0YXRzLmhhc093blByb3BlcnR5KGYpKXt2YXIgZD10aGlzLnN0YXRzW2ZdO2Q9ZC5zdHJpbmdDb3VudCtkLnN0cmluZ0xlbmd0aHNDb3VudC1kLnRvdGFsQ291bnQ7ZD5jJiYoYT1mLGM9ZCl9aXNGaW5pdGUoYykmJmEgaW4gdGhpcy5zdGF0cyYmdGhpcy5lbGVtLnNldCgiaW1hZ2VGaWVsZE5hbWUiLGEpfXF1ZXVlQXRsYXNVcmxDaGFuZ2UoKXt0aGlzLmF0bGFzVXJsQ2hhbmdlVGltZXImJmNsZWFyVGltZW91dCh0aGlzLmF0bGFzVXJsQ2hhbmdlVGltZXIpO3RoaXMuYXRsYXNVcmxDaGFuZ2VUaW1lcj1zZXRUaW1lb3V0KCgpPT57dGhpcy5hdGxhc1VybENoYW5nZVRpbWVyJiZ0aGlzLmF0bGFzVXJsQ2hhbmdlKCl9LAoxMDApfWF0bGFzVXJsQ2hhbmdlKCl7Y2xlYXJUaW1lb3V0KHRoaXMuYXRsYXNVcmxDaGFuZ2VUaW1lcik7ZGVsZXRlIHRoaXMuYXRsYXNVcmxDaGFuZ2VUaW1lcjtpZih0aGlzLnNwcml0ZU1lc2gpe3ZhciBhPXRoaXMuZWxlbS5hdGxhc1VybDthJiZhLmxlbmd0aCYmYSE9PXRoaXMubGFzdEF0bGFzVXJsJiYodGhpcy5sYXN0QXRsYXNVcmw9YSx0aGlzLnJlc2V0U3ByaXRlc1RvRGVmYXVsdFRleHR1cmUoKSx0aGlzLnNwcml0ZU1lc2guc3ByaXRlQXRsYXMuc2V0QXRsYXNVcmwoYSx0aGlzLmVsZW0uY3Jvc3NPcmlnaW4sKCk9Pntjb25zdCBjPXRoaXMuZWxlbS5kYXRhLGQ9RGF0ZS5ub3coKSxmPWQrdGhpcy5lbGVtLmZhZGVEdXJhdGlvbjtmb3IobGV0IGc9MDtjJiZnPGMubGVuZ3RoO2crKyl0aGlzLnNwcml0ZU1lc2guc3dpdGNoVGV4dHVyZXMoZyxkLGYpO3RoaXMucmVuZGVyVW50aWwoZik7dGhpcy5pZ25vcmVDaGFuZ2U9ITA7dGhpcy5lbGVtLnNldCgiaW1hZ2VGaWVsZE5hbWUiLAoiIik7ZGVsZXRlIHRoaXMuaWdub3JlQ2hhbmdlO3RoaXMuYXV0b0NvbG9yQnkmJih0aGlzLmF1dG9Db2xvckJ5PSExLHRoaXMuZWxlbS5zZXQoImNvbG9yQnkiLCIiKSl9KSl9ZWxzZSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5hdGxhc1VybENoYW5nZS5iaW5kKHRoaXMpKX1zcHJpdGVVcmxDaGFuZ2UoKXtjb25zdCBhPXRoaXMuZWxlbS5zcHJpdGVVcmw7aWYoYSlpZih0aGlzLnNwcml0ZU1lc2gpe2NvbnN0IGM9bmV3IEltYWdlO3ZvaWQgMCE9PXRoaXMuZWxlbS5jcm9zc09yaWdpbiYmKGMuY3Jvc3NPcmlnaW49dGhpcy5lbGVtLmNyb3NzT3JpZ2luKTtjLm9ubG9hZD0oKT0+e2NvbnN0IGQ9dGhpcy5zcHJpdGVNZXNoLmRlZmF1bHRUZXh0dXJlQ2FudmFzLGY9ZC5nZXRDb250ZXh0KCIyZCIpO2YuY2xlYXJSZWN0KDAsMCxkLndpZHRoLGQuaGVpZ2h0KTtmLmRyYXdJbWFnZShjLDAsMCxkLndpZHRoLGQuaGVpZ2h0KTt0aGlzLnNwcml0ZU1lc2guZGVmYXVsdFRleHR1cmUubmVlZHNVcGRhdGU9CiEwO3RoaXMucXVldWVSZW5kZXJTY2VuZSgpfTtjLnNyYz1hfWVsc2UgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMuc3ByaXRlVXJsQ2hhbmdlLmJpbmQodGhpcykpfXVwZGF0ZUdyaWRTdGFja2luZygpeyJzdGFja2VkIj09PXRoaXMuZWxlbS5wb3NpdGlvbk1vZGUmJih0aGlzLmdyaWQuY29tcHV0ZUl0ZW1Qb3NpdGlvbj1ObSh0aGlzLmVsZW0udmVydGljYWxGYWNldD8ibWlkZGxlIjoiYm90dG9tIix0aGlzLmVsZW0uaG9yaXpvbnRhbEZhY2V0PyJtaWRkbGUiOiJyaWdodCIpKX11cGRhdGVHcmlkRmFjZXRpbmcoKXtpZih0aGlzLmdyaWQpe3RoaXMudXBkYXRlR3JpZFN0YWNraW5nKCk7dmFyIGE9dGhpcy52ZXJ0aWNhbEZhY2V0SW5mbz10aGlzLmdlbmVyYXRlRmFjZXRpbmdJbmZvKHRoaXMuZWxlbS52ZXJ0aWNhbEZhY2V0LHRoaXMuZWxlbS52ZXJ0aWNhbEJ1Y2tldHMsdGhpcy5lbGVtLnZlcnRpY2FsQmFnT2ZXb3JkcywhMCk7dGhpcy5ncmlkLnZlcnRpY2FsRmFjZXQ9YS5mYWNldGluZ0Z1bmN0aW9uOwp0aGlzLmdyaWQudmVydGljYWxLZXlDb21wYXJlPWEua2V5Q29tcGFyZUZ1bmN0aW9uO2E9dGhpcy5ob3Jpem9udGFsRmFjZXRJbmZvPXRoaXMuZ2VuZXJhdGVGYWNldGluZ0luZm8odGhpcy5lbGVtLmhvcml6b250YWxGYWNldCx0aGlzLmVsZW0uaG9yaXpvbnRhbEJ1Y2tldHMsdGhpcy5lbGVtLmhvcml6b250YWxCYWdPZldvcmRzLCExKTt0aGlzLmdyaWQuaG9yaXpvbnRhbEZhY2V0PWEuZmFjZXRpbmdGdW5jdGlvbjt0aGlzLmdyaWQuaG9yaXpvbnRhbEtleUNvbXBhcmU9YS5rZXlDb21wYXJlRnVuY3Rpb247dGhpcy5lbGVtLmZpdEdyaWRBc3BlY3RSYXRpb1RvVmlld3BvcnQ/KGE9dGhpcy5lbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHRoaXMuZ3JpZC50YXJnZXRHcmlkQXNwZWN0UmF0aW89YSYmYS53aWR0aCYmYS5oZWlnaHQ/YS53aWR0aC9hLmhlaWdodHx8MToxKTp0aGlzLmdyaWQudGFyZ2V0R3JpZEFzcGVjdFJhdGlvPTE7dGhpcy5ncmlkLmFycmFuZ2UoKTt0aGlzLnVwZGF0ZUNlbGxCYWNrZ3JvdW5kcygpOwp0aGlzLnVwZGF0ZUF4ZXMoKTt0aGlzLnVwZGF0ZUxhYmVscygpO3RoaXMudXBkYXRlU2VsZWN0ZWRCb3hlcygpO3RoaXMudXBkYXRlQ29tcGFyZWRCb3hlcygpO3RoaXMuZml0VG9WaWV3cG9ydCgpfX11cGRhdGVHcmlkSXRlbVBvc2l0aW9ucygpe2lmKHRoaXMuZ3JpZCl7dGhpcy51cGRhdGVHcmlkU3RhY2tpbmcoKTt2YXIgYT10aGlzLmdyaWQuY2VsbFBhZGRpbmcsYz1QbS5UaWdodCxkPVBtLlVuaWZvcm0sZj0hMTtpZigic3RhY2tlZCI9PT10aGlzLmVsZW0ucG9zaXRpb25Nb2RlKWY9dGhpcy5ncmlkLnZlcnRpY2FsR3JpZEFsaWdubWVudCE9PWN8fHRoaXMuZ3JpZC5ob3Jpem9udGFsR3JpZEFsaWdubWVudCE9PWMsdGhpcy5ncmlkLnZlcnRpY2FsR3JpZEFsaWdubWVudD1jLHRoaXMuZ3JpZC5ob3Jpem9udGFsR3JpZEFsaWdubWVudD1jLHRoaXMuZ3JpZC5jZWxsUGFkZGluZy50b3A9MCx0aGlzLmdyaWQuY2VsbFBhZGRpbmcubGVmdD0wLHRoaXMuZ3JpZC5jZWxsUGFkZGluZy5yaWdodD0KMCx0aGlzLmdyaWQuY2VsbFBhZGRpbmcuYm90dG9tPTAsdGhpcy5ncmlkLm1pbkNlbGxBc3BlY3RSYXRpbz0wLHRoaXMuZ3JpZC5tYXhDZWxsQXNwZWN0UmF0aW89SW5maW5pdHk7ZWxzZXt0aGlzLmVsZW0udmVydGljYWxQb3NpdGlvbj8oZj10aGlzLmdyaWQudmVydGljYWxHcmlkQWxpZ25tZW50IT09ZCx0aGlzLmdyaWQudmVydGljYWxHcmlkQWxpZ25tZW50PWQpOihmPXRoaXMuZ3JpZC52ZXJ0aWNhbEdyaWRBbGlnbm1lbnQhPT1jLHRoaXMuZ3JpZC52ZXJ0aWNhbEdyaWRBbGlnbm1lbnQ9Yyk7dGhpcy5lbGVtLmhvcml6b250YWxQb3NpdGlvbj8oZj1mfHx0aGlzLmdyaWQuaG9yaXpvbnRhbEdyaWRBbGlnbm1lbnQhPT1kLHRoaXMuZ3JpZC5ob3Jpem9udGFsR3JpZEFsaWdubWVudD1kKTooZj1mfHx0aGlzLmdyaWQuaG9yaXpvbnRhbEdyaWRBbGlnbm1lbnQhPT1jLHRoaXMuZ3JpZC5ob3Jpem9udGFsR3JpZEFsaWdubWVudD1jKTtjb25zdCBnPXRoaXMuZ2VuZXJhdGVQb3NpdGlvbkZ1bmN0aW9uKHRoaXMuZWxlbS5ob3Jpem9udGFsUG9zaXRpb24pfHwKTG0sbD10aGlzLmdlbmVyYXRlUG9zaXRpb25GdW5jdGlvbih0aGlzLmVsZW0udmVydGljYWxQb3NpdGlvbil8fE1tO3RoaXMuZ3JpZC5jb21wdXRlSXRlbVBvc2l0aW9uPShrLG0scCxxKT0+KHt4OmcoayxtLHAscSkseTpsKGssbSxwLHEpfSk7Yz10aGlzLmVsZW0udmVydGljYWxQb3NpdGlvbj84OjA7ZD10aGlzLmVsZW0uaG9yaXpvbnRhbFBvc2l0aW9uPzg6MDtmPWZ8fDAhPT1hLnRvcHx8YyE9PWEubGVmdHx8MCE9PWEucmlnaHR8fGQhPT1hLmJvdHRvbTt0aGlzLmdyaWQuY2VsbFBhZGRpbmcudG9wPTA7dGhpcy5ncmlkLmNlbGxQYWRkaW5nLnJpZ2h0PTA7dGhpcy5ncmlkLmNlbGxQYWRkaW5nLmxlZnQ9Yzt0aGlzLmdyaWQuY2VsbFBhZGRpbmcuYm90dG9tPWQ7dGhpcy5ncmlkLm1pbkNlbGxBc3BlY3RSYXRpbz0xO3RoaXMuZ3JpZC5tYXhDZWxsQXNwZWN0UmF0aW89Mn1mPyh0aGlzLmdyaWQuYXJyYW5nZSgpLHRoaXMudXBkYXRlQ2VsbEJhY2tncm91bmRzKCkpOnRoaXMuZ3JpZC5wb3NpdGlvbkl0ZW1zKCk7CnRoaXMudXBkYXRlQXhlcygpO3RoaXMudXBkYXRlTGFiZWxzKCk7dGhpcy51cGRhdGVTZWxlY3RlZEJveGVzKCk7dGhpcy51cGRhdGVDb21wYXJlZEJveGVzKCk7dGhpcy5maXRUb1ZpZXdwb3J0KCl9fWdldFBhbGV0dGVTb3VyY2UoKXtzd2l0Y2godGhpcy5lbGVtLnBhbGV0dGVDaG9pY2Upe2Nhc2UgIndhcm0iOnJldHVybiBybjtjYXNlICJjb29sIjpyZXR1cm4gcW47Y2FzZSAiYXNzaXN0IjpyZXR1cm4gc247ZGVmYXVsdDpyZXR1cm4gcG59fXVwZGF0ZVNjYWxhclBhbGV0dGUoKXtjb25zdCBhPXRoaXMuZWxlbS5jb2xvckJ5LGM9dGhpcy5zdGF0c1thXTt2YXIgZD10aGlzLmdyaWQuaXRlbXMsZj1kMy5yZ2IoIiNBNTI3MTQiKSxnPWQzLnNjYWxlTGluZWFyKCk7Zy5kb21haW4oW2MubnVtYmVyTWluLGMubnVtYmVyTWF4XSkucmFuZ2UoWyJ3aGl0ZSIsIiMxQzNBQTkiXSk7Y29uc3QgbD1bXTtmb3IodmFyIGs9MDtrPGQubGVuZ3RoO2srKyl7dmFyIG09ZFtrXTttPWEgaW4gbS5kYXRhPwptLmRhdGFbYV06TmFOO209Im51bWJlciIhPT10eXBlb2YgbXx8aXNOYU4obSk/ZjpkMy5yZ2IoZyhtKSk7bC5wdXNoKG0pfWQ9dGhpcy5nZW5lcmF0ZUZhY2V0aW5nSW5mbyhhLDUsITEsITEpLmxhYmVsaW5nRnVuY3Rpb247Zj1kMy5zY2FsZUxpbmVhcigpO2YuZG9tYWluKFswLDRdKS5yYW5nZShbIndoaXRlIiwiIzFDM0FBOSJdKTtnPVtdO2ZvcihrPTQ7MDw9aztrLS0pbT1kKGspLGcucHVzaCh7a2V5OmssY29sb3I6ZihrKSxjb250ZW50Om19KTsoYy5vdGhlckNvdW50fHxjLnN0cmluZ0NvdW50fHxjLnRvdGFsQ291bnQ8dGhpcy5ncmlkLml0ZW1zLmxlbmd0aCkmJmcucHVzaCh7a2V5Ok5hTixjb2xvcjoiI0E1MjcxNCIsY29udGVudDp7bGFiZWw6Im1pc3NpbmciLHNwZWNpYWw6ITB9fSk7dGhpcy5lbGVtLnNldCgicGFsZXR0ZSIsZyk7dGhpcy5ncmlkLmNlbGxJdGVtQ29tcGFyYXRvcj0ocCxxKT0+e2lmKCEoYSBpbiBwLmRhdGF8fGEgaW4gcS5kYXRhKSlyZXR1cm4gMDtpZighKGEgaW4KcC5kYXRhKSlyZXR1cm4tMTtpZighKGEgaW4gcS5kYXRhKSlyZXR1cm4gMTtwPXAuZGF0YVthXTtxPXEuZGF0YVthXTtpZihwPT09cSlyZXR1cm4gMDtjb25zdCByPSJudW1iZXIiIT09dHlwZW9mIHB8fGlzTmFOKHApLHQ9Im51bWJlciIhPT10eXBlb2YgcXx8aXNOYU4ocSk7cmV0dXJuIHImJnQ/MDpyPy0xOnQ/MTpwLXF9O3JldHVybiBsfXVwZGF0ZUNhdGVnb3JpY2FsUGFsZXR0ZShhKXtjb25zdCBjPXRoaXMuZWxlbS5jb2xvckJ5LGQ9dGhpcy5zdGF0c1tjXSxmPXRoaXMuZ3JpZC5pdGVtcyxnPU9iamVjdC5rZXlzKGQudmFsdWVIYXNoKTt0aGlzLmVsZW0uc3RhYmxlQ29sb3JzP2cuc29ydCgpOmcuc29ydCgodCx2KT0+ZC52YWx1ZUhhc2hbdl0uY291bnQtZC52YWx1ZUhhc2hbdF0uY291bnQpO2NvbnN0IGw9TWF0aC5taW4oYS5sZW5ndGgsZy5sZW5ndGgpLGs9Zy5zbGljZSgwLGwpLnJlZHVjZSgodCx2LEEpPT57dFt2XT1BO3JldHVybiB0fSx7fSksbT1kMy5yZ2IoIiNGMEYwRjAiKSwKcD1hLm1hcCh0PT5kMy5yZ2IodCkpO2xldCBxPSExO2NvbnN0IHI9W107Zm9yKGxldCB0PTA7dDxmLmxlbmd0aDt0Kyspe2NvbnN0IHY9Ym4oZlt0XS5kYXRhW2NdKTtxPXF8fCEodiBpbiBrKTtyLnB1c2gocFtrW3ZdXXx8bSl9YT1hLnNsaWNlKDAsbCkubWFwKCh0LHYpPT57dj1kLnZhbHVlSGFzaFtnW3ZdXS52YWx1ZTtyZXR1cm57a2V5OnYsY29sb3I6dCxjb250ZW50OntsYWJlbDp2KyIiLHNwZWNpYWw6Im51bWJlciIhPT10eXBlb2YgdiYmInN0cmluZyIhPT10eXBlb2Ygdnx8diBpbiBubn19fSk7cSYmYS5wdXNoKHtrZXk6bnVsbCxjb2xvcjoiI0YwRjBGMCIsY29udGVudDp7bGFiZWw6Im90aGVyIixzcGVjaWFsOiEwfX0pO3RoaXMuZWxlbS5zZXQoInBhbGV0dGUiLGEpO3RoaXMuZ3JpZC5jZWxsSXRlbUNvbXBhcmF0b3I9KHQsdik9PntpZighKGMgaW4gdC5kYXRhfHxjIGluIHYuZGF0YSkpcmV0dXJuIDA7aWYoIShjIGluIHQuZGF0YSkpcmV0dXJuIDE7aWYoIShjIGluIHYuZGF0YSkpcmV0dXJuLTE7CnQ9dC5kYXRhW2NdO3Y9di5kYXRhW2NdO2lmKHQ9PT12KXJldHVybiAwO3Q9Ym4odCk7dj1ibih2KTtyZXR1cm4gdCBpbiBrfHx2IGluIGs/dCBpbiBrP3YgaW4gaz9rW3RdLWtbdl06LTE6MTowfTtyZXR1cm4gcn11cGRhdGVDb2xvcnMoKXtpZih0aGlzLmdyaWQpe3ZhciBhPXRoaXMuZWxlbS5jb2xvckJ5O2lmKGEgaW4gdGhpcy5zdGF0cyl7YT10aGlzLnN0YXRzW2FdO3ZhciBjPXRoaXMuZ2V0UGFsZXR0ZVNvdXJjZSgpO2E9YS51bmlxdWVDb3VudD5jLmxlbmd0aCYmYS5pc051bWVyaWMoKT90aGlzLnVwZGF0ZVNjYWxhclBhbGV0dGUoKTp0aGlzLnVwZGF0ZUNhdGVnb3JpY2FsUGFsZXR0ZShjKTtjPXRoaXMuZ3JpZC5pdGVtczt2YXIgZD1EYXRlLm5vdygpLGY9ZCt0aGlzLmVsZW0udHdlZW5EdXJhdGlvbjtmb3IobGV0IGc9MDtnPGMubGVuZ3RoO2crKyl7Y29uc3QgbD1jW2ddLGs9YVtnXTtsLnNwcml0ZS5yZWJhc2UoZCk7bC5zcHJpdGUucj1rLnI7bC5zcHJpdGUuZz1rLmc7bC5zcHJpdGUuYj0Kay5iO2wuc3ByaXRlLmE9MTgwO2wuc3ByaXRlLnRpbWVzdGFtcD1mfXRoaXMucmVuZGVyVW50aWwoZik7dGhpcy51cGRhdGVHcmlkSXRlbVBvc2l0aW9uc0FmdGVyQ29sb3JDaGFuZ2UoKX1lbHNlIHRoaXMuY2xlYXJDb2xvcnMoKX19dXBkYXRlR3JpZEl0ZW1Qb3NpdGlvbnNBZnRlckNvbG9yQ2hhbmdlKCl7InN0YWNrZWQiIT09dGhpcy5lbGVtLnBvc2l0aW9uTW9kZSYmdGhpcy5lbGVtLnZlcnRpY2FsUG9zaXRpb24mJnRoaXMuZWxlbS5ob3Jpem9udGFsUG9zaXRpb258fHRoaXMudXBkYXRlR3JpZEl0ZW1Qb3NpdGlvbnMoKX1jbGVhckNvbG9ycygpe2NvbnN0IGE9dGhpcy5ncmlkLml0ZW1zLGM9RGF0ZS5ub3coKSxkPWMrdGhpcy5lbGVtLnR3ZWVuRHVyYXRpb247Zm9yKGxldCBmPTA7ZjxhLmxlbmd0aDtmKyspe2NvbnN0IGc9YVtmXTtnLnNwcml0ZS5yZWJhc2UoYyk7Zy5zcHJpdGUucj0wO2cuc3ByaXRlLmc9MDtnLnNwcml0ZS5iPTA7Zy5zcHJpdGUuYT0wO2cuc3ByaXRlLnRpbWVzdGFtcD0KZH10aGlzLnJlbmRlclVudGlsKGQpO3RoaXMuZWxlbS5zZXQoInBhbGV0dGUiLFtdKTt0aGlzLmdyaWQuY2VsbEl0ZW1Db21wYXJhdG9yJiYodGhpcy5ncmlkLmNlbGxJdGVtQ29tcGFyYXRvcj1udWxsLHRoaXMudXBkYXRlR3JpZEl0ZW1Qb3NpdGlvbnNBZnRlckNvbG9yQ2hhbmdlKCkpfXJlc2V0U3ByaXRlc1RvRGVmYXVsdFRleHR1cmUoKXtjb25zdCBhPXRoaXMuZ3JpZC5pdGVtczt0aGlzLnNwcml0ZU1lc2guc3ByaXRlQXRsYXMuY2xlYXJRdWV1ZXMoKTtjb25zdCBjPURhdGUubm93KCksZD1jK3RoaXMuZWxlbS5mYWRlRHVyYXRpb247Zm9yKGxldCBmPTA7ZjxhLmxlbmd0aDtmKyspe2NvbnN0IGc9YVtmXTswPGcuc3ByaXRlLnRleHR1cmVJbmRleCYmZy5zcHJpdGUuc3dpdGNoVGV4dHVyZXMoYyxkKX10aGlzLnJlbmRlclVudGlsKGQpfXVwZGF0ZUltYWdlRmllbGROYW1lKCl7aWYoIXRoaXMuaWdub3JlQ2hhbmdlJiZ0aGlzLmdyaWQpe3RoaXMucmVzZXRTcHJpdGVzVG9EZWZhdWx0VGV4dHVyZSgpOwp2YXIgYT10aGlzLmVsZW0uaW1hZ2VGaWVsZE5hbWU7aWYoYSBpbiB0aGlzLnN0YXRzKXt2YXIgYz10aGlzLmdyaWQuaXRlbXM7Zm9yKGxldCBkPTA7ZDxjLmxlbmd0aDtkKyspe2NvbnN0IHtzcHJpdGU6ZixkYXRhOmd9PWNbZF07Zi5zZXRTcHJpdGVJbWFnZURhdGEoe3R5cGU6InRleHQiLGRhdGE6b24oZ1thXSkubGFiZWx9LCgpPT57Y29uc3QgbD1EYXRlLm5vdygpO2YuYmFzZVRleHR1cmVUaW1lc3RhbXA9bDtmLmJhc2VUZXh0dXJlSW5kZXg9MDtmLnRleHR1cmVUaW1lc3RhbXA9bCt0aGlzLmVsZW0udHdlZW5EdXJhdGlvbjtmLnRleHR1cmVJbmRleD0xO3RoaXMucmVuZGVyVW50aWwoZi50ZXh0dXJlVGltZXN0YW1wKX0pfX1lbHNlIGRlbGV0ZSB0aGlzLmxhc3RBdGxhc1VybCx0aGlzLnF1ZXVlQXRsYXNVcmxDaGFuZ2UoKX19Z2VuZXJhdGVQb3NpdGlvbkZ1bmN0aW9uKGEpe2NvbnN0IGM9dGhpcy5zdGF0c1thXTtpZighY3x8IWMuaXNOdW1lcmljKCkpcmV0dXJuIG51bGw7Y29uc3QgZD0KYy5udW1iZXJNYXgtYy5udW1iZXJNaW47cmV0dXJuIGY9PihmLmRhdGFbYV0tYy5udW1iZXJNaW4pL2R9Z2VuZXJhdGVGYWNldGluZ0luZm8oYSxjLGQsZil7aWYoIShhIGluIHRoaXMuc3RhdHMpKXJldHVybntmYWNldGluZ0Z1bmN0aW9uOigpPT5udWxsLGtleUNvbXBhcmVGdW5jdGlvbjooKT0+MCxsYWJlbGluZ0Z1bmN0aW9uOm9ufTtjb25zdCBnPXRoaXMuc3RhdHNbYV07aWYoZy53b3JkVHJlZSYmMTxnLndvcmRUcmVlLmhpZ2hlc3RMZXZlbCYmZClyZXR1cm4gdGhpcy5nZW5lcmF0ZUJhZ09mV29yZHNGYWNldGluZ0luZm8oYSxjLGYpO2lmKGcudW5pcXVlQ291bnQ8PWMpcmV0dXJue2ZhY2V0aW5nRnVuY3Rpb246az0+YSBpbiBrLmRhdGE/ay5kYXRhW2FdOm51bGwsa2V5Q29tcGFyZUZ1bmN0aW9uOmcuaXNOdW1lcmljKCk/S206Zj9KbTpJbSxsYWJlbGluZ0Z1bmN0aW9uOm9ufTtpZihnLmlzTnVtZXJpYygpJiZnLm51bWJlck1heCE9PWcubnVtYmVyTWluKXJldHVybiB0aGlzLmdlbmVyYXRlTnVtZXJpY0ZhY2V0aW5nSW5mbyhhLApjKTtkPU9iamVjdC5rZXlzKGcudmFsdWVIYXNoKTtkLnNvcnQoKGssbSk9PmcudmFsdWVIYXNoW21dLmNvdW50LWcudmFsdWVIYXNoW2tdLmNvdW50KTtjb25zdCBsPWQuc2xpY2UoMCxjKS5yZWR1Y2UoKGssbSk9PntrW21dPSEwO3JldHVybiBrfSx7fSk7cmV0dXJue2ZhY2V0aW5nRnVuY3Rpb246az0+e2lmKCEoYSBpbiBrLmRhdGEpKXJldHVybiBudWxsO2s9ay5kYXRhW2FdO3JldHVybiBibihrKWluIGw/azoiXHVmZmZjT1RIRVJcdWZmZmMifSxrZXlDb21wYXJlRnVuY3Rpb246Zj9KbTpJbSxsYWJlbGluZ0Z1bmN0aW9uOm9ufX1nZW5lcmF0ZUJhZ09mV29yZHNGYWNldGluZ0luZm8oYSxjLGQpe2NvbnN0IGY9dGhpcy5zdGF0c1thXS53b3JkVHJlZSxnPWYubGV2ZWxIYXNoO3JldHVybntmYWNldGluZ0Z1bmN0aW9uOmw9PntpZighKGEgaW4gbC5kYXRhKSlyZXR1cm4gbnVsbDtmb3IobD1mLm5vZGVIYXNoW2JuKGwuZGF0YVthXSldO2wucGFyZW50JiZsLmxldmVsPmM7KWw9bC5wYXJlbnQ7CnJldHVybiBsLmxldmVsfSxrZXlDb21wYXJlRnVuY3Rpb246KGwsayk9PntsPWdbbF07az1nW2tdO2lmKHZvaWQgMD09PWwmJnZvaWQgMD09PWspcmV0dXJuIDA7aWYodm9pZCAwPT09bClyZXR1cm4tMTtpZih2b2lkIDA9PT1rKXJldHVybiAxO2lmKGwubm9uVmFsdWVDb3VudCYmay5ub25WYWx1ZUNvdW50KXJldHVybiAwO2lmKGwubm9uVmFsdWVDb3VudClyZXR1cm4tMTtpZihrLm5vblZhbHVlQ291bnQpcmV0dXJuIDE7az1rLm9yZGVyLWwub3JkZXI7cmV0dXJuIGQ/azota30sbGFiZWxpbmdGdW5jdGlvbjpsPT57bD1nWytsXTtpZighbC5wYXJlbnQmJiFsLmNvbW1vbldvcmRzLmxlbmd0aClyZXR1cm57bGFiZWw6Im90aGVyIixzcGVjaWFsOiEwfTtpZihsLm5vblZhbHVlQ291bnQpcmV0dXJue2xhYmVsOiJub24td29yZHMiLHNwZWNpYWw6ITB9O2xldCBrPWAgJHsiXHUyMDIyIn0gJHtsLmNvbW1vbldvcmRzLmpvaW4oIiAiKX1gO2ZvcihsZXQgbT0wO208bC5jaGlsZHJlbi5sZW5ndGg7bSsrKWlmKGwuY2hpbGRyZW5bbV0ubGV2ZWw+CmMpe2srPSIgXHUyMDI2IjticmVha31mb3IoO2wucGFyZW50OylsPWwucGFyZW50LGwuY29tbW9uV29yZHMubGVuZ3RoJiYoaz1gICR7Ilx1MjAyMiJ9ICR7bC5jb21tb25Xb3Jkcy5qb2luKCIgIil9IGArayk7cmV0dXJue2xhYmVsOmt9fX19Z2VuZXJhdGVOdW1lcmljRmFjZXRpbmdJbmZvKGEsYyl7Y29uc3QgZD10aGlzLnN0YXRzW2FdLGY9ZC5udW1iZXJNYXgtZC5udW1iZXJNaW47cmV0dXJue2ZhY2V0aW5nRnVuY3Rpb246Zz0+e2lmKCEoYSBpbiBnLmRhdGEpKXJldHVybiBudWxsO2c9Zy5kYXRhW2FdO3JldHVybiJudW1iZXIiIT09dHlwZW9mIGc/Zzppc05hTihnKT9nOk1hdGgubWluKE1hdGguZmxvb3IoYyooZy1kLm51bWJlck1pbikvZiksYy0xKX0sa2V5Q29tcGFyZUZ1bmN0aW9uOkttLGxhYmVsaW5nRnVuY3Rpb246Zz0+e2lmKCJudW1iZXIiIT09dHlwZW9mIGd8fGlzTmFOKCtnKSlyZXR1cm4gb24oZyk7Y29uc3QgbD1kLm51bWJlck1heC1kLm51bWJlck1pbixrPWcvYyoKbCtkLm51bWJlck1pbjtnPSgxK2cpL2MqbCtkLm51bWJlck1pbjtyZXR1cm4gZC5pc0ludGVnZXIoKT97bGFiZWw6dGhpcy5mb3JtYXRSYW5nZShNYXRoLmNlaWwoayksTWF0aC5mbG9vcihnKSl9OntsYWJlbDp0aGlzLmZvcm1hdFJhbmdlKGssZyl9fX19Zm9ybWF0TnVtYmVyKGEpe2lmKG51bGw9PT1hKXJldHVybiJudWxsIjthPXBhcnNlRmxvYXQoYS50b1ByZWNpc2lvbigzKSk7cmV0dXJuIDFFMzw9TWF0aC5hYnMoYSk/ZDMuZm9ybWF0KCJzIikoYSk6IiIrYX1mb3JtYXRSYW5nZShhLGMpe3JldHVybmAke3RoaXMuZm9ybWF0TnVtYmVyKGEpfSBcdTIwMTQgJHt0aGlzLmZvcm1hdE51bWJlcihjKX1gfWdldEtleXMoKXtyZXR1cm4gZm4odGhpcy5lbGVtLmRhdGEpLnNvcnQoKX1yZW5kZXJVbnRpbChhKXt0aGlzLmVuZFRpbWVzdGFtcD1NYXRoLm1heCh0aGlzLmVuZFRpbWVzdGFtcCxhKTt0aGlzLnF1ZXVlUmVuZGVyU2NlbmUoKX1yZXNpemVIYW5kbGVyKCl7Y29uc3QgYT10aGlzLmVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CmEud2lkdGgmJmEuaGVpZ2h0Pyh0aGlzLmxhYmVsc0FuZEF4ZXNTVkcuYXR0cigid2lkdGgiLGEud2lkdGgpLmF0dHIoImhlaWdodCIsYS5oZWlnaHQpLHRoaXMuY2VsbEJhY2tncm91bmRTVkcuYXR0cigid2lkdGgiLGEud2lkdGgpLmF0dHIoImhlaWdodCIsYS5oZWlnaHQpLHRoaXMucmVuZGVyZXImJnRoaXMucmVuZGVyZXIuc2V0U2l6ZShhLndpZHRoLGEuaGVpZ2h0KSx0aGlzLmNhbWVyYS5yaWdodD1hLndpZHRoL3RoaXMuc2NhbGUsdGhpcy5jYW1lcmEuYm90dG9tPS1hLmhlaWdodC90aGlzLnNjYWxlLHRoaXMuY2FtZXJhLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKSx0aGlzLnF1ZXVlUmVuZGVyU2NlbmUoKSk6cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT50aGlzLnJlc2l6ZUhhbmRsZXIoKSl9cXVldWVSZW5kZXJTY2VuZSgpe3RoaXMucmVuZGVyUXVldWVkfHwodGhpcy5yZW5kZXJRdWV1ZWQ9ITAscmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57dGhpcy5yZW5kZXJRdWV1ZWQmJgp0aGlzLnJlbmRlclNjZW5lKCl9KSl9cmVuZGVyU2NlbmUoKXt0aGlzLnJlbmRlclF1ZXVlZD0hMTtjb25zdCBhPURhdGUubm93KCk7dGhpcy5lbmRUaW1lc3RhbXA+YSYmdGhpcy5xdWV1ZVJlbmRlclNjZW5lKCk7aWYodGhpcy5zcHJpdGVNZXNoJiYodGhpcy5zcHJpdGVNZXNoLnRpbWU9YSw4MT4rVEhSRUUuUkVWSVNJT04mJnRoaXMuc3ByaXRlTWVzaC5vbkJlZm9yZVJlbmRlcikpdGhpcy5zcHJpdGVNZXNoLm9uQmVmb3JlUmVuZGVyKCk7dGhpcy5yZW5kZXJlciYmdGhpcy5yZW5kZXJlci5yZW5kZXIodGhpcy5zY2VuZSx0aGlzLmNhbWVyYSk7dGhpcy5zcHJpdGVNZXNoJiZ0aGlzLnNwcml0ZU1lc2guc3ByaXRlQXRsYXMmJnRoaXMuc3ByaXRlTWVzaC5zcHJpdGVBdGxhcy5wb3N0UmVuZGVyKCl9fQpQb2x5bWVyKHtpczoiZmFjZXRzLWRpdmUtdmlzIixiZWhhdmlvcnM6W1BvbHltZXIuSXJvblJlc2l6YWJsZUJlaGF2aW9yXSxwcm9wZXJ0aWVzOntkYXRhOnt0eXBlOkFycmF5LHZhbHVlOm51bGwsb2JzZXJ2ZXI6Il9kYXRhQ2hhbmdlIn0sZmlsdGVyZWREYXRhSW5kaWNlczp7dHlwZTpBcnJheSx2YWx1ZTpudWxsLG9ic2VydmVyOiJfZmlsdGVyZWREYXRhSW5kaWNlc0NoYW5nZSJ9LGF0bGFzVXJsOnt0eXBlOlN0cmluZyx2YWx1ZTpudWxsLG9ic2VydmVyOiJfcXVldWVBdGxhc1VybENoYW5nZSJ9LHNwcml0ZVVybDp7dHlwZTpTdHJpbmcsdmFsdWU6bnVsbCxvYnNlcnZlcjoiX3Nwcml0ZVVybENoYW5nZSJ9LGNyb3NzT3JpZ2luOnt0eXBlOlN0cmluZyx2YWx1ZTpudWxsfSxrZXlzOnt0eXBlOkFycmF5LHZhbHVlOltdLG5vdGlmeTohMCxyZWFkT25seTohMH0sc3RhdHM6e3R5cGU6T2JqZWN0LHZhbHVlOnt9LG5vdGlmeTohMCxyZWFkT25seTohMH0sc2NlbmVQYWRkaW5nOnt0eXBlOk51bWJlciwKdmFsdWU6OH0sdHdlZW5EdXJhdGlvbjp7dHlwZTpOdW1iZXIsdmFsdWU6NjAwfSxmYWRlRHVyYXRpb246e3R5cGU6TnVtYmVyLHZhbHVlOjIwMH0sc3ByaXRlSW1hZ2VXaWR0aDp7dHlwZTpOdW1iZXIsdmFsdWU6NjR9LHNwcml0ZUltYWdlSGVpZ2h0Ont0eXBlOk51bWJlcix2YWx1ZTo2NH0sZ3JpZEZhY2V0aW5nVmVydGljYWxMYWJlbENvbG9yOnt0eXBlOlN0cmluZyx2YWx1ZToiIzY2NjY2NiJ9LGdyaWRGYWNldGluZ0hvcml6b250YWxMYWJlbENvbG9yOnt0eXBlOlN0cmluZyx2YWx1ZToiI2RkNjYyMiJ9LGl0ZW1Qb3NpdGlvbmluZ1ZlcnRpY2FsTGFiZWxDb2xvcjp7dHlwZTpTdHJpbmcsdmFsdWU6IiMyMjU1YWEifSxpdGVtUG9zaXRpb25pbmdIb3Jpem9udGFsTGFiZWxDb2xvcjp7dHlwZTpTdHJpbmcsdmFsdWU6IiMxMTg4NDQifSxmaXRHcmlkQXNwZWN0UmF0aW9Ub1ZpZXdwb3J0Ont0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LHZlcnRpY2FsRmFjZXQ6e3R5cGU6U3RyaW5nLHZhbHVlOiIiLApvYnNlcnZlcjoiX3VwZGF0ZUdyaWRGYWNldGluZyJ9LHZlcnRpY2FsQnVja2V0czp7dHlwZTpOdW1iZXIsdmFsdWU6MTAsb2JzZXJ2ZXI6Il91cGRhdGVHcmlkRmFjZXRpbmcifSx2ZXJ0aWNhbEJhZ09mV29yZHM6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxvYnNlcnZlcjoiX3VwZGF0ZUdyaWRGYWNldGluZyJ9LGhvcml6b250YWxGYWNldDp7dHlwZTpTdHJpbmcsdmFsdWU6IiIsb2JzZXJ2ZXI6Il91cGRhdGVHcmlkRmFjZXRpbmcifSxob3Jpem9udGFsQnVja2V0czp7dHlwZTpOdW1iZXIsdmFsdWU6MTAsb2JzZXJ2ZXI6Il91cGRhdGVHcmlkRmFjZXRpbmcifSxob3Jpem9udGFsQmFnT2ZXb3Jkczp7dHlwZTpCb29sZWFuLHZhbHVlOiExLG9ic2VydmVyOiJfdXBkYXRlR3JpZEZhY2V0aW5nIn0scG9zaXRpb25Nb2RlOnt0eXBlOlN0cmluZyx2YWx1ZToiIixvYnNlcnZlcjoiX3VwZGF0ZUdyaWRJdGVtUG9zaXRpb25zIn0sdmVydGljYWxQb3NpdGlvbjp7dHlwZTpTdHJpbmcsdmFsdWU6IiIsCm9ic2VydmVyOiJfdXBkYXRlR3JpZEl0ZW1Qb3NpdGlvbnMifSxob3Jpem9udGFsUG9zaXRpb246e3R5cGU6U3RyaW5nLHZhbHVlOiIiLG9ic2VydmVyOiJfdXBkYXRlR3JpZEl0ZW1Qb3NpdGlvbnMifSxjb2xvckJ5Ont0eXBlOlN0cmluZyx2YWx1ZToiIixvYnNlcnZlcjoiX3VwZGF0ZUNvbG9ycyIsbm90aWZ5OiEwfSxpbWFnZUZpZWxkTmFtZTp7dHlwZTpTdHJpbmcsdmFsdWU6IiIsb2JzZXJ2ZXI6Il91cGRhdGVJbWFnZUZpZWxkTmFtZSIsbm90aWZ5OiEwfSxwYWxldHRlOnt0eXBlOkFycmF5LHZhbHVlOltdLG5vdGlmeTohMH0scGFsZXR0ZUNob2ljZTp7dHlwZTpTdHJpbmcsdmFsdWU6InN0YW5kYXJkIixvYnNlcnZlcjoiX3VwZGF0ZUNvbG9ycyJ9LHNlbGVjdGVkRGF0YTp7dHlwZTpBcnJheSx2YWx1ZTpbXSxub3RpZnk6ITB9LHNlbGVjdGVkSW5kaWNlczp7dHlwZTpBcnJheSx2YWx1ZTpbXSxub3RpZnk6ITAsb2JzZXJ2ZXI6Il9zZWxlY3RlZEluZGljZXNVcGRhdGVkIn0sY29tcGFyZWREYXRhOnt0eXBlOkFycmF5LAp2YWx1ZTpbXSxub3RpZnk6ITB9LGNvbXBhcmVkSW5kaWNlczp7dHlwZTpBcnJheSx2YWx1ZTpbXSxub3RpZnk6ITAsb2JzZXJ2ZXI6Il9jb21wYXJlZEluZGljZXNVcGRhdGVkIn0sc3RhYmxlQ29sb3JzOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEsb2JzZXJ2ZXI6Il91cGRhdGVDb2xvcnMifX0sbGlzdGVuZXJzOnsiaXJvbi1yZXNpemUiOiJfb25Jcm9uUmVzaXplIn0sY3JlYXRlZCgpe3RoaXMuX2JhY2tpbmc9bmV3IHZuKHRoaXMpfSxyZWFkeSgpe3RoaXMuX2JhY2tpbmcucmVhZHkoKX0sX2RhdGFDaGFuZ2UoYSl7dGhpcy5fYmFja2luZy5zY2VuZT8odGhpcy5fYmFja2luZy5kYXRhQ2hhbmdlKCksdGhpcy5fc2V0S2V5cyh0aGlzLl9iYWNraW5nLmdldEtleXMoKSksdGhpcy5fc2V0U3RhdHModGhpcy5fYmFja2luZy5zdGF0cykpOnJlcXVlc3RBbmltYXRpb25GcmFtZSh0aGlzLl9kYXRhQ2hhbmdlLmJpbmQodGhpcyxhKSl9LF9maWx0ZXJlZERhdGFJbmRpY2VzQ2hhbmdlKGEpe3RoaXMuX2JhY2tpbmcuc2NlbmUmJgp0aGlzLl9iYWNraW5nLml0ZW1zPyh0aGlzLl9iYWNraW5nLmZpbHRlcmVkRGF0YUluZGljZXNDaGFuZ2UoKSx0aGlzLl9zZXRLZXlzKHRoaXMuX2JhY2tpbmcuZ2V0S2V5cygpKSx0aGlzLl9zZXRTdGF0cyh0aGlzLl9iYWNraW5nLnN0YXRzKSk6cmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMuX2ZpbHRlcmVkRGF0YUluZGljZXNDaGFuZ2UuYmluZCh0aGlzLGEpKX0sX3F1ZXVlQXRsYXNVcmxDaGFuZ2UoKXt0aGlzLl9iYWNraW5nLnF1ZXVlQXRsYXNVcmxDaGFuZ2UoKX0sX3Nwcml0ZVVybENoYW5nZSgpe3RoaXMuX2JhY2tpbmcuc3ByaXRlVXJsQ2hhbmdlKCl9LF91cGRhdGVHcmlkRmFjZXRpbmcoKXt0aGlzLl9iYWNraW5nLnVwZGF0ZUdyaWRGYWNldGluZygpfSxfdXBkYXRlR3JpZEl0ZW1Qb3NpdGlvbnMoKXt0aGlzLl9iYWNraW5nLnVwZGF0ZUdyaWRJdGVtUG9zaXRpb25zKCl9LF91cGRhdGVDb2xvcnMoKXt0aGlzLl9iYWNraW5nLnVwZGF0ZUNvbG9ycygpfSxfdXBkYXRlSW1hZ2VGaWVsZE5hbWUoKXt0aGlzLl9iYWNraW5nLnVwZGF0ZUltYWdlRmllbGROYW1lKCl9LApfb25Jcm9uUmVzaXplKCl7dGhpcy5fYmFja2luZy5yZXNpemVIYW5kbGVyKCl9LF9zZWxlY3RlZEluZGljZXNVcGRhdGVkKCl7dGhpcy5fYmFja2luZy5zZWxlY3RlZEluZGljZXNVcGRhdGVkKCl9LF9jb21wYXJlZEluZGljZXNVcGRhdGVkKCl7dGhpcy5fYmFja2luZy5jb21wYXJlZEluZGljZXNVcGRhdGVkKCl9LGZpdFRvVmlld3BvcnQoKXt0aGlzLl9iYWNraW5nLmZpdFRvVmlld3BvcnQoKX0sem9vbUluKCl7dGhpcy5fYmFja2luZy56b29tSW4oKX0sem9vbU91dCgpe3RoaXMuX2JhY2tpbmcuem9vbU91dCgpfX0pOwo8L3NjcmlwdD4KCgo8ZG9tLW1vZHVsZSBpZD0iZmFjZXRzLWRpdmUtY29udHJvbHMiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLWJhc2U7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBvdmVyZmxvdzogdmlzaWJsZTsKICAgICAgfQoKICAgICAgLm1haW4tY29udHJvbHMgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDYwcHg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgb3ZlcmZsb3c6IHZpc2libGU7CiAgICAgIH0KCiAgICAgIC5vdmVyZmxvdy1ob2xkZXIgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIHdpZHRoOiA2MHB4OwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIG92ZXJmbG93OiB2aXNpYmxlOwogICAgICB9CgogICAgICAjb3ZlcmZsb3dtZW51IHsKICAgICAgICBtYXJnaW46IDAgNDBweDsKICAgICAgfQoKICAgICAgLm92ZXJmbG93LWRpdiB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICB9CgogICAgICAub3ZlcmZsb3ctY2hlY2tib3ggewogICAgICAgIG1hcmdpbjogOHB4IDA7CiAgICAgICAgcGFkZGluZwogICAgICB9CgogICAgICAuZHJvcGRvd24taG9sZGVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIHdpZHRoOiAxNTBweDsKICAgICAgICBtYXJnaW46IDAgMTBweDsKICAgICAgfQoKICAgICAgLmRyb3Bkb3duLXRyaWdnZXIgewogICAgICAgIG1hcmdpbi10b3A6IDEwcHg7CiAgICAgIH0KCiAgICAgIC5leHBhbmQtYnV0dG9uIHsKICAgICAgICBjb2xvcjogIzliOWI5YjsKICAgICAgICAtLXBhcGVyLWljb24tYnV0dG9uLWluay1jb2xvcjogIzliOWI5YjsKICAgICAgfQogICAgICBwYXBlci1tZW51IHBhcGVyLWNoZWNrYm94IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBmb250LXdlaWdodDogbm9ybWFsOwogICAgICAgIGZvbnQtc2l6ZTogMTIuNXB4OwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgfQoKICAgICAgcGFwZXItaXRlbSB7CiAgICAgICAgcGFkZGluZzogMCAxNHB4OwogICAgICAgIC0tcGFwZXItaXRlbS1taW4taGVpZ2h0OiAzNnB4OwogICAgICB9CiAgICAgIHBhcGVyLWRyb3Bkb3duLW1lbnUgcGFwZXItaXRlbSB7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNjY2M7CiAgICAgIH0KCiAgICAgICN2ZXJ0aWNhbEZhY2V0IHsKICAgICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnB1dDogewogICAgICAgICAgY29sb3I6IHZhcigtLWdyaWQtZmFjZXRpbmctdmVydGljYWwtbGFiZWwtY29sb3IpOwogICAgICAgIH07CiAgICAgIH0KICAgICAgI2hvcml6b250YWxGYWNldCB7CiAgICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItaW5wdXQ6IHsKICAgICAgICAgIGNvbG9yOiB2YXIoLS1ncmlkLWZhY2V0aW5nLWhvcml6b250YWwtbGFiZWwtY29sb3IpOwogICAgICAgIH07CiAgICAgIH0KICAgICAgI3ZlcnRpY2FsUG9zaXRpb24gewogICAgICAgIC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWlucHV0OiB7CiAgICAgICAgICBjb2xvcjogdmFyKC0taXRlbS1wb3NpdGlvbmluZy12ZXJ0aWNhbC1sYWJlbC1jb2xvcik7CiAgICAgICAgfTsKICAgICAgfQogICAgICAjaG9yaXpvbnRhbFBvc2l0aW9uIHsKICAgICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnB1dDogewogICAgICAgICAgY29sb3I6IHZhcigtLWl0ZW0tcG9zaXRpb25pbmctaG9yaXpvbnRhbC1sYWJlbC1jb2xvcik7CiAgICAgICAgfTsKICAgICAgfQogICAgICAudmVydGljYWwtZmFjZXQgewogICAgICAgIGNvbG9yOiB2YXIoLS1ncmlkLWZhY2V0aW5nLXZlcnRpY2FsLWxhYmVsLWNvbG9yKTsKICAgICAgfQogICAgICAuaG9yaXpvbnRhbC1mYWNldCB7CiAgICAgICAgY29sb3I6IHZhcigtLWdyaWQtZmFjZXRpbmctaG9yaXpvbnRhbC1sYWJlbC1jb2xvcik7CiAgICAgIH0KICAgICAgLnZlcnRpY2FsLXBvc2l0aW9uIHsKICAgICAgICBjb2xvcjogdmFyKC0taXRlbS1wb3NpdGlvbmluZy12ZXJ0aWNhbC1sYWJlbC1jb2xvcik7CiAgICAgIH0KICAgICAgLmhvcml6b250YWwtcG9zaXRpb24gewogICAgICAgIGNvbG9yOiB2YXIoLS1pdGVtLXBvc2l0aW9uaW5nLWhvcml6b250YWwtbGFiZWwtY29sb3IpOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxkaXYgY2xhc3M9Im1haW4tY29udHJvbHMiPgogICAgICAgIDxkaXYgY2xhc3M9ImRyb3Bkb3duLWhvbGRlciBob3Jpem9udGFsLWZhY2V0Ij4KICAgICAgICAgICAgPHBhcGVyLWRyb3Bkb3duLW1lbnUgaWQ9Imhvcml6b250YWxGYWNldCIgbGFiZWw9IkJpbm5pbmcgfCBYLUF4aXMiIGNsYXNzPSJmYWNldC1zZWxlY3RvciI+CiAgICAgICAgICAgICAgPHBhcGVyLWxpc3Rib3ggY2xhc3M9ImRyb3Bkb3duLWNvbnRlbnQiIHNlbGVjdGVkPSJ7e2hvcml6b250YWxGYWNldH19IiBhdHRyLWZvci1zZWxlY3RlZD0idmFsdWUiIHNsb3Q9ImRyb3Bkb3duLWNvbnRlbnQiPgogICAgICAgICAgICAgICAgPHBhcGVyLWl0ZW0gdmFsdWU9IiI+KG5vbmUpPC9wYXBlci1pdGVtPgogICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1trZXlzXV0iPgogICAgICAgICAgICAgICAgICA8cGFwZXItaXRlbSB2YWx1ZT0iW1tpdGVtXV0iPltbX2JyZWFrVXBBbmRUcnVuY2F0ZShpdGVtKV1dPC9wYXBlci1pdGVtPgogICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICA8L3BhcGVyLWxpc3Rib3g+CiAgICAgICAgICAgIDwvcGFwZXItZHJvcGRvd24tbWVudT4KICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tob3Jpem9udGFsRmFjZXRdXSI+CiAgICAgICAgICA8cGFwZXItaW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjEiIG1heD0iW1tfbWF4QnVja2V0cyhob3Jpem9udGFsRmFjZXQsIGhvcml6b250YWxCYWdPZldvcmRzKV1dIiB2YWx1ZT0ie3tob3Jpem9udGFsQnVja2V0c319IiBsYWJlbD0iQ291bnQiPgogICAgICAgICAgICA8L3BhcGVyLWlucHV0PgogICAgICAgICAgPC90ZW1wbGF0ZT4KCiAgICAgIDxkaXYgY2xhc3M9ImRyb3Bkb3duLWhvbGRlciB2ZXJ0aWNhbC1mYWNldCI+CiAgICAgICAgPHBhcGVyLWRyb3Bkb3duLW1lbnUgaWQ9InZlcnRpY2FsRmFjZXQiIGxhYmVsPSJCaW5uaW5nIHwgWS1BeGlzIiBjbGFzcz0iZmFjZXQtc2VsZWN0b3IiPgogICAgICAgICAgPHBhcGVyLWxpc3Rib3ggY2xhc3M9ImRyb3Bkb3duLWNvbnRlbnQiIHNlbGVjdGVkPSJ7e3ZlcnRpY2FsRmFjZXR9fSIgYXR0ci1mb3Itc2VsZWN0ZWQ9InZhbHVlIiBzbG90PSJkcm9wZG93bi1jb250ZW50Ij4KICAgICAgICAgICAgPHBhcGVyLWl0ZW0gdmFsdWU9IiI+KG5vbmUpPC9wYXBlci1pdGVtPgogICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW2tleXNdXSI+CiAgICAgICAgICAgICAgPHBhcGVyLWl0ZW0gdmFsdWU9IltbaXRlbV1dIj5bW19icmVha1VwQW5kVHJ1bmNhdGUoaXRlbSldXTwvcGFwZXItaXRlbT4KICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDwvcGFwZXItbGlzdGJveD4KICAgICAgICA8L3BhcGVyLWRyb3Bkb3duLW1lbnU+CiAgICAgIDwvZGl2PgoKICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW3ZlcnRpY2FsRmFjZXRdXSI+CiAgICAgICAgPHBhcGVyLWlucHV0IHR5cGU9Im51bWJlciIgbWluPSIxIiBtYXg9IltbX21heEJ1Y2tldHModmVydGljYWxGYWNldCx2ZXJ0aWNhbEJhZ09mV29yZHMpXV0iIHZhbHVlPSJ7e3ZlcnRpY2FsQnVja2V0c319IiBsYWJlbD0iQ291bnQiPgogICAgICAgIDwvcGFwZXItaW5wdXQ+CiAgICAgIDwvdGVtcGxhdGU+CgogICAgICA8ZGl2IGNsYXNzPSJkcm9wZG93bi1ob2xkZXIiPgogICAgICAgIDxwYXBlci1kcm9wZG93bi1tZW51IGlkPSJjb2xvckJ5IiBsYWJlbD0iQ29sb3IgQnkiPgogICAgICAgICAgPHBhcGVyLWxpc3Rib3ggY2xhc3M9ImRyb3Bkb3duLWNvbnRlbnQiIHNlbGVjdGVkPSJ7e2NvbG9yQnl9fSIgYXR0ci1mb3Itc2VsZWN0ZWQ9InZhbHVlIiBzbG90PSJkcm9wZG93bi1jb250ZW50Ij4KICAgICAgICAgICAgPHBhcGVyLWl0ZW0gdmFsdWU9IiI+KG5vbmUpPC9wYXBlci1pdGVtPgogICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW2tleXNdXSI+CiAgICAgICAgICAgICAgPHBhcGVyLWl0ZW0gdmFsdWU9IltbaXRlbV1dIj5bW2l0ZW1dXTwvcGFwZXItaXRlbT4KICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDwvcGFwZXItbGlzdGJveD4KICAgICAgICA8L3BhcGVyLWRyb3Bkb3duLW1lbnU+CiAgICAgIDwvZGl2PgoKICAgICAgPGRpdiBjbGFzcz0iZHJvcGRvd24taG9sZGVyIj4KICAgICAgICA8cGFwZXItZHJvcGRvd24tbWVudSBpZD0iaW1hZ2VGaWVsZE5hbWUiIGxhYmVsPSJMYWJlbCBCeSI+CiAgICAgICAgICA8cGFwZXItbGlzdGJveCBjbGFzcz0iZHJvcGRvd24tY29udGVudCIgc2VsZWN0ZWQ9Int7aW1hZ2VGaWVsZE5hbWV9fSIgYXR0ci1mb3Itc2VsZWN0ZWQ9InZhbHVlIiBzbG90PSJkcm9wZG93bi1jb250ZW50Ij4KICAgICAgICAgICAgPHBhcGVyLWl0ZW0gdmFsdWU9IiI+CiAgICAgICAgICAgICAgW1tfZ2V0SW1hZ2VGaWVsZE5hbWVEZWZhdWx0TGFiZWwoYXRsYXNVcmwpXV0KICAgICAgICAgICAgPC9wYXBlci1pdGVtPgogICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW2tleXNdXSI+CiAgICAgICAgICAgICAgPHBhcGVyLWl0ZW0gdmFsdWU9IltbaXRlbV1dIj5bW2l0ZW1dXTwvcGFwZXItaXRlbT4KICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDwvcGFwZXItbGlzdGJveD4KICAgICAgICA8L3BhcGVyLWRyb3Bkb3duLW1lbnU+CiAgICAgIDwvZGl2PgoKICAgICAgPGRpdiBjbGFzcz0iZHJvcGRvd24taG9sZGVyIGhvcml6b250YWwtcG9zaXRpb24iPgogICAgICAgIDxwYXBlci1kcm9wZG93bi1tZW51IGlkPSJob3Jpem9udGFsUG9zaXRpb24iIGxhYmVsPSJTY2F0dGVyIHwgWC1BeGlzIiBjbGFzcz0icG9zaXRpb24tc2VsZWN0b3IiPgogICAgICAgICAgPHBhcGVyLWxpc3Rib3ggY2xhc3M9ImRyb3Bkb3duLWNvbnRlbnQiIHNlbGVjdGVkPSJ7e2hvcml6b250YWxQb3NpdGlvbn19IiBhdHRyLWZvci1zZWxlY3RlZD0idmFsdWUiIHNsb3Q9ImRyb3Bkb3duLWNvbnRlbnQiPgogICAgICAgICAgICA8cGFwZXItaXRlbSB2YWx1ZT0iIj4oZGVmYXVsdCk8L3BhcGVyLWl0ZW0+CiAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9Iltba2V5c11dIiBmaWx0ZXI9Il9pc0tleU51bWVyaWMiPgogICAgICAgICAgICAgIDxwYXBlci1pdGVtIHZhbHVlPSJbW2l0ZW1dXSI+W1tpdGVtXV08L3BhcGVyLWl0ZW0+CiAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8L3BhcGVyLWxpc3Rib3g+CiAgICAgICAgPC9wYXBlci1kcm9wZG93bi1tZW51PgogICAgICA8L2Rpdj4KCiAgICAgIDxkaXYgY2xhc3M9ImRyb3Bkb3duLWhvbGRlciB2ZXJ0aWNhbC1wb3NpdGlvbiI+CiAgICAgICAgPHBhcGVyLWRyb3Bkb3duLW1lbnUgaWQ9InZlcnRpY2FsUG9zaXRpb24iIGxhYmVsPSJTY2F0dGVyIHwgWS1BeGlzIiBjbGFzcz0icG9zaXRpb24tc2VsZWN0b3IiPgogICAgICAgICAgPHBhcGVyLWxpc3Rib3ggY2xhc3M9ImRyb3Bkb3duLWNvbnRlbnQiIHNlbGVjdGVkPSJ7e3ZlcnRpY2FsUG9zaXRpb259fSIgYXR0ci1mb3Itc2VsZWN0ZWQ9InZhbHVlIiBzbG90PSJkcm9wZG93bi1jb250ZW50Ij4KICAgICAgICAgICAgPHBhcGVyLWl0ZW0gdmFsdWU9IiI+KGRlZmF1bHQpPC9wYXBlci1pdGVtPgogICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW2tleXNdXSIgZmlsdGVyPSJfaXNLZXlOdW1lcmljIj4KICAgICAgICAgICAgICA8cGFwZXItaXRlbSB2YWx1ZT0iW1tpdGVtXV0iPltbaXRlbV1dPC9wYXBlci1pdGVtPgogICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPC9wYXBlci1saXN0Ym94PgogICAgICAgIDwvcGFwZXItZHJvcGRvd24tbWVudT4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9Im92ZXJmbG93LWhvbGRlciI+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfc2hvdWxkU2hvd092ZXJmbG93TWVudShjb2xvckJ5LCB2ZXJ0aWNhbEZhY2V0LCBob3Jpem9udGFsRmFjZXQpXV0iPgogICAgICAgIDxwYXBlci1pY29uLWJ1dHRvbiBjbGFzcz0iZHJvcGRvd24tdHJpZ2dlciIgaWNvbj0ibW9yZS12ZXJ0IiBhbHQ9Im1vcmUtdmVydCIgaWQ9Im92ZXJmbG93YnRuIiBvbi1jbGljaz0iX29wZW5PdmVyZmxvdyI+CiAgICAgICAgPC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPHBhcGVyLWRpYWxvZyBpZD0ib3ZlcmZsb3dtZW51IiBuby1vdmVybGFwIGhvcml6b250YWwtYWxpZ249InJpZ2h0IiB2ZXJ0aWNhbC1hbGlnbj0idG9wIj4KICAgICAgICA8ZGl2IGNsYXNzPSJvdmVyZmxvdy1kaXYiPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJ7e19pc0tleUNhdGVnb3JpY2FsKGNvbG9yQnkpfX0iPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJkcm9wZG93bi1ob2xkZXIiPgogICAgICAgICAgICAgIDxwYXBlci1kcm9wZG93bi1tZW51IGlkPSJwYWxldHRlQ2hvaWNlIiBsYWJlbD0iRGlzcGxheSB8IENvbG9yIFBhbGV0dGUiPgogICAgICAgICAgICAgICAgPHBhcGVyLWxpc3Rib3ggY2xhc3M9ImRyb3Bkb3duLWNvbnRlbnQiIHNlbGVjdGVkPSJ7e3BhbGV0dGVDaG9pY2V9fSIgYXR0ci1mb3Itc2VsZWN0ZWQ9InZhbHVlIiBzbG90PSJkcm9wZG93bi1jb250ZW50Ij4KICAgICAgICAgICAgICAgICAgPHBhcGVyLWl0ZW0gdmFsdWU9InN0YW5kYXJkIj5zdGFuZGFyZDwvcGFwZXItaXRlbT4KICAgICAgICAgICAgICAgICAgPHBhcGVyLWl0ZW0gdmFsdWU9Indhcm0iPndhcm08L3BhcGVyLWl0ZW0+CiAgICAgICAgICAgICAgICAgIDxwYXBlci1pdGVtIHZhbHVlPSJjb29sIj5jb29sPC9wYXBlci1pdGVtPgogICAgICAgICAgICAgICAgICA8cGFwZXItaXRlbSB2YWx1ZT0iYXNzaXN0Ij5hc3Npc3Q8L3BhcGVyLWl0ZW0+CiAgICAgICAgICAgICAgICA8L3BhcGVyLWxpc3Rib3g+CiAgICAgICAgICAgICAgPC9wYXBlci1kcm9wZG93bi1tZW51PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2hhc1dvcmRUcmVlKHZlcnRpY2FsRmFjZXQpXV0iPgogICAgICAgICAgICA8cGFwZXItY2hlY2tib3ggY2xhc3M9Im92ZXJmbG93LWNoZWNrYm94IiBjaGVja2VkPSJ7e3ZlcnRpY2FsQmFnT2ZXb3Jkc319Ij4KICAgICAgICAgICAgICBYLUF4aXMgQmFnIG9mIHdvcmRzCiAgICAgICAgICAgIDwvcGFwZXItY2hlY2tib3g+CiAgICAgICAgICA8L3RlbXBsYXRlPgoKICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaGFzV29yZFRyZWUoaG9yaXpvbnRhbEZhY2V0KV1dIj4KICAgICAgICAgICAgPHBhcGVyLWNoZWNrYm94IGNsYXNzPSJvdmVyZmxvdy1jaGVja2JveCIgY2hlY2tlZD0ie3tob3Jpem9udGFsQmFnT2ZXb3Jkc319Ij4KICAgICAgICAgICAgICBZLUF4aXMgQmFnIG9mIHdvcmRzCiAgICAgICAgICAgIDwvcGFwZXItY2hlY2tib3g+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvZGl2PgogICAgICA8L3BhcGVyLWRpYWxvZz4KICAgIDwvZGl2PgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT4KCjxzY3JpcHQ+Ly9+fldFQlBBVEh+fi9mYWNldHMtZGl2ZS9jb21wb25lbnRzL2ZhY2V0cy1kaXZlLWNvbnRyb2xzL2ZhY2V0cy1kaXZlLWNvbnRyb2xzLmpzClBvbHltZXIoe2lzOiJmYWNldHMtZGl2ZS1jb250cm9scyIscHJvcGVydGllczp7YXRsYXNVcmw6e3R5cGU6U3RyaW5nLHZhbHVlOiIifSxrZXlzOnt0eXBlOkFycmF5LHZhbHVlOltdfSxzdGF0czp7dHlwZTpPYmplY3QsdmFsdWU6e319LHZlcnRpY2FsRmFjZXQ6e3R5cGU6U3RyaW5nLHZhbHVlOiIiLG5vdGlmeTohMH0sdmVydGljYWxCdWNrZXRzOnt0eXBlOk51bWJlcix2YWx1ZToxMCxub3RpZnk6ITB9LHZlcnRpY2FsQmFnT2ZXb3Jkczp7dHlwZTpCb29sZWFuLHZhbHVlOiExLG5vdGlmeTohMH0saG9yaXpvbnRhbEZhY2V0Ont0eXBlOlN0cmluZyx2YWx1ZToiIixub3RpZnk6ITB9LGhvcml6b250YWxCdWNrZXRzOnt0eXBlOk51bWJlcix2YWx1ZToxMCxub3RpZnk6ITB9LGhvcml6b250YWxCYWdPZldvcmRzOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEsbm90aWZ5OiEwfSxwb3NpdGlvbk1vZGU6e3R5cGU6U3RyaW5nLGNvbXB1dGVkOiJfZ2V0UG9zaXRpb25Nb2RlKHZlcnRpY2FsUG9zaXRpb24sIGhvcml6b250YWxQb3NpdGlvbikiLApub3RpZnk6ITB9LHZlcnRpY2FsUG9zaXRpb246e3R5cGU6U3RyaW5nLHZhbHVlOiIiLG5vdGlmeTohMH0saG9yaXpvbnRhbFBvc2l0aW9uOnt0eXBlOlN0cmluZyx2YWx1ZToiIixub3RpZnk6ITB9LGNvbG9yQnk6e3R5cGU6U3RyaW5nLHZhbHVlOiIiLG5vdGlmeTohMH0saW1hZ2VGaWVsZE5hbWU6e3R5cGU6U3RyaW5nLHZhbHVlOiIiLG5vdGlmeTohMH0scGFsZXR0ZTp7dHlwZTpBcnJheSx2YWx1ZTpbXX0scGFsZXR0ZUNob2ljZTp7dHlwZTpTdHJpbmcsdmFsdWU6InN0YW5kYXJkIixub3RpZnk6ITB9LGdyaWRGYWNldGluZ1ZlcnRpY2FsTGFiZWxDb2xvcjp7dHlwZTpTdHJpbmcsdmFsdWU6IiM2NjY2NjYiLG9ic2VydmVyOiJfdXBkYXRlQ1NTVmFycyJ9LGdyaWRGYWNldGluZ0hvcml6b250YWxMYWJlbENvbG9yOnt0eXBlOlN0cmluZyx2YWx1ZToiI2RkNjYyMiIsb2JzZXJ2ZXI6Il91cGRhdGVDU1NWYXJzIn0saXRlbVBvc2l0aW9uaW5nVmVydGljYWxMYWJlbENvbG9yOnt0eXBlOlN0cmluZywKdmFsdWU6IiMyMjU1YWEiLG9ic2VydmVyOiJfdXBkYXRlQ1NTVmFycyJ9LGl0ZW1Qb3NpdGlvbmluZ0hvcml6b250YWxMYWJlbENvbG9yOnt0eXBlOlN0cmluZyx2YWx1ZToiIzExODg0NCIsb2JzZXJ2ZXI6Il91cGRhdGVDU1NWYXJzIn19LF9nZXRJbWFnZUZpZWxkTmFtZURlZmF1bHRMYWJlbChhKXtyZXR1cm4gYT8iKGltYWdlKSI6IihkZWZhdWx0KSJ9LF9pc01vZGVTY2F0dGVyKGEpe3JldHVybiJzY2F0dGVyIj09PWF9LF9pc0tleU51bWVyaWMoYSl7cmV0dXJuIHRoaXMuc3RhdHMmJmEgaW4gdGhpcy5zdGF0cyYmdGhpcy5zdGF0c1thXS5pc051bWVyaWMoKX0sX2lzS2V5Q2F0ZWdvcmljYWwoYSl7cmV0dXJuIHRoaXMuc3RhdHMmJmEgaW4gdGhpcy5zdGF0cyYmIXRoaXMuc3RhdHNbYV0uaXNOdW1lcmljKCl9LF91cGRhdGVDU1NWYXJzKCl7dGhpcy51cGRhdGVTdHlsZXMoeyItLWdyaWQtZmFjZXRpbmctdmVydGljYWwtbGFiZWwtY29sb3IiOnRoaXMuZ3JpZEZhY2V0aW5nVmVydGljYWxMYWJlbENvbG9yLAoiLS1ncmlkLWZhY2V0aW5nLWhvcml6b250YWwtbGFiZWwtY29sb3IiOnRoaXMuZ3JpZEZhY2V0aW5nSG9yaXpvbnRhbExhYmVsQ29sb3IsIi0taXRlbS1wb3NpdGlvbmluZy12ZXJ0aWNhbC1sYWJlbC1jb2xvciI6dGhpcy5pdGVtUG9zaXRpb25pbmdWZXJ0aWNhbExhYmVsQ29sb3IsIi0taXRlbS1wb3NpdGlvbmluZy1ob3Jpem9udGFsLWxhYmVsLWNvbG9yIjp0aGlzLml0ZW1Qb3NpdGlvbmluZ0hvcml6b250YWxMYWJlbENvbG9yfSl9LF9icmVha1VwQW5kVHJ1bmNhdGUoYSl7cmV0dXJuIGtuKGxuKCIiK2EpKX0sX21heEJ1Y2tldHMoYSxjKXtjb25zdCBkPXRoaXMuc3RhdHM/dGhpcy5zdGF0c1thXTpudWxsO3JldHVybiBkP2MmJnRoaXMuX2hhc1dvcmRUcmVlKGEpP01hdGgubWluKDEwMCxkLndvcmRUcmVlLmhpZ2hlc3RMZXZlbCk6TWF0aC5taW4oMTAwLGQudW5pcXVlQ291bnQrMSk6MTAwfSxfaGFzV29yZFRyZWUoYSl7YT10aGlzLnN0YXRzP3RoaXMuc3RhdHNbYV06bnVsbDsKcmV0dXJuISFhJiYhIWEud29yZFRyZWUmJjE8YS53b3JkVHJlZS5oaWdoZXN0TGV2ZWx9LF9nZXRQb3NpdGlvbk1vZGUoYSxjKXtyZXR1cm4iIj09YSYmIiI9PWM/InN0YWNrZWQiOiJzY2F0dGVyIn0sX29wZW5PdmVyZmxvdygpe3RoaXMuJC5vdmVyZmxvd21lbnUucG9zaXRpb25FbGVtZW50PXRoaXMuJC5vdmVyZmxvd2J0bjt0aGlzLiQub3ZlcmZsb3dtZW51Lm9wZW4oKX0sX3Nob3VsZFNob3dPdmVyZmxvd01lbnUoYSxjLGQpe3JldHVybiB0aGlzLl9pc0tleUNhdGVnb3JpY2FsKGEpfHx0aGlzLl9oYXNXb3JkVHJlZShjKXx8dGhpcy5faGFzV29yZFRyZWUoZCl9fSk7Cjwvc2NyaXB0PgoKCgoKPHNjcmlwdD4vL35+V0VCUEFUSH5+L2ZhY2V0cy1kaXZlL2xpYi9pbmZvLXJlbmRlcmVycy5qcwpjb25zdCB3bj0oYSxjKT0+e2NvbnN0IGQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGwiKTtmb3IoY29uc3QgZyBpbiBhKWlmKGEuaGFzT3duUHJvcGVydHkoZykpe3ZhciBmPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImR0Iik7Zi50ZXh0Q29udGVudD1nO2QuYXBwZW5kQ2hpbGQoZik7Zj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkZCIpO2YudGV4dENvbnRlbnQ9YVtnXTtkLmFwcGVuZENoaWxkKGYpfWMuYXBwZW5kQ2hpbGQoZCl9Owo8L3NjcmlwdD4KCgo8ZG9tLW1vZHVsZSBpZD0iZmFjZXRzLWRpdmUtaW5mby1jYXJkIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1iYXNlOwogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgbWF4LWhlaWdodDogMTAwJTsKICAgICAgICBtYXgtd2lkdGg6IDEwMCU7CiAgICAgICAgb3ZlcmZsb3c6IGF1dG87CiAgICAgICAgcGFkZGluZzogOHB4OwogICAgICB9CiAgICAgIGR0IHsKICAgICAgICBjb2xvcjogIzllN2M2NTsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgIH0KICAgICAgZGQgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLWNvZGU7CiAgICAgICAgY29sb3I6ICM1MTM3MjY7CiAgICAgICAgbWFyZ2luOiAwIDAgMTZweCAwOwogICAgICB9CiAgICA8L3N0eWxlPgogICAgPGRpdiBpZD0iaG9sZGVyIj48L2Rpdj4KICAgIAogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT4KCjxzY3JpcHQ+Ly9+fldFQlBBVEh+fi9mYWNldHMtZGl2ZS9jb21wb25lbnRzL2ZhY2V0cy1kaXZlLWluZm8tY2FyZC9mYWNldHMtZGl2ZS1pbmZvLWNhcmQuanMKUG9seW1lcih7aXM6ImZhY2V0cy1kaXZlLWluZm8tY2FyZCIscHJvcGVydGllczp7aW5mb1JlbmRlcmVyOnt0eXBlOk9iamVjdH0sc2VsZWN0ZWREYXRhOnt0eXBlOkFycmF5LHZhbHVlOltdLG9ic2VydmVyOiJfdXBkYXRlU2VsZWN0ZWQifX0scmVhZHkoKXt0aGlzLnNjb3BlU3VidHJlZSh0aGlzLiQuaG9sZGVyLCEwKX0sX3VwZGF0ZVNlbGVjdGVkKGEpe3RoaXMuJC5ob2xkZXIuaW5uZXJIVE1MPSIiO2lmKGEpe3ZhciBjPXRoaXMuaW5mb1JlbmRlcmVyfHx3bjtmb3IobGV0IGQ9MDtkPGEubGVuZ3RoO2QrKyl7Y29uc3QgZj1hW2RdLGc9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Zy5zdHlsZS53aWR0aD0iMTAwJSI7dGhpcy4kLmhvbGRlci5hcHBlbmRDaGlsZChnKTtjKGYsZyl9fX19KTsKPC9zY3JpcHQ+CgoKCgoKCgoKCgo8ZG9tLW1vZHVsZSBpZD0iZmFjZXRzLWRpdmUtbGVnZW5kIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1iYXNlOwogICAgICB9CgogICAgICAubGVnZW5kIHsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjYTlhOWE5OwogICAgICAgIG1pbi13aWR0aDogMjAwcHg7CiAgICAgIH0KCiAgICAgIC50b3BiYXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICAgIHBhZGRpbmc6IDhweDsKICAgICAgICBiYWNrZ3JvdW5kOiAjRTZFNkZBOwogICAgICB9CgogICAgICAuZXhwYW5kLWJ1dHRvbiB7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgICB3aWR0aDogMjBweDsKICAgICAgICBoZWlnaHQ6IDIwcHg7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDEwcHg7CiAgICAgIH0KCiAgICAgIC5sZWdlbmQtYm9keSB7CiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNhOWE5YTk7CiAgICAgICAgcGFkZGluZzogOHB4OwogICAgICAgIGJhY2tncm91bmQ6IHdoaXRlOwogICAgICB9CgogICAgICAubGVnZW5kIC5sYXlvdXQtcm93IHsKICAgICAgICBtYXJnaW46IDA7CiAgICAgIH0KICAgICAgLmxlZ2VuZCAubGF5b3V0LXJvdyBzcGFuIHsKICAgICAgICBtYXJnaW46IDJweCAwIDAgOHB4OwogICAgICB9CgogICAgICAvKioKICAgICAgICogTGVnZW5kIHRhYmxlIHNoaW0uIFBvbHltZXIncyBkb20tcmVwZWF0IGZlYXR1cmUgaGFzIGEga25vd24gaXNzdWUgaW4KICAgICAgICogd2hpY2ggaXQgZG9lc24ndCB3b3JrIHdpdGggPHRyPiBlbGVtZW50cyBpbnNpZGUgb2YgYSA8dGFibGU+LiBTbwogICAgICAgKiBpbnN0ZWFkLCB3ZSB1c2UgQ1NTIHdpdGggY2xhc3NlZCBkaXZzIHRvIGFjaGlldmUgdGFibGUgYmVoYXZpb3IuCiAgICAgICAqLwogICAgICAubGVnZW5kLXRhYmxlIHsKICAgICAgICBkaXNwbGF5OiB0YWJsZTsKICAgICAgICBtYXJnaW4tbGVmdDogMnB4OwogICAgICB9CiAgICAgIC5sZWdlbmQtcm93IHsKICAgICAgICBkaXNwbGF5OiB0YWJsZS1yb3c7CiAgICAgIH0KICAgICAgLmxlZ2VuZC1jZWxsIHsKICAgICAgICBkaXNwbGF5OiB0YWJsZS1jZWxsOwogICAgICB9CgogICAgICAvKioKICAgICAgICogQ29sb3IgbGVnZW5kLgogICAgICAgKi8KICAgICAgLmxlZ2VuZCAuY29sb3IgewogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgfQogICAgICAubGVnZW5kIC5jb2xvciBpcm9uLWljb24gewogICAgICAgIC0taXJvbi1pY29uLXdpZHRoOiAxNnB4OwogICAgICAgIC0taXJvbi1pY29uLWhlaWdodDogMTZweDsKICAgICAgICBtYXJnaW46IDAgMnB4OwogICAgICB9CiAgICAgIC5sZWdlbmQgLmNvbG9yIGlyb24taWNvbltmaWxsPSIjZmZmZmZmIl0gewogICAgICAgIGJhY2tncm91bmQ6ICNkZGRkZGQ7CiAgICAgIH0KICAgICAgLmxlZ2VuZCAuY29sb3Igc3BhbiB7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICB9CiAgICAgIC5sZWdlbmQgLnNwZWNpYWwgewogICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICAgICAgfQoKICAgICAgLmxlZ2VuZCBoMiB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1zdWJoZWFkOwogICAgICAgIGNvbG9yOiAjNGY0MjNlOwogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICAgIGxpbmUtaGVpZ2h0OiAxOwogICAgICAgIG1hcmdpbjogMDsKICAgICAgfQogICAgICAubGVnZW5kIC5jb2xvci1ieS1maWVsZCB7CiAgICAgICAgY29sb3I6ICM5NjhlOGM7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgZm9udC1zaXplOiAxMi41cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKICAgICAgICBtYXJnaW46IDJweCAwIDRweCAyMHB4OwogICAgICB9CiAgICA8L3N0eWxlPgogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19hbnlDb2xvcihjb2xvckJ5LCBwYWxldHRlKV1dIj4KICAgICAgPGRpdiBjbGFzcz0ibGVnZW5kIj4KICAgICAgICA8ZGl2IGNsYXNzPSJ0b3BiYXIiPgogICAgICAgICAgPGRpdiBjbGFzcz0idGl0bGUiPkxlZ2VuZDwvZGl2PgogICAgICAgICAgPHBhcGVyLWljb24tYnV0dG9uIGNsYXNzPSJleHBhbmQtYnV0dG9uIiBvbi1jbGljaz0iX3RvZ2dsZU9wZW5lZCIgaWNvbj0iW1tfZ2V0SWNvbihfb3BlbmVkKV1dIj4KICAgICAgICAgIDwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGlyb24tY29sbGFwc2UgaWQ9ImNvbGxhcHNlIiBvcGVuZWQ9Int7X29wZW5lZH19Ij4KICAgICAgICAgIDxkaXYgY2xhc3M9ImxlZ2VuZC1ib2R5Ij4KICAgICAgICAgICAgPGgyPkNvbG9yczwvaDI+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjb2xvci1ieS1maWVsZCI+CiAgICAgICAgICAgICAgYnkgW1tfYnJlYWtVcEFuZFRydW5jYXRlKGNvbG9yQnkpXV0KICAgICAgICAgICAgICA8cGFwZXItdG9vbHRpcCBwb3NpdGlvbj0idG9wIj5bW2NvbG9yQnldXTwvcGFwZXItdG9vbHRpcD4KICAgICAgICAgICAgPC9zcGFuPgoKICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGVnZW5kLXRhYmxlIj4KICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW3BhbGV0dGVdXSI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsZWdlbmQtcm93IGNvbG9yIj4KICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGVnZW5kLWNlbGwiPgogICAgICAgICAgICAgICAgICAgIDxpcm9uLWljb24gaWNvbj0iYXY6ZmliZXItbWFudWFsLXJlY29yZCIgZmlsbCQ9IltbaXRlbS5jb2xvcl1dIiBzdHlsZSQ9ImZpbGw6W1tpdGVtLmNvbG9yXV0iPjwvaXJvbi1pY29uPgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGVnZW5kLWNlbGwiPgogICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzJD0iW1tfc3BlY2lhbENsYXNzKGl0ZW0uY29udGVudC5zcGVjaWFsKV1dIj4KICAgICAgICAgICAgICAgICAgICAgIFtbX2JyZWFrVXBBbmRUcnVuY2F0ZShpdGVtLmNvbnRlbnQubGFiZWwpXV0KICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPHBhcGVyLXRvb2x0aXAgcG9zaXRpb249InRvcCI+W1tpdGVtLmNvbnRlbnQubGFiZWxdXTwvcGFwZXItdG9vbHRpcD4KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvaXJvbi1jb2xsYXBzZT4KICAgICAgPC9kaXY+CiAgICA8L3RlbXBsYXRlPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT4KPHNjcmlwdD4vL35+V0VCUEFUSH5+L2ZhY2V0cy1kaXZlL2NvbXBvbmVudHMvZmFjZXRzLWRpdmUtbGVnZW5kL2ZhY2V0cy1kaXZlLWxlZ2VuZC5qcwpQb2x5bWVyKHtpczoiZmFjZXRzLWRpdmUtbGVnZW5kIixwcm9wZXJ0aWVzOntjb2xvckJ5Ont0eXBlOlN0cmluZyx2YWx1ZToiIixvYnNlcnZlcjoiX29wZW4ifSxwYWxldHRlOnt0eXBlOkFycmF5LHZhbHVlOltdfSxfb3BlbmVkOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9fSxfYnJlYWtVcEFuZFRydW5jYXRlKGEpe3JldHVybiBrbihsbigiIithKSl9LF9hbnlDb2xvcigpe3JldHVybiEhKHRoaXMuY29sb3JCeSYmdGhpcy5wYWxldHRlJiZ0aGlzLnBhbGV0dGUubGVuZ3RoKX0sX3NwZWNpYWxDbGFzcyhhKXtyZXR1cm4gYT8ic3BlY2lhbCI6IiJ9LF9vcGVuKCl7dGhpcy5fb3BlbmVkPSEwfSxfdG9nZ2xlT3BlbmVkKCl7dGhpcy5fb3BlbmVkPSF0aGlzLl9vcGVuZWR9LF9nZXRJY29uKGEpe3JldHVybiBhPyJleHBhbmQtbGVzcyI6ImV4cGFuZC1tb3JlIn19KTsKPC9zY3JpcHQ+CgoKCjxkb20tbW9kdWxlIGlkPSJmYWNldHMtZGl2ZSI+CiAgPHRlbXBsYXRlPgoKICAgIDxzdHlsZT4KICAgICAgLyoqCiAgICAgICAqIHBhcGVyLWlucHV0LWNvbnRhaW5lciB1c2VzIGFuIGVsZW1lbnQgY29udGFpbmluZyBvbmx5ICZuYnNwOyBmb3IKICAgICAgICogc3BhY2luZyBwdXJwb3Nlcy4gQWdncmVzc2l2ZSB2dWxjYW5pemVycyBzb21ldGltZXMgcmVtb3ZlIHRoaXMgY29udGVudC4KICAgICAgICogVGhpcyBDU1MgcnVsZSBmb3JjZXMgdGhlIGNvbnRhaW5pbmcgZWxlbWVudCB0byBoYXZlIHRoZSBjb3JyZWN0IGhlaWdodAogICAgICAgKiBpbiBlaXRoZXIgY2FzZS4KICAgICAgICovCiAgICAgIDpob3N0IHBhcGVyLWlucHV0LWNvbnRhaW5lciA+IC5mbG9hdGVkLWxhYmVsLXBsYWNlaG9sZGVyIHsKICAgICAgICBtaW4taGVpZ2h0OiAyMHB4OwogICAgICB9CgogICAgICA6aG9zdCB7CiAgICAgICAgYmFja2dyb3VuZDogI2ZmZmZmZjsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQogICAgICAuZmlsbCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CiAgICAgIC5tYWluIHsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICB9CiAgICAgIGZhY2V0cy1kaXZlLWNvbnRyb2xzIHsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2QzZDNkMzsKICAgICAgICBmbGV4LWdyb3c6IDA7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgaGVpZ2h0OiA2MHB4OwogICAgICB9CiAgICAgIC5yb3cgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgfQogICAgICBmYWNldHMtZGl2ZS1sZWdlbmQgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBib3R0b206IDE0cHg7CiAgICAgICAgcmlnaHQ6IDI0cHg7CiAgICAgIH0KICAgICAgLnpvb20tY29udHJvbHMgewogICAgICAgIGJvdHRvbTogMTRweDsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICB9CiAgICAgIC56b29tLWNvbnRyb2xzIHBhcGVyLWJ1dHRvbiB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2U3ZTdlNzsKICAgICAgICBjbGVhcjogbGVmdDsKICAgICAgICBjb2xvcjogIzJiMmIyYjsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBmbG9hdDogbGVmdDsKICAgICAgICBtYXJnaW46IDRweCA4cHg7CiAgICAgICAgbWluLXdpZHRoOiAwOwogICAgICAgIHBhZGRpbmc6IDhweDsKICAgICAgfQogICAgICBmYWNldHMtZGl2ZS1pbmZvLWNhcmQgewogICAgICAgIGJhY2tncm91bmQ6ICNmZmY4ZjQ7CiAgICAgICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjYzZjNmM2OwogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgZmxleC1ncm93OiAwOwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICAgIHdpZHRoOiAyNDBweDsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8ZGl2IGNsYXNzPSJmaWxsIG1haW4iPgogICAgICA8ZmFjZXRzLWRpdmUtY29udHJvbHMgaWQ9ImNvbnRyb2xzIiBhdGxhcy11cmw9IltbYXRsYXNVcmxdXSIga2V5cz0iW1tfa2V5c11dIiBzdGF0cz0iW1tzdGF0c11dIiB2ZXJ0aWNhbC1mYWNldD0ie3t2ZXJ0aWNhbEZhY2V0fX0iIHZlcnRpY2FsLWJ1Y2tldHM9Int7dmVydGljYWxCdWNrZXRzfX0iIHZlcnRpY2FsLWJhZy1vZi13b3Jkcz0ie3t2ZXJ0aWNhbEJhZ09mV29yZHN9fSIgaG9yaXpvbnRhbC1mYWNldD0ie3tob3Jpem9udGFsRmFjZXR9fSIgaG9yaXpvbnRhbC1idWNrZXRzPSJ7e2hvcml6b250YWxCdWNrZXRzfX0iIGhvcml6b250YWwtYmFnLW9mLXdvcmRzPSJ7e2hvcml6b250YWxCYWdPZldvcmRzfX0iIHBvc2l0aW9uLW1vZGU9Int7cG9zaXRpb25Nb2RlfX0iIHZlcnRpY2FsLXBvc2l0aW9uPSJ7e3ZlcnRpY2FsUG9zaXRpb259fSIgaG9yaXpvbnRhbC1wb3NpdGlvbj0ie3tob3Jpem9udGFsUG9zaXRpb259fSIgY29sb3ItYnk9Int7Y29sb3JCeX19IiBpbWFnZS1maWVsZC1uYW1lPSJ7e2ltYWdlRmllbGROYW1lfX0iIHBhbGV0dGU9IltbX3BhbGV0dGVdXSIgcGFsZXR0ZS1jaG9pY2U9Int7cGFsZXR0ZUNob2ljZX19IiBncmlkLWZhY2V0aW5nLXZlcnRpY2FsLWxhYmVsLWNvbG9yPSJbW2dyaWRGYWNldGluZ1ZlcnRpY2FsTGFiZWxDb2xvcl1dIiBncmlkLWZhY2V0aW5nLWhvcml6b250YWwtbGFiZWwtY29sb3I9IltbZ3JpZEZhY2V0aW5nSG9yaXpvbnRhbExhYmVsQ29sb3JdXSIgaXRlbS1wb3NpdGlvbmluZy12ZXJ0aWNhbC1sYWJlbC1jb2xvcj0iW1tpdGVtUG9zaXRpb25pbmdWZXJ0aWNhbExhYmVsQ29sb3JdXSIgaXRlbS1wb3NpdGlvbmluZy1ob3Jpem9udGFsLWxhYmVsLWNvbG9yPSJbW2l0ZW1Qb3NpdGlvbmluZ0hvcml6b250YWxMYWJlbENvbG9yXV0iPjwvZmFjZXRzLWRpdmUtY29udHJvbHM+CgogICAgICA8ZGl2IGNsYXNzPSJmaWxsIHJvdyI+CiAgICAgICAgPGRpdiBjbGFzcz0iZmlsbCI+CiAgICAgICAgICA8ZmFjZXRzLWRpdmUtdmlzIGlkPSJ2aXMiIGNsYXNzPSJmaWxsIiBkYXRhPSJbW2RhdGFdXSIgZmlsdGVyZWQtZGF0YS1pbmRpY2VzPSJbW2ZpbHRlcmVkRGF0YUluZGljZXNdXSIgYXRsYXMtdXJsPSJbW2F0bGFzVXJsXV0iIHNwcml0ZS11cmw9Iltbc3ByaXRlVXJsXV0iIGNyb3NzLW9yaWdpbj0iW1tjcm9zc09yaWdpbl1dIiBrZXlzPSJ7e19rZXlzfX0iIHN0YXRzPSJ7e3N0YXRzfX0iIHNwcml0ZS1pbWFnZS13aWR0aD0iW1tzcHJpdGVJbWFnZVdpZHRoXV0iIHNwcml0ZS1pbWFnZS1oZWlnaHQ9Iltbc3ByaXRlSW1hZ2VIZWlnaHRdXSIgdmVydGljYWwtZmFjZXQ9IltbdmVydGljYWxGYWNldF1dIiB2ZXJ0aWNhbC1idWNrZXRzPSJbW3ZlcnRpY2FsQnVja2V0c11dIiB2ZXJ0aWNhbC1iYWctb2Ytd29yZHM9IltbdmVydGljYWxCYWdPZldvcmRzXV0iIGhvcml6b250YWwtZmFjZXQ9IltbaG9yaXpvbnRhbEZhY2V0XV0iIGhvcml6b250YWwtYnVja2V0cz0iW1tob3Jpem9udGFsQnVja2V0c11dIiBob3Jpem9udGFsLWJhZy1vZi13b3Jkcz0iW1tob3Jpem9udGFsQmFnT2ZXb3Jkc11dIiBwb3NpdGlvbi1tb2RlPSJbW3Bvc2l0aW9uTW9kZV1dIiB2ZXJ0aWNhbC1wb3NpdGlvbj0iW1t2ZXJ0aWNhbFBvc2l0aW9uXV0iIGhvcml6b250YWwtcG9zaXRpb249IltbaG9yaXpvbnRhbFBvc2l0aW9uXV0iIGNvbG9yLWJ5PSJ7e2NvbG9yQnl9fSIgaW1hZ2UtZmllbGQtbmFtZT0ie3tpbWFnZUZpZWxkTmFtZX19IiBwYWxldHRlPSJ7e19wYWxldHRlfX0iIHBhbGV0dGUtY2hvaWNlPSJbW3BhbGV0dGVDaG9pY2VdXSIgZ3JpZC1mYWNldGluZy12ZXJ0aWNhbC1sYWJlbC1jb2xvcj0ie3tncmlkRmFjZXRpbmdWZXJ0aWNhbExhYmVsQ29sb3J9fSIgZ3JpZC1mYWNldGluZy1ob3Jpem9udGFsLWxhYmVsLWNvbG9yPSJ7e2dyaWRGYWNldGluZ0hvcml6b250YWxMYWJlbENvbG9yfX0iIGl0ZW0tcG9zaXRpb25pbmctdmVydGljYWwtbGFiZWwtY29sb3I9Int7aXRlbVBvc2l0aW9uaW5nVmVydGljYWxMYWJlbENvbG9yfX0iIGl0ZW0tcG9zaXRpb25pbmctaG9yaXpvbnRhbC1sYWJlbC1jb2xvcj0ie3tpdGVtUG9zaXRpb25pbmdIb3Jpem9udGFsTGFiZWxDb2xvcn19IiBmaXQtZ3JpZC1hc3BlY3QtcmF0aW8tdG8tdmlld3BvcnQ9IltbZml0R3JpZEFzcGVjdFJhdGlvVG9WaWV3cG9ydF1dIiBzZWxlY3RlZC1kYXRhPSJ7e3NlbGVjdGVkRGF0YX19IiBzZWxlY3RlZC1pbmRpY2VzPSJ7e3NlbGVjdGVkSW5kaWNlc319IiBjb21wYXJlZC1kYXRhPSJ7e2NvbXBhcmVkRGF0YX19IiBjb21wYXJlZC1pbmRpY2VzPSJ7e2NvbXBhcmVkSW5kaWNlc319IiBzdGFibGUtY29sb3JzPSJbW3N0YWJsZUNvbG9yc11dIj48L2ZhY2V0cy1kaXZlLXZpcz4KCiAgICAgICAgICA8ZGl2IGNsYXNzPSJ6b29tLWNvbnRyb2xzIj4KICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbiByYWlzZWQgaWQ9Inpvb21JbkJ1dHRvbiI+CiAgICAgICAgICAgICAgPGlyb24taWNvbiBpY29uPSJpY29uczphZGQiPjwvaXJvbi1pY29uPgogICAgICAgICAgICA8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbiByYWlzZWQgaWQ9Inpvb21PdXRCdXR0b24iPgogICAgICAgICAgICAgIDxpcm9uLWljb24gaWNvbj0iaWNvbnM6cmVtb3ZlIj48L2lyb24taWNvbj4KICAgICAgICAgICAgPC9wYXBlci1idXR0b24+CiAgICAgICAgICAgIDxwYXBlci1idXR0b24gcmFpc2VkIGlkPSJmaXRCdXR0b24iPgogICAgICAgICAgICAgIDxpcm9uLWljb24gaWNvbj0iaWNvbnM6YXNwZWN0LXJhdGlvIj48L2lyb24taWNvbj4KICAgICAgICAgICAgPC9wYXBlci1idXR0b24+CiAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICA8ZmFjZXRzLWRpdmUtbGVnZW5kIGlkPSJsZWdlbmQiIGNvbG9yLWJ5PSJbW2NvbG9yQnldXSIgcGFsZXR0ZT0iW1tfcGFsZXR0ZV1dIj4KICAgICAgICAgIDwvZmFjZXRzLWRpdmUtbGVnZW5kPgogICAgICAgIDwvZGl2PgoKICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIWhpZGVJbmZvQ2FyZF1dIj4KICAgICAgICAgIDxmYWNldHMtZGl2ZS1pbmZvLWNhcmQgaWQ9ImluZm9DYXJkIiBzZWxlY3RlZC1kYXRhPSJbW3NlbGVjdGVkRGF0YV1dIiBpbmZvLXJlbmRlcmVyPSJbW2luZm9SZW5kZXJlcl1dIj4KICAgICAgICAgIDwvZmFjZXRzLWRpdmUtaW5mby1jYXJkPgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT4KCjxzY3JpcHQ+Ly9+fldFQlBBVEh+fi9mYWNldHMtZGl2ZS9jb21wb25lbnRzL2ZhY2V0cy1kaXZlL2ZhY2V0cy1kaXZlLmpzClBvbHltZXIoe2lzOiJmYWNldHMtZGl2ZSIscHJvcGVydGllczp7ZGF0YTp7dHlwZTpBcnJheSx2YWx1ZTpudWxsLG5vdGlmeTohMH0sZmlsdGVyZWREYXRhSW5kaWNlczp7dHlwZTpBcnJheSx2YWx1ZTpudWxsfSxfa2V5czp7dHlwZTpBcnJheSx2YWx1ZTpbXX0sc3RhdHM6e3R5cGU6T2JqZWN0LHZhbHVlOnt9LG5vdGlmeTohMH0sYXRsYXNVcmw6e3R5cGU6U3RyaW5nLHZhbHVlOm51bGwsbm90aWZ5OiEwfSxzcHJpdGVVcmw6e3R5cGU6U3RyaW5nLHZhbHVlOm51bGwsbm90aWZ5OiEwfSxjcm9zc09yaWdpbjp7dHlwZTpTdHJpbmcsdmFsdWU6bnVsbCxub3RpZnk6ITB9LHNwcml0ZUltYWdlV2lkdGg6e3R5cGU6TnVtYmVyLHZhbHVlOjY0fSxzcHJpdGVJbWFnZUhlaWdodDp7dHlwZTpOdW1iZXIsdmFsdWU6NjR9LGdyaWRGYWNldGluZ1ZlcnRpY2FsTGFiZWxDb2xvcjp7dHlwZTpTdHJpbmcsdmFsdWU6IiM2NjY2NjYifSxncmlkRmFjZXRpbmdIb3Jpem9udGFsTGFiZWxDb2xvcjp7dHlwZTpTdHJpbmcsCnZhbHVlOiIjZGQ2NjIyIn0saXRlbVBvc2l0aW9uaW5nVmVydGljYWxMYWJlbENvbG9yOnt0eXBlOlN0cmluZyx2YWx1ZToiIzIyNTVhYSJ9LGl0ZW1Qb3NpdGlvbmluZ0hvcml6b250YWxMYWJlbENvbG9yOnt0eXBlOlN0cmluZyx2YWx1ZToiIzExODg0NCJ9LGZpdEdyaWRBc3BlY3RSYXRpb1RvVmlld3BvcnQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sdmVydGljYWxGYWNldDp7dHlwZTpTdHJpbmcsdmFsdWU6IiIsbm90aWZ5OiEwfSx2ZXJ0aWNhbEJ1Y2tldHM6e3R5cGU6TnVtYmVyLHZhbHVlOjEwLG5vdGlmeTohMH0sdmVydGljYWxCYWdPZldvcmRzOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEsbm90aWZ5OiEwfSxob3Jpem9udGFsRmFjZXQ6e3R5cGU6U3RyaW5nLHZhbHVlOiIiLG5vdGlmeTohMH0saG9yaXpvbnRhbEJ1Y2tldHM6e3R5cGU6TnVtYmVyLHZhbHVlOjEwLG5vdGlmeTohMH0saG9yaXpvbnRhbEJhZ09mV29yZHM6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxub3RpZnk6ITB9LApwb3NpdGlvbk1vZGU6e3R5cGU6U3RyaW5nLHZhbHVlOiJzdGFja2VkIixub3RpZnk6ITB9LHZlcnRpY2FsUG9zaXRpb246e3R5cGU6U3RyaW5nLHZhbHVlOiIiLG5vdGlmeTohMH0saG9yaXpvbnRhbFBvc2l0aW9uOnt0eXBlOlN0cmluZyx2YWx1ZToiIixub3RpZnk6ITB9LGNvbG9yQnk6e3R5cGU6U3RyaW5nLHZhbHVlOiIiLG5vdGlmeTohMH0saW1hZ2VGaWVsZE5hbWU6e3R5cGU6U3RyaW5nLHZhbHVlOiIiLG5vdGlmeTohMH0sX3BhbGV0dGU6e3R5cGU6QXJyYXksdmFsdWU6W119LHBhbGV0dGVDaG9pY2U6e3R5cGU6U3RyaW5nLHZhbHVlOiJzdGFuZGFyZCIsbm90aWZ5OiEwfSxzZWxlY3RlZERhdGE6e3R5cGU6QXJyYXksdmFsdWU6W10sbm90aWZ5OiEwfSxzZWxlY3RlZEluZGljZXM6e3R5cGU6QXJyYXksdmFsdWU6W10sbm90aWZ5OiEwfSxjb21wYXJlZERhdGE6e3R5cGU6QXJyYXksdmFsdWU6W10sbm90aWZ5OiEwfSxjb21wYXJlZEluZGljZXM6e3R5cGU6QXJyYXksdmFsdWU6W10sCm5vdGlmeTohMH0saGVpZ2h0Ont0eXBlOk51bWJlcix2YWx1ZTpudWxsLG9ic2VydmVyOiJfdXBkYXRlSGVpZ2h0In0saW5mb1JlbmRlcmVyOnt0eXBlOk9iamVjdH0saGlkZUluZm9DYXJkOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LHN0YWJsZUNvbG9yczp7dHlwZTpCb29sZWFuLHZhbHVlOiExfX0scmVhZHkoKXtjb25zdCBhPXRoaXMuJDthLmZpdEJ1dHRvbi5vbmNsaWNrPSgpPT5hLnZpcy5maXRUb1ZpZXdwb3J0KCk7YS56b29tSW5CdXR0b24ub25jbGljaz0oKT0+YS52aXMuem9vbUluKCk7YS56b29tT3V0QnV0dG9uLm9uY2xpY2s9KCk9PmEudmlzLnpvb21PdXQoKTt0aGlzLmhpZGVJbmZvQ2FyZCYmKGEudmlzLnN0eWxlLnJpZ2h0PSIwIik7dGhpcy5fdXBkYXRlSGVpZ2h0KCl9LF91cGRhdGVIZWlnaHQoKXtudWxsIT09dGhpcy5oZWlnaHQmJih0aGlzLnN0eWxlLmhlaWdodD0ibnVtYmVyIj09PXR5cGVvZiB0aGlzLmhlaWdodD90aGlzLmhlaWdodCsicHgiOnRoaXMuaGVpZ2h0KX19KTsKPC9zY3JpcHQ+CgoKCgoKCgoKCjxzY3JpcHQ+Ly9+fldFQlBBVEh+fi9mYWNldHMtb3ZlcnZpZXcvY29tbW9uL2ZlYXR1cmVfc3RhdGlzdGljc19nZW5lcmF0b3IuanMKY2xhc3MgeG57Y29uc3RydWN0b3IoKXt0aGlzLnZhbHM9W107dGhpcy5jb3VudHM9W119fWZ1bmN0aW9uIHluKGEpe2NvbnN0IGM9bmV3IHBpO2EuZm9yRWFjaChkPT57Y29uc3QgZj16bihkLmRhdGEpO2Yuc2V0TmFtZShkLm5hbWUpO2MuZ2V0RGF0YXNldHNMaXN0KCkucHVzaChmKX0pO3JldHVybiBjfQpmdW5jdGlvbiB6bihhKXtjb25zdCBjPXt9O2lmKG51bGw9PWEpcmV0dXJuIG5ldyBsajthLmZvckVhY2goKGQsZik9PntpZihudWxsIT1kKXt2YXIgZz1PYmplY3Qua2V5cyhkKSxsPXt9O2ZvcihsZXQgaz0wO2s8Zy5sZW5ndGg7aysrKXtjb25zdCBtPWdba10scD1kW21dO2xbbV09ITA7bSBpbiBjfHwoY1ttXT1uZXcgeG4sY1ttXS5taXNzaW5nPWYsY1ttXS5jb3VudHM9W10pOyJudW1iZXIiPT09dHlwZW9mIHB8fCJzdHJpbmciPT09dHlwZW9mIHA/KGNbbV0udmFscy5wdXNoKHApLGNbbV0uY291bnRzLnB1c2goMSkpOnAgaW5zdGFuY2VvZiBBcnJheSYmKGNbbV0uY291bnRzLnB1c2gocC5sZW5ndGgpLGNbbV0udmFscy5wdXNoKC4uLnApKX1PYmplY3Qua2V5cyhjKS5mb3JFYWNoKGs9PntrIGluIGx8fChjW2tdLm1pc3NpbmcrPTEpfSl9fSk7T2JqZWN0LmtleXMoYykuZm9yRWFjaChkPT57bGV0IGY9MCxnPTAsbD0hMTtjW2RdLnZhbHMuZm9yRWFjaChrPT57InN0cmluZyI9PT0KdHlwZW9mIGs/Zis9MTooZys9MSxsPWx8fCFBbihrKSl9KTtjW2RdLnR5cGU9Zz5mP2w/MTowOjJ9KTtyZXR1cm4gQm4oYyxhLmxlbmd0aCl9ZnVuY3Rpb24gQW4oYSl7cmV0dXJuIGE9PT0rYSYmYT09PShhfDApfWZ1bmN0aW9uIEJuKGEsYyl7Y29uc3QgZD1uZXcgbGo7ZC5zZXROdW1FeGFtcGxlcyhjKTtmb3IoY29uc3QgZiBpbiBhKXtpZighYS5oYXNPd25Qcm9wZXJ0eShmKSljb250aW51ZTtjb25zdCBnPW5ldyBuajtkLmdldEZlYXR1cmVzTGlzdCgpLnB1c2goZyk7Y29uc3QgbD1hW2ZdO2cuc2V0TmFtZShmKTtnLnNldFR5cGUobC50eXBlKTsxPT09bC50eXBlfHwwPT09bC50eXBlP2cuc2V0TnVtU3RhdHMoQ24obC52YWxzLGwuY291bnRzLGMsbC5taXNzaW5nKSk6Mj09PWwudHlwZSYmZy5zZXRTdHJpbmdTdGF0cyhEbihsLnZhbHMsbC5jb3VudHMsYyxsLm1pc3NpbmcpKX1yZXR1cm4gZH0KZnVuY3Rpb24gQ24oYSxjLGQsZil7Y29uc3QgZz1uZXcgdGo7Zy5zZXRDb21tb25TdGF0cyhFbihjLGQsZikpO2xldCBsPTAsaz0wLG09MDtjPWEuZmlsdGVyKHQ9PiJudW1iZXIiPT09dHlwZW9mIHQmJiFpc05hTih0KSkubWFwKHQ9Pit0KS5zb3J0KCh0LHYpPT50LXYpOzA8Yy5sZW5ndGgmJihnLnNldE1pbihjWzBdKSxnLnNldE1heChjW2MubGVuZ3RoLTFdKSxkPU1hdGguZmxvb3IoYy5sZW5ndGgvMiksZy5zZXRNZWRpYW4oMCE9PWMubGVuZ3RoJTI/Y1tkXTooY1tkXStjW2QtMV0pLzIpKTtjLmZvckVhY2godD0+ezA9PT10JiYobSs9MSk7bCs9dDtrKz10KnR9KTsxPGMubGVuZ3RoJiZnLnNldFN0ZERldihNYXRoLnNxcnQoKGstbCpsL2MubGVuZ3RoKS8oYy5sZW5ndGgtMSkpKTtnLnNldE1lYW4obC9hLmxlbmd0aCk7Zy5zZXROdW1aZXJvcyhtKTthPWMuZmlsdGVyKHQ9PkluZmluaXR5IT09dCYmLUluZmluaXR5IT09dCk7ZD1jLmZpbHRlcih0PT5JbmZpbml0eT09PXQpLmxlbmd0aDsKZj1jLmZpbHRlcih0PT4tSW5maW5pdHk9PT10KS5sZW5ndGg7dmFyIHA9YVswXTtjb25zdCBxPWFbYS5sZW5ndGgtMV07cD1kMy5yYW5nZShwLHEsKHEtcCkvMTApO3A9ZDMuaGlzdG9ncmFtKCkudGhyZXNob2xkcyhwKShhKTtsZXQgcj1nLmFkZEhpc3RvZ3JhbXMoKTtyLnNldFR5cGUoMCk7cC5mb3JFYWNoKHQ9Pntjb25zdCB2PXIuYWRkQnVja2V0cygpO3Yuc2V0U2FtcGxlQ291bnQodC5sZW5ndGgpO3Yuc2V0TG93VmFsdWUodC54MCk7di5zZXRIaWdoVmFsdWUodC54MSl9KTtwPXIuZ2V0QnVja2V0c0xpc3QoKTtjLmxlbmd0aCYmLUluZmluaXR5PT09Y1swXSYmKHBbMF0uc2V0TG93VmFsdWUoLUluZmluaXR5KSxwWzBdLnNldFNhbXBsZUNvdW50KHBbMF0uZ2V0U2FtcGxlQ291bnQoKStmKSk7Yy5sZW5ndGgmJkluZmluaXR5PT09Y1tjLmxlbmd0aC0xXSYmKHBbcC5sZW5ndGgtMV0uc2V0SGlnaFZhbHVlKEluZmluaXR5KSxwW3AubGVuZ3RoLTFdLnNldFNhbXBsZUNvdW50KHBbcC5sZW5ndGgtCjFdLmdldFNhbXBsZUNvdW50KCkrZCkpO3I9Zy5hZGRIaXN0b2dyYW1zKCk7Rm4ocixhKTtyZXR1cm4gZ31mdW5jdGlvbiBGbihhLGMpe3ZhciBkPVswLDEwLDIwLDMwLDQwLDUwLDYwLDcwLDgwLDkwLDEwMF07Y29uc3QgZj1kLmxlbmd0aC0xO2Q9ZC5tYXAobD0+R24oYyxsKSk7YS5zZXRUeXBlKDEpO2NvbnN0IGc9Yy5sZW5ndGgvZjtmb3IobGV0IGw9MDtsPGY7bCsrKXtjb25zdCBrPWEuYWRkQnVja2V0cygpO2suc2V0U2FtcGxlQ291bnQoZyk7ay5zZXRMb3dWYWx1ZShkW2xdKTtrLnNldEhpZ2hWYWx1ZShkW2wrMV0pfX1mdW5jdGlvbiBHbihhLGMpe2lmKDA9PT1hLmxlbmd0aClyZXR1cm4gTmFOO2M9Yy8xMDAqKGEubGVuZ3RoLTEpO2NvbnN0IGQ9TWF0aC5mbG9vcihjKTtyZXR1cm4gZD09PWM/YVtjXTphW2RdKyhhW2QrMV0tYVtkXSkqKGMtZCl9CmZ1bmN0aW9uIERuKGEsYyxkLGYpe2NvbnN0IGc9bmV3IHZqO2cuc2V0Q29tbW9uU3RhdHMoRW4oYyxkLGYpKTtsZXQgbD0wO2NvbnN0IGs9e307YS5mb3JFYWNoKHE9PntxPVN0cmluZyhxKTtrW3FdPShrW3FdfHwwKSsxO2wrPXEubGVuZ3RofSk7MDxhLmxlbmd0aCYmZy5zZXRBdmdMZW5ndGgobC9hLmxlbmd0aCk7YT1bXTtmb3IodmFyIG0gaW4gaylrLmhhc093blByb3BlcnR5KG0pJiZhLnB1c2goe3N0cjptLGNvdW50OmtbbV19KTtnLnNldFVuaXF1ZShhLmxlbmd0aCk7YT1hLnNvcnQoKHEscik9PnIuY291bnQtcS5jb3VudCk7Y29uc3QgcD1uZXcgSWo7Zy5zZXRSYW5rSGlzdG9ncmFtKHApO2EubGVuZ3RoJiYobT1nLmFkZFRvcFZhbHVlcygpLG0uc2V0VmFsdWUoYVswXS5zdHIpLG0uc2V0RnJlcXVlbmN5KGFbMF0uY291bnQpKTthLmZvckVhY2goKHEscik9Pntjb25zdCB0PXAuYWRkQnVja2V0cygpO3Quc2V0U2FtcGxlQ291bnQocS5jb3VudCk7dC5zZXRMb3dSYW5rKHIpOwp0LnNldEhpZ2hSYW5rKHIpO3Quc2V0TGFiZWwocS5zdHIpfSk7cmV0dXJuIGd9ZnVuY3Rpb24gRW4oYSxjLGQpe2NvbnN0IGY9bmV3IEVqO2xldCBnPUluZmluaXR5LGw9MCxrPTA7YS5mb3JFYWNoKG09PnttPGcmJihnPW0pO20+bCYmKGw9bSk7ays9bX0pO2Yuc2V0TnVtTm9uTWlzc2luZyhjLWQpO2Yuc2V0TnVtTWlzc2luZyhkKTtmLnNldE1pbk51bVZhbHVlcyhnKTtmLnNldE1heE51bVZhbHVlcyhsKTswPGEubGVuZ3RoJiZmLnNldEF2Z051bVZhbHVlcyhrL2EubGVuZ3RoKTtjPW5ldyBGajtmLnNldE51bVZhbHVlc0hpc3RvZ3JhbShjKTtGbihjLGEpO3JldHVybiBmfTsKPC9zY3JpcHQ+CjxzY3JpcHQ+Ly9+fldFQlBBVEh+fi9mYWNldHMtb3ZlcnZpZXcvY29tbW9uL3V0aWxzLmpzCmNsYXNzIEhue31jbGFzcyBJbntjb25zdHJ1Y3RvcihhLGMsZCxmLGcsbCxrLG0pe3RoaXMuaGlzdE1hcD17fTt0aGlzLm5hbWU9YTtjJiYodGhpcy5oaXN0TWFwW0puKCExLCJTdGFuZGFyZCIpXT1jKTtkJiYodGhpcy5oaXN0TWFwW0puKCEwLCJTdGFuZGFyZCIpXT1kKTtmJiYodGhpcy5oaXN0TWFwW0puKCExLCJRdWFudGlsZXMiKV09Zik7ZyYmKHRoaXMuaGlzdE1hcFtKbighMCwiUXVhbnRpbGVzIildPWcpO2wmJih0aGlzLmhpc3RNYXBbSm4oITEsIlZhbHVlIGxpc3QgbGVuZ3RoIildPWwpO2smJih0aGlzLmhpc3RNYXBbSm4oITEsIkZlYXR1cmUgbGlzdCBsZW5ndGgiKV09ayk7bSYmT2JqZWN0LmtleXMobSkuZm9yRWFjaChwPT50aGlzLmhpc3RNYXBbcF09bVtwXSl9fQpjbGFzcyBxcHtjb25zdHJ1Y3RvcihhLGMsZCxmKXt0aGlzLm5hbWU9YTt0aGlzLnN0cmluZ1ZhbHVlPWM7dGhpcy5sb3dOdW1WYWx1ZT1kO3RoaXMuaGlnaE51bVZhbHVlPWZ9Y2xlYXIoKXt0aGlzLmhpZ2hOdW1WYWx1ZT10aGlzLmxvd051bVZhbHVlPXRoaXMuc3RyaW5nVmFsdWU9dGhpcy5uYW1lPXZvaWQgMH1lcXVhbHMoYSl7cmV0dXJuIGE/dGhpcy5uYW1lPT09YS5uYW1lJiZ0aGlzLnN0cmluZ1ZhbHVlPT09YS5zdHJpbmdWYWx1ZSYmdGhpcy5sb3dOdW1WYWx1ZT09PWEubG93TnVtVmFsdWUmJnRoaXMuaGlnaE51bVZhbHVlPT09YS5oaWdoTnVtVmFsdWU6ITF9fQpmdW5jdGlvbiBycChhKXtjb25zdCBjPXNwKGEpO2lmKDA9PT1jKXJldHVybiAwO2NvbnN0IGQ9YS5yZWR1Y2UoKGYsZyk9PntnPStnLmdldFNhbXBsZUNvdW50KCl8fDA7aWYoMD09PWcpcmV0dXJuIGY7Zy89YztyZXR1cm4gZi1nKk1hdGgubG9nKGcpfSwwKTtyZXR1cm4gMD09PWQ/MDpkL01hdGgubG9nKGEubGVuZ3RoKX1mdW5jdGlvbiB0cChhLGMpe3JldHVybiBpc0Zpbml0ZShhKSYmLTE9PT1hLnRvU3RyaW5nKCkuaW5kZXhPZigiZSIpPysoTWF0aC5yb3VuZChOdW1iZXIoYSsiZSsiK2MpKSsiZS0iK2MpOmF9ZnVuY3Rpb24gdXAoYSxjLGQpe3JldHVybihhPWEuaGlzdE1hcFtKbihjLGQpXSk/YS5nZXRCdWNrZXRzTGlzdCgpOltdfWZ1bmN0aW9uIEpuKGEsYyl7Yz1udWxsPT1jPyJTdGFuZGFyZCI6YzthJiYoYz0id2VpZ2h0ZWQiK2MpO3JldHVybiBjfQpmdW5jdGlvbiBzcChhKXtyZXR1cm4gYS5tYXAoYz0+Yy5nZXRTYW1wbGVDb3VudCgpKS5yZWR1Y2UoKGMsZCk9PigrZHx8MCkrYywwKX1mdW5jdGlvbiB2cChhKXtyZXR1cm4gYS5tYXAoYz0+c3AodXAoYywhMSkpKX1mdW5jdGlvbiB3cChhKXtjb25zdCBjPVtdO2EuZm9yRWFjaChkPT57ZC5mb3JFYWNoKGY9PntmPXhwKGYuZ2V0TGFiZWwoKSk7LTE9PT1jLmluZGV4T2YoZikmJmMucHVzaChmKX0pfSk7cmV0dXJuIGN9ZnVuY3Rpb24geHAoYSl7cmV0dXJuIG51bGw9PWF8fCIiPT09YT8iXHUwMGEwIjphfWZ1bmN0aW9uIHlwKGEpe3JldHVybiAwPT09YS5sZW5ndGh8fGlzTmFOKCthKT9hOiciJythKyciJ31mdW5jdGlvbiB6cChhKXtyZXR1cm4gbnVsbD09YT8wOiJpbmYiPT09YT9JbmZpbml0eToiLWluZiI9PT1hPy1JbmZpbml0eTorYX0KZnVuY3Rpb24gQXAoYSl7bGV0IGM9MDt2YXIgZD0wO2NvbnN0IGY9QnAoYSk7YSYmYS5nZXROdW1TdGF0cygpJiYoYT1hLmdldE51bVN0YXRzKCksYys9enAoYS5nZXROdW1aZXJvcygpKSk7ZiYmKGQ9enAoZi5nZXROdW1NaXNzaW5nKCkpLGMrPWQsZD16cChmLmdldE51bU5vbk1pc3NpbmcoKSkrZCk7cmV0dXJuIDA9PT1kPzE6Yy9kfQpmdW5jdGlvbiBDcChhKXtjb25zdCBjPWEubWFwKEE9PnVwKEEsITEpKTt2YXIgZD1udWxsO2Zvcih2YXIgZj0wO2Y8Yy5sZW5ndGg7ZisrKWlmKDA8Y1tmXS5sZW5ndGgpe2Q9Y1tmXVswXTticmVha31pZighZClyZXR1cm4gMDtmPXZwKGEpO2Zvcih2YXIgZz0wO2c8Zi5sZW5ndGg7ZysrKWlmKDA9PT1mW2ddKXJldHVybiBJbmZpbml0eTtnPTA7aWYoZCBpbnN0YW5jZW9mIEtqKXtkPXdwKGMpO2Zvcih2YXIgbD0xO2w8YS5sZW5ndGg7bCsrKXt2YXIgaz1jWzBdLG09Y1tsXSxwPTA7Zm9yKHZhciBxPTA7cTxkLmxlbmd0aDtxKyspe3ZhciByPWRbcV0sdD0wO2xldCBBPTA7Zm9yKHZhciB2PTA7djxrLmxlbmd0aDt2KyspaWYoa1t2XS5nZXRMYWJlbCgpPT09cil7dD1rW3ZdLmdldFNhbXBsZUNvdW50KCk/a1t2XS5nZXRTYW1wbGVDb3VudCgpOjA7YnJlYWt9Zm9yKHY9MDt2PG0ubGVuZ3RoO3YrKylpZihtW3ZdLmdldExhYmVsKCk9PT1yKXtBPW1bdl0uZ2V0U2FtcGxlQ291bnQoKT8KbVt2XS5nZXRTYW1wbGVDb3VudCgpOjA7YnJlYWt9cD1EcChwLHQsZlswXSxBLGZbbF0pfWc9TWF0aC5tYXgoZyxwKX19ZWxzZSBmb3IoZD0xO2Q8YS5sZW5ndGg7ZCsrKXtsPWNbMF07az1jW2RdO209MDtwPU1hdGgubWF4KGwubGVuZ3RoLGsubGVuZ3RoKTtmb3IocT0wO3E8cDtxKyspcj1xPGwubGVuZ3RoJiZsW3FdLmdldFNhbXBsZUNvdW50KCk/bFtxXS5nZXRTYW1wbGVDb3VudCgpOjAsdD1xPGsubGVuZ3RoJiZrW3FdLmdldFNhbXBsZUNvdW50KCk/a1txXS5nZXRTYW1wbGVDb3VudCgpOjAsbT1EcChtLHIsZlswXSx0LGZbZF0pO2c9TWF0aC5tYXgoZyxtKX1yZXR1cm4gZ31mdW5jdGlvbiBEcChhLGMsZCxmLGcpe2NvbnN0IGw9Yy9kLWYvZztjPWMvKGQqZCkrZi8oZypnKTtyZXR1cm4gYSsoYz9sKmwvYzowKX1mdW5jdGlvbiBFcChhLGMpe3JldHVybiBjPT09YT9jLnRvTG9jYWxlU3RyaW5nKCk6YS50b0xvY2FsZVN0cmluZygpKyIvIitjLnRvTG9jYWxlU3RyaW5nKCl9CmZ1bmN0aW9uIEZwKGEpe3JldHVybiBudWxsIT1hLmdldE51bVN0YXRzKCl9CmZ1bmN0aW9uIEdwKGEpe2EuZ2V0RGF0YXNldHNMaXN0KCkuZm9yRWFjaChjPT57Yy5nZXRGZWF0dXJlc0xpc3QoKS5mb3JFYWNoKGQ9Pnt2YXIgZj1kLmdldFBhdGgoKTtudWxsIT1mJiYoZj1mLmdldFN0ZXBMaXN0KCksbnVsbCE9ZiYmZC5zZXROYW1lKGYuam9pbigiLyIpKSk7Zj1bXTtpZihkLmdldFN0cmluZ1N0YXRzKCkpe2NvbnN0IGc9ZC5nZXRTdHJpbmdTdGF0cygpLmdldFJhbmtIaXN0b2dyYW0oKTtnJiZmLnB1c2goZyk7KGQ9ZC5nZXRTdHJpbmdTdGF0cygpLmdldFRvcFZhbHVlc0xpc3QoKSkmJmQuZm9yRWFjaChsPT57Y29uc3Qgaz1sLmdldERlcHJlY2F0ZWRGcmVxKCk7ayYmIWwuZ2V0RnJlcXVlbmN5KCkmJmwuc2V0RnJlcXVlbmN5KGspfSl9ZWxzZSBkLmdldE51bVN0YXRzKCkmJihkPWQuZ2V0TnVtU3RhdHMoKS5nZXRIaXN0b2dyYW1zTGlzdCgpKSYmKGY9Zi5jb25jYXQoZCkpO2YuZm9yRWFjaChnPT57KGc9Zy5nZXRCdWNrZXRzTGlzdCgpKSYmZy5mb3JFYWNoKGw9Pgp7Y29uc3Qgaz1sLmdldERlcHJlY2F0ZWRDb3VudCgpO2smJiFsLmdldFNhbXBsZUNvdW50KCkmJmwuc2V0U2FtcGxlQ291bnQoayl9KX0pfSl9KTtyZXR1cm4gYX0KZnVuY3Rpb24gSHAoYSl7bGV0IGM9ITA7YS5nZXREYXRhc2V0c0xpc3QoKS5mb3JFYWNoKGQ9PntkLmdldEZlYXR1cmVzTGlzdCgpLmZvckVhY2goZj0+e2xldCBnPVtdO2lmKGYuZ2V0U3RyaW5nU3RhdHMoKSl7Y29uc3QgbD1mLmdldFN0cmluZ1N0YXRzKCkuZ2V0UmFua0hpc3RvZ3JhbSgpO2wmJmcucHVzaChsKTsoZj1mLmdldFN0cmluZ1N0YXRzKCkuZ2V0VG9wVmFsdWVzTGlzdCgpKSYmZi5mb3JFYWNoKGs9PntrLmdldERlcHJlY2F0ZWRGcmVxKCkmJiFrLmdldEZyZXF1ZW5jeSgpJiYoYz0hMSl9KX1lbHNlIGYuZ2V0TnVtU3RhdHMoKSYmKGY9Zi5nZXROdW1TdGF0cygpLmdldEhpc3RvZ3JhbXNMaXN0KCkpJiYoZz1nLmNvbmNhdChmKSk7Zy5mb3JFYWNoKGw9PnsobD1sLmdldEJ1Y2tldHNMaXN0KCkpJiZsLmZvckVhY2goaz0+e2suZ2V0RGVwcmVjYXRlZENvdW50KCkmJiFrLmdldFNhbXBsZUNvdW50KCkmJihjPSExKX0pfSl9KX0pO3JldHVybiBjfQpmdW5jdGlvbiBJcChhKXtmb3IobGV0IGM9MDtjPGEuZ2V0RGF0YXNldHNMaXN0KCkubGVuZ3RoO2MrKyl7Y29uc3QgZD1hLmdldERhdGFzZXRzTGlzdCgpW2NdO2ZvcihsZXQgZj0wO2Y8ZC5nZXRGZWF0dXJlc0xpc3QoKS5sZW5ndGg7ZisrKXtjb25zdCBnPWQuZ2V0RmVhdHVyZXNMaXN0KClbZl07aWYoZy5nZXRTdHJpbmdTdGF0cygpKXtpZihnLmdldFN0cmluZ1N0YXRzKCkuZ2V0V2VpZ2h0ZWRTdHJpbmdTdGF0cygpKXJldHVybiEwfWVsc2UgaWYoZy5nZXROdW1TdGF0cygpJiZnLmdldE51bVN0YXRzKCkuZ2V0V2VpZ2h0ZWROdW1lcmljU3RhdHMoKSlyZXR1cm4hMH19cmV0dXJuITF9CmZ1bmN0aW9uIEpwKGEpe2ZvcihsZXQgYz0wO2M8YS5nZXREYXRhc2V0c0xpc3QoKS5sZW5ndGg7YysrKXtjb25zdCBkPWEuZ2V0RGF0YXNldHNMaXN0KClbY107Zm9yKGxldCBmPTA7ZjxkLmdldEZlYXR1cmVzTGlzdCgpLmxlbmd0aDtmKyspe2NvbnN0IGc9ZC5nZXRGZWF0dXJlc0xpc3QoKVtmXS5nZXRDdXN0b21TdGF0c0xpc3QoKTtpZihudWxsIT1nJiYwPGcubGVuZ3RoKXJldHVybiEwfX1yZXR1cm4hMX1mdW5jdGlvbiBLcChhKXtmb3IobGV0IGQ9MDtkPGEuZ2V0RGF0YXNldHNMaXN0KCkubGVuZ3RoO2QrKyl7Y29uc3QgZj1hLmdldERhdGFzZXRzTGlzdCgpW2RdO2ZvcihsZXQgZz0wO2c8Zi5nZXRGZWF0dXJlc0xpc3QoKS5sZW5ndGg7ZysrKXt2YXIgYz1mLmdldEZlYXR1cmVzTGlzdCgpW2ddO2lmKChjPUJwKGMpKSYmYy5nZXRGZWF0dXJlTGlzdExlbmd0aEhpc3RvZ3JhbSgpKXJldHVybiEwfX1yZXR1cm4hMX0KZnVuY3Rpb24gTHAoYSl7aWYoIWEpcmV0dXJuITE7Zm9yKGxldCBjPTA7YzxhLmxlbmd0aDtjKyspaWYoYVtjXS5oaXN0TWFwW0puKCEwLCJTdGFuZGFyZCIpXSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBNcChhKXtpZighYSlyZXR1cm4hMTtmb3IobGV0IGM9MDtjPGEubGVuZ3RoO2MrKylpZihhW2NdLmhpc3RNYXAuUXVhbnRpbGVzKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIE5wKGEpe2lmKCFhKXJldHVybiExO2ZvcihsZXQgYz0wO2M8YS5sZW5ndGg7YysrKWlmKGFbY10uaGlzdE1hcFsiVmFsdWUgbGlzdCBsZW5ndGgiXSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBPcChhKXtyZXR1cm4gYT9hLmdldE51bU5vbk1pc3NpbmcoKSphLmdldEF2Z051bVZhbHVlcygpOjB9CmZ1bmN0aW9uIFBwKGEpe3N3aXRjaChhKXtjYXNlIDA6cmV0dXJuImludCI7Y2FzZSAxOnJldHVybiJmaXhlZC1sZW5ndGggaW50cyI7Y2FzZSAyOnJldHVybiJ2YXJpYWJsZS1sZW5ndGggaW50cyI7Y2FzZSAzOnJldHVybiJmbG9hdCI7Y2FzZSA0OnJldHVybiJmaXhlZC1sZW5ndGggZmxvYXRzIjtjYXNlIDU6cmV0dXJuInZhcmlhYmxlLWxlbmd0aCBmbG9hdHMiO2Nhc2UgNjpyZXR1cm4ic3RyaW5nIjtjYXNlIDc6cmV0dXJuImZpeGVkLWxlbmd0aCBzdHJpbmdzIjtjYXNlIDg6cmV0dXJuInZhcmlhYmxlLWxlbmd0aCBzdHJpbmdzIjtjYXNlIDk6cmV0dXJuImJ5dGVzIjtjYXNlIDEwOnJldHVybiJmaXhlZC1sZW5ndGggYnl0ZXMiO2Nhc2UgMTE6cmV0dXJuInZhcmlhYmxlLWxlbmd0aCBieXRlcyI7Y2FzZSAxMjpyZXR1cm4ic3RydWN0IjtjYXNlIDEzOnJldHVybiJmaXhlZC1sZW5ndGggc3RydWN0IjtjYXNlIDE0OnJldHVybiJ2YXJpYWJsZS1sZW5ndGggc3RydWN0IjtkZWZhdWx0OnJldHVybiJ1bmtub3duIn19CmZ1bmN0aW9uIFFwKGEsYyl7cmV0dXJuIDE1PT09YT9jOjE2PD1hfHwxNT09PWM/YTozPD1hJiY1Pj1hJiYzPD1jJiY1Pj1jfHwwPD1hJiYyPj1hJiYwPD1jJiYyPj1jfHw2PD1hJiY4Pj1hJiY2PD1jJiY4Pj1jfHw5PD1hJiYxMT49YSYmOTw9YyYmMTE+PWN8fDEyPD1hJiYxND49YSYmMTI8PWMmJjE0Pj1jP01hdGgubWF4KGEsYyk6MTZ9ZnVuY3Rpb24gUnAoYSxjKXt2YXIgZD0xNTtpZihudWxsIT1jJiYwIT09Yy5nZXROdW1Ob25NaXNzaW5nKCkpe2xldCBmPWQ9ITE7Yy5nZXRNaW5OdW1WYWx1ZXMoKT09PWMuZ2V0TWF4TnVtVmFsdWVzKCkmJigxPT09Yy5nZXRNaW5OdW1WYWx1ZXMoKT9kPSEwOmY9ITApO2Q9MT09PWE/ZD8zOmY/NDo1OjA9PT1hP2Q/MDpmPzE6MjoyPT09YT9kPzY6Zj83Ojg6Mz09PWE/ZD85OmY/MTA6MTE6ZD8xMjpmPzEzOjE0fXJldHVybiBkfWNsYXNzIFNwe31jbGFzcyBUcHt9Y2xhc3MgVXB7fQpmdW5jdGlvbiBWcChhKXtsZXQgYz0wLGQ9MDtmb3IodmFyIGY9MDtmPGEubGVuZ3RoO2YrKylhW2ZdLnJhd0J1Y2tldHMubGVuZ3RoPmMmJihjPWFbZl0ucmF3QnVja2V0cy5sZW5ndGgsZD1mKTtmPVtdO2ZvcihsZXQgZz0wO2c8YztnKyspe2NvbnN0IGw9bmV3IFVwO2wudmFsdWU9YVtkXS5yYXdCdWNrZXRzW2ddLmdldExhYmVsKCk7bC5jb3VudHM9W107Zm9yKGxldCBrPTA7azxhLmxlbmd0aDtrKyspYVtrXS5yYXdCdWNrZXRzLmxlbmd0aDw9Zz9sLmNvdW50cy5wdXNoKDApOmwuY291bnRzLnB1c2goYVtrXS5yYXdCdWNrZXRzW2ddLmdldFNhbXBsZUNvdW50KCkpO2YucHVzaChsKX1yZXR1cm4gZn0KZnVuY3Rpb24gV3AoYSxjKXtjb25zdCBkPVtdO2ZvcihsZXQgZj0wO2Y8Yy5sZW5ndGg7ZisrKXtjb25zdCBnPW5ldyBVcCxsPWNbZl07Zy52YWx1ZT1sO2cuY291bnRzPVtdO2ZvcihsZXQgaz0wO2s8YS5sZW5ndGg7aysrKXtjb25zdCBtPWFba10ucmF3QnVja2V0cztsZXQgcD0tMTtmb3IobGV0IHE9MDtxPG0ubGVuZ3RoO3ErKylpZihtW3FdLmdldExhYmVsKCk9PT1sKXtwPXE7YnJlYWt9LTE9PT1wP2cuY291bnRzLnB1c2goMCk6Zy5jb3VudHMucHVzaChtW3BdLmdldFNhbXBsZUNvdW50KCkpfWQucHVzaChnKX1yZXR1cm4gZH12YXIgWHA7KGZ1bmN0aW9uKGEpe2FbYS5ISVNUT0dSQU09MF09IkhJU1RPR1JBTSI7YVthLkJBUl9DSEFSVD0xXT0iQkFSX0NIQVJUIjthW2EuQ1VNRElTVF9DSEFSVD0yXT0iQ1VNRElTVF9DSEFSVCJ9KShYcHx8KFhwPXt9KSk7CmZ1bmN0aW9uIFlwKGEpe3JldHVybiJRdWFudGlsZXMiPT09YXx8IlZhbHVlIGxpc3QgbGVuZ3RoIj09PWF8fCJGZWF0dXJlIGxpc3QgbGVuZ3RoIj09PWF9ZnVuY3Rpb24gWnAoYSxjLGQpe2xldCBmPSEwLGc9MDthLmZvckVhY2gobD0+e2wuaGlzdE1hcFtjXSYmKGw9bC5oaXN0TWFwW2NdLmdldEJ1Y2tldHNMaXN0KCksZz1NYXRoLm1heChnLGwubGVuZ3RoKSxsLmZvckVhY2goaz0+e2suZ2V0TG93VmFsdWV8fChmPSExKX0pKX0pO3JldHVybiBmP1hwLkhJU1RPR1JBTTpnPmQ/WHAuQ1VNRElTVF9DSEFSVDpYcC5CQVJfQ0hBUlR9CmNsYXNzICRwe2NvbnN0cnVjdG9yKGEsYyxkKXt0aGlzLnN0cj1hO3RoaXMuY3NzQ2xhc3M9Yzt0aGlzLmZ1bGxTdHI9ZDt0aGlzLmZ1bGxTdHJ8fCh0aGlzLmZ1bGxTdHI9YSl9YXBwZW5kKGEsYyl7YyYmKHRoaXMuc3RyKz1jLHRoaXMuZnVsbFN0cis9Yyk7dGhpcy5zdHIrPWEuc3RyO3RoaXMuZnVsbFN0cis9YS5mdWxsU3RyO3RoaXMuY3NzQ2xhc3MrPWEuY3NzQ2xhc3N9fWZ1bmN0aW9uIGFxKGEpe2NvbnN0IGM9TWF0aC5hYnMoYSk7cmV0dXJuKC4wMT5jJiYwPGN8fDFFNDxjKSYmaXNGaW5pdGUoYSk/ZDMuZm9ybWF0KCIuM3MiKShhKS5yZXBsYWNlKC9HJC8sIkIiKTphLnRvTG9jYWxlU3RyaW5nKCl9ZnVuY3Rpb24gYnEoYSxjKXtjb25zdCBkPWFxKHRwKHpwKGEpLDFFNjxNYXRoLmFicyhhKT8wOjIpKTtjPWNxKGEsYyx2b2lkIDApO3JldHVybiBuZXcgJHAoZCxjLGEudG9Mb2NhbGVTdHJpbmcoW10se21heGltdW1GcmFjdGlvbkRpZ2l0czo5fSkpfQpmdW5jdGlvbiBkcShhLGMsZCl7YT16cChhKTthPW51bGwhPWEmJmM/YS9jOjA7Yz0uOTk5OTk5PGEmJjE+YT8ifjEwMCUiOjFFLTY+YSYmMDxhPyJ+MCUiOnRwKDEwMCphLDIpKyIlIjtkPWNxKGEsITEsZCk7cmV0dXJuIG5ldyAkcChjLGQsMTAwKmErIiUiKX1mdW5jdGlvbiBlcShhLGMsZCl7Y29uc3QgZj1hcShhKTtjPWNxKGEsYyxkKTtyZXR1cm4gbmV3ICRwKGYsYyxhLnRvTG9jYWxlU3RyaW5nKCkpfWZ1bmN0aW9uIGZxKGEsYyl7YT15cCh4cChhKSk7Yz1jcShhLGMsdm9pZCAwKTtyZXR1cm4gbmV3ICRwKGEsYyl9ZnVuY3Rpb24gY3EoYSxjLGQpe2M9Yz8iZGF0YS13ZWlnaHRlZCAiOiIiO2lmKGQmJmQoYSl8fCJudW1iZXIiPT09dHlwZW9mIGEmJiFpc0Zpbml0ZShhKSljKz0iZGF0YS1lcnJvciAiO3JldHVybiBjfQpmdW5jdGlvbiBncShhLGMsZCl7Y29uc3QgZj1bXTtmLnB1c2goZnEoImNvdW50IikpO2YucHVzaChmcSgibWlzc2luZyIpKTthPyhmLnB1c2goZnEoIm1lYW4iLGMpKSxmLnB1c2goZnEoInN0ZCBkZXYiLGMpKSxmLnB1c2goZnEoInplcm9zIikpLGYucHVzaChmcSgibWluIikpLGYucHVzaChmcSgibWVkaWFuIixjKSksZi5wdXNoKGZxKCJtYXgiKSkpOihmLnB1c2goZnEoInVuaXF1ZSIpKSxmLnB1c2goZnEoInRvcCIsYykpLGYucHVzaChmcSgiZnJlcSB0b3AiLGMpKSxmLnB1c2goZnEoImF2ZyBzdHIgbGVuIikpKTtkJiZmLnB1c2gobmV3ICRwKCJjdXN0b20iLCJkYXRhLWN1c3RvbSAiKSk7cmV0dXJuIGZ9CmZ1bmN0aW9uIEJwKGEpe3JldHVybiBhP2EuZ2V0TnVtU3RhdHMoKT9hLmdldE51bVN0YXRzKCkuZ2V0Q29tbW9uU3RhdHMoKTphLmdldFN0cmluZ1N0YXRzKCk/YS5nZXRTdHJpbmdTdGF0cygpLmdldENvbW1vblN0YXRzKCk6YS5nZXRCeXRlc1N0YXRzKCk/YS5nZXRCeXRlc1N0YXRzKCkuZ2V0Q29tbW9uU3RhdHMoKTphLmdldFN0cnVjdFN0YXRzKCk/YS5nZXRTdHJ1Y3RTdGF0cygpLmdldENvbW1vblN0YXRzKCk6bnVsbDpudWxsfWZ1bmN0aW9uIGhxKGEpe2NvbnN0IGM9W107YT8oYy5wdXNoKGVxKGEuZ2V0TnVtTm9uTWlzc2luZygpLCExLGQ9PjA+PWQpKSxjLnB1c2goZHEoYS5nZXROdW1NaXNzaW5nKCksenAoYS5nZXROdW1Ob25NaXNzaW5nKCkpK3pwKGEuZ2V0TnVtTWlzc2luZygpKSxkPT4uMDI8ZCkpKTooYy5wdXNoKGVxKDAsITEsZD0+MD49ZCkpLGMucHVzaChkcSgxLDEsZD0+LjAyPGQpKSk7cmV0dXJuIGN9CmZ1bmN0aW9uIGlxKGEsYyxkKXtjb25zdCBmPVtdO2lmKGEpKGQ9ZD9hLmdldFdlaWdodGVkTnVtZXJpY1N0YXRzKCk6bnVsbCk/KGYucHVzaChicShkLmdldE1lYW4oKSwhMCkpLGYucHVzaChicShkLmdldFN0ZERldigpLCEwKSkpOihmLnB1c2goYnEoYS5nZXRNZWFuKCkpKSxmLnB1c2goYnEoYS5nZXRTdGREZXYoKSkpKSxmLnB1c2goZHEoYS5nZXROdW1aZXJvcygpLE9wKGMpLGc9Pi4xPGcpKSxjPWpxKGEpLGYucHVzaChicShjP05hTjphLmdldE1pbigpKSksZD9mLnB1c2goYnEoZC5nZXRNZWRpYW4oKSwhMCkpOmYucHVzaChicShhLmdldE1lZGlhbigpKSksZi5wdXNoKGJxKGM/TmFOOmEuZ2V0TWF4KCkpKTtlbHNlIGZvcihhPTA7Nj5hO2ErKylmLnB1c2goZnEoIi0iKSk7cmV0dXJuIGZ9CmZ1bmN0aW9uIGpxKGEpe2lmKCFhKXJldHVybiExO2E9YS5nZXRIaXN0b2dyYW1zTGlzdCgpO2ZvcihsZXQgYz0wO2M8YS5sZW5ndGg7YysrKWlmKDA8YVtjXS5nZXROdW1OYW4oKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBrcShhLGMpe2NvbnN0IGQ9W107aWYoYSl7Yz1jP2EuZ2V0V2VpZ2h0ZWRTdHJpbmdTdGF0cygpOm51bGw7ZC5wdXNoKGVxKGEuZ2V0VW5pcXVlKCkpKTtjb25zdCBmPWM/Yy5nZXRUb3BWYWx1ZXNMaXN0KCk6YS5nZXRUb3BWYWx1ZXNMaXN0KCk7ZiYmMDxmLmxlbmd0aD8oZC5wdXNoKGZxKGZbMF0uZ2V0VmFsdWUoKSwhIWMpKSxkLnB1c2goYnEoZlswXS5nZXRGcmVxdWVuY3koKSwhIWMpKSk6KGQucHVzaChmcSgiLSIpKSxkLnB1c2goZnEoIi0iKSkpO2QucHVzaChicShhLmdldEF2Z0xlbmd0aCgpKSl9ZWxzZSBmb3IoYT0wOzQ+YTthKyspZC5wdXNoKGZxKCItIikpO3JldHVybiBkfQpmdW5jdGlvbiBscShhKXtjb25zdCBjPVtdO2lmKGEpYy5wdXNoKGVxKGEuZ2V0VW5pcXVlKCkpKSxjLnB1c2goZnEoIi0iKSksYy5wdXNoKGZxKCItIikpLGMucHVzaChicShhLmdldEF2Z051bUJ5dGVzKCkpKTtlbHNlIGZvcihhPTA7ND5hO2ErKyljLnB1c2goZnEoIi0iKSk7cmV0dXJuIGN9ZnVuY3Rpb24gbXEoYSl7Y29uc3QgYz1bXTtpZihhJiYwPGEubGVuZ3RoKXtjb25zdCBkPW5ldyAkcCgiIiwiZGF0YS1jdXN0b20gIik7YS5mb3JFYWNoKGY9PntpZighZi5nZXRIaXN0b2dyYW0oKSYmIWYuZ2V0UmFua0hpc3RvZ3JhbSgpKXt2YXIgZz1mLmdldE5hbWUoKTsiIiE9PWQuc3RyJiYoZz0iXG4iK2cpO2QuYXBwZW5kKGZxKGcpKTtmLmdldFN0cigpP2QuYXBwZW5kKGZxKGYuZ2V0U3RyKCkpLCI6ICIpOmQuYXBwZW5kKGJxKGYuZ2V0TnVtKCkpLCI6ICIpfX0pO2MucHVzaChkKX1lbHNlIGMucHVzaChuZXcgJHAoIi0iLCJkYXRhLWN1c3RvbSAiKSk7cmV0dXJuIGN9CmZ1bmN0aW9uIG5xKGEsYyxkKXtpZighYSlyZXR1cm5bXTtjb25zdCBmPUJwKGEpO2xldCBnPWhxKGYpO2c9YS5nZXROdW1TdGF0cygpP2cuY29uY2F0KGlxKGEuZ2V0TnVtU3RhdHMoKSxmLGMpKTphLmdldFN0cmluZ1N0YXRzKCk/Zy5jb25jYXQoa3EoYS5nZXRTdHJpbmdTdGF0cygpLGMpKTpnLmNvbmNhdChscShhLmdldEJ5dGVzU3RhdHMoKSkpO2QmJihnPWcuY29uY2F0KG1xKGEuZ2V0Q3VzdG9tU3RhdHNMaXN0KCkpKSk7cmV0dXJuIGd9CmZ1bmN0aW9uIG9xKGEpe2NvbnN0IGM9YS5tYXAoKCk9PjApO2EuZm9yRWFjaCgoZCxmKT0+e2QuZm9yRWFjaChnPT57Y1tmXSs9enAoZy5nZXRTYW1wbGVDb3VudCgpKX0pfSk7cmV0dXJuIGEubWFwKChkLGYpPT5kLm1hcChnPT57aWYoZyBpbnN0YW5jZW9mIEhqKXt2YXIgbD1uZXcgSGo7bC5zZXRTYW1wbGVDb3VudChnLmdldFNhbXBsZUNvdW50KCkvY1tmXSk7bC5zZXRMb3dWYWx1ZShnLmdldExvd1ZhbHVlKCkpO2wuc2V0SGlnaFZhbHVlKGcuZ2V0SGlnaFZhbHVlKCkpO3JldHVybiBsfWw9bmV3IEtqO2wuc2V0U2FtcGxlQ291bnQoZy5nZXRTYW1wbGVDb3VudCgpL2NbZl0pO2wuc2V0TG93UmFuayhnLmdldExvd1JhbmsoKSk7bC5zZXRIaWdoUmFuayhnLmdldEhpZ2hSYW5rKCkpO2wuc2V0TGFiZWwoZy5nZXRMYWJlbCgpKTtyZXR1cm4gbH0pKX07Cjwvc2NyaXB0Pgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vZmFjZXRzLW92ZXJ2aWV3L2NvbW1vbi9vdmVydmlld19kYXRhX21vZGVsLmpzCmNsYXNzIHBxe2NvbnN0cnVjdG9yKGEpe3RoaXMuZGF0YT1hO3RoaXMuY29sb3JTY2FsZT1uZXcgUGxvdHRhYmxlLlNjYWxlcy5Db2xvcjt0aGlzLmNvbG9yU2NhbGUuZG9tYWluKGEuZ2V0RGF0YXNldHNMaXN0KCkubWFwKGM9PmMuZ2V0TmFtZSgpKSk7dGhpcy5jb2xvclNjYWxlLnJhbmdlKCIjNDI4NUY0ICNGMDkzMDAgIzBGOUQ1OCAjOUMyN0IwICM2MDdEOEIgIzBCODA0MyAjNzU3NTc1Ii5zcGxpdCgiICIpKTtpZighSHAoYSkpdGhyb3cgRXJyb3IoImlucHV0IHByb3RvIGhhcyBub3QgYmVlbiBjbGVhbmVkIik7dGhpcy5mZWF0dXJlc0J5U3BlYz10aGlzLm1ha2VGZWF0dXJlQnlTcGVjTGlzdCgpfW1ha2VGZWF0dXJlQnlTcGVjTGlzdCgpe2NvbnN0IGE9W107Zm9yKGxldCBjPTA7MTY+YztjKyspYVtjXT1bXTt0aGlzLmdldFVuaXF1ZUZlYXR1cmVzKCkuZm9yRWFjaChjPT57Y29uc3QgZD10aGlzLmdldEZlYXR1cmVTcGVjRm9yRmVhdHVyZShjLmdldE5hbWUoKSk7YVtkXS5wdXNoKGMuZ2V0TmFtZSgpKX0pOwpyZXR1cm4gYX1nZXROb25FbXB0eUZlYXR1cmVTcGVjTGlzdHMoKXtjb25zdCBhPVtdO2ZvcihsZXQgYz0wOzE2PmM7YysrKWlmKDAhPT10aGlzLmZlYXR1cmVzQnlTcGVjW2NdLmxlbmd0aCl7Y29uc3QgZD1uZXcgU3A7ZC5mZWF0dXJlcz10aGlzLmZlYXR1cmVzQnlTcGVjW2NdO2Quc3BlYz1jO2EucHVzaChkKX1yZXR1cm4gYX1nZXRGZWF0dXJlU3BlY0ZvckZlYXR1cmUoYSl7Y29uc3QgYz10aGlzLmdldERhdGFzZXROYW1lcygpO2xldCBkPTE1O2ZvcihsZXQgZz0wO2c8Yy5sZW5ndGg7ZysrKXt2YXIgZj10aGlzLmdldEZlYXR1cmUoYSxjW2ddKTtmPW51bGw9PWY/MTU6UnAoZi5nZXRUeXBlKCksdGhpcy5nZXRGZWF0dXJlQ29tbW9uU3RhdHMoYSxjW2ddKSk7ZD1RcChkLGYpfTE2PT09ZCYmKGQ9MTUpO3JldHVybiBkfWdldERhdGFzZXRGZWF0dXJlU3RhdGlzdGljcygpe3JldHVybiB0aGlzLmRhdGF9Z2V0Q29sb3JTY2FsZSgpe3JldHVybiB0aGlzLmNvbG9yU2NhbGV9Z2V0RGF0YXNldE5hbWVzKCl7cmV0dXJuIHRoaXMuZGF0YT8KdGhpcy5kYXRhLmdldERhdGFzZXRzTGlzdCgpLm1hcChhPT5hLmdldE5hbWUoKSk6W119Z2V0RGF0YXNldChhKXtpZighdGhpcy5kYXRhKXJldHVybiBudWxsO2Zvcihjb25zdCBjIG9mIHRoaXMuZGF0YS5nZXREYXRhc2V0c0xpc3QoKSlpZihjLmdldE5hbWUoKT09PWEpcmV0dXJuIGM7cmV0dXJuIG51bGx9Z2V0RmVhdHVyZShhLGMpe2lmKCFhfHwhdGhpcy5kYXRhKXJldHVybiBudWxsO2M9dGhpcy5nZXREYXRhc2V0KGMpO2lmKCFjKXJldHVybiBudWxsO2Zvcihjb25zdCBkIG9mIGMuZ2V0RmVhdHVyZXNMaXN0KCkpaWYoZC5nZXROYW1lKCk9PT1hKXJldHVybiBkO3JldHVybiBudWxsfWdldEV4dHJhSGlzdG9ncmFtTmFtZXMoYSl7aWYoIXRoaXMuZGF0YSlyZXR1cm5bXTthPWEubWFwKGQ9PmQuZ2V0TmFtZSgpKTtjb25zdCBjPXt9O2Zvcihjb25zdCBkIG9mIHRoaXMuZGF0YS5nZXREYXRhc2V0c0xpc3QoKSlmb3IoY29uc3QgZiBvZiBkLmdldEZlYXR1cmVzTGlzdCgpKWlmKC0xIT09CmEuaW5kZXhPZihmLmdldE5hbWUoKSkmJihmLmdldEN1c3RvbVN0YXRzTGlzdCgpJiZmLmdldEN1c3RvbVN0YXRzTGlzdCgpLmZvckVhY2goZz0+e2lmKGcuZ2V0SGlzdG9ncmFtKCl8fGcuZ2V0UmFua0hpc3RvZ3JhbSgpKWNbZy5nZXROYW1lKCldPSEwfSksZi5nZXROdW1TdGF0cygpKSl7Y29uc3QgZz1mLmdldE51bVN0YXRzKCkuZ2V0SGlzdG9ncmFtc0xpc3QoKTtpZihnKWZvcihsZXQgbD0wO2w8Zy5sZW5ndGg7bCsrKXtjb25zdCBrPWdbbF07ay5nZXROYW1lKCkmJihjW2suZ2V0TmFtZSgpXT0hMCl9fXJldHVybiBPYmplY3Qua2V5cyhjKX1nZXRGZWF0dXJlQ29tbW9uU3RhdHMoYSxjKXthPXRoaXMuZ2V0RmVhdHVyZShhLGMpO3JldHVybiBudWxsPT1hP251bGw6QnAoYSl9Z2V0RmVhdHVyZU5hbWVzKGEpe3JldHVybiBhJiZ0aGlzLmRhdGE/KGE9dGhpcy5nZXREYXRhc2V0KGEpKT9hLmdldEZlYXR1cmVzTGlzdCgpLm1hcChjPT5jLmdldE5hbWUoKSk6W106bnVsbH1nZXRGZWF0dXJlSW5kZXgoYSwKYyl7aWYoIXRoaXMuZGF0YSlyZXR1cm4gbnVsbDthPXRoaXMuZ2V0RGF0YXNldChhKTtpZighYSlyZXR1cm4gbnVsbDtsZXQgZD0wO2Zvcihjb25zdCBmIG9mIGEuZ2V0RmVhdHVyZXNMaXN0KCkpe2lmKGYuZ2V0TmFtZSgpPT09YylyZXR1cm4gZDsrK2R9cmV0dXJuIG51bGx9Z2V0VW5pcXVlRmVhdHVyZXMoKXtpZighdGhpcy5kYXRhKXJldHVybltdO2NvbnN0IGE9e307Zm9yKGNvbnN0IGMgb2YgdGhpcy5kYXRhLmdldERhdGFzZXRzTGlzdCgpKWZvcihjb25zdCBkIG9mIGMuZ2V0RmVhdHVyZXNMaXN0KCkpYVtkLmdldE5hbWUoKV09ZDtyZXR1cm4gT2JqZWN0LmtleXMoYSkubWFwKGM9PmFbY10pfWdldE51bVVuaXF1ZUZlYXR1cmVzQnlUeXBlKGEpe3JldHVybiB0aGlzLmdldFVuaXF1ZUZlYXR1cmVzKCkuZmlsdGVyKGM9PkZwKGMpPT09YSkubGVuZ3RofWZlYXR1cmVIYXNTaW5nbGVWYWx1ZShhKXtpZighYSlyZXR1cm4hMTtpZihhLmdldFN0cmluZ1N0YXRzKCkpe3ZhciBjPWEuZ2V0U3RyaW5nU3RhdHMoKS5nZXRVbmlxdWUoKTsKcmV0dXJuIDE9PT16cChjKX1yZXR1cm4gYS5nZXRCeXRlc1N0YXRzKCk/KGM9YS5nZXRCeXRlc1N0YXRzKCkuZ2V0VW5pcXVlKCksMT09PXpwKGMpKTphLmdldE51bVN0YXRzKCk/KGM9YS5nZXROdW1TdGF0cygpLmdldE1pbigpLGE9YS5nZXROdW1TdGF0cygpLmdldE1heCgpLG51bGw9PWMmJm51bGw9PWE/ITE6enAoYyk9PT16cChhKSk6ITF9ZmVhdHVyZUFjcm9zc0FsbERhdGFzZXRzSGFzU2luZ2xlVmFsdWUoYSl7aWYoIWF8fCF0aGlzLmRhdGEpcmV0dXJuITE7Zm9yKGNvbnN0IGMgb2YgdGhpcy5kYXRhLmdldERhdGFzZXRzTGlzdCgpKWZvcihjb25zdCBkIG9mIGMuZ2V0RmVhdHVyZXNMaXN0KCkpaWYoYT09PWQuZ2V0TmFtZSgpJiYhdGhpcy5mZWF0dXJlSGFzU2luZ2xlVmFsdWUoZCkpcmV0dXJuITE7cmV0dXJuITB9Z2V0RmVhdHVyZVNpbmdsZVZhbHVlKGEpe2lmKG51bGw9PWEpcmV0dXJuIlx4M2NudWxsXHgzZSI7aWYoYS5nZXRTdHJpbmdTdGF0cygpKXJldHVybiBhPWEuZ2V0U3RyaW5nU3RhdHMoKS5nZXRUb3BWYWx1ZXNMaXN0KCksCm51bGw9PWF8fDA9PT1hLmxlbmd0aD8iXHgzY251bGxceDNlIjphWzBdLmdldFZhbHVlKCk7aWYoYS5nZXRCeXRlc1N0YXRzKCkpcmV0dXJuIDA9PT1hLmdldEJ5dGVzU3RhdHMoKS5nZXRVbmlxdWUoKT8iXHgzY251bGxceDNlIjoiXHgzY2JpbmFyeSBkYXRhXHgzZSI7aWYoYS5nZXROdW1TdGF0cygpKXtjb25zdCBjPWEuZ2V0TnVtU3RhdHMoKS5nZXRNaW4oKTtpZihjKXJldHVybiB6cChjKS50b1N0cmluZygpO2lmKGE9YS5nZXROdW1TdGF0cygpLmdldE1heCgpKXJldHVybiB6cChhKS50b1N0cmluZygpfXJldHVybiJceDNjdW5rbm93biB0eXBlXHgzZSJ9Z2V0RGF0YXNldEhpc3RvZ3JhbXNGb3JGZWF0dXJlKGEpe2NvbnN0IGM9W107aWYodGhpcy5kYXRhKWZvcihjb25zdCBsIG9mIHRoaXMuZGF0YS5nZXREYXRhc2V0c0xpc3QoKSl7Y29uc3Qgaz1sLmdldE5hbWUoKTtsZXQgbT1udWxsLHA9bnVsbCxxPW51bGwscj1udWxsLHQ9bnVsbCx2PW51bGw7Y29uc3QgQT17fTtmb3IoY29uc3QgeSBvZiBsLmdldEZlYXR1cmVzTGlzdCgpKWlmKHkuZ2V0TmFtZSgpPT09CmEpe3ZhciBkPXRoaXMuZ2V0RmVhdHVyZUNvbW1vblN0YXRzKGEsayk7ZCYmKHQ9ZC5nZXROdW1WYWx1ZXNIaXN0b2dyYW0oKSx2PWQuZ2V0RmVhdHVyZUxpc3RMZW5ndGhIaXN0b2dyYW0oKSk7eS5nZXRDdXN0b21TdGF0c0xpc3QoKSYmeS5nZXRDdXN0b21TdGF0c0xpc3QoKS5mb3JFYWNoKHg9Pnt4LmdldEhpc3RvZ3JhbSgpP0FbeC5nZXROYW1lKCldPXguZ2V0SGlzdG9ncmFtKCk6eC5nZXRSYW5rSGlzdG9ncmFtKCkmJihBW3guZ2V0TmFtZSgpXT14LmdldFJhbmtIaXN0b2dyYW0oKSl9KTtpZih5LmdldE51bVN0YXRzKCkpe2lmKGQ9eS5nZXROdW1TdGF0cygpLmdldEhpc3RvZ3JhbXNMaXN0KCkpZm9yKHZhciBmPTA7ZjxkLmxlbmd0aDtmKyspe3ZhciBnPWRbZl07Zy5nZXROYW1lKCk/QVtnLmdldE5hbWUoKV09ZzowPT09Zy5nZXRUeXBlKCk/bT1nOnE9Z31pZih5LmdldE51bVN0YXRzKCkuZ2V0V2VpZ2h0ZWROdW1lcmljU3RhdHMoKSYmKGQ9eS5nZXROdW1TdGF0cygpLmdldFdlaWdodGVkTnVtZXJpY1N0YXRzKCkuZ2V0SGlzdG9ncmFtc0xpc3QoKSkpZm9yKGY9CjA7ZjxkLmxlbmd0aDtmKyspZz1kW2ZdLDA9PT1nLmdldFR5cGUoKT9wPWc6cj1nfWVsc2UgeS5nZXRTdHJpbmdTdGF0cygpJiYobT15LmdldFN0cmluZ1N0YXRzKCkuZ2V0UmFua0hpc3RvZ3JhbSgpLHkuZ2V0U3RyaW5nU3RhdHMoKS5nZXRXZWlnaHRlZFN0cmluZ1N0YXRzKCkmJihwPXkuZ2V0U3RyaW5nU3RhdHMoKS5nZXRXZWlnaHRlZFN0cmluZ1N0YXRzKCkuZ2V0UmFua0hpc3RvZ3JhbSgpKSk7YnJlYWt9Yy5wdXNoKG5ldyBJbihrLG0scCxxLHIsdCx2LEEpKX1yZXR1cm4gY31kb2VzQ29udGFpbldlaWdodGVkU3RhdHMoKXtudWxsPT10aGlzLmNvbnRhaW5zV2VpZ2h0ZWRTdGF0cyYmKHRoaXMuY29udGFpbnNXZWlnaHRlZFN0YXRzPUlwKHRoaXMuZGF0YSkpO3JldHVybiB0aGlzLmNvbnRhaW5zV2VpZ2h0ZWRTdGF0c31kb2VzQ29udGFpbkN1c3RvbVN0YXRzKCl7bnVsbD09dGhpcy5jb250YWluc0N1c3RvbVN0YXRzJiYodGhpcy5jb250YWluc0N1c3RvbVN0YXRzPUpwKHRoaXMuZGF0YSkpOwpyZXR1cm4gdGhpcy5jb250YWluc0N1c3RvbVN0YXRzfWRvZXNDb250YWluRmVhdHVyZUxpc3RMZW5ndGhEYXRhKCl7bnVsbD09dGhpcy5jb250YWluc0ZlYXR1cmVMaXN0TGVuZ3RoRGF0YSYmKHRoaXMuY29udGFpbnNGZWF0dXJlTGlzdExlbmd0aERhdGE9S3AodGhpcy5kYXRhKSk7cmV0dXJuIHRoaXMuY29udGFpbnNGZWF0dXJlTGlzdExlbmd0aERhdGF9Z2V0Q2hhcnRBbHBoYSgpe3JldHVybiAyPD10aGlzLmdldERhdGFzZXROYW1lcygpLmxlbmd0aD8uNDoxfWdldENoYXJ0Q29sb3JTdHJpbmcoYSl7YT10aGlzLmdldENvbG9yU2NhbGUoKS5zY2FsZSh0aGlzLmdldERhdGFzZXROYW1lcygpW2FdKTtjb25zdCBjPXRoaXMuZ2V0Q2hhcnRBbHBoYSgpO3JldHVybiBhLnJlcGxhY2UoInJnYiIsInJnYmEiKS5yZXBsYWNlKCIpIiwiLCAiK2MrIikiKX19Owo8L3NjcmlwdD4KPHNjcmlwdD4vL35+V0VCUEFUSH5+L2ZhY2V0cy1vdmVydmlldy9jb21tb24vcGxvdHRhYmxlX2hlbHBlcnMuanMKKGZ1bmN0aW9uKGEpe2Z1bmN0aW9uIGMocCl7Y29uc3QgcT1bXTtmb3IoO3AmJnAgaW5zdGFuY2VvZiBIVE1MRWxlbWVudDspaWYocS5wdXNoKHApLHAuYXNzaWduZWRTbG90KXA9cC5hc3NpZ25lZFNsb3Q7ZWxzZSBpZihwLnBhcmVudEVsZW1lbnQpcD1wLnBhcmVudEVsZW1lbnQ7ZWxzZXtjb25zdCByPXAucGFyZW50Tm9kZTtwPXIgaW5zdGFuY2VvZiBEb2N1bWVudEZyYWdtZW50P3IuaG9zdDpyIT09cD9yOm51bGx9cmV0dXJuIHF9ZnVuY3Rpb24gZChwKXt2YXIgcT1jKHApO3A9ZjtsZXQgcj1udWxsO2Zvcihjb25zdCB2IG9mIHEpe3E9UGxvdHRhYmxlLlV0aWxzLkRPTS5nZXRFbGVtZW50VHJhbnNmb3JtKHYpO2lmKG51bGwhPXEpe3ZhciB0PXYuY2xpZW50V2lkdGgvMjtjb25zdCBBPXYuY2xpZW50SGVpZ2h0LzI7cD1QbG90dGFibGUuVXRpbHMuTWF0aC5tdWx0aXBseVRyYW5zbGF0ZShwLFt0LEFdKTtwPVBsb3R0YWJsZS5VdGlscy5NYXRoLm11bHRpcGx5TWF0cml4KHAsUGxvdHRhYmxlLlV0aWxzLk1hdGguaW52ZXJ0TWF0cml4KHEpKTsKcD1QbG90dGFibGUuVXRpbHMuTWF0aC5tdWx0aXBseVRyYW5zbGF0ZShwLFstdCwtQV0pfXE9di5zY3JvbGxMZWZ0O3Q9di5zY3JvbGxUb3A7aWYobnVsbD09PXJ8fHY9PT1yKXEtPXYub2Zmc2V0TGVmdCt2LmNsaWVudExlZnQsdC09di5vZmZzZXRUb3Ardi5jbGllbnRUb3Ascj12Lm9mZnNldFBhcmVudDtwPVBsb3R0YWJsZS5VdGlscy5NYXRoLm11bHRpcGx5VHJhbnNsYXRlKHAsW3EsdF0pfXJldHVybiBwfWNvbnN0IGY9WzEsMCwwLDEsMCwwXTtjbGFzcyBnIGV4dGVuZHMgUGxvdHRhYmxlLlV0aWxzLlRyYW5zbGF0b3J7Y29tcHV0ZVBvc2l0aW9uKHAscSl7cD17eDpwLHk6cX07cT1kKHRoaXMuX3Jvb3RFbGVtZW50KTtyZXR1cm4gbnVsbD09cT9wOlBsb3R0YWJsZS5VdGlscy5NYXRoLmFwcGx5VHJhbnNmb3JtKHEscCl9fWNsYXNzIGwgZXh0ZW5kcyBQbG90dGFibGUuRGlzcGF0Y2hlcnMuTW91c2V7Y29uc3RydWN0b3IocCl7c3VwZXIocCk7dGhpcy5fZXZlbnRUYXJnZXQ9cC5yb290KCkucm9vdEVsZW1lbnQoKS5ub2RlKCk7CnRoaXMuX3RyYW5zbGF0b3I9bmV3IGcocC5yb290KCkucm9vdEVsZW1lbnQoKS5ub2RlKCkpfXN0YXRpYyBnZXREaXNwYXRjaGVyKHApe2NvbnN0IHE9cC5yb290KCkucm9vdEVsZW1lbnQoKTtsZXQgcj1xW2wuX0RJU1BBVENIRVJfS0VZXTtyfHwocj1uZXcgbChwKSxxW2wuX0RJU1BBVENIRVJfS0VZXT1yKTtyZXR1cm4gcn19Y2xhc3MgayBleHRlbmRzIFBsb3R0YWJsZS5EaXNwYXRjaGVycy5Ub3VjaHtjb25zdHJ1Y3RvcihwKXtzdXBlcihwKTt0aGlzLl9ldmVudFRhcmdldD1wLnJvb3QoKS5yb290RWxlbWVudCgpLm5vZGUoKTt0aGlzLl90cmFuc2xhdG9yPW5ldyBnKHAucm9vdCgpLnJvb3RFbGVtZW50KCkubm9kZSgpKX1zdGF0aWMgZ2V0RGlzcGF0Y2hlcihwKXtjb25zdCBxPXAucm9vdCgpLnJvb3RFbGVtZW50KCk7bGV0IHI9cVtrLl9ESVNQQVRDSEVSX0tFWV07cnx8KHI9bmV3IGsocCkscVtrLl9ESVNQQVRDSEVSX0tFWV09cik7cmV0dXJuIHJ9fWNsYXNzIG0gZXh0ZW5kcyBQbG90dGFibGUuSW50ZXJhY3Rpb25zLlBvaW50ZXJ7X2FuY2hvcigpe3RoaXMuX2lzQW5jaG9yZWQ9CiEwO3RoaXMuX21vdXNlRGlzcGF0Y2hlcj1sLmdldERpc3BhdGNoZXIodGhpcy5fY29tcG9uZW50QXR0YWNoZWRUbyk7dGhpcy5fbW91c2VEaXNwYXRjaGVyLm9uTW91c2VNb3ZlKHRoaXMuX21vdXNlTW92ZUNhbGxiYWNrKTt0aGlzLl90b3VjaERpc3BhdGNoZXI9ay5nZXREaXNwYXRjaGVyKHRoaXMuX2NvbXBvbmVudEF0dGFjaGVkVG8pO3RoaXMuX3RvdWNoRGlzcGF0Y2hlci5vblRvdWNoU3RhcnQodGhpcy5fdG91Y2hTdGFydENhbGxiYWNrKX19YS5Qb2ludGVySW50ZXJhY3Rpb249bX0pKHdpbmRvdy5wbG90dGFibGVfaGVscGVyc3x8KHdpbmRvdy5wbG90dGFibGVfaGVscGVycz17fSkpOwo8L3NjcmlwdD4KCgoKCgoKCgoKCjxkb20tbW9kdWxlIGlkPSJmYWNldHMtb3ZlcnZpZXctcm93LXN0YXRzIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgICogewogICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgb3ZlcmZsb3cteDogaGlkZGVuOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICB9CiAgICAgIC5kYXRhLWVycm9yIHsKICAgICAgICBjb2xvcjogcmVkOwogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICB9CiAgICAgIC5kYXRhLXdlaWdodGVkIHsKICAgICAgICBmb250LXN0eWxlOiBpdGFsaWM7CiAgICAgIH0KICAgICAgLnRhYmxlLXJvdyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBtYXJnaW4tYm90dG9tOiA0cHg7CiAgICAgIH0KICAgICAgLnRhYmxlLWNlbGwgewogICAgICAgIG1pbi13aWR0aDogNzBweDsKICAgICAgICBtYXgtd2lkdGg6IDcwcHg7CiAgICAgICAgcGFkZGluZy1yaWdodDogNHB4OwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KICAgICAgLmRhdGEtY3VzdG9tIHsKICAgICAgICBtaW4td2lkdGg6IDE1MHB4OwogICAgICAgIG1heC13aWR0aDogMTUwcHg7CiAgICAgICAgd2hpdGUtc3BhY2U6IHByZTs7CiAgICAgIH0KICAgICAgI2xlZ2VuZC1ib3ggewogICAgICAgIHdpZHRoOiA2cHg7CiAgICAgICAgaGVpZ2h0OiAxNnB4OwogICAgICAgIG1hcmdpbi1sZWZ0OiA0cHg7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8ZGl2IGNsYXNzPSJ0YWJsZS1yb3ciPgogICAgICA8ZGl2IGlkPSJsZWdlbmQtYm94Ij48L2Rpdj4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tfZW50cmllc11dIj4KICAgICAgICA8ZGl2IGNsYXNzJD0iW1tpdGVtLmNzc0NsYXNzXV0gdGFibGUtY2VsbCIgdGl0bGU9IltbaXRlbS5mdWxsU3RyXV0iPltbaXRlbS5zdHJdXTwvZGl2PgogICAgICA8L3RlbXBsYXRlPgogICAgPC9kaXY+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vZmFjZXRzLW92ZXJ2aWV3L2NvbXBvbmVudHMvZmFjZXRzLW92ZXJ2aWV3LXJvdy1zdGF0cy9mYWNldHMtb3ZlcnZpZXctcm93LXN0YXRzLmpzClBvbHltZXIoe2lzOiJmYWNldHMtb3ZlcnZpZXctcm93LXN0YXRzIixwcm9wZXJ0aWVzOntzdGF0czpPYmplY3Qsc2hvd1dlaWdodGVkOkJvb2xlYW4saGFzQ3VzdG9tOkJvb2xlYW4sZGF0YU1vZGVsOk9iamVjdCxkYXRhc2V0SW5kZXg6TnVtYmVyLGNvbXBhcmVNb2RlOkJvb2xlYW4sX2VudHJpZXM6e3R5cGU6QXJyYXksY29tcHV0ZWQ6Il9nZXRFbnRyaWVzKHN0YXRzLCBzaG93V2VpZ2h0ZWQsIGhhc0N1c3RvbSkifX0sb2JzZXJ2ZXJzOlsiX2NvbG9yTGVnZW5kQm94KGRhdGFNb2RlbCwgZGF0YXNldEluZGV4LCBjb21wYXJlTW9kZSkiXSxfZ2V0RW50cmllczpmdW5jdGlvbihhLGMsZCl7cmV0dXJuIG5xKGEsYyxkKX0sX2NvbG9yTGVnZW5kQm94OmZ1bmN0aW9uKGEsYyxkKXtjb25zdCBmPWQzLnNlbGVjdCh0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiI2xlZ2VuZC1ib3giKSk7Mj5hLmdldERhdGFzZXROYW1lcygpLmxlbmd0aCYmIWQ/Zi5zdHlsZSgidmlzaWJpbGl0eSIsCiJoaWRkZW4iKTooZi5zdHlsZSgidmlzaWJpbGl0eSIsbnVsbCksZi5zdHlsZSgiYmFja2dyb3VuZC1jb2xvciIsYS5nZXRDaGFydENvbG9yU3RyaW5nKGMpKSl9fSk7Cjwvc2NyaXB0PgoKCgoKPGRvbS1tb2R1bGUgaWQ9ImZhY2V0cy1vdmVydmlldy1yb3ctbGVnZW5kIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIC50YWJsZS1yb3cgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSg2MSwxNDAsMjA3LDAuMSk7CiAgICAgICAgYm9yZGVyLWxlZnQ6IHNvbGlkIDAuNXB4IHJnYmEoMCwwLDAsMC4xKTsKICAgICAgICBib3JkZXItYm90dG9tOiBzb2xpZCAwLjVweCByZ2JhKDAsMCwwLDAuMSk7CiAgICAgIH0KICAgICAgLnRhYmxlLWNlbGwgewogICAgICAgIHBhZGRpbmc6IDIwcHggNHB4IDhweCAwOwogICAgICAgIG1pbi13aWR0aDogNjlweDsKICAgICAgICBtYXgtd2lkdGg6IDY5cHg7CiAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiAzMDA7CiAgICAgICAgYm9yZGVyLXJpZ2h0OiBzb2xpZCAwLjVweCByZ2JhKDAsMCwwLDAuMSk7CiAgICAgIH0KICAgICAgLmRhdGEtd2VpZ2h0ZWQgewogICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICAgICAgfQogICAgICAuZGF0YS1jdXN0b20gewogICAgICAgIG1pbi13aWR0aDogMTUwcHg7CiAgICAgICAgbWF4LXdpZHRoOiAxNTBweDsKICAgICAgfQogICAgICAubGVnZW5kLXNwYWNlIHsKICAgICAgICB3aWR0aDogNnB4OwogICAgICAgIGhlaWdodDogOHB4OwogICAgICAgIG1hcmdpbi1sZWZ0OiA0cHg7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8ZGl2IGNsYXNzPSJ0YWJsZS1yb3ciPgogICAgICA8ZGl2IGNsYXNzPSJsZWdlbmQtc3BhY2UiPjwvZGl2PgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19lbnRyaWVzXV0iPgogICAgICAgIDxkaXYgY2xhc3MkPSJbW2l0ZW0uY3NzQ2xhc3NdXSB0YWJsZS1jZWxsIj5bW2l0ZW0uc3RyXV08L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgIDwvZGl2PgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT4KPHNjcmlwdD4vL35+V0VCUEFUSH5+L2ZhY2V0cy1vdmVydmlldy9jb21wb25lbnRzL2ZhY2V0cy1vdmVydmlldy1yb3ctbGVnZW5kL2ZhY2V0cy1vdmVydmlldy1yb3ctbGVnZW5kLmpzClBvbHltZXIoe2lzOiJmYWNldHMtb3ZlcnZpZXctcm93LWxlZ2VuZCIscHJvcGVydGllczp7bnVtZXJpYzpCb29sZWFuLHNob3dXZWlnaHRlZDpCb29sZWFuLGhhc0N1c3RvbTpCb29sZWFuLGRhdGFNb2RlbDpPYmplY3QsX2VudHJpZXM6e3R5cGU6QXJyYXksY29tcHV0ZWQ6Il9nZXRFbnRyaWVzKG51bWVyaWMsIHNob3dXZWlnaHRlZCwgaGFzQ3VzdG9tKSJ9fSxfZ2V0RW50cmllczpmdW5jdGlvbihhLGMsZCl7cmV0dXJuIGdxKGEsYyxkKX19KTsKPC9zY3JpcHQ+CgoKCgoKCgoKPGRvbS1tb2R1bGUgaWQ9ImZhY2V0cy1vdmVydmlldy1jaGFydCI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlIGluY2x1ZGU9InBsb3R0YWJsZS1zdHlsZSI+PC9zdHlsZT4KICAgIDxzdHlsZT4KICAgICAgLnBsb3R0YWJsZS5jaGFydC1zbWFsbCB7CiAgICAgICAgaGVpZ2h0OiA0NnB4OwogICAgICAgIHdpZHRoOiAyNTBweDsKICAgICAgfQogICAgICAucGxvdHRhYmxlLnhheGlzLXNtYWxsewogICAgICAgIGhlaWdodDogMzBweDsKICAgICAgICB3aWR0aDogMjUwcHg7CiAgICAgIH0KICAgICAgLnBsb3R0YWJsZS5jaGFydC1iaWcgewogICAgICAgIGhlaWdodDogMjAwcHg7CiAgICAgICAgd2lkdGg6IDU1MHB4OwogICAgICB9CiAgICAgIC5wbG90dGFibGUueGF4aXMtYmlnIHsKICAgICAgICBoZWlnaHQ6IDUwcHg7CiAgICAgICAgd2lkdGg6IDU1MHB4OwogICAgICB9CiAgICAgICNzaG93X3RhYmxlX2J1dHRvbiB7CiAgICAgICAgbWFyZ2luOiAwIDAgMCA1cHg7CiAgICAgICAgcGFkZGluZzogMCAzcHg7CiAgICAgICAgZm9udC1zaXplOiA3cHQ7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2QzZDNkMzsKICAgICAgfQogICAgICAuZGlhbG9nLXJvdy1lbnRyeSB7CiAgICAgICAgcGFkZGluZzogMCAxMHB4IDAgMDsKICAgICAgfQogICAgICAudGFibGUtaGVhZGVyIHsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgYmxhY2s7CiAgICAgIH0KICAgICAgLmRpYWxvZy1yb3csIC5kaWFsb2ctaGVhZGVyLXJvdyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgfQogICAgICAuZGlhbG9nLXJvdy5zZWxlY3RlZCB7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgYmxhY2sKICAgICAgfQogICAgICAuZGlhbG9nLXJvdzpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI0QwRDBEMDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgIH0KICAgICAgLmRpYWxvZy10YWJsZSB7CiAgICAgICAgY2xlYXI6IGxlZnQ7CiAgICAgIH0KICAgICAgLmxhYmVsLWNlbGwgewogICAgICAgIHdpZHRoOiA5MHB4OwogICAgICAgIG1heC13aWR0aDogOTBweDsKICAgICAgICBtaW4td2lkdGg6IDkwcHg7CiAgICAgICAgb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKICAgICAgfQogICAgICAubm9uLW92ZXJmbG93LWxhYmVsLWNlbGwgewogICAgICAgIHdpZHRoOiA5MHB4OwogICAgICAgIG1heC13aWR0aDogOTBweDsKICAgICAgICBtaW4td2lkdGg6IDkwcHg7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICB9CiAgICAgIC5jb3VudC1jZWxsIHsKICAgICAgICB3aWR0aDogMTAwcHg7CiAgICAgICAgbWF4LXdpZHRoOiAxMDBweDsKICAgICAgICBtaW4td2lkdGg6IDEwMHB4OwogICAgICAgIG92ZXJmbG93LXdyYXA6IGJyZWFrLXdvcmQ7CiAgICAgIH0KICAgICAgLndlaWdodGVkLWNlbGwgewogICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICAgICAgfQogICAgICAuZGF0YS1saXN0LXNtYWxsIHsKICAgICAgICBoZWlnaHQ6IDYwcHg7CiAgICAgIH0KICAgICAgLmRhdGEtbGlzdC1iaWcgewogICAgICAgIGhlaWdodDogMTgwcHg7CiAgICAgICAgd2lkdGg6IDU1MHB4OwogICAgICB9CiAgICAgIC5oaWRlY2hhcnQgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KICAgICAgLnNob3djaGFydCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lOwogICAgICB9CiAgICAgICN0b29sdGlwIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci10b29sdGlwLWJhY2tncm91bmQsICM2MTYxNjEpOwogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgY29sb3I6IHdoaXRlOwogICAgICAgIHBvaW50ZXItZXZlbnRzOm5vbmU7CiAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjNzOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0ZXh0LWFsaWduOmNlbnRlcjsKICAgICAgICBwYWRkaW5nOiA2cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMnB4OwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBsaW5lLWhlaWdodDogMTsKICAgICAgICBtYXJnaW4tbGVmdDogNTBweDsKICAgICAgICB3aGl0ZS1zcGFjZTogcHJlOwogICAgICAgIHRvcDogMHB4OwogICAgICB9CiAgICAgIC50b3BsZXZlbCB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICAgICAgcGFkZGluZy10b3A6IDRweDsKICAgICAgfQogICAgPC9zdHlsZT4KICAgIDxkaXYgY2xhc3M9InRvcGxldmVsIj4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19pc1N0cmluZ0NoYXJ0KF9jaGFydFR5cGUsIGNoYXJ0U2VsZWN0aW9uKV1dIj4KICAgICAgICA8cGFwZXItYnV0dG9uIGlkPSJzaG93X3RhYmxlX2J1dHRvbiIgb24tY2xpY2s9Il90b2dnbGVTaG93VGFibGUiPltbX2dldFNob3dUYWJsZUJ1dHRvblRleHQoX3Nob3dUYWJsZSldXTwvcGFwZXItYnV0dG9uPgogICAgICA8L3RlbXBsYXRlPgogICAgICA8ZGl2IGNsYXNzJD0iW1tfY2hhcnRDbGFzc11dIj4KICAgICAgICA8ZGl2IGlkPSJjaGFydCIgY2xhc3MkPSJbW19jaGFydFN2Z0NsYXNzXV0iPjwvZGl2PgogICAgICAgIDxkaXYgaWQ9InhheGlzIiBjbGFzcyQ9IltbX3hBeGlzU3ZnQ2xhc3NdXSI+PC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX3Nob3dUYWJsZV1dIj4KICAgICAgICA8ZGl2IGNsYXNzPSJkaWFsb2ctdGFibGUiPgogICAgICAgICAgPGRpdiBjbGFzcz0iZGlhbG9nLWhlYWRlci1yb3ciPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJkaWFsb2ctcm93LWVudHJ5IHRhYmxlLWhlYWRlciBsYWJlbC1jZWxsIj5WYWx1ZTwvZGl2PgogICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW2RhdGFdXSIgYXM9ImRhdGEiPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRpYWxvZy1yb3ctZW50cnkgdGFibGUtaGVhZGVyIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im5vbi1vdmVyZmxvdy1sYWJlbC1jZWxsIj5bW2RhdGEubmFtZV1dPC9kaXY+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxpcm9uLWxpc3QgaXRlbXM9IltbX3RhYmxlRGF0YV1dIiBhcz0iZW50cnkiIGNsYXNzJD0iW1tfdGFibGVEYXRhQ2xhc3NdXSI+CiAgICAgICAgICAgIDx0ZW1wbGF0ZT4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzJD0iW1tfZ2V0RW50cnlSb3dDbGFzcyhlbnRyeSwgc2VsZWN0aW9uKV1dIiBvbi10YXA9Il9yb3dDbGljayIgZGF0YS12YWx1ZT0iW1tfZ2V0RW50cnlSb3dWYWx1ZShlbnRyeSldXSI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJkaWFsb2ctcm93LWVudHJ5IGxhYmVsLWNlbGwiPltbZW50cnkudmFsdWVdXTwvZGl2PgogICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tlbnRyeS5jb3VudHNdXSIgYXM9ImNvdW50Ij4KICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcyQ9IltbX2dldENvdW50Q2VsbENsYXNzKHNob3dXZWlnaHRlZCldXSI+W1tjb3VudF1dPC9kaXY+CiAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPGlyb24tbGlzdD4KICAgICAgICA8L2lyb24tbGlzdD48L2lyb24tbGlzdD48L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPGRpdiBpZD0idG9vbHRpcCI+PC9kaXY+CiAgICA8L2Rpdj4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+CjxzY3JpcHQ+Ly9+fldFQlBBVEh+fi9mYWNldHMtb3ZlcnZpZXcvY29tcG9uZW50cy9mYWNldHMtb3ZlcnZpZXctY2hhcnQvZmFjZXRzLW92ZXJ2aWV3LWNoYXJ0LmpzClBvbHltZXIoe2lzOiJmYWNldHMtb3ZlcnZpZXctY2hhcnQiLHByb3BlcnRpZXM6e2RhdGE6e3R5cGU6T2JqZWN0LG9ic2VydmVyOiJfdXBkYXRlRGF0YSJ9LGRhdGFNb2RlbDpPYmplY3QsZmVhdHVyZTpTdHJpbmcsX21heEJ1Y2tldHNGb3JCYXJDaGFydDp7dHlwZTpOdW1iZXIsdmFsdWU6MTAscmVhZE9ubHk6ITB9LF9jaGFydEFscGhhOnt0eXBlOk51bWJlcix2YWx1ZToxfSxsb2dTY2FsZTpCb29sZWFuLHNob3dXZWlnaHRlZDpCb29sZWFuLHNob3dQZXJjZW50YWdlOkJvb2xlYW4sY2hhcnRTZWxlY3Rpb246e3R5cGU6TnVtYmVyLG9ic2VydmVyOiJfdXBkYXRlQ2hhcnRTZWxlY3Rpb24ifSxzZWxlY3Rpb246e3R5cGU6T2JqZWN0LG9ic2VydmVyOiJfdXBkYXRlU2VsZWN0aW9uVmlzaWJpbGl0eSIsbm90aWZ5OiEwfSxleHBhbmRDaGFydDpCb29sZWFuLF9zZWxlY3Rpb25FbGVtOk9iamVjdCxfbWluQmFySGVpZ2h0UmF0aW86e3R5cGU6TnVtYmVyLHZhbHVlOi4wMSxyZWFkT25seTohMH0sCl9vbkNsaWNrOk9iamVjdCxfb25DbGlja0Z1bmN0aW9uOk9iamVjdCxfb25Qb2ludGVyOk9iamVjdCxfb25Qb2ludGVyRW50ZXJGdW5jdGlvbjpPYmplY3QsX29uUG9pbnRlckV4aXRGdW5jdGlvbjpPYmplY3QsX3RhYmxlRGF0YTpBcnJheSxfc2hvd1RhYmxlOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LF9jaGFydFR5cGU6T2JqZWN0LF9jaGFydENsYXNzOnt0eXBlOlN0cmluZyxjb21wdXRlZDoiX2dldENoYXJ0Q2xhc3MoX3Nob3dUYWJsZSkifSxfY2hhcnRTdmdDbGFzczp7dHlwZTpTdHJpbmcsY29tcHV0ZWQ6Il9nZXRDaGFydFN2Z0NsYXNzKGV4cGFuZENoYXJ0KSJ9LF94QXhpc1N2Z0NsYXNzOnt0eXBlOlN0cmluZyxjb21wdXRlZDoiX2dldFhBeGlzU3ZnQ2xhc3MoZXhwYW5kQ2hhcnQpIn0sX3RhYmxlRGF0YUNsYXNzOnt0eXBlOlN0cmluZyxjb21wdXRlZDoiX2dldFRhYmxlRGF0YUNsYXNzKGV4cGFuZENoYXJ0KSJ9fSxvYnNlcnZlcnM6WyJfcmVuZGVyKGRhdGEsIGxvZ1NjYWxlLCBzaG93V2VpZ2h0ZWQsIGNoYXJ0U2VsZWN0aW9uLCBfc2hvd1RhYmxlLCBleHBhbmRDaGFydCwgc2hvd1BlcmNlbnRhZ2UsIGRhdGFNb2RlbCkiXSwKX3VwZGF0ZURhdGEoKXt0aGlzLl9zaG93VGFibGU9ITF9LF91cGRhdGVDaGFydFNlbGVjdGlvbigpe3RoaXMuX3Nob3dUYWJsZT0hMX0sX2hhc1dlaWdodGVkSGlzdG9ncmFtKGEpe3JldHVybiBMcChhKX0sX2hhc1F1YW50aWxlcyhhKXtyZXR1cm4gTXAoYSl9LF9pc1N0cmluZ0NoYXJ0KGEsYyl7cmV0dXJuKGE9PT1YcC5DVU1ESVNUX0NIQVJUfHxhPT09WHAuQkFSX0NIQVJUKSYmIlZhbHVlIGxpc3QgbGVuZ3RoIiE9PWMmJiJGZWF0dXJlIGxpc3QgbGVuZ3RoIiE9PWN9LF9kaXNhYmxlTG9nQ2hlY2tib3goYSxjKXtyZXR1cm4gYXx8IlN0YW5kYXJkIiE9PWN9LF9yZW5kZXIoYSxjLGQsZixnLGwsayxtKXt0aGlzLl9vblBvaW50ZXImJih0aGlzLl9vblBvaW50ZXIub2ZmUG9pbnRlck1vdmUodGhpcy5fb25Qb2ludGVyRW50ZXJGdW5jdGlvbiksdGhpcy5fb25Qb2ludGVyLm9mZlBvaW50ZXJNb3ZlKHRoaXMuX29uUG9pbnRlckV4aXRGdW5jdGlvbikpO3RoaXMuX29uQ2xpY2smJnRoaXMuX29uQ2xpY2sub2ZmQ2xpY2sodGhpcy5fb25DbGlja0Z1bmN0aW9uKTsKYSYmKHRoaXMuX2NoYXJ0QWxwaGE9bS5nZXRDaGFydEFscGhhKCksZz1hLm1hcChwPT50aGlzLl9nZXRCdWNrZXRzKHAsZCxmKSksdGhpcy5fY2hhcnRUeXBlPVpwKGEsZix0aGlzLl9tYXhCdWNrZXRzRm9yQmFyQ2hhcnQpLGE9YS5tYXAocD0+cC5uYW1lKSwiVmFsdWUgbGlzdCBsZW5ndGgiPT09Znx8IkZlYXR1cmUgbGlzdCBsZW5ndGgiPT09Znx8IlF1YW50aWxlcyI9PT1mP3RoaXMuX3JlbmRlclF1YW50aWxlQ2hhcnQoZyxhLGMpOnRoaXMuX2NoYXJ0VHlwZT09PVhwLkhJU1RPR1JBTT90aGlzLl9yZW5kZXJIaXN0b2dyYW1DaGFydChnLGEsYyxrKTp0aGlzLl9jaGFydFR5cGU9PT1YcC5DVU1ESVNUX0NIQVJUP3RoaXMuX3JlbmRlckNkZkNoYXJ0KGcsYSxjKTp0aGlzLl9yZW5kZXJCYXJDaGFydChnLGEsYyxrKSl9LF9yZW5kZXJIaXN0b2dyYW1DaGFydChhLGMsZCxmKXtjb25zdCBnPVtdLGw9bmV3IFBsb3R0YWJsZS5QbG90cy5SZWN0YW5nbGU7bGV0IGs9SW5maW5pdHksbT0tSW5maW5pdHksCnA9MDtmJiYoYT1vcShhKSk7YS5mb3JFYWNoKCh2LEEpPT57di5mb3JFYWNoKHk9Pntjb25zdCB4PXpwKHkuZ2V0TG93VmFsdWUoKSksQz16cCh5LmdldEhpZ2hWYWx1ZSgpKTt5PXpwKHkuZ2V0U2FtcGxlQ291bnQoKSk7eDxrJiYoaz14KTtDPm0mJihtPUMpO3k+cCYmKHA9eSk7aXNGaW5pdGUoeCkmJmlzRmluaXRlKEMpJiZnLnB1c2goQy14KX0pO2wuYWRkRGF0YXNldChuZXcgUGxvdHRhYmxlLkRhdGFzZXQodix7bmFtZTpjW0FdfSkpfSk7bGV0IHE9MDxnLmxlbmd0aD9nLnJlZHVjZShmdW5jdGlvbih2LEEpe3JldHVybiB2K0F9KS9nLmxlbmd0aDowOzA9PT1xJiYocT0xKTtmPVtdO2lzRmluaXRlKGspJiYoZi5wdXNoKGspLGlzRmluaXRlKG0pJiZmLnB1c2gobSkpO2E9bmV3IFBsb3R0YWJsZS5TY2FsZXMuTGluZWFyOzA8Zi5sZW5ndGgmJmEuZG9tYWluKGYpO2Y9dGhpcy5fZ2V0U2NhbGUoZCkuZG9tYWluKFswXSk7Y29uc3Qgcj1uZXcgUGxvdHRhYmxlLkF4ZXMuTnVtZXJpYyhhLAoiYm90dG9tIiksdD1uZXcgUGxvdHRhYmxlLkF4ZXMuTnVtZXJpYyhmLCJsZWZ0Iik7dC5mb3JtYXR0ZXIodGhpcy5fY2hhcnRBeGlzU2NhbGVGb3JtYXR0ZXIoKSk7ci5mb3JtYXR0ZXIodGhpcy5fY2hhcnRBeGlzU2NhbGVGb3JtYXR0ZXIoKSk7bC54KHY9PntsZXQgQT16cCh2LmdldExvd1ZhbHVlKCkpO2lmKC1JbmZpbml0eT09PUF8fEE9PT12LmdldEhpZ2hWYWx1ZSgpKXY9enAodi5nZXRIaWdoVmFsdWUoKSksaXNGaW5pdGUodik/QT12LXE6KEE9MCwtSW5maW5pdHk9PT12JiYoQS09cSkpO3JldHVybiBBfSxhKS54Mih2PT57bGV0IEE9enAodi5nZXRIaWdoVmFsdWUoKSk7aWYoSW5maW5pdHk9PT1BfHxBPT09di5nZXRMb3dWYWx1ZSgpKXY9enAodi5nZXRMb3dWYWx1ZSgpKSxpc0Zpbml0ZSh2KT9BPXYrcTooQT0wLEluZmluaXR5PT09diYmKEErPXEpKTtyZXR1cm4gQX0pLnkoKCk9PjAsZikueTIodj0+dGhpcy5fZ2V0Q291bnRXaXRoRmxvb3IodixwLGQpKTtsLmF0dHIoImZpbGwiLAoodixBLHkpPT55Lm1ldGFkYXRhKCkubmFtZSx0aGlzLmRhdGFNb2RlbC5nZXRDb2xvclNjYWxlKCkpLmF0dHIoIm9wYWNpdHkiLHRoaXMuX2NoYXJ0QWxwaGEpO3RoaXMuX3JlbmRlckNoYXJ0KGwscix0LG51bGwsbnVsbCx2PT5sLmVudGl0aWVzQXQodiksdj0+dHAoenAodi5nZXRMb3dWYWx1ZSgpKSwyKS50b0xvY2FsZVN0cmluZygpKyItIit0cCh6cCh2LmdldEhpZ2hWYWx1ZSgpKSwyKS50b0xvY2FsZVN0cmluZygpKyI6ICIrenAodi5nZXRTYW1wbGVDb3VudCgpKS50b0xvY2FsZVN0cmluZygpLHY9Pm5ldyBxcCh0aGlzLmZlYXR1cmUsdm9pZCAwLHpwKHYuZ2V0TG93VmFsdWUoKSksenAodi5nZXRIaWdoVmFsdWUoKSkpLHY9PnYuYXBwZW5kKCJyZWN0IikuYXR0cigic3Ryb2tlIiwiYmxhY2siKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoInN0cm9rZS13aWR0aCIsIjFweCIpLCh2LEEpPT52LmF0dHIoIngiLEEucG9zaXRpb24ueC1BLnNlbGVjdGlvbi5fZ3JvdXBzWzBdWzBdLndpZHRoLmJhc2VWYWwudmFsdWUvCjIpLmF0dHIoInkiLEEucG9zaXRpb24ueS1BLnNlbGVjdGlvbi5fZ3JvdXBzWzBdWzBdLmhlaWdodC5iYXNlVmFsLnZhbHVlLzIpLmF0dHIoIndpZHRoIixBLnNlbGVjdGlvbi5fZ3JvdXBzWzBdWzBdLndpZHRoLmJhc2VWYWwudmFsdWUpLmF0dHIoImhlaWdodCIsQS5zZWxlY3Rpb24uX2dyb3Vwc1swXVswXS5oZWlnaHQuYmFzZVZhbC52YWx1ZSkpfSxfcmVuZGVyUXVhbnRpbGVDaGFydChhLGMsZCl7Y29uc3QgZj1uZXcgUGxvdHRhYmxlLlBsb3RzLkxpbmUsZz1uZXcgUGxvdHRhYmxlLlBsb3RzLlNjYXR0ZXI7bGV0IGw9SW5maW5pdHksaz0tSW5maW5pdHk7YS5mb3JFYWNoKChxLHIpPT57Y29uc3QgdD1bXSx2PXEubGVuZ3RoO3EuZm9yRWFjaCgoQSx5KT0+e3ZhciB4PXpwKEEuZ2V0TG93VmFsdWUoKSk7Y29uc3QgQz16cChBLmdldEhpZ2hWYWx1ZSgpKTt4PGwmJihsPXgpO0M+ayYmKGs9Qyk7eD1uZXcgSG47eC5idWNrZXQ9QTt4LmRhdGFzZXRJbmRleD1yO3gucXVhbnRpbGU9MTAwKgp5L3Y7dC5wdXNoKHgpfSk7aWYoMDxxLmxlbmd0aCl7Y29uc3QgQT1uZXcgSGo7QS5zZXRMb3dWYWx1ZShxW3EubGVuZ3RoLTFdLmdldEhpZ2hWYWx1ZSgpKTtBLnNldEhpZ2hWYWx1ZShxW3EubGVuZ3RoLTFdLmdldEhpZ2hWYWx1ZSgpKTtBLnNldFNhbXBsZUNvdW50KHFbcS5sZW5ndGgtMV0uZ2V0U2FtcGxlQ291bnQoKSk7cT1uZXcgSG47cS5idWNrZXQ9QTtxLmRhdGFzZXRJbmRleD1yO3EucXVhbnRpbGU9MTAwO3QucHVzaChxKX1mLmFkZERhdGFzZXQobmV3IFBsb3R0YWJsZS5EYXRhc2V0KHQse25hbWU6Y1tyXX0pKTtnLmFkZERhdGFzZXQobmV3IFBsb3R0YWJsZS5EYXRhc2V0KHQse25hbWU6Y1tyXX0pKX0pO2NvbnN0IG09aXNGaW5pdGUobCkmJmlzRmluaXRlKGspP2s9PT1sPzE6KGstbCkvMTA6MDt2YXIgcD1bXTtpc0Zpbml0ZShsKSYmKHAucHVzaChsLW0pLGlzRmluaXRlKGspJiZwLnB1c2goayttKSk7ZD10aGlzLl9nZXRTY2FsZShkKTswPHAubGVuZ3RoJiZkLmRvbWFpbihwKTsKcD10aGlzLl9nZXRTY2FsZSghMSkuZG9tYWluKFstYS5sZW5ndGgrLjUsMV0pO2E9bmV3IFBsb3R0YWJsZS5BeGVzLk51bWVyaWMoZCwiYm90dG9tIik7YS5mb3JtYXR0ZXIodGhpcy5fY2hhcnRBeGlzU2NhbGVGb3JtYXR0ZXIoKSk7Zi54KHE9PnpwKHEuYnVja2V0LmdldExvd1ZhbHVlKCkpLGQpLnkocT0+LTEqcS5kYXRhc2V0SW5kZXgscCk7Zy54KHE9PnpwKHEuYnVja2V0LmdldExvd1ZhbHVlKCkpLGQpLnkocT0+LXEuZGF0YXNldEluZGV4LHApLnNpemUocT0+NTA9PT1xLnF1YW50aWxlPzE1OjgpLnN5bWJvbCgoKT0+UGxvdHRhYmxlLlN5bWJvbEZhY3Rvcmllcy5jcm9zcygpKTtmLmF0dHIoInN0cm9rZSIsImdyYXkiKS5hdHRyKCJvcGFjaXR5Iix0aGlzLl9jaGFydEFscGhhKTtnLmF0dHIoImZpbGwiLChxLHIsdCk9PnQubWV0YWRhdGEoKS5uYW1lLHRoaXMuZGF0YU1vZGVsLmdldENvbG9yU2NhbGUoKSkuYXR0cigib3BhY2l0eSIsdGhpcy5fY2hhcnRBbHBoYSk7cD1uZXcgUGxvdHRhYmxlLkNvbXBvbmVudHMuR3JvdXAoW2YsCmddKTt0aGlzLl9yZW5kZXJDaGFydChwLGEsbnVsbCxudWxsLG51bGwscT0+Zy5lbnRpdGllc0F0KHEpLHE9PnEucXVhbnRpbGUrIiU6ICIrdHAoenAocS5idWNrZXQuZ2V0TG93VmFsdWUoKSksMikudG9Mb2NhbGVTdHJpbmcoKSxxPT5uZXcgcXAodGhpcy5mZWF0dXJlLHZvaWQgMCx6cChxLmJ1Y2tldC5nZXRMb3dWYWx1ZSgpKSx6cChxLmJ1Y2tldC5nZXRIaWdoVmFsdWUoKSkpLHE9PnEuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJyIiwzKS5hdHRyKCJzdHJva2UiLCJibGFjayIpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigic3Ryb2tlLXdpZHRoIiwiMXB4IiksKHEscik9PnEuYXR0cigiY3giLHIucG9zaXRpb24ueCkuYXR0cigiY3kiLHIucG9zaXRpb24ueSkpfSxfcmVuZGVyQmFyQ2hhcnQoYSxjLGQsZil7Y29uc3QgZz13cChhKSxsPW5ldyBQbG90dGFibGUuU2NhbGVzLkxpbmVhcjt2YXIgaz1uZXcgUGxvdHRhYmxlLlNjYWxlcy5DYXRlZ29yeTtjb25zdCBtPXRoaXMuX2dldFNjYWxlKGQpOwprLmRvbWFpbihnKTtrPW5ldyBQbG90dGFibGUuQXhlcy5DYXRlZ29yeShrLCJib3R0b20iKTtjb25zdCBwPW5ldyBQbG90dGFibGUuQXhlcy5OdW1lcmljKG0sImxlZnQiKTtwLmZvcm1hdHRlcih0aGlzLl9jaGFydEF4aXNTY2FsZUZvcm1hdHRlcigpKTtmJiYoYT1vcShhKSk7bGV0IHE9MDtmPWEubWFwKCh0LHYpPT57dC5mb3JFYWNoKHk9Pnt5PXpwKHkuZ2V0U2FtcGxlQ291bnQoKSk7eT5xJiYocT15KX0pO2NvbnN0IEE9bmV3IFRwO0EubmFtZT1jW3ZdO0EucmF3QnVja2V0cz10O3JldHVybiBBfSk7dGhpcy5fdGFibGVEYXRhPVdwKGYsZyk7Y29uc3Qgcj1uZXcgUGxvdHRhYmxlLlBsb3RzLkJhcjthLmZvckVhY2goKHQsdik9PnIuYWRkRGF0YXNldChuZXcgUGxvdHRhYmxlLkRhdGFzZXQodCx7bmFtZTpjW3ZdfSkpKTtyLngodD0+Zy5pbmRleE9mKHhwKHQuZ2V0TGFiZWwoKSkpLGwpLnkodD0+dGhpcy5fZ2V0Q291bnRXaXRoRmxvb3IodCxxLGQpLG0pO3IuYXR0cigiZmlsbCIsCih0LHYsQSk9PkEubWV0YWRhdGEoKS5uYW1lLHRoaXMuZGF0YU1vZGVsLmdldENvbG9yU2NhbGUoKSkuYXR0cigib3BhY2l0eSIsdGhpcy5fY2hhcnRBbHBoYSk7dGhpcy5fcmVuZGVyQ2hhcnQocixrLHAsbnVsbCxudWxsLHQ9PnIuZW50aXRpZXNBdCh0KSx0PT54cCh0LmdldExhYmVsKCkpKyI6ICIrenAodC5nZXRTYW1wbGVDb3VudCgpKS50b0xvY2FsZVN0cmluZygpLHQ9Pm5ldyBxcCh0aGlzLmZlYXR1cmUsdC5nZXRMYWJlbCgpKSx0PT50LmFwcGVuZCgicmVjdCIpLmF0dHIoInN0cm9rZSIsImJsYWNrIikuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJzdHJva2Utd2lkdGgiLCIxcHgiKSwodCx2KT0+dC5hdHRyKCJ4Iix2LnBvc2l0aW9uLngtdi5zZWxlY3Rpb24uX2dyb3Vwc1swXVswXS53aWR0aC5iYXNlVmFsLnZhbHVlLzIpLmF0dHIoInkiLHYucG9zaXRpb24ueSkuYXR0cigid2lkdGgiLHYuc2VsZWN0aW9uLl9ncm91cHNbMF1bMF0ud2lkdGguYmFzZVZhbC52YWx1ZSkuYXR0cigiaGVpZ2h0IiwKdi5zZWxlY3Rpb24uX2dyb3Vwc1swXVswXS5oZWlnaHQuYmFzZVZhbC52YWx1ZSkpfSxfcmVuZGVyQ2RmQ2hhcnQoYSxjLGQpe2NvbnN0IGY9Yy5tYXAocj0+e3I9dGhpcy5kYXRhTW9kZWwuZ2V0RmVhdHVyZUNvbW1vblN0YXRzKHRoaXMuZmVhdHVyZSxyKTtyZXR1cm4gbnVsbCE9cj9yLmdldE51bU5vbk1pc3NpbmcoKSpyLmdldEF2Z051bVZhbHVlcygpOjB9KSxnPXdwKGEpLGw9e307Zy5mb3JFYWNoKChyLHQpPT57bFtyXT10fSk7Y29uc3Qgaz0obmV3IFBsb3R0YWJsZS5TY2FsZXMuTGluZWFyKS5kb21haW4oWzBdKTtkPXRoaXMuX2dldFNjYWxlKGQpLmRvbWFpbihbMF0pO2NvbnN0IG09bmV3IFBsb3R0YWJsZS5BeGVzLk51bWVyaWMoaywiYm90dG9tIikscD1uZXcgUGxvdHRhYmxlLkF4ZXMuTnVtZXJpYyhkLCJsZWZ0IikscT1uZXcgUGxvdHRhYmxlLlBsb3RzLkxpbmU7YT1hLm1hcCgocix0KT0+e2NvbnN0IHY9W10sQT1bXSx5PVtdO2xldCB4PS0xO3IuZm9yRWFjaChDPT57Qz0KQy5jbG9uZU1lc3NhZ2UoKTt5LnB1c2goQyl9KTswPHQmJnkuc29ydCgoQyxGKT0+bFt4cChDLmdldExhYmVsKCkpXS1sW3hwKEYuZ2V0TGFiZWwoKSldKTt5LmZvckVhY2goKEMsRik9Pntjb25zdCBEPWxbeHAoQy5nZXRMYWJlbCgpKV07Zm9yKHZhciBCPXgrMTtCPEQ7QisrKXt2YXIgRz1uZXcgS2o7Ry5zZXRMYWJlbChnW0JdKTtHLnNldExvd1JhbmsoQik7Ry5zZXRIaWdoUmFuayhCKTswPT09di5sZW5ndGg/Ry5zZXRTYW1wbGVDb3VudCgwKTpHLnNldFNhbXBsZUNvdW50KHZbdi5sZW5ndGgtMV0uZ2V0U2FtcGxlQ291bnQoKSk7di5wdXNoKEcpO0c9bmV3IEtqO0cuc2V0TGFiZWwoZ1tCXSk7Ry5zZXRMb3dSYW5rKEIpO0cuc2V0SGlnaFJhbmsoQik7Ry5zZXRTYW1wbGVDb3VudCgwKTtBLnB1c2goRyl9eD1EO0I9Qy5jbG9uZSgpO0EucHVzaChCKTswPT09Rj9DLnNldFNhbXBsZUNvdW50KHpwKEMuZ2V0U2FtcGxlQ291bnQoKSkvZlt0XSk6KEY9MDxEP0QtMTpGLTEsQy5zZXRTYW1wbGVDb3VudCh6cChDLmdldFNhbXBsZUNvdW50KCkpLwpmW3RdK3pwKHZbRl0uZ2V0U2FtcGxlQ291bnQoKSkpKTtDLnNldExvd1JhbmsoRCk7Qy5zZXRIaWdoUmFuayhEKTt2LnB1c2goQyl9KTtyPW5ldyBUcDtyLm5hbWU9Y1t0XTtyLnBlcmNCdWNrZXRzPXY7ci5yYXdCdWNrZXRzPUE7cmV0dXJuIHJ9KTt0aGlzLl90YWJsZURhdGE9VnAoYSk7Zm9yKGNvbnN0IHIgb2YgYSlxLmFkZERhdGFzZXQobmV3IFBsb3R0YWJsZS5EYXRhc2V0KHIucGVyY0J1Y2tldHMse25hbWU6ci5uYW1lfSkpO3EueChyPT56cChyLmdldExvd1JhbmsoKSksaykueShyPT56cChyLmdldFNhbXBsZUNvdW50KCkpLGQpO3EuYXR0cigic3Ryb2tlIiwocix0LHYpPT52Lm1ldGFkYXRhKCkubmFtZSx0aGlzLmRhdGFNb2RlbC5nZXRDb2xvclNjYWxlKCkpLmF0dHIoIm9wYWNpdHkiLHRoaXMuX2NoYXJ0QWxwaGEpO3RoaXMuX3JlbmRlckNoYXJ0KHEsbSxwLG51bGwsbnVsbCxyPT5xLmVudGl0aWVzQXQocikscj0+eHAoci5nZXRMYWJlbCgpKSsiOiAiK3RwKHpwKHIuZ2V0U2FtcGxlQ291bnQoKSksCjQpLnRvTG9jYWxlU3RyaW5nKCkscj0+bmV3IHFwKHRoaXMuZmVhdHVyZSxyLmdldExhYmVsKCkpLHI9PnIuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJyIiwzKS5hdHRyKCJzdHJva2UiLCJibGFjayIpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigic3Ryb2tlLXdpZHRoIiwiMXB4IiksKHIsdCk9PnIuYXR0cigiY3giLHQucG9zaXRpb24ueCkuYXR0cigiY3kiLHQucG9zaXRpb24ueSkpfSxfcmVuZGVyQ2hhcnQoYSxjLGQsZixnLGwsayxtLHAscSl7aWYoIXRoaXMuX3Nob3dUYWJsZSl7dmFyIHI9bmV3IFBsb3R0YWJsZS5Db21wb25lbnRzLlRhYmxlKFtbZyxkLGFdLFtudWxsLG51bGwsbnVsbF1dKSx0PW5ldyBQbG90dGFibGUuQ29tcG9uZW50cy5UYWJsZShbW251bGwsbnVsbF0sW251bGwsY11dKTtQbG90dGFibGUuUmVuZGVyQ29udHJvbGxlci5yZW5kZXJQb2xpY3koKTt2YXIgdj1kMy5zZWxlY3QodGhpcy4kLmNoYXJ0KSxBPWQzLnNlbGVjdCh0aGlzLiQueGF4aXMpLHk9ZDMuc2VsZWN0KHRoaXMuJC50b29sdGlwKTsKdGhpcy5hc3luYygoKT0+e3Yuc2VsZWN0QWxsKCIuY29tcG9uZW50IikucmVtb3ZlKCk7QS5zZWxlY3RBbGwoIi5jb21wb25lbnQiKS5yZW1vdmUoKTtyLnJlbmRlclRvKHRoaXMuJC5jaGFydCk7dGhpcy5fc2VsZWN0aW9uRWxlbT1wKGEuZm9yZWdyb3VuZCgpKTt0aGlzLl91cGRhdGVTZWxlY3Rpb25WaXNpYmlsaXR5KHRoaXMuc2VsZWN0aW9uKTt2Lm9uKCJtb3VzZWVudGVyIiwoKT0+e3RoaXMuX29uUG9pbnRlcj1uZXcgcGxvdHRhYmxlX2hlbHBlcnMuUG9pbnRlckludGVyYWN0aW9uO3RoaXMuX29uUG9pbnRlckVudGVyRnVuY3Rpb249eD0+e3g9bCh4KTswPHgubGVuZ3RoJiYoeD14Lm1hcChDPT5udWxsPT1DLmRhdGFzZXQubWV0YWRhdGEoKS5uYW1lfHwxPT09dGhpcy5kYXRhTW9kZWwuZ2V0RGF0YXNldE5hbWVzKCkubGVuZ3RoP2soQy5kYXR1bSk6Qy5kYXRhc2V0Lm1ldGFkYXRhKCkubmFtZSsiOiAiK2soQy5kYXR1bSkpLmpvaW4oIlxuIikseS50ZXh0KHgpLHkuc3R5bGUoIm9wYWNpdHkiLAoiMSIpKX07dGhpcy5fb25Qb2ludGVyLm9uUG9pbnRlck1vdmUodGhpcy5fb25Qb2ludGVyRW50ZXJGdW5jdGlvbik7dGhpcy5fb25Qb2ludGVyRXhpdEZ1bmN0aW9uPWZ1bmN0aW9uKCl7eS5zdHlsZSgib3BhY2l0eSIsIjAiKX07dGhpcy5fb25Qb2ludGVyLm9uUG9pbnRlckV4aXQodGhpcy5fb25Qb2ludGVyRXhpdEZ1bmN0aW9uKTt0aGlzLl9vblBvaW50ZXIuYXR0YWNoVG8oYSk7aWYoIlZhbHVlIGxpc3QgbGVuZ3RoIiE9PXRoaXMuY2hhcnRTZWxlY3Rpb24pe3RoaXMuX29uQ2xpY2s9bmV3IFBsb3R0YWJsZS5JbnRlcmFjdGlvbnMuQ2xpY2s7Y29uc3QgeD10aGlzO3RoaXMuX29uQ2xpY2tGdW5jdGlvbj1DPT57Qz1sKEMpOzA8Qy5sZW5ndGgmJihxKHguX3NlbGVjdGlvbkVsZW0sQ1swXSksQz1tKENbMF0uZGF0dW0pLHguX3NldFNlbGVjdGlvbihDKSl9O3RoaXMuX29uQ2xpY2sub25DbGljayh0aGlzLl9vbkNsaWNrRnVuY3Rpb24pO3RoaXMuX29uQ2xpY2suYXR0YWNoVG8oYSl9fSkub24oIm1vdXNlbGVhdmUiLAooKT0+e3RoaXMuX29uUG9pbnRlci5kZXRhY2hGcm9tKCk7dGhpcy5fb25DbGljay5kZXRhY2hGcm9tKCl9KTtudWxsIT1kJiZ0LmNvbHVtblBhZGRpbmcoci5jb21wb25lbnRBdCgxKS53aWR0aCgpKyhyLmNvbXBvbmVudEF0KDApP3IuY29tcG9uZW50QXQoMCkud2lkdGgoKTowKSk7dC5yZW5kZXJUbyh0aGlzLiQueGF4aXMpfSl9fSxfc2V0U2VsZWN0aW9uKGEpe2EuZXF1YWxzKHRoaXMuc2VsZWN0aW9uKSYmYS5jbGVhcigpO3RoaXMuc2VsZWN0aW9uPWE7dGhpcy5maXJlKCJmZWF0dXJlLXNlbGVjdCIse3NlbGVjdGlvbjphfSl9LF9nZXRCdWNrZXRzKGEsYyxkKXtyZXR1cm4gdXAoYSxjLGQpfSxfZ2V0U2NhbGUoYSl7cmV0dXJuIGE/bmV3IFBsb3R0YWJsZS5TY2FsZXMuTW9kaWZpZWRMb2c6bmV3IFBsb3R0YWJsZS5TY2FsZXMuTGluZWFyfSxfY2hhcnRBeGlzU2NhbGVGb3JtYXR0ZXIoKXtjb25zdCBhPVBsb3R0YWJsZS5Gb3JtYXR0ZXJzLnNob3J0U2NhbGUoKTtyZXR1cm4gYz0+CjFFMz5NYXRoLmFicyhjKT9TdHJpbmcoYyk6YShjKX0sX2dldENvdW50V2l0aEZsb29yKGEsYyxkKXthPXpwKGEuZ2V0U2FtcGxlQ291bnQoKSk7IWQmJjA8YSYmYS9jPHRoaXMuX21pbkJhckhlaWdodFJhdGlvJiYoYT1jKnRoaXMuX21pbkJhckhlaWdodFJhdGlvKTtyZXR1cm4gYX0sX3VwZGF0ZVNlbGVjdGlvblZpc2liaWxpdHkoYSl7dGhpcy5fc2VsZWN0aW9uRWxlbSYmdGhpcy5fc2VsZWN0aW9uRWxlbS5zdHlsZSgiZGlzcGxheSIsbnVsbD09YXx8YS5uYW1lIT09dGhpcy5mZWF0dXJlPyJub25lIjoiaW5saW5lIil9LF90b2dnbGVTaG93VGFibGUoKXt0aGlzLl9zaG93VGFibGU9IXRoaXMuX3Nob3dUYWJsZX0sX2dldENoYXJ0Q2xhc3MoYSl7cmV0dXJuIGE/ImhpZGVjaGFydCI6InNob3djaGFydCJ9LF9nZXRTaG93VGFibGVCdXR0b25UZXh0KGEpe3JldHVybiBhPyJzaG93IGNoYXJ0Ijoic2hvdyByYXcgZGF0YSJ9LF9nZXRDaGFydFN2Z0NsYXNzKGEpe3JldHVybiBhPyJjaGFydC1iaWciOgoiY2hhcnQtc21hbGwifSxfZ2V0WEF4aXNTdmdDbGFzcyhhKXtyZXR1cm4gYT8ieGF4aXMtYmlnIjoieGF4aXMtc21hbGwifSxfZ2V0VGFibGVEYXRhQ2xhc3MoYSl7cmV0dXJuIGE/ImRhdGEtbGlzdC1iaWciOiJkYXRhLWxpc3Qtc21hbGwifSxfcm93Q2xpY2soYSl7dGhpcy5fc2V0U2VsZWN0aW9uKG5ldyBxcCh0aGlzLmZlYXR1cmUsYS5jdXJyZW50VGFyZ2V0LmRhdGFWYWx1ZSkpfSxfZ2V0RW50cnlSb3dWYWx1ZShhKXtyZXR1cm4gYS52YWx1ZX0sX2dldEVudHJ5Um93Q2xhc3MoYSxjKXtsZXQgZD0iZGlhbG9nLXJvdyI7bnVsbCE9YyYmYy5uYW1lPT09dGhpcy5mZWF0dXJlJiZjLnN0cmluZ1ZhbHVlPT09YS52YWx1ZSYmKGQrPSIgc2VsZWN0ZWQiKTtyZXR1cm4gZH0sX2dldENvdW50Q2VsbENsYXNzKGEpe3JldHVybiJkYWlsb2ctcm93LWVudHJ5IGNvdW50LWNlbGwiKyhhPyIgd2VpZ2h0ZWQtY2VsbCI6IiIpfX0pOwo8L3NjcmlwdD4KCgo8ZG9tLW1vZHVsZSBpZD0iZmFjZXRzLW92ZXJ2aWV3LXRhYmxlIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIFtoaWRkZW5dIHsKICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICAgIH0KICAgICAgLmZlYXR1cmUtbmFtZSB7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBtYXgtd2lkdGg6IDQ4MHB4OwogICAgICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDsKICAgICAgICBtYXJnaW46IDAgMCA0cHggNHB4OwogICAgICB9CiAgICAgIC50YWJsZS1uYW1lIHsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIHdvcmQtd3JhcDpicmVhay13b3JkOwogICAgICAgIHBhZGRpbmc6IDRweCAwIDRweCA4cHg7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSg2MSwxNDAsMjA3LDAuMyk7CiAgICAgICAgYm9yZGVyOiBzb2xpZCAwLjVweCByZ2JhKDAsMCwwLDAuMSk7CiAgICAgIH0KICAgICAgLmZlYXR1cmUtaXJvbi1saXN0IHsKICAgICAgICBvdmVyZmxvdy14OiBoaWRkZW4gIWltcG9ydGFudDsKICAgICAgICBoZWlnaHQ6IDgwMHB4OwogICAgICB9CiAgICAgIC5jaGFydC1jb2x1bW4gewogICAgICAgIHdpZHRoOiAyODBweDsKICAgICAgICBtaW4td2lkdGg6IDI4MHB4OwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgfQogICAgICAuY2hhcnQtY29sdW1uLmhlYWRlci1jZWxsIHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDYxLDE0MCwyMDcsMC4xKTsKICAgICAgICBib3JkZXItdG9wOiBzb2xpZCAwLjVweCByZ2JhKDAsMCwwLDAuMSk7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogc29saWQgMC41cHggcmdiYSgwLDAsMCwwLjEpOwogICAgICAgIGJvcmRlci1yaWdodDogc29saWQgMC41cHggcmdiYSgwLDAsMCwwLjEpOwogICAgICAgIHBhZGRpbmctbGVmdDogOHB4OwogICAgICB9CiAgICAgIC5udW1lcmljLXJvdyB7CiAgICAgICAgbWluLWhlaWdodDogODBweDsKICAgICAgICBkaXNwbGF5OiB0YWJsZS1yb3c7CiAgICAgIH0KICAgICAgLmNhdGVnb3JpY2FsLXJvdyB7CiAgICAgICAgbWluLWhlaWdodDogOThweDsKICAgICAgICBkaXNwbGF5OiB0YWJsZS1yb3c7CiAgICAgIH0KICAgICAgLnRhYmxlLWNlbGwgewogICAgICAgIGRpc3BsYXk6IHRhYmxlLWNlbGw7CiAgICAgICAgdmVydGljYWwtYWxpZ246IHRvcDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMmVtOwogICAgICB9CiAgICAgIC5jaGFydC1jb2x1bW4udGFibGUtY2VsbCB7CiAgICAgICAgZGlzcGxheTogdGFibGUtY2VsbDsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wOwogICAgICAgIHBhZGRpbmc6IDEwcHggMCAwIDIwcHgKICAgICAgICBtYXJnaW4tcmlnaHQ6IDEwcHg7CiAgICAgIH0KICAgICAgLmhlYWRlci1jZWxsIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgbWluLWhlaWdodDogNjBweDsKICAgICAgfQogICAgICBwYXBlci1jaGVja2JveCB7CiAgICAgICAgLS1wYXBlci1jaGVja2JveC1zaXplOiAxMnB4OwogICAgICAgIC0tcGFwZXItY2hlY2tib3gtbGFiZWwtc3BhY2luZzogMnB4OwogICAgICB9CiAgICAgIC5jb250cm9sLWhvbGRlciB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQogICAgICAuY2hlY2tib3gtaG9sZGVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIHBhZGRpbmctYm90dG9tOiAycHg7CiAgICAgIH0KICAgICAgLmNoYXJ0LWNoZWNrYm94IHsKICAgICAgICBwYWRkaW5nLXJpZ2h0OiA4cHg7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICB9CiAgICAgICN3ZWlnaHRib3ggewogICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICAgICAgfQogICAgICBwYXBlci1kcm9wZG93bi1tZW51IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICB3aWR0aDogMTUwcHg7CiAgICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItbGFiZWwgLS1wYXBlci1pbnB1dC1jb250YWluZXItaW5wdXQ6IHsKICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICB9CiAgICAgIH0KICAgICAgLmhpZGRlbiB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQogICAgPC9zdHlsZT4KICAgIDxkaXYgY2xhc3MkPSJbW19nZXRUYWJsZVdyYXBwZXJDbGFzcyhmZWF0dXJlcyldXSI+CiAgICAgIDxkaXYgY2xhc3M9ImhlYWRlci1yb3ciPgogICAgICAgIDxkaXYgY2xhc3M9ImhlYWRlci1jZWxsIHRhYmxlLWNlbGwiPgogICAgICAgICAgPGRpdiBjbGFzcz0idGFibGUtbmFtZSI+W1tfZ2V0VGl0bGUobnVtZXJpYyldXSBGZWF0dXJlcyAoW1tfZ2V0RmVhdHVyZUNvdW50VGV4dChkYXRhTW9kZWwsIG51bWVyaWMsIGZlYXR1cmVzKV1dKQogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZmFjZXRzLW92ZXJ2aWV3LXJvdy1sZWdlbmQgbnVtZXJpYz0iW1tudW1lcmljXV0iIHNob3ctd2VpZ2h0ZWQ9IltbX3Nob3dXZWlnaHRlZF1dIiBoYXMtY3VzdG9tPSJbW19oYXNDdXN0b21TdGF0cyhkYXRhTW9kZWwpXV0iIGRhdGEtbW9kZWw9IltbZGF0YU1vZGVsXV0iPgogICAgICAgICAgPC9mYWNldHMtb3ZlcnZpZXctcm93LWxlZ2VuZD4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJ0YWJsZS1jZWxsIGNoYXJ0LWNvbHVtbiBoZWFkZXItY2VsbCI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJjb250cm9sLWhvbGRlciI+CiAgICAgICAgICAgIDxwYXBlci1kcm9wZG93bi1tZW51IGxhYmVsPSJDaGFydCB0byBzaG93Ij4KICAgICAgICAgICAgICA8cGFwZXItbGlzdGJveCBjbGFzcz0iZHJvcGRvd24tY29udGVudCIgc2VsZWN0ZWQ9Int7X2NoYXJ0U2VsZWN0aW9ufX0iIGF0dHItZm9yLXNlbGVjdGVkPSJ2YWx1ZSIgc2xvdD0iZHJvcGRvd24tY29udGVudCI+CiAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19jaGFydFNlbGVjdGlvblR5cGVzXV0iPgogICAgICAgICAgICAgICAgICA8cGFwZXItaXRlbSB2YWx1ZT0iW1tpdGVtXV0iPltbaXRlbV1dPC9wYXBlci1pdGVtPgogICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICA8L3BhcGVyLWxpc3Rib3g+CiAgICAgICAgICAgIDwvcGFwZXItZHJvcGRvd24tbWVudT4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2hlY2tib3gtaG9sZGVyIj4KICAgICAgICAgICAgICA8cGFwZXItY2hlY2tib3ggY2xhc3M9ImNoYXJ0LWNoZWNrYm94IiBpZD0ibG9nYm94IiBjaGVja2VkPSJ7e19sb2dTY2FsZX19Ij5sb2c8L3BhcGVyLWNoZWNrYm94PgogICAgICAgICAgICAgIDxwYXBlci1jaGVja2JveCBjbGFzcz0iY2hhcnQtY2hlY2tib3giIGlkPSJleHBhbmRib3giIGNoZWNrZWQ9Int7X2V4cGFuZENoYXJ0c319Ij5leHBhbmQ8L3BhcGVyLWNoZWNrYm94PgogICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaGFzV2VpZ2h0ZWRIaXN0b2dyYW0oZmVhdHVyZXMpXV0iPgogICAgICAgICAgICAgICAgPHBhcGVyLWNoZWNrYm94IGNsYXNzPSJjaGFydC1jaGVja2JveCIgaWQ9IndlaWdodGJveCIgY2hlY2tlZD0ie3tfc2hvd1dlaWdodGVkfX0iPndlaWdodGVkPC9wYXBlci1jaGVja2JveD4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaGFzTXVsdGlwbGVEYXRhc2V0cyhkYXRhTW9kZWwpXV0iPgogICAgICAgICAgICAgICAgPHBhcGVyLWNoZWNrYm94IGNsYXNzPSJjaGFydC1jaGVja2JveCIgaWQ9InBlcmNlbnRib3giIGNoZWNrZWQ9Int7X3Nob3dQZXJjZW50YWdlfX0iIGRpc2FibGVkPSJbW19jaGFydFNlbGVjdGlvbkhhc1F1YW50aWxlcyhfY2hhcnRTZWxlY3Rpb24pXV0iPnBlcmNlbnRhZ2VzPC9wYXBlci1jaGVja2JveD4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgPGlyb24tbGlzdCBpdGVtcz0iW1tmZWF0dXJlc11dIiBhcz0iZmVhdHVyZSIgY2xhc3M9ImZlYXR1cmUtaXJvbi1saXN0Ij4KICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICA8ZGl2IGNsYXNzJD0iW1tfZ2V0VGFibGVSb3dDbGFzcyhudW1lcmljKV1dIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idGFibGUtY2VsbCI+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmVhdHVyZS1uYW1lIj5bW19nZXRGZWF0dXJlTmFtZShmZWF0dXJlKV1dPC9kaXY+CiAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tfZ2V0RGF0YXNldHMoZGF0YU1vZGVsKV1dIiBhcz0iZGF0YXNldCIgaW5kZXgtYXM9ImRhdGFzZXRJbmRleCI+CiAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICA8ZmFjZXRzLW92ZXJ2aWV3LXJvdy1zdGF0cyBzdGF0cz0iW1tfZ2V0U3RhdHMoZGF0YU1vZGVsLCBkYXRhc2V0LCBmZWF0dXJlKV1dIiBjdXN0b20tc3RhdHM9IltbX2dldEFsbEN1c3RvbVN0YXRzKGRhdGFNb2RlbCwgZmVhdHVyZSldXSIgc2hvdy13ZWlnaHRlZD0iW1tfc2hvd1dlaWdodGVkXV0iIGhhcy1jdXN0b209IltbX2hhc0N1c3RvbVN0YXRzKGRhdGFNb2RlbCldXSIgZGF0YS1tb2RlbD0iW1tkYXRhTW9kZWxdXSIgZGF0YXNldC1pbmRleD0iW1tkYXRhc2V0SW5kZXhdXSIgY29tcGFyZS1tb2RlPSJbW2NvbXBhcmVNb2RlXV0iPgogICAgICAgICAgICAgICAgICA8L2ZhY2V0cy1vdmVydmlldy1yb3ctc3RhdHM+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcyQ9IltbX2dldENoYXJ0Q2xhc3MoX2V4cGFuZENoYXJ0cyldXSI+CiAgICAgICAgICAgICAgPGZhY2V0cy1vdmVydmlldy1jaGFydCBkYXRhPSJbW19nZXRDaGFydERhdGEoZGF0YU1vZGVsLCBmZWF0dXJlKV1dIiBkYXRhLW1vZGVsPSJbW2RhdGFNb2RlbF1dIiBmZWF0dXJlPSJbW19nZXRGZWF0dXJlTmFtZShmZWF0dXJlKV1dIiBzZWxlY3Rpb249Int7ZmVhdHVyZVNsaWNlU2VsZWN0aW9ufX0iIGxvZy1zY2FsZT0iW1tfbG9nU2NhbGVdXSIgc2hvdy13ZWlnaHRlZD0iW1tfc2hvd1dlaWdodGVkXV0iIHNob3ctcGVyY2VudGFnZT0iW1tfc2hvd1BlcmNlbnRhZ2VdXSIgY2hhcnQtc2VsZWN0aW9uPSJbW19jaGFydFNlbGVjdGlvbl1dIiBleHBhbmQtY2hhcnQ9IltbX2V4cGFuZENoYXJ0c11dIj4KICAgICAgICAgICAgICA8L2ZhY2V0cy1vdmVydmlldy1jaGFydD4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L2lyb24tbGlzdD4KICAgIDwvZGl2PgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT4KPHNjcmlwdD4vL35+V0VCUEFUSH5+L2ZhY2V0cy1vdmVydmlldy9jb21wb25lbnRzL2ZhY2V0cy1vdmVydmlldy10YWJsZS9mYWNldHMtb3ZlcnZpZXctdGFibGUuanMKUG9seW1lcih7aXM6ImZhY2V0cy1vdmVydmlldy10YWJsZSIscHJvcGVydGllczp7ZGF0YU1vZGVsOnt0eXBlOk9iamVjdCxvYnNlcnZlcjoiX2hhbmRsZVJlc2l6ZSJ9LGZlYXR1cmVzOnt0eXBlOkFycmF5LG9ic2VydmVyOiJfaGFuZGxlUmVzaXplIn0sZmVhdHVyZVNsaWNlU2VsZWN0aW9uOnt0eXBlOk9iamVjdCxub3RpZnk6ITB9LG51bWVyaWM6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sY29tcGFyZU1vZGU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sX2xvZ1NjYWxlOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LF9leHBhbmRDaGFydHM6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxvYnNlcnZlcjoiX2hhbmRsZVJlc2l6ZSJ9LF9zaG93V2VpZ2h0ZWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sX3Nob3dQZXJjZW50YWdlOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LF9jaGFydFNlbGVjdGlvbjp7dHlwZTpTdHJpbmcsdmFsdWU6IlN0YW5kYXJkIn0sX2VuYWJsZUxvZ1NjYWxlOnt0eXBlOkJvb2xlYW4sCnZhbHVlOiEwfSxfY2hhcnRTZWxlY3Rpb25UeXBlczp7dHlwZTpBcnJheSxjb21wdXRlZDoiX2NvbXB1dGVDaGFydFNlbGVjdGlvblR5cGVzKG51bWVyaWMsIGRhdGFNb2RlbCwgZmVhdHVyZXMpIn0sX21heEhlaWdodDp7dHlwZTpOdW1iZXIsdmFsdWU6ODAwLHJlYWRPbmx5OiEwfSxfZXhwYW5kZWRSb3dIZWlnaHQ6e3R5cGU6TnVtYmVyLHZhbHVlOjMzMCxyZWFkT25seTohMH0sX3Jvd0hlaWdodDp7dHlwZTpOdW1iZXIsdmFsdWU6MTAwLHJlYWRPbmx5OiEwfX0sX2hhbmRsZVJlc2l6ZSgpe2NvbnN0IGE9dGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoImlyb24tbGlzdCIpO2EmJnRoaXMuX2V4cGFuZGVkUm93SGVpZ2h0JiZ0aGlzLl9yb3dIZWlnaHQmJnRoaXMuX21heEhlaWdodCYmdGhpcy5mZWF0dXJlcyYmKGEuc3R5bGUuaGVpZ2h0PU1hdGgubWluKCh0aGlzLmZlYXR1cmVzP3RoaXMuZmVhdHVyZXMubGVuZ3RoOjApKih0aGlzLl9leHBhbmRDaGFydHM/dGhpcy5fZXhwYW5kZWRSb3dIZWlnaHQ6CnRoaXMuX3Jvd0hlaWdodCksdGhpcy5fbWF4SGVpZ2h0KSsicHgiLGEuZmlyZSgiaXJvbi1yZXNpemUiKSl9LF9jb21wdXRlQ2hhcnRTZWxlY3Rpb25UeXBlcyhhLGMsZCl7Y29uc3QgZj1bIlN0YW5kYXJkIl07YSYmZi5wdXNoKCJRdWFudGlsZXMiKTswIT09ZC5sZW5ndGgmJk5wKHRoaXMuX2dldENoYXJ0RGF0YShjLGRbMF0pKSYmZi5wdXNoKCJWYWx1ZSBsaXN0IGxlbmd0aCIpO2MuZG9lc0NvbnRhaW5GZWF0dXJlTGlzdExlbmd0aERhdGEoKSYmZi5wdXNoKCJGZWF0dXJlIGxpc3QgbGVuZ3RoIik7cmV0dXJuIGYuY29uY2F0KGMuZ2V0RXh0cmFIaXN0b2dyYW1OYW1lcyhkKSl9LGF0dGFjaGVkKCl7c2V0VGltZW91dCgoKT0+e3RoaXMuX2hhbmRsZVJlc2l6ZSgpfSwxRTMpfSxfY2hhcnRTZWxlY3Rpb25IYXNRdWFudGlsZXMoYSl7cmV0dXJuIFlwKGEpfSxfZ2V0VGl0bGUoYSl7cmV0dXJuIGE/Ik51bWVyaWMiOiJDYXRlZ29yaWNhbCJ9LF9nZXRGZWF0dXJlTmFtZShhKXtyZXR1cm4gYS5nZXROYW1lKCl9LApfaGFzQ3VzdG9tU3RhdHMoYSl7cmV0dXJuIG51bGw9PWE/ITE6YS5kb2VzQ29udGFpbkN1c3RvbVN0YXRzKCl9LF9oYXNNdWx0aXBsZURhdGFzZXRzKGEpe3JldHVybiBudWxsPT1hPyExOjE8YS5nZXREYXRhc2V0TmFtZXMoKS5sZW5ndGh9LF9nZXRBbGxDdXN0b21TdGF0cyhhLGMpe2NvbnN0IGQ9W10sZj17fTthLmdldERhdGFzZXRGZWF0dXJlU3RhdGlzdGljcygpLmdldERhdGFzZXRzTGlzdCgpLmZvckVhY2goZz0+e2NvbnN0IGw9YS5nZXRGZWF0dXJlSW5kZXgoZy5nZXROYW1lKCksYy5nZXROYW1lKCkpO251bGwhPWwmJihnPWcuZ2V0RmVhdHVyZXNMaXN0KClbbF0uZ2V0Q3VzdG9tU3RhdHNMaXN0KCkpJiZnLmZvckVhY2goaz0+e2Zbay5nZXROYW1lKCldfHwoZltrLmdldE5hbWUoKV09ITAsZC5wdXNoKGspKX0pfSk7cmV0dXJuIGR9LF9nZXREYXRhc2V0cyhhKXtyZXR1cm4gYT9hLmdldERhdGFzZXRGZWF0dXJlU3RhdGlzdGljcygpLmdldERhdGFzZXRzTGlzdCgpOm51bGx9LApfZ2V0U3RhdHMoYSxjLGQpe3JldHVybiBhJiZjJiZkP2EuZ2V0RmVhdHVyZShkLmdldE5hbWUoKSxjLmdldE5hbWUoKSk6bnVsbH0sX2dldENoYXJ0RGF0YShhLGMpe3JldHVybiBhJiZjP2EuZ2V0RGF0YXNldEhpc3RvZ3JhbXNGb3JGZWF0dXJlKGMuZ2V0TmFtZSgpKTpbXX0sX2dldEZlYXR1cmVDb3VudFRleHQoYSxjLGQpe2E9YT9hLmdldE51bVVuaXF1ZUZlYXR1cmVzQnlUeXBlKGMpOjA7cmV0dXJuIEVwKGQubGVuZ3RoLGEpfSxfaGFzV2VpZ2h0ZWRIaXN0b2dyYW0oYSl7cmV0dXJuIDA9PT1hLmxlbmd0aD8hMTpMcCh0aGlzLl9nZXRDaGFydERhdGEodGhpcy5kYXRhTW9kZWwsYVswXSkpfSxfZ2V0Q2hhcnRDbGFzcyhhKXtsZXQgYz0iY2hhcnQtY29sdW1uICI7YXx8KGMrPSJ0YWJsZS1jZWxsICIpO3JldHVybiBjfSxfZ2V0VGFibGVXcmFwcGVyQ2xhc3MoYSl7cmV0dXJuIGEmJjAhPT1hLmxlbmd0aD8iIjoiaGlkZGVuIn0sX2dldFRhYmxlUm93Q2xhc3MoYSl7cmV0dXJuIGE/CiJudW1lcmljLXJvdyI6ImNhdGVnb3JpY2FsLXJvdyJ9fSk7Cjwvc2NyaXB0PgoKCgoKCjxzY3JpcHQ+Ly9+fldFQlBBVEh+fi9pcm9uLXZhbGlkYXRvci1iZWhhdmlvci9pcm9uLXZhbGlkYXRvci1iZWhhdmlvci5odG1sLmpzClBvbHltZXIuSXJvblZhbGlkYXRvckJlaGF2aW9yPXtyZWFkeTpmdW5jdGlvbigpe25ldyBQb2x5bWVyLklyb25NZXRhKHt0eXBlOiJ2YWxpZGF0b3IiLGtleTp0aGlzLmlzfHx0aGlzLmNvbnN0cnVjdG9yLmlzLHZhbHVlOnRoaXN9KX0sdmFsaWRhdGU6ZnVuY3Rpb24oKXt9fTsKPC9zY3JpcHQ+CgoKPHNjcmlwdD4vL35+V0VCUEFUSH5+L2ZhY2V0cy1vdmVydmlldy9jb21wb25lbnRzL2ZhY2V0cy1vdmVydmlldy9mYWNldHMtb3ZlcnZpZXctZmlsdGVyLXZhbGlkYXRvci5odG1sLmpzClBvbHltZXIoe2lzOiJmYWNldHMtb3ZlcnZpZXctZmlsdGVyLXZhbGlkYXRvciIsYmVoYXZpb3JzOltQb2x5bWVyLklyb25WYWxpZGF0b3JCZWhhdmlvcl0sdmFsaWRhdGU6ZnVuY3Rpb24oYSl7dHJ5e3JldHVybiBuZXcgUmVnRXhwKGEpLCEwfWNhdGNoKGMpe3JldHVybiExfX19KTsKPC9zY3JpcHQ+CgoKPGRvbS1tb2R1bGUgaWQ9ImZhY2V0cy1vdmVydmlldyI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZQogICAgICAgIGZvbnQtc2l6ZTogMTBwdDsKICAgICAgfQogICAgICAuY29udHJvbHMgewogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjM0LDIzNCwyMzQsMC4yKTsKICAgICAgICBib3JkZXItYm90dG9tOiBzb2xpZCAwLjVweCByZ2JhKDAsMCwwLDAuMik7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBoZWlnaHQ6IDYwcHg7CiAgICAgICAgcGFkZGluZy1sZWZ0OiAyMHB4OwoKICAgICAgfQogICAgICAuZmVhdHVyZS1jaGVja2JveGVzIHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDIzNCwyMzQsMjM0LDAuMik7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogc29saWQgMC41cHggcmdiYSgwLDAsMCwwLjIpOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICAgIHBhZGRpbmc6ICA4cHggMCA4cHggMjBweDsKICAgICAgfQogICAgICAuZmVhdHVyZS1jaGVja2JveCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBwYWRkaW5nOiAwIDAgMCAxNnB4OwogICAgICB9CiAgICAgIHBhcGVyLWNoZWNrYm94IHsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgIH0KICAgICAgLmlucHV0LWNvbnRyb2wgewogICAgICAgIC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWxhYmVsIC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWlucHV0OiB7CiAgICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgfTsKICAgICAgfQogICAgICAuZmVhdHVyZXMtdGV4dCB7CiAgICAgICAgbGluZS1oZWlnaHQ6IDE7CiAgICAgICAgcGFkZGluZzogMXB4IDAgMCAwOwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgfQogICAgICAubGVmdC1kcm9wZG93biB7CiAgICAgICAgcGFkZGluZzogMCAxMHB4IDAgMDsKICAgICAgfQogICAgICAubWlkZGxlLWNoZWNrYm94IHsKICAgICAgICBtYXJnaW4tdG9wOiAzMHB4OwogICAgICAgIHBhZGRpbmc6IDAgMTBweDsKICAgICAgfQogICAgICAucmlnaHQtaW5wdXQgewogICAgICAgIHdpZHRoOiAzMDBweDsKICAgICAgICBwYWRkaW5nOiAwIDEwcHg7CiAgICAgIH0KICAgICAgLmZlYXR1cmUtaXJvbi1saXN0IHsKICAgICAgICBtYXgtaGVpZ2h0OiA4MDBweDsKICAgICAgICBvdmVyZmxvdzogYXV0bzsKICAgICAgfQogICAgICAuZmVhdHVyZS1jb2x1bW4gewogICAgICAgIHdpZHRoOiAyMDBweDsKICAgICAgICBtYXgtd2lkdGg6IDIwMHB4OwogICAgICAgIG92ZXJmbG93LXdyYXA6IGJyZWFrLXdvcmQ7CiAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsKICAgICAgfQogICAgICAubGVnZW5kLWNvbHVtbiB7CiAgICAgICAgd2lkdGg6IDEyMHB4OwogICAgICB9CiAgICAgIC5zdGF0cy1jb2x1bW4gewogICAgICAgIHdpZHRoOiAxNTBweDsKICAgICAgICBtYXgtd2lkdGg6IDE1MHB4OwogICAgICAgIG92ZXJmbG93LXdyYXA6IGJyZWFrLXdvcmQ7CiAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7CiAgICAgIH0KICAgICAgLmNoYXJ0LWNvbHVtbiB7CiAgICAgICAgd2lkdGg6IDU4MHB4OwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgfQogICAgICAudGFibGUtcm93IHsKICAgICAgICBkaXNwbGF5OiB0YWJsZS1yb3c7CiAgICAgIH0KICAgICAgLnRhYmxlLWNlbGwgewogICAgICAgIGRpc3BsYXk6IHRhYmxlLWNlbGw7CiAgICAgICAgdmVydGljYWwtYWxpZ246IHRvcDsKICAgICAgICBwYWRkaW5nOiAxMHB4IDVweCAwCiAgICAgIH0KICAgICAgLmNoYXJ0LWNvbHVtbi50YWJsZS1jZWxsIHsKICAgICAgICBkaXNwbGF5OiB0YWJsZS1jZWxsOwogICAgICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7CiAgICAgICAgcGFkZGluZzogMTBweCAwIDAgMjBweAogICAgICB9CiAgICAgIC5oZWFkZXItcm93IHsKICAgICAgICBjbGVhcjogYm90aDsKICAgICAgfQogICAgICAuaGVhZGVyLXJvdyA+IC50YWJsZS1jZWxsIHsKICAgICAgICBmb250LXNpemU6IDE0cHQ7CiAgICAgICAgcGFkZGluZzogMCA1cHggMDsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgYmxhY2s7CiAgICAgIH0KICAgICAgLnN0YXRzLWhlYWRlci10ZXh0IHsKICAgICAgICB0ZXh0LWFsaWduOiByaWdodDsKICAgICAgfQogICAgICAuY2hhcnQtaGVhZGVyLXRleHQgewogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgfQogICAgICAudGFibGUtaG9sZGVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtd3JhcDogd3JhcDsKICAgICAgICBvdmVyZmxvdy14OiBhdXRvOwogICAgICAgIG1hcmdpbi1sZWZ0OiAzMHB4OwogICAgICB9CiAgICAgIC50YWJsZS1sZWZ0IHsKICAgICAgICBtYXJnaW46IDIwcHggMjBweCAwIDA7CiAgICAgIH0KICAgICAgLnRhYmxlLXJpZ2h0IHsKICAgICAgICBtYXJnaW46IDIwcHggMCAwIDA7CiAgICAgIH0KICAgICAgLmhpZGRlbiB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQogICAgICAubGVnZW5kLWhvbGRlciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBtYXJnaW46IDhweCAwIDAgMzhweDsKICAgICAgfQogICAgICAubGVnZW5kLWJveCB7CiAgICAgICAgd2lkdGg6IDhweDsKICAgICAgICBoZWlnaHQ6IDhweDsKICAgICAgICBtYXJnaW4tdG9wOiA2cHg7CiAgICAgIH0KICAgICAgLmxlZ2VuZC1yb3cgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIH0KICAgICAgLmxlZ2VuZC1uYW1lIHsKICAgICAgICBtYXJnaW46IDNweCAxMHB4IDAgNXB4OwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgfQogICAgICAvKiBHaXZlIG1pbiBoZWlnaHQgdG8gcGxhY2Vob2xkZXIgaW4gcGFwZXItaW5wdXQgdG8gZ2V0IGFyb3VuZCBjb2xhYiBlbWJlZGRpbmcKICAgICAgICogYWxpZ25tZW50IGlzc3VlLgogICAgICAgKi8KICAgICAgOmhvc3QgcGFwZXItaW5wdXQtY29udGFpbmVyID4gLmZsb2F0ZWQtbGFiZWwtcGxhY2Vob2xkZXIgewogICAgICAgIG1pbi1oZWlnaHQ6IDIwcHg7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2RhdGFNb2RlbF1dIj4KICAgICAgPGRpdiBjbGFzcyQ9IltbX2dldENvbnRyb2xzV3JhcHBlckNsYXNzKF9kYXRhTW9kZWwpXV0iPgogICAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2xzIj4KICAgICAgICAgIDxwYXBlci1kcm9wZG93bi1tZW51IGNsYXNzPSJsZWZ0LWRyb3Bkb3duIGlucHV0LWNvbnRyb2wiIGxhYmVsPSJTb3J0IGJ5Ij4KICAgICAgICAgICAgPHBhcGVyLWxpc3Rib3ggY2xhc3M9ImRyb3Bkb3duLWNvbnRlbnQiIHNlbGVjdGVkPSJ7e19zb3J0T3JkZXJ9fSIgc2xvdD0iZHJvcGRvd24tY29udGVudCI+CiAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tfc29ydE9wdGlvbnNdXSIgYXM9Im9wdGlvbiI+CiAgICAgICAgICAgICAgICA8cGFwZXItaXRlbT5bW29wdGlvbi5uYW1lXV08L3BhcGVyLWl0ZW0+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPC9wYXBlci1saXN0Ym94PgogICAgICAgICAgPC9wYXBlci1kcm9wZG93bi1tZW51PgogICAgICAgICAgPHBhcGVyLWNoZWNrYm94IG5vaW5rIGNsYXNzPSJtaWRkbGUtY2hlY2tib3giIGNoZWNrZWQ9Int7X3JldmVyc2VPcmRlcn19Ij4KICAgICAgICAgICAgUmV2ZXJzZSBvcmRlcgogICAgICAgICAgPC9wYXBlci1jaGVja2JveD4KICAgICAgICAgIDxwYXBlci1pbnB1dCBjbGFzcz0icmlnaHQtaW5wdXQgaW5wdXQtY29udHJvbCIgbGFiZWw9IkZlYXR1cmUgc2VhcmNoIChyZWdleCBlbmFibGVkKSIgdmFsdWU9Int7c2VhcmNoU3RyaW5nfX0iIGF1dG8tdmFsaWRhdGU9InRydWUiIHZhbGlkYXRvcj0iZmlsdGVyLXZhbGlkYXRvciI+CiAgICAgICAgICAgIDxmYWNldHMtb3ZlcnZpZXctZmlsdGVyLXZhbGlkYXRvciB2YWxpZGF0b3ItbmFtZT0iZmlsdGVyLXZhbGlkYXRvciI+CiAgICAgICAgICAgIDwvZmFjZXRzLW92ZXJ2aWV3LWZpbHRlci12YWxpZGF0b3I+CiAgICAgICAgICA8L3BhcGVyLWlucHV0PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImZlYXR1cmUtY2hlY2tib3hlcyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJmZWF0dXJlcy10ZXh0Ij5GZWF0dXJlczogPC9kaXY+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19mZWF0dXJlU3BlY0FycmF5XV0iIGFzPSJzcGVjQW5kTGlzdCI+CiAgICAgICAgICA8ZGl2PgogICAgICAgICAgICA8cGFwZXItY2hlY2tib3ggbm9pbmsgY2hlY2tlZD0idHJ1ZSIgY2xhc3M9ImZlYXR1cmUtY2hlY2tib3giIGlkPSJbW19nZXRTcGVjQ2hlY2tib3hJZChzcGVjQW5kTGlzdCldXSIgb24tY2hhbmdlPSJfZmVhdHVyZVNwZWNDaGVjayI+CiAgICAgICAgICAgICAgW1tfZ2V0U3BlY0NoZWNrYm94VGV4dChzcGVjQW5kTGlzdCldXQogICAgICAgICAgICA8L3BhcGVyLWNoZWNrYm94PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaGFzTXVsdGlwbGVEYXRhc2V0cyhfZGF0YU1vZGVsKV1dIj4KICAgICAgICA8ZGl2IGNsYXNzPSJsZWdlbmQtaG9sZGVyIj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX2dldERhdGFzZXRzKF9kYXRhTW9kZWwpXV0iIGFzPSJkYXRhc2V0IiBpbmRleC1hcz0iZGF0YXNldEluZGV4Ij4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGVnZW5kLXJvdyI+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGVnZW5kLWJveCIgc3R5bGU9IltbX2dldExlZ2VuZEJveFN0eWxlKF9kYXRhTW9kZWwsIGRhdGFzZXRJbmRleCldXSI+PC9kaXY+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGVnZW5kLW5hbWUiPltbX2dldERhdGFzZXROYW1lKF9kYXRhTW9kZWwsIGRhdGFzZXRJbmRleCldXTwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDxkaXYgY2xhc3M9InRhYmxlLWhvbGRlciI+CiAgICAgICAgPGZhY2V0cy1vdmVydmlldy10YWJsZSBmZWF0dXJlcz0iW1tfZ2V0TnVtZXJpY0ZlYXR1cmVMaXN0SXRlbXMoX2RhdGFNb2RlbCwgc2VhcmNoU3RyaW5nLCBfc29ydE9yZGVyLCBfcmV2ZXJzZU9yZGVyLCBfZmVhdHVyZVNwZWNDaGVja2JveGVzKV1dIiBkYXRhLW1vZGVsPSJbW19kYXRhTW9kZWxdXSIgZmVhdHVyZS1zbGljZS1zZWxlY3Rpb249Int7ZmVhdHVyZVNsaWNlU2VsZWN0aW9ufX0iIG51bWVyaWM9InRydWUiIGNsYXNzPSJ0YWJsZS1sZWZ0IiBjb21wYXJlLW1vZGU9IltbY29tcGFyZU1vZGVdXSI+CiAgICAgICAgPC9mYWNldHMtb3ZlcnZpZXctdGFibGU+CiAgICAgICAgPGZhY2V0cy1vdmVydmlldy10YWJsZSBmZWF0dXJlcz0iW1tfZ2V0Tm9uTnVtZXJpY0ZlYXR1cmVMaXN0SXRlbXMoX2RhdGFNb2RlbCwgc2VhcmNoU3RyaW5nLCBfc29ydE9yZGVyLCBfcmV2ZXJzZU9yZGVyLCBfZmVhdHVyZVNwZWNDaGVja2JveGVzKV1dIiBkYXRhLW1vZGVsPSJbW19kYXRhTW9kZWxdXSIgZmVhdHVyZS1zbGljZS1zZWxlY3Rpb249Int7ZmVhdHVyZVNsaWNlU2VsZWN0aW9ufX0iIGNsYXNzPSJ0YWJsZS1yaWdodCIgY29tcGFyZS1tb2RlPSJbW2NvbXBhcmVNb2RlXV0iPgogICAgICAgIDwvZmFjZXRzLW92ZXJ2aWV3LXRhYmxlPgogICAgICA8L2Rpdj4KICAgIDwvdGVtcGxhdGU+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vZmFjZXRzLW92ZXJ2aWV3L2NvbXBvbmVudHMvZmFjZXRzLW92ZXJ2aWV3L2ZhY2V0cy1vdmVydmlldy5qcwpQb2x5bWVyKHtpczoiZmFjZXRzLW92ZXJ2aWV3Iixwcm9wZXJ0aWVzOntzZWFyY2hTdHJpbmc6e3R5cGU6U3RyaW5nLG5vdGlmeTohMH0sX3NvcnRPcHRpb25zOkFycmF5LF9yZXZlcnNlT3JkZXI6Qm9vbGVhbixfc29ydE9yZGVyOnt0eXBlOk51bWJlcix2YWx1ZTowfSxwcm90b0lucHV0Ont0eXBlOk9iamVjdCxvYnNlcnZlcjoiX3VwZGF0ZSJ9LGZlYXR1cmVTbGljZVNlbGVjdGlvbjp7dHlwZTpPYmplY3Qsbm90aWZ5OiEwfSxjb21wYXJlTW9kZTp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxfZGF0YU1vZGVsOnt0eXBlOk9iamVjdCx2YWx1ZTpudWxsfSxfZmVhdHVyZVNwZWNBcnJheTp7dHlwZTpBcnJheSxjb21wdXRlZDoiX2dldEZlYXR1cmVTcGVjQXJyYXkoX2RhdGFNb2RlbCkifSxfZmVhdHVyZVNwZWNDaGVja2JveGVzOkFycmF5fSxfZ2V0RmVhdHVyZVNwZWNBcnJheShhKXtpZighYSlyZXR1cm5bXTtjb25zdCBjPVtdO2ZvcihsZXQgZD0wOzE2PmQ7ZCsrKWMucHVzaCghMCk7CnRoaXMuX2ZlYXR1cmVTcGVjQ2hlY2tib3hlcz1jO3JldHVybiBhLmdldE5vbkVtcHR5RmVhdHVyZVNwZWNMaXN0cygpfSxfZ2V0U3BlY0NoZWNrYm94VGV4dChhKXtyZXR1cm4gUHAoYS5zcGVjKSsiKCIrYS5mZWF0dXJlcy5sZW5ndGgrIikifSxfZ2V0U3BlY0NoZWNrYm94SWQoYSl7cmV0dXJuIFN0cmluZyhhLnNwZWMpfSxfZmVhdHVyZVNwZWNDaGVjayhhKXtpZihhKXtjb25zdCBjPVtdLGQ9K2EudGFyZ2V0LmlkO2ZvcihsZXQgZj0wOzE2PmY7ZisrKWQ9PT1mP2MucHVzaChhLnRhcmdldC5jaGVja2VkKTpjLnB1c2godGhpcy5fZmVhdHVyZVNwZWNDaGVja2JveGVzW2ZdKTt0aGlzLl9mZWF0dXJlU3BlY0NoZWNrYm94ZXM9Y319LF9jb252ZXJ0SW5wdXRUb1Byb3RvKGEpe2lmKCFhfHxhLmNvbnN0cnVjdG9yPT09T2JqZWN0JiYwPT09T2JqZWN0LmtleXMoYSkubGVuZ3RoKXJldHVybiBudWxsO2lmKGEgaW5zdGFuY2VvZiBVaW50OEFycmF5KXJldHVybiBOaihhKTtpZigic3RyaW5nIj09PQp0eXBlb2YgYXx8YSBpbnN0YW5jZW9mIFN0cmluZyl7YT1hdG9iKGEpO2NvbnN0IGM9bmV3IFVpbnQ4QXJyYXkoYS5sZW5ndGgpO2ZvcihsZXQgZD0wO2Q8YS5sZW5ndGg7ZCsrKWNbZF09YS5jaGFyQ29kZUF0KGQpO3JldHVybiBOaihjKX1yZXR1cm4gYS5jb25zdHJ1Y3Rvcj09PU9iamVjdCYmImZ1bmN0aW9uIj09PXR5cGVvZiBwaS5mcm9tT2JqZWN0P3BpLmZyb21PYmplY3QoYSk6YX0sX3VwZGF0ZSgpe3RoaXMuZmVhdHVyZVNsaWNlU2VsZWN0aW9uPW51bGw7bGV0IGE7e2NvbnN0IGY9dGhpcy5fY29udmVydElucHV0VG9Qcm90byh0aGlzLnByb3RvSW5wdXQpO2lmKCFmKXt0aGlzLl9kYXRhTW9kZWw9bnVsbDtyZXR1cm59YT1uZXcgcHEoR3AoZikpfXRoaXMuc2V0KCJfc29ydE9wdGlvbnMiLFt7bmFtZToiRmVhdHVyZSBvcmRlciIsbWFwOnt9fSx7bmFtZToiTm9uLXVuaWZvcm1pdHkiLG1hcDp7fX0se25hbWU6IkFscGhhYmV0aWNhbCIsbWFwOnt9fSx7bmFtZToiQW1vdW50IG1pc3NpbmcvemVybyIsCm1hcDp7fX1dKTtjb25zdCBjPWEuZ2V0RGF0YXNldEZlYXR1cmVTdGF0aXN0aWNzKCkuZ2V0RGF0YXNldHNMaXN0KCksZD0xPGMubGVuZ3RoO2QmJnRoaXMucHVzaCgiX3NvcnRPcHRpb25zIix7bmFtZToiRGlzdHJpYnV0aW9uIGRpc3RhbmNlIixtYXA6e319KTthLmdldFVuaXF1ZUZlYXR1cmVzKCkuZm9yRWFjaCgoZixnKT0+e3RoaXMuX3NvcnRPcHRpb25zWzBdLm1hcFtmLmdldE5hbWUoKV09ZztnPWEuZ2V0RGF0YXNldEhpc3RvZ3JhbXNGb3JGZWF0dXJlKGYuZ2V0TmFtZSgpKTt0aGlzLl9zb3J0T3B0aW9uc1sxXS5tYXBbZi5nZXROYW1lKCldPWcucmVkdWNlKChsLGspPT57az1rLmhpc3RNYXAuU3RhbmRhcmQ/cnAoay5oaXN0TWFwLlN0YW5kYXJkLmdldEJ1Y2tldHNMaXN0KCkpOjE7cmV0dXJuIE1hdGgubWluKGwsayl9LDEpO3RoaXMuX3NvcnRPcHRpb25zWzJdLm1hcFtmLmdldE5hbWUoKV09Zi5nZXROYW1lKCk7dGhpcy5fc29ydE9wdGlvbnNbM10ubWFwW2YuZ2V0TmFtZSgpXT0KYy5yZWR1Y2UoKGwsayk9PntrPXRoaXMuX2dldFN0YXRzKGEsayxmKTtrPS0xKkFwKGspO3JldHVybiBNYXRoLm1pbihsLGspfSwwKTtkJiYodGhpcy5fc29ydE9wdGlvbnNbNF0ubWFwW2YuZ2V0TmFtZSgpXT0tMSpDcChnKSl9LHRoaXMpO3RoaXMuX2RhdGFNb2RlbD1hfSxfZ2V0U3RhdHMoYSxjLGQpe3JldHVybiBhJiZjJiZkP2EuZ2V0RmVhdHVyZShkLmdldE5hbWUoKSxjLmdldE5hbWUoKSk6bnVsbH0sX2dldFNvcnRGdW5jdGlvbihhLGMpe2NvbnN0IGQ9dGhpcy5fc29ydE9wdGlvbnNbYV0ubWFwLGY9Yz8tMToxO3JldHVybihnLGwpPT57Zz1kW2cuZ2V0TmFtZSgpXTtsPWRbbC5nZXROYW1lKCldO3JldHVybiJ1bmRlZmluZWQiPT10eXBlb2YgZ3x8InVuZGVmaW5lZCI9PXR5cGVvZiBsPzA6ZiooZzxsPy0xOjEpfX0sX2dldEZpbHRlcihhKXtpZihhKXRyeXtjb25zdCBjPW5ldyBSZWdFeHAoYSwiaSIpO3JldHVybiBkPT5jLnRlc3QoZC5nZXROYW1lKCkpfWNhdGNoKGMpe3JldHVybiBudWxsfWVsc2UgcmV0dXJuIG51bGx9LApfZ2V0TnVtZXJpY0ZlYXR1cmVMaXN0SXRlbXMoYSxjLGQsZixnKXtyZXR1cm4gdGhpcy5fZ2V0RmVhdHVyZUxpc3RJdGVtcyhhLGMsZCxmLGcsITApfSxfZ2V0Tm9uTnVtZXJpY0ZlYXR1cmVMaXN0SXRlbXMoYSxjLGQsZixnKXtyZXR1cm4gdGhpcy5fZ2V0RmVhdHVyZUxpc3RJdGVtcyhhLGMsZCxmLGcsITEpfSxfZ2V0RmVhdHVyZUxpc3RJdGVtcyhhLGMsZCxmLGcsbCl7aWYoIWEpcmV0dXJuW107Y29uc3Qgaz10aGlzLl9nZXRGaWx0ZXIoYyk7Yz1hLmdldFVuaXF1ZUZlYXR1cmVzKCk7Yz1rP2MuZmlsdGVyKG09PmsobSkmJmdbYS5nZXRGZWF0dXJlU3BlY0ZvckZlYXR1cmUobS5nZXROYW1lKCkpXSk6Yy5maWx0ZXIobT0+Z1thLmdldEZlYXR1cmVTcGVjRm9yRmVhdHVyZShtLmdldE5hbWUoKSldKTtjPWMuZmlsdGVyKG09Pmw/RnAobSk6IUZwKG0pKTtyZXR1cm4gYy5zbGljZSgpLnNvcnQodGhpcy5fZ2V0U29ydEZ1bmN0aW9uKGQsZikpfSxfZ2V0Q29udHJvbHNXcmFwcGVyQ2xhc3MoYSl7cmV0dXJuIWF8fAoxPj1hLmdldFVuaXF1ZUZlYXR1cmVzKCkubGVuZ3RoPyJoaWRkZW4iOiIifSxfZ2V0RGF0YXNldE5hbWUoYSxjKXtyZXR1cm4gYS5nZXREYXRhc2V0TmFtZXMoKVtjXX0sX2dldExlZ2VuZEJveFN0eWxlKGEsYyl7cmV0dXJuImJhY2tncm91bmQtY29sb3I6IithLmdldENoYXJ0Q29sb3JTdHJpbmcoYyl9LF9nZXREYXRhc2V0cyhhKXtyZXR1cm4gYT9hLmdldERhdGFzZXRGZWF0dXJlU3RhdGlzdGljcygpLmdldERhdGFzZXRzTGlzdCgpOm51bGx9LF9oYXNNdWx0aXBsZURhdGFzZXRzKGEpe3JldHVybiBudWxsPT1hPyExOjE8YS5nZXREYXRhc2V0TmFtZXMoKS5sZW5ndGh9LGdldFN0YXRzUHJvdG8oYSl7cmV0dXJuIHluKGEpfX0pOwo8L3NjcmlwdD4KCgoKCgoKCgoKCgoKCgoKPGRvbS1tb2R1bGUgaWQ9InZ6LWV4YW1wbGUtdmlld2VyIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGUgaWQ9ImxpbnRlci1wYXBlci1idXR0b24tc3R5bGUiPgogICAgICAvKioKICAgICAgICogVGhpcyBzdHlsZSBwcmVzZXJ2ZXMgdGhlIHN0eWxpbmcgcHJldmlvdXMgdG8KICAgICAgICogaHR0cHM6Ly9naXRodWIuY29tL1BvbHltZXJFbGVtZW50cy9wYXBlci1idXR0b24vcHVsbC8xMTUKICAgICAgICogVGhpcyBjaGFuZ2UgY2FuIGJyZWFrIHRoZSBsYXlvdXQgb2YgcGFwZXItYnV0dG9uIGNvbnRlbnQuCiAgICAgICAqIFJlbW92ZSB0aGlzIHN0eWxlIHRvIGFwcGx5IHRoZSBjaGFuZ2UsIG1vcmUgZGV0YWlscyBhdCBiLzcwNTI4MzU2LgogICAgICAgKi8KICAgICAgcGFwZXItYnV0dG9uIHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0OwogICAgICB9CiAgICA8L3N0eWxlPgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KCiAgICAgIC5zZXEtZmVhdCB7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDE2cHg7CiAgICAgIH0KCiAgICAgIC52YWx1ZS1saXN0IHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgLnNsaWRlci1ob2xkZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIH0KCiAgICAgIC5zbGlkZXItbGFiZWwgewogICAgICAgIG1hcmdpbi1yaWdodDogMTBweDsKICAgICAgICBtYXJnaW4tdG9wOiAxNnB4OwogICAgICB9CgogICAgICAjc2FsaWVuY3lMZWdlbmQgewogICAgICAgIHdpZHRoOiAzMDBweDsKICAgICAgICBoZWlnaHQ6IDUwcHg7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDhweDsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDhweDsKICAgICAgfQoKICAgICAgLnNhbGllbmN5LWNvbnRyb2xzLWhvbGRlciB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcGFkZGluZzogOHB4OwogICAgICAgIHdpZHRoOiBmaXQtY29udGVudDsKICAgICAgfQoKICAgICAgLmhpZGUtc2FsaWVuY3ktY29udHJvbHMgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5zYWxpZW5jeS1sZWdlbmQtbGFiZWwgewogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBjb2xvcjogIzNjNDA0MzsKICAgICAgfQoKICAgICAgLm91dGVyIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBvdmVyZmxvdzogYXV0bzsKICAgICAgfQoKICAgICAgLmltYWdlIHsKICAgICAgICAvKiA8aW1nPiBlbGVtZW50cyBhcmUgdXNlZCB0byBsb2FkIHRvIGEgY2FudmFzIHNvIHRoZXkgYXJlbid0IGRpc3BsYXllZC4gKi8KICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICB9CgogICAgICAuZmxleC1jb250cm9scyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgICAgb3ZlcmZsb3c6IGF1dG87CiAgICAgIH0KCiAgICAgIC52YWx1ZS1waWxscy1ob2xkZXIgewogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgICBmbGV4LWJhc2lzOiAxMDAlOwogICAgICB9CgogICAgICBpcm9uLWF1dG9ncm93LXRleHRhcmVhIHsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjZmZmZmZmOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgLW1vei1hcHBlYXJhbmNlOiBub25lOwogICAgICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTsKICAgICAgICAtLWlyb24tYXV0b2dyb3ctdGV4dGFyZWE6IHsKICAgICAgICAgIGNvbG9yOiAjM2M0MDQzOwogICAgICAgIH0KICAgICAgfQoKICAgICAgaXJvbi1hdXRvZ3Jvdy10ZXh0YXJlYS52YWx1ZS1zYW1lIHsKICAgICAgICAtLWlyb24tYXV0b2dyb3ctdGV4dGFyZWE6IHsKICAgICAgICAgIGNvbG9yOiAjNWY2MzY4OwogICAgICAgIH0KICAgICAgfQoKICAgICAgaXJvbi1hdXRvZ3Jvdy10ZXh0YXJlYS52YWx1ZS1kaWZmZXJlbnQgewogICAgICAgIC0taXJvbi1hdXRvZ3Jvdy10ZXh0YXJlYTogewogICAgICAgICAgY29sb3I6ICMzNGE4NTM7CiAgICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIH0KICAgICAgfQoKICAgICAgLnZhbHVlLXBpbGwgewogICAgICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICAgICAgbWFyZ2luOiA0cHg7CiAgICAgICAgcGFkZGluZzogNHB4IDhweDsKICAgICAgICBjb2xvcjogIzNjNDA0MzsKICAgICAgfQoKICAgICAgLnZhbHVlLXBpbGw6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICNmOGY5ZmE7CiAgICAgIH0KCiAgICAgIC52YWx1ZS1waWxsW2ZvY3VzZWRdIHsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjZmZlYjNiOwogICAgICAgIGJhY2tncm91bmQ6ICNmOGY5ZmE7CiAgICAgIH0KCiAgICAgIC52YWx1ZS1jb21wYXJlIHsKICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OwogICAgICAgIHBhZGRpbmc6IDRweCA4cHg7CiAgICAgIH0KCiAgICAgIC52YWx1ZS1waWxsLXN0YWNrZWQgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIG1hcmdpbjogNHB4IDRweCA0cHggMDsKICAgICAgICBwYWRkaW5nOiAycHg7CiAgICAgIH0KCiAgICAgIC52YWx1ZS1waWxsLWdyaWQgewogICAgICAgIHdpZHRoOiAxMjBweDsKICAgICAgICBtYXJnaW46IDRweCA4cHggNHB4IDA7CiAgICAgIH0KCiAgICAgIC5mZWF0dXJlLW5hbWUgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgcGFkZGluZy1sZWZ0OiA0cHg7CiAgICAgICAgbWFyZ2luOiA0cHggMjBweCA0cHggOHB4OwogICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICBjb2xvcjogIzgwODY4YjsKICAgICAgfQoKICAgICAgLmZlYXR1cmUtbmFtZS10ZXh0IHsKICAgICAgICB3aWR0aDogMzAwcHg7CiAgICAgICAgbWF4LXdpZHRoOiAzMDBweDsKICAgICAgICBtaW4td2lkdGg6IDE1MHB4OwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBtYXJnaW4tdG9wOiA0cHg7CiAgICAgICAgY29sb3I6ICMzYzQwNDM7CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNmVtOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICAgIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKICAgICAgICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7CiAgICAgICAgcGFkZGluZy1yaWdodDogOHB4OwogICAgICB9CgogICAgICAuZmVhdHVyZS1uYW1lLWhlYWRlci10ZXh0IHsKICAgICAgICB3aWR0aDogMzAwcHg7CiAgICAgICAgbWF4LXdpZHRoOiAzMDBweDsKICAgICAgICBtaW4td2lkdGg6IDE1MHB4OwogICAgICAgIGNvbG9yOiAjMjAyMTI0OwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBsaW5lLWhlaWdodDogMS44ZW07CiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICAgICAgd2hpdGUtc3BhY2U6IHByZS13cmFwOwogICAgICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDsKICAgICAgfQoKICAgICAgLmZlYXR1cmUtbmFtZS5mZWF0dXJlLW5hbWUtaGVhZGVyIHsKICAgICAgICBwYWRkaW5nOiA0cHggNHB4IDBweCA0cHg7CiAgICAgICAgYmFja2dyb3VuZDogI2Y4ZjlmYTsKICAgICAgICBtYXJnaW46IDBweDsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2U4ZWFlZDsKICAgICAgfQoKICAgICAgLnNsaWRlciB7CiAgICAgICAgLS1wYXBlci1zbGlkZXItaW5wdXQ6IHsKICAgICAgICAgIHdpZHRoOiAxMDBweDsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC5oaWRlLWNvbnRyb2xzIHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICB9CgogICAgICAuaW5kZW50IHsKICAgICAgICBtYXJnaW4tbGVmdDogMTZweDsKICAgICAgfQoKICAgICAgLnNjYWxlLWxhYmVsIHsKICAgICAgICBtYXJnaW4tdG9wOiAxMHB4OwogICAgICAgIG1hcmdpbi1yaWdodDogMTBweDsKICAgICAgfQoKICAgICAgLndpbmRvd2luZy1sYWJlbCB7CiAgICAgICAgd2lkdGg6IDExMHB4OwogICAgICB9CgogICAgICAuY29udHJvbC10b2dnbGUtYnV0dG9uIHsKICAgICAgICBmbG9hdDogbGVmdDsKICAgICAgICBtYXgtaGVpZ2h0OiAyMHB4OwogICAgICAgIG1heC13aWR0aDogMjBweDsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICB9CgogICAgICAuZXhwYW5kLWJ1dHRvbi1ob2xkZXIgewogICAgICAgIG1hcmdpbi1ib3R0b206IDEwcHg7CiAgICAgIH0KCiAgICAgIC5kZWxldGUtdmFsdWUtYnV0dG9uIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgYmFja2dyb3VuZDogI2ZmZTYwMzsKICAgICAgICBjb2xvcjogIzVmNjM2ODsKICAgICAgICBib3JkZXItcmFkaXVzOiAxMnB4OwogICAgICAgIG1heC13aWR0aDogMjRweDsKICAgICAgICBtYXgtaGVpZ2h0OiAyNHB4OwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgICAgbWFyZ2luLXRvcDogMnB4OwogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgdmlzaWJpbGl0eTogdmlzaWJsZTsKICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDIwMG1zOwogICAgICB9CgogICAgICAuZGVsZXRlLXZhbHVlLWJ1dHRvbi5kZWxldGUtdmFsdWUtYnV0dG9uLWhpZGRlbiB7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB2aXNpYmlsaXR5OiBoaWRkZW47CiAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAyMDBtcywgdmlzaWJpbGl0eSAyMDBtczsKICAgICAgfQoKICAgICAgLmRlbGV0ZS1mZWF0dXJlLWJ1dHRvbiB7CiAgICAgICAgbWF4LWhlaWdodDogMjBweDsKICAgICAgICBtYXgtd2lkdGg6IDIwcHg7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgICBtYXJnaW4tbGVmdDogNHB4OwogICAgICAgIG1hcmdpbi10b3A6IDBweDsKICAgICAgfQoKICAgICAgLmFkZC12YWx1ZS1idXR0b24gewogICAgICAgIG1hcmdpbi10b3A6IDJweDsKICAgICAgICBtYXgtaGVpZ2h0OiAyMHB4OwogICAgICAgIG1heC13aWR0aDogMjBweDsKICAgICAgICBtaW4taGVpZ2h0OiAyMHB4OwogICAgICAgIG1pbi13aWR0aDogMjBweDsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICAgIGNvbG9yOiAjODA4NjhiOwogICAgICB9CgogICAgICAuYWRkLWZlYXR1cmUtYnV0dG9uIHsKICAgICAgICBtYXJnaW4tbGVmdDogMDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxMHB4OwogICAgICB9CgogICAgICAudXBsb2FkLWltYWdlLWJ1dHRvbiB7CiAgICAgICAgbWFyZ2luOiAwIDAgMCA1cHg7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgICB3aWR0aDogMTZweDsKICAgICAgICBoZWlnaHQ6IDE2cHg7CiAgICAgICAgY29sb3I6IHdoaXRlOwogICAgICB9CgogICAgICAuaW1hZ2VjYXJkIHsKICAgICAgICBtYXJnaW46IDRweDsKICAgICAgfQoKICAgICAgLmltYWdlLXNjYWxlLWJ1dHRvbiB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogNXB4OwogICAgICB9CgogICAgICAuc2FsaWVuY3ktbGVnZW5kLWxhYmVsIHsKICAgICAgICBtYXJnaW4tYm90dG9tOiA1cHg7CiAgICAgIH0KCiAgICAgIC5mZWF0dXJlLWRpYWxvZyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICB9CgogICAgICAuZmVhdHVyZS1kaWFsb2ctYnV0dG9uIHsKICAgICAgICB0ZXh0LXRyYW5zZm9ybTogbm9uZTsKICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OwogICAgICB9CgogICAgICAuaW1hZ2UtYm90dG9tLWJhciB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgYmFja2dyb3VuZDogIzNjNDA0MzsKICAgICAgfQoKICAgICAgLmltYWdlLXVwbG9hZC1pbnB1dCB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQoKICAgICAgLnNwYWNlLWZvci1tb3JlLWJ1dHRvbiB7CiAgICAgICAgd2lkdGg6IDIwcHg7CiAgICAgIH0KCiAgICAgIC52YWx1ZS1oZWFkZXItdGV4dCB7CiAgICAgICAgbWluLXdpZHRoOiAxMzBweDsKICAgICAgICB3aWR0aDogMTMwcHg7CiAgICAgICAgY29sb3I6ICMyMDIxMjQ7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjhlbTsKICAgICAgfQoKICAgICAgcGFwZXItZGlhbG9nIHsKICAgICAgICBib3JkZXItcmFkaXVzOiAxMHB4OwogICAgICB9CgogICAgICAuY29udHJvbC1idXR0b24gewogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlOwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNkYWRjZTA7CiAgICAgICAgY29sb3I6IHZhcigtLXRiLW9yYW5nZS1kYXJrKTsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweDsKICAgICAgICB0ZXh0LXRyYW5zZm9ybTogbm9uZTsKICAgICAgICBtYXJnaW46IDVweDsKICAgICAgfQoKICAgICAgLmNvbnRyb2wtYnV0dG9uW2Rpc2FibGVkXSB7CiAgICAgICAgY29sb3I6ICNkYWRjZTA7CiAgICAgIH0KCiAgICAgIC52YWx1ZS10ZXh0IHsKICAgICAgICBib3JkZXItYm90dG9tOiAycHggc29saWQgI2ZmZWIzYjsKICAgICAgfQoKICAgICAgLmNvbXBhcmUtdmFsdWUtdGV4dCB7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkICMzNGE4NTM7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8ZGl2IGNsYXNzPSJvdXRlciI+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tzaG93U2VhcmNoQm94XV0iPgogICAgICAgIDxwYXBlci1pbnB1dCB2YWx1ZT0ie3tmZWF0dXJlU2VhcmNoVmFsdWV9fSIgbGFiZWw9IlNlYXJjaCIgY2xhc3M9ImZpbHRlci1pbnB1dCIgbm8tbGFiZWwtZmxvYXQ+CiAgICAgICAgICA8aXJvbi1pY29uIGljb249Imljb25zOnNlYXJjaCIgcHJlZml4PjwvaXJvbi1pY29uPgogICAgICAgIDwvcGFwZXItaW5wdXQ+CiAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDxkaXYgY2xhc3M9ImZlYXR1cmUtbmFtZSBmZWF0dXJlLW5hbWUtaGVhZGVyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJmZWF0dXJlLW5hbWUtaGVhZGVyLXRleHQiPkZlYXR1cmU8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJ2YWx1ZS1waWxscy1ob2xkZXIgZmxleC1jb250cm9scyB2YWx1ZS1oZWFkZXItdGV4dCI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJ2YWx1ZS10ZXh0Ij5WYWx1ZShzKTwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tjb21wYXJlTW9kZV1dIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InZhbHVlLXBpbGxzLWhvbGRlciBmbGV4LWNvbnRyb2xzIHZhbHVlLWhlYWRlci10ZXh0Ij4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29tcGFyZS12YWx1ZS10ZXh0Ij5bW2NvbXBhcmVUaXRsZV1dPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDxkaXYgY2xhc3M9InNwYWNlLWZvci1tb3JlLWJ1dHRvbiI+PC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW2ZpbHRlcmVkRmVhdHVyZXNMaXN0XV0iIGFzPSJmZWF0Ij4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbaXNJbWFnZShmZWF0Lm5hbWUpXV0iPgogICAgICAgICAgPGRpdiBjbGFzcz0iZmVhdHVyZS1uYW1lIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmVhdHVyZS1uYW1lLXRleHQiPltbZmVhdC5uYW1lXV08L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idmFsdWUtcGlsbHMtaG9sZGVyIj4KICAgICAgICAgICAgICA8cGFwZXItY2FyZCBpZD0iW1tnZXRJbWFnZUNhcmRJZChmZWF0Lm5hbWUpXV0iIGNsYXNzPSJpbWFnZWNhcmQiPgogICAgICAgICAgICAgICAgPGltZyBjbGFzcz0iaW1hZ2UiIHNyYyQ9IltbZ2V0SW1hZ2VTcmMoZmVhdC5uYW1lKV1dIiBpZD0iW1tnZXRJbWFnZUlkKGZlYXQubmFtZSldXSI+CiAgICAgICAgICAgICAgICA8Y2FudmFzIGlkPSJbW2dldENhbnZhc0lkKGZlYXQubmFtZSldXSIgZGF0YS1mZWF0dXJlPSJbW2ZlYXQubmFtZV1dIj48L2NhbnZhcz4KICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tzaG91bGRTaG93SW1hZ2VDb250cm9scyhoYXNJbWFnZSwgYWxsb3dJbWFnZUNvbnRyb2xzKV1dIj4KICAgICAgICAgICAgICAgICAgPGRpdj5JbWFnZSB3aW5kb3dpbmcgKGNvbnRyYXN0KTwvZGl2PgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzbGlkZXItaG9sZGVyIGluZGVudCI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2xpZGVyLWxhYmVsIHdpbmRvd2luZy1sYWJlbCI+CiAgICAgICAgICAgICAgICAgICAgICBXaW5kb3cgY2VudGVyOgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxwYXBlci1zbGlkZXIgY2xhc3M9InNsaWRlciIgZWRpdGFibGU9InRydWUiIG1heD0iMjU1IiBpbW1lZGlhdGUtdmFsdWU9Int7d2luZG93Q2VudGVyfX0iIHZhbHVlPSJbW3dpbmRvd0NlbnRlcl1dIj4KICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLXNsaWRlcj4KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InNsaWRlci1ob2xkZXIgaW5kZW50Ij4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzbGlkZXItbGFiZWwgd2luZG93aW5nLWxhYmVsIj4KICAgICAgICAgICAgICAgICAgICAgIFdpbmRvdyB3aWR0aDoKICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8cGFwZXItc2xpZGVyIGNsYXNzPSJzbGlkZXIiIGVkaXRhYmxlPSJ0cnVlIiBtYXg9IjUxMiIgbWluPSIxIiBpbW1lZGlhdGUtdmFsdWU9Int7d2luZG93V2lkdGh9fSIgdmFsdWU9Iltbd2luZG93V2lkdGhdXSI+CiAgICAgICAgICAgICAgICAgICAgPC9wYXBlci1zbGlkZXI+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4LWNvbnRyb2xzIj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzY2FsZS1sYWJlbCI+SW1hZ2Ugc2NhbGUgcGVyY2VudGFnZTo8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8cGFwZXItaW5wdXQgbm8tbGFiZWwtZmxvYXQgdHlwZT0ibnVtYmVyIiBtaW49IjEwIiBtYXg9IjUwMCIgdmFsdWU9Int7aW1hZ2VTY2FsZVBlcmNlbnRhZ2V9fSI+CiAgICAgICAgICAgICAgICAgICAgPC9wYXBlci1pbnB1dD4KICAgICAgICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uIGNsYXNzPSJpbWFnZS1zY2FsZS1idXR0b24iIG9uLWNsaWNrPSJ1cGRhdGVJbWFnZXMiPgogICAgICAgICAgICAgICAgICAgICAgc2V0CiAgICAgICAgICAgICAgICAgICAgPC9wYXBlci1idXR0b24+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImltYWdlLWJvdHRvbS1iYXIiPgogICAgICAgICAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24gY2xhc3MkPSJbW2dldFVwbG9hZEltYWdlQ2xhc3MocmVhZG9ubHkpXV0iIGljb249ImZpbGUtdXBsb2FkIiBvbi1jbGljaz0idXBsb2FkSW1hZ2VDbGlja2VkIiBkYXRhLWZlYXR1cmU9IltbZmVhdC5uYW1lXV0iIHRpdGxlPSJVcGxvYWQgaW1hZ2UiPgogICAgICAgICAgICAgICAgICA8L3BhcGVyLWljb24tYnV0dG9uPgogICAgICAgICAgICAgICAgICA8cGFwZXItaW5wdXQgY2xhc3M9ImltYWdlLXVwbG9hZC1pbnB1dCIgdHlwZT0iZmlsZSIgb24tY2hhbmdlPSJoYW5kbGVJbWFnZVVwbG9hZCIgZGF0YS1mZWF0dXJlPSJbW2ZlYXQubmFtZV1dIiBkYXRhLWluZGV4PSJbW2luZGV4XV0iPgogICAgICAgICAgICAgICAgICA8L3BhcGVyLWlucHV0PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPC9wYXBlci1jYXJkPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2NvbXBhcmVNb2RlXV0iPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9InZhbHVlLXBpbGxzLWhvbGRlciI+CiAgICAgICAgICAgICAgICA8cGFwZXItY2FyZCBpZD0iW1tnZXRDb21wYXJlSW1hZ2VDYXJkSWQoZmVhdC5uYW1lKV1dIiBjbGFzcz0iaW1hZ2VjYXJkIj4KICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz0iaW1hZ2UiIHNyYyQ9IltbZ2V0Q29tcGFyZUltYWdlU3JjKGZlYXQubmFtZSldXSIgaWQ9IltbZ2V0Q29tcGFyZUltYWdlSWQoZmVhdC5uYW1lKV1dIj4KICAgICAgICAgICAgICAgICAgPGNhbnZhcyBpZD0iW1tnZXRDb21wYXJlQ2FudmFzSWQoZmVhdC5uYW1lKV1dIiBkYXRhLWZlYXR1cmU9IltbZmVhdC5uYW1lXV0iPjwvY2FudmFzPgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbWFnZS1ib3R0b20tYmFyIj48L2Rpdj4KICAgICAgICAgICAgICAgIDwvcGFwZXItY2FyZD4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPHBhcGVyLWljb24tYnV0dG9uIGljb249Im1vcmUtaG9yaXoiIGNsYXNzJD0iW1tnZXRBZGRWYWx1ZUJ1dHRvbkNsYXNzKHJlYWRvbmx5KV1dIiBvbi1jbGljaz0iZmVhdHVyZU1vcmVDbGlja2VkIiBkYXRhLWZlYXR1cmU9IltbZmVhdC5uYW1lXV0iPjwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgICAgICAgIDxwYXBlci1kaWFsb2cgaWQ9IltbZ2V0RmVhdHVyZURpYWxvZ0lkKGZlYXQubmFtZSldXSIgaG9yaXpvbnRhbC1hbGlnbj0icmlnaHQiIHZlcnRpY2FsLWFsaWduPSJib3R0b20iPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZlYXR1cmUtZGlhbG9nIj4KICAgICAgICAgICAgICAgIDxwYXBlci1idXR0b24gZGF0YS1mZWF0dXJlPSJbW2ZlYXQubmFtZV1dIiBvbi1jbGljaz0iZGVsZXRlRmVhdHVyZSIgY2xhc3M9ImZlYXR1cmUtZGlhbG9nLWJ1dHRvbiI+CiAgICAgICAgICAgICAgICAgIERlbGV0ZSBmZWF0dXJlCiAgICAgICAgICAgICAgICA8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9wYXBlci1kaWFsb2c+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shaXNJbWFnZShmZWF0Lm5hbWUpXV0iPgogICAgICAgICAgPGRpdiBjbGFzcz0iZmVhdHVyZS1uYW1lIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmVhdHVyZS1uYW1lLXRleHQiPltbZmVhdC5uYW1lXV08L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmxleC1jb250cm9scyB2YWx1ZS1waWxscy1ob2xkZXIiPgogICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tpc0V4cGFuZGVkKGZlYXQubmFtZSwgZXhwYW5kQWxsRmVhdHVyZXMpXV0iPgogICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tnZXRGZWF0dXJlVmFsdWVzKGZlYXQubmFtZSldXSIgYXM9InZhbHVlIj4KICAgICAgICAgICAgICAgICAgPGlyb24tYXV0b2dyb3ctdGV4dGFyZWEgY2xhc3MkPSJbW2dldElucHV0UGlsbENsYXNzKGZlYXQubmFtZSwgZGlzcGxheU1vZGUpXV0iIHJlYWRvbmx5JD0iW1tyZWFkb25seV1dIiBvbi1pbnB1dD0ib25WYWx1ZUNoYW5nZWQiIG9uLWZvY3VzPSJvbklucHV0Rm9jdXMiIG9uLWJsdXI9Im9uSW5wdXRCbHVyIiBkYXRhLWZlYXR1cmU9IltbZmVhdC5uYW1lXV0iIGRhdGEtaW5kZXg9IltbaW5kZXhdXSIgdmFsdWU9IltbdmFsdWVdXSI+CiAgICAgICAgICAgICAgICAgIDwvaXJvbi1hdXRvZ3Jvdy10ZXh0YXJlYT4KICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIWlzRXhwYW5kZWQoZmVhdC5uYW1lLCBleHBhbmRBbGxGZWF0dXJlcyldXSI+CiAgICAgICAgICAgICAgICA8aXJvbi1hdXRvZ3Jvdy10ZXh0YXJlYSBjbGFzcyQ9IltbZ2V0SW5wdXRQaWxsQ2xhc3MoZmVhdC5uYW1lLCBkaXNwbGF5TW9kZSldXSIgcmVhZG9ubHkkPSJbW3JlYWRvbmx5XV0iIG9uLWlucHV0PSJvblZhbHVlQ2hhbmdlZCIgb24tZm9jdXM9Im9uSW5wdXRGb2N1cyIgb24tYmx1cj0ib25JbnB1dEJsdXIiIGRhdGEtZmVhdHVyZT0iW1tmZWF0Lm5hbWVdXSIgZGF0YS1pbmRleD0iW1t6ZXJvSW5kZXhdXSIgdmFsdWU9IltbZ2V0Rmlyc3RGZWF0dXJlVmFsdWUoZmVhdC5uYW1lKV1dIj4KICAgICAgICAgICAgICAgIDwvaXJvbi1hdXRvZ3Jvdy10ZXh0YXJlYT4KICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tmZWF0dXJlSGFzTXVsdGlwbGVWYWx1ZXMoZmVhdC5uYW1lKV1dIj4KICAgICAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbiBkYXRhLWZlYXR1cmU9IltbZmVhdC5uYW1lXV0iIG9uLWNsaWNrPSJleHBhbmRGZWF0dXJlIiBjbGFzcyQ9IltbZ2V0SW5wdXRQaWxsQ2xhc3MoZmVhdC5uYW1lLCBkaXNwbGF5TW9kZSldXSI+CiAgICAgICAgICAgICAgICAgICAgLi4uCiAgICAgICAgICAgICAgICAgIDwvcGFwZXItYnV0dG9uPgogICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2NvbXBhcmVNb2RlXV0iPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXgtY29udHJvbHMgdmFsdWUtcGlsbHMtaG9sZGVyIj4KICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tpc0V4cGFuZGVkKGZlYXQubmFtZSwgZXhwYW5kQWxsRmVhdHVyZXMpXV0iPgogICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW2dldENvbXBhcmVGZWF0dXJlVmFsdWVzKGZlYXQubmFtZSldXSIgYXM9InZhbHVlIj4KICAgICAgICAgICAgICAgICAgICA8aXJvbi1hdXRvZ3Jvdy10ZXh0YXJlYSBjbGFzcyQ9IltbZ2V0Q29tcGFyZUlucHV0Q2xhc3MoZmVhdC5uYW1lLCBkaXNwbGF5TW9kZSwgaW5kZXgpXV0iIHJlYWRvbmx5IHZhbHVlPSJbW3ZhbHVlXV0iPgogICAgICAgICAgICAgICAgICAgIDwvaXJvbi1hdXRvZ3Jvdy10ZXh0YXJlYT4KICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIWlzRXhwYW5kZWQoZmVhdC5uYW1lLCBleHBhbmRBbGxGZWF0dXJlcyldXSI+CiAgICAgICAgICAgICAgICAgIDxpcm9uLWF1dG9ncm93LXRleHRhcmVhIGNsYXNzJD0iW1tnZXRDb21wYXJlSW5wdXRDbGFzcyhmZWF0Lm5hbWUsIGRpc3BsYXlNb2RlLCB6ZXJvSW5kZXgpXV0iIHJlYWRvbmx5IHZhbHVlPSJbW2dldEZpcnN0Q29tcGFyZUZlYXR1cmVWYWx1ZShmZWF0Lm5hbWUpXV0iPgogICAgICAgICAgICAgICAgICA8L2lyb24tYXV0b2dyb3ctdGV4dGFyZWE+CiAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tjb21wYXJlRmVhdHVyZUhhc011bHRpcGxlVmFsdWVzKGZlYXQubmFtZSldXSI+CiAgICAgICAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbiBkYXRhLWZlYXR1cmU9IltbZmVhdC5uYW1lXV0iIG9uLWNsaWNrPSJleHBhbmRGZWF0dXJlIiBjbGFzcyQ9IltbZ2V0Q29tcGFyZUlucHV0Q2xhc3MoZmVhdC5uYW1lLCBkaXNwbGF5TW9kZSldXSI+CiAgICAgICAgICAgICAgICAgICAgICAuLi4KICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvdGVtcGxhdGU+CgogICAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24gaWNvbj0ibW9yZS1ob3JpeiIgY2xhc3MkPSJbW2dldEFkZFZhbHVlQnV0dG9uQ2xhc3MocmVhZG9ubHkpXV0iIG9uLWNsaWNrPSJmZWF0dXJlTW9yZUNsaWNrZWQiIGRhdGEtZmVhdHVyZT0iW1tmZWF0Lm5hbWVdXSI+PC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgICAgICAgPHBhcGVyLWRpYWxvZyBpZD0iW1tnZXRGZWF0dXJlRGlhbG9nSWQoZmVhdC5uYW1lKV1dIiBob3Jpem9udGFsLWFsaWduPSJyaWdodCIgdmVydGljYWwtYWxpZ249ImJvdHRvbSI+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmVhdHVyZS1kaWFsb2ciPgogICAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbiBkYXRhLWZlYXR1cmU9IltbZmVhdC5uYW1lXV0iIG9uLWNsaWNrPSJkZWxldGVGZWF0dXJlIiBjbGFzcz0iZmVhdHVyZS1kaWFsb2ctYnV0dG9uIj4KICAgICAgICAgICAgICAgICAgRGVsZXRlIGZlYXR1cmUKICAgICAgICAgICAgICAgIDwvcGFwZXItYnV0dG9uPgogICAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbiBkYXRhLWZlYXR1cmU9IltbZmVhdC5uYW1lXV0iIG9uLWNsaWNrPSJhZGRWYWx1ZSIgY2xhc3M9ImZlYXR1cmUtZGlhbG9nLWJ1dHRvbiI+CiAgICAgICAgICAgICAgICAgIEFkZCBmZWF0dXJlIHZhbHVlCiAgICAgICAgICAgICAgICA8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9wYXBlci1kaWFsb2c+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L3RlbXBsYXRlPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbaXNTZXFFeGFtcGxlKG1heFNlcU51bWJlcildXSI+CiAgICAgICAgPGRpdiBjbGFzcz0ic2xpZGVyLWhvbGRlciI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzbGlkZXItbGFiZWwiPlNlcXVlbmNlIE51bWJlcjo8L2Rpdj4KICAgICAgICAgIDxwYXBlci1zbGlkZXIgY2xhc3M9InNsaWRlciIgZWRpdGFibGU9InRydWUiIG1heD0iW1ttYXhTZXFOdW1iZXJdXSIgdmFsdWU9Int7c2VxTnVtYmVyfX0iPgogICAgICAgICAgPC9wYXBlci1zbGlkZXI+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tmaWx0ZXJlZFNlcUZlYXR1cmVzTGlzdF1dIiBhcz0ic2VxZmVhdCI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzZXFmZWF0Ij4KICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2lzSW1hZ2Uoc2VxZmVhdC5uYW1lKV1dIj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmZWF0dXJlLW5hbWUiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmVhdHVyZS1uYW1lLXRleHQiPltbc2VxZmVhdC5uYW1lXV08L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InZhbHVlLXBpbGxzLWhvbGRlciI+CiAgICAgICAgICAgICAgICAgIDxwYXBlci1jYXJkIGlkPSJbW2dldEltYWdlQ2FyZElkKHNlcWZlYXQubmFtZSldXSIgY2xhc3M9ImltYWdlY2FyZCI+CiAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz0iaW1hZ2UiIHNyYyQ9IltbZ2V0U2VxSW1hZ2VTcmMoc2VxZmVhdC5uYW1lLCBzZXFOdW1iZXIpXV0iIGlkPSJbW2dldEltYWdlSWQoc2VxZmVhdC5uYW1lKV1dIj4KICAgICAgICAgICAgICAgICAgICA8Y2FudmFzIGlkPSJbW2dldENhbnZhc0lkKHNlcWZlYXQubmFtZSldXSIgZGF0YS1mZWF0dXJlPSJbW3NlcWZlYXQubmFtZV1dIiBkYXRhLXNlcS1udW09Iltbc2VxTnVtYmVyXV0iPjwvY2FudmFzPgogICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tzaG91bGRTaG93SW1hZ2VDb250cm9scyhoYXNJbWFnZSwgYWxsb3dJbWFnZUNvbnRyb2xzKV1dIj4KICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImltYWdlLWNvbnRyb2xzIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5JbWFnZSB3aW5kb3dpbmcgKGNvbnRyYXN0KTwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzbGlkZXItaG9sZGVyIGluZGVudCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2xpZGVyLWxhYmVsIHdpbmRvd2luZy1sYWJlbCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaW5kb3cgY2VudGVyOgogICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXBlci1zbGlkZXIgY2xhc3M9InNsaWRlciIgZWRpdGFibGU9InRydWUiIG1heD0iMjU1IiBpbW1lZGlhdGUtdmFsdWU9Int7d2luZG93Q2VudGVyfX0iIHZhbHVlPSJbW3dpbmRvd0NlbnRlcl1dIj4KICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLXNsaWRlcj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InNsaWRlci1ob2xkZXIgaW5kZW50Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzbGlkZXItbGFiZWwgd2luZG93aW5nLWxhYmVsIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpbmRvdyB3aWR0aDoKICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFwZXItc2xpZGVyIGNsYXNzPSJzbGlkZXIiIGVkaXRhYmxlPSJ0cnVlIiBtYXg9IjUxMiIgbWluPSIxIiBpbW1lZGlhdGUtdmFsdWU9Int7d2luZG93V2lkdGh9fSIgdmFsdWU9Iltbd2luZG93V2lkdGhdXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXBlci1zbGlkZXI+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4LWNvbnRyb2xzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzY2FsZS1sYWJlbCI+SW1hZ2Ugc2NhbGUgcGVyY2VudGFnZTo8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFwZXItaW5wdXQgbm8tbGFiZWwtZmxvYXQgdHlwZT0ibnVtYmVyIiBtaW49IjEwIiBtYXg9IjUwMCIgdmFsdWU9Int7aW1hZ2VTY2FsZVBlcmNlbnRhZ2V9fSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXBlci1pbnB1dD4KICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uIGNsYXNzPSJpbWFnZS1zY2FsZS1idXR0b24iIG9uLWNsaWNrPSJ1cGRhdGVJbWFnZXMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0CiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXBlci1idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbWFnZS1ib3R0b20tYmFyIj4KICAgICAgICAgICAgICAgICAgICAgIDxwYXBlci1pY29uLWJ1dHRvbiBjbGFzcyQ9IltbZ2V0VXBsb2FkSW1hZ2VDbGFzcyhyZWFkb25seSldXSIgaWNvbj0iZmlsZS11cGxvYWQiIG9uLWNsaWNrPSJ1cGxvYWRJbWFnZUNsaWNrZWQiIGRhdGEtZmVhdHVyZT0iW1tzZXFmZWF0Lm5hbWVdXSIgdGl0bGU9IlVwbG9hZCBpbWFnZSI+CiAgICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLWljb24tYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgPHBhcGVyLWlucHV0IGNsYXNzPSJpbWFnZS11cGxvYWQtaW5wdXQiIHR5cGU9ImZpbGUiIG9uLWNoYW5nZT0iaGFuZGxlSW1hZ2VVcGxvYWQiIGRhdGEtZmVhdHVyZT0iW1tzZXFmZWF0Lm5hbWVdXSIgZGF0YS1pbmRleD0iW1tpbmRleF1dIiBkYXRhLXNlcS1udW09Iltbc2VxTnVtYmVyXV0iPgogICAgICAgICAgICAgICAgICAgICAgPC9wYXBlci1pbnB1dD4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgPC9wYXBlci1jYXJkPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbY29tcGFyZU1vZGVdXSI+CiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InZhbHVlLXBpbGxzLWhvbGRlciI+CiAgICAgICAgICAgICAgICAgICAgPHBhcGVyLWNhcmQgaWQ9IltbZ2V0Q29tcGFyZUltYWdlQ2FyZElkKHNlcWZlYXQubmFtZSldXSIgY2xhc3M9ImltYWdlY2FyZCI+CiAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPSJpbWFnZSIgc3JjJD0iW1tnZXRDb21wYXJlU2VxSW1hZ2VTcmMoc2VxZmVhdC5uYW1lLCBzZXFOdW1iZXIpXV0iIGlkPSJbW2dldENvbXBhcmVJbWFnZUlkKHNlcWZlYXQubmFtZSldXSI+CiAgICAgICAgICAgICAgICAgICAgICA8Y2FudmFzIGlkPSJbW2dldENvbXBhcmVDYW52YXNJZChzZXFmZWF0Lm5hbWUpXV0iIGRhdGEtZmVhdHVyZT0iW1tzZXFmZWF0Lm5hbWVdXSIgZGF0YS1zZXEtbnVtPSJbW3NlcU51bWJlcl1dIj48L2NhbnZhcz4KICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImltYWdlLWJvdHRvbS1iYXIiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvcGFwZXItY2FyZD4KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgICAgPHBhcGVyLWljb24tYnV0dG9uIGljb249Im1vcmUtaG9yaXoiIGNsYXNzJD0iW1tnZXRBZGRWYWx1ZUJ1dHRvbkNsYXNzKHJlYWRvbmx5KV1dIj48L3BhcGVyLWljb24tYnV0dG9uPgogICAgICAgICAgICAgICAgPHBhcGVyLWRpYWxvZz4KICAgICAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbiBkYXRhLWZlYXR1cmU9Iltbc2VxZmVhdC5uYW1lXV0iIG9uLWNsaWNrPSJkZWxldGVGZWF0dXJlIj4KICAgICAgICAgICAgICAgICAgICBEZWxldGUgZmVhdHVyZQogICAgICAgICAgICAgICAgICA8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgICAgICAgIDwvcGFwZXItZGlhbG9nPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIWlzSW1hZ2Uoc2VxZmVhdC5uYW1lKV1dIj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmZWF0dXJlLW5hbWUiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmVhdHVyZS1uYW1lLXRleHQiPltbc2VxZmVhdC5uYW1lXV08L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXgtY29udHJvbHMgdmFsdWUtcGlsbHMtaG9sZGVyIj4KICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2lzRXhwYW5kZWQoc2VxZmVhdC5uYW1lLCBleHBhbmRBbGxGZWF0dXJlcyldXSI+CiAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tnZXRTZXFGZWF0dXJlVmFsdWVzKHNlcWZlYXQubmFtZSwgc2VxTnVtYmVyKV1dIiBhcz0ic2VxdmFsdWUiPgogICAgICAgICAgICAgICAgICAgICAgPGlyb24tYXV0b2dyb3ctdGV4dGFyZWEgY2xhc3MkPSJbW2dldElucHV0UGlsbENsYXNzKHNlcWZlYXQubmFtZSwgZGlzcGxheU1vZGUpXV0iIHJlYWRvbmx5JD0iW1tyZWFkb25seV1dIiBvbi1pbnB1dD0ib25WYWx1ZUNoYW5nZWQiIG9uLWZvY3VzPSJvbklucHV0Rm9jdXMiIG9uLWJsdXI9Im9uSW5wdXRCbHVyIiBkYXRhLWZlYXR1cmU9Iltbc2VxZmVhdC5uYW1lXV0iIGRhdGEtaW5kZXg9IltbaW5kZXhdXSIgZGF0YS1zZXEtbnVtPSJbW3NlcU51bWJlcl1dIiB2YWx1ZT0iW1tzZXF2YWx1ZV1dIj4KICAgICAgICAgICAgICAgICAgICAgIDwvaXJvbi1hdXRvZ3Jvdy10ZXh0YXJlYT4KICAgICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIWlzRXhwYW5kZWQoc2VxZmVhdC5uYW1lLCBleHBhbmRBbGxGZWF0dXJlcyldXSI+CiAgICAgICAgICAgICAgICAgICAgPGlyb24tYXV0b2dyb3ctdGV4dGFyZWEgY2xhc3MkPSJbW2dldElucHV0UGlsbENsYXNzKHNlcWZlYXQubmFtZSwgZGlzcGxheU1vZGUpXV0iIHJlYWRvbmx5JD0iW1tyZWFkb25seV1dIiBvbi1pbnB1dD0ib25WYWx1ZUNoYW5nZWQiIG9uLWZvY3VzPSJvbklucHV0Rm9jdXMiIG9uLWJsdXI9Im9uSW5wdXRCbHVyIiBkYXRhLWZlYXR1cmU9Iltbc2VxZmVhdC5uYW1lXV0iIGRhdGEtaW5kZXg9IltbemVyb0luZGV4XV0iIGRhdGEtc2VxLW51bT0iW1tzZXFOdW1iZXJdXSIgdmFsdWU9IltbZ2V0Rmlyc3RTZXFGZWF0dXJlVmFsdWUoc2VxZmVhdC5uYW1lLCBzZXFOdW1iZXIpXV0iPgogICAgICAgICAgICAgICAgICAgIDwvaXJvbi1hdXRvZ3Jvdy10ZXh0YXJlYT4KICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Iltbc2VxRmVhdHVyZUhhc011bHRpcGxlVmFsdWVzKHNlcWZlYXQubmFtZSwgc2VxTnVtYmVyKV1dIj4KICAgICAgICAgICAgICAgICAgICAgIDxwYXBlci1idXR0b24gZGF0YS1mZWF0dXJlPSJbW3NlcWZlYXQubmFtZV1dIiBvbi1jbGljaz0iZXhwYW5kRmVhdHVyZSIgY2xhc3MkPSJbW2dldElucHV0UGlsbENsYXNzKHNlcWZlYXQubmFtZSwgZGlzcGxheU1vZGUpXV0iPgogICAgICAgICAgICAgICAgICAgICAgICAuLi4KICAgICAgICAgICAgICAgICAgICAgIDwvcGFwZXItYnV0dG9uPgogICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tjb21wYXJlTW9kZV1dIj4KICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmxleC1jb250cm9scyB2YWx1ZS1waWxscy1ob2xkZXIiPgogICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tpc0V4cGFuZGVkKHNlcWZlYXQubmFtZSwgZXhwYW5kQWxsRmVhdHVyZXMpXV0iPgogICAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tnZXRDb21wYXJlU2VxRmVhdHVyZVZhbHVlcyhzZXFmZWF0Lm5hbWUsIHNlcU51bWJlcildXSIgYXM9InNlcXZhbHVlIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGlyb24tYXV0b2dyb3ctdGV4dGFyZWEgY2xhc3MkPSJbW2dldFNlcUNvbXBhcmVJbnB1dENsYXNzKHNlcWZlYXQubmFtZSwgZGlzcGxheU1vZGUsIHNlcU51bWJlciwgaW5kZXgpXV0iIHJlYWRvbmx5IHZhbHVlPSJbW3NlcXZhbHVlXV0iPgogICAgICAgICAgICAgICAgICAgICAgICA8L2lyb24tYXV0b2dyb3ctdGV4dGFyZWE+CiAgICAgICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbWyFpc0V4cGFuZGVkKHNlcWZlYXQubmFtZSwgZXhwYW5kQWxsRmVhdHVyZXMpXV0iPgogICAgICAgICAgICAgICAgICAgICAgPGlyb24tYXV0b2dyb3ctdGV4dGFyZWEgY2xhc3MkPSJbW2dldFNlcUNvbXBhcmVJbnB1dENsYXNzKHNlcWZlYXQubmFtZSwgZGlzcGxheU1vZGUsIHNlcU51bWJlciwgemVyb0luZGV4KV1dIiByZWFkb25seSB2YWx1ZT0iW1tnZXRGaXJzdENvbXBhcmVTZXFGZWF0dXJlVmFsdWUoc2VxZmVhdC5uYW1lLCBzZXFOdW1iZXIpXV0iPgogICAgICAgICAgICAgICAgICAgICAgPC9pcm9uLWF1dG9ncm93LXRleHRhcmVhPgogICAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2NvbXBhcmVTZXFGZWF0dXJlSGFzTXVsdGlwbGVWYWx1ZXMoc2VxZmVhdC5uYW1lLCBzZXFOdW1iZXIpXV0iPgogICAgICAgICAgICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uIGRhdGEtZmVhdHVyZT0iW1tzZXFmZWF0Lm5hbWVdXSIgb24tY2xpY2s9ImV4cGFuZEZlYXR1cmUiIGNsYXNzJD0iW1tnZXRTZXFDb21wYXJlSW5wdXRDbGFzcyhzZXFmZWF0Lm5hbWUsIGRpc3BsYXlNb2RlLCBzZXFOdW1iZXIpXV0iPgogICAgICAgICAgICAgICAgICAgICAgICAgIC4uLgogICAgICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgICAgPHBhcGVyLWljb24tYnV0dG9uIGljb249Im1vcmUtaG9yaXoiIGNsYXNzJD0iW1tnZXRBZGRWYWx1ZUJ1dHRvbkNsYXNzKHJlYWRvbmx5KV1dIj48L3BhcGVyLWljb24tYnV0dG9uPgogICAgICAgICAgICAgICAgPHBhcGVyLWRpYWxvZz4KICAgICAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbiBkYXRhLWZlYXR1cmU9Iltbc2VxZmVhdC5uYW1lXV0iIG9uLWNsaWNrPSJkZWxldGVGZWF0dXJlIj4KICAgICAgICAgICAgICAgICAgICBEZWxldGUgZmVhdHVyZQogICAgICAgICAgICAgICAgICA8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbiBkYXRhLWZlYXR1cmU9Iltbc2VxZmVhdC5uYW1lXV0iIGRhdGEtc2VxLW51bT0iW1tzZXFOdW1iZXJdXSIgb24tY2xpY2s9ImFkZFZhbHVlIiBjbGFzcz0iZmVhdHVyZS1kaWFsb2ctYnV0dG9uIj4KICAgICAgICAgICAgICAgICAgICBBZGQgZmVhdHVyZSB2YWx1ZQogICAgICAgICAgICAgICAgICA8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgICAgICAgIDwvcGFwZXItZGlhbG9nPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPHBhcGVyLWljb24tYnV0dG9uIG9uLWNsaWNrPSJvcGVuQWRkRmVhdHVyZURpYWxvZyIgaWNvbj0iYWRkIiB0aXRsZT0iQWRkIGZlYXR1cmUiIGNsYXNzJD0iW1tnZXRBZGRWYWx1ZUJ1dHRvbkNsYXNzKHJlYWRvbmx5KV1dIj4KICAgICAgPC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgPGRpdiBjbGFzcyQ9IltbZ2V0U2FsaWVuY3lDb250cm9sc0hvbGRlckNsYXNzKHNhbGllbmN5KV1dIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzYWxpZW5jeS1sZWdlbmQtbGFiZWwiPkF0dHJpYnV0aW9uIGxlZ2VuZDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImZsZXgtY29udHJvbHMiPgogICAgICAgICAgPHN2ZyBpZD0ic2FsaWVuY3lMZWdlbmQiPjwvc3ZnPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogICAgPHBhcGVyLWljb24tYnV0dG9uIGlkPSJkZWxldGV2YWx1ZSIgaWNvbj0iZGVsZXRlIiBjbGFzcyQ9IltbZ2V0RGVsZXRlVmFsdWVCdXR0b25DbGFzcyhyZWFkb25seSwgc2hvd0RlbGV0ZVZhbHVlQnV0dG9uKV1dIiBkYXRhLWZlYXR1cmU9IltbZm9jdXNlZEZlYXR1cmVOYW1lXV0iIGRhdGEtaW5kZXg9IltbZm9jdXNlZEZlYXR1cmVWYWx1ZUluZGV4XV0iIGRhdGEtc2VxLW51bT0iW1tmb2N1c2VkU2VxTnVtYmVyXV0iIG9uLWNsaWNrPSJkZWxldGVWYWx1ZSIgdGl0bGU9IkRlbGV0ZSB2YWx1ZSI+CiAgICA8L3BhcGVyLWljb24tYnV0dG9uPgogICAgPHBhcGVyLWRpYWxvZyBpZD0iYWRkRmVhdHVyZURpYWxvZyI+CiAgICAgIDxoMj5BZGQgRmVhdHVyZTwvaDI+CiAgICAgIDxwYXBlci1pbnB1dCBsYWJlbD0iRmVhdHVyZSBuYW1lIiB2YWx1ZT0ie3tuZXdGZWF0dXJlTmFtZX19Ij48L3BhcGVyLWlucHV0PgogICAgICA8cGFwZXItcmFkaW8tZ3JvdXAgc2VsZWN0ZWQ9Int7bmV3RmVhdHVyZVR5cGV9fSI+CiAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbiBuYW1lPSJpbnQiPkludDwvcGFwZXItcmFkaW8tYnV0dG9uPgogICAgICAgIDxwYXBlci1yYWRpby1idXR0b24gbmFtZT0iZmxvYXQiPkZsb2F0PC9wYXBlci1yYWRpby1idXR0b24+CiAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbiBuYW1lPSJieXRlcyI+Qnl0ZXM8L3BhcGVyLXJhZGlvLWJ1dHRvbj4KICAgICAgPC9wYXBlci1yYWRpby1ncm91cD4KICAgICAgPHBhcGVyLWJ1dHRvbiBkaWFsb2ctZGlzbWlzcyBjbGFzcz0iY29udHJvbC1idXR0b24iIG9uLWNsaWNrPSJhZGRGZWF0dXJlIiBkaXNhYmxlZD0iW1shc2hvdWxkRW5hYmxlQWRkRmVhdHVyZShuZXdGZWF0dXJlTmFtZSldXSI+CiAgICAgICAgQ3JlYXRlCiAgICAgIDwvcGFwZXItYnV0dG9uPgogICAgPC9wYXBlci1kaWFsb2c+CiAgPC90ZW1wbGF0ZT4KICA8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdnotZXhhbXBsZS12aWV3ZXIvdnotZXhhbXBsZS12aWV3ZXIuanMKdmFyIHFxOwooZnVuY3Rpb24oKXtjb25zdCBhPWQzLmludGVycG9sYXRlUmdiLGM9L15pbWFnZVwvKFteXC9dK1wvKSplbmNvZGVkJC8sZD1bMSwyMF07UG9seW1lcih7aXM6InZ6LWV4YW1wbGUtdmlld2VyIixwcm9wZXJ0aWVzOntleGFtcGxlOnt0eXBlOk9iamVjdH0sc2VyaWFsaXplZEV4YW1wbGU6e3R5cGU6U3RyaW5nLG9ic2VydmVyOiJ1cGRhdGVFeGFtcGxlIn0sc2VyaWFsaXplZFNlcUV4YW1wbGU6e3R5cGU6U3RyaW5nLG9ic2VydmVyOiJ1cGRhdGVTZXFFeGFtcGxlIn0sanNvbjp7dHlwZTpPYmplY3Qsb2JzZXJ2ZXI6ImNyZWF0ZUV4YW1wbGVzRnJvbUpzb24ifSxzYWxpZW5jeTp7dHlwZTpPYmplY3QsdmFsdWU6e319LHNhbGllbmN5SnNvblN0cmluZzp7dHlwZTpTdHJpbmcsb2JzZXJ2ZXI6ImhhdmVTYWxpZW5jeUpzb24ifSxyZWFkb25seTp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxzZXFOdW1iZXI6e3R5cGU6TnVtYmVyLHZhbHVlOjAsb2JzZXJ2ZXI6Im5ld1NlcU51bSJ9LGlzU2VxdWVuY2U6Qm9vbGVhbiwKY2hhbmdlQ2FsbGJhY2tUaW1lcjpOdW1iZXIsaWdub3JlQ2hhbmdlOkJvb2xlYW4sbWluU2FsOnt0eXBlOk51bWJlcix2YWx1ZTowfSxtYXhTYWw6e3R5cGU6TnVtYmVyLHZhbHVlOjB9LHNob3dTYWxpZW5jeTp7dHlwZTpCb29sZWFuLHZhbHVlOiEwfSxpbWFnZUluZm86e3R5cGU6T2JqZWN0LHZhbHVlOnt9fSx3aW5kb3dXaWR0aDp7dHlwZTpOdW1iZXIsdmFsdWU6MjU2fSx3aW5kb3dDZW50ZXI6e3R5cGU6TnVtYmVyLHZhbHVlOjEyOH0sc2FsaWVuY3lDdXRvZmY6e3R5cGU6TnVtYmVyLHZhbHVlOjB9LGhhc0ltYWdlOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITB9LGFsbG93SW1hZ2VDb250cm9sczp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxpbWFnZVNjYWxlUGVyY2VudGFnZTp7dHlwZTpOdW1iZXIsdmFsdWU6MTAwfSxmZWF0dXJlczp7dHlwZTpPYmplY3QsY29tcHV0ZWQ6ImdldEZlYXR1cmVzKGV4YW1wbGUpIn0sZmVhdHVyZXNMaXN0Ont0eXBlOk9iamVjdCxjb21wdXRlZDoiZ2V0RmVhdHVyZXNMaXN0KGZlYXR1cmVzLCBjb21wYXJlRmVhdHVyZXMpIn0sCnNlcUZlYXR1cmVzOnt0eXBlOk9iamVjdCxjb21wdXRlZDoiZ2V0U2VxRmVhdHVyZXMoZXhhbXBsZSkifSxzZXFGZWF0dXJlc0xpc3Q6e3R5cGU6T2JqZWN0LGNvbXB1dGVkOiJnZXRGZWF0dXJlc0xpc3Qoc2VxRmVhdHVyZXMsIGNvbXBhcmVTZXFGZWF0dXJlcykifSxtYXhTZXFOdW1iZXI6e3R5cGU6TnVtYmVyLGNvbXB1dGVkOiJnZXRNYXhTZXFOdW1iZXIoc2VxRmVhdHVyZXNMaXN0KSJ9LGNvbG9yczp7dHlwZTpPYmplY3QsY29tcHV0ZWQ6ImdldENvbG9ycyhzYWxpZW5jeSkiLG9ic2VydmVyOiJjcmVhdGVMZWdlbmQifSxkaXNwbGF5TW9kZTp7dHlwZTpTdHJpbmcsdmFsdWU6ImdyaWQifSxmZWF0dXJlU2VhcmNoVmFsdWU6e3R5cGU6U3RyaW5nLHZhbHVlOiIiLG5vdGlmeTohMH0sZmlsdGVyZWRGZWF0dXJlc0xpc3Q6e3R5cGU6T2JqZWN0fSxmaWx0ZXJlZFNlcUZlYXR1cmVzTGlzdDp7dHlwZTpPYmplY3R9LGZvY3VzZWRGZWF0dXJlTmFtZTpTdHJpbmcsZm9jdXNlZEZlYXR1cmVWYWx1ZUluZGV4Ok51bWJlciwKZm9jdXNlZFNlcU51bWJlcjpOdW1iZXIsc2hvd0RlbGV0ZVZhbHVlQnV0dG9uOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGV4cGFuZGVkRmVhdHVyZXM6e3R5cGU6T2JqZWN0LHZhbHVlOnt9fSxleHBhbmRBbGxGZWF0dXJlczp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSx6ZXJvSW5kZXg6e3R5cGU6TnVtYmVyLHZhbHVlOjB9LGNvbXBhcmVKc29uOnt0eXBlOk9iamVjdCxvYnNlcnZlcjoiY3JlYXRlQ29tcGFyZUV4YW1wbGVzRnJvbUpzb24ifSxjb21wYXJlRXhhbXBsZTp7dHlwZTpPYmplY3R9LGNvbXBhcmVGZWF0dXJlczp7dHlwZTpPYmplY3QsY29tcHV0ZWQ6ImdldEZlYXR1cmVzKGNvbXBhcmVFeGFtcGxlKSIsb2JzZXJ2ZXI6InVwZGF0ZUNvbXBhcmVNb2RlIn0sY29tcGFyZVNlcUZlYXR1cmVzOnt0eXBlOk9iamVjdCxjb21wdXRlZDoiZ2V0U2VxRmVhdHVyZXMoY29tcGFyZUV4YW1wbGUpIixvYnNlcnZlcjoidXBkYXRlQ29tcGFyZU1vZGUifSxjb21wYXJlTW9kZTpCb29sZWFuLApjb21wYXJlSW1hZ2VJbmZvOnt0eXBlOk9iamVjdCx2YWx1ZTp7fX0sY29tcGFyZVRpdGxlOlN0cmluZ30sb2JzZXJ2ZXJzOlsiaGF2ZVNhbGllbmN5KGZpbHRlcmVkRmVhdHVyZXNMaXN0LCBzYWxpZW5jeSwgY29sb3JzLCBzaG93U2FsaWVuY3ksIHNhbGllbmN5Q3V0b2ZmKSIsInNlcVNhbGllbmN5KHNlcU51bWJlciwgc2VxRmVhdHVyZXNMaXN0LCBzYWxpZW5jeSwgY29sb3JzLCBzaG93U2FsaWVuY3ksIHNhbGllbmN5Q3V0b2ZmKSIsInNldEZpbHRlcmVkRmVhdHVyZXNMaXN0KGZlYXR1cmVzTGlzdCwgZmVhdHVyZVNlYXJjaFZhbHVlLCBzYWxpZW5jeSkiLCJzZXRGaWx0ZXJlZFNlcUZlYXR1cmVzTGlzdChzZXFGZWF0dXJlc0xpc3QsIGZlYXR1cmVTZWFyY2hWYWx1ZSwgc2FsaWVuY3kpIl0saXNFeHBhbmRlZDpmdW5jdGlvbihmKXtyZXR1cm4gdGhpcy5leHBhbmRBbGxGZWF0dXJlc3x8dGhpcy5zYW5pdGl6ZUZlYXR1cmUoZilpbiB0aGlzLmV4cGFuZGVkRmVhdHVyZXN9LHVwZGF0ZUV4YW1wbGU6ZnVuY3Rpb24oKXt0aGlzLmRlc2VyaWFsaXplRXhhbXBsZSh0aGlzLnNlcmlhbGl6ZWRFeGFtcGxlLAppaSl9LHVwZGF0ZVNlcUV4YW1wbGU6ZnVuY3Rpb24oKXt0aGlzLmRlc2VyaWFsaXplRXhhbXBsZSh0aGlzLnNlcmlhbGl6ZWRTZXFFeGFtcGxlLG1pKX0sc3RyaW5nVG9VaW50OEFycmF5OmZ1bmN0aW9uKGYpe3JldHVybihuZXcgd2luZG93LlRleHRFbmNvZGVyKS5lbmNvZGUoZil9LGRlc2VyaWFsaXplRXhhbXBsZTpmdW5jdGlvbihmLGcpe3RoaXMuaWdub3JlQ2hhbmdlfHwoZj10aGlzLmRlY29kZWRTdHJpbmdUb0NoYXJDb2RlcyhhdG9iKGYpKSx0aGlzLmV4YW1wbGU9ZyhmKSl9LGdldEZlYXR1cmVzOmZ1bmN0aW9uKGYpe3RoaXMuaW1hZ2VJbmZvPXt9O3RoaXMuaGFzSW1hZ2U9ITE7aWYobnVsbD09ZilyZXR1cm4gbmV3IE1hcChbXSk7aWYoZiBpbnN0YW5jZW9mIGZpKXJldHVybiB0aGlzLmlzU2VxdWVuY2U9ITEsZi5oYXNGZWF0dXJlcygpfHxmLnNldEZlYXR1cmVzKG5ldyBZZyksZi5nZXRGZWF0dXJlcygpLmdldEZlYXR1cmVNYXAoKTt0aGlzLmlzU2VxdWVuY2U9ITA7Zi5oYXNDb250ZXh0KCl8fApmLnNldENvbnRleHQobmV3IFlnKTtyZXR1cm4gZi5nZXRDb250ZXh0KCkuZ2V0RmVhdHVyZU1hcCgpfSxnZXRGZWF0dXJlc0xpc3Q6ZnVuY3Rpb24oZixnKXtpZihudWxsPT1mKXJldHVybltdO2NvbnN0IGw9W10saz17fTtsZXQgbT1mLmtleXMoKTtpZihtKXtsZXQgcD1tLm5leHQoKTtmb3IoOyFwLmRvbmU7KWwucHVzaCh7bmFtZTpwLnZhbHVlLGZlYXR1cmU6Zi5nZXQocC52YWx1ZSl9KSxrW3AudmFsdWVdPSEwLHA9bS5uZXh0KCl9aWYobnVsbD09ZylyZXR1cm4gbDtpZihtPWcua2V5cygpKWZvcihmPW0ubmV4dCgpOyFmLmRvbmU7KWYudmFsdWUgaW4ga3x8KGwucHVzaCh7bmFtZTpmLnZhbHVlLGZlYXR1cmU6Zy5nZXQoZi52YWx1ZSl9KSxrW2YudmFsdWVdPSEwKSxmPW0ubmV4dCgpO3JldHVybiBsfSxnZXRTZXFGZWF0dXJlczpmdW5jdGlvbihmKXtyZXR1cm4gbnVsbD09Znx8ZiBpbnN0YW5jZW9mIGZpP25ldyBNYXAoW10pOnRoaXMuZXhhbXBsZS5nZXRGZWF0dXJlTGlzdHMoKS5nZXRGZWF0dXJlTGlzdE1hcCgpfSwKc2V0RmlsdGVyZWRGZWF0dXJlc0xpc3Q6ZnVuY3Rpb24oZixnLGwpe3RoaXMuZmlsdGVyZWRGZWF0dXJlc0xpc3Q9W107dGhpcy5maWx0ZXJlZEZlYXR1cmVzTGlzdD10aGlzLmdldEZpbHRlcmVkRmVhdHVyZXNMaXN0KGYsZyxsKX0sc2V0RmlsdGVyZWRTZXFGZWF0dXJlc0xpc3Q6ZnVuY3Rpb24oZixnLGwpe3RoaXMuZmlsdGVyZWRTZXFGZWF0dXJlc0xpc3Q9W107dGhpcy5maWx0ZXJlZFNlcUZlYXR1cmVzTGlzdD10aGlzLmdldEZpbHRlcmVkRmVhdHVyZXNMaXN0KGYsZyxsKX0sZ2V0RmlsdGVyZWRGZWF0dXJlc0xpc3Q6ZnVuY3Rpb24oZixnLGwpe2lmKG51bGwhPWYpe3ZhciBrPWYsbT1sJiYwPE9iamVjdC5rZXlzKGwpLmxlbmd0aCxwPW0/T2JqZWN0LmFzc2lnbih7fSwuLi5PYmplY3Qua2V5cyhsKS5tYXAocT0+KHtbcV06Im51bWJlciI9PXR5cGVvZiBsW3FdP2xbcV06bFtxXS5yZWR1Y2UoKHIsdCk9PnIrdCwwKX0pKSk6e307aWYoIiIhPWcpe2NvbnN0IHE9bmV3IFJlZ0V4cChnLAoiaSIpO2s9Zi5maWx0ZXIocj0+cS50ZXN0KHIubmFtZSkpfXJldHVybiBrLnNvcnQoKHEscik9PntpZih0aGlzLmlzSW1hZ2UocS5uYW1lKSYmIXRoaXMuaXNJbWFnZShyLm5hbWUpKXJldHVybi0xO2lmKHRoaXMuaXNJbWFnZShyLm5hbWUpJiYhdGhpcy5pc0ltYWdlKHEubmFtZSkpcmV0dXJuIDE7aWYobSl7aWYocS5uYW1lIGluIGwmJiEoci5uYW1lIGluIGwpKXJldHVybi0xO2lmKHIubmFtZSBpbiBsJiYhKHEubmFtZSBpbiBsKSlyZXR1cm4gMTt7Y29uc3QgdD1wW3IubmFtZV0tcFtxLm5hbWVdO2lmKDAhPXQpcmV0dXJuIHR9fXJldHVybiBxLm5hbWUubG9jYWxlQ29tcGFyZShyLm5hbWUpfSl9fSxnZXRNYXhTZXFOdW1iZXI6ZnVuY3Rpb24oKXtsZXQgZj0tMTtmb3IoY29uc3QgZyBvZiB0aGlzLnNlcUZlYXR1cmVzTGlzdCl7Y29uc3QgbD1nLmZlYXR1cmU7bCYmbC5nZXRGZWF0dXJlTGlzdCgpLmxlbmd0aC0xPmYmJihmPWwuZ2V0RmVhdHVyZUxpc3QoKS5sZW5ndGgtMSl9cmV0dXJuIGZ9LApoYXZlU2FsaWVuY3lKc29uOmZ1bmN0aW9uKCl7dGhpcy5zYWxpZW5jeT1KU09OLnBhcnNlKHRoaXMuc2FsaWVuY3lKc29uU3RyaW5nKX0sZ2V0Q29sb3JzOmZ1bmN0aW9uKCl7W3RoaXMubWluU2FsLHRoaXMubWF4U2FsXT10aGlzLmdldE1pbk1heFNhbGllbmN5KHRoaXMuc2FsaWVuY3kpO3JldHVybiBkMy5zY2FsZUxpbmVhcigpLmRvbWFpbihbdGhpcy5taW5TYWwsMCx0aGlzLm1heFNhbF0pLmludGVycG9sYXRlKGEpLmNsYW1wKCEwKS5yYW5nZShbIiNGRjg0N0MiLCIjZmZmIiwiIzAwN0I4MyJdKX0sc2VsZWN0QWxsOmZ1bmN0aW9uKGYpe3JldHVybiBkMy5zZWxlY3RBbGwoUG9seW1lci5kb20odGhpcy5yb290KS5xdWVyeVNlbGVjdG9yQWxsKGYpKX0saGF2ZVNhbGllbmN5OmZ1bmN0aW9uKCl7cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT50aGlzLl9oYXZlU2FsaWVuY3lJbXBsKCkpfSxfaGF2ZVNhbGllbmN5SW1wbDpmdW5jdGlvbigpe3RoaXMuc2VsZWN0QWxsKCIudmFsdWUtcGlsbCIpLnN0eWxlKCJiYWNrZ3JvdW5kIiwKIiNmZmYiKTtpZih0aGlzLmZpbHRlcmVkRmVhdHVyZXNMaXN0JiZ0aGlzLnNhbGllbmN5JiYwIT09T2JqZWN0LmtleXModGhpcy5zYWxpZW5jeSkubGVuZ3RoJiZ0aGlzLmNvbG9ycylmb3IoY29uc3QgZyBvZiB0aGlzLmZpbHRlcmVkRmVhdHVyZXNMaXN0KXtjb25zdCBsPXRoaXMuc2FsaWVuY3lbZy5uYW1lXTtpZihsKXt2YXIgZj1BcnJheS5pc0FycmF5KGwpPyhrLG0pPT50aGlzLmdldENvbG9yRm9yU2FsaWVuY3kobFttXSk6KCk9PnRoaXMuZ2V0Q29sb3JGb3JTYWxpZW5jeShsKTt0aGlzLnNlbGVjdEFsbChgLiR7dGhpcy5zYW5pdGl6ZUZlYXR1cmUoZy5uYW1lKX0udmFsdWUtcGlsbGApLnN0eWxlKCJiYWNrZ3JvdW5kIix0aGlzLnNob3dTYWxpZW5jeT9mOigpPT4iI2ZmZiIpO2lmKEFycmF5LmlzQXJyYXkobCkpe2Y9bDtjb25zdCBrPXRoaXMuc2VsZWN0QWxsKGBwYXBlci1idXR0b24uJHt0aGlzLnNhbml0aXplRmVhdHVyZShnLm5hbWUpfS52YWx1ZS1waWxsYCk7bGV0IG09CjA7Zm9yKGxldCBwPTE7cDxmLmxlbmd0aDtwKyspTWF0aC5hYnMoZltwXSk+TWF0aC5hYnMobSkmJihtPWZbcF0pO2suc3R5bGUoImJhY2tncm91bmQiLHRoaXMuc2hvd1NhbGllbmN5PygpPT50aGlzLmdldENvbG9yRm9yU2FsaWVuY3kobSk6KCk9PiIjZmZmIil9fX19LG5ld1NlcU51bTpmdW5jdGlvbigpe3RoaXMuc2VxU2FsaWVuY3koKX0sc2VxU2FsaWVuY3k6ZnVuY3Rpb24oKXtpZih0aGlzLnNlcUZlYXR1cmVzTGlzdCYmdGhpcy5zYWxpZW5jeSYmMCE9PU9iamVjdC5rZXlzKHRoaXMuc2FsaWVuY3kpLmxlbmd0aCYmdGhpcy5jb2xvcnMpaWYodGhpcy5zZWxlY3RBbGwoIi52YWx1ZSBpbnB1dCIpLnNpemUoKTx0aGlzLnNlcUZlYXR1cmVzTGlzdC5sZW5ndGgpcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT50aGlzLnNlcVNhbGllbmN5KCkpO2Vsc2UgZm9yKGNvbnN0IGcgb2YgdGhpcy5zZXFGZWF0dXJlc0xpc3Qpe3ZhciBmPXRoaXMuc2FsaWVuY3lbZy5uYW1lXTtpZighZiljb250aW51ZTsKY29uc3QgbD1mW3RoaXMuc2VxTnVtYmVyXTtmPUFycmF5LmlzQXJyYXkobCk/KGssbSk9PnRoaXMuZ2V0Q29sb3JGb3JTYWxpZW5jeShsW21dKTooKT0+dGhpcy5nZXRDb2xvckZvclNhbGllbmN5KGwpO3RoaXMuc2VsZWN0QWxsKGAuJHt0aGlzLnNhbml0aXplRmVhdHVyZShnLm5hbWUpfSBpbnB1dGApLnN0eWxlKCJjb2xvciIsdGhpcy5zaG93U2FsaWVuY3k/ZjooKT0+ImJsYWNrIil9fSxnZXRNaW5NYXhTYWxpZW5jeTpmdW5jdGlvbihmKXtsZXQgZz1JbmZpbml0eSxsPS1JbmZpbml0eTtjb25zdCBrPW09PntpZihBcnJheS5pc0FycmF5KG0pKWZvcihjb25zdCBwIG9mIG0payhwKTtlbHNlIG08ZyYmKGc9bSksbT5sJiYobD1tKX07Zm9yKGNvbnN0IG0gaW4gZilmLmhhc093blByb3BlcnR5KG0pJiZrKGZbbV0pO2c9Ljk1Kk1hdGgubWluKDAsZyk7bD0uOTUqTWF0aC5tYXgoMCxsKTswPmcmJmw+TWF0aC5hYnMoZyk/Zz0tMSpsOjA8bCYmTWF0aC5hYnMoZyk+bCYmKGw9LTEqZyk7CnJldHVybltnLGxdfSxnZXRGZWF0dXJlVmFsdWVzOmZ1bmN0aW9uKGYsZyxsLGspe3JldHVybihmPWs/dGhpcy5jb21wYXJlRmVhdHVyZXMuZ2V0KGYpOnRoaXMuZmVhdHVyZXMuZ2V0KGYpKT9mLmdldEJ5dGVzTGlzdCgpP2c/Zi5nZXRCeXRlc0xpc3QoKS5nZXRWYWx1ZUxpc3QoKS5zbGljZSgpOmYuZ2V0Qnl0ZXNMaXN0KCkuZ2V0VmFsdWVMaXN0X2FzVTgoKS5tYXAobT0+dGhpcy5kZWNvZGVCeXRlc0xpc3RTdHJpbmcobSxsKSk6Zi5nZXRJbnQ2NExpc3QoKT9mLmdldEludDY0TGlzdCgpLmdldFZhbHVlTGlzdCgpLnNsaWNlKCk6Zi5nZXRGbG9hdExpc3QoKT9mLmdldEZsb2F0TGlzdCgpLmdldFZhbHVlTGlzdCgpLnNsaWNlKCk6W106W119LGdldENvbXBhcmVGZWF0dXJlVmFsdWVzOmZ1bmN0aW9uKGYsZyxsKXtyZXR1cm4gdGhpcy5nZXRGZWF0dXJlVmFsdWVzKGYsZyxsLCEwKX0sZ2V0Rmlyc3RGZWF0dXJlVmFsdWU6ZnVuY3Rpb24oZil7cmV0dXJuIHRoaXMuZ2V0RmVhdHVyZVZhbHVlcyhmKVswXX0sCmdldEZpcnN0Q29tcGFyZUZlYXR1cmVWYWx1ZTpmdW5jdGlvbihmKXtyZXR1cm4gdGhpcy5nZXRDb21wYXJlRmVhdHVyZVZhbHVlcyhmKVswXX0sZmVhdHVyZUhhc011bHRpcGxlVmFsdWVzOmZ1bmN0aW9uKGYpe3JldHVybiAxPHRoaXMuZ2V0RmVhdHVyZVZhbHVlcyhmKS5sZW5ndGh9LGNvbXBhcmVGZWF0dXJlSGFzTXVsdGlwbGVWYWx1ZXM6ZnVuY3Rpb24oZil7cmV0dXJuIDE8dGhpcy5nZXRDb21wYXJlRmVhdHVyZVZhbHVlcyhmKS5sZW5ndGh9LGdldFNlcUZlYXR1cmVWYWx1ZXM6ZnVuY3Rpb24oZixnLGwsayxtKXtmPW0/dGhpcy5jb21wYXJlU2VxRmVhdHVyZXMuZ2V0KGYpOnRoaXMuc2VxRmVhdHVyZXMuZ2V0KGYpO2lmKCFmKXJldHVybltdO2Y9Zi5nZXRGZWF0dXJlTGlzdCgpO3JldHVybiFmfHxmLmxlbmd0aDw9Zz9bXTooZz1mW2ddKT9nLmdldEJ5dGVzTGlzdCgpP2w/Zy5nZXRCeXRlc0xpc3QoKS5nZXRWYWx1ZUxpc3QoKTpnLmdldEJ5dGVzTGlzdCgpLmdldFZhbHVlTGlzdF9hc1U4KCkubWFwKHA9Pgp0aGlzLmRlY29kZUJ5dGVzTGlzdFN0cmluZyhwLGspKTpnLmdldEludDY0TGlzdCgpP2cuZ2V0SW50NjRMaXN0KCkuZ2V0VmFsdWVMaXN0KCk6Zy5nZXRGbG9hdExpc3QoKT9nLmdldEZsb2F0TGlzdCgpLmdldFZhbHVlTGlzdCgpOltdOltdfSxnZXRDb21wYXJlU2VxRmVhdHVyZVZhbHVlczpmdW5jdGlvbihmLGcsbCxrKXtyZXR1cm4gdGhpcy5nZXRTZXFGZWF0dXJlVmFsdWVzKGYsZyxsLGssITApfSxnZXRGaXJzdFNlcUZlYXR1cmVWYWx1ZTpmdW5jdGlvbihmLGcpe3JldHVybiB0aGlzLmdldFNlcUZlYXR1cmVWYWx1ZXMoZixnKVswXX0sZ2V0Rmlyc3RTZXFDb21wYXJlRmVhdHVyZVZhbHVlOmZ1bmN0aW9uKGYsZyl7cmV0dXJuIHRoaXMuZ2V0Q29tcGFyZVNlcUZlYXR1cmVWYWx1ZXMoZixnKVswXX0sc2VxRmVhdHVyZUhhc011bHRpcGxlVmFsdWVzOmZ1bmN0aW9uKGYsZyl7cmV0dXJuIDE8dGhpcy5nZXRTZXFGZWF0dXJlVmFsdWVzKGYsZykubGVuZ3RofSxjb21wYXJlU2VxRmVhdHVyZUhhc011bHRpcGxlVmFsdWVzOmZ1bmN0aW9uKGYsCmcpe3JldHVybiAxPHRoaXMuZ2V0Q29tcGFyZVNlcUZlYXR1cmVWYWx1ZXMoZixnKS5sZW5ndGh9LGRlY29kZUJ5dGVzTGlzdFN0cmluZzpmdW5jdGlvbihmLGcpe3JldHVybiAzMjc2OEUzPGYubGVuZ3RoPyJTdHJpbmcgdG9vIGxhcmdlIHRvIGRpc3BsYXkiOmc/dGhpcy5kZWNvZGVCeXRlc0xpc3RUb1N0cmluZyhmKToobmV3IHdpbmRvdy5UZXh0RGVjb2RlcikuZGVjb2RlKGYpfSxpc0J5dGVzRmVhdHVyZTpmdW5jdGlvbihmKXtjb25zdCBnPXRoaXMuZmVhdHVyZXMuZ2V0KGYpO3JldHVybiBnJiZnLmhhc0J5dGVzTGlzdCgpPyEwOihmPXRoaXMuc2VxRmVhdHVyZXMuZ2V0KGYpKSYmZi5nZXRGZWF0dXJlTGlzdCgpWzBdLmhhc0J5dGVzTGlzdCgpPyEwOiExfSxnZXRKc29uRmVhdHVyZTpmdW5jdGlvbihmKXtpZighdGhpcy5qc29uKXJldHVybiBudWxsO2lmKHRoaXMuanNvbi5mZWF0dXJlcyYmdGhpcy5qc29uLmZlYXR1cmVzLmZlYXR1cmUpe3ZhciBnPXRoaXMuanNvbi5mZWF0dXJlcy5mZWF0dXJlW2ZdOwppZihnKXJldHVybiBnfXJldHVybiB0aGlzLmpzb24uY29udGV4dCYmdGhpcy5qc29uLmNvbnRleHQuZmVhdHVyZSYmKGc9dGhpcy5qc29uLmNvbnRleHQuZmVhdHVyZVtmXSk/Zzp0aGlzLmpzb24uZmVhdHVyZUxpc3RzJiZ0aGlzLmpzb24uZmVhdHVyZUxpc3RzLmZlYXR1cmVMaXN0P3RoaXMuanNvbi5mZWF0dXJlTGlzdHMuZmVhdHVyZUxpc3RbZl06bnVsbH0sZ2V0SnNvblZhbHVlTGlzdDpmdW5jdGlvbihmLGcpe2Y9dGhpcy5nZXRKc29uRmVhdHVyZShmKTtpZighZilyZXR1cm4gbnVsbDtpc05hTihnKXx8KGY9Zi5mZWF0dXJlW2ddKTtyZXR1cm4oZz1mLmJ5dGVzTGlzdHx8Zi5pbnQ2NExpc3R8fGYuZmxvYXRMaXN0KT9nLnZhbHVlOm51bGx9LGdldERhdGFGcm9tRXZlbnQ6ZnVuY3Rpb24oZil7Zm9yKGY9Zi50YXJnZXQ7bnVsbD09Zi5kYXRhRmVhdHVyZTspe2lmKCFmLnBhcmVudEVsZW1lbnQpdGhyb3cgRXJyb3IoIkNvdWxkIG5vdCBmaW5kIGFuY2VzdG9yIGNvbnRyb2wgZWxlbWVudCIpOwpmPWYucGFyZW50RWxlbWVudH1yZXR1cm57ZmVhdHVyZTpmLmRhdGFGZWF0dXJlLHZhbHVlSW5kZXg6Zi5kYXRhSW5kZXgsc2VxTnVtOmYuZGF0YVNlcU51bX19LGdldEZlYXR1cmVGcm9tRGF0YTpmdW5jdGlvbihmKXtpZihpc05hTihmLnNlcU51bSkpcmV0dXJuIHRoaXMuZmVhdHVyZXMuZ2V0KGYuZmVhdHVyZSk7dmFyIGc9dGhpcy5zZXFGZWF0dXJlcy5nZXQoZi5mZWF0dXJlKTtpZihnKXJldHVybihnPWcuZ2V0RmVhdHVyZUxpc3QoKSk/Z1tmLnNlcU51bV06dm9pZCAwfSxnZXRWYWx1ZUxpc3RGcm9tRGF0YTpmdW5jdGlvbihmKXtyZXR1cm4gaXNOYU4oZi5zZXFOdW0pP3RoaXMuZ2V0RmVhdHVyZVZhbHVlcyhmLmZlYXR1cmUsITApOnRoaXMuZ2V0U2VxRmVhdHVyZVZhbHVlcyhmLmZlYXR1cmUsZi5zZXFOdW0sITApfSxzZXRGZWF0dXJlVmFsdWVzOmZ1bmN0aW9uKGYsZyl7Y29uc3QgbD1mLmdldEJ5dGVzTGlzdCgpLGs9Zi5nZXRJbnQ2NExpc3QoKTtmPWYuZ2V0RmxvYXRMaXN0KCk7Cmw/bC5zZXRWYWx1ZUxpc3QoZyk6az9rLnNldFZhbHVlTGlzdChnKTpmJiZmLnNldFZhbHVlTGlzdChnKX0sb25WYWx1ZUNoYW5nZWQ6ZnVuY3Rpb24oZil7Y29uc3QgZz1mLnRhcmdldDtmPXRoaXMuZ2V0RGF0YUZyb21FdmVudChmKTtjb25zdCBsPXRoaXMuZ2V0RmVhdHVyZUZyb21EYXRhKGYpLGs9dGhpcy5nZXRWYWx1ZUxpc3RGcm9tRGF0YShmKTtpZihsKXtpZih0aGlzLmlzQnl0ZXNGZWF0dXJlKGYuZmVhdHVyZSkpe3ZhciBtPXRoaXMuc3RyaW5nVG9VaW50OEFycmF5KGcudmFsdWUpO2tbZi52YWx1ZUluZGV4XT1tOyhtPXRoaXMuZ2V0SnNvblZhbHVlTGlzdChmLmZlYXR1cmUsZi5zZXFOdW0pKSYmKG1bZi52YWx1ZUluZGV4XT1idG9hKGcudmFsdWUpKX1lbHNlIGtbZi52YWx1ZUluZGV4XT0rZy52YWx1ZSwobT10aGlzLmdldEpzb25WYWx1ZUxpc3QoZi5mZWF0dXJlLGYuc2VxTnVtKSkmJihtW2YudmFsdWVJbmRleF09K2cudmFsdWUpO3RoaXMuc2V0RmVhdHVyZVZhbHVlcyhsLAprKTt0aGlzLmV4YW1wbGVDaGFuZ2VkKCl9fSxvbklucHV0Rm9jdXM6ZnVuY3Rpb24oZil7Y29uc3QgZz1mLnRhcmdldDtmPXRoaXMuZ2V0RGF0YUZyb21FdmVudChmKTt0aGlzLmZvY3VzZWRGZWF0dXJlTmFtZT1mLmZlYXR1cmU7dGhpcy5mb2N1c2VkRmVhdHVyZVZhbHVlSW5kZXg9Zi52YWx1ZUluZGV4O3RoaXMuZm9jdXNlZFNlcU51bWJlcj1mLnNlcU51bTt0aGlzLiQuZGVsZXRldmFsdWUuc3R5bGUudG9wPWcuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wLXRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wLTI1KyJweCI7dGhpcy4kLmRlbGV0ZXZhbHVlLnN0eWxlLnJpZ2h0PXRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkucmlnaHQtZy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5yaWdodCszMCsicHgiO3RoaXMuc2hvd0RlbGV0ZVZhbHVlQnV0dG9uPSEwfSxvbklucHV0Qmx1cjpmdW5jdGlvbigpe3RoaXMuc2hvd0RlbGV0ZVZhbHVlQnV0dG9uPSExfSxkZWxldGVGZWF0dXJlOmZ1bmN0aW9uKGYpe2Y9CnRoaXMuZ2V0RGF0YUZyb21FdmVudChmKTt0aGlzLmZlYXR1cmVzLmRlbCYmdGhpcy5mZWF0dXJlcy5kZWwoZi5mZWF0dXJlKTt0aGlzLnNlcUZlYXR1cmVzLmRlbCYmdGhpcy5zZXFGZWF0dXJlcy5kZWwoZi5mZWF0dXJlKTt0aGlzLmRlbGV0ZUpzb25GZWF0dXJlKGYuZmVhdHVyZSk7dGhpcy5leGFtcGxlQ2hhbmdlZCgpO3RoaXMucmVmcmVzaEV4YW1wbGVWaWV3ZXIoKX0sZGVsZXRlSnNvbkZlYXR1cmU6ZnVuY3Rpb24oZil7dGhpcy5qc29uJiYodGhpcy5qc29uLmZlYXR1cmVzJiZ0aGlzLmpzb24uZmVhdHVyZXMuZmVhdHVyZSYmZGVsZXRlIHRoaXMuanNvbi5mZWF0dXJlcy5mZWF0dXJlW2ZdLHRoaXMuanNvbi5jb250ZXh0JiZ0aGlzLmpzb24uY29udGV4dC5mZWF0dXJlJiZkZWxldGUgdGhpcy5qc29uLmNvbnRleHQuZmVhdHVyZVtmXSx0aGlzLmpzb24uZmVhdHVyZUxpc3RzJiZ0aGlzLmpzb24uZmVhdHVyZUxpc3RzLmZlYXR1cmVMaXN0JiZkZWxldGUgdGhpcy5qc29uLmZlYXR1cmVMaXN0cy5mZWF0dXJlTGlzdFtmXSl9LApkZWxldGVWYWx1ZTpmdW5jdGlvbihmKXtmPXRoaXMuZ2V0RGF0YUZyb21FdmVudChmKTtjb25zdCBnPXRoaXMuZ2V0RmVhdHVyZUZyb21EYXRhKGYpLGw9dGhpcy5nZXRWYWx1ZUxpc3RGcm9tRGF0YShmKTtpZihnKXtpZih0aGlzLmlzQnl0ZXNGZWF0dXJlKGYuZmVhdHVyZSkpe2NvbnN0IGs9dGhpcy5nZXRKc29uVmFsdWVMaXN0KGYuZmVhdHVyZSxmLnNlcU51bSk7ayYmay5zcGxpY2UoZi52YWx1ZUluZGV4LDEpfWwuc3BsaWNlKGYudmFsdWVJbmRleCwxKTt0aGlzLnNldEZlYXR1cmVWYWx1ZXMoZyxsKTt0aGlzLmV4YW1wbGVDaGFuZ2VkKCk7dGhpcy5yZWZyZXNoRXhhbXBsZVZpZXdlcigpfX0sb3BlbkFkZEZlYXR1cmVEaWFsb2c6ZnVuY3Rpb24oKXt0aGlzLiQuYWRkRmVhdHVyZURpYWxvZy5vcGVuKCl9LGFkZEZlYXR1cmU6ZnVuY3Rpb24oKXtpZih0aGlzLmpzb24pe3ZhciBmPW5ldyBXZztpZigiaW50Ij09PXRoaXMubmV3RmVhdHVyZVR5cGUpe3ZhciBnPVtdO3ZhciBsPW5ldyBVZzsKbC5zZXRWYWx1ZUxpc3QoZyk7Zi5zZXRJbnQ2NExpc3QobCk7Zz17aW50NjRMaXN0Ont2YWx1ZTpnfX19ZWxzZSJmbG9hdCI9PT10aGlzLm5ld0ZlYXR1cmVUeXBlPyhnPVtdLGw9bmV3IFNnLGwuc2V0VmFsdWVMaXN0KGcpLGYuc2V0RmxvYXRMaXN0KGwpLGc9e2Zsb2F0TGlzdDp7dmFsdWU6Z319KTooZz1bXSxsPW5ldyBRZyxsLnNldFZhbHVlTGlzdChnKSxmLnNldEJ5dGVzTGlzdChsKSxnPXtieXRlc0xpc3Q6e3ZhbHVlOmd9fSk7dGhpcy5mZWF0dXJlcy5zZXQodGhpcy5uZXdGZWF0dXJlTmFtZSxmKTt0aGlzLmFkZEpzb25GZWF0dXJlKHRoaXMubmV3RmVhdHVyZU5hbWUsZyk7dGhpcy5uZXdGZWF0dXJlTmFtZT0iIjt0aGlzLmV4YW1wbGVDaGFuZ2VkKCk7dGhpcy5yZWZyZXNoRXhhbXBsZVZpZXdlcigpfX0sYWRkSnNvbkZlYXR1cmU6ZnVuY3Rpb24oZixnKXt0aGlzLmpzb24mJnRoaXMuanNvbi5mZWF0dXJlcyYmdGhpcy5qc29uLmZlYXR1cmVzLmZlYXR1cmU/dGhpcy5qc29uLmZlYXR1cmVzLmZlYXR1cmVbZl09Cmc6dGhpcy5qc29uJiZ0aGlzLmpzb24uY29udGV4dCYmdGhpcy5qc29uLmNvbnRleHQuZmVhdHVyZSYmKHRoaXMuanNvbi5jb250ZXh0LmZlYXR1cmVbZl09Zyl9LGFkZFZhbHVlOmZ1bmN0aW9uKGYpe2Y9dGhpcy5nZXREYXRhRnJvbUV2ZW50KGYpO2NvbnN0IGc9dGhpcy5nZXRGZWF0dXJlRnJvbURhdGEoZiksbD10aGlzLmdldFZhbHVlTGlzdEZyb21EYXRhKGYpO2cmJih0aGlzLmlzQnl0ZXNGZWF0dXJlKGYuZmVhdHVyZSk/bC5wdXNoKCIiKTpsLnB1c2goMCksdGhpcy5zZXRGZWF0dXJlVmFsdWVzKGcsbCksdGhpcy5leGFtcGxlQ2hhbmdlZCgpLHRoaXMucmVmcmVzaEV4YW1wbGVWaWV3ZXIoKSl9LHJlZnJlc2hFeGFtcGxlVmlld2VyOmZ1bmN0aW9uKCl7Y29uc3QgZj10aGlzLmV4YW1wbGU7dGhpcy5pZ25vcmVDaGFuZ2U9ITA7dGhpcy5leGFtcGxlPW5ldyBmaTt0aGlzLmlnbm9yZUNoYW5nZT0hMTtzZXRUaW1lb3V0KCgpPT57dGhpcy5leGFtcGxlPWY7dGhpcy5oYXZlU2FsaWVuY3koKX0sCjApfSxleGFtcGxlQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMuZmlyZSgiZXhhbXBsZS1jaGFuZ2UiLHtleGFtcGxlOnRoaXMuZXhhbXBsZX0pO2NsZWFyVGltZW91dCh0aGlzLmNoYW5nZUNhbGxiYWNrVGltZXIpO3RoaXMuY2hhbmdlQ2FsbGJhY2tUaW1lcj1zZXRUaW1lb3V0KHRoaXMuY2hhbmdlQ2FsbGJhY2suYmluZCh0aGlzKSwxRTMpfSxjaGFuZ2VDYWxsYmFjazpmdW5jdGlvbigpe3RoaXMuaWdub3JlQ2hhbmdlPSEwO3RoaXMuaXNTZXF1ZW5jZSYmdGhpcy5zZXJpYWxpemVkU2VxRXhhbXBsZT90aGlzLnNlcmlhbGl6ZWRTZXFFeGFtcGxlPWJ0b2EodGhpcy5kZWNvZGVCeXRlc0xpc3RTdHJpbmcodGhpcy5leGFtcGxlLnNlcmlhbGl6ZUJpbmFyeSgpLCEwKSk6dGhpcy5zZXJpYWxpemVkRXhhbXBsZSYmKHRoaXMuc2VyaWFsaXplZEV4YW1wbGU9YnRvYSh0aGlzLmRlY29kZUJ5dGVzTGlzdFN0cmluZyh0aGlzLmV4YW1wbGUuc2VyaWFsaXplQmluYXJ5KCksITApKSk7dGhpcy5pZ25vcmVDaGFuZ2U9CiExfSxnZXRJbnB1dFBpbGxDbGFzczpmdW5jdGlvbihmLGcpe3JldHVybiB0aGlzLnNhbml0aXplRmVhdHVyZShmKSsiIHZhbHVlLXBpbGwiKygiZ3JpZCI9PWc/IiB2YWx1ZS1waWxsLWdyaWQiOiIgdmFsdWUtcGlsbC1zdGFja2VkIil9LGdldENvbXBhcmVJbnB1dENsYXNzOmZ1bmN0aW9uKGYsZyxsKXtnPSJ2YWx1ZS1jb21wYXJlIisoImdyaWQiPT1nPyIgdmFsdWUtcGlsbC1ncmlkIjoiIHZhbHVlLXBpbGwtc3RhY2tlZCIpO2lmKG51bGwhPWwpe2NvbnN0IGs9dGhpcy5nZXRGZWF0dXJlVmFsdWVzKGYsITApO2Y9dGhpcy5nZXRDb21wYXJlRmVhdHVyZVZhbHVlcyhmLCEwKTtnPWw+PWsubGVuZ3RofHxsPj1mLmxlbmd0aHx8a1tsXSE9ZltsXT9nKyIgdmFsdWUtZGlmZmVyZW50IjpnKyIgdmFsdWUtc2FtZSJ9cmV0dXJuIGd9LGdldFNlcUNvbXBhcmVJbnB1dENsYXNzOmZ1bmN0aW9uKGYsZyxsLGspe2c9InZhbHVlLWNvbXBhcmUiKygiZ3JpZCI9PWc/IiB2YWx1ZS1waWxsLWdyaWQiOgoiIHZhbHVlLXBpbGwtc3RhY2tlZCIpO2lmKG51bGwhPWspe2NvbnN0IG09dGhpcy5nZXRTZXFGZWF0dXJlVmFsdWVzKGYsbCwhMCk7Zj10aGlzLmdldENvbXBhcmVTZXFGZWF0dXJlVmFsdWVzKGYsbCwhMCk7Zz1rPj1tLmxlbmd0aHx8az49Zi5sZW5ndGh8fG1ba10hPWZba10/ZysiIHZhbHVlLWRpZmZlcmVudCI6ZysiIHZhbHVlLXNhbWUifXJldHVybiBnfSxzYW5pdGl6ZUZlYXR1cmU6ZnVuY3Rpb24oZil7Zj1mLnRyaW0oKTtmLm1hdGNoKC9eW0EtWmEtel0uKiQvKXx8KGY9Il8iK2YpO3JldHVybiBmLnJlcGxhY2UoL1tcL1wuI10vZywiXyIpfSxpc1NlcUV4YW1wbGU6ZnVuY3Rpb24oZil7cmV0dXJuIDA8PWZ9LHNob3VsZFNob3dTYWxpZW5jeUxlZ2VuZDpmdW5jdGlvbihmKXtyZXR1cm4gZiYmMDxPYmplY3Qua2V5cyhmKS5sZW5ndGh9LGdldFNhbGllbmN5Q29udHJvbHNIb2xkZXJDbGFzcyhmKXtyZXR1cm4gdGhpcy5zaG91bGRTaG93U2FsaWVuY3lMZWdlbmQoZik/InNhbGllbmN5LWNvbnRyb2xzLWhvbGRlciI6CiJoaWRlLXNhbGllbmN5LWNvbnRyb2xzIn0sY3JlYXRlTGVnZW5kOmZ1bmN0aW9uKCl7ZDMuc2VsZWN0KHRoaXMuJC5zYWxpZW5jeUxlZ2VuZCkuc2VsZWN0QWxsKCIqIikucmVtb3ZlKCk7Y29uc3QgZj1kMy5zZWxlY3QodGhpcy4kLnNhbGllbmN5TGVnZW5kKS5hcHBlbmQoImciKSxnPWYuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJsaW5lYXJHcmFkaWVudCIpLmF0dHIoImlkIiwidnpleGFtcGxldmlld2VyZ3JhZGllbnQiKS5hdHRyKCJ4MSIsIjAlIikuYXR0cigieTEiLCIwJSIpLmF0dHIoIngyIiwiMTAwJSIpLmF0dHIoInkyIiwiMCUiKS5hdHRyKCJzcHJlYWRNZXRob2QiLCJwYWQiKTt2YXIgbD1bXTswPnRoaXMubWluU2FsJiZsLnB1c2goIiNGRjg0N0MiKTtsLnB1c2goIiNmZmYiKTswPHRoaXMubWF4U2FsJiZsLnB1c2goIiMwMDdCODMiKTtjb25zdCBrPSgobSxwLHEpPT57Y29uc3Qgcj1bXSx0PShwLW0pLyhxLTEpO2xldCB2PTA7Zm9yKDt2PHEtMTspci5wdXNoKG0rdip0KSwKdisrO3IucHVzaChwKTtyZXR1cm4gcn0pKDAsMTAwLGwubGVuZ3RoKS5tYXAobT0+TWF0aC5yb3VuZChtKSsiJSIpO2QzLnppcChrLGwpLmZvckVhY2gobT0+e2cuYXBwZW5kKCJzdG9wIikuYXR0cigib2Zmc2V0IixtWzBdKS5hdHRyKCJzdG9wLWNvbG9yIixtWzFdKS5hdHRyKCJzdG9wLW9wYWNpdHkiLDEpfSk7Zi5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4MSIsMCkuYXR0cigieTEiLDApLmF0dHIoIndpZHRoIiwyNjApLmF0dHIoImhlaWdodCIsMjApLnN0eWxlKCJmaWxsIiwidXJsKCN2emV4YW1wbGV2aWV3ZXJncmFkaWVudCkiKTtsPWQzLnNjYWxlTGluZWFyKCkuZG9tYWluKFt0aGlzLm1pblNhbCx0aGlzLm1heFNhbF0pLnJhbmdlKFswLDI2MF0pO2w9ZDMuYXhpc0JvdHRvbShsKS50aWNrcygpO2YuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJsZWdlbmQgYXhpcyIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgwLDIwKSIpLmNhbGwobCl9LGlzSW1hZ2U6ZnVuY3Rpb24oZil7cmV0dXJuIGMudGVzdChmKX0sCmdldEltYWdlU3JjOmZ1bmN0aW9uKGYpe3RoaXMuc2V0dXBPbmxvYWRDYWxsYmFjayhmKTtyZXR1cm4gdGhpcy5nZXRJbWFnZVNyY0ZvckRhdGEoZix0aGlzLmdldEZlYXR1cmVWYWx1ZXMoZiwhMSwhMClbMF0pfSxnZXRDb21wYXJlSW1hZ2VTcmM6ZnVuY3Rpb24oZil7dGhpcy5zZXR1cE9ubG9hZENhbGxiYWNrKGYsITApO3JldHVybiB0aGlzLmdldEltYWdlU3JjRm9yRGF0YShmLHRoaXMuZ2V0Q29tcGFyZUZlYXR1cmVWYWx1ZXMoZiwhMSwhMClbMF0sITApfSxnZXRTZXFJbWFnZVNyYzpmdW5jdGlvbihmLGcpe3RoaXMuc2V0dXBPbmxvYWRDYWxsYmFjayhmKTtyZXR1cm4gdGhpcy5nZXRJbWFnZVNyY0ZvckRhdGEoZix0aGlzLmdldFNlcUZlYXR1cmVWYWx1ZXMoZixnLCExLCEwKVswXSl9LGdldENvbXBhcmVTZXFJbWFnZVNyYzpmdW5jdGlvbihmLGcpe3RoaXMuc2V0dXBPbmxvYWRDYWxsYmFjayhmLCEwKTtyZXR1cm4gdGhpcy5nZXRJbWFnZVNyY0ZvckRhdGEoZix0aGlzLmdldENvbXBhcmVTZXFGZWF0dXJlVmFsdWVzKGYsCmcsITEsITApWzBdLCEwKX0sc2V0dXBPbmxvYWRDYWxsYmFjazpmdW5jdGlvbihmLGcpe3JlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e2NvbnN0IGw9dGhpcy4kJCgiIyIrdGhpcy5nZXRJbWFnZUlkKGYsZykpO2wub25sb2FkPXRoaXMuZ2V0T25Mb2FkRm9ySW1hZ2UoZixsLGcpfSl9LGdldEltYWdlU3JjRm9yRGF0YTpmdW5jdGlvbihmLGcsbCl7Zj1jLmV4ZWMoZik7aWYobnVsbD09ZilyZXR1cm4gbnVsbDtmPWZbMV18fCIiO2w9bD90aGlzLmdldENvbXBhcmVGZWF0dXJlVmFsdWVzKCJpbWFnZSIrZisiL2Zvcm1hdCIsITEpOnRoaXMuZ2V0RmVhdHVyZVZhbHVlcygiaW1hZ2UiK2YrIi9mb3JtYXQiLCExKTtmPSJqcGVnIjswPGwubGVuZ3RoJiYoZj1sWzBdLnRvTG93ZXJDYXNlKCkpO3JldHVybiJkYXRhOmltYWdlLyIrZisiO2Jhc2U2NCwiK2J0b2EoZGVjb2RlVVJJQ29tcG9uZW50KGVuY29kZVVSSUNvbXBvbmVudChnKSkpfSxnZXRJdGVyTGVuZ3RoOmZ1bmN0aW9uKGYpe2xldCBnPQowO2lmKGYpe2xldCBsPWYubmV4dCgpO2Zvcig7IWwuZG9uZTspZysrLGw9Zi5uZXh0KCl9cmV0dXJuIGd9LHVwZGF0ZUNvbXBhcmVNb2RlOmZ1bmN0aW9uKCl7bGV0IGY9ITE7aWYodGhpcy5jb21wYXJlRmVhdHVyZXMmJjA8dGhpcy5nZXRJdGVyTGVuZ3RoKHRoaXMuY29tcGFyZUZlYXR1cmVzLmtleXMoKSl8fHRoaXMuY29tcGFyZVNlcUZlYXR1cmVzJiYwPHRoaXMuZ2V0SXRlckxlbmd0aCh0aGlzLmNvbXBhcmVTZXFGZWF0dXJlcy5rZXlzKCkpKWY9ITA7dGhpcy5jb21wYXJlTW9kZT1mfSxjcmVhdGVFeGFtcGxlc0Zyb21Kc29uOmZ1bmN0aW9uKGYpe3RoaXMuZXhhbXBsZT10aGlzLmNyZWF0ZUV4YW1wbGVzRnJvbUpzb25IZWxwZXIoZik7dGhpcy5jb21wYXJlSnNvbj17fX0sY3JlYXRlQ29tcGFyZUV4YW1wbGVzRnJvbUpzb246ZnVuY3Rpb24oZil7ZiYmKHRoaXMuY29tcGFyZUV4YW1wbGU9dGhpcy5jcmVhdGVFeGFtcGxlc0Zyb21Kc29uSGVscGVyKGYpKX0sY3JlYXRlRXhhbXBsZXNGcm9tSnNvbkhlbHBlcjpmdW5jdGlvbihmKXtpZighZilyZXR1cm4gbnVsbDsKInN0cmluZyI9PT10eXBlb2YgdGhpcy5qc29uJiYoZj1KU09OLnBhcnNlKHRoaXMuanNvbikpO2lmKGYuZmVhdHVyZXMpe3ZhciBnPW5ldyBmaTtnLnNldEZlYXR1cmVzKHRoaXMucGFyc2VGZWF0dXJlcyhmLmZlYXR1cmVzKSk7cmV0dXJuIGd9cmV0dXJuIGYuY29udGV4dHx8Zi5mZWF0dXJlTGlzdHM/KGc9bmV3IGdpLGYuY29udGV4dCYmZy5zZXRDb250ZXh0KHRoaXMucGFyc2VGZWF0dXJlcyhmLmNvbnRleHQpKSxmLmZlYXR1cmVMaXN0cyYmZy5zZXRGZWF0dXJlTGlzdHModGhpcy5wYXJzZUZlYXR1cmVMaXN0cyhmLmZlYXR1cmVMaXN0cykpLGcpOm5ldyBmaX0scGFyc2VGZWF0dXJlczpmdW5jdGlvbihmKXtjb25zdCBnPW5ldyBZZztmb3IoY29uc3QgbCBpbiBmLmZlYXR1cmUpaWYoZi5mZWF0dXJlLmhhc093blByb3BlcnR5KGwpKXtjb25zdCBrPWYuZmVhdHVyZVtsXTtnLmdldEZlYXR1cmVNYXAoKS5zZXQobCx0aGlzLnBhcnNlRmVhdHVyZShrLHRoaXMuaXNJbWFnZShsKSkpfXJldHVybiBnfSwKcGFyc2VGZWF0dXJlTGlzdHM6ZnVuY3Rpb24oZil7Y29uc3QgZz1uZXcgS2g7Zm9yKGNvbnN0IGwgaW4gZi5mZWF0dXJlTGlzdClpZihmLmZlYXR1cmVMaXN0Lmhhc093blByb3BlcnR5KGwpKXtjb25zdCBrPWYuZmVhdHVyZUxpc3RbbF0sbT1uZXcgWmcscD1bXTtmb3IoY29uc3QgcSBpbiBrLmZlYXR1cmUpay5mZWF0dXJlLmhhc093blByb3BlcnR5KHEpJiZwLnB1c2godGhpcy5wYXJzZUZlYXR1cmUoay5mZWF0dXJlW3FdLHRoaXMuaXNJbWFnZShsKSkpO20uc2V0RmVhdHVyZUxpc3QocCk7Zy5nZXRGZWF0dXJlTGlzdE1hcCgpLnNldChsLG0pfXJldHVybiBnfSxwYXJzZUZlYXR1cmU6ZnVuY3Rpb24oZil7Y29uc3QgZz1uZXcgV2c7aWYoZi5mbG9hdExpc3Qpe3ZhciBsPW5ldyBTZztsLnNldFZhbHVlTGlzdChmLmZsb2F0TGlzdC52YWx1ZSk7Zy5zZXRGbG9hdExpc3QobCl9ZWxzZSBmLmJ5dGVzTGlzdD8obD1uZXcgUWcsZi5ieXRlc0xpc3QudmFsdWUmJmwuc2V0VmFsdWVMaXN0KGYuYnl0ZXNMaXN0LnZhbHVlKSwKZy5zZXRCeXRlc0xpc3QobCkpOmYuaW50NjRMaXN0JiYobD1uZXcgVWcsbC5zZXRWYWx1ZUxpc3QoZi5pbnQ2NExpc3QudmFsdWUpLGcuc2V0SW50NjRMaXN0KGwpKTtyZXR1cm4gZ30sZ2V0SW1hZ2VJZDpmdW5jdGlvbihmLGcpe3JldHVybiBnP3RoaXMuZ2V0Q29tcGFyZUltYWdlSWQoZik6dGhpcy5zYW5pdGl6ZUZlYXR1cmUoZikrIl9pbWFnZSJ9LGdldENhbnZhc0lkOmZ1bmN0aW9uKGYsZyl7cmV0dXJuIGc/dGhpcy5nZXRDb21wYXJlQ2FudmFzSWQoZik6dGhpcy5zYW5pdGl6ZUZlYXR1cmUoZikrIl9jYW52YXMifSxnZXRJbWFnZUNhcmRJZDpmdW5jdGlvbihmLGcpe3JldHVybiBnP3RoaXMuZ2V0Q29tcGFyZUltYWdlQ2FyZElkKGYpOnRoaXMuc2FuaXRpemVGZWF0dXJlKGYpKyJfY2FyZCJ9LGdldENvbXBhcmVJbWFnZUlkOmZ1bmN0aW9uKGYpe3JldHVybiB0aGlzLnNhbml0aXplRmVhdHVyZShmKSsiX2ltYWdlX2NvbXBhcmUifSxnZXRDb21wYXJlQ2FudmFzSWQ6ZnVuY3Rpb24oZil7cmV0dXJuIHRoaXMuc2FuaXRpemVGZWF0dXJlKGYpKwoiX2NhbnZhc19jb21wYXJlIn0sZ2V0Q29tcGFyZUltYWdlQ2FyZElkOmZ1bmN0aW9uKGYpe3JldHVybiB0aGlzLnNhbml0aXplRmVhdHVyZShmKSsiX2NhcmRfY29tcGFyZSJ9LGdldEZlYXR1cmVEaWFsb2dJZDpmdW5jdGlvbihmKXtyZXR1cm4gdGhpcy5zYW5pdGl6ZUZlYXR1cmUoZikrIl9kaWFsb2cifSxmZWF0dXJlTW9yZUNsaWNrZWQ6ZnVuY3Rpb24oZil7Zj1mLnNyY0VsZW1lbnQ7Y29uc3QgZz10aGlzLiQkKCIjIit0aGlzLnNhbml0aXplRmVhdHVyZShmLmRhdGFGZWF0dXJlKSsiX2RpYWxvZyIpO2cucG9zaXRpb25UYXJnZXQ9ZjtnLm9wZW4oKX0sZXhwYW5kRmVhdHVyZTpmdW5jdGlvbihmKXt0aGlzLnNldCgiZXhwYW5kZWRGZWF0dXJlcy4iK3RoaXMuc2FuaXRpemVGZWF0dXJlKGYuc3JjRWxlbWVudC5kYXRhRmVhdHVyZSksITApO3RoaXMucmVmcmVzaEV4YW1wbGVWaWV3ZXIoKX0sZGVjb2RlZFN0cmluZ1RvQ2hhckNvZGVzOmZ1bmN0aW9uKGYpe2NvbnN0IGc9bmV3IFVpbnQ4QXJyYXkoZi5sZW5ndGgpOwpmb3IobGV0IGw9MDtsPGYubGVuZ3RoOysrbClnW2xdPWYuY2hhckNvZGVBdChsKTtyZXR1cm4gZ30saGFuZGxlSW1hZ2VVcGxvYWQ6ZnVuY3Rpb24oZil7dGhpcy5oYW5kbGVGaWxlU2VsZWN0KGYsdGhpcyl9LHVwbG9hZEltYWdlQ2xpY2tlZDpmdW5jdGlvbihmKXtmPXRoaXMuZ2V0RGF0YUZyb21FdmVudChmKTtjb25zdCBnPVBvbHltZXIuZG9tKHRoaXMucm9vdCkucXVlcnlTZWxlY3RvckFsbCgicGFwZXItaW5wdXQiKTtsZXQgbD1udWxsO2ZvcihsZXQgaz0wO2s8Zy5sZW5ndGg7aysrKWlmKGdba10uZGF0YUZlYXR1cmU9PWYuZmVhdHVyZSl7bD1nW2tdO2JyZWFrfWwmJmwucXVlcnlTZWxlY3RvcigiaW5wdXQiKS5jbGljaygpfSxoYW5kbGVGaWxlU2VsZWN0OmZ1bmN0aW9uKGYsZyl7Zi5zdG9wUHJvcGFnYXRpb24oKTtmLnByZXZlbnREZWZhdWx0KCk7Y29uc3QgbD1uZXcgRmlsZVJlYWRlcixrPWYuZGF0YVRyYW5zZmVyP2YuZGF0YVRyYW5zZmVyLmZpbGVzOmYudGFyZ2V0LmZpbGVzOwowIT09ay5sZW5ndGgmJihsLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLCgpPT57Y29uc3QgbT1sLnJlc3VsdC5zdWJzdHJpbmcoK2wucmVzdWx0LmluZGV4T2YoImJhc2U2NCwiKSs3KTt2YXIgcD1nLmRlY29kZWRTdHJpbmdUb0NoYXJDb2RlcyhhdG9iKG0pKTtjb25zdCBxPWcuZ2V0RGF0YUZyb21FdmVudChmKSxyPWcuZ2V0RmVhdHVyZUZyb21EYXRhKHEpLHQ9Zy5nZXRWYWx1ZUxpc3RGcm9tRGF0YShxKTtpZihyKXt0WzBdPXA7ci5nZXRCeXRlc0xpc3QoKS5zZXRWYWx1ZUxpc3QodCk7KHA9Zy5nZXRKc29uVmFsdWVMaXN0KHEuZmVhdHVyZSxxLnNlcU51bSkpJiYocFswXT1tKTtjb25zdCB2PW5ldyBJbWFnZTtnLmFkZEltYWdlRWxlbWVudChxLmZlYXR1cmUsdik7di5hZGRFdmVudExpc3RlbmVyKCJsb2FkIiwoKT0+e2cuZ2V0T25Mb2FkRm9ySW1hZ2UocS5mZWF0dXJlLHYpO3ZhciBBPWMuZXhlYyhxLmZlYXR1cmUpWzFdfHwiIjtjb25zdCB5PSJpbWFnZSIrQSsiL3dpZHRoIjsKQT0iaW1hZ2UiK0ErIi9oZWlnaHQiO2NvbnN0IHg9Zy5nZXRGZWF0dXJlVmFsdWVzKHksITEpLEM9Zy5nZXRGZWF0dXJlVmFsdWVzKEEsITEpOzA8eC5sZW5ndGgmJih4WzBdPSt2LndpZHRoLGcuZmVhdHVyZXMuZ2V0KHkpLmdldEludDY0TGlzdCgpLnNldFZhbHVlTGlzdCh4KSk7MDxDLmxlbmd0aCYmKENbMF09K3YuaGVpZ2h0LGcuZmVhdHVyZXMuZ2V0KEEpLmdldEludDY0TGlzdCgpLnNldFZhbHVlTGlzdChDKSk7Zy5leGFtcGxlQ2hhbmdlZCgpfSk7di5zcmM9bC5yZXN1bHR9fSwhMSksbC5yZWFkQXNEYXRhVVJMKGtbMF0pKX0sYWRkRHJhZ0Ryb3BCZWhhdmlvclRvQ2FudmFzOmZ1bmN0aW9uKGYpe2Z1bmN0aW9uIGcobSl7bS5zdG9wUHJvcGFnYXRpb24oKTttLnByZXZlbnREZWZhdWx0KCk7bS5kYXRhVHJhbnNmZXIuZHJvcEVmZmVjdD0iY29weSJ9ZnVuY3Rpb24gbChtKXtrLmhhbmRsZUZpbGVTZWxlY3QobSxrKX1jb25zdCBrPXRoaXM7IXRoaXMucmVhZG9ubHkmJmYmJihmLmFkZEV2ZW50TGlzdGVuZXIoImRyYWdvdmVyIiwKZywhMSksZi5hZGRFdmVudExpc3RlbmVyKCJkcm9wIixsLCExKSl9LGdldE9uTG9hZEZvckltYWdlOmZ1bmN0aW9uKGYsZyxsKXtjb25zdCBrPShtLHAscSk9Pntjb25zdCByPXRoaXMuJCQoIiMiK3RoaXMuZ2V0Q2FudmFzSWQobSxxKSk7cXx8dGhpcy5hZGREcmFnRHJvcEJlaGF2aW9yVG9DYW52YXMocik7aWYocCYmcil7Y29uc3QgdD1yLmdldENvbnRleHQoIjJkIik7bGV0IHY9dGhpcy5pbWFnZVNjYWxlUGVyY2VudGFnZS8xMDA7aWYoIXRoaXMuYWxsb3dJbWFnZUNvbnRyb2xzKXtsZXQgeD10aGlzLiQkKCIjIit0aGlzLmdldEltYWdlQ2FyZElkKG0scSkpLnBhcmVudEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGgvMjsxNjx4JiYoeC09MTYpO3g8cC53aWR0aCYmKHY9eC9wLndpZHRoKX1yLndpZHRoPXAud2lkdGgqdjtyLmhlaWdodD1wLmhlaWdodCp2O2NvbnN0IEE9eD0+e3Quc2F2ZSgpO3QuY2xlYXJSZWN0KDAsMCxyLndpZHRoLHIuaGVpZ2h0KTt0LnRyYW5zbGF0ZSh4LngsCngueSk7dC5zY2FsZSh4LmsseC5rKTt0aGlzLnJlbmRlckltYWdlT25DYW52YXModCxyLndpZHRoLHIuaGVpZ2h0LG0scSk7dC5yZXN0b3JlKCl9LHk9ZDMuem9vbSgpLnNjYWxlRXh0ZW50KGQpLm9uKCJ6b29tIiwoKT0+e3RoaXMuYWRkSW1hZ2VUcmFuc2Zvcm0obSxkMy5ldmVudC50cmFuc2Zvcm0scSk7QShkMy5ldmVudC50cmFuc2Zvcm0pfSk7ZDMuc2VsZWN0KHIpLmNhbGwoeSkub24oImRibGNsaWNrLnpvb20iLCgpPT5kMy5zZWxlY3QocikuY2FsbCh5LnRyYW5zZm9ybSxkMy56b29tSWRlbnRpdHkpKTt0LnNhdmUoKTt0LnNjYWxlKHYsdik7dC5kcmF3SW1hZ2UocCwwLDApO3QucmVzdG9yZSgpO3RoaXMuc2V0SW1hZ2VEYXR1bSh0LHIud2lkdGgsci5oZWlnaHQsbSxxKTt0aGlzLnJlbmRlckltYWdlT25DYW52YXModCxyLndpZHRoLHIuaGVpZ2h0LG0scSk7cT90aGlzLmNvbXBhcmVJbWFnZUluZm9bbV0udHJhbnNmb3JtJiZBKHRoaXMuY29tcGFyZUltYWdlSW5mb1ttXS50cmFuc2Zvcm0pOgp0aGlzLmltYWdlSW5mb1ttXS50cmFuc2Zvcm0mJkEodGhpcy5pbWFnZUluZm9bbV0udHJhbnNmb3JtKX1lbHNlIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+ayhtLHAscSkpfTt0aGlzLmFkZEltYWdlRWxlbWVudChmLGcsbCk7dGhpcy5hZGRJbWFnZU9uTG9hZChmLGssbCk7cmV0dXJuIGsuYXBwbHkodGhpcyxbZixnLGxdKX0sYWRkSW1hZ2VPbkxvYWQ6ZnVuY3Rpb24oZixnLGwpe3RoaXMuaGFzSW1hZ2U9ITA7bD8odGhpcy5jb21wYXJlSW1hZ2VJbmZvW2ZdfHwodGhpcy5jb21wYXJlSW1hZ2VJbmZvW2ZdPXt9KSx0aGlzLmNvbXBhcmVJbWFnZUluZm9bZl0ub25sb2FkPWcpOih0aGlzLmltYWdlSW5mb1tmXXx8KHRoaXMuaW1hZ2VJbmZvW2ZdPXt9KSx0aGlzLmltYWdlSW5mb1tmXS5vbmxvYWQ9Zyl9LGFkZEltYWdlRGF0YTpmdW5jdGlvbihmLGcsbCl7bD8odGhpcy5jb21wYXJlSW1hZ2VJbmZvW2ZdfHwodGhpcy5jb21wYXJlSW1hZ2VJbmZvW2ZdPXt9KSx0aGlzLmNvbXBhcmVJbWFnZUluZm9bZl0uaW1hZ2VEYXRhPQpnKToodGhpcy5pbWFnZUluZm9bZl18fCh0aGlzLmltYWdlSW5mb1tmXT17fSksdGhpcy5pbWFnZUluZm9bZl0uaW1hZ2VEYXRhPWcpfSxhZGRJbWFnZUVsZW1lbnQ6ZnVuY3Rpb24oZixnLGwpe2w/KHRoaXMuY29tcGFyZUltYWdlSW5mb1tmXXx8KHRoaXMuY29tcGFyZUltYWdlSW5mb1tmXT17fSksdGhpcy5jb21wYXJlSW1hZ2VJbmZvW2ZdLmltYWdlRWxlbWVudD1nKToodGhpcy5pbWFnZUluZm9bZl18fCh0aGlzLmltYWdlSW5mb1tmXT17fSksdGhpcy5pbWFnZUluZm9bZl0uaW1hZ2VFbGVtZW50PWcpfSxhZGRJbWFnZUdyYXlzY2FsZURhdGE6ZnVuY3Rpb24oZixnKXt0aGlzLmltYWdlSW5mb1tmXXx8KHRoaXMuaW1hZ2VJbmZvW2ZdPXt9KTt0aGlzLmltYWdlSW5mb1tmXS5pbWFnZUdyYXlzY2FsZURhdGE9Z30sYWRkSW1hZ2VUcmFuc2Zvcm06ZnVuY3Rpb24oZixnLGwpe2w/KHRoaXMuY29tcGFyZUltYWdlSW5mb1tmXXx8KHRoaXMuY29tcGFyZUltYWdlSW5mb1tmXT17fSksdGhpcy5jb21wYXJlSW1hZ2VJbmZvW2ZdLnRyYW5zZm9ybT0KZyk6KHRoaXMuaW1hZ2VJbmZvW2ZdfHwodGhpcy5pbWFnZUluZm9bZl09e30pLHRoaXMuaW1hZ2VJbmZvW2ZdLnRyYW5zZm9ybT1nKX0sc2V0SW1hZ2VEYXR1bTpmdW5jdGlvbihmLGcsbCxrLG0pe2lmKGcmJmwmJihmPWYuZ2V0SW1hZ2VEYXRhKDAsMCxnLGwpLGY9VWludDhDbGFtcGVkQXJyYXkuZnJvbShmLmRhdGEpLHRoaXMuYWRkSW1hZ2VEYXRhKGssZixtKSx0aGlzLnNhbGllbmN5JiZ0aGlzLnNob3dTYWxpZW5jeSYmdGhpcy5zYWxpZW5jeVtrXSYmIW0pKXttPVVpbnQ4Q2xhbXBlZEFycmF5LmZyb20oZik7Zm9yKGc9MDtnPGYubGVuZ3RoO2crPTQpbD0oZltnXStmW2crMV0rZltnKzJdKS8zLG1bZ109bCxtW2crMV09bCxtW2crMl09bDt0aGlzLmFkZEltYWdlR3JheXNjYWxlRGF0YShrLG0pfX0sY29udHJhc3RJbWFnZTpmdW5jdGlvbihmLGcsbCl7Zz1kMy5zY2FsZUxpbmVhcigpLmRvbWFpbihbbC0uNS1nLzIsbC0uNSsoZy0xKS8yXSkuY2xhbXAoITApLnJhbmdlKFswLDI1NV0pOwpmb3IobD0wO2w8Zi5sZW5ndGg7bCsrKTMhPT1sJTQmJihmW2xdPWcoZltsXSkpfSxzaG93U2FsaWVuY3lGb3JWYWx1ZTpmdW5jdGlvbihmKXtyZXR1cm4gTWF0aC5hYnMoZik+PU1hdGguYWJzKDA8PWY/dGhpcy5tYXhTYWw6dGhpcy5taW5TYWwpKnRoaXMuc2FsaWVuY3lDdXRvZmYvMTAwfSxnZXRDb2xvckZvclNhbGllbmN5OmZ1bmN0aW9uKGYpe3JldHVybiB0aGlzLnNob3dTYWxpZW5jeUZvclZhbHVlKGYpP3RoaXMuY29sb3JzKGYpOiIjZmZmIn0sYWRkU2FsaWVuY3lUb0ltYWdlOmZ1bmN0aW9uKGYsZyl7QXJyYXkuaXNBcnJheShnKSYmMDxnLmxlbmd0aCYmQXJyYXkuaXNBcnJheShnWzBdKSYmKGc9Z1t0aGlzLnNlcU51bWJlcl0pO2NvbnN0IGw9MS9NYXRoLnBvdyh0aGlzLmltYWdlU2NhbGVQZXJjZW50YWdlLzEwMCwyKTtmb3IobGV0IG09MDttPGYubGVuZ3RoO20rPTQpe3ZhciBrPU1hdGguZmxvb3IobS80KmwpO2s9QXJyYXkuaXNBcnJheShnKT9nLmxlbmd0aD5rP2dba106CjA6Zztjb25zdCBwPS41Kih0aGlzLnNob3dTYWxpZW5jeUZvclZhbHVlKGspPzA8PWs/MD09PXRoaXMubWF4U2FsPzA6ay90aGlzLm1heFNhbDprL3RoaXMubWluU2FsOjApLHtyOnEsZzpyLGI6dH09ZDMucmdiKDA8az8iIzAwN0I4MyI6IiNGRjg0N0MiKTtmW21dPWZbbV0qKDEtcCkrcSpwO2ZbbSsxXT1mW20rMV0qKDEtcCkrcipwO2ZbbSsyXT1mW20rMl0qKDEtcCkrdCpwfX0scmVuZGVySW1hZ2VPbkNhbnZhczpmdW5jdGlvbihmLGcsbCxrLG0pe2lmKGcmJmwpe3ZhciBwPWYuZ2V0SW1hZ2VEYXRhKDAsMCxnLGwpO20/cC5kYXRhLnNldCh0aGlzLmNvbXBhcmVJbWFnZUluZm9ba10uaW1hZ2VEYXRhKTpwLmRhdGEuc2V0KHRoaXMuc2FsaWVuY3kmJnRoaXMuc2hvd1NhbGllbmN5JiZ0aGlzLnNhbGllbmN5W2tdP3RoaXMuaW1hZ2VJbmZvW2tdLmltYWdlR3JheXNjYWxlRGF0YTp0aGlzLmltYWdlSW5mb1trXS5pbWFnZURhdGEpOzI1Nj09PXRoaXMud2luZG93V2lkdGgmJjEyOD09PQp0aGlzLndpbmRvd0NlbnRlcnx8dGhpcy5jb250cmFzdEltYWdlKHAuZGF0YSx0aGlzLndpbmRvd1dpZHRoLHRoaXMud2luZG93Q2VudGVyKTshbSYmdGhpcy5zYWxpZW5jeSYmdGhpcy5zaG93U2FsaWVuY3kmJnRoaXMuc2FsaWVuY3lba10mJnRoaXMuYWRkU2FsaWVuY3lUb0ltYWdlKHAuZGF0YSx0aGlzLnNhbGllbmN5W2tdKTtrPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpO2sud2lkdGg9ZztrLmhlaWdodD1sO2suZ2V0Q29udGV4dCgiMmQiKS5wdXRJbWFnZURhdGEocCwwLDApO2YuY2xlYXJSZWN0KDAsMCxnLGwpO2YuZHJhd0ltYWdlKGssMCwwKX19LHNob3dTYWxDaGVja2JveENoYW5nZTpmdW5jdGlvbigpe3RoaXMuc2hvd1NhbGllbmN5PXRoaXMuJC5zYWxDaGVja2JveC5jaGVja2VkfSx1cGRhdGVJbWFnZXM6ZnVuY3Rpb24oKXtmb3IoY29uc3QgZiBpbiB0aGlzLmltYWdlSW5mbylpZih0aGlzLmltYWdlSW5mby5oYXNPd25Qcm9wZXJ0eShmKSl0aGlzLmltYWdlSW5mb1tmXS5vbmxvYWQoZiwKdGhpcy5pbWFnZUluZm9bZl0uaW1hZ2VFbGVtZW50KX0sc2hvdWxkU2hvd0ltYWdlQ29udHJvbHM6ZnVuY3Rpb24oZixnKXtyZXR1cm4gZiYmZ30sc2hvdWxkRW5hYmxlQWRkRmVhdHVyZTpmdW5jdGlvbihmKXtyZXR1cm4gMDxmLmxlbmd0aH0sZ2V0RGVsZXRlVmFsdWVCdXR0b25DbGFzczpmdW5jdGlvbihmLGcpe3JldHVybiBmfHwhZz8iZGVsZXRlLXZhbHVlLWJ1dHRvbiBkZWxldGUtdmFsdWUtYnV0dG9uLWhpZGRlbiI6ImRlbGV0ZS12YWx1ZS1idXR0b24ifSxnZXREZWxldGVGZWF0dXJlQnV0dG9uQ2xhc3M6ZnVuY3Rpb24oZil7cmV0dXJuIGY/ImhpZGUtY29udHJvbHMiOiJkZWxldGUtZmVhdHVyZS1idXR0b24ifSxnZXRBZGRWYWx1ZUJ1dHRvbkNsYXNzOmZ1bmN0aW9uKGYpe3JldHVybiBmPyJoaWRlLWNvbnRyb2xzIjoiYWRkLXZhbHVlLWJ1dHRvbiJ9LGdldEFkZEZlYXR1cmVCdXR0b25DbGFzczpmdW5jdGlvbihmKXtyZXR1cm4gZj8iaGlkZS1jb250cm9scyI6ImFkZC1mZWF0dXJlLWJ1dHRvbiJ9LApnZXRVcGxvYWRJbWFnZUNsYXNzOmZ1bmN0aW9uKGYpe3JldHVybiBmPyJoaWRlLWNvbnRyb2xzIjoidXBsb2FkLWltYWdlLWJ1dHRvbiJ9LGRlY29kZUJ5dGVzTGlzdFRvU3RyaW5nOmZ1bmN0aW9uKGYpe2xldCBnPSIiLGw7Zm9yKGw9MDtsPGYubGVuZ3RoLzE2Mzg0O2wrKylnKz1TdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsZi5zbGljZSgxNjM4NCpsLDE2Mzg0KihsKzEpKSk7cmV0dXJuIGcrPVN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxmLnNsaWNlKDE2Mzg0KmwpKX19KX0pKHFxfHwocXE9e30pKTsKPC9zY3JpcHQ+CjwvZG9tLW1vZHVsZT4KCgo8ZG9tLW1vZHVsZSBpZD0idGYtaW50ZXJhY3RpdmUtaW5mZXJlbmNlLWRhc2hib2FyZCI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlIGlkPSJsaW50ZXItcGFwZXItYnV0dG9uLXN0eWxlIj4KICAgICAgLyoqCiAgICAgICAqIFRoaXMgc3R5bGUgcHJlc2VydmVzIHRoZSBzdHlsaW5nIHByZXZpb3VzIHRvCiAgICAgICAqIGh0dHBzOi8vZ2l0aHViLmNvbS9Qb2x5bWVyRWxlbWVudHMvcGFwZXItYnV0dG9uL3B1bGwvMTE1CiAgICAgICAqIFRoaXMgY2hhbmdlIGNhbiBicmVhayB0aGUgbGF5b3V0IG9mIHBhcGVyLWJ1dHRvbiBjb250ZW50LgogICAgICAgKiBSZW1vdmUgdGhpcyBzdHlsZSB0byBhcHBseSB0aGUgY2hhbmdlLCBtb3JlIGRldGFpbHMgYXQgYi83MDUyODM1Ni4KICAgICAgICovCiAgICAgIHBhcGVyLWJ1dHRvbiB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICBmb250LWZhbWlseTogaW5oZXJpdDsKICAgICAgfQogICAgPC9zdHlsZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGZvbnQtZmFtaWx5OiAnUm9ib3RvJywgJ05vdG8nLCBzYW5zLXNlcmlmOwogICAgICAgIC0tcGFwZXItdGFiLWluazogdmFyKC0tdGItb3JhbmdlLWRhcmspOwogICAgICAgIC0td2l0LWNvbG9yLWdyYXkzMDA6ICNkYWRjZTA7CiAgICAgIH0KCiAgICAgIFtoaWRkZW5dIHsKICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICAgIH0KCiAgICAgICNjbGFzc2lmaWNhdGlvbiB7CiAgICAgICAgd2lkdGg6IDQwJTsKICAgICAgfQoKICAgICAgLmV4YW1wbGUtaG9sZGVyIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgLmluZmVyZW5jZS1zZWN0aW9uLWhvbGRlciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBtYXJnaW4tdG9wOiA2cHg7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiA2cHg7CiAgICAgIH0KCiAgICAgIC5pbmZlcmVuY2Utc2VjdGlvbiB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0td2l0LWNvbG9yLWdyYXkzMDApOwogICAgICB9CgogICAgICAuaW5mZXJlbmNlLXZpZXdlciB7CiAgICAgICAgbWF4LWhlaWdodDogMzUlOwogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgfQoKICAgICAgLmNvbXBhcmUtaW5mZXJlbmNlLXZpZXdlciB7CiAgICAgICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCB2YXIoLS13aXQtY29sb3ItZ3JheTMwMCk7CiAgICAgIH0KCiAgICAgIC50Zi1vcHRpb24tc2VsZWN0b3ItMCAuY29udGVudC13cmFwcGVyLnRmLW9wdGlvbi1zZWxlY3RvciA+ICogewogICAgICAgIHdpZHRoOiA0MCU7CiAgICAgIH0KCiAgICAgICNzcGlubmVyIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiA5NXB4OwogICAgICAgIGxlZnQ6IDEwcHg7CiAgICAgICAgd2lkdGg6IDE0cHg7CiAgICAgICAgaGVpZ2h0OiAxNHB4OwogICAgICAgIC0tcGFwZXItc3Bpbm5lci1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgIH0KCiAgICAgIC5ub2V4YW1wbGVzIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiA3NXB4OwogICAgICAgIGxlZnQ6IDMwcHg7CiAgICAgIH0KCiAgICAgIC5jZW50ZXIgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfQoKICAgICAgLmluZm8tdGV4dCB7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGNvbG9yOiAjM2M0MDQzOwogICAgICAgIGxldHRlci1zcGFjaW5nOiAwLjI1cHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDIwcHg7CiAgICAgICAgbWFyZ2luOiAxMnB4IGF1dG87CiAgICAgIH0KCiAgICAgIC5wZC1pbmZvLXRleHQgewogICAgICAgIGZvbnQtc2l6ZTogMThweDsKICAgICAgICBjb2xvcjogIzNjNDA0MzsKICAgICAgICBsaW5lLWhlaWdodDogMjRweDsKICAgICAgICBwYWRkaW5nLXRvcDogMTJweDsKICAgICAgICBwYWRkaW5nLXJpZ2h0OiA0cHg7CiAgICAgICAgcGFkZGluZy1sZWZ0OiAxMnB4OwogICAgICB9CgogICAgICAucGQtbm8tZmVhdHVyZXMtdGV4dCB7CiAgICAgICAgZm9udC1zaXplOiAxOHB4OwogICAgICAgIGNvbG9yOiAjM2M0MDQzOwogICAgICAgIHBhZGRpbmc6IDEycHggNDhweDsKICAgICAgfQoKICAgICAgLmFjY2VwdC1idXR0b24taG9sZGVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZTsKICAgICAgfQoKICAgICAgLnNldHRpbmdzLWJ1dHRvbiB7CiAgICAgICAgbWFyZ2luLXRvcDogNHB4OwogICAgICB9CgogICAgICAuZGF0YXBvaW50LXJpZ2h0LWNvbnRyb2xzLWhvbGRlciAuY29udHJvbCB7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgIH0KCiAgICAgIC5idXR0b24gewogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBtYXJnaW46IDEwcHggMCAwIDA7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgY29sb3I6IHdoaXRlOwogICAgICB9CgogICAgICAuYnV0dG9uW2Rpc2FibGVkXSB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2NjYzsKICAgICAgfQoKICAgICAgLmlucHV0LWFuZC10b29sdGlwIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICB9CgogICAgICAubGFiZWwtdm9jYWItcGF0aC1pbnB1dCB7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICB9CgogICAgICAudGhyZXNob2xkLWRyb3Bkb3duIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICB3aWR0aDogMTUwcHg7CiAgICAgICAgbWluLXdpZHRoOiAxNTBweDsKICAgICAgICBwYWRkaW5nLXJpZ2h0OiAxNnB4OwogICAgICAgIC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWlucHV0OiB7CiAgICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgICBjb2xvcjogIzNjNDA0MzsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC5jb3VudGVyZmFjdHVhbC1kcm9wZG93biB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIHdpZHRoOiAxMDBweDsKICAgICAgICBtaW4td2lkdGg6IDUwcHg7CiAgICAgICAgcGFkZGluZy1yaWdodDogNXB4OwogICAgICAgIC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWlucHV0OiB7CiAgICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgICBjb2xvcjogIzNjNDA0MzsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC5zbGlkZXItbGFiZWwgewogICAgICAgIG1hcmdpbi10b3A6IDhweDsKICAgICAgfQoKICAgICAgLmZhY2V0LWxhYmVsIHsKICAgICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci11bmRlcmxpbmU6IHsKICAgICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgICAgfQogICAgICAgIC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWlucHV0OiB7CiAgICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIH0KICAgICAgfQoKICAgICAgLnNsaWRlciB7CiAgICAgICAgd2lkdGg6IDI4MHB4OwogICAgICAgIC0tcGFwZXItc2xpZGVyLWlucHV0OiB7CiAgICAgICAgICB3aWR0aDogODBweDsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC5zbGlkZXItbW9kZWwtb25lIHsKICAgICAgICAtLXBhcGVyLXNsaWRlci1rbm9iLWNvbG9yOiAjMTJiNWNlOwogICAgICAgIC0tcGFwZXItc2xpZGVyLWFjdGl2ZS1jb2xvcjogIzEyYjVjZTsKICAgICAgfQoKICAgICAgLnNsaWRlci1tb2RlbC10d28gewogICAgICAgIC0tcGFwZXItc2xpZGVyLWtub2ItY29sb3I6ICNmYTc4MTc7CiAgICAgICAgLS1wYXBlci1zbGlkZXItYWN0aXZlLWNvbG9yOiAjZmE3ODE3OwogICAgICB9CgogICAgICAucHItbGluZS1jaGFydCB7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICAgIGhlaWdodDogMjAwcHg7CiAgICAgICAgd2lkdGg6IDI4MHB4OwogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgfQoKICAgICAgcGFwZXItZGlhbG9nLmluZmVyZW5jZS1zZXR0aW5ncyB7CiAgICAgICAgcGFkZGluZzogMjBweDsKICAgICAgICB3aWR0aDogNDAlOwogICAgICAgIG1heC13aWR0aDogNDAlOwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgICAgYm9yZGVyLXJhZGl1czogMTBweDsKICAgICAgfQoKICAgICAgLmRhc2hib2FyZC1sYXlvdXQgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlOwogICAgICB9CgogICAgICAuY2VudGVyIHsKICAgICAgICB3aWR0aDogNjAlOwogICAgICB9CgogICAgICAuc2lkZS1ob2xkZXIgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB3aWR0aDogNDAlOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIH0KCiAgICAgIC5zaWRlLWNvbnRlbnQgewogICAgICAgIHBhZGRpbmctbGVmdDogNXB4OwogICAgICAgIHdpZHRoOiBjYWxjKDEwMCUgLSAxMHB4KTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgIH0KCiAgICAgIC5zaWRlLXRhYnMgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgaGVpZ2h0OiBjYWxjKDEwMCUgLSA1MHB4KTsKICAgICAgfQoKICAgICAgLmRhdGFwb2ludC10YWIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgb3ZlcmZsb3c6IGF1dG87CiAgICAgIH0KCiAgICAgIC5jb25maWctdGFiIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICB9CgogICAgICAuY29uZmlnLXNpZGUtY29udGVudCB7CiAgICAgICAgcGFkZGluZy1sZWZ0OiA1cHg7CiAgICAgICAgd2lkdGg6IDMwJTsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkIHZhcigtLXdpdC1jb2xvci1ncmF5MzAwKTsKICAgICAgfQoKICAgICAgLmNvbmZpZy1tYWluLWNvbnRlbnQgewogICAgICAgIHdpZHRoOiA3MCU7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGJhY2tncm91bmQ6ICNmOGY5ZmE7CiAgICAgIH0KCiAgICAgIC5zdGF0cy10YWIgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgb3ZlcmZsb3c6IGF1dG87CiAgICAgIH0KCiAgICAgIC5wZC10YWIgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIHBhZGRpbmc6IDVweCAxMHB4OwogICAgICB9CgogICAgICAucGQtcGxvdHMtaGVhZGVyIHsKICAgICAgICBoZWlnaHQ6IDUycHg7CiAgICAgICAgbWluLWhlaWdodDogNTJweDsKICAgICAgICBtYXgtaGVpZ2h0OiA1MnB4OwogICAgICAgIGJvcmRlci1ib3R0b206IHNvbGlkIDJweCB2YXIoLS13aXQtY29sb3ItZ3JheTMwMCk7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgIH0KCiAgICAgIC5wZHBsb3RzLWhvbGRlciB7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICAgIG92ZXJmbG93LXk6IG92ZXJsYXk7CiAgICAgICAgYmFja2dyb3VuZDogI2Y4ZjlmYTsKICAgICAgfQoKICAgICAgLnBkLXJhbmdlLWh5cGhlbiB7CiAgICAgICAgcGFkZGluZy1yaWdodDogNnB4OwogICAgICAgIHBhZGRpbmctdG9wOiA4cHg7CiAgICAgIH0KCiAgICAgIC5wZC1yYW5nZS1jb250cm9sIHsKICAgICAgICBib3JkZXItYm90dG9tOiBzb2xpZCAxcHggI2ZjYzkzNDsKICAgICAgICBib3JkZXItdG9wOiBub25lOwogICAgICAgIGJvcmRlci1sZWZ0OiBub25lOwogICAgICAgIGJvcmRlci1yaWdodDogbm9uZTsKICAgICAgICBoZWlnaHQ6IDM2cHg7CiAgICAgICAgd2lkdGg6IDEwNHB4OwogICAgICAgIG1hcmdpbi1yaWdodDogNnB4OwogICAgICB9CgogICAgICAjb3ZlcnZpZXcgewogICAgICAgIG1heC1oZWlnaHQ6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CgogICAgICAuaW5mZXJlbmNlLWhlYWRlci5oZWFkaW5nIHsKICAgICAgICBiYWNrZ3JvdW5kOiAjZTRmN2ZiOwogICAgICB9CgogICAgICAucmlnaHQtc2lkZSB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIHRvcDogMDsKICAgICAgfQoKICAgICAgLnJpZ2h0LXNpZGUtcGVyZm9ybWFuY2UtdGFiIHsKICAgICAgICBtYXJnaW46IDRweDsKICAgICAgfQoKICAgICAgdGYtY29uZnVzaW9uLW1hdHJpeCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH0KCiAgICAgIC5jb25mLW1hdHJpeC1ob2xkZXIgewogICAgICAgIG1hcmdpbi10b3A6IDIwcHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMThweDsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDI0cHg7CiAgICAgIH0KCiAgICAgIC5jb25mLW1hdHJpeCB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMThweDsKICAgICAgfQoKICAgICAgLmRhdGFwb2ludC1jb250cm9scy1ob2xkZXIuZGF0YXBvaW50LWNvbnRyb2wtYnV0dG9ucy1ob2xkZXIgewogICAgICAgIHBhZGRpbmctbGVmdDogMnB4OwogICAgICB9CgogICAgICAuZGF0YXBvaW50LWNvbnRyb2xzLWhvbGRlci5kYXRhcG9pbnQtY29udHJvbC1zZWFyY2gtaG9sZGVyIHsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDEwcHg7CiAgICAgIH0KCiAgICAgIC5kYXRhcG9pbnQtY29udHJvbHMtaG9sZGVyIHsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0td2l0LWNvbG9yLWdyYXkzMDApOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1ncm93OiAwOwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICBtYXJnaW4tbGVmdDogMXB4OwogICAgICB9CgogICAgICAuZGF0YXBvaW50LWxlZnQtY29udHJvbHMtaG9sZGVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtd3JhcDogd3JhcDsKICAgICAgfQoKICAgICAgLmRhdGFwb2ludC1yaWdodC1jb250cm9scy1ob2xkZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC50Zi1jYXRlZ29yeS1wYW5lIHsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgIH0KCiAgICAgIC50Zi1jYXRlZ29yeS1wYW5lLWNvbnRlbnQgewogICAgICAgIGZsZXgtd3JhcDogd3JhcDsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgcGFkZGluZzogMTJweDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS13aXQtY29sb3ItZ3JheTMwMCk7CiAgICAgICAgYm9yZGVyLXRvcDogbm9uZTsKICAgICAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAycHg7CiAgICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDJweDsKICAgICAgICBiYWNrZ3JvdW5kOiB3aGl0ZTsKICAgICAgfQoKICAgICAgOmhvc3QgdnotbGluZS1jaGFydDIgewogICAgICAgIG1hcmdpbjogMTJweCAxMnB4IDEycHggMjRweDsKICAgICAgICBoZWlnaHQ6IDE4MHB4OwogICAgICAgIHdpZHRoOiAzMDBweDsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgIH0KCiAgICAgIDpob3N0IHZ6LWJhci1jaGFydCB7CiAgICAgICAgbWFyZ2luOiAxMnB4IDEycHggMTJweCAyNHB4OwogICAgICAgIGhlaWdodDogMjQwcHg7CiAgICAgICAgd2lkdGg6IDQ1MHB4OwogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgfQoKICAgICAgLnBkLWlucHV0LWNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgZmxleC1ncm93OiAwOwogICAgICAgIHBhZGRpbmc6IDEycHggNDhweCAyNHB4IDI0cHg7CiAgICAgICAgYmFja2dyb3VuZDogI2ZlZjdlMDsKICAgICAgICBib3JkZXI6IHNvbGlkIDFweCAjZmRlMjkzOwogICAgICB9CgogICAgICAuc3R5bGUtaW5wdXQgewogICAgICAgIHdpZHRoOiA1MHB4OwogICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OwogICAgICAgIGJhY2tncm91bmQ6IHdoaXRlOwogICAgICB9CgogICAgICAuZmVhdHVyZS1jb250YWluZXItaG9sZGVyIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgb3ZlcmZsb3c6IGF1dG87CiAgICAgICAgYmFja2dyb3VuZDogd2hpdGU7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICB9CgogICAgICAuZGF0YXBvaW50LWNvbnRyb2wtZmlsdGVyLWlucHV0IHsKICAgICAgICBib3JkZXItcmFkaXVzOiAycHg7CiAgICAgICAgbWF4LXdpZHRoOiA2MCU7CiAgICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXI6IHsKICAgICAgICAgIHBhZGRpbmc6IDRweCA2cHggMnB4IDRweDsKICAgICAgICB9CiAgICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItaW5wdXQ6IHsKICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICAgIGNvbG9yOiAjM2M0MDQzOwogICAgICAgIH0KICAgICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1sYWJlbDogewogICAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgICAgY29sb3I6ICM4MDg2OGI7CiAgICAgICAgfQogICAgICB9CgogICAgICAuZGF0YXBvaW50LWNvbnRyb2wtZmlsdGVyLWlucHV0IGlyb24taWNvbiB7CiAgICAgICAgY29sb3I6ICM5YmEwYTY7CiAgICAgIH0KCiAgICAgIC5mZWF0dXJlLXNlYXJjaC1pbnB1dCB7CiAgICAgICAgcGFkZGluZy10b3A6IDNweDsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgbWF4LXdpZHRoOiAxNTBweDsKICAgICAgfQoKICAgICAgLmNvbnRyb2wtYnV0dG9uIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS13aXQtY29sb3ItZ3JheTMwMCk7CiAgICAgICAgY29sb3I6IHZhcigtLXRiLW9yYW5nZS1kYXJrKTsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweDsKICAgICAgICB0ZXh0LXRyYW5zZm9ybTogbm9uZTsKICAgICAgICBtYXJnaW46IDVweDsKICAgICAgfQoKICAgICAgLmNvbnRyb2wtYnV0dG9uW2Rpc2FibGVkXSB7CiAgICAgICAgY29sb3I6ICM1ZjYzNjg7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2Y0ZjRmNDsKICAgICAgfQoKICAgICAgLm1haW4tYnV0dG9uIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2UtZGFyayk7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tdGItb3JhbmdlLWRhcmspOwogICAgICAgIGNvbG9yOiB3aGl0ZTsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweDsKICAgICAgICB0ZXh0LXRyYW5zZm9ybTogbm9uZTsKICAgICAgICBtYXJnaW46IDVweDsKICAgICAgfQoKICAgICAgLm1haW4tYnV0dG9uW2Rpc2FibGVkXSB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogbGlnaHRncmF5OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIGxpZ2h0Z3JheTsKICAgICAgICBjb2xvcjogZ3JheTsKICAgICAgfQoKICAgICAgLm9wdGltaXplLXRocmVzaG9sZC1idXR0b24gewogICAgICAgIG1hcmdpbjogNXB4IDA7CiAgICAgICAgd2lkdGg6IDE1MHB4OwogICAgICAgIG1pbi13aWR0aDogMTUwcHg7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiAxNnB4OwogICAgICB9CgogICAgICAuY2xvc2UtcGFydGlhbC1kZXBzLWJ1dHRvbiB7CiAgICAgICAgbWFyZ2luOiAxMHB4OwogICAgICB9CgogICAgICBwYXBlci10YWJzIHsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIC0tcGFwZXItdGFicy1zZWxlY3Rpb24tYmFyLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2UtZGFyayk7CiAgICAgIH0KCiAgICAgIHBhcGVyLXRhYiB7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgICAgICAgcGFkZGluZzogMCAyNHB4OwogICAgICAgIGxldHRlci1zcGFjaW5nOiAwLjFweDsKICAgICAgfQoKICAgICAgcGFwZXItdGFiOm5vdCguaXJvbi1zZWxlY3RlZCkgewogICAgICAgIGNvbG9yOiAjM2M0MDQzOwogICAgICB9CgogICAgICBwYXBlci10YWIuaXJvbi1zZWxlY3RlZCB7CiAgICAgICAgY29sb3I6ICMyMDIxMjQ7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgfQoKICAgICAgLmN1cnZlcy1ob2xkZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICAgIG1hcmdpbi10b3A6IDIwcHg7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICAuY3VydmUtaG9sZGVyIHsKICAgICAgICB3aWR0aDogMzAwcHg7CiAgICAgICAgaGVpZ2h0OiAyMzVweDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAyMHB4OwogICAgICAgIG1hcmdpbi1yaWdodDogMjBweDsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KCiAgICAgIC5yb2MteC1sYWJlbCB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICBsZWZ0OiAxMjBweDsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgY29sb3I6ICM1ZjYzNjg7CiAgICAgICAgcGFkZGluZzogMHB4OwogICAgICB9CgogICAgICAucm9jLXktbGFiZWwgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBsZWZ0OiAtMzZweDsKICAgICAgICBib3R0b206IDExMHB4OwogICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDI3MGRlZyk7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGNvbG9yOiAjNWY2MzY4OwogICAgICAgIHBhZGRpbmc6IDBweDsKICAgICAgfQoKICAgICAgLnByLXgtbGFiZWwgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgbGVmdDogMTQwcHg7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGNvbG9yOiAjNWY2MzY4OwogICAgICAgIHBhZGRpbmc6IDBweDsKICAgICAgfQoKICAgICAgLnByLXktbGFiZWwgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBsZWZ0OiAtMTRweDsKICAgICAgICBib3R0b206IDExMHB4OwogICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDI3MGRlZyk7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGNvbG9yOiAjNWY2MzY4OwogICAgICAgIHBhZGRpbmc6IDBweDsKICAgICAgfQoKICAgICAgLmZsZXggewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIH0KCiAgICAgIC5zcGFjZS1iZXR3ZWVuIHsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgIH0KCiAgICAgIC5mbGV4LXdyYXAgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICB9CgogICAgICAub3B0aW1pemUtdGV4dCB7CiAgICAgICAgbWFyZ2luOiA1cHggMDsKICAgICAgICBjb2xvcjogZ3JleTsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgIH0KCiAgICAgIC50aHJlc2hvbGQtY29zdC1pbnB1dCB7CiAgICAgICAgd2lkdGg6IDE1MHB4OwogICAgICAgIG1pbi13aWR0aDogMTUwcHg7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiAxNnB4OwogICAgICAgIC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWlucHV0OiB7CiAgICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgICBjb2xvcjogIzNjNDA0MzsKICAgICAgICB9CiAgICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItbGFiZWw6IHsKICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICAgIGNvbG9yOiAjODA4NjhiOwogICAgICAgIH0KICAgICAgfQoKICAgICAgLmJvbGQgewogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgIH0KCiAgICAgIC5pbmRlbnQgewogICAgICAgIG1hcmdpbi1sZWZ0OiAxMHB4OwogICAgICB9CgogICAgICAuZmVhdHVyZS1icmVha2Rvd24gewogICAgICAgIG1hcmdpbi1sZWZ0OiAxMnB4OwogICAgICB9CgogICAgICAub3B0aW1pemUtc2VsZWN0aW9uLWJ1dHRvbiB7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDA7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogNXB4OwogICAgICB9CgogICAgICAucmVnLXRhYmxlLWNhdGVnb3J5IHsKICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OwogICAgICB9CgogICAgICAucmVnLXRhYmxlLXZhbHVlIHsKICAgICAgICB0ZXh0LWFsaWduOiByaWdodDsKICAgICAgfQoKICAgICAgLnN1YmZlYXR1cmUtdGFibGUgewogICAgICAgIG1hcmdpbi1sZWZ0OiAxMHB4OwogICAgICB9CgogICAgICAuY291bnRlcmZhY3R1YWwtYnV0dG9uLWludHJvIHsKICAgICAgICBwYWRkaW5nOiA3cHggMCAwIDEwcHg7CiAgICAgIH0KCiAgICAgIC5tYWluLXZlcnRpY2FsIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgLm1haW4tYm90dG9tLWJhciB7CiAgICAgICAgaGVpZ2h0OiA1MnB4OwogICAgICAgIG1pbi1oZWlnaHQ6IDUycHg7CiAgICAgICAgZmxleC1ncm93OiAwOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgLyogYm94LXNoYWRvdzogMCAycHggNXB4IGdyZXk7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogM3B4OyAqLwogICAgICAgIGJvcmRlci1ib3R0b206IHNvbGlkIDFweCAjZGFkY2UwOwogICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgfQoKICAgICAgLm1haW4tY29udGVudCB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CgogICAgICAuZGlzdC1zd2l0Y2ggewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgbWFyZ2luLXRvcDogMDsKICAgICAgfQoKICAgICAgLmRpc3RhbmNlLXZpcy1kcm9wZG93biB7CiAgICAgICAgbWFyZ2luLXRvcDogMDsKICAgICAgfQoKICAgICAgI2Rpc3RhbmNlZGlhbG9nIHsKICAgICAgICB3aWR0aDogMzAlOwogICAgICB9CgogICAgICAjZGlzdGFuY2VkaWFsb2cgLmJ1dHRvbnMgewogICAgICAgIGNvbG9yOiAjZjU3YzAwOwogICAgICB9CgogICAgICBwYXBlci1yYWRpby1idXR0b24gewogICAgICAgIC0tcGFwZXItcmFkaW8tYnV0dG9uLWxhYmVsOiB7CiAgICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgICBjb2xvcjogIzNjNDA0MzsKICAgICAgICB9CiAgICAgICAgLS1wYXBlci1yYWRpby1idXR0b24tdW5jaGVja2VkLWNvbG9yOiAjM2M0MDQzOwogICAgICAgIC0tcGFwZXItcmFkaW8tYnV0dG9uLXVuY2hlY2tlZC1pbmstY29sb3I6ICMzYzQwNDM7CiAgICAgICAgLS1wYXBlci1yYWRpby1idXR0b24tY2hlY2tlZC1jb2xvcjogIzNjNDA0MzsKICAgICAgICAtLXBhcGVyLXJhZGlvLWJ1dHRvbi1jaGVja2VkLWluay1jb2xvcjogIzNjNDA0MzsKICAgICAgfQoKICAgICAgcGFwZXItaWNvbi1idXR0b24gewogICAgICAgIGNvbG9yOiAjNWY2MzY4OwogICAgICB9CgogICAgICBwYXBlci1pY29uLWJ1dHRvbltkaXNhYmxlZF0gewogICAgICAgIGNvbG9yOiAjOWFhMGE2OwogICAgICB9CgogICAgICAucmVzaXplciB7CiAgICAgICAgZGlzcGxheTogdGFibGU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIHdpZHRoOiA4cHg7CiAgICAgICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCB2YXIoLS13aXQtY29sb3ItZ3JheTMwMCk7CiAgICAgICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgdmFyKC0td2l0LWNvbG9yLWdyYXkzMDApOwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgfQoKICAgICAgLmV4YW1wbGUtc3RhdHVzIHsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgY29sb3I6ICM1ZjYzNjg7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICAgIHBhZGRpbmctdG9wOiAyMHB4OwogICAgICB9CgogICAgICAuZXhhbXBsZS1pZC1sYWJlbCB7CiAgICAgICAgcGFkZGluZzogOXB4IDVweCA5cHggMDsKICAgICAgfQoKICAgICAgLmV4YW1wbGUtaWQtaW5wdXQgewogICAgICAgIHdpZHRoOiA3MHB4OwogICAgICAgIHBhZGRpbmctdG9wOiAzcHg7CiAgICAgIH0KCiAgICAgIC5oZWFkaW5nLWFuZC1jYXJkIHsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCBsaWdodGdyYXk7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiA1cHg7CiAgICAgICAgbWFyZ2luLXRvcDogNXB4OwogICAgICAgIHBhZGRpbmctdG9wOiAxcHg7CiAgICAgIH0KCiAgICAgIC5lZGl0b3ItaGVhZGluZy1hbmQtY2FyZCB7CiAgICAgICAgZmxleDogMTsKICAgICAgICBvdmVyZmxvdy15OiBvdmVybGF5OwogICAgICB9CgogICAgICAuaGVhZGluZyB7CiAgICAgICAgY29sb3I6ICM1ZjYzNjg7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHBhZGRpbmc6IDEwcHggOHB4OwogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmZWY3ZTA7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLXdpdC1jb2xvci1ncmF5MzAwKTsKICAgICAgICBib3JkZXItdG9wOiBub25lOwogICAgICAgIGJvcmRlci1sZWZ0OiBub25lOwogICAgICAgIGJvcmRlci1yaWdodDogbm9uZTsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiByZ2JhKDAsIDAsIDAsIDApOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICAgIH0KCiAgICAgIC5jYXJkIHsKICAgICAgICBwYWRkaW5nOiAwIDEwcHggNXB4OwogICAgICB9CgogICAgICAubm8tcGFkZGluZy1jYXJkIHsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICB9CgogICAgICAudG9vbHRpcCB7CiAgICAgICAgLS1wYXBlci10b29sdGlwOiB7CiAgICAgICAgICBmb250LXNpemU6IDE2cHg7CiAgICAgICAgfQogICAgICAgIC0tcGFwZXItdG9vbHRpcC1kZWxheS1vdXQ6IDIwMDBtczsKICAgICAgfQoKICAgICAgLmNvbW1lbnQtaWNvbiB7CiAgICAgICAgd2lkdGg6IDMwcHg7CiAgICAgICAgaGVpZ2h0OiAzMHB4OwogICAgICAgIG1pbi13aWR0aDogMzBweDsKICAgICAgICBtaW4taGVpZ2h0OiAzMHB4OwogICAgICAgIG1hcmdpbi10b3A6IDEwcHg7CiAgICAgICAgY29sb3I6IHZhcigtLXRiLW9yYW5nZS1kYXJrKTsKICAgICAgfQoKICAgICAgLmFycm93LWljb24gewogICAgICAgIHdpZHRoOiA1MHB4OwogICAgICAgIGhlaWdodDogNTBweDsKICAgICAgICBtaW4td2lkdGg6IDUwcHg7CiAgICAgICAgbWluLWhlaWdodDogNTBweDsKICAgICAgICBjb2xvcjogdmFyKC0tdGItb3JhbmdlLWRhcmspOwogICAgICB9CgogICAgICAucGQtYXJyb3ctaWNvbiB7CiAgICAgICAgd2lkdGg6IDQwcHg7CiAgICAgICAgaGVpZ2h0OiA0MHB4OwogICAgICAgIG1pbi13aWR0aDogNDBweDsKICAgICAgICBtaW4taGVpZ2h0OiA0MHB4OwogICAgICAgIG1hcmdpbi10b3A6IDVweDsKICAgICAgICBjb2xvcjogZ3JleTsKICAgICAgfQoKICAgICAgLnBkLXRvZ2dsZSB7CiAgICAgICAgbWFyZ2luOiAwIDhweCAwIDIwcHg7CiAgICAgIH0KCiAgICAgIC5wZC1lbnRyeS1jb250YWluZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlOwogICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgIH0KCiAgICAgIC5pbmZvLWljb24gewogICAgICAgIHdpZHRoOiAyMHB4OwogICAgICAgIGhlaWdodDogMjBweDsKICAgICAgICBtaW4td2lkdGg6IDIwcHg7CiAgICAgICAgbWluLWhlaWdodDogMjBweDsKICAgICAgICBtYXJnaW4tdG9wOiAxMHB4OwogICAgICAgIGNvbG9yOiBncmV5OwogICAgICB9CgogICAgICAuaW5mby1pY29uLmNmLWluZm8taWNvbiB7CiAgICAgICAgbWFyZ2luLXRvcDogMTJweDsKICAgICAgfQoKICAgICAgLmluZm8taWNvbi50aHJlc2gtaW5mby1pY29uIHsKICAgICAgICBtYXJnaW4tdG9wOiAtM3B4OwogICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CiAgICAgIH0KCiAgICAgIC5pbmZvLWljb24ucGQtaW5mby1pY29uIHsKICAgICAgICBtYXJnaW4tdG9wOiAxNXB4OwogICAgICB9CgogICAgICAuaW5mby1pY29uLnRocmVzaG9sZC1pbmZvLWljb24gewogICAgICAgIG1hcmdpbi10b3A6IDA7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTBweDsKICAgICAgICBtYXJnaW4tbGVmdDogNXB4OwogICAgICB9CgogICAgICAuaW5mby1pY29uLnBlcmZvcm1hbmNlLWluZm8taWNvbiB7CiAgICAgICAgbWFyZ2luLXRvcDogMThweDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxMHB4OwogICAgICAgIG1hcmdpbi1sZWZ0OiA1cHg7CiAgICAgIH0KCiAgICAgIC5uby1wYWRkaW5nIHsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICB9CgogICAgICAucmVzaXplLWljb24gewogICAgICAgIGRpc3BsYXk6IHRhYmxlLWNlbGw7CiAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKICAgICAgICBjb2xvcjogZ3JleTsKICAgICAgICB3aWR0aDogMTBweDsKICAgICAgICBoZWlnaHQ6IDEwcHg7CiAgICAgICAgbWluLXdpZHRoOiAxMHB4OwogICAgICAgIG1pbi1oZWlnaHQ6IDEwcHg7CiAgICAgIH0KCiAgICAgIC5oZWxwLXRleHQgewogICAgICAgIGNvbG9yOiAjNWY2MzY4OwogICAgICAgIGZvbnQtc2l6ZTogMTBweDsKICAgICAgICBtYXgtd2lkdGg6IDIwMHB4OwogICAgICB9CgogICAgICAuaGVscC10aXRsZSB7CiAgICAgICAgY29sb3I6ICMwMDdiN2M7CiAgICAgICAgZm9udC1zaXplOiAxMXB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgICAgfQoKICAgICAgLmhlbHAtdGl0bGUtbWFyZ2luIHsKICAgICAgICBtYXJnaW4tdG9wOiAxNHB4OwogICAgICB9CgogICAgICAuaGVscC10aXRsZS1tYXJnaW4tYnV0dG9uIHsKICAgICAgICBtYXJnaW4tdG9wOiA0cHg7CiAgICAgIH0KCiAgICAgIC5oZWxwLXRpdGxlLW1hcmdpbi10aXRsZSB7CiAgICAgICAgbWFyZ2luLXRvcDogN3B4OwogICAgICB9CgogICAgICAuZGlhbG9nLWxpbmsgewogICAgICAgIGNvbG9yOiAjNWY2MzY4OwogICAgICAgIGZvbnQtc2l6ZTogMTBweDsKICAgICAgICBmb250LXN0eWxlOiBpdGFsaWM7CiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICB9CgogICAgICAucm9jLXRleHQgewogICAgICAgIGNvbG9yOiAjM2M0MDQzOwogICAgICAgIGZvbnQtc2l6ZTogMTZweDsKICAgICAgICBtYXJnaW4tbGVmdDogNDRweDsKICAgICAgfQoKICAgICAgLmNvbmYtdGV4dCB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTJweDsKICAgICAgICBjb2xvcjogIzNjNDA0MzsKICAgICAgICBmb250LXNpemU6IDE2cHg7CiAgICAgIH0KCiAgICAgIC5kaWFsb2ctdGV4dCB7CiAgICAgICAgZm9udC1zdHlsZTogbm9ybWFsOwogICAgICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICAgIH0KCiAgICAgIC5kaWFsb2ctdGl0bGUgewogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICB9CgogICAgICAudGl0bGUtd2lkdGggewogICAgICAgIHdpZHRoOiAyNTBweDsKICAgICAgICBwYWRkaW5nLXJpZ2h0OiAxNnB4OwogICAgICB9CgogICAgICAuZGF0YXBvaW50LWluZm8taG9sZGVyIHsKICAgICAgICBtYXJnaW46IDI0cHggYXV0bzsKICAgICAgICBtYXgtd2lkdGg6IDM4MHB4OwogICAgICAgIHBhZGRpbmc6IDI0cHg7CiAgICAgIH0KCiAgICAgIC5vbmJvYXJkaW5nLWhlYWRlciB7CiAgICAgICAgY29sb3I6ICMyMDIxMjQ7CiAgICAgICAgZm9udC1zaXplOiAyMnB4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDI4cHg7CiAgICAgIH0KCiAgICAgIC5vbmJvYXJkaW5nLXRleHQgewogICAgICAgIGNvbG9yOiAjM2M0MDQzOwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAyMHB4OwogICAgICB9CgogICAgICAuY29udHJvbC1pbmZvLWhlYWRlciB7CiAgICAgICAgY29sb3I6ICMzYzQwNDM7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgbWFyZ2luLXRvcDogMTBweDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxNXB4OwogICAgICB9CgogICAgICAuY29udHJvbC1pbmZvLXRleHQgewogICAgICAgIGNvbG9yOiAjM2M0MDQzOwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxNXB4OwogICAgICAgIG1heC13aWR0aDogNDYwcHg7CiAgICAgIH0KCiAgICAgIC5idXR0b24tcHJlZml4LWxhYmVsIHsKICAgICAgICBtYXJnaW46IDEycHggMCAwIDEycHg7CiAgICAgICAgY29sb3I6IGdyZXk7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICB9CgogICAgICAuYm9yZGVyLXJpZ2h0IHsKICAgICAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCB2YXIoLS13aXQtY29sb3ItZ3JheTMwMCk7CiAgICAgIH0KCiAgICAgIHBhcGVyLWRpYWxvZyB7CiAgICAgICAgY29sb3I6ICMzYzQwNDM7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMTBweDsKICAgICAgICBtYXgtd2lkdGg6IDYwMHB4OwogICAgICB9CgogICAgICAubWFpbi1idXR0b24ucnVuLWJ1dHRvbiB7CiAgICAgICAgcGFkZGluZzogNXB4OwogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgfQoKICAgICAgLmRvYy1pbWFnZSB7CiAgICAgICAgd2lkdGg6IDEyOHB4OwogICAgICAgIGhlaWdodDogOTZweDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS13aXQtY29sb3ItZ3JheTMwMCk7CiAgICAgIH0KCiAgICAgIC5jb250cm9sLWRpdmlkZXIgewogICAgICAgIG1hcmdpbjogNXB4IDAgNXB4IDVweDsKICAgICAgICB3aWR0aDogNXB4OwogICAgICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgdmFyKC0td2l0LWNvbG9yLWdyYXkzMDApOwogICAgICB9CgogICAgICAub3B0aW1pemF0aW9uLXJhZGlvIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwYWRkaW5nOiA3cHg7CiAgICAgIH0KCiAgICAgIC5vcHRpbWl6YXRpb24tcmFkaW8tZ3JvdXAgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgIH0KCiAgICAgIC5pbmZlci1pbmZvIHsKICAgICAgICBtYXJnaW4tbGVmdDogMzBweDsKICAgICAgfQoKICAgICAgLnNjcm9sbC14IHsKICAgICAgICBvdmVyZmxvdy14OiBhdXRvOwogICAgICB9CgogICAgICAucGVyZi10YWJsZS1jbGlja2FibGUgewogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgfQoKICAgICAgLnBlcmYtdGFibGUtdGl0bGUtcm93IHsKICAgICAgICBiYWNrZ3JvdW5kOiB3aGl0ZTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS13aXQtY29sb3ItZ3JheTMwMCk7CiAgICAgICAgbWluLWhlaWdodDogNTJweDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgIH0KICAgICAgLnBlcmYtdGFibGUtdGl0bGUgewogICAgICAgIGNvbG9yOiAjM2M0MDQzOwogICAgICAgIGZvbnQtc2l6ZTogMThweDsKICAgICAgICBtYXJnaW4tbGVmdDogMTRweDsKICAgICAgICBtYXJnaW4tdG9wOiAxNnB4OwogICAgICB9CiAgICAgIC5wZXJmLXRhYmxlLXNvcnQtbWVudSB7CiAgICAgICAgbWFyZ2luLXRvcDogLTEwcHg7CiAgICAgIH0KICAgICAgLnBlcmYtdGFibGUtaGVhZGVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiB3aGl0ZTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGNvbG9yOiAjODA4NjhiOwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBsaW5lLWhlaWdodDogMTZweDsKICAgICAgICBsZXR0ZXItc3BhY2luZzogMC4yNTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS13aXQtY29sb3ItZ3JheTMwMCk7CiAgICAgICAgbWluLWhlaWdodDogbWluLWNvbnRlbnQ7CiAgICAgICAgcGFkZGluZy10b3A6IDEycHg7CiAgICAgICAgcGFkZGluZy1ib3R0b206IDRweDsKICAgICAgfQoKICAgICAgLnBlcmYtdGFibGUtZW50cmllcy1ob2xkZXIgewogICAgICAgIG92ZXJmbG93LXk6IG92ZXJsYXk7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICB9CgogICAgICAucGVyZi10YWJsZS1lbnRyeSB7CiAgICAgICAgYmFja2dyb3VuZDogd2hpdGU7CiAgICAgICAgY29sb3I6ICMzYzQwNDM7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGJvcmRlci1ib3R0b206IHNvbGlkIDFweCB2YXIoLS13aXQtY29sb3ItZ3JheTMwMCk7CiAgICAgIH0KCiAgICAgIC5wZXJmLXRhYmxlLWVudHJ5LWV4cGFuZGVkIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtd3JhcDogd3JhcDsKICAgICAgICBtYXJnaW46IDAgMTJweDsKICAgICAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkIHZhcigtLXdpdC1jb2xvci1ncmF5MzAwKTsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0td2l0LWNvbG9yLWdyYXkzMDApOwogICAgICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkIHZhcigtLXdpdC1jb2xvci1ncmF5MzAwKTsKICAgICAgICBiYWNrZ3JvdW5kOiB3aGl0ZTsKICAgICAgfQoKICAgICAgLnBlcmYtdGFibGUtcm93IHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGJhY2tncm91bmQ6IHdoaXRlOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfQoKICAgICAgLnBlcmYtdGFibGUtcm93LWV4cGFuZGVkIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS13aXQtY29sb3ItZ3JheTMwMCk7CiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHZhcigtLXdpdC1jb2xvci1ncmF5MzAwKTsKICAgICAgICBib3JkZXItcmFkaXVzOiAycHg7CiAgICAgICAgYm94LXNoYWRvdzogMCAxcHggMnB4IDAgcmdiYSg2MCwgNjQsIDY3LCAwLjMpLAogICAgICAgICAgMCAxcHggM3B4IDFweCByZ2JhKDYwLCA2NCwgNjcsIDAuMTUpOwogICAgICAgIGJhY2tncm91bmQ6IHdoaXRlOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfQoKICAgICAgLnBlcmYtdGFibGUtdGV4dC1lbnRyeSB7CiAgICAgICAgaGVpZ2h0OiA0MHB4OwogICAgICAgIHBhZGRpbmctdG9wOiAxNnB4OwogICAgICB9CiAgICAgIC5wZXJmLXRhYmxlLW51bS1lbnRyeSB7CiAgICAgICAgaGVpZ2h0OiA0MHB4OwogICAgICAgIHBhZGRpbmctdG9wOiAxNnB4OwogICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OwogICAgICB9CiAgICAgIC5wZXJmLXRhYmxlLWFycm93IHsKICAgICAgICBtaW4td2lkdGg6IDQwcHg7CiAgICAgICAgd2lkdGg6IDQwcHg7CiAgICAgICAgbWFyZ2luLXRvcDogOHB4OwogICAgICB9CiAgICAgIC5wZXJmLXRhYmxlLXZhbCB7CiAgICAgICAgd2lkdGg6IDMwJTsKICAgICAgfQogICAgICAucGVyZi10YWJsZS1jb3VudCB7CiAgICAgICAgd2lkdGg6IDEwJTsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDIwcHg7CiAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7CiAgICAgIH0KICAgICAgLnBlcmYtdGFibGUtbW9kZWwgewogICAgICAgIG1pbi13aWR0aDogMTAwcHg7CiAgICAgICAgd2lkdGg6IDEwMHB4OwogICAgICB9CiAgICAgIC5wZXJmLXRhYmxlLW1vZGVsLXNpbmdsZSB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQogICAgICAucGVyZi10YWJsZS10aHJlc2hvbGQgewogICAgICAgIHdpZHRoOiAyODBweDsKICAgICAgICBtaW4td2lkdGg6IDI4MHB4OwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgfQogICAgICAucGVyZi10YWJsZS1lcnJvciB7CiAgICAgICAgd2lkdGg6IDE1JTsKICAgICAgICB0ZXh0LWFsaWduOiByaWdodDsKICAgICAgfQogICAgICAucGVyZi10YWJsZS1zcS1lcnJvciB7CiAgICAgICAgd2lkdGg6IDE1JTsKICAgICAgICB0ZXh0LWFsaWduOiByaWdodDsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDIwcHg7CiAgICAgIH0KICAgICAgLnBlcmYtdGFibGUtZnAgewogICAgICAgIHdpZHRoOiAxNSU7CiAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7CiAgICAgIH0KICAgICAgLnBlcmYtdGFibGUtZm4gewogICAgICAgIHdpZHRoOiAxNSU7CiAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7CiAgICAgIH0KICAgICAgLnBlcmYtdGFibGUtYWNjIHsKICAgICAgICB3aWR0aDogMTUlOwogICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OwogICAgICAgIG1hcmdpbi1yaWdodDogMjBweDsKICAgICAgfQogICAgICAucGVyZi10YWJsZS1mMSB7CiAgICAgICAgd2lkdGg6IDEwJTsKICAgICAgICB0ZXh0LWFsaWduOiByaWdodDsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDIwcHg7CiAgICAgIH0KICAgICAgLnBlcmYtYnV0dG9uIHsKICAgICAgICBtYXJnaW4tdG9wOiAxMHB4OwogICAgICB9CgogICAgICAucGVyZi1zb3J0LWJveCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2U7CiAgICAgIH0KICAgICAgLmNvdW50ZXJmYWN0dWFsLXRvZ2dsZSB7CiAgICAgICAgbWFyZ2luOiA0cHggNHB4IDRweCA2cHg7CiAgICAgICAgLS1wYXBlci10b2dnbGUtYnV0dG9uLWNoZWNrZWQtYmFyLWNvbG9yOiAjODFjOTk1OwogICAgICB9CiAgICAgIC5kYXRhcG9pbnQtYnV0dG9uIHsKICAgICAgICBjb2xvcjogIzIwMjEyNDsKICAgICAgICBiYWNrZ3JvdW5kOiAjZmRlMjkzOwogICAgICB9CiAgICAgIC5pbmZlci1idXR0b24gewogICAgICAgIGNvbG9yOiB3aGl0ZTsKICAgICAgICBiYWNrZ3JvdW5kOiAjMTI4ZWFmOwogICAgICB9CiAgICAgIC5mbGV4LWdyb3cgewogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgfQogICAgICAuZmxleC1yb3ctcmV2ZXJzZSB7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlOwogICAgICB9CiAgICAgIC50aHJlc2hvbGQtaW5mby1ob2xkZXIgewogICAgICAgIG1hcmdpbi10b3A6IC0ycHg7CiAgICAgIH0KICAgICAgLnRhYnMgewogICAgICAgIHBhZGRpbmctbGVmdDogMzJweDsKICAgICAgICB0ZXh0LXRyYW5zZm9ybTogbm9uZTsKICAgICAgfQogICAgICAucm90YXRlZC1pY29uIHsKICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgyNzBkZWcpOwogICAgICB9CiAgICAgIC5kYXRhcG9pbnQtY29udHJvbC1idXR0b24gewogICAgICAgIHdpZHRoOiAyOHB4OwogICAgICAgIGhlaWdodDogMjhweDsKICAgICAgICBwYWRkaW5nOiA0cHg7CiAgICAgICAgbWFyZ2luLXRvcDogNHB4OwogICAgICB9CiAgICAgIC5wZC1ob2xkZXIgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB3aWR0aDogMzAwcHg7CiAgICAgIH0KICAgICAgLnBkLXktbGFiZWwgewogICAgICAgIGNvbG9yOiAjNWY2MzY4OwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBsZWZ0OiAtMjBweDsKICAgICAgICBwYWRkaW5nOiAwcHg7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogODBweDsKICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgyNzBkZWcpOwogICAgICB9CiAgICAgIC5wZC14LWxhYmVsIHsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgY29sb3I6ICM1ZjYzNjg7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgcGFkZGluZzogMCAwIDAgNDBweDsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgIH0KICAgICAgcGFwZXItdG9nZ2xlLWJ1dHRvbiB7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIC0tcGFwZXItdG9nZ2xlLWJ1dHRvbi1jaGVja2VkLWJ1dHRvbi1jb2xvcjogd2hpdGU7CiAgICAgICAgLS1wYXBlci10b2dnbGUtYnV0dG9uLWxhYmVsLWNvbG9yOiAjM2M0MDQzOwogICAgICB9CiAgICA8L3N0eWxlPgogICAgPHRmLXBsdWdpbi1kaWFsb2cgaWQ9ImluaXRpYWxEaWFsb2ciPjwvdGYtcGx1Z2luLWRpYWxvZz4KICAgIDxwYXBlci1kaWFsb2cgaWQ9ImluZmVyZW5jZXNldHRpbmdzIiBjbGFzcz0iaW5mZXJlbmNlLXNldHRpbmdzIiBvcGVuZWQ9IltbIWxvY2FsXV0iPgogICAgICA8dGYtaW5mZXJlbmNlLXBhbmVsIGluZmVyZW5jZS1hZGRyZXNzPSJ7e2luZmVyZW5jZUFkZHJlc3N9fSIgbW9kZWwtbmFtZT0ie3ttb2RlbE5hbWV9fSIgZXhhbXBsZXMtcGF0aD0ie3tleGFtcGxlc1BhdGh9fSIgbW9kZWwtdHlwZT0ie3ttb2RlbFR5cGV9fSIgbW9kZWwtdmVyc2lvbj0ie3ttb2RlbFZlcnNpb259fSIgbW9kZWwtc2lnbmF0dXJlPSJ7e21vZGVsU2lnbmF0dXJlfX0iIG1heC1leGFtcGxlcz0ie3ttYXhFeGFtcGxlc319IiBsYWJlbC12b2NhYi1wYXRoPSJ7e2xhYmVsVm9jYWJQYXRofX0iIG11bHRpLWNsYXNzPSJ7e211bHRpQ2xhc3N9fSIgc2FtcGxpbmctb2Rkcz0ie3tzYW1wbGluZ09kZHN9fSIgc2VxdWVuY2UtZXhhbXBsZXM9Int7c2VxdWVuY2VFeGFtcGxlc319IiBtYXgtY2xhc3Nlcy10by1kaXNwbGF5PSJ7e21heEluZmVyZW5jZUVudHJpZXNQZXJSdW59fSIgdXNlLXByZWRpY3QtYXBpPSJ7e3VzZVByZWRpY3RBcGl9fSIgcHJlZGljdC1vdXRwdXQtdGVuc29yPSJ7e3ByZWRpY3RPdXRwdXRUZW5zb3J9fSIgcHJlZGljdC1pbnB1dC10ZW5zb3I9Int7cHJlZGljdElucHV0VGVuc29yfX0iPgogICAgICA8L3RmLWluZmVyZW5jZS1wYW5lbD4KICAgICAgPGRpdiBjbGFzcz0iYWNjZXB0LWJ1dHRvbi1ob2xkZXIiPgogICAgICAgIDxwYXBlci1idXR0b24gb24tdGFwPSJnZXRFeGFtcGxlc0FuZENsb3NlU2V0dGluZ3NfIiBjbGFzcz0ibWFpbi1idXR0b24iIGRpc2FibGVkJD0iW1tzaG91bGREaXNhYmxlR2V0RXhhbXBsZXNCdXR0b25fKGV4YW1wbGVzUGF0aCwgbWF4RXhhbXBsZXMpXV0iPgogICAgICAgICAgQWNjZXB0CiAgICAgICAgPC9wYXBlci1idXR0b24+CiAgICAgICAgPHBhcGVyLWJ1dHRvbiBkaWFsb2ctZGlzbWlzcyBjbGFzcz0iY29udHJvbC1idXR0b24iPkNhbmNlbDwvcGFwZXItYnV0dG9uPgogICAgICA8L2Rpdj4KICAgIDwvcGFwZXItZGlhbG9nPgogICAgPHBhcGVyLWRpYWxvZyBpZD0iZGVsZXRlZGlhbG9nIj4KICAgICAgPHA+QXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGUgc2VsZWN0ZWQgZGF0YXBvaW50PwogICAgICA8ZGl2IGNsYXNzPSJidXR0b25zIj4KICAgICAgICA8cGFwZXItYnV0dG9uIGRpYWxvZy1kaXNtaXNzIGNsYXNzPSJjb250cm9sLWJ1dHRvbiI+Q2FuY2VsPC9wYXBlci1idXR0b24+CiAgICAgICAgPHBhcGVyLWJ1dHRvbiBkaWFsb2ctY29uZmlybSBhdXRvZm9jdXMgb24tdGFwPSJkZWxldGVEYXRhcG9pbnRfIiBjbGFzcz0ibWFpbi1idXR0b24iPkRlbGV0ZTwvcGFwZXItYnV0dG9uPgogICAgICA8L2Rpdj4KICAgIDwvcGFwZXItZGlhbG9nPgogICAgPHBhcGVyLWRpYWxvZyBpZD0iZGlzdGFuY2VkaWFsb2ciPgogICAgICA8aDI+U2hvdyBzaW1pbGFyaXR5IHRvIHNlbGVjdGVkIGRhdGFwb2ludDwvaDI+CiAgICAgIDxwYXBlci1pbnB1dCB2YWx1ZT0ie3tmYWNldERpc3RGZWF0dXJlTmFtZX19IiBsYWJlbD0iTWV0cmljIG5hbWUiIGNsYXNzPSJkYXRhcG9pbnQtY29udHJvbC1maWx0ZXItaW5wdXQiPgogICAgICA8L3BhcGVyLWlucHV0PgogICAgICA8ZGl2IGNsYXNzPSJyYWRpb2xhYmVsIj5EaXN0YW5jZSB0eXBlPC9kaXY+CiAgICAgIDxwYXBlci1yYWRpby1ncm91cCBjbGFzcz0iZGlzdC1zd2l0Y2giIHNlbGVjdGVkPSJ7e2ZhY2V0RGlzdFN3aXRjaH19Ij4KICAgICAgICA8cGFwZXItcmFkaW8tYnV0dG9uIGNsYXNzPSJkaXN0LXJhZGlvIiBuYW1lPSJMMSI+TDE8L3BhcGVyLXJhZGlvLWJ1dHRvbj4KICAgICAgICA8cGFwZXItcmFkaW8tYnV0dG9uIGNsYXNzPSJkaXN0LXJhZGlvIiBuYW1lPSJMMiI+TDI8L3BhcGVyLXJhZGlvLWJ1dHRvbj4KICAgICAgPC9wYXBlci1yYWRpby1ncm91cD4KICAgICAgPHBhcGVyLWRyb3Bkb3duLW1lbnUgbGFiZWw9IkFwcGx5IHRvIGRhdGFwb2ludHMgdmlzdWFsaXphdGlvbiIgY2xhc3M9InRocmVzaG9sZC1kcm9wZG93biBkaXN0YW5jZS12aXMtZHJvcGRvd24iPgogICAgICAgIDxwYXBlci1saXN0Ym94IHNsb3Q9ImRyb3Bkb3duLWNvbnRlbnQiIHNlbGVjdGVkPSJ7e2ZhY2V0RGlzdFNldHRpbmd9fSIgYXR0ci1mb3Itc2VsZWN0ZWQ9Im5hbWUiPgogICAgICAgICAgPHBhcGVyLWl0ZW0gbmFtZT0iY29sb3JCeSI+Q29sb3IgQnk8L3BhcGVyLWl0ZW0+CiAgICAgICAgICA8cGFwZXItaXRlbSBuYW1lPSJob3Jpem9udGFsRmFjZXQiPlgtQXhpcyBCaW5uaW5nPC9wYXBlci1pdGVtPgogICAgICAgICAgPHBhcGVyLWl0ZW0gbmFtZT0idmVydGljYWxGYWNldCI+WS1BeGlzIEJpbm5pbmc8L3BhcGVyLWl0ZW0+CiAgICAgICAgICA8cGFwZXItaXRlbSBuYW1lPSJob3Jpem9udGFsUG9zaXRpb24iPlgtQXhpcyBTY2F0dGVyPC9wYXBlci1pdGVtPgogICAgICAgICAgPHBhcGVyLWl0ZW0gbmFtZT0idmVydGljYWxQb3NpdGlvbiI+WS1BeGlzIFNjYXR0ZXI8L3BhcGVyLWl0ZW0+CiAgICAgICAgPC9wYXBlci1saXN0Ym94PgogICAgICA8L3BhcGVyLWRyb3Bkb3duLW1lbnU+CiAgICAgIDxkaXYgY2xhc3M9ImJ1dHRvbnMiPgogICAgICAgIDxwYXBlci1idXR0b24gZGlhbG9nLWRpc21pc3MgY2xhc3M9ImNvbnRyb2wtYnV0dG9uIj5DYW5jZWw8L3BhcGVyLWJ1dHRvbj4KICAgICAgICA8cGFwZXItYnV0dG9uIGRpYWxvZy1jb25maXJtIGF1dG9mb2N1cyBvbi10YXA9ImFkZERpc3RhbmNlTWV0cmljIiBjbGFzcz0ibWFpbi1idXR0b24iPkFwcGx5PC9wYXBlci1idXR0b24+CiAgICAgIDwvZGl2PgogICAgPC9wYXBlci1kaWFsb2c+CiAgICA8ZGl2IGNsYXNzPSJkYXNoYm9hcmQtbGF5b3V0Ij4KICAgICAgPGRpdiBjbGFzcz0ibWFpbi12ZXJ0aWNhbCI+CiAgICAgICAgPGRpdiBjbGFzcz0ibWFpbi1jb250ZW50Ij4KICAgICAgICAgIDxkaXYgY2xhc3M9Im1haW4tYm90dG9tLWJhciI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRhdGFwb2ludC1sZWZ0LWNvbnRyb2xzLWhvbGRlciI+CiAgICAgICAgICAgICAgPHBhcGVyLXRhYnMgY2xhc3M9InRhYnMiIG5vaW5rIHNlbGVjdGVkPSJ7e3NpZGVUYWJTZWxlY3RlZH19Ij4KICAgICAgICAgICAgICAgIDxwYXBlci10YWI+RGF0YXBvaW50IGVkaXRvcjwvcGFwZXItdGFiPgogICAgICAgICAgICAgICAgPHBhcGVyLXRhYj5bW2dldFBlcmZvcm1hbmNlVGFiVGl0bGUobW9kZWxUeXBlLCBtdWx0aUNsYXNzKV1dPC9wYXBlci10YWI+CiAgICAgICAgICAgICAgICA8cGFwZXItdGFiPkZlYXR1cmVzPC9wYXBlci10YWI+CiAgICAgICAgICAgICAgPC9wYXBlci10YWJzPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iZGF0YXBvaW50LXJpZ2h0LWNvbnRyb2xzLWhvbGRlciI+CiAgICAgICAgICAgICAgPGEgdGFyZ2V0PSJfYmxhbmsiIGNsYXNzPSJjb250cm9sIiBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC90cmVlL21hc3Rlci90ZW5zb3Jib2FyZC9wbHVnaW5zL2ludGVyYWN0aXZlX2luZmVyZW5jZS9SRUFETUUubWQiIHJlbD0ibm9vcGVuZXIgbm9yZWZlcnJlciI+CiAgICAgICAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24gaWNvbj0iaGVscC1vdXRsaW5lIiBjbGFzcz0ic2V0dGluZ3MtYnV0dG9uIiB0aXRsZT0iV2hhdC1JZiBUb29sIGRvY3VtZW50YXRpb24iPjwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgIDxwYXBlci1pY29uLWJ1dHRvbiBpY29uPSJzZXR0aW5ncyIgb24tdGFwPSJzZXR0aW5nc0NsaWNrZWRfIiBjbGFzcz0ic2V0dGluZ3MtYnV0dG9uIGNvbnRyb2wiIHRpdGxlPSJXaGF0LUlmIFRvb2wgc2V0dGluZ3MiIGRpc2FibGVkJD0iW1tsb2NhbF1dIj48L3BhcGVyLWljb24tYnV0dG9uPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImV4YW1wbGUtc3RhdHVzIj5bW2V4YW1wbGVTdGF0dXNTdHJdXTwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGlyb24tcGFnZXMgY2xhc3M9InNpZGUtdGFicyIgc2VsZWN0ZWQ9Int7c2lkZVRhYlNlbGVjdGVkfX0iPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJkYXRhcG9pbnQtdGFiIj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlLWhvbGRlciIgaWQ9InNpZGUiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2lkZS1jb250ZW50Ij4KICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGluZy1hbmQtY2FyZCI+CiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iaGVhZGluZyIgb24tdGFwPSJ0b2dnbGVDb250ZXh0VG9vbHMiPgogICAgICAgICAgICAgICAgICAgICAgVmlzdWFsaXplCiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJyaWdodC1zaWRlIHJpZ2h0LXNpZGUtcGVyZm9ybWFuY2UtdGFiIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGlyb24taWNvbiBpY29uPSJbW2dldEV4cGFuZENvbGxhcHNlSWNvbihvcGVuZWRDb250ZXh0VG9vbHMpXV0iIGNsYXNzPSJleHBhbmQtY29sbGFwc2UtYnV0dG9uIj48L2lyb24taWNvbj4KICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgIDxpcm9uLWNvbGxhcHNlIGNsYXNzPSJuby1wYWRkaW5nLWNhcmQiIGlkPSJjb2xsYXBzZWNvbnRleHR0b29scyIgb3BlbmVkPSJ7e29wZW5lZENvbnRleHRUb29sc319Ij4KICAgICAgICAgICAgICAgICAgICAgIDxwYXBlci1yYWRpby1ncm91cCBzZWxlY3RlZD0ie3t2aXNNb2RlfX0iPgogICAgICAgICAgICAgICAgICAgICAgICA8cGFwZXItcmFkaW8tYnV0dG9uIG5hbWU9ImRpdmUiPkRhdGFwb2ludHM8L3BhcGVyLXJhZGlvLWJ1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbiBuYW1lPSJwZCI+UGFydGlhbCBkZXBlbmRlbmNlIHBsb3RzPC9wYXBlci1yYWRpby1idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLXJhZGlvLWdyb3VwPgogICAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbWyFpc1JlZ3Jlc3Npb25fKG1vZGVsVHlwZSldXSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXgiPgogICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgdGl0bGU9IlNlbGVjdCBhIGRhdGFwb2ludCB0byB1c2UgdGhpcyBmZWF0dXJlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXBlci10b2dnbGUtYnV0dG9uIGNsYXNzPSJjb3VudGVyZmFjdHVhbC10b2dnbGUiIGNoZWNrZWQ9Int7c2hvd05lYXJlc3RDb3VudGVyZmFjdHVhbH19IiBkaXNhYmxlZCQ9IltbIWhhc1NlbGVjdGVkKHNlbGVjdGVkRXhhbXBsZUFuZEluZmVyZW5jZSldXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNob3cgbmVhcmVzdCBjb3VudGVyZmFjdHVhbCBkYXRhcG9pbnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFwZXItdG9nZ2xlLWJ1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFwZXItcmFkaW8tZ3JvdXAgc2VsZWN0ZWQ9Int7bmVhcmVzdENvdW50ZXJmYWN0dWFsRGlzdH19Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXBlci1yYWRpby1idXR0b24gbmFtZT0iTDEiPkwxPC9wYXBlci1yYWRpby1idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFwZXItcmFkaW8tYnV0dG9uIG5hbWU9IkwyIj5MMjwvcGFwZXItcmFkaW8tYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFwZXItcmFkaW8tZ3JvdXA+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcGVyLWRyb3Bkb3duLW1lbnUgbGFiZWw9Ik1vZGVsOiIgbm8tbGFiZWwtZmxvYXQgY2xhc3M9ImNvdW50ZXJmYWN0dWFsLWRyb3Bkb3duIiBoaWRkZW4kPSJbW3Nob3VsZEhpZGVDb3VudGVyZmFjdHVhbE1vZGVsU2VsZWN0b3JfKHBhcnNlZE1vZGVsTmFtZXMpXV0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcGVyLWxpc3Rib3ggY2xhc3M9ImRyb3Bkb3duLWNvbnRlbnQiIHNlbGVjdGVkPSJ7e25lYXJlc3RDb3VudGVyZmFjdHVhbE1vZGVsSW5kZXh9fSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbcGFyc2VkTW9kZWxOYW1lc11dIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFwZXItaXRlbT5bW2dldENvdW50ZXJmYWN0dWFsTW9kZWxOYW1lXyhpdGVtKV1dPC9wYXBlci1pdGVtPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXBlci1saXN0Ym94PgogICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFwZXItZHJvcGRvd24tbWVudT4KICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24gaWNvbj0iaW5mby1vdXRsaW5lIiBjbGFzcz0iaW5mby1pY29uIGNmLWluZm8taWNvbiBuby1wYWRkaW5nIiBvbi10YXA9Im9wZW5EaWFsb2ciPgogICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcGVyLWRpYWxvZyBjbGFzcz0iZGlhbG9nLXRleHQiIGhvcml6b250YWwtYWxpZ249ImF1dG8iIHZlcnRpY2FsLWFsaWduPSJhdXRvIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRpYWxvZy10aXRsZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5lYXJlc3QgY291bnRlcmZhY3R1YWwgKG5laWdoYm9yIG9mIGRpZmZlcmVudAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc2lmaWNhdGlvbikKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tcGFyZXMgdGhlIHNlbGVjdGVkIGRhdGFwb2ludCB3aXRoIGl0cyBuZWFyZXN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5laWdoYm9yIGZyb20gYSBkaWZmZXJlbnQgY2xhc3NpZmljYXRpb24gdXNpbmcgTDEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgTDIgZGlzdGFuY2UuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLWRpYWxvZz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgICAgICAgICAgPGRpdiB0aXRsZT0iU2VsZWN0IGEgZGF0YXBvaW50IHRvIHVzZSB0aGlzIGZlYXR1cmUiPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uIGNsYXNzPSJjb250cm9sLWJ1dHRvbiBkYXRhcG9pbnQtYnV0dG9uIiBkaXNhYmxlZCQ9IltbIWhhc1NlbGVjdGVkKHNlbGVjdGVkRXhhbXBsZUFuZEluZmVyZW5jZSldXSIgb24tdGFwPSJzaG93RGlzdGFuY2VDbGlja2VkXyIgYWx0PSJTaG93IHNpbWlsYXJpdHkgdG8gc2VsZWN0ZWQgZGF0YXBvaW50IiB0aXRsZT0iU2hvdyBzaW1pbGFyaXR5IHRvIHNlbGVjdGVkIGRhdGFwb2ludCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaG93IHNpbWlsYXJpdHkgdG8gc2VsZWN0ZWQgZGF0YXBvaW50CiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXBlci1idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcGVyLWljb24tYnV0dG9uIGljb249ImluZm8tb3V0bGluZSIgY2xhc3M9ImluZm8taWNvbiBjZi1pbmZvLWljb24gbm8tcGFkZGluZyIgb24tdGFwPSJvcGVuRGlhbG9nIj4KICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLWljb24tYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXBlci1kaWFsb2cgY2xhc3M9ImRpYWxvZy10ZXh0IiBob3Jpem9udGFsLWFsaWduPSJhdXRvIiB2ZXJ0aWNhbC1hbGlnbj0iYXV0byI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJkaWFsb2ctdGl0bGUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaG93IHNpbWlsYXJpdHkgdG8gc2VsZWN0ZWQgZGF0YXBvaW50CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENhbGN1bGF0ZXMgdGhlIGRpc3RhbmNlIGJldHdlZW4gdGhlIHNlbGVjdGVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFwb2ludCBhbmQgYWxsIG90aGVyIGRhdGFwb2ludHMgYW5kIHNob3dzIHRoaXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIGRhdGFwb2ludHMgdmlzdWFsaXphdGlvbi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFwZXItZGlhbG9nPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvaXJvbi1jb2xsYXBzZT4KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImhlYWRpbmctYW5kLWNhcmQgZWRpdG9yLWhlYWRpbmctYW5kLWNhcmQiPgogICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImhlYWRpbmciPgogICAgICAgICAgICAgICAgICAgICAgW1tnZXREYXRhcG9pbnRFZGl0b3JUaXRsZShzZWxlY3RlZEV4YW1wbGVOdW0sCiAgICAgICAgICAgICAgICAgICAgICBjb21wYXJlZEluZGljZXMpXV0KICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJuby1wYWRkaW5nLWNhcmQiPgogICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZGF0YXBvaW50LWNvbnRyb2xzLWhvbGRlciBkYXRhcG9pbnQtY29udHJvbC1idXR0b25zLWhvbGRlciI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRhdGFwb2ludC1sZWZ0LWNvbnRyb2xzLWhvbGRlciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcGVyLWljb24tYnV0dG9uIGNsYXNzPSJkYXRhcG9pbnQtY29udHJvbC1idXR0b24iIGljb249ImNoZXZyb24tbGVmdCIgZGlzYWJsZWQkPSJbWyFoYXNTZWxlY3RlZChzZWxlY3RlZEV4YW1wbGVBbmRJbmZlcmVuY2UpXV0iIG9uLXRhcD0ic2VsZWN0UHJldkRhdGFwb2ludF8iIGFsdD0ic2VsZWN0IHByZXZpb3VzIGRhdGFwb2ludCIgdGl0bGU9IlNlbGVjdCBwcmV2aW91cyBkYXRhcG9pbnQiPgogICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcGVyLWljb24tYnV0dG9uIGNsYXNzPSJkYXRhcG9pbnQtY29udHJvbC1idXR0b24iIGljb249ImNoZXZyb24tcmlnaHQiIGRpc2FibGVkJD0iW1shaGFzU2VsZWN0ZWQoc2VsZWN0ZWRFeGFtcGxlQW5kSW5mZXJlbmNlKV1dIiBvbi10YXA9InNlbGVjdE5leHREYXRhcG9pbnRfIiBhbHQ9InNlbGVjdCBuZXh0IGRhdGFwb2ludCIgdGl0bGU9IlNlbGVjdCBuZXh0IGRhdGFwb2ludCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHRpdGxlPSJFZGl0IGEgZGF0YXBvaW50IHRvIHVzZSB0aGlzIGZlYXR1cmUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcGVyLWljb24tYnV0dG9uIGNsYXNzPSJkYXRhcG9pbnQtY29udHJvbC1idXR0b24iIGljb249Imhpc3RvcnkiIG9uLXRhcD0icmVzZXREYXRhcG9pbnRfIiBhbHQ9InVuZG8gY2hhbmdlcyIgdGl0bGU9IlVuZG8gY2hhbmdlcyIgZGlzYWJsZWQkPSJbW3Nob3VsZERpc2FibGVSZXNldF8oc2VsZWN0ZWRFeGFtcGxlQW5kSW5mZXJlbmNlLmNoYW5nZWQpXV0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHRpdGxlPSJTZWxlY3QgYSBkYXRhcG9pbnQgdG8gdXNlIHRoaXMgZmVhdHVyZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24gY2xhc3M9ImRhdGFwb2ludC1jb250cm9sLWJ1dHRvbiIgaWNvbj0iY29udGVudC1jb3B5IiBkaXNhYmxlZCQ9IltbIWhhc1NlbGVjdGVkKHNlbGVjdGVkRXhhbXBsZUFuZEluZmVyZW5jZSldXSIgb24tdGFwPSJjb3B5RGF0YXBvaW50XyIgYWx0PSJkdXBsaWNhdGUgZGF0YXBvaW50IiB0aXRsZT0iRHVwbGljYXRlIGRhdGFwb2ludCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLWljb24tYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgdGl0bGU9IlNlbGVjdCBhIGRhdGFwb2ludCB0byB1c2UgdGhpcyBmZWF0dXJlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXBlci1pY29uLWJ1dHRvbiBjbGFzcz0iZGF0YXBvaW50LWNvbnRyb2wtYnV0dG9uIiBpY29uPSJkZWxldGUiIGRpc2FibGVkJD0iW1shaGFzU2VsZWN0ZWQoc2VsZWN0ZWRFeGFtcGxlQW5kSW5mZXJlbmNlKV1dIiBvbi10YXA9ImRlbGV0ZURhdGFwb2ludERpYWxvZ18iIGFsdD0iZGVsZXRlIGRhdGFwb2ludCIgdGl0bGU9IkRlbGV0ZSBkYXRhcG9pbnQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb250cm9sLWRpdmlkZXIiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXBlci1pbnB1dCB2YWx1ZT0ie3tmZWF0dXJlU2VhcmNoVmFsdWV9fSIgbGFiZWw9IlNlYXJjaCBmZWF0dXJlcyIgY2xhc3M9ImRhdGFwb2ludC1jb250cm9sLWZpbHRlci1pbnB1dCBmZWF0dXJlLXNlYXJjaC1pbnB1dCIgZGlzYWJsZWQkPSJbWyFoYXNTZWxlY3RlZChzZWxlY3RlZEV4YW1wbGVBbmRJbmZlcmVuY2UpXV0iIG5vLWxhYmVsLWZsb2F0PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlyb24taWNvbiBpY29uPSJpY29uczpzZWFyY2giIHNsb3Q9InByZWZpeCI+PC9pcm9uLWljb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXBlci1pbnB1dD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRhdGFwb2ludC1yaWdodC1jb250cm9scy1ob2xkZXIiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbaGFzU2VsZWN0ZWQoc2VsZWN0ZWRFeGFtcGxlQW5kSW5mZXJlbmNlKV1dIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZXhhbXBsZS1hbmQtaW5mZXJlbmNlLWhvbGRlciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPHZ6LWV4YW1wbGUtdmlld2VyIGNsYXNzPSJleGFtcGxlLWhvbGRlciIganNvbj0ie3tzZWxlY3RlZEV4YW1wbGVBbmRJbmZlcmVuY2UuZXhhbXBsZX19IiBjb21wYXJlLWpzb249Int7Y291bnRlcmZhY3R1YWxFeGFtcGxlQW5kSW5mZXJlbmNlLmV4YW1wbGV9fSIgb24tZXhhbXBsZS1jaGFuZ2U9ImV4YW1wbGVDaGFuZ2VfIiBpZD0idmlld2VyIiBkaXNwbGF5LW1vZGU9IltbZXhhbXBsZURpc3BsYXlNb2RlXV0iIGZlYXR1cmUtc2VhcmNoLXZhbHVlPSJ7e2ZlYXR1cmVTZWFyY2hWYWx1ZX19IiBjb21wYXJlLXRpdGxlPSJbW2NvbXBhcmVUaXRsZV1dIiBzYWxpZW5jeT0iW1thdHRyaWJ1dGlvbl1dIiBzaG93LXNhbGllbmN5IHJlYWRvbmx5PSJbWyFhcmVFeGFtcGxlc0VkaXRhYmxlXyhtb2RlbE5hbWUsIGluZmVyZW5jZUFkZHJlc3MpXV0iPgogICAgICAgICAgICAgICAgICAgICAgICAgIDwvdnotZXhhbXBsZS12aWV3ZXI+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shaGFzU2VsZWN0ZWQoc2VsZWN0ZWRFeGFtcGxlQW5kSW5mZXJlbmNlKV1dIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZGF0YXBvaW50LWluZm8taG9sZGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJkYXRhcG9pbnQtaW5mby1jb250ZW50Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXggc3BhY2UtYmV0d2VlbiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im9uYm9hcmRpbmctaGVhZGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWxlY3QgYSBkYXRhcG9pbnQgdG8gYmVnaW4gZXhwbG9yaW5nIG1vZGVsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVoYXZpb3IgZm9yIHlvdXIgc2VsZWN0aW9uLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ib25ib2FyZGluZy10ZXh0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImJvbGQiPkVkaXQgYW5kIEluZmVyOjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWRpdCB5b3VyIGRhdGFwb2ludCBoZXJlIGFuZCBydW4gaW5mZXJlbmNlIGluIHRoZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmZlciB0YWJsZSB0byBzZWUgZGlmZmVyZW5jZXMgaW4gbW9kZWwgYmVoYXZpb3IuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im9uYm9hcmRpbmctdGV4dCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJib2xkIj5WaXN1YWxpemU6PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTd2l0Y2ggYmV0d2VlbiB2aXN1YWxpemluZyBkYXRhcG9pbnRzIGFuZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBsb3JpbmcgcGFydGlhbCBkZXBlbmRlbmNlIHBsb3RzIHRvIGdhaW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zaWdodHMgaW50byB5b3VyIG1vZGVsJ3MgYmVoYXZpb3IuIEV4cGxvcmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnRlcmZhY3R1YWxzIG9yIHNlZSBob3cgc2ltaWxhciAob3IgZGlmZmVyZW50KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgcmVzdCBvZiB5b3VyIGRhdGFzZXQgaXMgZnJvbSB5b3VyIHNlbGVjdGlvbi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbmZlcmVuY2Utc2VjdGlvbi1ob2xkZXIiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImluZmVyZW5jZS1zZWN0aW9uIj4KICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImluZmVyZW5jZS1oZWFkZXIgaGVhZGluZyIgb24tdGFwPSJ0b2dnbGVJbmZlcmVuY2VSZXN1bHRzIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmxleCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtbZ2V0SW5mZXJUaXRsZShzZWxlY3RlZEV4YW1wbGVOdW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wYXJlZEluZGljZXMpXV0KICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJyaWdodC1zaWRlIHJpZ2h0LXNpZGUtcGVyZm9ybWFuY2UtdGFiIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpcm9uLWljb24gaWNvbj0iW1tnZXRFeHBhbmRDb2xsYXBzZUljb24ob3BlbmVkSW5mZXJlbmNlUmVzdWx0cyldXSIgY2xhc3M9ImV4cGFuZC1jb2xsYXBzZS1idXR0b24iPjwvaXJvbi1pY29uPgogICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgPGlyb24tY29sbGFwc2UgY2xhc3M9Im5vLXBhZGRpbmctY2FyZCIgaWQ9ImNvbGxhcHNlaW5mZXJlbmNlIiBvcGVuZWQ9Int7b3BlbmVkSW5mZXJlbmNlUmVzdWx0c319Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiB0aXRsZT0iRWRpdCBhIGRhdGFwb2ludCB0byB1c2UgdGhpcyBmZWF0dXJlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uIG9uLXRhcD0iaW5mZXJDbGlja2VkXyIgY2xhc3M9ImNvbnRyb2wtYnV0dG9uIGluZmVyLWJ1dHRvbiBmbGV4LWdyb3ciIGRpc2FibGVkJD0iW1tzaG91bGREaXNhYmxlSW5mZXJCdXR0b25fKGV4YW1wbGVzQW5kSW5mZXJlbmNlcywgbW9kZWxOYW1lLCBpbmZlcmVuY2VBZGRyZXNzLCB1cGRhdGVkRXhhbXBsZSldXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBSdW4gaW5mZXJlbmNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXBlci1idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbaGFzU2VsZWN0ZWQoc2VsZWN0ZWRFeGFtcGxlQW5kSW5mZXJlbmNlKV1dIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0Zi1pbmZlcmVuY2Utdmlld2VyIGNsYXNzPSJpbmZlcmVuY2Utdmlld2VyIiBpbmZlcmVuY2VzPSJbW3NlbGVjdGVkRXhhbXBsZUFuZEluZmVyZW5jZS5pbmZlcmVuY2VzXV0iIGlkJD0iW1tnZXRJbmZlcmVuY2VIb2xkZXJJZF8oKV1dIiBtb2RlbC10eXBlPSJbW21vZGVsVHlwZV1dIiBtb2RlbC1uYW1lcz0iW1twYXJzZWRNb2RlbE5hbWVzXV0iIG1heC1lbnRyaWVzLXBlci1ydW49IltbbWF4SW5mZXJlbmNlRW50cmllc1BlclJ1bl1dIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGYtaW5mZXJlbmNlLXZpZXdlcj4KICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tjb3VudGVyZmFjdHVhbEV4YW1wbGVBbmRJbmZlcmVuY2VdXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGYtaW5mZXJlbmNlLXZpZXdlciBjbGFzcz0iaW5mZXJlbmNlLXZpZXdlciBjb21wYXJlLWluZmVyZW5jZS12aWV3ZXIiIGluZmVyZW5jZXM9IltbY291bnRlcmZhY3R1YWxFeGFtcGxlQW5kSW5mZXJlbmNlLmluZmVyZW5jZXNdXSIgbW9kZWwtdHlwZT0iW1ttb2RlbFR5cGVdXSIgbW9kZWwtbmFtZXM9IltbcGFyc2VkTW9kZWxOYW1lc11dIiBtYXgtZW50cmllcy1wZXItcnVuPSJbW21heEluZmVyZW5jZUVudHJpZXNQZXJSdW5dXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RmLWluZmVyZW5jZS12aWV3ZXI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICA8L2lyb24tY29sbGFwc2U+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJyZXNpemVyIiBpZD0icmVzaXplciI+CiAgICAgICAgICAgICAgICAgIDxpcm9uLWljb24gaWNvbj0iYXY6cGF1c2UiIGNsYXNzPSJyZXNpemUtaWNvbiI+PC9pcm9uLWljb24+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjZW50ZXIiIHNsb3Q9ImNlbnRlciIgaWQ9ImNlbnRlciI+CiAgICAgICAgICAgICAgICA8ZmFjZXRzLWRpdmUgaWQ9ImRpdmUiIGRhdGE9IltbdmlzZGF0YV1dIiBzZWxlY3RlZC1pbmRpY2VzPSJbW3NlbGVjdGVkXV0iIGNvbXBhcmVkLWluZGljZXM9IltbY29tcGFyZWRJbmRpY2VzXV0iIG9uLXNlbGVjdGVkLWluZGljZXMtY2hhbmdlZD0ic2VsZWN0ZWRJbmRpY2VzQ2hhbmdlZF8iIG9uLXN0YXRzLWNoYW5nZWQ9InN0YXRzQ2hhbmdlZF8iIGhpZGUtaW5mby1jYXJkPSJ0cnVlIiBzcHJpdGUtaW1hZ2Utd2lkdGg9IjMyIiBzcHJpdGUtaW1hZ2UtaGVpZ2h0PSIzMiIgZml0LWdyaWQtYXNwZWN0LXJhdGlvLXRvLXZpZXdwb3J0PSJ0cnVlIiBzdGFibGUtY29sb3JzPSJ0cnVlIj4KICAgICAgICAgICAgICAgIDwvZmFjZXRzLWRpdmU+CiAgICAgICAgICAgICAgICA8ZGl2IGlkPSJub2V4YW1wbGVzIiBjbGFzcz0ibm9leGFtcGxlcyBpbmZvLXRleHQiPgogICAgICAgICAgICAgICAgICBEYXRhcG9pbnRzIGFuZCB0aGVpciBpbmZlcmVuY2UgcmVzdWx0cyB3aWxsIGJlIGRpc3BsYXllZCBoZXJlLgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8cGFwZXItc3Bpbm5lci1saXRlIGlkPSJzcGlubmVyIiBoaWRkZW49Iltbc3Bpbm5lckhpZGRlbl9dXSIgYWN0aXZlPjwvcGFwZXItc3Bpbm5lci1saXRlPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmVhdHVyZS1jb250YWluZXItaG9sZGVyIiBpZD0icGFydGlhbHBsb3Rob2xkZXIiPgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZC1wbG90cy1oZWFkZXIiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXgiPgogICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGQtaW5mby10ZXh0Ij5QYXJ0aWFsIERlcGVuZGVuY2UgUGxvdHM8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgIDxwYXBlci1pY29uLWJ1dHRvbiBpY29uPSJpbmZvLW91dGxpbmUiIGNsYXNzPSJpbmZvLWljb24gcGQtaW5mby1pY29uIG5vLXBhZGRpbmciIG9uLXRhcD0ib3BlbkRpYWxvZyI+CiAgICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLWljb24tYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgPHBhcGVyLWRpYWxvZyBjbGFzcz0iZGlhbG9nLXRleHQiIGhvcml6b250YWwtYWxpZ249ImF1dG8iIHZlcnRpY2FsLWFsaWduPSJhdXRvIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZGlhbG9nLXRpdGxlIj5QYXJ0aWFsIERlcGVuZGVuY2UgUGxvdHM8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICBQYXJ0aWFsIGRlcGVuZGVuY2UgcGxvdHMgdmlzdWFsaXplIHRoZSBjaGFuZ2UgaW4KICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZlcmVuY2UgcmVzdWx0cyBmb3IgZXZlcnkgZmVhdHVyZSwgYXMgdGhlIHZhbHVlIGZvcgogICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgZmVhdHVyZSBpcyBjaGFuZ2VkIHRvIGRpZmZlcmVudCB2YWxpZCB2YWx1ZXMuCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBudW1lcmljIGZlYXR1cmVzLCB5b3UgY2FuIHNldCB0aGUgbWluaW11bSBhbmQKICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhpbXVtIHZhbHVlcyB0byBwbG90LgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICBGb3Igc3RyaW5nIGZlYXR1cmVzLCB0aGUgbW9zdCBwb3B1bGFyIGZlYXR1cmUgdmFsdWVzCiAgICAgICAgICAgICAgICAgICAgICAgICAgYXJlIHNob3duIGFzIGFsdGVybmF0aXZlcyB0byB0aGUgZmVhdHVyZSB2YWx1ZSBmb3IgdGhlCiAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQgZGF0YXBvaW50LgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgZmVhdHVyZXMgd2l0aCBtdWx0aXBsZSBmZWF0dXJlIHZhbHVlcyBwZXIKICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhcG9pbnQsIGEgc2luZ2xlIHBsb3QgaXMgc2hvd24gZm9yIGZvciBlYWNoIGZlYXR1cmUKICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSBpbiB0aGUgc2VsZWN0ZWQgZGF0YXBvaW50LiBZb3UgY2FuIG92ZXJyaWRlCiAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpY2ggZmVhdHVyZSB2YWx1ZXMgaGF2ZSBwbG90cyBjcmVhdGVkIGZvciB0aGVtIGJ5CiAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmeWluZyB0aGUgaW5kaWNlcyB0byBzaG93biBwYXJ0aWFsIGRlcGVuZGVuY2UKICAgICAgICAgICAgICAgICAgICAgICAgICBwbG90cyBmb3IsIGlmIHRoZSBkYXRhcG9pbnQgY29udGFpbnMgbXVsdGlwbGUgZmVhdHVyZQogICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcyBmb3IgYSBmZWF0dXJlLgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICBXaGVuIHRoZSBnbG9iYWwgdG9nZ2xlIGlzIHR1cm5lZCBvbiwgdGhlIHBsb3RzIHNob3cKICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgYXZlcmFnZSBlZmZlY3Qgb2YgcmVwZWF0ZWRseSBjaGFuZ2luZyBhIHNpbmdsZQogICAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmUgYWNyb3NzIGFsbCBkYXRhcG9pbnRzLiBXaGVuIGl0IGlzIHR1cm5lZCBvZmYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHBsb3RzIHNob3cgdGhlIGVmZmVjdCBvZiBhIHJlcGVhdGVkbHkgY2hhbmdpbmcgYQogICAgICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZSBmZWF0dXJlIG9uIHRoZSBzZWxlY3RlZCBkYXRhcG9pbnQuCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgPC9wYXBlci1kaWFsb2c+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPHBhcGVyLXRvZ2dsZS1idXR0b24gY2xhc3M9InBkLXRvZ2dsZSIgY2hlY2tlZD0ie3tnbG9iYWxQZFBsb3RzfX0iIG9uLWNoYW5nZT0iaGlkZUFsbFBkRWxlbWVudHNfIiBkaXNhYmxlZCQ9IltbIWhhc1NlbGVjdGVkKHNlbGVjdGVkRXhhbXBsZUFuZEluZmVyZW5jZSldXSI+CiAgICAgICAgICAgICAgICAgICAgICBHbG9iYWwgcGFydGlhbCBkZXBlbmRlbmNlIHBsb3RzCiAgICAgICAgICAgICAgICAgICAgPC9wYXBlci10b2dnbGUtYnV0dG9uPgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbWyFhcmVUaGVyZVBkUGxvdEZlYXR1cmVzXyhwYXJ0aWFsRGVwUGxvdEVsaWdpYmxlRmVhdHVyZXMpXV0iPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBkLW5vLWZlYXR1cmVzLXRleHQiPgogICAgICAgICAgICAgICAgICAgICAgVGhlIGxvYWRlZCBkYXRhc2V0IGhhcyBubyBmZWF0dXJlcyB0byBzaG93IHBhcnRpYWwKICAgICAgICAgICAgICAgICAgICAgIGRlcGVuZGVuY2UgcGxvdHMgZm9yLgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZHBsb3RzLWhvbGRlciI+CiAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1twYXJ0aWFsRGVwUGxvdEVsaWdpYmxlRmVhdHVyZXNdXSI+CiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmZWF0dXJlLWNvbnRhaW5lciIgZGF0YS1mZWF0dXJlLW5hbWUkPSJbW2l0ZW0ubmFtZV1dIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGVyZi10YWJsZS1lbnRyeSBwZXJmLXRhYmxlLXJvdyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGVyZi10YWJsZS1hcnJvdyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24gY2xhc3M9InBkLXJvdy1hcnJvdyByb3RhdGVkLWljb24iIGljb249ImFycm93LWRyb3AtZG93biIgb24tdGFwPSJjYXRlZ29yeVBhbmVDbGlja2VkIj48L3BhcGVyLWljb24tYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBlcmYtdGFibGUtdmFsIHBlcmYtdGFibGUtY2xpY2thYmxlIHRmLWNhdGVnb3J5LXBhbmUgcGVyZi10YWJsZS10ZXh0LWVudHJ5IiBvbi10YXA9ImNhdGVnb3J5UGFuZUNsaWNrZWQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgW1tpdGVtLm5hbWVdXQogICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGQtZW50cnktY29udGFpbmVyIHBlcmYtdGFibGUtZW50cnktZXhwYW5kZWQiIGhpZGRlbj4KICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZC1pbnB1dC1jb250YWluZXIiIGhpZGRlbiQ9Iltbc2hvdWxkSGlkZVBkSW5wdXRDb250YWluZXIoaXRlbS5zYW1wbGVzLCBpdGVtLm5hbWUsIHNlbGVjdGVkKV1dIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InJhbmdlLWlucHV0LWNvbnRhaW5lciIgaGlkZGVuJD0iW1tpdGVtLnNhbXBsZXNdXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImluZm8tdGV4dCIgdGl0bGU9IlRoZSByYW5nZSBvZiB2YWx1ZXMgdG8gdGVzdCAoZGVmYXVsdCB2YWx1ZXMgYXJlIGF1dG9tYXRpY2FsbHkgaW5mZXJyZWQpLiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2V0IHJhbmdlIG9mIHZhbHVlcyB0byB0ZXN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0ibnVtYmVyIiBjbGFzcz0ic3R5bGUtaW5wdXQgeC1taW4gcGQtcmFuZ2UtY29udHJvbCIgdmFsdWU9IltbaXRlbS5vYnNlcnZlZE1pbl1dIiB0aXRsZT0iVGhlIG1pbmltdW0gdmFsdWUgdG8gdGVzdCAoZGVmYXVsdCB2YWx1ZSBpcyBhdXRvbWF0aWNhbGx5IGluZmVycmVkKS4iIG9uLWlucHV0PSJwZElucHV0Q2hhbmdlZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGQtcmFuZ2UtaHlwaGVuIj4tPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9Im51bWJlciIgY2xhc3M9InN0eWxlLWlucHV0IHgtbWF4IHBkLXJhbmdlLWNvbnRyb2wiIHZhbHVlPSJbW2l0ZW0ub2JzZXJ2ZWRNYXhdXSIgdGl0bGU9IlRoZSBtYXhpbXVtIHZhbHVlIHRvIHRlc3QgKGRlZmF1bHQgdmFsdWUgaXMgYXV0b21hdGljYWxseSBpbmZlcnJlZCkuIiBvbi1pbnB1dD0icGRJbnB1dENoYW5nZWQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmVhdHVyZS1pbmRleC1jb250YWluZXIiIGhpZGRlbiQ9Iltbc2hvdWxkSGlkZUZlYXR1cmVJbmRpY2VzU2VsZWN0b3IoaXRlbS5uYW1lLCBzZWxlY3RlZCldXSIgdGl0bGU9IkFuIG9wdGlvbmFsIHByaW50ZXItcGFnZS1zdHlsZSBwYXR0ZXJuIGxpa2UgJzAsMiw0LTYnIHRvIHNlbGVjdCB0aGUgaW5kaWNlcyBvZiB0aGUgZmVhdHVyZSB2YWx1ZXMgdG8gZ2VuZXJhdGUgcGxvdHMgZm9yLiBVc2VmdWwgZm9yIGZlYXR1cmVzIHdpdGggbWFueSByZXBlYXRlZCBmaWVsZHMuIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW5mby10ZXh0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZXQgZmVhdHVyZSBpbmRpY2VzIDxpPihvcHRpb25hbCk8L2k+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgY2xhc3M9InN0eWxlLWlucHV0IGZlYXR1cmUtaW5kZXgtcGF0dGVybiBwZC1yYW5nZS1jb250cm9sIiBvbi1pbnB1dD0icGRJbnB1dENoYW5nZWQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGYtY2F0ZWdvcnktcGFuZS1jb250ZW50Ij48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29uZmlnLXRhYiI+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29uZmlnLXNpZGUtY29udGVudCI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nLWFuZC1jYXJkIj4KICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iaW5mZXJlbmNlLWhlYWRlciBoZWFkaW5nIiBvbi10YXA9InRvZ2dsZVRydWVMYWJlbFNldHVwIj4KICAgICAgICAgICAgICAgICAgICBDb25maWd1cmUKICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJyaWdodC1zaWRlIHJpZ2h0LXNpZGUtcGVyZm9ybWFuY2UtdGFiIj4KICAgICAgICAgICAgICAgICAgICAgIDxpcm9uLWljb24gaWNvbj0iW1tnZXRFeHBhbmRDb2xsYXBzZUljb24ob3BlbmVkVHJ1ZUxhYmVsKV1dIiBjbGFzcz0iZXhwYW5kLWNvbGxhcHNlLWJ1dHRvbiI+PC9pcm9uLWljb24+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICA8aXJvbi1jb2xsYXBzZSBjbGFzcz0iY2FyZCIgaWQ9ImNvbGxhcHNldHJ1ZWxhYmVsIiBvcGVuZWQ9Int7b3BlbmVkVHJ1ZUxhYmVsfX0iPgogICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tzaG91bGRTaG93TGFiZWxEcm9wZG93bl8oc3RhdHMpXV0iPgogICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmxleCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXBlci1kcm9wZG93bi1tZW51IGxhYmVsPSJHcm91bmQgVHJ1dGggRmVhdHVyZSIgY2xhc3M9InRocmVzaG9sZC1kcm9wZG93biI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcGVyLWxpc3Rib3ggc2xvdD0iZHJvcGRvd24tY29udGVudCIgc2VsZWN0ZWQ9Int7c2VsZWN0ZWRMYWJlbEZlYXR1cmV9fSIgYXR0ci1mb3Itc2VsZWN0ZWQ9Im5hbWUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tnZXRGZWF0dXJlTGlzdF8oc3RhdHMpXV0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFwZXItaXRlbSBuYW1lPSJbW2l0ZW1dXSI+W1tnZXRGZWF0dXJlTmFtZV8oaXRlbSldXTwvcGFwZXItaXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXBlci1saXN0Ym94PgogICAgICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLWRyb3Bkb3duLW1lbnU+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaGVscC10aXRsZSBoZWxwLXRpdGxlLW1hcmdpbiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0IGlzIGdyb3VuZCB0cnV0aD8KICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWxwLXRleHQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGZlYXR1cmUgdGhhdCB5b3VyIG1vZGVsIGlzIHRyeWluZyB0byBwcmVkaWN0LgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZGlhbG9nLWxpbmsiIG9uLXRhcD0ib3BlbkRpYWxvZyI+TW9yZS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFwZXItZGlhbG9nIGNsYXNzPSJkaWFsb2ctdGV4dCIgaG9yaXpvbnRhbC1hbGlnbj0iYXV0byIgdmVydGljYWwtYWxpZ249ImF1dG8iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZGlhbG9nLXRpdGxlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JvdW5kIFRydXRoIEZlYXR1cmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgdGhlIGRhdGFwb2ludHMgY29udGFpbiBhIGZlYXR1cmUgdGhhdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXByZXNlbnRzIHRoZSBncm91bmQgdHJ1dGggZm9yIHdoYXQgdGhlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVsIGlzIGF0dGVtcHRpbmcgdG8gcHJlZGljdCwgdGhlbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RpbmcgdGhhdCBmZWF0dXJlIGhlcmUgYWxsb3dzIHRoZSB0b29sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGludmVzdGlnYXRlIHRoZSBwZXJmb3JtYW5jZSBvZiB0aGUgbW9kZWwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnkgY29tcGFyaW5nIHRoZSBtb2RlbCdzIHJlc3VsdHMgdG8gdGhlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VuZCB0cnV0aCBmZWF0dXJlLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXBlci1kaWFsb2c+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW3Nob3VsZFNob3dDb3N0UmF0aW9fKHNlbGVjdGVkTGFiZWxGZWF0dXJlLCBtb2RlbFR5cGUsIG11bHRpQ2xhc3MpXV0iPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFwZXItaW5wdXQgdmFsdWU9Int7aW5jb3JyZWN0UHJlZENvc3RSYXRpb319IiBsYWJlbD0iQ29zdCBSYXRpbyAoRlAvRk4pIiB0eXBlPSJudW1iZXIiIGNsYXNzPSJ0aHJlc2hvbGQtY29zdC1pbnB1dCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXBlci1pbnB1dD4KICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaGVscC10aXRsZSBoZWxwLXRpdGxlLW1hcmdpbiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQgaXMgY29zdCByYXRpbz8KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaGVscC10ZXh0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgY29zdCBvZiBmYWxzZSBwb3NpdGl2ZXMgcmVsYXRpdmUgdG8gZmFsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZWdhdGl2ZXMuIFJlcXVpcmVkIGZvciBvcHRpbWl6YXRpb24uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImRpYWxvZy1saW5rIiBvbi10YXA9Im9wZW5EaWFsb2ciPk1vcmUuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFwZXItZGlhbG9nIGNsYXNzPSJkaWFsb2ctdGV4dCIgaG9yaXpvbnRhbC1hbGlnbj0iYXV0byIgdmVydGljYWwtYWxpZ249ImF1dG8iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJkaWFsb2ctdGl0bGUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQgaXMgY29zdCByYXRpbz8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyB0ZWxscyB0aGUgdG9vbCBob3cgdG8gb3B0aW1pemUgdGhlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NpZmljYXRpb24gdGhyZXNob2xkcyB3aGVuIHlvdSB1c2UgdGhlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW1pemF0aW9uIHN0cmF0ZWd5IGNvbnRyb2xzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLjAwID0gZmFsc2UgcG9zaXRpdmVzIGFyZSBlcXVhbGx5IGFzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29zdGx5IGFzIGZhbHNlIG5lZ2F0aXZlcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNC4wMCA9IGZhbHNlIHBvc2l0aXZlcyBhcmUgNCB0aW1lcyBtb3JlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29zdGx5IHRoYW4gZmFsc2UgbmVnYXRpdmVzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuMjUgPSBmYWxzZSBuZWdhdGl2ZXMgYXJlIDQgdGltZXMgbW9yZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvc3RseSB0aGFuIGZhbHNlIHBvc2l0aXZlcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLWRpYWxvZz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tzaG91bGRTaG93RmVhdHVyZURyb3Bkb3duXyhzdGF0cyldXSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXgiPgogICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXBlci1kcm9wZG93bi1tZW51IGxhYmVsPSJTbGljZSBieSIgY2xhc3M9InRocmVzaG9sZC1kcm9wZG93biI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFwZXItbGlzdGJveCBzbG90PSJkcm9wZG93bi1jb250ZW50IiBzZWxlY3RlZD0ie3tzZWxlY3RlZEJyZWFrZG93bkZlYXR1cmV9fSIgYXR0ci1mb3Itc2VsZWN0ZWQ9Im5hbWUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW2dldEZlYXR1cmVMaXN0XyhzdGF0cyldXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcGVyLWl0ZW0gbmFtZT0iW1tpdGVtXV0iPltbZ2V0RmVhdHVyZU5hbWVfKGl0ZW0pXV08L3BhcGVyLWl0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLWxpc3Rib3g+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXBlci1kcm9wZG93bi1tZW51PgogICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWxwLXRpdGxlIGhlbHAtdGl0bGUtbWFyZ2luIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCBkb2VzIHNsaWNpbmcgZG8/CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImhlbHAtdGV4dCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2hvd3MgcGVyZm9ybWFuY2UgZm9yIGVhY2ggdmFsdWUgb2YgdGhlIHNlbGVjdGVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVhdHVyZS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXgiPgogICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tzaG91bGRTaG93U2Vjb25kRmVhdHVyZURyb3Bkb3duXyhzZWxlY3RlZEJyZWFrZG93bkZlYXR1cmUpXV0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcGVyLWRyb3Bkb3duLW1lbnUgbGFiZWw9IlNsaWNlIGJ5IChzZWNvbmRhcnkpIiBjbGFzcz0idGhyZXNob2xkLWRyb3Bkb3duIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcGVyLWxpc3Rib3ggc2xvdD0iZHJvcGRvd24tY29udGVudCIgc2VsZWN0ZWQ9Int7c2VsZWN0ZWRTZWNvbmRCcmVha2Rvd25GZWF0dXJlfX0iIGF0dHItZm9yLXNlbGVjdGVkPSJuYW1lIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW2dldEZlYXR1cmVMaXN0XyhzdGF0cyldXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFwZXItaXRlbSBuYW1lPSJbW2l0ZW1dXSI+W1tnZXRGZWF0dXJlTmFtZV8oaXRlbSldXTwvcGFwZXItaXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLWxpc3Rib3g+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLWRyb3Bkb3duLW1lbnU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICAgIDwvaXJvbi1jb2xsYXBzZT4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2lzQmluYXJ5Q2xhc3NpZmljYXRpb25fKG1vZGVsVHlwZSwgbXVsdGlDbGFzcyldXSI+CiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImhlYWRpbmctYW5kLWNhcmQiPgogICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImluZmVyZW5jZS1oZWFkZXIgaGVhZGluZyIgb24tdGFwPSJ0b2dnbGVFeHBsb3JlclNldHVwIj4KICAgICAgICAgICAgICAgICAgICAgIEZhaXJuZXNzCiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJyaWdodC1zaWRlIHJpZ2h0LXNpZGUtcGVyZm9ybWFuY2UtdGFiIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGlyb24taWNvbiBpY29uPSJbW2dldEV4cGFuZENvbGxhcHNlSWNvbihvcGVuZWRFeHBsb3JlcildXSIgY2xhc3M9ImV4cGFuZC1jb2xsYXBzZS1idXR0b24iPjwvaXJvbi1pY29uPgogICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgPGlyb24tY29sbGFwc2UgY2xhc3M9ImNhcmQiIGlkPSJjb2xsYXBzZWV4cGxvcmVyIiBvcGVuZWQ9Int7b3BlbmVkRXhwbG9yZXJ9fSI+CiAgICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Iltbc2hvdWxkU2hvd0ZlYXR1cmVEcm9wZG93bl8oc3RhdHMpXV0iPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb250cm9sLWluZm8taGVhZGVyIGhlbHAtdGl0bGUtbWFyZ2luLWJ1dHRvbiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgQXBwbHkgYW4gb3B0aW1pemF0aW9uIHN0cmF0ZWd5CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb250cm9sLWluZm8tdGV4dCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgU2VsZWN0IGEgc3RyYXRlZ3kgdG8gc2V0IGNsYXNzaWZpY2F0aW9uIHRocmVzaG9sZHMKICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlZCBvbiB0aGUgc2V0IGNvc3QgcmF0aW8gYW5kIGRhdGEgc2xpY2VzLiBNYW51YWxseQogICAgICAgICAgICAgICAgICAgICAgICAgIGFsdGVyaW5nIHRocmVzaG9sZHMgb3IgY2hhbmdpbmcgY29zdCByYXRpbyB3aWxsCiAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdCBiYWNrIHRvIGN1c3RvbSB0aHJlc2hvbGRzLgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPHBhcGVyLXJhZGlvLWdyb3VwIGNsYXNzPSJvcHRpbWl6YXRpb24tcmFkaW8tZ3JvdXAiIHNlbGVjdGVkPSJ7e29wdGltaXphdGlvblNlbGVjdGVkfX0iPgogICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXBlci1yYWRpby1idXR0b24gbmFtZT0iY3VzdG9tIiBjbGFzcz0ib3B0aW1pemF0aW9uLXJhZGlvIiBpZD0iY3VzdG9tdGhyZXNoIj5DdXN0b20gdGhyZXNob2xkcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcGVyLWljb24tYnV0dG9uIGljb249ImluZm8tb3V0bGluZSIgY2xhc3M9ImluZm8taWNvbiB0aHJlc2gtaW5mby1pY29uIG5vLXBhZGRpbmciIG9uLXRhcD0ib3BlbkRpYWxvZyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLWljb24tYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcGVyLWRpYWxvZyBjbGFzcz0iZGlhbG9nLXRleHQiIGhvcml6b250YWwtYWxpZ249ImF1dG8iIHZlcnRpY2FsLWFsaWduPSJib3R0b20iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJkaWFsb2ctdGl0bGUiPkN1c3RvbSB0aHJlc2hvbGRzPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2V0IHlvdXIgb3duIHRocmVzaG9sZHMgdXNpbmcgdGhlIHRocmVzaG9sZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsaWRlcnMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXBlci1kaWFsb2c+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXBlci1yYWRpby1idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbiBuYW1lPSJ1bmF3YXJlIiBjbGFzcz0ib3B0aW1pemF0aW9uLXJhZGlvIj5TaW5nbGUgdGhyZXNob2xkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24gaWNvbj0iaW5mby1vdXRsaW5lIiBjbGFzcz0iaW5mby1pY29uIHRocmVzaC1pbmZvLWljb24gbm8tcGFkZGluZyIgb24tdGFwPSJvcGVuRGlhbG9nIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFwZXItZGlhbG9nIGNsYXNzPSJkaWFsb2ctdGV4dCIgaG9yaXpvbnRhbC1hbGlnbj0iYXV0byIgdmVydGljYWwtYWxpZ249ImJvdHRvbSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRpYWxvZy10aXRsZSI+U2luZ2xlIHRocmVzaG9sZDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wdGltaXplIGEgc2luZ2xlIHRocmVzaG9sZCBmb3IgYWxsIGRhdGFwb2ludHMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlZCBvbiB0aGUgc3BlY2lmaWVkIGNvc3QgcmF0aW8uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXBlci1kaWFsb2c+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXBlci1yYWRpby1idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbiBuYW1lPSJkZW1vcGFyaXR5IiBjbGFzcz0ib3B0aW1pemF0aW9uLXJhZGlvIiBkaXNhYmxlZCQ9IltbIXNob3VsZFNob3dGZWF0dXJlUHJDaGFydHNfKHNlbGVjdGVkTGFiZWxGZWF0dXJlLCBzZWxlY3RlZEJyZWFrZG93bkZlYXR1cmUsIGluZmVyZW5jZXMpXV0iPkRlbW9ncmFwaGljIHBhcml0eQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcGVyLWljb24tYnV0dG9uIGljb249ImluZm8tb3V0bGluZSIgY2xhc3M9ImluZm8taWNvbiB0aHJlc2gtaW5mby1pY29uIG5vLXBhZGRpbmciIG9uLXRhcD0ib3BlbkRpYWxvZyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLWljb24tYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcGVyLWRpYWxvZyBjbGFzcz0iZGlhbG9nLXRleHQiIGhvcml6b250YWwtYWxpZ249ImF1dG8iIHZlcnRpY2FsLWFsaWduPSJib3R0b20iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJkaWFsb2ctdGl0bGUiPkRlbW9ncmFwaGljIHBhcml0eTwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wdGltaXplIGEgdGhyZXNob2xkIHBlciBzbGljZSBiYXNlZCBvbiB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZWQgY29zdCByYXRpbywgZW5zdXJpbmcgdGhlIGRpZmZlcmVudAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsaWNlcyBhY2hpZXZlIGRlbW9ncmFwaGljIHBhcnR5LgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZW1vZ3JhcGhpYyBwYXJpdHkgbWVhbnMgdGhhdCBzaW1pbGFyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVyY2VudGFnZXMgb2YgZGF0YXBvaW50cyBmcm9tIGVhY2ggc2xpY2UgYXJlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZGljdGVkIGFzIHBvc2l0aXZlIGNsYXNzaWZpY2F0aW9ucy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLWRpYWxvZz4KICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLXJhZGlvLWJ1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFwZXItcmFkaW8tYnV0dG9uIG5hbWU9ImVxdWFsb3BwIiBjbGFzcz0ib3B0aW1pemF0aW9uLXJhZGlvIiBkaXNhYmxlZCQ9IltbIXNob3VsZFNob3dGZWF0dXJlUHJDaGFydHNfKHNlbGVjdGVkTGFiZWxGZWF0dXJlLCBzZWxlY3RlZEJyZWFrZG93bkZlYXR1cmUsIGluZmVyZW5jZXMpXV0iPkVxdWFsIG9wcG9ydHVuaXR5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24gaWNvbj0iaW5mby1vdXRsaW5lIiBjbGFzcz0iaW5mby1pY29uIHRocmVzaC1pbmZvLWljb24gbm8tcGFkZGluZyIgb24tdGFwPSJvcGVuRGlhbG9nIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFwZXItZGlhbG9nIGNsYXNzPSJkaWFsb2ctdGV4dCIgaG9yaXpvbnRhbC1hbGlnbj0iYXV0byIgdmVydGljYWwtYWxpZ249ImJvdHRvbSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRpYWxvZy10aXRsZSI+RXF1YWwgb3Bwb3J0dW5pdHk8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcHRpbWl6ZSBhIHRocmVzaG9sZCBwZXIgc2xpY2UgYmFzZWQgb24gdGhlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWVkIGNvc3QgcmF0aW8sIGVuc3VyaW5nIHRoZSBkaWZmZXJlbnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGljZXMgYWNoaWV2ZSBlcXVhbCBvcHBvcnR1bml0eS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXF1YWwgb3Bwb3J0dW5pdHkgbWVhbnMgdGhhdCBhbW9uZyB0aG9zZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWRpY3RlZCBhcyBwb3NpdGl2ZSBjbGFzc2lmaWNhdGlvbnMsIHRoZXJlIGlzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSBzaW1pbGFyIHBlcmNlbnRhZ2Ugb2YgY29ycmVjdCBwcmVkaWN0aW9ucyBpbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVhY2ggc2xpY2UuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXBlci1kaWFsb2c+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXBlci1yYWRpby1idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbiBuYW1lPSJlcXVhbGFjYyIgY2xhc3M9Im9wdGltaXphdGlvbi1yYWRpbyIgZGlzYWJsZWQkPSJbWyFzaG91bGRTaG93RmVhdHVyZVByQ2hhcnRzXyhzZWxlY3RlZExhYmVsRmVhdHVyZSwgc2VsZWN0ZWRCcmVha2Rvd25GZWF0dXJlLCBpbmZlcmVuY2VzKV1dIj5FcXVhbCBhY2N1cmFjeQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcGVyLWljb24tYnV0dG9uIGljb249ImluZm8tb3V0bGluZSIgY2xhc3M9ImluZm8taWNvbiB0aHJlc2gtaW5mby1pY29uIG5vLXBhZGRpbmciIG9uLXRhcD0ib3BlbkRpYWxvZyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLWljb24tYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcGVyLWRpYWxvZyBjbGFzcz0iZGlhbG9nLXRleHQiIGhvcml6b250YWwtYWxpZ249ImF1dG8iIHZlcnRpY2FsLWFsaWduPSJib3R0b20iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJkaWFsb2ctdGl0bGUiPkVxdWFsIGFjY3VyYWN5PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3B0aW1pemUgYSB0aHJlc2hvbGQgcGVyIHNsaWNlIGJhc2VkIG9uIHRoZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmllZCBjb3N0IHJhdGlvLCBlbnN1cmluZyB0aGUgZGlmZmVyZW50CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xpY2VzIGFjaGlldmUgZXF1YWwgYWNjdXJhY3kuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVxdWFsIGFjY3VyYWN5IG1lYW5zIHRoYXQgdGhlcmUgaXMgYSBzaW1pbGFyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVyY2VudGFnZSBvZiBjb3JyZWN0IHByZWRpY3Rpb25zIGluIGVhY2ggc2xpY2UuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXBlci1kaWFsb2c+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXBlci1yYWRpby1idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbiBuYW1lPSJncm91cCIgY2xhc3M9Im9wdGltaXphdGlvbi1yYWRpbyIgZGlzYWJsZWQkPSJbWyFzaG91bGRTaG93RmVhdHVyZVByQ2hhcnRzXyhzZWxlY3RlZExhYmVsRmVhdHVyZSwgc2VsZWN0ZWRCcmVha2Rvd25GZWF0dXJlLCBpbmZlcmVuY2VzKV1dIj5Hcm91cCB0aHJlc2hvbGRzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24gaWNvbj0iaW5mby1vdXRsaW5lIiBjbGFzcz0iaW5mby1pY29uIHRocmVzaC1pbmZvLWljb24gbm8tcGFkZGluZyIgb24tdGFwPSJvcGVuRGlhbG9nIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFwZXItZGlhbG9nIGNsYXNzPSJkaWFsb2ctdGV4dCIgaG9yaXpvbnRhbC1hbGlnbj0iYXV0byIgdmVydGljYWwtYWxpZ249ImJvdHRvbSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRpYWxvZy10aXRsZSI+R3JvdXAgdGhyZXNob2xkczwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wdGltaXplIGEgc2VwYXJhdGUgdGhyZXNob2xkIGZvciBlYWNoIHNsaWNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZWQgb24gdGhlIHNwZWNpZmllZCBjb3N0IHJhdGlvLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFwZXItZGlhbG9nPgogICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFwZXItcmFkaW8tYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLXJhZGlvLWdyb3VwPgogICAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgICAgICA8L2lyb24tY29sbGFwc2U+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb25maWctbWFpbi1jb250ZW50Ij4KICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tpc0JpbmFyeUNsYXNzaWZpY2F0aW9uXyhtb2RlbFR5cGUsIG11bHRpQ2xhc3MpXV0iIHJlc3RhbXA+CiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBlcmYtdGFibGUtdGl0bGUtcm93Ij4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4Ij4KICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBlcmYtdGFibGUtdGl0bGUiPgogICAgICAgICAgICAgICAgICAgICAgICBbW2dldFBlcmZUYWJsZVRpdGxlKHNlbGVjdGVkQnJlYWtkb3duRmVhdHVyZSwKICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRTZWNvbmRCcmVha2Rvd25GZWF0dXJlLCBvcHRpbWl6YXRpb25TZWxlY3RlZCwKICAgICAgICAgICAgICAgICAgICAgICAgZmVhdHVyZVZhbHVlVGhyZXNob2xkcyldXQogICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24gaWNvbj0iaW5mby1vdXRsaW5lIiBjbGFzcz0iaW5mby1pY29uIHBlcmZvcm1hbmNlLWluZm8taWNvbiBuby1wYWRkaW5nIiBvbi10YXA9Im9wZW5EaWFsb2ciPgogICAgICAgICAgICAgICAgICAgICAgPC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgIDxwYXBlci1kaWFsb2cgY2xhc3M9ImRpYWxvZy10ZXh0IiBob3Jpem9udGFsLWFsaWduPSJhdXRvIiB2ZXJ0aWNhbC1hbGlnbj0iYXV0byI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRpYWxvZy10aXRsZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgQ2xhc3NpZmljYXRpb24gUGVyZm9ybWFuY2UgVGFibGUKICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgU2V0IHRoZSBncm91bmQgdHJ1dGggZmVhdHVyZSB0byBleHBsb3JlIG1vZGVsCiAgICAgICAgICAgICAgICAgICAgICAgICAgcGVyZm9ybWFuY2UgaW5jbHVkaW5nIFJPQyBjdXJ2ZXMgYW5kIGNvbmZ1c2lvbgogICAgICAgICAgICAgICAgICAgICAgICAgIG1hdHJpY2VzLgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICBTbGljZSB0aGUgZGF0YXNldCBieSBmZWF0dXJlcyBhbmQgZXhwbG9yZSBtb2RlbAogICAgICAgICAgICAgICAgICAgICAgICAgIHBlcmZvcm1hbmNlIGJ5IHNsaWNlLgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICBVc2UgdGhlIGZhaXJuZXNzIG9wdGltaXphdGlvbiBzdHJhdGVnaWVzIGFuZCBzZWUgdGhlCiAgICAgICAgICAgICAgICAgICAgICAgICAgaW1wYWN0IG9uIHRoZSB0aHJlc2hvbGRzIGFuZCBwZXJmb3JtYW5jZSBvZiB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRpdmlkdWFsIHNsaWNlcy4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLWRpYWxvZz4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmLXNvcnQtYm94Ij4KICAgICAgICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXBlci1pY29uLWJ1dHRvbiBpY29uPSJ1bmZvbGQtbW9yZSIgY2xhc3M9InBlcmYtYnV0dG9uIiBvbi10YXA9ImV4cGFuZEFsbFBlcmZvcm1hbmNlIiBhbHQ9ImV4cGFuZCBhbGwgc2xpY2VzIiB0aXRsZT0iRXhwYW5kIGFsbCBzbGljZXMiPgogICAgICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLWljb24tYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24gaWNvbj0idW5mb2xkLWxlc3MiIGNsYXNzPSJwZXJmLWJ1dHRvbiIgb24tdGFwPSJjb2xsYXBzZUFsbFBlcmZvcm1hbmNlIiBhbHQ9ImNvbGxhcHNlIGFsbCBzbGljZXMiIHRpdGxlPSJDb2xsYXBzZSBhbGwgc2xpY2VzIj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgPHBhcGVyLWRyb3Bkb3duLW1lbnUgbGFiZWw9IlNvcnQgYnkiIGNsYXNzPSJ0aHJlc2hvbGQtZHJvcGRvd24gcGVyZi10YWJsZS1zb3J0LW1lbnUiPgogICAgICAgICAgICAgICAgICAgICAgICA8cGFwZXItbGlzdGJveCBzbG90PSJkcm9wZG93bi1jb250ZW50IiBzZWxlY3RlZD0ie3tzZWxlY3RlZEZlYXR1cmVTb3J0fX0iIGF0dHItZm9yLXNlbGVjdGVkPSJuYW1lIj4KICAgICAgICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW2dldEZlYXR1cmVTb3J0QnkobW9kZWxUeXBlLCBtdWx0aUNsYXNzKV1dIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXBlci1pdGVtIG5hbWU9IltbaXRlbV1dIj5bW2l0ZW1dXTwvcGFwZXItaXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLWxpc3Rib3g+CiAgICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLWRyb3Bkb3duLW1lbnU+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmLXRhYmxlLWhlYWRlciI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGVyZi10YWJsZS1hcnJvdyI+CiAgICAgICAgICAgICAgICAgICAgICA8aXJvbi1pY29uIGNsYXNzPSJleHBhbmQtY29sbGFwc2UtYnV0dG9uIj48L2lyb24taWNvbj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmLXRhYmxlLXZhbCI+RmVhdHVyZSBWYWx1ZTwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBlcmYtdGFibGUtY291bnQiPkNvdW50PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcyQ9IltbZ2V0UGVyZlRhYmxlTW9kZWxDbGFzcyhudW1Nb2RlbHMpXV0iPgogICAgICAgICAgICAgICAgICAgICAgTW9kZWwKICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmLXRhYmxlLXRocmVzaG9sZCBmbGV4Ij4KICAgICAgICAgICAgICAgICAgICAgIDxkaXY+VGhyZXNob2xkPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aHJlc2hvbGQtaW5mby1ob2xkZXIiPgogICAgICAgICAgICAgICAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24gaWNvbj0iaW5mby1vdXRsaW5lIiBjbGFzcz0iaW5mby1pY29uIHRocmVzaG9sZC1pbmZvLWljb24gbm8tcGFkZGluZyIgb24tdGFwPSJvcGVuRGlhbG9nIj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgPHBhcGVyLWRpYWxvZyBjbGFzcz0iZGlhbG9nLXRleHQiIGhvcml6b250YWwtYWxpZ249ImF1dG8iIHZlcnRpY2FsLWFsaWduPSJhdXRvIj4KICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJkaWFsb2ctdGl0bGUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgRXhwbG9yaW5nIENsYXNzaWZpY2F0aW9uIFBlcmZvcm1hbmNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZSB0aGlzIHNsaWRlciB0byBhZGp1c3QgdGhlIGNsYXNzaWZpY2F0aW9uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJlc2hvbGQgZm9yIHRoaXMgc2xpY2UuIEluZmVyZW5jZSB2YWx1ZXMgYXQgb3IKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFib3ZlIHRoaXMgdGhyZXNob2xkIGFyZSBjb25zaWRlcmVkIGEgcG9zaXRpdmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzaWZpY2F0aW9uLCB3aGlsZSBpbmZlcmVuY2UgdmFsdWVzIGJlbG93IHRoaXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocmVzaG9sZCBhcmUgY29uc2lkZXJlZCBhIG5lZ2F0aXZlIGNsYXNzaWZpY2F0aW9uLgogICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLWRpYWxvZz4KICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBlcmYtdGFibGUtZnAiPkZhbHNlIFBvc2l0aXZlcyAoJSk8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmLXRhYmxlLWZuIj5GYWxzZSBOZWdhdGl2ZXMgKCUpPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGVyZi10YWJsZS1hY2MiPkFjY3VyYWN5ICglKTwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBlcmYtdGFibGUtZjEiPkYxPC9kaXY+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmLXRhYmxlLWVudHJpZXMtaG9sZGVyIj4KICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW2ZlYXR1cmVWYWx1ZVRocmVzaG9sZHNdXSIgYXM9ImZlYXR1cmVWYWx1ZVRocmVzaG9sZCI+CiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmLXRhYmxlLWVudHJ5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcyQ9IltbZ2V0UGVyZlRhYmxlUm93Q2xhc3MoZmVhdHVyZVZhbHVlVGhyZXNob2xkLm9wZW5lZCldXSIgZGF0YS1pbmRleCQ9IltbaW5kZXhdXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGVyZi10YWJsZS1hcnJvdyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24gY2xhc3MkPSJbW2dldEV4cGFuZENvbGxhcHNlUGVyZkljb25DbGFzcyhmZWF0dXJlVmFsdWVUaHJlc2hvbGQub3BlbmVkKV1dIiBpY29uPSJhcnJvdy1kcm9wLWRvd24iIG9uLXRhcD0idG9nZ2xlUGVyZlJvdyI+PC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmLXRhYmxlLXZhbCBwZXJmLXRhYmxlLWNsaWNrYWJsZSBwZXJmLXRhYmxlLXRleHQtZW50cnkiIG9uLXRhcD0idG9nZ2xlUGVyZlJvdyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbW2dldFByaW50YWJsZVZhbHVlXyhmZWF0dXJlVmFsdWVUaHJlc2hvbGQpXV0KICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmLXRhYmxlLWNvdW50IHBlcmYtdGFibGUtY2xpY2thYmxlIHBlcmYtdGFibGUtbnVtLWVudHJ5IiBvbi10YXA9InRvZ2dsZVBlcmZSb3ciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgW1tnZXRGZWF0dXJlVmFsdWVDb3VudChpbmZlcmVuY2VTdGF0c18sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZWF0dXJlVmFsdWVUaHJlc2hvbGQudGhyZXNob2xkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVhdHVyZVZhbHVlVGhyZXNob2xkKV1dCiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcyQ9IltbZ2V0UGVyZlRhYmxlTW9kZWxDbGFzcyhudW1Nb2RlbHMpXV0iIG9uLXRhcD0idG9nZ2xlUGVyZlJvdyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJ7e2ZlYXR1cmVWYWx1ZVRocmVzaG9sZC50aHJlc2hvbGR9fSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBlcmYtdGFibGUtdGV4dC1lbnRyeSBwZXJmLXRhYmxlLWNsaWNrYWJsZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1tnZXRNb2RlbE5hbWVfKGluZGV4KV1dCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmLXRhYmxlLXRocmVzaG9sZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJ7e2ZlYXR1cmVWYWx1ZVRocmVzaG9sZC50aHJlc2hvbGR9fSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXBlci1zbGlkZXIgY2xhc3MkPSJbW2dldFNsaWRlckNsYXNzKGluZGV4KV1dIiBlZGl0YWJsZT0idHJ1ZSIgbWluPSIwIiBtYXg9IjEiIHN0ZXA9IjAuMDEiIGltbWVkaWF0ZS12YWx1ZT0ie3tpdGVtLnRocmVzaG9sZH19IiB2YWx1ZT0iW1tpdGVtLnRocmVzaG9sZF1dIiBvbi12YWx1ZS1jaGFuZ2VkPSJyZWZyZXNoSW5mZXJlbmNlc05vUmVnZW5fIiBvbi1pbW1lZGlhdGUtdmFsdWUtY2hhbmdlZD0icmVmcmVzaEluZmVyZW5jZXNOb1JlZ2VuXyIgb24tZG93bj0icmVzZXRPcHRpbWl6YXRpb25TZWxlY3RlZF8iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLXNsaWRlcj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGVyZi10YWJsZS1mcCBwZXJmLXRhYmxlLWNsaWNrYWJsZSIgb24tdGFwPSJ0b2dnbGVQZXJmUm93Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9Int7ZmVhdHVyZVZhbHVlVGhyZXNob2xkLnRocmVzaG9sZH19Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGVyZi10YWJsZS1udW0tZW50cnkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtbZ2V0RlBNb2RlbEluZGV4KGluZmVyZW5jZVN0YXRzXywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZWF0dXJlVmFsdWVUaHJlc2hvbGQudGhyZXNob2xkLCBpbmRleCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZWF0dXJlVmFsdWVUaHJlc2hvbGQpXV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBlcmYtdGFibGUtZm4gcGVyZi10YWJsZS1jbGlja2FibGUiIG9uLXRhcD0idG9nZ2xlUGVyZlJvdyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJ7e2ZlYXR1cmVWYWx1ZVRocmVzaG9sZC50aHJlc2hvbGR9fSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBlcmYtdGFibGUtbnVtLWVudHJ5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbW2dldEZOTW9kZWxJbmRleChpbmZlcmVuY2VTdGF0c18sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVhdHVyZVZhbHVlVGhyZXNob2xkLnRocmVzaG9sZCwgaW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVhdHVyZVZhbHVlVGhyZXNob2xkKV1dCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmLXRhYmxlLWFjYyBwZXJmLXRhYmxlLWNsaWNrYWJsZSIgb24tdGFwPSJ0b2dnbGVQZXJmUm93Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9Int7ZmVhdHVyZVZhbHVlVGhyZXNob2xkLnRocmVzaG9sZH19Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGVyZi10YWJsZS1udW0tZW50cnkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtbZ2V0QWNjdXJhY3lNb2RlbEluZGV4KGluZmVyZW5jZVN0YXRzXywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZWF0dXJlVmFsdWVUaHJlc2hvbGQudGhyZXNob2xkLCBpbmRleCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZWF0dXJlVmFsdWVUaHJlc2hvbGQpXV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBlcmYtdGFibGUtZjEgcGVyZi10YWJsZS1jbGlja2FibGUiIG9uLXRhcD0idG9nZ2xlUGVyZlJvdyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJ7e2ZlYXR1cmVWYWx1ZVRocmVzaG9sZC50aHJlc2hvbGR9fSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBlcmYtdGFibGUtbnVtLWVudHJ5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbW2dldEYxTW9kZWxJbmRleChpbmZlcmVuY2VTdGF0c18sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVhdHVyZVZhbHVlVGhyZXNob2xkLnRocmVzaG9sZCwgaW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVhdHVyZVZhbHVlVGhyZXNob2xkKV1dCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgIDxpcm9uLWNvbGxhcHNlIG9wZW5lZD0ie3tmZWF0dXJlVmFsdWVUaHJlc2hvbGQub3BlbmVkfX0iPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmLXRhYmxlLWVudHJ5LWV4cGFuZGVkIGZsZXgtcm93LXJldmVyc2UiPgogICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tzaG91bGRTaG93RmVhdHVyZVByQ2hhcnRzXyhzZWxlY3RlZExhYmVsRmVhdHVyZSwgc2VsZWN0ZWRCcmVha2Rvd25GZWF0dXJlLCBpbmZlcmVuY2VzKV1dIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbmYtbWF0cml4LWhvbGRlciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbmYtdGV4dCI+Q29uZnVzaW9uIG1hdHJpeDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJ7e2ZlYXR1cmVWYWx1ZVRocmVzaG9sZC50aHJlc2hvbGR9fSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRmLWNvbmZ1c2lvbi1tYXRyaXggY291bnRzPSJbW2dldENvbmZ1c2lvbkNvdW50c01vZGVsSW5kZXgoaW5mZXJlbmNlU3RhdHNfLCBmZWF0dXJlVmFsdWVUaHJlc2hvbGQudGhyZXNob2xkLCBpbmRleCwgZmVhdHVyZVZhbHVlVGhyZXNob2xkKV1dIiBsYWJlbD0iW1tnZXRDb25mdXNpb25NYXRyaXhMYWJlbChpbmRleCwgbnVtTW9kZWxzKV1dIiBiYWNrZ3JvdW5kPSJbW2dldENvbmZ1c2lvbk1hdHJpeENvbG9yKGluZGV4KV1dIiBhbGwtaXRlbXM9IltbYWxsQ29uZk1hdHJpeExhYmVsc11dIiBjbGFzcz0iY29uZi1tYXRyaXgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGYtY29uZnVzaW9uLW1hdHJpeD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY3VydmVzLWhvbGRlciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImN1cnZlLWhvbGRlciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icm9jLXRleHQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUk9DIGN1cnZlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24gaWNvbj0iaW5mby1vdXRsaW5lIiBjbGFzcz0iaW5mby1pY29uIHRocmVzaG9sZC1pbmZvLWljb24gbm8tcGFkZGluZyIgb24tdGFwPSJvcGVuRGlhbG9nIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFwZXItZGlhbG9nIGNsYXNzPSJkaWFsb2ctdGV4dCIgaG9yaXpvbnRhbC1hbGlnbj0icmlnaHQiIHZlcnRpY2FsLWFsaWduPSJib3R0b20iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJkaWFsb2ctdGl0bGUiPlJPQyBjdXJ2ZTwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEEgcmVjZWl2ZXIgb3BlcmF0aW5nIGNoYXJhY3RlcmlzdGljIChST0MpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VydmUgcGxvdHMgdGhlIHRydWUgcG9zaXRpdmUgcmF0ZSAoVFBSKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFnYWluc3QgdGhlIGZhbHNlIHBvc2l0aXZlIHJhdGUgKEZQUikgYXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpb3VzIGNsYXNzaWZpY2F0aW9uIHRocmVzaG9sZHMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXBlci1kaWFsb2c+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icm9jLXgtbGFiZWwiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmFsc2UgcG9zaXRpdmUgcmF0ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InJvYy15LWxhYmVsIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRydWUgcG9zaXRpdmUgcmF0ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2ei1saW5lLWNoYXJ0MiBpZD0iW1tnZXRSb2NDaGFydElkKGluZGV4KV1dIiBjbGFzcz0icHItbGluZS1jaGFydCIgeC1heGlzLWZvcm1hdHRlcj0iW1tnZXRTaW1wbGVBeGlzRm9ybWF0dGVyKGF4aXNQcmVjaXNpb24pXV0iIHktYXhpcy1mb3JtYXR0ZXI9IltbZ2V0U2ltcGxlQXhpc0Zvcm1hdHRlcihheGlzUHJlY2lzaW9uKV1dIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Z6LWxpbmUtY2hhcnQyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY3VydmUtaG9sZGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJyb2MtdGV4dCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUiBjdXJ2ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcGVyLWljb24tYnV0dG9uIGljb249ImluZm8tb3V0bGluZSIgY2xhc3M9ImluZm8taWNvbiB0aHJlc2hvbGQtaW5mby1pY29uIG5vLXBhZGRpbmciIG9uLXRhcD0ib3BlbkRpYWxvZyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLWljb24tYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcGVyLWRpYWxvZyBjbGFzcz0iZGlhbG9nLXRleHQiIGhvcml6b250YWwtYWxpZ249InJpZ2h0IiB2ZXJ0aWNhbC1hbGlnbj0iYm90dG9tIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZGlhbG9nLXRpdGxlIj5QUiBjdXJ2ZTwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEEgcHJlY2lzaW9uLXJlY2FsbCAoUFIpIGN1cnZlIHBsb3RzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlY2lzaW9uIGFnYWluc3QgcmVjYWxsIGF0IHZhcmlvdXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc2lmaWNhdGlvbiB0aHJlc2hvbGRzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFwZXItZGlhbG9nPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InByLXgtbGFiZWwiPlJlY2FsbDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InByLXktbGFiZWwiPlByZWNpc2lvbjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2ei1saW5lLWNoYXJ0MiBpZD0iW1tnZXRQckNoYXJ0SWQoaW5kZXgpXV0iIGNsYXNzPSJwci1saW5lLWNoYXJ0IiB4LWF4aXMtZm9ybWF0dGVyPSJbW2dldFNpbXBsZUF4aXNGb3JtYXR0ZXIoYXhpc1ByZWNpc2lvbildXSIgeS1heGlzLWZvcm1hdHRlcj0iW1tnZXRTaW1wbGVBeGlzRm9ybWF0dGVyKGF4aXNQcmVjaXNpb24pXV0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdnotbGluZS1jaGFydDI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICA8L2lyb24tY29sbGFwc2U+CiAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Iltbc2hvdWxkU2hvd092ZXJhbGxUaHJlc2hvbGRlcl8oc2VsZWN0ZWRCcmVha2Rvd25GZWF0dXJlKV1dIj4KICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBlcmYtdGFibGUtZW50cnkiPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmLXRhYmxlLXJvdy1leHBhbmRlZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGVyZi10YWJsZS1hcnJvdyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24gaWNvbj0iYXJyb3ctZHJvcC1kb3duIiBvbi10YXA9InRvZ2dsZVBlcmZSb3ciIGRpc2FibGVkPjwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGVyZi10YWJsZS12YWwgcGVyZi10YWJsZS10ZXh0LWVudHJ5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFsbCBkYXRhcG9pbnRzCiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGVyZi10YWJsZS1jb3VudCBwZXJmLXRhYmxlLW51bS1lbnRyeSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbW2dldEZlYXR1cmVWYWx1ZUNvdW50KGluZmVyZW5jZVN0YXRzXywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJhbGxUaHJlc2hvbGRzKV1dCiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcyQ9IltbZ2V0UGVyZlRhYmxlTW9kZWxDbGFzcyhudW1Nb2RlbHMpXV0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0ie3tvdmVyYWxsVGhyZXNob2xkc319Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGVyZi10YWJsZS10ZXh0LWVudHJ5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbW2dldE1vZGVsTmFtZV8oaW5kZXgpXV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBlcmYtdGFibGUtdGhyZXNob2xkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9Int7b3ZlcmFsbFRocmVzaG9sZHN9fSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXBlci1zbGlkZXIgY2xhc3MkPSJbW2dldFNsaWRlckNsYXNzKGluZGV4KV1dIiBlZGl0YWJsZT0idHJ1ZSIgbWluPSIwIiBtYXg9IjEiIHN0ZXA9IjAuMDEiIGltbWVkaWF0ZS12YWx1ZT0ie3tpdGVtLnRocmVzaG9sZH19IiB2YWx1ZT0iW1tpdGVtLnRocmVzaG9sZF1dIiBvbi12YWx1ZS1jaGFuZ2VkPSJyZWZyZXNoSW5mZXJlbmNlc05vUmVnZW5fIiBvbi1pbW1lZGlhdGUtdmFsdWUtY2hhbmdlZD0icmVmcmVzaEluZmVyZW5jZXNOb1JlZ2VuXyIgb24tZG93bj0icmVzZXRPcHRpbWl6YXRpb25TZWxlY3RlZF8iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLXNsaWRlcj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGVyZi10YWJsZS1mcCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJ7e292ZXJhbGxUaHJlc2hvbGRzfX0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmLXRhYmxlLW51bS1lbnRyeSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1tnZXRGUE1vZGVsSW5kZXgoaW5mZXJlbmNlU3RhdHNfLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJhbGxUaHJlc2hvbGRzLCBpbmRleCldXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGVyZi10YWJsZS1mbiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJ7e292ZXJhbGxUaHJlc2hvbGRzfX0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmLXRhYmxlLW51bS1lbnRyeSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1tnZXRGTk1vZGVsSW5kZXgoaW5mZXJlbmNlU3RhdHNfLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJhbGxUaHJlc2hvbGRzLCBpbmRleCldXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGVyZi10YWJsZS1hY2MiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0ie3tvdmVyYWxsVGhyZXNob2xkc319Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGVyZi10YWJsZS1udW0tZW50cnkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtbZ2V0QWNjdXJhY3lNb2RlbEluZGV4KGluZmVyZW5jZVN0YXRzXywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdmVyYWxsVGhyZXNob2xkcywgaW5kZXgpXV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBlcmYtdGFibGUtZjEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0ie3tvdmVyYWxsVGhyZXNob2xkc319Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGVyZi10YWJsZS1udW0tZW50cnkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtbZ2V0RjFNb2RlbEluZGV4KGluZmVyZW5jZVN0YXRzXywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdmVyYWxsVGhyZXNob2xkcywgaW5kZXgpXV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGVyZi10YWJsZS1lbnRyeS1leHBhbmRlZCBmbGV4LXJvdy1yZXZlcnNlIj4KICAgICAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW3Nob3VsZFNob3dPdmVyYWxsUHJDaGFydF8oc2VsZWN0ZWRMYWJlbEZlYXR1cmUsIHNlbGVjdGVkQnJlYWtkb3duRmVhdHVyZSwgaW5mZXJlbmNlcyldXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29uZi1tYXRyaXgtaG9sZGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbmYtdGV4dCI+Q29uZnVzaW9uIG1hdHJpeDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0ie3tvdmVyYWxsVGhyZXNob2xkc319Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRmLWNvbmZ1c2lvbi1tYXRyaXggY291bnRzPSJbW2dldENvbmZ1c2lvbkNvdW50c01vZGVsSW5kZXgoaW5mZXJlbmNlU3RhdHNfLCBvdmVyYWxsVGhyZXNob2xkcywgaW5kZXgpXV0iIGxhYmVsPSJbW2dldENvbmZ1c2lvbk1hdHJpeExhYmVsKGluZGV4LCBudW1Nb2RlbHMpXV0iIGJhY2tncm91bmQ9IltbZ2V0Q29uZnVzaW9uTWF0cml4Q29sb3IoaW5kZXgpXV0iIGFsbC1pdGVtcz0iW1thbGxDb25mTWF0cml4TGFiZWxzXV0iIGNsYXNzPSJjb25mLW1hdHJpeCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGYtY29uZnVzaW9uLW1hdHJpeD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY3VydmVzLWhvbGRlciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjdXJ2ZS1ob2xkZXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJyb2MtdGV4dCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUk9DIGN1cnZlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcGVyLWljb24tYnV0dG9uIGljb249ImluZm8tb3V0bGluZSIgY2xhc3M9ImluZm8taWNvbiB0aHJlc2hvbGQtaW5mby1pY29uIG5vLXBhZGRpbmciIG9uLXRhcD0ib3BlbkRpYWxvZyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFwZXItZGlhbG9nIGNsYXNzPSJkaWFsb2ctdGV4dCIgaG9yaXpvbnRhbC1hbGlnbj0icmlnaHQiIHZlcnRpY2FsLWFsaWduPSJib3R0b20iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZGlhbG9nLXRpdGxlIj5ST0MgY3VydmU8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEEgcmVjZWl2ZXIgb3BlcmF0aW5nIGNoYXJhY3RlcmlzdGljIChST0MpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnZlIHBsb3RzIHRoZSB0cnVlIHBvc2l0aXZlIHJhdGUgKFRQUikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWdhaW5zdCB0aGUgZmFsc2UgcG9zaXRpdmUgcmF0ZSAoRlBSKSBhdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpb3VzIGNsYXNzaWZpY2F0aW9uIHRocmVzaG9sZHMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLWRpYWxvZz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InJvYy14LWxhYmVsIj5GYWxzZSBwb3NpdGl2ZSByYXRlPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InJvYy15LWxhYmVsIj5UcnVlIHBvc2l0aXZlIHJhdGU8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZ6LWxpbmUtY2hhcnQyIGlkPSJyb2NjaGFydCIgY2xhc3M9InByLWxpbmUtY2hhcnQiIHgtYXhpcy1mb3JtYXR0ZXI9IltbZ2V0U2ltcGxlQXhpc0Zvcm1hdHRlcihheGlzUHJlY2lzaW9uKV1dIiB5LWF4aXMtZm9ybWF0dGVyPSJbW2dldFNpbXBsZUF4aXNGb3JtYXR0ZXIoYXhpc1ByZWNpc2lvbildXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdnotbGluZS1jaGFydDI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImN1cnZlLWhvbGRlciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InJvYy10ZXh0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUiBjdXJ2ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXBlci1pY29uLWJ1dHRvbiBpY29uPSJpbmZvLW91dGxpbmUiIGNsYXNzPSJpbmZvLWljb24gdGhyZXNob2xkLWluZm8taWNvbiBuby1wYWRkaW5nIiBvbi10YXA9Im9wZW5EaWFsb2ciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcGVyLWRpYWxvZyBjbGFzcz0iZGlhbG9nLXRleHQiIGhvcml6b250YWwtYWxpZ249InJpZ2h0IiB2ZXJ0aWNhbC1hbGlnbj0iYm90dG9tIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRpYWxvZy10aXRsZSI+UFIgY3VydmU8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEEgcHJlY2lzaW9uLXJlY2FsbCAoUFIpIGN1cnZlIHBsb3RzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWNpc2lvbiBhZ2FpbnN0IHJlY2FsbCBhdCB2YXJpb3VzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzaWZpY2F0aW9uIHRocmVzaG9sZHMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLWRpYWxvZz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InByLXgtbGFiZWwiPlJlY2FsbDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwci15LWxhYmVsIj5QcmVjaXNpb248L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZ6LWxpbmUtY2hhcnQyIGlkPSJwcmNoYXJ0IiBjbGFzcz0icHItbGluZS1jaGFydCIgeC1heGlzLWZvcm1hdHRlcj0iW1tnZXRTaW1wbGVBeGlzRm9ybWF0dGVyKGF4aXNQcmVjaXNpb24pXV0iIHktYXhpcy1mb3JtYXR0ZXI9IltbZ2V0U2ltcGxlQXhpc0Zvcm1hdHRlcihheGlzUHJlY2lzaW9uKV1dIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC92ei1saW5lLWNoYXJ0Mj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2lzTXVsdGlDbGFzc18obW9kZWxUeXBlLCBtdWx0aUNsYXNzKV1dIiByZXN0YW1wPgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmLXRhYmxlLXRpdGxlLXJvdyI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmxleCI+CiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmLXRhYmxlLXRpdGxlIj4KICAgICAgICAgICAgICAgICAgICAgICAgW1tnZXROb1RocmVzaG9sZFBlcmZUYWJsZVRpdGxlKHNlbGVjdGVkQnJlYWtkb3duRmVhdHVyZSwKICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRTZWNvbmRCcmVha2Rvd25GZWF0dXJlLAogICAgICAgICAgICAgICAgICAgICAgICBmZWF0dXJlVmFsdWVUaHJlc2hvbGRzKV1dCiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgIDxwYXBlci1pY29uLWJ1dHRvbiBpY29uPSJpbmZvLW91dGxpbmUiIGNsYXNzPSJpbmZvLWljb24gcGVyZm9ybWFuY2UtaW5mby1pY29uIG5vLXBhZGRpbmciIG9uLXRhcD0ib3BlbkRpYWxvZyI+CiAgICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLWljb24tYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgPHBhcGVyLWRpYWxvZyBjbGFzcz0iZGlhbG9nLXRleHQiIGhvcml6b250YWwtYWxpZ249ImF1dG8iIHZlcnRpY2FsLWFsaWduPSJhdXRvIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZGlhbG9nLXRpdGxlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICBDbGFzc2lmaWNhdGlvbiBQZXJmb3JtYW5jZSBUYWJsZQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICBTZXQgdGhlIGdyb3VuZCB0cnV0aCBmZWF0dXJlIHRvIGV4cGxvcmUgbW9kZWwKICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJmb3JtYW5jZSBpbmNsdWRpbmcgY29uZnVzaW9uIG1hdHJpY2VzLgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICBTbGljZSB0aGUgZGF0YXNldCBhbmQgZXhwbG9yZSBtb2RlbCBwZXJmb3JtYW5jZSBieQogICAgICAgICAgICAgICAgICAgICAgICAgIHNsaWNlLgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgIDwvcGFwZXItZGlhbG9nPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBlcmYtc29ydC1ib3giPgogICAgICAgICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPHBhcGVyLWljb24tYnV0dG9uIGljb249InVuZm9sZC1tb3JlIiBjbGFzcz0icGVyZi1idXR0b24iIG9uLXRhcD0iZXhwYW5kQWxsUGVyZm9ybWFuY2UiIGFsdD0iZXhwYW5kIGFsbCBzbGljZXMiIHRpdGxlPSJFeHBhbmQgYWxsIHNsaWNlcyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXBlci1pY29uLWJ1dHRvbiBpY29uPSJ1bmZvbGQtbGVzcyIgY2xhc3M9InBlcmYtYnV0dG9uIiBvbi10YXA9ImNvbGxhcHNlQWxsUGVyZm9ybWFuY2UiIGFsdD0iY29sbGFwc2UgYWxsIHNsaWNlcyIgdGl0bGU9IkNvbGxhcHNlIGFsbCBzbGljZXMiPgogICAgICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLWljb24tYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICA8cGFwZXItZHJvcGRvd24tbWVudSBsYWJlbD0iU29ydCBieSIgY2xhc3M9InRocmVzaG9sZC1kcm9wZG93biBwZXJmLXRhYmxlLXNvcnQtbWVudSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXBlci1saXN0Ym94IHNsb3Q9ImRyb3Bkb3duLWNvbnRlbnQiIHNlbGVjdGVkPSJ7e3NlbGVjdGVkRmVhdHVyZVNvcnR9fSIgYXR0ci1mb3Itc2VsZWN0ZWQ9Im5hbWUiPgogICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbZ2V0RmVhdHVyZVNvcnRCeShtb2RlbFR5cGUsIG11bHRpQ2xhc3MpXV0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcGVyLWl0ZW0gbmFtZT0iW1tpdGVtXV0iPltbaXRlbV1dPC9wYXBlci1pdGVtPgogICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFwZXItbGlzdGJveD4KICAgICAgICAgICAgICAgICAgICAgIDwvcGFwZXItZHJvcGRvd24tbWVudT4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBlcmYtdGFibGUtaGVhZGVyIj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmLXRhYmxlLWFycm93Ij48L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmLXRhYmxlLXZhbCI+RmVhdHVyZSBWYWx1ZTwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBlcmYtdGFibGUtY291bnQiPkNvdW50PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcyQ9IltbZ2V0UGVyZlRhYmxlTW9kZWxDbGFzcyhudW1Nb2RlbHMpXV0iPgogICAgICAgICAgICAgICAgICAgICAgTW9kZWwKICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmLXRhYmxlLWFjYyI+QWNjdXJhY3k8L2Rpdj4KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBlcmYtdGFibGUtZW50cmllcy1ob2xkZXIiPgogICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbZmVhdHVyZVZhbHVlVGhyZXNob2xkc11dIiBhcz0iZmVhdHVyZVZhbHVlVGhyZXNob2xkIj4KICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBlcmYtdGFibGUtZW50cnkiPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzJD0iW1tnZXRQZXJmVGFibGVSb3dDbGFzcyhmZWF0dXJlVmFsdWVUaHJlc2hvbGQub3BlbmVkKV1dIiBkYXRhLWluZGV4JD0iW1tpbmRleF1dIj4KICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmLXRhYmxlLWFycm93Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXBlci1pY29uLWJ1dHRvbiBjbGFzcyQ9IltbZ2V0RXhwYW5kQ29sbGFwc2VQZXJmSWNvbkNsYXNzKGZlYXR1cmVWYWx1ZVRocmVzaG9sZC5vcGVuZWQpXV0iIGljb249ImFycm93LWRyb3AtZG93biIgb24tdGFwPSJ0b2dnbGVQZXJmUm93Ij48L3BhcGVyLWljb24tYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBlcmYtdGFibGUtdmFsIHBlcmYtdGFibGUtY2xpY2thYmxlIHBlcmYtdGFibGUtdGV4dC1lbnRyeSIgb24tdGFwPSJ0b2dnbGVQZXJmUm93Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtbZ2V0UHJpbnRhYmxlVmFsdWVfKGZlYXR1cmVWYWx1ZVRocmVzaG9sZCldXQogICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBlcmYtdGFibGUtY291bnQgcGVyZi10YWJsZS1udW0tZW50cnkgcGVyZi10YWJsZS1jbGlja2FibGUgcGVyZi10YWJsZS10ZXh0LWVudHJ5IiBvbi10YXA9InRvZ2dsZVBlcmZSb3ciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgW1tnZXRNdWx0aUNsYXNzRmVhdHVyZVZhbHVlQ291bnQoaW5mZXJlbmNlU3RhdHNfLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVhdHVyZVZhbHVlVGhyZXNob2xkKV1dCiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcyQ9IltbZ2V0UGVyZlRhYmxlTW9kZWxDbGFzcyhudW1Nb2RlbHMpXV0iIG9uLXRhcD0idG9nZ2xlUGVyZlJvdyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJ7e2ZlYXR1cmVWYWx1ZVRocmVzaG9sZC50aHJlc2hvbGR9fSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBlcmYtdGFibGUtdGV4dC1lbnRyeSBwZXJmLXRhYmxlLWNsaWNrYWJsZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1tnZXRNb2RlbE5hbWVfKGluZGV4KV1dCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmLXRhYmxlLWFjYyBwZXJmLXRhYmxlLWNsaWNrYWJsZSIgb24tdGFwPSJ0b2dnbGVQZXJmUm93Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9Int7ZmVhdHVyZVZhbHVlVGhyZXNob2xkLnRocmVzaG9sZH19Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGVyZi10YWJsZS10ZXh0LWVudHJ5IHBlcmYtdGFibGUtbnVtLWVudHJ5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbW2dldE11bHRpQ2xhc3NBY2N1cmFjeU1vZGVsSW5kZXgoaW5mZXJlbmNlU3RhdHNfLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4LCBmZWF0dXJlVmFsdWVUaHJlc2hvbGQpXV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgPGlyb24tY29sbGFwc2Ugb3BlbmVkPSJ7e2ZlYXR1cmVWYWx1ZVRocmVzaG9sZC5vcGVuZWR9fSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBlcmYtdGFibGUtZW50cnktZXhwYW5kZWQgZmxleC1yb3ctcmV2ZXJzZSBzY3JvbGwteCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tzaG91bGRTaG93RmVhdHVyZVByQ2hhcnRzXyhzZWxlY3RlZExhYmVsRmVhdHVyZSwgc2VsZWN0ZWRCcmVha2Rvd25GZWF0dXJlLCBpbmZlcmVuY2VzKV1dIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29uZi1tYXRyaXgtaG9sZGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb25mLXRleHQiPkNvbmZ1c2lvbiBtYXRyaXg8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW2luZmVyZW5jZVN0YXRzX11dIiBhcz0iaW5mZXJlbmNlU3RhdCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGYtY29uZnVzaW9uLW1hdHJpeCBjb3VudHM9IltbZ2V0TXVsdGlDbGFzc0NvbmZNYXRyaXgoaW5mZXJlbmNlU3RhdHNfLCBpbmRleCwgZmVhdHVyZVZhbHVlVGhyZXNob2xkKV1dIiBsYWJlbD0iW1tnZXRDb25mdXNpb25NYXRyaXhMYWJlbChpbmRleCwgbnVtTW9kZWxzKV1dIiBiYWNrZ3JvdW5kPSJbW2dldENvbmZ1c2lvbk1hdHJpeENvbG9yKGluZGV4KV1dIiBhbGwtaXRlbXM9IltbYWxsQ29uZk1hdHJpeExhYmVsc11dIiBjbGFzcz0iY29uZi1tYXRyaXgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90Zi1jb25mdXNpb24tbWF0cml4PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICA8L2lyb24tY29sbGFwc2U+CiAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Iltbc2hvdWxkU2hvd092ZXJhbGxUaHJlc2hvbGRlcl8oc2VsZWN0ZWRCcmVha2Rvd25GZWF0dXJlKV1dIj4KICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBlcmYtdGFibGUtZW50cnkiPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmLXRhYmxlLXJvdy1leHBhbmRlZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGVyZi10YWJsZS1hcnJvdyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24gaWNvbj0iYXJyb3ctZHJvcC1kb3duIiBvbi10YXA9InRvZ2dsZVBlcmZSb3ciIGRpc2FibGVkPjwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGVyZi10YWJsZS12YWwgcGVyZi10YWJsZS10ZXh0LWVudHJ5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFsbCBkYXRhcG9pbnRzCiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGVyZi10YWJsZS1jb3VudCBwZXJmLXRhYmxlLW51bS1lbnRyeSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbW2dldE11bHRpQ2xhc3NGZWF0dXJlVmFsdWVDb3VudChpbmZlcmVuY2VTdGF0c18pXV0KICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzJD0iW1tnZXRQZXJmVGFibGVNb2RlbENsYXNzKG51bU1vZGVscyldXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJ7e292ZXJhbGxUaHJlc2hvbGRzfX0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmLXRhYmxlLXRleHQtZW50cnkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtbZ2V0TW9kZWxOYW1lXyhpbmRleCldXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGVyZi10YWJsZS1hY2MiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tpbmZlcmVuY2VTdGF0c19dXSIgYXM9ImluZmVyZW5jZVN0YXQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmLXRhYmxlLXRleHQtZW50cnkgcGVyZi10YWJsZS1udW0tZW50cnkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtbZ2V0TXVsdGlDbGFzc0FjY3VyYWN5TW9kZWxJbmRleChpbmZlcmVuY2VTdGF0c18sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXgpXV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGVyZi10YWJsZS1lbnRyeS1leHBhbmRlZCBmbGV4LXJvdy1yZXZlcnNlIHNjcm9sbC14Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW3Nob3VsZFNob3dPdmVyYWxsUHJDaGFydF8oc2VsZWN0ZWRMYWJlbEZlYXR1cmUsIHNlbGVjdGVkQnJlYWtkb3duRmVhdHVyZSwgaW5mZXJlbmNlcyldXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29uZi1tYXRyaXgtaG9sZGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbmYtdGV4dCI+Q29uZnVzaW9uIG1hdHJpeDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tpbmZlcmVuY2VTdGF0c19dXSIgYXM9ImluZmVyZW5jZVN0YXQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGYtY29uZnVzaW9uLW1hdHJpeCBjb3VudHM9IltbZ2V0TXVsdGlDbGFzc0NvbmZNYXRyaXgoaW5mZXJlbmNlU3RhdHNfLCBpbmRleCldXSIgbGFiZWw9IltbZ2V0Q29uZnVzaW9uTWF0cml4TGFiZWwoaW5kZXgsIG51bU1vZGVscyldXSIgYmFja2dyb3VuZD0iW1tnZXRDb25mdXNpb25NYXRyaXhDb2xvcihpbmRleCldXSIgYWxsLWl0ZW1zPSJbW2FsbENvbmZNYXRyaXhMYWJlbHNdXSIgY2xhc3M9ImNvbmYtbWF0cml4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90Zi1jb25mdXNpb24tbWF0cml4PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tpc1JlZ3Jlc3Npb25fKG1vZGVsVHlwZSldXSIgcmVzdGFtcD4KICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGVyZi10YWJsZS10aXRsZS1yb3ciPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXgiPgogICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGVyZi10YWJsZS10aXRsZSI+CiAgICAgICAgICAgICAgICAgICAgICAgIFtbZ2V0Tm9UaHJlc2hvbGRQZXJmVGFibGVUaXRsZShzZWxlY3RlZEJyZWFrZG93bkZlYXR1cmUsCiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkU2Vjb25kQnJlYWtkb3duRmVhdHVyZSwKICAgICAgICAgICAgICAgICAgICAgICAgZmVhdHVyZVZhbHVlVGhyZXNob2xkcyldXQogICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24gaWNvbj0iaW5mby1vdXRsaW5lIiBjbGFzcz0iaW5mby1pY29uIHBlcmZvcm1hbmNlLWluZm8taWNvbiBuby1wYWRkaW5nIiBvbi10YXA9Im9wZW5EaWFsb2ciPgogICAgICAgICAgICAgICAgICAgICAgPC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgIDxwYXBlci1kaWFsb2cgY2xhc3M9ImRpYWxvZy10ZXh0IiBob3Jpem9udGFsLWFsaWduPSJhdXRvIiB2ZXJ0aWNhbC1hbGlnbj0iYXV0byI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRpYWxvZy10aXRsZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgUmVncmVzc2lvbiBQZXJmb3JtYW5jZSBUYWJsZQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICBTZXQgdGhlIGdyb3VuZCB0cnV0aCBmZWF0dXJlIHRvIGV4cGxvcmUgbW9kZWwKICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJmb3JtYW5jZS4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgU2xpY2UgdGhlIGRhdGFzZXQgYW5kIGV4cGxvcmUgbW9kZWwgcGVyZm9ybWFuY2UgYnkKICAgICAgICAgICAgICAgICAgICAgICAgICBzbGljZS4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLWRpYWxvZz4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8cGFwZXItZHJvcGRvd24tbWVudSBsYWJlbD0iU29ydCBieSIgY2xhc3M9InRocmVzaG9sZC1kcm9wZG93biBwZXJmLXRhYmxlLXNvcnQtbWVudSI+CiAgICAgICAgICAgICAgICAgICAgICA8cGFwZXItbGlzdGJveCBzbG90PSJkcm9wZG93bi1jb250ZW50IiBzZWxlY3RlZD0ie3tzZWxlY3RlZEZlYXR1cmVTb3J0fX0iIGF0dHItZm9yLXNlbGVjdGVkPSJuYW1lIj4KICAgICAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tnZXRGZWF0dXJlU29ydEJ5KG1vZGVsVHlwZSwgbXVsdGlDbGFzcyldXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcGVyLWl0ZW0gbmFtZT0iW1tpdGVtXV0iPltbaXRlbV1dPC9wYXBlci1pdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgICAgICAgICAgPC9wYXBlci1saXN0Ym94PgogICAgICAgICAgICAgICAgICAgIDwvcGFwZXItZHJvcGRvd24tbWVudT4KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBlcmYtdGFibGUtaGVhZGVyIj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmLXRhYmxlLWFycm93Ij48L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmLXRhYmxlLXZhbCI+RmVhdHVyZSBWYWx1ZTwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBlcmYtdGFibGUtY291bnQiPkNvdW50PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGVyZi10YWJsZS1lcnJvciI+TWVhbiBlcnJvcjwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBlcmYtdGFibGUtZXJyb3IiPk1lZGlhbiBlcnJvcjwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBlcmYtdGFibGUtZXJyb3IiPk1lYW4gYWJzb2x1dGUgZXJyb3I8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmLXRhYmxlLWVycm9yIj5NZWRpYW4gYWJzb2x1dGUgZXJyb3I8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmLXRhYmxlLXNxLWVycm9yIj5NZWFuIHNxdWFyZWQgZXJyb3I8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmLXRhYmxlLXNxLWVycm9yIj5NZWRpYW4gc3F1YXJlZCBlcnJvcjwvZGl2PgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGVyZi10YWJsZS1lbnRyaWVzLWhvbGRlciI+CiAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tyZWdyZXNzaW9uRW50cmllc19dXSI+CiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmLXRhYmxlLWVudHJ5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGVyZi10YWJsZS1yb3ciPgogICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBlcmYtdGFibGUtYXJyb3ciPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBlcmYtdGFibGUtdmFsIHBlcmYtdGFibGUtdGV4dC1lbnRyeSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbW2l0ZW0ubmFtZV1dCiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGVyZi10YWJsZS1jb3VudCBwZXJmLXRhYmxlLW51bS1lbnRyeSBwZXJmLXRhYmxlLXRleHQtZW50cnkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgW1tpdGVtLmNvdW50XV0KICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmLXRhYmxlLWVycm9yIHBlcmYtdGFibGUtbnVtLWVudHJ5IHBlcmYtdGFibGUtdGV4dC1lbnRyeSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbW2Zvcm1hdEVycm9yKGl0ZW0ubWVhbkVycm9yKV1dCiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGVyZi10YWJsZS1lcnJvciBwZXJmLXRhYmxlLW51bS1lbnRyeSBwZXJmLXRhYmxlLXRleHQtZW50cnkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgW1tmb3JtYXRFcnJvcihpdGVtLm1lZGlhbkVycm9yKV1dCiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGVyZi10YWJsZS1lcnJvciBwZXJmLXRhYmxlLW51bS1lbnRyeSBwZXJmLXRhYmxlLXRleHQtZW50cnkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgW1tmb3JtYXRFcnJvcihpdGVtLm1lYW5BYnNFcnJvcildXQogICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBlcmYtdGFibGUtc3EtZXJyb3IgcGVyZi10YWJsZS1udW0tZW50cnkgcGVyZi10YWJsZS10ZXh0LWVudHJ5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtbZm9ybWF0RXJyb3IoaXRlbS5tZWRpYW5BYnNFcnJvcildXQogICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBlcmYtdGFibGUtZXJyb3IgcGVyZi10YWJsZS1udW0tZW50cnkgcGVyZi10YWJsZS10ZXh0LWVudHJ5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtbZm9ybWF0RXJyb3IoaXRlbS5tZWFuU3F1YXJlZEVycm9yKV1dCiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGVyZi10YWJsZS1zcS1lcnJvciBwZXJmLXRhYmxlLW51bS1lbnRyeSBwZXJmLXRhYmxlLXRleHQtZW50cnkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgW1tmb3JtYXRFcnJvcihpdGVtLm1lZGlhblNxdWFyZWRFcnJvcildXQogICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InN0YXRzLXRhYiI+CiAgICAgICAgICAgICAgPGZhY2V0cy1vdmVydmlldyBpZD0ib3ZlcnZpZXciIHNlYXJjaC1zdHJpbmc9Int7ZmVhdHVyZVNlYXJjaFZhbHVlfX0iPjwvZmFjZXRzLW92ZXJ2aWV3PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvaXJvbi1wYWdlcz4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgIDxzdHlsZSBpbmNsdWRlPSJkYXNoYm9hcmQtc3R5bGUiPjwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KCiAgPHNjcmlwdD4vL35+V0VCUEFUSH5+L3RmLWludGVyYWN0aXZlLWluZmVyZW5jZS1kYXNoYm9hcmQvdGYtaW50ZXJhY3RpdmUtaW5mZXJlbmNlLWRhc2hib2FyZC5odG1sLmpzCmZ1bmN0aW9uIHJxKGEpe2EmJmEucGFyZW50RWxlbWVudCYmYS5wYXJlbnRFbGVtZW50LnJlbW92ZUNoaWxkKGEpfQooZnVuY3Rpb24oKXtQb2x5bWVyKHtpczoidGYtaW50ZXJhY3RpdmUtaW5mZXJlbmNlLWRhc2hib2FyZCIscHJvcGVydGllczp7X3JlcXVlc3RNYW5hZ2VyOnt0eXBlOk9iamVjdCx2YWx1ZTooKT0+bmV3IFBrLlJlcXVlc3RNYW5hZ2VyfSxfY2FuY2VsbGVyOnt0eXBlOk9iamVjdCx2YWx1ZTooKT0+bmV3IFBrLkNhbmNlbGxlcn0sZXhhbXBsZXNQYXRoOnt0eXBlOlN0cmluZ30sbW9kZWxOYW1lOnt0eXBlOlN0cmluZyxvYnNlcnZlcjoibW9kZWxOYW1lQ2hhbmdlZF8ifSxwYXJzZWRNb2RlbE5hbWVzOnt0eXBlOlN0cmluZ30saW5mZXJlbmNlQWRkcmVzczp7dHlwZTpTdHJpbmd9LG1vZGVsVHlwZTp7dHlwZTpTdHJpbmd9LG1vZGVsU2lnbmF0dXJlOnt0eXBlOlN0cmluZ30sbW9kZWxWZXJzaW9uOnt0eXBlOlN0cmluZ30sbWF4RXhhbXBsZXM6e3R5cGU6TnVtYmVyfSxsYWJlbFZvY2FiUGF0aDp7dHlwZTpTdHJpbmd9LG1heEluZmVyZW5jZUVudHJpZXNQZXJSdW46TnVtYmVyLGluZmVyZW5jZXM6e3R5cGU6T2JqZWN0LApvYnNlcnZlcjoibmV3SW5mZXJlbmNlc18iLHZhbHVlOigpPT4oe30pfSxhdHRyaWJ1dGlvbnM6e3R5cGU6T2JqZWN0LG9ic2VydmVyOiJuZXdBdHRyaWJ1dGlvbnNfIn0sZXhhbXBsZXNBbmRJbmZlcmVuY2VzOnt0eXBlOkFycmF5LHZhbHVlOigpPT5bXSxvYnNlcnZlcjoiY29tcHV0ZVNlbGVjdGVkRXhhbXBsZUFuZEluZmVyZW5jZSJ9LHNlbGVjdGVkRXhhbXBsZUFuZEluZmVyZW5jZTp7dHlwZTpPYmplY3R9LGNvdW50ZXJmYWN0dWFsRXhhbXBsZUFuZEluZmVyZW5jZTp7dHlwZTpPYmplY3R9LHZpc2RhdGE6e3R5cGU6QXJyYXksdmFsdWU6KCk9PltdfSxzZWxlY3RlZDp7dHlwZTpBcnJheSx2YWx1ZTooKT0+W10sb2JzZXJ2ZXI6ImNvbXB1dGVTZWxlY3RlZEV4YW1wbGVBbmRJbmZlcmVuY2UifSxjb21wYXJlZEluZGljZXM6e3R5cGU6QXJyYXksdmFsdWU6KCk9PltdfSxsYWJlbFZvY2FiOnt0eXBlOkFycmF5LHZhbHVlOigpPT5bXX0sdXBkYXRlZEV4YW1wbGU6e3R5cGU6Qm9vbGVhbiwKdmFsdWU6ITF9LGltYWdlRmVhdHVyZU5hbWU6e3R5cGU6U3RyaW5nLHZhbHVlOiJpbWFnZS9lbmNvZGVkIixyZWFkb25seTohMH0sc3RhdHM6T2JqZWN0LHNlbGVjdGVkQnJlYWtkb3duRmVhdHVyZTp7dHlwZTpTdHJpbmcsdmFsdWU6IiIsb2JzZXJ2ZXI6ImJyZWFrZG93bkZlYXR1cmVTZWxlY3RlZF8ifSxzZWxlY3RlZFNlY29uZEJyZWFrZG93bkZlYXR1cmU6e3R5cGU6U3RyaW5nLHZhbHVlOiIiLG9ic2VydmVyOiJicmVha2Rvd25GZWF0dXJlU2VsZWN0ZWRfIn0sc2VsZWN0ZWRMYWJlbEZlYXR1cmU6e3R5cGU6U3RyaW5nLHZhbHVlOiIiLG9ic2VydmVyOiJsYWJlbEZlYXR1cmVTZWxlY3RlZF8ifSxuZWFyZXN0Q291bnRlcmZhY3R1YWxNb2RlbEluZGV4Ont0eXBlOk51bWJlcix2YWx1ZTowfSxpbmZlcmVuY2VTdGF0c186e3R5cGU6QXJyYXksdmFsdWU6KCk9PltdfSxmZWF0dXJlVmFsdWVUaHJlc2hvbGRzOnt0eXBlOkFycmF5LHZhbHVlOigpPT5bXX0sZmVhdHVyZVZhbHVlVGhyZXNob2xkc01hcDpPYmplY3QsCmRlZmF1bHRJbmZlcmVuY2VMYWJlbDp7dHlwZTpOdW1iZXIsdmFsdWU6MCxvYnNlcnZlcjoicmVmcmVzaEluZmVyZW5jZXNfIn0sb3ZlcmFsbFRocmVzaG9sZHM6e3R5cGU6QXJyYXksdmFsdWU6KCk9PltdfSxzaWRlVGFiU2VsZWN0ZWQ6e3R5cGU6TnVtYmVyLHZhbHVlOjAsb2JzZXJ2ZXI6InNpZGVUYWJTZWxlY3RlZENoYW5nZWRfIn0sbG9jYWw6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxvYnNlcnZlcjoibG9jYWxDaGFuZ2VkXyJ9LGxvY2FsQXRsYXNVcmw6U3RyaW5nLHBhcnRpYWxEZXBQbG90RWxpZ2libGVGZWF0dXJlczp7dHlwZTpBcnJheSx2YWx1ZTooKT0+W10sb2JzZXJ2ZXI6InBhcnRpYWxEZXBQbG90RWxpZ2libGVGZWF0dXJlc1NldCJ9LHBhcnRpYWxEZXBQbG90UGVuZGluZ0ZlYXR1cmVzOnt0eXBlOkFycmF5LHZhbHVlOigpPT5bXX0sZXhhbXBsZURpc3BsYXlNb2RlOnt0eXBlOlN0cmluZyx2YWx1ZToic3RhY2tlZCJ9LGZlYXR1cmVTZWFyY2hWYWx1ZTpTdHJpbmcsaW5jb3JyZWN0UHJlZENvc3RSYXRpbzp7dHlwZTpOdW1iZXIsCnZhbHVlOjEsb2JzZXJ2ZXI6ImNvc3RSYXRpb0NoYW5nZWRfIn0sbXVsdGlDbGFzczp7dHlwZTpCb29sZWFufSxzZXF1ZW5jZUV4YW1wbGVzOnt0eXBlOkJvb2xlYW59LHNhbXBsaW5nT2Rkczp7dHlwZTpOdW1iZXJ9LHVzZVByZWRpY3RBcGk6e3R5cGU6Qm9vbGVhbn0scHJlZGljdE91dHB1dFRlbnNvcjp7dHlwZTpTdHJpbmd9LHByZWRpY3RJbnB1dFRlbnNvcjp7dHlwZTpTdHJpbmd9LGF4aXNQcmVjaXNpb246e3R5cGU6TnVtYmVyLHZhbHVlOjJ9LGRpc3RhbmNlU3RhdHNfOnt0eXBlOk9iamVjdH0sZmFjZXREaXN0U3dpdGNoOnt0eXBlOlN0cmluZyx2YWx1ZToiTDEifSxmYWNldERpc3RGZWF0dXJlTmFtZTp7dHlwZTpTdHJpbmd9LGZhY2V0RGlzdEZlYXR1cmVOYW1lczp7dHlwZTpBcnJheSx2YWx1ZTooKT0+W119LGZhY2V0RGlzdFNldHRpbmc6e3R5cGU6U3RyaW5nLHZhbHVlOiJjb2xvckJ5In0sZXhhbXBsZVN0YXR1c1N0cjp7dHlwZTpTdHJpbmcsdmFsdWU6Ik5vIGRhdGFwb2ludHMgbG9hZGVkIHlldCJ9LApzZWxlY3RlZEV4YW1wbGVOdW06e3R5cGU6TnVtYmVyLHZhbHVlOiIiLG9ic2VydmVyOiJzZWxlY3RlZEV4YW1wbGVJbnB1dENoYW5nZWRfIn0sc2VsZWN0ZWRFeGFtcGxlTWF4Ok51bWJlcixvcGVuZWRDb250ZXh0VG9vbHM6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMH0sb3BlbmVkUGVyZm9ybWFuY2U6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMH0sb3BlbmVkVHJ1ZUxhYmVsOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITB9LG9wZW5lZEV4cGxvcmVyOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITB9LG9wZW5lZEluZmVyZW5jZVJlc3VsdHM6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMH0scmVncmVzc2lvbkVudHJpZXNfOnt0eXBlOkFycmF5fSxuZWFyZXN0Q291bnRlcmZhY3R1YWxEaXN0Ont0eXBlOlN0cmluZyx2YWx1ZToiTDEifSx2aXNNb2RlOnt0eXBlOlN0cmluZyx2YWx1ZToiZGl2ZSIsb2JzZXJ2ZXI6InZpc01vZGVDaGFuZ2VkXyJ9LG9wdGltaXphdGlvblNlbGVjdGVkOnt0eXBlOlN0cmluZyx2YWx1ZToiY3VzdG9tIiwKb2JzZXJ2ZXI6Im9wdGltaXphdGlvblNlbGVjdGVkQ2hhbmdlZF8ifSxjb21wYXJlVGl0bGU6U3RyaW5nLGF0dHJpYnV0aW9uOnt0eXBlOk9iamVjdCx2YWx1ZTooKT0+KHt9KX0sZ2xvYmFsUGRQbG90czp7dHlwZTpCb29sZWFuLHZhbHVlOiEwfSxudW1Nb2RlbHM6e3R5cGU6TnVtYmVyLHJlYWRPbmx5OiEwfSxzaG93TmVhcmVzdENvdW50ZXJmYWN0dWFsOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LHNlbGVjdGVkRmVhdHVyZVNvcnQ6e3R5cGU6U3RyaW5nLHZhbHVlOiJDb3VudCIsb2JzZXJ2ZXI6InNlbGVjdGVkRmVhdHVyZVNvcnRDaGFuZ2VkXyJ9LHBkUGxvdENvbG9yczp7dHlwZTpBcnJheSx2YWx1ZTooKT0+W2QzLmNvbG9yKCJyZ2IoMzEsIDExOSwgMTgwKSIpLGQzLmNvbG9yKCJyZ2IoMjU1LCAxMjcsIDE0KSIpLGQzLmNvbG9yKCJyZ2IoNDQsIDE2MCwgNDQpIiksZDMuY29sb3IoInJnYigyMTQsIDM5LCA0MCkiKSxkMy5jb2xvcigicmdiKDE0OCwgMTAzLCAxODkpIiksZDMuY29sb3IoInJnYigxNDAsIDg2LCA3NSkiKSwKZDMuY29sb3IoInJnYigyMjcsIDExOSwgMTk0KSIpLGQzLmNvbG9yKCJyZ2IoMTI3LCAxMjcsIDEyNykiKSxkMy5jb2xvcigicmdiKDE4OCwgMTg5LCAzNCkiKSxkMy5jb2xvcigicmdiKDIzLCAxOTAsIDIwNykiKV19LHBkUGxvdFRyYW5zcGFyZW50Q29sb3JzOnt0eXBlOkFycmF5LHZhbHVlOigpPT5bZDMuY29sb3IoInJnYmEoMzEsIDExOSwgMTgwLCAwLjMpIiksZDMuY29sb3IoInJnYmEoMjU1LCAxMjcsIDE0LCAwLjMpIiksZDMuY29sb3IoInJnYmEoNDQsIDE2MCwgNDQsIDAuMykiKSxkMy5jb2xvcigicmdiYSgyMTQsIDM5LCA0MCwgMC4zKSIpLGQzLmNvbG9yKCJyZ2JhKDE0OCwgMTAzLCAxODksIDAuMykiKSxkMy5jb2xvcigicmdiYSgxNDAsIDg2LCA3NSwgMC4zKSIpLGQzLmNvbG9yKCJyZ2JhKDIyNywgMTE5LCAxOTQsIDAuMykiKSxkMy5jb2xvcigicmdiYSgxMjcsIDEyNywgMTI3LCAwLjMpIiksZDMuY29sb3IoInJnYmEoMTg4LCAxODksIDM0LCAwLjMpIiksZDMuY29sb3IoInJnYmEoMjMsIDE5MCwgMjA3LCAwLjMpIildfSwKcm9jQ3VydmVDb2xvcnM6e3R5cGU6QXJyYXksdmFsdWU6KCk9PltkMy5jb2xvcigicmdiKDE4LCAxODEsIDIwNikiKSxkMy5jb2xvcigicmdiKDI1MCwgMTIwLCAyMykiKV19LHJvY0N1cnZlTGluZUNvbG9yczp7dHlwZTpBcnJheSx2YWx1ZTooKT0+W2QzLmNvbG9yKCJyZ2JhKDE4LCAxODEsIDIwNiwgMC42KSIpLGQzLmNvbG9yKCJyZ2JhKDI1MCwgMTIwLCAyMywgMC42KSIpXX0sY29uZk1hdHJpeENvbG9yczp7dHlwZTpBcnJheSx2YWx1ZTooKT0+W2QzLmNvbG9yKCJyZ2IoMTgsIDE4MSwgMjA2KSIpLGQzLmNvbG9yKCJyZ2IoMjUwLCAxMjAsIDIzKSIpXX0sYWxsQ29uZk1hdHJpeExhYmVsczp7dHlwZTpBcnJheSx2YWx1ZTooKT0+W119LHNwaW5uZXJIaWRkZW5fOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITB9fSxvYnNlcnZlcnM6WyJzZXRGYWNldERpc3RGZWF0dXJlTmFtZShmYWNldERpc3RTd2l0Y2gsIHNlbGVjdGVkKSIsIm5lYXJlc3RDb3VudGVyZmFjdHVhbFN0YXR1c0NoYW5nZWRfKHNob3dOZWFyZXN0Q291bnRlcmZhY3R1YWwsIG5lYXJlc3RDb3VudGVyZmFjdHVhbE1vZGVsSW5kZXgsIG5lYXJlc3RDb3VudGVyZmFjdHVhbERpc3QpIl0sCnJlbG9hZDpmdW5jdGlvbigpe30sb3BlbkRpYWxvZzpmdW5jdGlvbihhKXthLnN0b3BQcm9wYWdhdGlvbigpO2EudGFyZ2V0LnBhcmVudEVsZW1lbnQucGFyZW50RWxlbWVudC5xdWVyeVNlbGVjdG9yKCJwYXBlci1kaWFsb2ciKS5vcGVuKCl9LHJlYWR5OmZ1bmN0aW9uKCl7Y29uc3QgYT1kMy5zZWxlY3QodGhpcy4kLnNpZGUpLGM9ZDMuc2VsZWN0KHRoaXMuJC5jZW50ZXIpLGQ9ZDMuc2VsZWN0KHRoaXMuJC5yZXNpemVyKSxmPXRoaXMsZz1kMy5kcmFnKCkub24oImRyYWciLCgpPT57bGV0IGw9ZDMubW91c2UodGhpcy5wYXJlbnROb2RlLnBhcmVudE5vZGUpWzBdL3RoaXMucGFyZW50Tm9kZS5wYXJlbnROb2RlLm9mZnNldFdpZHRoKjEwMDtsPU1hdGgubWF4KGwsMjApO2Muc3R5bGUoIndpZHRoIiwxMDAtbCsiJSIpO2Euc3R5bGUoIndpZHRoIixsKyIlIik7Zi4kLmRpdmUuJC52aXMuX3VwZGF0ZUdyaWRGYWNldGluZygpO2YuJC5kaXZlLiQudmlzLl9vbklyb25SZXNpemUoKX0pOwpkLmNhbGwoZyl9LGF0dGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdChQay5nZXRSb3V0ZXIoKS5wbHVnaW5zTGlzdGluZygpKS50aGVuKGE9Pnsid2hhdGlmImluIGE/dGhpcy4kLmluaXRpYWxEaWFsb2cuY2xvc2VEaWFsb2coKToodGhpcy4kLmluZmVyZW5jZXNldHRpbmdzLmNsb3NlKCksdGhpcy4kLmluaXRpYWxEaWFsb2cub3Blbk5vVGVuc29yRmxvd0RpYWxvZygpKX0pfSxzZXR0aW5nc0NsaWNrZWRfOmZ1bmN0aW9uKCl7dGhpcy4kLmluZmVyZW5jZXNldHRpbmdzLnRvZ2dsZSgpfSxsb2NhbENoYW5nZWRfOmZ1bmN0aW9uKCl7dGhpcy5sb2NhbCYmdGhpcy5jbG9zZVNldHRpbmdzXygpfSxtb2RlbE5hbWVDaGFuZ2VkXzpmdW5jdGlvbigpe3RoaXMucGFyc2VkTW9kZWxOYW1lcz10aGlzLm1vZGVsTmFtZS5zcGxpdCgiLCIpLm1hcChhPT5hLnRyaW0oKSk7Zm9yKGxldCBhPTA7YTx0aGlzLnBhcnNlZE1vZGVsTmFtZXMubGVuZ3RoO2ErKyl7Y29uc3QgYz0KdGhpcy5wYXJzZWRNb2RlbE5hbWVzW2FdO2ZvcihsZXQgZD1hKzE7ZDx0aGlzLnBhcnNlZE1vZGVsTmFtZXMubGVuZ3RoO2QrKyl0aGlzLnBhcnNlZE1vZGVsTmFtZXNbZF09PWMmJih0aGlzLnBhcnNlZE1vZGVsTmFtZXNbYV09YysiICIrKGErMSksdGhpcy5wYXJzZWRNb2RlbE5hbWVzW2RdPWMrIiAiKyhkKzEpKX19LGNsb3NlU2V0dGluZ3NfOmZ1bmN0aW9uKCl7dGhpcy4kLmluZmVyZW5jZXNldHRpbmdzLmNsb3NlKCl9LHNob3dEaXN0YW5jZUNsaWNrZWRfOmZ1bmN0aW9uKCl7dGhpcy4kLmRpc3RhbmNlZGlhbG9nLnRvZ2dsZSgpfSxhZGREaXN0YW5jZU1ldHJpYzpmdW5jdGlvbigpe3RoaXMuZmFjZXREaXN0RmVhdHVyZU5hbWVzLnB1c2godGhpcy5mYWNldERpc3RGZWF0dXJlTmFtZSk7Y29uc3QgYT10aGlzLnNlbGVjdGVkWzBdLGM9IkwyIj09dGhpcy5mYWNldERpc3RTd2l0Y2g7Zm9yKGxldCBkPTA7ZDx0aGlzLnZpc2RhdGEubGVuZ3RoO2QrKyl7bGV0IGY9dGhpcy5nZXREaXN0KHRoaXMudmlzZGF0YVthXSwKdGhpcy52aXNkYXRhW2RdLGMpO3RoaXMudmlzZGF0YVtkXVt0aGlzLmZhY2V0RGlzdEZlYXR1cmVOYW1lXT1mfXRoaXMucmVmcmVzaERpdmVfKCk7ImNvbG9yQnkiPT10aGlzLmZhY2V0RGlzdFNldHRpbmc/dGhpcy4kLmRpdmUuY29sb3JCeT10aGlzLmZhY2V0RGlzdEZlYXR1cmVOYW1lOiJ2ZXJ0aWNhbEZhY2V0Ij09dGhpcy5mYWNldERpc3RTZXR0aW5nP3RoaXMuJC5kaXZlLnZlcnRpY2FsRmFjZXQ9dGhpcy5mYWNldERpc3RGZWF0dXJlTmFtZToiaG9yaXpvbnRhbEZhY2V0Ij09dGhpcy5mYWNldERpc3RTZXR0aW5nP3RoaXMuJC5kaXZlLmhvcml6b250YWxGYWNldD10aGlzLmZhY2V0RGlzdEZlYXR1cmVOYW1lOiJ2ZXJ0aWNhbFBvc2l0aW9uIj09dGhpcy5mYWNldERpc3RTZXR0aW5nP3RoaXMuJC5kaXZlLnZlcnRpY2FsUG9zaXRpb249dGhpcy5mYWNldERpc3RGZWF0dXJlTmFtZToiaG9yaXpvbnRhbFBvc2l0aW9uIj09dGhpcy5mYWNldERpc3RTZXR0aW5nJiYodGhpcy4kLmRpdmUuaG9yaXpvbnRhbFBvc2l0aW9uPQp0aGlzLmZhY2V0RGlzdEZlYXR1cmVOYW1lKX0sc2V0RmFjZXREaXN0RmVhdHVyZU5hbWU6ZnVuY3Rpb24oYSxjKXt0aGlzLmZhY2V0RGlzdEZlYXR1cmVOYW1lPSIgIithKyIgZGlzdGFuY2UgdG8gZGF0YXBvaW50ICIrY1swXX0sbmVhcmVzdENvdW50ZXJmYWN0dWFsU3RhdHVzQ2hhbmdlZF86ZnVuY3Rpb24oYSl7YT90aGlzLmZpbmRDbG9zZXN0Q291bnRlcmZhY3R1YWxfKCk6KHRoaXMuY29tcGFyZWRJbmRpY2VzPVtdLHRoaXMuY291bnRlcmZhY3R1YWxFeGFtcGxlQW5kSW5mZXJlbmNlPW51bGwsYT10aGlzLnNlbGVjdGVkRXhhbXBsZUFuZEluZmVyZW5jZSx0aGlzLnNlbGVjdGVkRXhhbXBsZUFuZEluZmVyZW5jZT1udWxsLHRoaXMuc2VsZWN0ZWRFeGFtcGxlQW5kSW5mZXJlbmNlPWEpfSxmaW5kQ2xvc2VzdENvdW50ZXJmYWN0dWFsXzpmdW5jdGlvbigpe2NvbnN0IGE9dGhpcy5zZWxlY3RlZFswXSxjPXRoaXMuc3RyV2l0aE1vZGVsTmFtZV8oIiBJbmZlcmVuY2UgdmFsdWUiLHRoaXMubmVhcmVzdENvdW50ZXJmYWN0dWFsTW9kZWxJbmRleCk7CmxldCBkPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxmPS0xO2ZvcihsZXQgZz0wO2c8dGhpcy52aXNkYXRhLmxlbmd0aDtnKyspe2lmKHRoaXMudmlzZGF0YVthXVtjXT09dGhpcy52aXNkYXRhW2ddW2NdKWNvbnRpbnVlO2xldCBsPXRoaXMuZ2V0RGlzdCh0aGlzLnZpc2RhdGFbYV0sdGhpcy52aXNkYXRhW2ddLCJMMiI9PXRoaXMubmVhcmVzdENvdW50ZXJmYWN0dWFsRGlzdCk7bDxkJiYoZD1sLGY9Zyl9LTEhPWYmJih0aGlzLmNvbXBhcmVkSW5kaWNlcz1bZl0sdGhpcy5jb3VudGVyZmFjdHVhbEV4YW1wbGVBbmRJbmZlcmVuY2U9dGhpcy5leGFtcGxlc0FuZEluZmVyZW5jZXNbZl0sdGhpcy5jb21wYXJlVGl0bGU9IkNvdW50ZXJmYWN0dWFsIHZhbHVlKHMpIil9LGdldERpc3Q6ZnVuY3Rpb24oYSxjLGQpe2xldCBmPTA7Y29uc3QgZz1bLi4ubmV3IFNldChbLi4uT2JqZWN0LmtleXMoYSksLi4uT2JqZWN0LmtleXMoYyldKV07Zm9yKGxldCBrPTA7azxnLmxlbmd0aDtrKyspe3ZhciBsPQpnW2tdO2lmKHRoaXMuaXNDb21wdXRlZEtleVN0cl8obCl8fGw9PXRoaXMuc2VsZWN0ZWRMYWJlbEZlYXR1cmV8fHRoaXMuc3RhdHNbbF0udW5pcXVlQ291bnQ9PXRoaXMuZXhhbXBsZXNBbmRJbmZlcmVuY2VzLmxlbmd0aCljb250aW51ZTtsZXQgbT1hW2xdLHA9Y1tsXTtBcnJheS5pc0FycmF5KG0pfHwobT1bbV0pO0FycmF5LmlzQXJyYXkocCl8fChwPVtwXSk7Y29uc3QgcT1NYXRoLm1heChtLmxlbmd0aCxwLmxlbmd0aCk7bGV0IHI9MDtmb3IobGV0IHQ9MDt0PHE7dCsrKXI9bnVsbCE9dGhpcy5kaXN0YW5jZVN0YXRzX1tsXS5zdGREZXY/cit0aGlzLmdldE51bWVyaWNEaXN0KG1bdF0scFt0XSx0aGlzLmRpc3RhbmNlU3RhdHNfW2xdKTpyK3RoaXMuZ2V0Q2F0ZWdvcmljYWxEaXN0KG1bdF0scFt0XSx0aGlzLmRpc3RhbmNlU3RhdHNfW2xdKTtsPXIvcTtkJiYobCo9bCk7Zis9bH1yZXR1cm4gZn0sZ2V0TnVtZXJpY0Rpc3Q6ZnVuY3Rpb24oYSxjLGQpe3JldHVybiBudWxsPT1hfHwKbnVsbD09Yz8xOmQuc3RkRGV2P01hdGguYWJzKChhLWMpL2Quc3RkRGV2KTowfSxnZXRDYXRlZ29yaWNhbERpc3Q6ZnVuY3Rpb24oYSxjLGQpe3JldHVybiBudWxsPT1hfHxudWxsPT1jPzE6YT09Yz8wOmQucHJvYlNhbWVWYWx1ZX0sdmlzTW9kZUNoYW5nZWRfOmZ1bmN0aW9uKGEpeyJkaXZlIj09YT90aGlzLmhpZGVQYXJ0aWFsRGVwZW5kZW5jZVBsb3RzXygpOnRoaXMuc2hvd1BhcnRpYWxEZXBlbmRlbmNlUGxvdHNfKCl9LGhpZGVQYXJ0aWFsRGVwZW5kZW5jZVBsb3RzXzpmdW5jdGlvbigpe3RoaXMuJC5wYXJ0aWFscGxvdGhvbGRlci5zdHlsZS5kaXNwbGF5PSJub25lIn0sc2hvd1BhcnRpYWxEZXBlbmRlbmNlUGxvdHNfOmZ1bmN0aW9uKCl7dGhpcy4kLnBhcnRpYWxwbG90aG9sZGVyLnN0eWxlLmRpc3BsYXk9ImZsZXgiO3JlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+dGhpcy5wb3B1bGF0ZVBkVGFicygpKX0sYXJlVGhlcmVQZFBsb3RGZWF0dXJlc186ZnVuY3Rpb24oYSl7cmV0dXJuIGEmJgowPGEubGVuZ3RofSxzZWxlY3RlZEluZGljZXNDaGFuZ2VkXzpmdW5jdGlvbihhKXt0aGlzLnNlbGVjdGVkPWEuZGV0YWlsLnZhbHVlO3RoaXMuc2V0QXR0cmlidXRpb25zKCk7dGhpcy5zZWxlY3RlZERhdGFVcGRhdGVkXygpO3RoaXMuc2hvd05lYXJlc3RDb3VudGVyZmFjdHVhbCYmMCE9dGhpcy5zZWxlY3RlZC5sZW5ndGg/dGhpcy5maW5kQ2xvc2VzdENvdW50ZXJmYWN0dWFsXygpOnRoaXMuY29tcGFyZWRJbmRpY2VzPVtdfSxzZWxlY3ROZXh0RGF0YXBvaW50XzpmdW5jdGlvbigpe3RoaXMuJC5kaXZlLnNlbGVjdGVkSW5kaWNlcz1bKHRoaXMuc2VsZWN0ZWRbMF0rMSkldGhpcy52aXNkYXRhLmxlbmd0aF19LHNlbGVjdFByZXZEYXRhcG9pbnRfOmZ1bmN0aW9uKCl7dGhpcy4kLmRpdmUuc2VsZWN0ZWRJbmRpY2VzPVsoKHRoaXMuc2VsZWN0ZWRbMF0tMSkldGhpcy52aXNkYXRhLmxlbmd0aCt0aGlzLnZpc2RhdGEubGVuZ3RoKSV0aGlzLnZpc2RhdGEubGVuZ3RoXX0sc2VsZWN0ZWRFeGFtcGxlSW5wdXRDaGFuZ2VkXzpmdW5jdGlvbihhKXtudWxsIT0KYSYmIiIhPWEmJihhPSthLGlzTmFOKGEpfHwwPmF8fGE+PXRoaXMudmlzZGF0YS5sZW5ndGh8fCh0aGlzLiQuZGl2ZS5zZWxlY3RlZEluZGljZXM9W2FdKSl9LHNldEV4YW1wbGVDb2xsYXBzZWRfOmZ1bmN0aW9uKCl7dGhpcy5leGFtcGxlRGlzcGxheU1vZGU9ImdyaWQiO3RoaXMuJCQoIiN2aWV3ZXIiKS5leHBhbmRlZEZlYXR1cmVzPXt9O3RoaXMuJCQoIiN2aWV3ZXIiKS5leHBhbmRBbGxGZWF0dXJlcz0hMTt0aGlzLiQkKCIjdmlld2VyIikucmVmcmVzaEV4YW1wbGVWaWV3ZXIoKX0sc2V0RXhhbXBsZVNob3dfOmZ1bmN0aW9uKCl7dGhpcy5leGFtcGxlRGlzcGxheU1vZGU9ImdyaWQiO3RoaXMuJCQoIiN2aWV3ZXIiKS5leHBhbmRBbGxGZWF0dXJlcz0hMH0sc2V0RXhhbXBsZUV4cGFuZGVkXzpmdW5jdGlvbigpe3RoaXMuZXhhbXBsZURpc3BsYXlNb2RlPSJzdGFja2VkIjt0aGlzLiQkKCIjdmlld2VyIikuZXhwYW5kQWxsRmVhdHVyZXM9ITB9LHN0YXRzQ2hhbmdlZF86ZnVuY3Rpb24oYSl7dGhpcy5zdGF0cz0KYS5kZXRhaWwudmFsdWV9LGlzQmluYXJ5Q2xhc3NpZmljYXRpb25fOmZ1bmN0aW9uKGEsYyl7cmV0dXJuImNsYXNzaWZpY2F0aW9uIj09YSYmIWN9LGlzTXVsdGlDbGFzc186ZnVuY3Rpb24oYSxjKXtyZXR1cm4iY2xhc3NpZmljYXRpb24iPT1hJiZjfSxpc1JlZ3Jlc3Npb25fOmZ1bmN0aW9uKGEpe3JldHVybiJyZWdyZXNzaW9uIj09YX0sc2hvdWxkU2hvd0ZlYXR1cmVEcm9wZG93bl86ZnVuY3Rpb24oYSl7cmV0dXJuIGEmJjA8T2JqZWN0LmtleXMoYSkubGVuZ3RofSxzaG91bGRTaG93U2Vjb25kRmVhdHVyZURyb3Bkb3duXzpmdW5jdGlvbihhKXtyZXR1cm4iIiE9YX0sc2hvdWxkU2hvd0xhYmVsRHJvcGRvd25fOmZ1bmN0aW9uKGEpe3JldHVybiBhJiYwPE9iamVjdC5rZXlzKGEpLmxlbmd0aH0sc2hvdWxkSGlkZUNvdW50ZXJmYWN0dWFsTW9kZWxTZWxlY3Rvcl86ZnVuY3Rpb24oYSl7cmV0dXJuIShhJiYxPGEubGVuZ3RoKX0sc2hvdWxkU2hvd092ZXJhbGxQckNoYXJ0XzpmdW5jdGlvbihhLApjLGQpe3JldHVybiIiIT1hJiYiIj09YyYmbnVsbCE9ZH0sc2hvdWxkU2hvd0ZlYXR1cmVQckNoYXJ0c186ZnVuY3Rpb24oYSxjLGQpe3JldHVybiIiIT1hJiYiIiE9YyYmbnVsbCE9ZH0sc2hvdWxkU2hvd0Nvc3RSYXRpb186ZnVuY3Rpb24oYSxjLGQpe3JldHVybiIiIT1hJiZ0aGlzLmlzQmluYXJ5Q2xhc3NpZmljYXRpb25fKGMsZCl9LGFyZVBhcnRpYWxEZXBlbmRlbmNlUGxvdHNFbmFibGVkXzpmdW5jdGlvbihhLGMsZCl7cmV0dXJuIHRoaXMuaGFzU2VsZWN0ZWQoYSkmJnRoaXMuYXJlRXhhbXBsZXNFZGl0YWJsZV8oYyxkKX0saGFzU2VsZWN0ZWQ6ZnVuY3Rpb24oYSl7cmV0dXJuIG51bGwhPWF9LGdldEZlYXR1cmVMaXN0XzpmdW5jdGlvbihhKXthPU9iamVjdC5rZXlzKGEpLmZpbHRlcihjPT4hdGhpcy5pc0NvbXB1dGVkS2V5U3RyXyhjKSkuc29ydCgpO2EucHVzaCgiIik7cmV0dXJuIGF9LHN0clN0YXJ0c1dpdGhfOmZ1bmN0aW9uKGEsYyl7cmV0dXJuIDA9PWEubGFzdEluZGV4T2YoYywKMCl9LGdldE1vZGVsTmFtZV86ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucGFyc2VkTW9kZWxOYW1lc1thXX0sc3RyV2l0aE1vZGVsTmFtZV86ZnVuY3Rpb24oYSxjKXtyZXR1cm4gMTx0aGlzLm51bU1vZGVscz9hKyIgIit0aGlzLmdldE1vZGVsTmFtZV8oYyk6YX0sdXBkYXRlTnVtYmVyT2ZNb2RlbHM6ZnVuY3Rpb24oKXt0aGlzLl9zZXROdW1Nb2RlbHModGhpcy5tb2RlbE5hbWUuc3BsaXQoIiwiKS5sZW5ndGgpO3RoaXMuc2VsZWN0ZWRTZWNvbmRCcmVha2Rvd25GZWF0dXJlPXRoaXMuc2VsZWN0ZWRCcmVha2Rvd25GZWF0dXJlPXRoaXMuc2VsZWN0ZWRMYWJlbEZlYXR1cmU9IiI7Y29uc3QgYT1bXTtmb3IobGV0IGM9MDtjPHRoaXMubnVtTW9kZWxzO2MrKylhLnB1c2goe3RocmVzaG9sZDouNX0pO3RoaXMuc2V0KCJvdmVyYWxsVGhyZXNob2xkcyIsYSk7dGhpcy5zaG91bGREaXNhYmxlSW5mZXJCdXR0b25fKHRoaXMuZXhhbXBsZXNBbmRJbmZlcmVuY2VzLHRoaXMubW9kZWxOYW1lLAp0aGlzLmluZmVyZW5jZUFkZHJlc3MsdGhpcy51cGRhdGVkRXhhbXBsZSl8fHRoaXMuaW5mZXJDbGlja2VkXygpfSxpc0NvbXB1dGVkS2V5U3RyXzpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5zdHJTdGFydHNXaXRoXyhhLCIgSW5mZXJlbmNlIHZhbHVlIil8fHRoaXMuc3RyU3RhcnRzV2l0aF8oYSwiIEluZmVyZW5jZSBsYWJlbCIpfHx0aGlzLnN0clN0YXJ0c1dpdGhfKGEsIiBJbmZlcmVuY2UgY29ycmVjdCIpfHx0aGlzLnN0clN0YXJ0c1dpdGhfKGEsIiBJbmZlcmVuY2UgZXJyb3IiKXx8dGhpcy5zdHJTdGFydHNXaXRoXyhhLCIgSW5mZXJlbmNlIHNjb3JlIil8fHRoaXMuc3RyU3RhcnRzV2l0aF8oYSwiIEluZmVyZW5jZSBhYnNvbHV0ZSBlcnJvciIpfHx0aGlzLnN0clN0YXJ0c1dpdGhfKGEsIiBJbmZlcmVuY2Ugc3F1YXJlZCBlcnJvciIpfHwiIERhdGFwb2ludCBJRCI9PWF8fC0xIT10aGlzLmZhY2V0RGlzdEZlYXR1cmVOYW1lcy5pbmRleE9mKGEpfSxicmVha2Rvd25GZWF0dXJlU2VsZWN0ZWRfOmZ1bmN0aW9uKCl7dGhpcy5yZXNldE9wdGltaXphdGlvblNlbGVjdGVkXygpOwpjb25zdCBhPXRoaXMuc2VsZWN0ZWRCcmVha2Rvd25GZWF0dXJlOyIiPT1hJiYodGhpcy5zZWxlY3RlZFNlY29uZEJyZWFrZG93bkZlYXR1cmU9IiIpO2NvbnN0IGM9dGhpcy5zZWxlY3RlZFNlY29uZEJyZWFrZG93bkZlYXR1cmUsZD1bXSxmPXt9O2lmKDAhPT1hLmxlbmd0aCl7bGV0IG09dGhpcy5zdGF0c1thXS52YWx1ZUhhc2g7dGhpcy5zdGF0c1thXS50b3RhbENvdW50IT10aGlzLmV4YW1wbGVzQW5kSW5mZXJlbmNlcy5sZW5ndGgmJihtPU9iamVjdC5hc3NpZ24oe30sbSx7dW5kZWZpbmVkOiIifSkpO2xldCBwPXt1bmRlZmluZWQ6IiJ9OzAhPWMubGVuZ3RoJiYocD10aGlzLnN0YXRzW2NdLnZhbHVlSGFzaCx0aGlzLnN0YXRzW2NdLnRvdGFsQ291bnQhPXRoaXMuZXhhbXBsZXNBbmRJbmZlcmVuY2VzLmxlbmd0aCYmKHA9T2JqZWN0LmFzc2lnbih7fSxwLHt1bmRlZmluZWQ6IiJ9KSkpO2Zvcih2YXIgZyBpbiBtKWlmKG0uaGFzT3duUHJvcGVydHkoZykpZm9yKHZhciBsIGluIHApaWYocC5oYXNPd25Qcm9wZXJ0eShsKSl7Y29uc3QgcT0KInVuZGVmaW5lZCI9PWc/dm9pZCAwOnRoaXMuc3RhdHNbYV0udmFsdWVIYXNoW2ddLnZhbHVlLHI9InVuZGVmaW5lZCI9PWw/dm9pZCAwOnRoaXMuc3RhdHNbY10udmFsdWVIYXNoW2xdLnZhbHVlO3ZhciBrPVtdO2ZvcihsZXQgdD0wO3Q8dGhpcy5vdmVyYWxsVGhyZXNob2xkcy5sZW5ndGg7dCsrKWsucHVzaCh7dGhyZXNob2xkOnRoaXMub3ZlcmFsbFRocmVzaG9sZHNbdF0udGhyZXNob2xkfSk7az17dmFsdWU6cSx2YWx1ZTI6cix0aHJlc2hvbGQ6ayxvcGVuZWQ6ITF9O2QucHVzaChrKTtmW3RoaXMuY3JlYXRlQ29tYmluZWRWYWx1ZVN0cmluZ18ocSxyKV09a319dGhpcy5zZXQoImZlYXR1cmVWYWx1ZVRocmVzaG9sZHMiLGQpO3RoaXMuc2V0KCJmZWF0dXJlVmFsdWVUaHJlc2hvbGRzTWFwIixmKTt0aGlzLnJlZnJlc2hJbmZlcmVuY2VzXyghMSl9LGxhYmVsRmVhdHVyZVNlbGVjdGVkXzpmdW5jdGlvbigpe3JlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e3RoaXMudXBkYXRlSW5mZXJlbmNlU3RhdHNfKCEwKTsKdGhpcy5yZWZyZXNoRGl2ZV8oKX0pfSxzaWRlVGFiU2VsZWN0ZWRDaGFuZ2VkXzpmdW5jdGlvbihhKXtpZigxPT1hKXJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e3RoaXMudXBkYXRlSW5mZXJlbmNlU3RhdHNfKCEwKX0pO2Vsc2UgaWYoMj09YSl7YT10aGlzLiQub3ZlcnZpZXcucXVlcnlTZWxlY3RvckFsbCgiZmFjZXRzLW92ZXJ2aWV3LXRhYmxlIik7Zm9yKGxldCBjPTA7YzxhLmxlbmd0aDtjKyspYVtjXS5faGFuZGxlUmVzaXplKCl9fSx1cGRhdGVJbmZlcmVuY2VTdGF0c186ZnVuY3Rpb24oYSl7aWYodGhpcy5pbmZlcmVuY2VTdGF0c18mJnRoaXMudmlzZGF0YSYmIiIhPXRoaXMuc2VsZWN0ZWRMYWJlbEZlYXR1cmUmJjAhPXRoaXMuZXhhbXBsZXNBbmRJbmZlcmVuY2VzLmxlbmd0aCYmbnVsbCE9dGhpcy5leGFtcGxlc0FuZEluZmVyZW5jZXNbMF0uaW5mZXJlbmNlcyYmdGhpcy5leGFtcGxlc0FuZEluZmVyZW5jZXNbMF0uaW5mZXJlbmNlc1swXS5sZW5ndGg9PXRoaXMubnVtTW9kZWxzJiYKKHRoaXMuaW5mZXJlbmNlU3RhdHNfLmxlbmd0aD09dGhpcy5udW1Nb2RlbHN8fGEpKXtpZihhKXt2YXIgYz1bXSxkPVtdO2Zvcih2YXIgZj0wO2Y8dGhpcy5udW1Nb2RlbHM7ZisrKXt2YXIgZz17fTtpZih0aGlzLmlzQmluYXJ5Q2xhc3NpZmljYXRpb25fKHRoaXMubW9kZWxUeXBlLHRoaXMubXVsdGlDbGFzcykpe2cudGhyZXNob2xkcz1bXTtmb3IodmFyIGw9MDsxMDE+bDtsKyspZy50aHJlc2hvbGRzLnB1c2goe1RQOjAsRlA6MCxGTjowLFROOjB9KTtnLmZhY2V0ZWQ9e307Zm9yKGw9MDtsPHRoaXMuZXhhbXBsZXNBbmRJbmZlcmVuY2VzLmxlbmd0aDtsKyspe3ZhciBrPXRoaXMudmlzZGF0YVtsXSxtPW51bGw7aWYoIiIhPXRoaXMuc2VsZWN0ZWRCcmVha2Rvd25GZWF0dXJlKXt2YXIgcD10aGlzLmNyZWF0ZUNvbWJpbmVkVmFsdWVTdHJpbmdfKGtbdGhpcy5zZWxlY3RlZEJyZWFrZG93bkZlYXR1cmVdLGtbdGhpcy5zZWxlY3RlZFNlY29uZEJyZWFrZG93bkZlYXR1cmVdKTttPWcuZmFjZXRlZFtwXTsKaWYoIW0pe2cuZmFjZXRlZFtwXT1bXTtmb3IobT0wOzEwMT5tO20rKylnLmZhY2V0ZWRbcF0ucHVzaCh7VFA6MCxGUDowLEZOOjAsVE46MH0pO209Zy5mYWNldGVkW3BdfX1wPXRoaXMuZ2V0Q2xhc3NpZmljYXRpb25CZXN0Tm9uWmVybyhsLGYpO2Zvcih2YXIgcT0wOzEwMD49cSYmIShxPjEwMCpwLnNjb3JlKTtxKyspK2tbdGhpcy5zZWxlY3RlZExhYmVsRmVhdHVyZV09PStwLmxhYmVsPyhnLnRocmVzaG9sZHNbcV0uVFArPTEsbSYmKG1bcV0uVFArPTEpKTooZy50aHJlc2hvbGRzW3FdLkZQKz0xLG0mJihtW3FdLkZQKz0xKSk7Zm9yKDsxMDA+PXE7cSsrKW51bGw9PWtbdGhpcy5zZWxlY3RlZExhYmVsRmVhdHVyZV18fDA9PStrW3RoaXMuc2VsZWN0ZWRMYWJlbEZlYXR1cmVdPyhnLnRocmVzaG9sZHNbcV0uVE4rPTEsbSYmKG1bcV0uVE4rPTEpKTooZy50aHJlc2hvbGRzW3FdLkZOKz0xLG0mJihtW3FdLkZOKz0xKSl9dGhpcy5hbGxDb25mTWF0cml4TGFiZWxzPVtdO3RoaXMuY2FsY1RocmVzaG9sZFN0YXRzKGcudGhyZXNob2xkcyk7CmZvcih2YXIgciBpbiBnLmZhY2V0ZWQpZy5mYWNldGVkLmhhc093blByb3BlcnR5KHIpJiZ0aGlzLmNhbGNUaHJlc2hvbGRTdGF0cyhnLmZhY2V0ZWRbcl0pfWVsc2UgaWYodGhpcy5pc011bHRpQ2xhc3NfKHRoaXMubW9kZWxUeXBlLHRoaXMubXVsdGlDbGFzcykpe2cucmVzdWx0cz17fTtnLmZhY2V0ZWQ9e307bD1uZXcgU2V0O2ZvcihrPTA7azx0aGlzLmV4YW1wbGVzQW5kSW5mZXJlbmNlcy5sZW5ndGg7aysrKXttPXRoaXMudmlzZGF0YVtrXTtwPW51bGw7IiIhPXRoaXMuc2VsZWN0ZWRCcmVha2Rvd25GZWF0dXJlJiYocT10aGlzLmNyZWF0ZUNvbWJpbmVkVmFsdWVTdHJpbmdfKG1bdGhpcy5zZWxlY3RlZEJyZWFrZG93bkZlYXR1cmVdLG1bdGhpcy5zZWxlY3RlZFNlY29uZEJyZWFrZG93bkZlYXR1cmVdKSxwPWcuZmFjZXRlZFtxXSxwfHwoZy5mYWNldGVkW3FdPXt9LHA9Zy5mYWNldGVkW3FdKSk7dmFyIHQ9Zy5yZXN1bHRzW21bdGhpcy5zZWxlY3RlZExhYmVsRmVhdHVyZV1dOwp0fHwoZy5yZXN1bHRzW21bdGhpcy5zZWxlY3RlZExhYmVsRmVhdHVyZV1dPXt9LHQ9Zy5yZXN1bHRzW21bdGhpcy5zZWxlY3RlZExhYmVsRmVhdHVyZV1dKTtxPXRoaXMuc3RyV2l0aE1vZGVsTmFtZV8oIiBJbmZlcmVuY2UgdmFsdWUiLGYpO2xldCB2PXRbbVtxXV07bC5hZGQoU3RyaW5nKG1bcV0pKTtsLmFkZChTdHJpbmcobVt0aGlzLnNlbGVjdGVkTGFiZWxGZWF0dXJlXSkpO3RbbVtxXV09bnVsbD09dj8xOnRbbVtxXV0rMTtwJiYodD1wW21bdGhpcy5zZWxlY3RlZExhYmVsRmVhdHVyZV1dLHR8fChwW21bdGhpcy5zZWxlY3RlZExhYmVsRmVhdHVyZV1dPXt9LHQ9cFttW3RoaXMuc2VsZWN0ZWRMYWJlbEZlYXR1cmVdXSksdFttW3FdXT1udWxsPT10W21bcV1dPzE6dFttW3FdXSsxKX10aGlzLmFsbENvbmZNYXRyaXhMYWJlbHM9QXJyYXkuZnJvbShsLnZhbHVlcygpKX1lbHNle2cucmVzdWx0cz17ZXJyb3JzOltdfTtnLmZhY2V0ZWQ9e307Zm9yKGw9MDtsPHRoaXMuZXhhbXBsZXNBbmRJbmZlcmVuY2VzLmxlbmd0aDtsKyspbT0KdGhpcy52aXNkYXRhW2xdLGs9bnVsbCwiIiE9dGhpcy5zZWxlY3RlZEJyZWFrZG93bkZlYXR1cmUmJihwPXRoaXMuY3JlYXRlQ29tYmluZWRWYWx1ZVN0cmluZ18obVt0aGlzLnNlbGVjdGVkQnJlYWtkb3duRmVhdHVyZV0sbVt0aGlzLnNlbGVjdGVkU2Vjb25kQnJlYWtkb3duRmVhdHVyZV0pLGs9Zy5mYWNldGVkW3BdLGt8fChnLmZhY2V0ZWRbcF09e2Vycm9yczpbXX0saz1nLmZhY2V0ZWRbcF0pKSxtPW1bdGhpcy5zdHJXaXRoTW9kZWxOYW1lXygiIEluZmVyZW5jZSB2YWx1ZSIsZildLW1bdGhpcy5zZWxlY3RlZExhYmVsRmVhdHVyZV0sZy5yZXN1bHRzLmVycm9ycy5wdXNoKG0pLGsmJmsuZXJyb3JzLnB1c2gobSk7ZC5wdXNoKHRoaXMuZmlsbEluUmVncmVzc2lvblN0YXRzKGcucmVzdWx0cyx0aGlzLmZvcm1hdENoYXJ0S2V5KCJBbGwgZGF0YXBvaW50cyIsZix0aGlzLm51bU1vZGVscykpKTtmb3IobGV0IHYgaW4gZy5mYWNldGVkKWQucHVzaCh0aGlzLmZpbGxJblJlZ3Jlc3Npb25TdGF0cyhnLmZhY2V0ZWRbdl0sCnRoaXMuZm9ybWF0Q2hhcnRLZXkodixmLHRoaXMubnVtTW9kZWxzKSkpfWMucHVzaChnKX1kPXRoaXMuc29ydFJlZ3Jlc3Npb25FbnRyaWVzKGQpO3RoaXMucmVncmVzc2lvbkVudHJpZXNfPVtdO3RoaXMucmVncmVzc2lvbkVudHJpZXNfPWQ7dGhpcy5pbmZlcmVuY2VTdGF0c189Y31jPXRoaXMuZmVhdHVyZVZhbHVlVGhyZXNob2xkczt0aGlzLmZlYXR1cmVWYWx1ZVRocmVzaG9sZHM9W107dGhpcy5mZWF0dXJlVmFsdWVUaHJlc2hvbGRzPXRoaXMuc29ydEZlYXR1cmVWYWx1ZXMoYyk7aWYodGhpcy5pc0JpbmFyeUNsYXNzaWZpY2F0aW9uXyh0aGlzLm1vZGVsVHlwZSx0aGlzLm11bHRpQ2xhc3MpKXtmb3IoYz0wO2M8dGhpcy5mZWF0dXJlVmFsdWVUaHJlc2hvbGRzLmxlbmd0aDtjKyspe2Q9W107Zj1bXTtnPXRoaXMuZmVhdHVyZVZhbHVlVGhyZXNob2xkc1tjXS50aHJlc2hvbGQ7Zm9yKHI9MDtyPGcubGVuZ3RoO3IrKylkLnB1c2godGhpcy5pbmZlcmVuY2VTdGF0c19bcl0uZmFjZXRlZFt0aGlzLmNyZWF0ZUNvbWJpbmVkVmFsdWVTdHJpbmdfKHRoaXMuZmVhdHVyZVZhbHVlVGhyZXNob2xkc1tjXS52YWx1ZSwKdGhpcy5mZWF0dXJlVmFsdWVUaHJlc2hvbGRzW2NdLnZhbHVlMildKSxmLnB1c2goZ1tyXS50aHJlc2hvbGQpO3RoaXMucGxvdENoYXJ0KHRoaXMuJCQoIiMiK3RoaXMuZ2V0Um9jQ2hhcnRJZChjKSksZCxmLGEsITApO3RoaXMucGxvdENoYXJ0KHRoaXMuJCQoIiMiK3RoaXMuZ2V0UHJDaGFydElkKGMpKSxkLGYsYSwhMSl9Yz1bXTtkPVtdO2ZvcihmPTA7Zjx0aGlzLmluZmVyZW5jZVN0YXRzXy5sZW5ndGg7ZisrKWMucHVzaCh0aGlzLmluZmVyZW5jZVN0YXRzX1tmXS50aHJlc2hvbGRzKSxkLnB1c2godGhpcy5vdmVyYWxsVGhyZXNob2xkc1tmXS50aHJlc2hvbGQpO3RoaXMucGxvdENoYXJ0KHRoaXMuJCQoIiNyb2NjaGFydCIpLGMsZCxhLCEwKTt0aGlzLnBsb3RDaGFydCh0aGlzLiQkKCIjcHJjaGFydCIpLGMsZCxhLCExKX10aGlzLnVwZGF0ZUNvcnJlY3RuZXNzXygpfX0sc29ydEZlYXR1cmVWYWx1ZXM6ZnVuY3Rpb24oYSl7Y29uc3QgYz10aGlzLmluZmVyZW5jZVN0YXRzX1swXTsKYT1hLmZpbHRlcihkPT50aGlzLmlzUmVncmVzc2lvbl8odGhpcy5tb2RlbFR5cGUpPzA8dGhpcy5nZXRSZWdyZXNzaW9uQ291bnQoYyxkKTp0aGlzLmlzQmluYXJ5Q2xhc3NpZmljYXRpb25fKHRoaXMubW9kZWxUeXBlLHRoaXMubXVsdGlDbGFzcyk/MDx0aGlzLmdldEJpbmFyeUNsYXNzaWZpY2F0aW9uQ291bnQoYyxkKTowPHRoaXMuZ2V0TXVsdGljbGFzc0NsYXNzaWZpY2F0aW9uQ291bnQoYyxkKSk7cmV0dXJuIGEuc29ydCgoZCxmKT0+e2lmKCJDb3VudCI9PXRoaXMuc2VsZWN0ZWRGZWF0dXJlU29ydClyZXR1cm4gdGhpcy5pc1JlZ3Jlc3Npb25fKHRoaXMubW9kZWxUeXBlKT90aGlzLmdldFJlZ3Jlc3Npb25Db3VudChjLGYpLXRoaXMuZ2V0UmVncmVzc2lvbkNvdW50KGMsZCk6dGhpcy5pc0JpbmFyeUNsYXNzaWZpY2F0aW9uXyh0aGlzLm1vZGVsVHlwZSx0aGlzLm11bHRpQ2xhc3MpP3RoaXMuZ2V0QmluYXJ5Q2xhc3NpZmljYXRpb25Db3VudChjLGYpLXRoaXMuZ2V0QmluYXJ5Q2xhc3NpZmljYXRpb25Db3VudChjLApkKTp0aGlzLmdldE11bHRpY2xhc3NDbGFzc2lmaWNhdGlvbkNvdW50KGMsZiktdGhpcy5nZXRNdWx0aWNsYXNzQ2xhc3NpZmljYXRpb25Db3VudChjLGQpO2lmKCJBbHBoYWJldGljYWwiPT10aGlzLnNlbGVjdGVkRmVhdHVyZVNvcnQpcmV0dXJuIHRoaXMuZ2V0UHJpbnRhYmxlVmFsdWVfKGQpLmxvY2FsZUNvbXBhcmUodGhpcy5nZXRQcmludGFibGVWYWx1ZV8oZikpO2lmKCJBY2N1cmFjeSI9PXRoaXMuc2VsZWN0ZWRGZWF0dXJlU29ydClyZXR1cm4gdGhpcy5pc0JpbmFyeUNsYXNzaWZpY2F0aW9uXyh0aGlzLm1vZGVsVHlwZSx0aGlzLm11bHRpQ2xhc3MpPyt0aGlzLmdldEFjY3VyYWN5TW9kZWxJbmRleCh0aGlzLmluZmVyZW5jZVN0YXRzXyxmLnRocmVzaG9sZCwwLGYpLSt0aGlzLmdldEFjY3VyYWN5TW9kZWxJbmRleCh0aGlzLmluZmVyZW5jZVN0YXRzXyxkLnRocmVzaG9sZCwwLGQpOit0aGlzLmdldE11bHRpQ2xhc3NBY2N1cmFjeU1vZGVsSW5kZXgodGhpcy5pbmZlcmVuY2VTdGF0c18sCjAsZiktK3RoaXMuZ2V0TXVsdGlDbGFzc0FjY3VyYWN5TW9kZWxJbmRleCh0aGlzLmluZmVyZW5jZVN0YXRzXywwLGQpO2lmKCJGYWxzZSBwb3NpdGl2ZXMiPT10aGlzLnNlbGVjdGVkRmVhdHVyZVNvcnQpcmV0dXJuK3RoaXMuZ2V0RlBNb2RlbEluZGV4KHRoaXMuaW5mZXJlbmNlU3RhdHNfLGYudGhyZXNob2xkLDAsZiktK3RoaXMuZ2V0RlBNb2RlbEluZGV4KHRoaXMuaW5mZXJlbmNlU3RhdHNfLGQudGhyZXNob2xkLDAsZCk7aWYoIkZhbHNlIG5lZ2F0aXZlcyI9PXRoaXMuc2VsZWN0ZWRGZWF0dXJlU29ydClyZXR1cm4gdGhpcy5nZXRGTk1vZGVsSW5kZXgoK3RoaXMuaW5mZXJlbmNlU3RhdHNfLGYudGhyZXNob2xkLDAsZiktK3RoaXMuZ2V0Rk5Nb2RlbEluZGV4KHRoaXMuaW5mZXJlbmNlU3RhdHNfLGQudGhyZXNob2xkLDAsZCl9KX0sc29ydFJlZ3Jlc3Npb25FbnRyaWVzOmZ1bmN0aW9uKGEpe3JldHVybiBhLnNvcnQoKGMsZCk9PntpZigiQ291bnQiPT10aGlzLnNlbGVjdGVkRmVhdHVyZVNvcnQpcmV0dXJuIGQuY291bnQtCmMuY291bnQ7aWYoIkFscGhhYmV0aWNhbCI9PXRoaXMuc2VsZWN0ZWRGZWF0dXJlU29ydClyZXR1cm4gYy5uYW1lLmxvY2FsZUNvbXBhcmUoZC5uYW1lKTtpZigiTWVhbiBlcnJvciI9PXRoaXMuc2VsZWN0ZWRGZWF0dXJlU29ydClyZXR1cm4gZC5tZWFuRXJyb3ItYy5tZWFuRXJyb3I7aWYoIk1lYW4gYWJzb2x1dGUgZXJyb3IiPT10aGlzLnNlbGVjdGVkRmVhdHVyZVNvcnQpcmV0dXJuIGQubWVhbkFic0Vycm9yLWMubWVhbkFic0Vycm9yO2lmKCJNZWFuIHNxdWFyZWQgZXJyb3IiPT10aGlzLnNlbGVjdGVkRmVhdHVyZVNvcnQpcmV0dXJuIGQubWVhblNxdWFyZWRFcnJvci1jLm1lYW5TcXVhcmVkRXJyb3I7aWYoIk1lZGlhbiBlcnJvciI9PXRoaXMuc2VsZWN0ZWRGZWF0dXJlU29ydClyZXR1cm4gZC5tZWRpYW5FcnJvci1jLm1lZGlhbkVycm9yO2lmKCJNZWRpYW4gYWJzb2x1dGUgZXJyb3IiPT10aGlzLnNlbGVjdGVkRmVhdHVyZVNvcnQpcmV0dXJuIGQubWVkaWFuQWJzRXJyb3ItYy5tZWRpYW5BYnNFcnJvcjsKaWYoIk1lZGlhbiBzcXVhcmVkIGVycm9yIj09dGhpcy5zZWxlY3RlZEZlYXR1cmVTb3J0KXJldHVybiBkLm1lZGlhblNxdWFyZWRFcnJvci1jLm1lZGlhblNxdWFyZWRFcnJvcn0pfSxmaWxsSW5SZWdyZXNzaW9uU3RhdHM6ZnVuY3Rpb24oYSxjKXtmdW5jdGlvbiBkKGspe3JldHVybiBrLnJlZHVjZSgobSxwKT0+bStwLDApL2subGVuZ3RofWZ1bmN0aW9uIGYoayl7aWYoMD09ay5sZW5ndGgpcmV0dXJuIE5hTjtrPWsuc29ydCgocCxxKT0+cC1xKTtjb25zdCBtPWsubGVuZ3RoLzI7cmV0dXJuIDE9PWsubGVuZ3RoP2tbMF06MD09ay5sZW5ndGglMj9rW21dOihrW01hdGguZmxvb3IobSldK2tbTWF0aC5jZWlsKG0pXSkvMn1jb25zdCBnPWEuZXJyb3JzLm1hcChrPT5NYXRoLmFicyhrKSksbD1hLmVycm9ycy5tYXAoaz0+ayprKTtyZXR1cm57bmFtZTpjLG1lYW5FcnJvcjpkKGEuZXJyb3JzKSxtZWFuQWJzRXJyb3I6ZChnKSxtZWFuU3F1YXJlZEVycm9yOmQobCksbWVkaWFuRXJyb3I6ZihhLmVycm9ycyksCm1lZGlhbkFic0Vycm9yOmYoZyksbWVkaWFuU3F1YXJlZEVycm9yOmYobCksY291bnQ6YS5lcnJvcnMubGVuZ3RofX0scGxvdENoYXJ0OmZ1bmN0aW9uKGEsYyxkLGYsZyl7aWYoYyYmY1swXSYmYSl7dmFyIGw9W10saz1bXSxtPWc/IkZQUiI6IlRQUiIscD1nPyJUUFIiOiJQUFYiLHE9Zz8iRlBSIjoiUmVjYWxsIixyPWc/IlRQUiI6IlByZWNpc2lvbiI7Zm9yKGxldCB0PTA7dDxjLmxlbmd0aDt0Kyspe2xldCB2PW51bGw7Y29uc3QgQT1jW3RdLm1hcCgoeSx4KT0+ey41PngtMTAwKmRbdF0mJih2PXtzdGVwOnlbbV0sc2NhbGFyOnlbcF0sdGhyZXNob2xkOngvMTAwfSk7cmV0dXJue3N0ZXA6eVttXSxzY2FsYXI6eVtwXSx0aHJlc2hvbGQ6eC8xMDB9fSkucmV2ZXJzZSgpO2Euc2V0U2VyaWVzRGF0YSh0aGlzLnN0cldpdGhNb2RlbE5hbWVfKCJUaHJlc2hvbGQgc2V0Iix0KSxbdl0pO2YmJihhLnNldFNlcmllc0RhdGEodGhpcy5zdHJXaXRoTW9kZWxOYW1lXygiUk9DIix0KSxBKSxsLnB1c2godGhpcy5zdHJXaXRoTW9kZWxOYW1lXygiUk9DIiwKdCkpLGwucHVzaCh0aGlzLnN0cldpdGhNb2RlbE5hbWVfKCJUaHJlc2hvbGQgc2V0Iix0KSksay5wdXNoKHRoaXMucm9jQ3VydmVMaW5lQ29sb3JzW3RdKSxrLnB1c2godGhpcy5yb2NDdXJ2ZUNvbG9yc1t0XSkpfWlmKGYpe2NvbnN0IHQ9ZDMuZm9ybWF0KCIuMmYiKTthLnhBeGlzRm9ybWF0dGVyPWQzLmZvcm1hdCgiLjJmIik7Y29uc3Qgdj1kMy5mb3JtYXQoIiwuMSIpO2Y9W3t0aXRsZToiVGhyZXNob2xkIixldmFsdWF0ZTpmdW5jdGlvbihBKXtyZXR1cm4gdChBLmRhdHVtLnRocmVzaG9sZCl9fSx7dGl0bGU6cixldmFsdWF0ZTpmdW5jdGlvbihBKXtyZXR1cm4gZz92KEEuZGF0dW0uc2NhbGFyKTp0KEEuZGF0dW0uc2NhbGFyKX19LHt0aXRsZTpxLGV2YWx1YXRlOmZ1bmN0aW9uKEEpe3JldHVybiBnP3YoQS5kYXR1bS5zdGVwKTp0KEEuZGF0dW0uc3RlcCl9fV07MTxjLmxlbmd0aCYmZi5wdXNoKHt0aXRsZToiTW9kZWwiLGV2YWx1YXRlOmZ1bmN0aW9uKEEpe0E9QS5kYXRhc2V0Lm1ldGFkYXRhKCkubmFtZS5zcGxpdCgiICIpOwpyZXR1cm4gQVtBLmxlbmd0aC0xXX19KTthLnRvb2x0aXBDb2x1bW5zPWY7YS5jb2xvclNjYWxlPShuZXcgUGxvdHRhYmxlLlNjYWxlcy5Db2xvcikucmFuZ2Uoayk7YS5jb2xvclNjYWxlLmRvbWFpbihsKTthLnNldFZpc2libGVTZXJpZXMobCl9fX0sY2FsY1RocmVzaG9sZFN0YXRzOmZ1bmN0aW9uKGEpe2ZvcihsZXQgYz0wO2M8YS5sZW5ndGg7YysrKWFbY10uVFBSPTA8YVtjXS5UUCthW2NdLkZOP2FbY10uVFAvKGFbY10uVFArYVtjXS5GTik6MCxhW2NdLkZQUj0wPGFbY10uRlArYVtjXS5UTj9hW2NdLkZQLyhhW2NdLkZQK2FbY10uVE4pOjAsYVtjXS5QUFY9MDxhW2NdLlRQK2FbY10uRlA/YVtjXS5UUC8oYVtjXS5UUCthW2NdLkZQKTowfSxvcHRpbWl6YXRpb25TZWxlY3RlZENoYW5nZWRfOmZ1bmN0aW9uKGEpeyJjdXN0b20iIT1hJiYoInVuYXdhcmUiPT1hP3RoaXMub3B0aW1pemVUaHJlc2hvbGRDbGlja2VkXygpOiJncm91cCI9PWE/dGhpcy5vcHRpbWl6ZUZhY2V0ZWRUaHJlc2hvbGRzQ2xpY2tlZF8oKToKImRlbW9wYXJpdHkiPT1hP3RoaXMuZGVtb1Bhcml0eUNsaWNrZWRfKCk6ImVxdWFsYWNjIj09YT90aGlzLmVxdWFsQWNjQ2xpY2tlZF8oKToiZXF1YWxvcHAiPT1hJiZ0aGlzLmVxdWFsT3Bwb0NsaWNrZWRfKCksdGhpcy51cGRhdGVJbmZlcmVuY2VTdGF0c18oITApKX0sY29zdFJhdGlvQ2hhbmdlZF86ZnVuY3Rpb24oKXt0aGlzLnJlc2V0T3B0aW1pemF0aW9uU2VsZWN0ZWRfKCl9LHJlc2V0T3B0aW1pemF0aW9uU2VsZWN0ZWRfOmZ1bmN0aW9uKCl7Y29uc3QgYT10aGlzLiQkKCIjY3VzdG9tdGhyZXNoIik7bnVsbCE9YSYmYS5jbGljaygpfSxvcHRpbWl6ZVRocmVzaG9sZENsaWNrZWRfOmZ1bmN0aW9uKCl7Zm9yKGxldCBhPTA7YTx0aGlzLmluZmVyZW5jZVN0YXRzXy5sZW5ndGg7YSsrKXtjb25zdCBjPXRoaXMuZmluZE9wdGltYWxUaHJlc2hvbGRfKHRoaXMuaW5mZXJlbmNlU3RhdHNfW2FdLnRocmVzaG9sZHMpO3RoaXMuc2V0KCJvdmVyYWxsVGhyZXNob2xkcy4iK2ErIi50aHJlc2hvbGQiLApjKTtpZih0aGlzLmZlYXR1cmVWYWx1ZVRocmVzaG9sZHMpZm9yKGxldCBkPTA7ZDx0aGlzLmZlYXR1cmVWYWx1ZVRocmVzaG9sZHMubGVuZ3RoO2QrKyl0aGlzLnNldCgiZmVhdHVyZVZhbHVlVGhyZXNob2xkcy4iK2QrIi50aHJlc2hvbGQuIithKyIudGhyZXNob2xkIixjKX19LG9wdGltaXplRmFjZXRlZFRocmVzaG9sZHNDbGlja2VkXzpmdW5jdGlvbigpe2ZvcihsZXQgYT0wO2E8dGhpcy5pbmZlcmVuY2VTdGF0c18ubGVuZ3RoO2ErKyl7Y29uc3QgYz1PYmplY3Qua2V5cyh0aGlzLmluZmVyZW5jZVN0YXRzX1thXS5mYWNldGVkKTtmb3IobGV0IGQ9MDtkPGMubGVuZ3RoO2QrKyl0aGlzLnNldCgiZmVhdHVyZVZhbHVlVGhyZXNob2xkcy4iK2QrIi50aHJlc2hvbGQuIithKyIudGhyZXNob2xkIix0aGlzLmZpbmRPcHRpbWFsVGhyZXNob2xkXyh0aGlzLmluZmVyZW5jZVN0YXRzX1thXS5mYWNldGVkW2NbZF1dKSl9fSxmaW5kT3B0aW1hbFRocmVzaG9sZF86ZnVuY3Rpb24oYSl7bGV0IGM9Ck51bWJlci5QT1NJVElWRV9JTkZJTklUWSxkPTA7Zm9yKGxldCBmPTA7ZjxhLmxlbmd0aDtmKyspe2NvbnN0IGc9dGhpcy5nZXRDb3N0KGFbZl0pO2c8PWMmJihjPWcsZD1mKX1yZXR1cm4gZC8xMDB9LGVxdWFsT3Bwb0NsaWNrZWRfOmZ1bmN0aW9uKCl7dGhpcy5nZXRCZXN0VGhyZXNob2xkc0J5RmFpcm5lc3NNZWFzdXJlXyhhPT5hLlRQLyhhLlRQK2EuRk4pKX0sZXF1YWxBY2NDbGlja2VkXzpmdW5jdGlvbigpe3RoaXMuZ2V0QmVzdFRocmVzaG9sZHNCeUZhaXJuZXNzTWVhc3VyZV8oYT0+KGEuVFArYS5UTikvKGEuVFArYS5GUCthLlROK2EuRk4pKX0sZGVtb1Bhcml0eUNsaWNrZWRfOmZ1bmN0aW9uKCl7dGhpcy5nZXRCZXN0VGhyZXNob2xkc0J5RmFpcm5lc3NNZWFzdXJlXyhhPT4oYS5UUCthLkZQKS8oYS5UUCthLkZQK2EuVE4rYS5GTikpfSxnZXRCZXN0VGhyZXNob2xkc0J5RmFpcm5lc3NNZWFzdXJlXzpmdW5jdGlvbihhKXtmb3IobGV0IGY9MDtmPHRoaXMuaW5mZXJlbmNlU3RhdHNfLmxlbmd0aDtmKyspe3ZhciBjPQpOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksZD1udWxsO2NvbnN0IGc9dGhpcy5pbmZlcmVuY2VTdGF0c19bZl0sbD1PYmplY3Qua2V5cyhnLmZhY2V0ZWQpLGs9Zy5mYWNldGVkW2xbMF1dO2ZvcihsZXQgbT0wO208ay5sZW5ndGg7bSsrKXtjb25zdCBwPWEoa1ttXSkscT1bbV07bGV0IHI9dGhpcy5nZXRDb3N0KGtbbV0pO2ZvcihsZXQgdD0xO3Q8bC5sZW5ndGg7dCsrKXtjb25zdCB2PWcuZmFjZXRlZFtsW3RdXSxBPXRoaXMudGhyZXNob2xkQ2xvc2VzdFRvTWVhc3VyZSh2LHAsYSk7cS5wdXNoKEEpO3IrPXRoaXMuZ2V0Q29zdCh2W0FdKX1yPD1jJiYoYz1yLGQ9cSl9Zm9yKGM9MDtjPGwubGVuZ3RoO2MrKyl0aGlzLnNldCgiZmVhdHVyZVZhbHVlVGhyZXNob2xkc01hcC4iK2xbY10rIi50aHJlc2hvbGQuIitmKyIudGhyZXNob2xkIixkW2NdLzEwMCk7Zm9yKGQ9MDtkPHRoaXMuZmVhdHVyZVZhbHVlVGhyZXNob2xkcy5sZW5ndGg7ZCsrKXRoaXMuc2V0KCJmZWF0dXJlVmFsdWVUaHJlc2hvbGRzLiIrCmQrIi50aHJlc2hvbGQuIitmKyIudGhyZXNob2xkIix0aGlzLmZlYXR1cmVWYWx1ZVRocmVzaG9sZHNbZF0udGhyZXNob2xkW2ZdLnRocmVzaG9sZCl9fSxnZXRDb3N0OmZ1bmN0aW9uKGEpe3JldHVybiBhLkZQKnRoaXMuaW5jb3JyZWN0UHJlZENvc3RSYXRpbythLkZOfSx0aHJlc2hvbGRDbG9zZXN0VG9NZWFzdXJlOmZ1bmN0aW9uKGEsYyxkKXtsZXQgZj1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksZz0wO2ZvcihsZXQgaz0wO2s8YS5sZW5ndGg7aysrKXt2YXIgbD1kKGFba10pO2w9TWF0aC5hYnMobC1jKTtsPD1mJiYoZz1rLGY9bCl9cmV0dXJuIGd9LGdldENsYXNzaWZpY2F0aW9uQmVzdE5vblplcm86ZnVuY3Rpb24oYSxjKXtsZXQgZD0wO2NvbnN0IGY9dGhpcy5leGFtcGxlc0FuZEluZmVyZW5jZXNbYV0uaW5mZXJlbmNlcy5sZW5ndGgtMTtmb3IobGV0IGc9MDtnPHRoaXMuZXhhbXBsZXNBbmRJbmZlcmVuY2VzW2FdLmluZmVyZW5jZXNbZl1bY10ubGVuZ3RoO2crKylpZigwIT09Cit0aGlzLmV4YW1wbGVzQW5kSW5mZXJlbmNlc1thXS5pbmZlcmVuY2VzW2ZdW2NdW2ddLmxhYmVsKXtkPWc7YnJlYWt9cmV0dXJuIHRoaXMuZXhhbXBsZXNBbmRJbmZlcmVuY2VzW2FdLmluZmVyZW5jZXNbZl1bY11bZF19LGdldENvbmZ1c2lvbkNvdW50c01vZGVsSW5kZXg6ZnVuY3Rpb24oYSxjLGQsZil7cmV0dXJuIHRoaXMub3ZlcmFsbFRocmVzaG9sZHMubGVuZ3RoIT10aGlzLm51bU1vZGVsc3x8dGhpcy5pbmZlcmVuY2VTdGF0c18ubGVuZ3RoIT10aGlzLm51bU1vZGVscz97fTp0aGlzLmdldENvbmZ1c2lvbkNvdW50cyh0aGlzLmluZmVyZW5jZVN0YXRzX1tkXSxjW2RdLnRocmVzaG9sZCxmKX0sZ2V0VG90YWxFbnRyaWVzSW5Db25mQ291bnRzOmZ1bmN0aW9uKGEpe2lmKG51bGw9PWEpcmV0dXJuIDA7bGV0IGM9MDtjb25zdCBkPU9iamVjdC5rZXlzKGEpO2ZvcihsZXQgZj0wO2Y8ZC5sZW5ndGg7ZisrKXtjb25zdCBnPWFbZFtmXV0sbD1PYmplY3Qua2V5cyhnKTtmb3IobGV0IGs9CjA7azxsLmxlbmd0aDtrKyspYys9Z1tsW2tdXX1yZXR1cm4gY30sZ2V0RlBNb2RlbEluZGV4OmZ1bmN0aW9uKGEsYyxkLGYpe2E9dGhpcy5nZXRDb25mdXNpb25Db3VudHNNb2RlbEluZGV4KGEsYyxkLGYpO2lmKDA9PU9iamVjdC5rZXlzKGEpLmxlbmd0aClyZXR1cm4gbnVsbDtjPWEuTm8uWWVzO3JldHVybiBkMy5mb3JtYXQoIiwuMWYiKShjL3RoaXMuZ2V0VG90YWxFbnRyaWVzSW5Db25mQ291bnRzKGEpKjEwMCl9LGdldEZOTW9kZWxJbmRleDpmdW5jdGlvbihhLGMsZCxmKXthPXRoaXMuZ2V0Q29uZnVzaW9uQ291bnRzTW9kZWxJbmRleChhLGMsZCxmKTtpZigwPT1PYmplY3Qua2V5cyhhKS5sZW5ndGgpcmV0dXJuIDA7Yz1hLlllcy5ObztyZXR1cm4gZDMuZm9ybWF0KCIsLjFmIikoYy90aGlzLmdldFRvdGFsRW50cmllc0luQ29uZkNvdW50cyhhKSoxMDApfSxnZXRBY2N1cmFjeU1vZGVsSW5kZXg6ZnVuY3Rpb24oYSxjLGQsZil7YT10aGlzLmdldENvbmZ1c2lvbkNvdW50c01vZGVsSW5kZXgoYSwKYyxkLGYpO2lmKDA9PU9iamVjdC5rZXlzKGEpLmxlbmd0aClyZXR1cm4gMDtjPWEuWWVzLlllcythLk5vLk5vO3JldHVybiBkMy5mb3JtYXQoIiwuMWYiKShjL3RoaXMuZ2V0VG90YWxFbnRyaWVzSW5Db25mQ291bnRzKGEpKjEwMCl9LGdldEYxTW9kZWxJbmRleDpmdW5jdGlvbihhLGMsZCxmKXtjb25zdCBnPWQzLmZvcm1hdCgiLC4yZiIpO2Q9dGhpcy5nZXRDb25mdXNpb25Db3VudHNNb2RlbEluZGV4KGEsYyxkLGYpO2lmKDA9PU9iamVjdC5rZXlzKGQpLmxlbmd0aClyZXR1cm4gMDthPWQuWWVzLlllcztjPWQuTm8uWWVzO2Q9ZC5ZZXMuTm87aWYoMD09YSlyZXR1cm4gMCE9Y3x8MCE9ZD9nKDApOmcoMSk7Yz1hLyhhK2MpO2EvPWErZDtyZXR1cm4gZygyKmMqYS8oYythKSl9LGdldEZlYXR1cmVWYWx1ZUNvdW50OmZ1bmN0aW9uKGEsYyxkKXtyZXR1cm4gdGhpcy5nZXRUb3RhbEVudHJpZXNJbkNvbmZDb3VudHModGhpcy5nZXRDb25mdXNpb25Db3VudHNNb2RlbEluZGV4KGEsYywwLApkKSl9LGdldENvbmZ1c2lvbk1hdHJpeExhYmVsOmZ1bmN0aW9uKGEsYyl7cmV0dXJuIDI+Yz8iIjp0aGlzLmdldE1vZGVsTmFtZV8oYSl9LGdldENvbmZ1c2lvbk1hdHJpeENvbG9yOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmNvbmZNYXRyaXhDb2xvcnNbYV19LGdldENvbmZ1c2lvbkNvdW50cyhhLGMsZCl7bGV0IGY9bnVsbCxnPW51bGw7bnVsbCE9ZCYmKGY9ZC52YWx1ZSxnPWQudmFsdWUyKTtyZXR1cm57Tm86e05vOnRoaXMuZ2V0Q29uZk1hdHJpeFZhbHVlKGEsYywiVE4iLGYsZyksWWVzOnRoaXMuZ2V0Q29uZk1hdHJpeFZhbHVlKGEsYywiRlAiLGYsZyl9LFllczp7Tm86dGhpcy5nZXRDb25mTWF0cml4VmFsdWUoYSxjLCJGTiIsZixnKSxZZXM6dGhpcy5nZXRDb25mTWF0cml4VmFsdWUoYSxjLCJUUCIsZixnKX19fSxnZXRDb25mTWF0cml4VmFsdWU6ZnVuY3Rpb24oYSxjLGQsZixnKXtjPU1hdGguZmxvb3IoMTAwKmMpO2lmKCFhLnRocmVzaG9sZHMpcmV0dXJuIDA7aWYobnVsbD09PQpmKXJldHVybiBhLnRocmVzaG9sZHNbY11bZF07Zj10aGlzLmNyZWF0ZUNvbWJpbmVkVmFsdWVTdHJpbmdfKGYsZyk7cmV0dXJuIG51bGw9PWEuZmFjZXRlZFtmXT8wOmEuZmFjZXRlZFtmXVtjXVtkXX0sZ2V0TXVsdGlDbGFzc0NvbmZNYXRyaXg6ZnVuY3Rpb24oYSxjLGQpe3JldHVybiAwPT1hLmxlbmd0aD97fTpudWxsPT1kP2FbY10ucmVzdWx0czphW2NdLmZhY2V0ZWRbdGhpcy5nZXRQcmludGFibGVWYWx1ZV8oZCldfSxnZXRNdWx0aUNsYXNzRmVhdHVyZVZhbHVlQ291bnQ6ZnVuY3Rpb24oYSxjKXtyZXR1cm4gdGhpcy5nZXRUb3RhbEVudHJpZXNJbkNvbmZDb3VudHModGhpcy5nZXRNdWx0aUNsYXNzQ29uZk1hdHJpeChhLDAsYykpfSxnZXRNdWx0aUNsYXNzQWNjdXJhY3lNb2RlbEluZGV4OmZ1bmN0aW9uKGEsYyxkKXthPXRoaXMuZ2V0TXVsdGlDbGFzc0NvbmZNYXRyaXgoYSxjLGQpO2lmKG51bGw9PWEpcmV0dXJuIG51bGw7Yz0wO2Q9T2JqZWN0LmtleXMoYSk7Zm9yKGxldCBmPQowO2Y8ZC5sZW5ndGg7ZisrKXtjb25zdCBnPWFbZFtmXV0sbD1PYmplY3Qua2V5cyhnKTtmb3IobGV0IGs9MDtrPGwubGVuZ3RoO2srKylkW2ZdPT1sW2tdJiYoYys9Z1tsW2tdXSl9cmV0dXJuIGQzLmZvcm1hdCgiLC4xZiIpKGMvdGhpcy5nZXRUb3RhbEVudHJpZXNJbkNvbmZDb3VudHMoYSkqMTAwKX0sZ2V0SW5mZXJlbmNlU3RhdDpmdW5jdGlvbihhLGMsZCxmKXthPWM/YS5mYWNldGVkW3RoaXMuZ2V0UHJpbnRhYmxlVmFsdWVfKGMpXTphLnJlc3VsdHM7aWYoIWEpcmV0dXJuIG51bGw7ZD1kKGEpO3JldHVybiBmP2YoZCk6ZH0sZ2V0UmVncmVzc2lvbk1lYW46ZnVuY3Rpb24oYSxjKXtyZXR1cm4gdGhpcy5nZXRJbmZlcmVuY2VTdGF0KGEsYyxkPT5kLm1lYW4sZDMuZm9ybWF0KCIuM2YiKSl9LGdldFJlZ3Jlc3Npb25BYnNNZWFuOmZ1bmN0aW9uKGEsYyl7cmV0dXJuIHRoaXMuZ2V0SW5mZXJlbmNlU3RhdChhLGMsZD0+ZC5hYnNNZWFuLGQzLmZvcm1hdCgiLjNmIikpfSxnZXRSZWdyZXNzaW9uU3F1YXJlZE1lYW46ZnVuY3Rpb24oYSwKYyl7cmV0dXJuIHRoaXMuZ2V0SW5mZXJlbmNlU3RhdChhLGMsZD0+ZC5zcXVhcmVkTWVhbixkMy5mb3JtYXQoIi4zZiIpKX0sZ2V0UmVncmVzc2lvbkNvdW50OmZ1bmN0aW9uKGEsYyl7YT10aGlzLmdldEluZmVyZW5jZVN0YXQoYSxjLGQ9PmQuZXJyb3JzLmxlbmd0aCxudWxsKTtyZXR1cm4gbnVsbD09YT8wOmF9LGdldEJpbmFyeUNsYXNzaWZpY2F0aW9uQ291bnQ6ZnVuY3Rpb24oYSxjKXtyZXR1cm4gdGhpcy5nZXRJbmZlcmVuY2VTdGF0KGEsYyxkPT5PYmplY3QudmFsdWVzKGRbMF0pLnJlZHVjZSgoZixnKT0+ZitnKSxudWxsKX0sZ2V0TXVsdGljbGFzc0NsYXNzaWZpY2F0aW9uQ291bnQ6ZnVuY3Rpb24oYSxjKXtyZXR1cm4gdGhpcy5nZXRJbmZlcmVuY2VTdGF0KGEsYyxkPT5PYmplY3QudmFsdWVzKGQpLnJlZHVjZSgoZixnKT0+e2xldCBsPTA7Y29uc3Qgaz1PYmplY3Qua2V5cyhnKTtmb3IobGV0IG09MDttPGsubGVuZ3RoO20rKylsKz1nW2tbbV1dO3JldHVybiBmK2x9LDApLApudWxsKX0sZ2V0Um9jQ2hhcnRJZDpmdW5jdGlvbihhKXtyZXR1cm4icm9jY2hhcnQiK2F9LGdldFByQ2hhcnRJZDpmdW5jdGlvbihhKXtyZXR1cm4icHJjaGFydCIrYX0sZ2V0UHJpbnRhYmxlVmFsdWVfOmZ1bmN0aW9uKGEpe2xldCBjO2M9YS52YWx1ZXx8MD09PWEudmFsdWU/U3RyaW5nKGEudmFsdWUpOiJceDNjZmVhdHVyZSB2YWx1ZSBtaXNzaW5nXHgzZSI7aWYoIiI9PXRoaXMuc2VsZWN0ZWRTZWNvbmRCcmVha2Rvd25GZWF0dXJlKXJldHVybiBjO2MrPSIvIjtyZXR1cm4gYz1hLnZhbHVlMnx8MD09PWEudmFsdWUyP2MrYS52YWx1ZTI6YysiXHgzY2ZlYXR1cmUgdmFsdWUgbWlzc2luZ1x4M2UifSxnZXRGZWF0dXJlTmFtZV86ZnVuY3Rpb24oYSl7cmV0dXJuIDA9PT1hLmxlbmd0aD8iXHgzY25vbmVceDNlIjphfSxnZXRDb3VudGVyZmFjdHVhbE1vZGVsTmFtZV86ZnVuY3Rpb24oYSl7cmV0dXJuIk1vZGVsOiAiK2F9LGdldENsYXNzTmFtZV86ZnVuY3Rpb24oYSl7cmV0dXJuIDA9PT0KYS5sZW5ndGg/Ilx4M2Nub25lXHgzZSI6YX0sc2hvdWxkU2hvd092ZXJhbGxUaHJlc2hvbGRlcl86ZnVuY3Rpb24oYSl7cmV0dXJuIDA9PT1hLmxlbmd0aH0sY29tcHV0ZVNlbGVjdGVkRXhhbXBsZUFuZEluZmVyZW5jZTpmdW5jdGlvbigpe3RoaXMuY291bnRlcmZhY3R1YWxFeGFtcGxlQW5kSW5mZXJlbmNlPW51bGw7dGhpcy5zZWxlY3RlZCYmdGhpcy5leGFtcGxlc0FuZEluZmVyZW5jZXM/KHRoaXMuc2VsZWN0ZWRFeGFtcGxlQW5kSW5mZXJlbmNlPTA8dGhpcy5zZWxlY3RlZC5sZW5ndGg/dGhpcy5leGFtcGxlc0FuZEluZmVyZW5jZXNbdGhpcy5zZWxlY3RlZFswXV06bnVsbCxudWxsPT10aGlzLnNlbGVjdGVkRXhhbXBsZUFuZEluZmVyZW5jZT90aGlzLmdsb2JhbFBkUGxvdHM9ITA6KHRoaXMuZ2xvYmFsUGRQbG90cz0hMSwiZGl2ZSIhPXRoaXMudmlzTW9kZSYmdGhpcy5zaG93UGFydGlhbERlcGVuZGVuY2VQbG90c18oKSkpOnRoaXMuc2VsZWN0ZWRFeGFtcGxlQW5kSW5mZXJlbmNlPQpudWxsfSxzZXRBdHRyaWJ1dGlvbnM6ZnVuY3Rpb24oKXtjb25zdCBhPXt9LGM9dGhpcy52aXNkYXRhW3RoaXMuc2VsZWN0ZWRbMF1dLGQ9L2F0dHJpYnV0aW9uc19fKC4qKS8sZj0vYXR0cmlidXRpb25zX18oLiopX2tleXMvO2ZvcihsZXQgbCBpbiBjKXt2YXIgZz1kLmV4ZWMobCk7aWYoZyl7Zz1uZXcgUmVnRXhwKCJeKGZlYXR1cmVzX18pPyIrZ1sxXSsiJCIpO2ZvcihsZXQgayBpbiBjKWlmKGcudGVzdChrKSl7YVtrXT1jW2xdO2JyZWFrfX1pZihnPWYuZXhlYyhsKSl7Zz1uZXcgUmVnRXhwKCJeKGZlYXR1cmVzX18pPyIrZ1sxXSsiJCIpO2ZvcihsZXQgayBpbiBjKWlmKGcudGVzdChrKSl7Zz1jW2xdO2NvbnN0IG09Y1tsLnJlcGxhY2UoIl9rZXlzIiwiX3ZhbHVlcyIpXSxwPUFycmF5LmFwcGx5KG51bGwsQXJyYXkoQXJyYXkuaXNBcnJheShjW2tdKT9jW2tdLmxlbmd0aDoxKSkubWFwKE51bWJlci5wcm90b3R5cGUudmFsdWVPZiwwKTtmb3IobGV0IHE9MDtxPGcubGVuZ3RoO3ErKyl7bGV0IHI9CmNba10uaW5kZXhPZihnW3FdKTstMSE9ciYmKHBbcl09bVtxXSl9YVtrXT1wO2JyZWFrfX19dGhpcy5hdHRyaWJ1dGlvbj1hfSxzaG91bGREaXNhYmxlR2V0RXhhbXBsZXNCdXR0b25fOmZ1bmN0aW9uKGEpe3JldHVybiAwPT1hLmxlbmd0aH0sc2hvdWxkRGlzYWJsZUluZmVyQnV0dG9uXzpmdW5jdGlvbihhLGMsZCxmKXtyZXR1cm4gMD09YS5sZW5ndGh8fDA9PWMubGVuZ3RofHwwPT1kLmxlbmd0aHx8IWZ9LGFyZUV4YW1wbGVzRWRpdGFibGVfOmZ1bmN0aW9uKGEsYyl7cmV0dXJuIDAhPWEubGVuZ3RoJiYwIT1jLmxlbmd0aH0sbmV3SW5mZXJlbmNlc186ZnVuY3Rpb24oKXt0aGlzLnNwaW5uZXJIaWRkZW5fPSEwO3RoaXMudXBkYXRlSW5mZXJlbmNlc18oITApO3JlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+dGhpcy51cGRhdGVJbmZlcmVuY2VTdGF0c18oITApKX0scmVmcmVzaEluZmVyZW5jZXNOb1JlZ2VuXzpmdW5jdGlvbigpe3RoaXMucmVmcmVzaEluZmVyZW5jZXNfKCEwKTtyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9Pgp0aGlzLnVwZGF0ZUluZmVyZW5jZVN0YXRzXyghMCkpfSxyZWZyZXNoSW5mZXJlbmNlc186ZnVuY3Rpb24oYSl7dGhpcy51cGRhdGVJbmZlcmVuY2VzXyghMSk7cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT50aGlzLnVwZGF0ZUluZmVyZW5jZVN0YXRzXyghYSkpfSx1cGRhdGVJbmZlcmVuY2VzXzpmdW5jdGlvbihhKXtpZih0aGlzLmV4YW1wbGVzQW5kSW5mZXJlbmNlcyYmdGhpcy5pbmZlcmVuY2VzLmluZGljZXMmJjAhPXRoaXMuaW5mZXJlbmNlcy5pbmRpY2VzLmxlbmd0aCYmdGhpcy5pbmZlcmVuY2VzLnJlc3VsdHMubGVuZ3RoPT10aGlzLm51bU1vZGVscyl7dmFyIGM9e30sZD0hIXRoaXMuaW5mZXJlbmNlcy5yZXN1bHRzWzBdLmNsYXNzaWZpY2F0aW9uUmVzdWx0O2ZvcihsZXQgaz0wO2s8dGhpcy5pbmZlcmVuY2VzLmluZGljZXMubGVuZ3RoO2srKylpZihkKXtjW3RoaXMuaW5mZXJlbmNlcy5pbmRpY2VzW2tdXT1bXTtmb3IodmFyIGY9MDtmPHRoaXMuaW5mZXJlbmNlcy5yZXN1bHRzLmxlbmd0aDtmKyspe2NvbnN0IG09CnRoaXMuaW5mZXJlbmNlcy5yZXN1bHRzW2ZdLmNsYXNzaWZpY2F0aW9uUmVzdWx0O2ZvcihsZXQgcD0wO3A8bS5jbGFzc2lmaWNhdGlvbnNba10uY2xhc3Nlcy5sZW5ndGg7cCsrKSIiPT1tLmNsYXNzaWZpY2F0aW9uc1trXS5jbGFzc2VzW3BdLmxhYmVsJiYobS5jbGFzc2lmaWNhdGlvbnNba10uY2xhc3Nlc1twXS5sYWJlbD1wLnRvU3RyaW5nKCkpO2NbdGhpcy5pbmZlcmVuY2VzLmluZGljZXNba11dW2ZdPW0uY2xhc3NpZmljYXRpb25zW2tdLmNsYXNzZXMuc29ydCgocCxxKT0+cS5zY29yZS1wLnNjb3JlKX19ZWxzZSBmb3IoY1t0aGlzLmluZmVyZW5jZXMuaW5kaWNlc1trXV09W10sZj0wO2Y8dGhpcy5pbmZlcmVuY2VzLnJlc3VsdHMubGVuZ3RoO2YrKyljW3RoaXMuaW5mZXJlbmNlcy5pbmRpY2VzW2tdXVtmXT1be2xhYmVsOiIiLHNjb3JlOnRoaXMuaW5mZXJlbmNlcy5yZXN1bHRzW2ZdLnJlZ3Jlc3Npb25SZXN1bHQucmVncmVzc2lvbnNba10udmFsdWV9XTt0aGlzLnNldCgiZXhhbXBsZXNBbmRJbmZlcmVuY2VzIiwKdGhpcy5leGFtcGxlc0FuZEluZmVyZW5jZXMubWFwKGZ1bmN0aW9uKGssbSl7bGV0IHA9ay5pbmZlcmVuY2VzP2suaW5mZXJlbmNlczpbXTtjW21dJiZhJiYocD1wLmNvbmNhdChbY1ttXV0pKTtyZXR1cm57ZXhhbXBsZTprLmV4YW1wbGUsaW5mZXJlbmNlczpwLGNoYW5nZWQ6ay5jaGFuZ2VkLG9yaWc6ay5vcmlnfX0pKTt2YXIgZz10aGlzLGw9ITE7dGhpcy52aXNkYXRhLmZvckVhY2goZnVuY3Rpb24oayxtKXtpZihkKWcuc2V0SXRlbUluZmVyZW5jZVZhbHVlKGssbSxnLnNlbGVjdGVkQnJlYWtkb3duRmVhdHVyZSxnLnNlbGVjdGVkU2Vjb25kQnJlYWtkb3duRmVhdHVyZSk7ZWxzZSBmb3IodmFyIHA9MDtwPGcubnVtTW9kZWxzO3ArKylrW2cuc3RyV2l0aE1vZGVsTmFtZV8oIiBJbmZlcmVuY2UgdmFsdWUiLHApXT1nLmV4YW1wbGVzQW5kSW5mZXJlbmNlc1ttXS5pbmZlcmVuY2VzW2cuZXhhbXBsZXNBbmRJbmZlcmVuY2VzW21dLmluZmVyZW5jZXMubGVuZ3RoLTFdW3BdWzBdLnNjb3JlOwppZihkJiYwPGcubGFiZWxWb2NhYi5sZW5ndGgpe2ZvcihwPTA7cDxnLmV4YW1wbGVzQW5kSW5mZXJlbmNlc1ttXS5pbmZlcmVuY2VzLmxlbmd0aDtwKyspZm9yKGxldCBxPTA7cTxnLmV4YW1wbGVzQW5kSW5mZXJlbmNlc1ttXS5pbmZlcmVuY2VzW3BdLmxlbmd0aDtxKyspZm9yKGxldCByPTA7cjxnLmV4YW1wbGVzQW5kSW5mZXJlbmNlc1ttXS5pbmZlcmVuY2VzW3BdW3FdLmxlbmd0aDtyKyspZy5leGFtcGxlc0FuZEluZmVyZW5jZXNbbV0uaW5mZXJlbmNlc1twXVtxXVtyXS52b2NhYkxhYmVsPWcubGFiZWxWb2NhYltnLmV4YW1wbGVzQW5kSW5mZXJlbmNlc1ttXS5pbmZlcmVuY2VzW3BdW3FdW3JdLmxhYmVsXTtmb3IobT0wO208Zy5udW1Nb2RlbHM7bSsrKWtbZy5zdHJXaXRoTW9kZWxOYW1lXygiIEluZmVyZW5jZSBsYWJlbCIsbSldPWcubGFiZWxWb2NhYltrW2cuc3RyV2l0aE1vZGVsTmFtZV8oIiBJbmZlcmVuY2UgdmFsdWUiLG0pXV07bD0hMH19KTt0aGlzLnVwZGF0ZUNvcnJlY3RuZXNzXygpOwp0aGlzLnJlZnJlc2hEaXZlXygpO3RoaXMuaW5mZXJlbmNlcy5pbmRpY2VzLmxlbmd0aD09dGhpcy5leGFtcGxlc0FuZEluZmVyZW5jZXMubGVuZ3RoJiYodGhpcy4kLmRpdmUuY29sb3JCeT1sP3RoaXMuc3RyV2l0aE1vZGVsTmFtZV8oIiBJbmZlcmVuY2UgbGFiZWwiLDApOnRoaXMuc3RyV2l0aE1vZGVsTmFtZV8oIiBJbmZlcmVuY2UgdmFsdWUiLDApLHRoaXMuaXNSZWdyZXNzaW9uXyh0aGlzLm1vZGVsVHlwZSk/KHRoaXMuJC5kaXZlLmhvcml6b250YWxQb3NpdGlvbj10aGlzLnN0cldpdGhNb2RlbE5hbWVfKCIgSW5mZXJlbmNlIHZhbHVlIiwwKSwxPHRoaXMubnVtTW9kZWxzJiYodGhpcy4kLmRpdmUudmVydGljYWxQb3NpdGlvbj10aGlzLnN0cldpdGhNb2RlbE5hbWVfKCIgSW5mZXJlbmNlIHZhbHVlIiwxKSkpOnRoaXMuaXNCaW5hcnlDbGFzc2lmaWNhdGlvbl8odGhpcy5tb2RlbFR5cGUsdGhpcy5tdWx0aUNsYXNzKSYmKDE9PXRoaXMubnVtTW9kZWxzP3RoaXMuJC5kaXZlLnZlcnRpY2FsUG9zaXRpb249CnRoaXMuc3RyV2l0aE1vZGVsTmFtZV8oIiBJbmZlcmVuY2Ugc2NvcmUiLDApOih0aGlzLiQuZGl2ZS5ob3Jpem9udGFsUG9zaXRpb249dGhpcy5zdHJXaXRoTW9kZWxOYW1lXygiIEluZmVyZW5jZSBzY29yZSIsMCksdGhpcy4kLmRpdmUudmVydGljYWxQb3NpdGlvbj10aGlzLnN0cldpdGhNb2RlbE5hbWVfKCIgSW5mZXJlbmNlIHNjb3JlIiwxKSkpKTt0aGlzLnVwZGF0ZWRFeGFtcGxlPSExfX0sbmV3QXR0cmlidXRpb25zXzpmdW5jdGlvbihhKXtpZigwIT1PYmplY3Qua2V5cyhhKS5sZW5ndGgpe2ZvcihsZXQgYz0wO2M8YS5pbmRpY2VzLmxlbmd0aDtjKyspe2NvbnN0IGQ9YS5pbmRpY2VzW2NdLGY9T2JqZWN0LmFzc2lnbih7fSx0aGlzLnZpc2RhdGFbZF0pLGc9bnVsbD09YS5hdHRyaWJ1dGlvbnNbMF0/e306YS5hdHRyaWJ1dGlvbnNbMF1bY10sbD1PYmplY3Qua2V5cyhnKTtmb3IobGV0IGs9MDtrPGwubGVuZ3RoO2srKylBcnJheS5pc0FycmF5KGdbbFtrXV0pJiYyPT1nW2xba11dLmxlbmd0aCYmCkFycmF5LmlzQXJyYXkoZ1tsW2tdXVswXSk/KGZbImF0dHJpYnV0aW9uc19fIitsW2tdKyJfa2V5cyJdPWdbbFtrXV1bMF0sZlsiYXR0cmlidXRpb25zX18iK2xba10rIl92YWx1ZXMiXT1nW2xba11dWzFdKTpmWyJhdHRyaWJ1dGlvbnNfXyIrbFtrXV09Z1tsW2tdXTt0aGlzLnNldChgdmlzZGF0YS4ke2R9YCxmKX10aGlzLnNldEF0dHJpYnV0aW9ucygpO3RoaXMucmVmcmVzaERpdmVfKCl9fSxzZXRJdGVtSW5mZXJlbmNlVmFsdWU6ZnVuY3Rpb24oYSxjLGQsZil7dmFyIGc9dGhpcy5leGFtcGxlc0FuZEluZmVyZW5jZXNbY10uaW5mZXJlbmNlcy5sZW5ndGgtMTtpZih0aGlzLm11bHRpQ2xhc3MpZm9yKGQ9MDtkPHRoaXMubnVtTW9kZWxzO2QrKylhW3RoaXMuc3RyV2l0aE1vZGVsTmFtZV8oIiBJbmZlcmVuY2UgdmFsdWUiLGQpXT10aGlzLmV4YW1wbGVzQW5kSW5mZXJlbmNlc1tjXS5pbmZlcmVuY2VzW2ddW2RdWzBdLmxhYmVsO2Vsc2UgZm9yKGc9dGhpcy5vdmVyYWxsVGhyZXNob2xkcywKMCE9PWQubGVuZ3RoJiYoZz10aGlzLmZlYXR1cmVWYWx1ZVRocmVzaG9sZHNNYXBbdGhpcy5jcmVhdGVDb21iaW5lZFZhbHVlU3RyaW5nXyhhW2RdLGFbZl0pXS50aHJlc2hvbGQpLGQ9MDtkPHRoaXMubnVtTW9kZWxzO2QrKylmPXRoaXMuZ2V0Q2xhc3NpZmljYXRpb25CZXN0Tm9uWmVybyhjLGQpLGFbdGhpcy5zdHJXaXRoTW9kZWxOYW1lXygiIEluZmVyZW5jZSBzY29yZSIsZCldPWYuc2NvcmUsYVt0aGlzLnN0cldpdGhNb2RlbE5hbWVfKCIgSW5mZXJlbmNlIHZhbHVlIixkKV09Zi5zY29yZT49Z1tkXS50aHJlc2hvbGQ/Zi5sYWJlbDp0aGlzLmRlZmF1bHRJbmZlcmVuY2VMYWJlbC50b1N0cmluZygpfSxjcmVhdGVDb21iaW5lZFZhbHVlU3RyaW5nXzpmdW5jdGlvbihhLGMpe2E9bnVsbD09YT8iIjphO3JldHVybiBudWxsPT1jfHwiIj09Yz9hOmErKCIvIitjKX0sdXBkYXRlQ29ycmVjdG5lc3NfOmZ1bmN0aW9uKCl7aWYodGhpcy5zZWxlY3RlZExhYmVsRmVhdHVyZSYmdGhpcy5leGFtcGxlc0FuZEluZmVyZW5jZXMpZm9yKGxldCBhPQowO2E8dGhpcy5leGFtcGxlc0FuZEluZmVyZW5jZXMubGVuZ3RoO2ErKyl7Y29uc3QgYz10aGlzLnZpc2RhdGFbYV07Zm9yKGxldCBkPTA7ZDx0aGlzLm51bU1vZGVscztkKyspImNsYXNzaWZpY2F0aW9uIj09dGhpcy5tb2RlbFR5cGU/Y1t0aGlzLnN0cldpdGhNb2RlbE5hbWVfKCIgSW5mZXJlbmNlIGNvcnJlY3QiLGQpXT1jW3RoaXMuc2VsZWN0ZWRMYWJlbEZlYXR1cmVdPT1jW3RoaXMuc3RyV2l0aE1vZGVsTmFtZV8oIiBJbmZlcmVuY2UgdmFsdWUiLGQpXT8iY29ycmVjdCI6ImluY29ycmVjdCI6KGNbdGhpcy5zdHJXaXRoTW9kZWxOYW1lXygiIEluZmVyZW5jZSBlcnJvciIsZCldPWNbdGhpcy5zdHJXaXRoTW9kZWxOYW1lXygiIEluZmVyZW5jZSB2YWx1ZSIsZCldLWNbdGhpcy5zZWxlY3RlZExhYmVsRmVhdHVyZV0sY1t0aGlzLnN0cldpdGhNb2RlbE5hbWVfKCIgSW5mZXJlbmNlIGFic29sdXRlIGVycm9yIixkKV09TWF0aC5hYnMoY1t0aGlzLnN0cldpdGhNb2RlbE5hbWVfKCIgSW5mZXJlbmNlIGVycm9yIiwKZCldKSxjW3RoaXMuc3RyV2l0aE1vZGVsTmFtZV8oIiBJbmZlcmVuY2Ugc3F1YXJlZCBlcnJvciIsZCldPWNbdGhpcy5zdHJXaXRoTW9kZWxOYW1lXygiIEluZmVyZW5jZSBlcnJvciIsZCldKmNbdGhpcy5zdHJXaXRoTW9kZWxOYW1lXygiIEluZmVyZW5jZSBlcnJvciIsZCldKX19LGluZmVyQ2xpY2tlZF86ZnVuY3Rpb24oKXtjb25zdCBhPXtpbmZlcmVuY2VfYWRkcmVzczp0aGlzLmluZmVyZW5jZUFkZHJlc3MsbW9kZWxfbmFtZTp0aGlzLm1vZGVsTmFtZSxtb2RlbF90eXBlOnRoaXMubW9kZWxUeXBlLG1vZGVsX3ZlcnNpb246dGhpcy5tb2RlbFZlcnNpb24sbW9kZWxfc2lnbmF0dXJlOnRoaXMubW9kZWxTaWduYXR1cmUsbGFiZWxfdm9jYWJfcGF0aDp0aGlzLmxhYmVsVm9jYWJQYXRoLHVzZV9wcmVkaWN0OnRoaXMudXNlUHJlZGljdEFwaSxwcmVkaWN0X291dHB1dF90ZW5zb3I6dGhpcy5wcmVkaWN0T3V0cHV0VGVuc29yLHByZWRpY3RfaW5wdXRfdGVuc29yOnRoaXMucHJlZGljdElucHV0VGVuc29yfTsKdGhpcy5zcGlubmVySGlkZGVuXz0hMTtpZighdGhpcy5sb2NhbCl7Y29uc3QgYz10aGlzLm1ha2VVcmxfKCIvZGF0YS9wbHVnaW4vd2hhdGlmL2luZmVyIixhKTt0aGlzLm1ha2VBc3luY1JlcXVlc3RfKGMsZD0+e3RoaXMuc3Bpbm5lckhpZGRlbl89ITA7dGhpcy5sYWJlbFZvY2FiPUpTT04ucGFyc2UoZC52YWx1ZS52b2NhYik7dGhpcy5pbmZlcmVuY2VzPUpTT04ucGFyc2UoZC52YWx1ZS5pbmZlcmVuY2VzKX0sbnVsbCwibW9kZWwgaW5mZXJlbmNlIil9dGhpcy5maXJlKCJpbmZlci1leGFtcGxlcyIsYSl9LGV4YW1wbGVDaGFuZ2VfOmZ1bmN0aW9uKGEpe3ZhciBjPTA9PXRoaXMuc2VsZWN0ZWQubGVuZ3RoPzA6dGhpcy5zZWxlY3RlZFswXTt0aGlzLnNldCgic2VsZWN0ZWRFeGFtcGxlQW5kSW5mZXJlbmNlLmNoYW5nZWQiLCEwKTt0aGlzLnVwZGF0ZUV4YW1wbGVfKEpTT04uc3RyaW5naWZ5KGEudGFyZ2V0Lmpzb24pLGMpO3RoaXMuJCQoIiMiK3RoaXMuZ2V0SW5mZXJlbmNlSG9sZGVySWRfKCkpLmluZmVyZW5jZT0KbnVsbDt0aGlzLnZpc2RhdGFbY109dGhpcy5leGFtcGxlVG9EYXRhUG9pbnRfKGEudGFyZ2V0Lmpzb24sYyk7dGhpcy5zaG93TmVhcmVzdENvdW50ZXJmYWN0dWFsPSExO3RoaXMucmVmcmVzaERpdmVfKCk7dGhpcy51cGRhdGVkRXhhbXBsZT0hMDt0aGlzLnNlbGVjdGVkRGF0YVVwZGF0ZWRfKCl9LHJlZnJlc2hEaXZlSW1wbF86ZnVuY3Rpb24oKXt2YXIgYT10aGlzLnZpc2RhdGE7dGhpcy52aXNkYXRhPVtdO3RoaXMudmlzZGF0YT1hO3RoaXMuc2VsZWN0ZWRFeGFtcGxlTWF4PXRoaXMudmlzZGF0YS5sZW5ndGgtMTt0aGlzLiQub3ZlcnZpZXcucHJvdG9JbnB1dD10aGlzLiQub3ZlcnZpZXcuZ2V0U3RhdHNQcm90byhbe25hbWU6IiIsZGF0YTphfV0pO3RoaXMuY2FsY3VsYXRlRGlzdGFuY2VTdGF0c18odGhpcy4kLm92ZXJ2aWV3LnByb3RvSW5wdXQudG9PYmplY3QoKSk7YT10aGlzLiQuZGl2ZS5zZWxlY3RlZERhdGE7dGhpcy4kLmRpdmUuc2VsZWN0ZWREYXRhPVtdO3RoaXMuJC5kaXZlLnNlbGVjdGVkRGF0YT0KYTt0aGlzLnVwZGF0ZVNwcml0ZSgpfSxyZWZyZXNoRGl2ZV86ZnVuY3Rpb24oKXt0aGlzLmRlYm91bmNlKCJyZWZyZXNoRGl2ZURlYm91bmNlIiwoKT0+dGhpcy5yZWZyZXNoRGl2ZUltcGxfKCksNTAwKX0sY2FsY3VsYXRlRGlzdGFuY2VTdGF0c186ZnVuY3Rpb24oYSl7dGhpcy5kaXN0YW5jZVN0YXRzXz17fTtmb3IobGV0IGM9MDtjPGEuZGF0YXNldHNMaXN0WzBdLmZlYXR1cmVzTGlzdC5sZW5ndGg7YysrKXtjb25zdCBkPWEuZGF0YXNldHNMaXN0WzBdLmZlYXR1cmVzTGlzdFtjXSxmPWQubmFtZTt0aGlzLmRpc3RhbmNlU3RhdHNfW2ZdPXt9O2lmKGQubnVtU3RhdHMpdGhpcy5kaXN0YW5jZVN0YXRzX1tmXS5zdGREZXY9ZC5udW1TdGF0cy5zdGREZXY7ZWxzZXtsZXQgZz0wO2NvbnN0IGw9ZC5zdHJpbmdTdGF0cy5yYW5rSGlzdG9ncmFtLmJ1Y2tldHNMaXN0O2ZvcihsZXQgaz0wO2s8bC5sZW5ndGg7aysrKXtjb25zdCBtPWxba10uc2FtcGxlQ291bnQvZC5zdHJpbmdTdGF0cy5jb21tb25TdGF0cy5udW1Ob25NaXNzaW5nOwpnKz1tKm19dGhpcy5kaXN0YW5jZVN0YXRzX1tmXS5wcm9iU2FtZVZhbHVlPWd9fX0sdXBkYXRlRXhhbXBsZV86ZnVuY3Rpb24oYSxjKXt0aGlzLmZpcmUoInVwZGF0ZS1leGFtcGxlIix7ZXhhbXBsZTphLGluZGV4OmN9KTtpZighdGhpcy5sb2NhbCl7dmFyIGQ9dGhpcy5tYWtlVXJsXygiL2RhdGEvcGx1Z2luL3doYXRpZi91cGRhdGVfZXhhbXBsZSIsbnVsbCk7dGhpcy5tYWtlQXN5bmNSZXF1ZXN0XyhkLG51bGwse2V4YW1wbGU6YSxpbmRleDpjfSwiZGF0YXBvaW50IHVwZGF0ZSIpfX0sZ2V0SW5mZXJlbmNlSG9sZGVySWRfOmZ1bmN0aW9uKCl7cmV0dXJuImluZmVyZW5jZV8ifSxtYWtlVXJsXzpmdW5jdGlvbihhLGMpe2MmJihhKz0iPyIrT2JqZWN0LmtleXMoYykubWFwKGQ9PmQrIlx4M2QiK2VuY29kZVVSSUNvbXBvbmVudChjW2RdKSkuam9pbigiXHgyNiIpKTtyZXR1cm4gYX0sc2hvd1RvYXN0XzpmdW5jdGlvbihhKXt2YXIgYz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJwYXBlci10b2FzdCIpOwpjLmR1cmF0aW9uPTFFNDtkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGMpO2MudGV4dD1hO2Muc2hvdygpO2NvbnNvbGUuZXJyb3IoYSl9LGhhbmRsZUVycm9yOmZ1bmN0aW9uKGEpe3RoaXMuc2hvd1RvYXN0XyhhKTt0aGlzLmV4YW1wbGVTdGF0dXNTdHI9YTt0aGlzLnNwaW5uZXJIaWRkZW5fPSEwfSxtYWtlQXN5bmNSZXF1ZXN0XzpmdW5jdGlvbihhLGMsZCxmLGc9KCk9Pnt9KXtjb25zdCBsPXRoaXMuX2NhbmNlbGxlci5jYW5jZWxsYWJsZShrPT57ay5jYW5jZWxsZWR8fChrLnZhbHVlJiZrLnZhbHVlLmVycm9yPyh0aGlzLmhhbmRsZUVycm9yKGsudmFsdWUuZXJyb3IpLG51bGwhPWcmJmcoKSk6YyYmYyhrKSl9KTt0aGlzLl9yZXF1ZXN0TWFuYWdlci5yZXF1ZXN0KGEsZCkudGhlbihsKS5jYXRjaChrPT57dGhpcy5oYW5kbGVFcnJvcihgUmVxdWVzdCBmb3IgJHtmfSBmYWlsZWQ6ICR7a31gKTtudWxsIT1nJiZnKCl9KX0sZGF0YVBvaW50VmFsdWVGcm9tRmVhdHVyZV86ZnVuY3Rpb24oYSwKYyl7bGV0IGQ9bnVsbDthLmludDY0TGlzdD9kPWEuaW50NjRMaXN0LnZhbHVlOmEuZmxvYXRMaXN0P2Q9YS5mbG9hdExpc3QudmFsdWU6YS5ieXRlc0xpc3QmJmEuYnl0ZXNMaXN0LnZhbHVlJiYoZD1hLmJ5dGVzTGlzdC52YWx1ZS5tYXAoZj0+e2lmKDFFNTxmLmxlbmd0aClyZXR1cm4iRVJST1I6IHN0cmluZyBub3QgZGVjb2RlZCBkdWUgdG8gbGVuZ3RoIjt0cnl7cmV0dXJuIGF0b2IoZil9Y2F0Y2goZyl7cmV0dXJuIGNvbnNvbGUuZXJyb3IoIkVycm9yIGRlY29kaW5nIHN0cmluZzogIitnKSwiRVJST1I6IGVycm9yIGRlY29kaW5nIHN0cmluZyJ9fSkpO3JldHVybiBjJiZkJiYxPT1kLmxlbmd0aD8oYT1kWzBdLGlzTmFOKGEpP2E6TnVtYmVyKGEpKTpkfSxleGFtcGxlVG9EYXRhUG9pbnRfOmZ1bmN0aW9uKGEsYyl7Y29uc3QgZD17fTt2YXIgZj1hLmZlYXR1cmVzfHxhLmNvbnRleHQsZz1mJiYiZmVhdHVyZSJpbiBmP09iamVjdC5rZXlzKGYuZmVhdHVyZSk6W107Zm9yKHZhciBsIGluIGcpe3ZhciBrPQpnWytsXTtpZihrIT10aGlzLmltYWdlRmVhdHVyZU5hbWUpe3ZhciBtPXRoaXMuZGF0YVBvaW50VmFsdWVGcm9tRmVhdHVyZV8oZi5mZWF0dXJlW2tdLCEwKTtudWxsIT1tJiYoZFtrXT1tKX19Zj0iZmVhdHVyZUxpc3RzImluIGE/T2JqZWN0LmtleXMoYS5mZWF0dXJlTGlzdHMuZmVhdHVyZUxpc3QpOltdO2Zvcihjb25zdCBwIGluIGYpe2c9ZlsrcF07bD1hLmZlYXR1cmVMaXN0cy5mZWF0dXJlTGlzdFtnXS5mZWF0dXJlO2s9W107Zm9yKG09MDttPGwubGVuZ3RoO20rKyl7Y29uc3QgcT10aGlzLmRhdGFQb2ludFZhbHVlRnJvbUZlYXR1cmVfKGxbbV0sITEpO3EmJihrPWsuY29uY2F0KHEpKX1kW2ddPWt9ZFsiIERhdGFwb2ludCBJRCJdPWM7cmV0dXJuIGR9LGdldEV4YW1wbGVzQW5kQ2xvc2VTZXR0aW5nc186ZnVuY3Rpb24oKXt0aGlzLnNldHRpbmdzQ2xpY2tlZF8oKTt0aGlzLnVwZGF0ZU51bWJlck9mTW9kZWxzKCk7dGhpcy5nZXRFeGFtcGxlc18oKX0sc2hvd01vZGVsTnVtYmVyc186ZnVuY3Rpb24oKXtyZXR1cm4gMT49CnRoaXMubnVtTW9kZWxzfSx1cGRhdGVFeGFtcGxlQ29udGVudHM6ZnVuY3Rpb24oYSxjKXt0aGlzLmV4YW1wbGVTdGF0dXNTdHI9YS5sZW5ndGgrIiBkYXRhcG9pbnRzIGxvYWRlZCI7dGhpcy4kLm5vZXhhbXBsZXMuc3R5bGUuZGlzcGxheT0ibm9uZSI7dGhpcy5zcGlubmVySGlkZGVuXz0hMDt0aGlzLmV4YW1wbGVzQW5kSW5mZXJlbmNlcz1hLm1hcChmdW5jdGlvbihmKXtyZXR1cm57ZXhhbXBsZTpKU09OLnBhcnNlKGYpLGNoYW5nZWQ6ITEsb3JpZzpKU09OLnBhcnNlKGYpfX0pO3RoaXMudXBkYXRlZEV4YW1wbGU9ITA7Y29uc3QgZD10aGlzO3RoaXMudmlzZGF0YT10aGlzLmV4YW1wbGVzQW5kSW5mZXJlbmNlcy5tYXAoZnVuY3Rpb24oZixnKXtyZXR1cm4gZC5leGFtcGxlVG9EYXRhUG9pbnRfKGYuZXhhbXBsZSxnKX0pO3RoaXMuJC5kaXZlLmF0bGFzVXJsPSIiO3RoaXMuJC5kaXZlLmltYWdlRmllbGROYW1lPSIiO3RoaXMuaGFzU3ByaXRlPWM7dGhpcy5yZWZyZXNoRGl2ZV8oKTsKdGhpcy5zaG91bGREaXNhYmxlSW5mZXJCdXR0b25fKHRoaXMuZXhhbXBsZXNBbmRJbmZlcmVuY2VzLHRoaXMubW9kZWxOYW1lLHRoaXMuaW5mZXJlbmNlQWRkcmVzcyx0aGlzLnVwZGF0ZWRFeGFtcGxlKXx8dGhpcy5pbmZlckNsaWNrZWRfKCk7dGhpcy5zZXRJbmZlcmVuY2VGcm9tRXhhbXBsZURhdGEoKX0sc2V0SW5mZXJlbmNlRnJvbUV4YW1wbGVEYXRhOmZ1bmN0aW9uKCl7aWYoMDx0aGlzLnZpc2RhdGEubGVuZ3RoKWlmKG51bGwhPXRoaXMudmlzZGF0YVswXS5wcmVkaWN0aW9uc19fcHJvYmFiaWxpdGllcyl7dmFyIGE9e30sYz1BcnJheS5hcHBseShudWxsLHtsZW5ndGg6dGhpcy52aXNkYXRhLmxlbmd0aH0pLm1hcChOdW1iZXIuY2FsbCxOdW1iZXIpO2EuaW5kaWNlcz1jO2EucmVzdWx0cz1be2NsYXNzaWZpY2F0aW9uUmVzdWx0OntjbGFzc2lmaWNhdGlvbnM6W119fV07Zm9yKHZhciBkPTA7ZDxjLmxlbmd0aDtkKyspYS5yZXN1bHRzWzBdLmNsYXNzaWZpY2F0aW9uUmVzdWx0LmNsYXNzaWZpY2F0aW9uc1tkXT0Ke2NsYXNzZXM6W3tsYWJlbDoiMCIsc2NvcmU6dGhpcy52aXNkYXRhW2RdLnByZWRpY3Rpb25zX19wcm9iYWJpbGl0aWVzWzBdfSx7bGFiZWw6IjEiLHNjb3JlOnRoaXMudmlzZGF0YVtkXS5wcmVkaWN0aW9uc19fcHJvYmFiaWxpdGllc1sxXX1dfTt0aGlzLmluZmVyZW5jZXM9YX1lbHNlIGlmKG51bGwhPXRoaXMudmlzZGF0YVswXS5wcmVkaWN0aW9ucyl7YT17fTtjPUFycmF5LmFwcGx5KG51bGwse2xlbmd0aDp0aGlzLnZpc2RhdGEubGVuZ3RofSkubWFwKE51bWJlci5jYWxsLE51bWJlcik7YS5pbmRpY2VzPWM7YS5yZXN1bHRzPVt7cmVncmVzc2lvblJlc3VsdDp7cmVncmVzc2lvbnM6W119fV07Zm9yKGQ9MDtkPGMubGVuZ3RoO2QrKylhLnJlc3VsdHNbMF0ucmVncmVzc2lvblJlc3VsdC5yZWdyZXNzaW9uc1tkXT17dmFsdWU6dGhpcy52aXNkYXRhW2RdLnByZWRpY3Rpb25zfTt0aGlzLmluZmVyZW5jZXM9YX19LGdldEV4YW1wbGVzXzpmdW5jdGlvbigpe3ZhciBhPXRoaXMubWFrZVVybF8oIi9kYXRhL3BsdWdpbi93aGF0aWYvZXhhbXBsZXNfZnJvbV9wYXRoIiwKe2V4YW1wbGVzX3BhdGg6dGhpcy5leGFtcGxlc1BhdGgsbWF4X2V4YW1wbGVzOnRoaXMubWF4RXhhbXBsZXMsc2FtcGxpbmdfb2Rkczp0aGlzLnNhbXBsaW5nT2RkcyxzZXF1ZW5jZV9leGFtcGxlczp0aGlzLnNlcXVlbmNlRXhhbXBsZXN9KTt0aGlzLmV4YW1wbGVTdGF0dXNTdHI9IkxvYWRpbmcgZGF0YXBvaW50cy4uLiI7dGhpcy5tYWtlQXN5bmNSZXF1ZXN0XyhhLGM9Pnt0aGlzLnVwZGF0ZUV4YW1wbGVDb250ZW50cyhjLnZhbHVlLmV4YW1wbGVzLGMudmFsdWUuc3ByaXRlKX0sbnVsbCwiZGF0YXBvaW50IGxvYWQiKTt0aGlzLnNwaW5uZXJIaWRkZW5fPSExfSx1cGRhdGVTcHJpdGU6ZnVuY3Rpb24oKXt0aGlzLmhhc1Nwcml0ZSYmKHRoaXMuJC5kaXZlLmF0bGFzVXJsPW51bGwsdGhpcy4kLmRpdmUuYXRsYXNVcmw9dGhpcy5sb2NhbD90aGlzLmxvY2FsQXRsYXNVcmw6dGhpcy5tYWtlVXJsXygiL2RhdGEvcGx1Z2luL3doYXRpZi9zcHJpdGUiLHt9KSl9LHNlbGVjdGVkRGF0YVVwZGF0ZWRfOmZ1bmN0aW9uKCl7dGhpcy5zZWxlY3RlZEV4YW1wbGVOdW09CjA8dGhpcy5zZWxlY3RlZC5sZW5ndGg/dGhpcy5zZWxlY3RlZFswXToiIjt0aGlzLnZpc2RhdGEmJjA8dGhpcy52aXNkYXRhLmxlbmd0aCYmKHRoaXMucGFydGlhbERlcFBsb3RQZW5kaW5nRmVhdHVyZXM9W10pfSxjb3B5RGF0YXBvaW50XzpmdW5jdGlvbigpe3ZhciBhPUpTT04uc3RyaW5naWZ5KHRoaXMuc2VsZWN0ZWRFeGFtcGxlQW5kSW5mZXJlbmNlLmV4YW1wbGUpO2E9e2V4YW1wbGU6SlNPTi5wYXJzZShhKSxjaGFuZ2VkOiExLG9yaWc6SlNPTi5wYXJzZShhKX07dGhpcy5leGFtcGxlc0FuZEluZmVyZW5jZXMucHVzaChhKTt0aGlzLnNlbGVjdGVkRXhhbXBsZUFuZEluZmVyZW5jZT1hO3RoaXMudmlzZGF0YS5wdXNoKHRoaXMuZXhhbXBsZVRvRGF0YVBvaW50XyhhLmV4YW1wbGUsdGhpcy52aXNkYXRhLmxlbmd0aCkpO2E9dGhpcy5zZWxlY3RlZFswXTt0aGlzLnNob3dOZWFyZXN0Q291bnRlcmZhY3R1YWw9ITE7dGhpcy5zZWxlY3RlZFswXT10aGlzLnZpc2RhdGEubGVuZ3RoLQoxO3RoaXMuc2VsZWN0ZWREYXRhVXBkYXRlZF8oKTt0aGlzLnVwZGF0ZWRFeGFtcGxlPSEwO3RoaXMuZmlyZSgiZHVwbGljYXRlLWV4YW1wbGUiLHtpbmRleDphfSk7dGhpcy5sb2NhbD90aGlzLnJlZnJlc2hEaXZlXygpOihhPXRoaXMubWFrZVVybF8oIi9kYXRhL3BsdWdpbi93aGF0aWYvZHVwbGljYXRlX2V4YW1wbGUiLHtpbmRleDphfSksdGhpcy5tYWtlQXN5bmNSZXF1ZXN0XyhhLCgpPT57dGhpcy5yZWZyZXNoRGl2ZV8oKX0sbnVsbCwiZGF0YXBvaW50IGR1cGxpY2F0aW9uIikpfSxkZWxldGVEYXRhcG9pbnREaWFsb2dfOmZ1bmN0aW9uKCl7dGhpcy4kLmRlbGV0ZWRpYWxvZy5vcGVuKCl9LGRlbGV0ZURhdGFwb2ludF86ZnVuY3Rpb24oKXt2YXIgYT10aGlzLnNlbGVjdGVkWzBdO3RoaXMuZXhhbXBsZXNBbmRJbmZlcmVuY2VzLnNwbGljZShhLDEpO3RoaXMudmlzZGF0YS5zcGxpY2UoYSwxKTtmb3IobGV0IGM9YTtjPHRoaXMudmlzZGF0YS5sZW5ndGg7YysrKXRoaXMudmlzZGF0YVtjXVsiIERhdGFwb2ludCBJRCJdPQpjO3RoaXMuY29tcGFyZWRJbmRpY2VzPVtdO3RoaXMuc2VsZWN0ZWQ9W107dGhpcy5zZWxlY3RlZERhdGFVcGRhdGVkXygpO3RoaXMuZmlyZSgiZGVsZXRlLWV4YW1wbGUiLHtpbmRleDphfSk7dGhpcy4kLmRpdmUuc2VsZWN0ZWRJbmRpY2VzPVtdO3RoaXMubG9jYWw/dGhpcy5yZWZyZXNoRGl2ZV8oKTooYT10aGlzLm1ha2VVcmxfKCIvZGF0YS9wbHVnaW4vd2hhdGlmL2RlbGV0ZV9leGFtcGxlIix7aW5kZXg6YX0pLHRoaXMubWFrZUFzeW5jUmVxdWVzdF8oYSwoKT0+e3RoaXMucmVmcmVzaERpdmVfKCl9LG51bGwsImRhdGFwb2ludCBkZWxldGUiKSl9LHNob3VsZERpc2FibGVSZXNldF86ZnVuY3Rpb24oYSl7cmV0dXJuIWF9LHJlc2V0RGF0YXBvaW50XzpmdW5jdGlvbigpe3RoaXMuc2V0KCJzZWxlY3RlZEV4YW1wbGVBbmRJbmZlcmVuY2UuZXhhbXBsZSIse30pO3JlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e3RoaXMuc2VsZWN0ZWRFeGFtcGxlQW5kSW5mZXJlbmNlLmNoYW5nZWQ9CiExO2NvbnN0IGE9SlNPTi5zdHJpbmdpZnkodGhpcy5zZWxlY3RlZEV4YW1wbGVBbmRJbmZlcmVuY2Uub3JpZyk7dGhpcy5zZXQoInNlbGVjdGVkRXhhbXBsZUFuZEluZmVyZW5jZS5leGFtcGxlIixKU09OLnBhcnNlKGEpKTt0aGlzLnZpc2RhdGFbdGhpcy5zZWxlY3RlZFswXV09dGhpcy5leGFtcGxlVG9EYXRhUG9pbnRfKHRoaXMuc2VsZWN0ZWRFeGFtcGxlQW5kSW5mZXJlbmNlLmV4YW1wbGUsdGhpcy5zZWxlY3RlZFswXSk7dGhpcy51cGRhdGVkRXhhbXBsZT0hMDt0aGlzLnVwZGF0ZUV4YW1wbGVfKGEsdGhpcy5zZWxlY3RlZFswXSk7dGhpcy5yZWZyZXNoRGl2ZV8oKX0pfSxhZGRDaGFydDpmdW5jdGlvbihhLGMsZCl7bGV0IGYsZz1kO2lmKHRoaXMuaXNNdWx0aUNsYXNzXyh0aGlzLm1vZGVsVHlwZSx0aGlzLm11bHRpQ2xhc3MpKXtnPVtdO2ZvcihsZXQgaz0wO2s8ZC5sZW5ndGg7aysrKXtsZXQgbT17fTtpZihPYmplY3Qua2V5cyhkW2tdKS5sZW5ndGg+TnVtYmVyKHRoaXMubWF4SW5mZXJlbmNlRW50cmllc1BlclJ1bikpe3ZhciBsPQp0aGlzLmV4YW1wbGVzQW5kSW5mZXJlbmNlc1t0aGlzLnNlbGVjdGVkJiYwPHRoaXMuc2VsZWN0ZWQubGVuZ3RoP3RoaXMuc2VsZWN0ZWRbMF06MF07bD1sLmluZmVyZW5jZXNbbC5pbmZlcmVuY2VzLmxlbmd0aC0xXVtrXS5zbGljZSgwLHRoaXMubWF4SW5mZXJlbmNlRW50cmllc1BlclJ1bik7Zm9yKGxldCBwPTA7cDxsLmxlbmd0aDtwKyspe2NvbnN0IHE9bFtwXS5sYWJlbDttW3FdPWRba11bcV19fWVsc2UgbT1kW2tdO2cucHVzaChtKX19Im51bWVyaWMiPT1hP2Y9dGhpcy5tYWtlTGluZUNoYXJ0KGMsZyk6ImNhdGVnb3JpY2FsIj09YT9mPXRoaXMubWFrZUJhckNoYXJ0KGMsZyk6Y29uc29sZS5lcnJvcigiVW5rbm93biBjaGFydFR5cGU6ICIrYSk7YT10aGlzLmZlYXR1cmVDb250YWluZXJCeU5hbWUoYykucXVlcnlTZWxlY3RvcigiLnRmLWNhdGVnb3J5LXBhbmUtY29udGVudCIpO1BvbHltZXIuZG9tKGEpLmFwcGVuZENoaWxkKGYpO2M9dGhpcy5wYXJ0aWFsRGVwUGxvdFBlbmRpbmdGZWF0dXJlcy5pbmRleE9mKGMpOwotMTxjJiZ0aGlzLnBhcnRpYWxEZXBQbG90UGVuZGluZ0ZlYXR1cmVzLnNwbGljZShjLDEpfSxnZXRTaW1wbGVBeGlzRm9ybWF0dGVyOmZ1bmN0aW9uKGEpe3JldHVybiBQbG90dGFibGUuRm9ybWF0dGVycy5nZW5lcmFsKGEpfSxtYWtlQmFyQ2hhcnQ6ZnVuY3Rpb24oYSxjKXtmdW5jdGlvbiBkKHIsdCl7cmV0dXJue3g6ci5zdGVwPT10P3Iuc3RlcCsiIC0gb3JpZ2luYWwgdmFsdWUiOnIuc3RlcCx5OnIuc2NhbGFyfX1mdW5jdGlvbiBmKHIsdCx2KXtyZXR1cm57eDpyLnN0ZXA9PXQ/ci5zdGVwKyIgLSBvcmlnaW5hbCB2YWx1ZSI6ci5zdGVwLHNjYWxhcjpyLnNjYWxhcix5OnZ9fWxldCBnPSIiO3ZhciBsPWNbMF07IXRoaXMuZ2xvYmFsUGRQbG90cyYmKGE9dGhpcy5jcmVhdGVQZEVudHJ5Rm9yQ3VycmVudFZhbHVlKGEsbCwwKSkmJihnPWEuc3RlcCk7Y29uc3Qgaz17fSxtPXt9O18uZm9yRWFjaChjLChyLHQpPT57Xy5mb3JFYWNoKHIsKHYsQSk9PnttW3RoaXMuZm9ybWF0Q2hhcnRLZXkoQSwKdCxjLmxlbmd0aCldPV8ubWFwKHYseT0+ZCh5LGcpKS5zb3J0KCh5LHgpPT54LnkteS55KTt0aGlzLmlzQmluYXJ5Q2xhc3NpZmljYXRpb25fKHRoaXMubW9kZWxUeXBlLHRoaXMubXVsdGlDbGFzcykmJihrW3RoaXMuZm9ybWF0Q2hhcnRLZXkoQSx0LGMubGVuZ3RoKV09Xy5tYXAodix5PT5mKHksZyx0aGlzLm92ZXJhbGxUaHJlc2hvbGRzW3RdLnRocmVzaG9sZCkpLnNvcnQoKHkseCk9Pnguc2NhbGFyLXkuc2NhbGFyKSl9KX0pO2NvbnN0IHA9Ym0ubXVsdGlzY2FsZUZvcm1hdHRlcihibS5ZX1RPT0xUSVBfRk9STUFUVEVSX1BSRUNJU0lPTik7bD1be3RpdGxlOiJJbmZlcmVuY2UgdmFsdWUiLGV2YWx1YXRlOnI9PntyPXRoaXMuc3BsaXRDaGFydEtleShyLmtleSxjLmxlbmd0aCkubGFiZWw7aWYoIWlzTmFOKHIpJiYwPHIubGVuZ3RoJiZ0aGlzLmxhYmVsVm9jYWIpe2NvbnN0IHQ9K3I7dDx0aGlzLmxhYmVsVm9jYWIubGVuZ3RoJiYwPD10JiYocis9IiAoIit0aGlzLmxhYmVsVm9jYWJbdF0rCiIpIil9cmV0dXJuIHJ9fSx7dGl0bGU6IkZlYXR1cmUgdmFsdWUiLGV2YWx1YXRlOnI9PnIudmFsdWUueH0se3RpdGxlOiJTY29yZSIsZXZhbHVhdGU6cj0+cChyLnZhbHVlLnkpfV07Mjw9Yy5sZW5ndGgmJmwucHVzaCh7dGl0bGU6Ik1vZGVsIixldmFsdWF0ZTpyPT50aGlzLnNwbGl0Q2hhcnRLZXkoci5rZXksYy5sZW5ndGgpLm1vZGVsfSk7YT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTthLmNsYXNzTGlzdC5hZGQoInBkLWhvbGRlciIpO2NvbnN0IHE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidnotYmFyLWNoYXJ0Iik7cS5jb2xvclNjYWxlPShuZXcgUGxvdHRhYmxlLlNjYWxlcy5Db2xvcikucmFuZ2UodGhpcy5wZFBsb3RDb2xvcnMpO3EubGluZXNDb2xvclNjYWxlPShuZXcgUGxvdHRhYmxlLlNjYWxlcy5Db2xvcikucmFuZ2UodGhpcy5wZFBsb3RUcmFuc3BhcmVudENvbG9ycyk7cS5kYXRhPW07cS5saW5lcz1rO3EudG9vbHRpcENvbHVtbnM9bDthLmFwcGVuZENoaWxkKHEpOwpsPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2wuY2xhc3NMaXN0LmFkZCgicGQteS1sYWJlbCIpO2wuaW5uZXJUZXh0PXRoaXMuaXNSZWdyZXNzaW9uXyh0aGlzLm1vZGVsVHlwZSk/IkluZmVyZW5jZSB2YWx1ZSI6IkluZmVyZW5jZSBzY29yZSI7YS5hcHBlbmRDaGlsZChsKTtyZXR1cm4gYX0sc3BsaXRDaGFydEtleTpmdW5jdGlvbihhLGMpe2xldCBkPWEsZj0iIjsyPD1jJiYoYz1hLmluZGV4T2YoIihtb2RlbCIpLGQ9YS5zdWJzdHJpbmcoMCxjKSxmPWEuc3Vic3RyaW5nKGMrNyxhLmxhc3RJbmRleE9mKCIpIikpKTtyZXR1cm57bGFiZWw6ZCxtb2RlbDpmfX0sZm9ybWF0Q2hhcnRLZXk6ZnVuY3Rpb24oYSxjLGQpe3JldHVybiAxPT1kP2E6YSsiIChtb2RlbCAiK3RoaXMuZ2V0TW9kZWxOYW1lXyhjKSsiKSJ9LG1ha2VMaW5lQ2hhcnQ6ZnVuY3Rpb24oYSxjKXtmdW5jdGlvbiBkKHYpe3JldHVybiBOdW1iZXIuaXNOYU4odik/Ik5hTiI6bSh2KX1jb25zdCBmPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwpmLmNsYXNzTGlzdC5hZGQoInBkLWhvbGRlciIpO2NvbnN0IGc9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidnotbGluZS1jaGFydDIiKSxsPVtdO3ZhciBrPVtdO2NvbnN0IG09Ym0ubXVsdGlzY2FsZUZvcm1hdHRlcihibS5ZX1RPT0xUSVBfRk9STUFUVEVSX1BSRUNJU0lPTik7ImNsYXNzaWZpY2F0aW9uIj09dGhpcy5tb2RlbFR5cGUmJihnLmRlZmF1bHRZUmFuZ2U9WzAsMV0pO3ZhciBwPVt7dGl0bGU6IkluZmVyZW5jZSB2YWx1ZSIsZXZhbHVhdGU6dj0+e3Y9dGhpcy5zcGxpdENoYXJ0S2V5KHYuZGF0YXNldC5tZXRhZGF0YSgpLm5hbWUsYy5sZW5ndGgpLmxhYmVsO2lmKCFpc05hTih2KSYmMDx2Lmxlbmd0aCYmdGhpcy5sYWJlbFZvY2FiKXtjb25zdCBBPSt2O0E8dGhpcy5sYWJlbFZvY2FiLmxlbmd0aCYmMDw9QSYmKHYrPSIgKCIrdGhpcy5sYWJlbFZvY2FiW0FdKyIpIil9cmV0dXJuIHZ9fSx7dGl0bGU6IkZlYXR1cmUgdmFsdWUiLGV2YWx1YXRlOnY9PmQodi5kYXR1bS5zdGVwKX0sCnt0aXRsZToiU2NvcmUiLGV2YWx1YXRlOnY9PmQodi5kYXR1bS5zY2FsYXIpfV07Mjw9Yy5sZW5ndGgmJnAucHVzaCh7dGl0bGU6Ik1vZGVsIixldmFsdWF0ZTp2PT50aGlzLnNwbGl0Q2hhcnRLZXkodi5kYXRhc2V0Lm1ldGFkYXRhKCkubmFtZSxjLmxlbmd0aCkubW9kZWx9KTtnLnRvb2x0aXBDb2x1bW5zPXA7Y29uc3QgcT1bXTtsZXQgcj0wO2ZvcihsZXQgdj0wO3Y8Yy5sZW5ndGg7disrKXtjb25zdCBBPWNbdl07cD1fLmtleXMoQSk7cj12KnAubGVuZ3RoO3AuZm9yRWFjaCh5PT57bC5wdXNoKHRoaXMucGRQbG90Q29sb3JzW3IrK10pO2NvbnN0IHg9dGhpcy5mb3JtYXRDaGFydEtleSh5LHYsYy5sZW5ndGgpO2cuc2V0U2VyaWVzRGF0YSh4LEFbeV0pO3EucHVzaCh4KX0pO3I9dipwLmxlbmd0aDtpZighdGhpcy5nbG9iYWxQZFBsb3RzJiYocD10aGlzLmNyZWF0ZVBkRW50cnlGb3JDdXJyZW50VmFsdWUoYSxBLHYpKSl7dmFyIHQ9dGhpcy5mb3JtYXRDaGFydEtleShfLmtleXMoQSlbMF0rCiIgLSBvcmlnaW5hbCB2YWx1ZSAiLHYsYy5sZW5ndGgpO2cuc2V0U2VyaWVzRGF0YSh0LFtwXSk7cS5wdXNoKHQpO2wucHVzaCh0aGlzLnBkUGxvdENvbG9yc1tyXS5icmlnaHRlcigpKX10aGlzLmlzQmluYXJ5Q2xhc3NpZmljYXRpb25fKHRoaXMubW9kZWxUeXBlLHRoaXMubXVsdGlDbGFzcykmJihwPXRoaXMuZm9ybWF0Q2hhcnRLZXkoImNsYXNzaWZpY2F0aW9uIHRocmVzaG9sZCIsdixjLmxlbmd0aCksdD1jWzBdW18ua2V5cyhjWzBdKV0ubWFwKHk9Pih7c3RlcDp5LnN0ZXAsc2NhbGFyOnRoaXMub3ZlcmFsbFRocmVzaG9sZHNbdl0udGhyZXNob2xkfSkpLGwucHVzaCh0aGlzLnBkUGxvdFRyYW5zcGFyZW50Q29sb3JzW3JdKSxnLnNldFNlcmllc0RhdGEocCx0KSxrLnB1c2gocCkscS5wdXNoKHApKX1nLmNvbG9yU2NhbGU9KG5ldyBQbG90dGFibGUuU2NhbGVzLkNvbG9yKS5yYW5nZShsKTtnLnhBeGlzRm9ybWF0dGVyPXRoaXMuZ2V0U2ltcGxlQXhpc0Zvcm1hdHRlcih0aGlzLmF4aXNQcmVjaXNpb24pOwpnLnlBeGlzRm9ybWF0dGVyPXRoaXMuZ2V0U2ltcGxlQXhpc0Zvcm1hdHRlcih0aGlzLmF4aXNQcmVjaXNpb24pO2cuc2VyaWVzV2l0aG91dFRvb2x0aXBzPWs7Zy5jb2xvclNjYWxlLmRvbWFpbihxKTtnLnNldFZpc2libGVTZXJpZXMocSk7Zi5hcHBlbmRDaGlsZChnKTtrPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2suY2xhc3NMaXN0LmFkZCgicGQteS1sYWJlbCIpO2suaW5uZXJUZXh0PXRoaXMuaXNSZWdyZXNzaW9uXyh0aGlzLm1vZGVsVHlwZSk/IkluZmVyZW5jZSB2YWx1ZSI6IkluZmVyZW5jZSBzY29yZSI7Zi5hcHBlbmRDaGlsZChrKTtrPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2suY2xhc3NMaXN0LmFkZCgicGQteC1sYWJlbCIpO2suaW5uZXJUZXh0PWE7Zi5hcHBlbmRDaGlsZChrKTtyZXR1cm4gZn0sY3JlYXRlUGRFbnRyeUZvckN1cnJlbnRWYWx1ZTpmdW5jdGlvbihhLGMsZCl7dmFyIGY9Xy5rZXlzKGMpWzBdO2NvbnN0IGc9Zi5pbmRleE9mKCJpbmRleCIpOwpjPStmO3ZhciBsPTA7LTE8ZyYmKGM9K2Yuc3Vic3RyaW5nKDAsZi5pbmRleE9mKCIgIikpLGw9K2Yuc3Vic3RyaW5nKGcrNixmLmluZGV4T2YoIikiKSkpO2E9dGhpcy52aXNkYXRhW3RoaXMuc2VsZWN0ZWRbMF1dW2FdO0FycmF5LmlzQXJyYXkoYSkmJihhPWFbbF0pO2Q9dGhpcy5zZWxlY3RlZEV4YW1wbGVBbmRJbmZlcmVuY2UuaW5mZXJlbmNlc1t0aGlzLnNlbGVjdGVkRXhhbXBsZUFuZEluZmVyZW5jZS5pbmZlcmVuY2VzLmxlbmd0aC0xXVtkXTtsPS0xO2ZvcihmPTA7ZjxkLmxlbmd0aDtmKyspaWYoZFtmXS5sYWJlbD09Yy50b1N0cmluZygpfHwiIj09ZFtmXS5sYWJlbCl7bD1kW2ZdLnNjb3JlO2JyZWFrfXJldHVybi0xPT1sP251bGw6e3N0ZXA6YSxzY2FsYXI6bH19LGRlbGV0ZVBkUGxvdFNwaW5uZXI6ZnVuY3Rpb24oYSl7YT10aGlzLmZlYXR1cmVDb250YWluZXJCeU5hbWUoYSk7cnEoYS5xdWVyeVNlbGVjdG9yKCJwYXBlci1zcGlubmVyLWxpdGUiKSl9LG1ha2VDaGFydEZvckZlYXR1cmU6ZnVuY3Rpb24oYSwKYyxkKXt0aGlzLmRlbGV0ZVBkUGxvdFNwaW5uZXIoYyk7ZC5mb3JFYWNoKGY9PnRoaXMuYWRkQ2hhcnQoYSxjLGYpKX0sZ2V0SW5mZXJlbmNlVmlzdWFsaXphdGlvbjpmdW5jdGlvbihhLGMpe2M9e2ZlYXR1cmVfbmFtZTphLGluZmVyZW5jZV9hZGRyZXNzOnRoaXMuaW5mZXJlbmNlQWRkcmVzcyxtb2RlbF9uYW1lOnRoaXMubW9kZWxOYW1lLG1vZGVsX3R5cGU6dGhpcy5tb2RlbFR5cGUsbW9kZWxfdmVyc2lvbjp0aGlzLm1vZGVsVmVyc2lvbixtb2RlbF9zaWduYXR1cmU6dGhpcy5tb2RlbFNpZ25hdHVyZSx4X21pbjp0aGlzLmdldFVuaXF1ZUJ5RXZlbnQoYywiLngtbWluIikudmFsdWUseF9tYXg6dGhpcy5nZXRVbmlxdWVCeUV2ZW50KGMsIi54LW1heCIpLnZhbHVlLGZlYXR1cmVfaW5kZXhfcGF0dGVybjp0aGlzLmdldFVuaXF1ZUJ5RXZlbnQoYywiLmZlYXR1cmUtaW5kZXgtcGF0dGVybiIpLnZhbHVlLGV4YW1wbGVfaW5kZXg6dGhpcy5nbG9iYWxQZFBsb3RzPy0xOnRoaXMuc2VsZWN0ZWRbMF0sCnVzZV9wcmVkaWN0OnRoaXMudXNlUHJlZGljdEFwaSxwcmVkaWN0X291dHB1dF90ZW5zb3I6dGhpcy5wcmVkaWN0T3V0cHV0VGVuc29yLHByZWRpY3RfaW5wdXRfdGVuc29yOnRoaXMucHJlZGljdElucHV0VGVuc29yfTt0aGlzLmxvY2FsP3RoaXMuZmlyZSgiaW5mZXItbXV0YW50cyIsYyk6KGM9UGsuYWRkUGFyYW1zKCIvZGF0YS9wbHVnaW4vd2hhdGlmL2luZmVyX211dGFudHMiLGMpLHRoaXMubWFrZUFzeW5jUmVxdWVzdF8oYywoZj0+dGhpcy5tYWtlQ2hhcnRGb3JGZWF0dXJlKGYudmFsdWUuY2hhcnRUeXBlLGEsZi52YWx1ZS5kYXRhKSkuYmluZCh0aGlzKSxudWxsLCJwbG90IGNyZWF0aW9uIiwoKCk9PnRoaXMuaGFuZGxlQ2hhcnRFcnJvckZvckZlYXR1cmUoYSkpLmJpbmQodGhpcykpKTtjPXRoaXMuZmVhdHVyZUNvbnRhaW5lckJ5TmFtZShhKS5xdWVyeVNlbGVjdG9yKCIudGYtY2F0ZWdvcnktcGFuZS1jb250ZW50Iik7Y29uc3QgZD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJwYXBlci1zcGlubmVyLWxpdGUiKTsKZC5zZXRBdHRyaWJ1dGUoImFjdGl2ZSIsITApO1BvbHltZXIuZG9tKGMpLmFwcGVuZENoaWxkKGQpfSxoYW5kbGVDaGFydEVycm9yRm9yRmVhdHVyZTpmdW5jdGlvbihhKXtjb25zdCBjPXRoaXMucGFydGlhbERlcFBsb3RQZW5kaW5nRmVhdHVyZXMuaW5kZXhPZihhKTstMTxjJiZ0aGlzLnBhcnRpYWxEZXBQbG90UGVuZGluZ0ZlYXR1cmVzLnNwbGljZShjLDEpO3RoaXMuZGVsZXRlUGRQbG90U3Bpbm5lcihhKX0sc2hvdWxkSGlkZUZlYXR1cmVJbmRpY2VzU2VsZWN0b3I6ZnVuY3Rpb24oYSxjKXtyZXR1cm4hY3x8MD09Yy5sZW5ndGh8fCF0aGlzLnZpc2RhdGF8fHRoaXMudmlzZGF0YS5sZW5ndGg8PWNbMF0/ITA6IUFycmF5LmlzQXJyYXkodGhpcy52aXNkYXRhW2NbMF1dW2FdKX0sc2hvdWxkSGlkZVBkSW5wdXRDb250YWluZXI6ZnVuY3Rpb24oYSxjLGQpe3JldHVybiB0aGlzLnNob3VsZEhpZGVGZWF0dXJlSW5kaWNlc1NlbGVjdG9yKGMsZCkmJmE/ITA6ITF9LGZlYXR1cmVDb250YWluZXJCeU5hbWU6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuJCQoJ1tkYXRhLWZlYXR1cmUtbmFtZVx4M2QiJysKYSsnIl0nKX0sZmVhdHVyZUNvbnRhaW5lckJ5RXZlbnQ6ZnVuY3Rpb24oYSl7Zm9yKGE9YS50YXJnZXQ7IWEuY2xhc3NMaXN0LmNvbnRhaW5zKCJmZWF0dXJlLWNvbnRhaW5lciIpOylhPWEucGFyZW50Tm9kZTtyZXR1cm4gYX0sZ2V0VW5pcXVlQnlFdmVudChhLGMpe3JldHVybiB0aGlzLmZlYXR1cmVDb250YWluZXJCeUV2ZW50KGEpLnF1ZXJ5U2VsZWN0b3IoYyl9LHBhcnRpYWxEZXBQbG90RWxpZ2libGVGZWF0dXJlc1NldDpmdW5jdGlvbihhKXthJiYwIT1hLmxlbmd0aCYmc2V0VGltZW91dCgoKT0+e3RoaXMuJCQoIi5wZC1lbnRyeS1jb250YWluZXIiKS5oaWRkZW4mJnRoaXMuJCQoIi50Zi1jYXRlZ29yeS1wYW5lIikuY2xpY2soKX0sMTAwKX0sY2F0ZWdvcnlQYW5lQ2xpY2tlZDpmdW5jdGlvbihhKXtjb25zdCBjPXRoaXMuZmVhdHVyZUNvbnRhaW5lckJ5RXZlbnQoYSk7Yy5xdWVyeVNlbGVjdG9yKCIucGQtZW50cnktY29udGFpbmVyIikuaGFzQXR0cmlidXRlKCJoaWRkZW4iKT8KKHRoaXMuZHJhd1BkQ2hhcnRzXyhhKSx0aGlzLnNob3dQZEVsZW1lbnRfKGMpKTp0aGlzLmhpZGVQZEVsZW1lbnRfKGMpfSxkcmF3UGRDaGFydHNfOmZ1bmN0aW9uKGEpe2NvbnN0IGM9YS5tb2RlbC5nZXQoIml0ZW0iKS5uYW1lOy0xPHRoaXMucGFydGlhbERlcFBsb3RQZW5kaW5nRmVhdHVyZXMuaW5kZXhPZihjKXx8KHRoaXMucGFydGlhbERlcFBsb3RQZW5kaW5nRmVhdHVyZXMucHVzaChjKSx0aGlzLmdldEluZmVyZW5jZVZpc3VhbGl6YXRpb24oYyxhKSl9LGNsZWFyUGRFbGVtZW50Q2hhcnRzXzpmdW5jdGlvbihhKXthLnF1ZXJ5U2VsZWN0b3JBbGwoIi5wZC1ob2xkZXIiKS5mb3JFYWNoKGZ1bmN0aW9uKGMpe3JxKGMpfSl9LGhpZGVQZEVsZW1lbnRfOmZ1bmN0aW9uKGEpe3ZhciBjPWEucXVlcnlTZWxlY3RvcigiLnBkLWVudHJ5LWNvbnRhaW5lciIpO3RoaXMuY2xlYXJQZEVsZW1lbnRDaGFydHNfKGMpO2Muc2V0QXR0cmlidXRlKCJoaWRkZW4iLCEwKTtjPWEucXVlcnlTZWxlY3RvcigiLnBkLXJvdy1hcnJvdyIpOwpjLmNsYXNzTGlzdC5yZW1vdmUoIm5vcm1hbC1pY29uIik7Yy5jbGFzc0xpc3QuYWRkKCJyb3RhdGVkLWljb24iKTthPWEucXVlcnlTZWxlY3RvcigiLnBlcmYtdGFibGUtZW50cnkiKTthLmNsYXNzTGlzdC5hZGQoInBlcmYtdGFibGUtcm93Iik7YS5jbGFzc0xpc3QucmVtb3ZlKCJwZXJmLXRhYmxlLXJvdy1leHBhbmRlZCIpfSxzaG93UGRFbGVtZW50XzpmdW5jdGlvbihhKXthLnF1ZXJ5U2VsZWN0b3IoIi5wZC1lbnRyeS1jb250YWluZXIiKS5yZW1vdmVBdHRyaWJ1dGUoImhpZGRlbiIpO2NvbnN0IGM9YS5xdWVyeVNlbGVjdG9yKCIucGQtcm93LWFycm93Iik7Yy5jbGFzc0xpc3QuYWRkKCJub3JtYWwtaWNvbiIpO2MuY2xhc3NMaXN0LnJlbW92ZSgicm90YXRlZC1pY29uIik7YT1hLnF1ZXJ5U2VsZWN0b3IoIi5wZXJmLXRhYmxlLWVudHJ5Iik7YS5jbGFzc0xpc3QucmVtb3ZlKCJwZXJmLXRhYmxlLXJvdyIpO2EuY2xhc3NMaXN0LmFkZCgicGVyZi10YWJsZS1yb3ctZXhwYW5kZWQiKX0sCmhpZGVBbGxQZEVsZW1lbnRzXzpmdW5jdGlvbigpe2NvbnN0IGE9UG9seW1lci5kb20odGhpcy5yb290KS5xdWVyeVNlbGVjdG9yQWxsKCIuZmVhdHVyZS1jb250YWluZXIiKTtmb3IobGV0IGM9MDtjPGEubGVuZ3RoO2MrKyl0aGlzLmhpZGVQZEVsZW1lbnRfKGFbY10pfSxwZElucHV0Q2hhbmdlZDpmdW5jdGlvbihhKXt0aGlzLmRlYm91bmNlKCJwZElucHV0Q2hhbmdlZERlYm91bmNlIiwoKT0+dGhpcy5wZElucHV0Q2hhbmdlZEltcGwoYSksNTAwKX0scGRJbnB1dENoYW5nZWRJbXBsOmZ1bmN0aW9uKGEpe3RoaXMuY2xlYXJQZEVsZW1lbnRDaGFydHNfKHRoaXMuZ2V0VW5pcXVlQnlFdmVudChhLCIudGYtY2F0ZWdvcnktcGFuZS1jb250ZW50IikpO3RoaXMuZHJhd1BkQ2hhcnRzXyhhKX0scG9wdWxhdGVQZFRhYnM6ZnVuY3Rpb24oKXt0aGlzLmhpZGVBbGxQZEVsZW1lbnRzXygpO2lmKHRoaXMubG9jYWwpdGhpcy5maXJlKCJnZXQtZWxpZ2libGUtZmVhdHVyZXMiKTtlbHNle2NvbnN0IGE9ClBrLmFkZFBhcmFtcygiL2RhdGEvcGx1Z2luL3doYXRpZi9lbGlnaWJsZV9mZWF0dXJlcyIse30pO3RoaXMubWFrZUFzeW5jUmVxdWVzdF8oYSxjPT57dGhpcy5zZXQoInBhcnRpYWxEZXBQbG90RWxpZ2libGVGZWF0dXJlcyIsYy52YWx1ZSl9LG51bGwsInBsb3Qgc2V0dXAiKX19LHRvZ2dsZVRydWVMYWJlbFNldHVwOmZ1bmN0aW9uKCl7dGhpcy4kLmNvbGxhcHNldHJ1ZWxhYmVsLnRvZ2dsZSgpfSx0b2dnbGVFeHBsb3JlclNldHVwOmZ1bmN0aW9uKCl7dGhpcy4kJCgiI2NvbGxhcHNlZXhwbG9yZXIiKS50b2dnbGUoKX0sdG9nZ2xlQ29udGV4dFRvb2xzOmZ1bmN0aW9uKCl7dGhpcy4kLmNvbGxhcHNlY29udGV4dHRvb2xzLnRvZ2dsZSgpfSx0b2dnbGVQZXJmb3JtYW5jZTpmdW5jdGlvbigpe3RoaXMuJC5jb2xsYXBzZXBlcmZvcm1hbmNlLnRvZ2dsZSgpfSx0b2dnbGVJbmZlcmVuY2VSZXN1bHRzOmZ1bmN0aW9uKCl7dGhpcy4kJCgiI2NvbGxhcHNlaW5mZXJlbmNlIikudG9nZ2xlKCl9LApnZXRFeHBhbmRDb2xsYXBzZUljb246ZnVuY3Rpb24oYSl7cmV0dXJuIGE/ImV4cGFuZC1sZXNzIjoiZXhwYW5kLW1vcmUifSxnZXRFeHBhbmRDb2xsYXBzZVBlcmZJY29uQ2xhc3M6ZnVuY3Rpb24oYSl7cmV0dXJuIGE/Im5vcm1hbC1pY29uIjoicm90YXRlZC1pY29uIn0sZ2V0UGVyZlRhYmxlUm93Q2xhc3M6ZnVuY3Rpb24oYSl7cmV0dXJuIGE/InBlcmYtdGFibGUtcm93LWV4cGFuZGVkIjoicGVyZi10YWJsZS1yb3cifSxnZXRQZXJmVGFibGVNb2RlbENsYXNzOmZ1bmN0aW9uKGEpe3JldHVybiAyPmE/InBlcmYtdGFibGUtbW9kZWwtc2luZ2xlIjoicGVyZi10YWJsZS1tb2RlbCJ9LGdldERhdGFwb2ludEVkaXRvclRpdGxlOmZ1bmN0aW9uKGEsYyl7cmV0dXJuIHRoaXMuZ2V0U2VjdGlvblRpdGxlKCJFZGl0IixhLGMpfSxnZXRJbmZlclRpdGxlOmZ1bmN0aW9uKGEsYyl7cmV0dXJuIHRoaXMuZ2V0U2VjdGlvblRpdGxlKCJJbmZlciIsYSxjKX0sZ2V0U2VjdGlvblRpdGxlOmZ1bmN0aW9uKGEsCmMsZCl7bnVsbCE9YyYmIiIhPT1jJiYoYT1udWxsIT1kJiYwPGQubGVuZ3RoP2ErKCIgLSBEYXRhcG9pbnRzICIrYysiIGFuZCAiK2RbMF0pOmErKCIgLSBEYXRhcG9pbnQgIitjKSk7cmV0dXJuIGF9LHRvZ2dsZVBlcmZSb3c6ZnVuY3Rpb24oYSl7Zm9yKGE9YS50YXJnZXQ7bnVsbCE9YSYmIWEuZGF0YXNldC5pbmRleDspYT1hLnBhcmVudE5vZGU7bnVsbCE9YSYmKGE9YS5kYXRhc2V0LmluZGV4LHRoaXMuc2V0KCJmZWF0dXJlVmFsdWVUaHJlc2hvbGRzLiIrYSsiLm9wZW5lZCIsIXRoaXMuZmVhdHVyZVZhbHVlVGhyZXNob2xkc1thXS5vcGVuZWQpLHRoaXMuZmVhdHVyZVZhbHVlVGhyZXNob2xkc1thXS5vcGVuZWQmJnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+dGhpcy51cGRhdGVJbmZlcmVuY2VTdGF0c18oITApKSl9LGdldFBlcmZvcm1hbmNlVGFiVGl0bGU6ZnVuY3Rpb24oYSxjKXtyZXR1cm4gdGhpcy5pc0JpbmFyeUNsYXNzaWZpY2F0aW9uXyhhLGMpPyJQZXJmb3JtYW5jZSBceDI2IEZhaXJuZXNzIjoKIlBlcmZvcm1hbmNlIn0sZ2V0UGVyZlRhYmxlVGl0bGU6ZnVuY3Rpb24oYSxjLGQsZil7bGV0IGc9dGhpcy5nZXRQcmludGFibGVPcHRpbWl6YXRpb25OYW1lKGQpO2lmKG51bGw9PWF8fDA9PWEubGVuZ3RoKXJldHVybiJjdXN0b20iPT1kPyJFeHBsb3JlIG92ZXJhbGwgcGVyZm9ybWFuY2UiOmc7bnVsbCE9YyYmMCE9Yy5sZW5ndGgmJihhKz0iLyIrYyk7cmV0dXJuIGcrIiBmb3IgIitmLmxlbmd0aCsiIHZhbHVlcyBvZiAiK2F9LGdldE5vVGhyZXNob2xkUGVyZlRhYmxlVGl0bGU6ZnVuY3Rpb24oYSxjLGQpe2lmKG51bGw9PWF8fDA9PWEubGVuZ3RoKXJldHVybiJFeHBsb3JlIG92ZXJhbGwgcGVyZm9ybWFuY2UiO251bGwhPWMmJjAhPWMubGVuZ3RoJiYoYSs9Ii8iK2MpO3JldHVybiBhKyIgKCIrZC5sZW5ndGgrIiB2YWx1ZXMpIn0sZ2V0UHJpbnRhYmxlT3B0aW1pemF0aW9uTmFtZTpmdW5jdGlvbihhKXtyZXR1cm4iY3VzdG9tIj09YT8iQ3VzdG9tIHRocmVzaG9sZHMiOiJ1bmF3YXJlIj09CmE/Ik9wdGltYWwgc2luZ2xlIHRocmVzaG9sZCI6ImRlbW9wYXJpdHkiPT1hPyJEZW1vZ3JhcGhpYyBwYXJpdHkgdGhyZXNob2xkcyI6ImVxdWFsb3BwIj09YT8iRXF1YWwgb3Bwb3J0dW5pdHkgdGhyZXNob2xkcyI6ImVxdWFsYWNjIj09YT8iRXF1YWwgYWNjdXJhY3kgdGhyZXNob2xkcyI6Ik9wdGltYWwgZ3JvdXAgdGhyZXNob2xkcyJ9LGdldEZlYXR1cmVTb3J0Qnk6ZnVuY3Rpb24oYSxjKXtsZXQgZD1bIkNvdW50IiwiQWxwaGFiZXRpY2FsIl07cmV0dXJuIGQ9dGhpcy5pc0JpbmFyeUNsYXNzaWZpY2F0aW9uXyhhLGMpP2QuY29uY2F0KFsiQWNjdXJhY3kiLCJGYWxzZSBwb3NpdGl2ZXMiLCJGYWxzZSBuZWdhdGl2ZXMiXSk6dGhpcy5pc011bHRpQ2xhc3NfKGEsYyk/ZC5jb25jYXQoWyJBY2N1cmFjeSJdKTpkLmNvbmNhdCgiTWVhbiBlcnJvcjtNZWRpYW4gZXJyb3I7TWVhbiBhYnNvbHV0ZSBlcnJvcjtNZWRpYW4gYWJzb2x1dGUgZXJyb3I7TWVhbiBzcXVhcmVkIGVycm9yO01lZGlhbiBzcXVhcmVkIGVycm9yIi5zcGxpdCgiOyIpKX0sCnNlbGVjdGVkRmVhdHVyZVNvcnRDaGFuZ2VkXzpmdW5jdGlvbigpe3ZhciBhPXRoaXMuZmVhdHVyZVZhbHVlVGhyZXNob2xkczt0aGlzLmZlYXR1cmVWYWx1ZVRocmVzaG9sZHM9W107dGhpcy5mZWF0dXJlVmFsdWVUaHJlc2hvbGRzPXRoaXMuc29ydEZlYXR1cmVWYWx1ZXMoYSk7bnVsbCE9dGhpcy5yZWdyZXNzaW9uRW50cmllc18mJihhPXRoaXMucmVncmVzc2lvbkVudHJpZXNfLHRoaXMucmVncmVzc2lvbkVudHJpZXNfPVtdLHRoaXMucmVncmVzc2lvbkVudHJpZXNfPXRoaXMuc29ydFJlZ3Jlc3Npb25FbnRyaWVzKGEpKX0sZ2V0U2xpZGVyQ2xhc3M6ZnVuY3Rpb24oYSl7cmV0dXJuInNsaWRlciAiKygwPT1hPyJzbGlkZXItbW9kZWwtb25lIjoic2xpZGVyLW1vZGVsLXR3byIpfSxmb3JtYXRFcnJvcjpmdW5jdGlvbihhKXtyZXR1cm4gZDMuZm9ybWF0KCIuM2YiKShhKX0sZXhwYW5kQWxsUGVyZm9ybWFuY2U6ZnVuY3Rpb24oKXtpZihudWxsIT10aGlzLmZlYXR1cmVWYWx1ZVRocmVzaG9sZHMpe2ZvcihsZXQgYT0KMDthPHRoaXMuZmVhdHVyZVZhbHVlVGhyZXNob2xkcy5sZW5ndGg7YSsrKXRoaXMuc2V0KCJmZWF0dXJlVmFsdWVUaHJlc2hvbGRzLiIrYSsiLm9wZW5lZCIsITApO3JlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+dGhpcy51cGRhdGVJbmZlcmVuY2VTdGF0c18oITApKX19LGNvbGxhcHNlQWxsUGVyZm9ybWFuY2U6ZnVuY3Rpb24oKXtpZihudWxsIT10aGlzLmZlYXR1cmVWYWx1ZVRocmVzaG9sZHMpZm9yKGxldCBhPTA7YTx0aGlzLmZlYXR1cmVWYWx1ZVRocmVzaG9sZHMubGVuZ3RoO2ErKyl0aGlzLnNldCgiZmVhdHVyZVZhbHVlVGhyZXNob2xkcy4iK2ErIi5vcGVuZWQiLCExKX19KTskbC5yZWdpc3RlckRhc2hib2FyZCh7cGx1Z2luOiJ3aGF0aWYiLGVsZW1lbnROYW1lOiJ0Zi1pbnRlcmFjdGl2ZS1pbmZlcmVuY2UtZGFzaGJvYXJkIix0YWJOYW1lOiJXaGF0LUlmIFRvb2wifSl9KSgpOwo8L3NjcmlwdD4KPC9kb20tbW9kdWxlPgoKCgoKCgoKCgoKCgoKCjxzY3JpcHQ+Ly9+fldFQlBBVEh+fi90Zi1ocGFyYW1zLXV0aWxzL3RmLWhwYXJhbXMtdXRpbHMuaHRtbC5qcwooZnVuY3Rpb24oYSl7KGZ1bmN0aW9uKGMpeyhmdW5jdGlvbihkKXtmdW5jdGlvbiBmKEIpe3JldHVybiIiIT09Qi5kaXNwbGF5TmFtZSYmdm9pZCAwIT09Qi5kaXNwbGF5TmFtZT9CLmRpc3BsYXlOYW1lOkIubmFtZX1mdW5jdGlvbiBnKEIpe2lmKCIiIT09Qi5kaXNwbGF5TmFtZSYmdm9pZCAwIT09Qi5kaXNwbGF5TmFtZSlyZXR1cm4gQi5kaXNwbGF5TmFtZTtsZXQgRz1CLm5hbWUuZ3JvdXA7Qj1CLm5hbWUudGFnO3ZvaWQgMD09PUcmJihHPSIiKTt2b2lkIDA9PT1CJiYoQj0iIik7cmV0dXJuIiI9PT1HP0I6RysiLiIrQn1mdW5jdGlvbiBsKEIpe3JldHVybiBCLmhwYXJhbUNvbHVtbnMubGVuZ3RofWZ1bmN0aW9uIGsoQil7cmV0dXJuIEIubWV0cmljQ29sdW1ucy5sZW5ndGh9ZnVuY3Rpb24gbShCLEcpe3JldHVybiBCW0ddfWZ1bmN0aW9uIHAoQixHKXtyZXR1cm4gQi5maW5kKEs9Pl8uaXNFcXVhbChLLm5hbWUsRykpfWZ1bmN0aW9uIHEoQixHLEspe3JldHVybiBHLmhwYXJhbXNbQi5ocGFyYW1Db2x1bW5zW0tdLmhwYXJhbUluZm8ubmFtZV19CmZ1bmN0aW9uIHIoQixHLEspe0I9cChHLm1ldHJpY1ZhbHVlcyxCLm1ldHJpY0NvbHVtbnNbS10ubWV0cmljSW5mby5uYW1lKTtyZXR1cm4gdm9pZCAwPT09Qj92b2lkIDA6Qi52YWx1ZX1mdW5jdGlvbiB0KEIsRyxLKXtyZXR1cm4gSzxCLmhwYXJhbUNvbHVtbnMubGVuZ3RoP3EoQixHLEspOnIoQixHLEstQi5ocGFyYW1Db2x1bW5zLmxlbmd0aCl9ZnVuY3Rpb24gdihCKXtyZXR1cm4gQi5ocGFyYW1JbmZvcy5sZW5ndGh9ZnVuY3Rpb24gQShCKXtyZXR1cm4gQi5tZXRyaWNJbmZvcy5sZW5ndGh9ZnVuY3Rpb24geShCLEcsSyl7cmV0dXJuIEcuaHBhcmFtc1tCLmhwYXJhbUluZm9zW0tdLm5hbWVdfWZ1bmN0aW9uIHgoQixHLEspe0I9cChHLm1ldHJpY1ZhbHVlcyxCLm1ldHJpY0luZm9zW0tdLm5hbWUpO3JldHVybiB2b2lkIDA9PT1CP3ZvaWQgMDpCLnZhbHVlfWZ1bmN0aW9uIEMoQixHLEspe3JldHVybiBLPEIuaHBhcmFtSW5mb3MubGVuZ3RoP3koQixHLEspOngoQixHLEstQi5ocGFyYW1JbmZvcy5sZW5ndGgpfQpmdW5jdGlvbiBGKEIpe3JldHVybiBfLmlzTnVtYmVyKEIpP0IudG9QcmVjaXNpb24oNSk6dm9pZCAwPT09Qj8iIjpCLnRvU3RyaW5nKCl9ZnVuY3Rpb24gRChCLEcpe3JldHVybiBCKkIrRypHfWQuaHBhcmFtTmFtZT1mO2QubWV0cmljTmFtZT1nO2Quc2NoZW1hQ29sdW1uTmFtZT1mdW5jdGlvbihCLEcpe3JldHVybiBHPEIuaHBhcmFtQ29sdW1ucy5sZW5ndGg/ZihCLmhwYXJhbUNvbHVtbnNbR10uaHBhcmFtSW5mbyk6ZyhCLm1ldHJpY0NvbHVtbnNbRy1CLmhwYXJhbUNvbHVtbnMubGVuZ3RoXS5tZXRyaWNJbmZvKX07ZC5udW1IUGFyYW1zPWw7ZC5udW1NZXRyaWNzPWs7ZC5udW1Db2x1bW5zPWZ1bmN0aW9uKEIpe3JldHVybiBsKEIpK2soQil9O2QuaHBhcmFtVmFsdWVCeU5hbWU9bTtkLm1ldHJpY1ZhbHVlQnlOYW1lPXA7ZC5ocGFyYW1WYWx1ZUJ5SW5kZXg9cTtkLm1ldHJpY1ZhbHVlQnlJbmRleD1yO2QuY29sdW1uVmFsdWVCeUluZGV4PXQ7ZC5udW1lcmljQ29sdW1uRXh0ZW50PQpmdW5jdGlvbihCLEcsSyl7cmV0dXJuIGQzLmV4dGVudChHLEw9PnQoQixMLEspKX07ZC5nZXRBYnNvbHV0ZUNvbHVtbkluZGV4PWZ1bmN0aW9uKEIsRyxLKXtpZihLPEcuaHBhcmFtSW5mb3MubGVuZ3RoKUI9Qi5ocGFyYW1Db2x1bW5zLmZpbmRJbmRleChMPT5MLmhwYXJhbUluZm8ubmFtZT09PUcuaHBhcmFtSW5mb3NbS10ubmFtZSk7ZWxzZXtjb25zdCBMPUcubWV0cmljSW5mb3NbSy1HLmhwYXJhbUluZm9zLmxlbmd0aF0ubmFtZTtCPUIuaHBhcmFtQ29sdW1ucy5sZW5ndGgrQi5tZXRyaWNDb2x1bW5zLmZpbmRJbmRleChKPT5KLm1ldHJpY0luZm8ubmFtZT09PUwpfWNvbnNvbGUuYXNzZXJ0KC0xIT09Qik7cmV0dXJuIEJ9O2Quc2NoZW1hVmlzaWJsZUNvbHVtbk5hbWU9ZnVuY3Rpb24oQixHKXtyZXR1cm4gRzxCLmhwYXJhbUluZm9zLmxlbmd0aD9mKEIuaHBhcmFtSW5mb3NbR10pOmcoQi5tZXRyaWNJbmZvc1tHLUIuaHBhcmFtSW5mb3MubGVuZ3RoXSl9O2QubnVtVmlzaWJsZUhQYXJhbXM9CnY7ZC5udW1WaXNpYmxlTWV0cmljcz1BO2QubnVtVmlzaWJsZUNvbHVtbnM9ZnVuY3Rpb24oQil7cmV0dXJuIHYoQikrQShCKX07ZC52aXNpYmxlTnVtZXJpY0NvbHVtbkV4dGVudD1mdW5jdGlvbihCLEcsSyl7cmV0dXJuIGQzLmV4dGVudChHLEw9PkMoQixMLEspKX07ZC5wcmV0dHlQcmludEhQYXJhbVZhbHVlQnlOYW1lPWZ1bmN0aW9uKEIsRyl7cmV0dXJuIEYobShCLEcpKX07ZC5wcmV0dHlQcmludE1ldHJpY1ZhbHVlQnlOYW1lPWZ1bmN0aW9uKEIsRyl7cmV0dXJuIEYocChCLEcpKX07ZC5zZXNzaW9uR3JvdXBXaXRoTmFtZT1mdW5jdGlvbihCLEcpe3JldHVybiBCLmZpbmQoSz0+Sy5uYW1lPT09Ryl9O2QuaHBhcmFtVmFsdWVCeVZpc2libGVJbmRleD15O2QubWV0cmljVmFsdWVCeVZpc2libGVJbmRleD14O2QuY29sdW1uVmFsdWVCeVZpc2libGVJbmRleD1DO2QucHJldHR5UHJpbnQ9RjtkLmwyTm9ybVNxdWFyZWQ9RDtkLmV1Y2xpZGVhbkRpc3Q9ZnVuY3Rpb24oQixHLEssTCl7cmV0dXJuIE1hdGguc3FydChEKEItCkssRy1MKSl9O2QucG9pbnRUb1JlY3RhbmdsZURpc3Q9ZnVuY3Rpb24oQixHLEssTCxKLFApe2lmKEI8SyYmRzxMKXJldHVybiBkLmV1Y2xpZGVhbkRpc3QoQixHLEssTCk7aWYoSzw9QiYmQjxKJiZHPEwpcmV0dXJuIEwtRztpZihKPD1CJiZHPEwpcmV0dXJuIGQuZXVjbGlkZWFuRGlzdChCLEcsSixMKTtpZihCPEsmJkw8PUcmJkc8UClyZXR1cm4gSy1CO2lmKEs8PUImJkI8SiYmTDw9RyYmRzxQKXJldHVybiAwO2lmKEo8PUImJkw8PUcmJkc8UClyZXR1cm4gQi1KO2lmKEI8SyYmUDw9RylyZXR1cm4gZC5ldWNsaWRlYW5EaXN0KEIsRyxLLFApO2lmKEs8PUImJkI8SiYmUDw9RylyZXR1cm4gRy1QO2lmKEo8PUImJlA8PUcpcmV0dXJuIGQuZXVjbGlkZWFuRGlzdChCLEcsSixQKTt0aHJvdyJQb2ludCAoeCx5KSBtdXN0IGJlIGluIG9uZSBvZiB0aGUgcmVnaW9ucyBkZWZpbmVkIGFib3ZlLiI7fTtkLnRyYW5zbGF0ZVN0cj1mdW5jdGlvbihCLEcpe3JldHVybiB2b2lkIDA9PT1HPyJ0cmFuc2xhdGUoIisKQisiKSI6InRyYW5zbGF0ZSgiK0IrIiwiK0crIikifTtkLnJvdGF0ZVN0cj1mdW5jdGlvbihCLEcpe2xldCBLPSJyb3RhdGUoOTAiO3ZvaWQgMCE9PUImJnZvaWQgMCE9PUcmJihLPUsrIiwiK0IrIiwiK0cpO3JldHVybiBLKyIpIn07ZC5pc051bGxPclVuZGVmaW5lZD1mdW5jdGlvbihCKXtyZXR1cm4gbnVsbD09PUJ8fHZvaWQgMD09PUJ9O2QucXVhZFRyZWVWaXNpdFBvaW50c0luUmVjdD1mdW5jdGlvbihCLEcsSyxMLEosUCl7Qi52aXNpdCgoUyxOLFQsWSxhYSk9PntpZih2b2lkIDA9PT1TLmxlbmd0aCl7ZG8gTj1CLngoKShTLmRhdGEpLFQ9Qi55KCkoUy5kYXRhKSxHPD1OJiZOPEwmJks8PVQmJlQ8SiYmUChTLmRhdGEpO3doaWxlKFM9Uy5uZXh0KTtyZXR1cm4hMH1yZXR1cm4gTj49THx8WTw9R3x8VD49Snx8YWE8PUt9KX07ZC5xdWFkVHJlZVZpc2l0UG9pbnRzSW5EaXNrPWZ1bmN0aW9uKEIsRyxLLEwsSil7Qi52aXNpdCgoUCxTLE4sVCxZKT0+e2lmKHZvaWQgMD09PVAubGVuZ3RoKXtkbyBTPQpCLngoKShQLmRhdGEpLE49Qi55KCkoUC5kYXRhKSxTPWQuZXVjbGlkZWFuRGlzdChHLEssUyxOKSxTPD1MJiZKKFAuZGF0YSxTKTt3aGlsZShQPVAubmV4dCk7cmV0dXJuITB9cmV0dXJuIGQucG9pbnRUb1JlY3RhbmdsZURpc3QoRyxLLFMsTixULFkpPkx9KX07ZC5maWx0ZXJTZXQ9ZnVuY3Rpb24oQixHKXtjb25zdCBLPW5ldyBTZXQ7Qi5mb3JFYWNoKEw9PntHKEwpJiZLLmFkZChMKX0pO3JldHVybiBLfTtkLnNldEFycmF5T2JzZXJ2YWJseT1mdW5jdGlvbihCLEcpe2NvbnN0IEs9Qi5nZXQoInNlc3Npb25Hcm91cHMiLEIpO0FycmF5LmlzQXJyYXkoSyk/Qi5zcGxpY2UuYXBwbHkoQixbInNlc3Npb25Hcm91cHMiLDAsSy5sZW5ndGhdLmNvbmNhdChHKSk6Qi5zZXQoInNlc3Npb25Hcm91cHMiLEcpfTtkLmhhc2hPZlN0cmluZz1mdW5jdGlvbihCKXtsZXQgRz0wO2ZvcihsZXQgSz0wO0s8Qi5sZW5ndGg7KytLKUc9MzEqRytCLmNoYXJDb2RlQXQoSykmNDI5NDk2NzI5NTtyZXR1cm4gRysKTWF0aC5wb3coMiwzMSl9fSkoYy51dGlsc3x8KGMudXRpbHM9e30pKX0pKGEuaHBhcmFtc3x8KGEuaHBhcmFtcz17fSkpfSkodGZ8fCh0Zj17fSkpOwo8L3NjcmlwdD4KCgoKCgo8ZG9tLW1vZHVsZSBpZD0idmFhZGluLXNwbGl0LWxheW91dCI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuICFpbXBvcnRhbnQ7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVaKDApOwogICAgICB9CgogICAgICA6aG9zdChbdmVydGljYWxdKSB7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgfQoKICAgICAgOmhvc3QgOjpzbG90dGVkKCopIHsKICAgICAgICBmbGV4OiAxIDEgYXV0bzsKICAgICAgICBvdmVyZmxvdzogYXV0bzsKICAgICAgfQoKICAgICAgOmhvc3QgPiAjc3BsaXR0ZXIgewogICAgICAgIGZsZXg6IG5vbmU7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHotaW5kZXg6IDE7CiAgICAgICAgb3ZlcmZsb3c6IHZpc2libGU7CiAgICAgICAgbWluLXdpZHRoOiA4cHg7CiAgICAgICAgbWluLWhlaWdodDogOHB4OwogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWRpdmlkZXItY29sb3IsICNjY2MpOwogICAgICAgIGZpbGw6IHZhcigtLXByaW1hcnktYmFja2dyb3VuZC1jb2xvciwgI2ZmZik7CiAgICAgICAgQGFwcGx5IC0tdmFhZGluLXNwbGl0LWxheW91dC1zcGxpdHRlcjsKICAgICAgfQoKICAgICAgOmhvc3QoOm5vdChbdmVydGljYWxdKSkgPiAjc3BsaXR0ZXIgewogICAgICAgIGN1cnNvcjogZXctcmVzaXplOwogICAgICB9CgogICAgICA6aG9zdChbdmVydGljYWxdKSA+ICNzcGxpdHRlciB7CiAgICAgICAgY3Vyc29yOiBucy1yZXNpemU7CiAgICAgIH0KCiAgICAgICNoYW5kbGUsCiAgICAgICNzcGxpdHRlciA6OnNsb3R0ZWQoW3Nsb3Q9aGFuZGxlXSkgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDUwJTsKICAgICAgICBsZWZ0OiA1MCU7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7CiAgICAgIH0KCiAgICAgIDpob3N0KFt2ZXJ0aWNhbF0pID4gI3NwbGl0dGVyICNoYW5kbGUgewogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpIHJvdGF0ZSg5MGRlZyk7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8c2xvdCBpZD0icHJpbWFyeSIgbmFtZT0icHJpbWFyeSI+PC9zbG90PgogICAgPGRpdiBpZD0ic3BsaXR0ZXIiIG9uLXRyYWNrPSJfb25IYW5kbGVUcmFjayIgb24tZG93bj0iX3ByZXZlbnREZWZhdWx0Ij4KICAgICAgPHNsb3QgbmFtZT0iaGFuZGxlIj4KICAgICAgICA8c3ZnIGlkPSJoYW5kbGUiIHdpZHRoPSI0MCIgaGVpZ2h0PSI0MCI+CiAgICAgICAgICA8cmVjdCB4PSIxOSIgeT0iOCIgd2lkdGg9IjIiIGhlaWdodD0iMjQiPjwvcmVjdD4KICAgICAgICA8L3N2Zz4KICAgICAgPC9zbG90PgogICAgPC9kaXY+CiAgICA8c2xvdCBpZD0ic2Vjb25kYXJ5IiBuYW1lPSJzZWNvbmRhcnkiPjwvc2xvdD4KICA8L3RlbXBsYXRlPgoKICA8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdmFhZGluLXNwbGl0LWxheW91dC92YWFkaW4tc3BsaXQtbGF5b3V0Lmh0bWwuanMKUG9seW1lcih7aXM6InZhYWRpbi1zcGxpdC1sYXlvdXQiLGJlaGF2aW9yczpbUG9seW1lci5Jcm9uUmVzaXphYmxlQmVoYXZpb3JdLHByb3BlcnRpZXM6e3ZlcnRpY2FsOnt0eXBlOkJvb2xlYW4scmVmbGVjdFRvQXR0cmlidXRlOiEwLHZhbHVlOiExfSxfcHJldmlvdXNQcmltYXJ5UG9pbnRlckV2ZW50czpTdHJpbmcsX3ByZXZpb3VzU2Vjb25kYXJ5UG9pbnRlckV2ZW50czpTdHJpbmd9LGF0dGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fb2JzZXJ2ZXI9UG9seW1lci5kb20odGhpcykub2JzZXJ2ZU5vZGVzKHRoaXMuX3Byb2Nlc3NDaGlsZHJlbil9LGRldGFjaGVkOmZ1bmN0aW9uKCl7UG9seW1lci5kb20odGhpcykudW5vYnNlcnZlTm9kZXModGhpcy5fb2JzZXJ2ZXIpfSxfcHJvY2Vzc0NoaWxkcmVuOmZ1bmN0aW9uKCl7dGhpcy5nZXRFZmZlY3RpdmVDaGlsZHJlbigpLmZpbHRlcihmdW5jdGlvbihhKXtyZXR1cm4gYS5jbGFzc0xpc3QuY29udGFpbnMoInNwbGl0dGVyLWhhbmRsZSIpPwooUG9seW1lci5kb20oYSkuc2V0QXR0cmlidXRlKCJzbG90IiwiaGFuZGxlIiksITEpOiEwfSkuZm9yRWFjaChmdW5jdGlvbihhLGMpezA9PT1jPyh0aGlzLl9wcmltYXJ5Q2hpbGQ9YSxQb2x5bWVyLmRvbShhKS5zZXRBdHRyaWJ1dGUoInNsb3QiLCJwcmltYXJ5IikpOjE9PWM/KHRoaXMuX3NlY29uZGFyeUNoaWxkPWEsUG9seW1lci5kb20oYSkuc2V0QXR0cmlidXRlKCJzbG90Iiwic2Vjb25kYXJ5IikpOlBvbHltZXIuZG9tKGEpLnJlbW92ZUF0dHJpYnV0ZSgic2xvdCIpfS5iaW5kKHRoaXMpKX0sX3NldEZsZXhCYXNpczpmdW5jdGlvbihhLGMsZCl7Yz1NYXRoLm1heCgwLE1hdGgubWluKGMsZCkpOzA9PT1jJiYoYz0xRS02KTthLnN0eWxlLmZsZXg9IjEgMSAiK2MrInB4In0sX29uSGFuZGxlVHJhY2s6ZnVuY3Rpb24oYSl7aWYodGhpcy5fcHJpbWFyeUNoaWxkJiZ0aGlzLl9zZWNvbmRhcnlDaGlsZCl7dmFyIGM9dGhpcy52ZXJ0aWNhbD8iaGVpZ2h0Ijoid2lkdGgiOyJzdGFydCI9PT0KYS5kZXRhaWwuc3RhdGU/KHRoaXMuX3N0YXJ0U2l6ZT17Y29udGFpbmVyOnRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClbY10tdGhpcy4kLnNwbGl0dGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpW2NdLHByaW1hcnk6dGhpcy5fcHJpbWFyeUNoaWxkLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpW2NdLHNlY29uZGFyeTp0aGlzLl9zZWNvbmRhcnlDaGlsZC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVtjXX0sdGhpcy5fcHJldmlvdXNQcmltYXJ5UG9pbnRlckV2ZW50cz10aGlzLl9wcmltYXJ5Q2hpbGQuc3R5bGUucG9pbnRlckV2ZW50cyx0aGlzLl9wcmV2aW91c1NlY29uZGFyeVBvaW50ZXJFdmVudHM9dGhpcy5fc2Vjb25kYXJ5Q2hpbGQuc3R5bGUucG9pbnRlckV2ZW50cyx0aGlzLl9wcmltYXJ5Q2hpbGQuc3R5bGUucG9pbnRlckV2ZW50cz0ibm9uZSIsdGhpcy5fc2Vjb25kYXJ5Q2hpbGQuc3R5bGUucG9pbnRlckV2ZW50cz0ibm9uZSIpOihjPXRoaXMudmVydGljYWw/YS5kZXRhaWwuZHk6CmEuZGV0YWlsLmR4LHRoaXMuX3NldEZsZXhCYXNpcyh0aGlzLl9wcmltYXJ5Q2hpbGQsdGhpcy5fc3RhcnRTaXplLnByaW1hcnkrYyx0aGlzLl9zdGFydFNpemUuY29udGFpbmVyKSx0aGlzLl9zZXRGbGV4QmFzaXModGhpcy5fc2Vjb25kYXJ5Q2hpbGQsdGhpcy5fc3RhcnRTaXplLnNlY29uZGFyeS1jLHRoaXMuX3N0YXJ0U2l6ZS5jb250YWluZXIpLHRoaXMubm90aWZ5UmVzaXplKCksImVuZCI9PT1hLmRldGFpbC5zdGF0ZSYmKGRlbGV0ZSB0aGlzLl9zdGFydFNpemUsdGhpcy5fcHJpbWFyeUNoaWxkLnN0eWxlLnBvaW50ZXJFdmVudHM9dGhpcy5fcHJldmlvdXNQcmltYXJ5UG9pbnRlckV2ZW50cyx0aGlzLl9zZWNvbmRhcnlDaGlsZC5zdHlsZS5wb2ludGVyRXZlbnRzPXRoaXMuX3ByZXZpb3VzU2Vjb25kYXJ5UG9pbnRlckV2ZW50cykpfX0sX3ByZXZlbnREZWZhdWx0OmZ1bmN0aW9uKGEpe2EucHJldmVudERlZmF1bHQoKX19KTsKPC9zY3JpcHQ+CjwvZG9tLW1vZHVsZT4KCgoKCjxkb20tbW9kdWxlIGlkPSJ0Zi1ocGFyYW1zLXF1ZXJ5LXBhbmUiPgogIDx0ZW1wbGF0ZT4KICAgIDxkaXYgY2xhc3M9InBhbmUiPgogICAgICA8dmFhZGluLXNwbGl0LWxheW91dCB2ZXJ0aWNhbD4KICAgICAgICA8dmFhZGluLXNwbGl0LWxheW91dCB2ZXJ0aWNhbCBpZD0iaHlwZXJwYXJhbWV0ZXJzLW1ldHJpY3Mtc3RhdHVzZXMiPgogICAgICAgICAgPHZhYWRpbi1zcGxpdC1sYXlvdXQgdmVydGljYWwgaWQ9Imh5cGVycGFyYW1ldGVycy1tZXRyaWNzIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbiBoeXBlcnBhcmFtZXRlcnMiPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tdGl0bGUiPkh5cGVycGFyYW1ldGVyczwvZGl2PgogICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9Int7X2hwYXJhbXN9fSIgYXM9ImhwYXJhbSI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJocGFyYW0iPgogICAgICAgICAgICAgICAgICA8cGFwZXItY2hlY2tib3ggY2hlY2tlZD0ie3tocGFyYW0uZGlzcGxheWVkfX0iIGNsYXNzPSJocGFyYW0tY2hlY2tib3giPgogICAgICAgICAgICAgICAgICAgIFtbX2hwYXJhbU5hbWUoaHBhcmFtLmluZm8pXV0KICAgICAgICAgICAgICAgICAgPC9wYXBlci1jaGVja2JveD4KICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbaHBhcmFtLmZpbHRlci5kb21haW5EaXNjcmV0ZV1dIj4KICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW2hwYXJhbS5maWx0ZXIuZG9tYWluRGlzY3JldGVdXSI+CiAgICAgICAgICAgICAgICAgICAgICA8cGFwZXItY2hlY2tib3ggY2hlY2tlZD0ie3tpdGVtLmNoZWNrZWR9fSIgY2xhc3M9ImRpc2NyZXRlLXZhbHVlLWNoZWNrYm94IiBvbi1jaGFuZ2U9Il9xdWVyeVNlcnZlciI+CiAgICAgICAgICAgICAgICAgICAgICAgIFtbX3ByZXR0eVByaW50KGl0ZW0udmFsdWUpXV0KICAgICAgICAgICAgICAgICAgICAgIDwvcGFwZXItY2hlY2tib3g+CiAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tocGFyYW0uZmlsdGVyLmludGVydmFsXV0iPgogICAgICAgICAgICAgICAgICAgIDxwYXBlci1pbnB1dCBsYWJlbD0iTWluIiB2YWx1ZT0ie3tocGFyYW0uZmlsdGVyLmludGVydmFsLm1pbi52YWx1ZX19IiBhbGxvd2VkX3BhdHRlcm49IlswLTkuZVwtXSIgb24tdmFsdWUtY2hhbmdlZD0iX3F1ZXJ5U2VydmVyIiBlcnJvci1tZXNzYWdlPSJJbnZhbGlkIGlucHV0IiBpbnZhbGlkPSJbW2hwYXJhbS5maWx0ZXIuaW50ZXJ2YWwubWluLmludmFsaWRdXSIgcGxhY2Vob2xkZXI9Ii1pbmZpbml0eSI+CiAgICAgICAgICAgICAgICAgICAgPC9wYXBlci1pbnB1dD4KICAgICAgICAgICAgICAgICAgICA8cGFwZXItaW5wdXQgbGFiZWw9Ik1heCIgdmFsdWU9Int7aHBhcmFtLmZpbHRlci5pbnRlcnZhbC5tYXgudmFsdWV9fSIgYWxsb3dlZF9wYXR0ZXJuPSJbMC05LmVcLV0iIG9uLXZhbHVlLWNoYW5nZWQ9Il9xdWVyeVNlcnZlciIgZXJyb3ItbWVzc2FnZT0iSW52YWxpZCBpbnB1dCIgaW52YWxpZD0iW1tocGFyYW0uZmlsdGVyLmludGVydmFsLm1heC5pbnZhbGlkXV0iIHBsYWNlaG9sZGVyPSIraW5maW5pdHkiPgogICAgICAgICAgICAgICAgICAgIDwvcGFwZXItaW5wdXQ+CiAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbaHBhcmFtLmZpbHRlci5yZWdleHBdXSI+CiAgICAgICAgICAgICAgICAgICAgPHBhcGVyLWlucHV0IGxhYmVsPSJSZWd1bGFyIGV4cHJlc3Npb24iIHZhbHVlPSJ7e2hwYXJhbS5maWx0ZXIucmVnZXhwfX0iIG9uLXZhbHVlLWNoYW5nZWQ9Il9xdWVyeVNlcnZlciI+CiAgICAgICAgICAgICAgICAgICAgPC9wYXBlci1pbnB1dD4KICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uIG1ldHJpY3MiPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tdGl0bGUiPk1ldHJpY3M8L2Rpdj4KICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJ7e19tZXRyaWNzfX0iIGFzPSJtZXRyaWMiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibWV0cmljIj4KICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgIDxwYXBlci1jaGVja2JveCBjaGVja2VkPSJ7e21ldHJpYy5kaXNwbGF5ZWR9fSIgY2xhc3M9Im1ldHJpYy1jaGVja2JveCI+CiAgICAgICAgICAgICAgICAgICAgW1tfbWV0cmljTmFtZShtZXRyaWMuaW5mbyldXQogICAgICAgICAgICAgICAgICA8L3BhcGVyLWNoZWNrYm94PgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbmxpbmUtZWxlbWVudCI+CiAgICAgICAgICAgICAgICAgICAgPHBhcGVyLWlucHV0IGxhYmVsPSJNaW4iIHZhbHVlPSJ7e21ldHJpYy5maWx0ZXIuaW50ZXJ2YWwubWluLnZhbHVlfX0iIGFsbG93ZWQtcGF0dGVybj0iWzAtOS5lXC1dIiBvbi12YWx1ZS1jaGFuZ2VkPSJfcXVlcnlTZXJ2ZXIiIGVycm9yLW1lc3NhZ2U9IkludmFsaWQgaW5wdXQiIGludmFsaWQ9Int7bWV0cmljLmZpbHRlci5pbnRlcnZhbC5taW4uaW52YWxpZH19IiBwbGFjZWhvbGRlcj0iLWluZmluaXR5Ij4KICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLWlucHV0PgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW5saW5lLWVsZW1lbnQiPgogICAgICAgICAgICAgICAgICAgIDxwYXBlci1pbnB1dCBsYWJlbD0iTWF4IiBhbGxvd2VkLXBhdHRlcm49IlswLTkuZVwtXSIgdmFsdWU9Int7bWV0cmljLmZpbHRlci5pbnRlcnZhbC5tYXgudmFsdWV9fSIgb24tdmFsdWUtY2hhbmdlZD0iX3F1ZXJ5U2VydmVyIiBlcnJvci1tZXNzYWdlPSJJbnZhbGlkIGlucHV0IiBpbnZhbGlkPSJ7e21ldHJpYy5maWx0ZXIuaW50ZXJ2YWwubWF4LmludmFsaWR9fSIgcGxhY2Vob2xkZXI9IitpbmZpbml0eSI+CiAgICAgICAgICAgICAgICAgICAgPC9wYXBlci1pbnB1dD4KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdmFhZGluLXNwbGl0LWxheW91dD4KICAgICAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24gc3RhdHVzIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi10aXRsZSI+U3RhdHVzPC9kaXY+CiAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX3N0YXR1c2VzXV0iIGFzPSJzdGF0dXMiPgogICAgICAgICAgICAgIDxwYXBlci1jaGVja2JveCBjaGVja2VkPSJ7e3N0YXR1cy5hbGxvd2VkfX0iIG9uLWNoYW5nZT0iX3F1ZXJ5U2VydmVyIj4KICAgICAgICAgICAgICAgIFtbc3RhdHVzLmRpc3BsYXlOYW1lXV0KICAgICAgICAgICAgICA8L3BhcGVyLWNoZWNrYm94PgogICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC92YWFkaW4tc3BsaXQtbGF5b3V0PgogICAgICAgIDx2YWFkaW4tc3BsaXQtbGF5b3V0IHZlcnRpY2FsIGlkPSJzb3J0aW5nLXBhZ2luZyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uIHNvcnRpbmciPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5Tb3J0aW5nPC9kaXY+CiAgICAgICAgICAgIDxwYXBlci1kcm9wZG93bi1tZW51IGxhYmVsPSJTb3J0IGJ5IiBvbi1zZWxlY3RlZC1pdGVtLWNoYW5nZWQ9Il9xdWVyeVNlcnZlciIgaG9yaXpvbnRhbC1hbGlnbj0ibGVmdCI+CiAgICAgICAgICAgICAgPHBhcGVyLWxpc3Rib3ggY2xhc3M9ImRyb3Bkb3duLWNvbnRlbnQiIHNsb3Q9ImRyb3Bkb3duLWNvbnRlbnQiIHNlbGVjdGVkPSJ7e19zb3J0QnlJbmRleH19IiBvbi1zZWxlY3RlZC1pdGVtLWNoYW5nZWQ9Il9xdWVyeVNlcnZlciI+CiAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19ocGFyYW1zXV0iIGFzPSJocGFyYW0iPgogICAgICAgICAgICAgICAgICA8cGFwZXItaXRlbT4KICAgICAgICAgICAgICAgICAgICBbW19ocGFyYW1OYW1lKGhwYXJhbS5pbmZvKV1dCiAgICAgICAgICAgICAgICAgIDwvcGFwZXItaXRlbT4KICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19tZXRyaWNzXV0iIGFzPSJtZXRyaWMiPgogICAgICAgICAgICAgICAgICA8cGFwZXItaXRlbT4KICAgICAgICAgICAgICAgICAgICBbW19tZXRyaWNOYW1lKG1ldHJpYy5pbmZvKV1dCiAgICAgICAgICAgICAgICAgIDwvcGFwZXItaXRlbT4KICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgPC9wYXBlci1saXN0Ym94PgogICAgICAgICAgICA8L3BhcGVyLWRyb3Bkb3duLW1lbnU+CiAgICAgICAgICAgIDxwYXBlci1kcm9wZG93bi1tZW51IGxhYmVsPSJEaXJlY3Rpb24iIG9uLXNlbGVjdGVkLWl0ZW0tY2hhbmdlZD0iX3F1ZXJ5U2VydmVyIiBob3Jpem9udGFsLWFsaWduPSJsZWZ0Ij4KICAgICAgICAgICAgICA8cGFwZXItbGlzdGJveCBjbGFzcz0iZHJvcGRvd24tY29udGVudCIgc2xvdD0iZHJvcGRvd24tY29udGVudCIgc2VsZWN0ZWQ9Int7X3NvcnREaXJlY3Rpb259fSI+CiAgICAgICAgICAgICAgICA8cGFwZXItaXRlbT5Bc2NlbmRpbmc8L3BhcGVyLWl0ZW0+CiAgICAgICAgICAgICAgICA8cGFwZXItaXRlbT5EZXNjZW5kaW5nPC9wYXBlci1pdGVtPgogICAgICAgICAgICAgIDwvcGFwZXItbGlzdGJveD4KICAgICAgICAgICAgPC9wYXBlci1kcm9wZG93bi1tZW51PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uIHBhZ2luZyI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tdGl0bGUiPlBhZ2luZzwvZGl2PgogICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgIE51bWJlciBvZiBtYXRjaGluZyBzZXNzaW9uIGdyb3VwczogW1tfdG90YWxTZXNzaW9uR3JvdXBzQ291bnRTdHJdXQogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW5saW5lLWVsZW1lbnQgcGFnZS1udW1iZXItaW5wdXQiPgogICAgICAgICAgICAgIDxwYXBlci1pbnB1dCBsYWJlbD0iUGFnZSAjIiB2YWx1ZT0ie3tfcGFnZU51bWJlcklucHV0LnZhbHVlfX0iIGFsbG93ZWQtcGF0dGVybj0iWzAtOV0iIGVycm9yLW1lc3NhZ2U9IkludmFsaWQgaW5wdXQiIGludmFsaWQ9IltbX3BhZ2VOdW1iZXJJbnB1dC5pbnZhbGlkXV0iIG9uLXZhbHVlLWNoYW5nZWQ9Il9xdWVyeVNlcnZlciI+CiAgICAgICAgICAgICAgICA8ZGl2IHNsb3Q9InN1ZmZpeCIgY2xhc3M9InBhZ2Utc3VmZml4Ij4vIFtbX3BhZ2VDb3VudFN0cl1dPC9kaXY+CiAgICAgICAgICAgICAgPC9wYXBlci1pbnB1dD4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImlubGluZS1lbGVtZW50IHBhZ2Utc2l6ZS1pbnB1dCI+CiAgICAgICAgICAgICAgPHBhcGVyLWlucHV0IGxhYmVsPSJNYXggIyBvZiBzZXNzaW9uIGdyb3VwcyBwZXIgcGFnZToiIHZhbHVlPSJ7e19wYWdlU2l6ZUlucHV0LnZhbHVlfX0iIGFsbG93ZWQtcGF0dGVybj0iWzAtOV0iIGVycm9yLW1lc3NhZ2U9IkludmFsaWQgaW5wdXQiIGludmFsaWQ9IltbX3BhZ2VTaXplSW5wdXQuaW52YWxpZF1dIiBvbi12YWx1ZS1jaGFuZ2VkPSJfcXVlcnlTZXJ2ZXIiPgogICAgICAgICAgICAgIDwvcGFwZXItaW5wdXQ+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC92YWFkaW4tc3BsaXQtbGF5b3V0PgogICAgICA8L3ZhYWRpbi1zcGxpdC1sYXlvdXQ+CiAgICA8L2Rpdj4KICAgIDxzdHlsZT4KICAgICAgLnBhbmUgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIH0KICAgICAgLnNlY3Rpb24gewogICAgICAgIG1hcmdpbjogNXB4IDEwcHggNXB4IDEwcHg7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgfQogICAgICAuc2VjdGlvbi10aXRsZSB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogN3B4OwogICAgICB9CiAgICAgICNoeXBlcnBhcmFtZXRlcnMtbWV0cmljcy1zdGF0dXNlcyB7CiAgICAgICAgZmxleC1iYXNpczogNzAlOwogICAgICAgIGZsZXgtc2hyaW5rOiAxOwogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgfQogICAgICAjaHlwZXJwYXJhbWV0ZXJzLW1ldHJpY3MgewogICAgICAgIGZsZXgtYmFzaXM6IDkwJTsKICAgICAgICBmbGV4LXNocmluazogMTsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgIH0KICAgICAgLmh5cGVycGFyYW1ldGVycyB7CiAgICAgICAgZmxleC1iYXNpczogYXV0bzsKICAgICAgICBmbGV4LXNocmluazogMTsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgIH0KICAgICAgLm1ldHJpY3MgewogICAgICAgIGZsZXgtYmFzaXM6IGF1dG87CiAgICAgICAgZmxleC1zaHJpbms6IDE7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICB9CiAgICAgIC5zdGF0dXNlcyB7CiAgICAgICAgZmxleC1iYXNpczogYXV0bzsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgICBmbGV4LWdyb3c6IDA7CiAgICAgIH0KICAgICAgI3NvcnRpbmctcGFnaW5nIHsKICAgICAgICBmbGV4LWJhc2lzOiAzMCU7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgZmxleC1ncm93OiAwOwogICAgICB9CiAgICAgIC5zb3J0aW5nIHsKICAgICAgICBmbGV4LWJhc2lzOiBhdXRvOwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICAgIGZsZXgtZ3JvdzogMDsKICAgICAgfQogICAgICAucGFnaW5nIHsKICAgICAgICBmbGV4LWJhc2lzOiBhdXRvOwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICAgIGZsZXgtZ3JvdzogMDsKICAgICAgfQogICAgICAuZGlzY3JldGUtdmFsdWUtY2hlY2tib3gsCiAgICAgIC5tZXRyaWMtY2hlY2tib3gsCiAgICAgIC5ocGFyYW0tY2hlY2tib3ggewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CiAgICAgIC5kaXNjcmV0ZS12YWx1ZS1jaGVja2JveCB7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDIwcHg7CiAgICAgIH0KICAgICAgLmhwYXJhbSwKICAgICAgLm1ldHJpYyB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH0KICAgICAgLmlubGluZS1lbGVtZW50IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgd2lkdGg6IDQwJTsKICAgICAgICBtYXJnaW4tbGVmdDogMTBweDsKICAgICAgfQogICAgICAucGFnZS1udW1iZXItaW5wdXQgewogICAgICAgIHdpZHRoOiAyMCU7CiAgICAgIH0KICAgICAgLnBhZ2Utc2l6ZS1pbnB1dCB7CiAgICAgICAgd2lkdGg6IDYwJTsKICAgICAgfQogICAgICB2YWFkaW4tc3BsaXQtbGF5b3V0IHsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIH0KICAgICAgcGFwZXItbGlzdGJveCB7CiAgICAgICAgbWF4LWhlaWdodDogMTVlbTsKICAgICAgfQogICAgICAucGFnZS1zdWZmaXggewogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KICA8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdGYtaHBhcmFtcy1xdWVyeS1wYW5lL3RmLWhwYXJhbXMtcXVlcnktcGFuZS5odG1sLmpzClBvbHltZXIoe2lzOiJ0Zi1ocGFyYW1zLXF1ZXJ5LXBhbmUiLHByb3BlcnRpZXM6e2JhY2tlbmQ6T2JqZWN0LGV4cGVyaW1lbnROYW1lOlN0cmluZyxjb25maWd1cmF0aW9uOnt0eXBlOk9iamVjdCx2YWx1ZTooKT0+KHtzY2hlbWE6e2hwYXJhbUNvbHVtbnM6W10sbWV0cmljQ29sdW1uczpbXX0sY29sdW1uc1Zpc2liaWxpdHk6W10sdmlzaWJsZVNjaGVtYTp7aHBhcmFtSW5mb3M6W10sbWV0cmljSW5mb3M6W119fSkscmVhZE9ubHk6ITAsbm90aWZ5OiEwfSxzZXNzaW9uR3JvdXBzOnt0eXBlOkFycmF5LHZhbHVlOigpPT5bXSxyZWFkT25seTohMCxub3RpZnk6ITB9LF9leHBlcmltZW50Ok9iamVjdCxfaHBhcmFtczpBcnJheSxfbWV0cmljczpBcnJheSxfc3RhdHVzZXM6e3R5cGU6QXJyYXksdmFsdWU6KCk9Plt7dmFsdWU6IlNUQVRVU19VTktOT1dOIixkaXNwbGF5TmFtZToiVW5rbm93biIsYWxsb3dlZDohMH0se3ZhbHVlOiJTVEFUVVNfU1VDQ0VTUyIsZGlzcGxheU5hbWU6IlN1Y2Nlc3MiLAphbGxvd2VkOiEwfSx7dmFsdWU6IlNUQVRVU19GQUlMVVJFIixkaXNwbGF5TmFtZToiRmFpbHVyZSIsYWxsb3dlZDohMH0se3ZhbHVlOiJTVEFUVVNfUlVOTklORyIsZGlzcGxheU5hbWU6IlJ1bm5pbmciLGFsbG93ZWQ6ITB9XX0sX2dldEV4cGVyaW1lbnRSZXNvbHZlZDp7dHlwZTpPYmplY3QsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFByb21pc2UoYT0+e3RoaXMuX3Jlc29sdmVHZXRFeHBlcmltZW50PWF9KX19LF9yZXNvbHZlR2V0RXhwZXJpbWVudDpGdW5jdGlvbixfbGlzdFNlc3Npb25Hcm91cHNDYW5jZWxsZXI6e3R5cGU6T2JqZWN0LHZhbHVlOigpPT5uZXcgUGsuQ2FuY2VsbGVyfSxfc29ydEJ5SW5kZXg6TnVtYmVyLF9zb3J0RGlyZWN0aW9uOk51bWJlcixfcGFnZVNpemVJbnB1dDp7dHlwZTpPYmplY3QsdmFsdWU6e3ZhbHVlOiIxMDAiLGludmFsaWQ6ITF9fSxfcGFnZU51bWJlcklucHV0Ont0eXBlOk9iamVjdCx2YWx1ZTp7dmFsdWU6IjEiLGludmFsaWQ6ITF9fSwKX3BhZ2VDb3VudFN0cjp7dHlwZTpTdHJpbmcsdmFsdWU6Ij8ifSxfdG90YWxTZXNzaW9uR3JvdXBzQ291bnRTdHI6U3RyaW5nfSxvYnNlcnZlcnM6WyJfY29tcHV0ZUV4cGVyaW1lbnRBbmRSZWxhdGVkUHJvcHMoYmFja2VuZCwgZXhwZXJpbWVudE5hbWUpIiwiX3VwZGF0ZUNvbmZpZ3VyYXRpb24oX2hwYXJhbXMuKiwgX21ldHJpY3MuKikiXSxyZWxvYWQoKXt0aGlzLl9xdWVyeVNlcnZlcigpfSxfY29tcHV0ZUV4cGVyaW1lbnRBbmRSZWxhdGVkUHJvcHMoKXtjb25zdCBhPXRmLmhwYXJhbXMudXRpbHM7YS5pc051bGxPclVuZGVmaW5lZCh0aGlzLmJhY2tlbmQpfHxhLmlzTnVsbE9yVW5kZWZpbmVkKHRoaXMuZXhwZXJpbWVudE5hbWUpfHx0aGlzLmJhY2tlbmQuZ2V0RXhwZXJpbWVudCh7ZXhwZXJpbWVudE5hbWU6dGhpcy5leHBlcmltZW50TmFtZX0pLnRoZW4oYz0+e18uaXNFcXVhbChjLHRoaXMuX2V4cGVyaW1lbnQpfHwodGhpcy5zZXQoIl9leHBlcmltZW50IixjKSx0aGlzLl9jb21wdXRlSFBhcmFtcygpLAp0aGlzLl9jb21wdXRlTWV0cmljcygpLHRoaXMuX3F1ZXJ5U2VydmVyKCksdGhpcy5fcmVzb2x2ZUdldEV4cGVyaW1lbnQoKSl9KX0sX2NvbXB1dGVIUGFyYW1zKCl7Y29uc3QgYT1bXTt0aGlzLl9leHBlcmltZW50LmhwYXJhbUluZm9zLmZvckVhY2goKGMsZCk9Pntjb25zdCBmPXtpbmZvOmMsZGlzcGxheWVkOjU+ZCxmaWx0ZXI6e319O2YuaW5mby5oYXNPd25Qcm9wZXJ0eSgiZG9tYWluRGlzY3JldGUiKT8oZi5maWx0ZXIuZG9tYWluRGlzY3JldGU9W10sZi5pbmZvLmRvbWFpbkRpc2NyZXRlLmZvckVhY2goZz0+e2YuZmlsdGVyLmRvbWFpbkRpc2NyZXRlLnB1c2goe3ZhbHVlOmcsY2hlY2tlZDohMH0pfSkpOiJEQVRBX1RZUEVfQk9PTCI9PT1mLmluZm8udHlwZT9mLmZpbHRlci5kb21haW5EaXNjcmV0ZT1be3ZhbHVlOiExLGNoZWNrZWQ6ITB9LHt2YWx1ZTohMCxjaGVja2VkOiEwfV06IkRBVEFfVFlQRV9GTE9BVDY0Ij09PWYuaW5mby50eXBlP2YuZmlsdGVyLmludGVydmFsPXttaW46e3ZhbHVlOiIiLAppbnZhbGlkOiExfSxtYXg6e3ZhbHVlOiIiLGludmFsaWQ6ITF9fToiREFUQV9UWVBFX1NUUklORyI9PT1mLmluZm8udHlwZT9mLmZpbHRlci5yZWdleHA9IiI6Y29uc29sZS53YXJuKCJ1bmtub3duIGhwYXJhbS5pbmZvLnR5cGU6ICVzIixmLmluZm8udHlwZSk7YS5wdXNoKGYpfSk7dGhpcy5zZXQoIl9ocGFyYW1zIixhKX0sX2NvbXB1dGVNZXRyaWNzKCl7Y29uc3QgYT1bXTt0aGlzLl9leHBlcmltZW50Lm1ldHJpY0luZm9zLmZvckVhY2goKGMsZCk9PnthLnB1c2goe2luZm86YyxmaWx0ZXI6e2ludGVydmFsOnttaW46e3ZhbHVlOiIiLGludmFsaWQ6ITF9LG1heDp7dmFsdWU6IiIsaW52YWxpZDohMX19fSxkaXNwbGF5ZWQ6NT5kfSl9KTt0aGlzLnNldCgiX21ldHJpY3MiLGEpfSxfY29tcHV0ZVNjaGVtYSgpe3JldHVybiB0aGlzLl9ocGFyYW1zJiZ0aGlzLl9tZXRyaWNzP3tocGFyYW1Db2x1bW5zOnRoaXMuX2hwYXJhbXMubWFwKGE9Pih7aHBhcmFtSW5mbzphLmluZm99KSksbWV0cmljQ29sdW1uczp0aGlzLl9tZXRyaWNzLm1hcChhPT4KKHttZXRyaWNJbmZvOmEuaW5mb30pKX06e2hwYXJhbUNvbHVtbnM6W10sbWV0cmljQ29sdW1uczpbXX19LF91cGRhdGVDb25maWd1cmF0aW9uKCl7dGhpcy5kZWJvdW5jZSgiX3VwZGF0ZUNvbmZpZ3VyYXRpb24iLCgpPT57dGhpcy5fc2V0Q29uZmlndXJhdGlvbih7c2NoZW1hOnRoaXMuX2NvbXB1dGVTY2hlbWEoKSxjb2x1bW5zVmlzaWJpbGl0eTp0aGlzLl9jb21wdXRlQ29sdW1uc1Zpc2liaWxpdHkoKSx2aXNpYmxlU2NoZW1hOnRoaXMuX2NvbXB1dGVWaXNpYmxlU2NoZW1hKCl9KX0pfSxfY29tcHV0ZUNvbHVtbnNWaXNpYmlsaXR5KCl7cmV0dXJuIHRoaXMuX2hwYXJhbXMmJnRoaXMuX21ldHJpY3M/dGhpcy5faHBhcmFtcy5tYXAoYT0+YS5kaXNwbGF5ZWQpLmNvbmNhdCh0aGlzLl9tZXRyaWNzLm1hcChhPT5hLmRpc3BsYXllZCkpOltdfSxfY29tcHV0ZVZpc2libGVTY2hlbWEoKXtpZighdGhpcy5faHBhcmFtc3x8IXRoaXMuX21ldHJpY3MpcmV0dXJue2hwYXJhbUluZm9zOltdLAptZXRyaWNJbmZvczpbXX07Y29uc3QgYT10aGlzLl9ocGFyYW1zLmZpbHRlcihkPT5kLmRpc3BsYXllZCkubWFwKGQ9PmQuaW5mbyksYz10aGlzLl9tZXRyaWNzLmZpbHRlcihkPT5kLmRpc3BsYXllZCkubWFwKGQ9PmQuaW5mbyk7cmV0dXJue2hwYXJhbUluZm9zOmEsbWV0cmljSW5mb3M6Y319LF9xdWVyeVNlcnZlcigpe3RoaXMuZGVib3VuY2UoInF1ZXJ5U2VydmVyIiwoKT0+dGhpcy5fcXVlcnlTZXJ2ZXJOb0RlYm91bmNlKCksMTAwKX0sX3F1ZXJ5U2VydmVyTm9EZWJvdW5jZSgpe3JldHVybiB0aGlzLl9zZW5kTGlzdFNlc3Npb25Hcm91cHNSZXF1ZXN0KCkudGhlbih0aGlzLl9saXN0U2Vzc2lvbkdyb3Vwc0NhbmNlbGxlci5jYW5jZWxsYWJsZSgoe3ZhbHVlOmEsY2FuY2VsbGVkOmN9KT0+e2N8fCgwPD1hLnRvdGFsU2l6ZT8odGhpcy5zZXQoIl9wYWdlQ291bnRTdHIiLFN0cmluZyhNYXRoLmNlaWwoYS50b3RhbFNpemUvK3RoaXMuX3BhZ2VTaXplSW5wdXQudmFsdWUpKSksdGhpcy5zZXQoIl90b3RhbFNlc3Npb25Hcm91cHNDb3VudFN0ciIsCmEudG90YWxTaXplKSk6KHRoaXMuc2V0KCJfcGFnZUNvdW50U3RyIiwiPyIpLHRoaXMuc2V0KCJfdG90YWxTZXNzaW9uR3JvdXBzQ291bnRTdHIiLCJVbmtub3duIikpLHRmLmhwYXJhbXMudXRpbHMuc2V0QXJyYXlPYnNlcnZhYmx5KHRoaXMsYS5zZXNzaW9uR3JvdXBzKSl9KSl9LF9zZW5kTGlzdFNlc3Npb25Hcm91cHNSZXF1ZXN0KCl7Y29uc3QgYT10aGlzLl9idWlsZExpc3RTZXNzaW9uR3JvdXBzUmVxdWVzdCgpO2lmKG51bGwhPT1hKXJldHVybiB0aGlzLl9saXN0U2Vzc2lvbkdyb3Vwc0NhbmNlbGxlci5jYW5jZWxBbGwoKSx0aGlzLmJhY2tlbmQubGlzdFNlc3Npb25Hcm91cHMoYSl9LF9idWlsZExpc3RTZXNzaW9uR3JvdXBzUmVxdWVzdCgpe2Z1bmN0aW9uIGEocCl7dmFyIHE9ZC5nZXQocCsiLm1pbi52YWx1ZSIpO2NvbnNvbGUuYXNzZXJ0KHZvaWQgMCE9PXEpO3E9IiI9PT1xPyItSW5maW5pdHkiOitxO2Quc2V0KHArIi5taW4uaW52YWxpZCIsaXNOYU4ocSkpO2Y9ZiYmIWlzTmFOKHEpOwp2YXIgcj1kLmdldChwKyIubWF4LnZhbHVlIik7Y29uc29sZS5hc3NlcnQodm9pZCAwIT09cik7cj0iIj09PXI/IkluZmluaXR5IjorcjtkLnNldChwKyIubWF4LmludmFsaWQiLGlzTmFOKHIpKTtmPWYmJiFpc05hTihyKTtyZXR1cm4gaXNOYU4ocSl8fGlzTmFOKHIpP251bGw6e21pblZhbHVlOnEsbWF4VmFsdWU6cn19ZnVuY3Rpb24gYyhwKXt2YXIgcT1kLmdldChwKyIudmFsdWUiKTtjb25zb2xlLmFzc2VydCh2b2lkIDAhPT1xKTtxPStxO2NvbnN0IHI9TnVtYmVyLmlzSW50ZWdlcihxKSYmMDxxO2Quc2V0KHArIi5pbnZhbGlkIiwhcik7Zj1mJiZyO3JldHVybiByP3E6bnVsbH1jb25zdCBkPXRoaXM7bGV0IGY9ITA7Y29uc3QgZz10aGlzLl9zdGF0dXNlcy5maWx0ZXIocD0+cC5hbGxvd2VkKS5tYXAocD0+cC52YWx1ZSk7bGV0IGw9W107dGhpcy5faHBhcmFtcy5mb3JFYWNoKChwLHEpPT57bGV0IHI9e2hwYXJhbTpwLmluZm8ubmFtZX07aWYocC5maWx0ZXIuZG9tYWluRGlzY3JldGUpci5maWx0ZXJEaXNjcmV0ZT0KW10scC5maWx0ZXIuZG9tYWluRGlzY3JldGUuZm9yRWFjaCh0PT57dC5jaGVja2VkJiZyLmZpbHRlckRpc2NyZXRlLnB1c2godC52YWx1ZSl9KTtlbHNlIGlmKHAuZmlsdGVyLmludGVydmFsKXIuZmlsdGVySW50ZXJ2YWw9YSgiX2hwYXJhbXMuIitxKyIuZmlsdGVyLmludGVydmFsIik7ZWxzZSBpZihwLmZpbHRlci5yZWdleHApci5maWx0ZXJSZWdleHA9cC5maWx0ZXIucmVnZXhwO2Vsc2UgcmV0dXJuIGNvbnNvbGUuZXJyb3IoImhwYXJhbS5maWx0ZXIgd2l0aCBubyBkb21haW5EaXNjcmV0ZSwgaW50ZXJ2YWwgb3IgcmVnZXhwIHByb3BlcnRpZXMgc2V0OiAlcyIscCksbnVsbDtsLnB1c2gocil9KTt0aGlzLl9tZXRyaWNzLmZvckVhY2goKHAscSk9PntwPXttZXRyaWM6cC5pbmZvLm5hbWUsZmlsdGVySW50ZXJ2YWw6YSgiX21ldHJpY3MuIitxKyIuZmlsdGVyLmludGVydmFsIil9O2wucHVzaChwKX0pO2lmKHZvaWQgMCE9PXRoaXMuX3NvcnRCeUluZGV4JiZ2b2lkIDAhPT10aGlzLl9zb3J0RGlyZWN0aW9uKXtpZighKHRoaXMuX3NvcnRCeUluZGV4IGluCmwpKXJldHVybiBjb25zb2xlLmVycm9yKCJObyBjb2x1bW4gaW4gY29sUGFyYW1zIHdpdGggaW5kZXggc29ydEJ5SW5kZXg6ICVzIix0aGlzLl9zb3J0QnlJbmRleCksbnVsbDtsW3RoaXMuX3NvcnRCeUluZGV4XS5vcmRlcj0wPT09dGhpcy5fc29ydERpcmVjdGlvbj8iT1JERVJfQVNDIjoiT1JERVJfREVTQyJ9Y29uc3Qgaz1jKCJfcGFnZU51bWJlcklucHV0IiksbT1jKCJfcGFnZVNpemVJbnB1dCIpO3JldHVybiBmP3tleHBlcmltZW50TmFtZTp0aGlzLmV4cGVyaW1lbnROYW1lLGFsbG93ZWRTdGF0dXNlczpnLGNvbFBhcmFtczpsLHN0YXJ0SW5kZXg6bSooay0xKSxzbGljZVNpemU6bX06bnVsbH0sX21ldHJpY1NvcnRCeUluZGV4KGEpe3JldHVybiBhK3RoaXMuX2hwYXJhbXMubGVuZ3RofSxfaHBhcmFtTmFtZTp0Zi5ocGFyYW1zLnV0aWxzLmhwYXJhbU5hbWUsX21ldHJpY05hbWU6dGYuaHBhcmFtcy51dGlscy5tZXRyaWNOYW1lLF9wcmV0dHlQcmludDp0Zi5ocGFyYW1zLnV0aWxzLnByZXR0eVByaW50fSk7Cjwvc2NyaXB0Pgo8L2RvbS1tb2R1bGU+CgoKCgoKCgoKPGRvbS1tb2R1bGUgaWQ9InBhcGVyLWhlYWRlci1wYW5lbCI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LXZlcnRpY2FsOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaGVhZGVyLXBhbmVsOwogICAgICB9CgogICAgICAjbWFpbkNvbnRhaW5lciB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWZsZXg7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgICAgb3ZlcmZsb3cteDogaGlkZGVuOwogICAgICAgIC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaDsKICAgICAgfQoKICAgICAgI21haW5QYW5lbCB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LXZlcnRpY2FsOwogICAgICAgIEBhcHBseSAtLWxheW91dC1mbGV4OwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBtaW4taGVpZ2h0OiAwOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWhlYWRlci1wYW5lbC1ib2R5OwogICAgICB9CgogICAgICAjbWFpbkNvbnRhaW5lciB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaGVhZGVyLXBhbmVsLWNvbnRhaW5lcjsKICAgICAgfQoKICAgICAgLyoKICAgICAgICogbW9kZTogc2Nyb2xsCiAgICAgICAqLwogICAgICA6aG9zdChbbW9kZT1zY3JvbGxdKSAjbWFpbkNvbnRhaW5lciB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaGVhZGVyLXBhbmVsLXNjcm9sbC1jb250YWluZXI7CiAgICAgICAgb3ZlcmZsb3c6IHZpc2libGU7CiAgICAgIH0KCiAgICAgIDpob3N0KFttb2RlPXNjcm9sbF0pIHsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIG92ZXJmbG93LXg6IGhpZGRlbjsKICAgICAgICAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7CiAgICAgIH0KCiAgICAgIC8qCiAgICAgICAqIG1vZGU6IGNvdmVyCiAgICAgICAqLwogICAgICA6aG9zdChbbW9kZT1jb3Zlcl0pICNtYWluQ29udGFpbmVyIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1oZWFkZXItcGFuZWwtY292ZXItY29udGFpbmVyOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgIH0KCiAgICAgIDpob3N0KFttb2RlPWNvdmVyXSkgI21haW5QYW5lbCB7CiAgICAgICAgcG9zaXRpb246IHN0YXRpYzsKICAgICAgfQoKICAgICAgLyoKICAgICAgICogbW9kZTogc3RhbmRhcmQKICAgICAgICovCiAgICAgIDpob3N0KFttb2RlPXN0YW5kYXJkXSkgI21haW5Db250YWluZXIgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWhlYWRlci1wYW5lbC1zdGFuZGFyZC1jb250YWluZXI7CiAgICAgIH0KCiAgICAgIC8qCiAgICAgICAqIG1vZGU6IHNlYW1lZAogICAgICAgKi8KICAgICAgOmhvc3QoW21vZGU9c2VhbWVkXSkgI21haW5Db250YWluZXIgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWhlYWRlci1wYW5lbC1zZWFtZWQtY29udGFpbmVyOwogICAgICB9CgoKICAgICAgLyoKICAgICAgICogbW9kZTogd2F0ZXJmYWxsCiAgICAgICAqLwogICAgICA6aG9zdChbbW9kZT13YXRlcmZhbGxdKSAjbWFpbkNvbnRhaW5lciB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaGVhZGVyLXBhbmVsLXdhdGVyZmFsbC1jb250YWluZXI7CiAgICAgIH0KCiAgICAgIC8qCiAgICAgICAqIG1vZGU6IHdhdGVyZmFsbC10YWxsCiAgICAgICAqLwogICAgICA6aG9zdChbbW9kZT13YXRlcmZhbGwtdGFsbF0pICNtYWluQ29udGFpbmVyIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1oZWFkZXItcGFuZWwtd2F0ZXJmYWxsLXRhbGwtY29udGFpbmVyOwogICAgICB9CgogICAgICAjZHJvcFNoYWRvdyB7CiAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjVzOwogICAgICAgIGhlaWdodDogNnB4OwogICAgICAgIGJveC1zaGFkb3c6IGluc2V0IDBweCA1cHggNnB4IC0zcHggcmdiYSgwLCAwLCAwLCAwLjQpOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWhlYWRlci1wYW5lbC1zaGFkb3c7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIH0KCiAgICAgICNkcm9wU2hhZG93Lmhhcy1zaGFkb3cgewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgIH0KCiAgICAgICNtYWluQ29udGFpbmVyID4gOjpzbG90dGVkKC5maXQpIHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtZml0OwogICAgICB9CgogICAgPC9zdHlsZT4KCiAgICA8c2xvdCBpZD0iaGVhZGVyU2xvdCIgbmFtZT0iaGVhZGVyIj48L3Nsb3Q+CgogICAgPGRpdiBpZD0ibWFpblBhbmVsIj4KICAgICAgPGRpdiBpZD0ibWFpbkNvbnRhaW5lciIgY2xhc3MkPSJbW19jb21wdXRlTWFpbkNvbnRhaW5lckNsYXNzKG1vZGUpXV0iPgogICAgICAgIDxzbG90Pjwvc2xvdD4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgaWQ9ImRyb3BTaGFkb3ciPjwvZGl2PgogICAgPC9kaXY+CiAgPC90ZW1wbGF0ZT4KCiAgPHNjcmlwdD4vL35+V0VCUEFUSH5+L3BhcGVyLWhlYWRlci1wYW5lbC9wYXBlci1oZWFkZXItcGFuZWwuaHRtbC5qcwooZnVuY3Rpb24oKXt2YXIgYT17c2Nyb2xsOiEwfSxjPXtzdGFuZGFyZDoyLHdhdGVyZmFsbDoxLCJ3YXRlcmZhbGwtdGFsbCI6MX0sZD17IndhdGVyZmFsbC10YWxsIjohMH07UG9seW1lcih7aXM6InBhcGVyLWhlYWRlci1wYW5lbCIscHJvcGVydGllczp7bW9kZTp7dHlwZTpTdHJpbmcsdmFsdWU6InN0YW5kYXJkIixvYnNlcnZlcjoiX21vZGVDaGFuZ2VkIixyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9LHNoYWRvdzp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSx0YWxsQ2xhc3M6e3R5cGU6U3RyaW5nLHZhbHVlOiJ0YWxsIn0sYXRUb3A6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMCxub3RpZnk6ITAscmVhZE9ubHk6ITAscmVmbGVjdFRvQXR0cmlidXRlOiEwfX0sb2JzZXJ2ZXJzOlsiX2NvbXB1dGVEcm9wU2hhZG93SGlkZGVuKGF0VG9wLCBtb2RlLCBzaGFkb3cpIl0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl9hZGRMaXN0ZW5lcigpO3RoaXMuX2tlZXBTY3JvbGxpbmdTdGF0ZSgpfSxkZXRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX3JlbW92ZUxpc3RlbmVyKCl9LApyZWFkeTpmdW5jdGlvbigpe3RoaXMuc2Nyb2xsSGFuZGxlcj10aGlzLl9zY3JvbGwuYmluZCh0aGlzKTtjb25zb2xlLndhcm4odGhpcy5pcywiaXMgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSBhcHAtbGF5b3V0IGluc3RlYWQhIil9LGdldCBoZWFkZXIoKXtyZXR1cm4gUG9seW1lci5kb20odGhpcy4kLmhlYWRlclNsb3QpLmdldERpc3RyaWJ1dGVkTm9kZXMoKVswXX0sZ2V0IHNjcm9sbGVyKCl7cmV0dXJuIHRoaXMuX2dldFNjcm9sbGVyRm9yTW9kZSh0aGlzLm1vZGUpfSxnZXQgdmlzaWJsZVNoYWRvdygpe3JldHVybiB0aGlzLiQuZHJvcFNoYWRvdy5jbGFzc0xpc3QuY29udGFpbnMoImhhcy1zaGFkb3ciKX0sX2NvbXB1dGVEcm9wU2hhZG93SGlkZGVuOmZ1bmN0aW9uKGYsZyl7Zz1jW2ddO3RoaXMuc2hhZG93P3RoaXMudG9nZ2xlQ2xhc3MoImhhcy1zaGFkb3ciLCEwLHRoaXMuJC5kcm9wU2hhZG93KToyPT09Zz90aGlzLnRvZ2dsZUNsYXNzKCJoYXMtc2hhZG93IiwhMCx0aGlzLiQuZHJvcFNoYWRvdyk6CjEhPT1nfHxmP3RoaXMudG9nZ2xlQ2xhc3MoImhhcy1zaGFkb3ciLCExLHRoaXMuJC5kcm9wU2hhZG93KTp0aGlzLnRvZ2dsZUNsYXNzKCJoYXMtc2hhZG93IiwhMCx0aGlzLiQuZHJvcFNoYWRvdyl9LF9jb21wdXRlTWFpbkNvbnRhaW5lckNsYXNzOmZ1bmN0aW9uKGYpe3ZhciBnPXt9O2cuZmxleD0iY292ZXIiIT09ZjtyZXR1cm4gT2JqZWN0LmtleXMoZykuZmlsdGVyKGZ1bmN0aW9uKGwpe3JldHVybiBnW2xdfSkuam9pbigiICIpfSxfYWRkTGlzdGVuZXI6ZnVuY3Rpb24oKXt0aGlzLnNjcm9sbGVyLmFkZEV2ZW50TGlzdGVuZXIoInNjcm9sbCIsdGhpcy5zY3JvbGxIYW5kbGVyKX0sX3JlbW92ZUxpc3RlbmVyOmZ1bmN0aW9uKCl7dGhpcy5zY3JvbGxlci5yZW1vdmVFdmVudExpc3RlbmVyKCJzY3JvbGwiLHRoaXMuc2Nyb2xsSGFuZGxlcil9LF9tb2RlQ2hhbmdlZDpmdW5jdGlvbihmLGcpe3ZhciBsPXRoaXMuaGVhZGVyO2wmJihkW2ddJiYhZFtmXT8obC5jbGFzc0xpc3QucmVtb3ZlKHRoaXMudGFsbENsYXNzKSwKdGhpcy5hc3luYyhmdW5jdGlvbigpe2wuY2xhc3NMaXN0LnJlbW92ZSgiYW5pbWF0ZSIpfSwyMDApKTp0aGlzLnRvZ2dsZUNsYXNzKCJhbmltYXRlIixkW2ZdLGwpKTt0aGlzLl9rZWVwU2Nyb2xsaW5nU3RhdGUoKX0sX2tlZXBTY3JvbGxpbmdTdGF0ZTpmdW5jdGlvbigpe3ZhciBmPXRoaXMuc2Nyb2xsZXIsZz10aGlzLmhlYWRlcjt0aGlzLl9zZXRBdFRvcCgwPT09Zi5zY3JvbGxUb3ApO2cmJnRoaXMudGFsbENsYXNzJiZkW3RoaXMubW9kZV0mJnRoaXMudG9nZ2xlQ2xhc3ModGhpcy50YWxsQ2xhc3MsdGhpcy5hdFRvcHx8Zy5jbGFzc0xpc3QuY29udGFpbnModGhpcy50YWxsQ2xhc3MpJiZmLnNjcm9sbEhlaWdodDx0aGlzLm9mZnNldEhlaWdodCxnKX0sX3Njcm9sbDpmdW5jdGlvbigpe3RoaXMuX2tlZXBTY3JvbGxpbmdTdGF0ZSgpO3RoaXMuZmlyZSgiY29udGVudC1zY3JvbGwiLHt0YXJnZXQ6dGhpcy5zY3JvbGxlcn0se2J1YmJsZXM6ITF9KX0sX2dldFNjcm9sbGVyRm9yTW9kZTpmdW5jdGlvbihmKXtyZXR1cm4gYVtmXT8KdGhpczp0aGlzLiQubWFpbkNvbnRhaW5lcn19KX0pKCk7Cjwvc2NyaXB0Pgo8L2RvbS1tb2R1bGU+CgoKCgoKCgoKCgoKPGRvbS1tb2R1bGUgaWQ9InBhcGVyLXRvb2xiYXIiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIC0tY2FsY3VsYXRlZC1wYXBlci10b29sYmFyLWhlaWdodDogdmFyKC0tcGFwZXItdG9vbGJhci1oZWlnaHQsIDY0cHgpOwogICAgICAgIC0tY2FsY3VsYXRlZC1wYXBlci10b29sYmFyLXNtLWhlaWdodDogdmFyKC0tcGFwZXItdG9vbGJhci1zbS1oZWlnaHQsIDU2cHgpOwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgIC1tb3otYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICBoZWlnaHQ6IHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItdG9vbGJhci1oZWlnaHQpOwogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXBhcGVyLXRvb2xiYXItYmFja2dyb3VuZCwgdmFyKC0tcHJpbWFyeS1jb2xvcikpOwogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci10b29sYmFyLWNvbG9yLCB2YXIoLS1kYXJrLXRoZW1lLXRleHQtY29sb3IpKTsKICAgICAgICBAYXBwbHkgLS1wYXBlci10b29sYmFyOwogICAgICB9CgogICAgICA6aG9zdCguYW5pbWF0ZSkgewogICAgICAgIHRyYW5zaXRpb246IHZhcigtLXBhcGVyLXRvb2xiYXItdHJhbnNpdGlvbiwgaGVpZ2h0IDAuMThzIGVhc2UtaW4pOwogICAgICB9CgogICAgICA6aG9zdCgubWVkaXVtLXRhbGwpIHsKICAgICAgICBoZWlnaHQ6IGNhbGModmFyKC0tY2FsY3VsYXRlZC1wYXBlci10b29sYmFyLWhlaWdodCkgKiAyKTsKICAgICAgICBAYXBwbHkgLS1wYXBlci10b29sYmFyLW1lZGl1bTsKICAgICAgfQoKICAgICAgOmhvc3QoLnRhbGwpIHsKICAgICAgICBoZWlnaHQ6IGNhbGModmFyKC0tY2FsY3VsYXRlZC1wYXBlci10b29sYmFyLWhlaWdodCkgKiAzKTsKICAgICAgICBAYXBwbHkgLS1wYXBlci10b29sYmFyLXRhbGw7CiAgICAgIH0KCiAgICAgIC50b29sYmFyLXRvb2xzIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgaGVpZ2h0OiB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXRvb2xiYXItaGVpZ2h0KTsKICAgICAgICBwYWRkaW5nOiAwIDE2cHg7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWhvcml6b250YWw7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWNlbnRlcjsKICAgICAgICBAYXBwbHkgLS1wYXBlci10b29sYmFyLWNvbnRlbnQ7CiAgICAgIH0KCiAgICAgIC8qCiAgICAgICAqIFRPRE86IFdoZXJlIHNob3VsZCBtZWRpYSBxdWVyeSBicmVha3BvaW50cyBsaXZlIHNvIHRoZXkgY2FuIGJlIHNoYXJlZCBiZXR3ZWVuIGVsZW1lbnRzPwogICAgICAgKi8KCiAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiA2MDBweCkgewogICAgICAgIDpob3N0IHsKICAgICAgICAgIGhlaWdodDogdmFyKC0tY2FsY3VsYXRlZC1wYXBlci10b29sYmFyLXNtLWhlaWdodCk7CiAgICAgICAgfQoKICAgICAgICA6aG9zdCgubWVkaXVtLXRhbGwpIHsKICAgICAgICAgIGhlaWdodDogY2FsYyh2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXRvb2xiYXItc20taGVpZ2h0KSAqIDIpOwogICAgICAgIH0KCiAgICAgICAgOmhvc3QoLnRhbGwpIHsKICAgICAgICAgIGhlaWdodDogY2FsYyh2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXRvb2xiYXItc20taGVpZ2h0KSAqIDMpOwogICAgICAgIH0KCiAgICAgICAgLnRvb2xiYXItdG9vbHMgewogICAgICAgICAgaGVpZ2h0OiB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXRvb2xiYXItc20taGVpZ2h0KTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgICN0b3BCYXIgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfQoKICAgICAgLyogbWlkZGxlIGJhciAqLwogICAgICAjbWlkZGxlQmFyIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgIH0KCiAgICAgIDpob3N0KC50YWxsKSAjbWlkZGxlQmFyLAogICAgICA6aG9zdCgubWVkaXVtLXRhbGwpICNtaWRkbGVCYXIgewogICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDEwMCUpOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgxMDAlKTsKICAgICAgfQoKICAgICAgLyogYm90dG9tIGJhciAqLwogICAgICAjYm90dG9tQmFyIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgIH0KCiAgICAgIC8qCiAgICAgICAqIG1ha2UgZWxlbWVudHMgKGUuZy4gYnV0dG9ucykgcmVzcG9uZCB0byBtb3VzZS90b3VjaCBldmVudHMKICAgICAgICoKICAgICAgICogYC50b29sYmFyLXRvb2xzYCBkaXNhYmxlcyB0b3VjaCBldmVudHMgc28gbXVsdGlwbGUgdG9vbGJhcnMgY2FuIHN0YWNrIGFuZCBub3QKICAgICAgICogYWJzb3JiIGV2ZW50cy4gQWxsIGNoaWxkcmVuIG11c3QgaGF2ZSBwb2ludGVyIGV2ZW50cyByZS1lbmFibGVkIHRvIHdvcmsgYXMKICAgICAgICogZXhwZWN0ZWQuCiAgICAgICAqLwogICAgICAudG9vbGJhci10b29scyA+IDo6c2xvdHRlZCgqOm5vdChbZGlzYWJsZWRdKSkgewogICAgICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvOwogICAgICB9CgogICAgICAudG9vbGJhci10b29scyA+IDo6c2xvdHRlZCgudGl0bGUpIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1iYXNlOwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgICAgICBmb250LXNpemU6IDIwcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgICAgICBsaW5lLWhlaWdodDogMTsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtZmxleDsKICAgICAgfQoKICAgICAgLnRvb2xiYXItdG9vbHMgPiA6OnNsb3R0ZWQoLnRpdGxlKSB7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDU2cHg7CiAgICAgIH0KCiAgICAgIC50b29sYmFyLXRvb2xzID4gOjpzbG90dGVkKHBhcGVyLWljb24tYnV0dG9uICsgLnRpdGxlKSB7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDA7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBUaGUgLS1wYXBlci10b29sYmFyLXRpdGxlIG1peGluIGlzIGFwcGxpZWQgaGVyZSBpbnN0ZWFkIG9mIGFib3ZlIHRvCiAgICAgICAqIGZpeCB0aGUgaXNzdWUgd2l0aCBtYXJnaW4tbGVmdCBiZWluZyBpZ25vcmVkIGR1ZSB0byBjc3Mgb3JkZXJpbmcuCiAgICAgICAqLwogICAgICAudG9vbGJhci10b29scyA+IDo6c2xvdHRlZCgudGl0bGUpIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci10b29sYmFyLXRpdGxlOwogICAgICB9CgogICAgICAudG9vbGJhci10b29scyA+IDo6c2xvdHRlZChwYXBlci1pY29uLWJ1dHRvbltpY29uPW1lbnVdKSB7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiAyNHB4OwogICAgICB9CgogICAgICAudG9vbGJhci10b29scyA+IDo6c2xvdHRlZCguZml0KSB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogYXV0bzsKICAgICAgICByaWdodDogMDsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICB3aWR0aDogYXV0bzsKICAgICAgICBtYXJnaW46IDA7CiAgICAgIH0KCiAgICAgIC8qIFRPRE8obm9tcyk6IFVudGlsIHdlIGhhdmUgYSBiZXR0ZXIgc29sdXRpb24gZm9yIGNsYXNzZXMgdGhhdCBkb24ndCB1c2UKICAgICAgICogL2RlZXAvIGNyZWF0ZSBvdXIgb3duLgogICAgICAgKi8KICAgICAgLnN0YXJ0LWp1c3RpZmllZCB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LXN0YXJ0LWp1c3RpZmllZDsKICAgICAgfQoKICAgICAgLmNlbnRlci1qdXN0aWZpZWQgewogICAgICAgIEBhcHBseSAtLWxheW91dC1jZW50ZXItanVzdGlmaWVkOwogICAgICB9CgogICAgICAuZW5kLWp1c3RpZmllZCB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWVuZC1qdXN0aWZpZWQ7CiAgICAgIH0KCiAgICAgIC5hcm91bmQtanVzdGlmaWVkIHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtYXJvdW5kLWp1c3RpZmllZDsKICAgICAgfQoKICAgICAgLmp1c3RpZmllZCB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWp1c3RpZmllZDsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8ZGl2IGlkPSJ0b3BCYXIiIGNsYXNzJD0idG9vbGJhci10b29scyBbW19jb21wdXRlQmFyRXh0cmFDbGFzc2VzKGp1c3RpZnkpXV0iPgogICAgICA8c2xvdCBuYW1lPSJ0b3AiPjwvc2xvdD4KICAgIDwvZGl2PgoKICAgIDxkaXYgaWQ9Im1pZGRsZUJhciIgY2xhc3MkPSJ0b29sYmFyLXRvb2xzIFtbX2NvbXB1dGVCYXJFeHRyYUNsYXNzZXMobWlkZGxlSnVzdGlmeSldXSI+CiAgICAgIDxzbG90IG5hbWU9Im1pZGRsZSI+PC9zbG90PgogICAgPC9kaXY+CgogICAgPGRpdiBpZD0iYm90dG9tQmFyIiBjbGFzcyQ9InRvb2xiYXItdG9vbHMgW1tfY29tcHV0ZUJhckV4dHJhQ2xhc3Nlcyhib3R0b21KdXN0aWZ5KV1dIj4KICAgICAgPHNsb3QgbmFtZT0iYm90dG9tIj48L3Nsb3Q+CiAgICA8L2Rpdj4KICA8L3RlbXBsYXRlPgoKICA8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vcGFwZXItdG9vbGJhci9wYXBlci10b29sYmFyLmh0bWwuanMKUG9seW1lcih7aXM6InBhcGVyLXRvb2xiYXIiLGhvc3RBdHRyaWJ1dGVzOntyb2xlOiJ0b29sYmFyIn0scHJvcGVydGllczp7Ym90dG9tSnVzdGlmeTp7dHlwZTpTdHJpbmcsdmFsdWU6IiJ9LGp1c3RpZnk6e3R5cGU6U3RyaW5nLHZhbHVlOiIifSxtaWRkbGVKdXN0aWZ5Ont0eXBlOlN0cmluZyx2YWx1ZToiIn19LHJlYWR5OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKHRoaXMuaXMsImlzIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2UgYXBwLWxheW91dCBpbnN0ZWFkISIpfSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX29ic2VydmVyPXRoaXMuX29ic2VydmUodGhpcyk7dGhpcy5fdXBkYXRlQXJpYUxhYmVsbGVkQnkoKX0sZGV0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl9vYnNlcnZlciYmdGhpcy5fb2JzZXJ2ZXIuZGlzY29ubmVjdCgpfSxfb2JzZXJ2ZTpmdW5jdGlvbihhKXt2YXIgYz1uZXcgTXV0YXRpb25PYnNlcnZlcihmdW5jdGlvbigpe3RoaXMuX3VwZGF0ZUFyaWFMYWJlbGxlZEJ5KCl9LmJpbmQodGhpcykpOwpjLm9ic2VydmUoYSx7Y2hpbGRMaXN0OiEwLHN1YnRyZWU6ITB9KTtyZXR1cm4gY30sX3VwZGF0ZUFyaWFMYWJlbGxlZEJ5OmZ1bmN0aW9uKCl7UG9seW1lci5kb20uZmx1c2goKTtmb3IodmFyIGE9W10sYz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChQb2x5bWVyLmRvbSh0aGlzLnJvb3QpLnF1ZXJ5U2VsZWN0b3JBbGwoInNsb3QiKSkuY29uY2F0KEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKFBvbHltZXIuZG9tKHRoaXMucm9vdCkucXVlcnlTZWxlY3RvckFsbCgiY29udGVudCIpKSksZCxmPTA7ZD1jW2ZdO2YrKyl7ZD1Qb2x5bWVyLmRvbShkKS5nZXREaXN0cmlidXRlZE5vZGVzKCk7Zm9yKHZhciBnLGw9MDtnPWRbbF07bCsrKWlmKGcuY2xhc3NMaXN0JiZnLmNsYXNzTGlzdC5jb250YWlucygidGl0bGUiKSlpZihnLmlkKWEucHVzaChnLmlkKTtlbHNle3ZhciBrPSJwYXBlci10b29sYmFyLWxhYmVsLSIrTWF0aC5mbG9vcigxRTQqTWF0aC5yYW5kb20oKSk7Zy5pZD1rO2EucHVzaChrKX19MDwKYS5sZW5ndGgmJnRoaXMuc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsbGVkYnkiLGEuam9pbigiICIpKX0sX2NvbXB1dGVCYXJFeHRyYUNsYXNzZXM6ZnVuY3Rpb24oYSl7cmV0dXJuIGE/YSsoImp1c3RpZmllZCI9PT1hPyIiOiItanVzdGlmaWVkIik6IiJ9fSk7Cjwvc2NyaXB0Pgo8L2RvbS1tb2R1bGU+CgoKCgoKCgoKCgoKPGRvbS1tb2R1bGUgaWQ9InRmLWhwYXJhbXMtc2NhbGUtYW5kLWNvbG9yLWNvbnRyb2xzIj4KICA8dGVtcGxhdGU+CiAgICA8ZGl2IGNsYXNzPSJjb250cm9sLXBhbmVsIj4KICAgICAgCiAgICAgIDxwYXBlci1kcm9wZG93bi1tZW51IGxhYmVsPSJDb2xvciBieSIgaWQ9ImNvbG9yQnlEcm9wRG93bk1lbnUiIGhvcml6b250YWwtYWxpZ249ImxlZnQiPgogICAgICAgIDxwYXBlci1saXN0Ym94IGNsYXNzPSJkcm9wZG93bi1jb250ZW50IiBzbG90PSJkcm9wZG93bi1jb250ZW50IiBzZWxlY3RlZD0ie3tvcHRpb25zLmNvbG9yQnlDb2x1bW5JbmRleH19IiBpZD0iY29sb3JCeUxpc3RCb3giPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tvcHRpb25zLmNvbHVtbnNdXSIgYXM9ImNvbHVtbiIgaWQ9ImNvbG9yQnlDb2x1bW5UZW1wbGF0ZSI+CiAgICAgICAgICAgIDxwYXBlci1pdGVtIGRpc2FibGVkPSJbWyFfaXNOdW1lcmljQ29sdW1uKGNvbHVtbi5pbmRleCldXSI+CiAgICAgICAgICAgICAgW1tjb2x1bW4ubmFtZV1dCiAgICAgICAgICAgIDwvcGFwZXItaXRlbT4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC9wYXBlci1saXN0Ym94PgogICAgICA8L3BhcGVyLWRyb3Bkb3duLW1lbnU+CgogICAgICAKICAgICAgPGRpdiBjbGFzcz0iY29sdW1ucy1jb250YWluZXIiPgogICAgICAgIAogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9Int7b3B0aW9ucy5jb2x1bW5zfX0iIGFzPSJjb2x1bW4iPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19pc051bWVyaWNDb2x1bW4oY29sdW1uLmluZGV4KV1dIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sdW1uIj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2x1bW4tdGl0bGUiPgogICAgICAgICAgICAgICAgW1tjb2x1bW4ubmFtZV1dCiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgIDxwYXBlci1yYWRpby1ncm91cCBjbGFzcz0ic2NhbGUtcmFkaW8tZ3JvdXAiIHNlbGVjdGVkPSJ7e2NvbHVtbi5zY2FsZX19Ij4KICAgICAgICAgICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbiBuYW1lPSJMSU5FQVIiPgogICAgICAgICAgICAgICAgICAgIExpbmVhcgogICAgICAgICAgICAgICAgICA8L3BhcGVyLXJhZGlvLWJ1dHRvbj4KICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgIDxwYXBlci1yYWRpby1idXR0b24gaWQ9ImxvZ1NjYWxlQnV0dG9uX1tbY29sdW1uLm5hbWVdXSIgbmFtZT0iTE9HIiBkaXNhYmxlZD0iW1shX2FsbG93TG9nU2NhbGUoY29sdW1uLCBzZXNzaW9uR3JvdXBzLiopXV0iPgogICAgICAgICAgICAgICAgICAgIExvZ2FyaXRobWljCiAgICAgICAgICAgICAgICAgIDwvcGFwZXItcmFkaW8tYnV0dG9uPgogICAgICAgICAgICAgICAgICA8cGFwZXItcmFkaW8tYnV0dG9uIG5hbWU9IlFVQU5USUxFIj4KICAgICAgICAgICAgICAgICAgICBRdWFudGlsZQogICAgICAgICAgICAgICAgICA8L3BhcGVyLXJhZGlvLWJ1dHRvbj4KICAgICAgICAgICAgICAgIDwvcGFwZXItcmFkaW8tZ3JvdXA+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgoKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CiAgICAgIC5jb250cm9sLXBhbmVsIHsKICAgICAgICBvdmVyZmxvdzogYXV0bzsKICAgICAgfQogICAgICAuY29sdW1uIHsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgZmxleC1zaHJpbms6IDE7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiA1cHg7CiAgICAgICAgYm9yZGVyOiBzb2xpZCAxcHggZGFya2dyYXk7CiAgICAgICAgcGFkZGluZzogM3B4OwogICAgICB9CiAgICAgIC5jb2x1bW4tdGl0bGUgewogICAgICAgIC8qIEZpdCBldmVyeSB0aXRsZSBpbiBvbmUgbGluZSBzbyB0aGUgcmFkaW8gYm94ZXMgYWxpZ24gdmVydGljYWxseS4gKi8KICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwogICAgICB9CiAgICAgIC5jb2x1bW5zLWNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgICB9CiAgICAgIC5zY2FsZS1yYWRpby1ncm91cCBwYXBlci1yYWRpby1idXR0b24gewogICAgICAgIHBhZGRpbmc6IDJweDsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQogICAgICBwYXBlci1saXN0Ym94IHsKICAgICAgICBtYXgtaGVpZ2h0OiAxNWVtOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CgogIDxzY3JpcHQ+Ly9+fldFQlBBVEh+fi90Zi1ocGFyYW1zLXNjYWxlLWFuZC1jb2xvci1jb250cm9scy90Zi1ocGFyYW1zLXNjYWxlLWFuZC1jb2xvci1jb250cm9scy5odG1sLmpzClBvbHltZXIoe2lzOiJ0Zi1ocGFyYW1zLXNjYWxlLWFuZC1jb2xvci1jb250cm9scyIscHJvcGVydGllczp7Y29uZmlndXJhdGlvbjpPYmplY3Qsc2Vzc2lvbkdyb3VwczpBcnJheSxvcHRpb25zOnt0eXBlOk9iamVjdCxub3RpZnk6ITAsdmFsdWU6bnVsbH19LG9ic2VydmVyczpbIl9jb25maWd1cmF0aW9uQ2hhbmdlZChjb25maWd1cmF0aW9uLiopIiwiX3Vuc2VsZWN0RGlzYWJsZWRMb2dTY2FsZXMoc2Vzc2lvbkdyb3Vwcy4qKSJdLF9jb25maWd1cmF0aW9uQ2hhbmdlZCgpe2NvbnN0IGE9dGhpcy5jb25maWd1cmF0aW9uLnZpc2libGVTY2hlbWEsYz10aGlzLmNvbmZpZ3VyYXRpb24uc2NoZW1hLGQ9e2NvbHVtbnM6YS5ocGFyYW1JbmZvcy5tYXAoKGYsZyk9Pih7bmFtZTp0Zi5ocGFyYW1zLnV0aWxzLmhwYXJhbU5hbWUoZiksaW5kZXg6ZyxhYnNvbHV0ZUluZGV4OnRmLmhwYXJhbXMudXRpbHMuZ2V0QWJzb2x1dGVDb2x1bW5JbmRleChjLGEsZyksc2NhbGU6dGhpcy5faXNOdW1lcmljQ29sdW1uKGcpPwoiTElORUFSIjoiTk9OX05VTUVSSUMifSkpLmNvbmNhdChhLm1ldHJpY0luZm9zLm1hcCgoZixnKT0+e2crPWEuaHBhcmFtSW5mb3MubGVuZ3RoO3JldHVybntzY2FsZToiTElORUFSIixuYW1lOnRmLmhwYXJhbXMudXRpbHMubWV0cmljTmFtZShmKSxpbmRleDpnLGFic29sdXRlSW5kZXg6dGYuaHBhcmFtcy51dGlscy5nZXRBYnNvbHV0ZUNvbHVtbkluZGV4KGMsYSxnKX19KSksbWluQ29sb3I6IiMwMDAwRkYiLG1heENvbG9yOiIjRkYwMDAwIixjb25maWd1cmF0aW9uOnRoaXMuY29uZmlndXJhdGlvbn07dGhpcy5zZXQoIm9wdGlvbnMiLGQpO1BvbHltZXIuZG9tLmZsdXNoKCk7dGhpcy5zZXQoIm9wdGlvbnMuY29sb3JCeUNvbHVtbkluZGV4Iix0aGlzLl9kZWZhdWx0Q29sb3JCeUNvbHVtbkluZGV4KCkpfSxfdW5zZWxlY3REaXNhYmxlZExvZ1NjYWxlcygpe251bGwhPT10aGlzLm9wdGlvbnMmJnRoaXMub3B0aW9ucy5jb2x1bW5zLmZvckVhY2goYT0+e2NvbnN0IGM9Im9wdGlvbnMuY29sdW1ucy4iKwphLmluZGV4O3RoaXMuX2FsbG93TG9nU2NhbGUoYSl8fCJMT0ciIT09YS5zY2FsZXx8dGhpcy5zZXQoYysiLnNjYWxlIiwiTElORUFSIil9KX0sX2FsbG93TG9nU2NhbGUoYSl7aWYoIXRoaXMuX2lzTnVtZXJpY0NvbHVtbihhLmluZGV4KXx8IXRoaXMuc2Vzc2lvbkdyb3VwcylyZXR1cm4hMTtjb25zdCBbYyxkXT10Zi5ocGFyYW1zLnV0aWxzLnZpc2libGVOdW1lcmljQ29sdW1uRXh0ZW50KHRoaXMuY29uZmlndXJhdGlvbi52aXNpYmxlU2NoZW1hLHRoaXMuc2Vzc2lvbkdyb3VwcyxhLmluZGV4KTtyZXR1cm4gMDxjfHwwPmR9LF9pc051bWVyaWNDb2x1bW4oYSl7cmV0dXJuIGE+PXRoaXMuY29uZmlndXJhdGlvbi52aXNpYmxlU2NoZW1hLmhwYXJhbUluZm9zLmxlbmd0aHx8IkRBVEFfVFlQRV9GTE9BVDY0Ij09PXRoaXMuY29uZmlndXJhdGlvbi52aXNpYmxlU2NoZW1hLmhwYXJhbUluZm9zW2FdLnR5cGV9LF9kZWZhdWx0Q29sb3JCeUNvbHVtbkluZGV4KCl7aWYoMDx0aGlzLmNvbmZpZ3VyYXRpb24udmlzaWJsZVNjaGVtYS5tZXRyaWNJbmZvcy5sZW5ndGgpcmV0dXJuIHRoaXMuY29uZmlndXJhdGlvbi52aXNpYmxlU2NoZW1hLmhwYXJhbUluZm9zLmxlbmd0aDsKY29uc3QgYT10aGlzLmNvbmZpZ3VyYXRpb24udmlzaWJsZVNjaGVtYS5ocGFyYW1JbmZvcy5maW5kSW5kZXgoYz0+IkRBVEFfVFlQRV9GTE9BVDY0Ij09PWMudHlwZSk7aWYoLTEhPT1hKXJldHVybiBhfX0pOwo8L3NjcmlwdD4KPC9kb20tbW9kdWxlPgoKCgoKCgoKCgoKCgo8ZG9tLW1vZHVsZSBpZD0idmFhZGluLWdyaWQtYWN0aXZlLWl0ZW0tdGhlbWFiaWxpdHktc3R5bGVzIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIHZhYWRpbi1ncmlkLXRhYmxlIC52YWFkaW4tZ3JpZC1yb3dbYWN0aXZlXSAudmFhZGluLWdyaWQtY2VsbDpub3QoW2RldGFpbHNjZWxsXSkgOjpzbG90dGVkKHZhYWRpbi1ncmlkLWNlbGwtY29udGVudCkgewogICAgICAgIEBhcHBseSgtLXZhYWRpbi1ncmlkLWJvZHktcm93LWFjdGl2ZS1jZWxsKTsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+Cgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdmFhZGluLWdyaWQvdmFhZGluLWdyaWQtYWN0aXZlLWl0ZW0tYmVoYXZpb3IuaHRtbC5qcwp3aW5kb3cudmFhZGluPXdpbmRvdy52YWFkaW58fHt9O3ZhYWRpbi5lbGVtZW50cz12YWFkaW4uZWxlbWVudHN8fHt9O3ZhYWRpbi5lbGVtZW50cy5ncmlkPXZhYWRpbi5lbGVtZW50cy5ncmlkfHx7fTsKdmFhZGluLmVsZW1lbnRzLmdyaWQuQWN0aXZlSXRlbUJlaGF2aW9yPXtwcm9wZXJ0aWVzOnthY3RpdmVJdGVtOnt0eXBlOk9iamVjdCxub3RpZnk6ITAsdmFsdWU6bnVsbH19LGxpc3RlbmVyczp7ImNlbGwtYWN0aXZhdGUiOiJfYWN0aXZhdGVJdGVtIn0sb2JzZXJ2ZXJzOlsiX2FjdGl2ZUl0ZW1DaGFuZ2VkKGFjdGl2ZUl0ZW0pIl0sX2FjdGl2YXRlSXRlbTpmdW5jdGlvbihhKXt2YXIgYz1hLmRldGFpbC5tb2RlbC5pdGVtO3RoaXMuYWN0aXZlSXRlbT10aGlzLmFjdGl2ZUl0ZW0hPT1jP2M6bnVsbDthLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfSxfYWN0aXZlSXRlbUNoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLiQuc2Nyb2xsZXIuX3BoeXNpY2FsSXRlbXMmJnRoaXMuJC5zY3JvbGxlci5fcGh5c2ljYWxJdGVtcy5mb3JFYWNoKGZ1bmN0aW9uKGEpe3RoaXMuX3VwZGF0ZUl0ZW0oYSxhLml0ZW0pfS5iaW5kKHRoaXMpKX19Owo8L3NjcmlwdD4KCgoKPGRvbS1tb2R1bGUgaWQ9InZhYWRpbi1ncmlkLXRhYmxlLXRhYmxlLXNjcm9sbC1zdHlsZXMiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgI3RhYmxlIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgb3ZlcmZsb3c6IGF1dG87CiAgICAgICAgLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoOwogICAgICAgIHotaW5kZXg6IC0yOwogICAgICB9CgogICAgICB2YWFkaW4tZ3JpZC10YWJsZVtpb3NdICN0YWJsZSB7CiAgICAgICAgdHJhbnNmb3JtOiBub25lOwogICAgICB9CgogICAgICB2YWFkaW4tZ3JpZC10YWJsZVtmaXhlZC1zZWN0aW9uc10gI3RhYmxlIHsKICAgICAgICB0cmFuc2Zvcm06IG5vbmU7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPgoKPGRvbS1tb2R1bGUgaWQ9InZhYWRpbi1ncmlkLXRhYmxlLXNjcm9sbC1zdHlsZXMiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgdmFhZGluLWdyaWQtdGFibGUgewogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWigwKTsKICAgICAgfQoKICAgICAgdmFhZGluLWdyaWQtdGFibGUtaGVhZGVyIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICB2YWFkaW4tZ3JpZC10YWJsZS1mb290ZXIgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgIHZhYWRpbi1ncmlkLXRhYmxlLWJvZHkgewogICAgICAgIHotaW5kZXg6IC0xOwogICAgICB9CgogICAgICB2YWFkaW4tZ3JpZC10YWJsZVtmaXhlZC1zZWN0aW9uc10gewogICAgICAgIC8qIEFueSB2YWx1ZSBvdGhlciB0aGFuIOKAmG5vbmXigJkgZm9yIHRoZSB0cmFuc2Zvcm0gcmVzdWx0cyBpbiB0aGUgY3JlYXRpb24gb2YgYm90aCBhIHN0YWNraW5nIGNvbnRleHQgYW5kCiAgICAgICAgYSBjb250YWluaW5nIGJsb2NrLiBUaGUgb2JqZWN0IGFjdHMgYXMgYSBjb250YWluaW5nIGJsb2NrIGZvciBmaXhlZCBwb3NpdGlvbmVkIGRlc2NlbmRhbnRzLiAqLwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWigwKTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB9CgogICAgICB2YWFkaW4tZ3JpZC10YWJsZVtmaXhlZC1zZWN0aW9uc10gdmFhZGluLWdyaWQtdGFibGUtaGVhZGVyLAogICAgICB2YWFkaW4tZ3JpZC10YWJsZVtmaXhlZC1zZWN0aW9uc10gdmFhZGluLWdyaWQtdGFibGUtZm9vdGVyIHsKICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgIH0KCiAgICAgIHZhYWRpbi1ncmlkLXRhYmxlW2ZpeGVkLXNlY3Rpb25zXSB2YWFkaW4tZ3JpZC10YWJsZS1ib2R5I2l0ZW1zIHsKICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgd2lsbC1jaGFuZ2U6IHRyYW5zZm9ybTsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+Cgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdmFhZGluLWdyaWQvdmFhZGluLWdyaWQtdGFibGUtc2Nyb2xsLWJlaGF2aW9yLmh0bWwuanMKd2luZG93LnZhYWRpbj13aW5kb3cudmFhZGlufHx7fTt2YWFkaW4uZWxlbWVudHM9dmFhZGluLmVsZW1lbnRzfHx7fTt2YWFkaW4uZWxlbWVudHMuZ3JpZD12YWFkaW4uZWxlbWVudHMuZ3JpZHx8e307CnZhYWRpbi5lbGVtZW50cy5ncmlkLlRhYmxlU2Nyb2xsQmVoYXZpb3JJbXBsPXtwcm9wZXJ0aWVzOntfdmlkeE9mZnNldDp7dHlwZTpOdW1iZXIsdmFsdWU6MH0saW9zOnt0eXBlOkJvb2xlYW4sdmFsdWU6bmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvaVAoPzpob25lfGFkOyg/OiBVOyk/IENQVSkgT1MgKFxkKykvKSxyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9LGZpeGVkU2VjdGlvbnM6e3R5cGU6Qm9vbGVhbixyZWZsZWN0VG9BdHRyaWJ1dGU6ITAsY29tcHV0ZWQ6Il9oYXNGaXhlZFNlY3Rpb25zKHNjcm9sbGJhcldpZHRoKSJ9LF9mcm96ZW5DZWxsczp7dHlwZTpBcnJheSx2YWx1ZTpmdW5jdGlvbigpe3JldHVybltdfX0sc2Nyb2xsaW5nOnt0eXBlOkJvb2xlYW4scmVmbGVjdFRvQXR0cmlidXRlOiEwfX0scmVhZHk6ZnVuY3Rpb24oKXt0aGlzLnNjcm9sbFRhcmdldD10aGlzLiQudGFibGV9LGF0dGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5saXN0ZW4odGhpcy5zY3JvbGxUYXJnZXQsIndoZWVsIiwKIl9vbldoZWVsIil9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy51bmxpc3Rlbih0aGlzLnNjcm9sbFRhcmdldCwid2hlZWwiLCJfb25XaGVlbCIpfSxzY3JvbGxUb1NjYWxlZEluZGV4OmZ1bmN0aW9uKGEpe3RoaXMuX3BlbmRpbmdTY3JvbGxUb1NjYWxlZEluZGV4PW51bGw7dGhpcy4kLml0ZW1zLnN0eWxlLmJvcmRlclRvcFdpZHRofHwodGhpcy5fcGVuZGluZ1Njcm9sbFRvU2NhbGVkSW5kZXg9YSk7YT1NYXRoLm1pbihNYXRoLm1heChhLDApLHRoaXMuc2l6ZS0xKTt0aGlzLiQudGFibGUuc2Nyb2xsVG9wPWEvdGhpcy5zaXplKnRoaXMuJC50YWJsZS5zY3JvbGxIZWlnaHQ7dGhpcy5fc2Nyb2xsSGFuZGxlcigpO3RoaXMuc2Nyb2xsVG9JbmRleChhLXRoaXMuX3ZpZHhPZmZzZXQpO3RoaXMuX3Jlc2V0U2Nyb2xsUG9zaXRpb24odGhpcy5fc2Nyb2xsUG9zaXRpb24pO3RoaXMuX3Njcm9sbEhhbmRsZXIoKTt0aGlzLl92aWR4T2Zmc2V0K3RoaXMubGFzdFZpc2libGVJbmRleD09PXRoaXMuc2l6ZS0KMSYmKHRoaXMuJC50YWJsZS5zY3JvbGxUb3A9dGhpcy4kLnRhYmxlLnNjcm9sbEhlaWdodC10aGlzLiQudGFibGUub2Zmc2V0SGVpZ2h0LHRoaXMuX3Njcm9sbEhhbmRsZXIoKSl9LF9oYXNGaXhlZFNlY3Rpb25zOmZ1bmN0aW9uKGEpe3JldHVybiBuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9FZGdlLykmJjA9PT1hfSxfb25XaGVlbDpmdW5jdGlvbihhKXtpZighYS5jdHJsS2V5JiYhdGhpcy5faGFzU2Nyb2xsZWRBbmNlc3RvcihhLnRhcmdldCxhLmRlbHRhWCxhLmRlbHRhWSkpe3ZhciBjPXRoaXMuJC50YWJsZSxkPWEuZGVsdGFZOzE9PT1hLmRlbHRhTW9kZSYmKGQqPWdyaWQuJC5zY3JvbGxlci5fcGh5c2ljYWxBdmVyYWdlKTt2YXIgZj1NYXRoLmFicyhhLmRlbHRhWCkrTWF0aC5hYnMoZCk7dGhpcy5fY2FuU2Nyb2xsKGMsYS5kZWx0YVgsZCk/KGEucHJldmVudERlZmF1bHQoKSxjLnNjcm9sbFRvcCs9ZCxjLnNjcm9sbExlZnQrPWEuZGVsdGFYLHRoaXMuX3Njcm9sbEhhbmRsZXIoKSwKdGhpcy5faGFzUmVzaWR1YWxNb21lbnR1bT0hMCx0aGlzLl9pZ25vcmVOZXdXaGVlbD10aGlzLmRlYm91bmNlKCJpZ25vcmUtbmV3LXdoZWVsIixmdW5jdGlvbigpe3RoaXMuX2lnbm9yZU5ld1doZWVsPW51bGx9LDUwMCkpOnRoaXMuX2hhc1Jlc2lkdWFsTW9tZW50dW0mJmY8PXRoaXMuX3ByZXZpb3VzTW9tZW50dW18fHRoaXMuX2lnbm9yZU5ld1doZWVsP2EucHJldmVudERlZmF1bHQoKTpmPnRoaXMuX3ByZXZpb3VzTW9tZW50dW0mJih0aGlzLl9oYXNSZXNpZHVhbE1vbWVudHVtPSExKTt0aGlzLl9wcmV2aW91c01vbWVudHVtPWZ9fSxfaGFzU2Nyb2xsZWRBbmNlc3RvcjpmdW5jdGlvbihhLGMsZCl7aWYodGhpcy5fY2FuU2Nyb2xsKGEsYyxkKSlyZXR1cm4hMDtpZigidmFhZGluLWdyaWQtY2VsbC1jb250ZW50IiE9PWEubG9jYWxOYW1lJiZhIT09dGhpcyYmYS5wYXJlbnRFbGVtZW50KXJldHVybiB0aGlzLl9oYXNTY3JvbGxlZEFuY2VzdG9yKGEucGFyZW50RWxlbWVudCxjLGQpfSwKX2NhblNjcm9sbDpmdW5jdGlvbihhLGMsZCl7cmV0dXJuIDA8ZCYmYS5zY3JvbGxUb3A8YS5zY3JvbGxIZWlnaHQtYS5vZmZzZXRIZWlnaHR8fDA+ZCYmMDxhLnNjcm9sbFRvcHx8MDxjJiZhLnNjcm9sbExlZnQ8YS5zY3JvbGxXaWR0aC1hLm9mZnNldFdpZHRofHwwPmMmJjA8YS5zY3JvbGxMZWZ0fSxfc2Nyb2xsSGFuZGxlcjpmdW5jdGlvbigpe3ZhciBhPU1hdGgubWF4KDAsTWF0aC5taW4odGhpcy5fbWF4U2Nyb2xsVG9wLHRoaXMuX3Njcm9sbFRvcCkpLGM9YS10aGlzLl9zY3JvbGxQb3NpdGlvbixkPXRoaXMuX3JhdGlvLGY9MCxnPXRoaXMuX2hpZGRlbkNvbnRlbnRTaXplLGw9ZCxrPVtdO3RoaXMuX3Njcm9sbFBvc2l0aW9uPWE7dGhpcy5fbGFzdFZpc2libGVJbmRleFZhbD10aGlzLl9maXJzdFZpc2libGVJbmRleFZhbD1udWxsO3ZhciBtPXRoaXMuX3Njcm9sbEJvdHRvbTt2YXIgcD10aGlzLl9waHlzaWNhbEJvdHRvbTtpZihNYXRoLmFicyhjKT50aGlzLl9waHlzaWNhbFNpemUpdGhpcy5fcGh5c2ljYWxUb3ArPQpjLGY9TWF0aC5yb3VuZChjL3RoaXMuX3BoeXNpY2FsQXZlcmFnZSk7ZWxzZSBpZigwPmMpe3ZhciBxPWEtdGhpcy5fcGh5c2ljYWxUb3A7az10aGlzLl92aXJ0dWFsU3RhcnQ7dmFyIHI9W107dmFyIHQ9dGhpcy5fcGh5c2ljYWxFbmQ7Zm9yKGw9cS9nO2w8ZCYmZjx0aGlzLl9waHlzaWNhbENvdW50JiYwPGstZiYmcC10aGlzLl9nZXRQaHlzaWNhbFNpemVJbmNyZW1lbnQodCk+bTspcT10aGlzLl9nZXRQaHlzaWNhbFNpemVJbmNyZW1lbnQodCksbCs9cS9nLHAtPXEsci5wdXNoKHQpLGYrKyx0PTA9PT10P3RoaXMuX3BoeXNpY2FsQ291bnQtMTp0LTE7az1yO2Y9LWZ9ZWxzZSBpZigwPGMpe3ZhciB2PXRoaXMuX3ZpcnR1YWxFbmQsQT10aGlzLl92aXJ0dWFsQ291bnQtMTtyPVtdO3Q9dGhpcy5fcGh5c2ljYWxTdGFydDtmb3IobD0ocC1tKS9nO2w8ZCYmZjx0aGlzLl9waHlzaWNhbENvdW50JiZ2K2Y8QSYmdGhpcy5fcGh5c2ljYWxUb3ArdGhpcy5fZ2V0UGh5c2ljYWxTaXplSW5jcmVtZW50KHQpPAphOylxPXRoaXMuX2dldFBoeXNpY2FsU2l6ZUluY3JlbWVudCh0KSxsKz1xL2csdGhpcy5fcGh5c2ljYWxUb3ArPXEsci5wdXNoKHQpLGYrKyx0PSh0KzEpJXRoaXMuX3BoeXNpY2FsQ291bnR9dGhpcy5fdmlydHVhbENvdW50PHRoaXMuc2l6ZSYmdGhpcy5fYWRqdXN0VmlydHVhbEluZGV4T2Zmc2V0KGMpOzA9PT1mPyhwPG18fHRoaXMuX3BoeXNpY2FsVG9wPmEpJiZ0aGlzLl9pbmNyZWFzZVBvb2xJZk5lZWRlZCgpOih0aGlzLl92aXJ0dWFsU3RhcnQrPWYsdGhpcy5fcGh5c2ljYWxTdGFydCs9Zix0aGlzLl91cGRhdGUocixrKSk7dGhpcy5fdHJhbnNsYXRlU3RhdGlvbmFyeUVsZW1lbnRzKCk7dGhpcy5oYXNBdHRyaWJ1dGUoInJlb3JkZXJpbmciKXx8KHRoaXMuc2Nyb2xsaW5nPSEwKTt0aGlzLmRlYm91bmNlKCJ2YWFkaW4tZ3JpZC1zY3JvbGxpbmciLGZ1bmN0aW9uKCl7dGhpcy5zY3JvbGxpbmc9ITE7dGhpcy5fcmVvcmRlclJvd3MoKX0sMTAwKX0sX2FkanVzdFZpcnR1YWxJbmRleE9mZnNldDpmdW5jdGlvbihhKXtpZigxRTQ8Ck1hdGguYWJzKGEpKXRoaXMuX25vU2NhbGU/dGhpcy5fbm9TY2FsZT0hMTooYT1NYXRoLnJvdW5kKHRoaXMuX3Njcm9sbFBvc2l0aW9uL3RoaXMuX3Njcm9sbEhlaWdodCoxRTMpLzFFMyx0aGlzLl92aWR4T2Zmc2V0PU1hdGgucm91bmQoYSp0aGlzLnNpemUtYSp0aGlzLl92aXJ0dWFsQ291bnQpLDA9PT10aGlzLl9zY3JvbGxUb3AmJnRoaXMuc2Nyb2xsVG9JbmRleCgwKSk7ZWxzZXthPXRoaXMuX3ZpZHhPZmZzZXR8fDA7MD09PXRoaXMuX3Njcm9sbFRvcD8odGhpcy5fdmlkeE9mZnNldD0wLGEhPT10aGlzLl92aWR4T2Zmc2V0JiZ0aGlzLnNjcm9sbFRvSW5kZXgoMCkpOjFFMz50aGlzLmZpcnN0VmlzaWJsZUluZGV4JiYwPHRoaXMuX3ZpZHhPZmZzZXQmJih0aGlzLl92aWR4T2Zmc2V0LT1NYXRoLm1pbih0aGlzLl92aWR4T2Zmc2V0LDEwMCksdGhpcy5zY3JvbGxUb0luZGV4KHRoaXMuZmlyc3RWaXNpYmxlSW5kZXgrKGEtdGhpcy5fdmlkeE9mZnNldCkrMSksdGhpcy5fbm9TY2FsZT0KITApO3ZhciBjPXRoaXMuc2l6ZS10aGlzLl92aXJ0dWFsQ291bnQ7dGhpcy5fc2Nyb2xsVG9wPj10aGlzLl9tYXhTY3JvbGxUb3A/KHRoaXMuX3ZpZHhPZmZzZXQ9YyxhIT09dGhpcy5fdmlkeE9mZnNldCYmdGhpcy5zY3JvbGxUb0luZGV4KHRoaXMuX3ZpcnR1YWxDb3VudCkpOnRoaXMuZmlyc3RWaXNpYmxlSW5kZXg+dGhpcy5fdmlydHVhbENvdW50LTFFMyYmdGhpcy5fdmlkeE9mZnNldDxjJiYodGhpcy5fdmlkeE9mZnNldCs9TWF0aC5taW4oYy10aGlzLl92aWR4T2Zmc2V0LDEwMCksdGhpcy5zY3JvbGxUb0luZGV4KHRoaXMuZmlyc3RWaXNpYmxlSW5kZXgtKHRoaXMuX3ZpZHhPZmZzZXQtYSkpLHRoaXMuX25vU2NhbGU9ITApfX0sX3Jlb3JkZXJSb3dzOmZ1bmN0aW9uKCl7dmFyIGE9UG9seW1lci5kb20odGhpcy4kLml0ZW1zKSxjPWEucXVlcnlTZWxlY3RvckFsbCgiLnZhYWRpbi1ncmlkLXJvdyIpLGQ9Yy5sZW5ndGgtKGNbMF0uaW5kZXgtKHRoaXMuX3ZpcnR1YWxTdGFydCt0aGlzLl92aWR4T2Zmc2V0KSk7CmlmKGQ8Yy5sZW5ndGgvMilmb3IodmFyIGY9MDtmPGQ7ZisrKWEuYXBwZW5kQ2hpbGQoY1tmXSk7ZWxzZSBmb3IoO2Q8Yy5sZW5ndGg7ZCsrKWEuaW5zZXJ0QmVmb3JlKGNbZF0sY1swXSl9LF9mcm96ZW5DZWxsc0NoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLmRlYm91bmNlKCJjYWNoZS1lbGVtZW50cyIsZnVuY3Rpb24oKXtQb2x5bWVyLmRvbSh0aGlzLmRvbUhvc3Qucm9vdCkucXVlcnlTZWxlY3RvckFsbCgiLnZhYWRpbi1ncmlkLWNlbGwiKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe2Euc3R5bGUudHJhbnNmb3JtPSIifSk7dGhpcy5fZnJvemVuQ2VsbHM9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoUG9seW1lci5kb20odGhpcy5kb21Ib3N0LnJvb3QpLnF1ZXJ5U2VsZWN0b3JBbGwoIltmcm96ZW5dIikpO3RoaXMuX3RyYW5zbGF0ZVN0YXRpb25hcnlFbGVtZW50cygpfSk7dGhpcy5fdXBkYXRlTGFzdEZyb3plbigpfSxfdXBkYXRlTGFzdEZyb3plbjpmdW5jdGlvbigpe2lmKHRoaXMuY29sdW1uVHJlZSl7dmFyIGE9CnRoaXMuY29sdW1uVHJlZVt0aGlzLmNvbHVtblRyZWUubGVuZ3RoLTFdLnNsaWNlKDApO2Euc29ydChmdW5jdGlvbihkLGYpe3JldHVybiBkLl9vcmRlci1mLl9vcmRlcn0pO3ZhciBjPWEucmVkdWNlKGZ1bmN0aW9uKGQsZixnKXtmLl9sYXN0RnJvemVuPSExO3JldHVybiBmLmZyb3plbiYmIWYuaGlkZGVuP2c6ZH0sdm9pZCAwKTt2b2lkIDAhPT1jJiYoYVtjXS5fbGFzdEZyb3plbj0hMCl9fSxfdHJhbnNsYXRlU3RhdGlvbmFyeUVsZW1lbnRzOmZ1bmN0aW9uKCl7dGhpcy5maXhlZFNlY3Rpb25zPyh0aGlzLiQuaXRlbXMuc3R5bGUudHJhbnNmb3JtPXRoaXMuX2dldFRyYW5zbGF0ZSgtdGhpcy5fc2Nyb2xsTGVmdHx8MCwtdGhpcy5fc2Nyb2xsVG9wfHwwKSx0aGlzLiQuZm9vdGVyLnN0eWxlLnRyYW5zZm9ybT10aGlzLiQuaGVhZGVyLnN0eWxlLnRyYW5zZm9ybT10aGlzLl9nZXRUcmFuc2xhdGUoLXRoaXMuX3Njcm9sbExlZnR8fDAsMCkpOnRoaXMuJC5mb290ZXIuc3R5bGUudHJhbnNmb3JtPQp0aGlzLiQuaGVhZGVyLnN0eWxlLnRyYW5zZm9ybT10aGlzLl9nZXRUcmFuc2xhdGUoMCx0aGlzLl9zY3JvbGxUb3ApO2Zvcih2YXIgYT10aGlzLl9nZXRUcmFuc2xhdGUodGhpcy5fc2Nyb2xsTGVmdCwwKSxjPTA7Yzx0aGlzLl9mcm96ZW5DZWxscy5sZW5ndGg7YysrKXRoaXMuX2Zyb3plbkNlbGxzW2NdLnN0eWxlLnRyYW5zZm9ybT1hfSxfZ2V0VHJhbnNsYXRlOmZ1bmN0aW9uKGEsYyl7cmV0dXJuInRyYW5zbGF0ZSgiK2ErInB4LCIrYysicHgpIn19O3ZhYWRpbi5lbGVtZW50cy5ncmlkLlRhYmxlU2Nyb2xsQmVoYXZpb3I9W1BvbHltZXIuSXJvblNjcm9sbFRhcmdldEJlaGF2aW9yLHZhYWRpbi5lbGVtZW50cy5ncmlkLlRhYmxlU2Nyb2xsQmVoYXZpb3JJbXBsXTsKPC9zY3JpcHQ+CgoKCgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdmFhZGluLWdyaWQvdmFhZGluLWdyaWQtY2VsbC1jbGljay1iZWhhdmlvci5odG1sLmpzCndpbmRvdy52YWFkaW49d2luZG93LnZhYWRpbnx8e307dmFhZGluLmVsZW1lbnRzPXZhYWRpbi5lbGVtZW50c3x8e307dmFhZGluLmVsZW1lbnRzLmdyaWQ9dmFhZGluLmVsZW1lbnRzLmdyaWR8fHt9Owp2YWFkaW4uZWxlbWVudHMuZ3JpZC5DZWxsQ2xpY2tCZWhhdmlvcj17bGlzdGVuZXJzOntjbGljazoiX29uQ2xpY2sifSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX2NlbGxDb250ZW50Rm9jdXNIYW5kbGVyPWZ1bmN0aW9uKGEpe2EudGFyZ2V0IT09dGhpcy5fY2VsbENvbnRlbnQmJnRoaXMuZmlyZSgiY2VsbC1jb250ZW50LWZvY3VzIix7Y2VsbDp0aGlzfSl9LmJpbmQodGhpcyk7dGhpcy5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsdGhpcy5fY2VsbENvbnRlbnRGb2N1c0hhbmRsZXIsITApfSxkZXRhY2hlZDpmdW5jdGlvbigpe3RoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZm9jdXMiLHRoaXMuX2NlbGxDb250ZW50Rm9jdXNIYW5kbGVyLCEwKX0sX29uQ2xpY2s6ZnVuY3Rpb24oYSl7InZhYWRpbi1ncmlkLXNvcnRlciIhPT10aGlzLmxvY2FsTmFtZSYmdGhpcy5maXJlKCJjZWxsLWZvY3VzIix7Y2VsbDp0aGlzfSk7aWYodGhpcy5fY2VsbENsaWNrKXt2YXIgYz1Qb2x5bWVyLmRvbShhKS5sb2NhbFRhcmdldDsKYy5nZXREaXN0cmlidXRlZE5vZGVzJiYoYz1Qb2x5bWVyLmRvbShjKS5nZXREaXN0cmlidXRlZE5vZGVzKClbMF0pO3ZhciBkPVBvbHltZXIuZG9tKGEpLnBhdGg7ZD1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChkLDAsZC5pbmRleE9mKGMpKzEpO2MuY29udGFpbnModGhpcy50YXJnZXQmJnRoaXMudGFyZ2V0LnJvb3QuYWN0aXZlRWxlbWVudHx8ZG9jdW1lbnQuYWN0aXZlRWxlbWVudCl8fGQuc29tZSh0aGlzLl9pc0ZvY3VzYWJsZSl8fHRoaXMuX2NlbGxDbGljayhhKX19LF9pc0ZvY3VzYWJsZTpmdW5jdGlvbihhKXt2YXIgYz1Qb2x5bWVyLmRvbShhKS5wYXJlbnROb2RlO2M9LTEhPT1BcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKFBvbHltZXIuZG9tKGMpLnF1ZXJ5U2VsZWN0b3JBbGwoIlt0YWJpbmRleF0sIGJ1dHRvbiwgaW5wdXQsIHNlbGVjdCwgdGV4dGFyZWEsIG9iamVjdCwgaWZyYW1lLCBsYWJlbCwgYVtocmVmXSwgYXJlYVtocmVmXSIpLGEpO3JldHVybiFhLmRpc2FibGVkJiYKY319Owo8L3NjcmlwdD4KCgo8ZG9tLW1vZHVsZSBpZD0idmFhZGluLWdyaWQtdGFibGUtY2VsbCI+PC9kb20tbW9kdWxlPgo8ZG9tLW1vZHVsZSBpZD0idmFhZGluLWdyaWQtdGFibGUtaGVhZGVyLWNlbGwiPjwvZG9tLW1vZHVsZT4KPGRvbS1tb2R1bGUgaWQ9InZhYWRpbi1ncmlkLXRhYmxlLWZvb3Rlci1jZWxsIj48L2RvbS1tb2R1bGU+Cjxkb20tbW9kdWxlIGlkPSJ2YWFkaW4tZ3JpZC1zaXplci1jZWxsIj48L2RvbS1tb2R1bGU+Cgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdmFhZGluLWdyaWQvdmFhZGluLWdyaWQtdGFibGUtY2VsbC5odG1sLmpzCihmdW5jdGlvbigpe3ZhciBhPXtwcm9wZXJ0aWVzOntjb2x1bW46T2JqZWN0LGV4cGFuZGVkOkJvb2xlYW4sZmxleEdyb3c6TnVtYmVyLGNvbFNwYW46TnVtYmVyLGZvY3VzZWQ6e3R5cGU6Qm9vbGVhbixyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9LGZyb3plbjp7dHlwZTpCb29sZWFuLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH0sbGFzdEZyb3plbjp7dHlwZTpCb29sZWFuLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH0saGlkZGVuOnt0eXBlOkJvb2xlYW4scmVmbGVjdFRvQXR0cmlidXRlOiEwfSxpbnN0YW5jZTpPYmplY3QsaW5kZXg6TnVtYmVyLGl0ZW06T2JqZWN0LHNlbGVjdGVkOkJvb2xlYW4sdGVtcGxhdGU6T2JqZWN0LHRhcmdldDpPYmplY3Qsd2lkdGg6U3RyaW5nLG9yZGVyOk51bWJlcixyZW9yZGVyU3RhdHVzOnt0eXBlOlN0cmluZyxyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9LF9jaGlsZENvbHVtbnM6QXJyYXksX2NlbGxDb250ZW50Ok9iamVjdCxfaW5zZXJ0aW9uUG9pbnQ6T2JqZWN0LApfdGVtcGxhdGl6ZXI6T2JqZWN0fSxvYnNlcnZlcnM6Il9jb2x1bW5DaGFuZ2VkKGNvbHVtbik7X2NlbGxBdHRhY2hlZChjb2x1bW4sIGlzQXR0YWNoZWQpO19leHBhbmRlZENoYW5nZWQoZXhwYW5kZWQsIGluc3RhbmNlKTtfZmxleEdyb3dDaGFuZ2VkKGZsZXhHcm93KTtfaW5kZXhDaGFuZ2VkKGluZGV4LCBpbnN0YW5jZSk7X2l0ZW1DaGFuZ2VkKGl0ZW0sIGluc3RhbmNlKTtfaW5zdGFuY2VDaGFuZ2VkKGluc3RhbmNlLCB0YXJnZXQpO19zZWxlY3RlZENoYW5nZWQoc2VsZWN0ZWQsIGluc3RhbmNlKTtfdG9nZ2xlQ29udGVudChpc0F0dGFjaGVkLCBfY2VsbENvbnRlbnQsIF9pbnNlcnRpb25Qb2ludCk7X3RvZ2dsZUluc3RhbmNlKGlzQXR0YWNoZWQsIF90ZW1wbGF0aXplciwgaW5zdGFuY2UpO193aWR0aENoYW5nZWQod2lkdGgpO19vcmRlckNoYW5nZWQob3JkZXIpO192aXNpYmxlQ2hpbGRDb2x1bW5zQ2hhbmdlZChfdmlzaWJsZUNoaWxkQ29sdW1ucyk7X2NoaWxkQ29sdW1uc0NoYW5nZWQoX2NoaWxkQ29sdW1ucykiLnNwbGl0KCI7IiksCnJlYWR5OmZ1bmN0aW9uKCl7dGhpcy5jbGFzc0xpc3QuYWRkKCJ2YWFkaW4tZ3JpZC1jZWxsIik7ITE9PT1Qb2x5bWVyLlNldHRpbmdzLnVzZVNoYWRvdyYmKHRoaXMuY2xhc3NMaXN0LmFkZCgic3R5bGUtc2NvcGUiKSx0aGlzLmNsYXNzTGlzdC5hZGQoInZhYWRpbi1ncmlkIikpfSxfY29sdW1uQ2hhbmdlZDpmdW5jdGlvbihjKXt0aGlzLmZsZXhHcm93PWMuZmxleEdyb3c7dGhpcy5mcm96ZW49Yy5mcm96ZW47dGhpcy5sYXN0RnJvemVuPWMuX2xhc3RGcm96ZW47dGhpcy5oZWFkZXJUZW1wbGF0ZT1jLmhlYWRlclRlbXBsYXRlO3RoaXMuZm9vdGVyVGVtcGxhdGU9Yy5mb290ZXJUZW1wbGF0ZTt0aGlzLnRlbXBsYXRlPWMudGVtcGxhdGU7dGhpcy53aWR0aD1jLndpZHRoO3RoaXMuaGlkZGVuPWMuaGlkZGVuO3RoaXMucmVzaXphYmxlPWMucmVzaXphYmxlO3RoaXMuX2NoaWxkQ29sdW1ucz1jLl9jaGlsZENvbHVtbnM7dGhpcy5vcmRlcj1jLl9vcmRlcjtjLmNvbFNwYW4mJih0aGlzLmNvbFNwYW49CmMuY29sU3Bhbik7dGhpcy5saXN0ZW4oYywicHJvcGVydHktY2hhbmdlZCIsIl9jb2x1bW5Qcm9wQ2hhbmdlZCIpfSxfY2VsbEF0dGFjaGVkOmZ1bmN0aW9uKGMsZCl7dm9pZCAwIT09YyYmdm9pZCAwIT09ZCYmKGQ/dGhpcy5saXN0ZW4oYywicHJvcGVydHktY2hhbmdlZCIsIl9jb2x1bW5Qcm9wQ2hhbmdlZCIpOnRoaXMuYXN5bmMoZnVuY3Rpb24oKXt0aGlzLmlzQXR0YWNoZWR8fHRoaXMudW5saXN0ZW4oYywicHJvcGVydHktY2hhbmdlZCIsIl9jb2x1bW5Qcm9wQ2hhbmdlZCIpfSkpfSxfY29sdW1uUHJvcENoYW5nZWQ6ZnVuY3Rpb24oYyl7Yy50YXJnZXQ9PXRoaXMuY29sdW1uJiYodGhpc1tjLmRldGFpbC5wYXRoXT1jLmRldGFpbC52YWx1ZSl9LF9leHBhbmRlZENoYW5nZWQ6ZnVuY3Rpb24oYyxkKXt2b2lkIDAhPT1jJiZ2b2lkIDAhPT1kJiYoZC5fX2V4cGFuZGVkX189YyxkLmV4cGFuZGVkPWMpfSxfZmxleEdyb3dDaGFuZ2VkOmZ1bmN0aW9uKGMpe3RoaXMuc3R5bGUuZmxleEdyb3c9CmN9LF9pbmRleENoYW5nZWQ6ZnVuY3Rpb24oYyxkKXt2b2lkIDAhPT1jJiZ2b2lkIDAhPT1kJiYoZC5pbmRleD1jKX0sX2l0ZW1DaGFuZ2VkOmZ1bmN0aW9uKGMsZCl7dm9pZCAwIT09YyYmdm9pZCAwIT09ZCYmKGQuaXRlbT1jKX0sX3NlbGVjdGVkQ2hhbmdlZDpmdW5jdGlvbihjLGQpe3ZvaWQgMCE9PWMmJnZvaWQgMCE9PWQmJihkLl9fc2VsZWN0ZWRfXz1jLGQuc2VsZWN0ZWQ9Yyl9LF9jaGlsZENvbHVtbnNDaGFuZ2VkOmZ1bmN0aW9uKGMpe3RoaXMuY29sU3Bhbj1jLmxlbmd0aH0sX3RvZ2dsZUNvbnRlbnQ6ZnVuY3Rpb24oYyxkLGYpe3ZvaWQgMCE9PWMmJnZvaWQgMCE9PWQmJnZvaWQgMCE9PWYmJihjPyhQb2x5bWVyLmRvbShkKS5wYXJlbnROb2RlIT09dGhpcy50YXJnZXQmJlBvbHltZXIuZG9tKHRoaXMudGFyZ2V0KS5hcHBlbmRDaGlsZChkKSxQb2x5bWVyLmRvbSh0aGlzKS5hcHBlbmRDaGlsZChmKSk6dGhpcy5hc3luYyhmdW5jdGlvbigpe3RoaXMuaXNBdHRhY2hlZHx8UG9seW1lci5kb20oZCkucGFyZW50Tm9kZSE9PQp0aGlzLnRhcmdldHx8UG9seW1lci5kb20odGhpcy50YXJnZXQpLnJlbW92ZUNoaWxkKGQpfSkpfSxfdG9nZ2xlSW5zdGFuY2U6ZnVuY3Rpb24oYyxkLGYpe3ZvaWQgMCE9PWMmJnZvaWQgMCE9PWQmJnZvaWQgMCE9PWYmJihjP2QuYWRkSW5zdGFuY2UoZik6ZC5yZW1vdmVJbnN0YW5jZShmKSl9LF93aWR0aENoYW5nZWQ6ZnVuY3Rpb24oYyl7dGhpcy5zdHlsZS53aWR0aD1jfSxfb3JkZXJDaGFuZ2VkOmZ1bmN0aW9uKGMpe3RoaXMuc3R5bGUub3JkZXI9Y30sX3RlbXBsYXRlQ2hhbmdlZDpmdW5jdGlvbihjKXt0aGlzLmluc3RhbmNlPWMudGVtcGxhdGl6ZXIuY3JlYXRlSW5zdGFuY2UoKTt0aGlzLl90ZW1wbGF0aXplcj1jLnRlbXBsYXRpemVyfSxfaW5zdGFuY2VDaGFuZ2VkOmZ1bmN0aW9uKGMsZCl7dm9pZCAwIT09YyYmdm9pZCAwIT09ZCYmKHRoaXMuc3R5bGUuaGVpZ2h0PSIiLHRoaXMuX2NlbGxDb250ZW50PXRoaXMuX2NlbGxDb250ZW50fHxkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ2YWFkaW4tZ3JpZC1jZWxsLWNvbnRlbnQiKSwKYz0idmFhZGluLWdyaWQtY2VsbC1jb250ZW50LSIrKHZhYWRpbi5lbGVtZW50cy5ncmlkLl9jb250ZW50SW5kZXg9dmFhZGluLmVsZW1lbnRzLmdyaWQuX2NvbnRlbnRJbmRleCsxfHwwKSx0aGlzLl9jZWxsQ29udGVudC5pbm5lckhUTUw9IiIsUG9seW1lci5kb20odGhpcy5fY2VsbENvbnRlbnQpLmFwcGVuZENoaWxkKHRoaXMuaW5zdGFuY2Uucm9vdCksdGhpcy5fY2VsbENvbnRlbnQuc2V0QXR0cmlidXRlKCJpZCIsYyksUG9seW1lci5FbGVtZW50Pyh0aGlzLl9jZWxsQ29udGVudC5zZXRBdHRyaWJ1dGUoInNsb3QiLGMpLHRoaXMuX2luc2VydGlvblBvaW50PXRoaXMuX2luc2VydGlvblBvaW50fHxkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzbG90IiksdGhpcy5faW5zZXJ0aW9uUG9pbnQuc2V0QXR0cmlidXRlKCJuYW1lIixjKSk6KHRoaXMuX2luc2VydGlvblBvaW50PXRoaXMuX2luc2VydGlvblBvaW50fHxkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjb250ZW50IiksdGhpcy5faW5zZXJ0aW9uUG9pbnQuc2V0QXR0cmlidXRlKCJzZWxlY3QiLAoiIyIrYykpKX19O1BvbHltZXIoe2lzOiJ2YWFkaW4tZ3JpZC10YWJsZS1jZWxsIixiZWhhdmlvcnM6W2EsdmFhZGluLmVsZW1lbnRzLmdyaWQuQ2VsbENsaWNrQmVoYXZpb3JdLG9ic2VydmVyczpbIl90ZW1wbGF0ZUNoYW5nZWQodGVtcGxhdGUpIl0sX2NlbGxDbGljazpmdW5jdGlvbihjKXtjLmRlZmF1bHRQcmV2ZW50ZWR8fHRoaXMuZmlyZSgiY2VsbC1hY3RpdmF0ZSIse21vZGVsOnRoaXMuaW5zdGFuY2V9KX19KTtQb2x5bWVyKHtpczoidmFhZGluLWdyaWQtdGFibGUtaGVhZGVyLWNlbGwiLHByb3BlcnRpZXM6e2hlYWRlclRlbXBsYXRlOk9iamVjdCxyZXNpemFibGU6Qm9vbGVhbixjb2x1bW5SZXNpemluZzp7dHlwZTpCb29sZWFuLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH19LGJlaGF2aW9yczpbYSx2YWFkaW4uZWxlbWVudHMuZ3JpZC5DZWxsQ2xpY2tCZWhhdmlvcl0sb2JzZXJ2ZXJzOlsiX2hlYWRlclRlbXBsYXRlQ2hhbmdlZChoZWFkZXJUZW1wbGF0ZSkiLCJfaXNFbXB0eUNoYW5nZWQoX2lzRW1wdHksIGlzQXR0YWNoZWQpIiwKIl9yZXNpemFibGVDaGFuZ2VkKHJlc2l6YWJsZSkiXSxsaXN0ZW5lcnM6e21vdXNlZG93bjoiX2NhbmNlbE1vdXNlRG93bk9uUmVzaXplIixtb3VzZW1vdmU6Il9lbmFibGVEcmFnIixtb3VzZW91dDoiX2Rpc2FibGVEcmFnIix0b3VjaHN0YXJ0OiJfb25Ub3VjaFN0YXJ0Iix0b3VjaG1vdmU6Il9vblRvdWNoTW92ZSIsdG91Y2hlbmQ6Il9vblRvdWNoRW5kIixjb250ZXh0bWVudToiX29uQ29udGV4dE1lbnUifSxfb25Db250ZXh0TWVudTpmdW5jdGlvbihjKXt0aGlzLl9yZW9yZGVyR2hvc3QmJmMucHJldmVudERlZmF1bHQoKX0sX29uVG91Y2hTdGFydDpmdW5jdGlvbihjKXtjLnRhcmdldCE9PXRoaXMuX3Jlc2l6ZUhhbmRsZSYmdGhpcy50YXJnZXQuY29sdW1uUmVvcmRlcmluZ0FsbG93ZWQmJih0aGlzLl9zdGFydFJlb3JkZXJUaW1lb3V0PXNldFRpbWVvdXQodGhpcy5fc3RhcnRSZW9yZGVyLmJpbmQodGhpcyxjKSwxMDApKX0sX3N0YXJ0UmVvcmRlcjpmdW5jdGlvbihjKXt0aGlzLl9yZW9yZGVyR2hvc3Q9CnRoaXMuX2dldEdob3N0KCk7dGhpcy5fcmVvcmRlckdob3N0LnN0eWxlLnZpc2liaWxpdHk9InZpc2libGUiO3ZhciBkPW5ldyBDdXN0b21FdmVudCgiZHJhZ3N0YXJ0Iix7YnViYmxlczohMH0pO3RoaXMuX2NlbGxDb250ZW50LmRpc3BhdGNoRXZlbnQoZCk7dGhpcy5fcmVvcmRlclhZPXt4OmMudG91Y2hlc1swXS5jbGllbnRYLXRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCx5OmMudG91Y2hlc1swXS5jbGllbnRZLXRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wfTt0aGlzLl91cGRhdGVHaG9zdFBvc2l0aW9uKGMudG91Y2hlc1swXS5jbGllbnRYLGMudG91Y2hlc1swXS5jbGllbnRZKX0sX29uVG91Y2hNb3ZlOmZ1bmN0aW9uKGMpe2lmKHRoaXMuX3Jlb3JkZXJHaG9zdCl7Yy5wcmV2ZW50RGVmYXVsdCgpO3ZhciBkPW5ldyBDdXN0b21FdmVudCgiZHJhZ292ZXIiLHtidWJibGVzOiEwfSk7ZC5jbGllbnRYPWMudG91Y2hlc1swXS5jbGllbnRYO2QuY2xpZW50WT0KYy50b3VjaGVzWzBdLmNsaWVudFk7dmFyIGY9dGhpcy5fY29udGVudEZyb21Qb2ludChkLmNsaWVudFgsZC5jbGllbnRZKTtmJiZmLmRpc3BhdGNoRXZlbnQoZCk7dGhpcy5fdXBkYXRlR2hvc3RQb3NpdGlvbihjLnRvdWNoZXNbMF0uY2xpZW50WCxjLnRvdWNoZXNbMF0uY2xpZW50WSl9ZWxzZSBjbGVhclRpbWVvdXQodGhpcy5fc3RhcnRSZW9yZGVyVGltZW91dCl9LF91cGRhdGVHaG9zdFBvc2l0aW9uOmZ1bmN0aW9uKGMsZCl7Yy09dGhpcy5fcmVvcmRlclhZLng7ZD1kLXRoaXMuX3Jlb3JkZXJYWS55LTUwO3ZhciBmPXBhcnNlSW50KHRoaXMuX3Jlb3JkZXJHaG9zdC5zdHlsZS5sZWZ0fHwwKSxnPXBhcnNlSW50KHRoaXMuX3Jlb3JkZXJHaG9zdC5zdHlsZS50b3B8fDApLGw9dGhpcy5fcmVvcmRlckdob3N0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3RoaXMuX3Jlb3JkZXJHaG9zdC5zdHlsZS5sZWZ0PWYtKGwubGVmdC1jKSsicHgiO3RoaXMuX3Jlb3JkZXJHaG9zdC5zdHlsZS50b3A9CmctKGwudG9wLWQpKyJweCJ9LF9vblRvdWNoRW5kOmZ1bmN0aW9uKGMpe2NsZWFyVGltZW91dCh0aGlzLl9zdGFydFJlb3JkZXJUaW1lb3V0KTt0aGlzLl9yZW9yZGVyR2hvc3QmJihjLnByZXZlbnREZWZhdWx0KCksYz1uZXcgQ3VzdG9tRXZlbnQoImRyYWdlbmQiLHtidWJibGVzOiEwfSksdGhpcy5kaXNwYXRjaEV2ZW50KGMpLHRoaXMuX3Jlb3JkZXJHaG9zdC5zdHlsZS52aXNpYmlsaXR5PSJoaWRkZW4iLHRoaXMuX3Jlb3JkZXJHaG9zdD1udWxsKX0sX2NvbnRlbnRGcm9tUG9pbnQ6ZnVuY3Rpb24oYyxkKXtpZihQb2x5bWVyLlNldHRpbmdzLnVzZVNoYWRvdyl7dmFyIGY9dGhpcy50YXJnZXQuJC5zY3JvbGxlcjtmLnRvZ2dsZUF0dHJpYnV0ZSgibm8tY29udGVudC1wb2ludGVyLWV2ZW50cyIsITApO2M9dGhpcy5kb21Ib3N0LnJvb3QuZWxlbWVudEZyb21Qb2ludChjLGQpO2YudG9nZ2xlQXR0cmlidXRlKCJuby1jb250ZW50LXBvaW50ZXItZXZlbnRzIiwhMSk7aWYoYyYmYy5nZXRDb250ZW50Q2hpbGRyZW4pcmV0dXJuIGMuZ2V0Q29udGVudENoaWxkcmVuKFBvbHltZXIuRWxlbWVudD8KInNsb3QiOiJjb250ZW50IilbMF19ZWxzZSByZXR1cm4gZG9jdW1lbnQuZWxlbWVudEZyb21Qb2ludChjLGQpfSxfZ2V0R2hvc3Q6ZnVuY3Rpb24oKXt2YXIgYz10aGlzLnRhcmdldC4kLnNjcm9sbGVyLiQucmVvcmRlcmdob3N0O2MuaW5uZXJUZXh0PXRoaXMuX2NlbGxDb250ZW50LmlubmVyVGV4dDt2YXIgZD13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLl9jZWxsQ29udGVudCk7ImJveFNpemluZyBkaXNwbGF5IHdpZHRoIGhlaWdodCBiYWNrZ3JvdW5kIGFsaWduSXRlbXMgcGFkZGluZyBib3JkZXIgZmxleC1kaXJlY3Rpb24gb3ZlcmZsb3ciLnNwbGl0KCIgIikuZm9yRWFjaChmdW5jdGlvbihmKXtjLnN0eWxlW2ZdPWRbZl19LHRoaXMpO3JldHVybiBjfSxfZW5hYmxlRHJhZzpmdW5jdGlvbigpe3RoaXMuX2NlbGxDb250ZW50LmRyYWdnYWJsZT10aGlzLnRhcmdldC5jb2x1bW5SZW9yZGVyaW5nQWxsb3dlZCYmIXdpbmRvdy5nZXRTZWxlY3Rpb24oKS50b1N0cmluZygpfSxfZGlzYWJsZURyYWc6ZnVuY3Rpb24oKXt0aGlzLl9jZWxsQ29udGVudC5kcmFnZ2FibGU9CiExfSxfY2FuY2VsTW91c2VEb3duT25SZXNpemU6ZnVuY3Rpb24oYyl7Yy50YXJnZXQ9PT10aGlzLl9yZXNpemVIYW5kbGUmJmMucHJldmVudERlZmF1bHQoKX0sX3Jlc2l6YWJsZUNoYW5nZWQ6ZnVuY3Rpb24oYyl7Yz8odGhpcy5fcmVzaXplSGFuZGxlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMuX3Jlc2l6ZUhhbmRsZS5jbGFzc0xpc3QuYWRkKCJ2YWFkaW4tZ3JpZC1jb2x1bW4tcmVzaXplLWhhbmRsZSIpLHRoaXMubGlzdGVuKHRoaXMuX3Jlc2l6ZUhhbmRsZSwidHJhY2siLCJfb25UcmFjayIpLFBvbHltZXIuZG9tKHRoaXMpLmFwcGVuZENoaWxkKHRoaXMuX3Jlc2l6ZUhhbmRsZSkpOnRoaXMuX3Jlc2l6ZUhhbmRsZSYmKHRoaXMudW5saXN0ZW4odGhpcy5fcmVzaXplSGFuZGxlLCJ0cmFjayIsIl9vblRyYWNrIiksUG9seW1lci5kb20odGhpcykucmVtb3ZlQ2hpbGQodGhpcy5fcmVzaXplSGFuZGxlKSl9LF9vblRyYWNrOmZ1bmN0aW9uKGMpe3RoaXMuY29sdW1uUmVzaXppbmc9CiEwO3ZhciBkPXRoaXMuY29sdW1uOyJ2YWFkaW4tZ3JpZC1jb2x1bW4tZ3JvdXAiPT09ZC5sb2NhbE5hbWUmJihkPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGQuX2NoaWxkQ29sdW1ucywwKS5zb3J0KGZ1bmN0aW9uKGwsayl7cmV0dXJuIGwuX29yZGVyLWsuX29yZGVyfSkuZmlsdGVyKGZ1bmN0aW9uKGwpe3JldHVybiFsLmhpZGRlbn0pLnBvcCgpKTt2YXIgZj10aGlzLl9nZXRIZWFkZXJDZWxsQnlDb2x1bW4oZCk7aWYoZi5vZmZzZXRXaWR0aCl7dmFyIGc9d2luZG93LmdldENvbXB1dGVkU3R5bGUoZi5fY2VsbENvbnRlbnQpO2Qud2lkdGg9TWF0aC5tYXgoMTArcGFyc2VJbnQoZy5wYWRkaW5nTGVmdCkrcGFyc2VJbnQoZy5wYWRkaW5nUmlnaHQpLGYub2Zmc2V0V2lkdGgrYy5kZXRhaWwueC1mLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnJpZ2h0KSsicHgiO2QuZmxleEdyb3c9MH1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChQb2x5bWVyLmRvbSh0aGlzLnBhcmVudEVsZW1lbnQucGFyZW50RWxlbWVudCkucXVlcnlTZWxlY3RvckFsbCgiLnZhYWRpbi1ncmlkLXJvdzpsYXN0LWNoaWxkIC52YWFkaW4tZ3JpZC1jZWxsIikpLnNvcnQoZnVuY3Rpb24obCwKayl7cmV0dXJuIGwuY29sdW1uLl9vcmRlci1rLmNvbHVtbi5fb3JkZXJ9KS5mb3JFYWNoKGZ1bmN0aW9uKGwsayxtKXtrPG0uaW5kZXhPZihmKSYmKGwuY29sdW1uLndpZHRoPWwub2Zmc2V0V2lkdGgrInB4IixsLmNvbHVtbi5mbGV4R3Jvdz0wKX0pO3RoaXMuY29sdW1uUmVzaXppbmcmJiJlbmQiPT09Yy5kZXRhaWwuc3RhdGUmJih0aGlzLmNvbHVtblJlc2l6aW5nPSExKTt0aGlzLmZpcmUoImNvbHVtbi1yZXNpemluZyIpfSxfZ2V0SGVhZGVyQ2VsbEJ5Q29sdW1uOmZ1bmN0aW9uKGMpe3JldHVybiBBcnJheS5wcm90b3R5cGUuZmlsdGVyLmNhbGwoUG9seW1lci5kb20odGhpcy5wYXJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQpLnF1ZXJ5U2VsZWN0b3JBbGwoIi52YWFkaW4tZ3JpZC1yb3c6bGFzdC1jaGlsZCAudmFhZGluLWdyaWQtY2VsbCIpLGZ1bmN0aW9uKGQpe3JldHVybiBkLmNvbHVtbj09PWN9KVswXX0sX2hlYWRlclRlbXBsYXRlQ2hhbmdlZDpmdW5jdGlvbihjKXt2b2lkIDAhPT0KYyYmKG51bGw9PT1jfHwhdGhpcy5faXNDb2x1bW5Sb3cmJiJ2YWFkaW4tZ3JpZC1jb2x1bW4tZ3JvdXAiIT09dGhpcy5jb2x1bW4ubG9jYWxOYW1lPyh0aGlzLmluc3RhbmNlPXtyb290OmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpfSx0aGlzLl9pc0VtcHR5PSEwKToodGhpcy5pbnN0YW5jZT1jLnRlbXBsYXRpemVyLmNyZWF0ZUluc3RhbmNlKCksdGhpcy5fdGVtcGxhdGl6ZXI9Yy50ZW1wbGF0aXplcix0aGlzLl9pc0VtcHR5PSExKSl9LF9pc0VtcHR5Q2hhbmdlZDpmdW5jdGlvbihjLGQpe2QmJnRoaXMuZmlyZSgiY2VsbC1lbXB0eS1jaGFuZ2VkIil9fSk7UG9seW1lcih7aXM6InZhYWRpbi1ncmlkLXRhYmxlLWZvb3Rlci1jZWxsIixwcm9wZXJ0aWVzOntmb290ZXJUZW1wbGF0ZTpPYmplY3R9LGJlaGF2aW9yczpbYSx2YWFkaW4uZWxlbWVudHMuZ3JpZC5DZWxsQ2xpY2tCZWhhdmlvcl0sb2JzZXJ2ZXJzOlsiX2Zvb3RlclRlbXBsYXRlQ2hhbmdlZChmb290ZXJUZW1wbGF0ZSkiLAoiX2lzRW1wdHlDaGFuZ2VkKF9pc0VtcHR5LCBpc0F0dGFjaGVkKSJdLF9mb290ZXJUZW1wbGF0ZUNoYW5nZWQ6ZnVuY3Rpb24oYyl7dm9pZCAwIT09YyYmKG51bGw9PT1jfHwhdGhpcy5faXNDb2x1bW5Sb3cmJiJ2YWFkaW4tZ3JpZC1jb2x1bW4tZ3JvdXAiIT09dGhpcy5jb2x1bW4ubG9jYWxOYW1lPyh0aGlzLmluc3RhbmNlPXtyb290OmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpfSx0aGlzLl9pc0VtcHR5PSEwKToodGhpcy5pbnN0YW5jZT1jLnRlbXBsYXRpemVyLmNyZWF0ZUluc3RhbmNlKCksdGhpcy5fdGVtcGxhdGl6ZXI9Yy50ZW1wbGF0aXplcix0aGlzLl9pc0VtcHR5PSExKSl9LF9pc0VtcHR5Q2hhbmdlZDpmdW5jdGlvbihjLGQpe2QmJnRoaXMuZmlyZSgiY2VsbC1lbXB0eS1jaGFuZ2VkIil9fSk7UG9seW1lcih7aXM6InZhYWRpbi1ncmlkLXNpemVyLWNlbGwiLGJlaGF2aW9yczpbYV19KX0pKCk7Cjwvc2NyaXB0PgoKCjxkb20tbW9kdWxlIGlkPSJ2YWFkaW4tZ3JpZC1zaXplciI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICB2aXNpYmlsaXR5OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC5jZWxsIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgICBsaW5lLWhlaWdodDogMDsKICAgICAgICBmb250LXNpemU6IDFweDsKICAgICAgICBtYXJnaW4tdG9wOiAtMWVtOwogICAgICB9CgogICAgICAuY2VsbFtoaWRkZW5dIHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX2NvbHVtbnNdXSIgYXM9ImNvbHVtbiI+CiAgICAgIDx2YWFkaW4tZ3JpZC1zaXplci1jZWxsIGNsYXNzPSJjZWxsIiBjb2x1bW49IltbY29sdW1uXV0iPiZuYnNwOzwvdmFhZGluLWdyaWQtc2l6ZXItY2VsbD4KICAgIDwvdGVtcGxhdGU+CgogIDwvdGVtcGxhdGU+CiAgPHNjcmlwdD4vL35+V0VCUEFUSH5+L3ZhYWRpbi1ncmlkL3ZhYWRpbi1ncmlkLXNpemVyLmh0bWwuanMKUG9seW1lcih7aXM6InZhYWRpbi1ncmlkLXNpemVyIixwcm9wZXJ0aWVzOntjb2x1bW5UcmVlOkFycmF5LHRvcDpOdW1iZXIsX2NvbHVtbnM6QXJyYXl9LG9ic2VydmVyczpbIl9jb2x1bW5UcmVlQ2hhbmdlZChjb2x1bW5UcmVlKSIsIl90b3BDaGFuZ2VkKHRvcCkiXSxfY29sdW1uVHJlZUNoYW5nZWQ6ZnVuY3Rpb24oYSl7dGhpcy5fY29sdW1ucz1hW2EubGVuZ3RoLTFdfSxfdG9wQ2hhbmdlZDpmdW5jdGlvbihhKXt0aGlzLnN0eWxlLnRvcD1hKyJweCJ9fSk7Cjwvc2NyaXB0Pgo8L2RvbS1tb2R1bGU+CgoKPGRvbS1tb2R1bGUgaWQ9InZhYWRpbi1ncmlkLXRhYmxlLW91dGVyLXNjcm9sbGVyIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMDsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgIG92ZXJmbG93OiBhdXRvOwogICAgICB9CgogICAgICA6aG9zdChbcGFzc3Rocm91Z2hdKSB7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIH0KCiAgICAgIDpob3N0KFtpb3NdKSB7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IGFsbDsKICAgICAgICB6LWluZGV4OiAtMzsKICAgICAgfQoKICAgICAgOmhvc3QoW2lvc11bc2Nyb2xsaW5nXSkgewogICAgICAgIHotaW5kZXg6IDA7CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPHNsb3Q+PC9zbG90PgoKICA8L3RlbXBsYXRlPgogIDxzY3JpcHQ+Ly9+fldFQlBBVEh+fi92YWFkaW4tZ3JpZC92YWFkaW4tZ3JpZC10YWJsZS1vdXRlci1zY3JvbGxlci5odG1sLmpzClBvbHltZXIoe2lzOiJ2YWFkaW4tZ3JpZC10YWJsZS1vdXRlci1zY3JvbGxlciIscHJvcGVydGllczp7c2Nyb2xsVGFyZ2V0Ont0eXBlOk9iamVjdCxvYnNlcnZlcjoiX3Njcm9sbFRhcmdldENoYW5nZWQifSxwYXNzdGhyb3VnaDp7dHlwZTpCb29sZWFuLHJlZmxlY3RUb0F0dHJpYnV0ZTohMCx2YWx1ZTohMH19LGxpc3RlbmVyczp7c2Nyb2xsOiJfc3luY1Njcm9sbFRhcmdldCJ9LGF0dGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5saXN0ZW4odGhpcy5kb21Ib3N0LCJtb3VzZW1vdmUiLCJfb25Nb3VzZU1vdmUiKTt0aGlzLnN0eWxlLndlYmtpdE92ZXJmbG93U2Nyb2xsaW5nPSJ0b3VjaCJ9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy51bmxpc3Rlbih0aGlzLmRvbUhvc3QsIm1vdXNlbW92ZSIsIl9vbk1vdXNlTW92ZSIpfSxfc2Nyb2xsVGFyZ2V0Q2hhbmdlZDpmdW5jdGlvbihhLGMpe2MmJnRoaXMudW5saXN0ZW4oYywic2Nyb2xsIiwiX3N5bmNPdXRlclNjcm9sbGVyIik7dGhpcy5saXN0ZW4oYSwKInNjcm9sbCIsIl9zeW5jT3V0ZXJTY3JvbGxlciIpfSxfb25Nb3VzZU1vdmU6ZnVuY3Rpb24oYSl7dGhpcy5wYXNzdGhyb3VnaD1hLm9mZnNldFk8PXRoaXMuY2xpZW50SGVpZ2h0JiZhLm9mZnNldFg8PXRoaXMuY2xpZW50V2lkdGh9LF9zeW5jT3V0ZXJTY3JvbGxlcjpmdW5jdGlvbigpe3RoaXMuX3N5bmNpbmdTY3JvbGxUYXJnZXR8fCh0aGlzLl9zeW5jaW5nT3V0ZXJTY3JvbGxlcj0hMCx0aGlzLnNjcm9sbFRvcD10aGlzLmRvbUhvc3QuX3Njcm9sbFRvcCx0aGlzLnNjcm9sbExlZnQ9dGhpcy5kb21Ib3N0Ll9zY3JvbGxMZWZ0KTt0aGlzLl9zeW5jaW5nU2Nyb2xsVGFyZ2V0PSExfSxfc3luY1Njcm9sbFRhcmdldDpmdW5jdGlvbigpe3RoaXMuX3N5bmNpbmdPdXRlclNjcm9sbGVyfHwodGhpcy5fc3luY2luZ1Njcm9sbFRhcmdldD0hMCx0aGlzLnNjcm9sbFRhcmdldC5zY3JvbGxUb3A9dGhpcy5zY3JvbGxUb3AsdGhpcy5zY3JvbGxUYXJnZXQuc2Nyb2xsTGVmdD10aGlzLnNjcm9sbExlZnQsCnRoaXMuZG9tSG9zdC5fc2Nyb2xsSGFuZGxlcigpKTt0aGlzLl9zeW5jaW5nT3V0ZXJTY3JvbGxlcj0hMX19KTsKPC9zY3JpcHQ+CjwvZG9tLW1vZHVsZT4KCjxzY3JpcHQ+Ly9+fldFQlBBVEh+fi92YWFkaW4tZ3JpZC92YWFkaW4tZ3JpZC1mb2N1c2FibGUtY2VsbC1jb250YWluZXItYmVoYXZpb3IuaHRtbC5qcwp3aW5kb3cudmFhZGluPXdpbmRvdy52YWFkaW58fHt9O3ZhYWRpbi5lbGVtZW50cz12YWFkaW4uZWxlbWVudHN8fHt9O3ZhYWRpbi5lbGVtZW50cy5ncmlkPXZhYWRpbi5lbGVtZW50cy5ncmlkfHx7fTsKdmFhZGluLmVsZW1lbnRzLmdyaWQuRm9jdXNhYmxlQ2VsbENvbnRhaW5lckJlaGF2aW9yPXtwcm9wZXJ0aWVzOntmb2N1c2VkOnt0eXBlOkJvb2xlYW4scmVmbGVjdFRvQXR0cmlidXRlOiEwfSxfZm9jdXNlZFJvdzpPYmplY3QsX2ZvY3VzZWRSb3dJbmRleDpOdW1iZXIsX2ZvY3VzZWRDZWxsOk9iamVjdCxfZm9jdXNlZENlbGxJbmRleDpOdW1iZXIsX2xhc3RGb2N1c2VkQ2VsbDpPYmplY3R9LG9ic2VydmVyczpbIl9hbm5vdW5jZUZvY3VzZWRDZWxsKF9mb2N1c2VkQ2VsbCwgZm9jdXNlZCkiLCJfZGlzcGF0Y2hFdmVudHMoX2ZvY3VzZWRDZWxsLCBmb2N1c2VkKSIsIl9mb2N1c2VkQ2VsbENoYW5nZWQoX2ZvY3VzZWRSb3dJbmRleCwgX2ZvY3VzZWRDZWxsSW5kZXgpIl0sX2Fubm91bmNlRm9jdXNlZENlbGw6ZnVuY3Rpb24oYSxjKXt2b2lkIDAhPT1hJiZ2b2lkIDAhPT1jJiZ0aGlzLmRvbUhvc3QubmF2aWdhdGluZyYmYyYmKGM9UG9seW1lci5FbGVtZW50P2EuX2NlbGxDb250ZW50LmdldEF0dHJpYnV0ZSgic2xvdCIpOgphLl9jZWxsQ29udGVudC5pZCwidmFhZGluLWdyaWQtdGFibGUtYm9keSIhPT10aGlzLmlzfHxhLmhhc0F0dHJpYnV0ZSgiZGV0YWlsc2NlbGwiKXx8KGE9QXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbChQb2x5bWVyLmRvbShhLnBhcmVudEVsZW1lbnQpLnF1ZXJ5U2VsZWN0b3JBbGwoIi52YWFkaW4tZ3JpZC1jZWxsIiksYSksYz10aGlzLmRvbUhvc3QuJC5oZWFkZXIubGFzdEVsZW1lbnRDaGlsZC5jaGlsZHJlblthXS5fY2VsbENvbnRlbnQuaWQrIiAiK2MpLHRoaXMuZG9tSG9zdC4kLmZvb3RlckZvY3VzVHJhcC5hY3RpdmVUYXJnZXQ9Yyl9LF9kaXNwYXRjaEV2ZW50czpmdW5jdGlvbihhLGMpe3ZvaWQgMCE9PWEmJnZvaWQgMCE9PWMmJih0aGlzLl9sYXN0Rm9jdXNlZENlbGwmJih0aGlzLl9sYXN0Rm9jdXNlZENlbGwuX2NlbGxDb250ZW50LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJjZWxsLWZvY3Vzb3V0IikpLHRoaXMuX2xhc3RGb2N1c2VkQ2VsbD12b2lkIDApLApjJiYoYS5fY2VsbENvbnRlbnQuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImNlbGwtZm9jdXNpbiIpKSx0aGlzLl9sYXN0Rm9jdXNlZENlbGw9YSkpfSxfZm9jdXNlZENlbGxDaGFuZ2VkOmZ1bmN0aW9uKGEsYyl7dm9pZCAwIT09YSYmdm9pZCAwIT09YyYmQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbChQb2x5bWVyLmRvbSh0aGlzKS5jaGlsZHJlbixmdW5jdGlvbihkLGYpe2QuZm9jdXNlZD1mPT09YTtkLmZvY3VzZWQmJih0aGlzLl9mb2N1c2VkUm93PWQsdGhpcy5fZm9jdXNlZENlbGxJbmRleD1NYXRoLm1pbihjLGQuY2hpbGRyZW4ubGVuZ3RoLTEpLHRoaXMuX2ZvY3VzZWRDZWxsPWQuY2hpbGRyZW5bdGhpcy5fZm9jdXNlZENlbGxJbmRleF0pO2QuY2VsbHMuZm9yRWFjaChmdW5jdGlvbihnLGwpe2cuZm9jdXNlZD1sPT09dGhpcy5fZm9jdXNlZENlbGxJbmRleH0uYmluZCh0aGlzKSl9LmJpbmQodGhpcykpfSxmb2N1c0xlZnQ6ZnVuY3Rpb24oKXtpZighdGhpcy5fZm9jdXNlZENlbGwuaGFzQXR0cmlidXRlKCJkZXRhaWxzY2VsbCIpKXt2YXIgYT0KdGhpcy5fdmlzaWJsZUNlbGxJbmRleGVzKCk7MDxhLmxlbmd0aCYmKHRoaXMuX2ZvY3VzZWRDZWxsSW5kZXg9YVtNYXRoLm1heCgwLGEuaW5kZXhPZih0aGlzLl9mb2N1c2VkQ2VsbEluZGV4KS0xKV0pfX0sZm9jdXNEb3duOmZ1bmN0aW9uKCl7dGhpcy5fZm9jdXNlZFJvd0luZGV4PU1hdGgubWluKHRoaXMuX2ZvY3VzZWRSb3dJbmRleCsxLHRoaXMuY2hpbGRyZW4ubGVuZ3RoLTEpfSxfdmlzaWJsZUNlbGxJbmRleGVzOmZ1bmN0aW9uKCl7dmFyIGE9W107aWYodGhpcy5fZm9jdXNlZFJvdyYmdGhpcy5fZm9jdXNlZFJvdy5jaGlsZHJlbil7Zm9yKHZhciBjPXRoaXMuX2ZvY3VzZWRSb3cuY2hpbGRyZW4sZD0wO2Q8Yy5sZW5ndGg7ZCsrKWNbZF0uaGlkZGVufHxjW2RdPT09dGhpcy5fZm9jdXNlZFJvdy5fcm93RGV0YWlsc0NlbGx8fGEucHVzaChkKTthLnNvcnQoZnVuY3Rpb24oZixnKXtyZXR1cm4gY1tmXS5jb2x1bW4uX29yZGVyPGNbZ10uY29sdW1uLl9vcmRlcj8tMToxfSl9cmV0dXJuIGF9LApmb2N1c1BhZ2VEb3duOmZ1bmN0aW9uKCl7dGhpcy5fZm9jdXNlZFJvd0luZGV4PU1hdGgubWluKHRoaXMuX2ZvY3VzZWRSb3dJbmRleCsxMCx0aGlzLmNoaWxkcmVuLmxlbmd0aC0xKX0sZm9jdXNQYWdlVXA6ZnVuY3Rpb24oKXt0aGlzLl9mb2N1c2VkUm93SW5kZXg9TWF0aC5tYXgoMCx0aGlzLl9mb2N1c2VkUm93SW5kZXgtMTApfSxmb2N1c1JpZ2h0OmZ1bmN0aW9uKCl7aWYoIXRoaXMuX2ZvY3VzZWRDZWxsLmhhc0F0dHJpYnV0ZSgiZGV0YWlsc2NlbGwiKSl7dmFyIGE9dGhpcy5fdmlzaWJsZUNlbGxJbmRleGVzKCk7MDxhLmxlbmd0aCYmKHRoaXMuX2ZvY3VzZWRDZWxsSW5kZXg9YVtNYXRoLm1pbihhLmluZGV4T2YodGhpcy5fZm9jdXNlZENlbGxJbmRleCkrMSxhLmxlbmd0aC0xKV0pfX0sZm9jdXNVcDpmdW5jdGlvbigpe3RoaXMuX2ZvY3VzZWRSb3dJbmRleD1NYXRoLm1heCgwLHRoaXMuX2ZvY3VzZWRSb3dJbmRleC0xKX0sZm9jdXNIb21lOmZ1bmN0aW9uKCl7aWYoIXRoaXMuX2ZvY3VzZWRDZWxsLmhhc0F0dHJpYnV0ZSgiZGV0YWlsc2NlbGwiKSl7dmFyIGE9CnRoaXMuX3Zpc2libGVDZWxsSW5kZXhlcygpOzA8YS5sZW5ndGgmJih0aGlzLl9mb2N1c2VkQ2VsbEluZGV4PWFbMF0pfX0sZm9jdXNFbmQ6ZnVuY3Rpb24oKXtpZighdGhpcy5fZm9jdXNlZENlbGwuaGFzQXR0cmlidXRlKCJkZXRhaWxzY2VsbCIpKXt2YXIgYT10aGlzLl92aXNpYmxlQ2VsbEluZGV4ZXMoKTswPGEubGVuZ3RoJiYodGhpcy5fZm9jdXNlZENlbGxJbmRleD1hW2EubGVuZ3RoLTFdKX19LGZvY3VzRmlyc3Q6ZnVuY3Rpb24oKXt0aGlzLl9mb2N1c2VkUm93SW5kZXg9MDt0aGlzLmZvY3VzSG9tZSgpfSxmb2N1c0xhc3Q6ZnVuY3Rpb24oKXt0aGlzLl9mb2N1c2VkUm93SW5kZXg9dGhpcy5jaGlsZHJlbi5sZW5ndGgtMTt0aGlzLmZvY3VzRW5kKCl9fTsKPC9zY3JpcHQ+CgoKPHNjcmlwdD4vL35+V0VCUEFUSH5+L3ZhYWRpbi1ncmlkL3ZhYWRpbi1ncmlkLXRhYmxlLWhlYWRlci1mb290ZXIuaHRtbC5qcwooZnVuY3Rpb24oKXt2YXIgYT17cHJvcGVydGllczp7Y29sdW1uVHJlZTpBcnJheSx0YXJnZXQ6T2JqZWN0LF9yb3dzOkFycmF5fSxvYnNlcnZlcnM6WyJfY29sdW1uVHJlZUNoYW5nZWQoY29sdW1uVHJlZSwgdGFyZ2V0KSIsIl9yb3dzQ2hhbmdlZChfcm93cykiXSxfY29sdW1uVHJlZUNoYW5nZWQ6ZnVuY3Rpb24oYyxkKXtpZih2b2lkIDAhPT1jJiZ2b2lkIDAhPT1kKXt0aGlzLl9yb3dzJiZ0aGlzLl9yb3dzLmZvckVhY2goZnVuY3Rpb24oayl7UG9seW1lci5kb20oaykuaW5uZXJIVE1MPSIifSk7Zm9yKHZhciBmPVtdLGc9MDtnPGMubGVuZ3RoO2crKyl7dmFyIGw9dGhpcy5fY3JlYXRlUm93KCk7bC50YXJnZXQ9ZDtsLl9pc0NvbHVtblJvdz1nPT1jLmxlbmd0aC0xO2wuY29sdW1ucz1jW2ddO2YucHVzaChsKX10aGlzLl9yb3dzPSJ2YWFkaW4tZ3JpZC10YWJsZS1oZWFkZXIiPT09dGhpcy5sb2NhbE5hbWU/ZjpmLnJldmVyc2UoKX19LF9yb3dzQ2hhbmdlZDpmdW5jdGlvbihjKXtQb2x5bWVyLmRvbSh0aGlzKS5pbm5lckhUTUw9CiIiO2MuZm9yRWFjaChmdW5jdGlvbihkKXtQb2x5bWVyLmRvbSh0aGlzKS5hcHBlbmRDaGlsZChkKX0uYmluZCh0aGlzKSl9fTtQb2x5bWVyKHtpczoidmFhZGluLWdyaWQtdGFibGUtaGVhZGVyIixiZWhhdmlvcnM6W2EsdmFhZGluLmVsZW1lbnRzLmdyaWQuRm9jdXNhYmxlQ2VsbENvbnRhaW5lckJlaGF2aW9yXSxfY3JlYXRlUm93OmZ1bmN0aW9uKCl7cmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInZhYWRpbi1ncmlkLXRhYmxlLWhlYWRlci1yb3ciKX19KTtQb2x5bWVyKHtpczoidmFhZGluLWdyaWQtdGFibGUtYm9keSIsYmVoYXZpb3JzOlt2YWFkaW4uZWxlbWVudHMuZ3JpZC5Gb2N1c2FibGVDZWxsQ29udGFpbmVyQmVoYXZpb3JdLG9ic2VydmVyczpbIl9hbm5vdW5jZUZvY3VzZWRSb3coX2ZvY3VzZWRSb3cpIl0sX2Fubm91bmNlRm9jdXNlZFJvdzpmdW5jdGlvbihjKXt0aGlzLmZpcmUoImlyb24tYW5ub3VuY2UiLHt0ZXh0OiJSb3cgIisoYy5pbmRleCsxKSsiIG9mICIrCnRoaXMuZG9tSG9zdC5zaXplfSl9LF9tb3ZlRm9jdXNUb0RldGFpbHNDZWxsOmZ1bmN0aW9uKCl7dGhpcy5fZm9jdXNlZENlbGwuZm9jdXNlZD0hMTt0aGlzLl9mb2N1c2VkUm93Ll9yb3dEZXRhaWxzQ2VsbC5mb2N1c2VkPSEwO3RoaXMuX2ZvY3VzZWRDZWxsPXRoaXMuX2ZvY3VzZWRSb3cuX3Jvd0RldGFpbHNDZWxsfSxfZm9jdXNlZFJvd0hhc0RldGFpbHNDZWxsOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2ZvY3VzZWRSb3cmJnRoaXMuX2ZvY3VzZWRSb3cuX3Jvd0RldGFpbHNDZWxsJiZ0aGlzLl9mb2N1c2VkQ2VsbCE9PXRoaXMuX2ZvY3VzZWRSb3cuX3Jvd0RldGFpbHNDZWxsfSxmb2N1c0Rvd246ZnVuY3Rpb24oKXt0aGlzLl9mb2N1c2VkUm93SGFzRGV0YWlsc0NlbGwoKT90aGlzLl9tb3ZlRm9jdXNUb0RldGFpbHNDZWxsKCk6dGhpcy5fZm9jdXNlZFJvd0luZGV4PU1hdGgubWluKHRoaXMuX2ZvY3VzZWRSb3dJbmRleCsxLHRoaXMuZG9tSG9zdC5zaXplLTEpfSxmb2N1c1VwOmZ1bmN0aW9uKCl7dGhpcy5fZm9jdXNlZFJvdyYmCnRoaXMuX2ZvY3VzZWRDZWxsPT09dGhpcy5fZm9jdXNlZFJvdy5fcm93RGV0YWlsc0NlbGw/dGhpcy5fZm9jdXNlZENlbGxDaGFuZ2VkKHRoaXMuX2ZvY3VzZWRSb3dJbmRleCx0aGlzLl9mb2N1c2VkQ2VsbEluZGV4KToodGhpcy5fZm9jdXNlZFJvd0luZGV4PU1hdGgubWF4KDAsdGhpcy5fZm9jdXNlZFJvd0luZGV4LTEpLHRoaXMuX2ZvY3VzZWRSb3dIYXNEZXRhaWxzQ2VsbCgpJiZ0aGlzLl9tb3ZlRm9jdXNUb0RldGFpbHNDZWxsKCkpfSxmb2N1c0xhc3Q6ZnVuY3Rpb24oKXt0aGlzLl9mb2N1c2VkUm93SW5kZXg9dGhpcy5kb21Ib3N0LnNpemUtMTt0aGlzLmZvY3VzRW5kKCl9LF9mb2N1c2VkQ2VsbENoYW5nZWQ6ZnVuY3Rpb24oYyxkKXt2b2lkIDAhPT1jJiZ2b2lkIDAhPT1kJiZBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKFBvbHltZXIuZG9tKHRoaXMpLmNoaWxkcmVuLGZ1bmN0aW9uKGYpe2YuZm9jdXNlZD1mLmluZGV4PT09YztmLmluZGV4PT09YyYmKHRoaXMuX2ZvY3VzZWRSb3c9CmYsdGhpcy5fZm9jdXNlZENlbGw9Zi5jaGlsZHJlbltkXSk7Zi5pdGVyYXRlQ2VsbHMoZnVuY3Rpb24oZyxsKXtnLmZvY3VzZWQ9bD09PWR9KX0uYmluZCh0aGlzKSl9fSk7UG9seW1lcih7aXM6InZhYWRpbi1ncmlkLXRhYmxlLWZvb3RlciIsYmVoYXZpb3JzOlthLHZhYWRpbi5lbGVtZW50cy5ncmlkLkZvY3VzYWJsZUNlbGxDb250YWluZXJCZWhhdmlvcl0sX2NyZWF0ZVJvdzpmdW5jdGlvbigpe3JldHVybiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ2YWFkaW4tZ3JpZC10YWJsZS1mb290ZXItcm93Iil9fSl9KSgpOwo8L3NjcmlwdD4KCgoKCjxkb20tbW9kdWxlIGlkPSJ2YWFkaW4tZ3JpZC10YWJsZS1mb2N1cy10cmFwIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgOmhvc3QgewogICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgei1pbmRleDogLTM7CiAgICAgICBoZWlnaHQ6IDA7CiAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgIH0KCiAgICAgOmhvc3QoOmZvY3VzKSwKICAgICAucHJpbWFyeTpmb2N1cywKICAgICA6OnNsb3R0ZWQoLnByaW1hcnk6Zm9jdXMpLAogICAgIC5zZWNvbmRhcnk6Zm9jdXMsCiAgICAgOjpzbG90dGVkKC5zZWNvbmRhcnk6Zm9jdXMpIHsKICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgfQogICAgPC9zdHlsZT4KCiAgICAKICAgIDxkaXYgY2xhc3M9InByaW1hcnkiIHRhYmluZGV4PSIwIiByb2xlPSJncmlkY2VsbCIgb24tZm9jdXM9Il9vbkJhaXRGb2N1cyIgb24tYmx1cj0iX29uQmFpdEJsdXIiPjxkaXYgYXJpYS1oaWRkZW49InRydWUiPiZuYnNwOzwvZGl2PjwvZGl2PgogICAgPGRpdiBjbGFzcz0ic2Vjb25kYXJ5IiB0YWJpbmRleD0iLTEiIHJvbGU9ImdyaWRjZWxsIiBvbi1mb2N1cz0iX29uQmFpdEZvY3VzIiBvbi1ibHVyPSJfb25CYWl0Qmx1ciI+PGRpdiBhcmlhLWhpZGRlbj0idHJ1ZSI+Jm5ic3A7PC9kaXY+PC9kaXY+CgogICAgPHNsb3Q+PC9zbG90PgogIDwvdGVtcGxhdGU+CiAgPHNjcmlwdD4vL35+V0VCUEFUSH5+L3ZhYWRpbi1ncmlkL3ZhYWRpbi1ncmlkLXRhYmxlLWZvY3VzLXRyYXAuaHRtbC5qcwpQb2x5bWVyKHtpczoidmFhZGluLWdyaWQtdGFibGUtZm9jdXMtdHJhcCIsaG9zdEF0dHJpYnV0ZXM6e3JvbGU6ImdyaWRjZWxsIn0scHJvcGVydGllczp7YWN0aXZlVGFyZ2V0Ont0eXBlOlN0cmluZyxvYnNlcnZlcjoiX2FjdGl2ZVRhcmdldENoYW5nZWQifX0scmVhZHk6ZnVuY3Rpb24oKXt0aGlzLl9wcmltYXJ5PVBvbHltZXIuZG9tKHRoaXMucm9vdCkucXVlcnlTZWxlY3RvcigiLnByaW1hcnkiKTt0aGlzLl9zZWNvbmRhcnk9UG9seW1lci5kb20odGhpcy5yb290KS5xdWVyeVNlbGVjdG9yKCIuc2Vjb25kYXJ5Iik7aWYoUG9seW1lci5TZXR0aW5ncy51c2VOYXRpdmVTaGFkb3d8fFBvbHltZXIuU2V0dGluZ3MudXNlU2hhZG93KVBvbHltZXIuZG9tKHRoaXMpLmFwcGVuZENoaWxkKHRoaXMuX3NlY29uZGFyeSksUG9seW1lci5kb20odGhpcykuYXBwZW5kQ2hpbGQodGhpcy5fcHJpbWFyeSl9LGZvY3VzOmZ1bmN0aW9uKCl7dGhpcy5fZm9jdXNlZCE9PXRoaXMuX3ByaW1hcnk/dGhpcy5fcHJpbWFyeS5mb2N1cygpOgp0aGlzLl9zZWNvbmRhcnkuZm9jdXMoKX0sX29uQmFpdEZvY3VzOmZ1bmN0aW9uKGEpe3RoaXMuX2ZvY3VzZWQ9YS50YXJnZXQ7dGhpcy5fbW92aW5nRm9jdXNJbnRlcm5hbGx5fHwodGhpcy5maXJlKCJmb2N1cy1nYWluZWQiKSx0aGlzLl9wcmltYXJ5LnRhYkluZGV4PS0xKX0sX29uQmFpdEJsdXI6ZnVuY3Rpb24oKXt0aGlzLl9tb3ZpbmdGb2N1c0ludGVybmFsbHl8fCh0aGlzLmZpcmUoImZvY3VzLWxvc3QiKSx0aGlzLl9wcmltYXJ5LnRhYkluZGV4PTApfSxfYWN0aXZlVGFyZ2V0Q2hhbmdlZDpmdW5jdGlvbihhKXt0aGlzLl9tb3ZpbmdGb2N1c0ludGVybmFsbHk9ITA7dGhpcy5fZm9jdXNlZD09PXRoaXMuX3ByaW1hcnk/KHRoaXMuX3NlY29uZGFyeS5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWxsZWRieSIsYSksdGhpcy5fc2Vjb25kYXJ5LmZvY3VzKCkpOih0aGlzLl9wcmltYXJ5LnNldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbGxlZGJ5IixhKSx0aGlzLl9wcmltYXJ5LmZvY3VzKCkpOwp0aGlzLl9tb3ZpbmdGb2N1c0ludGVybmFsbHk9ITF9LF9yZWFubm91bmNlOmZ1bmN0aW9uKCl7dGhpcy5fbW92aW5nRm9jdXNJbnRlcm5hbGx5PSEwO3RoaXMuX2ZvY3VzZWQ9PT10aGlzLl9wcmltYXJ5Pyh0aGlzLl9zZWNvbmRhcnkuc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsbGVkYnkiLHRoaXMuYWN0aXZlVGFyZ2V0KSx0aGlzLl9zZWNvbmRhcnkuZm9jdXMoKSk6KHRoaXMuX3ByaW1hcnkuc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsbGVkYnkiLHRoaXMuYWN0aXZlVGFyZ2V0KSx0aGlzLl9wcmltYXJ5LmZvY3VzKCkpO3RoaXMuX21vdmluZ0ZvY3VzSW50ZXJuYWxseT0hMX19KTsKPC9zY3JpcHQ+CjwvZG9tLW1vZHVsZT4KCgoKPGRvbS1tb2R1bGUgaWQ9InZhYWRpbi1ncmlkLXRhYmxlLXJvdyI+PC9kb20tbW9kdWxlPgo8ZG9tLW1vZHVsZSBpZD0idmFhZGluLWdyaWQtdGFibGUtaGVhZGVyLXJvdyI+PC9kb20tbW9kdWxlPgoKPHNjcmlwdD4vL35+V0VCUEFUSH5+L3ZhYWRpbi1ncmlkL3ZhYWRpbi1ncmlkLXRhYmxlLXJvdy5odG1sLmpzCihmdW5jdGlvbigpe3ZhciBhPXtwcm9wZXJ0aWVzOnthY3RpdmU6e3R5cGU6Qm9vbGVhbixyZWZsZWN0VG9BdHRyaWJ1dGU6ITAsdmFsdWU6ITF9LGNvbHVtbnM6QXJyYXksaW5kZXg6TnVtYmVyLGNlbGxzOnt2YWx1ZTpbXX0sdGFyZ2V0Ok9iamVjdCxleHBhbmRlZDp7dmFsdWU6ITF9LGZvY3VzZWQ6e3R5cGU6Qm9vbGVhbixyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9LGl0ZW06T2JqZWN0LHNlbGVjdGVkOntyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9LF9yb3dEZXRhaWxzQ2VsbDpPYmplY3Qscm93RGV0YWlsc1RlbXBsYXRlOk9iamVjdH0sb2JzZXJ2ZXJzOiJfY29sdW1uc0NoYW5nZWQoY29sdW1ucywgdGFyZ2V0KTtfaW5kZXhDaGFuZ2VkKGluZGV4LCBjZWxscyk7X2l0ZW1DaGFuZ2VkKGl0ZW0sIGNlbGxzKTtfaXRlbUNoYW5nZWRGb3JEZXRhaWxzKGl0ZW0sIF9yb3dEZXRhaWxzQ2VsbCk7X3Jvd0RldGFpbHNDaGFuZ2VkKGV4cGFuZGVkLCByb3dEZXRhaWxzVGVtcGxhdGUsIHRhcmdldCk7X3Jvd0RldGFpbHNDZWxsSW5kZXhDaGFuZ2VkKF9yb3dEZXRhaWxzQ2VsbCwgaW5kZXgpO19yb3dEZXRhaWxzQ2VsbENoYW5nZWQoX3Jvd0RldGFpbHNDZWxsLCB0YXJnZXQpO19zZWxlY3RlZENoYW5nZWQoc2VsZWN0ZWQsIGNlbGxzKTtfc2VsZWN0ZWRDaGFuZ2VkRm9yRGV0YWlscyhzZWxlY3RlZCwgX3Jvd0RldGFpbHNDZWxsKSIuc3BsaXQoIjsiKSwKcmVhZHk6ZnVuY3Rpb24oKXt0aGlzLmNsYXNzTGlzdC5hZGQoInZhYWRpbi1ncmlkLXJvdyIpOyExPT09UG9seW1lci5TZXR0aW5ncy51c2VTaGFkb3cmJih0aGlzLmNsYXNzTGlzdC5hZGQoInN0eWxlLXNjb3BlIiksdGhpcy5jbGFzc0xpc3QuYWRkKCJ2YWFkaW4tZ3JpZCIpKX0saXRlcmF0ZUNlbGxzOmZ1bmN0aW9uKGMpe3RoaXMuY2VsbHMuZm9yRWFjaChjKTt0aGlzLl9yb3dEZXRhaWxzQ2VsbCYmYyh0aGlzLl9yb3dEZXRhaWxzQ2VsbCl9LF9yb3dEZXRhaWxzQ2hhbmdlZDpmdW5jdGlvbihjLGQsZil7aWYodm9pZCAwIT09YyYmdm9pZCAwIT09ZCYmdm9pZCAwIT09Zil7aWYoYyl7dmFyIGc9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidmFhZGluLWdyaWQtdGFibGUtY2VsbCIpO2cuc2V0QXR0cmlidXRlKCJkZXRhaWxzY2VsbCIsITApO2cuZnJvemVuPSEwO2cudGFyZ2V0PWY7Zy50ZW1wbGF0ZT1kO2cudG9nZ2xlQXR0cmlidXRlKCJsYXN0Y29sdW1uIiwhMCk7UG9seW1lci5kb20odGhpcy5yb290KS5hcHBlbmRDaGlsZChnKTsKUG9seW1lci5kb20uZmx1c2goKTt0aGlzLl9yb3dEZXRhaWxzQ2VsbD1nfWVsc2UgdGhpcy5fcm93RGV0YWlsc0NlbGwmJihQb2x5bWVyLmRvbSh0aGlzLnJvb3QpLnJlbW92ZUNoaWxkKHRoaXMuX3Jvd0RldGFpbHNDZWxsKSx0aGlzLl9yb3dEZXRhaWxzQ2VsbD1udWxsKTt0aGlzLml0ZXJhdGVDZWxscyhmdW5jdGlvbihsKXtsLmV4cGFuZGVkPWN9KTt0aGlzLnRhcmdldC4kLnNjcm9sbGVyLl9mcm96ZW5DZWxsc0NoYW5nZWQoKX19LF91cGRhdGVSb3dWaXNpYmlsaXR5OmZ1bmN0aW9uKCl7dGhpcy5oaWRkZW49dGhpcy5jZWxscy5ldmVyeShmdW5jdGlvbihjKXtyZXR1cm4gYy5faXNFbXB0eX0pfSxfcm93RGV0YWlsc0NlbGxDaGFuZ2VkOmZ1bmN0aW9uKGMsZCl7dm9pZCAwIT09YyYmdm9pZCAwIT09ZCYmZC4kLnNjcm9sbGVyLl91cGRhdGUoKX0sX3Jvd0RldGFpbHNDZWxsSW5kZXhDaGFuZ2VkOmZ1bmN0aW9uKGMsZCl7dm9pZCAwIT09YyYmdm9pZCAwIT09ZCYmKGM/KGMuaW5kZXg9CmQsUG9seW1lci5kb20uZmx1c2goKSx0aGlzLnVwZGF0ZVJvd0RldGFpbHNDZWxsTWV0cmljcygpKTp0aGlzLnN0eWxlLnBhZGRpbmdCb3R0b209IiIpfSx1cGRhdGVSb3dEZXRhaWxzQ2VsbE1ldHJpY3M6ZnVuY3Rpb24oKXt0aGlzLl9yb3dEZXRhaWxzQ2VsbCYmKHRoaXMudGFyZ2V0JiZ0aGlzLnRhcmdldC5fb2JzZXJ2ZXImJnRoaXMudGFyZ2V0Ll9vYnNlcnZlci5mbHVzaCYmdGhpcy50YXJnZXQuX29ic2VydmVyLmZsdXNoKCksdGhpcy5fcm93RGV0YWlsc0NlbGwuc3R5bGUuaGVpZ2h0PSIiLHRoaXMuc3R5bGUucGFkZGluZ0JvdHRvbT10aGlzLl9yb3dEZXRhaWxzQ2VsbC5zdHlsZS5oZWlnaHQ9dGhpcy5fcm93RGV0YWlsc0NlbGwuY2xpZW50SGVpZ2h0KyJweCIpfSxfY29sdW1uc0NoYW5nZWQ6ZnVuY3Rpb24oYyxkKXtpZih2b2lkIDAhPT1jJiZ2b2lkIDAhPT1kKXtQb2x5bWVyLmRvbSh0aGlzKS5pbm5lckhUTUw9IiI7dmFyIGY9W107Yy5mb3JFYWNoKGZ1bmN0aW9uKGcpe3ZhciBsPQoiXyIrdGhpcy5pcy5yZXBsYWNlKC8tL2csIl8iKSsiX2NlbGxzIjtsPWdbbF09Z1tsXXx8W107dmFyIGs9bC5maWx0ZXIoZnVuY3Rpb24ocCl7cmV0dXJuIVBvbHltZXIuZG9tKHApLnBhcmVudE5vZGV9KVswXTtpZighayl7az10aGlzLl9jcmVhdGVDZWxsKCk7dmFyIG09QXJyYXkucHJvdG90eXBlLnNvbWUuY2FsbCh0aGlzLnRhcmdldC5xdWVyeVNlbGVjdG9yQWxsKCJkb20tcmVwZWF0IiksZnVuY3Rpb24ocCl7cmV0dXJuIXAucmVzdGFtcH0pOyhtPW18fCJ2YWFkaW4tZ3JpZC10YWJsZS1oZWFkZXItcm93Ij09PXRoaXMuaXN8fCJ2YWFkaW4tZ3JpZC10YWJsZS1mb290ZXItcm93Ij09PXRoaXMuaXMpfHxsLnB1c2goayl9ay5pbmRleD10aGlzLmluZGV4O2sudGFyZ2V0PXRoaXMudGFyZ2V0O2suX2lzQ29sdW1uUm93PXRoaXMuX2lzQ29sdW1uUm93O2suY29sdW1uPWc7ay5leHBhbmRlZD10aGlzLmV4cGFuZGVkO1BvbHltZXIuZG9tKHRoaXMpLmFwcGVuZENoaWxkKGspO2YucHVzaChrKX0uYmluZCh0aGlzKSk7CnRoaXMuY2VsbHM9Zn19LF9pbmRleENoYW5nZWQ6ZnVuY3Rpb24oYyxkKXt2b2lkIDAhPT1jJiZ2b2lkIDAhPT1kJiZkLmZvckVhY2goZnVuY3Rpb24oZil7Zi5pbmRleD1jfSl9LF9pdGVtQ2hhbmdlZDpmdW5jdGlvbihjLGQpe3ZvaWQgMCE9PWMmJnZvaWQgMCE9PWQmJmQuZm9yRWFjaChmdW5jdGlvbihmKXtmLml0ZW09Y30pfSxfaXRlbUNoYW5nZWRGb3JEZXRhaWxzOmZ1bmN0aW9uKGMsZCl7dm9pZCAwIT09YyYmdm9pZCAwIT09ZCYmZCYmKGQuaXRlbT1jKX0sX3NlbGVjdGVkQ2hhbmdlZDpmdW5jdGlvbihjLGQpe3ZvaWQgMCE9PWMmJnZvaWQgMCE9PWQmJmQuZm9yRWFjaChmdW5jdGlvbihmKXtmLnNlbGVjdGVkPWN9KX0sX3NlbGVjdGVkQ2hhbmdlZEZvckRldGFpbHM6ZnVuY3Rpb24oYyxkKXt2b2lkIDAhPT1jJiZ2b2lkIDAhPT1kJiZkJiYoZC5zZWxlY3RlZD1jKX0sdXBkYXRlTGFzdENvbHVtbjpmdW5jdGlvbigpe3RoaXMuY2VsbHMuc2xpY2UoMCkuc29ydChmdW5jdGlvbihjLApkKXtyZXR1cm4gYy5jb2x1bW4uX29yZGVyLWQuY29sdW1uLl9vcmRlcn0pLmZvckVhY2goZnVuY3Rpb24oYyxkLGYpe2MudG9nZ2xlQXR0cmlidXRlKCJsYXN0Y29sdW1uIixkPT09Zi5sZW5ndGgtMSl9KX19O1BvbHltZXIoe2lzOiJ2YWFkaW4tZ3JpZC10YWJsZS1yb3ciLGJlaGF2aW9yczpbYV0sX2NyZWF0ZUNlbGw6ZnVuY3Rpb24oKXtyZXR1cm4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidmFhZGluLWdyaWQtdGFibGUtY2VsbCIpfX0pO1BvbHltZXIoe2lzOiJ2YWFkaW4tZ3JpZC10YWJsZS1oZWFkZXItcm93IixiZWhhdmlvcnM6W2FdLG9ic2VydmVyczpbIl91cGRhdGVSb3dWaXNpYmlsaXR5KGNvbHVtbnMpIl0sbGlzdGVuZXJzOnsiY2VsbC1lbXB0eS1jaGFuZ2VkIjoiX3VwZGF0ZVJvd1Zpc2liaWxpdHkifSxfY3JlYXRlQ2VsbDpmdW5jdGlvbigpe3JldHVybiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ2YWFkaW4tZ3JpZC10YWJsZS1oZWFkZXItY2VsbCIpfX0pO1BvbHltZXIoe2lzOiJ2YWFkaW4tZ3JpZC10YWJsZS1mb290ZXItcm93IiwKYmVoYXZpb3JzOlthXSxvYnNlcnZlcnM6WyJfdXBkYXRlUm93VmlzaWJpbGl0eShjb2x1bW5zKSJdLGxpc3RlbmVyczp7ImNlbGwtZW1wdHktY2hhbmdlZCI6Il91cGRhdGVSb3dWaXNpYmlsaXR5In0sX2NyZWF0ZUNlbGw6ZnVuY3Rpb24oKXtyZXR1cm4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidmFhZGluLWdyaWQtdGFibGUtZm9vdGVyLWNlbGwiKX19KX0pKCk7Cjwvc2NyaXB0PgoKCgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdmFhZGluLWdyaWQvdmFhZGluLWdyaWQtdGVtcGxhdGl6ZXIuaHRtbC5qcwp3aW5kb3cudmFhZGluPXdpbmRvdy52YWFkaW58fHt9O3ZhYWRpbi5lbGVtZW50cz12YWFkaW4uZWxlbWVudHN8fHt9O3ZhYWRpbi5lbGVtZW50cy5ncmlkPXZhYWRpbi5lbGVtZW50cy5ncmlkfHx7fTt2YWFkaW4uZWxlbWVudHMuZ3JpZC5UZW1wbGF0aXplcj1mdW5jdGlvbigpe307CnZhYWRpbi5lbGVtZW50cy5ncmlkLlRlbXBsYXRpemVyPVBvbHltZXIoe2lzOiJ2YWFkaW4tZ3JpZC10ZW1wbGF0aXplciIsYmVoYXZpb3JzOltQb2x5bWVyLlRlbXBsYXRpemVyXSxwcm9wZXJ0aWVzOntkYXRhSG9zdDpPYmplY3QsdGVtcGxhdGU6T2JqZWN0LF90ZW1wbGF0ZUluc3RhbmNlczp7dHlwZTpBcnJheSx2YWx1ZTpmdW5jdGlvbigpe3JldHVybltdfX0sX3BhcmVudFBhdGhWYWx1ZXM6e3ZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJue319fX0sb2JzZXJ2ZXJzOlsiX3RlbXBsYXRlSW5zdGFuY2VzQ2hhbmdlZChfdGVtcGxhdGVJbnN0YW5jZXMuKiwgX3BhcmVudFBhdGhWYWx1ZXMuKikiXSxjcmVhdGVkOmZ1bmN0aW9uKCl7dGhpcy5fcGFyZW50TW9kZWw9ITA7dGhpcy5faW5zdGFuY2VQcm9wcz17ZXhwYW5kZWQ6ITAsaW5kZXg6ITAsaXRlbTohMCxzZWxlY3RlZDohMH19LGNyZWF0ZUluc3RhbmNlOmZ1bmN0aW9uKCl7dGhpcy5fZW5zdXJlVGVtcGxhdGl6ZWQoKTt2YXIgYT10aGlzLnN0YW1wKHt9KTsKdGhpcy5hZGRJbnN0YW5jZShhKTtyZXR1cm4gYX0sYWRkSW5zdGFuY2U6ZnVuY3Rpb24oYSl7LTE9PT10aGlzLl90ZW1wbGF0ZUluc3RhbmNlcy5pbmRleE9mKGEpJiZ0aGlzLnB1c2goIl90ZW1wbGF0ZUluc3RhbmNlcyIsYSl9LHJlbW92ZUluc3RhbmNlOmZ1bmN0aW9uKGEpe3RoaXMuc3BsaWNlKCJfdGVtcGxhdGVJbnN0YW5jZXMiLHRoaXMuX3RlbXBsYXRlSW5zdGFuY2VzLmluZGV4T2YoYSksMSl9LF9lbnN1cmVUZW1wbGF0aXplZDpmdW5jdGlvbigpe3RoaXMudGVtcGxhdGUuX3RlbXBsYXRpemVkfHwodGhpcy50ZW1wbGF0ZS5fdGVtcGxhdGl6ZWQ9ITAsdGhpcy50ZW1wbGF0aXplKHRoaXMudGVtcGxhdGUpLHRoaXMuX3BhcmVudFByb3BzPXRoaXMuX3BhcmVudFByb3BzfHx7fSxQb2x5bWVyLkVsZW1lbnR8fE9iamVjdC5rZXlzKHRoaXMuX3BhcmVudFByb3BzKS5mb3JFYWNoKGZ1bmN0aW9uKCl7fSx0aGlzKSl9LF9mb3J3YXJkSW5zdGFuY2VQcm9wOmZ1bmN0aW9uKGEsYyxkKXt2b2lkIDAhPT0KYVsiX18iK2MrIl9fIl0mJmFbIl9fIitjKyJfXyJdIT09ZCYmdGhpcy5maXJlKCJ0ZW1wbGF0ZS1pbnN0YW5jZS1jaGFuZ2VkIix7cHJvcDpjLHZhbHVlOmQsaW5zdDphfSl9LF9mb3J3YXJkSW5zdGFuY2VQYXRoOmZ1bmN0aW9uKGEsYyxkKXswIT09Yy5pbmRleE9mKCJpdGVtLiIpfHx0aGlzLl9zdXBwcmVzc0l0ZW1DaGFuZ2VFdmVudHx8dGhpcy5maXJlKCJpdGVtLWNoYW5nZWQiLHtpdGVtOmEuaXRlbSxwYXRoOmMuc3Vic3RyaW5nKDUpLHZhbHVlOmR9KX0sX25vdGlmeUluc3RhbmNlUHJvcFYyOmZ1bmN0aW9uKGEsYyxkKXt0aGlzLl9mb3J3YXJkSW5zdGFuY2VQcm9wKGEsYyxkKTt0aGlzLl9mb3J3YXJkSW5zdGFuY2VQYXRoKGEsYyxkKX0sX2ZvcndhcmRQYXJlbnRQcm9wOmZ1bmN0aW9uKGEsYyl7dGhpcy5fcGFyZW50UGF0aFZhbHVlc1thXT1jO3RoaXMuX3RlbXBsYXRlSW5zdGFuY2VzLmZvckVhY2goZnVuY3Rpb24oZCl7ZC5zZXQoYSxjKX0sdGhpcyl9LF9mb3J3YXJkUGFyZW50UGF0aDpmdW5jdGlvbihhLApjKXt0aGlzLnNldChbIl9wYXJlbnRQYXRoVmFsdWVzIixhXSxjKTt0aGlzLl90ZW1wbGF0ZUluc3RhbmNlcy5mb3JFYWNoKGZ1bmN0aW9uKGQpe2Qubm90aWZ5UGF0aChhLGMpfSx0aGlzKX0sX2ZvcndhcmRIb3N0UHJvcFYyOmZ1bmN0aW9uKGEsYyl7dGhpcy5fZm9yd2FyZFBhcmVudFByb3AoYSxjKTt0aGlzLl90ZW1wbGF0ZUluc3RhbmNlcyYmdGhpcy5fdGVtcGxhdGVJbnN0YW5jZXMuZm9yRWFjaChmdW5jdGlvbihkKXtkLm5vdGlmeVBhdGgoYSxjKX0sdGhpcyl9LF90ZW1wbGF0ZUluc3RhbmNlc0NoYW5nZWQ6ZnVuY3Rpb24oYSl7aWYoIl90ZW1wbGF0ZUluc3RhbmNlcyI9PT1hLnBhdGgpe3ZhciBjPTA7dmFyIGQ9dGhpcy5fdGVtcGxhdGVJbnN0YW5jZXMubGVuZ3RofWVsc2UgaWYoIl90ZW1wbGF0ZUluc3RhbmNlcy5zcGxpY2VzIj09PWEucGF0aCljPWEudmFsdWUuaW5kZXgsZD1hLnZhbHVlLmFkZGVkQ291bnQ7ZWxzZSByZXR1cm47T2JqZWN0LmtleXModGhpcy5fcGFyZW50UGF0aFZhbHVlc3x8Cnt9KS5mb3JFYWNoKGZ1bmN0aW9uKGYpe2Zvcih2YXIgZz1jO2c8YytkO2crKyl0aGlzLl90ZW1wbGF0ZUluc3RhbmNlc1tnXS5zZXQoZix0aGlzLl9wYXJlbnRQYXRoVmFsdWVzW2ZdKX0sdGhpcyl9fSk7Cjwvc2NyaXB0PgoKCjxkb20tbW9kdWxlIGlkPSJ2YWFkaW4tZ3JpZC1yb3ctZGV0YWlscy1zdHlsZXMiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgW2RldGFpbHNjZWxsXSB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT4KPGRvbS1tb2R1bGUgaWQ9InZhYWRpbi1ncmlkLXJvdy1kZXRhaWxzLXRoZW1hYmlsaXR5LXN0eWxlcyI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICAudmFhZGluLWdyaWQtY2VsbFtkZXRhaWxzY2VsbF0gOjpzbG90dGVkKHZhYWRpbi1ncmlkLWNlbGwtY29udGVudCkgewogICAgICAgIGJhY2tncm91bmQ6ICNmZmY7CiAgICAgICAgQGFwcGx5KC0tdmFhZGluLWdyaWQtYm9keS1yb3ctZGV0YWlscy1jZWxsKTsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+CgoKPHNjcmlwdD4vL35+V0VCUEFUSH5+L3ZhYWRpbi1ncmlkL3ZhYWRpbi1ncmlkLXJvdy1kZXRhaWxzLWJlaGF2aW9yLmh0bWwuanMKd2luZG93LnZhYWRpbj13aW5kb3cudmFhZGlufHx7fTt2YWFkaW4uZWxlbWVudHM9dmFhZGluLmVsZW1lbnRzfHx7fTt2YWFkaW4uZWxlbWVudHMuZ3JpZD12YWFkaW4uZWxlbWVudHMuZ3JpZHx8e307CnZhYWRpbi5lbGVtZW50cy5ncmlkLlJvd0RldGFpbHNCZWhhdmlvcj17cHJvcGVydGllczp7ZXhwYW5kZWRJdGVtczp7dHlwZTpBcnJheSx2YWx1ZTpmdW5jdGlvbigpe3JldHVybltdfX19LGxpc3RlbmVyczp7InRlbXBsYXRlLWluc3RhbmNlLWNoYW5nZWQiOiJfdGVtcGxhdGVJbnN0YW5jZUNoYW5nZWRFeHBhbmRlZCJ9LG9ic2VydmVyczpbIl9leHBhbmRlZEl0ZW1zQ2hhbmdlZChleHBhbmRlZEl0ZW1zLiosIGRhdGFQcm92aWRlcikiLCJfcm93RGV0YWlsc1RlbXBsYXRlQ2hhbmdlZChfcm93RGV0YWlsc1RlbXBsYXRlKSJdLF9leHBhbmRlZEl0ZW1zQ2hhbmdlZDpmdW5jdGlvbihhLGMpe3ZvaWQgMCE9PWEmJnZvaWQgMCE9PWMmJih0aGlzLl9mbHVzaEl0ZW1zRGVib3VuY2VyKCksdGhpcy4kLnNjcm9sbGVyLl9waHlzaWNhbEl0ZW1zJiZ0aGlzLiQuc2Nyb2xsZXIuX3BoeXNpY2FsSXRlbXMuZm9yRWFjaChmdW5jdGlvbihkKXtkLmV4cGFuZGVkPXRoaXMuX2lzRXhwYW5kZWQoZC5pdGVtKX0uYmluZCh0aGlzKSkpfSwKX3Jvd0RldGFpbHNUZW1wbGF0ZUNoYW5nZWQ6ZnVuY3Rpb24oYSl7dmFyIGM9bmV3IHZhYWRpbi5lbGVtZW50cy5ncmlkLlRlbXBsYXRpemVyO2MuZGF0YUhvc3Q9dGhpcy5kYXRhSG9zdDtjLl9pbnN0YW5jZVByb3BzPXtleHBhbmRlZDohMCxpbmRleDohMCxpdGVtOiEwLHNlbGVjdGVkOiEwfTtQb2x5bWVyLmRvbSh0aGlzLnJvb3QpLmFwcGVuZENoaWxkKGMpO2MudGVtcGxhdGU9YTthLnRlbXBsYXRpemVyPWN9LF9pc0V4cGFuZGVkOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmV4cGFuZGVkSXRlbXMmJi0xIT09dGhpcy5leHBhbmRlZEl0ZW1zLmluZGV4T2YoYSl9LGV4cGFuZEl0ZW06ZnVuY3Rpb24oYSl7dGhpcy5faXNFeHBhbmRlZChhKXx8dGhpcy5wdXNoKCJleHBhbmRlZEl0ZW1zIixhKX0sY29sbGFwc2VJdGVtOmZ1bmN0aW9uKGEpe3RoaXMuX2lzRXhwYW5kZWQoYSkmJnRoaXMuc3BsaWNlKCJleHBhbmRlZEl0ZW1zIix0aGlzLmV4cGFuZGVkSXRlbXMuaW5kZXhPZihhKSwxKX0sCl90ZW1wbGF0ZUluc3RhbmNlQ2hhbmdlZEV4cGFuZGVkOmZ1bmN0aW9uKGEpeyJleHBhbmRlZCI9PT1hLmRldGFpbC5wcm9wJiYoYS5kZXRhaWwudmFsdWU/dGhpcy5leHBhbmRJdGVtKGEuZGV0YWlsLmluc3QuaXRlbSk6dGhpcy5jb2xsYXBzZUl0ZW0oYS5kZXRhaWwuaW5zdC5pdGVtKSxhLnN0b3BQcm9wYWdhdGlvbigpKX19Owo8L3NjcmlwdD4KCjxkb20tbW9kdWxlIGlkPSJ2YWFkaW4tZ3JpZC1kYXRhLXByb3ZpZGVyLXRoZW1hYmlsaXR5LXN0eWxlcyI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgoKICAgICAgLyogQW5pbSAqLwogICAgICBAa2V5ZnJhbWVzIHZhYWRpbi1ncmlkLXNwaW4tMzYwIHsKICAgICAgICAxMDAlIHsKICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7CiAgICAgICAgfQogICAgICB9CiAgICAgIEAtd2Via2l0LWtleWZyYW1lcyB2YWFkaW4tZ3JpZC1zcGluLTM2MCB7CiAgICAgICAgMTAwJSB7CiAgICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7CiAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgI3NwaW5uZXIgewogICAgICAgIGJvcmRlcjogMnB4IHNvbGlkIHZhcigtLXByaW1hcnktY29sb3IsICMwM0E5RjQpOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgICBib3JkZXItcmlnaHQtY29sb3I6IHRyYW5zcGFyZW50OwogICAgICAgIGJvcmRlci10b3AtY29sb3I6IHRyYW5zcGFyZW50OwogICAgICAgIGNvbnRlbnQ6ICIiOwogICAgICAgIGhlaWdodDogMTZweDsKICAgICAgICBsZWZ0OiA1MCU7CiAgICAgICAgbWFyZ2luLWxlZnQ6IC04cHg7CiAgICAgICAgbWFyZ2luLXRvcDogLThweDsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiA1MCU7CiAgICAgICAgd2lkdGg6IDE2cHg7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICBAYXBwbHkoLS12YWFkaW4tZ3JpZC1sb2FkaW5nLXNwaW5uZXIpOwogICAgICB9CgogICAgICA6aG9zdChbbG9hZGluZ10pICNzcGlubmVyIHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICAgIC13ZWJraXQtYW5pbWF0aW9uOiB2YWFkaW4tZ3JpZC1zcGluLTM2MCA0MDBtcyBsaW5lYXIgaW5maW5pdGU7CiAgICAgICAgYW5pbWF0aW9uOiB2YWFkaW4tZ3JpZC1zcGluLTM2MCA0MDBtcyBsaW5lYXIgaW5maW5pdGU7CiAgICAgIH0KCiAgICAgIDpob3N0KFtsb2FkaW5nXSkgI2l0ZW1zIHsKICAgICAgICBvcGFjaXR5OiAwLjU7CiAgICAgIH0KCiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT4KCgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdmFhZGluLWdyaWQvdmFhZGluLWdyaWQtZGF0YS1wcm92aWRlci1iZWhhdmlvci5odG1sLmpzCndpbmRvdy52YWFkaW49d2luZG93LnZhYWRpbnx8e307dmFhZGluLmVsZW1lbnRzPXZhYWRpbi5lbGVtZW50c3x8e307dmFhZGluLmVsZW1lbnRzLmdyaWQ9dmFhZGluLmVsZW1lbnRzLmdyaWR8fHt9Owp2YWFkaW4uZWxlbWVudHMuZ3JpZC5EYXRhUHJvdmlkZXJCZWhhdmlvcj17bGlzdGVuZXJzOnsiaXRlbS1jaGFuZ2VkIjoiX3RlbXBsYXRlSXRlbUNoYW5nZWQifSxwcm9wZXJ0aWVzOntwYWdlU2l6ZTp7dHlwZTpOdW1iZXIsdmFsdWU6NTAsb2JzZXJ2ZXI6Il9wYWdlU2l6ZUNoYW5nZWQifSxkYXRhUHJvdmlkZXI6e3R5cGU6T2JqZWN0LG5vdGlmeTohMCxvYnNlcnZlcjoiX2RhdGFQcm92aWRlckNoYW5nZWQifSxfbG9hZGluZzpCb29sZWFuLF9jYWNoZTp7dHlwZTpPYmplY3QsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm57fX19LF9wZW5kaW5nUmVxdWVzdHM6e3R5cGU6T2JqZWN0LHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJue319fX0sX3RlbXBsYXRlSXRlbUNoYW5nZWQ6ZnVuY3Rpb24oYSl7dmFyIGM9YS5kZXRhaWwuaXRlbTtBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKFBvbHltZXIuZG9tKHRoaXMuJC5pdGVtcykuY2hpbGRyZW4sZnVuY3Rpb24oZCl7ZC5pdGVtPT09YyYmZC5pdGVyYXRlQ2VsbHMoZnVuY3Rpb24oZil7Zi5fdGVtcGxhdGl6ZXIuX3N1cHByZXNzSXRlbUNoYW5nZUV2ZW50PQohMDtmLmluc3RhbmNlLm5vdGlmeVBhdGgoIml0ZW0uIithLmRldGFpbC5wYXRoLGEuZGV0YWlsLnZhbHVlKTtmLl90ZW1wbGF0aXplci5fc3VwcHJlc3NJdGVtQ2hhbmdlRXZlbnQ9ITF9KX0pfSxfZ2V0Q2FjaGVkSXRlbTpmdW5jdGlvbihhKXt2YXIgYz10aGlzLl9nZXRQYWdlRm9ySW5kZXgoYSksZD10aGlzLl9jYWNoZSYmdGhpcy5fY2FjaGVbY107cmV0dXJuIGQ/ZFthLWMqdGhpcy5wYWdlU2l6ZV06bnVsbH0sX2dldEl0ZW06ZnVuY3Rpb24oYSxjKXt0aGlzLl91cGRhdGVJdGVtKGMsdGhpcy5fZ2V0Q2FjaGVkSXRlbShhKSk7dGhpcy5fZWFnZXJseUxvYWRQYWdlcygpO3ZhciBkPXRoaXMuX3VuY2FjaGVkUGFnZXNGb3JQaHlzaWNhbEl0ZW1zKCk7MDxkLmxlbmd0aCYmKHRoaXMuX2xvYWRpbmc9ITAsdGhpcy5kZWJvdW5jZSgibG9hZCIsZnVuY3Rpb24oKXtkLmZvckVhY2goZnVuY3Rpb24oZil7dGhpcy5fbG9hZFBhZ2UoZil9LmJpbmQodGhpcykpfSwxMDApKX0sX2NhY2hlZFBhZ2VzRm9yUGh5c2ljYWxJdGVtczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wYWdlc0ZvclBoeXNpY2FsSXRlbXMoKS5maWx0ZXIoZnVuY3Rpb24oYSl7cmV0dXJuIHZvaWQgMCE9PQp0aGlzLl9jYWNoZSYmdm9pZCAwIT09dGhpcy5fY2FjaGVbYV19LmJpbmQodGhpcykpfSxfdW5jYWNoZWRQYWdlc0ZvclBoeXNpY2FsSXRlbXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcGFnZXNGb3JQaHlzaWNhbEl0ZW1zKCkuZmlsdGVyKGZ1bmN0aW9uKGEpe3JldHVybiB2b2lkIDAhPT10aGlzLl9jYWNoZSYmdm9pZCAwPT09dGhpcy5fY2FjaGVbYV19LmJpbmQodGhpcykpfSxfZWFnZXJseUxvYWRQYWdlczpmdW5jdGlvbigpe3ZhciBhPXRoaXMuX2NhY2hlZFBhZ2VzRm9yUGh5c2ljYWxJdGVtcygpLnNsaWNlKDApO2lmKDA8YS5sZW5ndGgpe2Euc29ydChmdW5jdGlvbihkLGYpe3JldHVybiBkPmZ9KTt2YXIgYz1NYXRoLm1pbihhW2EubGVuZ3RoLTFdKzEsTWF0aC5tYXgoMCxNYXRoLmZsb29yKHRoaXMuc2l6ZS90aGlzLnBhZ2VTaXplKS0xKSk7dGhpcy5fbG9hZFBhZ2UoTWF0aC5tYXgoMCxhWzBdLTEpKTt0aGlzLl9sb2FkUGFnZShjKX19LF9wYWdlc0ZvclBoeXNpY2FsSXRlbXM6ZnVuY3Rpb24oKXtyZXR1cm5bdGhpcy5fZ2V0UGFnZUZvckluZGV4KHRoaXMuJC5zY3JvbGxlci5maXJzdFZpc2libGVJbmRleCsKdGhpcy4kLnNjcm9sbGVyLl92aWR4T2Zmc2V0KV0uY29uY2F0KHRoaXMuJC5zY3JvbGxlci5fcGh5c2ljYWxJdGVtcy5maWx0ZXIoZnVuY3Rpb24oYSl7cmV0dXJuIGEuaW5kZXh9KS5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuX2dldFBhZ2VGb3JJbmRleChhLmluZGV4KX0uYmluZCh0aGlzKSkpLnJlZHVjZShmdW5jdGlvbihhLGMpey0xPT09YS5pbmRleE9mKGMpJiZhLnB1c2goYyk7cmV0dXJuIGF9LFtdKX0sX3VwZGF0ZUl0ZW1zOmZ1bmN0aW9uKGEsYyl7Zm9yKHZhciBkPTA7ZDx0aGlzLnBhZ2VTaXplO2QrKyl7dmFyIGY9dGhpcy4kLnNjcm9sbGVyLl92aXJ0dWFsSW5kZXhUb0l0ZW1bYSp0aGlzLnBhZ2VTaXplK2RdO2YmJih0aGlzLl91cGRhdGVJdGVtKGYsY1tkXSksdGhpcy5kZWJvdW5jZSgidXBkYXRlLWhlaWdodHMiLGZ1bmN0aW9uKCl7dGhpcy4kLnNjcm9sbGVyLl91cGRhdGVNZXRyaWNzKCk7dGhpcy4kLnNjcm9sbGVyLl9wb3NpdGlvbkl0ZW1zKCk7dGhpcy4kLnNjcm9sbGVyLl91cGRhdGVTY3JvbGxlclNpemUoKX0sCjEpKX19LF9sb2FkUGFnZTpmdW5jdGlvbihhLGMpe2M9Y3x8dGhpcy5fdXBkYXRlSXRlbXMuYmluZCh0aGlzKTtpZighdGhpcy5fY2FjaGVbYV0mJiF0aGlzLl9wZW5kaW5nUmVxdWVzdHNbYV0mJnRoaXMuZGF0YVByb3ZpZGVyKXt0aGlzLl9wZW5kaW5nUmVxdWVzdHNbYV09ITA7dmFyIGQ9e3BhZ2U6YSxwYWdlU2l6ZTp0aGlzLnBhZ2VTaXplLHNvcnRPcmRlcnM6dGhpcy5fbWFwU29ydGVycygpLGZpbHRlcnM6dGhpcy5fbWFwRmlsdGVycygpfTt0aGlzLmRhdGFQcm92aWRlcihkLGZ1bmN0aW9uKGYpe3RoaXMuX2NhY2hlW2FdPWY7ZGVsZXRlIHRoaXMuX3BlbmRpbmdSZXF1ZXN0c1thXTtjKGEsZik7dGhpcy5fbG9hZGluZz0wPHRoaXMuX3BlbmRpbmdSZXF1ZXN0cy5sZW5ndGg7dGhpcy5kZWJvdW5jZSgiY2hlY2stc2l6ZSIsdGhpcy5fY2hlY2tTaXplLDJFMyl9LmJpbmQodGhpcykpfX0sX2dldFBhZ2VGb3JJbmRleDpmdW5jdGlvbihhKXtyZXR1cm4gTWF0aC5mbG9vcihhL3RoaXMucGFnZVNpemUpfSwKY2xlYXJDYWNoZTpmdW5jdGlvbigpe3RoaXMuX2NhY2hlPXt9O3RoaXMuX3BlbmRpbmdSZXF1ZXN0cz17fTt0aGlzLiQuc2Nyb2xsZXIuaGFzRGF0YSYmdGhpcy4kLnNjcm9sbGVyLl91cGRhdGUoKTt0aGlzLl9mbHVzaEl0ZW1zRGVib3VuY2VyKCl9LF9mbHVzaEl0ZW1zRGVib3VuY2VyOmZ1bmN0aW9uKCl7dGhpcy5mbHVzaERlYm91bmNlcigibG9hZCIpfSxfcGFnZVNpemVDaGFuZ2VkOmZ1bmN0aW9uKGEsYyl7dm9pZCAwIT09YyYmYSE9PWMmJnRoaXMuY2xlYXJDYWNoZSgpfSxfY2hlY2tTaXplOmZ1bmN0aW9uKCl7dm9pZCAwPT09dGhpcy5zaXplJiZjb25zb2xlLndhcm4oJ1RoZSBceDNjdmFhZGluLWdyaWRceDNlIG5lZWRzIGEgdmFsdWUgZm9yICJzaXplIiBwcm9wZXJ0eSBpbiBvcmRlciB0byBkaXNwbGF5IHJvd3MuJyl9LF9kYXRhUHJvdmlkZXJDaGFuZ2VkOmZ1bmN0aW9uKGEsYyl7dm9pZCAwIT09YyYmdGhpcy5jbGVhckNhY2hlKCk7dGhpcy4kLnNjcm9sbGVyLmhhc0RhdGF8fAoodGhpcy5fbG9hZGluZz0hMCx0aGlzLl9sb2FkUGFnZSgwLGZ1bmN0aW9uKCl7dGhpcy4kLnNjcm9sbGVyLmhhc0RhdGE9ITB9LmJpbmQodGhpcykpKX19Owo8L3NjcmlwdD4KCjxzY3JpcHQ+Ly9+fldFQlBBVEh+fi92YWFkaW4tZ3JpZC92YWFkaW4tZ3JpZC1zZWxlY3Rpb24tYmVoYXZpb3IuaHRtbC5qcwp3aW5kb3cudmFhZGluPXdpbmRvdy52YWFkaW58fHt9O3ZhYWRpbi5lbGVtZW50cz12YWFkaW4uZWxlbWVudHN8fHt9O3ZhYWRpbi5lbGVtZW50cy5ncmlkPXZhYWRpbi5lbGVtZW50cy5ncmlkfHx7fTsKdmFhZGluLmVsZW1lbnRzLmdyaWQuU2VsZWN0aW9uQmVoYXZpb3I9e3Byb3BlcnRpZXM6e3NlbGVjdGVkSXRlbXM6e3R5cGU6T2JqZWN0LG5vdGlmeTohMCx2YWx1ZTpmdW5jdGlvbigpe3JldHVybltdfX19LG9ic2VydmVyczpbIl9zZWxlY3RlZEl0ZW1zQ2hhbmdlZChzZWxlY3RlZEl0ZW1zLiopIl0sbGlzdGVuZXJzOnsidGVtcGxhdGUtaW5zdGFuY2UtY2hhbmdlZCI6Il90ZW1wbGF0ZUluc3RhbmNlQ2hhbmdlZFNlbGVjdGlvbiJ9LF90ZW1wbGF0ZUluc3RhbmNlQ2hhbmdlZFNlbGVjdGlvbjpmdW5jdGlvbihhKXtpZigic2VsZWN0ZWQiPT09YS5kZXRhaWwucHJvcCl7dmFyIGM9YS5kZXRhaWwuaW5zdC5pdGVtOyh0aGlzLl9pc1NlbGVjdGVkKGMpP3RoaXMuZGVzZWxlY3RJdGVtOnRoaXMuc2VsZWN0SXRlbSkuYmluZCh0aGlzKShjKTt0aGlzLmZpcmUoImlyb24tYW5ub3VuY2UiLHt0ZXh0Oih0aGlzLl9pc1NlbGVjdGVkKGMpPyJTZWxlY3RlZCI6IkRlc2VsZWN0ZWQiKSsiIFJvdyAiKwooYS5kZXRhaWwuaW5zdC5pbmRleCsxKSsiIG9mICIrdGhpcy5zaXplfSk7YS5zdG9wUHJvcGFnYXRpb24oKX19LF9pc1NlbGVjdGVkOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnNlbGVjdGVkSXRlbXMmJi0xPHRoaXMuc2VsZWN0ZWRJdGVtcy5pbmRleE9mKGEpfSxzZWxlY3RJdGVtOmZ1bmN0aW9uKGEpe2E9dGhpcy5fdGFrZUl0ZW0oYSk7dGhpcy5faXNTZWxlY3RlZChhKXx8dGhpcy5wdXNoKCJzZWxlY3RlZEl0ZW1zIixhKX0sZGVzZWxlY3RJdGVtOmZ1bmN0aW9uKGEpe2E9dGhpcy5fdGFrZUl0ZW0oYSk7YT10aGlzLnNlbGVjdGVkSXRlbXMuaW5kZXhPZihhKTstMTxhJiZ0aGlzLnNwbGljZSgic2VsZWN0ZWRJdGVtcyIsYSwxKX0sX3RvZ2dsZUl0ZW06ZnVuY3Rpb24oYSl7YT10aGlzLl90YWtlSXRlbShhKTstMT09PXRoaXMuc2VsZWN0ZWRJdGVtcy5pbmRleE9mKGEpP3RoaXMuc2VsZWN0SXRlbShhKTp0aGlzLmRlc2VsZWN0SXRlbShhKX0sX3Rha2VJdGVtOmZ1bmN0aW9uKGEpe3JldHVybiJudW1iZXIiPT09CnR5cGVvZiBhJiYwPD1hJiZ0aGlzLml0ZW1zJiZ0aGlzLml0ZW1zLmxlbmd0aD5hP3RoaXMuaXRlbXNbYV06YX0sX3NlbGVjdGVkSXRlbXNDaGFuZ2VkOmZ1bmN0aW9uKGEpeyF0aGlzLiQuc2Nyb2xsZXIuX3BoeXNpY2FsSXRlbXN8fCJzZWxlY3RlZEl0ZW1zIiE9PWEucGF0aCYmInNlbGVjdGVkSXRlbXMuc3BsaWNlcyIhPT1hLnBhdGh8fHRoaXMuJC5zY3JvbGxlci5fcGh5c2ljYWxJdGVtcy5mb3JFYWNoKGZ1bmN0aW9uKGMpe2Muc2VsZWN0ZWQ9dGhpcy5faXNTZWxlY3RlZChjLml0ZW0pfS5iaW5kKHRoaXMpKX19Owo8L3NjcmlwdD4KCjxkb20tbW9kdWxlIGlkPSJ2YWFkaW4tZ3JpZC1zZWxlY3Rpb24tdGhlbWFiaWxpdHktc3R5bGVzIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIHZhYWRpbi1ncmlkLXRhYmxlIC52YWFkaW4tZ3JpZC1yb3dbc2VsZWN0ZWRdIC52YWFkaW4tZ3JpZC1jZWxsOm5vdChbZGV0YWlsc2NlbGxdKSA6OnNsb3R0ZWQodmFhZGluLWdyaWQtY2VsbC1jb250ZW50KSB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItZ3JleS0xMDAsIHJnYigyNDMsIDI0MywgMjQzKSk7CiAgICAgICAgQGFwcGx5KC0tdmFhZGluLWdyaWQtYm9keS1yb3ctc2VsZWN0ZWQtY2VsbCk7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPgoKCgoKPGRvbS1tb2R1bGUgaWQ9InZhYWRpbi1ncmlkLW5hdmlnYXRpb24tdGhlbWFiaWxpdHktc3R5bGVzIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0KDpmb2N1cyksCiAgICAgICN0YWJsZTpmb2N1cyB7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgfQoKICAgICAgOmhvc3QoW25hdmlnYXRpbmddOm5vdChbaW50ZXJhY3RpbmddKSkgW2ZvY3VzZWRdID4gLnZhYWRpbi1ncmlkLXJvd1tmb2N1c2VkXSA+IFtmb2N1c2VkXSA6OnNsb3R0ZWQodmFhZGluLWdyaWQtY2VsbC1jb250ZW50KSB7CiAgICAgICAgYm94LXNoYWRvdzogaW5zZXQgMCAwIDAgM3B4IHJnYmEoMCwgMCwgMCwgMC4zKTsKICAgICAgICBAYXBwbHkoLS12YWFkaW4tZ3JpZC1mb2N1c2VkLWNlbGwpOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT4KCjxzY3JpcHQ+Ly9+fldFQlBBVEh+fi92YWFkaW4tZ3JpZC92YWFkaW4tZ3JpZC1rZXlib2FyZC1uYXZpZ2F0aW9uLWJlaGF2aW9yLmh0bWwuanMKd2luZG93LnZhYWRpbj13aW5kb3cudmFhZGlufHx7fTt2YWFkaW4uZWxlbWVudHM9dmFhZGluLmVsZW1lbnRzfHx7fTt2YWFkaW4uZWxlbWVudHMuZ3JpZD12YWFkaW4uZWxlbWVudHMuZ3JpZHx8e307CnZhYWRpbi5lbGVtZW50cy5ncmlkLlRhYmxlS2V5Ym9hcmRCZWhhdmlvckltcGw9e2hvc3RBdHRyaWJ1dGVzOntyb2xlOiJhcHBsaWNhdGlvbiIsdGFiaW5kZXg6MH0sa2V5QmluZGluZ3M6eyJjdHJsK2hvbWUiOiJfb25DdHJsSG9tZSIsImN0cmwrZW5kIjoiX29uQ3RybEVuZCIsZG93bjoiX29uQXJyb3dEb3duIixlbmQ6Il9vbkVuZCIsZW50ZXI6Il9vbkVudGVyIixlc2M6Il9vbkVzY2FwZSIsZjI6Il9vbkYyIixob21lOiJfb25Ib21lIixsZWZ0OiJfb25BcnJvd0xlZnQiLHBhZ2Vkb3duOiJfb25QYWdlRG93biIscGFnZXVwOiJfb25QYWdlVXAiLHJpZ2h0OiJfb25BcnJvd1JpZ2h0IixzcGFjZToiX29uU3BhY2UiLHRhYjoiX29uVGFiIix1cDoiX29uQXJyb3dVcCJ9LGF0dGFjaGVkOmZ1bmN0aW9uKCl7UG9seW1lci5Jcm9uQTExeUFubm91bmNlci5yZXF1ZXN0QXZhaWxhYmlsaXR5KCl9LHByb3BlcnRpZXM6e192aXJ0dWFsRm9jdXM6e3R5cGU6T2JqZWN0LG9ic2VydmVyOiJfdmlydHVhbEZvY3VzQ2hhbmdlZCJ9LAppbnRlcmFjdGluZzp7dHlwZTpCb29sZWFuLHJlZmxlY3RUb0F0dHJpYnV0ZTohMCx2YWx1ZTohMX0sbmF2aWdhdGluZzp7dHlwZTpCb29sZWFuLHJlZmxlY3RUb0F0dHJpYnV0ZTohMCx2YWx1ZTohMX19LGxpc3RlbmVyczp7Zm9jdXM6Il9vbkZvY3VzIiwiY2VsbC1mb2N1cyI6Il9vbkNlbGxGb2N1cyIsImNlbGwtY29udGVudC1mb2N1cyI6Il9vbkNlbGxDb250ZW50Rm9jdXMifSxyZWFkeTpmdW5jdGlvbigpe2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLGZ1bmN0aW9uKGEpezk9PT1hLmtleUNvZGUmJih0aGlzLl90YWJiZWQ9ITApOzk9PT1hLmtleUNvZGUmJmEuc2hpZnRLZXkmJih0aGlzLl9zaGlmdFRhYmJlZD0hMCl9LmJpbmQodGhpcyksITApO2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImtleXVwIixmdW5jdGlvbihhKXs5PT09YS5rZXlDb2RlJiYodGhpcy5fdGFiYmVkPSExKTs5PT09YS5rZXlDb2RlJiZhLnNoaWZ0S2V5JiYodGhpcy5fc2hpZnRUYWJiZWQ9CiExKX0uYmluZCh0aGlzKSwhMCl9LF9pc0Zvb3RlclZpc2libGU6ZnVuY3Rpb24oKXtyZXR1cm4gMDx0aGlzLiQuZm9vdGVyLl9yb3dzLmZpbHRlcihmdW5jdGlvbihhKXtyZXR1cm4hYS5oaWRkZW59KS5sZW5ndGh9LF9vbkZvY3VzOmZ1bmN0aW9uKCl7dGhpcy5fdGFiYmVkJiYhdGhpcy5fc2hpZnRUYWJiZWQmJnRoaXMuX2FjdGl2YXRlTmF2aWdhdGlvbigpfSxfYWN0aXZhdGVOYXZpZ2F0aW9uOmZ1bmN0aW9uKCl7dGhpcy4kLmZvb3RlckZvY3VzVHJhcC5mb2N1cygpfSxfb25Gb2N1c291dDpmdW5jdGlvbigpe3RoaXMuaW50ZXJhY3Rpbmc9dGhpcy5uYXZpZ2F0aW5nPSExfSxfb25Gb290ZXJGb2N1czpmdW5jdGlvbigpe3RoaXMubmF2aWdhdGluZz0hMDt0aGlzLmludGVyYWN0aW5nPSExO3RoaXMuX3ZpcnR1YWxGb2N1cz10aGlzLl92aXJ0dWFsRm9jdXN8fCh0aGlzLl9zaGlmdFRhYmJlZD90aGlzLl9pc0Zvb3RlclZpc2libGUoKT90aGlzLiQuZm9vdGVyOnRoaXMuJC5pdGVtczoKdGhpcy4kLmhlYWRlcil9LF92aXJ0dWFsRm9jdXNDaGFuZ2VkOmZ1bmN0aW9uKGEsYyl7YyYmKGMuZm9jdXNlZD0hMSk7YSYmKGEuX2ZvY3VzZWRDZWxsSW5kZXg9YS5fZm9jdXNlZENlbGxJbmRleHx8MCxhLl9mb2N1c2VkUm93SW5kZXg9YS5fZm9jdXNlZFJvd0luZGV4fHwwLGEuZm9jdXNlZD0hMCxhPT09dGhpcy4kLml0ZW1zJiZ0aGlzLl9lbnN1cmVWaXJ0dWFsRm9jdXNJblZpZXdwb3J0KCkpfSxfb25UYWI6ZnVuY3Rpb24oYSl7aWYoIXRoaXMuaW50ZXJhY3RpbmcmJnRoaXMuX3ZpcnR1YWxGb2N1cylpZih0aGlzLm5hdmlnYXRpbmcpaWYoYS5kZXRhaWwua2V5Ym9hcmRFdmVudC5zaGlmdEtleSlzd2l0Y2godGhpcy5fdmlydHVhbEZvY3VzKXtjYXNlIHRoaXMuJC5mb290ZXI6dGhpcy5fdmlydHVhbEZvY3VzPXRoaXMuJC5pdGVtczthLnByZXZlbnREZWZhdWx0KCk7YnJlYWs7Y2FzZSB0aGlzLiQuaXRlbXM6dGhpcy5fdmlydHVhbEZvY3VzPXRoaXMuJC5oZWFkZXI7YS5wcmV2ZW50RGVmYXVsdCgpOwpicmVhaztjYXNlIHRoaXMuJC5oZWFkZXI6dGhpcy5mb2N1cygpLHRoaXMuX3ZpcnR1YWxGb2N1cz1udWxsfWVsc2Ugc3dpdGNoKHRoaXMuX3ZpcnR1YWxGb2N1cyl7Y2FzZSB0aGlzLiQuaGVhZGVyOnRoaXMuX3ZpcnR1YWxGb2N1cz10aGlzLiQuaXRlbXM7YS5wcmV2ZW50RGVmYXVsdCgpO2JyZWFrO2Nhc2UgdGhpcy4kLml0ZW1zOnRoaXMuX2lzRm9vdGVyVmlzaWJsZSgpPyh0aGlzLl92aXJ0dWFsRm9jdXM9dGhpcy4kLmZvb3RlcixhLnByZXZlbnREZWZhdWx0KCkpOnRoaXMuYXN5bmMoZnVuY3Rpb24oKXt0aGlzLl92aXJ0dWFsRm9jdXM9bnVsbH0sMSk7YnJlYWs7Y2FzZSB0aGlzLiQuZm9vdGVyOnRoaXMuX3ZpcnR1YWxGb2N1cz1udWxsfWVsc2UgdGhpcy5fYWN0aXZhdGVOYXZpZ2F0aW9uKCksYS5wcmV2ZW50RGVmYXVsdCgpfSxfaXNBYm92ZVZpZXdwb3J0OmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmZpcnN0VmlzaWJsZUluZGV4PmF9LF9vbkFycm93RG93bjpmdW5jdGlvbihhKXt0aGlzLmludGVyYWN0aW5nfHwKKGEucHJldmVudERlZmF1bHQoKSx0aGlzLm5hdmlnYXRpbmc9ITAsdGhpcy5fdmlydHVhbEZvY3VzLmZvY3VzRG93bigpLHRoaXMuX2Vuc3VyZVZpcnR1YWxGb2N1c0luVmlld3BvcnQoKSl9LF9zY3JvbGxQYWdlRG93bjpmdW5jdGlvbigpe3ZhciBhPXRoaXMuJC5oZWFkZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksYz10aGlzLiQuZm9vdGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3RoaXMuJC5zY3JvbGxlci4kLnRhYmxlLnNjcm9sbFRvcCs9Yy50b3AtYS5ib3R0b207dGhpcy4kLnNjcm9sbGVyLl9zY3JvbGxIYW5kbGVyKCl9LF9vblBhZ2VEb3duOmZ1bmN0aW9uKGEpe3RoaXMuaW50ZXJhY3Rpbmd8fChhLnByZXZlbnREZWZhdWx0KCksdGhpcy5uYXZpZ2F0aW5nPSEwLHRoaXMuX3ZpcnR1YWxGb2N1cz09PXRoaXMuJC5pdGVtcz8oYT10aGlzLiQuc2Nyb2xsZXIubGFzdFZpc2libGVJbmRleCx0aGlzLl9zY3JvbGxQYWdlRG93bigpLHRoaXMuX3ZpcnR1YWxGb2N1cy5fZm9jdXNlZFJvd0luZGV4Kz0KdGhpcy4kLnNjcm9sbGVyLmxhc3RWaXNpYmxlSW5kZXgtYXx8dGhpcy4kLnNjcm9sbGVyLmxhc3RWaXNpYmxlSW5kZXgtdGhpcy5fdmlydHVhbEZvY3VzLl9mb2N1c2VkUm93SW5kZXgsdGhpcy5fZW5zdXJlVmlydHVhbEZvY3VzSW5WaWV3cG9ydCgpKTp0aGlzLl92aXJ0dWFsRm9jdXMuZm9jdXNQYWdlRG93bigpKX0sX3Njcm9sbFBhZ2VVcDpmdW5jdGlvbigpe3ZhciBhPXRoaXMuJC5oZWFkZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksYz10aGlzLiQuZm9vdGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3RoaXMuJC5zY3JvbGxlci4kLnRhYmxlLnNjcm9sbFRvcC09Yy50b3AtYS5ib3R0b207dGhpcy4kLnNjcm9sbGVyLl9zY3JvbGxIYW5kbGVyKCl9LF9vblBhZ2VVcDpmdW5jdGlvbihhKXt0aGlzLmludGVyYWN0aW5nfHwoYS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMubmF2aWdhdGluZz0hMCx0aGlzLl92aXJ0dWFsRm9jdXM9PT10aGlzLiQuaXRlbXM/KGE9dGhpcy4kLnNjcm9sbGVyLmxhc3RWaXNpYmxlSW5kZXgsCnRoaXMuX3Njcm9sbFBhZ2VVcCgpLHRoaXMuX3ZpcnR1YWxGb2N1cy5fZm9jdXNlZFJvd0luZGV4LT1hLXRoaXMuJC5zY3JvbGxlci5sYXN0VmlzaWJsZUluZGV4fHx0aGlzLl92aXJ0dWFsRm9jdXMuX2ZvY3VzZWRSb3dJbmRleCx0aGlzLl9lbnN1cmVWaXJ0dWFsRm9jdXNJblZpZXdwb3J0KCkpOnRoaXMuX3ZpcnR1YWxGb2N1cy5mb2N1c1BhZ2VVcCgpKX0sX29uQXJyb3dVcDpmdW5jdGlvbihhKXt0aGlzLmludGVyYWN0aW5nfHwoYS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMubmF2aWdhdGluZz0hMCx0aGlzLl92aXJ0dWFsRm9jdXMuZm9jdXNVcCgpLHRoaXMuX2Vuc3VyZVZpcnR1YWxGb2N1c0luVmlld3BvcnQoKSl9LF9vbkFycm93UmlnaHQ6ZnVuY3Rpb24oYSl7dGhpcy5pbnRlcmFjdGluZ3x8KGEucHJldmVudERlZmF1bHQoKSx0aGlzLm5hdmlnYXRpbmc9ITAsdGhpcy5fdmlydHVhbEZvY3VzLmZvY3VzUmlnaHQoKSx0aGlzLl9lbnN1cmVWaXJ0dWFsRm9jdXNJblZpZXdwb3J0KCkpfSwKX29uQXJyb3dMZWZ0OmZ1bmN0aW9uKGEpe3RoaXMuaW50ZXJhY3Rpbmd8fChhLnByZXZlbnREZWZhdWx0KCksdGhpcy5uYXZpZ2F0aW5nPSEwLHRoaXMuX3ZpcnR1YWxGb2N1cy5mb2N1c0xlZnQoKSx0aGlzLl9lbnN1cmVWaXJ0dWFsRm9jdXNJblZpZXdwb3J0KCkpfSxfb25Ib21lOmZ1bmN0aW9uKGEpe3RoaXMuaW50ZXJhY3Rpbmd8fChhLnByZXZlbnREZWZhdWx0KCksdGhpcy5uYXZpZ2F0aW5nPSEwLHRoaXMuX3ZpcnR1YWxGb2N1cy5mb2N1c0hvbWUoKSx0aGlzLl9lbnN1cmVWaXJ0dWFsRm9jdXNJblZpZXdwb3J0KCkpfSxfb25FbmQ6ZnVuY3Rpb24oYSl7dGhpcy5pbnRlcmFjdGluZ3x8KGEucHJldmVudERlZmF1bHQoKSx0aGlzLm5hdmlnYXRpbmc9ITAsdGhpcy5fdmlydHVhbEZvY3VzLmZvY3VzRW5kKCksdGhpcy5fZW5zdXJlVmlydHVhbEZvY3VzSW5WaWV3cG9ydCgpKX0sX21vdmVGb2N1c1RvRm9jdXNUYXJnZXQ6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLl92aXJ0dWFsRm9jdXMuX2ZvY3VzZWRDZWxsLl9jZWxsQ29udGVudDsKKGE9YS5xdWVyeVNlbGVjdG9yKCJbZm9jdXMtdGFyZ2V0XSIpfHxhLmZpcnN0RWxlbWVudENoaWxkKSYmYS5mb2N1cygpfSxfb25FbnRlcjpmdW5jdGlvbihhKXt0aGlzLmludGVyYWN0aW5nPyJpbnB1dCI9PT1hLmRldGFpbC5rZXlib2FyZEV2ZW50LnRhcmdldC5sb2NhbE5hbWUmJiJ0ZXh0Ij09PWEuZGV0YWlsLmtleWJvYXJkRXZlbnQudGFyZ2V0LnR5cGUmJnRoaXMuJC5mb290ZXJGb2N1c1RyYXAuZm9jdXMoKTooYS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX21vdmVGb2N1c1RvRm9jdXNUYXJnZXQoKSl9LF9vbkVzY2FwZTpmdW5jdGlvbigpe3RoaXMuaW50ZXJhY3Rpbmc/dGhpcy4kLmZvb3RlckZvY3VzVHJhcC5mb2N1cygpOnRoaXMubmF2aWdhdGluZyYmKHRoaXMubmF2aWdhdGluZz0hMSl9LF9vbkYyOmZ1bmN0aW9uKGEpe2EucHJldmVudERlZmF1bHQoKTt0aGlzLmludGVyYWN0aW5nP3RoaXMuJC5mb290ZXJGb2N1c1RyYXAuZm9jdXMoKTp0aGlzLl9tb3ZlRm9jdXNUb0ZvY3VzVGFyZ2V0KCl9LApfb25DdHJsSG9tZTpmdW5jdGlvbihhKXt0aGlzLmludGVyYWN0aW5nfHwoYS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMubmF2aWdhdGluZz0hMCx0aGlzLl92aXJ0dWFsRm9jdXMuZm9jdXNGaXJzdCgpLHRoaXMuX2Vuc3VyZVZpcnR1YWxGb2N1c0luVmlld3BvcnQoKSl9LF9vbkN0cmxFbmQ6ZnVuY3Rpb24oYSl7dGhpcy5pbnRlcmFjdGluZ3x8KGEucHJldmVudERlZmF1bHQoKSx0aGlzLm5hdmlnYXRpbmc9ITAsdGhpcy5fdmlydHVhbEZvY3VzLmZvY3VzTGFzdCgpLHRoaXMuX2Vuc3VyZVZpcnR1YWxGb2N1c0luVmlld3BvcnQoKSl9LF9vblNwYWNlOmZ1bmN0aW9uKGEpe2lmKCF0aGlzLmludGVyYWN0aW5nKXthLnByZXZlbnREZWZhdWx0KCk7YT10aGlzLl92aXJ0dWFsRm9jdXMuX2ZvY3VzZWRDZWxsO3ZhciBjPWEuZ2V0Q29udGVudENoaWxkcmVuKFBvbHltZXIuRWxlbWVudD8ic2xvdCI6ImNvbnRlbnQiKVswXS5maXJzdEVsZW1lbnRDaGlsZDtjP2MuY2xpY2soKTp0aGlzLm5hdmlnYXRpbmcmJgp0aGlzLmZpcmUoImNlbGwtYWN0aXZhdGUiLHttb2RlbDphLmluc3RhbmNlfSl9fSxfb25DZWxsQ29udGVudEZvY3VzOmZ1bmN0aW9uKGEpe3RoaXMuaW50ZXJhY3Rpbmc9ITA7dGhpcy5fb25DZWxsRm9jdXMoYSl9LF9vbkNlbGxGb2N1czpmdW5jdGlvbihhKXthPWEuZGV0YWlsLmNlbGw7dmFyIGM9YS5wYXJlbnRFbGVtZW50LGQ9Yy5wYXJlbnRFbGVtZW50LGY9QXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbChQb2x5bWVyLmRvbShkKS5jaGlsZHJlbixjKTtkPT09dGhpcy4kLml0ZW1zJiYoZj1jLmluZGV4KTtkLl9mb2N1c2VkUm93SW5kZXg9ZjtkLl9mb2N1c2VkQ2VsbEluZGV4PUFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwoUG9seW1lci5kb20oYykuY2hpbGRyZW4sYSk7dGhpcy5fdmlydHVhbEZvY3VzPWQ7YS5oYXNBdHRyaWJ1dGUoImRldGFpbHNjZWxsIikmJihkLl9mb2N1c2VkQ2VsbEluZGV4PTAsZC5fbW92ZUZvY3VzVG9EZXRhaWxzQ2VsbCgpKX0sX2Vuc3VyZVZpcnR1YWxGb2N1c0luVmlld3BvcnQ6ZnVuY3Rpb24oKXt2YXIgYT0KdGhpcy4kLnNjcm9sbGVyLl92aWR4T2Zmc2V0K3RoaXMuJC5zY3JvbGxlci5fdmlydHVhbFN0YXJ0LGM9dGhpcy5fdmlydHVhbEZvY3VzLl9mb2N1c2VkUm93SW5kZXg7dGhpcy5fdmlydHVhbEZvY3VzPT09dGhpcy4kLml0ZW1zJiYoYzxhfHxjPmErdGhpcy4kLnNjcm9sbGVyLl9waHlzaWNhbENvdW50KSYmKHRoaXMuJC5zY3JvbGxlci5zY3JvbGxUb1NjYWxlZEluZGV4KGMpLHRoaXMuX3ZpcnR1YWxGb2N1cy5fZm9jdXNlZENlbGxDaGFuZ2VkKGMsdGhpcy5fdmlydHVhbEZvY3VzLl9mb2N1c2VkQ2VsbEluZGV4KSk7dGhpcy5fZW5zdXJlRWxlbWVudEluVmlld3BvcnQodGhpcy5fdmlydHVhbEZvY3VzLl9mb2N1c2VkQ2VsbCl9LF9lbnN1cmVFbGVtZW50SW5WaWV3cG9ydDpmdW5jdGlvbihhKXt2YXIgYz1hLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2lmKHRoaXMuX3ZpcnR1YWxGb2N1cz09PXRoaXMuJC5pdGVtcyl7dmFyIGQ9dGhpcy4kLmZvb3Rlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AsCmY9dGhpcy4kLmhlYWRlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5ib3R0b207Yy5ib3R0b20+ZD90aGlzLiQuc2Nyb2xsZXIuJC50YWJsZS5zY3JvbGxUb3ArPWMuYm90dG9tLWQ6Yy50b3A8ZiYmKHRoaXMuJC5zY3JvbGxlci4kLnRhYmxlLnNjcm9sbFRvcCs9Yy50b3AtZil9aWYoIWEuaGFzQXR0cmlidXRlKCJkZXRhaWxzY2VsbCIpKXthPXRoaXMuJC5zY3JvbGxlci4kLnRhYmxlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnJpZ2h0O2Q9dGhpcy4kLnNjcm9sbGVyLiQudGFibGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdDtpZihmPXRoaXMuX3ZpcnR1YWxGb2N1cy5fZm9jdXNlZFJvdy5xdWVyeVNlbGVjdG9yKCJbbGFzdC1mcm96ZW5dIikpZD1mLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnJpZ2h0O2MucmlnaHQ+YT90aGlzLiQuc2Nyb2xsZXIuJC50YWJsZS5zY3JvbGxMZWZ0Kz1jLnJpZ2h0LWE6Yy5sZWZ0PGQmJih0aGlzLiQuc2Nyb2xsZXIuJC50YWJsZS5zY3JvbGxMZWZ0Kz0KYy5sZWZ0LWQpfX19O3ZhYWRpbi5lbGVtZW50cy5ncmlkLlRhYmxlS2V5Ym9hcmRCZWhhdmlvcj1bdmFhZGluLmVsZW1lbnRzLmdyaWQuVGFibGVLZXlib2FyZEJlaGF2aW9ySW1wbCxQb2x5bWVyLklyb25BMTF5S2V5c0JlaGF2aW9yXTsKPC9zY3JpcHQ+Cgo8ZG9tLW1vZHVsZSBpZD0idmFhZGluLWdyaWQtY29sdW1uLXJlb3JkZXJpbmctdGhlbWFiaWxpdHktc3R5bGVzIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIHZhYWRpbi1ncmlkLXRhYmxlW3Jlb3JkZXJpbmddIC52YWFkaW4tZ3JpZC1jZWxsIHsKICAgICAgICBiYWNrZ3JvdW5kOiAjMDAwOwogICAgICB9CgogICAgICA6aG9zdChbcmVvcmRlcmluZ10pIC52YWFkaW4tZ3JpZC1jZWxsW3Jlb3JkZXItc3RhdHVzPSJkcmFnZ2luZyJdIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1wcmltYXJ5LWNvbG9yLCAjMDAwKTsKICAgICAgfQoKICAgICAgdmFhZGluLWdyaWQtdGFibGVbcmVvcmRlcmluZ10gLnZhYWRpbi1ncmlkLWNlbGw6bm90KFtkZXRhaWxzY2VsbF0pIDo6c2xvdHRlZCh2YWFkaW4tZ3JpZC1jZWxsLWNvbnRlbnQpIHsKICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDMwMG1zOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWigwKTsKICAgICAgICBvcGFjaXR5OiAwLjg7CiAgICAgIH0KCiAgICAgICNzY3JvbGxlciAudmFhZGluLWdyaWQtY2VsbFtyZW9yZGVyLXN0YXR1cz0iYWxsb3dlZCJdIDo6c2xvdHRlZCh2YWFkaW4tZ3JpZC1jZWxsLWNvbnRlbnQpIHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CgogICAgICAjc2Nyb2xsZXIgLnZhYWRpbi1ncmlkLWNlbGxbcmVvcmRlci1zdGF0dXM9ImRyYWdnaW5nIl0gewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXByaW1hcnktY29sb3IsICMwMDApOwogICAgICB9CgogICAgICAjc2Nyb2xsZXIgLnZhYWRpbi1ncmlkLWNlbGxbcmVvcmRlci1zdGF0dXM9ImRyYWdnaW5nIl0gOjpzbG90dGVkKHZhYWRpbi1ncmlkLWNlbGwtY29udGVudCkgewogICAgICAgIG9wYWNpdHk6IDAuOTU7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPgoKPHNjcmlwdD4vL35+V0VCUEFUSH5+L3ZhYWRpbi1ncmlkL3ZhYWRpbi1ncmlkLWNvbHVtbi1yZW9yZGVyaW5nLWJlaGF2aW9yLmh0bWwuanMKd2luZG93LnZhYWRpbj13aW5kb3cudmFhZGlufHx7fTt2YWFkaW4uZWxlbWVudHM9dmFhZGluLmVsZW1lbnRzfHx7fTt2YWFkaW4uZWxlbWVudHMuZ3JpZD12YWFkaW4uZWxlbWVudHMuZ3JpZHx8e307dmFhZGluLmVsZW1lbnRzLmdyaWQuQ29sdW1uUmVvcmRlcmluZ0JlaGF2aW9yPXtwcm9wZXJ0aWVzOntjb2x1bW5SZW9yZGVyaW5nQWxsb3dlZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfX19Owp2YWFkaW4uZWxlbWVudHMuZ3JpZC5UYWJsZUNvbHVtblJlb3JkZXJpbmdCZWhhdmlvcj17cHJvcGVydGllczp7X29yZGVyQmFzZVNjb3BlOnt0eXBlOk51bWJlcix2YWx1ZToxRTd9fSxsaXN0ZW5lcnM6e2RyYWdzdGFydDoiX29uRHJhZ1N0YXJ0IixkcmFnb3ZlcjoiX29uRHJhZ092ZXIiLGRyYWdlbmQ6Il9vbkRyYWdFbmQifSxvYnNlcnZlcnM6WyJfdXBkYXRlT3JkZXJzKGNvbHVtblRyZWUsIGNvbHVtblRyZWUuKikiXSxfdXBkYXRlT3JkZXJzOmZ1bmN0aW9uKGEsYyl7dm9pZCAwIT09YSYmdm9pZCAwIT09YyYmYVswXS5mb3JFYWNoKGZ1bmN0aW9uKGQsZil7ZC5fb3JkZXI9KGYrMSkqdGhpcy5fb3JkZXJCYXNlU2NvcGV9LHRoaXMpfSxfb25EcmFnU3RhcnQ6ZnVuY3Rpb24oYSl7aWYoInZhYWRpbi1ncmlkLWNlbGwtY29udGVudCI9PT1hLnRhcmdldC5sb2NhbE5hbWUpe3ZhciBjPXRoaXMuX2dldENlbGxCeUNlbGxDb250ZW50KGEudGFyZ2V0KTtjJiYodGhpcy50b2dnbGVBdHRyaWJ1dGUoInJlb3JkZXJpbmciLAohMCksdGhpcy5fZHJhZ2dlZENvbHVtbj1jLmNvbHVtbix0aGlzLl9zZXRTaWJsaW5nc1Jlb3JkZXJTdGF0dXModGhpcy5fZHJhZ2dlZENvbHVtbiwiYWxsb3dlZCIpLHRoaXMuX2RyYWdnZWRDb2x1bW4uX3Jlb3JkZXJTdGF0dXM9ImRyYWdnaW5nIixhLmRhdGFUcmFuc2ZlciYmKGEuZGF0YVRyYW5zZmVyLnNldERhdGEoInRleHQiLCIiKSxhLmRhdGFUcmFuc2Zlci5lZmZlY3RBbGxvd2VkPSJtb3ZlIiksdGhpcy5fYXV0b1Njcm9sbGVyKCkpfX0sX3NldFNpYmxpbmdzUmVvcmRlclN0YXR1czpmdW5jdGlvbihhLGMpe0FycmF5LnByb3RvdHlwZS5maWx0ZXIuY2FsbChQb2x5bWVyLmRvbShQb2x5bWVyLmRvbShhKS5wYXJlbnROb2RlKS5jaGlsZHJlbixmdW5jdGlvbihkKXtyZXR1cm4vY29sdW1uLy50ZXN0KGQubG9jYWxOYW1lKSYmdGhpcy5faXNTd2FwQWxsb3dlZChkLGEpfSx0aGlzKS5mb3JFYWNoKGZ1bmN0aW9uKGQpe2QuX3Jlb3JkZXJTdGF0dXM9Y30pfSxfb25EcmFnT3ZlcjpmdW5jdGlvbihhKXtpZih0aGlzLl9kcmFnZ2VkQ29sdW1uKXt2YXIgYz0KKFBvbHltZXIuRWxlbWVudD9hLmNvbXBvc2VkUGF0aCgpOlBvbHltZXIuZG9tKGEpLnBhdGgpLmZpbHRlcihmdW5jdGlvbihkKXtyZXR1cm4idmFhZGluLWdyaWQtY2VsbC1jb250ZW50Ij09PWQubG9jYWxOYW1lfSlbMF07YyYmKGEucHJldmVudERlZmF1bHQoKSxjPXRoaXMuX2dldENlbGxCeUNlbGxDb250ZW50KGMpLChjPXRoaXMuX2dldFRhcmdldENvbHVtbihjLHRoaXMuX2RyYWdnZWRDb2x1bW4pKSYmdGhpcy5faXNTd2FwQWxsb3dlZCh0aGlzLl9kcmFnZ2VkQ29sdW1uLGMpJiZ0aGlzLl9pc1N3YXBwYWJsZUJ5UG9zaXRpb24oYyxhLmNsaWVudFgpJiZ0aGlzLl9zd2FwQ29sdW1uT3JkZXJzKHRoaXMuX2RyYWdnZWRDb2x1bW4sYyksdGhpcy5fbGFzdERyYWdDbGllbnRYPWEuY2xpZW50WCl9fSxfYXV0b1Njcm9sbGVyOmZ1bmN0aW9uKCl7aWYodGhpcy5fbGFzdERyYWdDbGllbnRYKXt2YXIgYT10aGlzLl9sYXN0RHJhZ0NsaWVudFgtdGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5yaWdodCsKNTAsYz10aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQtdGhpcy5fbGFzdERyYWdDbGllbnRYKzUwOzA8YT90aGlzLiQudGFibGUuc2Nyb2xsTGVmdCs9YS8xMDowPGMmJih0aGlzLiQudGFibGUuc2Nyb2xsTGVmdC09Yy8xMCk7dGhpcy5fc2Nyb2xsSGFuZGxlcigpfXRoaXMuX2RyYWdnZWRDb2x1bW4mJnRoaXMuYXN5bmModGhpcy5fYXV0b1Njcm9sbGVyLDEwKX0sX29uRHJhZ0VuZDpmdW5jdGlvbigpe3RoaXMuX2RyYWdnZWRDb2x1bW4mJih0aGlzLnRvZ2dsZUF0dHJpYnV0ZSgicmVvcmRlcmluZyIsITEpLHRoaXMuX2RyYWdnZWRDb2x1bW4uX3Jlb3JkZXJTdGF0dXM9IiIsdGhpcy5fc2V0U2libGluZ3NSZW9yZGVyU3RhdHVzKHRoaXMuX2RyYWdnZWRDb2x1bW4sIiIpLHRoaXMuX2xhc3REcmFnQ2xpZW50WD10aGlzLl9kcmFnZ2VkQ29sdW1uPW51bGwpfSxfaXNTd2FwQWxsb3dlZDpmdW5jdGlvbihhLGMpe2lmKGEmJmMpe3ZhciBkPWEucGFyZW50RWxlbWVudD09PWMucGFyZW50RWxlbWVudCwKZj1hLmZyb3plbj09PWMuZnJvemVuO3JldHVybiBhIT09YyYmZCYmZn19LF9pc1N3YXBwYWJsZUJ5UG9zaXRpb246ZnVuY3Rpb24oYSxjKXt2YXIgZD1BcnJheS5wcm90b3R5cGUuZmlsdGVyLmNhbGwoUG9seW1lci5kb20odGhpcy4kLmhlYWRlcikucXVlcnlTZWxlY3RvckFsbCgiLnZhYWRpbi1ncmlkLWNlbGwiKSxmdW5jdGlvbihnKXtyZXR1cm4gZy5jb2x1bW49PT1hfSlbMF0sZj10aGlzLiQuaGVhZGVyLnF1ZXJ5U2VsZWN0b3IoIltyZW9yZGVyLXN0YXR1c1x4M2RkcmFnZ2luZ10iKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm4gZC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0PmYubGVmdD9jPmQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkucmlnaHQtZi53aWR0aDpjPGQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCtmLndpZHRofSxfZ2V0Q2VsbEJ5Q2VsbENvbnRlbnQ6ZnVuY3Rpb24oYSl7aWYoUG9seW1lci5FbGVtZW50KXJldHVybiBhLmFzc2lnbmVkU2xvdC5wYXJlbnROb2RlOwphPVBvbHltZXIuZG9tKGEpLmdldERlc3RpbmF0aW9uSW5zZXJ0aW9uUG9pbnRzKClbMF07cmV0dXJuIFBvbHltZXIuZG9tKGEpLnBhcmVudE5vZGV9LF9zd2FwQ29sdW1uT3JkZXJzOmZ1bmN0aW9uKGEsYyl7dmFyIGQ9YS5fb3JkZXI7YS5fb3JkZXI9Yy5fb3JkZXI7Yy5fb3JkZXI9ZDt0aGlzLl91cGRhdGVMYXN0RnJvemVuKCk7dGhpcy5fdXBkYXRlTGFzdENvbHVtbigpfSxfZ2V0VGFyZ2V0Q29sdW1uOmZ1bmN0aW9uKGEsYyl7aWYoYSYmYyl7Zm9yKHZhciBkPWEuY29sdW1uO2QucGFyZW50RWxlbWVudCE9PWMucGFyZW50RWxlbWVudCYmZCE9PXRoaXMudGFyZ2V0OylkPWQucGFyZW50RWxlbWVudDtyZXR1cm4gZC5wYXJlbnRFbGVtZW50PT09Yy5wYXJlbnRFbGVtZW50P2Q6YS5jb2x1bW59fX07Cjwvc2NyaXB0PgoKCgoKPHNjcmlwdD4vL35+V0VCUEFUSH5+L3ZhYWRpbi1ncmlkL2lyb24tbGlzdC1iZWhhdmlvci5odG1sLmpzCndpbmRvdy52YWFkaW49d2luZG93LnZhYWRpbnx8e307dmFhZGluLmVsZW1lbnRzPXZhYWRpbi5lbGVtZW50c3x8e307dmFhZGluLmVsZW1lbnRzLmdyaWQ9dmFhZGluLmVsZW1lbnRzLmdyaWR8fHt9Owp2YWFkaW4uZWxlbWVudHMuZ3JpZC5Jcm9uTGlzdEJlaGF2aW9ySW1wbD1mdW5jdGlvbigpe3ZhciBhPW5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL2lQKD86aG9uZXxhZDsoPzogVTspPyBDUFUpIE9TIChcZCspLyksYz1hJiY4PD1hWzFdO3JldHVybntpczoiaXJvbi1saXN0Iixwcm9wZXJ0aWVzOnttYXhQaHlzaWNhbENvdW50Ont0eXBlOk51bWJlcix2YWx1ZTo1MDB9LGFzOnt0eXBlOlN0cmluZyx2YWx1ZToiaXRlbSJ9LGluZGV4QXM6e3R5cGU6U3RyaW5nLHZhbHVlOiJpbmRleCJ9fSxfcmF0aW86LjUsX3Njcm9sbGVyUGFkZGluZ1RvcDowLF9zY3JvbGxQb3NpdGlvbjowLF9waHlzaWNhbFNpemU6MCxfcGh5c2ljYWxBdmVyYWdlOjAsX3BoeXNpY2FsQXZlcmFnZUNvdW50OjAsX3BoeXNpY2FsVG9wOjAsX3ZpcnR1YWxDb3VudDowLF9waHlzaWNhbEluZGV4Rm9yS2V5Om51bGwsX2VzdFNjcm9sbEhlaWdodDowLF9zY3JvbGxIZWlnaHQ6MCxfdmlld3BvcnRIZWlnaHQ6MCxfdmlld3BvcnRXaWR0aDowLApfcGh5c2ljYWxJdGVtczpudWxsLF9waHlzaWNhbFNpemVzOm51bGwsX2ZpcnN0VmlzaWJsZUluZGV4VmFsOm51bGwsX2xhc3RWaXNpYmxlSW5kZXhWYWw6bnVsbCxfY29sbGVjdGlvbjpudWxsLF9pdGVtc1JlbmRlcmVkOiExLF9sYXN0UGFnZTpudWxsLF9tYXhQYWdlczozLF9pdGVtc1BlclJvdzoxLF9pdGVtV2lkdGg6MCxfcm93SGVpZ2h0OjAsZ2V0IF9waHlzaWNhbEJvdHRvbSgpe3JldHVybiB0aGlzLl9waHlzaWNhbFRvcCt0aGlzLl9waHlzaWNhbFNpemV9LGdldCBfc2Nyb2xsQm90dG9tKCl7cmV0dXJuIHRoaXMuX3Njcm9sbFBvc2l0aW9uK3RoaXMuX3ZpZXdwb3J0SGVpZ2h0fSxnZXQgX3ZpcnR1YWxFbmQoKXtyZXR1cm4gdGhpcy5fdmlydHVhbFN0YXJ0K3RoaXMuX3BoeXNpY2FsQ291bnQtMX0sZ2V0IF9oaWRkZW5Db250ZW50U2l6ZSgpe3JldHVybiB0aGlzLl9waHlzaWNhbFNpemUtdGhpcy5fdmlld3BvcnRIZWlnaHR9LGdldCBfbWF4U2Nyb2xsVG9wKCl7cmV0dXJuIHRoaXMuX2VzdFNjcm9sbEhlaWdodC0KdGhpcy5fdmlld3BvcnRIZWlnaHQrdGhpcy5fc2Nyb2xsZXJQYWRkaW5nVG9wfSxfbWluVmlydHVhbFN0YXJ0OjAsZ2V0IF9tYXhWaXJ0dWFsU3RhcnQoKXtyZXR1cm4gTWF0aC5tYXgoMCx0aGlzLl92aXJ0dWFsQ291bnQtdGhpcy5fcGh5c2ljYWxDb3VudCl9LF92aXJ0dWFsU3RhcnRWYWw6MCxzZXQgX3ZpcnR1YWxTdGFydChkKXt0aGlzLl92aXJ0dWFsU3RhcnRWYWw9TWF0aC5taW4odGhpcy5fbWF4VmlydHVhbFN0YXJ0LE1hdGgubWF4KHRoaXMuX21pblZpcnR1YWxTdGFydCxkKSl9LGdldCBfdmlydHVhbFN0YXJ0KCl7cmV0dXJuIHRoaXMuX3ZpcnR1YWxTdGFydFZhbHx8MH0sX3BoeXNpY2FsU3RhcnRWYWw6MCxzZXQgX3BoeXNpY2FsU3RhcnQoZCl7dGhpcy5fcGh5c2ljYWxTdGFydFZhbD1kJXRoaXMuX3BoeXNpY2FsQ291bnQ7MD50aGlzLl9waHlzaWNhbFN0YXJ0VmFsJiYodGhpcy5fcGh5c2ljYWxTdGFydFZhbD10aGlzLl9waHlzaWNhbENvdW50K3RoaXMuX3BoeXNpY2FsU3RhcnRWYWwpOwp0aGlzLl9waHlzaWNhbEVuZD0odGhpcy5fcGh5c2ljYWxTdGFydCt0aGlzLl9waHlzaWNhbENvdW50LTEpJXRoaXMuX3BoeXNpY2FsQ291bnR9LGdldCBfcGh5c2ljYWxTdGFydCgpe3JldHVybiB0aGlzLl9waHlzaWNhbFN0YXJ0VmFsfHwwfSxfcGh5c2ljYWxDb3VudFZhbDowLHNldCBfcGh5c2ljYWxDb3VudChkKXt0aGlzLl9waHlzaWNhbENvdW50VmFsPWQ7dGhpcy5fcGh5c2ljYWxFbmQ9KHRoaXMuX3BoeXNpY2FsU3RhcnQrdGhpcy5fcGh5c2ljYWxDb3VudC0xKSV0aGlzLl9waHlzaWNhbENvdW50fSxnZXQgX3BoeXNpY2FsQ291bnQoKXtyZXR1cm4gdGhpcy5fcGh5c2ljYWxDb3VudFZhbH0sX3BoeXNpY2FsRW5kOjAsZ2V0IF9vcHRQaHlzaWNhbFNpemUoKXtyZXR1cm4gdGhpcy5fdmlld3BvcnRIZWlnaHQqdGhpcy5fbWF4UGFnZXN9LGdldCBfb3B0UGh5c2ljYWxDb3VudCgpe3JldHVybiB0aGlzLl9lc3RSb3dzSW5WaWV3KnRoaXMuX2l0ZW1zUGVyUm93KnRoaXMuX21heFBhZ2VzfSwKZ2V0IF9pc1Zpc2libGUoKXtyZXR1cm4gdGhpcy5zY3JvbGxUYXJnZXQmJiEoIXRoaXMuc2Nyb2xsVGFyZ2V0Lm9mZnNldFdpZHRoJiYhdGhpcy5zY3JvbGxUYXJnZXQub2Zmc2V0SGVpZ2h0KX0sZ2V0IGZpcnN0VmlzaWJsZUluZGV4KCl7aWYobnVsbD09PXRoaXMuX2ZpcnN0VmlzaWJsZUluZGV4VmFsKXt2YXIgZD1NYXRoLmZsb29yKHRoaXMuX3BoeXNpY2FsVG9wK3RoaXMuX3Njcm9sbGVyUGFkZGluZ1RvcCk7dGhpcy5fZmlyc3RWaXNpYmxlSW5kZXhWYWw9dGhpcy5faXRlcmF0ZUl0ZW1zKGZ1bmN0aW9uKGYsZyl7ZCs9dGhpcy5fZ2V0UGh5c2ljYWxTaXplSW5jcmVtZW50KGYpO2lmKGQ+dGhpcy5fc2Nyb2xsUG9zaXRpb24pcmV0dXJuIGd9KXx8MH1yZXR1cm4gdGhpcy5fZmlyc3RWaXNpYmxlSW5kZXhWYWx9LGdldCBsYXN0VmlzaWJsZUluZGV4KCl7aWYobnVsbD09PXRoaXMuX2xhc3RWaXNpYmxlSW5kZXhWYWwpe3ZhciBkPXRoaXMuX3BoeXNpY2FsVG9wO3RoaXMuX2l0ZXJhdGVJdGVtcyhmdW5jdGlvbihmLApnKXtpZihkPHRoaXMuX3Njcm9sbEJvdHRvbSl0aGlzLl9sYXN0VmlzaWJsZUluZGV4VmFsPWc7ZWxzZSByZXR1cm4hMDtkKz10aGlzLl9nZXRQaHlzaWNhbFNpemVJbmNyZW1lbnQoZil9KX1yZXR1cm4gdGhpcy5fbGFzdFZpc2libGVJbmRleFZhbH0sZ2V0IF9kZWZhdWx0U2Nyb2xsVGFyZ2V0KCl7cmV0dXJuIHRoaXN9LGdldCBfdmlydHVhbFJvd0NvdW50KCl7cmV0dXJuIE1hdGguY2VpbCh0aGlzLl92aXJ0dWFsQ291bnQvdGhpcy5faXRlbXNQZXJSb3cpfSxnZXQgX2VzdFJvd3NJblZpZXcoKXtyZXR1cm4gTWF0aC5jZWlsKHRoaXMuX3ZpZXdwb3J0SGVpZ2h0L3RoaXMuX3Jvd0hlaWdodCl9LGdldCBfcGh5c2ljYWxSb3dzKCl7cmV0dXJuIE1hdGguY2VpbCh0aGlzLl9waHlzaWNhbENvdW50L3RoaXMuX2l0ZW1zUGVyUm93KX0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLnVwZGF0ZVZpZXdwb3J0Qm91bmRhcmllcygpO3RoaXMuX3JlbmRlcigpO3RoaXMubGlzdGVuKHRoaXMsImlyb24tcmVzaXplIiwKIl9yZXNpemVIYW5kbGVyIil9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5faXRlbXNSZW5kZXJlZD0hMTt0aGlzLnVubGlzdGVuKHRoaXMsImlyb24tcmVzaXplIiwiX3Jlc2l6ZUhhbmRsZXIiKX0sdXBkYXRlVmlld3BvcnRCb3VuZGFyaWVzOmZ1bmN0aW9uKCl7dGhpcy5fc2Nyb2xsZXJQYWRkaW5nVG9wPXRoaXMuc2Nyb2xsVGFyZ2V0PT09dGhpcz8wOnBhcnNlSW50KHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMpWyJwYWRkaW5nLXRvcCJdfHwwLDEwKTt0aGlzLl92aWV3cG9ydEhlaWdodD10aGlzLl9zY3JvbGxUYXJnZXRIZWlnaHR9LF91cGRhdGU6ZnVuY3Rpb24oZCxmKXt0aGlzLl9hc3NpZ25Nb2RlbHMoZCk7dGhpcy5fdXBkYXRlTWV0cmljcyhkKTtpZihmKWZvcig7Zi5sZW5ndGg7KWQ9Zi5wb3AoKSx0aGlzLl9waHlzaWNhbFRvcC09dGhpcy5fZ2V0UGh5c2ljYWxTaXplSW5jcmVtZW50KGQpO3RoaXMuX3Bvc2l0aW9uSXRlbXMoKTt0aGlzLl91cGRhdGVTY3JvbGxlclNpemUoKTsKdGhpcy5faW5jcmVhc2VQb29sSWZOZWVkZWQoKX0sX2luY3JlYXNlUG9vbElmTmVlZGVkOmZ1bmN0aW9uKCl7aWYoMD09PXRoaXMuX3ZpZXdwb3J0SGVpZ2h0KXJldHVybiExO3ZhciBkPXRoaXMuX3BoeXNpY2FsU2l6ZXMucmVkdWNlKGZ1bmN0aW9uKGcsbCl7cmV0dXJuIGcrKGx8fDEwMCl9LDApLGY9ZD50aGlzLl92aWV3cG9ydEhlaWdodDtpZihkPj10aGlzLl9vcHRQaHlzaWNhbFNpemUmJmYpcmV0dXJuITE7ZD1NYXRoLmZsb29yKHRoaXMuX3BoeXNpY2FsU2l6ZS90aGlzLl92aWV3cG9ydEhlaWdodCk7MD09PWQ/dGhpcy5fZGVib3VuY2VUZW1wbGF0ZSh0aGlzLl9pbmNyZWFzZVBvb2wuYmluZCh0aGlzLE1hdGgucm91bmQoLjUqdGhpcy5fcGh5c2ljYWxDb3VudCkpKTp0aGlzLl9sYXN0UGFnZSE9PWQmJmY/UG9seW1lci5kb20uYWRkRGVib3VuY2VyKHRoaXMuZGVib3VuY2UoIl9kZWJvdW5jZVRlbXBsYXRlIix0aGlzLl9pbmNyZWFzZVBvb2wuYmluZCh0aGlzLHRoaXMuX2l0ZW1zUGVyUm93KSwKMTYpKTp0aGlzLl9kZWJvdW5jZVRlbXBsYXRlKHRoaXMuX2luY3JlYXNlUG9vbC5iaW5kKHRoaXMsTWF0aC5jZWlsKHRoaXMuX3ZpZXdwb3J0SGVpZ2h0Lyh0aGlzLl9waHlzaWNhbFNpemUvdGhpcy5fcGh5c2ljYWxDb3VudCkqdGhpcy5fbWF4UGFnZXMtdGhpcy5fcGh5c2ljYWxDb3VudCl8fDEpKTt0aGlzLl9sYXN0UGFnZT1kO3JldHVybiEwfSxfZGVib3VuY2VUZW1wbGF0ZTpmdW5jdGlvbihkKXtQb2x5bWVyLmRvbS5hZGREZWJvdW5jZXIodGhpcy5kZWJvdW5jZSgiX2RlYm91bmNlVGVtcGxhdGUiLGQpKX0sX2luY3JlYXNlUG9vbDpmdW5jdGlvbihkKXt2YXIgZj10aGlzLl9waHlzaWNhbENvdW50O2Q9TWF0aC5taW4odGhpcy5fcGh5c2ljYWxDb3VudCtkLHRoaXMuX3ZpcnR1YWxDb3VudC10aGlzLl92aXJ0dWFsU3RhcnQsTWF0aC5tYXgodGhpcy5tYXhQaHlzaWNhbENvdW50LDI1KSktZjswPj1kfHwoW10ucHVzaC5hcHBseSh0aGlzLl9waHlzaWNhbEl0ZW1zLHRoaXMuX2NyZWF0ZVBvb2woZCkpLApbXS5wdXNoLmFwcGx5KHRoaXMuX3BoeXNpY2FsU2l6ZXMsQXJyYXkoZCkpLHRoaXMuX3BoeXNpY2FsQ291bnQ9ZitkLHRoaXMuX3VwZGF0ZSgpKX0sX3JlbmRlcjpmdW5jdGlvbigpe3ZhciBkPTA8dGhpcy5fdmlydHVhbENvdW50fHwwPHRoaXMuX3BoeXNpY2FsQ291bnQ7dGhpcy5pc0F0dGFjaGVkJiYhdGhpcy5faXRlbXNSZW5kZXJlZCYmdGhpcy5faXNWaXNpYmxlJiZkJiYodGhpcy5fbGFzdFBhZ2U9MCx0aGlzLl91cGRhdGUoKSx0aGlzLl9pdGVtc1JlbmRlcmVkPSEwKX0sX2l0ZXJhdGVJdGVtczpmdW5jdGlvbihkLGYpe3ZhciBnLGw7aWYoMj09PWFyZ3VtZW50cy5sZW5ndGgmJmYpZm9yKGw9MDtsPGYubGVuZ3RoO2wrKyl7dmFyIGs9ZltsXTt2YXIgbT10aGlzLl9jb21wdXRlVmlkeChrKTtpZihudWxsIT0oZz1kLmNhbGwodGhpcyxrLG0pKSlyZXR1cm4gZ31lbHNle2s9dGhpcy5fcGh5c2ljYWxTdGFydDtmb3IobT10aGlzLl92aXJ0dWFsU3RhcnQ7azx0aGlzLl9waHlzaWNhbENvdW50O2srKywKbSsrKWlmKG51bGwhPShnPWQuY2FsbCh0aGlzLGssbSkpKXJldHVybiBnO2ZvcihrPTA7azx0aGlzLl9waHlzaWNhbFN0YXJ0O2srKyxtKyspaWYobnVsbCE9KGc9ZC5jYWxsKHRoaXMsayxtKSkpcmV0dXJuIGd9fSxfY29tcHV0ZVZpZHg6ZnVuY3Rpb24oZCl7cmV0dXJuIGQ+PXRoaXMuX3BoeXNpY2FsU3RhcnQ/dGhpcy5fdmlydHVhbFN0YXJ0KyhkLXRoaXMuX3BoeXNpY2FsU3RhcnQpOnRoaXMuX3ZpcnR1YWxTdGFydCsodGhpcy5fcGh5c2ljYWxDb3VudC10aGlzLl9waHlzaWNhbFN0YXJ0KStkfSxfdXBkYXRlTWV0cmljczpmdW5jdGlvbihkKXt0aGlzLnNjcm9sbGluZyYmUG9seW1lci5kb20uZmx1c2goKTt2YXIgZj0wLGc9MCxsPXRoaXMuX3BoeXNpY2FsQXZlcmFnZUNvdW50LGs9dGhpcy5fcGh5c2ljYWxBdmVyYWdlO3RoaXMuX2l0ZXJhdGVJdGVtcyhmdW5jdGlvbihtKXtnKz10aGlzLl9waHlzaWNhbFNpemVzW21dfHwwO3RoaXMuX3BoeXNpY2FsU2l6ZXNbbV09dGhpcy5fcGh5c2ljYWxJdGVtc1ttXS5vZmZzZXRIZWlnaHQ7CmYrPXRoaXMuX3BoeXNpY2FsU2l6ZXNbbV07dGhpcy5fcGh5c2ljYWxBdmVyYWdlQ291bnQrPXRoaXMuX3BoeXNpY2FsU2l6ZXNbbV0/MTowfSxkKTt0aGlzLl92aWV3cG9ydEhlaWdodD10aGlzLl9zY3JvbGxUYXJnZXRIZWlnaHQ7dGhpcy5fcGh5c2ljYWxTaXplPXRoaXMuX3BoeXNpY2FsU2l6ZStmLWc7dGhpcy5fcGh5c2ljYWxBdmVyYWdlQ291bnQhPT1sJiYodGhpcy5fcGh5c2ljYWxBdmVyYWdlPU1hdGgucm91bmQoKGsqbCtmKS90aGlzLl9waHlzaWNhbEF2ZXJhZ2VDb3VudCkpfSxfcG9zaXRpb25JdGVtczpmdW5jdGlvbigpe3RoaXMuX2FkanVzdFNjcm9sbFBvc2l0aW9uKCk7dmFyIGQ9dGhpcy5fcGh5c2ljYWxUb3A7dGhpcy5faXRlcmF0ZUl0ZW1zKGZ1bmN0aW9uKGYpe3RoaXMuX3BoeXNpY2FsSXRlbXNbZl0uc3R5bGUudHJhbnNmb3JtPXRoaXMuX2dldFRyYW5zbGF0ZSgwLGQpO2QrPXRoaXMuX3BoeXNpY2FsU2l6ZXNbZl19KX0sX2dldFBoeXNpY2FsU2l6ZUluY3JlbWVudDpmdW5jdGlvbihkKXtyZXR1cm4gdGhpcy5fcGh5c2ljYWxTaXplc1tkXX0sCl9zaG91bGRSZW5kZXJOZXh0Um93OmZ1bmN0aW9uKGQpe3JldHVybiBkJXRoaXMuX2l0ZW1zUGVyUm93PT09dGhpcy5faXRlbXNQZXJSb3ctMX0sX2FkanVzdFNjcm9sbFBvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIGQ9MD09PXRoaXMuX3ZpcnR1YWxTdGFydD90aGlzLl9waHlzaWNhbFRvcDpNYXRoLm1pbih0aGlzLl9zY3JvbGxQb3NpdGlvbit0aGlzLl9waHlzaWNhbFRvcCwwKTtkJiYodGhpcy5fcGh5c2ljYWxUb3AtPWQsY3x8MD09PXRoaXMuX3BoeXNpY2FsVG9wfHx0aGlzLl9yZXNldFNjcm9sbFBvc2l0aW9uKHRoaXMuX3Njcm9sbFRvcC1kKSl9LF9yZXNldFNjcm9sbFBvc2l0aW9uOmZ1bmN0aW9uKGQpe3RoaXMuc2Nyb2xsVGFyZ2V0JiYodGhpcy5fc2Nyb2xsUG9zaXRpb249dGhpcy5fc2Nyb2xsVG9wPWQpfSxfdXBkYXRlU2Nyb2xsZXJTaXplOmZ1bmN0aW9uKGQpe3RoaXMuX2VzdFNjcm9sbEhlaWdodD10aGlzLl9waHlzaWNhbEJvdHRvbStNYXRoLm1heCh0aGlzLl92aXJ0dWFsQ291bnQtCnRoaXMuX3BoeXNpY2FsQ291bnQtdGhpcy5fdmlydHVhbFN0YXJ0LDApKnRoaXMuX3BoeXNpY2FsQXZlcmFnZTtpZigoZD0oZD1kfHwwPT09dGhpcy5fc2Nyb2xsSGVpZ2h0KXx8dGhpcy5fc2Nyb2xsUG9zaXRpb24+PXRoaXMuX2VzdFNjcm9sbEhlaWdodC10aGlzLl9waHlzaWNhbFNpemUpfHxNYXRoLmFicyh0aGlzLl9lc3RTY3JvbGxIZWlnaHQtdGhpcy5fc2Nyb2xsSGVpZ2h0KT49dGhpcy5fb3B0UGh5c2ljYWxTaXplKXRoaXMuJC5pdGVtcy5zdHlsZS5oZWlnaHQ9dGhpcy5fZXN0U2Nyb2xsSGVpZ2h0KyJweCIsdGhpcy5fc2Nyb2xsSGVpZ2h0PXRoaXMuX2VzdFNjcm9sbEhlaWdodH0sc2Nyb2xsVG9JbmRleDpmdW5jdGlvbihkKXtQb2x5bWVyLmRvbS5mbHVzaCgpO2Q9TWF0aC5taW4oTWF0aC5tYXgoZCwwKSx0aGlzLl92aXJ0dWFsQ291bnQtMSk7aWYoIXRoaXMuX2lzSW5kZXhSZW5kZXJlZChkKXx8ZD49dGhpcy5fbWF4VmlydHVhbFN0YXJ0KXRoaXMuX3ZpcnR1YWxTdGFydD0KZC0xO3RoaXMuX2Fzc2lnbk1vZGVscygpO3RoaXMuX3VwZGF0ZU1ldHJpY3MoKTt0aGlzLl9waHlzaWNhbFRvcD1NYXRoLmZsb29yKHRoaXMuX3ZpcnR1YWxTdGFydC90aGlzLl9pdGVtc1BlclJvdykqdGhpcy5fcGh5c2ljYWxBdmVyYWdlO2Zvcih2YXIgZj10aGlzLl9waHlzaWNhbFN0YXJ0LGc9dGhpcy5fdmlydHVhbFN0YXJ0LGw9MCxrPXRoaXMuX2hpZGRlbkNvbnRlbnRTaXplO2c8ZCYmbDw9azspbCs9dGhpcy5fZ2V0UGh5c2ljYWxTaXplSW5jcmVtZW50KGYpLGY9KGYrMSkldGhpcy5fcGh5c2ljYWxDb3VudCxnKys7dGhpcy5fdXBkYXRlU2Nyb2xsZXJTaXplKCEwKTt0aGlzLl9wb3NpdGlvbkl0ZW1zKCk7dGhpcy5fcmVzZXRTY3JvbGxQb3NpdGlvbih0aGlzLl9waHlzaWNhbFRvcCt0aGlzLl9zY3JvbGxlclBhZGRpbmdUb3ArbCk7dGhpcy5faW5jcmVhc2VQb29sSWZOZWVkZWQoKTt0aGlzLl9sYXN0VmlzaWJsZUluZGV4VmFsPXRoaXMuX2ZpcnN0VmlzaWJsZUluZGV4VmFsPQpudWxsfSxfcmVzZXRBdmVyYWdlOmZ1bmN0aW9uKCl7dGhpcy5fcGh5c2ljYWxBdmVyYWdlQ291bnQ9dGhpcy5fcGh5c2ljYWxBdmVyYWdlPTB9LF9yZXNpemVIYW5kbGVyOmZ1bmN0aW9uKCl7UG9seW1lci5kb20uYWRkRGVib3VuY2VyKHRoaXMuZGVib3VuY2UoIl9kZWJvdW5jZVRlbXBsYXRlIixmdW5jdGlvbigpe3RoaXMudXBkYXRlVmlld3BvcnRCb3VuZGFyaWVzKCk7dGhpcy5fcmVuZGVyKCk7dGhpcy5faXRlbXNSZW5kZXJlZCYmdGhpcy5fcGh5c2ljYWxJdGVtcyYmdGhpcy5faXNWaXNpYmxlJiYodGhpcy5fcmVzZXRBdmVyYWdlKCksdGhpcy5zY3JvbGxUb0luZGV4KHRoaXMuZmlyc3RWaXNpYmxlSW5kZXgpKX0uYmluZCh0aGlzKSwxKSl9LHVwZGF0ZVNpemVGb3JJdGVtOmZ1bmN0aW9uKGQpe2Q9dGhpcy5fcGh5c2ljYWxJbmRleEZvcktleVtkXTtudWxsIT1kJiYodGhpcy5fdXBkYXRlTWV0cmljcyhbZF0pLHRoaXMuX3Bvc2l0aW9uSXRlbXMoKSl9LF9pc0luZGV4UmVuZGVyZWQ6ZnVuY3Rpb24oZCl7cmV0dXJuIGQ+PQp0aGlzLl92aXJ0dWFsU3RhcnQmJmQ8PXRoaXMuX3ZpcnR1YWxFbmR9LF9pc0luZGV4VmlzaWJsZTpmdW5jdGlvbihkKXtyZXR1cm4gZD49dGhpcy5maXJzdFZpc2libGVJbmRleCYmZDw9dGhpcy5sYXN0VmlzaWJsZUluZGV4fX19KCk7dmFhZGluLmVsZW1lbnRzLmdyaWQuSXJvbkxpc3RCZWhhdmlvcj1bUG9seW1lci5UZW1wbGF0aXplcixQb2x5bWVyLklyb25TY3JvbGxUYXJnZXRCZWhhdmlvcix2YWFkaW4uZWxlbWVudHMuZ3JpZC5Jcm9uTGlzdEJlaGF2aW9ySW1wbF07Cjwvc2NyaXB0PgoKCjxkb20tbW9kdWxlIGlkPSJ2YWFkaW4tZ3JpZC10YWJsZS1zdHlsZXMiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KCiAgICAgIEBrZXlmcmFtZXMgYXBwZWFyIHsKICAgICAgICB0byB7CiAgICAgICAgICBvcGFjaXR5OiAxOwogICAgICAgIH0KICAgICAgfQoKICAgICAgdmFhZGluLWdyaWQtdGFibGUgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBhbmltYXRpb246IDFtcyBhcHBlYXI7CiAgICAgIH0KCiAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKC13ZWJraXQtbWF4LWRldmljZS1waXhlbC1yYXRpbzogMSkgewogICAgICAgIDpob3N0IHsKICAgICAgICAgIHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm07CiAgICAgICAgfQogICAgICB9CgogICAgICAjaXRlbXMgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfQoKICAgICAgI2l0ZW1zIHsKICAgICAgICBib3JkZXItdG9wOiAwIHNvbGlkIHRyYW5zcGFyZW50OwogICAgICAgIGJvcmRlci1ib3R0b206IDAgc29saWQgdHJhbnNwYXJlbnQ7CiAgICAgIH0KCiAgICAgICNpdGVtcyA+IC52YWFkaW4tZ3JpZC1yb3cgewogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgfQoKICAgICAgdmFhZGluLWdyaWQtdGFibGUtYm9keSB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH0KCiAgICAgIHZhYWRpbi1ncmlkLXRhYmxlLWhlYWRlciAudmFhZGluLWdyaWQtY2VsbCwKICAgICAgdmFhZGluLWdyaWQtdGFibGUtZm9vdGVyIC52YWFkaW4tZ3JpZC1jZWxsIHsKICAgICAgICB0b3A6IDA7CiAgICAgIH0KCiAgICAgIC52YWFkaW4tZ3JpZC1jZWxsIHsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIH0KCiAgICAgIC52YWFkaW4tZ3JpZC1jZWxsOm5vdChbZGV0YWlsc2NlbGxdKSB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICAudmFhZGluLWdyaWQtY2VsbCA6OnNsb3R0ZWQodmFhZGluLWdyaWQtY2VsbC1jb250ZW50KSB7CiAgICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC52YWFkaW4tZ3JpZC1jb2x1bW4tcmVzaXplLWhhbmRsZSB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBjdXJzb3I6IGNvbC1yZXNpemU7CiAgICAgICAgei1pbmRleDogMTsKICAgICAgfQoKICAgICAgLnZhYWRpbi1ncmlkLWNvbHVtbi1yZXNpemUtaGFuZGxlOjpiZWZvcmUgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBjb250ZW50OiAiIjsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgd2lkdGg6IDM1cHg7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpOwogICAgICB9CgogICAgICBbbGFzdGNvbHVtbl0gLnZhYWRpbi1ncmlkLWNvbHVtbi1yZXNpemUtaGFuZGxlOjpiZWZvcmUsCiAgICAgIFtsYXN0LWZyb3plbl0gLnZhYWRpbi1ncmlkLWNvbHVtbi1yZXNpemUtaGFuZGxlOjpiZWZvcmUgewogICAgICAgIHdpZHRoOiAxOHB4OwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtMTAwJSk7CiAgICAgIH0KCiAgICAgIHZhYWRpbi1ncmlkLXRhYmxlW2NvbHVtbi1yZW9yZGVyaW5nLWFsbG93ZWRdICNoZWFkZXIsCiAgICAgIHZhYWRpbi1ncmlkLXRhYmxlW2NvbHVtbi1yZXNpemluZ10gewogICAgICAgIC1tcy11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIH0KCiAgICAgIHZhYWRpbi1ncmlkLXRhYmxlW2NvbHVtbi1yZXNpemluZ10gewogICAgICAgIGN1cnNvcjogY29sLXJlc2l6ZTsKICAgICAgfQoKICAgICAgLnZhYWRpbi1ncmlkLXJvdzpub3QoW2hpZGRlbl0pIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICBbZnJvemVuXSB7CiAgICAgICAgei1pbmRleDogMjsKICAgICAgfQoKICAgICAgW2hpZGRlbl0gewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KCiAgICAgIHZhYWRpbi1ncmlkLXRhYmxlW25vLWNvbnRlbnQtcG9pbnRlci1ldmVudHNdIC52YWFkaW4tZ3JpZC1jZWxsIDo6c2xvdHRlZCh2YWFkaW4tZ3JpZC1jZWxsLWNvbnRlbnQpIHsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+Cgo8ZG9tLW1vZHVsZSBpZD0idmFhZGluLWdyaWQtdGFibGUtdGFibGUtc3R5bGVzIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0KFtpb3NdW2NvbHVtbi1yZXNpemluZ10pICNvdXRlcnNjcm9sbGVyIHsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB9CgogICAgICAjZml4ZWRzaXplciwKICAgICAgI291dGVyc2l6ZXIgewogICAgICAgIGJvcmRlci10b3A6IDAgc29saWQgdHJhbnNwYXJlbnQ7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMCBzb2xpZCB0cmFuc3BhcmVudDsKICAgICAgfQoKICAgICAgI3RhYmxlIHsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgb3ZlcmZsb3c6IGF1dG87CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgfQoKICAgICAgI3RhYmxlW292ZXJmbG93LWhpZGRlbl0sCiAgICAgICNvdXRlcnNjcm9sbGVyW292ZXJmbG93LWhpZGRlbl0gewogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIHZhYWRpbi1ncmlkLXNpemVyIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgICNzaXplcndyYXBwZXIgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICB6LWluZGV4OiAtMTAwOwogICAgICB9CgogICAgICAjcmVvcmRlcmdob3N0IHsKICAgICAgICB2aXNpYmlsaXR5OiBoaWRkZW47CiAgICAgICAgcG9zaXRpb246IGZpeGVkOwogICAgICAgIG9wYWNpdHk6IDAuNTsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQoKICAgICAgOjpzbG90dGVkKHZhYWRpbi1ncmlkLWNvbHVtbiksCiAgICAgIDo6c2xvdHRlZCh2YWFkaW4tZ3JpZC1zZWxlY3Rpb24tY29sdW1uKSwKICAgICAgOjpzbG90dGVkKHZhYWRpbi1ncmlkLWNvbHVtbi1ncm91cCkgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KCiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT4KCjxkb20tbW9kdWxlIGlkPSJ2YWFkaW4tZ3JpZC10YWJsZS10aGVtYWJpbGl0eS1zdHlsZXMiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KCiAgICAgIC8qIERlZmF1bHQgYm9yZGVycyAqLwogICAgICB2YWFkaW4tZ3JpZC10YWJsZS1oZWFkZXIgLnZhYWRpbi1ncmlkLXJvdzpsYXN0LWNoaWxkIC52YWFkaW4tZ3JpZC1jZWxsIDo6c2xvdHRlZCh2YWFkaW4tZ3JpZC1jZWxsLWNvbnRlbnQpIHsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tZGl2aWRlci1jb2xvciwgcmdiYSgwLCAwLCAwLCAwLjA4KSk7CiAgICAgIH0KCiAgICAgIHZhYWRpbi1ncmlkLXRhYmxlLWZvb3RlciAudmFhZGluLWdyaWQtcm93OmZpcnN0LWNoaWxkIC52YWFkaW4tZ3JpZC1jZWxsIDo6c2xvdHRlZCh2YWFkaW4tZ3JpZC1jZWxsLWNvbnRlbnQpIHsKICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgdmFyKC0tZGl2aWRlci1jb2xvciwgcmdiYSgwLCAwLCAwLCAwLjA4KSk7CiAgICAgIH0KCiAgICAgIHZhYWRpbi1ncmlkLXRhYmxlLWJvZHkgLnZhYWRpbi1ncmlkLXJvdzpub3QoW2xhc3Ryb3ddKSAudmFhZGluLWdyaWQtY2VsbCA6OnNsb3R0ZWQodmFhZGluLWdyaWQtY2VsbC1jb250ZW50KSB7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLWRpdmlkZXItY29sb3IsIHJnYmEoMCwgMCwgMCwgMC4wOCkpOwogICAgICB9CgogICAgICBbbGFzdC1mcm96ZW5dIDo6c2xvdHRlZCh2YWFkaW4tZ3JpZC1jZWxsLWNvbnRlbnQpIHsKICAgICAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCB2YXIoLS1kaXZpZGVyLWNvbG9yLCByZ2JhKDAsIDAsIDAsIDAuMDgpKTsKICAgICAgfQoKICAgICAgLyogQ29sdW1uIHJlc2l6ZSBoYW5kbGUgKi8KCiAgICAgIC52YWFkaW4tZ3JpZC1jb2x1bW4tcmVzaXplLWhhbmRsZSB7CiAgICAgICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgdmFyKC0tZGl2aWRlci1jb2xvciwgcmdiYSgwLCAwLCAwLCAwLjA4KSk7CiAgICAgICAgQGFwcGx5KC0tdmFhZGluLWdyaWQtY29sdW1uLXJlc2l6ZS1oYW5kbGUpOwogICAgICB9CgogICAgICAvKiBDZWxscyAqLwogICAgICB2YWFkaW4tZ3JpZC10YWJsZSAudmFhZGluLWdyaWQtcm93IC52YWFkaW4tZ3JpZC1jZWxsOm5vdChbZGV0YWlsc2NlbGxdKSA6OnNsb3R0ZWQodmFhZGluLWdyaWQtY2VsbC1jb250ZW50KSB7CiAgICAgICAgYmFja2dyb3VuZDogI2ZmZjsKICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OwogICAgICAgIHBhZGRpbmc6IDhweDsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgIEBhcHBseSgtLXZhYWRpbi1ncmlkLWNlbGwpOwogICAgICB9CgogICAgICB2YWFkaW4tZ3JpZC10YWJsZS1oZWFkZXIgLnZhYWRpbi1ncmlkLXJvdyAudmFhZGluLWdyaWQtY2VsbDpub3QoW2RldGFpbHNjZWxsXSkgOjpzbG90dGVkKHZhYWRpbi1ncmlkLWNlbGwtY29udGVudCkgewogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgQGFwcGx5KC0tdmFhZGluLWdyaWQtaGVhZGVyLWNlbGwpOwogICAgICB9CgogICAgICB2YWFkaW4tZ3JpZC10YWJsZS1mb290ZXIgLnZhYWRpbi1ncmlkLXJvdyAudmFhZGluLWdyaWQtY2VsbDpub3QoW2RldGFpbHNjZWxsXSkgOjpzbG90dGVkKHZhYWRpbi1ncmlkLWNlbGwtY29udGVudCkgewogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgQGFwcGx5KC0tdmFhZGluLWdyaWQtZm9vdGVyLWNlbGwpOwogICAgICB9CgogICAgICB2YWFkaW4tZ3JpZC10YWJsZS1ib2R5IC52YWFkaW4tZ3JpZC1yb3cgLnZhYWRpbi1ncmlkLWNlbGw6bm90KFtkZXRhaWxzY2VsbF0pIDo6c2xvdHRlZCh2YWFkaW4tZ3JpZC1jZWxsLWNvbnRlbnQpIHsKICAgICAgICBAYXBwbHkoLS12YWFkaW4tZ3JpZC1ib2R5LWNlbGwpOwogICAgICB9CgogICAgICB2YWFkaW4tZ3JpZC10YWJsZS1ib2R5IFtvZGRdIC52YWFkaW4tZ3JpZC1jZWxsOm5vdChbZGV0YWlsc2NlbGxdKSA6OnNsb3R0ZWQodmFhZGluLWdyaWQtY2VsbC1jb250ZW50KSB7CiAgICAgICAgQGFwcGx5KC0tdmFhZGluLWdyaWQtYm9keS1yb3ctb2RkLWNlbGwpOwogICAgICB9CgogICAgICB2YWFkaW4tZ3JpZC10YWJsZSAudmFhZGluLWdyaWQtcm93IC52YWFkaW4tZ3JpZC1jZWxsOm5vdChbZGV0YWlsc2NlbGxdKVtsYXN0LWZyb3plbl0gOjpzbG90dGVkKHZhYWRpbi1ncmlkLWNlbGwtY29udGVudCkgewogICAgICAgIEBhcHBseSgtLXZhYWRpbi1ncmlkLWNlbGwtbGFzdC1mcm96ZW4pOwogICAgICB9CgogICAgICB2YWFkaW4tZ3JpZC10YWJsZTpub3QoW3Njcm9sbGluZ10pIHZhYWRpbi1ncmlkLXRhYmxlLWJvZHkgLnZhYWRpbi1ncmlkLXJvdzpob3ZlciAudmFhZGluLWdyaWQtY2VsbCA6OnNsb3R0ZWQodmFhZGluLWdyaWQtY2VsbC1jb250ZW50KSB7CiAgICAgICAgQGFwcGx5KC0tdmFhZGluLWdyaWQtYm9keS1yb3ctaG92ZXItY2VsbCk7CiAgICAgIH0KCiAgICAgIHZhYWRpbi1ncmlkLXRhYmxlIC52YWFkaW4tZ3JpZC1yb3cgLnZhYWRpbi1ncmlkLWNlbGwudmFhZGluLWdyaWQtY2VsbFtsYXN0Y29sdW1uXSA6OnNsb3R0ZWQodmFhZGluLWdyaWQtY2VsbC1jb250ZW50KSB7CiAgICAgICAgYm9yZGVyLXJpZ2h0OiBub25lOwogICAgICB9CgogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+Cgo8ZG9tLW1vZHVsZSBpZD0idmFhZGluLWdyaWQtdGFibGUiPgogIDx0ZW1wbGF0ZT4KICAgICAgPHN0eWxlIGluY2x1ZGU9InZhYWRpbi1ncmlkLXRhYmxlLXRhYmxlLXNjcm9sbC1zdHlsZXMiPjwvc3R5bGU+CiAgICAgIDxzdHlsZSBpbmNsdWRlPSJ2YWFkaW4tZ3JpZC10YWJsZS10YWJsZS1zdHlsZXMiPjwvc3R5bGU+CgogICAgICA8c3R5bGUgaW5jbHVkZT0idmFhZGluLWdyaWQtZGF0YS1wcm92aWRlci10aGVtYWJpbGl0eS1zdHlsZXMiPjwvc3R5bGU+CgogICAgICA8ZGl2IGlkPSJzcGlubmVyIj48L2Rpdj4KICAgICAgPGRpdiBpZD0idGFibGUiIHRhYmluZGV4PSItMSIgb3ZlcmZsb3ctaGlkZGVuJD0iW1tfaGlkZVRhYmxlT3ZlcmZsb3coc2Nyb2xsYmFyV2lkdGgsIHNhZmFyaSldXSI+CiAgICAgICAgPGRpdiBpZD0ic2l6ZXJ3cmFwcGVyIj4KICAgICAgICAgIDx2YWFkaW4tZ3JpZC1zaXplciBpZD0iZml4ZWRzaXplciIgdG9wPSJbW19lc3RTY3JvbGxIZWlnaHRdXSIgY29sdW1uLXRyZWU9IltbY29sdW1uVHJlZV1dIj48L3ZhYWRpbi1ncmlkLXNpemVyPgogICAgICAgIDwvZGl2PgogICAgICAgIDxzbG90IG5hbWU9ImhlYWRlciI+PC9zbG90PgogICAgICAgIDxzbG90IG5hbWU9Iml0ZW1zIj48L3Nsb3Q+CiAgICAgICAgPHNsb3QgbmFtZT0iZm9vdGVyIj48L3Nsb3Q+CiAgICAgIDwvZGl2PgoKICAgICAgPGRpdiBpZD0icmVvcmRlcmdob3N0Ij48L2Rpdj4KICAgICAgPHZhYWRpbi1ncmlkLXRhYmxlLW91dGVyLXNjcm9sbGVyIGlkPSJvdXRlcnNjcm9sbGVyIiBzY3JvbGwtdGFyZ2V0PSJbW3Njcm9sbFRhcmdldF1dIiBvdmVyZmxvdy1oaWRkZW4kPSJbW19oaWRlT3V0ZXJTY3JvbGxlcihzY3JvbGxiYXJXaWR0aCwgc2FmYXJpKV1dIiBpb3MkPSJbW2lvc11dIiBzY3JvbGxpbmckPSJbW3Njcm9sbGluZ11dIj4KICAgICAgPHZhYWRpbi1ncmlkLXNpemVyIGlkPSJvdXRlcnNpemVyIiB0b3A9IltbX2VzdFNjcm9sbEhlaWdodF1dIiBjb2x1bW4tdHJlZT0iW1tjb2x1bW5UcmVlXV0iPjwvdmFhZGluLWdyaWQtc2l6ZXI+CiAgICA8L3ZhYWRpbi1ncmlkLXRhYmxlLW91dGVyLXNjcm9sbGVyPgogICAgPHNsb3Q+PC9zbG90PgogICAgPHNsb3QgbmFtZT0iZm9vdGVyRm9jdXNUcmFwIj48L3Nsb3Q+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPgoKPHNjcmlwdD4vL35+V0VCUEFUSH5+L3ZhYWRpbi1ncmlkL3ZhYWRpbi1ncmlkLXRhYmxlLmh0bWwuanMKUG9seW1lcih7aXM6InZhYWRpbi1ncmlkLXRhYmxlIixiZWhhdmlvcnM6W3ZhYWRpbi5lbGVtZW50cy5ncmlkLklyb25MaXN0QmVoYXZpb3IsdmFhZGluLmVsZW1lbnRzLmdyaWQuVGFibGVTY3JvbGxCZWhhdmlvcix2YWFkaW4uZWxlbWVudHMuZ3JpZC5UYWJsZUNvbHVtblJlb3JkZXJpbmdCZWhhdmlvcixQb2x5bWVyLlRlbXBsYXRpemVyXSxwcm9wZXJ0aWVzOntzaXplOk51bWJlcixjb2x1bW5UcmVlOkFycmF5LGJpbmREYXRhOkZ1bmN0aW9uLHJvd0RldGFpbHNUZW1wbGF0ZTpPYmplY3QsY29sdW1uUmVvcmRlcmluZ0FsbG93ZWQ6e3R5cGU6Qm9vbGVhbixyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9LHNhZmFyaTp7dHlwZTpCb29sZWFuLHZhbHVlOi9eKCg/IWNocm9tZXxhbmRyb2lkKS4pKnNhZmFyaS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCl9LHNjcm9sbGJhcldpZHRoOnt0eXBlOk51bWJlcix2YWx1ZTpmdW5jdGlvbigpe3ZhciBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwphLnN0eWxlLndpZHRoPSIxMDBweCI7YS5zdHlsZS5oZWlnaHQ9IjEwMHB4IjthLnN0eWxlLm92ZXJmbG93PSJzY3JvbGwiO2Euc3R5bGUucG9zaXRpb249ImFic29sdXRlIjthLnN0eWxlLnRvcD0iLTk5OTlweCI7ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChhKTt2YXIgYz1hLm9mZnNldFdpZHRoLWEuY2xpZW50V2lkdGg7ZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChhKTtyZXR1cm4gY319LHRhcmdldDpPYmplY3QsaGFzRGF0YTpCb29sZWFufSxvYnNlcnZlcnM6WyJfY29sdW1uVHJlZUNoYW5nZWQoY29sdW1uVHJlZSwgX3BoeXNpY2FsSXRlbXMsIF9waHlzaWNhbENvdW50VmFsKSIsIl9zaXplQ2hhbmdlZChzaXplLCBiaW5kRGF0YSwgaGFzRGF0YSkiLCJfcm93RGV0YWlsc1RlbXBsYXRlQ2hhbmdlZChyb3dEZXRhaWxzVGVtcGxhdGUsIF9waHlzaWNhbEl0ZW1zLCBfcGh5c2ljYWxDb3VudFZhbCkiXSxsaXN0ZW5lcnM6eyJwcm9wZXJ0eS1jaGFuZ2VkIjoiX2NvbHVtblByb3BDaGFuZ2VkIiwKYW5pbWF0aW9uZW5kOiJfb25BbmltYXRpb25FbmQiLCJjb2x1bW4tcmVzaXppbmciOiJfb25Db2x1bW5SZXNpemUifSxyZWFkeTpmdW5jdGlvbigpe3RoaXMuJD10aGlzLiR8fHt9O3RoaXMuJC5oZWFkZXI9dGhpcy5kb21Ib3N0LiQuaGVhZGVyO3RoaXMuJC5pdGVtcz10aGlzLmRvbUhvc3QuJC5pdGVtczt0aGlzLiQuZm9vdGVyPXRoaXMuZG9tSG9zdC4kLmZvb3Rlcn0sX29uQ29sdW1uUmVzaXplOmZ1bmN0aW9uKCl7dGhpcy50b2dnbGVBdHRyaWJ1dGUoImNvbHVtbi1yZXNpemluZyIsdGhpcy4kLmhlYWRlci5xdWVyeVNlbGVjdG9yKCJbY29sdW1uLXJlc2l6aW5nXSIpKTt0aGlzLl9ncmlkUmVzaXplSGFuZGxlcigpfSxfb25BbmltYXRpb25FbmQ6ZnVuY3Rpb24oYSl7L2FwcGVhci8udGVzdChhLmFuaW1hdGlvbk5hbWUpJiYodGhpcy5fcmVuZGVyKCksdGhpcy5fdXBkYXRlSGVhZGVyRm9vdGVyTWV0cmljcygpLGEuc3RvcFByb3BhZ2F0aW9uKCkpfSxfY29sdW1uUHJvcENoYW5nZWQ6ZnVuY3Rpb24oYSl7ImhlYWRlclRlbXBsYXRlIj09PQphLmRldGFpbC5wYXRoJiZ0aGlzLnRvZ2dsZUF0dHJpYnV0ZSgiaGFzLXRlbXBsYXRlcyIsITAsdGhpcy4kLmhlYWRlcik7ImZvb3RlclRlbXBsYXRlIj09PWEuZGV0YWlsLnBhdGgmJnRoaXMudG9nZ2xlQXR0cmlidXRlKCJoYXMtdGVtcGxhdGVzIiwhMCx0aGlzLiQuZm9vdGVyKTsvZnJvemVufGhpZGRlbi8udGVzdChhLmRldGFpbC5wYXRoKSYmdGhpcy5fZnJvemVuQ2VsbHNDaGFuZ2VkKCk7ImhpZGRlbiI9PT1hLmRldGFpbC5wYXRoJiZ0aGlzLl9ncmlkUmVzaXplSGFuZGxlcigpfSxfaGlkZU91dGVyU2Nyb2xsZXI6ZnVuY3Rpb24oYSxjKXtyZXR1cm4gMD09PWEmJiFjfSxfaGlkZVRhYmxlT3ZlcmZsb3c6ZnVuY3Rpb24oYSxjKXtyZXR1cm4gMD09PWEmJmN9LF9yb3dEZXRhaWxzVGVtcGxhdGVDaGFuZ2VkOmZ1bmN0aW9uKGEsYyxkKXt2b2lkIDAhPT1hJiZjJiZ2b2lkIDAhPT1kJiZBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKGMsZnVuY3Rpb24oZil7Zi5yb3dEZXRhaWxzVGVtcGxhdGU9CmF9KX0sX2NvbHVtblRyZWVDaGFuZ2VkOmZ1bmN0aW9uKGEsYyxkKXt2b2lkIDAhPT1hJiZjJiZ2b2lkIDAhPT1kJiYoUG9seW1lci5SZW5kZXJTdGF0dXMuYWZ0ZXJOZXh0UmVuZGVyKHRoaXMsdGhpcy5fdXBkYXRlKSx0aGlzLl9mcm96ZW5DZWxsc0NoYW5nZWQoKSx0aGlzLl9oYXNUZW1wbGF0ZXNDaGFuZ2VkKGEpLEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwoYyxmdW5jdGlvbihmKXtmLmNvbHVtbnM9YVthLmxlbmd0aC0xXX0pLHRoaXMuX2dyaWRSZXNpemVIYW5kbGVyKCksUG9seW1lci5kb20uZmx1c2godGhpcyksdGhpcy5fdXBkYXRlTGFzdENvbHVtbigpKX0sX3VwZGF0ZUxhc3RDb2x1bW46ZnVuY3Rpb24oKXtBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKFBvbHltZXIuZG9tKHRoaXMuZG9tSG9zdC5yb290KS5xdWVyeVNlbGVjdG9yQWxsKCIudmFhZGluLWdyaWQtcm93IiksZnVuY3Rpb24oYSl7YS51cGRhdGVMYXN0Q29sdW1uKCl9KX0sX3VwZGF0ZUhlYWRlckZvb3Rlck1ldHJpY3M6ZnVuY3Rpb24oKXt0aGlzLl9waHlzaWNhbFNpemVzJiYKUG9seW1lci5kb20uZmx1c2goKTt0aGlzLl91cGRhdGVIZWFkZXJGb290ZXJNZXRyaWNzU3luYygpO1BvbHltZXIuUmVuZGVyU3RhdHVzLmFmdGVyTmV4dFJlbmRlcih0aGlzLiQuaGVhZGVyLGZ1bmN0aW9uKCl7dGhpcy5fdXBkYXRlSGVhZGVyRm9vdGVyTWV0cmljc1N5bmMoKTt0aGlzLl9wZW5kaW5nU2Nyb2xsVG9TY2FsZWRJbmRleCYmdGhpcy5zY3JvbGxUb1NjYWxlZEluZGV4KHRoaXMuX3BlbmRpbmdTY3JvbGxUb1NjYWxlZEluZGV4KX0uYmluZCh0aGlzKSl9LF91cGRhdGVIZWFkZXJGb290ZXJNZXRyaWNzU3luYzpmdW5jdGlvbigpe3ZhciBhPXRoaXMuJC5oZWFkZXIuY2xpZW50SGVpZ2h0KyJweCIsYz10aGlzLiQuZm9vdGVyLmNsaWVudEhlaWdodCsicHgiO1t0aGlzLiQub3V0ZXJzaXplcix0aGlzLiQuZml4ZWRzaXplcix0aGlzLiQuaXRlbXNdLmZvckVhY2goZnVuY3Rpb24oZCl7ZC5zdHlsZS5ib3JkZXJUb3BXaWR0aD1hO2Quc3R5bGUuYm9yZGVyQm90dG9tV2lkdGg9CmN9KX0sX2hhc1RlbXBsYXRlc0NoYW5nZWQ6ZnVuY3Rpb24oYSl7dmFyIGM9ITEsZD0hMTthLmZvckVhY2goZnVuY3Rpb24oZil7cmV0dXJuIGYuZm9yRWFjaChmdW5jdGlvbihnKXtjPWN8fGcuaGVhZGVyVGVtcGxhdGU7ZD1kfHxnLmZvb3RlclRlbXBsYXRlfSl9KTt0aGlzLnRvZ2dsZUF0dHJpYnV0ZSgiaGFzLXRlbXBsYXRlcyIsYyx0aGlzLiQuaGVhZGVyKTt0aGlzLnRvZ2dsZUF0dHJpYnV0ZSgiaGFzLXRlbXBsYXRlcyIsZCx0aGlzLiQuZm9vdGVyKX0sX2NyZWF0ZVBvb2w6ZnVuY3Rpb24oYSl7Zm9yKHZhciBjPUFycmF5KGEpLGQ9MDtkPGE7ZCsrKXt2YXIgZj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ2YWFkaW4tZ3JpZC10YWJsZS1yb3ciKTtmLnRhcmdldD10aGlzLmRvbUhvc3Q7Y1tkXT1mO2Yuc2V0QXR0cmlidXRlKCJoaWRkZW4iLCIiKTtQb2x5bWVyLmRvbSh0aGlzLiQuaXRlbXMpLmFwcGVuZENoaWxkKGYpfXJldHVybiBjfSxfc2l6ZUNoYW5nZWQ6ZnVuY3Rpb24oYSwKYyxkKXtpZih2b2lkIDAhPT1hJiZ2b2lkIDAhPT1jJiZ2b2lkIDAhPT1kKXt2YXIgZj10aGlzLl9zY3JvbGxUb3AsZz10aGlzLmZpcnN0VmlzaWJsZUluZGV4K3RoaXMuX3ZpZHhPZmZzZXQ7dGhpcy5fdmlydHVhbENvdW50PU1hdGgubWluKGEsMUU1KTt0aGlzLl9waHlzaWNhbEluZGV4Rm9yS2V5PXt9O3RoaXMuX2xhc3RWaXNpYmxlSW5kZXhWYWw9dGhpcy5fZmlyc3RWaXNpYmxlSW5kZXhWYWw9bnVsbDt0aGlzLl92aWR4T2Zmc2V0PTA7dGhpcy5fcGh5c2ljYWxJdGVtc3x8KHRoaXMuX3BoeXNpY2FsQ291bnQ9TWF0aC5tYXgoMSxNYXRoLm1pbigyNSx0aGlzLl92aXJ0dWFsQ291bnQpKSx0aGlzLl9waHlzaWNhbEl0ZW1zPXRoaXMuX2NyZWF0ZVBvb2wodGhpcy5fcGh5c2ljYWxDb3VudCksdGhpcy5fcGh5c2ljYWxTaXplcz1BcnJheSh0aGlzLl9waHlzaWNhbENvdW50KSk7dGhpcy5faXRlbXNSZW5kZXJlZD0hMTt0aGlzLl9kZWJvdW5jZVRlbXBsYXRlKGZ1bmN0aW9uKCl7dGhpcy5fcmVuZGVyKCk7CnRoaXMuX3ZpZXdwb3J0SGVpZ2h0JiYodGhpcy5zY3JvbGxUb1NjYWxlZEluZGV4KE1hdGgubWluKGcsdGhpcy5zaXplKSksdGhpcy5fc2Nyb2xsVG9wPWYsdGhpcy5fc2Nyb2xsSGFuZGxlcigpLHRoaXMuZmx1c2hEZWJvdW5jZXIoInZhYWRpbi1ncmlkLXNjcm9sbGluZyIpKX0pfX0sX2Fzc2lnbk1vZGVsczpmdW5jdGlvbihhKXt0aGlzLl92aXJ0dWFsSW5kZXhUb0l0ZW09dGhpcy5fdmlydHVhbEluZGV4VG9JdGVtfHx7fTt0aGlzLl9pdGVyYXRlSXRlbXMoZnVuY3Rpb24oYyxkKXtjPXRoaXMuX3BoeXNpY2FsSXRlbXNbY107Yy5pbmRleCYmZGVsZXRlIHRoaXMuX3ZpcnR1YWxJbmRleFRvSXRlbVtjLmluZGV4XTtjLmluZGV4PWQrdGhpcy5fdmlkeE9mZnNldDt0aGlzLl92aXJ0dWFsSW5kZXhUb0l0ZW1bYy5pbmRleF09YztjLnRvZ2dsZUF0dHJpYnV0ZSgib2RkIixjLmluZGV4JTIpO2MudG9nZ2xlQXR0cmlidXRlKCJsYXN0cm93IixjLmluZGV4PT09dGhpcy5zaXplLTEpO2MudG9nZ2xlQXR0cmlidXRlKCJoaWRkZW4iLApjLmluZGV4Pj10aGlzLnNpemUpO3RoaXMuYmluZERhdGEoYy5pbmRleCxjKX0sYSl9LF9ncmlkUmVzaXplSGFuZGxlcjpmdW5jdGlvbigpe3RoaXMuX3VwZGF0ZUhlYWRlckZvb3Rlck1ldHJpY3MoKTt0aGlzLl9waHlzaWNhbFNpemVzJiYodGhpcy5fcGh5c2ljYWxJdGVtcy5mb3JFYWNoKGZ1bmN0aW9uKGEpe2EudXBkYXRlUm93RGV0YWlsc0NlbGxNZXRyaWNzKCl9KSx0aGlzLmRlYm91bmNlKCJ2YWFkaW4tZ3JpZC1yZXNpemluZyIsZnVuY3Rpb24oKXt0aGlzLl91cGRhdGUoKX0uYmluZCh0aGlzKSwxKSl9fSk7Cjwvc2NyaXB0PgoKCgoKPHNjcmlwdD4vL35+V0VCUEFUSH5+L3ZhYWRpbi1ncmlkL3ZhYWRpbi1ncmlkLWNvbHVtbi5odG1sLmpzCndpbmRvdy52YWFkaW49d2luZG93LnZhYWRpbnx8e307dmFhZGluLmVsZW1lbnRzPXZhYWRpbi5lbGVtZW50c3x8e307dmFhZGluLmVsZW1lbnRzLmdyaWQ9dmFhZGluLmVsZW1lbnRzLmdyaWR8fHt9Owp2YWFkaW4uZWxlbWVudHMuZ3JpZC5Db2x1bW5CYXNlQmVoYXZpb3I9e3Byb3BlcnRpZXM6e3Jlc2l6YWJsZTp7dHlwZTpCb29sZWFuLHZhbHVlOmZ1bmN0aW9uKCl7aWYoInZhYWRpbi1ncmlkLWNvbHVtbi1ncm91cCIhPT10aGlzLmxvY2FsTmFtZSl7dmFyIGE9UG9seW1lci5kb20odGhpcykucGFyZW50Tm9kZTtyZXR1cm4gYSYmInZhYWRpbi1ncmlkLWNvbHVtbi1ncm91cCI9PT1hLmxvY2FsTmFtZT9hLnJlc2l6YWJsZXx8ITE6ITF9fX0saGVhZGVyVGVtcGxhdGU6e3R5cGU6T2JqZWN0fSxmb290ZXJUZW1wbGF0ZTp7dHlwZTpPYmplY3R9LGZyb3plbjp7dHlwZTpCb29sZWFuLG5vdGlmeTohMCx2YWx1ZTohMX0saGlkZGVuOnt0eXBlOkJvb2xlYW4sbm90aWZ5OiEwfSxfbGFzdEZyb3plbjp7dHlwZTpCb29sZWFuLG5vdGlmeTohMCx2YWx1ZTohMX0sX29yZGVyOk51bWJlcixfcmVvcmRlclN0YXR1czpCb29sZWFufSxvYnNlcnZlcnM6WyJfZm9vdGVyVGVtcGxhdGVDaGFuZ2VkKGZvb3RlclRlbXBsYXRlKSIsCiJfaGVhZGVyVGVtcGxhdGVDaGFuZ2VkKGhlYWRlclRlbXBsYXRlKSIsIl9sYXN0RnJvemVuQ2hhbmdlZChfbGFzdEZyb3plbikiXSxjcmVhdGVkOmZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShjKXswPD1jLmFkZGVkTm9kZXMubGVuZ3RoJiYodGhpcy5oZWFkZXJUZW1wbGF0ZT10aGlzLl9wcmVwYXJlSGVhZGVyVGVtcGxhdGUoKSx0aGlzLmZvb3RlclRlbXBsYXRlPXRoaXMuX3ByZXBhcmVGb290ZXJUZW1wbGF0ZSgpLHRoaXMudGVtcGxhdGU9dGhpcy5fcHJlcGFyZUJvZHlUZW1wbGF0ZSgpKX10aGlzLl90ZW1wbGF0ZU9ic2VydmVyPVBvbHltZXIuRWxlbWVudD9uZXcgUG9seW1lci5GbGF0dGVuZWROb2Rlc09ic2VydmVyKHRoaXMsYSk6UG9seW1lci5kb20odGhpcykub2JzZXJ2ZU5vZGVzKGEpfSxfcHJlcGFyZUhlYWRlclRlbXBsYXRlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByZXBhcmVUZW1wbGF0aXplcih0aGlzLl9maW5kVGVtcGxhdGUoInRlbXBsYXRlLmhlYWRlciIpfHxudWxsLAp7fSl9LF9wcmVwYXJlRm9vdGVyVGVtcGxhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJlcGFyZVRlbXBsYXRpemVyKHRoaXMuX2ZpbmRUZW1wbGF0ZSgidGVtcGxhdGUuZm9vdGVyIil8fG51bGwse30pfSxfcHJlcGFyZUJvZHlUZW1wbGF0ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcmVwYXJlVGVtcGxhdGl6ZXIodGhpcy5fZmluZFRlbXBsYXRlKCJ0ZW1wbGF0ZTpub3QoLmhlYWRlcik6bm90KC5mb290ZXIpIix7fSkpfSxfcHJlcGFyZVRlbXBsYXRpemVyOmZ1bmN0aW9uKGEsYyl7aWYoYSYmIWEudGVtcGxhdGl6ZXIpe3ZhciBkPW5ldyB2YWFkaW4uZWxlbWVudHMuZ3JpZC5UZW1wbGF0aXplcjtkLmRhdGFIb3N0PXRoaXMuZGF0YUhvc3Q7ZC5faW5zdGFuY2VQcm9wcz1jfHxkLl9pbnN0YW5jZVByb3BzO2QudGVtcGxhdGU9YTthLnRlbXBsYXRpemVyPWR9cmV0dXJuIGF9LF9zZWxlY3RGaXJzdFRlbXBsYXRlOmZ1bmN0aW9uKGEpe3JldHVybiBBcnJheS5wcm90b3R5cGUuZmlsdGVyLmNhbGwoUG9seW1lci5kb20odGhpcykucXVlcnlTZWxlY3RvckFsbChhKSwKZnVuY3Rpb24oYyl7cmV0dXJuIFBvbHltZXIuZG9tKGMpLnBhcmVudE5vZGU9PT10aGlzfS5iaW5kKHRoaXMpKVswXX0sX2ZpbmRUZW1wbGF0ZTpmdW5jdGlvbihhKXsoYT10aGlzLl9zZWxlY3RGaXJzdFRlbXBsYXRlKGEpKSYmdGhpcy5kYXRhSG9zdCYmKGEuX3Jvb3REYXRhSG9zdD10aGlzLmRhdGFIb3N0Ll9yb290RGF0YUhvc3R8fHRoaXMuZGF0YUhvc3QpO3JldHVybiBhfSxfaGVhZGVyVGVtcGxhdGVDaGFuZ2VkOmZ1bmN0aW9uKGEpe3RoaXMuZmlyZSgicHJvcGVydHktY2hhbmdlZCIse3BhdGg6ImhlYWRlclRlbXBsYXRlIix2YWx1ZTphfSl9LF9mb290ZXJUZW1wbGF0ZUNoYW5nZWQ6ZnVuY3Rpb24oYSl7dGhpcy5maXJlKCJwcm9wZXJ0eS1jaGFuZ2VkIix7cGF0aDoiZm9vdGVyVGVtcGxhdGUiLHZhbHVlOmF9KX0sX2ZsZXhHcm93Q2hhbmdlZDpmdW5jdGlvbihhKXt0aGlzLmZpcmUoInByb3BlcnR5LWNoYW5nZWQiLHtwYXRoOiJmbGV4R3JvdyIsdmFsdWU6YX0pfSxfd2lkdGhDaGFuZ2VkOmZ1bmN0aW9uKGEpe3RoaXMuZmlyZSgicHJvcGVydHktY2hhbmdlZCIsCntwYXRoOiJ3aWR0aCIsdmFsdWU6YX0pfSxfbGFzdEZyb3plbkNoYW5nZWQ6ZnVuY3Rpb24oYSl7dGhpcy5maXJlKCJwcm9wZXJ0eS1jaGFuZ2VkIix7cGF0aDoibGFzdEZyb3plbiIsdmFsdWU6YX0pfX07CnZhYWRpbi5lbGVtZW50cy5ncmlkLkNvbHVtbkJlaGF2aW9ySW1wbD17cHJvcGVydGllczp7d2lkdGg6e3R5cGU6U3RyaW5nLHZhbHVlOiIxMDBweCJ9LGZsZXhHcm93Ont0eXBlOk51bWJlcix2YWx1ZToxfSx0ZW1wbGF0ZTp7dHlwZTpPYmplY3R9fSxvYnNlcnZlcnM6Il9mbGV4R3Jvd0NoYW5nZWQoZmxleEdyb3cpO193aWR0aENoYW5nZWQod2lkdGgpO190ZW1wbGF0ZUNoYW5nZWQodGVtcGxhdGUpO19mcm96ZW5DaGFuZ2VkKGZyb3plbiwgaXNBdHRhY2hlZCk7X2hpZGRlbkNoYW5nZWQoaGlkZGVuKTtfb3JkZXJDaGFuZ2VkKF9vcmRlcik7X3Jlb3JkZXJTdGF0dXNDaGFuZ2VkKF9yZW9yZGVyU3RhdHVzKTtfcmVzaXphYmxlQ2hhbmdlZChyZXNpemFibGUpIi5zcGxpdCgiOyIpLF9mcm96ZW5DaGFuZ2VkOmZ1bmN0aW9uKGEsYyl7dm9pZCAwIT09YSYmdm9pZCAwIT09YyYmKHZvaWQgMD09PXRoaXMuX29sZEZyb3plbiYmITE9PT1hfHx0aGlzLmZpcmUoInByb3BlcnR5LWNoYW5nZWQiLAp7cGF0aDoiZnJvemVuIix2YWx1ZTphfSksdGhpcy5fb2xkRnJvemVuPWEpfSxfdGVtcGxhdGVDaGFuZ2VkOmZ1bmN0aW9uKGEpe2EmJmEudGVtcGxhdGl6ZXImJlBvbHltZXIuZG9tKHRoaXMucm9vdCkuYXBwZW5kQ2hpbGQoYS50ZW1wbGF0aXplcik7dGhpcy5maXJlKCJwcm9wZXJ0eS1jaGFuZ2VkIix7cGF0aDoidGVtcGxhdGUiLHZhbHVlOmF9LHtidWJibGVzOiExfSl9LF9oaWRkZW5DaGFuZ2VkOmZ1bmN0aW9uKGEpe3RoaXMuZmlyZSgicHJvcGVydHktY2hhbmdlZCIse3BhdGg6ImhpZGRlbiIsdmFsdWU6YX0pfSxfb3JkZXJDaGFuZ2VkOmZ1bmN0aW9uKGEpe3RoaXMuZmlyZSgicHJvcGVydHktY2hhbmdlZCIse3BhdGg6Im9yZGVyIix2YWx1ZTphfSl9LF9yZW9yZGVyU3RhdHVzQ2hhbmdlZDpmdW5jdGlvbihhKXt0aGlzLmZpcmUoInByb3BlcnR5LWNoYW5nZWQiLHtwYXRoOiJyZW9yZGVyU3RhdHVzIix2YWx1ZTphfSl9LF9yZXNpemFibGVDaGFuZ2VkOmZ1bmN0aW9uKGEpe3RoaXMuZmlyZSgicHJvcGVydHktY2hhbmdlZCIsCntwYXRoOiJyZXNpemFibGUiLHZhbHVlOmF9KX19O3ZhYWRpbi5lbGVtZW50cy5ncmlkLkNvbHVtbkJlaGF2aW9yPVt2YWFkaW4uZWxlbWVudHMuZ3JpZC5Db2x1bW5CYXNlQmVoYXZpb3IsdmFhZGluLmVsZW1lbnRzLmdyaWQuQ29sdW1uQmVoYXZpb3JJbXBsXTsKPC9zY3JpcHQ+Cgo8ZG9tLW1vZHVsZSBpZD0idmFhZGluLWdyaWQtY29sdW1uIj4KICA8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdmFhZGluLWdyaWQvdmFhZGluLWdyaWQtY29sdW1uLmh0bWwtMi5qcwpQb2x5bWVyKHtpczoidmFhZGluLWdyaWQtY29sdW1uIixiZWhhdmlvcnM6W3ZhYWRpbi5lbGVtZW50cy5ncmlkLkNvbHVtbkJlaGF2aW9yXX0pOwo8L3NjcmlwdD4KPC9kb20tbW9kdWxlPgoKCgoKPHNjcmlwdD4vL35+V0VCUEFUSH5+L3ZhYWRpbi1ncmlkL3ZhYWRpbi1ncmlkLWFycmF5LWRhdGEtcHJvdmlkZXItYmVoYXZpb3IuaHRtbC5qcwp3aW5kb3cudmFhZGluPXdpbmRvdy52YWFkaW58fHt9O3ZhYWRpbi5lbGVtZW50cz12YWFkaW4uZWxlbWVudHN8fHt9O3ZhYWRpbi5lbGVtZW50cy5ncmlkPXZhYWRpbi5lbGVtZW50cy5ncmlkfHx7fTsKdmFhZGluLmVsZW1lbnRzLmdyaWQuQXJyYXlEYXRhUHJvdmlkZXJCZWhhdmlvcj17cHJvcGVydGllczp7aXRlbXM6QXJyYXl9LG9ic2VydmVyczpbIl9pdGVtc0NoYW5nZWQoaXRlbXMsIGl0ZW1zLiopIl0sX2l0ZW1zQ2hhbmdlZDpmdW5jdGlvbihhLGMpe3ZvaWQgMCE9PWEmJnZvaWQgMCE9PWMmJih0aGlzLnNpemU9KGF8fFtdKS5sZW5ndGgsdGhpcy5kYXRhUHJvdmlkZXI9dGhpcy5kYXRhUHJvdmlkZXJ8fHRoaXMuX2FycmF5RGF0YVByb3ZpZGVyLHRoaXMuY2xlYXJDYWNoZSgpKX0sX2FycmF5RGF0YVByb3ZpZGVyOmZ1bmN0aW9uKGEsYyl7dmFyIGQ9KHRoaXMuaXRlbXN8fFtdKS5zbGljZSgwKTt0aGlzLl9jaGVja1BhdGhzKHRoaXMuX2ZpbHRlcnMsImZpbHRlcmluZyIsZCkmJihkPXRoaXMuX2ZpbHRlcihkKSk7dGhpcy5zaXplPWQubGVuZ3RoO2Euc29ydE9yZGVycy5sZW5ndGgmJnRoaXMuX2NoZWNrUGF0aHModGhpcy5fc29ydGVycywic29ydGluZyIsZCkmJihkPWQuc29ydCh0aGlzLl9tdWx0aVNvcnQuYmluZCh0aGlzKSkpOwp2YXIgZj1hLnBhZ2UqYS5wYWdlU2l6ZTtjKGQuc2xpY2UoZixmK2EucGFnZVNpemUpLGQubGVuZ3RoKX0sX2NoZWNrUGF0aHM6ZnVuY3Rpb24oYSxjLGQpe2lmKCFkLmxlbmd0aClyZXR1cm4hMTt2YXIgZj0hMCxnO2ZvcihnIGluIGEpe3ZhciBsPWFbZ10ucGF0aDtpZihsJiYtMSE9PWwuaW5kZXhPZigiLiIpKXt2YXIgaz1sLnJlcGxhY2UoL1wuW15cLl0qJC8sIiIpO3ZvaWQgMD09PVBvbHltZXIuQmFzZS5nZXQoayxkWzBdKSYmKGNvbnNvbGUud2FybignUGF0aCAiJytsKyciIHVzZWQgZm9yICcrYysiIGRvZXMgbm90IGV4aXN0IGluIGFsbCBvZiB0aGUgaXRlbXMsICIrYysiIGlzIGRpc2FibGVkLiIpLGY9ITEpfX1yZXR1cm4gZn0sX211bHRpU29ydDpmdW5jdGlvbihhLGMpe3JldHVybiB0aGlzLl9zb3J0ZXJzLm1hcChmdW5jdGlvbihkKXtyZXR1cm4iYXNjIj09PWQuZGlyZWN0aW9uP3RoaXMuX2NvbXBhcmUoUG9seW1lci5CYXNlLmdldChkLnBhdGgsYSksUG9seW1lci5CYXNlLmdldChkLnBhdGgsCmMpKToiZGVzYyI9PT1kLmRpcmVjdGlvbj90aGlzLl9jb21wYXJlKFBvbHltZXIuQmFzZS5nZXQoZC5wYXRoLGMpLFBvbHltZXIuQmFzZS5nZXQoZC5wYXRoLGEpKTowfSx0aGlzKS5yZWR1Y2UoZnVuY3Rpb24oZCxmKXtyZXR1cm4gZD9kOmZ9LDApfSxfbm9ybWFsaXplRW1wdHlWYWx1ZTpmdW5jdGlvbihhKXtyZXR1cm4gMDw9W3ZvaWQgMCxudWxsXS5pbmRleE9mKGEpPyIiOmlzTmFOKGEpP2EudG9TdHJpbmcoKTphfSxfY29tcGFyZTpmdW5jdGlvbihhLGMpe2E9dGhpcy5fbm9ybWFsaXplRW1wdHlWYWx1ZShhKTtjPXRoaXMuX25vcm1hbGl6ZUVtcHR5VmFsdWUoYyk7cmV0dXJuIGE8Yz8tMTphPmM/MTowfSxfZmlsdGVyOmZ1bmN0aW9uKGEpe3JldHVybiBhLmZpbHRlcihmdW5jdGlvbihjKXtyZXR1cm4gMD09PXRoaXMuX2ZpbHRlcnMuZmlsdGVyKGZ1bmN0aW9uKGQpe3JldHVybi0xPT09dGhpcy5fbm9ybWFsaXplRW1wdHlWYWx1ZShQb2x5bWVyLkJhc2UuZ2V0KGQucGF0aCxjKSkudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpLmluZGV4T2YoZC52YWx1ZS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkpfS5iaW5kKHRoaXMpKS5sZW5ndGh9LAp0aGlzKX19Owo8L3NjcmlwdD4KCjxzY3JpcHQ+Ly9+fldFQlBBVEh+fi92YWFkaW4tZ3JpZC92YWFkaW4tZ3JpZC1keW5hbWljLWNvbHVtbnMtYmVoYXZpb3IuaHRtbC5qcwp3aW5kb3cudmFhZGluPXdpbmRvdy52YWFkaW58fHt9O3ZhYWRpbi5lbGVtZW50cz12YWFkaW4uZWxlbWVudHN8fHt9O3ZhYWRpbi5lbGVtZW50cy5ncmlkPXZhYWRpbi5lbGVtZW50cy5ncmlkfHx7fTsKdmFhZGluLmVsZW1lbnRzLmdyaWQuRHluYW1pY0NvbHVtbnNCZWhhdmlvcj17cmVhZHk6ZnVuY3Rpb24oKXt0aGlzLl9hZGROb2RlT2JzZXJ2ZXIoKX0sX2hhc0NvbHVtbkdyb3VwczpmdW5jdGlvbihhKXtmb3IodmFyIGM9MDtjPGEubGVuZ3RoO2MrKylpZigidmFhZGluLWdyaWQtY29sdW1uLWdyb3VwIj09PWFbY10ubG9jYWxOYW1lKXJldHVybiEwO3JldHVybiExfSxfZ2V0Q2hpbGRDb2x1bW5zOmZ1bmN0aW9uKGEpe3JldHVybiBQb2x5bWVyLmRvbShhKS5xdWVyeURpc3RyaWJ1dGVkRWxlbWVudHMoInZhYWRpbi1ncmlkLWNvbHVtbiwgdmFhZGluLWdyaWQtY29sdW1uLWdyb3VwLCB2YWFkaW4tZ3JpZC1zZWxlY3Rpb24tY29sdW1uIil9LF9mbGF0dGVuQ29sdW1uR3JvdXBzOmZ1bmN0aW9uKGEpe3JldHVybiBhLm1hcChmdW5jdGlvbihjKXtyZXR1cm4idmFhZGluLWdyaWQtY29sdW1uLWdyb3VwIj09PWMubG9jYWxOYW1lP3RoaXMuX2dldENoaWxkQ29sdW1ucyhjKTpbY119LHRoaXMpLnJlZHVjZShmdW5jdGlvbihjLApkKXtyZXR1cm4gYy5jb25jYXQoZCl9LFtdKX0sX2dldENvbHVtblRyZWU6ZnVuY3Rpb24oKXtmb3IodmFyIGE9W10sYz10aGlzLnF1ZXJ5QWxsRWZmZWN0aXZlQ2hpbGRyZW4oInZhYWRpbi1ncmlkLWNvbHVtbiwgdmFhZGluLWdyaWQtY29sdW1uLWdyb3VwLCB2YWFkaW4tZ3JpZC1zZWxlY3Rpb24tY29sdW1uIik7Oyl7YS5wdXNoKGMpO2lmKCF0aGlzLl9oYXNDb2x1bW5Hcm91cHMoYykpYnJlYWs7Yz10aGlzLl9mbGF0dGVuQ29sdW1uR3JvdXBzKGMpfXJldHVybiBhfSxfdXBkYXRlQ29sdW1uVHJlZTpmdW5jdGlvbigpe3ZhciBhPXRoaXMuX2dldENvbHVtblRyZWUoKTt0aGlzLl9hcnJheUVxdWFscyhhLHRoaXMuX2NvbHVtblRyZWUpfHwodGhpcy5fY29sdW1uVHJlZT1hKX0sX2FkZE5vZGVPYnNlcnZlcjpmdW5jdGlvbigpe3RoaXMuX29ic2VydmVyPVBvbHltZXIuZG9tKHRoaXMpLm9ic2VydmVOb2RlcyhmdW5jdGlvbihhKXtmdW5jdGlvbiBjKGQpe3JldHVybiBkLm5vZGVUeXBlPT09Ck5vZGUuRUxFTUVOVF9OT0RFJiYvXnZhYWRpbi1ncmlkLShjb2x1bW58c2VsZWN0aW9uKS9pLnRlc3QoZC5sb2NhbE5hbWUpfSgwPGEuYWRkZWROb2Rlcy5maWx0ZXIoYykubGVuZ3RofHwwPGEucmVtb3ZlZE5vZGVzLmZpbHRlcihjKS5sZW5ndGgpJiZ0aGlzLl91cGRhdGVDb2x1bW5UcmVlKCk7KFBvbHltZXIuU2V0dGluZ3MudXNlTmF0aXZlU2hhZG93fHxQb2x5bWVyLlNldHRpbmdzLnVzZVNoYWRvdykmJlBvbHltZXIuZG9tKHRoaXMpLmFwcGVuZENoaWxkKHRoaXMuJC5mb290ZXJGb2N1c1RyYXApO3RoaXMuZGVib3VuY2UoImNoZWNrLWltcG9ydHMiLHRoaXMuX2NoZWNrSW1wb3J0cywyRTMpfS5iaW5kKHRoaXMpKX0sX2FycmF5RXF1YWxzOmZ1bmN0aW9uKGEsYyl7aWYoIWF8fCFjfHxhLmxlbmd0aCE9Yy5sZW5ndGgpcmV0dXJuITE7Zm9yKHZhciBkPTAsZj1hLmxlbmd0aDtkPGY7ZCsrKWlmKGFbZF1pbnN0YW5jZW9mIEFycmF5JiZjW2RdaW5zdGFuY2VvZiBBcnJheSl7aWYoIXRoaXMuX2FycmF5RXF1YWxzKGFbZF0sCmNbZF0pKXJldHVybiExfWVsc2UgaWYoYVtkXSE9Y1tkXSlyZXR1cm4hMTtyZXR1cm4hMH0sX2NoZWNrSW1wb3J0czpmdW5jdGlvbigpe1sidmFhZGluLWdyaWQtY29sdW1uLWdyb3VwIiwidmFhZGluLWdyaWQtc29ydGVyIiwidmFhZGluLWdyaWQtZmlsdGVyIiwidmFhZGluLWdyaWQtc2VsZWN0aW9uLWNvbHVtbiJdLmZvckVhY2goZnVuY3Rpb24oYSl7dmFyIGM9UG9seW1lci5kb20odGhpcykucXVlcnlTZWxlY3RvcihhKTshY3x8KFBvbHltZXIuaXNJbnN0YW5jZT9Qb2x5bWVyLmlzSW5zdGFuY2UoYyk6YyBpbnN0YW5jZW9mIFBvbHltZXIuRWxlbWVudCl8fGNvbnNvbGUud2FybigiTWFrZSBzdXJlIHlvdSBoYXZlIGltcG9ydGVkIHRoZSByZXF1aXJlZCBtb2R1bGUgZm9yIFx4M2MiK2ErIlx4M2UgZWxlbWVudC4iKX0sdGhpcyl9fTsKPC9zY3JpcHQ+CgoKPHNjcmlwdD4vL35+V0VCUEFUSH5+L3ZhYWRpbi1ncmlkL3ZhYWRpbi1ncmlkLXNvcnQtYmVoYXZpb3IuaHRtbC5qcwp3aW5kb3cudmFhZGluPXdpbmRvdy52YWFkaW58fHt9O3ZhYWRpbi5lbGVtZW50cz12YWFkaW4uZWxlbWVudHN8fHt9O3ZhYWRpbi5lbGVtZW50cy5ncmlkPXZhYWRpbi5lbGVtZW50cy5ncmlkfHx7fTsKdmFhZGluLmVsZW1lbnRzLmdyaWQuU29ydEJlaGF2aW9yPXtwcm9wZXJ0aWVzOnttdWx0aVNvcnQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sX3NvcnRlcnM6e3R5cGU6QXJyYXksdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm5bXX19LF9wcmV2aW91c1NvcnRlcnM6e3R5cGU6QXJyYXksdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm5bXX19fSxsaXN0ZW5lcnM6eyJzb3J0ZXItY2hhbmdlZCI6Il9vblNvcnRlckNoYW5nZWQifSxyZWFkeTpmdW5jdGlvbigpe1BvbHltZXIuRWxlbWVudCYmIVBvbHltZXIuU2V0dGluZ3MudXNlTmF0aXZlU2hhZG93JiZ0aGlzLmFzeW5jKGZ1bmN0aW9uKCl7dmFyIGE9UG9seW1lci5kb20odGhpcykucXVlcnlTZWxlY3RvckFsbCgidmFhZGluLWdyaWQtc29ydGVyIik7QXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbChhLGZ1bmN0aW9uKGMpe2MuZmlyZSYmYy5maXJlKCJzb3J0ZXItY2hhbmdlZCIpfSl9KX0sX29uU29ydGVyQ2hhbmdlZDpmdW5jdGlvbihhKXt2YXIgYz0KYS50YXJnZXQ7dGhpcy5fcmVtb3ZlQXJyYXlJdGVtKHRoaXMuX3NvcnRlcnMsYyk7Yy5fb3JkZXI9bnVsbDt0aGlzLm11bHRpU29ydD8oYy5kaXJlY3Rpb24mJnRoaXMuX3NvcnRlcnMudW5zaGlmdChjKSx0aGlzLl9zb3J0ZXJzLmZvckVhY2goZnVuY3Rpb24oZCxmKXtkLl9vcmRlcj0xPHRoaXMuX3NvcnRlcnMubGVuZ3RoP2Y6bnVsbH0sdGhpcykpOih0aGlzLl9zb3J0ZXJzLmZvckVhY2goZnVuY3Rpb24oZCl7ZC5fb3JkZXI9bnVsbDtkLmRpcmVjdGlvbj1udWxsfSksYy5kaXJlY3Rpb24mJih0aGlzLl9zb3J0ZXJzPVtjXSkpO2Euc3RvcFByb3BhZ2F0aW9uKCk7dGhpcy5kYXRhUHJvdmlkZXImJkpTT04uc3RyaW5naWZ5KHRoaXMuX3ByZXZpb3VzU29ydGVycykhPT1KU09OLnN0cmluZ2lmeSh0aGlzLl9tYXBTb3J0ZXJzKCkpJiZ0aGlzLmNsZWFyQ2FjaGUoKTt0aGlzLl9wcmV2aW91c1NvcnRlcnM9dGhpcy5fbWFwU29ydGVycygpfSxfbWFwU29ydGVyczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zb3J0ZXJzLm1hcChmdW5jdGlvbihhKXtyZXR1cm57cGF0aDphLnBhdGgsCmRpcmVjdGlvbjphLmRpcmVjdGlvbn19KX0sX3JlbW92ZUFycmF5SXRlbTpmdW5jdGlvbihhLGMpe2M9YS5pbmRleE9mKGMpOy0xPGMmJmEuc3BsaWNlKGMsMSl9fTsKPC9zY3JpcHQ+Cgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdmFhZGluLWdyaWQvdmFhZGluLWdyaWQtZmlsdGVyLWJlaGF2aW9yLmh0bWwuanMKd2luZG93LnZhYWRpbj13aW5kb3cudmFhZGlufHx7fTt2YWFkaW4uZWxlbWVudHM9dmFhZGluLmVsZW1lbnRzfHx7fTt2YWFkaW4uZWxlbWVudHMuZ3JpZD12YWFkaW4uZWxlbWVudHMuZ3JpZHx8e307dmFhZGluLmVsZW1lbnRzLmdyaWQuRmlsdGVyQmVoYXZpb3I9e3Byb3BlcnRpZXM6e19maWx0ZXJzOnt0eXBlOkFycmF5LHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuW119fX0sbGlzdGVuZXJzOnsiZmlsdGVyLWNoYW5nZWQiOiJfZmlsdGVyQ2hhbmdlZCJ9LF9maWx0ZXJDaGFuZ2VkOmZ1bmN0aW9uKGEpey0xPT09dGhpcy5fZmlsdGVycy5pbmRleE9mKGEudGFyZ2V0KSYmdGhpcy5fZmlsdGVycy5wdXNoKGEudGFyZ2V0KTthLnN0b3BQcm9wYWdhdGlvbigpO3RoaXMuZGF0YVByb3ZpZGVyJiZ0aGlzLmNsZWFyQ2FjaGUoKX0sX21hcEZpbHRlcnM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZmlsdGVycy5tYXAoZnVuY3Rpb24oYSl7cmV0dXJue3BhdGg6YS5wYXRoLHZhbHVlOmEudmFsdWV9fSl9fTsKPC9zY3JpcHQ+CgoKCjxkb20tbW9kdWxlIGlkPSJ2YWFkaW4tZ3JpZCI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgaGVpZ2h0OiA0MDBweDsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1wcmltYXJ5LWJhY2tncm91bmQtY29sb3IsICNmZmYpOwogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tZGl2aWRlci1jb2xvciwgcmdiYSgwLCAwLCAwLCAwLjA4KSk7CiAgICAgIH0KCiAgICAgIDpob3N0KDpmb2N1cykgewogICAgICAgIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogdHJhbnNwYXJlbnQ7CiAgICAgIH0KCiAgICAgIDpob3N0KDpmb2N1cykgewogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgIH0KCiAgICAgICNzY3JvbGxlciB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxzdHlsZSBpbmNsdWRlPSJ2YWFkaW4tZ3JpZC10YWJsZS1zY3JvbGwtc3R5bGVzIj48L3N0eWxlPgogICAgPHN0eWxlIGluY2x1ZGU9InZhYWRpbi1ncmlkLXJvdy1kZXRhaWxzLXN0eWxlcyI+PC9zdHlsZT4KICAgIDxzdHlsZSBpbmNsdWRlPSJ2YWFkaW4tZ3JpZC10YWJsZS1zdHlsZXMiPjwvc3R5bGU+CgogICAgPHN0eWxlIGluY2x1ZGU9InZhYWRpbi1ncmlkLXRhYmxlLXRoZW1hYmlsaXR5LXN0eWxlcyI+PC9zdHlsZT4KICAgIDxzdHlsZSBpbmNsdWRlPSJ2YWFkaW4tZ3JpZC1zZWxlY3Rpb24tdGhlbWFiaWxpdHktc3R5bGVzIj48L3N0eWxlPgogICAgPHN0eWxlIGluY2x1ZGU9InZhYWRpbi1ncmlkLW5hdmlnYXRpb24tdGhlbWFiaWxpdHktc3R5bGVzIj48L3N0eWxlPgogICAgPHN0eWxlIGluY2x1ZGU9InZhYWRpbi1ncmlkLWFjdGl2ZS1pdGVtLXRoZW1hYmlsaXR5LXN0eWxlcyI+PC9zdHlsZT4KICAgIDxzdHlsZSBpbmNsdWRlPSJ2YWFkaW4tZ3JpZC1yb3ctZGV0YWlscy10aGVtYWJpbGl0eS1zdHlsZXMiPjwvc3R5bGU+CiAgICA8c3R5bGUgaW5jbHVkZT0idmFhZGluLWdyaWQtY29sdW1uLXJlb3JkZXJpbmctdGhlbWFiaWxpdHktc3R5bGVzIj48L3N0eWxlPgoKICAgIDx2YWFkaW4tZ3JpZC10YWJsZSBpZD0ic2Nyb2xsZXIiIGxvYWRpbmckPSJbW19sb2FkaW5nXV0iIGJpbmQtZGF0YT0iW1tfYmluZERhdGFdXSIgc2l6ZT0iW1tzaXplXV0iIGNvbHVtbi10cmVlPSJbW19jb2x1bW5UcmVlXV0iIHJvdy1kZXRhaWxzLXRlbXBsYXRlPSJbW19yb3dEZXRhaWxzVGVtcGxhdGVdXSIgY29sdW1uLXJlb3JkZXJpbmctYWxsb3dlZD0iW1tjb2x1bW5SZW9yZGVyaW5nQWxsb3dlZF1dIj4KICAgICAgPHZhYWRpbi1ncmlkLXRhYmxlLWhlYWRlciBpZD0iaGVhZGVyIiBzbG90PSJoZWFkZXIiIHRhcmdldD0iW1tfZ2V0Q29udGVudFRhcmdldCgpXV0iIGNvbHVtbi10cmVlPSJbW19jb2x1bW5UcmVlXV0iPjwvdmFhZGluLWdyaWQtdGFibGUtaGVhZGVyPgogICAgICA8dmFhZGluLWdyaWQtdGFibGUtYm9keSBpZD0iaXRlbXMiIHNsb3Q9Iml0ZW1zIj48L3ZhYWRpbi1ncmlkLXRhYmxlLWJvZHk+CiAgICAgIDx2YWFkaW4tZ3JpZC10YWJsZS1mb290ZXIgaWQ9ImZvb3RlciIgc2xvdD0iZm9vdGVyIiB0YXJnZXQ9IltbX2dldENvbnRlbnRUYXJnZXQoKV1dIiBjb2x1bW4tdHJlZT0iW1tfY29sdW1uVHJlZV1dIj48L3ZhYWRpbi1ncmlkLXRhYmxlLWZvb3Rlcj4KCiAgICAgIAogICAgICA8c2xvdCBuYW1lPSJmb290ZXJGb2N1c1RyYXAiPjwvc2xvdD4KCiAgICAgIAogICAgICAKICAgICAgPHNsb3Q+PC9zbG90PgoKICAgICAgPHZhYWRpbi1ncmlkLXRhYmxlLWZvY3VzLXRyYXAgaWQ9ImZvb3RlckZvY3VzVHJhcCIgc2xvdD0iZm9vdGVyRm9jdXNUcmFwIiBvbi1mb2N1cy1nYWluZWQ9Il9vbkZvb3RlckZvY3VzIiBvbi1mb2N1cy1sb3N0PSJfb25Gb2N1c291dCI+CiAgICAgIDwvdmFhZGluLWdyaWQtdGFibGUtZm9jdXMtdHJhcD4KICAgIDwvdmFhZGluLWdyaWQtdGFibGU+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPgoKPHNjcmlwdD4vL35+V0VCUEFUSH5+L3ZhYWRpbi1ncmlkL3ZhYWRpbi1ncmlkLmh0bWwuanMKUG9seW1lcih7aXM6InZhYWRpbi1ncmlkIixwcm9wZXJ0aWVzOntfY29sdW1uVHJlZTp7dHlwZTpBcnJheSxub3RpZnk6ITB9LHNpemU6TnVtYmVyLF9yb3dEZXRhaWxzVGVtcGxhdGU6T2JqZWN0LF9iaW5kRGF0YTp7dHlwZTpPYmplY3QsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZ2V0SXRlbS5iaW5kKHRoaXMpfX19LGJlaGF2aW9yczpbUG9seW1lci5Jcm9uQTExeUtleXNCZWhhdmlvcixQb2x5bWVyLklyb25SZXNpemFibGVCZWhhdmlvcix2YWFkaW4uZWxlbWVudHMuZ3JpZC5BY3RpdmVJdGVtQmVoYXZpb3IsdmFhZGluLmVsZW1lbnRzLmdyaWQuUm93RGV0YWlsc0JlaGF2aW9yLHZhYWRpbi5lbGVtZW50cy5ncmlkLkRhdGFQcm92aWRlckJlaGF2aW9yLHZhYWRpbi5lbGVtZW50cy5ncmlkLkR5bmFtaWNDb2x1bW5zQmVoYXZpb3IsdmFhZGluLmVsZW1lbnRzLmdyaWQuQXJyYXlEYXRhUHJvdmlkZXJCZWhhdmlvcix2YWFkaW4uZWxlbWVudHMuZ3JpZC5TZWxlY3Rpb25CZWhhdmlvciwKdmFhZGluLmVsZW1lbnRzLmdyaWQuU29ydEJlaGF2aW9yLHZhYWRpbi5lbGVtZW50cy5ncmlkLkZpbHRlckJlaGF2aW9yLHZhYWRpbi5lbGVtZW50cy5ncmlkLkNvbHVtblJlb3JkZXJpbmdCZWhhdmlvcix2YWFkaW4uZWxlbWVudHMuZ3JpZC5UYWJsZUtleWJvYXJkQmVoYXZpb3JdLGxpc3RlbmVyczp7InByb3BlcnR5LWNoYW5nZWQiOiJfY29sdW1uUHJvcENoYW5nZWQiLCJpcm9uLXJlc2l6ZSI6Il9ncmlkUmVzaXplSGFuZGxlciJ9LF91cGRhdGVJdGVtOmZ1bmN0aW9uKGEsYyl7YS5zdHlsZS5taW5IZWlnaHQ9Yz8iIjp0aGlzLiQuc2Nyb2xsZXIuX3BoeXNpY2FsQXZlcmFnZSsicHgiO2EuaXRlbT1jO2Euc2VsZWN0ZWQ9dGhpcy5faXNTZWxlY3RlZChjKTthLmV4cGFuZGVkPXRoaXMuX2lzRXhwYW5kZWQoYyk7YS5hY3RpdmU9bnVsbCE9PWMmJmM9PXRoaXMuYWN0aXZlSXRlbTthLmZvY3VzZWQ9YS5pbmRleD09PXRoaXMuJC5pdGVtcy5fZm9jdXNlZFJvd0luZGV4fSxfZ2V0Q29udGVudFRhcmdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzfSwKcmVhZHk6ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVDb2x1bW5UcmVlKCk7dGhpcy5fcm93RGV0YWlsc1RlbXBsYXRlPVBvbHltZXIuZG9tKHRoaXMpLnF1ZXJ5U2VsZWN0b3IoInRlbXBsYXRlLnJvdy1kZXRhaWxzIil8fHZvaWQgMDt0aGlzLiQuc2Nyb2xsZXIudGFyZ2V0PXRoaXM7bnVsbD09PWRvY3VtZW50LmRvY3R5cGUmJmNvbnNvbGUud2FybignXHgzY3ZhYWRpbi1ncmlkXHgzZSByZXF1aXJlcyB0aGUgInN0YW5kYXJkcyBtb2RlIiBkZWNsYXJhdGlvbi4gUGxlYXNlIGFkZCBceDNjIURPQ1RZUEUgaHRtbFx4M2UgdG8gdGhlIEhUTUwgZG9jdW1lbnQuJyl9LF9jb2x1bW5Qcm9wQ2hhbmdlZDpmdW5jdGlvbihhKXsiX2NoaWxkQ29sdW1ucyI9PT1hLmRldGFpbC5wYXRoJiZ0aGlzLl91cGRhdGVDb2x1bW5UcmVlKCk7YS5zdG9wUHJvcGFnYXRpb24oKX0sX2dyaWRSZXNpemVIYW5kbGVyOmZ1bmN0aW9uKCl7dGhpcy4kLnNjcm9sbGVyLl9ncmlkUmVzaXplSGFuZGxlcigpfX0pOwo8L3NjcmlwdD4KCgoKCgoKCgoKCjxkb20tbW9kdWxlIGlkPSJ0Zi1ocGFyYW1zLXNlc3Npb24tZ3JvdXAtZGV0YWlscyI+CiAgPHRlbXBsYXRlPgogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbWyFzZXNzaW9uR3JvdXBdXSI+CiAgICAgIDxkaXY+CiAgICAgICAgPGgzPk5vIHNlc3Npb24gZ3JvdXAgc2VsZWN0ZWQ8L2gzPgogICAgICAgIDxwPlBsZWFzZSBzZWxlY3QgYSBzZXNzaW9uIGdyb3VwIHRvIHNlZSBpdHMgbWV0cmljLWdyYXBocyBoZXJlLgogICAgICA8L2Rpdj4KICAgIDwvdGVtcGxhdGU+CiAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIV9oYXZlTWV0cmljcyh2aXNpYmxlU2NoZW1hLiopXV0iPgogICAgICA8ZGl2PgogICAgICAgIDxoMz5ObyBtZXRyaWNzIGFyZSBlbmFibGVkPC9oMz4KICAgICAgICA8cD5QbGVhc2UgZW5hYmxlIHNvbWUgbWV0cmljcyB0byBzZWUgY29udGVudCBoZXJlLgogICAgICA8L2Rpdj4KICAgIDwvdGVtcGxhdGU+CiAgICA8ZGl2IGNsYXNzPSJsYXlvdXQgaG9yaXpvbnRhbCB3cmFwIHNlc3Npb24tZ3JvdXAtZGV0YWlscyI+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaGF2ZU1ldHJpY3NBbmRTZXNzaW9uR3JvdXAodmlzaWJsZVNjaGVtYS4qLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb25Hcm91cCldXSI+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1t2aXNpYmxlU2NoZW1hLm1ldHJpY0luZm9zXV0iIGFzPSJtZXRyaWNJbmZvIj4KICAgICAgICAgIAogICAgICAgICAgPHRmLXNjYWxhci1jYXJkIGNsYXNzPSJzY2FsYXItY2FyZCIgY29sb3Itc2NhbGU9IltbX2NvbG9yU2NhbGVdXSIgZGF0YS10by1sb2FkPSJbW19jb21wdXRlU2VyaWVzRm9yU2Vzc2lvbkdyb3VwTWV0cmljKHNlc3Npb25Hcm91cCwKICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRyaWNJbmZvKV1dIiB0YWc9IltbbWV0cmljSW5mby5uYW1lLnRhZ11dIiB0YWctbWV0YWRhdGE9IltbX2NvbXB1dGVUYWdNZXRhZGF0YShtZXRyaWNJbmZvKV1dIiB4LXR5cGU9IltbX3hUeXBlXV0iIG11bHRpLWV4cGVyaW1lbnRzPSJbW19ub011bHRpRXhwZXJpbWVudHNdXSIgcmVxdWVzdC1kYXRhPSJbW19yZXF1ZXN0RGF0YV1dIiBhY3RpdmU+CiAgICAgICAgICA8L3RmLXNjYWxhci1jYXJkPgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDwvdGVtcGxhdGU+CiAgICA8L2Rpdj4KICAgIAogICAgPHN0eWxlIGluY2x1ZGU9Imlyb24tZmxleCI+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgogIDxzY3JpcHQ+Ly9+fldFQlBBVEh+fi90Zi1ocGFyYW1zLXNlc3Npb24tZ3JvdXAtZGV0YWlscy90Zi1ocGFyYW1zLXNlc3Npb24tZ3JvdXAtZGV0YWlscy5odG1sLmpzClBvbHltZXIoe2lzOiJ0Zi1ocGFyYW1zLXNlc3Npb24tZ3JvdXAtZGV0YWlscyIscHJvcGVydGllczp7YmFja2VuZDpPYmplY3QsZXhwZXJpbWVudE5hbWU6U3RyaW5nLHZpc2libGVTY2hlbWE6T2JqZWN0LHNlc3Npb25Hcm91cDpPYmplY3QsX3hUeXBlOnt0eXBlOlN0cmluZyx2YWx1ZTpibS5YVHlwZS5TVEVQfSxfbm9NdWx0aUV4cGVyaW1lbnRzOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LF9pbmRleE9mU2Vzc2lvbjpPYmplY3QsX3Nlc3Npb25Hcm91cE5hbWVIYXNoOk51bWJlcixfcmVxdWVzdERhdGE6e3R5cGU6RnVuY3Rpb24sdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4oe3RhZzphLHJ1bjpjfSk9PnRoaXMuYmFja2VuZC5saXN0TWV0cmljRXZhbHMoe2V4cGVyaW1lbnROYW1lOnRoaXMuZXhwZXJpbWVudE5hbWUsc2Vzc2lvbk5hbWU6YyxtZXRyaWNOYW1lOmF9KX19LF9jb2xvclNjYWxlOnt0eXBlOk9iamVjdCx2YWx1ZTpmdW5jdGlvbigpe3JldHVybntzY2FsZTphPT57YT1KU09OLnBhcnNlKGEpWzFdOwphPXRoaXMuX2luZGV4T2ZTZXNzaW9uLmdldChhKTtjb25zdCBjPVpsLnN0YW5kYXJkO3JldHVybiBjWyh0aGlzLl9zZXNzaW9uR3JvdXBOYW1lSGFzaCthKSVjLmxlbmd0aF19fX19fSxiZWhhdmlvcnM6W1BvbHltZXIuSXJvblJlc2l6YWJsZUJlaGF2aW9yXSxsaXN0ZW5lcnM6eyJpcm9uLXJlc2l6ZSI6InJlZHJhdyJ9LG9ic2VydmVyczpbIl9zZXNzaW9uR3JvdXBDaGFuZ2VkKHNlc3Npb25Hcm91cC4qKSJdLHJlZHJhdygpe1BvbHltZXIuZG9tKHRoaXMucm9vdCkucXVlcnlTZWxlY3RvckFsbCgidGYtc2NhbGFyLWNhcmQiKS5mb3JFYWNoKGE9PmEucmVkcmF3KCkpfSxfc2Vzc2lvbkdyb3VwQ2hhbmdlZCgpe3RoaXMuc2Vzc2lvbkdyb3VwPyh0aGlzLl9pbmRleE9mU2Vzc2lvbj1uZXcgTWFwKHRoaXMuc2Vzc2lvbkdyb3VwLnNlc3Npb25zLm1hcCgoYSxjKT0+W2EubmFtZSxjXSkpLHRoaXMuX3Nlc3Npb25Hcm91cE5hbWVIYXNoPXRmLmhwYXJhbXMudXRpbHMuaGFzaE9mU3RyaW5nKHRoaXMuc2Vzc2lvbkdyb3VwLm5hbWUpKToKKHRoaXMuX2luZGV4T2ZTZXNzaW9uPW5ldyBNYXAsdGhpcy5fc2Vzc2lvbkdyb3VwTmFtZUhhc2g9MCk7UG9seW1lci5kb20odGhpcy5yb290KS5xdWVyeVNlbGVjdG9yQWxsKCJ0Zi1zY2FsYXItY2FyZCIpLmZvckVhY2goYT0+e2NvbnN0IGM9YS5nZXQoInRhZyIpO2Euc2V0KCJ0YWciLCIiKTthLnNldCgidGFnIixjKX0pfSxfaGF2ZU1ldHJpY3MoKXtyZXR1cm4gdGhpcy52aXNpYmxlU2NoZW1hJiZBcnJheS5pc0FycmF5KHRoaXMudmlzaWJsZVNjaGVtYS5tZXRyaWNJbmZvcykmJjA8dGhpcy52aXNpYmxlU2NoZW1hLm1ldHJpY0luZm9zLmxlbmd0aH0sX2hhdmVNZXRyaWNzQW5kU2Vzc2lvbkdyb3VwKCl7cmV0dXJuIHRoaXMuc2Vzc2lvbkdyb3VwJiZ0aGlzLl9oYXZlTWV0cmljcygpfSxfY29tcHV0ZVNlcmllc0ZvclNlc3Npb25Hcm91cE1ldHJpYyhhLGMpe3JldHVybiBudWxsPT09YXx8bnVsbD09PWM/W106YS5zZXNzaW9ucy5maWx0ZXIoZD0+dm9pZCAwIT09dGYuaHBhcmFtcy51dGlscy5tZXRyaWNWYWx1ZUJ5TmFtZShkLm1ldHJpY1ZhbHVlcywKYy5uYW1lKSkubWFwKGQ9Pih7dGFnOmMubmFtZSxydW46ZC5uYW1lfSkpfSxfY29tcHV0ZVRhZ01ldGFkYXRhKGEpe3JldHVybntkaXNwbGF5TmFtZTp0Zi5ocGFyYW1zLnV0aWxzLm1ldHJpY05hbWUoYSksZGVzY3JpcHRpb246YS5kZXNjcmlwdGlvbnx8IiJ9fX0pOwo8L3NjcmlwdD4KPC9kb20tbW9kdWxlPgoKCgo8ZG9tLW1vZHVsZSBpZD0idGYtaHBhcmFtcy10YWJsZS12aWV3Ij4KICA8dGVtcGxhdGU+CiAgICA8dmFhZGluLWdyaWQgY2xhc3M9InNlc3Npb24tZ3JvdXAtdGFibGUiIGlkPSJzZXNzaW9uR3JvdXBzVGFibGUiIGNvbHVtbi1yZW9yZGVyaW5nLWFsbG93ZWQgaXRlbXM9Iltbc2Vzc2lvbkdyb3Vwc11dIj4KICAgICAgPHZhYWRpbi1ncmlkLWNvbHVtbiBmbGV4LWdyb3c9IjAiIHdpZHRoPSIxMGVtIiByZXNpemFibGU+CiAgICAgICAgPHRlbXBsYXRlIGNsYXNzPSJoZWFkZXIiPgogICAgICAgICAgPGRpdiBjbGFzcz0idGFibGUtaGVhZGVyIHRhYmxlLWNlbGwiPlRyaWFsIElEPC9kaXY+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0YWJsZS1jZWxsIj5bW2l0ZW0ubmFtZV1dPC9kaXY+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPC92YWFkaW4tZ3JpZC1jb2x1bW4+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tlbmFibGVTaG93TWV0cmljc11dIj4KICAgICAgICA8dmFhZGluLWdyaWQtY29sdW1uIGZsZXgtZ3Jvdz0iMCIgd2lkdGg9IjVlbSIgcmVzaXphYmxlPgogICAgICAgICAgPHRlbXBsYXRlIGNsYXNzPSJoZWFkZXIiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0YWJsZS1oZWFkZXIgdGFibGUtY2VsbCI+U2hvdyBNZXRyaWNzPC9kaXY+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPHRlbXBsYXRlPgogICAgICAgICAgICA8cGFwZXItY2hlY2tib3ggY2xhc3M9InRhYmxlLWNlbGwiIGNoZWNrZWQ9Int7ZXhwYW5kZWR9fSI+CiAgICAgICAgICAgIDwvcGFwZXItY2hlY2tib3g+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvdmFhZGluLWdyaWQtY29sdW1uPgogICAgICA8L3RlbXBsYXRlPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW3Zpc2libGVTY2hlbWEuaHBhcmFtSW5mb3NdXSIgYXM9ImhwYXJhbUluZm8iIGluZGV4LWFzPSJocGFyYW1JbmRleCI+CiAgICAgICAgPHZhYWRpbi1ncmlkLWNvbHVtbiBmbGV4LWdyb3c9IjIiIHdpZHRoPSIxMGVtIiByZXNpemFibGU+CiAgICAgICAgICA8dGVtcGxhdGUgY2xhc3M9ImhlYWRlciI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRhYmxlLWhlYWRlciB0YWJsZS1jZWxsIj4KICAgICAgICAgICAgICBbW19ocGFyYW1OYW1lKGhwYXJhbUluZm8pXV0KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPHRlbXBsYXRlPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0YWJsZS1jZWxsIj4KICAgICAgICAgICAgICBbW19zZXNzaW9uR3JvdXBIUGFyYW0oaXRlbSwgaHBhcmFtSW5mby5uYW1lKV1dCiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L3ZhYWRpbi1ncmlkLWNvbHVtbj4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0ie3t2aXNpYmxlU2NoZW1hLm1ldHJpY0luZm9zfX0iIGFzPSJtZXRyaWNJbmZvIiBpbmRleC1hcz0ibWV0cmljSW5kZXgiPgogICAgICAgIDx2YWFkaW4tZ3JpZC1jb2x1bW4gZmxleC1ncm93PSIyIiB3aWR0aD0iMTBlbSIgcmVzaXphYmxlPgogICAgICAgICAgPHRlbXBsYXRlIGNsYXNzPSJoZWFkZXIiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0YWJsZS1oZWFkZXIgdGFibGUtY2VsbCI+CiAgICAgICAgICAgICAgW1tfbWV0cmljTmFtZShtZXRyaWNJbmZvKV1dCiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDx0ZW1wbGF0ZT4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idGFibGUtY2VsbCI+CiAgICAgICAgICAgICAgW1tfc2Vzc2lvbkdyb3VwTWV0cmljKGl0ZW0sIG1ldHJpY0luZm8ubmFtZSldXQogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC92YWFkaW4tZ3JpZC1jb2x1bW4+CiAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDx0ZW1wbGF0ZSBjbGFzcz0icm93LWRldGFpbHMiPgogICAgICAgIDx0Zi1ocGFyYW1zLXNlc3Npb24tZ3JvdXAtZGV0YWlscyBiYWNrZW5kPSJbW2JhY2tlbmRdXSIgZXhwZXJpbWVudC1uYW1lPSJbW2V4cGVyaW1lbnROYW1lXV0iIHNlc3Npb24tZ3JvdXA9IltbaXRlbV1dIiB2aXNpYmxlLXNjaGVtYT0iW1t2aXNpYmxlU2NoZW1hXV0iIGNsYXNzPSJzZXNzaW9uLWdyb3VwLWRldGFpbHMiPgogICAgICAgIDwvdGYtaHBhcmFtcy1zZXNzaW9uLWdyb3VwLWRldGFpbHM+CiAgICAgIDwvdGVtcGxhdGU+CiAgICA8L3ZhYWRpbi1ncmlkPgoKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CiAgICAgIC50YWJsZS1jZWxsIHsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KICAgICAgLnRhYmxlLWhlYWRlciB7CiAgICAgICAgLyogbGluZS1icmVhayBvdmVyZmxvd2luZyBjb2x1bW4gaGVhZGVycyAqLwogICAgICAgIHdoaXRlLXNwYWNlOiBub3JtYWw7CiAgICAgICAgb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKICAgICAgfQogICAgICAuc2Vzc2lvbi1ncm91cC10YWJsZSB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CiAgICAgIC5zZXNzaW9uLWdyb3VwLWRldGFpbHMgewogICAgICAgIGhlaWdodDogMzYwcHg7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgoKICA8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdGYtaHBhcmFtcy10YWJsZS12aWV3L3RmLWhwYXJhbXMtdGFibGUtdmlldy5odG1sLmpzClBvbHltZXIoe2lzOiJ0Zi1ocGFyYW1zLXRhYmxlLXZpZXciLHByb3BlcnRpZXM6e3Zpc2libGVTY2hlbWE6T2JqZWN0LHNlc3Npb25Hcm91cHM6QXJyYXksZW5hYmxlU2hvd01ldHJpY3M6Qm9vbGVhbixiYWNrZW5kOk9iamVjdCxleHBlcmltZW50TmFtZTpTdHJpbmd9LG9ic2VydmVyczpbIl92aXNpYmxlU2NoZW1hT3JTZXNzaW9uR3JvdXBzQ2hhbmdlZCh2aXNpYmxlU2NoZW1hLiosIHNlc3Npb25Hcm91cHMuKikiXSxfdmlzaWJsZVNjaGVtYU9yU2Vzc2lvbkdyb3Vwc0NoYW5nZWQoKXtjb25zdCBhPXRoaXMuJC5zZXNzaW9uR3JvdXBzVGFibGUuZ2V0KCJleHBhbmRlZEl0ZW1zIik7dGhpcy4kLnNlc3Npb25Hcm91cHNUYWJsZS5zZXQoImV4cGFuZGVkSXRlbXMiLFtdKTtQb2x5bWVyLmRvbS5mbHVzaCgpO2NvbnN0IGM9bmV3IE1hcDt0aGlzLnNlc3Npb25Hcm91cHMuZm9yRWFjaChkPT57Yy5zZXQoZC5uYW1lLGQpfSk7dGhpcy4kLnNlc3Npb25Hcm91cHNUYWJsZS5zZXQoImV4cGFuZGVkSXRlbXMiLAphLm1hcChkPT5jLmdldChkLm5hbWUpKS5maWx0ZXIoQm9vbGVhbikpfSxfaHBhcmFtTmFtZTp0Zi5ocGFyYW1zLnV0aWxzLmhwYXJhbU5hbWUsX21ldHJpY05hbWU6dGYuaHBhcmFtcy51dGlscy5tZXRyaWNOYW1lLF9zZXNzaW9uR3JvdXBIUGFyYW0oYSxjKXtyZXR1cm4gbnVsbCE9YSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGEuaHBhcmFtcyxjKT90Zi5ocGFyYW1zLnV0aWxzLnByZXR0eVByaW50KGEuaHBhcmFtc1tjXSk6IiJ9LF9zZXNzaW9uR3JvdXBNZXRyaWMoYSxjKXtpZihudWxsPT1hKXJldHVybiBudWxsO2ZvcihsZXQgZD0wO2Q8YS5tZXRyaWNWYWx1ZXMubGVuZ3RoOysrZCl7bGV0IGY9YS5tZXRyaWNWYWx1ZXNbZF07aWYoZi5uYW1lLmdyb3VwPT09Yy5ncm91cCYmZi5uYW1lLnRhZz09Yy50YWcpcmV0dXJuIHRmLmhwYXJhbXMudXRpbHMucHJldHR5UHJpbnQoZi52YWx1ZSl9cmV0dXJuIiJ9LF9yb3dOdW1iZXIoYSl7cmV0dXJuIGErMX19KTsKPC9zY3JpcHQ+CjwvZG9tLW1vZHVsZT4KCgo8ZG9tLW1vZHVsZSBpZD0idGYtaHBhcmFtcy1zZXNzaW9uLWdyb3VwLXZhbHVlcyI+CiAgPHRlbXBsYXRlPgogICAgCiAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX3Byb3BlcnRpZXNBcmVQb3B1bGF0ZWQodmlzaWJsZVNjaGVtYSwgc2Vzc2lvbkdyb3VwKV1dIj4KICAgICAgCiAgICAgIDx0Zi1ocGFyYW1zLXRhYmxlLXZpZXcgdmlzaWJsZS1zY2hlbWE9IltbdmlzaWJsZVNjaGVtYV1dIiBzZXNzaW9uLWdyb3Vwcz0iW1tfc2luZ2xldG9uU2Vzc2lvbkdyb3VwcyhzZXNzaW9uR3JvdXApXV0iPgogICAgICA8L3RmLWhwYXJhbXMtdGFibGUtdmlldz4KICAgIDwvdGVtcGxhdGU+CiAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIV9wcm9wZXJ0aWVzQXJlUG9wdWxhdGVkKHZpc2libGVTY2hlbWEsIHNlc3Npb25Hcm91cCldXSI+CiAgICAgIDxkaXY+CiAgICAgICAgQ2xpY2sgb3IgaG92ZXIgb3ZlciBhIHNlc3Npb24gZ3JvdXAgdG8gZGlzcGxheSBpdHMgdmFsdWVzIGhlcmUuCiAgICAgIDwvZGl2PgogICAgPC90ZW1wbGF0ZT4KCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgogIDxzY3JpcHQ+Ly9+fldFQlBBVEh+fi90Zi1ocGFyYW1zLXNlc3Npb24tZ3JvdXAtdmFsdWVzL3RmLWhwYXJhbXMtc2Vzc2lvbi1ncm91cC12YWx1ZXMuaHRtbC5qcwpQb2x5bWVyKHtpczoidGYtaHBhcmFtcy1zZXNzaW9uLWdyb3VwLXZhbHVlcyIscHJvcGVydGllczp7c2Vzc2lvbkdyb3VwOnt0eXBlOk9iamVjdCx2YWx1ZTpudWxsfSx2aXNpYmxlU2NoZW1hOnt0eXBlOk9iamVjdCx2YWx1ZTpudWxsfX0sX3Byb3BlcnRpZXNBcmVQb3B1bGF0ZWQ6ZnVuY3Rpb24oYSxjKXtyZXR1cm4gdm9pZCAwIT09YSYmbnVsbCE9PWEmJnZvaWQgMCE9PWMmJm51bGwhPT1jfSxfc2luZ2xldG9uU2Vzc2lvbkdyb3VwczpmdW5jdGlvbihhKXtyZXR1cm4gbnVsbD09PWF8fHZvaWQgMD09PWE/W106W2FdfX0pOwo8L3NjcmlwdD4KPC9kb20tbW9kdWxlPgoKCgoKPHNjcmlwdD4vL35+V0VCUEFUSH5+L3RmLWhwYXJhbXMtcGFyYWxsZWwtY29vcmRzLXBsb3QvdXRpbHMuaHRtbC5qcwooZnVuY3Rpb24oYSl7KGZ1bmN0aW9uKGMpeyhmdW5jdGlvbihkKXtmdW5jdGlvbiBmKGcsbCxrKXtmdW5jdGlvbiBtKCl7aWYoMD09PWcubGVuZ3RoKXJldHVyblsxLDJdO2NvbnN0IFtwLHFdPWQzLmV4dGVudChnKTtyZXR1cm4gcCE9PXE/W3AscV06MDxwP1suNSpwLDEuNSpwXTowPnA/WzEuNSpwLC41KnBdOlstMSwxXX1pZigiTElORUFSIj09PWspcmV0dXJuIGQzLnNjYWxlTGluZWFyKCkuZG9tYWluKG0oKSkucmFuZ2UoW2wsMF0pO2lmKCJMT0ciPT09aylyZXR1cm4gaz1tKCksMD49a1swXSYmMDw9a1sxXT9mKGcsbCwiTElORUFSIik6ZDMuc2NhbGVMb2coKS5kb21haW4oaykucmFuZ2UoW2wsMF0pO2lmKCJRVUFOVElMRSI9PT1rKXJldHVybiBrPWQzLnJhbmdlKDIwKS5tYXAocD0+bC1wKmwvMTkpLDA9PT1nLmxlbmd0aCYmKGc9WzFdKSxkMy5zY2FsZVF1YW50aWxlKCkuZG9tYWluKF8udW5pcShnKSkucmFuZ2Uoayk7aWYoIk5PTl9OVU1FUklDIj09PWspcmV0dXJuIGQzLnNjYWxlUG9pbnQoKS5kb21haW4oXy51bmlxKGcuc29ydCgpKSkucmFuZ2UoW2wsCjBdKS5wYWRkaW5nKC4xKTt0aHJvdyBSYW5nZUVycm9yKCJVbmtub3duIHNjYWxlOiAiK2spO31kLmZpbmRDbG9zZXN0UGF0aD1mdW5jdGlvbihnLGwsayl7ZnVuY3Rpb24gbSh5LHgsQyxGKXtjb25zdCBEPXktQyxCPXgtRjtDPXAtQztGPXEtRjtjb25zdCBHPShEKkMrQipGKS8oRCpEK0IqQik7cmV0dXJuIDA+PUc/YS5ocGFyYW1zLnV0aWxzLmwyTm9ybVNxdWFyZWQoQyxGKToxPD1HP2EuaHBhcmFtcy51dGlscy5sMk5vcm1TcXVhcmVkKHktcCx4LXEpOmEuaHBhcmFtcy51dGlscy5sMk5vcm1TcXVhcmVkKEMtRypELEYtRypCKX1pZigyPmwubGVuZ3RoKXJldHVybiBjb25zb2xlLmVycm9yKCJMZXNzIHRoYW4gdHdvIGF4ZXMgaW4gcGFyYWxsZWwgY29vcmRpbmF0ZXMgcGxvdC4iKSxudWxsO2NvbnN0IHA9a1swXSxxPWtbMV07aWYocDw9bFswXXx8cD49bFtsLmxlbmd0aC0xXSlyZXR1cm4gbnVsbDtjb25zdCByPV8uc29ydGVkSW5kZXgobCxwKTtjb25zb2xlLmFzc2VydCgwPHIpOwpjb25zb2xlLmFzc2VydChyPGwubGVuZ3RoKTtjb25zdCB0PXItMTtsZXQgdj1udWxsLEE9bnVsbDtnLmZvckVhY2goeT0+e2NvbnN0IHg9bSh5LmNvbnRyb2xQb2ludHNbdF1bMF0seS5jb250cm9sUG9pbnRzW3RdWzFdLHkuY29udHJvbFBvaW50c1tyXVswXSx5LmNvbnRyb2xQb2ludHNbcl1bMV0pOzEwMDx4fHwhKG51bGw9PT12fHx4PHYpfHwodj14LEE9eSl9KTtyZXR1cm4gQX07ZC5wb2ludFNjYWxlSW52ZXJzZUltYWdlPWZ1bmN0aW9uKGcsbCxrKXtyZXR1cm4gZy5kb21haW4oKS5maWx0ZXIobT0+e209ZyhtKTtyZXR1cm4gbDw9bSYmbTw9a30pfTtkLnF1YW50aWxlU2NhbGVJbnZlcnNlSW1hZ2U9ZnVuY3Rpb24oZyxsLGspe2NvbnN0IG09Zy5yYW5nZSgpLHA9bS5maWx0ZXIocT0+bDw9cSYmcTw9aykubWFwKHE9Pntjb25zdCByPWcuaW52ZXJ0RXh0ZW50KHEpO3JldHVybiBxPT09bVttLmxlbmd0aC0xXT9bclswXSxyWzFdKzFdOnJ9KTtyZXR1cm4gMD09cC5sZW5ndGg/WzAsCjBdOmQzLmV4dGVudChkMy5tZXJnZShwKSl9O2QuY29udGludW91c1NjYWxlSW52ZXJzZUltYWdlPWZ1bmN0aW9uKGcsbCxrKXtyZXR1cm5bZy5pbnZlcnQobCksZy5pbnZlcnQoayldLnNvcnQoKG0scCk9Pm0tcCl9O2QuY3JlYXRlQXhpc1NjYWxlPWZ9KShjLnBhcmFsbGVsX2Nvb3Jkc19wbG90fHwoYy5wYXJhbGxlbF9jb29yZHNfcGxvdD17fSkpfSkoYS5ocGFyYW1zfHwoYS5ocGFyYW1zPXt9KSl9KSh0Znx8KHRmPXt9KSk7Cjwvc2NyaXB0PgoKCjxkb20tbW9kdWxlIGlkPSJ0Zi1ocGFyYW1zLXBhcmFsbGVsLWNvb3Jkcy1wbG90Ij4KICA8dGVtcGxhdGU+CiAgICA8ZGl2IGlkPSJjb250YWluZXIiPgogICAgICA8c3ZnIGlkPSJzdmciPjwvc3ZnPgogICAgPC9kaXY+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQogICAgICBzdmcgewogICAgICAgIGZvbnQ6IDEwcHggc2Fucy1zZXJpZjsKICAgICAgfQoKICAgICAgLmJhY2tncm91bmQgcGF0aCB7CiAgICAgICAgZmlsbDogbm9uZTsKICAgICAgICBzdHJva2U6ICNkZGQ7CiAgICAgICAgc2hhcGUtcmVuZGVyaW5nOiBjcmlzcEVkZ2VzOwogICAgICB9CgogICAgICAuZm9yZWdyb3VuZCBwYXRoIHsKICAgICAgICBmaWxsOiBub25lOwogICAgICAgIHN0cm9rZS1vcGFjaXR5OiAwLjc7CiAgICAgICAgc3Ryb2tlLXdpZHRoOiAxOwogICAgICB9CgogICAgICAvKiBXaWxsIGJlIHNldCBvbiBmb3JlZ3JvdW5kIHBhdGhzIHRoYXQgYXJlIG5vdCAiY29udGFpbmVkIiBpbiB0aGUgY3VycmVudAogICAgICAgICBheGVzIGJydXNoZXMuIElmIG5vIGJydXNoZXMgYXJlIHNldCwgbm8gcGF0aCB3aWxsIGhhdmUgdGhpcyBjbGFzcy4gKi8KICAgICAgLmZvcmVncm91bmQgLmludmlzaWJsZS1wYXRoIHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICB9CgogICAgICAvKiBTdHlsZSBmb3IgdGhlIHBhdGggY2xvc2VzdCB0byB0aGUgbW91c2UgcG9pbnRlciAodHlwaWNhbGx5IHdpbGwgYmVjb21lCiAgICAgIHRoZSBzZWxlY3RlZCBwYXRoIHdoZW4gdGhlIHVzZXIgY2xpY2tzKS4gKi8KICAgICAgLmZvcmVncm91bmQgLnBlYWtlZC1wYXRoIHsKICAgICAgICBzdHJva2Utd2lkdGg6IDM7CiAgICAgIH0KCiAgICAgIC8qIFRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgcGF0aCBjbGFzcy4gV2UgdXNlICFpbXBvcnRhbnQgdG8gb3ZlcnJpZGUgdGhlCiAgICAgICAgIGlubGluZSBzdHlsZSB0aGF0IHNldHMgdGhlIHJlZ3VsYXIgY29sb3Igb2YgYSBwYXRoLiAqLwogICAgICAuZm9yZWdyb3VuZCAuc2VsZWN0ZWQtcGF0aCB7CiAgICAgICAgc3Ryb2tlLXdpZHRoOiAzICFpbXBvcnRhbnQ7CiAgICAgICAgc3Ryb2tlOiAjMGYwICFpbXBvcnRhbnQ7CiAgICAgIH0KCiAgICAgICNjb250YWluZXIgewogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgc3ZnIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIH0KCiAgICAgIC5heGlzIHRleHQgewogICAgICAgIHRleHQtc2hhZG93OiAwIDFweCAwICNmZmYsIDFweCAwIDAgI2ZmZiwgMCAtMXB4IDAgI2ZmZiwgLTFweCAwIDAgI2ZmZjsKICAgICAgICBmaWxsOiAjMDAwOwogICAgICAgIGN1cnNvcjogbW92ZTsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgoKICA8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdGYtaHBhcmFtcy1wYXJhbGxlbC1jb29yZHMtcGxvdC9heGVzLmpzCihmdW5jdGlvbihhKXsoZnVuY3Rpb24oYyl7KGZ1bmN0aW9uKGQpe2Z1bmN0aW9uIGYocil7cmV0dXJuIG51bGwhPT1yLnNvdXJjZUV2ZW50fWxldCBnOyhmdW5jdGlvbihyKXtyLkxJTkVBUj0iTElORUFSIjtyLkxPRz0iTE9HIjtyLlFVQU5USUxFPSJRVUFOVElMRSI7ci5OT05fTlVNRVJJQz0iTk9OX05VTUVSSUMifSkoZz1kLlNjYWxlVHlwZXx8KGQuU2NhbGVUeXBlPXt9KSk7Y2xhc3MgbHtpc1Bhc3NpbmcoKXtyZXR1cm4hMH19Y2xhc3Mga3tjb25zdHJ1Y3RvcihyLHQsdixBKXt0aGlzLl9sb3dlcj1yO3RoaXMuX3VwcGVyPXQ7dGhpcy5fbG93ZXJPcGVuPXY7dGhpcy5fdXBwZXJPcGVuPUF9aXNQYXNzaW5nKHIpe3JldHVybiB0aGlzLl9iZWZvcmUodGhpcy5fbG93ZXIsciwhdGhpcy5fbG93ZXJPcGVuKSYmdGhpcy5fYmVmb3JlKHIsdGhpcy5fdXBwZXIsIXRoaXMuX3VwcGVyT3Blbil9X2JlZm9yZShyLHQsdil7cmV0dXJuIHY/cjw9dDpyPHR9fWNsYXNzIG17Y29uc3RydWN0b3Iocil7dGhpcy5fZG9tYWluU2V0PQpyfWlzUGFzc2luZyhyKXtyZXR1cm4tMSE9PXRoaXMuX2RvbWFpblNldC5maW5kSW5kZXgodD0+dD09PXIpfX1jbGFzcyBwe2NvbnN0cnVjdG9yKHIsdCx2LEEpe3RoaXMuX3N2Z1Byb3BzPXI7dGhpcy5fc2NoZW1hPXQ7dGhpcy5faW50ZXJhY3Rpb25NYW5hZ2VyPXY7dGhpcy5fY29sSW5kZXg9QTt0aGlzLl9pc0Rpc3BsYXllZD0hMTt0aGlzLl9zY2FsZVR5cGU9dGhpcy5feVNjYWxlPW51bGw7dGhpcy5zZXRCcnVzaFNlbGVjdGlvbihudWxsKX1jb2xJbmRleCgpe3JldHVybiB0aGlzLl9jb2xJbmRleH15U2NhbGUoKXtyZXR1cm4gdGhpcy5feVNjYWxlfXNjYWxlVHlwZSgpe3JldHVybiB0aGlzLl9zY2FsZVR5cGV9YnJ1c2hTZWxlY3Rpb24oKXtyZXR1cm4gdGhpcy5fYnJ1c2hTZWxlY3Rpb259aXNEaXNwbGF5ZWQoKXtyZXR1cm4gdGhpcy5faXNEaXNwbGF5ZWR9c2V0QnJ1c2hTZWxlY3Rpb24ocil7dGhpcy5fYnJ1c2hTZWxlY3Rpb249cjt0aGlzLl9icnVzaEZpbHRlcj10aGlzLl9idWlsZEJydXNoRmlsdGVyKHRoaXMuYnJ1c2hTZWxlY3Rpb24oKSwKdGhpcy5zY2FsZVR5cGUoKSx0aGlzLnlTY2FsZSgpKX1zZXREb21haW5BbmRTY2FsZShyLHQpe3RoaXMuX3NjYWxlVHlwZT10O3RoaXMuX3lTY2FsZT1hLmhwYXJhbXMucGFyYWxsZWxfY29vcmRzX3Bsb3QuY3JlYXRlQXhpc1NjYWxlKHIuc2xpY2UoKSx0aGlzLl9zdmdQcm9wcy5oZWlnaHQsdGhpcy5zY2FsZVR5cGUoKSk7dGhpcy5fYnJ1c2hGaWx0ZXI9dGhpcy5fYnVpbGRCcnVzaEZpbHRlcih0aGlzLmJydXNoU2VsZWN0aW9uKCksdGhpcy5zY2FsZVR5cGUoKSx0aGlzLnlTY2FsZSgpKX1icnVzaEZpbHRlcigpe3JldHVybiB0aGlzLl9icnVzaEZpbHRlcn11cGRhdGVET00ocil7dmFyIHQ9ZDMuYXhpc0xlZnQodGhpcy55U2NhbGUoKSk7dGhpcy5zY2FsZVR5cGUoKT09PWcuUVVBTlRJTEUmJih0PXQudGlja1ZhbHVlcyh0aGlzLnlTY2FsZSgpLnF1YW50aWxlcygpKS50aWNrRm9ybWF0KGQzLmZvcm1hdCgiLS42ZyIpKSk7dmFyIHY9ZDMuc2VsZWN0KHIpO3Yuc2VsZWN0QWxsKCJnIikucmVtb3ZlKCk7CnYuYXBwZW5kKCJnIikuY2xhc3NlZCgiYXhpcyIsITApLmNhbGwodCkuYXBwZW5kKCJ0ZXh0IikuY2xhc3NlZCgiYXhpcy10aXRsZSIsITApLnN0eWxlKCJjdXJzb3IiLCJtb3ZlIikuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikuYXR0cigieSIsLTkpLnRleHQoQT0+YS5ocGFyYW1zLnV0aWxzLnNjaGVtYUNvbHVtbk5hbWUodGhpcy5fc2NoZW1hLEEpKTt2LmNhbGwoZDMuZHJhZygpLm9uKCJzdGFydCIsKCk9PntyLnNldEF0dHJpYnV0ZSgiaXMtZHJhZ2dpbmciLCIiKTt0aGlzLl9pbnRlcmFjdGlvbk1hbmFnZXIub25EcmFnU3RhcnQodGhpcy5jb2xJbmRleCgpKX0pLm9uKCJkcmFnIiwoKT0+dGhpcy5faW50ZXJhY3Rpb25NYW5hZ2VyLm9uRHJhZyhkMy5ldmVudC54KSkub24oImVuZCIsKCk9Pnt0aGlzLl9pbnRlcmFjdGlvbk1hbmFnZXIub25EcmFnRW5kKCk7ci5yZW1vdmVBdHRyaWJ1dGUoImlzLWRyYWdnaW5nIil9KSk7dD1kMy5icnVzaFkoKS5leHRlbnQoW1stOCwwXSwKWzgsdGhpcy5fc3ZnUHJvcHMuaGVpZ2h0KzFdXSkub24oInN0YXJ0IiwoKT0+e2YoZDMuZXZlbnQpJiYoci5zZXRBdHRyaWJ1dGUoImlzLWJydXNoaW5nIiwiIiksdGhpcy5faW50ZXJhY3Rpb25NYW5hZ2VyLm9uQnJ1c2hDaGFuZ2VkKHRoaXMuY29sSW5kZXgoKSkpfSkub24oImJydXNoIiwoKT0+e2lmKGYoZDMuZXZlbnQpKXRoaXMuX2ludGVyYWN0aW9uTWFuYWdlci5vbkJydXNoQ2hhbmdlZCh0aGlzLmNvbEluZGV4KCkpfSkub24oImVuZCIsKCk9PntmKGQzLmV2ZW50KSYmKHRoaXMuX2ludGVyYWN0aW9uTWFuYWdlci5vbkJydXNoQ2hhbmdlZCh0aGlzLmNvbEluZGV4KCkpLHIucmVtb3ZlQXR0cmlidXRlKCJpcy1icnVzaGluZyIpKX0pO3Y9ZDMuc2VsZWN0KHIpLmFwcGVuZCgiZyIpLmNsYXNzZWQoImJydXNoIiwhMCk7di5jYWxsKHQpO3QubW92ZSh2LHRoaXMuYnJ1c2hTZWxlY3Rpb24oKSl9c2V0RGlzcGxheWVkKHIpe3RoaXMuX2lzRGlzcGxheWVkPXJ9X2J1aWxkQnJ1c2hGaWx0ZXIociwKdCx2KXtpZihudWxsPT09cilyZXR1cm4gbmV3IGw7aWYobnVsbD09PXQpcmV0dXJuIGNvbnNvbGUuZXJyb3IoIlNjYWxlIHR5cGUgaXMgbnVsbCwgYnV0IGJydXNoU2VsZWN0aW9uIGlzbid0OiAiLHIpLG5ldyBsO3N3aXRjaCh0KXtjYXNlIGcuTElORUFSOmNhc2UgZy5MT0c6e2NvbnN0IFtBLHldPWEuaHBhcmFtcy5wYXJhbGxlbF9jb29yZHNfcGxvdC5jb250aW51b3VzU2NhbGVJbnZlcnNlSW1hZ2UodixyWzBdLHJbMV0pO3JldHVybiBuZXcgayhBLHksITEsITEpfWNhc2UgZy5RVUFOVElMRTp7Y29uc3QgW0EseV09YS5ocGFyYW1zLnBhcmFsbGVsX2Nvb3Jkc19wbG90LnF1YW50aWxlU2NhbGVJbnZlcnNlSW1hZ2UodixyWzBdLHJbMV0pO3JldHVybiBuZXcgayhBLHksITEsITApfWNhc2UgZy5OT05fTlVNRVJJQzpyZXR1cm4gbmV3IG0oYS5ocGFyYW1zLnBhcmFsbGVsX2Nvb3Jkc19wbG90LnBvaW50U2NhbGVJbnZlcnNlSW1hZ2UodixyWzBdLHJbMV0pKX1jb25zb2xlLmVycm9yKCJVbmtub3duIHNjYWxlIHR5cGU6ICIsCnQpO3JldHVybiBuZXcgbH19ZC5BeGlzPXA7Y2xhc3MgcXtjb25zdHJ1Y3RvcihyLHQsdil7dGhpcy5fc3ZnUHJvcHM9cjt0aGlzLl9zY2hlbWE9dDt0aGlzLl9heGVzPXRoaXMuX2NyZWF0ZUF4ZXModik7dGhpcy5fc3RhdGlvbmFyeUF4ZXNQb3NpdGlvbnM9ZDMuc2NhbGVQb2ludCgpLnJhbmdlKFsxLHRoaXMuX3N2Z1Byb3BzLndpZHRoLTFdKS5wYWRkaW5nKC41KTt0aGlzLl9kcmFnZ2VkQXhpcz1udWxsO3RoaXMuX3N2Z1Byb3BzLnN2Z0cuc2VsZWN0QWxsKCJnLmF4aXMtcGFyZW50IikucmVtb3ZlKCk7dGhpcy5fcGFyZW50c1NlbD10aGlzLl9zdmdQcm9wcy5zdmdHLnNlbGVjdEFsbCgiLmF4aXMtcGFyZW50Iil9dXBkYXRlQXhlcyhyLHQpe2NvbnNvbGUuYXNzZXJ0KCF0aGlzLmlzQXhpc0RyYWdnaW5nKCkpO2NvbnN0IHY9bmV3IFNldDtyLmNvbHVtbnMuZm9yRWFjaCh5PT57Y29uc3QgeD15LmFic29sdXRlSW5kZXg7bGV0IEM9dGhpcy5fYXhlc1t4XTtDLnNldERpc3BsYXllZCghMCk7CmNvbnN0IEY9dC5tYXAoRD0+YS5ocGFyYW1zLnV0aWxzLmNvbHVtblZhbHVlQnlJbmRleCh0aGlzLl9zY2hlbWEsRCx4KSk7Qy5zZXREb21haW5BbmRTY2FsZShGLHkuc2NhbGUpO3YuYWRkKHgpfSk7dGhpcy5fYXhlcy5mb3JFYWNoKHk9Pnt2Lmhhcyh5LmNvbEluZGV4KCkpfHx5LnNldERpc3BsYXllZCghMSl9KTt0aGlzLl91cGRhdGVTdGF0aW9uYXJ5QXhlc1Bvc2l0aW9ucyh2KTt0aGlzLl9wYXJlbnRzU2VsPXRoaXMuX3BhcmVudHNTZWwuZGF0YShBcnJheS5mcm9tKHYpLHk9PnkpO3RoaXMuX3BhcmVudHNTZWwuZXhpdCgpLnJlbW92ZSgpO3RoaXMuX3BhcmVudHNTZWw9dGhpcy5fcGFyZW50c1NlbC5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoImF4aXMtcGFyZW50IiwhMCkubWVyZ2UodGhpcy5fcGFyZW50c1NlbCk7Y29uc3QgQT10aGlzO3RoaXMuX3BhcmVudHNTZWwuY2FsbCh5PT50aGlzLl91cGRhdGVBeGVzUG9zaXRpb25zSW5ET00oeSkpLmVhY2goZnVuY3Rpb24oeSl7QS5fYXhlc1t5XS51cGRhdGVET00odGhpcyl9KX1tYXBWaXNpYmxlQXhlcyhyKXtyZXR1cm4gdGhpcy5fc3RhdGlvbmFyeUF4ZXNQb3NpdGlvbnMuZG9tYWluKCkubWFwKHQ9PgpyKHRoaXMuZ2V0QXhpc1Bvc2l0aW9uKHQpLHRoaXMuX2F4ZXNbdF0pKX1hbGxWaXNpYmxlQXhlc1NhdGlzZnkocil7cmV0dXJuIHRoaXMuX3N0YXRpb25hcnlBeGVzUG9zaXRpb25zLmRvbWFpbigpLmV2ZXJ5KHQ9PnIodGhpcy5nZXRBeGlzUG9zaXRpb24odCksdGhpcy5fYXhlc1t0XSkpfWdldEF4aXNGb3JDb2xJbmRleChyKXtyZXR1cm4gdGhpcy5fYXhlc1tyXX1kcmFnU3RhcnQocil7Y29uc29sZS5hc3NlcnQoIXRoaXMuaXNBeGlzRHJhZ2dpbmcoKSk7Y29uc29sZS5hc3NlcnQodGhpcy5fYXhlc1tyXS5pc0Rpc3BsYXllZCgpKTt0aGlzLl9kcmFnZ2VkQXhpcz10aGlzLl9heGVzW3JdO3RoaXMuX2RyYWdnZWRBeGlzUG9zaXRpb249dGhpcy5fc3RhdGlvbmFyeUF4ZXNQb3NpdGlvbnMocil9ZHJhZyhyKXt0aGlzLl9kcmFnZ2VkQXhpc1Bvc2l0aW9uPXI9TWF0aC5taW4oTWF0aC5tYXgociwwKSx0aGlzLl9zdmdQcm9wcy53aWR0aCk7cj10aGlzLl9zdGF0aW9uYXJ5QXhlc1Bvc2l0aW9ucy5kb21haW4oKTsKci5zb3J0KCh0LHYpPT50aGlzLmdldEF4aXNQb3NpdGlvbih0KS10aGlzLmdldEF4aXNQb3NpdGlvbih2KSk7dGhpcy5fc3RhdGlvbmFyeUF4ZXNQb3NpdGlvbnMuZG9tYWluKHIpO3RoaXMuX3VwZGF0ZUF4ZXNQb3NpdGlvbnNJbkRPTSh0aGlzLl9wYXJlbnRzU2VsKX1kcmFnRW5kKCl7Y29uc29sZS5hc3NlcnQodGhpcy5pc0F4aXNEcmFnZ2luZygpKTt0aGlzLl9kcmFnZ2VkQXhpcz10aGlzLl9kcmFnZ2VkQXhpc1Bvc2l0aW9uPW51bGw7dGhpcy5fdXBkYXRlQXhlc1Bvc2l0aW9uc0luRE9NKHRoaXMuX3BhcmVudHNTZWwudHJhbnNpdGlvbigpLmR1cmF0aW9uKDUwMCkpfWlzQXhpc0RyYWdnaW5nKCl7cmV0dXJuIG51bGwhPT10aGlzLl9kcmFnZ2VkQXhpc31nZXRBeGlzUG9zaXRpb24ocil7cmV0dXJuIG51bGwhPT10aGlzLl9kcmFnZ2VkQXhpcyYmdGhpcy5fZHJhZ2dlZEF4aXMuY29sSW5kZXgoKT09PXI/dGhpcy5fZHJhZ2dlZEF4aXNQb3NpdGlvbjp0aGlzLl9zdGF0aW9uYXJ5QXhlc1Bvc2l0aW9ucyhyKX1fdXBkYXRlU3RhdGlvbmFyeUF4ZXNQb3NpdGlvbnMocil7dmFyIHQ9CnRoaXMuX3N0YXRpb25hcnlBeGVzUG9zaXRpb25zLmRvbWFpbigpLmZpbHRlcih2PT5yLmhhcyh2KSk7dD1BcnJheS5mcm9tKG5ldyBTZXQoWy4uLnQsLi4uQXJyYXkuZnJvbShyKV0pKTt0aGlzLl9zdGF0aW9uYXJ5QXhlc1Bvc2l0aW9ucy5kb21haW4odCl9X3VwZGF0ZUF4ZXNQb3NpdGlvbnNJbkRPTShyKXtyLmF0dHIoInRyYW5zZm9ybSIsdD0+YS5ocGFyYW1zLnV0aWxzLnRyYW5zbGF0ZVN0cih0aGlzLmdldEF4aXNQb3NpdGlvbih0KSkpfV9jcmVhdGVBeGVzKHIpe3JldHVybiBkMy5yYW5nZShhLmhwYXJhbXMudXRpbHMubnVtQ29sdW1ucyh0aGlzLl9zY2hlbWEpKS5tYXAodD0+bmV3IHAodGhpcy5fc3ZnUHJvcHMsdGhpcy5fc2NoZW1hLHIsdCkpfX1kLkF4ZXNDb2xsZWN0aW9uPXF9KShjLnBhcmFsbGVsX2Nvb3Jkc19wbG90fHwoYy5wYXJhbGxlbF9jb29yZHNfcGxvdD17fSkpfSkoYS5ocGFyYW1zfHwoYS5ocGFyYW1zPXt9KSl9KSh0Znx8KHRmPXt9KSk7Cjwvc2NyaXB0PgogIDxzY3JpcHQ+Ly9+fldFQlBBVEh+fi90Zi1ocGFyYW1zLXBhcmFsbGVsLWNvb3Jkcy1wbG90L2xpbmVzLmpzCihmdW5jdGlvbihhKXsoZnVuY3Rpb24oYyl7KGZ1bmN0aW9uKGQpe2xldCBmOyhmdW5jdGlvbihrKXtrW2suRk9SRUdST1VORD0wXT0iRk9SRUdST1VORCI7a1trLkJBQ0tHUk9VTkQ9MV09IkJBQ0tHUk9VTkQifSkoZj1kLkxpbmVUeXBlfHwoZC5MaW5lVHlwZT17fSkpO2NsYXNzIGd7Y29uc3RydWN0b3Ioayl7dm9pZCAwPT09ayYmKGs9ZDMuc2VsZWN0QWxsKG51bGwpKTtjb25zb2xlLmFzc2VydCgxPj1rLnNpemUoKSk7dGhpcy5fc2Vzc2lvbkdyb3VwU2VsPWt9c2Vzc2lvbkdyb3VwKCl7cmV0dXJuIDE9PT10aGlzLl9zZXNzaW9uR3JvdXBTZWwuc2l6ZSgpP3RoaXMuX3Nlc3Npb25Hcm91cFNlbC5kYXR1bSgpOm51bGx9aXNOdWxsKCl7cmV0dXJuIG51bGw9PT10aGlzLnNlc3Npb25Hcm91cCgpfXNlbGVjdGlvbigpe3JldHVybiB0aGlzLl9zZXNzaW9uR3JvdXBTZWx9ZXF1YWxzVG8oayl7cmV0dXJuIHRoaXMuaXNOdWxsKCk/ay5pc051bGwoKTprLmlzTnVsbCgpPyExOmsuc2Vzc2lvbkdyb3VwKCkubmFtZT09CnRoaXMuc2Vzc2lvbkdyb3VwKCkubmFtZX19ZC5TZXNzaW9uR3JvdXBIYW5kbGU9ZztjbGFzcyBse2NvbnN0cnVjdG9yKGssbSxwKXt0aGlzLl9zdmdQcm9wcz1rO3RoaXMuX3NjaGVtYT1tO3RoaXMuX2F4ZXNDb2xsZWN0aW9uPXA7dGhpcy5fc2Vzc2lvbkdyb3Vwcz1bXTt0aGlzLl9zdmdQcm9wcy5zdmdHLnNlbGVjdEFsbCgiZy5iYWNrZ3JvdW5kIikucmVtb3ZlKCk7dGhpcy5fc3ZnUHJvcHMuc3ZnRy5zZWxlY3RBbGwoImcuZm9yZWdyb3VuZCIpLnJlbW92ZSgpO3RoaXMuX2JnUGF0aHNTZWw9dGhpcy5fc3ZnUHJvcHMuc3ZnRy5hcHBlbmQoImciKS5jbGFzc2VkKCJiYWNrZ3JvdW5kIiwhMCkuc2VsZWN0QWxsKCJwYXRoIik7dGhpcy5fZmdQYXRoc1NlbD10aGlzLl9zdmdQcm9wcy5zdmdHLmFwcGVuZCgiZyIpLmNsYXNzZWQoImZvcmVncm91bmQiLCEwKS5zZWxlY3RBbGwoInBhdGgiKTt0aGlzLl91cGRhdGVWaXNpYmxlRmdQYXRoc1NlbCgpO3RoaXMuX3BlYWtlZFNlc3Npb25Hcm91cEhhbmRsZT0KbmV3IGc7dGhpcy5fc2VsZWN0ZWRTZXNzaW9uR3JvdXBIYW5kbGU9bmV3IGc7dGhpcy5fZDNsaW5lPWQzLmxpbmUoKS5jdXJ2ZShkMy5jdXJ2ZUxpbmVhcil9Z2V0U2Vzc2lvbkdyb3VwSGFuZGxlKGspe3JldHVybiBudWxsPT09a3x8dm9pZCAwPT09az9uZXcgZzpuZXcgZyh0aGlzLl9mZ1BhdGhzU2VsLmZpbHRlcihtPT5tLm5hbWU9PT1rLm5hbWUpKX1oaWRlQmFja2dyb3VuZExpbmVzKCl7dGhpcy5fYmdQYXRoc1NlbC5hdHRyKCJ2aXNpYmlsaXR5IiwiaGlkZGVuIil9c2hvd0JhY2tncm91bmRMaW5lcygpe3RoaXMuX2JnUGF0aHNTZWwuYXR0cigidmlzaWJpbGl0eSIsbnVsbCl9cGVha2VkU2Vzc2lvbkdyb3VwSGFuZGxlKCl7cmV0dXJuIHRoaXMuX3BlYWtlZFNlc3Npb25Hcm91cEhhbmRsZX1zZWxlY3RlZFNlc3Npb25Hcm91cEhhbmRsZSgpe3JldHVybiB0aGlzLl9zZWxlY3RlZFNlc3Npb25Hcm91cEhhbmRsZX1yZWNvbXB1dGVDb250cm9sUG9pbnRzKGssbT0wKXsoaz09PWYuRk9SRUdST1VORD8KdGhpcy5fZmdQYXRoc1NlbDp0aGlzLl9iZ1BhdGhzU2VsKS50cmFuc2l0aW9uKCkuZHVyYXRpb24obSkuYXR0cigiZCIscD0+dGhpcy5fcGF0aERBdHRyaWJ1dGUocCkpO2s9PT1mLkZPUkVHUk9VTkQmJndpbmRvdy5zZXRUaW1lb3V0KCgpPT57Y29uc3QgcD10aGlzO3RoaXMuX2ZnUGF0aHNTZWwuZWFjaChmdW5jdGlvbihxKXtwLl9zZXRDb250cm9sUG9pbnRzUHJvcGVydHkodGhpcyxxKX0pfSl9cmVjb21wdXRlRm9yZWdyb3VuZExpbmVzVmlzaWJpbGl0eSgpe3RoaXMuX2ZnUGF0aHNTZWwuY2xhc3NlZCgiaW52aXNpYmxlLXBhdGgiLGs9PiF0aGlzLl9heGVzQ29sbGVjdGlvbi5hbGxWaXNpYmxlQXhlc1NhdGlzZnkoKG0scCk9PnAuYnJ1c2hGaWx0ZXIoKS5pc1Bhc3NpbmcoYS5ocGFyYW1zLnV0aWxzLmNvbHVtblZhbHVlQnlJbmRleCh0aGlzLl9zY2hlbWEsayxwLmNvbEluZGV4KCkpKSkpO3RoaXMuX3VwZGF0ZVZpc2libGVGZ1BhdGhzU2VsKCl9c2V0Rm9yZWdyb3VuZExpbmVzQ29sb3IoaywKbSxwKXtrPXRoaXMuX2NyZWF0ZUxpbmVDb2xvckZ1bmN0aW9uKGssbSxwKTt0aGlzLl9mZ1BhdGhzU2VsLmF0dHIoInN0cm9rZSIsayl9cmVkcmF3KGssbSxwLHEpe2NvbnN0IHI9dGhpcy5fcGVha2VkU2Vzc2lvbkdyb3VwSGFuZGxlLnNlc3Npb25Hcm91cCgpLHQ9dGhpcy5fc2VsZWN0ZWRTZXNzaW9uR3JvdXBIYW5kbGUuc2Vzc2lvbkdyb3VwKCk7dGhpcy5fc2Vzc2lvbkdyb3Vwcz1rO3RoaXMuX2ZnUGF0aHNTZWw9dGhpcy5fcmVjb21wdXRlUGF0aFNlbGVjdGlvbih0aGlzLl9mZ1BhdGhzU2VsKTt0aGlzLl9iZ1BhdGhzU2VsPXRoaXMuX3JlY29tcHV0ZVBhdGhTZWxlY3Rpb24odGhpcy5fYmdQYXRoc1NlbCk7dGhpcy5fcGVha2VkU2Vzc2lvbkdyb3VwSGFuZGxlPXRoaXMuZ2V0U2Vzc2lvbkdyb3VwSGFuZGxlKHIpO3RoaXMuX3NlbGVjdGVkU2Vzc2lvbkdyb3VwSGFuZGxlPXRoaXMuZ2V0U2Vzc2lvbkdyb3VwSGFuZGxlKHQpO3RoaXMucmVjb21wdXRlQ29udHJvbFBvaW50cyhmLkZPUkVHUk9VTkQpOwp0aGlzLnJlY29tcHV0ZUNvbnRyb2xQb2ludHMoZi5CQUNLR1JPVU5EKTt0aGlzLnJlY29tcHV0ZUZvcmVncm91bmRMaW5lc1Zpc2liaWxpdHkoKTt0aGlzLnNldEZvcmVncm91bmRMaW5lc0NvbG9yKG0scCxxKX11cGRhdGVQZWFrZWRTZXNzaW9uR3JvdXAoayl7dGhpcy5fcGVha2VkU2Vzc2lvbkdyb3VwSGFuZGxlLnNlbGVjdGlvbigpLmNsYXNzZWQoInBlYWtlZC1wYXRoIiwhMSk7dGhpcy5fcGVha2VkU2Vzc2lvbkdyb3VwSGFuZGxlPWs7dGhpcy5fcGVha2VkU2Vzc2lvbkdyb3VwSGFuZGxlLnNlbGVjdGlvbigpLmNsYXNzZWQoInBlYWtlZC1wYXRoIiwhMCl9Y2xlYXJQZWFrZWRTZXNzaW9uR3JvdXAoKXt0aGlzLnVwZGF0ZVBlYWtlZFNlc3Npb25Hcm91cChuZXcgZyl9dXBkYXRlU2VsZWN0ZWRTZXNzaW9uR3JvdXAoayl7dGhpcy5fc2VsZWN0ZWRTZXNzaW9uR3JvdXBIYW5kbGUuc2VsZWN0aW9uKCkuY2xhc3NlZCgic2VsZWN0ZWQtcGF0aCIsITEpO3RoaXMuX3NlbGVjdGVkU2Vzc2lvbkdyb3VwSGFuZGxlPQprO3RoaXMuX3NlbGVjdGVkU2Vzc2lvbkdyb3VwSGFuZGxlLnNlbGVjdGlvbigpLmNsYXNzZWQoInNlbGVjdGVkLXBhdGgiLCEwKX1maW5kQ2xvc2VzdFNlc3Npb25Hcm91cChrLG0pe2NvbnN0IHA9dGhpcy5fYXhlc0NvbGxlY3Rpb24ubWFwVmlzaWJsZUF4ZXMocT0+cSk7az1hLmhwYXJhbXMucGFyYWxsZWxfY29vcmRzX3Bsb3QuZmluZENsb3Nlc3RQYXRoKHRoaXMuX3Zpc2libGVGZ1BhdGhzU2VsLm5vZGVzKCkscCxbayxtXSk7cmV0dXJuIG51bGw9PT1rP25ldyBnOm5ldyBnKGQzLnNlbGVjdChrKSl9X2NyZWF0ZUxpbmVDb2xvckZ1bmN0aW9uKGssbSxwKXtpZihudWxsPT09aylyZXR1cm4oKT0+InJlZCI7Y29uc3QgcT1kMy5zY2FsZUxpbmVhcigpLmRvbWFpbihhLmhwYXJhbXMudXRpbHMubnVtZXJpY0NvbHVtbkV4dGVudCh0aGlzLl9zY2hlbWEsdGhpcy5fc2Vzc2lvbkdyb3VwcyxrKSkucmFuZ2UoW20scF0pLmludGVycG9sYXRlKGQzLmludGVycG9sYXRlTGFiKTtyZXR1cm4gcj0+CnEoYS5ocGFyYW1zLnV0aWxzLmNvbHVtblZhbHVlQnlJbmRleCh0aGlzLl9zY2hlbWEscixrKSl9X3JlY29tcHV0ZVBhdGhTZWxlY3Rpb24oayl7az1rLmRhdGEodGhpcy5fc2Vzc2lvbkdyb3VwcyxtPT5tLm5hbWUpO2suZXhpdCgpLnJlbW92ZSgpO3JldHVybiBrLmVudGVyKCkuYXBwZW5kKCJwYXRoIikubWVyZ2Uoayl9X3NldENvbnRyb2xQb2ludHNQcm9wZXJ0eShrLG0pe2suY29udHJvbFBvaW50cz10aGlzLl9jb21wdXRlQ29udHJvbFBvaW50cyhtKX1fY29tcHV0ZUNvbnRyb2xQb2ludHMoayl7cmV0dXJuIHRoaXMuX2F4ZXNDb2xsZWN0aW9uLm1hcFZpc2libGVBeGVzKChtLHApPT5bbSxwLnlTY2FsZSgpKGEuaHBhcmFtcy51dGlscy5jb2x1bW5WYWx1ZUJ5SW5kZXgodGhpcy5fc2NoZW1hLGsscC5jb2xJbmRleCgpKSldKX1fcGF0aERBdHRyaWJ1dGUoayl7cmV0dXJuIHRoaXMuX2QzbGluZSh0aGlzLl9jb21wdXRlQ29udHJvbFBvaW50cyhrKSl9X3VwZGF0ZVZpc2libGVGZ1BhdGhzU2VsKCl7dGhpcy5fdmlzaWJsZUZnUGF0aHNTZWw9CnRoaXMuX2ZnUGF0aHNTZWwuZmlsdGVyKCI6bm90KC5pbnZpc2libGUtcGF0aCkiKX19ZC5MaW5lc0NvbGxlY3Rpb249bH0pKGMucGFyYWxsZWxfY29vcmRzX3Bsb3R8fChjLnBhcmFsbGVsX2Nvb3Jkc19wbG90PXt9KSl9KShhLmhwYXJhbXN8fChhLmhwYXJhbXM9e30pKX0pKHRmfHwodGY9e30pKTsKPC9zY3JpcHQ+CiAgPHNjcmlwdD4vL35+V0VCUEFUSH5+L3RmLWhwYXJhbXMtcGFyYWxsZWwtY29vcmRzLXBsb3QvaW50ZXJhY3Rpb25fbWFuYWdlci5qcwooZnVuY3Rpb24oYSl7KGZ1bmN0aW9uKGMpeyhmdW5jdGlvbihkKXtjbGFzcyBme2NvbnN0cnVjdG9yKGwsayl7dGhpcy5zdmc9ZDMuc2VsZWN0KGwpO2w9MTAwKmsrMjA7dGhpcy5zdmcuYXR0cigidmlld0JveCIsYDAgMCAke2x9ICR7MjQwfWApO3RoaXMuc3ZnLmF0dHIoInByZXNlcnZlQXNwZWN0UmF0aW8iLCJ4TWlkWU1pZCIpO3RoaXMuc3ZnLnN0eWxlKCJtaW4td2lkdGgiLGwrInB4Iik7dGhpcy5zdmcuc3R5bGUoIm1pbi1oZWlnaHQiLCIyNDBweCIpO3RoaXMud2lkdGg9bC0xMC0xMDt0aGlzLmhlaWdodD0yMDA7dGhpcy5zdmdHPXRoaXMuc3ZnLmFwcGVuZCgiZyIpLmF0dHIoInRyYW5zZm9ybSIsYS5ocGFyYW1zLnV0aWxzLnRyYW5zbGF0ZVN0cigxMCwzMCkpfX1kLlNWR1Byb3BlcnRpZXM9ZjtjbGFzcyBne2NvbnN0cnVjdG9yKGwsayxtLHApe3RoaXMuX3N2Z1Byb3BzPWw7dGhpcy5fc2NoZW1hPWs7dGhpcy5fcGVha2VkU2Vzc2lvbkdyb3VwQ2hhbmdlZENCPW07dGhpcy5fc2VsZWN0ZWRTZXNzaW9uR3JvdXBDaGFuZ2VkQ0I9CnA7dGhpcy5fYXhlc0NvbGxlY3Rpb249bmV3IGQuQXhlc0NvbGxlY3Rpb24obCxrLHRoaXMpO3RoaXMuX2xpbmVzQ29sbGVjdGlvbj1uZXcgZC5MaW5lc0NvbGxlY3Rpb24obCxrLHRoaXMuX2F4ZXNDb2xsZWN0aW9uKTt0aGlzLl9zdmdQcm9wcy5zdmcub24oImNsaWNrIiwoKT0+dGhpcy5vbkNsaWNrKCkpLm9uKCJtb3VzZW1vdmUgbW91c2VlbnRlciIsKCk9Pntjb25zdCBbcSxyXT1kMy5tb3VzZSh0aGlzLl9zdmdQcm9wcy5zdmdHLm5vZGUoKSk7dGhpcy5vbk1vdXNlTW92ZWQocSxyKX0pLm9uKCJtb3VzZWxlYXZlIiwoKT0+dGhpcy5vbk1vdXNlTGVhdmUoKSl9b25EcmFnU3RhcnQobCl7dGhpcy5fYXhlc0NvbGxlY3Rpb24uZHJhZ1N0YXJ0KGwpO3RoaXMuX2xpbmVzQ29sbGVjdGlvbi5oaWRlQmFja2dyb3VuZExpbmVzKCl9b25EcmFnKGwpe3RoaXMuX2F4ZXNDb2xsZWN0aW9uLmRyYWcobCk7dGhpcy5fbGluZXNDb2xsZWN0aW9uLnJlY29tcHV0ZUNvbnRyb2xQb2ludHMoZC5MaW5lVHlwZS5GT1JFR1JPVU5EKX1vbkRyYWdFbmQoKXt0aGlzLl9heGVzQ29sbGVjdGlvbi5kcmFnRW5kKCk7CnRoaXMuX2xpbmVzQ29sbGVjdGlvbi5yZWNvbXB1dGVDb250cm9sUG9pbnRzKGQuTGluZVR5cGUuRk9SRUdST1VORCw1MDApO3dpbmRvdy5zZXRUaW1lb3V0KCgpPT57dGhpcy5fbGluZXNDb2xsZWN0aW9uLnJlY29tcHV0ZUNvbnRyb2xQb2ludHMoZC5MaW5lVHlwZS5CQUNLR1JPVU5EKTt0aGlzLl9saW5lc0NvbGxlY3Rpb24uc2hvd0JhY2tncm91bmRMaW5lcygpfSw1MDApfW9uQnJ1c2hDaGFuZ2VkKGwpe3RoaXMuX2F4ZXNDb2xsZWN0aW9uLmdldEF4aXNGb3JDb2xJbmRleChsKS5zZXRCcnVzaFNlbGVjdGlvbihkMy5ldmVudC5zZWxlY3Rpb24pO3RoaXMuX2xpbmVzQ29sbGVjdGlvbi5yZWNvbXB1dGVGb3JlZ3JvdW5kTGluZXNWaXNpYmlsaXR5KCl9b25Nb3VzZU1vdmVkKGwsayl7dGhpcy5fbGluZXNDb2xsZWN0aW9uLnVwZGF0ZVBlYWtlZFNlc3Npb25Hcm91cCh0aGlzLl9saW5lc0NvbGxlY3Rpb24uZmluZENsb3Nlc3RTZXNzaW9uR3JvdXAobCxrKSk7dGhpcy5fcGVha2VkU2Vzc2lvbkdyb3VwQ2hhbmdlZENCKHRoaXMuX2xpbmVzQ29sbGVjdGlvbi5wZWFrZWRTZXNzaW9uR3JvdXBIYW5kbGUoKS5zZXNzaW9uR3JvdXAoKSl9b25Nb3VzZUxlYXZlKCl7dGhpcy5fbGluZXNDb2xsZWN0aW9uLnBlYWtlZFNlc3Npb25Hcm91cEhhbmRsZSgpLmlzTnVsbCgpfHwKKHRoaXMuX2xpbmVzQ29sbGVjdGlvbi5jbGVhclBlYWtlZFNlc3Npb25Hcm91cCgpLHRoaXMuX3BlYWtlZFNlc3Npb25Hcm91cENoYW5nZWRDQihudWxsKSl9b25DbGljaygpe3RoaXMuX2xpbmVzQ29sbGVjdGlvbi5wZWFrZWRTZXNzaW9uR3JvdXBIYW5kbGUoKS5zZXNzaW9uR3JvdXAoKT09PXRoaXMuX2xpbmVzQ29sbGVjdGlvbi5zZWxlY3RlZFNlc3Npb25Hcm91cEhhbmRsZSgpLnNlc3Npb25Hcm91cCgpP3RoaXMuX2xpbmVzQ29sbGVjdGlvbi51cGRhdGVTZWxlY3RlZFNlc3Npb25Hcm91cChuZXcgZC5TZXNzaW9uR3JvdXBIYW5kbGUpOnRoaXMuX2xpbmVzQ29sbGVjdGlvbi51cGRhdGVTZWxlY3RlZFNlc3Npb25Hcm91cCh0aGlzLl9saW5lc0NvbGxlY3Rpb24ucGVha2VkU2Vzc2lvbkdyb3VwSGFuZGxlKCkpO3RoaXMuX3NlbGVjdGVkU2Vzc2lvbkdyb3VwQ2hhbmdlZENCKHRoaXMuX2xpbmVzQ29sbGVjdGlvbi5zZWxlY3RlZFNlc3Npb25Hcm91cEhhbmRsZSgpLnNlc3Npb25Hcm91cCgpKX1vbk9wdGlvbnNPclNlc3Npb25Hcm91cHNDaGFuZ2VkKGwsCmspe3RoaXMuX2F4ZXNDb2xsZWN0aW9uLnVwZGF0ZUF4ZXMobCxrKTtjb25zdCBtPXRoaXMuX2xpbmVzQ29sbGVjdGlvbi5wZWFrZWRTZXNzaW9uR3JvdXBIYW5kbGUoKSxwPXRoaXMuX2xpbmVzQ29sbGVjdGlvbi5zZWxlY3RlZFNlc3Npb25Hcm91cEhhbmRsZSgpO3RoaXMuX2xpbmVzQ29sbGVjdGlvbi5yZWRyYXcoayx2b2lkIDAhPT1sLmNvbG9yQnlDb2x1bW5JbmRleD9sLmNvbHVtbnNbbC5jb2xvckJ5Q29sdW1uSW5kZXhdLmFic29sdXRlSW5kZXg6bnVsbCxsLm1pbkNvbG9yLGwubWF4Q29sb3IpO20uZXF1YWxzVG8odGhpcy5fbGluZXNDb2xsZWN0aW9uLnBlYWtlZFNlc3Npb25Hcm91cEhhbmRsZSgpKXx8dGhpcy5fcGVha2VkU2Vzc2lvbkdyb3VwQ2hhbmdlZENCKHRoaXMuX2xpbmVzQ29sbGVjdGlvbi5wZWFrZWRTZXNzaW9uR3JvdXBIYW5kbGUoKS5zZXNzaW9uR3JvdXAoKSk7cC5lcXVhbHNUbyh0aGlzLl9saW5lc0NvbGxlY3Rpb24uc2VsZWN0ZWRTZXNzaW9uR3JvdXBIYW5kbGUoKSl8fAp0aGlzLl9zZWxlY3RlZFNlc3Npb25Hcm91cENoYW5nZWRDQih0aGlzLl9saW5lc0NvbGxlY3Rpb24uc2VsZWN0ZWRTZXNzaW9uR3JvdXBIYW5kbGUoKS5zZXNzaW9uR3JvdXAoKSl9c2NoZW1hKCl7cmV0dXJuIHRoaXMuX3NjaGVtYX19ZC5JbnRlcmFjdGlvbk1hbmFnZXI9Z30pKGMucGFyYWxsZWxfY29vcmRzX3Bsb3R8fChjLnBhcmFsbGVsX2Nvb3Jkc19wbG90PXt9KSl9KShhLmhwYXJhbXN8fChhLmhwYXJhbXM9e30pKX0pKHRmfHwodGY9e30pKTsKPC9zY3JpcHQ+CiAgPHNjcmlwdD4vL35+V0VCUEFUSH5+L3RmLWhwYXJhbXMtcGFyYWxsZWwtY29vcmRzLXBsb3QvdGYtaHBhcmFtcy1wYXJhbGxlbC1jb29yZHMtcGxvdC5odG1sLmpzClBvbHltZXIoe2lzOiJ0Zi1ocGFyYW1zLXBhcmFsbGVsLWNvb3Jkcy1wbG90Iixwcm9wZXJ0aWVzOntzZXNzaW9uR3JvdXBzOkFycmF5LG9wdGlvbnM6T2JqZWN0LHNlbGVjdGVkU2Vzc2lvbkdyb3VwOnt0eXBlOk9iamVjdCx2YWx1ZTpudWxsLHJlYWRPbmx5OiEwLG5vdGlmeTohMH0sY2xvc2VzdFNlc3Npb25Hcm91cDp7dHlwZTpPYmplY3QsdmFsdWU6bnVsbCxyZWFkT25seTohMCxub3RpZnk6ITB9LHJlZHJhd0NvdW50Ont0eXBlOk51bWJlcix2YWx1ZTowfSxfdmFsaWRTZXNzaW9uR3JvdXBzOkFycmF5LF9pbnRlcmFjdGlvbk1hbmFnZXI6T2JqZWN0fSxvYnNlcnZlcnM6WyJfb3B0aW9uc09yU2Vzc2lvbkdyb3Vwc0NoYW5nZWQob3B0aW9ucy4qLCBzZXNzaW9uR3JvdXBzLiopIl0sX29wdGlvbnNPclNlc3Npb25Hcm91cHNDaGFuZ2VkKCl7aWYobnVsbCE9PXRoaXMub3B0aW9ucyl7dmFyIGE9dGhpcy5vcHRpb25zLmNvbmZpZ3VyYXRpb247aWYodm9pZCAwPT09dGhpcy5faW50ZXJhY3Rpb25NYW5hZ2VyfHwKIV8uaXNFcXVhbCh0aGlzLl9pbnRlcmFjdGlvbk1hbmFnZXIuc2NoZW1hKCksYS5zY2hlbWEpKXtkMy5zZWxlY3QodGhpcy4kLnN2Zykuc2VsZWN0QWxsKCIqIikucmVtb3ZlKCk7Y29uc3QgYz1uZXcgdGYuaHBhcmFtcy5wYXJhbGxlbF9jb29yZHNfcGxvdC5TVkdQcm9wZXJ0aWVzKHRoaXMuJC5zdmcsdGYuaHBhcmFtcy51dGlscy5udW1Db2x1bW5zKGEuc2NoZW1hKSk7dGhpcy5zY29wZVN1YnRyZWUodGhpcy4kLnN2ZywhMCk7dGhpcy5faW50ZXJhY3Rpb25NYW5hZ2VyPW5ldyB0Zi5ocGFyYW1zLnBhcmFsbGVsX2Nvb3Jkc19wbG90LkludGVyYWN0aW9uTWFuYWdlcihjLGEuc2NoZW1hLGQ9PnRoaXMuY2xvc2VzdFNlc3Npb25Hcm91cENoYW5nZWQoZCksZD0+dGhpcy5zZWxlY3RlZFNlc3Npb25Hcm91cENoYW5nZWQoZCkpfXRoaXMuX2NvbXB1dGVWYWxpZFNlc3Npb25Hcm91cHMoKTt0aGlzLl9pbnRlcmFjdGlvbk1hbmFnZXIub25PcHRpb25zT3JTZXNzaW9uR3JvdXBzQ2hhbmdlZCh0aGlzLm9wdGlvbnMsCnRoaXMuX3ZhbGlkU2Vzc2lvbkdyb3Vwcyk7dGhpcy5yZWRyYXdDb3VudCsrfX0sY2xvc2VzdFNlc3Npb25Hcm91cENoYW5nZWQoYSl7dGhpcy5fc2V0Q2xvc2VzdFNlc3Npb25Hcm91cChhKX0sc2VsZWN0ZWRTZXNzaW9uR3JvdXBDaGFuZ2VkKGEpe3RoaXMuX3NldFNlbGVjdGVkU2Vzc2lvbkdyb3VwKGEpfSxfY29tcHV0ZVZhbGlkU2Vzc2lvbkdyb3Vwcygpe2NvbnN0IGE9dGYuaHBhcmFtcy51dGlscztpZih2b2lkIDA9PT10aGlzLnNlc3Npb25Hcm91cHMpdGhpcy5fdmFsaWRTZXNzaW9uR3JvdXBzPXZvaWQgMDtlbHNle3ZhciBjPXRoaXMub3B0aW9ucy5jb25maWd1cmF0aW9uLnNjaGVtYTt0aGlzLl92YWxpZFNlc3Npb25Hcm91cHM9dGhpcy5zZXNzaW9uR3JvdXBzLmZpbHRlcihkPT57Zm9yKGxldCBmPTA7ZjxhLm51bUNvbHVtbnMoYyk7KytmKWlmKHRoaXMub3B0aW9ucy5jb25maWd1cmF0aW9uLmNvbHVtbnNWaXNpYmlsaXR5W2ZdJiZ2b2lkIDA9PT1hLmNvbHVtblZhbHVlQnlJbmRleChjLApkLGYpKXJldHVybiExO3JldHVybiEwfSl9fX0pOwo8L3NjcmlwdD4KPC9kb20tbW9kdWxlPgoKCgoKCjxkb20tbW9kdWxlIGlkPSJ0Zi1ocGFyYW1zLXBhcmFsbGVsLWNvb3Jkcy12aWV3Ij4KICA8dGVtcGxhdGU+CiAgICAKICAgIDxkaXYgY2xhc3M9InBhbmUiPgogICAgICA8dmFhZGluLXNwbGl0LWxheW91dCB2ZXJ0aWNhbD4KICAgICAgICAKICAgICAgICA8dGYtaHBhcmFtcy1zY2FsZS1hbmQtY29sb3ItY29udHJvbHMgaWQ9ImNvbnRyb2xzIiBjbGFzcz0ic2VjdGlvbiIgY29uZmlndXJhdGlvbj0iW1tjb25maWd1cmF0aW9uXV0iIHNlc3Npb24tZ3JvdXBzPSJbW3Nlc3Npb25Hcm91cHNdXSIgb3B0aW9ucz0ie3tfb3B0aW9uc319Ij4KICAgICAgICA8L3RmLWhwYXJhbXMtc2NhbGUtYW5kLWNvbG9yLWNvbnRyb2xzPgogICAgICAgIDx2YWFkaW4tc3BsaXQtbGF5b3V0IHZlcnRpY2FsPgogICAgICAgICAgCiAgICAgICAgICA8dGYtaHBhcmFtcy1wYXJhbGxlbC1jb29yZHMtcGxvdCBpZD0icGxvdCIgY2xhc3M9InNlY3Rpb24iIHNlc3Npb24tZ3JvdXBzPSJbW3Nlc3Npb25Hcm91cHNdXSIgc2VsZWN0ZWQtc2Vzc2lvbi1ncm91cD0ie3tfc2VsZWN0ZWRHcm91cH19IiBjbG9zZXN0LXNlc3Npb24tZ3JvdXA9Int7X2Nsb3Nlc3RHcm91cH19IiBvcHRpb25zPSJbW19vcHRpb25zXV0iPgogICAgICAgICAgPC90Zi1ocGFyYW1zLXBhcmFsbGVsLWNvb3Jkcy1wbG90PgogICAgICAgICAgPHZhYWRpbi1zcGxpdC1sYXlvdXQgdmVydGljYWw+CiAgICAgICAgICAgIDx0Zi1ocGFyYW1zLXNlc3Npb24tZ3JvdXAtdmFsdWVzIGlkPSJ2YWx1ZXMiIGNsYXNzPSJzZWN0aW9uIiB2aXNpYmxlLXNjaGVtYT0iW1tjb25maWd1cmF0aW9uLnZpc2libGVTY2hlbWFdXSIgc2Vzc2lvbi1ncm91cD0iW1tfY2xvc2VzdE9yU2VsZWN0ZWQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2Nsb3Nlc3RHcm91cCwgX3NlbGVjdGVkR3JvdXApXV0iPgogICAgICAgICAgICA8L3RmLWhwYXJhbXMtc2Vzc2lvbi1ncm91cC12YWx1ZXM+CiAgICAgICAgICAgIDx0Zi1ocGFyYW1zLXNlc3Npb24tZ3JvdXAtZGV0YWlscyBpZD0iZGV0YWlscyIgY2xhc3M9InNlY3Rpb24iIGJhY2tlbmQ9IltbYmFja2VuZF1dIiBleHBlcmltZW50LW5hbWU9IltbZXhwZXJpbWVudE5hbWVdXSIgc2Vzc2lvbi1ncm91cD0iW1tfc2VsZWN0ZWRHcm91cF1dIiB2aXNpYmxlLXNjaGVtYT0iW1tjb25maWd1cmF0aW9uLnZpc2libGVTY2hlbWFdXSI+CiAgICAgICAgICAgIDwvdGYtaHBhcmFtcy1zZXNzaW9uLWdyb3VwLWRldGFpbHM+CiAgICAgICAgICA8L3ZhYWRpbi1zcGxpdC1sYXlvdXQ+CiAgICAgICAgPC92YWFkaW4tc3BsaXQtbGF5b3V0PgogICAgICA8L3ZhYWRpbi1zcGxpdC1sYXlvdXQ+CiAgICA8L2Rpdj4KCiAgICA8c3R5bGU+CiAgICAgIC5wYW5lIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CiAgICAgIC5zZWN0aW9uIHsKICAgICAgICBtYXJnaW46IDEwcHg7CiAgICAgIH0KICAgICAgI2NvbnRyb2xzIHsKICAgICAgICBmbGV4LWdyb3c6IDA7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgZmxleC1iYXNpczogYXV0bzsKICAgICAgICBoZWlnaHQ6IGF1dG87CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICBtYXgtaGVpZ2h0OiBmaXQtY29udGVudDsKICAgICAgfQogICAgICAjcGxvdCB7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICAgIGZsZXgtc2hyaW5rOiAxOwogICAgICAgIGZsZXgtYmFzaXM6IGF1dG87CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgIH0KICAgICAgI3ZhbHVlcyB7CiAgICAgICAgZmxleC1ncm93OiAwOwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICAgIGZsZXgtYmFzaXM6IGF1dG87CiAgICAgICAgaGVpZ2h0OiA5NXB4OwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgICAgbWF4LWhlaWdodDogZml0LWNvbnRlbnQ7CiAgICAgIH0KICAgICAgI2RldGFpbHMgewogICAgICAgIGZsZXgtZ3JvdzogMDsKICAgICAgICBmbGV4LXNocmluazogMTsKICAgICAgICBmbGV4LWJhc2lzOiBhdXRvOwogICAgICAgIGhlaWdodDogYXV0bzsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIG1heC1oZWlnaHQ6IGZpdC1jb250ZW50OwogICAgICB9CiAgICAgIHZhYWRpbi1zcGxpdC1sYXlvdXQgewogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgoKICA8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdGYtaHBhcmFtcy1wYXJhbGxlbC1jb29yZHMtdmlldy90Zi1ocGFyYW1zLXBhcmFsbGVsLWNvb3Jkcy12aWV3Lmh0bWwuanMKUG9seW1lcih7aXM6InRmLWhwYXJhbXMtcGFyYWxsZWwtY29vcmRzLXZpZXciLHByb3BlcnRpZXM6e2JhY2tlbmQ6T2JqZWN0LGV4cGVyaW1lbnROYW1lOlN0cmluZyxjb25maWd1cmF0aW9uOk9iamVjdCxzZXNzaW9uR3JvdXBzOkFycmF5fSxfY2xvc2VzdE9yU2VsZWN0ZWQ6ZnVuY3Rpb24oYSxjKXtyZXR1cm4gbnVsbCE9PWE/YTpjfX0pOwo8L3NjcmlwdD4KPC9kb20tbW9kdWxlPgoKCgoKCgoKCjxkb20tbW9kdWxlIGlkPSJ0Zi1ocGFyYW1zLXNjYXR0ZXItcGxvdC1tYXRyaXgtcGxvdCI+CiAgPHRlbXBsYXRlPgogICAgPGRpdiBpZD0iY29udGFpbmVyIj4KICAgICAgPHN2ZyBpZD0ic3ZnIj48L3N2Zz4KICAgIDwvZGl2PgoKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CiAgICAgIHN2ZyB7CiAgICAgICAgZm9udDogMTBweCBzYW5zLXNlcmlmOwogICAgICB9CgogICAgICAvKiBUaGUgY2xvc2VzdCBkYXRhIHBvaW50IG1hcmtlciB0byB0aGUgbW91c2UgcG9pbnRlci4gV2UgdXNlICFpbXBvcnRhbnQKICAgICAgICAgdG8gb3ZlcnJpZGUgdGhlIGlubGluZSBzdHlsZSB0aGF0IHNldHMgdGhlIHJlZ3VsYXIgc3R5bGUgb2YgYSBtYXJrZXIuCiAgICAgICovCiAgICAgIC5jbG9zZXN0LW1hcmtlciB7CiAgICAgICAgcjogNiAhaW1wb3J0YW50OwogICAgICB9CgogICAgICAvKiBUaGUgY3VycmVudGx5IHNlbGVjdGVkIGRhdGEgcG9pbnQgbWFya2VyLiBXZSB1c2UgIWltcG9ydGFudCB0bwogICAgICAgICBvdmVycmlkZSB0aGUgaW5saW5lIHN0eWxlIHRoYXQgc2V0cyB0aGUgcmVndWxhciBzdHlsZSBvZiBhIG1hcmtlci4gKi8KICAgICAgLnNlbGVjdGVkLW1hcmtlciB7CiAgICAgICAgcjogNiAhaW1wb3J0YW50OwogICAgICAgIGZpbGw6ICMwZjAgIWltcG9ydGFudDsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgoKICA8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdGYtaHBhcmFtcy1zY2F0dGVyLXBsb3QtbWF0cml4LXBsb3QvdGYtaHBhcmFtcy1zY2F0dGVyLXBsb3QtbWF0cml4LXBsb3QuaHRtbC5qcwpQb2x5bWVyKHtpczoidGYtaHBhcmFtcy1zY2F0dGVyLXBsb3QtbWF0cml4LXBsb3QiLHByb3BlcnRpZXM6e3Zpc2libGVTY2hlbWE6T2JqZWN0LHNlc3Npb25Hcm91cHM6QXJyYXksb3B0aW9uczpPYmplY3Qsc2VsZWN0ZWRTZXNzaW9uR3JvdXA6e3R5cGU6T2JqZWN0LHZhbHVlOm51bGwscmVhZE9ubHk6ITAsbm90aWZ5OiEwfSxjbG9zZXN0U2Vzc2lvbkdyb3VwOnt0eXBlOk9iamVjdCx2YWx1ZTpudWxsLHJlYWRPbmx5OiEwLG5vdGlmeTohMH0sX2NvbnRhaW5lcjp7dHlwZTpPYmplY3QsdmFsdWU6bnVsbH0sX3N2Zzp7dHlwZTpPYmplY3QsdmFsdWU6bnVsbH0sd2lkdGg6e3R5cGU6TnVtYmVyLHZhbHVlOjB9LGhlaWdodDp7dHlwZTpOdW1iZXIsdmFsdWU6MH0sX2JydXNoZWRDZWxsSW5kZXg6e3R5cGU6T2JqZWN0LHZhbHVlOm51bGx9LF9icnVzaFNlbGVjdGlvbjp7dHlwZTpPYmplY3QsdmFsdWU6bnVsbH19LG9ic2VydmVyczpbIl9zZXNzaW9uR3JvdXBzQ2hhbmdlZChzZXNzaW9uR3JvdXBzLiopIiwKIl92aXNpYmxlU2NoZW1hQ2hhbmdlZCh2aXNpYmxlU2NoZW1hLiopIiwiX3JlZHJhdyhvcHRpb25zLiopIl0scmVhZHkoKXt0aGlzLl9jb250YWluZXI9dGhpcy4kLmNvbnRhaW5lcjt0aGlzLl9zdmc9ZDMuc2VsZWN0KHRoaXMuJC5zdmcpO3RoaXMuX3JlZHJhdygpfSxfc2Vzc2lvbkdyb3Vwc0NoYW5nZWQoKXtudWxsIT09dGhpcy5zZWxlY3RlZFNlc3Npb25Hcm91cCYmdGhpcy5fc2V0U2VsZWN0ZWRTZXNzaW9uR3JvdXAodGYuaHBhcmFtcy51dGlscy5zZXNzaW9uR3JvdXBXaXRoTmFtZSh0aGlzLnNlc3Npb25Hcm91cHMsdGhpcy5zZWxlY3RlZFNlc3Npb25Hcm91cC5uYW1lKXx8bnVsbCk7dGhpcy5fcmVkcmF3KCl9LF92aXNpYmxlU2NoZW1hQ2hhbmdlZCgpe3RoaXMuX2JydXNoU2VsZWN0aW9uPXRoaXMuX2JydXNoZWRDZWxsSW5kZXg9bnVsbDt0aGlzLl9yZWRyYXcoKX0sX3JlZHJhdygpe3RoaXMuZGVib3VuY2UoIl9yZWRyYXciLCgpPT57Y29uc3QgYT10Zi5ocGFyYW1zLnV0aWxzOwp0aGlzLndpZHRoPU1hdGgubWF4KDE1MCphLm51bVZpc2libGVDb2x1bW5zKHRoaXMudmlzaWJsZVNjaGVtYSksMTIwMCk7dGhpcy5oZWlnaHQ9TWF0aC5tYXgoMTEyLjUqYS5udW1WaXNpYmxlTWV0cmljcyh0aGlzLnZpc2libGVTY2hlbWEpLDQ4MCk7dGhpcy5fY29udGFpbmVyLnN0eWxlLndpZHRoPXRoaXMud2lkdGgrInB4Ijt0aGlzLl9jb250YWluZXIuc3R5bGUuaGVpZ2h0PXRoaXMuaGVpZ2h0KyJweCI7dGhpcy5fc3ZnLmF0dHIoIndpZHRoIix0aGlzLndpZHRoKS5hdHRyKCJoZWlnaHQiLHRoaXMuaGVpZ2h0KTt0aGlzLl9zdmcuc2VsZWN0QWxsKCJnIikucmVtb3ZlKCk7dGhpcy5fZHJhdygpfSwxMDApfSxfZHJhdygpe2Z1bmN0aW9uIGEobGEpe3JldHVybiJ4LWF4aXMtY2xpcC1wYXRoLSIrbGF9ZnVuY3Rpb24gYyhsYSl7cmV0dXJuIngtbGFiZWwtY2xpcC1wYXRoLSIrbGF9ZnVuY3Rpb24gZChsYSl7cmV0dXJuInktYXhpcy1jbGlwLXBhdGgtIitsYX1mdW5jdGlvbiBmKGxhKXtyZXR1cm4ieS1sYWJlbC1jbGlwLXBhdGgtIisKbGF9ZnVuY3Rpb24gZyhsYSx3YSxDYSx4YSx6YSl7Q2E9TWF0aC5mbG9vcihDYS94YSk7eGE9d2Euc2NhbGUoKTtpZigiUVVBTlRJTEUiPT09emEpe2xldCBGYT14YS5xdWFudGlsZXMoKTtGYT1kMy5yYW5nZSgwLEZhLmxlbmd0aCxNYXRoLmNlaWwoRmEubGVuZ3RoL0NhKSkubWFwKFNhPT5GYVtTYV0pO3dhLnRpY2tWYWx1ZXMoRmEpLnRpY2tGb3JtYXQoZDMuZm9ybWF0KCItLjJnIikpfSJMSU5FQVIiIT09emEmJiJMT0ciIT09emF8fHdhLnRpY2tzKENhKTtsYS5jYWxsKHdhKTtsYS5zZWxlY3RBbGwoIi5kb21haW4iKS5yZW1vdmUoKTtsYS5zZWxlY3RBbGwoIi50aWNrIGxpbmUiKS5hdHRyKCJzdHJva2UiLCIjZGRkIil9ZnVuY3Rpb24gbChsYSx3YSl7cmV0dXJuIExbd2FdKHguX2NvbFZhbHVlKGxhLHdhKSl9ZnVuY3Rpb24gayhsYSx3YSl7cmV0dXJuIEpbd2FdKHguX21ldHJpY1ZhbHVlKGxhLHdhKSl9ZnVuY3Rpb24gbShsYSx3YSl7Y29uc3QgQ2E9W107WVtsYV1bd2FdLmVhY2goZnVuY3Rpb24oKXtDYS5wdXNoKHRoaXMpfSk7CnJldHVybiBkMy5xdWFkdHJlZSgpLngoeGE9PmQzLnNlbGVjdCh4YSkuZGF0dW0oKS54KS55KHhhPT5kMy5zZWxlY3QoeGEpLmRhdHVtKCkueSkuYWRkQWxsKENhKX1mdW5jdGlvbiBwKCl7bGV0IGxhPW5ldyBTZXQoVC5ub2RlcygpKTt2KCl8fChsYT1xKHguX2JydXNoZWRDZWxsSW5kZXgseC5fYnJ1c2hTZWxlY3Rpb24pKTtkMy5zZWxlY3RBbGwoQXJyYXkuZnJvbSh5LmZpbHRlclNldChsYSx3YT0+IWNhLmhhcyh3YSkpKSkuYXR0cigiZmlsbCIsTik7ZDMuc2VsZWN0QWxsKEFycmF5LmZyb20oeS5maWx0ZXJTZXQoY2Esd2E9PiFsYS5oYXMod2EpKSkpLmF0dHIoImZpbGwiLCIjZGRkIik7Y2E9bGF9ZnVuY3Rpb24gcShsYSx3YSl7Y29uc29sZS5hc3NlcnQobnVsbCE9PWxhKTtjb25zb2xlLmFzc2VydChudWxsIT09d2EpO2NvbnN0IFtDYSx4YV09bGEsemE9bmV3IFNldDt5LnF1YWRUcmVlVmlzaXRQb2ludHNJblJlY3QoaGFbQ2FdW3hhXSx3YVswXVswXSx3YVswXVsxXSx3YVsxXVswXSwKd2FbMV1bMV0sRmE9PntkMy5zZWxlY3QoRmEpLmRhdHVtKCkuc2Vzc2lvbkdyb3VwTWFya2Vycy5mb3JFYWNoKFNhPT57emEuYWRkKFNhKX0pfSk7cmV0dXJuIHphfWZ1bmN0aW9uIHIobGEpe2NvbnN0IHdhPWQzLmJydXNoU2VsZWN0aW9uKGxhKTshdCgpJiZudWxsPT09d2F8fHQoKSYmbGE9PT1YLm5vZGUoKSYmXy5pc0VxdWFsKHdhLHguX2JydXNoU2VsZWN0aW9uKXx8KHguX2JydXNoU2VsZWN0aW9uPXdhLG51bGwhPT13YT8oWD1kMy5zZWxlY3QobGEpLHguX2JydXNoZWRDZWxsSW5kZXg9WC5kYXR1bSgpKTooWD1udWxsLHguX2JydXNoZWRDZWxsSW5kZXg9bnVsbCkscCgpKX1mdW5jdGlvbiB0KCl7cmV0dXJuIG51bGwhPT14Ll9icnVzaGVkQ2VsbEluZGV4JiZudWxsIT09eC5fYnJ1c2hTZWxlY3Rpb259ZnVuY3Rpb24gdigpe3JldHVybiF0KCl8fHguX2JydXNoU2VsZWN0aW9uWzBdWzBdPT09eC5fYnJ1c2hTZWxlY3Rpb25bMV1bMF18fHguX2JydXNoU2VsZWN0aW9uWzBdWzFdPT09CnguX2JydXNoU2VsZWN0aW9uWzFdWzFdfWZ1bmN0aW9uIEEobGEsd2EsQ2EseGEsemEpe2xldCBGYT1JbmZpbml0eSxTYT1udWxsO3kucXVhZFRyZWVWaXNpdFBvaW50c0luRGlzayhoYVtsYV1bd2FdLENhLHhhLHphLChFYSxHYSk9PntjYS5oYXMoRWEpJiZHYTxGYSYmKEVhPWQzLnNlbGVjdChFYSkuZGF0dW0oKSxGYT1HYSxTYT1FYS5zZXNzaW9uR3JvdXApfSk7cmV0dXJuIG51bGw9PT1TYT9udWxsOmQzLnNlbGVjdEFsbChhYS5nZXQoU2EpKX1jb25zdCB5PXRmLmhwYXJhbXMudXRpbHMseD10aGlzO2lmKHRoaXMuc2Vzc2lvbkdyb3VwcyYmMCE9dGhpcy5zZXNzaW9uR3JvdXBzLmxlbmd0aCYmdGhpcy52aXNpYmxlU2NoZW1hJiYwIT10aGlzLnZpc2libGVTY2hlbWEubWV0cmljSW5mb3MubGVuZ3RoKXt2YXIgQz1kMy5yYW5nZSh5Lm51bVZpc2libGVDb2x1bW5zKHgudmlzaWJsZVNjaGVtYSkpLEY9ZDMucmFuZ2UoeS5udW1WaXNpYmxlTWV0cmljcyh4LnZpc2libGVTY2hlbWEpKSwKRD1kMy5zY2FsZUJhbmQoKS5kb21haW4oQykucmFuZ2UoWzg1LHRoaXMud2lkdGgtMS01XSkucGFkZGluZ0lubmVyKC4xKSxCPWQzLnNjYWxlQmFuZCgpLmRvbWFpbihGKS5yYW5nZShbdGhpcy5oZWlnaHQtMS01LTUwLDVdKS5wYWRkaW5nSW5uZXIoLjEpLEc9RC5iYW5kd2lkdGgoKSxLPUIuYmFuZHdpZHRoKCksTD1DLm1hcChsYT0+eC5fY2VsbFNjYWxlKGxhLFswLEctMV0pKSxKPUYubWFwKGxhPT54Ll9jZWxsU2NhbGUobGEreS5udW1WaXNpYmxlSFBhcmFtcyh4LnZpc2libGVTY2hlbWEpLFtLLTEsMF0pKSxQPXRoaXMuX3N2Zy5zZWxlY3RBbGwoIi54LWF4aXMiKS5kYXRhKEMpLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgieC1heGlzIiwhMCkuYXR0cigidHJhbnNmb3JtIixsYT0+eS50cmFuc2xhdGVTdHIoRChsYSksMCkpO1AuYXBwZW5kKCJjbGlwUGF0aCIpLmF0dHIoImlkIixhKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4IiwtNSkuYXR0cigieSIsMCkuYXR0cigid2lkdGgiLApHKzEwKS5hdHRyKCJoZWlnaHQiLHguaGVpZ2h0LTI1KTtQLmFwcGVuZCgiY2xpcFBhdGgiKS5hdHRyKCJpZCIsYykuYXBwZW5kKCJyZWN0IikuYXR0cigieCIsMCkuYXR0cigieSIseC5oZWlnaHQtMjUpLmF0dHIoIndpZHRoIixHKS5hdHRyKCJoZWlnaHQiLDI1KTtQLmFwcGVuZCgiZyIpLmF0dHIoImNsaXAtcGF0aCIsbGE9PiJ1cmwoIyIrYShsYSkrIikiKS5lYWNoKGZ1bmN0aW9uKGxhKXtkMy5zZWxlY3QodGhpcykuY2FsbChnLGQzLmF4aXNCb3R0b20oTFtsYV0pLnRpY2tTaXplKHguaGVpZ2h0LTUwKSxHLDQwLHgub3B0aW9ucy5jb2x1bW5zW2xhXS5zY2FsZSl9KTtQLmFwcGVuZCgiZyIpLmNsYXNzZWQoIngtYXhpcy1sYWJlbCIsITApLmF0dHIoImNsaXAtcGF0aCIsbGE9PiJ1cmwoIyIrYyhsYSkrIikiKS5hcHBlbmQoInRleHQiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmF0dHIoIngiLEcvMikuYXR0cigieSIseC5oZWlnaHQtMS0xMi41KS50ZXh0KGxhPT55LnNjaGVtYVZpc2libGVDb2x1bW5OYW1lKHgudmlzaWJsZVNjaGVtYSwKbGEpKS5hcHBlbmQoInRpdGxlIikudGV4dChsYT0+eS5zY2hlbWFWaXNpYmxlQ29sdW1uTmFtZSh4LnZpc2libGVTY2hlbWEsbGEpKTtQPXRoaXMuX3N2Zy5zZWxlY3RBbGwoIi55LWF4aXMiKS5kYXRhKEYpLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgieS1heGlzIiwhMCkuYXR0cigidHJhbnNmb3JtIixsYT0+eS50cmFuc2xhdGVTdHIoeC53aWR0aC0xLEIobGEpKSk7UC5hcHBlbmQoImNsaXBQYXRoIikuYXR0cigiaWQiLGQpLmFwcGVuZCgicmVjdCIpLmF0dHIoIngiLC0oeC53aWR0aC00MC0xKSkuYXR0cigieSIsLTUpLmF0dHIoIndpZHRoIix4LndpZHRoLTQwKS5hdHRyKCJoZWlnaHQiLEsrMTApO1AuYXBwZW5kKCJjbGlwUGF0aCIpLmF0dHIoImlkIixmKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4IiwtKHgud2lkdGgtMSkpLmF0dHIoInkiLDApLmF0dHIoIndpZHRoIiw0MCkuYXR0cigiaGVpZ2h0IixLKTtQLmFwcGVuZCgiZyIpLmF0dHIoImNsaXAtcGF0aCIsbGE9PiJ1cmwoIyIrCmQobGEpKyIpIikuZWFjaChmdW5jdGlvbihsYSl7ZDMuc2VsZWN0KHRoaXMpLmNhbGwoZyxkMy5heGlzTGVmdChKW2xhXSkudGlja1NpemUoeC53aWR0aC04MCksSywyMCx4Lm9wdGlvbnMuY29sdW1uc1tsYSt5Lm51bVZpc2libGVIUGFyYW1zKHgudmlzaWJsZVNjaGVtYSldLnNjYWxlKX0pO1AuYXBwZW5kKCJnIikuY2xhc3NlZCgieS1heGlzLWxhYmVsIiwhMCkuYXR0cigiY2xpcC1wYXRoIixsYT0+InVybCgjIitmKGxhKSsiKSIpLmFwcGVuZCgidGV4dCIpLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIikuYXR0cigieCIsLSh4LndpZHRoLTIwLTEpKS5hdHRyKCJ5IixLLzIpLmF0dHIoInRyYW5zZm9ybSIseS5yb3RhdGVTdHIoLSh4LndpZHRoLTIwLTEpLEsvMikpLnRleHQobGE9PnkubWV0cmljTmFtZSh4LnZpc2libGVTY2hlbWEubWV0cmljSW5mb3NbbGFdKSkuYXBwZW5kKCJ0aXRsZSIpLnRleHQobGE9PnkubWV0cmljTmFtZSh4LnZpc2libGVTY2hlbWEubWV0cmljSW5mb3NbbGFdKSk7ClA9dGhpcy5fc3ZnLnNlbGVjdEFsbCgiLmNlbGwiKS5kYXRhKGQzLmNyb3NzKEMsRikpLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgiY2VsbCIsITApLmF0dHIoInRyYW5zZm9ybSIsKFtsYSx3YV0pPT55LnRyYW5zbGF0ZVN0cihEKGxhKSxCKHdhKSkpO1AuYXBwZW5kKCJnIikuY2xhc3NlZCgiZnJhbWUiLCEwKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4IiwtNSkuYXR0cigieSIsLTUpLmF0dHIoIndpZHRoIixHKzEwKS5hdHRyKCJoZWlnaHQiLEsrMTApLmF0dHIoInN0cm9rZSIsIiMwMDAiKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoInNoYXBlLXJlbmRlcmluZyIsImNyaXNwRWRnZXMiKTt2YXIgUz1udWxsO3ZvaWQgMCE9PXgub3B0aW9ucy5jb2xvckJ5Q29sdW1uSW5kZXgmJihTPWQzLnNjYWxlTGluZWFyKCkuZG9tYWluKHRoaXMuX2NvbEV4dGVudCh0aGlzLm9wdGlvbnMuY29sb3JCeUNvbHVtbkluZGV4KSkucmFuZ2UoW3RoaXMub3B0aW9ucy5taW5Db2xvcix0aGlzLm9wdGlvbnMubWF4Q29sb3JdKS5pbnRlcnBvbGF0ZShkMy5pbnRlcnBvbGF0ZUxhYikpOwp2YXIgTj12b2lkIDA9PT14Lm9wdGlvbnMuY29sb3JCeUNvbHVtbkluZGV4PygpPT4icmVkIjooe3Nlc3Npb25Hcm91cDpsYX0pPT5TKHRoaXMuX2NvbFZhbHVlKGxhLHgub3B0aW9ucy5jb2xvckJ5Q29sdW1uSW5kZXgpKSxbVCxZLGFhXT1mdW5jdGlvbihsYSx3YSl7Y29uc3QgQ2E9bGEuc2VsZWN0QWxsKCIuZGF0YS1tYXJrZXIiKS5kYXRhKChbemEsRmFdKT0+eC5zZXNzaW9uR3JvdXBzLmZpbHRlcihTYT0+dm9pZCAwIT09eC5fY29sVmFsdWUoU2EsemEpJiZ2b2lkIDAhPT14Ll9tZXRyaWNWYWx1ZShTYSxGYSkpLm1hcChTYT0+KHtjb2w6emEsbWV0cmljOkZhLHNlc3Npb25Hcm91cDpTYSx4OmwoU2EsemEpLHk6ayhTYSxGYSksc2Vzc2lvbkdyb3VwTWFya2VyczpudWxsfSkpKS5lbnRlcigpLmFwcGVuZCgiY2lyY2xlIikuY2xhc3NlZCgiZGF0YS1tYXJrZXIiLCEwKS5hdHRyKCJjeCIsKHt4OnphfSk9PnphKS5hdHRyKCJjeSIsKHt5OnphfSk9PnphKS5hdHRyKCJyIiwyKS5hdHRyKCJmaWxsIiwKd2EpLHhhPW5ldyBNYXA7eC5zZXNzaW9uR3JvdXBzLmZvckVhY2goemE9Pnt4YS5zZXQoemEsW10pfSk7Q2EuZWFjaChmdW5jdGlvbih6YSl7eGEuZ2V0KHphLnNlc3Npb25Hcm91cCkucHVzaCh0aGlzKX0pO0NhLmVhY2goemE9Pntjb25zdCBGYT14YS5nZXQoemEuc2Vzc2lvbkdyb3VwKTt6YS5zZXNzaW9uR3JvdXBNYXJrZXJzPW5ldyBTZXQoRmEpfSk7bGE9Qy5tYXAoemE9PkYubWFwKEZhPT5DYS5maWx0ZXIoU2E9PlNhLmNvbD09emEmJlNhLm1ldHJpYz09RmEpKSk7cmV0dXJuW0NhLGxhLHhhXX0oUC5hcHBlbmQoImciKSxOKSxoYT1DLm1hcChsYT0+Ri5tYXAod2E9Pm0obGEsd2EpKSksWD1udWxsO3QoKSYmKFg9UC5maWx0ZXIobGE9Pl8uaXNFcXVhbChsYSx4Ll9icnVzaGVkQ2VsbEluZGV4KSksY29uc29sZS5hc3NlcnQoMT09WC5zaXplKCksWCkpO3ZhciBjYT1uZXcgU2V0KFQubm9kZXMoKSk7cCgpO3ZhciBlYT1kMy5icnVzaCgpLmV4dGVudChbWy00LC00XSxbRy0xKzUtCjEsSy0xKzUtMV1dKS5vbigic3RhcnQiLGZ1bmN0aW9uKCl7dCgpJiZYLm5vZGUoKSE9dGhpcyYmZWEubW92ZShYLG51bGwpO3IodGhpcyl9KS5vbigiYnJ1c2giLGZ1bmN0aW9uKCl7cih0aGlzKX0pLm9uKCJlbmQiLGZ1bmN0aW9uKCl7cih0aGlzKX0pO1AuY2FsbChlYSk7dCgpJiZlYS5tb3ZlKFgseC5fYnJ1c2hTZWxlY3Rpb24pO3ZhciBrYT1udWxsLGJhPW51bGw7bnVsbCE9PXRoaXMuc2VsZWN0ZWRTZXNzaW9uR3JvdXAmJihiYT1kMy5zZWxlY3RBbGwoYWEuZ2V0KHRoaXMuc2VsZWN0ZWRTZXNzaW9uR3JvdXApKS5jbGFzc2VkKCJzZWxlY3RlZC1tYXJrZXIiLCEwKSk7UC5vbigiY2xpY2siLGZ1bmN0aW9uKCl7dmFyIGxhPWthPT09YmE/bnVsbDprYTtsYSE9PWJhJiYobnVsbCE9PWJhJiZiYS5jbGFzc2VkKCJzZWxlY3RlZC1tYXJrZXIiLCExKSxiYT1sYSxudWxsIT09YmEmJmJhLmNsYXNzZWQoInNlbGVjdGVkLW1hcmtlciIsITApLGxhPW51bGw9PT1iYT9udWxsOmJhLmRhdHVtKCkuc2Vzc2lvbkdyb3VwLAp4Ll9zZXRTZWxlY3RlZFNlc3Npb25Hcm91cChsYSkpfSkub24oIm1vdXNlbW92ZSBtb3VzZWVudGVyIixmdW5jdGlvbihbbGEsd2FdKXtjb25zdCBbQ2EseGFdPWQzLm1vdXNlKHRoaXMpO2xhPUEobGEsd2EsQ2EseGEsMjApO2thIT09bGEmJihudWxsIT09a2EmJmthLmNsYXNzZWQoImNsb3Nlc3QtbWFya2VyIiwhMSksa2E9bGEsbnVsbCE9PWthPyhrYS5jbGFzc2VkKCJjbG9zZXN0LW1hcmtlciIsITApLHguX3NldENsb3Nlc3RTZXNzaW9uR3JvdXAoa2EuZGF0dW0oKS5zZXNzaW9uR3JvdXApKTp4Ll9zZXRDbG9zZXN0U2Vzc2lvbkdyb3VwKG51bGwpKX0pLm9uKCJtb3VzZWxlYXZlIixmdW5jdGlvbigpe251bGwhPT1rYSYmKGthLmNsYXNzZWQoImNsb3Nlc3QtbWFya2VyIiwhMSksa2E9bnVsbCx4Ll9zZXRDbG9zZXN0U2Vzc2lvbkdyb3VwKG51bGwpKX0pO3RoaXMuX3N2Zy5zZWxlY3RBbGwoIioiKS5jbGFzc2VkKCJ0Zi1ocGFyYW1zLXNjYXR0ZXItcGxvdC1tYXRyaXgtcGxvdCIsCiEwKX19LF9jZWxsU2NhbGUoYSxjKXt2YXIgZD10aGlzLl9jb2xFeHRlbnQoYSk7Y29uc3QgZj1kMy5zY2FsZUxpbmVhcigpLmRvbWFpbihkKS5yYW5nZShjKTtpZigiTElORUFSIj09PXRoaXMub3B0aW9ucy5jb2x1bW5zW2FdLnNjYWxlKXJldHVybiBmO2lmKCJMT0ciPT09dGhpcy5vcHRpb25zLmNvbHVtbnNbYV0uc2NhbGUpcmV0dXJuIDA+PWRbMF0mJjA8PWRbMV0/ZjpkMy5zY2FsZUxvZygpLmRvbWFpbihkKS5yYW5nZShjKTtpZigiUVVBTlRJTEUiPT09dGhpcy5vcHRpb25zLmNvbHVtbnNbYV0uc2NhbGUpe2NvbnN0IGc9KGNbMV0tY1swXSkvMTk7ZD1kMy5yYW5nZSgyMCkubWFwKGw9PmNbMF0rZypsKTtyZXR1cm4gZDMuc2NhbGVRdWFudGlsZSgpLmRvbWFpbihfLnVuaXEodGhpcy5zZXNzaW9uR3JvdXBzLm1hcChsPT50aGlzLl9jb2xWYWx1ZShsLGEpKSkpLnJhbmdlKGQpfWlmKCJOT05fTlVNRVJJQyI9PT10aGlzLm9wdGlvbnMuY29sdW1uc1thXS5zY2FsZSlyZXR1cm4gZDMuc2NhbGVQb2ludCgpLmRvbWFpbihfLnVuaXEodGhpcy5zZXNzaW9uR3JvdXBzLm1hcChnPT4KdGhpcy5fY29sVmFsdWUoZyxhKSkuc29ydCgpKSkucmFuZ2UoYykucGFkZGluZyguMSk7dGhyb3ciVW5rbm93biBzY2FsZSBmb3IgY29sdW1uOiAiK2ErIi4gb3B0aW9uczogIit0aGlzLm9wdGlvbnM7fSxfY29sVmFsdWUoYSxjKXtyZXR1cm4gdGYuaHBhcmFtcy51dGlscy5jb2x1bW5WYWx1ZUJ5VmlzaWJsZUluZGV4KHRoaXMudmlzaWJsZVNjaGVtYSxhLGMpfSxfbWV0cmljVmFsdWUoYSxjKXtyZXR1cm4gdGYuaHBhcmFtcy51dGlscy5tZXRyaWNWYWx1ZUJ5VmlzaWJsZUluZGV4KHRoaXMudmlzaWJsZVNjaGVtYSxhLGMpfSxfY29sRXh0ZW50KGEpe3JldHVybiB0Zi5ocGFyYW1zLnV0aWxzLnZpc2libGVOdW1lcmljQ29sdW1uRXh0ZW50KHRoaXMudmlzaWJsZVNjaGVtYSx0aGlzLnNlc3Npb25Hcm91cHMsYSl9fSk7Cjwvc2NyaXB0Pgo8L2RvbS1tb2R1bGU+CgoKCgoKPGRvbS1tb2R1bGUgaWQ9InRmLWhwYXJhbXMtc2NhdHRlci1wbG90LW1hdHJpeC12aWV3Ij4KICA8dGVtcGxhdGU+CiAgICA8ZGl2IGNsYXNzPSJwYW5lIj4KICAgICAgPHZhYWRpbi1zcGxpdC1sYXlvdXQgdmVydGljYWw+CiAgICAgICAgCiAgICAgICAgPHRmLWhwYXJhbXMtc2NhbGUtYW5kLWNvbG9yLWNvbnRyb2xzIGNsYXNzPSJzZWN0aW9uIiBpZD0iY29udHJvbHMiIGNvbmZpZ3VyYXRpb249IltbY29uZmlndXJhdGlvbl1dIiBzZXNzaW9uLWdyb3Vwcz0iW1tzZXNzaW9uR3JvdXBzXV0iIG9wdGlvbnM9Int7X29wdGlvbnN9fSI+CiAgICAgICAgPC90Zi1ocGFyYW1zLXNjYWxlLWFuZC1jb2xvci1jb250cm9scz4KICAgICAgICA8dmFhZGluLXNwbGl0LWxheW91dCB2ZXJ0aWNhbD4KICAgICAgICAgIAogICAgICAgICAgPHRmLWhwYXJhbXMtc2NhdHRlci1wbG90LW1hdHJpeC1wbG90IGNsYXNzPSJzZWN0aW9uIiBpZD0icGxvdCIgdmlzaWJsZS1zY2hlbWE9IltbY29uZmlndXJhdGlvbi52aXNpYmxlU2NoZW1hXV0iIHNlc3Npb24tZ3JvdXBzPSJbW3Nlc3Npb25Hcm91cHNdXSIgc2VsZWN0ZWQtc2Vzc2lvbi1ncm91cD0ie3tfc2VsZWN0ZWRHcm91cH19IiBjbG9zZXN0LXNlc3Npb24tZ3JvdXA9Int7X2Nsb3Nlc3RHcm91cH19IiBvcHRpb25zPSJbW19vcHRpb25zXV0iPgogICAgICAgICAgPC90Zi1ocGFyYW1zLXNjYXR0ZXItcGxvdC1tYXRyaXgtcGxvdD4KICAgICAgICAgIDx2YWFkaW4tc3BsaXQtbGF5b3V0IHZlcnRpY2FsPgogICAgICAgICAgICA8dGYtaHBhcmFtcy1zZXNzaW9uLWdyb3VwLXZhbHVlcyBjbGFzcz0ic2VjdGlvbiIgaWQ9InZhbHVlcyIgdmlzaWJsZS1zY2hlbWE9IltbY29uZmlndXJhdGlvbi52aXNpYmxlU2NoZW1hXV0iIHNlc3Npb24tZ3JvdXA9IltbX2Nsb3Nlc3RPclNlbGVjdGVkKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2xvc2VzdEdyb3VwLCBfc2VsZWN0ZWRHcm91cCldXSI+CiAgICAgICAgICAgIDwvdGYtaHBhcmFtcy1zZXNzaW9uLWdyb3VwLXZhbHVlcz4KICAgICAgICAgICAgCiAgICAgICAgICAgIDx0Zi1ocGFyYW1zLXNlc3Npb24tZ3JvdXAtZGV0YWlscyBjbGFzcz0ic2VjdGlvbiIgaWQ9ImRldGFpbHMiIGJhY2tlbmQ9IltbYmFja2VuZF1dIiBleHBlcmltZW50LW5hbWU9IltbZXhwZXJpbWVudE5hbWVdXSIgc2Vzc2lvbi1ncm91cD0iW1tfc2VsZWN0ZWRHcm91cF1dIiB2aXNpYmxlLXNjaGVtYT0iW1tjb25maWd1cmF0aW9uLnZpc2libGVTY2hlbWFdXSI+CiAgICAgICAgICAgIDwvdGYtaHBhcmFtcy1zZXNzaW9uLWdyb3VwLWRldGFpbHM+CiAgICAgICAgICA8L3ZhYWRpbi1zcGxpdC1sYXlvdXQ+CiAgICAgICAgPC92YWFkaW4tc3BsaXQtbGF5b3V0PgogICAgICA8L3ZhYWRpbi1zcGxpdC1sYXlvdXQ+CiAgICA8L2Rpdj4KICAgIDxzdHlsZT4KICAgICAgLnBhbmUgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIH0KICAgICAgLnNlY3Rpb24gewogICAgICAgIG1hcmdpbjogMTBweDsKICAgICAgfQogICAgICAjY29udHJvbHMgewogICAgICAgIGZsZXgtZ3JvdzogMDsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgICBmbGV4LWJhc2lzOiBhdXRvOwogICAgICAgIGhlaWdodDogYXV0bzsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIG1heC1oZWlnaHQ6IGZpdC1jb250ZW50OwogICAgICB9CiAgICAgICNwbG90IHsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgZmxleC1zaHJpbms6IDE7CiAgICAgICAgZmxleC1iYXNpczogYXV0bzsKICAgICAgICBoZWlnaHQ6IGF1dG87CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICBtYXgtaGVpZ2h0OiBmaXQtY29udGVudDsKICAgICAgfQogICAgICAjdmFsdWVzIHsKICAgICAgICBmbGV4LWdyb3c6IDA7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgZmxleC1iYXNpczogYXV0bzsKICAgICAgICBoZWlnaHQ6IDk1cHg7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICBtYXgtaGVpZ2h0OiBmaXQtY29udGVudDsKICAgICAgfQogICAgICAjZGV0YWlscyB7CiAgICAgICAgZmxleC1ncm93OiAwOwogICAgICAgIGZsZXgtc2hyaW5rOiAxOwogICAgICAgIGZsZXgtYmFzaXM6IGF1dG87CiAgICAgICAgaGVpZ2h0OiBhdXRvOwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgICAgbWF4LWhlaWdodDogZml0LWNvbnRlbnQ7CiAgICAgIH0KICAgICAgdmFhZGluLXNwbGl0LWxheW91dCB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CgogIDxzY3JpcHQ+Ly9+fldFQlBBVEh+fi90Zi1ocGFyYW1zLXNjYXR0ZXItcGxvdC1tYXRyaXgtdmlldy90Zi1ocGFyYW1zLXNjYXR0ZXItcGxvdC1tYXRyaXgtdmlldy5odG1sLmpzClBvbHltZXIoe2lzOiJ0Zi1ocGFyYW1zLXNjYXR0ZXItcGxvdC1tYXRyaXgtdmlldyIscHJvcGVydGllczp7YmFja2VuZDpPYmplY3QsZXhwZXJpbWVudE5hbWU6U3RyaW5nLGNvbmZpZ3VyYXRpb246T2JqZWN0LHNlc3Npb25Hcm91cHM6QXJyYXl9LF9jbG9zZXN0T3JTZWxlY3RlZDpmdW5jdGlvbihhLGMpe3JldHVybiBudWxsIT09YT9hOmN9fSk7Cjwvc2NyaXB0Pgo8L2RvbS1tb2R1bGU+CgoKCgo8ZG9tLW1vZHVsZSBpZD0idGYtaHBhcmFtcy1zZXNzaW9ucy1wYW5lIj4KICA8dGVtcGxhdGU+CiAgICA8cGFwZXItaGVhZGVyLXBhbmVsPgogICAgICA8cGFwZXItdG9vbGJhciBzbG90PSJoZWFkZXIiIGNsYXNzPSJ0YWItYmFyIj4KICAgICAgICA8cGFwZXItdGFicyBzZWxlY3RlZD0ie3tfc2VsZWN0ZWRUYWJ9fSIgc2xvdD0idG9wIj4KICAgICAgICAgIAogICAgICAgICAgPHBhcGVyLXRhYiB2aWV3LWlkPSJ0YWJsZS12aWV3Ij4KICAgICAgICAgICAgVEFCTEUgVklFVwogICAgICAgICAgPC9wYXBlci10YWI+CiAgICAgICAgICA8cGFwZXItdGFiIHZpZXctaWQ9InBhcmFsbGVsLWNvb3Jkcy12aWV3Ij4KICAgICAgICAgICAgUEFSQUxMRUwgQ09PUkRJTkFURVMgVklFVwogICAgICAgICAgPC9wYXBlci10YWI+CiAgICAgICAgICA8cGFwZXItdGFiIHZpZXctaWQ9InNjYXR0ZXItcGxvdC1tYXRyaXgtdmlldyI+CiAgICAgICAgICAgIFNDQVRURVIgUExPVCBNQVRSSVggVklFVwogICAgICAgICAgPC9wYXBlci10YWI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWxwLWFuZC1mZWVkYmFjayI+CiAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tidWdSZXBvcnRVcmxdXSI+CiAgICAgICAgICAgICAgPGEgaHJlZiQ9IltbYnVnUmVwb3J0VXJsXV0iIHRhcmdldD0iX2JsYW5rIiByZWw9Im5vb3BlbmVyIG5vcmVmZXJyZXIiPgogICAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbiBpZD0iYnVnLXJlcG9ydCIgcmFpc2VkIHRpdGxlPSJTZW5kIGEgYnVnIHJlcG9ydCBvciBmZWF0dXJlIHJlcXVlc3QiPgogICAgICAgICAgICAgICAgICBCdWcgUmVwb3J0IC8gRmVhdHVyZSBSZXF1ZXN0CiAgICAgICAgICAgICAgICA8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1toZWxwVXJsXV0iPgogICAgICAgICAgICAgIDxhIGhyZWYkPSJbW2hlbHBVcmxdXSIgdGFyZ2V0PSJfYmxhbmsiIHJlbD0ibm9vcGVuZXIgbm9yZWZlcnJlciI+CiAgICAgICAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24gaWNvbj0iaGVscC1vdXRsaW5lIiB0aXRsZT0iVmlldyBkb2N1bWVudGF0aW9uIj4KICAgICAgICAgICAgICAgIDwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9wYXBlci10YWJzPgogICAgICA8L3BhcGVyLXRvb2xiYXI+CiAgICAgIDxpcm9uLXBhZ2VzIHNlbGVjdGVkPSJbW19zZWxlY3RlZFRhYl1dIiBjbGFzcz0iZml0IHRhYi12aWV3Ij4KICAgICAgICA8ZGl2IGlkPSIwIiBjbGFzcz0idGFiIj4KICAgICAgICAgIDx0Zi1ocGFyYW1zLXRhYmxlLXZpZXcgYmFja2VuZD0iW1tiYWNrZW5kXV0iIGV4cGVyaW1lbnQtbmFtZT0iW1tleHBlcmltZW50TmFtZV1dIiB2aXNpYmxlLXNjaGVtYT0iW1tjb25maWd1cmF0aW9uLnZpc2libGVTY2hlbWFdXSIgc2Vzc2lvbi1ncm91cHM9Iltbc2Vzc2lvbkdyb3Vwc11dIiBlbmFibGUtc2hvdy1tZXRyaWNzPgogICAgICAgICAgPC90Zi1ocGFyYW1zLXRhYmxlLXZpZXc+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBpZD0iMSIgY2xhc3M9InRhYiI+CiAgICAgICAgICA8dGYtaHBhcmFtcy1wYXJhbGxlbC1jb29yZHMtdmlldyBiYWNrZW5kPSJbW2JhY2tlbmRdXSIgZXhwZXJpbWVudC1uYW1lPSJbW2V4cGVyaW1lbnROYW1lXV0iIGNvbmZpZ3VyYXRpb249IltbY29uZmlndXJhdGlvbl1dIiBzZXNzaW9uLWdyb3Vwcz0iW1tzZXNzaW9uR3JvdXBzXV0iPgogICAgICAgICAgPC90Zi1ocGFyYW1zLXBhcmFsbGVsLWNvb3Jkcy12aWV3PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgaWQ9IjIiIGNsYXNzPSJ0YWIiPgogICAgICAgICAgPHRmLWhwYXJhbXMtc2NhdHRlci1wbG90LW1hdHJpeC12aWV3IGJhY2tlbmQ9IltbYmFja2VuZF1dIiBleHBlcmltZW50LW5hbWU9IltbZXhwZXJpbWVudE5hbWVdXSIgY29uZmlndXJhdGlvbj0iW1tjb25maWd1cmF0aW9uXV0iIHNlc3Npb24tZ3JvdXBzPSJbW3Nlc3Npb25Hcm91cHNdXSI+CiAgICAgICAgICA8L3RmLWhwYXJhbXMtc2NhdHRlci1wbG90LW1hdHJpeC12aWV3PgogICAgICAgIDwvZGl2PgogICAgICA8L2lyb24tcGFnZXM+CiAgICA8L3BhcGVyLWhlYWRlci1wYW5lbD4KCiAgICA8c3R5bGU+CiAgICAgIC50YWItdmlldyB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CiAgICAgIC50YWItYmFyIHsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIGNvbG9yOiB3aGl0ZTsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoCiAgICAgICAgICAtLXRiLXRvb2xiYXItYmFja2dyb3VuZC1jb2xvciwKICAgICAgICAgIHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpCiAgICAgICAgKTsKICAgICAgfQogICAgICAudGFiIHsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIH0KICAgICAgcGFwZXItdGFicyB7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICAtLXBhcGVyLXRhYnMtc2VsZWN0aW9uLWJhci1jb2xvcjogd2hpdGU7CiAgICAgICAgLS1wYXBlci10YWJzLWNvbnRlbnQ6IHsKICAgICAgICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOwogICAgICAgIH0KICAgICAgfQogICAgICB0Zi1ocGFyYW1zLXRhYmxlLXZpZXcgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgfQogICAgICAuaGVscC1hbmQtZmVlZGJhY2sgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OyAvKiBFbnN1cmUgdGhhdCBpY29ucyBzdGF5IGFsaWduZWQgKi8KICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7CiAgICAgICAgY29sb3I6IHdoaXRlOwogICAgICB9CiAgICAgICNidWctcmVwb3J0IHsKICAgICAgICBib3JkZXI6IHNvbGlkIGJsYWNrOwogICAgICAgIGJhY2tncm91bmQ6IHJlZDsKICAgICAgICB3aGl0ZS1zcGFjZTogbm9ybWFsOwogICAgICAgIHdvcmQtYnJlYWs6IGJyZWFrLXdvcmRzOwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBtYXgtd2lkdGg6IDE1MHB4OwogICAgICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICAgIH0KICAgICAgLmhlbHAtYW5kLWZlZWRiYWNrIGEgewogICAgICAgIGNvbG9yOiB3aGl0ZTsKICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KCiAgPHNjcmlwdD4vL35+V0VCUEFUSH5+L3RmLWhwYXJhbXMtc2Vzc2lvbnMtcGFuZS90Zi1ocGFyYW1zLXNlc3Npb25zLXBhbmUuaHRtbC5qcwpQb2x5bWVyKHtpczoidGYtaHBhcmFtcy1zZXNzaW9ucy1wYW5lIixwcm9wZXJ0aWVzOntiYWNrZW5kOk9iamVjdCxoZWxwVXJsOlN0cmluZyxidWdSZXBvcnRVcmw6U3RyaW5nLGV4cGVyaW1lbnROYW1lOlN0cmluZyxjb25maWd1cmF0aW9uOk9iamVjdCxzZXNzaW9uR3JvdXBzOkFycmF5LF9zZWxlY3RlZFRhYjp7dHlwZTpOdW1iZXIsdmFsdWU6MH19fSk7Cjwvc2NyaXB0Pgo8L2RvbS1tb2R1bGU+CgoKCgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdGYtaHBhcmFtcy1nb29nbGUtYW5hbHl0aWNzLXRyYWNrZXIvdGYtaHBhcmFtcy1nb29nbGUtYW5hbHl0aWNzLXRyYWNrZXIuaHRtbC5qcwooZnVuY3Rpb24oKXtQb2x5bWVyKHtpczoidGYtaHBhcmFtcy1nb29nbGUtYW5hbHl0aWNzLXRyYWNrZXIiLGhhbmRsZUV2ZW50OmZ1bmN0aW9uKCl7fX0pfSkoKTsKPC9zY3JpcHQ+CgoKCgoKPGRvbS1tb2R1bGUgaWQ9InRmLWhwYXJhbXMtbWFpbiI+CiAgPHRlbXBsYXRlPgogICAgPHZhYWRpbi1zcGxpdC1sYXlvdXQ+CiAgICAgIDxkaXYgY2xhc3M9InNpZGViYXIiIHNsb3Q9InNpZGViYXIiPgogICAgICAgIDx0Zi1ocGFyYW1zLXF1ZXJ5LXBhbmUgaWQ9InF1ZXJ5LXBhbmUiIGJhY2tlbmQ9IltbYmFja2VuZF1dIiBleHBlcmltZW50LW5hbWU9IltbZXhwZXJpbWVudE5hbWVdXSIgY29uZmlndXJhdGlvbj0ie3tfY29uZmlndXJhdGlvbn19IiBzZXNzaW9uLWdyb3Vwcz0ie3tfc2Vzc2lvbkdyb3Vwc319Ij4KICAgICAgICA8L3RmLWhwYXJhbXMtcXVlcnktcGFuZT4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNlbnRlciIgc2xvdD0iY2VudGVyIj4KICAgICAgICA8dGYtaHBhcmFtcy1zZXNzaW9ucy1wYW5lIGlkPSJzZXNzaW9ucy1wYW5lIiBiYWNrZW5kPSJbW2JhY2tlbmRdXSIgaGVscC11cmw9IltbaGVscFVybF1dIiBidWctcmVwb3J0LXVybD0iW1tidWdSZXBvcnRVcmxdXSIgZXhwZXJpbWVudC1uYW1lPSJbW2V4cGVyaW1lbnROYW1lXV0iIGNvbmZpZ3VyYXRpb249IltbX2NvbmZpZ3VyYXRpb25dXSIgc2Vzc2lvbi1ncm91cHM9IltbX3Nlc3Npb25Hcm91cHNdXSI+CiAgICAgICAgPC90Zi1ocGFyYW1zLXNlc3Npb25zLXBhbmU+CiAgICAgIDwvZGl2PgogICAgPC92YWFkaW4tc3BsaXQtbGF5b3V0PgogICAgPHRmLWhwYXJhbXMtZ29vZ2xlLWFuYWx5dGljcy10cmFja2VyIGlkPSJ0cmFja2VyIiB0cmFja2luZy1pZD0iW1t0cmFja2luZ0lkXV0iIG5hbWU9InRmX2hwYXJhbXMiPgogICAgPC90Zi1ocGFyYW1zLWdvb2dsZS1hbmFseXRpY3MtdHJhY2tlcj4KCiAgICA8c3R5bGU+CiAgICAgIHZhYWRpbi1zcGxpdC1sYXlvdXQgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAuc2lkZWJhciB7CiAgICAgICAgd2lkdGg6IDIwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgb3ZlcmZsb3c6IGF1dG87CiAgICAgICAgZmxleC1ncm93OiAwOwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICAgIG1pbi13aWR0aDogMTAlOwogICAgICB9CgogICAgICAuY2VudGVyIHsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgZmxleC1zaHJpbms6IDE7CiAgICAgICAgd2lkdGg6IDgwJTsKICAgICAgfQoKICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KCiAgPHNjcmlwdD4vL35+V0VCUEFUSH5+L3RmLWhwYXJhbXMtbWFpbi90Zi1ocGFyYW1zLW1haW4uaHRtbC5qcwpQb2x5bWVyKHtpczoidGYtaHBhcmFtcy1tYWluIixwcm9wZXJ0aWVzOntiYWNrZW5kOk9iamVjdCxleHBlcmltZW50TmFtZTpTdHJpbmcsdHJhY2tpbmdJZDpTdHJpbmcsaGVscFVybDpTdHJpbmcsYnVnUmVwb3J0VXJsOlN0cmluZyxfY29uZmlndXJhdGlvbjpPYmplY3QsX3Nlc3Npb25Hcm91cHM6QXJyYXksX3Rocm90dGxlZFNlbmRFdmVudFRvR0E6e3R5cGU6RnVuY3Rpb24sdmFsdWU6KCk9Pl8udGhyb3R0bGUoZnVuY3Rpb24oKXt0aGlzLl9oYW5kbGVHQUV2ZW50KHtkZXRhaWw6e2hpdFR5cGU6ImV2ZW50IixldmVudENhdGVnb3J5OiJVc2VySW50ZXJhY3Rpb24iLGV2ZW50TGFiZWw6IkV4cGVyaW1lbnQ6ICIrdGhpcy5leHBlcmltZW50TmFtZX19KX0sNkU0LHtsZWFkaW5nOiEwfSl9fSxsaXN0ZW5lcnM6e21vdXNlbW92ZToiX3NlbmRFdmVudFRvR0EiLHRhcDoiX3NlbmRFdmVudFRvR0EiLCJnb29nbGUtYW5hbHl0aWNzLXRyYWNraW5nIjoiX2hhbmRsZUdBRXZlbnQifSxhdHRhY2hlZCgpe3RoaXMuX2hhbmRsZUdBRXZlbnQoe2RldGFpbDp7aGl0VHlwZToicGFnZXZpZXcifX0pfSwKcmVsb2FkKCl7dGhpcy4kWyJxdWVyeS1wYW5lIl0ucmVsb2FkKCl9LF9zZW5kRXZlbnRUb0dBKCl7dGhpcy5fdGhyb3R0bGVkU2VuZEV2ZW50VG9HQSh0aGlzKX0sX2hhbmRsZUdBRXZlbnQoYSl7dGhpcy4kLnRyYWNrZXIuaGFuZGxlRXZlbnQoYSl9fSk7Cjwvc2NyaXB0Pgo8L2RvbS1tb2R1bGU+CgoKCjxzY3JpcHQ+Ly9+fldFQlBBVEh+fi90Zi1ocGFyYW1zLWJhY2tlbmQvdGYtaHBhcmFtcy1iYWNrZW5kLmh0bWwuanMKKGZ1bmN0aW9uKGEpeyhmdW5jdGlvbihjKXtjbGFzcyBke2NvbnN0cnVjdG9yKGYsZyxsPSEwKXt0aGlzLl9hcGlVcmw9Zjt0aGlzLl9yZXF1ZXN0TWFuYWdlcj1nO3RoaXMuX3VzZUh0dHBHZXQ9bH1nZXRFeHBlcmltZW50KGYpe3JldHVybiB0aGlzLl9zZW5kUmVxdWVzdCgiZXhwZXJpbWVudCIsZil9bGlzdFNlc3Npb25Hcm91cHMoZil7cmV0dXJuIHRoaXMuX3NlbmRSZXF1ZXN0KCJzZXNzaW9uX2dyb3VwcyIsZil9bGlzdE1ldHJpY0V2YWxzKGYpe3JldHVybiB0aGlzLl9zZW5kUmVxdWVzdCgibWV0cmljX2V2YWxzIixmKX1fc2VuZFJlcXVlc3QoZixnKXtpZih0aGlzLl91c2VIdHRwR2V0KXJldHVybiBnPWVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShnKSksdGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdCh0aGlzLl9hcGlVcmwrIi8iK2YrIj9yZXF1ZXN0XHgzZCIrZyk7Y29uc3QgbD1uZXcgUGsuUmVxdWVzdE9wdGlvbnM7bC53aXRoQ3JlZGVudGlhbHM9ITA7CmwubWV0aG9kVHlwZT0iUE9TVCI7bC5jb250ZW50VHlwZT0idGV4dC9wbGFpbiI7bC5ib2R5PUpTT04uc3RyaW5naWZ5KGcpO3JldHVybiB0aGlzLl9yZXF1ZXN0TWFuYWdlci5yZXF1ZXN0V2l0aE9wdGlvbnModGhpcy5fYXBpVXJsKyIvIitmLGwpfX1jLkJhY2tlbmQ9ZH0pKGEuaHBhcmFtc3x8KGEuaHBhcmFtcz17fSkpfSkodGZ8fCh0Zj17fSkpOwo8L3NjcmlwdD4KCgoKPGRvbS1tb2R1bGUgaWQ9InRmLWhwYXJhbXMtZGFzaGJvYXJkIj4KICA8dGVtcGxhdGU+CiAgICAKICAgIDx0Zi1ocGFyYW1zLW1haW4gaWQ9ImhwYXJhbXMtbWFpbiIgYmFja2VuZD0iW1tfYmFja2VuZF1dIiBleHBlcmltZW50LW5hbWU9IiI+CiAgICA8L3RmLWhwYXJhbXMtbWFpbj4KICA8L3RlbXBsYXRlPgogIDxzY3JpcHQ+Ly9+fldFQlBBVEh+fi90Zi1ocGFyYW1zLWRhc2hib2FyZC90Zi1ocGFyYW1zLWRhc2hib2FyZC5odG1sLmpzCihmdW5jdGlvbigpe1BvbHltZXIoe2lzOiJ0Zi1ocGFyYW1zLWRhc2hib2FyZCIscHJvcGVydGllczp7X2JhY2tlbmQ6e3R5cGU6T2JqZWN0LHZhbHVlOigpPT5uZXcgdGYuaHBhcmFtcy5CYWNrZW5kKFBrLmdldFJvdXRlcigpLnBsdWdpblJvdXRlKCJocGFyYW1zIiwiIiksbmV3IFBrLlJlcXVlc3RNYW5hZ2VyLCEhKHdpbmRvdy5URU5TT1JCT0FSRF9FTlZ8fHt9KS5JTl9DT0xBQil9fSxyZWxvYWQoKXt0aGlzLiRbImhwYXJhbXMtbWFpbiJdLnJlbG9hZCgpfX0pfSkoKTsKPC9zY3JpcHQ+CjwvZG9tLW1vZHVsZT4KCgoKCgoKCgoKCgoKCgoKCgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdGYtaW1wb3J0cy9hcnJheS1idWZmZXItZGF0YS1wcm92aWRlci5qcwp2YXIgc3E7CihmdW5jdGlvbihhKXthLkVycm9yQ29kZXM9e0NBTkNFTExFRDoxfTtjb25zdCBjPXtWRVJURVg6MSxGQUNFOjIsQ09MT1I6M30sZD17VkVSVEVYOiJmbG9hdDMyIixGQUNFOiJpbnQzMiIsQ09MT1I6InVpbnQ4In07Y2xhc3MgZntjb25zdHJ1Y3RvcihnKXt0aGlzLl9yZXF1ZXN0TWFuYWdlcj1nO3RoaXMuX2NhbmNlbGxlcj1uZXcgUGsuQ2FuY2VsbGVyfXJlbG9hZChnLGwsayl7dGhpcy5fY2FuY2VsbGVyLmNhbmNlbEFsbCgpO3JldHVybiB0aGlzLl9mZXRjaE1ldGFkYXRhKGcsbCxrKX1fZmV0Y2hEYXRhQnlTdGVwKGcsbCxrLG0scCxxKXtmdW5jdGlvbiByKHQpe2xldCB2PVtdO2ZvcihsZXQgQT0wO0E8dC5sZW5ndGgvMztBKyspe2xldCB5PVtdO2ZvcihsZXQgeD0wOzM+eDt4KyspeS5wdXNoKHRbMypBK3hdKTt2LnB1c2goeSl9cmV0dXJuIHZ9Zz1Qay5nZXRSb3V0ZXIoKS5wbHVnaW5Sb3V0ZSgibWVzaCIsIi9kYXRhIixuZXcgVVJMU2VhcmNoUGFyYW1zKHt0YWc6bCxydW46ZywKY29udGVudF90eXBlOmssc2FtcGxlOm0sc3RlcDpwfSkpO2w9dGhpcy5fY2FuY2VsbGVyLmNhbmNlbGxhYmxlKHQ9PntpZih0LmNhbmNlbGxlZClyZXR1cm4gUHJvbWlzZS5yZWplY3Qoe2NvZGU6YS5FcnJvckNvZGVzLkNBTkNFTExFRCxtZXNzYWdlOiJSZXNwb25zZSB3YXMgaW52YWxpZGF0ZWQuIn0pO3Q9dC52YWx1ZTtzd2l0Y2goayl7Y2FzZSAiVkVSVEVYIjpxLnZlcnRpY2VzPXIobmV3IEZsb2F0MzJBcnJheSh0KSk7YnJlYWs7Y2FzZSAiRkFDRSI6cS5mYWNlcz1yKG5ldyBJbnQzMkFycmF5KHQpKTticmVhaztjYXNlICJDT0xPUiI6cS5jb2xvcnM9cihuZXcgVWludDhBcnJheSh0KSl9cmV0dXJuIHF9KTtyZXR1cm4gdGhpcy5fcmVxdWVzdE1hbmFnZXIuZmV0Y2goZyxudWxsLCJhcnJheWJ1ZmZlciIsZFtrXSkudGhlbih0PT50LmFycmF5QnVmZmVyKCkpLnRoZW4obCl9ZmV0Y2hEYXRhKGcsbCxrLG0pe2xldCBwPVtdLHE9bmV3IE1hcDtPYmplY3Qua2V5cyhjKS5mb3JFYWNoKHI9Pgp7Zy5jb21wb25lbnRzJjE8PGNbcl0mJnAucHVzaCh0aGlzLl9mZXRjaERhdGFCeVN0ZXAobCxrLHIsbSxnLnN0ZXAscSkpfSk7cmV0dXJuIFByb21pc2UuYWxsKHApfV9mZXRjaE1ldGFkYXRhKGcsbCxrKXt0aGlzLl9jYW5jZWxsZXIuY2FuY2VsQWxsKCk7Zz1Qay5nZXRSb3V0ZXIoKS5wbHVnaW5Sb3V0ZSgibWVzaCIsIi9tZXNoZXMiLG5ldyBVUkxTZWFyY2hQYXJhbXMoe3RhZzpsLHJ1bjpnLHNhbXBsZTprfSkpO2w9dGhpcy5fY2FuY2VsbGVyLmNhbmNlbGxhYmxlKG09Pm0uY2FuY2VsbGVkP1Byb21pc2UucmVqZWN0KHtjb2RlOmEuRXJyb3JDb2Rlcy5DQU5DRUxMRUQsbWVzc2FnZToiUmVzcG9uc2Ugd2FzIGludmFsaWRhdGVkLiJ9KTptLnZhbHVlKTtyZXR1cm4gdGhpcy5fcmVxdWVzdE1hbmFnZXIuZmV0Y2goZykudGhlbihtPT5tLmpzb24oKSkudGhlbihsKS50aGVuKHRoaXMuX3Byb2Nlc3NNZXRhZGF0YS5iaW5kKHRoaXMpKX1fcHJvY2Vzc01ldGFkYXRhKGcpe2lmKGcpe3ZhciBsPQpuZXcgTWFwO2ZvcihsZXQgbT0wO208Zy5sZW5ndGg7bSsrKXtsZXQgcD1nW21dO2wuaGFzKHAuc3RlcCl8fGwuc2V0KHAuc3RlcCxbXSk7bC5nZXQocC5zdGVwKS5wdXNoKHApfXZhciBrPVtdO2wuZm9yRWFjaChtPT57bT10aGlzLl9jcmVhdGVTdGVwRGF0dW0obVswXSk7ay5wdXNoKG0pfSk7cmV0dXJuIGt9fV9jcmVhdGVTdGVwRGF0dW0oZyl7cmV0dXJue3dhbGxfdGltZTpuZXcgRGF0ZSgxRTMqZy53YWxsX3RpbWUpLHN0ZXA6Zy5zdGVwLGNvbmZpZzpnLmNvbmZpZyxjb250ZW50X3R5cGU6Zy5jb250ZW50X3R5cGUsY29tcG9uZW50czpnLmNvbXBvbmVudHN9fX1hLkFycmF5QnVmZmVyRGF0YVByb3ZpZGVyPWZ9KShzcXx8KHNxPXt9KSk7Cjwvc2NyaXB0Pgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdGYtaW1wb3J0cy9tZXNoLXZpZXdlci5qcwooZnVuY3Rpb24oYSl7Y2xhc3MgYyBleHRlbmRzIFRIUkVFLkV2ZW50RGlzcGF0Y2hlcntjb25zdHJ1Y3RvcihkKXtzdXBlcigpO3RoaXMuX2xhc3RNZXNoPW51bGw7dGhpcy5fY2xvY2s9bmV3IFRIUkVFLkNsb2NrO3RoaXMuX2NhbnZhc1NpemU9bnVsbDt0aGlzLl9ydW5Db2xvcj1kfV9pc09iamVjdChkKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGQmJm51bGwhPWQmJiFBcnJheS5pc0FycmF5KGQpfV9hcHBseURlZmF1bHRzKGQsZil7bGV0IGc9e307ZD1bZCxmXTtmb3IoZj0wO2Y8ZC5sZW5ndGg7ZisrKXtjb25zdCBsPWRbZl07Zm9yKGxldCBrIGluIGwpe2NvbnN0IG09ayBpbiBnO3RoaXMuX2lzT2JqZWN0KGxba10pP2dba109dGhpcy5fYXBwbHlEZWZhdWx0cyhnW2tdfHx7fSxsW2tdKTptfHwoZ1trXT1sW2tdKX19cmV0dXJuIGd9X2NyZWF0ZVdvcmxkKGQsZil7dGhpcy5pc1JlYWR5KCl8fCh0aGlzLl9zY2VuZT1uZXcgVEhSRUUuU2NlbmUsdGhpcy5fY2FtZXJhPWQ9bmV3IFRIUkVFW2QuY2FtZXJhLmNsc10oZC5jYW1lcmEuZm92LAp0aGlzLl9jYW52YXNTaXplLndpZHRoL3RoaXMuX2NhbnZhc1NpemUuaGVpZ2h0LGQuY2FtZXJhLm5lYXIsZC5jYW1lcmEuZmFyKSxmPW5ldyBUSFJFRS5PcmJpdENvbnRyb2xzKGQsZiksZi5sb29rU3BlZWQ9LjQsZi5tb3ZlbWVudFNwZWVkPTIwLGYubm9GbHk9ITAsZi5sb29rVmVydGljYWw9ITAsZi5jb25zdHJhaW5WZXJ0aWNhbD0hMCxmLnZlcnRpY2FsTWluPTEsZi52ZXJ0aWNhbE1heD0yLGYuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIix0aGlzLl9vbkNhbWVyYVBvc2l0aW9uQ2hhbmdlLmJpbmQodGhpcykpLHRoaXMuX2NhbWVyYUNvbnRyb2xzPWYsdGhpcy5fcmVuZGVyZXI9bmV3IFRIUkVFLldlYkdMUmVuZGVyZXIoe2FudGlhbGlhczohMH0pLHRoaXMuX3JlbmRlcmVyLnNldFBpeGVsUmF0aW8oKSx0aGlzLl9yZW5kZXJlci5zZXRTaXplKHRoaXMuX2NhbnZhc1NpemUud2lkdGgsdGhpcy5fY2FudmFzU2l6ZS5oZWlnaHQpLHRoaXMuX3JlbmRlcmVyLnNldENsZWFyQ29sb3IoMTY3NzcyMTUsCjEpKX1fY2xlYXJTY2VuZSgpe2Zvcig7MDx0aGlzLl9zY2VuZS5jaGlsZHJlbi5sZW5ndGg7KXRoaXMuX3NjZW5lLnJlbW92ZSh0aGlzLl9zY2VuZS5jaGlsZHJlblswXSl9Z2V0UmVuZGVyZXIoKXtyZXR1cm4gdGhpcy5fcmVuZGVyZXJ9Z2V0Q2FtZXJhQ29udHJvbHMoKXtyZXR1cm4gdGhpcy5fY2FtZXJhQ29udHJvbHN9aXNSZWFkeSgpe3JldHVybiEhdGhpcy5fY2FtZXJhJiYhIXRoaXMuX2NhbWVyYUNvbnRyb2xzfWdldENhbWVyYVBvc2l0aW9uKCl7cmV0dXJue2Zhcjp0aGlzLl9jYW1lcmEuZmFyLHBvc2l0aW9uOnRoaXMuX2NhbWVyYS5wb3NpdGlvbi5jbG9uZSgpLHRhcmdldDp0aGlzLl9jYW1lcmFDb250cm9scy50YXJnZXQuY2xvbmUoKX19c2V0Q2FudmFzU2l6ZShkKXt0aGlzLl9jYW52YXNTaXplPWR9ZHJhdygpe3RoaXMuX2FuaW1hdGlvbkZyYW1lSW5kZXgmJmNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuX2FuaW1hdGlvbkZyYW1lSW5kZXgpO3RoaXMuX2NhbWVyYS5hc3BlY3Q9CnRoaXMuX2NhbnZhc1NpemUud2lkdGgvdGhpcy5fY2FudmFzU2l6ZS5oZWlnaHQ7dGhpcy5fY2FtZXJhLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKTt0aGlzLl9yZW5kZXJlci5zZXRTaXplKHRoaXMuX2NhbnZhc1NpemUud2lkdGgsdGhpcy5fY2FudmFzU2l6ZS5oZWlnaHQpO2NvbnN0IGQ9ZnVuY3Rpb24oKXt2YXIgZj10aGlzLl9jbG9jay5nZXREZWx0YSgpO3RoaXMuX2NhbWVyYUNvbnRyb2xzLnVwZGF0ZShmKTt0aGlzLl9hbmltYXRpb25GcmFtZUluZGV4PXJlcXVlc3RBbmltYXRpb25GcmFtZShkKTt0aGlzLl9yZW5kZXJlci5yZW5kZXIodGhpcy5fc2NlbmUsdGhpcy5fY2FtZXJhKX0uYmluZCh0aGlzKTtkKCl9dXBkYXRlU2NlbmUoZCxmKXtsZXQgZz17fTsiY29uZmlnImluIGQmJmQuY29uZmlnJiYoZz1KU09OLnBhcnNlKGQuY29uZmlnKSk7dGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiJiZWZvcmVVcGRhdGVTY2VuZSJ9KTtnPXRoaXMuX2FwcGx5RGVmYXVsdHMoZyx7Y2FtZXJhOntjbHM6IlBlcnNwZWN0aXZlQ2FtZXJhIiwKZm92Ojc1LG5lYXI6LjEsZmFyOjFFM30sbGlnaHRzOlt7Y2xzOiJBbWJpZW50TGlnaHQiLGNvbG9yOiIjZmZmZmZmIixpbnRlbnNpdHk6Ljc1fSx7Y2xzOiJEaXJlY3Rpb25hbExpZ2h0Iixjb2xvcjoiI2ZmZmZmZiIsaW50ZW5zaXR5Oi43NSxwb3NpdGlvbjpbMCwtMSwyXX1dfSk7dGhpcy5fY3JlYXRlV29ybGQoZyxmKTt0aGlzLl9jbGVhclNjZW5lKCk7dGhpcy5fY3JlYXRlTGlnaHRzKHRoaXMuX3NjZW5lLGcpO3RoaXMuX2NyZWF0ZUdlb21ldHJ5KGQsZyk7dGhpcy5kcmF3KCl9cmVzZXRWaWV3KCl7aWYodGhpcy5pc1JlYWR5KCkpe3RoaXMuX2NhbWVyYUNvbnRyb2xzLnJlc2V0KCk7aWYoIWQmJnRoaXMuX2xhc3RNZXNoKXZhciBkPXRoaXMuX2xhc3RNZXNoO2QmJih0aGlzLl9maXRPYmplY3RUb1ZpZXdwb3J0KGQpLHRoaXMuX2xhc3RNZXNoPWQpO3RoaXMuX2NhbWVyYUNvbnRyb2xzLnVwZGF0ZSgpfX1fY3JlYXRlR2VvbWV0cnkoZCxmKXtkPWQubWVzaDtkLnZlcnRpY2VzJiZkLmZhY2VzJiYKZC5mYWNlcy5sZW5ndGg/dGhpcy5fY3JlYXRlTWVzaChkLGYpOnRoaXMuX2NyZWF0ZVBvaW50Q2xvdWQoZCxmKX1fY3JlYXRlUG9pbnRDbG91ZChkLGYpe3ZhciBnPWQudmVydGljZXM7ZD1kLmNvbG9ycztsZXQgbD17bWF0ZXJpYWw6e2NsczoiUG9pbnRzTWF0ZXJpYWwiLHNpemU6LjAwNX19O2QmJmQubGVuZ3RoPT1nLmxlbmd0aD9sLm1hdGVyaWFsLnZlcnRleENvbG9ycz1USFJFRS5WZXJ0ZXhDb2xvcnM6bC5tYXRlcmlhbC5jb2xvcj10aGlzLl9ydW5Db2xvcjtmPXRoaXMuX2FwcGx5RGVmYXVsdHMoZixsKTt2YXIgaz1uZXcgVEhSRUUuR2VvbWV0cnk7Zy5mb3JFYWNoKGZ1bmN0aW9uKG0pe3ZhciBwPW5ldyBUSFJFRS5WZWN0b3IzKG1bMF0sbVsxXSxtWzJdKTtwLng9MSptWzBdO3AueT0xKm1bMV07cC56PTEqbVsyXTtrLnZlcnRpY2VzLnB1c2gocCl9KTtkJiZkLmxlbmd0aD09Zy5sZW5ndGgmJmQuZm9yRWFjaChmdW5jdGlvbihtKXttPW5ldyBUSFJFRS5Db2xvcihtWzBdLzI1NSwKbVsxXS8yNTUsbVsyXS8yNTUpO2suY29sb3JzLnB1c2gobSl9KTtnPW5ldyBUSFJFRVtmLm1hdGVyaWFsLmNsc10oZi5tYXRlcmlhbCk7Zz1uZXcgVEhSRUUuUG9pbnRzKGssZyk7dGhpcy5fc2NlbmUuYWRkKGcpO3RoaXMuX2xhc3RNZXNoPWd9c2V0Q2FtZXJhVmlld3BvaW50KGQsZixnKXt0aGlzLl9zaWxlbnQ9ITA7dGhpcy5fY2FtZXJhLmZhcj1mO3RoaXMuX2NhbWVyYS5wb3NpdGlvbi5zZXQoZC54LGQueSxkLnopO3RoaXMuX2NhbWVyYS5sb29rQXQoZy5jbG9uZSgpKTt0aGlzLl9jYW1lcmEudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpO3RoaXMuX2NhbWVyYUNvbnRyb2xzLnRhcmdldD1nLmNsb25lKCk7dGhpcy5fY2FtZXJhQ29udHJvbHMudXBkYXRlKCk7dGhpcy5fc2lsZW50PSExfV9vbkNhbWVyYVBvc2l0aW9uQ2hhbmdlKGQpe3RoaXMuX3NpbGVudHx8dGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiJjYW1lcmFQb3NpdGlvbkNoYW5nZSIsZXZlbnQ6ZH0pfV9maXRPYmplY3RUb1ZpZXdwb3J0KGQpe3ZhciBmPQpuZXcgVEhSRUUuQm94MztmLnNldEZyb21PYmplY3QoZCk7ZD1mLmNlbnRlcigpO3ZhciBnPWYuc2l6ZSgpO2c9MS4yNSpNYXRoLmFicyhNYXRoLm1heChnLngsZy55LGcueikvKDIqTWF0aC50YW4oTWF0aC5QSS8xODAqdGhpcy5fY2FtZXJhLmZvdi8yKSkpO2Y9Zi5taW4uejt0aGlzLnNldENhbWVyYVZpZXdwb2ludCh7eDpkLngseTpkLnksejpnfSwzKigwPmY/LWYrZzpnLWYpLGQpfV9jcmVhdGVNZXNoKGQsZil7dmFyIGc9ZC52ZXJ0aWNlcztjb25zdCBsPWQuZmFjZXMsaz1kLmNvbG9ycztkPXRoaXMuX2FwcGx5RGVmYXVsdHMoZix7bWF0ZXJpYWw6e2NsczoiTWVzaFN0YW5kYXJkTWF0ZXJpYWwiLGNvbG9yOiIjYTBhMGEwIixyb3VnaG5lc3M6MSxtZXRhbG5lc3M6MH19KTtsZXQgbT1uZXcgVEhSRUUuR2VvbWV0cnk7Zy5mb3JFYWNoKGZ1bmN0aW9uKHApe2xldCBxPW5ldyBUSFJFRS5WZWN0b3IzKHBbMF0scFsxXSxwWzJdKTtxLng9MSpwWzBdO3EueT0xKnBbMV07cS56PTEqcFsyXTsKbS52ZXJ0aWNlcy5wdXNoKHEpfSk7bC5mb3JFYWNoKGZ1bmN0aW9uKHApe2xldCBxPW5ldyBUSFJFRS5GYWNlMyhwWzBdLHBbMV0scFsyXSk7aWYoayYmay5sZW5ndGgpe3A9W2tbcFswXV0sa1twWzFdXSxrW3BbMl1dXTtmb3IobGV0IHQ9MDt0PHAubGVuZ3RoO3QrKyl7dmFyIHI9cFt0XTtyPW5ldyBUSFJFRS5Db2xvcihyWzBdLzI1NSxyWzFdLzI1NSxyWzJdLzI1NSk7cS52ZXJ0ZXhDb2xvcnMucHVzaChyKX19bS5mYWNlcy5wdXNoKHEpfSk7ayYmay5sZW5ndGgmJihkLm1hdGVyaWFsPWQubWF0ZXJpYWx8fHt9LGQubWF0ZXJpYWwudmVydGV4Q29sb3JzPVRIUkVFLlZlcnRleENvbG9ycyk7bS5jZW50ZXIoKTttLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpO20uY29tcHV0ZVZlcnRleE5vcm1hbHMoKTtnPW5ldyBUSFJFRVtkLm1hdGVyaWFsLmNsc10oZC5tYXRlcmlhbCk7Zz1uZXcgVEhSRUUuTWVzaChtLGcpO2cuY2FzdFNoYWRvdz0hMDtnLnJlY2VpdmVTaGFkb3c9ITA7dGhpcy5fc2NlbmUuYWRkKGcpOwp0aGlzLl9sYXN0TWVzaD1nfV9jcmVhdGVMaWdodHMoZCxmKXtmb3IobGV0IGc9MDtnPGYubGlnaHRzLmxlbmd0aDtnKyspe2NvbnN0IGw9Zi5saWdodHNbZ107bGV0IGs9bmV3IFRIUkVFW2wuY2xzXShsLmNvbG9yLGwuaW50ZW5zaXR5KTtsLnBvc2l0aW9uJiZrLnBvc2l0aW9uLnNldChsLnBvc2l0aW9uWzBdLGwucG9zaXRpb25bMV0sbC5wb3NpdGlvblsyXSk7ZC5hZGQoayl9fX1hLk1lc2hWaWV3ZXI9Y30pKHNxfHwoc3E9e30pKTsKPC9zY3JpcHQ+CgoKCgo8ZG9tLW1vZHVsZSBpZD0idGYtbWVzaC1sb2FkZXIiPgogIDx0ZW1wbGF0ZT4KICAgIDx0Zi1jYXJkLWhlYWRpbmcgY29sb3I9IltbX3J1bkNvbG9yXV0iIGNsYXNzPSJ0Zi1tZXNoLWxvYWRlci1oZWFkZXIiPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2hhc011bHRpcGxlU2FtcGxlcyhvZlNhbXBsZXMpXV0iPgogICAgICAgIDxkaXY+c2FtcGxlOiBbW19nZXRTYW1wbGVUZXh0KHNhbXBsZSldXSBvZiBbW29mU2FtcGxlc11dPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaGFzQXRMZWFzdE9uZVN0ZXAoX3N0ZXBzKV1dIj4KICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nLXJvdyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nLWxhYmVsIj4KICAgICAgICAgICAgc3RlcAogICAgICAgICAgICA8c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6IGJvbGQiPltbdG9Mb2NhbGVTdHJpbmdfKF9zdGVwVmFsdWUpXV08L3NwYW4+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImhlYWRpbmctbGFiZWwgaGVhZGluZy1yaWdodCI+CiAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfY3VycmVudFdhbGxUaW1lXV0iPgogICAgICAgICAgICAgIFtbX2N1cnJlbnRXYWxsVGltZV1dCiAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImxhYmVsIHJpZ2h0Ij4KICAgICAgICAgICAgPHBhcGVyLXNwaW5uZXItbGl0ZSBhY3RpdmUgaGlkZGVuJD0iW1shX2lzTWVzaExvYWRpbmddXSI+CiAgICAgICAgICAgIDwvcGFwZXItc3Bpbm5lci1saXRlPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaGFzTXVsdGlwbGVTdGVwcyhfc3RlcHMpXV0iPgogICAgICAgIDxkaXY+CiAgICAgICAgICA8cGFwZXItc2xpZGVyIGlkPSJzdGVwcyIgaW1tZWRpYXRlLXZhbHVlPSJ7e19zdGVwSW5kZXh9fSIgbWF4PSJbW19nZXRNYXhTdGVwSW5kZXgoX3N0ZXBzKV1dIiBtYXgtbWFya2Vycz0iW1tfZ2V0TWF4U3RlcEluZGV4KF9zdGVwcyldXSIgc25hcHMgc3RlcD0iMSIgdmFsdWU9Int7X3N0ZXBJbmRleH19Ij48L3BhcGVyLXNsaWRlcj4KICAgICAgICA8L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgIDwvdGYtY2FyZC1oZWFkaW5nPgogICAgPHN0eWxlPgogICAgICBwYXBlci1zbGlkZXIgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIG1hcmdpbi1sZWZ0OiAxcHg7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiAxcHg7CiAgICAgIH0KICAgICAgLnRmLW1lc2gtbG9hZGVyLWhlYWRlciB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgaGVpZ2h0OiAxMDVweDsKICAgICAgfQogICAgICBbaGlkZGVuXSB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgogIDxzY3JpcHQ+Ly9+fldFQlBBVEh+fi90Zi1tZXNoLWRhc2hib2FyZC9tZXNoLWxvYWRlci5qcwooZnVuY3Rpb24oYSl7UG9seW1lcih7aXM6InRmLW1lc2gtbG9hZGVyIixwcm9wZXJ0aWVzOntydW46U3RyaW5nLHRhZzpTdHJpbmcsc2FtcGxlOk51bWJlcixvZlNhbXBsZXM6TnVtYmVyLHNlbGVjdGVkVmlldzp7dHlwZTpTdHJpbmcsdmFsdWU6ImFsbCJ9LGFjdGl2ZTp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxyZXF1ZXN0TWFuYWdlcjpPYmplY3QsX21lc2hWaWV3ZXI6e3R5cGU6T2JqZWN0fSxfZGF0YVByb3ZpZGVyOnt0eXBlOk9iamVjdH0sX2NvbG9yU2NhbGVGdW5jdGlvbjp7dHlwZTpPYmplY3QsdmFsdWU6KCk9PlpsLnJ1bnNDb2xvclNjYWxlfSxfcnVuQ29sb3I6e3R5cGU6U3RyaW5nLGNvbXB1dGVkOiJfY29tcHV0ZVJ1bkNvbG9yKHJ1bikifSxfc3RlcHM6e3R5cGU6QXJyYXksdmFsdWU6KCk9PltdLG5vdGlmeTohMH0sX3N0ZXBJbmRleDp7dHlwZTpOdW1iZXIsbm90aWZ5OiEwfSxfY3VycmVudFN0ZXA6e3R5cGU6T2JqZWN0LGNvbXB1dGVkOiJfY29tcHV0ZUN1cnJlbnRTdGVwKF9zdGVwcywgX3N0ZXBJbmRleCkifSwKX21lc2hWaWV3ZXJBdHRhY2hlZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxfY2FtZXJhUG9zaXRpb25Jbml0aWFsaXplZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxfc3RlcFZhbHVlOnt0eXBlOk51bWJlcixjb21wdXRlZDoiX2NvbXB1dGVTdGVwVmFsdWUoX2N1cnJlbnRTdGVwKSJ9LF9jdXJyZW50V2FsbFRpbWU6e3R5cGU6U3RyaW5nLGNvbXB1dGVkOiJfY29tcHV0ZUN1cnJlbnRXYWxsVGltZShfY3VycmVudFN0ZXApIn0sX2lzTWVzaExvYWRpbmc6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX19LG9ic2VydmVyczpbInJlbG9hZChydW4sIHRhZywgYWN0aXZlLCBfZGF0YVByb3ZpZGVyLCBfbWVzaFZpZXdlcikiLCJfdXBkYXRlU2NlbmUoX2N1cnJlbnRTdGVwLiosIF9tZXNoVmlld2VyKSIsIl9kZWJvdW5jZWRGZXRjaE1lc2goX2N1cnJlbnRTdGVwKSIsIl91cGRhdGVWaWV3KHNlbGVjdGVkVmlldykiXSxfY29tcHV0ZVJ1bkNvbG9yOmZ1bmN0aW9uKGMpe3JldHVybiB0aGlzLl9jb2xvclNjYWxlRnVuY3Rpb24oYyl9LAphdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX2RhdGFQcm92aWRlcj1uZXcgYS5BcnJheUJ1ZmZlckRhdGFQcm92aWRlcih0aGlzLnJlcXVlc3RNYW5hZ2VyKTtjb25zdCBjPW5ldyBhLk1lc2hWaWV3ZXIodGhpcy5fcnVuQ29sb3IpO2MuYWRkRXZlbnRMaXN0ZW5lcigiYmVmb3JlVXBkYXRlU2NlbmUiLHRoaXMuX3VwZGF0ZUNhbnZhc1NpemUuYmluZCh0aGlzKSk7Yy5hZGRFdmVudExpc3RlbmVyKCJjYW1lcmFQb3NpdGlvbkNoYW5nZSIsdGhpcy5fb25DYW1lcmFQb3NpdGlvbkNoYW5nZS5iaW5kKHRoaXMpKTt0aGlzLl9tZXNoVmlld2VyPWN9LHJlbG9hZDpmdW5jdGlvbigpe3RoaXMuYWN0aXZlJiZ0aGlzLl9kYXRhUHJvdmlkZXImJih0aGlzLnNldCgiX2lzTWVzaExvYWRpbmciLCEwKSx0aGlzLl9kYXRhUHJvdmlkZXIucmVsb2FkKHRoaXMucnVuLHRoaXMudGFnLHRoaXMuc2FtcGxlKS50aGVuKGM9PntjJiYodGhpcy5zZXQoIl9zdGVwcyIsYyksdGhpcy5zZXQoIl9zdGVwSW5kZXgiLApjLmxlbmd0aC0xKSl9KS5jYXRjaChjPT57aWYoIWN8fCFjLmNvZGV8fGMuY29kZSE9YS5FcnJvckNvZGVzLkNBTkNFTExFRCl0aHJvdyBFcnJvcihjfHwiUmVzcG9uc2UgcHJvY2Vzc2luZyBmYWlsZWQuIik7fSkpfSxfdXBkYXRlU2NlbmU6ZnVuY3Rpb24oKXtjb25zdCBjPXRoaXMuX2N1cnJlbnRTdGVwO2MmJmMubWVzaCYmKHRoaXMuX21lc2hWaWV3ZXIudXBkYXRlU2NlbmUoYyx0aGlzKSx0aGlzLl9jYW1lcmFQb3NpdGlvbkluaXRpYWxpemVkfHwodGhpcy5fbWVzaFZpZXdlci5yZXNldFZpZXcoKSx0aGlzLl9jYW1lcmFQb3NpdGlvbkluaXRpYWxpemVkPSEwKSx0aGlzLl9tZXNoVmlld2VyQXR0YWNoZWR8fCh0aGlzLnJvb3QuYXBwZW5kQ2hpbGQodGhpcy5fbWVzaFZpZXdlci5nZXRSZW5kZXJlcigpLmRvbUVsZW1lbnQpLHRoaXMuX21lc2hWaWV3ZXJBdHRhY2hlZD0hMCkpfSxfZGVib3VuY2VkRmV0Y2hNZXNoKCl7dGhpcy5kZWJvdW5jZSgiZmV0Y2hNZXNoIiwoKT0+dGhpcy5fbWF5YmVGZXRjaE1lc2goKSwKMTAwKX0sX21heWJlRmV0Y2hNZXNoKCl7Y29uc3QgYz10aGlzO3JldHVybiBEYihmdW5jdGlvbiooKXtjb25zdCBkPWMuX2N1cnJlbnRTdGVwO2lmKGQmJiFkLm1lc2gmJiFkLm1lc2hGZXRjaGluZyl7ZC5tZXNoRmV0Y2hpbmc9ITA7Yy5faXNNZXNoTG9hZGluZz0hMDt0cnl7Y29uc3QgZj15aWVsZCBjLl9kYXRhUHJvdmlkZXIuZmV0Y2hEYXRhKGQsYy5ydW4sYy50YWcsYy5zYW1wbGUpO2QubWVzaD1mWzBdO2Mubm90aWZ5UGF0aCgiX2N1cnJlbnRTdGVwLm1lc2giKX1jYXRjaChmKXtpZighZnx8IWYuY29kZXx8Zi5jb2RlIT1hLkVycm9yQ29kZXMuQ0FOQ0VMTEVEKXRocm93IGY9Znx8IlJlc3BvbnNlIHByb2Nlc3NpbmcgZmFpbGVkLiIsRXJyb3IoZik7fWZpbmFsbHl7Yy5faXNNZXNoTG9hZGluZz0hMSxkLm1lc2hGZXRjaGluZz0hMX19fSl9LF9vbkNhbWVyYVBvc2l0aW9uQ2hhbmdlOmZ1bmN0aW9uKCl7aWYodGhpcy5fbWVzaFZpZXdlci5pc1JlYWR5KCkpe3ZhciBjPW5ldyBDdXN0b21FdmVudCgiY2FtZXJhLXBvc2l0aW9uLWNoYW5nZSIsCntkZXRhaWw6dGhpcy5fbWVzaFZpZXdlci5nZXRDYW1lcmFQb3NpdGlvbigpfSk7dGhpcy5kaXNwYXRjaEV2ZW50KGMpfX0sc2V0Q2FtZXJhVmlld3BvaW50OmZ1bmN0aW9uKGMsZCxmKXt0aGlzLl9tZXNoVmlld2VyLnNldENhbWVyYVZpZXdwb2ludChjLGQsZil9LF91cGRhdGVDYW52YXNTaXplOmZ1bmN0aW9uKCl7Y29uc3QgYz10aGlzLm9mZnNldFdpZHRoLGQ9dGhpcy4kJCgiLnRmLW1lc2gtbG9hZGVyLWhlYWRlciIpLm9mZnNldEhlaWdodDt0aGlzLl9tZXNoVmlld2VyLnNldENhbnZhc1NpemUoe3dpZHRoOmMsaGVpZ2h0OmMtZH0pfSxyZWRyYXc6ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVDYW52YXNTaXplKCk7dGhpcy5pc0Nvbm5lY3RlZCYmdGhpcy5fbWVzaFZpZXdlci5kcmF3KCl9LF9oYXNBdExlYXN0T25lU3RlcDpmdW5jdGlvbihjKXtyZXR1cm4hIWMmJjA8Yy5sZW5ndGh9LF9oYXNNdWx0aXBsZVN0ZXBzOmZ1bmN0aW9uKGMpe3JldHVybiEhYyYmMTxjLmxlbmd0aH0sX2NvbXB1dGVDdXJyZW50U3RlcDpmdW5jdGlvbihjLApkKXtyZXR1cm4gY1tkXXx8bnVsbH0sX2NvbXB1dGVTdGVwVmFsdWU6ZnVuY3Rpb24oYyl7cmV0dXJuIGM/Yy5zdGVwOjB9LF9jb21wdXRlQ3VycmVudFdhbGxUaW1lOmZ1bmN0aW9uKGMpe3JldHVybiBjP2ZtLmZvcm1hdERhdGUoYy53YWxsX3RpbWUpOiIifSxfZ2V0TWF4U3RlcEluZGV4OmZ1bmN0aW9uKGMpe3JldHVybiBjLmxlbmd0aC0xfSxfZ2V0U2FtcGxlVGV4dDpmdW5jdGlvbihjKXtyZXR1cm4gU3RyaW5nKGMrMSl9LF9oYXNNdWx0aXBsZVNhbXBsZXM6ZnVuY3Rpb24oYyl7cmV0dXJuIDE8Y30sX3VwZGF0ZVZpZXc6ZnVuY3Rpb24oYyl7dGhpcy5fbWVzaFZpZXdlciYmImFsbCI9PWMmJnRoaXMuX21lc2hWaWV3ZXIucmVzZXRWaWV3KCl9LHRvTG9jYWxlU3RyaW5nXzpmdW5jdGlvbihjKXtyZXR1cm4gYy50b0xvY2FsZVN0cmluZygpfX0pfSkoc3F8fChzcT17fSkpOwo8L3NjcmlwdD4KPC9kb20tbW9kdWxlPgoKCgo8ZG9tLW1vZHVsZSBpZD0ibWVzaC1kYXNoYm9hcmQiPgogIDx0ZW1wbGF0ZT4KICAgIDx0Zi1kYXNoYm9hcmQtbGF5b3V0PgogICAgICA8ZGl2IHNsb3Q9InNpZGViYXIiIGNsYXNzPSJhbGwtY29udHJvbHMiPgogICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiB2aWV3LWNvbnRyb2wiPgogICAgICAgICAgPGgzIGNsYXNzPSJ0aXRsZSI+UG9pbnQgb2YgdmlldzwvaDM+CiAgICAgICAgICA8ZGl2PgogICAgICAgICAgICA8cGFwZXItcmFkaW8tZ3JvdXAgaWQ9InZpZXctcmFkaW8tZ3JvdXAiIHNlbGVjdGVkPSJ7e19zZWxlY3RlZFZpZXd9fSI+CiAgICAgICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbiBpZD0iYWxsLXJhZGlvLWJ1dHRvbiIgbmFtZT0iYWxsIj4KICAgICAgICAgICAgICAgIERpc3BsYXkgYWxsIHBvaW50cwogICAgICAgICAgICAgIDwvcGFwZXItcmFkaW8tYnV0dG9uPgogICAgICAgICAgICAgIDxwYXBlci10b29sdGlwIGFuaW1hdGlvbi1kZWxheT0iMCIgZm9yPSJhbGwtcmFkaW8tYnV0dG9uIiBwb3NpdGlvbj0icmlnaHQiIG9mZnNldD0iMCI+CiAgICAgICAgICAgICAgICBab29tIGFuZCBjZW50ZXIgY2FtZXJhIHRvIGRpc3BsYXkgYWxsIHBvaW50cyBhdCBvbmNlLiBOb3RlLCB0aGF0CiAgICAgICAgICAgICAgICBzb21lIHBvaW50cyBjb3VsZCBiZSB0b28gZmFyIChpLmUuIHRvbyBzbWFsbCkgdG8gYmUgdmlzaWJsZS4KICAgICAgICAgICAgICA8L3BhcGVyLXRvb2x0aXA+CiAgICAgICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbiBpZD0idXNlci1yYWRpby1idXR0b24iIG5hbWU9InVzZXIiPgogICAgICAgICAgICAgICAgQ3VycmVudCB2aWV3CiAgICAgICAgICAgICAgPC9wYXBlci1yYWRpby1idXR0b24+CiAgICAgICAgICAgICAgPHBhcGVyLXRvb2x0aXAgYW5pbWF0aW9uLWRlbGF5PSIwIiBmb3I9InVzZXItcmFkaW8tYnV0dG9uIiBwb3NpdGlvbj0icmlnaHQiIG9mZnNldD0iMCI+CiAgICAgICAgICAgICAgICBLZWVwIGN1cnJlbnQgY2FtZXJhIHBvc2l0aW9uIGFuZCB6b29tIGxldmVsLgogICAgICAgICAgICAgIDwvcGFwZXItdG9vbHRpcD4KICAgICAgICAgICAgICA8cGFwZXItcmFkaW8tYnV0dG9uIGlkPSJzaGFyZS1yYWRpby1idXR0b24iIG5hbWU9InNoYXJlIj4KICAgICAgICAgICAgICAgIFNoYXJlIHZpZXdwb2ludAogICAgICAgICAgICAgIDwvcGFwZXItcmFkaW8tYnV0dG9uPgogICAgICAgICAgICAgIDxwYXBlci10b29sdGlwIGFuaW1hdGlvbi1kZWxheT0iMCIgZm9yPSJzaGFyZS1yYWRpby1idXR0b24iIHBvc2l0aW9uPSJyaWdodCIgb2Zmc2V0PSIwIj4KICAgICAgICAgICAgICAgIFNoYXJlIHZpZXdwb2ludCBhbW9uZyBhbGwgY2FtZXJhcy4KICAgICAgICAgICAgICA8L3BhcGVyLXRvb2x0aXA+CiAgICAgICAgICAgIDwvcGFwZXItcmFkaW8tZ3JvdXA+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24gcnVucy1zZWxlY3RvciI+CiAgICAgICAgICA8dGYtcnVucy1zZWxlY3RvciBzZWxlY3RlZC1ydW5zPSJ7e19zZWxlY3RlZFJ1bnN9fSI+CiAgICAgICAgICA8L3RmLXJ1bnMtc2VsZWN0b3I+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IHNsb3Q9ImNlbnRlciI+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJuby1kYXRhLXdhcm5pbmciPgogICAgICAgICAgICA8aDM+Tm8gcG9pbnQgY2xvdWQgZGF0YSB3YXMgZm91bmQuPC9oMz4KICAgICAgICAgICAgPHA+UHJvYmFibGUgY2F1c2VzOgogICAgICAgICAgICA8dWw+CiAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgWW91IGhhdmVu4oCZdCB3cml0dGVuIGFueSBwb2ludCBjbG91ZCBkYXRhIHRvIHlvdXIgZXZlbnQgZmlsZXMuCiAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICA8bGk+VGVuc29yQm9hcmQgY2Fu4oCZdCBmaW5kIHlvdXIgZXZlbnQgZmlsZXMuPC9saT4KICAgICAgICAgICAgPC91bD4KCiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdeKAmXJlIG5ldyB0byB1c2luZyBUZW5zb3JCb2FyZCwgYW5kIHdhbnQgdG8gZmluZCBvdXQgaG93IHRvCiAgICAgICAgICAgICAgYWRkIGRhdGEgYW5kIHNldCB1cCB5b3VyIGV2ZW50IGZpbGVzLCBjaGVjayBvdXQgdGhlCiAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kIj5SRUFETUU8L2E+CiAgICAgICAgICAgICAgYW5kIHBlcmhhcHMgdGhlCiAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvZ2V0X3N0YXJ0ZWQvc3VtbWFyaWVzX2FuZF90ZW5zb3Jib2FyZCI+VGVuc29yQm9hcmQgdHV0b3JpYWw8L2E+LgogICAgICAgICAgICAKCiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdSB0aGluayBUZW5zb3JCb2FyZCBpcyBjb25maWd1cmVkIHByb3Blcmx5LCBwbGVhc2Ugc2VlCiAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kI215LXRlbnNvcmJvYXJkLWlzbnQtc2hvd2luZy1hbnktZGF0YS13aGF0cy13cm9uZyI+dGhlIHNlY3Rpb24gb2YgdGhlIFJFQURNRSBkZXZvdGVkIHRvIG1pc3NpbmcgZGF0YSBwcm9ibGVtczwvYT4KICAgICAgICAgICAgICBhbmQgY29uc2lkZXIgZmlsaW5nIGFuIGlzc3VlIG9uIEdpdEh1Yi4KICAgICAgICAgICAgCiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shX2RhdGFOb3RGb3VuZF1dIj4KICAgICAgICAgIDx0Zi10YWctZmlsdGVyZXIgdGFnLWZpbHRlcj0ie3tfdGFnRmlsdGVyfX0iPjwvdGYtdGFnLWZpbHRlcmVyPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tfY2F0ZWdvcmllc11dIiBhcz0iY2F0ZWdvcnkiPgogICAgICAgICAgICA8dGYtY2F0ZWdvcnktcGFnaW5hdGVkLXZpZXcgY2F0ZWdvcnk9IltbY2F0ZWdvcnldXSIgaW5pdGlhbC1vcGVuZWQ9IltbX3Nob3VsZE9wZW4oaW5kZXgpXV0iPgogICAgICAgICAgICAgIDx0ZW1wbGF0ZT4KICAgICAgICAgICAgICAgIDx0Zi1tZXNoLWxvYWRlciBhY3RpdmU9IltbYWN0aXZlXV0iIHNlbGVjdGVkLXZpZXc9IltbX3NlbGVjdGVkVmlld11dIiBydW49IltbaXRlbS5ydW5dXSIgdGFnPSJbW2l0ZW0udGFnXV0iIHNhbXBsZT0iW1tpdGVtLnNhbXBsZV1dIiBvZi1zYW1wbGVzPSJbW2l0ZW0ub2ZTYW1wbGVzXV0iIHJlcXVlc3QtbWFuYWdlcj0iW1tfcmVxdWVzdE1hbmFnZXJdXSIgY2xhc3M9InRmLW1lc2gtbG9hZGVyLWNvbnRhaW5lciIgb24tY2FtZXJhLXBvc2l0aW9uLWNoYW5nZT0iX29uQ2FtZXJhUG9zaXRpb25DaGFuZ2VkIj4KICAgICAgICAgICAgICAgIDwvdGYtbWVzaC1sb2FkZXI+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPC90Zi1jYXRlZ29yeS1wYWdpbmF0ZWQtdmlldz4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPC9kaXY+CiAgICA8L3RmLWRhc2hib2FyZC1sYXlvdXQ+CgogICAgPHN0eWxlIGluY2x1ZGU9ImRhc2hib2FyZC1zdHlsZSI+PC9zdHlsZT4KICAgIDxzdHlsZT4KICAgICAgLm5vLWRhdGEtd2FybmluZyB7CiAgICAgICAgbWF4LXdpZHRoOiA1NDBweDsKICAgICAgICBtYXJnaW46IDgwcHggYXV0byAwIGF1dG87CiAgICAgIH0KICAgICAgcGFwZXItcmFkaW8tYnV0dG9uIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwYWRkaW5nOiA1cHg7CiAgICAgIH0KICAgICAgLnNpZGViYXItc2VjdGlvbiBoMy50aXRsZSB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWdyZXktODAwKTsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogNXB4OwogICAgICB9CgogICAgICAucnVucy1zZWxlY3RvciB7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICB9CgogICAgICB0Zi1ydW5zLXNlbGVjdG9yIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICB9CgogICAgICAudmlldy1jb250cm9sIHsKICAgICAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50OwogICAgICB9CgogICAgICAudmlldy1jb250cm9sIGgzLnRpdGxlIHsKICAgICAgICBwYWRkaW5nLXRvcDogMTZweDsKICAgICAgICBwYWRkaW5nLWJvdHRvbTogMTZweDsKICAgICAgfQoKICAgICAgLmFsbGNvbnRyb2xzIC52aWV3LWNvbnRyb2wgcGFwZXItcmFkaW8tZ3JvdXAgewogICAgICAgIG1hcmdpbi10b3A6IDVweDsKICAgICAgfQogICAgICAvKiBMYXlvdXQgbXVzdCBiZSBob3Jpem9udGFsLCBpLmUuIGl0ZW1zIGFycmFuZ2VkIGluIGEgcm93LiBJZiBpdGVtcyBjYW5ub3QgZml0IGluIGEgcm93LAogICAgICAgKiB0aGV5IHNob3VsZCBiZSBtb3ZlZCB0byBuZXh0IGxpbmUuIEFsbCBpdGVtcyBtdXN0IGJlIHNxdWFyZSBhdCBhbGwgdGltZXMuIE1pbmltdW0gc2l6ZSBvZgogICAgICAgKiB0aGUgaXRlbSBpcyA0ODBweC4gVGhpcyBtZWFucyB0aGF0IG1heGltdW0gc2l6ZSBvZiB0aGUgaXRlbSBtdXN0IGJlIDQ4MHB4ICsgNDc5cHggPSA5NTlweC4KICAgICAgICogKi8KICAgICAgLmhvcml6b250YWwgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgIH0KICAgICAgdGYtbWVzaC1sb2FkZXIgewogICAgICAgIHdpZHRoOiA0ODBweDsKICAgICAgICBmbGV4LWJhc2lzOiA0ODBweDsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KCiAgPHNjcmlwdD4vL35+V0VCUEFUSH5+L3RmLW1lc2gtZGFzaGJvYXJkL3RmLW1lc2gtZGFzaGJvYXJkLmh0bWwuanMKKGZ1bmN0aW9uKCl7UG9seW1lcih7aXM6Im1lc2gtZGFzaGJvYXJkIixwcm9wZXJ0aWVzOntfc2VsZWN0ZWRSdW5zOkFycmF5LF9ydW5Ub1RhZ0luZm86T2JqZWN0LF9kYXRhTm90Rm91bmQ6Qm9vbGVhbixfdGFnRmlsdGVyOnt0eXBlOlN0cmluZyx2YWx1ZToiLioifSxfc2VsZWN0ZWRWaWV3Ont0eXBlOlN0cmluZyxub3RpZnk6ITAsdmFsdWU6ImFsbCJ9LF9jYXRlZ29yaWVzOnt0eXBlOkFycmF5LGNvbXB1dGVkOiJfbWFrZUNhdGVnb3JpZXMoX3J1blRvVGFnSW5mbywgX3NlbGVjdGVkUnVucywgX3RhZ0ZpbHRlcikifSxfcmVxdWVzdE1hbmFnZXI6e3R5cGU6T2JqZWN0LHZhbHVlOigpPT5uZXcgUGsuUmVxdWVzdE1hbmFnZXJ9fSxyZWFkeSgpe3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJyZXNpemUiLCgpPT57dGhpcy5faGFuZGxlV2luZG93UmVzaXplKCl9LCExKTt0aGlzLnJlbG9hZCgpfSxfZ2V0QWxsQ2hpbGRyZW4oKXtyZXR1cm4gdGhpcy5yb290LnF1ZXJ5U2VsZWN0b3JBbGwoInRmLW1lc2gtbG9hZGVyIil9LApfb25DYW1lcmFQb3NpdGlvbkNoYW5nZWQoYSl7InNoYXJlIj09dGhpcy5fc2VsZWN0ZWRWaWV3JiZ0aGlzLl9nZXRBbGxDaGlsZHJlbigpLmZvckVhY2goYz0+e2EudGFyZ2V0IT1jJiZjLnNldENhbWVyYVZpZXdwb2ludChhLmRldGFpbC5wb3NpdGlvbixhLmRldGFpbC5mYXIsYS5kZXRhaWwudGFyZ2V0KX0pfSxfc2hvdWxkT3BlbihhKXtyZXR1cm4gMj49YX0scmVsb2FkKCl7dGhpcy5fZmV0Y2hUYWdzKCkudGhlbih0aGlzLl9yZWxvYWRNZXNoZXMuYmluZCh0aGlzKSl9LF9oYW5kbGVXaW5kb3dSZXNpemUoKXt0aGlzLl9nZXRBbGxDaGlsZHJlbigpLmZvckVhY2goYT0+e2EucmVkcmF3KCl9KX0sX2ZldGNoVGFncygpe2NvbnN0IGE9UGsuZ2V0Um91dGVyKCkucGx1Z2luUm91dGUoIm1lc2giLCIvdGFncyIpO3JldHVybiB0aGlzLl9yZXF1ZXN0TWFuYWdlci5yZXF1ZXN0KGEpLnRoZW4oYz0+e2lmKCFfLmlzRXF1YWwoYyx0aGlzLl9ydW5Ub1RhZ0luZm8pKXt2YXIgZD1fLm1hcFZhbHVlcyhjLApmPT5PYmplY3Qua2V5cyhmKSk7ZD1Qay5nZXRUYWdzKGQpO3RoaXMuc2V0KCJfZGF0YU5vdEZvdW5kIiwwPT09ZC5sZW5ndGgpO3RoaXMuc2V0KCJfcnVuVG9UYWdJbmZvIixjKX19KX0sX3JlbG9hZE1lc2hlcygpe3RoaXMuX2dldEFsbENoaWxkcmVuKCkuZm9yRWFjaChhPT57YS5yZWxvYWQoKX0pfSxfbWFrZUNhdGVnb3JpZXMoYSxjLGQpe2Z1bmN0aW9uIGYobCl7Y29uc3Qgaz1hW2wucnVuXVtsLnRhZ10uc2FtcGxlcztyZXR1cm4gXy5yYW5nZShrKS5tYXAobT0+T2JqZWN0LmFzc2lnbih7fSxsLHtzYW1wbGU6bSxvZlNhbXBsZXM6a30pKX1jb25zdCBnPV8ubWFwVmFsdWVzKGEsbD0+T2JqZWN0LmtleXMobCkpO3JldHVybiBRay5jYXRlZ29yaXplUnVuVGFnQ29tYmluYXRpb25zKGcsYyxkKS5tYXAobD0+T2JqZWN0LmFzc2lnbih7fSxsLHtpdGVtczpbXS5jb25jYXQuYXBwbHkoW10sbC5pdGVtcy5tYXAoZikpfSkpfX0pfSkoKTsKPC9zY3JpcHQ+CjwvZG9tLW1vZHVsZT4KCgoKCgoKCgoKCgoKCgoKCgoKCgoKPGRvbS1tb2R1bGUgaWQ9InRmLXRlbnNvcmJvYXJkIj4KICA8dGVtcGxhdGU+CiAgICA8cGFwZXItZGlhbG9nIHdpdGgtYmFja2Ryb3AgaWQ9InNldHRpbmdzIj4KICAgICAgPGgyPlNldHRpbmdzPC9oMj4KICAgICAgPHBhcGVyLWNoZWNrYm94IGlkPSJhdXRvLXJlbG9hZC1jaGVja2JveCIgY2hlY2tlZD0ie3thdXRvUmVsb2FkRW5hYmxlZH19Ij4KICAgICAgICBSZWxvYWQgZGF0YSBldmVyeSA8c3Bhbj5bW2F1dG9SZWxvYWRJbnRlcnZhbFNlY3NdXTwvc3Bhbj5zLgogICAgICA8L3BhcGVyLWNoZWNrYm94PgogICAgICA8cGFwZXItaW5wdXQgaWQ9InBhZ2luYXRpb25MaW1pdElucHV0IiBsYWJlbD0iUGFnaW5hdGlvbiBsaW1pdCIgYWx3YXlzLWZsb2F0LWxhYmVsIHR5cGU9Im51bWJlciIgbWluPSIxIiBzdGVwPSIxIiBvbi1jaGFuZ2U9Il9wYWdpbmF0aW9uTGltaXRDaGFuZ2VkIiBvbi12YWx1ZS1jaGFuZ2VkPSJfcGFnaW5hdGlvbkxpbWl0VmFsaWRhdGUiPjwvcGFwZXItaW5wdXQ+CiAgICA8L3BhcGVyLWRpYWxvZz4KICAgIDxwYXBlci1oZWFkZXItcGFuZWw+CiAgICAgIDxwYXBlci10b29sYmFyIGlkPSJ0b29sYmFyIiBzbG90PSJoZWFkZXIiIGNsYXNzPSJoZWFkZXIiPgogICAgICAgIDxkaXYgaWQ9InRvb2xiYXItY29udGVudCIgc2xvdD0idG9wIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InRvb2xiYXItdGl0bGUiPltbYnJhbmRdXTwvZGl2PgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19hY3RpdmVEYXNoYm9hcmRzTm90TG9hZGVkXV0iPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0idG9vbGJhci1tZXNzYWdlIj4KICAgICAgICAgICAgICBMb2FkaW5nIGFjdGl2ZSBkYXNoYm9hcmRz4oCmCiAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2FjdGl2ZURhc2hib2FyZHNMb2FkZWRdXSI+CiAgICAgICAgICAgIDxwYXBlci10YWJzIG5vaW5rIHNjcm9sbGFibGUgc2VsZWN0ZWQ9Int7X3NlbGVjdGVkRGFzaGJvYXJkfX0iIGF0dHItZm9yLXNlbGVjdGVkPSJkYXRhLWRhc2hib2FyZCI+CiAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tfZGFzaGJvYXJkRGF0YV1dIiBhcz0iZGFzaGJvYXJkRGF0dW0iPgogICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19pc0Rhc2hib2FyZEFjdGl2ZShkaXNhYmxlZERhc2hib2FyZHMsIF9hY3RpdmVEYXNoYm9hcmRzLCBkYXNoYm9hcmREYXR1bSldXSI+CiAgICAgICAgICAgICAgICAgIDxwYXBlci10YWIgZGF0YS1kYXNoYm9hcmQkPSJbW2Rhc2hib2FyZERhdHVtLnBsdWdpbl1dIiB0aXRsZT0iW1tkYXNoYm9hcmREYXR1bS50YWJOYW1lXV0iPgogICAgICAgICAgICAgICAgICAgIFtbZGFzaGJvYXJkRGF0dW0udGFiTmFtZV1dCiAgICAgICAgICAgICAgICAgIDwvcGFwZXItdGFiPgogICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8L3BhcGVyLXRhYnM+CiAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaW5hY3RpdmVEYXNoYm9hcmRzRXhpc3QoX2Rhc2hib2FyZERhdGEsIGRpc2FibGVkRGFzaGJvYXJkcywgX2FjdGl2ZURhc2hib2FyZHMpXV0iPgogICAgICAgICAgICAgIDxwYXBlci1kcm9wZG93bi1tZW51IGxhYmVsPSJJTkFDVElWRSIgbm8tbGFiZWwtZmxvYXQgbm9pbmsgc3R5bGU9Im1hcmdpbi1sZWZ0OiAxMnB4Ij4KICAgICAgICAgICAgICAgIDxwYXBlci1saXN0Ym94IGlkPSJpbmFjdGl2ZS1kYXNoYm9hcmRzLW1lbnUiIHNsb3Q9ImRyb3Bkb3duLWNvbnRlbnQiIHNlbGVjdGVkPSJ7e19zZWxlY3RlZERhc2hib2FyZH19IiBhdHRyLWZvci1zZWxlY3RlZD0iZGF0YS1kYXNoYm9hcmQiPgogICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19kYXNoYm9hcmREYXRhXV0iIGFzPSJkYXNoYm9hcmREYXR1bSI+CiAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19pc0Rhc2hib2FyZEluYWN0aXZlKGRpc2FibGVkRGFzaGJvYXJkcywgX2FjdGl2ZURhc2hib2FyZHMsIGRhc2hib2FyZERhdHVtKV1dIiByZXN0YW1wPgogICAgICAgICAgICAgICAgICAgICAgPHBhcGVyLWl0ZW0gZGF0YS1kYXNoYm9hcmQkPSJbW2Rhc2hib2FyZERhdHVtLnBsdWdpbl1dIj5bW2Rhc2hib2FyZERhdHVtLnRhYk5hbWVdXTwvcGFwZXItaXRlbT4KICAgICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgICAgPC9wYXBlci1saXN0Ym94PgogICAgICAgICAgICAgIDwvcGFwZXItZHJvcGRvd24tbWVudT4KICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJnbG9iYWwtYWN0aW9ucyI+CiAgICAgICAgICAgIDxwYXBlci1pY29uLWJ1dHRvbiBpZD0icmVsb2FkLWJ1dHRvbiIgY2xhc3MkPSJbW19nZXREYXRhUmVmcmVzaGluZ0NsYXNzKF9yZWZyZXNoaW5nKV1dIiBkaXNhYmxlZCQ9IltbX2lzUmVsb2FkRGlzYWJsZWRdXSIgaWNvbj0icmVmcmVzaCIgb24tdGFwPSJyZWxvYWQiIHRpdGxlJD0iTGFzdCB1cGRhdGVkOiBbW19sYXN0UmVsb2FkVGltZVNob3J0XV0iPjwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgICAgICAgIDxwYXBlci1pY29uLWJ1dHRvbiBpY29uPSJzZXR0aW5ncyIgb24tdGFwPSJvcGVuU2V0dGluZ3MiIGlkPSJzZXR0aW5ncy1idXR0b24iPjwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCIgcmVsPSJub29wZW5lciBub3JlZmVycmVyIiB0YWJpbmRleD0iLTEiIHRhcmdldD0iX2JsYW5rIj4KICAgICAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24gaWNvbj0iaGVscC1vdXRsaW5lIj48L3BhcGVyLWljb24tYnV0dG9uPgogICAgICAgICAgICA8L2E+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9wYXBlci10b29sYmFyPgoKICAgICAgPGRpdiBpZD0iY29udGVudC1wYW5lIiBjbGFzcz0iZml0Ij4KICAgICAgICA8c2xvdCBpZD0iaW5qZWN0ZWQtb3ZlcnZpZXciPjwvc2xvdD4KICAgICAgICA8ZGl2IGlkPSJjb250ZW50Ij4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfYWN0aXZlRGFzaGJvYXJkc0ZhaWxlZFRvTG9hZF1dIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0id2FybmluZy1tZXNzYWdlIj4KICAgICAgICAgICAgICA8aDM+RmFpbGVkIHRvIGxvYWQgdGhlIHNldCBvZiBhY3RpdmUgZGFzaGJvYXJkcy48L2gzPgogICAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgICAgVGhpcyBjYW4gb2NjdXIgaWYgdGhlIFRlbnNvckJvYXJkIGJhY2tlbmQgaXMgbm8gbG9uZ2VyIHJ1bm5pbmcuCiAgICAgICAgICAgICAgICBQZXJoYXBzIHRoaXMgcGFnZSBpcyBjYWNoZWQ/CiAgICAgICAgICAgICAgCgogICAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgICAgSWYgeW91IHRoaW5rIHRoYXQgeW914oCZdmUgZml4ZWQgdGhlIHByb2JsZW0sIGNsaWNrIHRoZSByZWxvYWQKICAgICAgICAgICAgICAgIGJ1dHRvbiBpbiB0aGUgdG9wLXJpZ2h0LgogICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2F1dG9SZWxvYWRFbmFibGVkXV0iPgogICAgICAgICAgICAgICAgICBXZeKAmWxsIHRyeSB0byByZWxvYWQgZXZlcnkKICAgICAgICAgICAgICAgICAgW1thdXRvUmVsb2FkSW50ZXJ2YWxTZWNzXV0mbmJzcDtzZWNvbmRzIGFzIHdlbGwuCiAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgIAoKICAgICAgICAgICAgICA8cD4KICAgICAgICAgICAgICAgIDxpPkxhc3QgcmVsb2FkOiBbW19sYXN0UmVsb2FkVGltZV1dPC9pPgogICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19kYXRhTG9jYXRpb25dXSI+CiAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+PHA+CiAgICAgICAgICAgICAgICAgICAgPGk+TG9nIGRpcmVjdG9yeToKICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGlkPSJkYXRhX2xvY2F0aW9uIj5bW19kYXRhTG9jYXRpb25dXTwvc3Bhbj48L2k+CiAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgPHA+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfc2hvd05vRGFzaGJvYXJkc01lc3NhZ2VdXSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9Indhcm5pbmctbWVzc2FnZSI+CiAgICAgICAgICAgICAgPGgzPk5vIGRhc2hib2FyZHMgYXJlIGFjdGl2ZSBmb3IgdGhlIGN1cnJlbnQgZGF0YSBzZXQuPC9oMz4KICAgICAgICAgICAgICA8cD5Qcm9iYWJsZSBjYXVzZXM6CiAgICAgICAgICAgICAgPHVsPgogICAgICAgICAgICAgICAgPGxpPllvdSBoYXZlbuKAmXQgd3JpdHRlbiBhbnkgZGF0YSB0byB5b3VyIGV2ZW50IGZpbGVzLjwvbGk+CiAgICAgICAgICAgICAgICA8bGk+VGVuc29yQm9hcmQgY2Fu4oCZdCBmaW5kIHlvdXIgZXZlbnQgZmlsZXMuPC9saT4KICAgICAgICAgICAgICA8L3VsPgoKICAgICAgICAgICAgICBJZiB5b3XigJlyZSBuZXcgdG8gdXNpbmcgVGVuc29yQm9hcmQsIGFuZCB3YW50IHRvIGZpbmQgb3V0IGhvdyB0bwogICAgICAgICAgICAgIGFkZCBkYXRhIGFuZCBzZXQgdXAgeW91ciBldmVudCBmaWxlcywgY2hlY2sgb3V0IHRoZQogICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCI+UkVBRE1FPC9hPgogICAgICAgICAgICAgIGFuZCBwZXJoYXBzIHRoZQogICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL2dldF9zdGFydGVkL3N1bW1hcmllc19hbmRfdGVuc29yYm9hcmQiPlRlbnNvckJvYXJkIHR1dG9yaWFsPC9hPi4KICAgICAgICAgICAgICA8cD4KICAgICAgICAgICAgICAgIElmIHlvdSB0aGluayBUZW5zb3JCb2FyZCBpcyBjb25maWd1cmVkIHByb3Blcmx5LCBwbGVhc2Ugc2VlCiAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9ibG9iL21hc3Rlci9SRUFETUUubWQjbXktdGVuc29yYm9hcmQtaXNudC1zaG93aW5nLWFueS1kYXRhLXdoYXRzLXdyb25nIj50aGUgc2VjdGlvbiBvZiB0aGUgUkVBRE1FIGRldm90ZWQgdG8gbWlzc2luZyBkYXRhIHByb2JsZW1zPC9hPgogICAgICAgICAgICAgICAgYW5kIGNvbnNpZGVyIGZpbGluZyBhbiBpc3N1ZSBvbiBHaXRIdWIuCiAgICAgICAgICAgICAgCgogICAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgICAgPGk+TGFzdCByZWxvYWQ6IFtbX2xhc3RSZWxvYWRUaW1lXV08L2k+CiAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2RhdGFMb2NhdGlvbl1dIj4KICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT48cD4KICAgICAgICAgICAgICAgICAgICA8aT5EYXRhIGxvY2F0aW9uOgogICAgICAgICAgICAgICAgICAgICAgPHNwYW4gaWQ9ImRhdGFfbG9jYXRpb24iPltbX2RhdGFMb2NhdGlvbl1dPC9zcGFuPjwvaT4KICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICA8cD4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19zaG93Tm9TdWNoRGFzaGJvYXJkTWVzc2FnZV1dIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0id2FybmluZy1tZXNzYWdlIj4KICAgICAgICAgICAgICA8aDM+CiAgICAgICAgICAgICAgICBUaGVyZeKAmXMgbm8gZGFzaGJvYXJkIGJ5IHRoZSBuYW1lIG9mCiAgICAgICAgICAgICAgICDigJw8dHQ+W1tfc2VsZWN0ZWREYXNoYm9hcmRdXTwvdHQ+LuKAnQogICAgICAgICAgICAgIDwvaDM+CiAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19hY3RpdmVEYXNoYm9hcmRzTG9hZGVkXV0iPgogICAgICAgICAgICAgICAgPHA+WW91IGNhbiBzZWxlY3QgYSBkYXNoYm9hcmQgZnJvbSB0aGUgbGlzdCBhYm92ZS48L3RlbXBsYXRlPgoKICAgICAgICAgICAgICA8cD4KICAgICAgICAgICAgICAgIDxpPkxhc3QgcmVsb2FkOiBbW19sYXN0UmVsb2FkVGltZV1dPC9pPgogICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19kYXRhTG9jYXRpb25dXSI+CiAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+PHA+CiAgICAgICAgICAgICAgICAgICAgPGk+RGF0YSBsb2NhdGlvbjoKICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGlkPSJkYXRhX2xvY2F0aW9uIj5bW19kYXRhTG9jYXRpb25dXTwvc3Bhbj48L2k+CiAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgPHA+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaWQ9ImRhc2hib2FyZHMtdGVtcGxhdGUiIGl0ZW1zPSJbW19kYXNoYm9hcmREYXRhXV0iIGFzPSJkYXNoYm9hcmREYXR1bSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRhc2hib2FyZC1jb250YWluZXIiIGRhdGEtZGFzaGJvYXJkJD0iW1tkYXNoYm9hcmREYXR1bS5wbHVnaW5dXSIgZGF0YS1zZWxlY3RlZCQ9IltbX3NlbGVjdGVkU3RhdHVzKF9zZWxlY3RlZERhc2hib2FyZCwgZGFzaGJvYXJkRGF0dW0ucGx1Z2luKV1dIj4KICAgICAgICAgICAgICAKICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIDwvcGFwZXItaGVhZGVyLXBhbmVsPgoKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci1ncmV5LTEwMCk7CiAgICAgIH0KCiAgICAgICN0b29sYmFyIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoCiAgICAgICAgICAtLXRiLXRvb2xiYXItYmFja2dyb3VuZC1jb2xvciwKICAgICAgICAgIHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpCiAgICAgICAgKTsKICAgICAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKICAgICAgfQoKICAgICAgLnRvb2xiYXItdGl0bGUgewogICAgICAgIGZvbnQtc2l6ZTogMjBweDsKICAgICAgICBtYXJnaW4tbGVmdDogMTBweDsKICAgICAgICB0ZXh0LXJlbmRlcmluZzogb3B0aW1pemVMZWdpYmlsaXR5OwogICAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMjVlbTsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGRpc3BsYXk6IHZhcigtLXRiLXRvb2xiYXItdGl0bGUtZGlzcGxheSwgYmxvY2spOwogICAgICB9CgogICAgICAudG9vbGJhci1tZXNzYWdlIHsKICAgICAgICBvcGFjaXR5OiAwLjc7CiAgICAgICAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgIH0KCiAgICAgIHBhcGVyLXRhYnMgewogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgLS1wYXBlci10YWJzLXNlbGVjdGlvbi1iYXItY29sb3I6IHdoaXRlOwogICAgICAgIC0tcGFwZXItdGFicy1jb250ZW50OiB7CiAgICAgICAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKICAgICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICAgICAgfQogICAgICB9CgogICAgICBwYXBlci1kcm9wZG93bi1tZW51IHsKICAgICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjgpOwogICAgICAgIC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWZvY3VzLWNvbG9yOiB3aGl0ZTsKICAgICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnB1dC1jb2xvcjogd2hpdGU7CiAgICAgICAgLS1wYXBlci1kcm9wZG93bi1tZW51LWljb246IHsKICAgICAgICAgIGNvbG9yOiB3aGl0ZTsKICAgICAgICB9CiAgICAgICAgLS1wYXBlci1kcm9wZG93bi1tZW51LWlucHV0OiB7CiAgICAgICAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgfQogICAgICAgIC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWxhYmVsOiB7CiAgICAgICAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgfQogICAgICB9CgogICAgICBwYXBlci1kcm9wZG93bi1tZW51IHBhcGVyLWl0ZW0gewogICAgICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICAgIH0KCiAgICAgICNpbmFjdGl2ZS1kYXNoYm9hcmRzLW1lbnUgewogICAgICAgIC0tcGFwZXItbGlzdGJveC1iYWNrZ3JvdW5kLWNvbG9yOiB2YXIoCiAgICAgICAgICAtLXRiLXRvb2xiYXItYmFja2dyb3VuZC1jb2xvciwKICAgICAgICAgIHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpCiAgICAgICAgKTsKICAgICAgICAtLXBhcGVyLWxpc3Rib3gtY29sb3I6IHdoaXRlOwogICAgICB9CgogICAgICAuZ2xvYmFsLWFjdGlvbnMgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OyAvKiBFbnN1cmUgdGhhdCBpY29ucyBzdGF5IGFsaWduZWQgKi8KICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kOwogICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OwogICAgICAgIGNvbG9yOiB3aGl0ZTsKICAgICAgfQoKICAgICAgLmdsb2JhbC1hY3Rpb25zIGEgewogICAgICAgIGNvbG9yOiB3aGl0ZTsKICAgICAgfQoKICAgICAgI3Rvb2xiYXItY29udGVudCB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgfQoKICAgICAgI2NvbnRlbnQtcGFuZSB7CiAgICAgICAgYWxpZ24taXRlbXM6IHN0cmV0Y2g7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHN0cmV0Y2g7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgICNjb250ZW50IHsKICAgICAgICBmbGV4OiAxIDE7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQoKICAgICAgLmRhc2hib2FyZC1jb250YWluZXIgewogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgfQoKICAgICAgLyogSGlkZSB1bnNlbGVjdGVkIGRhc2hib2FyZHMuIFdlIHN0aWxsIGRpc3BsYXkgdGhlbSB3aXRoaW4gYSBjb250YWluZXIKICAgICAgICAgb2YgaGVpZ2h0IDAgc2luY2UgUGxvdHRhYmxlIHByb2R1Y2VzIGRlZ2VuZXJhdGUgY2hhcnRzIHdoZW4gY2hhcnRzIGFyZQogICAgICAgICByZWxvYWRlZCB3aGlsZSBub3QgZGlzcGxheWVkLiAqLwogICAgICAuZGFzaGJvYXJkLWNvbnRhaW5lcjpub3QoW2RhdGEtc2VsZWN0ZWRdKSB7CiAgICAgICAgbWF4LWhlaWdodDogMDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICAvKiogV2UgZnVydGhlciBtYWtlIGNvbnRhaW5lcnMgaW52aXNpYmxlLiBTb21lIGVsZW1lbnRzIG1heSBhbmNob3IgdG8KICAgICAgICAgICAgdGhlIHZpZXdwb3J0IGluc3RlYWQgb2YgdGhlIGNvbnRhaW5lciwgaW4gd2hpY2ggY2FzZSBzZXR0aW5nIHRoZSBtYXgKICAgICAgICAgICAgaGVpZ2h0IGhlcmUgdG8gMCB3aWxsIG5vdCBoaWRlIHRoZW0uICovCiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuOwogICAgICB9CgogICAgICAuZGFzaGJvYXJkLWNvbnRhaW5lciBpZnJhbWUgewogICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgIC53YXJuaW5nLW1lc3NhZ2UgewogICAgICAgIG1heC13aWR0aDogNTQwcHg7CiAgICAgICAgbWFyZ2luOiA4MHB4IGF1dG8gMCBhdXRvOwogICAgICB9CgogICAgICBbZGlzYWJsZWRdIHsKICAgICAgICBvcGFjaXR5OiAwLjI7CiAgICAgICAgY29sb3I6IHdoaXRlOwogICAgICB9CgogICAgICAjcmVsb2FkLWJ1dHRvbi5yZWZyZXNoaW5nIHsKICAgICAgICBhbmltYXRpb246IHJvdGF0ZSAycyBsaW5lYXIgaW5maW5pdGU7CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMgcm90YXRlIHsKICAgICAgICAwJSB7CiAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTsKICAgICAgICB9CiAgICAgICAgNTAlIHsKICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDE4MGRlZyk7CiAgICAgICAgfQogICAgICAgIDEwMCUgewogICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTsKICAgICAgICB9CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8dGVtcGxhdGUgaWQ9ImNvbGFiTm90U3VwcG9ydGVkIiBwcmVzZXJ2ZS1jb250ZW50PgogICAgICA8ZGl2IHN0eWxlPSJtYXgtd2lkdGg6IDU0MHB4OyBtYXJnaW46IDgwcHggYXV0byAwIGF1dG87Ij4KICAgICAgICA8aDM+RHluYW1pYyBwbHVnaW4gaXNu4oCZdCBzdXBwb3J0ZWQgaW4gQ29sYWIgeWV0LjwvaDM+CiAgICAgICAgPHA+CiAgICAgICAgICBQbGVhc2Ugc2VlCiAgICAgICAgICA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9pc3N1ZXMvMTkxMyIgcmVsPSJub29wZW5lciIgdGFyZ2V0PSJfYmxhbmsiPkdpdEh1YiBpc3N1ZSAjMTkxMzwvYT4KICAgICAgICAgIGZvciBtb3JlIGluZm9ybWF0aW9uLgogICAgICAgIAogICAgICA8L2Rpdj4KICAgIDwvdGVtcGxhdGU+CiAgPC90ZW1wbGF0ZT4KICA8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdGYtdGVuc29yYm9hcmQvYXV0b1JlbG9hZEJlaGF2aW9yLmpzCihmdW5jdGlvbihhKXtmdW5jdGlvbiBjKCl7cmV0dXJuKG5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCkpLmhhcygiX0Rpc2FibGVBdXRvUmVsb2FkIil9YS5BVVRPUkVMT0FEX0xPQ0FMU1RPUkFHRV9LRVk9IlRGLlRlbnNvckJvYXJkLmF1dG9SZWxvYWRFbmFibGVkIjthLkF1dG9SZWxvYWRCZWhhdmlvcj17cHJvcGVydGllczp7YXV0b1JlbG9hZEVuYWJsZWQ6e3R5cGU6Qm9vbGVhbixvYnNlcnZlcjoiX2F1dG9SZWxvYWRPYnNlcnZlciIsdmFsdWU6KCk9Pnt2YXIgZD13aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oYS5BVVRPUkVMT0FEX0xPQ0FMU1RPUkFHRV9LRVkpO3JldHVybiJ0cnVlIj09PWR8fG51bGw9PWR9fSxfYXV0b1JlbG9hZElkOnt0eXBlOk51bWJlcn0sYXV0b1JlbG9hZEludGVydmFsU2Vjczp7dHlwZTpOdW1iZXIsdmFsdWU6MzB9fSxkZXRhY2hlZDpmdW5jdGlvbigpe3dpbmRvdy5jbGVhclRpbWVvdXQodGhpcy5fYXV0b1JlbG9hZElkKX0sCl9hdXRvUmVsb2FkT2JzZXJ2ZXI6ZnVuY3Rpb24oZCl7d2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKGEuQVVUT1JFTE9BRF9MT0NBTFNUT1JBR0VfS0VZLGQpO2QmJiFjKCk/dGhpcy5fYXV0b1JlbG9hZElkPXdpbmRvdy5zZXRUaW1lb3V0KCgpPT50aGlzLl9kb0F1dG9SZWxvYWQoKSwxRTMqdGhpcy5hdXRvUmVsb2FkSW50ZXJ2YWxTZWNzKTp3aW5kb3cuY2xlYXJUaW1lb3V0KHRoaXMuX2F1dG9SZWxvYWRJZCl9LF9kb0F1dG9SZWxvYWQ6ZnVuY3Rpb24oKXtpZihudWxsPT10aGlzLnJlbG9hZCl0aHJvdyBFcnJvcigiQXV0b1JlbG9hZEJlaGF2aW9yIHJlcXVpcmVzIGEgcmVsb2FkIG1ldGhvZCIpO3RoaXMucmVsb2FkKCk7dGhpcy5fYXV0b1JlbG9hZElkPXdpbmRvdy5zZXRUaW1lb3V0KCgpPT50aGlzLl9kb0F1dG9SZWxvYWQoKSwxRTMqdGhpcy5hdXRvUmVsb2FkSW50ZXJ2YWxTZWNzKX19fSkoJGx8fCgkbD17fSkpOwo8L3NjcmlwdD4KICA8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdGYtdGVuc29yYm9hcmQvdGYtdGVuc29yYm9hcmQuaHRtbC5qcwpQb2x5bWVyKHtpczoidGYtdGVuc29yYm9hcmQiLGJlaGF2aW9yczpbJGwuQXV0b1JlbG9hZEJlaGF2aW9yXSxwcm9wZXJ0aWVzOnticmFuZDp7dHlwZTpTdHJpbmcsdmFsdWU6IlRlbnNvckJvYXJkLVgifSx0aXRsZTp7dHlwZTpTdHJpbmcsb2JzZXJ2ZXI6Il91cGRhdGVUaXRsZSJ9LHJvdXRlcjp7dHlwZTpPYmplY3Qsb2JzZXJ2ZXI6Il91cGRhdGVSb3V0ZXIifSxkZW1vRGlyOnt0eXBlOlN0cmluZyx2YWx1ZTpudWxsfSx1c2VIYXNoOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGRpc2FibGVkRGFzaGJvYXJkczp7dHlwZTpTdHJpbmcsdmFsdWU6IiJ9LF9kYXNoYm9hcmREYXRhOnt0eXBlOkFycmF5LGNvbXB1dGVkOiJfY29tcHV0ZURhc2hib2FyZERhdGEoX2Rhc2hib2FyZFJlZ2lzdHJ5KSJ9LF9kYXNoYm9hcmRSZWdpc3RyeTp7dHlwZTpPYmplY3QsY29tcHV0ZWQ6Il9jb21wdXRlRGFzaGJvYXJkUmVnaXN0cnkoX3BsdWdpbnNMaXN0aW5nKSJ9LF9wbHVnaW5zTGlzdGluZzp7dHlwZTpPYmplY3QsCnZhbHVlOigpPT4oe30pfSxfYWN0aXZlRGFzaGJvYXJkczp7dHlwZTpBcnJheSxjb21wdXRlZDoiX2NvbXB1dGVBY3RpdmVEYXNoYm9hcmQoX2Rhc2hib2FyZERhdGEsIF9wbHVnaW5zTGlzdGluZykifSxfYWN0aXZlRGFzaGJvYXJkc0xvYWRTdGF0ZTp7dHlwZTpTdHJpbmcsdmFsdWU6JGwuQWN0aXZlRGFzaGJvYXJkc0xvYWRTdGF0ZS5OT1RfTE9BREVEfSxfYWN0aXZlRGFzaGJvYXJkc05vdExvYWRlZDp7dHlwZTpCb29sZWFuLGNvbXB1dGVkOiJfY29tcHV0ZUFjdGl2ZURhc2hib2FyZHNOb3RMb2FkZWQoX2FjdGl2ZURhc2hib2FyZHNMb2FkU3RhdGUpIn0sX2FjdGl2ZURhc2hib2FyZHNMb2FkZWQ6e3R5cGU6Qm9vbGVhbixjb21wdXRlZDoiX2NvbXB1dGVBY3RpdmVEYXNoYm9hcmRzTG9hZGVkKF9hY3RpdmVEYXNoYm9hcmRzTG9hZFN0YXRlKSJ9LF9hY3RpdmVEYXNoYm9hcmRzRmFpbGVkVG9Mb2FkOnt0eXBlOkJvb2xlYW4sY29tcHV0ZWQ6Il9jb21wdXRlQWN0aXZlRGFzaGJvYXJkc0ZhaWxlZFRvTG9hZChfYWN0aXZlRGFzaGJvYXJkc0xvYWRTdGF0ZSkifSwKX3Nob3dOb0Rhc2hib2FyZHNNZXNzYWdlOnt0eXBlOkJvb2xlYW4sY29tcHV0ZWQ6Il9jb21wdXRlU2hvd05vRGFzaGJvYXJkc01lc3NhZ2UoX2FjdGl2ZURhc2hib2FyZHNMb2FkZWQsIF9hY3RpdmVEYXNoYm9hcmRzLCBfc2VsZWN0ZWREYXNoYm9hcmQpIn0sX3Nob3dOb1N1Y2hEYXNoYm9hcmRNZXNzYWdlOnt0eXBlOkJvb2xlYW4sY29tcHV0ZWQ6Il9jb21wdXRlU2hvd05vU3VjaERhc2hib2FyZE1lc3NhZ2UoX2FjdGl2ZURhc2hib2FyZHNMb2FkZWQsIF9kYXNoYm9hcmRSZWdpc3RyeSwgX3NlbGVjdGVkRGFzaGJvYXJkKSJ9LF9zZWxlY3RlZERhc2hib2FyZDp7dHlwZTpTdHJpbmcsdmFsdWU6VmwuZ2V0U3RyaW5nKFZsLlRBQil8fG51bGwsb2JzZXJ2ZXI6Il9zZWxlY3RlZERhc2hib2FyZENoYW5nZWQifSxfZGFzaGJvYXJkVG9NYXliZVJlbW92ZTpTdHJpbmcsX2Rhc2hib2FyZENvbnRhaW5lcnNTdGFtcGVkOnt0eXBlOk9iamVjdCx2YWx1ZTooKT0+KHt9KX0sX2lzUmVsb2FkRGlzYWJsZWQ6e3R5cGU6Qm9vbGVhbiwKdmFsdWU6ITF9LF9sYXN0UmVsb2FkVGltZTp7dHlwZTpTdHJpbmcsdmFsdWU6Im5vdCB5ZXQgbG9hZGVkIn0sX2xhc3RSZWxvYWRUaW1lU2hvcnQ6e3R5cGU6U3RyaW5nLHZhbHVlOiJOb3QgeWV0IGxvYWRlZCJ9LF9kYXRhTG9jYXRpb246e3R5cGU6U3RyaW5nLHZhbHVlOm51bGx9LF9yZXF1ZXN0TWFuYWdlcjp7dHlwZTpPYmplY3QsdmFsdWU6KCk9Pm5ldyBQay5SZXF1ZXN0TWFuYWdlcn0sX2NhbmNlbGxlcjp7dHlwZTpPYmplY3QsdmFsdWU6KCk9Pm5ldyBQay5DYW5jZWxsZXJ9LF9yZWZyZXNoaW5nOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LF9pbkNvbGFiOnt0eXBlOkJvb2xlYW4sdmFsdWU6KCk9PiEhKHdpbmRvdy5URU5TT1JCT0FSRF9FTlZ8fHt9KS5JTl9DT0xBQixyZWFkT25seTohMH19LG9ic2VydmVyczpbIl91cGRhdGVTZWxlY3RlZERhc2hib2FyZEZyb21BY3RpdmUoX3NlbGVjdGVkRGFzaGJvYXJkLCBfYWN0aXZlRGFzaGJvYXJkcykiLCJfZW5zdXJlU2VsZWN0ZWREYXNoYm9hcmRTdGFtcGVkKF9kYXNoYm9hcmRSZWdpc3RyeSwgX2Rhc2hib2FyZENvbnRhaW5lcnNTdGFtcGVkLCBfYWN0aXZlRGFzaGJvYXJkcywgX3NlbGVjdGVkRGFzaGJvYXJkKSJdLApfYWN0aXZlRGFzaGJvYXJkc1VwZGF0ZWQoKXt9LF9pc0Rhc2hib2FyZEFjdGl2ZShhLGMsZCl7cmV0dXJuIDA8PShhfHwiIikuc3BsaXQoIiwiKS5pbmRleE9mKGQucGx1Z2luKXx8IShjfHxbXSkuaW5jbHVkZXMoZC5wbHVnaW4pPyExOiEwfSxfaXNEYXNoYm9hcmRJbmFjdGl2ZShhLGMsZCl7cmV0dXJuIDA8PShhfHwiIikuc3BsaXQoIiwiKS5pbmRleE9mKGQucGx1Z2luKT8hMTooY3x8W10pLmluY2x1ZGVzKGQucGx1Z2luKT8hMTohMH0sX2luYWN0aXZlRGFzaGJvYXJkc0V4aXN0KGEsYyxkKXtpZighZClyZXR1cm4hMTtjb25zdCBmPW5ldyBTZXQ7YS5mb3JFYWNoKGc9PntmLmFkZChnLnBsdWdpbil9KTsoY3x8IiIpLnNwbGl0KCIsIikuZm9yRWFjaChnPT57Zi5kZWxldGUoZy5wbHVnaW4pfSk7ZC5mb3JFYWNoKGc9PntmLmRlbGV0ZShnKX0pO3JldHVybiAwPGYuc2l6ZX0sX2dldERhc2hib2FyZEZyb21JbmRleChhLGMpe3JldHVybiBhW2NdfSxfc2VsZWN0ZWRTdGF0dXMoYSwKYyl7cmV0dXJuIGE9PT1jfSxfc2VsZWN0ZWREYXNoYm9hcmRDaGFuZ2VkKGEpe2E9YXx8IiI7Vmwuc2V0U3RyaW5nKFZsLlRBQixhKTtnYSgic2V0IiwicGFnZSIsIi8iK2EpO2dhKCJzZW5kIiwicGFnZXZpZXciKX0sX3VwZGF0ZVNlbGVjdGVkRGFzaGJvYXJkRnJvbUFjdGl2ZShhLGMpe2MmJm51bGw9PWEmJihhPWNbMF18fG51bGwsbnVsbCE9YSYmKFZsLnNldFN0cmluZyhWbC5UQUIsYSx7dXNlTG9jYXRpb25SZXBsYWNlOiEwfSksdGhpcy5fc2VsZWN0ZWREYXNoYm9hcmQ9YSkpfSxfdXBkYXRlU2VsZWN0ZWREYXNoYm9hcmRGcm9tSGFzaCgpe2NvbnN0IGE9VmwuZ2V0U3RyaW5nKFZsLlRBQik7dGhpcy5zZXQoIl9zZWxlY3RlZERhc2hib2FyZCIsYXx8bnVsbCl9LF9lbnN1cmVTZWxlY3RlZERhc2hib2FyZFN0YW1wZWQoYSxjLGQsZil7aWYoZCYmZiYmY1tmXSYmKGM9dGhpcy5fZGFzaGJvYXJkVG9NYXliZVJlbW92ZSx0aGlzLl9kYXNoYm9hcmRUb01heWJlUmVtb3ZlPWYsYyYmCmMhPWYmJmFbY10ucmVtb3ZlRG9tJiYoYz10aGlzLiQkKGAuZGFzaGJvYXJkLWNvbnRhaW5lcltkYXRhLWRhc2hib2FyZD0ke2N9XWApLGMuZmlyc3RDaGlsZCYmYy5maXJzdENoaWxkLnJlbW92ZSgpKSxjPXRoaXMuJCQoYC5kYXNoYm9hcmQtY29udGFpbmVyW2RhdGEtZGFzaGJvYXJkPSR7Zn1dYCkpKXthPWFbZl07aWYoMD09PWMuY2hpbGRyZW4ubGVuZ3RoKXN3aXRjaChkPWEubG9hZGluZ01lY2hhbmlzbSxkLnR5cGUpe2Nhc2UgIkNVU1RPTV9FTEVNRU5UIjpmPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoZC5lbGVtZW50TmFtZSk7Zi5pZD0iZGFzaGJvYXJkIjtjLmFwcGVuZENoaWxkKGYpO2JyZWFrO2Nhc2UgIklGUkFNRSI6dGhpcy5fcmVuZGVyUGx1Z2luSWZyYW1lKGMsZixkKTticmVhaztkZWZhdWx0OmNvbnNvbGUud2FybigiSW52YXJpYW50IHZpb2xhdGlvbjoiLGQpfXRoaXMuc2V0KCJfaXNSZWxvYWREaXNhYmxlZCIsYS5kaXNhYmxlUmVsb2FkKX19LF9yZW5kZXJQbHVnaW5JZnJhbWUoYSwKYyxkKXtpZih0aGlzLl9pbkNvbGFiKWQ9ZG9jdW1lbnQuaW1wb3J0Tm9kZSh0aGlzLiQuY29sYWJOb3RTdXBwb3J0ZWQuY29udGVudCwhMCksZC5pZD0iZGFzaGJvYXJkIix0aGlzLnNjb3BlU3VidHJlZShkKSxhLmFwcGVuZENoaWxkKGQpO2Vsc2V7dmFyIGY9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaWZyYW1lIik7Zi5pZD0iZGFzaGJvYXJkIjt0aGlzLnNjb3BlU3VidHJlZShmKTthLmFwcGVuZENoaWxkKGYpO2E9Zi5jb250ZW50RG9jdW1lbnQ7Zj1Qay5nZXRSb3V0ZXIoKS5wbHVnaW5Sb3V0ZShjLCIvIik7Yz1hLmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpO2Y9SlNPTi5zdHJpbmdpZnkobmV3IFVSTChmLHdpbmRvdy5sb2NhdGlvbi5ocmVmKSk7ZD1KU09OLnN0cmluZ2lmeShkLm1vZHVsZVBhdGgpO2MudGV4dENvbnRlbnQ9WydzZXRUaW1lb3V0KCgpIFx4M2RceDNlIHtcbiAgY29uc3QgYmFzZSBceDNkIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJhc2UiKTtcbicsYCAgYmFzZS5zZXRBdHRyaWJ1dGUoImhyZWYiLCAke2Z9KTtcbmAsCiIgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoYmFzZSk7XG4iLGAgIGltcG9ydCgke2R9KS50aGVuKChtKSA9PiB2b2lkIG0ucmVuZGVyKCkpO1xuYCwifSwgMCk7XG4iXS5qb2luKCIiKTthLmJvZHkuYXBwZW5kQ2hpbGQoYyl9fSxfc2VsZWN0ZWREYXNoYm9hcmRDb21wb25lbnQoKXtyZXR1cm4gdGhpcy4kJChgLmRhc2hib2FyZC1jb250YWluZXJbZGF0YS1kYXNoYm9hcmQ9JHt0aGlzLl9zZWxlY3RlZERhc2hib2FyZH1dICNkYXNoYm9hcmRgKX0scmVhZHkoKXtSay5zZXRVc2VIYXNoKHRoaXMudXNlSGFzaCk7dGhpcy5fdXBkYXRlU2VsZWN0ZWREYXNoYm9hcmRGcm9tSGFzaCgpO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJoYXNoY2hhbmdlIiwoKT0+e3RoaXMuX3VwZGF0ZVNlbGVjdGVkRGFzaGJvYXJkRnJvbUhhc2goKX0sITEpO1BrLmVudmlyb25tZW50U3RvcmUuYWRkTGlzdGVuZXIoKCk9Pnt0aGlzLl9kYXRhTG9jYXRpb249UGsuZW52aXJvbm1lbnRTdG9yZS5nZXREYXRhTG9jYXRpb24oKTsKY29uc3QgYT1Qay5lbnZpcm9ubWVudFN0b3JlLmdldFdpbmRvd1RpdGxlKCk7YSYmKHdpbmRvdy5kb2N1bWVudC50aXRsZT1hKX0pO3RoaXMuJCQoIiNkYXNoYm9hcmRzLXRlbXBsYXRlIikuYWRkRXZlbnRMaXN0ZW5lcigiZG9tLWNoYW5nZSIsKCk9Pntjb25zdCBhPXt9O2Zvcihjb25zdCBjIG9mIHRoaXMucm9vdC5xdWVyeVNlbGVjdG9yQWxsKCIuZGFzaGJvYXJkLWNvbnRhaW5lciIpKWFbYy5kYXRhc2V0LmRhc2hib2FyZF09ITA7dGhpcy5fZGFzaGJvYXJkQ29udGFpbmVyc1N0YW1wZWQ9YX0sITEpO3RoaXMuX3JlbG9hZERhdGEoKTt0aGlzLl9sYXN0UmVsb2FkVGltZT0obmV3IERhdGUpLnRvU3RyaW5nKCl9LF9jb21wdXRlQWN0aXZlRGFzaGJvYXJkKCl7cmV0dXJuIHRoaXMuX2Rhc2hib2FyZERhdGE/dGhpcy5fZGFzaGJvYXJkRGF0YS5tYXAoYT0+YS5wbHVnaW4pLmZpbHRlcihhPT57YT10aGlzLl9wbHVnaW5zTGlzdGluZ1thXTtyZXR1cm4iYm9vbGVhbiI9PT10eXBlb2YgYT8KYTphJiZhLmVuYWJsZWR9KTpbXX0sX2NvbXB1dGVEYXNoYm9hcmRSZWdpc3RyeShhKXtjb25zdCBjPXt9O2Zvcihjb25zdCBbZixnXW9mIE9iamVjdC5lbnRyaWVzKCRsLmRhc2hib2FyZFJlZ2lzdHJ5KSljW2ZdPXtwbHVnaW46Zy5wbHVnaW4sbG9hZGluZ01lY2hhbmlzbTp7dHlwZToiQ1VTVE9NX0VMRU1FTlQiLGVsZW1lbnROYW1lOmcuZWxlbWVudE5hbWV9LHRhYk5hbWU6Zy50YWJOYW1lLnRvVXBwZXJDYXNlKCksZGlzYWJsZVJlbG9hZDpnLmlzUmVsb2FkRGlzYWJsZWR8fCExLHJlbW92ZURvbTpnLnJlbW92ZURvbXx8ITF9O2lmKG51bGwhPWEpZm9yKGNvbnN0IFtmLGddb2YgT2JqZWN0LmVudHJpZXMoYSkpaWYoImJvb2xlYW4iIT09dHlwZW9mIGcpe3N3aXRjaChnLmxvYWRpbmdfbWVjaGFuaXNtLnR5cGUpe2Nhc2UgIk5PTkUiOm51bGw9PWNbZl0mJmNvbnNvbGUud2FybigiUGx1Z2luIGhhcyBubyBsb2FkaW5nIG1lY2hhbmlzbSBhbmQgbm8gYmFrZWQtaW4gcmVnaXN0cnkgZW50cnk6ICVzIiwKZik7Y29udGludWU7Y2FzZSAiQ1VTVE9NX0VMRU1FTlQiOnZhciBkPXt0eXBlOiJDVVNUT01fRUxFTUVOVCIsZWxlbWVudE5hbWU6Zy5sb2FkaW5nX21lY2hhbmlzbS5lbGVtZW50X25hbWV9O2JyZWFrO2Nhc2UgIklGUkFNRSI6ZD17dHlwZToiSUZSQU1FIixtb2R1bGVQYXRoOmcubG9hZGluZ19tZWNoYW5pc20ubW9kdWxlX3BhdGh9O2JyZWFrO2RlZmF1bHQ6Y29uc29sZS53YXJuKCJVbmtub3duIGxvYWRpbmcgbWVjaGFuaXNtIGZvciBwbHVnaW4gJXM6ICVzIixmLGcubG9hZGluZ19tZWNoYW5pc20pO2NvbnRpbnVlfW51bGw9PWQmJmNvbnNvbGUuZXJyb3IoIkludmFyaWFudCB2aW9sYXRpb246IGxvYWRpbmdNZWNoYW5pc20gaXMgJXMgZm9yICVzIixkLGYpO2NbZl09e3BsdWdpbjpmLGxvYWRpbmdNZWNoYW5pc206ZCx0YWJOYW1lOmcudGFiX25hbWUudG9VcHBlckNhc2UoKSxkaXNhYmxlUmVsb2FkOmcuZGlzYWJsZV9yZWxvYWQscmVtb3ZlRG9tOmcucmVtb3ZlX2RvbX19ZD17fTsKZm9yKGNvbnN0IGYgb2YgT2JqZWN0LmtleXMoYSkpY1tmXSYmKGRbZl09Y1tmXSk7T2JqZWN0LmFzc2lnbihkLGMpO3JldHVybiBkfSxfY29tcHV0ZURhc2hib2FyZERhdGEoYSl7cmV0dXJuIE9iamVjdC52YWx1ZXMoYSl9LF9mZXRjaFBsdWdpbnNMaXN0aW5nKCl7dGhpcy5fY2FuY2VsbGVyLmNhbmNlbEFsbCgpO2NvbnN0IGE9dGhpcy5fY2FuY2VsbGVyLmNhbmNlbGxhYmxlKGM9PntjLmNhbmNlbGxlZHx8KHRoaXMuX3BsdWdpbnNMaXN0aW5nPWMudmFsdWUsdGhpcy5fYWN0aXZlRGFzaGJvYXJkc0xvYWRTdGF0ZT0kbC5BY3RpdmVEYXNoYm9hcmRzTG9hZFN0YXRlLkxPQURFRCl9KTtyZXR1cm4gdGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdChQay5nZXRSb3V0ZXIoKS5wbHVnaW5zTGlzdGluZygpKS50aGVuKGEsKCk9Pnt0aGlzLl9hY3RpdmVEYXNoYm9hcmRzTG9hZFN0YXRlPT09JGwuQWN0aXZlRGFzaGJvYXJkc0xvYWRTdGF0ZS5OT1RfTE9BREVEP3RoaXMuX2FjdGl2ZURhc2hib2FyZHNMb2FkU3RhdGU9CiRsLkFjdGl2ZURhc2hib2FyZHNMb2FkU3RhdGUuRkFJTEVEOmNvbnNvbGUud2FybigiRmFpbGVkIHRvIHJlbG9hZCB0aGUgc2V0IG9mIGFjdGl2ZSBwbHVnaW5zOyB1c2luZyBvbGQgdmFsdWUuIil9KX0sX2NvbXB1dGVBY3RpdmVEYXNoYm9hcmRzTm90TG9hZGVkKGEpe3JldHVybiBhPT09JGwuQWN0aXZlRGFzaGJvYXJkc0xvYWRTdGF0ZS5OT1RfTE9BREVEfSxfY29tcHV0ZUFjdGl2ZURhc2hib2FyZHNMb2FkZWQoYSl7cmV0dXJuIGE9PT0kbC5BY3RpdmVEYXNoYm9hcmRzTG9hZFN0YXRlLkxPQURFRH0sX2NvbXB1dGVBY3RpdmVEYXNoYm9hcmRzRmFpbGVkVG9Mb2FkKGEpe3JldHVybiBhPT09JGwuQWN0aXZlRGFzaGJvYXJkc0xvYWRTdGF0ZS5GQUlMRUR9LF9jb21wdXRlU2hvd05vRGFzaGJvYXJkc01lc3NhZ2UoYSxjLGQpe3JldHVybiBhJiYwPT09Yy5sZW5ndGgmJm51bGw9PWR9LF9jb21wdXRlU2hvd05vU3VjaERhc2hib2FyZE1lc3NhZ2UoYSxjLGQpe3JldHVybiBhJiYhIWQmJgpudWxsPT1jW2RdfSxfdXBkYXRlUm91dGVyKGEpe1BrLnNldFJvdXRlcihhKX0sX3VwZGF0ZVRpdGxlKGEpe2EmJnRoaXMuc2V0KCJicmFuZCIsYSl9LHJlbG9hZCgpe3RoaXMuX2lzUmVsb2FkRGlzYWJsZWR8fCh0aGlzLl9yZWxvYWREYXRhKCkudGhlbigoKT0+e2NvbnN0IGE9dGhpcy5fc2VsZWN0ZWREYXNoYm9hcmRDb21wb25lbnQoKTthJiZhLnJlbG9hZCYmYS5yZWxvYWQoKX0pLHRoaXMuX2xhc3RSZWxvYWRUaW1lPShuZXcgRGF0ZSkudG9TdHJpbmcoKSl9LF9yZWxvYWREYXRhKCl7dGhpcy5fcmVmcmVzaGluZz0hMDtyZXR1cm4gUHJvbWlzZS5hbGwoW3RoaXMuX2ZldGNoUGx1Z2luc0xpc3RpbmcoKSxQay5lbnZpcm9ubWVudFN0b3JlLnJlZnJlc2goKSxQay5ydW5zU3RvcmUucmVmcmVzaCgpLFBrLmV4cGVyaW1lbnRzU3RvcmUucmVmcmVzaCgpXSkudGhlbigoKT0+e3RoaXMuX2xhc3RSZWxvYWRUaW1lU2hvcnQ9KG5ldyBEYXRlKS50b0xvY2FsZURhdGVTdHJpbmcodm9pZCAwLAp7bW9udGg6ImxvbmciLGRheToibnVtZXJpYyIsaG91cjoibnVtZXJpYyIsbWludXRlOiJudW1lcmljIixzZWNvbmQ6Im51bWVyaWMifSl9KS5maW5hbGx5KCgpPT57dGhpcy5fcmVmcmVzaGluZz0hMX0pfSxfZ2V0RGF0YVJlZnJlc2hpbmdDbGFzcygpe3JldHVybiB0aGlzLl9yZWZyZXNoaW5nPyJyZWZyZXNoaW5nIjoiIn0sb3BlblNldHRpbmdzKCl7dGhpcy4kLnNldHRpbmdzLm9wZW4oKTt0aGlzLiQucGFnaW5hdGlvbkxpbWl0SW5wdXQudmFsdWU9WWwuZ2V0TGltaXQoKX0sX3BhZ2luYXRpb25MaW1pdFZhbGlkYXRlKGEpe2EudGFyZ2V0LnZhbGlkYXRlKCl9LF9wYWdpbmF0aW9uTGltaXRDaGFuZ2VkKGEpe2E9TnVtYmVyLnBhcnNlSW50KGEudGFyZ2V0LnZhbHVlLDEwKTthPT09K2EmJjA8YSYmWWwuc2V0TGltaXQoYSl9fSk7PC9zY3JpcHQ+CjwvZG9tLW1vZHVsZT4KCjxib2R5PgogIDx0Zi10ZW5zb3Jib2FyZCB1c2UtaGFzaCBicmFuZD0iVGVuc29yQm9hcmQiPjwvdGYtdGVuc29yYm9hcmQ+Cgo=",
+ "headers": [
+ [
+ "content-type",
+ "text/html; charset=utf-8"
+ ]
+ ],
+ "ok": true,
+ "status": 200,
+ "status_text": ""
},
- "source": [
- "# Which GPU?\n",
- "!nvidia-smi"
- ],
- "execution_count": null,
- "outputs": [
- {
- "output_type": "stream",
- "text": [
- "Sat Jan 16 12:26:13 2021 \n",
- "+-----------------------------------------------------------------------------+\n",
- "| NVIDIA-SMI 460.27.04 Driver Version: 418.67 CUDA Version: 10.1 |\n",
- "|-------------------------------+----------------------+----------------------+\n",
- "| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |\n",
- "| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |\n",
- "| | | MIG M. |\n",
- "|===============================+======================+======================|\n",
- "| 0 Tesla T4 Off | 00000000:00:04.0 Off | 0 |\n",
- "| N/A 52C P8 12W / 70W | 0MiB / 15079MiB | 0% Default |\n",
- "| | | ERR! |\n",
- "+-------------------------------+----------------------+----------------------+\n",
- " \n",
- "+-----------------------------------------------------------------------------+\n",
- "| Processes: |\n",
- "| GPU GI CI PID Type Process name GPU Memory |\n",
- "| ID ID Usage |\n",
- "|=============================================================================|\n",
- "| No running processes found |\n",
- "+-----------------------------------------------------------------------------+\n"
- ],
- "name": "stdout"
- }
- ]
- },
- {
- "cell_type": "code",
- "metadata": {
- "id": "SqftfSzXxBYL"
+ "http://localhost:6006/data/environment": {
+ "data": "eyJkYXRhX2xvY2F0aW9uIjogIi9jb250ZW50L21vZGVscy9yZXNlYXJjaC9zc2RsaXRlX21vYmlsZWRldF9kc3BfMzIweDMyMF9jb2NvXzIwMjBfMDVfMTkvZnAzMi8iLCAid2luZG93X3RpdGxlIjogIiJ9",
+ "headers": [
+ [
+ "content-type",
+ "application/json"
+ ]
+ ],
+ "ok": true,
+ "status": 200,
+ "status_text": ""
},
- "source": [
- "# Install TFOD API (TF 1)\n",
- "%tensorflow_version 1.x\n",
- "import tensorflow as tf \n",
- "print(tf.__version__)\n",
- "\n",
- "!git clone https://github.com/tensorflow/models.git\n",
- "\n",
- "% cd models/research\n",
- "!pip install --upgrade pip\n",
- "# Compile protos.\n",
- "!protoc object_detection/protos/*.proto --python_out=.\n",
- "# Install TensorFlow Object Detection API.\n",
- "!cp object_detection/packages/tf1/setup.py .\n",
- "!python -m pip install --use-feature=2020-resolver ."
- ],
- "execution_count": null,
- "outputs": []
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "id": "kwmIQJmFt-Pg"
+ "http://localhost:6006/data/experiments": {
+ "data": "W10=",
+ "headers": [
+ [
+ "content-type",
+ "application/json"
+ ]
+ ],
+ "ok": true,
+ "status": 200,
+ "status_text": ""
},
- "source": [
- "## Gather data sources and other training related files\n",
- "\n",
- "Now, we retrieve the TFRecords, configuration file, `.pbtxt` file. We also download the pre-trained model weights along with its configuration file. "
- ]
- },
- {
- "cell_type": "code",
- "metadata": {
- "id": "H9CjJe0m28fb"
+ "http://localhost:6006/data/plugin/images/images?run=eval_0&sample=0&tag=Detections_Left_Groundtruth_Right%2F0%2F0": {
+ "data": "W3sid2FsbF90aW1lIjogMTYxMDgwMTUzMy4yNTYyNjQsICJzdGVwIjogMTczMiwgIndpZHRoIjogNTIyOCwgImhlaWdodCI6IDI0NDgsICJxdWVyeSI6ICJydW49ZXZhbF8wJnRhZz1EZXRlY3Rpb25zX0xlZnRfR3JvdW5kdHJ1dGhfUmlnaHQlMkYwJTJGMCZzYW1wbGU9MCZpbmRleD0wIn0sIHsid2FsbF90aW1lIjogMTYxMDgwMjU3MC4wODk1NDc2LCAic3RlcCI6IDI3MDMsICJ3aWR0aCI6IDUyMjgsICJoZWlnaHQiOiAyNDQ4LCAicXVlcnkiOiAicnVuPWV2YWxfMCZ0YWc9RGV0ZWN0aW9uc19MZWZ0X0dyb3VuZHRydXRoX1JpZ2h0JTJGMCUyRjAmc2FtcGxlPTAmaW5kZXg9MSJ9LCB7IndhbGxfdGltZSI6IDE2MTA4MDMxNzIuMjU0NTc2LCAic3RlcCI6IDM0NTksICJ3aWR0aCI6IDUyMjgsICJoZWlnaHQiOiAyNDQ4LCAicXVlcnkiOiAicnVuPWV2YWxfMCZ0YWc9RGV0ZWN0aW9uc19MZWZ0X0dyb3VuZHRydXRoX1JpZ2h0JTJGMCUyRjAmc2FtcGxlPTAmaW5kZXg9MiJ9LCB7IndhbGxfdGltZSI6IDE2MTA4MDM3NjkuNzQ5NDg1NywgInN0ZXAiOiA0MjA1LCAid2lkdGgiOiA1MjI4LCAiaGVpZ2h0IjogMjQ0OCwgInF1ZXJ5IjogInJ1bj1ldmFsXzAmdGFnPURldGVjdGlvbnNfTGVmdF9Hcm91bmR0cnV0aF9SaWdodCUyRjAlMkYwJnNhbXBsZT0wJmluZGV4PTMifSwgeyJ3YWxsX3RpbWUiOiAxNjEwODA2MjI0LjU0NzYyMjcsICJzdGVwIjogNjk5MCwgIndpZHRoIjogNTIyOCwgImhlaWdodCI6IDI0NDgsICJxdWVyeSI6ICJydW49ZXZhbF8wJnRhZz1EZXRlY3Rpb25zX0xlZnRfR3JvdW5kdHJ1dGhfUmlnaHQlMkYwJTJGMCZzYW1wbGU9MCZpbmRleD00In0sIHsid2FsbF90aW1lIjogMTYxMDgwNjgyNS42NDExNTc2LCAic3RlcCI6IDc1ODksICJ3aWR0aCI6IDUyMjgsICJoZWlnaHQiOiAyNDQ4LCAicXVlcnkiOiAicnVuPWV2YWxfMCZ0YWc9RGV0ZWN0aW9uc19MZWZ0X0dyb3VuZHRydXRoX1JpZ2h0JTJGMCUyRjAmc2FtcGxlPTAmaW5kZXg9NSJ9LCB7IndhbGxfdGltZSI6IDE2MTA4MDc0MjguMjIzMjA3MiwgInN0ZXAiOiA4MTc4LCAid2lkdGgiOiA1MjI4LCAiaGVpZ2h0IjogMjQ0OCwgInF1ZXJ5IjogInJ1bj1ldmFsXzAmdGFnPURldGVjdGlvbnNfTGVmdF9Hcm91bmR0cnV0aF9SaWdodCUyRjAlMkYwJnNhbXBsZT0wJmluZGV4PTYifSwgeyJ3YWxsX3RpbWUiOiAxNjEwODA4MDI5LjcwNTE3NDcsICJzdGVwIjogODc2MiwgIndpZHRoIjogNTIyOCwgImhlaWdodCI6IDI0NDgsICJxdWVyeSI6ICJydW49ZXZhbF8wJnRhZz1EZXRlY3Rpb25zX0xlZnRfR3JvdW5kdHJ1dGhfUmlnaHQlMkYwJTJGMCZzYW1wbGU9MCZpbmRleD03In0sIHsid2FsbF90aW1lIjogMTYxMDgwOTIyNS42MzI4MzkyLCAic3RlcCI6IDk5MzgsICJ3aWR0aCI6IDUyMjgsICJoZWlnaHQiOiAyNDQ4LCAicXVlcnkiOiAicnVuPWV2YWxfMCZ0YWc9RGV0ZWN0aW9uc19MZWZ0X0dyb3VuZHRydXRoX1JpZ2h0JTJGMCUyRjAmc2FtcGxlPTAmaW5kZXg9OCJ9LCB7IndhbGxfdGltZSI6IDE2MTA4MDk0ODAuNDEzNzQ5LCAic3RlcCI6IDEwMDAwLCAid2lkdGgiOiA1MjI4LCAiaGVpZ2h0IjogMjQ0OCwgInF1ZXJ5IjogInJ1bj1ldmFsXzAmdGFnPURldGVjdGlvbnNfTGVmdF9Hcm91bmR0cnV0aF9SaWdodCUyRjAlMkYwJnNhbXBsZT0wJmluZGV4PTkifV0=",
+ "headers": [
+ [
+ "content-type",
+ "application/json"
+ ]
+ ],
+ "ok": true,
+ "status": 200,
+ "status_text": ""
},
- "source": [
- "from google.colab import drive\n",
- "drive.mount('/content/drive')"
- ],
- "execution_count": null,
- "outputs": []
- },
- {
- "cell_type": "code",
- "metadata": {
- "colab": {
- "base_uri": "https://localhost:8080/"
- },
- "id": "MkQt5nX73Fn5",
- "outputId": "32e12f32-7f48-4188-8812-1a9dcd2909d4"
+ "http://localhost:6006/data/plugin/images/images?run=eval_0&sample=0&tag=Detections_Left_Groundtruth_Right%2F1%2F0": {
+ "data": "W3sid2FsbF90aW1lIjogMTYxMDgwMTUzMy4yNTYyNjQsICJzdGVwIjogMTczMiwgIndpZHRoIjogNjUyOCwgImhlaWdodCI6IDI0NDgsICJxdWVyeSI6ICJydW49ZXZhbF8wJnRhZz1EZXRlY3Rpb25zX0xlZnRfR3JvdW5kdHJ1dGhfUmlnaHQlMkYxJTJGMCZzYW1wbGU9MCZpbmRleD0wIn0sIHsid2FsbF90aW1lIjogMTYxMDgwMjU3MC4wODk1NDc2LCAic3RlcCI6IDI3MDMsICJ3aWR0aCI6IDY1MjgsICJoZWlnaHQiOiAyNDQ4LCAicXVlcnkiOiAicnVuPWV2YWxfMCZ0YWc9RGV0ZWN0aW9uc19MZWZ0X0dyb3VuZHRydXRoX1JpZ2h0JTJGMSUyRjAmc2FtcGxlPTAmaW5kZXg9MSJ9LCB7IndhbGxfdGltZSI6IDE2MTA4MDMxNzIuMjU0NTc2LCAic3RlcCI6IDM0NTksICJ3aWR0aCI6IDY1MjgsICJoZWlnaHQiOiAyNDQ4LCAicXVlcnkiOiAicnVuPWV2YWxfMCZ0YWc9RGV0ZWN0aW9uc19MZWZ0X0dyb3VuZHRydXRoX1JpZ2h0JTJGMSUyRjAmc2FtcGxlPTAmaW5kZXg9MiJ9LCB7IndhbGxfdGltZSI6IDE2MTA4MDM3NjkuNzQ5NDg1NywgInN0ZXAiOiA0MjA1LCAid2lkdGgiOiA2NTI4LCAiaGVpZ2h0IjogMjQ0OCwgInF1ZXJ5IjogInJ1bj1ldmFsXzAmdGFnPURldGVjdGlvbnNfTGVmdF9Hcm91bmR0cnV0aF9SaWdodCUyRjElMkYwJnNhbXBsZT0wJmluZGV4PTMifSwgeyJ3YWxsX3RpbWUiOiAxNjEwODA2MjI0LjU0NzYyMjcsICJzdGVwIjogNjk5MCwgIndpZHRoIjogNjUyOCwgImhlaWdodCI6IDI0NDgsICJxdWVyeSI6ICJydW49ZXZhbF8wJnRhZz1EZXRlY3Rpb25zX0xlZnRfR3JvdW5kdHJ1dGhfUmlnaHQlMkYxJTJGMCZzYW1wbGU9MCZpbmRleD00In0sIHsid2FsbF90aW1lIjogMTYxMDgwNjgyNS42NDExNTc2LCAic3RlcCI6IDc1ODksICJ3aWR0aCI6IDY1MjgsICJoZWlnaHQiOiAyNDQ4LCAicXVlcnkiOiAicnVuPWV2YWxfMCZ0YWc9RGV0ZWN0aW9uc19MZWZ0X0dyb3VuZHRydXRoX1JpZ2h0JTJGMSUyRjAmc2FtcGxlPTAmaW5kZXg9NSJ9LCB7IndhbGxfdGltZSI6IDE2MTA4MDc0MjguMjIzMjA3MiwgInN0ZXAiOiA4MTc4LCAid2lkdGgiOiA2NTI4LCAiaGVpZ2h0IjogMjQ0OCwgInF1ZXJ5IjogInJ1bj1ldmFsXzAmdGFnPURldGVjdGlvbnNfTGVmdF9Hcm91bmR0cnV0aF9SaWdodCUyRjElMkYwJnNhbXBsZT0wJmluZGV4PTYifSwgeyJ3YWxsX3RpbWUiOiAxNjEwODA4MDI5LjcwNTE3NDcsICJzdGVwIjogODc2MiwgIndpZHRoIjogNjUyOCwgImhlaWdodCI6IDI0NDgsICJxdWVyeSI6ICJydW49ZXZhbF8wJnRhZz1EZXRlY3Rpb25zX0xlZnRfR3JvdW5kdHJ1dGhfUmlnaHQlMkYxJTJGMCZzYW1wbGU9MCZpbmRleD03In0sIHsid2FsbF90aW1lIjogMTYxMDgwOTIyNS42MzI4MzkyLCAic3RlcCI6IDk5MzgsICJ3aWR0aCI6IDY1MjgsICJoZWlnaHQiOiAyNDQ4LCAicXVlcnkiOiAicnVuPWV2YWxfMCZ0YWc9RGV0ZWN0aW9uc19MZWZ0X0dyb3VuZHRydXRoX1JpZ2h0JTJGMSUyRjAmc2FtcGxlPTAmaW5kZXg9OCJ9LCB7IndhbGxfdGltZSI6IDE2MTA4MDk0ODAuNDEzNzQ5LCAic3RlcCI6IDEwMDAwLCAid2lkdGgiOiA2NTI4LCAiaGVpZ2h0IjogMjQ0OCwgInF1ZXJ5IjogInJ1bj1ldmFsXzAmdGFnPURldGVjdGlvbnNfTGVmdF9Hcm91bmR0cnV0aF9SaWdodCUyRjElMkYwJnNhbXBsZT0wJmluZGV4PTkifV0=",
+ "headers": [
+ [
+ "content-type",
+ "application/json"
+ ]
+ ],
+ "ok": true,
+ "status": 200,
+ "status_text": ""
},
- "source": [
- "!cp -r /content/drive/MyDrive/product-detection/*.record .\n",
- "!cp -r /content/drive/MyDrive/product-detection/*.pbtxt .\n",
- "!mv *.record /content/\n",
- "!mv *.pbtxt /content/\n",
- "!ls -lh /content/*.record"
- ],
- "execution_count": null,
- "outputs": [
- {
- "output_type": "stream",
- "text": [
- "-rw------- 1 root root 101M Jan 16 12:26 /content/test.record\n",
- "-rw------- 1 root root 456M Jan 16 12:26 /content/train.record\n"
- ],
- "name": "stdout"
- }
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "id": "Pg6vWn9Eu7Lt"
+ "http://localhost:6006/data/plugin/images/images?run=eval_0&sample=0&tag=Detections_Left_Groundtruth_Right%2F2%2F0": {
+ "data": "W3sid2FsbF90aW1lIjogMTYxMDgwMTUzMy4yNTYyNjQsICJzdGVwIjogMTczMiwgIndpZHRoIjogNjUyOCwgImhlaWdodCI6IDI0NDgsICJxdWVyeSI6ICJydW49ZXZhbF8wJnRhZz1EZXRlY3Rpb25zX0xlZnRfR3JvdW5kdHJ1dGhfUmlnaHQlMkYyJTJGMCZzYW1wbGU9MCZpbmRleD0wIn0sIHsid2FsbF90aW1lIjogMTYxMDgwMjU3MC4wODk1NDc2LCAic3RlcCI6IDI3MDMsICJ3aWR0aCI6IDY1MjgsICJoZWlnaHQiOiAyNDQ4LCAicXVlcnkiOiAicnVuPWV2YWxfMCZ0YWc9RGV0ZWN0aW9uc19MZWZ0X0dyb3VuZHRydXRoX1JpZ2h0JTJGMiUyRjAmc2FtcGxlPTAmaW5kZXg9MSJ9LCB7IndhbGxfdGltZSI6IDE2MTA4MDMxNzIuMjU0NTc2LCAic3RlcCI6IDM0NTksICJ3aWR0aCI6IDY1MjgsICJoZWlnaHQiOiAyNDQ4LCAicXVlcnkiOiAicnVuPWV2YWxfMCZ0YWc9RGV0ZWN0aW9uc19MZWZ0X0dyb3VuZHRydXRoX1JpZ2h0JTJGMiUyRjAmc2FtcGxlPTAmaW5kZXg9MiJ9LCB7IndhbGxfdGltZSI6IDE2MTA4MDM3NjkuNzQ5NDg1NywgInN0ZXAiOiA0MjA1LCAid2lkdGgiOiA2NTI4LCAiaGVpZ2h0IjogMjQ0OCwgInF1ZXJ5IjogInJ1bj1ldmFsXzAmdGFnPURldGVjdGlvbnNfTGVmdF9Hcm91bmR0cnV0aF9SaWdodCUyRjIlMkYwJnNhbXBsZT0wJmluZGV4PTMifSwgeyJ3YWxsX3RpbWUiOiAxNjEwODA2MjI0LjU0NzYyMjcsICJzdGVwIjogNjk5MCwgIndpZHRoIjogNjUyOCwgImhlaWdodCI6IDI0NDgsICJxdWVyeSI6ICJydW49ZXZhbF8wJnRhZz1EZXRlY3Rpb25zX0xlZnRfR3JvdW5kdHJ1dGhfUmlnaHQlMkYyJTJGMCZzYW1wbGU9MCZpbmRleD00In0sIHsid2FsbF90aW1lIjogMTYxMDgwNjgyNS42NDExNTc2LCAic3RlcCI6IDc1ODksICJ3aWR0aCI6IDY1MjgsICJoZWlnaHQiOiAyNDQ4LCAicXVlcnkiOiAicnVuPWV2YWxfMCZ0YWc9RGV0ZWN0aW9uc19MZWZ0X0dyb3VuZHRydXRoX1JpZ2h0JTJGMiUyRjAmc2FtcGxlPTAmaW5kZXg9NSJ9LCB7IndhbGxfdGltZSI6IDE2MTA4MDc0MjguMjIzMjA3MiwgInN0ZXAiOiA4MTc4LCAid2lkdGgiOiA2NTI4LCAiaGVpZ2h0IjogMjQ0OCwgInF1ZXJ5IjogInJ1bj1ldmFsXzAmdGFnPURldGVjdGlvbnNfTGVmdF9Hcm91bmR0cnV0aF9SaWdodCUyRjIlMkYwJnNhbXBsZT0wJmluZGV4PTYifSwgeyJ3YWxsX3RpbWUiOiAxNjEwODA4MDI5LjcwNTE3NDcsICJzdGVwIjogODc2MiwgIndpZHRoIjogNjUyOCwgImhlaWdodCI6IDI0NDgsICJxdWVyeSI6ICJydW49ZXZhbF8wJnRhZz1EZXRlY3Rpb25zX0xlZnRfR3JvdW5kdHJ1dGhfUmlnaHQlMkYyJTJGMCZzYW1wbGU9MCZpbmRleD03In0sIHsid2FsbF90aW1lIjogMTYxMDgwOTIyNS42MzI4MzkyLCAic3RlcCI6IDk5MzgsICJ3aWR0aCI6IDY1MjgsICJoZWlnaHQiOiAyNDQ4LCAicXVlcnkiOiAicnVuPWV2YWxfMCZ0YWc9RGV0ZWN0aW9uc19MZWZ0X0dyb3VuZHRydXRoX1JpZ2h0JTJGMiUyRjAmc2FtcGxlPTAmaW5kZXg9OCJ9LCB7IndhbGxfdGltZSI6IDE2MTA4MDk0ODAuNDEzNzQ5LCAic3RlcCI6IDEwMDAwLCAid2lkdGgiOiA2NTI4LCAiaGVpZ2h0IjogMjQ0OCwgInF1ZXJ5IjogInJ1bj1ldmFsXzAmdGFnPURldGVjdGlvbnNfTGVmdF9Hcm91bmR0cnV0aF9SaWdodCUyRjIlMkYwJnNhbXBsZT0wJmluZGV4PTkifV0=",
+ "headers": [
+ [
+ "content-type",
+ "application/json"
+ ]
+ ],
+ "ok": true,
+ "status": 200,
+ "status_text": ""
},
- "source": [
- "TFOD API usually expects a configuration file where a developer specifies all the hyperparameters along with the data paths. I created the following configuration files referring to the guidelines [here](https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/configuring_jobs.md). "
- ]
- },
- {
- "cell_type": "code",
- "metadata": {
- "id": "_IZnVJH9Kvxb"
+ "http://localhost:6006/data/plugin/images/images?run=eval_0&sample=0&tag=Detections_Left_Groundtruth_Right%2F3%2F0": {
+ "data": "W3sid2FsbF90aW1lIjogMTYxMDgwMTUzMy4yNTYyNjQsICJzdGVwIjogMTczMiwgIndpZHRoIjogNjUyOCwgImhlaWdodCI6IDE4NTEsICJxdWVyeSI6ICJydW49ZXZhbF8wJnRhZz1EZXRlY3Rpb25zX0xlZnRfR3JvdW5kdHJ1dGhfUmlnaHQlMkYzJTJGMCZzYW1wbGU9MCZpbmRleD0wIn0sIHsid2FsbF90aW1lIjogMTYxMDgwMjU3MC4wODk1NDc2LCAic3RlcCI6IDI3MDMsICJ3aWR0aCI6IDY1MjgsICJoZWlnaHQiOiAxODUxLCAicXVlcnkiOiAicnVuPWV2YWxfMCZ0YWc9RGV0ZWN0aW9uc19MZWZ0X0dyb3VuZHRydXRoX1JpZ2h0JTJGMyUyRjAmc2FtcGxlPTAmaW5kZXg9MSJ9LCB7IndhbGxfdGltZSI6IDE2MTA4MDMxNzIuMjU0NTc2LCAic3RlcCI6IDM0NTksICJ3aWR0aCI6IDY1MjgsICJoZWlnaHQiOiAxODUxLCAicXVlcnkiOiAicnVuPWV2YWxfMCZ0YWc9RGV0ZWN0aW9uc19MZWZ0X0dyb3VuZHRydXRoX1JpZ2h0JTJGMyUyRjAmc2FtcGxlPTAmaW5kZXg9MiJ9LCB7IndhbGxfdGltZSI6IDE2MTA4MDM3NjkuNzQ5NDg1NywgInN0ZXAiOiA0MjA1LCAid2lkdGgiOiA2NTI4LCAiaGVpZ2h0IjogMTg1MSwgInF1ZXJ5IjogInJ1bj1ldmFsXzAmdGFnPURldGVjdGlvbnNfTGVmdF9Hcm91bmR0cnV0aF9SaWdodCUyRjMlMkYwJnNhbXBsZT0wJmluZGV4PTMifSwgeyJ3YWxsX3RpbWUiOiAxNjEwODA2MjI0LjU0NzYyMjcsICJzdGVwIjogNjk5MCwgIndpZHRoIjogNjUyOCwgImhlaWdodCI6IDE4NTEsICJxdWVyeSI6ICJydW49ZXZhbF8wJnRhZz1EZXRlY3Rpb25zX0xlZnRfR3JvdW5kdHJ1dGhfUmlnaHQlMkYzJTJGMCZzYW1wbGU9MCZpbmRleD00In0sIHsid2FsbF90aW1lIjogMTYxMDgwNjgyNS42NDExNTc2LCAic3RlcCI6IDc1ODksICJ3aWR0aCI6IDY1MjgsICJoZWlnaHQiOiAxODUxLCAicXVlcnkiOiAicnVuPWV2YWxfMCZ0YWc9RGV0ZWN0aW9uc19MZWZ0X0dyb3VuZHRydXRoX1JpZ2h0JTJGMyUyRjAmc2FtcGxlPTAmaW5kZXg9NSJ9LCB7IndhbGxfdGltZSI6IDE2MTA4MDc0MjguMjIzMjA3MiwgInN0ZXAiOiA4MTc4LCAid2lkdGgiOiA2NTI4LCAiaGVpZ2h0IjogMTg1MSwgInF1ZXJ5IjogInJ1bj1ldmFsXzAmdGFnPURldGVjdGlvbnNfTGVmdF9Hcm91bmR0cnV0aF9SaWdodCUyRjMlMkYwJnNhbXBsZT0wJmluZGV4PTYifSwgeyJ3YWxsX3RpbWUiOiAxNjEwODA4MDI5LjcwNTE3NDcsICJzdGVwIjogODc2MiwgIndpZHRoIjogNjUyOCwgImhlaWdodCI6IDE4NTEsICJxdWVyeSI6ICJydW49ZXZhbF8wJnRhZz1EZXRlY3Rpb25zX0xlZnRfR3JvdW5kdHJ1dGhfUmlnaHQlMkYzJTJGMCZzYW1wbGU9MCZpbmRleD03In0sIHsid2FsbF90aW1lIjogMTYxMDgwOTIyNS42MzI4MzkyLCAic3RlcCI6IDk5MzgsICJ3aWR0aCI6IDY1MjgsICJoZWlnaHQiOiAxODUxLCAicXVlcnkiOiAicnVuPWV2YWxfMCZ0YWc9RGV0ZWN0aW9uc19MZWZ0X0dyb3VuZHRydXRoX1JpZ2h0JTJGMyUyRjAmc2FtcGxlPTAmaW5kZXg9OCJ9LCB7IndhbGxfdGltZSI6IDE2MTA4MDk0ODAuNDEzNzQ5LCAic3RlcCI6IDEwMDAwLCAid2lkdGgiOiA2NTI4LCAiaGVpZ2h0IjogMTg1MSwgInF1ZXJ5IjogInJ1bj1ldmFsXzAmdGFnPURldGVjdGlvbnNfTGVmdF9Hcm91bmR0cnV0aF9SaWdodCUyRjMlMkYwJnNhbXBsZT0wJmluZGV4PTkifV0=",
+ "headers": [
+ [
+ "content-type",
+ "application/json"
+ ]
+ ],
+ "ok": true,
+ "status": 200,
+ "status_text": ""
},
- "source": [
- "!wget -q https://gist.githubusercontent.com/sayakpaul/f179fb8150c064f27c8a84a3a0cdefa0/raw/589b1967a5c7a800e22eea45c01138900736cc2d/ssdlite_mobiledet_dsp_320x320_products_sync_4x4.config"
- ],
- "execution_count": null,
- "outputs": []
- },
- {
- "cell_type": "code",
- "metadata": {
- "colab": {
- "base_uri": "https://localhost:8080/"
- },
- "id": "nMoQ_O5OK2Wi",
- "outputId": "3c75f6a1-e368-4e0e-8455-1728055443a7"
+ "http://localhost:6006/data/plugin/images/images?run=eval_0&sample=0&tag=Detections_Left_Groundtruth_Right%2F4%2F0": {
+ "data": "W3sid2FsbF90aW1lIjogMTYxMDgwMTUzMy4yNTYyNjQsICJzdGVwIjogMTczMiwgIndpZHRoIjogNjUyOCwgImhlaWdodCI6IDIyMDMsICJxdWVyeSI6ICJydW49ZXZhbF8wJnRhZz1EZXRlY3Rpb25zX0xlZnRfR3JvdW5kdHJ1dGhfUmlnaHQlMkY0JTJGMCZzYW1wbGU9MCZpbmRleD0wIn0sIHsid2FsbF90aW1lIjogMTYxMDgwMjU3MC4wODk1NDc2LCAic3RlcCI6IDI3MDMsICJ3aWR0aCI6IDY1MjgsICJoZWlnaHQiOiAyMjAzLCAicXVlcnkiOiAicnVuPWV2YWxfMCZ0YWc9RGV0ZWN0aW9uc19MZWZ0X0dyb3VuZHRydXRoX1JpZ2h0JTJGNCUyRjAmc2FtcGxlPTAmaW5kZXg9MSJ9LCB7IndhbGxfdGltZSI6IDE2MTA4MDMxNzIuMjU0NTc2LCAic3RlcCI6IDM0NTksICJ3aWR0aCI6IDY1MjgsICJoZWlnaHQiOiAyMjAzLCAicXVlcnkiOiAicnVuPWV2YWxfMCZ0YWc9RGV0ZWN0aW9uc19MZWZ0X0dyb3VuZHRydXRoX1JpZ2h0JTJGNCUyRjAmc2FtcGxlPTAmaW5kZXg9MiJ9LCB7IndhbGxfdGltZSI6IDE2MTA4MDM3NjkuNzQ5NDg1NywgInN0ZXAiOiA0MjA1LCAid2lkdGgiOiA2NTI4LCAiaGVpZ2h0IjogMjIwMywgInF1ZXJ5IjogInJ1bj1ldmFsXzAmdGFnPURldGVjdGlvbnNfTGVmdF9Hcm91bmR0cnV0aF9SaWdodCUyRjQlMkYwJnNhbXBsZT0wJmluZGV4PTMifSwgeyJ3YWxsX3RpbWUiOiAxNjEwODA2MjI0LjU0NzYyMjcsICJzdGVwIjogNjk5MCwgIndpZHRoIjogNjUyOCwgImhlaWdodCI6IDIyMDMsICJxdWVyeSI6ICJydW49ZXZhbF8wJnRhZz1EZXRlY3Rpb25zX0xlZnRfR3JvdW5kdHJ1dGhfUmlnaHQlMkY0JTJGMCZzYW1wbGU9MCZpbmRleD00In0sIHsid2FsbF90aW1lIjogMTYxMDgwNjgyNS42NDExNTc2LCAic3RlcCI6IDc1ODksICJ3aWR0aCI6IDY1MjgsICJoZWlnaHQiOiAyMjAzLCAicXVlcnkiOiAicnVuPWV2YWxfMCZ0YWc9RGV0ZWN0aW9uc19MZWZ0X0dyb3VuZHRydXRoX1JpZ2h0JTJGNCUyRjAmc2FtcGxlPTAmaW5kZXg9NSJ9LCB7IndhbGxfdGltZSI6IDE2MTA4MDc0MjguMjIzMjA3MiwgInN0ZXAiOiA4MTc4LCAid2lkdGgiOiA2NTI4LCAiaGVpZ2h0IjogMjIwMywgInF1ZXJ5IjogInJ1bj1ldmFsXzAmdGFnPURldGVjdGlvbnNfTGVmdF9Hcm91bmR0cnV0aF9SaWdodCUyRjQlMkYwJnNhbXBsZT0wJmluZGV4PTYifSwgeyJ3YWxsX3RpbWUiOiAxNjEwODA4MDI5LjcwNTE3NDcsICJzdGVwIjogODc2MiwgIndpZHRoIjogNjUyOCwgImhlaWdodCI6IDIyMDMsICJxdWVyeSI6ICJydW49ZXZhbF8wJnRhZz1EZXRlY3Rpb25zX0xlZnRfR3JvdW5kdHJ1dGhfUmlnaHQlMkY0JTJGMCZzYW1wbGU9MCZpbmRleD03In0sIHsid2FsbF90aW1lIjogMTYxMDgwOTIyNS42MzI4MzkyLCAic3RlcCI6IDk5MzgsICJ3aWR0aCI6IDY1MjgsICJoZWlnaHQiOiAyMjAzLCAicXVlcnkiOiAicnVuPWV2YWxfMCZ0YWc9RGV0ZWN0aW9uc19MZWZ0X0dyb3VuZHRydXRoX1JpZ2h0JTJGNCUyRjAmc2FtcGxlPTAmaW5kZXg9OCJ9LCB7IndhbGxfdGltZSI6IDE2MTA4MDk0ODAuNDEzNzQ5LCAic3RlcCI6IDEwMDAwLCAid2lkdGgiOiA2NTI4LCAiaGVpZ2h0IjogMjIwMywgInF1ZXJ5IjogInJ1bj1ldmFsXzAmdGFnPURldGVjdGlvbnNfTGVmdF9Hcm91bmR0cnV0aF9SaWdodCUyRjQlMkYwJnNhbXBsZT0wJmluZGV4PTkifV0=",
+ "headers": [
+ [
+ "content-type",
+ "application/json"
+ ]
+ ],
+ "ok": true,
+ "status": 200,
+ "status_text": ""
},
- "source": [
- "#@title Download model checkpoint and untar it\n",
- "!wget -q http://download.tensorflow.org/models/object_detection/ssdlite_mobiledet_dsp_320x320_coco_2020_05_19.tar.gz\n",
- "!tar -xvf ssdlite_mobiledet_dsp_320x320_coco_2020_05_19.tar.gz"
- ],
- "execution_count": null,
- "outputs": [
- {
- "output_type": "stream",
- "text": [
- "ssdlite_mobiledet_dsp_320x320_coco_2020_05_19/\n",
- "ssdlite_mobiledet_dsp_320x320_coco_2020_05_19/fp32/\n",
- "ssdlite_mobiledet_dsp_320x320_coco_2020_05_19/fp32/model.ckpt-400000.data-00000-of-00001\n",
- "ssdlite_mobiledet_dsp_320x320_coco_2020_05_19/fp32/model.ckpt-400000.index\n",
- "ssdlite_mobiledet_dsp_320x320_coco_2020_05_19/fp32/model.ckpt-400000.meta\n",
- "ssdlite_mobiledet_dsp_320x320_coco_2020_05_19/fp32/tflite_graph.pbtxt\n",
- "ssdlite_mobiledet_dsp_320x320_coco_2020_05_19/fp32/tflite_graph.pb\n",
- "ssdlite_mobiledet_dsp_320x320_coco_2020_05_19/fp32/pipeline.config\n",
- "ssdlite_mobiledet_dsp_320x320_coco_2020_05_19/fp32/model.tflite\n",
- "ssdlite_mobiledet_dsp_320x320_coco_2020_05_19/uint8/\n",
- "ssdlite_mobiledet_dsp_320x320_coco_2020_05_19/uint8/model.ckpt-400000.data-00000-of-00001\n",
- "ssdlite_mobiledet_dsp_320x320_coco_2020_05_19/uint8/model.ckpt-400000.index\n",
- "ssdlite_mobiledet_dsp_320x320_coco_2020_05_19/uint8/model.ckpt-400000.meta\n",
- "ssdlite_mobiledet_dsp_320x320_coco_2020_05_19/uint8/tflite_graph.pbtxt\n",
- "ssdlite_mobiledet_dsp_320x320_coco_2020_05_19/uint8/tflite_graph.pb\n",
- "ssdlite_mobiledet_dsp_320x320_coco_2020_05_19/uint8/pipeline.config\n",
- "ssdlite_mobiledet_dsp_320x320_coco_2020_05_19/uint8/model.tflite\n"
- ],
- "name": "stdout"
- }
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "id": "ryneXspSvqgx"
+ "http://localhost:6006/data/plugin/images/images?run=eval_0&sample=0&tag=Detections_Left_Groundtruth_Right%2F5%2F0": {
+ "data": "W3sid2FsbF90aW1lIjogMTYxMDgwMTUzMy4yNTYyNjQsICJzdGVwIjogMTczMiwgIndpZHRoIjogNjUyOCwgImhlaWdodCI6IDI0NDgsICJxdWVyeSI6ICJydW49ZXZhbF8wJnRhZz1EZXRlY3Rpb25zX0xlZnRfR3JvdW5kdHJ1dGhfUmlnaHQlMkY1JTJGMCZzYW1wbGU9MCZpbmRleD0wIn0sIHsid2FsbF90aW1lIjogMTYxMDgwMjU3MC4wODk1NDc2LCAic3RlcCI6IDI3MDMsICJ3aWR0aCI6IDY1MjgsICJoZWlnaHQiOiAyNDQ4LCAicXVlcnkiOiAicnVuPWV2YWxfMCZ0YWc9RGV0ZWN0aW9uc19MZWZ0X0dyb3VuZHRydXRoX1JpZ2h0JTJGNSUyRjAmc2FtcGxlPTAmaW5kZXg9MSJ9LCB7IndhbGxfdGltZSI6IDE2MTA4MDMxNzIuMjU0NTc2LCAic3RlcCI6IDM0NTksICJ3aWR0aCI6IDY1MjgsICJoZWlnaHQiOiAyNDQ4LCAicXVlcnkiOiAicnVuPWV2YWxfMCZ0YWc9RGV0ZWN0aW9uc19MZWZ0X0dyb3VuZHRydXRoX1JpZ2h0JTJGNSUyRjAmc2FtcGxlPTAmaW5kZXg9MiJ9LCB7IndhbGxfdGltZSI6IDE2MTA4MDM3NjkuNzQ5NDg1NywgInN0ZXAiOiA0MjA1LCAid2lkdGgiOiA2NTI4LCAiaGVpZ2h0IjogMjQ0OCwgInF1ZXJ5IjogInJ1bj1ldmFsXzAmdGFnPURldGVjdGlvbnNfTGVmdF9Hcm91bmR0cnV0aF9SaWdodCUyRjUlMkYwJnNhbXBsZT0wJmluZGV4PTMifSwgeyJ3YWxsX3RpbWUiOiAxNjEwODA2MjI0LjU0NzYyMjcsICJzdGVwIjogNjk5MCwgIndpZHRoIjogNjUyOCwgImhlaWdodCI6IDI0NDgsICJxdWVyeSI6ICJydW49ZXZhbF8wJnRhZz1EZXRlY3Rpb25zX0xlZnRfR3JvdW5kdHJ1dGhfUmlnaHQlMkY1JTJGMCZzYW1wbGU9MCZpbmRleD00In0sIHsid2FsbF90aW1lIjogMTYxMDgwNjgyNS42NDExNTc2LCAic3RlcCI6IDc1ODksICJ3aWR0aCI6IDY1MjgsICJoZWlnaHQiOiAyNDQ4LCAicXVlcnkiOiAicnVuPWV2YWxfMCZ0YWc9RGV0ZWN0aW9uc19MZWZ0X0dyb3VuZHRydXRoX1JpZ2h0JTJGNSUyRjAmc2FtcGxlPTAmaW5kZXg9NSJ9LCB7IndhbGxfdGltZSI6IDE2MTA4MDc0MjguMjIzMjA3MiwgInN0ZXAiOiA4MTc4LCAid2lkdGgiOiA2NTI4LCAiaGVpZ2h0IjogMjQ0OCwgInF1ZXJ5IjogInJ1bj1ldmFsXzAmdGFnPURldGVjdGlvbnNfTGVmdF9Hcm91bmR0cnV0aF9SaWdodCUyRjUlMkYwJnNhbXBsZT0wJmluZGV4PTYifSwgeyJ3YWxsX3RpbWUiOiAxNjEwODA4MDI5LjcwNTE3NDcsICJzdGVwIjogODc2MiwgIndpZHRoIjogNjUyOCwgImhlaWdodCI6IDI0NDgsICJxdWVyeSI6ICJydW49ZXZhbF8wJnRhZz1EZXRlY3Rpb25zX0xlZnRfR3JvdW5kdHJ1dGhfUmlnaHQlMkY1JTJGMCZzYW1wbGU9MCZpbmRleD03In0sIHsid2FsbF90aW1lIjogMTYxMDgwOTIyNS42MzI4MzkyLCAic3RlcCI6IDk5MzgsICJ3aWR0aCI6IDY1MjgsICJoZWlnaHQiOiAyNDQ4LCAicXVlcnkiOiAicnVuPWV2YWxfMCZ0YWc9RGV0ZWN0aW9uc19MZWZ0X0dyb3VuZHRydXRoX1JpZ2h0JTJGNSUyRjAmc2FtcGxlPTAmaW5kZXg9OCJ9LCB7IndhbGxfdGltZSI6IDE2MTA4MDk0ODAuNDEzNzQ5LCAic3RlcCI6IDEwMDAwLCAid2lkdGgiOiA2NTI4LCAiaGVpZ2h0IjogMjQ0OCwgInF1ZXJ5IjogInJ1bj1ldmFsXzAmdGFnPURldGVjdGlvbnNfTGVmdF9Hcm91bmR0cnV0aF9SaWdodCUyRjUlMkYwJnNhbXBsZT0wJmluZGV4PTkifV0=",
+ "headers": [
+ [
+ "content-type",
+ "application/json"
+ ]
+ ],
+ "ok": true,
+ "status": 200,
+ "status_text": ""
},
- "source": [
- "## Model training"
- ]
- },
- {
- "cell_type": "code",
- "metadata": {
- "id": "LhvgmOJMLEvq",
- "outputId": "3795039d-10f6-4fd6-a930-9f2220fcac63",
- "colab": {
- "base_uri": "https://localhost:8080/"
- }
+ "http://localhost:6006/data/plugin/images/images?run=eval_0&sample=0&tag=Detections_Left_Groundtruth_Right%2F6%2F0": {
+ "data": "W3sid2FsbF90aW1lIjogMTYxMDgwMTUzMy4yNTYyNjQsICJzdGVwIjogMTczMiwgIndpZHRoIjogNTgwMCwgImhlaWdodCI6IDE5NzIsICJxdWVyeSI6ICJydW49ZXZhbF8wJnRhZz1EZXRlY3Rpb25zX0xlZnRfR3JvdW5kdHJ1dGhfUmlnaHQlMkY2JTJGMCZzYW1wbGU9MCZpbmRleD0wIn0sIHsid2FsbF90aW1lIjogMTYxMDgwMjU3MC4wODk1NDc2LCAic3RlcCI6IDI3MDMsICJ3aWR0aCI6IDU4MDAsICJoZWlnaHQiOiAxOTcyLCAicXVlcnkiOiAicnVuPWV2YWxfMCZ0YWc9RGV0ZWN0aW9uc19MZWZ0X0dyb3VuZHRydXRoX1JpZ2h0JTJGNiUyRjAmc2FtcGxlPTAmaW5kZXg9MSJ9LCB7IndhbGxfdGltZSI6IDE2MTA4MDMxNzIuMjU0NTc2LCAic3RlcCI6IDM0NTksICJ3aWR0aCI6IDU4MDAsICJoZWlnaHQiOiAxOTcyLCAicXVlcnkiOiAicnVuPWV2YWxfMCZ0YWc9RGV0ZWN0aW9uc19MZWZ0X0dyb3VuZHRydXRoX1JpZ2h0JTJGNiUyRjAmc2FtcGxlPTAmaW5kZXg9MiJ9LCB7IndhbGxfdGltZSI6IDE2MTA4MDM3NjkuNzQ5NDg1NywgInN0ZXAiOiA0MjA1LCAid2lkdGgiOiA1ODAwLCAiaGVpZ2h0IjogMTk3MiwgInF1ZXJ5IjogInJ1bj1ldmFsXzAmdGFnPURldGVjdGlvbnNfTGVmdF9Hcm91bmR0cnV0aF9SaWdodCUyRjYlMkYwJnNhbXBsZT0wJmluZGV4PTMifSwgeyJ3YWxsX3RpbWUiOiAxNjEwODA2MjI0LjU0NzYyMjcsICJzdGVwIjogNjk5MCwgIndpZHRoIjogNTgwMCwgImhlaWdodCI6IDE5NzIsICJxdWVyeSI6ICJydW49ZXZhbF8wJnRhZz1EZXRlY3Rpb25zX0xlZnRfR3JvdW5kdHJ1dGhfUmlnaHQlMkY2JTJGMCZzYW1wbGU9MCZpbmRleD00In0sIHsid2FsbF90aW1lIjogMTYxMDgwNjgyNS42NDExNTc2LCAic3RlcCI6IDc1ODksICJ3aWR0aCI6IDU4MDAsICJoZWlnaHQiOiAxOTcyLCAicXVlcnkiOiAicnVuPWV2YWxfMCZ0YWc9RGV0ZWN0aW9uc19MZWZ0X0dyb3VuZHRydXRoX1JpZ2h0JTJGNiUyRjAmc2FtcGxlPTAmaW5kZXg9NSJ9LCB7IndhbGxfdGltZSI6IDE2MTA4MDc0MjguMjIzMjA3MiwgInN0ZXAiOiA4MTc4LCAid2lkdGgiOiA1ODAwLCAiaGVpZ2h0IjogMTk3MiwgInF1ZXJ5IjogInJ1bj1ldmFsXzAmdGFnPURldGVjdGlvbnNfTGVmdF9Hcm91bmR0cnV0aF9SaWdodCUyRjYlMkYwJnNhbXBsZT0wJmluZGV4PTYifSwgeyJ3YWxsX3RpbWUiOiAxNjEwODA4MDI5LjcwNTE3NDcsICJzdGVwIjogODc2MiwgIndpZHRoIjogNTgwMCwgImhlaWdodCI6IDE5NzIsICJxdWVyeSI6ICJydW49ZXZhbF8wJnRhZz1EZXRlY3Rpb25zX0xlZnRfR3JvdW5kdHJ1dGhfUmlnaHQlMkY2JTJGMCZzYW1wbGU9MCZpbmRleD03In0sIHsid2FsbF90aW1lIjogMTYxMDgwOTIyNS42MzI4MzkyLCAic3RlcCI6IDk5MzgsICJ3aWR0aCI6IDU4MDAsICJoZWlnaHQiOiAxOTcyLCAicXVlcnkiOiAicnVuPWV2YWxfMCZ0YWc9RGV0ZWN0aW9uc19MZWZ0X0dyb3VuZHRydXRoX1JpZ2h0JTJGNiUyRjAmc2FtcGxlPTAmaW5kZXg9OCJ9LCB7IndhbGxfdGltZSI6IDE2MTA4MDk0ODAuNDEzNzQ5LCAic3RlcCI6IDEwMDAwLCAid2lkdGgiOiA1ODAwLCAiaGVpZ2h0IjogMTk3MiwgInF1ZXJ5IjogInJ1bj1ldmFsXzAmdGFnPURldGVjdGlvbnNfTGVmdF9Hcm91bmR0cnV0aF9SaWdodCUyRjYlMkYwJnNhbXBsZT0wJmluZGV4PTkifV0=",
+ "headers": [
+ [
+ "content-type",
+ "application/json"
+ ]
+ ],
+ "ok": true,
+ "status": 200,
+ "status_text": ""
},
- "source": [
- "#@markdown **Note**: This script interleaves both training and evaluation. Before starting training verify the paths carefully. If you run into out-of-memory problems, then simply reduce the batch size inside the configuration file and start over. \n",
- "PIPELINE_CONFIG_PATH=\"/content/models/research/ssdlite_mobiledet_dsp_320x320_products_sync_4x4.config\"\n",
- "MODEL_DIR=\"/content/models/research/ssdlite_mobiledet_dsp_320x320_coco_2020_05_19/fp32/\"\n",
- "\n",
- "!python object_detection/model_main.py \\\n",
- " --pipeline_config_path={PIPELINE_CONFIG_PATH} \\\n",
- " --model_dir={MODEL_DIR} \\\n",
- " --alsologtostderr"
- ],
- "execution_count": null,
- "outputs": [
- {
- "output_type": "stream",
- "text": [
- "WARNING:tensorflow:Forced number of epochs for all eval validations to be 1.\n",
- "W0117 13:42:19.917320 140040318117760 model_lib.py:793] Forced number of epochs for all eval validations to be 1.\n",
- "INFO:tensorflow:Maybe overwriting train_steps: None\n",
- "I0117 13:42:19.917536 140040318117760 config_util.py:552] Maybe overwriting train_steps: None\n",
- "INFO:tensorflow:Maybe overwriting use_bfloat16: False\n",
- "I0117 13:42:19.917621 140040318117760 config_util.py:552] Maybe overwriting use_bfloat16: False\n",
- "INFO:tensorflow:Maybe overwriting sample_1_of_n_eval_examples: 1\n",
- "I0117 13:42:19.917702 140040318117760 config_util.py:552] Maybe overwriting sample_1_of_n_eval_examples: 1\n",
- "INFO:tensorflow:Maybe overwriting eval_num_epochs: 1\n",
- "I0117 13:42:19.917783 140040318117760 config_util.py:552] Maybe overwriting eval_num_epochs: 1\n",
- "WARNING:tensorflow:Expected number of evaluation epochs is 1, but instead encountered `eval_on_train_input_config.num_epochs` = 0. Overwriting `num_epochs` to 1.\n",
- "W0117 13:42:19.917882 140040318117760 model_lib.py:809] Expected number of evaluation epochs is 1, but instead encountered `eval_on_train_input_config.num_epochs` = 0. Overwriting `num_epochs` to 1.\n",
- "INFO:tensorflow:create_estimator_and_inputs: use_tpu False, export_to_tpu None\n",
- "I0117 13:42:19.917983 140040318117760 model_lib.py:846] create_estimator_and_inputs: use_tpu False, export_to_tpu None\n",
- "INFO:tensorflow:Using config: {'_model_dir': '/content/models/research/ssdlite_mobiledet_dsp_320x320_coco_2020_05_19/fp32/', '_tf_random_seed': None, '_save_summary_steps': 100, '_save_checkpoints_steps': None, '_save_checkpoints_secs': 600, '_session_config': allow_soft_placement: true\n",
- "graph_options {\n",
- " rewrite_options {\n",
- " meta_optimizer_iterations: ONE\n",
- " }\n",
- "}\n",
- ", '_keep_checkpoint_max': 5, '_keep_checkpoint_every_n_hours': 10000, '_log_step_count_steps': 100, '_train_distribute': None, '_device_fn': None, '_protocol': None, '_eval_distribute': None, '_experimental_distribute': None, '_experimental_max_worker_delay_secs': None, '_session_creation_timeout_secs': 7200, '_service': None, '_cluster_spec': , '_task_type': 'worker', '_task_id': 0, '_global_id_in_cluster': 0, '_master': '', '_evaluation_master': '', '_is_chief': True, '_num_ps_replicas': 0, '_num_worker_replicas': 1}\n",
- "I0117 13:42:19.918414 140040318117760 estimator.py:212] Using config: {'_model_dir': '/content/models/research/ssdlite_mobiledet_dsp_320x320_coco_2020_05_19/fp32/', '_tf_random_seed': None, '_save_summary_steps': 100, '_save_checkpoints_steps': None, '_save_checkpoints_secs': 600, '_session_config': allow_soft_placement: true\n",
- "graph_options {\n",
- " rewrite_options {\n",
- " meta_optimizer_iterations: ONE\n",
- " }\n",
- "}\n",
- ", '_keep_checkpoint_max': 5, '_keep_checkpoint_every_n_hours': 10000, '_log_step_count_steps': 100, '_train_distribute': None, '_device_fn': None, '_protocol': None, '_eval_distribute': None, '_experimental_distribute': None, '_experimental_max_worker_delay_secs': None, '_session_creation_timeout_secs': 7200, '_service': None, '_cluster_spec': , '_task_type': 'worker', '_task_id': 0, '_global_id_in_cluster': 0, '_master': '', '_evaluation_master': '', '_is_chief': True, '_num_ps_replicas': 0, '_num_worker_replicas': 1}\n",
- "WARNING:tensorflow:Estimator's model_fn (.model_fn at 0x7f5d2e11d378>) includes params argument, but params are not passed to Estimator.\n",
- "W0117 13:42:19.918639 140040318117760 model_fn.py:630] Estimator's model_fn (.model_fn at 0x7f5d2e11d378>) includes params argument, but params are not passed to Estimator.\n",
- "INFO:tensorflow:Not using Distribute Coordinator.\n",
- "I0117 13:42:19.919474 140040318117760 estimator_training.py:186] Not using Distribute Coordinator.\n",
- "INFO:tensorflow:Running training and evaluation locally (non-distributed).\n",
- "I0117 13:42:19.919660 140040318117760 training.py:612] Running training and evaluation locally (non-distributed).\n",
- "INFO:tensorflow:Start train and evaluate loop. The evaluate will happen after every checkpoint. Checkpoint frequency is determined based on RunConfig arguments: save_checkpoints_steps None or save_checkpoints_secs 600.\n",
- "I0117 13:42:19.919882 140040318117760 training.py:700] Start train and evaluate loop. The evaluate will happen after every checkpoint. Checkpoint frequency is determined based on RunConfig arguments: save_checkpoints_steps None or save_checkpoints_secs 600.\n",
- "WARNING:tensorflow:From /tensorflow-1.15.2/python3.6/tensorflow_core/python/training/training_util.py:236: Variable.initialized_value (from tensorflow.python.ops.variables) is deprecated and will be removed in a future version.\n",
- "Instructions for updating:\n",
- "Use Variable.read_value. Variables in 2.X are initialized automatically both in eager and graph (inside tf.defun) contexts.\n",
- "W0117 13:42:19.924680 140040318117760 deprecation.py:323] From /tensorflow-1.15.2/python3.6/tensorflow_core/python/training/training_util.py:236: Variable.initialized_value (from tensorflow.python.ops.variables) is deprecated and will be removed in a future version.\n",
- "Instructions for updating:\n",
- "Use Variable.read_value. Variables in 2.X are initialized automatically both in eager and graph (inside tf.defun) contexts.\n",
- "INFO:tensorflow:Reading unweighted datasets: ['/content/train.record']\n",
- "I0117 13:42:19.954178 140040318117760 dataset_builder.py:148] Reading unweighted datasets: ['/content/train.record']\n",
- "INFO:tensorflow:Reading record datasets for input file: ['/content/train.record']\n",
- "I0117 13:42:19.955287 140040318117760 dataset_builder.py:77] Reading record datasets for input file: ['/content/train.record']\n",
- "INFO:tensorflow:Number of filenames to read: 1\n",
- "I0117 13:42:19.955421 140040318117760 dataset_builder.py:78] Number of filenames to read: 1\n",
- "WARNING:tensorflow:num_readers has been reduced to 1 to match input file shards.\n",
- "W0117 13:42:19.955508 140040318117760 dataset_builder.py:86] num_readers has been reduced to 1 to match input file shards.\n",
- "WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/object_detection/builders/dataset_builder.py:103: parallel_interleave (from tensorflow.python.data.experimental.ops.interleave_ops) is deprecated and will be removed in a future version.\n",
- "Instructions for updating:\n",
- "Use `tf.data.Dataset.interleave(map_func, cycle_length, block_length, num_parallel_calls=tf.data.experimental.AUTOTUNE)` instead. If sloppy execution is desired, use `tf.data.Options.experimental_determinstic`.\n",
- "W0117 13:42:19.960342 140040318117760 deprecation.py:323] From /usr/local/lib/python3.6/dist-packages/object_detection/builders/dataset_builder.py:103: parallel_interleave (from tensorflow.python.data.experimental.ops.interleave_ops) is deprecated and will be removed in a future version.\n",
- "Instructions for updating:\n",
- "Use `tf.data.Dataset.interleave(map_func, cycle_length, block_length, num_parallel_calls=tf.data.experimental.AUTOTUNE)` instead. If sloppy execution is desired, use `tf.data.Options.experimental_determinstic`.\n",
- "WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/object_detection/builders/dataset_builder.py:222: DatasetV1.map_with_legacy_function (from tensorflow.python.data.ops.dataset_ops) is deprecated and will be removed in a future version.\n",
- "Instructions for updating:\n",
- "Use `tf.data.Dataset.map()\n",
- "W0117 13:42:19.979119 140040318117760 deprecation.py:323] From /usr/local/lib/python3.6/dist-packages/object_detection/builders/dataset_builder.py:222: DatasetV1.map_with_legacy_function (from tensorflow.python.data.ops.dataset_ops) is deprecated and will be removed in a future version.\n",
- "Instructions for updating:\n",
- "Use `tf.data.Dataset.map()\n",
- "WARNING:tensorflow:Entity > could not be transformed and will be executed as-is. Please report this to the AutoGraph team. When filing the bug, set the verbosity to 10 (on Linux, `export AUTOGRAPH_VERBOSITY=10`) and attach the full output. Cause: module 'gast' has no attribute 'Num'\n",
- "W0117 13:42:20.010875 140040318117760 ag_logging.py:146] Entity > could not be transformed and will be executed as-is. Please report this to the AutoGraph team. When filing the bug, set the verbosity to 10 (on Linux, `export AUTOGRAPH_VERBOSITY=10`) and attach the full output. Cause: module 'gast' has no attribute 'Num'\n",
- "WARNING:tensorflow:Entity .transform_and_pad_input_data_fn at 0x7f5d5ac611e0> could not be transformed and will be executed as-is. Please report this to the AutoGraph team. When filing the bug, set the verbosity to 10 (on Linux, `export AUTOGRAPH_VERBOSITY=10`) and attach the full output. Cause: Bad argument number for Name: 3, expecting 4\n",
- "W0117 13:42:20.178635 140040318117760 ag_logging.py:146] Entity .transform_and_pad_input_data_fn at 0x7f5d5ac611e0> could not be transformed and will be executed as-is. Please report this to the AutoGraph team. When filing the bug, set the verbosity to 10 (on Linux, `export AUTOGRAPH_VERBOSITY=10`) and attach the full output. Cause: Bad argument number for Name: 3, expecting 4\n",
- "WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/object_detection/inputs.py:110: where (from tensorflow.python.ops.array_ops) is deprecated and will be removed in a future version.\n",
- "Instructions for updating:\n",
- "Use tf.where in 2.0, which has the same broadcast rule as np.where\n",
- "W0117 13:42:20.179834 140040318117760 deprecation.py:323] From /usr/local/lib/python3.6/dist-packages/object_detection/inputs.py:110: where (from tensorflow.python.ops.array_ops) is deprecated and will be removed in a future version.\n",
- "Instructions for updating:\n",
- "Use tf.where in 2.0, which has the same broadcast rule as np.where\n",
- "WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/object_detection/inputs.py:96: sparse_to_dense (from tensorflow.python.ops.sparse_ops) is deprecated and will be removed in a future version.\n",
- "Instructions for updating:\n",
- "Create a `tf.sparse.SparseTensor` and use `tf.sparse.to_dense` instead.\n",
- "W0117 13:42:20.186924 140040318117760 deprecation.py:323] From /usr/local/lib/python3.6/dist-packages/object_detection/inputs.py:96: sparse_to_dense (from tensorflow.python.ops.sparse_ops) is deprecated and will be removed in a future version.\n",
- "Instructions for updating:\n",
- "Create a `tf.sparse.SparseTensor` and use `tf.sparse.to_dense` instead.\n",
- "WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/object_detection/core/preprocessor.py:199: sample_distorted_bounding_box (from tensorflow.python.ops.image_ops_impl) is deprecated and will be removed in a future version.\n",
- "Instructions for updating:\n",
- "`seed2` arg is deprecated.Use sample_distorted_bounding_box_v2 instead.\n",
- "W0117 13:42:20.286824 140040318117760 deprecation.py:323] From /usr/local/lib/python3.6/dist-packages/object_detection/core/preprocessor.py:199: sample_distorted_bounding_box (from tensorflow.python.ops.image_ops_impl) is deprecated and will be removed in a future version.\n",
- "Instructions for updating:\n",
- "`seed2` arg is deprecated.Use sample_distorted_bounding_box_v2 instead.\n",
- "WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/object_detection/inputs.py:283: to_float (from tensorflow.python.ops.math_ops) is deprecated and will be removed in a future version.\n",
- "Instructions for updating:\n",
- "Use `tf.cast` instead.\n",
- "W0117 13:42:20.976613 140040318117760 deprecation.py:323] From /usr/local/lib/python3.6/dist-packages/object_detection/inputs.py:283: to_float (from tensorflow.python.ops.math_ops) is deprecated and will be removed in a future version.\n",
- "Instructions for updating:\n",
- "Use `tf.cast` instead.\n",
- "INFO:tensorflow:Calling model_fn.\n",
- "I0117 13:42:21.475371 140040318117760 estimator.py:1148] Calling model_fn.\n",
- "WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/tf_slim/layers/layers.py:1089: Layer.apply (from tensorflow.python.keras.engine.base_layer) is deprecated and will be removed in a future version.\n",
- "Instructions for updating:\n",
- "Please use `layer.__call__` method instead.\n",
- "W0117 13:42:21.485455 140040318117760 deprecation.py:323] From /usr/local/lib/python3.6/dist-packages/tf_slim/layers/layers.py:1089: Layer.apply (from tensorflow.python.keras.engine.base_layer) is deprecated and will be removed in a future version.\n",
- "Instructions for updating:\n",
- "Please use `layer.__call__` method instead.\n",
- "INFO:tensorflow:depth of additional conv before box predictor: 0\n",
- "I0117 13:42:23.832910 140040318117760 convolutional_box_predictor.py:156] depth of additional conv before box predictor: 0\n",
- "INFO:tensorflow:depth of additional conv before box predictor: 0\n",
- "I0117 13:42:23.911926 140040318117760 convolutional_box_predictor.py:156] depth of additional conv before box predictor: 0\n",
- "INFO:tensorflow:depth of additional conv before box predictor: 0\n",
- "I0117 13:42:23.989741 140040318117760 convolutional_box_predictor.py:156] depth of additional conv before box predictor: 0\n",
- "INFO:tensorflow:depth of additional conv before box predictor: 0\n",
- "I0117 13:42:24.069741 140040318117760 convolutional_box_predictor.py:156] depth of additional conv before box predictor: 0\n",
- "INFO:tensorflow:depth of additional conv before box predictor: 0\n",
- "I0117 13:42:24.149569 140040318117760 convolutional_box_predictor.py:156] depth of additional conv before box predictor: 0\n",
- "INFO:tensorflow:depth of additional conv before box predictor: 0\n",
- "I0117 13:42:24.226772 140040318117760 convolutional_box_predictor.py:156] depth of additional conv before box predictor: 0\n",
- "INFO:tensorflow:Done calling model_fn.\n",
- "I0117 13:42:28.990347 140040318117760 estimator.py:1150] Done calling model_fn.\n",
- "INFO:tensorflow:Create CheckpointSaverHook.\n",
- "I0117 13:42:28.991570 140040318117760 basic_session_run_hooks.py:541] Create CheckpointSaverHook.\n",
- "INFO:tensorflow:Graph was finalized.\n",
- "I0117 13:42:30.869119 140040318117760 monitored_session.py:240] Graph was finalized.\n",
- "2021-01-17 13:42:30.873934: I tensorflow/core/platform/profile_utils/cpu_utils.cc:94] CPU Frequency: 2199995000 Hz\n",
- "2021-01-17 13:42:30.874198: I tensorflow/compiler/xla/service/service.cc:168] XLA service 0x10ee0700 initialized for platform Host (this does not guarantee that XLA will be used). Devices:\n",
- "2021-01-17 13:42:30.874237: I tensorflow/compiler/xla/service/service.cc:176] StreamExecutor device (0): Host, Default Version\n",
- "2021-01-17 13:42:30.886994: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcuda.so.1\n",
- "2021-01-17 13:42:31.040255: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:983] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero\n",
- "2021-01-17 13:42:31.040928: I tensorflow/compiler/xla/service/service.cc:168] XLA service 0x10ee0540 initialized for platform CUDA (this does not guarantee that XLA will be used). Devices:\n",
- "2021-01-17 13:42:31.040961: I tensorflow/compiler/xla/service/service.cc:176] StreamExecutor device (0): Tesla T4, Compute Capability 7.5\n",
- "2021-01-17 13:42:31.041161: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:983] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero\n",
- "2021-01-17 13:42:31.041700: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1639] Found device 0 with properties: \n",
- "name: Tesla T4 major: 7 minor: 5 memoryClockRate(GHz): 1.59\n",
- "pciBusID: 0000:00:04.0\n",
- "2021-01-17 13:42:31.044498: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcudart.so.10.1\n",
- "2021-01-17 13:42:31.055891: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcublas.so.10\n",
- "2021-01-17 13:42:31.061956: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcufft.so.10\n",
- "2021-01-17 13:42:31.070390: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcurand.so.10\n",
- "2021-01-17 13:42:31.080123: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcusolver.so.10\n",
- "2021-01-17 13:42:31.083621: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcusparse.so.10\n",
- "2021-01-17 13:42:31.096478: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcudnn.so.7\n",
- "2021-01-17 13:42:31.096616: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:983] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero\n",
- "2021-01-17 13:42:31.097187: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:983] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero\n",
- "2021-01-17 13:42:31.097711: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1767] Adding visible gpu devices: 0\n",
- "2021-01-17 13:42:31.097786: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcudart.so.10.1\n",
- "2021-01-17 13:42:31.099033: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1180] Device interconnect StreamExecutor with strength 1 edge matrix:\n",
- "2021-01-17 13:42:31.099060: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1186] 0 \n",
- "2021-01-17 13:42:31.099072: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1199] 0: N \n",
- "2021-01-17 13:42:31.099196: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:983] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero\n",
- "2021-01-17 13:42:31.099763: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:983] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero\n",
- "2021-01-17 13:42:31.100255: W tensorflow/core/common_runtime/gpu/gpu_bfc_allocator.cc:39] Overriding allow_growth setting because the TF_FORCE_GPU_ALLOW_GROWTH environment variable is set. Original config value was 0.\n",
- "2021-01-17 13:42:31.100305: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1325] Created TensorFlow device (/job:localhost/replica:0/task:0/device:GPU:0 with 14221 MB memory) -> physical GPU (device: 0, name: Tesla T4, pci bus id: 0000:00:04.0, compute capability: 7.5)\n",
- "INFO:tensorflow:Running local_init_op.\n",
- "I0117 13:42:33.619996 140040318117760 session_manager.py:500] Running local_init_op.\n",
- "INFO:tensorflow:Done running local_init_op.\n",
- "I0117 13:42:33.814620 140040318117760 session_manager.py:502] Done running local_init_op.\n",
- "INFO:tensorflow:Saving checkpoints for 0 into /content/models/research/ssdlite_mobiledet_dsp_320x320_coco_2020_05_19/fp32/model.ckpt.\n",
- "I0117 13:42:39.020653 140040318117760 basic_session_run_hooks.py:606] Saving checkpoints for 0 into /content/models/research/ssdlite_mobiledet_dsp_320x320_coco_2020_05_19/fp32/model.ckpt.\n",
- "2021-01-17 13:42:44.022346: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcublas.so.10\n",
- "2021-01-17 13:42:54.862247: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcudnn.so.7\n",
- "INFO:tensorflow:loss = 16.709026, step = 0\n",
- "I0117 13:42:59.428292 140040318117760 basic_session_run_hooks.py:262] loss = 16.709026, step = 0\n",
- "INFO:tensorflow:global_step/sec: 1.65591\n",
- "I0117 13:43:59.817262 140040318117760 basic_session_run_hooks.py:692] global_step/sec: 1.65591\n",
- "INFO:tensorflow:loss = 1.9718888, step = 100 (60.390 sec)\n",
- "I0117 13:43:59.818582 140040318117760 basic_session_run_hooks.py:260] loss = 1.9718888, step = 100 (60.390 sec)\n",
- "INFO:tensorflow:global_step/sec: 1.74301\n",
- "I0117 13:44:57.189443 140040318117760 basic_session_run_hooks.py:692] global_step/sec: 1.74301\n",
- "INFO:tensorflow:loss = 1.6175059, step = 200 (57.372 sec)\n",
- "I0117 13:44:57.190887 140040318117760 basic_session_run_hooks.py:260] loss = 1.6175059, step = 200 (57.372 sec)\n"
- ],
- "name": "stdout"
- }
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "id": "6mUFh87-d-Gk"
+ "http://localhost:6006/data/plugin/images/images?run=eval_0&sample=0&tag=Detections_Left_Groundtruth_Right%2F7%2F0": {
+ "data": "W3sid2FsbF90aW1lIjogMTYxMDgwMTUzMy4yNTYyNjQsICJzdGVwIjogMTczMiwgIndpZHRoIjogNjUyOCwgImhlaWdodCI6IDE3ODUsICJxdWVyeSI6ICJydW49ZXZhbF8wJnRhZz1EZXRlY3Rpb25zX0xlZnRfR3JvdW5kdHJ1dGhfUmlnaHQlMkY3JTJGMCZzYW1wbGU9MCZpbmRleD0wIn0sIHsid2FsbF90aW1lIjogMTYxMDgwMjU3MC4wODk1NDc2LCAic3RlcCI6IDI3MDMsICJ3aWR0aCI6IDY1MjgsICJoZWlnaHQiOiAxNzg1LCAicXVlcnkiOiAicnVuPWV2YWxfMCZ0YWc9RGV0ZWN0aW9uc19MZWZ0X0dyb3VuZHRydXRoX1JpZ2h0JTJGNyUyRjAmc2FtcGxlPTAmaW5kZXg9MSJ9LCB7IndhbGxfdGltZSI6IDE2MTA4MDMxNzIuMjU0NTc2LCAic3RlcCI6IDM0NTksICJ3aWR0aCI6IDY1MjgsICJoZWlnaHQiOiAxNzg1LCAicXVlcnkiOiAicnVuPWV2YWxfMCZ0YWc9RGV0ZWN0aW9uc19MZWZ0X0dyb3VuZHRydXRoX1JpZ2h0JTJGNyUyRjAmc2FtcGxlPTAmaW5kZXg9MiJ9LCB7IndhbGxfdGltZSI6IDE2MTA4MDM3NjkuNzQ5NDg1NywgInN0ZXAiOiA0MjA1LCAid2lkdGgiOiA2NTI4LCAiaGVpZ2h0IjogMTc4NSwgInF1ZXJ5IjogInJ1bj1ldmFsXzAmdGFnPURldGVjdGlvbnNfTGVmdF9Hcm91bmR0cnV0aF9SaWdodCUyRjclMkYwJnNhbXBsZT0wJmluZGV4PTMifSwgeyJ3YWxsX3RpbWUiOiAxNjEwODA2MjI0LjU0NzYyMjcsICJzdGVwIjogNjk5MCwgIndpZHRoIjogNjUyOCwgImhlaWdodCI6IDE3ODUsICJxdWVyeSI6ICJydW49ZXZhbF8wJnRhZz1EZXRlY3Rpb25zX0xlZnRfR3JvdW5kdHJ1dGhfUmlnaHQlMkY3JTJGMCZzYW1wbGU9MCZpbmRleD00In0sIHsid2FsbF90aW1lIjogMTYxMDgwNjgyNS42NDExNTc2LCAic3RlcCI6IDc1ODksICJ3aWR0aCI6IDY1MjgsICJoZWlnaHQiOiAxNzg1LCAicXVlcnkiOiAicnVuPWV2YWxfMCZ0YWc9RGV0ZWN0aW9uc19MZWZ0X0dyb3VuZHRydXRoX1JpZ2h0JTJGNyUyRjAmc2FtcGxlPTAmaW5kZXg9NSJ9LCB7IndhbGxfdGltZSI6IDE2MTA4MDc0MjguMjIzMjA3MiwgInN0ZXAiOiA4MTc4LCAid2lkdGgiOiA2NTI4LCAiaGVpZ2h0IjogMTc4NSwgInF1ZXJ5IjogInJ1bj1ldmFsXzAmdGFnPURldGVjdGlvbnNfTGVmdF9Hcm91bmR0cnV0aF9SaWdodCUyRjclMkYwJnNhbXBsZT0wJmluZGV4PTYifSwgeyJ3YWxsX3RpbWUiOiAxNjEwODA4MDI5LjcwNTE3NDcsICJzdGVwIjogODc2MiwgIndpZHRoIjogNjUyOCwgImhlaWdodCI6IDE3ODUsICJxdWVyeSI6ICJydW49ZXZhbF8wJnRhZz1EZXRlY3Rpb25zX0xlZnRfR3JvdW5kdHJ1dGhfUmlnaHQlMkY3JTJGMCZzYW1wbGU9MCZpbmRleD03In0sIHsid2FsbF90aW1lIjogMTYxMDgwOTIyNS42MzI4MzkyLCAic3RlcCI6IDk5MzgsICJ3aWR0aCI6IDY1MjgsICJoZWlnaHQiOiAxNzg1LCAicXVlcnkiOiAicnVuPWV2YWxfMCZ0YWc9RGV0ZWN0aW9uc19MZWZ0X0dyb3VuZHRydXRoX1JpZ2h0JTJGNyUyRjAmc2FtcGxlPTAmaW5kZXg9OCJ9LCB7IndhbGxfdGltZSI6IDE2MTA4MDk0ODAuNDEzNzQ5LCAic3RlcCI6IDEwMDAwLCAid2lkdGgiOiA2NTI4LCAiaGVpZ2h0IjogMTc4NSwgInF1ZXJ5IjogInJ1bj1ldmFsXzAmdGFnPURldGVjdGlvbnNfTGVmdF9Hcm91bmR0cnV0aF9SaWdodCUyRjclMkYwJnNhbXBsZT0wJmluZGV4PTkifV0=",
+ "headers": [
+ [
+ "content-type",
+ "application/json"
+ ]
+ ],
+ "ok": true,
+ "status": 200,
+ "status_text": ""
},
- "source": [
- "Training takes about **2.5 hours** on a Tesla T4. To keep the notebook clean, I have removed the outputs. Here are some snippets - \n",
- "\n",
- "```shell\n",
- "INFO:tensorflow:global_step/sec: 1.51478\n",
- "I0116 14:43:28.403008 140409006634880 basic_session_run_hooks.py:692] global_step/sec: 1.51478\n",
- "INFO:tensorflow:loss = 0.289738, step = 9032 (66.016 sec)\n",
- "I0116 14:43:28.404469 140409006634880 basic_session_run_hooks.py:260] loss = 0.289738, step = 9032 (66.016 sec)\n",
- "INFO:tensorflow:global_step/sec: 1.49223\n",
- "I0116 14:44:35.416763 140409006634880 basic_session_run_hooks.py:692] global_step/sec: 1.49223\n",
- "INFO:tensorflow:loss = 0.26625738, step = 9132 (67.014 sec)\n",
- "I0116 14:44:35.418235 140409006634880 basic_session_run_hooks.py:260] loss = 0.26625738, step = 9132 (67.014 sec)\n",
- "INFO:tensorflow:global_step/sec: 1.55216\n",
- "I0116 14:45:39.843287 140409006634880 basic_session_run_hooks.py:692] global_step/sec: 1.55216\n",
- "INFO:tensorflow:loss = 0.2920295, step = 9232 (64.427 sec)\n",
- "I0116 14:45:39.844861 140409006634880 basic_session_run_hooks.py:260] loss = 0.2920295, step = 9232 (64.427 sec)\n",
- "INFO:tensorflow:global_step/sec: 1.55722\n",
- "I0116 14:46:44.060229 140409006634880 basic_session_run_hooks.py:692] global_step/sec: 1.55722\n",
- "INFO:tensorflow:loss = 0.27517703, step = 9332 (64.217 sec)\n",
- "I0116 14:46:44.061845 140409006634880 basic_session_run_hooks.py:260] loss = 0.27517703, step = 9332 (64.217 sec)\n",
- "```\n",
- "\n",
- "Training completed with the following loss - `Loss for final step: 0.27454737`. In order to use the model later, we can take the tained model checkpoints and convert them to single a frozen inference graph. "
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "id": "nij2yHOov4ZD"
+ "http://localhost:6006/data/plugin/images/images?run=eval_0&sample=0&tag=Detections_Left_Groundtruth_Right%2F8%2F0": {
+ "data": "W3sid2FsbF90aW1lIjogMTYxMDgwMTUzMy4yNTYyNjQsICJzdGVwIjogMTczMiwgIndpZHRoIjogNjUyOCwgImhlaWdodCI6IDIxOTgsICJxdWVyeSI6ICJydW49ZXZhbF8wJnRhZz1EZXRlY3Rpb25zX0xlZnRfR3JvdW5kdHJ1dGhfUmlnaHQlMkY4JTJGMCZzYW1wbGU9MCZpbmRleD0wIn0sIHsid2FsbF90aW1lIjogMTYxMDgwMjU3MC4wODk1NDc2LCAic3RlcCI6IDI3MDMsICJ3aWR0aCI6IDY1MjgsICJoZWlnaHQiOiAyMTk4LCAicXVlcnkiOiAicnVuPWV2YWxfMCZ0YWc9RGV0ZWN0aW9uc19MZWZ0X0dyb3VuZHRydXRoX1JpZ2h0JTJGOCUyRjAmc2FtcGxlPTAmaW5kZXg9MSJ9LCB7IndhbGxfdGltZSI6IDE2MTA4MDMxNzIuMjU0NTc2LCAic3RlcCI6IDM0NTksICJ3aWR0aCI6IDY1MjgsICJoZWlnaHQiOiAyMTk4LCAicXVlcnkiOiAicnVuPWV2YWxfMCZ0YWc9RGV0ZWN0aW9uc19MZWZ0X0dyb3VuZHRydXRoX1JpZ2h0JTJGOCUyRjAmc2FtcGxlPTAmaW5kZXg9MiJ9LCB7IndhbGxfdGltZSI6IDE2MTA4MDM3NjkuNzQ5NDg1NywgInN0ZXAiOiA0MjA1LCAid2lkdGgiOiA2NTI4LCAiaGVpZ2h0IjogMjE5OCwgInF1ZXJ5IjogInJ1bj1ldmFsXzAmdGFnPURldGVjdGlvbnNfTGVmdF9Hcm91bmR0cnV0aF9SaWdodCUyRjglMkYwJnNhbXBsZT0wJmluZGV4PTMifSwgeyJ3YWxsX3RpbWUiOiAxNjEwODA2MjI0LjU0NzYyMjcsICJzdGVwIjogNjk5MCwgIndpZHRoIjogNjUyOCwgImhlaWdodCI6IDIxOTgsICJxdWVyeSI6ICJydW49ZXZhbF8wJnRhZz1EZXRlY3Rpb25zX0xlZnRfR3JvdW5kdHJ1dGhfUmlnaHQlMkY4JTJGMCZzYW1wbGU9MCZpbmRleD00In0sIHsid2FsbF90aW1lIjogMTYxMDgwNjgyNS42NDExNTc2LCAic3RlcCI6IDc1ODksICJ3aWR0aCI6IDY1MjgsICJoZWlnaHQiOiAyMTk4LCAicXVlcnkiOiAicnVuPWV2YWxfMCZ0YWc9RGV0ZWN0aW9uc19MZWZ0X0dyb3VuZHRydXRoX1JpZ2h0JTJGOCUyRjAmc2FtcGxlPTAmaW5kZXg9NSJ9LCB7IndhbGxfdGltZSI6IDE2MTA4MDc0MjguMjIzMjA3MiwgInN0ZXAiOiA4MTc4LCAid2lkdGgiOiA2NTI4LCAiaGVpZ2h0IjogMjE5OCwgInF1ZXJ5IjogInJ1bj1ldmFsXzAmdGFnPURldGVjdGlvbnNfTGVmdF9Hcm91bmR0cnV0aF9SaWdodCUyRjglMkYwJnNhbXBsZT0wJmluZGV4PTYifSwgeyJ3YWxsX3RpbWUiOiAxNjEwODA4MDI5LjcwNTE3NDcsICJzdGVwIjogODc2MiwgIndpZHRoIjogNjUyOCwgImhlaWdodCI6IDIxOTgsICJxdWVyeSI6ICJydW49ZXZhbF8wJnRhZz1EZXRlY3Rpb25zX0xlZnRfR3JvdW5kdHJ1dGhfUmlnaHQlMkY4JTJGMCZzYW1wbGU9MCZpbmRleD03In0sIHsid2FsbF90aW1lIjogMTYxMDgwOTIyNS42MzI4MzkyLCAic3RlcCI6IDk5MzgsICJ3aWR0aCI6IDY1MjgsICJoZWlnaHQiOiAyMTk4LCAicXVlcnkiOiAicnVuPWV2YWxfMCZ0YWc9RGV0ZWN0aW9uc19MZWZ0X0dyb3VuZHRydXRoX1JpZ2h0JTJGOCUyRjAmc2FtcGxlPTAmaW5kZXg9OCJ9LCB7IndhbGxfdGltZSI6IDE2MTA4MDk0ODAuNDEzNzQ5LCAic3RlcCI6IDEwMDAwLCAid2lkdGgiOiA2NTI4LCAiaGVpZ2h0IjogMjE5OCwgInF1ZXJ5IjogInJ1bj1ldmFsXzAmdGFnPURldGVjdGlvbnNfTGVmdF9Hcm91bmR0cnV0aF9SaWdodCUyRjglMkYwJnNhbXBsZT0wJmluZGV4PTkifV0=",
+ "headers": [
+ [
+ "content-type",
+ "application/json"
+ ]
+ ],
+ "ok": true,
+ "status": 200,
+ "status_text": ""
},
- "source": [
- "## Generate final graph"
- ]
- },
- {
- "cell_type": "code",
- "metadata": {
- "id": "xYf4UlwxiSu-"
+ "http://localhost:6006/data/plugin/images/images?run=eval_0&sample=0&tag=Detections_Left_Groundtruth_Right%2F9%2F0": {
+ "data": "W3sid2FsbF90aW1lIjogMTYxMDgwMTUzMy4yNTYyNjQsICJzdGVwIjogMTczMiwgIndpZHRoIjogNjUyOCwgImhlaWdodCI6IDE4MDEsICJxdWVyeSI6ICJydW49ZXZhbF8wJnRhZz1EZXRlY3Rpb25zX0xlZnRfR3JvdW5kdHJ1dGhfUmlnaHQlMkY5JTJGMCZzYW1wbGU9MCZpbmRleD0wIn0sIHsid2FsbF90aW1lIjogMTYxMDgwMjU3MC4wODk1NDc2LCAic3RlcCI6IDI3MDMsICJ3aWR0aCI6IDY1MjgsICJoZWlnaHQiOiAxODAxLCAicXVlcnkiOiAicnVuPWV2YWxfMCZ0YWc9RGV0ZWN0aW9uc19MZWZ0X0dyb3VuZHRydXRoX1JpZ2h0JTJGOSUyRjAmc2FtcGxlPTAmaW5kZXg9MSJ9LCB7IndhbGxfdGltZSI6IDE2MTA4MDMxNzIuMjU0NTc2LCAic3RlcCI6IDM0NTksICJ3aWR0aCI6IDY1MjgsICJoZWlnaHQiOiAxODAxLCAicXVlcnkiOiAicnVuPWV2YWxfMCZ0YWc9RGV0ZWN0aW9uc19MZWZ0X0dyb3VuZHRydXRoX1JpZ2h0JTJGOSUyRjAmc2FtcGxlPTAmaW5kZXg9MiJ9LCB7IndhbGxfdGltZSI6IDE2MTA4MDM3NjkuNzQ5NDg1NywgInN0ZXAiOiA0MjA1LCAid2lkdGgiOiA2NTI4LCAiaGVpZ2h0IjogMTgwMSwgInF1ZXJ5IjogInJ1bj1ldmFsXzAmdGFnPURldGVjdGlvbnNfTGVmdF9Hcm91bmR0cnV0aF9SaWdodCUyRjklMkYwJnNhbXBsZT0wJmluZGV4PTMifSwgeyJ3YWxsX3RpbWUiOiAxNjEwODA2MjI0LjU0NzYyMjcsICJzdGVwIjogNjk5MCwgIndpZHRoIjogNjUyOCwgImhlaWdodCI6IDE4MDEsICJxdWVyeSI6ICJydW49ZXZhbF8wJnRhZz1EZXRlY3Rpb25zX0xlZnRfR3JvdW5kdHJ1dGhfUmlnaHQlMkY5JTJGMCZzYW1wbGU9MCZpbmRleD00In0sIHsid2FsbF90aW1lIjogMTYxMDgwNjgyNS42NDExNTc2LCAic3RlcCI6IDc1ODksICJ3aWR0aCI6IDY1MjgsICJoZWlnaHQiOiAxODAxLCAicXVlcnkiOiAicnVuPWV2YWxfMCZ0YWc9RGV0ZWN0aW9uc19MZWZ0X0dyb3VuZHRydXRoX1JpZ2h0JTJGOSUyRjAmc2FtcGxlPTAmaW5kZXg9NSJ9LCB7IndhbGxfdGltZSI6IDE2MTA4MDc0MjguMjIzMjA3MiwgInN0ZXAiOiA4MTc4LCAid2lkdGgiOiA2NTI4LCAiaGVpZ2h0IjogMTgwMSwgInF1ZXJ5IjogInJ1bj1ldmFsXzAmdGFnPURldGVjdGlvbnNfTGVmdF9Hcm91bmR0cnV0aF9SaWdodCUyRjklMkYwJnNhbXBsZT0wJmluZGV4PTYifSwgeyJ3YWxsX3RpbWUiOiAxNjEwODA4MDI5LjcwNTE3NDcsICJzdGVwIjogODc2MiwgIndpZHRoIjogNjUyOCwgImhlaWdodCI6IDE4MDEsICJxdWVyeSI6ICJydW49ZXZhbF8wJnRhZz1EZXRlY3Rpb25zX0xlZnRfR3JvdW5kdHJ1dGhfUmlnaHQlMkY5JTJGMCZzYW1wbGU9MCZpbmRleD03In0sIHsid2FsbF90aW1lIjogMTYxMDgwOTIyNS42MzI4MzkyLCAic3RlcCI6IDk5MzgsICJ3aWR0aCI6IDY1MjgsICJoZWlnaHQiOiAxODAxLCAicXVlcnkiOiAicnVuPWV2YWxfMCZ0YWc9RGV0ZWN0aW9uc19MZWZ0X0dyb3VuZHRydXRoX1JpZ2h0JTJGOSUyRjAmc2FtcGxlPTAmaW5kZXg9OCJ9LCB7IndhbGxfdGltZSI6IDE2MTA4MDk0ODAuNDEzNzQ5LCAic3RlcCI6IDEwMDAwLCAid2lkdGgiOiA2NTI4LCAiaGVpZ2h0IjogMTgwMSwgInF1ZXJ5IjogInJ1bj1ldmFsXzAmdGFnPURldGVjdGlvbnNfTGVmdF9Hcm91bmR0cnV0aF9SaWdodCUyRjklMkYwJnNhbXBsZT0wJmluZGV4PTkifV0=",
+ "headers": [
+ [
+ "content-type",
+ "application/json"
+ ]
+ ],
+ "ok": true,
+ "status": 200,
+ "status_text": ""
},
- "source": [
- "!python object_detection/export_inference_graph.py \\\n",
- " --pipeline_config_path=$PIPELINE_CONFIG_PATH \\\n",
- " --trained_checkpoint_prefix=/content/models/research/ssdlite_mobiledet_dsp_320x320_coco_2020_05_19/fp32/model.ckpt-10000 \\\n",
- " --output_directory=$MODEL_DIR \\"
- ],
- "execution_count": null,
- "outputs": []
- },
- {
- "cell_type": "code",
- "metadata": {
- "colab": {
- "base_uri": "https://localhost:8080/"
- },
- "id": "JEGtgDeqjlc-",
- "outputId": "aae4950c-230f-40c2-8fe7-3507abb4474c"
+ "http://localhost:6006/data/plugin/images/individualImage?ts=1610809480.413749&run=eval_0&tag=Detections_Left_Groundtruth_Right%2F0%2F0&sample=0&index=9": {
+ "data": "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",
+ "headers": [
+ [
+ "content-type",
+ "image/png"
+ ]
+ ],
+ "ok": true,
+ "status": 200,
+ "status_text": ""
},
- "source": [
- "!ls -lh /content/models/research/ssdlite_mobiledet_dsp_320x320_coco_2020_05_19/fp32/*.pb"
- ],
- "execution_count": null,
- "outputs": [
- {
- "output_type": "stream",
- "text": [
- "-rw-r--r-- 1 root root 26M Jan 16 15:11 /content/models/research/ssdlite_mobiledet_dsp_320x320_coco_2020_05_19/fp32/frozen_inference_graph.pb\n",
- "-rw-r----- 1 475825 89939 28M May 19 2020 /content/models/research/ssdlite_mobiledet_dsp_320x320_coco_2020_05_19/fp32/tflite_graph.pb\n"
- ],
- "name": "stdout"
- }
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "id": "qxQ9numRtsk-"
+ "http://localhost:6006/data/plugin/images/individualImage?ts=1610809480.413749&run=eval_0&tag=Detections_Left_Groundtruth_Right%2F1%2F0&sample=0&index=9": {
+ "data": "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",
+ "headers": [
+ [
+ "content-type",
+ "image/png"
+ ]
+ ],
+ "ok": true,
+ "status": 200,
+ "status_text": ""
},
- "source": [
- "We can also view model's training proress in TensorBoard. "
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "id": "tHeoeh6XwE90"
+ "http://localhost:6006/data/plugin/images/individualImage?ts=1610809480.413749&run=eval_0&tag=Detections_Left_Groundtruth_Right%2F2%2F0&sample=0&index=9": {
+ "data": "iVBORw0KGgoAAAANSUhEUgAAGYAAAAmQCAIAAAAPqUuaAAAgAElEQVR4nOz9abAueZ4f9P0y83nOubf2Xqe7RzOaTdIMY4nVFgI0EjIyAYTBWHgJwg7j8AuzCAaFZHA4bLfrjSMwFkYSm+0I5MCOcAQRIAMWYyFshAwSshZAmhmNZtFo9q236qq695zneTLTL6rn9u2Tz/3+6t5T1beqz+fzouP2+Z/M/Oc//3v+Ks/wv/jMt9bXuporOA3HkLqsQ0j98vGQTl11MabDT6+9klK/eBVSPzONIfX6usnYv378Qkj9+Mc+EVJ/5QufD6n7i5SxqvpH/qH/SUj9HX/f3xxS10onv7y8zJeeYqFVTSntIqXOh1jJmuvWbkgnr1pD2nJKl5526diqujpch9Q//H/6v4TU7/oN3xFSf/xHfySk/v/+zF+I+arXPvLpkPoLv/BLIXWel3zybE6ttsYxPc23334YUnexFlXVcEo5z5fOqRXbTq2xAletsQ4fT6kXHYZUoLtply89xip8dUwVOLesoWmXTc6zeU35Hnfprsd4bFVdH08hdZ+L9BbVu6qGNVXR0zFVpF286+a67cPKNTxaYv3fTc3Icjqlx5FTLy5SmSxL05Xl55UPnsaUvi7pzO2jzEU6DKmGr3HeVTm1ardPv7DE/n2OD2vaNx34aY4d6ZLueh9Hh6urNKlrJz+5Iq1dhxOMXZmseVCLzXaMzX7apUsfj2lUqu5pjnHsOM3p5GsetKoqVpM1jjsXYy7wpnV88c0vh9TXXk6rknlJrSO26X4wnaZc4OnS434fUpc4KlWXt2O8632sou0MIre8JVaUYUp3XbHJD82io6a4lFuWVP+nnLHmaTT1f4o9xhB70TU+yuoq4Ro78NwdvXjvxZA654Gj+4XcveepUdv5D7t0eO4J9/tnv/R1HPKq6t7F/ZCap0Z5RTMtTbs9zWndUWOaHc1rqoTtzCrXhH1eWcQ5ch4x24zlLqXp3o+pAk+75nEMcfemhlTg8ymdvBlsq3bTRUjNRZrHnf0Ud366kaWZYx/T8bkHnpeuBx/S08w94cPrVGIXsRLmW66q05y2VXN3NA5pUFu7DjzPy6ZdqkV5JbeLfWxVLfF5DXG7IPc2L96/l868tl1Z3u/KE5hYgbtBLa+Y5jjbzCf/zKc+lS/90Y99PKV+PG2/f/t3/JqQOsbJz2/63u/JGfvmz3wypL748qshdYito12VNPuTzU5G1lx6jfPRvAEzxozlnZ9W7szGXSrwU9zYb5fG+33ujp59X/Q6tqz9vtnHqLjV/PBh2n7fx/X+xb00maxuj/zBgwch9RCXS+2m6ysvpbx98Y23QuoUN2wvL9NYvN+l7r2qllj/cxd9HR/l2NWxqSm09LSOcf+8Wb32L5jyzmd8kzinJU9+AVpVuynufOYlf7ypOa58q3scazx5Xr3mM8+33SHP9/Xs+6LVzRPyDOWWY0cu8Nwwb/HWq7mpqlrjqDZUfnWVR+puHyPe2BIzNsaXDuPcXHrcx2VLnOjOp7yvmo49XsVtiq5MctjDX/3JnwmpX/ilFChSVX/q//vnQup3/o0pAOB3/Tf/uyE119+1Wzk3rSNuHOV4jDlW4KqKEUN1vE5PM+8V/5v/5r+ZL/0zS3qaebk0xCLNZXId1/tVVXGiO63p8EOc/Lz91s3p4qf+8J+/8RPxY1vix86mpzTxYxvix7bEj22JH9sSP/a0xI+dJX5sS/zYmSuLH9seLn5sQ/zYlvixc+cWP7Y5VvzYhvixLfFjW+LHtsSPbYkf2xI/tiV+bEv82Fnix7bEj22JH9sSP/a0lxY/tiV+bEv82Llk8WPbg8WP3SR+bEv82NY2fuzZXyEDAAAAAAAAAAAAAAAAAAAAAAAAHzo+QAYAAAAAAAAAAAAAAAAAAAAAAAB3iA+QAQAAAAAAAAAAAAAAAAAAAAAAwB2yq6vpxo+myzUc8PbDOaRO+11IHU7pzFX18ov3QuobX3gzpN7bXaZLx0+tXez2OWPr1RJSlyEdm0++LOnMVfWJ+78m/0Jw714qz5jrqqplSc9rfxFPMKf7GuKhazVlsttdhNTT6RRSp+lmhf/aY6/ypWtNWR/jB/3GWP0//vGPhdS5mrZzfX0dUj/xiU+E1M997vPp0nMqz6oa15i32DwuptRj5BKrqnGfGleuCbnlDUNMzrdczV2PQ/7yYzq27THmWEVz/c8Zay+9xoY9xP5kiBk7xuo9jakWVdV+TPVkjY1rijeV61hV7cZ0+Bor0pA7yiEe23Xwt7p0tCxNmeST72OjXtdUCcd9qkXVfXJ1iPV/yK0+3tQ8p4lTVe26nD+zPI5X1WlOv5AP3uWH1Q3lTSWLbSd3R7td6hParqxizschPawlVtF2PB2WVAnX2Opzap4k5BKrquurQ0jNzbZ50nkOXZWr4RjryW0mhFX10v0X0snjsx5iLRqGuFzqiiTX4VgkdbhKE912PM1jxz4f3rSOpmGOcZI95vlkM57GdhdzVVXLMbfrdPJcRcd2ZJjTb8xjXL1epUsPuRp1Oc/r7iWOO1+6fiOk7rpmm+UZSL7pdzF2pPvKOc9Tp9Mp9cCXF2kPpHU4ppOPsY4t3UCf59hjLNI1ps7dpbM8Metmbc8+Sa7brU9PubeJ85Nq853nGLHzbxvHsVLO88nzWuxwOobUXRwaqpsn53HnFIetXIGr6uJearnXsdXPp1RHHx5SmUx5E6+fY+QlZMrYGrcpqluL5YxNu1xF284q722mxLzAfPgw9rGxxKpqiWuHaYoTmNiyxql5HMdjylueWOWW9VM/87P50n/tp38mpsc1e5z85Gbb1pO8P7m/F3e0YrO9vExb3FU17tMvxIpQn/nMp0Pqd37nd+ZLf/zjHw+pv+7X/7qQ+m3f8mtD6quvvhRSL2MnWVW7Kb3viMuO2u3Tyce4f1jdfLJZdsTBOq+H2io6xZM3d50nEd2aPW+h7+N+1xyHrXHXdlbp8Bfv52ed5gm5Fz3OaYOl2llE7BN2uVV3ml3Z5mGlEuv7yWYVmXfq8pj47Lvr1e02NJOf2116yIN1XC51ZZK0u3xNzvP8PK5t2z3wOd/XLV5stVV0iA0z5/xW8678zrh9pxaPnZud/66Kxun9lOdd+RXn1DbMONvMm65xyDvFM7eto9kuOKTUJR7bboG/9rFXQuoL9++H1FzN8vq0fxOYX3HmphePbWpR1Zq3H/NecayD7YvdOFZXfhnywv0X05nje5ZhaOaiV3G7IAdhHQ9xq2G7/BQ/Jn7sCcSPnSF+bEP82Lmzix+7SfzYmUuLH9sQP/beEj/2tMe+8yshTfzYlvixLfFj5w4WP3aT+LEt8WNb4se2xI+dIX5sQ/zYlvixs8SPbYkfO3Nh8WMb4sfOpeZjxY/dJH5sS/zYOeLHno74sbPEj505ufixp8yY+LGnPbn4sTNn/vDEj91qRgIAAAAAAAAAAAAAAAAAAAAAAAB8uPgAGQAAAAAAAAAAAAAAAAAAAAAAANwhPkAGAAAAAAAAAAAAAAAAAAAAAAAAd4gPkAEAAAAAAAAAAAAAAAAAAAAAAMAd4gNkAAAAAAAAAAAAAAAAAAAAAAAAcIf4ABkAAAAAAAAAAAAAAAAAAAAAAADcIT5ABgAAAAAAAAAAAAAAAAAAAAAAAHfI7o317Rs/une6Fw544eIypB6WY7rY2nzvbKghpL42XjRHp8SUejXP8cxVQ8r5Oi/p0ObEOb0+8R0vhtRlThk7zulx5NKuqmnch9Q53vWaT50OrWmY8tGneF9jfFhzfNZDd+lhTHd2dXWVMjaljO0vUvV+7bXXYr7qZ3/2F0Pqd377d4XUU2y26xKfVtU07ULqcT6lg2MdXLsvJObntd+ns+cKnD/OuHTNdlxjC4iXnmOhjGNTJmOsomulEsvPes03VbWLOT/Fk8ceuqYx1bGlq6K56Y0x27l7b8skV7PdLt1X10PH0j41g9oY6/CypPsax6afzPLzGmJVyC2v/aLqMfb/+eRTTM41oW228ymVyfGYuuj9vTR2LLkHrhqm9DRzHTzFkzf1t/uNbjhOJTZNufNvWkeu/7Wmw3dx3Mk9cFVXiWO+lltUwrYX3cfOKj/rOZ+8L5KU89MpTgib2+orabCLs81lzT1Gylnbx3ZT2XRsHne6Ma1bOwy5e08lNsQyqe6ud3GR2DXqWz2OJS8D8xIyZmxuH0cu8CU9rFxP5kMzdux2uVjifS3p5Eu87eOYmnx105vci66x2Y65yKqmONu8jmPHlOcJubdZDjFflav/Lk4D8iwiHlrV1f95ibOyWJ5LO9FtZgKp7eTxdBpSL3p1us4Z2+1SZ3U8xQKP9eT6qmm24y72dV0ND4bYdqrqdPUwXTo+6zne9VqpJsxdxpZjaj5TfFh5ZFm7/bDDWze3YR+338d5V25ZcVBbjs1om+WDlzgq5cVUVZ1i3pYhTnQPeWnQ9Fa5Eg7xvpc8NYpbbdPYbkTHc8dKmCcJ111NmIZU/4f4OJam/rf7vXGi22w6xQLfpS3ud7HzmXJ+iJ3wGHdNH7yddpKraryM6+6Y8b/yV34spP7lH/nRfOncww9xpZbbTtMw4zheXW+2xFqUN7Ff/cgr+dKf+uQnQ+pHPvKRkPpt3/ZtIfU7f/2vT9f99KdivuqFy/sh9aWXXw6plxepdeT+pKqG2OrzeurFF9Jrr36BGi+dXyvkwXrMndXQdeCx/ueZ6hoXDs1g3N1XnIDXOqSpUTu9GeM8Ob/Oy0uDZh+iW7Pnnf9xlzed4pqlm940r1pi48q3lc98isuKVh7K41S0lxc1a35Nkxe3nfzSIWs2TvM+RNeVNclx3pV3+eauxOZYVcau/w/a0s7r7otmpyKdeb9Pg9rxutlW6sRX/HG2OXUvr/I0+Itf/FI+PMhjcd6Iq+rq6C1e563dpXPy2Lw1TtX7l3/5c/nSy2up/j+ME/ihUsZevp8mP4djs610FcfTq0M6PJfYsLt5ZvFjJX7sCcSPnfkF8WMb4sfOHCx+bEP82Jb4sS3xY1vix84RP3aT+LEzx4of2xA/dob4se2lxY9tzyx+bEP82Jb4sbPEj22JH9sSP3b22unc4se2x4of2xA/du7S4sduEj+2JX7sac9c4sfOET+2JX7szC/kZPFj22PFjz0l8WNb4se2tvFjt+vvAQAAAAAAAAAAAAAAAAAAAAAAgA8VHyADAAAAAAAAAAAAAAAAAAAAAACAO8QHyAAAAAAAAAAAAAAAAAAAAAAAAOAO8QEyAAAAAAAAAAAAAAAAAAAAAAAAuEN8gAwAAAAAAAAAAAAAAAAAAAAAAADuEB8gAwAAAAAAAAAAAAAAAAAAAAAAgDvEB8gAAAAAAAAAAAAAAAAAAAAAAADgDtn9keu3bvzo0/MxHPDNV+l03/qRF0PqSy9c5twMa0qdhzkdO6SPqR3mdOovv7CL+arxOqWelpSxdU2XXuYlX/r+K/dD6jimux7jB+ZivqqqhmEIqcuc7nq3uwipp/WUzrw0ZTKO6Xkt8eS1T8eermP9rhpikV5cxLs+HULqCy+ltvObf/N/NWfsZ3763wupb7755ZD6mU99JqT+/M//fL70sqSaNOWHtaTeJtW/qqq6PqXD9+MULx2rd2zUu13TY5xiHR5jy9oPMdtjUyq5+exiJztO6dJTpdSqOsyp6eWMjxX7o3jwbkztrqpyh5I78Clm7GJqasKy5mEr3VdMbFrWGAfE1rykRznFu567QW2MTzNX4GOsYxdDN5THEXPKXc6am17Kdp4GVNWwS41rt6b7WpuxuCmTLm8pdZjiHCPOu6qdosSasOQeIyc2j7KporlDOR3TtXf7fOVac4Hndh27jFyeuS+qrmFOceyYYxXNI3V7+DA9+8PqrbFdx7Ej9xi5wPMtt3INX2KhzPmmquZj+oV79+6F1CFW77GrCeMY+4RYaHl6k7/H3baO3DBzF5tHpWYe0M4i8sExZ7lRV9UxjvW7vD6NJbaLjbrp/Kvp/5c8MMVLt0P58Rbd7Jyb7SHtRMQFTVXXuK4fPgyplxepUR8OaSFWVVOemMXJz/wwnTxPg6tqjE8z1/Cl4t7OkJdaTcbi0VW5/++Wgdkam+0pnzsOiPu481Ndy11PscDHuJkWB7X9rpkHxNuqwzHt3gyxEuaurLotlOMx1f/5lI7dX+RZWVcmsa/L/eAYl5DteJq3EPMsIhZns+lUVeP87DOBJQ9qMXXO+e4Meas5dmX9IjEenvuqXIsenroJep6DxHabK9kxjqft5OfqkO5rjnOMKW/E7bpZW+qNuuVS3JLqJsm15gKP95XbztVVmoFM+2bl3PSycafiOr72+sVf/pV86V/8hV8KqRcXqXH9yT/1p0PqEpdaeZ+5qk6xce32zz7Rvew2MnZxUveR114NqR/7xMdC6muvfiRf+rf8lt8SUvNq6yMfT5f+3u/+npDaLxLzhkBcBebZ+5pfe3UbAnngyZUsbytV1VL5tVocbZvXArHIYkdX7YZu3kKM05ux33RNh+c9wDzRzRsR72IzLG6w5K2GOJ+8vm7mXXmgH+LsaF3j9kv7MiR2s3kmcJt9vPGyG21jNWvqSez8l65MdrHDyV1dszTo+sk8cctLnmyMlWxd4rzqdrvcQxx31u6F3YuvvBBSL+PsqNmzarbPm150iEU6xVqUgyLyoqOqpjgJOZ3imBgL/OVX0/ykqq7Wz4XUNZbpy/dTsMfbb78dUt/88s2QrRve2sR0PW6Ms7K8NJ43717Fj5X4sScQP7YlfmxL/NiW+LEzJxc/tiF+bEv82Jb4sS3xY2eT05nFjz0D8WPbXxA/duYXxI/dJH5sS/zYGeLHtsSPbVPFj22IH9sSP7YlfmxL/NiZS4sf2xA/tiV+bEv82BMOFz+2OVz82Jb4sQ3xY1vix7bEj507ufixm97b+LFbvWMGAAAAAAAAAAAAAAAAAAAAAAAAPlx8gAwAAAAAAAAAAAAAAAAAAAAAAADuEB8gAwAAAAAAAAAAAAAAAAAAAAAAgDvEB8gAAAAAAAAAAAAAAAAAAAAAAADgDvEBMgAAAAAAAAAAAAAAAAAAAAAAALhDfIAMAAAAAAAAAAAAAAAAAAAAAAAA7pDd27ub3yD78fkQDviJiymkfvLhw5D6maXJzW+Y9iH1/i6l1pASx/ipteXBdTq4ap7ndPI1HrzG5Jjtqrq8n+76dDqlc8ec7fexPKvGmLlpdxEzlmrROKQzDzG1qubjs9/1UPHYKVXvqjpcp/t6eJUq0lDp5IerByH1F37uZ3LGlkpV9GFsmLvdLqS+8MIL+dIPH16F1HVJjyPXhOOSbqqqpinlvGLLm6ZcCXNNaPqy3Zh/IX/5MWVsXZpLj/Hc65JOPi+pddTa9VZZfFi5ngyxTI5rU0/6fjaJY0f3OIYxPs04OsxzOvkar9z2ovkX9rF7zzc95irYFdoUO+E1du9tDc2XXmKXsRvSfeXy7B9Hrv+xSIfNLO5xx+MxX3rfjHqxEubJT2fNrSP2RrnN51u6ZRVtxJFlPrUdeCyTPKrF59FMVLtbzp1VlieTh6umiuYpSnPXsemdmlKpKbb6vDRourI4bK1dXzbG8fQUh4f1lO76Yn+ZL32Is+g5Po7bzSFqyf1kftZ5uRSP7at+XufFkze9zdR0VkOeCsQOfBziMjD2RVU1xpx305u4rM5ddLtIvEU/OeXRNtbAqhpi+hIndfmmm/6kHVnyFOWiafXBMnfTm7wgit3RMuclZPM4jodUzY5r3KmIfewQ69hVPHNVTXFl0c0Y01bD2O1j5LE+zyezw4PmrvcXcRkYR71llxdT6bpXxyZjucNpZuCnNIE5zs3jyN1/rgjHuBuWe+B+9RqvPe7SfeXuPW9EVNUQJ/hrTG3KM9aiqqpjbFxjqsAXF3HhnEfqbrRd49iRV69rnAbcZrlTt1sa9GL/38zA9+lh5bvex5l/f+m8ZxUfx67d0IqXztY4nzzF/qSqTrES7uNKbY71fxdb1tzNMdbcuI6pxOZYx4auJuTWc/Xw2Se6+TEPXS+6y295YrMd46jVXbmOccD9hV/5lZD6y1/4Yrp0V0X/9J/+MyE1r+gPSxrKhzg/aecYL7/wUkjdx87q6uHbIfWTn/xkvvRHPvKRkPrt3/7tIfVbv/Vb06W/6ZvypX/dt39HSH3p1VdCat69zKPtujbbSvl93zqnw2/1Uriqpthn5B2t2BMuzV13mwlxPbWLJXaKK9CLfbdmjxti+U3KcruJbn5gc+wTao1viPIu9tIsDXJyroT5UeZ8VdUSa8ouDg/5Sc/di91Tnh0NcVUem16egQzdVlucJtQSG1fefjzEJWRVXV6mvi6Hc+Tl0rimMw/DrdYGeSM6T37aVpvrf256c9x0auVl4BIr8OmYLn39dgqoyMuKqnrh3osxPZXY9SlHsNy8tPixEj/2BOLHtsSPnTu5+LGbxI+dIX5sQ/zYlvixM6nixzbEj51LFj+2SRQ/tj25+LGnPFb82Pl08WPbXxA/tj25+LEN8WNb4sfOnFz82PZw8WPbk4sf2xA/tiV+7NzJxY/dJH5sS/zYmUuLH9sQP7YlfuxcsvixM8SPbYkf2xI/tvX1jB979n0iAAAAAAAAAAAAAAAAAAAAAAAA4EPHB8gAAAAAAAAAAAAAAAAAAAAAAADgDvEBMgAAAAAAAAAAAAAAAAAAAAAAALhDfIAMAAAAAAAAAAAAAAAAAAAAAAAA7hAfIAMAAAAAAAAAAAAAAAAAAAAAAIA7xAfIAAAAAAAAAAAAAAAAAAAAAAAA4A7xATIAAAAAAAAAAAAAAAAAAAAAAAC4Q3bH+XDjR8Oavkq2H1LqL52OKXWdc25+YjyF1O+4vgqpn1n3IfUT914KqT9/fJgzNk4XIXVdh5A67XbpzOuaL/3iC/dC6iHmfBzTw1q6Sy/H9DTX5vB06ebQdYnJzaWnKV16mqaQerxKt1xV9y7T48j39fBhelh/6Qf/Ykh96603Y77qk5/4VEi9fnizmT/u6iq1rI9+9LV86Z/9uZ8PqesQW0esouOYjn3nV1Ji7KyyYUjPMqdW1bKkX1jHVAnXJfWTQzWXHsfUE86xE55uV57jkjrwMWZ8qXTsOqQSm2J5Vtdj5GY7xB6j5qazGmP9r5g4z+lh7S7TyDLHZ9Fe+jSnnjCXSdvqplgm+WFdjHE8jf1JVdUpFcsQM9af/MmWpakn+zhPmOPhu9g61rGZd835WeeHteRHma9cQ9Mw40Afn8Z8au66MbVDz5MPjVPopZvenE7pF/YXsZ7EHqPiTLWb0TVzpzWPibEW7dsOPB6en/UYTz5242l+XrlPOB6v47FppK42Y7FPWPPY0fQ2TdvJhTbG+n8cUg+8i1W0qioW+BBHtdx9dx1d25+kw/Nqa9ilKtqOHWus//lZr/FRLtfNgmiJh+93ceFcsQLfYmioZnZTY+zKTnGSsOumwXMsk7zkyQN9PnbaNRnL1WiNlx6HOO/qh8u4IRCXS0Ms8KXbVhpyzmORnnKZxRLbx5lqVc3xvoZK99X0CXFW9s7Z09GHVP9z9W5bx+GQ9iJyux6OsY/NbSev4yoWd3fyXIvadUN+mMPUVKTgeIxL8m6O0aw7lrzLlx7W0C0TD4c09OTlbR7yci2qft2dKtKDB2kzLU/q8lZBda1jv487P3O89L6rCbFMbrEy7tYsXeOa4tBzuEoz8Ioj5vqwy9g+VbPrOVXRPJ087drJf0ptdiqOef+8621iuz7EsSNPg5e807Z5V3VTnAns82qrmWN0Gxlxp7pZO3RbiMHULCFrOcUCj1sN0y6OtvnCVWss0jwNmKZnX9FUt4rsVvSpSNc4TbiM653q7vr6lFJ3cXj4/Oc/ny/9uc99LqT+xE/+eEgdKu78dCvjYX32N4lrbFnXD9I7tRdeTq99q6tIL7/8ckh97bXXQur3fvf35Et/8zd/c0j99u/6zpD68Y9/PKQOcWP0sms7D+KIeXk/vQDNW4Dz3M278mwzDvTNHkk3tZriiujY9BhxPI1nnq8f5IxV3kKJbSdPkt/F64xUVU5LfmsQZ1bN9kzjtHbvtp5syi8sunclua/LexEXcX4+5PejVW/EGIDLlz+STh478GyK+ydVdWqmNyk1b+znzr/aV7d5QtlMYZrWkd+V39+nZvvgzbdCag4PGLqJ18U+Hh6z/coracR8+OBmtsWPlfixJ/2C+LEN8WNb4se2xI+dSRU/dubs8dzixzbEj22JH9sSP3aG+LFtqvixDfFjW+LHzv+C+LEN8WNnfyVeWvzYTeLHtsSPPS3xY2cuLX5se2nxYxvix84TP7YlfmxD/NiW+LEzh4sf2xA/tiV+bEv82NMSP/a0xI+dJX6s3sWrXgAAAAAAAAAAAAAAAAAAAAAAAOAbhw+QAQAAAAAAAAAAAAAAAAAAAAAAwB3iA2QAAAAAAAAAAAAAAAAAAAAAAABwh/gAGQAAAAAAAAAAAAAAAAAAAAAAANwhPkAGAAAAAAAAAAAAAAAAAAAAAAAAd4gPkAEAAAAAAAAAAAAAAAAAAAAAAMAd4gNkAAAAAAAAAAAAAAAAAAAAAAAAcIfsXnnp1Rs/urq6CgecjktIXdchXi6n1hdP6eR/bl1D6r1hDqnfcoiXvtzHfNXy1lspdUnZPh1Sxoap+QbceDGl5GNKXJdc4CnbVXWxu0wHx8exxtR8100tqRrHdPgp1qKaTunM+12+9GlJT3Oe06WnKVWzb/3WbwupL754P+ar/v0f+P+E1Fxib7zxRkh96aWX8qXv30t5u7q+DqlLrKJrzHZ19zXFqjTPqYrmMy9LqkVVNV2kZx2rSZO8H5vOahhiFx1LdIyfpDyeDvnSNabOal1T26k8dsQymeMtV1X+1Gb3rGOjHpruashVON71bpe6o5yxMT6LqsoZP87pYU2x7bSD2hyzNuSaEAv01DSturi4yL/wPhmnpp404+mQUk9zmgcMXRXN1SxP6sOxDEgAACAASURBVA7HdOlpairhvKbnFW+66UXHeNdtmRzn1MPvdqkTzm1n1/QITXd0jLedT50fxxr7k6o6HFP/P8W5U34czZytqmKXkvu6MRb4ssRKVs2gNp9iPZlSb5MnyW2+ljgXnWKJ5aF86saO3B3lxjVUOvlS7W2nxFOcmB1jZ3V5mR5WW09yctPhxJnRHPuT6rqUXM0aU7Mgqthp5ClKLpMm210Hvo558p/nonEs7obypkzyqBatcbhsm06b75B2ipce2zo2Pvtdd9lu0vOzznPRPBbn1L7dxWnbtE9zjKa3yfWkmnXHnJc8ebnUPa3dEPv/mPM1dsJDnP4scc1S3UptiNUsj8Vd/11DvPYQB7XrOFNtNmS7epK76OtD3KnIq9fuceTJam56h+vUspah2b0Z4i7JqdKO1j7PNuPzGJd2aZBSD4e8P3OrzqqZrOYe4xaPsrrVwfEYMxbfC+yGVEVP3ciyPEwFnkus2XSK71mqmvlPfhzZKa5oquuscsby1lCuwLtuM2GNNTxPA3LDbLYuq4Z4/NzsfOZzJ6duMtm0rbwHGN8utTtaYx6s89wp5qx7z1iHWP/z09ytqZodTunYi7jtX1Vr7MrGuGY5xGc9tTUh1rM5DuUVV4HtZloeE9c1djhzOvn9++nd03V891RVbz14O6Qe4ibJr/zKr4TUn/jRH8uXbke9IO9jjBdxUIubeNVO72/xDufTn/50vvRnPvNrQurHP3ozVuFxv/m3/G0h9VOf+ky+9EsvvxxS57zLHSe6u11+0E01OOYxMZ58zGuW2JVVNa1+jRP4vG+U13FVFTvC5i1m8wI0v3HuJ07xeeX9rvzaq7nneuHFF0Lq1VXq6/Kpc1TDrtsNzvLo0GyhxLVtVa2xTOc4suRLf8snvyVf+tunXxtSdzGm6N7H0rC17uPLvqUZ1H78J380pF6fHoTUh1cpdVsRxI9ViR87T/zYmZOLH9sQP3bm0uLHtpcWP7Ylfmx7uPixDfFjZ44VP7Y9Np5Z/NiW+LEzx4of215W/NhZ4se2xI+d+43mF55M/NiZk8cTix87c2bxY9tU8WPniB972l8QP7YlfuxMovixM2fP507Ej50lfuzMycWPbYgf2xI/tiV+bEv82Bnix7aXFj+28Q0TP/bsYxgAAAAAAAAAAAAAAAAAAAAAAADwoeMDZAAAAAAAAAAAAAAAAAAAAAAAAHCH+AAZAAAAAAAAAAAAAAAAAAAAAAAA3CE+QAYAAAAAAAAAAAAAAAAAAAAAAAB3iA+QAQAAAAAAAAAAAAAAAAAAAAAAwB3iA2QAAAAAAAAAAAAAAAAAAAAAAABwh+wupunGjx4c53DAMNz8/a9NHULquq45N9OQfyF9Lu2wnkLqjx/eDqm7Jl+121+m1N0upK5jLJMllXZVLad0X+uaDl9jiV3u0k1V1TLHk+dnnRKbB71W9zzifU1Tuva4pmPbxzGNsf7Hk//ZP/PnQupv/zv/jpD6F3/wv8wZ+9jHXgupX/7yw5D61ttvhtRcvatq2sciPaRjx/gJxDGWdlVNm+7rcXOswPm2cvU+HWO2qsbYAMYx1fDpIvYn65IvvcZKWHPqTyq2nd3+fr50DTFvc0o9xfuK3UnTqKtqiR3OEgemPKiNl10VXfMvpLvO1Ts3zLcfpCGvqna7ePIpnTyXyTE+6Koah9iBx1Y/xy56FytwdUV6PKaG3Qz0sRYtSzOoDbHtTEO89JILvCmT3KXkZ31xuQ+pp7m761hoc7yvMc+sci06NQN9xbtuRpZYvXN5VtUS73q6SAU+xmqWz9yaYp+QZ/drzlhTJDXFfjI7xtF6zFOQbihfY+PKmc6Po60nU27XscCH5qa6ZpvXYoc05xv3qWHmRUdVt7SIA31exy2xGxynpp6cYpfSPMw4YsbZYlXVEHvCU1xC5gGxq4O15kXiLXqMXAdjF1tVTZHmejLFPqFtHU03G8t0t0uXzide4m5AdfOufFfTmK7d9s5rfBxrnPxcxGabu/fqJmbD/OwDfcU5xtg1njVWwlO8rzydbDdQciXM9X/J865uZnUY0i+McVAbYie8nGKj7jrwPIs+HtOgtt+lWVnbjR5jNctHNyueXE+6bjQvjXdj3kOJid1u8CHW/4v9s6/F1tjkq2pe0og5xEXNHHfIl7zKa/YKao5lmp9lnoHnKUR184Q8Alwfc9a6S8f0vAzMJ394fJDO3LWOZu2QZxF54lRNLzpUnLbFfA25j+06q9OSGuYQ7/p4HeeieX7SrV5zZ7XGF1vNUN4tEht5+zFOjYZYJuPUlckpFmluWbGedP13nfLzikWa2/RVXNFU21nletK8A4qb2N3kJ7eOU7z0Erfu29nmEHN+eXGRLh3v6xjX+1W13ruXTt5sXsbpYrNz1JTJZVxZXD+M+xh5v7e79BgnMHlfNA/1+XHk/qSqTodY4LkCx0HtZ3/2Z/Olf+Fnfy6krvHSP/DH/nhInbtXEpeXcY0Z3wvk7j2vT1+417xTe+21j4bUj7z6Wkj9nu/97pD6G3/j9+ZLf+qT3xxSX3rl5ZDavDVrJpO1j69ahrx7Exd6QwwUyX1sVe3iyU+VDm9qUTugxiJ98OCtkJr3Mca4jmvfGnRhP+nYvGXVzsCHuGfbxKjELvp3/Dd+R7507lIOhxRxMccV6Be+8KWQ+qUvfD7mq169+lhI3U+fTAengbpe+sjNzurfmv7jGz8RP3bmF8SPbU8ufmxD/NiW+LEzqeLHNsSPnTlW/NiG+LEzlxY/tiF+7GnP3BI/tiV+bEv82Jl8iR/bpoof2xA/tiV+bEv82JmMiR/bEj+2TRU/tiF+7MyZxY+dI37sqYkfO3N28WObw8WPbYkfO3d0SBM/tiV+bEv82Jb4sS3xY2eJH6tuyQkAAAAAAAAAAAAAAAAAAAAAAAB8Q/EBMgAAAAAAAAAAAAAAAAAAAAAAALhDfIAMAAAAAAAAAAAAAAAAAAAAAAAA7hAfIAMAAAAAAAAAAAAAAAAAAAAAAIA7xAfIAAAAAAAAAAAAAAAAAAAAAAAA4A7xATIAAAAAAAAAAAAAAAAAAAAAAAC4Q3yADAAAAAAAAAAAAAAAAAAAAAAAAO6Q3cOHD278aByHcMC8rvGE6diU9pVrTyFxOc4hdY3ZHuOX1o5LOnNVTVPK2Ol0euZjh1ycVfv9PqQeDumul2UJqQ+vr/KlL/b38i8kTT1JpiHdclUtlZ7X6ZRShzFl7Hg45ku/8NL9kHr/hct06XoxpK5LepQv3n8pZ+yjH0t3fXj4yyF1mlLzuLjc5UtfPXw7pj/7Vw6HoekzDnNqesOSnvWwSw1zjRW4zVj3C31f+CS7XdM6cs7HMT3NW971Egu8ppTz9DCqrpdDSp6bDnyIp893nTuyw3XTY6xTOsF+So/jGIe8ZU3d+y6eubrRYYllMsUKfLFrLn2KOa/cbPOhzeOqU6UeI7eOt68ehtT7F6nzH/MUpGtceY6RK+nU1YQhd9FrythVLJM8e6mqaZ8K7Xq5TvmK9WSMZXLqpnxtzpM4q2tnRnEWXEvs64bYMPNcNE+hq6qOqRLG+UuT7YozkKrKHcY6pJPvYnc0z/HUXTfbHZsyNsbHUd3j2A2p0A6HNGLmS68x29WNic08YY7NdsgTgVrjxeeYOlZ6lPnScxwuq+3h88Nc07FDHvO6oTw/jjz5aVtH7uvmOGw19T+6RaOs6vqEvCGw66poO9YHzaAWH+UQR+pqJlaV6+gxLqvbOUYz74ozkOu4UzHEbvCdXwlpS9M6cpGmWphX9NV1Vk22u+4o2+cxMZ/8dk1viH1d05/EQS3XhNyyqpouupk75SVkN+fL66lpTHPR4zGuQGNftcZGXVW73EXHtjOfUsbazj/38PMpDuWxB56XvJiqMVakPLs5xhFzamZG7WgbfyHvgd+iAlc3n8ydwtjt6Gan3B3lu86tupljN49jjvOEvK2atVOIdb3FS4duH6+7dKzh+1yRYhcde6O4bnjnN+I0OBbpsdlgaXRz7HTsLm5Ez0vqRZel6UWHOJ7mXb41trtp31TRZikXO/BTnhq142ncxzvlgSnWkzzvyls3VXWKL5h2sUiH2J/M3R74FAe1t69S9z7FcSsvyavbvZxjs1/jYL2Pm65Lt3odTvl9Rzr2ek6Pcj+mjFXVfJ3ueo4nb152xzXLOjZlMsUp43WuwPEVT34zW91bnrzuzs127fZ7Hy7xJWYs0jyfzN371dXNAIwbfvmX0h74L//SL4TUv/IjPxRS/+i/9+/kS+cya15JxIc1ddOby8uLeOlUCb/11/6akPotn/mmkPprvvXTOWMf/fjHQupf/1/5m0Nq7k+urpp4jBdfSPEDv/RXfyYfnjx7sEZVdftKeY6RV0Tdi/KlmRTmYSuZ47vX6raG7l2mh5XH6k9/6oWU+k2fiPmq7/nrfn1KjiWWG/W63Gy24sdK/NgTiB/bEj+2JX7s6X9B/NgmMZ5Z/NiW+LEzh4of2xA/tiV+bEv82Fnix878QkwVP3aG+LEN8WNb4se2xI+dubD4se2h4sfOnToQP3b+cPFjG+LHtsSPnbm0+LEN8WNniB/bED925uTixzbEj22JH9sSP7YlfuwM8WMb4se2tvFjz77CAQAAAAAAAAAAAAAAAAAAAAAAAD50fIAMAAAAAAAAAAAAAAAAAAAAAAAA7hAfIAMAAAAAAAAAAAAAAAAAAAAAAIA7xAfIAAAAAAAAAAAAAAAAAAAAAAAA4A7xATIAAAAAAAAAAAAAAAAAAAAAAAC4Q3yADAAAAAAAAAAAAAAAAAAAAAAAAO4QHyADAAAAAAAAAAAAAAAAAAAAAACAO2T3a6Z7N370xn4NB3z5wSGkXp/mkLoMTW7WeQmpw5QPTonzkDI2DF3OYsbGMX3HbV3iTXVXPp6OIXVZ0/GXu8t0bMxY67SkjO2m/LRSiR2P6cxVNTY1IT/rXT55dv9+KtLrQ2od85Lq6L////qBkPp93/d9OWOnOZ38F4dfDKn5puY5lWdVnU6pIq2xYe4v0qXzsVU1Var/x4o1/HRqzv5kS5uz3Lhiq19jgZ9ih9CefZpSas517Oequo50XdPZc3c0xma7xL6oqoZ41/OSCjx3720HfppzB54q4Ri79yUOqFPTA9cQ60m+r5ivWrvWkevJMXbgYxzp26H8GJ91M2jFmjDHjI1tj3GLS+e20w70sV3WtEuXvn//fjq4nVjNqf43/ckYa1HsRfPAUVVrrOJjLLI5ZmwaupqwpgKfYpnkwbppHV09yV1KU8MvYm/TfQo51+EhZiwX99SNas2lY5FOcao6xCu3vegapze52S65VLqlWq7CY3wcp9h22tn5HEeHPG7N8dJDXOXlSUJVTVPKezcw3Wot1i9gnyxXszFOnKpqiJX4dIzdUaxFzQykax27faqETT8Zm+3x2CwcjsfrkPrCC2nEXHIljNPFthpM+1RF17g+zQNiv5kQ68kaV6/NBkvXdvLgMuRZdOyi57jyXfpWGRfOeXRo1izN5P9drCKffOk4d+ob5i7lbYmVsNZ8X7fKWDNRyANmTG63UIa4ubneotXnzYSmfvftOq/F4nIpP+hut2GJ9X+JDbP9wxun3DDjyXd5nzre9RgXDlV1PKXDl/g0x3hT7eb8kNf8cemcy/NdrMVSas5Y3j/f7/fput1+VzM5im1njfPYZWk68CVvCMTxdMiNo31NE+9rnmNXFud8a5xZXezTXnHd7o3GkEelvEVSNebpTTz8eMzzrtxjdJvzc3olkV+q7afUOk6H5tL7PAPPDyuv1JrGUadYkU65E85vIeNoe31KM//qdhtOeR8vdmVju4UyPfsUJXdHYzexenB6GFKbner8sOKL3VP7iic+zSF3lHF4mNuGeXz2atb0wE3Dap7WdczYGHc5DserdOl+D/zZX10d8ovyblTL88n8OHKZHK/iSm3X7Hjl90cX8RX/9TG+j25qaDNFaXaDY4k9ePB2vvThkCpS7qx+5Ed/PKT+0F/+KyF1al4Bde914/TmEGfv7ah2iA37d/7dvzUdHDurNfai/Tw4yvWke5N4y33R/CYlPY6rQzOUXx3S4LLGZ30R9wAv4qpkaPZAmo3TJa874ixiO+6IHyvxY89E/NiW+LEt8WNniB87c2nxY5tLix/bED+2JX5sS/zYlvixLfFj55LFj22OFT92/tLix7a/IH5sQ/zYuV8JaeLHzp1d/Nj2WPFjm1TxY9uTix/bED92LjlfWfzYGeLHzhwufmxD/NiW+LFzlxY/dpP4sS3xY1vix84QP7YhfuxM6lPGj92qZgAAAAAAAAAAAAAAAAAAAAAAAAAfLj5ABgAAAAAAAAAAAAAAAAAAAAAAAHeID5ABAAAAAAAAAAAAAAAAAAAAAADAHeIDZAAAAAAAAAAAAAAAAAAAAAAAAHCH+AAZAAAAAAAAAAAAAAAAAAAAAAAA3CE+QAYAAAAAAAAAAAAAAAAAAAAAAAB3yO7bLi5v/GjYT+GAXx7SN8t+4jSH1MPS5OY4n0LqejqG1GVJZ5+mXUgdxjVnbBfvel3TXS9LuqkxlnZVjfnS8eTrmu4rp1bVEu9rv0tFWmvK9jynM7ffxRuHeOl49DgPIXVYmjI5xRo+L6mK5py9+pGPpyN3F/HMNV3sQ+owpLv+6KuvpVPHVllV45Tq8FgpdT6mZjvumtaRXcRWf1xys40Zi+VZbeOKiUPFKnq7Sx+PKXWMbafrMOp0ylUlt+uUOu7SXU/3bo5iN+zHVJGOx3TpYUi3fR07hKpah1SRYv9du9jRxWbXP6xcw+eu1adju2a7xAYwxSFvjscOc9eBx/Sl4tOcYj3JY0fbbHOnEE2xKuQHXV2P0TTqONC3M6tcy9Y19oRr7KJjxmrsmm2cbe7upeE45qufd+UeI09+8uiQK0JXQ2uOvVWuhBUfZXX1JJuGWP9jy8qz3GrvK8onH5ZUJt0kuaYx1YQ1PuzmUcceuLpOuJoFUTp2brOWZxHx5LkOLmOed8VFR9WQCy0W2DSl2fvpdMiXzl30Lq7UxulWlXCMTW+IVXSeYxWNs4ixqyenY8r5GDM2nPJmQtMhTGMaHfL0fjfFhV4cGtqHdex+Icjzk3FIFbi62VE3bMVetPuKfi6WIY+28VHmVt1Ooce43MoVeH+RKvDSTYNzga+5F83TybyGrFriiinPjuIyrinwPEmo7nE0tSh24O0MIk/Mcpm0GwLpzO3qNY4OeSw+5fl5124P12nUy4NaLpM87lRbCeM8oesnc0fXZGyXF3p5HRcr8Lhvpjd51JvjDGTq5k6NMRXLWrcarJO2nuTkuHE0dN1Rc+mct3jy3PDajM1xOK74OPK21BKnRtfX1/G6TavP3ftylSpwXKi9G3G/q569dRzyhlXXWXV7m6nAu76q222IybdZ0VTVcXz2nYpDrN67OAVp97sqt534ciq/STmt7YZtOvkxzjbzo4x78+8cnnvCvEMeG2be5bjdu5LdLk3q8mwzvyisrmHOzavbOLOKHfwam3x169PjMe2L3mYuWl2ZHA5pQpi797ynWlW5deQt2zww5RK51y2XDnEvYl1TmaxxKD/FV4HVbb/nPmGJGTst3QZjfJGed29O13lFn8rk7QdXMV/N/mTujpp4jC7s4fphKtKf+qs/FVJzZEJeGrdNun2jEeSBPjfq6jYE8oJojaPtW19+O186T8BzPMbVw4ch9Rg7ulaOR8qNOj/Kw6bzFz9W4seeQPzYlvixLfFjW+LHzp7+mVPFj22JH9sSP7Ylfuxcsvix7bExW+LHnp74sS3xY1vix84cK37szMHixzbHih/bED+2JX7szJnFj50jfmxL/Ni5S0fix7bEj22IH9sSP7YlfuzcmcWPbc4sfmxD/NiW+LEt8WNb4sfOEj9WbaQOAAAAAAAAAAAAAAAAAAAAAAAA8I3EB8gAAAAAAAAAAAAAAAAAAAAAAADgDvEBMgAAAAAAAAAAAAAAAAAAAAAAALhDfIAMAAAAAAAAAAAAAAAAAAAAAAAA7hAfIAMAAAAAAAAAAAAAAAAAAAAAAIA7xAfIAAAAAAAAAAAAAAAAAAAAAAAA4A7xATIAAAAAAAAAAAAAAAAAAAAAAAC4Q3Y//PbbN350GtZwwMXlZUrdXaSrLaecm4uLeyF1Pg4h9fr6GFJPyxJSpzGduarmSmUy7NJ33KZhF8+dMlZV4zCl5CHlfNzF1LX5/Ny6psNPc6wnY7qvJWa7qnkch+NVSJ3i4YdY4KfTIV96nVMdzvk+zamKLrGO/Yf/4X8Yz11/52/7bSH1P/nCnwypr7zyWki92KVWWVVTrEfrmirwEHubdyE9zTWee13nkPr22w9C6osv3o+5qopdysWwD6mnU6pja76rXiqxcUydVXvp/T6NDqc1XXqOXfQwx66s0qOsqus1Felul+56ntPJc29TVYd4X2Ol1rHEEosnrurKZIidcO6hT0s6+S4OHFW1i18+neNd1/zsFbiqxlyHc5nEEj/GE3dTjKop/UZuersxlec6NAP9OKaT50vnZrvGh/XOxdPJY9NbY5mucTzNNbCqKg5Mx0PqTy7jJLntRacpT/niXDRPCGM9yeNOdf3kkvujPEtoJoRVU5y2xZlVLvBcJtVN75clPs04bDXHdr1oVxOevcCH2Haqe9bNwNT2hPnS8fAxnj13/uspLhJzBa6aY183xGq2HFMFbh5l1cVF6jFy/T8d4/QmVv6qWvJd53adE+McI5dnVQ1x3THFIl13uSak2XtVjXHJf4qDWi7P05LqSbPgqRrjyJJrWc72Gh9WVTU9Ste40om7OcY4xvE0muMsete0jmbhnHcbctM7nFLG4oSuquuD88PMPWG7Os2TujwcD3G5NMTbbvqiqlPcnxxiLZqbjaOueuf6H+cJeVndTAi7MmkmdbHDWfJe2dSs1Hb7OKjdokzG7nHkXaluW+nZF5jt0qCZEsa94qb+dx143gPvevdbrTvypXe32MdY8zy2H0/j9D7ukDdz7K5hDrEO5wo85wVR14Pn9wLHPKiN6Q3RkJttN+XLzSd3ZU3Ty6uOPm/x0rllxYxN3dxmjaPtqZ59X3TfjWnzoXmZEtxyp6IZtvZpAp/7hIdrmoHv9t2bxDz5ye8KY03Yx4dVVcfTw3julPO8tu1e59WumTvFzipOdJspX/ti95j3MXKZpJrQbOJVneIEpunKYue/i2uWXAOr273JfcI6xEVit1JrXknE0WFd8oB4q4lu073nETNe+tiVSd7bz3OMU3ztNXXT4CXOIvI8oVk3dJe+uroOqc179jg65Ce5dJuu+YVdXujlkeUQ9wCraneRhq28o9Usq/Nr366K5s7qNtvv+e1Sda9f8/I2x7+s3ZbUKb4DmmPTy3e9xridOe8Bdn1dXtQ0tX9TZOLHSvzYE4gf2xI/tiV+7AzxYxvix7bEj22JH9sSP3bm5OLHtonixzbEj51NTonixzbEj50lfmxL/Ni534ip4sc2xI9tiR/bEj+2JX7s3JXFj90kfmxL/Ni5g8WP3SR+bEv82Fnix7bEj22JH9sSP7YlfmxL/NiZk4sf23hv48eefdsOAAAAAAAAAAAAAAAAAAAAAAAA+NDxATIAAAAAAAAAAAAAAAAAAAAAAAC4Q3yADAAAAAAAAAAAAAAAAAAAAAAAAO4QHyADAAAAAAAAAAAAAAAAAAAAAACAO8QHyAAAAAAAAAAAAAAAAAAAAAAAAOAO8QEyAAAAAAAAAAAAAAAAAAAAAAAAuEN8gAwAAAAAAAAAAAAAAAAAAAAAAADukN237aYbP3p7XcIBPzfc/P3HXR0OIXXaNd87G6d08ovd/ZC6v7wMqW++9WZIXdY5Z+zeRTr5F77wxZB6Maab2m/KfyM9jmlMRbqe4n3FR1lVY3xeY/x63el0HU+dEi+meym5mpzP8zGdfN01J4/GWOBjU6RrSLt6+CCk3r//UjxzffGLXwqp3/It3xJS33zz7Xjp1O6qmscxrOmu5yVV79N8yle+vEhPc42XHlJivfjiiyH1dGoyVkO6r+OSDm/qWHPhGmoIqWvs69rbyq6vY6vfp4wNtQ+puaOrWIuqakhXrqurq3TueGxriE9sjqNt5ZoQK/CQ77mTS3QcU7tbjs14mrN+rHT4cErHXsQOobpimeeY8yk9jmlNjeeqq6KXa6r/p3jydYitY21qQi6T3ItW09s0l55jDz/FCeFxSQN9zanA13jmqlri88pddFOLOvlx7Haxho8p27e5qVY+fI031V56jNVsjjV0jM12aap3LtFmFnGKJ79lgZ+Ose3ElcVuTOW5LF2ZxJznIh1iJew6jFqX1LjWOBdtsh0zllOrKveEFctkidUoD/TVTdv2+zizij3hHGeqVTXEAs+zzVxiubyH3PCqqmLOc3cUU09znOVWLfm+YrM9xaZ3ERv1Eht1VS1xBboe41bDlMad06lrHbFIpzhYj/muu4qQq8oSe5wx9jaHuDmzH1O7q647ytOAIU4I25HleExzp/10EVKbZXU7lMenmTucOfZ0F7mjyxOn6jqMStk+rak88y1X1RpnjGus4mNu9bEHzh1C9ZsJsSbkfaG8ZqlaYpk0RXpIj2Pu+sm4eXO75VIey7u9hry/uHZPM105z6GrhlwocY59POYRs538J3Psopt5QrNJ0o2nsdDyjDH3k0vcxK6qoVJvlqtoMw2OY3F11SzvgXdL47g06FZqa17exonuGjfi+s4q7kV0Gyj50nHc6Xds4xTlIm46HeKo1A30eRWZK+Ep1/92lRhdn5rG9cwO183Ozy7e9TG+NdvFTdfDnN69VtUat1Vzw+yG8uZx5N2G3BPmKV8eG6ZYYtV1s7nDyRX4cLjVq5Sms4qD2jG+9n0X7wXiyePCIY+272JfNG6wx+E4Lln6sSPf9S13dNNV8wugqjkOx0OcdzWXbrfaYqEd1MhNbQAAIABJREFUrlJNyAPT2s3Ac+jCKRbaFGvRssR3CjlkomqNC73mZXfc+Wk29qt2seU+eDPFDzQ7/7HZ5oGjutEht51cE9p9jDW2jryZkKfQn/ulz+VLX16muIjLHDUR7zo3zF3u6bpmmyfJuWVtzyx+rMSPPYH4sS3xY2eIHztzdvFjG+LHNsSPbYkf2xI/tiV+7AzxY9tjxY9tiB/bEj+2JX7szHnFj22IH9sSP3aW+LEt8WNb4sfOXFr82Ib4sTOp4sc2xI9tiR97b4kfO0v82NMSP7YlfmxL/NiW+LEt8WNb4se2njZ+7FYvMAAAAAAAAAAAAAAAAAAAAAAAAIAPFx8gAwAAAAAAAAAAAAAAAAAAAAAAgDvEB8gAAAAAAAAAAAAAAAAAAAAAAADgDvEBMgAAAAAAAAAAAAAAAAAAAAAAALhDfIAMAAAAAAAAAAAAAAAAAAAAAAAA7hAfIAMAAAAAAAAAAAAAAAAAAAAAAIA7ZDcON3/0TfdfCAe8tq4h9a19+qLZT45Tzs0cT344HkLqtEuXfvXVl0Pql778Rs7Y1dXDkHr//r2Qup6WdOp18wBupMePxK1LOnypVJ5jTK2qJeb8VHNInYZduvSazryu6cxVNSwx53O864tUCee5ufQ0pftaYwW+uHcRUo/H65ix5mH9+I/9eEj9Dd/914XU//w//wshdZr2+dJrfJrDkAp82HZAj196bb6QuMS2Nc+neOyzZ7u5cNUQ+7q1Yv2PDfMwN5fejel55SpasektS9M6lkpPc5hzX3cMaWu89JhvqmvXwxCzHXM9xgpcVUvsrNb8NMdY/3POcmrVKTbbKT7KObed7nGsuZ7Eo8d96oFPpzRJqK5dj7HAj3OsovGmxqnpyo6xhg9DOnyJo0NXEZqecI1TlFz/89BQVcuSuuh8eG55axyp5zh7qaohP69YRU9x3OmmXY1m7Mgnj6m5G6yqcYqzzViLdkMclfKMrrvraYqTunjy/a6Z3uT7yi4u0smX+LSWbi6ae8J2TAymeOaqGuOq5LSmTjjPQNpKmFcWeaBvJj+5yXcz8GwX16d5PjnFdlfdjLHrhPMCs7nr3P8P02VIPR5TP7nb5xl414HHETM7HNJA3w7l8ykdnjurfZz9dGuWpp7kX8hP+hR3A8Y4+Xnn2iExzycrT6G7Oca6pALP3ey6S73NEB/W1dVVzljuE/LO0GXsortW21TC/DCHOElu+thu3bGPGcvz87xvlHubaldqa5z8x52K06m59Jl92McPz0uDXGJ5aOgGtaXZqcuHpzKZ42Kquul9LtI8dhy7x9F0ZvGmd3l+kjvwOMutquUYD49T2Sk+jmF49lluVS2xceWheOyGrTw45An8Ke9oxZrQdJL9VDYfHJfVefux36nOa/bYMOOSvKq5sTw3ytPFvMs9dyvnXTMwPXsNb98L5CJtluWxPLtN11tN+Y5xotvkup9jpN845r2d/Oqqm9vn59XsWTVz7Nx2uo3oePKm1ef9rm7etcS7Hsc0bB2XVE/21WyhNDOBU5yBN9OAdGx+R1lVU1zKXV+nu85bzbu4cKh20zX2J3koz9tK3TqtpvjqKvcnY+4Uutd5zY5uPPb6ECeE3VCeJ/+5P5nyIjHPwHO22ldXOQAgjh1LXNFUNQNA7uryllSd2vtOVSVvP+b6f4zNNj/KqpqPqdDyDONyn/rJvKyurof/xKdeC6l5C3GJ/eS7eH8UD8/rjliN2j28XI2GuBYbxvie/TrFY1TVvXspUOpWb5zzXcUXW9UtW3JHl2dW28mP+LESP/akw8WPbYgf2xI/duZw8WMb4se2xI+dOzwdK35sS/zYmWPFjz3lpcWPnSV+7MzJxY89JfFjW+LHtsSPnSF+bEP82JlLix/bED+2JX7szLHixzbEjz3h3OLHbhI/tiV+7NwviB+7SfzYlvixM0fHY8WPbYkf2xI/tiV+bEv82NaZ+LGcFQAAAAAAAAAAAAAAAAAAAAAAAOAbiQ+QAQAAAAAAAAAAAAAAAAAAAAAAwB3iA2QAAAAAAAAAAAAAAAAAAAAAAABwh/gAGQAAAAAAAAAAAAAAAAAAAAAAANwhPkAGAAAAAAAAAAAAAAAAAAAAAAAAd4gPkAEAAAAAAAAAAAAAAAAAAAAAAMAdsnveGQAAAAAAAAAAAAC4i/6mH/iT7/9F/mJI+8//hu98/zMAAAAAAAAAAMAH0e7PLoebP7oewgGvXuxD6sfuvxRSf+0659y8OCwh9WcqpX7+dAqp9/eXIXVZ0pmr6sUXXgipqbyqTkvK2JgPrqrTsfuNJxrWlLrm5KqK6dNuSsmn9KzH+OG7eW7qyTCkUhtjmS5LLM9YA6tqnNLJh3EMqVcPHqYzx0K5urrKGRvi03z7rbdD6r1790Lq2tXAsdJdL2sq0lwF24a5rukEuZ7cKrXJeFVu9bHE1lO66yEeW1VzrOHLkkssnXkaYpOvpvnMayqTWvN95Y6yeRxjbJi5mo0xY2vs6KpqH4eeNd5XroRLrPyt3Zie5mlOtWgXO6ulqaG138dLn9J95SY/xQddVbnMjksctuKxYxwQlzg/qaohj6dzqqKnOGLuds13ZnOR5h6j64Fv1TAr9nVzrqKxPGMVq6pa47A1x95oXNKld7mTrTrF/n9c0uHTPs3PK87A86OsqjVeOhZYXW0WGo/bDU2zzT3hXLHZxjp2OKSMVdU0daPek11dp2nbPj6stRvUhlhoU+zel9jRLd0MfI0DfS6x/Cjbx5EPz31dHujX2Mfm61bVbhefZqyEubOaD80M/DbzhGkXU6eLfOm8WFvn65A6xMnP8TqeOQ/GVRcx53Oe8k15upivfKtKmKeyeW27rk0VnWMNz0Ne7m3ygFjd4LLLXXQc6C/2zfQmDqc17WLDzHcdV3m7XVMoSxyOhzjHbuZszWSz7c1iHxtHluPcXPsi95Nx9XodZ9FDXJ/miVN1DfPUTeCDKe4aVdVQeSYQxfp9iFOjqZq5TZ78T9Ozd3TdzL/p4YfY45yOcUHUXTpPf/LEbBljHxsXRMvcLpfidkGc1M232y64zabrKfcJsT9pHeLsaMi1KPYYbYF1C+e4hIyV7OKimXflRUmeCRyPaVbWNsw8bbtNmeQ6NnUz8Lx7M8SurL3rLN9102PE1pFHrfzWoKrG+LBysz0e4uw9Lhyq6nRIzzpvEuYKvLSvrqI8Ad+NqekteTRuMxafZp5j5O2CPLevdnsnDnlTnLO1becUG2Zed+dz32aSXF2BD3Hnf5ri48irjqoxjnr5PeQxv13Kk4Tu/dES37PnZfUhvitcuwCAPOLGStRsOh0O3fZ7N7ikk8fxdJ8nybnhVY3N3k4cO26x31VVQ9wG6V7I5a377q5vMRrnRj/GetKuXrslf3rZ1/STXQWcYrv+4ue+FFKbPae4Zhm6ReIaK2EOmcjvFNpXnE2zvUX9/7mf+5l86YfHtFP9yU9/KqTmHcL8Om/fvSs5xDo8xPqfX2dvryx+rMSPPfE3UqL4sTNH3yJ+7DkSP/bUqeLHzh8vfuwm8WNb4se2xI+dTQ9p4se2xI9tiR/bEj+2JX7sTKr4sQ3xY2fOLH5se6z4sXPEj22JH9sSP7YlfmxL/NiW+LEzJxc/duZw8WM3iR/bEj+2JX5sS/zYlvixLfFjZ4gf2xA/tvWBih9rZp/A183f/if/7Pt27h/c/ujH/zt/7/t2OQAAAAAAAAAAAAAAAAAAAAAA4IPLB8gAAAAAAAAAAAAAnqfXh6qqzzZ/9Lc56vVf/ZPAT/rJ9hcAAAAAAAAAALizxuedAQAAAAAAAAAAAIA76vXhq98Fu81Rj3+M7J1/b39S575NBgAAAAAAAADA3bR73hkAbnraP2V5Iw7s8QMfncofrgQAAAAAAAAAAPgAuvGBsPf1qHrs22RiyQAAAAAAAAAA7rjxeWcA+Kpn+1OW79hGgz3pw2T+cCUAAAAAAAAAAMAH2W1iyYLPrl8JJPP1MQAAAAAAAAAAds87A8BX3eZPWd7wzh+ofPxU/nAlAAAAAAAAAADAh8L7F+X1KJDsfb0KAAAAAAAAAAAffD5ABh907zLS6/Ff237C7NHPRYwBAAAAAAAAAADcTY/+sOWNP28JfB38k1/68vPNwL/wyovPNwMAAAAAAAAAfNDsLnY3v0E2jlM44O15CalfPrwZUi+GJlzl23ZjSP3MPn0u7ZOndOa/VnNKXppvMg0x5/OcTr6u6eRrpVuuqprSXZ9O6ba3D/drLh0z9s6vpMTl2YOPcom9C7eIe1pTgecHXVXTlFrH4fo6Xbkp8CemPvMnwx7Fhz0eLvboO2U//XM/+07qMqcLPHyYbqraGp46jBrHVOBLX8fS2a9j6xhjqQ7524xT02xPp5Sx3RTvK/axY7zlqprj45hio15iy2qfxhKzNsS+boqXXof4tLqubIk5m2OBr7GK1tDUhNy49nHIG8eUOscz52Or60Mvx8uQmpv8sDYVJff/uXEssYseuw58jvOEfZz85EsvsafbxbG4qtbYrpeYmkeldqDPv5C76DXe9dLNrE5rnjulS1/c4q7HPLepim2raTy72Cfk/rm6+p87nNN8TIfmMzf3XKf4rPPcaYiDxzI0g1qWn/UyxpPf7nusuZudxjh7P6bK385Fd7Fhnm4xx17igFhdTciNK3dW3XDaPK/ci+ZOeM5To2McOaqWJa8xU+opjjvjkFKrKg/1TeuIrX5qOqNGnvINzciSCnzaXTSXjtUszzav4zquNcTn1cyi4+PIJdY226aL7qpZOrbrRec8duzSpe/t74XUpZqGee8iboM0U5SUeowdeDcBr8qtI3Zlc7MoaZrtkp917Kyu87DV1YRjnKLs9/uQOsWTd/OXRh7Kc2peYK7dhtX14ZAu3SyN47gT+4R2ipDvOm8/Zu30Ju9zLLGe7XK2j10/GRvHGv9ux5An/6f0oIe28dxi57PZTFiaRzlU3Pk8pEY9xV2OuauG8yFuF+zj04rnHuK6o62ieSWX5127yzSBaYfyJT6vPJTn++rfCsQRs5mL5l2OeOZhaqZ8U6yiY6yEh8NVSG13b3Kx5aVBXiQ2k4i8vd4NTEMz5OUNlnzl/KalG9Riea59w4xVNBbaKU4j8uxlN6XZS1XTunZxzbLEFX07MDTNNr7RyJc+tWNHfpEYK0renM8T3eY9S9VpjYvEW0z52obbvCuJRTbGjq6Zi3btdoybrg/nNIFZ4/b6FN/gV9XpGGcRsXHluWj3RqKW2DKbt09xyrfEzYS2TA6nXCa5i45xC91sc8oVKfYna5x4dW2nliVuq+Z+Mp68aR1dxvZjmoTs8vujWMd23fZLnrYdDnFCmHc5cgXuXuLkkb7pcHI32XVWc/e8grzBcq9rmG9/+Y2U/OnPhMTllDeO4jZ1fGVWVXkukHd08ypvuyoRP1YlfuyJv5ISxY9tPHP82OMfAnsU39X+3conHfX4gWd/cuNw8WNb4sfOpIof27pd/Nhzsd/tSvzYOeLHtsSPnSF+7MzJxY/dJH5sS/zYlvixLfFjZ84sfmxD/NiZY8WPPT3xY2cuLX5sQ/zYlvixc6nix7YnFz92k/ixM8eKH9sQP3bmzOLHzpxZ/NgmY+LHNsSPbYkf2xI/dpb4saq4EgY+LG5Em92IEnv8T1b6w5UAAAAAAAAAAAAfHGe/Mtb+3cp3edSznRwAAAAAAAAAgLvAB8jgA+TZ/pTlu7H9w5UAAAAAAAAAAADccX/Xn/3h550F+MBKf4J+6/e/dP9d/uazxYXeOOpROOiTfrL9BQAAAAAAAAC4wQfI4APkmf/a5JN+58bPBZEAAAAAAAAAAAAAPBfP9kdkt0c9/jduXx++5o/dPvpJPfZHcB/9BAAAAAAAAAAe5wNkcEf9jj/1F593FuCD7+n+guXWH3j55fckHwAAAAAAAAAAfOP52/7jP/e8swC8Z37vWw9//0v38++88xWwp/0M2bMd9egQXx8DAAAAAAAA4EnG550BAAAAAAAAAAAAAIC76PXhWT4u1vrs+pXvjvn6GAAAAAAAAABPsnveGQCqqv72P/nnn3cWgPfe97/55h94+eXnnQsAAAAAAAAAAD7o/tPv+5uflHR9fczHLvHTRWP8S7XL8RTP3fyZ27/20z+bTp5zNqTU02nJl65Kv3CY032N8XtMw25KV12ajOWc76Z08nWe47mbj1TNlW5sXFPGliE96yE+rHoXxRJM8b7WeOlhbb6ttca7nueUOu7fVZT1733r4bv5teD9+0DYO981e+d/fYYMAAAAAAAAgK1dTS/e+NG4S+/LT8cUyBJf09dpauIPfjIePr/9IKR+4v4LIfVwOITUcW1CZHLkxLI8+zv5tQt9qBjcMMWM5aiLNQaavPMbKXFNYS67HGsyxZiMeMtVlWNo1jWGQw3x5GtTRXNFyoFBh+scGAR8Y/r+N998r071L3/k1Xf+8dL9++HXjnGkbuXDc6TgdLFvTn64Cqm7PAM5pe596qL9drs01l+f0l1PU7qvKQazDjE0s6q64TYGUI4pdczhw93T3O0uQuohPsopDohVtRxjRYqH52zfds4WJ2ZLnIEsu5SxfsbX/EZ6mnFS1kz55rnpMYYhPY5dU8Of/UHX7UKT85QuP8qqig+zqWZ5ep8bZhuunXvCXIumrk/IcvB9Dshe5tiyugc9jqmHzwU+N6H5qUzGsami+XHsdmnsyGH9rTkW6W2qWTuLaDrhXRyYYi3a7y9DavcoKyevscRyd9ReOpdJ173HgX5Jl34Xc4xnl1tWu4+xyx3OlFJ3MfX6Ol+55iHlbYhj4hrnXXky2e/t5P/UJ3c4MWPtlcd46VOshPlxxMKuqhrzWN/sxcWZajNg3vI/f8o9RpwQtnOMZsmTNp1qyY8jpS7dHmCuw7nAxrgqaf+7xGbGWHlpEB9Wt0jMe5u5E87TgDza3vK/0MtH5/+Ibuw25/OzziPmeosd8upmEd1qKc5AYsNsF855djTFfjL/V7ttTejylg6fc8vq3oZkeS6at1COsd1N3XuBOZbZ3DyslLE5/qfIdbvBOsuzzXaOkaeEp/iw8snbKpqnAjnjeY4xt/1JNzKl1Hhbu1hP8n+yXlUX8c1XLvBm57PbQsmbP6djXlnk94z5yhXH6mbjs3mScVA7xt3Fqlpj87g6pqXF/haPstWNPM/e+ecBsarmWKT59Wl2jHWsqsa4wXibmVWu3tWtSppnmSf/MbXd+Mn1/9S8sIgNr93Ryh8WucXO5xQ/z1FVc/50SP4KRi6ydoGaxcNv80oif7LknV8JaV9+K71hPMY1yz6OtrfsypqxI7/O6JpHsxucvwwSz/ylL34hX/qFF26GTj0uB4pMU3p1O+T4lm7ys4+vX/P2+5jni9vKL35M/NiTfyMlih/buGX8WJhfjfElflWtsWHmndWHh/iSKE7qquoy33WsCXl1PHUvRPJM4XJMhdbsncYBdzc1j2Oq/N4t7izll27dvusQ17Bxs7nGWEPbl875W3Pdy/R07Cn2NnndUd1mRb50nuGcDbo4PVarl9usuN4Lrw/12fWr/1tV+27hUOLHzp5c/NiG+LEzqeLHzhA/dpP4sTOp4seenvixM78QU8WPPS3xY1vix7bEj505s/ixc+n50uLHtsSPnTm5+LFzJwhp4sfOnFz82FOeXPzYlvix88SPPSXxY1vix7bEj22JH9sSP3bm2Hhm8WNnbCr/u/rbXMDX05/4LX/DzR/FjrK65fE+jk0PH6TQzDaA7Jd/+VdC6iFGFTXL4xyRdLv3ys3maY5YisvI6l/GP/uubhtAljc7mnimHEB2u9f8twsge/bd5Kpa4vwpT1PWGCw4z8d/9mHc3wcAAAAAAAAAAIBf9fpw89+Pvg722ScH2T3pqMcPPPuT7eEAAAAAAAAA8DgfIAMAAAAAAAAAAAAAeH+d/cpY+PTYUx31bCcHAAAAAAAA4C7zATIAuK32T1Ce/f1HHj/wxp+1fKrTAgAAAAAAAAAAwFn/6Oe+8Lyz8CH18HlngA+c//3Ll887CwAAAAAAAPDeGJ93BgDgQ+z14ebXxN697ZfFnvRhsme+BAAAAAAAAAAAAAAAAAAAAADAlg+QAcCz++x65jtiz3bU68PNH77z3bHtzwEAAAAAAAAAAPgQ+Z89uH7eWQDeM7/vTS0aAAAAAACAbxA+QAYA77HXh698O6z9taqvfFxs+/uPPlLm62MAAAAAAAAAAAAAAAAAAAAAwHtr97wzAADfaJ75k2GPPkP2+lCfXb/yfx//ThkAAAAAAAAAAAAfav/8C5fjmP6G9L39RUq9dy+kHo/HZ8zWuzh8WZaQOl3s88kPh6uQutulsPbT6RRSL/dNSPwQ/2j39Snd9TSl+xrXVCbjOOWMrTWH1PmUT55uKqdW9zR3u1QJ86NsL52r2TSlQsvZHoZ8bKpFVbWuKVJzmYbf9+Z1PgMAAAAAAAB86Oxe+sirN350eBhf7sbTLfGF3/XhYc7NlF4I1n53GVI/d0hvBKfdEFKXiheuuozvUIchvSV98OZbITW/na3uReYwpPsa1vROeoxvWKtqGVOxxHxVxYzlmxrjsVW1jvHkc3zWqUhqbV94nw4hdR8DPvb7d/v1oG0ExnLsqmi89Hqdmt7pKt3UFx+8mS+9xJiMUyzxHFcx56dVNa+p1TcxBLGWTUPq6paheRw5cuIQO6vdLh27xjiVqtrlqIs11vDYvw9DU4Fzd9T0GNG4xGw3HUYTiXJ1iAE0cVjqrty48VmxR/949PNH3yB79CWyh786jOZusH1YteYGkBLHOOS1YUP376fQtzm2jv0+RXEt1dz1GAstx64142UskxwfVlXTGC8dpwk5qO76ugl1ygF/pzjk5T62rQlTqgg1xiKfjzEILI4da6783Uwgt60c2bZ0l97fIoByih3ScU7Htg8rT9vyYJ1Pfjw2rSMfvsbnkYt7WLp+Mjb7eY5xnzE139Qpzt6r6iLWk4qVMNei3L1X1SlWpDyyLPnksX+uLudDfNp5TBxyQGqXsdxjzLHE8riTp1WtJha2mU42minfKV36FKeyS2yY7fRmjPP7OUd7x0ly20/Oc4qKbitSkKfQU5OvZmWda0JXi25VjZartD5dc0fXWZtFYiq1XAnzLGLpVq+3adfNHkj87w2qqpkmx6d5Hat3XmpV1T4u+fPRuzHNg/PQ0N1zrXHAnWLrytW/a5etvCEQ7ytWsTxcVl8m6Wk1c4yuF73lqBfkWVlVjfE/Q4rbM+3OT1pM3WaH5J2Lx9TYgc/dtYf0NHNXN8dL7+LmfHXLwGYfOnfgcR+vrScVXxwslV5YLEuqCdPUNcx432vTH8Vm220wjrnEYz+Za0L3sOJ1q5bYfva36Kzafb68K3ubudNt+tjq/oPJvGbP/8FkM+5Uzfn1Uzz6NOdN1+bS+4s0T3gX7fqJmldXXcaW5pXcs687bnNT7clveelmByYu5cbYx65xlddW0Yq7ss2qPPfAXS+aB+s5DsfrGv/r7tzHtm9Xm5ezqTvKp24XRHkOMuQZ4y1elFfzvrrm2B3ll5hL899+x2x1hvyyLx676xrHklt93i6LZ27bZbPVfJu+Lpd4N8dY835XPPd+l9tOuz5Nqc2OVt4/j9d9F20nlkneVqq4rOg2ousWNSGf+pMf/1g+/Cd/4sdC6u7V10Lqt3/nr0unjoE3u65M8suUHLqQdz63A7X4sRI/9gTix7be1/ix8B5f/Nj5XxA/tj1c/NjG1zl+7Gt+GAo8P4vHQsWecLT4sZvEj22JH9t6b+PHhq9tyOLHnvbk4se2xI+dv7T4sackfmxL/NiW+LEt8WNb4se2xI9tiR/bEj+2JX5sS/zYlvixLfFjZ4kfe1rix7bEj22JH9sSP7YlfmxL/Ni5S4sf2/jwxI/damMOAO6414eb/370vbDP3m5T+MYnyQAAAAAAAAAAAAAAAAAAAAAA3is+QAYAz+7sV8bezafHnvQ7N35+y6+YAQAAAAAAAAAAAAAAAAAAAABs+QAZAHw4/L63D7/6z0P6PXi3rp93Bj4Efv9L9593FgAAAAAAAAAAAAAAAAAAAADee+PzzgAAAAAAAAAAAAAAAAAAAAAAAADw9eMDZADwLP6Zh4fnnQXgffd733r4vLMAAAAAAAAAAAAAAAAAAAAA8N7zATIAAAAAAAAAAAAAAAAAAAAAAAC4Q3bPOwMA8KH3v7t/8fj//WceHh79+5+/f//sIeOUTriuc0i9d++FkDoMazp1Va1DSFzipWtJidN+n688DOn4+XAKqeuYsl3V3PUYS3xZUsamypdO1lxkVdP47JOx0ymV2PF4bC59kZ7XGEt0jbVomppP3J6GVM3GSg/reEx3PSzpzPE5Vz1WzX7vWw+bXwUAAAAAAAAAAAAAAAAAAAD4MNu9+cUv3fjRKy+/Eo9In6M4xE9djLv4tZWqJX5HYxzTxyzmU7r0G19+I6ROu+bbH9OUcr6LnyXZ37sMqc33Odpvi8zpKxu7Jd3XODbfJRmn5jsywWlNX/jYDSlj+SswVTXFj8ic4uMY4ndehuUqX3o+xe/yxM/fDO/+8zXHmyUwzE2Z/OzP/lRI/fRHPxJSX4z3dDml7xxV1f7FeyF1imWy5PIcmvbx5oO3Q+ox9hhvPvZ9qK0lPqxD/IJSVS3xe0Mv3E99wtVVyljfY8RLT0PuhPPXhpoavNul3B2O6Vnn72W1XzJqxJxfXKQyefcX3t/88NZXn+OTeqzcOnb71LLW+KGuIT6L6r5Qto9d9Bq/StU06u4jYkNstsOaLp3HnaoaYpcyxD56PqWTx1w3162qOQ7lefKTs31xcRFSW2usok3D7Ia8MTavJT7NZkIYr7us3eTnXP1/VM5NPZljw+y+NJfnP/mua4n9SZw4dR8srCFPb+L0fmgeZbM0aD55mEetWCbj7Rpmrgn5US6xK6tGj7alAAAgAElEQVTmS4t1iEuDpkxiavP1ya43m3M9iVPZNees+4X8NOc5HhsLfN/VkyXOCYf4LcVTHFlyHav+Y6M55+nYWz6OOX4FcheX1V2H1DXbOALktnWbsbj63ixd+xSzPcSuLCZWdauSXMvyl0bH/vOpudXn8fTZs13dx0aXJc0EprgHkhtmW0+y3LKOV9fp0t1WWzM9aqZ87WCdnPLTjBXpEHf5cond5vPBVbXGCUzXTzY1YRd3IHM1yzuEuSt7F+JqKz6OzXL4a7S7fLlIc2o7Yma5m51jzm8zdrSfis5TlPy98tusfNvD82g7xE2n9mPQzco6Hts1zHbREy8d7ytferdLq/L8KKsqj6f5YS55fdpNdPP0Jq9KutVr7GO7BVGzIdBtod9G03xy4i2WkG2z7TYT0rgzz6k7apttXpUMceMot9o8XFb7rOME5nCd3gEN8Vn2u3xxoXeKS8jxdhOYPG3L9STPMVp5ByaPmLebbb6LPa0ny2Uy5xlIP7Dk+WQ8Mu5jTPtnf9BV1ZRJHuhjttvWkSt43tvPnX/bdo6HuAyMHc6Se5u86dot2pfYw+9iag4PaGcYzWAdh+PcY9zyD9/dZmmQq2C/txN3Ktb45mu5RcuqqnsX6a3xdIvdhtvsqfaH51dXTV3oth/zoqY5ODXbl15owh6WU/rLNN1+b/wbS7FPOHVlcrFLb43zO7W8Q7jdYRQ/VuLHnvQL4sc23t/4sU3Y2FePFT92jvixLfFjZ7xv8WPj/lH6V5/a4zvnoTcbJ/Fj5zImfuzMycWPbY79usePPXKjwG/kRPzYmVTxY9tU8WMb4sfOHCt+7AzxYzeJHzt/YfFjW+LHnpL4sXOXFj+2SRU/duZY8WM3iR87Q/zYhvixLfFjz0D82Dnix7bEj90kfuxcsvixzaXFj20PFz+28Q0TP3a7t/IAAAAAAAAAAAAAAAAAAAAAAADAh4oPkAEAAAAAAAAAAAAAAAAAAAAAAMAd4gNkAAAAAAAAAAAAAAAAAAAAAAAAcIf4ABkAAAAAAAAAAAAAAAAAAAAAAADcIT5ABgAAAAAAAAAAAAAAAAAAAAAAAHeID5ABAAAAAAAAAAAAAAAAAAAAAADAHbK7mG5+g+zq4dvpiGFKp9vtYupFzs14P30Q7eHbKWMvv/ZqSH37Kh27Xh9yxob4obbLi3TX19dDuvS65ksf52NIHWsJqcPm4T5uicdWVc1zSJx26eTjkk6+HE/p2FTFqqrmw3VIXSsVeDUFHo+tevjwYUjd7fYhdRzTo/ya39yU7c///M/nQy5iw5wP6dLLGmvC0JTJGFv9PKdnvW/6hKaKfuzV10JqzvgnX0plcrhKdWx3kR50Ve3G9AvDkirhsqZ2d4rHVtVuSjXh6sFVSH14THd93XVWX57TLwxjuq/rU+wTKncKzZc0c183DakCN73/Y3bjjcr81UHn4uJ8PR/X2EXHHjgPDRc3M7O59BQHptiBj3FkWZemxHZ5YIqNfo2NelpTLaqudRyPcbTdp3qyzHEsbjrR2k3x5BVbVjx7d+XK3f8cLz0vscC7KcYp1uHdPvWic2wduZ50/UlN5+rJV38Ye8IpZrvpQ6vW3FlNqV0vlcpkjPXkdErHVtV+lwqtm0+m+z7NadypqjG2jtzd5Jqw5O6mahyf/TPN3bGxF+26sjU+zbyyWGJqnp9U1Rjn6Hk+uWvG0659xGHrFGcReX4+xw781GVsHGINX1LjylO+Kc7tq6ripZc8K4tl0taELA9qeTqZK/A4Nhkb8iyi74affGx8WFU1xOeVO5wxDte52a55IO/kAs8Pa+gmyTlv+WnOcyqTtn/Os6Mxr9mbvYR06bzyrW67LI9LeeGc57GtKc7P84wyzzGqq//HQ9yLax5HrMDp0N4apxF5kpy36arqeIp3HWvhkqc3sR/My893fiWkDUPTEwZnJ9iPO+Ueo9uLCHKH0P5Cm/MgV/579+7lw/P0Jp88t462TJY4gWn62PispnaCfYt5Qu7KbjMDqa7pjXG/a479Sdssm74ubzDGwbq96znWhF3srNY8U4395JKL+7bbIHl+0jyQvI/xpN2/d+R9jLzUWuPcvrq1WD54F++6LZM85eum9+nkx1MzvRni017n/F4sivtdeUZXVbkaLrF7H+Ibt3Z+czjGDrxpH/lZd+uO2Opzoc1xtTVWLPBuepOXgXkPPG8XtJOEpv7Hrizv/A95Y7+t4PG+ci3Lq9cpZqw9ebNxFA9utqnbraE45OUNxiG3na4XzWuHvGc7xRI75S2Sqik+zbzGzGPH3FXCXJHyQJ+nwXmee8ulwf7iMh3cvFNreoxuep+OzXtWeRbRLrSmXfuK6cknj5VwjgNiVQ25h89z0ThJvnqQIj2qah8nZm/89A+G1CmGDH3zpz+Tju3iYx7GCK79ZdzvXVPGtrEH4sdK/NiTiB/beF/jx7ZhY4+IHztL/NiZS4sf23j/4scemzp9dYj5mkCy3Y1Lf7UDubi4ED+2JX7szMnFj20v/XWPH3vs7F9TJjd2e8SPnSN+7Ex6SBM/dp74sS3xYxvix56W+LEzqeLHzhA/dpP4saclfmxL/Nh54sc2xI9tiR/bEj925tLix7YnFz+2TRU/dubwRPzYlvixLfFjW+LHtsSPnTn2gxQ/9uyvRgAAAAAAAAAAAAAAAAAAAAAAAIAPHR8gAwAAAAAAAAAAAAAAAAAAAAAAgDtk97wzAAAAHxrf/8ZbX8/L/YsfefHreTkAAAAAAAAAAAAAAAAAAADgjhifdwYAAAAAAAAAAAAAAAAAAAAAAACArx8fIAMAAAAAAAAAAAAAAAAAAAAAAIA7ZPe8MwAAAB8+rw9VVZ9dn/qQx4+68ZPtLwAAAAAAAAAAAAAAAAAAAAC8H8bnnQEAAPgweX346pfCnuqo+toPjW1/Uue+TQYAAAAAAAAAAAAAAAAAAADwntv9o//T//GNH/3L//K/Gg64/9KLIfXBwwchdblqvnc2DekXXn7xpZD62isvh9Rf/PlfCKnH+ZQzNgzpCxCn60NIzfe8qylfelmXkDrs0uFrzfHczeNY15Q6zyl5rF1I3Y3p0tPYfG/jNKTntR7TXS/x3Kd8z1XHLz8MqeOU7msYmmcdrF3G1jXd2BBTf+v3/baQ+h/9R/9RvvQL8XmNc8xYpeq9dHddp1QTljFW0fg4Li/vpzM3LasOh9QnvPjCC+nka8rYcGoufby6TofHruyFi8uQ+mLsbarqozF1XdLYkfuEXP/zTVXVi5epwL/5t/2OkPp/+zf+cD75I8fDEzuH09X5pP/h7/rt4YT/4H/rd4bUT376tZA6rE09GXP/H3uMXP+PsfJX1fUpjQ4/9Jd+NKT+0R/4EyH1z/4XP9hc+iqlHq9Sf7LbpWzPayzProoeh1TD9/t9SB0r9rGxZVWXtcspXfr6OvU2Xfdd+4t08tzL7uK4c4pDw9BNfub5zLUf/fDy8iv95I1Phj2tz8YCevRtsnd+baihqtYl3Vd+1EPsRXdx+l1V8ykN1hcXsXWcK89H7l1eNJeOd51Hh6Z1xDlbVU2xTHM1y/KwNY7ddDF30UOcBsdZxC72NtU9zSkWeDeVbVclqRKO8WEtS8r2GrurNXfvVfOcMlaxex/yyNKM5DXkS9/iO+PT1FTCXBOWJWUsl9gUG2Y+c3XVbJqe/ZuOx2PT5He7Zz95V565ih7zyXe71K5zkeaRpV2fdnIVzXfdXLrpE5pmm7vofN1ubyd2R10NT4+yXRDlYWuaUndUsRLG5X5/8tMpTdDXWKS5s1rjVkNVVdzRylU0N8xT0z/XFFfWebDOa7HLMZV2uyWVK2GzILrF0FBVY6zDucD3+1ttxHV5S6mnOEnOJXbLQa1t9fncObnpzfL0Ju4Gt9nuiuXZR4e8a5oHjqqK89xmGpw39tv5ybrGKXoznMaBvlsG5nlybvW5li25QLt60rWOZ+/A2yq6jzOrU3wlkc1xktBW0albyqWTd0ue5vA49Mxzmqxen1LqRZ6fdJ3wMMTUvJmQb6rbDDid0tboFLfa8ky1rQlD7KJPcVGTT95eOr9qya1jjD3hEne519io25Pnniz3CU032K5K8k5dnkXE7r2V+8mKm66xir2L6U1Mbab3eaDvF0SpwxnjpXOPkTes2lecuZ6ssWU1g1r3nj0P9Pu4Z7vk+t/VhG6wfvaeMJ+5m/s0rX7N+6KxFjUlVjVepMMfPkyRCc2Zc4l1+4dLs3BO99Vsv+dwjaohvuK/zc7nR1/Nb7Prp/apE37w1psh9Vvja69f/PmfC6kvvZheo1fViy+lQKl1TrVonGLL2nRW4sdK/NiTDhc/tiF+bEv82Jb4sa1v0PixMxX48UCyUMNPVw/Fj22JH9sSP7b19Y8fe+RR/NhXcvK1T2de06X33WvlY8y5+LEt8WNb4se2xI89LfFjW+LHzl1a/Ng2VfzYU59c/NiZk4sfO3O4+LGbxI+dSRM/duZg8WObS4sf255c/NiG+LFnuLT4sTOXFj+2IX7szKXFj505WvzYTeLHzhE/dtN7Gz92qwkiAABQVa8P7+qTZI//2uMfMnvn359dv/oPAAAAAAAAAAAAAAAAAAAAgPePD5ABAMBtPfp2WPtr9asfHXv802OPvkr2KOndfM4MAAAAAAAAAAAAAAAAAAAA4Nn4ABkAAHwgvD585Xtk7+ZbZgAAAAAAAAAAAAAAAAAAAADPzAfIAADgKbw+1OvDzX8//sOz3vmm2Du/8/hXxrY/efRDAAAAAAAAAAAAAAAAAAAAgPfJ7nlnAAAAPkwefSas/WH7O898KgAAAAAAAAAAAJ6vf+JzX3y+GfhDH335+WYAvjH8njcePN8M/MGPacsAAAAAADw3PkAGAAAfUN//xbeedxa4I66edwa+rv7Aay8+7ywAAAAAAAAAAAAAAAAAAAA8Z+PzzgAAAAAAAAAAAAAAAAAAAAAAAADw9bN77dVXbvzof/PZ/2U44OrqQUj9l/6lfyWkHpYmN+MwxOQ5JH75S18MqR/5yEdC6vz5Q8xXDcOakpeUus6nkHrdXLlykRxO6eT39ruQeqrmeQzDlFLX9PW6ZU0nzxc+LulBV9UaTzCOKdvZUPFBV33hi18IqfMp5XyKj/Jx++nmgztdpwddVdOYzp7v6otvfill5t79fOnf9Df+TSH1R/7SD4bUt99IzfbyYp8v3XxCcT6GxGVND2uNlX8/ppZVVWtdhdRTbPbH2KhPx3RTVTXEpjfFDmWuWItOTY+RK+G8pvs6HtOxu10s8NgDV9UxFto/+8/9H0Lqb/+7/u6Q+sP19z/69+WTa8WwnC+6l+/FLnqJw0O+66H5uugTcvQV65Bax0V8HLEWVFW98HJqXH/b3/E9z5zaflN1jO36FJtebllDbFnTpku/KY6nbz94+Mwnf/DgOl/5B3/kp0Lqn/gT/0k69od/OqT+4ud+JV/6+pDqcBxOa57T47i8vEjHtnOMcxVh/dUMzbv5n/ril/MZgA+F7//S2//iqy/UmvqiZnFaVWPqwOc4WC9z6o52YzMNPsWc7+NMYInHnuZmgTrGmfCypPH0Ik7vj8emi87G+DhOcSq7DHGB2c0x5vg011jgS56WRUM35cvT4KbE8rKiuulNpTLJj2Oa4kbErlnvL3GekB/WHLcahlhPpqlZleRLT1NqHXmm2spFeooL54o1Yb+/zJfOOV/XuIS8RcvKqVWVq9HxmGbRU1wQLd3QcZucj/Hs13Giu4urvOrW3bl7n2N5T3lPtWqJI2ZebeVatMYKXFWHWP/zBmPuRXMFzuXZasbi2FntukEt14RcRfNdV9x0qn5cS6ldq3/20baqhtj0DnGDcYjVe+ymfE2Bxx3f5Ziq2dJt3+QCzfU/721eNJduMrbftdvFTz517I66Cly7feoTlliBLy7STkWuJ7kbrKrDIU3g88Oq2GO0M9V+y+vJ7sWlQR5ZqmqK71pOzcCUjm12Tds5RpzUZXN721HO27SLi8TmWd9qQZTr8G2O7TqMZgsxTwnnOFhP3RuivJ4ab/Gox9jbtF1Z16XE1FvskFc30N9mkpzn51WVZwI533kLJac2PXA3lY2ttiqu8trJzzFPR2+xUst9bN2us5rzZsKtOrqmKsy5N8on78pkjhti44vpvq6u0vvoe/dfTGfugiKGKdfCdNdrHNTyNkW1m2mxEub7yhmrrobnXY6/9lf+Ykj9lu/89SH1sptBXMS56Cc+8fGQmu/51VdvhlH9+F/+oRs/ET+2JX7sTKr4sY1bxo9tw8YeET/2BOLHbhI/du7k71f82D/xj/zD2x8+Hkh2PD2xJgzLIn5sS/zYlvixra9//NhXD999zeE3lhKvD1VVn33KLaAbR73+q7XpST/Z/sK4NkEsS6zeY9dum1cDcbdhF2dl/aZWHJjGOLWK43yzj1fdXd8m6CLPy9Zmb7N2ebTNx8YOvC2TXdwxOOS9o7gru3RvtG+zx9g4d+zzasuPtwjxY89A/NiW+LEz2RI/tj25+LEN8WNb4sfOpYofu0n82LljxY/dJH7sTMbEj22IH3sG4sfOnVz82E3ix7bEj50hfmx7afFjZ4gfu+kbJn6s6bwAAAAAAAAAAAAAAAC44fXhq98Sus1Rj3/A6J1/b39S575nBLwntGUAAAAAAO6sZ//ELAAA3Fl/8COvPP5/p/yZ6/h3Iapqjn/zvPk0fvyYdP7TJe3H1POfuMyf5N/Fvxzb/uWH5qP68TvXzV+w7L7PvY9/Bz7/VefuT0HmD/Z3fzUlP478F3LiTec/gFNVu/i19Q/LX7D8p9948O5/GQAAAAAAAAAAWjc+KvS+HlWPfc/os08RNQP0tGUAAAAAAO6s5osDAAAAAAAAAAAAAAAAvBuvD8/yQaLWZ9evfKvIF4vg60NbBgAAAADgLtg97wwAAAAAAAAAAAAAAAB8I3j/Pir0zreQ3vlfny6C95u2DAAAAADAXTA+7wwAAAAAAAAAAAAAAADwRK8PX/lQkc8VwYeatgwAAAAAwAfK7nlnAAAAAAAAAAAAAAAA4EPm9eHmvz+7fvUfT3vU4wee/cn2cOA9oS0DAAAAAHBn7S52y40fDXUIB9x/4TKk/p7v/8dC6tXh5rVu+GP/wf87pP7Yj/1YSB2GtPX+pS98LqTeu5hyxh48uAqp0zCG1HFMX3m7d+9+vvSyntKlx3TpXODT1Nz1MKU/pzIvc0jd7dJdjzHbKa2qqtZ4+OEQS2xKxy5LU0UfPniQMjanEhuGpsAfOZ1u3sLFxUU+5DLe1zynh3Wc011/7NPflC/9M7/wiyH1b/qt3xdS//QP/NGQOh9StqvqeEwN8zIW2ji+28exNVeTsd2ULp2b3nHz9J/KGHvCdU1VdDml+xr3zQcr11PscMZ06d0uldi65q5snzNWsRf9t/6v/0ZI/Qt/4o+F1O/6h77679defuFrE9969K9hfdJDSWUyxdfJb7/9dkg9zU2Z3L9MQ/mLcaA/LceQmkelqooVoYbKFTilth34EPvJPGztYsZyH5vbXVW99dYbIXW/T0/zeEyjUrzjqqq//ns/HVJ/03f/rpA6NoNac9fTPlWzi4t76eB7r4XE/97/4PeF1J/6uTRmVdV6rhNe16884uX4NZPkG/+3Yv1v511TnDEOQyrS64cPQ+puSmeedl2zjVOzcY2H51Gpa7a5Go1xLjrHbPffYM6Tul16mmOcgec1S8VlRVWtS8rYRXzW2dg9jm4WnTI2jumup+6B5G624slDgY/j2DyOzhJ7+PEildiQR4c4+amqXexScsaydtjKplgJ47Kjax23k3vRPIsY24YZC+02qc1187yq+4W8qGl64K6KDrHQprjVkC3HZrnUFXiuZrF7j73NsVkj1hTnTrkS5pnqdgPhqU7eTBljiR2PaWnQXjovHeY4suQHPcRjq2qOHU7eszrNqcBPeczqTn6bPuEiTiZbx1iJ59gr5A781D2Oblv12VObKcTttoZy9e4GtXbvM186VcI8Uz3GKXRV1RI78Lg0zgPmkucB3fMa4+RnqObkSZwkVNUSlwZrHE+H+KzbXjTLJZbHjmY87Gp4M2zlmWq8btuB50LLfUK3ZmkaZh5w93E3OM+D51v1J+1d55PHMsm7k1XHbmIW5C5hju2uqqaYtykXeO6E40T3lsulrJmBdFO+pg7nmVV8HMtt+tjb9SfdFsqtOvBdHDGnMTXqOU4IqyrvljX7AbeoZm2Pkfcnr6+vQ+pF3KauOEmo203bcpmM3diR9yebQ/NcNK9K+uumw0/xhV0jrl6raorT4PyachriJnb7NPKwFZttM+TFY/OGVbVrzHhfY1xWt006N64hPs15TlOjtVk4dKuS2Ljy6NC9P7qVdUiXzmvbn/u5X8gnf/Pt9Krl0auis77wUz8dUncXL4TUq499LGfs4o30JvGXfu5nQuq9++nS23f04sdK/NgTiB/bel/jx8ISQPzYWeLHtsSPnTv+/Yofeyxm7K1zP6zPfeGJC65hHcSPbYkf2xI/dsbXPX7skSfFj539MlH4XNFTHdX+2jCs4se2xI89rTsYP7ZNfb5t+WtKWPzYe0382Jb4sXPEj22IH9sQP7YlfmxL/NiZE4sf2xA/tiV+bEv82Fnix572cPFjW+LHtsSPnTlU/Nj2WPFjG+LHtsSPbX2I4sdutbkAAAAAAAAAAAAAAADA19k//oW3ul9JHxcGPiD+qc+3bRl4V/6l11553lkAAAAAgA+fW30wGwAAAAAAAAAAAAAAAAAAAAAAAPhw8QEyAAAAAAAAAAAAAACAd+uffuvqeWcBAPgav/tLX37eWQAAAACADx8fIAMAAAAAAAAAAAAAAAAAAAAAAIA7ZPe8MwAAAAAAAAAAAAAAAPCh9AdfeSGkTtN0m5MPwxpSr68PIXU3pf9gZH+5z5ce4x+8X9eUsRqGdOyy5EvHU9dUc0id15Tt7tw1jPF5Tenk8+GYzjzkmtCVSSzw21SzpXscU7zrQ7zrccyPozHP6VmvY6pmQ6yE76T+k1948/Ef/qGPvvyV1C5jy5oKbYgllh/lsLYXv0XDzOZTTp+m1GnE8q41FmrbJ2T5WefGdVxSHdsNt/rP7vLjaJte0rX429SEXAd3a3PtrunljD1jj/FPfPGNZzsQAAAAACgfIAMAAAAAAAAAAAAAAAAAPiCe7bNiv/tLX36vMvCHXn31vToVAAAAAHyQ3epviQAAAAAAAAAAAAAAAAAAAAAAAAAfLrtpvPkNslOt6YjTMZ5uF1JffnHIufkH/v6/L6ReHa5D6ttvvxlS/9f/q/9tythL93LGXn35pZD64MFVSJ3nJaQOqcCqquYlHb59fI8bd1NIXZY5X3qsdPgunnwa0rM+nU7xzM138eY55Xyc4l3H2r3OMbnq+uoQL51yvh6bAn9k2l/c+MnDWPmrarffh9SXX3wxpF5epGNP1+mWq+rv+Z2p2b519XZIXZZUE2JxVlXdv3cZUq8OqWHuppuF/LWXjp1VrkZVU+wJr67T07x6+DCk3ts3XcbplPKW287FRSqTJfZFVTWMqenVmg5fx5Tt3ZCqQt+V7VIN/3P/938tpP7Uz/xMSP2ux/59evjEMejy4vxTu7yXMlaxBz6mplNf+GLzsB4+/EJI/ZEf/vGQ+g//939zSF3ikFdVS6yiWa5iY262VTl5jtObNTbqi8v0KL/4hS/GK1ccMGue84iZMraMzePIpbIM6fAx5ntduwe9pvvax9ZxL84n//D/+X8eUn/b7/zHc77OV6ThK7dzY1J34//2dx399u/7rSH1f/S7/saQ+ht/4/eG1HVI3fuP//hP5Iz963/43w6p//Gf/i9D6htvppb1ystpftK6jiNLnmMMcQpdVRf7OPTEXji3jnzldY09XdUaG+Ycp7K5t1njaFtVc8zbMKRnnXvgdo6xf8JI+o48vQklPo5jzlks7KqqIT/rORdp7jGaQS0X2j6PDrl7H9MEu6rW3PRimeTV6xKH8rWbgc9xZJnizGo/5ebRXHppfiGdfBhys43L6mNTR6cpjadDnIF3Z246q7lSw4w33dx1LrFqq0rT/+fpTextYtOofqciXTp3dGs3DZ7i3x5YcqOOGTt1k/8xt/q4lBua7ZuY7aaPrSXuSjU1PJZJXr1W16MMzfQm98DpzMvS7bDELZj8KPOape1sco+R5Q3Gcex2XWOp7OMS9Drv98ZKmAfTqluUSNUU205+lNVVwjnW4G6w7tbszWw1Xjoeml9YXMf9w6qa4z5GzvbuIhX4qduIXnM/eZtVeTe9mfJeXMVdvliLruO+6L17L+SM5V3ZOWYsV8HrQ9xr69p1rWlBNI1x+z32ok3T6GZHeaG35plqt1Jb4thzPMYy2cd3T11nld+axYpQp7wHmN/HxTcp1S6XYpnsdmn3pu3A84xxikueZt0xp2y3pjie5jVLHujXdlBrhuOUmudd7WJqiY9jiVOQbjxMl25XavlZ5zdE+VG2m/OHuFOXV1v7zTvTxy3ddkGuCfnF1pB3Kk63mbXVEu86T2Vz5z938675FtO2vJuWF5itvlk/2Rwf9K4fT/MuYewx4pmXrp4c4snvn1L9z0uaZkneTgjj41hOeYMxtaxmO7fdGlpjLxqz/V2/Ib1Jqap/+wf+SEqOZ78+pFf8P/nTP5dO3O13vfqRV0LqmEeWGBTxqW/6phs/+d7v/utu/ET82Jb4sS3xY+cufav4sW3Y2CPix84SP7Ylfmzr/YsfOxsz9vgPN5Fjx8eTxI89LfFjW+LHtt6X+LFflePH2lVPJn7saYkf2xI/dkYu8bMRo7/aD4gfO0v82Jb4sa33L37s62/61XWp+LEt8WNb4sfOHCt+bEP82Plk8WMb4sfOXVv82PYXxI9tiB/bED925nDxYxvix86lih+7SfzYlvixc5cWP3bThyh+rFtIAwAAAFATiRgAACAASURBVAAAAAAAAAAAAAB8fb0+VFV99ik/m3bjqNd/9b9gfdJPtr8AAAAAAHdE9/1yAAAAAAAAAAAAAAAAAICvl9eHr34X7DZHPf4xsnf+vf1Jnfs2GQAAAADcBT5ABgAAAAAAAAAAAAAAAAB8UHx2/epHwd7vo+qxb5M92+EAAAAA8CHlA2QAAAAAAAAAAAAAAAAAwAfa68NXvhT23nr02TJfHwMAAADgrtk97wwAAAAAAAAAAAAAAAAAACTv3wfC3vmu2Tv/6zNkAAAAANwd4/POAAAAAAAAAAAAAAAAAADAc/D68JWPjvn0GAAAAAB3ze55ZwAAAAAAAAAAAAAAAAAA4CteH27++7PrV//xtEc9fuDZn2wPBwAAAIC7YFfDzV2xYV7ep4sty5x/4Xg6htT79y5T6uVHQ+q/9q/8CyH16jpdt6r+yP/j3wqpP/SDPxJSxzHtO86n5s8ijJsH9LjDMeX8pf29dOZ9syE6VPqF03xKGZvTfe0v05fv5urKZNqnw+dUzZY5ldg45ivX5z7/uXh4Pv7dtqx1cwuX+ykfki99PB5C6vXbD9KZ1ybbP/YjPxRS/9Jf+HMhdY11bB2amrDE9JdffCWkHg6pTE6xFu2mpqI8ePthSB1jtvdjeta5elfVMKS8XVxchNRlSc+6q97N4Ze51cdqtqyxyOItV9XHPvGxkPqlt95Ilz41Bf7I+uTbH5/wTB8+TPVkjmPxNKR68qf+9H8WUqvq7/17fmdI/Qt//i+F1OtD6kXb1pHr0RLvej7Fg4ems5ritaddqqKnWBPyo3xSBXhkifU/d4TLKY3FuVVW1RDnGBWbXi7PU3fpXBWmWJFOsRLmivDxj6ehoare+NKjp/nVhz6NX6kemyK9UURxyhenRlX1d/z1r+ZfCJY4Ik6765D6Pd/9a/PJf/8/93tC6jiltpP7hLlbGuS56DrEKV+cY7/99pv50n/5R34ipP47f+QHQup/+md/OKR++c3Yle3TeqeqljWVSe4xjkvqMdrOaqg8i47POk5ghrhcqqr5mHIeiyT1GMfDcYpz7KGaMsmz+1yiQxzKuyJpakJegdYcW1Y3+c/yRDfPEppct9ce0iIxl+gSG0+7jzHExzFNeXqfB8Sc8bZU0uG7uKxe13TyNc/PNwPkDUMcO3JX1v5dyWmX7iuPmLkWrnN6lBdxMvnOxUPaPtaTJttdj5FnfJW62NrFjJ26mpD7/3HMHU46+brmHqXJ2DDE9WketroV6O3E1hEnP3m22XbvQ3yap1iLhtz7d9Y8vYkFnjurOe4BVtUaZ4ynMTWPIY4Oaxz0moVYt9rKs+hjnDiNzchSS16pxR7nlttKuTs7xbcGeQl5fcpr9jRwVNW6T/Ukz7uOcZdj7HrwIU4o24oUtH3CHLdBljxixv5kt0ubk9dxw7a6ATd2k3XKo0M3Be9WTOnw60OqhFOclb2LthPFx5GHvLmbbeYVU54G5/3epdsDb7a88g5MvPSQZ++npormiVe3NLjVDDzLJZb7k6FZyTUnX2LTG4Y42sa1QX67VF2BZ00d6zddn73lNpOfXJ7tBks8fBdXatex/u/iBLu6dr2Pr67yiNneddbsaMUSG/fprtfu7VLe+cyLmlxPxryErDrEGeNt3iS+i/nJs/dm+WHlFU37riQ/jX2egcTOaorlWVUXzRQj5XzX70U8WTey5Hfl4xjLJM7Px9sNatka6//FZTP5//P/RXpDmruyPL05HFLqRz/RvLp65ZWXQ+r9+ykoKA/lP/ojNyOdvvd7vvfmGcSPbYgf2xI/du7wW8WPbcPGHhE/dpb4sS3xY1vvX/zY2Zixx38YNiHHcRI/tiV+bEv82JmTf53ix87o4scS8WNb4sfOED929vD3J36sqs7Gjz1q6eLHnoH4sS3xY1tPGz929itj4dNjT3VU+2vDrz4F8WNnDhU/9t4TP7Y5ufixDfFjW+LHnpb4sTPEj21TxY9tTyx+7OlPLn7saYkf2xI/duZY8WPbS4sfe1rix84RP1Z5YwIAAAAAAAAAAAAAAAAA4O74x37lC887C/AN4g+9+tLzzgIAAACQvK+fXQcAAAAAAAAAAAAAAAAAAAAAAAA+WHyADAAAAAAAAAAAAAAAAAB4/v6xz3/xeWcBeM/8k2+89byzAAAAACQ+QAYAAAAAAAAAAAAAAAAAAAAAAAB3yO55ZwAAAAAAAAAAAAAAAAAA4Gv8qx/7SFWttT7pF/7xz3/p0b//j5/46NnfWZYnHl5VNQ4hcZnTobspHfvOCdKVxykdGbO9dFeOt1XzKd3YOKT/7PR0OuVLL0u+65S6rvFh1RhT87G1rqlQ1jWVyTDkS99SOnnOWJZvuaqGIZZJPHoYU4F//5feypcGAAAAPiB8gAwAAAAAAAAAAAAAAAAAAIBvKL/7S28/3wz8oY+88nwzAAAAkO3mw/HGj5b4kfhxlz+rnz6mvlTzufTdLn0QbV7Sp/HH+Kn1w/V1SJ3G5vPz/+B/+x8Iqb/j7/yvh9T/4I//8ZD683/1F/Oll2Mq0n18HPPx5sN93Do1X/Qfx31Izc9yf5mOnef0KHf75rt4h8MhpOZnmf90Q/PnLKrGKRV4+GMa9S7+tsMj03TzJtpj11gT9pVS//IP/XBI7Yqk1kP6jbfeeDOk7i/isz41195fpKd9fcitPpXJEP/OxvWhexzx8DmW6RTr2OmUzlxV8baaipQvnf+cRXt4Hh3WeFvLEP9gSzWPY4rNfoiP47Lrjh4Zn9wpPunPtrz80qspY7G8T0vq3v/Wv/VvTQdX/T//3T8aUnfTvZA6z/FP3OROtmqNfyFniJ3VEP/EzdgN5flP4Jyu08iS6+gcW1aeVvXibY1x3Jm6v6QU+6r4V5Y6UxyVqmoYn/2vIb30yovpzPFhHeLUqKqWc38X6NEPx3FX9dUz3PhjU0ue3uyaxzHPKW+7fZpZnU6xAg9x9jI3j3o7LXncHA+/jp3/OLWDWqonw5AOz39d6qUXX8qX/lv+lt8UUv9rMTU/rHuX6aYevv0gZ+xwSvVkifV/F8sz/5GxqvrP/syfD6l//i/8lyH13/2j6dgvvRkrcNVhuB9S51zNnjxAj1WnQ66iOV81xp6y+VthcXRYug58lzOXpxF5ZIn9c3UzgZw6xYa5LCl1HLq/2xbH2yUnx3NP8S/4VfeH3fLid7+/DKl5Ct3tr9QYCzxnLE8E+tlNHDtOsZ7E3r0qLg2qas1/7DE+rbytlFPzbkBVDbHt5fF0yDOrY7c+jV1Ks9DL3UlcA7aH54eVh/K87mj/WmNT4E1nlY/takKuSHl0iJfOe6qn+VYZW9ZUzfIqb+wex26X5k7Hpoan+1rzXkP/rPPJ05mnWBOur9KGVVXtL9KqPF96jD3w0HVW+a7zYLy7RUdX3aiXl/zd7mWqhP2GbTOoxQvnHa2uYea7zj1hLs92gzG3jmGNf243ziKWWBN23d7OMT+veNdD7G3aP0+ct3fybvAwpUuvsW0dcyWrGuOSf46tPi8h867pV07/ZHlQW5sK3G1KxbFld4uhfM21KGaqquZYpPmVxC01f/27mYE8++q1P3neYlzTBKa5cvc88vo095P5Zce7+Nvg+V1J6srysWPzrqQxxd4uj4l5RdOsXrspXy1xsM6xB11nNe3isBWH4zn3GHGpNXYZy8n5TcthE93xNWfupsG5O8pbbVNs8qduyldxrN/F2z7GfdExv/bturJu+z2+nIq9+66LxzjGarZf0tl3cR+vGYvbLiN3dXH7Zs2vJLpVSU7PnVXYDa6qLz+8ylde4mvK6/iCqZ20hcTP/cob+egvfD79Qm55uQPeVhPxYyV+7AnEj505/P2MHwvvZ8WPPeFw8WM3iR/bev/ix85OQh7/YdiOWJZF/NiW+LEzxI9tfP3jxx45Fz/21f+7xNYhfmxL/NiW+LGz3qf4sXpC/NijH4ofO0v82Jkrix/beh/ix07vTCO74Jyv+eUN8WNnTi5+7CkvLX5sK6/yviYb5+b54se2xI9tvX/xY19P69dWDPFjW+LHtsSPnSd+bEP82Jb4sS3xY1vix7bEj22JHzuXKn7spm+Y+LF2YgwAAAAAAAAAAAAAAAAAAAAAAAB842j+FAMAAAAAAAAAAAAAAAAAAAB8SL0+VFV9dr3VUe/83/CT7S8AAAB8wPkAGQAAAAAAAAAAAAAAAAAAUN//5S+/h2f7PW9fnfvx2R9+xR985ZX3MAPw6KNgtzzq0cfIXh/q9eEr/7jxk0f/953f9xkyAADgg2983hkAAAAAAAAAAAAAAAAAAACA99hn12f5ENizHVXl62MAAMCHjA+QAQAAAAAAAAAAAAAAAAAAcCe8PnzlS2HvrUefLfP1MQAA4MNi97wzAAAAAAAAAAAAAAAAAAAAfIC883mmp/2O0o2jHn3j6Uk/2f4CfB28f/XtnSr9bM0HAADg688HyAAAAAAAAAAAAAAAAAAAgKrHPgp2y6MefYPp9aFeH77yjxs/efR/3/l9H2ziQ+1RPX9Uq6GqfvcXvvR8M/CHPvrq880AAAAfZLt1uLkWn6YxHDDE1c44XoTU0zLn3Kxj2hjYZvVx8/GUTj2lfC/rEvNV8ymdfH+RvuN2714qk+/4jm/Ll17jXslpPobUYUyPcokFVlW7XfyNIZ18nmORxrtauu2h/TilS1c+ecp2VbOa//Kbb4bUNV56yI3nMfN8s6WM8VFW1TCmk4+x/g/H9LCmLtsv3LsMqctHPhpS3/ji5+Ol85XrOKSasNulhvng4cN06lhF19wsuyp6Wg7p4CFle9o1NWGNDXMXU3MVbe/6FPvJ3L3f26d+Mmds7KrobpcexzKnbO+6pvfV8zw5aajzGVhjs63Yn8R7qv/gj/3xeOb69d/1rSH1KjaOLtf/f/b+PFyy+zzsO9+zVNVd+vYG9AI0QIIEKQJcRYoiRWqjqM2WnMjxxJrEsTW2lXmskRdqcZ6M5PFQiJw4Tx5ttOTEz0zsR7EzceIZ25EsL5Eo0ZYoWaQ27gu4YG9sjUZ337WqzjJ/XPCius6p76/7djcawP1+/uCDrrfOUuf89vPy3EQ5WXQ1rgg24N2Wc35r7F0yLKKT7THumY7LfXFE5C1d0wp/F/cOib44YjAY4OaJSwpSBSFKLEnDgk6MKz03/sNB4t27m21fE/2Ve9Rc/sOaywtVYtyVGIHELbdQjzkaUjvZYPH+5//770O0SBXRH/mbPwvRhz7xj2jnBV7wZHuAtStRvhPzjkTx5oLEBbytKX7x4kWIJusdf4EbuknQCCR56Le86Q0Q/eq3vgWiP/iXvh+iZbnEhz79Wtr5N3/Dt0D0k1/YWBhLDSGS12SE08Dv/wt/DqJf/aY3QvR197yeD/0//cP/BaL/4ld+CaJbW1QSVkeJ21EHNUeJIoodU5VhtW4S94vDOU8yuQFPtRgZnhs3//WUpwa05wInHRFR40C3xhEI99SpPu3a5lMYTf7qqsKCxPd6Sveap2IZXs9I/eqCBz9YxvI8MbxpEmNC2vl0SotOfD0jIsMZaJvTiXFv2/D1jOSJ0a/m5r/Fe922+x9CR0Skzhw0PCtJDZ0i8bv2X6mzItlY0UVL3SystjxzTuO+A68J3kqeiEWqhLPUWlqijDVYkjLsrGvubXlqEFFjKeWVzxpPG+9VesG2xRNrue7xACZ1aL4dDU55Wuytk33HtdT6NqMRCD97CnwAFBH1hGs9/a5E8U51atMJDdty7PJS81OSLKI1LjVfy7JqlmpRuBByMeOV5GQRjaDNU00Zjzbp0HVqalDgSseEBxnYWmX4KCQiCn7odi0r/+lCSJuPclx+5FEEHreqcKQaUeIYm9esUk9DUo1VYkWXh/f8EAdvdGo1eNzi0xB8OMXr57zEHREFtpNcbfmxb558aoYLjC1ecP5Z1YQKIT8ojOTjbLybBT5Abdtr6uibCh9ODXExIX07cBSBY6fhkCo1P6YpUrOSKXZMvEiSY+OfGC5GjEb0uw6vrUGUW9ES+45Ux5JYVuL5fo1pKNyURQQ3s9xO8trOaERZDRFR49p+g/e64UqNJYFvVkTkOL1tsd+pqqsbi5o/FuaPLWD+WNcNzR+DIaX5Y73MH+syf6zrxuWP9dac2Q8hVyqLwvyxq2b+WHdb88e6e74R+WNfYf5Yl/ljPVHzxzpepPlji3yllTF/rJf5Yz2HNn+s5xvXP39sd80/+at3LcwiM3+sb/cQM3+s6wDmj+2+BexqX5+0v632Ntl7+xhfUvPHuswf65q9V7NlcvYVeBH0wrtFW81u2PvJ3Obt3Bqs+WNd5o/deLPPx80f6zJ/rPfYfGjzx7rMH+syf6zL/LGeqPljHeaPdZk/1nV988eS4zBJkiRJkiRJkiRJkiRJkiRJkiRJkiRJB1fyhU37s/fasuu+Z2lXb9FKlrcr3Gp/O5ckSZKkFw9fQCZJkiRJkiRJkiRJkiRJkiRJkiRJkiRpoRv3TqXdV5vdoBecSTfX+9Y3b/Yp6EVkfw3d3Fa7/4RPul+QJEmSQH6zT0CSJEmSJEmSJEmSJEmSJEmSJEmSJEnSgXNf9twrcnxRjqSXsfuy598Ldi1bzb6MrPv2Rng3mSRJkrRIebNPQJIkSZIkSZIkSZIkSZIkSZIkSZIkSdKLwuwLa/ZebTP7jpur2mp2w95PuptL18Vfu7Rxs09Bes7cC8Ju6FYx824y3+0oSZKkJF9AJkmSJEmSJEmSJEmSJEmSJEmSJEmSJCliwVvGkm+xucKt9rdzSXr5Sb7YcX/2Xltm0ypJkqQr4QvIJEmSJEmSJEmSJEmSJEmSJEmSJEmSJN1871vfvNmnoJe8v3P4EHySZRlv3ub03qamaSCaNbTz5KFTX6ATa9v8Wg7dtvircdsmm0K0yK7pxCaTCqJlSW9LaPBHFTmdWERUFR06x98VMz/rhy/1N2s37gVhu682u0EvOJMkSdLLTGJYLEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSpBe5+7LnXjrmq8ckSZJ0Jcqm+6pjfO9y3eBIs6gpiK8QjoiWdz6lE2trig6HA4hWLb1+OCIC49PpGKKjZTr0ZEpXLFLnNshp502Dt4MPHNG29JWCXyeNr7bjNzrzm78j9QrtHN823ba48zzxkuxo8Qu88yuWvAJd/Kubmq5Yie87x4oVEXHp/AWILq0sQ3R5dQ2iWxvrfOiSG6tqQtsWVLwvXLwI0eUR/aiIaEssJwM6dI2lqK4S96PEqlfheRVcvFMGA2qO+LX6Ff7qEqt88qwn4x2IFgV2TFdcGQeL62Dd9BfF6Q71HW2FDR3+IYI//2feC9GIKLFPxBIaGV7xakJ/piAiCqx6fDvyHOsONnTJQ6/j30UZ4LY5/oGFK6hYeObYCmeJ63lNf5KCr1jT4PgEt42ItqUhSuJvgOAQhv9Mx/LyiE/s2diCaF3X8E++Ym1qjHFp/RJEp/i3MrgkvO51r8MjUyMZET/7t/4riP7Hf+peiE6ntHP8SzAREYk/XoLha+rSIsbj7X1vW2fUlFU1tZOJkWpE4HSpxbqT41yMG4SIyLL9N1bjmro8LN0REefP0cDs53/2b0H0Xd/+lxae1Xh7NFyBbZPD4I1N6jvuuP12iL7h9W+C6LFbjvOhf/zH/kuK/viPQ3QwpPpR4BwwIlG7spI2H2QUzTK64s+cP4enFb/xod+E6L/6lX8J0Y985CMQ3akSc3aedzc4FOAGPLDeVampwZDnHQ1OIXnSnfrrUoHjhBprFx862VixGm9WyYM6vJVlybOhKDL6Qp4PIcp/zov/oFakFn8SA8LBEkR5QBgR+JfbIsMGhweEXE7qSFRbHjG2eMELHNS1Ld3KSN1Nvh3XUv6TfxSOC1KGqxxZ4K9O9ac8NUjNWahmJdsqXr4seM6CdavgOUvqD+VxOFESsO5g2Y9ILTBWNV2TDNd7i9SxM3ysUOPt4KXmxF+BTA6D+a9Qckt3bTIcO3EjnJhWp6pHnpjA8joeVky8IW2TWFbiv1HJEuvnqTXA1EMHHjth7cDVmxrrXaQGZnyvE786+ayEHyvUOE7AfSdvR3EN/SkfOzECwf0mv5LzwhGONpMlISv2X8K5nBTJJRasHdNEvaZt+YrxMnVENPzkN6MBTJvhBU/cjUjVDt4W/w4wXxP+a7rJ9V7eGOenTeoPnvFokyv9NXa2iT9BjHUnxxMr8YInxxgVtpNc9bhXSpYE3rzEwX9q9TJx6GbB87LnDo3rGHxkXn7nnxypu8m3o8baA08Pd1VYAc49ywti2G3x1CA5DMZJTZa411yrU1MDPjVc2+FKvbZGmQmRaidjmlrIXoyfhkxxvhMR3Ke1uKwavCTbqVrmj4X5YwuYP9a3/Q3MH9tH2tge88e6zB/rMn+s61ryx3pHfbMfbk0XFsK6mZg/1hc1f6zD/LGOF23+GC/0mT/WZf5Yl/ljvW5Q/lhE9OaP7a0ImT/Wz/yxDvPH+ra//vlju8ODK86f6T+E+WNd5o/1RM0f+4of3d7/iEh68fhrlzZ+/shlK5CzNcL8sV7mj13t5leVP3ZfNv/f72+f/49FFm01u2HvJ3Obzw7kzB+72kObP9bP/LG+HdDW5o91Nzd/rMP8sZ5Dmz/Ww/yxeeaP9bjK/LH9D7glSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZK0SO9bxuDVY1e11f52LkmSJO3yBWSSJEmSJEmSJEmSJEmSJEmSJEmSJEmSnvczaysLY20OG/7Ixsbef//coUM9W7f1vs8qz+n/GZ3TeT33FYjxiTUZ7beIAvd8Ta8CSm3e0LY5nndEltEXqpquCW9bZIn/G3uTTTFOO8/7buX7LqzzEaWD6YcubqS/JKGfO7R4VCBJkl7ifAGZJEmSJEmSJOkyP7q9/UIe7mdXl1/Iw0mSJEmSJEmSJEmSJEmSJEmSJEmS0q/yliRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJ0pX7oYsbN/sUpOvghza2bvYpSJKkG8UXkEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEkHSHmzT0CSJEmSJEmS9CJ1XxYR8f726r6/Z3bDvV3tfefKdytJkiRJkiRJkiRJkiRJkiS9pP3ckUO7/1EUGXytruuI+KGLWzMbrsx+oW1p8yyjaNM0EM1z2nb35CDIJ9bwvtucj1xklHnctvvPS+YrVsc1ZTxnOf0uvmI1Xu2IKLEg8b3mX13Ec9Ef2tiCr0mSpJeHcrA0uKoN2u0phfMCgvV0wjsvBnQyDQ9i8NCTCR2ah0cRMeATCxp7RUNjyp2dHT50kfMNokOPRisQrVIjThyvRtVWEC2DbgcPhdsMr2dEVdEXBng3s5xuR1Nh8Y5YWhrhzulXX7nBYH4/OU4tIjV/oFsVkeN8LFk7soKnPXTBl1ewiE4StSMLnFO1dE22d7YhOhgMac+pujOt6Jrw3WywxcBfnN55zo0VToDzQeKFlc0U24QRXVJebihLOvS0TlTbqt3/9JgPPSvPF36zXbAiMq3GtEO+4NjYZFmixRgN6Qt1TVeswMUjuA67qorudcbtPx56WnNTF/UOXXDGNYfrZVUlTmyIxSzDFTE+sQa7y4goS27/sU3gNa8s0SEWnZ7usij2LLzm1e1DZ1WTRAN+LXgZscTrGRGTCRWVAbaikwm1hJcunqcDZ4nx+fbmJkS5s+YWI/BWRmq0mZd0r3Ns3gcljegi1f5P8FfvTPGaXNv7NXIcbSZWyXGMwcOqiKhx59yAlzw+SfRasbGxDtGqofLf6ejb2RC3J6lWNm47dStEsSWLqqZeqcUfFRHVFO91SwW4GmMrWiQacO4duP3fxEodQZcsWW2/7b3fBtHv+I7vhOhwSG0sd5cRURQ0Zx+tHaGNU70DaRPlZHzxEkQ/+G9+DaK/+qsfhOjnv/hFPvTHPvNpiHJbxZMtXkxIanHE2GLx557lG9/xbj70l770IES3LtJFGS5Rpb60TY1kRGTYY1YVjQQ4ys17RExxLsblP8944sAz32vq1Eqc1NQ4A61TdbpMrbGAlpMA8Ec1uEISEXmx8Fffdw3VbvYtY7172/vCfVm8v+2ZUSYXxEDGJTDVqUVGJSHHwU/TcAFO9rb7v+gVDvkKXk0IXhmKAV4xnhAlF03bBieJeE241mc4K0kmmvCAkYsoz2gSlzt17Br7xJIXbFMjkJoX0zD3J0/M6Kln4WFVRAwS+TdU9aa4SMKnHam71eAYg1PEuBDy0n2kMrGmuCqVaGNxhTAp1ZThr07tvMGvJNYicKLHK8lcxiLZwmMx4qYMeurnDo1PvvhWcyGcpp6aBf7qHKN86AZXknmFJCKyxDJIYuIBwSaZXok1lx/TcKXm3zydJm5WgVP+SWKBnVNOExWX2wSuO7xmlezKeec19g7XMChL3w5ei+DfxWkPvOeI4Gca7TX0tkX6uQD+apzo8YCQJQfYXDFbbDEGOIVsU2vgQ8xCyQdLEOXizTeLh98RUeOvLnFCVGT0o2qcLkXyfnERrXiFPPGrE0/0eNjGu+Z2MlVOODkhNeXBats5cfPHwvyxBcwf67qh+WPwyNv8sf5Dmz92lTs3f6zrWvLHenOlZj+EYWHbZOaPdZk/1rNz88c6zB/r29b8sU7U/LEu88c6etuTmQ/NH+th/liX+WNdNz1/bNHXzB/rMn+sy/yx/qMvvpk5P36d3UnfSfIs0vyxq2X+WP/ml49wZv9p/tiCnZs/1tk5RveRP7b34dXmj819Yv5Yl/ljPZtffsFmX2m3P9f4MrKfPrS8+x/mj/Xs3PyxbtT8sQ7zx66W+WN9J2b+WA/zx+IKRmKSJEmSJEmSpAPn/W28/+qTXXu32n3L2NwnvZ9LkiRJkiRJkiRJkiRJkiRJkiRJkl4YvoBMkiRJkiRJknRF7suee3dY8msRz71crPv9vZeU+fYxSZIk4SHYDwAAIABJREFUSZIkSZIkSZIkSZIkSZIkSbpZypt9ApIkSZIkSZKkl4Z9vzJs7zVk92Xx/va5f86+p0ySJEmSJEmSJEmSJEmSJEmSdEPtL4V7bqu95PBFn3S/IEmSXrR8AZkkSZIkSZIk6bqZe7o891B59+1js/8rXUd/+dmLL+Thfv7IkRfycJIkSZIkSZIkSZIkSZIkSdL+7C9zu7vVbFr4bE747Cd7/4x4/hNJkvTi5AvIJEmSJEmSJEnzZh8Vzz4Sjmv+O1Tdv3MlSZIkSZIkSZIkSZIkSZIkSbpxdrO4rzaFe39b7W3i28ckSXrx8wVkkiRJkiRJkqR5vQ96r+Tp76LvzH3ug2RJkiRJkiRJkiRJkiRJkiRJuomuyx+o7tp7bZlJ45Ikvfj5AjJJkiRJkiRJ0s30vvX1m30KOujm/izbbK7DXl7F3nfMhJAkSZIkSZIkSZIkSZIkSdLLwI1Li93NvL1BLziTJEnXUVnX9dxHTdPABkWZQTTLKRpZwWfTNLR521K0KHPadU3RNjVeqZopRPOgE5tM5q/wrGKQeAdciyeX4Zm3Ld3KDO9VRAzKAe28pmtSVxVEy5J+Nd7IiIgB3utEAQ66ZHy1I2L94kWI5g1t3nTq2iJVp8xkkag7OVauwYBu5Xi8AdEmT9yQxEXDNmGIZWw4WOJDb23Q/zF1MhnTzocjiN5y+gREdza3+MQmNZX/d7zjayFa4BX7rX/34dShJxAdFvSrq8AWA39URORYMScVtRhlQQW4Lbh5T7Rlo3II0XG2A9GdCZ32rKpaeOXbrP/Cri6vwA6bKV7wilrR4TL95IiocOcZ1vrJlK4JdxwRMRzSuWXYM1XYiu5sU5WPiAF2PTzGqLD9HpTcRCca//EOVtsRXdIcr1hRpMYYHMYOuampxVhU7J//AhZw7jBL7HfynG5HkV9pX7xg5zn8M7DuJIcBoxHVjjyjnZfYAi+vrEH0rrtu4xM7+9AfQLRtqU1oWzoxvlkRMSip22q4Y8J9T3cSXXmJrVk1oWqbc6eGDQo2RREROY4TminVjsEA955qETK8X/y7eKTaNIkxxlJG92tpSDdreWmuEDazoari6SefV2xt0Ynx0KjmdhAnmBFRTbmZpZ2vHFqmLXH2GhEVjjaLAidE2CcmJvSpnoUHME1N44TtLRoQJvHwZnP9EkRrnFbnOXXlVWp8zvX6a979boi+/V3fuP9dR4xW6Jr8P3/iv4Lo//QP/xFEM+wQIzU/HeEKzC/83Z+HKBfRd7796/C8Ym3tMEQPHz8F0RzHsdcqo4J04VlaA/nH//Dv877/wT+gLzz62GMQxQWtWFqiMlY1iaasxY6pxRLOA5gSl6QiuYSCQwHs56PgZb42OTVInLl0oMy+ZWxX98Vke8kQ728XLkeXXDFTq/MlT2+To9XFponBZGI9IfGsBEdleU4NeIGTqYioeN6Bhy5xgbFKzUryAudi/BAHnxpwl9ckF1hw9SZxTXDVNKrEUltR0FxsUtGZ84PE5Py05Q4Xbxavd6Uew6TGovwFvNktlhNeNY30czH8ZS3VrCz1YJfjBT72rfEZZ41XjPccqUl9hTvnFiO9hIL3q8XbUeCAcIzPWYap1WDG02pe27kCWP65FcXryYX/Gndec9XDeUeijY2oa553YAM+wuen6SKKSyiJ7IL99zsRUeH96matzBoMEpeUpAZOBZ55hZ1ajUMjHtFF6tT4mrTYgOc5lZMa+52IyDllg0sC7plbm0jV6wyLeM0VIDkCx991pc+M+/CJpR4LJDombgj56VK3CJo/FuaPLWD+WNcNzR+DhzXmj/Uyf6zv0OaPzbtx+WO9OWOzH0IKTZs15o/1HNr8sQ7zx7petPljPDs2f6zL/LGeqPljfa5r/thlevPH9joj88f6v2D+WIf5Y103In9sd1E0mT/2lS/3n6H5Yz3MH+tGzR/rtXgJklfvL9dzFO7zCq71+KuH+LgkImo8OD+LSYwTEklDqSc11/B8lh9J82Aykk9q8IIPrvKpxBx+UsPnXeFCdHSq3uw/kw+dM6wddYMzNfPHeqLmj81/eLX5Y3OfmD/Ww/yxjkT+2A22m2q7978RUXylXTd/rMv8sS7zx3p2bv7Y1TJ/rLtn88f6mD8WETdyEUqSJEmSJEmS9FLzvvVEzr308tP7d9Vmkx72Ptn7XJIkSZIkSZIkSZIkSZIkSXqp6ObE7iXKQmbsoq1mN+z9pLu5JEl6cfIFZJIkSZIkSZIk6WXuSt4aNpv30E132Pvct49JkiRJkiRJkiRJkiRJkiTppaU3AzaZFnuFW+1v55Ik6cXAF5BJkiRJkiRJkvr99KHlRaEi6IFw2yb+WFWR5xAtC1y7zmjnw3zAh66DNm/bet/RumkgimcdEZFn+1+xr2o6sbxIHLvBMw+81xn/sPRfLaNv8NZVVc198r71zd3/6P41tv1lMOy9hmz3vWO7/0z+qTdJkiRJkiRJkiRJkiRJkiRJe35oY+tmn4Je8j5wdO1mn4IkvTz5AjJJkiRJkiRJknTQzb1WbO8/9j7fewfZ3pvIJEmSJEmSJEmSJEmSJEmSJEkvgPddWL/Cb/7s4dUbeiaS9DKT3+wTkCRJkiRJkiRJuj7uy/rfDnbtrwybeyWZJEmSJEmSJEmSJEmSJEmS9OL3vvUrfW2TJEk6gMqbfQKSJEmSJEmSJEnXx95rwq7w86vdMLkfSZIkSZIkSZIkSZIkSZIkSZIk6SXBF5BJkiRJkiRJkiRdNf8cnK7KLxw9dLNPQZIkSZIkSZIkSZIkSZIkHWgfWFuLiLat4TtV2+z+x1/f3Nn78KdWl/b+OyvoEEWTQ7SOhqINRYvI6MARgX9puMZwWdBpN6m/YZwFXhRUZPS7qraC6LC4ppfGTFu64DmeGPjhS5u7/3FfFnH1fwF6bqv7vnIWiz7pfkGSdFXKbt9eYgfTVNQ5tTWNM5os0Vrn2OtmOXXY1XQC0XKAPwpHIREx3qRfHXhiGIxTJ0/xoZtmCtEKh2bZlE57UCRGMDVe0rzcfzlhbapT5/uVxQCidVARTR56Mh5DdGdMN6scDBN7/4ppPX/1MixFEdHiwA4H4ZFhlU+OwgcDOrmdrU2IlgXdrKZOVcydbYgWWETf8ra3QvRTn/0MRIdl4lYWGR165dAaRB95+CGItqmSUA6WIVph3akrqgA5TpkiYliOKFzi5lj1XvmqV0L0icceo40jauxZeBbaNNRiXKFh3l+JMpxxDQdUO7g92ZlSSxURQ7wdWU1XrODJc6o/jeAek67JeJt+13SS6HdyrJiBfUfLpYivGLZFEREjrB1YTnIcZDTc+ke0WMLrFscY2HeUeWqVBM98gOWf687S8gpEl0eJE+stw3sftpePu+a/itdzlCiBiV9dTWmM0eK9PnMbtc/3f/4TfGJ/6k/dA9GGF48SK2qJItrU9KsLHN7nOHhqy8TwZmu8A1HeOMMBDF8RrtQRUePwvsQGh7u8xJlFlNhEcxOcmAamRrpj7NcqHB5Bx9Q0TdPsf84SiRY6Ma2e7FDxTvanjzx6FqK3HDsB0Tvuvhui51IjqxzXwRssSRUWYF5gT9aOVM3E08YGvCgSLcYYm+hE7cJgVdGUvOE5YGoZpJ5gG5vTzapTM7UV7PX+wl/4Poj+/b//DyCalYmuHNuqaHDOn7V4TbAUtS3drIjYxKlxZOcpyuVkkhj81/i7eGSVYQP+p//j/xMf+k9+z5+kMN6s4ZCGRkOcEK3depx2HVFtbkC0XKKdX8LXDP3yP/2nfOh/+s/+OUQ/+alPQ3SMUx6e0UeeGIsmxgkRJfXXWIpSg4zTJ2+F6H/0J78HokVG5eR3P/oHfOgHHvgyRBtc5R5XVPVKbG24pYrUOgYvX3KP2aYOzW0Cj7FzXGquU+MuPrUab0eRGt5LLyp1PVdicXEynafCox8Ktjioa1LPBZqKKmbixHAel6UayryhL/DwnicWOa5otckEGv7ReDtynHdwrxSRmKCmhny4TIfLuRExrXHaghelxtw1LkXJZegCh7IjfDjFPSav/ERqpS4xP8U988pPlSonBXbWOV7wHJujJlVtE7kHfMG46qUqJp9aiyMrfi6QYe3gPUfqdvDmOTYobep21LiSV+Kfr7vGJ0TcoCRWdLHFGI5oDbzFhziR6jsSg2TsOzihIlKdy/LyEkTb5Pgetk19gTsmnpVU2JilVtqixRanmR9KzW1Le14+lHjEz2ubicERX1Nekko1ZU2qDOORr3Jb88fMH1vA/LGuG5o/1k0b22P+WC/zx7rMH+u6ifljizLHdkPmj/XEzB/rMn+se+gXPH9sD+ePcYth/lhvmA9t/liX+WM9h95v/lhE9OaPXXlSmfljXeaP9TF/bN7+8sd2u8Jk/tiudsGVNX+s58jmj3WYP9Zr3/ljl51F307MH+syf6xn82vLH5vrUmf/mSy+/EiCF1j4ZnPPEqlJfYG3k9cxhqPUc0y8X5xMwm+o4SF0nXymwJUDl/G4/A9S7SQP0cscH0n0ndhMFtnV5Y/NnYj5Y13mj/UF6f/gvI/8scHMhNf8sZ7NzR+73H1XOlpMbLX3MrL7srgve+4/5j7Z++fu99/fRoGzSPPHuswf6zJ/rPfYEDR/rC/6kskfu6aXWUqSJEmSJEmSJL0Y/JVnKUlUuuneh7nIN8JPr9L/106SJEmSJEmSJEmSJEmSJEm6EXbfC3a1ryHb31Z7m+y9j0ySdFVSfwVCkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkqR9uS/bz8vFkt7fPvfeMd8+Jkn7U97sE5AkSZIkSZIkSbqefuHYobqq37e+vffJB9aWZ7+QfHKd5/QXXIocH6/ktPsiK/jQTTQUxufibUPhNkv87rapMErb5jn9Lj5y0yae9nOcf1WL4Tx1TRr82S2eWdNERLxvfZ0PIUmSJEmSJEmSJEmSJEmSJL3s3bgXhO2+12z3f30NmSRdLV9AJkmSJEmSJEmSJL1w9pHfsPcH33a3mvv7b+9v578gSZIkSZIkSZIkSZIkSZIkvezdlz2XSTubTytJunL5zT4BSZIkSZIkSZIk6UC4L9tPZsPsC8tmN59719jeP02ekCRJkiRJkiRJkiRJkiRJ0s0ymzG799/JNNruVrPZs7v/veiTMIFWkvarvNknIEmSJEmSJEmSJB0I3ZeI7WPz6Lx6bNdeckZvVJIkSZIkSZIkSZIkSZIkSXoB9OayJhNcr3Cr/e1ckrRIGdNm7qMMX0o2/+25bVtqkjEYEbGzswPRwWAA0TzPIZoF/T85miZxZkVRQHR8aUKHzmjboqQfFRFNRee2NKS7NSgo2rZ8MyPL6cyrqqZD481qGjp0WSbei9c0dMHbjHY+mYwhmnHpj8jxC0ujEUQ3t6l4zzp06NDcJ49NKt5kaTikcEalqK7pVhZF4v8Fxffr4oWLEOU2YeMibZvcvq6oJNz/+S9C9Ef+i78O0Z/8iZ/k87r3nnsg+qEPfQiir3/TGyF6z+tfz4d+8oknIcr3+u6774boxz/5cT70bXeegehDjzwC0a9529sgyiXh2PHjfGKTjQ2IZkGliPqVuW8WC7+7dni19/PJhNqEDGtetvhwEZE3iWrLjXCR0c652g6HqU4Ne57xeJsOjV15VSe68kceeBSiZ85QAf70pz8D0aXl/lu86y1vejWfWIYXvMJqy9ekxZ46IrikPHv+PERPnDgF0ck40W2Nx5sQHZTLEF1bot6Wu7wpdg1x2Xiy7n44V/7n7lyD7Qnfyt3twfKIKleJY7bjx6iMHTt2Fx04YjydQnSY04m1ORYybMoiIsdmuKmomLU5XdCdMQ0II6LAylXXtPOsvPLeoyM1K2nxitZNqpjRrlNx7ABSczHcM/d5EUMc6JZ86MU3K6ubDA/dpi7KAMvwyvISREvsMfnEIuKBL30Zome+/hUQ/fmf+imIfu/3fi8fOsvxsmBwaYgNOG7Mo5dIDXTLgkrRAKvtZErTz4jIsRFusWLypLtuqKErcNuIaLmxwlKWuOA46Y5UGS6x7rTYledtsqGjQ6+u0rCN1zEGJa6QpDr6SUWD/zN33UIb4+04+/CDfOgWq22OzXuJtaNJLSuVJbcYWPUmNDUYb69DdHsrsZjAbcIO1nru5r/127+dD/3tf+y7IdpgrefhYomrNzmuEEZEUfZ0Wz8Xd+z999e+feG0/aMf/X3Yc5tYS44f+ZH3QfStb/lqiL7m7nshurJ6hA/Nbd1wGae3DQ2SM16mw5FqRARWrmrrEkQffoiWX375l36Jj/xvfvXXIPrY2ScgurFJs7ztncTIaojL7zkuoW+NF7axeWekOrj8n8dvxRY44s9/35+F6Nd+Da1ofeITn4Dov//d3+NDf+ELtHq5vk4tYY3FOzmyGgxpVr6zg09DsKHM8VlJpGY0kzEdusDOuuYlrdSLwHKcjLUN/eydilqMWbN/hO2qvtb799ye/8KCSRPPxdLPSnhVCi84D4O5GYyIBkeMRU7zDh6fFwNqwKs6sd6VqFw8pcd1urLkyVRUuEiS53g3cXifbDF4CYUnHmVGzTtPiK5g8YVXufFxNq/PpFa02sRFw0li4AQT13t5QBgRBa7UTbj8YjTHsX1ENLjAmBX7XyRJXe3EYhtvnuHGOY5eknWHv8C/OvWIJ/GYhgthEzwroXvNCRWRLEhYhLl7TPQ7qY6+xdUGTvbgbdtU7ajx2RYvStXY+E9x1TStwWQPvCEDHL3XqY6eLxqPNrmINsn1c6z1/DiPc28yvB1NalkpUXe48qCe1sb8MfPHFjB/rOuG5o9108b2mD+2j+3NH+syf6zrWvLHenPGZj9cOzS3Av98+7N2eNX8sS7zx7rMH+t6ofLHenD+GE9hzR/rYf5Yl/ljfW5Q/lgsWIvb+9D8sV7mj3WZP9a38+ufP7b7+RXkj+1+u/8MzR/rMn+sy/yxPdclf2xW0/b8QPPHepg/1rHv/LFdg8UpZOaP9TJ/rOu654/t3YXEhKg735m7hom5A4+7zB/rbHvA8seee+B19flj2UzRMn+sb3Pzx15E/tp5GjtJV+If3HYrRM0f6zJ/rGfbl07+2Iu3QZckSZIkSZIkSZJe9t7fXtFfXdt7xdgiu6H7MvqOJEmSJEmSJEmSJEmSJEmSJEnSLl9AJkmSJEmSJEmSJL3E7L5lbO/NZfdlz/33lbzLTJIkSZIkSZIkSZIkSZIkSbru3nfp0s0+Bek6+IuPn7vZpyC9cHwBmSRJkiRJkiRJkvRCuC977sVhs/89+2Gv3XeKzb1xrPc7e1+TJEmSJEmSJEmSJEmSJEmSJEli5c0+AUmSJEmSJEmSJOlA6H192KJ3ivF39r0rSXohvW99e3EQQvv0gaNr132fkiRJkiRJkiRJkiRJkqR9+MDa8qJQVgxgwyx//u/x/tXzF/f+++ePH4mIpmn4uJxO2+LmWUNbF0UB0eSJZRn9nWGONk2FJ0bXMyIiagri3z/O8xwPTdckIlq8pDn+6sgpOhwOIZql0qqratL98PufeDaxmfRy5AvIJEmSJEmSJEmSpJebH13fuNmnoBe7Xzh69GafgiRJkiRJkiRJkiRJkiRJkiTppqG3DEqSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEl6mSlv9glIkiRJkiRJkiRJkl5of+XChV84evRmn4UOivuyiIj3t1e9yexWc590vyBJkiRJkiRJkiRJkiRJkiTpypV5ns991Da0QdZWEO3u7bI9t4m03+GQXohWFLTz8XgHolm5RAfG046Ioiggyr+rrmuInjp1kg89GNChq4puR+AVG+a054ho2wyieeDdrLEY4RVrctw2IjI885YueIm3chLT1KHpklYVbp5dadr7xtb63CflIFFEc7zXFd6ODLdtGrqeEdFgCW8aOvRkG6stHzgixzLMzdFTzzwF0V/8xV+E6PLyCM8rvvTlL0L0ta/9KogePnwYos3KKh96ZzyB6Ktf/SqIZiVdz3ccfhcfusCK+fo3vAGiXMI/+MlPQDRvEjXrlmNHIFpvUREth0Pe+fOyhQV2UaQsaed1Tc17luh3EtdktDSAaFNhi4E1c2triw/N/ekEW9G6pW05GhFNS8Wsrih67z1vgujGJjVlTaqIBjbw3IpmeD/Kgm50RGxv0ZkvjdYgWk3pdz362GN86JMnboFoi1151VA54SLaYgmMiKrv0HsfFvjq3qzBgRP2thExnlD1SRQj7KxbvCjJExst06+uK+p3sowK4WRC20bEYECbFzmd2NbWBu478aubjGdEdElb3HkbOLJKTZe4hOcY5uZoMEp0eZMdajGKAd2OBn9XkfrVdYVzB2wxsnKuFE1nQw3uOTkabfALBTbCTUWnzVPIiHjr17wNor/3+x+BaFlih9iM+dDcMeVY/rmIMh75R2pOz9ExDqGTWrwmXJB42wF2WxlOTiM1Tshxfto2OMFM/OTESkWT6Na4pUuUhMBmtkzM6KkklBm1k0WWeL//H/7RH0H07q+6F6KPPvRliGapJZQcr2jd0M1qp/uvthGR8eoNrsDkQds2ieXHRO3YHu9/3MUjq5ZXwyLqOrXuRGjnPKNJnVcUg0RL+IGf+ZlFoXd/4zfAhsnFMB78c3S0TL3tYDWxetPsUPm/8MzjEOV10Sq1mMZKbOtwvTaOHj0O0T/35/8CH/rP/Lnvg2iFywWsLBPtJHdbTU1F9LOf+9zsP/9t/Ed7//1P/td/9Of+7F+M2Nz7ZHT5Us/f+Bs/xid26sQxiL7pLW+G6Fu++u0Q/XN/9i/yoVusP7zyGTj4TxbR4Yju13ibWtEMG2GeOCQ6rYgWexaexpW48rmxwVPIePLcOYj+xH33QfTDH/5d3rn0YjBdsODW4uw1UisZec6rfLQxzyCz1JydexZ+sMuL2OkRHa8qYXNU4s9qcKmNn9ZFRI2DwsRAl6eBqUliljUx85qwq7L3wrL7srgve+4/5j7Z++fu99/fPr98McWHDgV2PTkuP06xP+VbGREtJmTwlJ+LKM+LI7kgjMPNxKFTg3++4Fxt+XE2j4yST82KAU35p1NaLuPROz/si4gRHnqAo7IcbwcvzpRFYjU40RLiY5oGE4qSsyVeBuRlJW7eh6nHvg3W+qzBiTPPfrEQ5qlVvgoXf/DZVGJq0I2aPxZh/lg/88f6Dn0D88e6aWN7zB/rZf5Yl/ljXTcwf2x7u+fDmfEtDHWzzPyxHuaP9W1u/ljn0C94/tge88e6zB/rMn+s59Avovyxy7ft2/PMEoT5Yz3MH+syf6znC9ctf6yd/zydP7b73f5DmD/WZf5Yz+a4rfljXZw/Nqv3FM0f6zJ/rOuq8sd2zWaRjYbDRSlk5o/1Mn+s67rnj+3dwRp/9LSzQjj3ydJoBTZfWqYBDI/phvhkKiI2NvuWRr9iZZkeyU2nuPKZWqlocQBfFPiccUgndo2P2pvi6p7Pzsrya/qzezx2Go/7J3rjyTgiclxB7M0fmx05mz/Ww/yx/q8s/E7WUqVetEgy2d6KiBxzb8L8sT7mj3Vx/lhE1IszZMwf6zJ/rMdLJ38sMXOTJEmSJEmSJEmSdB19YG3tahPI5nACGT8lvbEJZEs3MIFsiglknLHKj8P5WTtnNkTy/ylxIxPI+P+GVC+4Yj+6vdn7uXSD7L4pbH+vIevuZ87s28ckSZIkSZIkSZIkSZIkSZIkXZVEHr8kSZIkSZIkSZIkSdJ1dF+WeCXZ7GvLZl8uNvvJ+9vn/0OSJEmSJEmSJEmSJEmSJEnS1fIFZJIkSZIkSZIkSZIk6YWz9+6wRWZfNLb3qrJF7yNLvs5MkiRJkiRJkiRJkiRJkiRJUld5s09AkiRJkiRJkiRJknTd/NCFZ6/wmz98afPaD/fTy6Nr34mUtPf2sdn/mP1fSZIkSZIkSZIkSZIkSZIkSVclv9knIEmSJEmSJEmSJEmSXp7uy55/O9jef89+2Ov97XNf2/vvvT3MfWfuQ0mSJEmSJEmSJEmSJEmSJElXqLzZJyBJkiRJkiRJkiRJkl6eZl8fxh/ydxZtciW7kiRJkiRJkiRJkiRJkiRJktTlC8gkSZIkSZIkSZIk6WXovizial7PtPv9Pe9v6RPf+qQXoR++tHk9djO+HjvRS8kv3nnqZp+CJEmSJEmSJEmSJEmSJEnSTVC2bTb3UVVNYIMsp921LaWZV1XFZ1ME7b2uaef5YITb1tdyYllBJ7aysoJbNxBbXqbTjtSvHgzoxPKWolkUfOg2ny8bl22O95p/dZvTiXEpiog8oxOr8VfzrpOHruspRKsaf3Wnri3SVPPfzLPEuwKLYkg7nGxDNMMfneWJQ29uUhL/ZHsHolwxc6x3EVFkVIaneLOKgra9ePEiRI/dcoJPrMQS/uijj0H0wvolPLF1PvTyEjUpa+cPQ/See++F6IlRIuf+05/+NJ3YiArSb3/wNyGaYc0q8gGfWIOt6BQLIW56mbZdeJKDQf8ZcvlP9KctdVs5tsARMZlQRx9BjdVwSBc81YjGeIwVExucuqIrNhwm+tPXvPq1EP305z4P0dtP3wbRhx+hSr2xcYRPLC/oft1+Gx36/DPPQnRleZUPfekCNeB33HEHRD93/+cgeuTwMh96UFJB4iY6GipnDUbXDq3hecXxo3v/p7L1mQ+fu5IXL25d9u3ssjKZYd1pWyrAEbGzjRUTa1fTUCnK+XI2ifFJiYOQAY7AMxyzlWWio6+x/a+m1BJmOEhIjsq4Nctw8MQ75xPjWxkROMRIDHRzLAp1lWjBixLvNZd/3HON20bEUonDURz870wXHnxnmui1SrxZEXHsCLXwkykNg0v8UYlmMOKzn/0sRE+fPgnR226jQR1X24gocejFm/O8m7dNnlhyKgdyrlrXtjnXaz5tbgbTAy+sXFnOTRlGeWEoYjqlIR83OBVGizJREjhc4BLKaEDT6uDVcjkwAAAgAElEQVRCiNczUkOUxx58EKKf/CRNtd785nv40Dyz5ilPhutCgzLRWPGvnk5weJNTKcLziml1Ta8JyLhN4GNjrxTJWt9QO1nwGAPvRpYa/FQTuuCBfRNXjlOnEosJ3IryuGuC0+ql1BjjD37/YxC9+6vozJsMm2ge1PFKXMQUSwKPIgJPbPHSxVe+gKsNbY0nhq1Ng11DRNR4chmOKO+843YInThxOOL5ufOJE5ctjq2uJFY+V1ZpGDyZ0JDvsccegmjeJlrRV999F0TboEuaYUkouSmLqCbUkA6HdNF47ts2FJ7iLC8iAp8f8Sh6ewfbWNxzRJy+lRaE/9uf/NsQ/eZv+7aFxy2KFhurX/jAz/OJZbjA8rrXvg6iLS4hlqkhH1/wMc/Zcd+rS/zELSpeBsGehXvb9XVafn/gyw/iecWXvvQliH7x/vtp5w9Si7G5lXiV0jPPPLMg8ux9V/pgqkfve8d6v3BfFu9voyjmD8ZdYqIdRMlJIruWmRo/4oyIFmcHJdYd7m0b7i5TzTv/rgJ7Wx7nJqfkySUv6UWi98ldgSvkPPNd9IhwT4VPvkYtLs7jem85olWO5GpwVdMDi+FgCaLcJJTDRGPFC2ItLjByekzyCRGPZWuMTvG0U91War0rsVJNh+b2t+gMy8wfu5ITM3+sZ3PzxzquMX+smza2x/yxXuaPdZk/1nXj8sd6c8ZmP4Rh4WAwMH+sy/yxnkObP9b1AuWP9UjkjyVyiswf6+zZ/LEO88d63aD8sVhwYs1Xbr/5Y73MH7vazc0f69pf/tju58n8sV2LvmT+WJf5Y13mj/Uffb/5Y7NOn+7pg8wf6zJ/rGvf+WO7IIXM/LFe5o91Xff8sb2zvZL8sUfizz//yS/8D7NfMH+sy/yxrpVjs+Xk+ZO89fTpiHj2madp133tyewEjYdO5o91Hcz8scBrnmW8Vjz7r+nM50VcwTi2HOAKDDbCHM15bTM1NagbOnMe8nHyQLJ28JlxUkSLs7wiVTtSiz9UwpfwGRBX6iI5AseqF5hCZv5Yl/ljXS+h/LFrWieVJEmSJEmSJEmSJL3YvL+df2vYtWx1X3bZK8lm3z4mgR/dTqR5SS8S33/23M0+BUmSJEmSJEmSJEmSJEmSpJvAF5BJkiRJkiRJkiRJ0svf3HvE4GsRl71cbPe/9z7f/advH5MkSZIkSZIkSZIkSZIkSZKkl7TyZp+AJEmSJEmSJEmSJOmG28crw3o32X0TWfc9ZRL46eXB3CdZNv/JrDxvIFpVFI2IfEC5EEXQq/iKjKJ5ga/xaxN/BK5uphAtB3RN6prqW4anHREFnlqWU7ht6dAFbhupc8syuptLSysQbRralk87Ir7vkSf4C5IkSZIkSZIkSZIkSZIkSS9viTRQSZIkSZIkSZIkSdIBMfdasfs6bw26L3su6qvHJEmSJEmSJEmSJEmSJEmSJOkljf7qryRJkiRJkiRJkiTpJWf2xWF77xSbe7nY1e5q7r1j3XeTSZIkSZIkSZIkSZIkSZIkSZJeQnwBmSRJkiRJkiRJkiS9rPS+ZexKXj02951Fm1ztW8wkSZIkSZIkSZIkSZIkSZIkSS82ZdP5w9RFUcAGWU67a1vKNB8MBnw2TVXh3hsIZhn9ie3xeAzR4XCI5xVbOzsY3YRo29KJFSVd7YjIMrqkbb7/Pyy+PaYfFRGB5zYa0EWb1hOIFgWdNpeiJL4iHC0KLN8RRUFlGMvgVVhdW5n75JmnEyc2ranuDEs67WlFtSPLE4fe2KTyP6mntHNsUMrUBa2xTUjdbTLd3obohTEV74iIoN+V4yVdv3QJooNUlc+CrskXvnA/RL/0wJcgetddd/GhT58+TTvHQw/LEUSbhkpRsr0YjKix4i6vruvU7r+yn3LhCz0X9X1Vtf92krvLZCtaYpvAdaeqaOfc20ZE0+IFr6gAFwMqJx//o0/woctyCaJra2u07ZBO+9Zbj0J0MqYCHBEXzlGt39mme11jk3D+/Dofeu3QEYh+4pOfgeirX3UXROtp4tBHjx2GaNtS1aux7cdxU9RTHGpGrK711I69D589f9nem/qyf+Y5lZMjR+gnR8SRo/SFxPgce8wWK/UAxzYRMZ1iGc7pihcZvewYL1hERF1RSaiwxagbOrH77/8CH/rZ8xch+s53fR1Ev3z/FyF67+tfBdGsTA1+sGMq8W42eE2Sh25x8xInDjlOiFocOEWqry8GVMyyxYfO2qzggS62RZEa/BfYHiVmeamu/J3veDtEm4YbSrpZTerQDbYJPNDN8ZLxttc4SeSd8xVLXM8U3pwb8ET0GlYDIiJxRdvE0s+1HJqXhnhSniWLaFDNPXKYettrKQnc5UXEyVO3QPSOV78Sor/2678K0Ty/hw/dJJYL6MybxIQoUQhzLKXDEU55EreDToyrfKSaFG6seATCA8JIzdkzHjtxvcTbkVywqtvEtKUYLqy5Gc5ed7ZogSVS93rlEM3UdnZoBno4tWBw6QJNW+r6OEQH2Foluq10I4q1o6bta5wvJftTHvLxcwHcNL1Il1gG4b1TzWqml6/jzf2Tl7gjYjKhVpQ763d+wzdDdPtSYuJ87umnILq6uv+1Ha62kSoJOLpPTBK5Z0k24A3WnxabMhwFR9Mklgt4tlVn9Ltg8J9l7bGj1NqMU+sYS7jKl+NMbbxDi5PPXtrgQx+/5RhEB0NaxytKutdjHL1EckUXnxpwj7mK/c4b3/wWPrHX3fsGiHJ33HYf1s6YTBOP8xa1Zr8Wb+MNr68f2kg9dlRExEG/St0BSZPxM6D9D5IjouQHkTm1om1Qc8RtUaSeLmU4F+N5Nw+cMp7Rp2cWpMBZXp4a9KUGwqnbuRjfjibVn85qO91QluPNwlW+EodGkVxWxd81wR4zb+i0k0s7GQ6e+BE/r3xGJCbOJY4TuBzVU6p6yVU+XhrluVjiMU1iDJ2aqV3DWlzqOcz8NTF/LMwfW8T8sZ4v3MD8sW7a2B7zx3qZP9Zl/ljXjcsf680Zm/0Qer3BYGD+WJf5Y13mj/Xs/AXPH9vD+WPc+Js/1rOp+WMd5o8t+ALZd/5YRPTmjz2/rmj+WO8XzB+7SuaPde0vf2z382T+2K5mQf01f6zL/LGezc0f67Pv/LFZvblk5o/1MX+ss/P9549FdHLGZv9p/lgv88e6rnv+2N6HV5s/NveJ+WNd5o91/eHvf3Tvv5+JH9j77x/50f8iIn7ix38Mtp22Pbdj9rknr+Nx+kHqomB7kpqpcYtS4jC4wuX35MiqwIWOq8pjmT80NoNNImEjMm7eeWkIW/8r+X/iwzhkf/ljdWRh/ljvns0f60jWu27O2FUwf6wnav7YvJdQ/tj+66EkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZKklxxfQCZJkiRJkiRJkiRJLxO/9nVvu9mnIEmSJEmSJEmSJEmSJEmSJEl6CfAFZJIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSdIBUt7sE5AkSZIkSZIkSZIkXX+3/MLf6374zF/5gb3//vnDx3o3nFbj1L4riGVZAdGWd9xSvMVoROT4F7jynJ6PVxX+qDJLHLqlYyfPfN+axHlF1tChc/5duHe+Yn99Z4LnJUmSJEmSJEmSJEmSJEmSJOkmw/xrSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSS8vvoBMkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJOkB8AZkkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZJ0gJTNtJn/rMhgg3rSQnQ4KCBa1TWfTVGUEN3Z2aGNWzqxPKcTaxraNiKGAzqxaOk9bpPpGKLHbz3Gh24b2nmW0c1q8ZqUJf6oiCannVdVBdG8HEB0gOWkTpWTPKdr0madIj278zHtnK9nREwmE4hWFe08Vcqet7MzX2b4J0fE9phObGUwgmhR0O1YWVnmQ184/yxESywJfEmqKf2oiIhEScBtsXbsbFO1XV5ewV3HcEiX9JV3vRKi5y9eoF1jGYtUIcxqqh0ltsAXnz3Ph37ogS9DdLpNDfgSl5NE856oHZNqSpsPh7Rxaud72sXFeTzuL06j5SXYYd3SzYqcblaZJZqbGktCntHOt8bbtC32tkl8r6cVVcw3vfFe3vmnPvVZiD7xxDpEuZidPHkaolubdMUi4siRoxAdjaiIDrAU7WziwClijLVjdXUVoofXqJwsj07yofOgQsgjEO6sF9W4XYcPH+YTWzu+1+s93+jdfvutu//x2CMXLzuTy8+TT2xzg8pYcvNEW4eDDK5ZTUEjukiNGLMcGxweJOPoJSImeDcjw74Dh9DLy0f40Hd/7eshOlo5BdEzr+DROxX+LEsOg+lX89gnx75jfT3RYqytrUGUe61nztMo4vCRxO2oG2qsGhz8wMyiruscWxusOhERt52iklCWNAIvS2rek4fmM+dBXVZiG5t6Rzk3Rw0WBS4nUx7HpmZqgZWLW0K+3ldw6P034E1Dp10k5uyJE2tx5y3ejyzDqRbuOZKjzcQYm4cBieqRB7d11B2XODVur2EhIiK+9mvfAdEGlxruwilkUmLhCGtAdg3rQslDJ8o/3g4uJ1y8r1Hiil3bXCzwgtc45OOuIRsm1gCzNjEIWV5euDrU4vpLG4k9cyva4u9qEjtP3I43vImGfFlGo6OmoUPnWIDra6s7vHA6ndLAKbkazLgB53WMLDW+4TYhalzlLhaeWFnkc7Vj7p8FdnkRUeJCR9bSJf3ipz4H0btf+1o+9ICXyxJNHTZWOFOLiDzDPhGbIx6f84ot9zsRwRPQ5FMeUODVjogaf9fKEq3PrKzsLiZf7A0t4bblIHFi3E5yezKdUHPUpBqrL36JVoPvef0b6dDYgBf8PC71qxPLINjacCmqampjIyJKqly86FrXdMGznCaYEdFitY2IHRxwxuLrlhqVRZEYwNC2qSkNBlMjcB6iMH6ImdwzLkpFhoWQJ6BcgPPUiSVmt3hFU1PIq7ja3bkV38wCW/9ilCiif+Uv/VmI/rH3fA1EP/Hpz0P03/3GhyH6hS/ezyd2cYta+Iqnxjgg3MHMhIgYDqjrabDucUc/SOYe4IxpNKK2jmdb2ADHtLmKR1c9oz9cnCyx20pWjsQqH15S7vJ44lDgOnOk6zWPu7gVTTTgfOjEKgeedbF44rArT5w5z09JKm0hMY7lL/AousbTLjsTIvPHwvyxBcwf67qh+WPdtLE95o/1M3+sGzd/rOPG5Y/1PjiY/RDyWMbjsfljXeaPdZk/1vVC5Y/1MH+sy/yxLvPHul6c+WOxcH3muVJt/tiCQ5s/1vMNCJo/1nU1+WPt3OfJ5JxdxYIBrfljXeaPXS3zx7qu/OFsfy6Z+WM9hzZ/rGfvEIT8sV2QQmb+WC/zx7quR/5YzKaQ7X14tfljc5+YP9YTNX+sY1Hy2O7nfMV6R2WzH5o/1mX+WP8eFg8k9pc/VkQb5o/1MX+sK5k/licnke3CLsD8sd7d05bmj/Xs+UWUP3alr1aRJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmS9DLgC8gkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZKkA8QXkEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEkHiC8gkyRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkg4QX0AmSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkHSC+gEySJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEk6QHwBmSRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJknSAlD/+E//13Eejkt5K9qM/+sMQbWOJjpa1fDZFXmCcTqzJaogOStpzU9O2ETGeTCFa1RM69HAA0aJIvQMup3Or64w2HeCvbhO/ehBDOnQ0EC3wVlcVbVs3iROrG9o8y+ia1C1uyweOaPDQRVFCdDqhcnL5UeYvH592RExq+sID2xchWk3GEB2tr/Oh86CbPQgqhEtY/ldWVvjQfDtyLIQNlpPR0gii05oahIjY3tiB6Oc+9znaOFkKETcoeUG34/VveANEH338MT50NaGaW+T0w6YV1nq80Ym6EVEO6W6WUyr/hw8fSu3+Ofni/mt7e7v3860Fn++a1BVEG6x3LV6xwLONiJ0xNVZ5RqWsbROd2hgv+PLyMkQL7Mq3t2jPEfHGN1IJ59ozndLtKAsq3isrODRK3Y6ahygNNUfjCZWxiDi0ehiim5eegeiDD3wZom94w+v40OWAesxxRRd8Z4fa2LKkPQfWnYiYND2H3vuwvbyDnv8njkVz7pYi2pa+MJlixRzQaDPwxNrU+4hrvB15TptnGTVHk9TQiKcGDz38KEQ3x/Sr77339XzoRx+hnZ8M6lnOn38WoksjGt5wdxkRgZf0yJETEL148RIdusRSFNE0dK8fwDbhzjtu552zAgcwGVauZvEMtMlaHkwmh2W3nqALPuDmCEfvyUliizNrbm7qKU6ccUYTqcYqT5w5/mos/3VnijR/aG7NcACT49SgSc5PsbPmu8mtKBdRvBW7h6a7mXFJwRkon3ZEYlrCnTUvC6V+dLQ8d27pXpcDat4nExqBpNqTuHDhPEQvBc2777nnHojWFZ1YpBZ/eIxdYt3JcBgcqeWdayn/vEiS7E65+nBDx/tO1KxEa5SQ4YJtYhqI/U5EpFZGo4QBZ6Jr4MXeRI/ZVjTlWVuikdV4O1E7jh6nCdH6Bs2n2kQrSlEe20TEdEq/OrU4iavBqU6Ni3jGa/v4q7lmRXI4mtOsZLy5cGZR7UyqixuXfXL5P9vUCnnGXTm2oufOn4Xo5se3+NC3nzmNcbomiScpqW4LB0eJVjTDQphcs0rgVhg7AB7o8gOLiCiw12uxGV0aLnzOsjQcNrguWqfqToMtRo2N1ZgXJ1Nzdl4uaHEJPcO6k2hjI6KmLyQfpoBqyiPw1KyEhzd8YjhIKLLETI3XbCPi4k7P2unsTt/73vf0bjhepxWSiHjwAfrCDq7ZTrDu7DT4ADQ1ex1j7eAniRnfj1QJzXHyy7NbbkXLEtdAsFZG+lfjrJwfSaT608u/PL8rHjEuLdNM7f/+V76HD3fkGI0xVlbo0N/w7rdA9Bvf8SaItjj9jIjIqJkdDqmE8zP6GhvJSLXwG+s0it7ewd4h1QBfukTrk1ubNDq6sEG/6/NfvB+iH//Ep/nEZg07M5QKF+eH2ByNRpRuEakkFp4u8fiEn6SMhokiSnPAiMAur8VCyAtWkVpq4964wGdP2TQxF2Opjn7/43NunyOC+55ubsllO8dHt01ndd38sTB/bAHzx7puaP4YVG3zx3qZP9Zl/ljXjcsfe2qnZyg7mwu0KHNsN2T+WJf5Y13mj3W98Pljz2/M+WOJJ6Tmj80zf6zL/LFeNyh/LBYMJmc+NH+sb+fmj3WYP9b3DQruL39s9/Nk/tiuhc/mzB/rMH+sL2r+WI9954/N6l2UMH+sy/yxHvvNH9sFKWTmj/Uyf6zruueP7X14tfljc5+YP9YXNH9s3mzyWNn5fFHm2K6Z/LHf3/vwG772+aU/88e6zB9b8J2Fe7ia/LGduc/NH+uJmj/Wkcwfe+JcspldeHTzx7rMH+vdGmIvqvyxa1i3kCRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkvRS4wvIJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSpAPEF5BJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJB4gvIJMkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIOEF9AJkmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJB0gvoBMkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJOkDKrFie+2h7sgMb/K3/5qchOloaQDTLaj6bH/uxH6PNB0OI5k0D0bqiQ7fR8onVLe08z+k9blVVQfTQoTU+dJPRuZVZCdEip2jeJn51i1/gX82qKV2T4YhOOyKyLINoE1jMarqVkRWJQ+f0Bb5ieCcvs7m+NffJeEJXLCKmDf3qzXoK0RrL/zRVO6aTCUQr3Loo8ILvJH51g01K1mDdKamxWmmpeDc71EhGxKER7XwJC/hgSjdrOKA9R8QSXtIWm7LPfOYzvHO2PBpBdDrG2lHSBa8ndE2WV1f4xCZjul9tS/ejzK+03u7sLDzJybj/smc5XbHJlG5Wi+3cpKZaGRHRUCtaY4NTlnTay8vUU0dEiR3T9vYYosMh7bzGYUBENNgSliXtvMJLOq3o0JPxdurEKDqd0jU5efoURHd2NvnQh47QIOTuu18J0UFO511VdLUjIrIlimIRHaaKGciLxOild3SUf6UrzPM84vnbPTcWyoNa4CZVRMdjutc5jkCaGjvEgpqyAodVEZFhz8K/a3s7Uf5Zg4OQr3vvd0H0l/7J/xeiH//4x/nQtxw/AdEWR5tPPPkURB9+mLY9ddtpPrFz585BtCgehejRw0cg+h/+mf+ED/0v/pd/BNHlVZwG8jyOB4QRUxwdZVj1ssXj86xtI6j8J+pGxMrK/FR6Fk8Due7wtCIi2prOrigpmheJ2RbjM294CokXtcXRO1/PiKjxmq2tUZdXVdTRp+5G6r3u2KnlJd0O/tXJKTlPnCPb/4w+S00S2xbvNV7TBkvCMNFgBB45pjggrHBYxtczXW0bbBOCalaJ5SQrEs1VXtAAnnvbCscYObZFEVEU1P5PpzxtoZ2X17A4k9p3YuKcWJJKthhcRnnnOO9InVhiLDrAYrZ7BDg2bDbBJdmIyLA1G42ot13B5p3HsRHx5NnHIZrjxJurLdeN5Oy15d4Wo6neITX4x3iNy6oFVswi1YLz76qw/I+355dSZ0O3n74t4tLeJ7efvm32C8nucLLNjRWd2KlTJyG6vr7Bh37i7FmI3n6G5w74NITboiuYwO4bN1aJ0UtydISb87SC14UieU2w/a8Xd3n1dPJd73ozbLu0nFgNzvAJUZ7TNRnjNXkK57YR8Wf/L/8ZRL/45YcgWmERLVIj1aqmkpDhr97Btf0SRy9XUHewiOJcLNGVpwYZbWod+6tf86ruh5+a+e8f/v5v6t3wzCvu5D0XQQWJC2HT0rbcsyQ7NV5Mu5bHedU08YRogkX08cefgegTj1PV+7Xf+B2Ifu5+qncR8ehTC3vMiNihtcm4tIV1J3GzLjPoDFeGA6odJ245DtG1taN8OO4deJy8vkFX7JGHnoboa19zN5/Y8mj/S0MF1qwiufKDy8V5wQ/x8ZnyOPFw6tAaPmDChwaHD9OJnT55D0Tf9fbX4nnFF+MDe/99slPkLl1ah23zAZX/5SX8VRFlSZuv4oQoPfldLLmsxI1wKo2EO7XUhOiado7LSsPEyCqxSNJSIcQVlMi5p04Ng69hKBpZhmlUnY3NHwvzxxYwf6wnfiPzx7ppY3vMH+tl/ljPzs0f67hx+WO9OWOzH0L5n4wb88e6zB/r2bn5Yx0vfP7Y89Ge/LGZf+IowvyxfTB/rMv8sZ6d7zd/7LmtF39o/lgv88d6mD/WcSPyx3Y/T+aP7Vq0lGj+WN+hzR/rbm7+WP8R4NipbZ/Tm0tm/liX+WNd+84f2wUpZOaP9TJ/rOu654/tfXi1+WNzn5g/1mX+WNds8tinOp//8TdSE72XP/aL8af3Pvz5n/kv9/7b/LEu88d6ddPG9lxN/tjFuc/NH+uJmj/Wkcwf++///r/u+/j5ldhDK6uLtjV/rG/n5o/Newnlj+1/xVCSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEnSS44vIJMkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIOEF9AJkmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJB0gvoBMkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJOkB8AZkkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZJ0gPgCMkmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJOkA8QVkkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJ0gFSbm9uzn1UFAVt0VJwMq4pnOPGET/5k38Lok3TQPTd734XRL/xG78RosMSf3JE1tCb2rKgzeuWfvXS0jIf+tLmMxAtczzzjK5Y4l6m5BldkzaoJJQ5bVs1Uz50lmW488TdpENPE4eOli5pXtDvmtZ8O56Xda7PFAt/RNQZ/eosLymK+y4GtG1EVA3d66yivfOtbHDPEZElijDtvKoqiE4nOxAd14kTa2u6aJMJnXeGtzImiZLQ4kUpCjqxZnObtsXrGRHF5hiiGZ8YthiHsABvbWzwib3xjnsgevEZamMvbc93kYu0iy/PpJ70fj4YrcIOH3vsKYhym3Di1iMQjYhyQHdzC2/l5uazED13jk47Ita36JJeurQO0Zpqbayt0fWMiBo7lxMnTkB0OFqBaFNT47+0NOITK0vsE6shRM898yREH33kQT70mTtug2gbVMwafIltzXcrYn2d7vXqoaMQ5ZHqzpgKMDfvEXHmjr2S8MDzH5567sOPxSOwLbQDEYENcETEaGkJolyAufEflnTsGnvqSP2uMV7wxLQi1bPULfUOZ7/0KYi+7a1vhOhnP/95PvT65iWIHp0eg+jJk7dCdDqlH1VXdD0j4o7bb4fo08+cg+ihQ4cg+i/+8f/Kh25x7vD1X//1EH3m6cchujNN/Ooc5w6p2jG3bTMbqnFQN0gNg/nEuGoNsMon52lZyePJ/Y+xE8PciCI1d6adY/nPsLnh0XtElEPqcJdXqCtfu+UOiD78pS8kDs0LAjjdarEQdieGl22bakVP3vEKiD716MMQXVqmlQpenImI8YTq9dKQhjc8y6vaxJz9zO00vGmw22KjEZWx1OQ0cbfahkp4xZ3dTj8AACAASURBVOUEq3xENDW2GDltzl15niqEUx4T4kQvGjrtFqPJv7bQVnRJeW2nxpvFyy+Rul8ttoR1hqfNJSFVRJvUQscAh5Tg0KE1/kLJI0a8HU8+eRaieZsqCk3/bH1XhifWNNjb4jiWhxARkWHl4nvd4kJ0ErcYOc9qsCnk9cNINSkZr/fCzpv6/PnLBslz/0y2orgEHi3e67VDNORLLmLf+eo7Ifrs07SidY24q+dVPh5js+SmiakBbs81r8HmPXnowQCj5cJiNiizZ89fhG1rnpNHDLAr52HbkSO0hHj06FE+9Ed+7/dx57R5jrMtXg2I1DJIjXOHAnsWvmKJpfvU2KnB/rjFQ+epMUabeBoYr7zzePfD2YWVctTfZA3yAe/53DP0WGFlma7J2hq1k3minUz85AFeNL7Xif40TzzYHeC05e67aM7ymledhuh7vumtEC0GiRPjpvC//tv/M0T/wT/5VYhOU2s7s5Y7SyKjEd2sKS6XJRfTRgvK9lfQvd5cp8Xk1VVqRR9+OPGs5O7X0Di5wEKYcxFNDd0rfNhdFtzG8oPy1ONsnMo1uHOumLyEkqdyVGZVnQkjPysZDGi5IC9SXTneryGuRST2PMTCn+o4Ei0hpj20iW4reWgaCTRYijLs6CPxwCJwnpcYEPJos8apFg8DIiLHIR83ZRln9XRutPljYf7Yvpg/1nWN+WPQtZk/1r+5+WPdQ5s/1nHj8sd6129mP5xUC9eiJ/XE/LEu88e6zB/reqHyx3qYP9Zl/liX+WNdL6b8scu37RvU7X1o/lgv88d6Dm3+WMeNyB/b/TyZP7br9G2nej83f6xnc/PHulubP9Zn3/ljs3pzycwf6zm0+WPdfe87fywiOjljs/80f6yX+WNXe+h95I/tfXi1+WNzn5g/1rO5+WMds8ljn+p83lyiFd3e/LHZD80f6zm0+WN9umlje/aXP7b7ufljPcwf655YKkelmzM2f/TFbY75Yz3bmj/W8RLKH0tNpCVJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiS9jPgCMkmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJOkA8QVkkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJ0gHiC8gkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZKkA8QXkEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEkHiC8gkyRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkg4QX0AmSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkHSBlXsx/lGUZbZEPIDitprRpnnjfWY1HbqOB6G99+N9D9MO//bsQHQwTJ/aDP/gDEN3epl/dtp1LPLvtzjYfejQaQbQc0Jk3DV2xtm350ImSUFcQzPMSo7TjHMtYpH5X1dS4Le4Zf3FERE7faFrae5YlLjicRlFQKYqIhovwDlct2rhtExelqWnzLGjzFq94XiSuGN7qyIr9v2Bx0tChiyJRRPNySGE8sbqm9iSpLLDqBf0uvh1NqgHnEp7hoeug075Q0Z1eXlrlE/v8s5sQfebiBkS/+TWvwX1/ce+/qnrhD9wZ97eWH//MA7DrT/3LSxDd2d6C6JEjxyEaEU0zoTDWvLtfcy9Ezz7xGB/6zJnbIfq5T/8BRJdHVAi/+49/Ex/6ox/5KERf/4Z7IPqWN74eokcPr0C0meDVjljJliBaY287GNIg4ZWveiUf+uknn4Lo2mFqyi6cewaioyFV6og4c+YOiC4tU3+6vUmVeri0DNHJJDHuuu3UafiwvLwBn/tnXXNjRScWEWuHj0I0DxoJZBnVDu7UssDeNGJnO1GGAY/ZklMDHqs2GdWOoqSd3/NV3LzHpMJRdEbRw4cPQXSM13MTi3dENDVtfua2MxAdDahS72xTvxMRd7/2FRA9++iDEB0McHySGiNXFd3ryKh2FItHN0UWOY7KkjODY8exw+3OtGdU2BcnB/88RG9wlMwtRslzwIhqircDZXhNPvmJT0L0qaeoz4qIb3nvd0D0mafPQ/TpJ89BdLSUGPwXOALn3mGyeAwZEcMl2vNHP/r7fGLvHlHX89DDZyHKqwG33nKMD720QkOU7TFOebBz+Ms/+IN86I/8Li0NPfUE/eoRXjGefzY8hk7NT1vceZFaJEnAdYy2xlUS3HaSahDahmr9nXe/CqKbF6ljuvQsjUUrXJyMVLVtcAiS4e3IUn/poca1zRyn1UWGh8Zqm1zbyXF4w/tPLHellh85PkyscmAhTB2aZ78NjqL5irZYEnhxMiJqLoQY5d+cWOxN4RaDG7oMZzQRUbf4WCExIVpcPrNsuHJZ8z73z4abwYjRgDq1IqMiOsUZ/dIyrh9GPP34kxDl+RRHeXwSEddUO7B6JBqrVFvEA3geytaJpfvUGjhunqh7cMWadjre/6Q7IqZTqjs8+N/BCWaJU61IzTtanFFxm9BWqb4Dm9kWiyiX/wLmkFdQTvihGxfga/x7UU3q8dNrX/Nq/sJotKBBS1XMt7zrOyH6B7/12xBdOTSGKP8mnF9GRNQN1Y6yxELIh8ZnahHBfUuGhx7w4Ae3LcrEkuzy6lGIvvLOu+jQWG1TT80ua226C4Z8Qe88dStERyNaXY+IHDvrIXb0ETsQm06oAOd5oqNPPKbHBjzxPHqSmKmVuPOaJ79YvovUQJcf4vMqYYFVj1uM6mqevQ4G86V9OKS7ybeSR+8RiXk3TyGXlujhFD8XqKeJASE/OCixweGF/8kkOf2kM+dD85CvTD26KnBzHt5UieVkXrBNjDE4nniSwilDnU/MHwvzxxYwf6zHjcwfg6ObP7bg0BQ1f6zL/LGua8kf+9gjPblSs4lkizLHdkPmj3WZP9Zl/ljXC58/tofzx6I1f2ye+WNd5o913az8sXh+9f6yG7pXeMwf62X+WJf5Y103JH8sj0jkj/2dvf+67XR/h27+WM+hzR/rMH/savd/xf93yf7hnfljXeaPde07f2wXpJCZP7aA+WPzrn/+2Fc+NH+sZ1vzx64e548tSh7b/fzBT3+xN/qc3oo586H5Y32HpugByx97vp2BdcKryR87O/e5+WM9m5o/1j1u6tlrN2dsDqSQmT/WZf5Yn5dO/hifiiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkqSXE19AJkmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJB0gvoBMkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJOkB8AZkkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZJ0gPgCMkmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJOkA8QVkkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJ0gFS1k0z91GT1bRFU0EwzwvatME9RzTRQnRQDCGaZbRtg6c93qFoRHzgZ38eolVFm68uL0H02LGjfOhLG+chWld4xVboio3HYz70aEh3k391mdGes5ZOO2sT78XLuIji5nnQj2rb+erQ+QYFs8Cf3eDGM/LOLygKOu2IWN/YpCN3qvnlh6Mrljx08O1gfL1TF6wor+FuYjnBCxap844WS3iBFzzLRhDNs8Shs4wKYZaXFOWKiXuO4NIfgQWpxJud+tEJRUGntry0CtGzZ89C9JaZ/84W39ZmwbWpazqxb3nPeyD6od/4DYgORwOIRsSlS9sQ/dp3vhuiFy9egujRY7fyodc3qetZOnQKolzlf/XDX+JDb1yiPvGBX/8CRD/5+XWInjv3NETr6YRPbHAtL4PF9iRwVBYRwxE1OGuHqXZcPH8OoqduWeND33HbEYj+1R/8PoievOUWiO5MqIxtb0z5xCaTnvu19+HS5UOjuX/ubFNr9ce+8718aB5FrCzRzZru7NCucxwkTxONbBV00XLsWYqCmqOqStyOyGnzDGcWOZ52qk+LzS1q6zbWtyC6vLwM0fWLFyF64tRtfGKHDx+GaDWle/3001Rt3/Tme/nQWUutWV1TzxIt3awqNUjOcd6xtETNe6edbC4PUVGocQrZs+/LlTntnGclPNWKiDajYw8LHG3ioZMDL/xZibuJg7L45m9+D0Qff+xx2jjiN//dhyD67nfT8Oa3//3vQHRnC4t3xDvf+U6IHrvlOERf+Zqv4p2Dt6bWMXY26cxXlqixWj1E0cGIGv+ImE5TLTzAUnT7aRouRkSJvd6goDPf2aJp9QgHTjzpSB56jFdsextv5coKHzq90LFYXVED3raJX13x1Bqb/2ew2/qND30Qot/2bd9Ku46oaywnAx7A0I9KXZJE+789pjHGaJnG54Ez+klq3FVw+x5RlgvLMK+B3Hb77bznGtdYpjjkG+G2BXaIEVHXXDtwgQWXlTKci508fQceNx5+4MsQzfF35YnVtMSN5rV9nmO2OMhucRE7UiuQdU1jUWgnt7e3zz7x1Ownc//MUoW/d5L4/Ob4SKLM6EcVqeWAtqa+vq6pdjQNlhMeyEY0NS6c4raDkradVDRnL1PrGFzAuZAV/Ogq2YBzrc/odw0WH3qQF6uHaQklda8SnRpf0NMnTkK0Sc7U8OR4FNC0VLyr1JPEKdYOXscuhzSo404tOUnMsNZnWHsWrSHvStYOPnREPPnUUz2fnpg9gUUnljCtaZhx8eKzEL31FA1vShxjp0e5eE0SdQfbBO6VIv0MCMcYeGjuLnH5PCIiO/Jm2jz/1xTF5r3audIHoBExmcxXpXfccwa+f2yN7jV3iBExGOF1wdZqdQVbDGwnT508AdGIyLP9jzGyFpeV2uQaOH1hso35AzzkS/WnPIvkpqzCqldjm8ApKHOeefqZuU+OHKXHGfyrk+MubmgrXC7g9mSAh64TSzuJ+RT3mLwulKdG4Dxt4c1bHLNdOE+9UqSa2Smu2XI+ErdVqW48sWSbet5xdY8hzR8L88cWMH+s7xsUvMb8MWjFzR/rZf5Y3+bmj3WPfKPyx3pzxmY/7Mz629mQ+WNd5o9dNfPHOm5E/tgezh/jy23+WM+ezR/rMH+s13XNH5vTWxSe+9D8sV7mj3WZP9Z1Q/LHmjYwf2x26WRRFpn5Y1fL/LEu88f6jnylz2J6c8nMH+syf6xr3/ljuyCFzPyx/s3NH+u47vljex9ebf7Y3Cfmj3WZP9Z1WfLYifnPuVL3Rmc/NH+sZ3Pzx/p008b27C9/7PRaE+aP9TF/rCuZP9bNGZszLBfOE80f6zJ/rOsllD92LQ8tJUmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJL3E+AIySZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIk6QDxBWSSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEnSAeILyCRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkqQDxBeQSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSQeILyCTJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSDhBfQCZJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiQdIOVosDT3UVVVsEHVUjTDgzVt4mzynF6INpmMcdsCD02nXRQln1gTDUSHxTJEJ2M6dI1XOyKKnC5qXlB0Mt6hXbeJ+8EloW7omgwyOrFpXUN0WAz4xPJ2/y/Om3IYTzsiMiyiNf6uuqUrdtlROneG70VEDAZU/qcTOrEGb2U1TZ023o66pks+Kke0Y6y2EZFjEa4q+tVZQaddYEnIsUGIiLalQ1cN3aw8KNomWtlEtR4MaPOspkPXWaL2pEoCXZOypEY4w4aOa2VETGu6X48/9SRETx5f453vaRbfmkXFiVvR97732yH6Xf/BfwjR22+7A6IR8TT+6lO33QbRre0J7TrV0U+ntHmD0QqvWDlIdOXTHRpFnHv2aYg+cfZRiH72M5+D6G/+21/nE9vBdjLH2lFgj7m0TOOTiBhjO1lf3MZt6dCPnaOrHREPPXEWoh/7az8H0TvPnIHof/eT/ylEjx49gucVR48ehQ+/93u/PeKX9z7/3u+9rJ7+q1/5MOz52Wce4kNf2jgN0b/6N/97iN5+5k6Ifut7vgGib3vb3XxiKwNqZqvpOkQnXMYS/Xysr5+D6M7mJkRXDx2C6GhII5CIWFtbhejKMu28wDHGkWNHadtEPx91Q+3klx+gYvbKu14N0arG5j1iiK0snlfkOKNpU7OSpWW6HRtbVBLKxQW4HORNcqCLuJjxaLNcGkK07c4HLseTxKalaF1TE11kiZFVYrSJ3dZ0StV+/dIliK6szC9czBnhSOALX7gfou/+undA9A//8I/40B/5yEcgWtd0yVYP/RZEjx6/BaJHDh3mE/v6b/p6iJ44eQKiZx97GKJZRhOHSM1PRyNu7LB4p9aVuFavrFC1xcFmjEbUdxw+fBSPHKvYs/D4fAknzjyjj4jxmGp9WfLdpDbhw7/1u3zoBie/RU7jyfV1at6/+ZveA1GeVkdEjW3ZdIKXlJcL8sQY4xOfoCbl3je+HqI1ru1kWHey9EpaYhRSTRdOW7grf81raAQSqbWdIa7ZZryOh91lRBQtFRVeVuJF7HKIczEs/BGRBf3qs489BtFX3EnTpeQ1qbEkDDI6sRN33A7Rc09QQxcRt546CdGzD3wRolCI2ojs8l89988axycREcs8sqISPBxip4ZlLJIlPHC9FxvwSzjuiogvfuHLEL37tV8F0VfddRdEn3r6KYhOU1MDrnoNLj/mONCt29TKJw/R8V6Nq4U7H1fTUUlTg2SnNsCZRYWXlEcRqRIYGf99Iwxyt1Uv7nR2DXBBDOdD0eJaMXdqbaoV5flSjs174POjJvWEKC8TfX01Tsz6VxfMufDRa0TE73zwX0F0srj8R0SZ4UodXpMseWZYaxPPo/npamrOzk+I8iHW+gILIVbMMrXeFQXNrMdjuuD8XKxIXZNZh1fmr8AgaM6yvErzOH66FBE5nhs/puF9j4bUFj3+OI3ZIuKVr7iVvwC4Ac9TDTgPQnhtc1JhekCRqpgoOTrat2SnNuvI0fkix73DtKGGbik1SWyxrbv1Vloa4vkp97Z5ag5YN9j18BwTe8wiNbzhtB8egXNWz+pS4qnZq19Fj1o+9enPQ5R74sTkFbeN1NNXTkLhoVHTKd7mj4X5YwuYP9YTv5H5YzCEMX+sl/ljfYemqPljXdeSP9abMzb7YacgtbMh88e6zB/rMn+s64XPH9vTlz/2/D9vvYWe45s/1mX+WM+25o/1uUH5YxGxIH/sStc8zR/rMn+sy/yxrqvJH2vnPk/mj+1aNGo0f6zL/LEu88d67Tt/bFZvLpn5Y13mj3XtO39sF6SQmT/Wy/yxHtc7f2zvw6vNH5v7xPyxLvPHuhYlj+1+vihz7Lk99/WWsx+aP9ZzZPPH+nTTxvbsL39seXUpzB/rY/5YV7JT6+aMRUTEM3v/BR2E+WN9ezd/bN5LKH9s/4k4kiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkl5yfAGZJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSdID4AjJJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiTpAPEFZJIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSdIB4gvIJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSpAPEF5BJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJB4gvIJMkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIOkHI83pr/LKMN8pzeWdbULUSznKIRUePmRV7QiRV03tMJ7XkwSLyIbTKt6cTwihWDIUQb3DYi6pYOPcgHEG35XraJ25FltHmJP3s8mUB0eWkJok3QT46Ipm32fWJZRr+6LOh6RqJyxNKIftf6xgbvfE8xmD+Nuk5dE7okUdV0O1osCU1b8aEjo2MnWgw87zxPVA8u4RnezeGQKiZfEyxEERFFWdLmeE0ybI2yhvYcEXU1huh0yleMdl6kXliZ4f1qsBxl+LObmjZuU83ozs6Uwi0dejLZ5p3vwbPoLzHTCV6U0Qj3SB1iOaBoRATe62fXNyGa57TtsEgcerS0jGGKttgcYc8QETEsqNaPsGN63VfdC9H3fsu3QfT/9gN/iU8sw16vxRaHG/9NLvwRLW5f8zgBD11PE33HZz77SYh+8hOfgOj6xUsQrSo69NY2Fe+IWFl6rpxUfR++4rYzT8x8/vrXvXZ220ceeBj2fOvJE3zov/3TvwjR8vAZiJ7ffAKin/vSL0E0+/t4WhHYayW68hILcJaqt3VNZfjW49RifNPXfzVE3/V1b+VDHz9EjfDykC4KN+8PP/IgRLl4R8R4TNfk1a9+DUQnWP43NhLV9sjqKkR5tBk1XbGjR4/xoafYWddYjtrFh27rvMWpVpHq1IZDnDvgIDkaqh05znwjYoJDqwEO25oFI5Pnok2i78hwBF7gECVwgrkz3qFNU7PXd737XRCd4vz0Fa+9G6Inbz3Jh760TjW3wHIyGKxA9PDR4xD97d/6MJ/YQ19+CKLLSzSo47ltm2rAp1jCNzepOeKad/HSRT700pAa8KNnjkKUB4RZRmfGU8iI2MQxdoZ1p8GBFy/dxJXMDkBLO3/n130tb/3qe94A0Y999A8gestxKv9nzz4C0QEuxEXEFOeYr7339RB97KEHcd+JOft3/Ik/AdEvfOYzED1+8laIjnCWd+HieT4xnhpHxPLiKSpvOcATS+KxKJf/JrWYlieWYKheVw3tfOciNlZtolZe2FiH6COPPAbRu175ajpyatH15OnTEM1xGPDEYzQrOX3mNj40r1TzKt/29sLVm+3t7ebyctLMF5tEA14MsAzj8w4edyUb8NQ6BxVg7phOnLqdd/3MeVrHfs09b4To02fP0olhvcuSt6OlknDqjjsgevZRmrMPh7hgFdFMaTyZ490cLV7vGo2WxzUt56YuSeS4EM1r4PzQoUgV0fYangtMcG7Le46Ii+tUREcDGtQdPb4G0Z0dvNGpFfICfzXfTL7e+Ox09xuJ+1VXOG2PmIz7v5DRlCUi4tAhqj6veOUrILqz8yxEV1ewx8RJR6RG0byEeC2PvSJZuXiIwjMivM/8jGZ37xDbXu8kDMzgJ/jt1fzBs6Vi/vJOcY45wRn9ILWEwusY/CCyzOnEjqzh9PMwRSOiTd+vhXiRpE7VDr5m/AyUe4fkcgGv9zYttlRc/rEQJq/JrIudFdoTp2iQzGtpRZkooiUuNfO8o+KbhcflIURENHhoztvhYXAkD41bc3PTYPPetDjuilga0OZ330VPedqSRiBf+CKtYySH/rg8k0phwb0XnY3NHwvzxxYwf6xnc4xeY/5YN21sj/ljvcwf6zJ/rOvG5Y/1HvnyD6GstOaP9YXNH5tn/ljXC5M/1qubPzb7zze9gRbEzB/rObT5Yx3mj/W6QfljEdGbP7Y3DjR/rJf5Y13mj3XdiPyx3c+T+WO7FmWRmT921cwf6zB/rOvKHxbuI5fM/LEu88e6IH9sF6aQmT/Ww/yxruueP7b34VXnj13+ifljXeaP9QQXJI/tft4syBx77sT6piyzt8j8sS7zx3p108b27C9/bPdz88e6zB/rOW7qmnRzxuaMlhd2LuaP9Wxr/ljHSyh/7CoSgiVJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiS91PkCMkmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJOkA8QVkkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJ0gHiC8gkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZKkA8QXkEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEkHiC8gkyRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkg4QX0AmSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkHSBl286/g6woMtggyyjaRAPRPE+874zDdVNDtK3p0EVRQLSqKjxy4syzpqUonthgMOBD7+zQmU8ruiYl/uoip2hE1A2d+RDPvA06saqmK5ZUZHjmdeJugnJQ8hcyLAkNXrEIqjuzxuOduU8GqRObjvdf/vm0k0V0Op1CNFHpsVJHJIpoU0/o0EFnXk1o27ccXYLoZzf5RseQW1HctsX2JM9TdQfrdVZQQWpbbMpSDTgXpLLE21FhAcYjr67SzYqINlH+qRCOyhHvfE+++MYu+nFbm9uww+kO1azDtxyG6MbmGKIRMcF2sqjpmjTYgHPXEBGBowjubesplZNJS1csIpZXlyE63aBrkmEhLPG0t8apMUZBvyvDlrDGujMcDvnQbYVNCta96RRHIIPEod/0lrdB9C1v/mqI/p0P/BztGssYX7GImEyf64Lzvg+jvbzvuPyfX/uOr4Y933///XzoQ4ePQPQnf+pnILq5vQHRs48+DtH/3z//J3xizzx5DqIT7E9Xsd4lpwbR0BcubFKn9n986NMQ/ZUPfoKPXGMJz3DKk+hPcRywNEq0ouOKWvi1Q78P0Xe+/U0Q/Z7v/mY+9KFDqxDdxrbu0AqVhO1xYniTDeiqldj1ZItvR9a2OU4r2sRINTFOnnApwja2Tk2XMhzyNVi52imONlPvKOcSzmOMqqHOmuenRarFaFs69LHjRyF67uxZiB49eZIPvfH4oxBtGyrASytUqT/4f/wqRE+ePsUnNhrRodugK5ZjY8UlMCImO/S7RiMaY2ctHfvis5f40Bsb1CfeceYO2jjjaTWdWHJZiQdmvNTGs8AKp+QR0WK3xYduG/pdyeWCh+7/AkTf8ra30Inh7LXG1YAnn3yST+wVd78aor/+ax+E6FveSP3p448nDv3JP/xDiBZD+tVbl9YhOhlRGWt5JS2ixiY6IrY7S1V7uIW+G692RARWc3G/lQAAIABJREFULl5q4Plpch2OV7Qy7hNx9ebUqdMQvfAs3cqIeBMWsycep+H9ydN06Ae+9CU+9KH1LYiurtGc5dQJ6jF/79//ez706dO0+dKAbsf24n5ne2c819B1/snnFTs7Cwv/NWrbxPyUT63BbuvRh2l4c+hQoj99x7veDdHHHnoAomde8QrcN9WdNllvcWT1a//qX0N05RDNSl7xShwkRKzgZK0oqRFuFg+hm7ZdWVmBbTuP7+ZNp9Qn1rjKlxgGpB/nUeeyvUUrn3xoXiuOiM11akiLw3Rik018poA1q0lNl2p8LrazQ9dk7cgaRKeTRFu0dozm7BEReG4RsbHR3wXccuwYb3jbKSrDo1W6HRfO8RIKj1QT5STRk+NAN8O6xzUrUo/kMlxr5pWKDNtJXg2IiKJ9FqKD4iJE/8Qf/06IfumLn8Ijf2b2H7ednC9U58/RiR09SrWjahO3o+SLhndzOKTZa1ngCDxV6QrOuMASXuPEObmsxI/pKxzo8q5rzFuI1KNGnmOOxzR657F9mzjxy3TvO6+BL49oHjfAWV6kcgAybBOqMZ1YMaLnp7zEF8m5GF5SXgMp+JFbRIPj5MSZ8wJL+tDUO7QtloQhjTbf8qbXQvTs48/wiT31zHk6sVSXSLL562n+WJg/toD5Y103NH+smza2x/yxBVubP9b9hvlj825c/lhvztjsh/Czqsb8sR7mj/Uc2vyxjhcmf6yf+WMd5o91mT/Ws+2LMn8snl+Vrfs+NH9swebmj3WYP9Z1/fLH2rnPIX9sdny8KIvM/LGrPbT5Y13mj3Ulx3R7+nPJzB/rMH+sa9/5Y7sghcz8sV7mj/Vsfr3zx/Y+vNr8sblPzB/rMn+sx4VFJ1bH4syxXQvyx54v1eaPdZk/NuP5zLFu2tie/eWPVdMmzB/rjZo/1pHMH+N7HbgMbv5Yl/ljXS+h/LErnuJLkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJeunzBWSSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEnSAeILyCRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkqQDxBeQSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSQeILyCTJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSDhBfQCZJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiQdIGVRZnMfZTm9lSzL5r8/q8ga3DbxvrOqqiCa46HblnZeFgVE67rmE2vqKUSnWUmHzujQO1s7fGj+1QXerBIveNUmfnWOm7cNnVhgtChpz3VLxSAiWrxf7YBuRzWe0LZB0YiYTunc8F5FUWD4sqPMl7dpnbgm0VDVa7Fi5liKikicdpW1GOdaTztv8Ecld17jiR/PqZx81ze8E6Kf//XfxbOKuqZrMiipTWgDfzU2dBGR5fSzq4p2XhTc+PONjqzTm1y+Of3qEvfdBrXAG5ubeF5x+PgyRIuCSkLbJn71nqpZ2C4tqvt1M4Ydbu5Qc7Q6pWi9vgHRiGhbLifU4OCmMWqGfOhhMaBwQ/e6xW5reThKHBprRywtQZAL8OYOFUIegUREUVIh5Jaw4OFNqhVt6cipBienclK3iV8dBVcuHEUMqBTVFdWO5ZVEOTl8eG33Pzb6Ppwb8c398/DhVdjzpY11PvTx47dAtBhQ5Tq5djtEb7/9FRB9+zuoy4tUx5Q113AreeQUETiAGQ6pBG9iS/jRjya68n/xS/877Ry7nqqmQjgcYjs5TlwTbsDXL1HP8sEP/SFEf/8P7udDv/LMrRA9dOgQRJdWViD6m7/zET7013/910D0P/8Lf4w2huFNkUdn1D2rSRTvxNS4xJHVYET9zhB7pUgNUWqcva4sUUs4xb44IgoshGfPnoXo9vY2RNcOH4FonppMlTjG4B6zO/+atXXpAh96Fcs/jyIuXKT25PipkxC9981v5BObbFHXU+IwmMv/9oRuZUQcXqVrsrlJm/O84+xjD/Oh+V4/c/5ZiJYlNdE5znc2t7f4xHYqaqKjol+dYXvSYHe5uwOItTxixEHdeJz41QVWzAe+8AWIlkPallvgM2fO8Ik1E6r13/nt74Xozg7dytOnTvChH3mC2snEpCbDpSEMJv8ARWKJMGjNC5dA4tnz53jHd7yC7lfDi8nYO7RYsyIicJJY1zgMzrG1eeYZOixuGxHrF2nzN7359bTtJWroeA0wIp489yREX4lDlLNPUfG+/dQpPjQvnHKtHyweYw+Gw7q6rMrP/TPLcJkiYsALR3hFG1zHSLTAKS1ufebMbRB96ulExfzQr/8biL7qrtdA9KEHH4DorbfQtOLTn/oUn9jh1cMQ/fbv/m6IPoGjiDxLNIQ1NkeTCp8fLR5tTqfTU6fomiTXJnnJlh/ilLjAklwX3cFRdMZ1B9vYJx9/gg+9MqI55hvvvReif/RHH4Pod37neyD68Y9/jk4r4tw5qlzTCS0XHF5dg+ilCxf40KPlxJJXxs8dFi9C1pEoCbg8E/XORYiuruKQD4+b6tNigo/V+NFt6tCJrjxxbtfwp8G4K88isTjfVk9D9PjJ4xB9XUnF+8v3Jx7TzCo7z8gm3J9e6cPVfonsAizhPD9tWnrEX6QeWDTYzHIjXFXcbSUKGc/UIqcpT4MNeMtPYVJzB46WA7qkDT5xmGwk1jFmVZ2FtRoHXnmGVY8HbREtNjkXsf3nIXTqwNc0FmWce9Omngtk/CQSa0eDhx4s0SPjSGWSLGMhfOKJxyF6aYsGTsNB4sRWVqiYTcb7T7LqtkXmj4X5YwsPbf7YvBuaP0YTSfPHrn7n5o91mT/WdS35Y705Y7Mfdmp9Oxsyf6yH+WMd5o/1bPqC5I/1n5b5Yx3mj3WZP9b1Is0fi+jPH/vK4on5Y73MH+syf6zrRuSP7X4O+WOzj5MX3XHzx7rMH+syf2zB0feZPzarN5fM/LEu88e69p0/tgtSyMwf62X+WNd1zx/b+/Bq88fmPjF/rMv8sa5DC9Z2dpPKePmxN39s9kPzx/q+wGHemvf8Es4f66aN7dlf/tgV5pWZP9Zl/lhXN2dsDqSQmT/WZf5Y10sof+wauilJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJLzW+gEySJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEk6QHwBmSRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJknSA+AIySZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIk6QDxBWSSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEnSAeILyCRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkqQDxBeQSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSQdIWU+ruY/yssBNGoq1GR2soG0joijo0FlOr0ubTiYQbduW9pzRaUdE5PiFjHbeNPSr89Shqwa/gPdq2tQQbfCaRMRwgBd8OoXoYDCAaIUnFpE4sSjoxBIXHEvRYDDkI9ct7bzGF/rheV2mW1wHZeLEJtUY90gFpcUfxXUnIrKGbwfda74dHI3UvX7N4VWIftNrzkB0Msb2ZLrDJzYY0AV/7VGq1N/yrndC9MSJW/nQXOtP3EKb/z/+3v8G0bpKlmC8XxissZiV2BYNU7WjqfBu1tSUHTp0C+/8+f3Ewiu/6MftjKkg/cEnPgXRt73t7RA9vJq4WaNhCdEWu5aqM2yYtb6xyYceltQ7jLDvKIcj2nXqlao1XhVucCbY5TXcTBapMQbKcWg0aeh21KnutMywd0hsS7ejyBKFcGeKXU9OJ7a5sQ3RPKfivb5+kU/s6NG13f/Y6PtwsnNZe1LXl1X87Z0t2PPtd9zJh37mmQch2uRUO9oB3Y4pltER1srA9i0iMqx6PLYPLMDJzXMcEB49Rr3Dt3/Hd/Gh//gf/26INi2dOQ+DB9jaFPijImIL+44lHMqev3AJor/+q/+GD/3wA5+H6HRM1+TipacgurOTaK0eepRqfVnQr55OFxbg6bQeYmuTHAavra1B9P/1//4fIfqF+/8GRI8cSwz5ykRBojNfXqZB8rGj9KMioql4Kke93j333gvRP/Of/icQPXXyFB43MpyVLy2tQLSqqAAfWqZtI2J7fQOiZ5+g8n9pg7a95RYai5apifOh48chOteLzRks4bjrWWpPIuL3/uhjEH3VK18NUV4jSS7e8O86ffpkYvvF2oya99W1I7z5cERDlIwHlBjd2qJSFBHTGkeMOK2ucdu25QYhcdEq7E8nYxqBc7XltYKI+PIX74fo67GxGo6WIPq7H/kkH/pe3HlR0r1OrN5g9WiDSmBENKkmBa45T5cOHzvGe97AlpDXbE+dorWdnc3E/HR9fR2iXER5CsqLrhNciIiIav0CRB948GGIbm/TwOk1r6IWOCLWt2hS89kvfAaih4/gKCJPlLFrGfy3ixv/tq5XVlYinu+5VlYu69mrJnE7lnAJhddFa2wnW37ikGrNWqy2LT6mOXY8UTF5OJrhlL+u6JKePfsIRE/fluipV0c0lH3ykYcgOm1ohXBpmFhgLEp8rIDlBBad8jznFjhPlRPGD2IGQT11sj/lcRdvXgzoih07lliS/db3vAuiv/IrvwrRO87cBtEJPmf86rfewydWTajv2N6m2nFhncbY2/wAKLUWEREN3q+IKIr+PSQf0yTGhDyCxx6Tu4btncQ1KQpcA+d+CU87Sy0XJGZbuHrJj/OynBqrfJSYvQYuodx2G1W9p58+R4e+mr93tro2f57TSWLYBrLUYhpnF5RYTgLXRblW5Yn1k0TdGeOEaBuj6+s0oouIJS4qOI9rW6p6WarbKrDXazAposVFp7OPnoXoocOJ9a5ZVefJSom/i7vyssQFlkg8iVlbO0ybcinD0t0knmxxTlBieM+r3MnBTYNVr+UxBvYd09Rc7MIGVZ/xNkUrfJKO8+bgdbiIiAltP+T0Lu6KO9ez+yDY/LEe5o91d27+WDd6bfljUErNH1uwc/PH5pk/1nXj8sfa6Fnymk20gJ/VtuaP9Z2Y+WMd5o91vTD5Y71S+WNU/s0f62H+WIf5Y71uUP5YRHwlf+yyk8+/0gSZP9bL/LEu88e6bkT+2O7nycWbXYt+nfljXeaPdZk/1mvf+WOzenPJzB/rObT5Y92t95s/tgtSyMwf62X+WNd1zx/b+/Bq88euKqPM/LGug5k/1mz236zdpLJFmWO7uACH+WN9zB/r1U0b22P+WJf5Yz2HvpH5Y92csTmQQmb+WJf5Yz2Hfunkj11NRrAkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZKklzhfQCZJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiQdIL6ATJIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSTpAfAGZJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSdID4AjJJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiTpAPEFZJIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSdIB4gvIJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSpAOkjDyb+6hpW9ggL+a/f5matq2ams8maxs89ACigwFFI6PTxp8UEZHTeUVd0++a4q/GHUdETCYTiBbFEkRb/NVFXvKh2xrPDnfetPSr25a2LbmMRVQVXZPBYISHpiKafCXfYDCE6PbGDm6LRRQl6l0E/yqWKgmJQooFIXXBucpnBR/67iPLEH3n3XdAdGtrHaJP3n8Oot//3nfxiZ288wxET506BdHphErRsePH+dDDERXRZy9cgGiL5Wh7h+pdRKweXoVogQWlxko9Hk8hurRMxSAiqqqCaI4nduHSJd75nmxxca2a/nI+GlFj9Rsf/BBE/+gTn4Po9/1n/2eIRsTJW45CtKjpgnNjlOrnY9rSzvlmLS24krsGZaLFqPnUE70DmUzpZ//WH3yGN/+Wt78eojn3Sy2FsyxxP6a8Od7OLKNtaxwQRkSDm7cNbc51h+/zMDX4qXbG8GF5+f0oLx9FHzp0CPY8Hj/Khy6HdG41jp2qKY7eE4P3xBiDG3AeOvFYNFIdfVvQF1o8duJnpUb/FQ5lByWNwDMcO/GeeSIWEUVB5WQLe8zRMhXR7/qeP82HHpQ0lF1aou54e0zDm0sXLvKh/87P/RRE66an2u4ZDudajMlsqMGpVmriENvb2xBdWVmB6GsKGrPVzz7Lh94qqSQMjh2hKFa9jdSQbwXLf5vTRfvygw9C9Kd++mcgiv1GRESZ0+9aW1ujnWNj9cpX3cWH/s3f+V2IPvUM3c0MK/VtJ2ni8B3f/q18Ym97x9dB9PaTJyF66RxVzCI1P33rW98K0YvP0M6PHDkM0e0dqneRupt33HknRGus9Vt46BrnthFx8SLNLIa4XLC6SgX4OE4wI2J7g86cuy1eFlpfp2l1RAxxiM4DxglOjYuMzizLEssvb3rTmyCKQ9H4xCc+CdFjWIAjohgkhqMgy2hbXmqrU1O1AhddI2Jjc3NRKMcx26mTp3nPK6s0irh4aQuiTz35NERHS4kfNRrRodsWCyEOjVZXcGi0ST8qIlocwd/72ldDdFLRgLBJDf6PDWjEGNjb5tiKpo4cLXb2yyu06HTs1oXLZcduPf7Ku+6K+MTeJ6+8667ZLwxxIhYRF565ANHyXioJ22O6JkVqQRdXQaJt6Jq2vKLLLV1EgUOvDGfWPCrbntLKT1SJ/rTAVcBxi2uAWLMaHMdGRMb3Ay9p1SysmFUzPX+ehotn8NlTpOYdgxHdrMniE4uIcd8KyawWCwo3ZS2vAR6ilZ+I+N3f+0OIrmF3/OzFCxD9d7/5OxBts0Q5qcc0nzqBw7anz52H6O130BOHiMhTKx2TaWIgPR73fyE19k8ssDdYd3hhaIpzdl6cjIjHn6BxQlFQMStxTfbkLdhdRhQ4DG5x7sAzmtGxW+nAye42vx2CyyOa7+cFVdtqQu3JnJ2tzsASb+byKp1YslObjKk1494hw05tiCU4WUS3t2m02eB8KWto53fe8So+9EMP00p1jgU4w8yEpqYfFRF1i2OnHR5PUiHkWXmZmu/M6j6oKkpcx8NB3SRVOzK84OMtLCfYxpacHsNL9xFZic+PcPBfY8UclKlD47nhc61ocPJbp7rLxBgbm9kJDmX5wOtbiW56bZW6rQkO23IsolmnGaw6J2v+WM+hzR/rMn+sw/yxLvPHuswf63qJ5o/15ozNflgtfqJdNY35Y13mj3WZP9b1wueP7TF/rG/vFDR/7Gr3bP5Yr+uaP3aZ3vyxvd7G/LFe5o91mT/Wdf3yxy7OfZ7MH9u16J6aP9Zl/liX+WO99p0/Nrus1JtLZv5Yz6HNH+vYd/7YLkghM3+sl/ljXdc9f2zvw6vNH5t7GmX+WJf5Y12Lksd2P1+UObard+w/+6H5Yz07N3+sT0/a2PN7pw0X5Y8997n5Yx3mj3Ul88f44VRgCpn5Y13mj3W9hPLHUquwkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkl5GfAGZJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSdID4AjJJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiTpAPEFZJIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSdIB4gvIJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSpAPEF5BJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJB0hZFMXcR1lObyVr2xaieU7RwG0joo0MonU1hei0oZ0XJf2oIpu/CJ3NKZplFB5kdGJVSz8qIro3aO7gEMsxmrwdWU6HLnDfBZaiBm9WjttGRNvyzmuI1nUF0aLEXxWxs7PNX8BD04nNyrL505hUdNoRkUVD0ZZ+VxN0Ysna0TR0bqNygCdGh/6q40f40GeOHoLo577wRYh+4zvfBtEjJ26BaD5Y5hO77cwZiK4s0+bb21S8q1RJuHDpWYiOllcg2lAhiqXlIR+aNw8sZlVLG3MzOJlM+MC3HDkK0aZ5HKIZt3Sz+1kcWtTecXPUTC9B9OEHtiD6P//jfwrRiPiRv/yf06EbboSxt8UuLyICe5bAzbd2dmjTRFuVKEhFRr86z3F8gtfkV3/zY3he8Vsf/QxED69RQ/d9f+o9EB0NlvjQkVHF5CFfWdL1rLFSR3IkgDUv0RImRqqJglKWPYO6vQ/r+rKdt5d3rw22g6Nh4tCTCY0Jz19Yh+iJE3SvhziyqrAtitTUIMO6U+M1KVNtLA4TInB8nuP4POM5S0Td4NgJty4KGvy02CHWiaoT0RklXrbzAhtw/FHJEXiO86mc5yxYTspUY1XVWFTwd00mC/uOyWQHC1GUPAmMaPCGVVMaovzF22i4uJZqv6c4+K+xUxwu0aAu41IUka/S5s2Qyn89omHw01NqBs+NE43Vs1vUTh49RNd0srQK0e0LNMCOiHaHBmZDLAkTHN48eD8NCH/x4Yf4xP7e3/27EG2xia6xeNc4wYyIM3feDtH/7r/52xA9cuQwRKdVoqHkId8tx2+FaI4N+P/1L/0ARM+cuZNPjCe/O+MxbcwrbdjGRsQqzkAPrR2F6Ne87Wsg+h3f9l4+9KnTpyDa4oiRJ3p1RVfs7GNn+cQ2NjYgeujQGkRP304N+PJyogWfTHFqzEttAyreDW68ukoNXUScv3CRv/DbH/7tRSGeLhWDxGLC33z/T0D0ntfeA9GmpnKS48ApIjY3NyFa4ooWr4HwGuAEu7yIyHi9d0iV+gzWuze+6Q186He8/a0QvfvuV0H00BFax9vewYYugv9Qyrlzz0D06XNPQ2h55bLVsLl/5n1zwFkf/6OPQfSf/bNfhuirXn0XRA+t0jJdRJy54w6I3v2a10L0tlMnIMorhBFR4zOLFrtjLv+jJVxMqBLr5xc2aXSUWsege51cYFwa8iiadl4sXkIpymINly67TwrmnDt3DqKvvuvVEK2nNMaueeobkSceSeDG+LvSC7I4/mlx5xtb9IhnMBpBdG2Vluki4l3f+naIfuxjn4LoLSeOQ7TGxYRIPZKLiIvnqSGNxcsCBa/TpVb5Mty8wVrPlXptjSYOEfHseeroT526C6JbYyonVSTmpxX+Ln4uMOTR/7kLEFw+cS9tG1FgtT1yjLrynR1uJ6/iD56VnVnbEi4mDHCmVqRWb0YjGqJzM9viE+fA6WdV0Xw/IiLDVhRPbHObdr49WTg02rW0ROPJS+vU29YZdYjbW4m+4+knaS72qY//AUSLgurOu7/+nRBtUg8sLj/Q/J0d4NSgxjYhsWqaasC5U6v4kQQ/K0ktJrTcHOGJ8VysSaVMcDHK+XEg/q7RgG5lpIrKFLOVeAiT4c9KDvmWsSmLFjsmXOXr/uJucoj5Y32bU9T8sZ6o+WM9h040htAymD/Wy/yxLvPHum5c/ljvSc9+CC1da/5YL/PHOswf63rh88f2mD/WEzV/rMP8sR4vyvyxWFiInrsN5o/1Mn+sy/yxruuXP3Zx7vNk/tiuRQM/88e6zB/rMn+s177zx2b15pKZP9Zl/ljXvvPHdkEKmfljvcwf67ru+WN7H15t/tjcJ+aPdZk/1rUoeWz38xFOA3vzx2Y/NH+s5wvmj/Xppo3t2V/+2O7n5o91mT/WlcwfS+VjUAqZ+WN9Ozd/rBt7yeSPXUVCsCRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkqSXOl9AJkmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJB0gvoBMkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJOkB8AZkkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZJ0gPgCMkmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJOkA8QVkkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJ0gHiC8gkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZKkA6Ss6/H8ZzVtMCgGEG0a2jjPSz6bNsv2HY26giCfWJY1eF5RdS7SrNWlJYjm+JK3Mktckzqb4s4LiLZt4nclDt1SFG9GVBXdjryg0+ZtI6Jt6cyKEs8by/dwaZkPPRjR/Srwbm5tbfHO99RN5yc0iVtZ11zCMdpivWuxRYjIsSw0FW2+NKKSsLV5kQ/92HiDdo61g6/Yna94BUQHKyt8YmO8XZvjCUQbLN78oyLittOn6NBYCNuazhuLSUREhpWrwTKcZ9hQYiFM9izVhC54ou4kf/ZXFIsrwsJ7xl0edmpR0a3cyRNF9JkNuiYnjtAlzXMqok23+brceEoXvMzpmhQZlv9Uj1fV1J9moyFEL15Yh2gxomHA+/7yX+QT+/hnH4LoB3/930L0f/jHFH3vN72VD33PmVsgWmBnzbc6KxKvuG0m3JVTIWywTciwV+JR2RVo4Z+jAZWi9UtUiiIix4v2v/2zX4Lon/qe74HoHadO0oFT7RxfM77V2KdFk3oV8nCAYwwc3tfzN+syifYkIsPmiEfgFfYswwEVbx7lRkTNfceUNu8ZYc4YFImikOFF4/Oe4oAweBgQUdfUbXGLURRz0elsiHvbpk3MSkZLIzw0/a7VIbUY9ZRGuRHRYtUtlmnOjj15ZKmu/BCXUiz/sUW/6wiWo9cPE0O+wcohiC4FDQOODGgYUdaJedx3HadDrw/pZl3Y2oZosXYUoudTLfhnHnwYog9u0TV5Avd9KdXRT8b0u1KjNmzAsX2OiClOangsevHiJYjWLTWDI6zUETHZ2YHoYEDjycRqWKrvmGAjfO6ZpyH6r//1v6Tov/qVxKEn9KtZVlIxK3AUwSP/iMjne4fLjHBqcNfdr4Xoe9/zHj70V7/5zRBdXaFVqWZCv2tjYxMKysjDAAAgAElEQVSibap5P3HiBH/hkUcfWRTKsCsvcZAcERNcBvzL33wPRD/9iU9C9MnHn+BDP7BBRfTpLWpPBmvU+LctlrGSeuqI4DH6zoQ6pgcfehCiDzz4ZT7wL/3yL0O0wbETD2WbxIAxhnhZhiU1wj/6wz+wKLQzrR97/OzbZj557PGzs19YWzvOJ/b/+Yf/CKInbrsTovd/kS54nurUeMqTmG011GLwGmBEtInuGEebiYk3jrvw2VOk5h1DbHAyLEUVz1kizpy5DaI//jd+HHe+sO5UVcXXM+nQiPqO6Ziq7bSiqVaG60KRGlnlGd4unpWkJoltQ2ceORWzQ4epAc9wvjQZ45PCiN/+7Y9AtOXyjwU4LxLz0+Fq4tnWygoNOGPxOnnydhRY6yvsO+qKGqvOjP4yYxwaRcTWNnX0Tz1zDg9N5X+jSdSO5RXqXNbxyVexRW3C68/QWDQfHMXzirY6D9Ejx2jzGp8416kR+GVf7jwtGuC9brCcTKeJQw+XqHLxUvNwQMV7OqU2oZomqi2XcK5ZOa7jTcY0NYiItqVi9v9n78/j7bvvgt7/vYa995m/c8Zv5jZpSDrSdB6glAJFBS7K4PBTQVAUFFARxKteQeEKiuC9IMggiMhVoEWZSoG2dG7aJumUJmnGZvrOwxn33mv4/XHak/M9a+/XJ/kmKU3P6/lXvut91rDX+szr/VhZXqZ17F6fVsM2Uq/CT5+iqvfFL6Y3Ggf34gi8oEc5TDXg22Wd28vzqe7fb5dOewgqCVlx/m9XR1h3ytSsZIxluI/t5Aa+meUV8ogouU3gQTIOMob4jj4ixhXd8KqhG85vnHkcW/LKT0QPb9p4iAMYLMDdMXLdrS/mj3WYP9Zl/tiEUz+5/DF6qWf+2CTmj3WZP9b19OWPTcwZ274RnlYR5o9NYP5Yl/ljk05t/thO5o91mT82YV/zxzom9rZbv8X8sYnMH+syf6zr6ckfa+Nx5I9tmpZFZv5Yl/ljXeaPTXTe+WPbTXwzbv7YJOaPdaPnmT+2CVLIzB+b/Afmj3U85fljWxvNH5twavPHOp5k/ti05LHN7aM1ehEz8XFs32j+WJf5Y5P/ZvpLovPLH9vcbv5Yl/ljXcn8Mc4BC5xSmT/WZf7YpAsjn1f5Y0/2NZokSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZKkZxA/QCZJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiTtIn6ATJIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSdpF/ACZJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmStIv4ATJJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRpF/EDZJIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSdIu4gfIJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSpF2kzLJsx6a6bmGHcVNBtHu0c6N05KSiKCDKh6bLimjqhk9d5vSltgbPXeK568SFR403vK5LiPIda5rUr8ZL5925JLSBp24T9yTP6eB5Rg8ry3oUTT2OPKcbPhyvQrQoad/t2qZ+nH/5eDX4qUGsmFyKIqIdUxHtl3TqgzN9iM4kzhz9jP6ih/d7ZnYWomtra7RvSZcdEceXz0D0gkMXQvTg/gsgur5CR46IOz55J0T37t0L0bJPtaPNE7VjNBpBtJfTwQPb2AzbhLXhBl5XLC0u8h+AZPnfkk//CfWU9nB9bR0OmOV7INor6X5efe0NEI2ID951BKKXX3wQotdeQKfu9wd8am5wKuwcxhmVsX6ZOPVqRX3Hr/3670B0ZZ0augYLf1VRexIR6xtUhsv+HESPHKNS9CfvuoVP/e4ZOvjXfPlLIXrJPioJqYFVFAX3ifSwChxj1DX1oQ2OciMim9QSPrZxbXhO4NyDHT9JTfShQ4f41HfcTbsfuet2iP7Kfz0J0W//tr8L0Qv3L/GFjXmkm9PDLkpuRXmEHiMsSb0+DnSxZwkcLm4eAGI1Xvg73/thiL72JS+EaD5IDBdb7BObxFyMjlyn6m2dn/8AlUfvyeM2WK9HwyFE8VE2eUEXVhY4eokocUw4GtNl1xU+yuSEaIDDUSzhFU55Bon2Ofh2cxPNCwI1jgNaHiVEYlqeYYPD49i1ioYBETHEItrD5mgfNmW9ijr6A7hWEBFX7V+AaLEf5+wt/ai2l5gQ/ZMVLP94x1psMebn6UdFxPLaCkSPHTsG0QsvuhiidUWX/SP/90/whRW4mJDhbIsXWBJrUhENFpUnM7L66G0f4VP/0R/9IUQ/fvsnINpitc1wgaUsEh09d0xDbBPu/CSNyu64/ZN86sTTrHENkBtwnBANqzFeV/zFr/vaCVv/1WP/efdd90y9MCwnGd7tiGjGdG371+6A6BufR/P96sZEY9Xi+CfHbovXSCrsO5rePF5XtPOXUXj1KEVr6qvX28Q9GWX0B3c/dByib3vPrRA9vpwohKO5AxCtFmjaMpq+ODkaVw8+8sj2LTv+uTpMzNkzHBP+2F+lFRhYLIqIfj817sLxZDWmyrWyTvvecQ+tC0XEffc+CNH7H6H+dOUsrXKMZvdBtMoTC3FNQW1dlXiJgyOQNjHafOgRuiff+w//IUTnP7M4OaHyzi8ufuz+h2Hfq17B1xXf/T3fA9ELcC2CxxD9VAOe8UwNZxY5RsepwX9/lirmEJfaZnBZtehTM8jr5xExMzMD0WuuuQaihw8fhuhzb3w+n/qyy7HviFhbTbxZaKeMUprUEgrPtmp8k8ijMl4DGY0SPcvMPLUYJ09TUzY7S2OMMY5eIqJtaSTAk8S9e6mdvPvuj0P02dclikFW0OMY4FuzWYzyMt0OVecGHjhEb0PKgpdfUo9jhSaJ3BJiOxdDXJIq8A1mRIzHNO/IcPelBSre7VxitHniFDUIs7N0w3OcbV1waC+f+swyDb3m5qgVXRkuQ3RpiYaLWaqcbNdNC8nwV/ex70i+Z6ywnPHB+XFwfgu3sZHMzMHmvY/VFldkI1Ir1YlpdSILJXHuPFVz6djYIfL7iia1trNnD7WT4+FZiPJP6ub8mD8W5o9NYf7YpFM/jfljT33a2Bbzx7oHN3+sw/yxLi7/E5cBt2/sZI6120Pmj3WZP9Zl/tiEfT/n+WOPMX+sy/yxDvPHuj5f88diYv7Y1kbzxyYyf6zL/LGupyN/bHN7Mn9sUzFlHmr+WJf5Y13mjz3mqcgf225iLpn5Y13mj3Wdd/7YJkghM39sIvPHup6K/LHYnkK2tfGJ5o/t6OXMH+syf6xrOCV5bDOprMBnPTF/bPtG88e6zB+bqJs2tuX88sc2t5s/1mX+WFcyf4xTQQJTyMwf6zJ/bMKRnzn5Y8l3J5IkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZK+cPgBMkmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJGkX8QNkkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJ0i7iB8gkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZKkXcQPkEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEm7iB8gkyRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJknaRMs93foOsKHqwQ9M0GB1hNOOraTHejluIZiV9TK3s/Mztqpp+VERkOZ26Gde0c0n3M4/Eqfu4e1EUvDudGu9J8g/alu5Jr0eXXbcVRLNIlZMWbzh+Vq8oKDrozfCpx6MxRKuKnmbF5QSPU+ORIyL1q2nPpqHHwQ86ceKIw3N07oN75yG6srzMpz548CBE5/t06tGIGquspofVYAGOiIsvuBCi5aAP0XFFB7/rnnv51FdceglE5+bmIPpNb3glRH/t9/6UT11mJcaxdmAJ72G1zRINRrQ5/UWJRThLlf/HTK9mTTP5IH1scJaxx1y65jUQLXsDiEZEUdDBj546C9FPf/oMRK+95io+9SfvvBOieY+K6NrGGkRnZ6k9iYh6uErh3gIE53Nq/L/xr3w9RKtUKfrF//zzEB3W1FitrlH0/tEDfOqLLzsM0d99z8cguu/SiyD65ddRMxgReUO3dNCjdrLENiEx2EwNfoaTeofHNrbn7F6f+893/um74chXX3Mln3o0xO54eBqiy2eo7jxwhKrtoX178Loiy6gMj3B002t4kMwdR2Qt9Q7jijr6Ehu6MXb0ETHAEfjGeAjRN7/lXRB92/s+BdEbbryRL+zLX3EtROcGdE+mdEefgdOdiNTUIEv0xzitwJ46UoWQZ6+sxZtywYWHePcB3vCqoiaaR/fTBg9benjD23jcA5iOHOdxEdHioA6fVaIQco/Z4iA5UmPCxXkaHXHxrlMtRonTrYant9wS8h0bpdYxeBo4pluacxnDeXFENFjEW7ylvMqxurLOpy5yKsM9HGPcfPMtEB0MZiFatYnFmQYXvHiKybPyZAPO7WSLq3yRUe244QVfzKd+3otuomNjk9EvqHbkPbqwmVl60BHR1LwMgvtWFD558iSf+uMfuRWib33H2yB676fugShPA9syMUn8+Mdv7268ftt/33rb1ApS5vSwytSQL8eRQA/rVttSc5Rc+RwOqbMOnIslBj84DL6nuYL2jXj/Jx6G6Le/ZC9E6+O072xqkJDhH1xyAbUYX/J1z4ZokSe68kGfau7feTONotend2rr42pmfinixNaWmfml7X+wuo7FIKIMepqD5lGI8jg3W088jiWs1z1cdD1Ec8S49iCGI7KX0byjV9wA0ZkBXjY+aB69RERc/kI6+AJNb3/439Pyy1e++HqIRsQV1yxB9B//5IRWdMu9905d0V1d3zhyegX27ReJBnxhhp7may6mlvBQjyr1iRPH+dSnztBS20ZFz3q1oMte79G4K1JD2YqHNw3ObbFrKFKvaep16pju/NCHIXr7Bz4E0T988+/wqZeWJqxtvnb7yCI1anzoock9yHOuu4Z3bMf0q/msNY6sIuMbnpiV7F2kNmHvXnq7NDu7CNHVdVqmjojZGaq5I5zKHT/6EEQvv+wARIdrJyAaEYM5asoGuMDe8NrO43+TEnFo/74dW+Zm6F0JTxLLMjH4HwxoQnT02DGIzgxwKItFNE+/E+YXu7joVGPKBI5eIpWcwIOfpqXLHuOqaUQc2Eft/9ws5lTgewFub5JrO9tV3TUoXNKa8Pfb9FMv7MaYprI+3IAovw3hCytw0h0RGU70Wly650eVXJwv8I0zL05ya1TjKkdEDCvqXGos/xmvmuJId2MjMV3i39XDFgOvOrrdeD42f8z8sfP5A/PHup5k/hjsbv7Y5N3NH+swf6zracwfm1i1tm2El79N05o/1mX+WJf5Y12f+/yxx5g/1mH+WJf5YxP3htjnW/7Y1kbzx6Yc3Pyxncwfm3DwpyF/bHN7Mn/sM388JYvM/LEJBzd/rMP8sS1PSf7Y9ne7E3PJzB/rMn+s67zzxzZBCpn5YxOZP9b1lOePra5/5nXwE80f27HF/LEu88e6fvC7/8LkQN7G9MyxTRPzx+ptoynzxybsbv7YJN20sS3nlz+2ud38sS7zx7qSazucahVBq1rmj3WZPzYh+gzKH+NLkSRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkvSFxA+QSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSbuIHyCTJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSdhE/QCZJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiTtIn6ATJIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSdpF/ACZJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmStIv4ATJJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRpFymjyXZuy2rYIfHFsrykk+UF7920FUUburDA4LhuIJpniZ+VuO6Sdi/44N37f64ar7wsW4jmOR2cjxwRVTWGaNvSqeuWbyn+arzsiIiaDt409LsSvzp16gyvvN/rQ3Qt2+CDb2nbnaU5zxNFNMuo7oxqOnVe04/Ke4lT7+tR/ViYm4No0VApOrRviU+9cuo4RC+95mqIHj9xDKKLRxYhevWhQ3xheY9awqqiQvjoow9D9LpnX8enjopKwnhMlfrGyy+BaK9I1I4x1g560hFZRvekKOh+1qNEzSqxiY6cTs3dznbUJE6JrK6swgFnDlwD0UMXHIDoeDyEaESsDemWLmTYJgxmIfrQkRN86rmFvRAtS7qwDAth2yaK6LOe9WyIXrhvHqJL8/Sr/7//+RsQffThh/jCjp88BdG6pmo7wj7tgksu41M/+iBd22htHaL7r7gIor/x9o/zqWdK6jveeNOVtHNNNTPDQVsP2+eI6E3qyrc2Vufe8aw952SnTpyBI+990T4+dd57kMJDake5/N/3MHV5l19M7UlEXLCHyn/Go02MZm1iLJrx48Q2mpuEVIMRa2Mq/8srI4j+s3/6AxBdWad9f+GXfpUv7N577oboa171EojeeDUOYHAwGREz7QxE+Vlm2LPwTC3SowjuHabu3bYtHzpZTvICxxgYnZ3tQXQcFI2INqNLHz5rAaL7rjgI0ZkZ2jciVt9PjVWOFXOM94QfZXA0YjyiyjWu6Y7xqRMz+oj1IQ29+n2cva7RhfXwjg2wFEXEeJ1GEeOWokVLLXBeJk5d12sUxYc5GlFzVDeJxooXrSrc/Z57PgXRwRxNEjNcDYtIjFFaXA3LcxwGVIlJywjLf4+XZ7AQ5ry2E1Fj/5BjOzvG9iTHH92sppZfsBXlDgCXMaI/R9OKiHjBy14N0ee95JUQ5alBjouXvIgXET/4/f+I/+DI0akrMDUuxI3HqWrLiwl45TwMrsbUNUQEL1TnxQCi4w1q/Pl2v/XDD2A8XvXKV0D0f37wFoh+zdX0q2qcTEUEr/2UOa18Vji85/sZEWO8NG7KNqbPXjfW1stzp587/rmxSn1WRKyu0x+McZWvyKh3KFLDm4rbKrxjGS4mZ6k2ocR+bYRVrx1SY9XgPQnaNSJiFi/8kds/AtHv+8Hvg+g6rjNHRLZ8F0SXcQllNP1ZjqqWm7LRkI4ckWhxvuEmWmC8fubTEB3XtFYcEQWu7TRYbfmNW1MkiujxMRWk/3IbNdGvOUxN2RdfupdOjC9PI2KMT7OYp9nW2Q3qMVcxGhG3H59wbdvfNAwG9MMj4qqrJ5eW5ZVEIWxq6nB59X5mhpYaWnxHubZGq+uRGou2LXVMaxv3QzTPExMi/l2zMzRiXJijfVfW6H6OI1FODs7QS7e5PRStca7Vpl52b5f3d9781VV6mhXO8pKrNz/072j1nhcE6oYK4cyAHtb8IJFcUODA68ABWrO95qrDEL3phov51AtL1By1OAwYjmholPNybsTCPFW9qqYGnNcDeLmgSeWonHMZnVl2gy8xM8xb2MAFq4hosbHq96nBGa7R45jDd/RJGQ43G5xW108m5yeixRvOSxEtJ4qkllCaMa9j4L6cPFPzyg9eVsTtn7gHopdeTDUrMQvsNqPmj5k/NoX5Y11Pa/5YN23ssesyf2wS88cmHh2C5o9N8CTyxyY2g+dshJ/dmj82gfljXeaPTfA5zx/bYv5Yl/ljXeaPTTj252X+2LRDb+1h/thE5o91mT/W9XTkj21uT+ePbZpy58wf6zJ/bALzxyY57/yx7abkkpk/tpP5Y13nnT+2CVLIzB+byPyxrqc8f2xr4xPNH9u5xfyxDvPHuqYlj21un5Y5tmli/tj2jeaPdZk/NlE3bWzL488f276Ouby+EeaPTWL+2IR9Uzkq3ZyxnUeY/h7T/LEu88cmnPqZkz+WuhZJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJX0D8AJkkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZK0i/gBMkmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJGkX8QNkkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJ0i7iB8gkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZKkXcQPkEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEm7iB8gkyRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJknaRMit2foOsHlewQ91SdNDv0751zVeTl/hBtKahfSOjXduWjky7Js8cERRu8dRN6tB5TheX4ZW3Qacue4mf3TR45XjurCzowqoxRKsKH1ZEhvGi6FG4pTJWFHTZScPRkM7cJMr/Y5fRKZGpEpqoXFlGvyvHatemqu1Cn254H4++OD8H0UGqiN547bUQPX70EYiur61B9MSxIxC9qr2BLyzDunPq9BmIHjp4AKKDwQyfemXjLEQ/ededEL3o4CGIfudfeiOf+qd+8y0Q5eLfYnvSVNROFuUAryvKkjqmAktZWZZ88Mcjn1ILen16mi963VdAtC7nIfrI0RN8Sf0B/a71Fm94gfdkZjZx6j49r5WzVIBX16mN7fXoQUfEkWNHIXp4/xUQbWrqtl75ipsg+ugjh/nCbv/kHRB9+Ag9zQwfR5knOrUsp5q5vHwaohvrGxBd3aCHFRFjrFz/6333QrSpaSxajakAjxvaNyKqekKjsLXxjjvu2btt+x133HPOwbGxattEpzYaUTHLCqo717349RAdzNO+H73vFF/YBfvW6dSHqdvq4cQh8TAiegXV69MVzjtwGPym3/4dPvWopt17OT3r5dMnIVqNcDI1Q817RJw+uwLRd3/gFoi+90NU7771L34pn7rG6jOuqMGp8H42OD6PiPGYagcPZTtd+Wh7qB6PYrr1NSr8EbGB1Tbnj33nVICz1MTh7oupx7z8EA3q1vBXf+LO2/jUiy0N4J/zhhdA9NQ9D0N0cPtpiPZ7iU6txDFGjdPuIVbM29dX+dSn+tTCX3EB1es3vefTEP3G/XshWnYWc3aoxlSGy5LGoi0OCMc1laKIyHB4X2R05fMLCxCdmUu0k8MzdG179uyB6D333ANR7osrnANGRIv9Hq9yJJYEeHweiSWtFhedEktWqf+pQdZSzc1KPDV25VlD+45TN7TExR8+9biiR9lg8Y6ILLEKSL8rz2n5ZTykwl/2E+VkAateRCyfXZ4WKrAzHq4n+tMCpy08e83xURZYAiM1d6hw8NNyI4yDn/HacbyuWN2gNatXX7cXotnoNER7qVUOnvw2uAbOpX9cJfqOApe81sdUO46dnDpxPnbyxMzMOQ34jn9ynxURvR4uNWNTxu8FEiv7EQ3OpzJ+V9LSs66SjRVObzN8ibO6QbV+dZmK98JSoi06+b53QvTy19Ni2hj74t7+y/jU6zmuymbvh2A5mDr4Lwf9dRxtpoYYCXPPei5FT9HsdXWDVn4iosW2LvHqCgvw//hkor8c4dz5Va+mlbr7PkULcc9apsdx0YAKcEQs8Mjq9KMQnedXgal3JddeMaHX+5lt/71/L42EI+JH/+2vTty+Xicq5tnTpyE6g2u2Bb5TTjXRieox28e3ZnhhvExXYuMfEfuWaJGc1yJKLAkXXkjz/ee/gKp8RNz0EirD111/I0T5cUx7CTJR03ntePIsVb1ZXCSpU29Qz5zlroeqRhvUnzYtdQ0riUY0MYs8sz51+B0RDzz6KYi+9U8/yace4gJ7YJQH//zuNSJGQ3pxUNc0iljfoIpZ5HQ/iwGO6CK+4zse+++st/PJDnHiUOI0r07NSrKCdl9dodpR4+j9SeaoNDjA5zqfzC5gmNeQaP5HmOlUjVLZSjnV+hEuIdb4DogTYJKpIC952QsgevQRahNm56j89/o7O/rT95/escX8sSd45jB/rMv8sQlnTr0G6qaNbTF/bCLzx7rMH+v6M8wf60yamu0h88e6zB/rMn+s63OfP7almz+2/Z/mj3WZP9Zl/ljX5zZ/7ByT12w/O9kwf2wi88e6zB/rejryxza3J/PHPmPK5Zs/1mX+2BM9tfljXfwKabuJuWTmj3WZP9Z13vljmyCFzPyxyQc3f6zjKc8f29r4RPPHnlBGmfljXbsqf2zL8SnJY5tJZd//T38K9t3KH3vVOx7b+Hf/4S9t/bf5Y13mj03UTRvb8vjzx67ctv3UmbNh/tgk5o9NiKbyxxZmJz7Nx54CpJCZPzbh1OaPdU/9zMkfewIJwZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZKe6fwAmSRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkrSL+AEySZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkaRfxA2SSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEnSLuIHyCRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkqRdxA+QSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSbtIub4+2rGpX9JXyXplD6LVuIFolreJy2kL2j3LaNeMDl7k9KPynM4bEU218y5tV2a0e9vSZTcN3bGIqFv6XVVV0c74fbm8Tnx+LuPd6WdFW9W0Lz6OBo+cPDiXk6oZ06mTjwP/gMt3USaK2bbL6GzihxFRZCUdMOiy86D72cv7fOq5GWoTFufmKDpP0YsOHeBTr5w5BdFqTM/6Oc95DkRPnjxJ511Z5QvbNzcL0T1LSxBtsMofP3GCT/3Hv/9WiL7qNa+E6CWXHIboRp1owL/vb/wliP7Iz/86RHvYJuAtiaahAhwRRUFVb7xBrWiijd0GmrWmnVwBN9ZX4IAXXXIJRLNyANELDh2EaEScOnMGomexhHOPWUSqBUf9Pv2uQY+aslFFVT4ilul+x9r6OkS5mF184aUQPXzBIbyueNlNL4LooE+N8Kih6vHem2/jU7/lj/8Eov0Zasq+6IYvgugf3PV7fOq5pX0QLTJ61kVBxYzHGCQH1r4AACAASURBVHWd6OgnDie3Nt5xx10v3bb9jjvuOufPcuqLx6nGqocj8NkB9R1zSwt06JZ66o0NKvwR8dAJGgY/eJR6zAor5syAylhE8NiqwJFuhkPVhT2JMcaZs8sQHdAdjW/9B38fou961zsh+uFbPoLXFRvYWB0/OoTohRdTz/Jbf/QhPvX8LDVH3/TGl0OUx9g5jmMjImu4O8aZxfRTN00TOFPLi8QIfGaGuq1xTeX/7DoV77af6E8PHqbO5bobXkA743SpybB8R7z3XZ+G6L6HHoFouUS1/vhlaxA99GCio+fntbxOtaPEmdrtvURjdeYkDTIOjzcgygOY23tU7w7iLC8iPhBURE/ffwyif/0yHE9ibxsRVUs3nOfsBU5+77n3bj713n17IDrGSeLp09SpxdJlELzn4cRM7dJDdGEz2LXwJDFwQBgR7ZT5yGeiDTXCNbbAWer/alDisK2q6eAFzjuqFtcxylTPgut4vN4VBd3wGhesIqJocbCKz7rlaIGPEs8bEfO4jhE4CJmdp337czN85Cyn8t/is66xFW1StSOwIeUbzqPNETZlVdBqWETUGzQCv+AlXw7R9ub/TEdO9R3cRAdO+ROdA06XIqLG57Wwh6aQH/jAB7b/8/nnhnZMxXb8k8tYRJT84qDGe9LD+5n6X8NwY4Uj2cSQj9fKIqLFZ72+RrOSmz9I/ekYh0YxpiFERLzudc+D6B0feBdED7/mqyCaZzQWjYhyngphPaZOrZ6+rFrXbc4NeHIdA0vC+qUvgej4y78aorOp1eD5Mx+F6Jnf/RWI/uH9VBLOzuznU99w1YUQvfIgdUzPv5xmr0s4Kss/lljvGtbUgLeJ7hgXXVMvMZNtyupG4qVG5JOnD0Os8hHxPd/7DyB6/6fugejGiBrhI0ePQ/Suu+7kC2vxXWOdUTmpcXyyvoFNWUTGQ9mKDp7hKOLYKi3s33sksbbzu390C0SvfRatSs3gtCLRGJ2r6hzq2Cn6Xc86SPPTLPVKgnu9V/yFvwjR2Rkayub4sPbhq8BIjTb7PSoncwO6sDaxkhafvP2TED17lh7HAw88ANHBKFE77v7UXRAtWvpd/QH3mDw1eAJFtBnvbJrGY2re+TVNlidGm5PfSXzW/OI8RAcDmlnw6zxuJCOCJ9YwvIlUk5Ccp9U15plg1eNlpRxrVkRU2NTh2D9ynPK0mKOSvCctrmjx8vtoSBVzfmbn2yXzx8L8sSnMH+t6WvPH6Njmj01i/liX+WNdT1/+2MSmbPvGaZljmyHzx7rMH+syf2xC9HOeP7almz+2/Z/mj3WZP9Zl/ljXn1X+WMSUt26f3Wj+2ETmj3WZP9b1dOSPbW6H/LHnbvvvekoygPljE6Lmj3WYPzbReeePbTcxl8z8sS7zx7qeUP7Ypu1ZZJBCZv7Y5IObP9bxlOePbW18ovljO7aYP9Zl/ljXtOSxz2yfkjm2aWL+2HD42Ebzx7rMH5uomza25fzyx/ozC2H+2MQjmz/Wkcwf6+aM7QApZOaPdZk/1vUMyh9LTVMkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkfQHxA2SSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEnSLuIHyCRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkqRdxA+QSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSbuIHyCTJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSdhE/QCZJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiTtIn6ATJIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSdpFypmZwY5NeU5fJavrGqJ52dLZGoxGVFUF0aIo6NhBF5ZltG9keFkRkdNfNE0D0arCC8PriogWDx74sPKcjp5lic/PVS2dusSv13Epahq6JzX/5IiCSxmWhAIvbG52lk+dZ1wS6Mq4eG9XluWOLWujDd5lXOPBW6y2eOQ9ZaJ6lC3ek/EYogcP7oPo2sY6n3r/wYMQPXThBRA9deYsRU+fgej9997PFza3tATRxcU9EH3/zR+A6KF9B/jU3/iN3wjRBh/W6saI9k19r3JhaS9E/+nf+maI/vgv/xZEx+MhRIteH68rmoZ+dYHNOzdl5xxneg+VTelj9u7bCwdsyx5EZ3p02WW5s2ff4dJLng3Rex94GKInT56GaM1tUcTKKlW9fm8GoqMRHXxYJ/oOHoR86C4qSDdddxFEez2qO5ElLqzFdrJt6bLH2GM+78br+dRveetbIbq2sgzR3/+t34HoiWPH+NRlRVe+H2vHk5Oq1BPbhM9uHI7Puewd/+ThYlkmTj0Y7Oz9tzv0RV8K0RrHGOvr1J/Ozs/xhRU4UObx5OKevRDdWEt09LMDas3GWHdm+rTvV37JK/nUZUFjp5/6qZ+G6L/9N/8KotyUjfBHRcQ6dtaXXX4lRB956CE6MpaTiLjqiisg+ptv/xhEX/icqyCaR2KSuDGkkUDT0C2FaWCWFS1OHMbjRKfWK6iz5ganKahmnT5EHWJE3HDVlRCtB7T7Eo4nr8SBU0S89R0fheiBgy+EaIXd1rHyBETPjLC3jTgwtwDRXo8e1ltXqPyvpSbtfWzgr7j+MET/4sFFiL77T+6E6JuPJqptf4Z6lmaGJr8bOe3bwy4vIrHS0cfmPe9Mh7ebLxODfx6O7t+/F6Ljiubd1doKRH/rt/8XXld8/dd/A0QvoZlxlCXdzxyHixFRFNgc4e4tdvRZamQ1wgWxPFGQ+NTUniyPE9V2ERdJEnBaXaSX2uiG8+pljTOaHk6NM1yIi4gZrJgRuHaKTzJP3ZMGq21d0+iou4B2zpEjMbLiFd3sSawBfv+bT9GRceYbEV8yT53aX/4/fwai3/f6yyF64+wjfGr80Yn5aYtFgfeNiALHhFVF0VOPHp0WOvLo0dm5c3rbHf/sz9Dd3rwy0OtTIeSl+zZL3JMGn0eZqFw4j0utoLT4XuBjH8Vh2zIN2155wyUQffE30Mw3Im75bVrHuHTxMogWeMPzPLH83gTNnXs9HN5MLwl5nvPQqE7VndGYbviV1zwLohXek1R3Giv7XwXRwTfSqtRbvu+fQnTfbOLcRUFVb22dnuYeXLrPlvZDdP76l/KFtbe/B6IVvtniZepITZwLHDFGxHAtUcgX5iZfQFvQHYuIpcW9EM1x4vzSl70coidPn4ToQXwBFBHf9HWvgejP/9ofQnR2DismviiPiNe88hUQfdvb3wHRHhbv/fhO7Q2vfz1f2K23fpgOjssFH7uZlpVynHTssDHeWZ5nZnFGP0st8BAnHRFR48yij+PJfo+is7PzEC0xqyEiSnwHxPO4xEgV5ywRcfmVtFLHJfz6G54L0VGVWL3ZwLZodUgD+LUh7bu2tgbRT7zv7XhdEfHYAL7pjKNGuEjI87jUa/bo4zo2D+rWcdWUlUVigSWrcS0iw2EwdnlNqtryOl4iz2SEI91U7UhMeTDKqzf8qHgiFhHjlgohr5Dzrz56bOdkyvyxCPPHJjN/rOtpzR+DVS/zxyYyf6zL/LGupy9/bGKvtH1jJ3Os3R4yf6zL/LEJUfPHnmLnlT/2WeaPdZk/1mX+WNfnZ/5YRJg/1mX+WJf5Y11/Jvljm9uT+WObpg1KzR/rMn/sCTN/7AmFzjUxl8z8sS7zx7rOO39sE6SQmT82kfljXU95/tjWxieaP7Zji/ljXeaPdU1LHtvcPi1z7DMnnpQ/tmfPYxvNH+syf2yibtrYlvPLH9vcbv5Yl/ljXcn8sfVTiXEypJCZPzaB+WMdz6D8sSeQECxJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiTpmc4PkEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEm7iB8gkyRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJknYRP0AmSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIk7SJ+gEySJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEnaRfwAmSRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkrSL+AEySZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkaRcp2ybrbMMdMvpmWVW3EM2LzrnOVeAH0dq2hmiG+9ZNRfu2qQvL6Kbw7mUxoAur6cIioszx1FmBe9OFNU3Dpy5KPDju3TRUEjhaBkUjosnod2UtlYQM923b1D3Jafce3rGm1+ODP/aXnUeTZYl7UmIRzrAk9Hp0x4oetggRNT6vvfv3QnQ4HEN0fn6eTz1uqE2ogg4+uzgH0Uc/9SmIHg46b0RUYzr1aDSC6GWXXgrRQZEoRWNsUmpswMtBH6JVogwmWoyZAwcgev2l+yD60QeO03lzbgZjNBxSGHev68Sz3kIt6pT6e+bMWThggT3mxojKWF4kmrK6pj+44BA9rEsuuYQPzgoshMMN+l3DMdWdj93+ST51g/3W3XffBdH1lVMQfe2Lr4fo/CzVrIgYD+l3tS3VvTan+zmusPBHFPgd2nJ2kU6No4i1tTU+9ZmSyv9ouA7RRSzAT9L62gZsXF8/53ft+Ocq/uqSh1UR+KjjpS95EUSbjEab99xzL0RPnaLiHRH9PpXhsqRi1OvRhY1GiWEw/0HZpz4xw32HwxU+deDBv/Vv/TWIHj9+DKIrZ5Yh+p73vCdxXTM0gOFeq4dlcG2FamVELJ+lP5hZmIXoe2+jJroeJlqMMk8UFQCj6CxrE1OD1HSpO5PebvUsPevRwkGIzlxCDzoiZuepiV46cDFEue4sXnwZn/o1X/EaiF54xTUQXcdidvLUGYgen6euISLm16jX65X0q8uMnvWlM4nlgsuf8xyIvuuO2yD69X/xayD6zj/+BET37MXLirgQB3U5jid/8b4jEP22Ky/kU/MSSjWm1mqAs5JeMcOnjoxajALHTtzl5TjBPPngnXxdv/rffg2i3/P3vgWivC7U4npXRFTYmvXwnrQ8+U0sSUVR0B/wOgdXPJ6p/ch/+u+4d6I/ve4510L0615JDV2bWmBs8JdluFwWuCRVNVREe0VibefCg4f4DwZQQfDCeEYTyVlJSRWTu3JeDYsIflx47Mjx4CtYdZrUKt94L827c1yI+8Adj0D0hhfymQOX9qPAwT+vFedYTiIisEXZGNHRj588MTV0/ETTnFP+z547rC3LRO1IFJSCiujMLL4XSM3Za2zAc1xg4RcWvJwbEdkKNSl9LOI3Xb0E0YsO7Ifoyp00AomISy64HKLDszSeXD1GtePgBYnhzZlPfhCiiVctMHNosrk56pUKbiUjerjulFg3xTduZaqxyrGh/Pv/8AcgWlU0gDl2iqbVEXHXQ1RUuAG//Erqyv/RP/wuiI6bxOBnJnsvRHMcJEeOpSjViLY4qYmIYyemNpWbnvu8yUOgd7z/Ad6x36e27rLD1KmtrtOCwDq+SalT4y4c58byKi0NrQ8nrBBuGQwSr2kefOhROjjOXrN5Kifr+E7trnvvw+uKo8dOQnTvEr2m4bH9KPWye7u20w2tj+ie8OsMbosi+ZYH+9Mcxwk8Fi17ifcCPAgp8YZzY8Qv+yJijG/Dezgr4fuZ42VHxAa+DeH3R4MBtTY51vnH/7IvJk3r+iWucld08HHqdUaLiyTlAMsJlqJeIjMhNSBMVS7al4+d+j8kcsJGi5OWCpsjnsdFKiWDW0J+1JjAkrpjqd62wIlzjS/Kx+Odd6xtOotv5o91L8z8sQn7Y9D8sY5k/hg8EfPHJjJ/rMv8sa6nL39sYp09ZyPU3Kw1f6zL/LEu88e6Pvf5Y49FzR/rMH+sy/yxrs/P/LGYMjXY2mj+2ETmj3WZP9b1dOSPbW5P549FRMTMlFVl88e6zB/rMn9sovPOH9tu4uzG/LEu88e6zjt/bNOOnLHt/zR/bPLu5o91PPX5Y5/d+ETzx3ZsMX+sy/yxrmnJY5vbp2WObZqYPzbeNmgxf6zL/LGJumljW84vf2xzu/ljE/Y1f6wjmT+WnMpBCpn5YxP2NX+s4xmUP5Z6PpIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZK+gPgBMkmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJGkX8QNkkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJ0i7iB8gkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZKkXcQPkEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEm7iB8gkyRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJknaR8lf+63/ZsWlxaQl2+Imf+AmIvu1t74Bom7d8Nb2ypN3b7ElE+dS0b0QURQ+iTVNBNC/p4Hme+AZcluHvwlNHRvcz9aMja87/ptV1DdGioF9dp66srcYYp4fVNvg4Cj5z4nHUdQPRcUvR7aruXyYKcJQFXXpGTyMG+DjyOnHqpf17IDq3sADRFst/3h/wqU+fOQnRffvowtbWNiD6rGdfD9FqnKi2Z0+dpejJZYjmBZWxUZl4HBsjahOG4xFEFxeo8c+zxK/Oseb2B9Qc/ZVv/HqI/p8/8fMQHbf0oyKi7NGpC6zUj18xvf+aVn3LHjVW6xtDiFZjetD9MlF3VlaoEBa9PkSHaysQnZmb5VP38ODjmpr3flBD96IX3MinHo+oKbz9zjsgur5Gd6zGEciwSjT+bYt94phq/XC0DtFf+m//g0+9jrXnwksuguj87DxED+4/wKcuajr3+vIaRBfxyOOK6s5gbg73jt7shOqztbHonRPd8c/5WXrWI2yBI6JpaPfZebrytqFSdP1110H07nvv5QtbH9ItrbEAnz17GqL9PjUIEVGW9Acra6sQbQfUTn7wk5/mU7/s+svownCMffjiSyG6cNUMRF/+spv4wnjK8653vweif/L2d0J07959fOrjJx6B6NwitQl5n371+iqNyiJieZm6Hp6pBYzP6ybP6X42qRF4hjOL9XVqotcOUCnqF4m+Y24fNbPF3H6I1g11iIMZvJ8RS0t08HyeClJR0BDlwsN0xx599BRfWI1D9PWKnuYYx4P7B1SAI+LuO26BaFPSAOZdf/JeiH73D/09iH7fv/p/+cIOX0Zd+Sc/8jGIPjKgFrjNE+Ukz6kR5i6PF0kKnPlGxJFjRyC6dx8V4OEYa8c83ZN+qpzc+MIXQ/TR4zSFvOQCqlllaqmtwKlchYPVFldJGmxPIqKtqXYVQVd+5CwNCOfmaKnh7/+dv8kX9mM/9Z8g+qGbqVIvr1C39bWvuZZPPYuVq0nMuymamNlmibpz08snDEI+su2/1zam/vA9AxqhN7hWFhEVFqQcZ/SpFcIEXp/k9V4clEWF+84OqABHxP/7C78M0Qwr/XvvOQPRv/4ink4FDo6izehpZng/s16qkGKU5x0PP3wMQvv2Hdy+ZTg8p9hsDKm1iYiqoqe550Wvh+gSDpKrkzTAjoj6KE3W1lfoytsR1Q5cfYyImGmo0bj84r0QXTxES7LzkybdW87e/im8rshwWenYmaMQLeduhuj+l38Jn/q2t9Fsq8E3KTD4aZpmdZ0m3ck3ClnL3TFfGEXzVLX9xV/4pfM8ccT8PNWOEa6GRcRNN1wF0be/j7ryY0enthgR0cd28Pf/lEbvEXFV7zBEbygfgGiL74+K5LurlArXXSPiwL7JY87Tx+h+RsS4pnayxNe+I3ydUeC60MlTiUkinzrDnmUOlxA3cK0sIh4++ihEez16mqMxPalT+KvvuecuvrAMFzr4/VFW4jQwS0wSt1sfdp87PY4S71ibfMWDfzAzS1O5DEcoOb6wSGUmRI6NcInNUYH3hN9lR8QAn+YISzjncgw3aG0nUhUzL6lN6NX0qyvsM9c3MKHiXN0kB057qPFZD3jpMqIs6J4M8H0fV2oeRfDCZkRUOPgvcfaaYe3IUykTuG6UmIvNDOg1ZbJilpicsHKaSnjDaT8YTF1XDIe0FsFvjXkMMOgsU/zKz/6XHVvMH+syf+yJ7m/+WFcyf2xC2tgW88cmMX+sy/yxrqcvf2xiztj2jVBx29b8sQnMH5twcPPHOj73+WNbUvljvPhp/thO5o91mT820dOVPxYxMX9sa6P5YxOZP9Zl/ljX05E/trk9mT+26fiJExO3mz/WZf5Yl/ljW56S/LHtJuaSmT/WZf5Y13nnj23akTO2/Z/mj01k/ljXU54/trXxieaP7dhi/liX+WNd014cb26fljm2aWL+2Oljj423zR/rMn9soklpY1vOJ39sc7v5Y13mj3Ul88daTGwIzHwwf2zCwc0f63rm5I8lEgIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkfSHxA2SSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEnSLuIHyCRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkqRdxA+QSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSbuIHyCTJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSdhE/QCZJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiTtIn6ATJIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSdpFyv5g56Yzp0/DDn/zb34rRL/lW74Fovv27Oer+VvfRruvrJyFaF3VEK2qhk/NqqqCaFEWEG3puqJpEhfW4v69soRohkfOC7rspCw7/6/X8b5tQ3c7IvKcfnVk5/+s+VFGROCV8w0vM7zsxL6Ju53hyYse7d7Lad88T5x6NBrRqbGYZViANyo6ckRk+LhafB6LS3sgmuc9iK5tJC7skaOPQPT4oycheuCCgxC9/jlfxKdeXl6GaIk3fG24AdGZuVk+dYsFqSko2u/NQHS2bCE6HvJ1xcYG/UU7HlMUf9R2eTb1L6fVofX1VThgzSUYS//qxjrtG5EXVK8PzM5DdHmdyslczPGpG+ysmzFVrqamfcejRN9R9jojnm2ee/1zINq21LOsrtMNb5o+X1iBj4P99M/9IkQXDlzGu1+y7xKIPvs510L01InjEH31K17Cp+5jAT/2CLWiR2+5D6Lc0G2sJWpHvz+h/d/aOD63xdjxzxY764JHLxGDHv1BU+PwBotoFtRiPOvqq/G6Yojt5MMPPwTRfnemsc2JEyf41CM89aimWr84S83R+iDRqX3sXrppz3v25RAtsMsb1dTQZdXj7XcmeunLXgbRd/zpuyB65tQpPnhv5TREFxdoorewdx9EH8JSFBEba9RjDnEs2mRTRxFN1mYtjTES9S4igv7g1Gka8o0OXwXR666jaETM9qlz6fcouj6kO1an5qdHsebeMPtCiJaDJbqwk0cgOlhI9Kcn1mm5YGFAzdHymIY3gzwxxviyV74com9559sg+r4P0K/O9j0Lon/lm7+BL+z2j32Cwjnd0iynFrhMtaJ1S9W2h71Dm1ML3ARV24hYwxLe4962pWfd4jh2kJo4zM4tQPT+h6nFePBhKic3PfcaPnUVdOV8Q0uc0a80NHGIiCEOvf7Hm34HohXe8LqhWV6NE4fkhY2aNYh+6s5PQvSXsPGPiNd/6ZdA9Kp9uPyI/xuJGstgjxdQIi655OLuxo9s+++ZGVonAXmqdvSw1vO6aI1FuNdLXHOyqIAGL+x1L6aK+ccfoflORGJ4X+Ca1Rh/VPJxFDipGeMSTNajR1kk1k0TqumrLhExHk391eNR3R+c0/jv+GfgkSMiK+mGzx84AFFuY2f30b4RUQ9oUjM++ihEi1MPQnR+lhbiIqJZo9HRDa++EqLjFSonGydXINorEyskpx6mX33p1RdBdLWk2vHHb3o3n/qWe7nmLkIMSkJiZBPR4pwlIgps6zIs4Rw98ugxPvXtn/g4RBcWaPDf4mxrMEg04LfdcS9EX/FyGp+/+70fhui/+Of/EqI//i++H68rTtz9EYiWn6JBXT1OrFkltInqMxzSCD8iFvZMbnM28PVoRKycpVcSszPUO1Rjip45SdPPpklVoIIKEq++8zug9WHiYc2vUita13TlLY7aegOax7W8c0SW06lPnKJpdfOkXimfYzCzs7BV7Wn4+w18dZV6N5t4mTJ93WgzTAdvcQmlSL1d5XXssk/RHK+7j0eOiOEa1WseRXNiwyzO9yNiPMZTF1zCqSvPMjpylu5yH9PvLLvlmD+Q48spWJzcVODzelIJLnhqfkcfEQXvjlWPswuqVGNV4u48OmozKifra6mXynjLuXaMcXjDc7GsSpSTuTlagdmzZy9Ez5yl/jTr9Ijmjz0e5o9NOLj5Y90g7mr+WJf5Y13mj3V93uaPTcwZ274Rak+emz82KWr+2BNk/ljX05E/tsX8sS7zx7rMH+v6/Mwfi4iJ+WPtZxeUzB+byPyxLvPHup6O/LHN7cn8sU3TssjMH+syf6zL/LEtT0n+2HYTF8zNH5vA/LGO884f20QpZOaPTWL+WNdTnj/2OF9jd9+Q7thi/liX+WNd05LHNrcv7KFB3cT8se0bzR/rMn9som7a2Jbzyx/77Hbzx3Yyf2xCNNXx9nCpLTCFzPyxLvPHup5B+WPn/85SkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJ0jOOHyCTJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSdhE/QCZJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiTtIn6ATJIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSdpF/ACZJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmStIv4ATJJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRpF/EDZJIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSdIuUi7Oz+7YNB6dhR3qtoVomxUQPXXqFF/Nz/3sz0E0y+jUTV1BwxANgAAAIABJREFU9Bu/8Zsg2kbNF5YF/a62HtO+/QFEi4KOHBFVhTccPyHX4sOKBqMRWYbfp8t4Xwo3TcOnfjLahk6d5fSrN9Y3+OAZHrxqqCC1eE/OOUunqDd45IiY7ZcQrTfod5VFD6JFmfhMYZvT7zq1vEqn7lH5v+Lqq/nUo6CCdMvdj0D0+PIaRB944GGIXn/N5Xxhb3zZiyF6qqSW8JKLL4Xogw89xKfev38fRFust9UKPaw61WLsO3AQooPBHB08pxL+j77zb0P0n//4T/GF9XrYTmLFrOrH21gdPHDBuRuObP3XtOo7M7Oz/92uyKlSNy1dWKrWRlXTDR+PKJphv5Pl1J5EqmMqcPeyoHsSIz5ztDhOyHJqjnIcJ+TlDERHVaIBb8f0B7/3+38A0YsuvASiX/aG1/OpZwb0qwdzVG2z7BqIDrHfiYhxRWV4frYP0aMfpEeZ41g04+FLxNraCmw88uix7dt3/HNpzwJdGPa2EVGUVMKHoyHti786sLusWxrHRkSJFfOqK6lPzDP6UVdccQWfusbGikdHt972EYiunjzOpy5aOvilh6i33btIzfugh837RuJxZDh3aCravdenxmpmQHOWiBjM0u86gbd0A1vCM6dP86kjo1o/ixfGuFfKikSHylO5DLutFWwnZ+boYUVENnsAohXOWbhiZlhEI2JxYS+FcQATQTd8MEO/eoDT6og4WVE56eHu6zjiO7VGR46IDJuj177wSoj+0YeXIXrzzR+E6Jd/1VfgdcXaOk15Npap2jYVDQM2RomBVz2mmzauaPdZLAkrK+t86r1L1ESX2BLyys/cwjxEr3nZG/nCGmxwaqwdeUmP470f+TSfemNMN7zfp3HXEMdsvTzRTg7XqBAePHgIosePHYXod33b34BoXiRmr//Xj/5HiM7NUjk5cuRRiCYW4iLe8afvgei7BnTqP//aF0F0ccCzPJrvR8R1hw/zH+TTez1eF8pTq2E8xyx4FI0LjBXOASOxtBk5lvAMn/W1F9OjfPvHElMDHujyhf3/XkWPsiioVkZE29Jd4REjL93nGI2IssSBbkFDvrzccdnt9tDo3EHyjn9GqtpmOMbo3/9RiLY9Kglv+uMP8KkffoRq7uwMzUCHq/S7XvrCi/jUz96/CNEBLhIOh9RZ/+FbboPoRx9JLCZ880uWINpuYFtXUZf3v9/yIT71vsufB9GmofXe4XDqjH44HK5id5l8k5Jj3Xn7O94B0Y9//MMQPfIIrZBHRI3jhIVZGjutr9IweP3shMWZ7fYsUOV657veC9H9By6E6OwMNXQfuoUKcETkaycgupdnoLg4mWH7HI+jw93A2UFEHJzyZgEK8CYeJy8NqNs6+QiWBJw4ZziEjogqcPKLM3qes8zhqmlEFAM6dW9II4G1Ea3tNA3tu7SXZkMRcfxRemuWl3TDlxbo4J+4g478unP/eerUzjo+GtOvHg3xhUWq8Oe4NMoDAY6WuJybnBpk+NKhwALc5yWp1ExtMKCR1fqTWIjGFamI1CxyvHNQd46cj57Rg8aXMDt15+/8NCvsrJP/M0AuKA32toxrR4tVIyLaBmdq+CYy8SqQU1BSu3OUh07JilkUdNMWF2kEfuTESTo1L9gmrivRHG0MeRRNp+6+hTF/LMwfm8L8sQm7P535Y1DCzR+byPyxLvPHup6+/LFtOWNHJm2Mhx8+ElM0tfljE5g/1mX+WNfnPn9sC+eP8Xqa+WNd5o91mT822ec2f2xro/ljE5k/1mX+WNfTkT+2uT2ZP7ZpWhaZ+WNd5o91mT820Xnnj51zkEkTcPPHuswf63qC+WObHjsjpZCZPzaJ+WNdT3n+2NbGJ5o/tmOL+WNd5o91TUse29x++eXUd3ABDvPHJjF/bMv2zLFu2tiW88sf29xu/tiEI5s/1j1yKn8sTz0veKDmj03Y1/yx7qmfOfljyUIrSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIk6QuHHyCTJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSdhE/QCZJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiTtIn6ATJIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSdpF/ACZJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmStIv4ATJJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRpFymjaXZsWtqzBDucPbMG0aoaQrRJfe8syyjaudJz9y0KiP7Gb/0mRMdjuuyIuPOOOyD6Qz/0QxBt2hFFm5ZPHUE/O8O9M7zfGd/uiDbo6C2eusVwXtCpc3zQkbryuqX9WyyE1Th17oJ2L8sBREej9cTBp8sj8bB6ZY+iA3ocJVWd6OWJUw9HFUTHVQ3RCy66AKK//Lt/wqc+u7EB0cdRuabKMropt9xzlHf/1Kk/hejXv/BaiB59lA6elSWfelxRGR6PVyFa9vq0b+p+Lu7ZA9EWH9agT3Vnz8IMRHNs/CNihC18W1MRffxOnTk1LZRPazZqqlxr6/iwgn51USZ628GAWowmo1LUn6GHtbKyzKeeHcxClLvysqQ7NhpTbxsRgZ1awX1iYnxCdyyfWgIe1x+8/vVfDtEMG/9+P9FiNNhjZnjH8pwOXuCFRUQ1pj6Ri2jeo1PXNf2oiy+5iC+snfSstzaORuPt23f8k8cYDV7YZw4wXYXN+3pNfXG/pOY9WUTXNqg56mHH1Csomo1Tn0JOXBvVzBe98AUQ5XFsRNz8gffRibH847OKDMM5NnQR8ak774Ton77jXRCt8Y7NLe3lUw8GVJBmcMhXNWOInj17mk/N5b/CIUqWT41medvLqd9JVY6osSANhzT4uezqvRAt8W5HYlKSuPIS++L77r6LT/2a13wpRFucO1QtlZNeny5s755FvrAT+SMQhZIQESMsY/v20yg3Iv7obbdC9HWvPgjRGy6hge7/+NPbIfrGr17B64qbnnUVRIsTxyH6lrtOQ7Tm0h9RYGfNPeL+Awcgur72MJ96Zo5uKTt4kB7WnqueC9EM++KIWFul5zUzM4d7U61ODv73L+6H6No6rfIVE8dGn1VViV/9gi9+IUSX+rR7ji3G//3vfxKiLV52RKyvnIXo6sqDEN2zn8aTG8PEys+nH3oAopdcejlEf/ttN0N0dpaG0F/5yi/mC0s2szD0anFClBwGNziKaBoqJy3OaJJ4CTFwjNFgY9afobYoS04SOYpj0S/5838Nou0Hf4ZPze17YvKLQ1leaouIBsfoDXbWnbXidntobuacMcaOf5appTaW42LC2Qeoyv/W797NB1+ucPLb0OBnY0x157fe9Uk+9QKW4asPUfR7vox6zMMHqMs7vpGoHe+4mxZ/rr3oBET3Ly9A9Pu/41V86r/zY7dAdGaJeluoO03T7NlLo81kEeVZ+a23fRiiJ08cgejRYzRcjIiD++lX8wi8h8PFl95EQ4iIeM5lhyD6q//7Hbg3XdiJEzRmu+XWW/HI8S1/gxrh/A/fA9ERtrGp0U1Ek3rfl1oGn1+YXD35ZV9EbAxp+X2pR0MUXrpvcEBYpcYYJS41VyNqT3ozdNnJrnyIi2mH9u2F6PE12jdw6f7hI1SpI2K+T6sNfEsvOnwYonWVLKOPWd/YefPHFRWzuuGX+IkiymFeAy8LXKbG1zTYCkZElLgq1Qsq/zwCyfJEfc9wkbCPL7t5GpgnZvyRJd6zU+/QLTnbDXBZqcHFyR2KzovzHjZl4zE+LBy9R+pxzM3R2InvWIZ5JBkW4IhoscHhVb4SB/888o/UhIgTRfhXJ0dWG/g6u26x2uLwZowJFW1qIXqE3RZnczS4jjccdR6l+WPmj01h/tgE5o91mD/WZf5Y1xdk/tjEnLHtG2Eemefmj01g/liX+WMTTv05zx/bYv5Yl/ljXeaPdX1+5o9FxGfzx865vP5nB8fmj01k/liX+WMTDv405I9tbk/mj206vywy88cmHNz8sQ7zx7o4f2y7iUNi88e6zB+bEH1i+WObHjsgpJCZPzaR+WNdT3n+2NbGJ5o/tmOL+WNd5o9N2H1KIsrm2vi0zLHP/M2k9nn7RvPHuswfmwiSf84vf+yz280f28n8sa5k/lg3Z2wHSCEzf2zChZk/1vEMyh9LXYskSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZKkLyB+gEySJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEnaRfwAmSRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkrSL+AEySZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkaRfxA2SSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEnSLuIHyCRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkqRdxA+QSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSbtImbU7N7VNAzsszM1DdGNMJxuP6MgR8Z3f9t0QbTdKiP70r/4IRJu6gmjevQvnuvKywxD963/tL0P0kYePQrSuEqcuSvxIXJ5hlPZt8EFHRI1/kPd6EM0yvDDUtol7woqMfjUfvGkT92Q4HEK0PzOA6LjC6oFyfJSRKsP9Pj2sGYzOzc3wqYerqxQu6Mrf9J4PQ/T0Ot3tSDVW/IFFLglFj/ZNFu71jRFEf/PDd0H0+Rfvh+gLnn0Nn/r48eMQ3b+XDr5R02UvLSVKwtraBkTnCypmbXn+tf77v/2b+Q9+/s1vhejsLFXbI8srj/MyFhbnpoWmtdMbI7rhZY8uLMcblqU6tV6vD9Gqppo1OzNL+1ZUDCJifUh/0Cuoo69rOjJedUSq5raBXV4UuDO2GKkmg1uy+Xkad43H1LNkLd6yiAgqKlVDY6c+jzFSXV7LHS5eeIlDo6ykh7V3/wE6dES/P6F2bG0sijLisZ9WnFticyxlvZLqXURsjKh2ZDnVjgLvZ1XTg24retARweOyERbCpqV7UqYa/8S1ZVzt8Y5lFI2Il7305RBt8MLHeNn4NGK0mngcf/T2d0D0kgsvgejyCnVqr3zlq/jUd9xxO0Rf+tKX0qmXabh471105IhoSipIeUa1fml+4dwNJ7eHuNqOq8RYtIcD3TynCxvMU3/a79MwICKqEncvqYSXWP7/4Pf/kE/96fsegei//Xf/GqKJCRH2LAtzU8dam7jFaHEYMcZRWd5LtBhFn66taGkUPYhHIdov6bL3rj7EF3b3J94D0aV56hMHBRXgGocQkVoQGOO0+oEHHoBocnSzZ+9eiJZYzM6cOgXRv/L3/wJEZxfpvBFx7933QnQVp9UbGzRIGPSpQYiIsqAmZX2dyn+N4wC+nxHxoQ/eAtFX33Q9RDOc8/ztb/ubEB1gMxgR61gIf/7nfwGic4s0rV7B+xkR6+trEOWSsG/fPjo0rob93C/9Ml5XfNm//27+A6jVJXZ5XIoioq6pd9i3jxqrE0ePQbRInbrBUR0vHPGS1OElHBBWiXJS45CRFwl/7qd+HKJ/7xULEI1IjHTroN/Va3CtuEjMjfs45KsSK7oU2lGzdvyTZzQRMcblhubkMkRP3vMgRPdmiZJwEpuU5x6gEcjSwh6IJkebv/OJ+yB688Y6RP/Gr74Poi+54gLa94uvxuuKBxZoUrM8ph7zhksvhGi/nyii1Yh+dYklvJne0DX1mNd2ki9xeJHw1InTFD1+BqIb2F1GRB9XKmbw/VGBL+yOHqEl7og4dfwIRPktT4F39OipkxA9fizRin7qTpreXvvab4fo4B0/C9GNceJx5Kn/3VTLvzyi2pjcoPFYNCJyXGoucD7FM/qqwmvm16Op5ffegFrCOVySvf7GL+JTH3nofoi2I1zRbeh3ZVizkm8SeWrc4uN4+BGqHfwqcIdRp+fmX720hFUvVRJ4fspLQ7wwysPFapRY5fuV//6rED20j7ryb/zmb4JojkuyEZHhlfPOBa+Lpt7T1GMcJ2MRxWISFR65LKnu7NB2ygxfGFe9VAmNHFdghjhO4ELIhb/lNe4IHr/XuPs4o8susLWJ4DdX0eILJB4GVKm3Ifux6i3sOwjR22+/A6JcEHBCHxGR49Ms8C08R+fmdkbNHwvzx6Ywf6zL/LEu88e6zB/r+oLMH1vYO2Hasj2RDFroPDN/bNKFmT/WYf5Y1+c+f2zLpPyxx/5p/liX+WNd5o91fW7zx87d9zPV9pzat9Xwmj82kfljXeaPdT1V+WPXdLanRzcREbG4sDRxu/ljXeaPdZk/Nvnw00OcP7bdxBJl/tiEPzB/rOO888c2QQqZ+WMTmT/W9ZTnj21tfKL5Yzu2mD/WZf5Y17Tksc3t0zLHPnPqSWPR7RvNH+syf2yibtrYlvPLH/vMdvPHOswf60rmj7WY7xR4beaPdZk/1vUMyh97AgnBkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkp7p/ACZJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmStIv4ATJJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRpF/EDZJIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSdIu4gfIJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSpF3ED5BJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJu4gfIJMkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZJ2kbJtd276N//oJ2GHH/zhfwLR//W/3wzRv/T138xXUw1riH791/8fEF1eXYHoXK8P0ayX8YXVzQZEm2aE+44h2gb95IiIKOjg0Xl+2yQ+L5f40ZHldIDU3qSuGoj2y8SFdwvtdllBd6zFnc+cpVIUEf0+FaSVlTXaOXu89yzr/GVe0o+K1IUtzFC0aOlxjIdV4tSDGYi+6/a7IXp2SLUjz0s+Nf9Bk9HvqrHm5S09rLqgI0dEP6MyXFV07tuOnIbo7Sc+yqd+7bMvg2g7ovI/mO/RoVOPI0ravcCKGfiweN99e/bhZUU1ojLc79PvOr62zgff8ugjR6aFmikPfDyi8t/DX11jKYos0WLkOT5rbGNHY+zysD2JiGZMV75R08ELLIN1nTh1r6R6nSqiFKwqKmNjflipU/Mogp9WXSdKAssK+l0Fjk+yVCGsp1WMzYOX9LDrIZWTpqUW+KFPP8gXlsULJ238zPXseNY7/sljjP4g0Ypyx8QHb3DnPMP72STqToZ1r8ELq7iIVly8o5dTQcqxmNV4TzJsECKixNasrqkVHY9xCN3SZb/pt3+XL2zf3oMQfeUrXw3Rso89dWqg+rKXvQKiOG+ICw4ewH0Tg/+lpQWIVjU2VtO7vCLvRUvlpI93LCLyEsfYBQ2ST54+BdFkxSx7dG0NdkxrePAvvngPn/qBex6F6H/48f8A0Rff9DyIPve5V0F0dfksXlfsWZyH6KCmYrZnnvY9fewon7rXo4O//92fguihQ/SwNnAUkQV1iBFx7bU0NXjbO+6A6CBfxGMnOvrxmFr4xUU6+BVXXAHRB+9PdOVLC9RilNip7dtHM4t92JRFaix67XOug+j9930aoqfOnoFokxyBn8W2DocoLZay9XVaK4tUd3zXp09C9NmXLkG0zKnfyiJxTy4+sB+i/+Kf/mOIrqxT8f7e7/8XfOrF/RdC9NRxamMjqMU42KMjN2eoFEVEPU7ctHz6Yl13FWu7Ho7tIyJwBWbPHuqYTh87AdGaFxAjsoz/AKeQOIBZH+NiGq4aRcTzX3gDRD/6kY9D9CC1gpH4xanV4CIfQLTlo6faybrAU2O03Fk+m+2hpb17I45vbVnau/ecI+N0KVJN2dEHqAF/1vXXQPQ5f0L7RsSxs6sQ7eMdXT+Nq9xlYr3r333tayD6X9/9IYjegv3O+3Aw+cGHqWuIiG9//WGIvvrlV0O0LKliDnBEFxH/9rvpnvzzX74TojCjb9v20svoR6XfKWDtWFmhkrCIQ+heLzHkm1+Yg2jT0A0vcXFydSMx+D95msYos4NZiK5v0ABmbo5+1Mwc3bGIOIwjxnrxIjr11S+FaPupd/GpaxwdRSSWfCP1QMHZs/S8bryKhsG3fmrqonpEzC/iagDOfCMix8H/YBaXy7Arv/NOmkxFxPNvoF89wheRR26/C6JlTgsRSXvP7QR3ePQErVSsnDgG0QoXe3f+cefZtdjWldhEp+8JHpyXVfl1Rp1TZ/zHb/kDvq6FDA8+pmFAWw0hWqVGmzy8qXBGn8g+wDsWER+77SMQvfLaZ9OJcTzZ4o86dToxxtiunLDsTL+6wcXJ5Mtufv1U4u4Z9qd1TU1/luoYOAslw1E0L/e2qakBvzVrcQrZ4Kl59hoR+3HN6uFj1BJecMEFEH3wwYchmqe66SNHsccc0C3tYe5N23kLY/5YmD82LW7+WMfTmj8GTZb5Y+fxB+aPdZk/1vVk8sfGj0wYwG9PJIM5U1ObPzaB+WNd5o9N2Pdznj+2xfyxCac2f6zD/LGuz8/8sYiYmD+2NSY3f2wi88e6zB/reuryxz6wY3syf2zTtCwy88e6zB/rMn9sovPOH9tuci6Z+WMd5o9NOPUTyx/b9NgZIYXM/LGJzB/resrzx7Y2PuH8sR1bzB/rMH9s0v60/bwzxzaZP9Zl/tjkv5n+yM4vf2xzu/ljXeaPdSXzxw7vT7Tw8MPNH+syf6zrGZQ/lmhBJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJH0h8QNkkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJ0i7iB8gkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZKkXcQPkEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEm7iB8gkyRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJknYRP0AmSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIk7SLl+nK9Y9N3/9Dfgh3e8jtvhej6ylmIrjSn+GqW11ch+qVf9TKINr0xRP/4D94N0S95Ax05IuqqgmjbNHRhDV1Ynie+AZdlGe0eFG3wwsqi5FM3Le2e44UlLrssznvfiBiNhhBtc7wneOzVlRU+ddu2EK1rumMZ7XqO7nNr6p31dIeVDSpmozFFZwoqhAuzs3zqjz98BKIbY7ryOuimcBlLyho8eFAhrGu6Y2WWqDs1150cyz9e2NrGOp/6rZ+4F6K9jKLPu+owRF/47EQJ7s/NQHQw7OHedMf6A7on0SZqR45tAldqbk+2g7+b1sy3QVc+HI0g2uIdKyJRRDeG1Ipyz1KU+CjbRKe2tr5GB89o9+GI+uL+zIBP3WCDM8Z2so+/eoSPI8cylrww3p1HEVmeqh3YmlXYisaYHgd39BHRYjFrsST0B9gxtfSwjp9IjEU3NjZg4+z8XMSZre2z83Pb/6zs06m58Y/Ur+YxRmR08Lzfh2jR0KOMCOzTEsO2IjHQTbQYLf4uHkWUuG+WOjVXzKkt++bBCyoJBRb+r/u6r8PrihbHhEUff3VD+z6OYRdOiFrubam1OX36JJ/4sjkqw3mOvR6ME9qaC3DZ49FL1Pg48px27w1o4FTh9DMiRtiVNzX9rjf/1C9A9MDiHEQj4tL9eyG6HweE93z0doje+LyrINpP9Sw5FsI5HDEOV2l88rqXPJdP/d5bboFosURF9IZXXwrR5dvosh84s4cv7PZbboXox08vQTQxpksV0cGABmYTe9vHKblcwIO6IS4mnDh1GqLr6zQXG/AgOSLL6aZddeXlED1cUWd8IjW86c9SK/rIkUchevToUYgmWuCIIqdTHzlCB7/k4AJEF2cTbQJbxZk1TyEbXFean02UhJXTJyA6Xj0DUZ5X9HHIN15fxr1jfTXxBzDpqXFu++CDD/KBZ7DDHa7hGiCeukitfObY2A2xPclx3r1wwdUQbeM+vK649ZaPQLSHDc41V1J/WtdU5SM5x8TlskGPCiF21BERgW3d2jr1HbC207btjq5jxz/HuHQZqcp1YOEARD9xy90QzXBJNiJu3E+d9fI6LRyNcAp5bJxYYPzTD9xGF3ZwEaLP2U8P660P0alPYb2LiP/0lvsg+rsffAiiP/QdL4ToDA1jIyIWcX2ywME/F9GHH6XV9fT7I+weBj1qrJbPUq+0d+9ePvXiInXWoxXq1DKcvfbHiVcSgwG1KcM1Kmb8uxbmaUL0yDF6ARoRoyGV/9PHjkO0f8FLIXrRgx/gU495+SairhIN8bTCNhxTaxMRPezKP/l7vw7Ras/1EB3jvCM5NViapyL6A9/1rRD9/n/zMxDdP5tYiL70ML1quewC6jvuuPsuiI5wIWK2l2jLLtxHPcvJVXpDesdHH4Boqq06R3exfTikanvgwH6IVhUNFyOiKPiVNF16iVOeBkcvzzlwIV/Y1zz/Woj+P3/wfoiePEaTqf0XXsGnznD4U4/xZTfWvN//X/+LT33BOhWkcYF9xxUvgCgvph1Y2kuXFRHx2Ppkd8WP35pxc8TZGhHRVJh7gM17xi9A8RVPlicuLPCFNb/Y5bXiZAJA8qaBIvE4EitadUXD0RtuuA6in7r7fohyM5l6kRizMzQ6yjNqCbOMxidVtbOjN38szB+btrv5Y92DP535Y/C4zB87D+aPdZk/NmHvJ5E/NnGMvX0HaODz3PyxSQc3f+wJ7m7+2KSdn/r8sS2T8sce+6f5YxMObv5Yh/ljXX9m+WNTCvDWRvPHJjJ/rMv8sa4/w/yxTdOGduaPdZk/1mX+2GTnmz+23cRcMvPHuswf6zrv/LFNkEJm/thE5o91PeX5Y1sbn2j+2I4t5o91mT/WVY8n37HNpDJu/Cfmj23faP5Yl/ljE8Ea+/nlj21uN3+sy/yxrmT+WF0nVirgxZn5YxNObf5YxzMof+yJZARLkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJeoYI1jAEAAAgAElEQVTzA2SSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEnSLuIHyCRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkqRdxA+QSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSbuIHyCTJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSdhE/QCZJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiTtIn6ATJIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSdpFyt/77Xfu2PTGb3ot7PDrv/HfIXr4iosg+ne++e/x1fzMT/9niJ46eQqi+/YehOhLX3UTRJuarytajFbNGKILC3N05LbhUzcN/UGW9SgatG8TBZ86LzLcHe9KS9EMf/R66p6UOX44r6ZT5y39qJMnj/Opq2oE0RZLUp6XfPDH/rLc+WiGQzpvRKyunqELa+nCFhf3QPSh08t86uGYyn+FJaEo+nTojB5WpGpHm1E5KQoq/1XFl52oOxleObcnI3xYWfKrkXjDx1UF0Q/dcQ9E73noUT7zX/7KL4FoU1E5mZ2fgWixRjd8ZhZLUUSOj6Pfw5Kwxo/rMbNzO5r6x6pkNaWczsxQ71A1dOqmonJS5fSgI6LsUXM0yKlnWdtYh+jMYJ5PzVceBbeiVP7rOtGXFy3WXPrRUWPHNK7phveKRONfYGPFlb6pscfkI0cUOdWO4ZCedVkuQpTb54gosSHt4YUtr9CAsC3pVy+vbvCFzS995nednbRxuDbc/sc7/nk2qC9eWV3lU6+tU19f9AcQbbFmtVg78jJRRDPu9LCN5ZLAlTpS3RZXrirwnmBHHxGDPh2c5w4Ntyf4sEos/BGRY93JsO9ocZDQcCMZUePBc5x3jDN6lGVq8H/p4SvownDwDwU4KwKvOnq9xBgjy3EUgQVlMKCDLy0t8Knf/OM/DdGyoDFGzTVr714+9VxGrdmxhx6B6MLiLET7fbonIxyBRMTa2bMQvTing/Pg54O338WnvuGqAxD9kq+8FKJLB+lh/dh3Uhn7zn//Hr6wL52ngVmxci9Erx3sg2iTWkPZ2FiD6NGjNLNYX6d9s16i73jo0Ydod+w7Fhbojg3H1FMnBz89LGYtrpJwrzW/lBiBc4/5rKuvguhVV1J0OEyUhFtvvRWijx49AtEPVVTrX/2y50G0HiceR2Q45echeI+asjEuOkXE/v1UuZaWliB6ao0K4dnTNEgeYa2MiLzAEUxEO30xgwd1991LSw0R0R9Sz7L0FV8J0Ud+6ef44KzFESM3N3BDIuJtt3wKohX2xRExi8sFoxHtvoIrhPlSYsjHc3Zex+OGsMB15s0DQCzH9r8zSK63h9bXz2lPdvyz10sVfpwR/dKbb6WdcS5WYtcQEXuovYn9C7SYNq6HEC0L2jciZlpqcP7y1zwXoh85TrX+2RtURC+/ikb+EfG3/zWNf+49QW+IvuPffRSir70xcU8+cCdVvXyWGnDo6NusmZmjU1e4VhwRPImcwTH2ySEukvCiU0QP+46HT52G6IG91CEmlwu45vZLKsB1Q49ybYWmFTM4hIiI++6mMfb+Z19LO89fAMH29f+YT12+8z/wH/Arj4gYTWmyeCEiIu6//36IfnFDxWw0oofFPcfCQmLizEteFb50O336JETLfuKe/Mabfhuif+GraHjzvd/z9yH6o//2JyF65iy1sRFx7ON3QHRjhmavjx4/AdEssYB4ju5YiGv9iWP06ra5GmtWRODqTYlL6Il39NieXHmAeqWI2LtITVmJDc4tH/ggRF//5y/jU/MLOx61rWPfcdkijWMj4vWveBVEH1qlW/ogdoncQlf4LnuH7ltFfgeUYWec45Js8g9GIxrUcRFNvZtK4MWfHH91ltG5k+kxGVdMTjThVxKpt74tLjW/9kspjer4KWr8WxojRJ5axrj3gYchet011ODwK86y807N/LEwf2wK88e6ntb8sW7a2BbzxyYyf2zS0c0f2+npyx+beyxn7LEKuD2R7OTJqRWzaswfm8T8sS7zxzo+N/ljEyXyx06bP7aT+WNd5o91/Vnlj0WYPzaB+WNd5o91/Znkj21uT+aPbZqWRWb+WJf5Y13mj0103vlj203MJTN/rMv8sa4nmD+26bHfAilk5o9NZP5Y11OeP7a18Ynmj+3YYv5Yl/ljXdX65CvffA8yLXNs08Q2dvtG88e6zB+bCIZAjz9/bF9nu/ljXeaPdSXzx2YGicEqvAYyf6zL/LEJR37m5I893hm+JEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSpC8AfoBMkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJ2kX8AJkkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZK0i/gBMkmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJGkX8QNkkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJ0i7iB8gkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZKkXcQPkEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEm7SPk/f+03dmzKF9dhh5/75Z+BaDssIdqfr/hqsjyD6MoK7Xt69Qgemy5sfWMV940sayGaF3TwpqJ9syzxDbiypIMXRQHRuuIbTnc7Itq6oZ1z/l10cP7ReZv6Ll5Dp25bijZNDdHVVSr8EVH28HHk9Dja1A0HWZ64J3VBf9BiITxx5gxE+70en3rEJbyH94QfFp84IsfbkuHB65pKArdFeOD0wUu8pVxKcmwQIhIXl3gcY7rskytrfOb/+bb3QvSvfdWrIbp2gqreoE+/Osv38IW12GKU3Irio9zuwgsvPHfDI1v/1e9PPkWDD+vs2bMQ7WNb1CsS1bYe0e+qSiyGWP5PnzrOp56bm4coN9Hr61QIFxcX+dRNS33iaEy/egZ/dVFSKWqaxOCnrai1a7BVKAqK9lLdTtvSDc+xUxuNhhAt8Z5EqgGvcQQyrrHvqOlnN6muZTSc8Ly2Nmbn9rY7/omNTdR1oiSsrY8gWo1odx53VdiUFbhvpAYwJTbRXIBH4zGfmhucjREN4Of6M3TgIlkU+IZTAa7WaN8Sb3iD9zMicFISObYJOY/PUyOvqsLmCPuOHlb58ShREi644EIKt1zrp/6upmmyjHrMAwcu4AvjgRtPajbupR7zo7/3IT7x3sUliI5H9DRPnqFx160f/Difun9gP0VxEDJc24Do8kma0Sfn7EVDN3wGa8fLcG778XFiLnb7QzREuextpyA69+z7KDoYQDQvKRoRy2t00776WVdCtD5CTVnRT4w2NzaoU1tcpAF8jR19mafmpzip4QWW5WVadcIhW+AMMiKiwpFAG4933tHF04qIaHE4WtRYwvF3DcrE47jpi18A0Rz707Onqe5sTBqzbSlxhSQiYkw37a477oToH/zR2yB6kPusiH4PhyjYWe+ZoVpf4XSJRyCPy/QDFFiz1rHxj4gxr14W2BLinKUeU1sUEeOKBiFZxitadOSPfeoRiO6/9Pl4XZHhSsX+3hxEx4vUnrTtR/nUvNSc8ZwHe9sWx2yRahNqnDvAUDaLZnYwu33Ljn+mrisxe+VJZh+bo9kFWiGJiBd/8fUQveuuT0B0cXYvRBeKxCpf2+KsfO00RG98zrMh+tCx+yG6OJ9owH/kW26A6Cdup8HPr926DNHfvTnRYrT4//I50KfxeTTTy1mT8Xw/Tw1+6jE9rNGYVm/mZqkQrvALuYiNDTp4jlMDXmpI1LuIHlauDEdW/Lu+4vVfBtHff9Mf8IX9+n/7I4h+/7+5EaJzF14G0WyOGv+IiJf93Ulb/3jrv86cTk2ppjyUCgfYkVqfbLCIzs9TITxy7BhEV9YSr/Meeojm3bd86P0QnZmhG76WGt70B9QmvOl//yFELzt8KURnB3RhRZ56f4TLBYmXU8mDP25VZ/jH7wqvufJqiB47xukB0QYNb8bYTg5wtFlgE10dpPWTiDh54l6I3nQxTZyXXvACiC6fSTTgvFJd4SC5wrdLe3EwGREFTp4bXBDg9XceqfKrwJ2H6pSZHOtHnXjrkBhu8ovIpQV681XX9LB6OP3kyVRENHzDcfTOg38caUZElLjUzC1Gxq8zBn0+9VkcJ7z5zW+G6NEjRyGaY+HPU2s7NY4YeUDY4rvXtU5/av5YmD82hfljXeaPdZk/9kQPbv5Y1zM0f2xbztgjkzbGsaM7hgqPHa3fL8wf6zJ/bMLu5o91fO7zx7aYP9Zl/liX+WNdn5/5YxExMX+s/ezzNX9sIvPHuswf63o68sc2tyfzxzZNyyIzf6zL/LEu88cmO9/8se0m5pKZPzbh1OaPdZx3/tgmSCEzf2wi88e6nvr8sc9ufKL5Yzu2mD/WZf5Y15n//ubJ20+vxvTMsU0T88e2bzR/rMv8sYm6aWNbnkj+2Pt2bDd/rMv8sa5k/hgnHQWmkJk/1mX+WNczKH8staQiSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIk6QuIHyCTJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSdhE/QCZJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiTtIn6ATJIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSdpF/ACZJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmStIv4ATJJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRpFyl/4Xd+csemIqOvkn3Xt/4DiP7sL+482jnalq+mbsYQnZnv0bHzGYiurKxDtCgSH2I7c/Y0REfjBqJZlkG0rhL3pM0qiM7kdOUt/q6mocuOCL6yFuOJG9rQPSnxjkVEi/E8p3CeFxDd2NhInLqhX93iLR3XNR98S/fR1Ml98xKCIyxFZY/qzqhOlJO8h4UQ9+XakWFbFBEtFoW6pfYkxzvGRTD5NIoe/q6CTl1gpU6XooqeV5HRA+EWOPm5ypNnTkH0/3vH+yH6tV/2aoh+4NbbIHrdc67lC6saKv9cwIuCWoxz/3JqD1VPOce4pgvLsXiX008XEb0elbGIqLGxWsOWcDymctIrE6dusSitrq1AtMTflRpixMo6/a7ZQR+i45IuO6vp3FVFDzoietjktEGFMMMS3PbpR0VEneNdw0a4wjve4j2JiKLEdhL3HeEtzfHIL37hi/DYkfcm3PCtjU2cc8N3/HNjTBeGo8WIiAZHRxtDKsANjk9y7llSlac/Q+ME3nlaA/gZqY6+qqnBKQoq4aMKO7UqMdrM+/QHVUXdcc1DWexZuFIn5fg0efBTpFrRusXWDMfYJRZC3DUi4sqrr4Poz/78myAKo+i6rnslnZtHuRFR4KXvaCJ2OLRMRx7fdpRPPdtQIVwaYLXdoCI67NO+EXHy2HGIXnLZYYjOYVd+8sjdFD1FQ82ICLwnTU1Pcwkf5SuvoXFXRPzS+x6F6BtvOATRD/zuMYh+8esWITqqaJUjIrLxEKLjagDRPT1qYwucdEdEf5Z27w3o1NWYHmUxSIw2sb2JCstJi81Rhj11g8PFiKhwFN1g+1/iGDs52gzsMQNnr21LdyzPUt0Wz7uxZzl0aD9EqzH1Ww1OtSJimNMf/P4fvBWii3sOQPQNb/gyPvXc7CxEW+zK65ZuOJeE3/sv/5kvLEuNCbPptSvH/vTTD32aj8wN+H2/82a6KlzlSLQIycqVmNTgGuAsrVSMz4zwyHH9s74Iord/4naIXnjxCyFanaEFlogo8HeVOIDnIppniTEfl+FqRFGYDzVtrK+ubt+y45+jDeouI2KEp37BZXsheuPzroJolVHXEBF50LWNLqFT33/PQxC96FkX8qmHaxTle9K7j4Y3M/upV+L1roj4xEdpxLh2dB6iX3MBFdE/OZKomCcLOnjJK+TTO9s2i+UVWg1LTdQS77YWF+cgyst4eZ54HCfPrkJ0fYNu6dIijkB4wSoi79O1XfdF1AjffuedEP3yr3oDRO+4+UN8Yd/wla+BaJ9GwTHEReyZVFnIDr6A/2BtfcLxt19RO6UZ52WlSC2h9/Fh1djb3nPvfXTi1LuSmfk9EF3cSzO1rP0ERHnMFql7woP/Iqd2cnFpAaLDjUTPklqAod+1sU6VOk8s6J4j68zB86CnuTGmU4+GiZIwxqkxv6Yc8VLb6hmIHmwS6xjlPlqBefHzr4fo8TGdut+nPisiVnvUO5w4Rc17hYkNjxw7wqfuZVT1TjRUwiue6OHsFQeqO3XflmYZPawCFwTSnRruvrp8FqJcgFmDE7GI4DfDOU4cGty3Sb1yrrnqcYOD+/IrzojEO4tHPk1j7GJAXV6GbWzyYWABDx5E5/ijuks75o+F+WPTdk9EzR/rRp9U/hg8EfPHJh/c/LEu88c6nr78sYk5Y9s3QuJEXTfmj3WZP9Zl/ljX5z5/bIv5Y13mj3WZP9b1+Zk/FhET88eyz1Zt88cmMn+sy/yxrqcjf2xzezJ/bNO0Vsf8sQnMH+swf2zyH5xv/th2k3PJzB/rMH9sQvR888c2QQqZ+WMTmT/W9ZTnj21tfKL5Yzu2mD/WZf5Y19r6b2z99+Cc7VVMzxzbNHFZaftG88e6zB+bqJs2tm33x5s/NtvZbv5Yl/ljE4KpySu/IQ2cepg/NuHg5o91D/zMyR9LpgRIkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJ+sLhB8gkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZKkXcQPkEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEm7iB8gkyRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJknYRP0AmSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIk7SJ+gEySJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEnaRfwAmSRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkrSLlKfPntqxKW9K2OFbvv2vQzTPCoiO24qvpmlaCmcZBGfm5iBaFPSjzpw5TeeNGA3pytdXViHK9ySnYEREkdFH4jKMRjWGYJs6Nx+7jRqiRdGHaDWmfdsWi0FEntOV1XVz3gdfWaNHGRFNQwePnA7ey3t8cJCViX2biq58PKaSUMwM6NA51buIaBv6A36WOVbqiNSp8fBFj8pJi+UkcmoxIksUUQ5XoyFEG66XbaLaJloMrPXNmC6sKBKnHuMtPXL0GER/9n+8GaIZdg033/sgXlccPHiAwlgI21T533J6+fS00LiefP1tSw/r05+4GaJFTnd7sIQ/OWIwoB6Te4cetsB7F/fyqUdnT0J0o6LeIe9RY5W1tG9EtOMRROsSexZqRKPXoyZ6OFzD64qsnYFoWVIhzPvUWFVVYtyVl/SsMzx1O6Vgb2qwiEZEgaPNAm9pheWEB5M1P8uIZtKxtzbuuCM7bxC2J2WqFR1WdOWjEV05Po1EA14UiYauwVo/xKFR1qMB4WhEtTKSM4uJT+uzSrwnbZYoohs4duIReI7jhB5+AHqMg8mIGBS0e2IuhQ+rxbsdqWFwEVSpR9gcNXWiJBy++BKI/tAP/xhdWAmFME/csdRYtA66Jw0W0aqme5JnicF/hiPw0ZAK8DqORU8mnkZs4JDv/k8/AtEbCxqBPPSLH4HoxRdRdxkRRc0TZ3rYA5z5fuzTG3zqGy+nInrnnQ9DtNfugej8hTdCdGPj7XhdsWfvXoh++BgVwjf06Y6NU7VjfWUdoieOHofo3v37IXr00SN86tEGlf+GR0cVVmr+0XViLNrg4L/FUQQ2J1Gklhqqln7XeETRxAAmtaLFQ3Tu81octlUF7Z2n/ncLvDy5bx/Np9741V8N0RIH2BEx6OEInOenuKJV44iwzFKzEhz889l7JQ0Dlk+f4SPP4txhqU/TwDO4XLa+Tm1RpG54YEfPuw6WDkN0ePxOPG988k76A16peOtb3wnRG1+ceNBZRk+TfzX3tiUvNEcEPs21DRrAtNMburZtmnMf5Y5/DmYTY4y6ppHA2jotyb73fTS8WVtNDLz2XrAI0ftOUju5sUYt3Qv2UW8bEVnQ7sN1uie9hVmIcmOTnBp83Te9FqL/7Efphp8eURHdv38fn/rUWfrVvPwOC9Ft3fAKeXJpssZBSIlNdIO98b333MOn7uGUf99eKsCrG3Q/Zwd05IiYwf70r/7VvwrRX/mv/xWiR4/SjOarvvbP8YW9+e1/CNHv/KJrIDo3u0SHTi0r8ZuriDh9ekK3eOH2I0wpbb3UqZ/73OdDtBfXQfTgSSrAz3vu8yC6sZbo6H/xF38Voq//kpdD9I1f9UaI3vaxj/Kp9+2jJuXee++F6Dve9W6IjrBD5HevEVHxezFcJen3aUbPbdHOy+gs1PNAdx5fYm6sr/DperjyX+Hq/VWHL4boNQ++F6LJqUFW0YX1saG7KKN+Z/xwYuJcX/ZqiO5boL7j8OpDEN3/vCv51A0Wwkt71DtUQb/6o6Mn9WJ3O85D6OIXMfz+KCJynLPv3UMLR7xgm6XWe1mO7woTb4hwMJn8XySuDamtmxuc/7NOdpctv2fHIR9nc5Q45KtS6TEtDgr7JbWT4/ETW+8yfyzMH5t2cPPHOswf6zJ/bMLBMWr+WNczNH9sYs7Y9o3TMsc2Q+aPdZk/1mX+WNfnPn9sC+eP8esn88e6zB/rMn9soqctf2zyHdvaaP7YROaPdZk/1vV05I9tbk/mj22alkVm/liX+WNd5o890bNz/th2E3PJzB/rMn+s67zzxzZBCpn5YxOZP9b1lOePbW18ovljO7aYP9Zl/ljX9uSxCzvbeaA7MX9s+0bzx7rMH5t89unr848/f6zpbDd/rMv8sQlSL3afaM7YduaPdZk/NiH6zMkfO//KIEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJOkZxw+QSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSbuIHyCTJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSdhE/QCZJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiTtIn6ATJIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSdpF/ACZJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmStIv4ATJJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRpFynzZuc3yLKMdlhdW4XomZUViI7HQ76a2fk5iJY5Xlnb0L79EqJ79uzB64o1/F0Z37KqhWAeBZ86K+gPmqamKF5XkdG+EZG39H26indu6dz9kh5HXScurCjowpqGbniL5SRw34iIjB5Hixee9VIH3zpO1v2BY96lKPsQ/bGf+BGIfuTWj0L0f//2b/Op55dmIXrk4SMQzXpUTjbWNvjUg7kBRP/x9/1jiP7rH6Z7ko3pYRX9RLXFAh5c6ducTt0PrNURFRZCvu4MizfWnIiIsqRra/F7lzlX28BfVSdaowKbI65ao9GID76lGU+9jKWlyV0bN++n7vswRPszPYgOTlA0ItqKnufKKnV5TU2Pcs/SEp96dpZajNV1GmMMh/S4Dh26kE999NhxiF566WW0M/Y7i3sPQPT4KbqfEZHP0yBkcWk/RGfm5iHa6yUaq36f+o6ZeTr43ByN2Zo20eXtw6LSK6gZHW5QSRiN1yBa8TAgYrQxYbC6tbE8t33f8c8KmzK+25EaHa0OqTkqMzp4g31Hm2hEI2vo1L0BlZNEOcgTn0KusYVvGooW2MamBpuJUV3TUEGaMI7bZoyD6LJOVNsx94koL6h3qOpEl9fi1GIdm+jIsKPnSUvE4h5qcLKcyn9dTz11Xbc8esnLxONYXcUGB2vAABu61XFi8N9ga7YxolPfhUde30iMwMf4uPIaL6xHB69xrDp+KNVa8YARB4TrI7rhd63Qg46Is+tUfa5YOgTRtqFT/+BPvR2iC5Gotvv2XwzRk/cdhWg+i3P2caI/bXEk8PCRRyFa4eMoUhWzLKmtK7DqcfPOg4iWF6xSTQrXneDLnj4T2dTiZI57TH6UTaoB57HAoE8Pi5fa8pzuCQ7eP7M/BL/2a/4c7YqPEjuWiIiGnzUuCPDjaKd3eRGRZ4nmPbkWl09/mi3+qBMnT/GRD7XUmu2/kFrRU0cegOhgQKtGETEarUO0wHLCLQaPc2+48Ua8rpidmYHo6TM0x/yGL6HGv3jg1/nUvPwDxSAiSq56qYXoMc5MMmxm252L2M32UHNu7djxz3Fq3JVn1OBcftVhiN5++50QXR4m+tMLZ2m14eTygxBdGFAb26TW+U6dpfHPRQcXIbqORbR3Ie3byxMrWjC8j4i7T9Fl531akhqeTrSTDZb/Mc/Zp/e2ZVFkuJ6bpV5YcMd08WWXQnT5E2chevAgtcAR8egxWvnfl9PKz+nTpyHa7kssML7iFa+D6H0P3AvR6294DkRHY3ocz73pBXhd8UfvehtEa5y0ZAU2dE1iGJzniWb2yLGT3Y3nLKdOKWsZzugjYm2Nqt5GQd1xVVMjvH/fQYhm+xMX9rwbr4coLwjsw5r18ptewqdeH9I9ueryKyB6yaF9EL3+mmdDtEy8mooe9tYvwmH0h2/+AESLksdd57SxVdXp9Hk+hcFbbrsVTx0lvvm6/ioaO+H7zziwhxqrOlV39i5Rn7g2aZl6C/c7vU7uxw7DAd3TMqf13v4s3c8LDtLrjIioN6h2HN67ANEMh/efWKaxfckrtufqDvUrzMdgWep/B1jjzGINM3OaioeyPORLXBi/5MGKFVliuSBRO+ZnsEnBK+MTJ0ebP/Rv/jVE//n3fz9E+7i2OcBZ4ig1XeIWpWlxkaSHp6523jPzx8L8sSnMH5vg6cwfm5Q2tsX8sQnMH+syf6zr6csfm/imZvvGTubY2vaQ+WNd5o9NOLj5Yx2f+/yxLZw/xnlKVBIAACAASURBVMwfm8D8sQ7zxyZ6mvLHYsroZWtyZ/7YROaPdZk/1vV05I9tbk/mj22alkVm/tiEY5s/1mH+2OQjnG/+2HYTc8nMH+syf2zC3k8sf2zTY78FUsjMH5vI/LGupzx/bGvjE80f27HF/LEu88e6tiePXdjdzhkCk2b02zeaP9Zl/tg2j7WuE9LGtpxf/lgWYf7YJOaPdSXzx3h4H08ihcz8sYnH5lObP9b1Oc0f40uRJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmS9IXED5BJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJu4gfIJMkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZJ2ET9AJkmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJO0ifoBMkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJ2kX8AJkkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZK0i5QHDx7csWm4sQ473PepByB6w3NvgGiW9/hqVleGEK3rMUR7JX1MrRz0KZoXfGHzi4u0e1lStKBolie+Adc0DUSLgq48b+nIdZs4dZtldGq+aXjZgb+6rWvaN6Kh60rISyqEq1j4I2IwGEB0JVYgura8xgffUmY77886lf2IiDboppw5fRqib3j96yH6VV/xFYlTY8U8ceoURGewYn7og7fyqX/jt34Tos9+9rUQ/T++/ush+vo30K/OaqxaET/wAz8A0X/5L/8lRH/uF34WoqceOsanvnidyvDlhy6A6J0VPcql8YhPPbt/H0TvPXMGou2AKmZV0Xn72MZGRK9PxWzMfUenMk4zMzMzLVQUkw/SYjmqKrrhc8U8RMs8cU82mg2Irq1RY5Vh37HeTzTQRUYt/GiDhgEb69TGnj2b+NXLKycgegLr1hgfx6ljD0L00aNH8Lqiwh5ztj+1aEVEhkW0qrHyRBRY/vuDWYgOZqgQjnkYEDEzOwfRxVnqbXloNNPny6ZoRPSLCS3G1sZeeU50xz/zoFqdp4Z8OY67Tn76PoiOsC+eXdwL0YMXUesdEc3szsnCOafOqMWYnaUbnvdTw+AamxRsjkZDam16RaKx4iZ6PKYbnuNwcTSi9qRNdWrcCPdwVlInxtiJ4Q1fWtXQwccNTRyyMlExL7mECmGvR6MI6NSqquJ5XGJGE1Hg9LbI6FdvrFNJqPNEEeW+Y4wPcx07tYzvSUQ0dPQxloRlnNScxHZyNjUH3Ie93qiix9Hv0a++qaa+OCJWBrR729LDqoY0+Hl50Dj20sUFvrDVR2nw87xZ+l2rWOdPziQa8ArLyY/96I9BdP8FByC6DycdkWrruBFOtZP0q/PUCLyqqCTgDYsCu6WsTKxoRUW7tzie5HvSJkebePBxjs0sjhP6LTUKfD8jItHr4f7tmO5JhSO6SK3jcYtR46PM8NQDXA2LiN6UeesWKIa8VjZOLSZce+2zIfrw/ffTVeGReeIQETVWLn4cBXZbBy+k5Zfjx4/zhTU4Z7/y8ssheuSO90P0srnk8IaiT2JFNlFEI6LGQcjCHE0hT0w/eJ5lO0bvO/7Z1k/qnhy6YA9ED174Eoi+5z3v4VOXBa/P0NDq4kNLED17hspYRJw4RSswf/j+hyH6t77yOojuHeEIZCbRs+zfQ2sRP/btF0H0N3+fmqPTuIgdEc//8pdC9E3vuheixfTiXZTlxRddDPsmX4U0OER59AitSvVnqHcYjBOPY6ZHg9XRkHbnmnX0eOJxvOv974Xo677s1XTqku7p/gNUd9538wf5wv723/17EL3l5rdD9LVXvwaiydFNqtOLM2dW+Q9G07psnNtGRIYj4Y11mvJESyOrPKPfvQff20bEbO/8Fxj7uHC0NsIfFTFTUOXau4f6jgxvOD+M5OCnwuF9r6XLfsHzXwDRd73jbXzq7fJs54lGI3qxNYujTXg185k/GNBtufoKGlmdPHESoitnlyE6u0h9VqTGkwNsrNoh1Y6NUeKl8vwMNeDLI3ydhys/+66i+xkRDbYYPGI8+xCNQJ5//dUQ/cPfTlTb7SZ03NgfZzitSC01RH9AZXjQo2Ewz+hbvLAmNXMuS6o7PF3isX+WGt9UDQ5CsK1rsWat4mv0iJiZowaH3xqP8eAH9tIYY+XYabyuyHAssONd1U64OF92lrjNHwvzx6Ywf6zrac0fgzbH/LGJzB/rMn+s6+nLH5s4Mdm+cVrm2GbI/LEu88e6zB/r+tznj23h/LE+tjbmj3WZPzbhvOaPTfI05Y/FlHlcvfUO0fyxicwf6zB/rOupyh/bPqO797774nHkj22a1uKZP9Zl/tgT3d/8sQkHx8HPdhNzycwf6zJ/rOu888c2QQqZ+WMTmT/W9ZTnj21tfKL5Yzu2mD/WZf5Y17Tksc3tUzPHNk2c227baP5Yl/ljE3XTxrY8/vyx1c5288e6zB/rSuaPLSwmF8SmXpv5Y13mj3U9g/LHHu+nVSRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiR9AfADZJIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSdIu4gfIJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSpF3ED5BJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJu4gfIJMkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZJ2ET9AJkmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJO0ifoBMkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJ2kXKf/Y9P71j07XXL8IOf/1bvhmidVtAdG1Y89UMh2sQbSKjg280EC3GGxCtqnW+sJPHT0C0LAYQ7fdKiGYZ/aiIaFr6XXmGBy/o4GXizBEFPc26oafZti1G6dxZST8qIkajIUTLskenrumyh6tUTiJiuMF/QL96fmGeD76lbndeZJbRkSMib+ljgj/xYz8JUX5Y3/Gd38Gnvu7GqyH6wz/ywxCd6/ch+tVv/At86qamkjAc0sP6c1/z1RBdH40h+qfveidf2Ou+7HUQvfn974XoP/iu74ToD//gv+RTL5VUbZ+1/wDte3YFok1L9yQiZiqqXBdmdGE3N9QmFDlV6qJIfElzY4Na+Bybo6qq+OBbFhYWpoV6Ux7KaER3rMzod42G9KN+6j/8J4hGRNPQ0/x//uN/hOj+A1SK/twbqWZFRJHT73rTm94E0Vtu+whEV9ZoCBERPezUVpap/B+8gH71eEzlpGmoH4+ItbVViA6H1NBlwYOERE/f4odos2wZorNzSxCtsLeNiMHMDERXcACT1XTDl5epdpw5c5Yv7Lff/Hub//Gq75qwseyfM+Tb8c9+Ro+jwYFTROTYmt313t+ggxc4IOxT9KLnvZIvbPGy6yB6yaWXQXQVK+Zdn7qdTz0YYSM8HkGwWqWGbjA3x6ducHS0tEDTpSUc8u3ZQ/se3LePL4zrdWK8iE1CgaUoqcW2jg/+vGuojY2Iske1o4/jyfX1qW1ClmU53pNej0YgEYF9daIlbCoqogX+qIjIcrqlPWxFr8Wf/ZEN6pUiouGPmOOQj4cBqzw06ieGfE3g7BXrR4vRhRma70dEr6I/GOE4gceiC1ir6QdHRMR8QQWprajajnBsP4pEEeUpf9XSPZmZoSY6ObwpcT0hx0KI5TcqbmTrxJCvGif+APC6EM/oI9U7VGN61jVGS5x+RkSGw5sNrB01l/GGhgGDQaIBz3EUnSWaMiqEySEfnjlyvKVVRlODFpdkxziEjog6UY6imt7X82WXWIAj4oKD+yHK1bbENqHqLK/tMINDlBbX4rKGoieOHoPoLA4mI2LPHpptffijt0H0phvownIeEUYUuD6TF3RLi5xKQrKx6s3Qsz58Gc077r777mmhqq52DOp2/JMLcESUJfV6vQGVosWFPRD98jd8OZ96bYUmsCfP0guLmSU69a13H+VTD3Lavd+jRdflM9RY7aupjB154CG+sAsPXQzRQyXNxS5eoBH4xXOJWcmpBz8M0XFN9Xo8nNptjYej5TVakppNFdEKu57v/d5/AtEf/9H/C6KDfmpdFC9thFOeHNvYNVz5jIjbPvIxiL7ylS+H6EUXXwjRskdj+3e+5918YR/5+Mch+h3f9X0QrRq64YMeraRFRJ4ajo7xtVpErE9ZhKxSo4gTp05B9NgxaqzmB1RtRyNsbU6d5Au79OJLILo4PwvRtRU6dYvTpYiYXaDnhVP2yHG6xMu5DbaxkRro4mvGuBTXANMT1G2aziCt5ikPrr8Mh4lXV1lDF3d2mXrb4TItkhQ4Fj15nKpGRMzOUoPTBhWzo8eoKx/MJObsBd7wBt+VBA6Dk6/4A5cQK5x4tzU9joN7aJAwP59oRbcbd35jNr0rj4ge/uoeJopERIHtd9nD2Ra+9uIsFJ5qRUSDazvBpQjnHVlqGZvnDn284UN8sfvIow/zqfmmFbxylFO1hQHh5pkxGjXek+OnzkCUe61xJ2z+WJg/No35Y90/eDrzx7ppY1vMH5vI/LEu88e6nr78sYk5Y9s3Tssc2wyZP9Zl/liX+WMTLuxzkj82EeePzQ6oUzN/rMv8sS7zxyZ6mvLHImJiCsDWRvPHJjJ/rMv8sQkHfxryxza3J4c3m6ZlkZk/1mX+WJf5Y5PPfr75Y9tNfLth/liX+WNd550/9pmDT08hM39sIvPHup7y/LGtjU80f2zHFvPHuswf65qWPLa5fVrm2GcubNIoYvtG88e6zB+bqJs2tuX88sc2t5s/1mX+WFcyf2yMc8yI2Jie/GP+2IR9zR/reAbljyVKhiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkqQvJH6ATJIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSdpF/ACZJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmStIv4ATJJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRpF/EDZJIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSdIu4gfIpP8/e/cdr9lZFnr/Wuupu83sqZlJMpNeIQFCUUGKIC82UFT0PTaOBRX9WFBBjq8Fe++eoyKoNOGgWFAs9JIQCAIB0nuZZJLJ1D27PWWt9f6xcWfPXs/+3cwkkxD37/tX8lx7rft+1rrX3db1eUaSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJGkd8QfIJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSpHWk+Su//f2rPmrkGRwwLCs8YQGx66+/nmtz8cUXQLSqqOiyoKL7RR+i2bDDFasaYxA9Oj8H0fPOOhOiw+GQi85bTYiWZUnHNujMfD0jIio6OR+dcdnYxmJI5UZEo0HXJGtQ0TnWO3VFotOkpjKXUUtYmJ9Pnf7zWrUvuJgN+BC83NFs0NMRBV3wK9/4Bi769QcP0Lkb9CuHc3g7/vIv/oKLjpxO/uM/+MMQPfO8cyB6x613QHTQxAYcsWl8CqKNFlX7Qx/6AESrVI8xP0md1fv23AHRDL/WKePjXHRrQHVb6GMn3KJqR1AT7fXozBExc2QWomMlVbvRSNzrFX+65m3dtev0kZ/fdddeOF+B4+n0hgmI/tbv/BpEI+K0U0dXacmRmSN07BpfZ8nW7Vu56F/+pV+EaKvdhWivT73o3/zNm7noiYlJiL7rXf8C0ec+9ysg+va3/1+IvuCrv4ortrDQg+jEBN3r17zmNRB95jOfyUV/9GMfh+jLf+gHIfrDP/RjEC2LxIg65D6hicPakFpCOaTHFudNERF79+yvf7jnzs9/ODbWXvn5qv89dPAwnDnLeKxOTK14xjg2Se3k8NEZiJa9o1yvjRs3QvQJT7wUovMLixDdsp3OHBGf/ch7IHronjshOnvvXRCtBlSxiMSgOFigKd/4ON2OVpuGvORcdGyKutnxCbqkzS6Oto02RSM2b94MUe6sTt+1C6Jz84lGmONwXOJQnq19K7Ms4xvd6dCoFBHtFl20Bq5KqrxFp+ZpWUQ1pHlCiXP/M9u0mNqcmJXFQeys2ljxCfxebVw4tHBxGhFNXoGWVHRV0bHDPl7QiAGupwKvSY4rmjG8JpElflC+yQ2pSy2hj+NOkfop+w04WT34AC0hN22mrmwWB7WIOG3XaRAdFPS9qoqu2EKfVuV5L7Fm7+ElbWBL4D2QNJ4AYTvJcGgqBokHc4j9UYt3b7D99/FLVTjVjNQFzzP61nmJx3LBERnXnLfacD6ZYzc4PbUB6xV/8RevG/HpytXb2k2l06XtgiNz9MhHxPSOHXQ43sy5edwXrRLPTrOiB5NHlj4OO7/ziz8E0R955a9ivWKidQZEmwPa5Rgf0iVrjCdWJRkOuK0mTX5K7GMbzcTzkTVpdrRhA63os9UPdbEytOrZWfW/ZeJlRywu0tqBu6MB7u1kWWKOwfPJCy64EKJFRpO6z909YuW7UokN6Wte8iUQnbvhFooeoRX92dup8UfEYA+1/5tvpB2tCjvpDVOJHuO5T78You+//W46OFu7nWTlwhFaECUXiVHhLLpJXTSuDCJwnzkidp16KkQ3btoE0R2nbIfogcOJseMpT7oMot0x6qy2bqWi+aXYlz39y7FeceXHroLo/gOHILrjFLqeVWpBVKYaS4FzmFi7sWX8Oi+ihS1pGqf3Y7hJsmkjze0D52wR0cCnfoiT/z6+dJiYTGwXjHVoUMsq7P9xypdoCalFYuCox63o+17+vRD9X69+RaLoFYpaNTr4XqDdpoe61cINlohhSXdz9ih1whlObwaLtAwcG0v0oocP0rBVlHRybv5zWLGIGMN9jMP30zyh06cuunN/ohHOlnS/Klz89udpGtBs4FIL9w9X/3EtUWGIX6uNC8ykJvYYBaeCpLpokNp9jDm84J0OPZh33H4bRM8582wumqfBnB7Dt+OUHadw0XfcSTUvcJOwgfsYp07TXtmeIwtcsRyf+ttuvw+i27fQhDCL1S3Q/LEwf2zNvzB/bLWTmj9WTxtbZv7YaOaP1Zg/VncS88dGNu8VH9Yyx46sDJk/Vmf+WJ35Y6MOfqTzx5Zx/tj8PL1WMH+szvyxOvPHRjpJ+WNLYfjQ/LGRzB+rM3+s7mTkjy19nswfW7JWFpn5YyOYP1Yv2vyxZQ9H/thK/f6IB8H8sTrzx+qOM39syYossrVTyMwfG8n8sbqHP3/svz483vyx1Z+YP1Zj/ljdWsljS59zPzgyf2zlh+aP1Zk/NlI9bWzZF54/Nl/73PyxOvPHRpw5lT9Wpd4cDNd++swfqzN/rO4xlD/2kBq0JEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSpMcWf4BMkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJWkf8ATJJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRpHfEHyCRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkqR1xB8gkyRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJktYRf4BMkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJWkeaURWrPiqLBhyQN+g3y/KshOhlT30i1+beu++B6MEDD0B0/4FDEH3GM78cov/z1X+N9YrFowch+pKvPhWiUxs20KkbTS464zAqSzo6z+lGR8RwSHez0WzRwRkVXRR05qKssF7RzKkRliWdPPDcC/OLXDQfn1dUsUbqXi+rX59mM3HseLcL0VNrj/lKeYNuVhMvZ0ScPrERot2xDkR7eD0XsJ1ERLdNJ4/hAILtQ7MQvXDjFohOj7WxXnFPrwfRHFvCIjbgJn/liP39PoVzemzLktrJfb0FLjrHkpst+tZN7OpyjmapJwsHpgp/iPML74EHgzXb26GDo4enfp+aaJZRF33kyFGI/uQrfgKiEfGrv/qrVHROD+bhjx6B6Mev+hgX3elQG547fACi3bExiH7vy76Hi96/j05+7vnnQfQv//p1EO33qPW/5a1v4YodPkp3c3J8AqK7d+2CKE9+IuKd//LPEJ2amoJoWQ4hWiVG8sixO2rgLKIzPgnREmcRvQXsqiJ27tzxX/95T/3D4bEjy+TUMSPg3n374MztZqIDzyrurMjr/vzPIfq2v307RH/u138Dzx1X3roXotfdsQeiL3juUyH6oU8kfgr5TpxFz+TUTtptamMLgzkuuhrQUF4W1P6PztCqJMr9VC72wBFRPnA7RJt8dIVTvtRM9VZ8MLs4Fx2boK5sMy+XIppNmnqVBVUMLkkVMcQe4/599z+UinXwmvzzLHX+ExPjXHQLZ4xTeLPGZ2nJM4FLrYjYhA9Xt4V93YA64RYuedqJjjAaFS9vaaJb4EOd4fWMiBxn0RlOgzOcypYZVawoqNyIaGLN8xzn57zzw7sBETtPOQWi+++nvZ077rgDohunEj1GDydmwwE9OzwDP4oz8GYzscFS4dpigKuSRoOqnace22JIDamBW0N58yH9uwWDgpY80aZrUvax/eN6f5DaQulgV4Z7JInRdphaQ3K8gdPoCte2GUZ5MRURn/z0p+sfXrLy/GvXnRcOe++5i4t+x8dugOgnbqNNp2aDxp0Me9GImMQ9L76kZU6XdMP9vw/Rp1y0A6IRsXkzXdLTps6B6N4DV0O0k9p07WT0BxNdGno2NCnawtl7RAx6dMG/5GlPg+g7//Gda4VK3N+OiCp1TVq4lLvi6lshunnLNEQnxmm6GBGNAjcYsQNv48l376bNhIg475KzIXrOeTQcv+8/6Zo0H6ALfhYOeRFxzV23QPSWfbisxrnTC77+Mi56MKRZdBZ3QxTmXXneXFjkMyfmGO02rUr48DZuNRc8jke0O9TM/vOqT0L0m775xRA9bQe9cYuIN735DRAthtTMfvZnXwXRdpcmCU/7ki/lir31be+A6D130RbKqaeeBtEcX/bFF/BabebIDP/BWhOk5Lrj/n00vd+0iV61bJqexnPTl8qyxEyVr8jsPL0hKvHcnbFEB17iLl+GE/gCJ4QZLhzy5OoVly0VXjPMHYgytWZfqV5LfrE7xHeFe+6+l4trdGh9yq9uceMnpjdvh2hRJeaii/jSbWrjVoi2t1IH/rlBYuE8ex/tY4/jK4lmHIbocCGx6VqOU5+Q44yx06YZ+DCjaBPXgKtPVVtv8h4gz3MbqTX7wuI8RMd5kxCf+irxniYx72q16KLNztC7wh3bt0H03r2Jx3bzps0Q5feMFe4BNtuJmRWPHi284GdsoHvdx/G0wlyOSGztR443s9+j7ihv1k5t/pj5Y2swf+x4j3+I+WNwWcwfG31y88dqzB8b4aTlj43MGVv54VqZY0sh88fqzB+rM3+s7pHKHxuB88cWh3Ry88fqzB8bUa75Y6OcpPyxWCN/bPlD88dGMn+szvyxuocrf+zS2ufJ/LEla2WRmT824uTmj9WYP7bsYckfW2l+ccQczPyxOvPH6k44fyzJ/LGRzB+re9jzx5Y/PN78sVWfmD9WZ/5Y3VrJY0uf89Ro5Lpj5Yfmj4043PyxUaByJ5Y/tvS5+WN15o/VJfPHFmcT70CztbtZ88fqzB+rewzljz2knSBJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJjy3+AJkkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZK0jvgDZJIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSdI64g+QSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSeuIP0AmSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkrSP+AJkkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZK0jvgDZJIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSdI60jw6t7Dqo7zK4IA77rgDoueeey5EG+2Ca3PuOWdAdLD7dIgeOHAAonk2pIpFxRXLG3RN/uPdV0D00kvOx3OXXHRW0Y/EZRlVrNlqQHRY0DWJiBx/ni7LqWi+oNjEotmkakfEYNiHaCNvQrQMvGLtFhc9e+goRPuDHkTzJlVspUZz9aUfzi/yIa0BXbQDOTWzyfYYROfnZrjoTqsD0bFxOnnZp+/VHB/noncHXdIDDWrBU+02RBcW6FY22olbuQWb6OapDRDlx3Z2bo6Lrqa6EB3M0/fqbqCb1eqleozeAKIbNk5BdBo7un+cOwzRZp7owFtNeq7LjA5vpu71sixb88YtLq4eZz9/cuzqqoIe26/+uq+CaFEkrsn3fe/3QvTpz3gGRH//938fov/r1a/iol/zml+A6A+95Achum3LNoj+8q/+Chf9S6/5ZYiecQbNQI7OHoHorbfcCtGf+f9+hivWalEz27JtK0T37LkXot/xHS/logdD6hO+9Vu/FaKtBnX+SRU+eiXOE2aO0lhc4hzk8AxNFyNia3vEBS/Kzz+PZXnMyVf/75CK7g+pk4yIYUljR6tF3fs1118D0Suu/DBEEzPRiEvO2QnRnWdQtL3IQwONOxHx3K97AUSf8P3UwrfUZlMr/dzP/DQX/Y1f//UQnRynQe2KKz4E0f0HD0H0yOH9XLGnPe0pEP2d3/wdiI7jzIrn9pFqKgsLowe7JcMhzSImxxItYVhS4SVGm2svDZp5Exd5cegQdf4RUVRU9LBPfeyN0zQhLHp0PSOiwNlmq4WLmoo6qxbOQCIieAJf0kXr4kS3VWKUaxUxjgu97TjajuHCYbqRWJ/mferrNpe0DdLEVXcrp6Lz1D5GgSv6anGeTo5T1blU0RumpyHKC2fubjqdxAxkYY6+F/cYQ2z/Q5xjF6kRtZHx3g53dHzuxFZbgcdz0fmAvnXydvBard/nrgzXYvh0VFVi3pXjUw+Lu4jol3TyRqrHSDRCnMDw9WzgqDbfS2wr3XTTjfUPL1n5P2v3k0X1JAAAIABJREFUZpOTk3Dm2aOJfYx8F/XxMwNqCQVul/HSICIK/IM57E86TerK5m79V4gOUmv2Cp/rFm4w8lDOW9wRkeE8oY09Rhef2k0bEk9HVdKM8dkvoX28bPV4WqwM7T5jd8Te5U92n7H72HJTm/M4T/7dD92DR9OaParEVtv01GaILizSw9Xu0JOV46gUEduu3QfRyTZusOdU9Gktmvzf/J+3cMX6i/To9UoqurdAV2z/P1zHRZ9z1m6IZjgXxflN2cSHOtmVlbju6C1SPzk3S9GMx+LUq5bA0XY4wMlPaihv455tiUXve+AgRLdto+3H7/0+2rqMiDPOOBuiZ511FkRLHB3wTWBERJVqKvwyMSLKNbq7DvYnEfGhD74fohdeSG9It375cyA6MUZFF0WiiQ5x2rbQo2dn5w7qgWFetCTDATcRxTtVFlR0nuiLYoiH87vbw3M4x+A3yqvKqfeK2H7HxmlflDdnIqLAdUeOfR3f6bt3UfPu4nZuRGycpln0ELuy/lFswNi8I+KWW2jAbY9PQDSbom89sZH2uyJicoL2Jwuci/ZOpV50gJuTvBBbpd6eK5wQDrFPGJaJ/rnbppU1T/4jEnPsh4I7lC2b6NVVDxthvinRY/Crq/6AJjC8Kp/Ft0sRMTFBT25Z0FWZmKBnZxw7q2ZFbw0ioqiomfEgX+Art2y4Omr+WJg/tgbzx+pOav5YPW1smfljI5k/Vmf+WN3Jyx8b+Vph5YdrZY4thcwfqzN/rM78sbpHPn/swZObP1Zj/lid+WN1X5z5YxExcpG3/KH5Y6OZP1Zj/ljdSckfKyO+gISlJWtlkZk/drxFmz9WZ/5YHeePrTQyl8z8sTrzx+qOM39syYOXEVLIzB8byfyxupOQP/b5D483f2zVJ+aPjTjc/LERh48+funztTLHlozMH1v5ofljdeaPjT49LJq+4Pyx2drn5o/VmT9Wl8wfS7ZhSCEzf6zO/LG6x1D+2HEkBEuSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEl6rPMHyCRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkqR1xB8gkyRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJktYRf4BMkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJWkf8ATJJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRpHfEHyCRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkqR1xB8gkyRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJktaR5vd85/cc1wHd8Q5E/+ov/xKiC4tzfPKDDxyA6OTGjRCdmpikUzdKilaJH2JrNelbV4MMot0xOjbPU78Bh/Esa0C0P6wg2siaXDIdHDEYDiHabrUgmuG3LgZ05oiIir51leHJi0WIZthMIiKnkqOB36s3GCTO/l8W+/3V5abaSbNFd3Mw6EF0YVhAtN9qc9FlTu1/fnYWoh2s9nA20WNcizUfFNSQBkE3+8zxDRC98+Ahrtj4+DhEF+bnIbrjlG0QzTO62hEx3sFHb4Ie66rW8FYaBEUjYqqkup2Gfdn+Q3RJG1381lXiuT1w6CBEt3XoqW426HquND295gg1MTG6PSwuzsAJs5xu1lve+maIfuAD74VoRByZoQv+pre8AaLdbheiL//+H+Ci+9gdveGNfwXRs3afBdH/91tewkVv3jAF0cOHD0N0cYG6owvPPw+iVarzf9Nf0wX/p3/6J4j+67/8G0Tb2D9HRFXRH3SwPxlgD1wMEw9mVo1RxfDkPNrOzR2F6NgklRsRjcaIPmH5w2FxTE9YHTtvaDToei7ML3DRPB3N8G7+x79SS5g5fASiNw8SN2v/YRq2+n0abecX6FtzC4yIB+apx3j3f14N0U985GMQ7R2kRUdE/NRP/QREmzgjfOUrXwnRF3/910P0zj13csXOOGs3RN//nvdD9Fd++Rch+pKXfAsXnfH9wmErL+mhnj1ymIuuCuwT2rTaOuusc4794KPL/3X++RfeettNWC6vh6IRPIugWfQMPh0Z9icR0RzVWS0rK7piVUnfq5f6jXKejXIzKfvcvWMUr2dEZBl9r5szXBos0mCdpWbgXV78YlfWaNKtbOPdyPFWRkQX20kX7/VglproRJkYO3Y/6/EUxl50FpeBGzfSjC4iSrwsIwf6Za0W9SeffO87IdpMLZw7Y7Rn1dpIy0DW7CSK5u9VltQSNm+ZpqLbNEmIiE2TtLLG3j2qClevLYryTDUiyqDnutXFfTw8to/L6kht7/CuVFnwo0cVmzl6GI+NMrU1Wq3dGW7fshUOHKbW7G1cYw4SwzFFM9whjIgWDri8t1PgpmsX9xK67dRA38K9TWzh/J0HqRs9LGhMLPCSLuC9njma+NZ9XDp/3eQERGGszrKYOPZWrvrfxGgauIEYkbWpAec4P4mMjo2IwzhjbOC2Ku+fp3YLYt8MzZ1msZ/ctm0LRBun0N7O3dfcxhWbmadLyjv//SFdk7s/fT8X3bj6Pojyq6ty7blTWZZnnUmrPG5EEdHA3ctv/OZvhmi3QTc6x32hiChwej8zT5O6933wQxAtU5tpbVwG7t23F6I33Xg7RO+8i250f5h4eG6+7S6IXvEh2r1pjm2H6Kmnnc5Fj42cE65oXDMLiZlbtcZMg/dAIuJxF10A0Ysvvgii73vveyA6NUGd/yx2khHBs6MhTkbn5+jF1kLqYvIWertD+5MtbGVTk7SsKHAcj9ReXLtNI8u/XUFbbUN8ZZz84wyXxo0mblOn3ikPglblPXxhsQFzD3ge22gm5l1Fky54p03tpMgpuv+WW7joDdM0WLfHaI2Z4R5Iq5NaVuC95n2lJp6cdzkajYf0b/IVONHl3TDubSIib/CanY6FOUZEVDiN4GMjtYUyxJPnOFPtNhLT4MVFmtRxxXju1OQWmFryT03TLscLvu/7Ifr6P/kLiDaS+RgDHPXwW2/cMA3RudnVb6vNH4swf2w088fqTmr+WD1t7MFyzR8bxfyxEUWbP1Zz8vLHRuaMrfzw8P5VLeHBrzkxMW7+WJ35Y3Xmj9U98vljy8wfqzN/rM78sRHBL6L8sWOMzB9bTlgwf2wk88fqzB+rOxn5Y0ufJ/PHlqy1C2r+WJ35Y3Xmj410wvljK43MJTN/rM78sboTzh9bAilk5o+NZP5Y3cOeP7b84fHmj636xPyxOvPH6tZKHlv6fK3Msc9XbNTsfeWH5o/VmT92vH9zYvljS5+bP1Zn/ljdQ8wfC0whM3+szvyxusdQ/thDfVokSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkPYb4A2SSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEnSOuIPkEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEnriD9AJkmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJK0j/gCZJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmStI74A2SSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEnSOtLMuo1VH+WRwQG9Xg+iL/3ul0J0cYGOjYgMfw/tLW/+G4jOL8xA9K4b74LoH//6i7Becdtd+yB6y3UbIDo+NgbRii52RESJtyNrUjSvKogOy4KLzjI6eSNf3XJWKsuSKhZ0bN5scsWqjE5e4bcOrHZvOOSiI6O6LQ6whWdU9ErNfPWTUOKNjlRD2l3Qo3XR5m0QPXz4cKLoBpVdFnRJ5/DM7clxLvpTBw9B9JIt2yHazKidfPaBB6hi412u2JEBfetx/OXHO/dT0Zs2THHRixidLwcQ7RUU3XvgABfdabUhWuw/CtEGtqKswt6mSvySZjGk7zVs0eHNVHe0rNVa8y/bndFXJnFy7IHPPvtciJ6xaxedOeKl3/FtEL3h5ush+sH3vQ+iF1xwARd9yimnQLQ3pF70c1d/BqL/9A+3cNH//M//TOGKRpbZxXmI1jvtlXadmbgdv/+Hvw3R+dkFiJ5++k6IHj58hIvOsebDog/RqsJZBE/pIkq84FXBUepjC+zoWnmLK9bpdODDhfnZlZ+Xw2MuAj/UjUaiaD6806X55CWPfwJEr7/uZoi2D1P/HBEHb7sNohObaBZx7s6tED1lKjGeHj2dhvLf/U16dp5+HvU2H757xI1eaXxyGqLDHj0dv/d7fwDRAU4Xy0jMz3Emm+gxXviib4BoI/XY8tKg1aaaDUp6bPcd2M9FVzkV3V+g6c/9998PoYV5umJjuI6LiO4YT1bpkh6dmYXo3/wtrXwj4oqPXA7RN7/xjRBtNahiMKVZ0sP2X5W4FsNghsulakjlRqqdRGrGSHBtGxHDIX2xAlevWUnVnsdos5G4WQf7NCaysqLHdkMkiv6Kc84+4aK3bdsC0QMHDvLhu3efCVHeqYig6Mzez0GUN2eWyqYgdv88Z0u10ODv1RzfCNE7cOBpNBP9ZIYdDi/0TjntdIj2C5pZNSZpmy4iJsYnILpl62aITo7RBGbrFmrAkWqEE1NUMW4JHJ2d5Q2YmJ1LzAnLtZvp+BQNiLtOpVsZEYMBdVYv/tZvpJOfTif//d/5XS46cC9igHs7zQbtgXS7FF0cJAa1Xj/xB6DCDqXVSqxKShw7Go0vdG9zxLG4GxwRGyeo/c8v0pQPdoOrqhoce8FX/W8Hb1ZElDiDyXCDMcMHsygSk/8G7lkl+gRs3hVPyyIqXJiUOL3hzYRenzZYNkwlRhZeWQxxb7/dxjcpeD2TeJNky9alte2IJcCWrdsHi/Tc8fw6UmtMfmswH3TFqvnU67wmdSl5RTPGPXfv5ZMnisYFbIaj7Vvf8vcQrXDi1E+9P+KF8x/96Zsh2kpsRCeaaLs94vAXXPXgfy/M0iI0Iso1WltVJlrC4jw912ecQVujn/4MzbG/+qu+AqJ/+udv4IqdfzHtVN9+250Q/Y7v+FaI/sn//jMuusJp8PTmTRC94Dza+f/Gb6DX2fOzdC8i4h/+4V0Q7Y7Rdll3M+3yHZf6M8qPLb9nfGBfoomedQFN76c30gQ+y6kXHsMN27F2YvuxMeqxXTbs4Yst7I42b6U91YjYfz+lPbRwQ2xsnCb/RWqO0WzSnJDnRhXmqPBEl+f2SfzCoijoW7eaqXcluKjv4ytOHncSGRPJCSGffEi3q4kjdZHapuOFM79JGeBq6wFMAIiIu++i0aEYUsXOOe98iP7Y/3olRL/vB36UKzYcYj4G3uwxTGw4WksFyWpLJPPH6swfqzN/rO4h5o9BBoL5YyOZP1Zn/tiIok9a/tjIF6wrP1wrc2wpZP5YnfljdeaPjYo+0vljy8wfqzN/rM78sbovzvyxiBiZP7b8ofljI5k/Vmf+WN3Dlz9226rPk/ljS6amRudEmT9WZ/5YnfljI51w/thKI3PJzB+rM3+s7oTzx5ZACpn5Y2v8gfljx+cLyx+LlSlkyx8eb/7Yqk/MHxsRNX+sZq3ksaXP18ocWzIyf2zlh+aP1Zk/NhI8mieWP7b0ufljdeaP1T3E/LHAdxbmj9WZP1b3GMofe0jTYkmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmPLf4AmSRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkrSO+ANkkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJ0jriD5BJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJ64g/QCZJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiStI/4AmSRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkrSO+ANkkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJ0jrSfNtb37Hqo1ZWwQFv+t9/ANEPf/D9EB12WlybLMsg+tKXvpROXhYQpa8U8au/9msYj0Y1C9HDh45CdHxiCqL9ciFRdJMuWlHgt27QmflqR+qiRVlCMM+beGY6Nsuw3hEN/IMKK97E39wbH5/gohcrul98+JEZaicrjbitVeJmNfGC39eha9I5dACic4uJJnr2hi0UHutCcObAfogOqZlEROQZ/cXs/fdDdMf2bRDdha1/U6uD9YrPDoYQLXO6m612G6KDxGMZ3FC6bap5WdLR3bHE08FFU1eV6soa2P4zvJ4RMTk1CdHhsA/R7sQYn3zZ/Wu3t2ZzdJc1xG/d79Gjd8cdd0B0w+Q4RCNicoLuZgtHh0ZFrXATXu2I2LplE0T//d//FaKXPfFJEL3605/hoouCav74J1wK0as+cRVEn/70p0N0cpKmARHx0Y9/DKJPunQ3RDdMbIDo+977Pi56vtfjPwAZzk8qbCcRsX//ETq8Qd17b4Gq3e9hf9JI9RiTI9rw8oezs8dMCJvHDgclTo1uv/12Lpp7wvn5eYi+9W1/A9GvfsXPQPR7v/cHuGJbT90J0Q2btkJ08+ZpiH7ji7+ei25VdElf8PyvgOjnLr8coocOHOKin/McOvktN94I0Vtvuxmi7/i7v4XoAwdoVhYRL/+B74foRIeGrRy79wKvdkTgGjEqnEVkLZqC9xcSk+RySDMrXjtAb1RVURT0rRuNxKqkN6BZRJbRt56a3gjRz3zms1x0t0v3+hu+8ZsguufuuyH6h3/w+1z03XfS4f/jf/wPiF5y6SUQ/aEf/iGIHp2d4Yr90R/8EUQP4MP13Oc8E6LvT42nA2yieZNWamVJx+LkJaKR+EH5Aa67ecFf4ey+11vkordt2w5RHtQOHaIueuNGenYi4m5s4YE9YYbrjiHe6Pe9+z1Yr/jghz8M0V/75V+BaIFFl6l5V5bTHKN3lO4m7xvxzk9EFMWADscO/OiBGyDayKjoPE88HQVO21otWpU3cUMgaySuSQP/gNcOCzgN3r5jB0QHyYE+NerBuHbWWWfzkXxmngbPzNCW7DlnnwfRv37TG7nodofu5uUf+zhEf+c3fhOif/M3fw/R+d5comLYCCvcA/8P7I5e//rXc9GtnIrmYSt1qxN6ePIjMzQ65GsPW3mt8a7630Gfyo3UTl13gnZgzj33XIi+6lWv5KIP3P8ARHk8XexRD/w7v/PbXHQbv/VWHOh7izSy9AfUgL/hxTSPjYg3/s3bIFoEbaY1ShodhkPevEwMLtz8q2rNk1dV0WnT0JCl3tIUJf1BA2eMGfY2vUVa70REnty+X1uF864Wv8WJGGBD4v6owmUgX/AmzkAi9b3KIUX7A3pss1TRfXz0IrVtFRHtxuj2MIbDZURc9fErIPqxj9E0eBGvycevpGP7vcQ3uuUW2r3Jc5r8/PzPXYvnTtwOHjGP4K7UsE9TvvvuvgOirQ69j4uIPXfvhejznvdciG7YShvRJfZFq1T56j9u8ztlXPJMTCVyD3o4Jv7Za19LJ8c3KRum6JpkVWKOsXHjNES7bf5euNXAnWREiauDZosezG3b6O3qkDcQI7Zvp1lEZ4w6HN75H+/SzUr2gSvVB30elho4EeDNhIjoNOmipVZyJJFcgNu5kdyLwEs6xLH40KGDXPQE7nxyK2u16Nk5bedpXPQN110H0Ykp2pXqtqgTbk1QdHw88T56AQf6Br4rn5ujFWi7tXpAfJP5Y+aPrXU4h80fO87Dk/ljdDfNHxvF/LE688fqTl7+2MicsZUfrpU5thQyf6zO/LE688fqHvn8sWXmj9WZP1Zn/tiIY78o88ciRuePLX9o/thI5o/VmT9WdzLyx5Y+T+aPLVkzi8z8sRrzx+rMHxv9ByeaP3bMAz+qSZk/NqJi5o/VnHD+2BJIITN/bCTzx+oe9vyx5Q+PN39s1Sfmj41g/li96DUmP0ufr5U5tmRk/tjKD80fqzN/bKR62tiyE8sfW/rc/LE688fqkvljyVUkJImZP1Zn/tiIij128scSD4MkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZKk/078ATJJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRpHfEHyCRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkqR1xB8gkyRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJktYRf4BMkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJWkf8ATJJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRpHfEHyCRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkqR1pNkbzq/6qJU14YCv/foXQjTfdztEN4y3uDZFfwDRK+8+DNGbD81CNM8yiP7s//czWK9o5HRNJsfGIPqt3/4SiJaDxG/AVVkfou1mB6IZfuvIq0TRFf1BnlPN86wBUaxWBFc7VbFhSa0ooqRYOeSi+4NFiGK9EtVeaVAUqz7JG20+ZGae2v8ENtEbq9XFrbQw5OsZ984egWhzQDVfKOl2DOfnuOjJsQmI3tyiZ+e2ozN4Zrpidy8scMUq7DGC2wmeeTCgLxURnbEuRBcXe3QwPnp5nngwGzk99fxwZXgsVyzLEr3ogf37ILpz0yaIdltYsRUaa9exKEZ/97Kgh6vEp6PEB/O+vfdANCJ+7jU/B9FTd2yB6HkXnAPRT3/u01z01fgH23ecAtGr/vMTEB0OqSuLiLKkx+tjH78SokWtW17pIx/5CJabGFnOPPtsiN58w/UQ7WI32MMxKyI6HZpFBD71VUFNNPLElI8vC88ieDzdf/AgRAfYDCKiqEZ8r+UPF47t/1f9Lz+Yh44c5aJ5mpA16Jr83u/9AUT/+M//DKLPPmcbFRyx5567IDrcdxNE97fGIfqHH34vF33wyH6Ibt1KndXCHE2NqgIHxIgrL/8gROeO0uSnDUNCxLe+5MUQ3bFzJ9YrmjjoFfxgokZqBs6zaF5tZWXy5KTK6PFo4WANHV2n06lGPfLLMlzvRES7TX1du0PT4Kyga/Ibv/EbXPRYdxKiL/v+74foD7yIGuHd99LEKSLmF2hwmZ1fvb2w0tFZejBbeD3/v5/5Wa7YP/7jP0H02ms+B9ELHncBRN/3nkRnxZPVCpt/hdNgfrKK1KCWaMPYYVQ4Fw0clSJiE86x+0Na1OzD2fumzXTmiBgMcAGL/QmPtiVuNfzAy+i5i4g/e+2fQnTnn/wxRE/ZToP1b/zGr3PRO089FaKTEzRYP/NZz4boq1/1ai76wgvp4brqE1dBtBjSzSoymky2W4ktFH56FnrU0TUGNIso+NlJbTAePXIAovXNopXm5mgavHvndq5YmdqzOvPMM9cKjY/TFkoztawe69I+xnvf/R6IfvAD74fo3Bzt/ETqqZ/FIW+8Tc/Od37fd0N05vBhrFc87cmXQbTAxe+XP/OZEM1wqRURQ1ypNZo4bPGGLc67IiKwhd9+6x106NpFF1V16NgLvup/G23cxItY7NFTPzNDzezLvuzLIHpkNtFEN+Kot2vXLoh+5PIrIPqGN72Ri/7u7/gOiDZwu2A7Dlsv+/4fgOjYBPUnEXHz7fT66du/nap9z557Ifrzr/lFLpr38YqS5l3wmibLsj7u91Y8aUt1ZTwWP/5xF0P0n//ln7noAU7qMpwH//T/+mmI/vIv/RIX3cBvPRzQRWvhPGE4pG6wSm0VZ9gSKnwRU+HsPcsSLaGZWne32iO/+INbW4PB6OrxjY4Inv708bVvFtQJD3r4erRFU4iI4JctFW9O4t5miXPRiGjh9s3iAi2Nr7/2GoiOd+hb543EPgavIt/xD++AaHucJj9lqrNaqYn3va6VWKklGn+vRzsVt95yM0Qr/IfcFmfxlXGWeGHR5JkVfq1Gk7qyAp+diCh5QwzvZobV5hdbETG/QDMrXpR0sP03WnTJhr3jaKJlLZEhx/6E8zHKIrHUWuzT/eofoV6UszWaGE3VK/LqxP8hw1aLetHxLr6ZisTuzaCkh4tf09y9524uudWhmnex5j//E78K0R/7lR+H6Ne+8OuwXvHGv6YJPHeER47Q64yp2pLc/LEwf2ytos0fqzmp+WOwE2j+2Ejmj9WZP1Z38vLHRiYIrPywt0bmWEQUxdD8sTrzx+rMHxtR9COeP7bM/LE688fqzB+r++LMH4uIkfljyx+aPzaS+WMjmD9WczLyx5Y+T+aPLVkzi8z8sRrzx+rMHxvphPPHVg4MI3PJzB+rM3+s7oTzx5ZACpn5YyOZP1b3sOePLX94vPljqz4xf6zO/LG6Y5PHFlZ9vlbm2JKRN3rlh+aP1Zk/NtLxpo0tWyt/bOlz88fqzB+rS+aPtVsn2D7D/LFRzB+rewzlj534jZckSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZL0mOMPkEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEnriD9AJkmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJK0j/gCZJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmStI74A2SSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEnSOuIPkEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEnrSPOWq69e9dGePXfBAV/x/zwXomedfQ5E9995C9dmrNOG6PMvOBWiX7I4D9Gj0YHof952D1fsnoNzEJ0tZiGaNxp8ctbIWxAtq4yixRCizUby5+dKjNLhZTGgI/NmqugTl+f4vfKKgo1ExdpNaqJHBocguji3yCdf1m2tvun9Id+LaDap5nlO7aQo6Jp0u/SVIyLDkw8GPapYxtUuuOiyostSlhTNMmonhyp8dlI/3djM6KkvK7rgwwF966pBVzsi+ot0wZtN6k+KHj22RUnXJCK6nS5Ej87NQHT71m0QbbepEVapimXYTjZumYboQu8LfWxbrTVbxe7du0d+PjZORVfYTl728pdDdHJ8AqIR8aY3/DVEL7rwYog28dk5ZUfiik1NboToJU98AkQX52igP3Ahcx09AAAgAElEQVSAeuCIeP/7PwjRb/jGb4bo3nv2QPTueym6e/curFfcessdEB1SQ4jpzZsgeu/e+7no7uQ4RI8cOgzRBk5vmjg0RETggznACUwbJzBjbWr/3IoiorfQhw9XfatV/8ud1d49idlm4JjIs8mjRw9D9Nu+6euo2CIxx7jljndA9Fu+mZ6d2dmjEL3iAx/iop/9JbTuuPlWWlnM4ixianwrF3348AGIPv4rvxyiGzZOQvTIYVpW3HzzzVyxNk5W5+ephec5taPkmuWePXdDtMDJf6NBk4R+f8Rzt1K5+mlbhfqEYu3+pCi4i43TTjsN49HDecJCbwGik3hNvmpHYuy4437q4a96y5sh+rrX/jlEW7WVyCoVXrbN49T+77yNthp+7Ed/HKJFqrP6+m98MUQPH6SHujtOA2Ibl1oR0cQVaI4NmBvhECeEvAaMiCHerLxJ1c5K3GrAikXEli1bIDo1NUVF42xzenqai545QvszBa62sgx7G4zeePNNWK943vNfANG//8d/gugznvEMiI53E49tt01N5Sde8QqIbtm0GaLPex6N1BHx4cs/AtGn4/e65dZbIdrA5+4nX/ETXLHTdp0O0Z/7uV+A6POf9zyI7jhtJxf90696NUQ7HbqbOQ55gx7tBhw9SjOQiNi6ZeTs6L7l/5qa2rDWsZ+p7S2vND9LT2VELHaoE37pNpq23Y0jy/QGOnNEbNh8CkTzaezA2zR3+uiNN0K0x1uXEf/5iU9RxfDoqz9zNUSrMtGBN3DYyvDwgkeHPDGUt1u0ez87T2340ic87tgPPrcytDB7zCS5t3jMFI63XyI1i+YZyv/+0/8D0Wd+xXO46E9c+TEKc8Xxe/35617HRee4A3nbHbdDtIHH/uRP/xREiyKxG3zoEG3+vPcD74NohjcrOdvMeMWEE5ijc2v2hEfnZlsdavxF8r1Ag8aO22+nm/V1L/xaiP7oK36cix65hbLs3971LxA9++yzIfqmN72Bi77m2ushOjdHPcb5550H0b/8q7+C6Ct+9Ie5Yh/64R+EaGtiGqKLfdoNS7z2injLwcTWaPJF5bAc/QBWa3y+LMdGmOf0vf7oT/4Qoj/5k6+CaKuZ+ErDIb+mxMOxT2imiua7xQfz+w4etnqL9JUjotulvYhBj751u4uTBHwptkpVG8MauN/FI8swNXY08cUuL29L7IQb2BKqMvHY8kvMxAxkQNUepKY3gZO6KsO9iAFVu4fPXUQM8ZJWide+tNVWzVNL6LSo8a9SlKsHuCZma/AEZtCnlVpENPBet/DFbsk9Rom7wdwNpvZnHoqJcdoXioj9B2jnc/+BgxR9YB9Ev+u7vouLfue73olxuib79++HKO+BP+Eyej0aESVOjngd1x9SO6nPcs0fC/PH1j4BRs0fW+0h5o/V08aWmT82kvljdeaP1Z28/LGROWMrP6xljt2xMmT+WJ35Y3Xmj9U98vljy8wfqzN/rM78sbovzvyxWOOd2/KH5o+NZP5YnfljdScjf2ypE0vmjy1Za6Ji/lid+WN15o+t8DDkj60cTUfmkpk/Vmf+WN1x5o8teTCLbFXO2Mr/NX9sJPPHRhz+cOePLX94vPljqz4xf6zO/LG6tdrv0udrZY4tGZk/tvJD88dGnByj6zZ/rJ42tuzE8seWPjd/rM78sbpk/ljRSMwE6Fjzx46T+WN1X1T5YyfrxkuSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEn6IuQPkEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEnriD9AJkmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJK0j/gCZJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmStI74A2SSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEnSOuIPkEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEnriD9AJkmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJK0jzSvf955VH+065yw44KoPfQSij3v6V0J0/123J6qTZxA8MjcP0YMzMxDduzCAaDMvuF7nnXEqRO954BBEs4y+VFWWXHSUTTo5/oJcs9mGaKNFZ46IqhhSFGte0ZeOLKd687ERUQ7pfmXYiio8e7vR4qLnywqizVYXonnrC/29v+Fif9Unp56+mw85fPQwRDudBkQbQ/pSVUHHRsT83BxEpyamILrY61HR+OxERG9ATXS804FoUdC3Lvurb8FKWepW5njNcm6iJXZHWeKxXVhYgOjOndMQPTA4DNEGdzcRjQZ9r26bbseOU7ZBtNWmb73/gf1csWaL7kdRUVc2GNDYsdLi4ppXfuPGDSM/P3yEnp1mdwyib3zjGyB60003QTQiTjuVBrWPXvlxiD772c+E6P4HDnLRD+yjEfPQIYq2WtSK7rrrLi6aR5d3vetfIfrd3/VSiM4epfkJjqUREc97znMh2urSUH7nnXdC9FnP/gou+m1v+78Q/ZGf/zmI3r/3foh+7GMf46LvuP1uiPJQXuLgcNceqlijkRjUTj/9dPjwtltvXPn57Owxk8+jR2fhzHwrI6LVpFlEgfOuV/2vV0P0S578BIg2U9OTZ7/gayD67is/DdEsowu+cff5XPTVt9DaoUkjeRQVhRf6i1x0A+eEd99NDfiFT3whnRkHxIse/ziuWLNJY+Ib30CjQx44Uk+Mc9GLC9TXHTpyhIrGyX+rlZiBlzhtGw6pn2121nz0mp12htckAhtZxP4DOOphb/VlWPKXTk9z0dP37IXok3bRiv5p9+2B6J07aVYWEVPjNEVpdagh5QdpoP/APffQmXFGFxE5PtetDZsg+uTTToNoNk8T7Ij42IEHKNzC1RYueVq4rhgOEzPVyXG6HfNz9L1aOGK224nHtjtOg9rGqdHT4yV9XIs98MA+LrqJNef9mWGfLil3Vj//8z/PFXvqU58M0bvvpCHvmk9fBdFX//RPc9Gf+jQN1r/zO78H0T/+oz+FKI9KEZHhIvGKK66gY/Fm8XTxR3/8x7hiwyHNrDZs3AjRM86iPnZ+njYnI6IoqJlVBTWzvMn7XbxhlXhs+0fo0YuIweKaGzgHcR3XxslPRJS4UnvvHhryTpmehGhjS2JQ+/gd9Ohtx9nRhi59r8243XvxmYldvrv20cjCW8kVxgeR2APnaVuJe1b82OaRGMoX125jEfGxj9JORb5253/o4JFu99hRadXwmtqc5328pz7lMope9lSIfuIz1D9HxOte+3qITuN4evVnPwvR3WckGuEP/cD3Q/RP/5RGhw0baTd4I/ax3/KSb+WK/eiPvwKi191wPUT/7Z3/AtGskXpXgg9Xgbs/qxvhsaECt7gjSzTRHk+D56l7v+rP6FZ+LrXpWq292oqIxZK+149+3/fQscktWRw7uCvLcxoTi6Bqv/x7Xsb16hTYCc/QVLaNO/+DYWKk3r1z56iPb1v+r/lZ2ouOWHOAGVaJzc2qpLqV2BL6PVqVvPS7vgOi99x9L1dsEofys886G6Kvfe3rIPqbv/PbXHS7jS9ncZLMLzHvuou2pP7gD/6IK9bHt6td3GtLvFPGl6er1Ceui9gSBj1qRY3UWzN+0/jqn34VRD9x1dUQfd973w3RHr4AjYgc7/XkJI2nC3jFitTb1aqifjLDig37qRceqJGYzFLRvN/LG3E8NKxSX+rii/TIcXOykSp6cZGG8qqiMTE15OE1wa37iJifp91g7ugy7BOK1KbrFE50N2+ihd75550H0auvvpqLPuWUHRC94JILIHroAO3ewJo6UpPkiEQaFT8d2IiiX5uLmj8W5o+twfyxupOaP1ZPG1tm/thI5o/VmT9Wd/Lyx0Yuflcmku3eNXLZHhGxceMG88fqzB+rM3+s7pHPH1tm/lid+WN15o+NKPqLMn8sIkbmj6340PyxEcwfqzN/rO5k5I912+34AvLHlqyVRWb+WJ35Y3Xmj410wvljK3vYkblk5o/VmT9Wd8L5Y8t/seb/mj82ivljdQ97/tjyh8edP3bsJ+aP1Zk/VnfPntEbp59PKsOOcGT+2MoPzR+rM39sJJivnlj+2NLn5o/VmT9Wl8wfazYT80l4l27+WJ35Y3WPofyx48i2lCRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkvRY5w+QSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSeuIP0AmSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkrSP+AJkkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZK0jvgDZJIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSdI64g+QSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSeuIP0AmSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkrSPNM87cteqjcljAAffvuRei4+0ORM97xrO5Nvd95hMQ3XP4IETvmaFqLxYlROcxGhGtYg6iRTGEKF/PvNHgoquqosOzDKIZHRpln6odEWVJl6WJNS+CTl5UdOYs6EtFRN7Eovs9iLZyOjnfyohotpsQLYOueFFQS1ipPdZd9cnObVv4kC0bVx9yjEYLgvOLCxCdntjIRR88RA9mntGvHCbaWJOudkRMTW2A6H6sWLHYh2iFbZAbcEQM8V73+1R0uz0G0QyvZ0QE9maD3iJEK+ys+GZFxPj4OEQPHzkK0XmsWDk/gGi7Rc07Ig7jBS/LCYiOT03yyR/8y7W/fn9hdKe0sEAjy0RO93pQUm+TvFkltpPFHvWi7373uyFaYDcYEQ3sjg4eOQzRZqMN0dnZWS661aEpyvxRaoT/58//FKLDIQ55qTnGRxqXQ3Rigp6sIT627//gB7nohUX61r/2q78O0W6HbsfkOD1ZEbFz5ykQ5ckPzgLiUx//JERbqR7jhptvWPqPU0d9ODW1MeK+5c+npo4ZImcOH4YzLy5SVxYR3Un61gsLdLP+9m//DqJvesPrIfo1L/parthHr74WojxYf83XfB1Et23bxkXPHtwH0XJA1+Rjl38EorfedCMX3Zmg/n//4UMQfdNb3wZR7qLL1HQxw8n/ALujNj48C715LvrAwQcgWgWdfDiksTg5SS4LGhMzXJVMrd0dTY1P8MRqbo5G6ojoYS+aN+ns1FVF3Hr9DVx0F3vCTT2a3l+DE91zNm3iojeP4WR1SC18FqeL5+6goeHx2xM9xiHshOf71AlXGV3Q2SqxSPyK88+D6JGjNA3e26J2UpV0t1rNxKA2HNK3vvTSSyF6/Y03QbSH08WIaODTdeAArdSmpqYgesr2HVz0vffcB9GNG2gJ2WjgBW/QkLdpU2rhfHQGop+59jqInnr6aRD9hdf8Ahf9u7/7exC9by+Ntk972tMg+tKXfjcX/YM/9AMQ/Z8v/U6IXnvtNRB96lOfCtHf/70/4oq96lWvguiP/8RP4rE/BVGex0bE+DjNMSpcO/CTxVtS8/M0ZkVqURO45j2KHV2BfVFENHD7cmKS+oT7S6r2LTiZjIj+GPX/91dY8wXc7x2j5dJV91NPFRHcjoqSik6tyRObrqn9BDqcq/0F7GjhK4n774foH/7RMU/9nvih5f9+9atf/Qu/cEw/eejQMZP5LPUPtPAm4ac+dTVEP/npT0E0uT793u+lbnYjjpiBC4ddu3Zz0b0+dRq333EbRHmh18hpPB3gJl5EXP1JuqT/E6/Yv//zuyCaJx6e1NOB29hTE2vOQKYmNjTa1BLy1LuSNk5Rdraoo9sY9Nyds0jde0RcsO10iHZwu2APzkDOOv9CLvotN9wM0a/eRHuA+/bR2vb8XfSlqirVYxQ0Ty5wM61q0SueBw7u56I/i98rIr70S7901McPbksWqadgLbxTEfjsvPKVr4To+RdeDNFqmKjxfffQ6+yJCdq95I24v/s72oiLiKlxWjifg0vIzVuoF929a/U7/ZWSMzp+MFk24GX18ZyrWt35nHP22fDnPGI2WvRkBU9fIqZxG+S8i86B6JlnfQ9EL338JVhyvPvd74HoFR+ktwY/9mpa0dyQ2vnkRX23TZf0HW+mnc8XpJbGszOHIfrxGXrLsw+HPJ4Il6m9nZXy2uu5Jk5lM3wASpy9R0Qb9zZbHcxM4K1mjlaJeVcH36nxyTmXI0tdk/otWKnCCQxvl+WpzTTOM5naSHubizyVxbkkz+gi1Qj7/CKS37jV5ifmj4X5Y2v9gfljNSc1f6yeNrbM/LGRzB8bwfyxetEnLX+sMeqRX3kd1socWwqZP1Zn/lid+WN1j0z+2Eij8sce/N9ul8Zi88fqzB8bETV/bJSTlD8WESMnVssfmj82kvljdeaP1Z2c/LEsEvljn1n+rzwffU/NH6szf6zO/LGRTjh/bKWRuWTmj9WZP1Z3XPljS1Zmka3KGVv5v+aPjWT+WN3Dnj+2/OHx5o+t+sT8sTrzx+qOTR67fNXnJ5w5tsT8sTrzx9b4ozX7nBPLH1v63PyxOvPH6pL5Y3memJh11t5ZNX+szvyxER47+WOplZskSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZKk/0b8ATJJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRpHfEHyCRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkqR1xB8gkyRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJktYRf4BMkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJWkf8ATJJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRpHWkePHRk1UdjkxNwwJbNmyF62223Q/SJl1zCtbmnMQXRPTN3Q3R+OIToYm8RooOq5Ir1BxVF+3TyVrsJ0fmFARfdyjr8B2CI16TTafHhC/0+RKuqAdG8Qb9tl2d0PbPU7+LRwREZFj0cFhAti0RLyDI6eYbfq6jodhzzl8XqVjEY9viQo7PzEO122xBtYPtf7NGZIyKLDKLNBrX/1hi1oqpM3I6ZIwchOjU2BtEip2pPTFFf1GxyG4zFIf3BwjzfTapYjtGI6A/psZ07ehSinQb1Cd1moujh/CxEt26iS9rGdjKPHXhU9FBHRIE9Yf1xW2msOc4nX7Zl0/a1QuPjo5vicEgtfH6RbmWBndVEmxp/RIzhH6Q6Qu4GEx14FnSvBwt0sxoTiWGL9XFQa2TUwhcX6bHNc+rKoqKvHBH9BTr52BjNynrYnwwiMe5k+K2Lgh6u+fkFiC7O42MbsWGKvhcP1hkOW2VFX2pubo4rNjc7ois7cP++pf+49HEXR9y4/Pm5Z5258s8mxuhed8epG4yIBw7TgDs8RB34977seyD65MueCNHXveX/Yr3iW77zOyF6w9+/E6J/+/f/ANFnPOMZXPQ5u06D6Pvf/R6I7rntVog+7qKLueirr74aot/5Xd8N0f37DkD0o1deDtEDB+jYiGjhRPesM8+B6PO/8rkQvXMPLbUi4vGPeyJE/+bNb4Fos0PjzmZcYEZEu0WHlxV17xs2TEKoxNlmd6zLFZsd1WMsw5VBbAnq6B7ATjIiclwS/fN990K0jevT/Aj1NhGxZ476/7KkoScLGjE7GzdC9AacGkXEMKclT6dNo0OF4865mxJNdLBxGqITE3Q3qyZdk7lZGrYmpzZgvWI4oOF4dobu9Y6tWyF62113cdENXga2ErMjwPOTiBifoAl8OcCGlFGf0OvRvOtHfuRHsF7RbFEjbDWpAV9z9ach+rVf99Vc9FOe8hSIfuhDH4Tom978Boq+5Y1c9HBAq63f/u3fgugZu3ZD9OILL4Lon/yfP+aKvec974MoLxIL7DFa7cQmXpVaboESO/8mrkp4hzAiFhcTE/hmZ81W2sCHutVKjKcZ7s/sxg2BS3dTO7lh/34ueuc2mm2+5cbPQfQZbZreT3Vp9TqPa8CI2LJ9G50cB6brhtSAL783MeXjZpZY8uPManGQ+NasxGXgYO3HdlAM5uaPGU9X/e/8fGLns6romvRwq2HXrl0QPXKYNjYjdTsef+kTIfq+970XonekhvJ/+/d/hei3/b/fBtEKb9bmzVsguoijbUR86PKPQPQDl38IonkDJ4SJ7d7IWzzbpKf+7HPOi4iI6+qhx196yZ130IPZaiV2w7KgC55V9NjeNaBB7dDUNBd9/f7DEF0YUMX4yercSiv6iBhiM3vnUdz8GVtzkRgRV+5f/cJ0pUbqhUUfd++zBg1qzZzm5z2cgUREs0g04ia20oio1ti2bab2e3s9Gnp49Xr+PE1Rtn+OWsKhPi1OI2I7rraKeVwQ9elW3vDRK7josk3zn/e/9wMQzfFFzBDbWNXAbeqIEneDeZd7MKQGXPBS61iPe9zjVles5Bk4T4MTC0zuJ1/9qldCtJHTg7NhG+1j/PVf/hVXjF9d4b5RXHEFNcIPXkHDZaR2tDZN0m5Dgd37rYcPc9E0mqaWxvw6m3vJPD+Of5MvK1c/KUM8uoFtrIG7YRHRx5bQHuI+Hp6Zdz7zLDXHwB6Do6yBW9wRUQ5P/OQ8hW43uA1GF9+fzs3S2DE5Ric/BafBN91+J1esLHGllmMU35pNb1y9wDR/LMwfW4P5YyNOfjLzx2CL0vyxkcwfqzN/rO7k5Y9t2rSp/uHKRLLx8TW/1/j4mPljdeaP1Zk/VvfI548tG5U/9uD/nn8+pe6YP1Zn/lid+WMjnaT8sVhjF2X5Q/PHRjJ/rM78sbpHMX9syVpZZOaP1Zk/Vmf+2Ojzn2j+2Eojc8nMH6szf2zEuU80f2wJpJCZPzaS+WMjDn8Y8sdiZQrZ4y/9/Muy480fW/WJ+WN15o/VnbFGE11KKlsrc+zzfzOq81/5ofljdeaPjVRPG3uwYieUP7b0ufljdeaP1SXzx+o5Y6vAi1/zx46X+WN1X1T5Y8eRbSlJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiTpsc4fIJMkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZLWEX+ATJIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSVpH/AEySZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkaR3xB8gkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZKkdcQfIJMkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZLWEX+ATJIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSVpHmuedc/aqj/bcuxcOOLQwD9EHjhyF6I2338q1OeO8iyB65ac+B9GFXh+igyKDaJU3uGJ5hb/UhicvypLOnKd+Aw6rNhzSt2406OCiKLjkDOtWlhUdm1G0yuiKleWQK9ZsNiFaFHR4ntGX+vJnPouLHpZ00bqdDkSzoGNvjO9f/u/f/K1fXxXlakfE4SOHITo/twjR226/BaLXfO4aLrrRproNBj2ILhylm8XNOyIyfDyynBrhEJvZ7MF9dGZswBGR4W87DofUEjrYitrtFhcdFZ280aBnp9Wk77VtapxL3tihP8gK6gknW1T0/OQYRId0nyMiFuaoYnlO14Rvx7HnWfOmHzhwaOTn55xxKpzwG77x6yF68OABiF7+4Q9DNCIaTXp2mtj5c2fU7ibaydwCPdd96jBiUFErysa6XPQAR4eqpEaYNeh7Zzkd2x8kRttmqw3R3jx14O02HdssEz3GYn8A0eGAbtbEON3rZAfexKZUlDipw4bSDLomE2OTXLEjM0fqHw6Hn297Bw4e8ziv+t+iwMkPTggjYtPGjRA9dHgWokO8lY0mtYTzzz2LK/ae932ITo4jy2CRKvbhD9KZI+KD2JDmjx6EaAdHh09++mouelhQzf/qr/6ajsVnp9miK9ZtJ8adXp/6hFtuuQmiz3/+cyE6Pb2Ji37Sky6D6CVPfhJE3/zav4To5s2Jom+77W6I8rMF07Ysy3gttmFyA1fslpvoggeutp7QpGHrjiOjJw/LXnj2+RC9t8R+csdOiB7GNhYRGzpU82Ebo7iouXOeOjq+nhHR69Oj18PRNsdR6bpITDdzrDn1JhELczQ/aeFOxeQYTZIj4oHZEYPasqKi75Xj2MFL8uQfZNgSeKdiYnKCi+4t8tYQnbzZoHaC88H4pV/8RaxX/CWOHa997Wsh+ppfeA1Ezzxr9bbeKh2cMV522ZMh+sA+Whp3UsPWPffcA9G7774TojfeeCNE//RP/xSiYxOJdrJzJ/WElz3pCRDdt28/RMvUlK/VpIvWatFTv7BA3fv+/VSxAwce4Ir1ewv8B9u3blsrVAQtiJI9Bk9WPzSkjeiP3Ueb2DnukETEcx93IUSfddbpEL3pJtrlvu+O2yG6o5vowA/fdz9Et+A8YeP2UyDK29SRmqyWiQ0xGllaeWJ9WvHhDTq8v/aCqN8ftFvtiAcbUvvYWUFyh7yJw/Hzv/IrITpziNYsT3ki9TYRcfttt0H01puon/ymb/gGiL773e/mood9mqK87a1vg+jtd9wB0fPPuwCiczwhjMhxB+aNb3wjRM87+zyIPutZifcCL/wG2qnLc9ptuPwjH42Ika++Lv/IR886m1blFc7ZIiLHJtrG6f2FuLfT3kTbFJF6j9PGm1Xilmyvx5PoaOPrp/1z1JC6GzfTmRdwQOQZYcTb8EXMkN8k9qk7ylOrkqqT6Gbb3cQEqShGz1LGx2gyGRFtvJv9Id3NF55BU9kDRw9DdENnmqoVMZynuzkYUgOePm3NmU9E3IctMCI28KYrzp2yoFs5j9dzI47jETGDrxV27qIpyr81aB576qn0siPimI2dO+9cvRCYxHdA/EpuI+6pRmo74UUNKvqCjfTg3HfgMERvS83Ad56xC6If3ktrseFVH4Po07NE2sMB3L2ZO0rJHqedvh2it91Fq7yIuB9no/xaocC0h9Sb9MQ0+Nhq1PoHfOPMu8bPjMoAACAASURBVBzDxCvlaLcxiQX7/xLzFjotat4VjkrxBSxvQWKOjUkmkXrqeUe3wvfRnDwQEXdeR224/QAt9LatvWqOiH97579AdN8h2sSLiAznhBXmMlX4dnV/bWg475wXrPrE/LE688fqzB+rO4H8MU4bW2b+2Ejmj41g/ljNycsfG9mBr/xwVebYGSv++8CBQ+aP1Zk/Vmf+WN0jnz+2zPyxESc3f6x+rPljNV+c+WORGsrNHxvJ/LERh5s/dpx/cGL5Y0ufJ/PHlrRbo+tv/lid+WN15o+NdML5YyuN7BzMH6szf2zE4SeaP7YEUsjMHxvJ/LG6h54/FsemkC1/eLz5Y6s+MX+szvyxurWSx5Y+XytzbMnI/LGVH5o/Vmf+2AoPbunU08aWnVj+2NLn5o/VmT82SmIaPCJnbFXpa9fN/LE688fqHkP5Y6nsJUmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEn/jfgDZJIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSdI64g+QSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSeuIP0AmSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkrSPNR7sCklb77Lf8z0eyuEmMfukjVAvpZHniI1LKxf/wL49IOZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZL0MMgf7QpIkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJeuT4A2TSF4VL3/7Xj3YVJD38PvWCZz7aVZAkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZKk1Zqbt25d9dHpu8+EAxqTkxBtt8ch+ubX/znXJstaEG01uxAdVA2I9hfnsOTED7GVGC0wPhz2IFpVFRc9LAcQbTWaEM0b9L3Kgr9WtHO6pNGk6GBQQLQoKIq1jojIMrpoWZZh0UOIDkuqWES0O9REi4oO52ov9qidSHqMgg7p1J074cC5mUMQPWPXZog+9RXfx7W69cYbKIyDw8RYG6IZDg0RUVXUxTdbdHgz79CZS+reIyIaNDrQrYqIjE5e4hVrZHTFImJ+cQGirSZ96wP7qZ3MLSxy0TffcidEFwc0bC0s0LA1c/QoF41DYpQcHdJoOzZB08XNDXp2ImLr9m3/9Z/3LH94zrnnLv3HYGF+5R9Xx1a0xEZYVtjGIip89lpNmvL1Szr54iJNJj/16c9wxZ70dPohxUEchOgll10M0U9ecxMX3Z3fD9Gq36eDhxhNKfs8gee7SV3ZcEC3Yx6n0BHRaNDJ2y1qJ697/eshOsCKRcT+fXQ7Lrr4cRCtKmred95xFxf9gfdfDlHuv5/45MuO/eC9K0OdLs3tcxyVImLrtm0QxREv7p2izur8Dbu56P4kHf6Jz90C0S899VSItoeJRWI3py92Fw5qF25avfmw0vjMLESnpqa4Ygu4et0YNLQMcC12aH4eohGxMaeG1O/R6NDeuBGiH505AtHd3PojSuz/W5up6JkFupU5Xs+I6PVoEsKr8m6L5k5PfepTuej//PgnIXoEL2kbn3revfnlX/0Vrli/R7fjRS96EUQvu+xJEP2NX/9VLnpiYgKi3S7NNp/33K+A6HiH9gAjYus2mno9+cn0vd773vdA9NnPeTZEP/u5z3HFXvJNL4Ho5Aba+fzt3/wtiO4/eICL3oC92Vh3DKJ79t4L0RzXYp0O3eiIOHx4H//Bpi2b1qzYnnvWCsUXMMfgBdVLt9PC+fBRGjsWJzZwyXs/8hGInrvrLIhu7NCTNX/BRRAtcV80Iu6YmYFoCxcOd+Ey8OmXXspFfxQfn3JAHXgDm9kQO/+IaOKSp9Hi/d41J/9F0e+Oj0UcXv6kO37Mg5Z8OoZDqvkVH6WZKt/ra2+4novuNGmO8cJvoLHjHW//O4gOcX4eEd/ybd8K0RwnAg2clTXxSw2HiR6DF0Rba6+6VtowRX3Cn/zJ/+ai2/gi5ku+9GkQvfav3rRWaGbmcAQ17xyjEVHg7TiKLfyde2mVV/DeTeqt2QDvZtbAlpBqoq02Ltbw6N7R+yB60TRNku/G/jkievx0NGiiW+Jss9WmFhgRQ3w5FRGLuJ8WEXfcuWfk52NjiaILfK1WYRt+3X20OZloCAepAUdEAye6eU7fq7l/L0VTD2YfXzrzLl+O13MKn51Wat61A/cx9uOQVxQ0x+iktlCO+ePaFeh2aZeDn+q5OZoQRkS3S9O2a+fp8M/NHoYoD1udZuK9wN77aFu1hyef5nfKzdSLdsyaOKdDt2MC0x52n7aDS77nIH3ry2epEb5wjFZqV2I3OJNclazQqvUevPPfyOiCN/jNVESO2zst3O/FXbqo+N0VbmIvnQBixYBOnmMj5ISKiMhxyscXtMDxtExck/izP/pjiD7rTDr8lb/0sxD9yZe/EqJHe4nXGTne7CauO3i6eOTI6umN+WMRYf7YSOaP1Z28/LHAFLLUa8oYn6AdyEaHZilP2f4lEL3ssidz0Q2cZic2FPDR454wIprcRFEDB9wCx8QWDlsR0cZrMoa790VBj/x9uCsbEZ/61KcheufdtBy7/dbbqegHHuCiA1egnTY1wi0LWyDa4DGxRU9lpPYTmtjjJI5tjngwV34IvVGWmT82gvljdeaPjYg+QvljI5g/Vmf+2Cjmj632xZQ/doz/yh/7t5UfPve/kiXMHxvJ/LERJzd/rOZk5I81szwwf2w+/mn5v7dsHr2+MH+szvyxOvPHRjrh/LGVRs83zB+rMX9sxMlPNH9sCaSQmT82kvljdQ97/tjMzOH/+s/jyx9b9Yn5YyOYP1azVvLY0udrZY4tGZk/tvJD88fqzB8b/Tdrf/ETzR8rw/yxkcwfq0nmj03ge/aIaKzdgM0fqzN/rO4xlD+WmHNIesSc/6Y1MyyTCWQtzKHp4XDewnU77w2FCWSjmEBWl0gg234SE8g4MbTVpg36jRtpa+lJ73rf8n/f9JIX1v9g7uhhrpskSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkPSpSP2EoSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIk6b8Rf4BMkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJWkeaj3YFJEl6zDv/b//54T3h3ocQTXvOQzxe/01serQrIEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSpEdL/mhXQJIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSdIjxx8gkyTpRNz0khc+2lWQdNJd9YJnP9pVkCRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJevg1z9rUXfVRUfThgMb4OEXHpiH6wz/+Sq7NNZ/5JESf8cwvh+jFlz4Bor/1W78B0SzPuGL9QQHRssKDK/yVt1TRnVabzl3R4UVRQrSRJ35+rhzSt67wmuQZnTzHbz0cDrlieaLmFG136XoOijkuuqzoZjcaDSq604Ro1advXQVd7YjImlSxTqMF0WFBRbe7VO2IqPCCV9gI+VtVwY9WNDI6+aCk0zewYvhgxSDVRIs21bw3e5SKrqhik5s2cdHP/srnQTTLqGIVNu+Mu7KIFrb/KqNr2mxyM6NrgieOiGi2qP2X2Aw77TGItpudd8Y/J4qX9BjXbj3YuRXDYzqrvHXM/3ZK6jGe+6ynckFPePz5EL3wIope89nP0akz6gb37H0A6xVVcR9ETznrVDqYpl3RXTzCRU+MT9DhOA3oL8xD9OihxUTR3Y0QHRZ0eB40MmU4qA0GA65YiTPwTmf1yu6YY0uc/NAwHhHRxIG+wJpnOL1pthJj+dEjMxBt4dIgX3uplpdVidPFrZu2csV6/QWInnvO2RC95r77IXptlppt7jkM0caWDRDNKzp50U5M/qfb9GDP4Tz5nnmaBpdt6qw62IoiolroQXQi6Hvt6NCX2rKTOoSIuPfgAYh2mtTCJ1v02E6P0fUcxw4hIsYHtLdzzgb6Xv+Z0+0YFHu4aF5Z8JJ/WFJ049QUF71pyzREb7vtNohytScnJyH6zGc/E+sV3/LNL4Foo0FNdHySNuJ++Zd/hYs+Oktj4stf/nKI/tIv/RJE5+fpzBHRxR2YTqcD0Qq76Aw3nb7/B36AK/YbuElYYiPkrbY8T/SiC4t00XiPcKJLV+wgj7aJRXfMHU1MQoq1NwkbDbodJY47EVHgpO5d+2myOo2Tn/NxNyAijnZotnnl/n0Qfc70FogWFW5EZIkO/IKt9NRPY2e178C9EH3aHA0NEZHvp3nX7t07Ido7OgvRj48ntpXuxK3RAncvb7nl1pX/u/3Y0NTEMTd61f8Wqe1HvN5x6s7TIPqyl70MojMzdLUj4tpraaH3zS/+JohOTdJA38frGRGbpmkHstmiu3nfXnp2xrr02F5++eVcscVFWotxB/63f/cOiFb4KiQimk361otzVLHu57/1iMlwt9ut8HYMcUCMiAp70Q19miR/1WnbITqWmncNjtCi/r33UHf0gnN3QXTffXu56Mkxakgzk9SA33En7XLcOE/9ZIXr4oioBrj9jgN9htvcOAGJSM0nI+L++xL7P9dff8vIzyenaLiMiEGfNsSGPbpoL8Zr0sHJJL9njIh5fHe7ZfM2iC4M6NnJUzOrfEA37B9nDkH0LJzyFUNqokexBUbEfX3qrOYqerK6Je53Jd/TrNCeWN1meNwJ3GpLvlNu40bHkXmawOzGraGb994D0cTNiDh3I60xc7wdV+FabApzOSLiaJua2dEeLg0WqAEXZWJZMY9PR7NPl+39JX3rPu4QdnFZHRERK1pCfWjGbdXAwSHDzflIvUnPczp7llGUd4Oz9L9TyIPaib9xzlNjVsmTVT45dkf8Fj4injRN05vZBTr5e9/9LxD9jm+8GKKvfxNlSUVEWfCckCqW53TF6jvk5o+F+WNrMH+s7uTljwXu5pk/NpL5Y3Xmj404+cnMH1v6j5VZZD/1Uw+OdHnjmJr/Yzxn+b9/8Vd++eB+enF85ZVXQvSDV3wMojO4Ao2ITpN6Qh4dTj2FckWGRWJ10MEupcBtwMkNtJ7iN3oRMcBXqGeeQdtWrTZdkw1T9Jq+X9BuQ0RMjdN23BAPP+WUaYgmE1HOPJP2SXga0OtR9LPXYDpTxFc+5wUQrfCp33vffoheceV/QvS+fYmnY4gjTyJ/rGP+WI35YzXmj40486OUPxajVscrPzR/bCTzx+rMH6s7GfljS59D/tjKfn+tLDLzx+rMH6szf2ykE84fW2lkLpn5Y3Xmj9UdV/7YkpVpMZBCZv7YSOaP1T0c+WOxMoVs+cPjzR9b9Yn5Y3Xmj9WtlTy29PlamWNLRuaPrfzQ/LERf2D+2Cj1tLFlJ5o/loX5Y6OYP1aXzh9LzY6oIzZ/rB41f6zmMZQ/lrg9kiRpLS/6+IchuiqBbJWHkkB2zfXXQdQEspEerQSy5DUZ69JLC04gY8lMlAbu+ZpAJkmSJEmSJEmSJEmSJEmSJEmSJEmSJEmS9N/YF/oT45IkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZL+G/AHyCRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkqR1xB8gkyRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJktYRf4BMkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJWkeaj3YFJEmSJEmSJEmSJEmSJEmS1rXr/sf3PtpVkCRJkiRJkiRJkiRJ0vqSP9oVkCRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkvTIaba6q3+DLCtacMDw6EE639gUBPO8wbV5wpOeCtELzn8cRN/7gQ9AdNP0NEQPHZ7BekVVUTR7CD/jVpYl/0FR0R+UBZad0bFZqugSi86D7mZRFlR0llHBOV7uiDLo5JHTyQeDAUQbWaKJltgU8FtFf5GKbjbpVhYFnzuqgq5Jnjch2srokS+GiXbSalHNS7wdGd7qMvGlE7qt9gkfWwTVLKcLFhGR4RdLPFn4dJRYsYhoNLhP4AaMt5Kfu4jgHh5bAjdw7qsqfKgjogi84Fix2YVZPDVGIxoNuibN9hhEn/0VXwnR5zz7eVhw4uHhUYuf+Sb2k1kz0YvyNeHOqt3G69mkYyOiiXXLcCzff2AfRG+44QaI3nrT3VyxW2+9jSqGDz130e2xRDfY7dI1GQ6HdHK8HSWOShHx4Y9+HKJPe+pTIDo3twDRS594CUSLT9/IFauwT7j37j0r/7fTPGY8mJjYDMdmeWK+OKyo6JmZIxDdfuopEN1z1z0QPWv3Fq5YVVFLyHOc8jUegOhTX3geF53hNRkW1P/niQl6op8c4tizuLgI0QMPHILoNdd/DqIzh/pcsRlq/lEM6Xa0u9QnDFMTr3sX6Fu3mzQ9auGsLMPOPyJuvf0OOnm3A9H77j+mEZ66OkTtpJ0a1O6/lx6uYUF3syypf6+GdLUjooN3c9CjwzstuuDjU5NcdIELonabTp4Y1Jq8SEz0oiXerxmcRc8Me3TmmcTt6E6OQ7TiFf38UYiO4ZP1ycE8Vyx27oTgkUX61kNc0Z9z1plc8nXXXwPRpzyFBvomPpi/+3u/x0VvmKBdqWf82JdCdHrzNETHOl2IPv1LvwzrFePjExA9dIjGjv0H90O0iRPsiDj/Yhpw77mHurJv+eaXQPQZz3gGF73/4AGI7r1nLx5L1+S8c+lLnXHGGVyxH/mRH4Xo3CwNt802PZiv+4s/56J3nU51+9Iv+RKIvv3v/i9EK5y9ZIl1XkyMjxxPH+woYJpc4dAwGNBkMiKaDRo77iuoE35gSKPtLUcPc9HdDo16vR61hDfvuw+ivDdT4pwtIhptXMrhBmOOG4yvu+cuLnq+TYdfd5BWJa0O3cq9C4mJbmBL6PB8cu3NtCzLmsfOT1b9bwunRql6xb6990L0LW98A0QHONpGxHd++7fRyd/8Johu2b4douefl1iLTeCwNTFBO1rDPn2vXaeeBtG3veVvuGK8hT45uQGiOV7wKrVI5FXkJ676GEQ3bJiOiIgRC+QNG6Yz7EV52z8isel664AOv2Mfvewb3kXNO1IbjAUueT7aoJlV+xx6FRgRifdLXTr5k3fsgmijRQP9wf20QxgR+w/T9H7mMPWiJTbRItUSeN0dEZ12opHPzs6N/PzUHdv4wJtuoW89GNBQfuWQarVhC/VFT0ntgd+H058H+rSeardoq4H3RSO1Pb+I07bxQ/RgnrlxIx07SVcsIqqMRrX3j9OzU+CDVxSJV1crDfurJzNHZvA1PXY3ExOpfQycen31aWdCtLdA7eSinTsg2k1tKy3M46Ie16d9vCZ5qkPoYdWGY7jz06Gn4959iX5yfJoG6wb2dYu4sPjXWeqLAkelVeoLHH5rwFsoWZFoCVmT6rawQKsSXm21uzRnS8IXRAmpBJjE+pQlttrwWN6cjIgJ3OVrTlAv+pVPpj7hmo/dDNFd04nl0s37qegeTvl4HltfTJk/FuaPrXVy88fqRT/c+WPnveV1N3/793Ghkh4rvvw//uFgPPiKBHKlDh2eMX+szvyxERUzf6zmizZ/bHqz+WOrmT9WZ/5Y3SOZP1Yzsp18/kPzx0Yyf6zO/LG6hy9/7EPL/3XJxY8PzB/7tpc/+N+fvOoTI//G/LE688fqzB9b4WHIH1tp5NsN88dGHG7+WM0J548tgRQy88dGMn9slIeePxYrU8iWPzze/LHVn5g/VmP+WN1ayWNLn6+VObZkZP7Yyg/NH6szf2yketrYshPMH8sjzB8bxfyxEVL5Y8lFDbw4MH+szvyxusdQ/thDSH2SJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmS9FiT+IVmSZIkSZIkSZIkSZIkSZIknQznveV1EdFs0r8mm/z37XP+x65zyhTN8J99Tv0bxdFqtfBwOjn/e9Jl4h+wj9ba/9x0RDQaiX9TGhRBNeOrHakLXuG/HJzjPyOf/Ce4+VtniX/ZmSpWRqIRdnL6N9Xh3waPUf+68jFFYyOshgOuWLNF1yTHiiVaf+KSSJIkSZIkSZIkSZL0GJDKg5AkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZL03wj9M2uSJEmSRrrsPz78hf/xYnyA/+BTDyGqx5CphxCNiNMetooct4sT8dsfkVqM8GWJ+F8/EpWQJEmSJEmSJEmSJEmSJEmSJEmSJEmSpMeg/NGugCRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkqRHTvPRroAkSZL02PCpFzzrsv/48KNdC0kP1b3f8z8f7SpIkiRJkiRJkiRJktavD33lix7tKujh82UUzFJHn/vwVeQxpMDolfHak1TuKQ/t8B0PTy0kSZIkSZIkSZKkLy75o10BSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSY+c5rC3uOqjxYL+saXJiU0QHcwfhGijM8G1abTHINrttCD6/Od9BUQ/8bGPQnQYJVds/8HDEM2y5D9PtfaxVeIPij7VLW/gwXjyYsD/fFTkTTp71qBfr+sEHVvgv1zVaNCNjtTP5pX4rTt5E6KzZZ+Lbne7WDbdrLKkdlJVFG21Etek1+tBtBEDijbwRqea93A4hGhVcROnm9ls0s2KiBJvdpbhs5M/pKIZXzS+oE2sWH+Q6KyyJp2+KOhmNfGRzyvubiKwT2jg9yrx2eHrWTaSPTD9QaPVoUML6qyyVNGploCH59i829QnVFjtiCgSDyYei11wOaTeJiJafM1KqnnBZafw7cA+OFoNaieXPuFJGL0M65WoWKvRhmhZ0kPNI3WkesJGg3rCDGcwqc4/qoKe+qmpKYh+2bNoujjo01D++CfcyhW76aabIfrB/kJE3PFdLx4ZvfvOO+HYjVNU7YjoD1bPyVc6cuQwRCt8ds4/7wKI4q2IiMgyaicbp+lm8UhdVYnOamKcLtrUJK0szjxjF0R3nLKVi2536anniVk1pO9V4QQ92c0VBU35eD7ZW6CnY2Fhjos+dQf9G66bNm+GaImt6E/+959x0bffcwiie/Ychugznv70kZ8v3WEetorUoLYwPwvRJnbC1ZBuZXd8kosucaxvdWjs6HSpAS/0F7joTpMO50l0E+ddi/NUdJnqMSKn7mx6apqKXpyHaIXLioho4Qz8yGE6+cQE9aKTU9QSBoPE6nVukS5pr0eXtNOhm9XDMSsiJrrUgfMMpMLr3WlS846ISZxF7N27F6ITY+MQ3YHd4Gtf+xdcsfvuuw+ivAJ93CWPg2hybn/jzTdB9NrrboDooE/3+p3vfCcX/cpX/SRE/+hP/giiGyY3QJRH6ic/6Slcsfk5ejqe+axnQHTLtm0Q/bEffQUX/eY3vQGi55xzFkRf8WM/AdGf/bmfg+jR2SNcsYJXRBHl2gtY3sdIbn1y3YoBLXmmJqidFLhhFRFlTn/A+12JBSaW20rtfPZwOC5xBj/WpK6saifmmwvj9HAt4KSuyfc6S2wrVXiv2y3q/8fH1hx3xsfGhv1jzrzqf5OrV9zGjj6uQG+77Q48cWJ684uv+RWIlrjuOONc6k/mFxIdeI4tfDikb82ziBw353mSEKktRJbnuFxKzayyimo+NkkzkPnFNVc0rTzr4mZZsivLcYPxSVvpdd5ZeCsnMzo2Iu7ddz9Et55/IUQH2FN+5ugMF31xCxcec0epaGxmBS61ZlKLkgrnsueccw5Eb7zxeojyHmBEZImXhbFp0zT/wTlnnTHy817vAB94zXX7IdrCsWPYo+XS/ffTFPpf8JVxRJyykdrwXXvpe51/ztkQnVh73Fkyk9FQvmWKBuvb8cG8KvAVD87eI6KJ66nNGW21lTz5OZ43DlWt4+KFXgffhvBYHBHNceox3n7/vRDNBrR7M8CNowobf6SWga0Fups5bpJUg8Tt6GOH0cadz0ncYBzkiQezPU+Hn4EtPMtpjsFzhGQveswf1y8vvuLnt6v8Fj4iKqxbMzvxF9bDiq52OzDnISIwf6aBMxB+dVsOE000wxaeSF3AsTiZ9jA+TXtxX/M/XgTRmYO0iT2HQ94pmxLPToP3y3gtxilDxeqw+WNh/thaJzd/rMb8sTrzx0YVbf5YPWj+WDzng+/64HO+lg+R9Fhxx3e9ePMpx3xy5Ai9+brqE5/kE17+0Ssgav5Y3UnNH+uO01be1MaNEN26hU5+/oXnQvSLO3/s2yH6KOaPTY1TS+Al5Mj8seUPzR8bfbj5YzXmj9WdjPyxpRElmT+2ZK0sMvPH6swfqzN/bKQTzx9badQ2qPljdeaP1Z1w/tgSSCEzf2wk88fqHvb8sdZ/1ed488dWfWL+2Ajmj9WslTy29PlamWNLRuaP7dixffm/zR+rM39s9N+s3V+dWP7Y0ufmj40o2vyxEdHU0qBKLWrWnoSbPzbiSPPHah5D+WMP6bc8JEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJD22PKR/pU2SJEmSJEmSJEmSJEmSJEmSxJ7zwXct/zf/8+BZTv8gdd6k9O+qoH8bPCKqKvGvi1PROf3T1yX/K/MRrVbiH/EGjewh/avb/A+bV/ivniduVpMrlvgH1blirUYbomU5pDM3EleM72ajQc0sw39QPdnGqoKaytTUFEQnJ8YgOuj3IXrjzbdyxW666WaIfvDDH+LDJUmSJEmSJEmSpMeih/QuVpIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSdJjiz9AJkmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJK0j/gCZJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmStI74A2SSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEnSOtJsb5xc9VGnyOCAYlhAtF32IJrNL3JthocGEB1EG6L9QQnRH3rZ90D07/7937lin/7M5yDaO9CHaFVQxZLKig7Po0lFV3Sz8maDi84qkrbuBwAAIABJREFUihZD+tZZCytW4qkrjEZU+AclXu+8S60o7yeuSY5F5zk9O8OgaIU3uizpVkZEp03fa1jg4Q36IcJmg25lpGrewsP7/SFEy0i0hHaL7leB3zrL6eRZht0gfuWIwHNHYEsoscdoNOnYiCgTDwA2QuzeM+4RIsoBnhwPL/jJwibayBOPbYUXfDjEPrZKXPBE0Q1+9OixLbEB450M/E4REa2cHky+onw7kh14if1/s4kdTkVFV5HoJ1stuuCJimMDzvmSlKkfe8XjuV45f6nUDKQqua+jLpqrxr1oROTYzo4enYXo7Nw8RIcDmp+csnMHV2zbqfQHX/6cZ0G0wWMHj8WpQY1x589P1ninyydPDPQ4A2m36OR5p8NFDxaPQPT+++6D6Hve/R8QffPfvJWL7s3PQbSPy6UmDtaTUxshmmwGrYwuWh+bGU/qzjh9JxfdxLvZ6Y5D9JTdp0P0m7/lW7noz117G0Tf9Dd/D9Efe8WPQfSnX/WTED0Tqx0Rz3/+8yB6+um7IXrKabsgmpyBcDe7sEC96EfeT0/HBReez0VPTdC9HuCyZTikkeX2226H6Kc/TUvyiJg5cpTCGVVs4/TqXZGVWri2jYhmE3vCbovqFRSd71NfFJEY6Cen6LGdm6fx9NCR/RAdHxvjom+88XqIZjjxarep2ueeew4XvXF6A0Tvv38vRFttfLIW6XY0Uxss3S59rwqfep5CLy7S5CciOqm6AZ5FJJafEb/5m78J0YnxCYi2WtTMiiFdk49e8TGuWIkT3as++XGIdjtUsWY70WPwzfiN36IrVhb0rc8+6wyIzszMYMlxxmmnjfr4g8v/NbX2/bp+H83KnvOsZ3PRUVIb5maWZXRF79tHXVlElDipG2/RkJdnJ74+zXkNGVEN6A8msHuvcL9gcoq+VEQcOnwAoq0mVazXp1uZ/NYFziIKnEVc+9lrVv7v044NdVrHjLar/red6iQbuCFQ4XA8HNC7kmTvXGD/z9uPxSK9Zyn6FI2IAXY4TVy2TE7SWNzGJWQfW1Gkdi9z3APkJhqpfQxuojzRzdZ+MLM8azfoevImdkT0egsQvRz7/w9jtfNG4ppUOJXdPkNzJ24J3dTtePch+l45797zuXFkSb/qw5M38F73+tRjtFNzjOQ/N3X0KO2xRMS+fftGfn7J40dOEh40GH4aos0mDVtPwGrv3EE7FdwXRcRijy7p2Y9/PERbA+onhzgNiIgu/sHpW7dANMfO/5M4j22ldvkGferK5hdpkTjZptl7YmP/WPV3Hw3sEwa439vCJWRElLgC/b7TaPemmqMHZ36WNiIauH8SEYOcOpWP7D8E0SdumYbobZ1E0QvYw99w5z0Q3VfQ7WimXtgtLFKuyHXY/2e4cOBlNW/drD5V7c7wkp/X7Ek5vrBrNWk3OMORpZHTSD0s+AVQYgJf4dSoibcj8aYkosKWwIvEBlY7byU68IvO2gbR4aEHIHr7nfdC9NM305e6a3+iFfX5dTY+1EOc29ff+po/FuaPrcH8sRF/YP5YjfljdeaPjTi5+WN15o/VmD824nA+1Pyxmkc4f+zN8Q/L//26v3w9HGv+WJ35Y3Xmj430COePtf5rW978sZHMH6szf6zuZOSPtdudSOSP3bz8X2eeOfoRM3/seJk/Vmf+WB3njz1uxX+PziUzf6x+uPlj9ejx5I8tWZlFBilk5o+NZP5Y3cOeP7b84fHmj636xPyxOvPH6tZKHlv6fK3MsSXL+WMrh9Xdux7cQDN/rM78sZHglceJ5Y8tfW7+WJ35YyMqlsofS734pT7c/LE688fqHkP5Y6mXmpIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZL+G/EHyCRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkqR1xB8gkyRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJktYRf4BMkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJWkf8ATJJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRpHfEHyCRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkqR1xB8gkyRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJktaRZlmWqz9qNOGABp6u6C9CtN/rJWqT0+mzjH4uLRsOqWIzsxD9phd/M1ds89btEP3bt/8tHVxUEKyGBRfd6rYg2sgziPYGVHSjSTc6IophH6LNJt6sEm9WrG51x5RbJK5Js0VFl31qZr15KrrZ4AYekdEfFMWADs35glPFGg1qBhFRDqj9j7XaEO0PqNpFRWeOiEZO95rvZpZRA26kbkeOPUZV4cnxdlQZPTtZSWeOiKzCw3O61xW2MW4nEdHADjy44g0K59gDR+puVlh2VhuJvnB5qp00sOaJip1IjY45OxjgmNhoJbpoOjZV8RIfzALvRjvVElhV0dmHA+yimziypCo2wH6SGzAPecUQR9t2oolmJR1e4hXjL51jtSMix74u54cam3f64cGxI3B6k+OxrZyGvAKvdkQ02yc+OgwG9GRxK4rEhDEy/NZ5i6I8NCz0aRoQEY0GnXy4SF1Zv4/TgAVaOETEsKDHdsP0KRD9pm/5Toi++CXfxkVn2IibeE1KHlnwRuep+TkPLXyzeKKbnAY3O1S3rKJ7ffjQAYhu3nEqF31h0HP9LS/5Joj+6f/5Y4j2F+YgesVHLueKHZ05AtG/ffv/hegCtv+xsXEuesPGaYjOztP32jY9CdG777mbi95xCj16UxumIXrKjh0QPe/8CyF65tkXYL2i1e5QtJVYTwEeECNigB1pjnPs3sICRFvYJ8zjjY6IRpOK3nPPPRC96YZbIXrN9ddx0btOp+e6zcMWTgPGul0uuhzQPkaFuxzf8a3fCtEhPrb/9E//iPWKzeN0N0vcGirmqLepUkP5sEMXrcKpbI4z8MVeYijPsRE2cM3ewWP7uGgZlolrErgC5TGx4O1HXk1FTExQD3/04GGITk1uhOjcHPUnOa9OI4a4oxUR1doLAJ6fd7vUP0cE74zymmV8nAa19lii6PvvvR+iQ5zecBfdbtNzt2Fiiis216POqsCOjlc8jdSqpMSmMizpmjzhksfRsbgkj4i5edq9P/300yB63bXXrvzfpx0b2r5t68po89iB5uD+/Vyx3TioTU9vgeg9e/ZCdBFvZUQ0cc3fz/CSZnSz8tQGY45Tp26HHq4uzsoGfeqspsYTj+089nWB/X8bJ4QFLj8jtXtZYS86WFyz2oPFhRd81VfBsc3UIrGD36vXo4rVXw6ulBrTEivQbncMoryxPxwmRiWe/POLSN7RqvCaJLcfsxzfBmLZvHCoUq8khoPE69f5ucTyYf/B0XPOqcnEWmzIL5jwfcc/bKARszl7GKJPxGYQEVcdoVn0BafS2rbilzipF7tb8cldwA5nFl9xLvLuemLGF63OBJ18ga5Yp6Cb1cE91VXGa8u66Sma6GY4IUy+Uy4wteGt99OEsD3Elzh4O6qj81yxMRyOZ7AVfWKRnrtp2kiLiNg3Qx3Cxo10OyZwQlikno5mkyo3xLvJx/b7PLNKPR4r1ZocNzNeGiRflXDNFjH3psF7VjjuNFL/TiEvb3kZyHMMjkZEC7sUnieUuCJK7vK1cRb94Xf9C0SrTadDdOupuyE6tXkbV+z2/bRcuucQPdQZtrJ6MzF/LMwfW4P5YyOYP1Zj/tiIPzB/rMb8sTrzx+rMH6szf2zUoV+s+WO4djZ/rM78sTrzx0Z6hPPHlj80f2wk88fqzB+rOxn5Y0ufJ/PHlqyVRWb+2IjDzR+rMX9spBPOH1tpZC6Z+WN15o/VHVf+2JKVWWSrcsZW/q/5Y6P/wPyxmoc9f2z5w+PNH1v1ifljdeaP1a2VPLb0+VqZY0uW88f2H/Phg0Ow+WN15o+NVE8bW3Zi+WNLn5s/Vmf+2CipxyP1RgNamvljdeaP1T2G8sce0mtgSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSY8t/gCZJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmStI74A2SSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEnSOuIPkEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEnriD9AJkmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJK0j/gCZJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmStI74A2SSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEnSOtI8dOTgqo+6zTE4oJO36XxlBsGi3+falFFAtLH5VIh2p6hiza0lRI/Mz3LFsqyC6LAY4tF0bKPJJUdZ0DXJMrrgeVC0KuiaRESBNa8G9K3znE7ebDbo2CpRsarAZka1joWFBYi229i8IyIfQLCZ0S/6NTK+ldQUymHi2ckyuqSLvUWqGN4OutYREVEMsf1jE202WxCtSn6yYoBNJcO6082IKLB583MXEVlOLYErlmNvk7whBXdHOR2e+FqJikWDrykWHTn3k9hRlomKsRI7Or6VWOuI1IPJ/X8Tw0VJjR+H4oiIZk4Vq/DwYYldWep3Tbn9Z9wd4RXP8WZFRIXXpcTv1e/zoEY3KznaVtWJf6+Mz50aT4d4fFHQkJdo/6l+stmiAZe7We5suJvs4YAYEd2KKtZqURMt8OFpJB8PVGJDmu/RPIGLbuFYHBFlhdM2bKIVjh1VcnrTwHkCd2W8rMg7XHTgJGSInfAQp0btFn2p5BxjOMROGI/t4Sx5bjjPRedz1NdlQd+60aIF5hm7z+Giz9x9IUSf9rRnQbTEm1VhlNcsEdFsYf/PQ16Oj16V6Ooa2B0l5nSJVUlqGoHDFs8Yr7/mWoh+5upPQ3Tv3XuwWnH33XdDdIjVbnWoiSZnmy1sCQyX+9FoUh+7bctWPvl5F16ARVPZj7v0Iohe8oTHc9GDAQ5MDfpenW4Xo4k1+7ZtmyF64YXnQ/Tcc86C6OatOyA6Nk3lRsRzv/IrIdpf7EH04IF9EO2kOiserHsDKrqFo21yfZrhKvHAvv0Q3fcARa+75nqIDiMxDb79jrsgysvAhUWaJC8uJmab1YD+YLxDo8Pi/BGIbpyegui2U2hPNSLuuuN2/oPm2k/uqTvo5C/6hhfxmS++CDurIV3wEqdGd6S+1Om7zqCiBzQ7mp2lzeQmTvlanXGu2B23Uc2vvf4miPawEd573z1cdDGkjdOsQZ1wu03fepia/Le7NEXPh/hcw5Iny2PVQ33s/3bHE0uDFg49W7ZNQ3RxYQ6i111/Y6JobCrDh/B09BZTk3/s4DdvmIAod1Zt7Oi43IgY69C8a4j7GANs3lu3bOeiO12q+c4dp0H0wJGlljBi9Hniky97xz/+Axx77qWXcsW2bNkC0f4E3awWLrrvvJMm2BExxGXLGBbNI2Y/tRFd4PS+2cH+pEHTm+EAnyxeDaXmTvyekZdag4LmbBEx3qULHl/AVvaTLn3iyM8nJxLD1vwc9XV8eImtqMId8k/16WZFxAJupvGS/8hRuuBV6nbsxUGtg3txRQP3inEdV6X+1bEFfBvO70p6fepFy9TrvJW6ndWLPu5PCpyf8wwkIgbYEg7iOzXe26kC+5PURnS7je+FsdobsBX1ku/ZG/S9ekNu4XTssEo8mAXe6yHWnN+ktHAGzjuEq9Q3x3g3uItviDh5ICLKxP3i6RFuv/OTxRkVkdjl4zEx8aVS24+8Z8UtgRthM9VPXvupOyHamqRjF+YOQHTT9E6I3rM3MbI8/iLaId/z0U9AlDea6/fZ/LEwf2wN5o+NYP5YjfljI/7A/LHjLNr8sTrzx0ad3Pyx1cwfG3UwBU9q/hg/POaPjYiaP1Zj/thIJzt/7Pdi18oP3/zWty79h/ljo5k/Vj/c/LGak5E/1hnrxheQP7Zkx6mjc73MH6szf6zO/LGRTjh/bKWRuWTmj9WZP1Z34vljnz9+zRQy88dGMn+s7uHIH4uVKWRPfPJlS//xheSP7f62Bz/58Iffv/IPzB+rM3+sbq19vKXP18ocWzIyAWzlh+aP1Zk/NlI9bWzZieWPLX1u/lid+WN1yfyx9K7s2nUzf2xU1Pyx1R5D+WMP6VWWJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSpMcWf4BMkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJWkf8ATJJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRpHfEHyCRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkqR1xB8gkyRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJktYRf4BMkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJWkead9xw86qPLrj4Ijoia0Kw1WhhaXRsRERRQrA6eBNEs0aHSu7RmRc7U1yvajjEOP2OW1Hhl6q45KiyxB/gsQVEy5IqFhGNoLIbzcaJ1CkiIvIGnbkoEt85w3ge9L02TtK97hV8oxP3i2/mcEi3Y6xD13NQJq5JVdHJm2169MohVzzRTvh+tFrUJxR8wbPk44HfutGmYwd0LP82YxO7wUg+ekO6pFlGLSHLE9ckx6aS53hyvJXDRDcYrSZdtSqnkzdzOnY4GNCxbbzREdzVPYQuNrJUE83xe6UHgLU18MwZXu2IKAZ0NxsNbCf4eCR/1jTD/p/HHR4Rq9T15PbfxAacaEX47OSNxFXJ8VvzyQsceVrcAiOGgz5G6dFrNagn5G4wIrKgw5s5RWeOzkC02+1SueWJP3cRMcQOPMdrMhj0HkrRA7wdk1PjEF2Yp6KLxL2KTofm2Gw4pGrzUxmRmFoNcRbBI0uBi46IGPbp5Ny9t7sTEG3gQ12mmmiJPUaFz06Gq5Jm8kYXVLc+dSfRHaOTl1mqn8TvlWNDKXFq1MDHtsCvHJGYRjQT/T89e0WVuCYVjokFnryBzf8LGE9xxMTDL7jgkhOOJiuWGDGx/fPkJ6nEGRBXLEq8WThxSsu4r+PFLW6hLC5yyf0e9f87t22C6Hv/4z8gumvn6Vz0jbfcDtErP/RhKvrf/x2ifDXLxH5AvPnNb4BoCzdYTttF37qR6kWbLerrdpx6KkTHOzTH2LVrFxd91hlU8y3bd0B005ZTIPr4Sy6jgpNTDNwG4Tl2WdIkYXFxgYsucWVd4MxsYYFOvus0utpv//t/xHrF3Xfdxn9w9OiRtUJbtm6EAye7iTlGxns72BH28HZMjdPSICL6i0chyqPDWIdOzrP3HPvYiDjrTHq4Lr7wQogOcWR54IEDXPSv/fKvQJSb6Nvf9laIPv/5L+CiZ+bodvz6b/weRLdu3nzsB/etDF10wQUR1yx/ctEFF6z80wP793PFfvjlPwjRs8+9AKI3XncjRJ/57Gdz0TiniyOzaz6VETGGS+Pe4jyXzG24KGn238e1Qa9H61PedIqIbpu6lIUeFX322WdD9Nprr+Wid5y6E6K3334nRP/sz1+/Vqi/ML+wQDOr8bExrhhvg0xPT0OUZ6qH1u75lxw8QH+Q4dvAIfYnqW4ycfgYXjTuynLeF02tSgr8gyY24AwnhI+/4HFcdDZ6unrL8n9d9LiRZ3iw5b///e8feeaZuady0RdcRO+U+dXV4jxNbwb4EodX9BEx1qUXBwXu8vGCvkyt2bkXHWJnxa9u+bFNLD9T22WzODqMdehlX5V8blfIa+8vfvM3fwv+/ooPvh2iqe2XxI4u7zbwFiIvDXiVFxEVrjt4az/xOi+VAMCHj3WpFx3grumwSrxJbDa5IdHTwe87eKfiuLa481olc3xs+cHrF9QhREQbrwnnVHAD5mjyFSfjkyf2D1OvJHjsyHAbpJVj51/gLnZEiZXbd/8hiOaT2Pnf93GIvv/KW7liL/h/ngdRvpecXFDfZjZ/LMwfW4P5Y3Xmj41g/liN+WN15o+NYP5YvWjzx47z5OaP1T2a+WN4wc0fqzN/rM78sZEe4fyxsYnPTy3MHxvJ/LE688fqHq78sZV98SXn7QzMH7s9Hnyn0FxjADJ/rM78sTrzx0Y64fyxlUbmkpk/Vmf+WN1x5o8teTCLDFLIzB8byfyxuoc9f6y/8Pm7cLz5Y6s+MX+szvyxuh1bV/aTD7b2paSytTLHliznj41/54MffvxTdy//t/ljdeaPjVRPG1t2Yvlj1aAR5o+NYv5YXXKLO0/dL3g9a/5YnfljdY+h/LHkq15JkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJ/334A2SSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEnSOuIPkEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEnriD9AJkmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJK0j/gCZJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmStI74A2SSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEnSOuIPkEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEnrSHN44P5VH/3LFW044DmP2wnRzVObINrIKq4Nh/OshGgxWIRor7cA0eHCEEuOxsIRiLYbTYhWVQHRokgUnef0I3ElXrIs8QNzqdtR0gUvg6LNJl2T2aPzEO106diIGGC0xIvS6bYgWvS45BgU2AjxXjcbDYiWeLWHGI3UTwkO+n2I8nPZaFKHEBFR0fGDIV3TRuKaJJponmFTyfHwKuOT06F4oyMiMM4PNd/rPEv8amQbHz2ueVbR7WhE4or1enSvu90uRIsCK4YlD7DciGi3OhjHs5eJe8lFV/h0NPBwPpZ7jMCeKl00t2DsbxoZtaKIGA7xXuPRZU43q1VR9x4RZUWXpcI+IWtStMLxtCp51Ioqf0g9IZ051WM0m/jU53RJy5ImMDyFiNT3KjI6+djYGJ26oguepTr/Ch+fDPvYJjbRKks00X6fprI8s5qbp2PbTSqa++eIKAqcReBY3GpR0YuLiQ68w4MaT2UxmOPNitTT0e9TM1tcpHVHhfOTDRMbuGLB8wR8bHnKt3//fi55YnycwnjFhjzbxCEvkhMYbCeNBvWEBRadNVI9Bs5RisQcmyqWJzrRhJwXB4k1YuJbD7H/T6xecaBv4BUrUxXLsOgGj4nY+Ve4Zon0PJmbGTXgIjWpS6iwmfFUFidO3U5i7Gh16LH9kmc/H6Jf+uyvolOntpW45hF8N/nkdGyqJ4vAHS1e82SBG0fJ6WJiSogVw0dvmBrK99x5O0TvvONWiN58620QveNWOnZxkNhqS2w/tngGQtekmSd2tCZwKtvB6Gk7aUt2y5YtEL3siZdwxS7/6If5D/qDNbfyNozRBObqz32Wz3xo5hBEuy3aldqxYwdEkx04T2B6uJnGe4A8lvdxrywiMuwTekOabfJS7OChB7joqjyXTo7fetv2rRA9cvgAF33/A/sgOtama3LmrtOO/eC6laHJsWMmyav+d8v0Rq5YMaCWkCe2ULA74qEhInjjk4/lk/N+V2orI8eeMMOxOM+o6E47sRHNS7mxDh2+MDcLUd7liAicv8fkJHXgzbVXJc1GvnXrdjg2MWeL+Lbv/DaI7tq1C6IFLtV4gRkRbZwT3nD99RA965wzIVoOE5tpec5NBV+14C5HXuLWfWKqGfNHqZndetvNEH3Cky6F6PSGRGe174F7R3383uX/WujR3lFEHD46M/LzO3DOFhENHPUmpzZDtHMKtaL776Oh4dDBg1yxHs4JGzjlGy7gDmEj0VnxRnS7TUWXw0R3RMemdoNb2KV0O/QmZdNGmvJdeOFFWPIx64JzzjlnVfj7X/YyOPgZX0YnP/UUmiRHxF333gfR+XmamOW8e9OkK1ak3sLz6pW3GnKcxyZzD/i9WIHPDu/39nEKHakW3mzQyYdD3L3BTdcqtRu8Un0yw/t4iZQJ3JyMiBxfP3XGqMPhN4ks8Z4x9UoieTjAd2IREfjSODEhLPDJSraDA81tEJ1r0rC1gBvsW3fSmn3X7tMTFTtwGKJN3qbGZUVVmxCaPxbmj60VNn+sXrT5Y3Xmj9WZP1Zj/lid+WN15o/VmT9WZ/5YnfljI8PA/LE688dWfPj5Q8wfG8n8sREnN3+s5uHKH3tN/Nnyf//sr/1+BPVlr4mfXf7vX/vDP1zjr8wfG3E8Bc0fG3Gs+WOrcf7YSiNzycwfqzN/rO4488eWPJhFBilk5o+NZP5Y3cOeP7b84fHmj636xPyxkSeA2DrLH/u82266YeTnS0lla2WOLVnOH7t41Idh/tgo5o+t8OCKoJ42tuwLzx9buTl1y217wvyxkUWbPzYimtpWSvXwsJVn/tjxMn+s7osqfyzRZCVJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiT9d+IPkEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEnriD9A9v+z96fBtqVpftD3rLX3PufemzfnrKzMrHmQehBSt3C3WiAhWUYIyRgIMITDDGHkkEOCCDvMB7Aty0IYh00o4Is+GCS1jIgQkxASRsIISdCWARlN9NxdPdTQ1V3VWUPOdzpn77WWP5Sprr5r3/+T9+6qzso6v9+nzPOed613rfXO67nrAAAAAAAAAAAAAAAAAAAAAAAAwBWyfacLAAAAAAAAAAAAAAAA8K70Jz/63e90EeAET77TBfim8a9ee887XYSq8Z0uwFXzTfvv6jZX8tQP8IeG6+90EQAAAADgW5mdaQAAAAAAAAAAAAAAAAAAAAAAALhCvmn/UgMAAAAAAO+w9/1b/+GjZXz95F/g6+k3NOk/csrBP5oSf+aUI1d9x//8ETP+HX/hL592ZgAAAAAAgOSf/Km/9e982/e806UAAH7JH1puvdNFAAAAAIB3n/GdLgAAAAAAAAAAAAAAAAAAAAAAAADwK2f719/HS92FAAAgAElEQVR47L4fPXlzChn+2qf2IfW7n/3FkPrSe1/IpVmmdOrtcAip02Uq2LCk1PPXP58LdvPwZkidpyHmTl95m+cln3qZ5pA6zSl1HHf54NkYP083L6nkc6XUa9dTwaZ9qgZVNW5T6jaW+2KfasLFxUVz6s0mpQ6pJuTqfZGvuqsnwy7dlDE/y2ia0x2rqs2QTt1U4FhPtpuzfOqq2PTiTRs28YYfUm9zmHOTr/Es1fDcHW026X5uxubUh1jDa5uyHy7upVPHi6qumu3ndMN3m1SwYYi9aGxZVVVDrAmxix5io566U+d7ssQOfLeLtSh1RTW3XxeNPcqwPHqxL1JiVdXZLhV9iSXfNONpc+4lNp9N7mVjVxarSdUYn1bVNKUOp6lFsdjtPcnD1iZ2wvt47iG2u6pa5tzNpuxT8zhS3t32ei7Y2Vm66iFPA5qH1Q3lsa+7jPVkEwfEy8vLkHqIQ15VHaaU/Wx3LaReu3Yj5T2LU7rONo6YuafrhtPaxE54u42TnyXdkzt37qQTd1O+XEWnfXpY2TA2p55zs70b59h37obUZ599Tz71Zaylua9b8vw81oQ8DaiuXedqNs+pFg15pK8a4/NqCtYsDbqxI2bPj2PMk7rYleVJclUtS5qYzXF603TvedHRTKyaq246q1iN+tE2V/H4rPM9yXO2qhorPq9YRZuG2dzvZvKf9zFqiBW4OXX3OJrrip1VroTdbHOp1DqGJWaP867t9TTkVdWHvu07Q+qHv/3XhNTfGsed5g8qNO2uqYRTriZDtwKNhqYS5jl2vK544O/6nuaPrv+uf+gfOnrMPzQ8kTPCu8urv/efum9OMXfj6fXHbobUPHO6jL3oLs7tqyr3N3k9ddjHKfTSbaE0k4i48x+XgZs4x9jErcuq6goex9OYeZ/3VKuGeFOu79LTfObJp0LSFw+vhLzdQq32l6mibLaxmsX6/7mX08u+qvrohz4aUh9/Jo0geVk9xCV5VW3im69m8nOZxtOmYJdxRV91c3v/+9av9eyzT4fUPOX79l/9q/Op5/nIvOuv1h/+mt9o2tfjjx3fNHvvi82L3X/0d30wpP7aX/urYu5UCd96462Q+oEPpPNW1auvp8aV15i5xxi6t2b7Q6qES5xu3o0vu69fS3ubN64/FctVr8Vb+uf/wl8IqW/dS8W+99ar+dRf687tN+77yatfejn8/uc/90xIPTtvOsr3v/BcSL0XO6td7BM+/ZlPpxN3q5K8y73E7Ze8tZNf8VTV5b34NjAePb+FzNEaVbXEVp8Xgds4d5rvPfra9j7rjbX8NrCZ3nRr9ryZlm/4GA+eXxDlB13dVeeN07w52b/Oy9EFzcHjm5Ruv/epj//6kLq9vB1SH4tvUm69lcKNvvvv/HAsV711JzXbvN8VN02PbPaKHyvxYw/MnlLFjx1JFT+2In7syKnFj62IH1sTP7YmfmxN/NjDnvobET/2z3zqh7/yHyfGj11cpACbfV71dLENQTtJ+MbFj202zamHTeoJ88I893TtOvGU9W9OzfFjN+I2YFVt43CcV8fZG2++ln/h2tl5SD3Ezc98T9r4sX2OXshN75s1fmwTlzRvI37s0TucE+PHsiZ+LLb6HD8z5kVgGz8WD56f9TsYP5Yf5Tc2fiy3nXa2mX+hiZ/5pVP/y/VLveK/VHerauir6Bzm/+LHjpxa/NiK+LGv+kP1S2/T/vj3f/8DM8dK+IfqT3z1v3/3//J3r3/hp37yx0P2H/2xHwupP/zDPxxSP/ihD4TU6t5AXTvhn5bkGJinn3gqlquphHfvpZ2fa9fTfPKVN+5/XXufe4e4j5f/VUscrMdt01k99XR6NZzXDk8/k/JW1eaXv/z92v8VP3aU+LEjh/56x4999YcPGz9230/Ej62JH1v7Y5/4qQdkG+rBkWNfcTR+7Gt/KH5sTfzYUeuwsa96+/FjH/9lP/9CiR87embxY2td/Fh+f1TxhaD4sTXxY2vvovixRw8rAQAAAAAAAAAAAAAAAAAAAAAAAN51mr8CAQAAAADAVfOHljermr9Wl/+C5RuvNX8l+5S/YPmll78YUr9V/4Llkv94YPwLlj/0I+lvflbV3/f3/o6QOk3p7+f8zb/234bUD3/kQ/nUd+9dhNQ//sf+eEh94slf9hcsX/i3/t0H/eYzf/RP3feTn6v7f7L6hRN8d0p8wJ+Te9vee2J+frnvaNJT/e68/7eckBkAAAAAAAAAAAAAAOAbbHynCwAAAAAAAAAAAAAAAAAAAAAAAAD8yvEBMgAAAAAA4F3v5d/9T7zTRQAAAAAAAAAAAAAAAIB3DR8gAwAAAAAAAAAAAAAAAAAAAAAAgCtk+04XAAAAAAAA4Ovg5d/9T3z1v8/O0p9g+fXf83fmQ7343veG1Pd/8IMh9Ud/9CdC6u/8Xb8rn3qYUupbb70RUqd5Dqn7i7v51Ptpn5LnJSSOY7rh+/1FSN1sh1iuWub0C/Gi6/Gbj4fUT/z0T+dTf/yjHwupr732Wkj9o3/sT37t/77/T/37+VwAAAAAAAAAAAAAAAC/krbTrdfv+9G99C9E6sbjT4fUn359E1JvzW/l0jzz+PWQ+tTmdkjdjekfnyx1GVKH7l+2fGG+FlIPh3TweYr/VKiz2T36R+KWKf6bm+r+Pc+Q/inRZpsKdjgc0pHjP1JaluaObes8pE7x32bdvHkzpN65l/4FVFXVEG/aEm/4lK56mlOxd7tdOnLVPlazMbaO/G/GtmNq1PU2nlfKG089DfGfulXVksqWW94mPo5c+efukscp3fD8z/Bqifdkn1pWVW02qarsY/btNt3PeEuqqil5/ieAFzF1E+/YXE3JLvfxeQ3p1Geb1NHN+d81VlVseufxhu+nNLKc8k89q2rJXVml69puUx2buiEvV5N86uZ+j82hxznW8HjP5thFD7Ge5ElCVW1jPZljyWL9rXluetGlqSqpYN2zblrHxUWa1J2fpwnhEg8+HVLBztMMoqpqyB1OHDuaeVXXjW7jzGrZx+xx8nN+fiOeuWm2Z+NZSD0c4uOIXfTQ3bNNnFkNlR9WytuMplW7OANfYl/WTIPjPVmaW1J376YvBZxfS1X84l7KO47NouMstp9d7KNv34nLpW4oP48z4TwcN426O3W23cSRpRltk9zRVT+Uxw48DmqbeFHVTv5jweY4gckPq1lqdembTTp4rgdvo57EPiGOmE09yalxVGpz51lZU65mslnzknrCIeZf8rM8oWVVN1gveWTJ97svWN6zOmHE7Jfk8dRxijLkttM2jnhbuul77I7ikNk+jXzqTd5gzKN1e1Py9D4XLR68adTdvCt+0qeZ/IxTavKPP/5YPvX3ft/3PXJq7k/mdjyN19XVozgDyZW/6VBqiJVwOsR9vLhm/57v+w3NqXNViP3/Bz74gZB6uW/Wp6+8/IWQ+pv+nt8UUj/zmc+E1IuLtN/7Mz/7s7Fc9cM//EMhdRNn0W++ld6G/Hc/+IP51Nevpxn4a6++HlKffOKJkPr666/mU9+4llblTz/zVEg9O0tLyMdupD4hX3JVXV6kivTk00+G1F/3Xb8+pH7xlS/nU7/4wosh9RDn2G+99cDPk7311mtPPZUe1t3bzTu1JZ46d2Z5R2u3ax7HGPcxtrtUE4aYuu96jLnbygi25/nU92Le5p7Mcc3++BPpK3j5FU+789kNevXCSy/kX/jg+4934y8882zO+Pjj6bp2+YVF/NzhLtaTvJNWVdfO0vO6cyc9rMceyxOY5tTbXdwui3tW2/M0DT6PVz1Nt3LBDhevh9Rf9fGXQupv/S2/NaTeuftmSP3T9d9+7f/eXH0R8ombqQN/8YX3hNS/+3vSa9+q+u5f/+tC6vXYrt98LX3u8+nnngmp210znZwuU014443U//+V//IHQupv/Lu+J5/67q1UVW7fTQ1zilPZXZwGVNXFZZpQfu7lXwypr7+euuj/6D9J9+SJJ9PDqqqqX5qLblarjG3sT/K7q03syqp7sZuH8ubVVdw4uuzG0manOo5Ll5dpN7jdfmxDWB457z5u3VfVyz/3qZD6X/31/yqkvhlf4vzf/tf/QEj9mU9/Phfs1/zq1EX/ybitmrea17dT/FiJH3tQdvFja+LHVsSPrYkfO0L82Ir4sYc9tfixI6cWP7YifmxN/Nia+LE18WOPQPzYsTOLH7uf+LFjB3/b8WNfU4z//ypM/NiRzOLHHuq0/anFjx01PfgEOX7sa9+vHo0lEz92JLv4sZVT4seqVo/za/5X/NhR4sfWvu7xY1/94duJH3tq9ZOvEj/2sK5m/NiDgse+8vNtnIF8NX5sf+yHJX7saLL4sf/e10aOrcPGvurR4se+8nPxY2vix9ba+LHbt9KzrtyliB9bH1z82Mq7KH6s2/YDAAAAAAAAAAAAAAAAAAAAAAAAvoX4ABkAAAAAAAAAAAAAAAAAAAAAAABcIT5ABgAAAAAAAAAAAAAAAAAAAAAAAFfI9p0uAAAAAAAAAFwh3/H//M9PPMIv1r8VU7+BfvobeXDu86mTj/DkH/mjX4dyAAAAAAAAAAAAAADwrcgHyAAAAAAAAAAAAAAAAACAby7/ynDz63CU4R3K+w31DS3Yt+pVf+NqwjftHTvZv7J96p0uAnzdPPNv/qm3/8tnJ5zo8RPytp49Ie9zp5364oTUt047dfa5mPoTOfOvbQ5+yp8P/I7/4bEfnvynKwEA4OtufKcLAAAAAAAAAN/ifvIf/vvf6SLA/T75j/1D73QRAAAAAAAAAAAAAAB4x/gAGQAAAAAAAAAAAAAAAADwzvs/Lbfe6SIAXzd/cP/qO10ErrRXf98/9U4XAb4OfvH3/u53uggAAHwr2956/ZX7fvT0k0+EDG994WdC6v75bw+p0xe/nEvzwlMfDKlvvnF/Ub/WY49dD6lLLSF1u9vkgv31v/E3Q+pmsw2ph/0hnfp8l09d8xwSl2FIWceUOqQDV3Vfp5vnKR08FqzG+DiGdD+raojZL+9epjNvUsGmaZ9PPY7xrsSrXirVhN0u1oQlXXJ1D2uIubexAk9TetCtXBO229T0prm56nlKtzTXk2XOBYuVsHscFav/tMS2l66pNrkGVk2xx6h4S3M/mZttVXNbxnhThvg4lkqVcMy9TdV8SNlz0zux/udbdrlPnVUu2Nwcu5EbZq6iF1Mq9qYr1xyf9ZiHrYrVe2lqQm6YuVnngX4+pHZ73g30U3yay2U6+Bh70dy9t4Z4S8/Pz0JqniRU1Zy7o/g8hvgsr19PE8KuXHWIrT5PAw5znPJt2s/+5taRsu926XFMsYru8pBXddine7JMcVJ3Fq86j1lV+1jyi3v3Qur5+bWQeohHrqrLy4uQeu1aOvgcr2scU7O9dasJldjEitTMrGL1Po8XVVW3b98OqUu86t02Nczc7qqbReQxcZNHh2b20shzpzmOp3ksbhYdVUO84flZD/Hgc2zUVTXE9dRYeXofV2rxYQ1Dd0/iLCIPTHlZvYnNttpnnac33VQ25W1HlnbZkrKe1Dq6q4oDfV6+9mL2vA+yxHqypBGzr6IxNV9zMzUamipaeQUai7bEx9E/qxMqYXvoU07bLH6bxPgwu5qQn+YJ5aqKy6W2ZY2x5HPMvjSVsOsSmnXeCT1Gt/OZW26eMebp/TQ9+jSgqqZDV/QHy1sNTQ2smmPJ8xQlP47zvPNZ9eL73x9Sf9/v+30hNV/XHFNzHatuAt9sxOUjd63j8hDnTnHetd2mh7XZpiVkddObitObTTPRTan7y7TKq6pPf/qzIfXHf/RHQ+p/9Gf/bEhtF4k/8AM/EFJv3ngsZV5d9U/+I7/zq//94vteClkff+LJXLA3bqWV2vUbN0LqPm7OvPfF1Cqr6iMf+dUh9fNf+FxIvRF3b64/9ng+9bXzmP36ec4e3LieWscuroaqaoob0V96+RdT5thZPf/88/nUR6d8P/Bbf8dX//vL/+z/4kFZf/Nv/L5v/wcfeOCXv/ByPvM+Dluvv/F6SL0WNxgv7t0Jqe32Y7bEjm6/T/tC7WuaZskf845juieXl2loGOLQUN2U7/wstZ1DfB+37UaWr/X8c8/d95NXnn89/P5j19LBn3jymXy67ZgmIcuS7sm12Iue7eL249y9cd7F/d64t/nYjRTLsd00864hTm92u9Q6bp6nepL3RauqhnRbPv6h96SDx3Hpe399irH+9//M34jFqqqf/Op/7Vb1Oa/z8jug3a7Zft+dpeyHGLqw2cRWf8JuQFVdXsSVRXzWuWA5b1UTcbGNBz8c0h2burHjEz/+YyH1qWupT7i4eCOk7japF32y2ZuvN19Nw3FeqeX16fqlsPixEj/2AOLHjmQXP/aQxI+tiR9bEz+2Jn5sTfzYmvixNfFja+LH1sSPrYkfO3behvixNfFjD1sw8WNH8p4aPwZ8s3rQJr/4sXV28WMrjxA/9n+pP/HV//7X/vV/var+r/Wnchngm9/zzz51309+/Ef+dvj9T/3sT4bUE+PHtrEXzfFjr7+a3hW+e+PHNnFlfSuv6OPCod1Cybn3++NbKF/5+T/wD/7Oo6lf8dX4sde/5oePPfFLMZPix9bEjx21Dhv7qkeLH/vKz8WPrYkfW2vjxz7xs3fzL4R3duLH1sSPrb2L4sdOerMIAAAAAAAAAAAAAAAAAPD18gfrrV/+g/aTbflfsaZ/kLnEP2BZ+Q9Ytt8giKmn/D3F9ktG+dsK3R097Q9YfrPKNzx/7rZ5WO0Nbf6A5QkfDc9/wLKroke/RvEvV/P9l4fyfx4f8DfY2o8aPrITj9z9cVjedX7/7S+sf+gPWB71LfkHLH/iJz8RUtuvVH/mM58JqfkPWH7xv//DPN/x5/7iV3/41b9heeIfsAQAgK+jb9waHQAAAAAAAAAAAAAAAAAAAAAAAPimkz7ADwAAAAAAAMC71HP/xr/9oKRP1AOT3o4fOiGVd5H0V4ABAAAAAACAb0X/Ur31L9fj73Qp4FS///YX3ukiAAAAvDuM73QBAAAAAAAAAAAAAAAAAAAAAAAAgF8523e6AAAAAAAAAAB8ffy2v/qXfuC3/o53uhQAAAAAAAAAvFv9S/VWVU3TIfzOOGziMZZ8imGOmYeUfRxS3nluTl1Dyn84pKvebsZ46nRVQzxvmz1b4kUvOblqntKpxzFd9RAf1lDNVeeibeJNy9c1d5UQ3hHf8ef+4tflOM+ckPd6TL3bZf+JE079+gl5r6YfPy37c7/1AT//N/7tqvpE/dunHR4A+NaRVn0AAAAAAAAAAAAAAAAAAAAAAADAt5jtO10AAAAAAAAAAL5ufttf/UtV9R/++/9O+J3f/Bu/L6S+/IWX8yk+/OJjIfWlF54MqdfOz0LqrbfeCqkf+ejHcsFu3UrZb9++HVLPY8E28U86V/fXqudpytmDw+Eynbfy3xWvN95I9+TnfuHnQ+r3fO/3hNR5Tn/6u6r+3e/9J/MvAAAAAAAAAAB8a/vJf+R3fsef+4vvdCngVE/94T/4ThcBAPhG2f7dz773vh/95z/+4yHDt33nd4bUe3fvhtR5aWKyxykFfL/3vS+E1Lv3bsVTp9Dnx2/cyAW7fS9d1zieh9RhXGLB8pmrYiD7FOPUN2OKcd8vzbnPhhSqvsQA+iUWbBsvaojFrqqlK3lw7Vr6ZwO7TfNJvvzPBqrSVeesl/cuTjhv4+xaqqKXl+lfLIzdP6VYljlmT7XosE8NcxPzVtU05/qfso+blLqPBWvryXRI92SzTbc03/C5q/xDbHo5c/OvYuZ0UVVVuWyxYE0Nn1PqZpcadVVN8z4dO17XEu/ZUE3D3M5N8wnu3rsXUnP1bv8FVL7qphOOD3oYm9aRq8khtp0xjqd9Z1XxWedBLU5gxnjH5qn5x1fDkrIPm3Tq3IvuL9PIUlXb2BPu4j+0u7yXTj0vaWSp7qblgf6Q+5PU4msYmq5s2adfuHYt/YvKaYn/enBoqujhEAe1TZzUXabHscT5yWbb9KJ59Njt4rAVu5M7d+7kEz/x2M2Qmlt9nt7k+/mVw4e0PAPPg9r5dhdSd9umF93GX8gd3Y0b10PqrTtpMVVVh9ibnV1L66mbjz0eUt/GbDOmNqNWHPLy3KgrWJYz56tuVzv5WedKuM09cDe9yVPCId7TvPjd5vlgNxfNvWxeleSrXrpTj3kWHWtwnm1mbUe2xMeRp7LN9Ly7J7lhbuKpp1hRut2CWvLMKs4ExuHR+9glTwO62eYQ+4xuJdbJnV1MbO93k/zoFbzpyvJ08cQtlEPcamgGh1z7O92GWG7UJ20mzE0Nj802FmzpFkRjXPIssU/IraN9GHllkQfrQ7Olm3dNu0EtTlbzEjJPfuZYvatq3KXJarOFkgf6rgef4odLpqZ7j4fOqd3u/FxxkZkH+vis910d3cSrzk/z4pCKvckr56pDnkXHkk+5KpxQi6rq+fe8J6S+9+/97SH1d/2P/8GQmrcpqlsGZs1WRNzvypW/ujExT2DuXaTtx/Nu07ViPVmW7w6p222anw/dFspml6ZtuZ/c7NKpX33tjZD6Iz+WXp5W1Q//4I+G1FdeeTWk7s7SVf9nn/1sPnXe6Hj8elqzf/bnfy6kXlyk16NV9Ylbr6TUn07d+zCl3ZubN6+F1DffaPYxcj353Oc+n079eNoDzHuqVbWL4+nNx9L+zGM30lV30+CmYHfjy+6Kw9ad22kfb8nD5S/32P/9T9z3k/Rts6qqvxrSfrY7XfsL70p/f0r8r3+lSvEu8l3/q4f57VWHuo0vdrdxg3131u33xs7qeuwTDnFmtcvLim7hfBa7spx9l9/Cx1chVd2kMK7U8jpuOjTTzWmKs+hYsKfP0+P49Kc/GVKHqaknh0Nc8rcv8R9sfUnix0r82AOIH1sTP7YmfuxIwcSPrYkfe0jix9bEj62JH1sTP7YmfmxN/Nia+LEjxI8dI37syMHFjx05dUoVP3akYOLH1qcWP3bs6Cmv+LEV8WNr4seOED92jPixta9X/Ni/WuklF7wrvPXW61/7v+LH1sSPHfXEU088KGl7nkr+xNc8jjdXP49zyaqqbfP3RFMVPT9Pj7Ji7MHQ/VHPzSYG58QpyuW99DimffM48uogr6fynG1uZ1YxOGeMO9VDji6IG0PX44vyqn7xEELIxI8dO7X4sfu9i+LHmqIAAAAAAAAAAAAAAAAAAAAA8LD+92+8fP+PvmX/gGXK6g9YruU/YPnZr98fsHzij3z/V//7zf/N76mqF55/NuRt/4AlAPCt5KQ/ygEAAAAAAAAAsLb5/f/8O10EeFv+g49/+J0uAgAAAAAAAAAAAMA7wAfIAAAAAAAAAAAAAAAAAAAAAAAA4ArZvtMFAAAAAAAAAAC+BW1+/z//oKS//YM/HDL+lu/79pD64guP5/N+28c+GlLnWkLqdpv+kNu18/OQOk37XLDNZhdS33zjdkj9y3/5r4TU7/ne786nvn33Tkg9HKaQuon3ZJ7T/ayqi8uLkLrdnoXUZU6nzgX7j//8D+aC/eCPfyL/AgAAAAAAAAAAAMC3thSLCQAAAAAAAAAAAAAAAAAAAAAAAHyL8QEyAAAAAAAAAAAAAAAAAAAAAAAAuEK2r7zypft+9PRjT4QMN2oKqRebbUgdhiWX5lM/9wsh9bu+7aWQutumU19O6dRvvnU7F+z1Nw7p1NfOQ+o0pyOPU7qfVXWI92yzS1c9xYPvNpt86mlKVz2OTfZ05CXdlM3cfBdvjpVwWdItu3nzZkjdHy7zqTfx4Nt4S+chHXncpqsehu6ezOmWTvt9SN1sTvoQYa4JuWDLkG7KNqZW1Ta2+nzq+TLdk+EsHbnpyKouD+ngZ0u6Y0usRbmOVVVVuup8Qw+xuxnGpp7sdruQenmZGld+lDWmgs1T02yX+MQOMXu+qLYu7A8XIXUb284m14QT2l1VjfFpbpruPeWdplT5q2q3SyPmZpMqadOftC0zPq88dixx2KqKjXppurJ88Nzoh9xP5oGnah8H+s2SHtYypGLvtrntNE+zq6LxjsWubt/NuzaxO9rvU4+Ri33rzp186tqnsg1nZyE1V+B5SQ/68iL1VNVVs7uXKfuT8X7evH7jlFO/9tprIfX8PFXgs7Pm1Ic4J8wTs8s4xziPc9G33norFyz3k7mvOsT6//iN6/nUr756N6Q2M6ubsXtvZigVLzpPE2oY88HjsmJuhpY8Dc4VeIypU5zRVdV8iFO+ePA5jg5zN73JI0/OvIvbBc1ctVuyzM3Cu7mlQTPadn1C3gYZ4lUvTWrzsJa4DTLkxhO1uwF5L2KJp26abVfqZcljfX6a+ei5UTd1NA/WuZaNuWDdPLiZjcbUpop2j2OIM8bcsLtHGfNWmvxUVcVVeR53umbbPY48beuGnnjqqBkQG01HGKcgeZJcVRWveo53LI+n7dI4b43mrqxpWDF5apttHOjz6JC1HXh+WrkC58yX3XbBGHurQ7wnu/M4x8g7hN3jyD3ZIe4B7jZpHTfPzfr01kWagZ/lRWKcGk3bphZdxMXvtfg25PLiXkg936a8J3VVnWlJq9f9vqkJ+V1J7sDzZsJ2TFso7Vy0GVni+DDFenKv60XzdeUqehFv+DK3Q3nurvIEJs/KUt7v+PZfFc9b3/7xj8b0R38R0w6nw5B6+LNd3r2Mo21cOFf3vA5TuqW7/HIqTmDGMS8wK8+P8nuxvFNx48Zj+cS3Xk97Vhf7dMe++PIXQuqP/+RPhNSf+dlP5oJ98pPpFz7wvvQW/r/8b//jkDqeN9tKX3r5iyH1H/3H/7GQ+tzj6cif+tmfyqf+k//e/yukbuPA9FR81I89lpLPrjXzrheffz6k3rqdQhcuLlIX/XM///l86uvXr4XUvK16eTdNfg7Nm5Sa407F3biFfnaWCnY+pNSLi1u5YHnZ0iwN8qPuhvL9IfUJebMhvytsugEaBmAAACAASURBVPeh6UWHTY7HyC/s4iuerv/uFs6xYM1SrWmYZ9v0C7diTNHNx2IUykVqO7/u2z+eC/ZDP/IjITVPYLpNp/uTxY+V+LEHZhc/dj/xY2vix9bEj62JH1sTP3bk1OLH1ocWP7YumPixFfFja+LH1sSPHSN+bJUqfmxF/Nia+LE18WPHs4sfW/+C+LE18WMr4sfWxI+tiR97WOLH1sSPHcl5BeLH/kh9/1f/+w/8gd9f4seOET+29mjxYy/8ll/67x/6kR9+UPa3Hz/2N77m59/+a/6OEj92jPixtRPjxyquDsSPHUsVP3a/d1H82EmBIwAAAAAAAAAAAAAAAAAAAAAAAMC7iw+QAQAAAAAAAAAAAAAAAAAAAAAAwBXiA2QAAAAAAAAAAAAAAAAAAAAAAABwhfgAGQAAAAAAAAAAAAAAAAAAAAAAAFwhPkAGAAAAAAAAAAAAAAAAAAAAAAAAV8j2nS4AAAAAAAAAAAAAAAAAAAAAAPAN9Eee/+g7XYRvUS+ckPcDMfV7Tzhy1YdPyPvSSWeuqvq1f+G/fFDSp+qBSVX1qZNPDcDbN77TBQAAAAAAAAAAAAAAAAAAAAAAAAB+5Wyfvnnzvh/96meeDRn+vt/+fSH19c2LIXX/xuu5NM/M6RfuXdwOqWdn6WNql9McUg+HfSxXba+fhdR5Sadehk069XzIp95sUvYlXtdmSAVLOb9y8DleVw3p4PMSUocxnXyep1yw7XYbUjf5q3rxjg2p1FVVtaTfuLy4CKlnu11I3Ve8Y9XUk22uZtNlOvicHuU4Np8pbKpozLvM6XHcm5rnMW5iyePjHIaUdzmkGz41l1W7TeoxpnjVQ/wu5JJKXVU1x4Pnp5lT85Graood6Sa12lpiT7jZprbT3ZKa49M8pY+du5pwFkte46M3vXzqttnmX9jv06PMbWeMF1VVh0PqJ7uDp4fV9Tc1xDExnrneRkV7oDhufOXU+XmlUx+mdD/H7tRL7HDmy1QT7l3eCalN5a/axNH6cEhFX2JXmGtRPm9V7S/igHuWCnaRe5s4e6mqeUjZhzHOImKxz6+lvHlUqqrd7jykjrGKLrEB5NSqOiypbE888URIzcNWO6g1Vx170bPrqbM6pY/9ysljaqoJ220q2Jtvvt6dOrl+Pd2x/CjHuHCoqunR++D2lp70Pe5mPhlreM47X6bZe3VV9JRT19SsxYbdo8+dhtgJz3ne1VWD3B3llV6soc24U1U1pJs2xVu6idObYUhjx5zLXU0Fb7Ln0Tau6KtqiOvTpv7nStidulvV56fZ7gg8UN4DqdNWatnbGDvSLc2jcXdZrVy2psMJ5riEbO9nzp51S57mcSzNbtyjj3m5jvW1JFaFMfcJue10VXSfx46Y/ZCHvK6f3O/bzdHg0Xubdho8DKcULG4rdY06D1uHJaVuD3HR3fYn8Te221iRus3kdNrubueZwO1bt0LqzZs3Qmq7Khmm1Fnt78S2E3cENtumn8z72CdNg2M3eHHZ9M/zIc8T0qnzFPrQ1aJDM09+9DlGnF/X4dDUk3lOa8xd3IvIF9V2Vs3rp2a0PemFXX6aeY6RX+Lkq75+7fF43lp2sXWcMjq007Il3fCLi3RLl9gTju22aVytDXHsuIiVcIxLyClW/upueL6sQ+xtbr2ROv9qt99jh/Pkk0+G1L/rN/2mkPob/+6UWlWb+J4mbxx1c4yuxxjTqYfci46pen/vb/778qnzTsUYr3rMb7bibvDuWu6pahu30Od9qidvvfVGSP30pz+dT/3JT30mpH7m8y/Hg/9CSP3iK6/kU7/+eir5ebMRnR7l3dtvpbzdIvHGjeshdYorizypy02+uvc4h1jNcurZWXpb3e4qLXn3Ji8S4zTgxJfdzbjUvCHKHV39gf/jvxhS/9Af+IMhdVtpR/dsl5YGy77ZDf7w+9MfEh7HnwqpeZW3Jn6sxI896ODix9bEj62IH1sTP7YmfuwI8WMPfXDxY/cTP7YmfmxN/NjDppb4sYcnfmxN/NiRvOLHVsSPrYkfe1jix9bEjz3CccWPPTzxY/cTP7YmfuxIXvFjK+LH1sSPHfH1ix/7vT//E3/0A9/ZHA2+6f1zn/+p+k1V4seOET92JO9p8WNVdX79gfM68WNr4sfW3kXxYyftmAMAAAAAAAAAAAAAAAAAAAAAAADvLs3f0gEAAAAAAAAAAAAAAAAAAAAA3o1+78//xNf+7zLM4ZfHYchHG+b0C8OSDj4v6cjjZgypU85ctVQsWLysw2EKqZt45Koax1Ty/ZwOvuz3KTXek6W5JbXZpK/KbLebmDuf+vi5/9gHv/2r//3P/sLPPij7kG/peIgFA+DrKXX3AAAAAAAAAAAAAAAAAAAAAAAAwLcYHyADAAAAAAAAAAAAAAAAAAAAAACAK8QHyAAAAAAAAAAAAAAAAAAAAAAAAOAK8QEyAAAAAAAAAAAAAAAAAAAAAAAAuEJ8gAwAAAAAAAAAAAAAAAAAAAAAAACukO3nX375vh8tZ7uQYTNMIfW54c2QOjx1nksz33s8pd65E1KnwxxSd8OSjny4zAVbpnTwcTOkvJXu2LCkglVVLHhN8yGk7s7PQup8SAWrqkqXVfOS7snQfNou3rF8zVU1pFMfppR9iTd8s9k2Z44l352lGz7FU2+HTUjNxa6qJT6szTY1vWmfatF+Tnf7K4dPaZt8Xem44xivqmqOZcvlzgcfx1SDl6Ep2BB/Id+TfOh57pptvidz7AljZ7XprzrdtDl2VkOsRdOU8k6xL6qqJXc48arnmDc/6Ko6HPb5F4JcT3LqoWu2uUvZ7VJXlvOOuTOqmmMPn2/ptKT7uammA1+W9Kxzq99sYp8Q70lbT7rsKe92Ex9W0xHWdHk3ZY9X3Rw5jsVVNebRoanD6eAXFxchNbed6jrhIZ46VqL2ourG9cdS9jxibh+9x2hHliH2k2O8o5eXaY69zZmrKg7Wp3TRbcPMc4w8V+2Onewv7+VfGGK7fvzJVIte+dIr6cixk6yqwz51wnfvpqb31LWb6cjdRHfbzDHiwxrSLCI3+rGtoifIxR7HtCSvrk/oUvOCqLvq2JnlZ9k1jliwbo2Ys+8vcwee6lju3quqlpg9LvTyXZmm1O6GbrmUH9YUdznOdqkSTl2PscTJ/7LEaUBc7zeVrCp/Zz/PVfPSoJmzddPg3KNMceGw2aaLylsNVTXGKtpMUeKo1u5UZHk4zv1kt9XQFGyONWmIrSPvgUy5AlctzTz50VcWua9qt3byftccO5QhbjW0864xXvU85XVc3GDpp3yP3uqzU6r3V37lkU+9xE2SZew2GPM8Idb/fOp2kpwHpryPl/M2j7Jb+Y5x1Mv7XW++md6VtDXhySefDKm3bqcV/WPXbqRDd8vAvNk2x3uSZ++3b98Oqf28Kx78EOdOm02c3nSP43ybso+xFz0Mac8qt512ej6O6eD7+Nas2Q3btjufsRed4wwkHjlfVHWbP12Pk2dWeeWb2l1VnZ+nFzF5BpK1OZuK1DSuuHHUzjabwSU9zeZtSD5wu0rMb1fjaJu32tp9jPjSuGl6FXubXIHbyU+zAm12KtJx8yvjamfg+ZbGUWvTvjXLLx3iO5z5IiXndlcXTexBlutJvuEf/dhH8sE/9NH0C82QGJc87dPYxt2GeYmbCXHKN3SVMJuH9KolD/R/6a/85ZC6796VvPnGqyH1z/yZPxNS89vVPNtc5pNedg85e+6iu/676SfzFmK84YdmaKkXbqbH8Q/8PS+F1F/1oRdD6s/+4lsh9ZU3X4/lqk0eWpolT8y7arbix0r82APPnRLFj62JHzuSJn5sRfzYkbzix1bEj62JH1sTP7YmfmxN/NjDppb4sWPEj319iR972Nzix47kFD92nPix1anFj60PLn5sfXDxYyvix9bEj62JH1sTP3akYOLH1qnxyOLH1sSPHSF+bOWbOX6sqvb1wPYlfmxN/Njar3z82P+jvuOr//2f/Md/7kF5xY8dIX5s5V0UP/borwYBAAAAAAAAAAAAAAAAAAAAAACAd53mQ7AAAAAAAAAAAAAAAAAAAAAAAPA2ff/7v+OdLgIAvfGdLgAAAAAAAAAAAAAAAAAAAAAAAADwK8cHyAAAAAAAAAAAAAAAAAAAAAAAeHS/57M//k4XAb4Ofs+nP/FOFwF+5fgAGQAAAAAAAAAAAAAAAAAAAAAAAFwh23e6AAAAAAAAAAAAAAAAAAAAAAAAvLv9ns/+eFXVOIbfGZblkY+/mbvfGIaQuAypYPOcjr4s+dzpvK0x3rF5PoTU3Sblraop3u940VVDSp6nfOba7nYp+5Kua5nSqYfmcTTm4eyU7PCtZPv3/jP/1H0/evapZ0KG6fDqI6deu/G+pjixE783XEunvvNaSD0/T6cdN7FUVfvcWc6XIXETR4jNpvkG3NgULo4fh9RPj93QNVcaQIb4sLrUeN65KdhhStc1HdLjuHvnTkj9P/zvfn8+9bVrN0LqzZsp9fp5Sh3O0qP82Mc+lgt2dpYGtueeTo36xvXrIfXZ9zyXT309tct68sl01VN8lLvzZrQ+XKRnHSdXNY6xim5Su1u6Klq57eSSzSnv0k+j48E3qeTbOFGubuo154nhkG5prgl5urrbtl/STDdtEz/EmZcH1c3Cl3jXhorVLD7rKU6Ucy2oqiH+xrTsY95Uiw7VrA9yycd4WdttumOHbmlytovj6ZRWJlNcFDVrufywqraxDufWsd2mU19cpkdZXTe7xNH6xrXHUsG66U2eY0yH9DjyNGDb7Ag0j2PKrf4QD54rcBx3qmrM6/Z4XZvcgcdKeHGZBtOqGoY89MRTx86/lRvXSeJoW9WtSi7uhdSz81T/791Leedup2N/725IfX2fnuYypT6hPfUQq9n5edr9OcTuaIg7R9X1hJs4bcvyaJsvubqNwtx2Tjz1GLuMZp7QLAO7RWLsJ/MycGk2XtN58+y9qubYrs/iaJt7hHxR1d2Tbs83PqxYi5ot3aoxlvwQ+/9t7oG79dAQ58lLnHflnYq2/27G43xZS1wkxrn9ZuwmP7FhbvIWSrMoabrB7p1H7o7ioZtJQnNL86lzP7jkJWQ3hcjzrnzZeeXbdlZTrKJj7P9zL5qni+2kKo+2S37W8aLazip3w3l02O9TsdsOPHfRU5w7tZU0pLUD/TynU2/i0rhZ71+etj6NK7XmhndrsbwHfspoe1jiErIb1b785S+G1CE+612cqea7XVX7eMPH2DCnONoe4pGraojbZXkfO48OuZ6070r2+9g6Yi3K405+iVNVS2yY+yl2wnlCmM/cLXfyaJu797NtfIufR9t2R7fSHTuLb+ymw2lBAEua6J5v027YZklvOy4vmrbT7WPEIS/OMdoXEkPuRWP9X/Iku5tG5LE+d1bNW8hYvfs3FvHgY367mifJ3X7vkhdEJ4S55CrWtcp2CyU+rFN2CPt69OgvtuZ2WyjelrniaLvLU6O4NFiaix7y3k6u4dvY+feL9pS4iTd8yZOE9nE0m2kx/6O/XK0pLhyqaprSpmveatvEvc3bd2/lU9+7l9cdp2ywN0vfnPmk/a5cgfuN6Lwqj51VPHiz31X18z/9iZD6vg9+MKT+4pc+m1I/9+WQ+t73fncsV33p1RSF1TzreMfWN1v8WIkfe1B28WMr4sfWxI8d/ZV0cPFjK+LHjuQVP7YifuxYXvFjq1OLH1sTP7YmfuzhTy1+7Fh28WOrzOLHVsSPrYkfO5Jd/NiK+LE18WNr4seOHFz82Ir4sTXxY0fyih9bET+2Jn7s+MHFj61PLH7sYZPFj60PLn5sTfzYQxM/dj/xY2vrm/0NeysDAAAAAAAAAAAAAAAAAAAAAAAAfPPxATIAAAAAAAAAAAAAAAAAAAAAAAC4QnyADAAAAAAAAAAAAAAAAAAAAAAAAK4QHyADAAAAAAAAAAAAAAAAAAAAAACAK8QHyAAAAAAAAAAAAAAAAAAAAAAAAOAK8QEyAAAAAAAAAAAAAAAAAAAAAAAAuEJ8gAwAAAAAAAAAAAAAAAAAAAAAAACukO0f//f+k/t+dPPZZ0OGv+MDT4bU80062cc/0pTm2vUbIfXufhdShzv3Qupue57yDkMuWE4+P0sHX6Y5pB7mlFpVw5B+YYxfkJvjwbuLrnETH2e8K/OUcu7O0pEPh0M8b51tU024HNJNuXXrVki9d3GRT72P13UrVsJheCWkzks69Kc++alYrhqWlLqJj3Ka0qm321wN6iLetO32LKQellRFz3fpQVdVxexTrP9jbDyH/T6kDrGOVdVut33kU//qb/u2dOp84qr3PP9cSP3O7/g1IfVynx7lSy++mE998+bNkHrjscdC6jPPvCek3r13O6Tmjq6qrp2lSthU4E3KO26aBzLNsWXGXrgbmHIlbO7JXKlg8z5l38T6P26b1jHksSPescMhpY5jc9WHfc6emm0eyscx9ZNL124Pcchc4ugwLenUmzhcVjd2zLGPHTbpWU9LPHTVEG/auEnZz2PTy0P5EGtRdffkxuPXQurFvTR27PeX+dRzXQ+p0yFWwnhPptjkz89S5a+q7bb5hXTq2Hb2cbStqutxJrAsKfsc2143y63XXns9Zc9d9JCGvDnOu8b4sKpqF+/J3Ys7IXWKvc3YzTLOdmnJcxnr/9kTqe3sD03ryEPLEpPzdeVR6fLQVNFdrEjdFCVW0bGpCVVx6Im5l5icx502+9uYroYjx+MObV8UpzcnLA2akrVVtLmw/DhS6iYPWt3DyAfPc9G5PXWc1G02ed6VKmE3AW/m2F39T/WkyRu3btrsl5epJ9zFFc3SLYjyhkC3N5SHvO55xLJtYtObT6iih7nZVtrE61q64Tjop8EnVNHc0eW7vXQPK1eTJQ63Jyx8v/ILp9yTpv5nU2z1Y5wGD3G22VTgXKyqqnTq/WUe1PJeWTO9yZ1Zfhx3794NqXkeW90eeL5rh1iLNmNK3S+p2FX1+OOPh9SLu2nPKm8h5j2Q6tYO+XG0G+zZEKej+8umIqUjx4fVzMq6ipR3uadD2rpfuj/Vk7d3tnkHJuZd4k5FN7DUEGv49jzPIlI9mbvx9BBXTE2rjze0fWF3fh6XxndTyXMHvon7XZttU7DDlCZ1uZrt4iT50K3UDlN6HHlHN8t3rLpamjcYszyeNlOjrkvJk+T9FGtR99ZsiT38GGtCvt/NOq6bZeRd7lPeJC59Hcsri3hdJ+xyVLWLxHRP8ruSMW7OtF1ZridN7jxna8Meml9oangwV9NZ5YaZl7d5l3uOzTY/6Koacj2Lc+yh4jvlfOLuxcEbb7wRUg9LHKynPO+KxeoeVr5jeWuzmwU3q/IxTn5yl3C5b6Y3j7/vfSH1k5//hZD6nd/560LqL3z+B0LqPsfWVH34wx8OqZvN3w6plzHAZT3uiB8r8WMPOrj4sRXxY2vix9bEj62JHztC/Nj61OLH1tnFj62IH1sTP7YmfmxN/Nia+LFjqeLH1gcWP3Y/8WNHUsWPHSV+bEX82LFfED+2Jn5snZwSxY+tiR87kip+bH1w8WMr4sfWxI+tiR87cmTxY0dOK37sCPFja+LH1sSPrf1Kxo89+qQBAAAAAAAAAAAAAAAAAAAAAAAAeNfxATIAAAAAAAAAAAAAAAAAAAAAAAC4QnyADAAAAAAAAAAAAAAAAAAAAAAAAK4QHyADAAAAAAAAAAAAAAAAAAAAAACAK8QHyAAAAAAAAAAAAAAAAAAAAAAAAOAK8QEyAAAAAAAAAAAAAAAAAAAAAAAAuEJ8gAwAAAAAAAAAAAAAAAAAAAAAAACukO3f+uRn7/vRzc//YsjwQz+5CamPPXYzpN78Gz+bS/Pie18IqU888URI/diTZyH1I4e7IXU/XeSC7Xa7kPr000+G1Gneh9TtdptPnU3TElKHIX1gbhi6g+8PIXXcpJpQSyrYfEipVU3J9vt0SzebdEvzoxyH5nEsseT7+KzHIeUdh3g/u08FzvGG15Ju6Tyno985pGpQVbvteUg9HKZUrvis7x0u86nPzlKrv3eRHkcN8WGN8Y4vc0rt2s4h3tIf+uEfCanznNtO03r+87/4V0LqMqbMZ7FlVdW9fXpe59vU9OZK9f9wmbro3XmqBlW1iZ3d4ZD7k1Sw7XlzT+7eTSV/6aWXQuoHXnpfSH3iiTTaPv/887lgN2+m7B/+2IdD6v4iXdSHP/ihfOqnn306pG7HdEunOfYJXQdelZpPHo73uT+pVL1rbHqMPObNMXkc49jRjadT7FJy/R/iDd9PzVVvhvQLl7EXHeY0suRB7caNa7lguf+/yINafBxn17o5Rhysh00cyuPAlOvJLg6mVVVLuuo8F821qPJoW7WPXXTFmdV2l0597969fOqzOGPM88m3br8ZUq9vUyXcXzaTn8OUHscQh7ybcaU2dmuD3dmNkLqJ92SJfVlcslRVjbE3Gw6p/g/blHeJU+hmvVO1xMcxxpHlckod3TZ2ZVVVFa86Ps15zj1Gc+LmpsWhfI4deB62Dt3SoFsy5Rr+6PWkmrVvjXGOPcT5yYkFyzf87CzOz2PeIdbAqhri8rbZaojD1hTbXVXlKV9+HPmG50lCW7C8P5PXtlN81u220hJbfVODY38Sh+Je7o663ibdz223h9K1niZ3SBu7I7ctN8gbAl31buSC9XsRj3rkt/MLj5y3PXIzx4iPs7kl+XF09zO361PaTp7HVtebjXFr6MaNNF1sH0eewGT54MMJ04CqevONNL2/+fj1kHr3blp3THENWFXXtungeYMxT+rySF1VU5ysnvJXbXIda6todspMtZVnR/spTVbzgmgTN1iWrsfIi8Q5VrNxiLscXRXNzyu/pqklb7/nM9ccdyrys85rsTyUn5+lVtlaYrFz916bpt1t4i3NE8J85rZ/zr8wxJIvcVupWUx1E6+mK4vz9yVutU3NK85Gnsrmt2bNhLA7dbdZHG9KfNB5h6Sq5vg0d7u0IMo98NtYGjcL2G9Q3mZftNsQO2UF2k+D48GHE1Z67XxuiQfP9yQv9A4xdR6bKjrtY8HiLcmdzdCvT+Nti01vu417+3GgP8Rwi+oaZq5lue3k1xlVtY3Np1kQ5RcW3aD2pYt06ldeSUuDz53/Qkh96cXnQur1x9Jiqqo++ws/H1Kb4JnYAy+riZf4sRI/9qCDix9bET+2Jn5sTfzYmvixNfFja+LH1sSPHTm1+LEV8WNr4sfWxI+tiR9bEz+2Jn7sWLHEj91P/NgjED/2sMSPPWxe8WNr4seOp0fix44ePmePRxY/dj/xY8dS85nFjx1LFz+2In5sTfzYwxI/9rDEjx3JK35snSp+bOWbKn7s0ef6AAAAAAAAAAAAAAAAAAAAAAAAwLuOD5ABAAAAAAAAAAAAAAAAAAAAAADAFeIDZAAAAAAAAAAAAAAAAAAAAAAAAHCF+AAZAAAAAAAAAAAAAAAAAAAAAAAAXCE+QAYAAAAAAAAAAAAAAAAAAAAAAABXiA+QAQAAAAAAAAAAAAAAAAAAAAAAwBWy3Q7TfT+6c2cfMmw2m5B6587dkPpqDbk0v/C5z4fU69evh9S/MaaPqY3XdiH1ucdv5oItcyr52dlZOnUs2DAs+dTTlB7H9ixd1zzP6cgpsapqGOJV79KpD4dDSL28vAypuY5V1WabCna4yFedUne7bT71MqenuezTw1rio56WdMeqe1i1pHsyD6lg+1jsXXzQ1T3NJbb6Jd6U3Haq6s69fMPjPZnzqVPeWAGrqg7z/f3q1xqGdF2HQ6zA1fQYm3jD8y1dYuu4t08Puqqm+DQvp3RPaoj1Pz7KfawGVZXLnWvZYUkHb+9JvuE/93M/F1J//rOfC6m5fx67Ojr0fUo4dXrQZ9umF93HmjDG0XaKlzU2jaNqSFc9jmnomXPLilX06WeezOXanadZxIsvvhhSP/j+94fU5557Lp86V9GPfOxjIfXZp58Oqds4Naqqj3384yH1scceD6nnsZrdvbgIqbtNM7JcHOK8K3bgJ9rHTjh373FMqyFW0Xv72AP3Vx0PfhGXFd39HLepYeYZ47RP93PbTW9yh5NPffNGqsC53W1jh1BVYzz13Xu3Q+pmmw7eTvlqSU3vEOeTc54Hb5qx4xDXLflxjEtci8XHMXfDZR56tnnsiO122bSLxDzbTNmnWLCzah5Hnsru4+xot0uVMC8N8nnb7Nk8p54wds9VXbvO646K0/t8TXlCWN2C6LQ71v1GrMO53Ic4Fi/dnG+IPXh30bkSpiO3jyOn53oyxHLn5WdV5W2nXPIl9oTDaX/VoDn1kuvZoz+sqprjTTuldbyNmpB3KvKapduMeNTzfuVXQlp+HHksPuV+Vrv4jT1wHi6rmmn0Emt4fhyH+Cjbh5E3fx69HpxcRZtmG6+6rQm5/udW3+x35a6suyfXb5yH1Fu3boXUzZhn4M28697tOyF1bvqElHoRF851WoeT+4Smx+gOfkqXssR9ofaC82C9i9d1OaXZZl7ltTvkh1iwqRnKUyUcu1dXcbLZNK5cCfMbt6o6HPJWc9xgjFmXJS61qtlCyRuMuf7Oc5oGj/HNVHvwQ9O95wHxpFcSeTjebdJeRK4n3V5CNdPk8dF3yMeuzxjyDmReJOYJYTxzN4VunmXO3XRHm259GmdW3TQgviGKfWxVbYe4oxVfZ+cBMXd0+26lts0vp+LeZt4kaceO+B6mxjhiTrE7al/xN+9Pc+a4y5dXecPQFKxyDx9rQjOpG5sq+vgTaTN5F3fIcwU+28ZGH8es6hpmt6I/KQCgGeizbj8gJz91PT3Nx7YpFOratfRKbrdLJXv1S6/mgs3xVcv1uOl65zKNp+udNvFjJX7sAcSPrYkfWxM/tiZ+bE382Jr4sTXxY2vix9bEj62JH1sTP7YmfmxN/Nia+LFjqU128WNHiB878gspVfzYkVOLH1sRHGK+cQAAIABJREFUP7YmfuxhiR9bEz92lPixNfFja+LH1sSPrYkfO0L82Ir4sTXxY0eIH1sRP3aE+LGVh40f+wa+BgMAAAAAAAAAAAAAAAAAAAAAAAC+2fgAGQAAAAAAAAAAAAAAAAAAAAAAAFwhPkAGAAAAAAAAAAAAAAAAAAAAAAAAV4gPkAEAAAAAAAAAAAAAAAAAAAAAAMAV4gNkAAAAAAAAAAAAAAAAAAAAAAAAcIX4ABkAAAAAAAAAAAAAAAAAAAAAAABcIT5ABgAAAAAAAAAAAAAAAAAAAAAAAFfItobNfT8a4kfJpnkOqcuypLxj872zZT+F1IuYWkMq2PzWEFK/+OXX05GrakzXdePGjZg5FexwSKlVtdvtQurFxUVI3W63IXWsdE9a+dRjfNabeFFDutlVVfMUq1msotPhkE49NvfkcEL2YUmpl5ep2MPQFCzf8IrPerc7j6funkdul5Wyz7l1TE3rGOJ15XvW3bFk31bR+Av5xHPM3NaEfeyEU8OrmuOx44G/IuWfYk0YYqPORz4sTT3Jfd0SLztfdfc0ah8Hpq4upKPPqXev+dA8rdyshzwPiI/y7p00NFTV7vwspG5iwQ6xe28b9SZe1z52OLnp5dQvvfJ6LFfNcxpZPv/5l0Pq3/ybPxhSN/FhVdUy3j8J/GWpsQE0N7xrHnN8mptNKlg+dB622nqSrzoXe96nR/nU00/kU7/3ve8NqU8++WRIfebp50Lqc+9NqY8/+VQsVz1+LU10P/ih94fUj3/84yH16Wefzaf+03/6z4TUX/XRj4XUj3zkIyH1Pc83p86to5mBxOnNuInz835+kqroYzdSPcnd+9J9mXq/pDlfHvE28aqXbkGUFzVTnAnk6c0YG3XF2XtVzdtUT/ZTXDjkkSUXrJN70XlOj3JuZi+tPLPKk/9Yx05bveZ7kgu2dDVhH2/ppmlc/ST7QaZ4x+q0CUweENtVyXzIq8RHL9jQXHTN8ZZuTpj8dJq2syyPXhOaG96WOs6Ocv1vGnXeDugWPN1q69FnZac9yspPs+0TmkPHkndX/ehtJ5/3RPmGt4+juyePfsPbfrLZGo07FXmOkXcIl7xt1K3Zl7h6bR5HN9Dn65pjj5F62JPXYlkuWO4n23ty+/btkJq37uf4sOa4z1xV18/Snu2di3shddqkZ/k2HkeuZo/epeRTX15e5uybmL3pCeO6o+1tujl2ypsPnjurt9GL7kPquHr998vyxlMf4hqwur2f7TZ3lOmWXVze7U6dZ4yP/qy3TaNumm2eEnZzp5PmGLmqbJtJXdLOIpb4/jQ2nWZ9OubxtBs3cvZuuZR6m3aOkQfr3BM2PcYJPXC1k5DmDVGcY8RXnFU157VcrCj5jm27QS2vT3P3np918yo8No3q3gbWmHbDmuli1zzy9GdpeoXUE3azmxrzpmuu4c2rq2RempJtNvn9UbcZ8WDbeOSquhcjLvaxAi9xsJ6HvBF90riT5UnCievT/T7NGPOrwLxrVFXXDl8KqU9ei5PkQ5rAXD9Pc4y33ryTC3bxZjr4EN8zzs1rr/XhxI+JH3sU4sceNrv4sTXxY0fyih97yCOLHzuSKn7s6MHFj62IH1sTP3bkF8SPrYgfO3Jw8WMr4sfWxI8dPXw+eCB+7PipxY8dyS9+7GGJH3s44sfWxI+tiR87kip+bEX82Jr4sQecWvzY6uDixx4yu/ixY+eOecWPPWTBxI8dJX5sTfzYwxI/tvb1jR979JYGAAAAAAAAAAAAAAAAAAAAAAAAvOv4ABkAAAAAAAAAAAAAAAAAAAAAAABcIT5ABgAAAAAAAAAAAAAAAAAAAAAAAFeID5ABAAAAAAAAAAAAAAAAAAAAAADAFeIDZAAAAAAAAAAAAAAAAAAAAAAAAHCF+AAZAAAAAAAAAAAAAAAAAAAAAAAAXCE+QAYAAAAAAAAAAAAAAAAAAAAAAABXyPb9H3jxvh/9ws9/LmQYtruQenl5mfIuQy7Nsl1C6lRzypuy1hCTl2WK5ar8pbbf8Tv+/pB6OOxD6m6X7mdVVaWbNo6pYJvNJqRO+0M+8WaTDr7EWzrNqSYszZfv0oOuqm28rlywH/3xHwmpw9B9km9MBx+mlDov6brOzs5Car6oqlpi45rn9KyHITfMptnmm5YLPsZidwXrihYf5jTlVh/LPXVtZ0wlWypV4HzqriI05jk2rliuYWlaxxRLvoklzzW8rQhZzr7kh5Xv+Nw8jyF20flxHCo228NJbWeO6ZvYOvLBt+M2n7r26aqbwXjMnX9z1Zex5ebxND/rJVb+eejqSexFp0NsWbGnO+SurGoY4swq5l3ygNg129y2LuLcaROPPsdZRJ4atb9wcZEndan+v/bmnXzqV17/ZCpYrKF5ZjXEh1Vd9z7G7Nt46tzHNqNS2+HEVckS511tPzk2E93Un+Tr2oyp2E899VQsV33kIx8JqY/dvB5Sbz7xREj9aDxyVV1/7GZI/cD73xdSv+3bvi2kPvlUKlhVXX/sRkjNc+ztJjXM/RxHnnagj6njLnfvebRtGmau4WMcMeOau28d0xRbbsy9z1cdz7uPQ0P1fULK22wmnNpjpKtuZiB5adBO+WL2MT/JZgLT7e00OzD51PHg/Rrx0YeeJTa9Md7PKe4GVDfvyledd8PGrscY8lQ2z6ziHRu7mVX1u20PzhoryjynPiEvxKoqdqKNphbFyU91U9lTlvy5YG9jfv7om655Tvc2drTys84Fy71Nc+r5hDs+xTvWrjsaJ9yTPLJcXnbL7m1ed6emd4g9cFsJ97Ej3eV+Ms5PmsfRlSxP4LfbNNvcnKdT37l9L596OE9l2zRDXjry/nCRT30Wl7d5B2aJQ96c83aLxCm2jvysu7bTTm9yB/7om2l59t4vnOOW7invBZaYt6qWKWXfN8Nt7DH6oTyVbclLufismz3wdlBrttPiXnEei9v16QmTuqXZlD3pD1nlvc3m5Wyuos0rnmZMnJfYOuIu99z1GHmR2LbroO0nm+ybR7+lmxPeR1d1A+4p74C6vc2KA1M2bh/9rUH3WqBZyuXtxxq6FzHRKfPJMc/Kun6yWZ/mDZap2RoK8hZgdd1RM6TluIXu3HEi0LzvyCPmKZsz1bXaXE8OsfPvdsOalVpXyfLytTn1m2+8GVKff89zIfXW7fQO6Muv3w6pr3w5l6uuxy3d03Y+7/+J+LESP/bA7OLHVsSPHckufux+4seOHFv82Dq3+LEV8WNr4sfWxI+tiR87cmrxYyvix9bEjx07tfix+4kfO5qeTy1+7EjBxI89JPFjD0v82COcWvzYkezix9bZxY+tiB87lip+7H7ix46eO6SJHztC/NiK+LEjxI89PPFjx04tfmx1cPFjK1ckfuykgR8AAAAAAAAAAAAAAAAAAAAAAAB4d/EBMgAAAAAAAAAAAAAAAAAAAAAAALhCfIAMAAAAAAAAAAAAAAAAAAAAAAAArhAfIAMAAAAAAAAAAAAAAAAAAAAAAIArxAfIAAAAAAAAAAAAAAAAAAAAAAAA4ArxATIAAAAAAAAAAAAAAAAAAAAAAAC4Qra3b92570fTNIUM87yE1HGMXzRLWb9y8JQ6jJuY3B39wQ7piquqxs0QUm+99VZIneenQurSlXqJv5Fv+Nzc0ObUuSZstulxDPnbdktKPUzNTVmGVPSxYj2ZU97D/jKfuuLB711ehNSz7Tak5oc1xEuuqmVM2TdDKnauY+2p83cMxzFlP/HU+ablCjwOsYrmx7GJdaypZW1PGKt37mOrhtgTLlO6rjmmjkvzOMZNKls+dX7WuZ9s78kS7/iS+8klFrvrRvNNy9nHMfUYuZ9bukGtq4Mp/7KNTb7rwE+Ra1HFUamqlvg4upqQjxzrWDc/mdvx+MGGSsXOBauqYcydcGzUh9iftKfepBo+xpHlELv3Ic5Ul01TsP0Yx44pz7viqdt5cBwxc/U/xdJ1GUNsXFNsO/ma2/5iE+/JYb8PqXM8/C52ZXXaxGy3uxZScwX+0muvx3LVK2/8cEjNBcuTnzxnq3bAnQ45e7A7azrwOmHyP+epURzoN7s4FldtYwd+EavoNi4NcmpVPffMMyH12vmNkPrSSy+F1N1ul0+93aWa8Gu/67tD6nueezakvv99H0h535PyVtUTTzweUq9deyKkxv77bSyI4qg3xdbRTYPTkbfdB+UvLu+lU8dFTV4a9AN9c12PPqq1jyOnT3nJk/OesOlUXcnzLCJfcx6Lq/vLA906L85P9s0s4pRb1tWyOCtrT3zCZkJTCbvafRlzb+NgfTik/mQTG3W7NOh3CR8sT5zexqkf/eBZe0nNUq5JTY9jySePC7GqpmXmguV6cuJW2xA7yjHu905zM13cxrJNS5pZjWOawMz5Yc1NV7Y5SwfPe+BDnKlOXTeZH8fde7dD6o3hZkiNG8n9qef4NmWbH0e84e0uX67hOXtuO3mSUFXbbZ4np2edV1vTlKr3ib1obvRdR9ccPL81a6Y3uWBxLK6qJY64m/gm8RCb3pwXie17gVOGrTgN2HStoxuOc8HyLKK5qFyRTrkn7Zlzcp7UZWOc/G/6WUZsHfHCTnsp3O3yHXL9T3mb117dPDg/rTzHaMQZSJ87v6aMx87FnuKYVVXD7iwePDbMOGy1Y0fuzfKMsWlZ7evsri6EtDyy5Lz55WmfvXnjfNoWSpz8XztP9WSOBdvlOtZ1z6fMnZqL7qc3sRPOw3F+sdtV0TtfeiOkvvrFV0PqIW4m/4Z//HeH1Dd++mdywX7o//3fhNRtfJxjbtSrRPFjJX7sAcSPHSN+bE382Cq3+LGHPLX4sSN5xY+tTy1+bEX82JEjix97SOLHjmcXP3bkF8SP3U/82Jr4sTXxY2vix9bEjx3JK35sRfzYwxI/tiZ+bE382COcWvzYMeLH7id+7GGJHztyZPFjK+LHjh1a/NgqVfzYOk382Pq84seOET9W3T4SAAAAAAAAAAAAAAAAAAAAAAAA8C3FB8gAAAAAAAAAAAAAAAAAAAAAAADgCvEBMgAAAAAAAAAAAAAAAAAAAAAAALhCfIAMAAAAAAAAAAAAAAAAAAAAAAAArhAfIAMAAAAAAAAAAAAAAAAAAAAAAIArxAfIAAAAAAAAAAAAAAAAAAAAAAAA4ArxATIAAAAAAAAAAAAAAAAAAAAAAAC4QrZf/PIX7/vRWW1ChstpjsdLeati3qqqJaQNNcS8KXUZ4qnzgauGORXsqWdupszxnixDOvJXfiWkTfMUUoclXdh2s80nnqZDSD1M+5C6GdO37faHi5C6xGJX1Rhr2TSle/LJT30qpF5/7LF86rt3L0PqtWvXQup8iA9riBV4aerJZtzF7KnY45hOPQwnfaYwlzxedM2x3VXVEJvPGEu+xO5os4l5c7mrllgJN/mWxsfR9qK5q8vG2Gxzy6qqcY4lb9p1ricxdW6uObeeXE+GIXbgXcPM17XE1OZZx6eRe+Bec9Wxs+rOPMaLzg8zN8w5z0+qNnmwj09z3KS8czuNiLbdqPeNk+vwHOcYuVHnQa2qKh882mxSFc3Vf2n62KrY1w05e27TbY8RG8AhT3Tjubdx5tSXK05glil2dNv0PMaYt6rmMd2TPIse4neWD12P0YyJc5okL4dYsLxa6rrRZUinzt3REHvRi35QSzZjWlkMS7rh3Uhem9wJD6mK5kc556XW0vRU+3jDt7uzkHqI3eCmGxo+9/IX0qnjQu/nP/+5fPAs9/D/n//6r4XUKdaEbe7eu1VJftbZHBv1mNef3Tw51/9xSA8rD3kX+7Ssrqr3vPBCSM0d+JNPPRVSX3rvc/nUm1gJP/TBD4bUD3zwAyH1gx/8cD71Cy+9FFJvPvFkSL12fh5Sd3FvZ6hUi6qbWeXFb96caWYgVVPs4bfxuppetF+zx5X1CUNPc0/6P7cQR8x41Usct/JWQ1Ut8ablKV++n1Oc3szd9mN+mLvm1HFq1D/oWPL4NPMqr11p7Ze0t5nrSR4b9nM8cluyWM1yox7jHWtWed0mYZ4cLWOqCc1iqttMG+MMZJ7TzucUh7zcDVbV9evXQ+rdu3dD6rikg2+76U0+eO6E86I8z8qqajukrebL+V7KO8URM9b/uRtPl1gLlyXNQHJ31E4mD4fY18W8m9xn5OrdbcnOscc4O0urksvL1Hba/nuJC9j8sPIMPE8mq+ryMh385mPpNU3e+ZnjZS/NwNHck2Zte4j7Qt3KOdfgvHE0tBPKfPA822xeOqRbOuXd9W5zcbfLb83yvmh8f9Rs7jQHPyU1z7varqzrCR/9Jc7bWBrEiW6cd+VHvcmvHLqnOcUXW9v8sGLLawMAlkPqhLfb2BOettTKv3DIrzhz2EPcSa638YI1GGJdyCET+ziOV9WY34vF+n/Yx/2uXTOobeIv5H3sMW6/58fRdv2nRAjMcZW3jTvJ1S2c89vAuJdW09LUhMtbaWB640up2R7i45gu0hT61Z/+ZC7Y9iy1nWefSGuW1758J6Su+yrxY13WKvFjx4gfWxM/duzU4sdWBxc/diw5pIkfO0L82Dqv+LGHJ37sCPFjK+LH1sSPrYkfWxM/tiZ+7MjBxY+tiB9bEz+2Jn5sTfzYkVOLHztyYPFj9xM/dpT4sTXxY8d+QfzY+hfEj91P/NjXN1X82Jr4sSNHFj+2In7sSGoulvixY65I/Nhp75gBAAAAAAAAAAAAAAAAAAAAAACAdxUfIAMAAAAAAAAAAAAAAAAAAAAAAIArxAfIAAAAAAAAAAAAAAAAAAAAAAAA4ArxATIAAAAAAAAAAAAAAAAAAAAAAAC4QnyADAAAAAAAAAAAAAAAAAAAAAAAAK4QHyADAAAAAAAAAAAAAAAAAAAAAACAK8QHyAAAAAAAAAAAAAAAAAAAAAAAAOAK2f72p56/70f/zVuvhwz/oxefC6l/60tfDql35k1TnOUQEud5CambTfqY2jyl045L8yG2ZTOH1PNr11LmOeXdx9Sq2l3bpmNP6Y5tNinv/rDPp94MQ0oe4tNcUt7NkAo2Ds09GeZ08DGWa4wXdRZrUVXd7Z5XMqQKPFQq2JCfRVWN6eA1x9bRtKzmkpclZR/H9Kyr8qmbq56mVLYxPs1pSp1CPnP7OLaxFh7iDd/F7miOd7u6njC7iP3J7uwsZ58OuTtKJZ9jo55PaXdVbet55FOPY3u301VvYxfdtax06q6a1Dg++g3PvWjFrqxNzwXL2sfRtdyUmh/HEFM3u9wN1nJI3VEudi5YTm2NcaAfmofVzazyLc0PK1bR3E/Oh6Y/2W4fvWFmfY+R5wm51ceRZYipccpW1T2O7TbVkzzatsYh3rRY8qaOtV9hjvdlihVhiVc9VJwGV1NFDydUwsM+Tf63290jH7mqpikdPE/q9vumnhwO3SoynTqnx/6kmoJtt6kiXV6mqVHOe+/yTj51nmPPcWSZhvywmpqQe7PDnK56if3JkLLWYewWifngJ6Re7rtT5540dsLjmB7WZXyUS+4kq7748pdSueIuyWuvvR5SP/XJT+VTD3FQq+m/Comb2G6XbrqYz9zkjpnzyJI3napqu4vr03jwaX+Zjrw5z6c+TCl7nvxfi/tdzzzzTD71e9/73pB6FteYH/3Ixx8574c++pFcsPe9730h9aWX3h9Sd2epn3zu2eae5KFnyVuIlxfpuLG32XYL41wJ8ww8T6EPsSurqiGuO3JPl2ebeZJcVZt46su4SZIno3loOLQ7n/G68wq03Q/IybkidYeOu2Hd0qAZT9uTP1huWReXTcE2ccDdblI/eYjzyfMbj+VTV6yE169fD6n7ODJt8gZ697w2m9QJz3lfNe4BXlykMau6/j/3sXkem2cgVXXr1q2Qen6ehuNcuff3Uvde3Wbv5WWcJ8QuOvei1683c4xlyVsoeUfr0Vd5VXV9FythnDtV3JLNr2mWqemplkrNNm6f1xJbR7/Hnd8QHeJUNr6ZPXRjy1nsUnIn2+xyxHclzaKjq+HNIjHXhO6enLJnm7ujvI7Lj7K6q56X1Ise4vu49q1ZnvJNcbBuHnXcnKyquSl5ytvtw8X1frsnFZtHrsD5NU27iZ2XgXnnP08X2z3wU1pHni0Occ6223avOPPK4oQ3LYfc+3fznzxJXuI+9RC3H9vXebld5+vKs832njR1+IT63y453nr9dki9dzfl/cytdPhv/6kfCqmvvvJqOnTV67GejEPeQoyHXjVq8WMlfuxB2cWPrYgfWxM/tiZ+bE382Jr4sSMHFz+2Prj4sTXxYyvix9bEjx3JK37sCPFj9xM/tiZ+bE382Jr4saPEjx0jfux+4seOHVr82MOf/MHEj62JH1sTP7YmfmxN/NhR4seO/IL4sSO/IH7sfuLHHjpV/NiK+LGHzSt+7IhVo370UAMAAAAAAAAAAAAAAAAAAAAAAADgXccHyAAAAAAAAAAAAAAAAAAAAAAAAOAK8QEyAAAAAAAAAAAAAAAAAAAAAAAAuEJ8gAwAAAAAAAAAAAAAAAAAAAAAAACuEB8gAwAAAAAAAAAAAAAAAAAAAAAAgCvEB8gAAAAAAAAAAAAAAAAAAAAAAADgCtk+9epr9/3osbMhZHj24iKk/ob4QbPz820uzX92L6XOy/LIqTWm1E2lS66qeZlD6q27t0LqM8NjqVz5xFXTNIXU3Sbe0jFe19xd9ZxOvYmnjve75iHdz8t9zFy13aWCxVLXq196NaQ+99x78qlff+MzITXXwcqp8Z60lkO67GFIz3qJ1btql089xJJP0z6mprzjuMmnHsfUgOY5HXyJT2t/yAXL5aphSCUfNyl1v093LBe7qpbD4ZELlmvwdLjMp94OqU84xIJt8+gQG/WwbepJPvUSK+GSe9FeqitTHHqGWM/GWLDc5OttVKR06s1J92Se8qkfvSfMHUJ1fd0Qcw9Lqmb5yPMhNeqqGnPDjPKzbmtCdko9eRuPMh18iM8jl2sT+9gTW8c4ps6qG227DnxJnd029ifLkA6+xGnZ0BVsjKfOo21+HK053pMx1pPc22y3TU2Y5jR27OJ15YlVMz2fm8dxSjXbjGlS1/XPjfyw5vm0z143XXSs//FxLJUe9Nz1GBdxcrSJA9M05Y6u7cDzHDs9jvPzVBOGIU68ugF3aVbWsZptUx+be5uqGmJP2OXNLat5HHl0GONVH+K6I29EdNsYTSc8xUn2IU5g8sy/2seR93Zysz1pftLNGDexep/WlR3SXlpt42A9V3qUXeOoZYitPk7bDvuU+oWXX8mn/vzLXwqpY3yaf/1v/u2QemI9yTUhV+CpOXfTMjdxPTXtU0VZ4kZc7vy33do293X5jl27dhZSn3jiqXzqbez/3/fCiyH1qaefCKnPP/98PvXZWWodL774Ukh96aWU+txzz4XUZ55NqVV1fv08pZ5dD6mHy7sp7/m1fOq8hXLvXjp4bnonNsws1/9NsxvWdqMpccirrTjlayf/h/gL3coipY7bZr83yxOzy3tpFpHnJ9ttUw3ys94fHn2ekI9cVbtd3O+NBW+msnEG0u5jNNP7WP3H2A1e7pt7kjdtm0a95GVe1zBjAzjE/d5NbLZLpWVenr1U1dzM0eN1xXoy573LqnFppujp4DF1272mye+Ach2e4vu8szj56d5wVl4y5SFvjC8d2jPnVp+b9SFuSS1xaNic1otOcfK/3eVGfdIb51P2e6vdTMvJefEas57U+VcN+S1PswyMHV2387nELqV5nRcfR3vVb6MBPeLBcx3MPVVVda/z8lvjk1pHnAjUEkueF3rd/LwZ6KdY8tww59jbtEuD5s1XbJpzDJnILzuq6unHnw6pv/j5z4fUO6/dH3b1tV7+6Z8JqW9eNPPz7/i2D4TU33A7LfR+5i/9aEhdvxYQP1bixx6ULn5sRfzYsYOLH7uf+LE18WNr4seOpj/ykcWPPWxqS/zYmvixNfFja+LHjqSKH1sRP3aE+LEV8WPHsoofW6WKH1sRP7Ymfuwo8WNHsosfO/ILKVH82Jr4sTXxY0eIHzuSKH7sfuLH1sSPHTu0+LH7iR9bEz92LFX82BHix+ptxC8BAAAAAAAAAAAAAAAAAAAAAAAA3zp8gAwAAAAAAAAAAAAAAAAAAAAAAACuEB8gAwAAAAAAAAAAAAAAAAAAAAAAgCvEB8gAAAAAAAAAAAAAAAAAAAAAAADgCvEBMgAAAAAAAAAAAAAAAAAAAAAAALhCfIAMAAAAAAAAAAAAAAAAAAAAAAAArhAfIAMAAAAAAAAAAAAAAAAAAAAAAIArZPvK2f3fILt3mEKG2/FwKWfVF6/vcmmWWxchddxuQuo8zyF1GNJ5D9MhlqvGdOZ64cX3htRcsO22uSc5e3YWD36Y8+OqqnTXlikVLN/QaVpC6m7TfBdvWFL2ZdqH1It9Sj07ax7HEGvSkh9WrIT5yPPSPKwx1tEl3rFxTDd8XtIdq6olX/SQDp4b5jQ1Vz3H7HVIJZsq3pOUWFOs/FU1VfqFcY41fI7njo+yqub4C/mG54aXq2h1ndVmk6ro4ZD6jGWJreOi68CHdE82se3k+9k8jK7p5UedG+YhZs53u5VPnQfM3a459XAWe9HYoQyx5eW7XW+jDufMIXGz2YbUZWnuSW47+XHELvZt9KJxOD7lji2xG6yqIQ6K3aTu0fO2ckWapsuQut2ex2N39yQ+zVywnJrvWD5vVS2xwzmpnnTNtske7+i4iVfdFTt3pE3Jm+nNozf56pptxSFvzn1sd0/yVW83aRbdDYjdqqS56Dyy5Myxj+1r6KN3OHny034ofIk3bRzTwHRxkab3Qx5u20443pOc997dtBuwiY26PXi+pV131NyTZUg9xilz7NwDL91sdLtNNWGK+zfb2Doul2YG3j2vdEuXMR287SeH3BPmeULsjc7Ozh79yFXLmO7JdMLS+LLrMfJNy3s7+dTjtmmYOXuuot0dzVcDLLy2AAAgAElEQVTdZD7EMTGvQPMScpqbLZRT5hhjXIw1ewl5Z7NqiDdtHzfT8shy63bq3qtqimPiZz/7CyE1N73drtnlOxzS9D4/jubgsWUNcYu7qqY80z1hft7OwJsqGjddl3jqXIuq6vHrN9LB46i3javy9774Qkh99ulncsGefc9zIfU9z6X3AkscWj70oQ/lU7/n2XTqx598IqS+9MKLIfX6jXS3q6riUN7Uk1h/t3FAvHPnbixW7fNGR+wTptzHdjOrZmJ2QsPcxvvZzzHitO0QW952jO+PxpO2lfKzWubU+bc7m90mSczbzBPinK1bAi55npwLFidWS/c67xBPvR3i0iCv2ZsXvzXGtylzfE2Tu/furUG7IEqto5kc5TdE8TV6tdsg8eibZlIXu7JmsG32rJptpeZVYLeHEhfO+e1qfqe8LN1m2glbzV01Sxc1dC+7szyLyG2nfSWRH2feEMhz0Xa7N78DOmW7OK9t++zxhm/y6BDHvDxJqKrtNu025M2EfRwdzmOgSHuzdydMUfJ279i1juZ9R3671OwBNjtaNaTHcfPDaWXxT/9PvyMd+Pa9kPo/+PivyeX6kf/vfxFSb+zSQD80Y979T0v8WIkfeyDxY6tTix9bH1z82JGDix+7n/ixYwdPecWPHckrfmxdLvFjD5m3JX7syMHFj61PLX5sRfzYwxI/tiZ+7MiRxY+tiB9bEz92NHfOLH5sTfzYmvixI9nFj62IH1sTP7YmfmxN/NiRRPFjK+LHjhxZ/Ng6r/ixdar4sUfILn5sRfzY2hWJHzup8wIAAAAAAAAAAAAAAAAAAAAAAADeXXyADAAAAAAAAAAAAAAAAAAAAAAAAK4QHyADAAAAAAAAAAAAAAAAAAAAAACAK8QHyAAAAAAAAAAAAAAAAAAAAAAAAOAK8QEyAAAAAAAAAAAAAAAAAAAAAAAAuEJ8gAwAAAAAAAAAAAAAAAAAAAAAAACuEB8gAwAAAAAAAAAAAAAAAAAAAAAAgCtk+8PTcN+PhouLkOHn9lNI/czdlHq4+2ZTnDF9EG1YcuY5pC0x7yaet6qGuv8ufa2b59dD6sXl7ZA6LanYVbXbbFPBYsnn+LAOc3Pq7bgJqZeHQ8ybCrbZpCPPh6Zg05xOPQzp4Pt7lyF1yRWlartJ1zXFWzodci1MeedYA6u7aZtNyj4MKXUcUg2sqkOlajbFh5mr/xDvdlUdYiXc7XY5c0jMXcJ+burJEi9smmL2pmF2X40c09Ocp/Swakj3ZDM2NaFOaJi5FnWdf3NPmoYZTz3Gq859UVXNseHOlS5sN6YKPC7xQS/xQVfVidlD3sums6o4ssRyNTVhnptib2MlHHI9iiVbcrk7zanjZe8vcwVuvzObDr7EmVUeymtpeow84ObUppscHr0CfyV/SotPq51FNJY4DY5j4hK79zzQ54uqqiVOUXJNmLpJXTafcE+28bqmPCB2TqkJeVnR9INVudnmguVD5yZf3brjlFs6xNlLdf3/fr8Pqefn5yF1jrOytknnpznHmjDGATHPcqtqjNP76RBHh9h2DvF+VtU2rk/zwnuIxT7EHiNPJqtqaSYw8eBxPplndFW1GdLBDzF1WOLqNW7O5OpdVRcx+5wLFqfB7fp0Wm00fa3cT45jSm33MfKol9csee6U7+fSVdFmshmvelPx4N09yeuOONg2XeE4n/RXDS4O6ZbmoTzf0XZpMMebNscl/3YbB8Ru9Li8TLtSsSLUHCvw2dm1kDot6bzV1f9DHFnyDGRfzciSH0eu/vmOHS6aqz5pVRIva8k14bJrtvGe5IeV827a7fVNetZz3u+KqdtuW+nW7bspOc6dxkrP+s1Pfiak/kx9Kp2324Fp8uZVeZwaVdcd5SFviTWh2TVtxXnXmPcAY95myOvmyZdTapm7bbrqa93MKs82H3/88XTwa6mLfuGFF0Lq9cfSkavq2llqXB/52MdCat4DfP7Z5/Kpbz75REj96Ic/HFLzS4ebTzRXvdudhdTLyzTHaHZ+4nLp7t078cg1Vl4upcT80mDoNp2mOP/Z59E2Lg3GbkU0nfByNi8s5tgnzEuzcM5L422shPng7YvdvIAd4nA85WV1fM942W3sL3EHZhPn2IdmVMpnrqp0S/O8K28/7i+67ccTtkbzdR2muMA8NDdlc5a6spw5TwOmWLA2+xzf7DaRCf36NIm9UfNSeYl1rC1YluvJ5ixO+boZeN4azZuuuTdq8nYjy5jHraZPiDs/3bbSIa/U8qnj05inZh/j05/4dEj9bf/cPxxS8/rzb/2nfz6kfuInfyrmrms303zybHorpOa38OvVq/ixEj/2AOLH1sSPrYkfWxM/duTY4sfWqeLHVsSPHUsWP3Y/8WNHsoofWxE/duzU+bjix+4nfuwo8WNr4sfWxI8dOXhMFT+2Jn5sTfzYmvixh80rfmxN/NijED+2In5sTfzYEeLHjpw6JYofO5JX/NiK+LE18WNHzit+bJ1X/Ngx4seqj0UAAAAAAAAAAAAAAAAAAAAAAAAAvoX4ABkAAAAAAAAAAAAAAAAAAAAAAABcIT5ABgAAAAAAAAAAAAAAAAAAAAAAAFeID5ABAAAAAAAAAAAAAAAAAAAAAADAFeIDZAAAAAAAAAAAAAAAAAAAAAAAAHCF+AAZAAAAAAAAAAAAAAAAAAAAAAAAXCHb6c7t+370wVpChl+zPQ+pv/7Zs5D62nSZS/OJ114NqR9++omQ+l+88kZIHTfpvOmCq6pqnueQOgxDSJ2mQ3f4LH0k7hAPPi3xyrbxplQdDungmzEVbImnnueUusS7XVVjPHXOvDnbhdRt96zOr10PqZeXt0Jqvic5dVhSHauqJV73PKfsm02sCUPTPsZKB8/XNcaWOU9dTYhFywXLV50vOrb4rxw8t46YOV9Vd+p81VPMvuQ71p17iVc9Lal1bYf0OA6H3APncjWG5tSx2LntdI9rkwefKSXmLuGwj5mrttttOnjsonMPvdulI1fVEtt109XFgtXYVIXYEdYQDz42A/1JVXSMA/28pINPsRa1jSNPYA6HVJGm2DA32+YTt/Gy2nnXo8/q8iW3hnhZ85x6jPbMQzx6OzsKTpnHtg5zqid5GpD7oqpqOtmom4F0VbQZrb9R2vM20+DYtPIM/G3ck0c/eKO76iE27FyR8lDenPe0enJKLWobZnPwZo59UvWeYpeSR8whDnn5fueBo6qWOI1Y4jxhjl3Ztp8Gp9Qp3vBtXHicbdMGS7P0rVriqTdx2nY4xDlG9yn7pseIFXjaxjqWp3Rd2XJNyJPRfOKp7W2abal0+H2sov2UL171Eid1J+5U5M4srzv2cUU05D2Qtgc+YcbYTMq6M29iTch7O+OY+oT9Ps9Fm3bb1OFmYMpLyKa3ytUs96Jdb9QsjbM8O9rv78bceZLQnDpXwmZCmHuMriaMscfIW827uC+0H9rHkQ6e98C3m9iBxyXktG9eWIxxtnnKw+prQryuPAPPe5v37nXD1gnLxDFuly1LrKLdTHXOs82Ymk99+87r+dR5ovvWW3dS5nhZn/rMz4fUfsmer3r+SyG1W0w1rWMXs+c7llclOW91i998XU0tmmJn1Q08zXgZm+359WshdYoDfVVN8Z488fjjIfXpZ55JeW/ezKd++umnQ+ruPD2OZ556NqQ+//zzqWBPpIuqqqefTtf10gsvhtQhDmpnZ3GlVnUtvknMI+bFxUVIzTOrPA1os4/5uuJLh7azOsTGNTb7os1LtXzqnH2JM8bcnzTFzsWqmi5Tu57jAfIcY+g3GPOqJGbPM5BuQ3eIc5S8mdCUq6n+7YAaX8TECpzfEM15ZKm6cyfNIna7FNjQ7Pxv41V320r7/T6kNtEF8WnlVV5VLflx5j3E/O4pTgiral5SPNJnf/xHQupL3/U9ITVvtf3YJ7+UC3bzZhz1ztO4Myy5s7r/nogfK/FjDzq4+LEV8WNr4seOHVz82OrU4sdWxI8dSRU/tiJ+bE382MMSP7Ymfuxhj1zix44RP3bkzOLHVsSPrYkfe9hTix87cmTxYyvix47mbtIj8WNr4seOHVz82P3Ejx07d0oUP/aweUv82NFfED92pGDixx4uu/ixNfFjR4gfO5IqfmxN/Nj93kXxY918BwAAAAAAAAAAAAAAAAAAAAAAAPgW4gNkAAAAAAAAAAAAAAAAAAAAAAAAcIX4ABkAAAAAAAAAAAAAAAAAAAAAAABcIT5ABgAAAAAAAAAAAAAAAAAAAAAAAFeID5ABAAAAAAAAAAAAAAAAAAAAAADAFeIDZAAAAAAAAAAAAAAAAAAAAAAAAHCF+AAZAAAAAAAAAAAAAAAAAAAAAAAAXCHb3bPP3fej/e03QoZP3X4rpH77zZsh9dVX05Gr6rueeCqk3nrltZD6T3/o/SH13/3cL4bUeR5iuaoq/cLZtfOQevtezLvZ5hNP8xxSN2P6hNwyTPHYzefnlkqnXmoJqZtNOvL+cEjJ3WfxhilfVyrYvE+n3k+X+dTX4rN+69atlHmTLmyIqePSVNFYTRr5Qc9Tup9VNcbWsYwx+5we5RKPXFXjJh08Z94O6YbfvXc3pLZ3exnSyYeYOsYKvMQm32YftruUOV7XFI9cVcsSTz2kTmHOHV3sUKZpnwuW60LOPo6pi56X3BdV7s5iRWgaZlUq2Gbb1JNcCbfb1NHt9/mOxd6/a9fLEsedTb5lTRWdLlPJd7t01XPsrHIFHrtmm7PnljXFx7GMTRVtyjbkRp0exyEP9F323Hb28XE0F9U22yl20bFd5lM3FbQqV/Dc4cxNy0on38X+uc2erzpX78vLZt7VNZ9csHRdXQ1sNM02D+Unnbk2SxxZYk3Ij3qMU6OqmqbUrvOwtcnjaTe1GsY8lKfW0cwiYvVemkVHbWJFyoNa7mPbsWOoOLOa4vS+mbO1w1a8abH+T3MctnLBYjWorg5f3r0IqduzVEUP3aqkDrkixXvS9MFJvmPVbRfkpXE2dov2udp58oPFct2L04Cq2m7T0xxjLzrHZtvVgyZ9OaFhbs7SOi4fuf+FvFOR94W6pfHUr5ge6BBHh23TT3aPIxc9bhLuxvQ4uk60NnGKMs2pAYxxLB/jqLTvntYQ60meReSLWuZm5zNP6qZYsLz4nQ7NVedJSJ5ZbfL0Pbadqdtqy5PVbiob90W7eVdOz6mHpovuJv+x6eUd8kPu/OPQkjfxqmpoli0p+xwbdbsJPjSr8jzHzrPNdljLVSWV/JAHtWZftLHEfnaIVz3H+9lu+OZFzRTvWNNsh1xPuoE+LjIP8Z5s4sbR0G61bfN22aPv3izdFCIvA7e7WEVjbzPGEbNtO/OSnmauCbfv3nnkvNXtjN65kw7+hS9+IaSO+Z1C1Xxo9+cffPC8NxlXvoe4TVHd0mCIbadptd3jmPP70zi1yo264lIr7wZU1WYb55PxeeSBvl2fnsWK9PwL7w2pjz/+REjdxouqqg9/6MMpe3xNfzOGPbznPanYTz75eCxXPf5kuq4PfuDDIfWJp1LeexdpD6SqznZxUZPnorFh5v65qlmB5snqdHEvpN67yB14U08Occq3iTOQ/T62jm7syLEHeT65PWHXtOZu5vUN25JtB/os79nmzmjsOqv/+q30C+97+eWQevtjt0Pq9fFaSH31bqoGVfXb//F/JKT++T/7H4TUvKxYz33Ej5X4sQdlFz+2In5sTfzYmvixI6cWP7YifuxIqvixFfFja+LHjqSKHzuSV/zYKlX82Dqv+LH1kcWPrYgfWxM/9gjp4scelvixNfFjR04tfuwI8WOrI4sfW59Y/NiRZPFj9xM/diRV/Ngx4sfWxI+tiR9bEz+2Jn5sTfzYkezix1a+vvFj7ZwcAAAAAAAAAAAAAAAAAAAAAAAA+NbhA2QAAAAAAAAAAAAAAAAAAAAAAABwhfgAGQAAAAAAAAAAAAAAAAAAAAAAAFwhPkAGAAAAAAAAAAAAAAAAAAAAAAAAV4gPkAEAAAAAAAAAAAAAAAAAAAAAAMAV4gNkAAAAAAAAAAAAAAAAAAAAAAAAcIX4ABkAAAAAAAAAAAAAAAAAAAAAAABcIdvD6kefv3E9ZPhcPNyP334zpG5upiNX1ad2KfXx6+ch9efvXuaDB+PYfIjt4uIipN56M171kA6+LEs+9TgMj5x9mlLqtubm1JtU8mmeHrlg23Gbjrzf54LFW1KHOV3X4bCu8r8k3+2qevzxmyH1S196JaTuxk1IXeZ0x4axKdgSn+YQr2s6xFN392Ra4qnjVw7neNVVzalz2eZYE9qmF7Q9Rj71YUqVsLnoQ3NPYi2ris224j1pa0K+pcOQUpfl0Tu6tyHXhEevRa181flhT1N6WPnI89y2nVOuKw4NsdhV1TyOWPDc9Iala5i7dPRhjPckPsk8qLUVOP9CTt3t4sypcxm7o22cwOQOvG+1Y/yNU7qjeFGbTe4lq2s9ed6V6n87dkzLo2fPXVl8kn2zzafO2XMFbu9JI1ait9EdxWOf0DDzdeU61owb3Swit448XaxYA6uawsX5YC1znPx8IzU1Ia53hm4umm02aXSY4w3fXzZ3LPf/zTQ4rizGrgefY9s7ZfHbtKw8S6iaYhUdtqn/bxYlbT8Zm94pa5Z8t8euijY1IebNY0dzx6qGuCzJBcuD9a77jP68TwefhjjHjgc/qUeomvLuTXwgy0VM7U7dbCvFGp47qyVXlKpN7mbzoiTWs0MeWboeI1fCIRZ7uYzd4FkzP7+4cydlj/U/z2Qv4n5Xa5uPPsXpTayFc96IaPuEbTp13uWbDt3KN687mhn4o69Zuv2Vpg7n6+q66C453rNmUIuPut1WypoqmvvY3OTbgp3wNPOu0hBHpapa4kbHmOfnzbq56THykn/Yxhuep3zxvO3jmGP/32y/xwVRLnZVHeb0zmKIdyx374cpHbldOB/iTR3iYL2PL2Lyzk1Vjd1OdbCNy6X87qm6Tvgy9pM576Z5H9duoaTryhW8O3hTE3JNabZV8/uju2n2UlVL7mbjqTd5tK28Q97UwDu374bUXZxj5GbbzsDnvIqMJT9puywP5FWV377GTasx3pMpPqyq2u9TB/7Tn/zZkHqeW1a33/sTP/YTIbV5axxPnV92bDbN0mBa4i5fNdcV855kjk9zt03RGm3DHHdnITX3hNdj3nsxluPJJ57IBXviySdD6uW91HgOcdjanKViV9Vrr72aDh6r6OVlCo+5HkNr2pc4uQrmGUi3B3jiu9e8Bx53Obrm8fpyO6T+1I+lzurl22+F1E//1C+E1HF8Phfs+fe8J6TevpWK3fQnq90Z8WMlfuxBpxY/tiJ+7Eh28WMPeWrxY8fyih+7n/ixIycWP7YifuwI8WMr4sce5djix44cXfzYwxE/duTU4sfWpxY/tiJ+bE382Jr4sSNHFj+2In7s6KGbZPFjx37jURPFjx0hfuzIkcWPrYgfO3rs7tQ5VfzY/cSPHSF+bEX82Jr4sTXxY8cOLn7sfu+i+LHTXtsAAAAAAAAAAAAAAAAAAAAAAAAA7yo+QAYAAAAAAAAAAAAAAAAAAAAAAABXiA+QAQAAAAAAAAAAAAAAAAAAAAAAwBXiA2QAAAAAAAAAAAAAAAAAAAAAAABwhfgAGQAAAAAAAAAAAAAAAAAAAAAAAFwhPkAGAAAAAAAAAAAAAAAAAAAAAAAAV8j2/LGz+360f+si5RiGmJi+aDbH1Kp66+IQUu+en6e8r3w5HXqzCYnzYYnlqnG3DanDZhdSpzt3Ut504Kqq7S6VfBtPvdScDj00V33YX4bU3S6eekkHz/VgjJdcVffu3QupQzz89jwV++Ktu/nUm1z0OVXgfN1TPvHUpC/xUW926dRLbJjj1NSTpdIvxA6jpiUlj2PMXDXEoy9zKtjU3dJ43ni7q+b4C7lguZKN+YZWzXO+rliw3GzHrrfKJ45XvVSsCfGq56l5HHnk6WpRc8OzZUh9wrYZAGLBYutYuh5lE0+da8Iyphs+5OpdtY+/sIn1/3BI85Nx24wduTe7uEypcxwxt5v7p1K/7Lyxk6yqKRYs3/A55j3r7knFss25beWesGs6c/6NJbWdeUnX1XSTzUhdFQemXOohtqyuf24scaRfxjj5qTT5mau5J838PVfw2IvOTSVrjJvYE8bWMcY71jqp5HEGkmdlVVWxi86DWnfgbkGUF3oxe+5F45OsOm3alp/10M0isinftHjVefbeupxSy81PczvHR9nNwDdxUZNPndtOrsBT2+5yep7exKxtj3GIVfSUhplrUV5MVdUY1+x5jj3lu9K1ynGJi5oxDeW5dbT9d57A51NPsRrNh5Ta1pP8tMZ4v+d4U9pTX077kHoWt5XGig+rGzv2F2kCvzlhjZmXgW3BsiFmn+JMddinu13tCjSe+vIybdPlScQUK3BVTc2GVyx2rt/tHCOe+nIfH0e8rmZftGq7TZVwjOuOPD9pHnQ7Mpywo3XKhm2dVkVz29nEzfmqmuJibYi5t3mzOU8Iux3yfM/y9CZ30e3jyGPiIXZHebnUaiYwebWV56Kx3bVLrWbEzI8j3pOh2wPPt6RZGedpcJ5gn7ZwyLtS3Qy63dGK2eNV5w48z8qqmk2rfEvzdm/e2myX7Pt9enXVTIOXPLK0+xiPvl0w7WN/sk0jS3VT9Okydu95ZhWni3PcNa3uReRmSTu60/6kfbxDN/UKtttH78DbenI2pKd5iJWw4mZCbndVdYhVdJzj7mWcB+yWZllx996jv7rNw2nu3pcldQitaYwNs3nN2My75tyDx53/e5WWPO0eSF6f7sZUE97MGxWxP3n99TdjuarqF9LB40u3JcaZ3LloFonTnH7hxvXrsWDp1Ic8XHaTjCH2GM3IErcuh1yDq/Kg1q1KTnol8Yf/t/+TkPo3/9N/L6R+/Nu/PaT+6H/3mZD6oZea0faNL38ppL73mfeG1Hn5fEgdV+t98WMlfuwBxI+tiR87kl382Ir4sSMnFj+2In7sSMHEj62IHzuSV/zYOlX82Ir4sYclfuwRiB972FOLH3to4seO5M1nFj92hPixhyV+7OjhQ5r4sTXxY2vix44dWfzY/cSPHTmy+LGjxI8dO0DMLn7sfuLH1sSPrYkfWxM/tiZ+7EjBxI+tvIvix056dwIAAAAAAAAAAAAAAAAAAAAAAAC8u/gAGQAAAAAAAAAAAAAAAAAAAAAAAFwhPkAGAAAAAAAAAAAAAAAAAAAAAAAAV4gPkAEAAAAAAAAAAAAAAAAAAAAAAMAV4gNkAAAAAAAAAAAAAAAAAAAAAAAAcIX4ABkAAAAAAAAAAAAAAAAAAAAAAABcIT5ABgAAAAAAAAAAAAAAAAAAAAAAAFfI9tZbb973o2EYQobNJn2z7DBPIXWZ97k042abDn6I2YclHjtd1DikYldVjZuQuB1TsffblLc1z3NIPVS+pSlvPnJ1NWFZ0g3Pqft9KvZmk85bVdttuuEXF+ng05Su+sb1G/nUt27fCan5juXbPQ6pZS2x2NXdk9w4htxsl+Zx5Gc9TV3jerC5OXON8bqWJV9XSt1sUrO9OFzEctUY+4SKNXyO93NeumY7Nr+Q8g7pqk/sMZr+JFbCaYpHzvWgalli44q3dKiTOvDcfA6xZY5zc13BEPuTqtrHhjnkLiNe1Nto8HEWcUgHGMd4Py8P+cTbeFsup5Q9N+r94TKktoNa1/TS48gt6/LQ3JM8O5ri81xOqKJfOUBIG2KzzZ/PzXOMXZzRVdXcdFapx9gMuZ9s7tg4pgvLNaFiL3qZx52ue+962ZQ9TxJa+XnlOUZzxzr5tuSHdWgG60evY1U15wlMHDHHeD/j3KeqKjaOOsQOZxNXeXl+Xt03s6fYuJaYespo2zrs46gYR9vcvVfVEjv4JY6Y9+KwlYfLqjrEdp1n0acsDXK7O1Eznl6mO1anla3phHNF6OrvKZ3wN/SG58E6P46xm1nlPjiPDrmKDnFvZzmhelffi57UsuZYVy6nPJU96dRTnKLklUWWl1onTgNyH5wnydvYA1dVHMmbDnyJy6Xcn2x3zUh/iDdtnk5Znzb3ZLp49ErYdXRNV3Y5pe5oWVLBcj95Yi+aryvvAea8+X5W1x2dol13bOK6O1/XECe6Yxwb8nSxupK3NTxo60kuWe6EuwHxpF2+XJHywXNqO3tp6nCeY8c+YbvrHmUcepoqekI96e9JTG3WtvngXbHzdeWFQ9a+DckvDjZ5kRgPvuTNmUNzUUMcyuc5bz+mU7cL56x5mN12WXY4xLI1U7546tyVtfUktvr8SuKQ+8nTetHslIVz22PcrrshdYx3PPfA7SXn7uiUg4+7+D6uqk7Y+b9sOv/8nnGXy5Wrf37XN+d3T3kh1o+n8ZVc3saILzuqatfsgeelcbyl8aJzR1VVc9zHy/sYeXMyv9iqqs2Yruv67jyk5v3zPNcc43nrbcwYg+6lcJM9d2bd1lBcGlfTY/y1P/PnQ+q969dC6s/8xCdD6kc/8EJIffLFZ3PBdm+9EVLf+vIXQuoYG+ZhtS4WP1bixx5A/Nia+LFjvyB+7H7ixx42VfzYmvixIznFjx3JK37sfuLH1sSPPQLxY2vixx6W+LE18WNr4sfWxI+tiR87klX82Ir4sWPEj91P/NiRI4sfO0b82BHix46kix+7n/ixI8SPPSTxYw97cPFja+LH1sSPHUkVP3aM+LFqF9IAAAAAAAAAAAAAAAAAAAAAAADAtxIfIAMAAAAAAAAAAAAAAAAAAAAAAIArxAfIAAAAAAAAAAAAAAAAAAAAAAAA4ArxATIAAAAAAAAAAAAAAAAAAAAAAAC4QnyADAAAAAAAAAAAAAAAAAAAAAAAAK4QHyADAAAAAAAAAAAAAAAAAAAAAACAK8QHyAAAAAAAAAAAAAAAAAAAAAAAAOAK2f5r//ofvu9Ht2+/FTL88X/zT4TUz+KdfskAACAASURBVL/8i/Fs21yay4uLkLosKe8wpuRxmULqYYjFqhqHdPDDfAipSz742H0DLl71Mse8Qzr3EFOraol3fIq3dBg2IXWzSan7KVWDqjrlw3nnm1QJ712kR1lVm/i8nnjs8ZD61p07IXWu9DiW7mHNc6oKm9j0pph3zFWwM+Trigffdg86V9FcCccxFiweeTs0XdmU286wjwVLV71M7eNI2XM9WmKH0tXB5qblZ12xngzxYbWGIXVW85z7yVPO3Mg3fIn9ZG62b6OWpAsbh1SLpindz1yBq2qJY0csV+Ws45juWFVNsfnkMTGnLvGipykP1U32OLupQ+WxuHkcQ55GxKc5N/Ob5qrz9GiI864l3tKmEsYjV9USSz7GmnCIraO9J2PsRTfxjjWT5OWEmWrX6pc5jph5UOu6q8t8YTE1P6zL/WU+9SZ2KVOc/OfeJs9u2mab+4Q8P59ik58PzePIc6cxXth+nyY/Q37QVfvcY8SCHeKpt93YcZpUsHnOHXg3+Y/NZ4zT4Lxw2Hf95DbW0sOUbvhpTloQdbPNmLObi3ZjfR620sPKfWx3S7r5ebyuXMfmQ7NwHmL/33RlcdxpW0f7C0muCZd5Bt4M9M09yY8jVu+u8ndT2XjDmhGz68CXONPdn7CymKZUCd/GqiQvfh99f2bu1uzN9k6TPdeifMeagrXLlqBb7edJcnOAPMXOhV66U2/y6BCf1RznXW9j9ybJpz7ETjgPajlvdde12+1S5mbrvh1PU9nm3OFsYy06xPcCMbWqNtsTBuusm3flSV0eepo23bxU6OaTuf7HqrDEjbg8e2l/Ib90OCxxS7bffs9li0vj+EqiueZ2ypf3uzapU8jLoe6Sa4qLmjwwzV0lbMSyTU1/FCe6MW/esKpuwN3Ex9F077FVVjcvyy8s8oDY9MBV+30qeR47cjXLc7bc5KtqH6vorbduh9TrN26kgnUNt5ltxuybMfcYj74b9pX8wSFvK+Ut2ebE3Rw77/I1E91mKM8rpvz+KBcs9xg1343lapYGQ1yqbTYptZ3aDzF7frG7yQuibn16yrPe799MBduk3iYvyb/yG+nguzxBT4nbrrPa5XlC3hCI9X/e5gfdLZyb8bRZL6XE0/Yx8thx4hbKb/6f/aMhdX83teu//Gf/dEjNbefWnXu5YJ///M+F1C+/diukLvF1xro/ED9W4scedHDxYyvixx6W+LEjqeLHjh0+pYkfWxE/duzU4sfuJ37s2KHFj63yih87RvzYkVOLH3to4se+vsSPrYgfe6RfSMSPrYgfO5JX/NiK+LEjpxY/tiJ+7AjxY+tU8WNr4scekD8kih9bEz+2Jn5sTfzYwxZM/Nia+LE18WNHEsWPrXxTxY89eiAOAAAAAAAAAAAAAAAAAAAAAAAA8K7jA2QAAAAAAAAAAAAAAAAAAAAAAABwhfgAGQAAAAAAAAAAAAAAAAAAAAAAAFwhPkAGAAAAAAAAAAAAAAAAAAAAAAAAV4gPkAEAAAAAAAAAAAAAAAAAAAAAAMAV4gNkAAAAAAAAAAAAAAAAAAAAAAAAcIVsa1ju+9HTTzwdMvwL/+K/EFKH7Tak7i/u5dJM0xRSf+RHfyikfv/3f386dTzydtzFctUyzyF1WN3DrzXHvNMw5FMPS/qFcRNTx006dbwnVTWO6ft0m3jwfNWHJZ16GNKRq2raX6TUKT2Ou/dSJdxszppTT/uQ+vgTj4fUt+7eSUeOd2wbn0V1N3yJz3pTqRbNle5nVcXcteSCp1LXvMTkqiE2n1zDlyVd15Svemya7RhvymZJNTyWqzaxyVd7XVO+pSnvMDSVcKjc4aS2kw8+xILFul/VdWX5qvP9zDWwqnJ6ftZ53MkXlfNWVW1S9pw5D3ld7qbkuQNfz1h+ed5DPvWcx9NYE07pT7oaWENsmIdYsDwNWOJoW20ljAVr6/8p8i3t8qbUuZtjVLxp+0NKHWM32I4dy5yKvo+pZ3EGnicJ89g02+ZhxMu67CphIxZtzNOAPDXq6lgzCcl91SbWhGakbu5Y0/TyuJMP3jXqPLbkwXqIPWH/Sez4G/lZbuOa5eSB/tHnot2Spx1P88OOeWMVbTv3wwlTlJrjPWkmk7FYVbmizEuai45NNWzuymaT9hOaTjjfk1jHxm5+3qzK40C/xHsyDt1K7dGXHY18x6rtcOJNO1zm+WRcszST5Mrtupnen9ZZ5exL7nDiFLrtwpc4nuaS7/ex2eZlRbcgygVruthY7EM7j23adRy2ms3JuLfTLhKj5oaf8KCraog3ba4T+sluLXbINSGPp3HDa5pTf7LdNhvRzS5fpYMP00krtXzTDvvYT8YzH+JiqrqrzgXbX17GI6dnucmz9+6qmy3EONqO2267IK6n8nU1OxXdVef9hMM+Xdcm16J8T7pmmx0O6WGdMipV1XaXW27KfrmPVbTZfjnpngyHR+8T2rEjL3naxnWKfFVDHMuHvHDI04DY7qqr/7nZ5gVRvzkfp6NjM6lL2p2Ks/PUOqZDXBDFHd38ivPyMk0Xq6sJ165dC6l53pXrSSvnzl1ZNp+2j7HbnYfUPLJs4+ZktV1Ks57Ke+Bdw4xr9jz0zHk8zbOXbVtR8nQz3dIltqzadvck9oR5LbbsUsPcdxV4OWEbZLNJ9yTnzXsF/anjw9xu4zquqwhTvCe7XQpdaAamOPnJ5+0NMXsTH3CSZkXfvXzNB3/t1ddD6utf/mJIvXcnRbCcx2XgZ3/uF2O56mx3PaT+nd/9q0LqX/jUD4bUef1mVvyY+LEHZhc/tj64+LEV8WPrdPFjR04tfmx98JgqfuzIucWPrQ4ufuxI3pQqfuxIqvixo2cWP7Yifuxhf0H82BHix46kih97OOLHjp1a/Nj9xI+tiR87SvzYmvixNfFja+LHjh4gpIkf+7oTP3bsF8SP3U/82JFTix9bET+2Jn7syKnFj62JH1v5lokf+wY+PAAAAAAAAAAAAAAAAAAAAAAAAOCbjQ+QAQAAAAAAAAAAAAAAAAAAAAAAwBXiA2QAAAAAAAAAAAAAAAAAAAAAAABwhfgAGQAAAAAAAAAAAAAAAAAAAAAAAFwhPkD2/2Pvz6OtS/O7sO/Ze59z36mGru6ubnW3BiMhQLYR2EJtAYZlGw+BmAUxi+BlwsIYyQKb2DIINJi1OmXHEpJxghMwEhIhsZ04Xh7CEtjESZyVxEy2QGaSRKMJpO7qVlV1TW+9w73n7L3zx1u6devuc7+/995Tb73D/Xz+qPXWec6env3M+3f3AQAAAAAAAAAAAAAAAAAAAAAAgEvEC8gAAAAAAAAAAAAAAAAAAAAAAADgEvECMgAAAAAAAAAAAAAAAAAAAAAAALhEVq+/9vq5NpjnKaSuD66H1KurIe+867uQ+tmf+ZmQ+v3f/ydC6n/4H/0nIfUzP5323Fp78fOfD6nTlPJku92G1NVqlQ/d5pSYD93H98vNc9x1a126G8Whx21KneOZDdWJFZsPafO+pUI4julmtdbmOWXK1atXQmoXM7SL+XnUihNbdSlPpmkMqdsxHXrK5aC1vk9Zmm/mEG/lmEt/ay2eebHpmPKkuFlVnlRnnneeL6p8a2Ta+WpIN2uaU57kKt9am+dYSod05l0sKFPMzlgA3959Sox7n2KXV5aEWC+LzXMT3eciVlWdIsPztjE/q/a7GEXMXbzqeLOrEtq6mGtj3D43VlWeVGdW9NYpcRxT8hDrXWttijdsnyJajjFyveyrEUzcc+xZqoKS72bfpWHbHHeeU1trfc6UfF2xUysajKlqymL6GPuOLo67WtHltTkPUeLEoa+a6MKUMnzu04lttpuQuspNWTk+j7W+G2IRjWUhF/5W9R1V5Uo7L6863+us2HXMz6Itam2MY+xqkBzHGNWJT3FW0uKJ5eHNaljnQ+feIY8Yu9zgxDbhPsYYKXWI15UzvOzU7myOQuo6NuD1OOFs5fi8GAXnwU+eOBQHbl0shPmit3FAuJqrCVEeOxW1I/cs8bC5VlZt3TSlvqOPzfsUhwGletgWt87JD248mVPHsmbFE9vGSWKf5yxVf1ocOq5K5Z3vs8pRyjufWuwQ88S4tamY88eNY80cy5FVMVjNY6e0bZ6Lbatqm2egQx+HfLH8j9VKWh7+dHFClI1TsbaZh1450/J612qV9rypbsecvxDvde618pJsq+YOebSZ5WrbWmu5T8wD3bjjg3UaldVTgzzvLkaE8dDxIU6rnncU672x2rZ4O4pGsrWjMY1FV0W1jZPucgkldi6bTezUYgNedlubTRo7rdfpqrfbOMaI64cHw0E+saJe59WwPHrf7jXk22fwXzo6TPe6iyOBqinLQ+hqyFcM0fNoM21ZPrrKndoc63XX7bGYEEcv5YkdxbltXmrLj8Jba3k9ID/vKJr36qpzWzf0qV7nQlQstZWTkrx6HyeJQ5wkxnautdameObF4D8/Py0PHbOlj3kyxXW8PHFYVysZxdQgluBhtdesJLfwd+/eDalzLmdxMFoHihQ18+I/c7jn/DSf1zZe11Ad+qdjPNLrr7ycNl4/HRJvHcYx27W0bWutO0hD2aPcs8QhyHL2Kn6siR87g/ixHYcWP7YgfmzHzsWPLYkfO+fm4seWxI8tiR/btWfxY4tDx+OKHztr7yFR/NiS+LFdm4sfW2wrfmzHzsWPnSZ+bMehxY+dM1X82K7Dih/bQfzYkvixJfFj5z20+LEdaeLHFsSPLYkf20X82GJb8WNL4scWxI8tiR/bkSh+bBfxY+0+YhEAAAAAAAAAAAAAAAAAAAAAAACAJ4cXkAEAAAAAAAAAAAAAAAAAAAAAAMAl4gVkAAAAAAAAAAAAAAAAAAAAAAAAcIl4ARkAAAAAAAAAAAAAAAAAAAAAAABcIl5ABgAAAAAAAAAAAAAAAAAAAAAAAJeIF5ABAAAAAAAAAAAAAAAAAAAAAADAJeIFZAAAAAAAAAAAAAAAAAAAAAAAAHCJrKb59Ed968IG87zY4ITt0WFIvbNJe26tdau08098/GMh9TOf+UxI/cf/sX80pP7Ij/ztfGKf/TP/VUjdbrchdejSVXfpit/ePiRutmPaebH34tjb7RRSh2EdU4e455RjR9NRPrHNlK56aOnQrU/5mQt/q7K0jzvP2Z1zrI3pkltrUzzxOZ5YfhHhql/lQ2+36X4NMUu7fDvyVbXibuZy0q1ShnfLlvE8cju537ZFScimYufxlZTzfi+sTM1Jy+eVy0FXndc4pgani010m2NqF6+quq58r/OJTfHQVZUv7LNxWfj7Pt2wLtb6abx4jrVW3M0hl6Q5Znhx0cWJ5b6j2HW+6phjrRqizLkQxsvON7rcvKgdcc97lf79Dp31eXxSyYfOp53bhLLazrH8V+1kbgfL2pEK0jTFill2D1HOtCk2VvlejzE7++q0p9ihznGMnRuMshFt8XbMceyUu61yBJ5bs6orL/adDlu1om1IebKNeVI1/lWebPYY3sTEzaaYi5UtfJTyZNXSBLPsLsc4Y8otxqal/CwvuYt5upk2adsutRjzGLetTqxY24mp++Rna62LtX6I8458VVPVWk2xnS1m9PHg+4zeW2tj7E+72P6P8aL63FO3Ylkpj2XnWET7qpkshijFICRdV16wKm9Hnt3mEp6r3ra6HV0uSLHvGGO/kwdW9aQjFrMxNuBFAa4WWPKAscsVs1gjKQ49xTWWbdHWxdXguMpXtqJjLCfTJvcssfGPK8mttWnKLeHFZxZ1OxlvR+4xi3FXrJhTVYyK9ZkpLjDWg+zkKK5t9vHMi5JQTQO3xc5zvb34NLCcxvV57FS0sbEkVN3pHDumcbvHanAx/SzObFU0wqnFKAa61bOrPDXOcldezjn6+MziME+NY4vRzamM3RnTA9BWDWVzb7yJ9zo/j2utTdPFJ4n5gV0p7/wojjEO4vAml/96+TE/VstTg9ja1BOiPKjLo80unfYY53E5P1trh4epDOc6Xay+VD1Lngbm68pdeVkSxtiAr+PWeWmoWrosalauO3nn45hWb+p1jHjoIRakbrNPZEL1hGiPAUy+5vt4dBWHKLGIHsZlunK9d1ilTu3q1ZRaPTXYa0CYV7nnONuaYmq5GjwVSyhp2/ywb3uUhkattR/5yZdC6vMfejakvtq9GVK7g2sh9e++ciuf2C//NV8VUj9/+LdC6j/3T/+qkHr78O6pT8SPNfFjZxA/tiR+bEn82JL4sV3HjvsWP7bct/ixBfFjO3YtfuycqSXxY7u+IH5seWjxY4tDix9bED+2i/ixxbbixxbEj+3YVvzYgvixJfFjO9NzsvixHTsXP7bj0OLHljsXP3aa+LHzEj+2JH5sSfzYjm3Fjy1TxY+dc9vy0OLHlsSP7dhc/NjCExM/tl9AAAAAAAAAAAAAAAAAAAAAAAAAAPBY8QIyAAAAAAAAAAAAAAAAAAAAAAAAuES8gAwAAAAAAAAAAAAAAAAAAAAAAAAuES8gAwAAAAAAAAAAAAAAAAAAAAAAgEvEC8gAAAAAAAAAAAAAAAAAAAAAAADgEvECMgAAAAAAAAAAAAAAAAAAAAAAALhEVtujzamPhq5LW8zpnWVjG0PqNqa21qY7RyH1mWeeSYeeT1/ISbdu3gqpN2/eLE5smlLykBLnbdxzi3tuLd6M1vf5ZqUzm+fidnS5JERT3nk3h8RhWF/4uK21w20qCVO8pnUf72VrfR/L/5hu9jCkY2+mlGN9dS/mlKOti68anPpUCHMRa61tpnTsOW6er7qby9px8VcoVsU7XVTRILTW5VyLVz3nBiWeWKvr9R451peHLr4Qt4051qUM326KMpqrbVEQ9igntdif9rHFiNWubr33uVm5Xyp6pUq+Wfm0x6piDnvsvOvizYoVqyjerU2b3HekNiE3R+VtzkWlbOuC3CHeO3hI6/PwZ4idWjzt8qJyhu/X0BXbFjU3bj3HqtfFJqOstPm85ziKmKc9X3Ycz7xfhdTca5VXPcaKmTN8n6Zsv/a5bP/3ajFyM9vHitmmnJ/FCDzX3CHejtjZttwklGPRKU4tct+R83MuR5vxXudDd7EklKOIouuJE72+SxO9zZTmcX2+l1X1yZ11HiSXnVqu9VMsSF2sfHPcdqja2Hw75nivi0JYrxXEncfRUT6xbqzGJ/HU8tZjnEzlG13MyVuZafm6cs+y1+C/2DwWwnKwmLvjagSeK3Ucs8Wzaq1N8dB54pCVdWOIXxnzkeNp54vqqiJalJO95nmFvXa+3ySxWi7IvW1K3Y6pPSnL2BQ3z+1JcSvzmK21ozh3yDP+XMzqgW7Ryl78Xher69V55XFAF9esqoZur6o15YleLiflwlGei4350LnqxRPbFieWF9iLkeoe/U5rbd7kyhXnp/Fmbbd7jc+LiV5R9fbZtrX4vG+v+Wk1+J/iAvuUC2EXZ6Bxz6VqjB033rdNyOnpusbY7xTD4Fa0s3l+ut2mVraLNys/mWrFU4Uivw/jE+e5es4y5la0GK7mwX98VhLbk1aVkzxO2G/Jqm3zCDy2CWMsZNuyJORJYuzUcoZu8kPhcuwTRyFFp5YXIqrmpFiH3qY2Yb1+gD9ul6+6W138WUlekipNcRy87tIwoJ7vxNpxeHiYNo07LvriPZ8k5iXZuP6Sp0ttvzPv9pu+fsVXfEVI/fyLPx1Sb27jrdymAjwOV/OJ5VW+/AzordtvhdTl7RA/1sSPnXVo8WML4seWxI/t2Ln4sXMSP7YkfmxJ/NiObcWPLYgf27Fn8WPLbasDix9bEj+2a3PxY6eJH1sSP7Zj5+LHdhA/dpr4sR3Ej+3YWPzYaeLHlsSPLYkf23Fa4sfOvW0TP7YkfmxHovix5aHFjy2IH9txaPFjC+LHdmwadyx+7ALEj7V9ggkAAAAAAAAAAAAAAAAAAAAAAACAx44XkAEAAAAAAAAAAAAAAAAAAAAAAMAl4gVkAAAAAAAAAAAAAAAAAAAAAAAAcIl4ARkAAAAAAAAAAAAAAAAAAAAAAABcIl5ABgAAAAAAAAAAAAAAAAAAAAAAAJeIF5ABAAAAAAAAAAAAAAAAAAAAAADAJeIFZAAAAAAAAAAAAAAAAAAAAAAAAHCJrP7Hv/5Dpz76ql/0i8IGV69eDanzPIfUrg35bPr+IKSu19fStlPceZdSb9++Hc+rDV16U9u0mUJq36dth6nLh25p363rUoYftTHuOW3bWuvjsec5pa5W67jvvOfixOY5Zdowr1LqkErCZhtzrLWjzfbCmz/z9AdC6ssvvRxSVwfpolprR/HQ6z5d9XabLqo4cGtDLOF9rHqrlm7l2NKJtdb6Pp3d4eHddOhVeWVnmmODcO8rKTHejjbGbasGo2up6pWVa48jt2lKhTC3hHNsylruO4pt2xxvxzzFRnZOh87Fu1UZnlOn2ER3Xb4h8aJay68fzRlalKKqU8vdVtfl3iHtObdFe8qHzqnFvaqaoykW0VyzxurQ22LncePYF7eqnSzahGI8mU67i4eu6k5VbWNv26/zRRWH7nPdyuVsm/Jk6ssmPMlZWvR48dDFRVWVq8WxaB7SjWMx5MtFtI8FKVfbulGIchmeYp708VaWg4Sq2qYszeW/i9u21oY4dhpiKRxjf9rPcZZX1p2qjIa0vOs+zllaVYaLne/VkxeFcI4ZPg+xox9z837xcWxrbRvvda6XeYLZyttR9JjpuoYhHbrMkdzM5ls9x952iIPkVjYpcciXJ0Rz9Rr9KXbW3SqdebfH+KQcik656yl6h9jGltU23q+8tlPkSe7yWptytxW3HXLfEa96qutHss88Lo9UWzU/zaPoorXZZ3zSWpd7vbh5Mcau7kY1uY11J5aTPGZrrejK95kaF21suTizT28bTzwPA1prLQ/M4jLIXosJ1bBtGHIxu/itnKrZ6z7D92LgtMcyXSvb/5xhcRGvlasNMVOHOO4q6k6V3YfbTUgt5izFaRfHHovB6sXnp0Nxt+LGrY1x8z7PSmKOb+MgoVXjhKJiFqPFvWrHFMeTfR+XUHKXVz3inIsnGvFmxTY6PwBq5eio6LbiY5r9bke+rvyoJT9xKFf5qpYw1469lpqLFjr2p+WwLdiWK595WXWPIV+96BpTc8+yX4dZzLu3Y6q2xSA53ur8PLpVV50Ne45fYsUc4sR5ih3ialXN2WMxy89KcrXdd9E1rjbkx0/5OXs9Ao9FpcqTi3dqpXmKdzPuu5iLVbVjr6erec9VMXnl5RSwkUcRzz77wZD6d198NaReuZpDa9pP//RPh9R1juDavpJSF12e+LEmfuwM4seWxI8tiR/b+ZWUKH5sQfzYkvixXYdOexY/tiR+bFeq+LFzEz+2I1X82I7NxY/tSA5p4sd2pIofWx5a/Nhyz+LHFsSP7dqz+LHTxI+dsbn4seX24sdOEz+2JH5sSfzYDuLHdu7gbOLHlsSPnZf4sd3Ejy2JH1tuLX5sx87Fj512SeLHHuDTVgAAAAAAAAAAAAAAAAAAAAAAAOBR4wVkAAAAAAAAAAAAAAAAAAAAAAAAcIl4ARkAAAAAAAAAAAAAAAAAAAAAAABcIl5ABgAAAAAAAAAAAAAAAAAAAAAAAJeIF5ABAAAAAAAAAAAAAAAAAAAAAADAJeIFZAAAAAAAAAAAAAAAAAAAAAAAAHCJeAEZAAAAAAAAAAAAAAAAAAAAAAAAXCKrz/70z5z66Cd//MfDBtevXAmpR4ebkDrOxdl8yZd8IqT+g1/9S0PqZtyG1NWwCqnjVJxZ13Vp5/0QUg+PppA6r1Pqva+EtL6lQ8+bMaQO65QnrbU2pc2325ThfZ/ebTd36bT7lnK7tTb36dBHfcrSzSYV0dVwkA89xHs99SnHrl27lva8Srejize6tdaN6bpyAV/FmzVNVRGN5aQb0t2cunToPuZJa208iiU8XtcYC3CXm4S5asuiKRfweOwu5lhrbY7nlpuynFqWhKLW73FixbZ9dTtyes7SeDvGMZXAVuVJPvN8r7t4YmUJ7ftYCvco4flmterMc5b2/TqkTtWhc5vQiq7n4kW0VDezYdt41uWe8zXnrWOt3bednOd85rl27HPkNrVUCFcH+/SYxZlNc26i89axAc9bVrvep4SPcdu+PHRMzbV+GNLYaVVmaPzCmO91PLGcnwdxqNlaG/PUIPYd05RH79XUoJAOPQxFZ5x3XRTCeNW5PZlihzhXk8RcSB/c4Ke11uUB/JzudYszi7IRzeeWBz/TGKfGsbnqqtqR5eF9vqipKgl5kjjHniXfqha7hvtonXMxi/O43AzGi2qt9XOci+WSMOz1ovz+II0Y2zaeeZy97llOunxdcfOupSZ6ireytVYUln0GT9W2QyyEfcyTnOHb2BeXw5tisPog86RqRWOOxdZmjF1eOW/exs2rsX++WUURzcuqVQGPpagYCLdunxF4sXqTZ77VieU5e54Q7TUpaV2Xx4QXH97sqWiEc6XeY1TWquFNXsfYZyGu3Hk+say8VfusVGxie7KKB89tUWtFzcynvYoTh/rQsdvKz0oO1ml8Mu+R260abe6zOlNvm5dGc73cY5WjVbPyLh57r4W4ets4SSxOLO23q/KkW8UGJ64h5tWw8uFU7nuKJZS8uLnfxHm/GrCXvCBW/TZYnhrEMjYWXUN8Nlv0O6v4wC43g60a6OYuMbfQc/E8r1gQyAtiXRyM5ova85labiinOMYuB//V08C07ZCXC6pYkJxp1Tg5pa7X6RF/9XC1jXHnfTyxXMaGVdGKFusJMbEqZvGiuiIoYipHR2fLTXTZgO+z/LiNoSB9bgdb+8CzN9LO49jn4NrtkPrBp6+H1E98IkVJtdZ+9gs306Hjo6sPfejZkPriS2+e+kT8WBM/dhbxYwvix3Z9Q/zY+YgfO++hxY/tShU/dpr4sQvsWfzYkvixJfFjS+LHdu4gpIkfWxI/tmPP4sd2bCx+7NzEZs3xSgAAIABJREFUj+0ifmzH3lOq+LEF8WM7N47bih97j4kfO++JZeLHLnJo8WNL4sd2ED92mvixXcSPnSZ+bAfxYzuIH1tuK37sNPFjS+eNH9trYQ4AAAAAAAAAAAAAAAAAAAAAAAB4vHgBGQAAAAAAAAAAAAAAAAAAAAAAAFwiXkAGAAAAAAAAAAAAAAAAAAAAAAAAl4gXkAEAAAAAAAAAAAAAAAAAAAAAAMAl4gVkAAAAAAAAAAAAAAAAAAAAAAAAcIl4ARkAAAAAAAAAAAAAAAAAAAAAAABcIl5ABgAAAAAAAAAAAAAAAAAAAAAAAJfI6s7h3VMfXT04CBsc3j0KqUebTUxN27bW/uYP/42Q+oM/9EMhdRzTobfjFFLX6yv5xFo/hMRp2saN5wsnttbGuPNuSCc29OkFc9Mmn3a7cjWVhGlKh+66dOjt4WFIvXrlaj6xzTbdzXlOeXp4lArhmK6ptep2za0LqX1KLFJbuuLWWluv1yF1O48hdehXaduj003EKflety5dWBdzdNqk026tTVO8ITF1FSv1GE9sqKrtZkpn3sc8meK9zsW7tda69IV5jnuPiV1RRttcnHpMrC4rbluc2F55kit1bGNbfb/yieXUtN9cKVt11blmdbGd7GLxbq21eL9yezLPsUOMN6u11uJIILfCU8zxXKnn2AK31lrsyqdYs7oxnlhs6Fp1bl3sHXIp7KraUanuZhIb8KHYcx7ebLepEOY2Id/KVt2vObcYcc+5xcjDxdbaWJ15kru8qvXP44SiES5a0bLjiVUvnljuMefYK4379IitqDpDbG2qDrG1Vg2U087z4KesHXFmUZx5nDjkNrbsUGOeVF35Xvc6bz4MuTmK/Wnu6Vub4kA3v+K8KoTxtGOXV8ojlDycLIfBXR5txnIydHFUlstJOTMoBmZx3JUHhPWIL1aumKUxO1vrq8vOA9185nsMb4rZUGstVp3cCA9xClrWjjz+KZqj3NpUY7apaIQvfmK5nJTVtqpccQSSr7rqO8Z4r/vcd+TxSTzymNdPqklNlm/WKjb+5eZZl1ubqojOuWbWI4EzFdPquhmNiXnwk6fVMcfubZ/SimHAPvO4NuQz3+fAxfCmyJNxjBPn6tjpwPsNg/dpwMtfpcmdSx785PuxjY1/uZhQrKDHq97ENZA9V/nyieVSVIx9ykIWt9+2NPjPdbo89JSPXSxV5NpRPLrKinW8vZas4lrZ/axUBznDqwa8aKHjbKuP7WTdWMVWNg/5cp+YU3PNqneeV5XySDUPIVrr8myrGPzkR4l50+Jm5VFEXgaZ4lWXy0rTFAthfsyYp5DVglU5IoyHTs9eqx0X5WQuniTmUrTfo6tYffq4rJTXNu9jCJ2+sE+bkHvEsilbx2nLOF58MW3MT6bK5bJYkHL5n3KvVD26KtqEYlk1t8DFHHDMD2JaimDJ5b8c3nzogx8KqS+9fDOkTjGC5aPPP5+2Lefssbs9vJvCOXKPee3G9VOfvPrKa6c+ET+2g/ix5ebix3akih/bkZwSxY8tiB87L/FjS+LHdhM/tiB+bEn82JL4sSXxY+clfuy8qSXxY+clfmwX8WPLbcWP7UhOexY/tuvY+dDix867eSZ+bNfexY8tk8WPLXedjyx+bAfxYzs2Fz+2IH5sx5HFjy03Fz+2IH5sSfzYeVPFjy2JH9uRKn5sYRk/tufjPQAAAAAAAAAAAAAAAAAAAAAAAOBx4gVkAAAAAAAAAAAAAAAAAAAAAAAAcIl4ARkAAAAAAAAAAAAAAAAAAAAAAABcIl5ABgAAAAAAAAAAAAAAAAAAAAAAAJeIF5ABAAAAAAAAAAAAAAAAAAAAAADAJeIFZAAAAAAAAAAAAAAAAAAAAAAAAHCJrD75yU+e+ugH//IPhg2maQqp4zSn1LnLZzPHF6I9de1GSH3t9VdD6jCkPb/5xhv5xNarKyk55knXxasusqQwTtsLHzrnSWttHDchdZsuuq3jnvs+HXqKpai0Hlbp0HnnXXHoubjX6bqGdUotyklVUDabVBLGeLPGdhRSy5sxdDHD+3TmMTvLPGmtXbz8b7dx21U87XijW2vznLKtz5t3uYyVNySd+Tynnc9DzPB4s2rxzLt93oYZ25PWWou3I9+sXASnKlP2uq5onsd03DnVytZai7UjV9uYYa3br1frunRd+a2pczXGGGN71uWSUNX6tG1VRPPIKjdlU1GzyhYjZmk8sWG/e10MYPohpOZqWxTRqmcpGvA+Va77aKIvLhfwomeJxjHXu/vpji+q3nNsZmNLOBc736s/LbbMh45HnnIJbq3Lo7rY/Ocxdi7erSoq+5STctucLUNsZnMBr1ro6sRiO5mnPPvsuVUNTr7XuZSV/ekw5CY6jyIuPirrqzY2F6R81f1+7fdYdMf5xKrxZtjzfu1z2eCkQ9c7z8sgKbVqRcuuPGZarJh58JPzKxfgVrUJebSZd74a8gJMm4v+dI8cKxvwPZZ38pZdXNGqb0fRYuTmKG2b10VLuf3PI/A5HrqLs7xWZnjeOCo7tTy9HWIJrxr/vYZ8efCTO8R9ppCtnPLHMV9uJnND11rZKcal5qqJzsbYHFWtaF5+TEvcrUu3sjz0PMVDz2nmW44Wx7R1G/LqZWz882m3evU+9h2xRclFsCyixQJ6Xu/aby6WFeWk2HnMz6pmVSvVqYQXhTC2Ra21Pu58znOW/TI83+t9eocuX1Q5Zy+aozy8T3vOiwGttX6P5wJFG1vNl4qHDnPK0qIk7PdwdcpXPeUTi0uXsZy0+1h1SofOA8K8dF8dOZ95MRWLhbCPy7ltz54ln1jVWOWFo+2Yu604F1vFx6PVGKPqTy/+EKdUre2kbfPMYqhKQt571bynHefRe75Z5ea5w6zWAPdaYIxRD9XiZOyLc6W+95WQtk9vmzuOVj1d3WcUUXblm+3dkPrsB58LqR/8cEr97Gc/G1JvHFzNJ/bZz6dQqCsH10Lqndu3Q+rLr59O/eQnv+7UJ+LHlsSPLYkf27G1+LEF8WNL4sd2JIofOyfxY0vix3ZsK35suWfxYwvix84gfuw08WNL4sfOu7n4sSXxY7sSxY+db+fix3ZsK35sQfzYWTsIaeLHdh/8bOLHdhxa/NiOE0vEjy2JH9tJ/NiS+LFdOxc/dpr4sSXxY0vix5bEjy2JH1t6YuLHHtSzbQAAAAAAAAAAAAAAAAAAAAAAAOAR5AVkAAAAAAAAAAAAAAAAAAAAAAAAcIl4ARkAAAAAAAAAAAAAAAAAAAAAAABcIl5ABgAAAAAAAAAAAAAAAAAAAAAAAJeIF5ABAAAAAAAAAAAAAAAAAAAAAADAJeIFZAAAAAAAAAAAAAAAAAAAAAAAAHCJeAEZAAAAAAAAAAAAAAAAAAAAAAAAXCKrZ248c+qjf+Kf+CfCBl3XhdTNZpO2XaVtW2tv3boVUvt+FVL/5l//Gyn1h38kHbgb4nm1a9euhdS5T9c1b+d05JifrbVhWIfUadqG1L5P285zOrHWWpvTua3yVced59SpyJK23aarHuNlHRykUjTGS26tDeuYpZujkNoP6dDXr18PqTffSlWjtTbEe931Y0gdpynuuXpNYZc2H9ORH6yxpWN3q1Trp5gnc0uprbUW6/U4xUzpcsUsbkc+8y62dfMUD101VoVY6/tYzPJFtbG4HXMs/7kRLq65bEVj7Zjjvc7tZO4Qh6Ho1Fq81+OcTruPuTLHeteq6xq6VBKKE6saqz4eOrf/c6y2XewQ+2qM0cVykot/rtSlPp55NseqV5/XePF34JZjp6Ae/Oxx6C4W4Ps46/iN3BDOqYiWtSPbM9OCvs6U2G21eGKxxSjrTld0x0keqebbUVbKWMqq5HjRc8yxVp35PuVkqPrbPDuYYys6DHnOcvEZTavahCluvk9T1lrRzk5zKoSrOMGcY3vSquvK9bJqCi9+s1orxl19H9uTfUvCxRurLl51MW+IZ9XaXi+cL2b01cFzCR/jLDEPZbtyQpSrXlExc2o8blWpq4IUx5PF8st+I/CincxT47I/vXhbt89MreyT8r3OVz3Fg3flrCSe+nYTu+OiL46Dn9ygtNZiO1ktNeRBctVi5BWt4malPReLCdXOV6u4hJjXe4eU4XO19Jlr/ZTnpznDq1FuXhoaYiO85/AmjwnHvEiyx6H7Kk/GPPmNh95zCB3rZZuKKU/atu47cltXFeG0bTmoi6piFpep9xiVtep+7VP882CyWobec84eO/pqz3OcdxQlobiy1AK3VnT2xVC2qh4hsWzoqhXdPVbDqkXXrqsy7WzVva7HViktZtpcLX3GxLJTy8O22IDHQngftWOPlf/c+O8xKmvVKLq4WbEQlsObfc58in1H2QJv42PjakU3PlMYU1BE0dqUC2J56zw+iePY1to2jgRyx7SKqWV/mCtPLidFI5qzs7od26N0N69cuRK3zp1a0fgXqw35cd6UTnua4hpgOV0a4lB2j0HyfSxp5eWyVIBXsaDkatta+5m/82pI/aW/+ueF1NdeejGkruOJlSvkr76WzvyZ554KqQfXboTU60enT0z8WGvix876hvix08SP7dq7+LHl3sWPLfcufmyxtfixBfFjS+LHduxc/NiC+LFdyeLHFsSPLbcVP7YgfmxXqvixRar4seVxxY/tIn5sSfzYji+IH1sQP7YkfmxJ/Ngu4sfOS/zYjo1Dovixsw6e0sSPnTNV/NiObcWP7Ti2+LHzHVv82JL4sZ3Ej7W9FhQBAAAAAAAAAAAAAAAAAAAAAACAx40XkAEAAAAAAAAAAAAAAAAAAAAAAMAl4gVkAAAAAAAAAAAAAAAAAAAAAAAAcIl4ARkAAAAAAAAAAAAAAAAAAAAAAABcIl5ABgAAAAAAAAAAAAAAAAAAAAAAAJeIF5ABAAAAAAAAAAAAAAAAAAAAAADAJeIFZAAAAAAAAAAAAAAAAAAAAAAAAHCJrFqbTn00DOmtZJtpDKlzn1LbPOSzeeapZ0PqdjwKqV/7ya8Jqf/gV//ikPojP/K384m98drrIXXabFNqN4fUo23Msdb6vkupXcrSzeYwpHZd8fq51Sreryltvs3lZE55sppPl8lThiGdWDelzbfbdLPynltr61g75jHdrBYTn3766ZB69266la21o03M8ClleL7qzWaTDz308XZ08bKjcSxqxzxfvJjtcV61fNXptFrrckGp9H0solPaedel2hGzs/5G361C6hSrbXEr++LMuviqzS62sUUZi817ay1uXdzr8rqCMeZnK1qjqhSNaed99WLTfSpmPrFWNBhtE+9HP6xD6jr2mGM89lQ1ZV0sSFWOpZqVt22t5VJWNOC5nFRdea56+dC5xViObO9/z621ec5twsVvVj6xdh8DswtvW5xYlSf7dEtFh1gV0TxEyeOELg6Sy2HAPu1oPnTb40a36syLBifWu3LcNQyxOYpjjJZnFcXgqM25K493a4pZlvvisojmEl70tnnbVWreW2tTPLf1HGdq8V6vqiI6F51HSswNeG7KpqqnzxO5cXyQU4M4Ohpjn5iHN8Xgp5LLcC6ERSu4n2JGH09suy3mp/tkWh4GVD11kWfVoG6P5ihW+dZaF8+t2HdR44t2Mtf6agUmZmlcYJznNLdtreXWaohTgzytLkvCGDefu9ye5ClknrOUE+eYmrut/YZ8uZzNe3TW97EkdfEFgT6vn2/SrVyvi+XHourFQV01IaoOHYvKNmd43HN5O4rNL75GUk0N6j7v4scuimgxfilMcYyRm+i+L0abufznLB3H1FnnQ5ctxj7Jeed5gN3KsVNcfq+GJ/usgRR50sfKk29lvbaT63UcosQMa3N11VnsMPdafi9vxz7yYLM87XxueZBczNT2+yGrMXdMRaeW5D6r7bdcVg9gorx5+SAy6eL4pGpu9rnqPF3KjWQptyd9XMeYh6JTi88wi4c4xeO8eNqruHTfWpum/Egul6KLj2Nb9fN0cZzb5jnOyrs0mWrV05CiJMSrznd6quIxrly5ElKroexeXfl6nUdHKTxmFZcQ5/jYt7XiZvW5t87TwJxaTKv3ii7IK585gqW19tr24kvor37h9ZD67DNPhdQpTiFba31eOI3LZVNcujw8XEahiB8TP7ab+LEl8WM7Nhc/tmPn4sdOEz+249DixxbEjy2JH1sSP3bebcWP7UrNRxY/toP4sR2bix9bEj+2TBQ/tiB+bNfOxY/t2Dolih9bED+2JH5sx7bix5ap4sd2ET+2JH5s1+bix95L4sfOS/zYkvix3ZuLH1sQP7YkfmxJ/NjSJYkf26vjBwAAAAAAAAAAAAAAAAAAAAAAAB4vXkAGAAAAAAAAAAAAAAAAAAAAAAAAl4gXkAEAAAAAAAAAAAAAAAAAAAAAAMAl4gVkAAAAAAAAAAAAAAAAAAAAAAAAcIl4ARkAAAAAAAAAAAAAAAAAAAAAAABcIl5ABgAAAAAAAAAAAAAAAAAAAAAAAJfIqrXp1EfTlN5K1k1dSO27g5A6tzGfzXY8SpvPadsunVebp01IXfVx49aGlr6wPZ2F79LFl7yN47Y49GoVUqd47GGdtp3HeN6t5ffTTS3dj65PqcM8hNR5LsrJOKa7OcXLWq1SEe3y3Wptu03ntl6nnW/iZT311I2Q+tIrL8fzal2XMnyOJXzcpELY1a8pTDvvYs2c5pjaFSVhGFIJH8di84vrirrTzbEVjcWsi+V/ropovuo+loRpio1srPLlzsfYWHWpSShb/yJPpinlSW79i/Kfm5uqY8rmWDuGmGPzomdffiPIBSH3mJup6NTWfTz12JS1MaX2fWoQWmsHbR1Sc/nexgFMn8tJ1YjmYlYMb2LtmMoiOsQGvGgT8mkXLcZy/HnSvMcbcmPVqep8a138Rs7wfo4ZXo02p7zz2NZNMT/zgYv7XLWyU7zqLk4r+n6vTm2fbctD5wFMLgl52z16htbqeh3bhHiv+9w+tzbHna9iezLlkWpRb4tMy1uvYvIYM6UfqjFGLglx2zHfymq02eJocxX7xFXsrKeqK+9ils65Z8ktYWxPymqbm6N8Mx/YtOHeofPkN9aOuOeyPcmZltuTPZuyahoYryymDnkcXGZavq7YWO2TY/dx6DxTy7UjH7nNsTvOo7JizBbbotbaENuEvTrrPfriVs3K95mATnHO0qr71ccSPscl2WL0Uo35+qLa5nKy1+9b7FM7chHtWtFiTHPu9S7egK/XafpZz9T2WE3IU+N82q21PrcJxQpMOQ3M8ojx4o1wUYCr3M5zsbz5HO/1VI1BihlobFC6PfKz7deVl+szUTkMTjvPjyTy8stUPZLIt2PI7fseE8xSPnR+1FL1xeXB8ww0ZmleIY+3srVqHrjPjD5fdtXR77OYkDv6asGrqrZ7NNFlES268jz23+PEyt6yyPA92tgyT8ppy4V18VHKvs17nncU69TlInjsE3PFjNlZnFg1vG/xQWTx1DgvzhdDzb2GfHvap4RXqxxlIUyb5yypZlvp0FdiuEWr+sRcqfdpT1prm00Ke7h2Pc0s8rbDKm07VL1tH2/WdptK+Cpm+FgN+bax18uLk7kYravZ61f9I/9wSJ3GV9LO4zTwxo2nQ+qLL76YT+yt27dC6vWnnwmpN2+lbXe1ReLHxI+dRfzYaeLHdn8lpIkfW6aKH1sQP7YkfmwH8WML4sd2bCt+bEH82AUOLX5s167Fj50mfmzHeYkf23Fo8WOLQ4sfO2eq+LGdxw6J4sd2bSt+bNfG4seWm4sfWxA/tiR+bEn82JL4sfMeWvzYeYkfWxI/tpP4sSXxY0vix5bEjy1dkvixvWb4AAAAAAAAAAAAAAAAAAAAAAAAwOPFC8gAAAAAAAAAAAAAAAAAAAAAAADgEvECMgAAAAAAAAAAAAAAAAAAAAAAALhEvIAMAAAAAAAAAAAAAAAAAAAAAAAALhEvIAMAAAAAAAAAAAAAAAAAAAAAAIBLxAvIAAAAAAAAAAAAAAAAAAAAAAAA4BLxAjIAAAAAAAAAAAAAAAAAAAAAAAC4RFbTdPqjeT4MG3TdOqRObQ6p81iczdAPIXU7b0LqOC6u5ITlZZ602aQ9t9amOW3fp4tu2+02pF69ciUfuuu6mJwSx3joNseNW+vjhc1zSu1jOZljUeirE+tihq/Xq7h1upVVCW3xots8pTPvYima48sAi2LQ2hirXh/3PsarKg/d92nn2zFW2+LEYr1tbYq3I595LsDZ0A7yF+YuXXVRimL5n6tCGu9Gm2OWdl1qgffJsdZaF9uTPt+s3NLFwt9aG/ZoRXPyMKQca61Nse/JdSc3VqtVPHSuG63NRWedDr3ZpkJ4sC7yJHfWQ7yufkinPcXWprXWdSnDczGJR25dH3uWqurM8W2wZSMcrOIlt9ZyMev7dOhxTCUh53ZrbYhfyHWnxeFiH6vtFHvqVr+aN3b0sVKP+aKqljCPZfNp51uZh1WttXkbq+3BxZuj4ka31hUnl647t7Flp7ZP1csNSp441L1tPK+8cW7K5uqSi74jpnZ5pBvbotZaiy1GHifkLF0NaeJQjkXnWIa7OE4YurhtlSX5G1OsesU8rhifFPd6yh39UMx58qGzueWhbNo2Dxfrxio3OHnjqBgk1y1GbI6qe73PofMXhn2a6DJD4/2q5t15VFYuGOwjdta5dtQFIc+28rZx3FW2GEWDc/HGKk/FqlrbuindzSmOQOaiGBWHzgtHecq/isPgMTb+ud61cuwUO+tuj764/kLM8LxMXXaoXew7im2Lbmuf1YC9Dp3zM68LtWpVqmiN4p3MVb489BCHbXkE0ufmPZ9WKy47Z3i+WV3VgndxylM1/7mYlbcj7nqPsVORJ7HfaeVYNDbvbc6LTkXFnGKmlFP+pFi6rGZqRSua6k7XxedH1RpJblL63G3Fe5V7ltI+48m8LrrnofPz07xWtuehi6vOZbBcONrjqvO97uKKVrmWkD2450elPOQrhtAtPwAtq23cuEs7rx5OlQUlruPlteJiz8VMLdetnCfFgC+Pu+oyevFHcrmN3XcEHu9mbsDLp2b5fu4zFs3jk82Yu7x29aAI2Aiq4U2xeV4uu3XrTkgtBv/xuF31JHGs4ybOlMNj7mPmfPFGOA8Xy6nxNMTeIY4TVqvUivaxdly9dj2fWH78evVamhqvcu24c3TqE/FjTfzYGcSPLYkf27Fz8WPLnYsfW+5c/NiC+LEl8WM7di5+bEn82HLbvGfxYwvix3ZsK35sQfzY7s3Fjy2IHzvvF8SP7dx9PLT4sdPEjy2JH9uVLH5smSp+7DTxY7uTxY8tdy5+bMehxY+d79Dix3bsXPzYOQ8tfmzXnsWPnW/b+/iC+LHzET+2JH5s6TGKH9trRAIAAAAAAAAAAAAAAAAAAAAAAAA8XryADAAAAAAAAAAAAAAAAAAAAAAAAC4RLyADAAAAAAAAAAAAAAAAAAAAAACAS8QLyAAAAAAAAAAAAAAAAAAAAAAAAOAS8QIyAAAAAAAAAAAAAAAAAAAAAAAAuES8gAwAAAAAAAAAAAAAAAAAAAAAAAAuES8gAwAAAAAAAAAAAAAAAAAAAAAAgEtkNXXTqY/6YR022ByNaXerVTpa2nFrrR0dnj6Zk+bWhdQuv0ytS9vO8axaa0Ofdt61dNpDzpPKtEk7n7p07uOYT2zIh57nmDExT+Y5HTpu2rp4s1prbVFoTzq8cyekzvFm9XPxSr6pS3dz6lLtGKeUn11MLWpWa+ttuq6j7VHePBiGopy0WAjz3exypZ6qNySO25A4F+Uo7XwoWpuU2621MRWENvRp57lSb6fi0EOf7leuW33cdsxXVemHlOFTvK4+n3fZYsSmLBfRMZ5Y2VjlL+SWcN2nLjMfeKyyZOhTk9LFSn9wJe66qnjrOBKYYt8xDLEFzn1W9crVbe628igiHvogHre1Fvv5YhQxTqkZPOiqTi2W8HxduXMohhCtTTFLV7F65JvVxasux2RzHDvlSl00ZVWfVo2dqu74ooahqLa5iLaYY1lflZOca1PsjlexJORR2du7v+ihh1jQxpb607mal+QhyhyvK/fFXTklqlr4tGlLjVWfO556xJh723zaufEv8mTu4xfmfK+TfMn1F4ohSqy21VV3sSTkIpqPPOeJQ1Vtu9ia7ZEjbY7Tz1bV3GpqcPFBcnmzWt489ix9vKiy/d6nxyxqRzkCj21dsfucpcVyQdXT93G5IPanfRy91/JF71H1iiJaqRd/gng7ynFXLsR5cFQPIrKimMWOPi+/xKsuTzsP4MvOOm1b//hFbAlzi5ML0X43qy9WPmM72eLizAXP6P4OXaQWO88Vcy7auk08dFWKcjMby38e6OYVraFqizZ5aShuW5WifORiAF6NJy/+nKXtV7eqUhT3XK58xsWIKU4Ncu2YpmLls+i2ioJU3a4HZo4z0LyEUq7t5HWMolIXrehe8jreFHe/1/ikyrSqdqSbVXblucEp7De+KdbAq5ncHsctLjkvCOwzlM2lqFVX3cWRVT7tsmJm+4wiygzfS5x3d7m1qeZic+wdqvY796d5HldERRQLjHs8ha+edRdZVi1EP7RCOKz2GPJVD7uLZ4VzfBCzupq2rcYYOUevXbt24W27mJ9jtay0zwOJYtxVbZ678mK5N5piQEVr7Y033gypTx2kKc8wpOeBz33gwyH11Vdfj+fVjo4O8xeCnJ+rRciQ+LEmfuwM4seWxI/tIH5sQfzYjp2LH1sQP7YkfmxJ/NiS+LH3lvixM3d/0UOLH9uxqfixZWLcs/ixHccVP7YkfmznF8SPLYkf27G5+LHFzsWPLYgf27G5+LHlecVtxY+dd1vxY+858WNL4scusvdI/NiOQ4sfOy/xYwvix5bEj513W/FjOw4tfmxhGT/2IJt7AAAAAAAAAAAAAAAAAAAAAAAA4BHjBWQAAAAAAAAAAAAAAAAAAAAAAADi1jWoAAAgAElEQVRwiXgBGQAAAAAAAAAAAAAAAAAAAAAAAFwiXkAGAAAAAAAAAAAAAAAAAAAAAAAAl4gXkAEAAAAAAAAAAAAAAAAAAAAAAMAl4gVkAAAAAAAAAAAAAAAAAAAAAAAAcImsVquDUx/dvXs3bDD065A6z3NI3W7G6ny6lBh3fjRu437TtsMQT6q11qXN81V3ObV6B9w0b0Lq0K3SzruYn9vidsxDOvPiXk1TSJ2mtOe+ei3eFE/86vUbcdt06PW6OPYq3q/N4WFI7VepnE0xx9brVO9aa7dv385fiNJFxfvcWmt9l65rnNN1jUepeLehuB3dKmVLv007H/t0Ym3Oh47bVuY5ZWpuE/pWlIQW27pc9aYptqK5PanMceerFmtH3nWsOy3nSGXcptMuK2bRnMXmqBtiOYm140p1s7bxurp42rFOt7kVPctqlbqtNuUzT8eOHfW9b6SdD7G1y030qo/NYHVm6/iFaY6FMPfFVe3pczHrLl4SxrEoCQdx7JUz/EosokOfylh5Ym118WHbEC8qDxdbdW555znH9mzAyyYlKAbJ1ZBvG/Okj7djG8vo0O+VJ0OuW7Gjb/HQc9EMFnI5yXIpKvWxYubhYlk7cmc+x3s9x+Y9N2WlIdaOfFlFMYntc6sz7eKpZYsx583jtn3sMad4UVNVbYu1iDm1J6vcHuXRS2tdUZIuvpiQT2ysxrmrPebsY9FEl9U23et8XVPeeVVE86BujCWhaAjjJLEcBvdx8zz3neM8rsyTPo4JpzH2mLH8T1Uz2hXD0TwWjW1szvB9JoFVz5K7vLI7ra4rb5sPnfKkuhetxQXGnOF9ntHnVbwqT4Yiw/caBucv7DM62q8M7qXIz2q4WGVpPHRcs8qLTq21Lo+TY49ZVNt81VURXeXlgpgnY8zPXLxL9zGKPlN+VtLqBicuksRt80wtt7HlofNoM08Nyv60GAnEMUax1Ba3zSvJrbWuWHfKg/+c4eWh83XtUUTLWUmeO+SrzjOLPI/b46JKcam4GOW2cgVmj972gV51vqp85KkagXfTxa8rN0dlA16MIva4WXvaa+ddXH6pVrS6PnfleWqQBzD7Le7khaPY0OWCsK0Hk/mhQy7Aab991XfUj37DpjFPqptVqEYCecqTtl1Vy0q52uaHDpsYo1KuQ1ctYVzvyuEx0+kooJP2WUm+D3FaUYbHxNsxFw9i4siqekI0b9OhX3r9jZA6zCnI6jOf/UxIvXP7KJ/YMzeeCqldDPuZY4e4WjzsFj/WxI+dQfzYkvixHRuLHzsn8WNL4seWxI/tTA5p4seWxI9d4MTEjy2JH9uxufixBfFjO3YufmxB/NiONPFjC+LHduxc/NiC+LFdhxY/dr49l18QP7Zr5/HQ4scWxI8tiR8777bixy6wc/FjS+LHdu1c/Nh5NxY/dpr4sV2p4sdOEz+2JH5s6ZGKH9trlgIAAAAAAAAAAAAAAAAAAAAAAAA8XryADAAAAAAAAAAAAAAAAAAAAAAAAC4RLyADAAAAAAAAAAAAAAAAAAAAAACAS8QLyAAAAAAAAAAAAAAAAAAAAAAAAOASWT3sEwAAAAAAAAAAAAAAAAAAAODB+r03bz/cE/h3r68f7gnwuPvWw+3DPYHvunLl4Z4AAAC8t/qHfQIAAAAAAAAAAAAAAAAAAAAAAADA+8cLyAAAAAAAAAAAAAAAAAAAAAAAAOASWW2321Mf9X16K9lqtQqp47QJqdM05bM5ODhIm2/nkDp06cRuLS7zpHnq8okVVz2Ocet06GEY8qHHOZ3bFK8r38o+5lhrre/TuW3GdOh1vK5uSLcyn3ZrbT5Mm49jKoS5jG02advW2ibe6qMp5cmVmJ85tz/wgQ+kA7f2xutvxp3HLO3iVXVF7ciZ1uVDr9JVly1GixnexSMPMbnrUhkrTyzfzXlOm48xv/tYd1prU0s771dp79188TxpVbYMQ2pw5tietBbbk6rFaDHD55hjufGf59z4t67LLXwsSDHD8zWPm5yfbRWb6Hync80aq1o7z2n3ObXL190Vx56ni3c9fc6xeNpD9bLXaUoFqY/tZB9v1xQbydZaV4wEUpbmqtfv94rbYnQUK3WfG/BWVNu5zwPdmCdxPDlVLUY/pEzLxawfis56L7FRyI1/rllj0fi3IW7etXTV69ipxfagtaoQFs1RNMaSsGfd6aphW1DNh4oGp7jXMcNz8W6t9UXPtE6JcTJVjLtiGWutHW2OQup6j4FubOdaa22K3yhKQkwci4FAVUbjzrexy8uVetUXt6MYY1R3M+jKJiPuPI+i89SgywOvqu5MsSTk0f1QNgrRHO/1nItorLZzX1SPTcyWVRz8xK6jzbHaFssrrehPi2obTywPJltrLY4xcteT17u6uOfWqqlFHm3GyVTuGsqeJedJ7ui3OU/KFa2Y2seSkG9H7ovL9ZVCbhPiWDSvkLSqrSsmiTHHypIwx1lkX3Q9e4zeq6qzjYOnXESrfqdqMWIh7eL6TF5gr1ZIihXIqiRcvMcsTyw3s0Wtz0O+srGKigIa57Z5haRVo83c4OSdF9W2WtvJ44Q8xq5ajLKhzCWhKuHh0LFS53vR6lXutO0YF/LK+WUx7chj0TweLFdv8uY5ORbRvarlfrPyogHPDV3VJhRXnTeuK+aD+qWrPGfJC/utFZlSFMLcd5RHjmdeDdsuPm4rS+A+Y6eiUletYG5w8kLcPnnS6kFdkqeBudoW45Nqcb666Dxxztu2Ve7KiyFKLkXVGngxFI4ZnofBsRDm8IDW2hhH4FMxSM7jk2qpLVaunGO5YsbImtaK+JbCfkPZqnzn1mwbx9jFKLlqEO68kRLvptXg+ehO2vZO2vawilH5wAeeDamvvXU3pHZXrqXU7e1Tn4gfa+LHztxc/NjiC+LHFsSPLYkfWxI/tov4sfOlih/bkSp+bHlo8WPvOfFjOw4tfmyRKn5sQfzYkvixJfFjO5NTovixBfFjOw4rfmxB/NjuL4gf+zkvdK219qlzPgI6tdULP5dhZ32y/MK7arr4sXMSP3bSwyrDc3t7YVz82K5U8WPn3Vb82OLI4sfOSfzYTuLHlsSPLYkfOy/xYzsO/aTEj9VrXAAAAAAAAAAAAAAAAAAAwEPxzbfSnxa/D/7wjasP9wR4D71woTdyLLc6fpHTC117oXv7H6c+Of7fe98/77uiYCdlGAAA3kMP6sWiAAAAAAAAAAAAAAAAAAAAPDo+NV/kJUoX26o1b27ivacMAwDAe8gLyAAAAAAAAAAAAAAAAAAAAC6pF7q337L03jp+5ZM3N/GgKcMAAHAxq4d9AgAAAAAAAAAAAAAAAAAAQOHe63XO+x6cU1sdv6PnrE+WX+CJ9+Du9b3idLGiC/dPGQYAgIvpH/YJAAAAAAAAAAAAAAAAAAAAZ3qhe+e9YPtsdfIdOsu36oR3k8EFvNC9XZa8tonHlDIMAMATb/WwTwAAAAAAAAAAAAAAAAAAADjTqReEPdCt2ol3k3nnzpPnZHk4fv3cyffQnWurkxvu/GS5OexJGQYAgPeQF5ABAAAAAAAAAAAAAAAAAMBjpnzhzsUcv7bM28eeSDtva3mv73Ori+0czkUZBgCA99Bqmhev2537sME0TRdOXfVpz621zfYwpHbdEFKPxqOQOrd0YpvNJp/YW2+9GVKnliYN62Gdto051lobYqaNcdu5S9tu52quM25D4pV1envdPMZy0qU9b1Nia611Q7quq1cP0rZder90TGyttSF+4+q1a2nnMcPHmGOrVfGuwHxduZTNMbVfF9U2KyrXfvPtOWZpLuBdFzM81p09FRcdk4e+KKPdlL6QD53zc4wNQqtKad5561Pz3rd0UeNU5Ggf72Yf684m9ix9V73Es2xTzlYV75Q6DCk/S1NsFPLOc5fXWhvH1HHlpmzoYxEtO7XcTsZxQm7AWyyEZTuXr3qMLXgXa0cpF6RcfvMApq+GfN1y/HlCvuox36zYDObBZGst7rsYBkxdys/cFrXWpik1s/nMp1izcvtcDUWLYlaMQOaLV/n7+MLFhxGrOJhsrW236cyHIeXaHIt3n1OrAUied+TxZB9H710eEVbZnQtwbL9bzJLWWutj+c8Z3g25LYvNYDXuOlilXi9vvI63I9/o1lrXUlmpmve9+o7c/hddeRxFbHPPkk+r0seSsM1T0KqM5l4vz+inPYZ8ZSM45yzNebJJzWDZ0eczv3v3bkjNHWZ51VdixdzGtm7dYhGNJ1a2ot0ec8xc78rB/zaOE/KEqKi21VWvVml9ZrtNs62Wl5Xiccsimtv/3AjvNfPdr4nuyuu66HFbNdCd46G7fEOqfiefWx+LWc6xuWwz5jjGjieeF46O5tSzxErZWjUCr0p4Xrovb0dKLW5mXGordfF+5cYqn/c+q2GtagnzMDiXk3m/UVk+89x3zFUD3seR8JTX4vYY/cdZ9b1vXDzTqnFsuYMH1ZUXR9134nzxbe9jzw8smK5evclLKLnbimIB7uLD01KxxpFXH6vq0efbkfMk3+u6K89bx866XNEN21ZfGOLiTzXbytW2KKL7XHXu6Kf4WPg+2oOLrwbP+63y5eva52lIednFAvseLWF+plA+pCnKSbys3Nn2VZ+1yXOxeOz1Oq6GVTPfMY+d4gOmXBLWcTUgrx+21ubYzOY2OM878rCqVY+f8rCtGBDGFmOaqk4tVts8RMkD3bKtypPfvJiWO+u5CK5pP/b3PhdSv+S5GyH11p20BnL71u2Qeu1KcTvyI+lbhynI6sZTT4fUt+6e3lb8WBM/dubexY+dJn7svMSPLYkf20H82IL4sR2HFj+23Fb82HLP4scWxI8tiR9bEj+2Y1vxY7uIH9uxc/Fjy0OLH1t+QfzYcnPxYwt7xo89uHfi3Hu12fELzk7lsPixpcc3fux99s23Uo8Aj75vPTyucXvFT+7nIR46e4gn9ji9Je47fm5oIX7svMSP7TpuPq8mfmzX1uLHznds8WM7thU/tiB+bOkxih97gEESAAAAAAAAAAAAAAAAAADAY+SF7u1Xmz24F5wBAAAAjwIvIAMAAAAAAAAAAAAAAAAAgEfXC117oTv975Mf3udW994pdu/Dk28ZW35y/CFPjG++dfdhnwIA7du324d9CgAA71g97BMAAAAAAAAeD7/vrTvv5+H+8I2r7+fhAAAAAAAAAADgkXX8UrDywwtsdbGdAwAAAI87LyADAAAAAAAAAAAAAAAAAAB2+703bz/sU+Cxt/xByq5L35/zK/Bict60r16u18Uzm6Zt3n1Im/t4zZW5yJS87ZS/0Mdzm+LWXRdvx5yvujix4yz9lrubk59+19V1tWGb4nnnEnjvK3HznGPldV1c36dillV5UmZKvq50YtOYtiyKSWtzrnrdkBL3aBS6+eK5fcq3b3PrAQDwcHgBGQAAAAAAAAAAAAAAAAAAAAAAD8S3HcU3ET5433GQXlYIcGl5ARkAAAAAAHA+L3Sttfap+/4xxRfe/cN09zY8/nDn/wIAAAAAAAAAAK2133fz9sM+BXgPfPOtu3/4xtWHfRYAAAC8y6rrFn/HE9/YuB2PQuq6Txtv2zafzcFwkDaf0uZD14XUO9u0bd/3+cRWq3Ri3ZA2Pzy8E1KvXi2nymnnq3jm0zSF1PVQvH5uHNPbQ4+O7obUnKVdSzcr38rW2jinE5u6dOh5TnmynYs/a+tjpvXxuqbtJqTuqIknU9NZt9ZaG2KmjWnnq1W6qCnmdmttmi7+t4DzmC6s64uS0LrU4HQx1/JpTy2WsViKWmurVW5G89axFOVNW5tj+e9i5ZqmdNW5oWtVgzPHytXljicXhKrazrlyxUPnHKvaqtbHQxfbz/HQsWvocoPQ2hzL/yrWrClm+J5/GjznIhqLQhdPu7VieJNv1jzFDI+VY1s1kl3Mtn0K4Wq4kg+dO/pc94qhU1Ux83X1OTWW/xb7jj7WrFaV4eKq8r2uOrXYiLbVKo6d4hC6aIGrpiyPnXJn3eeKWR17ykU0bj7Ebqsq/G29XofUbZxZFEPZMsejnKXTkK5rjqdd9Lat9fFez7nbylODqp3MQ6/cHM1xGDzEi8qTjtbaECe/Q+4eolxtW2tjHKwWfUfceV+NN4t6HVvKPLPI45dyjJHHCbmR7YY4IKyG4Lkg5XPPW+ZpdR5+t9b6ONHL5eTgWupZNlUrmrvyK1fyECXlWNmA50y9Hu91rnr5duRmsNx5UU6KfZetTayYsSANMcc2VSHMCx3TlHrbfs4ZfvGLKjefc5cXC+FYzk/zxDluu84FODbgQ7UGmDMtF8K+TzvPg8lW3449xpPlrKQ4t4vP1IbYYuRhVWstrpYVqzfZdkqLk621KwfX0qHfXf5f2GNg+6n5nc2PX2H2Qtde6N5+6djxF+59km9WvpH5ZlXtd1Exc/kv9lyXhDSALxZ/Yiuae+rW2pRH0XnjmKdTMW4q9j3tMbIqpqdlUSjWbONANzbCU37sVU3V8rSlWlbKBXyv2WvRvOcmuppMDX2cs9eL6GfLJaFsMYrnHTFP8iJ27htave50YVN16Lwqmwthnm4V21b3I69jtzytbqmM7amoHXHbYoBdFf6i0seZRbXAWP4aZF44jan50FUDnoeTe4wHi6iGqVpNmIt1p3g78mpYOQyOP1C3Wse1iOJOFocehlS5pqqMBjn2oF5q28RxV2yO8nP2HDzQWhvWuRWN5SQWhXza5cpn8TAlj7GLjr6oHeMYA3u6lOHFELrqLn/+P/Q1IXVYpQL8TCwJQ0w9OCj6nS/66EdD6hd/9GMh9ShOIZerfP+X/+Q/Pf0l8WML4seWxI/tSBU/dk7ix3YRP7YjORE/tkwVP7aT+LEF8WNL4sd2bS5+7DTxYzt2Ln5smSp+bEH82I6dxy3Fjy2JH9tF/Nhyz5cxfgweO6d6olw78sRZ/NjOvYfEJy9+7N6n4seWxI+d28OIH5vb2MSPXWBb8WMLj3H82MNwb3AtfmxJ/NiOnYsf27X3kCh+bNe2j0382MVnOAAAAAAAwGVz701h530N2afu77HgybePAQAAAAAAAAAAp/zvPvD08b/zD1iWyre2BXv+gGV+QXz16pwH+AOWY3zhRPEjHMULDff8AcuL36yTvyzyrXfe+TvzP3Tt7cs51w9YnlK8OmfuWmu/7630Qx0AwCV0/FPW+2x1HNB+1ifLLwCwkxeQAQAAAAAAe7nPZ8D5a8cPej3iBQAAAB6cT/63//3DPYH/z6/8ZQ/3BAAAAAAAAHgQ/uB9vy/y39zeT7Bs+Z3TX/iOVX+fJwAPy3l/BvusrY7j0l/o3o4/X35y/L9NjDpA5AVkAAAAAADAXt6rx7HHz3ffw30CAAAAAAAAAAAAAPDQHf9k9fuwVWvePgZwX7zBFAAAAAAAeODK14qd/KUpAAAAAAAAAAAAAACeeC90F3m5WOlTs+h0gPuyetgnAAAAAAAAPDZOPtw9fqdY+XKxpXtbndzwePMH8fyYJ9K33t28n4f7rqvr9/NwAAAAPGgXWNBYbnW8jnHWJ8svAAAAAAAA8GTzHArO5cGV4XvV5GJVEuDy8AIyAAAAAADgfu188no/j2OX37nwrgAAAAD2cbG3ny+3Ovly9he6d72l/fiTduLt7cefAAAAAAAA8ETyHAoeHcd157imALCTF5ABAAAAAACPot93++hhnwIAAADwBDr1m/APdKvW/NUHAAAAAADAZeE5FGQny/nJ1+q1+DvWZ211csOdnyw3B2Bp1c2nW8ppnsIGfetD6mZzmA62OshnM45jSJ1bSu37dGI5dWrpkltrt+7cCambzTakroZ06HmR/4svpLHeNKbUfNVHR3v94VYfr2uaUpZ2XbrqeMX3vpB2fnWdilkX82TohuLYsaj0c9p53vbwaJM2XRUndnV9JaS+cXgrpB4MsWJu44m1Nk252qbbOcZbObS9bsccb8dQ1fpgNRQnVpT/uG0Xc6yNxWl3sWLm2hUrR6tOvLjXRa2Pex5i8tztNyEuGqu4bXXoaUpfWMUcX63SG0L7WAa78mbFqpfbyT5edN62tTbGQpjLyRS33bNi5t42F4W87TCUdefiihyrWowsX1dOLepOdTuKXInFrCpFRZ4UDfgq7bzP5aRqMYZ1KsP7rGzkAXZVa1tXjI7SdW3joVt1O4ZhHVJzg1MV0apixuqT73XOk6KIxmFVa62L96uPyX0swNNUDPm6uPPcRFfDgKp2FC18vh0X7/LKIpo73Nye5JnaXDSS1eQ3Zsmc86Ruby7eJxZj0Xij5zisavdRkNKh46y864rbsV+PmVvhB7iwXSy/5JtV7TwXsz2GXW2opsb5uqqVityzpOPOc9GAV1e9T3tSlJOxqPW57uQpZFHvisoVS3gfR9F5fFLVrCLDt3m6tN/ofhXPraiY8V6v42pAXrosN89DxmJsX92OOV51vpv5dpQLjOM2ZctcrHym077Rpxn9tlpq28YszeUk59i4qUpwnLaU01t46Mqwg7M2WW51KpTh5Bf6Rd+aq16fZxZ5ulQNg6u1uPh0aY85y72DXzg1d/TVRZeD1TwCiXsuepZq8JMnNcWobI/Za6tWqovEOGepRpt559XTwFz+43Gr8xrykK8Yv+QVrb1GmzlLq1of91w9ca5uR5695jn7XoOEfk47n+Jsq26siudiF18aytEFc3yC36qnPHmiVwwIq+pRLY3GBrxsE6Ipn/kq3Y517DvyckFe7G1lz7LHI4nySWIO2BjiI9JxTjOLOdasvqXQgtbalB/xb9OtzMu5XbmwlMNjijn7xRexW2u/8xu+ISXnFiOWsu2Ypp9lRz9t0r3OTwPHmLpsv8WPNfFjF/LkxY9dYHZ5P47/XCRMMJv4sV3Ej+0gfmy5rfixBfFjuzcXP3ZO4sd27Fz82A7ix3ZsfeFDix/bSfzYeTcXP3Ze4seWxI8tiR/bdWjxY0vvQ/zYzeNPbjx1/fjf4sd27Fn82HLbd8WP3T7+17WfW1fcL34spi4G2MOp+pJ3HtuTVfEgfq+p8V7Pp3K/Uz0XWBWjzTjGKBr/QpdvR57n5bqXb0c5Aj+jObrXnRX3Ol5TObzJy4Dix86bejnix3Zn7/v2HOpdlyp+bEH82I5Dv+/xYzsrQlk77nOr+mtz18SPnbWDs4kfWxI/tiR+bOkxih9Ls1kAAAAAAIB7vumN2/WX4P11sV8kO/XTZ2f9vtnxa8j8NiAAAMBl8OCmfsezywd6FAAAAAAAAB5NnkPBI+Jb7hav6H3YilfWPrBtH1+vv/+H/FMff/79Pyg8aF5ABgAAAAAAwGPp+Of79tn8nntvGTu5K28fAwAAYH/H881Ts04AAAAAniS/8zM/+3CP9R9+2cfetxMAAB4RnkMBAO8JLyADAAAAAADO5488e/2+vjdOxRdyuEN861PXp43nqTp0NM3p2F3r07bx0Pm0W2stHnqKmdLFDO3KI+dvjHHbfNpzvB05tbW5353hZ/0K2X3+lN/Jry0jb44/9/YxAACAJ8/y9dPHf5URpoFnbXVyw52fLDcHAAAAAADgieQ5FJzl2za7437h8fI7Xnz5T338+Yd9FvAe8wIyAB5733I3/u1jcpEN/9C19PelAAAAAMDDdZ+vDDuOxVmG4Jz8PcD7fJ0ZAAAAj5Gds7xy6nefW11s5wAAAAAAADwBPIcCAB47XkAGAAAAAADApXbqHWT33j528r8AAADwXvnVf+GHHvYpwCXyXdeGh30KAAAAXC4X+52zU1sdByqctZ/yCwDA5fTtm+nE/01nfu898EB3vo/tHtvmi3pkL/k99p0H78ezle9cr/q+D1+Y5jGk5m1ba62lgXLXxc3ndK+7eOh5KgbofczdPiaPY8qToRU3rutSPPRqFTeP2/b7BVp3q5Sl6yHt/cqVayF1Hotqu9lsQuowvCtPfseLL+e9wWOtbFUBAAAAAADgUfRC905M7fG/T364073o2xzyuwzqBQAAAAAAAAA4SxmucJ9bnYxnOA6EWBLYAAAAALwnVg/7BADgPXPeHwk5tcJ+csPjXflJEAAAAAB4ZO1ctbufpbzyvWP3vysAAAAeI1/7//xLD/sUgPfVt9wZv+ta8XvvAAAA8J44+cqwB71VO/FuMrENAPCI+PbN5mGfArwHvu1o/M4Dz1YALpdV606vLsxzXG/oppTYpXWOzWbMZ5N23dowrEPq7ds3057nbUg9OioGc1euXAmpXZ9yrG99OrFWrAzN25RpOUMP4u3IN6u1No5p98MqDRqmKW3bdenNd8NQDEfu3r0bUg9WqZys1+nQ8axba20c473uY4YPByF11dKet5tcOdrVa6mI3rmTcqzlkjCkAtxaa2P6whyva7VKt6PPbVFr45S+MMcT7/tUzLZzKgpFI9la16Wdz4tW96QhtglTeegpbT7H62oxT2I711prm5aa2aLBidc15Vv5dhs77vNjHSffMnbP8sVkJxfl75WfnJ2ttW6IdzNu2/fpsrtYisaicyjfPhqzMp537jhalSe5uZljrZ6mop3MWZptYuN/EPc8l71trtdVrU+bxha4VXmST6yP11XejiH2mPm8c3uSD12OMbI5loQ53uquKOBlCx/rTuysc29byr1e18VDxxNbr9OYrbV25/Aw7XyP2pFb0dbavEefmOv8FAt4XxXR6rxT+Z+LUyv70TiAie1JUTGr9jnX+nJgFkxjOrE+9lmtmvKs4uw1txh9Hv1URSVneDFSrbIzd2tVlqbr2uRRRHVmua2b44nlNiE3dK1uJy8+K8+3Mk8/W9XR5wzdMwplylkaK0AXDz5VA9089MrNfzVqixdVjTTzVed7Pcd7XebJ0GLnMqRDVw1dMcbIw9FyVarY99nKiXPu9Pbpbas5TZw2t5ar9TSmradYCufxdjxyu3UnjbvyUDavmsZVitZa67u0eR7ATPF2lGOM1TrWjj2Wy3KVX3ruzpgAACAASURBVF1Nl9xaG7d5UJdSV7EYbcZitDnlMvxO5XqnRN24fu3eP7qqBOdD57IyxNsxFkPwvHRf2OSRVT7yfs3gHEv4Nj41yGPRqVzSinJDWCwN5TlL1WKU607vj99/95E4jZ9TrMDsIfda7LS7bHznwUEr5zQxuVxgLJqUmNrn3jYfuNp5MVgtzjqvH1ZLbbERXud1jDiyynturRptFk/hL5xYLNi21ubYJ8bVgjbHNrqvZkRFjxljD6qdl+u9e7RmF3+u1YZ1kSe5U5tjalE7Yn621ob4mH6fyW8xW6qWi7P1Ok4c4spPqY9hD8VKRfE0pHpMU+RJKgl9OXg6W1c18F2sXF1eiIvVIz+Fb9V8Kq93beLEuXxWcvPOnZB6cOVGOrE4ozk4uJYOnJvg1qY+hTPlye8Yi+iO5VzxY+LHztr5kxg/BlxKZ7Yqc27A8wNW8WPLQ4sfWxA/tpP4sSXxY0vix5bEj+04LfFjC+LHdmwtfmxB/NiOVPFjy52LH9uRfMH4sXt/kfSevyPs+LVlx3ueph1LoOLHdrr08WPvlIqnnrp67x/3HT+2w/3Fj72zqPvU0+9+gCJ+bEH82P3vfD10rbUxD37yU/6qLy8663hdeQSeC3855NvGQ+eJQ/5D5nqmlf+aPt7OMf69fF6wbdWabS5mxfg85kn8S/p6c3gcHbeO73X82DtD1qEfxI/t2Ln4sYVHM36s62bxY0vix3Zs+/jEj+31PAkAHhH7/EjIKfcW30/uyk+CAAAAAAAAAAA8Yf7ar/tVpz45vFuEoecfsCz+ejz+rfPRUfpTz/IHLF99/Y2Q+tqrKbXlEOFdf7l60vYofWGMMcQ5JLv+AcsYQ5xfHbKKN+vB/oBl3Lz4Acvqdf/5/Qj5Byz3edlK2/cHLPN7GdKmZyX+/tvFmyUBAADg/fHg/hbp+M+dHuhRAICLuffrle3d7/77N0/8XNO/c++FmPltLMXbgsp36e7zA5blO32qlzFeVH6hW/nTC/m0hvxC2/wDlvUTogf1IvUH+gOWx+8a+tZH62d6AXhfeQEZAE+s+1xDP/m15SvMlj8JAgAAAAA8dL/3lj8i5VH3bUdHx2FkAAAAwMP1LXeOHu4JfPeN9cM9AQAALrN/6XMvP9wT+N6PPfdwTwCePPf+0On4v3Axv/PFV9//g3795177fv0C8Pj7g/EHWlpr33ZULEqffBnZ2c48yr+z9p4QAOA9Y2ABwBPrwq8MO155P7kQ7ydB4HHxe1679X4e7n//gevv5+EAAAAAAAAAAAAAAIBHzckXgR3/FVL550hnbXVyw+Xmx594+xgAAACwJy8gA+BSO7WOf2r9/eSPgfhJEAAAAAB4NP27108/8Pr9t9/53b/vvnbm47BV1+c9T9OUUltKHbohpI5p09Z3xVrkdk7b90O6rjle1Fz+BkPOszmd+biJh+6LYw8tZekc86QrsjSedlee2LsypfztSgAAAAAAAACePDvfMhZePbbPVuf6GgAAAEDgBWQAPAku9iMh98NPggAAAAAAAAAAADwZLhZUdmqr41iysz5ZfgEAAB4FxsPwBPsXf+bl9/2Ye/4618335izYw8PqF77+c6+d2uf3f/SD5zsJgEeGMTYA8ATwAjIAngQX/rmPs75z6nNzcngcXWDx7qyFueMPLdUBAAAAAAAAADyOLvYLlMutTv5A5gvdu34p8/iTdiLO5PgT4P3xe1679XBP4I8+d+PhngA8On73K28+3BP4ng8983BPAB4pxsMAnKRf4KH4127efW93+Htvbc71/e++5r0KvJe0pQDAE2N1+/btUx9dv3I1bDC2NB6ZYupqKIZR05g2Pzy6E1KvXLkSUu++keYkfTfmE7t+NeXJvE2nPcbJyGoqDt3lLO2HdOhpG1L7vs+HHlbp1Mcxnfkch63dKpWEaZrieRXmeOx82gcHB3nn223K0qFPmx9uUiFcdSm3t9WvARRn3qUsnVvKk2kup99p56s+3ettLKLTXJSErks77+NVt7htqlettVbUnSnW626Im8fyH896X33M8FyzWmt9PLl5Spv3sZxkXVfcjgfhD5xzWepC3odDwBPlj37o6dbaMLzdhO+zeHdqYa7teiPhyaW6ewfNA5iyFb2yXofUvPOcWg75srzz3Bfnq87DqtbaKp55MQyI2263xRhj6NOZz3F8PsdxQr9ft5XLdR7o5jzpumL4k+9mTj2umLu3Hfca/OciWhw63spcxlqVpWMcWXXxZlZ3o40xw/OoLI/e56KUFYZ1mtTkAeE6DpJzjrXWtnEEvoolIa9j5NNurc3x1Pp9sjTeyuq82pw7ptgaFeW/mrMPsSUsWtGYoUNcA2mtdcXkN65o7dHllc37HE8s7zyvC92HPFNLW/Z50Sn2O6V9uvLqZhVFNFefXGmLLi+2sa21fDPzVR/EcId//rf85pD6dV/7y+JptU98/GMh9frVayH12vX0txMf/NCH8qFvvXV6afqkK1fTeu8ci+jmsIhQ6YeUpXmhYsijiHjczeYwprcxltFbt9MK+TYuP778hVfzoW/dSn+K82N/58fv/eNn2x88/vAP/v5/494//q3v/M6wbV4/b63lIcqY+8Q9BoTbqlPbbOIYO66f79mf5lFEX3RqcXGyGugWLXxsrOZ46Lzncqa2XhcjgWsHy+c4bx3/Kyyh14P/WDHzKLro8vKBq/R1F0tCtRYR5FHZvd2HtM0Yp/zxvPI4trWije7jo5Ysd/Rd3dGHEj528UFMlwe68UlKa62PbV03xWpblJPqMU0eWvXxdsRh22qPRadWPUzJWw+5M68qR671Yyzhq9izFEso1SyxGujukeFVnoxzKsPdHMt/XKYrR+D5zPvYiuYJTxe3nTdV3Smei8XTLvZcNINVM5vbkzwCqZZQigY8Pz+NkQl5SbZcId9jepsXWIbymXOela/S5nm9K5eUvBrWWsuFMBffongXfVqxDFIN/vO9LirmtWvx1QBx0XaKF313m8fnxYlttzFWJG4954ZuUfjFjzXxY2d4IuPHTlpegvixJfFjO/edk8WP7dj84caP/dyl7fw5utLFtjre5J0QlHdnQpcb4dhj5keoQ90K7hMDkE57qMMPYt9RDCkvHpzQztM7LK3i+mQ12yqKTrlEeWFlnmR5iWaf9flWZVoVkrFXSXhYxI8tiR+7gMc0fuzhChcufmxJ/NjSExY/9nDHw/fiysSPnXfn4seWHtn4sW948fP50PCoecjrJAtf/7Ovfs9zO9bhxY/tSn0C48feN8u1dPFjS+LHls6KH3u4bWk/b5v4sZ37Fj+2cJH4sZ/78MHFj43zVvzYzh2ENPFjO/b8sOLHpkn82I5U8WMLj1H8mDf1AgDwpLnwMtzJzY8dv5js5P/6oQAAAAAAAAAAgMfdqbCQ98px7IrwEgAAHmXGwwCcpF8AeGRpSwGAB8oLyAB4vH3zrcOHfQrAw/d7vnDzj37o6fyd+3wQsvzap+b2Qvf28pylOgAAAAAAAACAJ8aDiwA5/om7B3oUILhYBdz5c5Xhk+UXgCX1ER5ZxsPwIPwfPv6R824y9H1IXR30rbXf+pMvHn/yf/7yjx//+5//Lb85bPt1X/vL8qE/8fGPhdTrV6+F1GvXb4TUD37oQ/nQt966HVKvXL0SUud+CKmbw7v50P2Q/rC670JiG1pq1OKmbbMp/ghunNLOb92+E1K3m3TVL3/h1eN//zf/+K8/62vvW7/wPc9dv/f573otFQOeYO/JHGH5iTkCTzZjbADgwfECMgAALoX7XFZbvm7sFEt1AAAAAAAAAAAE9yJPjv8LvM8uVu+WWx0HiR1HlC0/Of7f5octYRf1ES4n42EATtIvcNJ7NUe4xxyBy0NbymPhWw6L162e9G1HY2vje3sCf/jqwXu7Q4DLwwvIAHhy/OEbp3/dYhzT3GPVpXn22KZ4tPRbGa21Fjfv44+TXLt2NW0bjzrP+bRbiz+1Mc8pT/JvqrSYn621eU63Y44/ETJv02nn/GytzXNeIEyZNsedd1PO8OLE8sb5tPOuyzzZx5Svujx03Dyf+fjuPPk9X7hZHGs/y8VlS3UAAAAAAAAAAI+jk5EeJ/8cscWfoDtrq5Mb7vxkuTnwvrlXB89bAS+2VWv+khkS9REeHcbDAJykX+BhMUfgSbKzVbzYVtpSAODh8gIyAACeNBd7ELJcmDu5K0t1AAAAAAAAAACPr51BI+Xfg93nVhfbOfB+uv+/Aj2X4z+BVuXh/qmP8FAYDwNwkn6BR4o5Ao+pixUtbSkA8AjyAjIAAJ40F15fO/WdszaxVAcAAAAAAAAAwP37A3e25/n60YM6D7jEHlzQ170/k35AfywNTyT1ES6hr//cFx72KcD751968aUHfYjf+pMvnvi/f/9U6vht//qDPgHY0+967fauD+++/2eyh83DPoEnyvs2R/imN3aUvXP5I89c3/uk4L3xbW8vOY/xWzn1gdqnnXyIpz09vEM/Ws8FvvXw7RL2HQfDBTa/2OLMqa3u/W/4ZPkFAC7MC8gAAODi/pUv3HzYpwBPpu/50DMP+xQAAAAAAAAAACB5oWufmt/5L/AQqY8AAMBJ5ggA77+LtbfLrY5fRvZC966W/OQnx//b2jufAHAxqytXrpz66GhMP7E1bVLq6kp6o9lmc5jPplut06HH9MbQVdfnnQf9kI7bWrt5682QOsVe8OoQ82QqXoM69PG6xvQC1/U6Xdc8V11ol74wTyl1GNKrTMdt3nPxVtquSzl+9zC9f/pglU7s6LA4dN+nzX/5P/orQ+oHP/ihkPq3/tbfCKmvvPpaPrGXX345pH7mxRdD6hAL4VGs8q21u3fj+3RjMVsN6VbeOaxqR05dpZ3n4l/XjijX2n5ObcIQt51jrbz3jZQa9z7NKcPnVhy66+O9bunExvgu6jk2sqeueFq8Wzo2GIXc2nRz9QrtfDuioaWbNQ+xQ5yKt4tOU6zXsQGfYotRXnDXpZ13uRDmqlWp6nU69yFuOsWuocXusrV4p1vr4lX3MXXPpqxob/LtiM17a22MtWOOVW84+xXyQzfnnhp4vHRD31rrYxOdO+vc5fVxplZ3a33afHt4J20at12vi6asiy18zpOq5yl622p0lLad+zR26ov8LpJXsf3v4pnlcVcx62htikPZPg5+tnHwkwv/XI1FxzwXi1eds3usRth5HWPapjPv8pylWkLJ45+qdqTUPg5v8uiltTbPcVAXh5tTXn6J7Unbbxic5bFoa2WjkEv4PrfyASqawSo/++LMY0kY0w9A5a7jypXixA5iKzzEW3n7rddD6htvvpoPfWV9emn6pC/9eb8gHTouSU3d1Xzo57/o4yG1amZTnrzy0ishdR0vubXWTXEJfX4rJG7i+vlTN4rf3Lt+7UZI/cqv/Mp7//hT7Q8ef/jr/qe/9u1/xb74wx/+YD70L/3qXxJS16vU1h1cuRZSV6s4ca6Wdvq4mJyn/HmQMJc/j7bHstIq5tg4FssFY3zokFf+p9yUxfH5ZlPcjz/5fd+/6+M/+s7+4x2dzn7u8E/+0/9UPvSf/YE/G1LzKkceEBY9dVlG485zX7xnpzbG5zh7Lb93xfAmP1brYqd27epBSr2W2pNPfOmX5RNrm1PTwB85/tdXfdUv/PSnPx02je13W63TabfWujhvmbq491iKVl3x/HTqUr0u5uyxJEx54DRXE+c8vM+PXnMJzQdueZhQdGpV7YgHj5Pu1lqeTnUxPKCYtOcy1to6FrNNzPE8hN5WDzHzk6/VKs7KY0HpYiGcY9Vo1Rh7iC1hsRCRHwBVj2nyY/q8mDZUK1p9vOp1LGbrOCvPKxV5Ja2VVS8Ofvo43y8f0xRHjt3D3U2aEPWbdGJDFR6zjlk65rWd/OiqXHONxSyPQMZtLP9VQNGtW7dC6sG1p9K+91rlyOfVupZGAlOXlgu6c/4mpfixJn7sLE9i/NhJy1gy8WNL4scuQPzY0vsWP7ZT17U/cKcoycAT5uSfq538s7R7/zjvVic33PnJqc27xUCofMCa+7wH95C03HN14hef9ZSdbbFEU0QNpRwdcndbyYP/fDNj/G8dQJODjvYIiyjWnVqx9lmsnT7c+hgeUYkfO3+q+LEdHpf4sd/1s8WkEnjCDN/57/d/8F+/92/xYzuJH4OHaP85wvLz+58j7O+b3rz9HSeevYgfW7ok8WO/8a/81fB9eJJ8+9H4HQdnV65F/Ni9tve8De/Ftjre5PjtY9sTASTix5bEjy1dPH6s78WPLYkfW3qM4sfO920AAHiUfeNLrz/sUwDeG9/40uvf+5EPPOyzAAAAAAAAAADgMbPzL5bDnzGfa6uL7RwuLfURAAA46T2cIyw/N0cAeDSVL5q8mOPXlmnqAfbnBWQAAAAAAAAAAAAAwJPvu6+9Ezs9tPSj0lP8MfbyJ9OLX/Ee0u9sP3XtetrxkH7zfJiKX/CepvgD4H36jfppSofuqh/prr6Qdj6Xv4qedx3PPBv6XE7iiU17/dlTzrE+/4x8WUTzoePWU4vJQ3Gzxm26Hfm6ujn9vv3vfuWtfOj3x7/6ypsP+xSAt/2uLzwSzQJcEn/iYx9qra1iVz5tU1fexUFyObzJXyjGonG02cfhzdwVI/B8Yn0cWeVx7NAXfxmaD71XjpXygHK/4f0+pgd25K//7EvH//5Tn/jo8gt9kaWxnAxTa+23/b2Xjz/5j77s+eN///bf9i/c+8f0v/737+dU4aTf9D/8t/f+McXq8YHnng2p//Wf+3+E1A9/+IOttR/+X3zj8Sf/wH/8vcf/Pvn5b/0bf3m5+XqV2rqDK9dC6moVe5bUKbXWWr9KiyR5yj+1tPc5roG0tlc7uYo5No5FfzqO6cyHIS4cFZ3atrX2fV/+i/MJPBa+fXPy/3KWxoW4fVWF+LH0QHNsE1NvxdRX3ssTuZDvvnaw8/OuXXxFt7W4EFcNCPNSc958iq1wXiEsG9E87sqXVTWTe9lnRbeYEHVFg5ALQvdzt/JbH1gVfHAvCLv3arMH9IIzgEvFC8gAAHgyfe9HPnDyf/eJI2zVmteYHwznNa/y0A/s0W+5DjiXT1QuqowK3efMq2jXvVaSxuLZQBIDgFuL4aqttT5GCcxzXghMiVO18losUcbU1bBOh17crG986fV8MgAAAAAAAAAAAAAAAADApfVC1z41v/NfAPax16sQAAAAAAAAAAAAAAAAAIBL61/+3Bce9ikAAI+07/vyX/ywTwEeY3/gztHDPgW4Ly9077wL7PjfJz+8z60+Nb/979be/vdZnxx/CMA+Vg/7BAAAAGCHb3zp9Qd9iD/xkQ886EMAAAAAAAAAAAAAAAAAwJPt+KVg5YcX2OpiOwfgfngBGQAAAAAAAAAAAAAA8OT43nf/Lt00Tfvsreu6kDrO6a/c+r7f69Bx53NMzaedU1tr8zzmL1zYPBeH3ufM873uur3+JHFsF998yGWwL/Kk79Of/8xz3Hvc99SK2hFLWTsrR3/3yzeP//19X/TB3YeuKmZ/xql/w0uvHf/7Tzz/gTN2vk17HuKfU5W1I35hc3gnHTreyvV6KA69R62vFI1VUTFjOcntSdVOFidW5Umutns10VOL19Wle72N1faswn9P2T6P777o3/Wz71SZ7/noc6uY4eft8v7lz30hnwwAwNI3/OTfPPm/m00xvPmT3/f99/4x/OE/evLz8Zt/T2vtj33fnwzbbuO845/8p/+pfOg/+wN/trX27Zt3PvmO9YkTiNPbvkvD+zyObeWUPO48D9CLsX2eQ7Y2TuncissqZpjFiy/ymXVxZn3t6kFKvXYtpH7iS7/s1Ce/8a/81eN//+lf9jVt8/Y08Df+9R955/Nf8vff+8enP/3p4w+/5e47ufddV4fW2hhnxt9+9KAWZ+CJ9K3b+18EzssFueo90Ir5QHe+qb8CXFZ7rZMCAAAAAAAAAAAAAAAAAAAAAAAAj5fVldX61Ed34qt8p/hu2G1+JWRXvO9sii9hXa/Su3iPjo7StgfprbSr6sS+9BNfHFIPhrT5doqvgcwvGG5tiq/yvRqva7NJhy5/umeO57be4yXCe/4U0jimzfM7ho+2ads7h4f50C99If0ux1/7nj8eUg/vpCK6jRc1zem3d1prN25cDalP37gSUp977kMh9fnnn8+H/hW/4leG1C/+4i8JqV/2JalmffRjH8+HXq9S+R9WqWLmX8jJdWcai7rz9NNP5y8Eh/HHjt544/W8+U/8+E+G1L/1t380pP6F/+9/F1I/85mfyYd+883XQ+obb94OqZvYd3RD/v2cd9Wdu3dP37vcVg0HpzvBd20by0n5e3Sf+Hgq4Z/97GdDatfv8XNG1euH5/wzZfkH0OIbnfs+5WdrbYrvts8vzh+GPd73X92vfX4KbB2HRnNf9bbxVw6q3+hLvcN+P9HXuji86eN79ac8XmxtHe9m9XN24cT6U7eyLBin5GKWzWOqen2VJ0UhLM7r4nVnjKfdWmuxJHTTPj+jV7SiecjX8m+vxb6jr36CMt+u1ZR/9i02VsXvh5QlNv8yZz6xuPPqzf5558Wvk8Rykju1F7r2qfPU4xd+bmfHW536ZPmFs8rp1BVzlvwrlFfj76LkKr/nb97u81uOuQDXOy9K0sV/WrPMkikWs6o7SKll15BPbYwnVnWIuZwUc/J+j+FN7ovLIpp/37UYY+SBbvVLv/vY65eT9zt0H9vYnOHb6se+chne6zdvq24rl+EhloRiQJh/KKwqolP+8djcn+bfFS/b75jfeed5rnU1rpBUq0qtxZna03Gp7WdfeS2krq+mBavW2uEm3Y6XX34ppHZDuuovqpaVqtsRm9k40Xv+Ix8NqW+9+krac2uvv3Y3pN49TAuM3Rh/vrvq6NcH6QurXb+kdPzh9atp+fHwblrvaq1tjtIXhi7tfHs33Y5t7srzpKMydXv2ABc3xAZ8G1Pn2D631rohNTlHh6mYFSv//V5rO7/pn/sNyw//dHvn1yw/tGMp+6eP//Vv/N7fe9aen3r62Xzo3/n13xhSr127EVKvHKRWdBNvx7b8DaHYHOUMzYP/vELeWjuIy6r54HmFcBsf4rTW5viFPAwep/QMqI/Dm20s/K217/9jf+TdH7zzO5Zf9omP/diP/O2w7a/6ul8UUj9aPab5wf/+L4XUV7+Q1/HSdW2qKfkUb0e+l3ndNGf3fgufhauxQ9zm3xuthsGpI2/t2kEageRx7Fz9bGMegbc8x9yvyytWRuPO85H/jW/6V/Oh33wtjSef/8hzIfXzL78eUj/zM58PqeVU6+WX0xPn115LI8Y337wZUm/evJUPnX/B8urV6yG1yzerXo1PXzi4lg49HsWOKS4XbKtOLS9Ez9t42ldS3RmrZ8pdnvLHLM3z/SGukK/jqKxVeZLn7NVzsWJ4cxgDNoZVyvBcBusVrbjaUMQj9WnOktfKyvF5vrApnvYUe+NlCRU/1sSPneGJjB87aRlLJn5sSfzYkvixnR6R+LGdtkfbs/5X/NiuZPFj5zsx8WNLDy9+7DTxY0382O4Dix87147rnRcz87cPsfs7uVNrrc33sUR5Vq6v4uJnPmnxYxfZufixhUczfmw9DA8ufqzve/Fj5yV+bNe2j2X82Em7Y8ne0/ixk58cx4/d3vWh+LEzto+Jlyl+7PjzC8SPHTtv/NhZEWU7A8nEjy09GfFjR4fvKu33Hz92Mmbs+PP/65/+gbDtv/Bbf2tIvc/4sR9sv/74k//bD/yZ43+LHzvvwZ+Y+LG/eqJI/Nsv/K9OxI+9K3Ls3j/Oih/rx7lV8WMnd/ibfu0vXyaLH3tvXfr4sd1539/f3OFbFn/jD0+w7eFW/NiS+LEde3584sf2WpgGAACAR8G9l4udfNHY8pO2691kAAAAAAAAAAAAAAAAAAAAl1DxiwcAAADwGPnU4sXbJz85fjfZ8msAAAAAAAAAAAAAAAAAwIV919X1vX90XXfy8z9w5+j439997WAcx7CTVRcS27/2v/xX8jm8+dpLIfX5jzwXUj//8ush9TM/8/mQeuqSl15++Qsh9bXXXgmpb755M6TevHkrH7q1KaRdvXo9pK76tN/yqrsu/THnjWeeDqnj0Sbtuk8vTRo3cdvWNrEQ9vO7LvvrX3k97w0ea7GWAwAAwCPghe7td4ed92snP/nU/PZ7x7x9DAAAAAAAAAAAAAAAAAAAuOS8gAwAAIBH3fG7w8qvtfaud5Cd+uTeP+7zdWYAAAAAAAAAAAAAAAAAAABPKi8gAwAA4FJ4oXv7fWT38y4zAAAAAAAAAAAAAAAAAACAJ5gXkAEAAPCIeqFrL3Tv+sdZ7r1T7N53Tr5lbPnJ8YcAAAAAAAAAAAAAAAAAAACX1uruZjz10TynP8Xuh3Xa3zyHxCmm3vtK3PziJ/bqS58LqZvtNp9W36c3tU3z6Tw8aTWk057ndMmttdaGkHZ0dDekdkPadnNUXPWVK6uQmsvJNKWdz1O66m6VjttaG8eU4euDg5C63aQT6/riPQRHR4ch9fBuuh2vv3krpK6upJu1Goo82W5TnmwW1fykcfOzIfXzn/tMPvQP/dBfSclzqjvjnG7HNBa3Y5pSk7JapSzturTtGE+7q17deP3qlZA6HKTG6rkPPBtSj+7eyYd+9fU30s6fSTt//iPPh9R1PO3W2o0bT4fUj33sEyH1j3/vfxBS/9T/6T8KqV/3y3/532vfePy/f/L7v/fUF/7Op380bP5Df+WvhdS//Jf+Ykj94i/5kpDaWnvxMy+G1F/xK35FSP3CF14OqXfvpNbm1u238omNsdfbjEd582CKzXtrbZVHEV3sMafUlBVdWmtDHIMcbTYhdRU7psNtuh3rVeqVWmtjHEXEzrZNY8rw9ZXi0H1sRfOgrhgaVSUhD/n2cerE8nkuzfF2dF3qWdqQjtWXo+AWO6YutTgpfAAAIABJREFUd0xJHpW1avAzxbHTah2Hi7GMTbFSt9ZWq3huscXIJWye460sh+jx0F282fmq133R247xyvJVdbGMtVjGWiuuusUpT971FAvhp+bd/76f74etTn44rHaf4JCb4KqJnqeUPBTD+6KRjG1V0fTlSr9tVcWMc8w4UWtdn646N9hztZjQx0Y4Txxyt9VXc7GiGY45nq8rN4P5olprXZ4Qxc27eFFVI9pyI7o6o9Lds415MhSdXuv7dHL5XhfjrtyIVu807MpmNsjlpJqp5TFGLsBF1asqZl6V6nKu5dFmXOUY4nFba0MsJ/lmdnHbWjX+SZvGQd02zvL6qoyu40zt8y+mZdVbh2ky9fz16/nQude7G6e3XTztl19K612ttY98PK1UxMlWMWy7cyud9utvvBnPq1jvzXW671K3dTSmhc3W2sEqXde42ZEpxx/m6/rEx78oH7qPNfdvf/rTIfXKKi3E/fCPpm1/4//sN+QTywOvLneKcduysery8nseEcZth2qmfLRN9XouZhbpuvrYyo559tra0Z3b+Qt37qS10+ee++BZSZvqMc1hnBofXEvX9frN9FwgD5KvPv1MPrFxijcr3+vYORxcvZYP3eIC+yYP6uJItfXVhGhKN3oTW/CuSw3dNi4xdutiqe3WW6+GpK/56p8Xtv11/9QnQ+oXf+xj+dDf/W//vpD61s3Yn47pqscp9krVo5bcWA25xchrxdXUIE9Lhjg+z4+utrGRbK11seqNsYnexgKcx9+vfL4Y/Pz63/6dIbWPM7U8ei8Xg+f4EHPIS22xjP3pP/1f5EMPcbT5i74yVczf/Jv+mZB67Vf/kpD6Ez/1E/nEPvf5D4TU12+mWv+Zz70SUss5xxtvpv40r4FPscXIz+hba9evXw2p29ip9XGJMcctXKk6tS4+F/6bf/NvhdSjGHExd0X1WF9JQ9k5t4Sxocvt5FG8la21Ic4scouRV8P6/JylWovIg5+8QpiDTFprd++m2rE6SDerW+eblY5bLjUUq4DF3uOmiywRP9bEj53hiYwfO2kZSyZ+bEn82I5txY/t8hDjx3Z+fjKo7Pf9/m9q7Y+8+3/fJn5sSfzYkvixHds+qvFjp4gfa+LHdhE/tiv5AcaP3XNWdczxY621vgxVaW0+Y2iX42dy1yB+bCfxY7s8fvFj/Xp4cPFj/SB+bOcXxI8tUp/0+LHdTf17Gj928pOd8WPHH4of20n82LHjoJ0LxI8dO2/82NUru58e7gwkEz+29GTEj5363wvHj937/MLBY+1C8WMnPxE/tnQJ48e69cHO+LHjD98dP/ZOYMm9z3P82OvtR47//Rt+7Y5VZfFju74hfuy0feLHWuy59okfm7ej+LEl8WNLj2b82DAM4sd2JYsfO+0xih8rV0IBAADgyfQvffbMPxGHy+xPfeLDD/sUAAAAAAAAAAAAAAAAAAB4sPZ4gz4AAAAAAAAAAAAAAAAAAAAAAADwuPECMgAAAB4J3/Diqw/7FIDWWvsdn33lYZ8CAAAAAAAAAAAAAAAAAAAPlheQAQAAAAAAAAAAAAAAAAAAAAAAwCWyetgnAAAAADt838c/2M3pC1MbQ2o/DCk17rnNObnNXZdSxykdOp5Ya2nb1tqcLrp1fXrPeJ/Oum1bcdWrPp35OKYz67p4O+Lb0efqdsTLatOUNp+mlOEHBwf50Pl+TXMsJ/G6+ni38kW11tqQ8rQ7Y/N/8WdeKnYLAAAAAAAAAAAAAAAAAMCTIv6NLwAAAAAAAAAAAAAAAAAAAAAAAPBk8QIyAAAAAAAAAAAAAAAAAAAAAAAAuERW/8f/+D859dHBlVXY4MaNGyH1S7/kS0Pqz//yL89nM89TSO3n9Lq0oR9C6tXrT4fU7ZjPq3WrtPNxTNtv497X63U+dB/fEdf16Wa1uQuJq4ODfOi5S5u3Lt2sucVt55Q4jmnPrbU+3o4+nnYfX7o3z0VR2Gy2afN41bnuHG6PQurR0Saf2BBLwgeeTeW/m9P96LpYxlq7djWV4e2YcuzNm2+F1KkVJSEWsqIgzVO66tictCkW/tbaW7fS3VwfpSyd53Svp6q16mIZvnX7Vki9/XfT7RjWRUnoW/rCK6+8FFKvX78eUv/Mn/2BkPrXfuiHfu3veOd/v+eP/bFTX/j03/l02PzKwdWQuo214+VXvhBSW2sHV1Lt+Pu/6heE1LlLqdevXgupV6+n1NbatXg3cwkfutSKjlPxYtMuNtFzrPVdbMAPj1Jr01obhlSxN0d3Q+o65ljXx36niw1Ka2Me/MRxwK1bN0PqW2/dzofexs7lR3/0R0Pqq6++GlJffvnlfOg8xvhEHE/++I//xJlp/TBN78rPU/+bS2CrMjyPYFaxL15Xh85jwi5WvaM4irh6JbUJh4dFOVndeCqk3r2b6k5+1/Ec29jW2jbWjjbFUVncthiptharddESTnHwkwvhOKZb2Vrr+php8cRyhvf5mlub4thpGFL5P4pD6FUXC/9cVcxqRHjhbYeh6NSKMjyk1CkO+XKf1VqbuzyAT+X/VMN4Sm7KWmtzrHq5dnR9OnQeva/iHLC1lpvofDfnOHFurRiB57asy8ObmGN510PVs2xj1au6vNbObrKG4sgtLt60fOIHcTI2TdXyTbxfuSDlpYgxHvpgXSywTLHujLGN7WKVn2PNaq3lriOPyrrcUBZHLkp4MTWIGT7EqVZVQosvxPxuXR5jVBUzr1622LN86NkPhtSDgzgWXVUz+viFv/3pvxNSn//oF4XUsrFqeQVmG0cRMT9vv/VGPvKdm8+E1DnufDxMqW++8VpI3Wzu5BPbbNIYO3f0ufPocglsbRVLwu2bO2agt39uce/ZZ9LyYx4utmpt8+d/ZVok6eJaxF/9H/9GSC17lj43dnEhrosLAmO1yjfEIfoc73Wfl+7noiR0cZyQh8G578iNf1+NRfPqTasajdu3zlwaXV1LM9/W2sFBmln3ec4eK/UnP/kPh9RP/+RP5xOb8vOOMQ+SY0moBuBzMeZLh97sNcQumuj8vCPPfac8K6masvSscTvevHUYNh2GNLxZHxRPEjexSRnntPmdO+nErhwUXXl+JJGztFiIjm1Cntu21locY4+xKGy2KU/KQ/excuWt59gC5wH2VC61xUWSK3EYkCdE5SpffnRbDMHjznPL31q7Eh9iHsWl0Z+MT5eevnElpP7CL/+yfGJf9RVfElJXq/iIf51KwlPxiVtr7fZb6WngjadTn/jssx8Iqet10Xl84NlnQ+rTzz8fUg9fT8P7a1/0kZD60meLBxY3b6Uh+hdeT8Xs7/3Yj4fUP/+X/0o+9H/5A//vkNrH5r+omMUTt2pZKbYYuRDOufHPB25FrV/FTMktYbkYdvduav9vrNOAsFh0HdLC0TY3g63ItdwI56CIZZr4sSZ+7Mytn8D4sXd9czG3Ej+2I1X82IL4sZ0eYvzYzs9PBpX98f/gj3/TH3rX/x7/W/zYkvixJfFjS49o/NiC+LEmfmxnqvixhQcaP3bP5oycyfFj7f6iXM5cmxU/tjy0+LHllpcvfmzebKvIzLTzHD+26sSP7SB+bFfqExg/9m47dvRexI+9E5j0oefeiSg7jh87OZg4/lD82E7ix5afXyB+7Nh548fOGkDuXOQUP7bjyE9E/Nip/71w/Ni9zy8cPNYuFD928hPxYztcvvix1XCw+1njz314VvzYvc9z/NhJO2PJxI/t+ob4sdP2iR9r8cLP6hqOn7qGR7ddJ35sB/FjS49O/Nh/3f7nx//+z/6zPy5+bMehxY8tPEbxY/VaPAAAAAAAAAAAAAAAAAAAAAAAAPDE8AIyAAAAAAAAAAAAAAAAAAAAAAAAuES8gAwAAAAAAAAAAAAAAAAAAAAAAAAuES8gAwAAAAAAAAAAAAAAAAAAAAAAgEvEC8gAAAAAAAAAAAAAAAAAAAAAAADgEvECMgAAAAAAAAAAAAAAAAAAAAAAALhEvIAMAAAAAAAAAAAAAAAAAAAAAAAALpHV3Wk+9dGdtw7DBm/evB1SP/f5l0PqX/rLfzmfTd+nF6JN05i2jS9T28ZtD1brfGL/yCe/Nm1+9Wo69HiUdj2X74BLX8g5tslXXb1+bp6mlNp16cS6IaSOfdpzvqjWWhcPfXgUM7xP26a01lprw2qVNh/SVbc55uf2dE181577dNzWWos36+7duyH12pVUgFt1O964+XpIvXLlWkjNGb6Kud1am7cxS+eUpS3vPJaxgz7e6NbmPh16jiXhzlvpZg1VY5VbjM0mtQnjdhtSt2/dqQ5cZEvatkvXNcR28kMf+nD439Za3306bJ57h9wc9S2WsdamMWXpG2++FlLXB6liHt5NfXH/Zj6vNgwpww8OUmqud+NY5EkuJncP0whk6FK1ncdNPnJuE7qYJ7kd3GzSocfcFrXWxRbj6aefDqk3nnoqpH70I6erwynTlIroJz7xiZC6jS1G11VXvT4Iqc8881xI/ff+t/+bd3/wTlV65gPPvv7KKyfTxvFddXy9LlrR7Ta1CVevptO+di11ed/wO78+H7ofUuVqc6w8McO7WPGuXb+S9tzaOKYT28ae5alnboTUW7du5UPPc+yOc2MVe9sPf/gj+dAHB6nB+cH/IU1qfuEv/IUh9ad+6qdCarzi1lr7C//dnw+pb71xM6R+7vOfC6nPPJPak9bazTffCqlXrqd7/aFrqSl76aWXQuo8t01srA7ivGMTe4d/5tf+T0Lqn///pdxurY1zKv9xeN7WcbQ5VfOSLg5C8sbzkIr3EE+stbad4jQwNv+5Uq/XF2/oWivrT55txUlimSexwRlayvDcF/dxGrid07attWtDnBrUaxFnl6VYDFpreWYcO5bWtVRtV7EAt9amPPSK1XaVZyVDuurtUTEW7Vex/Od593Dx1bDWWpzxtCnWjjyEnmMZa611sWLmVb71KjbvxQphMTldtVQKp3hZfdHKVg14MWxLm9+5FaeB8bhDXwyD79xJU/5f/Et/SUg9OEiD5NxdtmrYlluMdZx0j7n0t/baF9Ig5Or1NDpax6Wh7VFa25m2cemyFUuIXZWladtW9B1zlw79xpuvhg+vxhXy1bqqHbHiPhXHk3/tr/+NkPqRjxZT4yy3hGNsRde5U6qGN7mdnLtU78fY0HVV39HFq+7jmK/LBXhKd7os3uWqbD+lHvkjHz6zMLwem8HW2jbu+eDKB0Nq93qaTP2X/+l/HlL/vq/6qnxiB1fj3Yx9cbfOz+PykQuLB4/vMsa9T9tiZLWKQ/RctVaxFB3GJrrrilZ0szlz883maLVKPeaVeDuGWOVba9sxVZ+jw5Thzz73xSH11htpHaO1duUgVsxcFKIpl8Jqz0Oclmy2qbPOuuqpWX7U0vKkJi/ExVWOLjb+rbWDOMYeYykqHoC2ogHvY7XN/WkeJK+q2zHEL/z8vy+V/zx6LwYJseNord2OZfDatTSAPzxMGx/dLRZd80P8zWvp0dUXvpBCQeoHu7GE58FqLqJTXKYuf5Jvive6j31Hf5hmatfHHUPok/IDpr5Y5Uip+SHOOi5YtdaGuFyWb0deIaxWlYpeL6/85Ba4HN388I/8aEj9uq/7lWnnObQm5ndfLdP1q/yF2FjFHF+OwMWPNfFjZ3gy48fedaTT+xE/toP4sQXxY2cc+JGIHztj/2f+r/ixJfFjS+LHlh6l+LFT3lWzxI818WO7iB9bemDxY68f/+tjH9vdquT4sdaK+LF7hjNmweLHlsSP7dj35Ysfu3bQF/FjOWIjr/RNxcxY/NiS+LGlxzZ+7B07W9T3Nn7s5Cc7z/r4Q/FjO4kfW35+gfixY+eNHzsromznorL4sV2bPwnxY927H05dOH7s3ucXDh5rF4ofO/mJ+LEdm1+++LGubXfGjx1/eFb82L3Pc/zYSTufqosfWxI/trRP/FhrrUtPfndvezyhDvFjfd+JH1sSP7b0aMaPvfb3/nvxY0vix5Yeo/ix+x2RAAAAAAAAAAAAAAAAAAAAAAAAAE8ALyADAAAAAAAAAAAAAAAAAAAAAACAS8QLyAAAAAAAAAAAAAAAAAAAAAAAAOAS8QIyAAAAAAAAAAAAAAAAAAAAAAAAuES8gAwAAAAAAAAAAAAAAAAAAAAAAAAuES8gAwAAAAAAAAAAAAAAAAAAAAAAgEtkterXpz6auzlsMAxdSJ3ntG0/Xc1nM7W0+ThuQurR0VE6dHf6Ms/lgx/8cEgdN+nENkeHIXW9vpIPvV6nMx/HMaR2XbpZLeZ2a22ep5C6jYfu25D2PKVtp1U+7da39IXPf/6lkNqt0kv3xqPi0JvtNqSuh3TVd+6kkjBtU54MQ/GuwDHezZu3bqXUm2+E1NVqlQ+d3b17N6R2fczwVABba219cJC2nqrtz5brzmqVbnQp151cBLdz2ra1djW3GNuUJ0XxjnturW3jznPfMY6pAP+CX/CLQurzzz8f/re11vep+uSq101FO5kdHKRe7/q1p0LqOubYJraiV68WvW0XO/pVFxucg5Q6DEU5yd1WvllXiqpXjTFim5BTuy4denXwdEg9unsnn1huZu9uUsW8+ebrIfXWW2/mQ+dmcoidWm6sungrW2vPf9HHQ+oXvvCFtPOzm+iu606d9qn/LbuGXAhzpc638sd+/O/kQ89zboTTiHEY0qEPDlLFrO5VUU5yjzl8PpWisrHKLUYrOuuUJ7fi0Ki19uEPp8H/F3/xF4fUTZwafOmXfklIzSWwtfaVX/EV6dCHabTZYt/RV6ObN157LaT+4F9PJfxrPvm1IfUPfed3h9S563Ix22zTVX/Jl6QM/1W/8leG1G/+pn89pLbWhjizmOLwJjd0eVrdWrt582ZIzSX8jTfS4P/NN4u+43Of+9mQeudOOvTHP/aJkPpX/uoPhtSy2ubZ1kc+8pGQ+kUf/1hI/Xs/9XfzoZ977rmQeudOGgm8Gbvyp27cSKnPXIvn1X7JL/26kPpX/8e/dkbKD7zzz/6solgU0a+IjdXnPvuZkHqYGtEWx8ittTbPuXdIfeJczNTisePktLU2xancFJvo3AxOubts7SCOoo/i5kPMsWlKo5dWTfnzOkYXVwTWRUko8iTfzT7+WkMsYsWtbK1a6Diz0rXW2uog9tbx0Kuq8uQGfL1ODc5/9V/9uZD6z/6z/2w+9NWrqfp0c1rv3Y5xNXhVVcw4iji6nTJtG2vW9iithpV1p48FZYqlME95xm3RgHdxEPLZn/np9OGcWoyjo+KqcwP+zDPPhtR/6B/+mnTow1RO7uN2xBYjL6Fk5aJTfKKRa3WeWExx2b+1to3n1k1xGph/86aPyy/VGONgXcxbPvHcconmreN/HR2e2dYNffGYpsWrvhsXf/7CX/pLIfWp62lZ6RfESUerVi/zRG88SgOvrloDPzpM1WeOx5672NFXE9R5k5rZPJ+aco51aTFhLmpeW7Uz82TVtv/AL/iyC+98O8VRcmvb2Na9eTOlfvbFNKP/8r8vtcCttXlM5X+ObUJcpS5aurlqgPOyUjFqi2dWrt50cVWqWJ7MD3ZjavFMuLWWu604Z8k1q5ypTWNs/+N55aXmn/dcMeRbdem6DvrUlOVR2dM30iOeoStO7Cd+7KdC6s//+V8ZUtdDqncHca24tWJWk6c8Q8vT6mKMkR9OzbG3zY9punVcpqueC4xjKgmHMQpljKf92s23Qmqrnhpfu5IfuqXryrdjWlV5kheTY8WcY+oq3srW2jY+sM6HLh5YVF35OjbgOTKhiMvJrWgVCpLX4vJz9mKlYtH4ix+7H+LHlh7T+LGTlrFk4seWxI8tiR/b6RGJH9vp1Fji5P+KH1sSP7Ykfmzp0YwfWxI/1sSP7SJ+bMehH1T82H9+/K/f8fW/Y+c3cvxYu79af1YUmfixJfFjS5ckfuyN9m8d//t3/e7ffXb8WGut/YW/+BfjvmMR7SbxY0vix5aeyPixd31z501/T+PHVicfkewsRT/3ofixncSPLT+/QPzYO84ZP3ZWRNnOllz82I7EuOljEz/27iCiC8eP3ft8V/DYO0LwWLtY/NiJT8SPLV3C+LG5rXbGjx1/+O74sZ88/te9z8vgtGM7Y8nEjy2JH9v1jYvHj7WzxrettbNnasefh/ixaZrEjy2JH9u17aMYP3bn7pH4sR2HFj+28BjFj+0xwwEAAAAAAAAAAAAAAAAAAAAAAAAeN15ABgAAAAAAAAAAAAAAAAAAAAAAAJeIF5ABAAAAAAAAAAAAAAAAAAAAAADAJeIFZAAAAAAAAAAAAAAAAAAAAAAAAHCJeAEZAAAAAAAAAAAAAAAAAAAAAAAAXCJeQAYAAAAAAAAAAAAAAAAAAAAAAACXiBeQAQAAAAAAAAAAAAAAAAAAAAAAwCWymqbp9Gd9Fza4c3gUUrdHh+lgB+t8NutVeiHa3KUTG9bX0rbj4jJP6Po5n9i1G9dD6tGd10PqlStXQupqdZAPvd1uQ+o8pzMf1inDu5ifrbWupUxbD+nMj47u5p2n4xZ3o83xxNfxqlerlDpvbxeHHseQOm5T6mq1StuOm3TcOe25tTbHTOmm/KrBdGKb4sittXTDuk26rnyzpjkV/tbavKnKytly+e9iho1jUXdyxRxjKWrxxHLhb63dvZuq3mpIGX71WmqsNrEVba2NsSTkPDm8k077xRdfDKlf9uVfdvJ/h/Xp8tz3Q9g8V9spZvjqoGjA7751K6S+8eZrIfXatdSp5fbk9s0384n1Q9q8i7dyx7DhZGquPK0dHKRDz/F2jEfpftzdpPFJa20V6892jP3pao9SVDVlOUvX6ziKOLgaUodVNby5+nRI/dBzz4XU7ZSGfNevP5UP/eqbqZReu5Y2D63oOI6nmvdT/5tzu5T7jjxme+aZlNuttWFIO1+vUpsw5b44nvZBHBq11sYpdeV9n2p9TCy6hlYN28Y5Du9jnhzG7rK19jM//dMhtW+5K48zmiltW47P5zEVsymO3q/EqdazzxbV9so6HfrKOvWJ3ZRa0dyprVaraZta+DxJ/KKPPB9SW7wdt2/dTNuW1TY24B/68LMhta9Gmx9+/oMX3nxOd6NVg81isNrnMXZLx/4tv+U3lQdP5tgc5auOp53b2NZaixlejJ3iRK+LN2SzTX1xa219cCOk/pO/5tfs/Py/aD9w/O+jw92HuBqrfGvtq7/6q0Pq7/ztvy2kfs3XfjKkbo7u5EMPXbrZz3/0YyH15utpfPLhj6Vtb735ejyv9uGPfVFI3ebFhCsXH0K31rq4yvdTP/yjIfXn/f2/OKT+v/7vfy4f+kc//WMh9cXPfzak/g9//i+G1MO4hDIeFVODYUjl5MrVNO762Mc+GlI/+MEP50P/uT/336TkeDMP76arHmLFLMdd166llc+8tvnrf8OvC6mrPhXgVi2IdbFSV0uX1cgqrlm1WE662LxvN0UTneWOqVokjOvn1aprHll99mc+Ez784Me+NGx7tV4uSGX49TdeD6mvvp6GbW+9/kZI/dIv++J4Xm2KI8Z5e/G5WLff7eimuPwY10CqRb7Wx/JfTANj7ZhzajkarU59G2dMB2df1ybmZ6umt1M87q/5x/+xkHrzdlo/fOVn07poa+2jH/tISK2eGsSm7G7Rn85FpuURY2zKYglsVUEqRuC5mMWB01z9pFOYvU7boxtX4grMNs7or6TxSWvtIK7tfzjOQO/cSd3Wep2WH1srppGrVbrXm9gX52ZwFdeFWmvb2GMWTw1iCY1tf2v5mVlrQyxm+flRbiVz1WjFhL4NQyrhv+7XpSHf4WExU3vrzdRZ/8SP/2Q6sS41R3mk2lprY9r8AzfSxHkV8yRPtUof+UiaWfzID386pP7Sf+jLQupUdZfDKi6r5kWSODTqqyHfGB/EdLHb2sSJQx9PbKhmJV18ajbHh4V3bqfi/df/1k/kQ4+x/e/izcwtRr4ZQ7ne1cU86XLIRLzRfbGOsYoDr018YDHE5ceqhW4/8eM/HlJ/9a/evZh2z5ir3h6Nf2ttFdf2///s/Xe8ZelZ2Pk+K+xwUsXOre6WutWtnLOQEdGYNLYxyRjwtXH43AA2njEz47nXARzuDIwDdwbfAY8jwTYMBjQXGwwGIQwClFBOndSxctWJO6xw/zhS9amz1v693ackU1Xn9/2raz9nrXfttd68Hm3xyiLVqPcfa/5YmD+26A9uxPyxvbovJc0f6zJ/rMv8sV7XSP5Yr32Lwb3/NH+sy/yxLvPHuq7N/LEu88fC/LE+5o91fUHzx3YtyiLjQS1wB/6Zky+4deaPdZk/1nVI8sd+PL7/8n9//dd+zaL8sV1/5Gt/DaKcP5Y1rfljfYebP7bfDZk/FvHM6vVrv+oruuHPb/7Y3k9688cuf2j+WC/zx7qfHyB/7LLnmj9WLJg29yaSmT/Wc/iNkT925dbbwfPH6iauInksDpQ/tvcT88f6HLr8sTbPe1evlz9clD/22c8xf2Cv3lwy88e6zB/rOfzZ5o/1n+e/+rqvXXTslflj//Hyf33FV3zZ7n908sfeffm/3vqWN5o/1mX+WNe1mT9WZKX5Y13mj/W4fvLHEs1YkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJ0o3EHyCTJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSDhF/gEySJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEk6RPwBMkmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJOkQ8QfIJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSpEPEHyCTJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSDhF/gEySJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEk6RMrIs30fVfM5HNB2/n6v4XiJSmtqvpqmph9EyzIqOsvx5C0d27YNXldE4B/kBZ6cip63zPCUAAAgAElEQVRNpomSSzr5sCwhOp3NINrmdGxE5AVdeZm3FMULaxq6nxmeOSKaeQXRRx55BKLT6QSiVZuooi3+Zl/VYNsJ+l4tfum2oWoQEVlGfzDPqCbkQQ86KcvonrT4NOfY2+RF4ltPa/peAzy8qakS5ng/K7yfETEYjCBaYKNuGrpjWZH41ci2wWY7HFLRFbWsRDcYMR7QydlwTHdsdXUFosePH4N/RgTe0UR39LznPQ+i1SzRgc8H9LyOHj0KUe4HR0Pu/BP1pORKiGVnM2q23O4iIuMqim0nz+l71XWiA+eBaRmL5vrPRc/mqYEeZxHcvSdqSpt4HBtbFyG6tbUB0eGI7me5vs5Frx07TifHPmEyWTiUTyaT9soBlf/ZA6vZdEpP8+jaKkRbbloRExwTt1uKZtio24qKHgwS9YT7yQJb/fb2NkS5K4uIakoDLs8ijhw5AlFcVURElNiBj8djiK4u0YC4urwGUVw37B5Oq63NrU2IDguqCcsrAy66ruiG33nX3XQsrrZqnIHUVcV3hWeM3OprnL0PceIUEYMh1ZOmpgtvsGFyu4uIDAe91JKGLnuU6hPmuBarsRdtG1yV4JOuU80jx3lyM0su+RcqUsulObYOHllScwy627zAjIjtLRq2ihFPfiIisnbRBSTqyYtfeC+dFheJTbVD0Rmt6HfPDsGnH38UogOclT39MPWxyd/33zh/CqI1XjbPY1MVIbHQ4zn2Qx//CETvvouWSxHx/HvoD0q84X/uO74dokVBw1aT2tupcH9yiGvbCpv81uYWF/2ffuVXITrFPnZlmWYgBW7iZVmiovDu5RRnZTmvaEreagi+tAwnMFw0j7YR0eKAWuHkP7AXTaw7ahw4IlocrDPscOYN3fAS205EZHjlp8+d3f2Pou/Dm+64C45NTm/muGdbLi1D9JYTJyB6M0bb5G4w3pNsQG2H+1hc0EQkV5G4qklUwtTSuMGNjhyLrnFk4sl/nuqsYENgF68Ts8VNgC8sIgY5NZ9yQNFiRDXhwoVzEM15GpBqXHlLh/MUu0rdE66EGY62iVdyqQ1GrihcRflb87uSJjXxgrer1Xy+PaF5Ql5iLUq1jtmEdmBq3gO/6xaIVvPE25DEJATveIHzLt50mqfG0wwXmU1Gh6decSbGjjnXf3w5m3jZN6HlUlKi6WEt+53f/i2IzvB9dER88ZtfCtHbX3cfRB9/7CmIfvzTD3LRr3nJCyE6GOLbQJz8D4e8Kkk029/+7XdDdG2NthBHY7pjwdsUqXwNfonZ4j5GMuOiwckqb5Jw985tJ/leYFrR5D/D+fkEkz2m80TRvFOdlbjVht+rxb2yuk7tJhQ4IcRVCfeiyT3wuuK5KJ2c55OTWWJ686H3fQCi73/teyH6spe/AqL8epTXthFR4T1puOnhHevJfjF/zPyxBW7I/LG9rxK7uWTmjx2A+WM9RZs/9hx9HvPHeu27qXv/af5Yl/ljfcwf2+/azB/rMn8szB/rY/5Y1xcof2xvkYuyyJJvap7NVHXRvNH8sR7mjz1HN2T+2KUL5zl/bHHm2C6uJ7X5Y13mj3XdkPljPx7/4fJ/f9ef+dPdP/j85o/t/aT31e3lD80f62X+2GWX29SzzB/r9VzzxxZNeHoTycwf6yv7Rsgfm1/5zwPnj+1+fuDkse6FdXXzx/Z+Yv5YT/Dw5Y810fa+Xb384aL8sd3POX9sr95cMvPHeoo2f6xb9FXkjwWmkO3NH3v1ns9/992/s/sfkD920xHzx3qYP9Z1jeaPtbX5Y13mj3VdR/ljiR0uSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSTcSf4BMkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJOkT8ATJJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiTpEPEHyCRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkqRDxB8gkyRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkg4Rf4BMkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJOkTKpmr2fdTiAQWGm7aiwvKSrybL6AfRmmb/pV55cAHBIqPrzgPPHLGzs0Mnb2u6roy+dV7QZUdE4B/UNRaNJ27wsiOiyAYQndX0rBu8sDyjS8NDIyL4wi9dugTR0YDu52RIXzkiqmoO0TKnk+9M8Z5g66gbbpeJ1tHi0fg0om24HkWNzYd/47DN6eRVm2iYg2TzWSzP+dKo6NmMKn9EREsXNhwOIVphyyqLRBXNsd3PptSVJWoRV5SImisS1sLpdArRyWQC0bWjR+CfETGvqdlOZ1T0k08+CdGbjp+AaESMh0sQPX/uIkRHS1RPLl6gyx6PqNyI2KqwA28o2mIdy7i7iWiaVBdPx9LJl5YS33o8psPPnj0P0dFodODo5uYmX9jxkzdDtKrojh07dgzPnfid2cGIupSlJfpe1ZwqYV4kpnzzmjqc+XRGJ188duR5xjWM+6KI4HFlPKR7MpvRZfOcLSIGA3ocOfb/LT7rfEjNNh8k6kmO94yH8qWVZYhmqQ6hWaF6UhQ8n+RjE1OIAc4TeETcnlDr2N6mQa3C/jkiWpwnDEoejOnY5z3vFi56NqdZxNraUYjyJCLju53nDd6WEmsCd8JcTyps1JG4o9Hg+pTnsam5f2LAHQ1oFhHYbOs6UTZ0wpHqE3JcGrc4AxmViZGFe/iMe1E8thwkiuaVRY6LRJ7eVAVVwhLvZ0RsNdQdTbGz2tUuGLzKIjXHwOfVYOMa4Q3PmsS35nbNF8bThHnNfULinrSJDRpas1SJqVGqaPxiNS4D+Y7ViSExsXszbWlMHGINr+Z0xwoeECOaiu5JgzWc70me2seo5vQ0+Y4VeMOXx7QgahNVMFre28R70gYuMNtEFS14KxrvSYUVuMgTj4N3ZaczqqIznJ9k+LDaxLIj8Th4rB7kNA2ocTIZERle2+OPP777H/f0ffiyV74Wz514HENcbfGI2eT4OPCNw1XitlV13rzsxfOTiGjxpmXYdnjOlmhaVzd2BL6IGQyx/qemwanvFWcv0quBYvE0I8OHFREznAmMAzeOcJPk5ltoXyhSFZgnMLx138yxJqSWJQXPE3B6n3hDNEmsxYoh3hYc6DN81OWIvtQ0dWE7Owvn2Ds7063NLTi2wYc1wk28iKhxD7xuqIpubVHDuen4Khed2kzGh8UVHNsO16KIxFvjwXAMUZ5t1rgvGpHozVp+FY7TgAIn//N56tUV789wo+cLwwlhRFw8T9vvy2N6HPzqqkq9xMxTC1hQ8NIA3zi3qZ3Pr/7qL4Io13DesypTwyWvIvklDr+FrGbUdiKi4arC6Ry4SGyS0wjEm/OTLfpeO1NaODx5PjF2sMRSDu8Yz+h4HI8I3F+JDPtY3rrkuX1EorPifKSM35UkCo7t9XWInjt9DqI8+dne4t31/W+390l0dbju5pGlO7c3fyzMH1tU8o2YP7a37XVzycwf6znW/LEO88d6XSP5Y732pZDt/af5Y13mj3WZP9Z1beaPJZk/1hM1f6yP+WNdB8sf27veXjSV4PyxiOD8sc+eZMHn5o/1MH/sOR57Q+aPlWXJ+WOLMsc+ezhuoZdFbv5Yz8nNH+u4IfPH9urNJfv85o/t/aQ3f+zyh+aP9TJ/7LLmcyd9lvljvZ57/lj/A+pNJDN/rOfwGyJ/bH862UHzx3Y/P3DyWBwof2zvJ+aP9RR9+PLH2rrpzR+7/OGi/LHdzzl/bK/eXDLzx3qYP9Z1NfljQbPVRfljlz+H/LGL58+bP9Zl/lhP0ddk/lg1b8wf64maP9Y98/WTP/YFXD5JkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJutb4A2SSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEnSIeIPkEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmHiD9AJkmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJB0i/gCZJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSdIj4A2SSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEnSIeIPkEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmHSNnWs30fDcoSDmjalk6XD+jYpkpcTVnwH4AsayBaB1128mfYbrvtFoieOfM0RKfz/Xd4r8GA7lhENFUN0RIfVpnjo+SCU3+QcTSjOEebmr5y8vCTJ2+G6LmzF6noaaKKjoZjiG5Mt+nYAVW07Z0JRPN8yBfWYsMsMmpZTUs3PMtT7aPmZ00XRrGIQapDyHIqum0oWs3mEC1LurQ3f9Gb+cLe+573QzQfYLPFO5YXiXsyWqIqurO9BdHjx49B9Pz5c1w0G+Do0GIlnOHDOn70+IUr/7nvDwq8aQU+jhzr6GxG3XtEzOZTKhovrKlxtC3xftaJDr4s6Fu3A7owroQ59s8RUeCwNceesBxRT5gcT6dzOvnq0SNUNF42W11d4z+YzxNDD7hw4UL6jxYrh1iRcNpWzalh3vm8OxJltzS4bG5tQrSpFtbwpmqWlpYiLl3+ZGlpae8fbG/TSB3JCQz2wTnOKNfX17nouqGecFCOIDrFWjQa8bH0KCPiyDFqHWNsmHw/x3hhETEo6eSjITdMKnp1dYWLHo2odeTYyyYGtQkNDXVqGszzstVluqWTCbWsleVlLnpY0T2ZNBTdwqbXzOlbN/O64DlhTocvj5cgOsTundfFEZHhRIHXYryaGufJdTFVBZxORp7RsbysiEjUwhbn5w12dAV+6wwvOyJqHLbyltpt01B0jtGIqPHkfEs5WlX0pZos0WOcOXMGokdx8r/ri9/+Rb2fP/HEE3wgzyLahpsePetqmqyiuAzs7IDtlWFvk7XYblPXVSf2dnDNkljRJ6ooX1qJ42mGvU1y3ZFjuy6wXefY2+TYdriji4hyTE+zKHB6gxdWJXbLosRrm9Y0MTtyhAY1nkXkZeLCAh9Wjt8rUQmTvWhi/5Ga7cmbboLoo595nIt++uknIfqiB15C18WdP7e8JtFlbG7S3Gk4pCp66sxTED1yhOb2EbGysgrRp06f3f2Pe/o+3NmhTadxagY+xy301dXElSOen6S2UHBOWGENnmOjblNF8yRkjLs3iT4htXvDHfhTT9HbkNtvo835Bx9+BKIvfMG9eF3pzZ/o2YF8pmoVi+cJ9TzxOIoC33zxiFlQtMYlZJHanOcOp6lxVobTG966jIiGe3C8cB46klWUJyG8IOKmhxPwaPnUEdXiPauqao4eOwrHcneUXKnxJkk7uQjRIyv0ToHfvUaqlvL34t2w1P1OVFHe+eeawOv9xMZQ6uVUhrPNuqZN7MSLW16zpJYGGcbn+DaEZ+8RcfPJkxC9cOE8RGtsmTn2zxER2KUk3q7ii61U0Yka/JEPfwiil9Y3IPq2t7wBovlS4p1ycNPDK5/OaG+zTWUfDPBdedYe/HV2m9icSbQOfiU3wW+d4Zp9B3eDI6LEATeRU8GbTrhv1ERiW4nHeZ4ntNzuUtNgbph8w/nkBW/Ypt7ofeaRhyH6ys3XQvTxz3wGoq961Wv4wriG19j0eFTqbheYPxbmjx3oD67T/LErdIYh88e6zB/rMn/sAL6g+WO9n+/Nqtk3jdn7T/PHeg43f6xbtPljHddm/liX+WNh/lgf88e6vqD5Y5/9mwUNkPPHIiKRP7ZrwZht/ljPkeaP9VzYocsfO3PmDOePLcoc29WXP/bMbv+tt91k/liX+WNdN2T+2F69uWSf3/yxvZ/0ziIuf2j+WC/zxy6bfG6O+izzx3o91/yxRc28N5HM/LGu6zh/7CV7//no3uiB88c++zluP0LyWBwof2zvJ+aP9Th8+WNt1vbmj13+cFH+2O7nye7omYL6JkLmj/WEzR/rxjHKWUOBKWQLZ++fm/1C/tjNJ0+aP9Zl/ljXtZk/NplNzR/rKdr8sY7rKH/s2e56SJIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSboB+ANkkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJ0iHiD5BJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJh4g/QCZJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiQdIv4AmSRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJknSI+ANkkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJ0iHiD5BJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJh0jZNsW+j6q6hQOKYv/f75VlGUWLkq+mrmuI5jn9XFrd4LFBF8ZfKiLmczp53TQQHQyHdGq8YxFRlvQHLV1XVBzOE0XX8xlEy+zgv17XtFzHEodjNYknn3wci6aHlZWJsmd4T2o8OX3nCP41wKat+OCl4RJE69mUolnqjqMC6/BgQPV/PqcLwxYfETGb70D0vvtfCNHPPPgwRH/2Z38Wot/0Td/CF5Zh05vubNOx+LWLQaIX3ZlsQfSv/bX/HqKf/vSnIfrTP/0zXHQz5/p/8O59Np9A9PhNxy9c+c99f1DVdGHDYgDRwZBuOF92RBQDOvn2hCpwWdLJq/mcys2p3EiNtmsr1J+0A+7MEiPL8vIynRy79yHOIqo60U8OyhFEZzPq3nl6w0qsBhGBNTRaHDE5muWJkaeuqSKVOB6XOIvI88TI0uBss5rT05wvHovn89mgGO/9ZN8tSj7KCid18yldGHcJyytU+ePq5gnLqwefn6/ka4mCeWDCDqcssdliu4uIaU39/87Oweei6xub/AcVzjHainqr8RL1NtHQo55OqdxILVuWxjTvanHeNZtSNCIGIzp5XmIUZ5snTpy48oPz+6IXL12IxXjsGC3xWowex/YOTasiYsATM7wy7jGa1Iqo5BuOwzH3CbyiiYi8pUvP8Oi85U6YJ5OpbrLgzgr7SWzU6WkAfq+WN0lwHjDAmWpy9YpjWtQ42u56y5ve2Pv5z/3cz/GB8yn18DlWsxEuIWOZZi8RUfMcA6N8x/IB3XCeYEfEGKey3PQybFo5TggjouUpOheNU77k7g1feapx8cYRNfk8tXBeWqIlz3BE07bN9Q2IlqlF4hx3L/me3P/C+/jkoEn+X1DglXMnzAuHGvdUI9VFN9gyz505D9Ex9ycRn/r4gxC9/z664bwbtjOleWxZ4HQxYjwaQ/Q9730PROe4XfDGt7yJi65wTDx3rmdWdvnD7Q3a77rp9uQeOLXcAa6sZzP61tzZJN8L8Njx8KOPQfTee++FaI5fOSLOnqUaPhpSPckK3ExIbaHMK/qDkzffBNFf/pX/CNEtXIu98IW0nRsR2TCxx8KDYtssrA156l3JAIsejyg6xZVFYoMxtXWfeN+Bx25u0eP49Xe+k4v+si//SogOxlTDeX6SpTYYW2yYO5v0vVZXaaC/eP4cRMeriS2UgOVSm1cV7ujibnCbqqKJV7dYzXgPPL3BiCsLfFZXhZdaEZHzJjl+L66EbZVYOPML60GONxxbfZPRl+LeOyIK7nBwZXHHcar/yaXB0ojmP2fwlm5s0Ax8ZWWFi57NaGJW4Mq64dk71qICN50i4g2vfx2dnA/O6cJafuUQkeG18bsSNsgS05u2wikK77QtHscjgvfPC2x3u2eH4Jw7Ov5SyX1/zLgocHZzNa+uqtQeICf2JF5d4XUlL5tPzkueIb9dTX3ryYRO/sHf/32I/qEv/zKIvvjFL6YLS3XgieqPd5y7su7dNn8szB9b4IbMH9u7BO2urcwfOwDzx7rMH+v6guaP9X6+d09zXwrZ3n+aP9Zl/liX+WM90Wsyf6zL/LEwf6yP+WNdX9D8sc/+zYI5Zyd/bD/OH9u1aC1o/liX+WNdhzB/rGkSb3kWZY7t4vyxMs/MH+syf6wvegPmj+3Vm0v2+cgf+3jnkzTzx3qZP3bZcOmzJR4gf+yy55o/VizY9O5dRJg/1nUd5499zTP//MAHPrA3euD8sd3PD5w8FgfKH9v7ifljXYcwf6yu6/78sc99uCh/bPdzzh+78nw998f8sS7zx7qedf5Y/xeEFLIrK+AzbfDOE6u7/wH5Y0ujkfljPSfng80f6/EHkz82n1fmj/VEzR/ruI7yxw7+3kWSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEnSdccfIJMkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIOEX+ATJIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSTpE/AEySZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIk6RDxB8gkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZKkQ8QfIJMkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIOkXIwHuz7qGkaPISidU3R1Jkj8gKCRVFCtCzox9TaqoJoXc/4uuq6ppO3/L3oS1WpovPY/4CuODX+glxZ0LFN4rKjGNINT92Tloqe0+OIcojXFU3QyTfXN+hYuuqoKzpzRGRZBtG8wGdd4Q3PseiGyo2IakoVKR/QhQ0aKrptE0UHVZNEqy/wjv29//ff45IvbVyA6N/8m98P0a/56q+E6Kce+hREv//v/E28rnjwkw9CdGVljYr+9KfpzI88zEUPBtTq5/M5RH/8J/4lRIeDJS6aK2mOfQJX0TmOLMPBCP4ZEQ3WcK6izQQrcI61P6LFEXN7OoHokXwFojVe9nyyzRd29PhxiBZYi0p8WIEPKyKm0ylEM+wIP/OZz0D0jrvu4KJ52Prpn/5piH7Hd3wHRE+cOAHRp556ii8sz2ksf+dvvBOiX/qlXw7RD3/wQ1z0vKbh+Pn33AVRvuyb5jjcRmCXEJMJ1ZOyXFhFy3LQNFd8qX3/xKv+7AEQXFpZhuh8Tpc9mVCTj4jReH/3dUXRA+pwRsvURTd4u4+eOMkXxrMjrgllSZc9m+xw0RcunMeicezAx5GYvkQsjWmwnld08vkMp/c4fR+MxnhdMUzccF53UJOvcLiMiCKjonGOHDN8HFVN85Oqnu9ryPvkOHhw05tX1Fktr65CNCJyXJXwj323eD9H+Cgjoq6p6Iw7u5yeVokXFoluMjI8OXf+TY1LrdQco8GV3jSoFrV4cl6zRGpRn+GGAC8wa/xSVUVtJyJOnToN0ZM30wRm16Kp8gB74Ig4dpR60c1NWrOvb16CaJ4l5hi87s4SE3h8HNjuuJNMyhL9CVfRqyq6zehp8i5fzr1/JIYHrv8ZziKipW9d5LSiiYgGNzo2t2g9xXskwxHN6CL1rSOohme4cZThrmmylhR8Ybxw5qEhWUVx2Dr1xCmIPvYErbZe9rJXcMmTOXXgv/Pu90L0RS99CUQ/8YlPQPQ4LskjoiyoIpVDmjFewj42ibeVzp85Bx8WQxwdsNlGas9qWtHDGgxpM3k+ozMXqVUiN467n3cnHYvTgN979+9x0aNVfNZnaV/0+c9/AUSb1LC1ubUF0dtvpx2YPKNa9A3f8A0QTXWS0aZeMJU4c9vZWdjD88Z+REwWHxsRyyvUbCucY6Q64NQ7NfyDLRzUuMm/5MUv4pJPPfUkRO+8h1pHiYN14v1RYk0Ty7iy/sRHqYt+1WtfBdGN1KZrtXjGWNXtSmqNCUaDxFuzGlfWDUaHA7qhFe6pRkSFr195b382pWOfOEW7wbfdTluXEXH0KN00nkVzwyzLRMNc38RdKSz68VO0XXZyhdrOY595DK8rgjcTsCMscPulSdUTfrHL/X+LvejOTmKDcTSkxW+NW0PlmG5K29Kx3MdGRIs7dQk8A0+Np1PcqctxAsP7AfzqKiJarkg45cuzxI4uqPiWRWRYzbbwLfxkRo8yS827eBXJu1IZLlATi+70yxJSNTSy5LxyTi0NrualA+eocDpGpHYvNzZotfUgvuK/+wXPx3JT02AcbZvULQXdmmD+WJg/tujkN2L+2BXn6VRX88e6zB/rMn+s1zWSP9ZrXwrZ3n+aP9Zl/liX+WNd12b+WJf5Y2H+WD/zxzrRL2T+2K5FWWScPxadhtxvQT03f6yH+WMdhzB/7NSp05w/xpNkzh8b5IX5Y8+V+WM90eszf2yv3rcAn9/8sb2f9OaPXf7Q/LFe5o91HSB/7LLnnD+2oCH3bl6ZP9Z1/eaP/dP4O3v/uTd64Pyx3c8PnDwWB8of2/uJ+WNdhzB/rMj788cuf7gof+y55pX15pKZP9Zl/liPq8gfC0whW5Q/1nxuMwpe7DbRmj/2nJk/9hx94fLHtqYz88e6zB/ruo7yx66qZkiSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEm6vvgDZJIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSdIh4g+QSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSYeIP0AmSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkHSL+AJkkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZJ0iPgDZJIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSdIh4g+QSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSYdIOZ9P931UFAUcUARF2yyDaJ76ubM8p5PX8wqi85qio5LOnLyysizxaDq8bVuI8t2OiJyOjiIfQHQ+n0O0bhouekTnjjyje9I0dN2DAdWTtsbvHJFhfDReoZPPZxDN8/3NYT/8XtMJnbzgWoQtq4nEwyoKvKWJnxqsIVbimSNVw7OCi6bo9/7l7+Wi/8n//qMQve/eF0D0Xb/2mxD9uq/5Ooh+8P0f5gtjL38FXVjGN7xMPI6HHnwUoj/0938QokU+pGhcXU3IcXTAjrCqqHvfV273MtqWmk+LjTrDbz0ajSAaETPscG49cRNEG+yiMxxti2XqbftJaBEAACAASURBVCKCHyZ3Vk1DPUaDdzsi6ik9zQ996EMQXb94EaJ3v+BuLvqpp5+G6MbmBKLvf//7Ifr8e+6B6NnzF/jCnnc3Xflb3vaHIPpz7/g5iB5bO8JFv/ENb4Dozs4ORLl1cLONiMGAms8c2w7U/yzL6vqKSlhfOal4yUtexhf2nve9D6I5to7TTzwG0dFwiYueTKgSchc836Qp38mTJ+nYSWLyMxyOMUpjx2iZHvTTpx7not/9u78L0be85S0QffRxOvm7//N/5qK/68/+GYiOB/Q0N2qqwEOcGrU19bERMa2onnz0o5+G6POxn7y0ucFFLy1Tl3LLHcsQHS/T/LzBCs7RiGjmiaHnwHgsjogCl4E1Pk1eBaYqQgRXJJwn8CwCJ3QRqcUvf+vEhSVKTuC5KN8x3uVI14SSesI8wwURXvZgSGvyGa73I7UhUPIUPCIi6ln/GXYWfH4ZPw4eO7KMLox3jSICzx1tQUP5AE9+NfPz5B+0LV1Ym6qELMdbyk1n1vIWSmLdUeNqq23pnsxmNJ8cDLB1VIlulLedqppu+PY2jZhD7BAiNU9uWrryAVbg0QBX9Kntx2ixn0wMW3TZNd7PiMhx6/OWW26BaIHLisTQEPGHv/wrIJro//HcX/Ilb4foJDUDf+LxJyH6yntfDlHubZIbjA3uum71rVkuf8h9QnKR2GCfwDOFEltHnXMVTfQYFY6n/+7f/TxEv+qrvgqiD7zohVz0z7/jHRB91SteAdEPf+wjED1ylBaJEXHLbbdD9EMffxCiX/wltI/BGm5aEfMZDUyRWlnni7uz9CsJnE8mJjBYgbEDjibVdmrcYH/ooYcgeuLECTpzlegxbrvjZog+hV3Zww89DNGV5cQWytqYVqBbOFjzy75PfeoTEL3rnufjdcXW5haEttY34dgBDrcVbslG6h1QkdOIWRY0i5hNt7lo7uE3Nxbek4hYPUo75HffvQbRM+cv8YWtrB2jML/YxfG0xpcdEbExWYfoDKd8PIUe5HS3l9fojkVqbzPDyc+Dj56C6L130aOMVE9Y4MK5xfrP6QERsbK6SheG3XteUnSAuQfJzQSuRol7ghPdWZVYswcvEvHQ6Yy+184ONfmIWF2jDrypD/44Wt5gTG211RUfTkWXuAxMrkqS+wmgwsE68WI3tVJrcaXGiSL8/ij9JhGn6BneUt44mjeJHuPX3/kuiG7s0BzjbV/65RDd2aHxdDhMvHHmDryt6J4kdrQ6D9r8sd2C8brMH+txneaP7VV0duPNH+syf6zL/LFe10j+2IK/aRb90/yxnsPNH+swf6zr2swf6zJ/LMwf6z2z+WMdX9D8sV2LssiSGWLPxhcii8z8sV7mj/Ucfh3mj83nc84fW5Q5tovzx3Zmc/PHnusfmD/WU/T1mT+2V291/fzmj+39pDd/7PKH5o/1Mn/sGZ/btDlA/tgz53iO+WOLmsOCRDLzx/Yzf6z7+YGTx+JA+WN7PzF/rOsQ5o8N8qI3f+zyh3vzx/buC+9+zvlje/Xmkpk/1mX+WNfV5I8FppAtyh+7PLOAnjCPzPyxLvPHuq7N/LGmzs0f6zJ/rOs6yh9LpXRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJuoH4A2SSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEnSIeIPkEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmHiD9AJkmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJB0i/gCZJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSdIj4A2SSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEnSIeIPkEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmHSNlEs++jDH+VrG7mEC1yOrZtE1fTNPsvZq8cTz4ejqjoGs+cJa6srulb13UN0XJQQDTLMy466NyJO5a1dPBwMOSS26yik3dqzr6jIVZVfCxHE7+bl9P9jnaCNzRLFJ0VVPZoTLe0xofVtlh0nmo8eFO4kuVYCbMsUUWTf0DHFnTsiRMn+PCf+Zmfhehb3vwWiB5dW4Popz/5IETX8NiIqObUY/zWb/0mRD/56U9CdDAYc9FPPvEERIcl9ZPz6TZEK66iES1WpDl2R4G1qMB2t7K8Av+MiHmFXRl+rawsIcqdf0QcP34MoltbWxBdXl6GaIsDapN6WGVG36vAhrm5OYHoMFVFJ1M6/GUvexlE/89f+AWInjlzhou+9dZbIXrsBLbrgoaWTz/8EEQ/9eDDeF3xsU99HKLLS6sQPXLkCES/+G1/iIseDAYQvfeeuyG6szOFaI53LCJajHPrgMlP0zRxZXTfHxepC5tOZxAtEp0VRRucGkXEcEiPI8uoJ8QpRpw5cw6iOXYIEVFjlzIeU6vnmerP/uzPcNFHT5zkPwDve997IfqVX/mH+fDJlGo4d8JnTtMN/9Vf+SWIfud3fidf2KMPUYfzxje9EaIPffrTEF1apt4mIoZDetbpuepiJY62ZVnyDd+aUI8xGi1BlCcJsxl1CBGRYy/Kq9docAqd/J1wnoPg/KbC1VbLc7aICHpe//pf/xREv/07vgOiP/wjPwLRs6dP82X99b/11yFaYfc+xwXTfE71JCJGI5pj/5t//a8g+pIHXgTRV7/utRCt68SFbW2t4+HJZx07Ozu9ny/h9ktEzHBBdP78BYgOsE9ILG4jKty9KfH4Ggfr9io2rJ4FXJVf3cl5l68NqkjcRSd7qwq3EKsWv3WLuxwYzXEJGakpynBA37rF+j/Hyh+pbSXuhJdw3nX6LC2IXlQlhup2SH8wq3h3EvcAm8R4WmS0mcbTgLWjtCBKbffGdEb1/9L6JYiWJW5TX6KH9cEPfogv7GUvfyVEq4qq2WBE9zNL7c5zvPc7X/6Q94r5wiJiPKZp2+oKrdmrOVUzrkW8YRsRFc4Yv/Zr/ghEF42kny06NRa//Q/R3iaOePHAC+mOlXliGfj+D74foi951ZvoYOwTMt67T0xzI8dhKyIGw25Ne2ZxB/Ww2Up0Vg2+0eBqFrhrWuGrqxqHy4jg+EtfQVttO5u0G/z0009z0aMlatdf9fovh+jDj3wGos2MluQRsX6JuuhTp05B9Hl33QXRwRgnuoldpRgv7evKZntDN+Pm5Ay797pOdOC8gB0v4Z4tLiHnU+rKIiKwn+TZEUcff5KmN8dO3MzXdfrUeYhOanqc0wltYl/a3OCij6zQDf/EJ2m7+I4TdD8nI9q92dmiy46IqqZ6sowT3WFGeyC8fxgR6+u0PuX5O+65Rj1PFM27sjVOYMY5PUp+dZVcxrVYdIMjC698kz3GfE4DbsWH4yyiTG0XsBz3wHOcRWzuUNsZjeiNW0Q8dfpxiG5tU0/4qUfOQpTXgBFR4nuBFrvonN8V8kS3TI1qeHSN0zbeTLia1IKIaHkFit1Rm5iLxjY+a24c/8v/+sMQfeDFL4Toy19Ne4ARURbcrnELBWtR09kuMH8szB9b4IbMH9ur7T4488e6x5o/1mH+WK9rJH+sv/Qr17B7/2n+WJf5Yz3MH+u4NvPHkn9s/liX+WO9zB/r+oPKH4vku5iIiNhckEVm/liX+WNdhzB/bGtrnaey/L6b88eWhiPzx54788f2u07zx64opa+Rfn7zx/Z+0ps/dvlD88d6mT/2zOefu1kHyB975iTPMX9s0aX2JpKZP9Zz+A2RP9ZJJztg/tju533JY8/g1nGA/LG9n5g/1nUY88eKvfljV2SO7f7Hovyx3c85f2yv3swQ88e6zB/rupr8sYgYjRdugyzaP7z8+b78sTv2/Pf6+rr5Y13mj/VEr8n8sa3tHfPHes5t/ljHdZQ/dpU7XJIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZKuJ/4AmSRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJknSI+ANkkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJ0iHiD5BJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJh4g/QCZJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiQdIv4AmSRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJknSIlNFk+z7K8hYOyLL9f//stS2dOSJyLJoPr+sKogWWm13d77CVOZ2+aRqIDvHYiKgzvic1RIuCHlYWiccxm87o8LyE6KCkKD/KPB/whe1M6MLm8zkVXdDDzvNEVWgxzt+rquhh5VgTkm2n046vUOL3Sn1nDif6hMSzxsIn21Mu+jff+S68MD6a1NhsE7c7ohhSHc5yqgnf99/9txD9yR//KS56OkncNIJdYV4kGmYzwxpe0uFFgfUfu/fZdAL/jFR3NNmmHqMoqAIP8UFHxJHVNYjedNNNdHBGlfDI0VWIzqZ0xyIicGTh7n1t7QhEC3zQETEajSC6ubkJ0Rc+cB9EP/nJT3LRJ86ehehdd9wJ0TKjKnr85psheuvtdOaIKEpqepcu0j15wfPvguhwlHgcLXZ1589fhOh2p63tdSs+6IjIcGp27tw5iNb1wt6mrusyv6KL3jdIPf3003xhWP2jwVs2r6jpNYsv+7N/0NDh0x264cHTAOwGp9N1OjhiNKCnOZvRuDOdUvT1b3oTF3369BmIbm1tQfSbvukbIfrv//0vcdHnz5yG6PLyMkTf9OY3QPStb/0iiJ459RRf2Kte9UqIVhVNkl/56ldDdIIT7IiYYg1PTH6mVP8bnG420UKrj9TIwnOM5aUliOZ4bERUOGNsMcor3zzxNIKbPc/Aefae4SQhIs6do/G0LOmmVbhSO378OET/0l/6Hr6w7R3qE4ZLVEXXN+jYRx59hIt+5ctfAdHNzQ2Ivhob5mxOVSHPE6uSp089CdH2WSyXPvHpT/V+funSxdShNL15+LFHIFqUQ4hOJvSwIqLFwbpqqSsrCxoxM1xWZ6l9Jb7hOR4+xwXR5oVLXPRoaQzRM2do3nXnnTSVndc4m4yYzrH/b6nH+Jc//i8g+hf/4l+E6Pve9wG8rnjD618PUX4cFX9rXDhEshPGMbEY0KM8duwYROfYn0REXdN4ymNxG9juEtUksbfJ21K8rGhwWR0RGc6Tj588SQfjgPk7v/seiL7hDTRdjNQmYeB+L+8gtqnen7dGB8+sMefdDx9/nKaytz/vHi56e3ubLgwnZjwm1ths6yaxUuMdxgonybxxlGWJhfPv/savQ3R5aQWi9913P0RHYxptI+KtuFhbOUpbQ2VLHQ73GG2TmIuWZeKmVdjp7GwvXlmnOqsJbro2WM1arEW8W9Ck3gsE3jQ+fLBE9/Plr3gZl3z6HK3Z3/teumPc+a+t0c5nRHzoIx+E6OteSwN9W9LjKAc0NFSpitI2C79120zHI1yB8nwyVRPGY9qpWMHF72Sb5tgtblhFRBv0ByeP0w75FrasFrvo8TAxA3/tm2gH5mMf+zhEL63TqPT8e2hLNiI+8IHfh+ibX3UCorxdsLWxA9FZavsxsV2A8xuc2sdslphtljiU84vdo6tUvYtUFT1+jG44G46pn0zsoCSTInB04M1kLvrBTz3IRZdDWllM8GG/4D56TbO1lagJG9v0BxsbtIVy00l6ETPAL/UYzlQj4tIlehGzvEwnP32RGmZqpy0qXPLzWxzei+DlZ3IaXODLkgx3fjg9po1E0Vlg0ZjskWqXqaEcV0wcPXOK3inMsZ8cDfHVVGrTdTbDrXuuJ928BfPHzB9b4IbMH7viMjrdi/ljfWVz2PyxHuaP9Rz+Xyp/rNegLK/Y29zTQZk/1hM0f6zD/LGuazN/rKcg88fMH+tj/ljXFzR/bNeiuRnnj8Wza/WLxhfzx3qONH+s45Dkjw2uDHEGwaLMsV2cP3bp0kXzx3ouzPyxjhszf2yvvkXE5zd/bO8nl/PH9nY6lz80f6z/cPPHOp8/6/yxHs85f6zqv9beRDLzx7pujPyx/f88aP7Y7ucHTx6Lg+SP7f3E/LGuQ5k/lvXmj13+cFH+2O7nifyxK87Y81jNH+syf6zravLHAlPIFuWPXf4c8sfKojB/rMv8sa5rJ39sbwcxHI7NH+syf6zrOsofu7rMKUmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEnXFX+ATJIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSTpE/AEySZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIk6RDxB8gkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZKkQ8QfIJMkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIOEX+ATJIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSTpE/AEySZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIk6RApy7zd/1lT0RH5AIJNS8cWZcFXU81riGZ5RteVUbTkolsqNyKamv6gxjvGRc9mDRddDocQzdrO49ujqunkTTNLFF1S0RFYdIVFZ3RsW8+x3MSzzoqSip5PIFpg9Y6IlZVViE52LkI0wztWFFRP5vPEPeHD28BqRrfzWYTxcdB3jpjW2HayxC8kZomfUOQqih0dSjTaiBx7jB/7J/8EoufOnYPo448/zkVXDfdm9LDqio9N9JNtQzemxD6hmk/pzC3f8gz/GTU+jgbrKH6nOHbsOIUjGqyEG1vrEOVWn+HI0raJZpvj114aL0F0NsOxI0u0j9EIu1kcT++/74UQbVNDOdeE4ydO0ME4spQ5PY6VNRo4ImJjcxOit9+2DNFqhx7HYHmNiy5GVFVWV6no+0/eDNHPPPYEF52PqKpcuHARojDu8JAUERkOlxExn+PYgfOuGfaiPI+NiPFwhHE6fDSiOdt8TvWEH3Qku5SWxuK1tSMQ3Xj4QS56a2sDoh/60O9D9KabboLo/fffx0Xf8uY3QXQwoK6sKOmO/eRP/ARE3/yG1/GFveiBeyGaZVTDz5w6DdF8wDP/GA5pdNjZ2YJoMViBKDfcLEs07Qxbx7FjxyBazakvarHJR2ruxK2eix7iGjAiuF1mODCV2BPWiXlXnH76KYh+1Vd9FUTXccj75m/9Foj+5E/+FF/Yr/3ar0F0eYVu6Wtf+3qI8pdK+q4//10QLUrqT1YyHBqSVRQnPzyB+dwp+j+e45kjYmWFeowcO6v1dZ4k04o+IvKcBqYso3VHORpDtJnzEjKxem14aYGrTP5Sq0cSU74pdlY8F13fpO49y2iSHBFPPvEkRJugmvCnv+M7IfqxD38Moq945Sv4wqYV1QQeWaa4ICrLxD3hNfvxE7TGPHbLLRD9qZ+ifvKLv+TL+MIeuO9+urBjRyG6doSWPKupBVGBNZxHWx4xUxubUWM/WuPGEW/EfckXfwmdGvdFI2I0pu5oe0bbBS2efLKzw0VvbG5DdN7XlV3+kLu5OrVm39qma2vwho9wPJ3u0NjBG/uReqPBs7Ic+5M5bt1HxFve+kUYp7aT57hDnhrKeVN2jhWpKXGHsKH7+c5f/3UqOOLl91BPGBHHT3a3d07xIZ+VGKkTb3n4ls62cdwpeMM2UUX5WQeuSjLuB1PvBY7jaqvBGr5U4D7GDvVFEbGyhNM27AmHBW+/kKJITPnK4b7uaLI3NMM98B3srNrUltfSEs3A5/jSbWuLpnzJpTFPdJsWdy9LuqW33ERfamuT3qRExH/+tXfQhWH/P8Y5xic//T4u+p5baYrOL3aHOKhtZ9QDD5cSu3zcrmcV1ZMS+5NBah/j4qVL/Afgtptpl6/GmWpE5Lz4xcfBrZ4nhKkOI7FnO8fHkeFQfe/9z+eiJzvUbNe3sDvCt0vnL9ACMyLWjh6D6M6MuqPT5+nkJ09Q27ntjjvwumKMM3De+fzIJx6FaLIX5RXoYEAD/QRr0TLm7eRZotmm3sInDsaiE1tSPIvgs/Ob2dRwGgVOUTLcGuKh/Py5CxD9//zwv+QLe9Nb34JF09xpc4MqcHQW3eaPRZg/tqDoGzF/7IrL6ExrzR87SNj8sQ7zx7r+C+aP9dj37mzvP80f6zJ/rIf5Yx3XZv5YkvljXeaP9TJ/rOtq8sd2LZqvJtv0s2n1ixYI5o91mT/WdUjyxwZXhhL5Yzix4vyxeV2bP9ZzuPljHTdk/theTV+PevX5Yxc7n+y6nD/2tr8U3Q/NH+s/ufljn1N/bg/5APljlz3X/LFFGWW9iWTmj/WfHmLXSf7YvvdBB84fm022oz957Fl77vljez8xf6zrEOaPFUW+J3/sisyx3f/Ymz+29wvsfs4vnffqzSUzf6zL/LHewiHG+WOB7zsW5Y9d/hzyx5KpZeaPdZk/1vUHlT9WlqX5Y70HY9Hmj+13TeWPXcWDlyRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJknS98QfIJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSpEPEHyCTJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSDhF/gEySJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEk6RPwBMkmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJOkQ8QfIJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSpEPEHyCTJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSDpGy+1GW9Xx4Wds0FI0Mowl5TkVnGZ2co3VFl10UfF0xn88p3FLRCXnqN+DwhjeJe0JfbDBI/vwcPTF+WA1eNlaTaOZ4bESON41rQlVVEJ3Odrjonc0tiC4tL0F0MpngueluF6k6yo0rx3DV0g3P81TzaOns85pueJE8OeKnmXEFbw9e9Ggw4D+YN9RjfOuf/DaIlkM6+bAccdF5htfW1hAscjp2UFCTj9S3bvqGm8tmc7qwFvvY4XAI/4xEDY0cu6Pl5TFEL21u0MERD7zwPoiuLK1CtB7SPamx2Q5SVTTDe9K9h8/+5Mk2zV308mgZotMpddH5YIWL5oGpbejCeNxpCjr2He94B1/Y13/910O0ms4gOhrQw9re3uai+Xnt7NCQd/HcRYhuTRLj6c1j6s3OXTgHUegS2izaK+vYvn8m5icRy3hhwwHdsjmO802TmAhvbGxi0dQd7WxPIVrVVIuSPUbeUv3nzr+uqSs7dvwIF338xMsh2tC5I8PZzxh7m4jY3qL6PxpRPZliVaim9LCed8edfGE7W3TyFazAJ2++CaK33XoHF33kxAmIfugjH4XoxgaNmLMZ1aLZbM6LmnlFNZwNRzQ/Sc5USz68pLbTNhRNTv5ZYrmEvdEAV3kR8erXvgai73rXOyHKS8jn3fN8iL797W/H64o/9g1/HKJNTdWsLOnCfu2d/4mL/sN/+A9DdJDTYJ3X9DxafFptaouFZwJ10GLqs0UsmCs3PMOOmGIXvY1DXo5NvixSw1Zx8N/ZL3CrosEFUY6TyUjdtBzXYv/pN6hl/fa7/jMXPauo/vPk/4EHXgzR5bXEUP6xj3wcoufPXYDoHXfRwPSXv/svQzQvE73o1fSTPA1I7B9GtFgTTp06A9Hjt94G0Te85a0Q/dEf/VG+sCMra/wHoMWJLs4lIyJG2K55TOTpfXI8rXBCmWFFWhpSTaixiy5xXRwR8znuXuIWygSnRjs7iZXa2hpN+Ta2eoq+/OFtd9wNx/7AD/wAF31hnSa6r37layH6yCMPQvTcOWpZyXqS2gOnh8Vbl6vLiX2Mq3nnsMObCdj5RyT2mrntnDh2FKKbm+sQTa5Pf+gH/yf+gze+4U2dz37h8n9tTxYux5oicU+mO1RFZzt0w6sZNuqKFonTeWK9M8GT80SXh63lEW1ERMRsRte2NKZbOsfxNNVNxj33vRCiLb4Y2J7Qer9ap3uyeiQ1XEKXUhRnL9DS+EUvvguiH/7gR7jku26neULivRhuuiY301rsE3jyU5S41Ry4NOBJW0SONaHCOUqNY3GFE+yIGI/pXSHfUN4/59n70aOJKsqNi/fx+Lr5QUfEHCcwNU5gNnZobTtITf7Xjh+D6DbuY/Mb0kTKBL41iOQrTryjLT4PftkXEWtH6Q+OnTwJ0SnW/1e/kpaQEdHi/zdeiTeNB7VHH30Uovfcldh0rbAS8sPaxJ3kZCZIansHU0FwD6TGl8KD1DS4qTl/gL8YHVvNEz0GP2vGSRF1lhjUuCY0nM6BZ/6v/8r3QvR/+qEfxKNjZUA9Yd5QV3Z0jd6GHDlyjIsO88f6mD/WdZ3mj+3V7e3NH+s51vyxDvPHel0j+WMLzrDwn+aPdZk/1nNy88c6rs38sb4/Nn/M/LEe5o91fUHzx3YtyiLj/LFILWp2VbzJuYD5Y13mj3XdMPlj4ytDnD+2KHNsF6dCNW1r/ljP4eaPddyQ+WN79c48rz5/7GLnk1178sc+0v3Q/LFehzx/7LtOP/P51/9Xf2z3Pw6QP3bZs8kf+7o/uf+TXXs//+Zv2fOPzzF/7Lm6lvPHvvnhZ/75dV/3dXujB84fu1gPoj957BmQPBYHyh/b+4n5Y12HMH9sPpn2v2v83Id788eetye++znnj53f89+9uWTmj/Ucbv5Yz8kpmsgfw4q06EFf/hzyx+bz2vyxLvPHeqLXZP5YVVXmj/UeDTHzx7quqfyxg++sSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSbru+ANkkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJ0iHiD5BJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJh4g/QCZJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiQdIv4AmSRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJknSI+ANkkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJ0iFSzuf1vo/yQUsHZCVE8yyDaNZQNCLmzQSiFBeXDgAAIABJREFUg3JMB9NVR1ZQNM/w4Igsp19qq5r99/CKkzcNRItiwEUHFt20dPIMH0fbpr41Hj6dzyFaJG4pfanBAJ9WxM6UbnhTzSA6Ho4gem56jotuWyp6e4eKHo6p6OmEztwGRSPV9CqqJpFj88D6GxHR1ImzQ7DFLmFWV1x0UXDroErYtHTyPKeObjKnnioiypIOHw2wK0t0kwlFosegZz0c4aNMXViBj5P7k41LmxAdjKjtbO/swD8jgoeHEydvguhsvg3RY8dOQDQiGmw/HM1LeljVjPuERLvNsNXPK+re24xOXtWJkaUsqOi6SbR6sLOzxX/Ak5AKx1Nu1Dl+qa/8yi/nC9tavwTRAk8+KOjCkgP9Ek5ChqMhRG86Tm3nwx/+KBd9+x1YE2qcWWGoqq8Yi/f9Mzme8qQuaxK3FCwvLfEfrCxTX5fn2Cdg0ysyGhq4f47UiFljV8an5mlVpObJ5ZDuSYvzk5anIBHjERW9hE/zoYceguif/jN/BqJDnDhFxAy76GxKh1/ceBqil9Y3uOjRaBmiOzhtm+NktMBKyNFI9Rjcgbc4NLQ4NETEjLvZ7YOv1HKc0UVEPqAuOpvThfHokCy6quhZv/GNb4Zog60+0WNgNxgRLc4i+Gv9vf/x70L0K77iK7jonS2aMeYllV1iFx1x8O2XiDhz5gxEq3lqpRexsrba+/lwSDUwIrY21yE6GtPhy8vUx9ZNqopiDS948dvSyfPAHhiPjYisxFZfUJQ7upe94pVc9B133AnRpTHd8JWVFYiWQ1zbRrzlzW+D6GOPPQbRd7zjHXxykBpOE3PspkpMUUByZsULJl788t7Oj//kT0D0r33jl9LBETcNukvpZzz46JMQ3dim3bDNncQUejKhxrW+TRe2NaEeeGdCFxYRGzNsufwwB9RFD7F1tHliN/jSDlbCjA6vcclTprb5zm3STetdgF7+MMfRIcPVa0TwfsD587Rn2+JW83j1CERnO1O8rsQMnHdgBgNs1FxwRM6zTezshkOqJzhbjIjIuAHgxin3hJMZ3c9ZqgfeSl36LPGSaGFVWcI1YER83/f9FYgOSh5P1yC6tUVrsSYS0+CKNzqw0fP7ukQNjMhxk3CAXWxifyUxSU5U0Sk2W57eXNqkbeqja7QujohmtrBlb88qnqmurFAtugk3sSPi/CV6Z7G8hHPRAdX/Zp4YT/MC+3981uUQR4cpFT3tvN3ef3IcrEc4bPFexP0vfAEX3fLLblxOtbjuKHFZsZna22mx7UEnGREZziLW1qiji4iat9+H1LgefPQpiJ5cTaxKeK22skpXvoNz0SajN0STbZqpRkTDG9GJY/F9XJGYZfDG6alTpyBaYA0+e5o2IiJiY4Pe49x+510QffihT0P0RfffD9GtLdqmiNSYWDfUHVVTuuHJVBAe1PidGu/jFdg/1zXPchNvEmuswIEJRemFM1bRHKfBTeINaaJozhDIcNHSYneDWzvx3d/9PXhdkeOSp8SGeeQoLYiWOzNV88fC/LEDHX6d5o/t1c0lM3+sy/yxLvPH+ou+NvLHFmgX/dP8sS7zx7rMH+u6NvPHuswfC/PH+os2f2y/L2j+2K551f9uLpkh9mws6jfMH+syf6zrkOSPnbgyxPljizLHdnH+2HA4NH+s5w/MH+u4IfPH9urt6j+/+WN7P7mcP/Zd/6DnQ/PHepk/1v38APljlz3X/LFFGWW9Q7r5Y33hGyF/bN8/D5w/tvv5gZPH4lnnj/35P7n/k13mj3Udkvyxb9+zAfY93/Pdvflj25/7cNFMdfdzzh/b6wUv6MmRMH+s5+Tmj3VP/mzzx/pbNzzNK/PHLnQ/h/yxum3MH+syf6zr2swfq5uZ+WN9B5s/tt91lD/2nN7BSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSbq++QNkkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJ0iHiD5BJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJh4g/QCZJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiQdIv4AmSRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJknSI+ANkkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJ0iHiD5BJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJh0iZ553fIKsbOKAtWohmWFiW+rmzUT6AaNNQ0YNRScdW+KWi5gsriuILFI02cVMmsx2IDoohRLOWHkheJoqe13xbEk+bYhmdua7pQUdE1tLhWUY3vKomEB2WIy56Pqei5/OKDsYLawJbVo61KKIcUNuZz+dUdLcT2BtNVIPIMnrWiaaX0R0rue1EZBm1+sBbyq2+aeiym1SzLbDp8S8/ttjRtXi3I6LO6Mqrhr41d1bNnM4cERne8MGQOqvb7rgDokePHofoeHkJ/hkROTa99c1LEF0ejSF6af0CRCPiVa96OUTPXqSiRwVV70lFjXpcUocQEaMlehyBLQ8bRzTcDUaMx3RLazx8iAN9mRiVIsexhbubiruynIouEudOzI6GI3qaeUlFt9jkIyJKujbuyebzKUR3JjTaRmpS99RTT0G0KBbesrpt8iuHhn3/TM672Mmbb4Xo8vJDEC2xUUfEzs42RIcjeliz2QyiAyx6Xieabc9iYY8a5wklzjYbnNFFRNvioDajaI29VZtqmAOcWU3ndMNvv/02iF68eBGiYxwuI2IwoCuvcSa7tbkJ0Vtvu5OLznIcmDbo5PWMeowR3u3RYJDjHGNpwAsiCCamfAVeWETUFdWEEQ55bYsTp1TRPHbkOCZeTaOOiNES1jP8XhlPg7FP4NE2IjIcWfIBVWCuJ29981u46DaoIpUl9v843PJYzLPciKgq6uHHw8TiNyImG1u9nzdNYuyYbNGgtrGxAdH1jXWI5nliVVLjWM97DcMB3RNcaUWdOHei1c/wYb397W+nUzeJ1hHYfNrEw8SSUxOr5fEKRD/1yU9A9L/9vr8K0RnORbM8Vb0Ta3Y8FB9lEvcJJfbvsxktA9uKLuz2LLF6PT6/CNFb78FBrUlMYBgvavhhDbAnPHPr27joExufhOj04hMQXR7Rt168ZImISAzzqa2hIQ4sFW4XFHmizX/D/486u9Prl7/YM3/Wfq7ebm7TMnBpaf92zT5bE9ok+dZv/laILm/T2FHhlO+f/8t/jtcVW0PaleKZ1e24hPyT3/KNXPSrXvM6iA6WsenhJsi7fvD7uegCx/rb1uhpjofUbIc4Ki0tLfOFfWRKNTwizl+ihUmUC28at52IaCuarC5ldPj83NMQHRW4rZSa/JS4Q74z6Z/OffbYMT3KSWpvp8QdyLyiwbqt6Y7xmSNiOqW12PERzQTWhrg+reiOjVKvrp7cXvi9trfnMxys8wFNnL7rL/8DLvpVr3klRM+fPgXRc2epB06+koCduojEXlxitYSvjGvcNYruruD+KH2vCpfGWeptd11TFW0zihZYdDGgoicTqt67hUOMlzwlFp2n9jF2pjiBxwnhNr41mG8nasKRo0chyjdtaXkVogOcBgS+XYqIvOCdT6oJFy7i5AcXmBExwn5yPMaWyUN56lsvj6mqVDPaLrjnbtq9nM9p2JpMaZsiEhtakWP+wBx3tPA5R6RexNf1wXf5EjufmGQSES3uNvAd4/cCWWqXj6VeSeDUCDM9IiLHvq7a4cdJx25vUyVMbfJFhSNL4NvAs6epo2va0/s+ybt5KeaPdZg/1nv6A0f/APPH9uquCs0f64maP9aNmj/W5xrJH+uVZ0VEdeU/P8v8sR7mj3WYP9Z1beaPdZk/FuaP9Z7Z/LGOL2j+2K56wVtvzh+LCM4f27Uoi8z8sZ6o+WPdYw9f/lhVVZw/tihzbBfnjzVNZf5YT9Hmj3WYP9YTfY75Y3s/6c0fu/yh+WO9Dnn+2P8Rz7TBX/j25+3+x7POH+vxXPPHFmWUbU16pgTmj3Vdv/lj/yF++vI/f/Jbv3xv9MD5Y9vTeVxF8lgcKH9s7yfmj3UdwvyxI/VWb/7Y9uc+XJQ/tvs554/t1ZtLZv5Yl/ljvYVDjJc8gSlki/LHLn8O+WM707n5Y13mj3Vdm/ljeTkyf6zL/LGu6yl/LHEtkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkm4g/gCZJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSdIj4A2SSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEnSIeIPkEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmHiD9AJkmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJB0i/gCZJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSdIj4A2SSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEnSIVJ2P8rzng8va+sGokVJx0abuJqqqSGa5RlE57MZRAdlgSXTmSNiPptAtMjpnsznFC2LIRc9wD/IMrryBu9Y09CFRUSW0e/T5fjjdVlLD5vPPK2meF3R1hVES6yEBf7oXouXHRE7OzsQzQcjimZUCat2DtEsVUVnc6qiXE9yjnKjTlUkfhx8YckuI1H0cADRGo/lmoANK61pqaMrB3TZ0SZ+NZKr8KAYQ7RpqGVVGI2IvKVbOsG283/8zL+D6NmzZyC6tbUD/4yIuqYbPq/olpX4rE89TRcWEf/hP/wHiA4LeprjMfUnJ47fBNHbbr+VL+zIsTWINjV2RyPqytoSK3DEAPvJSbWFxx68UUfEcInqP7f6tSGNxUVOF3Zp4xJf2OnTT0O0W6X32t7ehujGxgYXfeLECYjOcPJz/NhxiI5HS1w0dynb2zQTWDuysjCW5XlxRRXdN4o1TWJk4Q7+qafoYT3/+fdAdDJLTG+GY6pmm5ubEB0trUK0xrudGosTrYMb5mRCtWhlJVFP+MpbnNQNBxTllhURgwH1dbMJPk0cq9fWqAceFLxmiRZnES0+zPHqMkQvXlrnopdWFje9iBWMrh05BlGuJ5PJJHKqhKurVP95ZsXR5Aycm0+NU1leLvHSICIyHPTKjFf0VDRPCHdPQDGuokE1PMMeukp14IMBLlsquqV//f/5P0B0Pkv1GDhPyPiOYS1rKnrSo6XEZgJPg6sq+awjX9AZ1liLImKKN/xjH/04RFdWcaaaah1zvGm8XOLVa4n7GMkqypPVpsHtgoz3yrjk1AoWd7R4csRjcUQ89NBDEH3961/Ph4MCR8zEsjoixy2tak7VjCcJ3O4i1fQGSzQ7qrB6V9iN4l5vRAQvp2rcdCpafBxlop40uNGRzWm/9/Gl2yF66jRNoSPiyZIm8PfWj0A0y2hty+1uhhubETheRsyxL2sLKrrEChwRx3G34dEHP9X9cGf62drz9OlTcOypUxSNiHpGTW+Kk9V2QtETN5+E6N/4a/89X9gP/eAPQXR5RFsNX/LiOyF6/xE6NiKyoJbJU9VqTtXs9d/wrVz0u//F/wrR2TJ2s7haOnfpAkSf4KVWxPEXv53/4Pfe+559n3zRnv++uLGwWzieXJ/i66d/9220wZJntBZrcLqYp15YtDihLIOWS6cm9KUeK17ARf/Ldz0I0W98BTW9N99Kl12k+skUOnl28m6I1jvnIFqOEovE1/yPCzeOtqpqbe0IHDuZUv1PvVyNr/4jXwvRozhqfeQTj0L03DlqthHx8CMPQ3RzcbuLiPPnaKutKeh716kZeF7i/AZfRE7wxS6/Ho3UZlrTUNObbtKO7toadlapXT6uSSPcnFzG+j9M7WhNsWFWuMbkyX+Teqe8eox6wr/z//o3EB2NqQPfwaKLxMogWtzcyfGODvEFaIVT6Ei9+RrgCvTESerKlvDFVkS89IX3QnQ4oprwkpe8EKLPv5vm9jytiogzF+g9ztrRY3QwbzUMErs3vM1XY3/CK1D+zslEEX4lnXytAOa4axQROe508DYIn7xILLYSW6P8rauGis656FSPkeHhswo3jnjXtXPm7h02f6zv5OaP7Xed5o/t1c0lM3+sJ2r+WIf5Y72ukfyxXvtmUHv/af5Yl/ljXeaPdV2j+WMd5o+F+WN9zB/r+gLlj+2tAbff3v+Gl+tJRHD+2K7Vo/2twPyxLvPHug5h/lhd15zEsihz7HOH8+5la/5Yl/ljXTdk/ljS5zd/bO8nvfljlz80f6yX+WOXZcPPfn6A/LHLnmv+2KKMst5EMvPH+qLkeskfe+rpK6rBgfPH2raJvuSxvd7ypV9KZ37u+WN7PzF/rOuQ5I/9eDxx+b//7Z861ps/tvW50X9R/tju55w/tldvnTB/rMv8sR7PNn+s/+asLF6ELsofu/w55I+1kZk/1mX+WNe1kz92aV/I/LHnyPyxHtdS/lhyn0mSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEnSjcMfIJMkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIOEX+ATJIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSTpE/AEySZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIk6RDxB8gkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZKkQ8QfIJMkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIOkTKPbP9nTQsHZHnn7/eomzkdGwO+mqIo6eRtA9E8K/DcdNl5nvghtrale1LRl46lpSWINg19qYjIsoNfeY2XzV8qItrAmoBHV3O6KcMBPaxhkagn8xrLbmoITqdTiFYVHRsRNT6vrKJoW9Bl83cqskQVzYJuaZbR90rVhEQ9ybFPwFYbbUvHJhUl3ha88ByrWVVTBc5Tj6PBW5rn1NFl2JWlWm0EPw683y0WneomI2upmvWMNXv8kx/7pxBdWVmjM48r+Gcke3i87Nls/9muOHOW6MDH4yFE6zk9zslkAtGz5y5A9MGHPsUXxvWoqXG0xZGaH3RE8Fg9GtAd29jchOhgQBcWEdUcn2ZJVz7DsWMwGFPBOc9Poq5mEC1L6qzmONpmqSp6DitSg5O6yW07ED319Bkueu3IMYi2LT0smDs1TVNd2VFW1RWn4mlVRBQt9Ribl9YhOhjQyT/yoY9y0WtrqxC983l3QpRrwsnjxyFa14nJT1VR/Z/PqQKvrVEHPhqNuOgsp+5qNqV+kgfru+95ARfNk1UeWc5fpJaV4Q1PDvTnzp2F6NlzpyHKd2w4oGMj4t5776PDl+lZty1V0Qon2FXTcC1tcH5z7PgxiGbYRW/t0B2LiBb7yaKlwwvs3gteG6SaTzagO1ZTFxtZ6jfK65paPbcOnpTxEpJH6ohouJ7UdHiGPcYA5ycRMcRJyBxXFjVuv/DCYTLBZxkxHtNeRPssfo9+0RbNYJBYsweOp4MxVmCsKDhvikitMWtsXC1uJlQ5zqxwCh0RTUEXxvW/yOmGJ/d2mipRVQ4Ma2hExD333AVR3hBLrV4pWicfx1WcvcL7yTtpkZp6TafYE+KFcQ/MmzMREcHLQF5WY9F45ohoGzo8w1nZQ0/RvKs4QVPoiHj8oc9A9FUvoF60LHH3BvuTPLUq4Thu/MR8TkVniTEtRmNa3g77Wv3lD5eXV+DYijfQU9ObF91/L0Q//d7fgujFJ2gz4SX3JpYGD7yAurLN9UsQXcJ78lu/+Rtc9MtntO5+4OWvgOj6xgZEV48f5aJvu//lEL30Gdp3KrDH+NgpWla/7xTdz4j4E6kFLO+srqwsXHc3OGeLiNF4maLLdEurGT2OPPFOLdFj5LiomeNu2I8/SFX0hfef5KL/wne+GqKPfOSDEF2fnoPoiUFi7OBvzZs/S0dOQPTCFu1opRZqsby0r45d2hva3NqGY6e4Ai1SY8db3vQmiDYXn4RonWEHnvrawxGNmCdO0A1/+tFPQDRboWMT42VEhS/svvsvfCNE/+7//L9D9MiRI1z0GN8Lt4HrjnWqhC940Usg+mM/9v/lC+NJyGhIY/F4TN37aJk6yYjYmNEGY4trdl443H33PVz01vYWFY3rqXpOA1OxhW+cU22HJ2YNrtnnO3THBqPEnG8b14h8T9Y38Z7gdm5EfPLT1P/zTDf7xfdDlHfIm9SKqMH9mQazImrOLhilXvHj0ppf2HF6QGK3IPmKnh8H9icNLo0LXExFRMMZFw1fOp28Sb3ib/G1WsuJIjww4eNIvrrisYMvLPWw919ZEZ3hwPyxDvPHei7s+swf26ubS2b+WG+cizZ/rMv8sZ7D/0vlj/X/TZ7HnoH1ip7T/LEO88e6zB/rujbzx7rMHwvzx/qYP9b1Bc0f27W52b9Vzvlj8SxqaSzOBDB/rMv8sa5DmD82Hi9x/hhvznD+2GAwMH+sy/yxrhsyf+yK0/QtvD6/+WN7P+ntgS9/aP5YL/PH9pT42ep6gPyxy55r/tiijLLeeY75Yz0Xdt3mj+2twh+4Mp3swPlj87qOq0gei+eQP3ax80mE+WN9DmH+WN3We/LHrsgc2/2PRflju59z/thevblk5o91mT/W9azzx/o3A8eL5wmL8scuf075Y0Vu/liX+WNd107+2Pf8lWf++/v+xv9m/liX+WN9B1PwmsofS/8vTiVJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiTdMPwBMkmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJOkQ8QfIJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSpEPEHyCTJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSDhF/gEySJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEk6RPwBMkmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJOkQ8QfIJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSpEOkzPJ630ct/ipZkZcQbbMConXV8tVkNf1BVgwomtGxTaLkxA+xTadTCmcNBHcmWxAdlCMuuijo2qpq/+O74rpy/l4ZFz0o6VnP5nOIDpfGEG1mdD+bpuILy3K68nlNj6PFW5IX9JUjohhg/cdbynWQH3QEfamIyDO6sDne0gzrf15Qo46IBi+twceRYdvJs0QVbRusCQ1V0Qy7shKjqetKPM0Mq1mDNxS72IiI4C66pZNz954suplRHW/xexVYw8sMu8Ery606l5Hj48gz6kWblr5UWSbGju/8qpdA9IlTpyC6vLQG0d/9vQ9BdGeaqKObO3TDK/zWc+yhx0tccmKeMJ9yJ0wXNqMWHxGxM5tAdKWkG56P6LKnWHZiKI6Y4OHjnIrOBkOINkHVOyI2KxzKSyr68afOQnQZLywifvmXfxmiA+wni8WjbRFZfWVvs69T5f4kIkqc/Kyvb0K0aql5XLhIE8KImNX0OAq8sOGQJsl1RU2+Sc2Suelhh5G4sAonk5EatpqGaniObYePjYg8py+WF9TNNtXswGdeGtAUOiJy/ANes8ymOxA9evQoF/2773kfRNfX6eTf8qe+jS5sBy8boxGxvUWNa3ltGaI72zQ0rK6sctGBc+wc+4TBiIbMptnmkm+9+QREd/Cm8ZpldSUxllc1fa8ZVf8ouLPCbnBeJWpCjiPu0SPHsGjqbeYVVe+ImG7TH4xWqNnOcBpw5uw6RC+cowocEZ957EmI1qk1ZkTsbPff9vXNDT6QF4nr69RsL1yib51aWKeWt1hPuHuf444Wz14iYoAnz4cULUtqOzuTROvgLa8sNTsibWLdwcvblg/HRz3D7qbB3cWImMyoK1se0U4d97Hj5UQvyt96eWUFokeO0JqlwF3TlQF20BF5zTUBVyW4S9Lg1k2kZkdDXHe/9t6TEP3oZmIj446bj9CFBa3Zs5xuOH6nyHFAjIgcb1re2czfq8lx+2WU6Pxvvvk4Hf7MBkvT/bDCOfYMd4MjYlbTt966dBGi5x5/CKI3naCJ03vf/U68rnjRC+6B6Ec++hGIfuxjH4XoILXpemnjHEQ/8O53QfT4iVsgevToMS76FW//Soi++yfohj/xNLWdTz9Ns4jHNxIL56VhYsCteY26eFeqKBKtYzKnqdf0y74XoqsDmt7MLj0O0eJ3fpEvrNmmW/pvn6D9mdvuoHpy14nEq6sjBQ0uX/4lb4XoWkHT4Pq9v8BFT3DdneGwdXzlZoiW2SeoYFw4RMRwvPCmDcejoqSObnuHlhXJ3Zunn34aoisVVcIa52zbm4kFERfNb0OioLHj1KnTEB2v0Ho/UltteUGtY4ZNfjJJ7HxOcNQrRnT4GDdsH3+SeowMd8MiosWKxB3dYEgT3fHiyr+L12Jbm7QNsoTPum4ScwyewHP9/+qX0zTg6++hZcUc3+BHar+X5wm8j5FjykRE5Et0S8/N6WmOcbU1GCdG6jkuDrZmuLLAl5i/+/HPQPShz9AOSUScOUNP80mcwPNbY95qiIi2papS4quWjBceuAeY2iCPwQgXiTgk8pvZxIQtohzSt8aXBon7meMkIVLLW37YvAfCtyxL5e1wu06mLtCZOyc2fywizB/rdUPmj+3VzSUzf6znzOaPdY81f6zPNZI/1isv8tiTSLN33mL+WJf5Y13mj3Vdm/ljXeaPhfljz/3YMH+sz8Hyx/7sf//Mf589f77/wlIZYs/Goiwy88e6zB/rK/pQ5I89cGWI88cWZY7t4vyx9c0N88f6/sD8sc7RN2L+2F7loOfBXX3+2JnOJ7t688cuf2j+WC/zx/Z8/tn7/Kzzx3o81/yxRRllvSsj88e6rt/8sfuv+OelvdED54/tfn7g5LE4UP7Y3k/MH+s6hPljWd305o9d/nBR/tju55w/tlfvTo75Y13mj3VdTf5YRMwWT7MX5Y9d/hzWYnmemz/WZf5Y17WZP5YX5o/1MH+sN04nvpbyx65in0iSJEmSJEmSJEmSJEmSJEmSJEmSJEkIMU79AAAgAElEQVSSJEmSJEnS9cYfIJMkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIOEX+ATJIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSTpE/AEySZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIk6RDxB8gkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZKkQ8QfIJMkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIOEX+ATJIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSTpEyu5Hbd3AAXVb0/nyjIJ5wVeTZ3R4Xc3p4AH9mBqdN6JtEz/EhrckMrzs4WBMB+ctF93ited4w5ugk/M9iYiqqiDaNlQTGrxl+aCn4l22s7XDF5bndHjTYNFYCZuGvnJETCYziI6XBhDlOxZYxwIfZUS0Lf8B1fA8o/vZ1ldVNDfqPMNjUz1Gg0UXBX5rbPTzGdaiMtF6mpqe9QDLxhsW8znWoogM+4SiwPrPtQjrSUS0LTWfVIdz8F/DfPzUY/DPiCgK7DFaGllKvJ9tlXgc9yyfgejd99KxSyPqbd70/PshOsAHHRFZSzV8iF1Zht3R9jTRgY+GSxDNC7rhXIuSg1oxoNuyurpGB2MNzbCzWrvr9XRwRH7kRRD9s3/2L0L0v/nzfwSid95+lIt+9+99EKL3vfglEN3a3Iboz/8qnTkiPvKpCUQHJd1SGHfatt03sOz7Z439c6RmEW1LFe2rXn0rHZua8j3x5GmITqabGKWTn1+ncpP97xTvWYv9zc6ETt80iXuCfXDUFc4isD9pUo9jhGN9XePJcRo8GtItG+CYFcnJKi6XRjgDL7PUSg37/2MnjkD0kUcegWiDE8Ima2ucjh45TkWfOn0Wov/4R34Uool1XMTyiG7aa1/5Qoj+/oc/BdETRxM14e7n3QnRT3zs4xB93eteBtE2plz0px58CKKveS2NHds4duTFEKJ1jPjCZrhTccvJFYhOt+nCmqDZS0TUNU/vuXFRf/Lk0zSZvHA+tXqd0cTsN37jN/oDb9vz3ws64tF4lYs+euIERJ8+cw6ig+EyRHl+HhFVRZ3wYEATXY5WFc3P51OKRkSBNbzECXxRUp8wHic68MEIGxcuarKMqvdolGiYPLOazanDGY+o6R05TnVsPExUUZzTxcMPUhe9epTuyRx30iKixnsyxlvK1Tux3q8T3XsbVBNynKJkfENTBkOqorwh9nf+7Ych+i3fTKNSRPz4z/8qRF/3Pd8A0eOn302nxs6K+5OIKBNLUN5Mw424Ad/tuOM2mmP0Fnz5wyF2VsHvFCIKHBMf/vhHIToe07RtdYX6kzNPP80Xdu4sDVu8R3j23HmIPvDC53PRvIVSTanDWRrTsefxwiLi/R94H0Tv/1pqHb/6v/xjiH4GN13r1B44jw6R2hOrFo96w+QicYgbjMfuhuhOSScvj1JnVd/5JXhdMTj7exB999/6VxB96V1Ui7ZxlhsR27gqjxEOx0eOQ3DlZW/gotsPvweiGb4/yo7eA9EiFkySIyKiafAdZcR0tnC/azqbrC7TRHeIAyLPVCOC3z6tLdPOZ9ZegGhynB8t0ffa2qHV1jij73XkGNWi2Zx2FyNiqUz0GGBQ0qxsPk9M+SrcvZnjCvTuZarAXPRsmpjyNfxeDF8/bWzQ5mSO27kRkQU966bGVTm+Px2NE62jwu/V4tlfeyfu98bjEJ3WiSnfGN8VzvCFHfcJdZ3orNYb6hN+g75W/NEX3QLR0RZtSUVEjeuOE/hit8ZN1+HNdOa33nI7X1iTUeP6a7+Cc6ecLqxKvZLg98Lcn/Cim/ESMiIaXJXsfxNzJQxGnn6hx1ttdPYa0374FU9SjvkcnBSRNfjGOf2enK8c83bwRUyyAw/zx3qLNn+s4zrNH7vyPPsrpPljPWc2f6x7rPljfa6R/LFeRVFGzK/852eZP9Zl/lgP88c6rs38sS7zx8L8sd6izR/r+ILljz2TvrUoi4zzxyKC88d2ra71d+Pmj3WZP9Z1CPPHJrOdhflju7AL7ssfu7A3av5Yl/ljXTdk/tiVpfT85ec3f2zvJ73r/csfmj/Wy/yx7ucHyB+77Dnnjy0Yu3sTycwf67p+88fuv/Kfe6MHzh/b/fzAyWNxoPyxvZ+YP9bj8OWPZc28N3/s8oeL8sd2P+f8sb16Z63mj3WZP9Z1NfljgSlki9IPLn8O+WNZDMwf6zJ/rOfYazJ/rIjc/LEu88e6rqP8sYO/s5ckSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZJ03fEHyCRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkqRDxB8gkyRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkg4Rf4BMkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJOkT8ATJJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiTpEPEHyCRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkqRDpKyrdt9HeU6/SpZlGZ1v/8n2qTmcF0M6mI9uSwhOpzsQHaws46mjKAZYNAWriq67bRsumm/4YEB3LBq6sqZNPK3BgL5109D34lpU47Mss8Tv4uEdTVz2IFGLEvdkPMYb3tLDKnKKNliNEpU/otuQ98qjgGjL3zpLVNEisE/A79Vw/a8TRX/rW14L0Z95z/sg2uLD4mjquqIo6IbXNdXwHJt8gS0rImq8pXNstmVGvWgWFRfdZFiHG7qwGkeH8coYolsXdsor/7n/5MkHtliGXypv6UFHRNvSTRuUOOThDR9mVPR0PuELGw3pWdfVHKJFTkUfWzvKRc9mM4hWFX3rYkBFJ8eOIV4597MV1qK148chun3xKbyu+L13/hJE/8U//7sQXT/1BESPVI9y0V/5hjshmg9p7jRbo3ry6Cvv46J//+MfpKJx3gW1aDablcMrjt3XnVepeVfdYCXMqdl+6cuoEg4GiSqav5oeRzmgZlvmPGfD/gQ7hIjIc2odRUmHFzjHaFO/hMydME9gRks0vR/g/YyIvKA/yFeo1Q+P3wPR+egWiP6lv/T9fGH/+G/8UbowvGOb2xsQPXaUvlRENEtrEP2//NVfgejWxiWIjkYjjs6nU742wCNLXdO8a1Rs8cmPl9SlXDxDnfDk0tMQvftFL+Wis4a66Aaja8t0T548vc5FX7pEf9DiCpQXv7PJNkRHq7gQi5hOaY6xvnnwOfZ8lqiBBc6i5zypw9XreInOvLWdqKLTiiY/S+PV3s839/x3tmBEHo6XuOgnnn4SoiWOHX/iG78JokWRGDxuuYm62c116gmboOnNYEiVsOSpZgrv/Oxg9Z7M6LIjIsONoxI34nL8XsmlFm/+NLhIPH78BERf8do/BNH/7n/423xhP/Yj/wiiv/SOfwXR02epeic3RnkCM8AbzndstoPLwMR1RV5S0RU+ygE26jJPzLt4f/LDO9ThNGu3QnQ8Tuz3zka02/B9P/rvIfqjf5wWvwXe8Qw3nSIixzlGjj1hjkuDepQYT2++lXrR3u2yyx+OcQaOO1KfPRPEtrdoBrI65PGUatH7f//3+bJuO3YMomtLNJVdW6Zjo0l04EfW6JbyDd/CO1YOEq3jgx/4EIVx7vTmt70Nop/62V+kE6f+/3Jm/GIgYl5j61u8j53hVltEzCpqmKm3CrxrSn1CVlBPFRHf9Tdo2IKvHBG/8ynas/rl93ySiy5xKvv3//4/hGi2RqPDbHqei86zD0CUR5bxMerAc3wbwpuTETFc/F5gWBSXLl2AY+fz2yBazVOVf05dygxfjGW4NVTMqKOLiIub1OG86r7nQ3T7FC2Xti7Qmbd3aOUbqdc0BW7OV7iZlnhJGVHg6HAzjiwbF2i7IC/xFQ+uWSISL/Pmidk9hcfjRGf18GO0SVIM6PAM+8mXPPAiLrrC96eBa7HjS7SjVU2pnqykFs48veexI/FiF99MRcQ7Pvw4RF/xKhrK33vqHETfssIlJ8Z6XmNOZvS9Ms5CSQ3VGV4YL42zDFMmcMM2Unv72PJSx+LBDW7iRUTJixpOKMLMhCpVRbPEChajmI+B7zoiIiqc8gWuxUqswBWv41LrpQbfgSaeZuJ19v7Lrqv999D8sS7zx3oOvz7zx678y84UzvyxLvPHnvN1mT/Wd2FfyPyx3s/3fpl9c85nn1Fm/liX+WNd5o91/UHlj3WZPxbmj/Uxf6zrC5o/tmtRFhnnj0WE+WNd5o91mT/WBflj06pYlD+2a1Hm2C7OHxuOl8wfe67MH+u6TvPHvuPhZ/77a7/+67p/8PnNH9v7SW/+2DMfmj/Wx/yxPZ9/9lYcIH/ssueaP7Z4j6rn7pk/1nVj5I/tq1QHzh/b/fzAyWNxoPyxvZ+YP9Z1CPPHBoOiN3/s8od788f29ra7n3P+2F69uWTmj3WZP9Z1dfljMV88/1+UP3b5c8gfe/ixR80f62P+2H7XZv5Ynhfmj/VEzR/rnvn6yR9LvbeRJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSdAPxB8gkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZKkQ8QfIJMkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIOEX+ATJIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSTpE/AEySZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIk6RDxB8gkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZKkQ8QfIJMkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIOkXI4XN73UdPM4IA8p98sa5oGolmW8dW0bf0FKno4GnHRrCxLiM5ndMf4wsbj8QGvKSIiarxj87qCKH+piGjblsIZfa+6pmPxSUYUiQtrKvpeDRZdZlR2OUjVk5YO5+/V0LNKtA6u/BGR5fStm5rK5io6yAsuOgLbNZ68aOiyb10dcMF33XIzRAfFkK6rwrYz3YFoxV85YlxTn/DAvfdA9OPnNyDaYgWOxMOIgg/H/qSlJxkREfg0y5KKrmdziL70pS+H6MXzF2+68p/7/oDvCbettqWjB8NEFc3whnOrL66iT8ipj9w9OXWzZUHfi7uECltWRBQFD+V0+CCjCyvzRMOczamazfHKhyPqTyYbmxDdriZ8YV/7R/8YRKdBF3bz3S+F6OaTicfRzB7FMAULrCdPn3qai97a3oZo1lI9axZfGY9oEdGmqugcR8wiqKPjeS7fsYhEJxzYHVU1Ve+Ce7oM53sRGf5gcYHTxXxAvU2WmmLMpzSejsf7VzF7FUE3vK4SVaXGie4dtzwA0aeeegiix+6k/uQn/tU/4wubPv4rEJ1NLkD0yBqtO5qKWmVELOV4S1saex577DGIXrx4kaMl1uHTp89CdGllFaKDCc27/up3vgqiEXH8+FGIliXdk+lXnoTobTffBNGIaNspRCdf8hqI3nX3nRDdmhzjoi9cOA7RO2+l+fm0OQHRsqQqWg4TC+cG+8m1k/St2zE9yk88dJqL/vXfeC9E/8I3vQyidY1bKFhu3ibuyXsepi767JR60V1rR/vvzNYWLZci4tL6FkR5UbO5RTOr48eoBkbEhQuXILpx6SIWTX3CCLeVeLiMiBMn6cqnU2rUwxE96+kstVTDraHhgK68DTo2i8RYPpvTtS0tLUG0wTVLjTd8Gx9lpGZHU7zsLOjC1tcvctED3HeqcOE9xxVNYtOVp5qpeIYXxjOrAieEEdHMqex/84u/TQefoO2Csy3NuyJiUFId5p2KlvfAsYrmuEMSEQPcs62wYda4Zhkvr3HRS0E3LX/mjtXdDze3aD6Z3Nus5zT5b3H7PUqshLiR8fjZxDT45BJNg4dYwU8eobno6XM0e4+IzQ26tvEqnfzPfc9foTMnVoHxxatHIPrDP/C3Ifri+14A0e/9q/81RH/mZ3+GL2yY2ovDPfLIFu9Ktbj9EhEZLn55v2s2pUc5wrXtn/r2b+cLG+HIMsY7dvQozU/e9ta3ctG/+p9+FaJ/52//LYj+bz/yDyH64//sP3LR+ewYRL/5DpoJZBXu7eCjbFsaGiKiWVxPmrYdjXHTFTt/7t4j4vhNtMaMnXN0chzKL11KdFb85uuRR2j7cTCjhzWvcEsq9YpzGWeb9YT2bGczmp+vrFAnGYld1VhaoVa/uU7D1uYG3bHkaJtaZeILixFdNq9oImKyQ83n+Jhu6bSik4/LRNF1RVfOq/IBtvq8pEbdJrc+cWmc2L3E93FNnVqpzbCardOq/IEh3fA21VlVuKgZjenCKkwPyHnrkruqiDajP5jimiX1npFLjhb7jAwrUtXQ/VzKqfIn83Zyfh2IKRMNnjvH9f6zkNgw47L51AXfcHxYvIWSpyphAs9ysT/hR9ltHUtL5o+lmT/W4/rMH9urm0tm/liX+WNd5o/1+4PLH+v9fO9r1323Ze8/zR/rMn+sy/yxrmszfyzJ/LEe5o/1/oH5Yx1Xkz+2a1EWGeePRQTnj+1alEVm/liX+WNdhyR/7APxw5f/+we+7+s4f2xR5tguzh/b2toxf6zL/LGuGzJ/bK+Nvobw+c0f2/tJ7wLzmQ/NH+tj/thl5ec+f9b5Yz2ea/7Yop2Nuu/dhPljXddv/tiH4rv3/nNv9MD5Y7ufHzh5LA6UP7b3E/PHug5h/ljb1r35Y5c/XJQ/tvs554/t1dvVmz/WZf5Yn4PnjwWmkC1a0Vz+HPLHJjtz88e6zB/rOfaazB+bzmvzx7rMH+sp+frJH0vvxUuSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEm6YfgDZJIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSdIh4g+QSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSYeIP0AmSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkHSL+AJkkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZJ0iPgDZJIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSdIh4g+QSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSYdIWVWzfR9lWQsHNE0D0SzLINq2NV9N09DhrCjpx9SGBZ05zxM/xDaZ7NDheMf45LPZlIvmW5qXJUQHgwFEmyrxOAo8vGroe9V1RWcuhljy/jq5H97woiggur09gWjb0pkjoprNIVoO6Z60QY+SW1ZSy3UYT57ndMeynOpYRGTYrvmWPu+mExB9yYkjXPT73vd7EB1M6Fm/5t7bIfrCm49B9EUvuhevK+55wT0QvXjpAkT/2j/7BTp2lqgn3IdmGTdbqt7cF0Wqr+OakGOzne5QD7y1sXXTlf/c9wdNy/Uf2w5edl0nOqsMv1ebuqMQ647dexVD6r0joglqtnPqvyNv6cLyPPGt2oyKLkq6YzxU87gTEWdP09Dz0Q8/BNEJVsIv+4qXQ7TiES/1OKaTDYiWgxWIDk++kIveHpyEaHHhfXg0XfaZM+e56LamxjUYUk1o6oWNOsuyfSP1vn+ub2/yhXGf0ARddoujbdMkegyetpUlNa45Tur4zDxJiIjIcWnAIw/2otgfREQUBU1CChyY5jNqtrOGhryIGLRrEH3sE++H6NET1LJWT94M0Sw7xRc2fN5bILrz8G9DtJifgWg+oHYXEROcWZW4Ktna3j8679UGVcI2mgpn6LfcditE144chWiBjTpP1dG6pnsSNTZMvN+8wIyIoqTRZTalNWY1w1kEFxyRNfS9qupq5pP4rZvEQN80dPjRo1QTHn38MxB95Stfw0W/8nXUMNvTvwvRoqVaxF8qw/45ItY3TkN0tHo/Hx4R//Sf/lTv50ePLPGBLT6vb/u2b4PohXPnIPplX/rlXPR0SjV8sr0N0U996hMQfeWrXw3R9Q2as0XExz/+cYj+uT/3XRD9n//BP4LoYLzKRfN2wXhMT/OlL34pRH/jXTTuRMQqNr0c+4Q//R3fAtEHP3MJoucv0KI7Il7xqldA9Lab/+9U9IP0KH/4H/0wF33TTfS8ZjNqOxk+ypo3Z1IzvgaHYy66xQ68nifmXVlGs4jzLdWi8ZyGvF/8xV/konmkb3ELZZofg+iwXadyU1uyGc+iM35YNJhvzRNV4e6774Jo3de9X/7wxNFjcOzOTnK/l7qjEvf2Jzj5KXCmeuxoohe9Caf3a2t0+OnTNANfWk0U/Se/49shOsOJwNY6rcoHN9/JRfOO1nf/9b9OB+N08ZMf/jBEX/0K6p8jYnuLFnoRUeFaD5YtOa86IoqSVtY8z6153Y3XnFyyj0YjiPIGy8alixD9rd95Dxe9vkF7LIPhGKJ//wd/CKL/zXf/FS56+zGatmXv/UmI5rOLfHLAbyEjIls8nmbRDHAduL5O05s6OZbjrmyDjZpfTk2muPKNKAu6LY899TRE7ztJA/1gTCvfap4YWWa4+B3g67zlFeqiR8uJBVHgPbl0iZ41TwP4YdVVYuGc44XxJt8Ml1orOCBGRIuvQ6Y4Y2yxkx0OE/vvMzx5gfekxXdA/NqXJ8kR0eKSn9+pzXHRzW0nIi5t0fda36SFc/EAvSHNzjzORXPuAdfwBu/JDLek+GFFRCT6SbrhXL2jSNQEfonZZnRhnBSR41u1RGpBMikIbym/Kky9Fkh8L15P8XZZlXqxW+BNa7ia8YwQLyxL/t9GJmcCizUtV+D9F2b+WJg/tsANmT92RTGd2aP5Y13mj3WZP9brDzB/rPfzvUll+2Zfe/9p/liX+WNd5o/1uRbzx7rMH0ue2fyxXuaPdV1N/tiuRVlknD8WEak3ORGLs8jMH+syf6zrEOaPrW+c5vyxRZljuzh/7Mzps+aPdZk/1nVD5o9F/MPL/7W52dMbf37zx/Z+0ps/dvlD88d6mT/W/fwA+WOXPdf8sYUZZX3f3vyxrhsjf2xl+YrcpwPnj+1+fuDksThQ/tjeT8wf6yv60OWPFWXemz92+cNF+WO7n3P+2F79uWTmj3WYP9Z1NfljgSlki/LHLn8OCTZtm5k/1hM1f6wbvSbzx5qmMn+sp2jzx7qun/yx1KVIkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJuoH4A2SSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEnSIeIPkEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmHiD9AJkmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJB0i/gCZJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSdIj4A2SSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEnSIVJ2P8rzng+fpbZtr+Jiom0biGZZBtGmqiBaZwVEB4MBX1gEFT2r5hAdD0cQbfFLRUSB11bNqejI6QfmymHiW89mM4hmeE+GwyFE67qGaI6XHRFFzjeNKmFRUE3gGhgR5YBaR8ZX3tCFcdtJ3pO2pprQYtGJMzfUsiKiwCs/NqKacOvKEkTXN9a56HvvuQOi/7c3vgait508CdHjR49AdGPzAl/Y9vYORXcoemlKlTBdEzBaN9ioMzp5sg41we364G1nPB5D9NSpp++58p/d08PhoxF10bPpFKJFlhguuYNvsO3Ma3pYXBEGWeJxZRn1/9MZfesSu/eVET2siGipmkSOD6utqXVsbNBlR8SHP3geomsrdOWveuUDEJ1vUD/58Gc+wxe2Hb8M0Re/4e10cHURgsXgOBd95Aj1dRfnL4To0uQRiD715FNc9HBINzzLsQ5zLbqyeez75w72zxHBM9kWyx6OqGU1qYZZ44Cbt3TysqROgc9cFokLy3EWXWA0tTRIDGplSd3svKI+4ZOfehSin/pooseYVtQJf83XvxqiFzc3IHrTS+nYPEvMu3KcixYnqdlWs9sgOtz8KBdd4OPKccybTWmmmuMMJM9yrkera2sQPX+Bpm2jAheYPGhFFDy94dkTrkoG+KAjoppTb5YnvhedOcNGHREtDtYZtuuspWPrCdWTSYMr34gY0BTlkU9+BKLLJ26lE+OKJiKqlnqM+qY30MFnfxeCbWDbSfWikxnV4eUiuQ0Si/rZLLWZsI494XFstseOHoXoZmqR2OJtWVlZhmhd0R3b3NyG6NbOhC9sOqcevsJtpemUmvzOLLGPMcT11Ob6Jh37cmy2qYa5tUUnX12iDQHei5hM6XFcukgz/4g4f+EcRIdD6oSrimYRq0dXuOgKdy95l6/AqRF2z1Gk5qIlLzJzGh1y7N6TW8Vcg480WxBdLamObQX1NhHBd+XL76UbPsGGuZzTg05NMRJrhxz3RWvsbTY3E2WPx6tU9DNjx7T7YYZVdJQaT2vcqWgb+tZHj52A6HRO3/qWO+7iCxtQXxXb29Qd3fWCuyH6pV/xFVw019GlZRrU8hGu1HYS/WSd3wTRIc67IqjoV77sZRB97WteiWeOX//wp/kPuKtsFu+2tYk3DjGZ0Fh/8eIliL7znb8E0Xe84xchWqd60QE+jq11mjvt4Eh95BjNyiJiaUzNY4QX9uQT3S3cZ/zWb/4mF/2B99Es+s9hsz735CMQ5ZG6LBO9aNMsHNaapuG5KK/jstRQzm856x0ab7e2aFAb4CvOSL10u/nmmyGa44g5HtA89ugtdOaIuPWWWyDKrb7F6U2TmoHX+L34vcBR3H6/sE7jToXTgIgoC+wkcR+jrunkZ0/TBDsiGtyMGPJEF7dfEsdG/OzP/xpEuXHxqyto8hFRphIAZtjhJF5nY4/xvT+X2Jx/1Wvo/WkxoFb//T9Jw9bf+yraYImI1YzG07rlXW46c2Ibukzsd23irlSNZfNLzOSLXd6q4/QY3n4veB2HW7KRemvMiSItbjBmV7dKLLDopjn42+qIGGPqwqSmEZMTYHhuv7aa2Ezgd2qnzpyGaI03PNVXRftBKwIAACAASURBVJg/tqBwiJk/1nXN5o9dcZ7O4Gv+WN+x5o/tZ/5Yrz/A/LHez++54l/7Oo1n/mn+WJf5Y13mj3Vds/lj+5g/ljyz+WO9zB/rOflV5I/tWpRFltyseDZLzEVZZOaPdZk/1nUI88cms5rzx3hh3Jc/trM3av5Yl/ljXTdk/thevblkn9/8sSs+6X1Wn/vQ/LFe5o91P3/W+WM9nl3+2KzzSez7vOxbWJk/1nX95o+9+8p/7o0eOH+sKIu4iuSxOFD+2N5PzB/rOoT5Y01T9SaTXP5w0Vx093Nex+3Vm+5i/liX+WNdV5M/FrhPsjd/7Hl9n0P+WNO05o91mT/WE70m88fqujF/rOfCzB/run7yx1JVVpIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSdINxB8gkyRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkg4Rf4BMkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJOkT8ATJJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiTpEPEHyCRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkqRDxB8gkyRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkg4Rf4BMkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJOkTKLCv2fVTXNRyQ5/SbZW3bQjTLEleTJf6igVhRDA5+5prOnDx8eXmJzo33MykrqOiyLSHKjyMajEZkGT1rvqPVnL41njiSv4s3n08ojBfWdir8c5Jh/S9yOjnXgyxLVEKW4/fKCmyYWBNKbHcRcduJ4xA9VlIVPXv2LERf/6L7uOiXvvglEF1bGUF0aXUZoi3Woq2tLbyuOHr0KERvv/UOiI7KIUTrLNFs5xU+LwxmOX3ttknUBO6EuSfMsLMqBlSLZrMK/hkRbUNFF0M6eT6hb72yRA8rIir+XgX3ddSol8dU9Dw1qDXY6nO84eXgqorOaiy6oKLn0xlEP/Hb61z0cJn6hK983fMhevsXPQDRnYdPQ/SjH/w0XlfcdpS6owJHjxx7q6cee5SLPrK6CtGlNerey+MnqOhzP89FV/M5RFfWjkB0Vi28J1mWNVd2Vvv+WVX7u4j9Z2jolnLrmNV08tGIamBEjIbUJzTYCRcF9RgFzl6SE0K8JTHHo3l2Mxwk1gb1jOr/w488DdFHPkEP64H7buWiv+yb3wjRx3/nkxCd59RZcd8/r6lpRMSg3YDo2tFjEK2ndE82i1dy0ePJYxAtcco3xQ58Pqe2M59XPBOYTKcQHS/RSo0b5nCYGOj5WzcVfesBzru4yUfEvKXWwVPZtqEbXqVmmzxF4RVogXfs05+mRj3FJWBErG/TFP2lL6eVxWRC9/PIPbToiNTCuSipEk6P0MmXZjSUN9PEquTM2acgev/dNAPZtagulUWidWxvb0P0nrvugujFs+cgOsRaFBHrG1Q0j3rcJzSLZyARUWaJCzt3jr7XAJeBvGd17NgaF72JreOmEzSpm+3Q/UxOby6uX4JojgtUvqEXz9IM/PFhonpvbtL3uuUorsorGqxnM+r8I2KIq8iK+3+cWvFEdz5NzDGGY3qaNc7eea+4wFVepNbsf+tPvAGiP/Au2lZKbBGm9ntf91Lqoo/FZ7Bg3D9P75Dj0gCfNQ/kG5s0mYxUl9J7x575EBdEyR3yhms49oTdFxxXwPnJr77/I3hdMbqPdvle97rXQvStb/siiA5XEp1VMcCttiF963lN3VGN7S4iBvkpOvkEWz1OF2cl9TZVlWgeJS4NIqJNTIUXRqczWlZERIvt+sf+yY9C9JFHHoLomQvUMI8sr/CF8YbAyjJVsze/9uUQfcX9J7noH/nJX4Uo37GnnqI6dvo0DfQR8Rf/r/8PiI5//R9BtLpIc+wMq1CeJ2pgHgubbR4DXmNOJ7iExC3ZiDh/4QJEbz9CqxLGrxkjYrxE1WyKc6eVNarhTcuzzcTLviefojVmgxteRUH95IzfUUaMsIdfO0LfenKa1nE5Pg+uRZGaGzU4WA+xB37iyUSzPYFvEnkWPcRd0/F4zEU//TS1jpUVmvwkloElVcIqNflJbCvh0qCp6Z5MU4kJv/+hj0L0Q5iZwK8C55i3EBFVRXW44rchOOTlOc1F89Rb+FlBHQ4nRfDsPZGtkdroKHCiyydvcXHQphJ3eExssUfhC+MlZERES8+rxSraVPw2JLXpOqc5IS8hB9hZ4W5ujFIb0Uu4mVDmuCWLZ+6+MjZ/LML8sQVF34j5Y3sdIJfM/LEu88e6zB/r+i+WP9Zr33b03n+aP9Zl/liX+WNd12b+WJf5Y2H+WB/zx7q+oPljuxZlkXH+WKRmArsWZZGZP9YTNX+s4xDmj505+xTnj3Et4vyxshiaP9Zl/ljXDZk/tlfvW7DPc/7Ynk96J7qXPzR/rD9s/ljn8wPkjz3jOeaPLdopavo6PfPHum6M/LFZtbn3nwfOH9v9/MDJY3Gg/LG9n5g/1nUI88fyvOzNH7v84aI15u7nycyfy3pzycwf6zJ/rOtq8scCl2N788de3fd5J3/smfXRiRPHzR/rKdr8sY5rM38sy8wfe84XZv5Y1zWVP5Z6PJIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZJuIP4AmSRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJknSI+ANkkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJ0iHiD5BJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJh4g/QCZJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiQdIv4AmSRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJknSI+ANkkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJ0iFSZlnd+TCDA5ro/v2eI3M8tqXo7tVAtG3p59KGwyGeu4JY0zZ4bLQtfeumossuypIuq5pz0bOdCUTzvKDogKJRJ741h3P89brBYADRFmvRfJ64J6MxnbypW4hmOUXLnB5WRGRYRauGqlnb0B1rgi6sbVJVtMFvjW1ngO1ymLon0+0tig5HEB2NKHrT0SNc9JHlJYgur4wh+vFPfhKi9z3/BRC99bbb+MK2d3Yg+tH3/R5EmwabfElfOSLahppPllFNaFuqRUlcSQssOsuos5rN6Es99eST8M+IyHMqejxahuj25jZEcxwaIqLGvq6uKHry2HGIrh2h1tGsHMPriiyjdr3+5MMQLQd07ObGJS76yDK1+hxnEYOLVEXHg8Rvqt6C3dHDD9K3XsFaVOPQ8Nq7buELO378KESHOQ1588kUor/yC/8nF50P6J58/R/7WogOjlB3tN3iDCR4shlVTeNpVS3sbqqqKffPu654dtNpYo7BExi+7MEI56I4A4kInE7GEE8+HOK8C3sb7IAjUqPDEFsWH1unpjc769QJn3+IGuatx6l7f+MDd3LRo5pu6W033QTRT/z6uyD6ry/+KES/+du/iy9sPt2A6G/9Jyr6zV/xpRA9cRONOxFxfp3qaFn+LkSzgueT1JVFROCAy/Pk06dPQ3R1idcsiSo6q+jKV3imOqZ7wrOXiJjszKjolRWINtiXzed05ogY4UwA10Px9KNnIbp5lh70bXfejNcVX/3Hadh67Pc/ANHTl6i3SW1jxACnfNPZRYiuLNGaJSufT2ceJga1i5d+A6JLYyp616JevEl14NMJXdvq6ipENy5chOgkNZRXuCCqtqiGT2a0Fpvj/GR7QsdGRFHQiNvirtTyMq5ZJrQkj4g5rqcuXbxIJ9+m1jFJfethQROYEydOQHSGW0NVTY8yMaOLuP/+F0M0m5+jC5tSTcgTjSNmWM2KgnqcDHd+2GDAu6ZRV3RL8wI34rBPwG3RiIgMv9YUb+l8REvjkqfvEXNcyv3S+z4F0TtedwyiJ1p60G2L42VEi13dGGfgVUOj0uZGoo6eXOXRofeOffZD3ttJLoga3mrG+eT589RsV1aoF73n+Xfxha3jQP/SF78Eog3X/yJxT2bYp+QZNz1q9TyyRESOHXg1pxo+w9FhMPz/s/ffgZqcZ2H3f83MU07fs11a9S433LtBxtiYYjp5Cc0xPyBgCAR+BF4IBAg4AQIEEkjihNBNtSkG27hiZGNbtiVbkq1i9dVqV1ptO3v6U2bm/WPt1dkzz/ne0sqC1Z7v5y/tXGeee56Zu8/lxzRJ5nlsRJRDmt5HBL/T6IxB80k8jhI74eUl2g1eWKLxtNenc4fj1OQjooVLhxpHln0HHoLoR6+/gYsucWe0xOlNf0g94fHj81z0/ffR3v4Fr/5ROvkdvwZB7iWT+xiT6ye6x9aGVnBmNYZ7gIk9qYgcT5/qUH9U4CovObPiGeMvvOGn6cLGqAb/l9/8PYjedc9deF2JGfjKKjW9c3btgeiB/am+CHuMwTL2k7hSqxZoX2hsKvH+aGWZvnWGYzGv4/qpl93j2Jv18IV1jbOIGgfEiMB3s5HhxItfCtd42fwaPSIC34bw67yFVeqCJ/H1aESsJFbWVPSOSZqBf2rfHBf9hRfRHKO/QhfW79OahTeiq9Ri6lNHqHGV+KwT9SS1jMO8huAuOMeXfVGcfmZCRBQtHHr4uvl9NBccUeMqMcMxMcM5NjfbiJiZmYYoryyqDF9s9XEPHLezImJhgf5gGrvoxPRmsP6y+yN2480faxZt/ljjw5+c+WNrNXPJzB9rMn+syfyxkc6Q/LGR8jyPNd3O2ney5o81mT/WZP5Y05mZPzaK+WPmj41g/ljTE5o/dsLGWWSPK3/ss3+yQXUyf6zJ/LGmTZI/NnlKaJXzx3hlwLkiVVWZP9Zk/ljTWZk/ttbIvI/Pb/7Yo88oM39s9OnmjzWOn1b+2OdijzV/bIMlUjVqB8n8saazI39s3bz3tPPHys8mI5128licRv7Y2iPmj42Ibr78sbKq1uSPnZI5duI/1uaPre1tTxxP5Y+tNeKxmj/WZP5Y06POHxvdvGEpt1H+2MnjkD82Pt41f2xU0eaPNaJnZP5YWVbmj41g/ljDkyh/LNV5SZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSTqL+ANkkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJ0ibiD5BJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJm4g/QCZJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRtIv4AmSRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkrSJ+ANkkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJ0ibSKst63aGiwDPW//mpMjy1rPhqKjy/wCurE0XTT60VeeKH2LIWFT2sBhDt1G2ItltjXPTKygqd3qHnUQ/phlcllxyBNSHL6Y4Ph/TpGT6sVqtF4dQ9yfDT65ruWFknqiifnmEVrfDDuQJnqSrKYY4WFX2prVumuOg2fq+ioMJz7E8Ozc1x0fjZkeGnP+1pT6FPLqjZRjWkaMTB+x+A6DUv+SKIPvO5L4DoD73xL7joCHocWUa3rKqw/mc8NnD3H+WQblpZUo/R7nQgeu9998E/I2KAH84dTlbgqFRS5x8RnYkuRCfGJyG6+1KqolsveipEy9U+X1iOdbhoT0N0ZZV64MlsX6LojKpZC0eW2Unqjq75qnO46LHuBBWNzbo9oLZz24c+DdHuNqoGEbG0MAfRj33yHRBdXqULO/AQtZ2I2DVLdfiv/vCtEH3a854N0XrAXULUOAmpcWDKNx5t86JYN1Kv+ydPEiI1MPEsYVD1INoqEtObsQ7NCSe2bIfo+Pbz6aPxW68e3o/XFfnKIn443TIeWVp54p7sXp6B6AP1ETp3eitEjxx4mIvO56gj7WMNvvTCCyHavXQLRKt+Yi76jr98O0QX545D9H1/+jaIvurbvpaLnp2lSri6tApRbnpFe928a7AumuEMnBc155xDo8NtA+oG253E5Gd1QK2+M6TTW7gMzHFAjIgcVwddnDtlONFt4cQpIqqc/qDsY/QYfa+pLo2YF21LrEqKpXmI7ty5G6K3feSjEP3E3/05F/2iV30DRFfnqBe9/sZPQvSF17wCouMT1NFFxN37aH7z8laimkUENj4yxL2IqSmabfYHVIuWlpa56P6QGuZ4l5pegQMTD2oPPEBrwIgoh7h7g+cOsKcbb9MsNyJyXAZmWPjcHI22yW0l7v97KzR2DEuqwMsrVBOOHp3D64rt23dAdHKCbykvq7nkxD0Z4siS+GSMFjhni4gCl/wVdgcF17FUT8JbcRMV9aKrPSp6HLdzIyJqOv3Wh2nxOzWk8XTIzTpZUXC/qwpqe9xZHT2e6EUvy+mmjZyBnDzI++dl6r1AgVOvNtbxzgRtsNx1221UcJUYECfOo9XW7XffCdGdK9TbLKc2ol/00pdBtDGLPjXaoZlVr/FKaJ3lJVpZBO7yRY2bThmt8oYrS/TJEakLjwz3ncqNpxlZ6nEEfvLRY3TH5lK73KCT6soK3L0c4nuxgwcPQrQ3TLySqHGbZAUHel6VPPzgg1z0ji2zEO0P6Z7MPPUlEB1+4q8hyj1w4PZ7luWtFjXMxcUF+mjcK4tUNfvoJ26EaH98D0QXFhNjx8wUtuvlQxD9o794J0Q//rGPQXTLjm18Ybu374Lo//k9Wuj92+/7Xoj+0q/8Jhe90qfdhnNmxyF628dugGi2jUaW5M5nhUv+HOdtOEeILBK7fN0u7VTky7QRx99rfCzxnr0scS+ips6K9XHs6KTeqQ3x9BbOsVstup/f/CXU0UXEG9/29xDt4Mvul37BxRC9YCrx1qwK2pUd4hyDx44cu+iySrw1u+FWWnfkie0CTB5I/b8BtnCXj2sCLyxKzNYouFWnpsk1XliB+wVVqrPiLJREPhJuvySXYlu20O59p0WVsMQ3RDyPTaaCtFr0BzwrS7yPa9zPm2+5Y90R88eazB9repLmj63VTAYzf6zJ/LERzB8bGcfoP1n+2EjrUsjW/tP8sSbzx5rMH2s6M/PHRnyU+WNh/tgI5o81PaH5Yyds1AD5zVdEcP7YCRstbcwfazJ/rGmT5I99wakhzh877cyxE8wfazJ/rOmszB9ba2SV+SfOHzt50PyxDco2f+zk8c8m7ZxG/thJjzV/bKOMspGvAMwfazo78seK7JT6fNr5YyeOn3byWJxe/tiaI+aPNW3C/LEq6pHb7ycPbpQ/duI454+dshwatW9m/liT+WNNjyd/LDCFbKP8sZPHIX+s2x03f6zJ/LGmMyl/bLg2ZP7YiA83f6wZffLkjz3aXQ9JkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJZwF/gEySJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEnaRPwBMkmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJGkT8QfIJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSpE3EHyCTJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSNhF/gEySJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEnaRPwBMkmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJGkTaRXt9b9BVg77cEKWZRDN6xZE2+02X01VDenD8wKjFUQHA/pSK706cWEDurB24x6eUnRVQjSrEkV3Oh2IDod0YVWL7klR0KOMiLymP6hL+vDEJ+d0x/qriU/utMcgWuHXKlpUi7pjdLcjIsebVtZ45fis64rOzbLEbwUW2LiykirhZJea7Rg+rIjo4B8UQXes26ai55dWuOgDDx6E6OVXXgrRrKCiP3HzTRC96Lzz+MIuuugSiK72qdk+9MCDEM3KZS46D6rhVVA1qwK7I6yiEdEqsGi63xFYi47NHcGTM/xnohdttejKcqzAZdCjjIit27ZBdNu2HRDdftFldGHDJSp4uIDXFXNHFyG6ukLR7vg4RFemzuGiFxeOQvSy3VsgWrVWITozO8lF5wOK/tnvvh2ie+epdXz1M/ZA9PhB+soRUS1PQ/ScndT0fuQ/3wLRl73oGVz031x7O0Sfc/kuiPbrT0N0ZrzLRR9eoR6+W9MNrzYe1KqyXNeo101ca/zkSE1RuJscm6L5SbeVmGOcd8FFEN121UshWmf04Tl24CvbqS+KiPlj1KUM5qmLLhZppG4VqelNhyYwX/1dr4Lo8iHqJ6sV7BEiigFd22euuw6iVz6Pmt5CQY/jZ37qDXxhV19Kc4zfe/OdEP32r6GR+o/+6x9y0V/5b74JoiXONpeXqQNvLkjXynj9GbGMw9aRQ9QJT09RZ7U6TNST8S4NPePj2Cdsp/nkJE4hImL54cMQbQ0fhmiF69PAyWREFDmtO8plmh0NetT5T0zTHcuLRC968JZ7IdrDXY4rd9CQV+2Z5aJz/GH36z/2UYjOH5+H6Pv+5u8g+oqv/mq+MF5OJSpCRDQn1p+THE/LkppPnlOzXlykcWe1n2iYiel9TtE+7vykpO5JRZWw06Ya3uv1INoqqO1ERLdLf8DDcQs34qamJ7jo1RXeYKSbtoRjRwvbXY47P5G6Jztn6XsVeMd4my4iiiFdW6dFA1PJW7L4rcvkNBjvGW81BO4f9gepzQRstrzLx3uTK7gbHBHHl45DlFcGvHCoS9xJxm2K5Ok1bjBys73/EI07EfHcEm/ayA78cwe74/S9duzYyUUfnqO+bmycZiDnDGjKd9HuKYg+e2uixzg2oJu2fZK+11VPuQqi7clELzq//z6IfvrefRB94Re/HKLJEW+qSzec36XUJYXzZVpCZqkXFhV+eETg2BLDjbdGx7Evig2q/0mrOFiPj9PC4bwtsxBdWkg0Wx56utjhLOKg1hlLrNmHeLcnJ2i03TFNDfO++2luHxFLi9SBzy/RPZlonwvRc3fS5ky5eDdfWL7xkj8vMn4lNzW9FaKplXHs2kWLmoXDtOl6BOcnPBZHRI3XdssdtP24ayftSuU5VbKF1Puj8zv0vR4+TLXov/z3N0L0W77hNVz07/z5WyF68MH9EN0yiTsV2D+n56L4vqPCGePUOA1bg9QWygDnbR3shMfa9CgHqW/NdfjCPfRGo8J1R7fFS4PEqps72QrfOE/jvGsmlY+RZXTDee1w2W7q3s/DgT5SexEDvGkV9jZD/Og8EgP9g/NUh4sO3VLeaivwfXQkc29wsB4McPulwOQB7BAisc5LvD/ltpOGZWe4A8MDZpbaLti7dy9EV1dpp6Ks6HHwZlpijhtR4yt+fhwDnp83nlV7Yv3c1fyxERdm/ljDkzR/bK1mLpn5Y03mjzWZPzbSGZM/NkKn04lYPfWfn2X+WJP5Y03mjzWdmfljTeaPhfljo5g/1vSE5o+dsFEWGeePxaMZ6TfOIjN/rMn8saZNmD+2tJLYs+V2l9jyqmvzx5rMH2s6K/PH1hq5Zff5zR9be2TNtx42D5o/NtImzx9rjzp+Ovljn/Po8scONY7EuuMj5yrmjzWdHflj6/552vljJ46fdvJYnFb+2Noj5o81bcL8sSzPR+aPnXyptNEruRPHOX9s7eeOfEtr/liT+WNNjyd/LDCFbKP8sZPHIX9sdXXV/LERRZs/1jz3jMwfK4rM/LEm88eankT5Y4/v4UmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEl6UvEHyCRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkqRNxB8gkyRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkjYRf4BMkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJ2kT8ATJJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRpE/EHyCRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkqRNxB8gkyRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkjaR1rCu1h3KsgJOqGP93596MkXLsuSrybIMomNjYxAdlgP65KBPzvOaLyzP6ZfaqpK+dUG3MwI/OSJyvCd8YS06Neoawyl1TTdtUA4hWhQdjPItixKfdavVgujKSo8+eZioosMhPetWi74X/9xfqhJiu4soqz5Ex7DsmYlxiI5321x0EXjl2Oq3TE1BdGVxnos++PBhiD7laVfTydh2du7cBdHZrdvwumLQp2q2b98BiPZ79Ch/9rX/got+wx/9DUTnVuhx1CUV3W4nGib3CVHSDed+sLdCF7auUTfb+OQk1fB2m2s4fal2qrPadi5VpIlzroQod++rc/dCtF5c4gt7xzuvh+gHbqRzV/DDE9UgosDvdcGeGYhevmcWoq9+7gVc9NYO1f8rL9wD0Rs+8TBEr72L7skzXzLBFzZV0Yh59NhRiJY04sXHb7uHi37a1VQJDy8uQnRqeRmieZEYO8YncFzDigTVrK7rdbPN5ORznQonRwVGZ7bOQvRcHFkiYuLSF0G0ndHIUh2hZz3Ae3BkLtFjLK/Q1z4+Tw+rWKI520Xnn89FF+dSJcQJeKIW/d/f/QAXfc9Rui3f+gLqMfbeS49j+/ZzIfrqVzyfL+xXf/sGiL7gBdSoP/LpgxB96sWJ6c1b/8dfQTTPqD8aG+tCdBUnP+WwLnCisLy0CtHZ2VmIbttFndXUzCQVHDE1QcPW9me8GKK7dlFNaBfYv0eMbzkG0cHyeRBdOH4covnc/Vx00aH5z1iLos990UUQzXI6t7dADzoicqwox/bRwmHb7u0QXUl0N/Fff/FXIHrB+RdD9I69dGGXX0zz2Lf/zTvxuhLPeqxDH37CRnsGyeG1LHEox12OGmfgS0uJYWvX7t0QHcfF7wpOb7KM6lhdJ/Z26or+YGmVBvp2h3bDpma2cNFPecpVEP3gtddCdBe3jpUVLrrIqZtdxW+d2NvBsWNxjjrJiDh0iMbEy/fQeLq6Qt3RWHPYzgAAIABJREFUai/ROlot6lKGQ1oa8M4Q72hVVaIrC+yE+wO6sLEuVVFsOhERQ/xiRUa1aGWFmm07td873qYpytZJbvV02XnOe7L4oCMKXHhkGfax+KyPLyxw0byjNbIinTw4wPrfW6VmGxH1gNYOOS6cA2/49oqa7a7dO/C6or5gJ0S3XvNMiFb30mbC8fd+KFE0VrPnT9K26uIHPwjRiRe+lIsertDjaOOrlh52Ry3cah70qFFHxAA3GCNigBWplW88uFR0YkTUOP+ZmqC1w0MHHoDocZz8bMOthohYWaUaXozTHRufoD2rXo86hIjI8J4s48zqwRVa75+P27kR8bu/9UcQfd33fDtEO+c+B6Lllc+FaH39T/KFLS7evnFoKbCLPvwwzd6r1Ou8ok0vp44cp1ctU3tof+aTn/o0F30ct4u3zNB8cg8W3ZmgmWqkFs4zs1shum/ffjyX5tiTEzT5iYjJSeoTxpZoFj2PszLe7xrHWVlErOLDKnBFz69u+/jeNiJWVqlPqHESfeVlF9K5iRlfYi12zdPoWbdwPjkcUD/Jr3giosJL5/nkEOfnf/yR27jokrMmcAY/rGgK3SqSNQEXv9iV8V7EsMIXoDw/j6jb/Af0sDLckuJMj0hVlRInhJ0O3TFOvMEbFhGJZQvmEwW/+OULi9SrRn7W3HbqMvk4aHAZ4CYhr7pxGRfJ/9vICmtChZ1Vovo3TjV/LMwfOy1P0vyxtZrDq/ljTeaPNZk/Nvr0MyN/bKR1Q8Daf5o/1mT+WJP5Y01nZv5Yk/ljYf7YKOaPNT2h+WMnbJRFxvljEcH5YydslEVm/liT+WNNmzB/bOH4cc4f490CHl7LsjR/bMQfmD/WcFbmj53yl6NyaT7P+WNrjozc0Tp50PyxkTZ5/tiOUcdPI3/spMeaP7ZRRtnIRDLzx5rOjvyx1qmdz2nnjw3KMh5P8licTv7Y2iPmjzVtmvyxR3YA6gvOG5k/tnhyN3WjXrSqIpU/tnbFPjKXzPyxJvPHmh5P/ljg29uN8sdOpkhB/tjSyrL5Y6NON39svTM1f6w2f2wU88fWexLljz2KzXhJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJZwt/gEySJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEnaRPwBMkmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJGkT8QfIJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSpE3EHyCTJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSNhF/gEySJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEnaRFp1Xa87lBX0q2R5TdFyWEG0KDK+mqJNH55lFB0OSojWQdHxdpsvbDgcQrQo6Nws6J5UdF0REVVONy3HogPPrUq6sKQCvzbXk2HZh+hgSNGIGBsbO+0LY2Wsbw7r5Dn+Zh+eXWEl5CpaRKrtVHRhk2NdiI51KNrCdhcRRUUVadc550L04IEHIHrpRRdy0QcOHYbow0coum3bVohOTU9CtKoTbefaf/ggRK+47HKIPve5z4fo3PISF/3T3/p1FP2jt0J0aQVrcJaohDnW0grbToW1qI1VdH27a3yJEvvZ4aBHH471f6LboXMjtuy5CqKt7gSVnNFlj42NQ/TobffzhR05uADRhWXqRYclDojY+UdqULvrgXmI3rnvOETf+bHEt+7UA4h++9MvgOiXPZOib/n4nRB94a5n8IU9eOgzEL3g4vMh+n9+9TkQ/f6f/jAXfcu9D0G0wp+pPW8XjsWtxMwqz2isr7GeNOeua0PZqfV33T8Twzx+eKSG44nZLRCdufTZXDTftHLhEESHvRWI3njrvRB9w/+6iS+M5yBZUI+xskLDVqt1G5d8/hZ6HK9+/i6IfvnTL4XoNc++jIs+cvMBiN50iG7KhXtWIZodOwrRC7bv5AubX6UR80Ofug+il523A6IL88tcdGdiGqLdMarAXRwxe33qn7Msq3Hq1cK20+vRh09N0ng6s52mixGx66KnQ3TrDN2xbJ6mwUUrMdu881YaO4YD6sCPL1APnC/TaBsRl116MUTHcLQNXO9XOMf4+EdupU+OuPsI9YTPv2wWov2DcxAd352Y3jz7WdSlvP0D+yB6wbnUlR04cBCie/acxxd25PAxiB6bO8Knx8YjAO+QRMQA59iDAdWT3jKdOzM9y0Uffpi+V75rO0THx2l6U+FEd3Ka5vYRMTFPf8ALom2zdNl3fIbmohGR1TRsXfPFr4DoPXfdgZ+c6KwGfRoTu2PUTy4v0tKgh5/cL7EvCtyni1hcouVSb5WKHscBMSLqROEkb9G8K8M1ezuxgRg5/gGWHAPsE7LUNl2W4XyyQ7c0r3CCj8uKiOCzX/2FL4PocHgDRIucVvRZtPC6InK6srqkaJ7TvOvO+xa55HKQ2JUF/T6NxUU78a3rjFruc557NUTvve4jEH2oR802P56Y/Jz3TNrbyY9Qj9G/i3Yq5pcSM/DtOB19CIe8bdvoW3/8htu56Cv20NAzOUMX1sGmN+xTHStTc4wy9TKlxL8Ybtx8WqkNgxa+QipSHQ6YOzYH0dkZ2mqIiBXcEJicpF1uHjuS71kqnPwfwsXvj/zgD0D0f//Kr3LRX/mSF0G0i29Dig7NQIqczi2fn7iw3du/5dQDh9aEthRtuqVLy9RF8+vRiNi5g5rtkd30quUYTup6K9SfRMTYGA09N91MHc6rv5Tmoj1849xNtbubb7qZTi9oYMpwllC0Eo+jHlBvVlbUdvrY0fFajPvASLX6Ct+k5DiUryzie5bU5k85pBt+Ae5oDYaJyX8L57J7pvD1U+BgjQ0zOfPnaTAraxpPHzhAr0cjosRWz/X77R+mafDTnkvL6kilcwywEla40Gthwxzitn9EDPgFKb7izDI8ObVw5g2xekjNttWihslbDUWemp8nXhpTuMQslES6RUqBTQ+/dNQcTrWOAm/4ELuyDGebqRoaGa7ZS/xePGDWjf2/wvwx88dOi/ljI5g/1mD+WJP5YyOin8f8sVHWpZCt/af5Y03mjzWZP9Z0ZuaPNZk/FuaPjWL+WNMTmj/22b/ZYNzkLcSI4PyxEzbaLTF/rMn8saZNmD925PAxzh/jqT/vkAyHQ/PHmswfazor88fWGplL9vnNH1t7ZOTbwJMHzR8baZPnj+0YdfyfMn9so4yyelRlNn+s6ezIH1v3z9POHyvLfjyO5LE4rfyxtUfMH2vaNPljLzj5X9nzf3VN/tgpmWOf/fAN8sdOHOf8sW1r/nvkq1Lzx5rMH2t6PPljgSlkG+WPrfQ/exw2f3r9vvljj5X5Y03/XPljdZabP9Zk/ljTkyh/7HE9HkmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJElPLv4AmSRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkrSJ+ANkkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJ0ibiD5BJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJm4g/QCZJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRtIv4AmSRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkrSJ+ANkkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJ0ibS2jK1Zd2hLMvghGpY0udVNQSXV3t8NfzhZVVBtMbr4i81NjmO1xXtTkFF13RhZUlXVhT0ySc+HoumKJacuCcRkeXJazvND8+CPrndGeMPr/B75Tn9rB7f8FaW+MoF37QcowMKZvQko9NK/FZgjk2vW9DpLazAW7ds46KnJroQXVlehegll14M0cXFRS66xip63969EN22fTtEZ6bXd4xrffqmT/OFveAFL4LopRdfBNEjR45CtF8NueiJqRmI/uL3fDNEf/g3/hCiQ+78IzJsenlQ62i1WhA9cuQIF83yjC5sWGIvit/64j2J1tGhr5Xqy5bmILj8qbshet8nb8WC41lT0xD9QO8YRK/G1sEDYkRcvIuq6PZtdEtv3n8QorcdmuOi5/oU/c1P7ofo9sE8RH/ix14N0T/543fhdcU3f8uzIFrh8FAMD0B0cXGBi961g3rC3soyRO87QA2zjjYX3erSHwwGOOXD0Lo5xrp/4rwpIjWLYDvOuwyiWWuSTy+x9RTcix6dg+gVk1MQXVqlkToipnBiNt6hCxu26NzVVWyWEfdWdPr/fu8hiP72+6mKfsuzL+Siv+p5F0P0je+9HqLHcGXxTc++BKKd6UQd3TpOM4GDS3TH7t5P96SVUYcQETM7cDwd0KA2OUb3ZH6e+tioy0gsWyh67Bh964vOOweiu8+/GMuN7naqSGVONTxfogtb7CVqwu/89k0QnVukdj05SROUrEh04IMeTUI6Xerrzh2jCvwvX/FMiO7Zcx5f2KGFeyF67e0PQvTyZ++A6G6sRRFx2cUXUPgfqWgeT7dv3QrRhV5iRV9k9KwH/cT0PmLDQZd3SCJieZlmEZO4hJwYo0o4NzfHRU9P00S326Z+MsdNp0RflPPUP3oDqv/dsQmIXnb1lRC94577uOhFHOtXl2mn7mUv+yKI3vtnf85F89ogw4nu5CTdk3G8Y7t378aS44XPfz5Eu0MamI4fn4NocjJZ4P5M0aaKxAvnxA4h7i5GRIZ7iFViu4xaR5FqHYFr9hL3u/KtNAPvdhKD2lSHKtLeGoeegsZi3iGpEv131LhdMD5BXVk1pJa3ktibj5/7uZ+H6Mj93kcOYj05fDgxnk5v2QnRK66mWfT2HTTbnJ6iBdFijTu2Ef3bboPo4MA+iI4X9LBmZujCIqIzjmuxCdqfuT2nDz905DgXXRQ0WO+Yo4H+gvOp7Qz7VAuzPLGtdGA/zaxi9PznkWn5Qwcf3ujES/bQhDAihjiUt3ETsIt7ILPbaTdsNTVn663ShdX4f0HU7dKDzlqJKd8VF9GCaPHGWyD64i96GUQ//re/zUV/+Ve+GKJj2E/2ccSscFSKvIPXFZ2JDUeWzsTE8uIKnJvxu8Lk2JFRNbvoWS+hk/c/AMEv/KKXctGrS9QnjOHG0X33Ui/6w9/9ryDaSy1ojs3TC6YaX7UcOkSbTsfnE5uu3/TVtF0cBVXCDlbRAU4If+iHf4jKTc0YeX6e43Ry2EuMp+WQzm+3qQJPbdyyIiIvEg2Tp+itwGkwLxJ5jp1qtgVeWImbxXlF52ZFYgaeD6n+D7GezG6hLcQ6qKNL4mpW48qirjG/JfXqKrGowdGhwofVHks8jhJ3G7ptGh36JT3KRPpLqo7miUQRfCmcU8vivige32safk2Z/OQWpmQM8cO5F+ULyzjJJHXTalxk1vgkm03H/LEwf2yjPzgb88fWat5888eazB9rMn9spDM2fywaKWRr/2n+WJP5Y03mjzWdmfljTeaPhfljo5g/1vSE5o+dsFEWWSJ/LFI5G5/7o5FHzR9rMn+saRPmjxVZK5E/hnWQd0jancL8sSbzx5rOyvyxtUZOLD+/+WNrj4zcITx50Pyxkcwfax4/jfyxNeHHlj+2UUbZ5NSI6YT5YyM+/KzIH1v3z9POHzuwf3+kkucheSxOK39s7RHzx5o2Y/5YMTYyf+zkwbX5Y2tv/YnjifyxtUZ1xuaPNZk/1vR48scCc3s2yh87eRzyx8phbf5Yk/ljIz78jMwfK7Lc/LFR55o/9tgu7IzKHzv9uy9JkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiTpSccfIJMkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZI2EX+ATJIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSdpE/AEySZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkaRPxB8gkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZKkTcQfIJMkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZI2EX+ATJIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSdpEWlumZ9YdqqoKTmgXHYjWdQ3RmapMXE5Fp+c5/Vza8SFd9mDYg2h3rMvXxd8Lg9Hp0B0ry8Q94W8dQWXzo+QvFREZ/kGGF1YUxWl/8tLSIl/Y7u07INrr0bPOMip6dXWZi86yjP8AFAWdm6gIqYc1htWs3W7TyfilOt0WF93v0w2fnBqH6PEFuuGT4xNc9OFjRyG6WlMlHAwGEH3ggQMQ3bp1O1/YkcPHIDoxRt+rO0ndUUFXfeIv6GmOdSch+l9+4HUQ/bHf+H0ueTgcQpTbTg8fx9JSomEybj08qHW6YxC96Lw9XPTwgXshOt6momNuCYL9iu7Yi7/ilXhd8ZY33wDRp05QFT0yR9W7i31RRNzzEA1Mdx+gD//aL7wUonvuTvTP77r3EES5TzgY1JX921/9IESfd8VOvrDpGWr1w6A7xvW7N8Bzgz86Lr/0XIi+9uu/GKI//z//gouenZmC6OHDcxBtzDEGa0PDsr82tu6fWeqnd+shjcd5h8bEVpseZV71IRoR5coCRFc+9WmI7r2Zepsd2FlNZTRcRsTFE9QT8uz9WedQfzLRTswxZqepS/mDT+2H6HKfbvj/ve4OLnrnJF35d3/DMyFaBw2IeQdveJ3oyn79DS+A6Df925shOjNDX+q+Bx7ioh86tgLR9uRWiPK6Y1DSHRuUQx6seUHE545NUl80vvMyLDcy7FPymr7XsE/jzsJn7k8UXa7Sh+OsbKyiSrh9+zQXvff+4xA9tkq96NIK9ZM/9eZPQPRZl5zHF/aaK+h5Deepx7h372GIPu05z+ai211abV3zYuqE330trTvmF+lBz0wnNhOGJQ31Y2PYvUfExq2rlWiVsdyjTnh8QFX0wO1UEy69mnrgSHU4xx68B6L3f/p6iF5w5dMhurhIs/eImJyktdjyMi15jh56GKIrK9Q/R0QPH8cH//EfIbp16yxEf+an/yMX/ZP/4ach2u9RTbjxLW+E6KEpqgl78CtHRJ1Rsz18/10QbbWoF83zxFDOM3DeJKxrnKniypejERF44RlO+WqcY/P+YUTkOd3So2NXQHRQ0ipvdiwxqK2sUMu96eZbINp6Ee739qhR81eOVEWq8Gnx9ks/sUaMh/beB9G6HnH+yYMFXvbMTOJxLPRodrR8Ac0Exi44B6IruN7vHElMg/NLL4Jodc9eiN5x+50QveQi2uWIiAP76domJ2YhuvcAjR2z51/ARfeWaMr3UPcSiJ6HnfDYDM1AilaijpbD1BsNrIerqxvuY9dl6pOxca0OaNq2dcc2iD70EHVlfazAETEzTXOMIXbg3PnPzKx/dbjOv/7e10O0/8b/A9G77roNoudfcDEX/TtvfRdE/813fTNEJxqvRNfC10eR2kGJ4WDD+j8c9LMcZyAHqdnWkZj8l7g0znAjeogtq64S05vJSdo43baF+v+ypBpeFLiZMJ94k9jCLfQ27mM/56lXUtE4ZkVEhWN9hnu2/aAPzypaVvM2RVKrRTt1/HaVd9cjog66J+WoOcZJvT7NrAbDRGfFDbcb9IpziJ0/v8HnVhnpOTZO6rBR9wb0niVSg1qO2QWX7qY3pFWW2NEaDKmq1DlVwnVb/etw7kHdTuyB8NPkV/xV6lkn4Nkl7u1kmHvDDzqZKBI49HAWSqtFVbSqaDcgEpkLUeGV86K8TCV6HD0+R2GcCiRu6eN7HDX+/0ryPKFMTXTXMX8szB/bwFmZP3bKZTRmO+aPNZk/1mT+2EhnbP5YNBrQ2n+aP9Zk/liT+WNNZ1L+2DqnPErzx8L8sVHMH2t6QvPHTtho9cH5Y5EarE9+/Gmca/5Yk/ljTWdl/tiwrDh/jNefnD/WKjrmjzWZP9Z0VuaPrTUyBejzmz+29sjIDLGTB80fG8n8sebx08gfO+nR5Y8tNI7EuuOLo17Kmz/WdHbkj62bkJx2/tiJ46edPBanlT+29oj5Y02bMH8sL0bnj508uFH+2InjnD92/pr/HvmO2PyxJvPHHqs1+WOje3JIIdtod/3kccgfq+va/LEm88eazsz8saLIzB9rMn9s1LlPmvyxxzWWSJIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSXpy8QfIJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSpE3EHyCTJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSNhF/gEySJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEnaRPwBMkmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJGkT8QfIJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSpE2ktbLSW3coz+lXyQaDFfq8qoZgnVV8NcN+iUUPILqyShc21i4gumvXLr6wsqQLKwr6cL5svttJ1ZBuaVnRZbe7Hf7wuqIPx2BUGO60WhBtFxSNiB7e0qygW1rVGZ6bKDoyOr3CG57XeE9y+uR2UDR5epRU9NatWyGK3ykiYnpqBqL9IT2s8clJiC5io46I6aktEK1qqgn37jsA0aWlJYjunKXLjoiJiTZE5+aOQ3RrsR2i7fExLrrCn5WcmqE7FliLMuzeI2I4HNLp2DA7Qd1ROaBPzvGfEZFneE+mpiB66PBBiI4dpkcZEeWd+yC6gDe8NTEB0WMHlyH63rd/kC/stoepcY13uxCdHIxDtDfoc9HLq/Q0Z/FxvPfaGyE6sw2rd8QX76GGObGNesJ3XP8ARIcF9Qk33L1+orXO9/38rRD9N990NUSvvJJmIONj9CgjNVj3+6sQ/eB734qfnOgxxiaoItUZNS7obYbDYVG0I9YMPfUpI3sWVAMjIrCzyoLuWH7XXRCtO9QhREQxoBte41T2GV/8DIi+58/eT+fOJOrJnQ8eguj4BHXgvQENW0uL9JUj4rIJ6lK+5rydEL11np71rXMLXPSRZeonf/nNd0D0/Gmq/09/9nOo4OTSoMKV2pDuWBX0rL/gaedwyd/5//tSiP7P36N7cuf9eyHKC6I8z4sC58m4FmO7duE0GLvBiChyqmbFA3dD9OE77oHoxAxNAyLiworuycN9urAtFX744WOJots0nj7tonMh+olDcxTdd5SirURndf3d1M1euZO+9de95vkQrSIxlPcHNDF7+qV0x976HlpuTW+hb/3wIeqfI6LOqXX0+onVVmy8/C0rWuVFRMkbAolzqRc9epTqSUTUOAc5f5YGpgmcgfd6VBOGVWKOsdrYfFvrHe94J0Rf9rIvhOiHPnI9Fz0/vwjRiUn61u9497shetEVl3PRnQ7tsXSwP1ntUSfcmqHqvX3rNr6wOqiiXPXUp0B0aYnuZ4XbLxGRJ/edNtZpUevJMronNbeNiMB9J97RrYK+1DC1NGjh47h1/zxEd26jLZTeSmIoL4f0rbvT1AkPca+43aHqneHmZETwDjrPF4clddGLNGRFRCwUtBarR9Xwkwe5nyxxMRURw8QOJIUTW7I4W6y3Uy2KiHIrLfm3bKG17e6jdD8fPjzHRU9NzUJ0tU+T/y/YTpsk77mFNiIi4vyLLoZop0MN854eVcKnzJ4H0emxxAuLqVHD1imrO+xyBhtfW6KCRgxw53PLNO1oLS/SCrSHs/fV1cRclPf2j85TJdwyPQ3RH/iu7+aiP3njJyH6jKc/FaK8if0t/+7nuOhf/IU3QPTYAg3W5+IrniFOdIthYvm5ZWLDmrBlYor3z1vt058kRMQcPuurrqTHsYh7IMvzc1z05BiNevytuCbUODQMUyPHGN7SbbPUT/JGRI1vZiOiwLeBRYsqUon9WIazzTr1Po8nq3XF80m6J6urifcCE1PU4QS+xNm2jab3112XWBDx69OCw/yoM3parSzRqHkNyW/SH2jT9kvROsxFR4mF59h2xmkJOUy1jiyxj4evKfG1b2LVgedGMqcip82EGpcGybUY50Xwy9k+Psqqxq3LSAxqFc7A8xrTY0rqE/JU2kONvWiNp/PLKX4pFqmsocMHqXHVOMdIJN6k6kmNTzMFL6xRtPljYf7YBs7K/LG1mrlk5o81mT/WZP7YSGdI/tjovzl19bH2n+aPNZk/1mT+WNOZmT826rPMHzN/bFTU/LGGJyx/7JEsqY2WVMkFEW/bnnB6WWTmj41g/ljDWZk/VucF54/hwjeRP1ZWA/PHmswfGxE9G/PH1hr5eu7zmz+29sia/LFh86D5YyOZP9Y8fhr5Yyc91vyxjTLKNri35o+td3bkj/VO3fR79PljCyOPn27yWJxW/tjaI+aPNW3C/LF6WI7MHzt5cKMdrRPHzR9rMn+s6Z8xfywwhWyj/LGTxyF/rNVqmT/WZP7YiNiZmT+WF+aPNZk/NiL65Mkfe1zZS5IkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZKeXPwBMkmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJGkT8QfIJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSpE3EHyCTJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSNhF/gEySJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEnaRPwBMkmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJGkT8QfIJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSpE2kNdbtrDs0GAzojLqGYFmVeCqdGxFZhh9e0oXlGX3ysKYLa7fbeF0xHA75D0Cr1TrtcyNi0OtDtN14fGtlNd2Uqkx+KXocVUXRPKfftivLCqJZhs8y9eGtvIBogecWReJh5UHXluEd4w/P+LJTvxXYLqgmFC36cL7hdStR9ACb7fJqD6LTk1MQ3b1rlosea9MtHVTUdj76sRsgOj09A9HDhxb4wp565eUQHWL9n19cgugk1sCI6E5NQLSNlbA91oXoS17wTC5934AuAAAgAElEQVT6/R/9OEQ7GVWkKqN7MhhSLarxnxHRHaPWwR8+OTkJ0aU+jSwRsfeOQ3Q6du+3HaJmu+8oVcJyQPczIloZdjhYT7ZSFYsoEwP9zi3jEG0VdEsv2bUdos97/pVc9AfuuQmiO86hK3/JF9OHz26/GKLf9zPvwuuKQUxD9Ff/5FaIJsaOIvE4eMpXDalPmFuhRp23Ep1VVVEtrXE8hWEry7IqTqlF6/7Jn5zEU9njn9kP0W6X7mekbtpDR+cg+icfP4rn0id321SLIuKi3bMULmgWvbxKdeyCnTu46K1jKxD9kldeAdGn9Y9BdKXeyUUXW6j//6//906IPrxIn/zdP0F90RW7cSEWceddNHZ0J+lx8FIsrxPT4PMvpNnRBI6Y1eNretxjDEoaO1ZWqBZNLtL97Nz5Sb6wdova9dIKffh5F54P0eUFrEYRs9M0Hl/co3vSH9Dkp1cl+oSVZVpF3rf/AEQv2kJD3q5LZiF6w2KiFh3p0YXdcnAZogff/CmIfuOXXshFP+sZvBajxrW8TK1+YZ4q8EXnbeMLyyNRkZI2Wj2X2O4iImqcJ9T0sDLcaijrxER3rDsG0VZBNXxijGaq41PU0R07RuNORAzxpn3Bs54F0RxXvq1OYker3aEq2u9RJcxwpba8Qv1JRHRw/lPjTt3EOD2OToce9MOHaSEWEd023ZOP/sP7IFrjqnxmOw2XETF/nBpmOaDW0ergthJuzmSpvZ0K1+wZ7mO0CtymS+2L1lj05NatED23Pgeigz71ohHBHUpWUw0vsD/J8Uu1cHMyIsohTn4GqxDN8IYPU/9fJKvYWWWjvtfJgwV2Vv0+TY0iYmx8N8bxwvhh4vI0Sz2OAc4xVnZRJaxwQfSBj9LSICK+5KXPg+gc9if94TxEk/+nNOWAmk+nSzu6s1updQxxGtDrJ98fcTwxuCz1NpwT1vjuKSLauHbujtFwPI6z9+3bqaO7b98DfGG9IX3lwTz1GP0+fevfftMfc9Ff9NJnQbSFQ8+WaapFb3/b27jo133Hd0L0Y9fSXtxrno79ScXvShJVcGVlwxu+srI6NU3Tm2PHqFEn367OL9Brhe3bcS22m3rg+26/jYueO3oEotu2buHTwdI87YG3U9ObmRmamPHD5FeB/MY5IuqaeoyVPs0xul0aT3PcDU5Vk8TuDEcr/NZFkWgdPP8ZYuF5Tvfkuo99hovujlEnzNP7x7OZnFw483yyHFLRN95LS56JnZclim7ReorfGvOaZZgnvzWNmAPcs8L3Wom3pwuppIgCG1cidYFTJtIzLzq9javXNl82bs5UOCuLVNNLzLGx6dSJpdjodcdJvNrixW8y52fuGM2i+borbLacWpNMjwlcd/MNT3xw42Tzx8L8sQ2dhfljazVzycwfazJ/rMn8sZHOkPyxkbpjnYjlU//5qD7c/LEm88eazB9r+ufKHxtRkPlj5o+NYv5Y0xOaP3bCaWeRcY9xwkZZZOaPNZk/1rQJ88eSqWX8Lp23wcuyNH+syfyxprMyf2ytkblkn9/8sbVHRu6pnjxo/thI5o81j59G/thJjzV/bKOMsrHxkZkG5o+td3bkj63752nnj504ftrJY3Fa+WNrj5g/1rQJ88fqPBuZP3by4Eb5YyeOc/7YKQWNWt6bP9Zk/tiIP3gc0cAUslPzx+rmcZj/tPLc/LERp5s/1rywMzJ/LMsy88dGFU1R88eazqj8sWSVlSRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJknT28AfIJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSpE3EHyCTJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSNhF/gEySJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEnaRPwBMkmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJGkT8QfIJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSpE3EHyCTJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSNpFWNRyuO1RXFZxQ1zVFo8TiEr93VmHRkWd8Op2KJfcHPT69KAqI8j1hg5LvWBQFXXpd4eOo8X6mbmdd019kGUX5nlRYdKIaRBRFC6L94QCivX7/tKMRUeIt7bbaEG1hNamq9S3xlHNTT6vVonuSt6gCL/VX6aPb9MkRMTUxCdFO0YHop++8G6JLPXqUEbE6oJu2Y3Icopfv2QXRheVliO7aMcUXhu0ySmz1BX6p+UMPc9GXTF8C0UFJNTzHy37dq1/MRV/7kY9DtAr69E6Hqhn3J51OO2Jw6j9PPb2k00vscNptatS3PHwEohGx7zg1vRbekxw7/zEc1bqtRC967o4tEH3VNVdT0eNjEL32H2/jondtpR6jiAWILi3OQ3RhYYmLfvGzvwCiDxx9AKLjXerKJjv0oH/zdc/lC+tPPBWir//lP4Void17C4fLSDWu+SWaHc1OUNFlmRi2LriIOqt779sPUZiBZFm2brZYnPrPQWrKVuMchSdtN9x0AKLdbpeLvu8Y3dJ7H6IOJ8+xKwuqCdjZRERMtHjKR7OIS2bpwsbGcAYSceUF1AmfO0Ej5tE2RbdvSXztyS30tN/4H54D0T/7y70Q/fubHoToLVT3IyJimnrRGucY5ZAex3CYeBxzR6n9zEzT7CjHqSxP/quqqjN6Xhl2ZXvvv5fOndkJ0bk7jkE0Ijpdmm0eX6VB7e8+QYPacqq3GjRW8WvNTlCH08NpQquVaB0zuOSpS5rAf+2XXgnRmw/RWHxVscIXtvs8Gll+8tc/BtG59sUQ/cN3Jlrm77+N5tjc//eHvKKnoWHQo2oQEYGnzy9QFT2h3R79Cek9EP4Duq6oJ2mmOrtllkse4KKeZ8mH5+ievO9974NoWSZm4FvwyocDaju/8Rv/A6KL89SfRMSRw9SbXXwxtZ3kJgkbH6O1w/ISrbt7Nd2Tfp9mqlWd2GpbWVmkC8N1R5FTDZ4aT2wXzB+nonkFOjd3HD+b2l2WmvOlwrhmx1OHuE0XEWOT0xDtLWBNwG26iSn65IhY7dHgMneEZuC8L4rBVCcZUeD5nQ61rD6Oxal96MTW0Mit4pMXu7pM93M8tSBaHFKHUw+p1Wc8XcRonajCiSnfwqGHILrlZc+D6M576dyIOIz1v8DvNX+cOv/nnncZF/3UV34JRCd30LZqvUpTlLKk0bYqE1M+3vmP1CylvfFct9NOVNEK28/YGNWTwIFpaprOLXBJHhGJCQ5uHC2v0g3/5A2f4IJf8sJnQ3T3zh0Q7XRoq+36Gz7JRX/kYzdC9N//h1+AaFlhj1Hwzn6ix5iamoDQ7Baa6LY7uP2SemvWwT3bDCvS1VdfBNG7b93GRa/MczeLS34ctnol9SfbttL9jIixNk9wcO4UVHSd/D/3wobL627eJCn4VSC/C0++7MYbPsT3Xp1x7AYjSp474bnNlz5r4fQ8IqKDH1/it+b30fywko+D/6A/pLHjgw9RH5tMANh1zjkQvX/v/RCdGd8N0eFSYqciNU3GeOKOUhX9wP1H+eQhfnriNT1msCQ78MRLZfxeVcZ5O6RIVVHG9Z9n4NyyIrnvhE+D98C5G0ziRJHAx/E4i07k3mAt4jfOVWNHy/yxMH9sw9PPwvyxtZoboeaPjWD+WIP5YyP9s+aPjfRI/VmXQrb2n+aPNZk/1mT+WNOZmT/WZP5YmD82ivljTU9o/tgJG2WRJSf/nD92wkZZZOaPNZk/1rQZ88fqgvPHNsoc+9yF8WXX5o81mT/WdFbmj601Mpfs85s/duqRke3uswfNHxvJ/LHm8dPIHzvp0eWPDRpHYt3xctTmlfljTWdH/lien7LAOe38sRPHTzt5LE4rf2ztEfPHmjZj/lhZj8wfO3lwbf7Y2hX4ieOcP7bWyHe45o81mT824vTHkT8WmEJ2av7YcvM45I+Vqd1e88eazB8beTbEnrj8sSoy88eazB/7vBf9T5k/9rhqhiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkqQnF3+ATJIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSdpE/AEySZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkaRPxB8gkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZKkTcQfIJMkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZI2EX+ATJIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSdpEWsNqsO5QntOvkg0GFUTrOqPSspKvJi8oWvfp9CpqiJYVXfZVVz0Fryvqmj488I6xdoHfOaLCK69qjOK5RZa47Drohpd4w+shFd3ptLloVrRbEM1b9OF5hje8xAcdkWMdbbfwwwd0P9v4ONpF4o5xReIautpb3wmstWX7GBd98623QfTY/CJEF1d7EG0VHS6aa8KRPn2vQ3fcA9Gn7NwO0WNL83xh48foylt42f2S2s7EeOJxHJvja6Oq0OnQhWV1osf48dd+NUR/8Q/fBlFueP1+H6MD+GdERCzB6dtKetZ1RZc2GNKFRcQwx5rQoVs6NTEB0Su3UJ/wjCvpS0VEK8MRc/EIRI8t0bm3732Qi15cmIHoi154MURX7l2FaG91yEW39q5ANJulCUyFXfS73vVhiN588zhf2H3Hbofoz34FTVH+w3vugmjFs5cInCZEgSPLgwepnvQGVIEjYhJreI5FD3vLG4bK/nhrIuKRtlnkp/RsWSSaLU/5soz6yQ/fj7OywRwXzROzTpda/QU7tkD0i553GUR37UzUk3aburI//LOPQfTqPbMQnZ5NDPRzc1TN5nCO8ZxL9kD03pI+OSKqId2WN/3vD0C0TdcVL5qi6HVzFI0ImtxERFBXNixpLrq8mmgdv/+mf4RoPXYhREu8sOA5Rp1zn4A9WRw6dAii191Ik4TeeV387Hh4/iGIzi3j6rWkGz4+kRg7hriyKHDtUGB3NNFOdOCX7KaecMsEVfGV+Q078Ii46vKLILp/7gBfWI7f+ld+9FUQnb+bvtR/eesNXPQAF4nzyzQD6Xap6KNzxyF6bmqlttqj9nHs6FE+PSLKDfoNniRERI5Nc3F8F0S/6pu/A6KdbqJ15Bl3OHRhX/kd3wPRY8epfx8MEj10hhe2vEL15Bu/4RshutpLdODzx2mRyPOAqqbe5uCD1A1GxDVf9DKIZjl1swUOes+Y2Q3R2W1UxyJi165tEH3g3Ksg+i+/+Vsg+vP/6T9x0VwTSqyiqcdFn5wlPjlabepFM9xMw3Vz5PigI9VsP3rzrRDtb52E6OwFND+JiLkF6mYnJ+nDuSfMalqf8u5iRAxK2i6LgsYOni9WyT1s3NvPRnXv2efWUJOTNItYWqJ5V0QMM6qELeyOqoqiNd5wfqcQEXlO96Q9Szsw2Y5zIPrsFz2Piz73mhdAdO8f/g2dvIU6ugncfoyIqqLBpVyhkaUzRuvTqk/TxeUV2vmJ0ft+p8hxfz7f+HEPholtpQy72X/3oz8J0X//kz8E0RJLPvfcxKB29eW0cbS88RZKRNx2O/Wxr//e13PRNe4rnXfeBXQufu1Xf/lXcNFve9u7IXr3XXdA9MqraaDnN0QZj3kRvd6GdbjXW23j9vvCArU7fm8bEQsLCxDlNt/hcSk1+c/4VSOevrxIc+zxcZr8t1o4IG68nDmBR+NhiQNiCxcdERV2Kfw0+XV2jq/Zk3OMxEDfwkeJ9X8CN3sjoirpw1d7NE/geVennVok9unDM7xpwyGNO8mGyXgjusAp35bZWYg++FBi5/Pww4epaLwnA9ySqlLv2bMMt9AxMyFLvO+g6C134Y5tRFZzl0IfnvPOZzof4/SjJU7quKsq00kR2B1hPclyup/8oCO5xsRRrcK1GK4qIiLauDQucfNnwH0sfqnk67wMz89wzZJ47dWooeaPhfljGzgr88dO+cvm9pf5Yw3mjzWZPzbSGZI/NtLy8tJG/zR/rMn8sSbzx5rOzPyxJvPHwvyxUcwfa3pC88dO2DCLLDXH4D7hhI2an/ljI6LmjzVswvyx1V7F+WP8qoUnCUVRmD/WZP5Y01mZP3Z3XHvyv0fu5H++88fWHhn5yZ89aP7YSOaPjTj+2PPHTnqs+WMbZZQNR+3zmD/WdHbkj2WtU/552vljJ46fdvJYnFb+2Noj5o81bcL8sbLsj8wfO3lwbf7Y2r87cZzzx9Ya+Q7X/LEm88dGeLT5Yxtcw8ZN4NT8seXmccgf67Q65o81mT824twzNH+sNn9sRNHmjzU8ifLHHlfXJkmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJOnJxR8gkyRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkjYRf4BMkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJ2kT8ATJJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRpE/EHyCRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkqRNxB8gkyRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkjYRf4BMkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJ2kRaVVWtO1TVdEKdUbSq6eTkr52VZUkf3rjUU9R4bknnbtkyhdcVWUZfO8vpmxVFAdEaLyz5BxU+jjYWXdWJorNWm8JDuuFFQfek1WrRBw+HeF0xHA7owzP61kWrA9EcH2VEtDL6gxxveJFoAfQ48DlHRHQmuhDllpV36UHf/9BDXPShY/NUdFCfwI+D+5OIqLEOt7C36mPj+eSBhyn64CG+sC98xlMgWvRXIXrJeedBtMb7GRHF+BhFFxYgOjVN5+ZZougLd2yD6CuffTVEP3TrXfTRXHKG/4wYDqmeDIY9iK4uL0F0bMcMXllcMr4I0W6Hmu22CfraGX6pm269ny/s4HG6sF3bd0F0KagDf3g50YFfeT41vSqoe89wZOmlip6YotPbOXXgHezeX3bN0yH6ydvuw+uK+T7dkzd9hDrhDKdGWSsxqFXYuh6eox7jRU+7BKIHb6NeNCJ27ToXool51/povTY0HJxyT9b9Ez84IjUT4E64N6AKPN6iWhQRM+OTED1vnJ71VbvHIXrXdTdAtP20p/KFDaYOQvR4jy7srgNHIPo1z3sJF330Y3R6b4Va/fyB4xDNdiZ6jE6bVgf/+kdeDtH/8B8/AdGD89SyXn7hDryueN9DNDAVBVVxXlZceflFXPQnP7Mfos98/pUQrSq64dzu8jwPnBPykufQIZq27evugejyHXMQjYhWQRfWwSXPlXto4vTCZ9P9jIjuBE1gOtj//92HbqePXk4sEnfs2ArR1WWaYxw/SvV/uk9F5zv5uoKnjG9/87sgevww1YRrLqcxKyKe+hSaCfzCX78TokNsmLNbqJ7ccddevrD22AREE5P7iIjYum10p1TkiXrCOxWLOMeucjq5h7P3iGjntLzNgrqjY9hFZzgNTpqZmaUPx62GYUUr+jq5cMYdhRyL3r5tO0SzPFF0jkUXuMbkddwK1qIt07TojoioaNq2jPtdQ/zS3TFa5UXqeU1MULPt91Ygmtg1bSfmojlOVgc9Hspx+zE1A6+DTt953lUQ3b9AfcIll13ORd+/7z6IXnEhjT05Li1y3JJKbrC0cChPtDxcBQ4nEjWh26GduuXVEY2r/tytWF5epuvCDduI6I368JOGHMVPbhe01Moz+soRiZcORQfrf0mXNvMVr+SSl3APfOu/+BqIbhn2Idpp0x5gRGR4+oAHpj596wrHnamxxGuactQtXdve+F3MoL/h9+LXGZF6V1IF3ZNum2YRY+M0dmzBKUREfPJGWvJ/yZdSNbvy0ksh+ta/fAsXPTd3DKL//dd/FaKDATXqZzz9mVz0f//N34Hoao/aTpHR4+j1cNGN50bEli1bILS6Qt+au8nkW7PbbrkJoi956RdC9Pyd1E/y0BARQ/yDXp9Ghw6eOzZO7S7VaqPGt91FQU9zkFGj5jduEVHw29USx3LcaqhxuTRI1ZMMJyG8Jcs7yckqemwOX0nsnIVoootOLW6fcd40no4b7DhsZTiPrZJZEThFr4f0ODpj9KUuumTDvuiEpSXq6yYmqU/YWdIOYY0D4om/oCDOu2rOx8CHdTiwVUZkGeZjYH/Cj5pbVqTWU7xm5wUmLxKLPLXLgQsP/vA85zSS1PoU70mJk2RumJyjEhFZatkCeJebV4FZam+HV/zJN1+grtdftvljYf7YBs7K/LG1mslL5o81mT82Imr+2ChnSv7YKOtePaz9p/ljTeaPNZk/1nQm5Y+tc8qXMn8szB8bxfyxpic0f+yEjbLIkjNwzh87YaOFj/ljTeaPNW2a/LHltSFuVxtljp3A+WPtdtv8sSbzx5rOyvyxtUbmkn1+88fWHhm5a/rIQfPHRtn0+WNl8/hp5I89En1U+WPDxpFYd3xkIpn5Y01nR/5Yeeo/H33+WDbq+Gknj8Vp5Y+tPWL+WNMmzB+rhvXI/LGTBzfKHztx/NG/rx75Bs38sSbzx5oeT/5Y4GbyRi92Tx6H/LEjx46aP9Zk/tiI6BmZP1ZVjeSb9Z9s/lijaPPHRkTPoPyxZO8lSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIk6ezhD5BJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJm4g/QCZJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRtIv4AmSRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkrSJ+ANkkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJ0ibiD5BJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJm4g/QCZJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRtIq25uaPrD7U6cMJgOIRou9uF6ES3zVdTVhVEMz4Zf0ytqumyJycn+aNXV5cg2m3RpZVlCdEsS3ytVquAKN2viDrx4amfnyvp4/nkLKsh2u/3qVi8YxHRGR/Doulb1zVdWJ4l7klV0z0p8Y61WlT/s6BvPT42zhfG34vvyfzyCkQPHznGRQ/wniS+9eOronVFpw+xPxlgNcPbGe124sI++pm76MOxnhzpUfTyc3Zz0RfUdE/G2vQ45uepn5yYoHYXqZb70mdcBtEP33Y3RPFpRJHna/vCIl//dOqMmy1ddoVV9HVf9BS8tLj3njshyjXh/K3U+V929eUQ/fRtVAMj4shxavVlSTVh39wiRAfDRAd+7s7tEJ2YnIZoXR6E6I233M9FP+cqaj6zF9JMoGzUq7V24pcan7iZL2xscgKi+xbnIZoXLYhW5YCLzvF7tQqaEF7/qX0QzdqJHqPdpit/jINafUpoXZNf3wMk5l3cY2Q4slw8S3csssQ0+Lwpano7tlE1u+u+/RA9skA14b6PfJovbHbPDojuO7YM0fMuoup9553USUZq6Nm//zBEt81cCNFOkXgceVAnnHdoyfPgPPWT0aJzP3yQ7mdE4BQ7Kh4zcc7GjToixqa2QrTTofrPvU2FLauqqrrGx4EfnmF0EPQ4Wu0eRCNivEvf+sJZmsBP1gsQvfnGG7no6OPaYecsRI/hNGDxOFbgiOe84FKIHnxgFaIrPeqOOmPUDQ57dNkR0RmjHuPLv+FLIPrG/3UvRK+/OTHHuOk+6o6KnCpwt0v95KFDRyD6qpc9gy/sE3d+CKKrK6Nv6do2MzM9uhovzNMOSaRWaqs9alyptViiA+dlYDWgtoPT88hxA2Zigh5lRGBvlNoGwXuyME/TxYjEPZ3AuShvO+VBM7pI7WjlLV5Z48yqoju2gFPoiJifn6PPxjs2HFBnNTVNK5pIjXpFQXdsbo6+V4Xnvunjib2dKVyLldhsh7jumJ2d5aInunTDz7uY+rrn7t4D0d5yYmn8pS+8GKIF1tDrbqQhLxtStJPaIR8MaDieGKPWUQ7pcRSpzqrGvbjuIzv/K82DvQHt96b2XKPIqXUcepg2BLgXbU9R9a6yRFc2MbMFonNHaLBuFdiLlomi6x7OjpapYVZD7MpW6WFFRAzpD9oZd+9UzfLuNoi2cvrKEaldwlRlaG089PBGRKR2/jNcQnbwjVtRULNtY/ceEUsbTOo+W3SbljztDrXM5UVas0TEJI4d991/AKJbtlDL+rbXfRcXvW3bORDdupW2UPqr1EWXvHGEy+qIwH2nbGKcth9zfNZZaho8PkG39OBRepq7ttGF3bXvAS76xuto3VHX1Cr7far/D2PnP0xuRJ9L9WSjxc4J5ZCe9fxSohcdYj/Zxu3HHHvCvKJowdOXiCynGj6BLyIrLDr5Ynd2hnqMnbuo2Va4KknsgEd86UufQx9eU2eV4x1LjBx4bkQEDtb9nDrwuTma3k/P0mgbEeNjNFg/eIDuSXtIk59kMkeNTzPx1pgTAIKqaCtPzbsKehw19v8ZznR56zJSNbzEepZxq8c79iguDNs1dnQ8NeJ1caQb1+mfXPHWT0SGw1aGg3WOU+gB9qI57h9GJL51nbhnj61lmT8W5o9t5GzMH1uruSo0f6zJ/LEm88dG+mfNHxtpzZ1ctwm55p/mjzWZP9Zk/ljTmZQ/tv7sU//a/DHzx0Ywf6zpCc0fO2GjPie9Y4D5Y/zh5o81mT/WtAnzx8qq3ih/7AR+mcL5Y1Vp/tio080fa55+NuaPrTUyl+zzmz+29sia/LFh86D5YyNt+vyxhebxR50/NsJjzR/baBd2ZCKZ+WNNZ0f+2MMHTplHnX7+WB3xOJLH4rTyx9YeMX+saRPmj5V1tcG+02cPrs0fO74mfOI454+d8nGjpsTmjzWZP9b0qPPHRj8XSCHbqAc+ebyRP/bI7HR2Ztr8sSbzx0aG8ZP/efLH6royf2xE0PyxhidR/lgqhUiSJEmSJEmSJEmSJEmSJERs4RUAACAASURBVEmSJEmSJEmSJEmSJEnSWcQfIJMkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZI2EX+ATJIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSdpE/AEySZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkaRPxB8gkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZKkTcQfIJMkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZI2kdauXTvXHcoy+lWyldU+RMu6wuKy1PWUEKvzGj8bP7ymaKtV0LkRUdA9qWu6sLKkL5W1Er8Bl1X4rfGWZnhPOBoRVTXE01M3DeD9zAZci6KFT7Oq6PTBYADRxaVFLjrL6cqXV1fp5DEK5liL6go/OWJiYgKi3KiPzc1DdJhxDYzIqSaUQacX/K0T/UkMuHG18cLwe+XYOvIiUfkHJVWzwK9118GDEN13+BAX/cXllRDNOi2Ilj2qZlumqY5FRKdNN+1vP3ILn06wm8xOfZRZ48lOT8/g6XTZwyENeUeOHqMriyjx9Irqb+yYXT86rzU1NQ7Ra77khXhdsfK+D0F05/YdEH3wpr300Vuwp4vo9eie3HzTZyB6x35qWXW+lYvur9Lp08enILp0LvY22J9852ufwhf2v/7r7RDNO12ItrA7mtt1ERd922foaQ6xjp67axdEHz5GI0tE7NhJ1SxwKA+YGlV11jqlUa9r4zxni4jIqOh6SFOjp1x6CUQf2P8Qlzw7PgnRSy+k6CVXPRWif/+u2yCat2loiIh9B2hgqrEXPXfPuRDdf/QAF130OnT6Q9SoLzhnCaLjF05z0RNj1Cdwq/+6L5qF6MdvpnMXl5fxuuKyi86H6E1374NoB6cBq/3E0mDu8FGIrqz0IJpVpz97r6oq52UgOnaUpvfPeF4botuGiXtSFPQHOyZoZlVX9DgOHDzCRR9foaKfsn0Wop/ZR63jsh3U7iLitttosB7r0Ewgw3nw0tyDED0H+5OIGGJF2rp1FqIfuuNOiE7NbOei75ujW1p3aLBeXJmDaDWkWnTzHdQqI6Kd0yxicXF061g7de5vsHxObibwgNtuU9NbXaX+hHuMiKhwsF7Y4FufsLRCnfB2nCSPjSWmwQsLCxCdmaE1ywCn0IlNo4ixLrXrNs4EMlyV57jej4h6iM8rT24SbmiAD7rTxyV5xL59D0B0iF+raFEF7rYSvSg3nxxPX1ikKsqbN++8awWvK6ZpiRmrfaqEnTbV//qBRNFjY9RP5p95H52M23S8JRsRBT6OqTF61p0W9bH9JXoewyox5ctxq62qqJ/c/yDNsQepDnxyK32v3gCvHKd8OT6siGhn1B29/kd+m87t8M4R9RjHjifmXVHT4+CaMBjgy45UL9rvUS/K3fuwpG9d4F5xpIby/pC6We7opjp02WXq/y7nX//gv20eXPsId+xojtf3n/yvxfkNZwLJOQbvVLz3ve+H6P37aFm90qd6soRTo4iIjDqrO+64m06tqZ7sPucCLvmuu+6F6A3X3wzRnbittLxMFxYRKyu0dnj/O/8aonftfRiiV1x6BUSnttBeQeAmSZ1lOb4N7K/isJWa8n35K74Qoj08HYed2Dq7jYs+jJvkP/TDPwDRN/zsz0D0la98OUSvvfbDeF0xN0crpjzbAtHnPe85EH3ZF76Ei263aXT4g9/9Q4i+7ju/HaI85fv6r/laCqdmR1wTErs3iWlXVDn9xWSXpgF1iUUPEj3Gri3UT2aLNGyVvJmceM+YGNVKXMs9mNEce+fuPRAdx1fGEbH3HurAJ8ZobTDo0dq2jXP7iGjl+JrycWRclPishnUqHwPfC/CL3RznoslpcPaE/f8F5lhFk+9KMuwUHseCPobYqCMix09P5ATxcJr61uO4Ku/hxlGOe8Ud3DXt9RJTvgq7FN50rfFNYtlYOOzadc76zzd/rMn8sRGnPynzx9Zq5pKZP9Zk/tiIqPljo5wh+WMjzUzPRMyf+s+Tp5s/tp75Y03mjzWdofljDeaPhfljo5g/1vSE5o+dsFEWWXL2bv5Yk/ljTeaPNUH+WDvvbpQ/dsJGmWMnJLcazB8bUbT5YyPOPwvzx9YamUv2+PPHJhpHPvvJoy775EHzx0Yyf+ykpZXPttZ/yvyxjV6ljUwkM3+s6cmbP/a13/TIP//1T/z02uijzx9b99h2bN8eo5PHHgHJY3F6+WNrjpg/1rRZ8see/ch//u3b/27kJsnJgxvlj504nsgfO+UTRxwzf6zJ/LGmx5M/FthVbrSRfPI45I8Nq9L8sSbzx0ZEz8j8sawyf+wxM39sxCefSfljT1SNlCRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJknQG8gfIJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSpE3EHyCTJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSNhF/gEySJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEnaRPwBMkmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJGkT8QfIJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSpE3EHyCTJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSNpFWvzdcdyjLMjqjriDYLugXzYaDAV9NzkUPKZpFzR8NwbmFBTo3YqxdQBQLjqLToXBZctH84VVFj4PPbrVaXHTepiuva7ryip9Gub7WrZW1Exc2xG/N1ayDj4PvZkSUWHTWakP0+CJVM36Uk2NdvrA+Po7FhSWItjt02VnqZwq5ipYlxTN81FWNHUJEq0O3JccLzzJsHXhuqt1FXtAt7Q/7dDJ+6eVVPDfirTd8AqJfOz4G0bpP9aQ32MZFH33oIERvvP12iI5NTkO0HFCPMTM5FbFw6j9PMb2FPnzLzFaIBnZWH7//EJ0b0cWnOY715FhO0XHsZGczGrMi4kUveQFEq1X61kfmqCu771CPi85nz4Xop6+nWhStcQjWKytcdL9P9X9lbh6iH7/7Noi++mtfCdG5Ty3yhU12qSvs9WhQ+6bv/gKI/sgv/gMXXWV0S7vtCYguL69CNMsTlXBpiTqciy66GKJ33nnnqQceGQHzPB9Wp9yxdf9M9d9R47DVwu81N3eczq0SU77xMWr1W2ZnIDq1i6Jf+fVbILp/72G+sOKe+yHaH85BdN+D+yFaV4mB/oEFqv8TNTXqNi4rZufobkfEuz7+Poh+9Te8BqKvuuZ8iB688wGIDruJC/vyb7gUop/6VbrhwyF178eXEr0oT28mpqgSDmsqug5qHXWUdU0Ns8qoYeNVx8ue9wyI7r3pw3RyqsfYvY3mThdfeQVEJ2//DBd9x73UMFeXaTiuampZO7fi1Chi584dEN17916I/tXNNHf69ldeDtGZucSC6KGdNDBFQX3Cm36NhvL/+99oGhARqyVN0V/1tddA9Ff+9IMQrSpc26YWiUM8/cH9D408vrYx5xusqYapfYwcF1Q8HOc42vLyMyIq7jFwR2tigqZGnQ7N2coqsVKbnKKZVYXzhAXcs2rhRkREjI3hLBrvGO9yFHli96bAmpDj4xwOcXSo6ZPLMrH9WGCfMDU5CdG98/Q4du7ayUXzDkt/lbqy+++nPpZ3KurUBkuF20pd3EzL21RP+GFFROS4wYg9xrCfaHqsxk6lM0ObCVMTVE+OrSxDtJW6J6sDGsq5J2yP0YXVOA2IiBp3YEb2GCcP8ujQS+1oDbF9HMFt1U6Lxo4+7hVXZWL1yuaW8LUCThd56zIiStwlnMdqxu9KcrxjEZHjzlLNe/v4xXoDatVbt63f1lunxKIjAnd8o9Pd8HtVqVkGh//zf/pFiPYH1L0P+K1ZqqLw5OfjH6O94gwH4ywS9STDS3vzX/4tRNv4vRJzzYgcv/Ufv+WdEJ2fm4PoP45/BKJjqRn4FZdfslGoPxjyvKvG11PdVLP9pV/6JYi+6Mu+CaJXX/6VEP3gP36Ii953H01RfuSHfhii8/O0Jft7v/cmLprxO9ADD1B07333QPQTN3yci15doi764EOj12InHD1IRe86dw9EW/guOxKvymNsjLbaeCa7ivPYiJjdTrsN55+/G6KdCRodki+7jxx6EKLdgppeB29ZUdP0ZqKghVhEFJhTMZjaDtF/991fBtE/e9ctXPTRI7Qh/G1f9TKIdj94K0Sz1GyzGvAbUqzDuDZoJ9aniYF+ow2QEwY40e3iiJjxeBmJ6UuFS+NqiBNdfJNYtBKLxBpPL/GO8Uidc2cUkWOHk/F4invFwclIEddcQ/t480s0bA2HtI7r4SovWU+mZ6kX/Zu3vw2iZYn3pHE7zR8L88c2cFbmj63VzCUzf6zJ/LEm88dG+mfNHxvpkRa3Zct0xPyp//zcf5s/1mD+WJP5Y01nUv7YOqcMiOaPhfljo5g/1vSE5o999gI2yCLj/LFI5TacsFEWmfljTeaPNW3C/LFhNdgof+wE3jjlDIFhWZo/1mT+WNNZmT+21shcssefP3Z148gJI3cqTh40f2wk88ceuaTP7Q2eRv7YSY81f2yjjLLhqMmh+WNNZ0f+2JGlU/q9084fO3H8tJPH4rTyx9YeMX+saZPkj33bTz3y37/1W789Mn+s/7mudaNe9MRxzh9ba2QumfljTeaPNT3q/LGNnsuGLXej/LGTxxv5Y48UMTY+Zv5Yk/ljo04+E/PHyqjMH2syf6zpSZQ/lqqykiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJks4i/gCZJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmStIn4A2SSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEnSJuIPkEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmbiD9AJkmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJG0i/gCZJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmStIn4A2SSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEnSJtLK8vW/Qba4tAQnTE1NQXQ4HEI0b5TVUOHpBUTLYZ/OzejcTqvDl1XndGFFxmeTqq4Tf4F/UBR4T0p6HPywIqKdtSlc0dfmW9Jq02UPl3t4dgwHdOVFq0XnLtGHd/DciKgqqglR0Ok1VsK8Ta2jV5Z4XTFcWaVwTg9kiB9eZYn6zVWYG32d0f1MtY0YlthjtPDK+Wthqy6x3IiInK49L+imVHhlVequ8OP46w98AKJ5q0snp/rvYW8A0ayg/qTG78XtrtUq4J8RUQ6xhlfUn6zgyHLtvkQvmmNFyjK6sHfs3wvRyYnDWG7iaa30ViC6bft2iC4v0+NYXaY7FhHvP3IPROeX6I7t2jEB0TrVWd12J93w84/R9xrvPBWiB/9yDqIPPLCI1xUHV6kitdtjEN23sg2i3/LNL+Oi/+Qtt0B0gG1noUfjTo0DYkQU2KcsLS9DFB51lsWOrdsjDp08smPbKfV5bAw7uoiHD1PjGuBo/MG5cYj2BokOfP8S3bQHD0EwBgeOQnTr9AxEx7dfhNcVO9rUJ3R3YQ2foC/1j9fdzEWvLFFn1cVqtvcYjUqL4xSNiGc/68UQLfvUMG/70AJEl7EmbJvdyhd28MD9EK1qaphFTvU/ObuZnJqEaAtXJbwMfOpTnn7qgU+tiz6w7z44HVc8UeKjPnDgAER5khwRWUXfqztGk598jIatL3j+M7jo8y+7GKJ773sIoledcxyiDx+e46KPLlI1a2PDHHZoM6HGBWZ/JTHHuOmT1KXsefV5EF3eR82200kMal3s4CcnqZ9cXqEhr4WTugVc20ZECzc6qlQNj4higzl8XSe6jCyjKy/x9IKX1amil3FpnOOHz85uwaKp3LpKrV8z+oPBkHorXhBNTtIkOSJqvHRutoktqVZi3cF7cVVNPXgLN0kqHE/L1H7XeJtax4OLtC/aW6b5yQXnnc9F884nL2qOHZunc7EXTW4/rgyom53dwlMUetB93MSL1P7kAK+c+0mu/BGR4w0fn5qG6MQY1aKlcVoa9FdxEy+ig/t4PewxWri3WfLGZnLsqEbU/5N9VL9PtQhraETExDj1ZjnONvlJX3bppRD9xI034tnR7eCLA/xe/K3r1BR8dvtOiB4+/DB+OA30ZS8xDej3qZpNYesY8NZ9lybJC0s0NYqIxQWatkVq+IBlT4f3RSPynBrXCt4xbnqJ7fdU48mx1acmMLw5n6iieUVPk79WXVM4r1MzVZzADAb0OIqCnjWeGkWRGNSqjS+8KhNd9Moi1f9hH9/WReTYH+3aeS5Ej2DDWligqVFEDIa0MFlepglMhYt2nsD0cfYSEQUOaq2CPvzo0YMQvX/vvVx0p41z7AE1rqOHH4DokBfO/eS8i4rOsN0uLVFFyfClWEQszFNNKGqc/PMEJrUU+8/vps20wFXJ+BjtAXYxb2FmJrH9yJtxy907ILrzk/+dip6i3eCIuHKWupQPvudvIFo9QNtKA6zeETHRoSlfNaD+pMZl9fgYTn54Zz+iPY6jA7cd3PmsUvsYBeZjZPitC+xtssTL7sQ94WGrwm0Qfp3dSuXW8E3jrWbuyhITlIjrrvswROfnj0F0gAuiGr91YnMmgvv3mWnadD22kHhNuY75Y2H+2AbOyvyxUz6ncQfMH2syf6zJ/LGRzpD8sZHWpZCt/af5Y03mjzWZP9Z0ZuaPNZk/FuaPjWL+WNMTmj92wkaLwUb+2HqcP3bCRuse88eazB9r2oT5Y61Wh/PHNsocO4GTuOq6Mn9sBPPHGs7K/LG1Nsgl+3zmj609MrIXPXnQ/LGRzB876eQO82nkj530WPPHNhr5JyZGdGvmjzWdJfljpzbD084fO3H8tJPH4rTyx9YeMX+saRPmjw0Gw5H5YycPbtRFnzjO+WNrDUfVN/PHmswfG3H648gfC0wh2yh/7ORxyB9bmJ83f6zJ/LGmMzR/rM7MHxsRNX+s4UmUP5bM6JIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZJ09vAHyCRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkqRNxB8gkyRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkjYRf4BMkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJ2kT8ATJJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRpE/EHyCRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkqRNpFWV6w+Nj3XghLqqIFrk9ItmdZ3x1VT44RytKZi47E67jdcVkfUhOBwOTrvoumw8gHUlZ3TTOJrj4yhLuuyIKAf4vDK84yir6YbnrYJPn59fpNPxW7fxWfcGiXuSuKVYCxeXVyD6P974GxD98R/7Ub6wYUVXXpXYbDP6UkU78TiqqoZoltPpK6vLEO10qC+KiKxoQbTdpWfd79PjCLwnVSTqSTvrQpTryepwlT4a73ZE4lcly/4QosMhXdjU5CSXzFfWL6noTk53bIi9aB6nRKvG7a2DTh9rUzVbwd6mPUaXHRF5Sb0oD2pFQW1ntd+jcrGniohhRY9jcZVax8oyFp0lqujKGDWfYUX1/8FDdMdarcRQPjd3DKL3HpmHaIYVfGxsHKJVc6Z1ql4fb1pNj+PW33wPRFup6Q1PYHjELHEGUmA0Ipax/+/3qJr1ehve0l6vHJ885XGs+ye3rIjotGhk4f7k+n1HINpPzTFuemgJosWnDkN0gJO6dpGa6KI8p6dZ4lS2xpGFW1ZETE7PQLS/SvPzW6+nOpYXFI2IqZlZiC4v3ksnV3THBtQBx44h9ScRcdOHebVFFXiAjyM6ibFjaYXGxPmFBYjWOPnJC6oJeVGXONFtd+lbsz+4+UGIdovE49gyTjft0/vo3IsKajv79t7NRW/dMgvR3oCmKL3dl0J0+47dXPS1/3AtRAcVdbPn7doJ0Q8vzEL03juojkXE+U9/KUSvfR/d0nvuOQrRueVEj5Hh1Ovu+x+C6NZpah2Hj1H06NHjfGE8lN+9976Rx5+y5r+L9uivNkxtJvBE9+/e8U6IdtrUqHv9RNGdNtX/o0dpsN69k6roBRecD9Grr76aL4xHzJUVmvJ9wbOeCdEhrvIiYoBrzNUVGk8nutgTpib/Oc6sLtlzHkQfeGA/RDtj9MlZJKZ8hw4dguiec8+F6N47xiC6c+cOLpob5nBIT/PevfdDlLcaok6sSl7wghdDdPvsVojuOfdCiL7ila/moicmJyDawnX3Q/sPQHTrju1cdB/r/6duuhmiH3z/30O026V6kmeJKpq3cD21RGMiz8qySEycSp7A5yNa/cmDM1to4whHhoiIOqiWFrjBWNU0OvzCL/0CRH/oB38Iryt+8qf+PUTPv5Dq/2tf+68gevXlNCuLiK/46q+B6KWXXw7RyXHqwG+44QYu+tq//wBE3/6Ov4FoF7fa+rglleNkMjZY3q79xKOHafOnv/FwnNrGiKhp1BtgLzsY0C5HYJ+AY2lERF3jIhHPzXkrGb9yRFT48fz6aIjzk+R7AVxERo0XVuHeToZ9UYbr/YioN36YdREFvvmqcnrY/AIoIo4do8o/t0Qr+ve+74MQ5d4mIm766PshmmMH3u/ThXVxbl+k3jgXBf8B1ROelRWprbYhvl1tY48zjvV/bpH2D8dTL3FabaonE+NTEF1cpjnGlVddxUXf8ZnPQHT7DtoD/PhHb4HoMPXSLLUrS+cvLdF0sZ1TTTi4ktjHyHECn+V0Oi+XUo0jsZLL8J3yEKOpkSeqCl/O8kfjwMTRdmrnk9fsvMQc4jugVirtYYCvabrY4STG4seRRhIRNa4is4yGrQJXNHVqPC3wlcQAG3WO74CSr6443O3QwNR8Q/3o8ZeKiDFcOB86jpuEyYnuqcwfC/PHNvqDszF/bK3mrp35YyOi5o81mD820hmSPzbSupSPtf80f6zJ/LEm88eazsz8sSbzx8L8sVHMHxvhickfW/sIN8oi4/yxiOD8sc9+yGklkZk/1mT+WNNZmT/Wbrc3yh87YaPMsRM4f2xYDswfazJ/rOmszB9bO4sdmUv2+PPHXtw4csLIrYZHDpo/Nor5Y83jp5E/dtJjzR/baKwYmUhm/ljT2ZE/tu6fjz5/bDjq+Gknj8Xp5Y+tOWL+WNMmzB/Lqmpk/tjJgxvlj504zvlja418GWT+2Ig/MH+s4VHnjx0c+QfwbuvU/LFbmschf6wqh+aPNZk/NuKjz8z8scL8sRHMH3uszqj8sUebaiNJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiTpLOAPkEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmbiD9AJkmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJG0i/gCZJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmStIn4A2SSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEnSJuIPkEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmbiD9AJkmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJG0irVZ7/W+QVWUXTqjqIUVLLC2jcyOi3S4g2u/jyWUNwSoqiHbGxvCjY3lpGaJF0YLocEjfuijoK0dEXdP3YllGPzDXarX59DynaxsO6WHz9+rjsxwMB3xhS71ViFYVPeterwfRToseZUTwb/bxs5qYmIDozm3bIbpr5268qvjlX/kvEP3UTTdDlCvw1U+9moteWabH8X3f9/0QfdMfvgmi7U6Hiy7aVIcP7HsAoj/9M/8Boq9//esh+qd/8md8YceOHoXol0xvhWi5SlX04CJ9ckRcMjMD0aMFVeDljGrCZ7A/iYgh1v8CG1dZU7MtB9SLzsxOR8yf/OfU5ORj+vBjc8cg2sOObryVqKLzi4sQ7XTolg7wW7c6dD8z7L0jYoCdcKtD37osqYseYg8cEW1stvyw6gFddj81dvDokGUZRAdDapitir7UYJC4sEGPbjhfdmQUbWH3HhGR4UDPMyuMtrC3iYhWG5tPTo+j1VoXrdeG6lMvbN0/l5apVUZqdrSKM5AMH1aZqqLDCmeMPCsrqegBzsALrPxJPPmpMwrneWpkWZyHaJnocFYgVlWJCfbxpSWIZnjDefaeYUe3vHQ/X1iGzbbEKI/FdeqXqbOg1tHt0hKyt0ptZ3JyiqMLCzj5r3HUw0d9z8FDEB0vEsslroSrw4chWl33GYgW7UQHzmtMXPsmml5Z3sJF80Ivy2hQ27tMjbp6gGZleWql1vk43fBhqtWTKtFPjo9T/b/x3Q9CdHkZp0bYgS+tUNOIiAEO1tky9ZMnbPTVqpK3fhLaOJW97977IHr55Vfwh/Owtm0brcXm5o5AdHllAaK33Z5oO4mmh6upd7/nnRDtDxKPo4OziC0zsxCdbCyv1ipSQ3kLW26OU742T36wYVaRaLZ5exyiV1x5JUQ/8P73Q/RlL3kRF717N23vlDVd+RxuNfCKpsQOISI+fv31EP0X3/gvIPrp226F6Nvf/g4u+ilPfxpEB3jhRw8dhugrXvFyLvriCy+B6F2fuR2iRU6df4YbLHVqh7zCPoHXLBlP+RLb64k5xpo+YbF5MLE04IIjCmy4Nc6iW4E7WrfRvGvfARqpI6LboRcH12KfcPwoTW9ancRs873vfR9ED//pmyH6lCtpxPzzN/85F11jN/s1X/M1EH3H296On02fXA8TUz7u6yKi1aKxqdh4e7PCVd6JsiF4zTVfBNF//+//HUR//g1vgOg3fj31wBHxIz9KH/4TP/ETEH3lK74Eor/8q7/CRb/my14D0bxFQ/nb3vY2iH7Ha7+Vi37H6/4VRLds3wXR+x+iVj+1hXbXb0vt8rU7G44OY53u0iLNwPur1EVzq4yIYUm7d5NN9QAAIABJREFUl1/4jMshes7FeyBavPJlXPQXP4+G8gy3hlotanpTM9MQ7fXpK0fE+Bi9kvuef/3dEN2zh+7Jvvv2cdFHj9BuQ4VTvpkJmmMcX6QNq+QLZf6DGreaV5fphmd1Ymnw/Bc8H6LT0/SsP/CP74Jovn6veD3eD+j3qV1PTtImdlbTWiw5+SnxTzKsJzxq1fy6LqJoJIesNcBbhm069TojokwOuBtL5VTQJ1dlop50J2jKV+PeZoHbqvwWPiJybJhcT1iJuzcFz79Te3H84RUPW6lBrcJ6xjWhxHQlmA2ewHtWi4u8lONVOV3Y5Dhtv0REjR/ODZO/c7PlmD8W5o9t4KzMH1urmUtm/liT+WNN5o+N9M+aPzbSIy8o81NH1bX/NH9s1IebP7ae+WNNZ1L+2Drmj61n/liT+WNNT2j+2AkbZZFx/lhEcP7YCcvLG4wR5o81mD/2mJ2N+WODsub8Mf5SnD+WzC4zf6zJ/LGmJ2n+2HN/dE0p+YgZ7+c3f2zh+NzJ/x65ojl50Pyxkcwfe+T452awjzp/bOSHQHDEpGyjPx/5Isv8saazJH/s1LXVaeePnTh+2sljcXr5Y2uOmD/WtAnzx54y3hmZPzb2uYMb5Y+dOM75Y2vVo1Y35o81mT/2WP+A88cCU8g2yh87ebyRP/aRk//1/Bc83/yxUR9u/th6Z2b+WKvOzR9rMn+s6UmUP5a4R5IkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZLOJv4AmSRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkrSJ+ANkkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJ0ibiD5BJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJm4g/QCZJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRtIv4AmSRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkrSJ+ANkkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJ0ibSaufZukOrZR9OqGP9358SzSqIVlXi987KcgDRYVlT0RSMKii8tLyI1xWR0bdmraID0eGglyi58YDWqvFr8+3mcyOirKgmZHWBReNl53RukZV8Yb3VJYiWZeJ0UFP9jYiIjG94m6I5XVjepnoyNTXF1zWs6NILrAr9HlXCrJWo/Ndddx1Ea7ynNX72T//Mz3DRP/lTPwnRa//xgxD9iR//CYje/KmbIfpjP/ZjfGE//v/+vxBdOHIIohfs2AXRTn+Si+6trkD0op27Ifqxe++FaH3Odi46z6meccOsKuwT8JOHp37ysFFQ0W7B6Rk2j5mZGYhWqV70e773uyF61113QfT//8M/DNEfwzr2/Oe/gC9sYWGeLuzuuyH6gz/wbyH6A9//b7joN/7v34Lom//8TyF62+23Q/TwsaNc9Pe8/vsgun12K0R/7Md/HKKTU1SBn3LZFXxhN958K0R5AlINcVTKaWSJiLxF866sombbG9AkYQwHtUj1GFnQLYUJTF3XeeuUc9f/s6RPjoj+CvWiPCYOBnQ/f+4/vYGL/q3/+9sQveMzd0C0wt6ohdMAnEFERBTYT06MjUF0fn4ZomNjicfBs4i8RdUsw/nkcJiaLuI93TJNo8Nx7GPbeD9rfpYRBa626oqqKC+Isjy1NKjpprVaONpiX7ayRPVkZWmZe8J2mypSp0M3nJttC+9YpKY3gx59OPZz0VuivigicWVFRo+jwmafXCQm1gb4tHKsZlxwNkh14AX9QTnAVl9w4Yl9jNVVXNTjkJcHPg4sus9fKiLHdTd3VidMTIxeh64s0zQgIirszW6+mVZbPbyfhw4f4aJbWBMSMxCs/wXXsdRGRAfHY+y/o42Psk51VlVNRR86ROvTTof6k1bR5aL5cbTH6MOLjM7lCUy3O47XFVlBfzCNA/2BAwcgunPnNi56bo6WLc98znMh+qEDD0C0xh2WmVRXdm5Jj+Mf/uqtEG3jDa9TndUN/3AtRLmvy7GK/sE9tLaNiAsvvRyi0xPTEG3jfu/UFJ07WyTqSX+wCtEaZ2X376d6wtOAiOjhJuGebSe3lQ6ePLjlc192/jhVb56fREQ3sYqkvm61R3eM9/GuGp/AcuN13/otEL1kdgdEVxbopcPfv+tdXDTOJqOFm/Of/OhHIMqbCZHai3j3376DzsUJY9GmJeRqmZgGJ23d2tzeOXbyv+qNB5fkLh+Pt9f+wz9A9H3v+zuIVrj98sEPfIAKjpgYpxcHP/eG/wjRX8SdCnybERHxnndSHc54Goxd2fvfTXcsIsYGuF2w70GIco9R9Giim3fpBVBEPG3jfYysrlZW6MNLfAFa4IQwIlrYw+974D6Idmdo2FqdO85FD/Bp/siP/BBE/8dv/BpEV1Zou2B8C83ZIuLWW2gz+VLcs52cptFhmdeAEUeP0piYFaf/xrnEzqqdepfdGacJPE8TuLN6+OGHuehWMeQ/AD1smFmeaJjj4zT0fOPXfx1EZ7Ca7T9Avc3113+CL+zw4cMQveqqqyB6yy23QLTboa8co96jrcX7eDnubSZnmzWmPbAB7hW3cMnTbidWr8MhVVG+JxzlT45IbBIWQbPoQR/fvWKPwcuKiKhxMyFRT3BCOKgT96SV4/PifA7M5RikMnOOz89BdH6FpvdlSRfWxaF8x47EW/h778eX+KffsEZM/c0fC/PHNmD+2AjmjzWYP9Zk/ljTP1n+2Ej5qa8t1v7T/LERF2b+WIP5Y01nZv7YiILMHzN/bBTzx5qe0PyxzxaxQY/G+WPx6JZiG2WRmT/WZP7YCJsvfyzPC+6sLtx+AUQ5f2xluW/+WJP5Y01nZf7Y2vSvkblkn9/8sZXVR8bQkfljJw+aPzaS+WPN4486f2yER5c/NmwciXXHN0gkM39svbMjf6zVOuWfjzN/bFTy2CMgeSxOL39szRHzx5o2Sf7YC9f8953LyyPzx7LPHdwof+zEcc4fO+UiR91b88eazB9rejz5Y4H91Ub5YyePQ/7Y8sIcl2v+WJP5Y03/XPljWZaZP9Zk/ljTkyh/LLF9IEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJOls4g+QSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZuIP0AmSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkbSL+AJkkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZK0ifgDZJIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSdIm4g+QSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZtIq9cr1x3KsxacUFaD0y4sz2r+g7KiP8iz9Zd6yrn44RmW2+3SV46IXo++dVVVEM1zurB2u81FJz68KCA6HA6p6FbiWw9LOr1oUdGR0y3P6DtFnfHjitVeD6JFTj+rV1X0pYZlonpjDY2ioCtfXaWv/a3f+q0QbWWJ3wr8z7/wHyF6/533Q7TCb1WlfqWwLul7tVtUw7/3u78boj/24z/GRX/nv3odRIuCavjb3/52iObY7v7iLX+J1xWT7S5EPzVO0RsOPUwX1kq0Dm6Xw4MHIDqY6tAnl9QDR0Svjz0Gto7xsUmIHpmne7J1fGbtP7vj678FV+Ehfq8MRxYesyLid373dyA6O7sFov/z/7wRonPHj0G01U602/MvugCid953B0R/4Ae/D6IFjkoRsXUrfeu7994L0f/3J6lP+M//6Re56P37H4DoK17xxRD95V/+BYj+1Vv/BqLbtm7jC6s/eROGKVi0cShPzbsKrCm9IbWOFnbvOY7FEdHpUE+YpWYCoHXq9GbdP3sriXvSbVNPOMB5QrtL9+T3fu/3uehtW2ch+uEPfwiiC0urEH3da2mO8RdveTNeVxw6dBii/+IbvhGis9jkv+zLX8VF33DD9RDdsWM7RD/zGerKfu3Xfp2LftOb/giiX/vVXw3RH/7BH4Zoa3IMS05U0Sr1B/TROD9P/jB1hu36/vtpttkfUNspcSwuy7LbocY1GNAMpFPgaqumL/WzP/uzdG7Eu971Loh++2tfC9G3/NVfQ3R6itpORLzwRc+H6F/95Vsh+tznPg+iX/lVr+GiX/7yayD60he/BKIPPkhz0eWVZYg+65nP4Qt7C/ZmUzPTEO2v9iHaGaMxKyKoCkZkNa0sBjifHOvQqJQcbXkzgaMnLC0tJP9mo0+HYBunINd+5CMQ/chHPswlf//rvx+iGRY96FFN2Ll9K0QXU/eqndM8ua6pJ8xxaoQ7NxERGfb/27ftgOiRQ0fp3C10TyKiwK2Mpxd0+u0rcxCt2zSe1sNE9T53jB7Hof24cO7RvKuNzTYiul3qUpaXqSfs4Xg63qJPfsbYFF/YU6aonxyfodOPH5uHaJUnth+ndtCKaWlukaIDarYX7jyPi37HkeMQHStop6Ju8dKAakJqoZZYWZePogPfSHcsUUWXV5YgOr1lFg62cTeMd40iYrVP+72tFrX6cpU+/OevfhpEP/WJG/G6YusKXdgXX7YLor986BBEv22ceuCICFyVv/UobZc9dYzu2EsuvJRLrnH3cgwf1kMHDkL0t2pqO13cang0ZmZmITq98ZwwObPipnt5m5rtNefsgWiZU8M8fISW5BFx/i6qhDXOVScnqaP7rU/fyUX/P7t3QvTwMZpFXHju+fTRx6kvioiJCarhbZzA331gP0SnZ2l+MonbuRHxD0sbDuULS8ufuPl2OLfCCeEwNb0ZYsP8/d/6LYi+/vt/HKK3Xvt+Lvp3//h/0YUt0lD+s9//IxB94AjVorqmaUBErOA+XgvfkNY1NfmCN1giOjn1Zl1cGizjHasf3yqvwG89wNnm2Ng4RLdtS+yB9/v04RMTuFeM88kqkQIQBf7Bfffvheh3fdd3QfSWT98C0Ztv/jRf2BVXXAHRl7/85RB93Xe+DqK9YaIXvfsz90H0rX/9txBdmMcqmmodwW8a+b0ANswSd02HuDkTEa3H8X/ax68zWvziNrXGLFp0YZzs0cJlRXJVkbgjuK1acS5IJO4JVyNeTrUwPSBVEWIMZ9HdjQf6iMQtu+pqavJ333kXnRyxYxu9DRkcOQLRHj7sZgU2fyzMH9vo9LMxf2ytZi6Z+WMjouaPNZg/NtIZkj82UufU+dXaf5o/1mT+WJP5Y01nbP7YOuaPhfljo5g/NsITkz+2dud9oywyzh+LiI3zxx75wI2yyMwfazJ/rMn8sabTzxz73KdD0PyxJvPHmp6k+WNrjcwl+/zmj609MjJ/7OQjMH9sJPPHmsdPI3/spMeaP7bRPtLIRDLzx5rOjvyx+tR/Ps78sdNOHovTyx9bc8T8saZNkj9WxUdP/vdrr7pqZP7YwucOrs0fe+aaPzhxnPPH1hoORwx/5o81mT/W9HjyxwJTyE7NHzvYPA75Y/3+wPyxJvPHRn26+WPrmT/WZP5Y02PNHzv9xiBJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiTpSccfIJMkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZI2EX+ATJIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSdpE/AEySZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkaRPxB8gkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZKkTcQfIJMkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZI2EX+ATJIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSdpEWllWrztUNY6sVbRaEB0OhxDNsuT10F8URRuig3IVi6afWisrvqqoqhKi7YLuSY0fXgfd7YjIC7pyvuFlSZcddaLooiggWuFdG+CFFVgV8FlFREzNTEK03+tR0fiwhnzHImq8ab0BFo31/5XT2yG6Gok6unPvAkR7i3RhU5NjEO0WXS761uEKRLfV9LWrlT5Ef/1Hf4qLPn92FqLPmKVb+qF990GULiui26W+KCLy/gCiNf7yYwcr4TBPFN2rsQ7n2PTwYcWQvlREZG36XtWQ6nBdYY/Rpr5oXUfX7Pc63XE4vb+yTEXjqDSoEvfky179ZRD9wAffD9HLLrsYou961zsh+kd//Ca8rsSgdvGll0J0ZZXuWKIWRXzTv/x/INrHavavXvsdEJ2anuCi3/IXeyH6x39CN62VUyUcn6Siczw3IqqMHkeBg2Ifx51OSUNeRNTY4eQ8d8KBqcbeJiKOz89j9DhEYRKRZeurN9f2Jp5t9nB8qLAC33Pv3Vw01//f/f3fhejv/8EfQrTVokr4qle/ii9saYHm2FOT1Mcen6f5yd/87Vu5aJ5t7n9wP0R58v+67/hOLvrSSy6C6C/+0i9AdIDT+w5OJkucQkcEL5fynL51u8JJdmoKXmMP38fJTw/n5/0+tax+v88fPt2lpUGvXIQor0/373+AwhFXXHk5RGe3b4Po973+eyH6zne+l4u+7iMfheh3fAeNmNt27IDo8bmjXPTLXvJiiL7r3e+B6HXXXQfRsqQHvX//Ab6wySnqjm699XaI3n47RXkNGNwsI8oqsSMABgO6J0P+5IipKWodR+eO8OkRkW9wedzbRESGf9Bboe/19+9+N0Sf/gVP46I/eO3fQ/Q3/udvQvT7v//fQPTLv4zm9m/727/lC/vGr/96iH7v934fRF/xildA9D/+7M9y0f/9v/0GRP/br/46RN/3XuqOvm3H+Vz0pz/9aYg+83xad3wh7kXwXLQ9M8MX1scB9+atdPonsOltnd3KRbda9L2GOCEc9qjLqAua935smQbEiLgfi+4fp9GhN8BNlNTSoD56iM7mfTx8HLtwWRER7YkpiC73ab9rMqdlYDfDveIsMeWr8HutruIeOG469Vd5xyuyjNYOx4+PmN6fPHjkCNWT1NARUVFVGZa4cYSb2G/5FPVFX3Ipzfwj4u/20mbCQ/fcA9Eh7oa97XhiLJ7E+r/apf7kNpxk3L3vfi56GSchu3CN+ZyduyFazx2GaIU1MCJWVqj+RyT+D3dgiZqcWbVzehwPL9GFveUo7YFMtHHDNrVS+9TKfRAdYh+8ip1/t01vDSLib/c/CNEeLvTyedySTb1KLFsdiFY49Cz18SXOInX+7Yce5gt77vOfvVFoZma6j0X3BtRs89RLzKWFJYh+5THqou995zsgekUkhq0f3o2tHlegFc4ifhpv+FenXuddMItFj9MSsoXv8/avUD2JiPNxu7iF79Qmpml+8nNzNO5MTNCXiohpfKd27DANTNMztMvR6yXmGNu2UJeSmDDm1OQj9Zqmh3On227+FER/5Ad+kD4aB8S6SmwmHMdV+e/9zu9AlD87S+UeVNin8GtG7qF5HhsRdY3jGn4xftPC2RpZ6nFUmM/B2yCc7DEcJjor3jgqB7ytRB/Oj7LAFJSIGAw47QcnMDgnS05vhpy7U+PAhMuK4BoYccEFF0CU11P9IfU2e++lDjzwRXlE1ImWySdjsFEDzR8L88c2cFbmj51yGY0HZ/5Yk/ljTeaPjT79zMgfG6l16pbC2n+aP9Zk/liT+WNNZ2b+WJP5Y2H+2Cjmj4364Ccwf+yEjbLIOH/sUX54a4O9RPPHmswfa9qE+WMTU5OcP7ZR5thnoyN6m2pt1PyxJvPHms7K/LG1RuaSfX7zx9YeGZk/dnKH2fyxkcwfax4/jfyxkx5r/tiGY8WoNz7mjzWdHflj9amLvtPOH/vs8dNNHovTyh9be8T8saZNkj+2dnPht26/c2T+2MzM9In/2Ch/7MSal/PH1spHZUGYP9Zk/ljT48kfC0wh2yh/7ORxyB8b73bNH2syf6zpzMwfy/Pc/LERUfPHGp5E+WPJ/+mPJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSpLOHP0AmSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkbSL+AJkkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZK0ifgDZJIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSdIm4g+QSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZuIP0AmSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkbSL+AJkkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZK0ibTyKNYdqso+nFBlGURzjNZ14mqyjH4QbTBYpZNrKhqvK+qqonBEOSwpir/jlucUrVI3pRoMKVysf3xrtTAaqcfB8Va7BdGspDvGt3vYoxoYEf3VHv8ByHOswHzHIjKsSQXWBP7s1fnjEN218xy8rjgnp0+fX5mA6Hh3HKJ7jx/jolvjYxD9ym105Tftux+izzjvEi6aG9egoCr66t17IMr1oGzRJ0fEwf0PQnTbti0QbWEtqrFlRcShlXmI9lepcT310isg+tAD+7novyro2sawAVTYgff6dNn1qefWIz6KOrMB9rED7AfHx6jyR8RrXvMaiB44cACif/d374Hoe971boh+x+u+gy/sW7/1myH6lV9Fl/1t3/ztEL3vnnu56Je+6KUQ/b4f/n6I/sHv/D5Ev/TLvoyLPu/ccyH6rnf+HUR//b/9BkT//M9+F6L7sUOIiIMHD0L0hutvgOjXfO3XQPTwocNc9D133wPRP3/zm+lknMB0Oh0u+tjRoxBtYTdbbVxyVcegN1h7ZN0/kxe2uLgE0cTUCMed73zdd3LR73jn2yH6N3/1txC94rJLIXrbrbdBtNNt84VdcslFED126BBEJydojpEseu7YHJ0euO6IAUQ7HVwbRBx6+GGILq+sQBSnJ1EOadz5+Tf8LJ0ccfToHET/269RZ4UrrfRSjZctC0vUdnjONmrsPiWK8egPaJ6QWItBhxLxxjf+Lyo4tcb8vd//PYjOzdOcLcsSrYNXJX/25j+joueo6MEgMducmcaONKNbes3LXwbR4YCabbvTxetKdNFc/bl614nGkyicq1mR0SR5WOFuQGpJX+P3Wn0Uy+qVDZYPyb2dYUlX3sLV68/83M9CtJ16Gr/+G9QTfuITn4Doq175JRAd79Cy+jVf8ZV8YVtmpiD6wQ9eC9H/jd1RJ0+sT7/x674OooMePawsp/2bT9x+Kxd9cCvdtMV774Rob0BVdM+OXRCtHlrgC1vCdr11D20XZNioW53EtlIbN9NyHPMK7PwznBo9p0xc2GWztFNx/oW0P7NyZA6i75mjaVVETB+gFdOVl1wG0bpFI+bYNLW7iJjatgOiO6dmIPou3C4bDqkCt1PbStzDF4kNFtySTe6B4+mtfMSFnTzY6dIkodVKzMBr/Nbj49SfxDJNCO/NaY7xu/sS+12rOOw9/YIL6Lpu/zRE5+rEqLZQ0ZXn2Oof/v/Y++84y9K7sPP/nnDvrdS5e7p7ctBIoywhISGShISxQciAMcZLMgbjIL9szBpsL9GY8PKul8UmGa+9axxe2L+fbcAICSRA5CQURpoZTc4zPT0dq7rSDSfsHy16quvc+jw93TPTM12f919V91vnnOee85wnnW+f5lkJNu8Rkc9QLV3EVvS+M7QWkVhq49lURFVNOScbb4nhOt19xda7r7F5j4gKV2WvCoq+6y2vhejRx6gS7ti5G8sVfWzrTmNjlZgj4kOxiNjRo0b4EPanj99Pw4DDBw7yoX/qXtq8ncW5A46d6pbujn6ZWFaamdnyD2Zm+ovHFmHbMc7FZud28KHHI1qpOI5r4KeOHYXox04nnhA98Ditcq+tr9HG2GPO4VLbHakW46ExtaJHcEVr5zyt/O9OPaap5qnbGmMr2l+jR+H8JGU4xMfoEWeOn4To7AzdOzP4NGSMZzsiIsdxAo4imppuTLxrIyL+4jy1k8UsrV72sKU8PaTVsMMHDnDB1tbo7qjncPCPD7vft0jVOyLGEzylvDE/QeXFssDhS0SB4+Qab702o2iWGovy9+YTnuNN3aT60wEuefHaTp5TX8yXssJl6ojoD6hgqYkFHhpv6ojo4xiDl9oi450nLkeD3fF4Qr1tM22kek6vR/fOTlw1iogMe71dOCA8hqvB3T2bPxbmj11U/CWaP7ZRN5fM/LEu88e6zB+b6kWSP7bVX231q/ljXeaPdZk/NsWLMn+sy/yxMH9s6rbmj3U9n/ljZ201ckt25RfS1W+VRWb+2JRDmz/WsQ3zx9q25fyxrTLH/mxzPq75Y1OYP9Z1ReaPbTQ1l+y5yB9rO59EbJE/du5D88emMn+s+/lF5I+dc2H5Y23nk9j0+dREMvPHuq6M/LFNv154/lgx7fOLTh6Li8of2/iJ+WNd2zB/LCv7U/PHzn24Vf7Y6tp6pPLHNpqdtthi/liX+WNdl5I/FphCtlX+2DOfQ/5Y3pg/1mX+WNeLM38sy80fe9bMH+t6keWPSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSdo2fAGZJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmStI34AjJJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRpG/EFZJIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSdI24gvIJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSpG3EF5BJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJ20jZn5vd9FHRlBe9u7quIZplLW8+HlcQLYoCok3TULSiguVFxgUr+j2K5nTGGjwnbSTOSdmjQ1cVnbGMzxgfOBKvp0tdazqleUvfOku9Fy/P6HvVFe4ct23xS0VEqgqTnTvnIXofVuAH61Xe+WQ4gWhb0inNW7w7duzgQ5dYCX+vopKf2bW5/dno8fXTfOii6EN0ZXEE0XKW7ixuT8o61UjunoPg3DxVwsmQit2mbtzX3fZyiD55z/0QvePMKYhec3A/H7p34ihEc2wnuQluGrrx5ue5gkqnAAAgAElEQVTm4NeIaGqqor3+gA69tgbR4ShxOd773vdCdDA3w5uDL3rXn4Poq19J1SAi/t3/839D9N/+u38L0R0LOyG6d+8ePvT9D9wH0f/tu/4RRG+6+WaI/l//5//Bh77hhhsgeustL4PozTfStj/+4/8KojfecCOWK77w7Z8P0XnsO973gfdBdMccbRsR3/LN3wrRD/76ByG6dHIRopMJ9UoR8cgjj0B0bpZ6h+WlLXuHPIt+/7yuYdOva2uJ/rTF9qjG3mG0ug7RP/+lX8qHfvr4cYiurq5A9Du/8zshOtdpGDf6x/+Ito2IN77hzRD99/8vtRj/5T//V4j+we/9Dh/69ts/DtGv+4ZvguiBAwcoepCiEfHZb34bRP/tv/nXEL3tla+E6Nd97V+B6AP3Uk8dEe/9e38Xol/+pX8Bol/0ri+B6AI27xHR4IzpHmze+c7iiUOWZTz8SQzbcGKxqYnY5N/+m5+ijSN++Ed/GKJrK9Tg/MIv/TJER2s0IIyI3/zt34LoT/z4v4ToX/qq90D0Cz//c/nQt76chhnXXX8jRE+dpuH9r/zSL0H0v//3/0HFitiFg5Cf/dmfgejP/dx/hOhf/pqv5UNzRWpwqDtcHUJ0cekMRL/zu/4hF2xpaRGiPKM/azAzfdLUZolh8NNHj0B0z+59EO3j3PbmAQ0SIuI7//bfgej6eAzROVx+6U3oxkyMuiJanOhldz8E0T196spfuy8xU7vrNE30+gU1lG/bRT3mXeUyH7quqao8mdG1zgpcDVuncdfcfOKCrPRofrp+/BgduqF7p8RliohYmKc63OL6TJZjj4ndbblnFxfsyYYmzvff/WmI7sZv/djqEh/6HS+nuVg1Q/X/k5+mgr3mttv40P0hTflP42LCcEgN+MwMLTW0WIsiotfHKjqiqUGGQ6MkXpNtpsXPfTjGTq3MEuu9wyE10RWu7TdDGnf99X27IfrQE09iueJ3Z6iG78Iu70t20qGXcGgUEZ/12tdBtF6jmvDjjz0B0dOpy5FYgOzh2maDS7L8JCVVgdemrdSdt3iNo5SjT215vfLP4iNH2aNm9nROzfsnH6Vq9hT2OzvOJHrbAa7eL+Ha5jL2p7OpZaUVXLOdHHkaol9yFQ0I//2DD/Oh81nqHfgpTpNTlBexk1W03HqMUfbKGp+k5Pg4L0usoEfZo64nw2HwJKiNffmAChYRd+N4cmEnXawdDa2QD7GJXhkllh8fncWV/x4Ve62ia/146jHNp554DKIzC3RzDXFUxgcuB/SVI6LA1Ut+fsp4aBQRs7M0s2jxW+d46yVntr89ofq/gJkJazU+e8X5Tp1qwItUcgJYwIWIFtvniCgybOu4otW0c76UEdG2OIrAxwpcQ8uSppC8/JiUyEzAb93DixURZcnPTy8+pyLHIV+WGhBOJumFo630cIGlxLltpNasWuwT+Vs3TaLv4MydPKgm4DQuFnZQ41+kzskyLjW3WDBuEdpO3o75Y2H+2FauxPyx8w7U2Y/5Y1Oi5o91tzV/bJoXSf7YVJv6vo2/mj/WZf5Yl/ljXS/O/LEu88fC/LGpUfPHOp6n/LF3bvh5q/srvYBzAU9Btxq8mT/WZf5Y1zbMH1taWuQZ/VaZY2dx/libNeaPdZk/1nVF5o9tNDWX7LnIH2s7n0RskT927kPzx6Yyf6zrIvLHzrmw/LG680ls+nxqIpn5Y11XRv7YpuH6heeP7Zj6+cUmj8VF5Y9t/MT8sa5tmD/WNM3U/LFzH26VP3b2c84f22hqLpn5Y13mj3W98Plj5z6H/LHZ2Tnzx54t88e6Llf+WJ4V5o91mT/W9RLKH0tNFSRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRdQXwBmSRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkrSN+AIySZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkaRvxBWSSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEnSNuILyCRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkqRtxBeQSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSduILyCTJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmStpHyyFOPbfpoPB7DBkUUF32wJmsuetuIqHHrQb8P0SynYrdty4dumxqik4Y2z3N6y1sWGR+6runQRYY7z3DnVcWHjqykKH4vPqFVQ4euE1vHBEte9nu08SpVo7xIVO8GS14UVAnLHhUsr+i+G+CeI2KSUcmvm6fNH15ZpT0H1cCImMUTvj6eQDQrqI4d3jnHh35iaQWig/lZiFZYzbhJqFItRoHN0dqYalFvjoo9HA750B95+mmILpdU8ocnI4j+yfoyHzrHZrbCGl43A4jyfVkWPfg1Imp802a9tg7RDC813nYRET/2f/yfEP3+7/9e2nmJ3dYy3VmLi6e5YK9/3esg+tGPfQyi4yHVk/kFqsARMRrR5svLSxA9deoERHft3sGHvvOu2yH6idv/FKLjEd22pz9FBbvrrk9iueL9H/ifGKcafODAPoiePHWcD/0bv/EhiLYtVcIC70wevUTEZEJ1uKop2hlZNRtDzfljtk2/9meotYmISU3XOsupUdi7fy9Ev+IrvpwP3cP+dGFhnnb+VbTzokyMNtmffvITEJ2foa7867/+f4FoXiTqyd69VMO/43/9BxCtGup3eHweEfv374Tod/2T76Kd4/B+xxxdyl/9tV/hgt1936chescdd0C0xG+dnOM1DY2iRyMaonCbkGF3m2Vtjd0xT+VaHPJVNdWT7/3eH6ADR5w4SeOuqw5eBdEf/IHvg+jS6TN86C/9si+D6Pf+AI0xPvzhD0P0aRxMRsSpU6cg+sEP/QZErz58NUR/+ZffB9Gv+/q/ygX7vT/6Y9r5r7wfosurdMLX1hOXYxEHZv2Sup5TJ2nw8w3f+M0QveZqOp8R0fJiwpZd+TNfZzKevgfsqCMi2j61hDyd+rbrbobo6WPH+NDvOXwrRP/07rsg+vpb6dAffOheiH7O7v1csEPXXQPRBx96CKJ/7rrrIbqUmiS+A09pjStaH7vvHoj+1de8gQ/96XvohN/2utdC9JEnH4dog9X7th71thHx89UaRKuVRYj2BjRm6/VxJS0iy+kPEmNs7It5DfCO9UUsV8xP6Hvx1PjhCVXC+dnE2s5HTy/SoTNqJ4t9NAJ/YJXm+xFx5+IDEF2c0NRgjDO1G/CW37frABcsz3g1mGpRr7MqstH6kCp/RGRYCYtpVeHch6fP0MVKThKzwJLj6s1cj3rbXzh2kvZcphZdsSb8BrYYI7x3alz5iYgP3knDe5441/MLEO33Et96PMLbp6EGJ8P1shoH92Vq9rq2NqUOb1wPmh3MwOZHjjyxVajlli6irqgO78c2AR9XxM2HqcU4ejwx+Lnh2sMQPfbkll85Iq6doZowwJMZETVObz98lEr+C8dp9bIoUv9zUuIxDVVCnhpXLe25xX48Iubntzwn8/Pz4y1G12dxM9iknprNzdPS6E68WLfspuWXyBMN+F+9hUab6+v0+On4kSchuhcv5exC4nL8NvZ6fwdXyIdL9DRkPU80VhNcA5/buweiP33kEYgW+Fw35wWUiF7JDRLh0ebcXKLF2LNrF0S5t23xhKcW+eLLrqZmdn1IXd6pVXoKWc7St34cHwVGxABHR3lB33plQtvOrdF6V0Tsxsvx+DLdtuOgnWeRnBDh7YPR1BIibctdQ1xAwgbIcfCTGmIkxhhtS1HOW2hbnkImzkmORc+xT+Ruq8HHQxGR8To256jwg93Ut+ZBSInRAp8fNXih1yeJ2zbDid7oEh52d+8788fC/LEtt78S88fOs7lKmT82Zc/mj3W3NX9smhdJ/tj0PfTKrX41f6zL/LEu88e6Xkz5Y5uc17mbPxbmj009tPljHc9r/thZW7UMvPgTEanlz4itJ3Tmj3WZP9a1DfPHqnHFXflWmWNncf5YPTF/bArzx7quyPyx8/5yWi7Zc5s/tvGTqWuA5z40f2wq88fOObfWehH5Y+c82/yxLQeH0w5i/ljXlZE/tunXC88f2zHt84tOHouLyh/b+In5Y13bMH+szdup+WPnPtwqf+zs55w/ttHUh/Lmj3WZP9Z1KfljgQ+dt8ofO/c55I/t2bXL/LEu88embGv+WIf5Y13mj03Z9lnmj6WaVUmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJElXEF9AJkmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJG0jvoBMkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJ2kZ8AZkkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZK0jfgCMkmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJGkb8QVkkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJ0jbiC8gkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZKkbaRsq3rzR1kJG7Rti9HNe9sop03P/gW9EC0raNOm80XO23GWQXQyHmOxom6o6HlBO2dN8i+w5BmeMb5YGe45Iuqmws17EJ3UtG2OR85zqoERsb4+gmiZc0XBCtykLwjgM3qoP4DoNRlFe5G4efBrxVzQxTrY70N00tCdFRFZSdfrwYou1rUtXayS7/mIGm+gQwP6Xh+bTCDKd0ddUfWOiAZvPb4B+njosqRLGam7vq4pOoM1oa0TdwcfOjCaY1NW5HR3NO0Yfo2IsqTvNT8/D9GVtTU8dKIVffzRxyH6D7/jOyH6H//jf4Lo9Yevg+hXf9VXc8GOPPkERB9/9EmIViO6d975znfyod/8ps+G6HhCLcae/Xsg+h//E52xiLj55pshetNNt0D0t37rNyF6yy23XkrBfviHfhCiO3dRFV1dGUL0f/yP/8GH/st/+a9A9OjRoxD9sR/7MYgmG/AnHqe7o8ZRRN1u2RzVbVOU592Ym3/NEu/erbCF58bqxIkTEP3ABz7Ah7777k9DdDJeh+iTT9Jte+2110P0wMG9XLCHH34Uoj/zUz8N0U3nf5Nv+Za/wYf+zQ/9OkRf/7rXQPT00hJET544xYfu9ajrefppOuEFduVFRh3i7j37uWDHjjwF0b/zt/4mRP/Vv/wpiPK0IiKahtr/QZ8GhLzvPo5A+v1+YrLFU56SmqOioOjf+3vvxQPH93//90J0fZVGEQ/cdz9Ey1Rjdd+9d0P0+Elqjh574ghE777rDj50jkPZoqCrWfGcPSj6H/7zz2G5Ys9uun3+83+izTMc537kT/6YD93gLLLA6VKB0+o9u3fStkWinqyurVJ0lUYRZ23V8Q16iWHw7OwsRHs4Z//Fxx+D6HJQWxQRC0s0gBnccBiij4+XIdrecDVEf3WYOJ8zx6gBn+yYg+jOtRWIVjhwioj+KSrbbH8GorteTgPdD62c5kOvX30IovfiaDPrUcHGBbUY95+iPUdE/yC1GP05GoHH8WMQhJHqWTwcnUzoe/WxU+O1m288fAPGo8TeeoxLQ8dxGHzL69/Ih+7hCef1GR6fnzpFBYuIhR7deisV3TvrOD7Pg4p9zQx1lxFx5Akabe7eQwP4O7GnTq5o8eionbbzqR928eJMRExwzarAvmM4wSkkLqvmeGdFxFve9GaIjsdUT8YVtQl8y0dEjsuAC7hGmA2px2xwfBIRt4xp89/92O0QffIArd7UvH6YwnOHiBjhytLOmS2HKMlHVz08aYur1Ca84YZrIPrAAw9BtB4lHl3d/QSNMd5xAy0hHsGpwZ2nEhPnYpVGmwUvnJbUgPPjvKQGx/fjIZ1S7lma1ExtbnbLTm1udn5tjUabPKjjZ5QRMTNPndrHClrlWMWdHx7QthHx/95zF+18zI/zaM/jGTr0cEiT7ojIcmox7sfnwv/1iYch+u6Xv5IP/ftHaFIzWToJ0bl5Kvb6iC7WcEhnOyJ6Peo8uJIVuDozGadmJX1+BkRtLE+6s9RjmoeXaNoyGVFX3sP1rt4Mnc/Fp57mgr3+MM1PxxX1xXuwJ78KJ5iRehr4WEMzUL4cqXoUgePknB/iY2/d4iPjPE88XeWn4Zw8k5iz4AA7IjIcHfV6icEPGE2oes/0kv9PIc4scPRe4TCYz2fiwBFNjaNobBOy1OTl0OGrIPrQg/dAlO8OfvaUfHQ1qqlNmMGkiKV16vK69475Y2H+2BauzPyxjTqX1fyxLvPHphzX/LFnf+gXLH9sqk3nbeOv5o91mT/WZf5Y14szf6zL/LEwf2wa88e6ntf8sbNmtnhUmnwGdEGTrS1GGuaPdZk/1rUN88dGoyHnj3GXNy1/rN0YNX+sy/yxrisyf2yjqaPW5yJ/rO58cv6nG8vwZz+YPzaV+WPdzy8if+wC/Vn+2LjzSWz6PKYNmM0f67oy8sf4Lu7aau5w9vOLTh6Li8of2/iJ+WNTotsvf6yZNFPzx859uFX+2NnPk4O6c8bTHmiaP9Zl/ljXpeSPBaaQbZU/1rSf+Rzyx/r93PyxLvPHpuz6RZk/lmWZ+WNd5o91vYTyx57dAF2SJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEnSS5ovIJMkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZK2EV9AJkmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJG0jvoBMkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJ2kZ8AZkkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZK0jfgCMkmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJGkbKb/pDbs2fZTnGWxQty1EJxhtM9pzRPyX25cgWgRt3hYFRPO24UMzPCURWQ3BpqG3vBVZ4h1wLZ7SuqVD886Tl2O2P4Bo1dAp7Zc9iDa47aSecMEKvtb4rcdjOmPjCUUjIs/p0EVO33ruqqsgemLxNERnUwU7efQERA8M6JTO7JiH6Km1NT50VtI5WR7Rtd57YD9Enz5NDUJEHNizh8JYw3NsT5rJGKJFWWK5gpubmQHdWdzGJupBRMavlcRzMqyonlRt6sbEU5rnVLAso29d9umEj86/qUede7wfFWyOpY6gckWvSNSEn/rpn4LoBE/4wsICRNcepxvzp37mJ7hgeUGXIw9u6Cj6gV/7NT70Bz74QYjy1dizby9Ejx07yoe+//4HIHrw8EGItjXd1vfcczdEe6kWo8YhSoW3/aOPPwbRE6eO86HLPl3Nf/2vfxqi3Iry6CUi1odDiDYV3raw7zaayXnbbvo1sPJHRIZNOBesquhbD9fW+dCPPUZX87ZXvByiDzzwEEQP7KcRSLKKXnP19RD9+m/4Joj+6gc+ANGbbrqJD/0Vf+mrIfrU0acg+p6v/CqIFnniWz/x+BMQ/f/9/M9DdPH0KYh+3/d/P0R/7Md/jAv23d/7PRBdWjwD0Zff9kqIPng/1aKIGMzMQHRmjoY3k8S9gyOQalJjSzg/j90WjjEqLNirX/1qOnDEjh07IboPB7qLp6ievOtdX8yH/pzP+RyILq+uQPT+e6lDnMELHRG/8iu/AtHFJZrU7N5Fo/cvfMcXQPTmmxMtxh2f+jRE3/nOL4Lo934f3Vnf+s1/nQ997bXXQvSpp2mm9gu/+IsQXVujWcloOOKCldjCX8jb6Jt6+iHKQaIVbXFS32Jve7SPSyh0SiIi9s/TKLrAWQnP43AZI4oZaosi4vD+fRA9cpLunWGBx04tK5UFDdsmJW2+hFODanaOD13jWLYZ0PfKcOWnGVH9P429UkTkuHmFp7TGbqnlTiuiKHEUjduOcQ2wF3Rj/tQTD+K+Y+/OzevDG+3CoexJrKFvqRL37a1BFenukychurZOU+Px2iof+pX7D0D0zuPHaOOGGjpeITzA07yIdbzrTz1yH0R7Azp0UoNtYdtMqcDnPpyboVsvuTTPKxWThoZt8yOK/vXraUazxNPPiCf/6KMQfdvrXgPR9THV/184RYOEiHgN1pRbr6Hv1Z/dAdH77rufDz0+RLPIfbhC+Qje9XlGVZTb2Av5gwbvrzrfMjqsEiOruqE9r+O4648fehSi1ZgO/fJdNLaJiBzvjiNLNEm8tz8L0QPXUi2KiN1z9Fhh13Ea3hy89hBEJ6lF1zuPU+/Q4rgt30utzVPHaKmBH3tFxPHzu61d54dGI1oNm52jy5HhqCwiqjHt/N23vBaiO+bp0CtPYYcY8Z5DhyHa4PLj3E6q4af5Qice3MbOnVSHG1ycvP7ltBD3sS0mSufsvfVWiM7hKPqBB6mJ7vWoEg4GfS5Ygw04P5tdXaMztraSeJzX69ONuXhmGaI4oUlMHCKixJrw4GO0PvM5b/tCiJ5ZpbHonjZRRe9ZpzH2eELN+8qQDs0zyIgo8Fl5mfMDC5zRNInnAiXOQKugWsiz8iyjmtDD54wR0YxwoscJMImnIYlzUnO3xQ9isJaVOCupUvkYZUGb84PdRGZN4uZInNLE5tg7VJNEAz4/R0uj89iA5zjpWcfcg6xNLdThk8QWqxk+1426U42+6Y3mj6WZP9b1Es0f26ibS2b+WJf5Y13mj031Iskfm2rT0+HzfjV/rBs1f6zD/LGuF2n+WHdX5o+ZPzaN+WNdz1v+2DMLgHNz0+fXnD8WEalnRBER/S0aNPPHuswf69qG+WMlr9hunTn2mc2n5I9NNkbNH+syf6zriswf22hqLtlzmz+28ZMt8sc+s0vzx6Yyf6zrIvLHznm2+WNbHWnqkoX5Y13mj3U/5+Sx6FH0IvLHNn5i/ljXNswf65e9c/ljmzLHzv6wVf7Y2c85fyzimU5tdnbKX5o/1mX+WNel5I8FppBtlT+2vPyZzyF/rNdvzB/rMn+s68WZP9a2rfljU6K4Z/PHul5U+WMXmmojSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIk6QrgC8gkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZKkbcQXkEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEnbiC8gkyRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkrYRX0AmSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkbSO+gEySJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEnaRnwBmSRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkrSNlHnebPqobTZ/slFRFBAdjccQreuMS5MHHbqpeWvaeZu3tGWbKFhk9AdlVkK0xi+VxCd8Ule0cUkvmGvrxAkd4tWcGQwgOqmoYDXWseQJyzL6XsPxBDemYJGqCBFYkbCaffrBhyA6uzAP0eFojYs1nu1D9IGGzkm2egb3nbge2Tr9Qb9HFfhDi0sQrRus3hGxRt+rLPDGbOhiNRjN28Q5KUs6dIOndDyi+67FtigiSmwx8pzunfF4nfZc0p4jYs+u3XRo3Hr3zl0QfeMbXwvRU8dPRTxy7teDBw5s+oPVtRXYfH6ebj2uRZNJoopOatr5qdOnIdpiJeQLXRTUIEQE39dNjcMAvpYtFTsimqCup5rQTX369EmIJtvv5eVliJ5ZpnrCJ3yCxeY+KyL++Y/+7xCtcfTD37ooEof+we//Af4DkOd08PFkyJsPsQEvcAADg4imib27d0c8ce6Tvbt3b/yD0yvU70REzoO6htrJnTvplv/mb/5mPnSD13rnrh28OfjgBz9Ix8W7MiK4ojU4qKsrahN++Id/lA+cYx0ucYzx/l95H0T5to2IsuxBtJdjR48t4Q/+0I9AtKoTBfunP/DPIFpndDWXT1ND17bJmkDXen5uFqKLS3Trzc/StvOzs9gGR47jc66iGY7pvuQvfBmFI3q9i787JhVd61/7EN22EfH+9/8q7pyGKD2cx43WR3xonp/yIGRxkeYdf/jHH4HoL/zCL3LB8pK+1+//wR9BlFcq3v/+X+dDL2D7X43ocoyGdMKXcbrUm5nhgnFbh4PNzxjMTD+rBd53yUPnOKn5lhtuhejv33UHH/paLNoN+w9CdOnUIkR3HNwH0fc//hgdOOKVOIq+ZoZawj07aRiwukrNe0TkeOjDV+2HaBW0LTd0EdHDCdOjJ49DdNfeqyC6vkqLJJ+oaMwWEevr9AcH9+2F6COPPAxRHtFFRA8HMFViSZb3TdvmqRn9BAcwR3BS0+K0Yym1rPTAhJZBRhkVbIKjsjrVTn5i8RRE+wt06w0nuISC/+fHmT4VOyJWcOfZAaqi4yefgGiFg4SImBtQcxRTV+r+7MMCJ4llmVip4DWWEle01vsU/YmjdE4O7admMCJ61x+G6F2njkGUW+DASUdEfApHmx95+nGI8vkczCfujj19KvkjV1GfWOK37jyMOk+Di9gRUaeeaKytUQeRbz1F5WJHRIYDmKsX5iD6OQfojB07ehSie7Cnjoh1vNanVlYhuprTEPpgakVrBfvTFmvR0zjuegoXJyMisE1gPIDp5XRjjnEeFxHHjp3XJrzs/BBPnK+9BlubT9/Dh+4XVPKrXvYK2nhpEYKreLEiYtBSv7YH27q7R1SLBkNaYFxcosXeiHj48Uchuns/3ZinTtEgIU91aqM1+l5LuEhy6BDVhCeepC/V7ycK1uCzrfWK5qczA+o7brju1XzoQ50HNxv9+gd/nzbGZ7ezqQcDt2GLke2mh1P5ozSK6GGncyg1XZqdp76j6lOXN1rArhybsog4jbfenr3XQ7R9/EnaNY7eI6KHl+M4LlV8Ch9n19h3ZKn/k4+fn7Y4XeJtm9R6b4GTmpb7RMxMaHHpM8f5fqQe0+cZVTN+OMXDqkg9pq8qHhDSty5Twxs+pSU/uuKC8Tg2WS5+NosPYhInvHO2zR8L88e2cGXmj523o80fmD82jfljm5k/NtVlzZkv8IQAACAASURBVB+b6pFzP/V7512Rjb+aPzYlZv5Yh/ljXS/O/LEu88fC/LFpzB/rel7zx/7sGNP3wPljkX5cHrF1Fpn5Y13mj3Vtw/yxyWTC+WNbZY6dxfljRbTmj3WZP9Z1ReaPbTR1dPfc5o+d/8nUbT/zofljU5k/1v38YvLH/syF5Y+NO5/Eps+nLiyYP9Z1ZeSPbVpvvOj8sbOfc/LYQo9GqheRP7bxE/PHurZh/ti4mpzLH9uUOXb2h60mzmc/5/yxiBPPHGjakzvzx7rMH+u6lPyxiJjZenB1fv7YM7P7V77yM59D/tihAwfMH+syf6zrxZk/1rat+WNd5o9N8RLKH0uURZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSdIVxBeQSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSduILyCTJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSthFfQCZJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRtI76ATJIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSdpGfAGZJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmStI34AjJJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRpGymbtt30UZaVsEE1qXGHGcT6gz6Xpm1XKJzTzsuMXqY2qca458SL2Nqqgei4nUC0LOlb53jGIqJu6NBc8mpCBWs7l36TsqSaMBoOIVr0enRo/FJNhl85oiioYNHQtW5a2nmdJc7JuKJTmvdmIJrhoaOlO2sGa1FETEb0rflr5VgTWi52RJZRyUdVRYfOeeeJQ/N9O67pexXYYmQZ3ZhtVuCRIwraeY6bZ1iwHJvBiOj3Z2nzktrYIlH9E+GipLJxJVxeWYbo1ddeDdF77rpn46/Hjh3b9Adra2uw+cHDhyG6vr4O0axI1ARuZffu3g/RxdOn6NAtHXqAbVFETCYjiLZcFXgUkHqvaZG4fbA5qnGMkfrWdU3dVo0tRoM3ZtNie5JoyaKpqZ3slXTGmgYvFrZFEVEWA4jWWPLrr6d7Z3l5kQ+dYV2paqpng96mYcAj5356xctufPjRRzfGNv168OBBLtjcPF2O/oCGN70BVUIeTEZqZMU1vMLelkfvZS8xxuhOFs6L1tSeZC13W4lOLcdbrx7TKeVdz2J3GREjHPJxY5Vhm9DibdvjUW5qKNvL6GreeONNEF05gxOxiMEsnbR9+/ZAdDSm8/nQQw9w9FW3vQz+oMGL3cvptp2fn4Pogw/eT7uOaHCOmeM4YQajeUHFjogM++MW2/8eD2AG1DVExATnmKnBKkVPnzgJ0V4/0dG32JWv44CQi/3kE4/xoWsewGArOod3Fo+hV1K9bVlSRZqd3aqePNPOHNh/YOpfPPLgQ3zoCd71vD5z/7GjEF1PLSutYof70FObJwsb7dy7G6JPFlRPbrr2WixXnF6jmcUpnHdMNg9+znNw924+9KnFJYgu4zjh8RN0Oa695no+NF/rm6++BqKPjWiMcWxIN3WdGgb3Zqit4xYjy7Erx4sVEQ0uiM1iI9zH7zU7vwDRMk8ULDF9xeYox0niXGpFixcbclyf6eMJryY0wI6IPraTPCMa4Pp5UdLFKlJrO9yAt3jKauypuQZGagQ+O23Kc+7DHQs7YNv19cRoc3aWNseKEIGjmxzH5+u4QhIRWU6DkD7Opyq8WEWWGPJVOPgvW6qEA2zoKp7wR2KlmmW4yhG4LpR8YHHi5PHuhxvn+X384vnWq5d9XNiM1NT4wTF96weffBr3jd/6yAncNjIseYF9x56dVIvuS9WCBof3TdDOs4q+NS+/RETNc3butnKqhPw4bzSiMVtEHLzqKgiVGTU4y2t87/CRI8e+49ceuguip0/TcPHhxx7kQy+doXXs5ccWIXrt1bg4X1FXvl6kHl2V1CBMTp+GaIFjDO7oI/UMlJ/Cr4/wwS4ugiwt0aWMiDlcBmnxkdzcLHWIR56iiUNE7N/3Jog+9gTVohpbjNEgcTl+/jhNA1tswK+ZpanB2jpV0R39VFOGTcqpdWoxcHoaN+zcxYc+iiVfwYq0uET3TlUlOo/5hXmInsRrXWEVzfDuwPFgRESBy2U8is7xeiSHfDyLzPBJOi/TcYuRfJzHD3F42JZ4ppCclWACTIZR3jk/SYmIuRmqorNz1BLumKPHvmt4y6+uUGsTEYf37oPok7iYdjK1803MH4swf2y6KzJ/7Lw/7MzBzR/rMn+sy/yx6Zu/OPLHpjp+7MRWv5o/1mX+WJf5Y10vpvyxTR7Z+Iv5Y2H+2DTmj3U9b/ljj5z7aXZ2+iol549FxNb5Y89seM310zM3zB/rMn+saxvmj2VZu3X+WMTWmWNncf5Ylrfmj3WZP9Z1ReaPnXeUaRfuucgfazqfRJyXP3a6+6H5Y9M3N3+s8/lF5I+d82zzx7bKKOtNW1U2f6zrSskfO+8UXXj+2MFpn1908lhcVP7Yxk/MH5sW3Xb5Y3VdT80fO/fh+fljj5z76fChfZHMH9to2ok3f6zL/LGuS8kfC0wh2yp/7Nznm/LHNp79/fv2mj/WZf7YlJ2/OPPHstb8sS7zx7peQvljqaohSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIk6QriC8gkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZKkbcQXkEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEnbiC8gkyRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkrYRX0AmSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkbSO+gEySJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEnaRsqi81EdFWxQlPTOsrymg42Ga1yarM0givuOOhrcNQWbCX3liGhrOnivP4MbtxCcNPy1oleUEK1x87LoXt6N5aKCRUSW0VlrcPOioctR5lSL6jZxTlr8g7rFQ2MFrqoJH7rAUzrT70F0Uo0heubMCkQHM1jHUvr9PkRrvFhNqopyRcoLOicRtG3G921Eg/Eio4uVYSXkW57PZ9JwfQTRwWAA0aqmWhQRs7NYtobveqoJefqFlbTzEu+OqLApy+lSXnPNNRGPnv/r+cXCKjqDN9dofRWiq8N1iEYEN2ZZfvGXo9+jc5In9hz9Pm3OLyedjKgCZzn1WRExmVAdxvsyWmzeW6yBEdErsWwZXa2cS4Z3Fvc7EdFgW9ZyX4z1ZNBLNlZUcm7rRiMa1PEQIoIreJR4sXbs2AGhuhpHLJ/7ZPeu8/54ZiZxTirsrCdYsBz7nXFiJBuR00njU1rgcJHHwTxcjIjJhEZHWUs1PMP6zyP/iGjxD3oF7bzJqJJxsSOiX+CNidvmUyZYz+BOLXnvNDhsS7SiNW3b6yfOSV0NITocUpT74n5Jg4R+2RuPaecFjjaXsbHi6l1PEj1LntOh86Aoz1maxPQ0cegedsc8C5yfn+NDVxUVrsVBSL+kRjjD+64eJ1rRdRyiFHhz8ZdKduUDbEh7PbpYJbYYVx06CNF+kejUhrgCMzt7/RaRO8/9dPddd039i5fdfCsfeoSXg5dQ7sBLvVbP8qGHA9p5EzjlX1mE4GTpJESv2rOb9hzxNI42e4cPQPSxIS0X9NaWIRoRVUE35mD1DESzOTqf9598mg9dYnM0X1PzvsytDd47dWrizDfmy1/xcoguLS9C9I//+I/50LfeSrfP/Q88BNG/+rVfC9EjT9HluP76G7FciTHGL//SL0M061MbOzNLqxwRkWfUzO4sd0J0aZkq8MLOBT40d8fjITVlLY8nsd8ZzCSasjvuvBOiEyz2617/GoiOx4m74/TpJYhef8O1f/bjHd0P9+7eBdtefegqPvSZFTrhfVxWGuPgvx3znD2xjpFhgzPhWTmu8vEoNyJy7LVKbMpGNbWiqRl7TGo6dmI1ODGpwYuFbVFErK0lHjAV2KTsWthyPSH5rARncpHj7HXMnRouF+RZqoriRI9reF3jIx5s3iM9xsa1TVx0alML0XlG9b9p6YTjzREjnCQmWwyYWVRVNTc3D9sur9CgrsUvFRHHjh+F6DXX3QzRI48/AdEzy6f50ImHs7iIsnRmEaI5rpVVuM4cETkulw2wZxnhzqthatKO670zM7hwhNWMnynvSD264sV5bkLXV+lZyd49NAyICF4FLPF5R1lRLeJHxhGBW0eB1WwRx139OVpCObKe6LM4OYGfRw+xp34qtcA4xmXVYY+iR/GMFamB7kmcrJVYCbmr7vdw6Z6XTSNqHgnwCjqe8Ay/VERMsCb0sDuu8XF2g/WkaPkJfrT4rTPsrHlkxUOIiGjwe2X4SK7ggiX6rDizRBMibBJi8QzNT3mtrEmN0J986gjtHNexn+3w3PyxMH9sC1dk/th5xehUZvPHuswf6zJ/bAuXMX9sqmeSyl72spdFHD//188wf2zqDiBm/tgU5o91XK78sS7zx85uDTHzx6Yyf6zrUvLHPlOALQaNnD8WF/BkLSLaLcYS5o91mT/WtW3yx55ZxTp44MDW+WMRW2eOnTUtf+yejVHzx7rMH+u6IvPHIh4799PUXLLnIn/sv3Q+iTgvf+zD5z5805veePYH88em2vb5Y89U0be+9c1nf7jg/LEpLix/7Fjnk9j0eTFtnG/+WNeVkT+Wnf/rReePnf38opPH4qLyxzZ+Yv5Y1zbMHyvLcurM4tyHW+WPnf2c88c2mppLZv7YlM3NH+tufgn5Y4EpZFvlj537HJrJNjN/bFrBzB/reJHmjxXmj03b1vyxjpdQ/lgyIUCSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEnSlcMXkEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEnbiC8gkyRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkrYRX0AmSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkbSO+gEySJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEnaRnwBmSRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkrSN+AIySZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkaRspm2zzR824gg3qrLPBBhm+0azXn+HStDGmndORo2laiOZYsLalbSOi6PUhygWrmxq3TbwDrm4biJY5bT6p6dC8bUSMJxPavCggWlVUi1r8UllQNCIGgwFEh0OqRWOs3r2y5EPnWEXboBNeFHTCi4wO3dR03IjIc6qFTUPfusHznWPBIqLFepRhNcvwtuVaFBEZ1cFoWqyENZ8xrKJ8z0e0Ld/1tHld033X4hmLiPGYqsoEKxJ/q9m5WT50hkX7ju/4doj+1L/8VxC99957IDoarcKvEbG8vPmTjXYs7ITo3I4FiL7sFS+HaKQqUr+gm6uPPeb6+jpEezM9LliNBZsdzNHG2J70+9RdRuq+np2lanb0+DGIzswkDr22NoToygqd0gzb2JWVFYiur9KeI6LoUU04cfQoRHfvoiq6jh1iRDTY4VY4DJgf7IFo3ktUwuGQdl5jZw31ZHZ29szyeRcrL8/7lbu8iMhxyBejEQR376T2ZHl1mQ+9Y57q/2hEV7M/oGIvn6HK30ait+3hfV1hz5Jjl5cnep5Et9U2dO8UJe180lANjNTsYJDTofMS5x04Pk9NShI9S1VRdGGBWoxsguOqSLy5mkcgO+epZ1mp6WvPzMw0FU/0cNiW0wnPg/ac8eAmoq3p0HlBh+bZa5a6O3jW0vIAHbWRuDuyjOenVJEGA4q2NTZHReKc7FygapbjrGSEzXtgPYmIGmvCeIw7b+la9vBL9/uJCz0cUsHqinqHs3bOzk/9vEhdjsQaC06XBjg0Wk1NjQu867ngE5yL5XjbLp45jeWKssRmtqJ6MoP3/HBI851ILaFghxklrmOUuAYSEZOaqtkY750Cm7IMB5sZLxZELCxMr9tn3fXpOyHaVFRP8IRFpBqcldUzEN21B0ebyzTaPHmCphWRmqkNBnTG11epEs7OJlaDV84sQXQG1yL6iZ4l0VjlJQ10+3g5EwtHeMsPcPQeEQV2AG//gi+E6BpOA1fXafYaEYdnDkL003d85u545bQP77zzk7Dt2z73rXzo2z91F0R3LNAMdHmVvtfS6UWIzuNINSL6fVyz5TXwhi5HkVpgjB5VwsSyUkG37QTn+xExg9PA2Tm6r3kYsHvnDto21bOsrizyH1x79aHOZ/ed++nRBx/YasPjR5/iPe/dsx+is7M8FqVr/ehjR+jAqXpS4xp4jUPZGh/xNPhgKyIKXPzJsBXlaJt6QtQWOJ/C5YIWh4uf9eY3QnQpNeTbsfVi8o4dC7P7qf6Pxk9C9Bu//hv40EVOt+14TN/6bZ/7Foi+//3v50O3OGfnNmHv/r0QrXCFcDxONGU1DuBHuDk/uuUHQBFR47fmJZQdO6ie7Nq1iw/NSuwdeNzFD7Z4lSO9OS4N5Xg+m2R/ivOOFpujPraTazgMTi20JZ6uVjw/xYWjpVOn+NA5rt7UeHfkiel+clkJOybsMUtcLuDbNkutunJjVeD15DXwZA3NsZpxIslMH2/bnG75JrX8iEuAkeMKS4OrfFXqpPDyY2AFDnze0eD6eUTMzVMjPMYFgR5eLX6SmJeJZ2qDOVrHGFa0c2wFo+yM7c0fC/PHtnBF5o9t1M0lM39syp7NH+se1/yxqZu/OPLHpjp58vhWv5o/1mX+WJf5Y10vzvyxKSUxf8z8sal7Nn+s43nNHztrqywyzh+LCM4fO2urVC7zx54t88emuSLzxxrOH9sqc+wszh8risz8sS7zx7quyPyxjaaevOc2f2zjJ1Pzx3b8Wdto/thU5o89U6TZzxTpAvPHprqw/LH3dT6JTZ8fPLSvu7n5Y10v5fyxk+d+veqq8y73ReePnf18WvLYM+69916IXnD+2FLnkwjzx6bZNvljJ879dMPLbpyaP3buw63yx6655ppI5Y9tNDWXzPyxLvPHui4lf4z/YKtVjnOfw3OxLMvMH+syf6zrxZk/VkRh/tiUnZs/1vESyh+7+JVlSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSS85voBMkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJ2kZ8AZkkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZK0jfgCMkmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJGkb8QVkkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJ0jbiC8gkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZKkbcQXkEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEnbSNk0zaaPsrKEDYomg+i4mkC0blouTdvSH2QZHbrAYjeT8UXvOSLazlnaqMLvlfX6EB1PRnzooiggWvLFwu9V45eKiF45gGhVUcm52FlLBcvKxOUocjxpTU07z7ASps5Jv0/v7Lvm6qshevLECYjypawq+lIRwVV4MqkoXFG0KBKXI8vonHRbmI3ykrbNMjonEZHnVM3alk8a1YSmoYK1WaKe5Fj/+5dwrcte4py0NW3e4G3bH8xBtJ5Q8x4RvXlqMa47THcHN/4Hdu+H6Hht/bxidE7v3MwMbH761Ek69EE69N69uyEaEeN16nqqiirSYNCjXRe0bZm6dyYNXU28LyNyKth4PORD93pUT9bW1iC6Z+cu3HfixpzpUU3Yt+8ARFvu6BO9beLeyXNsRV/5Ct4ctHmiAa9GVEW5Ab/nnnsg+qpXvYoP/dGPfgKi/T6NnXbsmIfQmeXZjZ/Mzp73a3LINxhQFT1z5gxEb7nlJogOh1S9I2Lnzp0QbXHsxB1eht0WX+iIKAq661sc/PO2TWp4w3cHa3hAmNpxw4NVHk9ip8Z1rK4TLQZfruE6NcILC1THahxCRGokcHKR+tOTJynabnlPR0TMz8+vrq5i0chf+aqvhujLXvYyiL7qVa/hnZ84/jREV5ZPQ5Rrd4l9VkS02Ovx1LjCqUHRTxy6hwPdMdbhHO+OCdYxvnciot+bheioxgUB7OjrxLQiMQONoPbkT/7kTyD6he94J0SLVCN55IkjEP3Jn/xp3jwiysH0+jCHE4eIKPBbD3F9ps3pcrTJBhwPXeNEb5LomHA1bJKoJ6MRzcVGfbptyxyjeMtHxAin/BOswCV2iG2qQ+WJXg8rUonTkqJH0UGqovBywfrqCm3c0PlMzOMirr76WoieWaYu7+pDhyH69i94B0QXFhawXIlzMj9DvfVwnYrN45OI2L8Pp/wj6h0qbN6TGuxPqzFd64V5GllVeGd9/OO3Y7nif/vu74LoY088CtF9+/ZB9KMf/Sgf+tc//Fu086vOTZwf7364D2c0b3jtG/jQX/gFb4foba96NUR/+7d/D6Jf+ZVfCdFPfepTWK648Xpa0eI5y3hMVXR+HsfByfkUNke8OM8PcSLi5KlFiN58880QffLJxyG6ukzT6j52iBFx56fu6n64GB8/9/NVe/fA5nBaypLOWEQM5milYnaOxqK8PtMUOBatE3P2BoeyeU2HnsVKOJ4kGvCyxF4PF2AGszTvKLHyR8Rghv6Al5W4nXzZTTdCNMNnChGxa8d5w5uNK0Eve8Urjj52P2z78EMU3b1zBx96aZkGMHt20a2xuESPrvq9xLdeXaGRADdWu3bQEGVxcRGiyWHwwizV8EtpRddTq3y8bjTYYp511v4DeyG6NqQLPYdtUURUFd3XTzxOY4zdu3dDdGE2MWefjOjQhw/Ryn+T06V8Ame+EYF5DYlrPcCnSxVOAyc4EYsInPtGW+DzU26OEl1HYkF4dpZmahkWLNFepPBiAi9JcceTXHTlBwepBRg6n8mJc/ex5nlwbX+mj3c9DhIKvJQRiSUYrkW8GtCmnpr1+zwMpkPXE1w1TT0/5RXI06eWITqp1iE6HOLcNnXb5ks0ih7xiBEvddt5vmT+WHLPYf7YNC/R/LHzDtQdw5k/1mH+2JQtzR+b5kWSPzbVphSyjb+aPzZlc/PHOswf63px5o91mT8W5o9NY/7YtEM/j/ljZ81s8d05fywizB/rMn+sy/yxrk35Yw/Hd5z7+R9++9/n/LGtMsfO4vyxucGc+WNd5o91XZH5Y+cVY9qc7tLzxxY7n5x1Ln/sT+NXzn349V//9Wd/MH9sqm2eP3Ysfvfcz+/+819y9ocLzh+bFr2A/LHFeN+mT87a+Pnf/7vv7W5u/ljXSzd/7CPxjed+/eEf+r6N0QvPH9uYMxYRX/nlXxYRn7j9Dtj2gcRzlmedP7bxE/PHptgu+WPPtKvvfOcXncsf25Q5dvaHrfLHijyLVP7Ymzb8fOzoY90/MH+sy/yxrkvJH4uI5TOLW4W2yh+b/Nm5gvyxyWho/liX+WNdL878sTwP88embGr+WMdLKH/s4p/KSJIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSXrJ8QVkkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJ0jbiC8gkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZKkbcQXkEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEnbiC8gkyRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkrYRX0AmSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkbSNlUfY2fTQajmGDLM8g2mQtRZtEadqgv8iyEqJVXUO0bijatlTsiMjwRW1lUUB0UtH57Pc2n/9NqjGWPDCKJ7woE6+fazPavizpckTDNYEvNBYrIs/phO/cuROix48fh2jynHz73/4HEH3okUcgura+DtG6okuZPCeD3gCiVVNBlM9nXlI0IobDIUQnI6r/ecEnPHE5BnjrnT6zBNFeTjtfWV2jbWfpbEdENZ5AtMb638c76+TJE3zoufl5iB49ehSi1Rgbq4VZPnSeU8nHY6onvR5dyvkdcxC98cYbIz52/q/nOXGcTtrKCl3r0ycXIXrXXfdCNCLq8QiiE+yY8ppa0fURtSc33XQzF4yb93UcBuzeQW1sUSRaq507qZ6M8HvleNsmeqWU8Yhu2wL3za1oPaEWOCJKbAlb7MvLso8FS7SiNQ7bEn0i1iLu6JO45NDa5Hl56OChiAfOfXLo4KGNf3DkKRoGREQPK9KuhR0QzbC3npmZ4UOz9THdHXglo4ejzSI1yCh4tIl9MbcJg16iZxnht64qurn6fbo7CrxtI6Ls4bwDh/ctDmD47ijwfEbEzAwNQrgSzs/SCc+4GkWsr1OnVj1N52Tfvr0QfXpCPXWv1xsM6HLMzdP3KgdU/0scgcylhnw7dlCbcOL4ExCdx5FV09LZjlSvV+R0NfM+bdu0dMtHRMMDGK5H2LFw9c4Tu47RaJk2x768wjEb15OIqFpqjsa487alEUjOLfClvVB+foHG2GftmJs+uVhYWOAN3/zWt0D08z7nrbg1tZOPPfYYH/rw1VdBdNdOKvlkgvUf29i2TfSniWUQHnYlDp24O8rEKJraybqiYidHmxUuDfV7tPkIFxPqCUVX1ygaES+/7TaIHjnyNER/6id/AqJzM4nhzV2fvhOiO3ftgigvodQ1feuTJ49xwfYdoM565266d86cOQVR7scjYjhcheikpja2rXGBBQeEkbp9EuOyjFqMPva2owktRETEaEJLKJ+++y6ILsxzQ0f9TkRMhtxtTTlj5z7k89nDcxIRMzM4gMf1yYUddOv1sSvv9RMN+NwcDVEmFZ3ShQGOVFNLKC0OzGZwsNrimK3sJeany9hE8+CIB3VtTRd6fi4xPkn1PDGPs4N9B/ZvFarx6VJEfO1f/VqIvvwVr4LoGMcYB6++hg6cJcai/CDm5Clq/xNdObbAETHEge4MNsIDvDsar4mdUQAAIABJREFUfJwRETy16OPw5tTiSdoWH4AmpwZry6c3/vrghp8PX31o5TRdji9+17sg+vmf83o+9DVX0e1T49VMrWi9gw9d1VQTuDt+Gh9Y8LxjMkpMnOugu6PC5fcWK2HBw/eIwHWnCvuOo7h6edNNX0LbHj3C5fq9209D9PTpX4Xonj27IbpvD62QROqu/1++5ssgyk/hD119gA/d4wYHL8eJY3Q5xjhdqqvETO2Rxx+HKD/OW1ykB6DHj5/hQ59YwtV7XPnv96mNHY0TDTiv6JazNEQpsYmOoGiW6k9z/NZFQd+aF534iUOkGuEMO2se3pdYsBqbwYjIsT/lpozPWJYaBlecNYGDnxwfbLW454go8HqtDy8+2YMfmhWJlInEyhE/SWT1ZPO25o+F+WNbbX4l5o+dt59OV2L+2JSo+WPdbc0fm+ay5o9N9UxS2f79+zYGNv5q/tiUnZs/1mH+2BQvyvyxLvPHwvyxqQUzf2zKts9j/thZW2WRcf5YXMBz59g6Hcv8sS7zx7rMH+tqcCzKz3EWFhbMH+syf6zriswf22hqLtlzmz+28ZOp+WPnPjR/bPrm5o91Pr+I/LELjHbzx7bKKJuaSGb+WNeVkT82N3ferxedP3b284tOHosLzh+r4p9u+uQs88e6tkn+2B0bfv6sN7/pXP7Ypsyxsz9slT+2sGNXpPLHIv7zuZ++4t3v6IbNH+syf6zrgvPHpg/PIIXs/Pyxh879dOjwZyZom+76lQ0/Dwaz5o91mT82JfqizB8rip75Y13mj3W9hPLHLmnBUZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSdJLiy8gkyRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkraR8nIXQJIkSZIkSZIkSZIkSZIk6QX1ub/1h5s/SW2yHv8UoocvqTjS8+7tl7T1KPUHixC7Pb4Rol/x1bznB1KHliRJkiRJkiRJkiRJFym/3AWQJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmS9MLxBWSSJEmSJEmSJEmSJEmSJOnK94df9LmXuwiSXlAf+wtvv9xFkCRJkiRJkiRJkiTpxcsXkEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEnbSHm5CyBJkiRJkiRJkiRJkiRJkvRC+MMv+tytQg89+hBv+21/429D9KFHHoHo2vo6ROuqhmiWYbEiBr0BRKumgmieFxQtKRoRw+EQopPRmHZe8P+hm/gfdgcFle30mSWI9nLa+crqGm07S2c7IqrxBKJ100C0X1Ja78mTJ/jQc/PzEP3kJz8J0aqiejK3MMuH3rdrN0R/5Ed+CKI/+IM/CNG3vOUtEB2PRliuiEicNEmSJEmSJEmSJEmStrOyrttNH+UZ5VVkmHVR1JQYkWGeSnLnbXvxOy/wS0WiXBFB+TtjzLrI+UthKklEFCUdusFzwsVu2kR2Tjum7zXBnKS5mRnadkQpR1kqW2p9jTavKjon60PKZ1pfS2Si/OiP/jBEX//6z4Lo3Xd/GqI7MPkmGkovi4gKK1KG1YQrQpmlblu8Xon6jRW4TdWECrPuygJfsIintMQsrjo2N5ubcCYWtwkFfuvhiNIQI2Lf/gMQrfG2rWuKjjBTMCLyPfS9vu/7vg+i83NzEP3YRz8K0f3799+w4dennnpq0x+cOnkaNl9fp++VYwu89OQyRCOimlAq4eLiIkRnFygXcB4zBW+//XYqVsSePbspjD3m8aNPQ7TAtM6IaFu6ffju4Dsr2XfwzhtuRRM7p20LPG5EokHJsBHm85k8J21LLeEIszO5nXzwwQf40P0+X2u6MV9+600Q+tSn7tz4Sb1pVNDSMCAihkOqZlVFN/VHPkaN1WiNUpMj4tDBqyA6HlPJi6IP0Rq7vH4/8T5iTjQfY84015MGb+qIaPHm4hqeujtSNyYOUfh7Ma5FPHqPCG4zRkPaeV7QznM8YxFR4j8q4Oh1N94A0T37dnF0+VH6VwEV/nOFX/vAByDKk8Rdu6lgEXHi+DGI3nDtIYgO5ugfJPT7dFNHRIb/0IIv5uw8jbv43omI2fkF2hwXBMoetgkTaqyKXmKM0R/QKZ1gY9XDAQz/84+I6GHZen2aGj/4wIMQ3b17P0TLPNEWnTxFw+BJqhGOiOtvunHq5+v4j6MiYm6OvvW4pstRZFQJW5zRREQfqxk3wom5LR66aRMNeIY3V9vQTc2VsCgTnRr/3wPVBE8pnhP+t2oRMRnjGkvToyMHtQk9HEyefnLzrHCTPL8NonNz9K+nZgbURC+dpvsuItbX6Zzcdtth2jnObY8PqNj791N7EhFPPvIkRHcvUJ+4urIC0Xk8n5GaOPMcs8F1oXGqiib+RSUfGm/MtSEtF6SWcxP/LvGWm66HaB/7nT/8o4/woQcDujHzfEf3w10Ln/nw4MGDsO0MrhVHRA//lWkPpwZ5g7OSnFrgZpL8d4k4K8Eo/4PhMk8M+Qpc22xqKjkvRfD6eUTMz3ITTae0CLr1ej3ac4+XcyOuvWZKO3lqw8+zs1TToC7Mz9IgOSJyLBtPiAKjBc7UKqzAEVE0uHM89ADnHXWTWpwPuvXaHFf+cdss8c/Oo67p5soLqmYNjkVz7OiTiwGzM1vOSmZnBrt274Ftswbn+6nnAidPUJswGtPm3IDzkmxEFHhfF3w1eRSNPXVWJlrRHOeneKmjqqhgyXWhCqtoizP6HvbFvI536KrEkO+Nr70aoh//2J9A9A2vfS1ET508zofu5XRKB/jWhrbFSog3daReRbGON9eOOWyiuYVOtN+xfzctl52+nkbgbcuLJKlnyjV9r5XVVYju3ftOiPLEOSIxx+Sl5h/5sf8K0T5OiJLrXRlWUb7rOcpPpiL1CImTa2Zn+VvTthX2OxHRw+0L7G15oQKXQCIiMuwdal75xxF4Iisi4swZmt5WWLDEIwnsEFOrSlHhQ/zUxSTdBSvzxyLMH5vO/LEu88em7Nz8sQ7zx7qe1/wxLlg3f+zpp5952mv+2BTmjz3rnZs/ttnlyh/rMn8szB+bvq35Y53o85k/dtZW+SScPxYRnD921lZZZOaPdZk/1rVN8sc21qp7772H88duuvkWiHL+WNHvmT82Zefmj3VdifljG03NJXtu88c2fjI1f+z40c90VeaPTbXN88c2Ng3Hj3/mme9F5I+d82zzx7bKKJuaSGb+2JRiXRH5Y5t/veD8sVPTPn/0sSdgW87DusD8sY3fbeMFMn+saxvmj5Xl9Pyxcx9uzB/b2E+c/Zzzxzaamktm/tiUrc0f67jg/LHpyx2QQrZV/tj87GceZED+WC/PzB/rMn+s68WZP1aWpfljXeaPdb2E8seSy0ySJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSrhy+gEySJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEnaRsrLXQBJkiRJkiRJkiRJkiRJkiRJkiRJkiTppW35e360++Hnfg9v9EcQq7uf/PCPn/v58WmbPP7e74LohbuPw599aXvfhv58Iv6B5+3I5V/a4vN/8TNnf3jt83box+P/v/mTv/uPn7ejSZIkSZIuRn65CyBJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiTpheMLyCRJkiRJkiRJkiRJkiRJkiRJkiRJkqRnbcePfPflLoL00vbq//hTl7sIkiRJkrR9+QIySZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkaRspL3cBJEmSJEmSJEmSJEmSJEmSJEmSJEmSpJekHT/y3RD94Id/C6JvfOPrIbowMxsR9Q//+LlPiu/9jnM/X3311Wd/ePy933Xuw+t+5l+c/WH//v2w54hYXV2F6Ktf8yqIPvrwwxCdn5vlQ2eRQbQoCog2VQ3RPOcjR57TzjM8dK83gOhwPILon37sY1ywL/y8L4DokacehWi/PwPRP/yjj5z7ufwXP3Pu5+q73nv2h7vvvhs2n0zohF9z+BBE3/zZb4qIx//uPz73yXU//b9v/IOdO+Zhc0mSJEnSC6Cs687Ej6bt0UyaSzhcYtsWj922Le26mkC0runQ1Zi2jYiioENHSwsKkdFyBX6ns4emndcNzduLkg5d1VXi0Dm9ny7P6NBVRTsvikt6813TcEWiaJbRGU+tLEVd0+bj0RiivV4PollBlR/rb0REv9+HaMvXusUqmlxuwxajxMW4pqGNJ93W6Xy9HlUkbjEyvDsarN4NVoOzB8cYXY6Wz1jqts2w/o9xBTMyOvSOHTv40KvDdYj2sKJUNd07h646TNFDh+DXiNizZx9sfvJPPgrRoqA7K28Td2YPG5UGozODOYjunN8J0aPLR7lgfOuVJfbFuAaPO46IKLEmZLj5YEAL9ElTBjwbD13ikwMsGZ9PHgZEJIYCiaYMC8ZDiIhosYmvWrqpZ/hBTpNoJ7nbGg6HEH3syFMbf73t/NDqaG1jdNOvDTZ0EVFjKzq6hOHNzEziyRn39RM8pb0+3tT4cCv5XC3D23Zmhi7leEzNe473XUSqTeGbC+tglRpj8DCYb70cz2mvR98aJzQREWP8i/GEbts5fJo4M6CRakTU+IB2dY2eOp85swzRJx5/jKM8+C8HdLHWcXxS4oVefvwJiEbE3Bx11rffQc9fX3brrRBtWjpjkRrycRVtE3dWcr6PO8d7L8OmLJEiwHd1at6R4bWe4Bibb+qIqHCRZH1tBaJj7Fkeevh/0J7X6b6LiNmZBf6DpPWV6VVxOKHmPSI+/OHfhOif/NEf0sa4yrG6TuczIuoJndKFBRpFR86jMh7HpsYYNTXgnART9qmJ5uFiROTYJtRYCXt9GkWMR6l+CxsrvrkmE9o5f+sKa1FE/OAP/XOI3nrrKyC6GyeYv/i+X+ZD5wVdzf37aOd/9Ae/D9GPfOQjED14NU2rI9UI/5v/+2chur6+BtGves9X8KF/7w/+AKL79u2FaMWjzdRgM9E7YCXktck9u6nYdZNY2/nYR/4UoocPXQXRa667FqKPPZkY3uzatQuib33r287+8FT87rkP3/3ud5/94ZFHHoJtV1apnkTEzp3UbQ2H1Oslmne0voprZRFNzUsoWIvG1By1qYnzaEJTY36Ik2dYsNTE44knjkB0Hk/4U0ePQbTF+l/tSIxe7rv3Af6DPbv2bN7nhp9vuPH6LQvWpiaJPMbGUXSNj59wHS4xSIiIBk9pjn3iGBvwDIdGEdHiKKLBMzbChNTkckGNrfAQr2Y1xkniHE2cU0+mItu678nyYvce6h2Ga2cgurSYmCQe2k3J4txYjUbUElZ14nHerj5lAPMUcx2b99kZmnTzODYiWl7RrbBkeK3HTWJCVOLsoMCh7HCFpjxcCZcWT3PB3v+r9DRkZobqPw8Xjx1/CqIRMR7fAtHTp6nkBw4chGhyzs4TJp7UcF9d4mowPyiPiAp3zuvn4xFW4Cyxytfis61+H9excQg9i61oREyGdPvUOTXgu/fQSHU0wgdA/PApouClZq4KGCywBY7Uc/Ycu+PlxSWI7sJ+J/n8qMahLD+SaBvMPcBsjYjEKeUFgRqHAVkq5SLH+7rFRpgrWcvLuclTcgkpWol1o07U/LEwf2yrzc0f6zB/rMv8sakHx5j5Y5s9h/ljXX+WP/bMM9xbXvaycz+bP9Zl/tiUqPljHS+e/LFNbjv/V/PHwvyxacwf63pe88fO2iqLjPPH4gKW6GPrLDLzx7rMH+vaJvljX77h5w996Nd5260yx87i/LHhcM38sS7zx7rMH+u6kPyx12345BO3f/zcz+fyx9703mf+4Jd+6ZfO/mD+2FTbPH/s5mmfX2D+2FTPNn9s0yfmj3Vth/yxkydObPz1ovPHzn7eTR7bCJLH4qLyxzZ+Yv7YlIJtv/yxpmmm5o+d+3Bj/tjG0fbZzzl/bGMdmppLZv5Yl/ljXZeSPxY4YtyYP3bbtM8hf2w8Hps/1mX+WNeLNH+s4cUw88emRc0f6277YsofSybMSJIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSbpy+AIySZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkaRspL3cBJEmSJEmSJEmSJEmSJEmSJOl594r/9r5nfr6M5Ug4dgnRpOVL21y6vJ643AWQJOml7cvveCj1J8k/2NJbPvSHF72t9ML44kT8rhekFFOsxicg+rruJ7/yO89fYbSt3Pzzv3whf/ZU/BJEB7jt6e4n/+gH+Q82StyW76Lgz/G2t3H4EnrEK9cnOfyGZ7Grj3/N33x2x/4L0z8e/rMfT27Ka4BV/ApvXnU+WfvO7zn38x3Jw2/t3kvYVs+5xy9h20/+xa+b+vkdX/3XEgf9W9/5rA507B/9iykfPqtdvHi8/XIX4KXmyUvb/A3f+twUQ5J0BcsvdwEkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkvXB8AZkkSZIkSZIkSZIkSZIkSZKkK9O9X/Oey10ESZIk6bL5ldfefLmLIOkF9bEv+bzLXQS9qD30dX/xchdBkiS9ZJz8m19/uYsgSXohlJe7AJIkPWdu/M+/8Kz+/hXPUzmeA8cuIZq0fGmbS5fXE5e7AJJeOH/lviOpPzn6QpTjuffRy10AbQeXOGKUJEmSJEmSJEmSJEmSJEmSJEmSJEnSFa7sZZs/yrICNhjVE4i2bQvROusc7Nlsnuc5bYz7bqsGogXvOSKipiPj92oaPHSZOCeTBg+NBavpdEaDZzsiipxKPtuboZ1XVLAxn89kwfCkTUbVRW87mO3zoWOFzkkUFB1OhhCdjx0QHczNYbFiMBhAdPHUKYju3k2HrlOXg2s431p8y+9fWOBDjybUHFXj8UUfumqpFtVjqsARUdf0B/v274Ho+to6RDM82xGxMD8L0Zke1fDRiM7YyWMn+NC9HvUd1117DUQrPGPD0Qiin/jEJ27EgknaPlZWVvbt3rfxk02/zs9TlxcRoxH1LMvLSxBdX6fGanGJto2IPQf2Q3ShpLcGtzh67w1w24q+ckRUOIrm8Xm/T8PFCfbjEVGU9L2K4uKj42Hi0IGdGssKGm3yuCo1W4oSdz47oWFAv0c14Uu/9N186Kuuoiq6e+9uiI7HdMLvue+B8z/4V1wSSS+Y/uz0eeipxRXecGmJ/mB1dQ2ieWICmrC8TG/arQuaEGUtdWq9kibddUuTqUgtHGW8pNXwglfilE1a6sqzhr51VuHOs8T/alDjstRwQtPApqG+uMYvtbZC0+qIWF6jQ49qOidncOfDUWK54JprDkH0vrvvoYINuZpRsdfW6L6L1CJJm9HO65oux8nFxDB4AYfoi0tn6NATXHTFNZCIKDIaoszO01rc2phW+Vocva+u0KJTRLz/Q78F0be/650Qvf+J4xAtcbE3IpZPL0L01Kn3n/3hDX//mQ+f+vv/+OwP1EpGnOYDp/7gLt74XRT8Od72Ng7HQ4n4dvRJDr/h+Tz2X0jEqx/5cYjOz205YzryROJd52Ncvfzk7XhWcIk8L3t0XFzijogcBzAf//jHIfq2t70NojU+CozUc4FJRe0kP4Wc32IUes6ZFRrynTx+EqJHjz4J0asPH4YoP4WJiLWV87qtd3z1Mz//5L/6ieuupp1/7lvfBNH7Pn0nH/rxR6i5WpjHkuMw4NQi9SwR0SupEh4/SZtfc92tEK3H90J0gKscETGa0O3Dj4XbFteFUo+Ub7nxOojWDZ3wx56g16wfuuYWiD76VOIhzskT9KzwJ376JyH6yP33Q3S8RvddRNx++x0QnZmhJcQM53H8iDMiShyYFTndHSsrNIruz9C2PWzoImJxmQa6bc2PKXGmViTqaMsTPU5s4FSQYWKgy/NX7h2qMe28lxr8swwLlqpFiQaFD90rqeRNUHec4fo5z/ImVWqMgesYbUPnpGpp4FSkqmiD7SQvsfP6ep4n1t8T+UiIH0m0eGheP49Ut8WLaRkuVHQzc8wfC/PHtmD+2BTmj3WYPzblD8wf63he88e4YOe6h0+/+uZubIKNVSK3IZVc8PQROmmThna+cyfdmDyfWl1N/P+UN910E0TnBrTzsk+tzfIKTXkiIsNRH9+Y3NrwAD5pHk/4Oj4k4vsy44lHxBCXMnhjHsAkz0mFE4QxTsfmsbXZuZDotobrdOjeDO18dpYqYZnlb3jfb5779V2/dzuXRNIL5nN+44+nf/5c7PzLPn7fc7GbF5L/gaVeAJfnP7D87c978+ISzUBLfMD0vOaP7T6wD6KXlj+WWCRP5Y/RgLLXo8fKgZlUkVr8yXBrHk+mpqeJ/LEJTgN58J/KH1vlgj386CMQffVrXgPRWZyLrawksiuvuYamxlft3QXRI0eORMRn/8Yf8SHOedOH/uAC/zKJnnanjIJyOSLiLZewc3XxcsCUZZHL59i3ft3GX9fXKNVwx/w8RE8t0lrEQw9TTsXMTGL2+rrXvxai4yEtF+S4cNRMks9KqJ2cwXn3nZ+inLvRmJbaIuKGG2jhiNcx7rqLslwWFha+7OOUgSApaenbvrr74QwOGF+y+WP0TO1KzR979JGHIfqWt34eRB96JLE28t/fRzml5/LH/ueb33Huw6/46G+f/eGRL7rw/LFPn/vp1puuP/vDpvyx6zf8fPvtd5g/1mX+WNeLM3+sLEvzx7rMH+t6CeWPXfwpkCTpxeAXX02rWpK2iY9++Rdd7iJIeg6Mv/vbL3cRJEVE3POXv+xyF0GSJEmSJEmSJEmSJEmSJEmSJEmSJEnPL19AJkmSJEmSJEmS0m7/0i+83EWQnrUnvvlrLncRJEmSJEmSJEkvkNvf867LXQRJkrap3/68N1/uIkhXuD/94rdd7iJIz4Fj3/p1l7sIumw+8Fm3Xu4iSC9hS9/21Ze7CJIk6UpWXu4CSJJ0qX7x1TdtHcxgw0lVU3QyoaMWXKh4+sgJ2nlDO9+5cwdEZ2ZmILq6uswFu+kmOF0xN6Cdl/0BRJdXzvChs6aFaNtStGkaKlh5SUOaeTzh6yvrEMVyRZbRl4qI4WQMUd64yOlNsslzUlV06PG4guj8/CxEdy7M8aGH63To3gztfHaWKuEmb3jfb174H19uJy93AbStNXE3/8HRS4iyPkbH3/3tS6dO0+Z96rb+4A/+AKJNQ8OAajzCokWD3daZM4sQvfVWemxWFIkXhVc4gMkyGvywFvccETWetJk+Xc8sp4LVeOg29Z3KogfRHHvMusZD44WOiBq766WlJYhmGQ0oeSzaTKinThZs//69ED148DDvXJIk6aXl2p/7b5e7CJfBKxLx+1+QUry0PHy5CyBJkiRJkiRJkiRJkiRJkiRJ0gvNF5BJkiRJkiRJkqQLcvuXfuGmTw7svwr+vodvKY2I9TV6ZeeO+XmInlqkl6E/9PBDEJ2ZSbw++3Wvfy1Ex0N6X3mOb65vJokXrLYtvvgVX/x956fugugo9abdG26gN9fzi9TvuutOiC4sLEC016OXC0fEbG/KOf3837+dt5IkSZIkSZIkbUO3v+ddUz/nVe6IGI3ovwpbXqYnGuvrtAK/iP+BWURcd911FE78v270WKI/oH8w0lb4P/VGVBX9H638f8Lx/6KX+E+CI4qCNi8K+tYcHQ8Th45pTyUuEBeb8X+IG6n/Zm+E/9vuYIZqwrvf/W4+9FVX7Yfo7r27IToe0wm/574H+ND+B5Zd/geWXf4Hls+2YJfyH1gefeoYH1rS8+pPv/ht0z6mhm7X3l28T27rnnzySYiuLlPqzhe945186MceeRSi6yMa3tQTGjwVvUTCUpHRt56dp+SclfUhRA8dOgTR5RXaNiLe//73Q/Tt76JTit8pyjwx3Fw+vQjRBUxYusT8MW0rH/is6YPhi8sfO+fVr6Fkv9Uh3Xr9QSKTcIwjxvUhrjbg6D4vaRw7HifWMfKW9v7xj38com9729QO5TPqOjFxbnAGO6nohPMweH42cTnOrCxD9OTxkxA9epQ6tasP0zB4MBhwwdZWPtMnvuN3P3buw9/+wjed/eG6q2nnn/vWN0H0vk9TZqYkSdJzJbEwLUmSJL2EbJU9JuklZ/zd3365iyBJkiTpRe33P/8Nl7sIUsK5HDJJkiRJkiRJkiRJkiRJkiRJkl6EfAGZJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmStI2Ul7sAkiRJ0nPp9ve8a+rnw8mYNxyNJhBdXl6C6Pr6CKKLS7RtRFx33XUUrmoItlkB0f6ABvxtRV85IqqqgWie0+uMsyyD6GSSOHRR0OZFQd+ao+Nh4tDRo80ZF5s1dLIjIuqaasJoZR2igxmqCe9+97v50FddtR+iu/fuhuh4TCf8nvse4ENLkiRJEvj9z39DRLz6Na+Fv1kdDiHaH8zxIcY4F1sf4moD/jdAedmj444T6xh5S3v/+Mc/DtG3ve1tEK3rxMS5wRnspKITnuE6xvxs4nKcWVmG6MnjJyF69OiTEL368GGIDgYDLtjayhn+A0mSJEmSJEmSJEmSJEmSJEmSXoTKrNj8zxvqMb/ggP49Q1W3dLSc9hwRbUub8wsOqgaLjf/GI8M9R0QE/VOKpqno0PhPKXI8YRFR13Rofq0Dv16uTH3rGi9HPaETnrV0TsocXwlRJf5RTVHiezTwnxIV+KXLXuKc9Is+RPOWLtbC7AxEd+9c4EOzM2foX7ZULZ3SM6u07b7de/jQvR79Eym+bVnRpz1HRG9CFWmCrw7hYj917GmIrqzSP3CKiMAbc+eYrnV/QHVsbS1x5MGAvlcPG4V1emlJ5KnWajSiu/7tb/8CiH7yjk9C9Oqrr4Ho/v30PpSIOHlyEaL3P3AfRHf26WLtmNvBh37i0SP8B2DpFN2YK/0ViM7MUC2KiPE6tZM97OiffprujrVUHd2xcx6iCwt0wmcHsxCtsAWOiHm8uUrsHvJ5OnTRGUptxK8DNHiqAAAgAElEQVSsiogTJ05AlN/QtIDnc9euXXzoHTuoDt99991UsBE1Ge985zv50CdOPQLRZn0Vou0Jam2uvvpqiC4unsZyxaSmnU/GFL3//ocgimOfiNT1OnHsKERvuvllEOXK/+jRp7hgK6t0OW655RaI8th+PtWK9rArL3FAyO+Sm0n9m+HVEbWTJ54+BtFJRa+i44Zu394DXLDFVWr/n3qa/h11i/84/Jd+6Rf40GWJlTinwc+gRyd8lHoz4OnTdOeWOD7nfxL/5JPUU+f4pSIiGvqDPft3QrTFfe/atZuPfPe91EQP16iJfs3r6L0MY351QsTMDE1qZnp0OQqsRcMhFXs0oRY4Ihp8neIiT5dwMWHnzkR/um/3bog++RRVs7ahc3LsGLU2hw7sxXLFrj30B/ytzyzTlGcZp5ARsWMXtXVrq9TGLuC26zxpiejjvPvlL78VoieOnYJoVVElTL0bJObm6D0aPHGusSlLDvl4iD4aUbfF7WCyxSh6tIN+iW8axY5+ZZ2+VMZLP6nmaH6BxthveQu9q2Uwk1jH+NZv/maI/savfwiie/fSTf3gAw9D9J77qOOIiKeeojHhwgJ1arOzdMZuv+NOPjTf1zxnKXCMsWtPYkVr5076Xqs4DC7GVIGXV6ihO3mS3owTETnW/woXTj/rDW+C6OxcYhh85hSV7eW30LxjiEuyPMGMiLJHDfgidkynFxchyi/5veGGmygcMcaZxRBbQl66z/GpQUT0cZVvuEqHPnT4WohOcBgQEatD6h14oofv6Yq6oia630+MwEf46GpxmaZLi0tUi/bv4yMnXjG2ikPZosQlKbzleTAZEYunFiG6cweNQNbXUqvcaIJTuRJfrDYZUx1bTb2b+8wpWm0rcG1zxzw1/v2CLsc6vvgsIgpc/Tl1morN7+bmJamIyDM64SdO0qF3YD2pq8SNeeRpmh08fYqu9exufLCLQ74BvnA/Itqgxirjh93YTj55NLHe+4cffRSiXEWvuZ6ehvz+T/88RHenHudNRnTb/uxP/2uIfvE73wHRPjZlEbFj/yGILp6hlZ97H3wMoh/88B/zoQt8Wn7dddRj1hMa3kTQICHHBauIGNd0OdbWKTrmnprffJl6ojE7R3PM3/2D/4bb0tQgItoa3wfap+Yow/9wgvtTznmIiMBkD/4/IXjIl9WJVnQcOLPOqFOsMFujbnFYluptW3wu3DZU//lNo3w+IyLLuEmhnWe4otuME197ARcE+L8eGeCq6TLOaJI1lBdoeMrD+847cfPHwvyxrQ5t/liH+WNd5o9NYf5Yh/ljz5b5Y13mj3WZP9Zl/liX+WNd5o91mT/WZf7YVOaPdZk/1mX+WJf5Y13mj3WZP9Zl/liX+WNd5o91mT82JWr+WIf5Y13PR/7YuQ/NH+syf6zrxZA/dvjfT/nw4vLHzn0O+WN79x8yf6zL/LGuF2f+WF3X5o91mT/W9RLKH7v43A5JkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJLzm+gEySJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEnaRnwBmSRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkrSNlJe7AJIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZKkK9zCz/7iwiVsfuulHv/eS93BNvPGRHx8abtfv7TNJT0H8stdAEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEkvHF9AJkmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEl67q387a+63EWQJE3nC8gkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZKkbaSsxsNNHzV5ARtkbQZRfp/ZcFxxaYqCDt00DW9OsNht1fLW2SW8qK3EjatJzZvnJZ2TCDonWUvR5PnMcyp5xicFT3iDxe73B1iumDuwA6LX33AtRF/1yldCtJdTsSOiGPQoyvdOQWdsdmYeouvr61ywsiwh2jZ062U5bct7jojxZEKb803dUsHm5+icREQbdOdyDefozh27IVpPEvdO2aNr3bZU7CyjStjrcYMQVUWXY1LTCe8VVL3n5xOXo6pw5z3a+bvf/WUQHWEd2717N5YrxuMx/wEYDKg5autETegPZiG6tr4C0RovVov35Ww5g+WKJqiaVcMRRPmcrI82Dyo2uZSOvuLoKDHGyAu69bj+LyzshOgIK//a6hkuWI09Jrf/a0OKtpNE5V8b0vUardGNuWfPHog+/MiDfOibbrwFojOzfYiO8VqfPHUMore9/OVcsNXVVYju2knf+q1v/myIJrvy+V1UzdZWqMVoamonh2t06BtuuI4L1mZ078zgsG1ljc5n2U+MsHPsE7nf4UEydsVnt6adc0uI48Eo8EvxpYyIIfYdLQ7+RyNs3nt030XE/Dx1anXylG7txhtv5D945JFHIHro0NUQ/eSnPgXRXo861Ouvvx7LFQ899BBET51YhOhbv45ajHvvvY8PvXxmDaJraxRdOr0E0R3ziVHEZEQ7z3E+NYdD2UGfDj0cL3PBsoKu5tGjR2ljnPmWJQ0SIuLbvvVbIfqRj34couvr1E4uLVFP/UP/9O9wwQocgZ9ePAnRN73pTRC94447+ND79u2D6L333gvRn/03/w6i73zHF/GhH3iABiH/5J/8E4j+jW/5mxBdXFyEKFaiiIgbb6LBT6+k7ef71AIvYPscEXVNI4GZHm3OrXvbJla0uAHnqdw3f8tfh+j/8+//PUTXsKWKiGpCHf3HP/ExiNapMTb77d/8DYhedXA/RB99+BGIXncdDeoSzWBEf4aGNzvmaaTK8/0hTjoiYmYWxxg4DTxxkr7XkaNP8qHndtD3OnzVQYieXjwF0be98q0QffSxx7hgWU433+/97u9C9PChQxB9IDXGWJinmvDgg/fTtgsLEOUhdEQcP0FTuRMnqNsaYC3Kcc6yFy90RJx8mqrZBNf2eXV9YWGOD70+oQF8ltHI6swKtYSnFk/zoWdnaGA2mKG5wwiXyw7gaHPXrl1csNGQvhff9Xt27Ybo8RMn+NC8ZjXE3mGmR9/6zvvoxtx38CouWIHd8Re/4+0QfeCBByDaJB6VxAy2/5OaClaUtPcSZ/QRkeFjhWPHn+bNwd4DNGb7rNe9mjevcVY+N0t3/e4d1Ioef+opPvSoorvj4YdokNxiX/3A46m7I6O52Ctuew1ED19NM/qnH6fzWaeqKN+2La/P4MrRvr2JvmMwoMsxwhaD5x2z81RPvvXbaHIaqYVofGgQp56mO+vgYRqBRMTDjz0K0dGEeszRhC7H1dfcwIdeXlqEaNGjccI83piB63h8sSJieZkWOso+1ZPRDB16+QytH0ZE09IJ58UErid870REHTSKKLAVLRsa/JS4JtviE7eIaDDJhZ+V19jlcWsTyXSODJ/CY8F4LJpMfuHOOMfsgsTW/IwzouUGHNcqWpzvc95CROzaRXfuDD7RGK/RTc0nvJfICIoJ1pMMzwlXwbxTNPPHwvyxrQ5t/liH+WNd5o91mT82Zefmj3WYPzalYOaPdZg/1mX+WJf5Y9OYP7aZ+WNd5o91mT/WZf5Yl/ljXeaPTWX+WJf5Y13mj3WZP9Zl/liX+WNd5o91mT/2bD1X+WNr8ZFzH37Bb39kiz9/adh9aX/wisTWn77wkrx47H1+d09TyBsvbdevT8SnzNS+7D1fevaHC88fq6Z93s0fO/31f+7cz6MxtRjDEUW5Q4xU/thVV9HYaWYGFwSez/yxtRHmj40uKX+MEzp24kztt36HxqKDmcTwpm5ooDvAp6tlTpdjFgeE/Hg0Uh39poXTr33gmfpclqX5Y896a/PHOl5U+WOXkBglSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIk6aXGF5BJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJF2Pun3/P5S6C9Bx44y/83OUugiTpheYLyCRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkqRtpLzcBZAkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZJequb++fds/mR2Dv5+944FiB5/6ik+3Khag+jDDz0I0dkZKtgDDzzAh24yelHJDTfcBNFrr70aok8//ihEs5zLFU3TQLTNM9q2biFaTRLHXlmlyzGajCFaNxVEx2Pa9r3v/dtcsLqlbx0YlCRtE6kOVpIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSdIVxBeQSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSduILyCTJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmStpHsr79+dtNHbZbBBnk5A9FJNYFoldOeI+IX7lyBaFEUEG2ahgo2qSH6D//B3+GC1fWYwvi9yryEaJu1fOi25ZOGm+f0grn0y+ca2nlVU3RmQN+6auhyzM4OuFxnVtdw83mIthOqotEmLkfZo0oYQRerwTurpfobZZm4XGXRo0PjCa8qiqZOSSQqIUZ7fFPzSYnIMjotY/zW/YwO3eLXrpMnJXFfYk0I+tbc0EVEr6TvVeAZG02ooctx24jIL6GtK/JLqgkJeDm4hS17dGdNuD2JyPCu7/X7EK2xP+XK36Ta9wJ7gBZPON8dWeKMJk5pW9Oha7ypS2xPItWa8a1XFFS9uYq2qf42x5IXeEZ5kMB7joimxfYfG5wcq3f6tsWWMMeTxte6riuI8mAyIhqswxmekxbHXclD883F1QivRmRYT7ilioiqod6h16NhW4HlztvE3VHhCceePBpsT5IDYb59eGTFvW2bUcHKnBrJiMS90+L4nEcgiXoQqWYU639ZUitaJy5WlFiT+N5p+WLhCKRNjHIjT1RxrkXUWOUZnbGzO6DN8XJkfPOkGnCe0+f4rRMVGKefkRqLFiXtvK5wbtvQuKuPY7aIaLDkGZ6THKtZgW1Cnpyp4Qh8MMApJNaEvEicEx4ncNfDk99UgxGBw5sefusSb72ypG+d7E95aYeXGgqcavX6iTEGN7Pz87SEMhlTY9UbJGpCD1cq+KTlOLcd4KF7vc1LnZsMh3TXJ/odvG37/URjxauAiWrEDTh2DeNxYvbKbcL6+hCiNTaDw/GID13ieJJvzOXlJYhWFVXgiFheXoYoN+8rK6sQHeG3rnC+HxFPHzsG0WNHn4bo9TdcC9GTx2nPEXH69CmIDgZ0sSZDmjjs2bOHD720RFfzNz/8mxDNcPReVXR37N67iwtWYNfD612zs3MQnUwSvdpgBpdQsGs5fYrO57jChx0R/R7deh/+rd+HKC9ezsxQO/lNf+0bsFzRwx7z4MFDEOVFp1OnTvKhZ2aoc7nr03dD9Hd+5/cgOrdA9WTPnt1Yrti1g/7g1ltvheiJE/StM+yLI6IeU0Xirmfvvr0QTUwrIk4vLUJ0eZGiayPq1NbX6dnTt3zTN1KxIu64606I1hPqmHbt2gnR8ZAKFhE19npD3PyBBx+E6KGrr+FDj4fU6936ildC9LprDkP093/vdyA6HNKljIj5WXqcvW/fPohmJbXAa2uJQx89RjdXhY8VeAnlbW97G0TvuusuLtgAH/FnuFzWH+BD4dnUihYOde+59z6IDgbUTu47cBUfeGWFcg9246336CMPQzTHYcD8PBU7UssFPLxZX6cWmB/2RUSNz4X5qfFDjzwB0RyfpERqfbKHK1r8AHRmQD11g9OliJiM8MbsYw3HiUPeS0ycqxofZ+MZ/af/7AcgOr9A8/3kGmBk9K1rLHbqaUgyAYAXk6nLSyzdpx7x3/Gnn4Tov/nXPwnRAS4hLmNbNME5S0RgrlOs49Zj/NK9zprqN7xqc2dh/liX+WNd5o9NY/7Ys4uaPzZtU/PHNjN/bNqezR/r7Nn8sWe55zB/bBrzx7rMH5uyc/PHpu0dguaPdZk/Nu3I5o9tZv5Yl/ljXeaPTTmu+WMd5o9tsbn5Y5uZP9Zl/liX+WNd5o91mT/WZf5Yl/ljXVdA/tjV/+F9534+8tfe88zut2b+2JSo+WPd6Ismf+zrHnzy3M8/f8s15o91mT/W9RLKH0snEUmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEm6YvgCMkmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJGkb8QVkkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJ0jZSXu4CSJIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZJewq7+D++7oD97vstxsV52uQsgSS+8/HIXQJIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSdILxxeQSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZKenSN/7T2XuwjSC+Tnb7nmchdBeu5lf+uz9276qGpq2KDB3fG248i4NP/z06sQLYoCok3TQnQ4rCD6D/7e3+CClSW9qa1t8azktG3dUrEjoix7dOiavhefscTFiMjwT1rcvijoW6+trUB0Zn4ByxVFRjvnMzYZjyGapS8HHTrHEz4aT2hbrCd5JAqG1T8y3Lxt6dBciyIiK7Aq4M3RttRiZHhOIoLPSt3S3dHLqZ5ERl+KW5uIaBr62n2sonVDxS57WOyIuqZqVmPBioyudV3RniOiKEqIZhiNhnaecePPLXBEhper5IJxQ5lqMZoaW1HeHKs/3x1tljon+L0SjT+3/ny6I8q8jzunknMbW1fUnkREv0+H5ts2w1PWYmPEe46IoqTv1da0eZNTwcpUK5royhO9A0Wr1Lfm5ohLXmC/01R4aK79ETl+rwYvR1FiM5g6NLdmfWz/cWQUTYUdYm+A5YrJZATRPKNvXeDAiQsWEXmfvjVvzlUwT72FOcfhD9d/7pcupbWJ1IgxtTneO6n+lA/NW/fwjGU4AokIvp48Pq+wTejhnVXViU4tw16vwGrETdkk0adFv6TNa2ysEvWEa39EjpejxWqW5zzu4jFGsopyZ01aHN7zhY5UHeYhH/fVvOeMO/KIEsdOkwanxukb8+JxJSzwhDepGzMxNcZbjyeJbYvnBGtgRDRcE3BrrkVZ6tAsMdDFQ3Mdi0trjlI3HhYstTXXo0RjhZ1asuA53rk8s+CZWkrqjPLwJnHrUcGSazsNXk1cN0p1HamRVcFrtliBWeq2vaSeJTEr4TFbJAYZPIBJLZJgTUjVX24nG3zokOGMKFETUsPgRA3n+WlijJGqolgTKlwGSYz4UkO+qqadlzj5rXFbxs1gpP47HR4QVjiF5FlepFcBSYPfi6dafGtERIMnfGZmBqIVTjzKQWK5gKtRoiXEUUQv1XeUuMqX8yoJ3h08wRz06LgR0WIl5Xu+xhXyWfzKEVFjl8nDm7LHy+985Gh4MRmrKK/ttPhIItmK8oPIM0vLEH3qxDGILszv4kM/8tijEOXhTYHz/Ve96lUQ/fRdd2G5EidtHh/OzgyoFl17TSKN5sjTRyH6mx/+MEQfevBhiM4t7OBDV/hceH19HaI7d9DOe326d9ZX1rhgvALDo4gDB6+C6AP33c9HXlmjfAxeqnjyyachunyG7rtIjSJ4CREfrsaeXZszXjZaWlrCciWehhflxT9d4m0jouUJET7s/sEf/AGIzi3M0YEvfroTEZFxBcbGv8eT7tR4suxd/MOpXmq96yN/8McQ/Z0P/ipE14Z016+tUvTosRNcsBbvjpURfetRIo1ks7/xWeaPmT+21R+YP9bdufljnZ2bPzblD8wf28z8sWlbmz/W3bn5Y52dmz825dDmj3V2bv5YN8p7Nn+sw/yxKduaPzY1bv7YlD8wf+zZMX/s2W5t/ti0jc0fe7bMH5vC/LFpm5s/NmUHFDN/rMP8sS7zx7rMH+syf2zKtuaPdbxU8sd+6S1/jksiXRn+663XhfljU/dt/lg3+tLJH0tcHkmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSur7yI7++6RP/A8sp/A8sO16i/4GldIVJ/QdxkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkq4gvoBMkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJ2kZ8AZkkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZK0jfgCMkmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJGkb8QVkkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJ0jbiC8gkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZKkbaRcHw03fTSYnYUNqvEYov3+AKLr4wmXpm0xGhlGG4gWBW2bFwWWKyY1fesMiz3Tm6Ew7jki6pq+V4anjLaMaOuaD11k9H66Fr92Ruc7MgznRYnliqzBb91iPWkomiUqQmQ5bd7UVDA+n3zKstS7AvOgQ7cZ1YWWzyfuOSJy3Jzv6hajRZ741hNsUjK86+sGW4xeD6J5U3HBInHS6NBlQd+ab/mI6GFr1tZ0xnI84W0vcXs02ETnWPIMv3WBd0eR0cWKiAqv1wTPSVFSc5RjsSN1SjNsExqsolzHemXinDQt7bzBzoH708AWOKnsY8nxlDQFn7GEjDuAHG/bjOpJg9tGRA+rWRVUgft4yxep/pQbYY7yGesnjhw1DkISowjcczmgWjSZpMai2Kn1en2I8pcqU61owX09d7YTHKliTahx20iNk7l5byq8d0o6nxFRT/CUFom2DvBYNFJXs4fjhLqlbdtLe/9zwc1sYhTBzWji0NzW5b2L/2Lc2kSqwWlweN/D+l9VdLGK1CSRb8yML1ZDZ2yQOvKkojuXS869Q4sVOFJDlMTFwk4tb6lgZWpqwA14aq2BoiX21JHqtnh6mzifeNw8OXvFaSDf1GVJJ5wbyYgoSpyLVXzzcMESLUaDNSHP8XLgGcuxAreRuB4z2HdUFQ5RuCqkOjWWBV1NbGKjxQWriCjxhLdc8sTdcUkNeIaNcM4rP3zGEvO4xLfmIQpHuRIWqQWvtqUazoskDU668zzV0eMUtMVDZ1jsNtVQNtjrlbyYjDtPdZeppTbceda7+J6l5gl/BE8iWxzLZonWKjnko2iR41wsUQn5UqamFXjOavxeJQ6SeYk7qcSaUONcLL3eyytaeHdwY8WrfMk+jQeriYEujk9yni5F4slBovbjaDPHrevUTCtrqGAVzvTyPg75UmvgDd5cBVazGtdn0ovvw1XanK8mPsThetBPzUpyXhHjSTk/sMCzHRENDswSK/+4bzxhEcmS4+Y8s0gN6lJNGY+d8GLu33eQ9pyqCa+67TaI8mNf7rbGoxFEX/7yV3DBeM6eGm3SxRpNEq3o3j0HIPrVX/N1EOXhZHJZiQfwqSYan7g1vNScGIv2scWouSnjUVlqBF7jtz69dAaiu3ftgShPySPZmmGbwM17PaK1Mp6zRGpWvr6+OZ1mo0/d8WmIjseJQ588dRqiH/z1X4UoP3So8NADnGpF6llhjksoBa4GJOfsfGPyshInFOGaU0SqYzp67ARE52bolM7NURrVVVfRnRUR4wl969HyOkVXqe/oPqw2fyzMH9uC+WNT/sD8se6hzR+bwvyxzs7NH+swf6zL/LEu88emRHHP5o91mT/WZf7YFOaPdZg/NpX5Y13mj3WZP9Zl/tiUzc0f6xbM/LFuwcwf625u/liH+WNd5o9N2db8se6hzR/rMH+sy/yxKXs2f6zD/LFpzB+bwvyxLvPHuswf63oh88cu7QmGJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSpJcUX0AmSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkbSO+gEySJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEnaRnwBmSRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkrSN+AIySZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkaRvxBWSSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEnSNuILyCRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkqRtpJzrDTZ91NQNbVCWEG2qCqJtVXNpsiyjnWPBmoaig35BBWtbLhjjzUejdYjmeeIdcL0enZM870F0MsbLEalvTUdOlHzSTGjjgrbN+cARLcfxcnCx25bOWES0TaJsdGiMFhnFx/U4sXP8Xnx3lGWfdk2bRkS0uPNUDaeL1TaJKsotRoYVhZsy/lJ8PpMFa3lrPGFNk2hFuTnKc7rWDZ7wXkmtTURU3KTgty6x/idPOBv06FvX2LNk2Bwly5XqXOhqJhorbIqq1L1TFlT/s2TvsLVkz8LnZDKhvqPMsdhYiyIiMhwJBLb/eEqrDHvbVMFqHDsV2J5wBU52agyPHHV98RU4Imo8pXlG0UTjzwXjb5XaeYUXi791lWrAefzDBQusZi2ekyzo1ohINODc3vRwyDccDvnIvR4OdLHF4DOWrKKXMrIqCjql9QhveRyfRKo7zvCE1zWdsUmqiq6P6XqV2Mby+UxU7/TwBr8175wvNN7ykaoJvfziz0lSgy0GD0CaimYWbaIORo5tAlaEyBPDBKqE43Fi4MW3Xttyt4VTg9RyAY+iubPmmpBjLeLjRgTPtrgrj8CVn2R/WmOfiJcjw+aoSk3JU00K94n4rfF8JlcKRjU1KVmO3RbuPnUpA+tRYszHKxXJCRE3wi3OjRPDNvxWo8QpCR7fFDwNrKgmJLvyVKeGowi81kVxSfUkVYtxc17HSLdV9K0zPGNZhpPE5MInTq35YnFrw71ScpWDD30pBcuLxNpOU/NZwxloYkbDR06swPCspM9dOZ/vZFOGJ7yXmDhc0kMHVmIF5lY0Oby5lDqc4ZiPF53q1BJKgXc9X04+Y9wXR0RiHbvC+WkPR6o4XOzhIl6kHsTwrITvO166iYg8cH7KK1rNiKKTxFyMez1eQgx+4saLJG2yiuK9k2FXXmI9SV4O3JyvdTXGSWJqIpforLHryc1WRoUAACAASURBVHHsxEOj5EJ0xmsR/MQZ24Qm1YommhQeO3HPlNhzYpWPT1riwRaXO/HgNrGixU++Wv7Wqb4D77zEoYtER0/PnpLrXTw8yrHLq3l8k7ocJXb0+/fvoX1zc5Slnp/yghgGC9x3gdOKOjUC7w9mIMqrN3Pzm5NtNko+F2gTJw0bcGzKBgOsRcnFBKyEiRk93rb8nOUScQs8niQa8L37DkH05AqtkJ84dQKi115zEKItLt1HxAQ762aCrSjuuTuPM38szB/bivlj3T8wf6zD/LFnWzDzx7rMH+syf6zL/LEp25o/1o2aP9Zh/liX+WNd5o91mT82lfljXeaPdZk/1mX+WJf5Y13mj3WZP/bcFsz8sWe75zB/bBrzx6bEzB/r7tz8sQ7zx7rMH5uyc/PHuvs2f6zD/LEpUfPHOswf6zJ/bFp08xm7pGVrSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSS8tvoBMkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJ2kZ8AZkkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZK0jfgCMkmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJGkb8QVkkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJ0jbiC8gkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZKkbaRs82zTR03bwAaT0RiiWbl5bxuN68T7zjI8dF72IdritrODWTpwW2O5ImvpezUUjKIoeOdsOKYTnhd07LLsUTSw3JEIt9FCtAj61k1dQbRqKBoRRUbfK8+xmvHVyBLnpHO7nKeqqSIVuPOqogudulbRYi3slSXtO6NL2dQUjYi8fL7eY9g0dFNHRIanNFETcOdtRtEsdVPn2GK0LZ3SnO+dJtVY5bTzOuh7lTnVk3GNVTSixGpWYx2uW7pYeUG3fPL2aPByJOoJbluWiZowGg0hmmV0aK4n/J3LLFGwqqKKxOckzy+pU0uccMT1v+hxPYkcX7qaNfitexTljn4ySXRqfFtjRYgcD51sMco+3bY9PGMNtpOT1KH7PSp5jf1pcBONx+WvHBGTCsei2MamCpaq/Hixe1jDC27JcM91qqNv8LbNcOc8iuCOIyJyHsAENmXcs/CQLgK3jizRzNLOC/xSyXPCDQ72WtGboQlRtb7Kh85zmos1NdX/AucsXEUjoijotLQ4lUtea5KaGpR4Y+a4OZ+xZG9Z4PcqcfuWRyB5ogHnqRwXHKfsEdjGZqlxV4lNYYMdPeM6Fqkbs8KBANf+1IQotcCClZArOI9Ui0TBo05M6rHvwCaYW9GIwNlttNhQZjlOEvFq8EQsUm1CxksVOMZILjq1eNsGDu8n3Lyn2snAGWjbYntSDmjboG15ES9S16saT6hgl7DUEKmK1OIZSwz58L67gHncJbQYPHFoEndHAm+eaMpSNeESlpW4iU4Mb1IF48V5LnZ7CfP9SH2vvKDv1XLHlLoxK34uwB09zjsyXuVI1lA8J4mu+hJqUUSicBU376jEjj4i6gZbwgzH57hM3STujlQryvNTHmNk2HdMEodOXE3cNhtf/E1dV6k6imMnXp7h2VKTqieTCa189nEeV+Y0mcryRPXmBqXBPjE1AcXnLKnlx7oa4b7x3sFDJ6e2PAzmdTx+GpKnagIvv3Nbx8sgGV/q1PCGnxrzlCfnbVPXo+GKdAkr5DU2/hcwPsdWlMcY2Mbyg61IddYNLrXx+eIFlkjfXLjUxi0G3nhF6t7hR41N4okzTo2TsxJ+aobnpMZ5XA8b/7O7p53jCITHkxkOF/kBaKQe8Zd9av958N+mLsegP0MFq+icLC4uQvTgVQfowOlJIpccvzU/4kw3Vgi7LZ5B1qlVvhq/1+7deyC6tkyVcHGJlt8HqUdXTVBNGPMzNdT9yuaPRZg/Np35Y1N2bv5Yh/ljUw5t/lj30OaPdZg/9myZP9Zl/tiUIB7X/LEu88emMn+sy/yxLvPHuswf6zJ/bBrzxzqbmz/WYf5Yl/ljU49NQfPHOswfm7Jn88emMX+sy/yxLvPHuswfmxI1f6zD/LEpUfPHOswfm8L8sQ7zx7rMH3u2ul/5+cr8kCRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkvQi5AvIJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSpG3EF5BJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJ24gvIJMkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZK2EV9AJkmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJG0jvoBMkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJ2kZ8AZkkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZK0jZRN02z6qMCXkvV6MxCtYvPeNqrbikuTZRlE85xKVmQUPXDgABWspmJHRIEnJWtaiLYtRTM+3RFFTZv3ij5tizuvJhM+dIbvp8sKulh1XUO0wYuVYzWI1Cnt1Ojzd867TmlaLBtWJDojEVninCQK3uLu26bkY0OwyehsR0SGZ5xvW5bnBf9B09C3rlsqWIY7nwxHEO31BlywCVbRQUm3bVXRl8rzxN0ROV3rnO8d3HGR9/jI3GLkOR264GJjLaqqRM/CzVHZw++Ft/ykTrSiBTbRfMq5oStLKnbRT1ysyfoQollBdwf3thWe7YiYYNdTllQT+FtXVaKxipL+IMdvzQ3hcDSmbbFQZw8OsR5W0aqmQ5f4pSJipo+jCPzaVUXfrMiw37m0Id9gQI1wW1ObkPUS56SPnRoPA6oxVW++lBHRw5FVZFRy7qzX19Zpx6lbp8Vmljfft28vROtUK5phm8C1iMcn3MZGqhIuLy9DtMSOni9WzgPZiKzEeoLDLp6z9LFBiIheTrfe+jpVswYPnRzyjbDv4KaMhwGJEfolzkp4Y+wf2kR3GjkPUXAYHEE3dZXYNjW85xYDh3wZTqaKVI86xva/wD6R60mOxT67A4i1eGfihCYCh9DdxZxN+FtzBeZFkjZZR/Fbt3w1uXlPzS8To03sjlOnlM5nNUneO3jXt1RsvpTJOXeLowjuHTKegabn+9jhthd/Y3JPnmq/o010TFiBL2FJKlJlS/SYFzK32EKd6pdS7SQO21pcDeBRbgT3PHxOeEDIE8xIVbPEaDNZz7bWpHpbriiJG+8SChbJ74UjEF7RbVMrWgWP0Pmu57sjMfhPFaxIjgS2PnJitJmYlXBjlaii3NGnKmGGk/rE8w6uCbhtcuLMnXXFCwJ8yycbK15qxoqUuFh4dyTn7BMcgScGhLwalhiqJla5W166x54lw9FLxKUNBbDbqnFU1lSJe4fvrX4f2xP8UnnqSWJiKIsnLLGOkVypyC5+PsUdfYvPlHkRO5LNEW7Lc5YitY6RGBRiwXiBvcCRauqujQKXlfhKJ6aQlzi84Uev+KA82ZXzA9ZUI8wTZ6zAvIiXurmyhnsWPDQfODkM5nOC0aZJTRITY2waCWQZtQkNdw2p1eAMewceJlxz+FqIrizfz4du8XL0sK3buXMnRMtLe5zHp4wrcL+P9x0usCR33uL3ahscGqUOzY+fTp8+TYfGUzpqKPdgsJcuZUTUOAhJtv+gm1Bk/liYP7YF88em7Nz8se7W5o91Nzd/rHto88emMH9sM/PHuswf6zJ/rMv8sSlR88e625o/Ni1OQfPHph7a/LFpO4CY+WNTNjd/rMP8sS7zx7rMH+syf+zZbptk/liX+WNTCmb+WHdz88e6Ozd/rMP8sWk7N39sM/PHpuzc/LFu1Pyx7qHNH+swf6zL/LGubkLRJabTSJIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSXop8QVkkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJ0jbiC8gkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZKkbcQXkEmSJEmSJEn/H3v/tqtbmt6Hfc/YfHOuWlXNqm42N6IomhQVRbItGXACI8mBAUHwUS4hOQqQOwiSK8hdBEiAHOQGkhMDgYMgAYwoMC1Hlgw5gkTRZHPTze6u3VpzfmOTg85Bc46v/k/NObpIds/f76zWO9+xeffv+z0YBQAAAAAAAAAAAAAAAADwivgAGQAAAAAAAAAAAAAAAAAAAAAAALwiPkAGAAAAAAAAAAAAAAAAAAAAAAAAr4gPkAEAAAAAAAAAAAAAAAAAAAAAAMArMu/L+uSfpvv7kGGtJaTua0r903eP+Wn2mDqMQ0odUu5PvvOdkLos6bGrapouKTneet3SxS9jvHJVxbd+ePc+pE7TFFObz88t6zWkDlvKPs3psdfrFlLHIeWtqsclPdhcMfueUpflId/6Ms8hddtjE45VWbGdTJWqsqqGKT3YcujmP23MD9ZVR23prZct3XqPnX7vO2Yqli0OR8Ocbj1eUsdcKjXgqhpiI8wDzrali19jalXNWyqTXJl7fOzpktpYtc1sTiPGNbaT9ZrmjnYoy8lrLNJc3ntXHWPzbHnSS9Y1lti7lFpVY3yuPXfquAxY1653xFb4+JjrOnXMfOWqevc+XfySx5M4vOe+k1cvVfXm/i6krnHEGIb02PveNdE4mq1xFM0j8NiNGA8PaSq/5nEyPtgaFwlvv/VRfrApdswttvDrNa7K2ul0SC1829Nbf/H+XUgdYxNtu+3dHB9sStmXJXfqpp1c15R9jqvoPTbvdgB/jFNPHifzVD7scYiO02VV7XE4yivGx9x34sq/qoa4DO4G8PRe7V4sz5cPsbKGWGLDkB4sr1SrqsY4COfssRWN8crVTUx5p7bFRjjEfVxV1Zpu/Rjb/yVefI8Lwi0uNauqxtwxUwMe4hi9bF3vWOPWeIyzbWwmeYQeYwOuqus1PfkU3zrPDrnvVFXXcePKKr712i1v8oS7xX13M4DHmWXMK+yqJS5R8pyYqyNvDarb8lzyRB9Hm7XrmHlrnBfw+bHzULXHk5+qqiHXZnzsuMVc41BWVXOz/nn5AeM4xFbUTWr7EsukOZXK7eTUJjF3rpw3d+pqV1Z5k9hdPOk2ifnB1riK6HpH1xLiH1zyRi/2rD3Ped3aKc96+bHjyX11K4wme26iS9Nt2/k0NrPYCPc9NeB+Po0bky3WZn6tLd662xlU5Ta8p9m2OYjeurkjjv95B5oPk6e4em/NuXfEiSk/2BgPnarqGpc3eebJJ1rNxrlqyguY3Ahz82+2cc1QNs/plC8fK9UYp/KuTBpxxsxHiO1Cd8sTU+xbeVLLw/td+9NV/IO8Us0/WCyP3fH75eVLlHyOscXH7uqqa/9xiZKXRn0LzT9OxZbQXLhrCE3sQeyY3Q9y8SfjuAyoqilPmbnAczvpWsKUJ7W8ssp12dXHHtvK2Cy80sXneJh27brtdEnZczxGbmXtL0RznNQuMW7nxz/+NKS+jb895bm4dYm/pOfl4hgP8apthLHvNNNWtyvJY8L/6H/8H4XU3/t//15IffgyHWJ/73s/is9VH7xN9XWJq/e8Kz8ev4gfK/FjX0H82JH4sRvEjx0vLn7sQPzYzQvk7IH4sedeucSP3SJ+7Ej82JH4sVvZxY8dLi5+7LnZxY8diB+7kSp+7ED82K1U8WNPiR+7kVf82C3ix577B+LHjsSPHYkfOxI/diR+7AbxYwfix27kFT92vLD4seOtxY8diB+78WDix25eXPxY98M6AAAAAAAAAAAAAAAAAAAAAAAA8AvFB8gAAAAAAAAAAAAAAAAAAAAAAADgFfEBMgAAAAAAAAAAAAAAAAAAAAAAAHhFfIAMAAAAAAAAAAAAAAAAAAAAAAAAXhEfIAMAAAAAAAAAAAAAAAAAAAAAAIBXxAfIAAAAAAAAAAAAAAAAAAAAAAAA4BWZ//jh6TfIrl+8CxmW2kPql++WkPrjx+Zptj1dfKwhZZ4vIfHN3V1IvVzm+Fx1vV7zH7zYkF+qahzTR+LGeQqpsTirulsPQ/qDYUyp+5quvK3pyd68eRufq5bly5Q8pBJbl9RExymVZ1Wta3yxaIjVscevAS5bU5e1pffac88aYyvqbr3EMhmn9F75wZoGWnV9TB0z9+vlmh47V/Tlkkabqnpc0oPNUxxwYoGPczNYtYUWTLHvbOvW3DrW9Rqzb/FjmPlLmcs1Nf6quov1let63ONLdf1yit3+Gp88N7OuUzcNIVfHFLPnmTpPHK085e15aol5q2o6MRztWyqxYUwdc9ibMnn38D6k5mkpl8nHH32Ub11xUTfFOXHd0kC3XpsRY4/j5FQp+5v7D0LqF1sqky0+dlVNsTYvcd31EMfgtmM+PDyE1DWWyRBHyi2ONu2DjZf01h9c3oTUNQ6Uw9Auq1L2NdZ17tQPX6b9TlVd4lvn6XaLI0YeqvJjV9Vj7PWXnHtPDxYTf/IXL18GXx9T3rgA6W3x0XML35pW1Nx6H7u/+GpDs2dpBqt5yuuEuDqKDXiKi5/qCq3irJeXbXFT0k/0S2yiU1zyDVvc+Q7dJjEO0Xl5P8StQV6zVTeA51H0ej2xnuyGjLyz3mP2IS6h976JptR1ScnzJXfMvMZoyqRZWcUmmvPmbUV1a+wlHpJ0E1MzDDanDfHi+a33eOtmpKqacteL3Xbf4xDdbYge93Q22px8xotvY17yNUPZHoeyx3guOscj2bZ35F1kHv67rfGpRUY+DW6XbUE+P2kv3ozQL3+u3vv3cffaDP6nnmypOE6eqOv2HKM5OIq3nuJycekGq7nZd+TBKk5b3QC+XdP+NC9l88oqW66pjbWaESMv/ruW0HS9OIDP8eJLHCfXbiOWz53ylmWLK6thbAbw3ITzzLOvsUy6JV/eWq9LPotIefNPV+2IkVdWeR+XN91DVyZ5SMmZ82SdJ/qf3PzFFx/jeJI75sk1Rj52zSfJ1Z1o5a1c/q1wiA825GVwN9vuQ/5dIP90FY+Vunm++TU8/y4Wq6N96y0udJvfQHNLyBXdjWS5BeefJLrc3TlGvHhewGyxZzU/4nQ/YuZTkOY35XzU0P18usXDtDn+4vz2bfrBopWPlZbmLCKe/ORu28U8vLm/j7eOrShvDbrYg1zXW2xmue+0p7mXS2oq//Sf/pch9Tf+5q+F1O/9YVro/savNeExf/DHPwip+bXycHTMK36sxI99VbL4sWN28WMH4seOxI8diR87Ej92JH7sSPzYkfixI/FjN3KKH7txdfFjh7zixw7Ej91IFT9248Lix473FT9289bix54SP3Ykfuy5Fxc/duPW4scOxI8diR87Ej92JH7sSPzYrUuLHztcWfzYgfixm8SPHYkfu/EH4scO/jLjx86d1gMAAAAAAAAAAAAAAAAAAAAAAAA/V3yADAAAAAAAAAAAAAAAAAAAAAAAAF4RHyADAAAAAAAAAAAAAAAAAAAAAACAV8QHyAAAAAAAAAAAAAAAAAAAAAAAAOAV8QEyAAAAAAAAAAAAAAAAAAAAAAAAeEV8gAwAAAAAAAAAAAAAAAAAAAAAAABeER8gAwAAAAAAAAAAAAAAAAAAAAAAgFdk/n/8wfLkn7b96b/8tHEaQupy3UPqvq35aaYhXXzY08W3mPrRRx+mB9u3Uw8WU/Olt6259Rqf7TLNOXu8dVMdsURrX9KDxWbSlFj7Vbzr9ZpuHUt0jg92me7yrZf9IaSOY3r2x8fHlHdOVdm2k4q1OY5TSN1jTe+xsqpqjk++Ng8W+84Wm2DVNMX3ik9+XdNAN8cSax9sbB4s5d1jB9jXbrCaUv7c68eYd12bEWPO/Tr2jootPDfRsRsz8pMPlR77IbaTS2z87a3zey15jI2D7LY13XbLDxZb2TCkxx6Gpjry+J/LpBkJ19Tvqqr22BKGlH2IDXiIHbMbRKvixfPyZo8vtVa37ord5/PPvwipH370QXqwbtYaL5eQmvtOntTuYsccuifLy+A8Rl/iSy1LWgZUVVVcCay576T3Wiu1ojf3981jxSLNo/uypDXbMDSj6DDH6Tj2jinO1W/eNG/95Zfv0q3zaBSrIy+S8+BfVfWY1qIffpi2POuaqmNdm+XNF1/8eUgdhtT+t3jxZpHQ/cESW3g9pvEkL5z2bhRt1oTxsU8ug7c1DSl5ts2pa1z8VNUce+51Sw82xU49VUrNV66qIVfXHOs6n4GM3cY5pm+x289xeL/mRtjtnPPKKsvv3K34qnJDijuifOjUHbE0comssTq6wapbgcd+3RwrxYmn3anViZVVI46i1T15bqK5/V/GuIro2n6zSWyqIxZ41z3yqVTFU751iY8d+04eqX7yJzEtN8JTG6LcTto9ZtD3jii3hDN5l2sz245jXt4nzRFKuwIf42AVa6PbxzVVmTvufVxF5FO+MY8YrTwmNHv2VJV5WVVVS8yeCzQvdMdukbDFeW2P1ZVbwhybUU6tbs8ej6yaqsznzFV1vcadRZ5P46FTfustHxZXzXFqiX264q951U6ouSUMe17ep6qcup+9chOdcpHGSW2Iu5KmoqvicrLWPOXFut4q7eirasv1FQfhPCRcr81erPmBKa5CxtxGo+aVu1XEMKRGuMbDhHYJ3awnY4nNcfeaDyfzsX9VbXmif8zzabxyt1FrTipy/ma52K3Z8k9yOTUXaTzbaV6q+0luj/PO3hwrNSNG/jXkzGozTw1VNedfQ+LskE8v97gOWLrzrnzasF5f3giXc/EYeYnyZkpHst3u89Ra9BLH2G7Tfe6H3RMBRbnxV7eB/a3f/Fsh9de/+8shdV4/D6lv7pvq+OM/+0FIvcQFzEMuz0NtiB8r8WNfQfzYkfixI/FjR+LHblxc/NiB+LEbtxY/diB+7EZe8WMH4seOxI8diR87Ej92JH7sSPzYkfixW8SP3SB+7Ej82JH4sSPxY0fix47Ejx2JHzsSP3Yrr/ixp8SPHYkfOxI/doP4sWOq+LHjrcWPHYgfO/prFT/28k04AAAAAAAAAAAAAAAAAAAAAAAA8HPHB8gAAAAAAAAAAAAAAAAAAAAAAADgFfEBMgAAAAAAAAAAAAAAAAAAAAAAAHhFfIAMAAAAAAAAAAAAAAAAAAAAAAAAXhEfIAMAAAAAAAAAAAAAAAAAAAAAAIBXxAfIAAAAAAAAAAAAAAAAAAAAAAAA4BXxATIAAAAAAAAAAAAAAAAAAAAAAAB4RebH6/sn/7SPQ8gwbSl1rT2kjvHKVbWl3HXd1hdnni9TSN23LV25kzPve3qwy116sKqqPX0kbllSmYxjyrvFqqyqaYp1vaZbD1O+dSqzZY8V3T1YTt1iiT2uS771Hit7jdm33L7jg30N6a27lpAebMv9rqprR8myxjLp3N/fh9R3754Obj9tik00l2cNzYgxbeniayzSru80TXStbkgJF4/vNQzdAB5LZVuu6eLxrfc1jxhNddxNdyE1D2XzlMozD2XVFdo4ziF1jyPhvqcHu15TaVfVPL+8/ee33vduFI1z4hQLfI9fTR26jjlPucDzW6f3GmJVNoN/M9w0t84lVrHvVNU1PlseYz/74l1I/fDNB/nWa6UWvq6pDU9reuthTiXaDRi1NvWVHztV1t0Hb/KtH96niy957ohPnftdO7xfl4eQOtYlpDZNtLMsqUj3vKiLlTWP6bGr3XfExFzgSy6SrSmxOS50Hx9TZV3mdPGlG8Af8r4jD+9xnGynrdxK80ZvzfNpHCfHofla9xoLbRzig43p1nN362aoisubRrNIrnV/DKnN6ii/V7cNzPY8gA9xLRora1m6xX8c6x6WWGJxBI8dqx67xU/uO2dSm0OQ6hpSbKJ7PAPZu3sP+Tv7cRQd4v40LkBqa/plzWNc6ObKjvqjttj19tgI41jVtdFzw1GeO/IiYWyW2M1glZt/s8trtlpNC96uacTInX6NO5p9b2bbPJTlBtwdHDXV0Yw38TChzvWsfFyWs+fU3Pj7RXKzP83L+/RS11ye7ewQh/e8IGyrYxhSoT2kzlFbbGZ5eG83RENcouTs17ja3KZmUsuFdo25L3lr3I3Pubr2Mc4d+Qi84kDXVUcuk+7MKv901Qzgw5R2kc3B/2N66+Y0rNupbUN6sLxInmKBr/0PFvEMPPadPFmv3SZxz/WVT3Tzsi22k4c4U1d3PtOM/ye2BlW1xFOpvE64iwuYvnfEhpR/iGlmzGZMaB8sbvTi8WNeY6ztjii3hPjkeaGbfzJu1lXnjhDXeO29O3XNbThu1Jq87fF7IxZpE/YQ8w7tTm2Jvf7MAUvXRMc4JqyxsnNxD93W+DF2vfyT3DjGs+ITy4CqGmPHzANhLM6+TLoFTDxCic1syMuAuFysbsbMI2FeQrebxPk+/bCbV1b5SLb9Yfcyp1v/7u/87ZD6f/+//V9D6q9/N/1q9tGH38oP9ssffxRSP/9hCorIk8Nx/BY/VuLHvoL4sSPxYzf+QPzY8eLix46p4scOxI8diR977q3Fjx2JHzsSP3YkfuxI/NiR+LHbFxc/diB+7AbxYwfix55L/NiNW4sfOxI/diB+7MaVxY8dryx+7ED82JH4sSPxYzeJH7tB/NiNP0ip4sduPJf4sQPxYzdSxY8diB87em78WDO/AgAAAAAAAAAAAAAAAAAAAAAAAL9IfIAMAAAAAAAAAAAAAAAAAAAAAAAAXhEfIAMAAAAAAAAAAAAAAAAAAAAAAIBXxAfIAAAAAAAAAAAAAAAAAAAAAAAA4BXxATIAAAAAAAAAAAAAAAAAAAAAAAB4RXyADAAAAAAAAAAAAAAAAAAAAAAAAF6R+fgNsn1ZQoZr/GTZMF5C6uN2bZ4mZt/3PaSuW3rsb3/8cUgdhuZDbOu2htRpTNnHeQqpD2u6clVdxiH/QbDGi09T89bbnv5gH1J1DOmla1jTS93f38fnqs8+/yKkrntqCemhq6ZrTq8hVseypbyXS2reS+x38zzH56p9MTEo3gAAIABJREFUT/fOF5+mWFudeU7vta7p1lvs1PPcNP7Hx8eQOp7oO8MQK3pphrK78S6kbrkZrqkq76ZU2lU1TenJtz2NCbmdjJemEa5rKpZYohWHk9pjid3fpdKuqu0xvld8sj0O/vPc3HqNT54ntXFMBT6OqdsOw0N+sGyLk3UejtrxZNvSW+cmusZ2cpcbWdUWa3PbUvb8XltcgYxdt80DTnWTdfDZl2m6rKpf/uTbMT0NR5c477x739w6D9Fv7t6E1GnMo2hK3ONLVTUrmG5llfJeqhlFv9zep+eKzSTWRrPke7g2k9oU773GeWeIA922NdWx5W8lx4s/PqaLj3fNku/tBx+F1HdfpBY+xFltmtNC975pJjXH9eQee8cetzzbQ1Mdb+9Tx9zi8n7fYzvJ64BueTNWHMDjAmaM+7g8U7fGXOBxPBnig7WavUMcEy7dN8qXPOLExc88pQfb9jQcrbEVVdV8SYNwbES1xVbU7sXyVH4/pV4f1z41xVaUG3Cda8N5Ulu7FjrEvfFwl7fGqSXcdyvwXB1xxVfj9PJRdOr6zlZpxZh7fW4JbUXn3pMvvg1xPs03bhe6Wdw45MfOBxFVNcXhKA9lWzx06u7c9NxcYmdOOfZ+ZsnHSnH3GneBe+543VsPubLirJQrq6pqSxfPfSt3vfxSbRPN3Stvq/OtTy5vcl3mRcKUG0rVlk+lmq1xTo2/KTRrm2ZTPsRNTX7sNVZlVeXfDS7NSUXeQ7YtITakeAZ4zWUypH63bumwt7qFWd5j5luP+feMqj2e2a5xFM2tbI/De7cKriE2pHze2x1ONvfO6UtswEPcvQ5tdcQn3/PZULTGis4jcHWF1h2D5AJvN86p0Mb4Xk15tuNkvPVj/nFqjuNkvG/edFT3W+GYZ9v8g107qeX1ZPdmKTE2hHaTmNfYTc/Jp+vd5mCKhz977PV51lryvrpqiD+1NGN0s6hLt97jj+xVtbeL1a825qO2bqK/xhOYIV88Lm/acbJZrMbJY4j70z0372tT2nnHlEu0GYy+xlweEtc4d/z4xz8Mqd/+Tjrizj+ZVRfssT6kHyKbl27n0yH+EBNPyNemtpq3/jye/N/Fn67+7t/+jZD67ssfh9Qff/p5frBvfettSB3+PP26lM9Fbw0H4sfEj90mfuxI/NiR+LEj8WNH4sduXFz82DFV/NiNe4sfe0r82JH4sSPxYzdSxY8d84ofOxA/duPK4scOxI8diR+7SfzYkfixI/Fjt4gfe0r82JH4sSPxY0fix55L/NitVPFjT4kfu5Eofux4YfFjN7OLHzsSP3YgfuzoLzN+7NTBNAAAAAAAAAAAAAAAAAAAAAAAAPDzxQfIAAAAAAAAAAAAAAAAAAAAAAAA4BXxATIAAAAAAAAAAAAAAAAAAAAAAAB4RXyADAAAAAAAAAAAAAAAAAAAAAAAAF4RHyADAAAAAAAAAAAAAAAAAAAAAACAV8QHyAAAAAAAAAAAAAAAAAAAAAAAAOAV8QEyAAAAAAAAAAAAAAAAAAAAAAAAeEXmtZan/3R3CRmW5enff337NuQ/2IY9pI41hdRpSqnNl9aa52ouvm6pTMZhDqn3cyrtqtq3LaQOY3qxMaYuyzXfeppeXmpbfOx9TanbdY33rdpSO9nig11idWxDerCqmqZUX+nSVVXpsYchPXZOrapY3lWxwMcx953mM4XvHx9Cau47e6zK2psS3ffUVLZc4LHEttipcxurqmVPV5+GVKR7fOx9jCVWtca6flgeQ+oHH7wNqcu1GfynOdV1M3fE6sjtf31ohrLK3Wd8edd76EbRPBLe39+H1FxiW2z87YiRDbGJPj6mVtTMxVXNjBvHm/xa166JznMaUvY9d6507zw1NO27HQlz3lgmbUPItbntKTU3s/v7u3zrPFhdr6lzbVtqZsOYKvrarjFiS5jv0luPse9c11SeVfX2zQch9Ysv36XMTWWn1Pfv38e8dZlyXaf2//iYyjO3wGrXk7Gyct41trGqurtLbfhyiW8dZ9thTYPVMKepodr6ioPwm7turRo9XOP4P6Qy2WLPa6etZsSIdZ0nppyaW1GrWd7HKW/M43vVGDtmXkWMW7r3+2ZCbJ58W2LHvOROHfcsQ7PGWJfUzvb72P5jXS9dS8j7pTkukrMtlkneVle70YvWNW61us4x5A1RHBOmWKL5wapd1OXtbdwabJVX4E2hrLFM5njr6+Hg7qd1e8S6xEltiXPieG6cHOKxUm7DS5w8Lt2YkK3NzJQT063zgrCqtjjC59ocYjvpRtFutl3i8WPM3U0dTZlM8erNe+VL7136kIeUb+r/2zHGqqzuvCvX5tAec0f54ls+YMwNpdv5TvGQfG52W7EqxzgrxU5dbZFOL9+zTPGYuqrGePE8Wu1x2uraYHM+WWvcOMcVSG7/7QFJrus3lzfp4nHa6ie1XGjxybsjqXjh7je1fFycU4d87/4niXwGHptoruypOeXb4xC9b/E3oFhb+Te1/pTvxAFjLu/h3OJnigvCfBDXbAKrlnjaNsapvOKdc3W0J6p5hM+7reYnifxSXfYttv+8hI6HAbV2y7I9jqJ5xMideoirl6pam14fDxPWPHd0a4w8EsZmlo8act/YY8xDK48nzc+j3cY5hy4s8dZxYdVuDWqNT563xs1CIZ8Vd2NGN/rHE91cWd18ehcPhO+mvGKMt44/Ym7dg10f01vnKJJm0upiD/LJ5xn596OqevMmrSf/6//6/xNSf/2TtKP58Y/STzzdqVI9xNn2Gk+D72L013ZYBogfqxI/dpv4sSPxY0fix47Ej93ILn7sQPzYDeLHnkn82I0HEz92KzmkiR+7SfzYkfix5xI/diNV/NgziR87Ej92JH7sBcSPHYkfe8HlX0z82E3ix47Ejx2JH7vxB+LHblxc/NhT4seOxI/dSBU/diB+7EZe8WMH4sdupOZLix87Pthfp/ixb2onDAAAAAAAAAAAAAAAAAAAAAAAAPw15ANkAAAAAAAAAAAAAAAAAAAAAAAA8Ir4ABkAAAAAAAAAAAAAAAAAAAAAAAC8Ij5ABgAAAAAAAAAAAAAAAAAAAAAAAK+ID5ABAAAAAAAAAAAAAAAAAAAAAADAK+IDZAAAAAAAAAAAAAAAAAAAAAAAAPCK+AAZAAAAAAAAAAAAAAAAAAAAAAAAvCLztA9P/mm7XmOG9M2y67qG1HFsvne273tKHp4+6l/Iu6W8H3/8SUh9fPwi3bdqik8+THNIXddUnsMQX7kqvXNVrSn7cH+Jt17ytbN5jm+9PLw47zQ1t15jE71/80FI3SuV2NiV97Km99pjdeTmP8XXvsZXrq5Ix0u69xb73djVx6XSrXOnzmPCGseTqpqm2MK3VGhbbAlDHG3uq2uj0RLfa44FPsSBrqqu2xZSL2O6+MMX70Lq/Zv75tYPjyF1GFORznN6sGU5NVhVrOs6TII/bd1TebZyv87y7PDw/n1IfROHwZOGIY4nXRPd43vdDWk8ucaWkPtOb2yePNj31KnzePJ1/iBYljTQXe7SIFlVn376aUi9j6uIyxxnte6l9jV1rjxET3EtusUx9v1Dmser6u7uTUh9jANd/rDvBx+mK1fVw0Pq1+OUl8G5Y6bSnuI6trrK/PTTz1Pecx87zk+eFz95TMhXrm4Rcn+f5sTrNVXlfLl78X2re/Kc/W5Onfr+vmui13TrvBfLc0e7ScxzYh5Fc2peqbbjc57o1zVNW1uu6qlpCcOebr1XHGPje02xsqpqiauj+ZI3iS+fyvMwWFV7LPC8U5vGOGN2E3Uusj2W2DDExX9uhE0zaVr4mfY/xbV9VQ1x35FvnSemdgBv5LeOlTnmA6tuKJtj52rGyXjlfW+2S3kV3Q7CZyzX+GyxSPMmcd3TMngam+VNc1IR2/8Sp7w1bg2q6i5v+WNt5/Y/NF2+6TtTXm3m48e4ra7u5LPZRcYmusQJdewWurlUugE8j4R5fdL0uzzUNd027m3bQ44zw+wU1+dfQyq06xLXork6tti848KpurrO1ZFbSfNTSFWeAbqhLI4n/Rl4HGZz5rijz3uW9iRtWF++vD9zTF3nzie3LZ6axgOWrR3AY5msed3VHJqe++kqnvLlw7Raut4RW3hTVXEp226IsqYR5hX8npcBzWvlySXP1XuszD2v6Lruc2KerzWuQKobwHNdd04sfrre0cxa+ag5Lxe7vpN/7F7zUUUcotsBPI//J6ID+rPNnH+Lx9RjPIhe86FrfqpzJ595pTrGEbi69U+3gEmp7UI3nyfssRG253Qx75kBoTtWyrfupvJ8opXXoj/8wQ9C6m//1m+E1PxLSlVN8dYx9KCJx8gVXVV7xbVoc1yQ57xueRN7/b/51/86pP74Tfr56f4+/S7wPv7sW1WX+7chNb9WHif3x6ctcDr0F/FjR+LHjsSP3bi4+LED8WNH4seOxI8diR87Ej92JH7sRl7xYwfix5575RI/dov4sSPxY0fix27cWvzYM28tfuzGteOVxY8diR87Ej92k/ixW7cWP/aU+LEj8WPPJX7sxsXFj91IFj/2lPixW1cWP3a8tfixp8SP3corfuwp8WM3iR+r7hgKAAAAAAAAAAAAAAAAAAAAAAAA+IXiA2QAAAAAAAAAAAAAAAAAAAAAAADwivgAGQAAAAAAAAAAAAAAAAAAAAAAALwiPkAGAAAAAAAAAAAAAAAAAAAAAAAAr4gPkAEAAAAAAAAAAAAAAAAAAAAAAMAr4gNkAAAAAAAAAAAAAAAAAAAAAAAA8IrMb+an3yDbagsZxvjNsmVYQ+q+pytX1ThPKfuWLr7VHlIfHh5D6iXet6qWZQmp05Cyj2MqsWFvvgGX3ysX6bCmEhvH5q23LV1839PF7y93IfXdw/t04z29cnVvfV3Sgw1buvjd5dLdOtbmmB5sXVMryv1u78okN9F5SI/dVXTTbXPyNKVmlh/70lXHul5D6r7G95qGkLrlVtR9uTFdumqNfaeWVNfTYcR+eus93jxmv8Qx4bqkUbSqllhouTZz78jtv62OaZzTrfPF45XbjrlXHITjeLLGjvnhm7ch9Rqny+p6fX7tPebNU15Vzbk64rQ1jbHbdm89xLaS63rbUhPN8jxeVXt867u7NJ+ucaCrxzRIVtWb+1Qdbz54E1KHWGbXxzjRV717/y7d+k269WN8r7u7lLd1vaaL5waem+hnn37Z3DsO4FNcWV2X+Ni58Q+5+TcrgTwQXmPfaW89xT/Ic0de6N7f3+db50Vdbid3d+ni65by5j5dVXn8zm/97svU78Y4Ple3smrnzJdnrYrDZFXcgc5jWoHktWj7se68Esipecbc1m7uiJ0rt4QtvvXeLq1ihW1xoTt2vT54fGzWolMz1uUGnB47r0+q6nKJy5u8dmrWXSm1XXdVbkixOvJEX2tz6zG+WB7/c4GvzQa0LlOqjrwMbvbs8bH3a9NOplikuUSb5t0No3l7u8fKah67q44pjqR7nB3yYJXbyRLn8aqa884ib6ubl2rkqSf3jnlOzXuP5139kq+betLF81nxtdlM5YOjIXbb+NI15pVTv3yJTTRO9Jc80MVeWVXjkC6+xM3vtL98VqqqS6yOZhSN79VOW0schGuL1TXFppCP37vpNJ/e5C1/tz45tRfrjm/OXLk5TM7bwO6oOWWe57Tzre4gOo+xufnf3TVNYY8372ozbhziVmus7kecuJSdprQ/nZoHy3euYXp5mayxAe9LtzeOZ/tTHHD2+GBbnFrayTL/xNmNk+nKU1zlVlvgeRsYO2Z763wqO8QXu+ZdeSzxqfthNx+6Nj+kxHVXbidVzQid10558VNjrKyYWlXNOJrbf3/xM3IHSIl5GVxV+TxgaLbl+dpJXi5W221jS2jWPt2tcxvNRZLnnb1bWuX6muO6q/kp/JI7Xrvuyov/PFnn8uxCQZrFf3rrDz/8IF25OdFqZts9rs/XbomSrpwbWdUUn22J4QEV43balpCPEP/Wr6afn+7mVB2ffPxxSP3TP/uz/GCPj/nH2ZQ3n4HMh2XVm8PlxI8diR+7dWvxY4eLix87ED92JH7sSPzYkfixI/FjR+LHjsSPHYkfOxI/diuv+LED8WO3iR97SvzYkfixI/FjN24tfuxA/NiNi4sfOxA/doP4sRuZz1xZ/NgN4seOxI8diR+78WDix24kih87Ej/2lPixI/FjR+LHbhA/dvDc+LH2dBgAAAAAAAAAAAAAAAAAAAAAAAD4xeEDZAAAAAAAAAAAAAAAAAAAAAAAAPCK+AAZAAAAAAAAAAAAAAAAAAAAAAAAvCI+QAYAAAAAAAAAAAAAAAAAAAAAAACviA+QAQAAAAAAAAAAAAAAAAAAAAAAwCviA2QAAAAAAAAAAAAAAAAAAAAAAADwivgAGQAAAAAAAAAAAAAAAAAAAAAAALwi87e/88mTf3r//l3I8NHlLqR+/oMfxttN+Wn2fQ+pw5g+lzZsa0i9u0uPvS5f5gfL9i09dsXHnuc5X/xxeQypl8slpK5rKpOqnFpVQ0gbx5S6r6lMxlgm1+s1P9Y0pYY0jFtI3dYlpW5NE93W9GyxHTRyiX2Na6fqWJb01rk89z2VZ1WNU2rDTW3GVvT+3ft868tdav/XPbXw+yGOCVMq8LWrjjFWx2VOBb7GAr921TEN6eJbbAlLboRD99axX29bevJ1Sw82xFuP3Zc088yyLunBhjldPL9ydW+9xDF4T42oHuLUEN+4qmoc0tW3mP/uLnX5PT931TWPorERXi7p1lvXMfe4TjjzQdY5jqKxx1dVLbHA8yiaG+E+NCPGu4eH9GCxAV/iAL6sqYlWN05+/sUXITVPW49LLLGp67axES5LHE/iYDXH8aSqHh9i74gNfI+j6DqmvtOuRR8eU23ezWk+zcvFKY5FVVXVtOFgiUu+/SGlVjd35Aeb7u5T1jW/VPPK2xAnpvXl09Y0tVuD9GztzBPSljgXV1cdzc4izphDboTdW23NMBuH9zjGtrNS7Fu1dSvGoO2XuTpybc5545AXCf36JrbwuETJG+d2ybfkqSdP1rmdxbfemvGka+FjvPW5TeI1toQxHg3lxx7blVXs9VteEMbKytvAcWjm0zWfd23xvGtKZTLkqqzKw1Fega+5Z3W9IzeV7swqnu00K9V0VlBVa+w+Y+XlTXrs/uwmTuX7Hvfsefead3n56LJr//lYaYsNuLXEvfEeTznyenLZul1JXCdvzUnFy8922kntIWa/xKFw2dMuL58GVFcd2RDnjofH5rw3/24wbHF2iBfOo01+7Koa5lhfcUrc8jKg65hD/IMtrgiHfD4TJ8TqzuLyKJonpmZqeH/ud4E8Jiypd+zxJLk1xdOGptPHbcUa97bVzYk1pQP2uylNeX2ZxEcbx7grjx0zV3RVPebscSWQF4R5aTTnnVjVkntHzJurMi8Sqj+cjyNhsz55+QazurGuKdBY4O2GaI7HsrnAu+rId26y5xaeNw75TLUt0fxgeRTNC5jHeH5Y3VtvWxr/p7jb2rtxco9LvvzWeS4eY5ns3Ro512aznox5+01i+3BfLV/72lXHEGfMvG3J59hLXr13RbLusRHG9eYaC2WKO/qq2q75pCJOas0AHh+sOwM8c/E8Kw1NUERtQ5zo42+FbV1nX372aUhdHtN68sefph+2ro8pBOvtBx/lB/vhj78fUvNcnWfM/ZD67e9+58m/iB97LvFjR+LHnkv82JH4sSPxYzfuK37smFf82M2Lix87ED92JH7sSPzYLeLHnhI/9tz84seOxI/dShY/dsgrfuyYKn7sQPzYkfixm8SP3cgufuz4B+LHDsSPHYkfOxI/diR+7Matc2bxYwfix248mPixA/FjN+4rfuz4YOLHbhE/Vud+MAUAAAAAAAAAAAAAAAAAAAAAAAB+zvgAGQAAAAAAAAAAAAAAAAAAAAAAALwiPkAGAAAAAAAAAAAAAAAAAAAAAAAAr4gPkAEAAAAAAAAAAAAAAAAAAAAAAMAr4gNkAAAAAAAAAAAAAAAAAAAAAAAA8Ir4ABkAAAAAAAAAAAAAAAAAAAAAAAC8Ij5ABgAAAAAAAAAAAAAAAAAAAAAAAK/I/KMvvnjyT0PM8LA8htQpftFs6Z5miqn7sIfUYU+pj4/vQ+oYr1xV85jea4233pctpD5sqTx/coGQdl2vKWd8r3ma842nMVXIsqRbp7SqdYtVOeQ2WI+P6fJzvPg0pZe6XvODVzXPFltCagg1TfnKTZms6xpS72Jd57ceL7lf1sOXX+Y/CKY5PdgwNm+9xM5Ve8r+7t27kDpNl5A6z111bKk6ljhi5PY/dmWyx0a4rKnErtf02NvWDOFvLnf5D4Ihfgxzj2Wyx8ZfVZdLuvoWS3SMk8MWR5uqWpZUaHk4enxMs0OeWcY4Z1XVFhtS7pgPD2nE2LbYK6uGKT3bJQ5W7x4eQurUzR25WK7dkwe5ES5dO5limdSaWtEynGsJcRWRZ4e72OWXOFO3cmUuMfUa+23ud1W1xNl6iGvVfPEvvkxr0aq6u6SpZ8ktIQ7RQ2wn79+nnlVV93N6sC/jMiBPanucEKtqmFMbzuvz3IDneOWq2uP0sMb5dHpIY0Ke1Nomuu/x4rFIx7i2b+fTPFhta1ObQV4GVLeKHuMqOpdJLvCta6L54pc8n8Ym+uauWVblxf+Qt7exKoe8Nur6dbO8iauIPG1t1TTReU6Fdr3mzViqrLlbY+Q2mp98isckbRPM6WOsjqbA38cCz6uXqiF27CFOW3mIXh+6g6V46zVW1hy7bS6xh2sz0edBOLeyKS6shrmZO/KZ1dCcNuRTjqYRXvJyNL72lm8dX2rZTq1F5zkOVnmT2A0Y1/jW3YFYXPLFRUJ71JY1O4t48byOraopdts9l3g8iN7i4UxV1RQbUjwDv4xpkXxyGTzFiekxHjV0u8BG3tRf4p6lOWBs96expcRDvuZ8Zo8D3dadBm9xC5rXXbkq97zMrdrja+edRS7urZpb5zOWpg3H1K050WpGjNyrczPrdlvdeW8stFybzQlhXr3vTd/Jbz0OL/9doJ078h/k8SSXWPszzTjG3dYeT/7jAJ5XII/dUrTpXLGqm98F4tlOVa1rro7Ue5rjgr2pjjzWrXElMMWZZVvi8qbbMOVb52Pqbphs5DXhFn+Iyfv9JVb01D123qnlNrqe+0kiV0feYz7GvJc4IFQ1i4w1/lYy5r1tfOtlbQIAmh+nhvgbfd7ldduSfMCYf6/Oraj7sbs5Vs1bzD0uBPKIkHtWVeWVwLqnVpSnrSX+ClNVsaqbWz/EX82WOPgPXaBIntSmWGK5TPoz8NwU8u+nU9wuVXPo+u2P3obU+/i72BADZPJE3x4r/Y2/8Wsh9Q9+9Ech9f1DuvixOsSPlfixryB+7AbxYwfix47Ejz2X+LEj8WNH4sduXFz82IH4sSPxYzfyih875hU/diB+7CsuLn7sQPzYgfixW9nFjx3vLX7sKfFjR+LHjsSP3cgrfuxA/NiR+LEj8WNH4seOxI+9gPixG9nFjx2fS/zYgfix595a/NiNvOLHDp4bP3ZuTwkAAAAAAAAAAAAAAAAAAAAAAAD8XPEBMgAAAAAAAAAAAAAAAAAAAAAAAHhFfIAMAAAAAAAAAAAAAAAAAAAAAAAAXhEfIAMAAAAAAAAAAAAAAAAAAAAAAIBXxAfIAAAAAAAAAAAAAAAAAAAAAAAA4BXxATIAAAAAAAAAAAAAAAAAAAAAAAB4ReZ1ePpPw5qzbCFt3/eQOozN9872w8P8hexbuvUQ887TFFLXpXnnfU5XHyql7nt67C2+VHXvNY65yFKBT/Ocb70tS0jNlZVT1zUV+NoUSQ2xUD75+DshNZf3ZWrK5Mt3n6fsl0tIff/+y5T37k1K7SprXa8h9W5KF1+Wx5C65TZW9fHHdyH14eF9SL2/+yA92JoerKrG2K/fv0+3zo3wLlbH2A1lc6yvXFlTfKn21svS9Z+vNgxpAH//vqmO3H0+/PDDdPGH2Dvu05Xv5tTvqurxMZXJfEkFXnFSy1Nea55TbS5xBL5eUwN++/ZtvvX1+hBStziCP8ZO/cGbj/Kt373/IqTe36favI/d9ssvUyuqqik20TUOOHd3aaDbrqmyclVW1cO7dOvpkm49jumlHh+bW//oRz8MqfPlPqRer2ko+yh2+ar6wQ/+LKTef5AG4c8/T3Px3/i1Xw+pf/7nf54fLDekjz5KLTzn/fyLd/nW3/7kk5D62WefhdQPPkiVlRvhu3fNg82XNFnnkfASB7q8cKqqzz77UUj97nfSki830cdujfHwkIrlV3/lb4bUP/3TP4kPlqrjN38zXbmqPv00tYRcpLmJvnmT+l21m5rYzC5v0oNdH1NlVdWypov/8iffDql73Frk3nGJg39VxV1gsyD89Is0lA1bsz9d4hrkwzdpTHj7QerUX3zazKfZfJfqehjSumvbUnW8/Sg9dlWtsTbzlievwD/++JfyrZd4nrDH2synHG/ifPonf5RGm6r67q99Nz1YHMDXNS0Xc4lV1f1daoTjnspkWdODXfNZQ9UeL75v6eJv3+aR8OWr96qa4/nMtz75OKRe5vRg7x5SZVXVGI/53sRVxBpL7E2s6Kq6/6W0dnqMe/a8+X38Ms3U7Rrj449TgX8Z96dvPkwvdT0es/5F9/fd5BLE5j1f0ohxd2mOlfJQltcJD7ERfvhRGouq6t27VOBjPAP88KM0RG9xKKuqaUpN5fPPPw2p3/qlT0LqGoey9jChG2bj8iYug9vT4HzasMZB+P4+jifxwapqmtLF85jw/l06amh+sMiH71VjbCdDTN3jOcYW20lVbfGk7oxmIq9a4pMvW6rNcUxlMr35Bo/acm1u8eJ5BVJVlziQ5rXoNKbese2njpXGig+2p75zF1fveeFUVQ+PaZi9zGnK2+OJ1lxdS5hnbZa1AAAgAElEQVTSe6159xovvC+pf+zVVMceV4x5pTrEt166ZXAskqZzdan5zs2PmNuWkq/v8niS8ra7kj3utrb8u3C89hBfqrrhaGl+7I6NsPl1tR1F061zke6xEa7dL1O5TKbm4nGXN566dcWu91ixncTH3pvxpm3DacDJ7WTqbp1/K88rkDNdvqrpXHnqGfc0d7x7jAvCEz+eVvdgwx53oFszWA1beq9LnOjzDxbdfbtdSazs3LOGeAaSzwDbi6+x2w55Kp+bQ9d8hP6DH/wopP7dv/2bIfXhMe58ux+7//Xv/1H+g2COm6m3h1OOx/3pOar4sSPxY0fix25kFz92IH7s1q3Fjx0uLn7sQPzYjVTxYwfix47Ejx2JHzsSP3YkfuxI/NgLiB87Ej92JH7sSPzYkfixG8SP3bi4+LGnxI8diR87Ej92JH7sSPzYjVTxY7eIH7vxB+LHDsSPHYkfOxI/diR+7Ej82HM9N36siUUAAAAAAAAAAAAAAAAAAAAAAAAAfpH4ABkAAAAAAAAAAAAAAAAAAAAAAAC8Ij5ABgAAAAAAAAAAAAAAAAAAAAAAAK+ID5ABAAAAAAAAAAAAAAAAAAAAAADAK+IDZAAAAAAAAAAAAAAAAAAAAAAAAPCK+AAZAAAAAAAAAAAAAAAAAAAAAAAAvCI+QAYAAAAAAAAAAAAAAAAAAAAAAACvyLws+5N/Gsf0VbJ5nFLqfBdSr/uWn2aPf3B/SRefY+q+P33NZxmHIaQuW3rsIeYdpu4bcPnisbIqludyveY77/HWW36w1EyqKuX9l//yv8mZ/y//5/80pqcyyY+976myqmoa0sXXbQmp+dLrlqrj7i4176oaY4nn9r9tMXVPL1VV+x7LZE3Zc7eMXecnt27+IOZNmYdc0bEBt3KBj2N67fUwYj8xxyEhP/cQrx3ruapqPFEdsV82n8psv6PZPFeTHFth1wTnS+6Ya8o7XULq1s2nWZ5t81s3k1pbIU07iw8WW2E/0cfONeRxMlZWXjjtzfDfjHVDzJ4LbMwjQt8SktwS2vl0iC2hyR1H0e7B2qHq5e0/NrHavtG16BpXZfHK7fA+xPoY49ZgW1Pf6eb5btqKi59hyLmb6ogPXvMcV7p5nKt46U4ecPJCdxznM7feYo3Nee0U2/9YzWqz4sWbiSX2nXWND9a10Tzr5crKDXyPr1zdKHpmrbptTROdpman9+KL5/Gkmk7dbY3zfBqLMxd2Vbce3eIomsszztRbP57EJ8srkDj4twN4swONA2U+dOqWGJVH4bx7neL5zBpn23Y7NI9peb8sjyF1iluDvK2oqqbG8qlSrMo9l0nV5ZKmnqbr5XVX7PJNZfUHAn07C9fOyfnia+z1uTzHeOu2TPKufIxDYV7ojt0msdlPxRLNRyh5H1fVrDGa7dKW16KxTKZuLZoXR93qJ105L3Or8mzcHbDkEbjJnRvSZc7jST7vzfc9dcCST4PzbyXVNdHcMfMB45TPQIZma7DFk+o8lOUlX66s67XZGlwucU6MRZbH2Hbwz8vk/GvIusQHi1eOb1xVtcURvlu9NwcGza1j9jz+f/rZ+5B6151ojXMql3y2//Zbb0Lq+pBWZUs3ik5T6lxb3Kq9ubtPqfcptbraylP55c3bkLotTce8/yAVaf5h9z6+10P8ETMPCFX18bc+DKmPse98+5NPQuocV2VV9eGbj0Lq+8eHkHp3n0rsg1hiv/StdN/qCu2zzz8PqR//0schdY4zdXXD7N0H6b0+jw/2Sx82b5333Xd3H4TUNY7+b9+kxt/+sDvEse6zT9Nbf/hR6rYfvE2pVfX2g9Q7Ku8d4ngyx2GwqqY9VcflLjXRtZm24uD/NlV0VV0f08T07n1qCc36pDtEyZN1Xqp+73vfC6m/8Ru/mq7cnnzGZfQSZ4e8y/viXSrtqvrobWyiOUYlDkf5/Lyq5rjG2OKi7v37dyH1d//O3wqp/+Kf/V5+sH/4d78TUv/4v/pRyhyXqpfDb9lffil+rCd+7Ej82JH4sSPxY0fix47Ej93IK37sRqr4scPFxY/duLL4safEj90ifuzZxI/duLX4sZ/pxcWP3SB+7Hhl8WMH4seOxI/duLL4sZvEjx2IH3su8WO38oofO9xa/NiB+LEj8WNH4seOxI8diR87Ej92JH7sxpXFj90ifqy+xi/vAAAAAAAAAAAAAAAAAAAAAAAAwC8OHyADAAAAAAAAAAAAAAAAAAAAAACAV8QHyAAAAAAAAAAAAAAAAAAAAAAAAOAV8QEyAAAAAAAAAAAAAAAAAAAAAAAAeEV8gAwAAAAAAAAAAAAAAAAAAAAAAABeER8gAwAAAAAAAAAAAAAAAAAAAAAAgFfEB8gAAAAAAAAAAAAAAAAAAAAAAADgFZmHcX7yT/u+hgyX+0tIXa9LSB3WIT/N5c2blLylB/viiy9D6r7t6cL7Fp+rlnTnqmreK1358Zr/4HL3tIK+/o3X+NaXS/P5uXVLxXK53IXUIT7Zu4d05R98/9P4XDVNsRGmNljTMIXUZW1qehtSkY5DfLAtPdk4pIre1q6y4oPta3zsMdVWf+s11eY2pOy5Y+ZWVFXrHt9rT/n3mLemWCbxylU1VKyO+OXH3AbjQ1dVXfNgll86Zt1iK6rqKiym5urIt97HpolusZnlQsnXHrvBP9d1Tt1ymcSKXruhbJpSbY9NE00X34dmPs2DcG4nQy6xat56PCx4ftqey7SpyvjY7VgWh5QtLn4qDuD73vSOJXauKQ7geU035DG2aogtIS/MmgKPtx7iS1V13T4PR7Gut34IT7bcO8ZYnnlMiAunqqopT+WxEebxpOl3Neb3alYRecRoqqNZHeVuGws8V1Z1u5LmuWOvz11+7ObTip1ryQvdOO9scRlcVXGd28yYuUzGOG11tVH7GMeE3ETjlZvBv2qI9dXOPMHejZNLfK+xyZ5aQtxVNBNHdQWeO/USh6P+q+351vECy5oOBPKE2HbbKW5q9iU20Xztro1ty8un8i13zG4gjONNk32JRz95Cb03Rzt1neMqOrb/PS50253aEIfRIVfnEIejrmM+vH95ka5xJNxjiU9zO2LE1MrJqTzn+dz/6SGO4MtjXLfFMWFtDguq4qSWl5NjfOwxl2fVusfD5GZWy2vRRj69yQ2lGW3i1LA/dnv2+T6kNrvyeLDfjuDDNV78xF6sO0trKuzdknp9vvgek5tm0C1v8r77/fUxXblbZUxxL5b3U9em17cHR/mt42QdJ6a8vBmq2Ro8xu7THCHG4ajfEOXRLG6N854l73yXuGarqtri5jeP4CcObKtboi+5mcX1eTtrVZ4T43ry+oOHkLo0K/BmjVEVB6tYol/u6cHy9rO66Tg3wuZXs25/+jWK5SvllWp+7PaUL7fh/PtRHhLa3pH3mM3Oollt5rOytvO8/LxgbibE9spx/M9L2VjeuRVV+8tVP/5/tdyz4m/Z1S3b5vhgzY8Z3e8CuUz2OEQ3Y1l3JjVNaa4f48XXuGzLG4fcgKvbgV4u6bHz+rz/hag7Jgxpv/VbvxVSxyY8phveT4wY+a0/evthkz3eeo0Xn2L7n8e2Y8YlSjz8+eGffT+kfvj3/mZI/Xd/9zfjc9UPf/RZSB3jVH5d0sLps0+fXnm4e7ohFT92JH7sVnbxY0+JH7uRXfzY8dbixw7Ejx2JH7uRKH7sSPzYM28tfuwG8WO3by1+7Hhx8WPHa4sfe0r82K3s4scOtxY/dswufuxA/NiR+LGb6SFN/Ngt4seeEj/2gluLH7uVKH7sKfFjR+LHjsSPPffi4sdu5BU/diB+7Ej82I3rih+7RfxYfZ2zUAAAAAAAAAAAAAAAAAAAAAAAAOAXhg+QAQAAAAAAAAAAAAAAAAAAAAAAwCviA2QAAAAAAAAAAAAAAAAAAAAAAADwivgAGQAAAAAAAAAAAAAAAAAAAAAAALwiPkAGAAAAAAAAAAAAAAAAAAAAAAAAr4gPkAEAAAAAAAAAAAAAAAAAAAAAAMArMtewPvmnu8tdyLA8LiF1HIaQOkzN986Wh8eQev8mPdiHH3yQHmzeU+pwyQ+2ryn7sqUymaYppA5bKrGqmsY5pG61hdQxFvi2pbytxyVV1jSkW1+mVOD/+t/8q+beW67NVKTrmt46l3ZVbXuq69pj+6+UOo6pTMax6Tu5NochNcItNuAaujIZUvZUVVX7kNLX5eno9ER8rdrycBTreoldPrexqtpjXe97uni+9pjfubt4fK66xlY0VtsS0q3zg41jrsv0YO1ItsURY57ze6WrL3tz7zmOCRXLZI39MpfY1I0YeyyTfYyDVZzUam+aaDbEMaOr66ZjVuzXQ5y29ljXTd5Y2icvnmeWroXWkJtoHI/2PER342R8rdzzarqkbruu6cGayujm0zl2vaauu3sPsdC2uIDJ3bZpot2TDUu8dXzsvAzu20lu4fGt83w4dSNGvnWujiF/4jk277Fbi+bqyq1oWdLU0m4N8nJ0mOIKfEsdMz92db2nXR2lK8dhMI+RVbXHljBOcbbNU15uwVVj8wd5dogrq9izqiqndw/+8kVyu+4a57jluZ5ohH0TjYu6+OT5rcY4nsSlTVVVxQE820/krXaib7p1LvDmtfNg1tR1vHben/YHLHF5P81xso7V0Y+ied8Rm+GUd2ptK4ybxGucHcZcHfGl9rggrKopdq4tZh/jlNe2hDxONmc7c7p13n42ZwVV+5KPQVLevDSKiVXdGmNpRsq4e+1GjLwSyHXd7Dvi1iCvz6tquV7TxfOMuaa87QFjHlLG2DObIaEbMLrjstwKY954731vRoy1efRuMv9q126wypfO513NrqRzzWunfPE4+G/7qQfL3bZ76zj4tyurmD3vtvLxY67K9rxrzXNH/CEmj9FjtzXIk96WqyMefa7dWzejWWxm17yKaI5z2wb88p9plvjb09jdejnRkLr232y6my1P7rbx1mPsO/nHvmqPmvMy4NxgNcRCW+O6K1fWNb50f46Rz2fiY2+527V79qbbvvwIZeyaaLcSzscFuSXk5WJalbWuTQBAjD2IL1VdC5/jvqM52+n2p3mwyu2k2W0NOTUltn/xcI0TfX7stbn3HGszD9G///u/H1J//bvfDql5BK7uRDf/TJnHk+vyPt86r53yjn6Jj703S+ya4/n8/+Q//LWQ+s/+2Z+E1E9/9Gch9YvPfpgf7IsvH0Jq3p/mc7pj3lH8mPixFxE/doP4sQPxYzdSxY8dLy5+7ED82JH4sRup4scOxI/durL4safEjx2JH7uRKn7s5q3Fjx2IHzsSP3aD+LED8WPPzS5+7BbxY4e84seOecWPPZ/4sedmFz92I1X82IH4sSPxY7dzfzXxYzeuLH7sQPzYrdSU2P6F+LEj8WNHvzjxY/lRAAAAAAAAAAAAAAAAAAAAAAAAgF8kPkAGAAAAAAAAAAAAAAAAAAAAAAAAr4gPkAEAAAAAAAAAAAAAAAAAAAAAAMAr4gNkAAAAAAAAAAAAAAAAAAAAAAAA8Ir4ABkAAAAAAAAAAAAAAAAAAAAAAAC8Ij5ABgAAAAAAAAAAAAAAAAAAAAAAAK+ID5ABAAAAAAAAAAAAAAAAAAAAAADAKzLXsj35p+v6EDJcLnchdRviF822p/d6YhxT9iF+Lm1Zl3Tl+GDX62N+sGGaQuo8ziF1ii/1WE2ZXK/XlDwOIXHf08WnXFlV45jeel33nD3Y01PXj3/84yZ/fOtaU+IwpLzbllpRVVWlt163VFnxzrXG3tGW9bqm197HdPEttpM5PnZVDXssk5iaq2OYUwusqj1fPObdYoFPU+od+/byxv81nGyieRRNRTrk4WhoBqs84Oyx2+fqyO2klWeWfOtqhuhmFD3zXk3zjnnzK1fVsqSGlG+dK3ocmm6bi3Td0lDWXLxtJkN6ry3261wmeQRuG/CZlpBv3baErq5f3ghbZy6eG/AYm8IaG3AvD3SnLl1TXG3mFp5n25POjKLdGNvI7SQvZa9xPGkbcL71mbxnunxVM5TlhpLbWFsmTW3G52qWfN2tm2G2G+vSleNzt42gG2RzYmzeeUA4t8bIJTb2jTAlfnN9Z2q77TVuiL6xB6uuwNe4+BlPfBR+bOsqbpy3Pe+cU+LWnQbkY5CsKfBuAdL1jnjrE7PWyXVXM9Cd+58H5Lfe1lhiebnYldh8iaNZPsfIbx0fe+tLLJ3e5CG6Ow275BufGcDXx/jYcVBom2h32vDyRnhyoq98PhNPg/e+Y8blfazrIe5PmyvH88PqVgLrid3r15gQ05Mvy6ltYHZmsu6uHNtYu6bbY9drzrvSjw7znH5TqKplSdnH+JNEPsfLZyDVFlq8+NAf0Hyldm8bD7mbkTAvfppm0v501fzocO4sIhriJjGvGHOfbiuym9TifNrcuimxMyXaHKvGxUs3nnRT+Z6mrTM/Z7TOnEXs3e8ClYeUKQ1WQ5wxl7g+GfJvgVW1x81vU1nxrbtR9MyY0C7bgrwCaW+d93FbLPD2qLg5+T9zthNn6vbiZ35nzBNiXKhWVU3599fYgPM4GXdLVVVTPC7Ix6q5xNqqHOPMlPdiS2zA85T7XX6uyg8+5Z9u86W7uSMv7yu+16/+yq+lO8eV6tKuu3Jy1IRMdCefa3zy6RIjc/a4mVrauSMWy5bCqGLXqU9+6ZOQejc0Q9l/+6/TmPIY3yuvyh6Xp6kfiB8TP/ZV1xY/doP4safEj/2siR873Fn82DPzih/7ij8QP/a8i4sfu0H82IH4sefmFT/2gluLHzsSP3Yju/ixA/FjN3KLHzsQP3br1uLHblwgZw/Ej91IFT92i/ixI/FjR+LHbt1a/NjziB87Ej92JH7sRl7xYzeSxY89JX7sBvFjB+LHjv5axY+dOoQCAAAAAAAAAAAAAAAAAAAAAAAAfr74ABkAAAAAAAAAAAAAAAAAAAAAAAC8Ij5ABgAAAAAAAAAAAAAAAAAAAAAAAK+ID5ABAAAAAAAAAAAAAAAAAAAAAADAK+IDZAAAAAAAAAAAAAAAAAAAAAAAAPCK+AAZAAAAAAAAAAAAAAAAAAAAAAAAvCI+QAYAAAAAAAAAAAAAAAAAAAAAAACvyDxdDt8g24aUYUypj9fHkDoMU36aPX4PbV3XkLptKXUc06W32uNz1fr+fUidLnN8sHTraWq+AbfuW0peUuI4xwIfUlW2f3CZLiH14SGVWFvg2b7n7KlI91ieQ1cm2/byJ89PnTvH0H0qcKqUf40FPserb1tsgVVrpT8Yx/Rg+eJtdeQ/OHPxfONTzbeTm3c/iu5pJMydeoqVtcepobpiaceb4GQ7OSVOeePa9I5xykWa8ub3yu0kT5etrkjzg526de2xU8ci22NlVd+vU5F2c3W88omJozXlNtZMl1VD+oM9Du+5OvLgX93ENOYHz2PCnGprPjdi5FVEbsDtYHW9XkNqXspmuSW07WRrG9JL9U00elzSOnj6JmeHbrL+JiemaFvjg8WulVt3f+s41g1xtKk9baaqHetODLO5X7X9bhvTrJdH0Yqpy9K8VLO9PbN2ypXVFfh+YiRsNondumuIm9/hRAtvB6szy7Z8BrJ3b52dGaxy3r53xEZ45sGGZk1X3b4kN+CU80y/aw15z5/XbO1UnofoODuce63K+5Jti0daeZDODSGeEFZ/KvXyJnrd0oquuoXuHgeFMwvCtomOYz7bzJ06X7zZGoxTHo6anXPM201qzR+8PHXN/a4bynJ1faOrzTWuJ8/0jtaZiakZwc/9L1i63pGGsjPdtrqWkE9g8gq8mXe+xglkkOedXJVTV1l5jd2sMeKV2+P3MyNGzpr3O+0pX66sa5wTm98F+pPPfDgf15P5gLE7gG+2t80vMS//TaFrR6fayRYv3o6xY+z1ed+cR4y8y/vJBVJavPfJ3wo7ccSouKPPLaEd3fNwFGeHbn3+8h+AqhtwhubX1VO3zrvfbv2e5LHoa8iLupeHPQzdDxZN38n7jhiPkSu6qoYhLW+WJW1qpjkP4KfGyTwI54GuG/tPbZyzMW95ut7RLGRPHKHnH3a7o8uq8S4lpjiR5seOr3ESnZ58eZfa/3x5E6/bVMf3/uTP0sXH9OT/0T/8dkj9+IPU7z77YT4hqc/icXFetbUrqyfEj5X4sRf9gfix5xI/9tyLix87Ej9268rix54SP3aT+LEbxI89k/ixny3xYz9z4seeS/zYrWTxY0+JHzsSP3Ykfuwm8WNH4sdu3Fr82IH4sRs3Fj92IH7suRcXP3YkfuxI/NiR+LEbxI89/9bix27+Sby4+LGnxI89l/ixW9cVP9Y7tYcBAAAAAAAAAAAAAAAAAAAAAAAAfr74ABkAAAAAAAAAAAAAAAAAAAAAAAC8Ij5ABgAAAAAAAAAAAAAAAAAAAAAAAK+ID5ABAAAAAAAAAAAAAAAAAAAAAADAK+IDZAAAAAAAAAAAAAAAAAAAAAAAAPCK+AAZAAAAAAAAAAAAAAAAAAAAAAAAvCLz3/iV7z75p4eHa8iwLFu63HQJqVvKWlX16RefhtSppnTry11IfXx8DKnjtucHW/b0Bw/vHkLq2zf3IXXf00tV1bAPMTklXh/SW1/uUmVV1bqs6c6x0MYhPdk4pC/fDXvzXbxhTy1pi5WV7V3e+Fo1junJ1zU99h5Tu65Ta+6Y8xxSly1V9Lan1Opqc41Fmkts64aMtr6CdU3vlR+sNeSGEuWXaq+8bfkPcl2ndjLEvFW1x46ZR6v8Xrk62srKdZ3l5r/mIbhqXVJqfvAzvaPtGvniXfaXV2X7B7myct6tm8qHIQ5H8b3yxbtG2D5YunWujpNDWdP1hrhEOTHQVTt3xIlpjguY7Zo6XlsmuXPFp25m23Ys6lp4erC87lpjI5y6oWwYv6kmOk3NMniPK6ApPlhed7XTfNP+/wrFrcEw5upIvaPt09OYdlt5jD25vGkH0hfLt16WOJFXTXNe/Kfsuf1PU9NIzyyDs6HrH3nJl4v0zCJ5iKVdXX1dxpd36vaxc3XEflnVLKGTr7E1iCPhmQVh7PI/uXm89curY1u7WzcnKHk4OrU/PaNZ1E15u9T1rHjGkttR82DddNnVV+7XuS5PDYO5rrs1dqyObmWVp/KcO3fMPD5/jfOulw/gQzywbY+VhniO8Q0OZd2st+9pZtny+uTELq/9gzPLgJO3zs7sbevcMHvq1u05RnPr1P7ziNFuEuc5/9SSsncvfWoV8c1Z2xFjSA8WD8jrElfgbXXkMaFrKUmeLtuNc37y+cTypm0na8y+5pO6fO1z251uTMhvnaeGpmt0tz7RTrpeOcSmkpfB+Te1XCbVTlv5pc8cup4oz9bJNUZuxHseyuKYkNf+QzcWxamjxikmx5duf5nNz9Zsq5vfStq54+W/d5z8NSRb1xSPMc95G5hnh1O/mk1DOuWe8szSjpPtBjbkjfuOvEnsR9FTP+yemk/z2X5e/HzvD/8wpP7Wb/xGunJXF0M8i8hLp/mSwmOq+S27GRPmOR1T5wdrJ7XvfPuXQmoOrvn0zz8LqY9LSv3lX/5WfK761e+kF/v/fvrjkJrL5FjP4sdK/NhXED9249bixw7Ejx2JH7t9gZAmfuxGqvix5+UVP3YkfuzGfcWPHYgfu/0H4scOxI8diR+7kV382IH4sVu3Fj/2lPixW8SPHbKKHzsQP/Zc4sduZm4u3txa/NjPkvixI/FjLyB+7Eaq+LFnEj92g/ixG1cWP/aU+LEXXFn82JH4saO/zPixU0ESAAAAAAAAAAAAAAAAAAAAAAAAwM8XHyADAAAAAAAAAAAAAAAAAAAAAACAV8QHyAAAAAAAAAAAAAAAAAAAAAAAAOAV8QEyAAAAAAAAAAAAAAAAAAAAAAAAeEV8gAwAAAAAAAAAAAAAAAAAAAAAAABeER8gAwAAAAAAAAAAAAAAAAAAAAAAgFfEB8gAAAAAAAAAAAAAAAAAAAAAAADgFZk/+/TTJ/+0LnvI8P79Y0hd1i2kbkPzNOOYPoi2D2tIXdf02MuW8i5rSq2qD958kB5sXULqMKTXHqbmG3Dbloo0X/wyXV585aqa5imk7rHAxy22osfUin7lV38lP9gf/MEfhdRhSEWa21hbJlt8r31PqRUraxxjaccLV9Xlfg6py3JNmYf4Uk3nqFiilQs0v1b30u3lX94Scs/auvpoum3Mm1tR20Tzk3cttLl4d+uXf9Eyv1eurHWNzbsqt4Rc4M2s1LWEpnd0tRmvfOr7oXs3Hadbxyb88JCG96q63KWJqWvAsbK6+bQbceJIGDPvsUDjO/0ke7p4LpOTTTSXyTamCWAYY2W1rTv+Ra7LfelmphPOzA5rXk/G2baqhhPT1vp15syv0A5Fw4m16MkmmptZNuUVeDdn9d3nm/E1JvqUmrveOKTlYjuNb3FROMTZITfvpu+cmx2mKa2xz2y12lvnRd8aN87juVuf6Xpt4z8zbTUTTyyTdkK9m1ILP/nWWe4+Tb/eU+a52b2eeuwzK/C9m+mnMS35cq/vzoXynZvFalfXZ5p3Ixd4HqyaK8fDmaoa43ya91NT7FlrO5Xn7W0+VpryzPLy9flPbp5unVcg7ZruhC2OhM0BY7NK6M4x9nS2eeb/YNHuXvOA0pzPxFbUrqzmSy60EyNhXiR340keJ88MR0O7K4l/MAz59PLUbHtmZ9HUdV5MxqfqLx6b8Nb+HNLcOrWEM6uydgWeJ6Z86zMTfX8SHRvhHK996sG6vfOZMXjPrWhtz5VyC3/5xqGXj5pzt11e/ptandsQ1Z6WN93Jf/tgL98Q7XkEbm/dbG9f/l571zGbSzd9J0/l+SDilPxrSHfe29x8i6uIpjabi+fqaI/acoHnnpVG4LY68lvnkTCnjt2R1haXbbm884nWyV/c8vlkt++O5dndes+HhPHiy4mgiOqm4zmWSY6p2GPvGC/Nprs5Yol953mHfjAAACAASURBVORB8h53oHM+28y/SDQLlKbv5NibZn2eh8FuV7LnFh5XR/mtl7gCqaoxFvjv/vZvhtR/+oN/E1K/9/t/HlL/3f/gN+Jz1b/3O5+F1P/892PmPNAd6kr8WIkf+wrix279gfixp8SP3fgD8WPPJH7sucSP3Xgw8WPPvHKV+LFbtxY/diB+7C+T+LHb2cWPPfPW4sdu3Fj82I3s4sdupIc08WM38oofu0H82CGn+LED8WNfcXHxY8fs4scOxI/dyC9+7CnxYzeyix+7cWvxY0+JH7uRKn7sQPzYjVuLHzsQP3b0cxQ/dm6BCAAAAAAAAAAAAAAAAAAAAAAAAPxc8QEyAAAAAAAAAAAAAAAAAAAAAAAAeEV8gAwAAAAAAAAAAAAAAAAAAAAAAABeER8gAwAAAAAAAAAAAAAAAAAAAAAAgFfEB8gAAAAAAAAAAAAAAAAAAAAAAADgFfEBMgAAAAAAAAAAAAAAAAAAAAAAAHhFfIAMAAAAAAAAAAAAAAAAAAAAAAAAXpF5WZYn//T48PRf/kKGu0tIHdY1pO57872z+TKF1MuUbr0sDyF1GuaQOqTbVlXVuoXEPSU2F9+vqcSqaphSoQ01hNRtSRefpua1p/jon335aUj94P5NSB3H9FLf+eS7+cH+5I++H1Ifr6kBnzQMqcD3fX9x3pRWNXSfCty31Aq39Fw1xg8Rxrqqqtr39OxjpXtvscRyeVbVNKZ+3WZ/cd72ymOs6+bWMTW3oqra99Tru9wxOVZ0Ve2VGmHu9Tm1c+pLmnkk3OP43tbz9vKGcK5M+nYSc8dmuMbR5v7+Lt96i9mH+NZnOnV763GMhRaH0SHmzb2yqoY4xOfHPqmbmOJ75TLpGmHTEmL23Du+0RI7MztMcUVXVUtctuUC3WOZNGuMrmedqY7r9RpS27XotsYCj4PVNObh/dR4kp1ZELaDf3fxlLdbT56YtNoxNo8250aMXGhr3J+2t27kZXAs8dyA2yXEmLeBJ8bYtkyaAt/SXmxb8jjZbsuTXNf5sfNbb+1UnvdTcVvdzLbnBqtza+xTzkzHeVvRLGSr9lykTeaXT/RtaX9z1dFe+cwo2ownXa/dl7z4f/lwlBvC1yiTNFh12U+tRc9MPacm+nZHn3teTO0Wuu2tX3562Ryh9IdpOXucHeJZcbe/bNrJmWkra2eWLW70zszVJ9ddeaLPlpi3XYGcWYF3Bd6OGC8v8TNLo9aZLU9XJqce7NQK5Ny6K+duOv3w8p1vVTPCNwvdExuHak8bYuo32gi7ltDMHilnO7Xki3edvrt4zNzU9cuHsv6ouflZ4eU/XTV37pY3uUzWPJXnZUA72pwYCZuj+2biObWtbsq7W8Bk3U8tsXPlLt91rdz3hhg/kOUSa1cv05R/4oy3zluDLh5jWdOGaJpjTEX+sS9OalU1x7fOgQ3blo6a5/jYWzymrqpLDGwYYgN+jOV5Fx+sqoY4FC6xKXz22Wch9XqIAvoLD3ZJgTfVHrDHRrjGqszNoNqTz2btFK/crUCmNUUc5fHkP/5H/zCk/sHv/3ch9V/8838V71v/8D/8H6bk/+z/GRLzS8/T09IWP1bix77qD8SPHYgfu3Fr8WMH4seOxI89l/ixI/FjP3Pix55L/NiR+LHnXlz82I0bix87ED/2AuLHbtxa/NiN1JxZ/Njz8oofu3Vl8WNH4scOecWPPZ/4secSP/Zc4seem7fEj73g4uLHDsSP3UrNFxY/9pT4sRup4seOecWPHR9M/Ngt4sfq5IocAAAAAAAAAAAAAAAAAAAAAAAA+PniA2QAAAAAAAAAAAAAAAAAAAAAAADwivgAGQAAAAAAAAAAAAAAAAAAAAAAALwiPkAGAAAAAAAAAAAAAAAAAAAAAAAAr4gPkAEAAAAAAAAAAAAAAAAAAAAAAMAr4gNkAAAAAAAAAAAAAAAAAAAAAAAA8IrM43R58k/jvIYMX3zxeUj98MNvpbzv3jWPM96nxJj18f1DSN239FLjOMRr1/vHdPEP7tNjr+s1pe7NN+DGNT15NsxTSJ27t74u6ckv909bzl/Iuy0hddu2lLo85gebYpkN8bWWJZXnnm9cNU+pSNdYWXtswtueymSoprLW+OxjfLF9T8k5taq69Jg3PvbXuPXL773FJjoMqaKHXKBVtaba3HPXy9XRfzXy5Z+V7MqzeetxTLfuLh5L7EQbq6qK3ScPR0McUNoWuO0p+zzllhATzxVKHlDO9axUntUNVlMs8K0ZCJvHHmLXyx1ziD1rjwN4V96nCjw30bY6pjip5ez5sdtb57l8ONH+z3bb+OR5oGuqY+2aaNdUgunEQJdfqqq2PS1v1vheZ0rs6/xB0DfCE7fODWme55Cal4sn5coa8jA6pgGhNca108lGeKohNQNKzNq1wPxgy5JWm91Q1jTgZuKJT54fO7eiqtq2lw/CZ1pZWx1nNjVjXpX1vTZWSH7wvB7c4gqkaQgVT0GaZUDXRJtue26yjiNGd+sz4/8a23/Td7rbfoMdsztWyrdu+1ZIW7vXHmL2E/N881LXbrZt5sRuwZiTszw75I65xqOGMbaEdrYdKi1g9jiA5yX2lufiqiEW6dJcPV65nztS/qnSa+fda3PfLu+S95ixSNojqywfkucxNi90c/OuqvxiubKaMTY2wi0e3Vc3wufF/9b8JHFqPs26Y7ru9CafcueD03jlcyco3+Aa42vMpzF3U6Iv3zi3hwl5Kds8WMy7Le3Zzsvn02bN1lZHs5SNDThfvBlGu5rOTTTmbdbn/WFCXvLlk8+4o+82iXnJl41DGkW7IeFUdXRjcNIO4PkMPPfMIZdJnNTyT+FVted2ElObvF0raH+ID7oNUZO92/zmQss/SMecY6rK6nbWZ85F2yVELpMpT0zNz3nNY29xL9ZM5bHEtnh8M+TYgqq1+dU45R3OHas2s0Osjr/zu78TUvcTq/dWN8amMJIt7m37i8cGfF1TnMkcp7yq2u7uQuoP/uDPQurjd34UUn/7N78bUq/XlLeq/tV/8y9C6pTH2DhGv337NNJJ/FiJH/sK4seOxI/d+oOcHvOKH7uRLH7smDffuSV+7CnxYzcyix97ZnbxY8+9tfixI/FjP3Pix24lix97SvzYkfixGxcXP3a8tfixA/FjLyB+7NatxY89JX7sRpr4sWcSP3Yrr/ixA/FjR+LHDsSP3corfuyQV/zYMaf4sZvZxY8ds8dU8WM3Li5+7OBnHD+WHwUAAAAAAAAAAAAAAAAAAAAAAAD4ReIDZAAAAAAAAAAAAAAAAAAAAAAAAPCK+AAZAAAAAAAAAAAAAAAAAAAAAAAAvCI+QAYAAAAAAAAAAAAAAAAAAAAAAACviA+QAQAAAAAAAAAAAAAAAAAAAAAAwCviA2QAAAAAAAAAAAAAAAAAAAAAAADwivgAGQAAAAAAAAAAAAAAAAAAAAAAALwi849+/KMn//T27V3I8Pbtt0Lq3/k7vx1Sf+PX/1Z+mh9/+WlI/bM/+pOQ+vkXPw6pe/zS2uP1fXyuurvch9R12ULqtqcrj1PzDbh9WVP2MWXf9/Rg11woVVulR9/WdPFhGELqsiwhdd9jkVXN85we7P1jSo0Xn6cp3zo/W04dx5S6bqnExrF5sGG9xuSUPbeTtjqmWGiP68vrOjfvqtq29OTZEMskX7l9sO7Tjumth3zxrjqaG58o8G1LY9HJWw9DLrKct711Ss2DVX7stgWOlQptiw1l21PeKebNL1Vfo1+/OG976+wam1kcRGvL0201bWWMtbnmMWGIPSuONq11jS0hjsDtYJUvnmuzW4E01TFUuvgai/RMgbZNdJjj7NC8V37s7tbx2fKA06TmO7eTacx+ZhQ9Mxad1DfRE+0/L3TPlFi1S5QpXbxp/3FBWN2zfbmktejdnDaYW3frOa4Tmuk4jid7nDvaUTTX9clx8pvTjBhddWR5eO/af96VdLce48VjXe95oNybATwvQs6tnWKZdIufKU5qOfuZWemkPc6nuZ1U27nyGmNMRw3NlfNStXuvvNo8OXfssSHFLUvtcVcyTJd86yEWeLfQffk4+TV2JSc2RLE8h+44oD9PCBc/0RLynFXtg8UzwD0+2NCdJSxxGzjsqWNmY7s1jl3vek3Lm7wXOztO5rXoiQtva9P4x9j1moEwtqLc5avvuWdS81FbzNqNhGs8kj3T5etcQ+pO+U6d9+bMa24o8db5vtWuwOOGKP9EtOUZsWposufu8fIBvDk07bKv8cHGc2NVtyFKtdl0+a7vdGe2eaGbB7p06+lr1EdKzM0sDtH94c1wYj3Ztf8zug1RynumKlt73OiNJ7ptddXRTeZxz95M5e1PV/FINrazeYrbpbhcrKptj8dl8cS3SW33YnEqH09sA/OPZtN86meanHpmpm51v5A2h8X54suafsS/i1ETU/ypJT9X3pL////kq+U+neMWxu7W+UeH/PPTj378WUj9nd9Je/avcTj58lO+3ETbrcGZ7PnHvr2fO1L2f/w//cch9cff/+OQ+sff+15I/ff/vf9+fqz/4//pvwqpU3Pela582Z6Oz+LHSvzYVxA/diR+7Ej82K2/yMnix54SP3YjVfzYgfixI/FjzyV+7GbmmCx+7AbxY0fix56bXfzYkfixm9dOVxY/dvsPxI8dby1+7Ej82FPix47Ejx2JHzsSP3YkfuwG8WMH4sduED92IH7sRpr4sWOq+LFj3nzjjvixI/FjN9LEjx38wsSPndrDAAAAAAAAAAAAAAAAAAAAAAAAAD9ffIAMAAAAAAAAAAAAAAAAAAAAAAAAXhEfIAMAAAAAAAAAAAAAAAAAAAAAAIBXxAfIAAAAAAAAAAAAAAAAAAAAAAAA4BXxATIAAAAAAAAAAAAAAAAAAAAAAAB4RXyADAAAAAAAAAAAAAAAAAAAAAAAAF4RHyADAAAAAAAAAAAAAAAAAAAAAACAV2T+R//4Hz35p8uQvkq2bltIHWtKeddrfppL/CDadLmE1Ddv3oTUd+++TDfe1/hcNQ5DSL2Mc0idxlQmy3XJt97HdOspfkFu2FPeZWlu/ebuPqSuayq05THV9d2cSmyIpV1Vn3zySUj98v1jvHh67OvSNNFxSLW5D3tI3XLfGVNd7ltTWUN8sFzXW7z4NKV+V11L2PZUJsOQymSou3zrii1l29KDtc0s2ONLtRffY0uoIfWOdrAa4gA+xCbavld2JntTYnsqsT0OdFWVH+vMY+duW1WxvGuJtTnlqoytP4821RX4OOXqyAXelOccJ/pzjbDJm4ejPZdJrOs8257sWbk6tlgbY3/nXB256516r1NzYqzr/GD94L+l7Gssk7spDeB7dR3zxHeBm059rkzWNVdWvHh+p1ONqBlk82vlPUt1DelMM8up7QDeTD1jyh5rsoZujVF7uvUHl7Rs65ZGzZ1zsUxzerDlGvNOcW1/bqC7xrXoHDdE+9JUxxr7z3RmnZCXL1VTnpjyCryZd1LecWh2Jfued0yprrd46zzvVL8we3lLWJe4XYpnBVW1rfHJ8+61GxKyPFg1y4DYxqrdi8ViWWOZbGNqRXmrtS5d34n7vDU20TE+djxzqqra4gSQV/d5wBiraygxf7c/PbE06jaJeaHQjf8p77UZi2puekcsk7yejG/d7l7zSJjfOh86tavNMTbitSvSZIsdrzvvzeuEPJTll+6XfPGUL1fmNY8YXcfqHi0vg1+eWlVbs7yJh8kn5uK+iTZHbSlv7tRtmbR/EG99qmM2I2EeRZvz3m/wRKvbWbx8eK92TZi3xnmTeK5M8lsP+QekPO90I8YYO+YU8z/GeWfozwvyejLmzMubXKDtGiOLZZJ/XWoH8NyGcyNc8ylHe+fm1n3+r5L73XBiuVj9eBI3Dt1wc+b3jmlMm98tjjZ5W11Ve3cglm7dLP675U0cMRpxZsmzbbVHzXnKi81sjNvPXNHV9ev8s29T4O2JVlzejLER5h+Fp260mpv3inNi3Brsa8o7N+fUzQifw2MusWPmVW51438+i8gF3jbCLC9C8olW/j2uDRmqSo0wRxfkH/serymMpKrWWJv/8p/8Xkj90adfhNQ8NfzhH/9hfrDf/JXUd/5f309FOs8p73G1KH6sSvzYbeLHjsSPHYkfe+7FxY8diR87Ej/2fOLHDnnFjx2IH3tu3hI/9vxU8WM3Li5+7ED82JH4sSPxYzeIHzumih87Xln82IH4sdu3Fj92IH7sSPzYzfwpr/ix46XFjx2IH7t1bfFjT4kfu3Fr8WPHG4sfu3XvfGvxY7fyix97SvzY0SuJHzs1vwIAAAAAAAAAAAAAAAAAAAAAAAA/X3yADAAAAAAAAAAAAAAAAAAAAAAAAF4RHyADAAAAAAAAAAAAAAAAAAAAAACAV8QHyAAAAAAAAAAAAAAAAAAAAAAAAOAV8QEyAAAAAAAAAAAAAAAAAAAAAAAAeEV8gAwAAAAAAAAAAAAAAAAAAAAAAABekXmahqf/tm0hwzgc/v4vZF3S3dKFq6rGOX0Qbb0+htTr4xpS53EOqXv3ZNua/uC6prcex1Riw3zJt572lLqtKXkYU+r1em1uHet639PF5zkV+MO7d+m+KWtV1Zs3dyF131NLyOapqY41tvBpmFLmVJy177HfdYVyvaa3HmJV5g8RbnFAqKq9UksY43vt+dbVVWW8+FCpOnKBT1PK25ZJ/oPYp9uXylVZtcchOt57GGJVxqGsqrZ89SiPJ0PFATzmraphiNWRb930ncYQx4QpDtG5tvJjj2PzddGcPVflOKSLt9WRm/Ca+0dshG0LHOO9u7p+eTtpR4xszw8WC7ytjW2Py7Y4nuRxsnWycwV9I4zyg81x2upu3b1yTj/RzPKY0JZYzt5UZZ53ui8h54VunpjWNS6Nmjs3xdKsE+JadN/Szcfj1uxp9pS6xYvnyhqHZrWZq6OZWfKepRsQciNcl1Qol0t6r3WLq83uwfImcYqPvS2nmmheE8aG0EyIeW3fGk6tE2Lebs++x2mrmxTzWrQZrbbYkPJg1awT4vo8l3ZVrfGkIg9l+dq5U1c3CHd5c8/qBqs4COf3muK+u5lZun67rXmIzo8dx5NYYtUNs83sEPcs3bajthP/24Nc4HlqyL2yun7dbBLjO8Ve+5Or5zEhvnVcJwx5z35qdG/b/5mtVtN9hjirNVvjbstyjYPw1JxUJN36vFvyxVvncTJPLO1xQT4a6o4Qc7dtV5spez4k7M49X96Kqh1w4rzTrGNPTJd18hyjG5/zvmON1THm3zvilNc6s709eQaY67o5dM3nvSd+hal2/M8Xjw1h75po3vLkn2nONOCqysNRd74S2/e5dtLUV7NlidvqrkimvICP08OpqbqqmiKN2fNB9Lnda57Uup9pUoGO+afAfgOaD+fjsVKsjna71By/50VdLJOt27Mvlfan+eJjfOz2mDq3/2bZ1myX8t7g5G9qLx9F82/01f6IGX81mOO8k397raohjlZLrOtL3LPnxeTX2Kq9fFPT/QbU7tlz50o+//zTkLos8Vxobg8gU+dqLt6dcmfdDjROarGq5y7iIrejf/tvfz+k3t19FFLfLe9D6u/+/X8nPlfN85+m5H+eLv4Yw6i++0sfP/kX8WMlfuyrbi1+7ED82JH4sef+gfixI/FjN4gfu3XvkCh+7JmJVeLHbhE/9tzs4seOxI89N6/4sRt3zjcWP3b74uLHnhI/diR+7Lmp4sdu5BU/dry1+LED8WO3bi1+7CnxYy8gfuxGdvFjx4vHnOLHjsSP3UoWP3ZIFD92TBU/diOv+LEb6c2NxY8diB87+suMH3v5UQ4AAAAAAAAAAAAAAAAAAAAAAADwc8cHyAAAAAAAAAAAAAAAAAAAAAAAAOAV8QEyAAAAAAAAAAAAAAAAAAAAAAAAeEV8gAwAAAAAAAAAAAAAAAAAAAAAAABeER8gAwAAAAAAAAAAAAAAAAAAAAAAgFfEB8gAAAAAAAAAAAAAAAAAAAAAAADgFfEBMgAAAAAAAAAAAAAAAAAAAAAAAHhF5mman/zTOOwpxziExH1NWZflmp9mX1P+YUi3Hsb02FttIXWN962qD97ch9RlTbfe01PXtKYHq6otZq+cOk4hcZ6fVv0Teyy0XB3LNdX13d1dSH14fMwPlhvh3eUSUh/fpwfbcwuuilVd255KbJpSdQxjqo62iWbde8UG3DSynLuG+Nb7FttYc+N856ohd6741nsuk0buHfHazVvnK7di12luvsXKarPnoTAX6RDHospzVl8dL28JbXXk+bR763zxU010HNPnR5dlSZlTn662427x6caYfYitaBqaJ9tzwZxoCRVXIHkZUO1bx7xNXXd9ftxToY1DaifNmHBuBM9NNN86d8x85Wrr+oS8SKiqKRZ4LtJcWWfKs7q+k98r3/prFHb6izWuose8Z2nntKiZHeInnnN5tmUyTHHEiGWSx8lta1abTfeJiXnJ1w5m17iLnOKWJzfRpgG3c14ccPKUN8duu7brrmZiig8WH7sZi7o779uJxU9eOH1Tw/NPbp3furt33iTGMmk2iXl93Y1l8+G056dt3eY3aOfT/GR5/Z4XEblnVVVTH3FldmaN0c6n05wH4bw1jjPLEFfv55Y3OWs3ddSwn1jeNM3s5dvPNneXNWbu9qf5qK1btqUSz+NJvm91u61mWx2vPHYb5+ZoKD7YGJc3S3eYNp9ZJ+eGkEusOe1t7HlrHI97u1VZO2LklVUcrJZ2CR5XAnF5M+TD+biErjhTVzfhNkcNUV6VVdXQ7DuiuN9vh8ncEvKAsy4vP4hu16LfnL4q82nDFHfluRU1w2hMreYHpDyUxQOtdk5r9lN5AdPtK9qp/OXZ8xFKbvxrt/ppfsSM7SSXyZhrq/3RIQ84zSF2c+tcKvl8Juu2kO1YdmrCTRc+tz/tyuTlP2ds7S+J+dZ5iZ3Xk11F51Op7qgtawfw/JNEXDzFZpZPb6Zu45zLrPslMQ7+7XY/78XyYJV1t84rwulyYlKL65Oti8eY8lQea7MZ/NvlTWyiuZm9+eBNSI2Hpv1ZQbchipX1+P7FeatqjAv46zUdg+Tjl3ZXsmzp4vmo7e233obUv/cP/kG6clcm/8V/+S9DarPjyTV5aPzix0r82FcQP3YkfuyZucWP3bx4zHviyi3xYzduLX7sQPzYrUTxY0+JH3su8WM3rix+7MaVm1uLHzsSP3aD+LFnEj/2XOLHnpu3xI/dTk6J4seOxI/durj4safEj93IK37smCh+7ED82JH4sSPxYzeJH3su8WM3Li5+7ED82I284scOxI8diR87em782F/ZihwAAAAAAAAAAAAAAAAAAAAAAAD4y+cDZAAAAAAAAAAAAAAAAAAAAAAAAPCK+AAZAAAAAAAAAAAAAAAAAAAAAAAAvCI+QAYAAAAAAAAAAAAAAAAAAAAAAACviA+QAQAAAAAAAAAAAAAAAAAAAAAAwCviA2QAAAAAAAAAAAAAAAAAAAAAAADwivgAGQAAAAAAAAAAAAAAAAAAAAAAALwicy3bk3/ax/RVsjF+s+zh+i7mnfPT7PsSUtf96aP+tG3fQ+rymK5cQ3ysquvjGlLv5vRe+5CuvsWXqqp5ShfftvTW+5oee6+Ut6rG6ZJS48frxlimX37+eUidL2/ic9W2PYbUXJl7bCfDMOVbT5WKtKZUKNuW8o5NRTftZIz10eWOLWFs2ska36v2XKSpurrOUVt88jE2hWFIJda0k/hUP7l6So0Xz8+9dzcfY5nklpCf+qQhvlfuHUNs3kNfIU0bDnLPyu2kvfEe6yO/1RZrqxnIqpbYu/JbZ22ZTGN6ujwx5Yu3t27GyXjr3MzyXBwHm6rK80o3nMRbjzG1TrfwoO2Yua7zrHfmsde4NKqqaWo70FcaYm21Q1XTkHJTiIm5PJsrV+1xxGiy5/k0T9XV9J99j3NHHguHbgA/0/5jmYzTqem2XRMGy3INqVNci1bXEvY9tv9YJv3cEdfYY754Xvzk4T22saoa495hjZW1xzV2W9F5sGqKtFmLNvNWbgndrqRZHL34ylW1bmnLnzd6+aVa3cR0qv0H7eq9WVltsdvm8u5u3S1/cv48q3UlFstlXVNdz3ml2kxqzUtvzSLk5cNRe46Rj9q6I5SU2m8cmmVCHAlj5nVNL3XpVnTN7ND0rtypu/OXpg3njpkKPC90h3bxk2vrxEK3OTXq1oRnJrWxX/LFg9OmNmMzO3Va0Jxyx4ml1of0UlM3gnfLtpdvDZburZtbx9VRbmRbHjG6Was7QolvfY23npvBaslrwtz+46SW21h1hySXl49kza8G/VHbibVTXPv08p2HZrA6cVyQ+/y5btvMO91ys9lP5RPdE7Ntted453agQbujb5Y3zflMvHK3Zcm/d+SRsjvEbm6dB5ysGU5ymfQXj+0k54979rzLq26sy/vuZlHX/M4SH6t766Z35JO2fqeWF6vxvXJttxv6ZrWZZ9uXH0SP3a+rzTbwxJ5lmk8eP8b1ZBxt2q1x3r/mg6NLbv/NyWeKeaiuNucYCpIHpPb0ZolvPcX8f/S974XUv/f3/nsh9a6Lx8i9Ph/J5qlh6Q5dh/Xlh4TdprsbMtb0Xr/99347pD5c08W//e1vh9TPPv1hfKz65/9tnh1S3ni4Xt///uHW4sdK/Nht4seOxI8diR+7efWUKn7sQPzYkfix515c/NiR+LEj8WPPvrL4secTP3YkfuxI/NjNa7/4yiV+7ObFxY8diB973o3Fj31Ferqy+LED8WMvSBY/duPW4seOxI89k/ix595c/NiR+LGbxI/dyC1+7MZfiB87Ej92vLX4safEj926uPixp3628WMv/5EYAAAAAAAAAAAAAAAAAAAAAAAA+LnjA2QAAAAAAAAAAAAAAAAAAAAAAADwivgAGQAAAAAAAAAAAAAAAAAAAAAAwvvafwAAIABJREFUALwiPkAGAAAAAAAAAAAAAAAAAAAAAAAAr4gPkAEAAAAAAAAAAAAAAAAAAAAAAMAr4gNkAAAAAAAAAAAAAAAAAAAAAAAA8IrMNQxP/mm5XlOGeQ6p+x7vNuXk2q5byj1dQuowpI+pffe73w2pP/zRn+cHm+anpfTTli099l0sseuWSruqLvsUUocx3Xq7LiH1/oMP8q3fPzykWw+pNtc1pb65T7eOhf2Tv0hF+q1vfRhSHx8fQ+pyXfOdt/hsQ+wA45yqct+a3pGta3ryPX5qcD8MAn/BklpRVe0V33qLDxZvve2peVfVMMb3asajlxf4kEusao1jwnHU/WnbmvKOY3PrLb51Hic7bc9Mt9731BJyke6xJYxj6llVtcXOldvBEm89deW5xctPe2wJebSJqe14kttRVx3xpaamOnL2LfedaIwDQvsHeSgbcpHG8lybsaimEw+Wx8m2y+cCzyWW87YtIcuNMKeeeak2+5kHG/ZuBI7pQ2xnuWd1E2LjzFvvFTt1N9Hv8a27ZpZXqs2Sb57SajO3k1zgY16V5RKrGmL2PDtsY3rrdgRuRtG45Mvtu+2YTQuPefNAmNvgOJya1MamdyTtavOMU922mlmvW8DHW8fVz9YNonnLsy5p353Hk7yOrbYNxx19Ho7mS8rbdtu8Z6+YmqeOdnmTy2SotMfc8kDXz2knFqtxfZ777cnZNl89LwO2ZgSupuvlZjLEQ6d48lPVVFgzHOVV2ZTaST6mq6rpG/v/MbRzxxrrK2/5u+OC/FKnmmiu6y2+9Nj12y2O/1PTTnLPPLXGqIqzw4lu244Y3WiUB/C4Uu3WGP2I8tXObLqraon3nse0Pl/XNLPkEaPdGuQzlGvMPsaWcF3a4o5FGgs8n2ht7YYoHr8/5gJvmtnLd/TtxZvssSX0U3kezbrtVMoaV5t9Kzkx2+anzg24+uHo5Oooih2zOX7My8WmAbdNtEl/8bXbTeIQ8+faOFlXeTnant6/WNvGmkLLJZoPXfNU3faOEwvdiouf/uQzL2C67Clv9wfNsi3uO3LX2ruRcljTpNY0kzyKNnm7JV9Mn+LhZPcjzqlzjPz7UT4QmLqmsG4vX7bljcMYl4ut3PzXNR0rNcvgbleSowumIb3X/f19yhvLpB0x8jp5jePkXdwat78fbTFgI4/B+ee8fLpeVZe7VGhvvvVRSP3sT74fUh+WFKOydkPZ//x/9h+E1P/t//6fhdQxFvj/5n/9v3ryL//Zf/5PnvyL+LEbtxY/dry1+LED8WNH4sdu5g+J4sdu5RU/9pT4sSPxY0fix47Ej72A+LEj8WNH4sduZRc/9rzM4seOxI/dyCt+7ED82JH4sVvEj91KFz92IH7sBvFjB+LHbt07ZxY/9rMmfuzGpcWPPSV+7EZu8WPPu7b4sRvEj93KK37sKfFjRz9H8WPf1IkJAAAAAAAAAAAAAAAAAAAAAAAA8NeQD5ABAAAAAAAAAAAAAAAAAAAAAADAK+IDZAAAAAAAAAAAAAAAAAAAAAAAAPCK+AAZAAAAAAAAAAAAAAAAAAAAAAAAvCI+QAYAAAAAAAAAAAAAAAAAAAAAAACviA+QAQAAAAAAAAAAAAAAAAAAAAAAwCviA2QAAAAAAAAAAAAAAAAAAAAAAADwiszbuj75p/v7+5Dhuj6m603pi2bX6zU/zb4PIfXx8X3Mm678gx/+eUid5i0+V217eq9xSKnvH2OJjVO+9Zfv01vnypouKfX9u/hgVZfLJaQ+xvfKZfL5uy9D6hKrsqrev0/Z3759G1K///3UEmpILbCqaWfrlhrSkFO7lpDt8cGuh27+08YxfoiwfbAtFdo+pLfO3XZoq+OvSC7tqppikW4599B1gBO6Jz916yH2+k5qJ7Hr1JaTq/vSZsw9Vmz/Q+pZVVVbuncusTFW1h57x9a1oty1cpHm5r3sTXWM8dFyE82DVdsx1zgS5ux7XN7kK09TM4pusdDySDjPc7py1zvGpi3EvHnuOCdXR1OVsVe3I1VewGS5wL/G3JGaSps9ONl3mt4RU3NxDkO7+Mm3zoNwuncu7apaliVdOhbpmQXMujTd9nJJT557Rx7+28duWkJ88NwStqYqu2YWd2pD3GDm5p/Hk9aZltB2zDzgnLn18E1+o3zdUs8axlhZa3OYMMa3HuOM2RV4UyZ5vo2v1Ywn25q3kKcqK7fvveIWckjlWdUUyh6Ho2Z90i10mw3PiUntzEq1dWaM3ZodZo25FcbEfEzXWuOjTXkQju+Vh8Gxe+xlzC08zizxwU6eY5wZ3k9ODfkPhryRy42wLZI4O+x5KRuv3m1PuyVKLtK4Arnu6aWmrlD23G2jvAPdu9VmFo8Am0Vdu6E5c1IxjnGiz+NJfxqcEqfYjPa4ilhjO6luOFqaxX+8ciyxqrrGpjKdaKLX7cQxddWWW9KU3utUTXcTbl6LLnEUzSvwoe08sTryT3JznjHjaVhV7XGczUN0tnXVkYulOw/LY8KLs/5EXujGnCdPb/Jb53ufOHSqk78LNDPLqQfL4/8YW3j+UTifkFfXhpvajIl5tGnbSZO921kE7QpjiL8Vdplj3lhZP/mLmPryI9lu9RKTq/KDLWtaJ+TfBdpD1zyA5yVGXspu3WlB3mNO+Se5PDHlvtM1k7w6OnPyn0u7qsY5Dkf51vHgKKc+7k2gyN2JZtb8apYruo0fiKn5Z8qvsWWP9RUb4T/5T/9tSP13/v7vhtRPP/tRum/V+7ioe3sXm3jcJH76oz998i/ix0r82FcQP3aD+LEj8WMH4seeT/zY4dbix455xY8diB+7kVf82IH4sSPxYzfSxI8dU8WP/ayJH7uRKn7seHHxY8dU8WMH4sd+tnnbPxA/diOv+LFjqvixG1nFjx2uLH7sQPzYkfixG3cWP/Z84seenV382DGn+LED8WM37ix+7ED82NHPUfzYN3g6DAAAAAAAAAAAAAAAAAAAAAAAAPx14wNkAAAAAAAAAAAAAAAAAAAAAAAA8Ir4ABkAAAAAAAAAAAAAAAAAAAAAAAC8Ij5ABgAAAAAAAAAAAAAAAAAAAAAAAK+ID5ABAAAAAAAAAAAAAAAAAAAAAADAK+IDZAAAAAAAAAAAAAAAAAAAAAAAAPCK+AAZAAAAAAAAAAAAAAAAAAAAAAAAvCJz1fbkn9Z1DRlyav6i2bI3TzONKfswTCnzdk1XHuaQujcvVdNdfK9ryj7Gl6oamltP8dZLuvU0pNRtWfKt9zkV2jSl6nh8fAyp9/N9SJ33rkxibS5Deq99jyU2XvKtcxNOj1U1jum9lvVpT/wL9415q2pf06MNTSNMtmp6x9CUSr51Nyj8FRmGpsDPGIdU19sey2ToqjJmz+/V3Hn4Bitrj70+10ZbWUMcZrfDJPgX88aOmYusapzyqBDnjljXy54erKnLqopjwhbreouj6BinhjquOZ7ILbxpot9kt82TddOzmuoYuhE+iXPH1JXJFhtSXsC075U19RUb4RBnli13jqYJdrc+0czavFt+9OhkdWTd3BFHjLg+aYeEXF9DHDH2Znhv5tMzb31Gt3Fobn2miXYL8FrjrZsBJ68itlNTeZP3r6gq21vnLt+2hDPyjj7v8upcoY1junhXYu0oGpvo/A2uE3L/6Y5QTtx2684xYm0OsSr3WFlbt49rmlGU21i/sopVfWYUzaltRZ/p1ycH/z3WV1zdNwP4sqSDuKoa53TGkjc1l9iA1/zc/Xwas8dWluu6regzs0P2jU5qzXFBbmPdPJ6fe99O9J0u6xILPK9A8kB3ctYZ4qR2xtodK+XT927EePkpR/Xt/+WzQ9Pvur6Tf7BozmdiWxin5iC6YkvIv5Xs8fix75ixvnKhDbF/5BFj7ZY3e+zYeUpsVuBztwyO2XORDnm5uOefaboB4RqPhuJ8Osb2m0+Nql87xV6/prduDuKq1tg78g8x3fSQK7rR7H2/yYO4Zk0YG2E+DW6rozve+avblU+5TGLm2D26sao5Y8ntJI7ftZ87umx2WzFvc+2uJpvzmfzauYl1p+v5PGGMj54fu1n855fqqiOfYyzxJ/45/r5fZ390i6nxB4vqJtymHcWLD3HKa7da+TfQPQ7geVXW/rraDITx1nd3d/HWqbIuXTvJC4GtUiOcTvyIU90pX57o55janjO/u6aDju/82r8fUh8/+b2Q+t/9/h+F1LcfpqqsqmF7CKn/8f/gd0Pq/ZzK890f/heHf/ulJ/8tfuxGdvFjNx5M/NhT4sduET/2lPixW7cWP3bIK37sSPzYkfixA/FjP3Pix25cXPzYgfix595a/NiR+LFn31b82C3ix25kFz92IH7s+RdPqeLHbuU9RfzYzZunNPFjB+LHjsSPHYkfu0X82FPix47Ejz07s/ixW8SPHYkfu5Usfuwp8WNHP9v4sW/wYBoAAAAAAAAAAAAAAAAAAAAAAAD468YHyAAAAAAAAAAAAAAAAAAAAAAAAOAV8QEyAAAAAAAAAAAAAAAAAAAAAAAAeEV8gAwAAAAAAAAAAAAAAAAAAAAAAABeER8gAwAAAAAAAAAAAAAAAAAAAAAAgFfEB8gAAAAAAAAAAAAAAAAAAAAAAADgFZkvl/sn/7RtW8gwjZeQmr9nNt1N+Wk+/fTzlH1K2R+Xx5C67fGlpj0/2LotIXUc53TrWJ57c+fG5ZKqY9jS1ecp5a2qx8dUpNkwpNTcErZa88W7Ik33nudUWcva1McQ04ch9YA9VvYWS2zoHiy38HFMD7bmvNV023XP9ZUfLF08l1gvtsI9vvUW+04uz6rac5ns6a3ztXPjb+2xne2xsmpv3jo2/6Y284hRlavyVO/Ij73Fi0/xwapqi3PHnofo+eVfCG0eq62O+GA1xYFubZpovvgw59kh5m3GohqHePHYTnLnGGKR54mjqoamzF4+Eq5rUyZD1/di3pTadszm1nEqX7f0XnmczMuANnuWX6ot7fwH3Sia8jZr+7jArq4h5Tkxp36NiT79QVcmp269j6lIu3VASjw5lefq2OO9x1wm3YM1o1ms6y0uZU+OGLmZ5QJv+k43Arez3oudbCfZmRGjFcfvbhlwYlaqbmLa4twx5C3PuSZ6Znjf85W7nVrues0ONO8M8sKpamkWpHGwis0oj8/VVkfelTdHDac2idnZzW9z9RNZY1VP8TSsuvea4sS0LGkzdYkbh7Wd6HMTjnPemreQ3ep/PlEd3+gAni3NbisPVu07xzOrfNQQ5+K86a7qDyPSxfOYkMuku++al8Exb14QNlN1Va7qIe6NmyXf2HXM+Gx5eZ/l3tEO4Etcgec95ocffhhSpziUVXeO9/DwPqS+e3gIqZe7pz8JPfH4cE0Plk/q8jIgJj5e0+BfVXkhMMbkvJla1+bWU6zrNW8N4nA0Ndvq+FhVW1y35U69xYsP1Uz0S/wdJ5/U5XYyduNks2JsVgKnJuPuL+KWJ055Z48L4iJkyKmxOtrptPmVJ/aOIXbbM6dh1W0Ds+4MpJtPc0tozkXjpfOCcG+GsuYcO+fNS4x846ohtpPKe7F85fanq+bFUuIex9itWSR3DxZT8zJgiiP0Vm1LSOaK8QPNqWm30M2n9/GkOq9k84gxd+uuPOGO+XexuMPsTlCqOQOPb/3FFym0phkx2nkndttmjT3HW3frrq5rxaEsB0W0v5rF9p+3Bv/Jf/IPQur/7v/weyH1f/m/+Pv5wfJPnF+8+zKkTh/chdS7uzdP/kX8WIkf+wrix47Ej93KLn7seHHxY4fc4scOxI/dSBU/doP4safEjz03r/ixF9xa/NiR+LEj8WNH4seemyp+7Ej82M+e+LHjg4kfeybxYzcuLn7sQPzYkfixG8SPHa8sfuxA/NgLiB87Ej92I7f4sRvJKVH82A3ix27cWvzYIav4sYOfo/ixUydcAAAAAAAAAAAAAAAAAAAAAAAAwM8XHyADAAAAAAAAAAAAAAAAAAAAAACAV8QHyAAAAAAAAAAAAAAAAAAAAAAAAOAV8QEyAAAAAAAAgP8fe38eb8t61wX+T9Vaaw9nuvPNPCckgTAP4oCKCsgkYGurgLTSr1a7pW2GEJtGf3mlFRWIAwrS2i0gBJVBIIKAAyCTgEwCAZIQws3AnYcz7mENVb8/zs0+++5a+/Ocs9c995xz9/v9yiuvc9ezquqpqmeu764FAAAAAAAAAAAAAADHiBeQAQAAAAAAAAAAAAAAAAAAAAAAwDHiBWQAAAAAAAAAAAAAAAAAAAAAAABwjHgBGQAAAAAAAAAAAAAAAAAAAAAAABwj47NnLxz4aPPEethgMpmE1J3ZLKR2s3nOTdumF6LN52nzM2fOhNSmScddLBYxX6WbdSF1Mk7ZHo/HITWfcilluhsvaZcy1vZpz/M+bVtKGU1Szpu4852d7ZBaueB9vFulzLt0TcooJd5+590h9aGHHs6Hzu/sa9uU866Ll2xRuR0VlWsWk2PG+nyna2U4F9Gc2uR6W0rfp7w1lZynnecjV25lKU0T63XtksY9165JV/lCkG9lX2sx+lrNDfJ5xft8FTuP97rt41mXdOxcgEspo1E8dGwxcpeXK2Zf61maSt2JtSNu29dqRx/Pus3NUT50vFmllHnsetrYd+RrkktCX6u2JeZ8VGvfgxVb0VwIV5QbnEohjKl53FWtttWLdmT5apfVeszRKJXgVQpwWa2jz1a82rVhwNFLUSmljwOzLndbK9ys6qwkb16R+45qdxuvWV9yScgd4kovxV5lPNnFFrg+ZFuhDK84DK6NnY4+gKmWsUrVixctjxa7WP7rLUYTL2kuwXHbakHItT5fsVzrR7FTq5e/SjmJ1TZme5TnO9WVilzr872q3Y98O1aptqvUu+oXVunUqq3oKoVwxSa6cug+Hjo34LGnXtRmr/mSLmK9b2MZrXanq7T/q9ysFceitVY077uiUm1zxvMUslp+86FXu6RBdchXaXDitDqXwnqucztZaazyriv3o22P3p9mq8xZSik55/N5upvnzp0PqZPJWj5wZVAXt22bNIrYndWehlQG8LmxysPFlPHxKD17KrViVpm9xus5zgtD1a48F+DclsXWqro4U2kx4raVMdtKjxwqC2KVbes1foWOqbKIffRBcqn0S5V2cMXll8qwrfIMKO661tF3sV7XOpZVlv5rzXvcd85YZQZaf0KUUvNAdx7Pq4mHbkep8S+l9F1uUo4+U6vWjkUXp/yxFF6/BdtSnfJXBj/xilUnifFe59oxjvf6Kq5YnG3FSj3qYmNVXXStr7IcfujKXCy3RZUxxmKRakdluaxSgFd6zt7GaI/p7jSkzvIoorYG2MYSXum24p5HMdyolNItUijILKaOm7j8XutP83OB2WPvDamPP/pQSH3Zi9JZv/vd98V8ldk8ZeyB303X5NLJFP11+uTBWcnZswe/I35sSPzYkPixJWnix4b7Fj+2JFn82EHix4bEjy3ZVvzYNRI/NiR+7Fr3XMSPLSN+bMnm4seukfixIfFjQ+LHliSKHxsQP7Zsz+LHDhI/dsjm4seWHPvIOxc/NiR+bEj82NKNQ6L4saPsQPzYku3Fjx0kfmzpDlKi+LEB8WNLthU/tuTQ4scGRxY/NnBTxY+ttBIEAAAAAAAAAAAAAAAAAAAAAAAA3Fq8gAwAAAAAAAAAAAAAAAAAAAAAAACOES8gAwAAAAAAAAAAAAAAAAAAAAAAgGPEC8gAAAAAAAAAAAAAAAAAAAAAAADgGPECMgAAAAAAAAAAAAAAAAAAAAAAADhGvIAMAAAAAAAAAAAAAAAAAAAAAAAAjhEvIAMAAAAAAAAAAAAAAAAAAAAAAIBjZHzm9OkDH/VlETbY3d1NuxuNQmo3nuTcTOd9SG3b9Lq0na3tkLro0kn16bCllLK5vpF23ndp4zbtfT6f50O3oyakdvN0XuNJuuDtPGa7lFGTLnjXxKvWxJ33qZzsTqdp21LGbTqv6XyWth2PQ+raqFJEZ106ry6WhKZJt7LE6zlbVMrJuE3ntVikclLJWE1fOetcu2IZyzWrlDbmvO/zeaWMNbHwVy9YF8tJTaodfZ9uZSmlyS1GbN77Lp5YbIEvbx8Sm3g7ciPcV9voKJfwPpaEfCtHscsrpTTxki66VK9zl9fGIrpY8YrF1D5fk3HlmpRKxUyafF7xmpRS2nEsCbl5j+WkjGJTVmsQ2njJF/nQlT2vJLeEtVZ0xZ7l6GfdxXay2rPkMUbl0Cs1/pWzzm1CPvQqey6lzOIoOo+syuLoGSu1gpRTV7km1S9U2v8VMlatO6vUjsq2tfa5csHjvW7bo1+T6qFXanC6OAyotRi5JCziNcnbVq9JvpsrXbHK6D03/7WMxS6vqY42o76Pm8eTzrf6KhqrnJ5USkLubWuDhDaOBZpY/nPGqtdklW5rxRF4lgf/q6i2Rau0//mCX9f+NMszyFJKW5kGxkY43qzca41rU4PKGLvSYqwwcShl1ObKldv/o1/PqqZJGWvK0attXAIspZQ+n9cKdSdPtUopfVxCyUsVi3hNKvWu3uXFneeFo1x3asObfMnyCGU0ilODmryOt8rgP7uKZjDO2VeYbVWr7TTOxXIxytU2Lz+WUka5lMaLNmrzXCwfunJNKkteeWkzzl7jyOjyN/J5xUPHCVHu1LpazvJDnHzoyti+Uooq8mA1n1cTS1GptXV5TpOvaG22VF0hj41wvKR9rtbV5YI4A21ySciq1WOFna8yFq0W0dzh5vlpbdJd7U+PPp8a5S4vHjcPnEp15b8yijj6WnGpXfC8ed51jmootYFuHh31uYguUtYm8Rl9KaXr0xOiXG0rj/NqRTT3DpX5adx5HtuXavufn4bHh/iVMUJtvSuf9Tw+dGjzZKrWiFauSTyxl774JSG1X6SQiab2OK+PUSi5jc2rN/NZJRSk8swiRhzlK1YNBdmJJeHXf+2XQ+pvvfPxkPqhv+cFIfVFz39hztjFSxdD6m+8+76QurOd4rvef/8DBz45c++LDnwifmxI/NiSQ4sfGxA/tmzn4seulfixYar4sUGq+LElyeLHhnteifixaz60+LEh8WMD4seWbCt+bHho8WPXTvzYkPixIfFj15qaiR8bEj82JH5sSar4sWXEjw2JHxsSPzYkfmzJ5uLHhluLHxumih8bbi5+bJgqfmx4aPFjA+LHhsSPDd1C8WMrPlsEAAAAAAAAAAAAAAAAAAAAAAAAbiVeQAYAAAAAAAAAAAAAAAAAAAAAAADHiBeQAQAAAAAAAAAAAAAAAAAAAAAAwDHiBWQAAAAAAAAAAAAAAAAAAAAAAABwjHgBGQAAAAAAAAAAAAAAAAAAAAAAABwjXkAGAAAAAAAAAAAAAAAAAAAAAAAAx8h4PF478NH2zoWwQTMehdTZdJG2bfqcm6afhdQ+p5a0826eUtvae9jm8y6kjkbpmixmadvFIqWWUkrbxEOnrO8s0hWbjMf5yNPpTkhtmnjVmpTtNma7nVQy1nXzkDpu0+0YbUzyzrMmntcoXtLZdDftOb4NsHK1S+n7VML7PmU736x8yqWU2nsMUwnvupTtplQPnb+Qr0ncbxOzvag1GZXrnZL7eE3a2NqUUro+5TwXs7xt6Stn3cRillv/6p0Oqg14rXakba+i/B998zZmPW+7WKTeNu+5lNLlaxL7nVwxu0Wlo89lYZVr0sfWppTSlNi5xFudxxixwShttRTFkUC+JrPYIVZbjJy1vo+Dutie5HpXVS3DSWysxtVWtEu3I5/XdW0xcsZWaW2qJnFkVWK3lQtZPqlSrfUrFLPqzcrD+2rOj3zo6kldv3KyWvldqfyvWERXOeuuMj+tnFSeyuXzWrGdXEVlFFE769z+V866sueV5Evaxd2v+F72G3Yza8fNA5h8s3I718bhYlmtTRjXViqySuXKiXHbWvG+YZ3afJ4GhGW1ZjZvu+hSe1JKWTSxPy1xKBurbWVUVjvlUV5CzJOa3J/W7uQiV8w8ra7MbY8+yyuldPFuVkrROKbm4WJtELJK3amPrBZHHye0cZDc52a0lrG+MuTLtf7o0+qq67pSka3STq44KmuadMFHlUWSVBJmtUOPV6gdk/gQJw+NSq1N6Lqjj6zmi3g9R5WMtXm9Nz4DKrGNrY5AuhXWrCp7rgy8KusY81iQxpUV3dzG5iNXlrxq63ixjNUWGOMQozRdnrOs0hJWBj/5muSzqjwrqY7Aa4ubcdsk1vhSSmlXGGOv0tE3uRxUL3he763sufasJK8Xx4qZh4tNfohTuyZdPPRq44TaQ8w8UI6Jozw0qrVW+V6PYuXq8tPV2FXPZukZfSmliZWnbWLH1Mal+75SEvIjiSY+ps/Xu3o71mNfX1t0TZd0fX09bVqbquURYx7A9DFjo1ElMqHJk5qY87Nnz8ZDp5Iwjw+ASimT2KTUpgZ5zlKbEOVVvjjvyDEV+VaWUkqMrjl9+8mQ+tDZx0PqK7enIfXBBx/N+bp06VJIzfPTrkmFcGvnYATLSfFj4scOIX5sSPzYMuLHhtvnnYsfG2ybdx2JH7vWPRfxY4ckx52LHxtsK35sQPzYEuLHrvHQ4seOQPzYtRI/NiR+bEj82JD4sSHxY0sSxY8t2bX4sWGy+LFrJn5sSPzYkPixIfFjQ+LHlm2biB9btmfxY0Pixw4SP7aU+LEh8WNLksWPDTyT8WMrrpQCAAAAAAAAAAAAAAAAAAAAAAAAtxIvIAMAAAAAAAAAAAAAAAAAAAAAAIBjxAvIAAAAAAAAAAAAAAAAAAAAAAAA4BjxAjIAAAAAAAAAAAAAAAAAAAAAAAA4RryADAAAAAAAAAAAAAAAAAAAAAAAAI4RLyADAAAAAAAAAAAAAAAAAAAAAACAY8QLyAAAAAAAAAAAAAAAAAAAAAAAAOAYGTdNc+CjPr6VbFQOfn+/djIJqbPZrJqfI6eeOrkWUlOmS1mL2S6npZumAAAgAElEQVSlzKfzkLq+vp4O3fchdbdJey6lLBZdSB1P0jVpu7TtbFE59KhJJWE8Tofe2toKqXfddVs+dDafp/Pq+0VK7UYhdVIrCYtchvtY0Pp06K5L2W66XIRLKmT19HQ9u9qh8+Ztk8pJ36dCOG4rb0js+vyFdEnzNcln3bSV6x0rfSkx24Mm+SkWsfCXWt6aJqemY9fKWEXfpR3kO9nHC1ovorlixv6hdq8rtyMXwVG+4PGs21w74o0updIpdrHvaOPGfa3a5ovWxJuV28nKNSml6yq9Xtq2jeUk3qw+1+pSRqN41rHyjZvUs9QKf6WYNXEYcF0tFrFPjJe00pRVGujK5tdv21KreqNRute1W7nSNclW2bx6xa7fzqt7zoUwNzirNODVjOVysspZr1iAs1pXXulPr98Fz/38irUjn9eKt2OVe71Ke1JK6fo4P42TxD5fk3jcFa9JyWPRuOcV+44mdta1cVes8nF8UkrpFtevXldnamnc1ebBT1wDWbGxWqU5qmxby1dbGU+mbfNZ50pdruc44SpqR0rNi06VpizOSnI/XkrJ49y8jrGI87wVG6v5ClOeyu2o36xcO9K2uUVYsRXN08DKjD5Pl0opo1g7KvPTyr6Dvr7EssJ5Va5nJd+V+9XkNcCVRuArjY6u7zD46Ot4Tay21duxiEVl1KaSMJ3FNZDqXCxmLS8XdHl8nseisYyVUkpJm+fBUW7o6kW0khxb0dyfVkpC5chtm5+p5Va00oTnQ+cvVGZq8dB9W22sYmp+SrNKC1550lhZOM3XuxnF5DijKbXZwSrT2zxmK7XVy0riChmrb5tH4JWGbsVOLXbHsZFt8yA5152crVKaWhm+jvJDt/zALnfltSNXRpurNP95kFwbirbxG/lpYG5Fm1GlocvJ+XlHZX5aG2N08YpXprdxMaHEVjQvNZTa4CjP6Cvte63fySPGPk6I3v72t4fUj/s9Hx1S42SolFK6koIicsRFHrNVB+CrrIGvsrBfSimjFHF073PuDqnPfe6jIfVtv3EhbXvnuZyv3GJc3E5nPZqkK/Z7P+pjD3zyW+fEj4kfW0782JD4sWvdXPzYsmTxY4NU8WMD4seWbCl+bED82LWmih+71m2rxI9d687Fjw2JHxsSPzYkfmzJnsWPXTvxY9e6c/FjS3YufmxA/Ni1Ej92hC+IHxsSP7Zk5+LHlhA/NkgVP3aNxI8d4dDix5YQPzb8gvix4ebixwbEjy3bXPzYQU9v/NgNezQIAAAAAAAAAAAAAAAAAAAAAAAAPPO8gAwAAAAAAAAAAAAAAAAAAAAAAACOES8gAwAAAAAAAAAAAAAAAAAAAAAAgGPEC8gAAAAAAAAAAAAAAAAAAAAAAADgGPECMgAAAAAAAAAAAAAAAAAAAAAAADhGvIAMAAAAAAAAAAAAAAAAAAAAAAAAjhEvIAMAAAAAAAAAAAAAAAAAAAAAAIBjZLxzaevgR2vjsMFsNgup7SS90azvm6vP2RJdHxIvbl8MqaN2FFLni65y6FE6r52d3bRp3LYv6aRKKV23CKlN3vkibls5cmlG6RvzxTSkrq2nUnT23OMhtZvNc8ZyQWrbdOimSSXh5KnNfOjpuZS3rk8XvDSpmDVNOqmcWkrp+3SzKjsvk7zvfOimSRc8Z6xtUwFe9JU3JPYlXfDxKN3rWDlKU9K2fV9rMXJbt0JDOBpXNs6tWRtvVonXs9pitLGYLarbh0PXyv8qm8cSuqo27zyeVq47WVMrZH0Xm6M2XrG4bdtUqm1sCKvXJJ9XrcXoUwOey0m+lYs4PslVo5TSxdMexdSupAvaxZtVao3wKlYpwKWWsVzKcgu9YsayvPMVb0fe+Sqp1WJwXXe+yqFX6R2qGctfmM8rg9XrtG2p1o4Vrkl121yG880axVFZtWKuUsxWqfXVmVq1ww1WrB214c3Rm6MVMzZdpBI+qrTgK7WiqxSzVa5nqXZMcQRS2XPcdVdbx6hV66Pf6z7PfGs5z3UrZ3vFrjzf6/EklqJ4vZtaxtrKoC72tnHIV2urSh5k50u6yHuPE4fLe0+JlWFw3HGcV1RnJV28nYuyQrWtZLyyjlHrjvN55ZtV7dTickGlEc47r7Y2R58551W+kutOKdWCFg999KFRV6s6tUsWq23sHfJKcm3fpemvV297+RspNbcneZVjtY6+dl75kqXEttaC97Gs5N6hcsHjOkapPdFYxNX7JvencU22n1eq7SQ+fsq6eNaLRXrEU0ppR3EJPZeEeOg4jC21lqqs0gjnApyvWKmtaOXBT+7Kqw1hW1lqPvpMLY/K8knVVcpJqh1ddXCf27q4bSVfq61oVRrhFQb/9ZlazHiliOZd19QeEF3H1Ztslaf0teHkSofuc2MVb2V9ZFXpq4/eHOVLkk+q1CpXnlZXakdX6y6b1JW3ccg3m8WgiPF65cjVWeThxitck/owOHfW8W7mvqPaijaj/Og2jsoW12uFsKy21JYn3W11eBN7pvyYPt/pRY4PqBXR6WwnpN51z8mQujNLhz55MheD8vijj4XU8xfTNfnCv/T5IfXB97/jwCfix4r4sUN3Ln7sIPFjy3Yufmz4DfFjg12LHxsSP7YkOSWKH1u2rfixwaHFj11jqvixI3xB/NiQ+LFrJX5sCfFjwz2LH1tyaPFjS5JrxI8dJH5syaHFjy0hfmywufixJTsXPzY4tPixJccWP3aQ+LFlxxY/NkgVPzbcVvzYgPixJanix4bHFT82IH5s+ZHFj62yYggAAAAAAAAAAAAAAAAAAAAAAADccryADAAAAAAAAAAAAAAAAAAAAAAAAI4RLyADAAAAAAAAAAAAAAAAAAAAAACAY8QLyAAAAAAAAAAAAAAAAAAAAAAAAOAY8QIyAAAAAAAAAAAAAAAAAAAAAAAAOEa8gAwAAAAAAAAAAAAAAAAAAAAAAACOkfG8WRz4aFSasEHfpHeWTafzkDoZT3JuptNpSO26LqTefuZMSJ0vUsYWs1nO2ObmZkidTNJ5zeLO+77Ph27bUUidxyvWNOlWLhaVs+66dK9Hk3HK2OJgudpvc7IRUmMRK6WU9fX1lNylQ+fbsbZeKaJNk+5X06cLXtp0Yt08FdGrKCdp54tFqjsx06Vy4FL6Pu28lvN08Fh+L2+cS3gqCfmKVU6qcs1Kny9bk29HzFjtrZFtLKKlHP1m5cJfSuliehtvZ955n2tWTRfPOpfxfOhRrYx2MX1Ur16Hys17fb9t2jzXjnw1q7rYxNfudL5ZR7+eZbVLWql3sQUu1eYoHjxnO++5atGljqlt0vgkZ+xqvpDEipkb8Hopy9csjkWbeE1Go1rfEctwTh2N4nBxngY/i1rVaSuddb4dK1XMLE8N8jXJ25barGQ8TsPgVW5WNWPZKqWoerNyrW1i877ITdlq5ST3tpWWMF7wrjYCGY3yzvOAMN6OWkGoFJV8TVartrnWT2JJyNmujc8rGau1/3nblQph7cjX67Xv1Ylzn6tHZYBz9HlcqbUYtSlk3DaOY6s7z2PZcd55Xg2oXZN5n+anuRWt7Ls67orXtMvTwHhNKmsg1WIUc95Vxyhhz6PatqtU+pVOujJirM238lg0lqLqJenT4L922unQbb3aHv1+5AJcO3LpY8Wsyd1W2nJUy1mXRxFRpWbVRpuVwX/t2CHxKrryeDcrF60yVE3HrV6Tysw6HjreylFtzp6Ho7kNXsQV8lFtGJEXk/Mqdx6gNyU2g3mAXcq8UjuOPiBsR2v5C30cCbQlTRLbdoUF27jlkwc/XH19Pey3rVzPvGaVN87T6mpjlVf+S4nPBfJi2moPLCrTwMrYKZexWllYZQZaGRDm0UtFZS2istaQd105dKVPrEw8YuJKzysqakttqXhX1zFya5QPXbmeK42wK+O2+EitNvAqJTdI3Tz2mJOjl/9qtpo+NuArPFPLVb6UkvuOWRxFNLkBrw2wm+boy6p5gTGHTKyvVTr6VdasKn1HvGKlVEfRadO1zXRe8xh7UAm3qK7AxAanst5bnanFcrTKQ/y8ylFqY4ytcxdS6ux82vUsFdHTp1+ati3lzjtTKNSv/e67Q+rWpUsh9eH7HzjwyXx86sAn4seGxI8NiR9bkip+bEmq+LEB8WPXuHPxY0Pix5akiR+7xj1XiR9bQvzYgPixIfFjQ+LHlhA/NsyY+LFrJH7sCDsXPzYkfuza977SrsWPLTu0+LGDxI8NiR8bEj+29Nh580D82JL9ih8bED92BOLHrpX4sSWHFj+2JFX82EHix4bEjy05svixgWH82PVaygQAAAAAAAAAAAAAAAAAAAAAAABuQl5ABgAAAAAAAAAAAAAAAAAAAAAAAMeIF5ABAAAAAAAAAAAAAAAAAAAAAADAMeIFZAAAAAAAAAAAAAAAAAAAAAAAAHCMeAEZAAAAAAAAAAAAAAAAAAAAAAAAHCPjG50BAAAAAAAAAAAAAAAAAODm9fqd6Y3NwNeemNzYDAAAAADAs097ozMAAAAAAAAAAAAAAAAAAAAAAAAAPHPGbRkf+Kib92GD2XSWdjdJPyOws72bczObdSF1d5p+JOGOO24PqW3bpNRR7dcP2nRNFotFPHR6y9tsMc9Hzpe0dPFmzdLN6vt0TUopa2trIbWJW0+adNYbJ06E1C5ez1JKSSddZrGc9H3aeDI+WB0OaNv8hbTzNh46l5Oc7VLKfJ4KUjuK2c77rh26lFgUmrR506Qq38RSVErpuqNvXrmkfdq2qV6TWD1qW6eTKrVqW7ng+WbF1KZSUFZSL2WHa3JjVErfx0saN2/i9axWzD4WpC4Xs9jvVG5lLWPxtCo1q42vLq1ekybuvI+ddb7Vfan0HblFyTnPZ9Xk17nGW1lqZbhyO2LfUZXPum1GIbVyPWO1qx66tm26YqM4qFss0tColNLHytXljr5LhbDaWFW/ENTKSbyVKxy3rHYrq5pYwlcp/bm1KaU0a2ns1MRC2MV954nDdS0n+WatVhBWOnSp3Y5KOxonRF0eWcVt23GllPVx8xXGyJVtS+1+VTqmfOz6OPd6dVt5265yySoZy0PZfMVWHW3mbeMApu9TA34Vk5Kcsdw7pC37XLOqY6dc6/O+YzkppZQ8OkonXfLqTO6V6h1i7h5yYp5gzmu3Y5ROe5XhZFcr/PNF+kJtBSbP99M1WdSXMVa4HbkRXaFBKKV0uWOqtKKpCDdxbF/9Qt/XVupWUBuiHH3yexUNeF69yU300S947vLKVSyIBStdz1IdCaxSwiuHHsXGqouzrVwz+0Xs8ka1IV9eLst9Wh785wOX0uchSp4a50pdO3Se1Z88uRk3Ttne3d2Jh620NrmV7fNSc7zk1QY8F9Gc87zAmFuM6kJ0ZTyZt620GJXakReO+lwx4/WurndV1vFiScg1qzLBrI7AK6l53pG2vYqF6DzliSOBPHFY6XnGKsOulYZG5XquWdWmp5WFjrby/Cg/kqgdOssz+rzInStA9blA7HDzAkvuiysFuLqYPE61Y5GHfPERz4pL9xW1cW5t+9hO5vOqD2HigWOPub6+nraNE8zxWnouUM12F0vCPIbH5FJUezJbpjtpdLS2nibOo9HRb0depi61jr526LxMV8t2nDGNKtEasXjX+vIcuvPoA+lmfdIn/tGQ+sD9vx5S3/Kv74v5Kn/4978gpM6mMWTowuMhdViz2sFyjfixZd8QP3aQ+LGlu0/bih8bJoofW0L82LURP7b0wDFf4seWbS5+bLhz8WMD4seGxI8NiR+71kOLH7vWbYv4sWvPmPixZY4eP3bDpSGl+LHhF8SPLds+psZE8WNPN/FjyzYXPzY4sPix4ebix4ap4seWpMZtxY8NiR9btut8aPFjS4gfGx5Z/NjTS/zYgPixayV+bCnxY6UM3j4GAAAAAAAAAAAAAAAAADD0pqaUUt54jX8Df2CrN33gz04P+2T4BQAAAADgaecFZAAAAADHy5dt7z6Th/v7JyxAAQAAAAAAAAAA3PL2Xgq24lZ7LyN7U1Pe1Dz5jwOf7P3n5e97DRkAAAAAXA/tjc4AAAAAAAAAAAAAAAAAAHBTe2N/lBeBHW2rUrx9DAAAAACuu/GNzgAAACzx+p35M3m4N28YGAMAAAAAAAAAAAAAXJvLrwl72t8RdnmH3j4GAAAAANeV9ywAAAAAHFNHCPy6vMn+rQ58MvwCAAAAAAAAAAAAz1bXL1TscjTadXrBGQAAAABQSmlvdAYAAAAAeKa9qbnyprBr2qo89UVjw0/KsneTAQAAAAAAAAAAwNV7U/NkKJpXjwEAAADA9TO+0RkAAIDkWn+x6sCLTpa+D2X4ehQAOG4O9IlH2/wwe+8m09UCAAAAAAAAAAA8a+wPOdsL867Gex+21f4Nl34y3BwAAAAAeHqNL04vHfjo0sWLYYN3/sZvhdRZt1glN13XhdRRXCs8c/pESJ1MJiF1d2cr5qssmnTseZ/Ouonbtm2bD9126U91p/NZSB23o5C6qN2sixfOh9TTt50KqX2fst326ZrEy1lKKeO19OK8Pp7XYpH3XvnD6FEshfP5PO06FuC+TclNV1kpH4/TNZl1qZz0OWelUkSbmPNYpysXJZei6s6b5ugVs48loXLBSmlLqnpNrPXzRSpFpckXtFKE+z5tXmmOarejJm9+9GdBh5WTr5xfZYafntch/N21JafQtvEtn/leR31Jt7J6r/LlbuI16UqsWbUWIzdmba6YuYTWCtEo1p42DzLi3uexZlVvR+WSxorZ5S6zNsboYuYqA5h4Tbqmctpx36VfXNl8lUfFe0+yy+Ap9f5H1OUD70bp21EfL+kol/BK1Vqptcl9Yhf74lHu1KpFNOY8DwNyr1UdBuepQaUYRZUDl7KIF20er9okjsD73BhV27Iol5PayKpy6KX360u3pvVsPX3evLnk2uZRdK11z7OSWvWIh87yocuiMuRrYzGrDHRzexI7term+XbMY3syjndr1FQqbp7o5SHKKleslNLU8pbEsdFihRa4lEo72R0+cb7K934eFvV12d6rzfb2s9eM5FKWL+ei1lhVxyBx28psKiTmcWwppY85qyyh5F2PqyUw1vrY2+binetOKWU8ya1wOnQXD12bvVbWlfLUuInlJBeT6jXJ2livK9mOh25WHJ9XKsdKA91KIxwHlE1cNe1qi2lN3nm+pHm+X5lqpX68lJJnJVkb6051zzlv1Uu6ikVcJKnVjrTnps3lpFKAx6N8TeJS22rPBfL1buKh+3gr+8oKecVuvFmLadx5niXWWtFR7PVyEa2tcuQjr9T+53YyN9HV8Xleflyl0tab99wbd3EUkTduK2c9Gq+lnceSkM9r0aQnKV1twXmVgUBlPaC63rtCf1piS1gd3lTWw1a4KCvP1I7eJuTmvXrovHAanim/sboQUXFtm3/VU/u4Po+s4iOJdlT5wbMur0/GFfLKE7dqEc21qzIMzouuuRRVHgCN4hgjD/5z55CX/Uspk/hMucR7nWvHJA+Sa0vNlbWdXKnjRVlt7FMW8W7mKr+ojTbXNlKnlqe358+fC6l5tLniPG4e4zFGcSxajVHJg/9pHIvGilVfTFubpO1vf+3Hh9TZ+pmQemozRSt91v/4mpyxt7717Sk5ntbDDz8SUre3D67wX2zEj4kfW0782JD4sSHxY0Pix5ZuH1Of/vixq918hZXVcW2YIX5syebixwbEjw1VYjbiaeVWdBSHRqVW68WPDYkfGzpW8WN7cnM0qtysSimsDMzEjw2IHxsSP7bkyHlBoFb8l0aXVUPOrnKr6te6w0uL+LGluw9p4seGxI8tO3ROFT82IH7s2okfW7Jz8WMD4seGxI8t2bn4sSU7Fz92bak3Kn6s1GKKyiKPT2o3Ky9KiR8bED+2JE382ID4sSHxY0O3UPxYpRoDAMCNsvf6kiNsVbX/7WMAwGVX2S0OX+tZlv1G5VW+zgwAgGeTr9iuvLXh6fV3T24+k4cDAAAAAAAAbqA3XDr6m3y5Rqv9lTY3n6/Z9KfEAAAAwHJWDQAAuJVc5atM9n9t7yUpe/bek+KVKACwomHXfLmH3ft/AAAAAAAAAACOiddv3+AX1nztCX8nBQAAANx03rjIf8t63d+2/FWj0fU+BAC3LgvrADybXeWLioab7N/qwCfDLwDPpKNVvQP1d+/fR2glgAOutR4deBvR0u5VbwvPgGG3uPe+sFD19r/Wc/iiz71PhocAAACgyjILAAAAAABw03rD9nX/e3jg+nnD9vxrNv01MQAAALCEJQO44tN+5Z3P5OG+/s7Tz+Th4Lg52ssO9r954U3NU17BsPdJ2fdqhr1PgJvKgb/TG/7Z3l4F36vOwBGsUn321z69LdwQS2vW1VS34XeOvCsAAJ7F/DgEXBPLLAAAAAAAAAAAAADAM88LyAB4djrwB2kr7ucAf6gDz4z9VXj/H86Va/wr070/t9vbcPhXrMARHK23vcpXF+lt4dnkSy5Ob3QWOILFjc4AyVdvtDc6CwBwKD8OAUdgmQUAAAAAeJY5QrTncCs/XgI3ra89MVn6+bhNTzv6Lu40PiiZl7xxafr8oCWnHr0RaZrKA54+nnYfjzyK++5rh866LmWsaVYKT8p3o4lnHfNV2jZlrO8rYW/5duS7mW9WtSSsImc7F++/viMUEADg5mLNBICbkBeQAXCMVGdlw7cUDTfcm3qZdMH1trSWXU3Vu8q/u1OL4Xq4yjXQvOiptwUAALh1rfjjEHlhx3uUOFYsswAAAAAEb9i+wT+F9eYNf4sBy63yUyXDT/x4CQAAwA3x17d3bmwG/t7miRubAXjaWTMB4KY1/qmf+q8HPspvW6/8GkDlZwoqXWK7woveb7v9zrTnfNzRSg//ptP08HJzfT2k9ovaK+THy38R4rLFIr29fjGbpx2PR/nIJ0+dCqldLAmLRRqDjMbphkwm6ZRLKV38LYJFvKT5xxn2HOHFsUd4Tex0dqXk9H26Jl3tlzTyefXxFxbyT1LkMlZqbcKoTcWsLyvdrCb+ZkXtp0lyq5Ay1pZK3en6VPWaeDcrrWBTaay6mPMmXpVcTqrtcxcbs1zrc7Wt/TjJtc14rv6vdPZPsQ57H9m+z5dkchHLcBt7zLztOFbblX80JVbqWHeaplJtuy7fzaP/ptAo7rmU0rSxx4zdVq62tZ/1qaVXRlZx0/gm2WrlGMeykkdtTfz9nFxtS/W3kipN+PXy5Vu7N+S4POv4hagjLkfu9bkH+t+93rZtlozB+jwDzYds4sCp2qF2eVAXp9WVFnilZrA2+E87rzbgWd75KJ9X5ff9VlrkXmW0ueLv0eWcj0ZpZrHIffHRMvQBb9hOcxbglvDXd7qvPfHkqmPXxYWIZX3o1av9qufR+51SX/xZZfJb7TvyF1bqE1dz9EPnX3BdsSTkbqv2i7iVu5Vn5SWuxfWVUnT0pcuy2m/e5rWy2vpi6WexcsXN+7g4WR3y1X5aOZ31PI7P27h603WVPxIbxUCivMrR5nXR2hr4olK58tZHl+tdqS2mrdJE10fg8V4f5mjvUTrwyfA9SvuXyBbxN8/beEknuXa0lfn+Yp7H2Ef/5fA+//Z37VlJbifbUextazcrF5VKQcqlaLVfDs8d0yrTwKv4+fq4mHzt/fx1WmY50Hg1ue7kIhpXSEopTV4uiyUhL0RXR3yVhw5x3+PYYuTa0dR6+jz4yd1WHgZUll/qw7ajj8Dn+WaVshYHurnX6+PdWszjM7XJStV21KYHMfNZKt7jce3B7jyPMdJ5nT59OqTmk6pmLJvE6Joc2DCKQRGllBIHZusxxGUWw2Py0+pSym7c/ImzWyH1ntvTNbl06VJIvWOyljM2jUOMWELL+9///pD6spe//MAn3/sD4sfEjy13HOPHalOejY2NkLoVnztP41Ke+LEh8WPLksWPHVRfyqiM4Y8+Tq4+tRM/NiR+bAnxY8Od58bq+i3LXrt+X+PWxCnq0riXp+wqloTKFc1VL7YYba2cdLVZf9r50xoAfE0qz3HiYLKUMsrNbF4azY9L+lgSqvFKKzyVyysw1YeJldHmIPFoP1Vy5B84OfCXtO0HhqDix6710OLHhp6t8WN5LLriTmqPkNI+ayOjWn8aU5u4vt/E2dZiMUvHrRXRWjFL2+aF1eqcfVQ59NFrfb12xNtZayevY5tQO+tVHrXXVj4ro6PcWKXlshw/tt8RIojEjz3jxI8tOXhIEz+2ZFvxY8NDix8bWDV+7BkzeEaWa734sSWbix8bHvnGxY+VG71mclibJX5sSPzYstS0Z/FjSw4tfmxA/NjQTRU/dgNnwnAzuhyLf4StSjkkgj++mwy4+R14JVnZN9fyvmcAOJoDf08+HITrbQEAAJ5l3thf1RRvGChz4JO9RVqPWuAyyywAAAAAwC3hOq3t7z2AsAQKAAAA3IqsmQBwM1jp1XTw7HPkV8BejYOviQWup/0Vef9LxEqcLO1/0dj+rw3/4K14mSBcT1++e7U/wgPcQEfrbYeG/a/eFp4xbz6ZfhZvqPqDLZVf+s2/PlJ5T/5Kv7hV+wXL+IOi8Rcsq1b6edjr+QuW1Z+aCa7ip3tW+C3fyu/RZatsW6q/hJq2vJ6/YLlXRL98azcfBQCe3S4/Ydn7f3g2scwCAAAAcGRHWEUZbhV+cPqwX6QGrsn1qzvDn5AHAADgaWTtBa4rayYA3Ay8gAzqjvzGogPfKd4+Bs+gpXXtairgge/kSg0Ax9nT1duusisAAABuNk/Xj0N4jxLHimUWAIDr4Y//yjtubAa+/raTNzYDAPCsd7SlwuFW+1cy9/8Ewv5Pyr6lTgHhcPPw4yUAAOz5ytov+z5V+uHYo/m7a+kXkeFWZO0Fbl3WTAC4Jl5ABnXVWcrSec5hX/OaWHj2+Yrp07/gGD3Dh7tJDp3dtBnjuvuaE+tX/qNP/WvTtnlXfTdPm4/S5s08PXNVFggAACAASURBVKVoq4fuj76E0zXp0E2T9tzWBiTzPu88bTsq6az7eLOqX8jnlVO7vtJi9E28113M2Dg9Lqpe8Kzrjn6vs6apPOVaeugv29498hGP4Eu3ps/k4ThOjvso4vWXZsMP33xy8sznBACAZw3vUYKb3FfO00LowHWtctd156tM+Y/7csEzbuvIW37jXbc9jfkAAADglrP3+9DPwFal+AtYuFpH+6mSw7by4yUAAAA3irUXeHpZMwHgpuUFZPAM8ZpYAAAAAACAp9H/denCjc7C6q7p13ef9s2PoZvuxVJ/a+LBIQAAAMDT6Tr9VvTen876C1ioOtrvi1zlVn68BAAA4May9gJHZs0EgJuWF5DBUxztxbFeEws3la+cmw/BMfKGrd2vObF+o3MBx86Xbe/e6CwA19HrL83efHJyo3MBAABwLPzNmYcacHT/62PnvvGu2250LgC4BRztL2EObLUX9HXYJ8MvAAA3xPXriy9399fpj2yBp8uXXRTbxjW56X655MYSNgbAs4M1YbiurL3ALeor5/MjbXdda+N13fkqU37LBc+wrRudgbp/ds8dNzoLcH21NzoDcHN5Y3/wf3sfXuWG4ZPDPgQAAAAAALjVffmFSzc6CwAAAE+x9xOSK261/29dhn/9Ev4ODQB41nhTc/BHqQEAALjZWBOGW5e1FwCAG2i87MM00eniWyTbLr3RrC2jSnaatPMupq5vrIfURenicWOuStnZST+BshEP3TfxetYGwV2Xcj5u4yvk2nTBF33lvZujPmVuMU2vOG1jxvp8N2rFpJul7ZtYTsZrtb0/g770wk3y0zrxfjxrrfLe2Rt4xY72auGnxQ2csq90wf/2ODXCTeVFnOnQo1GlPWlyEx0b4T62wKPYb+Vtq/o27bxdrSR0i7j56OjvRW1ib1tKaeOR81lVBj/x0G1tkLFY4ZI2sctcxCFEqeU896d97MvbOAKpb943pZQv257tffL3N6/8lFbXPFlOvnzrSje6dyZ9vNN9rfHv4+0aN6mILtp0Ul1ttNlX2rqjP4jIhb+asSa2Cc08DhfzsWuHztWnlvN86EprU2lRRrERjtsuFqkQtvFql1pbl6dLuXeolrBRrNf/4PSJkNrNpnv/fv3OlcHMmzfGpZS+1mLk5qhSyipXLG3b11rRXFC67uijzWorWimiMedt7DtqbVFZVIYoqXLlmpdv1rz2Cxt5YJaHfPPYK1VvZfV+BbF0V0Yg9Z3HS/r6S1cq5ptPri39/LC2oasuZFRylhPzktRKw5tFZQQS28lKxauOY1cYwOd6V52VVEYCRx+BdHlxp1TWvNpxrLY53xUr9aerdNa1SUmt36q0N0sv+FXNl/vKja6NE/JSXdx5fVYSq08Xl0Ga6lJzlM86t//j8dJF9Q9smyt1taDE9Nq9TBmrrhZUpoHd0VeluvrEI1bMeOi8/NLHW9lXe9s8Fo2HbuLKT3UdI1euStdTWQOpNh3xvPJiQmz8c3OUr2cpZTFLJaHWlK22XFaZlcRCGNv3nK3qM7V57m3jFc3j3OoYY7HimBA43Fcd0p9Xl8Bzch+74y42VtUmOqsO0ENi7sqrTdE4tmaVuVheyKiskFevWNo8Z6zysGO1BcbRKI8n4/y09ox/Yz3uvNJvzYaf/dXHr/zoZYgG6eIsr5TSxNoxalO264O6LD+Si5fk7nvvCal9HIt2XeVmtXEulhfq8gph39aW2uIlncVqP433ehwXIkopa2sbIfW/ve03Q+qrn/vKkDqLGVubVFqMT/p9p0Pq9/3khZB6aXctpO7sTEPqB4gfO0j82JLNb4X4sQN/DHaVjrZV2fd3aJf30Bx4thjPOheEFWMA8lOeNk/bxyuNCRex/zh4iQ4cunbkPq/A55Wl/LiwUm1rw4y8dpQ3ziPGyraVRwP5KWl+3t1VM96ky7LI64R5dlA5cH31MyVWVttia1Mro6vEj60y4LzO8WM57K2288ozpqM3ODlqqJTSxCKer/eNjB+rPHaIj1pqfcei8vQ2DgNiY1Ud8uULnp/KHTjw/v5670/B9/9N+FKHbbV/w6WfHNh8tO8WiB8bEj829GyNH2vGVyZEX3phK3wTuPm9/tJsf0RZcMRAMvFjA+LHlhxY/NgST8/fsi0N3hA/tuTQ4seGm9868WM3ek34AxkTPzY8tPixJanJTRI/dmPXXl708pce2POjDz8Scn7+scdD6mgyCam521pfS385VUoZxSt+4UJ6tltbK0vNe6mNkyvL1LEU5fXDUsooHjqHJFW68rxCWBuL5vHLVbSEh2+bl35KaQ4f8v3NmcBLuLX95Uee+Gf33LH/E/FjQ+LHhm6h+LHKmAMAAAAAAADgmrztz33u8MOzW5fCJu+57768z1UCyNY20oPhxbK32+yZjNO7JMpqAWQ5RCD/ZWy5ij+0SDuPT+KrAcCj/ELnHEBWfZ/E4Wp/qHwVkf1HP3T1zxViPOtTo13/xg380RkAgGOv+ocxR7P3J2pP+54BgMMs7XarffFVbnW0nQMAAHCzsSYMR2btBQDgmPACMnjSJ//i2290FgAAAAAAAAAAALiOrt/frlz+M7br9MdsAMDN5ksv7NzoLMAt7M0b41JK31Z+ryL/8EMbR91N/MGK/DscfVf7/Y+88y79SkfW1q9JTI45b+MPhPS1Xz1Z9OmKj0r60ZUm/yJLPKv5vPKbHqNROq8mZmyef3Cldiur9yuIpbt0ZaVZZb6kQ6+/NF3lcABwk7MmDLeoz/uVX3la97fKSk763U2O5OgT5xvqVmrr/87kynS4j+sg+ddG2/wjqzXV3/wMiX2clccfYC2llHFcLujjKkdlISMuJlzFFUub54zl1bC+rV7v9IXRKL19KGdsVPtV2o31uPN80eJvDPfx0E2+ZKU0sXaM2vFffuSJvAd41vACMgAAAAAAAAAAAICje1NT3thf+X/gZvM35kv/wGCVv3GqvAjjgK/eXFvhWAAAAADcXKwJAwAAzxpeQAZL/OCHf9DSz3dn6Q2X9z/4QEjdnaU3a3Z9/E2V2g+2tPn3XuJLPStvUY0Zq+rm6Q2szShlu6n9fk4ff4im79JFayo/3ROPm99oW3v5a15K6uMrb/tSeflr38dwqPgG1j7mrP4DOPnQ1/j7Oddw6GVX7CuvLbILAAAAAAAAAIBnof1/9HX533t/CfbGwyOADttq/4ZLPxluDgBcJ1++tXujswCs5PU78zdv+IMmAACeZtaE4enyhotbNzoLwEr+r1n3dyYrvSYCgGPFej0AAAAAAAAAAADwbLP0L8rCn5ld01ZH2zkAAAAAANeJNWEAAIAj8AIyAAAAAAAAAAAAgKfTX3384o3OwlVarJB6Y3UrbHszn1cwX23zG/jXkNd86L89bq5HPkopb2pKufY/DT2w1Zs+kLvDPhl+Abh+vvbE+uV/9M0qXUPp+1RjJ6P0lxeLRWqim6Zd5dCl5CYxbTuK23a1trZv0s6beUrt25Va8jZekmrOV9GssvM23ut5GoG01SvW57sZb0csY9UiOiqjtPN9Of/SC1t7//4Hp0+UUrrZdP+XX7+z4ngGAABuXv/n9lWuOq44Kl5p8luTT2F2PQ+d3cBD3yjH7pR/6rM+6z333Ze/8+jDj4TU8489HlLXNjZC6qJLF3wyXs8ZG8UFgQsXLoTUvJbQxNWAUkq3QpvQdGm5oLr8MurTobvYnjRNWmrI+njcsuLaTuXQlV03h6/P/M3ZlaS/vWyhMe+6dlJXitH/Nbuu3QQAz1peQAYAAAAAAAAAAAAAPJu96Uh/dDTcau9lZG9qypuaJ/9x4JO9/7z8fa8hAwAAYOjLL07rX3r6vOHSwVerfM3JyTOZAQAAAODmNB6+DLPr0lst2/zTJfHZ/GhUeV9mF9+T2sc3c9525+1p2/jkvvaTQWVtbS2kjio/ZxTfzxpPubr5eJwO3cWfM5rtVtanZot0wdfGaXVpFrOdf86oq/7EU5N/+SfdrL52wZ/MwyG1YBzPuh3F2rGzk454NdkKO49lOFfbxSy/QrgScTMapS9UfocpV/n80uZSq9iVI8cfcYrbVmOQ+tiKNvm8clFoKu+2r9yv+FtgTWwxqj9sla/LCveqsnF1z7X7FW9WvJ7Vd2B3i/jK8za2GJV9J9Vqm1uM/GN38zxIiM1gKaUZH/3M2vy7bYtaO5qrXkwc5Ve1x3Oa134vt622dUdV3XOloMRLml/J38Xf6Cu1vA3L8P5PljZWex/WOvpKCcznNZ+nSj2KL/ZddJVr0sQ2oY1v5a/U+jxIWC28tfKzm/nQ8ZRLKX0fh8G5Y6r0HdWflMl5y7+tmW9W7G2rPwyRq3Vl85Ra/fmF3JrlKeRhRfTy581qPzqRRwK5duQur68Nfro8U8ub558brc1ZKvuuDMvi4L/2M6rtIpbh+Ibzyk/xVlqMlbrLPD4fxxlN11caqzae9nye5t15apB7pb42+MlTnqdk45CasjikesbyW0q1/GeVe1056zY2lJX1mdhi1C5nJWMrTYjivrt6p5bkAXwXBzBtbThZ61vyGmBeyEuJK06INuIPW919990hdWdnOx/6sfibWvlHnJZme68Hz9s2lTFE5YLnBdtRPPS8VkS79ug/bJW7vOp677XOSvarrJ/n6VJtVlLZeex3Dmu6rxw8ytdsNM7TwJXm7HmVexr707g2X1m6nK32A1/tKBXgUV4umFdW+WJBKJUVrTjbqg4SKqOjynJB2nOumJVV02rlipes69OMPpfAUpvAViZEcaaWlxq62k8IndjYDKk7092QOpnkB1uVIjiqdS6X/eRP/uTww8//wi8Mm3zoh35E3ud0mh61nDt7NqTWhjfppNbX07OnUltjOX3bbSF1NE5lbPtS+vXLUspkEnvM2Knl6/nQAw/nQ//2b/1WSP2V//5rIbWyhBinFW1u/UtpY73OU4M+plZaulLyaHVycIV8ybEOO/X13F1Oq8uPKXUtnlcbR2WLuFZQShnl56dxxNiOU9WbxqcwpZbz/OQrl4R2lDI2n6eaVWrRBavMqvNT+FKfMcUllLjzdlx95hDHTrEQ9rXfvE3jhKa2mBAv+CrRGrNZpYhOmvj3PPGK/u7v3h/3Ha9nbUCYB6uj3O/E1Oqh86Qmr2PnCJY8ZiulzKfpft2zlu717nbadmcrXc/Z7sWcsfMX087X4m9sv/PhtFLR9vcd/Ej8mPixw75wK8ePfdIvvS3vBLjJ/Y15/1WXh5orxo/ta28uvwXsWl9DdrSt9jbZe/vYgXAy8WPXSvzYtXo2xY89JVX82HBb8WPLNj7ynksp4seGcmt22FPpy1PLUESbphE/tuTQ4seGxxU/NrBi/FgbV2Vr4QcfyMMhhxA/du2bH33f4seGbt34sRulKSPxY8sOLX7soFsifuwrV4sHA264P/DWt37o33hj/o74sSHxY0u+cJPGj12JHxgvu2t5qeFo8WN7C3Tix4bEjy1zS8aPVRaOntb4sQP/KX5sSPzY0C0UP3a9nlkCAAAAAAAAAAAAANy03tQc5eViVW/sn3zv2BtXe7kPAAAAAAAAAFxXtd9PBwAAAAAAAAAAALg1/aePet3ev/Nv6k7nu3lXffwV4vc/kH5neOvSpZC6KOmngKu/x5vfnpTPOv/SexN/ULqUMhqlg/eLSs7TtrXf6C7xvPJPpvfx53tXfBtVvuD5V7jzFeub2rus8u+WV7ZOyfl34Esp+UfR8+9R7/eV82f6fV3X7wVhl99rdvn/vYYMAACA4GiTxwNb7b1f+7BPhl+AZ6uvmrSllDYups1mK9WENq6bjuK++9pKW14PjuuLpYk56+LSZSllPEqvHRiN19LO41JzXrBt8sJmKW2bMpaX0Lt+GlLH48qbFvKKbmX1vksXfD6fhdSmlrGNtc2QujNNzztG8UYvFl0p5a9f2t775KtPPuVYTVxgP33HnSH187/wCw9+//9+U/g+AADPjGpAAAAAAAAAAAAAAAAAV+VNzZN/zu2PugEAAAje1Fx5L9gqW+1/Gdnwjdjh3WQAAAAAldffAgAAAAAAAAAAAADc0vb/cfXen2Hv/3vsa9pq/4ZLPxluDgAAAAcceEHYdd2q7Hs3mfdlAwAAAHu8gAwAAAAAAAAAAAAAeDZb+sfV1b+4vsqtjrZzAAAAGKq+LPto9l5bZroKAAAA7OcFZAAAAAAAAAAAAAAA18tXTA/8eff8xuSjrlth25v2pMpq53VdPVsveLa41g3+wYm165EPAAC4OV2/F4RdfrXZdXrBGQAAAHCLGveDJ4+j0Shu0hz5YItFZU2iHbchte/SE9aNtfWQurVzKW5beSQ5nc5C6lpt86Braus0XXrCOp+mJ8eTUXrBXFvyjS6lT3nr4qPf/DB8sUjZbuIpl1LGbcr57mIaUrtYiva0hxxiXuL9ilesaVPxbmK+2lq16/u0fVvZPqbWSmjlfsWzXsTbMaq1NqvEXIxyxmIRjfe5lFImsYh28Yrle9U1KdullGqLkraNFzwWsVJK6eMlzYWw63OtT9s2/dKrfWWHfaWExxNrcrbTpqVWzFapeTm1q5XReFqVm9WW2JTVGqumT5t38czipvUGId+NPt7O6iUNxpVhVWnjVevjoWslIR+5dLnvGMec5/50VGmsKpVrkPWn3oJlJ/aBc+ljO9jmclAqJSm3sU28YJNYd0qp9C6Vm5mbslgUmloRzXKLkccnZTgPeao8bButUHcOG+ldOXTMeaWpO/posV51unnsMePdnM9XKN+lrE/SlGcSW4z5NGW7qXUed912e0i9fWMjpD7x2KMhNZfQyaTytu4m3848mVqkazLKLXCtiObBz2iUh3yVudgkbj7KlyTueRQrQLUrrux8bRJSm1z3cr0rZdLFMryRVipyE51LwvndnbTnUu6bpXWM/RaHFMjDhjHzWaUBn2ymsz5z8lRIXT+xGVJHk0rtyMsFeb1rGq/YxQsXQ+q5C+dzxkZtKoS56t155x0hdTJJey61pbbd3bSEsr6ebuXJkyfzodfjSt0Tjz8WUufxmmxf2gqptYXNirz5bJ7K/+Z66pVKKRsn0he2t3dD6iFtzZPNyJnYXU53055LKZO4tpknRHnBdsXbsTvdDqmLecpYPqlSStumvj63J3lddCM2/rN5pX3e2k4tfB6V5SHf3fem9qTURuB59nrxQsr2PNadUsrp06dD6rlz50LqIo/eY3vymg9+cc5YXmDfjF1evmLnzqeepZRyaSs90Sh92vn587FjWr6YdsUqzzs2NlNDN41L99OdSmMVT7p0cRh81x2p/C9qRfQFz7s3pPZxcb+NK7rnz6fi/dBDaUZTStmtXLRUREexPanO1GLVu1J6u2VLLd/2lm8Ne/6LX/g/50Ovn0zF7PY7bg+piziUfeD++0Pq29/+9pivMo9zh5e+7FUh9b/+9M+G1E/91E/Nh/6133hHSJ2M0ojx0UdTMXvJi16QD/2hr/3wkPpRH/FRRz70HXfdFVLn8SFOKWU9jrtuO317SG3Hqfz/i2/65nzoc2dTvf6Wb/6G/f/59rKkwH/9P/rapduOYmuztp4mU6WUnZ00is7r7/mCV2cleeFoN9adcZwGttWFurzQEdcnd3bSto8+8URIvXSpspiwvZ0GuqO46DqLt2O6WxltnjxxIu08DlbvvPP2kPr//D//LB960cXHr3GM3dRWdMOCcLeoPEFq8nOxeOi8EF2fEOVV7rjide/dd4fU4XOWpx62+nqC+Ng3bjmPN7r6LLs2CEnb53Ck6nOBEhurj/3g20Pqu3/710NqN0uD/x//6cpF+ZjfkxbTbrs9DerOzlLv8BO/dbAvHmZF/NiQ+LGhWyh+bP9ieGUZpNZoiB9bsrH4sQHxY0NHjB978nyOED+2L2NXCrG/q4Zb2L6HVuLHhsnix4aHFj920HWNHzss65eXB8WPDYkfW7Kt+LGB6xo/dljM2GUxAP5K631YYyt+bMmhxY8NiB/bpxJD8vR6U1Pe2F/5/1LK+tqa+LEh8WNDt0j82JVvnjh1uogfW76t+LGDxI8NfWCmdqUdPnXqKaO4HLq5NGxszzB+7H/7v6/8e22jMrwRPzYkfmzoZo0fu5Ltb/nmfz5MPv/442HPVx8/9tvlr+39+//75193+R/ix5Ylix8b7PzWjB/Lq8FPb/zYgacM4seGxI8N3ULxY7VnFAAAAAAAAAAAAAAAt6a/kd+6Atz0Xr99tb/CBQAAt5Y3NU++C2z/v/d/eJVbvbF/8t+lPPnvwz7Z+xAAAADgssqPcgAAAAAAAAAAAAAAAAAAAE+jvZeCVT88wlZH2zkAAABw3HgBGQAAAAAAAAAAAADw7Pe3x+2V/+i78M2mbUNqG1NLKaMm/Ul32zQhtevTtvlPxfO2pZR04FLGo1HaeZevWN53afp41vHM4gUri5ixUso43q+uixe8dknTceP1LLWSkA/dl3hStVx3sfy3o1j+4wXvKgWhdtb7sv767VllXwAAwAr+2hPnb3QWuCaXVtj23NOWi6ffY0/7Hr/kias5399Y8Sg/8gc+dsU9AAAA3CQqD78BAAAAAAAAAAAAAAAAAAAAAACAZxMvIAMAAAAAAAAAAAAAAAAAgGfCX3vs4o3OArCSP/pTP3+jswAAAPD08AIyAAAAAAAAAAAAAAAAAAAAAAAAOEbGNzoDAAAAAAAAAAAAAAAAAABw7Hz1iUlIbfq07Znbbg+pf+XBR/b+/Y/vODP8wmRtLWze9enYfdeF1NFoFFKrdqfbIXUxTxmrHrpt0x9Wj9u0eVcWIXVjYz2kzuaznLGt7Z2Quj5JN2s+T7fj7nvvyIfu4t1smyakXryQsj2fz/OhT58+HVLPnTsXUhf9lWx/yRNXvvkP77itlNJ06Wa95GUvzhmbjJaXk8/4xV/NGwIAANxyxk3THvgorgmUOE+sTDKrmkXae570X7iwFVI3Nw6e5n7xjEspZbKeZ+ZpArwWl2Aubadsl9rMvK2sZSST9crr53Z303LGYiel5mx3szRvX8TUUsqw0D7l0G1Kveoiujz/3SJtvr6WVvp2d3bT8WLN2l1Urkmf1/JiEZ80qRQ1eYWylGaRvrDoU+2YxFtZajerjXmrNGWx2k5yAW7j3SqVZd1JiWcd872I64CllD7uey0uni7mqZh1tYZykldm8zUbpXayiVdssZtqVinlzrhuu76xEVIfOns2pOaGrpTSxrv5onvuDal9XFC+cOliSJ3UWoxRvuAx212bdj6pVdv19XTBp12qmG0fF7LHldvRx/Tc1DWxZ5mMU3+a29hSynw6Damz2JnnAlxyG1vKdDcd+lQ8rzberC5f7lImo/SF8fhyEX1475OPv/3Kc45Zv1c7ntj78KNve/Jhwy+fT7UjduOllDKP1edVd6dqO9+Jz0viFSullHEaRbRrqSnbnaeWcFQZGlVuVhML4XSazrrEkeqpEyfzoe++++6QevFiGkVfunQp5qty1h/xkR8ZUt/xjreH1Be9OD2CeuD++0PqRmyfSykPP/JwSD0Zu/I8cJrkkVMpzZIW/soD3VfFcvKOQ653dUh12Svjve620r2+LY6N2s10wWe1FuNCfBiZZyWLePIn4rallIencT41TlXvf/1rXxRSH3vs0XzoX/ilXwipv/3r7wipt52+LaR+/l/8gpD6z/+//zdn7H/+n/5iSL3/wQdD6oP3vz+k/vov/Uo+9Ik40j2Rxxgx/qCbxaWGODQqpbyv9oU946eUmX0HPSTzuWcppawd8qz9slOnUvs/j9ne2qosoWyMU72+7bYUnbARR1a335YK8OYTJ3LG2sqM6Ohz22pMRol9fRsHq7NZmpU88XiK5yiljCepqGzEpbamTxk7c2ZJCNSePLctpczjeW1sbobUSxfPh9Td2orW7bfdFVIvXEjN0ckTpz7wzytXfm39ybK3s5MCrTY30kmV2jC4iysCscaXe+5JI7pSyp13pmty8WIa3j/8cOq21tfTELqUcvpUahPufyAN224/c3tIvRjn7LffcWfMVzl5Knb0ec7yqleE1PMXL+RDnzt/NqQ2sSTcffepkLpbW715+OE00M1nvb6eJlPTRWon77vvvpiv8poP+qCUnAd1J9I1OXE6NWWllNluyvmDDz0UUm+Lc7HtrTiPqy4SxsWfyvJ7bDEmcdWo1J53nI8LAu+/Pw0Ia4t8pe9T33HqRBoJPOe5aTHhzJlUTu65N21bSnn3u98TUi9eSr3DblySet2HfXg+9B23hZjU777yz2X1t4895r/59n+VD/0//+W/HFLvjqs3Dz70SEi956XpdnzQh/+enLH8mCbXrA96XVqIGOfutpRXf8iHhtRLF9LEeTtOuh954omQWkp577vfF1JHbWpw+hIX58+lcdeiOgx+Ig1Wn9hMLcbzX/LCkPrn/6f/JR9561LqcH/oR39u/3++7M8u+c5LDsnALD63PX+h0tH3cVayiIPkH/iBHwipJ0+nulNqgft5LPrQQ2lU9rEf+3H50JfOp/Kf24QLF1MpuuOONNA9dy6VsVJbOHr88TTQfdnLXxpST55Mo9xSyp23p/uV5w75OeP//r/9r/nQ3/aWt4TUx554PKQ2tZXE0AjngIpSShOHArkBz9vm1FJKG0Ngurj5hQupmPVxgWVRCb0p6/GBRWXIF29WXogotWWQPD/Nl3saG7pSSh8fxD/3Oc9LG89SI7w+SuOTjdt+J+arjEZxUr+Iz5Rj77A2OXg7dgZ/qSV+bEj82NAtFD+2/5NaEa204eLHlnxB/NiSvYsfG7iG+LErCxcnx2tl5fixjc3Lk9ArqyX7I8rEjw2JH1uSKn5s4BmJH7vsYBSZ+LEh8WND4seGrkP82BWLQ7qty3Flh8WPlasLIRM/NiR+bEj82FAlfmxJOalHjh1wWBcjfmxI/NiQ+LEPuDJ8za+OOhkDUXL82H5Lo6rEcOe8IgAAIABJREFUjw2JHxu65eLHxm1Trnf82GWHDO3Ejy0hfmzgpo8f+5F9n3zY/i/E+LHykz/9UyFV/NiSnYsfG3iWxo993d6/DgSSXfa5n/WJYc9Hix/beyur+LEh8WNDt2j8WF7GeHrjxw4MTcWPLSF+bOAWih+rLEwDAAAAAAAAAAAAAAAAAAAAAAAAzyZeQAYAAAAAAAAAAAAAAAAAAAAAAADHiBeQAQAAAAAAAAAAAAAAAAAAAAAAwDHiBWQAAAAAAAAAAAAAAAAAAAAAAABwjHgBGQAAAAAAAAAAAAAAAAAAAAAAABwjXkAGAAAAAAAAAAAAAAAAAAAAAAAAx4gXkAEAAAAAAAAAAAAAAAAAAAAAAMAxMi6lO/BR06S3kjVN2l0Tk0ejUS0/BzOzX9umzdcmKdvtOG27M53mbC3m85C6sbYeUrsundT6ZC0fOmvbcUidzXZC6qJJ25ZSJqP0ha70KXV3FlJ3d3dD6traJGdsNkuHHo1SIZwv0rZ7uv6Qry0WYav1jc2Qujh3PqSeWT8RUl+xsRFSSyntOF203VgIZ126JrnulFJSIStlvaQrtpjH1JjtUsr2NBWkyVq6aE1J5WQySYV/o3Y7tra2UvI47fy2228LqY8/fjYf+uUve1lIffdv/3ba9iUvDanvf/9786FPj2IjnG9W3HYWW4zR5qllH1/Y+9eL2lTCH9rZDqklNnT9olJEb5+k6vO8eOjduPPnbqbW5sIstcCllHmu9ZPUqY1jm9DHRrKUMpul/jS30C957atC6nvf/Tv50H/oE/9ISP2lX/iFkPrgww+H1Hvvviukfvb/8D/kjP3jb/jHIfXLv/TLQuq/+JZvDqlf8Gc/Px/6X/3LfxlS21HqWTa7VG13Ll0IqaWUtkuNcD8/WOv7nSs7PNEuaYRP7JX6OFLtY+Evtco12knN+1oclbWjVLNKKfNFqh3ddjr0mTh22thJA90+1spSSpuHfPGK9n3a+dq80oruPv54SL0t9qcnY3PU1Rqrh//Lfwmpt8ezPv/gQyH1ZC6iKbGUUu6apbu5aFITnQc/1ZnapVgIX/WKV4bUd7z97SG17ysloYzjW7Pj7PXE6VSpp7upiI4m8W6VcrpPVa9p0v1s4llvVo5c+sNmK6WUUvJs6rve/A9D6tpmZX7ax5r7/PiK8+bcuZD6vf/oH4XU58XJaSnl3/+//yKkTnMbGydTm9X3tsemcNGnBieXk1wt29znldK1V/3G+UMGYYfN+s+cOpn3t7V1KaS2o3tC6qhP2T51olISptupnXzPfWlSM4kTvWmc0WxVphWljQVp1MaqF2c080Vl8J/XWMax/P+lL/3ikPrWH/4P+dDnz6fLsnbXS1LqRho73X3XvSH1lS9/ec7Y7//Dfyikbp44E1JvuzPN2b/7O783H3pnO12Tb3rT/54ydnJv4ejc8MOL51Mbe8+9z80ZO3/+bEh9znOeE1Jni1TvNmtLKI+ffSKk3nXXHfHQqXk/f7YyK3nf+98XUvOK7uNn0wVfW0uV+pFHH8kZa+Ka7aGLlqWUUt7x9rTyM6kNMtbXU84X8dDbO2nls1tUDv2iFz4/pJ6LJbyLa/tNSYVwazcu4pXyS7/8qyH1T3z6Hw+p73rXu0LqrLZ6M40Lp9vbqWO6eDGd12S9svzexu54HOdiufz3sSC040o5aeJQ9znPOR1Sz2+lNmE0qgyD5xup/b/vYmref+d30ty2GcU5S5+GVaWUfvKCkHrXK+4OqV/25/5ESP2d30yFv5Tyb//Ntx6W9GH7/j1aNpLP7cmstlzw4z/9iyH1437f7w+pL3zpB4XUk5tpoNvUBtiPn0u14998x4+F1LZNN2ttvbKs9KoPSuf16Nl3htR7n5eeKbzilWncVUp51e9N7f+FS4+G1MVgDXC/UVycnO3kZ1Pl4sXUiubHlPc/mKrtolQW006vpRJ+x/NfmDcvpbzlh39t6ed/5hNfHba67WQax5ZSTsWVz0VcLvvMz/j0kPr+370/H/rnf+G/hdRRfFb+kR/+4SH1bb9Saaw+67M/J6Te9+/eGlI/9MNeF1Lf+c7fCqnPe06a+ZZSHnjkwZD6khelodEnfuInhNSf+Imfqhz6d1P1ee7z0uC/jathbRwklFK+8C+kZxbvuu89IfXffd/3552HMJW8klZK2Z6mgdlGLKLzGEaSh0bVzUcx9iY/SO/jQ5ym9ohz0aQv5AFhXu5d1FfBkxyPlK9nJdSplHFciL7vfe8OqW2MdPrdi6lmbc3T5LTUgiJ2dlJq36UJ0bKnZuLHxI8t96yJH9tf8HL8WBfX9ksRP7aE+LEh8WND1xI/dqVB/uAzJ8oR48eumM0PNkf7I8rEjw2JHxsSPzb0DMePPfn5zoUifmwZ8WND4seGrmv82Ie8bv962pVFzstxZeLHlqSKHxsQPzZ0XePH2jw1vrqlvNOHBJKJHxsSPzYkfuwDvmjvX31cBtkXP7ZEjh/bb2ksmfixIfFjQ7dc/NjGeFSuW/zYp+779713Lo/6ED82JH5s6KaPH/uRvU9e9SH748JS/FgpZTKOz0rEjw2IHxt6tsaP7bnt+UuWuw+LHLvsaPFje5+LHxsSPzZ0i8aPNTGM5OmNH2uf2h2IH1t26Lhn8WMDN1X82FX/PSoAAAAAAAAAAAAAAAAAAAAAAABw6/MCMgAAAAAAAAAAAAAAAAAAAAAAADhGvIAMAAAAAAAAAAAAAAAAAAAAAAAAjhEvIAMAAAAAAAAAAAAAAAAAAAAAAIBjxAvIAAAAAAAAAAAAAAAAAAAAAAAA4BjxAjIAAAAAAAAAAAAAAAAAAAAAAAA4Rpr1tYPvIOu6LmzQtuOQOho1IbXvU2opZRzT+74PqZ/9WZ8ZUmf9LB13lPZcSpnN5iF1bW0tpLZtestbN1/kQ29sbITUxSLlfD6f5p1nzSjlvInXbLazG1JHo1FI/d33vT/mq/R92nw2S4fuu0NP6o/90q/u/fsHP+yDl37n4vbFmLV4xc6fD6kn4vWsVZ1SurR9s55K0bRLhTDf6FLKvE+bjxapPekX8dCj1NqUUhbxssymqdb3saEbxWqbs11KiVuX0WgSUnOV39rezodexLxN1tKhu1iKSklXrJSy3qSK2cSM5cZ/UWnKlhz3My5s7f37+85sho0fio3w+d106MkkXc9Sykeup95h1qeCMo43q2/TzTp56racsbMXL6Xk2PiX2CG2MWOllFx71k+dSNu2qRCef/xcPnQXRxG7l1Llmmyk5qiNhX89VupSytZWOvR6LEXj9ZSx6bTSWDXxmty+th5SR7HvKF0qJ6WUUZuqfTedllL+wLmdvU9+6rYrl/G3PtC6/8WtK1/45hNPfuGJ2CvV+rTyB0q6pK+7PVWue2MBzmWslHJ2MCbfbys20ZdixzOP593HwWQp5cSJdF7ntrZCaheHAe041Z1SytZu2nkTh0frm6nqNU3lLcyXdtKhJ00qJ33sMRdxpNrFqlFK2dlJw5uN9VRtZzupUxtNKuOuYe/w+x45u/fvHzyZNn/Hvpv1JVtXTuEfnpiU2nSplPKnXvrykHoidls7j50Nqd0sXZNmlq52KaWbp7ZuNEklvF1LV2z7YqXFaOMEtou1Y97HIrpeqZj9LG2eq97uzk5Inc3iODYW71JKKems2/VUTmJbVU6dvD0f+LYzd4TUF73oJSH11R/9ISH15JnU77TxVpZSPu3/96aQ+mX7itk/OHFlvPGlW1fqxdecXD4iPbWeBtillN3d1NZN80wtNgkveclL86HPnD4ZUp9zz70h9d2/866Q+uCDD4fUtROVa/LiF744pC5iKXziicdD6michoullBKHfHkNsGtSzbrrjnvykdfOpC9M4hjjIz/io0Pqf/hP//HIey6lxJaslHFqoptxao62p5WK+fhjj4TUrXf815B6zx13Xf7HX3rwwb0P//lzn3v5H2fPPxG2zWsFpZRP+IRPCKkPPPBASJ2spb7jsUdSAS61xeRp7B26eSreWzu1/jT2HXkhunJJ83ynsvySF/kqY6cTp0/FQ1dmatu7qbPejQ345mZqCU+eTBkrpdJYjSep6o3jkuyLXvC8kHru3GM5X7/1ztQ7NHHl9OSJNDQ6c/JMPnSeEM3msQHPzXss/KVUSmFtAB9Xg+NItTormcecj9q0mLYeO+vJpNKfjuIiyXTZ+uSeWXwasnEilYSutpKxHjfP1XYeF45mcV20lLJ4zy8elvQlZ688CvmG59w9/MI4XvC1M3flQ3/IR6du69Uf/NqQ+sKXvjSknowzms3aKt96vNd5IW46TzfrsXOpfS6l/L2//xMh9fy5tBo8HqfzGtfm7HmyNsudWpyAzuOsfNJWqu2Z29LU4NSZ0yH1zuemcewrX/KcfOhxXPJ66NGndD0f9rWfPvzOvd//K0u3/dUf/Gdhz3/6Mz8xZywPYC6evxBS84OtPAcspezGFZgu9kt59ea5z31+PnSbR5vxCVEu/m1ckhrFgIqq6Xaq9W0cbVYH/w888FBIXV9P9zr3Do8+Whn870xTUWnj9Ha+bPDT/t037/37n9x+6Eywqf0mXx7855FVDnto4rS6lDKubJ4O/bKXp0Wnz/qszwipp+JItZTSxCdfWTvOz6Nrm+fomrx9vOD5RpdSdrdTj/nz3/2PQmp+nNfd+VEp9eJ7Yr7K8+9J1+TRs2mi94M/+96QOhwtXhqMScSPLdlc/Ngw9eaOH/ujv/C2vU9+5GNed2Xbw+PHSinT+AyoiB9bRvzYkPixoauPH/vUJ65MUn7ojtPlSPFj+82bvpTy2eevXLr9EWXix5YQPzYgfmzoGYgfu2wYRSZ+bEj82JD4saGnPX5sv7NbVwbJn3bpSgtwOa7sHU+9WQdCyMSPDYkfGxI/NrRi/Fgz6MqvJnKslPKGS1eqxj+9c/nzSvFjQ+LHhsSPXfYlv/rje//+qvikZi9+bKkcP/aGrSu18u8um0SIHxsSPzZ0S8SPfeG+xvybXvbKct3ix75i35LR39tYXnnFjw2JHxu6yePH/tqv/NjeJ//4w58SmhLix0opa3lFa3DB//L779/79zd/8IeGbYv4sWXEjw3dnPFjz/nrH7/371/98n8//MIf+4MvDHu++vixn/y0P73370/4we+6/A/xY0Pix4ZurfixPd/wjf80pK4eP/Z/XLgyufi6008ZVIgfGxI/NnQLxY9VagsAAAAAAAAAAAAAAAAAAAAAAADwbOIFZAAAAAAAAAAAAAAAAAAAAAAAAHCMeAEZAAAAAAAAAAAAAAAAAAAAAAAAHCNeQAYAAAAAAAAAAAAAAAAAAAAAAADHiBeQAQAAAAAAAAAAAAAAAAAAAAAAwDHiBWQAAAAAAAAAAAAAAAAAAAAAAABwjHgBGQAAAAAAAAAAAAAAAAAAAAAAABwj4670Bz5qRumtZP3Brx9IbVbP02HaNmVsNBqH1G4xD6nT3Wnl2PG0urhpv1gcec+llPk85bxp0vYxsWxvb+dDjyeTkDpZW0sbj9Kxpzu7IXU2m8V8laZJl3x3lu7m4uqK6Gy+fCejdhS2ek2Xdv5oLKLjRapa/bRSRE+0sSRsbaWN482q1PlSSsz5LG6+GLQ/T0md7+QjT9ZSEW034wWfp1I02lgPqTvbldsxju92bEapFC2mqfz343RSpZbzJp71Itbp3dgWlVLWTm6mncdy8n+/+e+E1N/81beF1K//J9+YMzbNTUqTbtYivqXzD5w8kQ89Wku3YxQz1rbpirVNLEUXL+SM3Rbv5lpsJ5t56tTaLnZ5pYziBW8vpMrVx/bkuU2lsZpO41mfOhlSKz1H7G4Xs0rd6eK4ay0efLGbKnUen5RSpjFvTSwJ0y424JPKNTt925mQ+lmf+mmllHeXf773yRd8wRfs/fsrvvlbh5vMP3AV+9jQ9bWb2ZVYhqdpAPPY2VjGagOQjZ1U/tdnKWN3TVIpmo1T6sN95X3EDzxxNqReilUvV9sSm7JSyrxPZz2KU4MuDnTbPPgpJbbBZTtesz/8KZ8SUj/+9/6+kPq3/ubfSLsu5Qv/wl8Iqf/6W74tpMbRYpnEUlRKaS6l8t/HNiG3k03etpT3vuc9IfU5cbb13BNpfHIij6zGtRYjDu8vxCnP+2YptZukIUQppY+NVZs3j6c1ixPnUspsPdXcfpH2PlpPve3oRNrzNE4cSil9bhNiOdmap1HZhZ3KrOTh3ftD6vvOPRZSf/QX/2tIvRTncSfXN3LGrmIs8IHvdcu/edg1vXChMtocxa5nPE73ehZv9f0PPJAPff78qZD63vveG1Kf/5IXhdT19XMhtY2zvFLK7/zOu9Pm8ZqcOpFOqsQVklLK+XNHz/nzX/D8kPpJn/RH86G/63vfmpLjSOA9v52u2OREak92L1bWu9q4orWeG6tJqnrb5x7Ph97djdPA2EY//PjD4cMmjsratrKY8DM/+9Mh9dSpVAjvuuPukPqiF78gH7qLi2m5hPdx21kcQpdS8iRykVd0ozaOIpra7ei6uAYeF2yncVlpfKKyjrE4pEe4bPPUbSH1XBz87NQG/yfO3B5SxyfSFPKB30198Xvi8GYrrnKUUhaxlV0fp/ZkcyNdsRe95KX50O/+nXeF1PkiDVHaOAJfm8RFwFLmcXSUa0d+QpQX9mdd5blA7rbG62nwP1/ESfdmpXacvXAxpPajOAKP5WS+uBRSR5NKizEvqST0ccq/iEsoJTYIpZTaCP0DR1m2+rQWzyvnq9SeFZ6Md3MjPlOYxFleH6tGKeWRx9Lgf3MjlYS1tXTo59xRmSR+w9d8ekidxgdMF7ZS3flbf/c78qEfPRvbhPhMbbZIfce9994bUh9/9ImcsQtbsdq+9/0h9e9/3u8Pqf/xR34hH/qxx9Ohf/a//er+//ywr13ynb/xFW9Zuu2HPTdl+5u+8z/ljP2Vz/+0kPrKl78ipG5dSo3VyZNpCF1qDfhoEhcE4mPfw+azVw6dH6bkh7NNbKzyQnRfydh0OzXgzV0pY5N4xfq8CFjKy1/xspC6WKS2bm2cmqNZfApTSmnHqRG+uJWuydve9hvDD9+3799f/MVffNi2//Drvj5nrCnxWUlc5ajc61pkQp4QtW1qYx+L/U4OI6nGY6zHHnMeFyeb+FygiQ8KS61e5/Pq4zOFLlb5UsvbE2dT1Tu/kxr/3ff8TEj95E94cc5Y38fmaBpXfpo0AhmPDpaEbi5+TPzYcs+a+LH9n+T4sa62YiB+bAnxY8Odix8b7vyq48d+sHzh3r//yTd+XbkO8WNP+UT82ID4sSHxY0u2vf7xY5cNo8jEjw2JHxsSPzZ0Q+LHnvxc/NiA+LElqeLHBq5r/Fhei6u0CB9wWCCZ+LEh8WNLiB8bZuza48f25Pixpx5myVHEjw2JHxu6ReLHrsRc7Tz/NeU6x49dNjrkiYz4sSHxY0O3UvzYgU9yKxoXncSPDYkfG3pWxo990r5/v/U7loyW/8sPpb7j6uPHXvVpSz4XPzYkfmzo1oof2xOCx8rTHT924D/Fjy05tPixgVsofuwqVwUBAAAAAAAAAAAAAAAAAAAAAACAZwMvIAMAAAAAAAAAAAAAAAAAAAAAAIBjxAvIAAAAAAAAAAAAAAAAAAAAAAAA4BjxAjIAAAAAAAAAAAAAAAAAAAAAAAA4RryADAAAAAAAAAAAAAAAAAAAAAAAAI4RLyADAAAAAAAAAAAAAAAAAAAAAACAY8QLyAAAAAAAAAAAAAAAAAAAAAAAAOAYGTeDj/pFFzZoR6OQ2vXpYO3wYAc2b9I32j7tfTROL1Prm5TatJOcse3daUjdiNdkPk3bbm5u5kPv7OyE1PX19ZDaNiljmycqh+5m85DaLBZx41SKpvNZSF1b24j5yvsu7Tgl72yl67lnPl1+7l0+ryfOh9QXzOOt7FLh39xcC6mllD7WjoujVP4f2t0NqTu1atuWVMz6NlbMPl3P8XqlJJzfTZd0Usbx0PHEtrdD4jQ2kqWUtk3XpM0lOOoWsZEtleqRb2bldqxV2sl+ntqEre1UzN7wJV8WUpvd1Bb1uS0qZRp7lsrNjKm3nTyVD/1JH/0RIfW+X/uNkDqLfccs5uziIrWxpZTFqTMhdTdelOksZWxnWjt0LEi7sbcto3QrJ5NKEd1pU72+mEcwMXU6jwUltsCllPFGyvnOTrqk+Xa041q1jbW+TOOAMNasWazypZQ+3s1/861vKaV83D85+MmT2y7L196HTRzy5e6y1IbB83jFmtiVl0mlQ81j7CZe8CZ2amtxQPiy2jV5aaxcs9gI50vyeJ+a91LKo7NU/h8Y5xFIvGLztG0ppWti7YgX7T/90A+l1B9MqWuTypDv27/t20NqvuCjOBBY5I1LeeF4mLcr7WoeovSj5amXq+QiFu9SyiJWzPXYsyy6VER34hhjHMexpZQ2dse3r6eM3TWKTXRtxNfHge7ZOCB81yx1iE2tEC7iEKVpU8a6PqXO52nP05haSjl1+nTKWDyvL/viLw6pb/mX35oP/Wmf/Ckh9d9+93eG1J1Ll0LqqZMnQ+pLRrWJc382f2FPf0iZm88Pqbx54FTKWiwJs9hiNH2qel1XqZg7062Qmgc/7/rt3wypz3/+80LquXNpNaCUsrubql4fJ96z3dQh5iFEKWW9ssaSbsdjjz4RUt/61rfmQzddyvk4tpOn4zJI26Zb2fUXcsbyhGlyMW1+fu3etOeu0lh1sTWrdInzZcmLJz9c24xrILWOvou14/yF1FjtbKeTevzxVIouHzwlxko/ji1h39eWC2KnduLEiZBaGZ/HaeD58xdzxjbjakMX28l2HPviC2fzoWdxetuuPRZS+yZV22a9shC9dSmt8k0X96eNc8e0lm7W7qIyK8lLiPM42pzFnZ8/ezYf+tSpVAjHa6n9n07TrPzul6ZyUkp58LfjJY3lJM/K86rpvFZtR0tmJVesT9LOd/OK1lal7zgRp8bTadr85Hq6lW1J5WStqQz5drdSE70VFwTaJg2hd+NDnFLK6dROXhkaNcsGG3nls7KeVcqdd9wWUne20oDw8YceCan33ps6+lIbdz3vOc8JqU1JJTy3J33tmcLWhXjWZ1N3/Jx70kD3q//Wn8yHzu3kzjzdzzf8//5lSH3ikYdD6qI2SWxi+V+LC6c/+h/SQPe//nzKWCnl0//IS0Lqz9fWbEspn/4nX7f08/t/9h1hq/PnK7OSn/6Jnwqpr3zlK0Pqi1/84pA6n1f603EcouzGx5T3vec9IfWnfzydVCllFivXxbiO3cThzSJOppraY5q8KDtq46HjVKutBWTkoWx+aJB3nuf7pZTmkEXCD+w9pZ5d9hT+I//KlX+/5S1vGX7hshzzUGqrwW28120e/NSeEC3iFW/jjCg/F1vLU4NYNUopO7NUO8axKcsBFaNaf5otYuVq44pu01SK6KWLqSG979FzIfX2OD65777UF//mux7KGdtcP/oT0gvn4kB3cDeaQTUXPzYkfmzoFoofa/fNK3P8WF/tPsSPDYgfGxI/NnT18WN/+M8e/Pxpjx/b/4n4sSHxY0uIHxvu/PrHj102jCITP7YkVfzYgPixoesQP3bFA4c8n7o8dDksfqyU0ve9+LElxI8NiB8bWjl+LJWzwyLHDh7ikDGS+LEh8WND4seWOEL82Afk+LFSrhx3tGzALH5sSPzYkp3favFjswvnSrm+8WOXHRb1IX5sSPzY0C0UPzZ/6icxfqzsxMFPXvmsEj82JH5s6KaNH9szWpaHwyLHLjta/Nje5+LHhsSPDd1a8WN73v6ONKN/euPHuqcWePFjy3Yufmyw7a0TP1YpsgAAAAAAAAAAAAAAAAAAAAAAAMCziReQAQAAAAAAAAAAAAAAAAAAAAAAwDHiBWQAAAAAAAAAAAAAAAAAAAAAAABwjHgBGQAAAAAAAAAAAAAAAAAAAAAAABwjXkAGAAAAAAAAAAAAAAAAAAAAAAAAx4gXkAEAAAAAAAAAAAAAAAAAAAAAAMAxMp7N+gMfra2NwgZ96UJq26Zty8FDDaR9l75tjrzvvknbzubzuHU5efJUSJ3PpiF1fWMjpC7mi3zoUZNeEre7s5O2Ha30grl8Ny9euhRS1yfrIXV3mi74vHY7+vjivL5PxajvKxf8sp3p9tLPd3fSve4X6dCT0SSlTuJJLSrZnozTBX/OJN3KU7uzkNqOY6UupR2PQ+q57VREH1pL12SnVju62CbMu9QqjCYp210fb0dXKaJ5533MWB8bsxe+5EX50J/0SZ8cUt/yr94SUu+6866Q+uhjj+ZDzxcp54tFKmbTrVTMXhZbsrfHeldKmcZWtIt3c9Kmbc+fPZcP/aP/+UdC6smYsY1Jqh3zLtWOjdjllVLmF1PF3Ih9x4O7y5vHyy50lUNfupjKyaxPqW08r6Z61rH9b2LPkvfdjFIB7map8JdSXvCcu0PqV3zp60Pq3/u6vxdSP+YjPy4f+iNe87qQ+rVf8+aQ2scCvBYHP6WUzdivjQct4dq+TxbLGv+9D9vYdeQBYamNndo43GzjtpsbqacupUzjoK7E4U03T8VsNzZ03azSqeXzmsdB3SiOIu6KdaeUcvtaul+vWaGd3KpVzPc1qSt/OO583qTUNvYsO9PdnLH1NmUsz4hyO/mh65v50A/tPBFSL45y5TostSmlzGq3o4956+dx8B9Hm7NYd8bjSovRxLs5jw1dnvKsjdfyofNM7e7YRN+7kea2fW3wP21TKT3Xpgv+SLwmv1sZ/Ffmtufj/HQR1xre/LV/Px241lj9y3/17Sl5ke517pieu3YipE5mlelS7Dqe4rBMjA6p2tParLqJRbSJA/hqZ51tbKQW47bbT4fUS5cuhNQXvioNb7Z/4/GcsRc8/xUh9exjZ0PqTmwnR02qd6WURZcueNPEoWxsrB5/7OF86PV4Oy5eTPOp06fTzcp2Udz7AAAgAElEQVTFZFyrtvm8Jptp2PbhLzgZUn/8XWnVqJTSxzZhEtv/+e6Shq7/wP0dt6mITueVjFWa2SYOMmIZm8/SFLKUMonLSnkZ7+SplO2zT6RKXUpZi4ee726F1LwUsYhN9Cget5Sys5Vyvhm78tl2HN5MKmOMJp7XKM7Z81C26SsVcxZnFl2sHeM4SN6I/WmpTF7Ldl7Hi1VneyuVovPnz+ZD33XvnSH17PsfC6lNXDV95WtfnA89aR8JqQ/dl7bdievn+WnIqNaA93EAf/FCXLqPBTg/hSmlTOM0sImTsXNbZ0NqGw/dxp66lDKPLfydd90RUp/Ij66mlb5jUVuVvWzpEOs5994bNhltxmpbyjiONu+66/aQes9daSFuLU4hx7Xp0s5OasDbQ8fdpZSyvRvXhWpXe3MzjbvuvSet/I8nKWPTuLBfSlnEWfnOxbMh9U1v+PSQ2sXnjF2pDIO/+qt/MKTubqe+44d+/L6QurlR6U/f8r2/HFI//o98VN68lPLwg+9d+vn0Umqf77r31Xm3bewx8zrGxYvnQ+qJE2mQXErp4wB+fS3d65e/9GUh9RUvf3k+9NZO6o6bJt3NX/7vvxZSf/7nfz6kVh921wbgqWeZ5/Xe2pw9P2p57WtfG1JzZ33+QmUE/s53viuk9nFZ9cKFVAhLKR/z0R9zWNIP/NAP522zvMCSY1TylLyUMllLhXCxSN3xJK6Q5wCYcWU5t0xGcdoSS1FeA1/EeXEpZZxnanHrRXxa3eS5bSntKDVHD2+nu/nwxbR+fuZM2vN73195Cn/mRLrg6zEU5J44sHp8enDP4seK+LFDPGvix/Z/kuPHDgsb2yN+bNkXxI9d287Fjw0dFj823ZqX1ePHBmV4f0SZ+LElm4sfW7LztGfxY0NPe/zYk7stfRE/toz4sSUZEz82cEPixz7weTh0I35sSPzYMuLHDloxfixf0MMixw44bOgnfmxI/NiQ+LGh8bXHj13ZNsaPlXIlY/3yIiF+7CDxY0O3XPzY5TXk6xo/9uSBDrky4seGxI8N3ULxYwc+yfFjeWSV48fWxY8NiR8bpt6a8WN/8+uu/Ptj/+Arh184LHLssqPFj22eeLKyix8bEj82dIvGj4XgsfJ0x48duDnix4bEjw3dQvFjKwUYAQAAAAAAAAAAAAAAAAAAAAAAALcWLyADAAAAAAAAAAAAAAAAAAAAAACAY8QLyAAAAAAAAAAAAAAAAAAAAAAAAOAY8QIyAAAAAAAAAAAAAAAAAAAAAAAAOEa8gAwAAAAAAAAAAAAAAAAAAAAAAACOES8gAwAAAAAAAAAAAAAAAAAAAAAAgGPEC8gAAAAAAAAAAAAAAAAAAAAAAADgGBmPJ83BzwYf7Nf26Z1lbdy4L4tKdpq1lNjPU2qTDj2fzdJx+5irUvp5zHmftu/jpot5OqlSymQyCandtEupMWOjeMVKKVu72yH19ttOp223t0Jq36Wz7mrlpMnFLN7Ni5fO551fNjukwCzyJc2VJ7p0KV2xzbVR3nzRpZKwO0sZO3HyVNp2J2WslLIeC9I966lSP3ccz2tUqZnNKO18d5GK2YXd1Ca8c5ROatyOc8Zm02lIbePmi1g73vf+9+ZDf8u3fEs8dGrAH3visZDatJVCONvZCamjkjZ/1bAn2mfRpGzn1FLKVrwdXdy8j1W+qfUdXWzhu7VUgPtUp8t4lLqGxaLSisbrXfpYd14QX136vFjGSild7HFzEd2OF/y9tb7j0Xk67aaNXfk8ZnuUst3F61lKuf/+h0Lq//mG14fU2TSd9Q+999/nQ//wW78/pLZ9qrZNPOt5V6keLz59e0h98NGDzVG770TnZckl3ftwFi/4eJLqXSllNE91b2eWGrp5bMDXcsWrjTabeEnzeLKNDfj65kbO2GKaeswzZ06G1NksndQst3S1NqEy+NlNjf9kVOnUXhGz9sI8IYrDmy62VQ+WyjV5Ip51bgefF6ttXzv0buxPd3OtP7SN7UspXa3FGMWBWWy/y3yRzuvMxno6bm1sP27TF2bTlLMTm+nQi9oYYx4r12ic7vUsjhPm8UaXUro4+D/RpBbjRXHPL4pDo1wCSyltXEx43zhl+/6tNOVZNJXaMRmnQ48nqU3o5+m8Tk53Q2pXG/LVZvxXPHUwU1u3KWVUe5f9Iq+DxDH2IrYJXe3Q586dC6nzLl3wnTijOX3b80Pqqz7seTlj7/rlh0PqxScuhNTReuqsp10qJ6W2rDSpDGXTrRzXVtPaPl3w9ZixEru8PKhrahnLyS960UtCap5tzeeV21HiiHE2S6n9sozvfTitLERU8pUnv30Xhzdx29On0qJTKWU9Lhw1o7SE8pIPSbXjvnekSl1KOTm+K6RuXUp3M4+d4gCk9LUxRhsHq/NF6m03N9MV63P7XMqJ2AjnEr45iZPEeWqfS61yjeLqzfTeV6Rdx3lH7Kif3D6kdZWSkFLPXUyNfynlgz/kg0Lq/Q+8P6TO4yTx5Im0sF9K+ZAPS1+4/3d+JaRunkwD3SceOxtSNzbTBLOU0sSBWRsLcK62fZ6q1eantQcxadumSaUwdw2llHEciz5+Ng6N7kwPgCZxIlZKqS3KfmA/a0va6lw7JvGalFIm8XFJ7llKk+71O96Rlule8KLnxHyVMydPhNS1tXTJTmykHrOpztnzslLuerrUd8x3KsObnd30hVyGJxupK19b20zHjQtWpZQvef0fDakXLqTy/9jFdCv/3ff+cD50N0ln/apX35M3L6XMd5f3Eetx4pyHmqWUk6dT874Wd76+nm5HVX6Ysn3hYto2Tm7zOLaUUuKUZzxOletjPupDQurHfcyHhdTcvJfawunP/dzPhdS3ve1tIXUa91xKWcTR6m/++m+G1NzlLWrrvbNZnpWninnP3ZW6Ex61t3ERr5SSl1j6WIoqsTXVKJQ8ihinJnoUR+BdnDiMYhtbSpnnznoS+444sprER5yllJ3Y9WzEQ8/msXeolNAyiq3VmTOpFb3zzJmQOttJg/+21pRd2k4t/PkLKfUP/p7XhNTv/6m3H/hE/Fgp4seWe9bEj+3/JMeP5QiBIn5sGfFjQ+LHho4WP3b586c9fmz/J+LHlhxa/NiA+LGhZzh+7MksLUoRP7aM+LEh8WND1zd+7JDm/cm4stTG9uLHhsSPDYkfG1oxfmxZG1uPHDvgsEAy8WND4seGxI8NHSF+bE+OH9tv6QhL/NiQ+LElh77V4sc2NxalXN/4scsOW80WPzYkfmzoFoofmzx1uT4vyi4NG9uTa0crfmxA/NiS496y8WN7lgaSve/tD4RNjhg/9oHPxY8NiR8bukXjx/Jz9qc3fmwQTiZ+bLit+LGDbqH4sav7EwEAAAAAAAAAAAAAAAAAAAAAAADgWcELyAAAAAAAAAAAAAAAAAAAAAAAAOAY8QIyAAAAAAAAAAAAAAAAAAAAAAAAOEa8gAwAAAAAAAAAAAAAAAAAAAAAAACOES8gAwAAAAAAAAAAAAAAAAAAAAAAgGPEC8gAAAAAAAAAAAAAAAAAAAAAAADgGPECMgAAAAAAAAAAAAAAAAAAAAAAADhGxk0ZHfio79IGTduE1L5LqV3edSll1IfE8WiSDh3fpdaMUvJocBEO7ryknI8nKWOL+W7adpy2LaXMZtOUsT5dsbaPt2OxyIfeWN8IqZd2U8aalK+yNhkfedtSStel29HEa9LEIrrvEPOln7dNLv/Lt3ry0KN01u04FcLJ2lpILaUs5unQk3jo+fZOSB3FUy6lLOapIC3iNZnFUjRaS9kupcx3085zMVvr07YfMVlPB+4qr25cTNL92pnOQur7JqnendtJ7UkppazlWh+vWJOyPZ9VDj2dprv5srjtqKSWcHdnO6Ruz9L1LKUsYhlu23Q357GdHMWepZSy3qS7WWLP0sWmbL1NLUYXG4RSyiie9e5uvtdp27av9CxNbMBzxk/EHvNVpdJYvTpWrmmsHWU9nfWiSanvqLTfZSde0uki3Y42Do0WtduRW/h8QUdNKoSvKLWSkHc+GG0+5ZM4nByPY5dXuyZtrFx55xux8R/X+tNTZ06H1K3zl0Jqu5lKwnSeOvo+9uOleknnsSkrqSlbLCpTg742LQmJkziy6mqjzRKnPE3MV5vPK05anlcbqN6bv5ArdZfudVN7M3W7ZGS1b4eVEn5YalOu4nZ08zhJXEvlfxxvRy5ifa3FKCWONtfSeDJPxfJ8p5TKlKlbxKoXTzsPEkqt78iXrI1zseluaqwmsd8ppZQ473j+bjrr58fGqoutTSmltKkk5JFVP0vXZC2ONue1BjwvgzwlG4dcnv6QJYW8EFFKaWNb143S7WjzvmvtZF536mObcHLzREotd4fU5z3vgyoZO/vbIXX9lenQjz9+PqT+/k/4hHzo7//+7w+pn/XpnxlS//N//s8h9c/8qT+VD/1d3/XdIfXcxQshNQ9RRpPUJuxspylkKSUPKGdbqdpu3B6XC/K0opT5dhrUTWqVK8h9R7VjGY/SUDY3hHnifP7CuXzoyfbRfx7jQ069JqQ+70WbefP3v/PxkHr+XOqYcimKY+T674F0eSwai0lcDK6rrsoGXVxqa2pjjEW8ajljH/2RKfkd70+VuptuxXyVJvY9k/zAIrYJ43FsT0o5+3iqPpM4Fj1zx+0h9Y7uVfnQbXxkcfuZ94fUrYupoTu5mWa+n/M5nxPzVb7ne74npH7e535uSP32b//XeedZXgaZx9lWG0ebo7gQ0Y4qw+Cc3sfRexwjlzaO2UopW1uV6nPZ0h5qPI4L0YvKeu/mZqo+41htF3HnX/f1PxlS81PIUrvgi7gGXuZpdX0Sr1gpZRoXycexVs9jA97XVvlu20yHnscnpB/9MR8WUu9+bsr2B78uDQNKKZtn0uYbJ1IpOrM4G1I/7/N+Xz709k6qPu957+/u/8+XLvvOiY3lE4RLcdx1+uTJnLF5pW4lFy6k0fv6eqWIjmJfvr6WJkTZOK4BllLmcZJYGejGJxaLuEQ4n1dmJfnB7us+5NUh9cM//END6mRcGQbnev3u+34npP7Yj/1YSL148WI+9CR2Luu3pzL8SZ/0R4Yfvr/8u71/P/zww4dtW13HyKEguSGcx4FuW1tWaivBHil1Gp8a54X96vLjKA4yFrNUgHPYQ2XZv3boyoJYvNWLWnhMvixbW2mgux3byTZGa8zi9SylzPJichyjnPuV94bU1732FQc++ZnffM+BT8SPLdm5+LGBWyh+bP8nOX5s0VUGT+LHlh1a/NhB4seGjhY/NipNWT1+bHT5mlxpB/ZHlIkfGxI/toT4sSXbPqPxY0/5XPzYgPixIfFjSxKf/vixfQ5rwZ/MUshYI35sSPzYkPixoRXjx/pYsw6LHBt8bflOxI8tyZj4sQHxY0tct/ixp+Rh2fhN/NiQ+LFrdRPGj33IC/pynePHLpscUoPEjw2JH1uy51snfmz01Mlwjh/LHZP4sSXEjw08S+PH/tnev5547NFh8mGRY5cdLX5s73PxY0Pix4ZurfixPd/0zd8aUp/e+LH+qTVR/NiQ+LGhWyh+7OhTdAAAAAAAAAAAAAAAAAAAAAAAAOCW4wVkAAAAAAAAAAAAAAAAAAAAAAAAcIx4ARkAAAAAAAAAAAAAAAAAAAAAAAAcI15ABgAAAAAAAAAAAAAAAAAAAAAAAMeIF5ABAAAAAAAAAAAAAAAAAAAAAADAMeIFZAAAAAAAAAAAAAAAAAAAAAAAAHCMjJumOfBRV/oj765vunSw0VrevOsWKTVmbL47DalNn7bd2NzMGdvZ2g6pu7NZSF2fpLNumlE+9GiUct7EC96O085n8YqVUvpFuh3juPOuS9neupSuZ9uOc8aaUXpx3nwn7bzv00ntmYw3ln6+O5+nrdYO1qb92pjt2VbK2HSajltKaZu0+e5uKie5EC6mu/nQa5NJSB2N0jUZxVI0X1TaonGTiso81vqmTbcjF5NZn6p8KaWk612akq7Ji2fpgnfxepZSTsRLen6WCtIiXrGLMWOllD424CdOnAip8YKVEm9HP156K69sM+zm9pvHhi7rqtvGYpYL+LSPrU2XCv+i9nLR3PFMJuspucsdfWoQSinzedp8Ld+sWHdyh1hK6eMoYlS5KvGsY7ZfWS9iaeeLPraTfdr2sbYyxtiKLcpurHuvbHNzVOvK52nni8XB89r/Sd8vOXTfPflhvBuxDF0WM5bP61encSw6OKkDJrFTe/TShZC6MU7bzmLz3sfWppTSxVrfNrHFyeUkZqyUMl+kvI1GcQATdz6K7XOp9Dyli+l3xYL22jgg7GrVtm/T7ZjHjr6Js5K+qwxvpnHKk8tJiWdduxuljQ14E4vZbBaHwblTyw1KKX2lT4yddZ5MxatdShmvpwns9oVLIXU0SRmb1gb/i3g72liGp3EyVWJ7cmG2E/NVJrHWb8Yhytpaqh3zeeV2dNOUt3ls/9fiWkSeOFS64lL62nzqyjcP2ddhk6au3qHmqhc7pjioa2qv0Y9dR9mdxnn3TrrXP/+zvx1SP/MzXxvzVZ7znK2Q+tM/9jMhdTuu3vyB3/8J+dB9HN7MYsXc2krZ/tZv/bZ86M/4jM8IqaO1VDG/53u+J6RevJiGRq/+oFfmjL3mVR8UUn/x538+pPZtmtu2cXxeSmlqrVna9kqb0C/7MOmr9TaOQbo4YsyT7kVcKyilxIXPMolN9No4pb7kha/Jh37/O/97SL377jtD6iOPPBJSX/va1Cb81jveHvNVPvRDPyyk/trbfiWkXlWBOFwbm9lFHAa3eRq4bB6331233R5SX/DC54fUUZNKws7WxZDazGor5DHjlelSnLNMtyuH3rqUWow87rp0Pp31z/3cL+ZDf/KnfmpI/bRP/8yQ+qM//B9C6uOLsyF1HCt1KaWNk4e86PTyl780pH7sx318PvR3fdd3hdRcvv/gH/zDIfXHf+In0p77yuBnc/NkSL1wMZWEyqPAygpJmU5ri+SllFJmsyX7mcUpz+0n00mVUi6eO5+SY6e2FkvRaJQy9h++/c+nXZfyxz4/lZP//K1/MW37uV8VUu+662X50A8+lJqUyXoadzXzVBK62gO7x9OAsazFpeb/9kvvCan5GeU73lGZ73zMx98dUl/9wc8LqbffdkdIvVSbOE/WUjG77Y7TefNSSrNYfkPX8nOW6ipfiY+zN9L8dOPE8seml43j4mSpNeD9CkOY/CiwlDKLrVlX0kWb7abUPAzIg+RSWQUpJXb0eXFyGpepS62ovPiFLwipf/7zPi+kzuLiZCllHmcHGxupIL373e/NO3/7b/7GYUnVeVN8zF4pwPletrWSUHtglxrwO+++K6T2sXYs6o840+1o4wPrfOi++lg45q1y6Ljo1Cx/pnxFF9eVNuM6Xh8XnXbi+mEOvCm1EJedOAx+5GzqqkeL+w580gyKtPixIfFjQ7dQ/Nh833JorlyHhY3tET82JH5sCfFjw4wdKX6su9xDHSV+7IrhJds/bhc/tmTn4seWED920DMcP7b/c/FjQ+LHhsSPDV3f+LFDLviT5Uf82ID4sSXEjw1c3/ixuH2eLu05PCBF/NhB4seGxI9dq6sMFataHksmfmxA/NjQLRc/dvnz6xo/dtlhkybxY0Pix4Zuofix7qmf5PixRZwu5fixk+LHBsSPDd268WN7lgaSnT37cNjkaPFje5+LHxsSPzZ0i8aPheCx8nTHj40OjJnFj13jocWPDd1U8WNX1YcBAAAAAAAAAAAAAAAAAAAAAAAAzw5eQAYAAAAAAAAAAAAAAAAAAAAAAADHiBeQAQAAAAAAAAAAAAAAAAAAAAAAwDHiBWQAAAAAAAAAAAAAAAAAAAAAAABwjHgBGQAAAAAAAAAAAAAAAAAAAAAAABwjXkAGAAAAAAAAAAAAAAAAAAAAAAAAx4gXkAEAAAAAAAAAAAAAAAAAAAAAAMAxMm6b5sBHbTn4yX7zxSKkjtqV3mg2Go1Cat+nQ/dNF1IX87TtYjbLGRuvjUPqpFnLmydtn9MX8YL3XTrrfpZ2vujSnksp48kkJceMzxYpY+O1tOfZrJKxXERzGez7ygW/bHt3Z/nOR6kklDbWnXzJJinfo7VUNUopbbreZWNtPSXHa9JuxGJQStunnC8W83TkWIDX8tUupZmkC759YSukbpzaTBlLOy5NidezlJ3pdtq8TXdzEW/HoMEebB5bjEnc+bibpm3XKyVhd5F2Pom1Y/vS8hr3ZMbGqSQsFpUGPNvY2Aip3U7K2ChX6lLaUWyPpql2rE9SOTl5ImV792LMVildLCdN7G1HTe7oK8OAUSzD03m6m+P11Nsu5pVDz0rsMWPtGMVbOY2jiL6p9TuxAc91ZxK3fV7edSldvF+TjdhOxirf52a0lCYXwsEF3//JeNm+xx/oRndizWrHlf50FMeTkzg0uhQHPzvzlLFSytbupZC6uXkipJ6N93oz3ujFIjX+pZTZNN3rzUlqovOYbdFXimgedy1ypxhTuzgCKZVxbvmUz/rskPqTb/13IfVdXSoJlyr5qlzSLpb/e2IhfPHJk5VjL5mp1bL7Ae0hA/TDPj+gNoBP1+RXZrshdRrHGLWCUNpxahMWXexZdlPVG8XGv5TSb6fN+zwCieW/mVTmtt00Dr3iWe/G1Da2wO2oMha94+470qEffjSkfmyeqNVmJV28XV0cWZ05dSqk5gnR1qzSgDdN7vWu3Mr+kAa575e3G9VhcJbrfj+PY4xawzMep8laHgaPYt+xvZvak0uX0hywlPK+R9LdPH0mFeDRpTRI+PZv//Z86M/73D8XUr/zO78zpH72Z/6JkPrd3/3d+dBnz54Nqc993vNCau6sP/VTPzWkrsXxSSnl9pOnQ+qli2lCNbrt7pA6n57Ph86dSxMLYb9s270Pc+2oroZVDt2nS9rFeVzJq4ul9LEZnTRp8/njd4XUu59/bz70y1+epvy/+bbfCKknTqTx+atf/ZqQ+q63vzNn7KUveklI/bVf/u8hdW0jNYOf8kmfnA/9Pd/3vXHnaZL4xz/5j4fUH/qPP5QP/Yf+0B8Kqd/3fd8XUj/jdZ8dUtff9dshdetiWj8stUcSTVwXzTUrr3eVUnbiqlRT4sLR6TS8v+fe1AKXUh58MI2dJiduC6kPPfRISM1Tsd2tSn/6aZ/yaSE1X/APfvUHh9S8plpK+cxPT33i+fOp/b/33tQcfdbnfHZI/Xff9/0xX2XrQuq2duIAZnw6jSeb6opWdan6smWzm0le5as9ITpxMjVHOV+j+CCmz0sos1QrSyknm1T+mz6V8H/5j/5SSJ2Pn58P/X9+5TeE1C/94j+dtv3b3xFSx01l3nHmVCoq56fpkn7MB6dV7nf+TlwrrizylRc8/8Uh9e+88d+G1EtbF0LqxqjyhOglL35BSP2EP/HSvHkp5fH73rX089s3Ut8xqvUs+SFmG9fuH3v08ZD6oz/6o/nI2/Gp2da52P7HZ2rzuExdSulKalJmcSi7mMe14vjsdbZb6dTySGA8zmOMdE1mO5WF6CaWlL/6Rak5WpukajsutWfKOWt54WiFKJRqBEseCeT56dKZ2p7qI4lFXGLNz0Aff/yxkDqNoSDra5U1wCY+Dezj05AuzkD72u0Y5ecCfe4d4lP4WlDQ5mYaY9xxKg2D81j0wsU0XGyqcTsn4zA63o7duO+tnYMdfTtoYcSPDYkfW7b3lHhTxY/t/ySvmG1PK+N/8WNLviB+bED82JLNjxQ/Nt/eLU9D/Fg6tPixIfFjQ+LHhp7h+LH9n4sfGxI/toT4sYHrED+2T9x5WN65mpUf8WND4seGxI8N5fXkw2LDriZ1z9ECycSPDYkfGxI/tmzLlWrHlW8u61jFjw2JH1u281ssfuw59zyvXOf4scsOm/eLHxsSPzZ0C8WPNWV+4BspZ3lFS/zYgPixoWdl/Nj/8Beu/PvU5pKK8O5DIscuO1r82JXPxY8NiB8bEj82dGB+euA/xY8NiR8bupXix3JWAAAAAAAAAAAAAAAAAAAAAAAAgGcTLyADAAAAAAAAAAAAAAAAAAAAAACAY8QLyAAAAAAAAAAAAAAAAAAAAAAAAOAY8QIyAAAAAAAAAAAAAAAAAAAAAAAAOEa8gAwAAAAAAAAAAAAAAAAAAAAAAACOES8gAwAAAAAAAAAAAAAAAAAAAAAAgGPEC8gAAAAAAAAAAAAAAAAAAAAAAADgGBl33XzwYRM2GLUptWlSatd1OTdtm16I1sZD933a89raWkidz2YxX6UZjUJq109D6nQ2vMJXtH3acyllspYPnU57fTIOqX2frmcpZTrdzV8I2ng7mpg6itkupUx30yUdxZvVNFf10r1Rs3wnTawdZZ4K0rSk03573HO/k8pYKWUeL+l4kjbP1bKtpJd+vgip+V6PJ5OQuphv50O3qSCUycm089nuVtpzm7btSzxwqZx226dLGtu58pxYxkopzxul7U+ePBVSp/NUTnZ2dvKhl/UmV/TzlPrc590bUu9/4MF04FjGSsl9WukWqQAvYrfV57tVys4sXdJHunTo7e10r28/dSKkXmgrLcZOLEi52uaGrhzSeF7ZOo8E8hgj3qzdeLVLKe04dS7zadp8c3MzpM4mqWfppinbpZQ2jp0+ok87b2J329VqRx479fN4XrF3yA1CKWUcb8fuYOy0/5Nm2QXfK7dNLMHdvNKp5Talidf0uXHb3600GOWb/9W3htT/7c/8+ZD6L77jLSH1n3/DPw2pP/cD/zFn7MTJ1ODMp7FNiA3daJLG56WU3XnqevrYvq+PU1f+dd/xbfnQf+HPpQv+1u/4zpB650Y6rydiU1Zqw+BRLIR3bmyE1DtiC71YVMYYo1h9mtj+94cMfi5/Xqscla5+Ftv/l2+uh9S3xz3/0+/9NzG9fNGfTOXkG7/t/wup//G//EhI/b5v+D9uggcAACAASURBVKZ86PHpdK+bRZwQzdMsb167IePYeeSOvo1N9GyR+o7Ta+lWllI++VP+WEj9/m/51yH1F2JrsxtH76U2dtooqV5/RCzgOxfPh9T1OPMtpYzztHz/N59Sha/ciNEhiwaV9qK2+NO2sf2vlMHKSeVVqaZJt+PkqZMhNU5oyryrLDV86GtfGlJ/9sF3hdRHH30spPaLShGdxzn7JM7Kx7GzXtQOff7SxZD6Y9+Rmtm77rwnpP7wD/xgSP2cP/U5OWPZPJ7Xex98JKQ2tRZjPMpj7LjAsqx0X/kwN0a1NcCs71PGusrUuLYQF6/Z9m5qon/j7b8eUu95QSpFpZR7XvCSkPrwI6nqPfzgAyF10qYmemvrUs5YE9u6vPL52Z/9J0Lqd33n9+RDf/bn/MmUsdjG/tRP/0xIHcdrUt15O0mbTyZpaDSfpTXAyipHVZ6VxwlRaVO2SyldXBDIU/4nHj8XUt/znvfmQ7/kVa8JqXlt8/a7nhdSH344rfL92+99a87Ya16TMnbfffeF1K3tVBL+9P/4p/Oh3/r9PxBST51Ki67nz50NqU1sRS+er7QYk7U0vJlsphn9LK4Gr6+lQUKpVds97bI2La+Gnbn9TN7nPI7MRnHnk1G6YqPu0ZD6vkcq6xjf+Pf/Skj90td/Y0j9x1/3RSH1Z361Um3/7f/z+SH1U//CvwipP/xtXxhS55XF4vLnvvCbQ+rLXnB3SP1bX/6HQupfef2/Cqm/+hu/lTP2Z//8x4bUvEq9uZ5Wg7/gL6XpZynlrntTGT57MY0xLjt1avkUeL6b2oRFflJYyig+Ic2148477kh7js/3Syl333FXSH3fxftD6mZcnHzi8TRxLqWM1lPeRnGSOFlPI5DZLBWj/EyhlFLi6Ggeows24vLjZFwZY4zXYwsf5w6/+/40DL50sdJt9XHx59yFNIC5467K8D7EmXS1CVEbn67WVjli+a89kWhryztp2zjbyr1tfgBaSil9Gifn2Js8DZzFCWYpZS1PDeIgeRGX3/OTqVLK9oVUhsdx2NbGJa2Tcel+1FauySI+xJzEhm5jkXqH7cnBbD9ybnjrxY8dJH7sWt1U8WP7P8nxY3lmUcSPLSN+bAnxYwPXEj9234HPV40fG1b6fRdJ/NiQ+LEh8WNLdv7Mxo/t/1z82JD4sSHxY0PPYPzY/MDnh8WPXU4SPzYkfmxI/NjQivFjfTfcvB45dsBhLZr4sSHxY0Pix4aOED+2/9j50KsQP7YkVfzYwE0YP3b58+sbP3bZIX2u+LEh8WNDt1D82IFqWqm2ceIgfmxI/NjQszV+bM/ashWkwyLHLjta/Nje5+LHlqSKHxu6NePHcpDJ0xw/9tSGUfzY0oOHNPFjQzdV/NhVvYwJAAAAAAAAAAAAAAAAAAAAAAAAeHbwAjIAAAAAAAAAAAAAAAAAAAAAAAA4RryADAAAAAAAAAAAAAAAAAAAAAAAAI4RLyADAAAAAAAAAAAAAAAAAAAAAACAY8QLyAAAAAAAAAAAAAAAAAAAAAAAAOAY8QIyAAAAAAAAAAAAAAAAAAAAAAAAOEbGTTM68FHf92GDpmlC6nwxTwcbjXNu4r7LZFzZPNjd3Q2pG2vrefN5l86rW6Qrtj5ZC6nT6TQfumnSWbejg7dvvz5ez3Yck0sZ9/GCx61n052QulgsQmq/6NKuS+nioefzdLNmtZ0/mYd2+TG6WDuy8WQSUmfTVERf8upXV/a+kXb+7l97W0h93e/9+JD6tl/+5XzkUay3L3jRC0PqQw88EFL7fKdLWYuXdNqnktCubYbULhbRpq28unE6ThXz7s0TIfWT/vAfC6k//W+/Kx/6t+Pt2Nq+FFIXs3TWO9vb+dAn4lm/Yj4LqZcupoxVLnhTqZW525rOUsZGhzQFT6bmdrCU9fXUuZyLh96J+74Utx2PK53apXSvymwr7fxUrDt93HMpZXd7K6S28WatxWvSTCoVs8npa6k9mcfzak6ka/IpH/NH44HLz/zMz4bU6RPnQupvxfLfVM65jPrUJ47m6Wbd1qWdPzf2SqWUvkuHHlbb/Z8s7Yr3fZgylhuEUsrGOOc8ZfvFsU14YFIZx87jNdnaTSPGrfMXQ+oXffH/EVI//dM/I2fs137+50Pqv/+u7w6p3/jd3xFS/5c/8Wfyob/u274lpH7RF3xhSN2epZHVaGMjH/pMnwrS5maq9WWRWtES91z14jj4GcUC/ljsbW87eTofejIZNoVXRg5drtSH1KxqM3VZG0cCk9hZj+OMqIut6G4cOJVStps0dhrH9uST//gfD6nf9U+/KR/6xDjNMb/+Lf8ipE5ja/RX//Tn5kP/4+9Lw9F3/eavhtSvev3fDKnf+H3fGVJ3H348Z+yvf1Fq626LjfDuLM1eS6x3pZT1ONB9xal0szbjKselkopodWab13b2O6x/PKz21Qbgpf3/s3ffAZqdZ2H271PeMmV70arLkiVZLnLB2BQ3IJDYAWPAdugkBAglEHoo+UgjQPgCoSTUONRgm2YMdoINDmCwjRtuuMmWJWsl7Wq1fae87Zzz/TGr2dk571zPalerz6O5fn9J557Tn35uvcrpvpqG6g5PuvM8NdzEhmU0pkniiROnIbp3/36I/u073s3XdftTnwHR44tUimbmdkJ0MqIxW0R0cHZQj+mBLw2oPy17if50OKD7ev7zPgei73jn2yB60y03QfRVr3oVX9j2eZqV79m9D6KnT9NN1TwMiOC6mwWu8jVTDn6hFT1LtBkN9pjcZde4EMeLkxFRYDPbm8FihiOrew5TpY6Iq6+4EqJHj1LXM8EllDe84Y0QfdnLEsPgN7/5ryH6/Oe/AKIVLlPXNV12RLzmj/4Iot0+tSef+/zPx2MnCuHiErVmnQ6d+t776GVV2PhHnapFFzZknb4rLuw3qQ6V17GzHIcoGd31A0eO8ak/+MGPQHTvrbdD9N6jJyDK4/MqtdT2oY/cQWGclURBo7Lf+73X8KknE6o+wwHdddXgNyAcGvVmEqt8XK9rXiThfUeJIpqn3tfZs0z7M/4GlKi2Ed0uvU2en/LnpZ/9qX8B0R/4T39ER474zZ+lNZZPLNB4spNROfnZn3stn/qZ//3LIfrff+bbITrAD7sZfoWMiNf/OvVr3/uf/i9EKzz14VM0DOh1E+3z7Cy1kx1ca/6h/+ebIPqnb3wzn/q+P6U24Qu/4um8e0Qsnzo5dfvOnXRTs7OJFiOxMorhMQ75kh9Pv+TLvgyiP/+zvwDRr/7qr4PoT/zk/8un/rIvolP/5V//JUQXTtGia79LRbTbS9SdvKY/WKpoVeobv/mbIfqrv/yrfOqFRRp38eLlb/+v36ZwavR/9VVXQfQlX/rFEL37nvv54JONO5ci1ZRx79DwgJCLP6/YRjS4f4HZNTmui7I8VW072NtWPFIt6In1UosJ1ZgnzghXkqtJYlZSYmLP7n27IZpV2IpiUlAZicWEBnvMHGdbE5wkLg7WNwjZ6TPrz27+WIv5Y1NsnvyxtVsS+WOpvCDzx9rMH5tyavPHWi48f2y+tf2S88fW7762IzN/rM38sTbzx9oe5fyxtdvNH5sSNX+sxfyxtsuQP3ZOPZo+7lpZt98ofywuLIXM/LE288fazB9rS63tUM3ienfuIBucwfyxNvPH2swfa7uI/LGLMS2XzPyxNvPH2jZF/ti1re2XLX8s8TDD/LFpzB+bYvPkj9Xnf8zi/LGGo+aPtZg/1vaYzB972dee++deb8r60kaZYysuLn9sdbv5Y23mj7Vt0vwxSB6LRzp/bH06mfljLeaPtW2i/LFL+oAhSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkaXPxB8gkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZKkLcQfIJMkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZK2EH+ATJIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSdpC/AEySZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkaQvxB8gkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZKkLcQfIJMkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZK2kDLyZv22inbIMvrNsrLILuVqsrqGaDVpXeraU+d0YQvjEe1bFnxhg9EYor1OSTvjhfV7s3zqrP2C1phM6MJqfJ5JTdCpK3wmOd51VU8gOq7oyBHRKToQXayoBPOFrdqoKFZYwPOGnliDr6NbdCG6NFymE0d8/7/91xD9ga//Joh+87d+K0Rf+Wv/k0/9nr99B0QPH7wPooPREh06S1TMXo+qXt7Qu965fSdEzyycgujywiJeV/zUb/wGRH/4G/8lRP/wj14D0asKbG0iBmNsRWuqHROsO1emTr27S2W4xsaKW5uypFdZL9O+Zw9/sRpsMZom0eVlGf1BZ0It4Rm87F/61V+C6Hd8+3fidcUv/cIvQPQUlvAf/vbvhWiyjZ2ZoV6vxt4hcAQywhY4Igp84Bk2OKPhAKI//0s/D9Fv+8p/xhc2NzcP0bxDd51PqMqP6sQzyfB97e/2ILobH3inTLQYXOvrVuVau2VqxVrdyIUwVUyiwXayyOiZZDlV+SI1AJnDB/7FL/tSiH7/t347RH/+t34Noo+/+fF8Ydddfy1EX//aP4IoDmNjiE87Irbt3A7R//Wn1GO+9EVfAtEau7yIaLCsTLD534Y95jio2l7XTUwNTp45DdF922j3fdu24bFTzwSblAbL/0b94cp27i5p/7NRasDzhqaB0dDLKlNj0Z/5RWr/X/3KV0L0y77myyH6Y//9Z/jUV99AFfMrv/jLIPqKV9OFDYZDPnU1oqLyA9/xgxDdNTsH0QLrznf/i2/jC+uXNElscI45xjZhR6oF3zczA9E7l2kq1+vTELqHndpohMU7sRRxno0GWdkGSyXJWst4oYKvmkcvEVHzOgZ2TNwcHT5yBKLDcaIVffvdNDU+NbMLovU9d0C0g9OliPj13/htiPZnqO689o9fB9EcG/+IeMe73gnRbrePB6eCcsfHPwbRGayVEVFhR3/s5AmI1hn1tlWqFS0anLNnFJ06AV3dyLWjSQ1+sgzH51h5Oh0qRWNcpoiILGimNqlp4WjHjp0Q3YsrPxExwMfSyem+6pIa8MUlmkK+693v5gs7feYMRN/xTqpZR48ehegXvPBFfOrZWRyOYjt5333U0L3vfe/jU7/wRf8Qog2e+tjxkxDltmpUJxaiL2FVKQIH/zzpiIhOlwrhCJfahjhOqHGBJSLe9/f0vnZXNKib3Xc1RJcO3wnRLBIjcF5MyPCrQc0NXepLStaha2sqasrKnAa6+NVrw/HYqk6N7T8OZXNeA0l97BvjIz13lmlvjbutK648wMec4NBrsEzdcb6HHmmvpLuua1q6iYjxiE69vETN+/KA9h339vOpua//9h94BUTLgsZORWpClI3vh+irf/GbITqpFiBaY/HmKWREZA1VzH/1HV8M0Q984AMQ/fTPvoVP/dnPo/50hHe94q47p08Bnva0W2GvxNfqiOUl/NSIHVOJ673JTo0nsHlJu7/rXW+F6Nd+1Vfxqe859EmI/vOv/3qI/s5v/y+I3nDdjRD9rM9+Bl/YK37l1ymMUwNuok8unuRT9zs0F5sk+kRqRV/60pfyqXft3AnRP/gDWu999rM+kw8OpTQ1H0p8IeI5C48Xmyo5xuABDO27f/+VeGhcNU2NMSb8wQ4HuiV+SWl49LPB5HdVhgkAGX97Sg35KiwrJR78B3+Mll9+7Hu+C6LjyUf5whqclfMguSjoXe9qfzXIW98gzB9rMX+sbRPlj62t6YnPyvghPswfm8b8sTbzx9ouLn9sZful5o9NaUUvdO3P/LE288fazB9re8Tzx9ZuN3+szfyxNvPHpkX/f8gfW9kO/WGWmT82hfljbeaPtT2C+WNtyS+VZ//solaAzB9rM39s2sG3Yv4YfyRKLKEnakfqm4X5Yy3mj02x2fLHVrabPzblsswfa0fNH2tpJycU5z9Dzh+bmja2yvyxKVHzx1oek/ljTfzb1X+e2jhslDm24uLyx1a3mz/WZv5Y2ybNH+Mi+sjmj7VGpuaPrWf+WNsmyh+7hAVFSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZuNP0AmSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkbSH+AJkkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZK0hfgDZJIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSdIW4g+QSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSVuIP0AmSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkbSH+AJkkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZK0hZRNna3bVDc17VFVEMyy9Ud7eLICgnlOBx/jhc32+3xijEav7EF0NBxBtNvFmyqTT4x+JK5pxhCtJ/RMCnyeEVFk/Pt0FK2DSlG3Q8+zqRO/izce013zheX5hf3oXtZM3TxaHsJOTU7vusSatX+2A9FPHDoM0aSspIN//M6PQfTrvvEb+eCPu/5xEP2Lv3kzRJ/+5CdC9NTpBT51f6YL0S97+csh+v3f+p0QnbQaxrXyvMTrSqgG1GJwvZuMqARGRHTomdQxvWCvuLZL5SQbTvjMD0zoD67A5qis6cK4jc2mN2XnDlhgzzKs8ODcnqS6vAJr/ZM6VJDeiZfddCg6zrAfjxjjA+/PzUCUW+gNXsc5P/FzPwXRV/36b0F0rj8H0X/ydV/Np/7Wf/oNEC3naJxw+uhJOnSf6l1yZFSNqFOr8IE3ePA8o3oXEVf35yHawebonsVTEL1hbpZP3e9S+W+fOTEkuWBFQXUnIgquPTWFMxxjVKNEK/red78Loi/98pdB9M//5H9DlCp8xMte+GKMx2+89tUQrZcGEP3Gl3wFRLf1E+XkG19Cd/29P/zDEP3d1/whRKsyUaS62MxmFZWEAmcWu3o0DJ5grxQRRUkXdu+YLqypqRDejrUyIopLmehVGxTDjbafL8e7brBidrChnO/RXX/fd34XX9hP/Nf/AtE//7M3QvSlX0Mj1auuv4ZPPR5TUXnJy74Uoq9/NVXqW5/wBD712/7izyH6qj+hg3eCesxBQ+WhVySKKA90M4xuxzJG44+IiGjw4Nf0aIxRlPRM8gkN/vMy9UyohT7PZIORfIXLLKDBtxm4XMDrMxvM1M8pcRRd4/588AJbwaWlJQpH1MdPQnTXtu0QPYLTijy1hFIW9AdZUEEqu7jygz1LRHRymmMWeGG79+yE6PIyPfDeLK8BxuIp2n1xQPe1XNDoHUcQERHD5uKXVacW0dWNDY6YuaW6gN3xsrE5qnGtICJwYBXdgkrRfffTctnone/kU++55akQPT2hh1bzuAubwYP3PcAXVjf00MYLVIA7Peq4/vxNf8GnTqzt45S/wldd5IlC+LrXvQ6inRm6rzMLtITYYH86Wr7g/nLqwfFdZxhtf5dZZ2aG1mcmZ+iJd7o0xmiwu4yICheOFj75EYgWOOXpdCkaeN6IqHHwX+BEL8epQYWjsuSp99+4C6LdHl3Y3R+7j458FR05Ih687yRES/ywVeO4qx4nhoLJMrxidjY5oF7v3nsO8h887nH0SWJ2llYbuNqWHbqp00vLfGFf+k1/AtG8Rxf2ld/5BxBdGm7jU/+jb6Bl1V/8BZrevvrVfwbRz/j0p/GpH3cNveLv+3G6rx/9wS+E6BX76XXcfzSxBl4EDdv+5q8/BNG/fQct00WRKNUzWOz/6b947tp/nTrW6W0wDs9wzNbt0MApIua3UUHiho4NBon+dHFxEaL/5GVfDtE/ft1rIfq0T3smn/rP/5LWZz7t0z4Nos997mdB9Ip9tHqTTAD4uq//Ooj+6q+8AqINTiv6OISOiAaH4DUuBXze530ORP/6b/6aT/3lX04LYp/7uS+A6NIipwfw4n1CYnqLw+DEPC61ehM8nsSb4qrXjC/+piIi8HtHjkkRnI/RpNaZO5yFguV/jN+j89QCY4YrFfuvoRHIW95IPctXfCV97PjdV9E6c0QMMUdlPKQ2NvCu8/H6WzZ/bOXEGDV/bKpNlD92bgu3V1XqU7v5Y23mjz1c5o+1bZQ/trL9ovLHznkof6xqbYkwf2wa88fazB9re5Tzx3j7hTN/rM38sanMH5ty6suRP8ahh5g/1mb+WJv5Y22cP8ZLoxedObbC/LEppzZ/rMX8sbaLyB9bxQlg5/3ltHmu+WNt5o9Nsdnyx1a2X9b8sRUbvXHzx6ZdmPlj622i/LF1W7gMX0Ta2Crzx9rMH2vbpPlj3/y15/556rRro8yxFReXP7a63fyxNvPH2jZp/tilJI/Fw84fO+9fzR+bFjV/bL1NlD/2CP2cgyRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkqTNwB8gkyRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkrYQf4BMkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJ2kL8ATJJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRpC/EHyCRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkqQtxB8gkyRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkraQsmrWbyryEnYo8CfLmqZ1uDWyLEtcTY9OXdcV7VzTqSeTMUQ7nS5eVxQFXdjs7CxEx2M6dV3XfOqqorvO+WWV9MAHgwGfuswLPDideri0ANFOpwPRySTxTHIshNkiPbGqmfDBV4w3eOzj8Qj2ymfn6cKw+F+L5eT+jJ5YRBQZvax9+/dA9NW/8JsQ/aGf/g986s94wXMo+gUvgOhP/+iPQvSptz+VT/2SL/1SiC4OFyH647/6cxDNa3qe3/xVX8sXxr/tWGLdaUZURPvdPp/4dE27XzFDjdWpkychurOkZxIRV2I7GWOqAAU+sQp7luBoqhXlitnkFK5SDXgEtqLYEmbc440o/OVf+ZV4VfE93/ndEP0vP/fTEP35X/4FiPZ6PT71697weoh+5I47IPpz//W/QnQBW9GI+G+/9ssQvfvegxD9yf+HWsIGS0K3n3gmPLrpYs3KRksQPTAzw6c+sXgGotfO74ToNdgczaRGVnlGtb6O9VVv7ZammfLAV4egGTcJ0/Y970SJcVfibYIn4bAqIn7p534Rov/zN38DoiWPwIc0eulliWdy53vfB9EXvewlEH3TG/8MokvHTvOpv/UHqLH61f/5qxBt/ie1sf/vf/8ZPvWeqw5A9Pjd99POWKtH2LM8MEmMVEdYwrv4NrfhRC75u9RFgWUYRwF5q1Kf3Z5nkZpCRkQ9oUc6xka4gzf2ZBw4vfnocbyuyHAGWmJD18Hh/dd/5dfwqX/+V6jFeP0fU2/bxbe9tERdQ0Tc8ZGPQvT3fu23IPqKV/4ORIfjZYiOG+wvIwp8HZ0NCuHZKPa2C6kh37ERNbMN1p3haAjRm7o46Z7QvhGRR6JyrdporWajYjxMvI0oCl78oULIu2LFWjk1PfAOPpKNGquzp+ZWlNcpIsaHPgHRpW07IMpLKAVedmwwdlq1jAWYx6JFN7FS0cPh6NICjQSOHqfh/YED1FPzQlxETBr6g7KLQ74h7TsZpiom9nrY402v0qsbO1hExxW96IjIcBjNK7oTnJ92cA0kImosokN84Fz1Tpw4yadevP8wROd37YPoqfvugWiDFTNPrZBnOE7ggzfY+Ge4khypgdltT3wSRD9xFw0SeE01Im69DQ9+5ych2vA4ActYXiS6Sy7/NT7wHn9T4NYmYrRMq/cLC7T8zg+8SQ3/RzgxqcYUzXFBYLRMQz7ubSM15R9NsPzzMCDVlQdO5Q7dTZ3aGIdt/Inn3oNH+brKEldgsP3nNiGP1BJKaj1hxWTqtAtHdcMhlZNIjQSWFvHjVJdOvXsXjcr+zff9Q76wH/+pN0K0P0+L84tjGsfWTWKMkXXoyv/ld9Oy0mRM1eNv3oprIBH83WBcUTl5+Tf9MUTzgtrJLr7KiOjgF9In3HYtRKugB37fIVqSjYjZ7Tg/LdP/b7DBmVNTt5c4NRiPEp99uQHnHrNp6Hl+0Yu/kE/9Z39Gi4QvfenLIdrFhejEglVEhb1Dp0PF7A3/hyo1LiRHHYmZ8/aZbRB93mc/jw4+odcxTI27ePIbGJ2dodeRLIS/9or/AdEbbrgRotc+jqKRmtQwHgYnKi3uW2DdifQgBD9TJj6AJk7NePccW/9EVk9qcWeCu/NdNTiAyfPEOgYPzH73j/4KokX+doiOJichOo5UBgs20fyqU2VsfbT9cdz8sTbzx6YdfNPkj2Vr8jA4f2yjtLFzf2D+WIv5Y1MPADHzx9o2yh9b2f6I54+t3WL+WJv5Y23mj7U9yvlja7ebP9Zm/lib+WNtlzd/bKN+q1w5+IZ3neeZ+WNt5o+1mT82Zd9Lyx9rcBzMBfjcQTZ4LeaPtZk/1mb+WBtPDbi/5Pyx865hWq9t/lib+WNtmy5/7Oz2y5k/tmKjLDLzx6Yc2fyxKafeNPlj2flfNjl/bHra2JpzQ9D8sTbzx9o2b/7YqqmJZBtljq248Pyx/rTt5o+1mT82zabMH7uU5LF4mPlj69dbzB9rMX+sbRPlj13o4oIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZKkxwB/gEySJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEnaQvwBMkmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJGkL8QfIJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSpC3EHyCTJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSthB/gEySJEmSJEmSJEmSJEmSslu/EAAAIABJREFUJEmSJEmSJEmSJEmSJEnaQvwBMkmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJGkLKetJtW5T0bn4XyXLcde8KBP7Z7R/3tQQbTCalQVEac+VP5gMINrpdCFalnTXdbX++a9TFHTlWdZAdDwcQTSPjE9d44Mpgk7d7fYgeuz0MYg2YzpyRDQ5PbRut08714m7XlFu8E6LnB5pndHB64Yuu+ByMppANCI6WHf+/Y//JES/89u+A6LJ5/Vv/tX3QfRHfvo/Q/TYg0ch+md/+md86j9//RshmtdYOyqK/syv/SpEZ3tzfGHR0GNrsNZXWE6aSaK52tuboTDedR7U2nxynGis+jmV4dt61Cb0etiKDjt04snU2rHmTrF2ZBk+UqwAWap+lDk90mqMTXSHmrJ77zkI0Wd/1mfwhb3m1b8P0V5Or+Mjd3wQojfd/Hg+9f2f+CREl06dhui3fsu/hOikThTRskMF6ad+7mcg2sOOPrh2JPq0yLCxqmtq/3f1qJx0sWeJiAGO2z4xosFPPRpD9Okz+MQiJmPs19r96ZotTTPliZ3bmBiMJqotD+oGI6q2M9jQXYEjuoiYLenUL3vRP4bo9v4sRL/55V8J0W6ObWzEz//YT0G0qehVVjg+L7uJU//6z/wyHRz3zWo69be9/Cv41EVG1SfLqdo22NveXFAhHNWJidhwQoWw19Bl8yQvS06JsLFaWqIXMulM33c8HscFjDb5D7pdqjtZRY1VH0dlM0WiKTt69710amzo/vj3fg+ic6mK+a+/9dsh+jVf8U8gOsYRyKt+69V86m3babT5/Bc8H6L//GVfBlGeqF1z7dV4XXH44CGI9goqwBNsMapUIc2wcxlPH6yetR2HwQ1W+SEOEiIxKbkg1UZ1JHXkLKNer2mGuDeu3mDPEhGjER2cR4xdHIFXOAxI/rx/jvV64RhNjTd8ERER0cX1rojoFDghwtfJtWMy5FcZQ57y4EC5HtKpjxyhZaVuP9GK9vrzEG0ChwGjRYjmOEiIiIqX2nDEOLVPW31/NT7PZINQ47vu4GRqhLWD10UjVfVw4TOyki6sk3od9f13QTTv0JXPzNEIfIINeLJ5bnBpKAu66yGOz7vY78RDw7ONLI6WILr/qqsgevAgrWNExF2fvAeiHVzvqnB+yqWog6UoIsYltqJYzCqsmHkv0YCfWTjFfwB4RsPNe6S6tQmOsTMcouAqXeSpC5vgrATX5iPnZbrUZxr+mJJoRUts6PCyk18zcnym1QQ/4vSw70gtRKde10PXMPXPcPXmumuu4WMuLVB3vGPbdoju2bkLosPlBYheuScx+PmxH3oqRDvYs5Q4t+13cdk/ot+jjinDcjapcMxW4Be3iF6PRlaB34UXl6gYHT1JL/pv3vJOvK4ocOnoqU+irzyPf/xtEB3iyk9EnF6iR7q4dF5/um3a3zQbVP6lRSqiiUXsiH6fVi8HA1oNnt9ONWt+bup9nDPGJfTf/336YLG0RCOQw4fv51PzwOwD738/RL/oxS+G6Kt/93ch+rznPJcv7OprroDoH/7eH0H01ifeCtG5GWoQImJxiQpSNaGO/q/+6i/p0NOW7s9HzdGNN94I0UVMewgcouSpIR/Pxbijz/mTRPITEQ5vcPySqB3c+HM0Ikq8rwmOnUr8ZJylnkmBM9AJzlm6+K4HqVK0OFiGaB0UndQU5ZtOfK1OFSOe8lTTR2OrR16/c9bqg8wfm/IH5o+1L2zz5I+dtwVnXBulja0yf6zN/LEpzB9rubj8sZXtF5U/tsbZ2lG1tkSYPzaN+WNt5o9NubBHOX9szXbzx9rMH2szf6zt/5f8sZXtG+WPRcR4PDZ/rM38sTbzx9ouNX8ssbKUGFmdtWGPbf5YK27+WIv5Y20XkT+2ivPH1praOJg/1mb+WNumyx9b2X5Z88dWbPTR0PyxKVHzx1o2Uf5Yc/7HR35d+KHS/LEpzB9re6zmj62amvixUebY2V0uKn9sdbv5Y23mj7Vt0vwxHp88svlj61YmzB+btq/5Yy2bJ3/s4nPFJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJG06/gCZJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmStIX4A2SSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEnSFuIPkEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJElbiD9AJkmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJG0h/gCZJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmStIX4A2SSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEnSFlLWebNuUxPrt6w1mVQQ7XQLOlkn8Xtnk9GIds8ziBZlCdEGLxsPHBFRZ3Tlo8mEDt7QviVedkREc/GvIy/pdTRVzWfOMjr1eDKmg+OxC3yeeZ8uOyIGgwFGqRTxTa39u6mb8W1EXVFJ6HQ7tG9Nr7KsE2X0dX/wGoiOlumJVRiNbqKIjs4sQfS//fTPQPQ//uiPQ/QHv/u7+dQ//G9+BKLbd2yH6Pd93w9AdIxt0aSmFx0RY2wTJkM6eB7Y0OWJVvTomA4+wiI6LvHgqapT4y9aZtjODgZUiqqaGpRs+hM7d7kNt0cbVPazuHtI9R3jMbWTgbX+ygm9yh/99/8Bor/4O7+B1xUZnjrDnuVnf/qnIZoXiQb85//bz0H0O9/xDoj+2E/+R4hy+xwR3/M93wfRZSyE4wG9yhrL2GREzzMiCuysC7yvU1ipj1VYAiNqfGodPPcsl//U0Gputg/RerS8fsuavqgZTzl405zdmOHryLJEEa1weNOb20YHxyP3cBgQEd3REKKzOe0+xJ6l36F9i0liQBjYs8SICuF8rwvRZpKot5PxGYjO9mcgyqOyZK/WxT/IsDu+He+6m1MhzLjOR3RmehCtKmpwzmBTth2fZ6SqddmlZzI+767PFbmmKCIiT7XgPPoZYbXtF7Q3n5hHIBHx7/4ddcfc3Pzx7/8hREssJxFRYt/xu6/8XYjWPHtNzdkXTlOP+X9e9waITmocBuMk8fD9h/nCGpzo7a7p4Hu5iU51akNsSPMutQnzWMrGOFJtskQRbfCu19pgRB0bTUNT09NEc9TpUFM2wk4Ni0lEamkozyg6Ga8fgZx3ZKyYq0ORjdQ4vM/wxgos3sm1nTynu+7NUPtf4vB+0iSmxjX29XzXbDKmuy6LxOuYnZ+F6BVXXQ3R4hA1Rw8cOcSnPnD14yD60Q9/EKJTS9nqRl7u6nZo+L1yAIhNcG6b4xg7WTsGQzo4v80GW5sJdnkRUZZ06tGAimiFB69wLpYaYkS3g1WvonW8vKAqz21sRGJWc/cnDuKuvKyUGN4MM3qkZZ+KeIUtYVXjix7SRCxSBWn3Xlp+7BfU2mT41SAiZmapx9yOXd7xkzSZynjBKtVEc0fP+2Y4vOEFlojolzRsGzV0YQV/XUqNwHm0WRQ05Ktr2jfHOUti6TL1gSnHmVpg3bn51lv41O9+59v5D86eZNqML8MxxvLSaT5mhs1syU3ZXZ+A6IF9eyA600lMnLdfQW0Cl29evUkNwFOVC0/eS90XqyoaRU8fwTykj13ejll60Z/7vCfhdcWZM1SQhmNqMZaH1Pg3OKOJiH6PHmmWpbrjiP72+anbOx1qbaL1xX8d/mBRYhubYyvK+0bEaEDlZDyk4U2Jn67e8AZaiIjU8vu73kWfJHg9oIP17i1/82a8rii4/cevCr/6y78IUW4QImL3jh0Q3bmNot/wjf8cojzfj4ga1/E+9rE7IcojkMAbT+7LLzvHcQJ/2G1Sy0pVYoWSdj916hRE+ZNy+sKwty269K6bxJwnMQzmz/SJLo8zLlKZOWWP5s5Fh3YveJUvqGfJUhNnXsmusBAlXnVrqNZeUDR/rM38sbZNlD+2dgvfVJNqr8wfm3Jw88fau5s/1nLh+WOzre0XlT92Tjt/7Lwt5o+1o+aPtZg/1vYo54+d3V5GmD82jfljbeaPtT2K+WP1uu3j9Xd9XgqZ+WNt5o+1mT/Wdon5YxnWgGSGGP+Z+WNt5o+1mT/2kPes/lONj5RL2QX+55KxYS6Z+WPrmT/Wtunyx1a2X9b8sRXbts9N3W7+2LSo+WPrfcrnj92/uuUJ52eUcf7Y1LSxVeaPtZk/1vaYzB9b2xPPT1vk2ShzbMVF5o89tN38sTbzx9o2af4Y3/Ujmz+WnV+ozB+bcnDzx1o2Uf7YxS/WSJIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSdp0/AEySZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkaQvxB8gkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZKkLcQfIJMkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZK2EH+ATJIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSdpC/AEySZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkaQspi6JYv62pYYe8/fcXumtEk7iaolNCtK4qiI7HFGWTmq87pjylNfius5L2HY/HfOqypGcSWQbBCT6xajLhU/c6XYg2iYdGv23X7dKRR6PEhWX4OvIOnTrLad9V9WT6o6vxrgt8YhW+jk7QXe/iYhDx+j98LUR7vR5Ey6BS9K//6b/gU/MjPfKJeyD6g9/1vRAdLQ/51D/27/4DRGtscaoBPfDv++Zvh2gZiVL0I1/7LRDtdDoQbbAl203vKiLiQJfe9eIo1QpvLJ8kGqusoUfaybEQFnRjDT6UcZ24qabBP8BWNBqKFlniRzyrih5aibtfjRd2qNuH6Hd8Q6Ladmo6+Ld/67+kfbH8F/w8I77zm78Nol0sJz/8nT8I0cEw0WJ0ser9q2+iajvfn6d9/9k30Xmxz4qIwDLcLaicPAl7h4oLf0SBB88q6vKqLu3bVImufHmwDNG61bOs3VJPa23qh252gsOyHlbqiJjZRu96FNhGj0YQ7HQSJeGZ2MwWszjGGA3o1DgWrfPEM5ngoC7vUHM0qakkZDgCiYgSBzA1FtGmQ/tWqWnJaIIDXdw7x86BG6tEn5WaLnWxd+jOzdKpU4PkZo4LErYJGwyhV7ZnqWnc/NwMhXHEmBiBY8X8RyV1HJEaRfPLKvBVN4l5dfTx2pqCoqMxVczBkNrniMjxoWU4vKkqqphD7DvKVH/KjVVV0CMd11ROsuTvtuPrnPBQFJvoLj7PHTitjojhqfv4D1YtDqZ3YcvD6du5AEfEBFcbRqlxAuARXUQEV0wcwMz1qJ2ssO4klm4iUstOuNTA845Ui8HVh9d2CnzgRYntc0SGhZR7nk6JXTnedZYqoqdOn4Ho6YWPQHSIa1bb57fxqT/x8TsgutFi1FlT7+uhjVVFt13XiRn93BxdeVXRQJdngdUoMVPbvWcnRM+coZdVFrh0ySssEeNRovqALLGYQK8D2/6VvXFxHos4j+5Tg82oeRkEj84ryWMsRZEa3vMSetXQAIabwUmqdvDof3FxEaKdOWrK+ItDRIyG1OAMN+i+V1RjrLap4U0X32aNI6uCpwZYRJP9KfeY3YpOzX1xnaoeJXdMvFyA45N+n/rTG2+8CY8cRx44AtEJjrt2794F0Q9+8IN86tRC9erfTXkvyziPG6ZW+X7up38KotzMbt++A6J7du+E6Od/7ufRoSOuue5qiD7uppshWg2x8U8tK/GAscIxRpbRwQcbTApWLQ9oVarAtR1u6PICvymkxnw8MBviMKDTowtbHiXGGBUOQgbL5z2xqU1AU05/oyMcWZVFclZCdz2a0Lvu4Yw+5+WwiK/46q/gPyDYedTJ0T8uv/PMopvThKjGxYQa+6xItaJjrB085itTq3x816MhVWoeBg8HNDSKSCyr8uhocZGmBiz15SoaLCdj7E8znDhnWE4itZhW4xhjz579tC9W+QynkBFRJJoUeqbcJiRnJZcPrxVHqoRXNbWTeYNfUnAIHXWiFc3xS3pioIt33f4kYf5YmD+2gcdM/tjaLZzsVKdGfeaPtZk/1mb+WNvF5Y+tbL/U/LFWa3ReV2j+WIv5Y23mj005+KObP7Z2u/ljbeaPtZk/NiV6WfPHTq+97XNPbyWvDCYOTV2bP9Zm/lib+WNtl5g/NsEr2yhzbJ18g2OYP9Zm/lib+WNtF5M/9hDOH1trNG3Uav7Yw2X+WNunYP7YYHk5LnP+2IqNssjMH2szf6ztUzx/7AtaW1YlpvQ4gDF/rM38sbbHav7YqnWJZCs2yhxbcXH5Y6vbzR9rM3+szfyxtnX5Y+uGpuaPtZk/NiW6efLHUiuhkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkh5D/AEySZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkaQvxB8gkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZKkLcQfIJMkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZK2EH+ATJIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSdpC/AEySZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkaQvxB8gkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZKkLaQssmLdpixq2qOpINjrz0C0yBO/dzap6eB5Q/s29YTCGd1Uka9/CA9LHXRl9XgM0dluL3Hw8Yii+MTKTknR1OuoKjp1k/G++Crx1ByNiKKg91WP8V0HXvdDyg2KRFNz7cCSgNEJFu/bGjxvxCGMj0f0KgsshFwCI6KbdejgeF81Pk/cNSKiqahy9Qq6r05BRbTGJxatZnOdMseDV3TX27DazpaJFqPCotLl8l9Q1RtU2MZG1BO666yk3YuaHumTn3o7RN/6zvdM23yu+GR4X82ILmyMbWzTSRTSvKDaUWa0ewffVTMa0r5NoojWQX+QYwMeOEgoqkQb28PXMR7Tfc32ZiE6nCQaqx42whk2R7M4+OliC9zBPisixjVdedbtQrSYUAFOtqI1thjcbWUYLUq67IjIMioq49Ygo73l4nRLamMjYnl5EaJ7d+2GaCej4p0ca3awOx4PqHYEjp0GExyLdmj0HhH8yAbLyxDtdfsQTU4NKqzXRUltbIU1YKOR3qo86KFxj5nVXPmoMGc4DIiIIQ5ROl0eeNHB9+/Zx6c+ds8piBb4w9aTDcaTk3EVETtnqXmPiOEiVcyiR8UsBthO4stqeF4ckZd06grnp2VOr6OLxTsiuCDl2GTmgVPIVO3A4s/zoUTjn+V416lereH74gF8Fwtwai7W4Fyu7NG73rljO0Q/7RnPgOhv/sGr+MKqKjkWOAvfzLQjJw/YUPnvdqjuDMcDiD7xybfxqQ/ddwii27fvgmi/nxjAgAGOzyNixzy96yVu6DpUROdxIS4iDh+iZ7KEXfnS0gJEubeNiJorZkEPPGvomcz0aOBUcWOUurDlZXqbozHtO18lOrUcG/BLGfPyQlynkyjevNTW6SQ7pg11y0TPsrRItb6H75ovm/udiMhwkM6786knuIQyGiZajALHhBOcBpb4wCeJ+X70cQDf4DCgwmW6+bk5PjUvEna79EyyAtfAcRr44KEH+MJKHJhlNZWTxWVqRSNPPJNdO3ZC9NADh2lnvDCe70dEhgvsbIwfYrq4yjFM1Y4SR4wVLrVNcGpc8bJ/xAjnYhXOHXIcY0/wrj/04Q/xhfHMmluM++8/CNFealaSdy7os1o29fZx0nLlFVfwMd83fBeF8cpLnKkdxYHTL7/if+B1JTsmihb4TWF++w4+dY4fUEvs1IbDS/oakuH0NjA6xo6p7NLI6pprrsXrit37r4Tok5/2VNoZP3vtOXAVn7ooqWLumj/vmUwdCXU2WGbJsO7M8ApJRLdPI6tTJ09DdPduWhdtcP08Irq4XMzDAI4mh3wNvo4cB4QFHjyvaN8G++KIqDJ6aDMzNNHjr9VNqqPnjAsOc8+Sp14Hz6caXGCfOuVZ+w6gMCTXR7gBTzxSnjik/neAGXblXMJPncIFW+6VLnTRaLoGP3bXeNmpYVcCP5MGbyyZhcKLXgUWUS4mOXeXqYVoLsS8GpxhSWgPJpvWEzZ/7OEyf2zavp9C+WNrt3D+WJMqCeaPtZk/1mb+WNvF5Y+tdAoXlT+25tRnm5RzT2ZtRpn5Y23mj005tfljLY9y/hhvv3Dmj7WZPzaV+WNtF5c/trJ9o/yxiJiMK/PH2swfm3ZoCob5Y9Nw/tjDzRmbfoqNDm7+WIv5Y23mj7VdvvyxtcppY3Xzxx7u7uaPtX0K5o/NzfTiMuaPnXuYWT390Zg/1mb+2JQL2zz5Y8X5XT/nj01PGzu3s/ljrX3NH2t5TOaPra3w6xLJVmyUOXb2ui44f2w4bbv5Y23mjz3c8Kda/tiqRE4RX9bDzB9bn8lg/liL+WPTTr1p8seSz0iSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEnSY4c/QCZJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRtIf4AmSRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkrSF+ANkkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJ0hbiD5BJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJW4g/QCZJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRtIf4AmSRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkrSFlGW2flNVN7BDlhcQ7XRKiFZVzVdTTyYQbXDvsteD6HCwiEduPYXzdTp016PBAKI7t23HC1viU3e7HYiW+BNy4/EYonme+Pm5uqIo717zznzeOlFOgt5GFAWFJ+PUwc/+2fSiuGtmFvbqFvSyJnhfnQbLWCQu+7n4Mkustr12K7BGVnT51FVF77qaUCHsFdRiND16nhERBZb/EZ267OB9Yfmts1RTFtiklPQ6spKeSR3UPkfEcDCk3bGc1NhiZFni1D28r06PHvjtT7sdov/7r/4SojW3CBFNQ6+D3+VMvw/RfjdRO4bjZYhm+DazjO7rszpUO4os0bx3sU2ocrowbt2LRHcaFdaOCktZUY0gOsbuMlI95hBHAj0cggz551yz1ENpcOyElRpLd2Sp35kdT+h1drCY5fiyc2yfI6LBkjSu1vfCa7fU00aqqxvHOJiMMlFtsz519KMJFcJ+l1qMupMad20w9ljRmZ2hfZeoiBY8PkkWUWwxhjkV4BEOFxP9SsQYK2aNjVWGp14a06uMiAqvruHpUpdmJQNsrEZcgCPGXXrgWUkH7/XmIPrRE2f41G8brL+2b157YQ09k9n+2qo3Wr+dp3kRgfdVcROdKOAU7tSJMcZwSGOnwBHjqKZ9k0O+EZbhCY6xl2sqZrNz83zqHGdbM/jAd22nqXGvQ61oJ9XRn8ZZ+W489eIizcrrVBHlknL4waMUPX0Soq//izdB9EP4xCIiMm5Szt3XhjV4g+3JroO7ngZbjAyH9x9439/zqSucdz+IryNynBpjSej2qfGPiPtxPjUc0pAvx8aqN5MqCWMad01wVMb9aZYa8mVYViY4vC9waryM49hLXO9qsAFvAhv/1OrNBNv/wDEG48U0XiGMiAG2ovxIeV2IFyIiYnaWhigLi6chOje7DaLdfqIr7+CSFzdWXG258M/M0S1Hai2iwvI/wuX3skmMNudmaN6BCxWRZTSZWl6mFZKIqLn6YOVYXly46GjWJBaxxxM6d3kJpajEhi4ijh4/xn9Apw5818nGJr/4tf1Ui0HNES9ERCQurGhwBoodffKZcO/AzU1W4AQTxxg1PrGIKHEZsMFaP9vHhehUrzTBMcaqfn9Kw8LlZOe2HXzMLr7N//KMKyE629Aj/eSInsmgokYyIj5w+ARERzj4WcKS0OtSGxsRZ7BjwnWjCGzoGv7YAbOJiIgocWpQYFs1XqKZ2sETx2nniLuqd0H0LX/yhxDN+RNR8plgtDp/WfU7vnbK34zq6S90ATu1kydP8oVdc/UBiM7gR5z7Dx+C6DyO6CJiZo4H8FT1ZnB8wh+FIzUS5i9fFX5TrrBr6OLzjIiCvxBhMcpzTB7AdaFITVqW8etqTKhiLqe6htOnqAyfWaQR4wc//JH2Rvq4uEby/8jHwzaO8lysLhMnL3kJHWcWNV7YmUWa5e3atROvK3FwXhqa4NJlJ7WixdU2MYrGbwr8KiM1veXWv+LBJh452ZRxMUssteHbalpNQtma+Jk/1mb+2MPd/VMqf2ztFs4fm+AKTJg/No35Y1P+wPyxlgvPH7s3/vLc9mc8PS5D/tjaLeaPtZk/1mb+WNujnD+2drv5Y1P2NX+sxfyxtkc8f+y8C9ugTVjJKzs/fyzWp5CZP9Zi/lib+WNtl5g/1vC8+8JyWDbqQ8wfazN/bMqpzR+bsvflyh9ba+pqofljbeaPtW26/LGV7Zc1f4yZP9Zm/tiUI2+e/LHs/Gk4549t30FNtPljbeaPtT0m88e+7eXn/vknv+ub2n+wc/dOOPKF54/NTNtu/lib+WNtmyt/7AI9svlj6/7V/LE288emnHrz5I8l64skSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZKkxw5/gEySJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEnaQvwBMkmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJGkL8QfIJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSpC3EHyCTJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSthB/gEySJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEnaQsrJZLRuU1EUsEPRwd8syylaVxVfTZbxwRsIjkZjiFaTCUTLbgevK7Isg2i/34fo8mgI0Q4+7YioqhqiTUPPpFOUEB2FTcxKAAAgAElEQVSP6YlFqiRkNUVrflkVRetIlZOaXkcEPbFIPO+z5mZnpx/69CLstW/fPogee+A+iPZzurKmSfxW4KhaX5HXKrlmYRkrOonaMdej8h81Vb2Y0KlHk1QRxdeZZ1TMcixEeQdfR5F4JpOG7ourXgdfFh44/Rf8xJqaql5RJArhBFv4/XPbIPrBD34Yop2iC9F8emtz7mLqmh54jY90aWlA+5Y92jkix8aqV9LrqAZ02b05qndY9iMiAt9mXlO036OepcbeNiI6JVWfJqeDc19cYisaEdWQiuhMlx5pgz/Y2u9RSRiNEs+kzqgU5g3ddYVVHh9YRESJTSGPMSZ4X9tmZ/jUy0sLFG4PYNZsqbMptSMxNHjIZEzdZUS8DptofBtRcAOe+tXfBltRbv8ngdUeX2USF7OCy9lg6VJOnbhuLsD4xHKsdxGJF1Y02BJmNPjny84jUZQLbuKn1Y5zwQW6sH6XbioilrAgNdih5tn0Jvrs3XBnHPG2oAZngD1mM6aalfPryFIFGN9GgVPjHLutPDkhwoM3uPvy8jJEu+NEzRsNaXTEPcvovsMQ7eDQaDJJPJPURO/iRxE8L46IDCtmxe8aX+UMzkpOLiaKaJ6qXKvOH2U1G2xf8xd1opwkpjw4x+QRCPfFEZFhIUysOXGbwOeuErNXfibdkhrhbpcmROPUCDzD1qrklR/umPiBRgTOMWt84DU+MV6pGA2wL041KaMx1Z1un07dw2lFRBQZvescu7zpI97VjbzMkcIFfMLLBSWVhKxIXFiFc/b57XO0L1a9wVKiJMzsoWnLMjazZZfqDpeEJjVpr7GIVg2Vk/GE7rqHs9eIqBqaMfVwQYxnBt1uam1zgcYYo4be9SzOQEcDPHWqU+MFRu62ZuamrzCvuOHG6/nU7OabHg/RD33oQxDds3M7H7yLn0vuvOtuiH7O858H0dkNVt3Pnhe/s0REb4beNY+shiMq3nlqDSXD4WaF7eQYP10VHeroi1Qr2mD7PxjR4H/x5GmI/sZvvTJx6iY1RI+IDZ58D9/1g8eP8TEznLN3sNqOcUWrv0SNfze1/PjM3dTRz8/vhGhvjoo3LzpFRIbfxfhlNSPad0+qAd/TxyUU7DsWBvQ6Ghwkj1OL88v4TO69/0GIfvzgA7TvmVTfgSPwB7ArXzHcoHsq8Mjj1hf/db73+78Ponv27IFokWMpSq1jlPiVJ8Mimlj4Ta26dnp06tGA2kk+NPc7yf8JHH8X4H5n6Qx9rR5WiVMPRvTAJzghqi9hhTAiaiz//Dlv6l3dvvbsl7IMjlfexYwLlqVGmzxnr8b0xLJZ6k9znKklE0V49ZKXqUv8FJhOBcGBWY0tBq9yVFj44wLeF+3LjRV25ZPU2g4nwNSXdNnrL6w9bDB/rM38sbZNlT+2Zgs+77kuTWDD/LFpzB9rM3+s7cLzx3a0tl9U/tg5dat3WDsENX+szfyxKRdm/ljLo50/tma7+WNt5o9N2df8sXbwcuaPFRtMUVdWjTbKH4uVPsv8sXbU/LEW88faLjF/rJ7SgKczx9b92UYNg/ljbeaPTQmaP3bWuavlkUBixJvIH0s07+aPtZk/NmX3zZY/NjvbjcucP7Zio87L/LE288faNlH+2OT84SWnJPEDN3+szfyxKRf2GM0fW3Xj5ER746F6R3vjqgvPH5uZtt38sTbzx9o2V/7YKv5+lJbOHxud/68XyvyxNvPH2j6l8sdSaz2SJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSHkP8ATJJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRpC/EHyCRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkqQtxB8gkyRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkrYQf4BMkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJ2kL8ATJJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRpC/EHyCRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkqQtpMyyYt2muqYdZjsdiBY5/aJZnWV8NQ3/HhqGO531N7JWmfchOq4meOLIG47ShVU1HbzCJxapRzqpKoh2+XXwm46IoPc1Ho4g2uv2IFr16LJzfFkRsbCwDFG+rX5vhg++Ynk8mL47FrP7Dh2B6ExB+zYlvaxuSftGRIkVczQa4970okdL9KIjYqmkEp7ldOUTrlpZqnbwyy5KCDZYMRusO1Wq7kww3sHacayhnYcVPrGIpk8lfGlIJaE7Ow/RyYSqbUTUOf3Bg0vT69SKO5epUjdjeiaTSDwTjnO3xD3LpENlLCKqhp7JqEMlodelg+dYO4oiUXfKkg7OpWxpgj0m3lTSuKFzDysqCePEECPyOaodTUH7D8bUEhY5Pc9h6nUMKjr10pDqTjk7B9GFxaXEqfGumy71LMfPDCHaPX6cT72M7/qKwfq6szQ49wqmDmAuYFQTEZH3EmOMCh94gZ1altE1ZE2ijI5GVLl4qFpjY5bjCLzCmhUReNOJJjirKZ7h4CcihiO6tjrZ/m8sUQ4imqBTF0FtAtWciMSQLuVSfj16Hlvoz37mp/Huf/zm91IYO6a5ubVjjOPrtg8WF/jUFU7WOkGN8CijvrjCIlql3lbJMzWs9TwKThbuBlvRZkRNNNfqMU4wIyLDiUmNz6SDJbjB5ijPE60ov64Gdy/xeVZDfJ4RPRwS9nkkMKJTdypqUXD0HRGRWoA5p8Yn8IjLsZw87vrrIPqsz/gsPjhP1rbP05SnwKHRDA6N8lTFfc1rXgPRz/2cF0D0qquvgmgnNQLPcfBfc9XDMUaF3WWkau54Qv0pr3clFgNSiwmDEZ06x+H9wuIiRHvdxCjjV375lyCaGN5MDTYYfUiWakV5jjkY0SA5K6kQDrhXihjjbItvrNvpQnTHNpouRcTymTMQHePC0WxvFqITLN7JZaU8o0J46tQpiC4uUxHdsX0bn7rA1csIakUrXC4YYb2LiAV8HfzVoN+nkjDCAszDqjSsXNwCP+n2p/Cxt83S+xoM6L6e99znQjSrea04fv03fh2iReuL0lpv/NM3QPRr/tk/pROnv5Vgd4wFGJfPo6lTK58Temg9HmNj7ZjgIvYwVXe4mDU8K8G1zWTtKKixOnfZzbRpVwcb8H179/Opc1xCz3EUwVOeTo8ubDES5WTnE66B6N49eyG6cIiawRqrfEQMFqj9L3DCNOGPmGXim1qJa+AZLrUdxQLewYWjXWdO0s4Ru3K6r6vn6OBPu3EXRLtNYr2Al5XeMbNj7b8O4kPtv9loasI99V2f+CRf2GhIz2QZvx/Nz1IzWo0T39knG3x1XZHzomtigT31wW4JPz/h7hkOkpsxzlmaxDPhBW3ul5ZxJbnCNdWIWBxg3cOOnvFkKiLG+L2P1anrgkMnJ4mM977E4SR/OGhwQtTBYUAPe9t0R48NToarTiWuH05wSTYiclw55VNjpxQNfsSJSKwwTnBQN8b74tWwZCGq8dstD6K5KWs3Re3XZ/5Ym/ljbZsof2ztFs4fW1pOfGo3f6zN/LE288faLjx/7OVrtr/hzHJcjvyxNVvMH2szf6zN/LG2Rzl/bMVKFpn5Y23mjz1c5o+1PaL5Y9W67efnj8W6FDLzx9rMH2szf6ztEvPHHuWcsbXMH2szf6zN/LEpuJRdcJ2euthu/lib+WPTbLb8saaKy50/tmKD5s78sTbzx9o2Uf7Yui2YPzY9bWyV+WNt5o+1PSbzx94c963+80ufdWv7D37hLho7XXj+2FOnbTd/rM38sSk2Z/4YX/Qjmz+27l/NH2szf6xtE+WPXVJtkSRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkrS5+ANkkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJ0hbiD5BJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJW4g/QCZJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRtIf4AmSRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkrSF+ANkkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJ0hbiD5BJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJW0jZNPW6TUVZwg5djNb1GKJVVfHVNA1Fh4MhRJeXliDa69Jll3hTEZE19EtteNWR5XTwLOO9IzIK8pWPanrgDR45Irr9Hu2OV3by9AJEs5ruup5QKYqIqqH7Go+xENYTPvjZP6vW14sVpwcj2OsvOgUdczT9mCsmY7qwLPWyqowO3uAT42qZV4mfKcwxnmcUzvCyCz50RNZQ+R9XVBKyEg9eLVM0eWFcbbFNGOP7yFOnrrFBqrBNKE/TXSdbjPGEDt4ZUt3pYhO9u6ZykqwdDV56TrU2SizAf7W0yKceY69WDeiBl1hES2yB66CnHRG9sgPRhktRhd3WiI4cETm+sMmIrnyC7Xeydkwm1DFNWsOh8w5e0GU3wS0wX1eiRcmaLkSrk6fxyInhTYMtTjYeUDSnZ7IT605E1Ngdtx8oPeJ1f4kPfOEMFYOIyPv0wH/k3/5biJ4+dRKib/g/r+dT79y+G6LPf9bTINqtqT0Zj6hDfOXr/hyvK47ifU3wic/Ob4Pot3zFl/Cpn/Scz6GDz/ZpZxy93/ued/Opj7yDHkveUGO1fTvddd3Q6xhViZHqELueU2eo2l5x1ZUQ7c7QyD8iXvtm7B2wFT1y4jhsn0nNxXL8g398YCdED8zSI+Xp6RCH0BFRBb3NAjvrElvR5Py026URzGSJXsdMjxq6LHXXVxZUErZvm4FoPzENpJrV6dBlR2qiN4Mjq7zAKA9+Imrs7Ds5VS7ed3YvdQ2f90fv4QtLDkLW/OlGmy/8EOt2xDE6Dgjnt22nXUscvkeUQX8wHNOy0nxJBZi9+pWv4j/od6hev/XNfwXRuR3Us7z4i7+UT53h68hxRlTjKKzEaUVEDAe0Uoc1L+78u7+j6EfvgOhzX/wSOnREXlLFnGywIrSiwEI4GFEZi4gsMYO9yEoXieXDS/XCF70Qott2UrXlleSImOnS6yhwLtbF2dTrX/86PvX27Tsg+rSnPxWiN938eIjWuBBRdhJ1ZzSiTm2CPSY3/lmqjG20IrpiMKTRZuAqd6dMdOVnFmhS0+lRQerj0OgX//sv04nzxHQza7CdxLXNXbupjI1wETsizizS4L/AB44rzXHk0P186g6OnboZ12u6sDf+2Z9C9IUv+sd45MixY+IBYY4j8BqXHyMixwf+rje+AaKLxw9DdBabwZu+KNHRBw7gE+tduHCUfCYXalrfV+Ey3+lTtN4VEYH31eDBO/yJEyvm3K1X8HXNzlOfuIxfiO4+dhSitz/r6Xzqg/cdhGj37iMQ5WW60TAxvMlnqV972wjnmPPzENwX1DW86TT2ShFfspPe9QeW8V1j8359ahg8wW8lTWrhNDaugFwxT+IiXqTGonOzsxDt9Xl4k5ipce8wwifWxckUF+BIrV72cWpQYYdaJb4LJMZd3BzxF7eZjGavS4kPvzGb0cBsxF9icOYxi6UoIs6c5gEMNTgFduWBX0iL1DC4xnKSZVTC+V03eeLUXFL4y9cI29gM921S5aSdRHT+hVEB5rXiKlU7ygI/YmIRHWKeCedBRUSOH1i7PSoJOT7RChtwXpyJiOArxwdeY3pA3lrlMH8szB/bwGMmf2ztFp5F8iJJmD829Q/MH2sf3PyxlovLHzsadTxi+WNNa0uE+WPTmD825eDmj7Wjj27+GG8/72/MH2sxf6zN/LG2y5Q/trJ9o/yxlZD5Y1Oi5o+1mD/Wdqn5Yxi96Myxh3Y3f2w988fazB+bxvyx9cwfazN/rO38/LGfWv2nl7/8pXGZ88dWbJRFZv5Ym/ljbZsof+zhZZRhl2f+WJv5Y22P1fyxVVMTybiiXVz+2Op288fazB9r26T5YzV2iI9s/ti6Xsj8sTbzx9o2Uf5YOstZkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJ0mOGP0AmSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkbSH+AJkkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZK0hfgDZJIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSdIW4g+QSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSVuIP0AmSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkbSFlkzXrNxUX/6tkRRQQzfOad68mE4j2+z2IdssSohM8co77RkSOj6TE3atm/RM+78h84ohqPKYwXlndVLRr6kUPlwcQxduKuZlZiC4vLUE0L6kURUQ2onNnWQbRyWjEB1/R6XSnbq9GVJCiohJe4euoGjpyU+PjjshzuuuG3xYG64wuOyJqrNZFQbtzGcxSd11P6Nz1BK88cVv0PGt+ZBH9LjVW4zHVLK5aE2wPIiIafCb4sgZ4W93pdeKcVmdyngJfdo331Ss7dN566rs8d6tcOyZYihJ1JyXHhzLBNqGp6bJHFT2yJtW1zPbokS4OqInmutPgTUVEv0ct/HCIzwTfRpZsrHh33JebI6x20aGHHREx16MWo8EGp4818+prE+e+5trHQ7SKPkRHQ3pmtz/lyXzqV7zi1RCdtJ7p2i1TO/rVjfwqG2wQkgbLVDtme/Q6nviE2/jgT7iJXsddd34UotuCepbde/ZB9Jv+2T/F64pffcWvQDTHIvpZT7kRotuyRK+2bQ5rB77MHJuMG572ND71/e9/O0SLxQchuoRD6FE9hOjRYyf4wt56Hx2816E2dufSMYjOzczwqSt84Ikec6N2so6ImFSJBrxX0H1t79O8Y2d9BqKnscvjMhYRNfa423bOQXRmnh74wolESciW6KF1g+anNU6IKh6pRjRz1Dt0ebaFxWSAM633DRYpHNHt0yN9Ct5Xp0tPLDkX65Q4+Me1iDKnU4/GtG+W6PQCZ8YXZKPBbGJlJ6Lk+SlOSzodeiZZ8uR41wXOLBqcled46DEOEiJipqTGKsPbWjx1CqLJNbyGp1tYUAp+oLxgFVFiS5rh/PbIPfdA9LZrr4DodUtH+MLumb8aojyKKDN64k2GbVlElvOKFu+NR8adeUkqIrKSdu/PU0OXY7WtcK0sIhouhFjE3/u+99OReaoWMcSa+8m7PwHRW2+5BaIDXJKq88TryHFlNMNh2QSXC3jpJiK6Exqsvu3P/g9E6w6Vk+d/0RfyqUc4Jqxrqlx1Q4+si5PuOL2A15Ua6OLLXDh1GqKd1CeJAlf+c25jsQE/fjjRTn7/P3w2RN/3wb+H6F8foVJ06vhJiGapJa2Mv9PwKh92tzWO2SJiPKLK9ZE774TobXuoEH71C58H0XfliTXZqsLaMcaahQU4WUQr/EyzKpvWdfZxHhdZ4gtRjt3xCIcoFU5L6p10YVfsowWWiNh35TUQPb1Is5J73vUhiN44ppoVEfPz2yF6ZM8yRLc9SBPnRSxjEXHviIrK247SqfP7T0L0q59Dve2DH6dVjoi4dy8N+f5iQC3hyQfo4D/whOv51FlFU+P3fODDa//1iXys883OUhH927f8De9e8egIR6qJhR/++JT8ZoG78xg5T7UYXVwjT0z5cSza4e/Rg8QCS8UTZ6x5Y77s1IetCXYAPHfodmn5hddAImKMtSOx3tCk0jk2TrtosOOIiLzgr6vJhZCLx9NA/kLEtWOCDXhZJOefF/+FNDENTE19G/zeN8YCXOBKcp48dYXjhBGdeoL7JpI1UlO1Cms9f/hKfR5dX06y7vrDmT825Q/MH2vZRPlja7dw/thGaWOrzB+b8gfmj7WYP9Z2cflj9XgSF5k/ds5DXU+zZsuaNsH8sRbzx6ZEzR9reZTzx9ZuN3+szfyxNvPH2i5r/thGD/xsTwrtZG3+2BTmj7WZP9Z2qfljPDS6sFHwRn9l/lib+WNTzmz+WDt62fLH1pq6PGX+WJv5Y22bLn9spQ+/vPljKza4dvPH2swfa9tE+WPrtnD+2NS0sVXmj7WZP9b2WM0fW7UukeysmetglwvPH3v+mu3vf9/7Vv7B/LE288faNmn+GCSPxSOdP/bIppOZPzblxOaPtTya+WMXnysmSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkadPxB8gkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZKkLcQfIJMkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZK2EH+ATJIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSdpC/AEySZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkaQvxB8gkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZKkLcQfIJMkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZK2kLIsy3WbOp0O7JDhb5ZNoqFoNUpcTlZAsMzo1FVdQbQo6Mg5RiOiqmvaHaMlPs/JKPFMqizDMN11t9eF6HA45FPzQ2kavGt8pPw6BmO6qYjIMiyi+MTy/IJ+dK+qxlO31xmV8MCD/4uv/jyIHrrvIESf+3mfTueNOH7qJET/8q/vhujpU8sQ3bl7L596184+ROt6AtFTx45B9Jort/Gpn//sayB6331HIbp79yxEd26n6GiQKKKf/OQDEL3iwJUQnYzOQHRxaXrJPKehB3719bsgeuoknTrKHp+5zKlijsd0YT/0n94I0Q4+8LrCWhlRY2NVcBOLnVqO/U5EfP1XfS5Ej546DtHHP+4AROfnZiD6lnffxxcWNfUOi4sLEN2+bQ6i4wm1JxGR5fQ6JstLEH35S54G0XvuSdx1v7N+wLPWlVfugejCEtWO+w7Sq7z2umv5ws6cfhCidYUDGOzT9u6lpiwihiOqmHlO5WQwpAHMth2J2hEN1b26FV27pW6mHLx+qD7W2CTUqVFAJ6cLm+1Rl1dNBhA9sIfKWETsmKPK9YSbboHo/R9/P0RPHKFe6bprr+MLe/5zPhui7333OyB65NhJiA7e83d86tMLVPW++Iu/kPY9fQqid3zkw3zq537hCyH6/tf+AURHYyoJDxw9CdG/v58uOyJOL9IAvtenzjrD4s1j+4go4hJ236jq5Sv7JrryAhvwPR2q2MMz9Dq4LeKpVkRc/Zk3Q3TvXqr1RU7N+4fe9Ld86ls/+5kQvfftfw/RwZAa/wJHdBExHOJwtEcva4Lv+t05Df6vvyLRgh+vqBU9fuo0RPc3NAJ5w0Lq1MdpUvN1N9B8KsPR5nBEVZ6XCiKw0j7MQ62DzUlERDQX/2P3s3M4gMkTLUbUdHEz2J7wdP/kSWqif/KfvQgvK7bt3gnR//qav4Ho6SEV0Q7eVERM+JlV9MQqnNFn3IqmWvgPvv8DED12jMbY3/gFz4Lo0QVs/CNyLPR8Ww1W22QrWldUO5rEI02V/43lqf8FRYUz68UzVAhzXPmcSS0m9Pu0e4nj+4N33gHRqw9cxafet283RA8dPwlRXgPpdLhmJV5lhnUnUfHw4NUkMbz509e/DqL7ZultvvxznwrRjzWJ5fcc72w0odFmFxd36oqbMr6uRMXLcP/eLK3eJJepmwyXUHCprQia0d9y2xP41PPDeyD6WU+nd/2mP34rRHtYCKs68a0ky+i+eJWvxtqBX3giIhrc/YueRx3Ts3FJtsEmejn5ESfxNYT2bQoOp8Z8yacWERt8rylKahOOHj3CxyzxwrMSl6kHtHrZu5bmcTv37sPrivkdOyHadGkytf8KOvju3YllpeUZ6qzP4ErF5BivRSQaqzfjvDubUL3+6hc/G6Jz2Axef1Vi5fOtuPw+GNBl79tPi/P/+xB+SYl44S4q4fcNzmtPnjjtbzbqXxaX6EVPJtQ1RETZoQvLeBRR4XeW1Hf25RE98B5/ScdFJ+6LIzX+KTOcJOIogvMWks9kgq1ojWMQHotmZaIkLA3xmRTU2+Z418NxKhUEB7qdVtbKeVKLF7B6mRzycVuX4yCjwiXEdGYCLrLwPfOqafkwVoYe9sm5weG7Tn7YjZJOXeIAZoJVPp0ngm/zs55FQ76ZWVqcfACHN+99Dy3nRkQXn0mFNYsnoHm7BJo/Zv7YBh4z+WNrt3B7NZokknPMH2szf6zN/LG2i8sfy8osLj1/LNY3VmszyswfazN/rM38sbZHOX9s7Xbzx9rMH5uyr/ljLZc1f2xqxTx3WKh6ufljU5g/1mb+2JR9Ly1/7OHmjE21Ybti/liL+WNt5o9NOfhlyx9ba2oumfljbeaPtW2+/LE6i8ucP3b2IBscxfyxNvPHphx5E+WPrduCT43/M3/zx9rMH2t7rOaPrVqXSLYim8VR2UXlj61uN3+szfyxKQffnPljBU6mHtn8sXUv1/yxNvPH2jZR/tjFL+pJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJ2nT8ATJJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRpC/EHyCRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkqQtxB8gkyRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkrYQf4BMkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJ2kL8ATJJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRpC/EHyCRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkqQtpCzq9Zs6Bf0qWZVNKFpVEC3yLl9N1dDufHDcNaqsdZ9rZE2D15U4dbcsIdrgwfM88RtwJf4Bn3pxuAxRvqmI4N+n6/f6EB0PxhDNsozOmnomVdCVj/G+qBys/bN6+lurGjpAmdGVF0UHonv37Ifo8eMnIRoRd917CKIH7zkM0dOnT+OxCz710aMjiA6WFiC6Y55K0cdOn+RTj8m6Kb8AACAASURBVBePQ/T6a3dDdDQeQvTM6SWIdgoqwBFx002Pg+hkQm3Cxw/eC9HZ+Z186h3zPYhW9K6Cq3xVJdrJyZiO3ulQ+S+wTeBeKZqp+55rB7jBGW9Q2c/uW1OVL/CmImKMPdPszA6I9vtUOxYWqGbdccfdeF3R4NvsdqmzPrNwBqJ5nmhlM2zA6xFVzN///bdA9Lab9vGpm230SA9+8gGIdmjXuPra6yBa1zRwioi3vu1OiN56y+MhesP11NANBqf41FWdaM1oXyxFowkNAyIiz6hzqYv1D60u1pyuWm0T1hSnh7rgLMPhIl/WxgOAFdwaFTnd1NzMDJ+6mlArunCG3uYn7vgoRJ+ApejjH30/X9h8Qc9ktkt3PcbeFgeqERH33HMPRH/7138Totza7L/iSj71ndXHIXrVs54D0Y++5a8h+t7D1Io+sJwYn0+w6pUNldGlIfbUvURjlZiL5dSeZBtcdnZ2Xz5zNFgxeZwwwoauznCm9rhEz9KZmYfoAEcgp47TCPzOPNFcXdGhaWD25FsgOnn7eyBaFonB/yJOebKcxqI//4kTED10ksb23/3iJ/KFHf04jaLvOEFDlEFF0RE+7YgY1vQHx4KGfLsmVBK6M7MQrXGkGhGpdY70X240kObuMiICF44i6Ikduv9+iF53w/V85gLXE7gpy/GRXrGb2oRs+Am+sHxI7f9gQDPQyZhGVsmSwEWhmtDu9ZiiVWpsxQtiV+AyyD/+0n8A0X6X5mKzs4lRLpfhakLlZFJh8a4TvdpkkuhwL9olLj/y7nPz1BxxKZqdTwyD88AFgR71LC/4tGdC9Hk3J7ryoyepEf6Nu6ln+Yu/eBNEP/O5z4NokWqgR1xOEk0ZHbzBLi8iTuMK5Iuf9VyIFlViGsgqnEXyCjk3dFy8U8tdUeBAt5m+KnXWBEfgyQa8wCalLGn1psK1iE6WWNGam6Nav7xM3dbcDK2hDHHfxAgioqppjhncvPPXkFTFLLEknDhGi/PDK6gpm5/fDtEsNe7iwc8IV4MrbhNSfUdilWT1r6ZNMcY4vPnwhz/Mx6yxs14YUUk60qPLvn0P9R3zO2ghLiLmt+Mf9AYQ/OznfDZEt2/H1cnUl6/Z2TmInuFpYOpryNJpuq+nX0fP5IEHaPC/d54m3S/90hfyhb3yj2l95tbdByB66L6DEH3X8cSi6z/GuUO9/nVMmSlMrTgRMTdHrzLZs3S7NDBrcC2Cl1CSo9yN7uihU+OyEh45TzXgGa5j7OpSE/2sG2hZ9f+84+8g2usnkiKedsUeiP6jz/h0iHbxsk/x94yIH/hvvwPRsoOLadifTobYU6enLbRvnfrID6uAyXLCF8b4K2R69Qa74wwX57lD5GlFkahbURXUWecZre3UuFxQlomxKDcpRUlXXuD4JNlYZSU1Vh/5yEcg2i3omXRmqNre/qRb+cJ27d4L0TOLixB9//s/ANG6Xl+K2l96zR97uKc2f6ztUyp/bO0WbqOTy+Dmj7WZP9Zm/ljbxeWPrWy/qPyxc7Kz1fbc9a9tgswfazN/rM38sSn7Prr5Yw9tbyLMH5vC/LE288faLmv+2PnryecucmUBcKP8sYjIzB+bxvyxNvPH2i4xf4yjOGdfU8c3Ooj5Y+2Dmz/WYv7YI+vCv3dMreDmj7WZP9a2+fLHmiYuc/7YQ+eZ/jfmj7WZP9a2mfLH1m3BuRjnipg/1mb+WNtjNX9sVSuRLCJVdy4uf2x1u/ljbeaPtW3S/DFuBh/Z/LF1gwrzx6ZcmPljLZspf4wvRZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSdJjiT9AJkmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJG0h/gCZJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmStIX4A2SSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEnSFuIPkEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJElbiD9AJkmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJG0hZdnrrNuUZRnsUFUNHa+mfZsG942oJzVEC7ywsqAfU8sLOu+4GuN1RdR0YVVVQTTDfZuGoisHgNgynroeU7RbrH/16+Q5PdLTC6chumNuni6splMvDZf4wmosSFyAL/RH97Lpf5aXJezEBfh9H/wERIuc9t2xtwvRiPjzP7sDolhMotuhl7W4MOBTD/B9TcYYHQ0humOOnnZE1NVOiM7MzNK+Yzr1aESnXhglqu2b3vQmiHa79DaPHj0K0e3bd/Cpv+KffA5EF5cfgCg2olFiWxQRgwk1pDU2ODW2k2WGLXieasARv8siEt0We/+HDkN0NDwF0QP7b4fosePLEB0OEy+rW9IjHXEJb0YUbBKvI8snEO1hKdy5cxdEt+2gpiwiAvuOuqJaf//BMxB9x7tfD9H9+6/k6zp033GInjzxQYh+8i5q3z/92U/iU/e71E6OhvQ2uW5wpY5IvI5o1/o1W5pmSilaHWQmDpy4rOjgkHGuQ9EHjlMDvmdnogE/+uAhiB4/dC9Et83PQLSDQ6Mzx0/whd37ADVlxbTXserYg1S8d9x4I5+616EeczKhU1999VUQLQvsWSI+8IH3QfT2258K0d7VN0B08HdUqes6MVKdYAlvNhjBno3i2H44Tjbg7YJ07mp4orfRDHJle57qbHlWEg2OdDNqjk5XWIqu3ENHjrj6husgOuF5XE3Fe1QkhsFNQwc/deYkRI9esRui+x6k8UlELFV06vcfpVN3uz2I3nYr9ZjXPP5avK54xvOeBdEf/YlXQfTYkKY8O8tEA37tVQcg+vPv/zhE//0T9kG0KGkI3ckT5WSUGpitys+r4OmqnWhDI3jezctKB67YD9HxmMaiERE5PbSmQw+tKKh45ziEzpvEAks1pgbniTdQ+f/AwQch2uCRI2IZH1oHZ1s5zxJrbIEjxthv7dpFw/szSzSK2I2jzcP30+glIsZXUkvY7dDbHPEKS2oKWdf0vjKeoU4toQ9t5NWwOnVh3JXz1KA/QzVraZFmrxExN7MToj1sCYteH6Izfep3ImK0vADREqcGowH1HVmFq8HJ14HFbIJVj8tYahUkfuBrvhyii0c/CtGy2AbRJjVJrGt6LMu4hFjiEiKfOLGQnPgsEGVGl93t4oUlGtGIoLeZN/g1BPvixAA74q8/RDPQZ99KnfXuHk6rr74JokuDRIuxYzutYwQO7/nr0nCQeB8Vrnz+/d3UbT3vyY/DC6Pz1jjzjYgRfpLIC4oOhzRISH5HSS/+REREvz+lre71qIleWk505bO8tomd2u5raAReYRO9fft2vrASu54Sq31W0Kn7c1j4I3Zgt7WI3fFRfJVnUmVhgN+Fa1ypeOItj4foAw8cgejBB6jeRcSTnvE0iJ44Sp84776T5nHjDo1AImKCH51PjVKTmoj+BtPnMX72LcvEl8QCZ5G40pAK4/JLRPDH8Kyk8j8e0DBgpp+46xKv/MYdNIA5fpwK4QufSSuEN157PV/YLI4TevglcWmBxrG/8Sev5VMnxj84KqtxpJpMBeFpC693JYoRdqlVauCV49SY74s7xE4vUUQneF9dbGN5anCp/x9CfCYTvOsCl47qLDG84S/p/F2gwfF5k3wqU9bAzzl1ir4Vllh+O4v8mYa+LkXE8aP0iX92G61j33rLLRD92Ec/sm5Lbv6Y+WMbeMzkj52/BZsFHMqG+WPTmD/WZv5Y28Xlj61sv9T8MSz/5o9NuTDzx1rMH2t7tPPH1mw3f6zN/LE288emRB/5/LFzNhqfr9RNmEFWjfljU5g/1mb+WNsl5o/lU3qHC00KXbVxY2r+2Hrmj7WZP9Z2Mfljq8FkEszqNUy7SPPH2swfa9t0+WMrY9TLmj/20EGmX7z5Y23mj027MDrvp1T+2LotvPgzNW1sVSp/jNrnMH9sGvPH2j5l88dWTU0k6++iUvRw8sfG7e3mj7WZPzbF5swfK3Dp0vyxi2H+WMtWyR/jS5EkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZL0WOIPkEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJElbiD9AJkmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJG0h/gCZJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmStIX4A2SSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEnSFuIPkEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJElbiD9AJkmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJG0hZbfbXb8tx18lqysIZrhvPRnz1RRFAdF+v0cHbxqI5jkdOaN7iojoz/Tp4HjZi0sLEO106KYioijokTb4OmZmZiA6GAz41JPRCKLdLl55Q89kMlmGaFZneF2RZfQHdV3TdWE5OXeQmP5n1YQO3u3QXZ9epH3nZul6lkYTCkd0etsgmo3prquKLmw4SvxMYRMlRWvavVNQKbruuuv51NvmqCSMhlSAjx45AdHFpWMQffDYab6w4ZAqZr/XwegcRMejRGv1sz/3Wog+89Ovg+hTbn88RKs60YCfWaImZWePinhZtnqiNerxkE/NKqz1GRbwDMN1nWhPJmN6X50OvesKK/2hw1REe106ckQsYfs/0x4YrFEHNtHUCq7Eafdrrr4Kok1NlTpStePwA0cgevD+UxAd4JmrCd328iLuHFF26IFzr/WRj9Cr/NBH38+n/s7v/xqInrqPnlhU1BJux+Y9Ut3xqFUBzt8ytRSd3ciDBAxGRDRYr3sdasDHWLOa+UTFPHPiOEQP3n0XRHfP0YV1u9SUvfNtH+QL2z5Du2/fNk+nzmh8kuOYLSK6OLPIc3qd9957CKJZh0YvEXHt9dQnvu999NBuvuUWiBYl1Y4eT8QihqepO64mVIAbHKlmObVFEZFNqXrnTpeYbW0wZ1mpktzbJnG9Xp5g73D1bgjuPXBF4tRdmiTO4VxsD06XvuxLXsKnrhoaKMzNb4fo6EMfgejkyBk+dbbBRGnFe3GKedVOemLX7KZJ4olT1FNHxB0f/zhEv+eHXgrRX/gff0EXduWVfOq7Pn4nRIddHPzPUe+wMKYXnZWJupMav1+81ApK5NjR93G0yYskRepn9IuCGgW+sBybo6am1/H+O3HgFHHLfrqvp+yj6dId99FNDUeJtZ0Mp/w7dlFnzWO24ycSp+ZCWA2p1n/gPe+C6IFnP5kOvZumFRHRwQ53uEwXlhc0iphwvxNRljiexCnkmha4WbPxbPHgl8ULthHRwbVNnudlOZ26xFoZEXMzVP7rERWjq6+hhaPh6CSfmoeyZY+q7VOf9jSI1hWO2TAaEfM4dzh1kjprrvJVlVjH+JXX/glE/+WLPxtPTe3kMHXXvRIXGBuqHVVF8+4an0kSzzF5zt7v4zeFSFxYqvrguTNc7x0mGvC926hizs5SEf2Gz3saRI8HPZMduxMT5y6uoZ9eWLzoaIPL/hFx5OBBiC4NqO/YNkutzScP3gfR+W2JmdoAvwtUuMpRYu8wmiQ+SVzYl5ZYXF5qb+zN06tMfrqaxfWEZew7rthN06W9+/ZBtOwnF12pOeIvKVzhO7h+GKmFaG6OlvAr5ASXGiKig59ul/B7XzaZUjxWvfUdtLZZYU8dEbc+8XaIjob00eHA3p0QvefYYT51kVPFXOyuK4QPtv+maqYX8llcasiyxMtKLMDg3g2GubuMiAwHlPyphTvETmpZ6dpt9DrGY2oxnnwLrRBefeBqiBapEfhoSOW/wgWBfXv2QvT+hUSn1uniR3z8JM3reJzpEam+g8twai056o3HujkXwYgSx6Kce5CQ+pLYTTw0at5zHPJlOHstUy+Lu6YSV6WKPLH8ziY4CKkqnHdzIUsOXyrsE7EgTPCJVTRaDGzdIyJuuP5miH7yfvoasu8Kaqy+5Vs/b92WX3vVb6//I/PH2qc2f6xlE+WPrd3C62kbpY2tMn+szfyxNvPH2h5O/thg3fZHPH9s7Rbzx9rMH2szf2yKRzd/7Pzt5o+tZ/5Ym/ljbZchf+yc/Lwrr9ZsL2Lj/LGIyDLzx6Ywf6zN/LG2S80fu6Sad9ZGFcz8sTbzx9rMH3vIucfUYAnnFvgC/3vJ2GDAbP5Ym/ljbZsuf2xl+2XNH1uxUf0zf6zN/LG2TZQ/tm4L9zxT08ZWmT/WZv5Y22M1f2xVK5EsIqK7QebYiovLH1vdbv5Ym/ljbZs0fwySx+KRzh9L3ub5O5s/9rCZP9b2aOaPPRJLhpIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZI2CX+ATJIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSdpC/AEySZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkaQvxB8gkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZKkLcQfIJMkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZK2EH+ATJIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSdpC/AEySZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkaQsp66Zet6kaT2CHotOBaFOtP9p5ssTV5Bn9RZ4VdOyCfkxtUtFN9TozfGGj0RCi3W4XojN9OnhV4xOLyKKBaInPpJ5UdOiGjhwRWUkH53fd4GX3ej2ILi0t8oVxSajxkY4nYz74Q3+2QYHBIjoajSCa5bTvEPcdTxKVZ4zVdjLBZzKicjLGfSOi28Vy0uDLwhJ64sQJPvWeuW0QvWpCbcKDi8sQPXz4DESrOvHTjaMhFbNDh45AtNfv47ETJaHGn5V8698ehOjBB+hlfdf3fg+f+vBhOvjxB98L0bIoIZrl9DyrMRajiByfSdPqBC8ctgcREUUP32ZDtX4Z7+vKqw5A9EMf+wReV0w2auIiImIRe8ztnTmIViPaNyLKHr2OI4cPQ/Qp1+yE6PXjJT51d4Zex12TUxAdYqUuO9SpPXj0WOLCShpZ1dzb5lR3xpNER/8/X/GnEP03P/LDEH3Pe/6WTh3UikZElmPFxC1VM6V2TN04TaIBz3E8OY+laDwc0L6zidFmhaPNyYi6rc4OKoQllrE77znOF/a0m3dCNGuoduzevh2iY7ypiHjw6AMQ3bNnH0Q//0UvokPP7eVTj4L6xB23PBWiH3zX2yD6OZ//BRB98jOexRf2H/7Df4Ro0cHpErYYkyrVq+HwPrg73WjXJiIixwYhIpqaTj3AUfQQW8Irr6b+tDszyxc2v4NKeIa9w46gijmpEm1agTO1B4Y02rzqqmsgev+d9/Gps4oe6bHT1B0//vE3QPSG62mM0cECHBEnzlAr+u73vRui/+gffT5Eh2dokBARh+65F6JVRu3kaEAFuNm9A6J5amqQUzG5IBvNYRssBpEaJze4FrG0iAsCWeLU3GLwqRt8pDm2Nlfu2c0XhitDcQCj3/L51O/cc5q6y4jYe9UNEO31aEXrxEkcJ9SJBZYu9g5/+EevgehXPecpEJ2do0dW3EPTiog4sEBD9PvLXRBd6u+EaIWTqYgoS+odoqGmrJlW/puHim1qsSBRd8qSDrCM5b83S4NkXiGMiDG2hAVPHLB3+PhdtEwREU+4ifrEG/ZQR9/DFfJOQc9z3+49fGFHjx6FaBZUzCocRSSXUBpcquP7uvM+qnrFdVfzqSfYeWQF9WoFListLdG8I7kslOFYlYey8/PzEB0OEusYGS4rVUNqMa458VGIXrWfindEnMgWINoproBoN6Nnuj+n17H4wf/LF3akvx+i+269HaK7dtBKcnPqDj71dXuoiD79H9Cpl5dpuWBujl70s/Ykqu3imDrrd09oiDLAQtjFhi4iBkt0X6vyafW3h9OlHneXEUVFg5BOh9qEnThs6+PifImfAiMiw68hgyF1eTfceDMdGacVEZHhWIDXwPs4+a3PUIMQESPsXPjCPvChuyD6Jc+7CaKvf+8hvrAnPZ6m/Hd+lE59tKAntms2UUQnuAKZdfkbUEREscF0jj+jp74uRadDZZg/YmZ46rpODINznIsVOMbgTzy91HrvEn4N5Hq9Yx77DmyLjjyYWHS95sorIXryGA0IHzxC465PuzYx2vyrg3RtdWJajVU+tb7Is4OaB16RGspuHMLSHZH6ahY4vLmUDJYkfh2dLnXWBQ6hJ6lq28+xxcBHOpngLA8XNiMiw5LALeHSAD86JKancc8naZXv23/geyH6pGd+OkQPXHsDRG97ypPxuoJX0AdncFCXUbf1wJH1rc0rXvmb67aYP9Zm/tiUvTdP/tjaLZw/NuYnFuaPTWH+WJv5Y20Xlz+2sv0Ryh+rW1sizB+bxvyxNvPH2h7l/LG1280fazN/rM38sbbLnD+2we51atfG/LEpzB9rM3+s7RLzxziXBGevqbU288emMX+szfyx1UOe+8cGv/xi+U925OdMqybmj7WZP9a26fLHiqITlzl/bMVGA1rzx9rMH2vbRPlj67Zw/tjUtLFV5o+1mT/W9ljNH1s1NZFso8yxFQ8nf2ypvd38sTbzx9o2af5YYkb/iOaP1c15f2z+2JSDmz/Wsonyxy6pyEqSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEnaXPwBMkmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJGkL8QfIJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSpC3EHyCTJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSthB/gEySJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEnaQvwBMkmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJGkLKau6Xr+pLGGHpmroeA1Fs8j4appq/cWsdfrMKYiWBV32cDSCaJWP+cJyfCZ16xmuVRQFRLOMjhwR4wldW5HRI60burCy0+FT1/g22yVnrf5sH6JHHzgC0SZP/C5eEfRM+HWMR0M++EMXMf3es6CDb6sriD75pp0Q/cAd99HlBNa7iMlkAtFuZx6idbUM0aqhI0dEju9rVNHLKrMuRJ++g6IR8ewD9Ae9HkXfO8Gq19C+1SjxTLCYxOzsHESXBwOITvDIEREZNTjjCbWEd951N0TPLC7wmefnqZgdfYAuvZ5Q3YmcGrosUTmixp4HG9GELLXzNzxrD0R/731U648dOwPR3swMRGdnqIxFBLZVwSW4GlP5n8ELi4g86Nzf9sWfAdFty8cgeurMCT71X33sEESHWK3H2MaOR3RTe3fvw+uK46dPQ3SCV5YV1JXX40SXd9/990L0zOmTtDPWvbyktigiGhxjPLT7uLUlIiKvVp/JuYPkDw0y60SPmWgyiow6tRIve8cclf+mSvQdWUMFCRvCxBC6LKmc7Nu7Da8r5vp0X/MYXVigpowHyRHxwi/6IoiWXbqvZkxd3uwk0antPPB4iO47cBVEn3DbEyDaw27p9f/7T/jCrrmaTn36zCJEG2yBR1Wib8Dinxj8sDrVLVU4qTmzRGOnYzjG2IFH3r2b+vGImN9O1WcwwunSDA6hcQ4YEXlO1WffvisgOl6i2jHYtptPvXSI+tOZ7dsh+p4P3gnRm696IkQPHKCbiohX/AFdWPbhByH65V/5TIje+fGP8qlnMmzha4pi+x0Tnu+nOrXUAsyaP9ygW2/qDebFySPzpeH+3NqMhonhTdm/+FWppY++H6JPvI6KNy9ERESZU+UajmhWXi9RdC9PpiKyj1PtqJ74HIj2sbfdNpOYs+8/TqPNa19Cp54s07s+doJWCK/cOcsX1t1Br2PfMvUsf3lmCaJ56v/0MMIhepNjBZi6JLtaT3G8mBx3jUa41IbTwAkuteW4OBMRGTYZ+QPUd3RwhXBue2J+OhjQ2/wHN1GtHx37CETHR3BN9amfxRe2bRstq3ZHtKI1Gp+kfSdUdyLiC575ZIjWWMJne9RiXJUf51OfOkNT4zt6NLOuJvTAd+6iV/ngkcRiAo90GxxP8ueMgqd5EVce2A/RPrYYO7O7IZpnib5j775dEB0OaT6Fa5OJ2evefYkllIUT1BzN4SeJ0Rgn3ZGYszfYwG/bhuMEXBDYhmvFM326qYjIS2zAT2ETjWs7/CkkUl/NVi0uTpmoDnGpLcOaFRENf7NoqHLNzNA4oYNfzfhTSETkOe3+O7/zuxA9dJzayR/6/m/nU585dRKiOfa2NS4XzKS+JE7GNHY6dYqWhpZnenRkrDsH9u/lCztzP3XW183TGPvjPLxPLaEsDKli4leaszaqBB3sbYe4GhYRM/M0OqrwvrgZ3PCKH8LVJ8cHvmOWLrubGoF3cQllbo4+bPFt8ReivakiypP2Y8dOQvTmm2+G6JdccTWf+K/+x+9DtChwzl5TIZxMqEGI1COdYPNephYjILGBV9IiIkssfVIxS3zET9WOGrutLs7Kxzi84ZFq+pnwJwlOCsIRYc3pRhHc3+b4XWx+nhZsG5zbRsTe3Tsh+s6/ejtE3/M374bo0aM03xlgdxmp3rbTo0fWwUpdtYLmj4X5Yxvu/hjJH1u7JZE/xvNb88emMX9sCvPHWi4uf+zs9kc6f2ztFvPHpsYhZv7YlKj5Yy2PUP7YivVZZOaPTTu4+WPrmT/WdnnzxzaKXkBemfljbeaPtZk/NuXAl5Y/xgkbG2WOrT/IRqcwf6x9YeaPtZg/1nYx+WPnzn2hk9upYzDzx9rMH2vbdPlj1WQclzl/bMVG3+bMH2szf2zKvpsnf2zdFv5qNjVtbJX5Y23mj0058mM0f2zVZNqqMhf/i8sfW91u/lib+WNtmzR/rMZ1jEc2fyw7/yOC+WPT9jV/bL1NlD+WaFUlSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkPZb4A2SSJEmSJEmSJEmSJEmSJEmSWbSe3gAAIABJREFUJEmSJEmSJEmSJEnSFuIPkEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJElbiD9AJkmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJG0h/gCZJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmStIX4A2SSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEnSFuIPkEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJElbSNkvuus21dHADk2G0ZqiWZbx1VRRQ3T/Fftp34b2Lcv1t7lWkXcSF1ZVFM3pvpoxXVgTdOSIKIuCwg39hFxZUnQ4HPKp+X1NxmOIdjr8SOnCmknimVRBF1Z26dQYHaz+03iDuyu7JRx8e4de1nN3jCD6/M+h4v3O0RxEI+I5z3keRL/qK78KonlBz/Mtb/1bPvUV+3dTdM8eiM4cpYPnB+/gU584dRyiv/f2IxA9dPIMnTqnpmw4olcZEV0s/52yB9FJh2rHwulFPvXycALR0YSao05DBfgn/uOP86m/6/u/DaLclHG/E9gWceMfEVmGDQ7vjqdOdmpLxx6A6Nc8ZTtEP1Tug+gzP/vzIPqSL7uGL6zMsWep+cdJ6YkV2J5ExOD+90L09NteC9G//didEP2bw4mScGSZuq3ZHo0T6gnVrNmZWdoXS3dEREYtxsLyaYgOJkt06tS5Ox2665/8Car1L/vyL4NollN3GYEdecSk1Vit3bKm6jXTNpKcC39KB4d8V+6nrnywPIBoRJQlPbQip4qZY3Rc08hq//69fGGzs3jw4TJEr7/2aoje9oSb+dRzfYrOb5+BaHcGB//9RIGZnLobovWuGyBaBlXq4YCq7T/4nBdANCJuufEmiN5z7/0Q5Sbhvgeoz4qI937k461tF1wHuTVK1l+89HaLsVZVU/RxNz4OomViRhNVTU3KaExVj5ujuqY+KyI62G3FMg1Wed/eHI1UI+I4TuWOHKPx+b7dNPh5x/sPQnT/bGL2emA7ddYfOEi77+xQb3v1bmyMIpaPUBHdvWMnRJdwZlF06HX0u4mXNRwnHtqqbndtqVhzSRtVzyYxxuA2gRdYeAmkniRqxzUHaCTcwTHIjqto3j2/jYZ8y4sLfGH1mEYCRUMFuMEZzUw30Ypm2OBkfWrrKi6iOI6NiKahdz3bw6kxNv7bZmgYMLNjG1/YqRE98G5Jj7TgFa0sMSvp8EodDxiL1X3XjI0f2sjVsklVWx5P1jU9sRxPvnNbYkWrv3AUojddQbufOXUMolXibUQ9oife5wVGrHklNtHHRzQgjIgOvo4ZvLDtQ3om4ybRis5to1MfP04d/VyfKub21Bij36EFxvcfoWa2yOng3Ctd4v+epcD9ubO+6gDdckQ0FTbC+EVjx/YdED1zhtZFI+LAPpondnH1cqN19RVll8aiTarezl91gC6MhxEoT+1bd2kksHOW3nUPFxOyPnVb2RzVrIgojtI08MYbaGg0wTXA3/v9RN9R42zrnGzKs+3iQDfwiUVEH+tundOFTXCVr9+nwf8k9V0gx0bhmquugOiDp2hW8oev+UM+9Wc+61kQzfBDZLek8t/L6IlFxN7t8xC97sqdEF1epj5x8Qx9Ddm/6yq8rlhepG5rBstghQPd/fOJilnjpxb+zr6iu8G3yLLE0TtOtSISa7I8IOzg6KfBxZmIGGP16ePUYBZbjGaUGN6McfB/8iSNMQ7eQ23sU5/6RDpvavZ68MhhiN548y0QPfIgfQBdxgXbiPiqF3wmRF/1lndCdDShV5lcfk8ueYFsWody3tkhlhpj1PzlC7938Hf2SFX5DGsmd7Yd/KaQWH7EW47U2k+O7WQdVO+ySLzKpuGPs3TlNbaEHI2ILo4EyiNU9aKiu96DKz/jMnFhpxZO0JmX6YmdGNEK4XKrBPa3rx/3mj825eDmj7VsovyxtVs4u2xxKfFMzB9rM3+szfyxtovLHzu7/RLzx87OetYmn5x7yOaPTWH+WIv5Y22Pcv7Y2u3mj7WZP9Zm/ljbZcgfW2v6Iz1bN80fazF/rM38sbbLmj/WnfL19gIyxyJSVXplb/PH1jN/rM38sbbEhwX8JJ2umat/Oe0zgPljbeaPtW26/LHRaBiXOX/soQuYvt38sTbzx9o2Uf7Yuh4kkT9WUBE1f6zN/LG2x2r+2Kqp4/yNMsdWXFz+2Lnt5o+1mD/WtknzxzJMWHpk88ey87sh88emHdz8sfU2Uf7YIzJFkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkrQ5+ANkkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJ0hbiD5BJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJW4g/QCZJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRtIf4AmSRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkrSF+ANkkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJ0hbiD5BJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJW0hZN+N1m5ooYIemaeh4Gf2iWdNMLvjCplhaXIJoWdCp6yqDaFVVfOoso907RQnRwWAA0aLb4VOPR/TQsqyGaBO0b1HSi46IpqaDF/iu65oeaV3ThXU6iQurh7R7gwevJ1iAH9Itp7+XGsv//r17IHr86BGI7oltEH3u3jMQjYhy/16Ijo9/FKKdXddD9DOe/YzEqTMq/9ld/xeiH3jjH0H0pltu5VOfWhxB9OiJE7TvAlXMwWgI0T176EVHRFFQGT5xmt7mcExlbHFItxwRi8vrm/S1sMGIqqGG7sETi3zqMqcr54qXY6WfjLA9wfY5Us1R4N586Al3iBH3HDqMB98J0ZvnqIhO3vIqiJa3Ph+vK85sezxEZ2ZnIVpElw79gdfwqccP3A3R7bt2QPSG666G6PF8mU99+pPHKHqGSvjs7DxEl0ZU706cOsoXVmF/ujSkYlZja1OU1D5HxDJe+bHT1GTMzGD9SHW2TYUDmFa9XrulnjY+WbORK27iymq8sCynl9XpU+342Mfu4FN/4q67Ibo4oBK+Y+e1tO8ydWrv/thBvK7oPo4q5lV7qXbcfCONMW65+XF86irDoewMlfCqNcdZazJI9B3dObqvzuInIVrXdPAGoxO66oiInV0aCTzuBS+A6HBIJaHsUeMfEa/4rd+iMA4yNuqrV7ZndaJicldf4DSwmqELmzQ0SOj3+3hdERldedmlNmFuZgb37fGZecJUxHaI3n/wfojWPF6MwOcd/DKbisKHT1FffPL0Ah064jm30IQo2zVHO5+klvDKOVqIiIiFHVRG/+7gKYgOZ6mNnSzSMxlPEgssGQ7v1/aJG614bPS6UysoiSUUni5t30ZT48ffdB2fejymdnJuGzXv+3btpCOPaHy+e/duvK7oYb0d4cIRO3WKylhE5Dn1mD0cMXa5ueGpVkSJ77raQ8P7+RyngTgXG+1OzNlPf/CDEN07Ryt1T3vqLXToLNGA/87/oqlcwtRG9qGNXLMSDXREhm+zKCh61ZXUAu/Yji1wxOAuWi6rcfc+9qezqUVXLsNT5x2rCpwalAUNA3Zto546ImpsZ3H1JXrbqWc5s5Do1Lo5leHtM/Q6Ol0cJeD6eURUFU15duFywfISDXTrVI+ZwsvvdNdPecpTIPqk227jE3/ykzTvKLCjXx5Sz7I8TJQEblKahp5JjQ1ONabXMcQ1wIgI7MpL7NR4Wj3fSf2veq66BoLjDjY4ODXoYu1YOP4gXlZ0sE3YuZ1GVryilVxC4SHfOdOKxHhCY7YS18oioo/XVuD6TIaVeoR1J19IrJC/4+1/CdEhPvAbrjoA0RL7nYgocEFsjD3Lrh3UxvaWaYk7Imr8mHLLVTROvvOjNAyY6e+E6Cvf9Ha8rjgTtNBx204qJ8dO0xN7RiQ+01QlHXxh8TTvHhHj8fQL6PWop854xh7RwQvLsGZNeNEK11QjoofXth3vq4/tZNFLjTGwcxnjXOyB48chOhzQM6nxG31EzM3RUPaee+6B6KkTJyF6+9OfxqfeeYDe112H7oPoX3/4bog22MZGan7K0xaeBkZEvnFTmeyzMkyP4UySPKdhQIWffSMiK/Gug069tESDugnOd7o4PonUM0nMWbDaNqnlR85H4lPXuN6bbCdncVX2vgeo29o2R/sOxtTaVKkMFlxVjTOLtHCadfBLSnu6ZP6Y+WMb7f5YyR9bu4XzxzZKGzu3u/lj7VObP9Zi/ljbxeWPrWx/xPPHztti/liL+WNt5o+1Pcr5Y2u3mz/WZv7YlH3NH2u5rPljG35gzerABLAsM39s6r7mj61n/ljbJeaPJVK8Ul9QE6c2f6zF/LE288ceNmxkE/lja7/jTDuO+WNTguaPtWy6/LFOJ4vLnD+2YqMsMvPH2swfmxLcTPlj523hIV+DJcH8sTbzx9oeq/ljqxYWp3wq2rZzJ+xycfljq9vNH2szf6xtk+aPcTv5yOaPrftX88fazB9r20T5Y5e2KChJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRpU/EHyCRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkqQtxB8gkyRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkrYQf4BMkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJ2kL8ATJJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRpC/EHyCRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkqQtxB8gkyRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkraQsix66zZNmhp3oWiTNRDNaopGRJFhtCgompcQrSYjiDZN4sKynP6Ab4svGw8cEdFk9FA6nQ5Fu32IDpaWE6cOOjXfdTUeQzTDH76rsRhExPJoSLs3tH9vpps4+spB6g3KOZbRPKfacc3VV0K07NKRs+EiRCOiHtLbPNW/GqL9agLRbdt28anzI4cgWhx+L0RvevzjIFpmVHciYq6g8n/rDXTXC3cdhugIS9HC4oAv7MSYimiJFbPGqrU04vY5mqCHNsEmeqNSf3bfAVXqiFhaOA7RTk4XVlUVnXpMRZQbyYjgVpb35t6hwEYyIj7z6U+iU2MB7xTUqWV43ZODf4fXFaP6gxD9wF3HILqnQwX4tmvpVUZEU9PbXDpFxayT06kftzPRob79ILUYWb5+OLTW8ojua7hMTXSOTywixthjVviuR3hhkSeKaI4/RLs8oUah4N+wzVM/cctluDXaXLtlTflv2ht5TMd1JyK4WmdBD/zEsaMQ3bUr0Z92O1Trt81QQfrk3Qches2N1Numnkh0Z7dD9PpraHhzzXVX0aFzahAiosByVjVUd/KchnxlPzHG6JT0YJoaZxZjilY13VR/F72siJjbTQ/8DA+SsUuc6SYGyVm6sGxooynPyvYs1VhxOeVRRG+W7qs3S41/lmjpotujg3d7VKm/6Vv+NUR/8j//CJ969459EF1efACis3266117dvOpT915L0TLknrbXgcrNQ4S7rybindE/IPnXgvRd5+kJnp5SKe+eiZRRN9yjJqjbSWVBB7KDis6MlfquICFjlXd80ae5x51s8G0qEiduuQ5P17YZ3zGp0P0iv2J/vTwfXdBFN9GLCwsQPTIYapZtz/pZryuyLCxajA6NzcD0aMPUr8TEfWYBnUdnAfyilZ9lKbVEbG0SCsV+RX0PureHET7s/RMBotLfGE1NjgVLkthSxZNlpgQ5bxwitFm2jB4dcxf4XJuD9dPIiLHAfyLX/RCiN71iTshOl5OvI6ZMS0mRD0LQb7sThfrfERM8HUEPbRFvK+6ppKQHPwkloux2k7GtGbVPXCATz2/Y57CJY6dcPI7OkV9cUR0CppZ79+7B6IzM3TZJbb+yUniRr3hQ1F6WzyabHCCGRE7tlFLeOre+yC6sEDPc3mQ6DsqrFwTXEzOu1ROjj+IJSE1Ar/vEI1Fr7yKSng1pLvOefQSMca7nttGE+dlbjEKKgmjUWJJtoMNToWz1xIXIsa4xB2pFZhVvakTEHzXNQ6NImLbhNq6CtvJvKFTv+XNb4VocoDdwXYy8HMeN0anj5/kU588yf0pPxMqZntwlhcRTUO14/++8w6IPvMAPbEDV9Aw4N9+3bP5wr7m1z8M0Rfv3QvRW/ZQOdl3PDG84QlRXiY+zkbE0tL0U/AUMllEK5xjdgOXhnCQnCdSCyLHzyH8/aiHCQB799CrjIj7D1LfMTNLve2oovt64MEH6cKwjEXE3XfT7HXPLtr90575LIiePHmSTx0deuAvfi4d/N130zTw9EJivZdHwjU+8EiNnaqNFyu6WMYiYjLB4Q0OjRIDwtS3Eh6EZBk9k34fFyd5EYS/CqfSfi7lmSQXXesKP87i0n2FX9LLIrEGXhU0duLp7TImimR42RMc0UXEcIALLPhE+StkO2+hMH/M/LGNTv1YyR9bu4XzxxbOpIZt5o+1mD/WZv5Y28Xlj61sv9T8sdZNr91g/lib+WNt5o+1Pcr5Y2u3mz/WZv7YlGObP9ZymfPHcD1h42DemD82hfljbeaPtV1i/lh3ymgznTm2Elz9p40aU/PH2swfazN/rO2C88em4Pyxtaa+VvPH2swfm2Iz5I/dv2b7E267JS5j/li95m+mvzPzx9rMH2vbRPlj67bwCsz0tLFV5o+1mD/W9ljNH1uVl1NWFTbKHFtxcfljq9vNH2szf6xtk+aPVdiOPrL5Y+v+1fyxKfuaP9ayifLHLqgPkyRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkvTY4A+QSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSVuIP0AmSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkbSH+AJkkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZK0hfgDZJIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSdIW4g+QSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSVtIWTfVuk1Z09AeWUbBmnZtcto36UlPug2iS8tLEO10Sjp0nbqwBu8an0nZoehwMOYz88EH4wFE6+jQoVOvI8fH0sno1+vyvMAzU7RTYDGK6Ha7EG0q2r2eYPF+SJ5Pv7scf7PvppseB9HuDD3PBp92nmMBjhjjfe08+l46+FE6+Hg85FPnHXzg+LzregLRw8cOJ06d0ZU/cOQIRE+fXoDocEwXNsICHBFNYK1v6OBVtb5NXosbhIiog574aEIvKxtRtEmdemGRikpRUN1psN/ZqD6exYUspcb2plPSqYsiURKyBmsHnntcY0nAtqie28UXtn3bFRB9VkavMpssUjSn9jkiej2qtmfOnIDo0oDe9Z33P8inXlymHnMwou54zMObhkpCkSqhY6z1gQ1OXtLzHI7xyKkeM7CN/f/Y+/NAW9K7oPf+VdWa9nj2Gbv7dHe6O2QkA2MgJGEQmQR9HRABp+tVLg7oVUHw9XpRceRVHFAQkKugDApXQK5wAUMgCUkASQjpTJ30PJx52vNeQw3vH7t7n9271vo+yTndIaf39/PXyfrtqqdW1TPXL6u3NqkmHB30E0W35p/PirbGxHrfJ831WVnT/rDCdse9TURkBfV17/nAhyB6ZGkZoj//5l/goh966BGIft7Lb4dotz8P0fd/hM5ccT8YsVNRTbjrLrqwM2ceg+j5CzhTjXjFa2nynxd0YYMFuidNnih6PKYeo5xQj1EE3dIONtvJ2rnEhcUAol38XjvbtFwa1xSNSKwdeIrSzBi1dj9PLhETqxZs1i+772UQ7fAcI/Vj3Q0O1ty23vS5r4HoP/uXP8BFv/GzPhWiX/QFnw/RokM3dGtng4tewNuyMKBK+PJPeSlE3/br74FodecRvK44trII0f/xa++G6Pvf+zhEv+YNx7noj56jMXFhkUaHDCtwf24OoolJcnrtcL3sbnf6gytmNFDcIImICLy2Hi4NZhW6q4sVOCLm56gmjMdjiG5u0iKxxCY/pkVeRESG0+SCJ3UjPDtuzkTEzphu2hJOCDM8+drZJ7nohaNUh3HATLSOIc5Fu7hrFBHD0Q4VvUiHZ4ErtdQcg2cCHTx8VE2ZgezNbzu4EZeGK+sG9zF4z3VhkWZlEVFiZ7W5tU4nn8N1R6q3KnF1MOjRLV07uwbROZyLFmVipdbBe7q9RkXPB10218CI4AkQd9FZQ5PkcZnYAw/c5e7g2NHFdRzv7STH06q68T2rxaUFiO6k5l1Xrl2G6NajD0L0+DEq+smnznDRDz/8GERP30HbSvg04uKlKxC9+/SddHDE4gLNCWts9RXu/JTT+tj9rj54P0QHp++G6BDnAfUCTRcvX0nsdxUFdSl5h/qEqsRGjcdGRPGxvWqZuqLjopObrv2MRswc5xhnH3wMol2coPDcPiLOnKfndf4aDWrHTtG64+gxmuVGxBJXJH5XskHd0fEyMdN90TI9jkev0Rx7Z0zHfviBsxC9+45TfGEdnMrO96lhnj1Dj/LexWNc9DquLLrp4ThWjixN/bzXScw22VyftpXqmpZLOJxGga0yIpb6NG3r4ITwyJEViF65cpWLnl+cfjN3TUb0rXkveYLvBbIisUN+9NhJOjm+pryySm9S+nOJBdEYN+e7eOV/8cs/F6Lf+V/fzEXXOLPKcpx34UQ3ImL28rbCdVyk5smJnU8cO1JL9mhw9Vtg0aMRJorg7mTWS/RF/BKfH2W3R71NlXqx25mxT7WrxL2dHGcR/KUiosZmP8SsiXKD5pP8nn1xMTHQLxynoWeIL0DLir71a1tT6LeaPxbmj82Iv1Dyx/Z/wvljyR0D88emHG7+WIv5Y203lj+2+7n5Y1PObP5Yi/ljbS+k/LFdu1lk5o+1mT/WZv5Y2/ObPzZjubQ7dZmVP7YbMn+szfyxNvPH2m4yf2xWztguzhDYV8SMgPljLeaPTWH+WDv68eeP7TuW16eJKZ/5Y23mj7Xdcvlju58/r/ljfBLzx9rMH2u7hfLHDnySyB/DhZz5Y23mj7W9UPPH9kxNJJuVObbL/LE288faDmn+GGbIPLf5YwfGKfPH2swfa7uF8sdSdVaSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEnSC4g/QCZJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiQdIv4AmSRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJknSI+ANkkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJ0iHiD5BJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJh4g/QCZJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiQdIv4AmSRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJknSIdOr2Z3kDB1TllCP2ZBn9ohmeOCKi4nCdQbDIC4iWEzp3UdCxETGeDCGaFwMqupxANMsTvwHX7/cgOhzihWV0x4KjERO+cjy8wN+26+DD2tne4gurJyVEx+MxRKuGKvCeWTW5DqrE2fEjEK0r+l5V0IUlfymwPP0SiJ4tT0L05InjED32xHu56GLnAkTzThei3S49rDrRI8STZ89AdGMNT95QBS6DqmiT6so6RYeKruj4usYo1sCIqCqqSE2G9T+ny56Uiedx9fJliC4v0+F1TRdW4x1v8NiIyIOedY4jU8NFp6rCkxV14HfmVEX53M1td0H07dcW8Loiu0o1/E0v+XyILj78NjpzYmCJwdw8RPNsA6KXr16F6Or2iIuejKkS7uA8gbsyrGIxGtJgGqm5U2BnlWFFyfPU8wj6Xty0Ll6kzn9x+UVccI7dbN1umPu/C/dGiS+dCHPT+7H/9osQzXF6s7WxyUWXPWodc0E9xqkBFX2ySxOnu193J1/YkaOLEN3aWofo57z+syFadGgKHRGrO3TyDz34foh+9ue+HqJNTfckIvp9uraioRGzGlN3lOGEcNBs84VV4x06OR6bldhjbNCYFRF1lZqZzTarZT39eaqvKrFonidfGq9B9GXYbDvYA0dEg0vjBz/8EETvOnU7HfsoTasiosGn+e53/0+Izg/6EM1SY8cxjN8zR23n4YcehOgf+pxjEP0DX/WZeF3x6MMfhOiP/ssvhOjX/5+/DdEPPJTorP7Um+6B6Hve8wBE+/0liI7xcSSHeV6zx76VxWg8fWNhbm56z7C1RRsRkZqilCV1woMBdUdZai3GPfz6gx+B6HKHil5dXYXomXM0NYqIUyfoWWfY4Wyt0yQ5x+VnRPRxx6vGrbYOToPz1IJoNKJ+cvHqUxCd4GR0G8NNaqstw62hyYQm8Hmf7klWJ4qubmI8nVr/r3/ImwlZYvKT5zgTaOiyTxw/CtHtzcRKbXmRZpsFNswLF2nEHNx1BxfNOzCrqzSLmOD2y1x240vIiCgyardX8VsfnaOB/uxTj3LRx2+n1UGzRF3Z9g7Vk2u4oo+IkwVuNRfUuBrcLhvjer/i7iaevRptB/FxjrZp9n7+/EUumTcYc9xMWN+mlcUdd93NRS8v0rMejfCtQVD09tupYda8QxKxfJQ6nJ0dmqJs7dDjmJ8kOqsj83RPdjaox8jn8bKvnYPo8X7ingzHdMM7eEt5x6qbY1cWsVPRTsWeqeNXr0vde4VjcUTM4TbIXAc358+tUtE4uxktJC5sc4c2f3J8EfnYRapF49S20keDFjVLyzTaBm6wd1Kvp16NNWWyTM/62DF6dfXkUzRdPHZyhQqO6HaocT11iTadeGO0LBOVv8I5RpbYdo2I6BbTbyu/U+ZRKSIqfOvW6+KGbcnLwETRfG2dDk1grl2h1jGHbxwiohzTTLjTo6InuMu3NaSR5SMP0b5QRPRwtdXDrmxzi4ru9hL7GLM2AXa7CWMJAAAgAElEQVStHKUXTJy3wC8hI6KDk7qqoofFs/eIyGc3EAg9c3LsCfFxRINfKrVwLnj3Btcd/c4cRPlL9VPNdohtp9fFpTF+qTz1KGvcOCpm9JBPH4t3bFwlhnLGOzATPHkHK+EabjpFRHcTnxc2Pd6oaL+Fr+dbzdz8sRbzx6Ydfcvkj+3/hPPHEi/xzR+bxvyxNvPH2m4sf2z38+cof6xpfRJh/tg05o9NuTDzx1o+0fljTx+WRZg/NoX5Y23mj02JPr/5Y1Q4tKymMX9s2rHmj7WYP9Z2k/ljvF08K3MsIiKud0TNjGZi/lib+WNt5o99vBL1P7UDv+8PpzQT88fazB9ru+Xyx3Y/f17zx57+kxkP1fyxNvPHphx76+SPHfiE88d42DJ/rM38sbYXav7YnqmJZLMyx54+5Ibyx/Y+N39sStHmj7XcovljnJzz3OaPHdxvMX+sxfyxtlsofyyZlyJJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiTphcMfIJMkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIOEX+ATJIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSTpE/AEySZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIk6RDxB8gkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZKkQ8QfIJMkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIOEX+ATJIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSTpEOpFnBz6q64Of7NdkDUWDojUeGxFZXUP02rWrED124ghEy2pE0abkC+sOenh4hcd26dST1D3J6HH05+YgWk4mEO0VHS560Kffp9va3qSi8ZaWFV1Y0cE7FtHk9DSLDt2xjEq+Lu8UUz8vSzp+ZzAP0cur5yF6dIUqcKdLDzoiPniNLuyx0RZEm4sbEP3KV3waF730yJshyr9xWFdU/4setbuImHToptUZ9RgT7hNK6ouKTuLCIqPvnU+vXE/rdKlhjsd02RGRYdFdbFxNRd+6THST8evv+i2IfsVXvI6KbhI9IR2L405ENFgLU91/qnC0Nn8MovMXPgrRlZUViFZDavLriWoSOfaTmxvUJxwZULubbF/jojfw5FVF4+n9Z+nYCfYnEdEf9CF6cW0bj6Uz5zk12yI12vK37vWoyyhr+tbdIvE7s6MS60pF9eSjDz0C0Ze+4qVcdI0zgbw4+K3zfd+lGU/prJrm6Q8LuupINlueOxVdehxLfZoGjLeojkVE1aGqUuLDmp+nhrmIs4hXzWH9jjhyxymIvviNnw3R1ccvQXT70ce46PGE+uhXzi9A9NH3vhuiL/3013PR5YhueDej/iSxmKIWH2WTmqpWdE+aHCcwOdX/SZborJq63aVcL46H8nxGb7T7eTErfP3PsCfEe9pr9Sf78fJ0MhzjdcV/+/H/B6JLS0fp5Fj0p2C7i4iHH6RO+BWvfDFEbztBF7Z8ZImL7uDj+LwezTZ/YY1a1v1nqRed+5l38oV92mfQvKt5kpYGEdT0yuEOF13U1DA/4wjdcBxso5xQ9e50EwvnbDjkP9gzmlHby3L6BfA2RUTs7x/aGmz1Ozt0wz9y6SkueKFPXfT2Bi2Nq2Vqmafvugui8wtUgSNic5seRzWmZ93at3uWBZyBRMQDQ/peL1pdhegijrZFQw86IhqsCTvr6xDNurTuzhaoyec45EXE8e7tEK3GOG3DgT5LTUa72HI3ayp631ZVOeVD/NJFamlQ4pZsBH2vq1dWIXpkkbrBSM0EeLl06nZ6lGtrtISMiBL3WEYjGh0qvGOjEQ0N49U1vrCjKziobdL3Or9Gvc1cavKfbdG1TTDKC8xixpiyZ1hgJcZ1d4UDaoOd1axN4H2H80SXKvCdd56G6NxcYijfWqdnvb1Fg9rL7jgJ0SrVgW9v0tPMBvQ4lnHsmOvT+vTcVXrjEBFjrEhra1RFV44eh2i+mZhj8HuBzaP3QLS7TEXPLVDDHKX2u0Yjmjst4rFcvas60Wz5XeGeybSd9i2c8iUdx12+aswra6r/FS4ht7ep3UXEUzVNYEa41TAKKnqBXypErD3+GEQnA2qYd3M1S01vapytrtd05Veu0WZyv0sP+vt++QG+sEUcrDcLelj3rdAce32S2C7YwZs2wcn/ru6MyXCvj2+rU29x+B3QpKa208U5dvKNM0/qxjh34jqW3HSdx1eNi4u4DVJTTRji/T73+JMUjrjtttsgeuIYzaLH2IGfuUjvoyPi9GmaouzgZsJgQEP5APvniBjiC+vAapYedmavepJvIXmjY1JSqy8S24+JXrTCTriHryT4sjNcBiZvZ97DK8f55HhCtaiXSgComhvf0d3mCpwqentEXcoXZHRhK7efgOgqrk8nqe3HCp81VpMY47vwKdvU5o+ZPzbDCyZ/bP8nnD+W3DEwf6zN/LEpzB9rubH8sY8lr+wG8sf2f2L+WJv5Y9OOpTObP9b2nOePPfN5HuaPTWP+WJv5Y23PQ/7YPtn0oneHcnirlufmj01h/lib+WNtN5k/Nitn7OmiU2/5ny5i5n6F+WMHmT/WZv7YlKLxnV1iz+pj/n9lTX27Yf5Ym/ljbbdc/tju589r/tjTJ5lRjc0fazN/rO0Wyh878Am/K5yaNrbH/LEpUfPHWl6o+WN7piaSzcoc23Vj+WN7n5s/1mb+WNutmj+GHfhzmz924H+aP9Zm/ljbLZQ/ltislyRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkvRC4g+QSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSYeIP0AmSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkHSL+AJkkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZJ0iPgDZJIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSdIh4g+QSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSYdIpy6rj+uAPDKIZhn9olndNHxyDr/0pS+B6HC8A9GqLiGadTtYcuQF/cFkh4pu8J50ioKLHpd45fgLcj287KqiM0dENZlQNPU0QZPVEM0yqmMR0ZRYdEa3tNNLnHzXeMZ3L3K640ePH4doPbkG0SvXNiHaxDZEI+LYfVT0+aYH0TzocdQ1VYOI2NqmPoQPH46pEo7KERf96OoQor0ufetBhy5sZ0L3pKoS3WaO9SQrsJ+sqeh+v89FZ4kunYrentD9bFJNp9vtQnQ84Qujb819TZ7qMTic6MmwP6lTRV/sHIHoyaCTX75KfcLa1TFE3/hFn8kXdu7sWYgu4ciydvEyRMeTRGdVlXTlw4oaZt6h+l9lic6qn1ElXFjAk1MNTVT+JjVcFqmZAMhzbjs3VTR3ZYPeHEQ3NxMdeN3QlY8nB698ONk/Xuw1vWbKh3jDk3OMokN/8I++9vMgOpinmrA2Ssy7rlymxvW2t7wDohubWxCdW1qA6PyAHmVE3PVGmoFvfvRhiBbXqE8oEj109LGK8irmyOo6RN/6rvdy0Z/yojshemLlGES7BX4vnsc2ia4swxEzw9E6xyVP2Uv0RTm2jsTk51nR622h0+lERJb6UWyeHfHBA6zhRUHN9r//9M/iuWNznZaBI5wkP/jYUxC968X3cdHdzjxEn3qCTn7q5DJE+VFGRAdnwv0+1fDb+3Tyj1y+CtHunaf5wt71tnMQ/azX3wbRAicJ2zvUx0bEw4+fh+g9BXazWL0vrlFXlpxCfOwr9npGxzWZ0edUyTkGzp2KjA7v9qizWllc4aI319cg2tRUNNf+lWPU+a9eo/V+RKwsU9NbOU4Lh/kuzVQniaVWHDt6B0Rz3Ffa2KJVSX+e+qJI7VntVDSyrN/xYoguL9EdSy6ct2u6aUO8pTnulZWpKR83Te6Dp86g9xYEPNHNUz0Ghwtci5UltvkU3mPZnS3Msr5OXXSGTT4i5vs4T56nW9rN6Z7dv0XRO1KrknVsehkuphYWFiHa4GQyIi6OqRbmx05AtD9P93MyTiwSy216mgXe8Ax3bxqcJC/MD/jCtrZpUcMz1cceewyiL3npvVz0YHEJoqfuocOrjGaq13o0KkXE4M4XQbScp03XjYya7ebFixAd301jVkQsLtKVr6/ScLw9WoXo0t2fzkVP8FkP5qifnOvj5jx20b1BYlBbPEFTlM01qsDJTRJW4OunfcVM+SzHRp3c7z09T0XnOK3rFXRLhw0N5ePUQP/U5gZEF+epUW9tUue/HrR6jYhtnGOPS9w46tIdK7GPjYgGn9fLsA6PduiVRIEj+actJgb6owOarF7khV5Os80JbiZExNWG9sD7uOTZVZXT7wxvRPd61NtERI71pNfB19k4uU9uMI62aSawWdMd63apjp04RfOTiPjN990P0SsbtISscYL+0jvvguhJvJ8RcQp7Uc4u2Nyi7r3XSVTRy1doxMxyqifLyzTl+3Nf/vlc9H/4hV+F6M6Mmr8r+b6jmb1dnOGyIqmDrZ5XvtxJRmomUOHbqQkueZIvp1iNS+OsT7c0w4fV1KkXu7jk4bcKc7ghkMyM4tQdvrBL52lzstujdUef3ymkdm96/JoypwGxamU6mT8W5o/N+oMXTP7Yvk84f2xnix5lmD82jfljbeaPtd1o/lgdN50/VrdOsP8A88fazB+bcnLzx1o+wflju57JIjN/7CDzx9rMH2t7XvPHotnfY1y/yN2eJDvYnzwrhcz8sTbzx9rMH2u7yfyxWTlju2Zljh0wK5HM/LEph5s/1mL+2JSTf/z5Y3s+9hyAqa8nzB+bEjV/rOWWyx/L8iKe5/yxXbPmq+aPtZk/1vaCzR/Dc5s/1mb+WNsLNX9sz9REslmZY7s+nvyxUftz88fazB9ru0XzxyB5LJ6b/LHhs//nvpObP9aOmj/WcgvljyU6L0mSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEkvJP4AmSRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJknSI+ANkkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJ0iHiD5BJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJh4g/QCZJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiQdIv4AmSRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJknSI+ANkkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJ0iHSaaI68FGWZXREQ79ZNplM6Ni84KupqxKi4/GYDwdZUNGdvMuHN1UN0aqhY8sx3ZPufOI34Lo38SNx7Yf7bPiwIrKMvhjXk6KgG57j48gyvuyogi4sz+mONU3i5E9fw4wLzDI6eWexB9EHNo9B9BU7I4iWdeKyP/r290L0pa/+NIh++CMPQfTqGewQIo4tdCA6xu9VYX+SzXoMz1hdW4NoMViA6Fy/D9H1ceJbs6JLNSHwaWIVi6pK1IQcW0fWoa4saupju6kO/E2f/yY6d7UN0QY7/6qhousGv1RE3WAffRNS7TKura1CdGOHKuF83Hif8O5//2/xumI0oRp+5EUnKYpNvqBgREQTeDgOxydX5iH6kbOXuehBh4ruYLQpqZrVNUVxUIpIDdbc6pugRznG2UtEnL7jToj+nW/7ExA9izf88hVq8pG8Le0L3/dFpx6792GqXSa693JMN63boc5qaeU4ROeKRF9026kViN59JzXMd7zl1yB6+RoNl1EmJoR33E9Fx/oQgsVgEaLnnnqEi37Jy18B0Xc9eAaip+4+DdGNzcS3fvQC1eGNq5sQfdGdd9GpK7pjvS7VsYjIcdSbX5iDKE674sL2Fhcd9Y3PjmYNxbufJ0/cx9Elx3XH6gefguj/vLYD0aOLVIEjdUvPnLtIx+KZn3rqSS76rrvvgeh8n2r48gJNkp989Akuegln0Q0+jje98j6Inn/gEkRPnsSWFXHh4ipEr45fAtEiuwDR4ydXuOj3nKVu9q7baHozwiXP2gY1zKpM9Bgfuzw1Ph6Q2DWKyDr0Bw0e/sgj1GxPHKWOLiKOHj0C0fE8VeATJ5YgurlFQ8PkxIv5wrZP3UGHd6medLt0x9Yf/RAXfezOo1T0iNYd4zFVs+Y0tayI2MaakuPCeXmROqsC61hq8RpdHFmWj6xA9OLVKxBdWqYaGBF5YgeSN0mmfOu9D48do02na6t02RGRdemuffSjD0L0JLa75Ip85QhW0TFV0UmXGvX2QuJxxCK1+jHOjhYvn4Po7S+iIW+4TV8qIsYldTjzd9HJz25u0Km7iQXqydtug2i/x9MA3Go4lngcTU59wrWNdYiWJc2xeb0/SczLokhsNdPh/Xnax+gUdD8jYmudvnXnBI0s+WmKLuOqJCIG+Kx7PZyf5xQd4ZDXGyYubHubWke3T7VoaWEZonWqJnQLqgmDedwNxg3fiqOpNXsH79nRo9THrq5TR9c0iSlf/rFNIXv9KQ8944NTs81eYu6EjQs7qyLDkbpOzMBX5mkVWXVwlxu/9bEsscs3KmlLrDvtKVyHXRlPEiJiMqGiewMqOsNt6rqiFxaD7oAvrNOjP7irQ/WkxjeJO6nXNBO8pd1O+rVvvz994bN65SoclWyUHZwo8/459v3pV1cb27QDszBP9aTBHvh/vPWtXDTWsuhww8QMgIdw9+bxHg4NEZdx2vaK22goP3byBESXlmiWGxFVhvkYE3ydh7WIt+ki4vM+89Mh+pbf/E06eWpgamYPLsntxxwnAs2UNxb7juW0h9QcI8Meg3t/Torgb51stp1UHQaYYxJVnZjeBC4NqgmmDOE9yVKvaWJCfzC4/W6IvhLXcbyx36ReOU9G1ItOcKI7ukybrmVrCmH+WJg/NsMLJn9s/yecP5bKVzJ/bArzx6YUbf5Y+9w3lD+2+/nN5o9NOeS5ySgzf6zN/LE288em+rjzx3ZlM481fwyi5o+1mT/WdrP5Y7hwgIG3acwfm8L8sTbzx9puMn/s480Zm2rWtoD5Y23mj7WZPzY1DjHeiOP8sYjrHV05bfPW/LE288fabrn8seFwGM9j/tj1mfmsLDLzx9rMH2u7hfLHDnzCKWAdTFgyf2zKuc0fa3mh5o/tmZpINitzbNeN5Y/tfW7+WJv5Y223aP5Ygxlgz23+2IH/af5Ym/ljbbdQ/tiNJydJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJuuX4A2SSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEnSIeIPkEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmHiD9AJkmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJB0i/gCZJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSdIj4A2SSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEnSIeIPkEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmHSKeusgMfZdnBT54dpdPlOf2iWTWe8NUUOZ29HI+p6C4V3eCZ+StHRF1XEO0WBR7dUKxOFN3t0feq6xILpmOzostFR0bfup93IFpVdGyW0x2rgo6NiAyr2WRC1Sz5rHfV9fSn1uC1beyMILpV0mXfdnWDLggrcEQsYD159P73QPTupR5Ex6NEPdnA1lFXNR2MdSz5rI6uLEN0dZtaB//4YlFQ2aMJnTkiekHfui6oT8gaOjZL/Whkgx3OEDvh7/vBf0tFDx/lot/77g9S0dUQokVGlTCjzibqydQ7RvdhvxwbV4XnqVOlND1qPmduuxOiKw9/lIrGmnDi+HG8ruBW3TT0vcYjrP9logPvdKnwPKPo0Xkcd1KPYzKhLpo7nLLC/gRbZp6qjBn+AXdHS0ePQfQ7/vHfS5S9+hAEJ9vrEH3zm38Bot3527jkcU19Xdm6peW+21RPq6J7H/YHfThzhuVGRB/ndMtHFiFaYkfXGSxw0dUc1fAjJ6jo3/+a/wVPTQ2zuXYNryvysxcgOlrbhui5p56E6B13neaiH3jgAYi+5OhJiP7Mb38Yoi999adz0dvb9L0uLqxAdPHaGkTvvYuOLYfU7iKitXR7lgkuDTodqt+rq5tcdHdK47q+OitwQbS0tL8CX9n715EjRyJiZz1RNK8sqhEtErs9almT83TDhzU9yojICl4QUf9e4bO8uE1dWURcefQ8RL+goCHvw4/+Cp0a5/YRMcbJaien6GOP0GXP9+Ygev8HqEOIiA5OGX/2V38Lop926ghE7779di76oUtXIbrGq3JcJD61QPdkUlG5H5dZy+R+f/osfVgn9nY6OA2ucD21tEQj5mAw4KInJVXCxZe+EqLvWaUx8fS9dOzx+Xm+sPkB9ZN5Tnfs2pjmGNkrX89F1yPqEza2aMhbWaHZ5lw/sV0wwh4jL6j+D+ap/ueJjbjEyrnGNfsEFzUrx+iejMeJ7YIML3xpaQmia6tTNo7qZ+a3vI77GHY+6Z4M+lTDJzjkTSqqgRHxSE0nX8aFc7dPI+Yy9kUR0cfZUfDK4sQpiHK7i05iVTLAxtUZ0JB3bIHWYh1sdxFRdHF/BpteB6dGY+yfI6I/oGubG1A9GQ5xcxKrd5a6JxnugXPT6/do2BrjVkNE9PFbD7r0OK5cuwLR+fnEeFr3cGsI+8kOdjh97N6rJtFZrW/SsLW7vphlWNIEZmEhsWbvYZ+QY3/Cr67yxHuW1H5XSRWJ97F5zpbhcBkRBb7luW7aC4JOh3qbPLUq4T2WVdwDX8DtxzKjO9brJVZqn4EN8+qQLqxcoJ2fO5ao7UREXVE1K/FpltiVDVMNM7AmNGN6miWu93mnuUjtuiZeSeOgxu9PK5zlRsRZ2qiIHu5U7Jq1J5zY4m4Sg1qvR02v36cL6+C5eSEWEVkHe1HeEHjgQxCtUu9PS3xxwIkNTUN9QhWY1bCzwxf24REt9B67Rttl925Q9JX3vIiLPnXkKEQbHnrW6bKr1IKI5wldzh+oEnsRgOdsMTsxYFeBCzl+M5t8W5ljRcIaOv1dyfXoBLtRfheSmkV3OthjYB9bpzqrSYl9HR6b46qkTr3E5NXB/WfPQPSVt9F2wQ5msPD9jIhy+tvwp01WVyHKt3vQKtr8sTB/bOZfvEDyx/Z/ws+aR4cwf2wa88fazB+bUvTHkT82OvD5DeWP7cerA/PHDjJ/rM38sbZPcP7YM583Yf7YNOaPtZk/1vY85I9dV5f7V2rXL2M3r+zZ+WNxIIXM/LE288fazB9ru8n8MV4az8oci4j9bXxWDo/5Y23mj7WZP9Z2A/lje5IvRK5fw7Tmb/7YFOaPtdxy+WPdziCex/yx6+19VgM0f6zN/LEp0Vsnf+zAJ4n8MXwvYP7YlKLNH5sSpWJv0fyxlX3/nppIxrvBN5Y/tve5+WNTijZ/rOWWzR+jMz/H+WPP7hjNH5sSNX+s5RbKH0slI0iSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEl6AfEHyCRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkqRDxB8gkyRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkg4Rf4BMkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJOkT8ATJJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiTpEPEHyCRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkqRDpFMUz+VvkBVZBtEaoxERDQUX5hchujPZhmjWVBCtxhO8rJjU9AdFUVAUv/S4HHHRvcEchRt6fL2cyt7c3uGi55fohm+t4w3PBhDtz/UhujNJ3JM8pxueYTVL1kE+SY7HVx0650I+D9GHt6iKnojEdVdd+oP5eapFeVDRHbzbEVGWNUSLogvRusZjg6IR8Sl3nIDor334KYiWDZ18nKiEiXvSZHTyDtaipqZ+8J57X8RF/9Vv/maIVhWd/NqTvwnR9W1q8hHx/g++D6Jl3aMLi5JOndGxgR1dpHqMEkcHftJNqj8pazr5uQ514BuXrkK0O6B70kldWKehmtAMsNnOUXRhkbr3iBhPqHWUFd2xHFtHlifmM2v4OMYTitbYY0zwS332Z38GX9if/8Y/D9Fuj274ePUJiG489Otc9IXLVyB66eoaRO+8816IXl6n+xkR3Q4O5U/PrK73DN3e9SG2ul6Br5fSeeaES8s02m6tbvKFVSVVs0k5hOhgYZlOfXyJi+4v0NypKWiSUWOjLrAbbPBZRER0cX5zeQuC2ztUE44u4dQ/4ujJ2yA6KKgn/JzXvBqij12jPjYilpboaZaDIxB9/CLNIk6fpFrU6+OQF5HX2MXjzCpr6FFevEYXFhGB1ayH0/vxePo92f08Sy1IG/xegUN5PcYOHO/JqMT5SUSJ9+SRCZ18HPSst3eoZUXEdoWH9/GOFfS9sjKxND6CA9MQx8RuRdG7K/rWVTfRY0RGNeFURTX8OD6O8fnzXPLnrWCPkWMHjtVsG2fgiwsLfGHDncSSf081o5UNd6bftxPHaSEWEdtDKpq3hpaPrEC0nCRaR2A/ubxMHfgdp2+HaK9Dlb/IEl1ZjevubgdH2+A+NtFsr16+DNGjR4/SwTk1vZ1U0XNLNDHrduh79XoU7XTpcTQ4e4+IEXZHkwl9r16PNliSgxrvSnFPN3VOt/chLz+TePcmcC46wppwjOtYRByhXrSL+6p9rAm8iRcRnQ71//PYy5Y4x8iDxp2im5iBD/q0NKh5HwOn93mq6Lk5Kjrjvi7Dk6d2KrZx2Cq61CcUyX2Q2bjJR0SW4RYKttuqpoF+OBxz0XfecZIO36AxceUINb1+H5t8xPw8deAV7t6MRrQg2tnE6Q2+AIqIqqFBbTyhG77Io1IvsRab3gs/g1tHr4frfa5Fqfk5795P8J6UuAfCmwkRcfTIsdnB64vufNom/wSHLShfepgAACAASURBVH4fFxEfvLYK0bl5eppdHG/72Fv1xonRNg9q1zl27x181tujRI/BrXqM1ewSTmB6qZeYGd60IX6vAqfBPdw/H48T9yTHt2YNdmVlzgN9Yty5sE03rawSuw0Rkc14O/be974XjuI3UxExruhxLOJWW44Tws31a1w0vpuKD370AYhO8IZniUl0NPwHOLtp8FnV+MKiwCVkROQ4T5hg03v4qSch+sSZM1z0G179GoiuzFNnde7iJYgWC5jVEPGO3/otiC4u0mB97VqimsXsJ1Kk3iTy+z7OPSixJvS7qZ1PXMDmmIXSwWbb4A5JYm4f0cGieXFb4fymSm26FriZVuLIUuIr/iL1JpF7jB7etA+v0eunr8Gd/3InMdpWOGJexRcxl2+n/a611q6R+WNh/tgML5j8sf2fcB3k/j/MH5vG/LE288fabix/7OnPbzJ/7OkFwPUi9vch5o+1mT/WZv5Y2yckf2zXwSwy88fazB9rM3+s7ROYPzY68Pms/LHdkPljbeaPtZk/1naT+WOzcsaeOTbVJ0RExInj099Nmz825brMH2sxf6ztBvLH9pg/1mb+2JQLO2T5Y5yWsOsm88d2NTOmheaPtZk/1nYL5Y8d+ATzx+LqJu3AmD/WZv7YlKJfiPljK/tLqaZ8hVmZY7tuLH9s73Pzx6Ywf6zlFs0fy/BZPrf5Ywf+p/ljbeaPtd1C+WPPZfaYJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSpE9y/gCZJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSdIj4A2SSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEnSIeIPkEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmHiD9AJkmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJB0i/gCZJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSdIj4A2SSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEnSIdL5eA/II4NoWVcQbZqGT57ldPJJ4MmDTl7kXSy4xuuKXk43qqqo6KxzU7/y1jRUdF2NIDqhGxZ5QXc7IkY7Q4j2+32IliXd0p2tHSo4UU2i26V7kud0w0cl3pQ99fSLyIoCDrq2vgnRvJ5A9OTLXgHRp37r3RCNiKhLCHZyuuzLOd3xE4uLXPLKAtWEQY9O3sP7ubOD9SQiz6hdb43pnuxMKDqpqAJ3Oz2+sK/+6q+D6O//ii/FoqndbW9e4qJXn3wPRM88+QREN0dU9JNnznPR9957H0Q/8NHLEK0b6o5GOHZkOCpFRNVQq+fD+3NUvesyUfTmkLroI0vUuMpjJyB68ckzEJ3rJapo1HTlVzfpjvU71HZWiitc8sljKxC9tL4N0a2Sij5952ku+nd++6MQvedF90L0r37Lt0F0ZWUFouNxoivbOPcwRFfPPwTRR594BKLdXmIGMphbgugdJ6kSrtGzig989MNcdFlRNbvj7rsjIuL6t7vj9PXnu7S813bu3/vwtZ/2qt1/fOSBB7HkRLPNgvr/ToeGrWKOml6+mGiYDQ7WZUP1P8Nja5yfd5bm+MKGHeqEB5/6MoiurNPk5+3vf5SL/rzPeCUd/pu/A9GX3vcpED1/cY2LXsIuusaK1Fs8CtGmHtOZm0SzbTIqOsvo8HJC1fvsYw9w0YmV2oSe9cKz5pPXJ8yDubmIKAZccmys0vPihV6Fd7TBVWBdJpYlFfYo6yO6Jz0crMvUwrkcUkXaxG89wiXkkS71JxExxuF40KO50zJGJyXdsRnrs+sqnJjxBJ6XkEVq7IguHb6xTUPm0uICHbtFC8w6dVMqnGPvN/PvZvQ5vCSPiBL7/xw3WC5fpYXD8nxiPO1jNRuNqP4X2IvGPEVznEJERIYdeDmiGSNvpvV6icdxx913QXQT+9heh/ro/nxiFtHvzUO0xn2MXpee9QR3jub6iaGl2qGakGFPONqmhXOZ6jHKMbUOXp8uLS8/889r7Q9r3O/iGhipxzHBtrO4QDe8xIEjIpYXaVWS47Zq0cH6j18qIkYTGk8b3EzgWdnS0hGIrq6u4nVFhU9zaZnuWBcr8KRK3BPuojPs/zsZRceporsdnG3iTl2N0RyXS0eP0uw9Iq5eoYGJ21aiG8T5eUSsrW5BdLhD0W3srLh6R0QHG1fRoxk47jTHBLdkz9dX8bpic3MdoutrNHca4LDF8/OIqHAfo8Bdbo52B9SLruMbh4jY3qHZJg/W29vUvSffax1dWU78RUREHFma0mtxj5Actn5nRPWsz1soQ3qUgwFNJpPvrvp413pjGnf6NfUJPdyciYgGR70CX04tDKiecB8bEXlB35pHhxjRZc8VdGyT+i9sVUM6eY0NM6twHZfqMe6nPjj6PIGJiIi5GeuaC+cv4HGpFxYbuMYsqYrye8Y17IEjYnWDhi2qoBEZrtkr3txJHc6badzqGyy6SS3JR7hnmzd0w/mNc439SUS8/T300vnO22+D6BYuDcpUBz6sqJr1CtqSbVKJDdns7qhKdeAZrrt5GsATpya138svHUpsmDUOed0uzdl4RRMRDVYkThThVxK86I6IBre8Onh4sv4zHvTeP8B1R0bf+qll2gNsxtSyImJxkzaO5rv0NJevrUJ0Z0pCReot87OZP9Zm/ljbJ1X+2P5PEvljqR1488fazB9rM3+s7cbyx3Y/v8n8sbK1J7Y/o8z8sTbzx9rMH2v7hOSP7TqYRWb+WJv5Y23mj7X9ruSP7X6+cHA++awUMvPH2swfazN/rO0m88eyDA9P7SLumrU2N3+szfyxNvPHphSNx+7LH5uC88eeVcq02mj+WJv5Y223XP7Y7ufPa/7YrmLGXML8sTbzx9puofyxA59w/ljFkx+ImT829Vjzx1pu0fyxl+/799REslmZY7tuNH/s6c/NH5sSNX+s5RbNH+O9nec2f+zA/zR/bMqFmT/Wcgvlj91UbpMkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZKkW4s/QCZJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiQdIv4AmSRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJknSI+ANkkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJ0iHiD5BJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJh4g/QCZJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiQdIv4AmSRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJknSIdPL84G+QNU0DBzSRQTTL6BfNMBgR0WR08rKcQLSuaohWdQnRPKdyI6LT70E0w5Nn+KUwGBGxtbUF0U5Bx3cHdNlV3eWi+XHQ7Y7Y2dnhkwO+YxExHtMNb/BpFp3Ox3INVTP9+2XYOiKjW9od9CHadCuInr82pHIjRnjTOvi4BtioL66ucdHHuvQ4Th2hb33biWMQvXB5nYterbDH2KEr/5t/++9AdP7U3RA9d/YyX9grPvUVED3/8LsgunblIkQvXUkUnRXUz24PqWF2+wOIfurLX8ZF70yoml26/FGItkei/c7imY+fPDX1oL1/VSU121e95tUQPXfuDES3yjFEI2K4Q61jfkCD2spnfRpEP/yRxyHaHfF1RYE92dGCbvgbX0WtY3nhDi66Gm5D9MIqRYclNfm7Tq9w0d//L/82RHsrr4Lon/vz/xtEF+eWIPpNf/FP8YUdz1chWpc0Otx+8jaIbg1pChERG+v0Bx/8yBMQfd/D1B0tLy5z0UWPpihHV1bgk3LqoPZMNzKZUAPodaiji4iYULtOzCK6PA0uuORxhV0KzjGyHC8Mm/x4lOgyuthFl8fnIDrcpDp2bYunk7GzQ4ffcZq6owYXHi+/ndpORHzB618D0XqRiu5jLerXVyFaThKTn16HesJxzRWYKuG1DS45mopqUlVRZ9XrTZ8Q7n6+ubqaKJsrIRad59R2cpw4dQeJ5WtT0+M4vkDRzQaXPE1ijrG8NA/RPMeagK1jgj1GRPQKXBrj4dtjurA8qIqmOtEoS+pScuwKm4ZqUVUnOqvEAhajO0PqhCe43unguBMRWWqjY8+s+jjrq/HOT6T2WPiG9wp62MnxdGGRJmYTnMDz2DEc0rF1qp4sLCxgnIpe36DRgXvgiBjiMnCMc6dig3rRuTmaBkREVlyDaL9P2wUXrlyBaIk3vBzRUisicI2YuKXrGzRkbo8Suzc93Bra3qQF0cnb9ha/12/s8RNHd/+xdnUTjh2lpnyTCV15nlHT6+Lc/uraKhfNQzluWUUPLyzHXdOImJ+n1cE2TmW52W5v06Mc7STqycICDfRrG/Ssl47QWqzCmWpEXLm6CtEav/VwTL1Nv09fKlLj6TVcvW5uUtF5Rsul5eXE6vXaVVr88puUn/u5n4Poi++9h4vOcGo1HFJF2sKxY6W16D5gY4NuOG8/VjjadjvUDZYl7aRFRGD/3xtwo16FaDFjzbKHn/UEu9kBbrqurlOjLrqJ1xk8CZmfp6ZX4LwrsZsQsba+yn+wa2tryhfMC5qzRZaoCQX28EdPrkB0gj0hD+UFD0sRzYRax06GaxZ+HzdMzDb5aXEfW2OT76S+Na8xE3K68AxrQo1vZiO1xiwbarb9LjXbyVbiBeilK7T5c/TkCT48IiYxfYJUVvStO7jzExE97I7qjGZlJa7jrqbeJOKuUgQuIWt8xcmvbSMim/HCd9cEcw/Kmr51gevTOrVSC9xWSnxrfkufWjiXeE8eP38BomO8Y8m8B/zSMeaXbqmHXc/uC7GziUh1wvwSkycJyfE0se+ET5OLrvFBd3CSHBEF3hNeOCd2KpIbVrxvitUoK2gfIznbzHCO8eVf+eUQ/eGf/GmIXrpKi8R3/PZ7+cJ+/Ye/H6LNz/8KRF81pqXBsVZCkfljYf7YDC+Y/LH9n/Cb31lpY9evzfyxFvPH2swfa7ux/LHdz28of+y6s2fPHvhkf0aZ+WNt5o+1mT/W9gnOH9v/uflj005u/thB5o+1Pb/5YzN2EXf3Cmblj+2GzB+bdmrzx1pR88dabjJ/rMGnlVyVP/Nns6bx5o+1Lsz8sRbzx9r4Nei+/LEpOH9sv2xaf2v+WJv5Y223RP7Y/q3GD3zgQ/E854/tmvU+xfyxNvPH2m6p/LFnfcL5Y1uYYGP+WJv5Y20v1Pyx66Z1p7Myx3bdWP5Y/kxjN3+szfyxtls0fwySx+K5zh878D/NH/t4o+aPtX1y5Y/xpUiSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEl6IfEHyCRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkqRDxB8gkyRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkg4Rf4BMkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJOkT8ATJJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiTpEPEHyCRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkqRDpNM0Bz/KMvxVsqq+4cKqVlkHFEEn7/cHEB3WFUQ73T5Em6BjIyKajE5e9CBa5AVEx1XJJWdUcowndMfyjKJFhy47IspyTCfv0pX1+h2ITiYTiFZloo51u126MKxmkzEVff0kMeOp4ck3t4YQ3Wiomi3ceQKin/L7voQKjnj7j/8URPtdajsFNuqveePLueh+h2rC6voGRC9c24ToepWooutrVyD6rd/yZyF69EWvgehf/ZZvhej2NjWNiLjtNnqao511iH7dH/3/QLTIV7noqqIanufUMNfW6GHdf/4cF/3u33kQoh3sCbnN5106duXI8rSPz+79a2F+Hg7f2dyCaFVRs8WRISIia+iGb23Tw5or6Oz57cchuv3kRb6wORxavuKLXg3RajSC6IWrq1z0k+v0ra9gtKkpegrH4oh44toCRP/BX/tGKho7/7UJ1aK//53fi9cVx5am1uGnfd2XUic8v0jfuk5N2daGNOV78tI2RMdjqgnDIQ2IkRrrNzcOdkf7Pzl3eUoNf/TRR3f/UeKZiywx5et16J7UOGMcj2lSV6VaR/RoetOZpwurKooWs2Y1Tx+bmgaX/K1pTDz9pa+D6ItG93PJd77uMyH60M+8DaIb69Qwj9x1Nxed4bStNzkP0W7vNoiurdGqpNxIzDGioYaZd6i3qnDdceHqVS45xylfg02vP6N6736+nhpPa5ysVkGjbWANLxs6c10nlq95h4p+dZ8a5saEvnZ5lGYvEdHL6Gk2OEepcRpQpxbt18Y4O8L10gh7jKaLPTBOJiP1NMf4NMfDm5ryjSc0Js71aQaS43i6jndsOEnck4ZnMPtks/5wxn2bX6QvFRHr62sQ3dmhecIjjz0J0ZXlRS76qSfPQLTA2VG3TzOr7RH1wCU+yojoFDTQX754CaIrx1cgunqN7nakxvoc9wDXVldv+MyRmpj1+3RPauxP1tdpWZ38zy3U3E9y28E+oUzdkxyPb3KKTp137X04HO/AsRlvL0b0elT/3/f+D0D02Ao1zP6AtqQi4solmoSMcQU6wmg5SsysRiO6aQO88p0dOnY8oo4uL3D2kmpcRUH9/3DI27mJonnnv+J6hG0nWQknFV05P8x13NvhjehUfxLjMT3NLr50uHSJuvfNTdoXjYgG12JcTzpYT546k9g4GuF7AX6anRzXp7jfVfHme0QPN39mTmkiIgKvK8ryGhed4bZqF8fTS6PEyUGemgaPSqrhozmqwB2c/JRYAyMxJF5XT5sP5Dg/544uIo6eou33l7/8pRD943/86yH6O++nnYrFxcRc9Hd++70QLbAWvutd74BojpPJiChxH4P3w3o9GvJOnTjJRV+8SF0KD9Y8OCR6jFQVLfAlZtVQNSuHtOhOlZwYMUt8sbtrVk+7g6uS+TxRRcfYvd9+nF46XLqySqfGlzgRESW1+sGAxlPeas5Tk/8K8wf6BRWdGG07+K1TK/KKMy5wMXUS55NjHBoiYoBrsau8y41fLCuS/+k7PDzxtjB16tm3tNNJ9KK8hcIdOE+NiizROnhVzkksNb4E4r6Ij42IDIeeCncIef7STU1vdrDVd3BRU+AMZZLqwXPcaj7/1FmI/uHf+3cg2hu9C6IPPvQAX9g9p++A6O/5Y38Iosf/049CdNy6YeaPhfljM7xg8sf2f8L5YzPTxvaYP9Y+ufljLeaPtd1Y/tju5zeUP3bdM688ri+s9meUmT/WZv7YlKLNH2v5BOeP7f/c/LEpJzd/rMX8sbbnN39sZ3rT280rm5U/thsyf2zKhZk/1r4w88dabjJ/LPG1UvV/16xEMvPH2swfazN/rO0G8sf2cP7YflPfbpg/1mb+2JTgrZA/9ie++/rnv/ALvxjPc/4YM3+szfyxj9cnVf7YgU+4VU9NG9tj/lib+WNtL9T8sevnmfaGl/vYG8sfq55pceaPtZk/1naL5o9B8lg81/ljB/6n+WNt5o+13UL5Y8lmLEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJOmFwx8gkyRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkg4Rf4BMkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJOkT8ATJJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiTpEPEHyCRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkqRDxB8gkyRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkg4Rf4BMkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJOkQ6eac48FFd13BAnmUQpVhEEQfLOqCsJxCdTCjaYNlZh8J56ofY6oruyQTvWLfbhWjynjRNA9GyrOjYLh27szPmogdzfTp8axOi/cE8XRh+qV6H7lhEbFc7EK1LOnlWJG740yeZ8UwLrEgXL1yB6NETRyC6vrEB0e2gLxUR3S49rOFoCNE/9YWfCdFTRzpc9OVrVyH6xJVtiG6VdD93NumyI2Jnh/qEKl+B6F/6K98C0e4C3c86qN1FxLWr9DSrhi77x37yZyH6R7/sFVz04gI1vbKkx7G5Td/roUef5KJzbFtFRuG6KenMOLasrl7D64pTt5+E6OUr1GzHOO5Ek+hPrl5chejJO45BdGd7BNHP+MI3QPTtP/nf6LIi/uAr7oNoiWPiZklD3iq2yoi4hj3G5XUamJ4Y0Q1/z9se4qK3fvGfQjTLqa9bnOtBdHNzC6IVTiEiYnWTeoz/+AsfguinvOgURI+vLHDR773/PRBdWFyG6MqRFYg2iS8d3QEOW8ODNWH/J51sShXd+5BLTj2N6M/RTfvAoxfo5EH9ZN2b46J3sCfsLVL3vrBMc4y8oJnV2mWqgRGRBdX/5eUViG5cW4No+SLqnyPibfc/CNGrC0sQfeDcYxB90XziW8eHz0BwfYPG03ryOxCtcOFw4QKVGxEnj1HDHE2oF51UNJ/86GP0sCKixpVaic1+cXn6w9r9/OpVGhoiYoILvY+MqeimpulNp6Ahr0msbqMzwXVHRhdW5nTysqQOISIKXNSMdmgWER361tTgIyIiG9G1dVrbC/s1OHcab9OZqyoxx+Cix3hLy5rWHROsJxGR4dPMxzRPqHM6ebVI3fvSfGIuem1tlf/guhlfYVYb2Vhb5/NVFTW9DJcGb3nLWyA6wFlZRGKwH3Tp8MmYetHEtlKTqie4pi+xs6pwBZpniTV7wwtYvGP5tHnXvjMndip4atbgdeW4NVRjH9vgvlBSg1U0x6UvD/QRMcA1O2+6Tl2f7n3IYwfuw+0WTd/rgx/4AESPrtD8pMC5aKT2rCbY/2f1TT1r3gPvFNjqsQMPfJRNqp7kiT4Bpyg1RSveQI8oR9QTduboaY4rqoS8Qx6R6I6GE7oneMOii5WwqRPzLsa73A3ecB4uI9XNVhitE60j0XbyDg0uYxwxe4MBREv81sn/Wk6J36vbpcuuJvSsM97ZjMjxpo226YVFhlv3fD9TnWjwOD8ZUy+az9MeSMPTl0i9DnzG1NXieItWoOltJexSlldWIJrhgujVr341RH/pl34Jryu+7Eu/BKIf+tCHITo/vwjRf/rPaWMzIr73X38vRL/4i78Yoi9/+csh+v/+3M9z0W9769sgmlje4qRujBU4yxMVpcZ97CanGl7gQN+k6mgHq2iy/4+IwWD6RmK/R5PJDlbviOhiX/en//SfhuiP/sh/hug//I5/yEW/9300n3z40Ych+oVf+IUQ/Vt/829z0ffdey+d/Iu+AKKf9VmfAdGPPvgARLc2E6+ufuanqEt5A84xRmPanKzKxCKxxm2lekb12/VbV+h7beJoGxEZ7rH0Clqz5zmNthGRz96fqXn9GZHhBJ4XegU2vY9hykc6XTo57xB2UtMbllou8cKZLju589nDXpS74FFJ+6J8PyMiJnT6pYrSY4713w7RI1gRrqWmVVfO0Ouni1dXIfrFOD8fDw8uyc0fC/PHZnjB5I/t/4Tzx7jyh/lj05g/1mb+WNuN5Y/tfv4c5Y893vokwvyxacwfazN/rO0TnD+2/3Pzx9rMH2szf6ztdyV/bPfzWfljuyHzx6ZEzR9rMX+s7Wbzx7BobB3Xm9WsRDLzx6Ycbv5Y+3Dzx9on//jzx/Ykx449UzflzB9rM3+s7ZbLH9tc34rnOX/s6ZPM2Os2f6zN/LG2Wyh/7OAn2KPw/8mI88eSuzfmj7WZP9b2SZs/tmfqQDArc2zXjeWP7X1u/tiUk5s/1o7esvlj4LnNHzvwP80fazN/rO1Wyh9LXIskSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZKkFxB/gEySJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEk6RPwBMkmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJOkQ8QfIJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSpEPEHyCTJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSDhF/gEySJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEk6RPwBMkmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJOkQ6VST8sBHeU6/SlZndLoGC6sS8cgbOntd1xQtD36R/bK6A9HxZMIX1uv1ILo8WITozs4IopOGvlRE9Lr0OPjCAh9lXhRc9M6YbsukpCsvJhVEu1267AYfdESMhnRhRUG1aGc45pPvmlXZ6orq8LGFIxDtNHTDtzapAh8/gg864rO+/o9CdPUtv0LRjasQvbCWaLYXL+9AdDShw9exjj16LVUTihMQ/dvf9RMQrashRI/1qOhyeJkvbGGwAtHza1QJx2PqrH7oZ+/nou+8g+5JPaaHtbp2BaJLR5a56KXlAUTzoO9VXF2DaIO/lZnoBiMGA7qwCOzKOlT0ZJSoopNVqmajRRodtnBcWupTj/E5v/8P4nXFtQfeD9F8RL3oqKR7cv9F+soRsb5KV36uXKBjN6ie5BmdOSLKir7Xn/n8eyE6mKNa9PBjT0D0g6tdvK44i/V/a2cLoh/6yMMQHcwlWsfxo7fh4fSt5+boYZ27cIGLrhoaHebm5uCTjZ3tKcfkT3cyxc39uu4QJ6v/4RcegGhZ4hwjMZxGhhOYCU7Bm5yiGxtUi/rzB+/2ASOc1I2H1JX1cco3qRM3pcBedoIzxvGIutEPryU68J9+1wcgOrdIY+IEVxYVTv4n48RMtejQeDoa0ePodenYsqRJQkRUeM86eGGrV1fh8+EwMXZg/x2/NaIq2smwZY3pWw06iV60wa6szujCcmzyGa+6IyY7+LzwwmKCReeJhploPEM6PMPHkeFlN5G4J01FN7wqKZrhl875fkZEwc8aZ5s5tZ35bNqQ94yjx47ydXVzXvJfv7BZdyCf8cjKUaKz4t0brgk8G6tqDwAAIABJREFU7oxGm1x0DyfwQ9wQyDM6NitxLE7WE248ifkL1iKuwamhp8GNuC4W3fDYEFHg0NPgDY+SvleeUfWetLY6D8LDuVMY47qjO0iMHdx8KuzKiphy2Xsf4hZgTCaJh8UjfYb15MoV2lbinbSIKLl5YI8ROJ/ME91gLC3MQ5T3Irj6Nw1NCLndRWomwHvJ3JXt4CR59wQQ61UU7eB2QXI85bE+wz6hxi4669Kx/W6fL4w7HB7UYlqz3XP69GkuemGB1t3f+q3fBtGL5y9C9I47EkW/89ffCdH/8MP/HqJf8VW/D6Ib6+sQvefuF/GFve6zXgfRv/aX/wpE/8anvgSia1docyYizmFN+NWLdMP/l0+5F6Jv/Z+/DdE3ffqn4nXFBk/vseX94vgaRJMD/XDq/kzbtCGqKmn1mui+I65eoX3s33j72yH6rne9A6J/5Kv/EER/89d/Da8rfu2t9CKG371WNUX/3t/9Di76/IXzEH3okUchOujR7uUdJ2j/MCJe//rXQ/QteE+C5j7RwdejgW8cIqLXp+9V4ivOMS4hU7ObxPK120/MGCOiLGcM2Vg0D4iRejlb4FvjkyeOQfT82XNc9Ks/9ZUQXcCN6JPH6bVXB9eAEbG0SOPpb7zrNyB65x23Q/Tnf/YXILq1vorXFV/zR/4YRH/jR38Eojv4sDaHtBscEYGHjypa8kzw2G5y9wYnq0PMqUi1rShmT8x4+yUi6gb7Iz4W90B6qdlmgaNDg4+Dmy3vC9V1YuHM66kOrvfHuMvNO8mR2mPhk3fx5GWdeNC8t/8rv/MQRIvO4xBd5O0C3A2IiM/ETJKvvIuGvPnbaSgfXjo4IawmB/sQ88fazB9ru4Xyx/Z/wvljXMfC/LFpzB9rM3+s7ePJH7t+f3ZndM95/tizPzF/7CDzx9rMH2v7BOeP7f/c/LEp5zZ/rMX8sbZPYP7Y+MDns/LHdkPmj7WZP9Zm/ljbTeaP8Vg8K3PsgFmZMOaPTWH+WPtw88dabiB/bA/nj+03vYWaP9Zi/ljbLZc/Vk8insf8seu9weyhzfyxg8wfa7uF8scOfJLIH+NcKcwfS85EzR9rM3+s7ZM2f2zP1ESymZlju24of2zvc/PH2swfa7tF88dwp838sSnMH5vK/LFI7lFJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJeiHxB8gkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZKkQ8QfIJMkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIOEX+ATJIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSTpE/AEySZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIk6RDxB8gkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZKkQ6ST5wd/gyxv6IAKTzcZTyDKZ46IpsggWtc1Hk3Hbo/GEJ2fn8czxxi/185kA6JzfTp5ty656Ll+j4oeDiHaNHTHqwk/zBiX9K3riq68t0iXXY938MxUbkT0+32M08/qDXp0YXuaZnplywuqhE89+BhE5wd02SdfdAqiV4ZbEI2IvKanufSaT4fozrkPQPTI0jIX/eQ1el4PnL0G0dWqC9FEBY0Yba5DlDuMl50+AdEvePERiObFbXhd8eilKxBdHdI3G5XUbEts8hHx2COPQ/TI8hxEjx47DtFUu4sxdimba5sQzXB0qIOeZY2VPyLmsIfPMxo7mpyiBdXfiIiL5y5Q9Pw5iC4sDiD6UEb3ZH4+0dHdtnQMor3Hr0J0e32VopPESP/EFtaTbWo7TUOPI3DMioiTJ45C9Fc/dAaifRw7Ll2lvmhtxLOXqFozsf0mYxptt2v61ovLC1z0+uYIohtbNPRkQd17licq4c6Iim7PQPZ/kneK9iF7H5bYY2CbjogY4g1/4Elq1E1ORQ/xK0dEL5/yvfZUFU7qsOVlGf7icE6PMiIq7GX55BnOynrdxE8h1zU9sBJnjGVJj3JYJhpm4ER3g5c8Qc9j1iTz6WidWi/xsNXQ06omVMe63Q6XnAd9626XBsVZ9X/38wy7wYjI8KaNhtS4arwwXmBupx5HhjOYLOiGd7BlJRa+EZOgKprh0rjBFWgRiSlfgzWBV6DcqIuC7lhgNYiIGrvCDGeMWU71v8ZGHRE53/CKopOSLqzgZTWWGxEV9+D7dGZ05rPqUnILZXO4/TEW3dZUOPnHOhYRf/6bvgmi/+q7/iVE+7j9wgV3OoletMKBKcPu/fd+6e+B6Oe/6Qu56DvvOg3RN7/5zRD9uZ/+GYj+wXtfwUX3hrQMbHCO/TtnzkL0no1ViJ5J9aKfd+99EL1/lWZHn/2yl0P0Bx95kIvOeriMHOJUdlo/ufchd4Od1LwrsdoqqIa/5jWvgui1K4nZ5m2n74BoD+/YnafvhOh//Ymf5KK/9Pd9BUS5O+rh0uLIMVx0DxLLpZ//Dz8M0XtxBvKye+6C6LXNxEb0mUuXIfqSRZonXMT55GCU2NFq5mgbZG2N1t1v3aSdf57y9QeJzZ0SDy+wAy9woru6tsZFf/GXfzkdvkGvJAYLtCHwa+98Bxe9fHQJogU+6y/9Crrsv/FXvxmij9/5BF/Yj/zoj0H0FS99CUT/y4eoi+Z5bESMulT/efH74x/6KET7x2jD6t0XaK8sIh7YoXnXpE8Pa2FxEaLtV4cHFDg67Jk6zynwfjep/3DSbbiyeD1OzK6tU9N75Kd+GqIvTy3VHt+mx1HgIvHlS9RsP3r+Ehd9ckBT9Htxp+4DV2mwfgI39iPi6pmnKMyrFn7WHeqis9Tezhj3dgJrUbJPYDXPrJKbPxH5jPbFRyaXS5MJ3ZN/9k+/C6Ib12gsfvuv/ToXzXubfN1cierUy+6PfPgBiHbwwv7jd38vRNd3aP98GzesIuJH/68fhGjW0MPq4ly0TG2hBL6InGBfx5vYW6nq3ecNegz2UuMOrYlw1zSSox6/xcRxK9mf8GQ1L+jk29s0x+aMizK139Xp0fMYl1TD+UsnN6x4k6SP+72Bb4hm7YDtqbCGj2pad/RxD3B1i469e5kyEyLiW19xN0QHI+qObvtnfwGi5dLB9ID8aw/urZk/1mb+WNstlT92/RPOH9toUmla5o+1mD/WZv5Y243lj+1+/pznj+3/xPyxNvPH2swfa/sE54/t/9z8sSlR88faUfPHWp7X/LHiWcv26yuv3bwyqP/D0cj8sTbzx6ad2vyx9oXdVP4Y5ztxLdozay/F/LE288fazB+bIvHigPpJ7gb3m5pLZv5Ym/ljbbdc/lhWZPE85489U9L0+mD+WJv5Y223UP7YgU84fyzLcN1h/lj75OaPtb1Q88f2/V37s1mZY7tuLH9s73Pzx9rMH2u7RfPHJhN8Q/Tc5o8d+J/mj7WYP9Z2K+WP8aVIkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJeiHxB8gkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZKkQ8QfIJMkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIOEX+ATJIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSTpE/AEySZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIk6RDxB8gkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZKkQ8QfIJMkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIOkU6n0z3w0Wg0pAN6B/9+v6IuIFpXFV9NltEPomVZQ9EuHdvNM4gmf4atqSYQ7c/NQ7Ru6Ft3u3Q/I6IsSzq86FHReNmdXoeLjoJuzHhEjyPv0MnH4zFEqzJRT+qSDi8KetbDceLku/IZJ2kaOvn6xcsQvYz1/8rFCxCtM/rKETE/mINoEXTZC90FiM49dpWLXr96DaJr4xqiG9jblDXVsYjIMqpmywvUMJ84cwaivzTchOj8/IAv7KkrdPjqBkW7fXqUdUP3MyKioVbfxCJEr1zboKKrVS55e2cHooMefi/shiclfakCe5uIGA2pmuWJjg6bXkUtKyI2r1DrmNTUJ6zToZFjTWhqumMRcXGeWn01pG+d53TDeaSO1C3t5jSLmGAHXjeJoi9eukRRPLYMOnmDl12mJj99bh04i2iwez93gb5yRDR403pd+l6BA+KJ4ye4aB6Yxq1KuP+TbFrR1z/EipCoJal7Uk5oVvaPvvMfQ7QqEoX/H3/9WyE6rujwVC0j/QE+6Ijjx09C9LZTt91w0U8+9Tj/wcb6FkTf8IY3QJSn0O/7nfdz0U3QbcnxhpcZVW+eTCbGldSf1Dh3ynCSnOepJRH+QYbfen5ueke3+/na+iqXzCfnK//6r/96iL7qNa+C6N/59u/gC6trqmYVtszksMVe+tKXQfSLvvgLIbq9tQ3RrY0RF/0773sPRB968BGI/qf/9MMQ/YZv+EYqOLU04Ekdz6ErHh/yxAy8xHieUbjAClxWVMcmw8SUL+/yPPn62FrX0y+ymXFnuHpHRIOdMD9MbvLVJFH0l37x74Xo1371H4Ho3/pb3w7RBx9+CKLf893/mi/s67/u6yD6Mz/zMxB9/4c+ANHv+Pa/y0X/r9/wZyHK80le8oxGNFJHRA9X5e86ex6i8wM69iHuY3HrMiLWMxro3z2hxvXBh6gm5P3UVttNDGq9aVuIex9WMxry02fGciO5lMPu6C//pW+C6Hf/63/DRa+v0V7Ea1/7aoh+3ue9HqL/z8/8Ny76wjnai1taoi2UX33br0H0L//1vwLR7/mexD3JsIZfa23m7/fzDz0K0V6nz0Xv4JLngcvU6rkWvfr0nVz0B9ZWIToZYavHoTzHC2tw0R2phpk1N/7fd9nBHcKI+LF//+8h+qNYTzq41dak+oQeLmC72OH83b/yv0M0G9Js8+xDH+UL6+P3evwjNGIud/BNSmp+3uG3Zrhmv+92Wji/b5U2Ac/vJOoJLwO7OJTPmgTuqnC9ExGTSeKdxdPX0Jky7G5j/Z/LEp3VYEyD9ZGF4xAt8FsvHaHOf4yThIi4s09d9Ll1GvJOzVg473p0h46NiD+wSHOnI7hcWmno2C7uBkfEi/B1ydoVavX81uCnxzTubKe6sqaiZ11iTciwT0htgUeGa9BO6o1GRNQztug7ib2dxD2pcFfqqxqqwGfwVfgAX+JExEKX2vUWdu9vXr0C0dd2E9/6tjma/C+uHIPoBHcIi8kSRC9j9x4Rd9x9F0SffPIJiJ5cPgrRK5v0ti4irmbUw6+urkL0SJ8e5W/h26WIwJYXOSaK4NNI4K2GmJ0Y8PThWEV5upjedOUOB+/JoEePg7NQGnxHGRE17u3kifdidGxRJJ4lv6apm8QUhY5NvUmpcZOkwZqweGQFolvbaxA9f4WSTCKic/o0RJuGJrr3/+0fgOiLfuifHCzL/DHzx2Z5oeSP7f+E88d4dAjzx6Yxf6zN/LG2G8sf2/38Oc8f2/+J+WNt5o+1mT827eBPaP7Y/s/NH5tycvPHWswfm3Lk70b+2O7ns/LHdkPmj90A88fazB+bUjTmj9X4MmVW5tgBs+q5+WNt5o+1mT825fCPP39sD+eP7Tc1W8D8sTbzx9puufyx3c+ft/yx603pxrLIzB9rM3+s7ZMqf+zAJ5w/1sXOivPHCvPHWswfa7t188f2TE0km5U59vQhN5Q/tve5+WNt5o+13aL5YxPsop/b/LH82StK88fazB9ru4Xyx278/yEjSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIk6ZbjD5BJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJh4g/QCZJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiQdIv4AmSRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJknSI+ANkkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJ0iHiD5BJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJh4g/QCZJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiQdIp2sqQ581C3oV8mqsqTz1Q0Fs5qvJscfROt0ehAtJ0OIZjmdeTQc84UV3S5EJzvbEF2YX4LoeDhJFF1kEM3i4OPbr6FDYzxOFJ3jTcvzAqLbmzt0bKdP0QqvO6LGesLfOvBLXS+iml5X64Lq8ObqOkSrVlvbb3WDzpzVdGxE9LHZNhk1205Nt6xf04OOiFFJzafT0OFZB6P4pSIigjqcrdEWRCcV3dKtS2tUbIHRiIyuK7oFfeuqHNGZI9E6uOzLV69BtGyonmD9jUiNDtkS9aIF3pMCv3XJo1LE+toqRLudDkRHO9hPNqletMLmM6F7eicOmNXSIkQvrV+lgyNG21TNaqyELzl1O0TXt6jzj4jtEQ3WZU39yZvuvguiv/nkU1z0qKR7SvUgYoJPspoxZOzKItGL1jUdnhjUsAOvMJpUNzTvyrGja1JjR93gHKNzMLr/k2Y0pe005dMfJm4Y3u2IqLFP6HeoKzt9F1XRhZUFLhrvaPyf/+f/AdHv/3f/Dk9Nd/snfvLHseT4//3Tf0rnxpP/8a/7eohOauptIiJv6HH8v7/w8xD93/7cN0L0j33N13LRZY2DC84nO9jqx9zkUzPVDs7AJyUNTDmuxRqughEN/gUvHMYzpou7nycbZpZhX4ed8GRC9+S1n/4aiK6sHOEL+yff+Y8g+u1/+9sh+sVf/MUQfd3nfhYXvbNDA+53fud3QvTHf/w/Q/T3f9Uf4qJ/6qd/AqJ/89uos9repssucB7Ls6qIaHAEKLB7r3BFEzVPEyLHKtpgB59Y22KXkHdTC+dU47pe0IwGXlfTP89xmyJSWyj1BPtY/NqD+Tku+g//0T8C0X/xz78Lou/4zXdAlLek/sSf+ZN8Yf0+Hf5Hv/ZrIJrltHBIbnL8xx/+ITp5l44vsAK/5cJZLpp32+bnBxA9N6IO/J5Tt0H00atX+MIev3aJwrg+3arowvqpyT9P+mqMVtMa9d6HHezokv8JCt7H6PeoAn/TX/wmKrg1t2/9Ad20xx/7MET/xy/+d4guDOiyI+LRD90P0fUhDVudjL7Xv/nn/xyieGhERNHg9uMcbQjsbG5CdGuc2NzJcqpI6zhJrgo69p0XL3LROdb/CQ70DQ95eGF1YtV9U2vMBnuMO7JEj3EvzsAHc/MQncOFQ4E7PxGxPaTdm9tuo074sfMXILpw7BRE57qJedftA3qt8JNnH4fofVhN7j19Jxc9xG3VO08cg+jFddqm/gBXb6zAEdHgG6ISKyGv4wrsECKiSO/eR0QU03q9Lk6hc951irjYp5rw0+dpoB9j9Q58WJ3UK84SVxY5Hv1gSTu6kzpxtz+CzXq8Q99rG/dnskj0GCvL9A50DbujEdaiId6xIytUbkScPYfd0QLt1PEmST1JVFF+3zEeJ15JR8TOZPp7Z34bMujTBDsixvi+4wK+Sey/5D6IHj1K3WCk1uwruOn6lTg1qoeJKro0wHXH2XMQ7eFo21mg6KXUcumJLcouGJ+kEfMhrgmnEo9je4NmjNsrVIHPblF/UmCTj4isg7t8gS9xEuMSTbOTOyQFvs6usP/vd2lUKqvES0x+axxc//HFLvc2RWrelfNEmCfgPWrUJc5eIqLBvIgCJzBTF857Jrztnzp8aYlafYXzrpN30NvVr5s7zhfGqVDbJd2xGofyt33rwS1u88fC/LEZXjD5Y8/6BL/UrLSx639g/liL+WNt5o+13Vj+2O7nz3n+2P5PzB9rM3+szfyxtk9w/tj+z80fazN/rM38sbbflfyx3c9n5Y/thswfazN/rM38sSnl3lz+WIaNelbm2MFrmLFfYf5Ym/ljbeaPtd1A/tieVP7Y9WeRF1NaqPljbeaPtd1y+WNPf/585o89fZJZF2D+WIv5Y223UP7YgU84f6zAfKdU/hgEI8wfm8b8sbZP2vyxPVNTO2Zlju26sfyxPHu68Zo/1mb+2JTorZk/xnPs5zZ/7MB1mj825eTmj7XcQvljH9P/Q0CSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEnSC4M/QCZJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiQdIv4AmSRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJknSI+ANkkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJ0iHiD5BJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJh4g/QCZJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiQdIp2yOfgbZJN6AgcUGf1mWZZlEO3mXb6asqGiywlFxxVF+wVdWI7RiOh26Mrr/MZ/xy15aNM0EO31+xCd4B2b689x0VvbWxAt8g5dWHcA0c2NqxBN3s2yLCHaVDUdXFep00dEZDPqeY4PjIvOMHp0uA3RTkF3OyK2M/xeNd2xTlZAdFKOueiXFHRPnuDDM6onbzx6hIv+yLnzEN3Gdt3HerY0oCZ/DmtgRHS7dHhJbTqawM4K+9iIqLH6Z3jypqabUjd46oj2aPLssqno0YjqyQSLblL3ZDyh57WzPYRoFXRsjo8yIrpdbFx48s8/RvV/gs12p+jxhd1222mIPvDoQxB9UUbd0dXVTS760/GevJlGrbh7bQOiZ8tEFX3NbSchem51DaLvnlAV3eC6n6onPNBznxDBZ0+UneNQzhdW8mibxNOb1rxr/yer4ykPazx++hml7ndChvOEpqE79lu/+T8h+tFHPspF/54veiNE3/62t0L00oXLEO31qE/4qq/8fXhdMRzRPfmGP/tnIfrnvuF/hWi/oHlspHr4sqaG+VP/9achujS/wEVnDX3rPFH/qRp2sMcY45wtIurEPAFnqtjuIjHZjAprws6QxtP5xfmpn9c8cXkGrzF7PRpZfvmXfgmi/+Un/jNE3/AGapUR8Zf+4l+EaIbLmp/6qZ+C6I/8yI9y0QVOdL/tb34rRP/AV/1+iOapNfvX/bE/Rofjsd/81/4yhXP6Utkk1cEXPJ7e+LCVpeZ8Dc+TcSqQmJ9XdGy3m5jyFQW1jtg3F61mdVwz1nq8JI+b+6l7flj9OjH5L/Davv1//2sQvXuO1qe9nR2IHp+f3tHt6eD3etU990H0ffd/CKIfmEuMp286eQqiL+7RAHAWF1NbV2lvJyJOnKQZ+DLWYf5W1YkTEH3kyhU8OhocgLjRd3FmleNKLSJKnG12cjx8aj/5zIf8pZKzZN52OoIX9rp7b4PoYqpHWF+lxnVsiVav58/TvlCd6sC7uCBan9C3ft+Ydk1/3z0vhuhWldqcxAtfPnUcoo9u0iT55XfdzSWv4criJ84+CdHBws29F0js6PLePp28aXBvJ7Vor4Oe11yHuiuex05SFeERXDzcefIYRIvjKxCd6yUex4kejonYZdz1spdCdIKTn53UHOMcXvkrjtBCr8Ah77Ex7klFxNIyBC/jDvkIX8Tcc2wFoiVOCCMSm66PPfooRHmRyINSfAw71bsG05Zsm4mt5sTg8Rp8k3gWn3Xn2O0QXV9bh+jSMlWDiBiNaVAb4x740RVq1BvbIy76g2NalZd4w4sOVdEm9U7t4jW6aUNs1h18H93B7n1ng+52RCzN0RR9Z4fuWG9A3WCRmlpxP5nx/kxEzB43Mxy2mtS20nhCNeEtG9cget8S1ZPy4gUuGkfjRHc0wZY1n3rZPRpSNatxAj/G9+xll7pB3sSL1DyBD+dlxdp2onVEyXvg9Dh28F1JctTKMeOiwBrewWNZxnuyEbirGh0MVzi9r1OzzQx7jAa3qSOje5Lheie1a5TIM+l0eEeL211yCoG73DX2hFgLi0h9a6z/x47SYJ3j+9MS68mLFxPV++EnaaPj9CLtVKyu00i9WB58HOaPhfljM7xg8see9QkOqbPSxvaYP9Zm/lib+WPTyr6R/LHdz28yf2zS2v/Zn1Fm/lib+WNt5o+1fYLzx/Z/bv5Ym/ljbeaPtT2v+WPlcHp0N69sVv5YfGwpZOaPtZk/NoX5Yy28E8g7P7Myxw6YtTY3f6zN/LE288fabiR/7BmJ/LH9fzltJmP+2JQLM3+s5ZbLH9v9/HnNH9vVmzHLN3+szfyxtlsof+zAJ7xTPTVtbE8qfywx5TN/rM38sbZP2vyxPVMTyXjEvLH8sb3PzR9rM3+szfyxKUU/O9x5draA+WNt5o+13UL5YzezrSdJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiTpFuMPkEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmHiD9AJkmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJB0i/gCZJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSdIj4A2SSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEnSIeIPkEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmHiD9AJkmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJB0inaocH/gojwwOKMuSzpfTsVnUicupGgjOzc9BtFNR0RVedl0mLqzOKoj2egOITrDoqqIzR0S324foeDSi6GQC0TxP/PwcF729tQHRoiggWrdq3X4ZlhupK88yKrpTdPnku5oZVSLrYdFBNzxqeta3YR38rBMrFI64uroO0VFNrePOE8cgWqVa7aWrVyH6prvvhuhvTHYgegfe7Yh43b13QXQyoIZ5Zo0u+9zqJkTPY/WOiJpvGj0NDkaWcTw6HbppFfaxgW2naRJVoeAupehQyV2K9oIuu27wS0XU+Dz4e2X4pZub+xHPbEJ9wpmSvtd8Q73o4OgRLvpCRU1vE7/16pjGnQtZ4nEsLCxDtF69BtF34KPc7CW699/YpnZ9ZkS3tOzw9Abh1CgiqqCakGXYqHFmVeTUsiIi4+dVU7QKQxGsAAAgAElEQVTToZOPcH4SEd2CvtfW1jZ80h1MmSfsfdisUrkdvJ8RkefUE/K07Xu+53sgurJNdSwiLnfphldY0eZ69Di4Dg5Hie49w3vywz/8Q1h0j06NZ47UFD3PqNV3O3jyxFCdWJXcU9GUb6dP3zrHAfFMamSpa1pZNInVFo7Fif47GhxwO1264f3+9On97ufJ6Q1/q7yhw186vwjR7tYQop2zl7DkVP+PAz1PYE6mpsFdrEjf88//BUQXsXv/yte8jIv+7+99P0S5bZ3oYz3BJr+darWdCbWOcwPs3nk+2eAeSArPJ4sOFo09eK+HfWxEg63jWeU8aya/74pnrGF5GhARc3O0ezOqaFbW4BJ0bpgYT1+BHenSAi0Sd/DkX/CaT4PoENf7ETGHE7O1Ic2dTuKGwHKqdYxxPTW4/XaIPvXhD9Kplxa46HXswu+94yREz19bhWiFK5qXvzzRlZ264w6IvuvXfx2iDc5jec0dEUVGNYF7o3xadO/DxC5fkxhZJiVNbzbH1Dree/EiRF//2tdy0WsZHb6JN3x0z2mIrq6uctGrG7SZVixTjzFf0oW99Rp9qf5cou1sYP3vb1J02ND05vHzT3LROW6c3nH7KYg2Xd41TVTCzR268gbXmEWHLrvGtwaTSWJkmTWVfebkvGahVp0vzHPROxurEJ1gl/Ho2fN0LDb5iKj4puGoV+BW2+I81f8SN50iYowjS4WPo49VtJfqwZcXaWUxGVIFHuGm61Wcx97dTUz5Nid0037vHbQ5/1tjmpXhZlhExAjf8uzpT9uyKHCWPMA3bhFxaoU2GJvRwW2l/a6NqejTA5rHnsJxPCKOHb8NomVJD6vfpW+9kSp60KWe8Dd26Fl/Gr57zXEPJCLGuPjdws6qwBs+xqIfwy8VEXcsUT3ZCTp8C8eds8l9DLzyItWud08x9eMBrsWyPLE26GMX/dJTVIGXcJVXV4mFc15QTejiUD4MGjGvbFIPHBG3HaEOvMZOuMSW9cCQViXdXmrnk6OYXcAL5+QriTLxXoweFu8V91K5B7whVuBclF/2Bb7vuMn/Il/Nmzu4YdvFWhQRGa7Zc+xwcjy2wXdPJb6FjIgipyvnl8a8dR9F4lHm+MQyrEU8U+0k35rhPLnCkze4W1zVdOZffOBxvrDbF+ieLA7pnqzvUGf1Zd/9/z3wSfUX/t6BT8wfm/IH5o+13EL5Y/s/4fyxWWlj109l/liL+WNt5o9NC3/s+WOTA58/5/lj+z8xf6zN/LE288faPsH5Y/s/N3+szfyxNvPHpnle88emn3w3rwxeuvX7ffPH2swfazN/rO0m88emLavTmWMHzJoPmD/WZv5Ym/ljU07+8eePXY+mdvn4L80fazN/rO2Wyx8rOlk8j/lj1y941ttM88fazB9ru4Xyxw58wvljS9jXpfLHEt/a/LE288faPmnzx/YUU0+DfeyN5Y8Vz3xu/lib+WNtt2j+GL/seG7zxw6mk5k/1mL+2LRjb5n8sZtsL5IkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZJuJf4AmSRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJknSI+ANkkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJ0iHiD5BJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJh4g/QCZJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiQdIv4AmSRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJknSI+ANkkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJ0iHSaar6wEdZltEBnQ5Eq0kJ0bKqEleDJ9/e3qaiqxFEe90eRPOi4AtrmgaiO0O6sE4Hi8a7HRFFRj8SV+cU7Xa7EG3qg4/+gNGIbmmBN208opowt7gE0e0tup8RUVZ08iyjh9VE4ls/fZIZN7YJqsPcdgKjdX8Oor9y+SqdOeLVJ05AdO3yZYhe2NmB6HZN9zMiyg5VwvObmxA9g23nWo8qcESsbdDJB31qeqNyDNHe3DxE63rCF9YEtY6mvvF6kvzNyKrVpT+raHyY3BklqndEVdFtyRu6sAILrwIbdWpk6XbocWzh4dz5d3FkScrxjv7qxfMQHcxR69jeSlTR6GB3hPWsc/kChbEHjoh8lboj9pHtNQqnevccx458kerJa1/xGoh+8IMfooJxHI9U46qxEy4SDTPxOGrujlCFbYejEVFj48pbo/D+T5rJlPlJ88zz5TqYuCOpVn+ioaf5tS++D6Lj7XUuevHIUYiu7tCs7OEnnoToO/BxfM3RY3xha1euQPRdOCH8jNEQoi++8zQX/fh56glf8il0w4/ggDjIE3OM7zn7FETvwYnuSbylY7xj5zYT9YS7ugyn901ONYEXDkm9Ho2Js1oWt7g9Bc6AOiU9jld26HtlOzQXXVlNzMD/yNIKRLe2aI5dLNFs8+iJ41x04PTmvz/8KET/9L2305mzxPTmFYvLEF0d0bd+1elTEH39Z342RLfOUYcQEfPHqRf9sUfpnszPL0K0k9wuwKZZY8Mcj6kCP/XkGYgOh9THRkRR3PhAv6ua0Ugnk8Rsc8IzAZzetKcBz4IbLBHxEXwcr3rZSyF66Rx1/v/1AkV5zhYRgRUpxwXRCG9Jr0h04A9vb1D0Ix+GKO8b9ZJTvppq+Pa5sxBdW6MxsTM3gGhi0Z161sdwc3KpoOfxeJm4JxmenKerU2N7H/ImXnL12sHvNTfXh+h8l469/+EHuejNzS2Idgf0rHndkeysipwaZo97Izx2aZ52+bbGiQvLFujwHGdQ8zjRvX2ZhryIuLpGPcZKj2oCz08WO3hsxNwCPes6o3vyjnO0IJqMacQcJ8b5mJ+nCxvhlI+nuyc36diIeNnttGK6tEyzsuV17EW7dD8jIjEaY49xBZeQczjkzc0v4HVFhrtpTwypJzyZ0+M4fixR9LEjRyC6vkFd2faEOqvL16jdLWB/EhHb67TL3cH+P8OFc1IPa8Ke6XvpGa5PB4kzvxlfIfXxtcI8nvsK7vyMezyOx+P4NmQe+8mlhkaHJrXpuoKr8noLmy3OIu5bodd5EYm3DoMdqqK8XNpp6I7NN4lp8DJudHQXaFV+ekyP8myqaO5Fi0Q9iogYjqZX8sm0fdE9XR6pIxqcJm/gdS/juqPDbzsitjep2WY53ZStCus/Vv6I2Ma+bn6BZkfbI2qYC9gN1qlmy6/zcpxtTnDdUadelnRwu2w8xPenWM36/dQGI96046dob2e+P3VWdm3vX7ffPnPfaThMvdjFl5gTHMp53ZF8u9pg8+G2VdZ0YWVD0U7qwnhHgHdveK94e5KYBvOGFi8DC7ww3qaIiBK3mvkNU4EDfW+OOrrf2kpsRL+hoWGrM6DoHUu0cHjvd/yHA5+YPxbmj83wgskf2/8J7+3PShvbd7j5YweZP9Zm/ljbjeWP7X7+nOeP7f/E/LE288fazB9r+wTnj+3/3PyxNvPH2swfa/sE5o/tHPgcWtbHkkJm/tgU5o+1mD/WxvljvB8wK3PsgFl7pOaPTWH+WIv5Y9N83Plje3gTb7962ksE88fazB9ru+Xyx7Kmjucxf+z6abN8endp/lib+WNtL9T8scQWuvljLeaPtb1Q88f2TE0km5U5tuvG8seaZ6Z/5o+1mT/Wdqvljz1tdXUVos9t/liv6D07av7YQeaPtd1C+WMf2yAmSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIk6QXBHyCTJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSDhF/gEySJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEk6RPwBMkmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJOkQ8QfIJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSpEPEHyCTJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSDpFO0/ooz/FXyaoagt1uB6JNVfHVVFUJ0SwyiHaKAqJ1TWeOjC47IoqMTt7rdSE6KemORdN+As/Cj2M8pltaB0WrOlF0t0vfazikWzq3QMfubI8g2ukkHkev34co16KyxJrwjMmMk/SCimZNQzXhqQ7VsaahaES8Y3OVwnjV5XAbokVB7S4iqoy+16VyE6LdHj3rC82Eiy4HVM228cIzrN4j/FLf8je+Ga8r/sV3/SuI5jl3VlR0lepFs4yfF3ZHKC9SP1j5MbWtGTLsjnjcSfUYDXazec53jKJN6jtvDbGvw1v6Q//XD0P0/vt/G6Jf8MWfj9cV3/Dn/gJEv+8HfgCia+urEH3q3FNc9D/89n8M0ZXFZYh+13d/F0R/7R1v56Jf/rJXQPThJx6FaF7Sw3rfB++nY6tEL5o19AcVNls+Nk9NbwK72Tqos+K2wzOQiCiw/rdPvv+Telqjvv4h9lV1shvE+MleD6LzfYquntvgkrPeAKIb2J8cWV6hM1+9DNHFRDcYp247AdF3Xr4K0T/4aZ8O0YfX6NiIeAI78I88+DBEv+go9Sd3HqUvFRGTEd3w/LaTEP0oLg12cChfOXKEL2yEE931a2sQ5TlCiWdOHs8Los6Mie7u5zxSp0qOIqNmX+R0YatY7j1LVIsi4kMXzkK0Pn4UogX2Jw+sXeGiuRNemJ+D6H++dAGi8ztbXPR2l4ruL1Adft8qVdH13/h1iD6wM+YLC5wTjits1Dkdm56B4+BRFPSsuX73+1SBG1w4RHJvZ/+pZlxFkRojZuljDd/YpEViXuPOT+pLzZXUpfS21iG6hDtaGc5euqnl0tz8PIUnNCtbOEnjzmSN7mdEzM3RHCPD/v/hHWo7r+YvFVHhXtz2cAjR4gQN1mtbdOxjkdhMePmJ2yC6urYK0dff+2KI/uAHP8RFd3GKXuDeZl5Mqd57H/b6WIH5siIxi+7gmv0zjq5A9NFh4nHccZIqUoP7eBOcJPePLHHROfajmzs7EJ1bWoQod1bd1BxjA7uyFdyzGm7RZeeR3HSlWUR3GSerOGpUiRlfLON4+pYzT0J0aZFqUdGhx9HUiTlGgU8z4ygO9B/iKhhx/1mabb4Ij90aUU0oMppjRETZ8OoAt8vwW8/j5H8ZB8SI2MDOqsEN9ktjetbFBo0sEVGv0TyZ32jUuLfJVfSDG4nNhAab3iMXaL+rwLl9B3c5ItLvtnYdW5nSdVy5TDsVOd6xiNjBKQq/AxqcoE54vEU3/MwmTSYjIm/oaQ6CbumTI6qindTMfHL5PET5FecjYzr5w5dpHRcReYHTG2y2E3zW/NIgcCMiIj4woi6lwVe3r3jdGyH6pgENlxExh6+uRgdf7P6X9t985md+xtRjP+dzXg9nHuLLvojY3qA6/OGPfASij4ypn5zg2+qIqLB15LgRx+/ZE/UkYgmnXk+t0z0pKxyYsGXxhlVEVBO6aSPsysYlVu8m8Ti4n+xioz5x/DhEN9YT69OjR2k+uYnL2zNrU14/ffm+f1+9OnO3udtNDGpFQc226FA/ORpRLcywnkREgYuxBl+1dHAWwfNYfvcaETlOb3gWsI0bjBm+KI+IOuM6TGXXuI/X1ImGyflIgwFtsAxxfYotPsZ45oj4rIUVKrqkWUSJfcLVawcbjvljEeaPTfeCyR/b/wmPibPSxq4Xbf5Yi/ljbeaPfdxmTfF3P7+5/LHJ5OCguf89tfljbeaPtZk/NuXkn9j8sf2fmz/WZv5Ym/ljbb8r+WO7n8/KH9sNmT/WZv5Ym/ljbTeZP4aTiBvPHNtl/tiUCzN/rMX8sbYbyB/bw/ljsW9+Pr0ZmT/WYv5Y2y2XP7b7+fOaP7ZrVhaZ+WNt5o9NKfrWyR87+Ak+zalpY3vMH2szf6ztBZo/9mN7/3rjm6Zs48/j7P3jyR/7kb1/ffVX/8Hdf5g/1mb+WNutlT+2h984PLf5Ywf+p/ljbeaPtd1C+WMf6/8fVZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSdILgD9AJkmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJB0i/gCZJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSdIj4A2SSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEnSIeIPkEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmHiD9AJkmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJB0i/gCZJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSdIh0iiw78FHBP0qWU7gsS4hWdc1X0wT9QYPHZnHwi+zXwcvudbt47ihrKnyC35q1bv9B48mQDs/pwuoJXdigP+Cit7a26OT4sDL8YkVRQHQ4pK+cPDnXohxrwp5OZ/qf8dFcwfmy3/jGN0L05LGjdOqI//HmX4Lo//1//2eIDodjiD725BNcdI1f+93vfjdEd7Z3IPrVf/xruOhv+6t/E6I/8H3fC9H/8Yu/CNGz589A9L577+EL6/V6EJ1gw2yaCqJ5Tm0nIvKGHkeF/WiWUf3OMRoReYeujZse16LF+QWIdjodvrBur0/hbBOCDd7P5OPIanrWNUa///v+DUT/zJ/5MxD9+Z/9ebyueN1nfjZE63oC0W/8hm+E6Ks/7VO56G6in6RoNR5B9D/+8A9z0d/xHd8B0c973edC9Fd/+a0Q/d5/+d0Q/ea//i14XREZNsySx1OclVXUn0REZNh8Et0Rj4g8a4sau6N2f7L/k7qcUo32PsTbGYHTxYiYMf4/7ZEJjZj/5n0fgehXvCwxdlxapr5uHYseTqjZ3rVA3eBv4MQpIrJtmpidPnkCot975jGINuPEFDo/ugTRI4M5iN6f07N+zzZ1/hFx58ljEH3f5gZEszGOO9iylvBLRcQ9x1Yg+t71NYjyuJNstgU22yKjMXEyowLvfp5qtom1wyin7/Wjjz4E0aagbvDJs2f5wjJsPkcqXNuur/OpGa9Am4buKUfHq9e46AyfdbND35qnfE9V1AU3ZWJQq/AP8oKXkHQ/M5waRUSX9xNwzV5gJeSlcYkz1Ujd8P3yGX3mrK6010vMwPMu/UGxSs86w06hqBKP4+Xz1JF2sMM5tXwEotx2hpvYqCMWaqqE3Tka8kY4DR6letFlLHp1SCe/NqYb/t6gFX1ENDj0DDq0cN7eovo/TOxdJnb5PriOfR12wj/yCE35qlQVzTL61jmOLL3OlO+192HR0HXn3cSKvouj7VpJ9eTNVy9BdKlPs9yIGO9sQ7RJ7EVgR7dJZ46IwEX9cIe+9TwuX092aEJ4ZovmbBFRVzT5j2k1YQ/vVIy2aB4bEXWFnfD6KkTLmsbiQZFomIHTmxqn94FFz8/RHvjyIq1oIuKVr3oVRN/5zndC9MjiMkSrEdWxiLh6lTqrCkfb0Ta1jj4uWSIiGtzlw5VzltGznuCwdQ33VCNiMqLRoeApH867IrXzmeVUzUb4NHPsYxse1FIDPe/ZfsEXfD5Er61dhejGVmKg79BQfnnvX/3BlD+755674MxzvJ0bMcFtkKxDNWF+kaaLE1yzVzg1iohuD5fG03a09hS4rOiletEca3iFryQK3NhvcA0YETlO4MdjfN+HJx9j/efXvpFaWI9x3Hn08ccguo0vtiLinnvuhujW1rOmKHdO+5u3vOWXpx7Lb2GSGyz8FrPfx5kq3tA89ba74NYxpluKvU10+MoidkZ0cr7ybk5NL8MOnOtYRNRYNK+7K0weSIwsEQ1uA87aItg1HOEcO0vs3tR4W+bmqIuesSq/fiuK2V0lLugjImqcT04wym0nXTbWhGTjomPxv0Q4aRJVlBtXxtHAfaHU1meFe3FdXG1lGWYr4VgcERk+L37p1h/Qha1vUdvppV524xIxxh1a8ixgDV1cXDzwSdHaHzZ/rM38sSknv3Xyx/Z/wu+7Z6WN7TucouaPtZk/1mb+WNusWrT7+U3mj7X72WdllJk/1mL+WJv5Y22f4Pyx/Z+bP9Zm/lib+WNtvyv5Y7ufz8of2w2ZPzb11Mz8sTbzx9r4hvOGcGoD/mmzNrTNH2szf6zN/LG2G8gf28P5Y/tN3fsyf6zN/LG2Wy5/rKqreB7zx/7L3r+On5h+EvPH2swfa/ukzx+7svfJfffdt/8POKNjPKaubFr+2PUR9vSdt8OxYf7YNOaPTTk3Rn+38sf2DxhPPP5o+w/OnKGXUx97/tgf3vf5O97x9qf/Zf5Yi/ljbbda/tjTeAvluc0fO/BwzR+bEjV/rOUWyh/7mH6MSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSdILgz9AJkmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJB0i/gCZJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSdIj4A2SSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEnSIeIPkEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmHiD9AJkmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJB0i/gCZJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSdIh0Ot3iwEdVVcEBWZbR+RqKJo6NKLo9iJaTMUR7gw5ExyV9qWZS8oWxuqaTz88vQHRra5NPnmV0bUXr8T0rmlN0ONzhopuqhmgXf72uvrlbyriK5gV964/xwmYXQXW4abDt5HTHPu8Nb4LoyaMrEI2I5eVFiG5tUjX7B3//H0P07/z9v8dFb2Id7mOjzhfoYY02h1x0XVMV5Xry0EOPQPTr/8TXQfRXf/VX+cKKhqIjvOws6J5k9J0iIpqgsrsF/uhkTseOJomyc2wdZYP9SdGFaFNTs63xQUfEcEgVqazpWzeJh3VTP+L5kvs+BaLdTh+iP/HjPwbRlSMrXHSe0bf+gX/7/RD9/Ne/AaL9BbrsiLjvy+6F6JVLlyH6g9//AxB93Ws/nYv+sf/0IxAd4xyjHNGZ3/Grb4PonbfdhtcVly5dgujCyjJEj544DtEL5y5w0WubGxAta6rhTUO1qMIBMSIGPRodhtsHpyj7P6nzKSff+5Anm53EVDRq/Nbdkrqjl/doLvrYBt3tiBitXoPoBLsjnIDHXJca5pmNdbyuONWlLrrc4cGaLvuepSNc9A4OPVc3aAZSzM1DdGuUmAafXqKm1+vRLR3g5KeDA32eJ+roHZtbEP3sUycg+u/OX4QoN+pITXRzfNazloG7n9c4e4mIAqf3pycTiL4KR9u7O3TmTWx3EfFrTz0G0RM4I5xfoEViNUr0oqOdbYieOnoMoh1cGr/zCvVFEfGGozT0BE7b2t37fscW5iC6FfSgI2JpmZrt+9aoE37lEeqOVrHdRcSgP4Do1jZ1Vg9iox/MUW+zuEhrwIiYjKie7NftTB/+mhkLhH6fhoaI6OLY0S1wWV1R9AqvtSLeOqGB6TQO5aMtetadjAb61EIt6ms04Ba4XcAr32QH3i2x+eDJeQNljLthEZFl9L1yXMqNcGTp4Fosx+49IjodepoT3Dhq8LKXUw3zZa94BUQXsNXf9aJ7n/nng3sffsmXfMnuP2qu3qnJT79PRZ87cxaiH/jg+yFaL9HUKHi+GJFl9DRL/NY5PuiIyHB601ugp1niBOapii4sS1XRLKNedIwbtryd28GZakRU2J+VuPPD+zNVagvlzhfdBdHVa1chyrvBgz596/Pnz/OF/fo730lFYwe+uUUzEJ7lRsSJ2++AaIM7WkVOtSi9o4WbhCWu1AYDmhrVuCU1ws2ZiMixT2hw57PfwQlMai2WZdRPdnu8hYijLfaDvTzRlXE/+sSTZyCacZNP7e0sL9KiZs9oe8oUa3CUqvfyPa/lcxZ9WvKPd6jpHSmwi85pVdLHciPVOgL7yck2rcWaMtE6Rpt0eIGjQ13RwqGPc/tIrTs6vSWINg3NVHMc6FOTCBy0IgLfGvAUewE3nSLiXhzULly6wodHxKnbp28pl2OqCenXFTh25Lhz2sH6Pxwmqmhd0bPuDWhVPsaHlayi29tURQcD6spOHMft90u01bYwR5U/IhZwa2hnTHdsfp4eB++QRGoFOsGtNt6LSKxOI375l38Fojyz6vRojhG4dkjmqHCfwQcXuMuRpXojdjMbAvyivJuai/JORz3Bp42PMinHHRiuJxO8sDr1NHixxtESNxN6+FIMZ98REY+M8OR9uicnMip6cXBwlmv+WJg/NsMLJn9s/yd8YXzmiDB/rM38sTbzx9o+nvyx0YHPn/P8sf2fmD/WZv5Ym/ljbZ/g/LH9n5s/1mb+WJv5Y22/K/lju5/DMjDLMvPH2swfazN/rO0m88dG+KpyVubYAbMSycwfazN/rM38sWec2/vXm95EW0P78sem4PyxiB/c+9fXfPUfbofNH2szf6ztFskfe2LvX8ePHY3nLX/svv0XMKMbN3+szfyxtlsof6x8dgoT549t4C7HtPyxj1w/86d+ERwb5o9NY/5Y2ydt/tieE9O2dic4i7ix/LGjR55ZL5s/1mL+WNstmj+Wjeiyn9v8sQNvcs0fm8L8sZZbKH/sph6eJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSpFuLP0AmSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkHSL+AJkkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZJ0iPgDZJIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSdIh4g+QSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSYeIP0AmSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkHSKd0WRy4KMiy+CABqN11tzM1UxaF7Nfrz+AaDUZQzTPC4jWNV9XzM31IToajSC6vb1Np87pfkZEZHxx+DgqehzJZ5Xhz9PVWHSn34NohXcsKcNKOB5TTYigmnD9jxb86ecAACAASURBVIrpf1bVeNcyrGYlVe9/8B3fAdFPfflLqdyI17721RD9dz/wAxA9eewoRP/JP/pHXHRvfg6iw50tiC4MFiH677/vB7nol37KiyH6Xd/5nXw4+J5/9d0QvXTpEh++srIM0WVs02vr6xAddLpcNNf/uXnqyu657z6Ivud97+eiy7qCaNNQ26kbOrbfW6KCsUOIiE6ng3HsJ29yyGvoYWcZfeuN8+eo6IqOPf/4mcR1jaielGUJ0QLv5+0DGqkj4lpJN+0M9hjHcBow3hly0WVF33q5R62jyOlb43OO8+PEhb362AmI9vFZz23RePqalRUuenz8GER/8cJFiGY5zRKyimpRRDRBd61p9Qn7PymmzUD2PuRpU5Oad2U40P+e06chuoT35IEhVe+IWOjS3Gl7mw4fFDhpG+5AsMLpYkSMK6pmty/SkFeNqSZsXNvgoheWaJ6wgA2zi49j2CR+hXm+pkndaJsmdSdvp5nV5TUa6I8co1YZEZtb1yC6vkgjZlZQ/R9iPYmIDJvPwjJNCGdNkvv9bkTk+LAiEmP9Ah7a3d6E6GhI1fuJLk8hYgn7ulNz8xDdwiGvxmVFRBS4vN2eUF+4gHO21MQpHt6gOnwPDtYbWM3m5ujY7gDrWMSlDt2TCX3peGxjDaIbO7zAjDnsovvYvY9xM6Lfp/nJ5iZV74h45atfhfHf3PvXl37pl+77/Of2/vUn/+SfnnrkINU6xkPqJ7/sS6jhbm7SFkpdJ+YYTz35JEQ/+tBDEO3O2AfYNcEVTfBeQfCyIzJeEOEGS/I/LcBrsQxnERlWUV4uRcQE+8kM+zoctRJ7ZWVql69f4AYjPq277rgHoteuUn8SEY8+9jBEv/ALPx+i//3nfmb3H3/qu6d8eOzoKTh2fWOVL2yAnVWnS3sRAxzyugVX4ChzqicV1qJZ23dP42YbUeFqi6tojtEOto4JLrojInCgz/lr4ZyN13ERUfBmMu4GNz161rw5HxET3NHiL725RSuLuqLx9MgRWtFERGA1W71GU6Murlkq7PwjYnuHvlcfm14HX2fUqdaRJba8MIo9eJc351NVlN8f8XBcVjg88OZORIHXVvPhNTZMfBzjVI/Bs4hJTXcs0Z+kZjf9XmIb8Ok/60+Z+xUDrMA47kTEBJc8c3jy8fZViBZHj0M0ORfN52kfo1tQn5AvrEA02WMcx84qy+jKa2xZg15iLcY3pRzhHmBqJguxTqqOliUt+ZtzT0B0cOJOKnpard7v/g//BkRf+uLE5k9ELMzo5F/3BV8IRx1foS2piBiNaLXF+6JHj9Cm09xiop7w9KascPaPq5IO7gakSo4MO/DEYgonhE0kFs7DHaqiNY6nm2u0IbC2ldgu4BdMT52hF0wDnGM01U2tT48fPwnRa9eu8MnrRE4FyfF5FYn+hr51Ys0SnOuR6Ch546jhGUjn5nJUMJqYS2aJ1sH4VTjXsZzfpKRel6xeoVnE4uIKRLs9rAk8U414f0mvGofr1Khf2aH5SbsemD8W5o/N+oMXSv7Ysz/B/clUH27+WJv5Y23mj7XdWP7Y7ufPef7Ysz8xf+wg88fazB9r+wTnj+3/3PyxNvPH2swfa/tdyR97+vPZk+R+v2v+WJv5Y23mj7XdZP7YyZPtXdl05lhERPzQ3r++7Mu+bOpfmD82hfljUw43fywi4nP3/fv4KXpnvZcq9v9v70+DLUnTw77vyTx5lrvW3t219d7Tsw8GswKDAYaDjSAkgBAJUpDEkATJkiib4VDQZMAOMSRbtCRbtsP+YFG2RIYkmItFEoghRdAzAAazAeAMZqa7Z0Uv02tVV9dyq+561lz8oQbVd26e+r/ddbu7urr+v0/V57mZb57MN98tn84zF+eP/fyuf3/ui19o/4H5Y23mj83Z/FbLH7v6+euWP/Zyj3O99tD8sTbzx9pupfyxHyyK88fmpo1dY/7YnG3NH5sXh9gtmj/2Y7v+vbo6ZwVpc5Ma/1eeP3YxXn6g88t//i9c/Yf5Y23mj7XdovljW/tIHotXmT/WSiczf6wVNH+s5RbKH0st1kuSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEl6C/EFZJIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSdJtxBeQSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSbcRX0AmSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIk3UZ8AZkkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZJ0G/EFZJIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSdJtxBeQSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSbeRouj19nxUlyVskGf0zrKqoW2bpuGj6RQF7byizTudDKJ1TduWVcUHthB7z9JueU7nJMvowKbTERfd61PRDR94VlM0cTWirGYQLfIuREfjMUSrGR1YB89YUq/oU9FT+lJJfGSJCo7hf+sdb4foZ9fWcNfx+5/9AkTvWKRadG5jE6JZly50RJwuOhB9ajqFaC+jWz4arMAR05JugEGPDoxfv9jp8LYJTdCRd/HFjwcbCh9bWOCiS7xek4oux9qFi7xzlnH9r+ic8KXOc951op7UNdWTXocq4aiaQLSD3WVEFNipzbAlPDah3uHY0ipEpyNqgSPiyoS+1+GDtPMaD7tMnZOVnJqjF7GVvTeoek+LVIuB3d75jXWI3n/4Log+Xm5BdGeWOCfNjDqm6ZhqwsoBOifDVE//hZforp/NqMXIsbPu4+glIgZ96qzr1nhy9yfVvGHbtQ+5L+ZRbkTkXbptf/synbHJkG69Q4cPcNFdbCenOFgtcuxP8c7KOolh8AXc/BI2OP0u9adVkXgVcllSJSwbHJeN9jECibgyGUI0W1yC6HNbNLLige7T64kh3/LyMkR/7/kzEM1xzDYeU9cQEYtL7Qbn5crz0Y/+KGzb/YEp5zPX/vXxj388It7xjstc9DbeXHVN987vPfZNiG6MdyBaTBPD4ArnHefWqQGfYePf5FSBkwqshFVNNaGTGoE/jzPrF4OOvC6od/jG5gZEG2wkI6KzQd+rj8P7s0O6HB1cA4mIHo7AFwcDiC5gazTeplp054njeFxx8dyL/AfXfPPRR679+127Pv/8Z3937t9X2D5HRJbRCedaNsXOutej+y4i8pyKznAa2OTURBc4yCjx1khq8IxNJlRFs06iiia+NX6vBq9WB892ROTY4VbYJzYdbIRzOrCF1Fh0iisVNc4xh1s0+G+axKJTD5uj0dY2RAfdOe3JtQ/7OMDONhP1ZFpyM0sjxtmMRhG9bmKMMSnppPWxtx3iAIYvZUT0CqpmBUan2JXzxDm56FTikWe4JDud0jnJEms3qZVPjJZYixq8bSOixgX2Gg9tMKDxeYkL6Nj2R0Qs9mgtLs9pPBk1PjXArxwRVUV9Io6Co+bHBqnld34kkfNQlpt3jBZV4sAaXGpr8KRwl1fjOnNEZDifKnC9q8Fbj3vbBXzsFRHbQzpyfqbGI6sK11QjYoAD3WvyebdZNbwCm2Spp2YxobtjDRfTHrjrKEQvTnH6mbpta+wTG1xqznHwU6R+TSrDisSPCrnLq1KTRO5v8wJXpfCUVtjazFIj8AxX/jsYjS41/uNpar0XH8ScOH5q93/OvdOOHT4yd1t+VFJjxxERCz26bTe3aFZ+Ye0SRO8anIJoRIxHtPN+j7pyTgAYjhItBj/OrgM7Ne5tcaViJ7XUtrJCy8XrV2htZ4pP4S9fTiww9rE/3d6glboXz7wA0YcepIfdEVHiY/oOLrBMU7der3Pd7niW2naGU7leK51mt4pHIHVikri4TPW/xtERnxPOYEml7QQPBBpcEOApT1OmGnAc/iQGdTgMnuFTg0jNmPi2HQ6pOVrKsWfBbSNiDR9d/SkcvW9uUntSDPYOCM0fC/PHruMtkz+2+xPzx9rMH2szf+wGvB75Y1c/f83zx3Z/Yv5Ym/ljbeaPtb3B+WO7Pzd/rM38sTnMH2t5HfLHXvaD+WPP7/m8u3fK+QMpZOaPtZk/1mb+WNs+88deOru3xXglmWMR8cu7/v1b/+yfzv0b88deLfPH5hRt/ljL3Pyxazh/bLds3rKD+WNt5o+13XL5Y1c/f13zx76/k+u1h+aPvcqo+WNtb6r8sfwH11E5f2xu2tjLOzd/rMX8sTlFv0Xzx67Zk0h21WRIKxU3lj927XPzx9rMH2u7RfPHIHksXvP8sR8cFZg/1mb+WNstlD+WGHNIkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJeivxBWSSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEnSbcQXkEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEm3EV9AJkmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJN1GfAGZJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSdBvxBWSSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEnSbcQXkEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEm3kaKalXs+apoGNmiihmgnozeaNZ0OH01V7T2Y3abTKUQHfXyZWkZfqugkXsQ2nVYQnVUziPa7PYj2+n0uuq7phBedAqLjyQSieUbbRkSRdyFalnSxFhaWIboz2qGCm8TlyOhqRFlRuK6pJuwy/xiajLapKrpY3YJqwmx7C6In8daIiDLwe42oJhwPujEHBVWDiBgOhxB9eDCAaBfvjic21rno4106tkM9KjqwOWrwfO6M6XxGxJkZNVar+K2bjCpZhc1gRFTYYvDV3MJv3clTL6zEP6jwxuzi5ej16IxxuRFRYMc0xYuV4bbc5UXEtKKdb25uQjTv0jl5cf0KFdxgKxlRY9/x4iY10TNsju7oLXDR5yZ05Bsjak9+Z0gH1glsoCMyvLkabKKf317HfdN9l+x1vjOh74WDsih2NiC6vbXNRXexTeD63cHzORyOuOh3vP0hiN517I6IiPjMtU8+/IEPX/v3F/7gi/M2+v5VSBw2Vv6IqKZUw4d4rSscT27jwCkiIugPsHWPojWe341HL3glIyIyvLnqho5shEPoKtVYZTO8bfFy8Dh2gmcsIuqSjw2LLqiaVXg+M5yzRESGo8277rwTopPJGKL5MlayiKxo1/C1a//61G/8Jmzb7b88Kvt3/5uXP//Ub34qIgocGkVEjU1hXdPFWuzQbGuc4fw0Ofgp+aThDDSnousmUUVzbHAabDK6WEXrKtEoNFgJG2zr+HsVeMKbTqq1quiE8xnjovPUkK/Cb72DA5iioJqQ5fStyyoxK+kPEqsN11xv2eF6M9wC76yIaHBSP5rSkK/BdnI0oqYsUqeU12cmuIQSeNvmqfUuHhTyOkaemGolGnBuzHgNsIOVsEl1WyXemEsLNHeY4UyN61jGzXuqJZxOqSY0+KX6nUSnxlPjJ554AqIrK0vwYYH3Th+/ckQ0OI4ucWg0m+1rQpTjaHWEyyAdvPWK1MonD0ebGa331njYPKPHShSRGifwrLzXxbFoosFIdGod7E97PVxq48ltxBRX26ZTuhx8YNwi8BA6UovJlzDawcsRqfVensAOBtTgdPu0OJ+shb0eLgjzAwtcsE087MB+PCIaHJiNRrQWwVPjiMT8lNs6bu0yLDvxPA4n3RGxOHiFzzvmqPDB1vLyCm/+S3/2F64X+mZ86tq/FxfnrNJfukLrohe/8mkuuoMtPI+dYuF9EHzpO9+C6OLSnL54t1QdpprATVl/gDd16mpGTmds1mBjVSQG/wUuCDfY2xa4ODka003dw9YmIrglm2zSI7kDS9TGnjh+Dxf9bElTnlMn7tr9n8/N+5u3vf3hudt+6lP/FPZclonnR33smPo9utb33n0aon/01a9z0T2cn46GNNErSxwG4MApUmubU5wGbuOMforDxeSqK39r7pbKGcWns8RyAWcX8NR4eZGao+/+8ZNcND8DPX/uRYj2UzkV8AwotaiUmE81OD/t4aNwHr1EKgGmj21dYuKc8Sgi9XSVlxBxUNfgFJJXyCOig8fWwUXCsqYxdqrBiGpGI6uzL52FaAdnHps79MCumzonJc4xi+WDEL00pJt6Yby3FlWtJVzzx+YVbf7YXrdQ/tjuT1L5Y4mizR9rM3+szfyxthvLH7v6+WueP7b7E/PH5uzc/LEW88fa3pD8sav2ZpGZP9Zm/lib+WNtr0P+2Mt254/95b+z9/Pd+WPRSiEzf6zN/LE5ezZ/rGWf+WPb23RgyZSkq66XSGb+2Bzmj7WYP9Z2A/lj1/Dzjt3m5pKZP9Zm/ljbLZc/drV1fV3zx67KrvM35o/N29T8sdaWt07+2PIPZk9B/lhE/Hd/+7+HKOePPWX+WIv5Y223bv7YNXsSya7ir/XK88d+/q+9/Pn/+Hf/7tV/mD/WZv5Y2y2aP8aH/drmj+35T/PH5hRt/ljLLZQ/lloTlyRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkvQW4gvIJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSpNuILyCTJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSbiO+gEySJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEm6jfgCMkmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJOk2UtzsA5AkSZIkSZIkSZL0lvKRz3zxZh/CHt+F2ANv2FHoLe1+jD4Xf/gGHYckSZIkSZIkSZIkSZIkSZIkvTJF02R7Pyo6sEHT1BCtO3v3tls5bfhomow272Q5HhjvnPbc6/dx2xgOt2+4aD5s/MYREZ0OXY7ZbHbD23aLHhc9Ho9p54Hfq6ZzMsXDbmaJelLOStq8piqa4zm5pijmv5uPv3WJNaEs6bD/aGMdj4jKjYhDS4u0MR7YSzsjiK72Eq8p7F/nXF11eWcHonVnAtFOJ1H0qKRrvXPlCm1cdGnPeNtGqhZ1e3RzrVV02NOa6km3SZyTqqwger2KfdVqRt+rqmnPEZHntPmgT+ekxpu6yzWhSDWjQfW/hzVhit86S7Xg3S596yanza9gQ4hNbHTyRD3hRrbEJrrAL/V8RdtGRODdMcBbb1LzzhPtJH/vAitwYCvKA6cZNv6R6qy5kvEIZBEvVkTceddxiO5gA85F93t0Z0XE5mVqos8893xEvHvXJ1/96lev/fvQgcN/8s+z7Q/7PerUsixxdyxiFT177gJEa67/zb6qKFfCqqLGKk+M7RMHlmU4+K/owOrEqCxRdIPnpOZxF85ZOt1ETchK2nmGPSa27pHoTlPVZFLiKBq3bbCedFJDvi5O9FYOHIBof7B7trVx7V8HDq5GxHBryEV3sA6XDX4vbGP57shxkBCpmQWf0nJCvUOeaqwqHAp0sFPjG5OHixERWP+7uHnT0CmtKzonFUYjosDRJo8nO4FDaB4kRHR4YIaD1Tyn277PlxJbqoiokz3Py386/yCLfP5ZzVMj8KUFmp+OJrTUwE1hN0/cmAXf9dxGY9F8d3CHGBH9hQFEeQTO4y6uRRGJnonPSIn9VpEquoeNFZ/SGRbdwVHEDCfdEbE0WIBoiQ1OhnOW2WzKRXe7VIc52i/mrF4uD5au/uPAoSOw7draGh9Y5HTSKhxZ8XLu6sFDXPJohCMBrGYVLiYMBnTfRUSJy0qB3zrDO4v3nFxMSNyYOKirsKNPrZ+n4OY8xmhwzBapYVsPB/AnTt4F0bPPvwDRh97+Nj6wS+dpGri2dgmiS4srED1/4TwXzZ3aEq4Gjya06Fq0HgntwTUlzyncNHRj1tg1lLiwGRHth1m78YiR6xg3/pGa6HWuM2q6qsHvlWFDlycf4uCt18NhMI/ZxkMes8Xf/m//9vVCH/6LvKmkhEce+dbcz9/5zvfAVt/4xqO8W2wwYoaN1YvnL0J0YYEG2BGxdmkdog1Ofvs4398Z0iJ2RKwuUXe8ukojxprnp9xtpVY+FwZ0PbbxGT3PbadjGgZExGRCM9DxhL5Xv78E0YWVxLISPyvPcZLYSY2iT9199/VCk1SntrVNqSBbO1sQzXCBnZ8fRQSvRfBq8AoOCDkNhXN+Yn9zBx5ZcVsUEZ0OTY1n+KwwsVKRWseopvioBcei/LyjwFFZnpgFxgTXnf5fFy9D9OM43/9L992755Pm3Jk9n5g/1mb+2Jyd3zr5Y7s/4ac8yccl5o+1mT/WZv5Y243lj11dKNtn/thkzuP0lz8xf6zN/LF5m5o/9uqKfk3yx65qZ5GZP9Zm/lib+WNzoq9n/ljxA/ljL98pV/PKfjB/LPakkJk/NmfP5o+1mD/Wtt/8sevkjF11vcyxPa63tGv+WJv5Y3M2N3/sVUbn5o9dw/lju81P3jB/rM38sXnbQ/BNkz/2nWv/On36RLzO+WNXrazOf5Bq/lib+WNtt1D+2J5PIH8sIpZX6H8yOn+Jci/5mVokH8nxtcZpdRdH4HnqUTuPCXkZhAeEs2kiG4SvNZsMqS+uE0PoyHicgOeML3WFfccwNQLnkcCMc0W2n4PoxhNf46I73Vf0Ios//MMvz9n5FqWp3Gj+2PePx/yxOVHzx1pu0fyx1YMHIfoa54/94Jqh+WNt5o+13UL5Y6/8f0iVJEmSJEmSJEmSpPm+8lM/erMPQZIkSZIkSZIkSZIkSZIkSZIkvVK+gEySJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEm6jRQ3+wAkSZIkSZIkSZIkvRV8+5d+DqLfe+5ZiE7GJe+8aTKI9no9iL7jbQ9D9KmnnoJof0B7jojI6cDyDv0iVFPXFG0SJfc6N/60dzQcQrTGLxURWYNHTsHI8EeyqqaiPVeJkzIYDCC6vb0N0dWlPkTrJnG2O90ORB9+4IG5n5/4H/7BtX+/4zf+GRcx1+kb2EZ61S7c7AOQJEmSJEmSJEmSJEmSJEnSaw+TuyVJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiS9tfgCMkmSJEmSJEmSJEmSboIX/81/9WYfgnQL+52PfehmH4IkSZIkSZIkSZIkSZIkSdItzBeQSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSbeR4mYfgCRJkiRJkiRJkiRJt6kX/81/dWNrC/5geXkZot/4xqO8/24ng2hRUM7A0tISRBcWFrjo4XAI0SbvQLTf70F0PNzholeXViDa69K3Xt+kyzErKyq4k/gRuHpWQ3R7PIZontOlnI4nXPRkMqOid7YhevTQETqwXiLzpCxL2hwrYSejb93tc8mSJEmSJEmSJEmSJEmSJEkiRZ7vzX+ta0p4rSrKpq1rzLVtaM8R0e1gWmpOO88xO7ksKZV2NKJs14goCtr5FHfOONE2IjoNFc3p4E3TQHQ6nXLRfGwdLLqmHOBYwhT5HUyvj4iiS0nbfE5m41d2serrnLrW/bJbFlRFq5zq//eGdDlWFyizPyIubCUy7EGD1Xt9mshT7wadkzLvQjTLqIo23J5EbGd05J3ugHaO2fmzGdWTrEnctn18t2ONKfIlRpvUbRt41xe8+dIiBO+9+24uuduha53jgY0n9D+fHDtG/z/D8+fO8oEdPnwYovw/Wix36Ut1OlQDI2LQpf8xZntE3zoPbEaxp87S/2cL3VwD/F9EZlPadjZL3B29BTppFX7pHG/5wPYkIqqS/qCs6MgLrAlTbDGaSBxYxt8L/y+m9ihut4VFuqkjYnubOtwS27qsokpY4pgtIhaXD1K4fUp2fdKZd62vfVjh6KWXujvKCbaT2Hc0c45716Y8yo2YzajD7WAb22CbUOTUFpV1YmjUYKeW89fi/6MMK3BEolPLcJA8wP40axJFZ/x/u2FN4OFNp8Ba1CTunVX8vyJ5eN/vUU1ocM8RsV1RVVnCwer1ZiWd6ETE8mJioFvg3dHr0ZCvwub9vj5PtRL1ZLukW2/QpZ1P8Kbu4tw2IkrsjjOs/4mmLE90W80M/29PvHcSx4VtwrROjDG6ODArp1SBD955HKI74xEXHUE1AVvoqLGNHeMYYydLtBgzHPzsdr1hbXWdG395+QDv8I677oTohctXIJpV2PinunKu/wdxarCIrehgQK3N1ib9H9qRWqmosYmeYjPYLWjbSK3j8RnLsfHvZInLUeV051Z4X/d6OMHEdpJXwyJiit+rvt6KUEREDAb0boXlVXq7QUQcXF2F6HPPPwPRe++9t/3h4sr3x/yHDh2Cbfv9xP+O/8BDD0L08SefhOhoRO0k98URkWMrOsYGnGvCaEJvbYiIHo+O+IUS2O/wjL5ILSaUuIQ+mdL3GuM6Xs2vyUjdPhzl9mQJ751ItXU1zk9fPHsOon1swO84cpQP7PnvPQfRMY4TxkP6UvzAIiJ6uGY7xveS1DjRq3D2GhEzXKnu4CIJ9zsNrp8nG6vELBIHXhOsYw0ucUdEnfheN/6EqINF1+PEbbuzQ88FZhXNtsZjWpxcXUl0avwipPvuo57l4sU1iI6KxPnkR1d9XIEpZ3Tv3HnnMYgmn6kVOA2ssXfg1wmVqQb8IA5Cun1qCS+dv4AHllpMwy4zwxEjD5IzLjo1xihxUDfEVvT4yZMQ/Zmf/Bku+o47qHN5+ulnIfrNx74B0ZMnTkD0gfvvx+OKJ556HKKXLl6mjWuq/yfvvoeL3txch+gMH1h0+TENvg8rIsqSjnxpkYYoXXz32drGBkQTizMRw4Y6pkOHDkKUlxrWSpp0R8Qo8WI1OmPTkg67wEfhEbGJc+cM+0Re0B2nXrvGlhfoYcpwSEO+7jI1ZUVqjMF4vavCx0/8krteP7EaPJngWgTfmJgewIuTkRp38aOWkqcV2DVEIhMkKpy99nC993qLbFcV/cR06f3vfT9EH/naoxBdoVFAnL28tykzfyzMDfZ4ZwAAIABJREFUH7uOt0z+2O5PEvljqUbD/LE288fazB9rezX5Yy/3U4cOH4jXLH/sQuuTCPPH5jF/rM38sbY3On9s1+fmj80p2vyxFvPH2l7f/LHr/IzB1bwymJV0omP+WJv5Y23mj7XtM3+Mh7K8qHXN4nWSAcwfazN/bE7U/LHvezk1awOfQM3NH7uG88d2m5ueYf5Ym/ljrzb6Jskf+0Dr89c1f+yq62WRmT/WZv5Y2y2UP7an0X398sd4z2H+2Dzmj7W9OfPHvhZ/6dq/3/Wud7X/4LXKH5vGf3Ht37/0Z/+Vq/8wf6zN/LE288fa9uSP7flP88fazB+bs+0tlD/GhyJJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiTprcQXkEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEm3keJmH4AkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkvWVd+et/o/3hqX3scHq9z//T/+LqP+7FzTma8gccPrKvnb9J3XezD+AmWb/ZByDp9ZXf7AOQJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmS9MbxBWSSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmS9Fr6wD/69Zt9CJL25f9xcOlmH4L0+vIFZJIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSdJtpLjZByBJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkqQ3kY9//o9ezZ9/BmKfwC1/7iuPvJqCXq3Xdee3pIdu9gG8KX0bYi/EP+eNX3hND2X/ev/p//bqP5546nH4s0sXL9Ne6ikE73swUY82N9chOptVEO12uxDtRMZFlyUd+dLiAkSHwyFE1zY2IJpliQMbjiYQ7Xb7EK1r2vPalStc9PplutbjMX3rI4cOQ7To0cWKiM3NbYhmkUO0oWCMx3Q+k5YXFiF6/tLF/excurUUUe1tY5q8gQ06Hbx1G9o2MoxG5DntfDYpadug3iXvdLBcikZEg438YInalGZKB5Y4Yyk1dhEZtqS9Xo93PhtTn1oU9Pa6rE70i/sxq2cQrRqqJ1m8ohOeX6euZhVezcDLgdVooUdDgQzvyojoYA2PGW1e4TnJU1U061FN6JR0OSrs7ZtUi9HBP2hw/NThUUgXo6nq3XRohDSbjiGa4X2brL58ZBW2CV1sCTfXN7noCu+OleUBRLe3ach4+OAKRBf7iaYsdddjRcF5SzmjRjIi6oLOOE9s6hJbm5y2TbbAdUM7n+Ip4aJ5LhepJmUBe5ZxSY1/niW68k6Xvhj3p32c7DU5HTbedhGp68UNTq9H33phQD1LRExxjhoZfa+ij9U7NVGsSzrhq8sHIiLicuuTiIidefP2yZ/crQ22Rf0iUU8GODr6UTzhF3Ax4uAg8drfqkenNC+oJlQV3Vm8WFHkiYtV4ikt8K7PSjqf3HFERBZ4vTIeBmPjnxreFEHfi1vZCkdlPK0oefknIq9oZNXgZKqH0SnO8iJiktHV7BV0xgaL85ujAwdWImL9Ei5QRnRx5z3s6Gtsoju4tDTDficimprq8MICNcKD7hJEi1TvwcPkBjv6BkcgE/xSEdFgJe7jCZ9O6YTXOHzvFYkhHzfgzYDGoqMdWhvtDhJFj8c0vO/ige3gaLPGbovvu4goKzqw3a63LnG9z3uDRNGdDtWT5UW6HEtLNPhf39zioqsp3bmjEV3r2YzO2Gi0A1FezoqI8Yh2XuCCAC+/5Hi2IxJrQxV2PQUO/mueTEXk2GJMcezEp3Q4o/YkbxJDvn4fx8nYio7HI9q2TNSELXzItNinu6M/766/9uHFi/RII/n46smnn4RojWs7UVO0xDWQSI0JG9w5t4QVTjoiIsdR9BTbk7mX45oaK8IUK3BERE0HtoQVeBGngTvYFkXqrufBao2HzSs/EXHo8EGIdvv0cLeDi5MHDxyC6NraGh5XvPe974VohqPo8ZBajKfwvouIAge6KwvUYqwcuAOiox1syiKGE6qlPHXoDpYhOhnyw/LEGOPkyeMQ5avJ/elslhj8r+MD7z4e+WGs3qurFH322WchGqnkhtVlenT1iZ/4OETXryRWg188cw6iTzzxBETnru1cc+zIUS6av/UAB/CHjx6BKM/jNrYTY9HNdfoDbCYTT4hK7BAjYtCnStjvUv0/dpTaSW7oImJjA781bru1RdueOnUKoocO0MQhIj796d/mP6Cij98F0d/7vd/lzXewmV1YwIylCVXvJ79Hd1ayFT2C9f/U6RMQ/d4TlHyWutTx1a9+FaK81LC6Sj3Lu97+Di56EcdOhw6sQpQv1vIyHdj2TmLclTe0IPbdJ2ic0B9Q897BZ5QRsbND01ue0c9wHjfAhLxInVJOXeBJzaSPq3zTRCu6ukJX8zKm3PFSc8mTqYguNtGdDkW7uLbf4Oh9NkscWK9H1Sy1to+ZCVVi3FVi/kAPF0ZznNEkn7R3u5hThDdXzskzFT7Y5UchESsHqbPurVCf+Ns7NKgb7lzY+9Hy3vvU/LE288fabqH8sd2fcCbJ9dLGXt7c/LEW88fm/IH5Yy03lj+2vbkRr0P+2A9+Yv7YXuaPtZk/1vaG5I9dtTeLzPyxOduaP9YOmj/WclPyx65+fr38sYg4cGDF/LE288fazB9r22f+WI0t4StcqbheIpn5Y23mj7WZP3bVB3b9+wbyx67h/LHdD1/nPnYxf6zN/LG2Wy5/bGl5MV63/LFm19tnHnro4bl/Y/5Ym/ljbW/6/LFX9dIxSW9Gn/3d76fSmT/WZv7YvM3NH9vL/LE288fmRN8q+WPJx5qSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEl6i7v8l3/1Zh+CpH350sc/eLMPQZJ0K/EFZJIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSdJtpLjZByBJkiRJkiRJkiRJkiRJkiRJkiRJkiRJ0r588gt/tP+dNK/gb979m//sBvb8wRvY5gc8ud8dvOXce7MP4PVwer87eA6jX4PY4f0WfeO+8tOf4D8YDocQHQx6EL3nvvshurDQh+jG9hYf2OY6/UGNDcpCj4ou65KLHvS7EO136ZyMRiOIZp2ci97YwG+N225t0banTp2C6KEDK7jv+PSnf5v/APzCn/lpiJ4/f5E339mhU7qwsADR4YSq95VLaxDtdqkaSJL0SiQ6fkmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJElvJb6ATJIkSZIkSZIkSZIkSZIkSZIkSZIkSZJ06/nsj3/oZh+CpH35Zz/87pt9CJIkSbcvX0AmSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIk3UaKvLv3HWRN08AGWSej3VW0bVN0UsdDm/cKel1a3dQQ7WR02GVV8mHlHSp6tD2GaK+L3zqjrxwRVVVBNM/pwKoZbVvXEy6ad17iCZ9NhhAtsgIPLHE5GFfgGr/UNcV1rniTU0XK8I1+eUEH1ulRPel06IxFRNPQgeVdulhNjbd83uOiswxrOH/roMPGKnb1L278hFfcYuC37nQSTVlVTmnzXheifCl7RaomlPS9+hnWf6wJTTXjonNszJoJbT4Y0Al/73vfB9H/3+/8Nh5XbGxuQ5Qr8AAvVr874KK72GIMuhRdWVyC6GRE/U5dJnqW7mARohlfS1SnXmzKTXRZUQUuFviEJ5qMDIvOsTkKHMBMZ1R0XScOjHvbpkd3fcMNcKo/zfF78cXKsTlqcOCU3Lw92Ozu+vt+d86Nee3DEQ75+GxHRM7jroIaq6WD1GL0+n0uOnK8nHhjJgY/eGMmRqoRi/itpziK7nVo2x5W74jgu6fG3jawy5tOEsPgqsZeD5v32Yy25ctR4GwoIvKcqllV0TlZXqDGv0m0sXHmzBmILi1Rt3Xo0KG5nx89fCwihuubXPRCl6pKPqFKOJvRtR4tLkM0S427crzWG1jNMuzykl0xz0rqGZ2TmhtCbEUjoulQJdwY79C+sXfgIfakTHRqXewUt4d0YDmWXY9pbhsRZUl9x3RCN2YXG6vVZaqi3VQVLarEH1yzcJ1OarC4MH/PqQnR9jaNwHmVY2trA6IN3jsRkXfo/hntUE3giV6O9136wHAQkuHSEJ+x5DCYi17G9n8bz1h33qhstwqbo8XB/Ap21QzHGCtdnNGkmrIKZ0wFrsCUOMZe7tKXiogT95yG6MMPPgTRheXv97ZVvDwLfu/7f+jqPzbW6WLdcdedfGAbG1cg+vh3/xiiGa5jHLvzDi76wMoqRMczakWvXKYWo8KeOiIOrB6E6GxKRVcN3Zj33XsPRNfWLuNxJQarA7x3Ll1eg+ji8goX3Svoah46dASiI+zyvvzlL3PRd2CTcvpuuneef+55iF6+SCf8sS26dyISg/+XXnoJorxWfPToUS6Zh7Jc9PHjxyGaXHQdYSW8coVuvWNH6a5fWaFKmJyz8+rlANe7Am/bwQLNaCJiOKYafhanS+vr6xB9x9vfCdHvPv4EHtecJZTdyvIgRHn2+uz3nuWip9hOciUcHaJb721vpw4xIjo4iv7Sl74E0XvuoxtgOKTBPw8hIuI73/42RHns9K530093rlxnZH5NH9editaD4N0W+nRgO6PEEsrSEh3bBB9TXlm7CNEMx10vpoZ8/KiRG5zHHnsMoh/4QOLXki9doq6n16PlsrsWqBXN7r0PolVqVvLCC89B9PHvUAU+cJDGbJdxBBIRb3/obRAtcHrL0RmvEEYEXuu1KzQMPnn8FETPnD0L0RkOjSLVbd1999208yndWdyURcSRIzSoS/QsNRXN7XNEjDB/YIK9bQcTRRrs6FdWE8PgGjfnr9Xg0KrfSyy68syCu54pHza2k/xMISJmU3oQye1Nh6sRjugiIgv6XiXmI+Wp3BtW4bPCAydoAP+hn/4oRE+84yREj61SGxsR3/wadUyffNcnIPqZ/56epPda9Tvv7u1AzR9rM3+s7RbKH9v9CeePXS9t7OVdmT/W/gPzx9o7N3+svfkN5Y9d/Xyf+WOjyd5zsjujzPyxNvPH5pVt/lh72zc0f+yqqw/KzR9rM39sDvPHWl7X/LFjd8xf3ryaV3a9/LGIOHr4mPljc/Zs/liL+WNztt1f/lgPL8f1Msf2FnGdU2f+2LzNzR/by/yxP/HUtX998pOfhG2v5Y/NxfljsSvl7Id++P1zNjd/rMX8sbZbJX/sd3/0g7v/kxcYFwbJmdr8c/Kxz76coPKP3/ng3L/hteLVA4mEJR7KDrdHEH3/++fc6ddsbSey5q5gvtPGxo3nj/Xx/yFNztkPHaAWYweXyzh/rEg92z1/4QJEX9zH/27D+WOf/fzn8LgST/lPn6YnlT/x4z8G0W8/9l0uej/5Y+cunLte6Mgh88fmMH+szfyxNvPH5jN/rMX8sTbzx9rMH2u7XfLH+FAkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkvZX4AjJJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiTpNuILyCRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkqTbiC8gkyRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkm4jvoBMkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJuo34AjJJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiTpNlLc7AOQJEmSJEnSzfGL3/ne3M//7DeffIOPRLoNfBujvw2x6rU9EEmSJEmSJEmSJEmSJEmSJEmSJEmSIorxdLLno26H3kqW1bS7sqFwk/pf5YqconlO4brGoksqu1N08Lgiy+kPsowOLM/wLW8ZlxxN00B0Vs4gujBYoG1nJRc9m9HOe50eRKfTKURH5d5at1uGFzoi6obOWpbRxcpzOp/X9GL+MdxV0NWs8ZRmeGcN+ng+UxVlPKWL1cFz0u3SCe9E8ozRt+abK8Pq3TSJmpDYHF+wyO0JV8IKy42IDL91VdHmRY+udZ26Gk2PjrzE7Zfwf2fudFLtZIeKbnpdiK4PhxB9/swZiPZ71NBFRGATneHNVVV0Tpo8cWNyO1l3qdvKsAVe7A8gmncTFaXBljC7TgP4/SjWBKzdEREVNikDvPUarKKDLtWxiKhxJFBje1Ph4CfDMLc2EVGVWBNwZFUHRYvUOZlubUO0g7dtt0+33mCxz0V3F5YgOmsNGVcPrl779+bW1pxNyu93RgXed/1+4pwUOGx7amcTovWM6tjxQ4maEBl2arjz6NKN2WBTts17jriMI3geqdYNDQibWWocjDdXB2+ucUnjkwrvrIgIbKzqGUU7PWwn8ZZPOrhMt97FtTl3x8u2cfC/cZmLHgzo5uriUHZjax0+H47HXPSwojt3ihOiBocBL+AYI7JEFeX6/+A9d9PGM7o78lTRXfxeJbc3OHHudelSRkRT4QnHonEuFRmPdLuJl6fTYUVk+L1qvJR5nii6W2BXjnf99rxO7Zql1RXaM3YcEdHHG1PSW8PXv/Lo1X88e/YF+LNeL9EgTKfUHZ84dQKiZ8+cheg3H32Ei/7xj38CogeWqSV8+smnIbqFbWykJrALPZrUDPoUHe6MIJpjPx4RSzxdwkXX2YSizz//LBdd4Ld+3/uWIbqIk8TpKDHkm0xouXhzYx2iP/ZjPwbRu0/fA1FexI6IDAdmTzzxBG5Mwe9855tc9NrFS/wHoCzpe3E0Ip577hmIFgU1KSdOUIsxGNCK1n333ccH1sNFV76aa5fpfG5uJFqMwwcPQHR7g5YLlnEe9+LZ5yF6/NgxPrC6poneBG+9EifOdx2/g4vudelqrqxQA17gSLXBB0ARcfHSRYhOZ/StD6xSU/bsc89BlCt/RLzjnQ9TGOdL/IiTL1ZEHDhAVZSXhkpc+Tl58iQX/dRTT0F0Ee/6e+6hu77AOWTDK7YRD95PnVqBo6NDB6meBD4KiYjxmJ53rKxQRz8a0SiCu5YXz5/DbROPs0ucvR4/fhyi0wlPymNwkC4HL6Hz8suBXevGc/FTnqJDp/R973s3ROcuU1+TbMr4W3dxbZ9r//Y21cBIVbMxrtRVObYno0RjdeoENSm8UL2AfcdwtAPRA6uJerJxZR2LpqaswQtSYk8dqYf4DS5T85oV17EKl/gimT+D63j86KrXTTzYLfHYCszbmUypJvAz+ogocn4kQff1v/jGVyB6uqKe+u6jiXOygg+YNrCd/Il//5MQ/fLn974nffzV7+75xPyxNvPH2m6h/LHdn3D+2PXSxq4xf2we88dam5s/NufAbiR/bDYtY9/5Y7P2Cd/VaJs/Nqdo88dazB9re4Pzx666mkVm/tgc5o+1mD82x83IH7v6+fXyx66GzB9rM39sDvPH2nveX/5YHx9+3XHH0esHX/5Vyz/zc//S3L84eJjWxL773b3LULvxSvXnP/cliEbEaEirDYMFupr3338/RPmWv4KJDZF6+MUXk3N0eekmIhawAe91adh2cEwPzhpcaoiIBRzybW5vQJQfkh45cgiiXfxSEXEG2//tTRokHzp0EKJD/H+jIuLci+f3fPKeXf/u/V//a9iWB234jPMHnPw7/585H+Im73zFO5+HEttuT0dez50/+HrufD9eQS3iR95/BLGHXt2xvPZ+4sc/MT9g/liL+WNt5o+1mT/WZv5Ym/ljbeaPzWX+WJv5Y23mj805MPPHWm6T/LHUoyxJkiRJkiS9hfzuh9+T/iNJb26P/dxP3+xDkCRJkiRJkiRJkiRJkiRJkiRJkiTd2nwBmSRJkiRJkiRJkiRJkiRJkiRJkiRJkvRG+MyH3nuzD0HSvlz6D/7dm30IkiRJkvTaKG72AUiSJEmSJOkN9bsffk/7w5/8yjev/fsPfvJH5m74Mz/1s7zng4cPQPS73/0uRMfjMUQ//7kvcdGj4QiigwVaBHvwgbdBtGkaiF7ZWMfjiqKgojPad3T7PYjOZjMuemFAm/e6fYhOx3Q+m6yTKHphCaKb2xsQLcsSokeOHIJoF79URJw5cwai25vbED106CBEh8MhF53n9FMQdV1D9Pgdx3nnkiRJkiRJkiRJkiRJkiRJkiRJkiS9Wr6ATJIkSZIkSZIkSZIkSZIkSZIkSZIkSXqDfOZD7736j/38gOWzZ1+A6C9+44+v/fuff/C97T+YTum3Y++6606Inj1zFqKj0Q5EI+LHP/4JiPIPuD7yyGMQ3dra4qLvOnESogs9+iXUQZ+iBw/S7/hOJhM+sE5GP3Q6m04hev7SRYg+//yzXHSB3/p973sfRAf9BYh++tOf5qLvvuc0RO+44yhE3/3uObX65T2fvgeiUzyfEZFlGUSfeOIJ3lySJEmSbiE0HZUkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZL0FuMLyCRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkqTbiC8gkyRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkm4jRbfb3fNRU9WwQSfPIJplFC2rKR9Nt9OjzUs6sCxraNuatu1mBR/YYNCHaFWVGK2o6Nb537s5HnnRoc1neGBlSdGIwDMa0dD3WhgMIFph0WtXtrHgqEqqSE1NOy/yxAm/aqk7v0qsNFTDZ/hCv7qhS5l3OhDt8rWIKLCK0q4jZiVdyhxv+YhYWlygnWN7UieK5pKjm9Odi9cqmob2Xged8SIS56SDTVme0wVpsJ5MpjMuOnDn3IAHfq8OVtEIPGWpi7W4uAhR7lkWlmjbiOBDwxMWA2zKOokvHYsrSxAdjUYQrfFyVDNq6GZYiyKiqfGc4L2XN1Q0V++ImGL73y2onlTYvDdYTyJihieNq9loMsR907ee1dTQRSRaq9lkAtHV1VWIjqdjLnlrjN9rSjWh2aFt843E5XjgbQ9CdLm7975e3tVKzB1jXPtwjGdsa7zDB5ZhHT67QUOUpUVqMQ5i9Y6IckbDmzKjCtzBm7oo6Esle5ZOUB3u4M7zjMddiVa0xnpUY2M1wJ5lioPJSI02O13syrEB5+HNEO+siJgu0LiLm/9OQQfWwxFdRGTYlZ84dQqidbm7mn392r9OnjwVESUOCCPiwoXzEC069L2mU+y2sNwsVUU5zMP7o4cP0rapTm0ypSpaVXRo3OX1eonpEh8aH/n9D9wH0bNnzmDBiblBt0uN8MbGBu4bd566HEcOH4LoBJv3xx59BKK9Pk0ruC2KiOWCNt8ZJsYJEbF1ZXPu57/5G7/BG3axweEllDqotTlw4AAXPcN+7cr6/G901X0P3E9Fry5D9O/+vX/ABxbYWZ++m1pR/lJJPKnhwX9d07bcnkTE+sZliH7ve9+jonHPF9bocvz0J38St47f++zvQrTbowWWsqTL8YlP/gQXfejAYYhOR9RiDJaos37/Bz8A0RInUxGxtnYBor/9mc9A9NRJqsBnztLMNyI2NqmJ7hbUMa1fXqNtFxLLBUtLNGcfdKkV5XWMe++9G6Kz1Ar5xnWa36u2sFM7fvw4RHmZOiIGA/rW29t0YOubVyD6ILaxkTq2c2fPQfQg3lnnX7oI0T5+5UhVQh6hDLA9OXCAZvQRce7sCxB9+G3vgOjGxhZEe31q3iPih3+ImhQei/bw3plNcKqV6lm+8eijEF09QKOy+x+8F6I729QrRUTeoYt9+OgRiPKyKg+he/3ETG0ypkHd/Q9Qc1TgInbdJCZEFT4h4uadRxEXzlOvFBEzXPI6duwYRA/jXGxrhxq6ySzVivKcHdcADx04SNtWiQHhsTuoEh4+SKPoBx+iZbrf+9wXuOijx6gRDnwkt7KywjsHRWohusEqyv3O5tY6RN/+9rdz0adwkeQAXusZTiFPnzoN0UlqNfi3fuu3ILowoIt13900o+/hM8qIGE1xlXuZasJwRMtlC/1E0WNsJ8cTGqx+9WuPQXR9nRq6o0epLYpUf9rHeVyBve3OcmINHKen8fWvfx2iNT4hqvnRbMTWeTo2XlblYULiASg2CBExm1Ez+9DDVP+ff4HGbE2TaKx4hZEzSUpsyjjaST2Gr3FzTnsogqroeJaYJAamxzQZnVJexO7hSnJEjEZ4++DCabeinR/s3QnRt92XGJ//3N00vP/DizQM/vZz1E4ePbh3CLFm/pj5Y9fxlskf2/0J54/1rpM2do35Y23mj7WZP9b2avLHruz5fJ/5Y7PNdpPy8sGaP9Zm/lib+WNtb3D+2Pc/X1wM88fmMX+szfyxtjcwf+zLez6v9z5q/4EUMvPH5mxr/ticgs0f2+t1zR+7XubYHtdLJDN/bA7zx1rMH2t7/fLH6vgvr/37Z3/2Z9p/YP5Ym/ljbeaPtZk/Nmfn5o+1mD/WZv5Ym/ljr5b5Y23mj81l/lib+WNt5o+1mT82b/vbIn8s8ShLkiRJkiRw39/7xzew1QP/0z+JiAde64N503jmZh/AmxAtvNKjrbeuDyfi335DjkKSJEmSJEmSJEmSJEmSJEmSJEmSJEm3qdQvxEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEl6C/EFZJIkSZKkV+c33n7fzT4ESa+jT//wu272IUiSJEmSJEmSJEmSJEmSJEmSJEmSJOn15QvIJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSpNtIcbMPQJIkSZJ06/mNt9939R/v/+Efhj+ry9m1fz/wP/2Ta//+3l/4hYh47rnnuJQLF85DtMlo2+m0guiL5y5CNMM9R0TTUPSB+++D6NHDKxDNU2VPplOIVhUdWYY77/W6XDQfGh/5/Q/QOTl75gwWnHh5erc7gOjGxgbuG3eeuhxHDh+C6GRGF+uxRx+B6L133wPRTrfDB9YvehDdGY4h2nD9liRJkiRJkiRJkiRJkiRJkiRJkiRJ0ltC4n/ilSRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkvRWUtRVs/ejTgc2qJu9f79bVVcQ7fYdzGwiAAAgAElEQVR7fDR1TTtvsgyi/X6fdp3TtpPJGI8r8b3qWQnRbqcL0el0ykXzOenmdLEGg0WI7sx2uOiyrmnnBV3NplWvdquwFgV+5YjIsCYsLa5AdDhOXOvvW5xfnY4sH4aNLp47A9Eso/f9HT52FKJbo8RhT2ZUkboNnbGiS9V7YTDgojdHXJGoaDwlkRcFFz2tqIo2+ILFTocOrCzpnEzx1oiIJqeiq8kMohluW0fi7qirCe08qDkq8IxtTGjPETHAqlJjFR1iDR9iE10U1AxGRNPQ9Sqwmm0OtyDKzWBE9Eu61kWfLsfOzgii4wpv+S52iBHD4TYdGA4DOhg9sJxoMXoDOmlVRbdeHlR01qXzGRElXo7eAp20OnHCsWhsqSI1EqCDjpjh8CbVVkV3aYnCGQ8I6dA6eaIB396iGn7g4N7Lsfu7dOad8GsfDnpYNLaxEZF3uGei4MrBAxC9cOkiF3365AmIZnitcx6984iOR2WpGp64bfGEr66uctET7HqmUxqBz60n1yzjYDJZNOsvUiXMM2oGn3riSd750jINdLeGdGf9yI/8CETvPnmai/7U//wpiL700gWIjnYNFx/Y9flzL5yJiM3NDS56aZW+dQ97vSvrlyHKY9FOqsWY4c3FI5DDh49A9MgRmnRExJPfewaiBd7XZUn3TqpJSLSTHWysLl9ag2iviyOr1OUYT6lj4hnoc08/DVEe5UbEsTvoar7nHe+D6Ff+8MsQ3dzchChfyoj4yEc/CtEfet/7IcoN+Dg1rebR5n333w3RRx95DKKf/cIXuegI6piamk7ao498DaKrS8sQ7XCDElH0qXdYWaY+scEvtbxEKz8RceLkcYgOcDHtytoViK5doelSpGZbJ0+chGh/gW49rqJf+xpdyog4eYp6vbKk8fmVNWrKuqnGqprRGGOGVXR6hQ5sgDXhjjto0Ski1tfpe/EY+fy5FyH6/ve9l4ueVdya0aDune9+D0QTy48Ryws0IZrhajBPnF947jmIrq+v43HF3afvpaJ7uCSb02HfdYIahIgYjWg8yU3dIKdK2JSJETgucscUu57JmO6sZRxC72xRnxUR99xzD0Q3tmgoywu2Uxy9RMSJE9RYHTtyB0R3xrRgy+1z8g/GFR35oE81oZrhWhkPCCP+wr/2KxDlJ0R/8KUvQXRxKbGYtoTN7OEjtCDAi2k8t51M6K6MiC5erOmU7p2VFeptP/Thn+OieQD/4osvQfQKtoSLCwtc9PPPPw/R5577HkTvuIPunaPYYyanSyU+2xpu0Y3Z79LlePqpp7jo8Q5d628/T531179GI/BRaoWk06VKuL09hGgPKzA/Hh2PE3dHhWOMHo7Pm4b608997nNc9BSfAfFQNsfFhBKfvRa9xLMSnrPnHTon3/jWtyHa4yXZiD7OrHu4jnfX8TshupNYQY+lZZrK3bmP6dLPnvxZiK6sUtcQER0c/SwOqCXcxkn3AvbFEXHx0iWI/vv/y38PopwywV1eRLx49ixEtzfoe61v0wy0xC6vgw87ImIwoGs9wwEMn5PHHqN7JyLGI2qsHv/j70L0yhWaxwW2JxW2JxHRw3lHXeOjcBwu5qnnRzU2wvyspMbLEakqWmNORTajnf/0j/08RP+tX/23IdobJC7H089RTfjJTzwA0R+fUfUe/ct7L9Yv/8Sf3vOJ+WNt5o/N2fmbPX/sSuuTiGT+2HXSxq4xf6zN/LE5RZs/1j6wG8of29oexuuQP7b7E/PH5hyY+WMt5o/N2fkbmz/2/ULrCPPH5jF/rM38sbY3LH/svtbnox8cLu5JITN/rM38sXkFmz+212ueP7Ye37r271/5les+nL0c//G1f//iL/zC3L8xf6zN/LE288faXr/8sd0t7OGDB9t/YP5Ym/ljbeaPtZk/1mb+WJv5Y23mj7WZP9Zm/lib+WNt5o+1mT8258DMH2sxf+w6RZs/FonLI0mSJEmSJEmSJEmSJEmSJEmSJEmSFBHDv/E3b2Aren9eBP8v2r90A+W9Cl+/4S1/eL9F07uKbiJ6P0cqmvTu/W3+ZvV39rNx4p3KkiRJkiRJr6fEi9UlSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkvZX4AjJJkiRJkiRJkiRJkiRJkiRJkiRJkjTf4f/qb97sQ5B04w56C0uSJEmSpOvwBWSSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEnSbaS42QcgSZIkSZIkSZIkSZIkSZIkSZIkSZLevBb/s/+Y/2A43IboffffDdFHH3kMop/9whe56PFwDNHNrQ2IPvzwwxBdXVqG6ONPfo8PrCjo/9984IEHINpEBdHlpUUu+sTJ4xAd9PsQvbJ2BaJrV7a46KqiIz937hxE+wsDiOZ5DtHJZMQHNsR6UpZTiF5ZW4Pon/9zf46LXhgsQHQ8LSHalA1EB1gT7rjjKB+YJEmSJEkSLbhIkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJeovxBWSSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEnSbaTIWq8gq6oGN6khxltOp1M+mn7RhWjR6UB0OBnRnrs9iOZ54kVsTUXfulMUEM0y2nMe9KUiotOh7Tt8ToY7uG++XFF06XKUdQXRXrcP0Vk1oz03dLYjoq7pD0Zj+tZ1idfjT5y/uDb38xdfugBbDbCalU0J0Xfh5RhzNYqgXUesBZ3wqsTLsc61KPr9AYWxlvV6dO+M8cAiosA7t9OhaMPVrOBtE/dOokHBnbMptkURUeP3qrFNOLx4DKL5AlXviBjijdmpqQ7XOUW3d6h5X15a4QPrYzXLc6rAW3jbNqkr2enRSVu7NL+duergwYMQXSr4WyeObGWFNu/3qfEPvFgNDhIioirpDwYduljLS0sQHY6HXPRgeRmiq6urEN3a2YLoeExVdJ8ve93cpO/Fw4DxeJt3zm3Ze973bohyX/yhD3yYi167cgmiX/3K1/bu8He+yDv8xW89yX/whji/v803Xpuj0K3sY+k/ubiP3f/DfWwbv/R/5vj3bmCfS8sLEVGW1AJHxB1HD0P03AW69Y4fvxOid999N0RH48RY9OJFasrWr6xD9IUXnoUoj2Mj4uKlcxDdwbFTJ6grf+d7qPGPiA72Hj/6oz+KB7ZJu8Yx9h8//jQeV3S6tHm/T/NT7tTyxJQ9Ni5fgegXv/A5iJ46dYJ2jUXXNc8CYwUHP5cu0dz2rjvo3jnz/Atc9I//+I9BdDqjKvrQ2x6G6B98+V9w0eMR7fztD70NoisrByFa49Tg4YfpsCNiOsWZRUULLFlBt22RWlZ699vfCdEvfP4LEF3fpGHwwcNHuegRXg6e8vCiU9NQdHkxNUnsL+DOqT1ZwJWftSs0y4uIu+++F6KjDTrhJ06dhGgP11Rfwu4yIiaTCUTf8S7qHTKcBp44cZyLnuFCB6+C8IRoZ0RfKiKKLnW4vMqX4WzqL/+H/wuI8iAhIv7RP/xNiC4vUw3n9a6TJ6l5j4gh3raLC3TvjKZ0wusysZi2sUEToitXLkP0wx/9EESH2zStvngxMe7a3qYb84XnnqeicZl6Ok5U0dXlRYjiCkpkWBMq7HciYmeHjjzDlerhFp3wApeVHvn61/nAHv3q3uWC3fghzuIBWlaalYnL0cWF6BexmeXRJjdls9QztTlP+HbZwRWt0SYtHD3y6KNcdFR0NSezMUTzjLqtCsddkVrbxBlPPP74H0N0cZHuuyb1cGlri+6d06dO08YdujH/9M//DBfNa5vLK9SAd/vUoHTzxHOBGT5TXsZZyXhGNZxnr6Mh1bGImE6oImXYl29tUa+0PeTV4NjZpprAR740oNnrxcs02ux0cGE/9cS5ws66xvF5nnrizLkHDV6OLraTU3ziEBFZTjsfDakSDjG6sYHPT1MPdnnekePmDT5xayLR0df8lBNXpcqSzgkPEiI1NebRf4OXkgc/TZaoJ1s7+L1wVs4D3ZpnDhEzXN6ZYDuJQ4zEbVtgfkukEns6Bebe4G1b16nn7Lg5txgVns+mTNwdXIN3hjTQ/St/+a9A9Mo2rR/+3f/vr2PJ8fO/8Kch+thj34RoU9PwZrG7t6c2fyzMH7uOt0z+2O5POH/s/Po6F23+WJv5Y23mj7XdWP7Y1c/3mT+2vbV3nWR3Rpn5Y23mj7WZP9b2BuePXXX1Wca9L+d7vJwzdu3DnRE1ZdvbiXOyhk8leFR25Bg9Qr14/iUu+t4HH4JojrP+nTGtO5UlNWXDncRqW7/L1QyH9/vLfOC59dISzXp47rwzSrQY5y9Qcg63ootLVBOOYirUt76RuBxrl6iKLvSp33n6KUqz/Pa3v8NF5zk10QuL8/uOq5/nneuuVC8tL5g/1mb+WJv5Y22vef7Y7pucF//NH2szf2wu88fazB9rM3+szfyxNvPH2swfazN/rM38sTbzx9rMH2szf6zN/LE288fazB+bEzV/bM6BmT+215sqf2xfDzUlSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIk3Vp8AZkkSZLedD7/sQ/e7EOQ9Dr68k9/7GYfgiRJkiRJkiRJkiRJkiRJkiRJkiRJkiTd1nwBmSRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJknQbKW72AUiSJElzfP5jH2x/ePDAgav/eN9v/e61Dx/7Mz959R87oxHscHt7m0tcu3IZomdfOAvRt7/znRC9eP4lLvpjH/sYRPOoILozHkO0LEuIDndo24jodzsQHY+ntDFtGoNuYiZSTulbF70eROua9rwzGnLRL51/EaIrKysQPXr06A1Hf++zn+cDO3LwCESLLr1denV1FaKjyYyL5op0z70nITqZTHjnkiRJkiRJkiRJkiRJkiRJkiRJkiRJkqQ3ni8gkyRJkiRJkiRJkiRJkiRJkiRJkvTa+KH/+bP8Bx/57d/fbxH73P6m2cDoM7zxe17DA9nri/vZeBxfgij+pm3Cu/ax7W3s12/2AUiSJEmSJEm6ZeQ3+wAkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkvXF8AZkkSZIkSZIkSZIkSZIkSZIkSZKkG/fov/TJm30Ikval/Gv/q5t9CJIkSZIkSZLeaEU0e99B1mQVbJBluL9ZDcFe0eGj6RT0QrRZNYVokdPOq6qE6GBhkQ9sMplAtNvtQbSu6Zw0VcNFdzp0TsqSvtcCfq/pmL5URMxKqgkrKysQHQ9p52VJ5ySo2IiIrKaTVhQFRCfjUWLvERExu06FWVoY0GZ4rTsNHXbV0LYX1y5QuRFHjhyBaI+qSdR9qmPdQZ+LHnTpD7qdLkSnJdWTxU6ixZjVVFeKHtWEXkYHVtYziFYN3fKRujt2dnaoaLyp+9jaRESD1ez89jmIrgZtm6Ua8DuPHMMDo84jz6kSfviDH6CC87l7/hfX/nXvfffD1nVNJ3x9nVrRrfUtOrCIoqDrtbh6AKInTp2GaF1ThzgYJDq10YhawuFkDNGFPt3yO9uJc1JxPcqoEuZduqmrEfYsEV3sHda3NiG6vLwM0V6Pzkkfz1hEbG5uQ3Rlhc7J5cvrEO2kWtGlVWqsnnvuOdq4ohP++B8/zkUfWFmF6GhElXB9Y+PqP96368Nnn3/+6j/GY9r2jqNH+cAGfeodPvojH4LomRdehOhkmhiBnD37PET5yL/9rW9DdDaj7vKhhx7iA+MGvNejhm5hgc5nsrHidyVzA765Sc1Rp+ApTUyn1Mxub/NtuwTRZ5+hC93t0hmLiAyPfHNzHaLvete7IHrxwhoXfeedd0KUpzw1ThLvPnWKix6PhxA9h/fO4iJVsy72LJEnLkeFQ9n7778XooMeVe/tbeqVIuL06XsgWpU4x8R7J4mv9cWL5yHawZuam6NvfyfRs+SBVxNxPcFVij8p/Pq4ncxxjNE01IBvTWnOEhFbG1SRlnC5oJpRPTl16gQX3cNx10vnLkOU6+/BFRpCR8TSEjXCx4/fBdEZfuuioNUA7i4jYhFnajl+66WlBYjWOCqLiH/73/tViP4rf/4XIfq3/tZ/A9GXLlzhopeW6cjvOk7DmwzXHxNLbXi2I2I8pRHj9voGRDt3HoZohUOIiNjBIcpkRMsFT3ybhnwNzujLJtH4b2zQtx7g0lA5o+bo4qXEilaRU4vB0+otHPxPcDU4IqoJXa8SV+oWcBr4n/9n/zkXzXjww8P7GV6OiESLsb6+DtGFZWpjqxlVQr7vImKAc+cca/g3v/E1iK7hxLnXTyy13XnnHRD9wIffC9FVXPkZDBKjzUVciL7rLurUuOiIRLe1eoDm7IlRdIeiPCAsceIQEcvcJ2LvMJ3S6P3SpcSEaDKkSf14Ru0Jr1RcvkxDo6QaV8gn2NAlLgc+HorUCefHCiN8ftTrJ8b2TY11OMPHNInlMorW+NQgIu66AxfYcef8qPCZp1/golNjp8TGFExNiPipcY2P8xrsbfmpQVMlHyVS0R2cs1R8rbkGRjRYCXNshHdGuBrG49wq0dtOsCrkNZ5wfgCKjwIjogq+fejuKDFvIbV4k7g7GLexPAvkJ+GRquE11vCiQ2XjjRURkeM5mfFqA1fC1Mnu4F+UPHHGPXdx4sCLvRFRdOnAeKCLjU0U8x9ivoyXUA4coEHd+mUawHBPfb1ciF2b81N4uvfGeMIXB5hukVqfabCxyjG1pkktoXAWyic++BGI/q//w78C0b/6a38don/xX/sVPrC1KzSzPvkgLbBvvkTj2Ifvfvvej8wfM3/sOt4y+WO7P+H8sWRTaf5Ym/ljbeaPzTuwV54/9vKayam774kbzB972eD7t+3LD5d3Z5SZP9Zm/lib+WNz3Iz8sY319TB/bB7zx9rMH2u7ifljkm4t5XRm/lib+WNt5o+1mT/WZv7YDTB/rM38sTbzx9rMH2szf6zN/LG5G1PQ/LE288dazB9rM39sLvPH2swfazN/rO2NzB+78f9HV5IkSZIkSZIkSZIkSZIkSZIk6Wb5xW89+cr+MPG/a6Y8s7/N2aM3vCW9Virt4r62fov6xL62fum1OYj59vO/pv9TiCVeRPe6+frPfoJ/OzBS7+D4+iN/BNHX9Qcsx/hC5zuO0Ssh+Acs269U3qPht2/v4wcsB0uJy5Hh/3z48MNUlfbzA5b//DOf4QPj/zluii/5HQ6pju3zByyn+CL1El8JkfgBy83ED53+8Ps/CFF+a4kkSZIkSZKk2016KVSSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEnSW4YvIJMkSZIkSZIkSZIkSZIkSZIkSbeGT737oZt9CJL25es/+4mbfQiSJEmSJEmSJCnCF5BJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJt5XiZh+AJEmSJEmSJEmSJEmSJEnS6+Jff+b8a7ez8Wu3qz0e39/mW6/NUei29r39bX7utTkKSXrFPvXuh/Z8Mh5TT33H0aO8w/WtdYgeO3YMomdeeJH2vHGZi374bW+DKB/5Y9/8FkRnswqiDz209xzu0ckyiDZNA9GFhS5EB4NFLjoih1hdlxDd3KSh0WiaGNE988wzEO33+xA9fvxOiM6mdMbOnDnDB3bgwAGI7mxtQPRHfuRjEL14YY2LvvNO+l51XUN0a5sOTJIkSZIkSZIk3XT0VEaSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEnSW0zRLfa+g6yq6GdV6qBop1tAtKlp24jo9XBz3LbG38+pGvpNlW5FP+wTEXVNf1A1FM3xZ386HS45+CVxvQGdsQq/V7ff44KregrRnZ0R7bxDP1jUSXxt+j2iiMgyrKL4c0ZLywvXD25e+9fq8tL8ojtUkab4k0RNTZeyGNBPIRW9AUQjYnn1MEQHi7TzTkYHNplMuGj+A/5hq5Vl+l6T0ZCL7nXo5rrj2F0QvbxGP9OUB90dBZYbEdMJ3TtYCaNu6O7oFXTLR0RVUf1fX1+H6GBAlyNPNVaXL+OPs2H7P8PD/v3fp98Zq5s52/7Lu/79zNNPw+ZFTlezwBNelnShI2I6pT+48BL92N0C3rarS8sQfeb5xC/iDne2Ifq2h+ln9MYjuhxZlqgoi33qHRawJeSfjDtyOPHLhHlObd36Ov262mPf+AZEZ5MZRA8cWOEDO336NP8BWFu/AtHFxUTfwQ34Bz/yUYhevngJojMcTEbEwYMHITra2YHo+OU768lrHx79kx94rGq6HE1J0YiYTGh4s729CdEDB+cPHq7q9hJ9B9bQuIDd1vETx3nnYHmZ2pOImOE5mc3olC4sUJc3HqY6ehz/jEZ0YNOKDizPEv3pQw8+DNGySrT/YFbRtz5y5AhvvrxIP/vZYP3f2aFf9axTI/CtIW1+FH9kddbgcBHH9pGa1HB7wm1sWdK3Xl5JNODnXroA0ZUDdHNlOX1rPrCI6BU4YuxRdDCg30FdXkj0Hez/+F/+TYjyXX8QfyX4y1/5Iy46L2iMUeKcvWkOQZSbsog4dpju3PUtGnfNxtSU7YyoQ1xfo2FARBSt1Z7d7r//XohewbH9o4/Q0Cginnv2exBN/eYtfeuVlUS3NcSTdnCVWtFyiktD2Hd0cA0kIngSWRS8PkNnrMNjiIj/5Nf+BkSv4CRxe0hVNLlccPnSRYjOKvpem5vrEOV2spsaBndxVarBUcSRI9TlLSzSgDAizl04B9HBAm1+8r5TEH3wwQcg2seJWETcfffdED1xnEabgwWqwCUOFyOi26WJXoZrVryIXaUWokucHTS4cx4GT7B5fxZ/LD0iplPcOd5629jbzsaJ2zY6dMKbElfIg1q65YXEz9ePJ3Tk/T7d10M84VzHqjJZT6jByfGMTXG5YIIzmojYXKcR+MUL1Fk3JfYd+BQmIjJ8osG4o0/8Ik6qXH7UUmEDnvpSiaIzXOXudKlnqbE5ajK6s5LXImvolHYK2nxWU5Rb4IhoOvS9pjNcQix4rThxd/DQi498ihPnPL/xR4ER0cHrNXcd++WieXzCBUeUOHHOcOddHOimburEky9+GJjo6LHfiVQV5du6xHaSD6zBJ84Rwecsw0cSGd6YvOsm9cgZn3VHhqeswQacoxGR51TNEm1d4nwmii5ndOvxQ0x+ppAoGh97ReqEV3itp1gJk31HoqvGesS1KHl3FLiixSc8MQPFrIZ+KimC27omo50XONrsJub7Mc6paB6Lct4O35g8rIqIxWVaGq1ndNgFXspZKjOHx13c3nDfUeOSbERkOHZ69g++CtE//Vf/A4j+V/+3/ztE16qzeFzx13/tP4LoP/6d/zdEV5Zo0fXRxx/d84n5Y2H+2PU2v5Xzx379niN/6Tl60irpTe5/vOfOiBfjhvLHdhuPJhHxwV2f7M4oM3+szfyxNvPH2t7A/LGnrv3r5MmT8QP5Y3OYP/ZqmT82l/ljbeaPtZk/1mb+WJv5Y23mj7WZP9Zm/lib+WNt5o+1mT/WZv5Ym/ljc+NctPljbeaPzTkw88dazB+bs3Pzx9pFmz/W3tr8sRbzx9rMH2szf6zt1eaPpfpXSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSW8hiXcVS5IkSZIkSZIkSZIkSZIk3Vp+/Z4j7Q/5R7Y3N7Z5n1kHf3F6ij+jXdNv6r7zXe+E6ItnzvGBnTx5GqKDRfrt5Q7+lnviB6VTf8A/Hl50sejRkItuOvQrxHccuwuil9fWaM/4474FlhsR0wnVhF6fKmHd0K9/94pE0m+Fv6n+zDPPQPTUqVMQnc7GXPRwxL89TjVhlvopeEmSJEmSJEmSJEmS9DrxBWSSpLeyX37i+ZtXeCL1E33jNTuKV+3CzSv6Teqj+9p6K/UHL97wrv9UIp7Iik75FMQe2N+uJUmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSdHPRr7RJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJeovxBWSSJEm6hf3+J37kZh+CJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEnSLaa42QcgSZIkSZIkSZIkSZIkSZIkSa+7X37i+TeqqHP72PYbr9lRvGoXbl7Rb1If3dfWW6k/ePGGd/2nEvHtG95zRER8CmIP7G/XkiRJkiRJkiRJkt48fAGZJOmt7B++7W6IFnlG0YJ6yeFwyEUfPHgYomfOUB7bPfffB9HVpWWIvnj+JT6w4Q7lFb3t4bdBdDaeQbSuay66KHKILgz6EO0PFiBaVRUXnedU9Pr6BkSfeOpJiM4mdE4OHFjhAzt9+jREuZo9+fQzEF1cHHDR3bwD0Q9+hBLnLl+8BNFZ1XDRBw8ehOhoZwei4+mUdy5JkiRJkiRJkiRJkiRJkiRJkiRJkiRJkqSkoizL1of0zgh6U0tEJF48kjDcHt140aiLrx2ZjRNvssjxHTRZQ4c2ndF7Sbq9LhfNmxdB36vf7UF0Mh5z0Qv44pJuj6JlSVWh16MDGwwW+cDGeOS9Dl2s++578PrB87uOYf4R9rAmjHK6WItLdMayjN4Cs4OvYomIoksV6dyZsxBdWaY3GV24RK+YiYi77roLok1D7UmO775ZxAOLiAzfb1PNadxedvgwvRnq0KFDED17JvGzhOfO0R8Mh9TQ8Rm7+557uegC63+3T9GypJZwNEq8bOvBBx+CKL+WajiaQPQdDz9M285/l9bLr4u6+957YPPphIrO8XLsbCduzKahV2LxOZnge742Myq6xsOOiAxvvfGY7p0BtjbJt4DdeecxiF5eowanxJaw30+8bGtt7QrG6XqcOkWvsZtO6YzlRWL8somDn9GEurwTJ6gFvngx8WOkkxkd+f330pvRNq5chmhGw5OIiEGfRgJra/QSvSynpqwp8b7DuzIilhaoIg2HVAnvOELV+9DqAS46w8EqD7EzrGVZTXtexBf/RcSYGow41Kce89IlqoQzHOVGRLW+CTQb10kAABuaSURBVNH7H6QfUt0Z4bQiVUV3RtzM0vsQO/hqyz4OdDupA8tx590Bbf/Xf+2vQfS5FxI/73z6xCmIfvELX4Doyso7IfqRjyZ+J/hrX/sjiD755BMQPX+efiV4Z4uGNz3s8uL6U4arHnzgXoguYLdVVtQ+J21v0Y8n88yC39cZERMcO/3V/+h/A1GeOA8GdMKTDXiF7X+nQ21Zg2sgY2z8I+IbZ85AdDKmMzabUUc/wXduzlJv5BwOqSacffEFiPYK6h2WlhNz9kPHaLaV53TCf+r9PwXRg6sHuegDK6sQXVqmBnyAr7sdLNC3HuGMJiKWF2l6u4MvCOYx9qULiTn7bEZV5QKOwEdj6k+vXOIBduKFzlVN32sH38NbYptQpJqyeWuhL+v3qf6PcEbf6yVGVoHreNxYlSWNnbY3qLFaS7UYZ16gdYwGL1aJVbSHo/eI1AAoo4HwbEKXMsPmPSIGizgww0F2hfPuckptQhcXbCOixgUvricVLslmTWKMwXP6AR55jX3xcEQNXUTMSjppJR55B8/YbH8jq6JHVbRp6IR3Ozi8qRLLBZ3ANoHPCa5F1Klz0sUGPDUFpWCOk7HkwyVeqeOZXgdXw5Iq/GI80O3gOWnwfKYW+VJPzRr61gUXnXogl7peVHQW1GI0uI4REZ2Cdj6d0c4z/NY1dnlFctKOHT2v/JcVndEOPj+KiDzj2xYPDC9mjRcrIjLsrPnJFw90eaaW4bQiInL8CS4eT3LzztGI6PD4J3Xf0qb8VCzVZCTuehxF5/w8IzXG4K/NT1L4SWJVJxYYiy5tjjd9lHita4xWqbFogyeN5zQ5tjZV6tdBOpicUON0qdvFO6tKXA5e2+SLxQ14gzWBt42I6FBV6Be0jscnvJPsO+obf5LeJPul60uekxk+nAo8ML7Q02nqtsXNa3yczSOY5CRxhD84NJ3RnOUf/V/+azoubER/9tf+dTyu+H/+t38Loit30razozggXNq7kmb+WJg/dh23X/5YfPu73+GizR9rM3+szfyxtjc8f+xlF9cuRsSXf+aej3zmi/yXkt7MvvjjPxyxFeaPzd3W/LEW88fazB9rM3+szfyxNvPH2swfazN/bC7zx+Yxf6zF/LEW88fazB9rM39sXtHmj7W3N3+sVbT5Yy3mj80p2vyxFvPH5mxr/liL+WNzdmz+WIv5Y21vqvyxfVQrSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSbea1EvEJUmSJEmSJEmSJEmSJEmSJOmW9eWf+Xj7w+mEfq06b+insF94/gUu8eChg7T5C2cheuLUKYj2F3oQ3dzcxOOKyZh+t/z06XsgOsDft68q+pX4iLjzzmMQvbx2iTbO6Fe3+336CfqIWF/fwDj9+PhkRt9rOi0hmheJn5HP8PfYR5MR7TyjKnrx4gUuup7Rkf/qv/OrEH3kkcdoz/hb7hFx+PARiJ598fnE9pIkSZIkSZIkSZJeO/QsVpIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSdJbjC8gkyRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkm4jvoBMkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJuo34AjJJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiTpNuILyCRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkqTbSJFl7Q/nfPSynKKduoZoVVE0Ig4cOgDRsizpuPKGDqzXg2jisCLyDn3rsqwgms07xdfMZrRtROQ5vSSOj3xntAPRfnfARQ+HY4gu5XRKlxaXIDrGKrawSHuOiHvueS9EL7x0HqJXNrZ451fdffrU3M8bPPLFhWWI1jVV0dFkCNFOp0MFR1xauwDRJqOaMi3pQlf1jIu+srEO0UOHDtHOG6r/H/ih93PRF86dg+isohaDb8znn32G9oyXMiJ6/T5El5bo7phiezKdTLjo7RlVpMFgEaJrl9cgyi1wRPSwmR2PphA9deIERM+99BJE16/MOez7d/07x25rZYUuR6/TheizT38PohFR9GjzE6dOQnRpaQH3THWsjzUwIirsevp8KbGxqstEj9otCohubW1CdHNrG6KnTt3DRecFXY5uj5rZcnsE0cECv841cU5qHDsNMryaDW17z72Jc3LpIt31jz/+FEQrPOwOnu2IqIMqYdGlSnj4yFGIbm1vQPQQ3vIR0e3R6Ojy5csQPXLkCET73cSN2e3S3VH06ZzwWLTXoT0nW4weXs3xmEYRgwF3DbRtREzG1HecPH4colvb1J5sDxMDwrqi8U+GA7PRkFqMy2s0Uq3rxNRgeYF6h/GUztj/4X//n0C0xJs6IuoZnZMGB0cZTjD//t//+4miccQ4ndLoqI/Ne7dL1bvYovYkUoO6KziyKo5Si3HPPfdx0UeOHoTo6dOnIXoIGyv+UhGBE4uocATODc65czTkSyxTRKyv0/UajmgU8eKLZyA6GyeGwds7NO9ewBH4zpAOrMQllBxnNJHqWTKc3GYZDW/KOnFOIqNGocjpwL7zre/inhPfusAmupxRO5lleMZwcabBvjgi8g6eUty8k9OXyrLEckGJrWiG6128GhapqXGDNYEXSYoufa+6oi81S/WneYHrM9hicGs0qxLDmy6Pk3Fts8noe42GNPjhmzpS9w6f0AFerAyrQUTwjKnGBqfgnae+dY7zqRwXBPBaRYFdXp1aIe/jOsYMh3x8KRte2UzhxYQGb48G26KIyPGHUriZrbGd5PVcbp8jgofJ3BA2QeG8SRQ9xm6rwx0T1qImVQkrvDELXNvhVZAq55qQaDFqvK8LrAmJXil1d/AJrxpqrLo4K68TNSHViuKRd3BAWO/jwdYr+AOs/zyAqRNF82IaT/R4+spPUlKnJNHW5TjaLPCU4NgnIrUGztWIG6vkt+amsMZGITHaxLKzSAyDeaWiwPa/qXFakSda0Rwbq4aXVbnFwG1r/s4RDTZlGdaEDtexVNFZorPGM4Y75zsrIip8ZsGPX/lSZzyKSM9esYbjt55NcG7Ld1ZEhSuf/NChwlu+iwv7EVFjNeOpcc4DXRyg870TEZ0OHTm3wRWesUmZeM7e6VFFWsQnGnznJYrmEV1EUdA5ybEm8BLKwiBR9AwXojvc/mOwnKbmYvhg98CJuyC6hQ8xM1xL+9L/6e/hccVSB++dk5Sj8kN/7kMQXTi/t8UwfyzMH7uO2zB/7HppY9eYP9Zm/lib+WNtb3D+2G7LOLgyf2zO5uaPtZg/1mb+WJv5Y23mj7WZP9Zm/lib+WNzS8ao+WNzmD/WZv7YnM3NH2sxf6zN/LF529KezR+bV7T5Y62izR+bw/yxNvPH5sXNH2vv3PyxFvPH5hRt/liL+WNzmD/WYv5Ym/ljbW+Z/LHE5ZFuTz/55W/e7EN4tV7Ri9VeH1cw+vw+9vwNDh/ex67Zu1+3Pb+l/c7NPgBJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJ0iuSeE2yJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSpLcSX0Amfd9nP/Lem30Ikl5jv/exD9zsQ5AkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZKkNx1fQCZJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiTdRoqbfQDSm8jvfuQ9/AdNRtHFhWWI1nUD0dFkCNGnn3oGjyuOHDtKRVcziA76PYiuXb7CRS8urUD00KFDEM1yOicfeP/7uegL585BdFaVVHRG1/L8S+dpz3gpI2J9fR2i3YIa3mlZQXTQ63PR0xlt3jQUHY92IFqWdD4j4kMf/jDufArRw4ePQHR7hw5s/coaH5gkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkaY/8Zh+AJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSpDdOEZHt/agoYIPZbArRuq5vOBoRl66sQfSB+l7cuqGiSzrsbrePe45ZVUG0nM4g2ul0sGg62xGRZ/S9ypIOLM+p6LqmbSOi3+9BtNejaIbXOmuo6OmULlZEPPL1r0O036erORnTxdra2eKi+WpejksQrbCK3nX8BERPnTrFB5bltPM8W6KN872NwG53HR9w0Q3f1jUdWIMb86WMiOjQKxQvX7oC0dXVFdpzQ+ekKqkWRcSBpWWIjrDFWF2li1ViCxwRCwWdtAqbsm6XqvcwdXfsbG9D9MoVuhyj4RCi9913H+350sXUge1AtKrochw8eIAO7IH7uWhuJwtsYxu6dSKjGpq40BGxeGQRov0uHdjWNr66FA8sIv7G3/zfQfQf/Po/hGiT4S1/kVrgiFjDSliXJUWP0p4nkwlEueOIiBKLHvS6EL10ib714cOHuegCT+n2kO76yXQM0fHmBhd95TIdedGnb/3C889CdDajm/r8WbpYEVHg2CnLKPrM009DdKG3wEX38FtzZ11gazPGNjbZYvA5WVigccLOiFrgAwcOcdErK9RZb2ytQ3RhQAf2gQ/9GBfNg5A7j5+GaI1DPh6fH1xd5QMLHGNvbFBDN56MIPrC2Re55Kexhi92qYafOXMGojwMjoit7U2ILi3h2AmHbdyf8lQrIqqSrnUPJ3ozbPzX1mheHBFra9SKPv7HT0G0wUEGDkAiIgIH/9hMJrZt8HrUvHFq76kDo++d1YnxTdahaz2ecp/ILQaucuCcJSLqCic1Nd4dOX2puqYKHBE5b55R0dwxdXDBKiLGQ2rreL2rg8sviR4zNQzmBbEOzsWqKc/jEj8t0MOuh+sRnpLoYOWPiAoXf2IfLUaeYR3DHUckGrsCR+A57j3ZWOUZDvmwwekkLiVtm/EMMzUr4b4jtTjJJUeGN2aFyyA8spqkVm+4ihfYO5TYEnYKOrCCb62IyYx2XhRUi7KMLkfRS8xPuQEfjmgayHd1nmoouZLWeNK4hnN/muNUKxID8Cg6vDkeNk7JI6KL6wmJQR1GUyUn7g4eRfPclvtTXvmJiBz7rQavNf8YTydVE/hqdrgRxihPupOdGm+eGFnxmlXqnPD3YvxcIM+xu9xft8XNDTfgPHGIiCaxborXGpepC3wUEsnlYj7huOc8NeSrM57p4bb4mJKraNUkZiWp64EzUL53UuObhtfxErMtOp98U/N8JyJK3DzHWUmiR0z+4BlODSoe/CcHlGg/m+fYYvDFypMtBrbxvHFR0GpwMh8jwzah4YwLvG3LMjWy2sfC6QwHyb2CLnR6koh/wiOQwHPCI7qImFQ05eEJUZYo+sZ76qREdgD21Kn5UAo24A02KFWV6DsqvOt/6/OfgejWjB4//cJHfwqiTereqfC+7p+hx3mP/51/AtGjR+9qfWb+mPlj85k/1mb+WJv5Y23mj7WZP9Zm/lib+WNt5o+1mT/WZv5Ym/ljbeaPtZk/NifKBYf5Y3N3bv7YXuaPtZk/Nm973Nj8sRbzx+bt3Pyxvcwfm1O0+WPtos0fazF/bA7zx9rMH5vH/LF5JZs/1mL+WIv5Y23mj7WZPzZve/PH9npt88f21eZKkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJurX4AjJJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiTpNuILyCRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkqTbiC8gkyRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkm4jvoBMkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJuo34AjJJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiTpNuILyCRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkqTbSDGeTvZ81G9q2KDT6UC0ms2otCbjo7nzzuMQzTLaPC/oZWqzir5UWe89CXuL7tDOi6LAKJ2xLEu8A66u6cgDo3XdQJQPLCLG4xFEB4MFiM6ihGivT0XXNW0bEffefx9E19bWILq8chCidx4/wUV3u3StL164AtHByiJEewtdiGZZ4mJNx1SHDx5egehkQrdtB79yRERF1axT0PcKvLPe8b63cclLS8u0+Tto85deugDRxUW6WJMh3RqRuq+n2BwtLNKdNa3GXPT2Nh3bwgLtvJ5OIToYDLjod7zjHRD97ne/C9HFxSWIltMhRE/ceZQP7MyLZ2nn2OVtrFN7UpZ0xiJiJQ5AdDqh74U3VkyGdMt3sEOMiLULF/kPwCJW0c2tTd78V//SvwPRnZ0tiE4mFUS5ekfEBIcoTUU7L7E/XVqgu6NqaM8R0cEWo8GL2etQEz2bJYY3Oe780AG6Me/7wHsheurkPVz0MlaklRW6d4Z47xw+fJC2HdK2EbGyQt/6yhXq6Hnn62sbXPTONm3eHrHvtrlB906GDV1R9PjAyhrrMAY7PRrA4HFFRDTYYzY4s2iwGX3skW9x0eOKTniR00mbzm68Py2rRM+SY6PQNPStm4yuVpEa8lU479isqP3vr9K3vrRJo7KIRFM42aDBT5GabYFE8x3RybGGl9TvdHFa3dSJmlBit9XvcsdEs60Mv1REVNgmdDIa/PPclhcLcM4dEVHkVDQvRVQdnNEk5+xBm+e4jlHzgZV0sfIiscCSaCfxffQdvCBVam2nrKn+Zxldzhp3nmEFjohOTjuveJCN932Ds9dIdmo4Juw0OHHOsRZxTx3R7WK3hY1VZNizYOWPVMdUYZSXH/m2zHmYGxG47sT3Dh92liq6wrpSVXg5GHaXye6wxCY6McXEKtrgCmFEVBMqmvslbmMHHbyzUlWFb9se9kz8rbvdfurAbjza4TY2VRX4nOR4PXj1Ms8TDWXD69jYZWJFiIbPCZYbqZV/Ht508Mj4YUdEdPs8AKKip1OqhPylIoKHZryY1sfv1elgG5vsWbArz3EYUONNzeOT5M4j44EuD29o2y6XmxpPJiaJGK1niTFGjeMEvpg8IZqlpsYdXBBr8MDyCk/ZPp64JfHGiWdAOAeMiAZvLl75zHHbOrV808ETXmH9x5ITbWxifB6Rcw3H9iTRHCXa78hKvF7YCGdcgROjl1QV5c3xnDScPJBcVsImJcPhapbzpeSSEx0uX+tEZ81Ll6kqymuj1Yy68g4PdFPjrhqrKF+O1IwnUQn5cQlXYS46NaNJHPcMT/h+bsyySkyIuNvim2s6Szw15oKTfwGxGT5x4xPecPZLat6RWIjDMUYyM4dXdP+NX/k3IPpnfv4vQvQfffnTEP35d/04H1g/MSvnpQZ62HFh4/KeT8wfC/PHrsP8sTbzx+Ywf6zF/LE288fazB9rM39szoGZP9Zi/lib+WPztjV/rBU1f+xVMn9s/ubmj7WYP9Zm/ticzc0fazF/bE7U/LH2vs0fe5VR88fm7Nn8sRbzx9rMH5uzZ/PH5gTNH5vD/LE5cfPHWswfm/cX5o+1NjZ/rMX8sTbzx+Z4TfPHbnw9XZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSdItxxeQSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSbcRX0AmSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIk3UZ8AZkkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZJ0G/EFZJIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSdJtxBeQSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSbcRX0AmSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIk3UaKalbv/axPbyWbzsYQLesGot1Oh49mdXkZonXdOtRdsoZ2XjUlRPvdBT6wEosumyltXPcgmDolMZvOINrrFBDNsgyiTdDFiogso4NrGtp8ZWkJoi+88DxE3/bQA3xgkWM169JhX7y4BtEKz3ZEcLxLlzpmeO+sHlmFaDme0K4jMvzWly5exK3pll9YobsyIsrREKKTWUXRKX2v/+5v/Q9c9Mb2FkS7Hbptp1O6bTsZ3VmTIV3KiBgMBhDdGu9Q0R26HA3d0xEReUNHPuhTHR2PRxDNUu+r/N7TT0I0z7Gademwc2yLstRJyQoquocn/Ife+x6IToaJG/Pd734nRCs88qLXheixO+6ggqfU5UXEgSMHILqxvgnRIqcDi1TPMhxTi1Fhi7E1plvvwoWXuOiyPeDZDTv6nW067LKivqHf7+NxxWxGmxcF3R2jCTVl3S5frOjg3VNVdDnWLm1A9Mqlb3DRiSEKjjHKkmp4gbd8En9rrt9FjwdOicYqMdDFM9bBAWVW05eajhODn6KgvqPGMXZVUiXM8EJHRI6nfMJtXUaHnWWJors5ndIedlud/Mard1Yn6knRpRpeVVSL8pyaowrboojo9+iUljkVXeAwosZBQkQ0DdXhKOly1HhOih6dk6ZK9KedBodtuDUPkvmmjogce4cxjrG5ZwlsMSLVJkyxieb638EDyyJxd5Sp+5p2zr1SagSeVfQXGdZwbgmLnM5Jg/PiiMixpy+wTeBeqdfBqW/qWjc51n/cc4b3XUR0uvitcWbBo7KspqJ5vhMRNbbwdU33ThcbK75YETGraMSY44SI747kt+5g+88nPPbRYkQkzknNc0we9OE5qTEaqR+C4MFRxt8rcbH4jKV6Byy65gOrE50aj506OAPlqUGOI7qI4C/dYIPDdwdHkxPnDBvwLvfFOAyI1GhzisfGQ5QKp8apBj4B79rIInEtIdgpEgdW4/fKE3Nb3nfynNDNxb0t39SJVjI1/mmw2yrLGx/oNnhTRwS3o3hcUeIAHZuiiIhO58ZHm/wQhxvw6YwWbCPVHfMYmVcquI5FRNPgiBEfWATOtrp8xiJqnLY0OHfg5p2nkEm8olsm5t04xkjduAM8aQXeO3zLZ6nRJofzjOIVPlNuuPXHRbyIaPj5Ka5jdHiWh4edVJY4Psebmu/LMnVOery2U9Eooql4RSvV5+H3qnHzMrEGmOrKeXjDj772M+RLnZMaW9EUutYVXqxIVbN8H81RlRptZtjj8ilNnDHcc8mri8nlRyyZm7ICJ92RWhAo8RnQ6spBiPItX6U7ehxj4NfinrqbeojDl5rvvCnmVCSHN4k1Fgx+7stfgOhXH/0qRP/po5+lXUf84ns+CdGFRTopR+46AtEX1vY+FDZ/LMwfu+7m5o/tZf5Ym/ljbeaPtZk/1mb+WJv5Y23mj7WZP9Zm/ti8vZs/tpf5Y23mj81h/liL+WNt5o+1mT82l/ljbeaPtZk/Nmdz88dazB+bt3Pzx/Yyf2zOvs0fa0fNH2sxf6zN/LE5RZs/Nido/liraPPHWswfazN/rO1NlT+2r2dskiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkm4tvoBMkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJuo34AjJJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiTpNvL/B55MrP3w9RJVAAAAAElFTkSuQmCC",
+ "headers": [
+ [
+ "content-type",
+ "image/png"
+ ]
+ ],
+ "ok": true,
+ "status": 200,
+ "status_text": ""
},
- "source": [
- "## View model's training progress in TensorBoard"
- ]
- },
- {
- "cell_type": "code",
- "metadata": {
- "colab": {
- "resources": {
- "http://localhost:6006/": {
- "data": "PCFkb2N0eXBlIGh0bWw+PCEtLQpAbGljZW5zZQpDb3B5cmlnaHQgMjAxNiBUaGUgVGVuc29yRmxvdyBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgoKTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CnlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CgogICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCgpVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCmRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCldJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgpTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCmxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotLT48bWV0YSBjaGFyc2V0PSJ1dGYtOCI+Cjx0aXRsZT5UZW5zb3JCb2FyZDwvdGl0bGU+CjxsaW5rIHJlbD0ic2hvcnRjdXQgaWNvbiIgaHJlZj0iZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFNUUFBQURFQ0FNQUFBRDNlSDVaQUFBQUJHZEJUVUVBQUxHUEMveGhCUUFBQUFGelVrZENBSzdPSE9rQUFBRC9VRXhVUmZGbEtmYUVMdkZtS2ZOeUsvNjdOdldBTGY2OE52NjlOdk54Sy8yME5meXlOUDIyTmZOMEsvSnJLdnFoTXYyek5mMjVOZjI0TmYyM05mZU9ML3l6TlB5dk5QSm9LdmlXTVBtZU1mTjFLL1dCTGZlUEwvRm5LZmVNTC9xbE12UjdMUG1jTWZlTEwvYUpMdlI1TFBGb0tmSnVLdlIzTFA2Nk52eXdOUGVOTC9WL0xmYUlMdjIxTmYyNk5mTnpLL052Sy9SNkxQbWFNZnl4TlBxZk12VitMZnVyTS9pU01QbWJNZkp2S3ZtZE1mdW1NL3FpTXZtWk1meXROUEpxS3Z5c05QTjJLL2lZTVBOd0svdXBNL0p0S3ZKc0t2aVZNUGFITHZhR0x2SnBLdlI4TFBhS0x2cWtNdnVxTS9hRkx2UjRMUHVvTS9pVE1QV0RMZmlSTVBtWU1YUzBuZ2tBQUFMb1NVUkJWSGphN2RybmN0cEFGSWJoRlVJU1NLSjNNS1lhMCt5NHhUVzk5MzcvMTVKa0pobFRqaHJTckhSbXZ1Zi9hczZMMFlMRkNnRUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU1CSjZuamVucXNwemduUHJzckdYOVpwaTJ0Q3JtbmM2K2RZTnRoVlk1V3BNbXhRTFdQZE1zT3VZVnd6TmozZWkydDNtUXdhVjQzQkpQRENTMk5iSjVhRWV1WC8rOXFjalFPdGZGSWtJa3J2WTJnNE1WY21PQnNGV2Jvd0tPL2tOeWo2MmdScEpjRGFQQmx4THIxQjB6ZEcwQy84THpiSmlKcnNodXZ5MWd6bEE5K3JEOG1Ja3V5SUpqRkUzL2Rxbll3b1NtN0lVRVBvRC93dXQ4aUlndVNJRGpsRnhlL3lmWEw1dnVTSTIxQlRaTExoWG9PSUxNTzhIeHdhL0w4YkkwTGZtVWRoR293YjJadlQwZTU3cEZORGdCMDZJbFZ5am1tSUJsMlQvbmw5Unc2U0Q5R2dTRy9RMHVRa2FXM1hobW92S1EzZUZRNE4yVW85T1ExZUZac05lcmY3dlArck80cmhtWTFMZzN2RlZvUDgrOEJYZzFzRm53Ym5DazROVGhXOEd1aUtCRGRrVlZ0VE5Gdk5lbFZzTnFUYnlXbklPTTJvZVRSb3lXdndtcEpIZy91Y1hCcmNKdVhUNER3cnB3WmkydnkwVkN4OFl0WGcvRDJiVTRPZml1UTNlRmZFMktENGJmQ3FpTE5COTkzZ1hzR2x3YTJDVDROekJhY0dJVlE2WXNpcFFkaDB4RWRPRFVLakl4clNwODhvblo4emJiRkxnMURvaUZPNUJYdkRHdjJNeTkvSmhVVDhKVVpUSTB5RGFOSExCeklidnFURE5ZaFVpVncva2RqUTFrTTJDSEZEUGpLVytLenlSVEYwZy9nYTl3OXkrZkFOUXB4dlg4Q1UrTnk3RlVXRGVGM1krZzNsUk9JZjRrMFVEWDllQ3l2TzUzMVB5WWhIZ2E5enZQWkpVNWI3M1kvZVhqOEh2OUQ0OG42SGFGNUxiY2pSdDhUWlR0ZGE1TTFEZlhuYmtYMUMwU0hDRkt6UUI1RmU4b3A0R05HTkhhdnZaRVNiVndUNXI2VzF4eXVDUEJZM1k5WWdEcXprbkgvZTNZZk56enVMMzBsMEllYnJaNWtLdHVESVh0MW44NjhFVDZrZjMvNDl0THZyQ2NaeUY4UHUyMTVkQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFjUEliTnJCaE9hQlh1Y29BQUFBQVNVVk9SSzVDWUlJPSI+CjxsaW5rIHJlbD0iYXBwbGUtdG91Y2gtaWNvbiIgaHJlZj0iZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFNUUFBQURFQ0FNQUFBRDNlSDVaQUFBQUJHZEJUVUVBQUxHUEMveGhCUUFBQUFGelVrZENBSzdPSE9rQUFBRC9VRXhVUmZGbEtmYUVMdkZtS2ZOeUsvNjdOdldBTGY2OE52NjlOdk54Sy8yME5meXlOUDIyTmZOMEsvSnJLdnFoTXYyek5mMjVOZjI0TmYyM05mZU9ML3l6TlB5dk5QSm9LdmlXTVBtZU1mTjFLL1dCTGZlUEwvRm5LZmVNTC9xbE12UjdMUG1jTWZlTEwvYUpMdlI1TFBGb0tmSnVLdlIzTFA2Nk52eXdOUGVOTC9WL0xmYUlMdjIxTmYyNk5mTnpLL052Sy9SNkxQbWFNZnl4TlBxZk12VitMZnVyTS9pU01QbWJNZkp2S3ZtZE1mdW1NL3FpTXZtWk1meXROUEpxS3Z5c05QTjJLL2lZTVBOd0svdXBNL0p0S3ZKc0t2aVZNUGFITHZhR0x2SnBLdlI4TFBhS0x2cWtNdnVxTS9hRkx2UjRMUHVvTS9pVE1QV0RMZmlSTVBtWU1YUzBuZ2tBQUFMb1NVUkJWSGphN2RybmN0cEFGSWJoRlVJU1NLSjNNS1lhMCt5NHhUVzk5MzcvMTVKa0pobFRqaHJTckhSbXZ1Zi9hczZMMFlMRkNnRUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU1CSjZuamVucXNwemduUHJzckdYOVpwaTJ0Q3JtbmM2K2RZTnRoVlk1V3BNbXhRTFdQZE1zT3VZVnd6TmozZWkydDNtUXdhVjQzQkpQRENTMk5iSjVhRWV1WC8rOXFjalFPdGZGSWtJa3J2WTJnNE1WY21PQnNGV2Jvd0tPL2tOeWo2MmdScEpjRGFQQmx4THIxQjB6ZEcwQy84THpiSmlKcnNodXZ5MWd6bEE5K3JEOG1Ja3V5SUpqRkUzL2Rxbll3b1NtN0lVRVBvRC93dXQ4aUlndVNJRGpsRnhlL3lmWEw1dnVTSTIxQlRaTExoWG9PSUxNTzhIeHdhL0w4YkkwTGZtVWRoR293YjJadlQwZTU3cEZORGdCMDZJbFZ5am1tSUJsMlQvbmw5Unc2U0Q5R2dTRy9RMHVRa2FXM1hobW92S1EzZUZRNE4yVW85T1ExZUZac05lcmY3dlArck80cmhtWTFMZzN2RlZvUDgrOEJYZzFzRm53Ym5DazROVGhXOEd1aUtCRGRrVlZ0VE5Gdk5lbFZzTnFUYnlXbklPTTJvZVRSb3lXdndtcEpIZy91Y1hCcmNKdVhUNER3cnB3WmkydnkwVkN4OFl0WGcvRDJiVTRPZml1UTNlRmZFMktENGJmQ3FpTE5COTkzZ1hzR2x3YTJDVDROekJhY0dJVlE2WXNpcFFkaDB4RWRPRFVLakl4clNwODhvblo4emJiRkxnMURvaUZPNUJYdkRHdjJNeTkvSmhVVDhKVVpUSTB5RGFOSExCeklidnFURE5ZaFVpVncva2RqUTFrTTJDSEZEUGpLVytLenlSVEYwZy9nYTl3OXkrZkFOUXB4dlg4Q1UrTnk3RlVXRGVGM1krZzNsUk9JZjRrMFVEWDllQ3l2TzUzMVB5WWhIZ2E5enZQWkpVNWI3M1kvZVhqOEh2OUQ0OG42SGFGNUxiY2pSdDhUWlR0ZGE1TTFEZlhuYmtYMUMwU0hDRkt6UUI1RmU4b3A0R05HTkhhdnZaRVNiVndUNXI2VzF4eXVDUEJZM1k5WWdEcXprbkgvZTNZZk56enVMMzBsMEllYnJaNWtLdHVESVh0MW44NjhFVDZrZjMvNDl0THZyQ2NaeUY4UHUyMTVkQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFjUEliTnJCaE9hQlh1Y29BQUFBQVNVVk9SSzVDWUlJPSI+CjxzY3JpcHQ+Ly8gQ29weXJpZ2h0IDIwMTQgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLy8KLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLy8gICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAovLwovLyBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLy8KLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQovLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAovLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLy8gICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCgohZnVuY3Rpb24oYSxiKXt2YXIgYz17fSxkPXt9LGU9e30sZj1udWxsOyFmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGMoYSl7aWYoIm51bWJlciI9PXR5cGVvZiBhKXJldHVybiBhO3ZhciBiPXt9O2Zvcih2YXIgYyBpbiBhKWJbY109YVtjXTtyZXR1cm4gYn1mdW5jdGlvbiBkKCl7dGhpcy5fZGVsYXk9MCx0aGlzLl9lbmREZWxheT0wLHRoaXMuX2ZpbGw9Im5vbmUiLHRoaXMuX2l0ZXJhdGlvblN0YXJ0PTAsdGhpcy5faXRlcmF0aW9ucz0xLHRoaXMuX2R1cmF0aW9uPTAsdGhpcy5fcGxheWJhY2tSYXRlPTEsdGhpcy5fZGlyZWN0aW9uPSJub3JtYWwiLHRoaXMuX2Vhc2luZz0ibGluZWFyIix0aGlzLl9lYXNpbmdGdW5jdGlvbj13fWZ1bmN0aW9uIGUoKXtyZXR1cm4gYS5pc0RlcHJlY2F0ZWQoIkludmFsaWQgdGltaW5nIGlucHV0cyIsIjIwMTYtMDMtMDIiLCJUeXBlRXJyb3IgZXhjZXB0aW9ucyB3aWxsIGJlIHRocm93biBpbnN0ZWFkLiIsITApfWZ1bmN0aW9uIGYoYixjLGUpe3ZhciBmPW5ldyBkO3JldHVybiBjJiYoZi5maWxsPSJib3RoIixmLmR1cmF0aW9uPSJhdXRvIiksIm51bWJlciIhPXR5cGVvZiBifHxpc05hTihiKT92b2lkIDAhPT1iJiZPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhiKS5mb3JFYWNoKGZ1bmN0aW9uKGMpe2lmKCJhdXRvIiE9YltjXSl7aWYoKCJudW1iZXIiPT10eXBlb2YgZltjXXx8ImR1cmF0aW9uIj09YykmJigibnVtYmVyIiE9dHlwZW9mIGJbY118fGlzTmFOKGJbY10pKSlyZXR1cm47aWYoImZpbGwiPT1jJiYtMT09dS5pbmRleE9mKGJbY10pKXJldHVybjtpZigiZGlyZWN0aW9uIj09YyYmLTE9PXYuaW5kZXhPZihiW2NdKSlyZXR1cm47aWYoInBsYXliYWNrUmF0ZSI9PWMmJjEhPT1iW2NdJiZhLmlzRGVwcmVjYXRlZCgiQW5pbWF0aW9uRWZmZWN0VGltaW5nLnBsYXliYWNrUmF0ZSIsIjIwMTQtMTEtMjgiLCJVc2UgQW5pbWF0aW9uLnBsYXliYWNrUmF0ZSBpbnN0ZWFkLiIpKXJldHVybjtmW2NdPWJbY119fSk6Zi5kdXJhdGlvbj1iLGZ9ZnVuY3Rpb24gZyhhKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGEmJihhPWlzTmFOKGEpP3tkdXJhdGlvbjowfTp7ZHVyYXRpb246YX0pLGF9ZnVuY3Rpb24gaChiLGMpe3JldHVybiBiPWEubnVtZXJpY1RpbWluZ1RvT2JqZWN0KGIpLGYoYixjKX1mdW5jdGlvbiBpKGEsYixjLGQpe3JldHVybiAwPmF8fGE+MXx8MD5jfHxjPjE/dzpmdW5jdGlvbihlKXtmdW5jdGlvbiBmKGEsYixjKXtyZXR1cm4gMyphKigxLWMpKigxLWMpKmMrMypiKigxLWMpKmMqYytjKmMqY31pZigwPT1lfHwxPT1lKXJldHVybiBlO2Zvcih2YXIgZz0wLGg9MTs7KXt2YXIgaT0oZytoKS8yLGo9ZihhLGMsaSk7aWYoTWF0aC5hYnMoZS1qKTwxZS00KXJldHVybiBmKGIsZCxpKTtlPmo/Zz1pOmg9aX19fWZ1bmN0aW9uIGooYSxiKXtyZXR1cm4gZnVuY3Rpb24oYyl7aWYoYz49MSlyZXR1cm4gMTt2YXIgZD0xL2E7cmV0dXJuIGMrPWIqZCxjLWMlZH19ZnVuY3Rpb24gayhhKXtCfHwoQj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKS5zdHlsZSksQi5hbmltYXRpb25UaW1pbmdGdW5jdGlvbj0iIixCLmFuaW1hdGlvblRpbWluZ0Z1bmN0aW9uPWE7dmFyIGI9Qi5hbmltYXRpb25UaW1pbmdGdW5jdGlvbjtpZigiIj09YiYmZSgpKXRocm93IG5ldyBUeXBlRXJyb3IoYSsiIGlzIG5vdCBhIHZhbGlkIHZhbHVlIGZvciBlYXNpbmciKTt2YXIgYz1ELmV4ZWMoYik7aWYoYylyZXR1cm4gaS5hcHBseSh0aGlzLGMuc2xpY2UoMSkubWFwKE51bWJlcikpO3ZhciBkPUUuZXhlYyhiKTtpZihkKXJldHVybiBqKE51bWJlcihkWzFdKSx7c3RhcnQ6eCxtaWRkbGU6eSxlbmQ6en1bZFsyXV0pO3ZhciBmPUFbYl07cmV0dXJuIGY/Zjp3fWZ1bmN0aW9uIGwoYSl7cmV0dXJuIE1hdGguYWJzKG0oYSkvYS5wbGF5YmFja1JhdGUpfWZ1bmN0aW9uIG0oYSl7cmV0dXJuIGEuZHVyYXRpb24qYS5pdGVyYXRpb25zfWZ1bmN0aW9uIG4oYSxiLGMpe3JldHVybiBudWxsPT1iP0Y6YjxjLmRlbGF5P0c6Yj49Yy5kZWxheSthP0g6SX1mdW5jdGlvbiBvKGEsYixjLGQsZSl7c3dpdGNoKGQpe2Nhc2UgRzpyZXR1cm4iYmFja3dhcmRzIj09Ynx8ImJvdGgiPT1iPzA6bnVsbDtjYXNlIEk6cmV0dXJuIGMtZTtjYXNlIEg6cmV0dXJuImZvcndhcmRzIj09Ynx8ImJvdGgiPT1iP2E6bnVsbDtjYXNlIEY6cmV0dXJuIG51bGx9fWZ1bmN0aW9uIHAoYSxiLGMsZCl7cmV0dXJuKGQucGxheWJhY2tSYXRlPDA/Yi1hOmIpKmQucGxheWJhY2tSYXRlK2N9ZnVuY3Rpb24gcShhLGIsYyxkLGUpe3JldHVybiBjPT09MS8wfHxjPT09LSgxLzApfHxjLWQ9PWImJmUuaXRlcmF0aW9ucyYmKGUuaXRlcmF0aW9ucytlLml0ZXJhdGlvblN0YXJ0KSUxPT0wP2E6YyVhfWZ1bmN0aW9uIHIoYSxiLGMsZCl7cmV0dXJuIDA9PT1jPzA6Yj09YT9kLml0ZXJhdGlvblN0YXJ0K2QuaXRlcmF0aW9ucy0xOk1hdGguZmxvb3IoYy9hKX1mdW5jdGlvbiBzKGEsYixjLGQpe3ZhciBlPWElMj49MSxmPSJub3JtYWwiPT1kLmRpcmVjdGlvbnx8ZC5kaXJlY3Rpb249PShlPyJhbHRlcm5hdGUtcmV2ZXJzZSI6ImFsdGVybmF0ZSIpLGc9Zj9jOmItYyxoPWcvYjtyZXR1cm4gYipkLl9lYXNpbmdGdW5jdGlvbihoKX1mdW5jdGlvbiB0KGEsYixjKXt2YXIgZD1uKGEsYixjKSxlPW8oYSxjLmZpbGwsYixkLGMuZGVsYXkpO2lmKG51bGw9PT1lKXJldHVybiBudWxsO2lmKDA9PT1hKXJldHVybiBkPT09Rz8wOjE7dmFyIGY9Yy5pdGVyYXRpb25TdGFydCpjLmR1cmF0aW9uLGc9cChhLGUsZixjKSxoPXEoYy5kdXJhdGlvbixtKGMpLGcsZixjKSxpPXIoYy5kdXJhdGlvbixoLGcsYyk7cmV0dXJuIHMoaSxjLmR1cmF0aW9uLGgsYykvYy5kdXJhdGlvbn12YXIgdT0iYmFja3dhcmRzfGZvcndhcmRzfGJvdGh8bm9uZSIuc3BsaXQoInwiKSx2PSJyZXZlcnNlfGFsdGVybmF0ZXxhbHRlcm5hdGUtcmV2ZXJzZSIuc3BsaXQoInwiKSx3PWZ1bmN0aW9uKGEpe3JldHVybiBhfTtkLnByb3RvdHlwZT17X3NldE1lbWJlcjpmdW5jdGlvbihiLGMpe3RoaXNbIl8iK2JdPWMsdGhpcy5fZWZmZWN0JiYodGhpcy5fZWZmZWN0Ll90aW1pbmdJbnB1dFtiXT1jLHRoaXMuX2VmZmVjdC5fdGltaW5nPWEubm9ybWFsaXplVGltaW5nSW5wdXQodGhpcy5fZWZmZWN0Ll90aW1pbmdJbnB1dCksdGhpcy5fZWZmZWN0LmFjdGl2ZUR1cmF0aW9uPWEuY2FsY3VsYXRlQWN0aXZlRHVyYXRpb24odGhpcy5fZWZmZWN0Ll90aW1pbmcpLHRoaXMuX2VmZmVjdC5fYW5pbWF0aW9uJiZ0aGlzLl9lZmZlY3QuX2FuaW1hdGlvbi5fcmVidWlsZFVuZGVybHlpbmdBbmltYXRpb24oKSl9LGdldCBwbGF5YmFja1JhdGUoKXtyZXR1cm4gdGhpcy5fcGxheWJhY2tSYXRlfSxzZXQgZGVsYXkoYSl7dGhpcy5fc2V0TWVtYmVyKCJkZWxheSIsYSl9LGdldCBkZWxheSgpe3JldHVybiB0aGlzLl9kZWxheX0sc2V0IGVuZERlbGF5KGEpe3RoaXMuX3NldE1lbWJlcigiZW5kRGVsYXkiLGEpfSxnZXQgZW5kRGVsYXkoKXtyZXR1cm4gdGhpcy5fZW5kRGVsYXl9LHNldCBmaWxsKGEpe3RoaXMuX3NldE1lbWJlcigiZmlsbCIsYSl9LGdldCBmaWxsKCl7cmV0dXJuIHRoaXMuX2ZpbGx9LHNldCBpdGVyYXRpb25TdGFydChhKXtpZigoaXNOYU4oYSl8fDA+YSkmJmUoKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJpdGVyYXRpb25TdGFydCBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIG51bWJlciwgcmVjZWl2ZWQ6ICIrdGltaW5nLml0ZXJhdGlvblN0YXJ0KTt0aGlzLl9zZXRNZW1iZXIoIml0ZXJhdGlvblN0YXJ0IixhKX0sZ2V0IGl0ZXJhdGlvblN0YXJ0KCl7cmV0dXJuIHRoaXMuX2l0ZXJhdGlvblN0YXJ0fSxzZXQgZHVyYXRpb24oYSl7aWYoImF1dG8iIT1hJiYoaXNOYU4oYSl8fDA+YSkmJmUoKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJkdXJhdGlvbiBtdXN0IGJlIG5vbi1uZWdhdGl2ZSBvciBhdXRvLCByZWNlaXZlZDogIithKTt0aGlzLl9zZXRNZW1iZXIoImR1cmF0aW9uIixhKX0sZ2V0IGR1cmF0aW9uKCl7cmV0dXJuIHRoaXMuX2R1cmF0aW9ufSxzZXQgZGlyZWN0aW9uKGEpe3RoaXMuX3NldE1lbWJlcigiZGlyZWN0aW9uIixhKX0sZ2V0IGRpcmVjdGlvbigpe3JldHVybiB0aGlzLl9kaXJlY3Rpb259LHNldCBlYXNpbmcoYSl7dGhpcy5fZWFzaW5nRnVuY3Rpb249ayhhKSx0aGlzLl9zZXRNZW1iZXIoImVhc2luZyIsYSl9LGdldCBlYXNpbmcoKXtyZXR1cm4gdGhpcy5fZWFzaW5nfSxzZXQgaXRlcmF0aW9ucyhhKXtpZigoaXNOYU4oYSl8fDA+YSkmJmUoKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJpdGVyYXRpb25zIG11c3QgYmUgbm9uLW5lZ2F0aXZlLCByZWNlaXZlZDogIithKTt0aGlzLl9zZXRNZW1iZXIoIml0ZXJhdGlvbnMiLGEpfSxnZXQgaXRlcmF0aW9ucygpe3JldHVybiB0aGlzLl9pdGVyYXRpb25zfX07dmFyIHg9MSx5PS41LHo9MCxBPXtlYXNlOmkoLjI1LC4xLC4yNSwxKSwiZWFzZS1pbiI6aSguNDIsMCwxLDEpLCJlYXNlLW91dCI6aSgwLDAsLjU4LDEpLCJlYXNlLWluLW91dCI6aSguNDIsMCwuNTgsMSksInN0ZXAtc3RhcnQiOmooMSx4KSwic3RlcC1taWRkbGUiOmooMSx5KSwic3RlcC1lbmQiOmooMSx6KX0sQj1udWxsLEM9IlxccyooLT9cXGQrXFwuP1xcZCp8LT9cXC5cXGQrKVxccyoiLEQ9bmV3IFJlZ0V4cCgiY3ViaWMtYmV6aWVyXFwoIitDKyIsIitDKyIsIitDKyIsIitDKyJcXCkiKSxFPS9zdGVwc1woXHMqKFxkKylccyosXHMqKHN0YXJ0fG1pZGRsZXxlbmQpXHMqXCkvLEY9MCxHPTEsSD0yLEk9MzthLmNsb25lVGltaW5nSW5wdXQ9YyxhLm1ha2VUaW1pbmc9ZixhLm51bWVyaWNUaW1pbmdUb09iamVjdD1nLGEubm9ybWFsaXplVGltaW5nSW5wdXQ9aCxhLmNhbGN1bGF0ZUFjdGl2ZUR1cmF0aW9uPWwsYS5jYWxjdWxhdGVUaW1lRnJhY3Rpb249dCxhLmNhbGN1bGF0ZVBoYXNlPW4sYS50b1RpbWluZ0Z1bmN0aW9uPWt9KGMsZiksZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjKGEsYil7cmV0dXJuIGEgaW4gaj9qW2FdW2JdfHxiOmJ9ZnVuY3Rpb24gZChhLGIsZCl7dmFyIGU9Z1thXTtpZihlKXtoLnN0eWxlW2FdPWI7Zm9yKHZhciBmIGluIGUpe3ZhciBpPWVbZl0saj1oLnN0eWxlW2ldO2RbaV09YyhpLGopfX1lbHNlIGRbYV09YyhhLGIpfWZ1bmN0aW9uIGUoYSl7dmFyIGI9W107Zm9yKHZhciBjIGluIGEpaWYoIShjIGluWyJlYXNpbmciLCJvZmZzZXQiLCJjb21wb3NpdGUiXSkpe3ZhciBkPWFbY107QXJyYXkuaXNBcnJheShkKXx8KGQ9W2RdKTtmb3IodmFyIGUsZj1kLmxlbmd0aCxnPTA7Zj5nO2crKyllPXt9LCJvZmZzZXQiaW4gYT9lLm9mZnNldD1hLm9mZnNldDoxPT1mP2Uub2Zmc2V0PTE6ZS5vZmZzZXQ9Zy8oZi0xKSwiZWFzaW5nImluIGEmJihlLmVhc2luZz1hLmVhc2luZyksImNvbXBvc2l0ZSJpbiBhJiYoZS5jb21wb3NpdGU9YS5jb21wb3NpdGUpLGVbY109ZFtnXSxiLnB1c2goZSl9cmV0dXJuIGIuc29ydChmdW5jdGlvbihhLGIpe3JldHVybiBhLm9mZnNldC1iLm9mZnNldH0pLGJ9ZnVuY3Rpb24gZihhKXtmdW5jdGlvbiBiKCl7dmFyIGE9Yy5sZW5ndGg7bnVsbD09Y1thLTFdLm9mZnNldCYmKGNbYS0xXS5vZmZzZXQ9MSksYT4xJiZudWxsPT1jWzBdLm9mZnNldCYmKGNbMF0ub2Zmc2V0PTApO2Zvcih2YXIgYj0wLGQ9Y1swXS5vZmZzZXQsZT0xO2E+ZTtlKyspe3ZhciBmPWNbZV0ub2Zmc2V0O2lmKG51bGwhPWYpe2Zvcih2YXIgZz0xO2UtYj5nO2crKyljW2IrZ10ub2Zmc2V0PWQrKGYtZCkqZy8oZS1iKTtiPWUsZD1mfX19aWYobnVsbD09YSlyZXR1cm5bXTt3aW5kb3cuU3ltYm9sJiZTeW1ib2wuaXRlcmF0b3ImJkFycmF5LnByb3RvdHlwZS5mcm9tJiZhW1N5bWJvbC5pdGVyYXRvcl0mJihhPUFycmF5LmZyb20oYSkpLEFycmF5LmlzQXJyYXkoYSl8fChhPWUoYSkpO2Zvcih2YXIgYz1hLm1hcChmdW5jdGlvbihhKXt2YXIgYj17fTtmb3IodmFyIGMgaW4gYSl7dmFyIGU9YVtjXTtpZigib2Zmc2V0Ij09Yyl7aWYobnVsbCE9ZSYmKGU9TnVtYmVyKGUpLCFpc0Zpbml0ZShlKSkpdGhyb3cgbmV3IFR5cGVFcnJvcigia2V5ZnJhbWUgb2Zmc2V0cyBtdXN0IGJlIG51bWJlcnMuIil9ZWxzZXtpZigiY29tcG9zaXRlIj09Yyl0aHJvd3t0eXBlOkRPTUV4Y2VwdGlvbi5OT1RfU1VQUE9SVEVEX0VSUixuYW1lOiJOb3RTdXBwb3J0ZWRFcnJvciIsbWVzc2FnZToiYWRkIGNvbXBvc2l0aW5nIGlzIG5vdCBzdXBwb3J0ZWQifTtlPSIiK2V9ZChjLGUsYil9cmV0dXJuIHZvaWQgMD09Yi5vZmZzZXQmJihiLm9mZnNldD1udWxsKSxifSksZj0hMCxnPS0oMS8wKSxoPTA7aDxjLmxlbmd0aDtoKyspe3ZhciBpPWNbaF0ub2Zmc2V0O2lmKG51bGwhPWkpe2lmKGc+aSl0aHJvd3tjb2RlOkRPTUV4Y2VwdGlvbi5JTlZBTElEX01PRElGSUNBVElPTl9FUlIsbmFtZToiSW52YWxpZE1vZGlmaWNhdGlvbkVycm9yIixtZXNzYWdlOiJLZXlmcmFtZXMgYXJlIG5vdCBsb29zZWx5IHNvcnRlZCBieSBvZmZzZXQuIFNvcnQgb3Igc3BlY2lmeSBvZmZzZXRzLiJ9O2c9aX1lbHNlIGY9ITF9cmV0dXJuIGM9Yy5maWx0ZXIoZnVuY3Rpb24oYSl7cmV0dXJuIGEub2Zmc2V0Pj0wJiZhLm9mZnNldDw9MX0pLGZ8fGIoKSxjfXZhciBnPXtiYWNrZ3JvdW5kOlsiYmFja2dyb3VuZEltYWdlIiwiYmFja2dyb3VuZFBvc2l0aW9uIiwiYmFja2dyb3VuZFNpemUiLCJiYWNrZ3JvdW5kUmVwZWF0IiwiYmFja2dyb3VuZEF0dGFjaG1lbnQiLCJiYWNrZ3JvdW5kT3JpZ2luIiwiYmFja2dyb3VuZENsaXAiLCJiYWNrZ3JvdW5kQ29sb3IiXSxib3JkZXI6WyJib3JkZXJUb3BDb2xvciIsImJvcmRlclRvcFN0eWxlIiwiYm9yZGVyVG9wV2lkdGgiLCJib3JkZXJSaWdodENvbG9yIiwiYm9yZGVyUmlnaHRTdHlsZSIsImJvcmRlclJpZ2h0V2lkdGgiLCJib3JkZXJCb3R0b21Db2xvciIsImJvcmRlckJvdHRvbVN0eWxlIiwiYm9yZGVyQm90dG9tV2lkdGgiLCJib3JkZXJMZWZ0Q29sb3IiLCJib3JkZXJMZWZ0U3R5bGUiLCJib3JkZXJMZWZ0V2lkdGgiXSxib3JkZXJCb3R0b206WyJib3JkZXJCb3R0b21XaWR0aCIsImJvcmRlckJvdHRvbVN0eWxlIiwiYm9yZGVyQm90dG9tQ29sb3IiXSxib3JkZXJDb2xvcjpbImJvcmRlclRvcENvbG9yIiwiYm9yZGVyUmlnaHRDb2xvciIsImJvcmRlckJvdHRvbUNvbG9yIiwiYm9yZGVyTGVmdENvbG9yIl0sYm9yZGVyTGVmdDpbImJvcmRlckxlZnRXaWR0aCIsImJvcmRlckxlZnRTdHlsZSIsImJvcmRlckxlZnRDb2xvciJdLGJvcmRlclJhZGl1czpbImJvcmRlclRvcExlZnRSYWRpdXMiLCJib3JkZXJUb3BSaWdodFJhZGl1cyIsImJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzIiwiYm9yZGVyQm90dG9tTGVmdFJhZGl1cyJdLGJvcmRlclJpZ2h0OlsiYm9yZGVyUmlnaHRXaWR0aCIsImJvcmRlclJpZ2h0U3R5bGUiLCJib3JkZXJSaWdodENvbG9yIl0sYm9yZGVyVG9wOlsiYm9yZGVyVG9wV2lkdGgiLCJib3JkZXJUb3BTdHlsZSIsImJvcmRlclRvcENvbG9yIl0sYm9yZGVyV2lkdGg6WyJib3JkZXJUb3BXaWR0aCIsImJvcmRlclJpZ2h0V2lkdGgiLCJib3JkZXJCb3R0b21XaWR0aCIsImJvcmRlckxlZnRXaWR0aCJdLGZsZXg6WyJmbGV4R3JvdyIsImZsZXhTaHJpbmsiLCJmbGV4QmFzaXMiXSxmb250OlsiZm9udEZhbWlseSIsImZvbnRTaXplIiwiZm9udFN0eWxlIiwiZm9udFZhcmlhbnQiLCJmb250V2VpZ2h0IiwibGluZUhlaWdodCJdLG1hcmdpbjpbIm1hcmdpblRvcCIsIm1hcmdpblJpZ2h0IiwibWFyZ2luQm90dG9tIiwibWFyZ2luTGVmdCJdLG91dGxpbmU6WyJvdXRsaW5lQ29sb3IiLCJvdXRsaW5lU3R5bGUiLCJvdXRsaW5lV2lkdGgiXSxwYWRkaW5nOlsicGFkZGluZ1RvcCIsInBhZGRpbmdSaWdodCIsInBhZGRpbmdCb3R0b20iLCJwYWRkaW5nTGVmdCJdfSxoPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIsImRpdiIpLGk9e3RoaW46IjFweCIsbWVkaXVtOiIzcHgiLHRoaWNrOiI1cHgifSxqPXtib3JkZXJCb3R0b21XaWR0aDppLGJvcmRlckxlZnRXaWR0aDppLGJvcmRlclJpZ2h0V2lkdGg6aSxib3JkZXJUb3BXaWR0aDppLGZvbnRTaXplOnsieHgtc21hbGwiOiI2MCUiLCJ4LXNtYWxsIjoiNzUlIixzbWFsbDoiODklIixtZWRpdW06IjEwMCUiLGxhcmdlOiIxMjAlIiwieC1sYXJnZSI6IjE1MCUiLCJ4eC1sYXJnZSI6IjIwMCUifSxmb250V2VpZ2h0Ontub3JtYWw6IjQwMCIsYm9sZDoiNzAwIn0sb3V0bGluZVdpZHRoOmksdGV4dFNoYWRvdzp7bm9uZToiMHB4IDBweCAwcHggdHJhbnNwYXJlbnQifSxib3hTaGFkb3c6e25vbmU6IjBweCAwcHggMHB4IDBweCB0cmFuc3BhcmVudCJ9fTthLmNvbnZlcnRUb0FycmF5Rm9ybT1lLGEubm9ybWFsaXplS2V5ZnJhbWVzPWZ9KGMsZiksZnVuY3Rpb24oYSl7dmFyIGI9e307YS5pc0RlcHJlY2F0ZWQ9ZnVuY3Rpb24oYSxjLGQsZSl7dmFyIGY9ZT8iYXJlIjoiaXMiLGc9bmV3IERhdGUsaD1uZXcgRGF0ZShjKTtyZXR1cm4gaC5zZXRNb250aChoLmdldE1vbnRoKCkrMyksaD5nPyhhIGluIGJ8fGNvbnNvbGUud2FybigiV2ViIEFuaW1hdGlvbnM6ICIrYSsiICIrZisiIGRlcHJlY2F0ZWQgYW5kIHdpbGwgc3RvcCB3b3JraW5nIG9uICIraC50b0RhdGVTdHJpbmcoKSsiLiAiK2QpLGJbYV09ITAsITEpOiEwfSxhLmRlcHJlY2F0ZWQ9ZnVuY3Rpb24oYixjLGQsZSl7dmFyIGY9ZT8iYXJlIjoiaXMiO2lmKGEuaXNEZXByZWNhdGVkKGIsYyxkLGUpKXRocm93IG5ldyBFcnJvcihiKyIgIitmKyIgbm8gbG9uZ2VyIHN1cHBvcnRlZC4gIitkKX19KGMpLGZ1bmN0aW9uKCl7aWYoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmFuaW1hdGUpe3ZhciBhPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5hbmltYXRlKFtdLDApLGI9ITA7aWYoYSYmKGI9ITEsInBsYXl8Y3VycmVudFRpbWV8cGF1c2V8cmV2ZXJzZXxwbGF5YmFja1JhdGV8Y2FuY2VsfGZpbmlzaHxzdGFydFRpbWV8cGxheVN0YXRlIi5zcGxpdCgifCIpLmZvckVhY2goZnVuY3Rpb24oYyl7dm9pZCAwPT09YVtjXSYmKGI9ITApfSkpLCFiKXJldHVybn0hZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIGQoYSl7Zm9yKHZhciBiPXt9LGM9MDtjPGEubGVuZ3RoO2MrKylmb3IodmFyIGQgaW4gYVtjXSlpZigib2Zmc2V0IiE9ZCYmImVhc2luZyIhPWQmJiJjb21wb3NpdGUiIT1kKXt2YXIgZT17b2Zmc2V0OmFbY10ub2Zmc2V0LGVhc2luZzphW2NdLmVhc2luZyx2YWx1ZTphW2NdW2RdfTtiW2RdPWJbZF18fFtdLGJbZF0ucHVzaChlKX1mb3IodmFyIGYgaW4gYil7dmFyIGc9YltmXTtpZigwIT1nWzBdLm9mZnNldHx8MSE9Z1tnLmxlbmd0aC0xXS5vZmZzZXQpdGhyb3d7dHlwZTpET01FeGNlcHRpb24uTk9UX1NVUFBPUlRFRF9FUlIsbmFtZToiTm90U3VwcG9ydGVkRXJyb3IiLG1lc3NhZ2U6IlBhcnRpYWwga2V5ZnJhbWVzIGFyZSBub3Qgc3VwcG9ydGVkIn19cmV0dXJuIGJ9ZnVuY3Rpb24gZShjKXt2YXIgZD1bXTtmb3IodmFyIGUgaW4gYylmb3IodmFyIGY9Y1tlXSxnPTA7ZzxmLmxlbmd0aC0xO2crKyl7dmFyIGg9ZltnXS5vZmZzZXQsaT1mW2crMV0ub2Zmc2V0LGo9ZltnXS52YWx1ZSxrPWZbZysxXS52YWx1ZSxsPWZbZ10uZWFzaW5nO2g9PWkmJigxPT1pP2o9azprPWopLGQucHVzaCh7c3RhcnRUaW1lOmgsZW5kVGltZTppLGVhc2luZzphLnRvVGltaW5nRnVuY3Rpb24obD9sOiJsaW5lYXIiKSxwcm9wZXJ0eTplLGludGVycG9sYXRpb246Yi5wcm9wZXJ0eUludGVycG9sYXRpb24oZSxqLGspfSl9cmV0dXJuIGQuc29ydChmdW5jdGlvbihhLGIpe3JldHVybiBhLnN0YXJ0VGltZS1iLnN0YXJ0VGltZX0pLGR9Yi5jb252ZXJ0RWZmZWN0SW5wdXQ9ZnVuY3Rpb24oYyl7dmFyIGY9YS5ub3JtYWxpemVLZXlmcmFtZXMoYyksZz1kKGYpLGg9ZShnKTtyZXR1cm4gZnVuY3Rpb24oYSxjKXtpZihudWxsIT1jKWguZmlsdGVyKGZ1bmN0aW9uKGEpe3JldHVybiAwPj1jJiYwPT1hLnN0YXJ0VGltZXx8Yz49MSYmMT09YS5lbmRUaW1lfHxjPj1hLnN0YXJ0VGltZSYmYzw9YS5lbmRUaW1lfSkuZm9yRWFjaChmdW5jdGlvbihkKXt2YXIgZT1jLWQuc3RhcnRUaW1lLGY9ZC5lbmRUaW1lLWQuc3RhcnRUaW1lLGc9MD09Zj8wOmQuZWFzaW5nKGUvZik7Yi5hcHBseShhLGQucHJvcGVydHksZC5pbnRlcnBvbGF0aW9uKGcpKX0pO2Vsc2UgZm9yKHZhciBkIGluIGcpIm9mZnNldCIhPWQmJiJlYXNpbmciIT1kJiYiY29tcG9zaXRlIiE9ZCYmYi5jbGVhcihhLGQpfX19KGMsZCxmKSxmdW5jdGlvbihhLGIsYyl7ZnVuY3Rpb24gZChhKXtyZXR1cm4gYS5yZXBsYWNlKC8tKC4pL2csZnVuY3Rpb24oYSxiKXtyZXR1cm4gYi50b1VwcGVyQ2FzZSgpfSl9ZnVuY3Rpb24gZShhLGIsYyl7aFtjXT1oW2NdfHxbXSxoW2NdLnB1c2goW2EsYl0pfWZ1bmN0aW9uIGYoYSxiLGMpe2Zvcih2YXIgZj0wO2Y8Yy5sZW5ndGg7ZisrKXt2YXIgZz1jW2ZdO2UoYSxiLGQoZykpfX1mdW5jdGlvbiBnKGMsZSxmKXt2YXIgZz1jOy8tLy50ZXN0KGMpJiYhYS5pc0RlcHJlY2F0ZWQoIkh5cGhlbmF0ZWQgcHJvcGVydHkgbmFtZXMiLCIyMDE2LTAzLTIyIiwiVXNlIGNhbWVsQ2FzZSBpbnN0ZWFkLiIsITApJiYoZz1kKGMpKSwiaW5pdGlhbCIhPWUmJiJpbml0aWFsIiE9Znx8KCJpbml0aWFsIj09ZSYmKGU9aVtnXSksImluaXRpYWwiPT1mJiYoZj1pW2ddKSk7Zm9yKHZhciBqPWU9PWY/W106aFtnXSxrPTA7aiYmazxqLmxlbmd0aDtrKyspe3ZhciBsPWpba11bMF0oZSksbT1qW2tdWzBdKGYpO2lmKHZvaWQgMCE9PWwmJnZvaWQgMCE9PW0pe3ZhciBuPWpba11bMV0obCxtKTtpZihuKXt2YXIgbz1iLkludGVycG9sYXRpb24uYXBwbHkobnVsbCxuKTtyZXR1cm4gZnVuY3Rpb24oYSl7cmV0dXJuIDA9PWE/ZToxPT1hP2Y6byhhKX19fX1yZXR1cm4gYi5JbnRlcnBvbGF0aW9uKCExLCEwLGZ1bmN0aW9uKGEpe3JldHVybiBhP2Y6ZX0pfXZhciBoPXt9O2IuYWRkUHJvcGVydGllc0hhbmRsZXI9Zjt2YXIgaT17YmFja2dyb3VuZENvbG9yOiJ0cmFuc3BhcmVudCIsYmFja2dyb3VuZFBvc2l0aW9uOiIwJSAwJSIsYm9yZGVyQm90dG9tQ29sb3I6ImN1cnJlbnRDb2xvciIsYm9yZGVyQm90dG9tTGVmdFJhZGl1czoiMHB4Iixib3JkZXJCb3R0b21SaWdodFJhZGl1czoiMHB4Iixib3JkZXJCb3R0b21XaWR0aDoiM3B4Iixib3JkZXJMZWZ0Q29sb3I6ImN1cnJlbnRDb2xvciIsYm9yZGVyTGVmdFdpZHRoOiIzcHgiLGJvcmRlclJpZ2h0Q29sb3I6ImN1cnJlbnRDb2xvciIsYm9yZGVyUmlnaHRXaWR0aDoiM3B4Iixib3JkZXJTcGFjaW5nOiIycHgiLGJvcmRlclRvcENvbG9yOiJjdXJyZW50Q29sb3IiLGJvcmRlclRvcExlZnRSYWRpdXM6IjBweCIsYm9yZGVyVG9wUmlnaHRSYWRpdXM6IjBweCIsYm9yZGVyVG9wV2lkdGg6IjNweCIsYm90dG9tOiJhdXRvIixjbGlwOiJyZWN0KDBweCwgMHB4LCAwcHgsIDBweCkiLGNvbG9yOiJibGFjayIsZm9udFNpemU6IjEwMCUiLGZvbnRXZWlnaHQ6IjQwMCIsaGVpZ2h0OiJhdXRvIixsZWZ0OiJhdXRvIixsZXR0ZXJTcGFjaW5nOiJub3JtYWwiLGxpbmVIZWlnaHQ6IjEyMCUiLG1hcmdpbkJvdHRvbToiMHB4IixtYXJnaW5MZWZ0OiIwcHgiLG1hcmdpblJpZ2h0OiIwcHgiLG1hcmdpblRvcDoiMHB4IixtYXhIZWlnaHQ6Im5vbmUiLG1heFdpZHRoOiJub25lIixtaW5IZWlnaHQ6IjBweCIsbWluV2lkdGg6IjBweCIsb3BhY2l0eToiMS4wIixvdXRsaW5lQ29sb3I6ImludmVydCIsb3V0bGluZU9mZnNldDoiMHB4IixvdXRsaW5lV2lkdGg6IjNweCIscGFkZGluZ0JvdHRvbToiMHB4IixwYWRkaW5nTGVmdDoiMHB4IixwYWRkaW5nUmlnaHQ6IjBweCIscGFkZGluZ1RvcDoiMHB4IixyaWdodDoiYXV0byIsdGV4dEluZGVudDoiMHB4Iix0ZXh0U2hhZG93OiIwcHggMHB4IDBweCB0cmFuc3BhcmVudCIsdG9wOiJhdXRvIix0cmFuc2Zvcm06IiIsdmVydGljYWxBbGlnbjoiMHB4Iix2aXNpYmlsaXR5OiJ2aXNpYmxlIix3aWR0aDoiYXV0byIsd29yZFNwYWNpbmc6Im5vcm1hbCIsekluZGV4OiJhdXRvIn07Yi5wcm9wZXJ0eUludGVycG9sYXRpb249Z30oYyxkLGYpLGZ1bmN0aW9uKGEsYixjKXtmdW5jdGlvbiBkKGIpe3ZhciBjPWEuY2FsY3VsYXRlQWN0aXZlRHVyYXRpb24oYiksZD1mdW5jdGlvbihkKXtyZXR1cm4gYS5jYWxjdWxhdGVUaW1lRnJhY3Rpb24oYyxkLGIpfTtyZXR1cm4gZC5fdG90YWxEdXJhdGlvbj1iLmRlbGF5K2MrYi5lbmREZWxheSxkLl9pc0N1cnJlbnQ9ZnVuY3Rpb24oZCl7dmFyIGU9YS5jYWxjdWxhdGVQaGFzZShjLGQsYik7cmV0dXJuIGU9PT1QaGFzZUFjdGl2ZXx8ZT09PVBoYXNlQmVmb3JlfSxkfWIuS2V5ZnJhbWVFZmZlY3Q9ZnVuY3Rpb24oYyxlLGYsZyl7dmFyIGgsaT1kKGEubm9ybWFsaXplVGltaW5nSW5wdXQoZikpLGo9Yi5jb252ZXJ0RWZmZWN0SW5wdXQoZSksaz1mdW5jdGlvbigpe2ooYyxoKX07cmV0dXJuIGsuX3VwZGF0ZT1mdW5jdGlvbihhKXtyZXR1cm4gaD1pKGEpLG51bGwhPT1ofSxrLl9jbGVhcj1mdW5jdGlvbigpe2ooYyxudWxsKX0say5faGFzU2FtZVRhcmdldD1mdW5jdGlvbihhKXtyZXR1cm4gYz09PWF9LGsuX2lzQ3VycmVudD1pLl9pc0N1cnJlbnQsay5fdG90YWxEdXJhdGlvbj1pLl90b3RhbER1cmF0aW9uLGsuX2lkPWcsa30sYi5OdWxsRWZmZWN0PWZ1bmN0aW9uKGEpe3ZhciBiPWZ1bmN0aW9uKCl7YSYmKGEoKSxhPW51bGwpfTtyZXR1cm4gYi5fdXBkYXRlPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LGIuX3RvdGFsRHVyYXRpb249MCxiLl9pc0N1cnJlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sYi5faGFzU2FtZVRhcmdldD1mdW5jdGlvbigpe3JldHVybiExfSxifX0oYyxkLGYpLGZ1bmN0aW9uKGEsYil7YS5hcHBseT1mdW5jdGlvbihiLGMsZCl7Yi5zdHlsZVthLnByb3BlcnR5TmFtZShjKV09ZH0sYS5jbGVhcj1mdW5jdGlvbihiLGMpe2Iuc3R5bGVbYS5wcm9wZXJ0eU5hbWUoYyldPSIifX0oZCxmKSxmdW5jdGlvbihhKXt3aW5kb3cuRWxlbWVudC5wcm90b3R5cGUuYW5pbWF0ZT1mdW5jdGlvbihiLGMpe3ZhciBkPSIiO3JldHVybiBjJiZjLmlkJiYoZD1jLmlkKSxhLnRpbWVsaW5lLl9wbGF5KGEuS2V5ZnJhbWVFZmZlY3QodGhpcyxiLGMsZCkpfX0oZCksZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjKGEsYixkKXtpZigibnVtYmVyIj09dHlwZW9mIGEmJiJudW1iZXIiPT10eXBlb2YgYilyZXR1cm4gYSooMS1kKStiKmQ7aWYoImJvb2xlYW4iPT10eXBlb2YgYSYmImJvb2xlYW4iPT10eXBlb2YgYilyZXR1cm4uNT5kP2E6YjtpZihhLmxlbmd0aD09Yi5sZW5ndGgpe2Zvcih2YXIgZT1bXSxmPTA7ZjxhLmxlbmd0aDtmKyspZS5wdXNoKGMoYVtmXSxiW2ZdLGQpKTtyZXR1cm4gZX10aHJvdyJNaXNtYXRjaGVkIGludGVycG9sYXRpb24gYXJndW1lbnRzICIrYSsiOiIrYn1hLkludGVycG9sYXRpb249ZnVuY3Rpb24oYSxiLGQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZChjKGEsYixlKSl9fX0oZCxmKSxmdW5jdGlvbihhLGIsYyl7YS5zZXF1ZW5jZU51bWJlcj0wO3ZhciBkPWZ1bmN0aW9uKGEsYixjKXt0aGlzLnRhcmdldD1hLHRoaXMuY3VycmVudFRpbWU9Yix0aGlzLnRpbWVsaW5lVGltZT1jLHRoaXMudHlwZT0iZmluaXNoIix0aGlzLmJ1YmJsZXM9ITEsdGhpcy5jYW5jZWxhYmxlPSExLHRoaXMuY3VycmVudFRhcmdldD1hLHRoaXMuZGVmYXVsdFByZXZlbnRlZD0hMSx0aGlzLmV2ZW50UGhhc2U9RXZlbnQuQVRfVEFSR0VULHRoaXMudGltZVN0YW1wPURhdGUubm93KCl9O2IuQW5pbWF0aW9uPWZ1bmN0aW9uKGIpe3RoaXMuaWQ9IiIsYiYmYi5faWQmJih0aGlzLmlkPWIuX2lkKSx0aGlzLl9zZXF1ZW5jZU51bWJlcj1hLnNlcXVlbmNlTnVtYmVyKyssdGhpcy5fY3VycmVudFRpbWU9MCx0aGlzLl9zdGFydFRpbWU9bnVsbCx0aGlzLl9wYXVzZWQ9ITEsdGhpcy5fcGxheWJhY2tSYXRlPTEsdGhpcy5faW5UaW1lbGluZT0hMCx0aGlzLl9maW5pc2hlZEZsYWc9ITAsdGhpcy5vbmZpbmlzaD1udWxsLHRoaXMuX2ZpbmlzaEhhbmRsZXJzPVtdLHRoaXMuX2VmZmVjdD1iLHRoaXMuX2luRWZmZWN0PXRoaXMuX2VmZmVjdC5fdXBkYXRlKDApLHRoaXMuX2lkbGU9ITAsdGhpcy5fY3VycmVudFRpbWVQZW5kaW5nPSExfSxiLkFuaW1hdGlvbi5wcm90b3R5cGU9e19lbnN1cmVBbGl2ZTpmdW5jdGlvbigpe3RoaXMucGxheWJhY2tSYXRlPDAmJjA9PT10aGlzLmN1cnJlbnRUaW1lP3RoaXMuX2luRWZmZWN0PXRoaXMuX2VmZmVjdC5fdXBkYXRlKC0xKTp0aGlzLl9pbkVmZmVjdD10aGlzLl9lZmZlY3QuX3VwZGF0ZSh0aGlzLmN1cnJlbnRUaW1lKSx0aGlzLl9pblRpbWVsaW5lfHwhdGhpcy5faW5FZmZlY3QmJnRoaXMuX2ZpbmlzaGVkRmxhZ3x8KHRoaXMuX2luVGltZWxpbmU9ITAsYi50aW1lbGluZS5fYW5pbWF0aW9ucy5wdXNoKHRoaXMpKX0sX3RpY2tDdXJyZW50VGltZTpmdW5jdGlvbihhLGIpe2EhPXRoaXMuX2N1cnJlbnRUaW1lJiYodGhpcy5fY3VycmVudFRpbWU9YSx0aGlzLl9pc0ZpbmlzaGVkJiYhYiYmKHRoaXMuX2N1cnJlbnRUaW1lPXRoaXMuX3BsYXliYWNrUmF0ZT4wP3RoaXMuX3RvdGFsRHVyYXRpb246MCksdGhpcy5fZW5zdXJlQWxpdmUoKSl9LGdldCBjdXJyZW50VGltZSgpe3JldHVybiB0aGlzLl9pZGxlfHx0aGlzLl9jdXJyZW50VGltZVBlbmRpbmc/bnVsbDp0aGlzLl9jdXJyZW50VGltZX0sc2V0IGN1cnJlbnRUaW1lKGEpe2E9K2EsaXNOYU4oYSl8fChiLnJlc3RhcnQoKSx0aGlzLl9wYXVzZWR8fG51bGw9PXRoaXMuX3N0YXJ0VGltZXx8KHRoaXMuX3N0YXJ0VGltZT10aGlzLl90aW1lbGluZS5jdXJyZW50VGltZS1hL3RoaXMuX3BsYXliYWNrUmF0ZSksdGhpcy5fY3VycmVudFRpbWVQZW5kaW5nPSExLHRoaXMuX2N1cnJlbnRUaW1lIT1hJiYodGhpcy5fdGlja0N1cnJlbnRUaW1lKGEsITApLGIuaW52YWxpZGF0ZUVmZmVjdHMoKSkpfSxnZXQgc3RhcnRUaW1lKCl7cmV0dXJuIHRoaXMuX3N0YXJ0VGltZX0sc2V0IHN0YXJ0VGltZShhKXthPSthLGlzTmFOKGEpfHx0aGlzLl9wYXVzZWR8fHRoaXMuX2lkbGV8fCh0aGlzLl9zdGFydFRpbWU9YSx0aGlzLl90aWNrQ3VycmVudFRpbWUoKHRoaXMuX3RpbWVsaW5lLmN1cnJlbnRUaW1lLXRoaXMuX3N0YXJ0VGltZSkqdGhpcy5wbGF5YmFja1JhdGUpLGIuaW52YWxpZGF0ZUVmZmVjdHMoKSl9LGdldCBwbGF5YmFja1JhdGUoKXtyZXR1cm4gdGhpcy5fcGxheWJhY2tSYXRlfSxzZXQgcGxheWJhY2tSYXRlKGEpe2lmKGEhPXRoaXMuX3BsYXliYWNrUmF0ZSl7dmFyIGI9dGhpcy5jdXJyZW50VGltZTt0aGlzLl9wbGF5YmFja1JhdGU9YSx0aGlzLl9zdGFydFRpbWU9bnVsbCwicGF1c2VkIiE9dGhpcy5wbGF5U3RhdGUmJiJpZGxlIiE9dGhpcy5wbGF5U3RhdGUmJnRoaXMucGxheSgpLG51bGwhPWImJih0aGlzLmN1cnJlbnRUaW1lPWIpfX0sZ2V0IF9pc0ZpbmlzaGVkKCl7cmV0dXJuIXRoaXMuX2lkbGUmJih0aGlzLl9wbGF5YmFja1JhdGU+MCYmdGhpcy5fY3VycmVudFRpbWU+PXRoaXMuX3RvdGFsRHVyYXRpb258fHRoaXMuX3BsYXliYWNrUmF0ZTwwJiZ0aGlzLl9jdXJyZW50VGltZTw9MCl9LGdldCBfdG90YWxEdXJhdGlvbigpe3JldHVybiB0aGlzLl9lZmZlY3QuX3RvdGFsRHVyYXRpb259LGdldCBwbGF5U3RhdGUoKXtyZXR1cm4gdGhpcy5faWRsZT8iaWRsZSI6bnVsbD09dGhpcy5fc3RhcnRUaW1lJiYhdGhpcy5fcGF1c2VkJiYwIT10aGlzLnBsYXliYWNrUmF0ZXx8dGhpcy5fY3VycmVudFRpbWVQZW5kaW5nPyJwZW5kaW5nIjp0aGlzLl9wYXVzZWQ/InBhdXNlZCI6dGhpcy5faXNGaW5pc2hlZD8iZmluaXNoZWQiOiJydW5uaW5nIn0scGxheTpmdW5jdGlvbigpe3RoaXMuX3BhdXNlZD0hMSwodGhpcy5faXNGaW5pc2hlZHx8dGhpcy5faWRsZSkmJih0aGlzLl9jdXJyZW50VGltZT10aGlzLl9wbGF5YmFja1JhdGU+MD8wOnRoaXMuX3RvdGFsRHVyYXRpb24sdGhpcy5fc3RhcnRUaW1lPW51bGwpLHRoaXMuX2ZpbmlzaGVkRmxhZz0hMSx0aGlzLl9pZGxlPSExLHRoaXMuX2Vuc3VyZUFsaXZlKCksYi5pbnZhbGlkYXRlRWZmZWN0cygpfSxwYXVzZTpmdW5jdGlvbigpe3RoaXMuX2lzRmluaXNoZWR8fHRoaXMuX3BhdXNlZHx8dGhpcy5faWRsZXx8KHRoaXMuX2N1cnJlbnRUaW1lUGVuZGluZz0hMCksdGhpcy5fc3RhcnRUaW1lPW51bGwsdGhpcy5fcGF1c2VkPSEwfSxmaW5pc2g6ZnVuY3Rpb24oKXt0aGlzLl9pZGxlfHwodGhpcy5jdXJyZW50VGltZT10aGlzLl9wbGF5YmFja1JhdGU+MD90aGlzLl90b3RhbER1cmF0aW9uOjAsdGhpcy5fc3RhcnRUaW1lPXRoaXMuX3RvdGFsRHVyYXRpb24tdGhpcy5jdXJyZW50VGltZSx0aGlzLl9jdXJyZW50VGltZVBlbmRpbmc9ITEsYi5pbnZhbGlkYXRlRWZmZWN0cygpKX0sY2FuY2VsOmZ1bmN0aW9uKCl7dGhpcy5faW5FZmZlY3QmJih0aGlzLl9pbkVmZmVjdD0hMSx0aGlzLl9pZGxlPSEwLHRoaXMuX2ZpbmlzaGVkRmxhZz0hMCx0aGlzLmN1cnJlbnRUaW1lPTAsdGhpcy5fc3RhcnRUaW1lPW51bGwsdGhpcy5fZWZmZWN0Ll91cGRhdGUobnVsbCksYi5pbnZhbGlkYXRlRWZmZWN0cygpKX0scmV2ZXJzZTpmdW5jdGlvbigpe3RoaXMucGxheWJhY2tSYXRlKj0tMSx0aGlzLnBsYXkoKX0sYWRkRXZlbnRMaXN0ZW5lcjpmdW5jdGlvbihhLGIpeyJmdW5jdGlvbiI9PXR5cGVvZiBiJiYiZmluaXNoIj09YSYmdGhpcy5fZmluaXNoSGFuZGxlcnMucHVzaChiKX0scmVtb3ZlRXZlbnRMaXN0ZW5lcjpmdW5jdGlvbihhLGIpe2lmKCJmaW5pc2giPT1hKXt2YXIgYz10aGlzLl9maW5pc2hIYW5kbGVycy5pbmRleE9mKGIpO2M+PTAmJnRoaXMuX2ZpbmlzaEhhbmRsZXJzLnNwbGljZShjLDEpfX0sX2ZpcmVFdmVudHM6ZnVuY3Rpb24oYSl7aWYodGhpcy5faXNGaW5pc2hlZCl7aWYoIXRoaXMuX2ZpbmlzaGVkRmxhZyl7dmFyIGI9bmV3IGQodGhpcyx0aGlzLl9jdXJyZW50VGltZSxhKSxjPXRoaXMuX2ZpbmlzaEhhbmRsZXJzLmNvbmNhdCh0aGlzLm9uZmluaXNoP1t0aGlzLm9uZmluaXNoXTpbXSk7c2V0VGltZW91dChmdW5jdGlvbigpe2MuZm9yRWFjaChmdW5jdGlvbihhKXthLmNhbGwoYi50YXJnZXQsYil9KX0sMCksdGhpcy5fZmluaXNoZWRGbGFnPSEwfX1lbHNlIHRoaXMuX2ZpbmlzaGVkRmxhZz0hMX0sX3RpY2s6ZnVuY3Rpb24oYSxiKXt0aGlzLl9pZGxlfHx0aGlzLl9wYXVzZWR8fChudWxsPT10aGlzLl9zdGFydFRpbWU/YiYmKHRoaXMuc3RhcnRUaW1lPWEtdGhpcy5fY3VycmVudFRpbWUvdGhpcy5wbGF5YmFja1JhdGUpOnRoaXMuX2lzRmluaXNoZWR8fHRoaXMuX3RpY2tDdXJyZW50VGltZSgoYS10aGlzLl9zdGFydFRpbWUpKnRoaXMucGxheWJhY2tSYXRlKSksYiYmKHRoaXMuX2N1cnJlbnRUaW1lUGVuZGluZz0hMSx0aGlzLl9maXJlRXZlbnRzKGEpKX0sZ2V0IF9uZWVkc1RpY2soKXtyZXR1cm4gdGhpcy5wbGF5U3RhdGUgaW57cGVuZGluZzoxLHJ1bm5pbmc6MX18fCF0aGlzLl9maW5pc2hlZEZsYWd9fX0oYyxkLGYpLGZ1bmN0aW9uKGEsYixjKXtmdW5jdGlvbiBkKGEpe3ZhciBiPWo7aj1bXSxhPHAuY3VycmVudFRpbWUmJihhPXAuY3VycmVudFRpbWUpLGgoYSwhMCksYi5mb3JFYWNoKGZ1bmN0aW9uKGIpe2JbMV0oYSl9KSxnKCksbD12b2lkIDB9ZnVuY3Rpb24gZShhLGIpe3JldHVybiBhLl9zZXF1ZW5jZU51bWJlci1iLl9zZXF1ZW5jZU51bWJlcn1mdW5jdGlvbiBmKCl7dGhpcy5fYW5pbWF0aW9ucz1bXSx0aGlzLmN1cnJlbnRUaW1lPXdpbmRvdy5wZXJmb3JtYW5jZSYmcGVyZm9ybWFuY2Uubm93P3BlcmZvcm1hbmNlLm5vdygpOjB9ZnVuY3Rpb24gZygpe28uZm9yRWFjaChmdW5jdGlvbihhKXthKCl9KSxvLmxlbmd0aD0wfWZ1bmN0aW9uIGgoYSxjKXtuPSExO3ZhciBkPWIudGltZWxpbmU7ZC5jdXJyZW50VGltZT1hLGQuX2FuaW1hdGlvbnMuc29ydChlKSxtPSExO3ZhciBmPWQuX2FuaW1hdGlvbnM7ZC5fYW5pbWF0aW9ucz1bXTt2YXIgZz1bXSxoPVtdO2Y9Zi5maWx0ZXIoZnVuY3Rpb24oYil7Yi5fdGljayhhLGMpLGIuX2luRWZmZWN0P2gucHVzaChiLl9lZmZlY3QpOmcucHVzaChiLl9lZmZlY3QpLGIuX25lZWRzVGljayYmKG09ITApO3ZhciBkPWIuX2luRWZmZWN0fHxiLl9uZWVkc1RpY2s7cmV0dXJuIGIuX2luVGltZWxpbmU9ZCxkfSksby5wdXNoLmFwcGx5KG8sZyksby5wdXNoLmFwcGx5KG8saCksZC5fYW5pbWF0aW9ucy5wdXNoLmFwcGx5KGQuX2FuaW1hdGlvbnMsZiksbSYmcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uKCl7fSl9dmFyIGk9d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSxqPVtdLGs9MDt3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lPWZ1bmN0aW9uKGEpe3ZhciBiPWsrKztyZXR1cm4gMD09ai5sZW5ndGgmJmkoZCksai5wdXNoKFtiLGFdKSxifSx3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWU9ZnVuY3Rpb24oYSl7ai5mb3JFYWNoKGZ1bmN0aW9uKGIpe2JbMF09PWEmJihiWzFdPWZ1bmN0aW9uKCl7fSl9KX0sZi5wcm90b3R5cGU9e19wbGF5OmZ1bmN0aW9uKGMpe2MuX3RpbWluZz1hLm5vcm1hbGl6ZVRpbWluZ0lucHV0KGMudGltaW5nKTt2YXIgZD1uZXcgYi5BbmltYXRpb24oYyk7cmV0dXJuIGQuX2lkbGU9ITEsZC5fdGltZWxpbmU9dGhpcyx0aGlzLl9hbmltYXRpb25zLnB1c2goZCksYi5yZXN0YXJ0KCksYi5pbnZhbGlkYXRlRWZmZWN0cygpLGR9fTt2YXIgbD12b2lkIDAsbT0hMSxuPSExO2IucmVzdGFydD1mdW5jdGlvbigpe3JldHVybiBtfHwobT0hMCxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24oKXt9KSxuPSEwKSxufSxiLmludmFsaWRhdGVFZmZlY3RzPWZ1bmN0aW9uKCl7aChiLnRpbWVsaW5lLmN1cnJlbnRUaW1lLCExKSxnKCl9O3ZhciBvPVtdLHA9bmV3IGY7Yi50aW1lbGluZT1wfShjLGQsZiksZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYihhLGIpe3ZhciBjPWEuZXhlYyhiKTtyZXR1cm4gYz8oYz1hLmlnbm9yZUNhc2U/Y1swXS50b0xvd2VyQ2FzZSgpOmNbMF0sW2MsYi5zdWJzdHIoYy5sZW5ndGgpXSk6dm9pZCAwfWZ1bmN0aW9uIGMoYSxiKXtiPWIucmVwbGFjZSgvXlxzKi8sIiIpO3ZhciBjPWEoYik7cmV0dXJuIGM/W2NbMF0sY1sxXS5yZXBsYWNlKC9eXHMqLywiIildOnZvaWQgMH1mdW5jdGlvbiBkKGEsZCxlKXthPWMuYmluZChudWxsLGEpO2Zvcih2YXIgZj1bXTs7KXt2YXIgZz1hKGUpO2lmKCFnKXJldHVybltmLGVdO2lmKGYucHVzaChnWzBdKSxlPWdbMV0sZz1iKGQsZSksIWd8fCIiPT1nWzFdKXJldHVybltmLGVdO2U9Z1sxXX19ZnVuY3Rpb24gZShhLGIpe2Zvcih2YXIgYz0wLGQ9MDtkPGIubGVuZ3RoJiYoIS9cc3wsLy50ZXN0KGJbZF0pfHwwIT1jKTtkKyspaWYoIigiPT1iW2RdKWMrKztlbHNlIGlmKCIpIj09YltkXSYmKGMtLSwwPT1jJiZkKyssMD49YykpYnJlYWs7dmFyIGU9YShiLnN1YnN0cigwLGQpKTtyZXR1cm4gdm9pZCAwPT1lP3ZvaWQgMDpbZSxiLnN1YnN0cihkKV19ZnVuY3Rpb24gZihhLGIpe2Zvcih2YXIgYz1hLGQ9YjtjJiZkOyljPmQ/YyU9ZDpkJT1jO3JldHVybiBjPWEqYi8oYytkKX1mdW5jdGlvbiBnKGEpe3JldHVybiBmdW5jdGlvbihiKXt2YXIgYz1hKGIpO3JldHVybiBjJiYoY1swXT12b2lkIDApLGN9fWZ1bmN0aW9uIGgoYSxiKXtyZXR1cm4gZnVuY3Rpb24oYyl7dmFyIGQ9YShjKTtyZXR1cm4gZD9kOltiLGNdfX1mdW5jdGlvbiBpKGIsYyl7Zm9yKHZhciBkPVtdLGU9MDtlPGIubGVuZ3RoO2UrKyl7dmFyIGY9YS5jb25zdW1lVHJpbW1lZChiW2VdLGMpO2lmKCFmfHwiIj09ZlswXSlyZXR1cm47dm9pZCAwIT09ZlswXSYmZC5wdXNoKGZbMF0pLGM9ZlsxXX1yZXR1cm4iIj09Yz9kOnZvaWQgMH1mdW5jdGlvbiBqKGEsYixjLGQsZSl7Zm9yKHZhciBnPVtdLGg9W10saT1bXSxqPWYoZC5sZW5ndGgsZS5sZW5ndGgpLGs9MDtqPms7aysrKXt2YXIgbD1iKGRbayVkLmxlbmd0aF0sZVtrJWUubGVuZ3RoXSk7aWYoIWwpcmV0dXJuO2cucHVzaChsWzBdKSxoLnB1c2gobFsxXSksaS5wdXNoKGxbMl0pfXJldHVybltnLGgsZnVuY3Rpb24oYil7dmFyIGQ9Yi5tYXAoZnVuY3Rpb24oYSxiKXtyZXR1cm4gaVtiXShhKX0pLmpvaW4oYyk7cmV0dXJuIGE/YShkKTpkfV19ZnVuY3Rpb24gayhhLGIsYyl7Zm9yKHZhciBkPVtdLGU9W10sZj1bXSxnPTAsaD0wO2g8Yy5sZW5ndGg7aCsrKWlmKCJmdW5jdGlvbiI9PXR5cGVvZiBjW2hdKXt2YXIgaT1jW2hdKGFbZ10sYltnKytdKTtkLnB1c2goaVswXSksZS5wdXNoKGlbMV0pLGYucHVzaChpWzJdKX1lbHNlIWZ1bmN0aW9uKGEpe2QucHVzaCghMSksZS5wdXNoKCExKSxmLnB1c2goZnVuY3Rpb24oKXtyZXR1cm4gY1thXX0pfShoKTtyZXR1cm5bZCxlLGZ1bmN0aW9uKGEpe2Zvcih2YXIgYj0iIixjPTA7YzxhLmxlbmd0aDtjKyspYis9ZltjXShhW2NdKTtyZXR1cm4gYn1dfWEuY29uc3VtZVRva2VuPWIsYS5jb25zdW1lVHJpbW1lZD1jLGEuY29uc3VtZVJlcGVhdGVkPWQsYS5jb25zdW1lUGFyZW50aGVzaXNlZD1lLGEuaWdub3JlPWcsYS5vcHRpb25hbD1oLGEuY29uc3VtZUxpc3Q9aSxhLm1lcmdlTmVzdGVkUmVwZWF0ZWQ9ai5iaW5kKG51bGwsbnVsbCksYS5tZXJnZVdyYXBwZWROZXN0ZWRSZXBlYXRlZD1qLGEubWVyZ2VMaXN0PWt9KGQpLGZ1bmN0aW9uKGEpe2Z1bmN0aW9uIGIoYil7ZnVuY3Rpb24gYyhiKXt2YXIgYz1hLmNvbnN1bWVUb2tlbigvXmluc2V0L2ksYik7aWYoYylyZXR1cm4gZC5pbnNldD0hMCxjO3ZhciBjPWEuY29uc3VtZUxlbmd0aE9yUGVyY2VudChiKTtpZihjKXJldHVybiBkLmxlbmd0aHMucHVzaChjWzBdKSxjO3ZhciBjPWEuY29uc3VtZUNvbG9yKGIpO3JldHVybiBjPyhkLmNvbG9yPWNbMF0sYyk6dm9pZCAwfXZhciBkPXtpbnNldDohMSxsZW5ndGhzOltdLGNvbG9yOm51bGx9LGU9YS5jb25zdW1lUmVwZWF0ZWQoYywvXi8sYik7cmV0dXJuIGUmJmVbMF0ubGVuZ3RoP1tkLGVbMV1dOnZvaWQgMH1mdW5jdGlvbiBjKGMpe3ZhciBkPWEuY29uc3VtZVJlcGVhdGVkKGIsL14sLyxjKTtyZXR1cm4gZCYmIiI9PWRbMV0/ZFswXTp2b2lkIDB9ZnVuY3Rpb24gZChiLGMpe2Zvcig7Yi5sZW5ndGhzLmxlbmd0aDxNYXRoLm1heChiLmxlbmd0aHMubGVuZ3RoLGMubGVuZ3Rocy5sZW5ndGgpOyliLmxlbmd0aHMucHVzaCh7cHg6MH0pO2Zvcig7Yy5sZW5ndGhzLmxlbmd0aDxNYXRoLm1heChiLmxlbmd0aHMubGVuZ3RoLGMubGVuZ3Rocy5sZW5ndGgpOyljLmxlbmd0aHMucHVzaCh7cHg6MH0pO2lmKGIuaW5zZXQ9PWMuaW5zZXQmJiEhYi5jb2xvcj09ISFjLmNvbG9yKXtmb3IodmFyIGQsZT1bXSxmPVtbXSwwXSxnPVtbXSwwXSxoPTA7aDxiLmxlbmd0aHMubGVuZ3RoO2grKyl7dmFyIGk9YS5tZXJnZURpbWVuc2lvbnMoYi5sZW5ndGhzW2hdLGMubGVuZ3Roc1toXSwyPT1oKTtmWzBdLnB1c2goaVswXSksZ1swXS5wdXNoKGlbMV0pLGUucHVzaChpWzJdKX1pZihiLmNvbG9yJiZjLmNvbG9yKXt2YXIgaj1hLm1lcmdlQ29sb3JzKGIuY29sb3IsYy5jb2xvcik7ZlsxXT1qWzBdLGdbMV09alsxXSxkPWpbMl19cmV0dXJuW2YsZyxmdW5jdGlvbihhKXtmb3IodmFyIGM9Yi5pbnNldD8iaW5zZXQgIjoiICIsZj0wO2Y8ZS5sZW5ndGg7ZisrKWMrPWVbZl0oYVswXVtmXSkrIiAiO3JldHVybiBkJiYoYys9ZChhWzFdKSksY31dfX1mdW5jdGlvbiBlKGIsYyxkLGUpe2Z1bmN0aW9uIGYoYSl7cmV0dXJue2luc2V0OmEsY29sb3I6WzAsMCwwLDBdLGxlbmd0aHM6W3tweDowfSx7cHg6MH0se3B4OjB9LHtweDowfV19fWZvcih2YXIgZz1bXSxoPVtdLGk9MDtpPGQubGVuZ3RofHxpPGUubGVuZ3RoO2krKyl7dmFyIGo9ZFtpXXx8ZihlW2ldLmluc2V0KSxrPWVbaV18fGYoZFtpXS5pbnNldCk7Zy5wdXNoKGopLGgucHVzaChrKX1yZXR1cm4gYS5tZXJnZU5lc3RlZFJlcGVhdGVkKGIsYyxnLGgpfXZhciBmPWUuYmluZChudWxsLGQsIiwgIik7YS5hZGRQcm9wZXJ0aWVzSGFuZGxlcihjLGYsWyJib3gtc2hhZG93IiwidGV4dC1zaGFkb3ciXSl9KGQpLGZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gYyhhKXtyZXR1cm4gYS50b0ZpeGVkKDMpLnJlcGxhY2UoIi4wMDAiLCIiKX1mdW5jdGlvbiBkKGEsYixjKXtyZXR1cm4gTWF0aC5taW4oYixNYXRoLm1heChhLGMpKX1mdW5jdGlvbiBlKGEpe3JldHVybi9eXHMqWy0rXT8oXGQqXC4pP1xkK1xzKiQvLnRlc3QoYSk/TnVtYmVyKGEpOnZvaWQgMH1mdW5jdGlvbiBmKGEsYil7cmV0dXJuW2EsYixjXX1mdW5jdGlvbiBnKGEsYil7cmV0dXJuIDAhPWE/aSgwLDEvMCkoYSxiKTp2b2lkIDB9ZnVuY3Rpb24gaChhLGIpe3JldHVyblthLGIsZnVuY3Rpb24oYSl7cmV0dXJuIE1hdGgucm91bmQoZCgxLDEvMCxhKSl9XX1mdW5jdGlvbiBpKGEsYil7cmV0dXJuIGZ1bmN0aW9uKGUsZil7cmV0dXJuW2UsZixmdW5jdGlvbihlKXtyZXR1cm4gYyhkKGEsYixlKSl9XX19ZnVuY3Rpb24gaihhLGIpe3JldHVyblthLGIsTWF0aC5yb3VuZF19YS5jbGFtcD1kLGEuYWRkUHJvcGVydGllc0hhbmRsZXIoZSxpKDAsMS8wKSxbImJvcmRlci1pbWFnZS13aWR0aCIsImxpbmUtaGVpZ2h0Il0pLGEuYWRkUHJvcGVydGllc0hhbmRsZXIoZSxpKDAsMSksWyJvcGFjaXR5Iiwic2hhcGUtaW1hZ2UtdGhyZXNob2xkIl0pLGEuYWRkUHJvcGVydGllc0hhbmRsZXIoZSxnLFsiZmxleC1ncm93IiwiZmxleC1zaHJpbmsiXSksYS5hZGRQcm9wZXJ0aWVzSGFuZGxlcihlLGgsWyJvcnBoYW5zIiwid2lkb3dzIl0pLGEuYWRkUHJvcGVydGllc0hhbmRsZXIoZSxqLFsiei1pbmRleCJdKSxhLnBhcnNlTnVtYmVyPWUsYS5tZXJnZU51bWJlcnM9ZixhLm51bWJlclRvU3RyaW5nPWN9KGQsZiksZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjKGEsYil7cmV0dXJuInZpc2libGUiPT1hfHwidmlzaWJsZSI9PWI/WzAsMSxmdW5jdGlvbihjKXtyZXR1cm4gMD49Yz9hOmM+PTE/YjoidmlzaWJsZSJ9XTp2b2lkIDB9YS5hZGRQcm9wZXJ0aWVzSGFuZGxlcihTdHJpbmcsYyxbInZpc2liaWxpdHkiXSl9KGQpLGZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gYyhhKXthPWEudHJpbSgpLGYuZmlsbFN0eWxlPSIjMDAwIixmLmZpbGxTdHlsZT1hO3ZhciBiPWYuZmlsbFN0eWxlO2lmKGYuZmlsbFN0eWxlPSIjZmZmIixmLmZpbGxTdHlsZT1hLGI9PWYuZmlsbFN0eWxlKXtmLmZpbGxSZWN0KDAsMCwxLDEpO3ZhciBjPWYuZ2V0SW1hZ2VEYXRhKDAsMCwxLDEpLmRhdGE7Zi5jbGVhclJlY3QoMCwwLDEsMSk7dmFyIGQ9Y1szXS8yNTU7cmV0dXJuW2NbMF0qZCxjWzFdKmQsY1syXSpkLGRdfX1mdW5jdGlvbiBkKGIsYyl7cmV0dXJuW2IsYyxmdW5jdGlvbihiKXtmdW5jdGlvbiBjKGEpe3JldHVybiBNYXRoLm1heCgwLE1hdGgubWluKDI1NSxhKSl9aWYoYlszXSlmb3IodmFyIGQ9MDszPmQ7ZCsrKWJbZF09TWF0aC5yb3VuZChjKGJbZF0vYlszXSkpO3JldHVybiBiWzNdPWEubnVtYmVyVG9TdHJpbmcoYS5jbGFtcCgwLDEsYlszXSkpLCJyZ2JhKCIrYi5qb2luKCIsIikrIikifV19dmFyIGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiwiY2FudmFzIik7ZS53aWR0aD1lLmhlaWdodD0xO3ZhciBmPWUuZ2V0Q29udGV4dCgiMmQiKTthLmFkZFByb3BlcnRpZXNIYW5kbGVyKGMsZCxbImJhY2tncm91bmQtY29sb3IiLCJib3JkZXItYm90dG9tLWNvbG9yIiwiYm9yZGVyLWxlZnQtY29sb3IiLCJib3JkZXItcmlnaHQtY29sb3IiLCJib3JkZXItdG9wLWNvbG9yIiwiY29sb3IiLCJvdXRsaW5lLWNvbG9yIiwidGV4dC1kZWNvcmF0aW9uLWNvbG9yIl0pLGEuY29uc3VtZUNvbG9yPWEuY29uc3VtZVBhcmVudGhlc2lzZWQuYmluZChudWxsLGMpLGEubWVyZ2VDb2xvcnM9ZH0oZCxmKSxmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGMoYSxiKXtpZihiPWIudHJpbSgpLnRvTG93ZXJDYXNlKCksIjAiPT1iJiYicHgiLnNlYXJjaChhKT49MClyZXR1cm57cHg6MH07aWYoL15bXihdKiR8XmNhbGMvLnRlc3QoYikpe2I9Yi5yZXBsYWNlKC9jYWxjXCgvZywiKCIpO3ZhciBjPXt9O2I9Yi5yZXBsYWNlKGEsZnVuY3Rpb24oYSl7cmV0dXJuIGNbYV09bnVsbCwiVSIrYX0pO2Zvcih2YXIgZD0iVSgiK2Euc291cmNlKyIpIixlPWIucmVwbGFjZSgvWy0rXT8oXGQqXC4pP1xkKy9nLCJOIikucmVwbGFjZShuZXcgUmVnRXhwKCJOIitkLCJnIiksIkQiKS5yZXBsYWNlKC9cc1srLV1ccy9nLCJPIikucmVwbGFjZSgvXHMvZywiIiksZj1bL05cKihEKS9nLC8oTnxEKVsqXC9dTi9nLC8oTnxEKU9cMS9nLC9cKChOfEQpXCkvZ10sZz0wO2c8Zi5sZW5ndGg7KWZbZ10udGVzdChlKT8oZT1lLnJlcGxhY2UoZltnXSwiJDEiKSxnPTApOmcrKztpZigiRCI9PWUpe2Zvcih2YXIgaCBpbiBjKXt2YXIgaT1ldmFsKGIucmVwbGFjZShuZXcgUmVnRXhwKCJVIitoLCJnIiksIiIpLnJlcGxhY2UobmV3IFJlZ0V4cChkLCJnIiksIiowIikpO2lmKCFpc0Zpbml0ZShpKSlyZXR1cm47Y1toXT1pfXJldHVybiBjfX19ZnVuY3Rpb24gZChhLGIpe3JldHVybiBlKGEsYiwhMCl9ZnVuY3Rpb24gZShiLGMsZCl7dmFyIGUsZj1bXTtmb3IoZSBpbiBiKWYucHVzaChlKTtmb3IoZSBpbiBjKWYuaW5kZXhPZihlKTwwJiZmLnB1c2goZSk7cmV0dXJuIGI9Zi5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIGJbYV18fDB9KSxjPWYubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBjW2FdfHwwfSksW2IsYyxmdW5jdGlvbihiKXt2YXIgYz1iLm1hcChmdW5jdGlvbihjLGUpe3JldHVybiAxPT1iLmxlbmd0aCYmZCYmKGM9TWF0aC5tYXgoYywwKSksYS5udW1iZXJUb1N0cmluZyhjKStmW2VdfSkuam9pbigiICsgIik7cmV0dXJuIGIubGVuZ3RoPjE/ImNhbGMoIitjKyIpIjpjfV19dmFyIGY9InB4fGVtfGV4fGNofHJlbXx2d3x2aHx2bWlufHZtYXh8Y218bW18aW58cHR8cGMiLGc9Yy5iaW5kKG51bGwsbmV3IFJlZ0V4cChmLCJnIikpLGg9Yy5iaW5kKG51bGwsbmV3IFJlZ0V4cChmKyJ8JSIsImciKSksaT1jLmJpbmQobnVsbCwvZGVnfHJhZHxncmFkfHR1cm4vZyk7YS5wYXJzZUxlbmd0aD1nLGEucGFyc2VMZW5ndGhPclBlcmNlbnQ9aCxhLmNvbnN1bWVMZW5ndGhPclBlcmNlbnQ9YS5jb25zdW1lUGFyZW50aGVzaXNlZC5iaW5kKG51bGwsaCksYS5wYXJzZUFuZ2xlPWksYS5tZXJnZURpbWVuc2lvbnM9ZTt2YXIgaj1hLmNvbnN1bWVQYXJlbnRoZXNpc2VkLmJpbmQobnVsbCxnKSxrPWEuY29uc3VtZVJlcGVhdGVkLmJpbmQodm9pZCAwLGosL14vKSxsPWEuY29uc3VtZVJlcGVhdGVkLmJpbmQodm9pZCAwLGssL14sLyk7YS5jb25zdW1lU2l6ZVBhaXJMaXN0PWw7dmFyIG09ZnVuY3Rpb24oYSl7dmFyIGI9bChhKTtyZXR1cm4gYiYmIiI9PWJbMV0/YlswXTp2b2lkIDB9LG49YS5tZXJnZU5lc3RlZFJlcGVhdGVkLmJpbmQodm9pZCAwLGQsIiAiKSxvPWEubWVyZ2VOZXN0ZWRSZXBlYXRlZC5iaW5kKHZvaWQgMCxuLCIsIik7YS5tZXJnZU5vbk5lZ2F0aXZlU2l6ZVBhaXI9bixhLmFkZFByb3BlcnRpZXNIYW5kbGVyKG0sbyxbImJhY2tncm91bmQtc2l6ZSJdKSxhLmFkZFByb3BlcnRpZXNIYW5kbGVyKGgsZCxbImJvcmRlci1ib3R0b20td2lkdGgiLCJib3JkZXItaW1hZ2Utd2lkdGgiLCJib3JkZXItbGVmdC13aWR0aCIsImJvcmRlci1yaWdodC13aWR0aCIsImJvcmRlci10b3Atd2lkdGgiLCJmbGV4LWJhc2lzIiwiZm9udC1zaXplIiwiaGVpZ2h0IiwibGluZS1oZWlnaHQiLCJtYXgtaGVpZ2h0IiwibWF4LXdpZHRoIiwib3V0bGluZS13aWR0aCIsIndpZHRoIl0pLGEuYWRkUHJvcGVydGllc0hhbmRsZXIoaCxlLFsiYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1cyIsImJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzIiwiYm9yZGVyLXRvcC1sZWZ0LXJhZGl1cyIsImJvcmRlci10b3AtcmlnaHQtcmFkaXVzIiwiYm90dG9tIiwibGVmdCIsImxldHRlci1zcGFjaW5nIiwibWFyZ2luLWJvdHRvbSIsIm1hcmdpbi1sZWZ0IiwibWFyZ2luLXJpZ2h0IiwibWFyZ2luLXRvcCIsIm1pbi1oZWlnaHQiLCJtaW4td2lkdGgiLCJvdXRsaW5lLW9mZnNldCIsInBhZGRpbmctYm90dG9tIiwicGFkZGluZy1sZWZ0IiwicGFkZGluZy1yaWdodCIsInBhZGRpbmctdG9wIiwicGVyc3BlY3RpdmUiLCJyaWdodCIsInNoYXBlLW1hcmdpbiIsInRleHQtaW5kZW50IiwidG9wIiwidmVydGljYWwtYWxpZ24iLCJ3b3JkLXNwYWNpbmciXSl9KGQsZiksZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjKGIpe3JldHVybiBhLmNvbnN1bWVMZW5ndGhPclBlcmNlbnQoYil8fGEuY29uc3VtZVRva2VuKC9eYXV0by8sYil9ZnVuY3Rpb24gZChiKXt2YXIgZD1hLmNvbnN1bWVMaXN0KFthLmlnbm9yZShhLmNvbnN1bWVUb2tlbi5iaW5kKG51bGwsL15yZWN0LykpLGEuaWdub3JlKGEuY29uc3VtZVRva2VuLmJpbmQobnVsbCwvXlwoLykpLGEuY29uc3VtZVJlcGVhdGVkLmJpbmQobnVsbCxjLC9eLC8pLGEuaWdub3JlKGEuY29uc3VtZVRva2VuLmJpbmQobnVsbCwvXlwpLykpXSxiKTtyZXR1cm4gZCYmND09ZFswXS5sZW5ndGg/ZFswXTp2b2lkIDB9ZnVuY3Rpb24gZShiLGMpe3JldHVybiJhdXRvIj09Ynx8ImF1dG8iPT1jP1shMCwhMSxmdW5jdGlvbihkKXt2YXIgZT1kP2I6YztpZigiYXV0byI9PWUpcmV0dXJuImF1dG8iO3ZhciBmPWEubWVyZ2VEaW1lbnNpb25zKGUsZSk7cmV0dXJuIGZbMl0oZlswXSl9XTphLm1lcmdlRGltZW5zaW9ucyhiLGMpfWZ1bmN0aW9uIGYoYSl7cmV0dXJuInJlY3QoIithKyIpIn12YXIgZz1hLm1lcmdlV3JhcHBlZE5lc3RlZFJlcGVhdGVkLmJpbmQobnVsbCxmLGUsIiwgIik7YS5wYXJzZUJveD1kLGEubWVyZ2VCb3hlcz1nLGEuYWRkUHJvcGVydGllc0hhbmRsZXIoZCxnLFsiY2xpcCJdKX0oZCxmKSxmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGMoYSl7cmV0dXJuIGZ1bmN0aW9uKGIpe3ZhciBjPTA7cmV0dXJuIGEubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBhPT09az9iW2MrK106YX0pfX1mdW5jdGlvbiBkKGEpe3JldHVybiBhfWZ1bmN0aW9uIGUoYil7aWYoYj1iLnRvTG93ZXJDYXNlKCkudHJpbSgpLCJub25lIj09YilyZXR1cm5bXTtmb3IodmFyIGMsZD0vXHMqKFx3KylcKChbXildKilcKS9nLGU9W10sZj0wO2M9ZC5leGVjKGIpOyl7aWYoYy5pbmRleCE9ZilyZXR1cm47Zj1jLmluZGV4K2NbMF0ubGVuZ3RoO3ZhciBnPWNbMV0saD1uW2ddO2lmKCFoKXJldHVybjt2YXIgaT1jWzJdLnNwbGl0KCIsIiksaj1oWzBdO2lmKGoubGVuZ3RoPGkubGVuZ3RoKXJldHVybjtmb3IodmFyIGs9W10sbz0wO288ai5sZW5ndGg7bysrKXt2YXIgcCxxPWlbb10scj1qW29dO2lmKHA9cT97QTpmdW5jdGlvbihiKXtyZXR1cm4iMCI9PWIudHJpbSgpP206YS5wYXJzZUFuZ2xlKGIpfSxOOmEucGFyc2VOdW1iZXIsVDphLnBhcnNlTGVuZ3RoT3JQZXJjZW50LEw6YS5wYXJzZUxlbmd0aH1bci50b1VwcGVyQ2FzZSgpXShxKTp7YTptLG46a1swXSx0Omx9W3JdLHZvaWQgMD09PXApcmV0dXJuO2sucHVzaChwKX1pZihlLnB1c2goe3Q6ZyxkOmt9KSxkLmxhc3RJbmRleD09Yi5sZW5ndGgpcmV0dXJuIGV9fWZ1bmN0aW9uIGYoYSl7cmV0dXJuIGEudG9GaXhlZCg2KS5yZXBsYWNlKCIuMDAwMDAwIiwiIil9ZnVuY3Rpb24gZyhiLGMpe2lmKGIuZGVjb21wb3NpdGlvblBhaXIhPT1jKXtiLmRlY29tcG9zaXRpb25QYWlyPWM7dmFyIGQ9YS5tYWtlTWF0cml4RGVjb21wb3NpdGlvbihiKX1pZihjLmRlY29tcG9zaXRpb25QYWlyIT09Yil7Yy5kZWNvbXBvc2l0aW9uUGFpcj1iO3ZhciBlPWEubWFrZU1hdHJpeERlY29tcG9zaXRpb24oYyl9cmV0dXJuIG51bGw9PWRbMF18fG51bGw9PWVbMF0/W1shMV0sWyEwXSxmdW5jdGlvbihhKXtyZXR1cm4gYT9jWzBdLmQ6YlswXS5kfV06KGRbMF0ucHVzaCgwKSxlWzBdLnB1c2goMSksW2QsZSxmdW5jdGlvbihiKXt2YXIgYz1hLnF1YXQoZFswXVszXSxlWzBdWzNdLGJbNV0pLGc9YS5jb21wb3NlTWF0cml4KGJbMF0sYlsxXSxiWzJdLGMsYls0XSksaD1nLm1hcChmKS5qb2luKCIsIik7cmV0dXJuIGh9XSl9ZnVuY3Rpb24gaChhKXtyZXR1cm4gYS5yZXBsYWNlKC9beHldLywiIil9ZnVuY3Rpb24gaShhKXtyZXR1cm4gYS5yZXBsYWNlKC8oeHx5fHp8M2QpPyQvLCIzZCIpfWZ1bmN0aW9uIGooYixjKXt2YXIgZD1hLm1ha2VNYXRyaXhEZWNvbXBvc2l0aW9uJiYhMCxlPSExO2lmKCFiLmxlbmd0aHx8IWMubGVuZ3RoKXtiLmxlbmd0aHx8KGU9ITAsYj1jLGM9W10pO2Zvcih2YXIgZj0wO2Y8Yi5sZW5ndGg7ZisrKXt2YXIgaj1iW2ZdLnQsaz1iW2ZdLmQsbD0ic2NhbGUiPT1qLnN1YnN0cigwLDUpPzE6MDtjLnB1c2goe3Q6aixkOmsubWFwKGZ1bmN0aW9uKGEpe2lmKCJudW1iZXIiPT10eXBlb2YgYSlyZXR1cm4gbDt2YXIgYj17fTtmb3IodmFyIGMgaW4gYSliW2NdPWw7cmV0dXJuIGJ9KX0pfX12YXIgbT1mdW5jdGlvbihhLGIpe3JldHVybiJwZXJzcGVjdGl2ZSI9PWEmJiJwZXJzcGVjdGl2ZSI9PWJ8fCgibWF0cml4Ij09YXx8Im1hdHJpeDNkIj09YSkmJigibWF0cml4Ij09Ynx8Im1hdHJpeDNkIj09Yil9LG89W10scD1bXSxxPVtdO2lmKGIubGVuZ3RoIT1jLmxlbmd0aCl7aWYoIWQpcmV0dXJuO3ZhciByPWcoYixjKTtvPVtyWzBdXSxwPVtyWzFdXSxxPVtbIm1hdHJpeCIsW3JbMl1dXV19ZWxzZSBmb3IodmFyIGY9MDtmPGIubGVuZ3RoO2YrKyl7dmFyIGoscz1iW2ZdLnQsdD1jW2ZdLnQsdT1iW2ZdLmQsdj1jW2ZdLmQsdz1uW3NdLHg9blt0XTtpZihtKHMsdCkpe2lmKCFkKXJldHVybjt2YXIgcj1nKFtiW2ZdXSxbY1tmXV0pO28ucHVzaChyWzBdKSxwLnB1c2goclsxXSkscS5wdXNoKFsibWF0cml4IixbclsyXV1dKX1lbHNle2lmKHM9PXQpaj1zO2Vsc2UgaWYod1syXSYmeFsyXSYmaChzKT09aCh0KSlqPWgocyksdT13WzJdKHUpLHY9eFsyXSh2KTtlbHNle2lmKCF3WzFdfHwheFsxXXx8aShzKSE9aSh0KSl7aWYoIWQpcmV0dXJuO3ZhciByPWcoYixjKTtvPVtyWzBdXSxwPVtyWzFdXSxxPVtbIm1hdHJpeCIsW3JbMl1dXV07YnJlYWt9aj1pKHMpLHU9d1sxXSh1KSx2PXhbMV0odil9Zm9yKHZhciB5PVtdLHo9W10sQT1bXSxCPTA7Qjx1Lmxlbmd0aDtCKyspe3ZhciBDPSJudW1iZXIiPT10eXBlb2YgdVtCXT9hLm1lcmdlTnVtYmVyczphLm1lcmdlRGltZW5zaW9ucyxyPUModVtCXSx2W0JdKTt5W0JdPXJbMF0seltCXT1yWzFdLEEucHVzaChyWzJdKX1vLnB1c2goeSkscC5wdXNoKHopLHEucHVzaChbaixBXSl9fWlmKGUpe3ZhciBEPW87bz1wLHA9RH1yZXR1cm5bbyxwLGZ1bmN0aW9uKGEpe3JldHVybiBhLm1hcChmdW5jdGlvbihhLGIpe3ZhciBjPWEubWFwKGZ1bmN0aW9uKGEsYyl7cmV0dXJuIHFbYl1bMV1bY10oYSl9KS5qb2luKCIsIik7cmV0dXJuIm1hdHJpeCI9PXFbYl1bMF0mJjE2PT1jLnNwbGl0KCIsIikubGVuZ3RoJiYocVtiXVswXT0ibWF0cml4M2QiKSxxW2JdWzBdKyIoIitjKyIpIn0pLmpvaW4oIiAiKX1dfXZhciBrPW51bGwsbD17cHg6MH0sbT17ZGVnOjB9LG49e21hdHJpeDpbIk5OTk5OTiIsW2ssaywwLDAsayxrLDAsMCwwLDAsMSwwLGssaywwLDFdLGRdLG1hdHJpeDNkOlsiTk5OTk5OTk5OTk5OTk5OTiIsZF0scm90YXRlOlsiQSJdLHJvdGF0ZXg6WyJBIl0scm90YXRleTpbIkEiXSxyb3RhdGV6OlsiQSJdLHJvdGF0ZTNkOlsiTk5OQSJdLHBlcnNwZWN0aXZlOlsiTCJdLHNjYWxlOlsiTm4iLGMoW2ssaywxXSksZF0sc2NhbGV4OlsiTiIsYyhbaywxLDFdKSxjKFtrLDFdKV0sc2NhbGV5OlsiTiIsYyhbMSxrLDFdKSxjKFsxLGtdKV0sc2NhbGV6OlsiTiIsYyhbMSwxLGtdKV0sc2NhbGUzZDpbIk5OTiIsZF0sc2tldzpbIkFhIixudWxsLGRdLHNrZXd4OlsiQSIsbnVsbCxjKFtrLG1dKV0sc2tld3k6WyJBIixudWxsLGMoW20sa10pXSx0cmFuc2xhdGU6WyJUdCIsYyhbayxrLGxdKSxkXSx0cmFuc2xhdGV4OlsiVCIsYyhbayxsLGxdKSxjKFtrLGxdKV0sdHJhbnNsYXRleTpbIlQiLGMoW2wsayxsXSksYyhbbCxrXSldLHRyYW5zbGF0ZXo6WyJMIixjKFtsLGwsa10pXSx0cmFuc2xhdGUzZDpbIlRUTCIsZF19O2EuYWRkUHJvcGVydGllc0hhbmRsZXIoZSxqLFsidHJhbnNmb3JtIl0pfShkLGYpLGZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gYyhhLGIpe2IuY29uY2F0KFthXSkuZm9yRWFjaChmdW5jdGlvbihiKXtiIGluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZSYmKGRbYV09Yil9KX12YXIgZD17fTtjKCJ0cmFuc2Zvcm0iLFsid2Via2l0VHJhbnNmb3JtIiwibXNUcmFuc2Zvcm0iXSksYygidHJhbnNmb3JtT3JpZ2luIixbIndlYmtpdFRyYW5zZm9ybU9yaWdpbiJdKSxjKCJwZXJzcGVjdGl2ZSIsWyJ3ZWJraXRQZXJzcGVjdGl2ZSJdKSxjKCJwZXJzcGVjdGl2ZU9yaWdpbiIsWyJ3ZWJraXRQZXJzcGVjdGl2ZU9yaWdpbiJdKSxhLnByb3BlcnR5TmFtZT1mdW5jdGlvbihhKXtyZXR1cm4gZFthXXx8YX19KGQsZil9KCksIWZ1bmN0aW9uKCl7aWYodm9pZCAwPT09ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IikuYW5pbWF0ZShbXSkub25jYW5jZWwpe3ZhciBhO2lmKHdpbmRvdy5wZXJmb3JtYW5jZSYmcGVyZm9ybWFuY2Uubm93KXZhciBhPWZ1bmN0aW9uKCl7cmV0dXJuIHBlcmZvcm1hbmNlLm5vdygpfTtlbHNlIHZhciBhPWZ1bmN0aW9uKCl7cmV0dXJuIERhdGUubm93KCl9O3ZhciBiPWZ1bmN0aW9uKGEsYixjKXt0aGlzLnRhcmdldD1hLHRoaXMuY3VycmVudFRpbWU9Yix0aGlzLnRpbWVsaW5lVGltZT1jLHRoaXMudHlwZT0iY2FuY2VsIix0aGlzLmJ1YmJsZXM9ITEsdGhpcy5jYW5jZWxhYmxlPSExLHRoaXMuY3VycmVudFRhcmdldD1hLHRoaXMuZGVmYXVsdFByZXZlbnRlZD0hMSx0aGlzLmV2ZW50UGhhc2U9RXZlbnQuQVRfVEFSR0VULHRoaXMudGltZVN0YW1wPURhdGUubm93KCl9LGM9d2luZG93LkVsZW1lbnQucHJvdG90eXBlLmFuaW1hdGU7d2luZG93LkVsZW1lbnQucHJvdG90eXBlLmFuaW1hdGU9ZnVuY3Rpb24oZCxlKXt2YXIgZj1jLmNhbGwodGhpcyxkLGUpO2YuX2NhbmNlbEhhbmRsZXJzPVtdLGYub25jYW5jZWw9bnVsbDt2YXIgZz1mLmNhbmNlbDtmLmNhbmNlbD1mdW5jdGlvbigpe2cuY2FsbCh0aGlzKTt2YXIgYz1uZXcgYih0aGlzLG51bGwsYSgpKSxkPXRoaXMuX2NhbmNlbEhhbmRsZXJzLmNvbmNhdCh0aGlzLm9uY2FuY2VsP1t0aGlzLm9uY2FuY2VsXTpbXSk7c2V0VGltZW91dChmdW5jdGlvbigpe2QuZm9yRWFjaChmdW5jdGlvbihhKXthLmNhbGwoYy50YXJnZXQsYyl9KX0sMCl9O3ZhciBoPWYuYWRkRXZlbnRMaXN0ZW5lcjtmLmFkZEV2ZW50TGlzdGVuZXI9ZnVuY3Rpb24oYSxiKXsiZnVuY3Rpb24iPT10eXBlb2YgYiYmImNhbmNlbCI9PWE/dGhpcy5fY2FuY2VsSGFuZGxlcnMucHVzaChiKTpoLmNhbGwodGhpcyxhLGIpfTt2YXIgaT1mLnJlbW92ZUV2ZW50TGlzdGVuZXI7cmV0dXJuIGYucmVtb3ZlRXZlbnRMaXN0ZW5lcj1mdW5jdGlvbihhLGIpe2lmKCJjYW5jZWwiPT1hKXt2YXIgYz10aGlzLl9jYW5jZWxIYW5kbGVycy5pbmRleE9mKGIpO2M+PTAmJnRoaXMuX2NhbmNlbEhhbmRsZXJzLnNwbGljZShjLDEpfWVsc2UgaS5jYWxsKHRoaXMsYSxiKX0sZn19fSgpLGZ1bmN0aW9uKGEpe3ZhciBiPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxjPW51bGwsZD0hMTt0cnl7dmFyIGU9Z2V0Q29tcHV0ZWRTdHlsZShiKS5nZXRQcm9wZXJ0eVZhbHVlKCJvcGFjaXR5IiksZj0iMCI9PWU/IjEiOiIwIjtjPWIuYW5pbWF0ZSh7b3BhY2l0eTpbZixmXX0se2R1cmF0aW9uOjF9KSxjLmN1cnJlbnRUaW1lPTAsZD1nZXRDb21wdXRlZFN0eWxlKGIpLmdldFByb3BlcnR5VmFsdWUoIm9wYWNpdHkiKT09Zn1jYXRjaChnKXt9ZmluYWxseXtjJiZjLmNhbmNlbCgpfWlmKCFkKXt2YXIgaD13aW5kb3cuRWxlbWVudC5wcm90b3R5cGUuYW5pbWF0ZTt3aW5kb3cuRWxlbWVudC5wcm90b3R5cGUuYW5pbWF0ZT1mdW5jdGlvbihiLGMpe3JldHVybiB3aW5kb3cuU3ltYm9sJiZTeW1ib2wuaXRlcmF0b3ImJkFycmF5LnByb3RvdHlwZS5mcm9tJiZiW1N5bWJvbC5pdGVyYXRvcl0mJihiPUFycmF5LmZyb20oYikpLEFycmF5LmlzQXJyYXkoYil8fG51bGw9PT1ifHwoYj1hLmNvbnZlcnRUb0FycmF5Rm9ybShiKSksaC5jYWxsKHRoaXMsYixjKX19fShjKSwhZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIGQoYSl7dmFyIGI9d2luZG93LmRvY3VtZW50LnRpbWVsaW5lO2IuY3VycmVudFRpbWU9YSxiLl9kaXNjYXJkQW5pbWF0aW9ucygpLDA9PWIuX2FuaW1hdGlvbnMubGVuZ3RoP2Y9ITE6cmVxdWVzdEFuaW1hdGlvbkZyYW1lKGQpOwp9dmFyIGU9d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZTt3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lPWZ1bmN0aW9uKGEpe3JldHVybiBlKGZ1bmN0aW9uKGIpe3dpbmRvdy5kb2N1bWVudC50aW1lbGluZS5fdXBkYXRlQW5pbWF0aW9uc1Byb21pc2VzKCksYShiKSx3aW5kb3cuZG9jdW1lbnQudGltZWxpbmUuX3VwZGF0ZUFuaW1hdGlvbnNQcm9taXNlcygpfSl9LGIuQW5pbWF0aW9uVGltZWxpbmU9ZnVuY3Rpb24oKXt0aGlzLl9hbmltYXRpb25zPVtdLHRoaXMuY3VycmVudFRpbWU9dm9pZCAwfSxiLkFuaW1hdGlvblRpbWVsaW5lLnByb3RvdHlwZT17Z2V0QW5pbWF0aW9uczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kaXNjYXJkQW5pbWF0aW9ucygpLHRoaXMuX2FuaW1hdGlvbnMuc2xpY2UoKX0sX3VwZGF0ZUFuaW1hdGlvbnNQcm9taXNlczpmdW5jdGlvbigpe2IuYW5pbWF0aW9uc1dpdGhQcm9taXNlcz1iLmFuaW1hdGlvbnNXaXRoUHJvbWlzZXMuZmlsdGVyKGZ1bmN0aW9uKGEpe3JldHVybiBhLl91cGRhdGVQcm9taXNlcygpfSl9LF9kaXNjYXJkQW5pbWF0aW9uczpmdW5jdGlvbigpe3RoaXMuX3VwZGF0ZUFuaW1hdGlvbnNQcm9taXNlcygpLHRoaXMuX2FuaW1hdGlvbnM9dGhpcy5fYW5pbWF0aW9ucy5maWx0ZXIoZnVuY3Rpb24oYSl7cmV0dXJuImZpbmlzaGVkIiE9YS5wbGF5U3RhdGUmJiJpZGxlIiE9YS5wbGF5U3RhdGV9KX0sX3BsYXk6ZnVuY3Rpb24oYSl7dmFyIGM9bmV3IGIuQW5pbWF0aW9uKGEsdGhpcyk7cmV0dXJuIHRoaXMuX2FuaW1hdGlvbnMucHVzaChjKSxiLnJlc3RhcnRXZWJBbmltYXRpb25zTmV4dFRpY2soKSxjLl91cGRhdGVQcm9taXNlcygpLGMuX2FuaW1hdGlvbi5wbGF5KCksYy5fdXBkYXRlUHJvbWlzZXMoKSxjfSxwbGF5OmZ1bmN0aW9uKGEpe3JldHVybiBhJiZhLnJlbW92ZSgpLHRoaXMuX3BsYXkoYSl9fTt2YXIgZj0hMTtiLnJlc3RhcnRXZWJBbmltYXRpb25zTmV4dFRpY2s9ZnVuY3Rpb24oKXtmfHwoZj0hMCxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZCkpfTt2YXIgZz1uZXcgYi5BbmltYXRpb25UaW1lbGluZTtiLnRpbWVsaW5lPWc7dHJ5e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh3aW5kb3cuZG9jdW1lbnQsInRpbWVsaW5lIix7Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBnfX0pfWNhdGNoKGgpe310cnl7d2luZG93LmRvY3VtZW50LnRpbWVsaW5lPWd9Y2F0Y2goaCl7fX0oYyxlLGYpLGZ1bmN0aW9uKGEsYixjKXtiLmFuaW1hdGlvbnNXaXRoUHJvbWlzZXM9W10sYi5BbmltYXRpb249ZnVuY3Rpb24oYixjKXtpZih0aGlzLmlkPSIiLGImJmIuX2lkJiYodGhpcy5pZD1iLl9pZCksdGhpcy5lZmZlY3Q9YixiJiYoYi5fYW5pbWF0aW9uPXRoaXMpLCFjKXRocm93IG5ldyBFcnJvcigiQW5pbWF0aW9uIHdpdGggbnVsbCB0aW1lbGluZSBpcyBub3Qgc3VwcG9ydGVkIik7dGhpcy5fdGltZWxpbmU9Yyx0aGlzLl9zZXF1ZW5jZU51bWJlcj1hLnNlcXVlbmNlTnVtYmVyKyssdGhpcy5faG9sZFRpbWU9MCx0aGlzLl9wYXVzZWQ9ITEsdGhpcy5faXNHcm91cD0hMSx0aGlzLl9hbmltYXRpb249bnVsbCx0aGlzLl9jaGlsZEFuaW1hdGlvbnM9W10sdGhpcy5fY2FsbGJhY2s9bnVsbCx0aGlzLl9vbGRQbGF5U3RhdGU9ImlkbGUiLHRoaXMuX3JlYnVpbGRVbmRlcmx5aW5nQW5pbWF0aW9uKCksdGhpcy5fYW5pbWF0aW9uLmNhbmNlbCgpLHRoaXMuX3VwZGF0ZVByb21pc2VzKCl9LGIuQW5pbWF0aW9uLnByb3RvdHlwZT17X3VwZGF0ZVByb21pc2VzOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5fb2xkUGxheVN0YXRlLGI9dGhpcy5wbGF5U3RhdGU7cmV0dXJuIHRoaXMuX3JlYWR5UHJvbWlzZSYmYiE9PWEmJigiaWRsZSI9PWI/KHRoaXMuX3JlamVjdFJlYWR5UHJvbWlzZSgpLHRoaXMuX3JlYWR5UHJvbWlzZT12b2lkIDApOiJwZW5kaW5nIj09YT90aGlzLl9yZXNvbHZlUmVhZHlQcm9taXNlKCk6InBlbmRpbmciPT1iJiYodGhpcy5fcmVhZHlQcm9taXNlPXZvaWQgMCkpLHRoaXMuX2ZpbmlzaGVkUHJvbWlzZSYmYiE9PWEmJigiaWRsZSI9PWI/KHRoaXMuX3JlamVjdEZpbmlzaGVkUHJvbWlzZSgpLHRoaXMuX2ZpbmlzaGVkUHJvbWlzZT12b2lkIDApOiJmaW5pc2hlZCI9PWI/dGhpcy5fcmVzb2x2ZUZpbmlzaGVkUHJvbWlzZSgpOiJmaW5pc2hlZCI9PWEmJih0aGlzLl9maW5pc2hlZFByb21pc2U9dm9pZCAwKSksdGhpcy5fb2xkUGxheVN0YXRlPXRoaXMucGxheVN0YXRlLHRoaXMuX3JlYWR5UHJvbWlzZXx8dGhpcy5fZmluaXNoZWRQcm9taXNlfSxfcmVidWlsZFVuZGVybHlpbmdBbmltYXRpb246ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVQcm9taXNlcygpO3ZhciBhLGMsZCxlLGY9ISF0aGlzLl9hbmltYXRpb247ZiYmKGE9dGhpcy5wbGF5YmFja1JhdGUsYz10aGlzLl9wYXVzZWQsZD10aGlzLnN0YXJ0VGltZSxlPXRoaXMuY3VycmVudFRpbWUsdGhpcy5fYW5pbWF0aW9uLmNhbmNlbCgpLHRoaXMuX2FuaW1hdGlvbi5fd3JhcHBlcj1udWxsLHRoaXMuX2FuaW1hdGlvbj1udWxsKSwoIXRoaXMuZWZmZWN0fHx0aGlzLmVmZmVjdCBpbnN0YW5jZW9mIHdpbmRvdy5LZXlmcmFtZUVmZmVjdCkmJih0aGlzLl9hbmltYXRpb249Yi5uZXdVbmRlcmx5aW5nQW5pbWF0aW9uRm9yS2V5ZnJhbWVFZmZlY3QodGhpcy5lZmZlY3QpLGIuYmluZEFuaW1hdGlvbkZvcktleWZyYW1lRWZmZWN0KHRoaXMpKSwodGhpcy5lZmZlY3QgaW5zdGFuY2VvZiB3aW5kb3cuU2VxdWVuY2VFZmZlY3R8fHRoaXMuZWZmZWN0IGluc3RhbmNlb2Ygd2luZG93Lkdyb3VwRWZmZWN0KSYmKHRoaXMuX2FuaW1hdGlvbj1iLm5ld1VuZGVybHlpbmdBbmltYXRpb25Gb3JHcm91cCh0aGlzLmVmZmVjdCksYi5iaW5kQW5pbWF0aW9uRm9yR3JvdXAodGhpcykpLHRoaXMuZWZmZWN0JiZ0aGlzLmVmZmVjdC5fb25zYW1wbGUmJmIuYmluZEFuaW1hdGlvbkZvckN1c3RvbUVmZmVjdCh0aGlzKSxmJiYoMSE9YSYmKHRoaXMucGxheWJhY2tSYXRlPWEpLG51bGwhPT1kP3RoaXMuc3RhcnRUaW1lPWQ6bnVsbCE9PWU/dGhpcy5jdXJyZW50VGltZT1lOm51bGwhPT10aGlzLl9ob2xkVGltZSYmKHRoaXMuY3VycmVudFRpbWU9dGhpcy5faG9sZFRpbWUpLGMmJnRoaXMucGF1c2UoKSksdGhpcy5fdXBkYXRlUHJvbWlzZXMoKX0sX3VwZGF0ZUNoaWxkcmVuOmZ1bmN0aW9uKCl7aWYodGhpcy5lZmZlY3QmJiJpZGxlIiE9dGhpcy5wbGF5U3RhdGUpe3ZhciBhPXRoaXMuZWZmZWN0Ll90aW1pbmcuZGVsYXk7dGhpcy5fY2hpbGRBbmltYXRpb25zLmZvckVhY2goZnVuY3Rpb24oYyl7dGhpcy5fYXJyYW5nZUNoaWxkcmVuKGMsYSksdGhpcy5lZmZlY3QgaW5zdGFuY2VvZiB3aW5kb3cuU2VxdWVuY2VFZmZlY3QmJihhKz1iLmdyb3VwQ2hpbGREdXJhdGlvbihjLmVmZmVjdCkpfS5iaW5kKHRoaXMpKX19LF9zZXRFeHRlcm5hbEFuaW1hdGlvbjpmdW5jdGlvbihhKXtpZih0aGlzLmVmZmVjdCYmdGhpcy5faXNHcm91cClmb3IodmFyIGI9MDtiPHRoaXMuZWZmZWN0LmNoaWxkcmVuLmxlbmd0aDtiKyspdGhpcy5lZmZlY3QuY2hpbGRyZW5bYl0uX2FuaW1hdGlvbj1hLHRoaXMuX2NoaWxkQW5pbWF0aW9uc1tiXS5fc2V0RXh0ZXJuYWxBbmltYXRpb24oYSl9LF9jb25zdHJ1Y3RDaGlsZEFuaW1hdGlvbnM6ZnVuY3Rpb24oKXtpZih0aGlzLmVmZmVjdCYmdGhpcy5faXNHcm91cCl7dmFyIGE9dGhpcy5lZmZlY3QuX3RpbWluZy5kZWxheTt0aGlzLl9yZW1vdmVDaGlsZEFuaW1hdGlvbnMoKSx0aGlzLmVmZmVjdC5jaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uKGMpe3ZhciBkPXdpbmRvdy5kb2N1bWVudC50aW1lbGluZS5fcGxheShjKTt0aGlzLl9jaGlsZEFuaW1hdGlvbnMucHVzaChkKSxkLnBsYXliYWNrUmF0ZT10aGlzLnBsYXliYWNrUmF0ZSx0aGlzLl9wYXVzZWQmJmQucGF1c2UoKSxjLl9hbmltYXRpb249dGhpcy5lZmZlY3QuX2FuaW1hdGlvbix0aGlzLl9hcnJhbmdlQ2hpbGRyZW4oZCxhKSx0aGlzLmVmZmVjdCBpbnN0YW5jZW9mIHdpbmRvdy5TZXF1ZW5jZUVmZmVjdCYmKGErPWIuZ3JvdXBDaGlsZER1cmF0aW9uKGMpKX0uYmluZCh0aGlzKSl9fSxfYXJyYW5nZUNoaWxkcmVuOmZ1bmN0aW9uKGEsYil7bnVsbD09PXRoaXMuc3RhcnRUaW1lP2EuY3VycmVudFRpbWU9dGhpcy5jdXJyZW50VGltZS1iL3RoaXMucGxheWJhY2tSYXRlOmEuc3RhcnRUaW1lIT09dGhpcy5zdGFydFRpbWUrYi90aGlzLnBsYXliYWNrUmF0ZSYmKGEuc3RhcnRUaW1lPXRoaXMuc3RhcnRUaW1lK2IvdGhpcy5wbGF5YmFja1JhdGUpfSxnZXQgdGltZWxpbmUoKXtyZXR1cm4gdGhpcy5fdGltZWxpbmV9LGdldCBwbGF5U3RhdGUoKXtyZXR1cm4gdGhpcy5fYW5pbWF0aW9uP3RoaXMuX2FuaW1hdGlvbi5wbGF5U3RhdGU6ImlkbGUifSxnZXQgZmluaXNoZWQoKXtyZXR1cm4gd2luZG93LlByb21pc2U/KHRoaXMuX2ZpbmlzaGVkUHJvbWlzZXx8KC0xPT1iLmFuaW1hdGlvbnNXaXRoUHJvbWlzZXMuaW5kZXhPZih0aGlzKSYmYi5hbmltYXRpb25zV2l0aFByb21pc2VzLnB1c2godGhpcyksdGhpcy5fZmluaXNoZWRQcm9taXNlPW5ldyBQcm9taXNlKGZ1bmN0aW9uKGEsYil7dGhpcy5fcmVzb2x2ZUZpbmlzaGVkUHJvbWlzZT1mdW5jdGlvbigpe2EodGhpcyl9LHRoaXMuX3JlamVjdEZpbmlzaGVkUHJvbWlzZT1mdW5jdGlvbigpe2Ioe3R5cGU6RE9NRXhjZXB0aW9uLkFCT1JUX0VSUixuYW1lOiJBYm9ydEVycm9yIn0pfX0uYmluZCh0aGlzKSksImZpbmlzaGVkIj09dGhpcy5wbGF5U3RhdGUmJnRoaXMuX3Jlc29sdmVGaW5pc2hlZFByb21pc2UoKSksdGhpcy5fZmluaXNoZWRQcm9taXNlKTooY29uc29sZS53YXJuKCJBbmltYXRpb24gUHJvbWlzZXMgcmVxdWlyZSBKYXZhU2NyaXB0IFByb21pc2UgY29uc3RydWN0b3IiKSxudWxsKX0sZ2V0IHJlYWR5KCl7cmV0dXJuIHdpbmRvdy5Qcm9taXNlPyh0aGlzLl9yZWFkeVByb21pc2V8fCgtMT09Yi5hbmltYXRpb25zV2l0aFByb21pc2VzLmluZGV4T2YodGhpcykmJmIuYW5pbWF0aW9uc1dpdGhQcm9taXNlcy5wdXNoKHRoaXMpLHRoaXMuX3JlYWR5UHJvbWlzZT1uZXcgUHJvbWlzZShmdW5jdGlvbihhLGIpe3RoaXMuX3Jlc29sdmVSZWFkeVByb21pc2U9ZnVuY3Rpb24oKXthKHRoaXMpfSx0aGlzLl9yZWplY3RSZWFkeVByb21pc2U9ZnVuY3Rpb24oKXtiKHt0eXBlOkRPTUV4Y2VwdGlvbi5BQk9SVF9FUlIsbmFtZToiQWJvcnRFcnJvciJ9KX19LmJpbmQodGhpcykpLCJwZW5kaW5nIiE9PXRoaXMucGxheVN0YXRlJiZ0aGlzLl9yZXNvbHZlUmVhZHlQcm9taXNlKCkpLHRoaXMuX3JlYWR5UHJvbWlzZSk6KGNvbnNvbGUud2FybigiQW5pbWF0aW9uIFByb21pc2VzIHJlcXVpcmUgSmF2YVNjcmlwdCBQcm9taXNlIGNvbnN0cnVjdG9yIiksbnVsbCl9LGdldCBvbmZpbmlzaCgpe3JldHVybiB0aGlzLl9hbmltYXRpb24ub25maW5pc2h9LHNldCBvbmZpbmlzaChhKXsiZnVuY3Rpb24iPT10eXBlb2YgYT90aGlzLl9hbmltYXRpb24ub25maW5pc2g9ZnVuY3Rpb24oYil7Yi50YXJnZXQ9dGhpcyxhLmNhbGwodGhpcyxiKX0uYmluZCh0aGlzKTp0aGlzLl9hbmltYXRpb24ub25maW5pc2g9YX0sZ2V0IG9uY2FuY2VsKCl7cmV0dXJuIHRoaXMuX2FuaW1hdGlvbi5vbmNhbmNlbH0sc2V0IG9uY2FuY2VsKGEpeyJmdW5jdGlvbiI9PXR5cGVvZiBhP3RoaXMuX2FuaW1hdGlvbi5vbmNhbmNlbD1mdW5jdGlvbihiKXtiLnRhcmdldD10aGlzLGEuY2FsbCh0aGlzLGIpfS5iaW5kKHRoaXMpOnRoaXMuX2FuaW1hdGlvbi5vbmNhbmNlbD1hfSxnZXQgY3VycmVudFRpbWUoKXt0aGlzLl91cGRhdGVQcm9taXNlcygpO3ZhciBhPXRoaXMuX2FuaW1hdGlvbi5jdXJyZW50VGltZTtyZXR1cm4gdGhpcy5fdXBkYXRlUHJvbWlzZXMoKSxhfSxzZXQgY3VycmVudFRpbWUoYSl7dGhpcy5fdXBkYXRlUHJvbWlzZXMoKSx0aGlzLl9hbmltYXRpb24uY3VycmVudFRpbWU9aXNGaW5pdGUoYSk/YTpNYXRoLnNpZ24oYSkqTnVtYmVyLk1BWF9WQUxVRSx0aGlzLl9yZWdpc3RlcigpLHRoaXMuX2ZvckVhY2hDaGlsZChmdW5jdGlvbihiLGMpe2IuY3VycmVudFRpbWU9YS1jfSksdGhpcy5fdXBkYXRlUHJvbWlzZXMoKX0sZ2V0IHN0YXJ0VGltZSgpe3JldHVybiB0aGlzLl9hbmltYXRpb24uc3RhcnRUaW1lfSxzZXQgc3RhcnRUaW1lKGEpe3RoaXMuX3VwZGF0ZVByb21pc2VzKCksdGhpcy5fYW5pbWF0aW9uLnN0YXJ0VGltZT1pc0Zpbml0ZShhKT9hOk1hdGguc2lnbihhKSpOdW1iZXIuTUFYX1ZBTFVFLHRoaXMuX3JlZ2lzdGVyKCksdGhpcy5fZm9yRWFjaENoaWxkKGZ1bmN0aW9uKGIsYyl7Yi5zdGFydFRpbWU9YStjfSksdGhpcy5fdXBkYXRlUHJvbWlzZXMoKX0sZ2V0IHBsYXliYWNrUmF0ZSgpe3JldHVybiB0aGlzLl9hbmltYXRpb24ucGxheWJhY2tSYXRlfSxzZXQgcGxheWJhY2tSYXRlKGEpe3RoaXMuX3VwZGF0ZVByb21pc2VzKCk7dmFyIGI9dGhpcy5jdXJyZW50VGltZTt0aGlzLl9hbmltYXRpb24ucGxheWJhY2tSYXRlPWEsdGhpcy5fZm9yRWFjaENoaWxkKGZ1bmN0aW9uKGIpe2IucGxheWJhY2tSYXRlPWF9KSwicGF1c2VkIiE9dGhpcy5wbGF5U3RhdGUmJiJpZGxlIiE9dGhpcy5wbGF5U3RhdGUmJnRoaXMucGxheSgpLG51bGwhPT1iJiYodGhpcy5jdXJyZW50VGltZT1iKSx0aGlzLl91cGRhdGVQcm9taXNlcygpfSxwbGF5OmZ1bmN0aW9uKCl7dGhpcy5fdXBkYXRlUHJvbWlzZXMoKSx0aGlzLl9wYXVzZWQ9ITEsdGhpcy5fYW5pbWF0aW9uLnBsYXkoKSwtMT09dGhpcy5fdGltZWxpbmUuX2FuaW1hdGlvbnMuaW5kZXhPZih0aGlzKSYmdGhpcy5fdGltZWxpbmUuX2FuaW1hdGlvbnMucHVzaCh0aGlzKSx0aGlzLl9yZWdpc3RlcigpLGIuYXdhaXRTdGFydFRpbWUodGhpcyksdGhpcy5fZm9yRWFjaENoaWxkKGZ1bmN0aW9uKGEpe3ZhciBiPWEuY3VycmVudFRpbWU7YS5wbGF5KCksYS5jdXJyZW50VGltZT1ifSksdGhpcy5fdXBkYXRlUHJvbWlzZXMoKX0scGF1c2U6ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVQcm9taXNlcygpLHRoaXMuY3VycmVudFRpbWUmJih0aGlzLl9ob2xkVGltZT10aGlzLmN1cnJlbnRUaW1lKSx0aGlzLl9hbmltYXRpb24ucGF1c2UoKSx0aGlzLl9yZWdpc3RlcigpLHRoaXMuX2ZvckVhY2hDaGlsZChmdW5jdGlvbihhKXthLnBhdXNlKCl9KSx0aGlzLl9wYXVzZWQ9ITAsdGhpcy5fdXBkYXRlUHJvbWlzZXMoKX0sZmluaXNoOmZ1bmN0aW9uKCl7dGhpcy5fdXBkYXRlUHJvbWlzZXMoKSx0aGlzLl9hbmltYXRpb24uZmluaXNoKCksdGhpcy5fcmVnaXN0ZXIoKSx0aGlzLl91cGRhdGVQcm9taXNlcygpfSxjYW5jZWw6ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVQcm9taXNlcygpLHRoaXMuX2FuaW1hdGlvbi5jYW5jZWwoKSx0aGlzLl9yZWdpc3RlcigpLHRoaXMuX3JlbW92ZUNoaWxkQW5pbWF0aW9ucygpLHRoaXMuX3VwZGF0ZVByb21pc2VzKCl9LHJldmVyc2U6ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVQcm9taXNlcygpO3ZhciBhPXRoaXMuY3VycmVudFRpbWU7dGhpcy5fYW5pbWF0aW9uLnJldmVyc2UoKSx0aGlzLl9mb3JFYWNoQ2hpbGQoZnVuY3Rpb24oYSl7YS5yZXZlcnNlKCl9KSxudWxsIT09YSYmKHRoaXMuY3VycmVudFRpbWU9YSksdGhpcy5fdXBkYXRlUHJvbWlzZXMoKX0sYWRkRXZlbnRMaXN0ZW5lcjpmdW5jdGlvbihhLGIpe3ZhciBjPWI7ImZ1bmN0aW9uIj09dHlwZW9mIGImJihjPWZ1bmN0aW9uKGEpe2EudGFyZ2V0PXRoaXMsYi5jYWxsKHRoaXMsYSl9LmJpbmQodGhpcyksYi5fd3JhcHBlcj1jKSx0aGlzLl9hbmltYXRpb24uYWRkRXZlbnRMaXN0ZW5lcihhLGMpfSxyZW1vdmVFdmVudExpc3RlbmVyOmZ1bmN0aW9uKGEsYil7dGhpcy5fYW5pbWF0aW9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoYSxiJiZiLl93cmFwcGVyfHxiKX0sX3JlbW92ZUNoaWxkQW5pbWF0aW9uczpmdW5jdGlvbigpe2Zvcig7dGhpcy5fY2hpbGRBbmltYXRpb25zLmxlbmd0aDspdGhpcy5fY2hpbGRBbmltYXRpb25zLnBvcCgpLmNhbmNlbCgpfSxfZm9yRWFjaENoaWxkOmZ1bmN0aW9uKGIpe3ZhciBjPTA7aWYodGhpcy5lZmZlY3QuY2hpbGRyZW4mJnRoaXMuX2NoaWxkQW5pbWF0aW9ucy5sZW5ndGg8dGhpcy5lZmZlY3QuY2hpbGRyZW4ubGVuZ3RoJiZ0aGlzLl9jb25zdHJ1Y3RDaGlsZEFuaW1hdGlvbnMoKSx0aGlzLl9jaGlsZEFuaW1hdGlvbnMuZm9yRWFjaChmdW5jdGlvbihhKXtiLmNhbGwodGhpcyxhLGMpLHRoaXMuZWZmZWN0IGluc3RhbmNlb2Ygd2luZG93LlNlcXVlbmNlRWZmZWN0JiYoYys9YS5lZmZlY3QuYWN0aXZlRHVyYXRpb24pfS5iaW5kKHRoaXMpKSwicGVuZGluZyIhPXRoaXMucGxheVN0YXRlKXt2YXIgZD10aGlzLmVmZmVjdC5fdGltaW5nLGU9dGhpcy5jdXJyZW50VGltZTtudWxsIT09ZSYmKGU9YS5jYWxjdWxhdGVUaW1lRnJhY3Rpb24oYS5jYWxjdWxhdGVBY3RpdmVEdXJhdGlvbihkKSxlLGQpKSwobnVsbD09ZXx8aXNOYU4oZSkpJiZ0aGlzLl9yZW1vdmVDaGlsZEFuaW1hdGlvbnMoKX19fSx3aW5kb3cuQW5pbWF0aW9uPWIuQW5pbWF0aW9ufShjLGUsZiksZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIGQoYil7dGhpcy5fZnJhbWVzPWEubm9ybWFsaXplS2V5ZnJhbWVzKGIpfWZ1bmN0aW9uIGUoKXtmb3IodmFyIGE9ITE7aS5sZW5ndGg7KXt2YXIgYj1pLnNoaWZ0KCk7Yi5fdXBkYXRlQ2hpbGRyZW4oKSxhPSEwfXJldHVybiBhfXZhciBmPWZ1bmN0aW9uKGEpe2lmKGEuX2FuaW1hdGlvbj12b2lkIDAsYSBpbnN0YW5jZW9mIHdpbmRvdy5TZXF1ZW5jZUVmZmVjdHx8YSBpbnN0YW5jZW9mIHdpbmRvdy5Hcm91cEVmZmVjdClmb3IodmFyIGI9MDtiPGEuY2hpbGRyZW4ubGVuZ3RoO2IrKylmKGEuY2hpbGRyZW5bYl0pfTtiLnJlbW92ZU11bHRpPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj1bXSxjPTA7YzxhLmxlbmd0aDtjKyspe3ZhciBkPWFbY107ZC5fcGFyZW50PygtMT09Yi5pbmRleE9mKGQuX3BhcmVudCkmJmIucHVzaChkLl9wYXJlbnQpLGQuX3BhcmVudC5jaGlsZHJlbi5zcGxpY2UoZC5fcGFyZW50LmNoaWxkcmVuLmluZGV4T2YoZCksMSksZC5fcGFyZW50PW51bGwsZihkKSk6ZC5fYW5pbWF0aW9uJiZkLl9hbmltYXRpb24uZWZmZWN0PT1kJiYoZC5fYW5pbWF0aW9uLmNhbmNlbCgpLGQuX2FuaW1hdGlvbi5lZmZlY3Q9bmV3IEtleWZyYW1lRWZmZWN0KG51bGwsW10pLGQuX2FuaW1hdGlvbi5fY2FsbGJhY2smJihkLl9hbmltYXRpb24uX2NhbGxiYWNrLl9hbmltYXRpb249bnVsbCksZC5fYW5pbWF0aW9uLl9yZWJ1aWxkVW5kZXJseWluZ0FuaW1hdGlvbigpLGYoZCkpfWZvcihjPTA7YzxiLmxlbmd0aDtjKyspYltjXS5fcmVidWlsZCgpfSxiLktleWZyYW1lRWZmZWN0PWZ1bmN0aW9uKGIsYyxlLGYpe3JldHVybiB0aGlzLnRhcmdldD1iLHRoaXMuX3BhcmVudD1udWxsLGU9YS5udW1lcmljVGltaW5nVG9PYmplY3QoZSksdGhpcy5fdGltaW5nSW5wdXQ9YS5jbG9uZVRpbWluZ0lucHV0KGUpLHRoaXMuX3RpbWluZz1hLm5vcm1hbGl6ZVRpbWluZ0lucHV0KGUpLHRoaXMudGltaW5nPWEubWFrZVRpbWluZyhlLCExLHRoaXMpLHRoaXMudGltaW5nLl9lZmZlY3Q9dGhpcywiZnVuY3Rpb24iPT10eXBlb2YgYz8oYS5kZXByZWNhdGVkKCJDdXN0b20gS2V5ZnJhbWVFZmZlY3QiLCIyMDE1LTA2LTIyIiwiVXNlIEtleWZyYW1lRWZmZWN0Lm9uc2FtcGxlIGluc3RlYWQuIiksdGhpcy5fbm9ybWFsaXplZEtleWZyYW1lcz1jKTp0aGlzLl9ub3JtYWxpemVkS2V5ZnJhbWVzPW5ldyBkKGMpLHRoaXMuX2tleWZyYW1lcz1jLHRoaXMuYWN0aXZlRHVyYXRpb249YS5jYWxjdWxhdGVBY3RpdmVEdXJhdGlvbih0aGlzLl90aW1pbmcpLHRoaXMuX2lkPWYsdGhpc30sYi5LZXlmcmFtZUVmZmVjdC5wcm90b3R5cGU9e2dldEZyYW1lczpmdW5jdGlvbigpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLl9ub3JtYWxpemVkS2V5ZnJhbWVzP3RoaXMuX25vcm1hbGl6ZWRLZXlmcmFtZXM6dGhpcy5fbm9ybWFsaXplZEtleWZyYW1lcy5fZnJhbWVzfSxzZXQgb25zYW1wbGUoYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMuZ2V0RnJhbWVzKCkpdGhyb3cgbmV3IEVycm9yKCJTZXR0aW5nIG9uc2FtcGxlIG9uIGN1c3RvbSBlZmZlY3QgS2V5ZnJhbWVFZmZlY3QgaXMgbm90IHN1cHBvcnRlZC4iKTt0aGlzLl9vbnNhbXBsZT1hLHRoaXMuX2FuaW1hdGlvbiYmdGhpcy5fYW5pbWF0aW9uLl9yZWJ1aWxkVW5kZXJseWluZ0FuaW1hdGlvbigpfSxnZXQgcGFyZW50KCl7cmV0dXJuIHRoaXMuX3BhcmVudH0sY2xvbmU6ZnVuY3Rpb24oKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5nZXRGcmFtZXMoKSl0aHJvdyBuZXcgRXJyb3IoIkNsb25pbmcgY3VzdG9tIGVmZmVjdHMgaXMgbm90IHN1cHBvcnRlZC4iKTt2YXIgYj1uZXcgS2V5ZnJhbWVFZmZlY3QodGhpcy50YXJnZXQsW10sYS5jbG9uZVRpbWluZ0lucHV0KHRoaXMuX3RpbWluZ0lucHV0KSx0aGlzLl9pZCk7cmV0dXJuIGIuX25vcm1hbGl6ZWRLZXlmcmFtZXM9dGhpcy5fbm9ybWFsaXplZEtleWZyYW1lcyxiLl9rZXlmcmFtZXM9dGhpcy5fa2V5ZnJhbWVzLGJ9LHJlbW92ZTpmdW5jdGlvbigpe2IucmVtb3ZlTXVsdGkoW3RoaXNdKX19O3ZhciBnPUVsZW1lbnQucHJvdG90eXBlLmFuaW1hdGU7RWxlbWVudC5wcm90b3R5cGUuYW5pbWF0ZT1mdW5jdGlvbihhLGMpe3ZhciBkPSIiO3JldHVybiBjJiZjLmlkJiYoZD1jLmlkKSxiLnRpbWVsaW5lLl9wbGF5KG5ldyBiLktleWZyYW1lRWZmZWN0KHRoaXMsYSxjLGQpKX07dmFyIGg9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiwiZGl2Iik7Yi5uZXdVbmRlcmx5aW5nQW5pbWF0aW9uRm9yS2V5ZnJhbWVFZmZlY3Q9ZnVuY3Rpb24oYSl7aWYoYSl7dmFyIGI9YS50YXJnZXR8fGgsYz1hLl9rZXlmcmFtZXM7ImZ1bmN0aW9uIj09dHlwZW9mIGMmJihjPVtdKTt2YXIgZD1hLl90aW1pbmdJbnB1dDtkLmlkPWEuX2lkfWVsc2UgdmFyIGI9aCxjPVtdLGQ9MDtyZXR1cm4gZy5hcHBseShiLFtjLGRdKX0sYi5iaW5kQW5pbWF0aW9uRm9yS2V5ZnJhbWVFZmZlY3Q9ZnVuY3Rpb24oYSl7YS5lZmZlY3QmJiJmdW5jdGlvbiI9PXR5cGVvZiBhLmVmZmVjdC5fbm9ybWFsaXplZEtleWZyYW1lcyYmYi5iaW5kQW5pbWF0aW9uRm9yQ3VzdG9tRWZmZWN0KGEpfTt2YXIgaT1bXTtiLmF3YWl0U3RhcnRUaW1lPWZ1bmN0aW9uKGEpe251bGw9PT1hLnN0YXJ0VGltZSYmYS5faXNHcm91cCYmKDA9PWkubGVuZ3RoJiZyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZSksaS5wdXNoKGEpKX07dmFyIGo9d2luZG93LmdldENvbXB1dGVkU3R5bGU7T2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdywiZ2V0Q29tcHV0ZWRTdHlsZSIse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHZhbHVlOmZ1bmN0aW9uKCl7d2luZG93LmRvY3VtZW50LnRpbWVsaW5lLl91cGRhdGVBbmltYXRpb25zUHJvbWlzZXMoKTt2YXIgYT1qLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZSgpJiYoYT1qLmFwcGx5KHRoaXMsYXJndW1lbnRzKSksd2luZG93LmRvY3VtZW50LnRpbWVsaW5lLl91cGRhdGVBbmltYXRpb25zUHJvbWlzZXMoKSxhfX0pLHdpbmRvdy5LZXlmcmFtZUVmZmVjdD1iLktleWZyYW1lRWZmZWN0LHdpbmRvdy5FbGVtZW50LnByb3RvdHlwZS5nZXRBbmltYXRpb25zPWZ1bmN0aW9uKCl7cmV0dXJuIGRvY3VtZW50LnRpbWVsaW5lLmdldEFuaW1hdGlvbnMoKS5maWx0ZXIoZnVuY3Rpb24oYSl7cmV0dXJuIG51bGwhPT1hLmVmZmVjdCYmYS5lZmZlY3QudGFyZ2V0PT10aGlzfS5iaW5kKHRoaXMpKX19KGMsZSxmKSxmdW5jdGlvbihhLGIsYyl7ZnVuY3Rpb24gZChhKXthLl9yZWdpc3RlcmVkfHwoYS5fcmVnaXN0ZXJlZD0hMCxnLnB1c2goYSksaHx8KGg9ITAscmVxdWVzdEFuaW1hdGlvbkZyYW1lKGUpKSl9ZnVuY3Rpb24gZShhKXt2YXIgYj1nO2c9W10sYi5zb3J0KGZ1bmN0aW9uKGEsYil7cmV0dXJuIGEuX3NlcXVlbmNlTnVtYmVyLWIuX3NlcXVlbmNlTnVtYmVyfSksYj1iLmZpbHRlcihmdW5jdGlvbihhKXthKCk7dmFyIGI9YS5fYW5pbWF0aW9uP2EuX2FuaW1hdGlvbi5wbGF5U3RhdGU6ImlkbGUiO3JldHVybiJydW5uaW5nIiE9YiYmInBlbmRpbmciIT1iJiYoYS5fcmVnaXN0ZXJlZD0hMSksYS5fcmVnaXN0ZXJlZH0pLGcucHVzaC5hcHBseShnLGIpLGcubGVuZ3RoPyhoPSEwLHJlcXVlc3RBbmltYXRpb25GcmFtZShlKSk6aD0hMX12YXIgZj0oZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiwiZGl2IiksMCk7Yi5iaW5kQW5pbWF0aW9uRm9yQ3VzdG9tRWZmZWN0PWZ1bmN0aW9uKGIpe3ZhciBjLGU9Yi5lZmZlY3QudGFyZ2V0LGc9ImZ1bmN0aW9uIj09dHlwZW9mIGIuZWZmZWN0LmdldEZyYW1lcygpO2M9Zz9iLmVmZmVjdC5nZXRGcmFtZXMoKTpiLmVmZmVjdC5fb25zYW1wbGU7dmFyIGg9Yi5lZmZlY3QudGltaW5nLGk9bnVsbDtoPWEubm9ybWFsaXplVGltaW5nSW5wdXQoaCk7dmFyIGo9ZnVuY3Rpb24oKXt2YXIgZD1qLl9hbmltYXRpb24/ai5fYW5pbWF0aW9uLmN1cnJlbnRUaW1lOm51bGw7bnVsbCE9PWQmJihkPWEuY2FsY3VsYXRlVGltZUZyYWN0aW9uKGEuY2FsY3VsYXRlQWN0aXZlRHVyYXRpb24oaCksZCxoKSxpc05hTihkKSYmKGQ9bnVsbCkpLGQhPT1pJiYoZz9jKGQsZSxiLmVmZmVjdCk6YyhkLGIuZWZmZWN0LGIuZWZmZWN0Ll9hbmltYXRpb24pKSxpPWR9O2ouX2FuaW1hdGlvbj1iLGouX3JlZ2lzdGVyZWQ9ITEsai5fc2VxdWVuY2VOdW1iZXI9ZisrLGIuX2NhbGxiYWNrPWosZChqKX07dmFyIGc9W10saD0hMTtiLkFuaW1hdGlvbi5wcm90b3R5cGUuX3JlZ2lzdGVyPWZ1bmN0aW9uKCl7dGhpcy5fY2FsbGJhY2smJmQodGhpcy5fY2FsbGJhY2spfX0oYyxlLGYpLGZ1bmN0aW9uKGEsYixjKXtmdW5jdGlvbiBkKGEpe3JldHVybiBhLl90aW1pbmcuZGVsYXkrYS5hY3RpdmVEdXJhdGlvbithLl90aW1pbmcuZW5kRGVsYXl9ZnVuY3Rpb24gZShiLGMsZCl7dGhpcy5faWQ9ZCx0aGlzLl9wYXJlbnQ9bnVsbCx0aGlzLmNoaWxkcmVuPWJ8fFtdLHRoaXMuX3JlcGFyZW50KHRoaXMuY2hpbGRyZW4pLGM9YS5udW1lcmljVGltaW5nVG9PYmplY3QoYyksdGhpcy5fdGltaW5nSW5wdXQ9YS5jbG9uZVRpbWluZ0lucHV0KGMpLHRoaXMuX3RpbWluZz1hLm5vcm1hbGl6ZVRpbWluZ0lucHV0KGMsITApLHRoaXMudGltaW5nPWEubWFrZVRpbWluZyhjLCEwLHRoaXMpLHRoaXMudGltaW5nLl9lZmZlY3Q9dGhpcywiYXV0byI9PT10aGlzLl90aW1pbmcuZHVyYXRpb24mJih0aGlzLl90aW1pbmcuZHVyYXRpb249dGhpcy5hY3RpdmVEdXJhdGlvbil9d2luZG93LlNlcXVlbmNlRWZmZWN0PWZ1bmN0aW9uKCl7ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LHdpbmRvdy5Hcm91cEVmZmVjdD1mdW5jdGlvbigpe2UuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxlLnByb3RvdHlwZT17X2lzQW5jZXN0b3I6ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPXRoaXM7bnVsbCE9PWI7KXtpZihiPT1hKXJldHVybiEwO2I9Yi5fcGFyZW50fXJldHVybiExfSxfcmVidWlsZDpmdW5jdGlvbigpe2Zvcih2YXIgYT10aGlzO2E7KSJhdXRvIj09PWEudGltaW5nLmR1cmF0aW9uJiYoYS5fdGltaW5nLmR1cmF0aW9uPWEuYWN0aXZlRHVyYXRpb24pLGE9YS5fcGFyZW50O3RoaXMuX2FuaW1hdGlvbiYmdGhpcy5fYW5pbWF0aW9uLl9yZWJ1aWxkVW5kZXJseWluZ0FuaW1hdGlvbigpfSxfcmVwYXJlbnQ6ZnVuY3Rpb24oYSl7Yi5yZW1vdmVNdWx0aShhKTtmb3IodmFyIGM9MDtjPGEubGVuZ3RoO2MrKylhW2NdLl9wYXJlbnQ9dGhpc30sX3B1dENoaWxkOmZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjPWI/IkNhbm5vdCBhcHBlbmQgYW4gYW5jZXN0b3Igb3Igc2VsZiI6IkNhbm5vdCBwcmVwZW5kIGFuIGFuY2VzdG9yIG9yIHNlbGYiLGQ9MDtkPGEubGVuZ3RoO2QrKylpZih0aGlzLl9pc0FuY2VzdG9yKGFbZF0pKXRocm93e3R5cGU6RE9NRXhjZXB0aW9uLkhJRVJBUkNIWV9SRVFVRVNUX0VSUixuYW1lOiJIaWVyYXJjaHlSZXF1ZXN0RXJyb3IiLG1lc3NhZ2U6Y307Zm9yKHZhciBkPTA7ZDxhLmxlbmd0aDtkKyspYj90aGlzLmNoaWxkcmVuLnB1c2goYVtkXSk6dGhpcy5jaGlsZHJlbi51bnNoaWZ0KGFbZF0pO3RoaXMuX3JlcGFyZW50KGEpLHRoaXMuX3JlYnVpbGQoKX0sYXBwZW5kOmZ1bmN0aW9uKCl7dGhpcy5fcHV0Q2hpbGQoYXJndW1lbnRzLCEwKX0scHJlcGVuZDpmdW5jdGlvbigpe3RoaXMuX3B1dENoaWxkKGFyZ3VtZW50cywhMSl9LGdldCBwYXJlbnQoKXtyZXR1cm4gdGhpcy5fcGFyZW50fSxnZXQgZmlyc3RDaGlsZCgpe3JldHVybiB0aGlzLmNoaWxkcmVuLmxlbmd0aD90aGlzLmNoaWxkcmVuWzBdOm51bGx9LGdldCBsYXN0Q2hpbGQoKXtyZXR1cm4gdGhpcy5jaGlsZHJlbi5sZW5ndGg/dGhpcy5jaGlsZHJlblt0aGlzLmNoaWxkcmVuLmxlbmd0aC0xXTpudWxsfSxjbG9uZTpmdW5jdGlvbigpe2Zvcih2YXIgYj1hLmNsb25lVGltaW5nSW5wdXQodGhpcy5fdGltaW5nSW5wdXQpLGM9W10sZD0wO2Q8dGhpcy5jaGlsZHJlbi5sZW5ndGg7ZCsrKWMucHVzaCh0aGlzLmNoaWxkcmVuW2RdLmNsb25lKCkpO3JldHVybiB0aGlzIGluc3RhbmNlb2YgR3JvdXBFZmZlY3Q/bmV3IEdyb3VwRWZmZWN0KGMsYik6bmV3IFNlcXVlbmNlRWZmZWN0KGMsYil9LHJlbW92ZTpmdW5jdGlvbigpe2IucmVtb3ZlTXVsdGkoW3RoaXNdKX19LHdpbmRvdy5TZXF1ZW5jZUVmZmVjdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlLnByb3RvdHlwZSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdy5TZXF1ZW5jZUVmZmVjdC5wcm90b3R5cGUsImFjdGl2ZUR1cmF0aW9uIix7Z2V0OmZ1bmN0aW9uKCl7dmFyIGE9MDtyZXR1cm4gdGhpcy5jaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uKGIpe2ErPWQoYil9KSxNYXRoLm1heChhLDApfX0pLHdpbmRvdy5Hcm91cEVmZmVjdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlLnByb3RvdHlwZSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdy5Hcm91cEVmZmVjdC5wcm90b3R5cGUsImFjdGl2ZUR1cmF0aW9uIix7Z2V0OmZ1bmN0aW9uKCl7dmFyIGE9MDtyZXR1cm4gdGhpcy5jaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uKGIpe2E9TWF0aC5tYXgoYSxkKGIpKX0pLGF9fSksYi5uZXdVbmRlcmx5aW5nQW5pbWF0aW9uRm9yR3JvdXA9ZnVuY3Rpb24oYyl7dmFyIGQsZT1udWxsLGY9ZnVuY3Rpb24oYil7dmFyIGM9ZC5fd3JhcHBlcjtyZXR1cm4gYyYmInBlbmRpbmciIT1jLnBsYXlTdGF0ZSYmYy5lZmZlY3Q/bnVsbD09Yj92b2lkIGMuX3JlbW92ZUNoaWxkQW5pbWF0aW9ucygpOjA9PWImJmMucGxheWJhY2tSYXRlPDAmJihlfHwoZT1hLm5vcm1hbGl6ZVRpbWluZ0lucHV0KGMuZWZmZWN0LnRpbWluZykpLGI9YS5jYWxjdWxhdGVUaW1lRnJhY3Rpb24oYS5jYWxjdWxhdGVBY3RpdmVEdXJhdGlvbihlKSwtMSxlKSxpc05hTihiKXx8bnVsbD09Yik/KGMuX2ZvckVhY2hDaGlsZChmdW5jdGlvbihhKXthLmN1cnJlbnRUaW1lPS0xfSksdm9pZCBjLl9yZW1vdmVDaGlsZEFuaW1hdGlvbnMoKSk6dm9pZCAwOnZvaWQgMH0sZz1uZXcgS2V5ZnJhbWVFZmZlY3QobnVsbCxbXSxjLl90aW1pbmcsYy5faWQpO3JldHVybiBnLm9uc2FtcGxlPWYsZD1iLnRpbWVsaW5lLl9wbGF5KGcpfSxiLmJpbmRBbmltYXRpb25Gb3JHcm91cD1mdW5jdGlvbihhKXthLl9hbmltYXRpb24uX3dyYXBwZXI9YSxhLl9pc0dyb3VwPSEwLGIuYXdhaXRTdGFydFRpbWUoYSksYS5fY29uc3RydWN0Q2hpbGRBbmltYXRpb25zKCksYS5fc2V0RXh0ZXJuYWxBbmltYXRpb24oYSl9LGIuZ3JvdXBDaGlsZER1cmF0aW9uPWR9KGMsZSxmKSxiWyJ0cnVlIl09YX0oe30sZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30oKSk7Cjwvc2NyaXB0PjxzY3JpcHQ+LyoqCkBsaWNlbnNlIEBub2NvbXBpbGUKQ29weXJpZ2h0IChjKSAyMDE4IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dApUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dApUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQKQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28Kc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKKi8KKGZ1bmN0aW9uKCl7LyoKCiBDb3B5cmlnaHQgKGMpIDIwMTYgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dAogVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQKIFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dAogQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28KIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiovCid1c2Ugc3RyaWN0Jzt2YXIgbixwPSJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93JiZ3aW5kb3c9PT10aGlzP3RoaXM6InVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWwmJm51bGwhPWdsb2JhbD9nbG9iYWw6dGhpcyxhYT0iZnVuY3Rpb24iPT10eXBlb2YgT2JqZWN0LmRlZmluZVByb3BlcnRpZXM/T2JqZWN0LmRlZmluZVByb3BlcnR5OmZ1bmN0aW9uKGEsYixjKXthIT1BcnJheS5wcm90b3R5cGUmJmEhPU9iamVjdC5wcm90b3R5cGUmJihhW2JdPWMudmFsdWUpfTtmdW5jdGlvbiBiYSgpe2JhPWZ1bmN0aW9uKCl7fTtwLlN5bWJvbHx8KHAuU3ltYm9sPWNhKX12YXIgY2E9ZnVuY3Rpb24oKXt2YXIgYT0wO3JldHVybiBmdW5jdGlvbihiKXtyZXR1cm4ianNjb21wX3N5bWJvbF8iKyhifHwiIikrYSsrfX0oKTsKZnVuY3Rpb24gZGEoKXtiYSgpO3ZhciBhPXAuU3ltYm9sLml0ZXJhdG9yO2F8fChhPXAuU3ltYm9sLml0ZXJhdG9yPXAuU3ltYm9sKCJpdGVyYXRvciIpKTsiZnVuY3Rpb24iIT10eXBlb2YgQXJyYXkucHJvdG90eXBlW2FdJiZhYShBcnJheS5wcm90b3R5cGUsYSx7Y29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIGVhKHRoaXMpfX0pO2RhPWZ1bmN0aW9uKCl7fX1mdW5jdGlvbiBlYShhKXt2YXIgYj0wO3JldHVybiBmYShmdW5jdGlvbigpe3JldHVybiBiPGEubGVuZ3RoP3tkb25lOiExLHZhbHVlOmFbYisrXX06e2RvbmU6ITB9fSl9ZnVuY3Rpb24gZmEoYSl7ZGEoKTthPXtuZXh0OmF9O2FbcC5TeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9O3JldHVybiBhfWZ1bmN0aW9uIGlhKGEpe2RhKCk7dmFyIGI9YVtTeW1ib2wuaXRlcmF0b3JdO3JldHVybiBiP2IuY2FsbChhKTplYShhKX0KZnVuY3Rpb24gamEoYSl7Zm9yKHZhciBiLGM9W107IShiPWEubmV4dCgpKS5kb25lOyljLnB1c2goYi52YWx1ZSk7cmV0dXJuIGN9CihmdW5jdGlvbigpe2lmKCFmdW5jdGlvbigpe3ZhciBhPWRvY3VtZW50LmNyZWF0ZUV2ZW50KCJFdmVudCIpO2EuaW5pdEV2ZW50KCJmb28iLCEwLCEwKTthLnByZXZlbnREZWZhdWx0KCk7cmV0dXJuIGEuZGVmYXVsdFByZXZlbnRlZH0oKSl7dmFyIGE9RXZlbnQucHJvdG90eXBlLnByZXZlbnREZWZhdWx0O0V2ZW50LnByb3RvdHlwZS5wcmV2ZW50RGVmYXVsdD1mdW5jdGlvbigpe3RoaXMuY2FuY2VsYWJsZSYmKGEuY2FsbCh0aGlzKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiZGVmYXVsdFByZXZlbnRlZCIse2dldDpmdW5jdGlvbigpe3JldHVybiEwfSxjb25maWd1cmFibGU6ITB9KSl9fXZhciBiPS9UcmlkZW50Ly50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO2lmKCF3aW5kb3cuQ3VzdG9tRXZlbnR8fGImJiJmdW5jdGlvbiIhPT10eXBlb2Ygd2luZG93LkN1c3RvbUV2ZW50KXdpbmRvdy5DdXN0b21FdmVudD1mdW5jdGlvbihhLGIpe2I9Ynx8e307dmFyIGM9ZG9jdW1lbnQuY3JlYXRlRXZlbnQoIkN1c3RvbUV2ZW50Iik7CmMuaW5pdEN1c3RvbUV2ZW50KGEsISFiLmJ1YmJsZXMsISFiLmNhbmNlbGFibGUsYi5kZXRhaWwpO3JldHVybiBjfSx3aW5kb3cuQ3VzdG9tRXZlbnQucHJvdG90eXBlPXdpbmRvdy5FdmVudC5wcm90b3R5cGU7aWYoIXdpbmRvdy5FdmVudHx8YiYmImZ1bmN0aW9uIiE9PXR5cGVvZiB3aW5kb3cuRXZlbnQpe3ZhciBjPXdpbmRvdy5FdmVudDt3aW5kb3cuRXZlbnQ9ZnVuY3Rpb24oYSxiKXtiPWJ8fHt9O3ZhciBjPWRvY3VtZW50LmNyZWF0ZUV2ZW50KCJFdmVudCIpO2MuaW5pdEV2ZW50KGEsISFiLmJ1YmJsZXMsISFiLmNhbmNlbGFibGUpO3JldHVybiBjfTtpZihjKWZvcih2YXIgZCBpbiBjKXdpbmRvdy5FdmVudFtkXT1jW2RdO3dpbmRvdy5FdmVudC5wcm90b3R5cGU9Yy5wcm90b3R5cGV9aWYoIXdpbmRvdy5Nb3VzZUV2ZW50fHxiJiYiZnVuY3Rpb24iIT09dHlwZW9mIHdpbmRvdy5Nb3VzZUV2ZW50KXtiPXdpbmRvdy5Nb3VzZUV2ZW50O3dpbmRvdy5Nb3VzZUV2ZW50PWZ1bmN0aW9uKGEsCmIpe2I9Ynx8e307dmFyIGM9ZG9jdW1lbnQuY3JlYXRlRXZlbnQoIk1vdXNlRXZlbnQiKTtjLmluaXRNb3VzZUV2ZW50KGEsISFiLmJ1YmJsZXMsISFiLmNhbmNlbGFibGUsYi52aWV3fHx3aW5kb3csYi5kZXRhaWwsYi5zY3JlZW5YLGIuc2NyZWVuWSxiLmNsaWVudFgsYi5jbGllbnRZLGIuY3RybEtleSxiLmFsdEtleSxiLnNoaWZ0S2V5LGIubWV0YUtleSxiLmJ1dHRvbixiLnJlbGF0ZWRUYXJnZXQpO3JldHVybiBjfTtpZihiKWZvcihkIGluIGIpd2luZG93Lk1vdXNlRXZlbnRbZF09YltkXTt3aW5kb3cuTW91c2VFdmVudC5wcm90b3R5cGU9Yi5wcm90b3R5cGV9QXJyYXkuZnJvbXx8KEFycmF5LmZyb209ZnVuY3Rpb24oYSl7cmV0dXJuW10uc2xpY2UuY2FsbChhKX0pO09iamVjdC5hc3NpZ258fChPYmplY3QuYXNzaWduPWZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjPVtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLGQ9MCxlO2Q8Yy5sZW5ndGg7ZCsrKWlmKGU9Y1tkXSlmb3IodmFyIGY9CmEsbT1lLHE9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMobSkseD0wO3g8cS5sZW5ndGg7eCsrKWU9cVt4XSxmW2VdPW1bZV07cmV0dXJuIGF9KX0pKHdpbmRvdy5XZWJDb21wb25lbnRzKTsoZnVuY3Rpb24oKXtmdW5jdGlvbiBhKCl7fWZ1bmN0aW9uIGIoYSxiKXtpZighYS5jaGlsZE5vZGVzLmxlbmd0aClyZXR1cm5bXTtzd2l0Y2goYS5ub2RlVHlwZSl7Y2FzZSBOb2RlLkRPQ1VNRU5UX05PREU6cmV0dXJuIHVhLmNhbGwoYSxiKTtjYXNlIE5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERTpyZXR1cm4gbGIuY2FsbChhLGIpO2RlZmF1bHQ6cmV0dXJuIFUuY2FsbChhLGIpfX12YXIgYz0idW5kZWZpbmVkIj09PXR5cGVvZiBIVE1MVGVtcGxhdGVFbGVtZW50LGQ9IShkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkuY2xvbmVOb2RlKClpbnN0YW5jZW9mIERvY3VtZW50RnJhZ21lbnQpLGU9ITE7L1RyaWRlbnQvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkmJmZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShhLGIpe2lmKGEgaW5zdGFuY2VvZiBEb2N1bWVudEZyYWdtZW50KWZvcih2YXIgZDtkPWEuZmlyc3RDaGlsZDspYy5jYWxsKHRoaXMsZCxiKTtlbHNlIGMuY2FsbCh0aGlzLAphLGIpO3JldHVybiBhfWU9ITA7dmFyIGI9Tm9kZS5wcm90b3R5cGUuY2xvbmVOb2RlO05vZGUucHJvdG90eXBlLmNsb25lTm9kZT1mdW5jdGlvbihhKXthPWIuY2FsbCh0aGlzLGEpO3RoaXMgaW5zdGFuY2VvZiBEb2N1bWVudEZyYWdtZW50JiYoYS5fX3Byb3RvX189RG9jdW1lbnRGcmFnbWVudC5wcm90b3R5cGUpO3JldHVybiBhfTtEb2N1bWVudEZyYWdtZW50LnByb3RvdHlwZS5xdWVyeVNlbGVjdG9yQWxsPUhUTUxFbGVtZW50LnByb3RvdHlwZS5xdWVyeVNlbGVjdG9yQWxsO0RvY3VtZW50RnJhZ21lbnQucHJvdG90eXBlLnF1ZXJ5U2VsZWN0b3I9SFRNTEVsZW1lbnQucHJvdG90eXBlLnF1ZXJ5U2VsZWN0b3I7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRG9jdW1lbnRGcmFnbWVudC5wcm90b3R5cGUse25vZGVUeXBlOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gTm9kZS5ET0NVTUVOVF9GUkFHTUVOVF9OT0RFfSxjb25maWd1cmFibGU6ITB9LGxvY2FsTmFtZTp7Z2V0OmZ1bmN0aW9uKCl7fSwKY29uZmlndXJhYmxlOiEwfSxub2RlTmFtZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIiNkb2N1bWVudC1mcmFnbWVudCJ9LGNvbmZpZ3VyYWJsZTohMH19KTt2YXIgYz1Ob2RlLnByb3RvdHlwZS5pbnNlcnRCZWZvcmU7Tm9kZS5wcm90b3R5cGUuaW5zZXJ0QmVmb3JlPWE7dmFyIGQ9Tm9kZS5wcm90b3R5cGUuYXBwZW5kQ2hpbGQ7Tm9kZS5wcm90b3R5cGUuYXBwZW5kQ2hpbGQ9ZnVuY3Rpb24oYil7YiBpbnN0YW5jZW9mIERvY3VtZW50RnJhZ21lbnQ/YS5jYWxsKHRoaXMsYixudWxsKTpkLmNhbGwodGhpcyxiKTtyZXR1cm4gYn07dmFyIGY9Tm9kZS5wcm90b3R5cGUucmVtb3ZlQ2hpbGQsZz1Ob2RlLnByb3RvdHlwZS5yZXBsYWNlQ2hpbGQ7Tm9kZS5wcm90b3R5cGUucmVwbGFjZUNoaWxkPWZ1bmN0aW9uKGIsYyl7YiBpbnN0YW5jZW9mIERvY3VtZW50RnJhZ21lbnQ/KGEuY2FsbCh0aGlzLGIsYyksZi5jYWxsKHRoaXMsYykpOmcuY2FsbCh0aGlzLGIsYyk7cmV0dXJuIGN9O0RvY3VtZW50LnByb3RvdHlwZS5jcmVhdGVEb2N1bWVudEZyYWdtZW50PQpmdW5jdGlvbigpe3ZhciBhPXRoaXMuY3JlYXRlRWxlbWVudCgiZGYiKTthLl9fcHJvdG9fXz1Eb2N1bWVudEZyYWdtZW50LnByb3RvdHlwZTtyZXR1cm4gYX07dmFyIGg9RG9jdW1lbnQucHJvdG90eXBlLmltcG9ydE5vZGU7RG9jdW1lbnQucHJvdG90eXBlLmltcG9ydE5vZGU9ZnVuY3Rpb24oYSxiKXtiPWguY2FsbCh0aGlzLGEsYnx8ITEpO2EgaW5zdGFuY2VvZiBEb2N1bWVudEZyYWdtZW50JiYoYi5fX3Byb3RvX189RG9jdW1lbnRGcmFnbWVudC5wcm90b3R5cGUpO3JldHVybiBifX0oKTt2YXIgZj1Ob2RlLnByb3RvdHlwZS5jbG9uZU5vZGUsZz1Eb2N1bWVudC5wcm90b3R5cGUuY3JlYXRlRWxlbWVudCxoPURvY3VtZW50LnByb3RvdHlwZS5pbXBvcnROb2RlLGs9Tm9kZS5wcm90b3R5cGUucmVtb3ZlQ2hpbGQsbD1Ob2RlLnByb3RvdHlwZS5hcHBlbmRDaGlsZCxtPU5vZGUucHJvdG90eXBlLnJlcGxhY2VDaGlsZCxxPURPTVBhcnNlci5wcm90b3R5cGUucGFyc2VGcm9tU3RyaW5nLAp4PU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iod2luZG93LkhUTUxFbGVtZW50LnByb3RvdHlwZSwiaW5uZXJIVE1MIil8fHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbm5lckhUTUx9LHNldDpmdW5jdGlvbihhKXt0aGlzLmlubmVySFRNTD1hfX0sTT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHdpbmRvdy5Ob2RlLnByb3RvdHlwZSwiY2hpbGROb2RlcyIpfHx7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2hpbGROb2Rlc319LFU9RWxlbWVudC5wcm90b3R5cGUucXVlcnlTZWxlY3RvckFsbCx1YT1Eb2N1bWVudC5wcm90b3R5cGUucXVlcnlTZWxlY3RvckFsbCxsYj1Eb2N1bWVudEZyYWdtZW50LnByb3RvdHlwZS5xdWVyeVNlbGVjdG9yQWxsLG1iPWZ1bmN0aW9uKCl7aWYoIWMpe3ZhciBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIiksYj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZW1wbGF0ZSIpO2IuY29udGVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSk7CmEuY29udGVudC5hcHBlbmRDaGlsZChiKTthPWEuY2xvbmVOb2RlKCEwKTtyZXR1cm4gMD09PWEuY29udGVudC5jaGlsZE5vZGVzLmxlbmd0aHx8MD09PWEuY29udGVudC5maXJzdENoaWxkLmNvbnRlbnQuY2hpbGROb2Rlcy5sZW5ndGh8fGR9fSgpO2lmKGMpe3ZhciBTPWRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCgidGVtcGxhdGUiKSxDPSEwLFY9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtWLnRleHRDb250ZW50PSJ0ZW1wbGF0ZXtkaXNwbGF5Om5vbmU7fSI7dmFyIGhhPWRvY3VtZW50LmhlYWQ7aGEuaW5zZXJ0QmVmb3JlKFYsaGEuZmlyc3RFbGVtZW50Q2hpbGQpO2EucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoSFRNTEVsZW1lbnQucHJvdG90eXBlKTt2YXIgdmE9IWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLmhhc093blByb3BlcnR5KCJpbm5lckhUTUwiKTthLkc9ZnVuY3Rpb24oYil7aWYoIWIuY29udGVudCYmYi5uYW1lc3BhY2VVUkk9PT0KZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50Lm5hbWVzcGFjZVVSSSl7Yi5jb250ZW50PVMuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO2Zvcih2YXIgYztjPWIuZmlyc3RDaGlsZDspbC5jYWxsKGIuY29udGVudCxjKTtpZih2YSliLl9fcHJvdG9fXz1hLnByb3RvdHlwZTtlbHNlIGlmKGIuY2xvbmVOb2RlPWZ1bmN0aW9uKGIpe3JldHVybiBhLmEodGhpcyxiKX0sQyl0cnl7UChiKSxXKGIpfWNhdGNoKFRnKXtDPSExfWEuQyhiLmNvbnRlbnQpfX07dmFyIFg9e29wdGlvbjpbInNlbGVjdCJdLHRoZWFkOlsidGFibGUiXSxjb2w6WyJjb2xncm91cCIsInRhYmxlIl0sdHI6WyJ0Ym9keSIsInRhYmxlIl0sdGg6WyJ0ciIsInRib2R5IiwidGFibGUiXSx0ZDpbInRyIiwidGJvZHkiLCJ0YWJsZSJdfSxQPWZ1bmN0aW9uKGIpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShiLCJpbm5lckhUTUwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbmIodGhpcyl9LHNldDpmdW5jdGlvbihiKXt2YXIgYz1YWygvPChbYS16XVteL1wwPlx4MjBcdFxyXG5cZl0rKS9pLmV4ZWMoYil8fApbIiIsIiJdKVsxXS50b0xvd2VyQ2FzZSgpXTtpZihjKWZvcih2YXIgZD0wO2Q8Yy5sZW5ndGg7ZCsrKWI9IjwiK2NbZF0rIj4iK2IrIjwvIitjW2RdKyI+IjtTLmJvZHkuaW5uZXJIVE1MPWI7Zm9yKGEuQyhTKTt0aGlzLmNvbnRlbnQuZmlyc3RDaGlsZDspay5jYWxsKHRoaXMuY29udGVudCx0aGlzLmNvbnRlbnQuZmlyc3RDaGlsZCk7Yj1TLmJvZHk7aWYoYylmb3IoZD0wO2Q8Yy5sZW5ndGg7ZCsrKWI9Yi5sYXN0Q2hpbGQ7Zm9yKDtiLmZpcnN0Q2hpbGQ7KWwuY2FsbCh0aGlzLmNvbnRlbnQsYi5maXJzdENoaWxkKX0sY29uZmlndXJhYmxlOiEwfSl9LFc9ZnVuY3Rpb24oYSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGEsIm91dGVySFRNTCIse2dldDpmdW5jdGlvbigpe3JldHVybiI8dGVtcGxhdGU+Iit0aGlzLmlubmVySFRNTCsiPC90ZW1wbGF0ZT4ifSxzZXQ6ZnVuY3Rpb24oYSl7aWYodGhpcy5wYXJlbnROb2RlKXtTLmJvZHkuaW5uZXJIVE1MPWE7Zm9yKGE9dGhpcy5vd25lckRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtTLmJvZHkuZmlyc3RDaGlsZDspbC5jYWxsKGEsClMuYm9keS5maXJzdENoaWxkKTttLmNhbGwodGhpcy5wYXJlbnROb2RlLGEsdGhpcyl9ZWxzZSB0aHJvdyBFcnJvcigiRmFpbGVkIHRvIHNldCB0aGUgJ291dGVySFRNTCcgcHJvcGVydHkgb24gJ0VsZW1lbnQnOiBUaGlzIGVsZW1lbnQgaGFzIG5vIHBhcmVudCBub2RlLiIpO30sY29uZmlndXJhYmxlOiEwfSl9O1AoYS5wcm90b3R5cGUpO1coYS5wcm90b3R5cGUpO2EuQz1mdW5jdGlvbihjKXtjPWIoYywidGVtcGxhdGUiKTtmb3IodmFyIGQ9MCxlPWMubGVuZ3RoLGY7ZDxlJiYoZj1jW2RdKTtkKyspYS5HKGYpfTtkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIixmdW5jdGlvbigpe2EuQyhkb2N1bWVudCl9KTtEb2N1bWVudC5wcm90b3R5cGUuY3JlYXRlRWxlbWVudD1mdW5jdGlvbigpe3ZhciBiPWcuYXBwbHkodGhpcyxhcmd1bWVudHMpOyJ0ZW1wbGF0ZSI9PT1iLmxvY2FsTmFtZSYmYS5HKGIpO3JldHVybiBifTtET01QYXJzZXIucHJvdG90eXBlLnBhcnNlRnJvbVN0cmluZz0KZnVuY3Rpb24oKXt2YXIgYj1xLmFwcGx5KHRoaXMsYXJndW1lbnRzKTthLkMoYik7cmV0dXJuIGJ9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MRWxlbWVudC5wcm90b3R5cGUsImlubmVySFRNTCIse2dldDpmdW5jdGlvbigpe3JldHVybiBuYih0aGlzKX0sc2V0OmZ1bmN0aW9uKGIpe3guc2V0LmNhbGwodGhpcyxiKTthLkModGhpcyl9LGNvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwfSk7dmFyIFZlPS9bJlx1MDBBMCJdL2cseWM9L1smXHUwMEEwPD5dL2csemM9ZnVuY3Rpb24oYSl7c3dpdGNoKGEpe2Nhc2UgIiYiOnJldHVybiImYW1wOyI7Y2FzZSAiPCI6cmV0dXJuIiZsdDsiO2Nhc2UgIj4iOnJldHVybiImZ3Q7IjtjYXNlICciJzpyZXR1cm4iJnF1b3Q7IjtjYXNlICJcdTAwYTAiOnJldHVybiImbmJzcDsifX07Vj1mdW5jdGlvbihhKXtmb3IodmFyIGI9e30sYz0wO2M8YS5sZW5ndGg7YysrKWJbYVtjXV09ITA7cmV0dXJuIGJ9O3ZhciBXZT1WKCJhcmVhIGJhc2UgYnIgY29sIGNvbW1hbmQgZW1iZWQgaHIgaW1nIGlucHV0IGtleWdlbiBsaW5rIG1ldGEgcGFyYW0gc291cmNlIHRyYWNrIHdiciIuc3BsaXQoIiAiKSksClhlPVYoInN0eWxlIHNjcmlwdCB4bXAgaWZyYW1lIG5vZW1iZWQgbm9mcmFtZXMgcGxhaW50ZXh0IG5vc2NyaXB0Ii5zcGxpdCgiICIpKSxuYj1mdW5jdGlvbihhLGIpeyJ0ZW1wbGF0ZSI9PT1hLmxvY2FsTmFtZSYmKGE9YS5jb250ZW50KTtmb3IodmFyIGM9IiIsZD1iP2IoYSk6TS5nZXQuY2FsbChhKSxlPTAsZj1kLmxlbmd0aCxnO2U8ZiYmKGc9ZFtlXSk7ZSsrKXthOnt2YXIgaD1nO3ZhciBrPWE7dmFyIGw9Yjtzd2l0Y2goaC5ub2RlVHlwZSl7Y2FzZSBOb2RlLkVMRU1FTlRfTk9ERTpmb3IodmFyIFA9aC5sb2NhbE5hbWUsbT0iPCIrUCxXPWguYXR0cmlidXRlcyxxPTA7az1XW3FdO3ErKyltKz0iICIray5uYW1lKyc9Iicray52YWx1ZS5yZXBsYWNlKFZlLHpjKSsnIic7bSs9Ij4iO2g9V2VbUF0/bTptK25iKGgsbCkrIjwvIitQKyI+IjticmVhayBhO2Nhc2UgTm9kZS5URVhUX05PREU6aD1oLmRhdGE7aD1rJiZYZVtrLmxvY2FsTmFtZV0/aDpoLnJlcGxhY2UoeWMsemMpO2JyZWFrIGE7CmNhc2UgTm9kZS5DT01NRU5UX05PREU6aD0iXHgzYyEtLSIraC5kYXRhKyItLVx4M2UiO2JyZWFrIGE7ZGVmYXVsdDp0aHJvdyB3aW5kb3cuY29uc29sZS5lcnJvcihoKSxFcnJvcigibm90IGltcGxlbWVudGVkIik7fX1jKz1ofXJldHVybiBjfX1pZihjfHxtYil7YS5hPWZ1bmN0aW9uKGEsYil7dmFyIGM9Zi5jYWxsKGEsITEpO3RoaXMuRyYmdGhpcy5HKGMpO2ImJihsLmNhbGwoYy5jb250ZW50LGYuY2FsbChhLmNvbnRlbnQsITApKSxvYihjLmNvbnRlbnQsYS5jb250ZW50KSk7cmV0dXJuIGN9O3ZhciBvYj1mdW5jdGlvbihjLGQpe2lmKGQucXVlcnlTZWxlY3RvckFsbCYmKGQ9YihkLCJ0ZW1wbGF0ZSIpLDAhPT1kLmxlbmd0aCkpe2M9YihjLCJ0ZW1wbGF0ZSIpO2Zvcih2YXIgZT0wLGY9Yy5sZW5ndGgsZyxoO2U8ZjtlKyspaD1kW2VdLGc9Y1tlXSxhJiZhLkcmJmEuRyhoKSxtLmNhbGwoZy5wYXJlbnROb2RlLFllLmNhbGwoaCwhMCksZyl9fSxZZT1Ob2RlLnByb3RvdHlwZS5jbG9uZU5vZGU9CmZ1bmN0aW9uKGIpe2lmKCFlJiZkJiZ0aGlzIGluc3RhbmNlb2YgRG9jdW1lbnRGcmFnbWVudClpZihiKXZhciBjPVplLmNhbGwodGhpcy5vd25lckRvY3VtZW50LHRoaXMsITApO2Vsc2UgcmV0dXJuIHRoaXMub3duZXJEb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7ZWxzZSB0aGlzLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUmJiJ0ZW1wbGF0ZSI9PT10aGlzLmxvY2FsTmFtZSYmdGhpcy5uYW1lc3BhY2VVUkk9PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5uYW1lc3BhY2VVUkk/Yz1hLmEodGhpcyxiKTpjPWYuY2FsbCh0aGlzLGIpO2ImJm9iKGMsdGhpcyk7cmV0dXJuIGN9LFplPURvY3VtZW50LnByb3RvdHlwZS5pbXBvcnROb2RlPWZ1bmN0aW9uKGMsZCl7ZD1kfHwhMTtpZigidGVtcGxhdGUiPT09Yy5sb2NhbE5hbWUpcmV0dXJuIGEuYShjLGQpO3ZhciBlPWguY2FsbCh0aGlzLGMsZCk7aWYoZCl7b2IoZSxjKTtjPWIoZSwnc2NyaXB0Om5vdChbdHlwZV0pLHNjcmlwdFt0eXBlPSJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0Il0sc2NyaXB0W3R5cGU9InRleHQvamF2YXNjcmlwdCJdJyk7CmZvcih2YXIgZixrPTA7azxjLmxlbmd0aDtrKyspe2Y9Y1trXTtkPWcuY2FsbChkb2N1bWVudCwic2NyaXB0Iik7ZC50ZXh0Q29udGVudD1mLnRleHRDb250ZW50O2Zvcih2YXIgbD1mLmF0dHJpYnV0ZXMsUD0wLFc7UDxsLmxlbmd0aDtQKyspVz1sW1BdLGQuc2V0QXR0cmlidXRlKFcubmFtZSxXLnZhbHVlKTttLmNhbGwoZi5wYXJlbnROb2RlLGQsZil9fXJldHVybiBlfX1jJiYod2luZG93LkhUTUxUZW1wbGF0ZUVsZW1lbnQ9YSl9KSgpO3ZhciBrYT1zZXRUaW1lb3V0O2Z1bmN0aW9uIGxhKCl7fWZ1bmN0aW9uIG1hKGEsYil7cmV0dXJuIGZ1bmN0aW9uKCl7YS5hcHBseShiLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIHIoYSl7aWYoISh0aGlzIGluc3RhbmNlb2YgcikpdGhyb3cgbmV3IFR5cGVFcnJvcigiUHJvbWlzZXMgbXVzdCBiZSBjb25zdHJ1Y3RlZCB2aWEgbmV3Iik7aWYoImZ1bmN0aW9uIiE9PXR5cGVvZiBhKXRocm93IG5ldyBUeXBlRXJyb3IoIm5vdCBhIGZ1bmN0aW9uIik7dGhpcy51PTA7dGhpcy5tYT0hMTt0aGlzLmg9dm9pZCAwO3RoaXMuST1bXTtuYShhLHRoaXMpfQpmdW5jdGlvbiBvYShhLGIpe2Zvcig7Mz09PWEudTspYT1hLmg7MD09PWEudT9hLkkucHVzaChiKTooYS5tYT0hMCxwYShmdW5jdGlvbigpe3ZhciBjPTE9PT1hLnU/Yi5OYTpiLk9hO2lmKG51bGw9PT1jKSgxPT09YS51P3FhOnJhKShiLmdhLGEuaCk7ZWxzZXt0cnl7dmFyIGQ9YyhhLmgpfWNhdGNoKGUpe3JhKGIuZ2EsZSk7cmV0dXJufXFhKGIuZ2EsZCl9fSkpfWZ1bmN0aW9uIHFhKGEsYil7dHJ5e2lmKGI9PT1hKXRocm93IG5ldyBUeXBlRXJyb3IoIkEgcHJvbWlzZSBjYW5ub3QgYmUgcmVzb2x2ZWQgd2l0aCBpdHNlbGYuIik7aWYoYiYmKCJvYmplY3QiPT09dHlwZW9mIGJ8fCJmdW5jdGlvbiI9PT10eXBlb2YgYikpe3ZhciBjPWIudGhlbjtpZihiIGluc3RhbmNlb2Ygcil7YS51PTM7YS5oPWI7c2EoYSk7cmV0dXJufWlmKCJmdW5jdGlvbiI9PT10eXBlb2YgYyl7bmEobWEoYyxiKSxhKTtyZXR1cm59fWEudT0xO2EuaD1iO3NhKGEpfWNhdGNoKGQpe3JhKGEsZCl9fQpmdW5jdGlvbiByYShhLGIpe2EudT0yO2EuaD1iO3NhKGEpfWZ1bmN0aW9uIHNhKGEpezI9PT1hLnUmJjA9PT1hLkkubGVuZ3RoJiZwYShmdW5jdGlvbigpe2EubWF8fCJ1bmRlZmluZWQiIT09dHlwZW9mIGNvbnNvbGUmJmNvbnNvbGUmJmNvbnNvbGUud2FybigiUG9zc2libGUgVW5oYW5kbGVkIFByb21pc2UgUmVqZWN0aW9uOiIsYS5oKX0pO2Zvcih2YXIgYj0wLGM9YS5JLmxlbmd0aDtiPGM7YisrKW9hKGEsYS5JW2JdKTthLkk9bnVsbH1mdW5jdGlvbiB0YShhLGIsYyl7dGhpcy5OYT0iZnVuY3Rpb24iPT09dHlwZW9mIGE/YTpudWxsO3RoaXMuT2E9ImZ1bmN0aW9uIj09PXR5cGVvZiBiP2I6bnVsbDt0aGlzLmdhPWN9ZnVuY3Rpb24gbmEoYSxiKXt2YXIgYz0hMTt0cnl7YShmdW5jdGlvbihhKXtjfHwoYz0hMCxxYShiLGEpKX0sZnVuY3Rpb24oYSl7Y3x8KGM9ITAscmEoYixhKSl9KX1jYXRjaChkKXtjfHwoYz0hMCxyYShiLGQpKX19CnIucHJvdG90eXBlWyJjYXRjaCJdPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnRoZW4obnVsbCxhKX07ci5wcm90b3R5cGUudGhlbj1mdW5jdGlvbihhLGIpe3ZhciBjPW5ldyB0aGlzLmNvbnN0cnVjdG9yKGxhKTtvYSh0aGlzLG5ldyB0YShhLGIsYykpO3JldHVybiBjfTtyLnByb3RvdHlwZVsiZmluYWxseSJdPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuY29uc3RydWN0b3I7cmV0dXJuIHRoaXMudGhlbihmdW5jdGlvbihjKXtyZXR1cm4gYi5yZXNvbHZlKGEoKSkudGhlbihmdW5jdGlvbigpe3JldHVybiBjfSl9LGZ1bmN0aW9uKGMpe3JldHVybiBiLnJlc29sdmUoYSgpKS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIGIucmVqZWN0KGMpfSl9KX07CmZ1bmN0aW9uIHdhKGEpe3JldHVybiBuZXcgcihmdW5jdGlvbihiLGMpe2Z1bmN0aW9uIGQoYSxnKXt0cnl7aWYoZyYmKCJvYmplY3QiPT09dHlwZW9mIGd8fCJmdW5jdGlvbiI9PT10eXBlb2YgZykpe3ZhciBoPWcudGhlbjtpZigiZnVuY3Rpb24iPT09dHlwZW9mIGgpe2guY2FsbChnLGZ1bmN0aW9uKGIpe2QoYSxiKX0sYyk7cmV0dXJufX1lW2FdPWc7MD09PS0tZiYmYihlKX1jYXRjaChtKXtjKG0pfX1pZighYXx8InVuZGVmaW5lZCI9PT10eXBlb2YgYS5sZW5ndGgpdGhyb3cgbmV3IFR5cGVFcnJvcigiUHJvbWlzZS5hbGwgYWNjZXB0cyBhbiBhcnJheSIpO3ZhciBlPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGEpO2lmKDA9PT1lLmxlbmd0aClyZXR1cm4gYihbXSk7Zm9yKHZhciBmPWUubGVuZ3RoLGc9MDtnPGUubGVuZ3RoO2crKylkKGcsZVtnXSl9KX0KZnVuY3Rpb24geGEoYSl7cmV0dXJuIGEmJiJvYmplY3QiPT09dHlwZW9mIGEmJmEuY29uc3RydWN0b3I9PT1yP2E6bmV3IHIoZnVuY3Rpb24oYil7YihhKX0pfWZ1bmN0aW9uIHlhKGEpe3JldHVybiBuZXcgcihmdW5jdGlvbihiLGMpe2MoYSl9KX1mdW5jdGlvbiB6YShhKXtyZXR1cm4gbmV3IHIoZnVuY3Rpb24oYixjKXtmb3IodmFyIGQ9MCxlPWEubGVuZ3RoO2Q8ZTtkKyspYVtkXS50aGVuKGIsYyl9KX12YXIgcGE9ImZ1bmN0aW9uIj09PXR5cGVvZiBzZXRJbW1lZGlhdGUmJmZ1bmN0aW9uKGEpe3NldEltbWVkaWF0ZShhKX18fGZ1bmN0aW9uKGEpe2thKGEsMCl9Oy8qCgpDb3B5cmlnaHQgKGMpIDIwMTcgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgpUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0ClRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0ClRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dApDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbwpzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAoqLwppZighd2luZG93LlByb21pc2Upe3dpbmRvdy5Qcm9taXNlPXI7ci5wcm90b3R5cGUudGhlbj1yLnByb3RvdHlwZS50aGVuO3IuYWxsPXdhO3IucmFjZT16YTtyLnJlc29sdmU9eGE7ci5yZWplY3Q9eWE7dmFyIEFhPWRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIiKSxCYT1bXTsobmV3IE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24oKXtmb3IodmFyIGE9QmEubGVuZ3RoLGI9MDtiPGE7YisrKUJhW2JdKCk7QmEuc3BsaWNlKDAsYSl9KSkub2JzZXJ2ZShBYSx7Y2hhcmFjdGVyRGF0YTohMH0pO3BhPWZ1bmN0aW9uKGEpe0JhLnB1c2goYSk7QWEudGV4dENvbnRlbnQ9MDxBYS50ZXh0Q29udGVudC5sZW5ndGg/IiI6ImEifX07KGZ1bmN0aW9uKGEpe2Z1bmN0aW9uIGIoYSxiKXtpZigiZnVuY3Rpb24iPT09dHlwZW9mIHdpbmRvdy5DdXN0b21FdmVudClyZXR1cm4gbmV3IEN1c3RvbUV2ZW50KGEsYik7dmFyIGM9ZG9jdW1lbnQuY3JlYXRlRXZlbnQoIkN1c3RvbUV2ZW50Iik7Yy5pbml0Q3VzdG9tRXZlbnQoYSwhIWIuYnViYmxlcywhIWIuY2FuY2VsYWJsZSxiLmRldGFpbCk7cmV0dXJuIGN9ZnVuY3Rpb24gYyhhKXtpZihNKXJldHVybiBhLm93bmVyRG9jdW1lbnQhPT1kb2N1bWVudD9hLm93bmVyRG9jdW1lbnQ6bnVsbDt2YXIgYj1hLl9faW1wb3J0RG9jO2lmKCFiJiZhLnBhcmVudE5vZGUpe2I9YS5wYXJlbnROb2RlO2lmKCJmdW5jdGlvbiI9PT10eXBlb2YgYi5jbG9zZXN0KWI9Yi5jbG9zZXN0KCJsaW5rW3JlbD1pbXBvcnRdIik7ZWxzZSBmb3IoOyFoKGIpJiYoYj1iLnBhcmVudE5vZGUpOyk7YS5fX2ltcG9ydERvYz1ifXJldHVybiBifWZ1bmN0aW9uIGQoYSl7dmFyIGI9bShkb2N1bWVudCwibGlua1tyZWw9aW1wb3J0XTpub3QoW2ltcG9ydC1kZXBlbmRlbmN5XSkiKSwKYz1iLmxlbmd0aDtjP3EoYixmdW5jdGlvbihiKXtyZXR1cm4gZyhiLGZ1bmN0aW9uKCl7MD09PS0tYyYmYSgpfSl9KTphKCl9ZnVuY3Rpb24gZShhKXtmdW5jdGlvbiBiKCl7ImxvYWRpbmciIT09ZG9jdW1lbnQucmVhZHlTdGF0ZSYmZG9jdW1lbnQuYm9keSYmKGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInJlYWR5c3RhdGVjaGFuZ2UiLGIpLGEoKSl9ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigicmVhZHlzdGF0ZWNoYW5nZSIsYik7YigpfWZ1bmN0aW9uIGYoYSl7ZShmdW5jdGlvbigpe3JldHVybiBkKGZ1bmN0aW9uKCl7cmV0dXJuIGEmJmEoKX0pfSl9ZnVuY3Rpb24gZyhhLGIpe2lmKGEuX19sb2FkZWQpYiYmYigpO2Vsc2UgaWYoInNjcmlwdCI9PT1hLmxvY2FsTmFtZSYmIWEuc3JjfHwic3R5bGUiPT09YS5sb2NhbE5hbWUmJiFhLmZpcnN0Q2hpbGQpYS5fX2xvYWRlZD0hMCxiJiZiKCk7ZWxzZXt2YXIgYz1mdW5jdGlvbihkKXthLnJlbW92ZUV2ZW50TGlzdGVuZXIoZC50eXBlLApjKTthLl9fbG9hZGVkPSEwO2ImJmIoKX07YS5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixjKTtoYSYmInN0eWxlIj09PWEubG9jYWxOYW1lfHxhLmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIixjKX19ZnVuY3Rpb24gaChhKXtyZXR1cm4gYS5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFJiYibGluayI9PT1hLmxvY2FsTmFtZSYmImltcG9ydCI9PT1hLnJlbH1mdW5jdGlvbiBrKCl7dmFyIGE9dGhpczt0aGlzLmE9e307dGhpcy5iPTA7dGhpcy5jPW5ldyBNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uKGIpe3JldHVybiBhLkphKGIpfSk7dGhpcy5jLm9ic2VydmUoZG9jdW1lbnQuaGVhZCx7Y2hpbGRMaXN0OiEwLHN1YnRyZWU6ITB9KTt0aGlzLmxvYWRJbXBvcnRzKGRvY3VtZW50KX1mdW5jdGlvbiBsKGEpe3EobShhLCJ0ZW1wbGF0ZSIpLGZ1bmN0aW9uKGEpe3EobShhLmNvbnRlbnQsJ3NjcmlwdDpub3QoW3R5cGVdKSxzY3JpcHRbdHlwZT0iYXBwbGljYXRpb24vamF2YXNjcmlwdCJdLHNjcmlwdFt0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiXSxzY3JpcHRbdHlwZT0ibW9kdWxlIl0nKSwKZnVuY3Rpb24oYSl7dmFyIGI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7cShhLmF0dHJpYnV0ZXMsZnVuY3Rpb24oYSl7cmV0dXJuIGIuc2V0QXR0cmlidXRlKGEubmFtZSxhLnZhbHVlKX0pO2IudGV4dENvbnRlbnQ9YS50ZXh0Q29udGVudDthLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKGIsYSl9KTtsKGEuY29udGVudCl9KX1mdW5jdGlvbiBtKGEsYil7cmV0dXJuIGEuY2hpbGROb2Rlcy5sZW5ndGg/YS5xdWVyeVNlbGVjdG9yQWxsKGIpOlV9ZnVuY3Rpb24gcShhLGIsYyl7dmFyIGQ9YT9hLmxlbmd0aDowLGU9Yz8tMToxO2ZvcihjPWM/ZC0xOjA7YzxkJiYwPD1jO2MrPWUpYihhW2NdLGMpfXZhciB4PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImxpbmsiKSxNPSJpbXBvcnQiaW4geCxVPXgucXVlcnlTZWxlY3RvckFsbCgiKiIpLHVhPW51bGw7ITE9PT0iY3VycmVudFNjcmlwdCJpbiBkb2N1bWVudCYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGRvY3VtZW50LCJjdXJyZW50U2NyaXB0IiwKe2dldDpmdW5jdGlvbigpe3JldHVybiB1YXx8KCJjb21wbGV0ZSIhPT1kb2N1bWVudC5yZWFkeVN0YXRlP2RvY3VtZW50LnNjcmlwdHNbZG9jdW1lbnQuc2NyaXB0cy5sZW5ndGgtMV06bnVsbCl9LGNvbmZpZ3VyYWJsZTohMH0pO3ZhciBsYj0vKHVybFwoKShbXildKikoXCkpL2csbWI9LyhAaW1wb3J0W1xzXSsoPyF1cmxcKCkpKFteO10qKSg7KS9nLFM9Lyg8bGlua1tePl0qKShyZWw9Wyd8Il0/c3R5bGVzaGVldFsnfCJdP1tePl0qPikvZyxDPXtFYTpmdW5jdGlvbihhLGIpe2EuaHJlZiYmYS5zZXRBdHRyaWJ1dGUoImhyZWYiLEMuWChhLmdldEF0dHJpYnV0ZSgiaHJlZiIpLGIpKTthLnNyYyYmYS5zZXRBdHRyaWJ1dGUoInNyYyIsQy5YKGEuZ2V0QXR0cmlidXRlKCJzcmMiKSxiKSk7aWYoInN0eWxlIj09PWEubG9jYWxOYW1lKXt2YXIgYz1DLnFhKGEudGV4dENvbnRlbnQsYixsYik7YS50ZXh0Q29udGVudD1DLnFhKGMsYixtYil9fSxxYTpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIGEucmVwbGFjZShjLApmdW5jdGlvbihhLGMsZCxlKXthPWQucmVwbGFjZSgvWyInXS9nLCIiKTtiJiYoYT1DLlgoYSxiKSk7cmV0dXJuIGMrIiciK2ErIiciK2V9KX0sWDpmdW5jdGlvbihhLGIpe2lmKHZvaWQgMD09PUMuYWEpe0MuYWE9ITE7dHJ5e3ZhciBjPW5ldyBVUkwoImIiLCJodHRwOi8vYSIpO2MucGF0aG5hbWU9ImMlMjBkIjtDLmFhPSJodHRwOi8vYS9jJTIwZCI9PT1jLmhyZWZ9Y2F0Y2goeWMpe319aWYoQy5hYSlyZXR1cm4obmV3IFVSTChhLGIpKS5ocmVmO2M9Qy54YTtjfHwoYz1kb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoInRlbXAiKSxDLnhhPWMsYy5qYT1jLmNyZWF0ZUVsZW1lbnQoImJhc2UiKSxjLmhlYWQuYXBwZW5kQ2hpbGQoYy5qYSksYy5pYT1jLmNyZWF0ZUVsZW1lbnQoImEiKSk7Yy5qYS5ocmVmPWI7Yy5pYS5ocmVmPWE7cmV0dXJuIGMuaWEuaHJlZnx8YX19LFY9e2FzeW5jOiEwLGxvYWQ6ZnVuY3Rpb24oYSxiLGMpe2lmKGEpaWYoYS5tYXRjaCgvXmRhdGE6Lykpe2E9CmEuc3BsaXQoIiwiKTt2YXIgZD1hWzFdO2Q9LTE8YVswXS5pbmRleE9mKCI7YmFzZTY0Iik/YXRvYihkKTpkZWNvZGVVUklDb21wb25lbnQoZCk7YihkKX1lbHNle3ZhciBlPW5ldyBYTUxIdHRwUmVxdWVzdDtlLm9wZW4oIkdFVCIsYSxWLmFzeW5jKTtlLm9ubG9hZD1mdW5jdGlvbigpe3ZhciBhPWUucmVzcG9uc2VVUkx8fGUuZ2V0UmVzcG9uc2VIZWFkZXIoIkxvY2F0aW9uIik7YSYmMD09PWEuaW5kZXhPZigiLyIpJiYoYT0obG9jYXRpb24ub3JpZ2lufHxsb2NhdGlvbi5wcm90b2NvbCsiLy8iK2xvY2F0aW9uLmhvc3QpK2EpO3ZhciBkPWUucmVzcG9uc2V8fGUucmVzcG9uc2VUZXh0OzMwND09PWUuc3RhdHVzfHwwPT09ZS5zdGF0dXN8fDIwMDw9ZS5zdGF0dXMmJjMwMD5lLnN0YXR1cz9iKGQsYSk6YyhkKX07ZS5zZW5kKCl9ZWxzZSBjKCJlcnJvcjogaHJlZiBtdXN0IGJlIHNwZWNpZmllZCIpfX0saGE9L1RyaWRlbnQvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCl8fC9FZGdlXC9cZC4vaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpOwprLnByb3RvdHlwZS5sb2FkSW1wb3J0cz1mdW5jdGlvbihhKXt2YXIgYj10aGlzO2E9bShhLCJsaW5rW3JlbD1pbXBvcnRdIik7cShhLGZ1bmN0aW9uKGEpe3JldHVybiBiLmcoYSl9KX07ay5wcm90b3R5cGUuZz1mdW5jdGlvbihhKXt2YXIgYj10aGlzLGM9YS5ocmVmO2lmKHZvaWQgMCE9PXRoaXMuYVtjXSl7dmFyIGQ9dGhpcy5hW2NdO2QmJmQuX19sb2FkZWQmJihhLl9faW1wb3J0PWQsdGhpcy5mKGEpKX1lbHNlIHRoaXMuYisrLHRoaXMuYVtjXT0icGVuZGluZyIsVi5sb2FkKGMsZnVuY3Rpb24oYSxkKXthPWIuS2EoYSxkfHxjKTtiLmFbY109YTtiLmItLTtiLmxvYWRJbXBvcnRzKGEpO2IubCgpfSxmdW5jdGlvbigpe2IuYVtjXT1udWxsO2IuYi0tO2IubCgpfSl9O2sucHJvdG90eXBlLkthPWZ1bmN0aW9uKGEsYil7aWYoIWEpcmV0dXJuIGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtoYSYmKGE9YS5yZXBsYWNlKFMsZnVuY3Rpb24oYSxiLGMpe3JldHVybi0xPT09CmEuaW5kZXhPZigidHlwZT0iKT9iKyIgdHlwZT1pbXBvcnQtZGlzYWJsZSAiK2M6YX0pKTt2YXIgYz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZW1wbGF0ZSIpO2MuaW5uZXJIVE1MPWE7aWYoYy5jb250ZW50KWE9Yy5jb250ZW50LGwoYSk7ZWxzZSBmb3IoYT1kb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7Yy5maXJzdENoaWxkOylhLmFwcGVuZENoaWxkKGMuZmlyc3RDaGlsZCk7aWYoYz1hLnF1ZXJ5U2VsZWN0b3IoImJhc2UiKSliPUMuWChjLmdldEF0dHJpYnV0ZSgiaHJlZiIpLGIpLGMucmVtb3ZlQXR0cmlidXRlKCJocmVmIik7Yz1tKGEsJ2xpbmtbcmVsPWltcG9ydF0sbGlua1tyZWw9c3R5bGVzaGVldF1baHJlZl1bdHlwZT1pbXBvcnQtZGlzYWJsZV0sc3R5bGU6bm90KFt0eXBlXSksbGlua1tyZWw9c3R5bGVzaGVldF1baHJlZl06bm90KFt0eXBlXSksc2NyaXB0Om5vdChbdHlwZV0pLHNjcmlwdFt0eXBlPSJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0Il0sc2NyaXB0W3R5cGU9InRleHQvamF2YXNjcmlwdCJdLHNjcmlwdFt0eXBlPSJtb2R1bGUiXScpOwp2YXIgZD0wO3EoYyxmdW5jdGlvbihhKXtnKGEpO0MuRWEoYSxiKTthLnNldEF0dHJpYnV0ZSgiaW1wb3J0LWRlcGVuZGVuY3kiLCIiKTtpZigic2NyaXB0Ij09PWEubG9jYWxOYW1lJiYhYS5zcmMmJmEudGV4dENvbnRlbnQpe2lmKCJtb2R1bGUiPT09YS50eXBlKXRocm93IEVycm9yKCJJbmxpbmUgbW9kdWxlIHNjcmlwdHMgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gSFRNTCBJbXBvcnRzLiIpO2Euc2V0QXR0cmlidXRlKCJzcmMiLCJkYXRhOnRleHQvamF2YXNjcmlwdDtjaGFyc2V0PXV0Zi04LCIrZW5jb2RlVVJJQ29tcG9uZW50KGEudGV4dENvbnRlbnQrKCJcbi8vIyBzb3VyY2VVUkw9IitiKyhkPyItIitkOiIiKSsiLmpzXG4iKSkpO2EudGV4dENvbnRlbnQ9IiI7ZCsrfX0pO3JldHVybiBhfTtrLnByb3RvdHlwZS5sPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcztpZighdGhpcy5iKXt0aGlzLmMuZGlzY29ubmVjdCgpO3RoaXMuZmxhdHRlbihkb2N1bWVudCk7dmFyIGI9ITEsYz0hMSxkPWZ1bmN0aW9uKCl7YyYmCmImJihhLmxvYWRJbXBvcnRzKGRvY3VtZW50KSxhLmJ8fChhLmMub2JzZXJ2ZShkb2N1bWVudC5oZWFkLHtjaGlsZExpc3Q6ITAsc3VidHJlZTohMH0pLGEuZGEoKSkpfTt0aGlzLk1hKGZ1bmN0aW9uKCl7Yz0hMDtkKCl9KTt0aGlzLkxhKGZ1bmN0aW9uKCl7Yj0hMDtkKCl9KX19O2sucHJvdG90eXBlLmZsYXR0ZW49ZnVuY3Rpb24oYSl7dmFyIGI9dGhpczthPW0oYSwibGlua1tyZWw9aW1wb3J0XSIpO3EoYSxmdW5jdGlvbihhKXt2YXIgYz1iLmFbYS5ocmVmXTsoYS5fX2ltcG9ydD1jKSYmYy5ub2RlVHlwZT09PU5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERSYmKGIuYVthLmhyZWZdPWEsYS5yZWFkeVN0YXRlPSJsb2FkaW5nIixhLl9faW1wb3J0PWEsYi5mbGF0dGVuKGMpLGEuYXBwZW5kQ2hpbGQoYykpfSl9O2sucHJvdG90eXBlLkxhPWZ1bmN0aW9uKGEpe2Z1bmN0aW9uIGIoZSl7aWYoZTxkKXt2YXIgZj1jW2VdLGg9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7Zi5yZW1vdmVBdHRyaWJ1dGUoImltcG9ydC1kZXBlbmRlbmN5Iik7CnEoZi5hdHRyaWJ1dGVzLGZ1bmN0aW9uKGEpe3JldHVybiBoLnNldEF0dHJpYnV0ZShhLm5hbWUsYS52YWx1ZSl9KTt1YT1oO2YucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQoaCxmKTtnKGgsZnVuY3Rpb24oKXt1YT1udWxsO2IoZSsxKX0pfWVsc2UgYSgpfXZhciBjPW0oZG9jdW1lbnQsInNjcmlwdFtpbXBvcnQtZGVwZW5kZW5jeV0iKSxkPWMubGVuZ3RoO2IoMCl9O2sucHJvdG90eXBlLk1hPWZ1bmN0aW9uKGEpe3ZhciBiPW0oZG9jdW1lbnQsInN0eWxlW2ltcG9ydC1kZXBlbmRlbmN5XSxsaW5rW3JlbD1zdHlsZXNoZWV0XVtpbXBvcnQtZGVwZW5kZW5jeV0iKSxkPWIubGVuZ3RoO2lmKGQpe3ZhciBlPWhhJiYhIWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoImxpbmtbcmVsPXN0eWxlc2hlZXRdW2hyZWZdW3R5cGU9aW1wb3J0LWRpc2FibGVdIik7cShiLGZ1bmN0aW9uKGIpe2coYixmdW5jdGlvbigpe2IucmVtb3ZlQXR0cmlidXRlKCJpbXBvcnQtZGVwZW5kZW5jeSIpOzA9PT0tLWQmJgphKCl9KTtpZihlJiZiLnBhcmVudE5vZGUhPT1kb2N1bWVudC5oZWFkKXt2YXIgZj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KGIubG9jYWxOYW1lKTtmLl9fYXBwbGllZEVsZW1lbnQ9YjtmLnNldEF0dHJpYnV0ZSgidHlwZSIsImltcG9ydC1wbGFjZWhvbGRlciIpO2IucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZixiLm5leHRTaWJsaW5nKTtmb3IoZj1jKGIpO2YmJmMoZik7KWY9YyhmKTtmLnBhcmVudE5vZGUhPT1kb2N1bWVudC5oZWFkJiYoZj1udWxsKTtkb2N1bWVudC5oZWFkLmluc2VydEJlZm9yZShiLGYpO2IucmVtb3ZlQXR0cmlidXRlKCJ0eXBlIil9fSl9ZWxzZSBhKCl9O2sucHJvdG90eXBlLmRhPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcyxiPW0oZG9jdW1lbnQsImxpbmtbcmVsPWltcG9ydF0iKTtxKGIsZnVuY3Rpb24oYil7cmV0dXJuIGEuZihiKX0sITApfTtrLnByb3RvdHlwZS5mPWZ1bmN0aW9uKGEpe2EuX19sb2FkZWR8fChhLl9fbG9hZGVkPSEwLGEuaW1wb3J0JiYoYS5pbXBvcnQucmVhZHlTdGF0ZT0KImNvbXBsZXRlIiksYS5kaXNwYXRjaEV2ZW50KGIoYS5pbXBvcnQ/ImxvYWQiOiJlcnJvciIse2J1YmJsZXM6ITEsY2FuY2VsYWJsZTohMSxkZXRhaWw6dm9pZCAwfSkpKX07ay5wcm90b3R5cGUuSmE9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcztxKGEsZnVuY3Rpb24oYSl7cmV0dXJuIHEoYS5hZGRlZE5vZGVzLGZ1bmN0aW9uKGEpe2EmJmEubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERSYmKGgoYSk/Yi5nKGEpOmIubG9hZEltcG9ydHMoYSkpfSl9KX07dmFyIHZhPW51bGw7aWYoTSl4PW0oZG9jdW1lbnQsImxpbmtbcmVsPWltcG9ydF0iKSxxKHgsZnVuY3Rpb24oYSl7YS5pbXBvcnQmJiJsb2FkaW5nIj09PWEuaW1wb3J0LnJlYWR5U3RhdGV8fChhLl9fbG9hZGVkPSEwKX0pLHg9ZnVuY3Rpb24oYSl7YT1hLnRhcmdldDtoKGEpJiYoYS5fX2xvYWRlZD0hMCl9LGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLHgsITApLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIiwKeCwhMCk7ZWxzZXt2YXIgWD1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE5vZGUucHJvdG90eXBlLCJiYXNlVVJJIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KCghWHx8WC5jb25maWd1cmFibGU/Tm9kZTpFbGVtZW50KS5wcm90b3R5cGUsImJhc2VVUkkiLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgYT1oKHRoaXMpP3RoaXM6Yyh0aGlzKTtyZXR1cm4gYT9hLmhyZWY6WCYmWC5nZXQ/WC5nZXQuY2FsbCh0aGlzKTooZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiYmFzZSIpfHx3aW5kb3cubG9jYXRpb24pLmhyZWZ9LGNvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxMaW5rRWxlbWVudC5wcm90b3R5cGUsImltcG9ydCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9faW1wb3J0fHxudWxsfSxjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMH0pO2UoZnVuY3Rpb24oKXt2YT1uZXcga30pfWYoZnVuY3Rpb24oKXtyZXR1cm4gZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChiKCJIVE1MSW1wb3J0c0xvYWRlZCIsCntjYW5jZWxhYmxlOiEwLGJ1YmJsZXM6ITAsZGV0YWlsOnZvaWQgMH0pKX0pO2EudXNlTmF0aXZlPU07YS53aGVuUmVhZHk9ZjthLmltcG9ydEZvckVsZW1lbnQ9YzthLmxvYWRJbXBvcnRzPWZ1bmN0aW9uKGEpe3ZhJiZ2YS5sb2FkSW1wb3J0cyhhKX19KSh3aW5kb3cuSFRNTEltcG9ydHM9d2luZG93LkhUTUxJbXBvcnRzfHx7fSk7LyoKCiBDb3B5cmlnaHQgKGMpIDIwMTQgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dAogVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQKIFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dAogQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28KIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiovCndpbmRvdy5XZWJDb21wb25lbnRzPXdpbmRvdy5XZWJDb21wb25lbnRzfHx7ZmxhZ3M6e319O3ZhciBDYT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdzY3JpcHRbc3JjKj0id2ViY29tcG9uZW50cy1saXRlLmpzIl0nKSxEYT0vd2MtKC4rKS8sdD17fTtpZighdC5ub09wdHMpe2xvY2F0aW9uLnNlYXJjaC5zbGljZSgxKS5zcGxpdCgiJiIpLmZvckVhY2goZnVuY3Rpb24oYSl7YT1hLnNwbGl0KCI9Iik7dmFyIGI7YVswXSYmKGI9YVswXS5tYXRjaChEYSkpJiYodFtiWzFdXT1hWzFdfHwhMCl9KTtpZihDYSlmb3IodmFyIEVhPTAsRmE9dm9pZCAwO0ZhPUNhLmF0dHJpYnV0ZXNbRWFdO0VhKyspInNyYyIhPT1GYS5uYW1lJiYodFtGYS5uYW1lXT1GYS52YWx1ZXx8ITApO2lmKHQubG9nJiZ0LmxvZy5zcGxpdCl7dmFyIEdhPXQubG9nLnNwbGl0KCIsIik7dC5sb2c9e307R2EuZm9yRWFjaChmdW5jdGlvbihhKXt0LmxvZ1thXT0hMH0pfWVsc2UgdC5sb2c9e319CndpbmRvdy5XZWJDb21wb25lbnRzLmZsYWdzPXQ7dmFyIEhhPXQuc2hhZHlkb207SGEmJih3aW5kb3cuU2hhZHlET009d2luZG93LlNoYWR5RE9NfHx7fSx3aW5kb3cuU2hhZHlET00uZm9yY2U9SGEpO3ZhciBJYT10LnJlZ2lzdGVyfHx0LmNlO0lhJiZ3aW5kb3cuY3VzdG9tRWxlbWVudHMmJih3aW5kb3cuY3VzdG9tRWxlbWVudHMuZm9yY2VQb2x5ZmlsbD1JYSk7LyoKCkNvcHlyaWdodCAoYykgMjAxNiBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuClRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQKVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQKVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0CkNvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvCnN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiovCmZ1bmN0aW9uIEphKCl7dGhpcy5wYT10aGlzLnJvb3Q9bnVsbDt0aGlzLlQ9ITE7dGhpcy5EPXRoaXMuUD10aGlzLmNhPXRoaXMuYXNzaWduZWRTbG90PXRoaXMuYXNzaWduZWROb2Rlcz10aGlzLkg9bnVsbDt0aGlzLmNoaWxkTm9kZXM9dGhpcy5uZXh0U2libGluZz10aGlzLnByZXZpb3VzU2libGluZz10aGlzLmxhc3RDaGlsZD10aGlzLmZpcnN0Q2hpbGQ9dGhpcy5wYXJlbnROb2RlPXRoaXMuSz12b2lkIDA7dGhpcy5rYT10aGlzLmxhPSExO3RoaXMuTz17fX1KYS5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJue319O2Z1bmN0aW9uIHUoYSl7YS5fX3NoYWR5fHwoYS5fX3NoYWR5PW5ldyBKYSk7cmV0dXJuIGEuX19zaGFkeX1mdW5jdGlvbiB2KGEpe3JldHVybiBhJiZhLl9fc2hhZHl9O3ZhciB3PXdpbmRvdy5TaGFkeURPTXx8e307dy5HYT0hKCFFbGVtZW50LnByb3RvdHlwZS5hdHRhY2hTaGFkb3d8fCFOb2RlLnByb3RvdHlwZS5nZXRSb290Tm9kZSk7dmFyIEthPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTm9kZS5wcm90b3R5cGUsImZpcnN0Q2hpbGQiKTt3Lm09ISEoS2EmJkthLmNvbmZpZ3VyYWJsZSYmS2EuZ2V0KTt3LmVhPXcuZm9yY2V8fCF3LkdhO3cuSj13Lm5vUGF0Y2h8fCExO3cub2E9dy5wcmVmZXJQZXJmb3JtYW5jZTtmdW5jdGlvbiB5KGEpe3JldHVybihhPXYoYSkpJiZ2b2lkIDAhPT1hLmZpcnN0Q2hpbGR9ZnVuY3Rpb24geihhKXtyZXR1cm4iU2hhZHlSb290Ij09PWEuemF9ZnVuY3Rpb24gTGEoYSl7cmV0dXJuKGE9KGE9dihhKSkmJmEucm9vdCkmJk1hKGEpfQp2YXIgTmE9RWxlbWVudC5wcm90b3R5cGUsT2E9TmEubWF0Y2hlc3x8TmEubWF0Y2hlc1NlbGVjdG9yfHxOYS5tb3pNYXRjaGVzU2VsZWN0b3J8fE5hLm1zTWF0Y2hlc1NlbGVjdG9yfHxOYS5vTWF0Y2hlc1NlbGVjdG9yfHxOYS53ZWJraXRNYXRjaGVzU2VsZWN0b3IsUGE9ZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIiIpLFFhPTAsUmE9W107KG5ldyBNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uKCl7Zm9yKDtSYS5sZW5ndGg7KXRyeXtSYS5zaGlmdCgpKCl9Y2F0Y2goYSl7dGhyb3cgUGEudGV4dENvbnRlbnQ9UWErKyxhO319KSkub2JzZXJ2ZShQYSx7Y2hhcmFjdGVyRGF0YTohMH0pO2Z1bmN0aW9uIFNhKGEpe1JhLnB1c2goYSk7UGEudGV4dENvbnRlbnQ9UWErK312YXIgVGE9ISFkb2N1bWVudC5jb250YWlucztmdW5jdGlvbiBVYShhLGIpe2Zvcig7Yjspe2lmKGI9PWEpcmV0dXJuITA7Yj1iLl9fc2hhZHlfcGFyZW50Tm9kZX1yZXR1cm4hMX0KZnVuY3Rpb24gVmEoYSl7Zm9yKHZhciBiPWEubGVuZ3RoLTE7MDw9YjtiLS0pe3ZhciBjPWFbYl0sZD1jLmdldEF0dHJpYnV0ZSgiaWQiKXx8Yy5nZXRBdHRyaWJ1dGUoIm5hbWUiKTtkJiYibGVuZ3RoIiE9PWQmJmlzTmFOKGQpJiYoYVtkXT1jKX1hLml0ZW09ZnVuY3Rpb24oYil7cmV0dXJuIGFbYl19O2EubmFtZWRJdGVtPWZ1bmN0aW9uKGIpe2lmKCJsZW5ndGgiIT09YiYmaXNOYU4oYikmJmFbYl0pcmV0dXJuIGFbYl07Zm9yKHZhciBjPWlhKGEpLGQ9Yy5uZXh0KCk7IWQuZG9uZTtkPWMubmV4dCgpKWlmKGQ9ZC52YWx1ZSwoZC5nZXRBdHRyaWJ1dGUoImlkIil8fGQuZ2V0QXR0cmlidXRlKCJuYW1lIikpPT1iKXJldHVybiBkO3JldHVybiBudWxsfTtyZXR1cm4gYX0KZnVuY3Rpb24gQShhLGIsYyxkKXtjPXZvaWQgMD09PWM/IiI6Yztmb3IodmFyIGUgaW4gYil7dmFyIGY9YltlXTtpZighKGQmJjA8PWQuaW5kZXhPZihlKSkpe2YuY29uZmlndXJhYmxlPSEwO3ZhciBnPWMrZTtpZihmLnZhbHVlKWFbZ109Zi52YWx1ZTtlbHNlIHRyeXtPYmplY3QuZGVmaW5lUHJvcGVydHkoYSxnLGYpfWNhdGNoKGgpe319fX1mdW5jdGlvbiBCKGEpe3ZhciBiPXt9O09iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGEpLmZvckVhY2goZnVuY3Rpb24oYyl7YltjXT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGEsYyl9KTtyZXR1cm4gYn07dmFyIFdhPVtdLFhhO2Z1bmN0aW9uIFlhKGEpe1hhfHwoWGE9ITAsU2EoWmEpKTtXYS5wdXNoKGEpfWZ1bmN0aW9uIFphKCl7WGE9ITE7Zm9yKHZhciBhPSEhV2EubGVuZ3RoO1dhLmxlbmd0aDspV2Euc2hpZnQoKSgpO3JldHVybiBhfVphLmxpc3Q9V2E7ZnVuY3Rpb24gJGEoKXt0aGlzLmE9ITE7dGhpcy5hZGRlZE5vZGVzPVtdO3RoaXMucmVtb3ZlZE5vZGVzPVtdO3RoaXMuUz1uZXcgU2V0fWZ1bmN0aW9uIGFiKGEpe2EuYXx8KGEuYT0hMCxTYShmdW5jdGlvbigpe2EuZmx1c2goKX0pKX0kYS5wcm90b3R5cGUuZmx1c2g9ZnVuY3Rpb24oKXtpZih0aGlzLmEpe3RoaXMuYT0hMTt2YXIgYT10aGlzLnRha2VSZWNvcmRzKCk7YS5sZW5ndGgmJnRoaXMuUy5mb3JFYWNoKGZ1bmN0aW9uKGIpe2IoYSl9KX19OyRhLnByb3RvdHlwZS50YWtlUmVjb3Jkcz1mdW5jdGlvbigpe2lmKHRoaXMuYWRkZWROb2Rlcy5sZW5ndGh8fHRoaXMucmVtb3ZlZE5vZGVzLmxlbmd0aCl7dmFyIGE9W3thZGRlZE5vZGVzOnRoaXMuYWRkZWROb2RlcyxyZW1vdmVkTm9kZXM6dGhpcy5yZW1vdmVkTm9kZXN9XTt0aGlzLmFkZGVkTm9kZXM9W107dGhpcy5yZW1vdmVkTm9kZXM9W107cmV0dXJuIGF9cmV0dXJuW119OwpmdW5jdGlvbiBiYihhLGIpe3ZhciBjPXUoYSk7Yy5IfHwoYy5IPW5ldyAkYSk7Yy5ILlMuYWRkKGIpO3ZhciBkPWMuSDtyZXR1cm57eWE6YixGOmQsQWE6YSx0YWtlUmVjb3JkczpmdW5jdGlvbigpe3JldHVybiBkLnRha2VSZWNvcmRzKCl9fX1mdW5jdGlvbiBjYihhKXt2YXIgYj1hJiZhLkY7YiYmKGIuUy5kZWxldGUoYS55YSksYi5TLnNpemV8fCh1KGEuQWEpLkg9bnVsbCkpfQpmdW5jdGlvbiBkYihhLGIpe3ZhciBjPWIuZ2V0Um9vdE5vZGUoKTtyZXR1cm4gYS5tYXAoZnVuY3Rpb24oYSl7dmFyIGI9Yz09PWEudGFyZ2V0LmdldFJvb3ROb2RlKCk7aWYoYiYmYS5hZGRlZE5vZGVzKXtpZihiPUFycmF5LmZyb20oYS5hZGRlZE5vZGVzKS5maWx0ZXIoZnVuY3Rpb24oYSl7cmV0dXJuIGM9PT1hLmdldFJvb3ROb2RlKCl9KSxiLmxlbmd0aClyZXR1cm4gYT1PYmplY3QuY3JlYXRlKGEpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShhLCJhZGRlZE5vZGVzIix7dmFsdWU6Yixjb25maWd1cmFibGU6ITB9KSxhfWVsc2UgaWYoYilyZXR1cm4gYX0pLmZpbHRlcihmdW5jdGlvbihhKXtyZXR1cm4gYX0pfTt2YXIgZWI9L1smXHUwMEEwIl0vZyxmYj0vWyZcdTAwQTA8Pl0vZztmdW5jdGlvbiBnYihhKXtzd2l0Y2goYSl7Y2FzZSAiJiI6cmV0dXJuIiZhbXA7IjtjYXNlICI8IjpyZXR1cm4iJmx0OyI7Y2FzZSAiPiI6cmV0dXJuIiZndDsiO2Nhc2UgJyInOnJldHVybiImcXVvdDsiO2Nhc2UgIlx1MDBhMCI6cmV0dXJuIiZuYnNwOyJ9fWZ1bmN0aW9uIGhiKGEpe2Zvcih2YXIgYj17fSxjPTA7YzxhLmxlbmd0aDtjKyspYlthW2NdXT0hMDtyZXR1cm4gYn12YXIgaWI9aGIoImFyZWEgYmFzZSBiciBjb2wgY29tbWFuZCBlbWJlZCBociBpbWcgaW5wdXQga2V5Z2VuIGxpbmsgbWV0YSBwYXJhbSBzb3VyY2UgdHJhY2sgd2JyIi5zcGxpdCgiICIpKSxqYj1oYigic3R5bGUgc2NyaXB0IHhtcCBpZnJhbWUgbm9lbWJlZCBub2ZyYW1lcyBwbGFpbnRleHQgbm9zY3JpcHQiLnNwbGl0KCIgIikpOwpmdW5jdGlvbiBrYihhLGIpeyJ0ZW1wbGF0ZSI9PT1hLmxvY2FsTmFtZSYmKGE9YS5jb250ZW50KTtmb3IodmFyIGM9IiIsZD1iP2IoYSk6YS5jaGlsZE5vZGVzLGU9MCxmPWQubGVuZ3RoLGc9dm9pZCAwO2U8ZiYmKGc9ZFtlXSk7ZSsrKXthOnt2YXIgaD1nO3ZhciBrPWEsbD1iO3N3aXRjaChoLm5vZGVUeXBlKXtjYXNlIE5vZGUuRUxFTUVOVF9OT0RFOms9aC5sb2NhbE5hbWU7Zm9yKHZhciBtPSI8IitrLHE9aC5hdHRyaWJ1dGVzLHg9MCxNO009cVt4XTt4KyspbSs9IiAiK00ubmFtZSsnPSInK00udmFsdWUucmVwbGFjZShlYixnYikrJyInO20rPSI+IjtoPWliW2tdP206bStrYihoLGwpKyI8LyIraysiPiI7YnJlYWsgYTtjYXNlIE5vZGUuVEVYVF9OT0RFOmg9aC5kYXRhO2g9ayYmamJbay5sb2NhbE5hbWVdP2g6aC5yZXBsYWNlKGZiLGdiKTticmVhayBhO2Nhc2UgTm9kZS5DT01NRU5UX05PREU6aD0iXHgzYyEtLSIraC5kYXRhKyItLVx4M2UiO2JyZWFrIGE7ZGVmYXVsdDp0aHJvdyB3aW5kb3cuY29uc29sZS5lcnJvcihoKSwKRXJyb3IoIm5vdCBpbXBsZW1lbnRlZCIpO319Yys9aH1yZXR1cm4gY307dmFyIHBiPXcubSxxYj17cXVlcnlTZWxlY3RvcjpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5fX3NoYWR5X25hdGl2ZV9xdWVyeVNlbGVjdG9yKGEpfSxxdWVyeVNlbGVjdG9yQWxsOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLl9fc2hhZHlfbmF0aXZlX3F1ZXJ5U2VsZWN0b3JBbGwoYSl9fSxyYj17fTtmdW5jdGlvbiBzYihhKXtyYlthXT1mdW5jdGlvbihiKXtyZXR1cm4gYlsiX19zaGFkeV9uYXRpdmVfIithXX19ZnVuY3Rpb24gdGIoYSxiKXtBKGEsYiwiX19zaGFkeV9uYXRpdmVfIik7Zm9yKHZhciBjIGluIGIpc2IoYyl9ZnVuY3Rpb24gRChhLGIpe2I9dm9pZCAwPT09Yj9bXTpiO2Zvcih2YXIgYz0wO2M8Yi5sZW5ndGg7YysrKXt2YXIgZD1iW2NdLGU9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihhLGQpO2UmJihPYmplY3QuZGVmaW5lUHJvcGVydHkoYSwiX19zaGFkeV9uYXRpdmVfIitkLGUpLGUudmFsdWU/cWJbZF18fChxYltkXT1lLnZhbHVlKTpzYihkKSl9fQp2YXIgRT1kb2N1bWVudC5jcmVhdGVUcmVlV2Fsa2VyKGRvY3VtZW50LE5vZGVGaWx0ZXIuU0hPV19BTEwsbnVsbCwhMSksRj1kb2N1bWVudC5jcmVhdGVUcmVlV2Fsa2VyKGRvY3VtZW50LE5vZGVGaWx0ZXIuU0hPV19FTEVNRU5ULG51bGwsITEpLHViPWRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCgiaW5lcnQiKTtmdW5jdGlvbiB2YihhKXtmb3IodmFyIGI7Yj1hLl9fc2hhZHlfbmF0aXZlX2ZpcnN0Q2hpbGQ7KWEuX19zaGFkeV9uYXRpdmVfcmVtb3ZlQ2hpbGQoYil9dmFyIHdiPVsiZmlyc3RFbGVtZW50Q2hpbGQiLCJsYXN0RWxlbWVudENoaWxkIiwiY2hpbGRyZW4iLCJjaGlsZEVsZW1lbnRDb3VudCJdLHhiPVsicXVlcnlTZWxlY3RvciIsInF1ZXJ5U2VsZWN0b3JBbGwiXTsKZnVuY3Rpb24geWIoKXt2YXIgYT1bImRpc3BhdGNoRXZlbnQiLCJhZGRFdmVudExpc3RlbmVyIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciJdO3dpbmRvdy5FdmVudFRhcmdldD9EKHdpbmRvdy5FdmVudFRhcmdldC5wcm90b3R5cGUsYSk6KEQoTm9kZS5wcm90b3R5cGUsYSksRChXaW5kb3cucHJvdG90eXBlLGEpKTtwYj9EKE5vZGUucHJvdG90eXBlLCJwYXJlbnROb2RlIGZpcnN0Q2hpbGQgbGFzdENoaWxkIHByZXZpb3VzU2libGluZyBuZXh0U2libGluZyBjaGlsZE5vZGVzIHBhcmVudEVsZW1lbnQgdGV4dENvbnRlbnQiLnNwbGl0KCIgIikpOnRiKE5vZGUucHJvdG90eXBlLHtwYXJlbnROb2RlOntnZXQ6ZnVuY3Rpb24oKXtFLmN1cnJlbnROb2RlPXRoaXM7cmV0dXJuIEUucGFyZW50Tm9kZSgpfX0sZmlyc3RDaGlsZDp7Z2V0OmZ1bmN0aW9uKCl7RS5jdXJyZW50Tm9kZT10aGlzO3JldHVybiBFLmZpcnN0Q2hpbGQoKX19LGxhc3RDaGlsZDp7Z2V0OmZ1bmN0aW9uKCl7RS5jdXJyZW50Tm9kZT0KdGhpcztyZXR1cm4gRS5sYXN0Q2hpbGQoKX19LHByZXZpb3VzU2libGluZzp7Z2V0OmZ1bmN0aW9uKCl7RS5jdXJyZW50Tm9kZT10aGlzO3JldHVybiBFLnByZXZpb3VzU2libGluZygpfX0sbmV4dFNpYmxpbmc6e2dldDpmdW5jdGlvbigpe0UuY3VycmVudE5vZGU9dGhpcztyZXR1cm4gRS5uZXh0U2libGluZygpfX0sY2hpbGROb2Rlczp7Z2V0OmZ1bmN0aW9uKCl7dmFyIGE9W107RS5jdXJyZW50Tm9kZT10aGlzO2Zvcih2YXIgYz1FLmZpcnN0Q2hpbGQoKTtjOylhLnB1c2goYyksYz1FLm5leHRTaWJsaW5nKCk7cmV0dXJuIGF9fSxwYXJlbnRFbGVtZW50OntnZXQ6ZnVuY3Rpb24oKXtGLmN1cnJlbnROb2RlPXRoaXM7cmV0dXJuIEYucGFyZW50Tm9kZSgpfX0sdGV4dENvbnRlbnQ6e2dldDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLm5vZGVUeXBlKXtjYXNlIE5vZGUuRUxFTUVOVF9OT0RFOmNhc2UgTm9kZS5ET0NVTUVOVF9GUkFHTUVOVF9OT0RFOmZvcih2YXIgYT1kb2N1bWVudC5jcmVhdGVUcmVlV2Fsa2VyKHRoaXMsCk5vZGVGaWx0ZXIuU0hPV19URVhULG51bGwsITEpLGM9IiIsZDtkPWEubmV4dE5vZGUoKTspYys9ZC5ub2RlVmFsdWU7cmV0dXJuIGM7ZGVmYXVsdDpyZXR1cm4gdGhpcy5ub2RlVmFsdWV9fSxzZXQ6ZnVuY3Rpb24oYSl7aWYoInVuZGVmaW5lZCI9PT10eXBlb2YgYXx8bnVsbD09PWEpYT0iIjtzd2l0Y2godGhpcy5ub2RlVHlwZSl7Y2FzZSBOb2RlLkVMRU1FTlRfTk9ERTpjYXNlIE5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERTp2Yih0aGlzKTsoMDxhLmxlbmd0aHx8dGhpcy5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFKSYmdGhpcy5fX3NoYWR5X25hdGl2ZV9pbnNlcnRCZWZvcmUoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoYSksdm9pZCAwKTticmVhaztkZWZhdWx0OnRoaXMubm9kZVZhbHVlPWF9fX19KTtEKE5vZGUucHJvdG90eXBlLCJhcHBlbmRDaGlsZCBpbnNlcnRCZWZvcmUgcmVtb3ZlQ2hpbGQgcmVwbGFjZUNoaWxkIGNsb25lTm9kZSBjb250YWlucyIuc3BsaXQoIiAiKSk7CmE9e2ZpcnN0RWxlbWVudENoaWxkOntnZXQ6ZnVuY3Rpb24oKXtGLmN1cnJlbnROb2RlPXRoaXM7cmV0dXJuIEYuZmlyc3RDaGlsZCgpfX0sbGFzdEVsZW1lbnRDaGlsZDp7Z2V0OmZ1bmN0aW9uKCl7Ri5jdXJyZW50Tm9kZT10aGlzO3JldHVybiBGLmxhc3RDaGlsZCgpfX0sY2hpbGRyZW46e2dldDpmdW5jdGlvbigpe3ZhciBhPVtdO0YuY3VycmVudE5vZGU9dGhpcztmb3IodmFyIGM9Ri5maXJzdENoaWxkKCk7YzspYS5wdXNoKGMpLGM9Ri5uZXh0U2libGluZygpO3JldHVybiBWYShhKX19LGNoaWxkRWxlbWVudENvdW50OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jaGlsZHJlbj90aGlzLmNoaWxkcmVuLmxlbmd0aDowfX19O3BiPyhEKEVsZW1lbnQucHJvdG90eXBlLHdiKSxEKEVsZW1lbnQucHJvdG90eXBlLFsicHJldmlvdXNFbGVtZW50U2libGluZyIsIm5leHRFbGVtZW50U2libGluZyIsImlubmVySFRNTCJdKSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEhUTUxFbGVtZW50LnByb3RvdHlwZSwKImNoaWxkcmVuIikmJkQoSFRNTEVsZW1lbnQucHJvdG90eXBlLFsiY2hpbGRyZW4iXSksT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihIVE1MRWxlbWVudC5wcm90b3R5cGUsImlubmVySFRNTCIpJiZEKEhUTUxFbGVtZW50LnByb3RvdHlwZSxbImlubmVySFRNTCJdKSk6KHRiKEVsZW1lbnQucHJvdG90eXBlLGEpLHRiKEVsZW1lbnQucHJvdG90eXBlLHtwcmV2aW91c0VsZW1lbnRTaWJsaW5nOntnZXQ6ZnVuY3Rpb24oKXtGLmN1cnJlbnROb2RlPXRoaXM7cmV0dXJuIEYucHJldmlvdXNTaWJsaW5nKCl9fSxuZXh0RWxlbWVudFNpYmxpbmc6e2dldDpmdW5jdGlvbigpe0YuY3VycmVudE5vZGU9dGhpcztyZXR1cm4gRi5uZXh0U2libGluZygpfX0saW5uZXJIVE1MOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4ga2IodGhpcyxmdW5jdGlvbihhKXtyZXR1cm4gYS5fX3NoYWR5X25hdGl2ZV9jaGlsZE5vZGVzfSl9LHNldDpmdW5jdGlvbihhKXt2YXIgYj0idGVtcGxhdGUiPT09dGhpcy5sb2NhbE5hbWU/CnRoaXMuY29udGVudDp0aGlzO3ZiKGIpO3ZhciBkPXRoaXMubG9jYWxOYW1lfHwiZGl2IjtkPXRoaXMubmFtZXNwYWNlVVJJJiZ0aGlzLm5hbWVzcGFjZVVSSSE9PXViLm5hbWVzcGFjZVVSST91Yi5jcmVhdGVFbGVtZW50TlModGhpcy5uYW1lc3BhY2VVUkksZCk6dWIuY3JlYXRlRWxlbWVudChkKTtkLmlubmVySFRNTD1hO2ZvcihhPSJ0ZW1wbGF0ZSI9PT10aGlzLmxvY2FsTmFtZT9kLmNvbnRlbnQ6ZDtkPWEuX19zaGFkeV9uYXRpdmVfZmlyc3RDaGlsZDspYi5fX3NoYWR5X25hdGl2ZV9pbnNlcnRCZWZvcmUoZCx2b2lkIDApfX19KSk7RChFbGVtZW50LnByb3RvdHlwZSwic2V0QXR0cmlidXRlIGdldEF0dHJpYnV0ZSBoYXNBdHRyaWJ1dGUgcmVtb3ZlQXR0cmlidXRlIGZvY3VzIGJsdXIiLnNwbGl0KCIgIikpO0QoRWxlbWVudC5wcm90b3R5cGUseGIpO0QoSFRNTEVsZW1lbnQucHJvdG90eXBlLFsiZm9jdXMiLCJibHVyIiwiY29udGFpbnMiXSk7cGImJkQoSFRNTEVsZW1lbnQucHJvdG90eXBlLApbInBhcmVudEVsZW1lbnQiLCJjaGlsZHJlbiIsImlubmVySFRNTCJdKTt3aW5kb3cuSFRNTFRlbXBsYXRlRWxlbWVudCYmRCh3aW5kb3cuSFRNTFRlbXBsYXRlRWxlbWVudC5wcm90b3R5cGUsWyJpbm5lckhUTUwiXSk7cGI/RChEb2N1bWVudEZyYWdtZW50LnByb3RvdHlwZSx3Yik6dGIoRG9jdW1lbnRGcmFnbWVudC5wcm90b3R5cGUsYSk7RChEb2N1bWVudEZyYWdtZW50LnByb3RvdHlwZSx4Yik7cGI/KEQoRG9jdW1lbnQucHJvdG90eXBlLHdiKSxEKERvY3VtZW50LnByb3RvdHlwZSxbImFjdGl2ZUVsZW1lbnQiXSkpOnRiKERvY3VtZW50LnByb3RvdHlwZSxhKTtEKERvY3VtZW50LnByb3RvdHlwZSxbImltcG9ydE5vZGUiLCJnZXRFbGVtZW50QnlJZCJdKTtEKERvY3VtZW50LnByb3RvdHlwZSx4Yil9O3ZhciB6Yj1CKHtnZXQgY2hpbGROb2Rlcygpe3JldHVybiB0aGlzLl9fc2hhZHlfY2hpbGROb2Rlc30sZ2V0IGZpcnN0Q2hpbGQoKXtyZXR1cm4gdGhpcy5fX3NoYWR5X2ZpcnN0Q2hpbGR9LGdldCBsYXN0Q2hpbGQoKXtyZXR1cm4gdGhpcy5fX3NoYWR5X2xhc3RDaGlsZH0sZ2V0IHRleHRDb250ZW50KCl7cmV0dXJuIHRoaXMuX19zaGFkeV90ZXh0Q29udGVudH0sc2V0IHRleHRDb250ZW50KGEpe3RoaXMuX19zaGFkeV90ZXh0Q29udGVudD1hfSxnZXQgY2hpbGRFbGVtZW50Q291bnQoKXtyZXR1cm4gdGhpcy5fX3NoYWR5X2NoaWxkRWxlbWVudENvdW50fSxnZXQgY2hpbGRyZW4oKXtyZXR1cm4gdGhpcy5fX3NoYWR5X2NoaWxkcmVufSxnZXQgZmlyc3RFbGVtZW50Q2hpbGQoKXtyZXR1cm4gdGhpcy5fX3NoYWR5X2ZpcnN0RWxlbWVudENoaWxkfSxnZXQgbGFzdEVsZW1lbnRDaGlsZCgpe3JldHVybiB0aGlzLl9fc2hhZHlfbGFzdEVsZW1lbnRDaGlsZH0sZ2V0IGlubmVySFRNTCgpe3JldHVybiB0aGlzLl9fc2hhZHlfaW5uZXJIVE1MfSwKc2V0IGlubmVySFRNTChhKXtyZXR1cm4gdGhpcy5fX3NoYWR5X2lubmVySFRNTD1hfSxnZXQgc2hhZG93Um9vdCgpe3JldHVybiB0aGlzLl9fc2hhZHlfc2hhZG93Um9vdH19KSxBYj1CKHtnZXQgcGFyZW50RWxlbWVudCgpe3JldHVybiB0aGlzLl9fc2hhZHlfcGFyZW50RWxlbWVudH0sZ2V0IHBhcmVudE5vZGUoKXtyZXR1cm4gdGhpcy5fX3NoYWR5X3BhcmVudE5vZGV9LGdldCBuZXh0U2libGluZygpe3JldHVybiB0aGlzLl9fc2hhZHlfbmV4dFNpYmxpbmd9LGdldCBwcmV2aW91c1NpYmxpbmcoKXtyZXR1cm4gdGhpcy5fX3NoYWR5X3ByZXZpb3VzU2libGluZ30sZ2V0IG5leHRFbGVtZW50U2libGluZygpe3JldHVybiB0aGlzLl9fc2hhZHlfbmV4dEVsZW1lbnRTaWJsaW5nfSxnZXQgcHJldmlvdXNFbGVtZW50U2libGluZygpe3JldHVybiB0aGlzLl9fc2hhZHlfcHJldmlvdXNFbGVtZW50U2libGluZ30sZ2V0IGNsYXNzTmFtZSgpe3JldHVybiB0aGlzLl9fc2hhZHlfY2xhc3NOYW1lfSwKc2V0IGNsYXNzTmFtZShhKXtyZXR1cm4gdGhpcy5fX3NoYWR5X2NsYXNzTmFtZT1hfX0pLEJiO2ZvcihCYiBpbiB6Yil6YltCYl0uZW51bWVyYWJsZT0hMTtmb3IodmFyIENiIGluIEFiKUFiW0NiXS5lbnVtZXJhYmxlPSExO3ZhciBEYj13Lm18fHcuSixFYj1EYj9mdW5jdGlvbigpe306ZnVuY3Rpb24oYSl7dmFyIGI9dShhKTtiLmxhfHwoYi5sYT0hMCxBKGEsQWIpKX0sRmI9RGI/ZnVuY3Rpb24oKXt9OmZ1bmN0aW9uKGEpe3ZhciBiPXUoYSk7Yi5rYXx8KGIua2E9ITAsQShhLHpiKSl9O3ZhciBHYj0iX19ldmVudFdyYXBwZXJzIitEYXRlLm5vdygpLEhiPWZ1bmN0aW9uKCl7dmFyIGE9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihFdmVudC5wcm90b3R5cGUsImNvbXBvc2VkIik7cmV0dXJuIGE/ZnVuY3Rpb24oYil7cmV0dXJuIGEuZ2V0LmNhbGwoYil9Om51bGx9KCksSWI9e2JsdXI6ITAsZm9jdXM6ITAsZm9jdXNpbjohMCxmb2N1c291dDohMCxjbGljazohMCxkYmxjbGljazohMCxtb3VzZWRvd246ITAsbW91c2VlbnRlcjohMCxtb3VzZWxlYXZlOiEwLG1vdXNlbW92ZTohMCxtb3VzZW91dDohMCxtb3VzZW92ZXI6ITAsbW91c2V1cDohMCx3aGVlbDohMCxiZWZvcmVpbnB1dDohMCxpbnB1dDohMCxrZXlkb3duOiEwLGtleXVwOiEwLGNvbXBvc2l0aW9uc3RhcnQ6ITAsY29tcG9zaXRpb251cGRhdGU6ITAsY29tcG9zaXRpb25lbmQ6ITAsdG91Y2hzdGFydDohMCx0b3VjaGVuZDohMCx0b3VjaG1vdmU6ITAsdG91Y2hjYW5jZWw6ITAscG9pbnRlcm92ZXI6ITAsCnBvaW50ZXJlbnRlcjohMCxwb2ludGVyZG93bjohMCxwb2ludGVybW92ZTohMCxwb2ludGVydXA6ITAscG9pbnRlcmNhbmNlbDohMCxwb2ludGVyb3V0OiEwLHBvaW50ZXJsZWF2ZTohMCxnb3Rwb2ludGVyY2FwdHVyZTohMCxsb3N0cG9pbnRlcmNhcHR1cmU6ITAsZHJhZ3N0YXJ0OiEwLGRyYWc6ITAsZHJhZ2VudGVyOiEwLGRyYWdsZWF2ZTohMCxkcmFnb3ZlcjohMCxkcm9wOiEwLGRyYWdlbmQ6ITAsRE9NQWN0aXZhdGU6ITAsRE9NRm9jdXNJbjohMCxET01Gb2N1c091dDohMCxrZXlwcmVzczohMH0sSmI9e0RPTUF0dHJNb2RpZmllZDohMCxET01BdHRyaWJ1dGVOYW1lQ2hhbmdlZDohMCxET01DaGFyYWN0ZXJEYXRhTW9kaWZpZWQ6ITAsRE9NRWxlbWVudE5hbWVDaGFuZ2VkOiEwLERPTU5vZGVJbnNlcnRlZDohMCxET01Ob2RlSW5zZXJ0ZWRJbnRvRG9jdW1lbnQ6ITAsRE9NTm9kZVJlbW92ZWQ6ITAsRE9NTm9kZVJlbW92ZWRGcm9tRG9jdW1lbnQ6ITAsRE9NU3VidHJlZU1vZGlmaWVkOiEwfTsKZnVuY3Rpb24gS2IoYSl7cmV0dXJuIGEgaW5zdGFuY2VvZiBOb2RlP2EuX19zaGFkeV9nZXRSb290Tm9kZSgpOmF9ZnVuY3Rpb24gTGIoYSxiKXt2YXIgYz1bXSxkPWE7Zm9yKGE9S2IoYSk7ZDspYy5wdXNoKGQpLGQuX19zaGFkeV9hc3NpZ25lZFNsb3Q/ZD1kLl9fc2hhZHlfYXNzaWduZWRTbG90OmQubm9kZVR5cGU9PT1Ob2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREUmJmQuaG9zdCYmKGJ8fGQhPT1hKT9kPWQuaG9zdDpkPWQuX19zaGFkeV9wYXJlbnROb2RlO2NbYy5sZW5ndGgtMV09PT1kb2N1bWVudCYmYy5wdXNoKHdpbmRvdyk7cmV0dXJuIGN9ZnVuY3Rpb24gTWIoYSl7YS5fX2NvbXBvc2VkUGF0aHx8KGEuX19jb21wb3NlZFBhdGg9TGIoYS50YXJnZXQsITApKTtyZXR1cm4gYS5fX2NvbXBvc2VkUGF0aH0KZnVuY3Rpb24gTmIoYSxiKXtpZigheilyZXR1cm4gYTthPUxiKGEsITApO2Zvcih2YXIgYz0wLGQsZT12b2lkIDAsZixnPXZvaWQgMDtjPGIubGVuZ3RoO2MrKylpZihkPWJbY10sZj1LYihkKSxmIT09ZSYmKGc9YS5pbmRleE9mKGYpLGU9ZiksIXooZil8fC0xPGcpcmV0dXJuIGR9ZnVuY3Rpb24gT2IoYSl7ZnVuY3Rpb24gYihiLGQpe2I9bmV3IGEoYixkKTtiLl9fY29tcG9zZWQ9ZCYmISFkLmNvbXBvc2VkO3JldHVybiBifWIuX19wcm90b19fPWE7Yi5wcm90b3R5cGU9YS5wcm90b3R5cGU7cmV0dXJuIGJ9dmFyIFBiPXtmb2N1czohMCxibHVyOiEwfTtmdW5jdGlvbiBRYihhKXtyZXR1cm4gYS5fX3RhcmdldCE9PWEudGFyZ2V0fHxhLl9fcmVsYXRlZFRhcmdldCE9PWEucmVsYXRlZFRhcmdldH0KZnVuY3Rpb24gUmIoYSxiLGMpe2lmKGM9Yi5fX2hhbmRsZXJzJiZiLl9faGFuZGxlcnNbYS50eXBlXSYmYi5fX2hhbmRsZXJzW2EudHlwZV1bY10pZm9yKHZhciBkPTAsZTsoZT1jW2RdKSYmKCFRYihhKXx8YS50YXJnZXQhPT1hLnJlbGF0ZWRUYXJnZXQpJiYoZS5jYWxsKGIsYSksIWEuX19pbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQpO2QrKyk7fQpmdW5jdGlvbiBTYihhKXt2YXIgYj1hLmNvbXBvc2VkUGF0aCgpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShhLCJjdXJyZW50VGFyZ2V0Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGR9LGNvbmZpZ3VyYWJsZTohMH0pO2Zvcih2YXIgYz1iLmxlbmd0aC0xOzA8PWM7Yy0tKXt2YXIgZD1iW2NdO1JiKGEsZCwiY2FwdHVyZSIpO2lmKGEuWilyZXR1cm59T2JqZWN0LmRlZmluZVByb3BlcnR5KGEsImV2ZW50UGhhc2UiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gRXZlbnQuQVRfVEFSR0VUfX0pO3ZhciBlO2ZvcihjPTA7YzxiLmxlbmd0aDtjKyspe2Q9YltjXTt2YXIgZj12KGQpO2Y9ZiYmZi5yb290O2lmKDA9PT1jfHxmJiZmPT09ZSlpZihSYihhLGQsImJ1YmJsZSIpLGQhPT13aW5kb3cmJihlPWQuX19zaGFkeV9nZXRSb290Tm9kZSgpKSxhLlopYnJlYWt9fQpmdW5jdGlvbiBUYihhLGIsYyxkLGUsZil7Zm9yKHZhciBnPTA7ZzxhLmxlbmd0aDtnKyspe3ZhciBoPWFbZ10saz1oLnR5cGUsbD1oLmNhcHR1cmUsbT1oLm9uY2UscT1oLnBhc3NpdmU7aWYoYj09PWgubm9kZSYmYz09PWsmJmQ9PT1sJiZlPT09bSYmZj09PXEpcmV0dXJuIGd9cmV0dXJuLTF9CmZ1bmN0aW9uIFViKGEsYixjKXtpZihiKXt2YXIgZD10eXBlb2YgYjtpZigiZnVuY3Rpb24iPT09ZHx8Im9iamVjdCI9PT1kKWlmKCJvYmplY3QiIT09ZHx8Yi5oYW5kbGVFdmVudCYmImZ1bmN0aW9uIj09PXR5cGVvZiBiLmhhbmRsZUV2ZW50KXtpZihKYlthXSlyZXR1cm4gdGhpcy5fX3NoYWR5X25hdGl2ZV9hZGRFdmVudExpc3RlbmVyKGEsYixjKTtpZihjJiYib2JqZWN0Ij09PXR5cGVvZiBjKXt2YXIgZT0hIWMuY2FwdHVyZTt2YXIgZj0hIWMub25jZTt2YXIgZz0hIWMucGFzc2l2ZX1lbHNlIGU9ISFjLGc9Zj0hMTt2YXIgaD1jJiZjLiR8fHRoaXMsaz1iW0diXTtpZihrKXtpZigtMTxUYihrLGgsYSxlLGYsZykpcmV0dXJufWVsc2UgYltHYl09W107az1mdW5jdGlvbihlKXtmJiZ0aGlzLl9fc2hhZHlfcmVtb3ZlRXZlbnRMaXN0ZW5lcihhLGIsYyk7ZS5fX3RhcmdldHx8VmIoZSk7aWYoaCE9PXRoaXMpe3ZhciBnPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwiY3VycmVudFRhcmdldCIpOwpPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiY3VycmVudFRhcmdldCIse2dldDpmdW5jdGlvbigpe3JldHVybiBofSxjb25maWd1cmFibGU6ITB9KX1lLl9fcHJldmlvdXNDdXJyZW50VGFyZ2V0PWUuY3VycmVudFRhcmdldDtpZigheihoKXx8LTEhPWUuY29tcG9zZWRQYXRoKCkuaW5kZXhPZihoKSlpZihlLmNvbXBvc2VkfHwtMTxlLmNvbXBvc2VkUGF0aCgpLmluZGV4T2YoaCkpaWYoUWIoZSkmJmUudGFyZ2V0PT09ZS5yZWxhdGVkVGFyZ2V0KWUuZXZlbnRQaGFzZT09PUV2ZW50LkJVQkJMSU5HX1BIQVNFJiZlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO2Vsc2UgaWYoZS5ldmVudFBoYXNlPT09RXZlbnQuQ0FQVFVSSU5HX1BIQVNFfHxlLmJ1YmJsZXN8fGUudGFyZ2V0PT09aHx8aCBpbnN0YW5jZW9mIFdpbmRvdyl7dmFyIGs9ImZ1bmN0aW9uIj09PWQ/Yi5jYWxsKGgsZSk6Yi5oYW5kbGVFdmVudCYmYi5oYW5kbGVFdmVudChlKTtoIT09dGhpcyYmKGc/KE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLAoiY3VycmVudFRhcmdldCIsZyksZz1udWxsKTpkZWxldGUgZS5jdXJyZW50VGFyZ2V0KTtyZXR1cm4ga319O2JbR2JdLnB1c2goe25vZGU6aCx0eXBlOmEsY2FwdHVyZTplLG9uY2U6ZixwYXNzaXZlOmcsWWE6a30pO1BiW2FdPyh0aGlzLl9faGFuZGxlcnM9dGhpcy5fX2hhbmRsZXJzfHx7fSx0aGlzLl9faGFuZGxlcnNbYV09dGhpcy5fX2hhbmRsZXJzW2FdfHx7Y2FwdHVyZTpbXSxidWJibGU6W119LHRoaXMuX19oYW5kbGVyc1thXVtlPyJjYXB0dXJlIjoiYnViYmxlIl0ucHVzaChrKSk6dGhpcy5fX3NoYWR5X25hdGl2ZV9hZGRFdmVudExpc3RlbmVyKGEsayxjKX19fQpmdW5jdGlvbiBXYihhLGIsYyl7aWYoYil7aWYoSmJbYV0pcmV0dXJuIHRoaXMuX19zaGFkeV9uYXRpdmVfcmVtb3ZlRXZlbnRMaXN0ZW5lcihhLGIsYyk7aWYoYyYmIm9iamVjdCI9PT10eXBlb2YgYyl7dmFyIGQ9ISFjLmNhcHR1cmU7dmFyIGU9ISFjLm9uY2U7dmFyIGY9ISFjLnBhc3NpdmV9ZWxzZSBkPSEhYyxmPWU9ITE7dmFyIGc9YyYmYy4kfHx0aGlzLGg9dm9pZCAwO3ZhciBrPW51bGw7dHJ5e2s9YltHYl19Y2F0Y2gobCl7fWsmJihlPVRiKGssZyxhLGQsZSxmKSwtMTxlJiYoaD1rLnNwbGljZShlLDEpWzBdLllhLGsubGVuZ3RofHwoYltHYl09dm9pZCAwKSkpO3RoaXMuX19zaGFkeV9uYXRpdmVfcmVtb3ZlRXZlbnRMaXN0ZW5lcihhLGh8fGIsYyk7aCYmUGJbYV0mJnRoaXMuX19oYW5kbGVycyYmdGhpcy5fX2hhbmRsZXJzW2FdJiYoYT10aGlzLl9faGFuZGxlcnNbYV1bZD8iY2FwdHVyZSI6ImJ1YmJsZSJdLGg9YS5pbmRleE9mKGgpLC0xPGgmJmEuc3BsaWNlKGgsMSkpfX0KZnVuY3Rpb24gWGIoKXtmb3IodmFyIGEgaW4gUGIpd2luZG93Ll9fc2hhZHlfbmF0aXZlX2FkZEV2ZW50TGlzdGVuZXIoYSxmdW5jdGlvbihhKXthLl9fdGFyZ2V0fHwoVmIoYSksU2IoYSkpfSwhMCl9CnZhciBZYj1CKHtnZXQgY29tcG9zZWQoKXt2b2lkIDA9PT10aGlzLl9fY29tcG9zZWQmJihIYj90aGlzLl9fY29tcG9zZWQ9ImZvY3VzaW4iPT09dGhpcy50eXBlfHwiZm9jdXNvdXQiPT09dGhpcy50eXBlfHxIYih0aGlzKTohMSE9PXRoaXMuaXNUcnVzdGVkJiYodGhpcy5fX2NvbXBvc2VkPUliW3RoaXMudHlwZV0pKTtyZXR1cm4gdGhpcy5fX2NvbXBvc2VkfHwhMX0sY29tcG9zZWRQYXRoOmZ1bmN0aW9uKCl7dGhpcy5fX2NvbXBvc2VkUGF0aHx8KHRoaXMuX19jb21wb3NlZFBhdGg9TGIodGhpcy5fX3RhcmdldCx0aGlzLmNvbXBvc2VkKSk7cmV0dXJuIHRoaXMuX19jb21wb3NlZFBhdGh9LGdldCB0YXJnZXQoKXtyZXR1cm4gTmIodGhpcy5jdXJyZW50VGFyZ2V0fHx0aGlzLl9fcHJldmlvdXNDdXJyZW50VGFyZ2V0LHRoaXMuY29tcG9zZWRQYXRoKCkpfSxnZXQgcmVsYXRlZFRhcmdldCgpe2lmKCF0aGlzLl9fcmVsYXRlZFRhcmdldClyZXR1cm4gbnVsbDt0aGlzLl9fcmVsYXRlZFRhcmdldENvbXBvc2VkUGF0aHx8Cih0aGlzLl9fcmVsYXRlZFRhcmdldENvbXBvc2VkUGF0aD1MYih0aGlzLl9fcmVsYXRlZFRhcmdldCwhMCkpO3JldHVybiBOYih0aGlzLmN1cnJlbnRUYXJnZXR8fHRoaXMuX19wcmV2aW91c0N1cnJlbnRUYXJnZXQsdGhpcy5fX3JlbGF0ZWRUYXJnZXRDb21wb3NlZFBhdGgpfSxzdG9wUHJvcGFnYXRpb246ZnVuY3Rpb24oKXtFdmVudC5wcm90b3R5cGUuc3RvcFByb3BhZ2F0aW9uLmNhbGwodGhpcyk7dGhpcy5aPSEwfSxzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb246ZnVuY3Rpb24oKXtFdmVudC5wcm90b3R5cGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uLmNhbGwodGhpcyk7dGhpcy5aPXRoaXMuX19pbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ9ITB9fSk7CmZ1bmN0aW9uIFZiKGEpe2EuX190YXJnZXQ9YS50YXJnZXQ7YS5fX3JlbGF0ZWRUYXJnZXQ9YS5yZWxhdGVkVGFyZ2V0O2lmKHcubSl7dmFyIGI9T2JqZWN0LmdldFByb3RvdHlwZU9mKGEpO2lmKCFPYmplY3QuaGFzT3duUHJvcGVydHkoYiwiX19zaGFkeV9wYXRjaGVkUHJvdG8iKSl7dmFyIGM9T2JqZWN0LmNyZWF0ZShiKTtjLl9fc2hhZHlfc291cmNlUHJvdG89YjtBKGMsWWIpO2IuX19zaGFkeV9wYXRjaGVkUHJvdG89Y31hLl9fcHJvdG9fXz1iLl9fc2hhZHlfcGF0Y2hlZFByb3RvfWVsc2UgQShhLFliKX12YXIgWmI9T2IoRXZlbnQpLCRiPU9iKEN1c3RvbUV2ZW50KSxhYz1PYihNb3VzZUV2ZW50KTsKZnVuY3Rpb24gYmMoKXtpZighSGImJk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoRXZlbnQucHJvdG90eXBlLCJpc1RydXN0ZWQiKSl7dmFyIGE9ZnVuY3Rpb24oKXt2YXIgYT1uZXcgTW91c2VFdmVudCgiY2xpY2siLHtidWJibGVzOiEwLGNhbmNlbGFibGU6ITAsY29tcG9zZWQ6ITB9KTt0aGlzLl9fc2hhZHlfZGlzcGF0Y2hFdmVudChhKX07RWxlbWVudC5wcm90b3R5cGUuY2xpY2s/RWxlbWVudC5wcm90b3R5cGUuY2xpY2s9YTpIVE1MRWxlbWVudC5wcm90b3R5cGUuY2xpY2smJihIVE1MRWxlbWVudC5wcm90b3R5cGUuY2xpY2s9YSl9fXZhciBjYz1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhEb2N1bWVudC5wcm90b3R5cGUpLmZpbHRlcihmdW5jdGlvbihhKXtyZXR1cm4ib24iPT09YS5zdWJzdHJpbmcoMCwyKX0pO2Z1bmN0aW9uIGRjKGEsYil7cmV0dXJue2luZGV4OmEsTDpbXSxSOmJ9fQpmdW5jdGlvbiBlYyhhLGIsYyxkKXt2YXIgZT0wLGY9MCxnPTAsaD0wLGs9TWF0aC5taW4oYi1lLGQtZik7aWYoMD09ZSYmMD09ZilhOntmb3IoZz0wO2c8aztnKyspaWYoYVtnXSE9PWNbZ10pYnJlYWsgYTtnPWt9aWYoYj09YS5sZW5ndGgmJmQ9PWMubGVuZ3RoKXtoPWEubGVuZ3RoO2Zvcih2YXIgbD1jLmxlbmd0aCxtPTA7bTxrLWcmJmZjKGFbLS1oXSxjWy0tbF0pOyltKys7aD1tfWUrPWc7Zis9ZztiLT1oO2QtPWg7aWYoMD09Yi1lJiYwPT1kLWYpcmV0dXJuW107aWYoZT09Yil7Zm9yKGI9ZGMoZSwwKTtmPGQ7KWIuTC5wdXNoKGNbZisrXSk7cmV0dXJuW2JdfWlmKGY9PWQpcmV0dXJuW2RjKGUsYi1lKV07az1lO2c9ZjtkPWQtZysxO2g9Yi1rKzE7Yj1BcnJheShkKTtmb3IobD0wO2w8ZDtsKyspYltsXT1BcnJheShoKSxiW2xdWzBdPWw7Zm9yKGw9MDtsPGg7bCsrKWJbMF1bbF09bDtmb3IobD0xO2w8ZDtsKyspZm9yKG09MTttPGg7bSsrKWlmKGFbayttLTFdPT09Y1tnK2wtMV0pYltsXVttXT0KYltsLTFdW20tMV07ZWxzZXt2YXIgcT1iW2wtMV1bbV0rMSx4PWJbbF1bbS0xXSsxO2JbbF1bbV09cTx4P3E6eH1rPWIubGVuZ3RoLTE7Zz1iWzBdLmxlbmd0aC0xO2Q9YltrXVtnXTtmb3IoYT1bXTswPGt8fDA8ZzspMD09az8oYS5wdXNoKDIpLGctLSk6MD09Zz8oYS5wdXNoKDMpLGstLSk6KGg9YltrLTFdW2ctMV0sbD1iW2stMV1bZ10sbT1iW2tdW2ctMV0scT1sPG0/bDxoP2w6aDptPGg/bTpoLHE9PWg/KGg9PWQ/YS5wdXNoKDApOihhLnB1c2goMSksZD1oKSxrLS0sZy0tKTpxPT1sPyhhLnB1c2goMyksay0tLGQ9bCk6KGEucHVzaCgyKSxnLS0sZD1tKSk7YS5yZXZlcnNlKCk7Yj12b2lkIDA7az1bXTtmb3IoZz0wO2c8YS5sZW5ndGg7ZysrKXN3aXRjaChhW2ddKXtjYXNlIDA6YiYmKGsucHVzaChiKSxiPXZvaWQgMCk7ZSsrO2YrKzticmVhaztjYXNlIDE6Ynx8KGI9ZGMoZSwwKSk7Yi5SKys7ZSsrO2IuTC5wdXNoKGNbZl0pO2YrKzticmVhaztjYXNlIDI6Ynx8KGI9ZGMoZSwwKSk7CmIuUisrO2UrKzticmVhaztjYXNlIDM6Ynx8KGI9ZGMoZSwwKSksYi5MLnB1c2goY1tmXSksZisrfWImJmsucHVzaChiKTtyZXR1cm4ga31mdW5jdGlvbiBmYyhhLGIpe3JldHVybiBhPT09Yn07ZnVuY3Rpb24gZ2MoYSxiLGMpe0ViKGEpO2M9Y3x8bnVsbDt2YXIgZD11KGEpLGU9dShiKSxmPWM/dShjKTpudWxsO2QucHJldmlvdXNTaWJsaW5nPWM/Zi5wcmV2aW91c1NpYmxpbmc6Yi5fX3NoYWR5X2xhc3RDaGlsZDtpZihmPXYoZC5wcmV2aW91c1NpYmxpbmcpKWYubmV4dFNpYmxpbmc9YTtpZihmPXYoZC5uZXh0U2libGluZz1jKSlmLnByZXZpb3VzU2libGluZz1hO2QucGFyZW50Tm9kZT1iO2M/Yz09PWUuZmlyc3RDaGlsZCYmKGUuZmlyc3RDaGlsZD1hKTooZS5sYXN0Q2hpbGQ9YSxlLmZpcnN0Q2hpbGR8fChlLmZpcnN0Q2hpbGQ9YSkpO2UuY2hpbGROb2Rlcz1udWxsfQpmdW5jdGlvbiBoYyhhLGIsYyl7RmIoYik7dmFyIGQ9dShiKTt2b2lkIDAhPT1kLmZpcnN0Q2hpbGQmJihkLmNoaWxkTm9kZXM9bnVsbCk7aWYoYS5ub2RlVHlwZT09PU5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERSl7ZD1hLl9fc2hhZHlfY2hpbGROb2Rlcztmb3IodmFyIGU9MDtlPGQubGVuZ3RoO2UrKylnYyhkW2VdLGIsYyk7YT11KGEpO2I9dm9pZCAwIT09YS5maXJzdENoaWxkP251bGw6dm9pZCAwO2EuZmlyc3RDaGlsZD1hLmxhc3RDaGlsZD1iO2EuY2hpbGROb2Rlcz1ifWVsc2UgZ2MoYSxiLGMpfQpmdW5jdGlvbiBpYyhhLGIpe3ZhciBjPXUoYSk7Yj11KGIpO2E9PT1iLmZpcnN0Q2hpbGQmJihiLmZpcnN0Q2hpbGQ9Yy5uZXh0U2libGluZyk7YT09PWIubGFzdENoaWxkJiYoYi5sYXN0Q2hpbGQ9Yy5wcmV2aW91c1NpYmxpbmcpO2E9Yy5wcmV2aW91c1NpYmxpbmc7dmFyIGQ9Yy5uZXh0U2libGluZzthJiYodShhKS5uZXh0U2libGluZz1kKTtkJiYodShkKS5wcmV2aW91c1NpYmxpbmc9YSk7Yy5wYXJlbnROb2RlPWMucHJldmlvdXNTaWJsaW5nPWMubmV4dFNpYmxpbmc9dm9pZCAwO3ZvaWQgMCE9PWIuY2hpbGROb2RlcyYmKGIuY2hpbGROb2Rlcz1udWxsKX0KZnVuY3Rpb24gamMoYSl7dmFyIGI9dShhKTtpZih2b2lkIDA9PT1iLmZpcnN0Q2hpbGQpe2IuY2hpbGROb2Rlcz1udWxsO3ZhciBjPWIuZmlyc3RDaGlsZD1hLl9fc2hhZHlfbmF0aXZlX2ZpcnN0Q2hpbGR8fG51bGw7Yi5sYXN0Q2hpbGQ9YS5fX3NoYWR5X25hdGl2ZV9sYXN0Q2hpbGR8fG51bGw7RmIoYSk7Yj1jO2ZvcihjPXZvaWQgMDtiO2I9Yi5fX3NoYWR5X25hdGl2ZV9uZXh0U2libGluZyl7dmFyIGQ9dShiKTtkLnBhcmVudE5vZGU9YTtkLm5leHRTaWJsaW5nPWIuX19zaGFkeV9uYXRpdmVfbmV4dFNpYmxpbmd8fG51bGw7ZC5wcmV2aW91c1NpYmxpbmc9Y3x8bnVsbDtjPWI7RWIoYil9fX07dmFyIGtjPW51bGw7ZnVuY3Rpb24gRygpe2tjfHwoa2M9d2luZG93LlNoYWR5Q1NTJiZ3aW5kb3cuU2hhZHlDU1MuU2NvcGluZ1NoaW0pO3JldHVybiBrY3x8bnVsbH1mdW5jdGlvbiBsYyhhLGIpe3ZhciBjPUcoKTtjJiZjLnVuc2NvcGVOb2RlKGEsYil9ZnVuY3Rpb24gbWMoYSxiKXt2YXIgYz1HKCk7aWYoIWMpcmV0dXJuITA7aWYoYS5ub2RlVHlwZT09PU5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERSl7Yz0hMDthPWEuX19zaGFkeV9jaGlsZE5vZGVzO2Zvcih2YXIgZD0wO2MmJmQ8YS5sZW5ndGg7ZCsrKWM9YyYmbWMoYVtkXSxiKTtyZXR1cm4gY31yZXR1cm4gYS5ub2RlVHlwZSE9PU5vZGUuRUxFTUVOVF9OT0RFPyEwOmMuY3VycmVudFNjb3BlRm9yTm9kZShhKT09PWJ9ZnVuY3Rpb24gbmMoYSl7aWYoYS5ub2RlVHlwZSE9PU5vZGUuRUxFTUVOVF9OT0RFKXJldHVybiIiO3ZhciBiPUcoKTtyZXR1cm4gYj9iLmN1cnJlbnRTY29wZUZvck5vZGUoYSk6IiJ9CmZ1bmN0aW9uIG9jKGEsYil7aWYoYSl7YS5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFJiZiKGEpO2E9YS5fX3NoYWR5X2NoaWxkTm9kZXM7Zm9yKHZhciBjPTAsZDtjPGEubGVuZ3RoO2MrKylkPWFbY10sZC5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFJiZvYyhkLGIpfX07dmFyIHBjPXdpbmRvdy5kb2N1bWVudCxxYz13Lm9hLHJjPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTm9kZS5wcm90b3R5cGUsImlzQ29ubmVjdGVkIiksc2M9cmMmJnJjLmdldDtmdW5jdGlvbiB0YyhhKXtmb3IodmFyIGI7Yj1hLl9fc2hhZHlfZmlyc3RDaGlsZDspYS5fX3NoYWR5X3JlbW92ZUNoaWxkKGIpfWZ1bmN0aW9uIHVjKGEpe3ZhciBiPXYoYSk7aWYoYiYmdm9pZCAwIT09Yi5LKXtiPWEuX19zaGFkeV9jaGlsZE5vZGVzO2Zvcih2YXIgYz0wLGQ9Yi5sZW5ndGgsZT12b2lkIDA7YzxkJiYoZT1iW2NdKTtjKyspdWMoZSl9aWYoYT12KGEpKWEuSz12b2lkIDB9ZnVuY3Rpb24gdmMoYSl7dmFyIGI9YTthJiYic2xvdCI9PT1hLmxvY2FsTmFtZSYmKGI9KGI9KGI9dihhKSkmJmIuRCkmJmIubGVuZ3RoP2JbMF06dmMoYS5fX3NoYWR5X25leHRTaWJsaW5nKSk7cmV0dXJuIGJ9CmZ1bmN0aW9uIHdjKGEsYixjKXtpZihhPShhPXYoYSkpJiZhLkgpYiYmYS5hZGRlZE5vZGVzLnB1c2goYiksYyYmYS5yZW1vdmVkTm9kZXMucHVzaChjKSxhYihhKX0KdmFyIENjPUIoe2dldCBwYXJlbnROb2RlKCl7dmFyIGE9dih0aGlzKTthPWEmJmEucGFyZW50Tm9kZTtyZXR1cm4gdm9pZCAwIT09YT9hOnRoaXMuX19zaGFkeV9uYXRpdmVfcGFyZW50Tm9kZX0sZ2V0IGZpcnN0Q2hpbGQoKXt2YXIgYT12KHRoaXMpO2E9YSYmYS5maXJzdENoaWxkO3JldHVybiB2b2lkIDAhPT1hP2E6dGhpcy5fX3NoYWR5X25hdGl2ZV9maXJzdENoaWxkfSxnZXQgbGFzdENoaWxkKCl7dmFyIGE9dih0aGlzKTthPWEmJmEubGFzdENoaWxkO3JldHVybiB2b2lkIDAhPT1hP2E6dGhpcy5fX3NoYWR5X25hdGl2ZV9sYXN0Q2hpbGR9LGdldCBuZXh0U2libGluZygpe3ZhciBhPXYodGhpcyk7YT1hJiZhLm5leHRTaWJsaW5nO3JldHVybiB2b2lkIDAhPT1hP2E6dGhpcy5fX3NoYWR5X25hdGl2ZV9uZXh0U2libGluZ30sZ2V0IHByZXZpb3VzU2libGluZygpe3ZhciBhPXYodGhpcyk7YT1hJiZhLnByZXZpb3VzU2libGluZztyZXR1cm4gdm9pZCAwIT09YT9hOnRoaXMuX19zaGFkeV9uYXRpdmVfcHJldmlvdXNTaWJsaW5nfSwKZ2V0IGNoaWxkTm9kZXMoKXtpZih5KHRoaXMpKXt2YXIgYT12KHRoaXMpO2lmKCFhLmNoaWxkTm9kZXMpe2EuY2hpbGROb2Rlcz1bXTtmb3IodmFyIGI9dGhpcy5fX3NoYWR5X2ZpcnN0Q2hpbGQ7YjtiPWIuX19zaGFkeV9uZXh0U2libGluZylhLmNoaWxkTm9kZXMucHVzaChiKX12YXIgYz1hLmNoaWxkTm9kZXN9ZWxzZSBjPXRoaXMuX19zaGFkeV9uYXRpdmVfY2hpbGROb2RlcztjLml0ZW09ZnVuY3Rpb24oYSl7cmV0dXJuIGNbYV19O3JldHVybiBjfSxnZXQgcGFyZW50RWxlbWVudCgpe3ZhciBhPXYodGhpcyk7KGE9YSYmYS5wYXJlbnROb2RlKSYmYS5ub2RlVHlwZSE9PU5vZGUuRUxFTUVOVF9OT0RFJiYoYT1udWxsKTtyZXR1cm4gdm9pZCAwIT09YT9hOnRoaXMuX19zaGFkeV9uYXRpdmVfcGFyZW50RWxlbWVudH0sZ2V0IGlzQ29ubmVjdGVkKCl7aWYoc2MmJnNjLmNhbGwodGhpcykpcmV0dXJuITA7aWYodGhpcy5ub2RlVHlwZT09Tm9kZS5ET0NVTUVOVF9GUkFHTUVOVF9OT0RFKXJldHVybiExOwp2YXIgYT10aGlzLm93bmVyRG9jdW1lbnQ7aWYoVGEpe2lmKGEuX19zaGFkeV9uYXRpdmVfY29udGFpbnModGhpcykpcmV0dXJuITB9ZWxzZSBpZihhLmRvY3VtZW50RWxlbWVudCYmYS5kb2N1bWVudEVsZW1lbnQuX19zaGFkeV9uYXRpdmVfY29udGFpbnModGhpcykpcmV0dXJuITA7Zm9yKGE9dGhpczthJiYhKGEgaW5zdGFuY2VvZiBEb2N1bWVudCk7KWE9YS5fX3NoYWR5X3BhcmVudE5vZGV8fCh6KGEpP2EuaG9zdDp2b2lkIDApO3JldHVybiEhKGEmJmEgaW5zdGFuY2VvZiBEb2N1bWVudCl9LGdldCB0ZXh0Q29udGVudCgpe2lmKHkodGhpcykpe2Zvcih2YXIgYT1bXSxiPTAsYz10aGlzLl9fc2hhZHlfY2hpbGROb2RlcyxkO2Q9Y1tiXTtiKyspZC5ub2RlVHlwZSE9PU5vZGUuQ09NTUVOVF9OT0RFJiZhLnB1c2goZC5fX3NoYWR5X3RleHRDb250ZW50KTtyZXR1cm4gYS5qb2luKCIiKX1yZXR1cm4gdGhpcy5fX3NoYWR5X25hdGl2ZV90ZXh0Q29udGVudH0sc2V0IHRleHRDb250ZW50KGEpe2lmKCJ1bmRlZmluZWQiPT09CnR5cGVvZiBhfHxudWxsPT09YSlhPSIiO3N3aXRjaCh0aGlzLm5vZGVUeXBlKXtjYXNlIE5vZGUuRUxFTUVOVF9OT0RFOmNhc2UgTm9kZS5ET0NVTUVOVF9GUkFHTUVOVF9OT0RFOmlmKCF5KHRoaXMpJiZ3Lm0pe3ZhciBiPXRoaXMuX19zaGFkeV9maXJzdENoaWxkOyhiIT10aGlzLl9fc2hhZHlfbGFzdENoaWxkfHxiJiZiLm5vZGVUeXBlIT1Ob2RlLlRFWFRfTk9ERSkmJnRjKHRoaXMpO3RoaXMuX19zaGFkeV9uYXRpdmVfdGV4dENvbnRlbnQ9YX1lbHNlIHRjKHRoaXMpLCgwPGEubGVuZ3RofHx0aGlzLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUpJiZ0aGlzLl9fc2hhZHlfaW5zZXJ0QmVmb3JlKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGEpKTticmVhaztkZWZhdWx0OnRoaXMubm9kZVZhbHVlPWF9fSxpbnNlcnRCZWZvcmU6ZnVuY3Rpb24oYSxiKXtpZih0aGlzLm93bmVyRG9jdW1lbnQhPT1wYyYmYS5vd25lckRvY3VtZW50IT09cGMpcmV0dXJuIHRoaXMuX19zaGFkeV9uYXRpdmVfaW5zZXJ0QmVmb3JlKGEsCmIpLGE7aWYoYT09PXRoaXMpdGhyb3cgRXJyb3IoIkZhaWxlZCB0byBleGVjdXRlICdhcHBlbmRDaGlsZCcgb24gJ05vZGUnOiBUaGUgbmV3IGNoaWxkIGVsZW1lbnQgY29udGFpbnMgdGhlIHBhcmVudC4iKTtpZihiKXt2YXIgYz12KGIpO2M9YyYmYy5wYXJlbnROb2RlO2lmKHZvaWQgMCE9PWMmJmMhPT10aGlzfHx2b2lkIDA9PT1jJiZiLl9fc2hhZHlfbmF0aXZlX3BhcmVudE5vZGUhPT10aGlzKXRocm93IEVycm9yKCJGYWlsZWQgdG8gZXhlY3V0ZSAnaW5zZXJ0QmVmb3JlJyBvbiAnTm9kZSc6IFRoZSBub2RlIGJlZm9yZSB3aGljaCB0aGUgbmV3IG5vZGUgaXMgdG8gYmUgaW5zZXJ0ZWQgaXMgbm90IGEgY2hpbGQgb2YgdGhpcyBub2RlLiIpO31pZihiPT09YSlyZXR1cm4gYTt2YXIgZD1bXSxlPShjPXhjKHRoaXMpKT9jLmhvc3QubG9jYWxOYW1lOm5jKHRoaXMpLGY9YS5fX3NoYWR5X3BhcmVudE5vZGU7aWYoZil7dmFyIGc9bmMoYSk7Zi5fX3NoYWR5X3JlbW92ZUNoaWxkKGEsISFjfHwKIXhjKGEpKX1mPSEwO3ZhciBoPSghcWN8fHZvaWQgMD09PWEuX19ub0luc2VydGlvblBvaW50KSYmIW1jKGEsZSksaz1jJiYhYS5fX25vSW5zZXJ0aW9uUG9pbnQmJighcWN8fGEubm9kZVR5cGU9PT1Ob2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREUpO2lmKGt8fGgpaCYmKGc9Z3x8bmMoYSkpLG9jKGEsZnVuY3Rpb24oYSl7ayYmInNsb3QiPT09YS5sb2NhbE5hbWUmJmQucHVzaChhKTtpZihoKXt2YXIgYj1nO0coKSYmKGImJmxjKGEsYiksKGI9RygpKSYmYi5zY29wZU5vZGUoYSxlKSl9fSk7aWYoInNsb3QiPT09dGhpcy5sb2NhbE5hbWV8fGQubGVuZ3RoKWQubGVuZ3RoJiYoYy5jPWMuY3x8W10sYy5hPWMuYXx8W10sYy5iPWMuYnx8e30sYy5jLnB1c2guYXBwbHkoYy5jLGQgaW5zdGFuY2VvZiBBcnJheT9kOmphKGlhKGQpKSkpLGMmJkFjKGMpO3kodGhpcykmJihoYyhhLHRoaXMsYiksYz12KHRoaXMpLExhKHRoaXMpPyhBYyhjLnJvb3QpLGY9ITEpOmMucm9vdCYmKGY9ITEpKTtmPwooYz16KHRoaXMpP3RoaXMuaG9zdDp0aGlzLGI/KGI9dmMoYiksYy5fX3NoYWR5X25hdGl2ZV9pbnNlcnRCZWZvcmUoYSxiKSk6Yy5fX3NoYWR5X25hdGl2ZV9hcHBlbmRDaGlsZChhKSk6YS5vd25lckRvY3VtZW50IT09dGhpcy5vd25lckRvY3VtZW50JiZ0aGlzLm93bmVyRG9jdW1lbnQuYWRvcHROb2RlKGEpO3djKHRoaXMsYSk7cmV0dXJuIGF9LGFwcGVuZENoaWxkOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLl9fc2hhZHlfaW5zZXJ0QmVmb3JlKGEpfSxyZW1vdmVDaGlsZDpmdW5jdGlvbihhLGIpe2I9dm9pZCAwPT09Yj8hMTpiO2lmKHRoaXMub3duZXJEb2N1bWVudCE9PXBjKXJldHVybiB0aGlzLl9fc2hhZHlfbmF0aXZlX3JlbW92ZUNoaWxkKGEpO2lmKGEuX19zaGFkeV9wYXJlbnROb2RlIT09dGhpcyl0aHJvdyBFcnJvcigiVGhlIG5vZGUgdG8gYmUgcmVtb3ZlZCBpcyBub3QgYSBjaGlsZCBvZiB0aGlzIG5vZGU6ICIrYSk7dmFyIGM9eGMoYSksZD1jJiZCYyhjLGEpLGU9dih0aGlzKTsKaWYoeSh0aGlzKSYmKGljKGEsdGhpcyksTGEodGhpcykpKXtBYyhlLnJvb3QpO3ZhciBmPSEwfWlmKEcoKSYmIWImJmMpe3ZhciBnPW5jKGEpO29jKGEsZnVuY3Rpb24oYSl7bGMoYSxnKX0pfXVjKGEpO2MmJigoYj10aGlzJiYic2xvdCI9PT10aGlzLmxvY2FsTmFtZSkmJihmPSEwKSwoZHx8YikmJkFjKGMpKTtmfHwoZj16KHRoaXMpP3RoaXMuaG9zdDp0aGlzLCghZS5yb290JiYic2xvdCIhPT1hLmxvY2FsTmFtZXx8Zj09PWEuX19zaGFkeV9uYXRpdmVfcGFyZW50Tm9kZSkmJmYuX19zaGFkeV9uYXRpdmVfcmVtb3ZlQ2hpbGQoYSkpO3djKHRoaXMsbnVsbCxhKTtyZXR1cm4gYX0scmVwbGFjZUNoaWxkOmZ1bmN0aW9uKGEsYil7dGhpcy5fX3NoYWR5X2luc2VydEJlZm9yZShhLGIpO3RoaXMuX19zaGFkeV9yZW1vdmVDaGlsZChiKTtyZXR1cm4gYX0sY2xvbmVOb2RlOmZ1bmN0aW9uKGEpe2lmKCJ0ZW1wbGF0ZSI9PXRoaXMubG9jYWxOYW1lKXJldHVybiB0aGlzLl9fc2hhZHlfbmF0aXZlX2Nsb25lTm9kZShhKTsKdmFyIGI9dGhpcy5fX3NoYWR5X25hdGl2ZV9jbG9uZU5vZGUoITEpO2lmKGEmJmIubm9kZVR5cGUhPT1Ob2RlLkFUVFJJQlVURV9OT0RFKXthPXRoaXMuX19zaGFkeV9jaGlsZE5vZGVzO2Zvcih2YXIgYz0wLGQ7YzxhLmxlbmd0aDtjKyspZD1hW2NdLl9fc2hhZHlfY2xvbmVOb2RlKCEwKSxiLl9fc2hhZHlfYXBwZW5kQ2hpbGQoZCl9cmV0dXJuIGJ9LGdldFJvb3ROb2RlOmZ1bmN0aW9uKGEpe2lmKHRoaXMmJnRoaXMubm9kZVR5cGUpe3ZhciBiPXUodGhpcyksYz1iLks7dm9pZCAwPT09YyYmKHoodGhpcyk/KGM9dGhpcyxiLks9Yyk6KGM9KGM9dGhpcy5fX3NoYWR5X3BhcmVudE5vZGUpP2MuX19zaGFkeV9nZXRSb290Tm9kZShhKTp0aGlzLGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5fX3NoYWR5X25hdGl2ZV9jb250YWlucyh0aGlzKSYmKGIuSz1jKSkpO3JldHVybiBjfX0sY29udGFpbnM6ZnVuY3Rpb24oYSl7cmV0dXJuIFVhKHRoaXMsYSl9fSk7ZnVuY3Rpb24gRGMoYSxiLGMpe3ZhciBkPVtdO0VjKGEuX19zaGFkeV9jaGlsZE5vZGVzLGIsYyxkKTtyZXR1cm4gZH1mdW5jdGlvbiBFYyhhLGIsYyxkKXtmb3IodmFyIGU9MCxmPWEubGVuZ3RoLGc9dm9pZCAwO2U8ZiYmKGc9YVtlXSk7ZSsrKXt2YXIgaDtpZihoPWcubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERSl7aD1nO3ZhciBrPWIsbD1jLG09ZCxxPWsoaCk7cSYmbS5wdXNoKGgpO2wmJmwocSk/aD1xOihFYyhoLl9fc2hhZHlfY2hpbGROb2RlcyxrLGwsbSksaD12b2lkIDApfWlmKGgpYnJlYWt9fQp2YXIgRmM9Qih7Z2V0IGZpcnN0RWxlbWVudENoaWxkKCl7dmFyIGE9dih0aGlzKTtpZihhJiZ2b2lkIDAhPT1hLmZpcnN0Q2hpbGQpe2ZvcihhPXRoaXMuX19zaGFkeV9maXJzdENoaWxkO2EmJmEubm9kZVR5cGUhPT1Ob2RlLkVMRU1FTlRfTk9ERTspYT1hLl9fc2hhZHlfbmV4dFNpYmxpbmc7cmV0dXJuIGF9cmV0dXJuIHRoaXMuX19zaGFkeV9uYXRpdmVfZmlyc3RFbGVtZW50Q2hpbGR9LGdldCBsYXN0RWxlbWVudENoaWxkKCl7dmFyIGE9dih0aGlzKTtpZihhJiZ2b2lkIDAhPT1hLmxhc3RDaGlsZCl7Zm9yKGE9dGhpcy5fX3NoYWR5X2xhc3RDaGlsZDthJiZhLm5vZGVUeXBlIT09Tm9kZS5FTEVNRU5UX05PREU7KWE9YS5fX3NoYWR5X3ByZXZpb3VzU2libGluZztyZXR1cm4gYX1yZXR1cm4gdGhpcy5fX3NoYWR5X25hdGl2ZV9sYXN0RWxlbWVudENoaWxkfSxnZXQgY2hpbGRyZW4oKXtyZXR1cm4geSh0aGlzKT9WYShBcnJheS5wcm90b3R5cGUuZmlsdGVyLmNhbGwodGhpcy5fX3NoYWR5X2NoaWxkTm9kZXMsCmZ1bmN0aW9uKGEpe3JldHVybiBhLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREV9KSk6dGhpcy5fX3NoYWR5X25hdGl2ZV9jaGlsZHJlbn0sZ2V0IGNoaWxkRWxlbWVudENvdW50KCl7dmFyIGE9dGhpcy5fX3NoYWR5X2NoaWxkcmVuO3JldHVybiBhP2EubGVuZ3RoOjB9fSksR2M9Qih7cXVlcnlTZWxlY3RvcjpmdW5jdGlvbihhKXtyZXR1cm4gRGModGhpcyxmdW5jdGlvbihiKXtyZXR1cm4gT2EuY2FsbChiLGEpfSxmdW5jdGlvbihhKXtyZXR1cm4hIWF9KVswXXx8bnVsbH0scXVlcnlTZWxlY3RvckFsbDpmdW5jdGlvbihhLGIpe2lmKGIpe2I9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5fX3NoYWR5X25hdGl2ZV9xdWVyeVNlbGVjdG9yQWxsKGEpKTt2YXIgYz10aGlzLl9fc2hhZHlfZ2V0Um9vdE5vZGUoKTtyZXR1cm4gYi5maWx0ZXIoZnVuY3Rpb24oYSl7cmV0dXJuIGEuX19zaGFkeV9nZXRSb290Tm9kZSgpPT1jfSl9cmV0dXJuIERjKHRoaXMsZnVuY3Rpb24oYil7cmV0dXJuIE9hLmNhbGwoYiwKYSl9KX19KSxIYz13Lm9hP09iamVjdC5hc3NpZ24oe30sRmMpOkZjO09iamVjdC5hc3NpZ24oRmMsR2MpO3ZhciBJYz1CKHtnZXRFbGVtZW50QnlJZDpmdW5jdGlvbihhKXtyZXR1cm4iIj09PWE/bnVsbDpEYyh0aGlzLGZ1bmN0aW9uKGIpe3JldHVybiBiLmlkPT1hfSxmdW5jdGlvbihhKXtyZXR1cm4hIWF9KVswXXx8bnVsbH19KTt2YXIgSmM9Qih7Z2V0IGFjdGl2ZUVsZW1lbnQoKXt2YXIgYT13Lm0/ZG9jdW1lbnQuX19zaGFkeV9uYXRpdmVfYWN0aXZlRWxlbWVudDpkb2N1bWVudC5hY3RpdmVFbGVtZW50O2lmKCFhfHwhYS5ub2RlVHlwZSlyZXR1cm4gbnVsbDt2YXIgYj0hIXoodGhpcyk7aWYoISh0aGlzPT09ZG9jdW1lbnR8fGImJnRoaXMuaG9zdCE9PWEmJnRoaXMuaG9zdC5fX3NoYWR5X25hdGl2ZV9jb250YWlucyhhKSkpcmV0dXJuIG51bGw7Zm9yKGI9eGMoYSk7YiYmYiE9PXRoaXM7KWE9Yi5ob3N0LGI9eGMoYSk7cmV0dXJuIHRoaXM9PT1kb2N1bWVudD9iP251bGw6YTpiPT09dGhpcz9hOm51bGx9fSk7dmFyIEtjPWRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCgiaW5lcnQiKSxMYz1CKHtnZXQgaW5uZXJIVE1MKCl7cmV0dXJuIHkodGhpcyk/a2IoInRlbXBsYXRlIj09PXRoaXMubG9jYWxOYW1lP3RoaXMuY29udGVudDp0aGlzLGZ1bmN0aW9uKGEpe3JldHVybiBhLl9fc2hhZHlfY2hpbGROb2Rlc30pOnRoaXMuX19zaGFkeV9uYXRpdmVfaW5uZXJIVE1MfSxzZXQgaW5uZXJIVE1MKGEpe2lmKCJ0ZW1wbGF0ZSI9PT10aGlzLmxvY2FsTmFtZSl0aGlzLl9fc2hhZHlfbmF0aXZlX2lubmVySFRNTD1hO2Vsc2V7dGModGhpcyk7dmFyIGI9dGhpcy5sb2NhbE5hbWV8fCJkaXYiO2I9dGhpcy5uYW1lc3BhY2VVUkkmJnRoaXMubmFtZXNwYWNlVVJJIT09S2MubmFtZXNwYWNlVVJJP0tjLmNyZWF0ZUVsZW1lbnROUyh0aGlzLm5hbWVzcGFjZVVSSSxiKTpLYy5jcmVhdGVFbGVtZW50KGIpO2Zvcih3Lm0/Yi5fX3NoYWR5X25hdGl2ZV9pbm5lckhUTUw9YTpiLmlubmVySFRNTD0KYTthPWIuX19zaGFkeV9maXJzdENoaWxkOyl0aGlzLl9fc2hhZHlfaW5zZXJ0QmVmb3JlKGEpfX19KTt2YXIgTWM9Qih7YWRkRXZlbnRMaXN0ZW5lcjpmdW5jdGlvbihhLGIsYyl7Im9iamVjdCIhPT10eXBlb2YgYyYmKGM9e2NhcHR1cmU6ISFjfSk7Yy4kPXRoaXM7dGhpcy5ob3N0Ll9fc2hhZHlfYWRkRXZlbnRMaXN0ZW5lcihhLGIsYyl9LHJlbW92ZUV2ZW50TGlzdGVuZXI6ZnVuY3Rpb24oYSxiLGMpeyJvYmplY3QiIT09dHlwZW9mIGMmJihjPXtjYXB0dXJlOiEhY30pO2MuJD10aGlzO3RoaXMuaG9zdC5fX3NoYWR5X3JlbW92ZUV2ZW50TGlzdGVuZXIoYSxiLGMpfX0pO2Z1bmN0aW9uIE5jKGEsYil7QShhLE1jLGIpO0EoYSxKYyxiKTtBKGEsTGMsYik7QShhLEZjLGIpO3cuSiYmIWI/KEEoYSxDYyxiKSxBKGEsSWMsYikpOncubXx8KEEoYSxBYiksQShhLHpiKSl9O3ZhciBPYz17fSxQYz13LmRlZmVyQ29ubmVjdGlvbkNhbGxiYWNrcyYmImxvYWRpbmciPT09ZG9jdW1lbnQucmVhZHlTdGF0ZSxRYztmdW5jdGlvbiBSYyhhKXt2YXIgYj1bXTtkbyBiLnVuc2hpZnQoYSk7d2hpbGUoYT1hLl9fc2hhZHlfcGFyZW50Tm9kZSk7cmV0dXJuIGJ9CmZ1bmN0aW9uIFNjKGEsYixjKXtpZihhIT09T2MpdGhyb3cgbmV3IFR5cGVFcnJvcigiSWxsZWdhbCBjb25zdHJ1Y3RvciIpO3RoaXMuemE9IlNoYWR5Um9vdCI7dGhpcy5ob3N0PWI7dGhpcy5tb2RlPWMmJmMubW9kZTtqYyhiKTthPXUoYik7YS5yb290PXRoaXM7YS5wYT0iY2xvc2VkIiE9PXRoaXMubW9kZT90aGlzOm51bGw7YT11KHRoaXMpO2EuZmlyc3RDaGlsZD1hLmxhc3RDaGlsZD1hLnBhcmVudE5vZGU9YS5uZXh0U2libGluZz1hLnByZXZpb3VzU2libGluZz1udWxsO2EuY2hpbGROb2Rlcz1bXTt0aGlzLmJhPXRoaXMuQj0hMTt0aGlzLmM9dGhpcy5iPXRoaXMuYT1udWxsO2lmKHcucHJlZmVyUGVyZm9ybWFuY2UpZm9yKDthPWIuX19zaGFkeV9uYXRpdmVfZmlyc3RDaGlsZDspYi5fX3NoYWR5X25hdGl2ZV9yZW1vdmVDaGlsZChhKTtlbHNlIEFjKHRoaXMpfWZ1bmN0aW9uIEFjKGEpe2EuQnx8KGEuQj0hMCxZYShmdW5jdGlvbigpe3JldHVybiBUYyhhKX0pKX0KZnVuY3Rpb24gVGMoYSl7dmFyIGI7aWYoYj1hLkIpe2Zvcih2YXIgYzthOylhOnthLkImJihjPWEpLGI9YTthPWIuaG9zdC5fX3NoYWR5X2dldFJvb3ROb2RlKCk7aWYoeihhKSYmKGI9dihiLmhvc3QpKSYmMDxiLk4pYnJlYWsgYTthPXZvaWQgMH1iPWN9KGM9YikmJmMuX3JlbmRlclNlbGYoKX0KU2MucHJvdG90eXBlLl9yZW5kZXJTZWxmPWZ1bmN0aW9uKCl7dmFyIGE9UGM7UGM9ITA7dGhpcy5CPSExO2lmKHRoaXMuYSl7VWModGhpcyk7Zm9yKHZhciBiPTAsYztiPHRoaXMuYS5sZW5ndGg7YisrKXtjPXRoaXMuYVtiXTt2YXIgZD12KGMpLGU9ZC5hc3NpZ25lZE5vZGVzO2QuYXNzaWduZWROb2Rlcz1bXTtkLkQ9W107aWYoZC5jYT1lKWZvcihkPTA7ZDxlLmxlbmd0aDtkKyspe3ZhciBmPXYoZVtkXSk7Zi5QPWYuYXNzaWduZWRTbG90O2YuYXNzaWduZWRTbG90PT09YyYmKGYuYXNzaWduZWRTbG90PW51bGwpfX1mb3IoYj10aGlzLmhvc3QuX19zaGFkeV9maXJzdENoaWxkO2I7Yj1iLl9fc2hhZHlfbmV4dFNpYmxpbmcpVmModGhpcyxiKTtmb3IoYj0wO2I8dGhpcy5hLmxlbmd0aDtiKyspe2M9dGhpcy5hW2JdO2U9dihjKTtpZighZS5hc3NpZ25lZE5vZGVzLmxlbmd0aClmb3IoZD1jLl9fc2hhZHlfZmlyc3RDaGlsZDtkO2Q9ZC5fX3NoYWR5X25leHRTaWJsaW5nKVZjKHRoaXMsCmQsYyk7KGQ9KGQ9dihjLl9fc2hhZHlfcGFyZW50Tm9kZSkpJiZkLnJvb3QpJiYoTWEoZCl8fGQuQikmJmQuX3JlbmRlclNlbGYoKTtXYyh0aGlzLGUuRCxlLmFzc2lnbmVkTm9kZXMpO2lmKGQ9ZS5jYSl7Zm9yKGY9MDtmPGQubGVuZ3RoO2YrKyl2KGRbZl0pLlA9bnVsbDtlLmNhPW51bGw7ZC5sZW5ndGg+ZS5hc3NpZ25lZE5vZGVzLmxlbmd0aCYmKGUuVD0hMCl9ZS5UJiYoZS5UPSExLFhjKHRoaXMsYykpfWM9dGhpcy5hO2I9W107Zm9yKGU9MDtlPGMubGVuZ3RoO2UrKylkPWNbZV0uX19zaGFkeV9wYXJlbnROb2RlLChmPXYoZCkpJiZmLnJvb3R8fCEoMD5iLmluZGV4T2YoZCkpfHxiLnB1c2goZCk7Zm9yKGM9MDtjPGIubGVuZ3RoO2MrKyl7Zj1iW2NdO2U9Zj09PXRoaXM/dGhpcy5ob3N0OmY7ZD1bXTtmPWYuX19zaGFkeV9jaGlsZE5vZGVzO2Zvcih2YXIgZz0wO2c8Zi5sZW5ndGg7ZysrKXt2YXIgaD1mW2ddO2lmKCJzbG90Ij09aC5sb2NhbE5hbWUpe2g9dihoKS5EO2Zvcih2YXIgaz0KMDtrPGgubGVuZ3RoO2srKylkLnB1c2goaFtrXSl9ZWxzZSBkLnB1c2goaCl9Zj1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChlLl9fc2hhZHlfbmF0aXZlX2NoaWxkTm9kZXMpO2c9ZWMoZCxkLmxlbmd0aCxmLGYubGVuZ3RoKTtrPWg9MDtmb3IodmFyIGw9dm9pZCAwO2g8Zy5sZW5ndGgmJihsPWdbaF0pO2grKyl7Zm9yKHZhciBtPTAscT12b2lkIDA7bTxsLkwubGVuZ3RoJiYocT1sLkxbbV0pO20rKylxLl9fc2hhZHlfbmF0aXZlX3BhcmVudE5vZGU9PT1lJiZlLl9fc2hhZHlfbmF0aXZlX3JlbW92ZUNoaWxkKHEpLGYuc3BsaWNlKGwuaW5kZXgraywxKTtrLT1sLlJ9az0wO2ZvcihsPXZvaWQgMDtrPGcubGVuZ3RoJiYobD1nW2tdKTtrKyspZm9yKGg9ZltsLmluZGV4XSxtPWwuaW5kZXg7bTxsLmluZGV4K2wuUjttKyspcT1kW21dLGUuX19zaGFkeV9uYXRpdmVfaW5zZXJ0QmVmb3JlKHEsaCksZi5zcGxpY2UobSwwLHEpfX1pZighdy5wcmVmZXJQZXJmb3JtYW5jZSYmIXRoaXMuYmEpZm9yKGI9CnRoaXMuaG9zdC5fX3NoYWR5X2NoaWxkTm9kZXMsYz0wLGU9Yi5sZW5ndGg7YzxlO2MrKylkPWJbY10sZj12KGQpLGQuX19zaGFkeV9uYXRpdmVfcGFyZW50Tm9kZSE9PXRoaXMuaG9zdHx8InNsb3QiIT09ZC5sb2NhbE5hbWUmJmYuYXNzaWduZWRTbG90fHx0aGlzLmhvc3QuX19zaGFkeV9uYXRpdmVfcmVtb3ZlQ2hpbGQoZCk7dGhpcy5iYT0hMDtQYz1hO1FjJiZRYygpfTtmdW5jdGlvbiBWYyhhLGIsYyl7dmFyIGQ9dShiKSxlPWQuUDtkLlA9bnVsbDtjfHwoYz0oYT1hLmJbYi5fX3NoYWR5X3Nsb3R8fCJfX2NhdGNoYWxsIl0pJiZhWzBdKTtjPyh1KGMpLmFzc2lnbmVkTm9kZXMucHVzaChiKSxkLmFzc2lnbmVkU2xvdD1jKTpkLmFzc2lnbmVkU2xvdD12b2lkIDA7ZSE9PWQuYXNzaWduZWRTbG90JiZkLmFzc2lnbmVkU2xvdCYmKHUoZC5hc3NpZ25lZFNsb3QpLlQ9ITApfQpmdW5jdGlvbiBXYyhhLGIsYyl7Zm9yKHZhciBkPTAsZT12b2lkIDA7ZDxjLmxlbmd0aCYmKGU9Y1tkXSk7ZCsrKWlmKCJzbG90Ij09ZS5sb2NhbE5hbWUpe3ZhciBmPXYoZSkuYXNzaWduZWROb2RlcztmJiZmLmxlbmd0aCYmV2MoYSxiLGYpfWVsc2UgYi5wdXNoKGNbZF0pfWZ1bmN0aW9uIFhjKGEsYil7Yi5fX3NoYWR5X25hdGl2ZV9kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgic2xvdGNoYW5nZSIpKTtiPXYoYik7Yi5hc3NpZ25lZFNsb3QmJlhjKGEsYi5hc3NpZ25lZFNsb3QpfQpmdW5jdGlvbiBVYyhhKXtpZihhLmMmJmEuYy5sZW5ndGgpe2Zvcih2YXIgYj1hLmMsYyxkPTA7ZDxiLmxlbmd0aDtkKyspe3ZhciBlPWJbZF07amMoZSk7dmFyIGY9ZS5fX3NoYWR5X3BhcmVudE5vZGU7amMoZik7Zj12KGYpO2YuTj0oZi5OfHwwKSsxO2Y9WWMoZSk7YS5iW2ZdPyhjPWN8fHt9LGNbZl09ITAsYS5iW2ZdLnB1c2goZSkpOmEuYltmXT1bZV07YS5hLnB1c2goZSl9aWYoYylmb3IodmFyIGcgaW4gYylhLmJbZ109WmMoYS5iW2ddKTthLmM9W119fWZ1bmN0aW9uIFljKGEpe3ZhciBiPWEubmFtZXx8YS5nZXRBdHRyaWJ1dGUoIm5hbWUiKXx8Il9fY2F0Y2hhbGwiO3JldHVybiBhLndhPWJ9CmZ1bmN0aW9uIFpjKGEpe3JldHVybiBhLnNvcnQoZnVuY3Rpb24oYSxjKXthPVJjKGEpO2Zvcih2YXIgYj1SYyhjKSxlPTA7ZTxhLmxlbmd0aDtlKyspe2M9YVtlXTt2YXIgZj1iW2VdO2lmKGMhPT1mKXJldHVybiBhPUFycmF5LmZyb20oYy5fX3NoYWR5X3BhcmVudE5vZGUuX19zaGFkeV9jaGlsZE5vZGVzKSxhLmluZGV4T2YoYyktYS5pbmRleE9mKGYpfX0pfQpmdW5jdGlvbiBCYyhhLGIpe2lmKGEuYSl7VWMoYSk7dmFyIGM9YS5iLGQ7Zm9yKGQgaW4gYylmb3IodmFyIGU9Y1tkXSxmPTA7ZjxlLmxlbmd0aDtmKyspe3ZhciBnPWVbZl07aWYoVWEoYixnKSl7ZS5zcGxpY2UoZiwxKTt2YXIgaD1hLmEuaW5kZXhPZihnKTswPD1oJiYoYS5hLnNwbGljZShoLDEpLChoPXYoZy5fX3NoYWR5X3BhcmVudE5vZGUpKSYmaC5OJiZoLk4tLSk7Zi0tO2c9dihnKTtpZihoPWcuRClmb3IodmFyIGs9MDtrPGgubGVuZ3RoO2srKyl7dmFyIGw9aFtrXSxtPWwuX19zaGFkeV9uYXRpdmVfcGFyZW50Tm9kZTttJiZtLl9fc2hhZHlfbmF0aXZlX3JlbW92ZUNoaWxkKGwpfWcuRD1bXTtnLmFzc2lnbmVkTm9kZXM9W107aD0hMH19cmV0dXJuIGh9fWZ1bmN0aW9uIE1hKGEpe1VjKGEpO3JldHVybiEoIWEuYXx8IWEuYS5sZW5ndGgpfQooZnVuY3Rpb24oYSl7YS5fX3Byb3RvX189RG9jdW1lbnRGcmFnbWVudC5wcm90b3R5cGU7TmMoYSwiX19zaGFkeV8iKTtOYyhhKTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhhLHtub2RlVHlwZTp7dmFsdWU6Tm9kZS5ET0NVTUVOVF9GUkFHTUVOVF9OT0RFLGNvbmZpZ3VyYWJsZTohMH0sbm9kZU5hbWU6e3ZhbHVlOiIjZG9jdW1lbnQtZnJhZ21lbnQiLGNvbmZpZ3VyYWJsZTohMH0sbm9kZVZhbHVlOnt2YWx1ZTpudWxsLGNvbmZpZ3VyYWJsZTohMH19KTtbImxvY2FsTmFtZSIsIm5hbWVzcGFjZVVSSSIsInByZWZpeCJdLmZvckVhY2goZnVuY3Rpb24oYil7T2JqZWN0LmRlZmluZVByb3BlcnR5KGEsYix7dmFsdWU6dm9pZCAwLGNvbmZpZ3VyYWJsZTohMH0pfSk7WyJvd25lckRvY3VtZW50IiwiYmFzZVVSSSIsImlzQ29ubmVjdGVkIl0uZm9yRWFjaChmdW5jdGlvbihiKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoYSxiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ob3N0W2JdfSwKY29uZmlndXJhYmxlOiEwfSl9KX0pKFNjLnByb3RvdHlwZSk7CmlmKHdpbmRvdy5jdXN0b21FbGVtZW50cyYmdy5lYSYmIXcucHJlZmVyUGVyZm9ybWFuY2Upe3ZhciAkYz1uZXcgTWFwO1FjPWZ1bmN0aW9uKCl7dmFyIGE9W107JGMuZm9yRWFjaChmdW5jdGlvbihiLGMpe2EucHVzaChbYyxiXSl9KTskYy5jbGVhcigpO2Zvcih2YXIgYj0wO2I8YS5sZW5ndGg7YisrKXt2YXIgYz1hW2JdWzBdO2FbYl1bMV0/Yy51YSgpOmMudmEoKX19O1BjJiZkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJyZWFkeXN0YXRlY2hhbmdlIixmdW5jdGlvbigpe1BjPSExO1FjKCl9LHtvbmNlOiEwfSk7dmFyIGFkPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD0wLGU9Il9faXNDb25uZWN0ZWQiK2QrKztpZihifHxjKWEucHJvdG90eXBlLmNvbm5lY3RlZENhbGxiYWNrPWEucHJvdG90eXBlLnVhPWZ1bmN0aW9uKCl7UGM/JGMuc2V0KHRoaXMsITApOnRoaXNbZV18fCh0aGlzW2VdPSEwLGImJmIuY2FsbCh0aGlzKSl9LGEucHJvdG90eXBlLmRpc2Nvbm5lY3RlZENhbGxiYWNrPQphLnByb3RvdHlwZS52YT1mdW5jdGlvbigpe1BjP3RoaXMuaXNDb25uZWN0ZWR8fCRjLnNldCh0aGlzLCExKTp0aGlzW2VdJiYodGhpc1tlXT0hMSxjJiZjLmNhbGwodGhpcykpfTtyZXR1cm4gYX0sYmQ9d2luZG93LmN1c3RvbUVsZW1lbnRzLmRlZmluZTtPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LkN1c3RvbUVsZW1lbnRSZWdpc3RyeS5wcm90b3R5cGUsImRlZmluZSIse3ZhbHVlOmZ1bmN0aW9uKGEsYil7dmFyIGM9Yi5wcm90b3R5cGUuY29ubmVjdGVkQ2FsbGJhY2ssZD1iLnByb3RvdHlwZS5kaXNjb25uZWN0ZWRDYWxsYmFjaztiZC5jYWxsKHdpbmRvdy5jdXN0b21FbGVtZW50cyxhLGFkKGIsYyxkKSk7Yi5wcm90b3R5cGUuY29ubmVjdGVkQ2FsbGJhY2s9YztiLnByb3RvdHlwZS5kaXNjb25uZWN0ZWRDYWxsYmFjaz1kfX0pfWZ1bmN0aW9uIHhjKGEpe2E9YS5fX3NoYWR5X2dldFJvb3ROb2RlKCk7aWYoeihhKSlyZXR1cm4gYX07ZnVuY3Rpb24gY2QoYSl7dGhpcy5ub2RlPWF9bj1jZC5wcm90b3R5cGU7bi5hZGRFdmVudExpc3RlbmVyPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfYWRkRXZlbnRMaXN0ZW5lcihhLGIsYyl9O24ucmVtb3ZlRXZlbnRMaXN0ZW5lcj1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIHRoaXMubm9kZS5fX3NoYWR5X3JlbW92ZUV2ZW50TGlzdGVuZXIoYSxiLGMpfTtuLmFwcGVuZENoaWxkPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLm5vZGUuX19zaGFkeV9hcHBlbmRDaGlsZChhKX07bi5pbnNlcnRCZWZvcmU9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfaW5zZXJ0QmVmb3JlKGEsYil9O24ucmVtb3ZlQ2hpbGQ9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMubm9kZS5fX3NoYWR5X3JlbW92ZUNoaWxkKGEpfTtuLnJlcGxhY2VDaGlsZD1mdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLm5vZGUuX19zaGFkeV9yZXBsYWNlQ2hpbGQoYSxiKX07Cm4uY2xvbmVOb2RlPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLm5vZGUuX19zaGFkeV9jbG9uZU5vZGUoYSl9O24uZ2V0Um9vdE5vZGU9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMubm9kZS5fX3NoYWR5X2dldFJvb3ROb2RlKGEpfTtuLmNvbnRhaW5zPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLm5vZGUuX19zaGFkeV9jb250YWlucyhhKX07bi5kaXNwYXRjaEV2ZW50PWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLm5vZGUuX19zaGFkeV9kaXNwYXRjaEV2ZW50KGEpfTtuLnNldEF0dHJpYnV0ZT1mdW5jdGlvbihhLGIpe3RoaXMubm9kZS5fX3NoYWR5X3NldEF0dHJpYnV0ZShhLGIpfTtuLmdldEF0dHJpYnV0ZT1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfbmF0aXZlX2dldEF0dHJpYnV0ZShhKX07bi5oYXNBdHRyaWJ1dGU9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMubm9kZS5fX3NoYWR5X25hdGl2ZV9oYXNBdHRyaWJ1dGUoYSl9O24ucmVtb3ZlQXR0cmlidXRlPWZ1bmN0aW9uKGEpe3RoaXMubm9kZS5fX3NoYWR5X3JlbW92ZUF0dHJpYnV0ZShhKX07Cm4uYXR0YWNoU2hhZG93PWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLm5vZGUuX19zaGFkeV9hdHRhY2hTaGFkb3coYSl9O24uZm9jdXM9ZnVuY3Rpb24oKXt0aGlzLm5vZGUuX19zaGFkeV9uYXRpdmVfZm9jdXMoKX07bi5ibHVyPWZ1bmN0aW9uKCl7dGhpcy5ub2RlLl9fc2hhZHlfYmx1cigpfTtuLmltcG9ydE5vZGU9ZnVuY3Rpb24oYSxiKXtpZih0aGlzLm5vZGUubm9kZVR5cGU9PT1Ob2RlLkRPQ1VNRU5UX05PREUpcmV0dXJuIHRoaXMubm9kZS5fX3NoYWR5X2ltcG9ydE5vZGUoYSxiKX07bi5nZXRFbGVtZW50QnlJZD1mdW5jdGlvbihhKXtpZih0aGlzLm5vZGUubm9kZVR5cGU9PT1Ob2RlLkRPQ1VNRU5UX05PREUpcmV0dXJuIHRoaXMubm9kZS5fX3NoYWR5X2dldEVsZW1lbnRCeUlkKGEpfTtuLnF1ZXJ5U2VsZWN0b3I9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMubm9kZS5fX3NoYWR5X3F1ZXJ5U2VsZWN0b3IoYSl9OwpuLnF1ZXJ5U2VsZWN0b3JBbGw9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfcXVlcnlTZWxlY3RvckFsbChhLGIpfTtuLmFzc2lnbmVkTm9kZXM9ZnVuY3Rpb24oYSl7aWYoInNsb3QiPT09dGhpcy5ub2RlLmxvY2FsTmFtZSlyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfYXNzaWduZWROb2RlcyhhKX07CnAuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoY2QucHJvdG90eXBlLHthY3RpdmVFbGVtZW50Ontjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtpZih6KHRoaXMubm9kZSl8fHRoaXMubm9kZS5ub2RlVHlwZT09PU5vZGUuRE9DVU1FTlRfTk9ERSlyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfYWN0aXZlRWxlbWVudH19LF9hY3RpdmVFbGVtZW50Ontjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hY3RpdmVFbGVtZW50fX0saG9zdDp7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7aWYoeih0aGlzLm5vZGUpKXJldHVybiB0aGlzLm5vZGUuaG9zdH19LHBhcmVudE5vZGU6e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGUuX19zaGFkeV9wYXJlbnROb2RlfX0sZmlyc3RDaGlsZDp7Y29uZmlndXJhYmxlOiEwLAplbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGUuX19zaGFkeV9maXJzdENoaWxkfX0sbGFzdENoaWxkOntjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfbGFzdENoaWxkfX0sbmV4dFNpYmxpbmc6e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGUuX19zaGFkeV9uZXh0U2libGluZ319LHByZXZpb3VzU2libGluZzp7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZS5fX3NoYWR5X3ByZXZpb3VzU2libGluZ319LGNoaWxkTm9kZXM6e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGUuX19zaGFkeV9jaGlsZE5vZGVzfX0scGFyZW50RWxlbWVudDp7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsCmdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGUuX19zaGFkeV9wYXJlbnRFbGVtZW50fX0sZmlyc3RFbGVtZW50Q2hpbGQ6e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGUuX19zaGFkeV9maXJzdEVsZW1lbnRDaGlsZH19LGxhc3RFbGVtZW50Q2hpbGQ6e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGUuX19zaGFkeV9sYXN0RWxlbWVudENoaWxkfX0sbmV4dEVsZW1lbnRTaWJsaW5nOntjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfbmV4dEVsZW1lbnRTaWJsaW5nfX0scHJldmlvdXNFbGVtZW50U2libGluZzp7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZS5fX3NoYWR5X3ByZXZpb3VzRWxlbWVudFNpYmxpbmd9fSwKY2hpbGRyZW46e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGUuX19zaGFkeV9jaGlsZHJlbn19LGNoaWxkRWxlbWVudENvdW50Ontjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfY2hpbGRFbGVtZW50Q291bnR9fSxzaGFkb3dSb290Ontjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfc2hhZG93Um9vdH19LGFzc2lnbmVkU2xvdDp7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZS5fX3NoYWR5X2Fzc2lnbmVkU2xvdH19LGlzQ29ubmVjdGVkOntjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfaXNDb25uZWN0ZWR9fSxpbm5lckhUTUw6e2NvbmZpZ3VyYWJsZTohMCwKZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfaW5uZXJIVE1MfSxzZXQ6ZnVuY3Rpb24oYSl7dGhpcy5ub2RlLl9fc2hhZHlfaW5uZXJIVE1MPWF9fSx0ZXh0Q29udGVudDp7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZS5fX3NoYWR5X3RleHRDb250ZW50fSxzZXQ6ZnVuY3Rpb24oYSl7dGhpcy5ub2RlLl9fc2hhZHlfdGV4dENvbnRlbnQ9YX19LHNsb3Q6e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGUuX19zaGFkeV9zbG90fSxzZXQ6ZnVuY3Rpb24oYSl7dGhpcy5ub2RlLl9fc2hhZHlfc2xvdD1hfX19KTsKY2MuZm9yRWFjaChmdW5jdGlvbihhKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoY2QucHJvdG90eXBlLGEse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGVbIl9fc2hhZHlfIithXX0sc2V0OmZ1bmN0aW9uKGIpe3RoaXMubm9kZVsiX19zaGFkeV8iK2FdPWJ9LGNvbmZpZ3VyYWJsZTohMH0pfSk7dmFyIGRkPW5ldyBXZWFrTWFwO2Z1bmN0aW9uIGVkKGEpe2lmKHooYSl8fGEgaW5zdGFuY2VvZiBjZClyZXR1cm4gYTt2YXIgYj1kZC5nZXQoYSk7Ynx8KGI9bmV3IGNkKGEpLGRkLnNldChhLGIpKTtyZXR1cm4gYn07dmFyIGZkPUIoe2Rpc3BhdGNoRXZlbnQ6ZnVuY3Rpb24oYSl7WmEoKTtyZXR1cm4gdGhpcy5fX3NoYWR5X25hdGl2ZV9kaXNwYXRjaEV2ZW50KGEpfSxhZGRFdmVudExpc3RlbmVyOlViLHJlbW92ZUV2ZW50TGlzdGVuZXI6V2J9KTt2YXIgZ2Q9Qih7Z2V0IGFzc2lnbmVkU2xvdCgpe3ZhciBhPXRoaXMuX19zaGFkeV9wYXJlbnROb2RlOyhhPWEmJmEuX19zaGFkeV9zaGFkb3dSb290KSYmVGMoYSk7cmV0dXJuKGE9dih0aGlzKSkmJmEuYXNzaWduZWRTbG90fHxudWxsfX0pO3ZhciBoZD13aW5kb3cuZG9jdW1lbnQ7ZnVuY3Rpb24gaWQoYSxiKXtpZigic2xvdCI9PT1iKWE9YS5fX3NoYWR5X3BhcmVudE5vZGUsTGEoYSkmJkFjKHYoYSkucm9vdCk7ZWxzZSBpZigic2xvdCI9PT1hLmxvY2FsTmFtZSYmIm5hbWUiPT09YiYmKGI9eGMoYSkpKXtpZihiLmEpe1VjKGIpO3ZhciBjPWEud2EsZD1ZYyhhKTtpZihkIT09Yyl7Yz1iLmJbY107dmFyIGU9Yy5pbmRleE9mKGEpOzA8PWUmJmMuc3BsaWNlKGUsMSk7Yz1iLmJbZF18fChiLmJbZF09W10pO2MucHVzaChhKTsxPGMubGVuZ3RoJiYoYi5iW2RdPVpjKGMpKX19QWMoYil9fQp2YXIgamQ9Qih7Z2V0IHByZXZpb3VzRWxlbWVudFNpYmxpbmcoKXt2YXIgYT12KHRoaXMpO2lmKGEmJnZvaWQgMCE9PWEucHJldmlvdXNTaWJsaW5nKXtmb3IoYT10aGlzLl9fc2hhZHlfcHJldmlvdXNTaWJsaW5nO2EmJmEubm9kZVR5cGUhPT1Ob2RlLkVMRU1FTlRfTk9ERTspYT1hLl9fc2hhZHlfcHJldmlvdXNTaWJsaW5nO3JldHVybiBhfXJldHVybiB0aGlzLl9fc2hhZHlfbmF0aXZlX3ByZXZpb3VzRWxlbWVudFNpYmxpbmd9LGdldCBuZXh0RWxlbWVudFNpYmxpbmcoKXt2YXIgYT12KHRoaXMpO2lmKGEmJnZvaWQgMCE9PWEubmV4dFNpYmxpbmcpe2ZvcihhPXRoaXMuX19zaGFkeV9uZXh0U2libGluZzthJiZhLm5vZGVUeXBlIT09Tm9kZS5FTEVNRU5UX05PREU7KWE9YS5fX3NoYWR5X25leHRTaWJsaW5nO3JldHVybiBhfXJldHVybiB0aGlzLl9fc2hhZHlfbmF0aXZlX25leHRFbGVtZW50U2libGluZ30sZ2V0IHNsb3QoKXtyZXR1cm4gdGhpcy5nZXRBdHRyaWJ1dGUoInNsb3QiKX0sCnNldCBzbG90KGEpe3RoaXMuX19zaGFkeV9zZXRBdHRyaWJ1dGUoInNsb3QiLGEpfSxnZXQgc2hhZG93Um9vdCgpe3ZhciBhPXYodGhpcyk7cmV0dXJuIGEmJmEucGF8fG51bGx9LGdldCBjbGFzc05hbWUoKXtyZXR1cm4gdGhpcy5nZXRBdHRyaWJ1dGUoImNsYXNzIil8fCIifSxzZXQgY2xhc3NOYW1lKGEpe3RoaXMuX19zaGFkeV9zZXRBdHRyaWJ1dGUoImNsYXNzIixhKX0sc2V0QXR0cmlidXRlOmZ1bmN0aW9uKGEsYil7aWYodGhpcy5vd25lckRvY3VtZW50IT09aGQpdGhpcy5fX3NoYWR5X25hdGl2ZV9zZXRBdHRyaWJ1dGUoYSxiKTtlbHNle3ZhciBjOyhjPUcoKSkmJiJjbGFzcyI9PT1hPyhjLnNldEVsZW1lbnRDbGFzcyh0aGlzLGIpLGM9ITApOmM9ITE7Y3x8KHRoaXMuX19zaGFkeV9uYXRpdmVfc2V0QXR0cmlidXRlKGEsYiksaWQodGhpcyxhKSl9fSxyZW1vdmVBdHRyaWJ1dGU6ZnVuY3Rpb24oYSl7dGhpcy5fX3NoYWR5X25hdGl2ZV9yZW1vdmVBdHRyaWJ1dGUoYSk7aWQodGhpcywKYSl9LGF0dGFjaFNoYWRvdzpmdW5jdGlvbihhKXtpZighdGhpcyl0aHJvdyBFcnJvcigiTXVzdCBwcm92aWRlIGEgaG9zdC4iKTtpZighYSl0aHJvdyBFcnJvcigiTm90IGVub3VnaCBhcmd1bWVudHMuIik7cmV0dXJuIG5ldyBTYyhPYyx0aGlzLGEpfX0pO3ZhciBrZD1CKHtibHVyOmZ1bmN0aW9uKCl7dmFyIGE9dih0aGlzKTsoYT0oYT1hJiZhLnJvb3QpJiZhLmFjdGl2ZUVsZW1lbnQpP2EuX19zaGFkeV9ibHVyKCk6dGhpcy5fX3NoYWR5X25hdGl2ZV9ibHVyKCl9fSk7Y2MuZm9yRWFjaChmdW5jdGlvbihhKXtrZFthXT17c2V0OmZ1bmN0aW9uKGIpe3ZhciBjPXUodGhpcyksZD1hLnN1YnN0cmluZygyKTtjLk9bYV0mJnRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihkLGMuT1thXSk7dGhpcy5fX3NoYWR5X2FkZEV2ZW50TGlzdGVuZXIoZCxiKTtjLk9bYV09Yn0sZ2V0OmZ1bmN0aW9uKCl7dmFyIGI9dih0aGlzKTtyZXR1cm4gYiYmYi5PW2FdfSxjb25maWd1cmFibGU6ITB9fSk7dmFyIGxkPUIoe2Fzc2lnbmVkTm9kZXM6ZnVuY3Rpb24oYSl7aWYoInNsb3QiPT09dGhpcy5sb2NhbE5hbWUpe3ZhciBiPXRoaXMuX19zaGFkeV9nZXRSb290Tm9kZSgpO2ImJnooYikmJlRjKGIpO3JldHVybihiPXYodGhpcykpPyhhJiZhLmZsYXR0ZW4/Yi5EOmIuYXNzaWduZWROb2Rlcyl8fFtdOltdfX19KTt2YXIgbWQ9d2luZG93LmRvY3VtZW50LG5kPUIoe2ltcG9ydE5vZGU6ZnVuY3Rpb24oYSxiKXtpZihhLm93bmVyRG9jdW1lbnQhPT1tZHx8InRlbXBsYXRlIj09PWEubG9jYWxOYW1lKXJldHVybiB0aGlzLl9fc2hhZHlfbmF0aXZlX2ltcG9ydE5vZGUoYSxiKTt2YXIgYz10aGlzLl9fc2hhZHlfbmF0aXZlX2ltcG9ydE5vZGUoYSwhMSk7aWYoYil7YT1hLl9fc2hhZHlfY2hpbGROb2RlcztiPTA7Zm9yKHZhciBkO2I8YS5sZW5ndGg7YisrKWQ9dGhpcy5fX3NoYWR5X2ltcG9ydE5vZGUoYVtiXSwhMCksYy5fX3NoYWR5X2FwcGVuZENoaWxkKGQpfXJldHVybiBjfX0pO3ZhciBvZD1CKHthZGRFdmVudExpc3RlbmVyOlViLmJpbmQod2luZG93KSxyZW1vdmVFdmVudExpc3RlbmVyOldiLmJpbmQod2luZG93KX0pO3ZhciBwZD17fTtPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEhUTUxFbGVtZW50LnByb3RvdHlwZSwicGFyZW50RWxlbWVudCIpJiYocGQucGFyZW50RWxlbWVudD1DYy5wYXJlbnRFbGVtZW50KTtPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEhUTUxFbGVtZW50LnByb3RvdHlwZSwiY29udGFpbnMiKSYmKHBkLmNvbnRhaW5zPUNjLmNvbnRhaW5zKTtPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEhUTUxFbGVtZW50LnByb3RvdHlwZSwiY2hpbGRyZW4iKSYmKHBkLmNoaWxkcmVuPUZjLmNoaWxkcmVuKTtPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEhUTUxFbGVtZW50LnByb3RvdHlwZSwiaW5uZXJIVE1MIikmJihwZC5pbm5lckhUTUw9TGMuaW5uZXJIVE1MKTtPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEhUTUxFbGVtZW50LnByb3RvdHlwZSwiY2xhc3NOYW1lIikmJihwZC5jbGFzc05hbWU9amQuY2xhc3NOYW1lKTsKdmFyIHFkPXtFdmVudFRhcmdldDpbZmRdLE5vZGU6W0NjLHdpbmRvdy5FdmVudFRhcmdldD9udWxsOmZkXSxUZXh0OltnZF0sRWxlbWVudDpbamQsRmMsZ2QsIXcubXx8ImlubmVySFRNTCJpbiBFbGVtZW50LnByb3RvdHlwZT9MYzpudWxsLHdpbmRvdy5IVE1MU2xvdEVsZW1lbnQ/bnVsbDpsZF0sSFRNTEVsZW1lbnQ6W2tkLHBkXSxIVE1MU2xvdEVsZW1lbnQ6W2xkXSxEb2N1bWVudEZyYWdtZW50OltIYyxJY10sRG9jdW1lbnQ6W25kLEhjLEljLEpjXSxXaW5kb3c6W29kXX0scmQ9dy5tP251bGw6WyJpbm5lckhUTUwiLCJ0ZXh0Q29udGVudCJdO2Z1bmN0aW9uIHNkKGEpe3ZhciBiPWE/bnVsbDpyZCxjPXt9LGQ7Zm9yKGQgaW4gcWQpYy5XPXdpbmRvd1tkXSYmd2luZG93W2RdLnByb3RvdHlwZSxxZFtkXS5mb3JFYWNoKGZ1bmN0aW9uKGMpe3JldHVybiBmdW5jdGlvbihkKXtyZXR1cm4gYy5XJiZkJiZBKGMuVyxkLGEsYil9fShjKSksYz17VzpjLld9fTtpZih3LmVhKXt2YXIgU2hhZHlET009e2luVXNlOncuZWEscGF0Y2g6ZnVuY3Rpb24oYSl7RmIoYSk7RWIoYSk7cmV0dXJuIGF9LGlzU2hhZHlSb290OnosZW5xdWV1ZTpZYSxmbHVzaDpaYSxmbHVzaEluaXRpYWw6ZnVuY3Rpb24oYSl7IWEuYmEmJmEuQiYmVGMoYSl9LHNldHRpbmdzOncsZmlsdGVyTXV0YXRpb25zOmRiLG9ic2VydmVDaGlsZHJlbjpiYix1bm9ic2VydmVDaGlsZHJlbjpjYixkZWZlckNvbm5lY3Rpb25DYWxsYmFja3M6dy5kZWZlckNvbm5lY3Rpb25DYWxsYmFja3MscHJlZmVyUGVyZm9ybWFuY2U6dy5wcmVmZXJQZXJmb3JtYW5jZSxoYW5kbGVzRHluYW1pY1Njb3Bpbmc6ITAsd3JhcDp3Lko/ZWQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGF9LFdyYXBwZXI6Y2QsY29tcG9zZWRQYXRoOk1iLG5vUGF0Y2g6dy5KLG5hdGl2ZU1ldGhvZHM6cWIsbmF0aXZlVHJlZTpyYn07d2luZG93LlNoYWR5RE9NPVNoYWR5RE9NO3liKCk7c2QoIl9fc2hhZHlfIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KGRvY3VtZW50LAoiX2FjdGl2ZUVsZW1lbnQiLEpjLmFjdGl2ZUVsZW1lbnQpO0EoV2luZG93LnByb3RvdHlwZSxvZCwiX19zaGFkeV8iKTt3Lkp8fChzZCgpLGJjKCkpO1hiKCk7d2luZG93LkV2ZW50PVpiO3dpbmRvdy5DdXN0b21FdmVudD0kYjt3aW5kb3cuTW91c2VFdmVudD1hYzt3aW5kb3cuU2hhZG93Um9vdD1TY307dmFyIHRkPW5ldyBTZXQoImFubm90YXRpb24teG1sIGNvbG9yLXByb2ZpbGUgZm9udC1mYWNlIGZvbnQtZmFjZS1zcmMgZm9udC1mYWNlLXVyaSBmb250LWZhY2UtZm9ybWF0IGZvbnQtZmFjZS1uYW1lIG1pc3NpbmctZ2x5cGgiLnNwbGl0KCIgIikpO2Z1bmN0aW9uIHVkKGEpe3ZhciBiPXRkLmhhcyhhKTthPS9eW2Etel1bLjAtOV9hLXpdKi1bXC0uMC05X2Etel0qJC8udGVzdChhKTtyZXR1cm4hYiYmYX1mdW5jdGlvbiBIKGEpe3ZhciBiPWEuaXNDb25uZWN0ZWQ7aWYodm9pZCAwIT09YilyZXR1cm4gYjtmb3IoO2EmJiEoYS5fX0NFX2lzSW1wb3J0RG9jdW1lbnR8fGEgaW5zdGFuY2VvZiBEb2N1bWVudCk7KWE9YS5wYXJlbnROb2RlfHwod2luZG93LlNoYWRvd1Jvb3QmJmEgaW5zdGFuY2VvZiBTaGFkb3dSb290P2EuaG9zdDp2b2lkIDApO3JldHVybiEoIWF8fCEoYS5fX0NFX2lzSW1wb3J0RG9jdW1lbnR8fGEgaW5zdGFuY2VvZiBEb2N1bWVudCkpfQpmdW5jdGlvbiB2ZChhLGIpe2Zvcig7YiYmYiE9PWEmJiFiLm5leHRTaWJsaW5nOyliPWIucGFyZW50Tm9kZTtyZXR1cm4gYiYmYiE9PWE/Yi5uZXh0U2libGluZzpudWxsfQpmdW5jdGlvbiB3ZChhLGIsYyl7Yz12b2lkIDA9PT1jP25ldyBTZXQ6Yztmb3IodmFyIGQ9YTtkOyl7aWYoZC5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFKXt2YXIgZT1kO2IoZSk7dmFyIGY9ZS5sb2NhbE5hbWU7aWYoImxpbmsiPT09ZiYmImltcG9ydCI9PT1lLmdldEF0dHJpYnV0ZSgicmVsIikpe2Q9ZS5pbXBvcnQ7aWYoZCBpbnN0YW5jZW9mIE5vZGUmJiFjLmhhcyhkKSlmb3IoYy5hZGQoZCksZD1kLmZpcnN0Q2hpbGQ7ZDtkPWQubmV4dFNpYmxpbmcpd2QoZCxiLGMpO2Q9dmQoYSxlKTtjb250aW51ZX1lbHNlIGlmKCJ0ZW1wbGF0ZSI9PT1mKXtkPXZkKGEsZSk7Y29udGludWV9aWYoZT1lLl9fQ0Vfc2hhZG93Um9vdClmb3IoZT1lLmZpcnN0Q2hpbGQ7ZTtlPWUubmV4dFNpYmxpbmcpd2QoZSxiLGMpfWQ9ZC5maXJzdENoaWxkP2QuZmlyc3RDaGlsZDp2ZChhLGQpfX1mdW5jdGlvbiBJKGEsYixjKXthW2JdPWN9O2Z1bmN0aW9uIHhkKCl7dGhpcy5hPW5ldyBNYXA7dGhpcy5nPW5ldyBNYXA7dGhpcy5mPVtdO3RoaXMuYz0hMX1mdW5jdGlvbiB5ZChhLGIsYyl7YS5hLnNldChiLGMpO2EuZy5zZXQoYy5jb25zdHJ1Y3RvckZ1bmN0aW9uLGMpfWZ1bmN0aW9uIHpkKGEsYil7YS5jPSEwO2EuZi5wdXNoKGIpfWZ1bmN0aW9uIEFkKGEsYil7YS5jJiZ3ZChiLGZ1bmN0aW9uKGIpe3JldHVybiBhLmIoYil9KX14ZC5wcm90b3R5cGUuYj1mdW5jdGlvbihhKXtpZih0aGlzLmMmJiFhLl9fQ0VfcGF0Y2hlZCl7YS5fX0NFX3BhdGNoZWQ9ITA7Zm9yKHZhciBiPTA7Yjx0aGlzLmYubGVuZ3RoO2IrKyl0aGlzLmZbYl0oYSl9fTtmdW5jdGlvbiBKKGEsYil7dmFyIGM9W107d2QoYixmdW5jdGlvbihhKXtyZXR1cm4gYy5wdXNoKGEpfSk7Zm9yKGI9MDtiPGMubGVuZ3RoO2IrKyl7dmFyIGQ9Y1tiXTsxPT09ZC5fX0NFX3N0YXRlP2EuY29ubmVjdGVkQ2FsbGJhY2soZCk6QmQoYSxkKX19CmZ1bmN0aW9uIEsoYSxiKXt2YXIgYz1bXTt3ZChiLGZ1bmN0aW9uKGEpe3JldHVybiBjLnB1c2goYSl9KTtmb3IoYj0wO2I8Yy5sZW5ndGg7YisrKXt2YXIgZD1jW2JdOzE9PT1kLl9fQ0Vfc3RhdGUmJmEuZGlzY29ubmVjdGVkQ2FsbGJhY2soZCl9fQpmdW5jdGlvbiBMKGEsYixjKXtjPXZvaWQgMD09PWM/e306Yzt2YXIgZD1jLlhhfHxuZXcgU2V0LGU9Yy5ZfHxmdW5jdGlvbihiKXtyZXR1cm4gQmQoYSxiKX0sZj1bXTt3ZChiLGZ1bmN0aW9uKGIpe2lmKCJsaW5rIj09PWIubG9jYWxOYW1lJiYiaW1wb3J0Ij09PWIuZ2V0QXR0cmlidXRlKCJyZWwiKSl7dmFyIGM9Yi5pbXBvcnQ7YyBpbnN0YW5jZW9mIE5vZGUmJihjLl9fQ0VfaXNJbXBvcnREb2N1bWVudD0hMCxjLl9fQ0VfaGFzUmVnaXN0cnk9ITApO2MmJiJjb21wbGV0ZSI9PT1jLnJlYWR5U3RhdGU/Yy5fX0NFX2RvY3VtZW50TG9hZEhhbmRsZWQ9ITA6Yi5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixmdW5jdGlvbigpe3ZhciBjPWIuaW1wb3J0O2lmKCFjLl9fQ0VfZG9jdW1lbnRMb2FkSGFuZGxlZCl7Yy5fX0NFX2RvY3VtZW50TG9hZEhhbmRsZWQ9ITA7dmFyIGY9bmV3IFNldChkKTtmLmRlbGV0ZShjKTtMKGEsYyx7WGE6ZixZOmV9KX19KX1lbHNlIGYucHVzaChiKX0sZCk7aWYoYS5jKWZvcihiPQowO2I8Zi5sZW5ndGg7YisrKWEuYihmW2JdKTtmb3IoYj0wO2I8Zi5sZW5ndGg7YisrKWUoZltiXSl9CmZ1bmN0aW9uIEJkKGEsYil7aWYodm9pZCAwPT09Yi5fX0NFX3N0YXRlKXt2YXIgYz1iLm93bmVyRG9jdW1lbnQ7aWYoYy5kZWZhdWx0Vmlld3x8Yy5fX0NFX2lzSW1wb3J0RG9jdW1lbnQmJmMuX19DRV9oYXNSZWdpc3RyeSlpZihjPWEuYS5nZXQoYi5sb2NhbE5hbWUpKXtjLmNvbnN0cnVjdGlvblN0YWNrLnB1c2goYik7dmFyIGQ9Yy5jb25zdHJ1Y3RvckZ1bmN0aW9uO3RyeXt0cnl7aWYobmV3IGQhPT1iKXRocm93IEVycm9yKCJUaGUgY3VzdG9tIGVsZW1lbnQgY29uc3RydWN0b3IgZGlkIG5vdCBwcm9kdWNlIHRoZSBlbGVtZW50IGJlaW5nIHVwZ3JhZGVkLiIpO31maW5hbGx5e2MuY29uc3RydWN0aW9uU3RhY2sucG9wKCl9fWNhdGNoKGcpe3Rocm93IGIuX19DRV9zdGF0ZT0yLGc7fWIuX19DRV9zdGF0ZT0xO2IuX19DRV9kZWZpbml0aW9uPWM7aWYoYy5hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2spZm9yKGM9Yy5vYnNlcnZlZEF0dHJpYnV0ZXMsZD0wO2Q8Yy5sZW5ndGg7ZCsrKXt2YXIgZT0KY1tkXSxmPWIuZ2V0QXR0cmlidXRlKGUpO251bGwhPT1mJiZhLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhiLGUsbnVsbCxmLG51bGwpfUgoYikmJmEuY29ubmVjdGVkQ2FsbGJhY2soYil9fX14ZC5wcm90b3R5cGUuY29ubmVjdGVkQ2FsbGJhY2s9ZnVuY3Rpb24oYSl7dmFyIGI9YS5fX0NFX2RlZmluaXRpb247Yi5jb25uZWN0ZWRDYWxsYmFjayYmYi5jb25uZWN0ZWRDYWxsYmFjay5jYWxsKGEpfTt4ZC5wcm90b3R5cGUuZGlzY29ubmVjdGVkQ2FsbGJhY2s9ZnVuY3Rpb24oYSl7dmFyIGI9YS5fX0NFX2RlZmluaXRpb247Yi5kaXNjb25uZWN0ZWRDYWxsYmFjayYmYi5kaXNjb25uZWN0ZWRDYWxsYmFjay5jYWxsKGEpfTsKeGQucHJvdG90eXBlLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaz1mdW5jdGlvbihhLGIsYyxkLGUpe3ZhciBmPWEuX19DRV9kZWZpbml0aW9uO2YuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrJiYtMTxmLm9ic2VydmVkQXR0cmlidXRlcy5pbmRleE9mKGIpJiZmLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjay5jYWxsKGEsYixjLGQsZSl9O2Z1bmN0aW9uIENkKGEpe3ZhciBiPWRvY3VtZW50O3RoaXMuYj1hO3RoaXMuYT1iO3RoaXMuRj12b2lkIDA7TCh0aGlzLmIsdGhpcy5hKTsibG9hZGluZyI9PT10aGlzLmEucmVhZHlTdGF0ZSYmKHRoaXMuRj1uZXcgTXV0YXRpb25PYnNlcnZlcih0aGlzLmMuYmluZCh0aGlzKSksdGhpcy5GLm9ic2VydmUodGhpcy5hLHtjaGlsZExpc3Q6ITAsc3VidHJlZTohMH0pKX1mdW5jdGlvbiBEZChhKXthLkYmJmEuRi5kaXNjb25uZWN0KCl9Q2QucHJvdG90eXBlLmM9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5hLnJlYWR5U3RhdGU7ImludGVyYWN0aXZlIiE9PWImJiJjb21wbGV0ZSIhPT1ifHxEZCh0aGlzKTtmb3IoYj0wO2I8YS5sZW5ndGg7YisrKWZvcih2YXIgYz1hW2JdLmFkZGVkTm9kZXMsZD0wO2Q8Yy5sZW5ndGg7ZCsrKUwodGhpcy5iLGNbZF0pfTtmdW5jdGlvbiBFZCgpe3ZhciBhPXRoaXM7dGhpcy5hPXRoaXMuaD12b2lkIDA7dGhpcy5iPW5ldyBQcm9taXNlKGZ1bmN0aW9uKGIpe2EuYT1iO2EuaCYmYihhLmgpfSl9RWQucHJvdG90eXBlLnJlc29sdmU9ZnVuY3Rpb24oYSl7aWYodGhpcy5oKXRocm93IEVycm9yKCJBbHJlYWR5IHJlc29sdmVkLiIpO3RoaXMuaD1hO3RoaXMuYSYmdGhpcy5hKGEpfTtmdW5jdGlvbiBOKGEpe3RoaXMuYz0hMTt0aGlzLmE9YTt0aGlzLmw9bmV3IE1hcDt0aGlzLmY9ZnVuY3Rpb24oYSl7cmV0dXJuIGEoKX07dGhpcy5iPSExO3RoaXMuZz1bXTt0aGlzLmRhPW5ldyBDZChhKX1uPU4ucHJvdG90eXBlOwpuLnNhPWZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcztpZighKGIgaW5zdGFuY2VvZiBGdW5jdGlvbikpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ3VzdG9tIGVsZW1lbnQgY29uc3RydWN0b3JzIG11c3QgYmUgZnVuY3Rpb25zLiIpO2lmKCF1ZChhKSl0aHJvdyBuZXcgU3ludGF4RXJyb3IoIlRoZSBlbGVtZW50IG5hbWUgJyIrYSsiJyBpcyBub3QgdmFsaWQuIik7aWYodGhpcy5hLmEuZ2V0KGEpKXRocm93IEVycm9yKCJBIGN1c3RvbSBlbGVtZW50IHdpdGggbmFtZSAnIithKyInIGhhcyBhbHJlYWR5IGJlZW4gZGVmaW5lZC4iKTtpZih0aGlzLmMpdGhyb3cgRXJyb3IoIkEgY3VzdG9tIGVsZW1lbnQgaXMgYWxyZWFkeSBiZWluZyBkZWZpbmVkLiIpO3RoaXMuYz0hMDt0cnl7dmFyIGQ9ZnVuY3Rpb24oYSl7dmFyIGI9ZVthXTtpZih2b2lkIDAhPT1iJiYhKGIgaW5zdGFuY2VvZiBGdW5jdGlvbikpdGhyb3cgRXJyb3IoIlRoZSAnIithKyInIGNhbGxiYWNrIG11c3QgYmUgYSBmdW5jdGlvbi4iKTsKcmV0dXJuIGJ9LGU9Yi5wcm90b3R5cGU7aWYoIShlIGluc3RhbmNlb2YgT2JqZWN0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJUaGUgY3VzdG9tIGVsZW1lbnQgY29uc3RydWN0b3IncyBwcm90b3R5cGUgaXMgbm90IGFuIG9iamVjdC4iKTt2YXIgZj1kKCJjb25uZWN0ZWRDYWxsYmFjayIpO3ZhciBnPWQoImRpc2Nvbm5lY3RlZENhbGxiYWNrIik7dmFyIGg9ZCgiYWRvcHRlZENhbGxiYWNrIik7dmFyIGs9ZCgiYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrIik7dmFyIGw9Yi5vYnNlcnZlZEF0dHJpYnV0ZXN8fFtdfWNhdGNoKG0pe3JldHVybn1maW5hbGx5e3RoaXMuYz0hMX1iPXtsb2NhbE5hbWU6YSxjb25zdHJ1Y3RvckZ1bmN0aW9uOmIsY29ubmVjdGVkQ2FsbGJhY2s6ZixkaXNjb25uZWN0ZWRDYWxsYmFjazpnLGFkb3B0ZWRDYWxsYmFjazpoLGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjazprLG9ic2VydmVkQXR0cmlidXRlczpsLGNvbnN0cnVjdGlvblN0YWNrOltdfTt5ZCh0aGlzLmEsCmEsYik7dGhpcy5nLnB1c2goYik7dGhpcy5ifHwodGhpcy5iPSEwLHRoaXMuZihmdW5jdGlvbigpe3JldHVybiBGZChjKX0pKX07bi5ZPWZ1bmN0aW9uKGEpe0wodGhpcy5hLGEpfTsKZnVuY3Rpb24gRmQoYSl7aWYoITEhPT1hLmIpe2EuYj0hMTtmb3IodmFyIGI9YS5nLGM9W10sZD1uZXcgTWFwLGU9MDtlPGIubGVuZ3RoO2UrKylkLnNldChiW2VdLmxvY2FsTmFtZSxbXSk7TChhLmEsZG9jdW1lbnQse1k6ZnVuY3Rpb24oYil7aWYodm9pZCAwPT09Yi5fX0NFX3N0YXRlKXt2YXIgZT1iLmxvY2FsTmFtZSxmPWQuZ2V0KGUpO2Y/Zi5wdXNoKGIpOmEuYS5hLmdldChlKSYmYy5wdXNoKGIpfX19KTtmb3IoZT0wO2U8Yy5sZW5ndGg7ZSsrKUJkKGEuYSxjW2VdKTtmb3IoOzA8Yi5sZW5ndGg7KXt2YXIgZj1iLnNoaWZ0KCk7ZT1mLmxvY2FsTmFtZTtmPWQuZ2V0KGYubG9jYWxOYW1lKTtmb3IodmFyIGc9MDtnPGYubGVuZ3RoO2crKylCZChhLmEsZltnXSk7KGU9YS5sLmdldChlKSkmJmUucmVzb2x2ZSh2b2lkIDApfX19bi5nZXQ9ZnVuY3Rpb24oYSl7aWYoYT10aGlzLmEuYS5nZXQoYSkpcmV0dXJuIGEuY29uc3RydWN0b3JGdW5jdGlvbn07Cm4udGE9ZnVuY3Rpb24oYSl7aWYoIXVkKGEpKXJldHVybiBQcm9taXNlLnJlamVjdChuZXcgU3ludGF4RXJyb3IoIiciK2ErIicgaXMgbm90IGEgdmFsaWQgY3VzdG9tIGVsZW1lbnQgbmFtZS4iKSk7dmFyIGI9dGhpcy5sLmdldChhKTtpZihiKXJldHVybiBiLmI7Yj1uZXcgRWQ7dGhpcy5sLnNldChhLGIpO3RoaXMuYS5hLmdldChhKSYmIXRoaXMuZy5zb21lKGZ1bmN0aW9uKGIpe3JldHVybiBiLmxvY2FsTmFtZT09PWF9KSYmYi5yZXNvbHZlKHZvaWQgMCk7cmV0dXJuIGIuYn07bi5QYT1mdW5jdGlvbihhKXtEZCh0aGlzLmRhKTt2YXIgYj10aGlzLmY7dGhpcy5mPWZ1bmN0aW9uKGMpe3JldHVybiBhKGZ1bmN0aW9uKCl7cmV0dXJuIGIoYyl9KX19O3dpbmRvdy5DdXN0b21FbGVtZW50UmVnaXN0cnk9TjtOLnByb3RvdHlwZS5kZWZpbmU9Ti5wcm90b3R5cGUuc2E7Ti5wcm90b3R5cGUudXBncmFkZT1OLnByb3RvdHlwZS5ZO04ucHJvdG90eXBlLmdldD1OLnByb3RvdHlwZS5nZXQ7Ck4ucHJvdG90eXBlLndoZW5EZWZpbmVkPU4ucHJvdG90eXBlLnRhO04ucHJvdG90eXBlLnBvbHlmaWxsV3JhcEZsdXNoQ2FsbGJhY2s9Ti5wcm90b3R5cGUuUGE7dmFyIEdkPXdpbmRvdy5Eb2N1bWVudC5wcm90b3R5cGUuY3JlYXRlRWxlbWVudCxIZD13aW5kb3cuRG9jdW1lbnQucHJvdG90eXBlLmNyZWF0ZUVsZW1lbnROUyxJZD13aW5kb3cuRG9jdW1lbnQucHJvdG90eXBlLmltcG9ydE5vZGUsSmQ9d2luZG93LkRvY3VtZW50LnByb3RvdHlwZS5wcmVwZW5kLEtkPXdpbmRvdy5Eb2N1bWVudC5wcm90b3R5cGUuYXBwZW5kLExkPXdpbmRvdy5Eb2N1bWVudEZyYWdtZW50LnByb3RvdHlwZS5wcmVwZW5kLE1kPXdpbmRvdy5Eb2N1bWVudEZyYWdtZW50LnByb3RvdHlwZS5hcHBlbmQsTmQ9d2luZG93Lk5vZGUucHJvdG90eXBlLmNsb25lTm9kZSxPZD13aW5kb3cuTm9kZS5wcm90b3R5cGUuYXBwZW5kQ2hpbGQsUGQ9d2luZG93Lk5vZGUucHJvdG90eXBlLmluc2VydEJlZm9yZSxRZD13aW5kb3cuTm9kZS5wcm90b3R5cGUucmVtb3ZlQ2hpbGQsUmQ9d2luZG93Lk5vZGUucHJvdG90eXBlLnJlcGxhY2VDaGlsZCxTZD1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHdpbmRvdy5Ob2RlLnByb3RvdHlwZSwKInRleHRDb250ZW50IiksVGQ9d2luZG93LkVsZW1lbnQucHJvdG90eXBlLmF0dGFjaFNoYWRvdyxVZD1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHdpbmRvdy5FbGVtZW50LnByb3RvdHlwZSwiaW5uZXJIVE1MIiksVmQ9d2luZG93LkVsZW1lbnQucHJvdG90eXBlLmdldEF0dHJpYnV0ZSxXZD13aW5kb3cuRWxlbWVudC5wcm90b3R5cGUuc2V0QXR0cmlidXRlLFhkPXdpbmRvdy5FbGVtZW50LnByb3RvdHlwZS5yZW1vdmVBdHRyaWJ1dGUsWWQ9d2luZG93LkVsZW1lbnQucHJvdG90eXBlLmdldEF0dHJpYnV0ZU5TLFpkPXdpbmRvdy5FbGVtZW50LnByb3RvdHlwZS5zZXRBdHRyaWJ1dGVOUywkZD13aW5kb3cuRWxlbWVudC5wcm90b3R5cGUucmVtb3ZlQXR0cmlidXRlTlMsYWU9d2luZG93LkVsZW1lbnQucHJvdG90eXBlLmluc2VydEFkamFjZW50RWxlbWVudCxiZT13aW5kb3cuRWxlbWVudC5wcm90b3R5cGUuaW5zZXJ0QWRqYWNlbnRIVE1MLGNlPXdpbmRvdy5FbGVtZW50LnByb3RvdHlwZS5wcmVwZW5kLApkZT13aW5kb3cuRWxlbWVudC5wcm90b3R5cGUuYXBwZW5kLGVlPXdpbmRvdy5FbGVtZW50LnByb3RvdHlwZS5iZWZvcmUsZmU9d2luZG93LkVsZW1lbnQucHJvdG90eXBlLmFmdGVyLGdlPXdpbmRvdy5FbGVtZW50LnByb3RvdHlwZS5yZXBsYWNlV2l0aCxoZT13aW5kb3cuRWxlbWVudC5wcm90b3R5cGUucmVtb3ZlLGllPXdpbmRvdy5IVE1MRWxlbWVudCxqZT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHdpbmRvdy5IVE1MRWxlbWVudC5wcm90b3R5cGUsImlubmVySFRNTCIpLGtlPXdpbmRvdy5IVE1MRWxlbWVudC5wcm90b3R5cGUuaW5zZXJ0QWRqYWNlbnRFbGVtZW50LGxlPXdpbmRvdy5IVE1MRWxlbWVudC5wcm90b3R5cGUuaW5zZXJ0QWRqYWNlbnRIVE1MO3ZhciBtZT1uZXcgZnVuY3Rpb24oKXt9O2Z1bmN0aW9uIG5lKCl7dmFyIGE9b2U7d2luZG93LkhUTUxFbGVtZW50PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYigpe3ZhciBiPXRoaXMuY29uc3RydWN0b3IsZD1hLmcuZ2V0KGIpO2lmKCFkKXRocm93IEVycm9yKCJUaGUgY3VzdG9tIGVsZW1lbnQgYmVpbmcgY29uc3RydWN0ZWQgd2FzIG5vdCByZWdpc3RlcmVkIHdpdGggYGN1c3RvbUVsZW1lbnRzYC4iKTt2YXIgZT1kLmNvbnN0cnVjdGlvblN0YWNrO2lmKDA9PT1lLmxlbmd0aClyZXR1cm4gZT1HZC5jYWxsKGRvY3VtZW50LGQubG9jYWxOYW1lKSxPYmplY3Quc2V0UHJvdG90eXBlT2YoZSxiLnByb3RvdHlwZSksZS5fX0NFX3N0YXRlPTEsZS5fX0NFX2RlZmluaXRpb249ZCxhLmIoZSksZTtkPWUubGVuZ3RoLTE7dmFyIGY9ZVtkXTtpZihmPT09bWUpdGhyb3cgRXJyb3IoIlRoZSBIVE1MRWxlbWVudCBjb25zdHJ1Y3RvciB3YXMgZWl0aGVyIGNhbGxlZCByZWVudHJhbnRseSBmb3IgdGhpcyBjb25zdHJ1Y3RvciBvciBjYWxsZWQgbXVsdGlwbGUgdGltZXMuIik7CmVbZF09bWU7T2JqZWN0LnNldFByb3RvdHlwZU9mKGYsYi5wcm90b3R5cGUpO2EuYihmKTtyZXR1cm4gZn1iLnByb3RvdHlwZT1pZS5wcm90b3R5cGU7T2JqZWN0LmRlZmluZVByb3BlcnR5KGIucHJvdG90eXBlLCJjb25zdHJ1Y3RvciIse3dyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLHZhbHVlOmJ9KTtyZXR1cm4gYn0oKX07ZnVuY3Rpb24gcGUoYSxiLGMpe2Z1bmN0aW9uIGQoYil7cmV0dXJuIGZ1bmN0aW9uKGMpe2Zvcih2YXIgZD1bXSxlPTA7ZTxhcmd1bWVudHMubGVuZ3RoOysrZSlkW2VdPWFyZ3VtZW50c1tlXTtlPVtdO2Zvcih2YXIgZj1bXSxsPTA7bDxkLmxlbmd0aDtsKyspe3ZhciBtPWRbbF07bSBpbnN0YW5jZW9mIEVsZW1lbnQmJkgobSkmJmYucHVzaChtKTtpZihtIGluc3RhbmNlb2YgRG9jdW1lbnRGcmFnbWVudClmb3IobT1tLmZpcnN0Q2hpbGQ7bTttPW0ubmV4dFNpYmxpbmcpZS5wdXNoKG0pO2Vsc2UgZS5wdXNoKG0pfWIuYXBwbHkodGhpcyxkKTtmb3IoZD0wO2Q8Zi5sZW5ndGg7ZCsrKUsoYSxmW2RdKTtpZihIKHRoaXMpKWZvcihkPTA7ZDxlLmxlbmd0aDtkKyspZj1lW2RdLGYgaW5zdGFuY2VvZiBFbGVtZW50JiZKKGEsZil9fXZvaWQgMCE9PWMuViYmKGIucHJlcGVuZD1kKGMuVikpO3ZvaWQgMCE9PWMuYXBwZW5kJiYoYi5hcHBlbmQ9ZChjLmFwcGVuZCkpfTtmdW5jdGlvbiBxZSgpe3ZhciBhPW9lO0koRG9jdW1lbnQucHJvdG90eXBlLCJjcmVhdGVFbGVtZW50IixmdW5jdGlvbihiKXtpZih0aGlzLl9fQ0VfaGFzUmVnaXN0cnkpe3ZhciBjPWEuYS5nZXQoYik7aWYoYylyZXR1cm4gbmV3IGMuY29uc3RydWN0b3JGdW5jdGlvbn1iPUdkLmNhbGwodGhpcyxiKTthLmIoYik7cmV0dXJuIGJ9KTtJKERvY3VtZW50LnByb3RvdHlwZSwiaW1wb3J0Tm9kZSIsZnVuY3Rpb24oYixjKXtiPUlkLmNhbGwodGhpcyxiLCEhYyk7dGhpcy5fX0NFX2hhc1JlZ2lzdHJ5P0woYSxiKTpBZChhLGIpO3JldHVybiBifSk7SShEb2N1bWVudC5wcm90b3R5cGUsImNyZWF0ZUVsZW1lbnROUyIsZnVuY3Rpb24oYixjKXtpZih0aGlzLl9fQ0VfaGFzUmVnaXN0cnkmJihudWxsPT09Ynx8Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPT09Yikpe3ZhciBkPWEuYS5nZXQoYyk7aWYoZClyZXR1cm4gbmV3IGQuY29uc3RydWN0b3JGdW5jdGlvbn1iPUhkLmNhbGwodGhpcywKYixjKTthLmIoYik7cmV0dXJuIGJ9KTtwZShhLERvY3VtZW50LnByb3RvdHlwZSx7VjpKZCxhcHBlbmQ6S2R9KX07ZnVuY3Rpb24gcmUoKXtmdW5jdGlvbiBhKGEsZCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGEsInRleHRDb250ZW50Iix7ZW51bWVyYWJsZTpkLmVudW1lcmFibGUsY29uZmlndXJhYmxlOiEwLGdldDpkLmdldCxzZXQ6ZnVuY3Rpb24oYSl7aWYodGhpcy5ub2RlVHlwZT09PU5vZGUuVEVYVF9OT0RFKWQuc2V0LmNhbGwodGhpcyxhKTtlbHNle3ZhciBjPXZvaWQgMDtpZih0aGlzLmZpcnN0Q2hpbGQpe3ZhciBlPXRoaXMuY2hpbGROb2RlcyxoPWUubGVuZ3RoO2lmKDA8aCYmSCh0aGlzKSl7Yz1BcnJheShoKTtmb3IodmFyIGs9MDtrPGg7aysrKWNba109ZVtrXX19ZC5zZXQuY2FsbCh0aGlzLGEpO2lmKGMpZm9yKGE9MDthPGMubGVuZ3RoO2ErKylLKGIsY1thXSl9fX0pfXZhciBiPW9lO0koTm9kZS5wcm90b3R5cGUsImluc2VydEJlZm9yZSIsZnVuY3Rpb24oYSxkKXtpZihhIGluc3RhbmNlb2YgRG9jdW1lbnRGcmFnbWVudCl7dmFyIGM9QXJyYXkucHJvdG90eXBlLnNsaWNlLmFwcGx5KGEuY2hpbGROb2Rlcyk7CmE9UGQuY2FsbCh0aGlzLGEsZCk7aWYoSCh0aGlzKSlmb3IoZD0wO2Q8Yy5sZW5ndGg7ZCsrKUooYixjW2RdKTtyZXR1cm4gYX1jPUgoYSk7ZD1QZC5jYWxsKHRoaXMsYSxkKTtjJiZLKGIsYSk7SCh0aGlzKSYmSihiLGEpO3JldHVybiBkfSk7SShOb2RlLnByb3RvdHlwZSwiYXBwZW5kQ2hpbGQiLGZ1bmN0aW9uKGEpe2lmKGEgaW5zdGFuY2VvZiBEb2N1bWVudEZyYWdtZW50KXt2YXIgYz1BcnJheS5wcm90b3R5cGUuc2xpY2UuYXBwbHkoYS5jaGlsZE5vZGVzKTthPU9kLmNhbGwodGhpcyxhKTtpZihIKHRoaXMpKWZvcih2YXIgZT0wO2U8Yy5sZW5ndGg7ZSsrKUooYixjW2VdKTtyZXR1cm4gYX1jPUgoYSk7ZT1PZC5jYWxsKHRoaXMsYSk7YyYmSyhiLGEpO0godGhpcykmJkooYixhKTtyZXR1cm4gZX0pO0koTm9kZS5wcm90b3R5cGUsImNsb25lTm9kZSIsZnVuY3Rpb24oYSl7YT1OZC5jYWxsKHRoaXMsISFhKTt0aGlzLm93bmVyRG9jdW1lbnQuX19DRV9oYXNSZWdpc3RyeT9MKGIsYSk6CkFkKGIsYSk7cmV0dXJuIGF9KTtJKE5vZGUucHJvdG90eXBlLCJyZW1vdmVDaGlsZCIsZnVuY3Rpb24oYSl7dmFyIGM9SChhKSxlPVFkLmNhbGwodGhpcyxhKTtjJiZLKGIsYSk7cmV0dXJuIGV9KTtJKE5vZGUucHJvdG90eXBlLCJyZXBsYWNlQ2hpbGQiLGZ1bmN0aW9uKGEsZCl7aWYoYSBpbnN0YW5jZW9mIERvY3VtZW50RnJhZ21lbnQpe3ZhciBjPUFycmF5LnByb3RvdHlwZS5zbGljZS5hcHBseShhLmNoaWxkTm9kZXMpO2E9UmQuY2FsbCh0aGlzLGEsZCk7aWYoSCh0aGlzKSlmb3IoSyhiLGQpLGQ9MDtkPGMubGVuZ3RoO2QrKylKKGIsY1tkXSk7cmV0dXJuIGF9Yz1IKGEpO3ZhciBmPVJkLmNhbGwodGhpcyxhLGQpLGc9SCh0aGlzKTtnJiZLKGIsZCk7YyYmSyhiLGEpO2cmJkooYixhKTtyZXR1cm4gZn0pO1NkJiZTZC5nZXQ/YShOb2RlLnByb3RvdHlwZSxTZCk6emQoYixmdW5jdGlvbihiKXthKGIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe2Zvcih2YXIgYT0KW10sYj0wO2I8dGhpcy5jaGlsZE5vZGVzLmxlbmd0aDtiKyspYS5wdXNoKHRoaXMuY2hpbGROb2Rlc1tiXS50ZXh0Q29udGVudCk7cmV0dXJuIGEuam9pbigiIil9LHNldDpmdW5jdGlvbihhKXtmb3IoO3RoaXMuZmlyc3RDaGlsZDspUWQuY2FsbCh0aGlzLHRoaXMuZmlyc3RDaGlsZCk7T2QuY2FsbCh0aGlzLGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGEpKX19KX0pfTtmdW5jdGlvbiBzZShhKXtmdW5jdGlvbiBiKGIpe3JldHVybiBmdW5jdGlvbihjKXtmb3IodmFyIGQ9W10sZT0wO2U8YXJndW1lbnRzLmxlbmd0aDsrK2UpZFtlXT1hcmd1bWVudHNbZV07ZT1bXTtmb3IodmFyIGg9W10saz0wO2s8ZC5sZW5ndGg7aysrKXt2YXIgbD1kW2tdO2wgaW5zdGFuY2VvZiBFbGVtZW50JiZIKGwpJiZoLnB1c2gobCk7aWYobCBpbnN0YW5jZW9mIERvY3VtZW50RnJhZ21lbnQpZm9yKGw9bC5maXJzdENoaWxkO2w7bD1sLm5leHRTaWJsaW5nKWUucHVzaChsKTtlbHNlIGUucHVzaChsKX1iLmFwcGx5KHRoaXMsZCk7Zm9yKGQ9MDtkPGgubGVuZ3RoO2QrKylLKGEsaFtkXSk7aWYoSCh0aGlzKSlmb3IoZD0wO2Q8ZS5sZW5ndGg7ZCsrKWg9ZVtkXSxoIGluc3RhbmNlb2YgRWxlbWVudCYmSihhLGgpfX12YXIgYz1FbGVtZW50LnByb3RvdHlwZTt2b2lkIDAhPT1lZSYmKGMuYmVmb3JlPWIoZWUpKTt2b2lkIDAhPT1lZSYmKGMuYWZ0ZXI9YihmZSkpO3ZvaWQgMCE9PWdlJiYKSShjLCJyZXBsYWNlV2l0aCIsZnVuY3Rpb24oYil7Zm9yKHZhciBjPVtdLGQ9MDtkPGFyZ3VtZW50cy5sZW5ndGg7KytkKWNbZF09YXJndW1lbnRzW2RdO2Q9W107Zm9yKHZhciBnPVtdLGg9MDtoPGMubGVuZ3RoO2grKyl7dmFyIGs9Y1toXTtrIGluc3RhbmNlb2YgRWxlbWVudCYmSChrKSYmZy5wdXNoKGspO2lmKGsgaW5zdGFuY2VvZiBEb2N1bWVudEZyYWdtZW50KWZvcihrPWsuZmlyc3RDaGlsZDtrO2s9ay5uZXh0U2libGluZylkLnB1c2goayk7ZWxzZSBkLnB1c2goayl9aD1IKHRoaXMpO2dlLmFwcGx5KHRoaXMsYyk7Zm9yKGM9MDtjPGcubGVuZ3RoO2MrKylLKGEsZ1tjXSk7aWYoaClmb3IoSyhhLHRoaXMpLGM9MDtjPGQubGVuZ3RoO2MrKylnPWRbY10sZyBpbnN0YW5jZW9mIEVsZW1lbnQmJkooYSxnKX0pO3ZvaWQgMCE9PWhlJiZJKGMsInJlbW92ZSIsZnVuY3Rpb24oKXt2YXIgYj1IKHRoaXMpO2hlLmNhbGwodGhpcyk7YiYmSyhhLHRoaXMpfSl9O2Z1bmN0aW9uIHRlKCl7ZnVuY3Rpb24gYShhLGIpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShhLCJpbm5lckhUTUwiLHtlbnVtZXJhYmxlOmIuZW51bWVyYWJsZSxjb25maWd1cmFibGU6ITAsZ2V0OmIuZ2V0LHNldDpmdW5jdGlvbihhKXt2YXIgYz10aGlzLGU9dm9pZCAwO0godGhpcykmJihlPVtdLHdkKHRoaXMsZnVuY3Rpb24oYSl7YSE9PWMmJmUucHVzaChhKX0pKTtiLnNldC5jYWxsKHRoaXMsYSk7aWYoZSlmb3IodmFyIGY9MDtmPGUubGVuZ3RoO2YrKyl7dmFyIGc9ZVtmXTsxPT09Zy5fX0NFX3N0YXRlJiZkLmRpc2Nvbm5lY3RlZENhbGxiYWNrKGcpfXRoaXMub3duZXJEb2N1bWVudC5fX0NFX2hhc1JlZ2lzdHJ5P0woZCx0aGlzKTpBZChkLHRoaXMpO3JldHVybiBhfX0pfWZ1bmN0aW9uIGIoYSxiKXtJKGEsImluc2VydEFkamFjZW50RWxlbWVudCIsZnVuY3Rpb24oYSxjKXt2YXIgZT1IKGMpO2E9Yi5jYWxsKHRoaXMsYSxjKTtlJiZLKGQsYyk7SChhKSYmSihkLGMpO3JldHVybiBhfSl9CmZ1bmN0aW9uIGMoYSxiKXtmdW5jdGlvbiBjKGEsYil7Zm9yKHZhciBjPVtdO2EhPT1iO2E9YS5uZXh0U2libGluZyljLnB1c2goYSk7Zm9yKGI9MDtiPGMubGVuZ3RoO2IrKylMKGQsY1tiXSl9SShhLCJpbnNlcnRBZGphY2VudEhUTUwiLGZ1bmN0aW9uKGEsZCl7YT1hLnRvTG93ZXJDYXNlKCk7aWYoImJlZm9yZWJlZ2luIj09PWEpe3ZhciBlPXRoaXMucHJldmlvdXNTaWJsaW5nO2IuY2FsbCh0aGlzLGEsZCk7YyhlfHx0aGlzLnBhcmVudE5vZGUuZmlyc3RDaGlsZCx0aGlzKX1lbHNlIGlmKCJhZnRlcmJlZ2luIj09PWEpZT10aGlzLmZpcnN0Q2hpbGQsYi5jYWxsKHRoaXMsYSxkKSxjKHRoaXMuZmlyc3RDaGlsZCxlKTtlbHNlIGlmKCJiZWZvcmVlbmQiPT09YSllPXRoaXMubGFzdENoaWxkLGIuY2FsbCh0aGlzLGEsZCksYyhlfHx0aGlzLmZpcnN0Q2hpbGQsbnVsbCk7ZWxzZSBpZigiYWZ0ZXJlbmQiPT09YSllPXRoaXMubmV4dFNpYmxpbmcsYi5jYWxsKHRoaXMsYSxkKSxjKHRoaXMubmV4dFNpYmxpbmcsCmUpO2Vsc2UgdGhyb3cgbmV3IFN5bnRheEVycm9yKCJUaGUgdmFsdWUgcHJvdmlkZWQgKCIrU3RyaW5nKGEpKyIpIGlzIG5vdCBvbmUgb2YgJ2JlZm9yZWJlZ2luJywgJ2FmdGVyYmVnaW4nLCAnYmVmb3JlZW5kJywgb3IgJ2FmdGVyZW5kJy4iKTt9KX12YXIgZD1vZTtUZCYmSShFbGVtZW50LnByb3RvdHlwZSwiYXR0YWNoU2hhZG93IixmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5fX0NFX3NoYWRvd1Jvb3Q9YT1UZC5jYWxsKHRoaXMsYSl9KTtVZCYmVWQuZ2V0P2EoRWxlbWVudC5wcm90b3R5cGUsVWQpOmplJiZqZS5nZXQ/YShIVE1MRWxlbWVudC5wcm90b3R5cGUsamUpOnpkKGQsZnVuY3Rpb24oYil7YShiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gTmQuY2FsbCh0aGlzLCEwKS5pbm5lckhUTUx9LHNldDpmdW5jdGlvbihhKXt2YXIgYj0idGVtcGxhdGUiPT09dGhpcy5sb2NhbE5hbWUsYz1iP3RoaXMuY29udGVudDp0aGlzLGQ9SGQuY2FsbChkb2N1bWVudCwKdGhpcy5uYW1lc3BhY2VVUkksdGhpcy5sb2NhbE5hbWUpO2ZvcihkLmlubmVySFRNTD1hOzA8Yy5jaGlsZE5vZGVzLmxlbmd0aDspUWQuY2FsbChjLGMuY2hpbGROb2Rlc1swXSk7Zm9yKGE9Yj9kLmNvbnRlbnQ6ZDswPGEuY2hpbGROb2Rlcy5sZW5ndGg7KU9kLmNhbGwoYyxhLmNoaWxkTm9kZXNbMF0pfX0pfSk7SShFbGVtZW50LnByb3RvdHlwZSwic2V0QXR0cmlidXRlIixmdW5jdGlvbihhLGIpe2lmKDEhPT10aGlzLl9fQ0Vfc3RhdGUpcmV0dXJuIFdkLmNhbGwodGhpcyxhLGIpO3ZhciBjPVZkLmNhbGwodGhpcyxhKTtXZC5jYWxsKHRoaXMsYSxiKTtiPVZkLmNhbGwodGhpcyxhKTtkLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayh0aGlzLGEsYyxiLG51bGwpfSk7SShFbGVtZW50LnByb3RvdHlwZSwic2V0QXR0cmlidXRlTlMiLGZ1bmN0aW9uKGEsYixjKXtpZigxIT09dGhpcy5fX0NFX3N0YXRlKXJldHVybiBaZC5jYWxsKHRoaXMsYSxiLGMpO3ZhciBlPVlkLmNhbGwodGhpcyxhLApiKTtaZC5jYWxsKHRoaXMsYSxiLGMpO2M9WWQuY2FsbCh0aGlzLGEsYik7ZC5hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2sodGhpcyxiLGUsYyxhKX0pO0koRWxlbWVudC5wcm90b3R5cGUsInJlbW92ZUF0dHJpYnV0ZSIsZnVuY3Rpb24oYSl7aWYoMSE9PXRoaXMuX19DRV9zdGF0ZSlyZXR1cm4gWGQuY2FsbCh0aGlzLGEpO3ZhciBiPVZkLmNhbGwodGhpcyxhKTtYZC5jYWxsKHRoaXMsYSk7bnVsbCE9PWImJmQuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKHRoaXMsYSxiLG51bGwsbnVsbCl9KTtJKEVsZW1lbnQucHJvdG90eXBlLCJyZW1vdmVBdHRyaWJ1dGVOUyIsZnVuY3Rpb24oYSxiKXtpZigxIT09dGhpcy5fX0NFX3N0YXRlKXJldHVybiAkZC5jYWxsKHRoaXMsYSxiKTt2YXIgYz1ZZC5jYWxsKHRoaXMsYSxiKTskZC5jYWxsKHRoaXMsYSxiKTt2YXIgZT1ZZC5jYWxsKHRoaXMsYSxiKTtjIT09ZSYmZC5hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2sodGhpcyxiLGMsZSxhKX0pO2tlP2IoSFRNTEVsZW1lbnQucHJvdG90eXBlLAprZSk6YWU/YihFbGVtZW50LnByb3RvdHlwZSxhZSk6Y29uc29sZS53YXJuKCJDdXN0b20gRWxlbWVudHM6IGBFbGVtZW50I2luc2VydEFkamFjZW50RWxlbWVudGAgd2FzIG5vdCBwYXRjaGVkLiIpO2xlP2MoSFRNTEVsZW1lbnQucHJvdG90eXBlLGxlKTpiZT9jKEVsZW1lbnQucHJvdG90eXBlLGJlKTpjb25zb2xlLndhcm4oIkN1c3RvbSBFbGVtZW50czogYEVsZW1lbnQjaW5zZXJ0QWRqYWNlbnRIVE1MYCB3YXMgbm90IHBhdGNoZWQuIik7cGUoZCxFbGVtZW50LnByb3RvdHlwZSx7VjpjZSxhcHBlbmQ6ZGV9KTtzZShkKX07dmFyIHVlPXdpbmRvdy5jdXN0b21FbGVtZW50cztpZighdWV8fHVlLmZvcmNlUG9seWZpbGx8fCJmdW5jdGlvbiIhPXR5cGVvZiB1ZS5kZWZpbmV8fCJmdW5jdGlvbiIhPXR5cGVvZiB1ZS5nZXQpe3ZhciBvZT1uZXcgeGQ7bmUoKTtxZSgpO3BlKG9lLERvY3VtZW50RnJhZ21lbnQucHJvdG90eXBlLHtWOkxkLGFwcGVuZDpNZH0pO3JlKCk7dGUoKTtkb2N1bWVudC5fX0NFX2hhc1JlZ2lzdHJ5PSEwO3ZhciBjdXN0b21FbGVtZW50cz1uZXcgTihvZSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdywiY3VzdG9tRWxlbWVudHMiLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx2YWx1ZTpjdXN0b21FbGVtZW50c30pfTtmdW5jdGlvbiB2ZSgpe3RoaXMuZW5kPXRoaXMuc3RhcnQ9MDt0aGlzLnJ1bGVzPXRoaXMucGFyZW50PXRoaXMucHJldmlvdXM9bnVsbDt0aGlzLmNzc1RleHQ9dGhpcy5wYXJzZWRDc3NUZXh0PSIiO3RoaXMuYXRSdWxlPSExO3RoaXMudHlwZT0wO3RoaXMucGFyc2VkU2VsZWN0b3I9dGhpcy5zZWxlY3Rvcj10aGlzLmtleWZyYW1lc05hbWU9IiJ9CmZ1bmN0aW9uIHdlKGEpe2E9YS5yZXBsYWNlKHhlLCIiKS5yZXBsYWNlKHllLCIiKTt2YXIgYj16ZSxjPWEsZD1uZXcgdmU7ZC5zdGFydD0wO2QuZW5kPWMubGVuZ3RoO2Zvcih2YXIgZT1kLGY9MCxnPWMubGVuZ3RoO2Y8ZztmKyspaWYoInsiPT09Y1tmXSl7ZS5ydWxlc3x8KGUucnVsZXM9W10pO3ZhciBoPWUsaz1oLnJ1bGVzW2gucnVsZXMubGVuZ3RoLTFdfHxudWxsO2U9bmV3IHZlO2Uuc3RhcnQ9ZisxO2UucGFyZW50PWg7ZS5wcmV2aW91cz1rO2gucnVsZXMucHVzaChlKX1lbHNlIn0iPT09Y1tmXSYmKGUuZW5kPWYrMSxlPWUucGFyZW50fHxkKTtyZXR1cm4gYihkLGEpfQpmdW5jdGlvbiB6ZShhLGIpe3ZhciBjPWIuc3Vic3RyaW5nKGEuc3RhcnQsYS5lbmQtMSk7YS5wYXJzZWRDc3NUZXh0PWEuY3NzVGV4dD1jLnRyaW0oKTthLnBhcmVudCYmKGM9Yi5zdWJzdHJpbmcoYS5wcmV2aW91cz9hLnByZXZpb3VzLmVuZDphLnBhcmVudC5zdGFydCxhLnN0YXJ0LTEpLGM9QWUoYyksYz1jLnJlcGxhY2UoQmUsIiAiKSxjPWMuc3Vic3RyaW5nKGMubGFzdEluZGV4T2YoIjsiKSsxKSxjPWEucGFyc2VkU2VsZWN0b3I9YS5zZWxlY3Rvcj1jLnRyaW0oKSxhLmF0UnVsZT0wPT09Yy5pbmRleE9mKCJAIiksYS5hdFJ1bGU/MD09PWMuaW5kZXhPZigiQG1lZGlhIik/YS50eXBlPUNlOmMubWF0Y2goRGUpJiYoYS50eXBlPUVlLGEua2V5ZnJhbWVzTmFtZT1hLnNlbGVjdG9yLnNwbGl0KEJlKS5wb3AoKSk6YS50eXBlPTA9PT1jLmluZGV4T2YoIi0tIik/RmU6R2UpO2lmKGM9YS5ydWxlcylmb3IodmFyIGQ9MCxlPWMubGVuZ3RoLGY9dm9pZCAwO2Q8ZSYmKGY9Y1tkXSk7ZCsrKXplKGYsCmIpO3JldHVybiBhfWZ1bmN0aW9uIEFlKGEpe3JldHVybiBhLnJlcGxhY2UoL1xcKFswLTlhLWZdezEsNn0pXHMvZ2ksZnVuY3Rpb24oYSxjKXthPWM7Zm9yKGM9Ni1hLmxlbmd0aDtjLS07KWE9IjAiK2E7cmV0dXJuIlxcIithfSl9CmZ1bmN0aW9uIEhlKGEsYixjKXtjPXZvaWQgMD09PWM/IiI6Yzt2YXIgZD0iIjtpZihhLmNzc1RleHR8fGEucnVsZXMpe3ZhciBlPWEucnVsZXMsZjtpZihmPWUpZj1lWzBdLGY9IShmJiZmLnNlbGVjdG9yJiYwPT09Zi5zZWxlY3Rvci5pbmRleE9mKCItLSIpKTtpZihmKXtmPTA7Zm9yKHZhciBnPWUubGVuZ3RoLGg9dm9pZCAwO2Y8ZyYmKGg9ZVtmXSk7ZisrKWQ9SGUoaCxiLGQpfWVsc2UgYj9iPWEuY3NzVGV4dDooYj1hLmNzc1RleHQsYj1iLnJlcGxhY2UoSWUsIiIpLnJlcGxhY2UoSmUsIiIpLGI9Yi5yZXBsYWNlKEtlLCIiKS5yZXBsYWNlKExlLCIiKSksKGQ9Yi50cmltKCkpJiYoZD0iICAiK2QrIlxuIil9ZCYmKGEuc2VsZWN0b3ImJihjKz1hLnNlbGVjdG9yKyIge1xuIiksYys9ZCxhLnNlbGVjdG9yJiYoYys9In1cblxuIikpO3JldHVybiBjfQp2YXIgR2U9MSxFZT03LENlPTQsRmU9MUUzLHhlPS9cL1wqW14qXSpcKisoW14vKl1bXipdKlwqKykqXC8vZ2ltLHllPS9AaW1wb3J0W147XSo7L2dpbSxJZT0vKD86XlteO1wtXHN9XSspPy0tW147e31dKj86W157fTtdKj8oPzpbO1xuXXwkKS9naW0sSmU9Lyg/Ol5bXjtcLVxzfV0rKT8tLVteO3t9XSo/Oltee307XSo/e1tefV0qP30oPzpbO1xuXXwkKT8vZ2ltLEtlPS9AYXBwbHlccypcKD9bXik7XSpcKT9ccyooPzpbO1xuXXwkKT8vZ2ltLExlPS9bXjs6XSo/OlteO10qP3ZhclwoW147XSpcKSg/Ols7XG5dfCQpPy9naW0sRGU9L15AW15cc10qa2V5ZnJhbWVzLyxCZT0vXHMrL2c7dmFyIE89ISh3aW5kb3cuU2hhZHlET00mJndpbmRvdy5TaGFkeURPTS5pblVzZSksTWU7ZnVuY3Rpb24gTmUoYSl7TWU9YSYmYS5zaGltY3NzcHJvcGVydGllcz8hMTpPfHwhKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0FwcGxlV2ViS2l0XC82MDF8RWRnZVwvMTUvKXx8IXdpbmRvdy5DU1N8fCFDU1Muc3VwcG9ydHN8fCFDU1Muc3VwcG9ydHMoImJveC1zaGFkb3ciLCIwIDAgMCB2YXIoLS1mb28pIikpfXZhciBPZTt3aW5kb3cuU2hhZHlDU1MmJnZvaWQgMCE9PXdpbmRvdy5TaGFkeUNTUy5jc3NCdWlsZCYmKE9lPXdpbmRvdy5TaGFkeUNTUy5jc3NCdWlsZCk7dmFyIFBlPSEoIXdpbmRvdy5TaGFkeUNTU3x8IXdpbmRvdy5TaGFkeUNTUy5kaXNhYmxlUnVudGltZSk7CndpbmRvdy5TaGFkeUNTUyYmdm9pZCAwIT09d2luZG93LlNoYWR5Q1NTLm5hdGl2ZUNzcz9NZT13aW5kb3cuU2hhZHlDU1MubmF0aXZlQ3NzOndpbmRvdy5TaGFkeUNTUz8oTmUod2luZG93LlNoYWR5Q1NTKSx3aW5kb3cuU2hhZHlDU1M9dm9pZCAwKTpOZSh3aW5kb3cuV2ViQ29tcG9uZW50cyYmd2luZG93LldlYkNvbXBvbmVudHMuZmxhZ3MpO3ZhciBRPU1lLFFlPU9lO3ZhciBSZT0vKD86XnxbO1xze11ccyopKC0tW1x3LV0qPylccyo6XHMqKD86KCg/OicoPzpcXCd8LikqPyd8Iig/OlxcInwuKSo/InxcKFteKV0qP1wpfFtefTt7XSkrKXxceyhbXn1dKilcfSg/Oig/PVs7XHN9XSl8JCkpL2dpLFNlPS8oPzpefFxXKylAYXBwbHlccypcKD8oW14pO1xuXSopXCk/L2dpLFRlPS8oLS1bXHctXSspXHMqKFs6LDspXXwkKS9naSxVZT0vKGFuaW1hdGlvblxzKjopfChhbmltYXRpb24tbmFtZVxzKjopLywkZT0vQG1lZGlhXHMoLiopLyxhZj0vXHtbXn1dKlx9L2c7dmFyIGJmPW5ldyBTZXQ7ZnVuY3Rpb24gY2YoYSxiKXtpZighYSlyZXR1cm4iIjsic3RyaW5nIj09PXR5cGVvZiBhJiYoYT13ZShhKSk7YiYmZGYoYSxiKTtyZXR1cm4gSGUoYSxRKX1mdW5jdGlvbiBlZihhKXshYS5fX2Nzc1J1bGVzJiZhLnRleHRDb250ZW50JiYoYS5fX2Nzc1J1bGVzPXdlKGEudGV4dENvbnRlbnQpKTtyZXR1cm4gYS5fX2Nzc1J1bGVzfHxudWxsfWZ1bmN0aW9uIGZmKGEpe3JldHVybiEhYS5wYXJlbnQmJmEucGFyZW50LnR5cGU9PT1FZX1mdW5jdGlvbiBkZihhLGIsYyxkKXtpZihhKXt2YXIgZT0hMSxmPWEudHlwZTtpZihkJiZmPT09Q2Upe3ZhciBnPWEuc2VsZWN0b3IubWF0Y2goJGUpO2cmJih3aW5kb3cubWF0Y2hNZWRpYShnWzFdKS5tYXRjaGVzfHwoZT0hMCkpfWY9PT1HZT9iKGEpOmMmJmY9PT1FZT9jKGEpOmY9PT1GZSYmKGU9ITApO2lmKChhPWEucnVsZXMpJiYhZSlmb3IoZT0wLGY9YS5sZW5ndGgsZz12b2lkIDA7ZTxmJiYoZz1hW2VdKTtlKyspZGYoZyxiLGMsZCl9fQpmdW5jdGlvbiBnZihhLGIsYyxkKXt2YXIgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO2ImJmUuc2V0QXR0cmlidXRlKCJzY29wZSIsYik7ZS50ZXh0Q29udGVudD1hO2hmKGUsYyxkKTtyZXR1cm4gZX12YXIgamY9bnVsbDtmdW5jdGlvbiBrZihhKXthPWRvY3VtZW50LmNyZWF0ZUNvbW1lbnQoIiBTaGFkeSBET00gc3R5bGVzIGZvciAiK2ErIiAiKTt2YXIgYj1kb2N1bWVudC5oZWFkO2IuaW5zZXJ0QmVmb3JlKGEsKGpmP2pmLm5leHRTaWJsaW5nOm51bGwpfHxiLmZpcnN0Q2hpbGQpO3JldHVybiBqZj1hfWZ1bmN0aW9uIGhmKGEsYixjKXtiPWJ8fGRvY3VtZW50LmhlYWQ7Yi5pbnNlcnRCZWZvcmUoYSxjJiZjLm5leHRTaWJsaW5nfHxiLmZpcnN0Q2hpbGQpO2pmP2EuY29tcGFyZURvY3VtZW50UG9zaXRpb24oamYpPT09Tm9kZS5ET0NVTUVOVF9QT1NJVElPTl9QUkVDRURJTkcmJihqZj1hKTpqZj1hfQpmdW5jdGlvbiBsZihhLGIpe2Zvcih2YXIgYz0wLGQ9YS5sZW5ndGg7YjxkO2IrKylpZigiKCI9PT1hW2JdKWMrKztlbHNlIGlmKCIpIj09PWFbYl0mJjA9PT0tLWMpcmV0dXJuIGI7cmV0dXJuLTF9ZnVuY3Rpb24gbWYoYSxiKXt2YXIgYz1hLmluZGV4T2YoInZhcigiKTtpZigtMT09PWMpcmV0dXJuIGIoYSwiIiwiIiwiIik7dmFyIGQ9bGYoYSxjKzMpLGU9YS5zdWJzdHJpbmcoYys0LGQpO2M9YS5zdWJzdHJpbmcoMCxjKTthPW1mKGEuc3Vic3RyaW5nKGQrMSksYik7ZD1lLmluZGV4T2YoIiwiKTtyZXR1cm4tMT09PWQ/YihjLGUudHJpbSgpLCIiLGEpOmIoYyxlLnN1YnN0cmluZygwLGQpLnRyaW0oKSxlLnN1YnN0cmluZyhkKzEpLnRyaW0oKSxhKX1mdW5jdGlvbiBuZihhLGIpe08/YS5zZXRBdHRyaWJ1dGUoImNsYXNzIixiKTp3aW5kb3cuU2hhZHlET00ubmF0aXZlTWV0aG9kcy5zZXRBdHRyaWJ1dGUuY2FsbChhLCJjbGFzcyIsYil9CnZhciBvZj13aW5kb3cuU2hhZHlET00mJndpbmRvdy5TaGFkeURPTS53cmFwfHxmdW5jdGlvbihhKXtyZXR1cm4gYX07ZnVuY3Rpb24gcGYoYSl7dmFyIGI9YS5sb2NhbE5hbWUsYz0iIjtiPy0xPGIuaW5kZXhPZigiLSIpfHwoYz1iLGI9YS5nZXRBdHRyaWJ1dGUmJmEuZ2V0QXR0cmlidXRlKCJpcyIpfHwiIik6KGI9YS5pcyxjPWEuZXh0ZW5kcyk7cmV0dXJue2lzOmIsTTpjfX1mdW5jdGlvbiBxZihhKXtmb3IodmFyIGI9W10sYz0iIixkPTA7MDw9ZCYmZDxhLmxlbmd0aDtkKyspaWYoIigiPT09YVtkXSl7dmFyIGU9bGYoYSxkKTtjKz1hLnNsaWNlKGQsZSsxKTtkPWV9ZWxzZSIsIj09PWFbZF0/KGIucHVzaChjKSxjPSIiKTpjKz1hW2RdO2MmJmIucHVzaChjKTtyZXR1cm4gYn0KZnVuY3Rpb24gcmYoYSl7aWYodm9pZCAwIT09UWUpcmV0dXJuIFFlO2lmKHZvaWQgMD09PWEuX19jc3NCdWlsZCl7dmFyIGI9YS5nZXRBdHRyaWJ1dGUoImNzcy1idWlsZCIpO2lmKGIpYS5fX2Nzc0J1aWxkPWI7ZWxzZXthOntiPSJ0ZW1wbGF0ZSI9PT1hLmxvY2FsTmFtZT9hLmNvbnRlbnQuZmlyc3RDaGlsZDphLmZpcnN0Q2hpbGQ7aWYoYiBpbnN0YW5jZW9mIENvbW1lbnQmJihiPWIudGV4dENvbnRlbnQudHJpbSgpLnNwbGl0KCI6IiksImNzcy1idWlsZCI9PT1iWzBdKSl7Yj1iWzFdO2JyZWFrIGF9Yj0iIn1pZigiIiE9PWIpe3ZhciBjPSJ0ZW1wbGF0ZSI9PT1hLmxvY2FsTmFtZT9hLmNvbnRlbnQuZmlyc3RDaGlsZDphLmZpcnN0Q2hpbGQ7Yy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGMpfWEuX19jc3NCdWlsZD1ifX1yZXR1cm4gYS5fX2Nzc0J1aWxkfHwiIn0KZnVuY3Rpb24gc2YoYSl7YT12b2lkIDA9PT1hPyIiOmE7cmV0dXJuIiIhPT1hJiZRP08/InNoYWRvdyI9PT1hOiJzaGFkeSI9PT1hOiExfTtmdW5jdGlvbiB0Zigpe31mdW5jdGlvbiB1ZihhLGIpe3ZmKFIsYSxmdW5jdGlvbihhKXt3ZihhLGJ8fCIiKX0pfWZ1bmN0aW9uIHZmKGEsYixjKXtiLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUmJmMoYik7dmFyIGQ7InRlbXBsYXRlIj09PWIubG9jYWxOYW1lP2Q9KGIuY29udGVudHx8Yi5fY29udGVudHx8YikuY2hpbGROb2RlczpkPWIuY2hpbGRyZW58fGIuY2hpbGROb2RlcztpZihkKWZvcihiPTA7YjxkLmxlbmd0aDtiKyspdmYoYSxkW2JdLGMpfQpmdW5jdGlvbiB3ZihhLGIsYyl7aWYoYilpZihhLmNsYXNzTGlzdCljPyhhLmNsYXNzTGlzdC5yZW1vdmUoInN0eWxlLXNjb3BlIiksYS5jbGFzc0xpc3QucmVtb3ZlKGIpKTooYS5jbGFzc0xpc3QuYWRkKCJzdHlsZS1zY29wZSIpLGEuY2xhc3NMaXN0LmFkZChiKSk7ZWxzZSBpZihhLmdldEF0dHJpYnV0ZSl7dmFyIGQ9YS5nZXRBdHRyaWJ1dGUoImNsYXNzIik7Yz9kJiYoYj1kLnJlcGxhY2UoInN0eWxlLXNjb3BlIiwiIikucmVwbGFjZShiLCIiKSxuZihhLGIpKTpuZihhLChkP2QrIiAiOiIiKSsic3R5bGUtc2NvcGUgIitiKX19ZnVuY3Rpb24geGYoYSxiLGMpe3ZmKFIsYSxmdW5jdGlvbihhKXt3ZihhLGIsITApO3dmKGEsYyl9KX1mdW5jdGlvbiB5ZihhLGIpe3ZmKFIsYSxmdW5jdGlvbihhKXt3ZihhLGJ8fCIiLCEwKX0pfQpmdW5jdGlvbiB6ZihhLGIsYyxkLGUpe3ZhciBmPVI7ZT12b2lkIDA9PT1lPyIiOmU7IiI9PT1lJiYoT3x8InNoYWR5Ij09PSh2b2lkIDA9PT1kPyIiOmQpP2U9Y2YoYixjKTooYT1wZihhKSxlPUFmKGYsYixhLmlzLGEuTSxjKSsiXG5cbiIpKTtyZXR1cm4gZS50cmltKCl9ZnVuY3Rpb24gQWYoYSxiLGMsZCxlKXt2YXIgZj1CZihjLGQpO2M9Yz8iLiIrYzoiIjtyZXR1cm4gY2YoYixmdW5jdGlvbihiKXtiLmN8fChiLnNlbGVjdG9yPWIuaj1DZihhLGIsYS5iLGMsZiksYi5jPSEwKTtlJiZlKGIsYyxmKX0pfWZ1bmN0aW9uIEJmKGEsYil7cmV0dXJuIGI/Iltpcz0iK2ErIl0iOmF9CmZ1bmN0aW9uIENmKGEsYixjLGQsZSl7dmFyIGY9cWYoYi5zZWxlY3Rvcik7aWYoIWZmKGIpKXtiPTA7Zm9yKHZhciBnPWYubGVuZ3RoLGg9dm9pZCAwO2I8ZyYmKGg9ZltiXSk7YisrKWZbYl09Yy5jYWxsKGEsaCxkLGUpfXJldHVybiBmLmZpbHRlcihmdW5jdGlvbihhKXtyZXR1cm4hIWF9KS5qb2luKCIsIil9ZnVuY3Rpb24gRGYoYSl7cmV0dXJuIGEucmVwbGFjZShFZixmdW5jdGlvbihhLGMsZCl7LTE8ZC5pbmRleE9mKCIrIik/ZD1kLnJlcGxhY2UoL1wrL2csIl9fXyIpOi0xPGQuaW5kZXhPZigiX19fIikmJihkPWQucmVwbGFjZSgvX19fL2csIisiKSk7cmV0dXJuIjoiK2MrIigiK2QrIikifSl9CmZ1bmN0aW9uIEZmKGEpe2Zvcih2YXIgYj1bXSxjO2M9YS5tYXRjaChHZik7KXt2YXIgZD1jLmluZGV4LGU9bGYoYSxkKTtpZigtMT09PWUpdGhyb3cgRXJyb3IoYy5pbnB1dCsiIHNlbGVjdG9yIG1pc3NpbmcgJyknIik7Yz1hLnNsaWNlKGQsZSsxKTthPWEucmVwbGFjZShjLCJcdWUwMDAiKTtiLnB1c2goYyl9cmV0dXJue2hhOmEsbWF0Y2hlczpifX1mdW5jdGlvbiBIZihhLGIpe3ZhciBjPWEuc3BsaXQoIlx1ZTAwMCIpO3JldHVybiBiLnJlZHVjZShmdW5jdGlvbihhLGIsZil7cmV0dXJuIGErYitjW2YrMV19LGNbMF0pfQp0Zi5wcm90b3R5cGUuYj1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9ITE7YT1hLnRyaW0oKTt2YXIgZT1FZi50ZXN0KGEpO2UmJihhPWEucmVwbGFjZShFZixmdW5jdGlvbihhLGIsYyl7cmV0dXJuIjoiK2IrIigiK2MucmVwbGFjZSgvXHMvZywiIikrIikifSksYT1EZihhKSk7dmFyIGY9R2YudGVzdChhKTtpZihmKXt2YXIgZz1GZihhKTthPWcuaGE7Zz1nLm1hdGNoZXN9YT1hLnJlcGxhY2UoSWYsIjpob3N0ICQxIik7YT1hLnJlcGxhY2UoSmYsZnVuY3Rpb24oYSxlLGYpe2R8fChhPUtmKGYsZSxiLGMpLGQ9ZHx8YS5zdG9wLGU9YS5DYSxmPWEudmFsdWUpO3JldHVybiBlK2Z9KTtmJiYoYT1IZihhLGcpKTtlJiYoYT1EZihhKSk7cmV0dXJuIGF9OwpmdW5jdGlvbiBLZihhLGIsYyxkKXt2YXIgZT1hLmluZGV4T2YoIjo6c2xvdHRlZCIpOzA8PWEuaW5kZXhPZigiOmhvc3QiKT9hPUxmKGEsZCk6MCE9PWUmJihhPWM/TWYoYSxjKTphKTtjPSExOzA8PWUmJihiPSIiLGM9ITApO2lmKGMpe3ZhciBmPSEwO2MmJihhPWEucmVwbGFjZShOZixmdW5jdGlvbihhLGIpe3JldHVybiIgPiAiK2J9KSl9YT1hLnJlcGxhY2UoT2YsZnVuY3Rpb24oYSxiLGMpe3JldHVybidbZGlyPSInK2MrJyJdICcrYisiLCAiK2IrJ1tkaXI9IicrYysnIl0nfSk7cmV0dXJue3ZhbHVlOmEsQ2E6YixzdG9wOmZ9fQpmdW5jdGlvbiBNZihhLGIpe2E9YS5zcGxpdCgvKFxbLis/XF0pLyk7Zm9yKHZhciBjPVtdLGQ9MDtkPGEubGVuZ3RoO2QrKylpZigxPT09ZCUyKWMucHVzaChhW2RdKTtlbHNle3ZhciBlPWFbZF07aWYoIiIhPT1lfHxkIT09YS5sZW5ndGgtMSllPWUuc3BsaXQoIjoiKSxlWzBdKz1iLGMucHVzaChlLmpvaW4oIjoiKSl9cmV0dXJuIGMuam9pbigiIil9ZnVuY3Rpb24gTGYoYSxiKXt2YXIgYz1hLm1hdGNoKFBmKTtyZXR1cm4oYz1jJiZjWzJdLnRyaW0oKXx8IiIpP2NbMF0ubWF0Y2goUWYpP2EucmVwbGFjZShQZixmdW5jdGlvbihhLGMsZil7cmV0dXJuIGIrZn0pOmMuc3BsaXQoUWYpWzBdPT09Yj9jOiJzaG91bGRfbm90X21hdGNoIjphLnJlcGxhY2UoIjpob3N0IixiKX1mdW5jdGlvbiBSZihhKXsiOnJvb3QiPT09YS5zZWxlY3RvciYmKGEuc2VsZWN0b3I9Imh0bWwiKX0KdGYucHJvdG90eXBlLmM9ZnVuY3Rpb24oYSl7cmV0dXJuIGEubWF0Y2goIjpob3N0Iik/IiI6YS5tYXRjaCgiOjpzbG90dGVkIik/dGhpcy5iKGEsIjpub3QoLnN0eWxlLXNjb3BlKSIpOk1mKGEudHJpbSgpLCI6bm90KC5zdHlsZS1zY29wZSkiKX07cC5PYmplY3QuZGVmaW5lUHJvcGVydGllcyh0Zi5wcm90b3R5cGUse2E6e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiJzdHlsZS1zY29wZSJ9fX0pOwp2YXIgRWY9LzoobnRoWy1cd10rKVwoKFteKV0rKVwpLyxKZj0vKF58W1xzPit+XSspKCg/OlxbLis/XF18W15ccz4rfj1bXSkrKS9nLFFmPS9bWy46IypdLyxJZj0vXig6OnNsb3R0ZWQpLyxQZj0vKDpob3N0KSg/OlwoKCg/OlwoW14pKF0qXCl8W14pKF0qKSs/KVwpKS8sTmY9Lyg/Ojo6c2xvdHRlZCkoPzpcKCgoPzpcKFteKShdKlwpfFteKShdKikrPylcKSkvLE9mPS8oLiopOmRpclwoKD86KGx0cnxydGwpKVwpLyxHZj0vOig/Om1hdGNoZXN8YW55fC0oPzp3ZWJraXR8bW96KS1hbnkpLyxSPW5ldyB0ZjtmdW5jdGlvbiBTZihhLGIsYyxkLGUpe3RoaXMuQT1hfHxudWxsO3RoaXMuYj1ifHxudWxsO3RoaXMuZmE9Y3x8W107dGhpcy5vPW51bGw7dGhpcy5jc3NCdWlsZD1lfHwiIjt0aGlzLk09ZHx8IiI7dGhpcy5hPXRoaXMucz10aGlzLnc9bnVsbH1mdW5jdGlvbiBUKGEpe3JldHVybiBhP2EuX19zdHlsZUluZm86bnVsbH1mdW5jdGlvbiBUZihhLGIpe3JldHVybiBhLl9fc3R5bGVJbmZvPWJ9U2YucHJvdG90eXBlLmM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5BfTtTZi5wcm90b3R5cGUuX2dldFN0eWxlUnVsZXM9U2YucHJvdG90eXBlLmM7ZnVuY3Rpb24gVWYoYSl7dmFyIGI9dGhpcy5tYXRjaGVzfHx0aGlzLm1hdGNoZXNTZWxlY3Rvcnx8dGhpcy5tb3pNYXRjaGVzU2VsZWN0b3J8fHRoaXMubXNNYXRjaGVzU2VsZWN0b3J8fHRoaXMub01hdGNoZXNTZWxlY3Rvcnx8dGhpcy53ZWJraXRNYXRjaGVzU2VsZWN0b3I7cmV0dXJuIGImJmIuY2FsbCh0aGlzLGEpfXZhciBWZj1uYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKCJUcmlkZW50Iik7ZnVuY3Rpb24gV2YoKXt9ZnVuY3Rpb24gWGYoYSl7dmFyIGI9e30sYz1bXSxkPTA7ZGYoYSxmdW5jdGlvbihhKXtZZihhKTthLmluZGV4PWQrKzthPWEuaS5jc3NUZXh0O2Zvcih2YXIgYztjPVRlLmV4ZWMoYSk7KXt2YXIgZT1jWzFdOyI6IiE9PWNbMl0mJihiW2VdPSEwKX19LGZ1bmN0aW9uKGEpe2MucHVzaChhKX0pO2EuYj1jO2E9W107Zm9yKHZhciBlIGluIGIpYS5wdXNoKGUpO3JldHVybiBhfQpmdW5jdGlvbiBZZihhKXtpZighYS5pKXt2YXIgYj17fSxjPXt9O1pmKGEsYykmJihiLnY9YyxhLnJ1bGVzPW51bGwpO2IuY3NzVGV4dD1hLnBhcnNlZENzc1RleHQucmVwbGFjZShhZiwiIikucmVwbGFjZShSZSwiIik7YS5pPWJ9fWZ1bmN0aW9uIFpmKGEsYil7dmFyIGM9YS5pO2lmKGMpe2lmKGMudilyZXR1cm4gT2JqZWN0LmFzc2lnbihiLGMudiksITB9ZWxzZXtjPWEucGFyc2VkQ3NzVGV4dDtmb3IodmFyIGQ7YT1SZS5leGVjKGMpOyl7ZD0oYVsyXXx8YVszXSkudHJpbSgpO2lmKCJpbmhlcml0IiE9PWR8fCJ1bnNldCIhPT1kKWJbYVsxXS50cmltKCldPWQ7ZD0hMH1yZXR1cm4gZH19CmZ1bmN0aW9uICRmKGEsYixjKXtiJiYoYj0wPD1iLmluZGV4T2YoIjsiKT9hZyhhLGIsYyk6bWYoYixmdW5jdGlvbihiLGUsZixnKXtpZighZSlyZXR1cm4gYitnOyhlPSRmKGEsY1tlXSxjKSkmJiJpbml0aWFsIiE9PWU/ImFwcGx5LXNoaW0taW5oZXJpdCI9PT1lJiYoZT0iaW5oZXJpdCIpOmU9JGYoYSxjW2ZdfHxmLGMpfHxmO3JldHVybiBiKyhlfHwiIikrZ30pKTtyZXR1cm4gYiYmYi50cmltKCl8fCIifQpmdW5jdGlvbiBhZyhhLGIsYyl7Yj1iLnNwbGl0KCI7Iik7Zm9yKHZhciBkPTAsZSxmO2Q8Yi5sZW5ndGg7ZCsrKWlmKGU9YltkXSl7U2UubGFzdEluZGV4PTA7aWYoZj1TZS5leGVjKGUpKWU9JGYoYSxjW2ZbMV1dLGMpO2Vsc2UgaWYoZj1lLmluZGV4T2YoIjoiKSwtMSE9PWYpe3ZhciBnPWUuc3Vic3RyaW5nKGYpO2c9Zy50cmltKCk7Zz0kZihhLGcsYyl8fGc7ZT1lLnN1YnN0cmluZygwLGYpK2d9YltkXT1lJiZlLmxhc3RJbmRleE9mKCI7Iik9PT1lLmxlbmd0aC0xP2Uuc2xpY2UoMCwtMSk6ZXx8IiJ9cmV0dXJuIGIuam9pbigiOyIpfQpmdW5jdGlvbiBiZyhhLGIpe3ZhciBjPXt9LGQ9W107ZGYoYSxmdW5jdGlvbihhKXthLml8fFlmKGEpO3ZhciBlPWEuanx8YS5wYXJzZWRTZWxlY3RvcjtiJiZhLmkudiYmZSYmVWYuY2FsbChiLGUpJiYoWmYoYSxjKSxhPWEuaW5kZXgsZT1wYXJzZUludChhLzMyLDEwKSxkW2VdPShkW2VdfHwwKXwxPDxhJTMyKX0sbnVsbCwhMCk7cmV0dXJue3Y6YyxrZXk6ZH19CmZ1bmN0aW9uIGNnKGEsYixjLGQpe2IuaXx8WWYoYik7aWYoYi5pLnYpe3ZhciBlPXBmKGEpO2E9ZS5pcztlPWUuTTtlPWE/QmYoYSxlKToiaHRtbCI7dmFyIGY9Yi5wYXJzZWRTZWxlY3RvcixnPSI6aG9zdCA+ICoiPT09Znx8Imh0bWwiPT09ZixoPTA9PT1mLmluZGV4T2YoIjpob3N0IikmJiFnOyJzaGFkeSI9PT1jJiYoZz1mPT09ZSsiID4gKi4iK2V8fC0xIT09Zi5pbmRleE9mKCJodG1sIiksaD0hZyYmMD09PWYuaW5kZXhPZihlKSk7aWYoZ3x8aCljPWUsaCYmKGIuanx8KGIuaj1DZihSLGIsUi5iLGE/Ii4iK2E6IiIsZSkpLGM9Yi5qfHxlKSxkKHtoYTpjLElhOmgsWmE6Z30pfX1mdW5jdGlvbiBkZyhhLGIsYyl7dmFyIGQ9e30sZT17fTtkZihiLGZ1bmN0aW9uKGIpe2NnKGEsYixjLGZ1bmN0aW9uKGMpe1VmLmNhbGwoYS5fZWxlbWVudHx8YSxjLmhhKSYmKGMuSWE/WmYoYixkKTpaZihiLGUpKX0pfSxudWxsLCEwKTtyZXR1cm57UmE6ZSxIYTpkfX0KZnVuY3Rpb24gZWcoYSxiLGMsZCl7dmFyIGU9cGYoYiksZj1CZihlLmlzLGUuTSksZz1uZXcgUmVnRXhwKCIoPzpefFteLiNbOl0pIisoYi5leHRlbmRzPyJcXCIrZi5zbGljZSgwLC0xKSsiXFxdIjpmKSsiKCR8Wy46W1xccz4rfl0pIiksaD1UKGIpO2U9aC5BO2g9aC5jc3NCdWlsZDt2YXIgaz1mZyhlLGQpO3JldHVybiB6ZihiLGUsZnVuY3Rpb24oYil7dmFyIGU9IiI7Yi5pfHxZZihiKTtiLmkuY3NzVGV4dCYmKGU9YWcoYSxiLmkuY3NzVGV4dCxjKSk7Yi5jc3NUZXh0PWU7aWYoIU8mJiFmZihiKSYmYi5jc3NUZXh0KXt2YXIgaD1lPWIuY3NzVGV4dDtudWxsPT1iLm5hJiYoYi5uYT1VZS50ZXN0KGUpKTtpZihiLm5hKWlmKG51bGw9PWIuVSl7Yi5VPVtdO2Zvcih2YXIgbCBpbiBrKWg9a1tsXSxoPWgoZSksZSE9PWgmJihlPWgsYi5VLnB1c2gobCkpfWVsc2V7Zm9yKGw9MDtsPGIuVS5sZW5ndGg7KytsKWg9a1tiLlVbbF1dLGU9aChlKTtoPWV9Yi5jc3NUZXh0PWg7Yi5qPWIuanx8CmIuc2VsZWN0b3I7ZT0iLiIrZDtsPXFmKGIuaik7aD0wO2Zvcih2YXIgTT1sLmxlbmd0aCxVPXZvaWQgMDtoPE0mJihVPWxbaF0pO2grKylsW2hdPVUubWF0Y2goZyk/VS5yZXBsYWNlKGYsZSk6ZSsiICIrVTtiLnNlbGVjdG9yPWwuam9pbigiLCIpfX0saCl9ZnVuY3Rpb24gZmcoYSxiKXthPWEuYjt2YXIgYz17fTtpZighTyYmYSlmb3IodmFyIGQ9MCxlPWFbZF07ZDxhLmxlbmd0aDtlPWFbKytkXSl7dmFyIGY9ZSxnPWI7Zi5mPW5ldyBSZWdFeHAoIlxcYiIrZi5rZXlmcmFtZXNOYW1lKyIoPyFcXEJ8LSkiLCJnIik7Zi5hPWYua2V5ZnJhbWVzTmFtZSsiLSIrZztmLmo9Zi5qfHxmLnNlbGVjdG9yO2Yuc2VsZWN0b3I9Zi5qLnJlcGxhY2UoZi5rZXlmcmFtZXNOYW1lLGYuYSk7Y1tlLmtleWZyYW1lc05hbWVdPWdnKGUpfXJldHVybiBjfWZ1bmN0aW9uIGdnKGEpe3JldHVybiBmdW5jdGlvbihiKXtyZXR1cm4gYi5yZXBsYWNlKGEuZixhLmEpfX0KZnVuY3Rpb24gaGcoYSxiKXt2YXIgYz1pZyxkPWVmKGEpO2EudGV4dENvbnRlbnQ9Y2YoZCxmdW5jdGlvbihhKXt2YXIgZD1hLmNzc1RleHQ9YS5wYXJzZWRDc3NUZXh0O2EuaSYmYS5pLmNzc1RleHQmJihkPWQucmVwbGFjZShJZSwiIikucmVwbGFjZShKZSwiIiksYS5jc3NUZXh0PWFnKGMsZCxiKSl9KX1wLk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFdmLnByb3RvdHlwZSx7YTp7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIngtc2NvcGUifX19KTt2YXIgaWc9bmV3IFdmO3ZhciBqZz17fSxrZz13aW5kb3cuY3VzdG9tRWxlbWVudHM7aWYoa2cmJiFPJiYhUGUpe3ZhciBsZz1rZy5kZWZpbmU7a2cuZGVmaW5lPWZ1bmN0aW9uKGEsYixjKXtqZ1thXXx8KGpnW2FdPWtmKGEpKTtsZy5jYWxsKGtnLGEsYixjKX19O2Z1bmN0aW9uIG1nKCl7dGhpcy5jYWNoZT17fX1tZy5wcm90b3R5cGUuc3RvcmU9ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9dGhpcy5jYWNoZVthXXx8W107ZS5wdXNoKHt2OmIsc3R5bGVFbGVtZW50OmMsczpkfSk7MTAwPGUubGVuZ3RoJiZlLnNoaWZ0KCk7dGhpcy5jYWNoZVthXT1lfTtmdW5jdGlvbiBuZygpe312YXIgb2c9bmV3IFJlZ0V4cChSLmErIlxccyooW15cXHNdKikiKTtmdW5jdGlvbiBwZyhhKXtyZXR1cm4oYT0oYS5jbGFzc0xpc3QmJmEuY2xhc3NMaXN0LnZhbHVlP2EuY2xhc3NMaXN0LnZhbHVlOmEuZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIikubWF0Y2gob2cpKT9hWzFdOiIifWZ1bmN0aW9uIHFnKGEpe3ZhciBiPW9mKGEpLmdldFJvb3ROb2RlKCk7cmV0dXJuIGI9PT1hfHxiPT09YS5vd25lckRvY3VtZW50PyIiOihhPWIuaG9zdCk/cGYoYSkuaXM6IiJ9CmZ1bmN0aW9uIHJnKGEpe2Zvcih2YXIgYj0wO2I8YS5sZW5ndGg7YisrKXt2YXIgYz1hW2JdO2lmKGMudGFyZ2V0IT09ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50JiZjLnRhcmdldCE9PWRvY3VtZW50LmhlYWQpZm9yKHZhciBkPTA7ZDxjLmFkZGVkTm9kZXMubGVuZ3RoO2QrKyl7dmFyIGU9Yy5hZGRlZE5vZGVzW2RdO2lmKGUubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERSl7dmFyIGY9ZS5nZXRSb290Tm9kZSgpLGc9cGcoZSk7aWYoZyYmZj09PWUub3duZXJEb2N1bWVudCYmKCJzdHlsZSIhPT1lLmxvY2FsTmFtZSYmInRlbXBsYXRlIiE9PWUubG9jYWxOYW1lfHwiIj09PXJmKGUpKSl5ZihlLGcpO2Vsc2UgaWYoZiBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QpZm9yKGY9cWcoZSksZiE9PWcmJnhmKGUsZyxmKSxlPXdpbmRvdy5TaGFkeURPTS5uYXRpdmVNZXRob2RzLnF1ZXJ5U2VsZWN0b3JBbGwuY2FsbChlLCI6bm90KC4iK1IuYSsiKSIpLGc9MDtnPGUubGVuZ3RoO2crKyl7Zj1lW2ddOwp2YXIgaD1xZyhmKTtoJiZ3ZihmLGgpfX19fX0KaWYoIShPfHx3aW5kb3cuU2hhZHlET00mJndpbmRvdy5TaGFkeURPTS5oYW5kbGVzRHluYW1pY1Njb3BpbmcpKXt2YXIgc2c9bmV3IE11dGF0aW9uT2JzZXJ2ZXIocmcpLHRnPWZ1bmN0aW9uKGEpe3NnLm9ic2VydmUoYSx7Y2hpbGRMaXN0OiEwLHN1YnRyZWU6ITB9KX07aWYod2luZG93LmN1c3RvbUVsZW1lbnRzJiYhd2luZG93LmN1c3RvbUVsZW1lbnRzLnBvbHlmaWxsV3JhcEZsdXNoQ2FsbGJhY2spdGcoZG9jdW1lbnQpO2Vsc2V7dmFyIHVnPWZ1bmN0aW9uKCl7dGcoZG9jdW1lbnQuYm9keSl9O3dpbmRvdy5IVE1MSW1wb3J0cz93aW5kb3cuSFRNTEltcG9ydHMud2hlblJlYWR5KHVnKTpyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24oKXtpZigibG9hZGluZyI9PT1kb2N1bWVudC5yZWFkeVN0YXRlKXt2YXIgYT1mdW5jdGlvbigpe3VnKCk7ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigicmVhZHlzdGF0ZWNoYW5nZSIsYSl9O2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInJlYWR5c3RhdGVjaGFuZ2UiLAphKX1lbHNlIHVnKCl9KX1uZz1mdW5jdGlvbigpe3JnKHNnLnRha2VSZWNvcmRzKCkpfX12YXIgdmc9bmc7dmFyIHdnPXt9O3ZhciB4Zz1Qcm9taXNlLnJlc29sdmUoKTtmdW5jdGlvbiB5ZyhhKXtpZihhPXdnW2FdKWEuX2FwcGx5U2hpbUN1cnJlbnRWZXJzaW9uPWEuX2FwcGx5U2hpbUN1cnJlbnRWZXJzaW9ufHwwLGEuX2FwcGx5U2hpbVZhbGlkYXRpbmdWZXJzaW9uPWEuX2FwcGx5U2hpbVZhbGlkYXRpbmdWZXJzaW9ufHwwLGEuX2FwcGx5U2hpbU5leHRWZXJzaW9uPShhLl9hcHBseVNoaW1OZXh0VmVyc2lvbnx8MCkrMX1mdW5jdGlvbiB6ZyhhKXtyZXR1cm4gYS5fYXBwbHlTaGltQ3VycmVudFZlcnNpb249PT1hLl9hcHBseVNoaW1OZXh0VmVyc2lvbn1mdW5jdGlvbiBBZyhhKXthLl9hcHBseVNoaW1WYWxpZGF0aW5nVmVyc2lvbj1hLl9hcHBseVNoaW1OZXh0VmVyc2lvbjthLl92YWxpZGF0aW5nfHwoYS5fdmFsaWRhdGluZz0hMCx4Zy50aGVuKGZ1bmN0aW9uKCl7YS5fYXBwbHlTaGltQ3VycmVudFZlcnNpb249YS5fYXBwbHlTaGltTmV4dFZlcnNpb247YS5fdmFsaWRhdGluZz0hMX0pKX07dmFyIEJnPXt9LENnPW5ldyBtZztmdW5jdGlvbiBZKCl7dGhpcy5sPXt9O3RoaXMuYz1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7dmFyIGE9bmV3IHZlO2EucnVsZXM9W107dGhpcy5mPVRmKHRoaXMuYyxuZXcgU2YoYSkpO3RoaXMuZz0hMTt0aGlzLmI9dGhpcy5hPW51bGx9bj1ZLnByb3RvdHlwZTtuLmZsdXNoPWZ1bmN0aW9uKCl7dmcoKX07bi5GYT1mdW5jdGlvbihhKXtyZXR1cm4gZWYoYSl9O24uVmE9ZnVuY3Rpb24oYSl7cmV0dXJuIGNmKGEpfTtuLnByZXBhcmVUZW1wbGF0ZT1mdW5jdGlvbihhLGIsYyl7dGhpcy5wcmVwYXJlVGVtcGxhdGVEb20oYSxiKTt0aGlzLnByZXBhcmVUZW1wbGF0ZVN0eWxlcyhhLGIsYyl9OwpuLnByZXBhcmVUZW1wbGF0ZVN0eWxlcz1mdW5jdGlvbihhLGIsYyl7aWYoIWEuX3ByZXBhcmVkJiYhUGUpe098fGpnW2JdfHwoamdbYl09a2YoYikpO2EuX3ByZXBhcmVkPSEwO2EubmFtZT1iO2EuZXh0ZW5kcz1jO3dnW2JdPWE7dmFyIGQ9cmYoYSksZT1zZihkKTtjPXtpczpiLGV4dGVuZHM6Y307Zm9yKHZhciBmPVtdLGc9YS5jb250ZW50LnF1ZXJ5U2VsZWN0b3JBbGwoInN0eWxlIiksaD0wO2g8Zy5sZW5ndGg7aCsrKXt2YXIgaz1nW2hdO2lmKGsuaGFzQXR0cmlidXRlKCJzaGFkeS11bnNjb3BlZCIpKXtpZighTyl7dmFyIGw9ay50ZXh0Q29udGVudDtiZi5oYXMobCl8fChiZi5hZGQobCksbD1rLmNsb25lTm9kZSghMCksZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChsKSk7ay5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGspfX1lbHNlIGYucHVzaChrLnRleHRDb250ZW50KSxrLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoayl9Zj1mLmpvaW4oIiIpLnRyaW0oKSsoQmdbYl18fCIiKTsKRGcodGhpcyk7aWYoIWUpe2lmKGc9IWQpZz1TZS50ZXN0KGYpfHxSZS50ZXN0KGYpLFNlLmxhc3RJbmRleD0wLFJlLmxhc3RJbmRleD0wO2g9d2UoZik7ZyYmUSYmdGhpcy5hJiZ0aGlzLmEudHJhbnNmb3JtUnVsZXMoaCxiKTthLl9zdHlsZUFzdD1ofWc9W107UXx8KGc9WGYoYS5fc3R5bGVBc3QpKTtpZighZy5sZW5ndGh8fFEpaD1PP2EuY29udGVudDpudWxsLGI9amdbYl18fG51bGwsZD16ZihjLGEuX3N0eWxlQXN0LG51bGwsZCxlP2Y6IiIpLGQ9ZC5sZW5ndGg/Z2YoZCxjLmlzLGgsYik6bnVsbCxhLl9zdHlsZT1kO2EuYT1nfX07bi5RYT1mdW5jdGlvbihhLGIpe0JnW2JdPWEuam9pbigiICIpfTtuLnByZXBhcmVUZW1wbGF0ZURvbT1mdW5jdGlvbihhLGIpe2lmKCFQZSl7dmFyIGM9cmYoYSk7T3x8InNoYWR5Ij09PWN8fGEuX2RvbVByZXBhcmVkfHwoYS5fZG9tUHJlcGFyZWQ9ITAsdWYoYS5jb250ZW50LGIpKX19OwpmdW5jdGlvbiBFZyhhKXt2YXIgYj1wZihhKSxjPWIuaXM7Yj1iLk07dmFyIGQ9amdbY118fG51bGwsZT13Z1tjXTtpZihlKXtjPWUuX3N0eWxlQXN0O3ZhciBmPWUuYTtlPXJmKGUpO2I9bmV3IFNmKGMsZCxmLGIsZSk7VGYoYSxiKTtyZXR1cm4gYn19ZnVuY3Rpb24gRmcoYSl7IWEuYiYmd2luZG93LlNoYWR5Q1NTJiZ3aW5kb3cuU2hhZHlDU1MuQ3VzdG9tU3R5bGVJbnRlcmZhY2UmJihhLmI9d2luZG93LlNoYWR5Q1NTLkN1c3RvbVN0eWxlSW50ZXJmYWNlLGEuYi50cmFuc2Zvcm1DYWxsYmFjaz1mdW5jdGlvbihiKXthLnJhKGIpfSxhLmIudmFsaWRhdGVDYWxsYmFjaz1mdW5jdGlvbigpe3JlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbigpeyhhLmIuZW5xdWV1ZWR8fGEuZykmJmEuZmx1c2hDdXN0b21TdHlsZXMoKX0pfSl9CmZ1bmN0aW9uIERnKGEpeyFhLmEmJndpbmRvdy5TaGFkeUNTUyYmd2luZG93LlNoYWR5Q1NTLkFwcGx5U2hpbSYmKGEuYT13aW5kb3cuU2hhZHlDU1MuQXBwbHlTaGltLGEuYS5pbnZhbGlkQ2FsbGJhY2s9eWcpO0ZnKGEpfQpuLmZsdXNoQ3VzdG9tU3R5bGVzPWZ1bmN0aW9uKCl7aWYoIVBlJiYoRGcodGhpcyksdGhpcy5iKSl7dmFyIGE9dGhpcy5iLnByb2Nlc3NTdHlsZXMoKTtpZih0aGlzLmIuZW5xdWV1ZWQmJiFzZih0aGlzLmYuY3NzQnVpbGQpKXtpZihRKXtpZighdGhpcy5mLmNzc0J1aWxkKWZvcih2YXIgYj0wO2I8YS5sZW5ndGg7YisrKXt2YXIgYz10aGlzLmIuZ2V0U3R5bGVGb3JDdXN0b21TdHlsZShhW2JdKTtpZihjJiZRJiZ0aGlzLmEpe3ZhciBkPWVmKGMpO0RnKHRoaXMpO3RoaXMuYS50cmFuc2Zvcm1SdWxlcyhkKTtjLnRleHRDb250ZW50PWNmKGQpfX19ZWxzZXtHZyh0aGlzLHRoaXMuYyx0aGlzLmYpO2ZvcihiPTA7YjxhLmxlbmd0aDtiKyspKGM9dGhpcy5iLmdldFN0eWxlRm9yQ3VzdG9tU3R5bGUoYVtiXSkpJiZoZyhjLHRoaXMuZi53KTt0aGlzLmcmJnRoaXMuc3R5bGVEb2N1bWVudCgpfXRoaXMuYi5lbnF1ZXVlZD0hMX19fTsKbi5zdHlsZUVsZW1lbnQ9ZnVuY3Rpb24oYSxiKXtpZihQZSl7aWYoYil7VChhKXx8VGYoYSxuZXcgU2YobnVsbCkpO3ZhciBjPVQoYSk7Yy5vPWMub3x8e307T2JqZWN0LmFzc2lnbihjLm8sYik7SGcodGhpcyxhLGMpfX1lbHNlIGlmKGM9VChhKXx8RWcoYSkpaWYoYSE9PXRoaXMuYyYmKHRoaXMuZz0hMCksYiYmKGMubz1jLm98fHt9LE9iamVjdC5hc3NpZ24oYy5vLGIpKSxRKUhnKHRoaXMsYSxjKTtlbHNlIGlmKHRoaXMuZmx1c2goKSxHZyh0aGlzLGEsYyksYy5mYSYmYy5mYS5sZW5ndGgpe2I9cGYoYSkuaXM7dmFyIGQ7YTp7aWYoZD1DZy5jYWNoZVtiXSlmb3IodmFyIGU9ZC5sZW5ndGgtMTswPD1lO2UtLSl7dmFyIGY9ZFtlXTtiOnt2YXIgZz1jLmZhO2Zvcih2YXIgaD0wO2g8Zy5sZW5ndGg7aCsrKXt2YXIgaz1nW2hdO2lmKGYudltrXSE9PWMud1trXSl7Zz0hMTticmVhayBifX1nPSEwfWlmKGcpe2Q9ZjticmVhayBhfX1kPXZvaWQgMH1nPWQ/ZC5zdHlsZUVsZW1lbnQ6bnVsbDsKZT1jLnM7KGY9ZCYmZC5zKXx8KGY9dGhpcy5sW2JdPSh0aGlzLmxbYl18fDApKzEsZj1iKyItIitmKTtjLnM9ZjtmPWMucztoPWlnO2g9Zz9nLnRleHRDb250ZW50fHwiIjplZyhoLGEsYy53LGYpO2s9VChhKTt2YXIgbD1rLmE7bCYmIU8mJmwhPT1nJiYobC5fdXNlQ291bnQtLSwwPj1sLl91c2VDb3VudCYmbC5wYXJlbnROb2RlJiZsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobCkpO08/ay5hPyhrLmEudGV4dENvbnRlbnQ9aCxnPWsuYSk6aCYmKGc9Z2YoaCxmLGEuc2hhZG93Um9vdCxrLmIpKTpnP2cucGFyZW50Tm9kZXx8KFZmJiYtMTxoLmluZGV4T2YoIkBtZWRpYSIpJiYoZy50ZXh0Q29udGVudD1oKSxoZihnLG51bGwsay5iKSk6aCYmKGc9Z2YoaCxmLG51bGwsay5iKSk7ZyYmKGcuX3VzZUNvdW50PWcuX3VzZUNvdW50fHwwLGsuYSE9ZyYmZy5fdXNlQ291bnQrKyxrLmE9Zyk7Zj1nO098fChnPWMucyxrPWg9YS5nZXRBdHRyaWJ1dGUoImNsYXNzIil8fCIiLGUmJihrPWgucmVwbGFjZShuZXcgUmVnRXhwKCJcXHMqeC1zY29wZVxccyoiKwplKyJcXHMqIiwiZyIpLCIgIikpLGsrPShrPyIgIjoiIikrIngtc2NvcGUgIitnLGghPT1rJiZuZihhLGspKTtkfHxDZy5zdG9yZShiLGMudyxmLGMucyl9fTsKZnVuY3Rpb24gSGcoYSxiLGMpe3ZhciBkPXBmKGIpLmlzO2lmKGMubyl7dmFyIGU9Yy5vLGY7Zm9yKGYgaW4gZSludWxsPT09Zj9iLnN0eWxlLnJlbW92ZVByb3BlcnR5KGYpOmIuc3R5bGUuc2V0UHJvcGVydHkoZixlW2ZdKX1lPXdnW2RdO2lmKCEoIWUmJmIhPT1hLmN8fGUmJiIiIT09cmYoZSkpJiZlJiZlLl9zdHlsZSYmIXpnKGUpKXtpZih6ZyhlKXx8ZS5fYXBwbHlTaGltVmFsaWRhdGluZ1ZlcnNpb24hPT1lLl9hcHBseVNoaW1OZXh0VmVyc2lvbilEZyhhKSxhLmEmJmEuYS50cmFuc2Zvcm1SdWxlcyhlLl9zdHlsZUFzdCxkKSxlLl9zdHlsZS50ZXh0Q29udGVudD16ZihiLGMuQSksQWcoZSk7TyYmKGE9Yi5zaGFkb3dSb290KSYmKGE9YS5xdWVyeVNlbGVjdG9yKCJzdHlsZSIpKSYmKGEudGV4dENvbnRlbnQ9emYoYixjLkEpKTtjLkE9ZS5fc3R5bGVBc3R9fQpmdW5jdGlvbiBJZyhhLGIpe3JldHVybihiPW9mKGIpLmdldFJvb3ROb2RlKCkuaG9zdCk/VChiKXx8RWcoYik/YjpJZyhhLGIpOmEuY31mdW5jdGlvbiBHZyhhLGIsYyl7dmFyIGQ9SWcoYSxiKSxlPVQoZCksZj1lLnc7ZD09PWEuY3x8Znx8KEdnKGEsZCxlKSxmPWUudyk7YT1PYmplY3QuY3JlYXRlKGZ8fG51bGwpO2Q9ZGcoYixjLkEsYy5jc3NCdWlsZCk7Yj1iZyhlLkEsYikudjtPYmplY3QuYXNzaWduKGEsZC5IYSxiLGQuUmEpO2I9Yy5vO2Zvcih2YXIgZyBpbiBiKWlmKChlPWJbZ10pfHwwPT09ZSlhW2ddPWU7Zz1pZztiPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGEpO2ZvcihlPTA7ZTxiLmxlbmd0aDtlKyspZD1iW2VdLGFbZF09JGYoZyxhW2RdLGEpO2Mudz1hfW4uc3R5bGVEb2N1bWVudD1mdW5jdGlvbihhKXt0aGlzLnN0eWxlU3VidHJlZSh0aGlzLmMsYSl9OwpuLnN0eWxlU3VidHJlZT1mdW5jdGlvbihhLGIpe3ZhciBjPW9mKGEpLGQ9Yy5zaGFkb3dSb290OyhkfHxhPT09dGhpcy5jKSYmdGhpcy5zdHlsZUVsZW1lbnQoYSxiKTtpZihhPWQmJihkLmNoaWxkcmVufHxkLmNoaWxkTm9kZXMpKWZvcihjPTA7YzxhLmxlbmd0aDtjKyspdGhpcy5zdHlsZVN1YnRyZWUoYVtjXSk7ZWxzZSBpZihjPWMuY2hpbGRyZW58fGMuY2hpbGROb2Rlcylmb3IoYT0wO2E8Yy5sZW5ndGg7YSsrKXRoaXMuc3R5bGVTdWJ0cmVlKGNbYV0pfTsKbi5yYT1mdW5jdGlvbihhKXt2YXIgYj10aGlzLGM9cmYoYSk7YyE9PXRoaXMuZi5jc3NCdWlsZCYmKHRoaXMuZi5jc3NCdWlsZD1jKTtpZighc2YoYykpe3ZhciBkPWVmKGEpO2RmKGQsZnVuY3Rpb24oYSl7aWYoTylSZihhKTtlbHNle3ZhciBkPVI7YS5zZWxlY3Rvcj1hLnBhcnNlZFNlbGVjdG9yO1JmKGEpO2Euc2VsZWN0b3I9YS5qPUNmKGQsYSxkLmMsdm9pZCAwLHZvaWQgMCl9USYmIiI9PT1jJiYoRGcoYiksYi5hJiZiLmEudHJhbnNmb3JtUnVsZShhKSl9KTtRP2EudGV4dENvbnRlbnQ9Y2YoZCk6dGhpcy5mLkEucnVsZXMucHVzaChkKX19O24uZ2V0Q29tcHV0ZWRTdHlsZVZhbHVlPWZ1bmN0aW9uKGEsYil7dmFyIGM7UXx8KGM9KFQoYSl8fFQoSWcodGhpcyxhKSkpLndbYl0pO3JldHVybihjPWN8fHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGEpLmdldFByb3BlcnR5VmFsdWUoYikpP2MudHJpbSgpOiIifTsKbi5VYT1mdW5jdGlvbihhLGIpe3ZhciBjPW9mKGEpLmdldFJvb3ROb2RlKCk7Yj1iP2Iuc3BsaXQoL1xzLyk6W107Yz1jLmhvc3QmJmMuaG9zdC5sb2NhbE5hbWU7aWYoIWMpe3ZhciBkPWEuZ2V0QXR0cmlidXRlKCJjbGFzcyIpO2lmKGQpe2Q9ZC5zcGxpdCgvXHMvKTtmb3IodmFyIGU9MDtlPGQubGVuZ3RoO2UrKylpZihkW2VdPT09Ui5hKXtjPWRbZSsxXTticmVha319fWMmJmIucHVzaChSLmEsYyk7UXx8KGM9VChhKSkmJmMucyYmYi5wdXNoKGlnLmEsYy5zKTtuZihhLGIuam9pbigiICIpKX07bi5CYT1mdW5jdGlvbihhKXtyZXR1cm4gVChhKX07bi5UYT1mdW5jdGlvbihhLGIpe3dmKGEsYil9O24uV2E9ZnVuY3Rpb24oYSxiKXt3ZihhLGIsITApfTtuLlNhPWZ1bmN0aW9uKGEpe3JldHVybiBxZyhhKX07bi5EYT1mdW5jdGlvbihhKXtyZXR1cm4gcGcoYSl9O1kucHJvdG90eXBlLmZsdXNoPVkucHJvdG90eXBlLmZsdXNoO1kucHJvdG90eXBlLnByZXBhcmVUZW1wbGF0ZT1ZLnByb3RvdHlwZS5wcmVwYXJlVGVtcGxhdGU7ClkucHJvdG90eXBlLnN0eWxlRWxlbWVudD1ZLnByb3RvdHlwZS5zdHlsZUVsZW1lbnQ7WS5wcm90b3R5cGUuc3R5bGVEb2N1bWVudD1ZLnByb3RvdHlwZS5zdHlsZURvY3VtZW50O1kucHJvdG90eXBlLnN0eWxlU3VidHJlZT1ZLnByb3RvdHlwZS5zdHlsZVN1YnRyZWU7WS5wcm90b3R5cGUuZ2V0Q29tcHV0ZWRTdHlsZVZhbHVlPVkucHJvdG90eXBlLmdldENvbXB1dGVkU3R5bGVWYWx1ZTtZLnByb3RvdHlwZS5zZXRFbGVtZW50Q2xhc3M9WS5wcm90b3R5cGUuVWE7WS5wcm90b3R5cGUuX3N0eWxlSW5mb0Zvck5vZGU9WS5wcm90b3R5cGUuQmE7WS5wcm90b3R5cGUudHJhbnNmb3JtQ3VzdG9tU3R5bGVGb3JEb2N1bWVudD1ZLnByb3RvdHlwZS5yYTtZLnByb3RvdHlwZS5nZXRTdHlsZUFzdD1ZLnByb3RvdHlwZS5GYTtZLnByb3RvdHlwZS5zdHlsZUFzdFRvU3RyaW5nPVkucHJvdG90eXBlLlZhO1kucHJvdG90eXBlLmZsdXNoQ3VzdG9tU3R5bGVzPVkucHJvdG90eXBlLmZsdXNoQ3VzdG9tU3R5bGVzOwpZLnByb3RvdHlwZS5zY29wZU5vZGU9WS5wcm90b3R5cGUuVGE7WS5wcm90b3R5cGUudW5zY29wZU5vZGU9WS5wcm90b3R5cGUuV2E7WS5wcm90b3R5cGUuc2NvcGVGb3JOb2RlPVkucHJvdG90eXBlLlNhO1kucHJvdG90eXBlLmN1cnJlbnRTY29wZUZvck5vZGU9WS5wcm90b3R5cGUuRGE7WS5wcm90b3R5cGUucHJlcGFyZUFkb3B0ZWRDc3NUZXh0PVkucHJvdG90eXBlLlFhO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFkucHJvdG90eXBlLHtuYXRpdmVTaGFkb3c6e2dldDpmdW5jdGlvbigpe3JldHVybiBPfX0sbmF0aXZlQ3NzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gUX19fSk7dmFyIFo9bmV3IFksSmcsS2c7d2luZG93LlNoYWR5Q1NTJiYoSmc9d2luZG93LlNoYWR5Q1NTLkFwcGx5U2hpbSxLZz13aW5kb3cuU2hhZHlDU1MuQ3VzdG9tU3R5bGVJbnRlcmZhY2UpOwp3aW5kb3cuU2hhZHlDU1M9e1Njb3BpbmdTaGltOloscHJlcGFyZVRlbXBsYXRlOmZ1bmN0aW9uKGEsYixjKXtaLmZsdXNoQ3VzdG9tU3R5bGVzKCk7Wi5wcmVwYXJlVGVtcGxhdGUoYSxiLGMpfSxwcmVwYXJlVGVtcGxhdGVEb206ZnVuY3Rpb24oYSxiKXtaLnByZXBhcmVUZW1wbGF0ZURvbShhLGIpfSxwcmVwYXJlVGVtcGxhdGVTdHlsZXM6ZnVuY3Rpb24oYSxiLGMpe1ouZmx1c2hDdXN0b21TdHlsZXMoKTtaLnByZXBhcmVUZW1wbGF0ZVN0eWxlcyhhLGIsYyl9LHN0eWxlU3VidHJlZTpmdW5jdGlvbihhLGIpe1ouZmx1c2hDdXN0b21TdHlsZXMoKTtaLnN0eWxlU3VidHJlZShhLGIpfSxzdHlsZUVsZW1lbnQ6ZnVuY3Rpb24oYSl7Wi5mbHVzaEN1c3RvbVN0eWxlcygpO1ouc3R5bGVFbGVtZW50KGEpfSxzdHlsZURvY3VtZW50OmZ1bmN0aW9uKGEpe1ouZmx1c2hDdXN0b21TdHlsZXMoKTtaLnN0eWxlRG9jdW1lbnQoYSl9LGZsdXNoQ3VzdG9tU3R5bGVzOmZ1bmN0aW9uKCl7Wi5mbHVzaEN1c3RvbVN0eWxlcygpfSwKZ2V0Q29tcHV0ZWRTdHlsZVZhbHVlOmZ1bmN0aW9uKGEsYil7cmV0dXJuIFouZ2V0Q29tcHV0ZWRTdHlsZVZhbHVlKGEsYil9LG5hdGl2ZUNzczpRLG5hdGl2ZVNoYWRvdzpPLGNzc0J1aWxkOlFlLGRpc2FibGVSdW50aW1lOlBlfTtKZyYmKHdpbmRvdy5TaGFkeUNTUy5BcHBseVNoaW09SmcpO0tnJiYod2luZG93LlNoYWR5Q1NTLkN1c3RvbVN0eWxlSW50ZXJmYWNlPUtnKTt2YXIgTGc9d2luZG93LmN1c3RvbUVsZW1lbnRzLE1nPXdpbmRvdy5IVE1MSW1wb3J0cyxOZz13aW5kb3cuSFRNTFRlbXBsYXRlRWxlbWVudDt3aW5kb3cuV2ViQ29tcG9uZW50cz13aW5kb3cuV2ViQ29tcG9uZW50c3x8e307aWYoTGcmJkxnLnBvbHlmaWxsV3JhcEZsdXNoQ2FsbGJhY2spe3ZhciBPZyxQZz1mdW5jdGlvbigpe2lmKE9nKXtOZy5DJiZOZy5DKHdpbmRvdy5kb2N1bWVudCk7dmFyIGE9T2c7T2c9bnVsbDthKCk7cmV0dXJuITB9fSxRZz1NZy53aGVuUmVhZHk7TGcucG9seWZpbGxXcmFwRmx1c2hDYWxsYmFjayhmdW5jdGlvbihhKXtPZz1hO1FnKFBnKX0pO01nLndoZW5SZWFkeT1mdW5jdGlvbihhKXtRZyhmdW5jdGlvbigpe1BnKCk/TWcud2hlblJlYWR5KGEpOmEoKX0pfX0KTWcud2hlblJlYWR5KGZ1bmN0aW9uKCl7cmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uKCl7d2luZG93LldlYkNvbXBvbmVudHMucmVhZHk9ITA7ZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoIldlYkNvbXBvbmVudHNSZWFkeSIse2J1YmJsZXM6ITB9KSl9KX0pO3ZhciBSZz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO1JnLnRleHRDb250ZW50PSJib2R5IHt0cmFuc2l0aW9uOiBvcGFjaXR5IGVhc2UtaW4gMC4yczsgfSBcbmJvZHlbdW5yZXNvbHZlZF0ge29wYWNpdHk6IDA7IGRpc3BsYXk6IGJsb2NrOyBvdmVyZmxvdzogaGlkZGVuOyBwb3NpdGlvbjogcmVsYXRpdmU7IH0gXG4iO3ZhciBTZz1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJoZWFkIik7U2cuaW5zZXJ0QmVmb3JlKFJnLFNnLmZpcnN0Q2hpbGQpO30pLmNhbGwodGhpcyk7CgoKPC9zY3JpcHQ+PHNjcmlwdD4oZnVuY3Rpb24oKXsvKgoKQ29weXJpZ2h0IChjKSAyMDE3IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dApUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dApUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQKQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28Kc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKKi8KJ3VzZSBzdHJpY3QnO3ZhciBsPSEod2luZG93LlNoYWR5RE9NJiZ3aW5kb3cuU2hhZHlET00uaW5Vc2UpLHA7ZnVuY3Rpb24gcihhKXtwPWEmJmEuc2hpbWNzc3Byb3BlcnRpZXM/ITE6bHx8IShuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9BcHBsZVdlYktpdFwvNjAxfEVkZ2VcLzE1Lyl8fCF3aW5kb3cuQ1NTfHwhQ1NTLnN1cHBvcnRzfHwhQ1NTLnN1cHBvcnRzKCJib3gtc2hhZG93IiwiMCAwIDAgdmFyKC0tZm9vKSIpKX12YXIgdDt3aW5kb3cuU2hhZHlDU1MmJnZvaWQgMCE9PXdpbmRvdy5TaGFkeUNTUy5jc3NCdWlsZCYmKHQ9d2luZG93LlNoYWR5Q1NTLmNzc0J1aWxkKTt2YXIgYWE9ISghd2luZG93LlNoYWR5Q1NTfHwhd2luZG93LlNoYWR5Q1NTLmRpc2FibGVSdW50aW1lKTsKd2luZG93LlNoYWR5Q1NTJiZ2b2lkIDAhPT13aW5kb3cuU2hhZHlDU1MubmF0aXZlQ3NzP3A9d2luZG93LlNoYWR5Q1NTLm5hdGl2ZUNzczp3aW5kb3cuU2hhZHlDU1M/KHIod2luZG93LlNoYWR5Q1NTKSx3aW5kb3cuU2hhZHlDU1M9dm9pZCAwKTpyKHdpbmRvdy5XZWJDb21wb25lbnRzJiZ3aW5kb3cuV2ViQ29tcG9uZW50cy5mbGFncyk7dmFyIHU9cCx2PXQ7ZnVuY3Rpb24gdygpe3RoaXMuZW5kPXRoaXMuc3RhcnQ9MDt0aGlzLnJ1bGVzPXRoaXMucGFyZW50PXRoaXMucHJldmlvdXM9bnVsbDt0aGlzLmNzc1RleHQ9dGhpcy5wYXJzZWRDc3NUZXh0PSIiO3RoaXMuYXRSdWxlPSExO3RoaXMudHlwZT0wO3RoaXMucGFyc2VkU2VsZWN0b3I9dGhpcy5zZWxlY3Rvcj10aGlzLmtleWZyYW1lc05hbWU9IiJ9CmZ1bmN0aW9uIHgoYSl7YT1hLnJlcGxhY2UoYmEsIiIpLnJlcGxhY2UoY2EsIiIpO3ZhciBiPXksYz1hLGU9bmV3IHc7ZS5zdGFydD0wO2UuZW5kPWMubGVuZ3RoO2Zvcih2YXIgZD1lLGY9MCxnPWMubGVuZ3RoO2Y8ZztmKyspaWYoInsiPT09Y1tmXSl7ZC5ydWxlc3x8KGQucnVsZXM9W10pO3ZhciBoPWQsaz1oLnJ1bGVzW2gucnVsZXMubGVuZ3RoLTFdfHxudWxsO2Q9bmV3IHc7ZC5zdGFydD1mKzE7ZC5wYXJlbnQ9aDtkLnByZXZpb3VzPWs7aC5ydWxlcy5wdXNoKGQpfWVsc2UifSI9PT1jW2ZdJiYoZC5lbmQ9ZisxLGQ9ZC5wYXJlbnR8fGUpO3JldHVybiBiKGUsYSl9CmZ1bmN0aW9uIHkoYSxiKXt2YXIgYz1iLnN1YnN0cmluZyhhLnN0YXJ0LGEuZW5kLTEpO2EucGFyc2VkQ3NzVGV4dD1hLmNzc1RleHQ9Yy50cmltKCk7YS5wYXJlbnQmJihjPWIuc3Vic3RyaW5nKGEucHJldmlvdXM/YS5wcmV2aW91cy5lbmQ6YS5wYXJlbnQuc3RhcnQsYS5zdGFydC0xKSxjPWRhKGMpLGM9Yy5yZXBsYWNlKHosIiAiKSxjPWMuc3Vic3RyaW5nKGMubGFzdEluZGV4T2YoIjsiKSsxKSxjPWEucGFyc2VkU2VsZWN0b3I9YS5zZWxlY3Rvcj1jLnRyaW0oKSxhLmF0UnVsZT0wPT09Yy5pbmRleE9mKCJAIiksYS5hdFJ1bGU/MD09PWMuaW5kZXhPZigiQG1lZGlhIik/YS50eXBlPUE6Yy5tYXRjaChlYSkmJihhLnR5cGU9QixhLmtleWZyYW1lc05hbWU9YS5zZWxlY3Rvci5zcGxpdCh6KS5wb3AoKSk6YS50eXBlPTA9PT1jLmluZGV4T2YoIi0tIik/QzpEKTtpZihjPWEucnVsZXMpZm9yKHZhciBlPTAsZD1jLmxlbmd0aCxmPXZvaWQgMDtlPGQmJihmPWNbZV0pO2UrKyl5KGYsYik7CnJldHVybiBhfWZ1bmN0aW9uIGRhKGEpe3JldHVybiBhLnJlcGxhY2UoL1xcKFswLTlhLWZdezEsNn0pXHMvZ2ksZnVuY3Rpb24oYSxjKXthPWM7Zm9yKGM9Ni1hLmxlbmd0aDtjLS07KWE9IjAiK2E7cmV0dXJuIlxcIithfSl9CmZ1bmN0aW9uIEUoYSxiLGMpe2M9dm9pZCAwPT09Yz8iIjpjO3ZhciBlPSIiO2lmKGEuY3NzVGV4dHx8YS5ydWxlcyl7dmFyIGQ9YS5ydWxlcyxmO2lmKGY9ZClmPWRbMF0sZj0hKGYmJmYuc2VsZWN0b3ImJjA9PT1mLnNlbGVjdG9yLmluZGV4T2YoIi0tIikpO2lmKGYpe2Y9MDtmb3IodmFyIGc9ZC5sZW5ndGgsaD12b2lkIDA7ZjxnJiYoaD1kW2ZdKTtmKyspZT1FKGgsYixlKX1lbHNlIGI/Yj1hLmNzc1RleHQ6KGI9YS5jc3NUZXh0LGI9Yi5yZXBsYWNlKGZhLCIiKS5yZXBsYWNlKGhhLCIiKSxiPWIucmVwbGFjZShpYSwiIikucmVwbGFjZShqYSwiIikpLChlPWIudHJpbSgpKSYmKGU9IiAgIitlKyJcbiIpfWUmJihhLnNlbGVjdG9yJiYoYys9YS5zZWxlY3RvcisiIHtcbiIpLGMrPWUsYS5zZWxlY3RvciYmKGMrPSJ9XG5cbiIpKTtyZXR1cm4gY30KdmFyIEQ9MSxCPTcsQT00LEM9MUUzLGJhPS9cL1wqW14qXSpcKisoW14vKl1bXipdKlwqKykqXC8vZ2ltLGNhPS9AaW1wb3J0W147XSo7L2dpbSxmYT0vKD86XlteO1wtXHN9XSspPy0tW147e31dKj86W157fTtdKj8oPzpbO1xuXXwkKS9naW0saGE9Lyg/Ol5bXjtcLVxzfV0rKT8tLVteO3t9XSo/Oltee307XSo/e1tefV0qP30oPzpbO1xuXXwkKT8vZ2ltLGlhPS9AYXBwbHlccypcKD9bXik7XSpcKT9ccyooPzpbO1xuXXwkKT8vZ2ltLGphPS9bXjs6XSo/OlteO10qP3ZhclwoW147XSpcKSg/Ols7XG5dfCQpPy9naW0sZWE9L15AW15cc10qa2V5ZnJhbWVzLyx6PS9ccysvZzt2YXIgRz0vKD86XnxbO1xze11ccyopKC0tW1x3LV0qPylccyo6XHMqKD86KCg/OicoPzpcXCd8LikqPyd8Iig/OlxcInwuKSo/InxcKFteKV0qP1wpfFtefTt7XSkrKXxceyhbXn1dKilcfSg/Oig/PVs7XHN9XSl8JCkpL2dpLEg9Lyg/Ol58XFcrKUBhcHBseVxzKlwoPyhbXik7XG5dKilcKT8vZ2ksa2E9L0BtZWRpYVxzKC4qKS87dmFyIEk9bmV3IFNldDtmdW5jdGlvbiBKKGEpe2lmKCFhKXJldHVybiIiOyJzdHJpbmciPT09dHlwZW9mIGEmJihhPXgoYSkpO3JldHVybiBFKGEsdSl9ZnVuY3Rpb24gSyhhKXshYS5fX2Nzc1J1bGVzJiZhLnRleHRDb250ZW50JiYoYS5fX2Nzc1J1bGVzPXgoYS50ZXh0Q29udGVudCkpO3JldHVybiBhLl9fY3NzUnVsZXN8fG51bGx9ZnVuY3Rpb24gTChhLGIsYyxlKXtpZihhKXt2YXIgZD0hMSxmPWEudHlwZTtpZihlJiZmPT09QSl7dmFyIGc9YS5zZWxlY3Rvci5tYXRjaChrYSk7ZyYmKHdpbmRvdy5tYXRjaE1lZGlhKGdbMV0pLm1hdGNoZXN8fChkPSEwKSl9Zj09PUQ/YihhKTpjJiZmPT09Qj9jKGEpOmY9PT1DJiYoZD0hMCk7aWYoKGE9YS5ydWxlcykmJiFkKWZvcihkPTAsZj1hLmxlbmd0aCxnPXZvaWQgMDtkPGYmJihnPWFbZF0pO2QrKylMKGcsYixjLGUpfX0KZnVuY3Rpb24gTShhLGIpe3ZhciBjPWEuaW5kZXhPZigidmFyKCIpO2lmKC0xPT09YylyZXR1cm4gYihhLCIiLCIiLCIiKTthOnt2YXIgZT0wO3ZhciBkPWMrMztmb3IodmFyIGY9YS5sZW5ndGg7ZDxmO2QrKylpZigiKCI9PT1hW2RdKWUrKztlbHNlIGlmKCIpIj09PWFbZF0mJjA9PT0tLWUpYnJlYWsgYTtkPS0xfWU9YS5zdWJzdHJpbmcoYys0LGQpO2M9YS5zdWJzdHJpbmcoMCxjKTthPU0oYS5zdWJzdHJpbmcoZCsxKSxiKTtkPWUuaW5kZXhPZigiLCIpO3JldHVybi0xPT09ZD9iKGMsZS50cmltKCksIiIsYSk6YihjLGUuc3Vic3RyaW5nKDAsZCkudHJpbSgpLGUuc3Vic3RyaW5nKGQrMSkudHJpbSgpLGEpfQpmdW5jdGlvbiBOKGEpe2lmKHZvaWQgMCE9PXYpcmV0dXJuIHY7aWYodm9pZCAwPT09YS5fX2Nzc0J1aWxkKXt2YXIgYj1hLmdldEF0dHJpYnV0ZSgiY3NzLWJ1aWxkIik7aWYoYilhLl9fY3NzQnVpbGQ9YjtlbHNle2E6e2I9InRlbXBsYXRlIj09PWEubG9jYWxOYW1lP2EuY29udGVudC5maXJzdENoaWxkOmEuZmlyc3RDaGlsZDtpZihiIGluc3RhbmNlb2YgQ29tbWVudCYmKGI9Yi50ZXh0Q29udGVudC50cmltKCkuc3BsaXQoIjoiKSwiY3NzLWJ1aWxkIj09PWJbMF0pKXtiPWJbMV07YnJlYWsgYX1iPSIifWlmKCIiIT09Yil7dmFyIGM9InRlbXBsYXRlIj09PWEubG9jYWxOYW1lP2EuY29udGVudC5maXJzdENoaWxkOmEuZmlyc3RDaGlsZDtjLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoYyl9YS5fX2Nzc0J1aWxkPWJ9fXJldHVybiBhLl9fY3NzQnVpbGR8fCIifTt2YXIgbGE9LztccyovbSxtYT0vXlxzKihpbml0aWFsKXwoaW5oZXJpdClccyokLyxPPS9ccyohaW1wb3J0YW50LztmdW5jdGlvbiBQKCl7dGhpcy5hPXt9fVAucHJvdG90eXBlLnNldD1mdW5jdGlvbihhLGIpe2E9YS50cmltKCk7dGhpcy5hW2FdPXtoOmIsaTp7fX19O1AucHJvdG90eXBlLmdldD1mdW5jdGlvbihhKXthPWEudHJpbSgpO3JldHVybiB0aGlzLmFbYV18fG51bGx9O3ZhciBRPW51bGw7ZnVuY3Rpb24gUigpe3RoaXMuYj10aGlzLmM9bnVsbDt0aGlzLmE9bmV3IFB9Ui5wcm90b3R5cGUubz1mdW5jdGlvbihhKXthPUgudGVzdChhKXx8Ry50ZXN0KGEpO0gubGFzdEluZGV4PTA7Ry5sYXN0SW5kZXg9MDtyZXR1cm4gYX07ClIucHJvdG90eXBlLm09ZnVuY3Rpb24oYSxiKXtpZih2b2lkIDA9PT1hLl9nYXRoZXJlZFN0eWxlKXt2YXIgYz1bXTtmb3IodmFyIGU9YS5jb250ZW50LnF1ZXJ5U2VsZWN0b3JBbGwoInN0eWxlIiksZD0wO2Q8ZS5sZW5ndGg7ZCsrKXt2YXIgZj1lW2RdO2lmKGYuaGFzQXR0cmlidXRlKCJzaGFkeS11bnNjb3BlZCIpKXtpZighbCl7dmFyIGc9Zi50ZXh0Q29udGVudDtJLmhhcyhnKXx8KEkuYWRkKGcpLGc9Zi5jbG9uZU5vZGUoITApLGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoZykpO2YucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChmKX19ZWxzZSBjLnB1c2goZi50ZXh0Q29udGVudCksZi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGYpfShjPWMuam9pbigiIikudHJpbSgpKT8oZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpLGUudGV4dENvbnRlbnQ9YyxhLmNvbnRlbnQuaW5zZXJ0QmVmb3JlKGUsYS5jb250ZW50LmZpcnN0Q2hpbGQpLGM9ZSk6Yz1udWxsO2EuX2dhdGhlcmVkU3R5bGU9CmN9cmV0dXJuKGE9YS5fZ2F0aGVyZWRTdHlsZSk/dGhpcy5qKGEsYik6bnVsbH07Ui5wcm90b3R5cGUuaj1mdW5jdGlvbihhLGIpe2I9dm9pZCAwPT09Yj8iIjpiO3ZhciBjPUsoYSk7dGhpcy5sKGMsYik7YS50ZXh0Q29udGVudD1KKGMpO3JldHVybiBjfTtSLnByb3RvdHlwZS5mPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMsYz1LKGEpO0woYyxmdW5jdGlvbihhKXsiOnJvb3QiPT09YS5zZWxlY3RvciYmKGEuc2VsZWN0b3I9Imh0bWwiKTtiLmcoYSl9KTthLnRleHRDb250ZW50PUooYyk7cmV0dXJuIGN9O1IucHJvdG90eXBlLmw9ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzO3RoaXMuYz1iO0woYSxmdW5jdGlvbihhKXtjLmcoYSl9KTt0aGlzLmM9bnVsbH07Ui5wcm90b3R5cGUuZz1mdW5jdGlvbihhKXthLmNzc1RleHQ9bmEodGhpcyxhLnBhcnNlZENzc1RleHQsYSk7Ijpyb290Ij09PWEuc2VsZWN0b3ImJihhLnNlbGVjdG9yPSI6aG9zdCA+ICoiKX07CmZ1bmN0aW9uIG5hKGEsYixjKXtiPWIucmVwbGFjZShHLGZ1bmN0aW9uKGIsZCxmLGcpe3JldHVybiBvYShhLGIsZCxmLGcsYyl9KTtyZXR1cm4gUyhhLGIsYyl9ZnVuY3Rpb24gcGEoYSxiKXtmb3IodmFyIGM9YjtjLnBhcmVudDspYz1jLnBhcmVudDt2YXIgZT17fSxkPSExO0woYyxmdW5jdGlvbihjKXsoZD1kfHxjPT09Yil8fGMuc2VsZWN0b3I9PT1iLnNlbGVjdG9yJiZPYmplY3QuYXNzaWduKGUsVChhLGMucGFyc2VkQ3NzVGV4dCkpfSk7cmV0dXJuIGV9CmZ1bmN0aW9uIFMoYSxiLGMpe2Zvcih2YXIgZTtlPUguZXhlYyhiKTspe3ZhciBkPWVbMF0sZj1lWzFdO2U9ZS5pbmRleDt2YXIgZz1iLnNsaWNlKDAsZStkLmluZGV4T2YoIkBhcHBseSIpKTtiPWIuc2xpY2UoZStkLmxlbmd0aCk7dmFyIGg9Yz9wYShhLGMpOnt9O09iamVjdC5hc3NpZ24oaCxUKGEsZykpO2Q9dm9pZCAwO3ZhciBrPWE7Zj1mLnJlcGxhY2UobGEsIiIpO3ZhciBuPVtdO3ZhciBtPWsuYS5nZXQoZik7bXx8KGsuYS5zZXQoZix7fSksbT1rLmEuZ2V0KGYpKTtpZihtKXtrLmMmJihtLmlbay5jXT0hMCk7dmFyIHE9bS5oO2ZvcihkIGluIHEpaz1oJiZoW2RdLG09W2QsIjogdmFyKCIsZiwiXy1fIixkXSxrJiZtLnB1c2goIiwiLGsucmVwbGFjZShPLCIiKSksbS5wdXNoKCIpIiksTy50ZXN0KHFbZF0pJiZtLnB1c2goIiAhaW1wb3J0YW50Iiksbi5wdXNoKG0uam9pbigiIikpfWQ9bi5qb2luKCI7ICIpO2I9ZytkK2I7SC5sYXN0SW5kZXg9ZStkLmxlbmd0aH1yZXR1cm4gYn0KZnVuY3Rpb24gVChhLGIsYyl7Yz12b2lkIDA9PT1jPyExOmM7Yj1iLnNwbGl0KCI7Iik7Zm9yKHZhciBlLGQsZj17fSxnPTAsaDtnPGIubGVuZ3RoO2crKylpZihlPWJbZ10paWYoaD1lLnNwbGl0KCI6IiksMTxoLmxlbmd0aCl7ZT1oWzBdLnRyaW0oKTtkPWguc2xpY2UoMSkuam9pbigiOiIpO2lmKGMpe3ZhciBrPWE7aD1lO3ZhciBuPW1hLmV4ZWMoZCk7biYmKG5bMV0/KGsuYnx8KGsuYj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJtZXRhIiksay5iLnNldEF0dHJpYnV0ZSgiYXBwbHktc2hpbS1tZWFzdXJlIiwiIiksay5iLnN0eWxlLmFsbD0iaW5pdGlhbCIsZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChrLmIpKSxoPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGsuYikuZ2V0UHJvcGVydHlWYWx1ZShoKSk6aD0iYXBwbHktc2hpbS1pbmhlcml0IixkPWgpfWZbZV09ZH1yZXR1cm4gZn1mdW5jdGlvbiBxYShhLGIpe2lmKFEpZm9yKHZhciBjIGluIGIuaSljIT09YS5jJiZRKGMpfQpmdW5jdGlvbiBvYShhLGIsYyxlLGQsZil7ZSYmTShlLGZ1bmN0aW9uKGIsYyl7YyYmYS5hLmdldChjKSYmKGQ9IkBhcHBseSAiK2MrIjsiKX0pO2lmKCFkKXJldHVybiBiO3ZhciBnPVMoYSwiIitkLGYpO2Y9Yi5zbGljZSgwLGIuaW5kZXhPZigiLS0iKSk7dmFyIGg9Zz1UKGEsZywhMCksaz1hLmEuZ2V0KGMpLG49ayYmay5oO24/aD1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUobiksZyk6YS5hLnNldChjLGgpO3ZhciBtPVtdLHEsWj0hMTtmb3IocSBpbiBoKXt2YXIgRj1nW3FdO3ZvaWQgMD09PUYmJihGPSJpbml0aWFsIik7IW58fHEgaW4gbnx8KFo9ITApO20ucHVzaChjKyJfLV8iK3ErIjogIitGKX1aJiZxYShhLGspO2smJihrLmg9aCk7ZSYmKGY9YisiOyIrZik7cmV0dXJuIGYrbS5qb2luKCI7ICIpKyI7In1SLnByb3RvdHlwZS5kZXRlY3RNaXhpbj1SLnByb3RvdHlwZS5vO1IucHJvdG90eXBlLnRyYW5zZm9ybVN0eWxlPVIucHJvdG90eXBlLmo7ClIucHJvdG90eXBlLnRyYW5zZm9ybUN1c3RvbVN0eWxlPVIucHJvdG90eXBlLmY7Ui5wcm90b3R5cGUudHJhbnNmb3JtUnVsZXM9Ui5wcm90b3R5cGUubDtSLnByb3RvdHlwZS50cmFuc2Zvcm1SdWxlPVIucHJvdG90eXBlLmc7Ui5wcm90b3R5cGUudHJhbnNmb3JtVGVtcGxhdGU9Ui5wcm90b3R5cGUubTtSLnByb3RvdHlwZS5fc2VwYXJhdG9yPSJfLV8iO09iamVjdC5kZWZpbmVQcm9wZXJ0eShSLnByb3RvdHlwZSwiaW52YWxpZENhbGxiYWNrIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFF9LHNldDpmdW5jdGlvbihhKXtRPWF9fSk7dmFyIFU9e307dmFyIHJhPVByb21pc2UucmVzb2x2ZSgpO2Z1bmN0aW9uIHNhKGEpe2lmKGE9VVthXSlhLl9hcHBseVNoaW1DdXJyZW50VmVyc2lvbj1hLl9hcHBseVNoaW1DdXJyZW50VmVyc2lvbnx8MCxhLl9hcHBseVNoaW1WYWxpZGF0aW5nVmVyc2lvbj1hLl9hcHBseVNoaW1WYWxpZGF0aW5nVmVyc2lvbnx8MCxhLl9hcHBseVNoaW1OZXh0VmVyc2lvbj0oYS5fYXBwbHlTaGltTmV4dFZlcnNpb258fDApKzF9ZnVuY3Rpb24gdGEoYSl7cmV0dXJuIGEuX2FwcGx5U2hpbUN1cnJlbnRWZXJzaW9uPT09YS5fYXBwbHlTaGltTmV4dFZlcnNpb259ZnVuY3Rpb24gdWEoYSl7YS5fYXBwbHlTaGltVmFsaWRhdGluZ1ZlcnNpb249YS5fYXBwbHlTaGltTmV4dFZlcnNpb247YS5fdmFsaWRhdGluZ3x8KGEuX3ZhbGlkYXRpbmc9ITAscmEudGhlbihmdW5jdGlvbigpe2EuX2FwcGx5U2hpbUN1cnJlbnRWZXJzaW9uPWEuX2FwcGx5U2hpbU5leHRWZXJzaW9uO2EuX3ZhbGlkYXRpbmc9ITF9KSl9O3ZhciBWPW5ldyBSO2Z1bmN0aW9uIFcoKXt0aGlzLmE9bnVsbDtWLmludmFsaWRDYWxsYmFjaz1zYX1mdW5jdGlvbiBYKGEpeyFhLmEmJndpbmRvdy5TaGFkeUNTUy5DdXN0b21TdHlsZUludGVyZmFjZSYmKGEuYT13aW5kb3cuU2hhZHlDU1MuQ3VzdG9tU3R5bGVJbnRlcmZhY2UsYS5hLnRyYW5zZm9ybUNhbGxiYWNrPWZ1bmN0aW9uKGEpe1YuZihhKX0sYS5hLnZhbGlkYXRlQ2FsbGJhY2s9ZnVuY3Rpb24oKXtyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24oKXthLmEuZW5xdWV1ZWQmJmEuZmx1c2hDdXN0b21TdHlsZXMoKX0pfSl9Vy5wcm90b3R5cGUucHJlcGFyZVRlbXBsYXRlPWZ1bmN0aW9uKGEsYil7WCh0aGlzKTsiIj09PU4oYSkmJihVW2JdPWEsYj1WLm0oYSxiKSxhLl9zdHlsZUFzdD1iKX07ClcucHJvdG90eXBlLmZsdXNoQ3VzdG9tU3R5bGVzPWZ1bmN0aW9uKCl7WCh0aGlzKTtpZih0aGlzLmEpe3ZhciBhPXRoaXMuYS5wcm9jZXNzU3R5bGVzKCk7aWYodGhpcy5hLmVucXVldWVkKXtmb3IodmFyIGI9MDtiPGEubGVuZ3RoO2IrKyl7dmFyIGM9dGhpcy5hLmdldFN0eWxlRm9yQ3VzdG9tU3R5bGUoYVtiXSk7YyYmVi5mKGMpfXRoaXMuYS5lbnF1ZXVlZD0hMX19fTsKVy5wcm90b3R5cGUuc3R5bGVTdWJ0cmVlPWZ1bmN0aW9uKGEsYil7WCh0aGlzKTtpZihiKWZvcih2YXIgYyBpbiBiKW51bGw9PT1jP2Euc3R5bGUucmVtb3ZlUHJvcGVydHkoYyk6YS5zdHlsZS5zZXRQcm9wZXJ0eShjLGJbY10pO2lmKGEuc2hhZG93Um9vdClmb3IodGhpcy5zdHlsZUVsZW1lbnQoYSksYT1hLnNoYWRvd1Jvb3QuY2hpbGRyZW58fGEuc2hhZG93Um9vdC5jaGlsZE5vZGVzLGI9MDtiPGEubGVuZ3RoO2IrKyl0aGlzLnN0eWxlU3VidHJlZShhW2JdKTtlbHNlIGZvcihhPWEuY2hpbGRyZW58fGEuY2hpbGROb2RlcyxiPTA7YjxhLmxlbmd0aDtiKyspdGhpcy5zdHlsZVN1YnRyZWUoYVtiXSl9OwpXLnByb3RvdHlwZS5zdHlsZUVsZW1lbnQ9ZnVuY3Rpb24oYSl7WCh0aGlzKTt2YXIgYj1hLmxvY2FsTmFtZSxjO2I/LTE8Yi5pbmRleE9mKCItIik/Yz1iOmM9YS5nZXRBdHRyaWJ1dGUmJmEuZ2V0QXR0cmlidXRlKCJpcyIpfHwiIjpjPWEuaXM7Yj1VW2NdO2lmKCEoYiYmIiIhPT1OKGIpfHwhYnx8dGEoYikpKXtpZih0YShiKXx8Yi5fYXBwbHlTaGltVmFsaWRhdGluZ1ZlcnNpb24hPT1iLl9hcHBseVNoaW1OZXh0VmVyc2lvbil0aGlzLnByZXBhcmVUZW1wbGF0ZShiLGMpLHVhKGIpO2lmKGE9YS5zaGFkb3dSb290KWlmKGE9YS5xdWVyeVNlbGVjdG9yKCJzdHlsZSIpKWEuX19jc3NSdWxlcz1iLl9zdHlsZUFzdCxhLnRleHRDb250ZW50PUooYi5fc3R5bGVBc3QpfX07Vy5wcm90b3R5cGUuc3R5bGVEb2N1bWVudD1mdW5jdGlvbihhKXtYKHRoaXMpO3RoaXMuc3R5bGVTdWJ0cmVlKGRvY3VtZW50LmJvZHksYSl9OwppZighd2luZG93LlNoYWR5Q1NTfHwhd2luZG93LlNoYWR5Q1NTLlNjb3BpbmdTaGltKXt2YXIgWT1uZXcgVyx2YT13aW5kb3cuU2hhZHlDU1MmJndpbmRvdy5TaGFkeUNTUy5DdXN0b21TdHlsZUludGVyZmFjZTt3aW5kb3cuU2hhZHlDU1M9e3ByZXBhcmVUZW1wbGF0ZTpmdW5jdGlvbihhLGIpe1kuZmx1c2hDdXN0b21TdHlsZXMoKTtZLnByZXBhcmVUZW1wbGF0ZShhLGIpfSxwcmVwYXJlVGVtcGxhdGVTdHlsZXM6ZnVuY3Rpb24oYSxiLGMpe3dpbmRvdy5TaGFkeUNTUy5wcmVwYXJlVGVtcGxhdGUoYSxiLGMpfSxwcmVwYXJlVGVtcGxhdGVEb206ZnVuY3Rpb24oKXt9LHN0eWxlU3VidHJlZTpmdW5jdGlvbihhLGIpe1kuZmx1c2hDdXN0b21TdHlsZXMoKTtZLnN0eWxlU3VidHJlZShhLGIpfSxzdHlsZUVsZW1lbnQ6ZnVuY3Rpb24oYSl7WS5mbHVzaEN1c3RvbVN0eWxlcygpO1kuc3R5bGVFbGVtZW50KGEpfSxzdHlsZURvY3VtZW50OmZ1bmN0aW9uKGEpe1kuZmx1c2hDdXN0b21TdHlsZXMoKTsKWS5zdHlsZURvY3VtZW50KGEpfSxnZXRDb21wdXRlZFN0eWxlVmFsdWU6ZnVuY3Rpb24oYSxiKXtyZXR1cm4oYT13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShhKS5nZXRQcm9wZXJ0eVZhbHVlKGIpKT9hLnRyaW0oKToiIn0sZmx1c2hDdXN0b21TdHlsZXM6ZnVuY3Rpb24oKXtZLmZsdXNoQ3VzdG9tU3R5bGVzKCl9LG5hdGl2ZUNzczp1LG5hdGl2ZVNoYWRvdzpsLGNzc0J1aWxkOnYsZGlzYWJsZVJ1bnRpbWU6YWF9O3ZhJiYod2luZG93LlNoYWR5Q1NTLkN1c3RvbVN0eWxlSW50ZXJmYWNlPXZhKX13aW5kb3cuU2hhZHlDU1MuQXBwbHlTaGltPVY7fSkuY2FsbCh0aGlzKTsKCgo8L3NjcmlwdD48c2NyaXB0PgooZnVuY3Rpb24oKSB7CiAgJ3VzZSBzdHJpY3QnOwoKICBjb25zdCB1c2VyUG9seW1lciA9IHdpbmRvdy5Qb2x5bWVyOwoKICAvKioKICAgKiBAbmFtZXNwYWNlIFBvbHltZXIKICAgKiBAc3VtbWFyeSBQb2x5bWVyIGlzIGEgbGlnaHR3ZWlnaHQgbGlicmFyeSBidWlsdCBvbiB0b3Agb2YgdGhlIHdlYgogICAqICAgc3RhbmRhcmRzLWJhc2VkIFdlYiBDb21wb25lbnRzIEFQSSdzLCBhbmQgbWFrZXMgaXQgZWFzeSB0byBidWlsZCB5b3VyCiAgICogICBvd24gY3VzdG9tIEhUTUwgZWxlbWVudHMuCiAgICogQHBhcmFtIHshUG9seW1lckluaXR9IGluZm8gUHJvdG90eXBlIGZvciB0aGUgY3VzdG9tIGVsZW1lbnQuIEl0IG11c3QgY29udGFpbgogICAqICAgYW4gYGlzYCBwcm9wZXJ0eSB0byBzcGVjaWZ5IHRoZSBlbGVtZW50IG5hbWUuIE90aGVyIHByb3BlcnRpZXMgcG9wdWxhdGUKICAgKiAgIHRoZSBlbGVtZW50IHByb3RvdHlwZS4gVGhlIGBwcm9wZXJ0aWVzYCwgYG9ic2VydmVyc2AsIGBob3N0QXR0cmlidXRlc2AsCiAgICogICBhbmQgYGxpc3RlbmVyc2AgcHJvcGVydGllcyBhcmUgcHJvY2Vzc2VkIHRvIGNyZWF0ZSBlbGVtZW50IGZlYXR1cmVzLgogICAqIEByZXR1cm4geyFPYmplY3R9IFJldHVybnMgYSBjdXN0b20gZWxlbWVudCBjbGFzcyBmb3IgdGhlIGdpdmVuIHByb3ZpZGVkCiAgICogICBwcm90b3R5cGUgYGluZm9gIG9iamVjdC4gVGhlIG5hbWUgb2YgdGhlIGVsZW1lbnQgaWYgZ2l2ZW4gYnkgYGluZm8uaXNgLgogICAqLwogIHdpbmRvdy5Qb2x5bWVyID0gZnVuY3Rpb24oaW5mbykgewogICAgcmV0dXJuIHdpbmRvdy5Qb2x5bWVyLl9wb2x5bWVyRm4oaW5mbyk7CiAgfTsKCiAgLy8gc3VwcG9ydCB1c2VyIHNldHRpbmdzIG9uIHRoZSBQb2x5bWVyIG9iamVjdAogIGlmICh1c2VyUG9seW1lcikgewogICAgT2JqZWN0LmFzc2lnbihQb2x5bWVyLCB1c2VyUG9seW1lcik7CiAgfQoKICAvLyBUbyBiZSBwbHVnZ2VkIGJ5IGxlZ2FjeSBpbXBsZW1lbnRhdGlvbiBpZiBsb2FkZWQKICAvKiBlc2xpbnQtZGlzYWJsZSB2YWxpZC1qc2RvYyAqLwogIC8qKgogICAqIEBwYXJhbSB7IVBvbHltZXJJbml0fSBpbmZvIFByb3RvdHlwZSBmb3IgdGhlIGN1c3RvbSBlbGVtZW50LiBJdCBtdXN0IGNvbnRhaW4KICAgKiAgIGFuIGBpc2AgcHJvcGVydHkgdG8gc3BlY2lmeSB0aGUgZWxlbWVudCBuYW1lLiBPdGhlciBwcm9wZXJ0aWVzIHBvcHVsYXRlCiAgICogICB0aGUgZWxlbWVudCBwcm90b3R5cGUuIFRoZSBgcHJvcGVydGllc2AsIGBvYnNlcnZlcnNgLCBgaG9zdEF0dHJpYnV0ZXNgLAogICAqICAgYW5kIGBsaXN0ZW5lcnNgIHByb3BlcnRpZXMgYXJlIHByb2Nlc3NlZCB0byBjcmVhdGUgZWxlbWVudCBmZWF0dXJlcy4KICAgKiBAcmV0dXJuIHshT2JqZWN0fSBSZXR1cm5zIGEgY3VzdG9tIGVsZW1lbnQgY2xhc3MgZm9yIHRoZSBnaXZlbiBwcm92aWRlZAogICAqICAgcHJvdG90eXBlIGBpbmZvYCBvYmplY3QuIFRoZSBuYW1lIG9mIHRoZSBlbGVtZW50IGlmIGdpdmVuIGJ5IGBpbmZvLmlzYC4KICAgKi8KICB3aW5kb3cuUG9seW1lci5fcG9seW1lckZuID0gZnVuY3Rpb24oaW5mbykgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzCiAgICB0aHJvdyBuZXcgRXJyb3IoJ0xvYWQgcG9seW1lci5odG1sIHRvIHVzZSB0aGUgUG9seW1lcigpIGZ1bmN0aW9uLicpOwogIH07CiAgLyogZXNsaW50LWVuYWJsZSAqLwoKICB3aW5kb3cuUG9seW1lci52ZXJzaW9uID0gJzIuNy4wJzsKCiAgLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi8KICAvKgogIFdoZW4gdXNpbmcgQ2xvc3VyZSBDb21waWxlciwgSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eShwcm9wZXJ0eSwgb2JqZWN0KSBpcyByZXBsYWNlZCBieSB0aGUgbXVuZ2VkIG5hbWUgZm9yIG9iamVjdFtwcm9wZXJ0eV0KICBXZSBjYW5ub3QgYWxpYXMgdGhpcyBmdW5jdGlvbiwgc28gd2UgaGF2ZSB0byB1c2UgYSBzbWFsbCBzaGltIHRoYXQgaGFzIHRoZSBzYW1lIGJlaGF2aW9yIHdoZW4gbm90IGNvbXBpbGluZy4KICAqLwogIHdpbmRvdy5KU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5ID0gZnVuY3Rpb24ocHJvcCwgb2JqKSB7CiAgICByZXR1cm4gcHJvcDsKICB9OwogIC8qIGVzbGludC1lbmFibGUgKi8KCn0pKCk7Cjwvc2NyaXB0PjxzY3JpcHQ+CgogIChmdW5jdGlvbigpIHsKICAgICd1c2Ugc3RyaWN0JzsKCiAgICBsZXQgQ1NTX1VSTF9SWCA9IC8odXJsXCgpKFteKV0qKShcKSkvZzsKICAgIGxldCBBQlNfVVJMID0gLyheXC8pfCheIyl8KF5bXHctXGRdKjopLzsKICAgIGxldCB3b3JraW5nVVJMOwogICAgbGV0IHJlc29sdmVEb2M7CiAgICAvKioKICAgICAqIFJlc29sdmVzIHRoZSBnaXZlbiBVUkwgYWdhaW5zdCB0aGUgcHJvdmlkZWQgYGJhc2VVcmknLgogICAgICogCiAgICAgKiBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBwZXJmb3JtcyBubyByZXNvbHV0aW9uIGZvciBVUkxzIHRoYXQgc3RhcnQKICAgICAqIHdpdGggYC9gIChhYnNvbHV0ZSBVUkxzKSBvciBgI2AgKGhhc2ggaWRlbnRpZmllcnMpLiAgRm9yIGdlbmVyYWwgcHVycG9zZQogICAgICogVVJMIHJlc29sdXRpb24sIHVzZSBgd2luZG93LlVSTGAuCiAgICAgKgogICAgICogQG1lbWJlcm9mIFBvbHltZXIuUmVzb2x2ZVVybAogICAgICogQHBhcmFtIHtzdHJpbmd9IHVybCBJbnB1dCBVUkwgdG8gcmVzb2x2ZQogICAgICogQHBhcmFtIHs/c3RyaW5nPX0gYmFzZVVSSSBCYXNlIFVSSSB0byByZXNvbHZlIHRoZSBVUkwgYWdhaW5zdAogICAgICogQHJldHVybiB7c3RyaW5nfSByZXNvbHZlZCBVUkwKICAgICAqLwogICAgZnVuY3Rpb24gcmVzb2x2ZVVybCh1cmwsIGJhc2VVUkkpIHsKICAgICAgaWYgKHVybCAmJiBBQlNfVVJMLnRlc3QodXJsKSkgewogICAgICAgIHJldHVybiB1cmw7CiAgICAgIH0KICAgICAgLy8gTGF6eSBmZWF0dXJlIGRldGVjdGlvbi4KICAgICAgaWYgKHdvcmtpbmdVUkwgPT09IHVuZGVmaW5lZCkgewogICAgICAgIHdvcmtpbmdVUkwgPSBmYWxzZTsKICAgICAgICB0cnkgewogICAgICAgICAgY29uc3QgdSA9IG5ldyBVUkwoJ2InLCAnaHR0cDovL2EnKTsKICAgICAgICAgIHUucGF0aG5hbWUgPSAnYyUyMGQnOwogICAgICAgICAgd29ya2luZ1VSTCA9ICh1LmhyZWYgPT09ICdodHRwOi8vYS9jJTIwZCcpOwogICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgIC8vIHNpbGVudGx5IGZhaWwKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKCFiYXNlVVJJKSB7CiAgICAgICAgYmFzZVVSSSA9IGRvY3VtZW50LmJhc2VVUkkgfHwgd2luZG93LmxvY2F0aW9uLmhyZWY7CiAgICAgIH0KICAgICAgaWYgKHdvcmtpbmdVUkwpIHsKICAgICAgICByZXR1cm4gKG5ldyBVUkwodXJsLCBiYXNlVVJJKSkuaHJlZjsKICAgICAgfQogICAgICAvLyBGYWxsYmFjayB0byBjcmVhdGluZyBhbiBhbmNob3IgaW50byBhIGRpc2Nvbm5lY3RlZCBkb2N1bWVudC4KICAgICAgaWYgKCFyZXNvbHZlRG9jKSB7CiAgICAgICAgcmVzb2x2ZURvYyA9IGRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCgndGVtcCcpOwogICAgICAgIHJlc29sdmVEb2MuYmFzZSA9IHJlc29sdmVEb2MuY3JlYXRlRWxlbWVudCgnYmFzZScpOwogICAgICAgIHJlc29sdmVEb2MuaGVhZC5hcHBlbmRDaGlsZChyZXNvbHZlRG9jLmJhc2UpOwogICAgICAgIHJlc29sdmVEb2MuYW5jaG9yID0gcmVzb2x2ZURvYy5jcmVhdGVFbGVtZW50KCdhJyk7CiAgICAgICAgcmVzb2x2ZURvYy5ib2R5LmFwcGVuZENoaWxkKHJlc29sdmVEb2MuYW5jaG9yKTsKICAgICAgfQogICAgICByZXNvbHZlRG9jLmJhc2UuaHJlZiA9IGJhc2VVUkk7CiAgICAgIHJlc29sdmVEb2MuYW5jaG9yLmhyZWYgPSB1cmw7CiAgICAgIHJldHVybiByZXNvbHZlRG9jLmFuY2hvci5ocmVmIHx8IHVybDsKCiAgICB9CgogICAgLyoqCiAgICAgKiBSZXNvbHZlcyBhbnkgcmVsYXRpdmUgVVJMJ3MgaW4gdGhlIGdpdmVuIENTUyB0ZXh0IGFnYWluc3QgdGhlIHByb3ZpZGVkCiAgICAgKiBgb3duZXJEb2N1bWVudGAncyBgYmFzZVVSSWAuCiAgICAgKgogICAgICogQG1lbWJlcm9mIFBvbHltZXIuUmVzb2x2ZVVybAogICAgICogQHBhcmFtIHtzdHJpbmd9IGNzc1RleHQgQ1NTIHRleHQgdG8gcHJvY2VzcwogICAgICogQHBhcmFtIHtzdHJpbmd9IGJhc2VVUkkgQmFzZSBVUkkgdG8gcmVzb2x2ZSB0aGUgVVJMIGFnYWluc3QKICAgICAqIEByZXR1cm4ge3N0cmluZ30gUHJvY2Vzc2VkIENTUyB0ZXh0IHdpdGggcmVzb2x2ZWQgVVJMJ3MKICAgICAqLwogICAgZnVuY3Rpb24gcmVzb2x2ZUNzcyhjc3NUZXh0LCBiYXNlVVJJKSB7CiAgICAgIHJldHVybiBjc3NUZXh0LnJlcGxhY2UoQ1NTX1VSTF9SWCwgZnVuY3Rpb24obSwgcHJlLCB1cmwsIHBvc3QpIHsKICAgICAgICByZXR1cm4gcHJlICsgJ1wnJyArCiAgICAgICAgICByZXNvbHZlVXJsKHVybC5yZXBsYWNlKC9bIiddL2csICcnKSwgYmFzZVVSSSkgKwogICAgICAgICAgJ1wnJyArIHBvc3Q7CiAgICAgIH0pOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyBhIHBhdGggZnJvbSBhIGdpdmVuIGB1cmxgLiBUaGUgcGF0aCBpbmNsdWRlcyB0aGUgdHJhaWxpbmcKICAgICAqIGAvYCBmcm9tIHRoZSB1cmwuCiAgICAgKgogICAgICogQG1lbWJlcm9mIFBvbHltZXIuUmVzb2x2ZVVybAogICAgICogQHBhcmFtIHtzdHJpbmd9IHVybCBJbnB1dCBVUkwgdG8gdHJhbnNmb3JtCiAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IHJlc29sdmVkIHBhdGgKICAgICAqLwogICAgZnVuY3Rpb24gcGF0aEZyb21VcmwodXJsKSB7CiAgICAgIHJldHVybiB1cmwuc3Vic3RyaW5nKDAsIHVybC5sYXN0SW5kZXhPZignLycpICsgMSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBNb2R1bGUgd2l0aCB1dGlsaXRpZXMgZm9yIHJlc29sdmluZyByZWxhdGl2ZSBVUkwncy4KICAgICAqCiAgICAgKiBAbmFtZXNwYWNlCiAgICAgKiBAbWVtYmVyb2YgUG9seW1lcgogICAgICogQHN1bW1hcnkgTW9kdWxlIHdpdGggdXRpbGl0aWVzIGZvciByZXNvbHZpbmcgcmVsYXRpdmUgVVJMJ3MuCiAgICAgKi8KICAgIFBvbHltZXIuUmVzb2x2ZVVybCA9IHsKICAgICAgcmVzb2x2ZUNzczogcmVzb2x2ZUNzcywKICAgICAgcmVzb2x2ZVVybDogcmVzb2x2ZVVybCwKICAgICAgcGF0aEZyb21Vcmw6IHBhdGhGcm9tVXJsCiAgICB9OwoKICB9KSgpOwoKPC9zY3JpcHQ+PHNjcmlwdD4KLyoqIEBzdXBwcmVzcyB7ZGVwcmVjYXRlZH0gKi8KKGZ1bmN0aW9uKCkgewogICd1c2Ugc3RyaWN0JzsKCiAgLyoqCiAgICogU2V0cyB0aGUgZ2xvYmFsLCBsZWdhY3kgc2V0dGluZ3MuCiAgICoKICAgKiBAZGVwcmVjYXRlZAogICAqIEBuYW1lc3BhY2UKICAgKiBAbWVtYmVyb2YgUG9seW1lcgogICAqLwogIFBvbHltZXIuU2V0dGluZ3MgPSBQb2x5bWVyLlNldHRpbmdzIHx8IHt9OwoKICBQb2x5bWVyLlNldHRpbmdzLnVzZVNoYWRvdyA9ICEod2luZG93LlNoYWR5RE9NKTsKICBQb2x5bWVyLlNldHRpbmdzLnVzZU5hdGl2ZUNTU1Byb3BlcnRpZXMgPQogICAgQm9vbGVhbighd2luZG93LlNoYWR5Q1NTIHx8IHdpbmRvdy5TaGFkeUNTUy5uYXRpdmVDc3MpOwogIFBvbHltZXIuU2V0dGluZ3MudXNlTmF0aXZlQ3VzdG9tRWxlbWVudHMgPQogICAgISh3aW5kb3cuY3VzdG9tRWxlbWVudHMucG9seWZpbGxXcmFwRmx1c2hDYWxsYmFjayk7CgoKICAvKioKICAgKiBHbG9iYWxseSBzZXR0YWJsZSBwcm9wZXJ0eSB0aGF0IGlzIGF1dG9tYXRpY2FsbHkgYXNzaWduZWQgdG8KICAgKiBgUG9seW1lci5FbGVtZW50TWl4aW5gIGluc3RhbmNlcywgdXNlZnVsIGZvciBiaW5kaW5nIGluIHRlbXBsYXRlcyB0bwogICAqIG1ha2UgVVJMJ3MgcmVsYXRpdmUgdG8gYW4gYXBwbGljYXRpb24ncyByb290LiAgRGVmYXVsdHMgdG8gdGhlIG1haW4KICAgKiBkb2N1bWVudCBVUkwsIGJ1dCBjYW4gYmUgb3ZlcnJpZGRlbiBieSB1c2Vycy4gIEl0IG1heSBiZSB1c2VmdWwgdG8gc2V0CiAgICogYFBvbHltZXIucm9vdFBhdGhgIHRvIHByb3ZpZGUgYSBzdGFibGUgYXBwbGljYXRpb24gbW91bnQgcGF0aCB3aGVuCiAgICogdXNpbmcgY2xpZW50IHNpZGUgcm91dGluZy4KICAgKgogICAqIEBtZW1iZXJvZiBQb2x5bWVyCiAgICovCiAgUG9seW1lci5yb290UGF0aCA9IFBvbHltZXIucm9vdFBhdGggfHwKICAgIFBvbHltZXIuUmVzb2x2ZVVybC5wYXRoRnJvbVVybChkb2N1bWVudC5iYXNlVVJJIHx8IHdpbmRvdy5sb2NhdGlvbi5ocmVmKTsKCiAgLyoqCiAgICogU2V0cyB0aGUgZ2xvYmFsIHJvb3RQYXRoIHByb3BlcnR5IHVzZWQgYnkgYFBvbHltZXIuRWxlbWVudE1peGluYCBhbmQKICAgKiBhdmFpbGFibGUgdmlhIGBQb2x5bWVyLnJvb3RQYXRoYC4KICAgKgogICAqIEBtZW1iZXJvZiBQb2x5bWVyCiAgICogQHBhcmFtIHtzdHJpbmd9IHBhdGggVGhlIG5ldyByb290IHBhdGgKICAgKiBAcmV0dXJuIHt2b2lkfQogICAqLwogIFBvbHltZXIuc2V0Um9vdFBhdGggPSBmdW5jdGlvbihwYXRoKSB7CiAgICBQb2x5bWVyLnJvb3RQYXRoID0gcGF0aDsKICB9OwoKICAvKioKICAgKiBBIGdsb2JhbCBjYWxsYmFjayB1c2VkIHRvIHNhbml0aXplIGFueSB2YWx1ZSBiZWZvcmUgaW5zZXJ0aW5nIGl0IGludG8gdGhlIERPTS4gVGhlIGNhbGxiYWNrIHNpZ25hdHVyZSBpczoKICAgKgogICAqICAgICBQb2x5bWVyID0gewogICAqICAgICAgIHNhbml0aXplRE9NVmFsdWU6IGZ1bmN0aW9uKHZhbHVlLCBuYW1lLCB0eXBlLCBub2RlKSB7IC4uLiB9CiAgICogICAgIH0KICAgKgogICAqIFdoZXJlOgogICAqCiAgICogYHZhbHVlYCBpcyB0aGUgdmFsdWUgdG8gc2FuaXRpemUuCiAgICogYG5hbWVgIGlzIHRoZSBuYW1lIG9mIGFuIGF0dHJpYnV0ZSBvciBwcm9wZXJ0eSAoZm9yIGV4YW1wbGUsIGhyZWYpLgogICAqIGB0eXBlYCBpbmRpY2F0ZXMgd2hlcmUgdGhlIHZhbHVlIGlzIGJlaW5nIGluc2VydGVkOiBvbmUgb2YgcHJvcGVydHksIGF0dHJpYnV0ZSwgb3IgdGV4dC4KICAgKiBgbm9kZWAgaXMgdGhlIG5vZGUgd2hlcmUgdGhlIHZhbHVlIGlzIGJlaW5nIGluc2VydGVkLgogICAqCiAgICogQHR5cGUgeyhmdW5jdGlvbigqLHN0cmluZyxzdHJpbmcsTm9kZSk6Kil8dW5kZWZpbmVkfQogICAqIEBtZW1iZXJvZiBQb2x5bWVyCiAgICovCiAgUG9seW1lci5zYW5pdGl6ZURPTVZhbHVlID0gUG9seW1lci5zYW5pdGl6ZURPTVZhbHVlIHx8IG51bGw7CgogIC8qKgogICAqIFNldHMgdGhlIGdsb2JhbCBzYW5pdGl6ZURPTVZhbHVlIGF2YWlsYWJsZSB2aWEgYFBvbHltZXIuc2FuaXRpemVET01WYWx1ZWAuCiAgICoKICAgKiBAbWVtYmVyb2YgUG9seW1lcgogICAqIEBwYXJhbSB7KGZ1bmN0aW9uKCosc3RyaW5nLHN0cmluZyxOb2RlKToqKXx1bmRlZmluZWR9IG5ld1Nhbml0aXplRE9NVmFsdWUgdGhlIGdsb2JhbCBzYW5pdGl6ZURPTVZhbHVlIGNhbGxiYWNrCiAgICogQHJldHVybiB7dm9pZH0KICAgKi8KICBQb2x5bWVyLnNldFNhbml0aXplRE9NVmFsdWUgPSBmdW5jdGlvbihuZXdTYW5pdGl6ZURPTVZhbHVlKSB7CiAgICBQb2x5bWVyLnNhbml0aXplRE9NVmFsdWUgPSBuZXdTYW5pdGl6ZURPTVZhbHVlOwogIH07CgogIC8qKgogICAqIEdsb2JhbGx5IHNldHRhYmxlIHByb3BlcnR5IHRvIG1ha2UgUG9seW1lciBHZXN0dXJlcyB1c2UgcGFzc2l2ZSBUb3VjaEV2ZW50IGxpc3RlbmVycyB3aGVuIHJlY29nbml6aW5nIGdlc3R1cmVzLgogICAqIFdoZW4gc2V0IHRvIGB0cnVlYCwgZ2VzdHVyZXMgbWFkZSBmcm9tIHRvdWNoIHdpbGwgbm90IGJlIGFibGUgdG8gcHJldmVudCBzY3JvbGxpbmcsIGFsbG93aW5nIGZvciBzbW9vdGhlcgogICAqIHNjcm9sbGluZyBwZXJmb3JtYW5jZS4KICAgKiBEZWZhdWx0cyB0byBgZmFsc2VgIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4KICAgKgogICAqIEBtZW1iZXJvZiBQb2x5bWVyCiAgICovCiAgUG9seW1lci5wYXNzaXZlVG91Y2hHZXN0dXJlcyA9IFBvbHltZXIucGFzc2l2ZVRvdWNoR2VzdHVyZXMgfHwgZmFsc2U7CgogIC8qKgogICAqIFNldHMgYHBhc3NpdmVUb3VjaEdlc3R1cmVzYCBnbG9iYWxseSBmb3IgYWxsIGVsZW1lbnRzIHVzaW5nIFBvbHltZXIgR2VzdHVyZXMuCiAgICoKICAgKiBAbWVtYmVyb2YgUG9seW1lcgogICAqIEBwYXJhbSB7Ym9vbGVhbn0gdXNlUGFzc2l2ZSBlbmFibGUgb3IgZGlzYWJsZSBwYXNzaXZlIHRvdWNoIGdlc3R1cmVzIGdsb2JhbGx5CiAgICogQHJldHVybiB7dm9pZH0KICAgKi8KICBQb2x5bWVyLnNldFBhc3NpdmVUb3VjaEdlc3R1cmVzID0gZnVuY3Rpb24odXNlUGFzc2l2ZSkgewogICAgUG9seW1lci5wYXNzaXZlVG91Y2hHZXN0dXJlcyA9IHVzZVBhc3NpdmU7CiAgfTsKCiAgUG9seW1lci5sZWdhY3lPcHRpbWl6YXRpb25zID0gUG9seW1lci5sZWdhY3lPcHRpbWl6YXRpb25zIHx8CiAgICAgIHdpbmRvdy5Qb2x5bWVyU2V0dGluZ3MgJiYgd2luZG93LlBvbHltZXJTZXR0aW5ncy5sZWdhY3lPcHRpbWl6YXRpb25zIHx8IGZhbHNlOwoKICAvKioKICAgKiBTZXRzIGBsZWdhY3lPcHRpbWl6YXRpb25zYCBnbG9iYWxseSBmb3IgYWxsIGVsZW1lbnRzLiBFbmFibGVzCiAgICogb3B0aW1pemF0aW9ucyB3aGVuIG9ubHkgbGVnYWN5IFBvbHltZXIoKSBzdHlsZSBlbGVtZW50cyBhcmUgdXNlZC4KICAgKgogICAqIEBtZW1iZXJvZiBQb2x5bWVyCiAgICogQHBhcmFtIHtib29sZWFufSB1c2VMZWdhY3lPcHRpbWl6YXRpb25zIGVuYWJsZSBvciBkaXNhYmxlIGxlZ2FjeSBvcHRpbWl6YXRpb25zIGdsb2JhbGx5LgogICAqIEByZXR1cm4ge3ZvaWR9CiAgICovCiAgUG9seW1lci5zZXRMZWdhY3lPcHRpbWl6YXRpb25zID0gZnVuY3Rpb24odXNlTGVnYWN5T3B0aW1pemF0aW9ucykgewogICAgUG9seW1lci5sZWdhY3lPcHRpbWl6YXRpb25zID0gdXNlTGVnYWN5T3B0aW1pemF0aW9uczsKICB9Owp9KSgpOwo8L3NjcmlwdD48c2NyaXB0PgoKKGZ1bmN0aW9uKCkgewoKICAndXNlIHN0cmljdCc7CgogIC8vIHVuaXF1ZSBnbG9iYWwgaWQgZm9yIGRlZHVwaW5nIG1peGlucy4KICBsZXQgZGVkdXBlSWQgPSAwOwoKICAvKioKICAgKiBAY29uc3RydWN0b3IKICAgKiBAZXh0ZW5kcyB7RnVuY3Rpb259CiAgICogQHByaXZhdGUKICAgKi8KICBmdW5jdGlvbiBNaXhpbkZ1bmN0aW9uKCl7fQogIC8qKiBAdHlwZSB7KFdlYWtNYXAgfCB1bmRlZmluZWQpfSAqLwogIE1peGluRnVuY3Rpb24ucHJvdG90eXBlLl9fbWl4aW5BcHBsaWNhdGlvbnM7CiAgLyoqIEB0eXBlIHsoT2JqZWN0IHwgdW5kZWZpbmVkKX0gKi8KICBNaXhpbkZ1bmN0aW9uLnByb3RvdHlwZS5fX21peGluU2V0OwoKICAvKiBlc2xpbnQtZGlzYWJsZSB2YWxpZC1qc2RvYyAqLwogIC8qKgogICAqIFdyYXBzIGFuIEVTNiBjbGFzcyBleHByZXNzaW9uIG1peGluIHN1Y2ggdGhhdCB0aGUgbWl4aW4gaXMgb25seSBhcHBsaWVkCiAgICogaWYgaXQgaGFzIG5vdCBhbHJlYWR5IGJlZW4gYXBwbGllZCBpdHMgYmFzZSBhcmd1bWVudC4gQWxzbyBtZW1vaXplcyBtaXhpbgogICAqIGFwcGxpY2F0aW9ucy4KICAgKgogICAqIEBtZW1iZXJvZiBQb2x5bWVyCiAgICogQHRlbXBsYXRlIFQKICAgKiBAcGFyYW0ge1R9IG1peGluIEVTNiBjbGFzcyBleHByZXNzaW9uIG1peGluIHRvIHdyYXAKICAgKiBAcmV0dXJuIHtUfQogICAqIEBzdXBwcmVzcyB7aW52YWxpZENhc3RzfQogICAqLwogIFBvbHltZXIuZGVkdXBpbmdNaXhpbiA9IGZ1bmN0aW9uKG1peGluKSB7CiAgICBsZXQgbWl4aW5BcHBsaWNhdGlvbnMgPSAvKiogQHR5cGUgeyFNaXhpbkZ1bmN0aW9ufSAqLyhtaXhpbikuX19taXhpbkFwcGxpY2F0aW9uczsKICAgIGlmICghbWl4aW5BcHBsaWNhdGlvbnMpIHsKICAgICAgbWl4aW5BcHBsaWNhdGlvbnMgPSBuZXcgV2Vha01hcCgpOwogICAgICAvKiogQHR5cGUgeyFNaXhpbkZ1bmN0aW9ufSAqLyhtaXhpbikuX19taXhpbkFwcGxpY2F0aW9ucyA9IG1peGluQXBwbGljYXRpb25zOwogICAgfQogICAgLy8gbWFpbnRhaW4gYSB1bmlxdWUgaWQgZm9yIGVhY2ggbWl4aW4KICAgIGxldCBtaXhpbkRlZHVwZUlkID0gZGVkdXBlSWQrKzsKICAgIGZ1bmN0aW9uIGRlZHVwaW5nTWl4aW4oYmFzZSkgewogICAgICBsZXQgYmFzZVNldCA9IC8qKiBAdHlwZSB7IU1peGluRnVuY3Rpb259ICovKGJhc2UpLl9fbWl4aW5TZXQ7CiAgICAgIGlmIChiYXNlU2V0ICYmIGJhc2VTZXRbbWl4aW5EZWR1cGVJZF0pIHsKICAgICAgICByZXR1cm4gYmFzZTsKICAgICAgfQogICAgICBsZXQgbWFwID0gbWl4aW5BcHBsaWNhdGlvbnM7CiAgICAgIGxldCBleHRlbmRlZCA9IG1hcC5nZXQoYmFzZSk7CiAgICAgIGlmICghZXh0ZW5kZWQpIHsKICAgICAgICBleHRlbmRlZCA9IC8qKiBAdHlwZSB7IUZ1bmN0aW9ufSAqLyhtaXhpbikoYmFzZSk7CiAgICAgICAgbWFwLnNldChiYXNlLCBleHRlbmRlZCk7CiAgICAgIH0KICAgICAgLy8gY29weSBpbmhlcml0ZWQgbWl4aW4gc2V0IGZyb20gdGhlIGV4dGVuZGVkIGNsYXNzLCBvciB0aGUgYmFzZSBjbGFzcwogICAgICAvLyBOT1RFOiB3ZSBhdm9pZCB1c2Ugb2YgU2V0IGhlcmUgYmVjYXVzZSBzb21lIGJyb3dzZXIgKElFMTEpCiAgICAgIC8vIGNhbm5vdCBleHRlbmQgYSBiYXNlIFNldCB2aWEgdGhlIGNvbnN0cnVjdG9yLgogICAgICBsZXQgbWl4aW5TZXQgPSBPYmplY3QuY3JlYXRlKC8qKiBAdHlwZSB7IU1peGluRnVuY3Rpb259ICovKGV4dGVuZGVkKS5fX21peGluU2V0IHx8IGJhc2VTZXQgfHwgbnVsbCk7CiAgICAgIG1peGluU2V0W21peGluRGVkdXBlSWRdID0gdHJ1ZTsKICAgICAgLyoqIEB0eXBlIHshTWl4aW5GdW5jdGlvbn0gKi8oZXh0ZW5kZWQpLl9fbWl4aW5TZXQgPSBtaXhpblNldDsKICAgICAgcmV0dXJuIGV4dGVuZGVkOwogICAgfQoKICAgIHJldHVybiAvKiogQHR5cGUge1R9ICovIChkZWR1cGluZ01peGluKTsKICB9OwogIC8qIGVzbGludC1lbmFibGUgdmFsaWQtanNkb2MgKi8KCn0pKCk7Cgo8L3NjcmlwdD48c2NyaXB0PgooZnVuY3Rpb24oKSB7CiAgJ3VzZSBzdHJpY3QnOwoKICBjb25zdCBNT0RVTEVfU1RZTEVfTElOS19TRUxFQ1RPUiA9ICdsaW5rW3JlbD1pbXBvcnRdW3R5cGV+PWNzc10nOwogIGNvbnN0IElOQ0xVREVfQVRUUiA9ICdpbmNsdWRlJzsKICBjb25zdCBTSEFEWV9VTlNDT1BFRF9BVFRSID0gJ3NoYWR5LXVuc2NvcGVkJzsKCiAgZnVuY3Rpb24gaW1wb3J0TW9kdWxlKG1vZHVsZUlkKSB7CiAgICBjb25zdCAvKiogUG9seW1lci5Eb21Nb2R1bGUgKi8gUG9seW1lckRvbU1vZHVsZSA9IGN1c3RvbUVsZW1lbnRzLmdldCgnZG9tLW1vZHVsZScpOwogICAgaWYgKCFQb2x5bWVyRG9tTW9kdWxlKSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgcmV0dXJuIFBvbHltZXJEb21Nb2R1bGUuaW1wb3J0KG1vZHVsZUlkKTsKICB9CgogIGZ1bmN0aW9uIHN0eWxlRm9ySW1wb3J0KGltcG9ydERvYykgewogICAgLy8gTk9URTogcG9seWZpbGwgYWZmb3JkYW5jZS4KICAgIC8vIHVuZGVyIHRoZSBIVE1MSW1wb3J0cyBwb2x5ZmlsbCwgdGhlcmUgd2lsbCBiZSBubyAnYm9keScsCiAgICAvLyBidXQgdGhlIGltcG9ydCBwc2V1ZG8tZG9jIGNhbiBiZSB1c2VkIGRpcmVjdGx5LgogICAgbGV0IGNvbnRhaW5lciA9IGltcG9ydERvYy5ib2R5ID8gaW1wb3J0RG9jLmJvZHkgOiBpbXBvcnREb2M7CiAgICBjb25zdCBpbXBvcnRDc3MgPSBQb2x5bWVyLlJlc29sdmVVcmwucmVzb2x2ZUNzcyhjb250YWluZXIudGV4dENvbnRlbnQsCiAgICAgIGltcG9ydERvYy5iYXNlVVJJKTsKICAgIGNvbnN0IHN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTsKICAgIHN0eWxlLnRleHRDb250ZW50ID0gaW1wb3J0Q3NzOwogICAgcmV0dXJuIHN0eWxlOwogIH0KCiAgLyoqIEB0eXBlZGVmIHt7YXNzZXRwYXRoOiBzdHJpbmd9fSAqLwogIGxldCB0ZW1wbGF0ZVdpdGhBc3NldFBhdGg7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnMKCiAgLyoqCiAgICogTW9kdWxlIHdpdGggdXRpbGl0aWVzIGZvciBjb2xsZWN0aW9uIENTUyB0ZXh0IGZyb20gYDx0ZW1wbGF0ZXM+YCwgZXh0ZXJuYWwKICAgKiBzdHlsZXNoZWV0cywgYW5kIGBkb20tbW9kdWxlYHMuCiAgICoKICAgKiBAbmFtZXNwYWNlCiAgICogQG1lbWJlcm9mIFBvbHltZXIKICAgKiBAc3VtbWFyeSBNb2R1bGUgd2l0aCB1dGlsaXRpZXMgZm9yIGNvbGxlY3Rpb24gQ1NTIHRleHQgZnJvbSB2YXJpb3VzIHNvdXJjZXMuCiAgICovCiAgY29uc3QgU3R5bGVHYXRoZXIgPSB7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGEgbGlzdCBvZiA8c3R5bGU+IGVsZW1lbnRzIGluIGEgc3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2YgYGRvbS1tb2R1bGVgcy4KICAgICAqCiAgICAgKiBAbWVtYmVyb2YgUG9seW1lci5TdHlsZUdhdGhlcgogICAgICogQHBhcmFtIHtzdHJpbmd9IG1vZHVsZUlkcyBMaXN0IG9mIGRvbS1tb2R1bGUgaWQncyB3aXRoaW4gd2hpY2ggdG8KICAgICAqIHNlYXJjaCBmb3IgY3NzLgogICAgICogQHJldHVybiB7IUFycmF5PCFIVE1MU3R5bGVFbGVtZW50Pn0gQXJyYXkgb2YgY29udGFpbmVkIDxzdHlsZT4gZWxlbWVudHMKICAgICAqIEB0aGlzIHtTdHlsZUdhdGhlcn0KICAgICAqLwogICAgIHN0eWxlc0Zyb21Nb2R1bGVzKG1vZHVsZUlkcykgewogICAgICBjb25zdCBtb2R1bGVzID0gbW9kdWxlSWRzLnRyaW0oKS5zcGxpdCgvXHMrLyk7CiAgICAgIGNvbnN0IHN0eWxlcyA9IFtdOwogICAgICBmb3IgKGxldCBpPTA7IGkgPCBtb2R1bGVzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgc3R5bGVzLnB1c2goLi4udGhpcy5zdHlsZXNGcm9tTW9kdWxlKG1vZHVsZXNbaV0pKTsKICAgICAgfQogICAgICByZXR1cm4gc3R5bGVzOwogICAgfSwKCiAgICAvKioKICAgICAqIFJldHVybnMgYSBsaXN0IG9mIDxzdHlsZT4gZWxlbWVudHMgaW4gYSBnaXZlbiBgZG9tLW1vZHVsZWAuCiAgICAgKiBTdHlsZXMgaW4gYSBgZG9tLW1vZHVsZWAgY2FuIGNvbWUgZWl0aGVyIGZyb20gYDxzdHlsZT5gcyB3aXRoaW4gdGhlCiAgICAgKiBmaXJzdCBgPHRlbXBsYXRlPmAsIG9yIGVsc2UgZnJvbSBvbmUgb3IgbW9yZQogICAgICogYDxsaW5rIHJlbD0iaW1wb3J0IiB0eXBlPSJjc3MiPmAgbGlua3Mgb3V0c2lkZSB0aGUgdGVtcGxhdGUuCiAgICAgKgogICAgICogQG1lbWJlcm9mIFBvbHltZXIuU3R5bGVHYXRoZXIKICAgICAqIEBwYXJhbSB7c3RyaW5nfSBtb2R1bGVJZCBkb20tbW9kdWxlIGlkIHRvIGdhdGhlciBzdHlsZXMgZnJvbQogICAgICogQHJldHVybiB7IUFycmF5PCFIVE1MU3R5bGVFbGVtZW50Pn0gQXJyYXkgb2YgY29udGFpbmVkIHN0eWxlcy4KICAgICAqIEB0aGlzIHtTdHlsZUdhdGhlcn0KICAgICAqLwogICAgc3R5bGVzRnJvbU1vZHVsZShtb2R1bGVJZCkgewogICAgICBjb25zdCBtID0gaW1wb3J0TW9kdWxlKG1vZHVsZUlkKTsKCiAgICAgIGlmICghbSkgewogICAgICAgIGNvbnNvbGUud2FybignQ291bGQgbm90IGZpbmQgc3R5bGUgZGF0YSBpbiBtb2R1bGUgbmFtZWQnLCBtb2R1bGVJZCk7CiAgICAgICAgcmV0dXJuIFtdOwogICAgICB9CgogICAgICBpZiAobS5fc3R5bGVzID09PSB1bmRlZmluZWQpIHsKICAgICAgICBjb25zdCBzdHlsZXMgPSBbXTsKICAgICAgICAvLyBtb2R1bGUgaW1wb3J0czogPGxpbmsgcmVsPSJpbXBvcnQiIHR5cGU9ImNzcyI+CiAgICAgICAgc3R5bGVzLnB1c2goLi4udGhpcy5fc3R5bGVzRnJvbU1vZHVsZUltcG9ydHMobSkpOwogICAgICAgIC8vIGluY2x1ZGUgY3NzIGZyb20gdGhlIGZpcnN0IHRlbXBsYXRlIGluIHRoZSBtb2R1bGUKICAgICAgICBjb25zdCB0ZW1wbGF0ZSA9IG0ucXVlcnlTZWxlY3RvcigndGVtcGxhdGUnKTsKICAgICAgICBpZiAodGVtcGxhdGUpIHsKICAgICAgICAgIHN0eWxlcy5wdXNoKC4uLnRoaXMuc3R5bGVzRnJvbVRlbXBsYXRlKHRlbXBsYXRlLAogICAgICAgICAgICAvKiogQHR5cGUge3RlbXBsYXRlV2l0aEFzc2V0UGF0aH0gKi8obSkuYXNzZXRwYXRoKSk7CiAgICAgICAgfQoKICAgICAgICBtLl9zdHlsZXMgPSBzdHlsZXM7CiAgICAgIH0KCiAgICAgIHJldHVybiBtLl9zdHlsZXM7CiAgICB9LAoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgYDxzdHlsZT5gIGVsZW1lbnRzIHdpdGhpbiBhIGdpdmVuIHRlbXBsYXRlLgogICAgICoKICAgICAqIEBtZW1iZXJvZiBQb2x5bWVyLlN0eWxlR2F0aGVyCiAgICAgKiBAcGFyYW0geyFIVE1MVGVtcGxhdGVFbGVtZW50fSB0ZW1wbGF0ZSBUZW1wbGF0ZSB0byBnYXRoZXIgc3R5bGVzIGZyb20KICAgICAqIEBwYXJhbSB7c3RyaW5nfSBiYXNlVVJJIGJhc2VVUkkgZm9yIHN0eWxlIGNvbnRlbnQKICAgICAqIEByZXR1cm4geyFBcnJheTwhSFRNTFN0eWxlRWxlbWVudD59IEFycmF5IG9mIHN0eWxlcwogICAgICogQHRoaXMge1N0eWxlR2F0aGVyfQogICAgICovCiAgICBzdHlsZXNGcm9tVGVtcGxhdGUodGVtcGxhdGUsIGJhc2VVUkkpIHsKICAgICAgaWYgKCF0ZW1wbGF0ZS5fc3R5bGVzKSB7CiAgICAgICAgY29uc3Qgc3R5bGVzID0gW107CiAgICAgICAgLy8gaWYgZWxlbWVudCBpcyBhIHRlbXBsYXRlLCBnZXQgY29udGVudCBmcm9tIGl0cyAuY29udGVudAogICAgICAgIGNvbnN0IGUkID0gdGVtcGxhdGUuY29udGVudC5xdWVyeVNlbGVjdG9yQWxsKCdzdHlsZScpOwogICAgICAgIGZvciAobGV0IGk9MDsgaSA8IGUkLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICBsZXQgZSA9IGUkW2ldOwogICAgICAgICAgLy8gc3VwcG9ydCBzdHlsZSBzaGFyaW5nIGJ5IGFsbG93aW5nIHN0eWxlcyB0byAiaW5jbHVkZSIKICAgICAgICAgIC8vIG90aGVyIGRvbS1tb2R1bGVzIHRoYXQgY29udGFpbiBzdHlsaW5nCiAgICAgICAgICBsZXQgaW5jbHVkZSA9IGUuZ2V0QXR0cmlidXRlKElOQ0xVREVfQVRUUik7CiAgICAgICAgICBpZiAoaW5jbHVkZSkgewogICAgICAgICAgICBzdHlsZXMucHVzaCguLi50aGlzLnN0eWxlc0Zyb21Nb2R1bGVzKGluY2x1ZGUpLmZpbHRlcihmdW5jdGlvbihpdGVtLCBpbmRleCwgc2VsZikgewogICAgICAgICAgICAgIHJldHVybiBzZWxmLmluZGV4T2YoaXRlbSkgPT09IGluZGV4OwogICAgICAgICAgICB9KSk7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoYmFzZVVSSSkgewogICAgICAgICAgICBlLnRleHRDb250ZW50ID0gUG9seW1lci5SZXNvbHZlVXJsLnJlc29sdmVDc3MoZS50ZXh0Q29udGVudCwgYmFzZVVSSSk7CiAgICAgICAgICB9CiAgICAgICAgICBzdHlsZXMucHVzaChlKTsKICAgICAgICB9CiAgICAgICAgdGVtcGxhdGUuX3N0eWxlcyA9IHN0eWxlczsKICAgICAgfQogICAgICByZXR1cm4gdGVtcGxhdGUuX3N0eWxlczsKICAgIH0sCgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGEgbGlzdCBvZiA8c3R5bGU+IGVsZW1lbnRzICBmcm9tIHN0eWxlc2hlZXRzIGxvYWRlZCB2aWEgYDxsaW5rIHJlbD0iaW1wb3J0IiB0eXBlPSJjc3MiPmAgbGlua3Mgd2l0aGluIHRoZSBzcGVjaWZpZWQgYGRvbS1tb2R1bGVgLgogICAgICoKICAgICAqIEBtZW1iZXJvZiBQb2x5bWVyLlN0eWxlR2F0aGVyCiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbW9kdWxlSWQgSWQgb2YgYGRvbS1tb2R1bGVgIHRvIGdhdGhlciBDU1MgZnJvbQogICAgICogQHJldHVybiB7IUFycmF5PCFIVE1MU3R5bGVFbGVtZW50Pn0gQXJyYXkgb2YgY29udGFpbmVkIHN0eWxlcy4KICAgICAqIEB0aGlzIHtTdHlsZUdhdGhlcn0KICAgICAqLwogICAgIHN0eWxlc0Zyb21Nb2R1bGVJbXBvcnRzKG1vZHVsZUlkKSB7CiAgICAgIGxldCBtID0gaW1wb3J0TW9kdWxlKG1vZHVsZUlkKTsKICAgICAgcmV0dXJuIG0gPyB0aGlzLl9zdHlsZXNGcm9tTW9kdWxlSW1wb3J0cyhtKSA6IFtdOwogICAgfSwKCiAgICAvKioKICAgICAqIEBtZW1iZXJvZiBQb2x5bWVyLlN0eWxlR2F0aGVyCiAgICAgKiBAdGhpcyB7U3R5bGVHYXRoZXJ9CiAgICAgKiBAcGFyYW0geyFIVE1MRWxlbWVudH0gbW9kdWxlIGRvbS1tb2R1bGUgZWxlbWVudCB0aGF0IGNvdWxkIGNvbnRhaW4gYDxsaW5rIHJlbD0iaW1wb3J0IiB0eXBlPSJjc3MiPmAgc3R5bGVzCiAgICAgKiBAcmV0dXJuIHshQXJyYXk8IUhUTUxTdHlsZUVsZW1lbnQ+fSBBcnJheSBvZiBjb250YWluZWQgc3R5bGVzCiAgICAgKi8KICAgIF9zdHlsZXNGcm9tTW9kdWxlSW1wb3J0cyhtb2R1bGUpIHsKICAgICAgY29uc3Qgc3R5bGVzID0gW107CiAgICAgIGNvbnN0IHAkID0gbW9kdWxlLnF1ZXJ5U2VsZWN0b3JBbGwoTU9EVUxFX1NUWUxFX0xJTktfU0VMRUNUT1IpOwogICAgICBmb3IgKGxldCBpPTA7IGkgPCBwJC5sZW5ndGg7IGkrKykgewogICAgICAgIGxldCBwID0gcCRbaV07CiAgICAgICAgaWYgKHAuaW1wb3J0KSB7CiAgICAgICAgICBjb25zdCBpbXBvcnREb2MgPSBwLmltcG9ydDsKICAgICAgICAgIGNvbnN0IHVuc2NvcGVkID0gcC5oYXNBdHRyaWJ1dGUoU0hBRFlfVU5TQ09QRURfQVRUUik7CiAgICAgICAgICBpZiAodW5zY29wZWQgJiYgIWltcG9ydERvYy5fdW5zY29wZWRTdHlsZSkgewogICAgICAgICAgICBjb25zdCBzdHlsZSA9IHN0eWxlRm9ySW1wb3J0KGltcG9ydERvYyk7CiAgICAgICAgICAgIHN0eWxlLnNldEF0dHJpYnV0ZShTSEFEWV9VTlNDT1BFRF9BVFRSLCAnJyk7CiAgICAgICAgICAgIGltcG9ydERvYy5fdW5zY29wZWRTdHlsZSA9IHN0eWxlOwogICAgICAgICAgfSBlbHNlIGlmICghaW1wb3J0RG9jLl9zdHlsZSkgewogICAgICAgICAgICBpbXBvcnREb2MuX3N0eWxlID0gc3R5bGVGb3JJbXBvcnQoaW1wb3J0RG9jKTsKICAgICAgICAgIH0KICAgICAgICAgIHN0eWxlcy5wdXNoKHVuc2NvcGVkID8gaW1wb3J0RG9jLl91bnNjb3BlZFN0eWxlIDogaW1wb3J0RG9jLl9zdHlsZSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBzdHlsZXM7CiAgICB9LAoKICAgIC8qKgogICAgICoKICAgICAqIFJldHVybnMgQ1NTIHRleHQgb2Ygc3R5bGVzIGluIGEgc3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2YgYGRvbS1tb2R1bGVgcy4KICAgICAqIE5vdGU6IFRoaXMgbWV0aG9kIGlzIGRlcHJlY2F0ZWQsIHVzZSBgc3R5bGVzRnJvbU1vZHVsZXNgIGluc3RlYWQuCiAgICAgKgogICAgICogQGRlcHJlY2F0ZWQKICAgICAqIEBtZW1iZXJvZiBQb2x5bWVyLlN0eWxlR2F0aGVyCiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbW9kdWxlSWRzIExpc3Qgb2YgZG9tLW1vZHVsZSBpZCdzIHdpdGhpbiB3aGljaCB0bwogICAgICogc2VhcmNoIGZvciBjc3MuCiAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IENvbmNhdGVuYXRlZCBDU1MgY29udGVudCBmcm9tIHNwZWNpZmllZCBgZG9tLW1vZHVsZWBzCiAgICAgKiBAdGhpcyB7U3R5bGVHYXRoZXJ9CiAgICAgKi8KICAgICBjc3NGcm9tTW9kdWxlcyhtb2R1bGVJZHMpIHsKICAgICAgbGV0IG1vZHVsZXMgPSBtb2R1bGVJZHMudHJpbSgpLnNwbGl0KC9ccysvKTsKICAgICAgbGV0IGNzc1RleHQgPSAnJzsKICAgICAgZm9yIChsZXQgaT0wOyBpIDwgbW9kdWxlcy5sZW5ndGg7IGkrKykgewogICAgICAgIGNzc1RleHQgKz0gdGhpcy5jc3NGcm9tTW9kdWxlKG1vZHVsZXNbaV0pOwogICAgICB9CiAgICAgIHJldHVybiBjc3NUZXh0OwogICAgfSwKCiAgICAvKioKICAgICAqIFJldHVybnMgQ1NTIHRleHQgb2Ygc3R5bGVzIGluIGEgZ2l2ZW4gYGRvbS1tb2R1bGVgLiAgQ1NTIGluIGEgYGRvbS1tb2R1bGVgCiAgICAgKiBjYW4gY29tZSBlaXRoZXIgZnJvbSBgPHN0eWxlPmBzIHdpdGhpbiB0aGUgZmlyc3QgYDx0ZW1wbGF0ZT5gLCBvciBlbHNlCiAgICAgKiBmcm9tIG9uZSBvciBtb3JlIGA8bGluayByZWw9ImltcG9ydCIgdHlwZT0iY3NzIj5gIGxpbmtzIG91dHNpZGUgdGhlCiAgICAgKiB0ZW1wbGF0ZS4KICAgICAqCiAgICAgKiBBbnkgYDxzdHlsZXM+YCBwcm9jZXNzZWQgYXJlIHJlbW92ZWQgZnJvbSB0aGVpciBvcmlnaW5hbCBsb2NhdGlvbi4KICAgICAqIE5vdGU6IFRoaXMgbWV0aG9kIGlzIGRlcHJlY2F0ZWQsIHVzZSBgc3R5bGVGcm9tTW9kdWxlYCBpbnN0ZWFkLgogICAgICoKICAgICAqIEBkZXByZWNhdGVkCiAgICAgKiBAbWVtYmVyb2YgUG9seW1lci5TdHlsZUdhdGhlcgogICAgICogQHBhcmFtIHtzdHJpbmd9IG1vZHVsZUlkIGRvbS1tb2R1bGUgaWQgdG8gZ2F0aGVyIHN0eWxlcyBmcm9tCiAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IENvbmNhdGVuYXRlZCBDU1MgY29udGVudCBmcm9tIHNwZWNpZmllZCBgZG9tLW1vZHVsZWAKICAgICAqIEB0aGlzIHtTdHlsZUdhdGhlcn0KICAgICAqLwogICAgY3NzRnJvbU1vZHVsZShtb2R1bGVJZCkgewogICAgICBsZXQgbSA9IGltcG9ydE1vZHVsZShtb2R1bGVJZCk7CiAgICAgIGlmIChtICYmIG0uX2Nzc1RleHQgPT09IHVuZGVmaW5lZCkgewogICAgICAgIC8vIG1vZHVsZSBpbXBvcnRzOiA8bGluayByZWw9ImltcG9ydCIgdHlwZT0iY3NzIj4KICAgICAgICBsZXQgY3NzVGV4dCA9IHRoaXMuX2Nzc0Zyb21Nb2R1bGVJbXBvcnRzKG0pOwogICAgICAgIC8vIGluY2x1ZGUgY3NzIGZyb20gdGhlIGZpcnN0IHRlbXBsYXRlIGluIHRoZSBtb2R1bGUKICAgICAgICBsZXQgdCA9IG0ucXVlcnlTZWxlY3RvcigndGVtcGxhdGUnKTsKICAgICAgICBpZiAodCkgewogICAgICAgICAgY3NzVGV4dCArPSB0aGlzLmNzc0Zyb21UZW1wbGF0ZSh0LAogICAgICAgICAgICAvKiogQHR5cGUge3RlbXBsYXRlV2l0aEFzc2V0UGF0aH0gKi8obSkuYXNzZXRwYXRoKTsKICAgICAgICB9CiAgICAgICAgbS5fY3NzVGV4dCA9IGNzc1RleHQgfHwgbnVsbDsKICAgICAgfQogICAgICBpZiAoIW0pIHsKICAgICAgICBjb25zb2xlLndhcm4oJ0NvdWxkIG5vdCBmaW5kIHN0eWxlIGRhdGEgaW4gbW9kdWxlIG5hbWVkJywgbW9kdWxlSWQpOwogICAgICB9CiAgICAgIHJldHVybiBtICYmIG0uX2Nzc1RleHQgfHwgJyc7CiAgICB9LAoKICAgIC8qKgogICAgICogUmV0dXJucyBDU1MgdGV4dCBvZiBgPHN0eWxlcz5gIHdpdGhpbiBhIGdpdmVuIHRlbXBsYXRlLgogICAgICoKICAgICAqIEFueSBgPHN0eWxlcz5gIHByb2Nlc3NlZCBhcmUgcmVtb3ZlZCBmcm9tIHRoZWlyIG9yaWdpbmFsIGxvY2F0aW9uLgogICAgICogTm90ZTogVGhpcyBtZXRob2QgaXMgZGVwcmVjYXRlZCwgdXNlIGBzdHlsZUZyb21UZW1wbGF0ZWAgaW5zdGVhZC4KICAgICAqCiAgICAgKiBAZGVwcmVjYXRlZAogICAgICogQG1lbWJlcm9mIFBvbHltZXIuU3R5bGVHYXRoZXIKICAgICAqIEBwYXJhbSB7IUhUTUxUZW1wbGF0ZUVsZW1lbnR9IHRlbXBsYXRlIFRlbXBsYXRlIHRvIGdhdGhlciBzdHlsZXMgZnJvbQogICAgICogQHBhcmFtIHtzdHJpbmd9IGJhc2VVUkkgQmFzZSBVUkkgdG8gcmVzb2x2ZSB0aGUgVVJMIGFnYWluc3QKICAgICAqIEByZXR1cm4ge3N0cmluZ30gQ29uY2F0ZW5hdGVkIENTUyBjb250ZW50IGZyb20gc3BlY2lmaWVkIHRlbXBsYXRlCiAgICAgKiBAdGhpcyB7U3R5bGVHYXRoZXJ9CiAgICAgKi8KICAgIGNzc0Zyb21UZW1wbGF0ZSh0ZW1wbGF0ZSwgYmFzZVVSSSkgewogICAgICBsZXQgY3NzVGV4dCA9ICcnOwogICAgICBjb25zdCBlJCA9IHRoaXMuc3R5bGVzRnJvbVRlbXBsYXRlKHRlbXBsYXRlLCBiYXNlVVJJKTsKICAgICAgLy8gaWYgZWxlbWVudCBpcyBhIHRlbXBsYXRlLCBnZXQgY29udGVudCBmcm9tIGl0cyAuY29udGVudAogICAgICBmb3IgKGxldCBpPTA7IGkgPCBlJC5sZW5ndGg7IGkrKykgewogICAgICAgIGxldCBlID0gZSRbaV07CiAgICAgICAgaWYgKGUucGFyZW50Tm9kZSkgewogICAgICAgICAgZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGUpOwogICAgICAgIH0KICAgICAgICBjc3NUZXh0ICs9IGUudGV4dENvbnRlbnQ7CiAgICAgIH0KICAgICAgcmV0dXJuIGNzc1RleHQ7CiAgICB9LAoKICAgIC8qKgogICAgICogUmV0dXJucyBDU1MgdGV4dCBmcm9tIHN0eWxlc2hlZXRzIGxvYWRlZCB2aWEgYDxsaW5rIHJlbD0iaW1wb3J0IiB0eXBlPSJjc3MiPmAKICAgICAqIGxpbmtzIHdpdGhpbiB0aGUgc3BlY2lmaWVkIGBkb20tbW9kdWxlYC4KICAgICAqCiAgICAgKiBOb3RlOiBUaGlzIG1ldGhvZCBpcyBkZXByZWNhdGVkLCB1c2UgYHN0eWxlc0Zyb21Nb2R1bGVJbXBvcnRzYCBpbnN0ZWFkLgogICAgICoKICAgICAqIEBkZXByZWNhdGVkCiAgICAgKgogICAgICogQG1lbWJlcm9mIFBvbHltZXIuU3R5bGVHYXRoZXIKICAgICAqIEBwYXJhbSB7c3RyaW5nfSBtb2R1bGVJZCBJZCBvZiBgZG9tLW1vZHVsZWAgdG8gZ2F0aGVyIENTUyBmcm9tCiAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IENvbmNhdGVuYXRlZCBDU1MgY29udGVudCBmcm9tIGxpbmtzIGluIHNwZWNpZmllZCBgZG9tLW1vZHVsZWAKICAgICAqIEB0aGlzIHtTdHlsZUdhdGhlcn0KICAgICAqLwogICAgY3NzRnJvbU1vZHVsZUltcG9ydHMobW9kdWxlSWQpIHsKICAgICAgbGV0IG0gPSBpbXBvcnRNb2R1bGUobW9kdWxlSWQpOwogICAgICByZXR1cm4gbSA/IHRoaXMuX2Nzc0Zyb21Nb2R1bGVJbXBvcnRzKG0pIDogJyc7CiAgICB9LAoKICAgIC8qKgogICAgICogQGRlcHJlY2F0ZWQKICAgICAqIEBtZW1iZXJvZiBQb2x5bWVyLlN0eWxlR2F0aGVyCiAgICAgKiBAdGhpcyB7U3R5bGVHYXRoZXJ9CiAgICAgKiBAcGFyYW0geyFIVE1MRWxlbWVudH0gbW9kdWxlIGRvbS1tb2R1bGUgZWxlbWVudCB0aGF0IGNvdWxkIGNvbnRhaW4gYDxsaW5rIHJlbD0iaW1wb3J0IiB0eXBlPSJjc3MiPmAgc3R5bGVzCiAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IENvbmNhdGVuYXRlZCBDU1MgY29udGVudCBmcm9tIGxpbmtzIGluIHRoZSBkb20tbW9kdWxlCiAgICAgKi8KICAgICBfY3NzRnJvbU1vZHVsZUltcG9ydHMobW9kdWxlKSB7CiAgICAgIGxldCBjc3NUZXh0ID0gJyc7CiAgICAgIGxldCBzdHlsZXMgPSB0aGlzLl9zdHlsZXNGcm9tTW9kdWxlSW1wb3J0cyhtb2R1bGUpOwogICAgICBmb3IgKGxldCBpPTA7IGkgPCBzdHlsZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICBjc3NUZXh0ICs9IHN0eWxlc1tpXS50ZXh0Q29udGVudDsKICAgICAgfQogICAgICByZXR1cm4gY3NzVGV4dDsKICAgIH0KICB9OwoKICBQb2x5bWVyLlN0eWxlR2F0aGVyID0gU3R5bGVHYXRoZXI7Cn0pKCk7Cjwvc2NyaXB0PjxzY3JpcHQ+CihmdW5jdGlvbigpIHsKICAndXNlIHN0cmljdCc7CgogIGxldCBtb2R1bGVzID0ge307CiAgbGV0IGxjTW9kdWxlcyA9IHt9OwogIGZ1bmN0aW9uIHNldE1vZHVsZShpZCwgbW9kdWxlKSB7CiAgICAvLyBzdG9yZSBpZCBzZXBhcmF0ZSBmcm9tIGxvd2VyY2FzZWQgaWQgc28gdGhhdAogICAgLy8gaW4gYWxsIGNhc2VzIG1peGVkQ2FzZSBpZCB3aWxsIHN0b3JlZCBkaXN0aW5jdGx5CiAgICAvLyBhbmQgbG93ZXJjYXNlIHZlcnNpb24gaXMgYSBmYWxsYmFjawogICAgbW9kdWxlc1tpZF0gPSBsY01vZHVsZXNbaWQudG9Mb3dlckNhc2UoKV0gPSBtb2R1bGU7CiAgfQogIGZ1bmN0aW9uIGZpbmRNb2R1bGUoaWQpIHsKICAgIHJldHVybiBtb2R1bGVzW2lkXSB8fCBsY01vZHVsZXNbaWQudG9Mb3dlckNhc2UoKV07CiAgfQoKICBmdW5jdGlvbiBzdHlsZU91dHNpZGVUZW1wbGF0ZUNoZWNrKGluc3QpIHsKICAgIGlmIChpbnN0LnF1ZXJ5U2VsZWN0b3IoJ3N0eWxlJykpIHsKICAgICAgY29uc29sZS53YXJuKCdkb20tbW9kdWxlICVzIGhhcyBzdHlsZSBvdXRzaWRlIHRlbXBsYXRlJywgaW5zdC5pZCk7CiAgICB9CiAgfQoKICAvKioKICAgKiBUaGUgYGRvbS1tb2R1bGVgIGVsZW1lbnQgcmVnaXN0ZXJzIHRoZSBkb20gaXQgY29udGFpbnMgdG8gdGhlIG5hbWUgZ2l2ZW4KICAgKiBieSB0aGUgbW9kdWxlJ3MgaWQgYXR0cmlidXRlLiBJdCBwcm92aWRlcyBhIHVuaWZpZWQgZGF0YWJhc2Ugb2YgZG9tCiAgICogYWNjZXNzaWJsZSB2aWEgaXRzIHN0YXRpYyBgaW1wb3J0YCBBUEkuCiAgICoKICAgKiBBIGtleSB1c2UgY2FzZSBvZiBgZG9tLW1vZHVsZWAgaXMgZm9yIHByb3ZpZGluZyBjdXN0b20gZWxlbWVudCBgPHRlbXBsYXRlPmBzCiAgICogdmlhIEhUTUwgaW1wb3J0cyB0aGF0IGFyZSBwYXJzZWQgYnkgdGhlIG5hdGl2ZSBIVE1MIHBhcnNlciwgdGhhdCBjYW4gYmUKICAgKiByZWxvY2F0ZWQgZHVyaW5nIGEgYnVuZGxpbmcgcGFzcyBhbmQgc3RpbGwgbG9va2VkIHVwIGJ5IGBpZGAuCiAgICoKICAgKiBFeGFtcGxlOgogICAqCiAgICogICAgIDxkb20tbW9kdWxlIGlkPSJmb28iPgogICAqICAgICAgIDxpbWcgc3JjPSJzdHVmZi5wbmciPgogICAqICAgICA8L2RvbS1tb2R1bGU+CiAgICoKICAgKiBUaGVuIGluIGNvZGUgaW4gc29tZSBvdGhlciBsb2NhdGlvbiB0aGF0IGNhbm5vdCBhY2Nlc3MgdGhlIGRvbS1tb2R1bGUgYWJvdmUKICAgKgogICAqICAgICBsZXQgaW1nID0gY3VzdG9tRWxlbWVudHMuZ2V0KCdkb20tbW9kdWxlJykuaW1wb3J0KCdmb28nLCAnaW1nJyk7CiAgICoKICAgKiBAY3VzdG9tRWxlbWVudAogICAqIEBleHRlbmRzIEhUTUxFbGVtZW50CiAgICogQG1lbWJlcm9mIFBvbHltZXIKICAgKiBAc3VtbWFyeSBDdXN0b20gZWxlbWVudCB0aGF0IHByb3ZpZGVzIGEgcmVnaXN0cnkgb2YgcmVsb2NhdGFibGUgRE9NIGNvbnRlbnQKICAgKiAgIGJ5IGBpZGAgdGhhdCBpcyBhZ25vc3RpYyB0byBidW5kbGluZy4KICAgKiBAdW5yZXN0cmljdGVkCiAgICovCiAgY2xhc3MgRG9tTW9kdWxlIGV4dGVuZHMgSFRNTEVsZW1lbnQgewoKICAgIHN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCkgeyByZXR1cm4gWydpZCddOyB9CgogICAgLyoqCiAgICAgKiBSZXRyaWV2ZXMgdGhlIGVsZW1lbnQgc3BlY2lmaWVkIGJ5IHRoZSBjc3MgYHNlbGVjdG9yYCBpbiB0aGUgbW9kdWxlCiAgICAgKiByZWdpc3RlcmVkIGJ5IGBpZGAuIEZvciBleGFtcGxlLCB0aGlzLmltcG9ydCgnZm9vJywgJ2ltZycpOwogICAgICogQHBhcmFtIHtzdHJpbmd9IGlkIFRoZSBpZCBvZiB0aGUgZG9tLW1vZHVsZSBpbiB3aGljaCB0byBzZWFyY2guCiAgICAgKiBAcGFyYW0ge3N0cmluZz19IHNlbGVjdG9yIFRoZSBjc3Mgc2VsZWN0b3IgYnkgd2hpY2ggdG8gZmluZCB0aGUgZWxlbWVudC4KICAgICAqIEByZXR1cm4ge0VsZW1lbnR9IFJldHVybnMgdGhlIGVsZW1lbnQgd2hpY2ggbWF0Y2hlcyBgc2VsZWN0b3JgIGluIHRoZQogICAgICogbW9kdWxlIHJlZ2lzdGVyZWQgYXQgdGhlIHNwZWNpZmllZCBgaWRgLgogICAgICovCiAgICBzdGF0aWMgaW1wb3J0KGlkLCBzZWxlY3RvcikgewogICAgICBpZiAoaWQpIHsKICAgICAgICBsZXQgbSA9IGZpbmRNb2R1bGUoaWQpOwogICAgICAgIGlmIChtICYmIHNlbGVjdG9yKSB7CiAgICAgICAgICByZXR1cm4gbS5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG07CiAgICAgIH0KICAgICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAgLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi8KICAgIC8qKgogICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgTmFtZSBvZiBhdHRyaWJ1dGUuCiAgICAgKiBAcGFyYW0gez9zdHJpbmd9IG9sZCBPbGQgdmFsdWUgb2YgYXR0cmlidXRlLgogICAgICogQHBhcmFtIHs/c3RyaW5nfSB2YWx1ZSBDdXJyZW50IHZhbHVlIG9mIGF0dHJpYnV0ZS4KICAgICAqIEBwYXJhbSB7P3N0cmluZ30gbmFtZXNwYWNlIEF0dHJpYnV0ZSBuYW1lc3BhY2UuCiAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICovCiAgICBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2sobmFtZSwgb2xkLCB2YWx1ZSwgbmFtZXNwYWNlKSB7CiAgICAgIGlmIChvbGQgIT09IHZhbHVlKSB7CiAgICAgICAgdGhpcy5yZWdpc3RlcigpOwogICAgICB9CiAgICB9CiAgICAvKiBlc2xpbnQtZW5hYmxlIG5vLXVudXNlZC1hcmdzICovCgogICAgLyoqCiAgICAgKiBUaGUgYWJzb2x1dGUgVVJMIG9mIHRoZSBvcmlnaW5hbCBsb2NhdGlvbiBvZiB0aGlzIGBkb20tbW9kdWxlYC4KICAgICAqCiAgICAgKiBUaGlzIHZhbHVlIHdpbGwgZGlmZmVyIGZyb20gdGhpcyBlbGVtZW50J3MgYG93bmVyRG9jdW1lbnRgIGluIHRoZQogICAgICogZm9sbG93aW5nIHdheXM6CiAgICAgKiAtIFRha2VzIGludG8gYWNjb3VudCBhbnkgYGFzc2V0cGF0aGAgYXR0cmlidXRlIGFkZGVkIGR1cmluZyBidW5kbGluZwogICAgICogICB0byBpbmRpY2F0ZSB0aGUgb3JpZ2luYWwgbG9jYXRpb24gcmVsYXRpdmUgdG8gdGhlIGJ1bmRsZWQgbG9jYXRpb24KICAgICAqIC0gVXNlcyB0aGUgSFRNTEltcG9ydHMgcG9seWZpbGwncyBgaW1wb3J0Rm9yRWxlbWVudGAgQVBJIHRvIGVuc3VyZQogICAgICogICB0aGUgcGF0aCBpcyByZWxhdGl2ZSB0byB0aGUgaW1wb3J0IGRvY3VtZW50J3MgbG9jYXRpb24gc2luY2UKICAgICAqICAgYG93bmVyRG9jdW1lbnRgIGlzIG5vdCBjdXJyZW50bHkgcG9seWZpbGxlZAogICAgICovCiAgICBnZXQgYXNzZXRwYXRoKCkgewogICAgICAvLyBEb24ndCBvdmVycmlkZSBleGlzdGluZyBhc3NldHBhdGguCiAgICAgIGlmICghdGhpcy5fX2Fzc2V0cGF0aCkgewogICAgICAgIC8vIG5vdGU6IGFzc2V0cGF0aCBzZXQgdmlhIGFuIGF0dHJpYnV0ZSBtdXN0IGJlIHJlbGF0aXZlIHRvIHRoaXMKICAgICAgICAvLyBlbGVtZW50J3MgbG9jYXRpb247IGFjY29tb2RhdGUgcG9seWZpbGxlZCBIVE1MSW1wb3J0cwogICAgICAgIGNvbnN0IG93bmVyID0gd2luZG93LkhUTUxJbXBvcnRzICYmIEhUTUxJbXBvcnRzLmltcG9ydEZvckVsZW1lbnQgPwogICAgICAgICAgSFRNTEltcG9ydHMuaW1wb3J0Rm9yRWxlbWVudCh0aGlzKSB8fCBkb2N1bWVudCA6IHRoaXMub3duZXJEb2N1bWVudDsKICAgICAgICBjb25zdCB1cmwgPSBQb2x5bWVyLlJlc29sdmVVcmwucmVzb2x2ZVVybCgKICAgICAgICAgIHRoaXMuZ2V0QXR0cmlidXRlKCdhc3NldHBhdGgnKSB8fCAnJywgb3duZXIuYmFzZVVSSSk7CiAgICAgICAgdGhpcy5fX2Fzc2V0cGF0aCA9IFBvbHltZXIuUmVzb2x2ZVVybC5wYXRoRnJvbVVybCh1cmwpOwogICAgICB9CiAgICAgIHJldHVybiB0aGlzLl9fYXNzZXRwYXRoOwogICAgfQoKICAgIC8qKgogICAgICogUmVnaXN0ZXJzIHRoZSBkb20tbW9kdWxlIGF0IGEgZ2l2ZW4gaWQuIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZAogICAgICogd2hlbiBhIGRvbS1tb2R1bGUgaXMgaW1wZXJhdGl2ZWx5IGNyZWF0ZWQuIEZvcgogICAgICogZXhhbXBsZSwgYGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RvbS1tb2R1bGUnKS5yZWdpc3RlcignZm9vJylgLgogICAgICogQHBhcmFtIHtzdHJpbmc9fSBpZCBUaGUgaWQgYXQgd2hpY2ggdG8gcmVnaXN0ZXIgdGhlIGRvbS1tb2R1bGUuCiAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICovCiAgICByZWdpc3RlcihpZCkgewogICAgICBpZCA9IGlkIHx8IHRoaXMuaWQ7CiAgICAgIGlmIChpZCkgewogICAgICAgIC8vIFVuZGVyIHN0cmljdFRlbXBsYXRlUG9saWN5LCByZWplY3QgYW5kIG51bGwgb3V0IGFueSByZS1yZWdpc3RlcmVkCiAgICAgICAgLy8gZG9tLW1vZHVsZSBzaW5jZSBpdCBpcyBhbWJpZ3VvdXMgd2hldGhlciBmaXJzdC1pbiBvciBsYXN0LWluIGlzIHRydXN0ZWQgCiAgICAgICAgaWYgKFBvbHltZXIuc3RyaWN0VGVtcGxhdGVQb2xpY3kgJiYgZmluZE1vZHVsZShpZCkgIT09IHVuZGVmaW5lZCkgewogICAgICAgICAgc2V0TW9kdWxlKGlkLCBudWxsKTsKICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgc3RyaWN0VGVtcGxhdGVQb2xpY3k6IGRvbS1tb2R1bGUgJHtpZH0gcmUtcmVnaXN0ZXJlZGApOwogICAgICAgIH0KICAgICAgICB0aGlzLmlkID0gaWQ7CiAgICAgICAgc2V0TW9kdWxlKGlkLCB0aGlzKTsKICAgICAgICBzdHlsZU91dHNpZGVUZW1wbGF0ZUNoZWNrKHRoaXMpOwogICAgICB9CiAgICB9CiAgfQoKICBEb21Nb2R1bGUucHJvdG90eXBlWydtb2R1bGVzJ10gPSBtb2R1bGVzOwoKICBjdXN0b21FbGVtZW50cy5kZWZpbmUoJ2RvbS1tb2R1bGUnLCBEb21Nb2R1bGUpOwoKICAvKiogQGNvbnN0ICovCiAgUG9seW1lci5Eb21Nb2R1bGUgPSBEb21Nb2R1bGU7Cgp9KSgpOwo8L3NjcmlwdD48c2NyaXB0PgooZnVuY3Rpb24oKSB7CiAgJ3VzZSBzdHJpY3QnOwoKICAvKioKICAgKiBNb2R1bGUgd2l0aCB1dGlsaXRpZXMgZm9yIG1hbmlwdWxhdGluZyBzdHJ1Y3R1cmVkIGRhdGEgcGF0aCBzdHJpbmdzLgogICAqCiAgICogQG5hbWVzcGFjZQogICAqIEBtZW1iZXJvZiBQb2x5bWVyCiAgICogQHN1bW1hcnkgTW9kdWxlIHdpdGggdXRpbGl0aWVzIGZvciBtYW5pcHVsYXRpbmcgc3RydWN0dXJlZCBkYXRhIHBhdGggc3RyaW5ncy4KICAgKi8KICBjb25zdCBQYXRoID0gewoKICAgIC8qKgogICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBzdHJpbmcgaXMgYSBzdHJ1Y3R1cmVkIGRhdGEgcGF0aCAoaGFzIGRvdHMpLgogICAgICoKICAgICAqIEV4YW1wbGU6CiAgICAgKgogICAgICogYGBgCiAgICAgKiBQb2x5bWVyLlBhdGguaXNQYXRoKCdmb28uYmFyLmJheicpIC8vIHRydWUKICAgICAqIFBvbHltZXIuUGF0aC5pc1BhdGgoJ2ZvbycpICAgICAgICAgLy8gZmFsc2UKICAgICAqIGBgYAogICAgICoKICAgICAqIEBtZW1iZXJvZiBQb2x5bWVyLlBhdGgKICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIFBhdGggc3RyaW5nCiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHRoZSBzdHJpbmcgY29udGFpbmVkIG9uZSBvciBtb3JlIGRvdHMKICAgICAqLwogICAgaXNQYXRoOiBmdW5jdGlvbihwYXRoKSB7CiAgICAgIHJldHVybiBwYXRoLmluZGV4T2YoJy4nKSA+PSAwOwogICAgfSwKCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIHJvb3QgcHJvcGVydHkgbmFtZSBmb3IgdGhlIGdpdmVuIHBhdGguCiAgICAgKgogICAgICogRXhhbXBsZToKICAgICAqCiAgICAgKiBgYGAKICAgICAqIFBvbHltZXIuUGF0aC5yb290KCdmb28uYmFyLmJheicpIC8vICdmb28nCiAgICAgKiBQb2x5bWVyLlBhdGgucm9vdCgnZm9vJykgICAgICAgICAvLyAnZm9vJwogICAgICogYGBgCiAgICAgKgogICAgICogQG1lbWJlcm9mIFBvbHltZXIuUGF0aAogICAgICogQHBhcmFtIHtzdHJpbmd9IHBhdGggUGF0aCBzdHJpbmcKICAgICAqIEByZXR1cm4ge3N0cmluZ30gUm9vdCBwcm9wZXJ0eSBuYW1lCiAgICAgKi8KICAgIHJvb3Q6IGZ1bmN0aW9uKHBhdGgpIHsKICAgICAgbGV0IGRvdEluZGV4ID0gcGF0aC5pbmRleE9mKCcuJyk7CiAgICAgIGlmIChkb3RJbmRleCA9PT0gLTEpIHsKICAgICAgICByZXR1cm4gcGF0aDsKICAgICAgfQogICAgICByZXR1cm4gcGF0aC5zbGljZSgwLCBkb3RJbmRleCk7CiAgICB9LAoKICAgIC8qKgogICAgICogR2l2ZW4gYGJhc2VgIGlzIGBmb28uYmFyYCwgYGZvb2AgaXMgYW4gYW5jZXN0b3IsIGBmb28uYmFyYCBpcyBub3QKICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gcGF0aCBpcyBhbiBhbmNlc3RvciBvZiB0aGUgYmFzZSBwYXRoLgogICAgICoKICAgICAqIEV4YW1wbGU6CiAgICAgKgogICAgICogYGBgCiAgICAgKiBQb2x5bWVyLlBhdGguaXNBbmNlc3RvcignZm9vLmJhcicsICdmb28nKSAgICAgICAgIC8vIHRydWUKICAgICAqIFBvbHltZXIuUGF0aC5pc0FuY2VzdG9yKCdmb28uYmFyJywgJ2Zvby5iYXInKSAgICAgLy8gZmFsc2UKICAgICAqIFBvbHltZXIuUGF0aC5pc0FuY2VzdG9yKCdmb28uYmFyJywgJ2Zvby5iYXIuYmF6JykgLy8gZmFsc2UKICAgICAqIGBgYAogICAgICoKICAgICAqIEBtZW1iZXJvZiBQb2x5bWVyLlBhdGgKICAgICAqIEBwYXJhbSB7c3RyaW5nfSBiYXNlIFBhdGggc3RyaW5nIHRvIHRlc3QgYWdhaW5zdC4KICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIFBhdGggc3RyaW5nIHRvIHRlc3QuCiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIGBwYXRoYCBpcyBhbiBhbmNlc3RvciBvZiBgYmFzZWAuCiAgICAgKi8KICAgIGlzQW5jZXN0b3I6IGZ1bmN0aW9uKGJhc2UsIHBhdGgpIHsKICAgICAgLy8gICAgIGJhc2Uuc3RhcnRzV2l0aChwYXRoICsgJy4nKTsKICAgICAgcmV0dXJuIGJhc2UuaW5kZXhPZihwYXRoICsgJy4nKSA9PT0gMDsKICAgIH0sCgogICAgLyoqCiAgICAgKiBHaXZlbiBgYmFzZWAgaXMgYGZvby5iYXJgLCBgZm9vLmJhci5iYXpgIGlzIGFuIGRlc2NlbmRhbnQKICAgICAqCiAgICAgKiBFeGFtcGxlOgogICAgICoKICAgICAqIGBgYAogICAgICogUG9seW1lci5QYXRoLmlzRGVzY2VuZGFudCgnZm9vLmJhcicsICdmb28uYmFyLmJheicpIC8vIHRydWUKICAgICAqIFBvbHltZXIuUGF0aC5pc0Rlc2NlbmRhbnQoJ2Zvby5iYXInLCAnZm9vLmJhcicpICAgICAvLyBmYWxzZQogICAgICogUG9seW1lci5QYXRoLmlzRGVzY2VuZGFudCgnZm9vLmJhcicsICdmb28nKSAgICAgICAgIC8vIGZhbHNlCiAgICAgKiBgYGAKICAgICAqCiAgICAgKiBAbWVtYmVyb2YgUG9seW1lci5QYXRoCiAgICAgKiBAcGFyYW0ge3N0cmluZ30gYmFzZSBQYXRoIHN0cmluZyB0byB0ZXN0IGFnYWluc3QuCiAgICAgKiBAcGFyYW0ge3N0cmluZ30gcGF0aCBQYXRoIHN0cmluZyB0byB0ZXN0LgogICAgICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiBgcGF0aGAgaXMgYSBkZXNjZW5kYW50IG9mIGBiYXNlYC4KICAgICAqLwogICAgaXNEZXNjZW5kYW50OiBmdW5jdGlvbihiYXNlLCBwYXRoKSB7CiAgICAgIC8vICAgICBwYXRoLnN0YXJ0c1dpdGgoYmFzZSArICcuJyk7CiAgICAgIHJldHVybiBwYXRoLmluZGV4T2YoYmFzZSArICcuJykgPT09IDA7CiAgICB9LAoKICAgIC8qKgogICAgICogUmVwbGFjZXMgYSBwcmV2aW91cyBiYXNlIHBhdGggd2l0aCBhIG5ldyBiYXNlIHBhdGgsIHByZXNlcnZpbmcgdGhlCiAgICAgKiByZW1haW5kZXIgb2YgdGhlIHBhdGguCiAgICAgKgogICAgICogVXNlciBtdXN0IGVuc3VyZSBgcGF0aGAgaGFzIGEgcHJlZml4IG9mIGBiYXNlYC4KICAgICAqCiAgICAgKiBFeGFtcGxlOgogICAgICoKICAgICAqIGBgYAogICAgICogUG9seW1lci5QYXRoLnRyYW5zbGF0ZSgnZm9vLmJhcicsICd6b3QnLCAnZm9vLmJhci5iYXonKSAvLyAnem90LmJheicKICAgICAqIGBgYAogICAgICoKICAgICAqIEBtZW1iZXJvZiBQb2x5bWVyLlBhdGgKICAgICAqIEBwYXJhbSB7c3RyaW5nfSBiYXNlIEN1cnJlbnQgYmFzZSBzdHJpbmcgdG8gcmVtb3ZlCiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmV3QmFzZSBOZXcgYmFzZSBzdHJpbmcgdG8gcmVwbGFjZSB3aXRoCiAgICAgKiBAcGFyYW0ge3N0cmluZ30gcGF0aCBQYXRoIHRvIHRyYW5zbGF0ZQogICAgICogQHJldHVybiB7c3RyaW5nfSBUcmFuc2xhdGVkIHN0cmluZwogICAgICovCiAgICB0cmFuc2xhdGU6IGZ1bmN0aW9uKGJhc2UsIG5ld0Jhc2UsIHBhdGgpIHsKICAgICAgcmV0dXJuIG5ld0Jhc2UgKyBwYXRoLnNsaWNlKGJhc2UubGVuZ3RoKTsKICAgIH0sCgogICAgLyoqCiAgICAgKiBAcGFyYW0ge3N0cmluZ30gYmFzZSBQYXRoIHN0cmluZyB0byB0ZXN0IGFnYWluc3QKICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIFBhdGggc3RyaW5nIHRvIHRlc3QKICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgYHBhdGhgIGlzIGVxdWFsIHRvIGBiYXNlYAogICAgICogQHRoaXMge1BhdGh9CiAgICAgKi8KICAgIG1hdGNoZXM6IGZ1bmN0aW9uKGJhc2UsIHBhdGgpIHsKICAgICAgcmV0dXJuIChiYXNlID09PSBwYXRoKSB8fAogICAgICAgICAgICAgdGhpcy5pc0FuY2VzdG9yKGJhc2UsIHBhdGgpIHx8CiAgICAgICAgICAgICB0aGlzLmlzRGVzY2VuZGFudChiYXNlLCBwYXRoKTsKICAgIH0sCgogICAgLyoqCiAgICAgKiBDb252ZXJ0cyBhcnJheS1iYXNlZCBwYXRocyB0byBmbGF0dGVuZWQgcGF0aC4gIFN0cmluZy1iYXNlZCBwYXRocwogICAgICogYXJlIHJldHVybmVkIGFzLWlzLgogICAgICoKICAgICAqIEV4YW1wbGU6CiAgICAgKgogICAgICogYGBgCiAgICAgKiBQb2x5bWVyLlBhdGgubm9ybWFsaXplKFsnZm9vLmJhcicsIDAsICdiYXonXSkgIC8vICdmb28uYmFyLjAuYmF6JwogICAgICogUG9seW1lci5QYXRoLm5vcm1hbGl6ZSgnZm9vLmJhci4wLmJheicpICAgICAgICAvLyAnZm9vLmJhci4wLmJheicKICAgICAqIGBgYAogICAgICoKICAgICAqIEBtZW1iZXJvZiBQb2x5bWVyLlBhdGgKICAgICAqIEBwYXJhbSB7c3RyaW5nIHwgIUFycmF5PHN0cmluZ3xudW1iZXI+fSBwYXRoIElucHV0IHBhdGgKICAgICAqIEByZXR1cm4ge3N0cmluZ30gRmxhdHRlbmVkIHBhdGgKICAgICAqLwogICAgbm9ybWFsaXplOiBmdW5jdGlvbihwYXRoKSB7CiAgICAgIGlmIChBcnJheS5pc0FycmF5KHBhdGgpKSB7CiAgICAgICAgbGV0IHBhcnRzID0gW107CiAgICAgICAgZm9yIChsZXQgaT0wOyBpPHBhdGgubGVuZ3RoOyBpKyspIHsKICAgICAgICAgIGxldCBhcmdzID0gcGF0aFtpXS50b1N0cmluZygpLnNwbGl0KCcuJyk7CiAgICAgICAgICBmb3IgKGxldCBqPTA7IGo8YXJncy5sZW5ndGg7IGorKykgewogICAgICAgICAgICBwYXJ0cy5wdXNoKGFyZ3Nbal0pOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gcGFydHMuam9pbignLicpOwogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiBwYXRoOwogICAgICB9CiAgICB9LAoKICAgIC8qKgogICAgICogU3BsaXRzIGEgcGF0aCBpbnRvIGFuIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLiBBY2NlcHRzIGVpdGhlciBhcnJheXMKICAgICAqIG9mIHBhdGggcGFydHMgb3Igc3RyaW5ncy4KICAgICAqCiAgICAgKiBFeGFtcGxlOgogICAgICoKICAgICAqIGBgYAogICAgICogUG9seW1lci5QYXRoLnNwbGl0KFsnZm9vLmJhcicsIDAsICdiYXonXSkgIC8vIFsnZm9vJywgJ2JhcicsICcwJywgJ2JheiddCiAgICAgKiBQb2x5bWVyLlBhdGguc3BsaXQoJ2Zvby5iYXIuMC5iYXonKSAgICAgICAgLy8gWydmb28nLCAnYmFyJywgJzAnLCAnYmF6J10KICAgICAqIGBgYAogICAgICoKICAgICAqIEBtZW1iZXJvZiBQb2x5bWVyLlBhdGgKICAgICAqIEBwYXJhbSB7c3RyaW5nIHwgIUFycmF5PHN0cmluZ3xudW1iZXI+fSBwYXRoIElucHV0IHBhdGgKICAgICAqIEByZXR1cm4geyFBcnJheTxzdHJpbmc+fSBBcnJheSBvZiBwYXRoIHBhcnRzCiAgICAgKiBAdGhpcyB7UGF0aH0KICAgICAqIEBzdXBwcmVzcyB7Y2hlY2tUeXBlc30KICAgICAqLwogICAgc3BsaXQ6IGZ1bmN0aW9uKHBhdGgpIHsKICAgICAgaWYgKEFycmF5LmlzQXJyYXkocGF0aCkpIHsKICAgICAgICByZXR1cm4gdGhpcy5ub3JtYWxpemUocGF0aCkuc3BsaXQoJy4nKTsKICAgICAgfQogICAgICByZXR1cm4gcGF0aC50b1N0cmluZygpLnNwbGl0KCcuJyk7CiAgICB9LAoKICAgIC8qKgogICAgICogUmVhZHMgYSB2YWx1ZSBmcm9tIGEgcGF0aC4gIElmIGFueSBzdWItcHJvcGVydHkgaW4gdGhlIHBhdGggaXMgYHVuZGVmaW5lZGAsCiAgICAgKiB0aGlzIG1ldGhvZCByZXR1cm5zIGB1bmRlZmluZWRgICh3aWxsIG5ldmVyIHRocm93LgogICAgICoKICAgICAqIEBtZW1iZXJvZiBQb2x5bWVyLlBhdGgKICAgICAqIEBwYXJhbSB7T2JqZWN0fSByb290IE9iamVjdCBmcm9tIHdoaWNoIHRvIGRlcmVmZXJlbmNlIHBhdGggZnJvbQogICAgICogQHBhcmFtIHtzdHJpbmcgfCAhQXJyYXk8c3RyaW5nfG51bWJlcj59IHBhdGggUGF0aCB0byByZWFkCiAgICAgKiBAcGFyYW0ge09iamVjdD19IGluZm8gSWYgYW4gb2JqZWN0IGlzIHByb3ZpZGVkIHRvIGBpbmZvYCwgdGhlIG5vcm1hbGl6ZWQKICAgICAqICAoZmxhdHRlbmVkKSBwYXRoIHdpbGwgYmUgc2V0IHRvIGBpbmZvLnBhdGhgLgogICAgICogQHJldHVybiB7Kn0gVmFsdWUgYXQgcGF0aCwgb3IgYHVuZGVmaW5lZGAgaWYgdGhlIHBhdGggY291bGQgbm90IGJlCiAgICAgKiAgZnVsbHkgZGVyZWZlcmVuY2VkLgogICAgICogQHRoaXMge1BhdGh9CiAgICAgKi8KICAgIGdldDogZnVuY3Rpb24ocm9vdCwgcGF0aCwgaW5mbykgewogICAgICBsZXQgcHJvcCA9IHJvb3Q7CiAgICAgIGxldCBwYXJ0cyA9IHRoaXMuc3BsaXQocGF0aCk7CiAgICAgIC8vIExvb3Agb3ZlciBwYXRoIHBhcnRzWzAuLm4tMV0gYW5kIGRlcmVmZXJlbmNlCiAgICAgIGZvciAobGV0IGk9MDsgaTxwYXJ0cy5sZW5ndGg7IGkrKykgewogICAgICAgIGlmICghcHJvcCkgewogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBsZXQgcGFydCA9IHBhcnRzW2ldOwogICAgICAgIHByb3AgPSBwcm9wW3BhcnRdOwogICAgICB9CiAgICAgIGlmIChpbmZvKSB7CiAgICAgICAgaW5mby5wYXRoID0gcGFydHMuam9pbignLicpOwogICAgICB9CiAgICAgIHJldHVybiBwcm9wOwogICAgfSwKCiAgICAvKioKICAgICAqIFNldHMgYSB2YWx1ZSB0byBhIHBhdGguICBJZiBhbnkgc3ViLXByb3BlcnR5IGluIHRoZSBwYXRoIGlzIGB1bmRlZmluZWRgLAogICAgICogdGhpcyBtZXRob2Qgd2lsbCBuby1vcC4KICAgICAqCiAgICAgKiBAbWVtYmVyb2YgUG9seW1lci5QYXRoCiAgICAgKiBAcGFyYW0ge09iamVjdH0gcm9vdCBPYmplY3QgZnJvbSB3aGljaCB0byBkZXJlZmVyZW5jZSBwYXRoIGZyb20KICAgICAqIEBwYXJhbSB7c3RyaW5nIHwgIUFycmF5PHN0cmluZ3xudW1iZXI+fSBwYXRoIFBhdGggdG8gc2V0CiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFZhbHVlIHRvIHNldCB0byBwYXRoCiAgICAgKiBAcmV0dXJuIHtzdHJpbmcgfCB1bmRlZmluZWR9IFRoZSBub3JtYWxpemVkIHZlcnNpb24gb2YgdGhlIGlucHV0IHBhdGgKICAgICAqIEB0aGlzIHtQYXRofQogICAgICovCiAgICBzZXQ6IGZ1bmN0aW9uKHJvb3QsIHBhdGgsIHZhbHVlKSB7CiAgICAgIGxldCBwcm9wID0gcm9vdDsKICAgICAgbGV0IHBhcnRzID0gdGhpcy5zcGxpdChwYXRoKTsKICAgICAgbGV0IGxhc3QgPSBwYXJ0c1twYXJ0cy5sZW5ndGgtMV07CiAgICAgIGlmIChwYXJ0cy5sZW5ndGggPiAxKSB7CiAgICAgICAgLy8gTG9vcCBvdmVyIHBhdGggcGFydHNbMC4ubi0yXSBhbmQgZGVyZWZlcmVuY2UKICAgICAgICBmb3IgKGxldCBpPTA7IGk8cGFydHMubGVuZ3RoLTE7IGkrKykgewogICAgICAgICAgbGV0IHBhcnQgPSBwYXJ0c1tpXTsKICAgICAgICAgIHByb3AgPSBwcm9wW3BhcnRdOwogICAgICAgICAgaWYgKCFwcm9wKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgLy8gU2V0IHZhbHVlIHRvIG9iamVjdCBhdCBlbmQgb2YgcGF0aAogICAgICAgIHByb3BbbGFzdF0gPSB2YWx1ZTsKICAgICAgfSBlbHNlIHsKICAgICAgICAvLyBTaW1wbGUgcHJvcGVydHkgc2V0CiAgICAgICAgcHJvcFtwYXRoXSA9IHZhbHVlOwogICAgICB9CiAgICAgIHJldHVybiBwYXJ0cy5qb2luKCcuJyk7CiAgICB9CgogIH07CgogIC8qKgogICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gc3RyaW5nIGlzIGEgc3RydWN0dXJlZCBkYXRhIHBhdGggKGhhcyBkb3RzKS4KICAgKgogICAqIFRoaXMgZnVuY3Rpb24gaXMgZGVwcmVjYXRlZC4gIFVzZSBgUG9seW1lci5QYXRoLmlzUGF0aGAgaW5zdGVhZC4KICAgKgogICAqIEV4YW1wbGU6CiAgICoKICAgKiBgYGAKICAgKiBQb2x5bWVyLlBhdGguaXNEZWVwKCdmb28uYmFyLmJheicpIC8vIHRydWUKICAgKiBQb2x5bWVyLlBhdGguaXNEZWVwKCdmb28nKSAgICAgICAgIC8vIGZhbHNlCiAgICogYGBgCiAgICoKICAgKiBAZGVwcmVjYXRlZAogICAqIEBtZW1iZXJvZiBQb2x5bWVyLlBhdGgKICAgKiBAcGFyYW0ge3N0cmluZ30gcGF0aCBQYXRoIHN0cmluZwogICAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhlIHN0cmluZyBjb250YWluZWQgb25lIG9yIG1vcmUgZG90cwogICAqLwogIFBhdGguaXNEZWVwID0gUGF0aC5pc1BhdGg7CgogIFBvbHltZXIuUGF0aCA9IFBhdGg7Cgp9KSgpOwo8L3NjcmlwdD48c2NyaXB0PgooZnVuY3Rpb24oKSB7CiAgJ3VzZSBzdHJpY3QnOwoKICBjb25zdCBjYXNlTWFwID0ge307CiAgY29uc3QgREFTSF9UT19DQU1FTCA9IC8tW2Etel0vZzsKICBjb25zdCBDQU1FTF9UT19EQVNIID0gLyhbQS1aXSkvZzsKCiAgLyoqCiAgICogTW9kdWxlIHdpdGggdXRpbGl0aWVzIGZvciBjb252ZXJ0aW5nIGJldHdlZW4gImRhc2gtY2FzZSIgYW5kICJjYW1lbENhc2UiCiAgICogaWRlbnRpZmllcnMuCiAgICoKICAgKiBAbmFtZXNwYWNlCiAgICogQG1lbWJlcm9mIFBvbHltZXIKICAgKiBAc3VtbWFyeSBNb2R1bGUgdGhhdCBwcm92aWRlcyB1dGlsaXRpZXMgZm9yIGNvbnZlcnRpbmcgYmV0d2VlbiAiZGFzaC1jYXNlIgogICAqICAgYW5kICJjYW1lbENhc2UiLgogICAqLwogIGNvbnN0IENhc2VNYXAgPSB7CgogICAgLyoqCiAgICAgKiBDb252ZXJ0cyAiZGFzaC1jYXNlIiBpZGVudGlmaWVyIChlLmcuIGBmb28tYmFyLWJhemApIHRvICJjYW1lbENhc2UiCiAgICAgKiAoZS5nLiBgZm9vQmFyQmF6YCkuCiAgICAgKgogICAgICogQG1lbWJlcm9mIFBvbHltZXIuQ2FzZU1hcAogICAgICogQHBhcmFtIHtzdHJpbmd9IGRhc2ggRGFzaC1jYXNlIGlkZW50aWZpZXIKICAgICAqIEByZXR1cm4ge3N0cmluZ30gQ2FtZWwtY2FzZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgaWRlbnRpZmllcgogICAgICovCiAgICBkYXNoVG9DYW1lbENhc2UoZGFzaCkgewogICAgICByZXR1cm4gY2FzZU1hcFtkYXNoXSB8fCAoCiAgICAgICAgY2FzZU1hcFtkYXNoXSA9IGRhc2guaW5kZXhPZignLScpIDwgMCA/IGRhc2ggOiBkYXNoLnJlcGxhY2UoREFTSF9UT19DQU1FTCwKICAgICAgICAgIChtKSA9PiBtWzFdLnRvVXBwZXJDYXNlKCkKICAgICAgICApCiAgICAgICk7CiAgICB9LAoKICAgIC8qKgogICAgICogQ29udmVydHMgImNhbWVsQ2FzZSIgaWRlbnRpZmllciAoZS5nLiBgZm9vQmFyQmF6YCkgdG8gImRhc2gtY2FzZSIKICAgICAqIChlLmcuIGBmb28tYmFyLWJhemApLgogICAgICoKICAgICAqIEBtZW1iZXJvZiBQb2x5bWVyLkNhc2VNYXAKICAgICAqIEBwYXJhbSB7c3RyaW5nfSBjYW1lbCBDYW1lbC1jYXNlIGlkZW50aWZpZXIKICAgICAqIEByZXR1cm4ge3N0cmluZ30gRGFzaC1jYXNlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBpZGVudGlmaWVyCiAgICAgKi8KICAgIGNhbWVsVG9EYXNoQ2FzZShjYW1lbCkgewogICAgICByZXR1cm4gY2FzZU1hcFtjYW1lbF0gfHwgKAogICAgICAgIGNhc2VNYXBbY2FtZWxdID0gY2FtZWwucmVwbGFjZShDQU1FTF9UT19EQVNILCAnLSQxJykudG9Mb3dlckNhc2UoKQogICAgICApOwogICAgfQoKICB9OwoKICBQb2x5bWVyLkNhc2VNYXAgPSBDYXNlTWFwOwp9KSgpOwo8L3NjcmlwdD48c2NyaXB0PgooZnVuY3Rpb24oKSB7CgogICd1c2Ugc3RyaWN0JzsKCiAgLy8gTWljcm90YXNrIGltcGxlbWVudGVkIHVzaW5nIE11dGF0aW9uIE9ic2VydmVyCiAgbGV0IG1pY3JvdGFza0N1cnJIYW5kbGUgPSAwOwogIGxldCBtaWNyb3Rhc2tMYXN0SGFuZGxlID0gMDsKICBsZXQgbWljcm90YXNrQ2FsbGJhY2tzID0gW107CiAgbGV0IG1pY3JvdGFza05vZGVDb250ZW50ID0gMDsKICBsZXQgbWljcm90YXNrTm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcnKTsKICBuZXcgd2luZG93Lk11dGF0aW9uT2JzZXJ2ZXIobWljcm90YXNrRmx1c2gpLm9ic2VydmUobWljcm90YXNrTm9kZSwge2NoYXJhY3RlckRhdGE6IHRydWV9KTsKCiAgZnVuY3Rpb24gbWljcm90YXNrRmx1c2goKSB7CiAgICBjb25zdCBsZW4gPSBtaWNyb3Rhc2tDYWxsYmFja3MubGVuZ3RoOwogICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICBsZXQgY2IgPSBtaWNyb3Rhc2tDYWxsYmFja3NbaV07CiAgICAgIGlmIChjYikgewogICAgICAgIHRyeSB7CiAgICAgICAgICBjYigpOwogICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4geyB0aHJvdyBlOyB9KTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIG1pY3JvdGFza0NhbGxiYWNrcy5zcGxpY2UoMCwgbGVuKTsKICAgIG1pY3JvdGFza0xhc3RIYW5kbGUgKz0gbGVuOwogIH0KCiAgLyoqCiAgICogTW9kdWxlIHRoYXQgcHJvdmlkZXMgYSBudW1iZXIgb2Ygc3RyYXRlZ2llcyBmb3IgZW5xdWV1aW5nIGFzeW5jaHJvbm91cwogICAqIHRhc2tzLiAgRWFjaCBzdWItbW9kdWxlIHByb3ZpZGVzIGEgc3RhbmRhcmQgYHJ1bihmbilgIGludGVyZmFjZSB0aGF0IHJldHVybnMgYQogICAqIGhhbmRsZSwgYW5kIGEgYGNhbmNlbChoYW5kbGUpYCBpbnRlcmZhY2UgZm9yIGNhbmNlbGluZyBhc3luYyB0YXNrcyBiZWZvcmUKICAgKiB0aGV5IHJ1bi4KICAgKgogICAqIEBuYW1lc3BhY2UKICAgKiBAbWVtYmVyb2YgUG9seW1lcgogICAqIEBzdW1tYXJ5IE1vZHVsZSB0aGF0IHByb3ZpZGVzIGEgbnVtYmVyIG9mIHN0cmF0ZWdpZXMgZm9yIGVucXVldWluZyBhc3luY2hyb25vdXMKICAgKiB0YXNrcy4KICAgKi8KICBQb2x5bWVyLkFzeW5jID0gewoKICAgIC8qKgogICAgICogQXN5bmMgaW50ZXJmYWNlIHdyYXBwZXIgYXJvdW5kIGBzZXRUaW1lb3V0YC4KICAgICAqCiAgICAgKiBAbmFtZXNwYWNlCiAgICAgKiBAbWVtYmVyb2YgUG9seW1lci5Bc3luYwogICAgICogQHN1bW1hcnkgQXN5bmMgaW50ZXJmYWNlIHdyYXBwZXIgYXJvdW5kIGBzZXRUaW1lb3V0YC4KICAgICAqLwogICAgdGltZU91dDogewogICAgICAvKioKICAgICAgICogUmV0dXJucyBhIHN1Yi1tb2R1bGUgd2l0aCB0aGUgYXN5bmMgaW50ZXJmYWNlIHByb3ZpZGluZyB0aGUgcHJvdmlkZWQKICAgICAgICogZGVsYXkuCiAgICAgICAqCiAgICAgICAqIEBtZW1iZXJvZiBQb2x5bWVyLkFzeW5jLnRpbWVPdXQKICAgICAgICogQHBhcmFtIHtudW1iZXI9fSBkZWxheSBUaW1lIHRvIHdhaXQgYmVmb3JlIGNhbGxpbmcgY2FsbGJhY2tzIGluIG1zCiAgICAgICAqIEByZXR1cm4geyFBc3luY0ludGVyZmFjZX0gQW4gYXN5bmMgdGltZW91dCBpbnRlcmZhY2UKICAgICAgICovCiAgICAgIGFmdGVyKGRlbGF5KSB7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIHJ1bihmbikgeyByZXR1cm4gd2luZG93LnNldFRpbWVvdXQoZm4sIGRlbGF5KTsgfSwKICAgICAgICAgIGNhbmNlbChoYW5kbGUpIHsKICAgICAgICAgICAgd2luZG93LmNsZWFyVGltZW91dChoYW5kbGUpOwogICAgICAgICAgfQogICAgICAgIH07CiAgICAgIH0sCiAgICAgIC8qKgogICAgICAgKiBFbnF1ZXVlcyBhIGZ1bmN0aW9uIGNhbGxlZCBpbiB0aGUgbmV4dCB0YXNrLgogICAgICAgKgogICAgICAgKiBAbWVtYmVyb2YgUG9seW1lci5Bc3luYy50aW1lT3V0CiAgICAgICAqIEBwYXJhbSB7IUZ1bmN0aW9ufSBmbiBDYWxsYmFjayB0byBydW4KICAgICAgICogQHBhcmFtIHtudW1iZXI9fSBkZWxheSBEZWxheSBpbiBtaWxsaXNlY29uZHMKICAgICAgICogQHJldHVybiB7bnVtYmVyfSBIYW5kbGUgdXNlZCBmb3IgY2FuY2VsaW5nIHRhc2sKICAgICAgICovCiAgICAgIHJ1bihmbiwgZGVsYXkpIHsKICAgICAgICByZXR1cm4gd2luZG93LnNldFRpbWVvdXQoZm4sIGRlbGF5KTsKICAgICAgfSwKICAgICAgLyoqCiAgICAgICAqIENhbmNlbHMgYSBwcmV2aW91c2x5IGVucXVldWVkIGB0aW1lT3V0YCBjYWxsYmFjay4KICAgICAgICoKICAgICAgICogQG1lbWJlcm9mIFBvbHltZXIuQXN5bmMudGltZU91dAogICAgICAgKiBAcGFyYW0ge251bWJlcn0gaGFuZGxlIEhhbmRsZSByZXR1cm5lZCBmcm9tIGBydW5gIG9mIGNhbGxiYWNrIHRvIGNhbmNlbAogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKi8KICAgICAgY2FuY2VsKGhhbmRsZSkgewogICAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQoaGFuZGxlKTsKICAgICAgfQogICAgfSwKCiAgICAvKioKICAgICAqIEFzeW5jIGludGVyZmFjZSB3cmFwcGVyIGFyb3VuZCBgcmVxdWVzdEFuaW1hdGlvbkZyYW1lYC4KICAgICAqCiAgICAgKiBAbmFtZXNwYWNlCiAgICAgKiBAbWVtYmVyb2YgUG9seW1lci5Bc3luYwogICAgICogQHN1bW1hcnkgQXN5bmMgaW50ZXJmYWNlIHdyYXBwZXIgYXJvdW5kIGByZXF1ZXN0QW5pbWF0aW9uRnJhbWVgLgogICAgICovCiAgICBhbmltYXRpb25GcmFtZTogewogICAgICAvKioKICAgICAgICogRW5xdWV1ZXMgYSBmdW5jdGlvbiBjYWxsZWQgYXQgYHJlcXVlc3RBbmltYXRpb25GcmFtZWAgdGltaW5nLgogICAgICAgKgogICAgICAgKiBAbWVtYmVyb2YgUG9seW1lci5Bc3luYy5hbmltYXRpb25GcmFtZQogICAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKG51bWJlcik6dm9pZH0gZm4gQ2FsbGJhY2sgdG8gcnVuCiAgICAgICAqIEByZXR1cm4ge251bWJlcn0gSGFuZGxlIHVzZWQgZm9yIGNhbmNlbGluZyB0YXNrCiAgICAgICAqLwogICAgICBydW4oZm4pIHsKICAgICAgICByZXR1cm4gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShmbik7CiAgICAgIH0sCiAgICAgIC8qKgogICAgICAgKiBDYW5jZWxzIGEgcHJldmlvdXNseSBlbnF1ZXVlZCBgYW5pbWF0aW9uRnJhbWVgIGNhbGxiYWNrLgogICAgICAgKgogICAgICAgKiBAbWVtYmVyb2YgUG9seW1lci5Bc3luYy5hbmltYXRpb25GcmFtZQogICAgICAgKiBAcGFyYW0ge251bWJlcn0gaGFuZGxlIEhhbmRsZSByZXR1cm5lZCBmcm9tIGBydW5gIG9mIGNhbGxiYWNrIHRvIGNhbmNlbAogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKi8KICAgICAgY2FuY2VsKGhhbmRsZSkgewogICAgICAgIHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZShoYW5kbGUpOwogICAgICB9CiAgICB9LAoKICAgIC8qKgogICAgICogQXN5bmMgaW50ZXJmYWNlIHdyYXBwZXIgYXJvdW5kIGByZXF1ZXN0SWRsZUNhbGxiYWNrYC4gIEZhbGxzIGJhY2sgdG8KICAgICAqIGBzZXRUaW1lb3V0YCBvbiBicm93c2VycyB0aGF0IGRvIG5vdCBzdXBwb3J0IGByZXF1ZXN0SWRsZUNhbGxiYWNrYC4KICAgICAqCiAgICAgKiBAbmFtZXNwYWNlCiAgICAgKiBAbWVtYmVyb2YgUG9seW1lci5Bc3luYwogICAgICogQHN1bW1hcnkgQXN5bmMgaW50ZXJmYWNlIHdyYXBwZXIgYXJvdW5kIGByZXF1ZXN0SWRsZUNhbGxiYWNrYC4KICAgICAqLwogICAgaWRsZVBlcmlvZDogewogICAgICAvKioKICAgICAgICogRW5xdWV1ZXMgYSBmdW5jdGlvbiBjYWxsZWQgYXQgYHJlcXVlc3RJZGxlQ2FsbGJhY2tgIHRpbWluZy4KICAgICAgICoKICAgICAgICogQG1lbWJlcm9mIFBvbHltZXIuQXN5bmMuaWRsZVBlcmlvZAogICAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKCFJZGxlRGVhZGxpbmUpOnZvaWR9IGZuIENhbGxiYWNrIHRvIHJ1bgogICAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IEhhbmRsZSB1c2VkIGZvciBjYW5jZWxpbmcgdGFzawogICAgICAgKi8KICAgICAgcnVuKGZuKSB7CiAgICAgICAgcmV0dXJuIHdpbmRvdy5yZXF1ZXN0SWRsZUNhbGxiYWNrID8KICAgICAgICAgIHdpbmRvdy5yZXF1ZXN0SWRsZUNhbGxiYWNrKGZuKSA6CiAgICAgICAgICB3aW5kb3cuc2V0VGltZW91dChmbiwgMTYpOwogICAgICB9LAogICAgICAvKioKICAgICAgICogQ2FuY2VscyBhIHByZXZpb3VzbHkgZW5xdWV1ZWQgYGlkbGVQZXJpb2RgIGNhbGxiYWNrLgogICAgICAgKgogICAgICAgKiBAbWVtYmVyb2YgUG9seW1lci5Bc3luYy5pZGxlUGVyaW9kCiAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBoYW5kbGUgSGFuZGxlIHJldHVybmVkIGZyb20gYHJ1bmAgb2YgY2FsbGJhY2sgdG8gY2FuY2VsCiAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAqLwogICAgICBjYW5jZWwoaGFuZGxlKSB7CiAgICAgICAgd2luZG93LmNhbmNlbElkbGVDYWxsYmFjayA/CiAgICAgICAgICB3aW5kb3cuY2FuY2VsSWRsZUNhbGxiYWNrKGhhbmRsZSkgOgogICAgICAgICAgd2luZG93LmNsZWFyVGltZW91dChoYW5kbGUpOwogICAgICB9CiAgICB9LAoKICAgIC8qKgogICAgICogQXN5bmMgaW50ZXJmYWNlIGZvciBlbnF1ZXVpbmcgY2FsbGJhY2tzIHRoYXQgcnVuIGF0IG1pY3JvdGFzayB0aW1pbmcuCiAgICAgKgogICAgICogTm90ZSB0aGF0IG1pY3JvdGFzayB0aW1pbmcgaXMgYWNoaWV2ZWQgdmlhIGEgc2luZ2xlIGBNdXRhdGlvbk9ic2VydmVyYCwKICAgICAqIGFuZCB0aHVzIGNhbGxiYWNrcyBlbnF1ZXVlZCB3aXRoIHRoaXMgQVBJIHdpbGwgYWxsIHJ1biBpbiBhIHNpbmdsZQogICAgICogYmF0Y2gsIGFuZCBub3QgaW50ZXJsZWF2ZWQgd2l0aCBvdGhlciBtaWNyb3Rhc2tzIHN1Y2ggYXMgcHJvbWlzZXMuCiAgICAgKiBQcm9taXNlcyBhcmUgYXZvaWRlZCBhcyBhbiBpbXBsZW1lbnRhdGlvbiBjaG9pY2UgZm9yIHRoZSB0aW1lIGJlaW5nCiAgICAgKiBkdWUgdG8gU2FmYXJpIGJ1Z3MgdGhhdCBjYXVzZSBQcm9taXNlcyB0byBsYWNrIG1pY3JvdGFzayBndWFyYW50ZWVzLgogICAgICoKICAgICAqIEBuYW1lc3BhY2UKICAgICAqIEBtZW1iZXJvZiBQb2x5bWVyLkFzeW5jCiAgICAgKiBAc3VtbWFyeSBBc3luYyBpbnRlcmZhY2UgZm9yIGVucXVldWluZyBjYWxsYmFja3MgdGhhdCBydW4gYXQgbWljcm90YXNrCiAgICAgKiAgIHRpbWluZy4KICAgICAqLwogICAgbWljcm9UYXNrOiB7CgogICAgICAvKioKICAgICAgICogRW5xdWV1ZXMgYSBmdW5jdGlvbiBjYWxsZWQgYXQgbWljcm90YXNrIHRpbWluZy4KICAgICAgICoKICAgICAgICogQG1lbWJlcm9mIFBvbHltZXIuQXN5bmMubWljcm9UYXNrCiAgICAgICAqIEBwYXJhbSB7IUZ1bmN0aW9uPX0gY2FsbGJhY2sgQ2FsbGJhY2sgdG8gcnVuCiAgICAgICAqIEByZXR1cm4ge251bWJlcn0gSGFuZGxlIHVzZWQgZm9yIGNhbmNlbGluZyB0YXNrCiAgICAgICAqLwogICAgICBydW4oY2FsbGJhY2spIHsKICAgICAgICBtaWNyb3Rhc2tOb2RlLnRleHRDb250ZW50ID0gbWljcm90YXNrTm9kZUNvbnRlbnQrKzsKICAgICAgICBtaWNyb3Rhc2tDYWxsYmFja3MucHVzaChjYWxsYmFjayk7CiAgICAgICAgcmV0dXJuIG1pY3JvdGFza0N1cnJIYW5kbGUrKzsKICAgICAgfSwKCiAgICAgIC8qKgogICAgICAgKiBDYW5jZWxzIGEgcHJldmlvdXNseSBlbnF1ZXVlZCBgbWljcm9UYXNrYCBjYWxsYmFjay4KICAgICAgICoKICAgICAgICogQG1lbWJlcm9mIFBvbHltZXIuQXN5bmMubWljcm9UYXNrCiAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBoYW5kbGUgSGFuZGxlIHJldHVybmVkIGZyb20gYHJ1bmAgb2YgY2FsbGJhY2sgdG8gY2FuY2VsCiAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAqLwogICAgICBjYW5jZWwoaGFuZGxlKSB7CiAgICAgICAgY29uc3QgaWR4ID0gaGFuZGxlIC0gbWljcm90YXNrTGFzdEhhbmRsZTsKICAgICAgICBpZiAoaWR4ID49IDApIHsKICAgICAgICAgIGlmICghbWljcm90YXNrQ2FsbGJhY2tzW2lkeF0pIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIGFzeW5jIGhhbmRsZTogJyArIGhhbmRsZSk7CiAgICAgICAgICB9CiAgICAgICAgICBtaWNyb3Rhc2tDYWxsYmFja3NbaWR4XSA9IG51bGw7CiAgICAgICAgfQogICAgICB9CgogICAgfQogIH07Cgp9KSgpOwo8L3NjcmlwdD48c2NyaXB0PgogIChmdW5jdGlvbiAoKSB7CgogICAgJ3VzZSBzdHJpY3QnOwoKICAgIC8qKiBAY29uc3QgeyFBc3luY0ludGVyZmFjZX0gKi8KICAgIGNvbnN0IG1pY3JvdGFzayA9IFBvbHltZXIuQXN5bmMubWljcm9UYXNrOwoKICAgIC8qKgogICAgICogRWxlbWVudCBjbGFzcyBtaXhpbiB0aGF0IHByb3ZpZGVzIGJhc2ljIG1ldGEtcHJvZ3JhbW1pbmcgZm9yIGNyZWF0aW5nIG9uZQogICAgICogb3IgbW9yZSBwcm9wZXJ0eSBhY2Nlc3NvcnMgKGdldHRlci9zZXR0ZXIgcGFpcikgdGhhdCBlbnF1ZXVlIGFuIGFzeW5jCiAgICAgKiAoYmF0Y2hlZCkgYF9wcm9wZXJ0aWVzQ2hhbmdlZGAgY2FsbGJhY2suCiAgICAgKgogICAgICogRm9yIGJhc2ljIHVzYWdlIG9mIHRoaXMgbWl4aW4sIGNhbGwgYE15Q2xhc3MuY3JlYXRlUHJvcGVydGllcyhwcm9wcylgCiAgICAgKiBvbmNlIGF0IGNsYXNzIGRlZmluaXRpb24gdGltZSB0byBjcmVhdGUgcHJvcGVydHkgYWNjZXNzb3JzIGZvciBwcm9wZXJ0aWVzCiAgICAgKiBuYW1lZCBpbiBwcm9wcywgaW1wbGVtZW50IGBfcHJvcGVydGllc0NoYW5nZWRgIHRvIHJlYWN0IGFzIGRlc2lyZWQgdG8KICAgICAqIHByb3BlcnR5IGNoYW5nZXMsIGFuZCBpbXBsZW1lbnQgYHN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKClgIGFuZAogICAgICogaW5jbHVkZSBsb3dlcmNhc2UgdmVyc2lvbnMgb2YgYW55IHByb3BlcnR5IG5hbWVzIHRoYXQgc2hvdWxkIGJlIHNldCBmcm9tCiAgICAgKiBhdHRyaWJ1dGVzLiBMYXN0LCBjYWxsIGB0aGlzLl9lbmFibGVQcm9wZXJ0aWVzKClgIGluIHRoZSBlbGVtZW50J3MKICAgICAqIGBjb25uZWN0ZWRDYWxsYmFja2AgdG8gZW5hYmxlIHRoZSBhY2Nlc3NvcnMuCiAgICAgKgogICAgICogQG1peGluRnVuY3Rpb24KICAgICAqIEBwb2x5bWVyCiAgICAgKiBAbWVtYmVyb2YgUG9seW1lcgogICAgICogQHN1bW1hcnkgRWxlbWVudCBjbGFzcyBtaXhpbiBmb3IgcmVhY3RpbmcgdG8gcHJvcGVydHkgY2hhbmdlcyBmcm9tCiAgICAgKiAgIGdlbmVyYXRlZCBwcm9wZXJ0eSBhY2Nlc3NvcnMuCiAgICAgKi8KICAgIFBvbHltZXIuUHJvcGVydGllc0NoYW5nZWQgPSBQb2x5bWVyLmRlZHVwaW5nTWl4aW4oc3VwZXJDbGFzcyA9PiB7CgogICAgICAvKioKICAgICAgICogQHBvbHltZXIKICAgICAgICogQG1peGluQ2xhc3MKICAgICAgICogQGV4dGVuZHMge3N1cGVyQ2xhc3N9CiAgICAgICAqIEBpbXBsZW1lbnRzIHtQb2x5bWVyX1Byb3BlcnRpZXNDaGFuZ2VkfQogICAgICAgKiBAdW5yZXN0cmljdGVkCiAgICAgICAqLwogICAgICBjbGFzcyBQcm9wZXJ0aWVzQ2hhbmdlZCBleHRlbmRzIHN1cGVyQ2xhc3MgewoKICAgICAgICAvKioKICAgICAgICAgKiBDcmVhdGVzIHByb3BlcnR5IGFjY2Vzc29ycyBmb3IgdGhlIGdpdmVuIHByb3BlcnR5IG5hbWVzLgogICAgICAgICAqIEBwYXJhbSB7IU9iamVjdH0gcHJvcHMgT2JqZWN0IHdob3NlIGtleXMgYXJlIG5hbWVzIG9mIGFjY2Vzc29ycy4KICAgICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgICAqIEBwcm90ZWN0ZWQKICAgICAgICAgKi8KICAgICAgICBzdGF0aWMgY3JlYXRlUHJvcGVydGllcyhwcm9wcykgewogICAgICAgICAgY29uc3QgcHJvdG8gPSB0aGlzLnByb3RvdHlwZTsKICAgICAgICAgIGZvciAobGV0IHByb3AgaW4gcHJvcHMpIHsKICAgICAgICAgICAgLy8gZG9uJ3Qgc3RvbXAgYW4gZXhpc3RpbmcgYWNjZXNzb3IKICAgICAgICAgICAgaWYgKCEocHJvcCBpbiBwcm90bykpIHsKICAgICAgICAgICAgICBwcm90by5fY3JlYXRlUHJvcGVydHlBY2Nlc3Nvcihwcm9wKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLyoqCiAgICAgICAgICogUmV0dXJucyBhbiBhdHRyaWJ1dGUgbmFtZSB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSBnaXZlbiBwcm9wZXJ0eS4KICAgICAgICAgKiBUaGUgYXR0cmlidXRlIG5hbWUgaXMgdGhlIGxvd2VyY2FzZWQgcHJvcGVydHkgbmFtZS4gT3ZlcnJpZGUgdG8KICAgICAgICAgKiBjdXN0b21pemUgdGhpcyBtYXBwaW5nLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eSBQcm9wZXJ0eSB0byBjb252ZXJ0CiAgICAgICAgICogQHJldHVybiB7c3RyaW5nfSBBdHRyaWJ1dGUgbmFtZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBnaXZlbiBwcm9wZXJ0eS4KICAgICAgICAgKgogICAgICAgICAqIEBwcm90ZWN0ZWQKICAgICAgICAgKi8KICAgICAgICBzdGF0aWMgYXR0cmlidXRlTmFtZUZvclByb3BlcnR5KHByb3BlcnR5KSB7CiAgICAgICAgICByZXR1cm4gcHJvcGVydHkudG9Mb3dlckNhc2UoKTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIE92ZXJyaWRlIHBvaW50IHRvIHByb3ZpZGUgYSB0eXBlIHRvIHdoaWNoIHRvIGRlc2VyaWFsaXplIGEgdmFsdWUgdG8KICAgICAgICAgKiBhIGdpdmVuIHByb3BlcnR5LgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIE5hbWUgb2YgcHJvcGVydHkKICAgICAgICAgKgogICAgICAgICAqIEBwcm90ZWN0ZWQKICAgICAgICAgKi8KICAgICAgICBzdGF0aWMgdHlwZUZvclByb3BlcnR5KG5hbWUpIHsgfSAvL2VzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnMKCiAgICAgICAgLyoqCiAgICAgICAgICogQ3JlYXRlcyBhIHNldHRlci9nZXR0ZXIgcGFpciBmb3IgdGhlIG5hbWVkIHByb3BlcnR5IHdpdGggaXRzIG93bgogICAgICAgICAqIGxvY2FsIHN0b3JhZ2UuICBUaGUgZ2V0dGVyIHJldHVybnMgdGhlIHZhbHVlIGluIHRoZSBsb2NhbCBzdG9yYWdlLAogICAgICAgICAqIGFuZCB0aGUgc2V0dGVyIGNhbGxzIGBfc2V0UHJvcGVydHlgLCB3aGljaCB1cGRhdGVzIHRoZSBsb2NhbCBzdG9yYWdlCiAgICAgICAgICogZm9yIHRoZSBwcm9wZXJ0eSBhbmQgZW5xdWV1ZXMgYSBgX3Byb3BlcnRpZXNDaGFuZ2VkYCBjYWxsYmFjay4KICAgICAgICAgKgogICAgICAgICAqIFRoaXMgbWV0aG9kIG1heSBiZSBjYWxsZWQgb24gYSBwcm90b3R5cGUgb3IgYW4gaW5zdGFuY2UuICBDYWxsaW5nCiAgICAgICAgICogdGhpcyBtZXRob2QgbWF5IG92ZXJ3cml0ZSBhIHByb3BlcnR5IHZhbHVlIHRoYXQgYWxyZWFkeSBleGlzdHMgb24KICAgICAgICAgKiB0aGUgcHJvdG90eXBlL2luc3RhbmNlIGJ5IGNyZWF0aW5nIHRoZSBhY2Nlc3Nvci4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eSBOYW1lIG9mIHRoZSBwcm9wZXJ0eQogICAgICAgICAqIEBwYXJhbSB7Ym9vbGVhbj19IHJlYWRPbmx5IFdoZW4gdHJ1ZSwgbm8gc2V0dGVyIGlzIGNyZWF0ZWQ7IHRoZQogICAgICAgICAqICAgcHJvdGVjdGVkIGBfc2V0UHJvcGVydHlgIGZ1bmN0aW9uIG11c3QgYmUgdXNlZCB0byBzZXQgdGhlIHByb3BlcnR5CiAgICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICAgKiBAcHJvdGVjdGVkCiAgICAgICAgICovCiAgICAgICAgX2NyZWF0ZVByb3BlcnR5QWNjZXNzb3IocHJvcGVydHksIHJlYWRPbmx5KSB7CiAgICAgICAgICB0aGlzLl9hZGRQcm9wZXJ0eVRvQXR0cmlidXRlTWFwKHByb3BlcnR5KTsKICAgICAgICAgIGlmICghdGhpcy5oYXNPd25Qcm9wZXJ0eSgnX19kYXRhSGFzQWNjZXNzb3InKSkgewogICAgICAgICAgICB0aGlzLl9fZGF0YUhhc0FjY2Vzc29yID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5fX2RhdGFIYXNBY2Nlc3Nvcik7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoIXRoaXMuX19kYXRhSGFzQWNjZXNzb3JbcHJvcGVydHldKSB7CiAgICAgICAgICAgIHRoaXMuX19kYXRhSGFzQWNjZXNzb3JbcHJvcGVydHldID0gdHJ1ZTsKICAgICAgICAgICAgdGhpcy5fZGVmaW5lUHJvcGVydHlBY2Nlc3Nvcihwcm9wZXJ0eSwgcmVhZE9ubHkpOwogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLyoqCiAgICAgICAgICogQWRkcyB0aGUgZ2l2ZW4gYHByb3BlcnR5YCB0byBhIG1hcCBtYXRjaGluZyBhdHRyaWJ1dGUgbmFtZXMKICAgICAgICAgKiB0byBwcm9wZXJ0eSBuYW1lcywgdXNpbmcgYGF0dHJpYnV0ZU5hbWVGb3JQcm9wZXJ0eWAuIFRoaXMgbWFwIGlzCiAgICAgICAgICogdXNlZCB3aGVuIGRlc2VyaWFsaXppbmcgYXR0cmlidXRlIHZhbHVlcyB0byBwcm9wZXJ0aWVzLgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IE5hbWUgb2YgdGhlIHByb3BlcnR5CiAgICAgICAgICovCiAgICAgICAgX2FkZFByb3BlcnR5VG9BdHRyaWJ1dGVNYXAocHJvcGVydHkpIHsKICAgICAgICAgIGlmICghdGhpcy5oYXNPd25Qcm9wZXJ0eSgnX19kYXRhQXR0cmlidXRlcycpKSB7CiAgICAgICAgICAgIHRoaXMuX19kYXRhQXR0cmlidXRlcyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuX19kYXRhQXR0cmlidXRlcyk7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoIXRoaXMuX19kYXRhQXR0cmlidXRlc1twcm9wZXJ0eV0pIHsKICAgICAgICAgICAgY29uc3QgYXR0ciA9IHRoaXMuY29uc3RydWN0b3IuYXR0cmlidXRlTmFtZUZvclByb3BlcnR5KHByb3BlcnR5KTsKICAgICAgICAgICAgdGhpcy5fX2RhdGFBdHRyaWJ1dGVzW2F0dHJdID0gcHJvcGVydHk7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBEZWZpbmVzIGEgcHJvcGVydHkgYWNjZXNzb3IgZm9yIHRoZSBnaXZlbiBwcm9wZXJ0eS4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkgTmFtZSBvZiB0aGUgcHJvcGVydHkKICAgICAgICAgKiBAcGFyYW0ge2Jvb2xlYW49fSByZWFkT25seSBXaGVuIHRydWUsIG5vIHNldHRlciBpcyBjcmVhdGVkCiAgICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICAgKi8KICAgICAgICAgX2RlZmluZVByb3BlcnR5QWNjZXNzb3IocHJvcGVydHksIHJlYWRPbmx5KSB7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgcHJvcGVydHksIHsKICAgICAgICAgICAgLyogZXNsaW50LWRpc2FibGUgdmFsaWQtanNkb2MgKi8KICAgICAgICAgICAgLyoqIEB0aGlzIHtQcm9wZXJ0aWVzQ2hhbmdlZH0gKi8KICAgICAgICAgICAgZ2V0KCkgewogICAgICAgICAgICAgIHJldHVybiB0aGlzLl9nZXRQcm9wZXJ0eShwcm9wZXJ0eSk7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIC8qKiBAdGhpcyB7UHJvcGVydGllc0NoYW5nZWR9ICovCiAgICAgICAgICAgIHNldDogcmVhZE9ubHkgPyBmdW5jdGlvbiAoKSB7fSA6IGZ1bmN0aW9uICh2YWx1ZSkgewogICAgICAgICAgICAgIHRoaXMuX3NldFByb3BlcnR5KHByb3BlcnR5LCB2YWx1ZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLyogZXNsaW50LWVuYWJsZSAqLwogICAgICAgICAgfSk7CiAgICAgICAgfQoKICAgICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICAgIHN1cGVyKCk7CiAgICAgICAgICB0aGlzLl9fZGF0YUVuYWJsZWQgPSBmYWxzZTsKICAgICAgICAgIHRoaXMuX19kYXRhUmVhZHkgPSBmYWxzZTsKICAgICAgICAgIHRoaXMuX19kYXRhSW52YWxpZCA9IGZhbHNlOwogICAgICAgICAgdGhpcy5fX2RhdGEgPSB7fTsKICAgICAgICAgIHRoaXMuX19kYXRhUGVuZGluZyA9IG51bGw7CiAgICAgICAgICB0aGlzLl9fZGF0YU9sZCA9IG51bGw7CiAgICAgICAgICB0aGlzLl9fZGF0YUluc3RhbmNlUHJvcHMgPSBudWxsOwogICAgICAgICAgdGhpcy5fX3NlcmlhbGl6aW5nID0gZmFsc2U7CiAgICAgICAgICB0aGlzLl9pbml0aWFsaXplUHJvcGVydGllcygpOwogICAgICAgIH0KCiAgICAgICAgLyoqCiAgICAgICAgICogTGlmZWN5Y2xlIGNhbGxiYWNrIGNhbGxlZCB3aGVuIHByb3BlcnRpZXMgYXJlIGVuYWJsZWQgdmlhCiAgICAgICAgICogYF9lbmFibGVQcm9wZXJ0aWVzYC4KICAgICAgICAgKgogICAgICAgICAqIFVzZXJzIG1heSBvdmVycmlkZSB0aGlzIGZ1bmN0aW9uIHRvIGltcGxlbWVudCBiZWhhdmlvciB0aGF0IGlzCiAgICAgICAgICogZGVwZW5kZW50IG9uIHRoZSBlbGVtZW50IGhhdmluZyBpdHMgcHJvcGVydHkgZGF0YSBpbml0aWFsaXplZCwgZS5nLgogICAgICAgICAqIGZyb20gZGVmYXVsdHMgKGluaXRpYWxpemVkIGZyb20gYGNvbnN0cnVjdG9yYCwgYF9pbml0aWFsaXplUHJvcGVydGllc2ApLAogICAgICAgICAqIGBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2tgLCBvciB2YWx1ZXMgcHJvcGFnYXRlZCBmcm9tIGhvc3QgZS5nLiB2aWEKICAgICAgICAgKiBiaW5kaW5ncy4gIGBzdXBlci5yZWFkeSgpYCBtdXN0IGJlIGNhbGxlZCB0byBlbnN1cmUgdGhlIGRhdGEgc3lzdGVtCiAgICAgICAgICogYmVjb21lcyBlbmFibGVkLgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICAgKiBAcHVibGljCiAgICAgICAgICovCiAgICAgICAgcmVhZHkoKSB7CiAgICAgICAgICB0aGlzLl9fZGF0YVJlYWR5ID0gdHJ1ZTsKICAgICAgICAgIHRoaXMuX2ZsdXNoUHJvcGVydGllcygpOwogICAgICAgIH0KCiAgICAgICAgLyoqCiAgICAgICAgICogSW5pdGlhbGl6ZXMgdGhlIGxvY2FsIHN0b3JhZ2UgZm9yIHByb3BlcnR5IGFjY2Vzc29ycy4KICAgICAgICAgKgogICAgICAgICAqIFByb3ZpZGVkIGFzIGFuIG92ZXJyaWRlIHBvaW50IGZvciBwZXJmb3JtaW5nIGFueSBzZXR1cCB3b3JrIHByaW9yCiAgICAgICAgICogdG8gaW5pdGlhbGl6aW5nIHRoZSBwcm9wZXJ0eSBhY2Nlc3NvciBzeXN0ZW0uCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgICAqIEBwcm90ZWN0ZWQKICAgICAgICAgKi8KICAgICAgICBfaW5pdGlhbGl6ZVByb3BlcnRpZXMoKSB7CiAgICAgICAgICAvLyBDYXB0dXJlIGluc3RhbmNlIHByb3BlcnRpZXM7IHRoZXNlIHdpbGwgYmUgc2V0IGludG8gYWNjZXNzb3JzCiAgICAgICAgICAvLyBkdXJpbmcgZmlyc3QgZmx1c2guIERvbid0IHNldCB0aGVtIGhlcmUsIHNpbmNlIHdlIHdhbnQKICAgICAgICAgIC8vIHRoZXNlIHRvIG92ZXJ3cml0ZSBkZWZhdWx0cy9jb25zdHJ1Y3RvciBhc3NpZ25tZW50cwogICAgICAgICAgZm9yIChsZXQgcCBpbiB0aGlzLl9fZGF0YUhhc0FjY2Vzc29yKSB7CiAgICAgICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KHApKSB7CiAgICAgICAgICAgICAgdGhpcy5fX2RhdGFJbnN0YW5jZVByb3BzID0gdGhpcy5fX2RhdGFJbnN0YW5jZVByb3BzIHx8IHt9OwogICAgICAgICAgICAgIHRoaXMuX19kYXRhSW5zdGFuY2VQcm9wc1twXSA9IHRoaXNbcF07CiAgICAgICAgICAgICAgZGVsZXRlIHRoaXNbcF07CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIENhbGxlZCBhdCByZWFkeSB0aW1lIHdpdGggYmFnIG9mIGluc3RhbmNlIHByb3BlcnRpZXMgdGhhdCBvdmVyd3JvdGUKICAgICAgICAgKiBhY2Nlc3NvcnMgd2hlbiB0aGUgZWxlbWVudCB1cGdyYWRlZC4KICAgICAgICAgKgogICAgICAgICAqIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHNldHMgdGhlc2UgcHJvcGVydGllcyBiYWNrIGludG8gdGhlCiAgICAgICAgICogc2V0dGVyIGF0IHJlYWR5IHRpbWUuICBUaGlzIG1ldGhvZCBpcyBwcm92aWRlZCBhcyBhbiBvdmVycmlkZQogICAgICAgICAqIHBvaW50IGZvciBjdXN0b21pemluZyBvciBwcm92aWRpbmcgbW9yZSBlZmZpY2llbnQgaW5pdGlhbGl6YXRpb24uCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gcHJvcHMgQmFnIG9mIHByb3BlcnR5IHZhbHVlcyB0aGF0IHdlcmUgb3ZlcndyaXR0ZW4KICAgICAgICAgKiAgIHdoZW4gY3JlYXRpbmcgcHJvcGVydHkgYWNjZXNzb3JzLgogICAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAgICogQHByb3RlY3RlZAogICAgICAgICAqLwogICAgICAgIF9pbml0aWFsaXplSW5zdGFuY2VQcm9wZXJ0aWVzKHByb3BzKSB7CiAgICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIHByb3BzKTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIFVwZGF0ZXMgdGhlIGxvY2FsIHN0b3JhZ2UgZm9yIGEgcHJvcGVydHkgKHZpYSBgX3NldFBlbmRpbmdQcm9wZXJ0eWApCiAgICAgICAgICogYW5kIGVucXVldWVzIGEgYF9wcm9lcHJ0aWVzQ2hhbmdlZGAgY2FsbGJhY2suCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkgTmFtZSBvZiB0aGUgcHJvcGVydHkKICAgICAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFZhbHVlIHRvIHNldAogICAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAgICogQHByb3RlY3RlZAogICAgICAgICAqLwogICAgICAgIF9zZXRQcm9wZXJ0eShwcm9wZXJ0eSwgdmFsdWUpIHsKICAgICAgICAgIGlmICh0aGlzLl9zZXRQZW5kaW5nUHJvcGVydHkocHJvcGVydHksIHZhbHVlKSkgewogICAgICAgICAgICB0aGlzLl9pbnZhbGlkYXRlUHJvcGVydGllcygpOwogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLyoqCiAgICAgICAgICogUmV0dXJucyB0aGUgdmFsdWUgZm9yIHRoZSBnaXZlbiBwcm9wZXJ0eS4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkgTmFtZSBvZiBwcm9wZXJ0eQogICAgICAgICAqIEByZXR1cm4geyp9IFZhbHVlIGZvciB0aGUgZ2l2ZW4gcHJvcGVydHkKICAgICAgICAgKiBAcHJvdGVjdGVkCiAgICAgICAgICovCiAgICAgICAgX2dldFByb3BlcnR5KHByb3BlcnR5KSB7CiAgICAgICAgICByZXR1cm4gdGhpcy5fX2RhdGFbcHJvcGVydHldOwogICAgICAgIH0KCiAgICAgICAgLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi8KICAgICAgICAvKioKICAgICAgICAgKiBVcGRhdGVzIHRoZSBsb2NhbCBzdG9yYWdlIGZvciBhIHByb3BlcnR5LCByZWNvcmRzIHRoZSBwcmV2aW91cyB2YWx1ZSwKICAgICAgICAgKiBhbmQgYWRkcyBpdCB0byB0aGUgc2V0IG9mICJwZW5kaW5nIGNoYW5nZXMiIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gdGhlCiAgICAgICAgICogYF9wcm9wZXJ0aWVzQ2hhbmdlZGAgY2FsbGJhY2suICBUaGlzIG1ldGhvZCBkb2VzIG5vdCBlbnF1ZXVlIHRoZQogICAgICAgICAqIGBfcHJvcGVydGllc0NoYW5nZWRgIGNhbGxiYWNrLgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IE5hbWUgb2YgdGhlIHByb3BlcnR5CiAgICAgICAgICogQHBhcmFtIHsqfSB2YWx1ZSBWYWx1ZSB0byBzZXQKICAgICAgICAgKiBAcGFyYW0ge2Jvb2xlYW49fSBleHQgTm90IHVzZWQgaGVyZTsgYWZmb3JkYW5jZSBmb3IgY2xvc3VyZQogICAgICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IFJldHVybnMgdHJ1ZSBpZiB0aGUgcHJvcGVydHkgY2hhbmdlZAogICAgICAgICAqIEBwcm90ZWN0ZWQKICAgICAgICAgKi8KICAgICAgICBfc2V0UGVuZGluZ1Byb3BlcnR5KHByb3BlcnR5LCB2YWx1ZSwgZXh0KSB7CiAgICAgICAgICBsZXQgb2xkID0gdGhpcy5fX2RhdGFbcHJvcGVydHldOwogICAgICAgICAgbGV0IGNoYW5nZWQgPSB0aGlzLl9zaG91bGRQcm9wZXJ0eUNoYW5nZShwcm9wZXJ0eSwgdmFsdWUsIG9sZCk7CiAgICAgICAgICBpZiAoY2hhbmdlZCkgewogICAgICAgICAgICBpZiAoIXRoaXMuX19kYXRhUGVuZGluZykgewogICAgICAgICAgICAgIHRoaXMuX19kYXRhUGVuZGluZyA9IHt9OwogICAgICAgICAgICAgIHRoaXMuX19kYXRhT2xkID0ge307CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy8gRW5zdXJlIG9sZCBpcyBjYXB0dXJlZCBmcm9tIHRoZSBsYXN0IHR1cm4KICAgICAgICAgICAgaWYgKHRoaXMuX19kYXRhT2xkICYmICEocHJvcGVydHkgaW4gdGhpcy5fX2RhdGFPbGQpKSB7CiAgICAgICAgICAgICAgdGhpcy5fX2RhdGFPbGRbcHJvcGVydHldID0gb2xkOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRoaXMuX19kYXRhW3Byb3BlcnR5XSA9IHZhbHVlOwogICAgICAgICAgICB0aGlzLl9fZGF0YVBlbmRpbmdbcHJvcGVydHldID0gdmFsdWU7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gY2hhbmdlZDsKICAgICAgICB9CiAgICAgICAgLyogZXNsaW50LWVuYWJsZSAqLwoKICAgICAgICAvKioKICAgICAgICAgKiBNYXJrcyB0aGUgcHJvcGVydGllcyBhcyBpbnZhbGlkLCBhbmQgZW5xdWV1ZXMgYW4gYXN5bmMKICAgICAgICAgKiBgX3Byb3BlcnRpZXNDaGFuZ2VkYCBjYWxsYmFjay4KICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAgICogQHByb3RlY3RlZAogICAgICAgICAqLwogICAgICAgIF9pbnZhbGlkYXRlUHJvcGVydGllcygpIHsKICAgICAgICAgIGlmICghdGhpcy5fX2RhdGFJbnZhbGlkICYmIHRoaXMuX19kYXRhUmVhZHkpIHsKICAgICAgICAgICAgdGhpcy5fX2RhdGFJbnZhbGlkID0gdHJ1ZTsKICAgICAgICAgICAgbWljcm90YXNrLnJ1bigoKSA9PiB7CiAgICAgICAgICAgICAgaWYgKHRoaXMuX19kYXRhSW52YWxpZCkgewogICAgICAgICAgICAgICAgdGhpcy5fX2RhdGFJbnZhbGlkID0gZmFsc2U7CiAgICAgICAgICAgICAgICB0aGlzLl9mbHVzaFByb3BlcnRpZXMoKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLyoqCiAgICAgICAgICogQ2FsbCB0byBlbmFibGUgcHJvcGVydHkgYWNjZXNzb3IgcHJvY2Vzc2luZy4gQmVmb3JlIHRoaXMgbWV0aG9kIGlzCiAgICAgICAgICogY2FsbGVkIGFjY2Vzc29yIHZhbHVlcyB3aWxsIGJlIHNldCBidXQgc2lkZSBlZmZlY3RzIGFyZQogICAgICAgICAqIHF1ZXVlZC4gV2hlbiBjYWxsZWQsIGFueSBwZW5kaW5nIHNpZGUgZWZmZWN0cyBvY2N1ciBpbW1lZGlhdGVseS4KICAgICAgICAgKiBGb3IgZWxlbWVudHMsIGdlbmVyYWxseSBgY29ubmVjdGVkQ2FsbGJhY2tgIGlzIGEgbm9ybWFsIHNwb3QgdG8gZG8gc28uCiAgICAgICAgICogSXQgaXMgc2FmZSB0byBjYWxsIHRoaXMgbWV0aG9kIG11bHRpcGxlIHRpbWVzIGFzIGl0IG9ubHkgdHVybnMgb24KICAgICAgICAgKiBwcm9wZXJ0eSBhY2Nlc3NvcnMgb25jZS4KICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAgICogQHByb3RlY3RlZAogICAgICAgICAqLwogICAgICAgIF9lbmFibGVQcm9wZXJ0aWVzKCkgewogICAgICAgICAgaWYgKCF0aGlzLl9fZGF0YUVuYWJsZWQpIHsKICAgICAgICAgICAgdGhpcy5fX2RhdGFFbmFibGVkID0gdHJ1ZTsKICAgICAgICAgICAgaWYgKHRoaXMuX19kYXRhSW5zdGFuY2VQcm9wcykgewogICAgICAgICAgICAgIHRoaXMuX2luaXRpYWxpemVJbnN0YW5jZVByb3BlcnRpZXModGhpcy5fX2RhdGFJbnN0YW5jZVByb3BzKTsKICAgICAgICAgICAgICB0aGlzLl9fZGF0YUluc3RhbmNlUHJvcHMgPSBudWxsOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRoaXMucmVhZHkoKTsKICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIENhbGxzIHRoZSBgX3Byb3BlcnRpZXNDaGFuZ2VkYCBjYWxsYmFjayB3aXRoIHRoZSBjdXJyZW50IHNldCBvZgogICAgICAgICAqIHBlbmRpbmcgY2hhbmdlcyAoYW5kIG9sZCB2YWx1ZXMgcmVjb3JkZWQgd2hlbiBwZW5kaW5nIGNoYW5nZXMgd2VyZQogICAgICAgICAqIHNldCksIGFuZCByZXNldHMgdGhlIHBlbmRpbmcgc2V0IG9mIGNoYW5nZXMuIEdlbmVyYWxseSwgdGhpcyBtZXRob2QKICAgICAgICAgKiBzaG91bGQgbm90IGJlIGNhbGxlZCBpbiB1c2VyIGNvZGUuCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgICAqIEBwcm90ZWN0ZWQKICAgICAgICAgKi8KICAgICAgICBfZmx1c2hQcm9wZXJ0aWVzKCkgewogICAgICAgICAgY29uc3QgcHJvcHMgPSB0aGlzLl9fZGF0YTsKICAgICAgICAgIGNvbnN0IGNoYW5nZWRQcm9wcyA9IHRoaXMuX19kYXRhUGVuZGluZzsKICAgICAgICAgIGNvbnN0IG9sZCA9IHRoaXMuX19kYXRhT2xkOwogICAgICAgICAgaWYgKHRoaXMuX3Nob3VsZFByb3BlcnRpZXNDaGFuZ2UocHJvcHMsIGNoYW5nZWRQcm9wcywgb2xkKSkgewogICAgICAgICAgICB0aGlzLl9fZGF0YVBlbmRpbmcgPSBudWxsOwogICAgICAgICAgICB0aGlzLl9fZGF0YU9sZCA9IG51bGw7CiAgICAgICAgICAgIHRoaXMuX3Byb3BlcnRpZXNDaGFuZ2VkKHByb3BzLCBjaGFuZ2VkUHJvcHMsIG9sZCk7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBDYWxsZWQgaW4gYF9mbHVzaFByb3BlcnRpZXNgIHRvIGRldGVybWluZSBpZiBgX3Byb3BlcnRpZXNDaGFuZ2VkYAogICAgICAgICAqIHNob3VsZCBiZSBjYWxsZWQuIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgdHJ1ZSBpZgogICAgICAgICAqIHByb3BlcnRpZXMgYXJlIHBlbmRpbmcuIE92ZXJyaWRlIHRvIGN1c3RvbWl6ZSB3aGVuCiAgICAgICAgICogYF9wcm9wZXJ0aWVzQ2hhbmdlZGAgaXMgY2FsbGVkLgogICAgICAgICAqIEBwYXJhbSB7IU9iamVjdH0gY3VycmVudFByb3BzIEJhZyBvZiBhbGwgY3VycmVudCBhY2Nlc3NvciB2YWx1ZXMKICAgICAgICAgKiBAcGFyYW0geyFPYmplY3R9IGNoYW5nZWRQcm9wcyBCYWcgb2YgcHJvcGVydGllcyBjaGFuZ2VkIHNpbmNlIHRoZSBsYXN0CiAgICAgICAgICogICBjYWxsIHRvIGBfcHJvcGVydGllc0NoYW5nZWRgCiAgICAgICAgICogQHBhcmFtIHshT2JqZWN0fSBvbGRQcm9wcyBCYWcgb2YgcHJldmlvdXMgdmFsdWVzIGZvciBlYWNoIHByb3BlcnR5CiAgICAgICAgICogICBpbiBgY2hhbmdlZFByb3BzYAogICAgICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IHRydWUgaWYgY2hhbmdlZFByb3BzIGlzIHRydXRoeQogICAgICAgICAqLwogICAgICAgIF9zaG91bGRQcm9wZXJ0aWVzQ2hhbmdlKGN1cnJlbnRQcm9wcywgY2hhbmdlZFByb3BzLCBvbGRQcm9wcykgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzCiAgICAgICAgICByZXR1cm4gQm9vbGVhbihjaGFuZ2VkUHJvcHMpOwogICAgICAgIH0KCiAgICAgICAgLyoqCiAgICAgICAgICogQ2FsbGJhY2sgY2FsbGVkIHdoZW4gYW55IHByb3BlcnRpZXMgd2l0aCBhY2Nlc3NvcnMgY3JlYXRlZCB2aWEKICAgICAgICAgKiBgX2NyZWF0ZVByb3BlcnR5QWNjZXNzb3JgIGhhdmUgYmVlbiBzZXQuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0geyFPYmplY3R9IGN1cnJlbnRQcm9wcyBCYWcgb2YgYWxsIGN1cnJlbnQgYWNjZXNzb3IgdmFsdWVzCiAgICAgICAgICogQHBhcmFtIHshT2JqZWN0fSBjaGFuZ2VkUHJvcHMgQmFnIG9mIHByb3BlcnRpZXMgY2hhbmdlZCBzaW5jZSB0aGUgbGFzdAogICAgICAgICAqICAgY2FsbCB0byBgX3Byb3BlcnRpZXNDaGFuZ2VkYAogICAgICAgICAqIEBwYXJhbSB7IU9iamVjdH0gb2xkUHJvcHMgQmFnIG9mIHByZXZpb3VzIHZhbHVlcyBmb3IgZWFjaCBwcm9wZXJ0eQogICAgICAgICAqICAgaW4gYGNoYW5nZWRQcm9wc2AKICAgICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgICAqIEBwcm90ZWN0ZWQKICAgICAgICAgKi8KICAgICAgICBfcHJvcGVydGllc0NoYW5nZWQoY3VycmVudFByb3BzLCBjaGFuZ2VkUHJvcHMsIG9sZFByb3BzKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnMKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIE1ldGhvZCBjYWxsZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYSBwcm9wZXJ0eSB2YWx1ZSBzaG91bGQgYmUKICAgICAgICAgKiBjb25zaWRlcmVkIGFzIGEgY2hhbmdlIGFuZCBjYXVzZSB0aGUgYF9wcm9wZXJ0aWVzQ2hhbmdlZGAgY2FsbGJhY2sKICAgICAgICAgKiB0byBiZSBlbnF1ZXVlZC4KICAgICAgICAgKgogICAgICAgICAqIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgYHRydWVgIGlmIGEgc3RyaWN0IGVxdWFsaXR5CiAgICAgICAgICogY2hlY2sgZmFpbHMuIFRoZSBtZXRob2QgYWx3YXlzIHJldHVybnMgZmFsc2UgZm9yIGBOYU5gLgogICAgICAgICAqCiAgICAgICAgICogT3ZlcnJpZGUgdGhpcyBtZXRob2QgdG8gZS5nLiBwcm92aWRlIHN0cmljdGVyIGNoZWNraW5nIGZvcgogICAgICAgICAqIE9iamVjdHMvQXJyYXlzIHdoZW4gdXNpbmcgaW1tdXRhYmxlIHBhdHRlcm5zLgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IFByb3BlcnR5IG5hbWUKICAgICAgICAgKiBAcGFyYW0geyp9IHZhbHVlIE5ldyBwcm9wZXJ0eSB2YWx1ZQogICAgICAgICAqIEBwYXJhbSB7Kn0gb2xkIFByZXZpb3VzIHByb3BlcnR5IHZhbHVlCiAgICAgICAgICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB0aGUgcHJvcGVydHkgc2hvdWxkIGJlIGNvbnNpZGVyZWQgYSBjaGFuZ2UKICAgICAgICAgKiAgIGFuZCBlbnF1ZXVlIGEgYF9wcm9lcHJ0aWVzQ2hhbmdlZGAgY2FsbGJhY2sKICAgICAgICAgKiBAcHJvdGVjdGVkCiAgICAgICAgICovCiAgICAgICAgX3Nob3VsZFByb3BlcnR5Q2hhbmdlKHByb3BlcnR5LCB2YWx1ZSwgb2xkKSB7CiAgICAgICAgICByZXR1cm4gKAogICAgICAgICAgICAvLyBTdHJpY3QgZXF1YWxpdHkgY2hlY2sKICAgICAgICAgICAgKG9sZCAhPT0gdmFsdWUgJiYKICAgICAgICAgICAgICAvLyBUaGlzIGVuc3VyZXMgKG9sZD09TmFOLCB2YWx1ZT09TmFOKSBhbHdheXMgcmV0dXJucyBmYWxzZQogICAgICAgICAgICAgIChvbGQgPT09IG9sZCB8fCB2YWx1ZSA9PT0gdmFsdWUpKQogICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIEltcGxlbWVudHMgbmF0aXZlIEN1c3RvbSBFbGVtZW50cyBgYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrYCB0bwogICAgICAgICAqIHNldCBhbiBhdHRyaWJ1dGUgdmFsdWUgdG8gYSBwcm9wZXJ0eSB2aWEgYF9hdHRyaWJ1dGVUb1Byb3BlcnR5YC4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIE5hbWUgb2YgYXR0cmlidXRlIHRoYXQgY2hhbmdlZAogICAgICAgICAqIEBwYXJhbSB7P3N0cmluZ30gb2xkIE9sZCBhdHRyaWJ1dGUgdmFsdWUKICAgICAgICAgKiBAcGFyYW0gez9zdHJpbmd9IHZhbHVlIE5ldyBhdHRyaWJ1dGUgdmFsdWUKICAgICAgICAgKiBAcGFyYW0gez9zdHJpbmd9IG5hbWVzcGFjZSBBdHRyaWJ1dGUgbmFtZXNwYWNlLgogICAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAgICogQHN1cHByZXNzIHttaXNzaW5nUHJvcGVydGllc30gU3VwZXIgbWF5IG9yIG1heSBub3QgaW1wbGVtZW50IHRoZSBjYWxsYmFjawogICAgICAgICAqLwogICAgICAgIGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhuYW1lLCBvbGQsIHZhbHVlLCBuYW1lc3BhY2UpIHsKICAgICAgICAgIGlmIChvbGQgIT09IHZhbHVlKSB7CiAgICAgICAgICAgIHRoaXMuX2F0dHJpYnV0ZVRvUHJvcGVydHkobmFtZSwgdmFsdWUpOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHN1cGVyLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaykgewogICAgICAgICAgICBzdXBlci5hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2sobmFtZSwgb2xkLCB2YWx1ZSwgbmFtZXNwYWNlKTsKICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIERlc2VyaWFsaXplcyBhbiBhdHRyaWJ1dGUgdG8gaXRzIGFzc29jaWF0ZWQgcHJvcGVydHkuCiAgICAgICAgICoKICAgICAgICAgKiBUaGlzIG1ldGhvZCBjYWxscyB0aGUgYF9kZXNlcmlhbGl6ZVZhbHVlYCBtZXRob2QgdG8gY29udmVydCB0aGUgc3RyaW5nIHRvCiAgICAgICAgICogYSB0eXBlZCB2YWx1ZS4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBhdHRyaWJ1dGUgTmFtZSBvZiBhdHRyaWJ1dGUgdG8gZGVzZXJpYWxpemUuCiAgICAgICAgICogQHBhcmFtIHs/c3RyaW5nfSB2YWx1ZSBvZiB0aGUgYXR0cmlidXRlLgogICAgICAgICAqIEBwYXJhbSB7Kj19IHR5cGUgdHlwZSB0byBkZXNlcmlhbGl6ZSB0bywgZGVmYXVsdHMgdG8gdGhlIHZhbHVlCiAgICAgICAgICogcmV0dXJuZWQgZnJvbSBgdHlwZUZvclByb3BlcnR5YAogICAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAgICovCiAgICAgICAgX2F0dHJpYnV0ZVRvUHJvcGVydHkoYXR0cmlidXRlLCB2YWx1ZSwgdHlwZSkgewogICAgICAgICAgaWYgKCF0aGlzLl9fc2VyaWFsaXppbmcpIHsKICAgICAgICAgICAgY29uc3QgbWFwID0gdGhpcy5fX2RhdGFBdHRyaWJ1dGVzOwogICAgICAgICAgICBjb25zdCBwcm9wZXJ0eSA9IG1hcCAmJiBtYXBbYXR0cmlidXRlXSB8fCBhdHRyaWJ1dGU7CiAgICAgICAgICAgIHRoaXNbcHJvcGVydHldID0gdGhpcy5fZGVzZXJpYWxpemVWYWx1ZSh2YWx1ZSwgdHlwZSB8fAogICAgICAgICAgICAgIHRoaXMuY29uc3RydWN0b3IudHlwZUZvclByb3BlcnR5KHByb3BlcnR5KSk7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBTZXJpYWxpemVzIGEgcHJvcGVydHkgdG8gaXRzIGFzc29jaWF0ZWQgYXR0cmlidXRlLgogICAgICAgICAqCiAgICAgICAgICogQHN1cHByZXNzIHtpbnZhbGlkQ2FzdHN9IENsb3N1cmUgY2FuJ3QgZmlndXJlIG91dCBgdGhpc2AgaXMgYW4gZWxlbWVudC4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eSBQcm9wZXJ0eSBuYW1lIHRvIHJlZmxlY3QuCiAgICAgICAgICogQHBhcmFtIHtzdHJpbmc9fSBhdHRyaWJ1dGUgQXR0cmlidXRlIG5hbWUgdG8gcmVmbGVjdCB0by4KICAgICAgICAgKiBAcGFyYW0geyo9fSB2YWx1ZSBQcm9wZXJ0eSB2YWx1ZSB0byByZWZlY3QuCiAgICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICAgKi8KICAgICAgICBfcHJvcGVydHlUb0F0dHJpYnV0ZShwcm9wZXJ0eSwgYXR0cmlidXRlLCB2YWx1ZSkgewogICAgICAgICAgdGhpcy5fX3NlcmlhbGl6aW5nID0gdHJ1ZTsKICAgICAgICAgIHZhbHVlID0gKGFyZ3VtZW50cy5sZW5ndGggPCAzKSA/IHRoaXNbcHJvcGVydHldIDogdmFsdWU7CiAgICAgICAgICB0aGlzLl92YWx1ZVRvTm9kZUF0dHJpYnV0ZSgvKiogQHR5cGUgeyFIVE1MRWxlbWVudH0gKi8odGhpcyksIHZhbHVlLAogICAgICAgICAgICBhdHRyaWJ1dGUgfHwgdGhpcy5jb25zdHJ1Y3Rvci5hdHRyaWJ1dGVOYW1lRm9yUHJvcGVydHkocHJvcGVydHkpKTsKICAgICAgICAgIHRoaXMuX19zZXJpYWxpemluZyA9IGZhbHNlOwogICAgICAgIH0KCiAgICAgICAgLyoqCiAgICAgICAgICogU2V0cyBhIHR5cGVkIHZhbHVlIHRvIGFuIEhUTUwgYXR0cmlidXRlIG9uIGEgbm9kZS4KICAgICAgICAgKgogICAgICAgICAqIFRoaXMgbWV0aG9kIGNhbGxzIHRoZSBgX3NlcmlhbGl6ZVZhbHVlYCBtZXRob2QgdG8gY29udmVydCB0aGUgdHlwZWQKICAgICAgICAgKiB2YWx1ZSB0byBhIHN0cmluZy4gIElmIHRoZSBgX3NlcmlhbGl6ZVZhbHVlYCBtZXRob2QgcmV0dXJucyBgdW5kZWZpbmVkYCwKICAgICAgICAgKiB0aGUgYXR0cmlidXRlIHdpbGwgYmUgcmVtb3ZlZCAodGhpcyBpcyB0aGUgZGVmYXVsdCBmb3IgYm9vbGVhbgogICAgICAgICAqIHR5cGUgYGZhbHNlYCkuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IG5vZGUgRWxlbWVudCB0byBzZXQgYXR0cmlidXRlIHRvLgogICAgICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVmFsdWUgdG8gc2VyaWFsaXplLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBhdHRyaWJ1dGUgQXR0cmlidXRlIG5hbWUgdG8gc2VyaWFsaXplIHRvLgogICAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAgICovCiAgICAgICAgX3ZhbHVlVG9Ob2RlQXR0cmlidXRlKG5vZGUsIHZhbHVlLCBhdHRyaWJ1dGUpIHsKICAgICAgICAgIGNvbnN0IHN0ciA9IHRoaXMuX3NlcmlhbGl6ZVZhbHVlKHZhbHVlKTsKICAgICAgICAgIGlmIChzdHIgPT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICBub2RlLnJlbW92ZUF0dHJpYnV0ZShhdHRyaWJ1dGUpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoYXR0cmlidXRlLCBzdHIpOwogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLyoqCiAgICAgICAgICogQ29udmVydHMgYSB0eXBlZCBKYXZhU2NyaXB0IHZhbHVlIHRvIGEgc3RyaW5nLgogICAgICAgICAqCiAgICAgICAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW4gc2V0dGluZyBKUyBwcm9wZXJ0eSB2YWx1ZXMgdG8KICAgICAgICAgKiBIVE1MIGF0dHJpYnV0ZXMuICBVc2VycyBtYXkgb3ZlcnJpZGUgdGhpcyBtZXRob2QgdG8gcHJvdmlkZQogICAgICAgICAqIHNlcmlhbGl6YXRpb24gZm9yIGN1c3RvbSB0eXBlcy4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgUHJvcGVydHkgdmFsdWUgdG8gc2VyaWFsaXplLgogICAgICAgICAqIEByZXR1cm4ge3N0cmluZyB8IHVuZGVmaW5lZH0gU3RyaW5nIHNlcmlhbGl6ZWQgZnJvbSB0aGUgcHJvdmlkZWQKICAgICAgICAgKiBwcm9wZXJ0eSAgdmFsdWUuCiAgICAgICAgICovCiAgICAgICAgX3NlcmlhbGl6ZVZhbHVlKHZhbHVlKSB7CiAgICAgICAgICBzd2l0Y2ggKHR5cGVvZiB2YWx1ZSkgewogICAgICAgICAgICBjYXNlICdib29sZWFuJzoKICAgICAgICAgICAgICByZXR1cm4gdmFsdWUgPyAnJyA6IHVuZGVmaW5lZDsKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICByZXR1cm4gdmFsdWUgIT0gbnVsbCA/IHZhbHVlLnRvU3RyaW5nKCkgOiB1bmRlZmluZWQ7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBDb252ZXJ0cyBhIHN0cmluZyB0byBhIHR5cGVkIEphdmFTY3JpcHQgdmFsdWUuCiAgICAgICAgICoKICAgICAgICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbiByZWFkaW5nIEhUTUwgYXR0cmlidXRlIHZhbHVlcyB0bwogICAgICAgICAqIEpTIHByb3BlcnRpZXMuICBVc2VycyBtYXkgb3ZlcnJpZGUgdGhpcyBtZXRob2QgdG8gcHJvdmlkZQogICAgICAgICAqIGRlc2VyaWFsaXphdGlvbiBmb3IgY3VzdG9tIGB0eXBlYHMuIFR5cGVzIGZvciBgQm9vbGVhbmAsIGBTdHJpbmdgLAogICAgICAgICAqIGFuZCBgTnVtYmVyYCBjb252ZXJ0IGF0dHJpYnV0ZXMgdG8gdGhlIGV4cGVjdGVkIHR5cGVzLgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHs/c3RyaW5nfSB2YWx1ZSBWYWx1ZSB0byBkZXNlcmlhbGl6ZS4KICAgICAgICAgKiBAcGFyYW0geyo9fSB0eXBlIFR5cGUgdG8gZGVzZXJpYWxpemUgdGhlIHN0cmluZyB0by4KICAgICAgICAgKiBAcmV0dXJuIHsqfSBUeXBlZCB2YWx1ZSBkZXNlcmlhbGl6ZWQgZnJvbSB0aGUgcHJvdmlkZWQgc3RyaW5nLgogICAgICAgICAqLwogICAgICAgIF9kZXNlcmlhbGl6ZVZhbHVlKHZhbHVlLCB0eXBlKSB7CiAgICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICAgICAgICAgY2FzZSBCb29sZWFuOgogICAgICAgICAgICAgIHJldHVybiAodmFsdWUgIT09IG51bGwpOwogICAgICAgICAgICBjYXNlIE51bWJlcjoKICAgICAgICAgICAgICByZXR1cm4gTnVtYmVyKHZhbHVlKTsKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgfQoKICAgICAgcmV0dXJuIFByb3BlcnRpZXNDaGFuZ2VkOwogICAgfSk7CgoKICB9KSgpOwoKPC9zY3JpcHQ+PHNjcmlwdD4KKGZ1bmN0aW9uKCkgewoKICAndXNlIHN0cmljdCc7CgogIGxldCBjYXNlTWFwID0gUG9seW1lci5DYXNlTWFwOwoKICAvLyBTYXZlIG1hcCBvZiBuYXRpdmUgcHJvcGVydGllczsgdGhpcyBmb3JtcyBhIGJsYWNrbGlzdCBvciBwcm9wZXJ0aWVzCiAgLy8gdGhhdCB3b24ndCBoYXZlIHRoZWlyIHZhbHVlcyAic2F2ZWQiIGJ5IGBzYXZlQWNjZXNzb3JWYWx1ZWAsIHNpbmNlCiAgLy8gcmVhZGluZyBmcm9tIGFuIEhUTUxFbGVtZW50IGFjY2Vzc29yIGZyb20gdGhlIGNvbnRleHQgb2YgYSBwcm90b3R5cGUgdGhyb3dzCiAgY29uc3QgbmF0aXZlUHJvcGVydGllcyA9IHt9OwogIGxldCBwcm90byA9IEhUTUxFbGVtZW50LnByb3RvdHlwZTsKICB3aGlsZSAocHJvdG8pIHsKICAgIGxldCBwcm9wcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHByb3RvKTsKICAgIGZvciAobGV0IGk9MDsgaTxwcm9wcy5sZW5ndGg7IGkrKykgewogICAgICBuYXRpdmVQcm9wZXJ0aWVzW3Byb3BzW2ldXSA9IHRydWU7CiAgICB9CiAgICBwcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihwcm90byk7CiAgfQoKICAvKioKICAgKiBVc2VkIHRvIHNhdmUgdGhlIHZhbHVlIG9mIGEgcHJvcGVydHkgdGhhdCB3aWxsIGJlIG92ZXJyaWRkZW4gd2l0aAogICAqIGFuIGFjY2Vzc29yLiBJZiB0aGUgYG1vZGVsYCBpcyBhIHByb3RvdHlwZSwgdGhlIHZhbHVlcyB3aWxsIGJlIHNhdmVkCiAgICogaW4gYF9fZGF0YVByb3RvYCwgYW5kIGl0J3MgdXAgdG8gdGhlIHVzZXIgKG9yIGRvd25zdHJlYW0gbWl4aW4pIHRvCiAgICogZGVjaWRlIGhvdy93aGVuIHRvIHNldCB0aGVzZSB2YWx1ZXMgYmFjayBpbnRvIHRoZSBhY2Nlc3NvcnMuCiAgICogSWYgYG1vZGVsYCBpcyBhbHJlYWR5IGFuIGluc3RhbmNlIChpdCBoYXMgYSBgX19kYXRhYCBwcm9wZXJ0eSksIHRoZW4KICAgKiB0aGUgdmFsdWUgd2lsbCBiZSBzZXQgYXMgYSBwZW5kaW5nIHByb3BlcnR5LCBtZWFuaW5nIHRoZSB1c2VyIHNob3VsZAogICAqIGNhbGwgYF9pbnZhbGlkYXRlUHJvcGVydGllc2Agb3IgYF9mbHVzaFByb3BlcnRpZXNgIHRvIHRha2UgZWZmZWN0CiAgICoKICAgKiBAcGFyYW0ge09iamVjdH0gbW9kZWwgUHJvdG90eXBlIG9yIGluc3RhbmNlCiAgICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IE5hbWUgb2YgcHJvcGVydHkKICAgKiBAcmV0dXJuIHt2b2lkfQogICAqIEBwcml2YXRlCiAgICovCiAgZnVuY3Rpb24gc2F2ZUFjY2Vzc29yVmFsdWUobW9kZWwsIHByb3BlcnR5KSB7CiAgICAvLyBEb24ndCByZWFkL3N0b3JlIHZhbHVlIGZvciBhbnkgbmF0aXZlIHByb3BlcnRpZXMgc2luY2UgdGhleSBjb3VsZCB0aHJvdwogICAgaWYgKCFuYXRpdmVQcm9wZXJ0aWVzW3Byb3BlcnR5XSkgewogICAgICBsZXQgdmFsdWUgPSBtb2RlbFtwcm9wZXJ0eV07CiAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7CiAgICAgICAgaWYgKG1vZGVsLl9fZGF0YSkgewogICAgICAgICAgLy8gQWRkaW5nIGFjY2Vzc29yIHRvIGluc3RhbmNlOyB1cGRhdGUgdGhlIHByb3BlcnR5CiAgICAgICAgICAvLyBJdCBpcyB0aGUgdXNlcidzIHJlc3BvbnNpYmlsaXR5IHRvIGNhbGwgX2ZsdXNoUHJvcGVydGllcwogICAgICAgICAgbW9kZWwuX3NldFBlbmRpbmdQcm9wZXJ0eShwcm9wZXJ0eSwgdmFsdWUpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAvLyBBZGRpbmcgYWNjZXNzb3IgdG8gcHJvdG87IHNhdmUgcHJvdG8ncyB2YWx1ZSBmb3IgaW5zdGFuY2UtdGltZSB1c2UKICAgICAgICAgIGlmICghbW9kZWwuX19kYXRhUHJvdG8pIHsKICAgICAgICAgICAgbW9kZWwuX19kYXRhUHJvdG8gPSB7fTsKICAgICAgICAgIH0gZWxzZSBpZiAoIW1vZGVsLmhhc093blByb3BlcnR5KEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoJ19fZGF0YVByb3RvJywgbW9kZWwpKSkgewogICAgICAgICAgICBtb2RlbC5fX2RhdGFQcm90byA9IE9iamVjdC5jcmVhdGUobW9kZWwuX19kYXRhUHJvdG8pOwogICAgICAgICAgfQogICAgICAgICAgbW9kZWwuX19kYXRhUHJvdG9bcHJvcGVydHldID0gdmFsdWU7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQoKICAvKioKICAgKiBFbGVtZW50IGNsYXNzIG1peGluIHRoYXQgcHJvdmlkZXMgYmFzaWMgbWV0YS1wcm9ncmFtbWluZyBmb3IgY3JlYXRpbmcgb25lCiAgICogb3IgbW9yZSBwcm9wZXJ0eSBhY2Nlc3NvcnMgKGdldHRlci9zZXR0ZXIgcGFpcikgdGhhdCBlbnF1ZXVlIGFuIGFzeW5jCiAgICogKGJhdGNoZWQpIGBfcHJvcGVydGllc0NoYW5nZWRgIGNhbGxiYWNrLgogICAqCiAgICogRm9yIGJhc2ljIHVzYWdlIG9mIHRoaXMgbWl4aW46CiAgICogCiAgICogLSAgIERlY2xhcmUgYXR0cmlidXRlcyB0byBvYnNlcnZlIHZpYSB0aGUgc3RhbmRhcmQgYHN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKClgLiBVc2UKICAgKiAgICAgYGRhc2gtY2FzZWAgYXR0cmlidXRlIG5hbWVzIHRvIHJlcHJlc2VudCBgY2FtZWxDYXNlYCBwcm9wZXJ0eSBuYW1lcy4gCiAgICogLSAgIEltcGxlbWVudCB0aGUgYF9wcm9wZXJ0aWVzQ2hhbmdlZGAgY2FsbGJhY2sgb24gdGhlIGNsYXNzLgogICAqIC0gICBDYWxsIGBNeUNsYXNzLmNyZWF0ZVByb3BlcnRpZXNGb3JBdHRyaWJ1dGVzKClgICoqb25jZSoqIG9uIHRoZSBjbGFzcyB0byBnZW5lcmF0ZSAKICAgKiAgICAgcHJvcGVydHkgYWNjZXNzb3JzIGZvciBlYWNoIG9ic2VydmVkIGF0dHJpYnV0ZS4gVGhpcyBtdXN0IGJlIGNhbGxlZCBiZWZvcmUgdGhlIGZpcnN0IAogICAqICAgICBpbnN0YW5jZSBpcyBjcmVhdGVkLCBmb3IgZXhhbXBsZSwgYnkgY2FsbGluZyBpdCBiZWZvcmUgY2FsbGluZyBgY3VzdG9tRWxlbWVudHMuZGVmaW5lYC4KICAgKiAgICAgSXQgY2FuIGFsc28gYmUgY2FsbGVkIGxhemlseSBmcm9tIHRoZSBlbGVtZW50J3MgYGNvbnN0cnVjdG9yYCwgYXMgbG9uZyBhcyBpdCdzIGd1YXJkZWQgc28KICAgKiAgICAgdGhhdCB0aGUgY2FsbCBpcyBvbmx5IG1hZGUgb25jZSwgd2hlbiB0aGUgZmlyc3QgaW5zdGFuY2UgaXMgY3JlYXRlZC4KICAgKiAtICAgQ2FsbCBgdGhpcy5fZW5hYmxlUHJvcGVydGllcygpYCBpbiB0aGUgZWxlbWVudCdzIGBjb25uZWN0ZWRDYWxsYmFja2AgdG8gZW5hYmxlIAogICAqICAgICB0aGUgYWNjZXNzb3JzLgogICAqCiAgICogQW55IGBvYnNlcnZlZEF0dHJpYnV0ZXNgIHdpbGwgYXV0b21hdGljYWxseSBiZQogICAqIGRlc2VyaWFsaXplZCB2aWEgYGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFja2AgYW5kIHNldCB0byB0aGUgYXNzb2NpYXRlZAogICAqIHByb3BlcnR5IHVzaW5nIGBkYXNoLWNhc2VgLXRvLWBjYW1lbENhc2VgIGNvbnZlbnRpb24uCiAgICoKICAgKiBAbWl4aW5GdW5jdGlvbgogICAqIEBwb2x5bWVyCiAgICogQGFwcGxpZXNNaXhpbiBQb2x5bWVyLlByb3BlcnRpZXNDaGFuZ2VkCiAgICogQG1lbWJlcm9mIFBvbHltZXIKICAgKiBAc3VtbWFyeSBFbGVtZW50IGNsYXNzIG1peGluIGZvciByZWFjdGluZyB0byBwcm9wZXJ0eSBjaGFuZ2VzIGZyb20KICAgKiAgIGdlbmVyYXRlZCBwcm9wZXJ0eSBhY2Nlc3NvcnMuCiAgICovCiAgUG9seW1lci5Qcm9wZXJ0eUFjY2Vzc29ycyA9IFBvbHltZXIuZGVkdXBpbmdNaXhpbihzdXBlckNsYXNzID0+IHsKCiAgICAvKioKICAgICAqIEBjb25zdHJ1Y3RvcgogICAgICogQGV4dGVuZHMge3N1cGVyQ2xhc3N9CiAgICAgKiBAaW1wbGVtZW50cyB7UG9seW1lcl9Qcm9wZXJ0aWVzQ2hhbmdlZH0KICAgICAqIEB1bnJlc3RyaWN0ZWQKICAgICAqIEBwcml2YXRlCiAgICAgKi8KICAgICBjb25zdCBiYXNlID0gUG9seW1lci5Qcm9wZXJ0aWVzQ2hhbmdlZChzdXBlckNsYXNzKTsKCiAgICAvKioKICAgICAqIEBwb2x5bWVyCiAgICAgKiBAbWl4aW5DbGFzcwogICAgICogQGltcGxlbWVudHMge1BvbHltZXJfUHJvcGVydHlBY2Nlc3NvcnN9CiAgICAgKiBAZXh0ZW5kcyB7YmFzZX0KICAgICAqIEB1bnJlc3RyaWN0ZWQKICAgICAqLwogICAgY2xhc3MgUHJvcGVydHlBY2Nlc3NvcnMgZXh0ZW5kcyBiYXNlIHsKCiAgICAgIC8qKgogICAgICAgKiBHZW5lcmF0ZXMgcHJvcGVydHkgYWNjZXNzb3JzIGZvciBhbGwgYXR0cmlidXRlcyBpbiB0aGUgc3RhbmRhcmQKICAgICAgICogc3RhdGljIGBvYnNlcnZlZEF0dHJpYnV0ZXNgIGFycmF5LgogICAgICAgKgogICAgICAgKiBBdHRyaWJ1dGUgbmFtZXMgYXJlIG1hcHBlZCB0byBwcm9wZXJ0eSBuYW1lcyB1c2luZyB0aGUgYGRhc2gtY2FzZWAgdG8KICAgICAgICogYGNhbWVsQ2FzZWAgY29udmVudGlvbgogICAgICAgKgogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKi8KICAgICAgc3RhdGljIGNyZWF0ZVByb3BlcnRpZXNGb3JBdHRyaWJ1dGVzKCkgewogICAgICAgIGxldCBhJCA9IHRoaXMub2JzZXJ2ZWRBdHRyaWJ1dGVzOwogICAgICAgIGZvciAobGV0IGk9MDsgaSA8IGEkLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICB0aGlzLnByb3RvdHlwZS5fY3JlYXRlUHJvcGVydHlBY2Nlc3NvcihjYXNlTWFwLmRhc2hUb0NhbWVsQ2FzZShhJFtpXSkpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIFJldHVybnMgYW4gYXR0cmlidXRlIG5hbWUgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgZ2l2ZW4gcHJvcGVydHkuCiAgICAgICAqIEJ5IGRlZmF1bHQsIGNvbnZlcnRzIGNhbWVsIHRvIGRhc2ggY2FzZSwgZS5nLiBgZm9vQmFyYCB0byBgZm9vLWJhcmAuCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eSBQcm9wZXJ0eSB0byBjb252ZXJ0CiAgICAgICAqIEByZXR1cm4ge3N0cmluZ30gQXR0cmlidXRlIG5hbWUgY29ycmVzcG9uZGluZyB0byB0aGUgZ2l2ZW4gcHJvcGVydHkuCiAgICAgICAqCiAgICAgICAqIEBwcm90ZWN0ZWQKICAgICAgICovCiAgICAgIHN0YXRpYyBhdHRyaWJ1dGVOYW1lRm9yUHJvcGVydHkocHJvcGVydHkpIHsKICAgICAgICByZXR1cm4gY2FzZU1hcC5jYW1lbFRvRGFzaENhc2UocHJvcGVydHkpOwogICAgICB9CgogICAgICAvKioKICAgICAgICogT3ZlcnJpZGVzIFByb3BlcnRpZXNDaGFuZ2VkIGltcGxlbWVudGF0aW9uIHRvIGluaXRpYWxpemUgdmFsdWVzIGZvcgogICAgICAgKiBhY2Nlc3NvcnMgY3JlYXRlZCBmb3IgdmFsdWVzIHRoYXQgYWxyZWFkeSBleGlzdGVkIG9uIHRoZSBlbGVtZW50CiAgICAgICAqIHByb3RvdHlwZS4KICAgICAgICoKICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICogQHByb3RlY3RlZAogICAgICAgKi8KICAgICAgX2luaXRpYWxpemVQcm9wZXJ0aWVzKCkgewogICAgICAgIGlmICh0aGlzLl9fZGF0YVByb3RvKSB7CiAgICAgICAgICB0aGlzLl9pbml0aWFsaXplUHJvdG9Qcm9wZXJ0aWVzKHRoaXMuX19kYXRhUHJvdG8pOwogICAgICAgICAgdGhpcy5fX2RhdGFQcm90byA9IG51bGw7CiAgICAgICAgfQogICAgICAgIHN1cGVyLl9pbml0aWFsaXplUHJvcGVydGllcygpOwogICAgICB9CgogICAgICAvKioKICAgICAgICogQ2FsbGVkIGF0IGluc3RhbmNlIHRpbWUgd2l0aCBiYWcgb2YgcHJvcGVydGllcyB0aGF0IHdlcmUgb3ZlcndyaXR0ZW4KICAgICAgICogYnkgYWNjZXNzb3JzIG9uIHRoZSBwcm90b3R5cGUgd2hlbiBhY2Nlc3NvcnMgd2VyZSBjcmVhdGVkLgogICAgICAgKgogICAgICAgKiBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBzZXRzIHRoZXNlIHByb3BlcnRpZXMgYmFjayBpbnRvIHRoZQogICAgICAgKiBzZXR0ZXIgYXQgaW5zdGFuY2UgdGltZS4gIFRoaXMgbWV0aG9kIGlzIHByb3ZpZGVkIGFzIGFuIG92ZXJyaWRlCiAgICAgICAqIHBvaW50IGZvciBjdXN0b21pemluZyBvciBwcm92aWRpbmcgbW9yZSBlZmZpY2llbnQgaW5pdGlhbGl6YXRpb24uCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wcyBCYWcgb2YgcHJvcGVydHkgdmFsdWVzIHRoYXQgd2VyZSBvdmVyd3JpdHRlbgogICAgICAgKiAgIHdoZW4gY3JlYXRpbmcgcHJvcGVydHkgYWNjZXNzb3JzLgogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKiBAcHJvdGVjdGVkCiAgICAgICAqLwogICAgICBfaW5pdGlhbGl6ZVByb3RvUHJvcGVydGllcyhwcm9wcykgewogICAgICAgIGZvciAobGV0IHAgaW4gcHJvcHMpIHsKICAgICAgICAgIHRoaXMuX3NldFByb3BlcnR5KHAsIHByb3BzW3BdKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBFbnN1cmVzIHRoZSBlbGVtZW50IGhhcyB0aGUgZ2l2ZW4gYXR0cmlidXRlLiBJZiBpdCBkb2VzIG5vdCwKICAgICAgICogYXNzaWducyB0aGUgZ2l2ZW4gdmFsdWUgdG8gdGhlIGF0dHJpYnV0ZS4KICAgICAgICoKICAgICAgICogQHN1cHByZXNzIHtpbnZhbGlkQ2FzdHN9IENsb3N1cmUgY2FuJ3QgZmlndXJlIG91dCBgdGhpc2AgaXMgaW5mYWN0IGFuIGVsZW1lbnQKICAgICAgICoKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IGF0dHJpYnV0ZSBOYW1lIG9mIGF0dHJpYnV0ZSB0byBlbnN1cmUgaXMgc2V0LgogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gdmFsdWUgb2YgdGhlIGF0dHJpYnV0ZS4KICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICovCiAgICAgIF9lbnN1cmVBdHRyaWJ1dGUoYXR0cmlidXRlLCB2YWx1ZSkgewogICAgICAgIGNvbnN0IGVsID0gLyoqIEB0eXBlIHshSFRNTEVsZW1lbnR9ICovKHRoaXMpOwogICAgICAgIGlmICghZWwuaGFzQXR0cmlidXRlKGF0dHJpYnV0ZSkpIHsKICAgICAgICAgIHRoaXMuX3ZhbHVlVG9Ob2RlQXR0cmlidXRlKGVsLCB2YWx1ZSwgYXR0cmlidXRlKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBPdmVycmlkZXMgUHJvcGVydGllc0NoYW5nZWQgaW1wbGVtZW50aW9uIHRvIHNlcmlhbGl6ZSBvYmplY3RzIGFzIEpTT04uCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgUHJvcGVydHkgdmFsdWUgdG8gc2VyaWFsaXplLgogICAgICAgKiBAcmV0dXJuIHtzdHJpbmcgfCB1bmRlZmluZWR9IFN0cmluZyBzZXJpYWxpemVkIGZyb20gdGhlIHByb3ZpZGVkIHByb3BlcnR5IHZhbHVlLgogICAgICAgKi8KICAgICAgX3NlcmlhbGl6ZVZhbHVlKHZhbHVlKSB7CiAgICAgICAgLyogZXNsaW50LWRpc2FibGUgbm8tZmFsbHRocm91Z2ggKi8KICAgICAgICBzd2l0Y2ggKHR5cGVvZiB2YWx1ZSkgewogICAgICAgICAgY2FzZSAnb2JqZWN0JzoKICAgICAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkgewogICAgICAgICAgICAgIHJldHVybiB2YWx1ZS50b1N0cmluZygpOwogICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlKSB7CiAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7CiAgICAgICAgICAgICAgfSBjYXRjaCh4KSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJyc7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgcmV0dXJuIHN1cGVyLl9zZXJpYWxpemVWYWx1ZSh2YWx1ZSk7CiAgICAgICAgfQogICAgICB9CgogICAgICAvKioKICAgICAgICogQ29udmVydHMgYSBzdHJpbmcgdG8gYSB0eXBlZCBKYXZhU2NyaXB0IHZhbHVlLgogICAgICAgKgogICAgICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgUG9seW1lciB3aGVuIHJlYWRpbmcgSFRNTCBhdHRyaWJ1dGUgdmFsdWVzIHRvCiAgICAgICAqIEpTIHByb3BlcnRpZXMuICBVc2VycyBtYXkgb3ZlcnJpZGUgdGhpcyBtZXRob2Qgb24gUG9seW1lciBlbGVtZW50CiAgICAgICAqIHByb3RvdHlwZXMgdG8gcHJvdmlkZSBkZXNlcmlhbGl6YXRpb24gZm9yIGN1c3RvbSBgdHlwZWBzLiAgTm90ZSwKICAgICAgICogdGhlIGB0eXBlYCBhcmd1bWVudCBpcyB0aGUgdmFsdWUgb2YgdGhlIGB0eXBlYCBmaWVsZCBwcm92aWRlZCBpbiB0aGUKICAgICAgICogYHByb3BlcnRpZXNgIGNvbmZpZ3VyYXRpb24gb2JqZWN0IGZvciBhIGdpdmVuIHByb3BlcnR5LCBhbmQgaXMKICAgICAgICogYnkgY29udmVudGlvbiB0aGUgY29uc3RydWN0b3IgZm9yIHRoZSB0eXBlIHRvIGRlc2VyaWFsaXplLgogICAgICAgKgogICAgICAgKgogICAgICAgKiBAcGFyYW0gez9zdHJpbmd9IHZhbHVlIEF0dHJpYnV0ZSB2YWx1ZSB0byBkZXNlcmlhbGl6ZS4KICAgICAgICogQHBhcmFtIHsqPX0gdHlwZSBUeXBlIHRvIGRlc2VyaWFsaXplIHRoZSBzdHJpbmcgdG8uCiAgICAgICAqIEByZXR1cm4geyp9IFR5cGVkIHZhbHVlIGRlc2VyaWFsaXplZCBmcm9tIHRoZSBwcm92aWRlZCBzdHJpbmcuCiAgICAgICAqLwogICAgICBfZGVzZXJpYWxpemVWYWx1ZSh2YWx1ZSwgdHlwZSkgewogICAgICAgIC8qKgogICAgICAgICAqIEB0eXBlIHsqfQogICAgICAgICAqLwogICAgICAgIGxldCBvdXRWYWx1ZTsKICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICAgICAgIGNhc2UgT2JqZWN0OgogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgIG91dFZhbHVlID0gSlNPTi5wYXJzZSgvKiogQHR5cGUge3N0cmluZ30gKi8odmFsdWUpKTsKICAgICAgICAgICAgfSBjYXRjaCh4KSB7CiAgICAgICAgICAgICAgLy8gYWxsb3cgbm9uLUpTT04gbGl0ZXJhbHMgbGlrZSBTdHJpbmdzIGFuZCBOdW1iZXJzCiAgICAgICAgICAgICAgb3V0VmFsdWUgPSB2YWx1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgQXJyYXk6CiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgb3V0VmFsdWUgPSBKU09OLnBhcnNlKC8qKiBAdHlwZSB7c3RyaW5nfSAqLyh2YWx1ZSkpOwogICAgICAgICAgICB9IGNhdGNoKHgpIHsKICAgICAgICAgICAgICBvdXRWYWx1ZSA9IG51bGw7CiAgICAgICAgICAgICAgY29uc29sZS53YXJuKGBQb2x5bWVyOjpBdHRyaWJ1dGVzOiBjb3VsZG4ndCBkZWNvZGUgQXJyYXkgYXMgSlNPTjogJHt2YWx1ZX1gKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgRGF0ZToKICAgICAgICAgICAgb3V0VmFsdWUgPSBpc05hTih2YWx1ZSkgPyBTdHJpbmcodmFsdWUpIDogTnVtYmVyKHZhbHVlKTsKICAgICAgICAgICAgb3V0VmFsdWUgPSBuZXcgRGF0ZShvdXRWYWx1ZSk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgb3V0VmFsdWUgPSBzdXBlci5fZGVzZXJpYWxpemVWYWx1ZSh2YWx1ZSwgdHlwZSk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICByZXR1cm4gb3V0VmFsdWU7CiAgICAgIH0KICAgICAgLyogZXNsaW50LWVuYWJsZSBuby1mYWxsdGhyb3VnaCAqLwoKICAgICAgLyoqCiAgICAgICAqIE92ZXJyaWRlcyBQcm9wZXJ0aWVzQ2hhbmdlZCBpbXBsZW1lbnRhdGlvbiB0byBzYXZlIGV4aXN0aW5nIHByb3RvdHlwZQogICAgICAgKiBwcm9wZXJ0eSB2YWx1ZSBzbyB0aGF0IGl0IGNhbiBiZSByZXNldC4KICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IE5hbWUgb2YgdGhlIHByb3BlcnR5CiAgICAgICAqIEBwYXJhbSB7Ym9vbGVhbj19IHJlYWRPbmx5IFdoZW4gdHJ1ZSwgbm8gc2V0dGVyIGlzIGNyZWF0ZWQKICAgICAgICoKICAgICAgICogV2hlbiBjYWxsaW5nIG9uIGEgcHJvdG90eXBlLCBhbnkgb3ZlcndyaXR0ZW4gdmFsdWVzIGFyZSBzYXZlZCBpbgogICAgICAgKiBgX19kYXRhUHJvdG9gLCBhbmQgaXQgaXMgdXAgdG8gdGhlIHN1YmNsYXNzZXIgdG8gZGVjaWRlIGhvdy93aGVuCiAgICAgICAqIHRvIHNldCB0aG9zZSBwcm9wZXJ0aWVzIGJhY2sgaW50byB0aGUgYWNjZXNzb3IuICBXaGVuIGNhbGxpbmcgb24gYW4KICAgICAgICogaW5zdGFuY2UsIHRoZSBvdmVyd3JpdHRlbiB2YWx1ZSBpcyBzZXQgdmlhIGBfc2V0UGVuZGluZ1Byb3BlcnR5YCwKICAgICAgICogYW5kIHRoZSB1c2VyIHNob3VsZCBjYWxsIGBfaW52YWxpZGF0ZVByb3BlcnRpZXNgIG9yIGBfZmx1c2hQcm9wZXJ0aWVzYAogICAgICAgKiBmb3IgdGhlIHZhbHVlcyB0byB0YWtlIGVmZmVjdC4KICAgICAgICogQHByb3RlY3RlZAogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKi8KICAgICAgX2RlZmluZVByb3BlcnR5QWNjZXNzb3IocHJvcGVydHksIHJlYWRPbmx5KSB7CiAgICAgICAgc2F2ZUFjY2Vzc29yVmFsdWUodGhpcywgcHJvcGVydHkpOwogICAgICAgIHN1cGVyLl9kZWZpbmVQcm9wZXJ0eUFjY2Vzc29yKHByb3BlcnR5LCByZWFkT25seSk7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhpcyBsaWJyYXJ5IGNyZWF0ZWQgYW4gYWNjZXNzb3IgZm9yIHRoZSBnaXZlbiBwcm9wZXJ0eS4KICAgICAgICoKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IFByb3BlcnR5IG5hbWUKICAgICAgICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiBhbiBhY2Nlc3NvciB3YXMgY3JlYXRlZAogICAgICAgKi8KICAgICAgX2hhc0FjY2Vzc29yKHByb3BlcnR5KSB7CiAgICAgICAgcmV0dXJuIHRoaXMuX19kYXRhSGFzQWNjZXNzb3IgJiYgdGhpcy5fX2RhdGFIYXNBY2Nlc3Nvcltwcm9wZXJ0eV07CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHNwZWNpZmllZCBwcm9wZXJ0eSBoYXMgYSBwZW5kaW5nIGNoYW5nZS4KICAgICAgICoKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHByb3AgUHJvcGVydHkgbmFtZQogICAgICAgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHByb3BlcnR5IGhhcyBhIHBlbmRpbmcgY2hhbmdlCiAgICAgICAqIEBwcm90ZWN0ZWQKICAgICAgICovCiAgICAgIF9pc1Byb3BlcnR5UGVuZGluZyhwcm9wKSB7CiAgICAgICAgcmV0dXJuIEJvb2xlYW4odGhpcy5fX2RhdGFQZW5kaW5nICYmIChwcm9wIGluIHRoaXMuX19kYXRhUGVuZGluZykpOwogICAgICB9CgogICAgfQoKICAgIHJldHVybiBQcm9wZXJ0eUFjY2Vzc29yczsKCiAgfSk7Cgp9KSgpOwo8L3NjcmlwdD48c2NyaXB0PgooZnVuY3Rpb24oKSB7CgogICd1c2Ugc3RyaWN0JzsKCiAgY29uc3Qgd2Fsa2VyID0gZG9jdW1lbnQuY3JlYXRlVHJlZVdhbGtlcihkb2N1bWVudCwgTm9kZUZpbHRlci5TSE9XX0FMTCwKICAgICAgbnVsbCwgZmFsc2UpOwoKICAvLyAxLnggYmFja3dhcmRzLWNvbXBhdGlibGUgYXV0by13cmFwcGVyIGZvciB0ZW1wbGF0ZSB0eXBlIGV4dGVuc2lvbnMKICAvLyBUaGlzIGlzIGEgY2xlYXIgbGF5ZXJpbmcgdmlvbGF0aW9uIGFuZCBnaXZlcyBmYXZvcmVkLW5hdGlvbiBzdGF0dXMgdG8KICAvLyBkb20taWYgYW5kIGRvbS1yZXBlYXQgdGVtcGxhdGVzLiAgVGhpcyBpcyBhIGNvbmNlaXQgd2UncmUgY2hvb3NpbmcgdG8ga2VlcAogIC8vIGEuKSB0byBlYXNlIDEueCBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBkdWUgdG8gbG9zcyBvZiBgaXNgLCBhbmQKICAvLyBiLikgdG8gbWFpbnRhaW4gaWYvcmVwZWF0IGNhcGFiaWxpdHkgaW4gcGFyc2VyLWNvbnN0cmFpbmVkIGVsZW1lbnRzCiAgLy8gICAgIChlLmcuIHRhYmxlLCBzZWxlY3QpIGluIGxpZXUgb2YgbmF0aXZlIENFIHR5cGUgZXh0ZW5zaW9ucyB3aXRob3V0CiAgLy8gICAgIG1hc3NpdmUgbmV3IGludmVudGlvbiBpbiB0aGlzIHNwYWNlIChlLmcuIGRpcmVjdGl2ZSBzeXN0ZW0pCiAgY29uc3QgdGVtcGxhdGVFeHRlbnNpb25zID0gewogICAgJ2RvbS1pZic6IHRydWUsCiAgICAnZG9tLXJlcGVhdCc6IHRydWUKICB9OwogIGZ1bmN0aW9uIHdyYXBUZW1wbGF0ZUV4dGVuc2lvbihub2RlKSB7CiAgICBsZXQgaXMgPSBub2RlLmdldEF0dHJpYnV0ZSgnaXMnKTsKICAgIGlmIChpcyAmJiB0ZW1wbGF0ZUV4dGVuc2lvbnNbaXNdKSB7CiAgICAgIGxldCB0ID0gbm9kZTsKICAgICAgdC5yZW1vdmVBdHRyaWJ1dGUoJ2lzJyk7CiAgICAgIG5vZGUgPSB0Lm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudChpcyk7CiAgICAgIHQucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQobm9kZSwgdCk7CiAgICAgIG5vZGUuYXBwZW5kQ2hpbGQodCk7CiAgICAgIHdoaWxlKHQuYXR0cmlidXRlcy5sZW5ndGgpIHsKICAgICAgICBub2RlLnNldEF0dHJpYnV0ZSh0LmF0dHJpYnV0ZXNbMF0ubmFtZSwgdC5hdHRyaWJ1dGVzWzBdLnZhbHVlKTsKICAgICAgICB0LnJlbW92ZUF0dHJpYnV0ZSh0LmF0dHJpYnV0ZXNbMF0ubmFtZSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBub2RlOwogIH0KCiAgZnVuY3Rpb24gZmluZFRlbXBsYXRlTm9kZShyb290LCBub2RlSW5mbykgewogICAgLy8gcmVjdXJzaXZlbHkgYXNjZW5kIHRyZWUgdW50aWwgd2UgaGl0IHJvb3QKICAgIGxldCBwYXJlbnQgPSBub2RlSW5mby5wYXJlbnRJbmZvICYmIGZpbmRUZW1wbGF0ZU5vZGUocm9vdCwgbm9kZUluZm8ucGFyZW50SW5mbyk7CiAgICAvLyB1bndpbmQgdGhlIHN0YWNrLCByZXR1cm5pbmcgdGhlIGluZGV4ZWQgbm9kZSBhdCBlYWNoIGxldmVsCiAgICBpZiAocGFyZW50KSB7CiAgICAgIC8vIG5vdGU6IG1hcmdpbmFsbHkgZmFzdGVyIHRoYW4gaW5kZXhpbmcgdmlhIGNoaWxkTm9kZXMKICAgICAgLy8gKGh0dHA6Ly9qc3BlcmYuY29tL2NoaWxkbm9kZXMtbG9va3VwKQogICAgICB3YWxrZXIuY3VycmVudE5vZGUgPSBwYXJlbnQ7CiAgICAgIGZvciAobGV0IG49d2Fsa2VyLmZpcnN0Q2hpbGQoKSwgaT0wOyBuOyBuPXdhbGtlci5uZXh0U2libGluZygpKSB7CiAgICAgICAgaWYgKG5vZGVJbmZvLnBhcmVudEluZGV4ID09PSBpKyspIHsKICAgICAgICAgIHJldHVybiBuOwogICAgICAgIH0KICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIHJvb3Q7CiAgICB9CiAgfQoKICAvLyBjb25zdHJ1Y3QgYCRgIG1hcCAoZnJvbSBpZCBhbm5vdGF0aW9ucykKICBmdW5jdGlvbiBhcHBseUlkVG9NYXAoaW5zdCwgbWFwLCBub2RlLCBub2RlSW5mbykgewogICAgaWYgKG5vZGVJbmZvLmlkKSB7CiAgICAgIG1hcFtub2RlSW5mby5pZF0gPSBub2RlOwogICAgfQogIH0KCiAgLy8gaW5zdGFsbCBldmVudCBsaXN0ZW5lcnMgKGZyb20gZXZlbnQgYW5ub3RhdGlvbnMpCiAgZnVuY3Rpb24gYXBwbHlFdmVudExpc3RlbmVyKGluc3QsIG5vZGUsIG5vZGVJbmZvKSB7CiAgICBpZiAobm9kZUluZm8uZXZlbnRzICYmIG5vZGVJbmZvLmV2ZW50cy5sZW5ndGgpIHsKICAgICAgZm9yIChsZXQgaj0wLCBlJD1ub2RlSW5mby5ldmVudHMsIGU7IChqPGUkLmxlbmd0aCkgJiYgKGU9ZSRbal0pOyBqKyspIHsKICAgICAgICBpbnN0Ll9hZGRNZXRob2RFdmVudExpc3RlbmVyVG9Ob2RlKG5vZGUsIGUubmFtZSwgZS52YWx1ZSwgaW5zdCk7CiAgICAgIH0KICAgIH0KICB9CgogIC8vIHB1c2ggY29uZmlndXJhdGlvbiByZWZlcmVuY2VzIGF0IGNvbmZpZ3VyZSB0aW1lCiAgZnVuY3Rpb24gYXBwbHlUZW1wbGF0ZUNvbnRlbnQoaW5zdCwgbm9kZSwgbm9kZUluZm8pIHsKICAgIGlmIChub2RlSW5mby50ZW1wbGF0ZUluZm8pIHsKICAgICAgbm9kZS5fdGVtcGxhdGVJbmZvID0gbm9kZUluZm8udGVtcGxhdGVJbmZvOwogICAgfQogIH0KCiAgZnVuY3Rpb24gY3JlYXRlTm9kZUV2ZW50SGFuZGxlcihjb250ZXh0LCBldmVudE5hbWUsIG1ldGhvZE5hbWUpIHsKICAgIC8vIEluc3RhbmNlcyBjYW4gb3B0aW9uYWxseSBoYXZlIGEgX21ldGhvZEhvc3Qgd2hpY2ggYWxsb3dzIHJlZGlyZWN0aW5nIHdoZXJlCiAgICAvLyB0byBmaW5kIG1ldGhvZHMuIEN1cnJlbnRseSB1c2VkIGJ5IGB0ZW1wbGF0aXplYC4KICAgIGNvbnRleHQgPSBjb250ZXh0Ll9tZXRob2RIb3N0IHx8IGNvbnRleHQ7CiAgICBsZXQgaGFuZGxlciA9IGZ1bmN0aW9uKGUpIHsKICAgICAgaWYgKGNvbnRleHRbbWV0aG9kTmFtZV0pIHsKICAgICAgICBjb250ZXh0W21ldGhvZE5hbWVdKGUsIGUuZGV0YWlsKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBjb25zb2xlLndhcm4oJ2xpc3RlbmVyIG1ldGhvZCBgJyArIG1ldGhvZE5hbWUgKyAnYCBub3QgZGVmaW5lZCcpOwogICAgICB9CiAgICB9OwogICAgcmV0dXJuIGhhbmRsZXI7CiAgfQoKICAvKioKICAgKiBFbGVtZW50IG1peGluIHRoYXQgcHJvdmlkZXMgYmFzaWMgdGVtcGxhdGUgcGFyc2luZyBhbmQgc3RhbXBpbmcsIGluY2x1ZGluZwogICAqIHRoZSBmb2xsb3dpbmcgdGVtcGxhdGUtcmVsYXRlZCBmZWF0dXJlcyBmb3Igc3RhbXBlZCB0ZW1wbGF0ZXM6CiAgICoKICAgKiAtIERlY2xhcmF0aXZlIGV2ZW50IGxpc3RlbmVycyAoYG9uLWV2ZW50bmFtZT0ibGlzdGVuZXIiYCkKICAgKiAtIE1hcCBvZiBub2RlIGlkJ3MgdG8gc3RhbXBlZCBub2RlIGluc3RhbmNlcyAoYHRoaXMuJC5pZGApCiAgICogLSBOZXN0ZWQgdGVtcGxhdGUgY29udGVudCBjYWNoaW5nL3JlbW92YWwgYW5kIHJlLWluc3RhbGxhdGlvbiAocGVyZm9ybWFuY2UKICAgKiAgIG9wdGltaXphdGlvbikKICAgKgogICAqIEBtaXhpbkZ1bmN0aW9uCiAgICogQHBvbHltZXIKICAgKiBAbWVtYmVyb2YgUG9seW1lcgogICAqIEBzdW1tYXJ5IEVsZW1lbnQgY2xhc3MgbWl4aW4gdGhhdCBwcm92aWRlcyBiYXNpYyB0ZW1wbGF0ZSBwYXJzaW5nIGFuZCBzdGFtcGluZwogICAqLwogIFBvbHltZXIuVGVtcGxhdGVTdGFtcCA9IFBvbHltZXIuZGVkdXBpbmdNaXhpbihzdXBlckNsYXNzID0+IHsKCiAgICAvKioKICAgICAqIEBwb2x5bWVyCiAgICAgKiBAbWl4aW5DbGFzcwogICAgICogQGltcGxlbWVudHMge1BvbHltZXJfVGVtcGxhdGVTdGFtcH0KICAgICAqLwogICAgY2xhc3MgVGVtcGxhdGVTdGFtcCBleHRlbmRzIHN1cGVyQ2xhc3MgewoKICAgICAgLyoqCiAgICAgICAqIFNjYW5zIGEgdGVtcGxhdGUgdG8gcHJvZHVjZSB0ZW1wbGF0ZSBtZXRhZGF0YS4KICAgICAgICoKICAgICAgICogVGVtcGxhdGUtc3BlY2lmaWMgbWV0YWRhdGEgYXJlIHN0b3JlZCBpbiB0aGUgb2JqZWN0IHJldHVybmVkLCBhbmQgbm9kZS0KICAgICAgICogc3BlY2lmaWMgbWV0YWRhdGEgYXJlIHN0b3JlZCBpbiBvYmplY3RzIGluIGl0cyBmbGF0dGVuZWQgYG5vZGVJbmZvTGlzdGAKICAgICAgICogYXJyYXkuICBPbmx5IG5vZGVzIGluIHRoZSB0ZW1wbGF0ZSB0aGF0IHdlcmUgcGFyc2VkIGFzIG5vZGVzIG9mCiAgICAgICAqIGludGVyZXN0IGNvbnRhaW4gYW4gb2JqZWN0IGluIGBub2RlSW5mb0xpc3RgLiAgRWFjaCBgbm9kZUluZm9gIG9iamVjdAogICAgICAgKiBjb250YWlucyBhbiBgaW5kZXhgIChgY2hpbGROb2Rlc2AgaW5kZXggaW4gcGFyZW50KSBhbmQgb3B0aW9uYWxseQogICAgICAgKiBgcGFyZW50YCwgd2hpY2ggcG9pbnRzIHRvIG5vZGUgaW5mbyBvZiBpdHMgcGFyZW50IChpbmNsdWRpbmcgaXRzIGluZGV4KS4KICAgICAgICoKICAgICAgICogVGhlIHRlbXBsYXRlIG1ldGFkYXRhIG9iamVjdCByZXR1cm5lZCBmcm9tIHRoaXMgbWV0aG9kIGhhcyB0aGUgZm9sbG93aW5nCiAgICAgICAqIHN0cnVjdHVyZSAobWFueSBmaWVsZHMgb3B0aW9uYWwpOgogICAgICAgKgogICAgICAgKiBgYGBqcwogICAgICAgKiAgIHsKICAgICAgICogICAgIC8vIEZsYXR0ZW5lZCBsaXN0IG9mIG5vZGUgbWV0YWRhdGEgKGZvciBub2RlcyB0aGF0IGdlbmVyYXRlZCBtZXRhZGF0YSkKICAgICAgICogICAgIG5vZGVJbmZvTGlzdDogWwogICAgICAgKiAgICAgICB7CiAgICAgICAqICAgICAgICAgLy8gYGlkYCBhdHRyaWJ1dGUgZm9yIGFueSBub2RlcyB3aXRoIGlkJ3MgZm9yIGdlbmVyYXRpbmcgYCRgIG1hcAogICAgICAgKiAgICAgICAgIGlkOiB7c3RyaW5nfSwKICAgICAgICogICAgICAgICAvLyBgb24tZXZlbnQ9ImhhbmRsZXIiYCBtZXRhZGF0YQogICAgICAgKiAgICAgICAgIGV2ZW50czogWwogICAgICAgKiAgICAgICAgICAgewogICAgICAgKiAgICAgICAgICAgICBuYW1lOiB7c3RyaW5nfSwgICAvLyBldmVudCBuYW1lCiAgICAgICAqICAgICAgICAgICAgIHZhbHVlOiB7c3RyaW5nfSwgIC8vIGhhbmRsZXIgbWV0aG9kIG5hbWUKICAgICAgICogICAgICAgICAgIH0sIC4uLgogICAgICAgKiAgICAgICAgIF0sCiAgICAgICAqICAgICAgICAgLy8gTm90ZXMgd2hlbiB0aGUgdGVtcGxhdGUgY29udGFpbmVkIGEgYDxzbG90PmAgZm9yIHNoYWR5IERPTQogICAgICAgKiAgICAgICAgIC8vIG9wdGltaXphdGlvbiBwdXJwb3NlcwogICAgICAgKiAgICAgICAgIGhhc0luc2VydGlvblBvaW50OiB7Ym9vbGVhbn0sCiAgICAgICAqICAgICAgICAgLy8gRm9yIG5lc3RlZCBgPHRlbXBsYXRlPmBgIG5vZGVzLCBuZXN0ZWQgdGVtcGxhdGUgbWV0YWRhdGEKICAgICAgICogICAgICAgICB0ZW1wbGF0ZUluZm86IHtvYmplY3R9LCAvLyBuZXN0ZWQgdGVtcGxhdGUgbWV0YWRhdGEKICAgICAgICogICAgICAgICAvLyBNZXRhZGF0YSB0byBhbGxvdyBlZmZpY2llbnQgcmV0cmlldmFsIG9mIGluc3RhbmNlZCBub2RlCiAgICAgICAqICAgICAgICAgLy8gY29ycmVzcG9uZGluZyB0byB0aGlzIG1ldGFkYXRhCiAgICAgICAqICAgICAgICAgcGFyZW50SW5mbzoge251bWJlcn0sICAgLy8gcmVmZXJlbmNlIHRvIHBhcmVudCBub2RlSW5mbz4KICAgICAgICogICAgICAgICBwYXJlbnRJbmRleDoge251bWJlcn0sICAvLyBpbmRleCBpbiBwYXJlbnQncyBgY2hpbGROb2Rlc2AgY29sbGVjdGlvbgogICAgICAgKiAgICAgICAgIGluZm9JbmRleDoge251bWJlcn0sICAgIC8vIGluZGV4IG9mIHRoaXMgYG5vZGVJbmZvYCBpbiBgdGVtcGxhdGVJbmZvLm5vZGVJbmZvTGlzdGAKICAgICAgICogICAgICAgfSwKICAgICAgICogICAgICAgLi4uCiAgICAgICAqICAgICBdLAogICAgICAgKiAgICAgLy8gV2hlbiB0cnVlLCB0aGUgdGVtcGxhdGUgaGFkIHRoZSBgc3RyaXAtd2hpdGVzcGFjZWAgYXR0cmlidXRlCiAgICAgICAqICAgICAvLyBvciB3YXMgbmVzdGVkIGluIGEgdGVtcGxhdGUgd2l0aCB0aGF0IHNldHRpbmcKICAgICAgICogICAgIHN0cmlwV2hpdGVzcGFjZToge2Jvb2xlYW59LAogICAgICAgKiAgICAgLy8gRm9yIG5lc3RlZCB0ZW1wbGF0ZXMsIG5lc3RlZCB0ZW1wbGF0ZSBjb250ZW50IGlzIG1vdmVkIGludG8KICAgICAgICogICAgIC8vIGEgZG9jdW1lbnQgZnJhZ21lbnQgc3RvcmVkIGhlcmU7IHRoaXMgaXMgYW4gb3B0aW1pemF0aW9uIHRvCiAgICAgICAqICAgICAvLyBhdm9pZCB0aGUgY29zdCBvZiBuZXN0ZWQgdGVtcGxhdGUgY2xvbmluZwogICAgICAgKiAgICAgY29udGVudDoge0RvY3VtZW50RnJhZ21lbnR9CiAgICAgICAqICAgfQogICAgICAgKiBgYGAKICAgICAgICoKICAgICAgICogVGhpcyBtZXRob2Qga2lja3Mgb2ZmIGEgcmVjdXJzaXZlIHRyZWV3YWxrIGFzIGZvbGxvd3M6CiAgICAgICAqCiAgICAgICAqIGBgYAogICAgICAgKiAgICBfcGFyc2VUZW1wbGF0ZSA8LS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogICAgICAgKiAgICAgIF9wYXJzZVRlbXBsYXRlQ29udGVudCAgICAgICAgICAgICAgfAogICAgICAgKiAgICAgICAgX3BhcnNlVGVtcGxhdGVOb2RlICA8LS0tLS0tLS0tLS0tfC0tKwogICAgICAgKiAgICAgICAgICBfcGFyc2VUZW1wbGF0ZU5lc3RlZFRlbXBsYXRlIC0tKyAgfAogICAgICAgKiAgICAgICAgICBfcGFyc2VUZW1wbGF0ZUNoaWxkTm9kZXMgLS0tLS0tLS0tKwogICAgICAgKiAgICAgICAgICBfcGFyc2VUZW1wbGF0ZU5vZGVBdHRyaWJ1dGVzCiAgICAgICAqICAgICAgICAgICAgX3BhcnNlVGVtcGxhdGVOb2RlQXR0cmlidXRlCiAgICAgICAqCiAgICAgICAqIGBgYAogICAgICAgKgogICAgICAgKiBUaGVzZSBtZXRob2RzIG1heSBiZSBvdmVycmlkZGVuIHRvIGFkZCBjdXN0b20gbWV0YWRhdGEgYWJvdXQgdGVtcGxhdGVzCiAgICAgICAqIHRvIGVpdGhlciBgdGVtcGxhdGVJbmZvYCBvciBgbm9kZUluZm9gLgogICAgICAgKgogICAgICAgKiBOb3RlIHRoYXQgdGhpcyBtZXRob2QgbWF5IGJlIGRlc3RydWN0aXZlIHRvIHRoZSB0ZW1wbGF0ZSwgaW4gdGhhdAogICAgICAgKiBlLmcuIGV2ZW50IGFubm90YXRpb25zIG1heSBiZSByZW1vdmVkIGFmdGVyIGJlaW5nIG5vdGVkIGluIHRoZQogICAgICAgKiB0ZW1wbGF0ZSBtZXRhZGF0YS4KICAgICAgICoKICAgICAgICogQHBhcmFtIHshSFRNTFRlbXBsYXRlRWxlbWVudH0gdGVtcGxhdGUgVGVtcGxhdGUgdG8gcGFyc2UKICAgICAgICogQHBhcmFtIHtUZW1wbGF0ZUluZm89fSBvdXRlclRlbXBsYXRlSW5mbyBUZW1wbGF0ZSBtZXRhZGF0YSBmcm9tIHRoZSBvdXRlcgogICAgICAgKiAgIHRlbXBsYXRlLCBmb3IgcGFyc2luZyBuZXN0ZWQgdGVtcGxhdGVzCiAgICAgICAqIEByZXR1cm4geyFUZW1wbGF0ZUluZm99IFBhcnNlZCB0ZW1wbGF0ZSBtZXRhZGF0YQogICAgICAgKi8KICAgICAgc3RhdGljIF9wYXJzZVRlbXBsYXRlKHRlbXBsYXRlLCBvdXRlclRlbXBsYXRlSW5mbykgewogICAgICAgIC8vIHNpbmNlIGEgdGVtcGxhdGUgbWF5IGJlIHJlLXVzZWQsIG1lbW8taXplIG1ldGFkYXRhCiAgICAgICAgaWYgKCF0ZW1wbGF0ZS5fdGVtcGxhdGVJbmZvKSB7CiAgICAgICAgICBsZXQgdGVtcGxhdGVJbmZvID0gdGVtcGxhdGUuX3RlbXBsYXRlSW5mbyA9IHt9OwogICAgICAgICAgdGVtcGxhdGVJbmZvLm5vZGVJbmZvTGlzdCA9IFtdOwogICAgICAgICAgdGVtcGxhdGVJbmZvLnN0cmlwV2hpdGVTcGFjZSA9IFBvbHltZXIubGVnYWN5T3B0aW1pemF0aW9ucyB8fAogICAgICAgICAgICAob3V0ZXJUZW1wbGF0ZUluZm8gJiYgb3V0ZXJUZW1wbGF0ZUluZm8uc3RyaXBXaGl0ZVNwYWNlKSB8fAogICAgICAgICAgICB0ZW1wbGF0ZS5oYXNBdHRyaWJ1dGUoJ3N0cmlwLXdoaXRlc3BhY2UnKTsKICAgICAgICAgIHRoaXMuX3BhcnNlVGVtcGxhdGVDb250ZW50KHRlbXBsYXRlLCB0ZW1wbGF0ZUluZm8sIHtwYXJlbnQ6IG51bGx9KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRlbXBsYXRlLl90ZW1wbGF0ZUluZm87CiAgICAgIH0KCiAgICAgIHN0YXRpYyBfcGFyc2VUZW1wbGF0ZUNvbnRlbnQodGVtcGxhdGUsIHRlbXBsYXRlSW5mbywgbm9kZUluZm8pIHsKICAgICAgICByZXR1cm4gdGhpcy5fcGFyc2VUZW1wbGF0ZU5vZGUodGVtcGxhdGUuY29udGVudCwgdGVtcGxhdGVJbmZvLCBub2RlSW5mbyk7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBQYXJzZXMgdGVtcGxhdGUgbm9kZSBhbmQgYWRkcyB0ZW1wbGF0ZSBhbmQgbm9kZSBtZXRhZGF0YSBiYXNlZCBvbgogICAgICAgKiB0aGUgY3VycmVudCBub2RlLCBhbmQgaXRzIGBjaGlsZE5vZGVzYCBhbmQgYGF0dHJpYnV0ZXNgLgogICAgICAgKgogICAgICAgKiBUaGlzIG1ldGhvZCBtYXkgYmUgb3ZlcnJpZGRlbiB0byBhZGQgY3VzdG9tIG5vZGUgb3IgdGVtcGxhdGUgc3BlY2lmaWMKICAgICAgICogbWV0YWRhdGEgYmFzZWQgb24gdGhpcyBub2RlLgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge05vZGV9IG5vZGUgTm9kZSB0byBwYXJzZQogICAgICAgKiBAcGFyYW0geyFUZW1wbGF0ZUluZm99IHRlbXBsYXRlSW5mbyBUZW1wbGF0ZSBtZXRhZGF0YSBmb3IgY3VycmVudCB0ZW1wbGF0ZQogICAgICAgKiBAcGFyYW0geyFOb2RlSW5mb30gbm9kZUluZm8gTm9kZSBtZXRhZGF0YSBmb3IgY3VycmVudCB0ZW1wbGF0ZS4KICAgICAgICogQHJldHVybiB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSB2aXNpdGVkIG5vZGUgYWRkZWQgbm9kZS1zcGVjaWZpYwogICAgICAgKiAgIG1ldGFkYXRhIHRvIGBub2RlSW5mb2AKICAgICAgICovCiAgICAgIHN0YXRpYyBfcGFyc2VUZW1wbGF0ZU5vZGUobm9kZSwgdGVtcGxhdGVJbmZvLCBub2RlSW5mbykgewogICAgICAgIGxldCBub3RlZDsKICAgICAgICBsZXQgZWxlbWVudCA9IC8qKiBAdHlwZSB7RWxlbWVudH0gKi8obm9kZSk7CiAgICAgICAgaWYgKGVsZW1lbnQubG9jYWxOYW1lID09ICd0ZW1wbGF0ZScgJiYgIWVsZW1lbnQuaGFzQXR0cmlidXRlKCdwcmVzZXJ2ZS1jb250ZW50JykpIHsKICAgICAgICAgIG5vdGVkID0gdGhpcy5fcGFyc2VUZW1wbGF0ZU5lc3RlZFRlbXBsYXRlKGVsZW1lbnQsIHRlbXBsYXRlSW5mbywgbm9kZUluZm8pIHx8IG5vdGVkOwogICAgICAgIH0gZWxzZSBpZiAoZWxlbWVudC5sb2NhbE5hbWUgPT09ICdzbG90JykgewogICAgICAgICAgLy8gRm9yIFNoYWR5RG9tIG9wdGltaXphdGlvbiwgaW5kaWNhdGluZyB0aGVyZSBpcyBhbiBpbnNlcnRpb24gcG9pbnQKICAgICAgICAgIHRlbXBsYXRlSW5mby5oYXNJbnNlcnRpb25Qb2ludCA9IHRydWU7CiAgICAgICAgfQogICAgICAgIHdhbGtlci5jdXJyZW50Tm9kZSA9IGVsZW1lbnQ7CiAgICAgICAgaWYgKHdhbGtlci5maXJzdENoaWxkKCkpIHsKICAgICAgICAgIG5vdGVkID0gdGhpcy5fcGFyc2VUZW1wbGF0ZUNoaWxkTm9kZXMoZWxlbWVudCwgdGVtcGxhdGVJbmZvLCBub2RlSW5mbykgfHwgbm90ZWQ7CiAgICAgICAgfQogICAgICAgIGlmIChlbGVtZW50Lmhhc0F0dHJpYnV0ZXMgJiYgZWxlbWVudC5oYXNBdHRyaWJ1dGVzKCkpIHsKICAgICAgICAgIG5vdGVkID0gdGhpcy5fcGFyc2VUZW1wbGF0ZU5vZGVBdHRyaWJ1dGVzKGVsZW1lbnQsIHRlbXBsYXRlSW5mbywgbm9kZUluZm8pIHx8IG5vdGVkOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbm90ZWQ7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBQYXJzZXMgdGVtcGxhdGUgY2hpbGQgbm9kZXMgZm9yIHRoZSBnaXZlbiByb290IG5vZGUuCiAgICAgICAqCiAgICAgICAqIFRoaXMgbWV0aG9kIGFsc28gd3JhcHMgd2hpdGVsaXN0ZWQgbGVnYWN5IHRlbXBsYXRlIGV4dGVuc2lvbnMKICAgICAgICogKGBpcz0iZG9tLWlmImAgYW5kIGBpcz0iZG9tLXJlcGVhdCJgKSB3aXRoIHRoZWlyIGVxdWl2YWxlbnQgZWxlbWVudAogICAgICAgKiB3cmFwcGVycywgY29sbGFwc2VzIHRleHQgbm9kZXMsIGFuZCBzdHJpcHMgd2hpdGVzcGFjZSBmcm9tIHRoZSB0ZW1wbGF0ZQogICAgICAgKiBpZiB0aGUgYHRlbXBsYXRlSW5mby5zdHJpcFdoaXRlc3BhY2VgIHNldHRpbmcgd2FzIHByb3ZpZGVkLgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge05vZGV9IHJvb3QgUm9vdCBub2RlIHdob3NlIGBjaGlsZE5vZGVzYCB3aWxsIGJlIHBhcnNlZAogICAgICAgKiBAcGFyYW0geyFUZW1wbGF0ZUluZm99IHRlbXBsYXRlSW5mbyBUZW1wbGF0ZSBtZXRhZGF0YSBmb3IgY3VycmVudCB0ZW1wbGF0ZQogICAgICAgKiBAcGFyYW0geyFOb2RlSW5mb30gbm9kZUluZm8gTm9kZSBtZXRhZGF0YSBmb3IgY3VycmVudCB0ZW1wbGF0ZS4KICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICovCiAgICAgIHN0YXRpYyBfcGFyc2VUZW1wbGF0ZUNoaWxkTm9kZXMocm9vdCwgdGVtcGxhdGVJbmZvLCBub2RlSW5mbykgewogICAgICAgIGlmIChyb290LmxvY2FsTmFtZSA9PT0gJ3NjcmlwdCcgfHwgcm9vdC5sb2NhbE5hbWUgPT09ICdzdHlsZScpIHsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgd2Fsa2VyLmN1cnJlbnROb2RlID0gcm9vdDsKICAgICAgICBmb3IgKGxldCBub2RlPXdhbGtlci5maXJzdENoaWxkKCksIHBhcmVudEluZGV4PTAsIG5leHQ7IG5vZGU7IG5vZGU9bmV4dCkgewogICAgICAgICAgLy8gV3JhcCB0ZW1wbGF0ZXMKICAgICAgICAgIGlmIChub2RlLmxvY2FsTmFtZSA9PSAndGVtcGxhdGUnKSB7CiAgICAgICAgICAgIG5vZGUgPSB3cmFwVGVtcGxhdGVFeHRlbnNpb24obm9kZSk7CiAgICAgICAgICB9CiAgICAgICAgICAvLyBjb2xsYXBzZSBhZGphY2VudCB0ZXh0Tm9kZXM6IGZpeGVzIGFuIElFIGlzc3VlIHRoYXQgY2FuIGNhdXNlCiAgICAgICAgICAvLyB0ZXh0IG5vZGVzIHRvIGJlIGluZXhwbGljYWJseSBzcGxpdCA9KAogICAgICAgICAgLy8gbm90ZSB0aGF0IHJvb3Qubm9ybWFsaXplKCkgc2hvdWxkIHdvcmsgYnV0IGRvZXMgbm90IHNvIHdlIGRvIHRoaXMKICAgICAgICAgIC8vIG1hbnVhbGx5LgogICAgICAgICAgd2Fsa2VyLmN1cnJlbnROb2RlID0gbm9kZTsKICAgICAgICAgIG5leHQgPSB3YWxrZXIubmV4dFNpYmxpbmcoKTsKICAgICAgICAgIGlmIChub2RlLm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSkgewogICAgICAgICAgICBsZXQgLyoqIE5vZGUgKi8gbiA9IG5leHQ7CiAgICAgICAgICAgIHdoaWxlIChuICYmIChuLm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSkpIHsKICAgICAgICAgICAgICBub2RlLnRleHRDb250ZW50ICs9IG4udGV4dENvbnRlbnQ7CiAgICAgICAgICAgICAgbmV4dCA9IHdhbGtlci5uZXh0U2libGluZygpOwogICAgICAgICAgICAgIHJvb3QucmVtb3ZlQ2hpbGQobik7CiAgICAgICAgICAgICAgbiA9IG5leHQ7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy8gb3B0aW9uYWxseSBzdHJpcCB3aGl0ZXNwYWNlCiAgICAgICAgICAgIGlmICh0ZW1wbGF0ZUluZm8uc3RyaXBXaGl0ZVNwYWNlICYmICFub2RlLnRleHRDb250ZW50LnRyaW0oKSkgewogICAgICAgICAgICAgIHJvb3QucmVtb3ZlQ2hpbGQobm9kZSk7CiAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGxldCBjaGlsZEluZm8gPSB7IHBhcmVudEluZGV4LCBwYXJlbnRJbmZvOiBub2RlSW5mbyB9OwogICAgICAgICAgaWYgKHRoaXMuX3BhcnNlVGVtcGxhdGVOb2RlKG5vZGUsIHRlbXBsYXRlSW5mbywgY2hpbGRJbmZvKSkgewogICAgICAgICAgICBjaGlsZEluZm8uaW5mb0luZGV4ID0gdGVtcGxhdGVJbmZvLm5vZGVJbmZvTGlzdC5wdXNoKC8qKiBAdHlwZSB7IU5vZGVJbmZvfSAqLyhjaGlsZEluZm8pKSAtIDE7CiAgICAgICAgICB9CiAgICAgICAgICAvLyBJbmNyZW1lbnQgaWYgbm90IHJlbW92ZWQKICAgICAgICAgIHdhbGtlci5jdXJyZW50Tm9kZSA9IG5vZGU7CiAgICAgICAgICBpZiAod2Fsa2VyLnBhcmVudE5vZGUoKSkgewogICAgICAgICAgICBwYXJlbnRJbmRleCsrOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIFBhcnNlcyB0ZW1wbGF0ZSBjb250ZW50IGZvciB0aGUgZ2l2ZW4gbmVzdGVkIGA8dGVtcGxhdGU+YC4KICAgICAgICoKICAgICAgICogTmVzdGVkIHRlbXBsYXRlIGluZm8gaXMgc3RvcmVkIGFzIGB0ZW1wbGF0ZUluZm9gIGluIHRoZSBjdXJyZW50IG5vZGUncwogICAgICAgKiBgbm9kZUluZm9gLiBgdGVtcGxhdGUuY29udGVudGAgaXMgcmVtb3ZlZCBhbmQgc3RvcmVkIGluIGB0ZW1wbGF0ZUluZm9gLgogICAgICAgKiBJdCB3aWxsIHRoZW4gYmUgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBob3N0IHRvIHNldCBpdCBiYWNrIHRvIHRoZQogICAgICAgKiB0ZW1wbGF0ZSBhbmQgZm9yIHVzZXJzIHN0YW1waW5nIG5lc3RlZCB0ZW1wbGF0ZXMgdG8gdXNlIHRoZQogICAgICAgKiBgX2NvbnRlbnRGb3JUZW1wbGF0ZWAgbWV0aG9kIHRvIHJldHJpZXZlIHRoZSBjb250ZW50IGZvciB0aGlzIHRlbXBsYXRlCiAgICAgICAqIChhbiBvcHRpbWl6YXRpb24gdG8gYXZvaWQgdGhlIGNvc3Qgb2YgY2xvbmluZyBuZXN0ZWQgdGVtcGxhdGUgY29udGVudCkuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7SFRNTFRlbXBsYXRlRWxlbWVudH0gbm9kZSBOb2RlIHRvIHBhcnNlIChhIDx0ZW1wbGF0ZT4pCiAgICAgICAqIEBwYXJhbSB7VGVtcGxhdGVJbmZvfSBvdXRlclRlbXBsYXRlSW5mbyBUZW1wbGF0ZSBtZXRhZGF0YSBmb3IgY3VycmVudCB0ZW1wbGF0ZQogICAgICAgKiAgIHRoYXQgaW5jbHVkZXMgdGhlIHRlbXBsYXRlIGBub2RlYAogICAgICAgKiBAcGFyYW0geyFOb2RlSW5mb30gbm9kZUluZm8gTm9kZSBtZXRhZGF0YSBmb3IgY3VycmVudCB0ZW1wbGF0ZS4KICAgICAgICogQHJldHVybiB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSB2aXNpdGVkIG5vZGUgYWRkZWQgbm9kZS1zcGVjaWZpYwogICAgICAgKiAgIG1ldGFkYXRhIHRvIGBub2RlSW5mb2AKICAgICAgICovCiAgICAgIHN0YXRpYyBfcGFyc2VUZW1wbGF0ZU5lc3RlZFRlbXBsYXRlKG5vZGUsIG91dGVyVGVtcGxhdGVJbmZvLCBub2RlSW5mbykgewogICAgICAgIGxldCB0ZW1wbGF0ZUluZm8gPSB0aGlzLl9wYXJzZVRlbXBsYXRlKG5vZGUsIG91dGVyVGVtcGxhdGVJbmZvKTsKICAgICAgICBsZXQgY29udGVudCA9IHRlbXBsYXRlSW5mby5jb250ZW50ID0KICAgICAgICAgIG5vZGUuY29udGVudC5vd25lckRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTsKICAgICAgICBjb250ZW50LmFwcGVuZENoaWxkKG5vZGUuY29udGVudCk7CiAgICAgICAgbm9kZUluZm8udGVtcGxhdGVJbmZvID0gdGVtcGxhdGVJbmZvOwogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CgogICAgICAvKioKICAgICAgICogUGFyc2VzIHRlbXBsYXRlIG5vZGUgYXR0cmlidXRlcyBhbmQgYWRkcyBub2RlIG1ldGFkYXRhIHRvIGBub2RlSW5mb2AKICAgICAgICogZm9yIG5vZGVzIG9mIGludGVyZXN0LgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IG5vZGUgTm9kZSB0byBwYXJzZQogICAgICAgKiBAcGFyYW0ge1RlbXBsYXRlSW5mb30gdGVtcGxhdGVJbmZvIFRlbXBsYXRlIG1ldGFkYXRhIGZvciBjdXJyZW50IHRlbXBsYXRlCiAgICAgICAqIEBwYXJhbSB7Tm9kZUluZm99IG5vZGVJbmZvIE5vZGUgbWV0YWRhdGEgZm9yIGN1cnJlbnQgdGVtcGxhdGUuCiAgICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgdmlzaXRlZCBub2RlIGFkZGVkIG5vZGUtc3BlY2lmaWMKICAgICAgICogICBtZXRhZGF0YSB0byBgbm9kZUluZm9gCiAgICAgICAqLwogICAgICBzdGF0aWMgX3BhcnNlVGVtcGxhdGVOb2RlQXR0cmlidXRlcyhub2RlLCB0ZW1wbGF0ZUluZm8sIG5vZGVJbmZvKSB7CiAgICAgICAgLy8gTWFrZSBjb3B5IG9mIG9yaWdpbmFsIGF0dHJpYnV0ZSBsaXN0LCBzaW5jZSB0aGUgb3JkZXIgbWF5IGNoYW5nZQogICAgICAgIC8vIGFzIGF0dHJpYnV0ZXMgYXJlIGFkZGVkIGFuZCByZW1vdmVkCiAgICAgICAgbGV0IG5vdGVkID0gZmFsc2U7CiAgICAgICAgbGV0IGF0dHJzID0gQXJyYXkuZnJvbShub2RlLmF0dHJpYnV0ZXMpOwogICAgICAgIGZvciAobGV0IGk9YXR0cnMubGVuZ3RoLTEsIGE7IChhPWF0dHJzW2ldKTsgaS0tKSB7CiAgICAgICAgICBub3RlZCA9IHRoaXMuX3BhcnNlVGVtcGxhdGVOb2RlQXR0cmlidXRlKG5vZGUsIHRlbXBsYXRlSW5mbywgbm9kZUluZm8sIGEubmFtZSwgYS52YWx1ZSkgfHwgbm90ZWQ7CiAgICAgICAgfQogICAgICAgIHJldHVybiBub3RlZDsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIFBhcnNlcyBhIHNpbmdsZSB0ZW1wbGF0ZSBub2RlIGF0dHJpYnV0ZSBhbmQgYWRkcyBub2RlIG1ldGFkYXRhIHRvCiAgICAgICAqIGBub2RlSW5mb2AgZm9yIGF0dHJpYnV0ZXMgb2YgaW50ZXJlc3QuCiAgICAgICAqCiAgICAgICAqIFRoaXMgaW1wbGVtZW50YXRpb24gYWRkcyBtZXRhZGF0YSBmb3IgYG9uLWV2ZW50PSJoYW5kbGVyImAgYXR0cmlidXRlcwogICAgICAgKiBhbmQgYGlkYCBhdHRyaWJ1dGVzLgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IG5vZGUgTm9kZSB0byBwYXJzZQogICAgICAgKiBAcGFyYW0geyFUZW1wbGF0ZUluZm99IHRlbXBsYXRlSW5mbyBUZW1wbGF0ZSBtZXRhZGF0YSBmb3IgY3VycmVudCB0ZW1wbGF0ZQogICAgICAgKiBAcGFyYW0geyFOb2RlSW5mb30gbm9kZUluZm8gTm9kZSBtZXRhZGF0YSBmb3IgY3VycmVudCB0ZW1wbGF0ZS4KICAgICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgQXR0cmlidXRlIG5hbWUKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlIEF0dHJpYnV0ZSB2YWx1ZQogICAgICAgKiBAcmV0dXJuIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIHZpc2l0ZWQgbm9kZSBhZGRlZCBub2RlLXNwZWNpZmljCiAgICAgICAqICAgbWV0YWRhdGEgdG8gYG5vZGVJbmZvYAogICAgICAgKi8KICAgICAgc3RhdGljIF9wYXJzZVRlbXBsYXRlTm9kZUF0dHJpYnV0ZShub2RlLCB0ZW1wbGF0ZUluZm8sIG5vZGVJbmZvLCBuYW1lLCB2YWx1ZSkgewogICAgICAgIC8vIGV2ZW50cyAob24tKikKICAgICAgICBpZiAobmFtZS5zbGljZSgwLCAzKSA9PT0gJ29uLScpIHsKICAgICAgICAgIG5vZGUucmVtb3ZlQXR0cmlidXRlKG5hbWUpOwogICAgICAgICAgbm9kZUluZm8uZXZlbnRzID0gbm9kZUluZm8uZXZlbnRzIHx8IFtdOwogICAgICAgICAgbm9kZUluZm8uZXZlbnRzLnB1c2goewogICAgICAgICAgICBuYW1lOiBuYW1lLnNsaWNlKDMpLAogICAgICAgICAgICB2YWx1ZQogICAgICAgICAgfSk7CiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgLy8gc3RhdGljIGlkCiAgICAgICAgZWxzZSBpZiAobmFtZSA9PT0gJ2lkJykgewogICAgICAgICAgbm9kZUluZm8uaWQgPSB2YWx1ZTsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBSZXR1cm5zIHRoZSBgY29udGVudGAgZG9jdW1lbnQgZnJhZ21lbnQgZm9yIGEgZ2l2ZW4gdGVtcGxhdGUuCiAgICAgICAqCiAgICAgICAqIEZvciBuZXN0ZWQgdGVtcGxhdGVzLCBQb2x5bWVyIHBlcmZvcm1zIGFuIG9wdGltaXphdGlvbiB0byBjYWNoZSBuZXN0ZWQKICAgICAgICogdGVtcGxhdGUgY29udGVudCB0byBhdm9pZCB0aGUgY29zdCBvZiBjbG9uaW5nIGRlZXBseSBuZXN0ZWQgdGVtcGxhdGVzLgogICAgICAgKiBUaGlzIG1ldGhvZCByZXRyaWV2ZXMgdGhlIGNhY2hlZCBjb250ZW50IGZvciBhIGdpdmVuIHRlbXBsYXRlLgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge0hUTUxUZW1wbGF0ZUVsZW1lbnR9IHRlbXBsYXRlIFRlbXBsYXRlIHRvIHJldHJpZXZlIGBjb250ZW50YCBmb3IKICAgICAgICogQHJldHVybiB7RG9jdW1lbnRGcmFnbWVudH0gQ29udGVudCBmcmFnbWVudAogICAgICAgKi8KICAgICAgc3RhdGljIF9jb250ZW50Rm9yVGVtcGxhdGUodGVtcGxhdGUpIHsKICAgICAgICBsZXQgdGVtcGxhdGVJbmZvID0gLyoqIEB0eXBlIHtIVE1MVGVtcGxhdGVFbGVtZW50V2l0aEluZm99ICovICh0ZW1wbGF0ZSkuX3RlbXBsYXRlSW5mbzsKICAgICAgICByZXR1cm4gKHRlbXBsYXRlSW5mbyAmJiB0ZW1wbGF0ZUluZm8uY29udGVudCkgfHwgdGVtcGxhdGUuY29udGVudDsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIENsb25lcyB0aGUgcHJvdmlkZWQgdGVtcGxhdGUgY29udGVudCBhbmQgcmV0dXJucyBhIGRvY3VtZW50IGZyYWdtZW50CiAgICAgICAqIGNvbnRhaW5pbmcgdGhlIGNsb25lZCBkb20uCiAgICAgICAqCiAgICAgICAqIFRoZSB0ZW1wbGF0ZSBpcyBwYXJzZWQgKG9uY2UgYW5kIG1lbW9pemVkKSB1c2luZyB0aGlzIGxpYnJhcnkncwogICAgICAgKiB0ZW1wbGF0ZSBwYXJzaW5nIGZlYXR1cmVzLCBhbmQgcHJvdmlkZXMgdGhlIGZvbGxvd2luZyB2YWx1ZS1hZGRlZAogICAgICAgKiBmZWF0dXJlczoKICAgICAgICogKiBBZGRzIGRlY2xhcmF0aXZlIGV2ZW50IGxpc3RlbmVycyBmb3IgYG9uLWV2ZW50PSJoYW5kbGVyImAgYXR0cmlidXRlcwogICAgICAgKiAqIEdlbmVyYXRlcyBhbiAiaWQgbWFwIiBmb3IgYWxsIG5vZGVzIHdpdGggaWQncyB1bmRlciBgJGAgb24gcmV0dXJuZWQKICAgICAgICogICBkb2N1bWVudCBmcmFnbWVudAogICAgICAgKiAqIFBhc3NlcyB0ZW1wbGF0ZSBpbmZvIGluY2x1ZGluZyBgY29udGVudGAgYmFjayB0byB0ZW1wbGF0ZXMgYXMKICAgICAgICogICBgX3RlbXBsYXRlSW5mb2AgKGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIHRvIGF2b2lkIGRlZXAgdGVtcGxhdGUKICAgICAgICogICBjbG9uaW5nKQogICAgICAgKgogICAgICAgKiBOb3RlIHRoYXQgdGhlIG1lbW9pemVkIHRlbXBsYXRlIHBhcnNpbmcgcHJvY2VzcyBpcyBkZXN0cnVjdGl2ZSB0byB0aGUKICAgICAgICogdGVtcGxhdGU6IGF0dHJpYnV0ZXMgZm9yIGJpbmRpbmdzIGFuZCBkZWNsYXJhdGl2ZSBldmVudCBsaXN0ZW5lcnMgYXJlCiAgICAgICAqIHJlbW92ZWQgYWZ0ZXIgYmVpbmcgbm90ZWQgaW4gbm90ZXMsIGFuZCBhbnkgbmVzdGVkIGA8dGVtcGxhdGU+LmNvbnRlbnRgCiAgICAgICAqIGlzIHJlbW92ZWQgYW5kIHN0b3JlZCBpbiBub3RlcyBhcyB3ZWxsLgogICAgICAgKgogICAgICAgKiBAcGFyYW0geyFIVE1MVGVtcGxhdGVFbGVtZW50fSB0ZW1wbGF0ZSBUZW1wbGF0ZSB0byBzdGFtcAogICAgICAgKiBAcmV0dXJuIHshU3RhbXBlZFRlbXBsYXRlfSBDbG9uZWQgdGVtcGxhdGUgY29udGVudAogICAgICAgKi8KICAgICAgX3N0YW1wVGVtcGxhdGUodGVtcGxhdGUpIHsKICAgICAgICAvLyBQb2x5ZmlsbCBzdXBwb3J0OiBib290c3RyYXAgdGhlIHRlbXBsYXRlIGlmIGl0IGhhcyBub3QgYWxyZWFkeSBiZWVuCiAgICAgICAgaWYgKHRlbXBsYXRlICYmICF0ZW1wbGF0ZS5jb250ZW50ICYmCiAgICAgICAgICAgIHdpbmRvdy5IVE1MVGVtcGxhdGVFbGVtZW50ICYmIEhUTUxUZW1wbGF0ZUVsZW1lbnQuZGVjb3JhdGUpIHsKICAgICAgICAgIEhUTUxUZW1wbGF0ZUVsZW1lbnQuZGVjb3JhdGUodGVtcGxhdGUpOwogICAgICAgIH0KICAgICAgICBsZXQgdGVtcGxhdGVJbmZvID0gdGhpcy5jb25zdHJ1Y3Rvci5fcGFyc2VUZW1wbGF0ZSh0ZW1wbGF0ZSk7CiAgICAgICAgbGV0IG5vZGVJbmZvID0gdGVtcGxhdGVJbmZvLm5vZGVJbmZvTGlzdDsKICAgICAgICBsZXQgY29udGVudCA9IHRlbXBsYXRlSW5mby5jb250ZW50IHx8IHRlbXBsYXRlLmNvbnRlbnQ7CiAgICAgICAgbGV0IGRvbSA9IC8qKiBAdHlwZSB7RG9jdW1lbnRGcmFnbWVudH0gKi8gKGRvY3VtZW50LmltcG9ydE5vZGUoY29udGVudCwgdHJ1ZSkpOwogICAgICAgIC8vIE5PVEU6IFNoYWR5RG9tIG9wdGltaXphdGlvbiBpbmRpY2F0aW5nIHRoZXJlIGlzIGFuIGluc2VydGlvbiBwb2ludAogICAgICAgIGRvbS5fX25vSW5zZXJ0aW9uUG9pbnQgPSAhdGVtcGxhdGVJbmZvLmhhc0luc2VydGlvblBvaW50OwogICAgICAgIGxldCBub2RlcyA9IGRvbS5ub2RlTGlzdCA9IG5ldyBBcnJheShub2RlSW5mby5sZW5ndGgpOwogICAgICAgIGRvbS4kID0ge307CiAgICAgICAgZm9yIChsZXQgaT0wLCBsPW5vZGVJbmZvLmxlbmd0aCwgaW5mbzsgKGk8bCkgJiYgKGluZm89bm9kZUluZm9baV0pOyBpKyspIHsKICAgICAgICAgIGxldCBub2RlID0gbm9kZXNbaV0gPSBmaW5kVGVtcGxhdGVOb2RlKGRvbSwgaW5mbyk7CiAgICAgICAgICBhcHBseUlkVG9NYXAodGhpcywgZG9tLiQsIG5vZGUsIGluZm8pOwogICAgICAgICAgYXBwbHlUZW1wbGF0ZUNvbnRlbnQodGhpcywgbm9kZSwgaW5mbyk7CiAgICAgICAgICBhcHBseUV2ZW50TGlzdGVuZXIodGhpcywgbm9kZSwgaW5mbyk7CiAgICAgICAgfQogICAgICAgIGRvbSA9IC8qKiBAdHlwZSB7IVN0YW1wZWRUZW1wbGF0ZX0gKi8oZG9tKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1zZWxmLWFzc2lnbgogICAgICAgIHJldHVybiBkb207CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBBZGRzIGFuIGV2ZW50IGxpc3RlbmVyIGJ5IG1ldGhvZCBuYW1lIGZvciB0aGUgZXZlbnQgcHJvdmlkZWQuCiAgICAgICAqCiAgICAgICAqIFRoaXMgbWV0aG9kIGdlbmVyYXRlcyBhIGhhbmRsZXIgZnVuY3Rpb24gdGhhdCBsb29rcyB1cCB0aGUgbWV0aG9kCiAgICAgICAqIG5hbWUgYXQgaGFuZGxpbmcgdGltZS4KICAgICAgICoKICAgICAgICogQHBhcmFtIHshTm9kZX0gbm9kZSBOb2RlIHRvIGFkZCBsaXN0ZW5lciBvbgogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnROYW1lIE5hbWUgb2YgZXZlbnQKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IG1ldGhvZE5hbWUgTmFtZSBvZiBtZXRob2QKICAgICAgICogQHBhcmFtIHsqPX0gY29udGV4dCBDb250ZXh0IHRoZSBtZXRob2Qgd2lsbCBiZSBjYWxsZWQgb24gKGRlZmF1bHRzCiAgICAgICAqICAgdG8gYG5vZGVgKQogICAgICAgKiBAcmV0dXJuIHtGdW5jdGlvbn0gR2VuZXJhdGVkIGhhbmRsZXIgZnVuY3Rpb24KICAgICAgICovCiAgICAgIF9hZGRNZXRob2RFdmVudExpc3RlbmVyVG9Ob2RlKG5vZGUsIGV2ZW50TmFtZSwgbWV0aG9kTmFtZSwgY29udGV4dCkgewogICAgICAgIGNvbnRleHQgPSBjb250ZXh0IHx8IG5vZGU7CiAgICAgICAgbGV0IGhhbmRsZXIgPSBjcmVhdGVOb2RlRXZlbnRIYW5kbGVyKGNvbnRleHQsIGV2ZW50TmFtZSwgbWV0aG9kTmFtZSk7CiAgICAgICAgdGhpcy5fYWRkRXZlbnRMaXN0ZW5lclRvTm9kZShub2RlLCBldmVudE5hbWUsIGhhbmRsZXIpOwogICAgICAgIHJldHVybiBoYW5kbGVyOwogICAgICB9CgogICAgICAvKioKICAgICAgICogT3ZlcnJpZGUgcG9pbnQgZm9yIGFkZGluZyBjdXN0b20gb3Igc2ltdWxhdGVkIGV2ZW50IGhhbmRsaW5nLgogICAgICAgKgogICAgICAgKiBAcGFyYW0geyFOb2RlfSBub2RlIE5vZGUgdG8gYWRkIGV2ZW50IGxpc3RlbmVyIHRvCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudE5hbWUgTmFtZSBvZiBldmVudAogICAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKCFFdmVudCk6dm9pZH0gaGFuZGxlciBMaXN0ZW5lciBmdW5jdGlvbiB0byBhZGQKICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICovCiAgICAgIF9hZGRFdmVudExpc3RlbmVyVG9Ob2RlKG5vZGUsIGV2ZW50TmFtZSwgaGFuZGxlcikgewogICAgICAgIG5vZGUuYWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIGhhbmRsZXIpOwogICAgICB9CgogICAgICAvKioKICAgICAgICogT3ZlcnJpZGUgcG9pbnQgZm9yIGFkZGluZyBjdXN0b20gb3Igc2ltdWxhdGVkIGV2ZW50IGhhbmRsaW5nLgogICAgICAgKgogICAgICAgKiBAcGFyYW0geyFOb2RlfSBub2RlIE5vZGUgdG8gcmVtb3ZlIGV2ZW50IGxpc3RlbmVyIGZyb20KICAgICAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50TmFtZSBOYW1lIG9mIGV2ZW50CiAgICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24oIUV2ZW50KTp2b2lkfSBoYW5kbGVyIExpc3RlbmVyIGZ1bmN0aW9uIHRvIHJlbW92ZQogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKi8KICAgICAgX3JlbW92ZUV2ZW50TGlzdGVuZXJGcm9tTm9kZShub2RlLCBldmVudE5hbWUsIGhhbmRsZXIpIHsKICAgICAgICBub2RlLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBoYW5kbGVyKTsKICAgICAgfQoKICAgIH0KCiAgICByZXR1cm4gVGVtcGxhdGVTdGFtcDsKCiAgfSk7Cgp9KSgpOwo8L3NjcmlwdD48c2NyaXB0PgooZnVuY3Rpb24oKSB7CgogICd1c2Ugc3RyaWN0JzsKCiAgLyoqIEBjb25zdCB7T2JqZWN0fSAqLwogIGNvbnN0IENhc2VNYXAgPSBQb2x5bWVyLkNhc2VNYXA7CgogIC8vIE1vbm90b25pY2FsbHkgaW5jcmVhc2luZyB1bmlxdWUgSUQgdXNlZCBmb3IgZGUtZHVwaW5nIGVmZmVjdHMgdHJpZ2dlcmVkCiAgLy8gZnJvbSBtdWx0aXBsZSBwcm9wZXJ0aWVzIGluIHRoZSBzYW1lIHR1cm4KICBsZXQgZGVkdXBlSWQgPSAwOwoKICAvKioKICAgKiBQcm9wZXJ0eSBlZmZlY3QgdHlwZXM7IGVmZmVjdHMgYXJlIHN0b3JlZCBvbiB0aGUgcHJvdG90eXBlIHVzaW5nIHRoZXNlIGtleXMKICAgKiBAZW51bSB7c3RyaW5nfQogICAqLwogIGNvbnN0IFRZUEVTID0gewogICAgQ09NUFVURTogJ19fY29tcHV0ZUVmZmVjdHMnLAogICAgUkVGTEVDVDogJ19fcmVmbGVjdEVmZmVjdHMnLAogICAgTk9USUZZOiAnX19ub3RpZnlFZmZlY3RzJywKICAgIFBST1BBR0FURTogJ19fcHJvcGFnYXRlRWZmZWN0cycsCiAgICBPQlNFUlZFOiAnX19vYnNlcnZlRWZmZWN0cycsCiAgICBSRUFEX09OTFk6ICdfX3JlYWRPbmx5JwogIH07CgogIC8qKiBAY29uc3Qge1JlZ0V4cH0gKi8KICBjb25zdCBjYXBpdGFsQXR0cmlidXRlUmVnZXggPSAvW0EtWl0vOwoKICAvKioKICAgKiBAdHlwZWRlZiB7ewogICAqIG5hbWU6IChzdHJpbmcgfCB1bmRlZmluZWQpLAogICAqIHN0cnVjdHVyZWQ6IChib29sZWFuIHwgdW5kZWZpbmVkKSwKICAgKiB3aWxkY2FyZDogKGJvb2xlYW4gfCB1bmRlZmluZWQpCiAgICogfX0KICAgKi8KICBsZXQgRGF0YVRyaWdnZXI7IC8vZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFycwoKICAvKioKICAgKiBAdHlwZWRlZiB7ewogICAqIGluZm86ID8sCiAgICogdHJpZ2dlcjogKCFEYXRhVHJpZ2dlciB8IHVuZGVmaW5lZCksCiAgICogZm46ICghRnVuY3Rpb24gfCB1bmRlZmluZWQpCiAgICogfX0KICAgKi8KICBsZXQgRGF0YUVmZmVjdDsgLy9lc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzCgogIGxldCBQcm9wZXJ0eUVmZmVjdHNUeXBlOyAvL2VzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnMKCiAgLyoqCiAgICogRW5zdXJlcyB0aGF0IHRoZSBtb2RlbCBoYXMgYW4gb3duLXByb3BlcnR5IG1hcCBvZiBlZmZlY3RzIGZvciB0aGUgZ2l2ZW4gdHlwZS4KICAgKiBUaGUgbW9kZWwgbWF5IGJlIGEgcHJvdG90eXBlIG9yIGFuIGluc3RhbmNlLgogICAqCiAgICogUHJvcGVydHkgZWZmZWN0cyBhcmUgc3RvcmVkIGFzIGFycmF5cyBvZiBlZmZlY3RzIGJ5IHByb3BlcnR5IGluIGEgbWFwLAogICAqIGJ5IG5hbWVkIHR5cGUgb24gdGhlIG1vZGVsLiBlLmcuCiAgICoKICAgKiAgIF9fY29tcHV0ZUVmZmVjdHM6IHsKICAgKiAgICAgZm9vOiBbIC4uLiBdLAogICAqICAgICBiYXI6IFsgLi4uIF0KICAgKiAgIH0KICAgKgogICAqIElmIHRoZSBtb2RlbCBkb2VzIG5vdCB5ZXQgaGF2ZSBhbiBlZmZlY3QgbWFwIGZvciB0aGUgdHlwZSwgb25lIGlzIGNyZWF0ZWQKICAgKiBhbmQgcmV0dXJuZWQuICBJZiBpdCBkb2VzLCBidXQgaXQgaXMgbm90IGFuIG93biBwcm9wZXJ0eSAoaS5lLiB0aGUKICAgKiBwcm90b3R5cGUgaGFkIGVmZmVjdHMpLCB0aGUgdGhlIG1hcCBpcyBkZWVwbHkgY2xvbmVkIGFuZCB0aGUgY29weSBpcwogICAqIHNldCBvbiB0aGUgbW9kZWwgYW5kIHJldHVybmVkLCByZWFkeSBmb3IgbmV3IGVmZmVjdHMgdG8gYmUgYWRkZWQuCiAgICoKICAgKiBAcGFyYW0ge09iamVjdH0gbW9kZWwgUHJvdG90eXBlIG9yIGluc3RhbmNlCiAgICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgUHJvcGVydHkgZWZmZWN0IHR5cGUKICAgKiBAcmV0dXJuIHtPYmplY3R9IFRoZSBvd24tcHJvcGVydHkgbWFwIG9mIGVmZmVjdHMgZm9yIHRoZSBnaXZlbiB0eXBlCiAgICogQHByaXZhdGUKICAgKi8KICBmdW5jdGlvbiBlbnN1cmVPd25FZmZlY3RNYXAobW9kZWwsIHR5cGUpIHsKICAgIGxldCBlZmZlY3RzID0gbW9kZWxbdHlwZV07CiAgICBpZiAoIWVmZmVjdHMpIHsKICAgICAgZWZmZWN0cyA9IG1vZGVsW3R5cGVdID0ge307CiAgICB9IGVsc2UgaWYgKCFtb2RlbC5oYXNPd25Qcm9wZXJ0eSh0eXBlKSkgewogICAgICBlZmZlY3RzID0gbW9kZWxbdHlwZV0gPSBPYmplY3QuY3JlYXRlKG1vZGVsW3R5cGVdKTsKICAgICAgZm9yIChsZXQgcCBpbiBlZmZlY3RzKSB7CiAgICAgICAgbGV0IHByb3RvRnggPSBlZmZlY3RzW3BdOwogICAgICAgIGxldCBpbnN0RnggPSBlZmZlY3RzW3BdID0gQXJyYXkocHJvdG9GeC5sZW5ndGgpOwogICAgICAgIGZvciAobGV0IGk9MDsgaTxwcm90b0Z4Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICBpbnN0RnhbaV0gPSBwcm90b0Z4W2ldOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIGVmZmVjdHM7CiAgfQoKICAvLyAtLSBlZmZlY3RzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgLyoqCiAgICogUnVucyBhbGwgZWZmZWN0cyBvZiBhIGdpdmVuIHR5cGUgZm9yIHRoZSBnaXZlbiBzZXQgb2YgcHJvcGVydHkgY2hhbmdlcwogICAqIG9uIGFuIGluc3RhbmNlLgogICAqCiAgICogQHBhcmFtIHshUHJvcGVydHlFZmZlY3RzVHlwZX0gaW5zdCBUaGUgaW5zdGFuY2Ugd2l0aCBlZmZlY3RzIHRvIHJ1bgogICAqIEBwYXJhbSB7T2JqZWN0fSBlZmZlY3RzIE9iamVjdCBtYXAgb2YgcHJvcGVydHktdG8tQXJyYXkgb2YgZWZmZWN0cwogICAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wcyBCYWcgb2YgY3VycmVudCBwcm9wZXJ0eSBjaGFuZ2VzCiAgICogQHBhcmFtIHtPYmplY3Q9fSBvbGRQcm9wcyBCYWcgb2YgcHJldmlvdXMgdmFsdWVzIGZvciBjaGFuZ2VkIHByb3BlcnRpZXMKICAgKiBAcGFyYW0ge2Jvb2xlYW49fSBoYXNQYXRocyBUcnVlIHdpdGggYHByb3BzYCBjb250YWlucyBvbmUgb3IgbW9yZSBwYXRocwogICAqIEBwYXJhbSB7Kj19IGV4dHJhQXJncyBBZGRpdGlvbmFsIG1ldGFkYXRhIHRvIHBhc3MgdG8gZWZmZWN0IGZ1bmN0aW9uCiAgICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiBhbiBlZmZlY3QgcmFuIGZvciB0aGlzIHByb3BlcnR5CiAgICogQHByaXZhdGUKICAgKi8KICBmdW5jdGlvbiBydW5FZmZlY3RzKGluc3QsIGVmZmVjdHMsIHByb3BzLCBvbGRQcm9wcywgaGFzUGF0aHMsIGV4dHJhQXJncykgewogICAgaWYgKGVmZmVjdHMpIHsKICAgICAgbGV0IHJhbiA9IGZhbHNlOwogICAgICBsZXQgaWQgPSBkZWR1cGVJZCsrOwogICAgICBmb3IgKGxldCBwcm9wIGluIHByb3BzKSB7CiAgICAgICAgaWYgKHJ1bkVmZmVjdHNGb3JQcm9wZXJ0eShpbnN0LCBlZmZlY3RzLCBpZCwgcHJvcCwgcHJvcHMsIG9sZFByb3BzLCBoYXNQYXRocywgZXh0cmFBcmdzKSkgewogICAgICAgICAgcmFuID0gdHJ1ZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIHJhbjsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIC8qKgogICAqIFJ1bnMgYSBsaXN0IG9mIGVmZmVjdHMgZm9yIGEgZ2l2ZW4gcHJvcGVydHkuCiAgICoKICAgKiBAcGFyYW0geyFQcm9wZXJ0eUVmZmVjdHNUeXBlfSBpbnN0IFRoZSBpbnN0YW5jZSB3aXRoIGVmZmVjdHMgdG8gcnVuCiAgICogQHBhcmFtIHtPYmplY3R9IGVmZmVjdHMgT2JqZWN0IG1hcCBvZiBwcm9wZXJ0eS10by1BcnJheSBvZiBlZmZlY3RzCiAgICogQHBhcmFtIHtudW1iZXJ9IGRlZHVwZUlkIENvdW50ZXIgdXNlZCBmb3IgZGUtZHVwaW5nIGVmZmVjdHMKICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcCBOYW1lIG9mIGNoYW5nZWQgcHJvcGVydHkKICAgKiBAcGFyYW0geyp9IHByb3BzIENoYW5nZWQgcHJvcGVydGllcwogICAqIEBwYXJhbSB7Kn0gb2xkUHJvcHMgT2xkIHByb3BlcnRpZXMKICAgKiBAcGFyYW0ge2Jvb2xlYW49fSBoYXNQYXRocyBUcnVlIHdpdGggYHByb3BzYCBjb250YWlucyBvbmUgb3IgbW9yZSBwYXRocwogICAqIEBwYXJhbSB7Kj19IGV4dHJhQXJncyBBZGRpdGlvbmFsIG1ldGFkYXRhIHRvIHBhc3MgdG8gZWZmZWN0IGZ1bmN0aW9uCiAgICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiBhbiBlZmZlY3QgcmFuIGZvciB0aGlzIHByb3BlcnR5CiAgICogQHByaXZhdGUKICAgKi8KICBmdW5jdGlvbiBydW5FZmZlY3RzRm9yUHJvcGVydHkoaW5zdCwgZWZmZWN0cywgZGVkdXBlSWQsIHByb3AsIHByb3BzLCBvbGRQcm9wcywgaGFzUGF0aHMsIGV4dHJhQXJncykgewogICAgbGV0IHJhbiA9IGZhbHNlOwogICAgbGV0IHJvb3RQcm9wZXJ0eSA9IGhhc1BhdGhzID8gUG9seW1lci5QYXRoLnJvb3QocHJvcCkgOiBwcm9wOwogICAgbGV0IGZ4cyA9IGVmZmVjdHNbcm9vdFByb3BlcnR5XTsKICAgIGlmIChmeHMpIHsKICAgICAgZm9yIChsZXQgaT0wLCBsPWZ4cy5sZW5ndGgsIGZ4OyAoaTxsKSAmJiAoZng9ZnhzW2ldKTsgaSsrKSB7CiAgICAgICAgaWYgKCghZnguaW5mbyB8fCBmeC5pbmZvLmxhc3RSdW4gIT09IGRlZHVwZUlkKSAmJgogICAgICAgICAgICAoIWhhc1BhdGhzIHx8IHBhdGhNYXRjaGVzVHJpZ2dlcihwcm9wLCBmeC50cmlnZ2VyKSkpIHsKICAgICAgICAgIGlmIChmeC5pbmZvKSB7CiAgICAgICAgICAgIGZ4LmluZm8ubGFzdFJ1biA9IGRlZHVwZUlkOwogICAgICAgICAgfQogICAgICAgICAgZnguZm4oaW5zdCwgcHJvcCwgcHJvcHMsIG9sZFByb3BzLCBmeC5pbmZvLCBoYXNQYXRocywgZXh0cmFBcmdzKTsKICAgICAgICAgIHJhbiA9IHRydWU7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICByZXR1cm4gcmFuOwogIH0KCiAgLyoqCiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIGEgcHJvcGVydHkvcGF0aCB0aGF0IGhhcyBjaGFuZ2VkIG1hdGNoZXMgdGhlIHRyaWdnZXIKICAgKiBjcml0ZXJpYSBmb3IgYW4gZWZmZWN0LiAgQSB0cmlnZ2VyIGlzIGEgZGVzY3JpcHRvciB3aXRoIHRoZSBmb2xsb3dpbmcKICAgKiBzdHJ1Y3R1cmUsIHdoaWNoIG1hdGNoZXMgdGhlIGRlc2NyaXB0b3JzIHJldHVybmVkIGZyb20gYHBhcnNlQXJnYC4KICAgKiBlLmcuIGZvciBgZm9vLmJhci4qYDoKICAgKiBgYGAKICAgKiB0cmlnZ2VyOiB7CiAgICogICBuYW1lOiAnYS5iJywKICAgKiAgIHN0cnVjdHVyZWQ6IHRydWUsCiAgICogICB3aWxkY2FyZDogdHJ1ZQogICAqIH0KICAgKiBgYGAKICAgKiBJZiBubyB0cmlnZ2VyIGlzIGdpdmVuLCB0aGUgcGF0aCBpcyBkZWVtZWQgdG8gbWF0Y2guCiAgICoKICAgKiBAcGFyYW0ge3N0cmluZ30gcGF0aCBQYXRoIG9yIHByb3BlcnR5IHRoYXQgY2hhbmdlZAogICAqIEBwYXJhbSB7RGF0YVRyaWdnZXJ9IHRyaWdnZXIgRGVzY3JpcHRvcgogICAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIHBhdGggbWF0Y2hlZCB0aGUgdHJpZ2dlcgogICAqLwogIGZ1bmN0aW9uIHBhdGhNYXRjaGVzVHJpZ2dlcihwYXRoLCB0cmlnZ2VyKSB7CiAgICBpZiAodHJpZ2dlcikgewogICAgICBsZXQgdHJpZ2dlclBhdGggPSB0cmlnZ2VyLm5hbWU7CiAgICAgIHJldHVybiAodHJpZ2dlclBhdGggPT0gcGF0aCkgfHwKICAgICAgICAodHJpZ2dlci5zdHJ1Y3R1cmVkICYmIFBvbHltZXIuUGF0aC5pc0FuY2VzdG9yKHRyaWdnZXJQYXRoLCBwYXRoKSkgfHwKICAgICAgICAodHJpZ2dlci53aWxkY2FyZCAmJiBQb2x5bWVyLlBhdGguaXNEZXNjZW5kYW50KHRyaWdnZXJQYXRoLCBwYXRoKSk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICB9CgogIC8qKgogICAqIEltcGxlbWVudHMgdGhlICJvYnNlcnZlciIgZWZmZWN0LgogICAqCiAgICogQ2FsbHMgdGhlIG1ldGhvZCB3aXRoIGBpbmZvLm1ldGhvZE5hbWVgIG9uIHRoZSBpbnN0YW5jZSwgcGFzc2luZyB0aGUKICAgKiBuZXcgYW5kIG9sZCB2YWx1ZXMuCiAgICoKICAgKiBAcGFyYW0geyFQcm9wZXJ0eUVmZmVjdHNUeXBlfSBpbnN0IFRoZSBpbnN0YW5jZSB0aGUgZWZmZWN0IHdpbGwgYmUgcnVuIG9uCiAgICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IE5hbWUgb2YgcHJvcGVydHkKICAgKiBAcGFyYW0ge09iamVjdH0gcHJvcHMgQmFnIG9mIGN1cnJlbnQgcHJvcGVydHkgY2hhbmdlcwogICAqIEBwYXJhbSB7T2JqZWN0fSBvbGRQcm9wcyBCYWcgb2YgcHJldmlvdXMgdmFsdWVzIGZvciBjaGFuZ2VkIHByb3BlcnRpZXMKICAgKiBAcGFyYW0gez99IGluZm8gRWZmZWN0IG1ldGFkYXRhCiAgICogQHJldHVybiB7dm9pZH0KICAgKiBAcHJpdmF0ZQogICAqLwogIGZ1bmN0aW9uIHJ1bk9ic2VydmVyRWZmZWN0KGluc3QsIHByb3BlcnR5LCBwcm9wcywgb2xkUHJvcHMsIGluZm8pIHsKICAgIGxldCBmbiA9IHR5cGVvZiBpbmZvLm1ldGhvZCA9PT0gInN0cmluZyIgPyBpbnN0W2luZm8ubWV0aG9kXSA6IGluZm8ubWV0aG9kOwogICAgbGV0IGNoYW5nZWRQcm9wID0gaW5mby5wcm9wZXJ0eTsKICAgIGlmIChmbikgewogICAgICBmbi5jYWxsKGluc3QsIGluc3QuX19kYXRhW2NoYW5nZWRQcm9wXSwgb2xkUHJvcHNbY2hhbmdlZFByb3BdKTsKICAgIH0gZWxzZSBpZiAoIWluZm8uZHluYW1pY0ZuKSB7CiAgICAgIGNvbnNvbGUud2Fybignb2JzZXJ2ZXIgbWV0aG9kIGAnICsgaW5mby5tZXRob2QgKyAnYCBub3QgZGVmaW5lZCcpOwogICAgfQogIH0KCiAgLyoqCiAgICogUnVucyAibm90aWZ5IiBlZmZlY3RzIGZvciBhIHNldCBvZiBjaGFuZ2VkIHByb3BlcnRpZXMuCiAgICoKICAgKiBUaGlzIG1ldGhvZCBkaWZmZXJzIGZyb20gdGhlIGdlbmVyaWMgYHJ1bkVmZmVjdHNgIG1ldGhvZCBpbiB0aGF0IGl0CiAgICogd2lsbCBkaXNwYXRjaCBwYXRoIG5vdGlmaWNhdGlvbiBldmVudHMgaW4gdGhlIGNhc2UgdGhhdCB0aGUgcHJvcGVydHkKICAgKiBjaGFuZ2VkIHdhcyBhIHBhdGggYW5kIHRoZSByb290IHByb3BlcnR5IGZvciB0aGF0IHBhdGggZGlkbid0IGhhdmUgYQogICAqICJub3RpZnkiIGVmZmVjdC4gIFRoaXMgaXMgdG8gbWFpbnRhaW4gMS4wIGJlaGF2aW9yIHRoYXQgZGlkIG5vdCByZXF1aXJlCiAgICogYG5vdGlmeTogdHJ1ZWAgdG8gZW5zdXJlIG9iamVjdCBzdWItcHJvcGVydHkgbm90aWZpY2F0aW9ucyB3ZXJlCiAgICogc2VudC4KICAgKgogICAqIEBwYXJhbSB7IVByb3BlcnR5RWZmZWN0c1R5cGV9IGluc3QgVGhlIGluc3RhbmNlIHdpdGggZWZmZWN0cyB0byBydW4KICAgKiBAcGFyYW0ge09iamVjdH0gbm90aWZ5UHJvcHMgQmFnIG9mIHByb3BlcnRpZXMgdG8gbm90aWZ5CiAgICogQHBhcmFtIHtPYmplY3R9IHByb3BzIEJhZyBvZiBjdXJyZW50IHByb3BlcnR5IGNoYW5nZXMKICAgKiBAcGFyYW0ge09iamVjdH0gb2xkUHJvcHMgQmFnIG9mIHByZXZpb3VzIHZhbHVlcyBmb3IgY2hhbmdlZCBwcm9wZXJ0aWVzCiAgICogQHBhcmFtIHtib29sZWFufSBoYXNQYXRocyBUcnVlIHdpdGggYHByb3BzYCBjb250YWlucyBvbmUgb3IgbW9yZSBwYXRocwogICAqIEByZXR1cm4ge3ZvaWR9CiAgICogQHByaXZhdGUKICAgKi8KICBmdW5jdGlvbiBydW5Ob3RpZnlFZmZlY3RzKGluc3QsIG5vdGlmeVByb3BzLCBwcm9wcywgb2xkUHJvcHMsIGhhc1BhdGhzKSB7CiAgICAvLyBOb3RpZnkKICAgIGxldCBmeHMgPSBpbnN0W1RZUEVTLk5PVElGWV07CiAgICBsZXQgbm90aWZpZWQ7CiAgICBsZXQgaWQgPSBkZWR1cGVJZCsrOwogICAgLy8gVHJ5IG5vcm1hbCBub3RpZnkgZWZmZWN0czsgaWYgbm9uZSwgZmFsbCBiYWNrIHRvIHRyeSBwYXRoIG5vdGlmaWNhdGlvbgogICAgZm9yIChsZXQgcHJvcCBpbiBub3RpZnlQcm9wcykgewogICAgICBpZiAobm90aWZ5UHJvcHNbcHJvcF0pIHsKICAgICAgICBpZiAoZnhzICYmIHJ1bkVmZmVjdHNGb3JQcm9wZXJ0eShpbnN0LCBmeHMsIGlkLCBwcm9wLCBwcm9wcywgb2xkUHJvcHMsIGhhc1BhdGhzKSkgewogICAgICAgICAgbm90aWZpZWQgPSB0cnVlOwogICAgICAgIH0gZWxzZSBpZiAoaGFzUGF0aHMgJiYgbm90aWZ5UGF0aChpbnN0LCBwcm9wLCBwcm9wcykpIHsKICAgICAgICAgIG5vdGlmaWVkID0gdHJ1ZTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIC8vIEZsdXNoIGhvc3QgaWYgd2UgYWN0dWFsbHkgbm90aWZpZWQgYW5kIGhvc3Qgd2FzIGJhdGNoaW5nCiAgICAvLyBBbmQgdGhlIGhvc3QgaGFzIGFscmVhZHkgaW5pdGlhbGl6ZWQgY2xpZW50czsgdGhpcyBwcmV2ZW50cwogICAgLy8gYW4gaXNzdWUgd2l0aCBhIGhvc3Qgb2JzZXJ2aW5nIGRhdGEgY2hhbmdlcyBiZWZvcmUgY2xpZW50cyBhcmUgcmVhZHkuCiAgICBsZXQgaG9zdDsKICAgIGlmIChub3RpZmllZCAmJiAoaG9zdCA9IGluc3QuX19kYXRhSG9zdCkgJiYgaG9zdC5faW52YWxpZGF0ZVByb3BlcnRpZXMpIHsKICAgICAgaG9zdC5faW52YWxpZGF0ZVByb3BlcnRpZXMoKTsKICAgIH0KICB9CgogIC8qKgogICAqIERpc3BhdGNoZXMge3Byb3BlcnR5fS1jaGFuZ2VkIGV2ZW50cyB3aXRoIHBhdGggaW5mb3JtYXRpb24gaW4gdGhlIGRldGFpbAogICAqIG9iamVjdCB0byBpbmRpY2F0ZSBhIHN1Yi1wYXRoIG9mIHRoZSBwcm9wZXJ0eSB3YXMgY2hhbmdlZC4KICAgKgogICAqIEBwYXJhbSB7IVByb3BlcnR5RWZmZWN0c1R5cGV9IGluc3QgVGhlIGVsZW1lbnQgZnJvbSB3aGljaCB0byBmaXJlIHRoZSBldmVudAogICAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIFRoZSBwYXRoIHRoYXQgd2FzIGNoYW5nZWQKICAgKiBAcGFyYW0ge09iamVjdH0gcHJvcHMgQmFnIG9mIGN1cnJlbnQgcHJvcGVydHkgY2hhbmdlcwogICAqIEByZXR1cm4ge2Jvb2xlYW59IFJldHVybnMgdHJ1ZSBpZiB0aGUgcGF0aCB3YXMgbm90aWZpZWQKICAgKiBAcHJpdmF0ZQogICAqLwogIGZ1bmN0aW9uIG5vdGlmeVBhdGgoaW5zdCwgcGF0aCwgcHJvcHMpIHsKICAgIGxldCByb290UHJvcGVydHkgPSBQb2x5bWVyLlBhdGgucm9vdChwYXRoKTsKICAgIGlmIChyb290UHJvcGVydHkgIT09IHBhdGgpIHsKICAgICAgbGV0IGV2ZW50TmFtZSA9IFBvbHltZXIuQ2FzZU1hcC5jYW1lbFRvRGFzaENhc2Uocm9vdFByb3BlcnR5KSArICctY2hhbmdlZCc7CiAgICAgIGRpc3BhdGNoTm90aWZ5RXZlbnQoaW5zdCwgZXZlbnROYW1lLCBwcm9wc1twYXRoXSwgcGF0aCk7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgLyoqCiAgICogRGlzcGF0Y2hlcyB7cHJvcGVydHl9LWNoYW5nZWQgZXZlbnRzIHRvIGluZGljYXRlIGEgcHJvcGVydHkgKG9yIHBhdGgpCiAgICogY2hhbmdlZC4KICAgKgogICAqIEBwYXJhbSB7IVByb3BlcnR5RWZmZWN0c1R5cGV9IGluc3QgVGhlIGVsZW1lbnQgZnJvbSB3aGljaCB0byBmaXJlIHRoZSBldmVudAogICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudE5hbWUgVGhlIG5hbWUgb2YgdGhlIGV2ZW50IHRvIHNlbmQgKCd7cHJvcGVydHl9LWNoYW5nZWQnKQogICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIG9mIHRoZSBjaGFuZ2VkIHByb3BlcnR5CiAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkfSBwYXRoIElmIGEgc3ViLXBhdGggb2YgdGhpcyBwcm9wZXJ0eSBjaGFuZ2VkLCB0aGUgcGF0aAogICAqICAgdGhhdCBjaGFuZ2VkIChvcHRpb25hbCkuCiAgICogQHJldHVybiB7dm9pZH0KICAgKiBAcHJpdmF0ZQogICAqIEBzdXBwcmVzcyB7aW52YWxpZENhc3RzfQogICAqLwogIGZ1bmN0aW9uIGRpc3BhdGNoTm90aWZ5RXZlbnQoaW5zdCwgZXZlbnROYW1lLCB2YWx1ZSwgcGF0aCkgewogICAgbGV0IGRldGFpbCA9IHsKICAgICAgdmFsdWU6IHZhbHVlLAogICAgICBxdWV1ZVByb3BlcnR5OiB0cnVlCiAgICB9OwogICAgaWYgKHBhdGgpIHsKICAgICAgZGV0YWlsLnBhdGggPSBwYXRoOwogICAgfQogICAgLyoqIEB0eXBlIHshSFRNTEVsZW1lbnR9ICovKGluc3QpLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KGV2ZW50TmFtZSwgeyBkZXRhaWwgfSkpOwogIH0KCiAgLyoqCiAgICogSW1wbGVtZW50cyB0aGUgIm5vdGlmeSIgZWZmZWN0LgogICAqCiAgICogRGlzcGF0Y2hlcyBhIG5vbi1idWJibGluZyBldmVudCBuYW1lZCBgaW5mby5ldmVudE5hbWVgIG9uIHRoZSBpbnN0YW5jZQogICAqIHdpdGggYSBkZXRhaWwgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIG5ldyBgdmFsdWVgLgogICAqCiAgICogQHBhcmFtIHshUHJvcGVydHlFZmZlY3RzVHlwZX0gaW5zdCBUaGUgaW5zdGFuY2UgdGhlIGVmZmVjdCB3aWxsIGJlIHJ1biBvbgogICAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eSBOYW1lIG9mIHByb3BlcnR5CiAgICogQHBhcmFtIHtPYmplY3R9IHByb3BzIEJhZyBvZiBjdXJyZW50IHByb3BlcnR5IGNoYW5nZXMKICAgKiBAcGFyYW0ge09iamVjdH0gb2xkUHJvcHMgQmFnIG9mIHByZXZpb3VzIHZhbHVlcyBmb3IgY2hhbmdlZCBwcm9wZXJ0aWVzCiAgICogQHBhcmFtIHs/fSBpbmZvIEVmZmVjdCBtZXRhZGF0YQogICAqIEBwYXJhbSB7Ym9vbGVhbn0gaGFzUGF0aHMgVHJ1ZSB3aXRoIGBwcm9wc2AgY29udGFpbnMgb25lIG9yIG1vcmUgcGF0aHMKICAgKiBAcmV0dXJuIHt2b2lkfQogICAqIEBwcml2YXRlCiAgICovCiAgZnVuY3Rpb24gcnVuTm90aWZ5RWZmZWN0KGluc3QsIHByb3BlcnR5LCBwcm9wcywgb2xkUHJvcHMsIGluZm8sIGhhc1BhdGhzKSB7CiAgICBsZXQgcm9vdFByb3BlcnR5ID0gaGFzUGF0aHMgPyBQb2x5bWVyLlBhdGgucm9vdChwcm9wZXJ0eSkgOiBwcm9wZXJ0eTsKICAgIGxldCBwYXRoID0gcm9vdFByb3BlcnR5ICE9IHByb3BlcnR5ID8gcHJvcGVydHkgOiBudWxsOwogICAgbGV0IHZhbHVlID0gcGF0aCA/IFBvbHltZXIuUGF0aC5nZXQoaW5zdCwgcGF0aCkgOiBpbnN0Ll9fZGF0YVtwcm9wZXJ0eV07CiAgICBpZiAocGF0aCAmJiB2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7CiAgICAgIHZhbHVlID0gcHJvcHNbcHJvcGVydHldOyAgLy8gc3BlY2lmaWNhbGx5IGZvciAuc3BsaWNlcwogICAgfQogICAgZGlzcGF0Y2hOb3RpZnlFdmVudChpbnN0LCBpbmZvLmV2ZW50TmFtZSwgdmFsdWUsIHBhdGgpOwogIH0KCiAgLyoqCiAgICogSGFuZGxlciBmdW5jdGlvbiBmb3IgMi13YXkgbm90aWZpY2F0aW9uIGV2ZW50cy4gUmVjZWl2ZXMgY29udGV4dAogICAqIGluZm9ybWF0aW9uIGNhcHR1cmVkIGluIHRoZSBgYWRkTm90aWZ5TGlzdGVuZXJgIGNsb3N1cmUgZnJvbSB0aGUKICAgKiBgX19ub3RpZnlMaXN0ZW5lcnNgIG1ldGFkYXRhLgogICAqCiAgICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlIG5vdGlmaWVkIHByb3BlcnR5IHRvIHRoZSBob3N0IHByb3BlcnR5IG9yIHBhdGguICBJZgogICAqIHRoZSBldmVudCBjb250YWluZWQgcGF0aCBpbmZvcm1hdGlvbiwgdHJhbnNsYXRlIHRoYXQgcGF0aCB0byB0aGUgaG9zdAogICAqIHNjb3BlJ3MgbmFtZSBmb3IgdGhhdCBwYXRoIGZpcnN0LgogICAqCiAgICogQHBhcmFtIHtDdXN0b21FdmVudH0gZXZlbnQgTm90aWZpY2F0aW9uIGV2ZW50IChlLmcuICc8cHJvcGVydHk+LWNoYW5nZWQnKQogICAqIEBwYXJhbSB7IVByb3BlcnR5RWZmZWN0c1R5cGV9IGluc3QgSG9zdCBlbGVtZW50IGluc3RhbmNlIGhhbmRsaW5nIHRoZSBub3RpZmljYXRpb24gZXZlbnQKICAgKiBAcGFyYW0ge3N0cmluZ30gZnJvbVByb3AgQ2hpbGQgZWxlbWVudCBwcm9wZXJ0eSB0aGF0IHdhcyBib3VuZAogICAqIEBwYXJhbSB7c3RyaW5nfSB0b1BhdGggSG9zdCBwcm9wZXJ0eS9wYXRoIHRoYXQgd2FzIGJvdW5kCiAgICogQHBhcmFtIHtib29sZWFufSBuZWdhdGUgV2hldGhlciB0aGUgYmluZGluZyB3YXMgbmVnYXRlZAogICAqIEByZXR1cm4ge3ZvaWR9CiAgICogQHByaXZhdGUKICAgKi8KICBmdW5jdGlvbiBoYW5kbGVOb3RpZmljYXRpb24oZXZlbnQsIGluc3QsIGZyb21Qcm9wLCB0b1BhdGgsIG5lZ2F0ZSkgewogICAgbGV0IHZhbHVlOwogICAgbGV0IGRldGFpbCA9IC8qKiBAdHlwZSB7T2JqZWN0fSAqLyhldmVudC5kZXRhaWwpOwogICAgbGV0IGZyb21QYXRoID0gZGV0YWlsICYmIGRldGFpbC5wYXRoOwogICAgaWYgKGZyb21QYXRoKSB7CiAgICAgIHRvUGF0aCA9IFBvbHltZXIuUGF0aC50cmFuc2xhdGUoZnJvbVByb3AsIHRvUGF0aCwgZnJvbVBhdGgpOwogICAgICB2YWx1ZSA9IGRldGFpbCAmJiBkZXRhaWwudmFsdWU7CiAgICB9IGVsc2UgewogICAgICB2YWx1ZSA9IGV2ZW50LmN1cnJlbnRUYXJnZXRbZnJvbVByb3BdOwogICAgfQogICAgdmFsdWUgPSBuZWdhdGUgPyAhdmFsdWUgOiB2YWx1ZTsKICAgIGlmICghaW5zdFtUWVBFUy5SRUFEX09OTFldIHx8ICFpbnN0W1RZUEVTLlJFQURfT05MWV1bdG9QYXRoXSkgewogICAgICBpZiAoaW5zdC5fc2V0UGVuZGluZ1Byb3BlcnR5T3JQYXRoKHRvUGF0aCwgdmFsdWUsIHRydWUsIEJvb2xlYW4oZnJvbVBhdGgpKQogICAgICAgICYmICghZGV0YWlsIHx8ICFkZXRhaWwucXVldWVQcm9wZXJ0eSkpIHsKICAgICAgICBpbnN0Ll9pbnZhbGlkYXRlUHJvcGVydGllcygpOwogICAgICB9CiAgICB9CiAgfQoKICAvKioKICAgKiBJbXBsZW1lbnRzIHRoZSAicmVmbGVjdCIgZWZmZWN0LgogICAqCiAgICogU2V0cyB0aGUgYXR0cmlidXRlIG5hbWVkIGBpbmZvLmF0dHJOYW1lYCB0byB0aGUgZ2l2ZW4gcHJvcGVydHkgdmFsdWUuCiAgICoKICAgKiBAcGFyYW0geyFQcm9wZXJ0eUVmZmVjdHNUeXBlfSBpbnN0IFRoZSBpbnN0YW5jZSB0aGUgZWZmZWN0IHdpbGwgYmUgcnVuIG9uCiAgICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IE5hbWUgb2YgcHJvcGVydHkKICAgKiBAcGFyYW0ge09iamVjdH0gcHJvcHMgQmFnIG9mIGN1cnJlbnQgcHJvcGVydHkgY2hhbmdlcwogICAqIEBwYXJhbSB7T2JqZWN0fSBvbGRQcm9wcyBCYWcgb2YgcHJldmlvdXMgdmFsdWVzIGZvciBjaGFuZ2VkIHByb3BlcnRpZXMKICAgKiBAcGFyYW0gez99IGluZm8gRWZmZWN0IG1ldGFkYXRhCiAgICogQHJldHVybiB7dm9pZH0KICAgKiBAcHJpdmF0ZQogICAqLwogIGZ1bmN0aW9uIHJ1blJlZmxlY3RFZmZlY3QoaW5zdCwgcHJvcGVydHksIHByb3BzLCBvbGRQcm9wcywgaW5mbykgewogICAgbGV0IHZhbHVlID0gaW5zdC5fX2RhdGFbcHJvcGVydHldOwogICAgaWYgKFBvbHltZXIuc2FuaXRpemVET01WYWx1ZSkgewogICAgICB2YWx1ZSA9IFBvbHltZXIuc2FuaXRpemVET01WYWx1ZSh2YWx1ZSwgaW5mby5hdHRyTmFtZSwgJ2F0dHJpYnV0ZScsIC8qKiBAdHlwZSB7Tm9kZX0gKi8oaW5zdCkpOwogICAgfQogICAgaW5zdC5fcHJvcGVydHlUb0F0dHJpYnV0ZShwcm9wZXJ0eSwgaW5mby5hdHRyTmFtZSwgdmFsdWUpOwogIH0KCiAgLyoqCiAgICogUnVucyAiY29tcHV0ZWQiIGVmZmVjdHMgZm9yIGEgc2V0IG9mIGNoYW5nZWQgcHJvcGVydGllcy4KICAgKgogICAqIFRoaXMgbWV0aG9kIGRpZmZlcnMgZnJvbSB0aGUgZ2VuZXJpYyBgcnVuRWZmZWN0c2AgbWV0aG9kIGluIHRoYXQgaXQKICAgKiBjb250aW51ZXMgdG8gcnVuIGNvbXB1dGVkIGVmZmVjdHMgYmFzZWQgb24gdGhlIG91dHB1dCBvZiBlYWNoIHBhc3MgdW50aWwKICAgKiB0aGVyZSBhcmUgbm8gbW9yZSBuZXdseSBjb21wdXRlZCBwcm9wZXJ0aWVzLiAgVGhpcyBlbnN1cmVzIHRoYXQgYWxsCiAgICogcHJvcGVydGllcyB0aGF0IHdpbGwgYmUgY29tcHV0ZWQgYnkgdGhlIGluaXRpYWwgc2V0IG9mIGNoYW5nZXMgYXJlCiAgICogY29tcHV0ZWQgYmVmb3JlIG90aGVyIGVmZmVjdHMgKGJpbmRpbmcgcHJvcGFnYXRpb24sIG9ic2VydmVycywgYW5kIG5vdGlmeSkKICAgKiBydW4uCiAgICoKICAgKiBAcGFyYW0geyFQcm9wZXJ0eUVmZmVjdHNUeXBlfSBpbnN0IFRoZSBpbnN0YW5jZSB0aGUgZWZmZWN0IHdpbGwgYmUgcnVuIG9uCiAgICogQHBhcmFtIHshT2JqZWN0fSBjaGFuZ2VkUHJvcHMgQmFnIG9mIGNoYW5nZWQgcHJvcGVydGllcwogICAqIEBwYXJhbSB7IU9iamVjdH0gb2xkUHJvcHMgQmFnIG9mIHByZXZpb3VzIHZhbHVlcyBmb3IgY2hhbmdlZCBwcm9wZXJ0aWVzCiAgICogQHBhcmFtIHtib29sZWFufSBoYXNQYXRocyBUcnVlIHdpdGggYHByb3BzYCBjb250YWlucyBvbmUgb3IgbW9yZSBwYXRocwogICAqIEByZXR1cm4ge3ZvaWR9CiAgICogQHByaXZhdGUKICAgKi8KICBmdW5jdGlvbiBydW5Db21wdXRlZEVmZmVjdHMoaW5zdCwgY2hhbmdlZFByb3BzLCBvbGRQcm9wcywgaGFzUGF0aHMpIHsKICAgIGxldCBjb21wdXRlRWZmZWN0cyA9IGluc3RbVFlQRVMuQ09NUFVURV07CiAgICBpZiAoY29tcHV0ZUVmZmVjdHMpIHsKICAgICAgbGV0IGlucHV0UHJvcHMgPSBjaGFuZ2VkUHJvcHM7CiAgICAgIHdoaWxlIChydW5FZmZlY3RzKGluc3QsIGNvbXB1dGVFZmZlY3RzLCBpbnB1dFByb3BzLCBvbGRQcm9wcywgaGFzUGF0aHMpKSB7CiAgICAgICAgT2JqZWN0LmFzc2lnbihvbGRQcm9wcywgaW5zdC5fX2RhdGFPbGQpOwogICAgICAgIE9iamVjdC5hc3NpZ24oY2hhbmdlZFByb3BzLCBpbnN0Ll9fZGF0YVBlbmRpbmcpOwogICAgICAgIGlucHV0UHJvcHMgPSBpbnN0Ll9fZGF0YVBlbmRpbmc7CiAgICAgICAgaW5zdC5fX2RhdGFQZW5kaW5nID0gbnVsbDsKICAgICAgfQogICAgfQogIH0KCiAgLyoqCiAgICogSW1wbGVtZW50cyB0aGUgImNvbXB1dGVkIHByb3BlcnR5IiBlZmZlY3QgYnkgcnVubmluZyB0aGUgbWV0aG9kIHdpdGggdGhlCiAgICogdmFsdWVzIG9mIHRoZSBhcmd1bWVudHMgc3BlY2lmaWVkIGluIHRoZSBgaW5mb2Agb2JqZWN0IGFuZCBzZXR0aW5nIHRoZQogICAqIHJldHVybiB2YWx1ZSB0byB0aGUgY29tcHV0ZWQgcHJvcGVydHkgc3BlY2lmaWVkLgogICAqCiAgICogQHBhcmFtIHshUHJvcGVydHlFZmZlY3RzVHlwZX0gaW5zdCBUaGUgaW5zdGFuY2UgdGhlIGVmZmVjdCB3aWxsIGJlIHJ1biBvbgogICAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eSBOYW1lIG9mIHByb3BlcnR5CiAgICogQHBhcmFtIHtPYmplY3R9IHByb3BzIEJhZyBvZiBjdXJyZW50IHByb3BlcnR5IGNoYW5nZXMKICAgKiBAcGFyYW0ge09iamVjdH0gb2xkUHJvcHMgQmFnIG9mIHByZXZpb3VzIHZhbHVlcyBmb3IgY2hhbmdlZCBwcm9wZXJ0aWVzCiAgICogQHBhcmFtIHs/fSBpbmZvIEVmZmVjdCBtZXRhZGF0YQogICAqIEByZXR1cm4ge3ZvaWR9CiAgICogQHByaXZhdGUKICAgKi8KICBmdW5jdGlvbiBydW5Db21wdXRlZEVmZmVjdChpbnN0LCBwcm9wZXJ0eSwgcHJvcHMsIG9sZFByb3BzLCBpbmZvKSB7CiAgICBsZXQgcmVzdWx0ID0gcnVuTWV0aG9kRWZmZWN0KGluc3QsIHByb3BlcnR5LCBwcm9wcywgb2xkUHJvcHMsIGluZm8pOwogICAgbGV0IGNvbXB1dGVkUHJvcCA9IGluZm8ubWV0aG9kSW5mbzsKICAgIGlmIChpbnN0Ll9fZGF0YUhhc0FjY2Vzc29yICYmIGluc3QuX19kYXRhSGFzQWNjZXNzb3JbY29tcHV0ZWRQcm9wXSkgewogICAgICBpbnN0Ll9zZXRQZW5kaW5nUHJvcGVydHkoY29tcHV0ZWRQcm9wLCByZXN1bHQsIHRydWUpOwogICAgfSBlbHNlIHsKICAgICAgaW5zdFtjb21wdXRlZFByb3BdID0gcmVzdWx0OwogICAgfQogIH0KCiAgLyoqCiAgICogQ29tcHV0ZXMgcGF0aCBjaGFuZ2VzIGJhc2VkIG9uIHBhdGggbGlua3Mgc2V0IHVwIHVzaW5nIHRoZSBgbGlua1BhdGhzYAogICAqIEFQSS4KICAgKgogICAqIEBwYXJhbSB7IVByb3BlcnR5RWZmZWN0c1R5cGV9IGluc3QgVGhlIGluc3RhbmNlIHdob3NlIHByb3BzIGFyZSBjaGFuZ2luZwogICAqIEBwYXJhbSB7c3RyaW5nIHwgIUFycmF5PChzdHJpbmd8bnVtYmVyKT59IHBhdGggUGF0aCB0aGF0IGhhcyBjaGFuZ2VkCiAgICogQHBhcmFtIHsqfSB2YWx1ZSBWYWx1ZSBvZiBjaGFuZ2VkIHBhdGgKICAgKiBAcmV0dXJuIHt2b2lkfQogICAqIEBwcml2YXRlCiAgICovCiAgZnVuY3Rpb24gY29tcHV0ZUxpbmtlZFBhdGhzKGluc3QsIHBhdGgsIHZhbHVlKSB7CiAgICBsZXQgbGlua3MgPSBpbnN0Ll9fZGF0YUxpbmtlZFBhdGhzOwogICAgaWYgKGxpbmtzKSB7CiAgICAgIGxldCBsaW5rOwogICAgICBmb3IgKGxldCBhIGluIGxpbmtzKSB7CiAgICAgICAgbGV0IGIgPSBsaW5rc1thXTsKICAgICAgICBpZiAoUG9seW1lci5QYXRoLmlzRGVzY2VuZGFudChhLCBwYXRoKSkgewogICAgICAgICAgbGluayA9IFBvbHltZXIuUGF0aC50cmFuc2xhdGUoYSwgYiwgcGF0aCk7CiAgICAgICAgICBpbnN0Ll9zZXRQZW5kaW5nUHJvcGVydHlPclBhdGgobGluaywgdmFsdWUsIHRydWUsIHRydWUpOwogICAgICAgIH0gZWxzZSBpZiAoUG9seW1lci5QYXRoLmlzRGVzY2VuZGFudChiLCBwYXRoKSkgewogICAgICAgICAgbGluayA9IFBvbHltZXIuUGF0aC50cmFuc2xhdGUoYiwgYSwgcGF0aCk7CiAgICAgICAgICBpbnN0Ll9zZXRQZW5kaW5nUHJvcGVydHlPclBhdGgobGluaywgdmFsdWUsIHRydWUsIHRydWUpOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KCiAgLy8gLS0gYmluZGluZ3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAvKioKICAgKiBBZGRzIGJpbmRpbmcgbWV0YWRhdGEgdG8gdGhlIGN1cnJlbnQgYG5vZGVJbmZvYCwgYW5kIGJpbmRpbmcgZWZmZWN0cwogICAqIGZvciBhbGwgcGFydCBkZXBlbmRlbmNpZXMgdG8gYHRlbXBsYXRlSW5mb2AuCiAgICoKICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjb25zdHJ1Y3RvciBDbGFzcyB0aGF0IGBfcGFyc2VUZW1wbGF0ZWAgaXMgY3VycmVudGx5CiAgICogICBydW5uaW5nIG9uCiAgICogQHBhcmFtIHtUZW1wbGF0ZUluZm99IHRlbXBsYXRlSW5mbyBUZW1wbGF0ZSBtZXRhZGF0YSBmb3IgY3VycmVudCB0ZW1wbGF0ZQogICAqIEBwYXJhbSB7Tm9kZUluZm99IG5vZGVJbmZvIE5vZGUgbWV0YWRhdGEgZm9yIGN1cnJlbnQgdGVtcGxhdGUgbm9kZQogICAqIEBwYXJhbSB7c3RyaW5nfSBraW5kIEJpbmRpbmcga2luZCwgZWl0aGVyICdwcm9wZXJ0eScsICdhdHRyaWJ1dGUnLCBvciAndGV4dCcKICAgKiBAcGFyYW0ge3N0cmluZ30gdGFyZ2V0IFRhcmdldCBwcm9wZXJ0eSBuYW1lCiAgICogQHBhcmFtIHshQXJyYXk8IUJpbmRpbmdQYXJ0Pn0gcGFydHMgQXJyYXkgb2YgYmluZGluZyBwYXJ0IG1ldGFkYXRhCiAgICogQHBhcmFtIHtzdHJpbmc9fSBsaXRlcmFsIExpdGVyYWwgdGV4dCBzdXJyb3VuZGluZyBiaW5kaW5nIHBhcnRzIChzcGVjaWZpZWQKICAgKiAgIG9ubHkgZm9yICdwcm9wZXJ0eScgYmluZGluZ3MsIHNpbmNlIHRoZXNlIG11c3QgYmUgaW5pdGlhbGl6ZWQgYXMgcGFydAogICAqICAgb2YgYm9vdC11cCkKICAgKiBAcmV0dXJuIHt2b2lkfQogICAqIEBwcml2YXRlCiAgICovCiAgZnVuY3Rpb24gYWRkQmluZGluZyhjb25zdHJ1Y3RvciwgdGVtcGxhdGVJbmZvLCBub2RlSW5mbywga2luZCwgdGFyZ2V0LCBwYXJ0cywgbGl0ZXJhbCkgewogICAgLy8gQ3JlYXRlIGJpbmRpbmcgbWV0YWRhdGEgYW5kIGFkZCB0byBub2RlSW5mbwogICAgbm9kZUluZm8uYmluZGluZ3MgPSBub2RlSW5mby5iaW5kaW5ncyB8fCBbXTsKICAgIGxldCAvKiogQmluZGluZyAqLyBiaW5kaW5nID0geyBraW5kLCB0YXJnZXQsIHBhcnRzLCBsaXRlcmFsLCBpc0NvbXBvdW5kOiAocGFydHMubGVuZ3RoICE9PSAxKSB9OwogICAgbm9kZUluZm8uYmluZGluZ3MucHVzaChiaW5kaW5nKTsKICAgIC8vIEFkZCBsaXN0ZW5lciBpbmZvIHRvIGJpbmRpbmcgbWV0YWRhdGEKICAgIGlmIChzaG91bGRBZGRMaXN0ZW5lcihiaW5kaW5nKSkgewogICAgICBsZXQge2V2ZW50LCBuZWdhdGV9ID0gYmluZGluZy5wYXJ0c1swXTsKICAgICAgYmluZGluZy5saXN0ZW5lckV2ZW50ID0gZXZlbnQgfHwgKENhc2VNYXAuY2FtZWxUb0Rhc2hDYXNlKHRhcmdldCkgKyAnLWNoYW5nZWQnKTsKICAgICAgYmluZGluZy5saXN0ZW5lck5lZ2F0ZSA9IG5lZ2F0ZTsKICAgIH0KICAgIC8vIEFkZCAicHJvcGFnYXRlIiBwcm9wZXJ0eSBlZmZlY3RzIHRvIHRlbXBsYXRlSW5mbwogICAgbGV0IGluZGV4ID0gdGVtcGxhdGVJbmZvLm5vZGVJbmZvTGlzdC5sZW5ndGg7CiAgICBmb3IgKGxldCBpPTA7IGk8YmluZGluZy5wYXJ0cy5sZW5ndGg7IGkrKykgewogICAgICBsZXQgcGFydCA9IGJpbmRpbmcucGFydHNbaV07CiAgICAgIHBhcnQuY29tcG91bmRJbmRleCA9IGk7CiAgICAgIGFkZEVmZmVjdEZvckJpbmRpbmdQYXJ0KGNvbnN0cnVjdG9yLCB0ZW1wbGF0ZUluZm8sIGJpbmRpbmcsIHBhcnQsIGluZGV4KTsKICAgIH0KICB9CgogIC8qKgogICAqIEFkZHMgcHJvcGVydHkgZWZmZWN0cyB0byB0aGUgZ2l2ZW4gYHRlbXBsYXRlSW5mb2AgZm9yIHRoZSBnaXZlbiBiaW5kaW5nCiAgICogcGFydC4KICAgKgogICAqIEBwYXJhbSB7RnVuY3Rpb259IGNvbnN0cnVjdG9yIENsYXNzIHRoYXQgYF9wYXJzZVRlbXBsYXRlYCBpcyBjdXJyZW50bHkKICAgKiAgIHJ1bm5pbmcgb24KICAgKiBAcGFyYW0ge1RlbXBsYXRlSW5mb30gdGVtcGxhdGVJbmZvIFRlbXBsYXRlIG1ldGFkYXRhIGZvciBjdXJyZW50IHRlbXBsYXRlCiAgICogQHBhcmFtIHshQmluZGluZ30gYmluZGluZyBCaW5kaW5nIG1ldGFkYXRhCiAgICogQHBhcmFtIHshQmluZGluZ1BhcnR9IHBhcnQgQmluZGluZyBwYXJ0IG1ldGFkYXRhCiAgICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IEluZGV4IGludG8gYG5vZGVJbmZvTGlzdGAgZm9yIHRoaXMgbm9kZQogICAqIEByZXR1cm4ge3ZvaWR9CiAgICovCiAgZnVuY3Rpb24gYWRkRWZmZWN0Rm9yQmluZGluZ1BhcnQoY29uc3RydWN0b3IsIHRlbXBsYXRlSW5mbywgYmluZGluZywgcGFydCwgaW5kZXgpIHsKICAgIGlmICghcGFydC5saXRlcmFsKSB7CiAgICAgIGlmIChiaW5kaW5nLmtpbmQgPT09ICdhdHRyaWJ1dGUnICYmIGJpbmRpbmcudGFyZ2V0WzBdID09PSAnLScpIHsKICAgICAgICBjb25zb2xlLndhcm4oJ0Nhbm5vdCBzZXQgYXR0cmlidXRlICcgKyBiaW5kaW5nLnRhcmdldCArCiAgICAgICAgICAnIGJlY2F1c2UgIi0iIGlzIG5vdCBhIHZhbGlkIGF0dHJpYnV0ZSBzdGFydGluZyBjaGFyYWN0ZXInKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBsZXQgZGVwZW5kZW5jaWVzID0gcGFydC5kZXBlbmRlbmNpZXM7CiAgICAgICAgbGV0IGluZm8gPSB7IGluZGV4LCBiaW5kaW5nLCBwYXJ0LCBldmFsdWF0b3I6IGNvbnN0cnVjdG9yIH07CiAgICAgICAgZm9yIChsZXQgaj0wOyBqPGRlcGVuZGVuY2llcy5sZW5ndGg7IGorKykgewogICAgICAgICAgbGV0IHRyaWdnZXIgPSBkZXBlbmRlbmNpZXNbal07CiAgICAgICAgICBpZiAodHlwZW9mIHRyaWdnZXIgPT0gJ3N0cmluZycpIHsKICAgICAgICAgICAgdHJpZ2dlciA9IHBhcnNlQXJnKHRyaWdnZXIpOwogICAgICAgICAgICB0cmlnZ2VyLndpbGRjYXJkID0gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgICAgIGNvbnN0cnVjdG9yLl9hZGRUZW1wbGF0ZVByb3BlcnR5RWZmZWN0KHRlbXBsYXRlSW5mbywgdHJpZ2dlci5yb290UHJvcGVydHksIHsKICAgICAgICAgICAgZm46IHJ1bkJpbmRpbmdFZmZlY3QsCiAgICAgICAgICAgIGluZm8sIHRyaWdnZXIKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KCiAgLyoqCiAgICogSW1wbGVtZW50cyB0aGUgImJpbmRpbmciIChwcm9wZXJ0eS9wYXRoIGJpbmRpbmcpIGVmZmVjdC4KICAgKgogICAqIE5vdGUgdGhhdCBiaW5kaW5nIHN5bnRheCBpcyBvdmVycmlkYWJsZSB2aWEgYF9wYXJzZUJpbmRpbmdzYCBhbmQKICAgKiBgX2V2YWx1YXRlQmluZGluZ2AuICBUaGlzIG1ldGhvZCB3aWxsIGNhbGwgYF9ldmFsdWF0ZUJpbmRpbmdgIGZvciBhbnkKICAgKiBub24tbGl0ZXJhbCBwYXJ0cyByZXR1cm5lZCBmcm9tIGBfcGFyc2VCaW5kaW5nc2AuICBIb3dldmVyLAogICAqIHRoZXJlIGlzIG5vIHN1cHBvcnQgZm9yIF9wYXRoXyBiaW5kaW5ncyB2aWEgY3VzdG9tIGJpbmRpbmcgcGFydHMsCiAgICogYXMgdGhpcyBpcyBzcGVjaWZpYyB0byBQb2x5bWVyJ3MgcGF0aCBiaW5kaW5nIHN5bnRheC4KICAgKgogICAqIEBwYXJhbSB7IVByb3BlcnR5RWZmZWN0c1R5cGV9IGluc3QgVGhlIGluc3RhbmNlIHRoZSBlZmZlY3Qgd2lsbCBiZSBydW4gb24KICAgKiBAcGFyYW0ge3N0cmluZ30gcGF0aCBOYW1lIG9mIHByb3BlcnR5CiAgICogQHBhcmFtIHtPYmplY3R9IHByb3BzIEJhZyBvZiBjdXJyZW50IHByb3BlcnR5IGNoYW5nZXMKICAgKiBAcGFyYW0ge09iamVjdH0gb2xkUHJvcHMgQmFnIG9mIHByZXZpb3VzIHZhbHVlcyBmb3IgY2hhbmdlZCBwcm9wZXJ0aWVzCiAgICogQHBhcmFtIHs/fSBpbmZvIEVmZmVjdCBtZXRhZGF0YQogICAqIEBwYXJhbSB7Ym9vbGVhbn0gaGFzUGF0aHMgVHJ1ZSB3aXRoIGBwcm9wc2AgY29udGFpbnMgb25lIG9yIG1vcmUgcGF0aHMKICAgKiBAcGFyYW0ge0FycmF5fSBub2RlTGlzdCBMaXN0IG9mIG5vZGVzIGFzc29jaWF0ZWQgd2l0aCBgbm9kZUluZm9MaXN0YCB0ZW1wbGF0ZQogICAqICAgbWV0YWRhdGEKICAgKiBAcmV0dXJuIHt2b2lkfQogICAqIEBwcml2YXRlCiAgICovCiAgZnVuY3Rpb24gcnVuQmluZGluZ0VmZmVjdChpbnN0LCBwYXRoLCBwcm9wcywgb2xkUHJvcHMsIGluZm8sIGhhc1BhdGhzLCBub2RlTGlzdCkgewogICAgbGV0IG5vZGUgPSBub2RlTGlzdFtpbmZvLmluZGV4XTsKICAgIGxldCBiaW5kaW5nID0gaW5mby5iaW5kaW5nOwogICAgbGV0IHBhcnQgPSBpbmZvLnBhcnQ7CiAgICAvLyBTdWJwYXRoIG5vdGlmaWNhdGlvbjogdHJhbnNmb3JtIHBhdGggYW5kIHNldCB0byBjbGllbnQKICAgIC8vIGUuZy46IGZvbz0ie3tvYmouc3VifX0iLCBwYXRoOiAnb2JqLnN1Yi5wcm9wJywgc2V0ICdmb28ucHJvcCc9b2JqLnN1Yi5wcm9wCiAgICBpZiAoaGFzUGF0aHMgJiYgcGFydC5zb3VyY2UgJiYgKHBhdGgubGVuZ3RoID4gcGFydC5zb3VyY2UubGVuZ3RoKSAmJgogICAgICAgIChiaW5kaW5nLmtpbmQgPT0gJ3Byb3BlcnR5JykgJiYgIWJpbmRpbmcuaXNDb21wb3VuZCAmJgogICAgICAgIG5vZGUuX19pc1Byb3BlcnR5RWZmZWN0c0NsaWVudCAmJgogICAgICAgIG5vZGUuX19kYXRhSGFzQWNjZXNzb3IgJiYgbm9kZS5fX2RhdGFIYXNBY2Nlc3NvcltiaW5kaW5nLnRhcmdldF0pIHsKICAgICAgbGV0IHZhbHVlID0gcHJvcHNbcGF0aF07CiAgICAgIHBhdGggPSBQb2x5bWVyLlBhdGgudHJhbnNsYXRlKHBhcnQuc291cmNlLCBiaW5kaW5nLnRhcmdldCwgcGF0aCk7CiAgICAgIGlmIChub2RlLl9zZXRQZW5kaW5nUHJvcGVydHlPclBhdGgocGF0aCwgdmFsdWUsIGZhbHNlLCB0cnVlKSkgewogICAgICAgIGluc3QuX2VucXVldWVDbGllbnQobm9kZSk7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGxldCB2YWx1ZSA9IGluZm8uZXZhbHVhdG9yLl9ldmFsdWF0ZUJpbmRpbmcoaW5zdCwgcGFydCwgcGF0aCwgcHJvcHMsIG9sZFByb3BzLCBoYXNQYXRocyk7CiAgICAgIC8vIFByb3BhZ2F0ZSB2YWx1ZSB0byBjaGlsZAogICAgICBhcHBseUJpbmRpbmdWYWx1ZShpbnN0LCBub2RlLCBiaW5kaW5nLCBwYXJ0LCB2YWx1ZSk7CiAgICB9CiAgfQoKICAvKioKICAgKiBTZXRzIHRoZSB2YWx1ZSBmb3IgYW4gImJpbmRpbmciIChiaW5kaW5nKSBlZmZlY3QgdG8gYSBub2RlLAogICAqIGVpdGhlciBhcyBhIHByb3BlcnR5IG9yIGF0dHJpYnV0ZS4KICAgKgogICAqIEBwYXJhbSB7IVByb3BlcnR5RWZmZWN0c1R5cGV9IGluc3QgVGhlIGluc3RhbmNlIG93bmluZyB0aGUgYmluZGluZyBlZmZlY3QKICAgKiBAcGFyYW0ge05vZGV9IG5vZGUgVGFyZ2V0IG5vZGUgZm9yIGJpbmRpbmcKICAgKiBAcGFyYW0geyFCaW5kaW5nfSBiaW5kaW5nIEJpbmRpbmcgbWV0YWRhdGEKICAgKiBAcGFyYW0geyFCaW5kaW5nUGFydH0gcGFydCBCaW5kaW5nIHBhcnQgbWV0YWRhdGEKICAgKiBAcGFyYW0geyp9IHZhbHVlIFZhbHVlIHRvIHNldAogICAqIEByZXR1cm4ge3ZvaWR9CiAgICogQHByaXZhdGUKICAgKi8KICBmdW5jdGlvbiBhcHBseUJpbmRpbmdWYWx1ZShpbnN0LCBub2RlLCBiaW5kaW5nLCBwYXJ0LCB2YWx1ZSkgewogICAgdmFsdWUgPSBjb21wdXRlQmluZGluZ1ZhbHVlKG5vZGUsIHZhbHVlLCBiaW5kaW5nLCBwYXJ0KTsKICAgIGlmIChQb2x5bWVyLnNhbml0aXplRE9NVmFsdWUpIHsKICAgICAgdmFsdWUgPSBQb2x5bWVyLnNhbml0aXplRE9NVmFsdWUodmFsdWUsIGJpbmRpbmcudGFyZ2V0LCBiaW5kaW5nLmtpbmQsIG5vZGUpOwogICAgfQogICAgaWYgKGJpbmRpbmcua2luZCA9PSAnYXR0cmlidXRlJykgewogICAgICAvLyBBdHRyaWJ1dGUgYmluZGluZwogICAgICBpbnN0Ll92YWx1ZVRvTm9kZUF0dHJpYnV0ZSgvKiogQHR5cGUge0VsZW1lbnR9ICovKG5vZGUpLCB2YWx1ZSwgYmluZGluZy50YXJnZXQpOwogICAgfSBlbHNlIHsKICAgICAgLy8gUHJvcGVydHkgYmluZGluZwogICAgICBsZXQgcHJvcCA9IGJpbmRpbmcudGFyZ2V0OwogICAgICBpZiAobm9kZS5fX2lzUHJvcGVydHlFZmZlY3RzQ2xpZW50ICYmCiAgICAgICAgICBub2RlLl9fZGF0YUhhc0FjY2Vzc29yICYmIG5vZGUuX19kYXRhSGFzQWNjZXNzb3JbcHJvcF0pIHsKICAgICAgICBpZiAoIW5vZGVbVFlQRVMuUkVBRF9PTkxZXSB8fCAhbm9kZVtUWVBFUy5SRUFEX09OTFldW3Byb3BdKSB7CiAgICAgICAgICBpZiAobm9kZS5fc2V0UGVuZGluZ1Byb3BlcnR5KHByb3AsIHZhbHVlKSkgewogICAgICAgICAgICBpbnN0Ll9lbnF1ZXVlQ2xpZW50KG5vZGUpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSBlbHNlICB7CiAgICAgICAgaW5zdC5fc2V0VW5tYW5hZ2VkUHJvcGVydHlUb05vZGUobm9kZSwgcHJvcCwgdmFsdWUpOwogICAgICB9CiAgICB9CiAgfQoKICAvKioKICAgKiBUcmFuc2Zvcm1zIGFuICJiaW5kaW5nIiBlZmZlY3QgdmFsdWUgYmFzZWQgb24gY29tcG91bmQgJiBuZWdhdGlvbgogICAqIGVmZmVjdCBtZXRhZGF0YSwgYXMgd2VsbCBhcyBoYW5kbGluZyBmb3Igc3BlY2lhbC1jYXNlIHByb3BlcnRpZXMKICAgKgogICAqIEBwYXJhbSB7Tm9kZX0gbm9kZSBOb2RlIHRoZSB2YWx1ZSB3aWxsIGJlIHNldCB0bwogICAqIEBwYXJhbSB7Kn0gdmFsdWUgVmFsdWUgdG8gc2V0CiAgICogQHBhcmFtIHshQmluZGluZ30gYmluZGluZyBCaW5kaW5nIG1ldGFkYXRhCiAgICogQHBhcmFtIHshQmluZGluZ1BhcnR9IHBhcnQgQmluZGluZyBwYXJ0IG1ldGFkYXRhCiAgICogQHJldHVybiB7Kn0gVHJhbnNmb3JtZWQgdmFsdWUgdG8gc2V0CiAgICogQHByaXZhdGUKICAgKi8KICBmdW5jdGlvbiBjb21wdXRlQmluZGluZ1ZhbHVlKG5vZGUsIHZhbHVlLCBiaW5kaW5nLCBwYXJ0KSB7CiAgICBpZiAoYmluZGluZy5pc0NvbXBvdW5kKSB7CiAgICAgIGxldCBzdG9yYWdlID0gbm9kZS5fX2RhdGFDb21wb3VuZFN0b3JhZ2VbYmluZGluZy50YXJnZXRdOwogICAgICBzdG9yYWdlW3BhcnQuY29tcG91bmRJbmRleF0gPSB2YWx1ZTsKICAgICAgdmFsdWUgPSBzdG9yYWdlLmpvaW4oJycpOwogICAgfQogICAgaWYgKGJpbmRpbmcua2luZCAhPT0gJ2F0dHJpYnV0ZScpIHsKICAgICAgLy8gU29tZSBicm93c2VycyBzZXJpYWxpemUgYHVuZGVmaW5lZGAgdG8gYCJ1bmRlZmluZWQiYAogICAgICBpZiAoYmluZGluZy50YXJnZXQgPT09ICd0ZXh0Q29udGVudCcgfHwKICAgICAgICAgIChiaW5kaW5nLnRhcmdldCA9PT0gJ3ZhbHVlJyAmJgogICAgICAgICAgICAobm9kZS5sb2NhbE5hbWUgPT09ICdpbnB1dCcgfHwgbm9kZS5sb2NhbE5hbWUgPT09ICd0ZXh0YXJlYScpKSkgewogICAgICAgIHZhbHVlID0gdmFsdWUgPT0gdW5kZWZpbmVkID8gJycgOiB2YWx1ZTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHZhbHVlOwogIH0KCiAgLyoqCiAgICogUmV0dXJucyB0cnVlIGlmIGEgYmluZGluZydzIG1ldGFkYXRhIG1lZXRzIGFsbCB0aGUgcmVxdWlyZW1lbnRzIHRvIGFsbG93CiAgICogMi13YXkgYmluZGluZywgYW5kIHRoZXJlZm9yZSBhIGA8cHJvcGVydHk+LWNoYW5nZWRgIGV2ZW50IGxpc3RlbmVyIHNob3VsZCBiZQogICAqIGFkZGVkOgogICAqIC0gdXNlZCBjdXJseSBicmFjZXMKICAgKiAtIGlzIGEgcHJvcGVydHkgKG5vdCBhdHRyaWJ1dGUpIGJpbmRpbmcKICAgKiAtIGlzIG5vdCBhIHRleHRDb250ZW50IGJpbmRpbmcKICAgKiAtIGlzIG5vdCBjb21wb3VuZAogICAqCiAgICogQHBhcmFtIHshQmluZGluZ30gYmluZGluZyBCaW5kaW5nIG1ldGFkYXRhCiAgICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiAyLXdheSBsaXN0ZW5lciBzaG91bGQgYmUgYWRkZWQKICAgKiBAcHJpdmF0ZQogICAqLwogIGZ1bmN0aW9uIHNob3VsZEFkZExpc3RlbmVyKGJpbmRpbmcpIHsKICAgIHJldHVybiBCb29sZWFuKGJpbmRpbmcudGFyZ2V0KSAmJgogICAgICAgICAgIGJpbmRpbmcua2luZCAhPSAnYXR0cmlidXRlJyAmJgogICAgICAgICAgIGJpbmRpbmcua2luZCAhPSAndGV4dCcgJiYKICAgICAgICAgICAhYmluZGluZy5pc0NvbXBvdW5kICYmCiAgICAgICAgICAgYmluZGluZy5wYXJ0c1swXS5tb2RlID09PSAneyc7CiAgfQoKICAvKioKICAgKiBTZXR1cCBjb21wb3VuZCBiaW5kaW5nIHN0b3JhZ2Ugc3RydWN0dXJlcywgbm90aWZ5IGxpc3RlbmVycywgYW5kIGRhdGFIb3N0CiAgICogcmVmZXJlbmNlcyBvbnRvIHRoZSBib3VuZCBub2RlTGlzdC4KICAgKgogICAqIEBwYXJhbSB7IVByb3BlcnR5RWZmZWN0c1R5cGV9IGluc3QgSW5zdGFuY2UgdGhhdCBiYXMgYmVlbiBwcmV2aW91c2x5IGJvdW5kCiAgICogQHBhcmFtIHtUZW1wbGF0ZUluZm99IHRlbXBsYXRlSW5mbyBUZW1wbGF0ZSBtZXRhZGF0YQogICAqIEByZXR1cm4ge3ZvaWR9CiAgICogQHByaXZhdGUKICAgKi8KICBmdW5jdGlvbiBzZXR1cEJpbmRpbmdzKGluc3QsIHRlbXBsYXRlSW5mbykgewogICAgLy8gU2V0dXAgY29tcG91bmQgc3RvcmFnZSwgZGF0YUhvc3QsIGFuZCBub3RpZnkgbGlzdGVuZXJzCiAgICBsZXQge25vZGVMaXN0LCBub2RlSW5mb0xpc3R9ID0gdGVtcGxhdGVJbmZvOwogICAgaWYgKG5vZGVJbmZvTGlzdC5sZW5ndGgpIHsKICAgICAgZm9yIChsZXQgaT0wOyBpIDwgbm9kZUluZm9MaXN0Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgbGV0IGluZm8gPSBub2RlSW5mb0xpc3RbaV07CiAgICAgICAgbGV0IG5vZGUgPSBub2RlTGlzdFtpXTsKICAgICAgICBsZXQgYmluZGluZ3MgPSBpbmZvLmJpbmRpbmdzOwogICAgICAgIGlmIChiaW5kaW5ncykgewogICAgICAgICAgZm9yIChsZXQgaT0wOyBpPGJpbmRpbmdzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGxldCBiaW5kaW5nID0gYmluZGluZ3NbaV07CiAgICAgICAgICAgIHNldHVwQ29tcG91bmRTdG9yYWdlKG5vZGUsIGJpbmRpbmcpOwogICAgICAgICAgICBhZGROb3RpZnlMaXN0ZW5lcihub2RlLCBpbnN0LCBiaW5kaW5nKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgbm9kZS5fX2RhdGFIb3N0ID0gaW5zdDsKICAgICAgfQogICAgfQogIH0KCiAgLyoqCiAgICogSW5pdGlhbGl6ZXMgYF9fZGF0YUNvbXBvdW5kU3RvcmFnZWAgbG9jYWwgc3RvcmFnZSBvbiBhIGJvdW5kIG5vZGUgd2l0aAogICAqIGluaXRpYWwgbGl0ZXJhbCBkYXRhIGZvciBjb21wb3VuZCBiaW5kaW5ncywgYW5kIHNldHMgdGhlIGpvaW5lZAogICAqIGxpdGVyYWwgcGFydHMgdG8gdGhlIGJvdW5kIHByb3BlcnR5LgogICAqCiAgICogV2hlbiBjaGFuZ2VzIHRvIGNvbXBvdW5kIHBhcnRzIG9jY3VyLCB0aGV5IGFyZSBmaXJzdCBzZXQgaW50byB0aGUgY29tcG91bmQKICAgKiBzdG9yYWdlIGFycmF5IGZvciB0aGF0IHByb3BlcnR5LCBhbmQgdGhlbiB0aGUgYXJyYXkgaXMgam9pbmVkIHRvIHJlc3VsdCBpbgogICAqIHRoZSBmaW5hbCB2YWx1ZSBzZXQgdG8gdGhlIHByb3BlcnR5L2F0dHJpYnV0ZS4KICAgKgogICAqIEBwYXJhbSB7Tm9kZX0gbm9kZSBCb3VuZCBub2RlIHRvIGluaXRpYWxpemUKICAgKiBAcGFyYW0ge0JpbmRpbmd9IGJpbmRpbmcgQmluZGluZyBtZXRhZGF0YQogICAqIEByZXR1cm4ge3ZvaWR9CiAgICogQHByaXZhdGUKICAgKi8KICBmdW5jdGlvbiBzZXR1cENvbXBvdW5kU3RvcmFnZShub2RlLCBiaW5kaW5nKSB7CiAgICBpZiAoYmluZGluZy5pc0NvbXBvdW5kKSB7CiAgICAgIC8vIENyZWF0ZSBjb21wb3VuZCBzdG9yYWdlIG1hcAogICAgICBsZXQgc3RvcmFnZSA9IG5vZGUuX19kYXRhQ29tcG91bmRTdG9yYWdlIHx8CiAgICAgICAgKG5vZGUuX19kYXRhQ29tcG91bmRTdG9yYWdlID0ge30pOwogICAgICBsZXQgcGFydHMgPSBiaW5kaW5nLnBhcnRzOwogICAgICAvLyBDb3B5IGxpdGVyYWxzIGZyb20gcGFydHMgaW50byBzdG9yYWdlIGZvciB0aGlzIGJpbmRpbmcKICAgICAgbGV0IGxpdGVyYWxzID0gbmV3IEFycmF5KHBhcnRzLmxlbmd0aCk7CiAgICAgIGZvciAobGV0IGo9MDsgajxwYXJ0cy5sZW5ndGg7IGorKykgewogICAgICAgIGxpdGVyYWxzW2pdID0gcGFydHNbal0ubGl0ZXJhbDsKICAgICAgfQogICAgICBsZXQgdGFyZ2V0ID0gYmluZGluZy50YXJnZXQ7CiAgICAgIHN0b3JhZ2VbdGFyZ2V0XSA9IGxpdGVyYWxzOwogICAgICAvLyBDb25maWd1cmUgcHJvcGVydGllcyB3aXRoIHRoZWlyIGxpdGVyYWwgcGFydHMKICAgICAgaWYgKGJpbmRpbmcubGl0ZXJhbCAmJiBiaW5kaW5nLmtpbmQgPT0gJ3Byb3BlcnR5JykgewogICAgICAgIG5vZGVbdGFyZ2V0XSA9IGJpbmRpbmcubGl0ZXJhbDsKICAgICAgfQogICAgfQogIH0KCiAgLyoqCiAgICogQWRkcyBhIDItd2F5IGJpbmRpbmcgbm90aWZpY2F0aW9uIGV2ZW50IGxpc3RlbmVyIHRvIHRoZSBub2RlIHNwZWNpZmllZAogICAqCiAgICogQHBhcmFtIHtPYmplY3R9IG5vZGUgQ2hpbGQgZWxlbWVudCB0byBhZGQgbGlzdGVuZXIgdG8KICAgKiBAcGFyYW0geyFQcm9wZXJ0eUVmZmVjdHNUeXBlfSBpbnN0IEhvc3QgZWxlbWVudCBpbnN0YW5jZSB0byBoYW5kbGUgbm90aWZpY2F0aW9uIGV2ZW50CiAgICogQHBhcmFtIHtCaW5kaW5nfSBiaW5kaW5nIEJpbmRpbmcgbWV0YWRhdGEKICAgKiBAcmV0dXJuIHt2b2lkfQogICAqIEBwcml2YXRlCiAgICovCiAgZnVuY3Rpb24gYWRkTm90aWZ5TGlzdGVuZXIobm9kZSwgaW5zdCwgYmluZGluZykgewogICAgaWYgKGJpbmRpbmcubGlzdGVuZXJFdmVudCkgewogICAgICBsZXQgcGFydCA9IGJpbmRpbmcucGFydHNbMF07CiAgICAgIG5vZGUuYWRkRXZlbnRMaXN0ZW5lcihiaW5kaW5nLmxpc3RlbmVyRXZlbnQsIGZ1bmN0aW9uKGUpIHsKICAgICAgICBoYW5kbGVOb3RpZmljYXRpb24oZSwgaW5zdCwgYmluZGluZy50YXJnZXQsIHBhcnQuc291cmNlLCBwYXJ0Lm5lZ2F0ZSk7CiAgICAgIH0pOwogICAgfQogIH0KCiAgLy8gLS0gZm9yIG1ldGhvZC1iYXNlZCBlZmZlY3RzIChjb21wbGV4T2JzZXJ2ZXIgJiBjb21wdXRlZCkgLS0tLS0tLS0tLS0tLS0KCiAgLyoqCiAgICogQWRkcyBwcm9wZXJ0eSBlZmZlY3RzIGZvciBlYWNoIGFyZ3VtZW50IGluIHRoZSBtZXRob2Qgc2lnbmF0dXJlIChhbmQKICAgKiBvcHRpb25hbGx5LCBmb3IgdGhlIG1ldGhvZCBuYW1lIGlmIGBkeW5hbWljYCBpcyB0cnVlKSB0aGF0IGNhbGxzIHRoZQogICAqIHByb3ZpZGVkIGVmZmVjdCBmdW5jdGlvbi4KICAgKgogICAqIEBwYXJhbSB7RWxlbWVudCB8IE9iamVjdH0gbW9kZWwgUHJvdG90eXBlIG9yIGluc3RhbmNlCiAgICogQHBhcmFtIHshTWV0aG9kU2lnbmF0dXJlfSBzaWcgTWV0aG9kIHNpZ25hdHVyZSBtZXRhZGF0YQogICAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlIFR5cGUgb2YgcHJvcGVydHkgZWZmZWN0IHRvIGFkZAogICAqIEBwYXJhbSB7RnVuY3Rpb259IGVmZmVjdEZuIEZ1bmN0aW9uIHRvIHJ1biB3aGVuIGFyZ3VtZW50cyBjaGFuZ2UKICAgKiBAcGFyYW0geyo9fSBtZXRob2RJbmZvIEVmZmVjdC1zcGVjaWZpYyBpbmZvcm1hdGlvbiB0byBiZSBpbmNsdWRlZCBpbgogICAqICAgbWV0aG9kIGVmZmVjdCBtZXRhZGF0YQogICAqIEBwYXJhbSB7Ym9vbGVhbnxPYmplY3Q9fSBkeW5hbWljRm4gQm9vbGVhbiBvciBvYmplY3QgbWFwIGluZGljYXRpbmcgd2hldGhlcgogICAqICAgbWV0aG9kIG5hbWVzIHNob3VsZCBiZSBpbmNsdWRlZCBhcyBhIGRlcGVuZGVuY3kgdG8gdGhlIGVmZmVjdC4gTm90ZSwKICAgKiAgIGRlZmF1bHRzIHRvIHRydWUgaWYgdGhlIHNpZ25hdHVyZSBpcyBzdGF0aWMgKHNpZy5zdGF0aWMgaXMgdHJ1ZSkuCiAgICogQHJldHVybiB7dm9pZH0KICAgKiBAcHJpdmF0ZQogICAqLwogIGZ1bmN0aW9uIGNyZWF0ZU1ldGhvZEVmZmVjdChtb2RlbCwgc2lnLCB0eXBlLCBlZmZlY3RGbiwgbWV0aG9kSW5mbywgZHluYW1pY0ZuKSB7CiAgICBkeW5hbWljRm4gPSBzaWcuc3RhdGljIHx8IChkeW5hbWljRm4gJiYKICAgICAgKHR5cGVvZiBkeW5hbWljRm4gIT09ICdvYmplY3QnIHx8IGR5bmFtaWNGbltzaWcubWV0aG9kTmFtZV0pKTsKICAgIGxldCBpbmZvID0gewogICAgICBtZXRob2ROYW1lOiBzaWcubWV0aG9kTmFtZSwKICAgICAgYXJnczogc2lnLmFyZ3MsCiAgICAgIG1ldGhvZEluZm8sCiAgICAgIGR5bmFtaWNGbgogICAgfTsKICAgIGZvciAobGV0IGk9MCwgYXJnOyAoaTxzaWcuYXJncy5sZW5ndGgpICYmIChhcmc9c2lnLmFyZ3NbaV0pOyBpKyspIHsKICAgICAgaWYgKCFhcmcubGl0ZXJhbCkgewogICAgICAgIG1vZGVsLl9hZGRQcm9wZXJ0eUVmZmVjdChhcmcucm9vdFByb3BlcnR5LCB0eXBlLCB7CiAgICAgICAgICBmbjogZWZmZWN0Rm4sIGluZm86IGluZm8sIHRyaWdnZXI6IGFyZwogICAgICAgIH0pOwogICAgICB9CiAgICB9CiAgICBpZiAoZHluYW1pY0ZuKSB7CiAgICAgIG1vZGVsLl9hZGRQcm9wZXJ0eUVmZmVjdChzaWcubWV0aG9kTmFtZSwgdHlwZSwgewogICAgICAgIGZuOiBlZmZlY3RGbiwgaW5mbzogaW5mbwogICAgICB9KTsKICAgIH0KICB9CgogIC8qKgogICAqIENhbGxzIGEgbWV0aG9kIHdpdGggYXJndW1lbnRzIG1hcnNoYWxlZCBmcm9tIHByb3BlcnRpZXMgb24gdGhlIGluc3RhbmNlCiAgICogYmFzZWQgb24gdGhlIG1ldGhvZCBzaWduYXR1cmUgY29udGFpbmVkIGluIHRoZSBlZmZlY3QgbWV0YWRhdGEuCiAgICoKICAgKiBNdWx0aS1wcm9wZXJ0eSBvYnNlcnZlcnMsIGNvbXB1dGVkIHByb3BlcnRpZXMsIGFuZCBpbmxpbmUgY29tcHV0aW5nCiAgICogZnVuY3Rpb25zIGNhbGwgdGhpcyBmdW5jdGlvbiB0byBpbnZva2UgdGhlIG1ldGhvZCwgdGhlbiB1c2UgdGhlIHJldHVybgogICAqIHZhbHVlIGFjY29yZGluZ2x5LgogICAqCiAgICogQHBhcmFtIHshUHJvcGVydHlFZmZlY3RzVHlwZX0gaW5zdCBUaGUgaW5zdGFuY2UgdGhlIGVmZmVjdCB3aWxsIGJlIHJ1biBvbgogICAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eSBOYW1lIG9mIHByb3BlcnR5CiAgICogQHBhcmFtIHtPYmplY3R9IHByb3BzIEJhZyBvZiBjdXJyZW50IHByb3BlcnR5IGNoYW5nZXMKICAgKiBAcGFyYW0ge09iamVjdH0gb2xkUHJvcHMgQmFnIG9mIHByZXZpb3VzIHZhbHVlcyBmb3IgY2hhbmdlZCBwcm9wZXJ0aWVzCiAgICogQHBhcmFtIHs/fSBpbmZvIEVmZmVjdCBtZXRhZGF0YQogICAqIEByZXR1cm4geyp9IFJldHVybnMgdGhlIHJldHVybiB2YWx1ZSBmcm9tIHRoZSBtZXRob2QgaW52b2NhdGlvbgogICAqIEBwcml2YXRlCiAgICovCiAgZnVuY3Rpb24gcnVuTWV0aG9kRWZmZWN0KGluc3QsIHByb3BlcnR5LCBwcm9wcywgb2xkUHJvcHMsIGluZm8pIHsKICAgIC8vIEluc3RhbmNlcyBjYW4gb3B0aW9uYWxseSBoYXZlIGEgX21ldGhvZEhvc3Qgd2hpY2ggYWxsb3dzIHJlZGlyZWN0aW5nIHdoZXJlCiAgICAvLyB0byBmaW5kIG1ldGhvZHMuIEN1cnJlbnRseSB1c2VkIGJ5IGB0ZW1wbGF0aXplYC4KICAgIGxldCBjb250ZXh0ID0gaW5zdC5fbWV0aG9kSG9zdCB8fCBpbnN0OwogICAgbGV0IGZuID0gY29udGV4dFtpbmZvLm1ldGhvZE5hbWVdOwogICAgaWYgKGZuKSB7CiAgICAgIGxldCBhcmdzID0gaW5zdC5fbWFyc2hhbEFyZ3MoaW5mby5hcmdzLCBwcm9wZXJ0eSwgcHJvcHMpOwogICAgICByZXR1cm4gZm4uYXBwbHkoY29udGV4dCwgYXJncyk7CiAgICB9IGVsc2UgaWYgKCFpbmZvLmR5bmFtaWNGbikgewogICAgICBjb25zb2xlLndhcm4oJ21ldGhvZCBgJyArIGluZm8ubWV0aG9kTmFtZSArICdgIG5vdCBkZWZpbmVkJyk7CiAgICB9CiAgfQoKICBjb25zdCBlbXB0eUFycmF5ID0gW107CgogIC8vIFJlZ3VsYXIgZXhwcmVzc2lvbnMgdXNlZCBmb3IgYmluZGluZwogIGNvbnN0IElERU5UICA9ICcoPzonICsgJ1thLXpBLVpfJF1bXFx3LjokXFwtKl0qJyArICcpJzsKICBjb25zdCBOVU1CRVIgPSAnKD86JyArICdbLStdP1swLTldKlxcLj9bMC05XSsoPzpbZUVdWy0rXT9bMC05XSspPycgKyAnKSc7CiAgY29uc3QgU1FVT1RFX1NUUklORyA9ICcoPzonICsgJ1wnKD86W15cJ1xcXFxdfFxcXFwuKSpcJycgKyAnKSc7CiAgY29uc3QgRFFVT1RFX1NUUklORyA9ICcoPzonICsgJyIoPzpbXiJcXFxcXXxcXFxcLikqIicgKyAnKSc7CiAgY29uc3QgU1RSSU5HID0gJyg/OicgKyBTUVVPVEVfU1RSSU5HICsgJ3wnICsgRFFVT1RFX1NUUklORyArICcpJzsKICBjb25zdCBBUkdVTUVOVCA9ICcoPzooJyArIElERU5UICsgJ3wnICsgTlVNQkVSICsgJ3wnICsgIFNUUklORyArICcpXFxzKicgKyAnKSc7CiAgY29uc3QgQVJHVU1FTlRTID0gJyg/OicgKyBBUkdVTUVOVCArICcoPzosXFxzKicgKyBBUkdVTUVOVCArICcpKicgKyAnKSc7CiAgY29uc3QgQVJHVU1FTlRfTElTVCA9ICcoPzonICsgJ1xcKFxccyonICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKD86JyArIEFSR1VNRU5UUyArICc/JyArICcpJyArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcXClcXHMqJyArICcpJzsKICBjb25zdCBCSU5ESU5HID0gJygnICsgSURFTlQgKyAnXFxzKicgKyBBUkdVTUVOVF9MSVNUICsgJz8nICsgJyknOyAvLyBHcm91cCAzCiAgY29uc3QgT1BFTl9CUkFDS0VUID0gJyhcXFtcXFt8e3spJyArICdcXHMqJzsKICBjb25zdCBDTE9TRV9CUkFDS0VUID0gJyg/Ol1dfH19KSc7CiAgY29uc3QgTkVHQVRFID0gJyg/OighKVxccyopPyc7IC8vIEdyb3VwIDIKICBjb25zdCBFWFBSRVNTSU9OID0gT1BFTl9CUkFDS0VUICsgTkVHQVRFICsgQklORElORyArIENMT1NFX0JSQUNLRVQ7CiAgY29uc3QgYmluZGluZ1JlZ2V4ID0gbmV3IFJlZ0V4cChFWFBSRVNTSU9OLCAiZyIpOwoKICAvKioKICAgKiBDcmVhdGUgYSBzdHJpbmcgZnJvbSBiaW5kaW5nIHBhcnRzIG9mIGFsbCB0aGUgbGl0ZXJhbCBwYXJ0cwogICAqCiAgICogQHBhcmFtIHshQXJyYXk8QmluZGluZ1BhcnQ+fSBwYXJ0cyBBbGwgcGFydHMgdG8gc3RyaW5naWZ5CiAgICogQHJldHVybiB7c3RyaW5nfSBTdHJpbmcgbWFkZSBmcm9tIHRoZSBsaXRlcmFsIHBhcnRzCiAgICovCiAgZnVuY3Rpb24gbGl0ZXJhbEZyb21QYXJ0cyhwYXJ0cykgewogICAgbGV0IHMgPSAnJzsKICAgIGZvciAobGV0IGk9MDsgaTxwYXJ0cy5sZW5ndGg7IGkrKykgewogICAgICBsZXQgbGl0ZXJhbCA9IHBhcnRzW2ldLmxpdGVyYWw7CiAgICAgIHMgKz0gbGl0ZXJhbCB8fCAnJzsKICAgIH0KICAgIHJldHVybiBzOwogIH0KCiAgLyoqCiAgICogUGFyc2VzIGFuIGV4cHJlc3Npb24gc3RyaW5nIGZvciBhIG1ldGhvZCBzaWduYXR1cmUsIGFuZCByZXR1cm5zIGEgbWV0YWRhdGEKICAgKiBkZXNjcmliaW5nIHRoZSBtZXRob2QgaW4gdGVybXMgb2YgYG1ldGhvZE5hbWVgLCBgc3RhdGljYCAod2hldGhlciBhbGwgdGhlCiAgICogYXJndW1lbnRzIGFyZSBsaXRlcmFscyksIGFuZCBhbiBhcnJheSBvZiBgYXJnc2AKICAgKgogICAqIEBwYXJhbSB7c3RyaW5nfSBleHByZXNzaW9uIFRoZSBleHByZXNzaW9uIHRvIHBhcnNlCiAgICogQHJldHVybiB7P01ldGhvZFNpZ25hdHVyZX0gVGhlIG1ldGhvZCBtZXRhZGF0YSBvYmplY3QgaWYgYSBtZXRob2QgZXhwcmVzc2lvbiB3YXMKICAgKiAgIGZvdW5kLCBvdGhlcndpc2UgYHVuZGVmaW5lZGAKICAgKiBAcHJpdmF0ZQogICAqLwogIGZ1bmN0aW9uIHBhcnNlTWV0aG9kKGV4cHJlc3Npb24pIHsKICAgIC8vIHRyaWVzIHRvIG1hdGNoIHZhbGlkIGphdmFzY3JpcHQgcHJvcGVydHkgbmFtZXMKICAgIGxldCBtID0gZXhwcmVzc2lvbi5tYXRjaCgvKFteXHNdKz8pXCgoW1xzXFNdKilcKS8pOwogICAgaWYgKG0pIHsKICAgICAgbGV0IG1ldGhvZE5hbWUgPSBtWzFdOwogICAgICBsZXQgc2lnID0geyBtZXRob2ROYW1lLCBzdGF0aWM6IHRydWUsIGFyZ3M6IGVtcHR5QXJyYXkgfTsKICAgICAgaWYgKG1bMl0udHJpbSgpKSB7CiAgICAgICAgLy8gcmVwbGFjZSBlc2NhcGVkIGNvbW1hcyB3aXRoIGNvbW1hIGVudGl0eSwgc3BsaXQgb24gdW4tZXNjYXBlZCBjb21tYXMKICAgICAgICBsZXQgYXJncyA9IG1bMl0ucmVwbGFjZSgvXFwsL2csICcmY29tbWE7Jykuc3BsaXQoJywnKTsKICAgICAgICByZXR1cm4gcGFyc2VBcmdzKGFyZ3MsIHNpZyk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIHNpZzsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICAvKioKICAgKiBQYXJzZXMgYW4gYXJyYXkgb2YgYXJndW1lbnRzIGFuZCBzZXRzIHRoZSBgYXJnc2AgcHJvcGVydHkgb2YgdGhlIHN1cHBsaWVkCiAgICogc2lnbmF0dXJlIG1ldGFkYXRhIG9iamVjdC4gU2V0cyB0aGUgYHN0YXRpY2AgcHJvcGVydHkgdG8gZmFsc2UgaWYgYW55CiAgICogYXJndW1lbnQgaXMgYSBub24tbGl0ZXJhbC4KICAgKgogICAqIEBwYXJhbSB7IUFycmF5PHN0cmluZz59IGFyZ0xpc3QgQXJyYXkgb2YgYXJndW1lbnQgbmFtZXMKICAgKiBAcGFyYW0geyFNZXRob2RTaWduYXR1cmV9IHNpZyBNZXRob2Qgc2lnbmF0dXJlIG1ldGFkYXRhIG9iamVjdAogICAqIEByZXR1cm4geyFNZXRob2RTaWduYXR1cmV9IFRoZSB1cGRhdGVkIHNpZ25hdHVyZSBtZXRhZGF0YSBvYmplY3QKICAgKiBAcHJpdmF0ZQogICAqLwogIGZ1bmN0aW9uIHBhcnNlQXJncyhhcmdMaXN0LCBzaWcpIHsKICAgIHNpZy5hcmdzID0gYXJnTGlzdC5tYXAoZnVuY3Rpb24ocmF3QXJnKSB7CiAgICAgIGxldCBhcmcgPSBwYXJzZUFyZyhyYXdBcmcpOwogICAgICBpZiAoIWFyZy5saXRlcmFsKSB7CiAgICAgICAgc2lnLnN0YXRpYyA9IGZhbHNlOwogICAgICB9CiAgICAgIHJldHVybiBhcmc7CiAgICB9LCB0aGlzKTsKICAgIHJldHVybiBzaWc7CiAgfQoKICAvKioKICAgKiBQYXJzZXMgYW4gaW5kaXZpZHVhbCBhcmd1bWVudCwgYW5kIHJldHVybnMgYW4gYXJndW1lbnQgbWV0YWRhdGEgb2JqZWN0CiAgICogd2l0aCB0aGUgZm9sbG93aW5nIGZpZWxkczoKICAgKgogICAqICAgewogICAqICAgICB2YWx1ZTogJ3Byb3AnLCAgICAgICAgLy8gcHJvcGVydHkvcGF0aCBvciBsaXRlcmFsIHZhbHVlCiAgICogICAgIGxpdGVyYWw6IGZhbHNlLCAgICAgICAvLyB3aGV0aGVyIGFyZ3VtZW50IGlzIGEgbGl0ZXJhbAogICAqICAgICBzdHJ1Y3R1cmVkOiBmYWxzZSwgICAgLy8gd2hldGhlciB0aGUgcHJvcGVydHkgaXMgYSBwYXRoCiAgICogICAgIHJvb3RQcm9wZXJ0eTogJ3Byb3AnLCAvLyB0aGUgcm9vdCBwcm9wZXJ0eSBvZiB0aGUgcGF0aAogICAqICAgICB3aWxkY2FyZDogZmFsc2UgICAgICAgLy8gd2hldGhlciB0aGUgYXJndW1lbnQgd2FzIGEgd2lsZGNhcmQgJy4qJyBwYXRoCiAgICogICB9CiAgICoKICAgKiBAcGFyYW0ge3N0cmluZ30gcmF3QXJnIFRoZSBzdHJpbmcgdmFsdWUgb2YgdGhlIGFyZ3VtZW50CiAgICogQHJldHVybiB7IU1ldGhvZEFyZ30gQXJndW1lbnQgbWV0YWRhdGEgb2JqZWN0CiAgICogQHByaXZhdGUKICAgKi8KICBmdW5jdGlvbiBwYXJzZUFyZyhyYXdBcmcpIHsKICAgIC8vIGNsZWFuIHVwIHdoaXRlc3BhY2UKICAgIGxldCBhcmcgPSByYXdBcmcudHJpbSgpCiAgICAgIC8vIHJlcGxhY2UgY29tbWEgZW50aXR5IHdpdGggY29tbWEKICAgICAgLnJlcGxhY2UoLyZjb21tYTsvZywgJywnKQogICAgICAvLyByZXBhaXIgZXh0cmEgZXNjYXBlIHNlcXVlbmNlczsgbm90ZSBvbmx5IGNvbW1hcyBzdHJpY3RseSBuZWVkCiAgICAgIC8vIGVzY2FwaW5nLCBidXQgd2UgYWxsb3cgYW55IG90aGVyIGNoYXIgdG8gYmUgZXNjYXBlZCBzaW5jZSBpdHMKICAgICAgLy8gbGlrZWx5IHVzZXJzIHdpbGwgZG8gdGhpcwogICAgICAucmVwbGFjZSgvXFwoLikvZywgJ1wkMScpCiAgICAgIDsKICAgIC8vIGJhc2ljIGFyZ3VtZW50IGRlc2NyaXB0b3IKICAgIGxldCBhID0gewogICAgICBuYW1lOiBhcmcsCiAgICAgIHZhbHVlOiAnJywKICAgICAgbGl0ZXJhbDogZmFsc2UKICAgIH07CiAgICAvLyBkZXRlY3QgbGl0ZXJhbCB2YWx1ZSAobXVzdCBiZSBTdHJpbmcgb3IgTnVtYmVyKQogICAgbGV0IGZjID0gYXJnWzBdOwogICAgaWYgKGZjID09PSAnLScpIHsKICAgICAgZmMgPSBhcmdbMV07CiAgICB9CiAgICBpZiAoZmMgPj0gJzAnICYmIGZjIDw9ICc5JykgewogICAgICBmYyA9ICcjJzsKICAgIH0KICAgIHN3aXRjaChmYykgewogICAgICBjYXNlICInIjoKICAgICAgY2FzZSAnIic6CiAgICAgICAgYS52YWx1ZSA9IGFyZy5zbGljZSgxLCAtMSk7CiAgICAgICAgYS5saXRlcmFsID0gdHJ1ZTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAnIyc6CiAgICAgICAgYS52YWx1ZSA9IE51bWJlcihhcmcpOwogICAgICAgIGEubGl0ZXJhbCA9IHRydWU7CiAgICAgICAgYnJlYWs7CiAgICB9CiAgICAvLyBpZiBub3QgbGl0ZXJhbCwgbG9vayBmb3Igc3RydWN0dXJlZCBwYXRoCiAgICBpZiAoIWEubGl0ZXJhbCkgewogICAgICBhLnJvb3RQcm9wZXJ0eSA9IFBvbHltZXIuUGF0aC5yb290KGFyZyk7CiAgICAgIC8vIGRldGVjdCBzdHJ1Y3R1cmVkIHBhdGggKGhhcyBkb3RzKQogICAgICBhLnN0cnVjdHVyZWQgPSBQb2x5bWVyLlBhdGguaXNQYXRoKGFyZyk7CiAgICAgIGlmIChhLnN0cnVjdHVyZWQpIHsKICAgICAgICBhLndpbGRjYXJkID0gKGFyZy5zbGljZSgtMikgPT0gJy4qJyk7CiAgICAgICAgaWYgKGEud2lsZGNhcmQpIHsKICAgICAgICAgIGEubmFtZSA9IGFyZy5zbGljZSgwLCAtMik7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICByZXR1cm4gYTsKICB9CgogIC8vIGRhdGEgYXBpCgogIC8qKgogICAqIFNlbmRzIGFycmF5IHNwbGljZSBub3RpZmljYXRpb25zIChgLnNwbGljZXNgIGFuZCBgLmxlbmd0aGApCiAgICoKICAgKiBOb3RlOiB0aGlzIGltcGxlbWVudGF0aW9uIG9ubHkgYWNjZXB0cyBub3JtYWxpemVkIHBhdGhzCiAgICoKICAgKiBAcGFyYW0geyFQcm9wZXJ0eUVmZmVjdHNUeXBlfSBpbnN0IEluc3RhbmNlIHRvIHNlbmQgbm90aWZpY2F0aW9ucyB0bwogICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0aGUgbXV0YXRpb25zIG9jY3VycmVkIG9uCiAgICogQHBhcmFtIHtzdHJpbmd9IHBhdGggVGhlIHBhdGggdG8gdGhlIGFycmF5IHRoYXQgd2FzIG11dGF0ZWQKICAgKiBAcGFyYW0ge0FycmF5fSBzcGxpY2VzIEFycmF5IG9mIHNwbGljZSByZWNvcmRzCiAgICogQHJldHVybiB7dm9pZH0KICAgKiBAcHJpdmF0ZQogICAqLwogIGZ1bmN0aW9uIG5vdGlmeVNwbGljZXMoaW5zdCwgYXJyYXksIHBhdGgsIHNwbGljZXMpIHsKICAgIGxldCBzcGxpY2VzUGF0aCA9IHBhdGggKyAnLnNwbGljZXMnOwogICAgaW5zdC5ub3RpZnlQYXRoKHNwbGljZXNQYXRoLCB7IGluZGV4U3BsaWNlczogc3BsaWNlcyB9KTsKICAgIGluc3Qubm90aWZ5UGF0aChwYXRoICsgJy5sZW5ndGgnLCBhcnJheS5sZW5ndGgpOwogICAgLy8gTnVsbCBoZXJlIHRvIGFsbG93IHBvdGVudGlhbGx5IGxhcmdlIHNwbGljZSByZWNvcmRzIHRvIGJlIEdDJ2VkLgogICAgaW5zdC5fX2RhdGFbc3BsaWNlc1BhdGhdID0ge2luZGV4U3BsaWNlczogbnVsbH07CiAgfQoKICAvKioKICAgKiBDcmVhdGVzIGEgc3BsaWNlIHJlY29yZCBhbmQgc2VuZHMgYW4gYXJyYXkgc3BsaWNlIG5vdGlmaWNhdGlvbiBmb3IKICAgKiB0aGUgZGVzY3JpYmVkIG11dGF0aW9uCiAgICoKICAgKiBOb3RlOiB0aGlzIGltcGxlbWVudGF0aW9uIG9ubHkgYWNjZXB0cyBub3JtYWxpemVkIHBhdGhzCiAgICoKICAgKiBAcGFyYW0geyFQcm9wZXJ0eUVmZmVjdHNUeXBlfSBpbnN0IEluc3RhbmNlIHRvIHNlbmQgbm90aWZpY2F0aW9ucyB0bwogICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0aGUgbXV0YXRpb25zIG9jY3VycmVkIG9uCiAgICogQHBhcmFtIHtzdHJpbmd9IHBhdGggVGhlIHBhdGggdG8gdGhlIGFycmF5IHRoYXQgd2FzIG11dGF0ZWQKICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXggSW5kZXggYXQgd2hpY2ggdGhlIGFycmF5IG11dGF0aW9uIG9jY3VycmVkCiAgICogQHBhcmFtIHtudW1iZXJ9IGFkZGVkQ291bnQgTnVtYmVyIG9mIGFkZGVkIGl0ZW1zCiAgICogQHBhcmFtIHtBcnJheX0gcmVtb3ZlZCBBcnJheSBvZiByZW1vdmVkIGl0ZW1zCiAgICogQHJldHVybiB7dm9pZH0KICAgKiBAcHJpdmF0ZQogICAqLwogIGZ1bmN0aW9uIG5vdGlmeVNwbGljZShpbnN0LCBhcnJheSwgcGF0aCwgaW5kZXgsIGFkZGVkQ291bnQsIHJlbW92ZWQpIHsKICAgIG5vdGlmeVNwbGljZXMoaW5zdCwgYXJyYXksIHBhdGgsIFt7CiAgICAgIGluZGV4OiBpbmRleCwKICAgICAgYWRkZWRDb3VudDogYWRkZWRDb3VudCwKICAgICAgcmVtb3ZlZDogcmVtb3ZlZCwKICAgICAgb2JqZWN0OiBhcnJheSwKICAgICAgdHlwZTogJ3NwbGljZScKICAgIH1dKTsKICB9CgogIC8qKgogICAqIFJldHVybnMgYW4gdXBwZXItY2FzZWQgdmVyc2lvbiBvZiB0aGUgc3RyaW5nLgogICAqCiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgU3RyaW5nIHRvIHVwcGVyY2FzZQogICAqIEByZXR1cm4ge3N0cmluZ30gVXBwZXJjYXNlZCBzdHJpbmcKICAgKiBAcHJpdmF0ZQogICAqLwogIGZ1bmN0aW9uIHVwcGVyKG5hbWUpIHsKICAgIHJldHVybiBuYW1lWzBdLnRvVXBwZXJDYXNlKCkgKyBuYW1lLnN1YnN0cmluZygxKTsKICB9CgogIC8qKgogICAqIEVsZW1lbnQgY2xhc3MgbWl4aW4gdGhhdCBwcm92aWRlcyBtZXRhLXByb2dyYW1taW5nIGZvciBQb2x5bWVyJ3MgdGVtcGxhdGUKICAgKiBiaW5kaW5nIGFuZCBkYXRhIG9ic2VydmF0aW9uIChjb2xsZWN0aXZlbHksICJwcm9wZXJ0eSBlZmZlY3RzIikgc3lzdGVtLgogICAqCiAgICogVGhpcyBtaXhpbiB1c2VzIHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcga2V5IHN0YXRpYyBtZXRob2RzIGZvciBhZGRpbmcKICAgKiBwcm9wZXJ0eSBlZmZlY3RzIHRvIGFuIGVsZW1lbnQgY2xhc3M6CiAgICogLSBgYWRkUHJvcGVydHlFZmZlY3RgCiAgICogLSBgY3JlYXRlUHJvcGVydHlPYnNlcnZlcmAKICAgKiAtIGBjcmVhdGVNZXRob2RPYnNlcnZlcmAKICAgKiAtIGBjcmVhdGVOb3RpZnlpbmdQcm9wZXJ0eWAKICAgKiAtIGBjcmVhdGVSZWFkT25seVByb3BlcnR5YAogICAqIC0gYGNyZWF0ZVJlZmxlY3RlZFByb3BlcnR5YAogICAqIC0gYGNyZWF0ZUNvbXB1dGVkUHJvcGVydHlgCiAgICogLSBgYmluZFRlbXBsYXRlYAogICAqCiAgICogRWFjaCBtZXRob2QgY3JlYXRlcyBvbmUgb3IgbW9yZSBwcm9wZXJ0eSBhY2Nlc3NvcnMsIGFsb25nIHdpdGggbWV0YWRhdGEKICAgKiB1c2VkIGJ5IHRoaXMgbWl4aW4ncyBpbXBsZW1lbnRhdGlvbiBvZiBgX3Byb3BlcnRpZXNDaGFuZ2VkYCB0byBwZXJmb3JtCiAgICogdGhlIHByb3BlcnR5IGVmZmVjdHMuCiAgICoKICAgKiBVbmRlcnNjb3JlZCB2ZXJzaW9ucyBvZiB0aGUgYWJvdmUgbWV0aG9kcyBhbHNvIGV4aXN0IG9uIHRoZSBlbGVtZW50CiAgICogcHJvdG90eXBlIGZvciBhZGRpbmcgcHJvcGVydHkgZWZmZWN0cyBvbiBpbnN0YW5jZXMgYXQgcnVudGltZS4KICAgKgogICAqIE5vdGUgdGhhdCB0aGlzIG1peGluIG92ZXJyaWRlcyBzZXZlcmFsIGBQcm9wZXJ0eUFjY2Vzc29yc2AgbWV0aG9kcywgaW4KICAgKiBtYW55IGNhc2VzIHRvIG1haW50YWluIGd1YXJhbnRlZXMgcHJvdmlkZWQgYnkgdGhlIFBvbHltZXIgMS54IGZlYXR1cmVzOwogICAqIG5vdGFibHkgaXQgY2hhbmdlcyBwcm9wZXJ0eSBhY2Nlc3NvcnMgdG8gYmUgc3luY2hyb25vdXMgYnkgZGVmYXVsdAogICAqIHdoZXJlYXMgdGhlIGRlZmF1bHQgd2hlbiB1c2luZyBgUHJvcGVydHlBY2Nlc3NvcnNgIHN0YW5kYWxvbmUgaXMgdG8gYmUKICAgKiBhc3luYyBieSBkZWZhdWx0LgogICAqCiAgICogQG1peGluRnVuY3Rpb24KICAgKiBAcG9seW1lcgogICAqIEBhcHBsaWVzTWl4aW4gUG9seW1lci5UZW1wbGF0ZVN0YW1wCiAgICogQGFwcGxpZXNNaXhpbiBQb2x5bWVyLlByb3BlcnR5QWNjZXNzb3JzCiAgICogQG1lbWJlcm9mIFBvbHltZXIKICAgKiBAc3VtbWFyeSBFbGVtZW50IGNsYXNzIG1peGluIHRoYXQgcHJvdmlkZXMgbWV0YS1wcm9ncmFtbWluZyBmb3IgUG9seW1lcidzCiAgICogdGVtcGxhdGUgYmluZGluZyBhbmQgZGF0YSBvYnNlcnZhdGlvbiBzeXN0ZW0uCiAgICovCiAgUG9seW1lci5Qcm9wZXJ0eUVmZmVjdHMgPSBQb2x5bWVyLmRlZHVwaW5nTWl4aW4oc3VwZXJDbGFzcyA9PiB7CgogICAgLyoqCiAgICAgKiBAY29uc3RydWN0b3IKICAgICAqIEBleHRlbmRzIHtzdXBlckNsYXNzfQogICAgICogQGltcGxlbWVudHMge1BvbHltZXJfUHJvcGVydHlBY2Nlc3NvcnN9CiAgICAgKiBAaW1wbGVtZW50cyB7UG9seW1lcl9UZW1wbGF0ZVN0YW1wfQogICAgICogQHVucmVzdHJpY3RlZAogICAgICogQHByaXZhdGUKICAgICAqLwogICAgY29uc3QgcHJvcGVydHlFZmZlY3RzQmFzZSA9IFBvbHltZXIuVGVtcGxhdGVTdGFtcChQb2x5bWVyLlByb3BlcnR5QWNjZXNzb3JzKHN1cGVyQ2xhc3MpKTsKCiAgICAvKioKICAgICAqIEBwb2x5bWVyCiAgICAgKiBAbWl4aW5DbGFzcwogICAgICogQGltcGxlbWVudHMge1BvbHltZXJfUHJvcGVydHlFZmZlY3RzfQogICAgICogQGV4dGVuZHMge3Byb3BlcnR5RWZmZWN0c0Jhc2V9CiAgICAgKiBAdW5yZXN0cmljdGVkCiAgICAgKi8KICAgIGNsYXNzIFByb3BlcnR5RWZmZWN0cyBleHRlbmRzIHByb3BlcnR5RWZmZWN0c0Jhc2UgewoKICAgICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgc3VwZXIoKTsKICAgICAgICAvKiogQHR5cGUge2Jvb2xlYW59ICovCiAgICAgICAgLy8gVXNlZCB0byBpZGVudGlmeSB1c2VycyBvZiB0aGlzIG1peGluLCBhbGEgaW5zdGFuY2VvZgogICAgICAgIHRoaXMuX19pc1Byb3BlcnR5RWZmZWN0c0NsaWVudCA9IHRydWU7CiAgICAgICAgLyoqIEB0eXBlIHtudW1iZXJ9ICovCiAgICAgICAgLy8gTk9URTogdXNlZCB0byB0cmFjayByZS1lbnRyYW50IGNhbGxzIHRvIGBfZmx1c2hQcm9wZXJ0aWVzYAogICAgICAgIC8vIHBhdGggY2hhbmdlcyBkaXJ0eSBjaGVjayBhZ2FpbnN0IGBfX2RhdGFUZW1wYCBvbmx5IGR1cmluZyBvbmUgInR1cm4iCiAgICAgICAgLy8gYW5kIGFyZSBjbGVhcmVkIHdoZW4gYF9fZGF0YUNvdW50ZXJgIHJldHVybnMgdG8gMC4KICAgICAgICB0aGlzLl9fZGF0YUNvdW50ZXIgPSAwOwogICAgICAgIC8qKiBAdHlwZSB7Ym9vbGVhbn0gKi8KICAgICAgICB0aGlzLl9fZGF0YUNsaWVudHNSZWFkeTsKICAgICAgICAvKiogQHR5cGUge0FycmF5fSAqLwogICAgICAgIHRoaXMuX19kYXRhUGVuZGluZ0NsaWVudHM7CiAgICAgICAgLyoqIEB0eXBlIHtPYmplY3R9ICovCiAgICAgICAgdGhpcy5fX2RhdGFUb05vdGlmeTsKICAgICAgICAvKiogQHR5cGUge09iamVjdH0gKi8KICAgICAgICB0aGlzLl9fZGF0YUxpbmtlZFBhdGhzOwogICAgICAgIC8qKiBAdHlwZSB7Ym9vbGVhbn0gKi8KICAgICAgICB0aGlzLl9fZGF0YUhhc1BhdGhzOwogICAgICAgIC8qKiBAdHlwZSB7T2JqZWN0fSAqLwogICAgICAgIHRoaXMuX19kYXRhQ29tcG91bmRTdG9yYWdlOwogICAgICAgIC8qKiBAdHlwZSB7UG9seW1lcl9Qcm9wZXJ0eUVmZmVjdHN9ICovCiAgICAgICAgdGhpcy5fX2RhdGFIb3N0OwogICAgICAgIC8qKiBAdHlwZSB7IU9iamVjdH0gKi8KICAgICAgICB0aGlzLl9fZGF0YVRlbXA7CiAgICAgICAgLyoqIEB0eXBlIHtib29sZWFufSAqLwogICAgICAgIHRoaXMuX19kYXRhQ2xpZW50c0luaXRpYWxpemVkOwogICAgICAgIC8qKiBAdHlwZSB7IU9iamVjdH0gKi8KICAgICAgICB0aGlzLl9fZGF0YTsKICAgICAgICAvKiogQHR5cGUgeyFPYmplY3R9ICovCiAgICAgICAgdGhpcy5fX2RhdGFQZW5kaW5nOwogICAgICAgIC8qKiBAdHlwZSB7IU9iamVjdH0gKi8KICAgICAgICB0aGlzLl9fZGF0YU9sZDsKICAgICAgICAvKiogQHR5cGUge09iamVjdH0gKi8KICAgICAgICB0aGlzLl9fY29tcHV0ZUVmZmVjdHM7CiAgICAgICAgLyoqIEB0eXBlIHtPYmplY3R9ICovCiAgICAgICAgdGhpcy5fX3JlZmxlY3RFZmZlY3RzOwogICAgICAgIC8qKiBAdHlwZSB7T2JqZWN0fSAqLwogICAgICAgIHRoaXMuX19ub3RpZnlFZmZlY3RzOwogICAgICAgIC8qKiBAdHlwZSB7T2JqZWN0fSAqLwogICAgICAgIHRoaXMuX19wcm9wYWdhdGVFZmZlY3RzOwogICAgICAgIC8qKiBAdHlwZSB7T2JqZWN0fSAqLwogICAgICAgIHRoaXMuX19vYnNlcnZlRWZmZWN0czsKICAgICAgICAvKiogQHR5cGUge09iamVjdH0gKi8KICAgICAgICB0aGlzLl9fcmVhZE9ubHk7CiAgICAgICAgLyoqIEB0eXBlIHshVGVtcGxhdGVJbmZvfSAqLwogICAgICAgIHRoaXMuX190ZW1wbGF0ZUluZm87CiAgICAgIH0KCiAgICAgIGdldCBQUk9QRVJUWV9FRkZFQ1RfVFlQRVMoKSB7CiAgICAgICAgcmV0dXJuIFRZUEVTOwogICAgICB9CgogICAgICAvKioKICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICovCiAgICAgIF9pbml0aWFsaXplUHJvcGVydGllcygpIHsKICAgICAgICBzdXBlci5faW5pdGlhbGl6ZVByb3BlcnRpZXMoKTsKICAgICAgICBob3N0U3RhY2sucmVnaXN0ZXJIb3N0KHRoaXMpOwogICAgICAgIHRoaXMuX19kYXRhQ2xpZW50c1JlYWR5ID0gZmFsc2U7CiAgICAgICAgdGhpcy5fX2RhdGFQZW5kaW5nQ2xpZW50cyA9IG51bGw7CiAgICAgICAgdGhpcy5fX2RhdGFUb05vdGlmeSA9IG51bGw7CiAgICAgICAgdGhpcy5fX2RhdGFMaW5rZWRQYXRocyA9IG51bGw7CiAgICAgICAgdGhpcy5fX2RhdGFIYXNQYXRocyA9IGZhbHNlOwogICAgICAgIC8vIE1heSBiZSBzZXQgb24gaW5zdGFuY2UgcHJpb3IgdG8gdXBncmFkZQogICAgICAgIHRoaXMuX19kYXRhQ29tcG91bmRTdG9yYWdlID0gdGhpcy5fX2RhdGFDb21wb3VuZFN0b3JhZ2UgfHwgbnVsbDsKICAgICAgICB0aGlzLl9fZGF0YUhvc3QgPSB0aGlzLl9fZGF0YUhvc3QgfHwgbnVsbDsKICAgICAgICB0aGlzLl9fZGF0YVRlbXAgPSB7fTsKICAgICAgICB0aGlzLl9fZGF0YUNsaWVudHNJbml0aWFsaXplZCA9IGZhbHNlOwogICAgICB9CgogICAgICAvKioKICAgICAgICogT3ZlcnJpZGVzIGBQb2x5bWVyLlByb3BlcnR5QWNjZXNzb3JzYCBpbXBsZW1lbnRhdGlvbiB0byBwcm92aWRlIGEKICAgICAgICogbW9yZSBlZmZpY2llbnQgaW1wbGVtZW50YXRpb24gb2YgaW5pdGlhbGl6aW5nIHByb3BlcnRpZXMgZnJvbQogICAgICAgKiB0aGUgcHJvdG90eXBlIG9uIHRoZSBpbnN0YW5jZS4KICAgICAgICoKICAgICAgICogQG92ZXJyaWRlCiAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wcyBQcm9wZXJ0aWVzIHRvIGluaXRpYWxpemUgb24gdGhlIHByb3RvdHlwZQogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKi8KICAgICAgX2luaXRpYWxpemVQcm90b1Byb3BlcnRpZXMocHJvcHMpIHsKICAgICAgICB0aGlzLl9fZGF0YSA9IE9iamVjdC5jcmVhdGUocHJvcHMpOwogICAgICAgIHRoaXMuX19kYXRhUGVuZGluZyA9IE9iamVjdC5jcmVhdGUocHJvcHMpOwogICAgICAgIHRoaXMuX19kYXRhT2xkID0ge307CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBPdmVycmlkZXMgYFBvbHltZXIuUHJvcGVydHlBY2Nlc3NvcnNgIGltcGxlbWVudGF0aW9uIHRvIGF2b2lkIHNldHRpbmcKICAgICAgICogYF9zZXRQcm9wZXJ0eWAncyBgc2hvdWxkTm90aWZ5OiB0cnVlYC4KICAgICAgICoKICAgICAgICogQG92ZXJyaWRlCiAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wcyBQcm9wZXJ0aWVzIHRvIGluaXRpYWxpemUgb24gdGhlIGluc3RhbmNlCiAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAqLwogICAgICBfaW5pdGlhbGl6ZUluc3RhbmNlUHJvcGVydGllcyhwcm9wcykgewogICAgICAgIGxldCByZWFkT25seSA9IHRoaXNbVFlQRVMuUkVBRF9PTkxZXTsKICAgICAgICBmb3IgKGxldCBwcm9wIGluIHByb3BzKSB7CiAgICAgICAgICBpZiAoIXJlYWRPbmx5IHx8ICFyZWFkT25seVtwcm9wXSkgewogICAgICAgICAgICB0aGlzLl9fZGF0YVBlbmRpbmcgPSB0aGlzLl9fZGF0YVBlbmRpbmcgfHwge307CiAgICAgICAgICAgIHRoaXMuX19kYXRhT2xkID0gdGhpcy5fX2RhdGFPbGQgfHwge307CiAgICAgICAgICAgIHRoaXMuX19kYXRhW3Byb3BdID0gdGhpcy5fX2RhdGFQZW5kaW5nW3Byb3BdID0gcHJvcHNbcHJvcF07CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CgogICAgICAvLyBQcm90b3R5cGUgc2V0dXAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgICAgLyoqCiAgICAgICAqIEVxdWl2YWxlbnQgdG8gc3RhdGljIGBhZGRQcm9wZXJ0eUVmZmVjdGAgQVBJIGJ1dCBjYW4gYmUgY2FsbGVkIG9uCiAgICAgICAqIGFuIGluc3RhbmNlIHRvIGFkZCBlZmZlY3RzIGF0IHJ1bnRpbWUuICBTZWUgdGhhdCBtZXRob2QgZm9yCiAgICAgICAqIGZ1bGwgQVBJIGRvY3MuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eSBQcm9wZXJ0eSB0aGF0IHNob3VsZCB0cmlnZ2VyIHRoZSBlZmZlY3QKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgRWZmZWN0IHR5cGUsIGZyb20gdGhpcy5QUk9QRVJUWV9FRkZFQ1RfVFlQRVMKICAgICAgICogQHBhcmFtIHtPYmplY3Q9fSBlZmZlY3QgRWZmZWN0IG1ldGFkYXRhIG9iamVjdAogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKiBAcHJvdGVjdGVkCiAgICAgICAqLwogICAgICBfYWRkUHJvcGVydHlFZmZlY3QocHJvcGVydHksIHR5cGUsIGVmZmVjdCkgewogICAgICAgIHRoaXMuX2NyZWF0ZVByb3BlcnR5QWNjZXNzb3IocHJvcGVydHksIHR5cGUgPT0gVFlQRVMuUkVBRF9PTkxZKTsKICAgICAgICAvLyBlZmZlY3RzIGFyZSBhY2N1bXVsYXRlZCBpbnRvIGFycmF5cyBwZXIgcHJvcGVydHkgYmFzZWQgb24gdHlwZQogICAgICAgIGxldCBlZmZlY3RzID0gZW5zdXJlT3duRWZmZWN0TWFwKHRoaXMsIHR5cGUpW3Byb3BlcnR5XTsKICAgICAgICBpZiAoIWVmZmVjdHMpIHsKICAgICAgICAgIGVmZmVjdHMgPSB0aGlzW3R5cGVdW3Byb3BlcnR5XSA9IFtdOwogICAgICAgIH0KICAgICAgICBlZmZlY3RzLnB1c2goZWZmZWN0KTsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIFJlbW92ZXMgdGhlIGdpdmVuIHByb3BlcnR5IGVmZmVjdC4KICAgICAgICoKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IFByb3BlcnR5IHRoZSBlZmZlY3Qgd2FzIGFzc29jaWF0ZWQgd2l0aAogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gdHlwZSBFZmZlY3QgdHlwZSwgZnJvbSB0aGlzLlBST1BFUlRZX0VGRkVDVF9UWVBFUwogICAgICAgKiBAcGFyYW0ge09iamVjdD19IGVmZmVjdCBFZmZlY3QgbWV0YWRhdGEgb2JqZWN0IHRvIHJlbW92ZQogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKi8KICAgICAgX3JlbW92ZVByb3BlcnR5RWZmZWN0KHByb3BlcnR5LCB0eXBlLCBlZmZlY3QpIHsKICAgICAgICBsZXQgZWZmZWN0cyA9IGVuc3VyZU93bkVmZmVjdE1hcCh0aGlzLCB0eXBlKVtwcm9wZXJ0eV07CiAgICAgICAgbGV0IGlkeCA9IGVmZmVjdHMuaW5kZXhPZihlZmZlY3QpOwogICAgICAgIGlmIChpZHggPj0gMCkgewogICAgICAgICAgZWZmZWN0cy5zcGxpY2UoaWR4LCAxKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIGN1cnJlbnQgcHJvdG90eXBlL2luc3RhbmNlIGhhcyBhIHByb3BlcnR5IGVmZmVjdAogICAgICAgKiBvZiBhIGNlcnRhaW4gdHlwZS4KICAgICAgICoKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IFByb3BlcnR5IG5hbWUKICAgICAgICogQHBhcmFtIHtzdHJpbmc9fSB0eXBlIEVmZmVjdCB0eXBlLCBmcm9tIHRoaXMuUFJPUEVSVFlfRUZGRUNUX1RZUEVTCiAgICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhlIHByb3RvdHlwZS9pbnN0YW5jZSBoYXMgYW4gZWZmZWN0IG9mIHRoaXMgdHlwZQogICAgICAgKiBAcHJvdGVjdGVkCiAgICAgICAqLwogICAgICBfaGFzUHJvcGVydHlFZmZlY3QocHJvcGVydHksIHR5cGUpIHsKICAgICAgICBsZXQgZWZmZWN0cyA9IHRoaXNbdHlwZV07CiAgICAgICAgcmV0dXJuIEJvb2xlYW4oZWZmZWN0cyAmJiBlZmZlY3RzW3Byb3BlcnR5XSk7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIGN1cnJlbnQgcHJvdG90eXBlL2luc3RhbmNlIGhhcyBhICJyZWFkIG9ubHkiCiAgICAgICAqIGFjY2Vzc29yIGZvciB0aGUgZ2l2ZW4gcHJvcGVydHkuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eSBQcm9wZXJ0eSBuYW1lCiAgICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhlIHByb3RvdHlwZS9pbnN0YW5jZSBoYXMgYW4gZWZmZWN0IG9mIHRoaXMgdHlwZQogICAgICAgKiBAcHJvdGVjdGVkCiAgICAgICAqLwogICAgICBfaGFzUmVhZE9ubHlFZmZlY3QocHJvcGVydHkpIHsKICAgICAgICByZXR1cm4gdGhpcy5faGFzUHJvcGVydHlFZmZlY3QocHJvcGVydHksIFRZUEVTLlJFQURfT05MWSk7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIGN1cnJlbnQgcHJvdG90eXBlL2luc3RhbmNlIGhhcyBhICJub3RpZnkiCiAgICAgICAqIHByb3BlcnR5IGVmZmVjdCBmb3IgdGhlIGdpdmVuIHByb3BlcnR5LgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkgUHJvcGVydHkgbmFtZQogICAgICAgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHRoZSBwcm90b3R5cGUvaW5zdGFuY2UgaGFzIGFuIGVmZmVjdCBvZiB0aGlzIHR5cGUKICAgICAgICogQHByb3RlY3RlZAogICAgICAgKi8KICAgICAgX2hhc05vdGlmeUVmZmVjdChwcm9wZXJ0eSkgewogICAgICAgIHJldHVybiB0aGlzLl9oYXNQcm9wZXJ0eUVmZmVjdChwcm9wZXJ0eSwgVFlQRVMuTk9USUZZKTsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIFJldHVybnMgd2hldGhlciB0aGUgY3VycmVudCBwcm90b3R5cGUvaW5zdGFuY2UgaGFzIGEgInJlZmxlY3QgdG8gYXR0cmlidXRlIgogICAgICAgKiBwcm9wZXJ0eSBlZmZlY3QgZm9yIHRoZSBnaXZlbiBwcm9wZXJ0eS4KICAgICAgICoKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IFByb3BlcnR5IG5hbWUKICAgICAgICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgcHJvdG90eXBlL2luc3RhbmNlIGhhcyBhbiBlZmZlY3Qgb2YgdGhpcyB0eXBlCiAgICAgICAqIEBwcm90ZWN0ZWQKICAgICAgICovCiAgICAgIF9oYXNSZWZsZWN0RWZmZWN0KHByb3BlcnR5KSB7CiAgICAgICAgcmV0dXJuIHRoaXMuX2hhc1Byb3BlcnR5RWZmZWN0KHByb3BlcnR5LCBUWVBFUy5SRUZMRUNUKTsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIFJldHVybnMgd2hldGhlciB0aGUgY3VycmVudCBwcm90b3R5cGUvaW5zdGFuY2UgaGFzIGEgImNvbXB1dGVkIgogICAgICAgKiBwcm9wZXJ0eSBlZmZlY3QgZm9yIHRoZSBnaXZlbiBwcm9wZXJ0eS4KICAgICAgICoKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IFByb3BlcnR5IG5hbWUKICAgICAgICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgcHJvdG90eXBlL2luc3RhbmNlIGhhcyBhbiBlZmZlY3Qgb2YgdGhpcyB0eXBlCiAgICAgICAqIEBwcm90ZWN0ZWQKICAgICAgICovCiAgICAgIF9oYXNDb21wdXRlZEVmZmVjdChwcm9wZXJ0eSkgewogICAgICAgIHJldHVybiB0aGlzLl9oYXNQcm9wZXJ0eUVmZmVjdChwcm9wZXJ0eSwgVFlQRVMuQ09NUFVURSk7CiAgICAgIH0KCiAgICAgIC8vIFJ1bnRpbWUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgICAgLyoqCiAgICAgICAqIFNldHMgYSBwZW5kaW5nIHByb3BlcnR5IG9yIHBhdGguICBJZiB0aGUgcm9vdCBwcm9wZXJ0eSBvZiB0aGUgcGF0aCBpbgogICAgICAgKiBxdWVzdGlvbiBoYWQgbm8gYWNjZXNzb3IsIHRoZSBwYXRoIGlzIHNldCwgb3RoZXJ3aXNlIGl0IGlzIGVucXVldWVkCiAgICAgICAqIHZpYSBgX3NldFBlbmRpbmdQcm9wZXJ0eWAuCiAgICAgICAqCiAgICAgICAqIFRoaXMgZnVuY3Rpb24gaXNvbGF0ZXMgcmVsYXRpdmVseSBleHBlbnNpdmUgZnVuY3Rpb25hbGl0eSBuZWNlc3NhcnkKICAgICAgICogZm9yIHRoZSBwdWJsaWMgQVBJIChgc2V0YCwgYHNldFByb3BlcnRpZXNgLCBgbm90aWZ5UGF0aGAsIGFuZCBwcm9wZXJ0eQogICAgICAgKiBjaGFuZ2UgbGlzdGVuZXJzIHZpYSB7ey4uLn19IGJpbmRpbmdzKSwgc3VjaCB0aGF0IGl0IGlzIG9ubHkgZG9uZQogICAgICAgKiB3aGVuIHBhdGhzIGVudGVyIHRoZSBzeXN0ZW0sIGFuZCBub3QgYXQgZXZlcnkgcHJvcGFnYXRpb24gc3RlcC4gIEl0CiAgICAgICAqIGFsc28gc2V0cyBhIGBfX2RhdGFIYXNQYXRoc2AgZmxhZyBvbiB0aGUgaW5zdGFuY2Ugd2hpY2ggaXMgdXNlZCB0bwogICAgICAgKiBmYXN0LXBhdGggc2xvd2VyIHBhdGgtbWF0Y2hpbmcgY29kZSBpbiB0aGUgcHJvcGVydHkgZWZmZWN0cyBob3N0IHBhdGhzLgogICAgICAgKgogICAgICAgKiBgcGF0aGAgY2FuIGJlIGEgcGF0aCBzdHJpbmcgb3IgYXJyYXkgb2YgcGF0aCBwYXJ0cyBhcyBhY2NlcHRlZCBieSB0aGUKICAgICAgICogcHVibGljIEFQSS4KICAgICAgICoKICAgICAgICogQHBhcmFtIHtzdHJpbmcgfCAhQXJyYXk8bnVtYmVyfHN0cmluZz59IHBhdGggUGF0aCB0byBzZXQKICAgICAgICogQHBhcmFtIHsqfSB2YWx1ZSBWYWx1ZSB0byBzZXQKICAgICAgICogQHBhcmFtIHtib29sZWFuPX0gc2hvdWxkTm90aWZ5IFNldCB0byB0cnVlIGlmIHRoaXMgY2hhbmdlIHNob3VsZAogICAgICAgKiAgY2F1c2UgYSBwcm9wZXJ0eSBub3RpZmljYXRpb24gZXZlbnQgZGlzcGF0Y2gKICAgICAgICogQHBhcmFtIHtib29sZWFuPX0gaXNQYXRoTm90aWZpY2F0aW9uIElmIHRoZSBwYXRoIGJlaW5nIHNldCBpcyBhIHBhdGgKICAgICAgICogICBub3RpZmljYXRpb24gb2YgYW4gYWxyZWFkeSBjaGFuZ2VkIHZhbHVlLCBhcyBvcHBvc2VkIHRvIGEgcmVxdWVzdAogICAgICAgKiAgIHRvIHNldCBhbmQgbm90aWZ5IHRoZSBjaGFuZ2UuICBJbiB0aGUgbGF0dGVyIGBmYWxzZWAgY2FzZSwgYSBkaXJ0eQogICAgICAgKiAgIGNoZWNrIGlzIHBlcmZvcm1lZCBhbmQgdGhlbiB0aGUgdmFsdWUgaXMgc2V0IHRvIHRoZSBwYXRoIGJlZm9yZQogICAgICAgKiAgIGVucXVldWluZyB0aGUgcGVuZGluZyBwcm9wZXJ0eSBjaGFuZ2UuCiAgICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IFJldHVybnMgdHJ1ZSBpZiB0aGUgcHJvcGVydHkvcGF0aCB3YXMgZW5xdWV1ZWQgaW4KICAgICAgICogICB0aGUgcGVuZGluZyBjaGFuZ2VzIGJhZy4KICAgICAgICogQHByb3RlY3RlZAogICAgICAgKi8KICAgICAgX3NldFBlbmRpbmdQcm9wZXJ0eU9yUGF0aChwYXRoLCB2YWx1ZSwgc2hvdWxkTm90aWZ5LCBpc1BhdGhOb3RpZmljYXRpb24pIHsKICAgICAgICBpZiAoaXNQYXRoTm90aWZpY2F0aW9uIHx8CiAgICAgICAgICAgIFBvbHltZXIuUGF0aC5yb290KEFycmF5LmlzQXJyYXkocGF0aCkgPyBwYXRoWzBdIDogcGF0aCkgIT09IHBhdGgpIHsKICAgICAgICAgIC8vIERpcnR5IGNoZWNrIGNoYW5nZXMgYmVpbmcgc2V0IHRvIGEgcGF0aCBhZ2FpbnN0IHRoZSBhY3R1YWwgb2JqZWN0LAogICAgICAgICAgLy8gc2luY2UgdGhpcyBpcyB0aGUgZW50cnkgcG9pbnQgZm9yIHBhdGhzIGludG8gdGhlIHN5c3RlbTsgZnJvbSBoZXJlCiAgICAgICAgICAvLyB0aGUgb25seSBkaXJ0eSBjaGVja3MgYXJlIGFnYWluc3QgdGhlIGBfX2RhdGFUZW1wYCBjYWNoZSB0byBwcmV2ZW50CiAgICAgICAgICAvLyBkdXBsaWNhdGUgd29yayBpbiB0aGUgc2FtZSB0dXJuIG9ubHkuIE5vdGUsIGlmIHRoaXMgd2FzIGEgbm90aWZpY2F0aW9uCiAgICAgICAgICAvLyBvZiBhIGNoYW5nZSBhbHJlYWR5IHNldCB0byBhIHBhdGggKGlzUGF0aE5vdGlmaWNhdGlvbjogdHJ1ZSksCiAgICAgICAgICAvLyB3ZSBhbHdheXMgbGV0IHRoZSBjaGFuZ2UgdGhyb3VnaCBhbmQgc2tpcCB0aGUgYHNldGAgc2luY2UgaXQgd2FzCiAgICAgICAgICAvLyBhbHJlYWR5IGRpcnR5IGNoZWNrZWQgYXQgdGhlIHBvaW50IG9mIGVudHJ5IGFuZCB0aGUgdW5kZXJseWluZwogICAgICAgICAgLy8gb2JqZWN0IGhhcyBhbHJlYWR5IGJlZW4gdXBkYXRlZAogICAgICAgICAgaWYgKCFpc1BhdGhOb3RpZmljYXRpb24pIHsKICAgICAgICAgICAgbGV0IG9sZCA9IFBvbHltZXIuUGF0aC5nZXQodGhpcywgcGF0aCk7CiAgICAgICAgICAgIHBhdGggPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKFBvbHltZXIuUGF0aC5zZXQodGhpcywgcGF0aCwgdmFsdWUpKTsKICAgICAgICAgICAgLy8gVXNlIHByb3BlcnR5LWFjY2Vzc29yJ3Mgc2ltcGxlciBkaXJ0eSBjaGVjawogICAgICAgICAgICBpZiAoIXBhdGggfHwgIXN1cGVyLl9zaG91bGRQcm9wZXJ0eUNoYW5nZShwYXRoLCB2YWx1ZSwgb2xkKSkgewogICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgdGhpcy5fX2RhdGFIYXNQYXRocyA9IHRydWU7CiAgICAgICAgICBpZiAodGhpcy5fc2V0UGVuZGluZ1Byb3BlcnR5KC8qKkB0eXBle3N0cmluZ30qLyhwYXRoKSwgdmFsdWUsIHNob3VsZE5vdGlmeSkpIHsKICAgICAgICAgICAgY29tcHV0ZUxpbmtlZFBhdGhzKHRoaXMsIHBhdGgsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGlmICh0aGlzLl9fZGF0YUhhc0FjY2Vzc29yICYmIHRoaXMuX19kYXRhSGFzQWNjZXNzb3JbcGF0aF0pIHsKICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NldFBlbmRpbmdQcm9wZXJ0eSgvKipAdHlwZXtzdHJpbmd9Ki8ocGF0aCksIHZhbHVlLCBzaG91bGROb3RpZnkpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGhpc1twYXRoXSA9IHZhbHVlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBBcHBsaWVzIGEgdmFsdWUgdG8gYSBub24tUG9seW1lciBlbGVtZW50L25vZGUncyBwcm9wZXJ0eS4KICAgICAgICoKICAgICAgICogVGhlIGltcGxlbWVudGF0aW9uIG1ha2VzIGEgYmVzdC1lZmZvcnQgYXQgYmluZGluZyBpbnRlcm9wOgogICAgICAgKiBTb21lIG5hdGl2ZSBlbGVtZW50IHByb3BlcnRpZXMgaGF2ZSBzaWRlLWVmZmVjdHMgd2hlbgogICAgICAgKiByZS1zZXR0aW5nIHRoZSBzYW1lIHZhbHVlIChlLmcuIHNldHRpbmcgYDxpbnB1dD4udmFsdWVgIHJlc2V0cyB0aGUKICAgICAgICogY3Vyc29yIHBvc2l0aW9uKSwgc28gd2UgZG8gYSBkaXJ0eS1jaGVjayBiZWZvcmUgc2V0dGluZyB0aGUgdmFsdWUuCiAgICAgICAqIEhvd2V2ZXIsIGZvciBiZXR0ZXIgaW50ZXJvcCB3aXRoIG5vbi1Qb2x5bWVyIGN1c3RvbSBlbGVtZW50cyB0aGF0CiAgICAgICAqIGFjY2VwdCBvYmplY3RzLCB3ZSBleHBsaWNpdGx5IHJlLXNldCBvYmplY3QgY2hhbmdlcyBjb21pbmcgZnJvbSB0aGUKICAgICAgICogUG9seW1lciB3b3JsZCAod2hpY2ggbWF5IGluY2x1ZGUgZGVlcCBvYmplY3QgY2hhbmdlcyB3aXRob3V0IHRoZQogICAgICAgKiB0b3AgcmVmZXJlbmNlIGNoYW5naW5nKSwgZXJyaW5nIG9uIHRoZSBzaWRlIG9mIHByb3ZpZGluZyBtb3JlCiAgICAgICAqIGluZm9ybWF0aW9uLgogICAgICAgKgogICAgICAgKiBVc2VycyBtYXkgb3ZlcnJpZGUgdGhpcyBtZXRob2QgdG8gcHJvdmlkZSBhbHRlcm5hdGUgYXBwcm9hY2hlcy4KICAgICAgICoKICAgICAgICogQHBhcmFtIHshTm9kZX0gbm9kZSBUaGUgbm9kZSB0byBzZXQgYSBwcm9wZXJ0eSBvbgogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcCBUaGUgcHJvcGVydHkgdG8gc2V0CiAgICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldAogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKiBAcHJvdGVjdGVkCiAgICAgICAqLwogICAgICBfc2V0VW5tYW5hZ2VkUHJvcGVydHlUb05vZGUobm9kZSwgcHJvcCwgdmFsdWUpIHsKICAgICAgICAvLyBJdCBpcyBhIGp1ZGdtZW50IGNhbGwgdGhhdCByZXNldHRpbmcgcHJpbWl0aXZlcyBpcwogICAgICAgIC8vICJiYWQiIGFuZCByZXNldHRpbmdzIG9iamVjdHMgaXMgYWxzbyAiZ29vZCI7IGFsdGVybmF0aXZlbHkgd2UgY291bGQKICAgICAgICAvLyBpbXBsZW1lbnQgYSB3aGl0ZWxpc3Qgb2YgdGFnICYgcHJvcGVydHkgdmFsdWVzIHRoYXQgc2hvdWxkIG5ldmVyCiAgICAgICAgLy8gYmUgcmVzZXQgKGUuZy4gPGlucHV0Pi52YWx1ZSAmJiA8c2VsZWN0Pi52YWx1ZSkKICAgICAgICBpZiAodmFsdWUgIT09IG5vZGVbcHJvcF0gfHwgdHlwZW9mIHZhbHVlID09ICdvYmplY3QnKSB7CiAgICAgICAgICBub2RlW3Byb3BdID0gdmFsdWU7CiAgICAgICAgfQogICAgICB9CgogICAgICAvKioKICAgICAgICogT3ZlcnJpZGVzIHRoZSBgUHJvcGVydGllc0NoYW5nZWRgIGltcGxlbWVudGF0aW9uIHRvIGludHJvZHVjZSBzcGVjaWFsCiAgICAgICAqIGRpcnR5IGNoZWNrIGxvZ2ljIGRlcGVuZGluZyBvbiB0aGUgcHJvcGVydHkgJiB2YWx1ZSBiZWluZyBzZXQ6CiAgICAgICAqCiAgICAgICAqIDEuIEFueSB2YWx1ZSBzZXQgdG8gYSBwYXRoIChlLmcuICdvYmoucHJvcCc6IDQyIG9yICdvYmoucHJvcCc6IHsuLi59KQogICAgICAgKiAgICBTdG9yZWQgaW4gYF9fZGF0YVRlbXBgLCBkaXJ0eSBjaGVja2VkIGFnYWluc3QgYF9fZGF0YVRlbXBgCiAgICAgICAqIDIuIE9iamVjdCBzZXQgdG8gc2ltcGxlIHByb3BlcnR5IChlLmcuICdwcm9wJzogey4uLn0pCiAgICAgICAqICAgIFN0b3JlZCBpbiBgX19kYXRhVGVtcGAgYW5kIGBfX2RhdGFgLCBkaXJ0eSBjaGVja2VkIGFnYWluc3QKICAgICAgICogICAgYF9fZGF0YVRlbXBgIGJ5IGRlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgYF9zaG91bGRQcm9wZXJ0eUNoYW5nZWAKICAgICAgICogMy4gUHJpbWl0aXZlIHZhbHVlIHNldCB0byBzaW1wbGUgcHJvcGVydHkgKGUuZy4gJ3Byb3AnOiA0MikKICAgICAgICogICAgU3RvcmVkIGluIGBfX2RhdGFgLCBkaXJ0eSBjaGVja2VkIGFnYWluc3QgYF9fZGF0YWAKICAgICAgICoKICAgICAgICogVGhlIGRpcnR5LWNoZWNrIGlzIGltcG9ydGFudCB0byBwcmV2ZW50IGN5Y2xlcyBkdWUgdG8gdHdvLXdheQogICAgICAgKiBub3RpZmljYXRpb24sIGJ1dCBwYXRocyBhbmQgb2JqZWN0cyBhcmUgb25seSBkaXJ0eSBjaGVja2VkIGFnYWluc3QgYW55CiAgICAgICAqIHByZXZpb3VzIHZhbHVlIHNldCBkdXJpbmcgdGhpcyB0dXJuIHZpYSBhICJ0ZW1wb3JhcnkgY2FjaGUiIHRoYXQgaXMKICAgICAgICogY2xlYXJlZCB3aGVuIHRoZSBsYXN0IGBfcHJvcGVydGllc0NoYW5nZWRgIGV4aXRzLiBUaGlzIGlzIHNvOgogICAgICAgKiBhLiBhbnkgY2FjaGVkIGFycmF5IHBhdGhzIChlLmcuICdhcnJheS4zLnByb3AnKSBtYXkgYmUgaW52YWxpZGF0ZWQKICAgICAgICogICAgZHVlIHRvIGFycmF5IG11dGF0aW9ucyBsaWtlIHNoaWZ0L3Vuc2hpZnQvc3BsaWNlOyB0aGlzIGlzIGZpbmUKICAgICAgICogICAgc2luY2UgcGF0aCBjaGFuZ2VzIGFyZSBkaXJ0eS1jaGVja2VkIGF0IHVzZXIgZW50cnkgcG9pbnRzIGxpa2UgYHNldGAKICAgICAgICogYi4gZGlydHktY2hlY2tpbmcgZm9yIG9iamVjdHMgb25seSBsYXN0cyBvbmUgdHVybiB0byBhbGxvdyB0aGUgdXNlcgogICAgICAgKiAgICB0byBtdXRhdGUgdGhlIG9iamVjdCBpbi1wbGFjZSBhbmQgcmUtc2V0IGl0IHdpdGggdGhlIHNhbWUgaWRlbnRpdHkKICAgICAgICogICAgYW5kIGhhdmUgYWxsIHN1Yi1wcm9wZXJ0aWVzIHJlLXByb3BhZ2F0ZWQgaW4gYSBzdWJzZXF1ZW50IHR1cm4uCiAgICAgICAqCiAgICAgICAqIFRoZSB0ZW1wIGNhY2hlIGlzIG5vdCBuZWNlc3NhcmlseSBzdWZmaWNpZW50IHRvIHByZXZlbnQgaW52YWxpZCBhcnJheQogICAgICAgKiBwYXRocywgc2luY2UgYSBzcGxpY2UgY2FuIGhhcHBlbiBkdXJpbmcgdGhlIHNhbWUgdHVybiAod2l0aCBwYXRob2xvZ2ljYWwKICAgICAgICogdXNlciBjb2RlKTsgd2UgY291bGQgaW50cm9kdWNlIGEgImZpeHVwIiBmb3IgdGVtcG9yYXJpbHkgY2FjaGVkIGFycmF5CiAgICAgICAqIHBhdGhzIGlmIG5lZWRlZDogaHR0cHM6Ly9naXRodWIuY29tL1BvbHltZXIvcG9seW1lci9pc3N1ZXMvNDIyNwogICAgICAgKgogICAgICAgKiBAb3ZlcnJpZGUKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IE5hbWUgb2YgdGhlIHByb3BlcnR5CiAgICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVmFsdWUgdG8gc2V0CiAgICAgICAqIEBwYXJhbSB7Ym9vbGVhbj19IHNob3VsZE5vdGlmeSBUcnVlIGlmIHByb3BlcnR5IHNob3VsZCBmaXJlIG5vdGlmaWNhdGlvbgogICAgICAgKiAgIGV2ZW50IChhcHBsaWVzIG9ubHkgZm9yIGBub3RpZnk6IHRydWVgIHByb3BlcnRpZXMpCiAgICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IFJldHVybnMgdHJ1ZSBpZiB0aGUgcHJvcGVydHkgY2hhbmdlZAogICAgICAgKi8KICAgICAgX3NldFBlbmRpbmdQcm9wZXJ0eShwcm9wZXJ0eSwgdmFsdWUsIHNob3VsZE5vdGlmeSkgewogICAgICAgIGxldCBpc1BhdGggPSB0aGlzLl9fZGF0YUhhc1BhdGhzICYmIFBvbHltZXIuUGF0aC5pc1BhdGgocHJvcGVydHkpOwogICAgICAgIGxldCBwcmV2UHJvcHMgPSBpc1BhdGggPyB0aGlzLl9fZGF0YVRlbXAgOiB0aGlzLl9fZGF0YTsKICAgICAgICBpZiAodGhpcy5fc2hvdWxkUHJvcGVydHlDaGFuZ2UocHJvcGVydHksIHZhbHVlLCBwcmV2UHJvcHNbcHJvcGVydHldKSkgewogICAgICAgICAgaWYgKCF0aGlzLl9fZGF0YVBlbmRpbmcpIHsKICAgICAgICAgICAgdGhpcy5fX2RhdGFQZW5kaW5nID0ge307CiAgICAgICAgICAgIHRoaXMuX19kYXRhT2xkID0ge307CiAgICAgICAgICB9CiAgICAgICAgICAvLyBFbnN1cmUgb2xkIGlzIGNhcHR1cmVkIGZyb20gdGhlIGxhc3QgdHVybgogICAgICAgICAgaWYgKCEocHJvcGVydHkgaW4gdGhpcy5fX2RhdGFPbGQpKSB7CiAgICAgICAgICAgIHRoaXMuX19kYXRhT2xkW3Byb3BlcnR5XSA9IHRoaXMuX19kYXRhW3Byb3BlcnR5XTsKICAgICAgICAgIH0KICAgICAgICAgIC8vIFBhdGhzIGFyZSBzdG9yZWQgaW4gdGVtcG9yYXJ5IGNhY2hlIChjbGVhcmVkIGF0IGVuZCBvZiB0dXJuKSwKICAgICAgICAgIC8vIHdoaWNoIGlzIHVzZWQgZm9yIGRpcnR5LWNoZWNraW5nLCBhbGwgb3RoZXJzIHN0b3JlZCBpbiBfX2RhdGEKICAgICAgICAgIGlmIChpc1BhdGgpIHsKICAgICAgICAgICAgdGhpcy5fX2RhdGFUZW1wW3Byb3BlcnR5XSA9IHZhbHVlOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGhpcy5fX2RhdGFbcHJvcGVydHldID0gdmFsdWU7CiAgICAgICAgICB9CiAgICAgICAgICAvLyBBbGwgY2hhbmdlcyBnbyBpbnRvIHBlbmRpbmcgcHJvcGVydHkgYmFnLCBwYXNzZWQgdG8gX3Byb3BlcnRpZXNDaGFuZ2VkCiAgICAgICAgICB0aGlzLl9fZGF0YVBlbmRpbmdbcHJvcGVydHldID0gdmFsdWU7CiAgICAgICAgICAvLyBUcmFjayBwcm9wZXJ0aWVzIHRoYXQgc2hvdWxkIG5vdGlmeSBzZXBhcmF0ZWx5CiAgICAgICAgICBpZiAoaXNQYXRoIHx8ICh0aGlzW1RZUEVTLk5PVElGWV0gJiYgdGhpc1tUWVBFUy5OT1RJRlldW3Byb3BlcnR5XSkpIHsKICAgICAgICAgICAgdGhpcy5fX2RhdGFUb05vdGlmeSA9IHRoaXMuX19kYXRhVG9Ob3RpZnkgfHwge307CiAgICAgICAgICAgIHRoaXMuX19kYXRhVG9Ob3RpZnlbcHJvcGVydHldID0gc2hvdWxkTm90aWZ5OwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIE92ZXJyaWRlcyBiYXNlIGltcGxlbWVudGF0aW9uIHRvIGVuc3VyZSBhbGwgYWNjZXNzb3JzIHNldCBgc2hvdWxkTm90aWZ5YAogICAgICAgKiB0byB0cnVlLCBmb3IgcGVyLXByb3BlcnR5IG5vdGlmaWNhdGlvbiB0cmFja2luZy4KICAgICAgICoKICAgICAgICogQG92ZXJyaWRlCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eSBOYW1lIG9mIHRoZSBwcm9wZXJ0eQogICAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFZhbHVlIHRvIHNldAogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKi8KICAgICAgX3NldFByb3BlcnR5KHByb3BlcnR5LCB2YWx1ZSkgewogICAgICAgIGlmICh0aGlzLl9zZXRQZW5kaW5nUHJvcGVydHkocHJvcGVydHksIHZhbHVlLCB0cnVlKSkgewogICAgICAgICAgdGhpcy5faW52YWxpZGF0ZVByb3BlcnRpZXMoKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBPdmVycmlkZXMgYFByb3BlcnR5QWNjZXNzb3JgJ3MgZGVmYXVsdCBhc3luYyBxdWV1aW5nIG9mCiAgICAgICAqIGBfcHJvcGVydGllc0NoYW5nZWRgOiBpZiBgX19kYXRhUmVhZHlgIGlzIGZhbHNlIChoYXMgbm90IHlldCBiZWVuCiAgICAgICAqIG1hbnVhbGx5IGZsdXNoZWQpLCB0aGUgZnVuY3Rpb24gbm8tb3BzOyBvdGhlcndpc2UgZmx1c2hlcwogICAgICAgKiBgX3Byb3BlcnRpZXNDaGFuZ2VkYCBzeW5jaHJvbm91c2x5LgogICAgICAgKgogICAgICAgKiBAb3ZlcnJpZGUKICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICovCiAgICAgIF9pbnZhbGlkYXRlUHJvcGVydGllcygpIHsKICAgICAgICBpZiAodGhpcy5fX2RhdGFSZWFkeSkgewogICAgICAgICAgdGhpcy5fZmx1c2hQcm9wZXJ0aWVzKCk7CiAgICAgICAgfQogICAgICB9CgogICAgICAvKioKICAgICAgICogRW5xdWV1ZXMgdGhlIGdpdmVuIGNsaWVudCBvbiBhIGxpc3Qgb2YgcGVuZGluZyBjbGllbnRzLCB3aG9zZQogICAgICAgKiBwZW5kaW5nIHByb3BlcnR5IGNoYW5nZXMgY2FuIGxhdGVyIGJlIGZsdXNoZWQgdmlhIGEgY2FsbCB0bwogICAgICAgKiBgX2ZsdXNoQ2xpZW50c2AuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBjbGllbnQgUHJvcGVydHlFZmZlY3RzIGNsaWVudCB0byBlbnF1ZXVlCiAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAqIEBwcm90ZWN0ZWQKICAgICAgICovCiAgICAgIF9lbnF1ZXVlQ2xpZW50KGNsaWVudCkgewogICAgICAgIHRoaXMuX19kYXRhUGVuZGluZ0NsaWVudHMgPSB0aGlzLl9fZGF0YVBlbmRpbmdDbGllbnRzIHx8IFtdOwogICAgICAgIGlmIChjbGllbnQgIT09IHRoaXMpIHsKICAgICAgICAgIHRoaXMuX19kYXRhUGVuZGluZ0NsaWVudHMucHVzaChjbGllbnQpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIE92ZXJyaWRlcyBzdXBlcmNsYXNzIGltcGxlbWVudGF0aW9uLgogICAgICAgKgogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKiBAcHJvdGVjdGVkCiAgICAgICAqLwogICAgICBfZmx1c2hQcm9wZXJ0aWVzKCkgewogICAgICAgIHRoaXMuX19kYXRhQ291bnRlcisrOwogICAgICAgIHN1cGVyLl9mbHVzaFByb3BlcnRpZXMoKTsKICAgICAgICB0aGlzLl9fZGF0YUNvdW50ZXItLTsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIEZsdXNoZXMgYW55IGNsaWVudHMgcHJldmlvdXNseSBlbnF1ZXVlZCB2aWEgYF9lbnF1ZXVlQ2xpZW50YCwgY2F1c2luZwogICAgICAgKiB0aGVpciBgX2ZsdXNoUHJvcGVydGllc2AgbWV0aG9kIHRvIHJ1bi4KICAgICAgICoKICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICogQHByb3RlY3RlZAogICAgICAgKi8KICAgICAgX2ZsdXNoQ2xpZW50cygpIHsKICAgICAgICBpZiAoIXRoaXMuX19kYXRhQ2xpZW50c1JlYWR5KSB7CiAgICAgICAgICB0aGlzLl9fZGF0YUNsaWVudHNSZWFkeSA9IHRydWU7CiAgICAgICAgICB0aGlzLl9yZWFkeUNsaWVudHMoKTsKICAgICAgICAgIC8vIE92ZXJyaWRlIHBvaW50IHdoZXJlIGFjY2Vzc29ycyBhcmUgdHVybmVkIG9uOyBpbXBvcnRhbnRseSwKICAgICAgICAgIC8vIHRoaXMgaXMgYWZ0ZXIgY2xpZW50cyBoYXZlIGZ1bGx5IHJlYWRpZWQsIHByb3ZpZGluZyBhIGd1YXJhbnRlZQogICAgICAgICAgLy8gdGhhdCBhbnkgcHJvcGVydHkgZWZmZWN0cyBvY2N1ciBvbmx5IGFmdGVyIGFsbCBjbGllbnRzIGFyZSByZWFkeS4KICAgICAgICAgIHRoaXMuX19kYXRhUmVhZHkgPSB0cnVlOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aGlzLl9fZW5hYmxlT3JGbHVzaENsaWVudHMoKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC8vIE5PVEU6IFdlIGVuc3VyZSBjbGllbnRzIGVpdGhlciBlbmFibGUgb3IgZmx1c2ggYXMgYXBwcm9wcmlhdGUuIFRoaXMKICAgICAgLy8gaGFuZGxlcyB0d28gY29ybmVyIGNhc2VzOgogICAgICAvLyAoMSkgY2xpZW50cyBmbHVzaCBwcm9wZXJseSB3aGVuIGNvbm5lY3RlZC9lbmFibGVkIGJlZm9yZSB0aGUgaG9zdAogICAgICAvLyBlbmFibGVzOyBlLmcuCiAgICAgIC8vICAgKGEpIFRlbXBsYXRpemUgc3RhbXBzIHdpdGggbm8gcHJvcGVydGllcyBhbmQgZG9lcyBub3QgZmx1c2ggYW5kCiAgICAgIC8vICAgKGIpIHRoZSBpbnN0YW5jZSBpcyBpbnNlcnRlZCBpbnRvIGRvbSBhbmQKICAgICAgLy8gICAoYykgdGhlbiB0aGUgaW5zdGFuY2UgZmx1c2hlcy4KICAgICAgLy8gKDIpIGNsaWVudHMgZW5hYmxlIHByb3Blcmx5IHdoZW4gbm90IGNvbm5lY3RlZC9lbmFibGVkIHdoZW4gdGhlIGhvc3QKICAgICAgLy8gZmx1c2hlczsgZS5nLgogICAgICAvLyAgIChhKSBhIHRlbXBsYXRlIGlzIHJ1bnRpbWUgc3RhbXBlZCBhbmQgbm90IHlldCBjb25uZWN0ZWQvZW5hYmxlZAogICAgICAvLyAgIChiKSBhIGhvc3Qgc2V0cyBhIHByb3BlcnR5LCBjYXVzaW5nIHN0YW1wZWQgZG9tIHRvIGZsdXNoCiAgICAgIC8vICAgKGMpIHRoZSBzdGFtcGVkIGRvbSBlbmFibGVzLgogICAgICBfX2VuYWJsZU9yRmx1c2hDbGllbnRzKCkgewogICAgICAgIGxldCBjbGllbnRzID0gdGhpcy5fX2RhdGFQZW5kaW5nQ2xpZW50czsKICAgICAgICBpZiAoY2xpZW50cykgewogICAgICAgICAgdGhpcy5fX2RhdGFQZW5kaW5nQ2xpZW50cyA9IG51bGw7CiAgICAgICAgICBmb3IgKGxldCBpPTA7IGkgPCBjbGllbnRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGxldCBjbGllbnQgPSBjbGllbnRzW2ldOwogICAgICAgICAgICBpZiAoIWNsaWVudC5fX2RhdGFFbmFibGVkKSB7CiAgICAgICAgICAgICAgY2xpZW50Ll9lbmFibGVQcm9wZXJ0aWVzKCk7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoY2xpZW50Ll9fZGF0YVBlbmRpbmcpIHsKICAgICAgICAgICAgICBjbGllbnQuX2ZsdXNoUHJvcGVydGllcygpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CgogICAgICAvKioKICAgICAgICogUGVyZm9ybSBhbnkgaW5pdGlhbCBzZXR1cCBvbiBjbGllbnQgZG9tLiBDYWxsZWQgYmVmb3JlIHRoZSBmaXJzdAogICAgICAgKiBgX2ZsdXNoUHJvcGVydGllc2AgY2FsbCBvbiBjbGllbnQgZG9tIGFuZCBiZWZvcmUgYW55IGVsZW1lbnQKICAgICAgICogb2JzZXJ2ZXJzIGFyZSBjYWxsZWQuCiAgICAgICAqCiAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAqIEBwcm90ZWN0ZWQKICAgICAgICovCiAgICAgIF9yZWFkeUNsaWVudHMoKSB7CiAgICAgICAgdGhpcy5fX2VuYWJsZU9yRmx1c2hDbGllbnRzKCk7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBTZXRzIGEgYmFnIG9mIHByb3BlcnR5IGNoYW5nZXMgdG8gdGhpcyBpbnN0YW5jZSwgYW5kCiAgICAgICAqIHN5bmNocm9ub3VzbHkgcHJvY2Vzc2VzIGFsbCBlZmZlY3RzIG9mIHRoZSBwcm9wZXJ0aWVzIGFzIGEgYmF0Y2guCiAgICAgICAqCiAgICAgICAqIFByb3BlcnR5IG5hbWVzIG11c3QgYmUgc2ltcGxlIHByb3BlcnRpZXMsIG5vdCBwYXRocy4gIEJhdGNoZWQKICAgICAgICogcGF0aCBwcm9wYWdhdGlvbiBpcyBub3Qgc3VwcG9ydGVkLgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge09iamVjdH0gcHJvcHMgQmFnIG9mIG9uZSBvciBtb3JlIGtleS12YWx1ZSBwYWlycyB3aG9zZSBrZXkgaXMKICAgICAgICogICBhIHByb3BlcnR5IGFuZCB2YWx1ZSBpcyB0aGUgbmV3IHZhbHVlIHRvIHNldCBmb3IgdGhhdCBwcm9wZXJ0eS4KICAgICAgICogQHBhcmFtIHtib29sZWFuPX0gc2V0UmVhZE9ubHkgV2hlbiB0cnVlLCBhbnkgcHJpdmF0ZSB2YWx1ZXMgc2V0IGluCiAgICAgICAqICAgYHByb3BzYCB3aWxsIGJlIHNldC4gQnkgZGVmYXVsdCwgYHNldFByb3BlcnRpZXNgIHdpbGwgbm90IHNldAogICAgICAgKiAgIGByZWFkT25seTogdHJ1ZWAgcm9vdCBwcm9wZXJ0aWVzLgogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKiBAcHVibGljCiAgICAgICAqLwogICAgICBzZXRQcm9wZXJ0aWVzKHByb3BzLCBzZXRSZWFkT25seSkgewogICAgICAgIGZvciAobGV0IHBhdGggaW4gcHJvcHMpIHsKICAgICAgICAgIGlmIChzZXRSZWFkT25seSB8fCAhdGhpc1tUWVBFUy5SRUFEX09OTFldIHx8ICF0aGlzW1RZUEVTLlJFQURfT05MWV1bcGF0aF0pIHsKICAgICAgICAgICAgLy9UT0RPKGtzY2hhYWYpOiBleHBsaWNpdGx5IGRpc2FsbG93IHBhdGhzIGluIHNldFByb3BlcnR5PwogICAgICAgICAgICAvLyB3aWxkY2FyZCBvYnNlcnZlcnMgY3VycmVudGx5IG9ubHkgcGFzcyB0aGUgZmlyc3QgY2hhbmdlZCBwYXRoCiAgICAgICAgICAgIC8vIGluIHRoZSBgaW5mb2Agb2JqZWN0LCBhbmQgeW91IGNvdWxkIGRvIHNvbWUgb2RkIHRoaW5ncyBiYXRjaGluZwogICAgICAgICAgICAvLyBwYXRocywgZS5nLiB7J2Zvby5iYXInOiB7Li4ufSwgJ2Zvbyc6IG51bGx9CiAgICAgICAgICAgIHRoaXMuX3NldFBlbmRpbmdQcm9wZXJ0eU9yUGF0aChwYXRoLCBwcm9wc1twYXRoXSwgdHJ1ZSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHRoaXMuX2ludmFsaWRhdGVQcm9wZXJ0aWVzKCk7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBPdmVycmlkZXMgYFByb3BlcnR5QWNjZXNzb3JzYCBzbyB0aGF0IHByb3BlcnR5IGFjY2Vzc29yCiAgICAgICAqIHNpZGUgZWZmZWN0cyBhcmUgbm90IGVuYWJsZWQgdW50aWwgYWZ0ZXIgY2xpZW50IGRvbSBpcyBmdWxseSByZWFkeS4KICAgICAgICogQWxzbyBjYWxscyBgX2ZsdXNoQ2xpZW50c2AgY2FsbGJhY2sgdG8gZW5zdXJlIGNsaWVudCBkb20gaXMgZW5hYmxlZAogICAgICAgKiB0aGF0IHdhcyBub3QgZW5hYmxlZCBhcyBhIHJlc3VsdCBvZiBmbHVzaGluZyBwcm9wZXJ0aWVzLgogICAgICAgKgogICAgICAgKiBAb3ZlcnJpZGUKICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICovCiAgICAgIHJlYWR5KCkgewogICAgICAgIC8vIEl0IGlzIGltcG9ydGFudCB0aGF0IGBzdXBlci5yZWFkeSgpYCBpcyBub3QgY2FsbGVkIGhlcmUgYXMgaXQKICAgICAgICAvLyBpbW1lZGlhdGVseSB0dXJucyBvbiBhY2Nlc3NvcnMuIEluc3RlYWQsIHdlIHdhaXQgdW50aWwgYHJlYWR5Q2xpZW50c2AKICAgICAgICAvLyB0byBlbmFibGUgYWNjZXNzb3JzIHRvIHByb3ZpZGUgYSBndWFyYW50ZWUgdGhhdCBjbGllbnRzIGFyZSByZWFkeQogICAgICAgIC8vIGJlZm9yZSBwcm9jZXNzaW5nIGFueSBhY2Nlc3NvcnMgc2lkZSBlZmZlY3RzLgogICAgICAgIHRoaXMuX2ZsdXNoUHJvcGVydGllcygpOwogICAgICAgIC8vIElmIG5vIGRhdGEgd2FzIHBlbmRpbmcsIGBfZmx1c2hQcm9wZXJ0aWVzYCB3aWxsIG5vdCBgZmx1c2hDbGllbnRzYAogICAgICAgIC8vIHNvIGVuc3VyZSB0aGlzIGlzIGRvbmUuCiAgICAgICAgaWYgKCF0aGlzLl9fZGF0YUNsaWVudHNSZWFkeSkgewogICAgICAgICAgdGhpcy5fZmx1c2hDbGllbnRzKCk7CiAgICAgICAgfQogICAgICAgIC8vIEJlZm9yZSByZWFkeSwgY2xpZW50IG5vdGlmaWNhdGlvbnMgZG8gbm90IHRyaWdnZXIgX2ZsdXNoUHJvcGVydGllcy4KICAgICAgICAvLyBUaGVyZWZvcmUgYSBmbHVzaCBpcyBuZWNlc3NhcnkgaGVyZSBpZiBkYXRhIGhhcyBiZWVuIHNldC4KICAgICAgICBpZiAodGhpcy5fX2RhdGFQZW5kaW5nKSB7CiAgICAgICAgICB0aGlzLl9mbHVzaFByb3BlcnRpZXMoKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBJbXBsZW1lbnRzIGBQcm9wZXJ0eUFjY2Vzc29yc2AncyBwcm9wZXJ0aWVzIGNoYW5nZWQgY2FsbGJhY2suCiAgICAgICAqCiAgICAgICAqIFJ1bnMgZWFjaCBjbGFzcyBvZiBlZmZlY3RzIGZvciB0aGUgYmF0Y2ggb2YgY2hhbmdlZCBwcm9wZXJ0aWVzIGluCiAgICAgICAqIGEgc3BlY2lmaWMgb3JkZXIgKGNvbXB1dGUsIHByb3BhZ2F0ZSwgcmVmbGVjdCwgb2JzZXJ2ZSwgbm90aWZ5KS4KICAgICAgICoKICAgICAgICogQHBhcmFtIHshT2JqZWN0fSBjdXJyZW50UHJvcHMgQmFnIG9mIGFsbCBjdXJyZW50IGFjY2Vzc29yIHZhbHVlcwogICAgICAgKiBAcGFyYW0geyFPYmplY3R9IGNoYW5nZWRQcm9wcyBCYWcgb2YgcHJvcGVydGllcyBjaGFuZ2VkIHNpbmNlIHRoZSBsYXN0CiAgICAgICAqICAgY2FsbCB0byBgX3Byb3BlcnRpZXNDaGFuZ2VkYAogICAgICAgKiBAcGFyYW0geyFPYmplY3R9IG9sZFByb3BzIEJhZyBvZiBwcmV2aW91cyB2YWx1ZXMgZm9yIGVhY2ggcHJvcGVydHkKICAgICAgICogICBpbiBgY2hhbmdlZFByb3BzYAogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKi8KICAgICAgX3Byb3BlcnRpZXNDaGFuZ2VkKGN1cnJlbnRQcm9wcywgY2hhbmdlZFByb3BzLCBvbGRQcm9wcykgewogICAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAvLyBsZXQgYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGNoYW5nZWRQcm9wcyB8fCB7fSk7CiAgICAgICAgLy8gd2luZG93LmRlYnVnICYmIGNvbnNvbGUuZ3JvdXAodGhpcy5sb2NhbE5hbWUgKyAnIycgKyB0aGlzLmlkICsgJzogJyArIGMpOwogICAgICAgIC8vIGlmICh3aW5kb3cuZGVidWcpIHsgZGVidWdnZXI7IH0KICAgICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgbGV0IGhhc1BhdGhzID0gdGhpcy5fX2RhdGFIYXNQYXRoczsKICAgICAgICB0aGlzLl9fZGF0YUhhc1BhdGhzID0gZmFsc2U7CiAgICAgICAgLy8gQ29tcHV0ZSBwcm9wZXJ0aWVzCiAgICAgICAgcnVuQ29tcHV0ZWRFZmZlY3RzKHRoaXMsIGNoYW5nZWRQcm9wcywgb2xkUHJvcHMsIGhhc1BhdGhzKTsKICAgICAgICAvLyBDbGVhciBub3RpZnkgcHJvcGVydGllcyBwcmlvciB0byBwb3NzaWJsZSByZWVudHJ5IChwcm9wYWdhdGUsIG9ic2VydmUpLAogICAgICAgIC8vIGJ1dCBhZnRlciBjb21wdXRpbmcgZWZmZWN0cyBoYXZlIGEgY2hhbmNlIHRvIGFkZCB0byB0aGVtCiAgICAgICAgbGV0IG5vdGlmeVByb3BzID0gdGhpcy5fX2RhdGFUb05vdGlmeTsKICAgICAgICB0aGlzLl9fZGF0YVRvTm90aWZ5ID0gbnVsbDsKICAgICAgICAvLyBQcm9wYWdhdGUgcHJvcGVydGllcyB0byBjbGllbnRzCiAgICAgICAgdGhpcy5fcHJvcGFnYXRlUHJvcGVydHlDaGFuZ2VzKGNoYW5nZWRQcm9wcywgb2xkUHJvcHMsIGhhc1BhdGhzKTsKICAgICAgICAvLyBGbHVzaCBjbGllbnRzCiAgICAgICAgdGhpcy5fZmx1c2hDbGllbnRzKCk7CiAgICAgICAgLy8gUmVmbGVjdCBwcm9wZXJ0aWVzCiAgICAgICAgcnVuRWZmZWN0cyh0aGlzLCB0aGlzW1RZUEVTLlJFRkxFQ1RdLCBjaGFuZ2VkUHJvcHMsIG9sZFByb3BzLCBoYXNQYXRocyk7CiAgICAgICAgLy8gT2JzZXJ2ZSBwcm9wZXJ0aWVzCiAgICAgICAgcnVuRWZmZWN0cyh0aGlzLCB0aGlzW1RZUEVTLk9CU0VSVkVdLCBjaGFuZ2VkUHJvcHMsIG9sZFByb3BzLCBoYXNQYXRocyk7CiAgICAgICAgLy8gTm90aWZ5IHByb3BlcnRpZXMgdG8gaG9zdAogICAgICAgIGlmIChub3RpZnlQcm9wcykgewogICAgICAgICAgcnVuTm90aWZ5RWZmZWN0cyh0aGlzLCBub3RpZnlQcm9wcywgY2hhbmdlZFByb3BzLCBvbGRQcm9wcywgaGFzUGF0aHMpOwogICAgICAgIH0KICAgICAgICAvLyBDbGVhciB0ZW1wb3JhcnkgY2FjaGUgYXQgZW5kIG9mIHR1cm4KICAgICAgICBpZiAodGhpcy5fX2RhdGFDb3VudGVyID09IDEpIHsKICAgICAgICAgIHRoaXMuX19kYXRhVGVtcCA9IHt9OwogICAgICAgIH0KICAgICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgLy8gd2luZG93LmRlYnVnICYmIGNvbnNvbGUuZ3JvdXBFbmQodGhpcy5sb2NhbE5hbWUgKyAnIycgKyB0aGlzLmlkICsgJzogJyArIGMpOwogICAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIENhbGxlZCB0byBwcm9wYWdhdGUgYW55IHByb3BlcnR5IGNoYW5nZXMgdG8gc3RhbXBlZCB0ZW1wbGF0ZSBub2RlcwogICAgICAgKiBtYW5hZ2VkIGJ5IHRoaXMgZWxlbWVudC4KICAgICAgICoKICAgICAgICogQHBhcmFtIHtPYmplY3R9IGNoYW5nZWRQcm9wcyBCYWcgb2YgY2hhbmdlZCBwcm9wZXJ0aWVzCiAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvbGRQcm9wcyBCYWcgb2YgcHJldmlvdXMgdmFsdWVzIGZvciBjaGFuZ2VkIHByb3BlcnRpZXMKICAgICAgICogQHBhcmFtIHtib29sZWFufSBoYXNQYXRocyBUcnVlIHdpdGggYHByb3BzYCBjb250YWlucyBvbmUgb3IgbW9yZSBwYXRocwogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKiBAcHJvdGVjdGVkCiAgICAgICAqLwogICAgICBfcHJvcGFnYXRlUHJvcGVydHlDaGFuZ2VzKGNoYW5nZWRQcm9wcywgb2xkUHJvcHMsIGhhc1BhdGhzKSB7CiAgICAgICAgaWYgKHRoaXNbVFlQRVMuUFJPUEFHQVRFXSkgewogICAgICAgICAgcnVuRWZmZWN0cyh0aGlzLCB0aGlzW1RZUEVTLlBST1BBR0FURV0sIGNoYW5nZWRQcm9wcywgb2xkUHJvcHMsIGhhc1BhdGhzKTsKICAgICAgICB9CiAgICAgICAgbGV0IHRlbXBsYXRlSW5mbyA9IHRoaXMuX190ZW1wbGF0ZUluZm87CiAgICAgICAgd2hpbGUgKHRlbXBsYXRlSW5mbykgewogICAgICAgICAgcnVuRWZmZWN0cyh0aGlzLCB0ZW1wbGF0ZUluZm8ucHJvcGVydHlFZmZlY3RzLCBjaGFuZ2VkUHJvcHMsIG9sZFByb3BzLAogICAgICAgICAgICBoYXNQYXRocywgdGVtcGxhdGVJbmZvLm5vZGVMaXN0KTsKICAgICAgICAgIHRlbXBsYXRlSW5mbyA9IHRlbXBsYXRlSW5mby5uZXh0VGVtcGxhdGVJbmZvOwogICAgICAgIH0KICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIEFsaWFzZXMgb25lIGRhdGEgcGF0aCBhcyBhbm90aGVyLCBzdWNoIHRoYXQgcGF0aCBub3RpZmljYXRpb25zIGZyb20gb25lCiAgICAgICAqIGFyZSByb3V0ZWQgdG8gdGhlIG90aGVyLgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge3N0cmluZyB8ICFBcnJheTxzdHJpbmd8bnVtYmVyPn0gdG8gVGFyZ2V0IHBhdGggdG8gbGluay4KICAgICAgICogQHBhcmFtIHtzdHJpbmcgfCAhQXJyYXk8c3RyaW5nfG51bWJlcj59IGZyb20gU291cmNlIHBhdGggdG8gbGluay4KICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICogQHB1YmxpYwogICAgICAgKi8KICAgICAgbGlua1BhdGhzKHRvLCBmcm9tKSB7CiAgICAgICAgdG8gPSBQb2x5bWVyLlBhdGgubm9ybWFsaXplKHRvKTsKICAgICAgICBmcm9tID0gUG9seW1lci5QYXRoLm5vcm1hbGl6ZShmcm9tKTsKICAgICAgICB0aGlzLl9fZGF0YUxpbmtlZFBhdGhzID0gdGhpcy5fX2RhdGFMaW5rZWRQYXRocyB8fCB7fTsKICAgICAgICB0aGlzLl9fZGF0YUxpbmtlZFBhdGhzW3RvXSA9IGZyb207CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBSZW1vdmVzIGEgZGF0YSBwYXRoIGFsaWFzIHByZXZpb3VzbHkgZXN0YWJsaXNoZWQgd2l0aCBgX2xpbmtQYXRoc2AuCiAgICAgICAqCiAgICAgICAqIE5vdGUsIHRoZSBwYXRoIHRvIHVubGluayBzaG91bGQgYmUgdGhlIHRhcmdldCAoYHRvYCkgdXNlZCB3aGVuCiAgICAgICAqIGxpbmtpbmcgdGhlIHBhdGhzLgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge3N0cmluZyB8ICFBcnJheTxzdHJpbmd8bnVtYmVyPn0gcGF0aCBUYXJnZXQgcGF0aCB0byB1bmxpbmsuCiAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAqIEBwdWJsaWMKICAgICAgICovCiAgICAgIHVubGlua1BhdGhzKHBhdGgpIHsKICAgICAgICBwYXRoID0gUG9seW1lci5QYXRoLm5vcm1hbGl6ZShwYXRoKTsKICAgICAgICBpZiAodGhpcy5fX2RhdGFMaW5rZWRQYXRocykgewogICAgICAgICAgZGVsZXRlIHRoaXMuX19kYXRhTGlua2VkUGF0aHNbcGF0aF07CiAgICAgICAgfQogICAgICB9CgogICAgICAvKioKICAgICAgICogTm90aWZ5IHRoYXQgYW4gYXJyYXkgaGFzIGNoYW5nZWQuCiAgICAgICAqCiAgICAgICAqIEV4YW1wbGU6CiAgICAgICAqCiAgICAgICAqICAgICB0aGlzLml0ZW1zID0gWyB7bmFtZTogJ0ppbSd9LCB7bmFtZTogJ1RvZGQnfSwge25hbWU6ICdCaWxsJ30gXTsKICAgICAgICogICAgIC4uLgogICAgICAgKiAgICAgdGhpcy5pdGVtcy5zcGxpY2UoMSwgMSwge25hbWU6ICdTYW0nfSk7CiAgICAgICAqICAgICB0aGlzLml0ZW1zLnB1c2goe25hbWU6ICdCb2InfSk7CiAgICAgICAqICAgICB0aGlzLm5vdGlmeVNwbGljZXMoJ2l0ZW1zJywgWwogICAgICAgKiAgICAgICB7IGluZGV4OiAxLCByZW1vdmVkOiBbe25hbWU6ICdUb2RkJ31dLCBhZGRlZENvdW50OiAxLCBvYmplY3Q6IHRoaXMuaXRlbXMsIHR5cGU6ICdzcGxpY2UnIH0sCiAgICAgICAqICAgICAgIHsgaW5kZXg6IDMsIHJlbW92ZWQ6IFtdLCBhZGRlZENvdW50OiAxLCBvYmplY3Q6IHRoaXMuaXRlbXMsIHR5cGU6ICdzcGxpY2UnfQogICAgICAgKiAgICAgXSk7CiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIFBhdGggdGhhdCBzaG91bGQgYmUgbm90aWZpZWQuCiAgICAgICAqIEBwYXJhbSB7QXJyYXl9IHNwbGljZXMgQXJyYXkgb2Ygc3BsaWNlIHJlY29yZHMgaW5kaWNhdGluZyBvcmRlcmVkCiAgICAgICAqICAgY2hhbmdlcyB0aGF0IG9jY3VycmVkIHRvIHRoZSBhcnJheS4gRWFjaCByZWNvcmQgc2hvdWxkIGhhdmUgdGhlCiAgICAgICAqICAgZm9sbG93aW5nIGZpZWxkczoKICAgICAgICogICAgKiBpbmRleDogaW5kZXggYXQgd2hpY2ggdGhlIGNoYW5nZSBvY2N1cnJlZAogICAgICAgKiAgICAqIHJlbW92ZWQ6IGFycmF5IG9mIGl0ZW1zIHRoYXQgd2VyZSByZW1vdmVkIGZyb20gdGhpcyBpbmRleAogICAgICAgKiAgICAqIGFkZGVkQ291bnQ6IG51bWJlciBvZiBuZXcgaXRlbXMgYWRkZWQgYXQgdGhpcyBpbmRleAogICAgICAgKiAgICAqIG9iamVjdDogYSByZWZlcmVuY2UgdG8gdGhlIGFycmF5IGluIHF1ZXN0aW9uCiAgICAgICAqICAgICogdHlwZTogdGhlIHN0cmluZyBsaXRlcmFsICdzcGxpY2UnCiAgICAgICAqCiAgICAgICAqICAgTm90ZSB0aGF0IHNwbGljZSByZWNvcmRzIF9tdXN0XyBiZSBub3JtYWxpemVkIHN1Y2ggdGhhdCB0aGV5IGFyZQogICAgICAgKiAgIHJlcG9ydGVkIGluIGluZGV4IG9yZGVyIChyYXcgcmVzdWx0cyBmcm9tIGBPYmplY3Qub2JzZXJ2ZWAgYXJlIG5vdAogICAgICAgKiAgIG9yZGVyZWQgYW5kIG11c3QgYmUgbm9ybWFsaXplZC9tZXJnZWQgYmVmb3JlIG5vdGlmeWluZykuCiAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAqIEBwdWJsaWMKICAgICAgKi8KICAgICAgbm90aWZ5U3BsaWNlcyhwYXRoLCBzcGxpY2VzKSB7CiAgICAgICAgbGV0IGluZm8gPSB7cGF0aDogJyd9OwogICAgICAgIGxldCBhcnJheSA9IC8qKiBAdHlwZSB7QXJyYXl9ICovKFBvbHltZXIuUGF0aC5nZXQodGhpcywgcGF0aCwgaW5mbykpOwogICAgICAgIG5vdGlmeVNwbGljZXModGhpcywgYXJyYXksIGluZm8ucGF0aCwgc3BsaWNlcyk7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBDb252ZW5pZW5jZSBtZXRob2QgZm9yIHJlYWRpbmcgYSB2YWx1ZSBmcm9tIGEgcGF0aC4KICAgICAgICoKICAgICAgICogTm90ZSwgaWYgYW55IHBhcnQgaW4gdGhlIHBhdGggaXMgdW5kZWZpbmVkLCB0aGlzIG1ldGhvZCByZXR1cm5zCiAgICAgICAqIGB1bmRlZmluZWRgICh0aGlzIG1ldGhvZCBkb2VzIG5vdCB0aHJvdyB3aGVuIGRlcmVmZXJlbmNpbmcgdW5kZWZpbmVkCiAgICAgICAqIHBhdGhzKS4KICAgICAgICoKICAgICAgICogQHBhcmFtIHsoc3RyaW5nfCFBcnJheTwoc3RyaW5nfG51bWJlcik+KX0gcGF0aCBQYXRoIHRvIHRoZSB2YWx1ZQogICAgICAgKiAgIHRvIHJlYWQuICBUaGUgcGF0aCBtYXkgYmUgc3BlY2lmaWVkIGFzIGEgc3RyaW5nIChlLmcuIGBmb28uYmFyLmJhemApCiAgICAgICAqICAgb3IgYW4gYXJyYXkgb2YgcGF0aCBwYXJ0cyAoZS5nLiBgWydmb28uYmFyJywgJ2JheiddYCkuICBOb3RlIHRoYXQKICAgICAgICogICBicmFja2V0ZWQgZXhwcmVzc2lvbnMgYXJlIG5vdCBzdXBwb3J0ZWQ7IHN0cmluZy1iYXNlZCBwYXRoIHBhcnRzCiAgICAgICAqICAgKm11c3QqIGJlIHNlcGFyYXRlZCBieSBkb3RzLiAgTm90ZSB0aGF0IHdoZW4gZGVyZWZlcmVuY2luZyBhcnJheQogICAgICAgKiAgIGluZGljZXMsIHRoZSBpbmRleCBtYXkgYmUgdXNlZCBhcyBhIGRvdHRlZCBwYXJ0IGRpcmVjdGx5CiAgICAgICAqICAgKGUuZy4gYHVzZXJzLjEyLm5hbWVgIG9yIGBbJ3VzZXJzJywgMTIsICduYW1lJ11gKS4KICAgICAgICogQHBhcmFtIHtPYmplY3Q9fSByb290IFJvb3Qgb2JqZWN0IGZyb20gd2hpY2ggdGhlIHBhdGggaXMgZXZhbHVhdGVkLgogICAgICAgKiBAcmV0dXJuIHsqfSBWYWx1ZSBhdCB0aGUgcGF0aCwgb3IgYHVuZGVmaW5lZGAgaWYgYW55IHBhcnQgb2YgdGhlIHBhdGgKICAgICAgICogICBpcyB1bmRlZmluZWQuCiAgICAgICAqIEBwdWJsaWMKICAgICAgICovCiAgICAgIGdldChwYXRoLCByb290KSB7CiAgICAgICAgcmV0dXJuIFBvbHltZXIuUGF0aC5nZXQocm9vdCB8fCB0aGlzLCBwYXRoKTsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIENvbnZlbmllbmNlIG1ldGhvZCBmb3Igc2V0dGluZyBhIHZhbHVlIHRvIGEgcGF0aCBhbmQgbm90aWZ5aW5nIGFueQogICAgICAgKiBlbGVtZW50cyBib3VuZCB0byB0aGUgc2FtZSBwYXRoLgogICAgICAgKgogICAgICAgKiBOb3RlLCBpZiBhbnkgcGFydCBpbiB0aGUgcGF0aCBleGNlcHQgZm9yIHRoZSBsYXN0IGlzIHVuZGVmaW5lZCwKICAgICAgICogdGhpcyBtZXRob2QgZG9lcyBub3RoaW5nICh0aGlzIG1ldGhvZCBkb2VzIG5vdCB0aHJvdyB3aGVuCiAgICAgICAqIGRlcmVmZXJlbmNpbmcgdW5kZWZpbmVkIHBhdGhzKS4KICAgICAgICoKICAgICAgICogQHBhcmFtIHsoc3RyaW5nfCFBcnJheTwoc3RyaW5nfG51bWJlcik+KX0gcGF0aCBQYXRoIHRvIHRoZSB2YWx1ZQogICAgICAgKiAgIHRvIHdyaXRlLiAgVGhlIHBhdGggbWF5IGJlIHNwZWNpZmllZCBhcyBhIHN0cmluZyAoZS5nLiBgJ2Zvby5iYXIuYmF6J2ApCiAgICAgICAqICAgb3IgYW4gYXJyYXkgb2YgcGF0aCBwYXJ0cyAoZS5nLiBgWydmb28uYmFyJywgJ2JheiddYCkuICBOb3RlIHRoYXQKICAgICAgICogICBicmFja2V0ZWQgZXhwcmVzc2lvbnMgYXJlIG5vdCBzdXBwb3J0ZWQ7IHN0cmluZy1iYXNlZCBwYXRoIHBhcnRzCiAgICAgICAqICAgKm11c3QqIGJlIHNlcGFyYXRlZCBieSBkb3RzLiAgTm90ZSB0aGF0IHdoZW4gZGVyZWZlcmVuY2luZyBhcnJheQogICAgICAgKiAgIGluZGljZXMsIHRoZSBpbmRleCBtYXkgYmUgdXNlZCBhcyBhIGRvdHRlZCBwYXJ0IGRpcmVjdGx5CiAgICAgICAqICAgKGUuZy4gYCd1c2Vycy4xMi5uYW1lJ2Agb3IgYFsndXNlcnMnLCAxMiwgJ25hbWUnXWApLgogICAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFZhbHVlIHRvIHNldCBhdCB0aGUgc3BlY2lmaWVkIHBhdGguCiAgICAgICAqIEBwYXJhbSB7T2JqZWN0PX0gcm9vdCBSb290IG9iamVjdCBmcm9tIHdoaWNoIHRoZSBwYXRoIGlzIGV2YWx1YXRlZC4KICAgICAgICogICBXaGVuIHNwZWNpZmllZCwgbm8gbm90aWZpY2F0aW9uIHdpbGwgb2NjdXIuCiAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAqIEBwdWJsaWMKICAgICAgKi8KICAgICAgc2V0KHBhdGgsIHZhbHVlLCByb290KSB7CiAgICAgICAgaWYgKHJvb3QpIHsKICAgICAgICAgIFBvbHltZXIuUGF0aC5zZXQocm9vdCwgcGF0aCwgdmFsdWUpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpZiAoIXRoaXNbVFlQRVMuUkVBRF9PTkxZXSB8fCAhdGhpc1tUWVBFUy5SRUFEX09OTFldWy8qKiBAdHlwZSB7c3RyaW5nfSAqLyhwYXRoKV0pIHsKICAgICAgICAgICAgaWYgKHRoaXMuX3NldFBlbmRpbmdQcm9wZXJ0eU9yUGF0aChwYXRoLCB2YWx1ZSwgdHJ1ZSkpIHsKICAgICAgICAgICAgICB0aGlzLl9pbnZhbGlkYXRlUHJvcGVydGllcygpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CgogICAgICAvKioKICAgICAgICogQWRkcyBpdGVtcyBvbnRvIHRoZSBlbmQgb2YgdGhlIGFycmF5IGF0IHRoZSBwYXRoIHNwZWNpZmllZC4KICAgICAgICoKICAgICAgICogVGhlIGFyZ3VtZW50cyBhZnRlciBgcGF0aGAgYW5kIHJldHVybiB2YWx1ZSBtYXRjaCB0aGF0IG9mCiAgICAgICAqIGBBcnJheS5wcm90b3R5cGUucHVzaGAuCiAgICAgICAqCiAgICAgICAqIFRoaXMgbWV0aG9kIG5vdGlmaWVzIG90aGVyIHBhdGhzIHRvIHRoZSBzYW1lIGFycmF5IHRoYXQgYQogICAgICAgKiBzcGxpY2Ugb2NjdXJyZWQgdG8gdGhlIGFycmF5LgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge3N0cmluZyB8ICFBcnJheTxzdHJpbmd8bnVtYmVyPn0gcGF0aCBQYXRoIHRvIGFycmF5LgogICAgICAgKiBAcGFyYW0gey4uLip9IGl0ZW1zIEl0ZW1zIHRvIHB1c2ggb250byBhcnJheQogICAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IE5ldyBsZW5ndGggb2YgdGhlIGFycmF5LgogICAgICAgKiBAcHVibGljCiAgICAgICAqLwogICAgICBwdXNoKHBhdGgsIC4uLml0ZW1zKSB7CiAgICAgICAgbGV0IGluZm8gPSB7cGF0aDogJyd9OwogICAgICAgIGxldCBhcnJheSA9IC8qKiBAdHlwZSB7QXJyYXl9Ki8oUG9seW1lci5QYXRoLmdldCh0aGlzLCBwYXRoLCBpbmZvKSk7CiAgICAgICAgbGV0IGxlbiA9IGFycmF5Lmxlbmd0aDsKICAgICAgICBsZXQgcmV0ID0gYXJyYXkucHVzaCguLi5pdGVtcyk7CiAgICAgICAgaWYgKGl0ZW1zLmxlbmd0aCkgewogICAgICAgICAgbm90aWZ5U3BsaWNlKHRoaXMsIGFycmF5LCBpbmZvLnBhdGgsIGxlbiwgaXRlbXMubGVuZ3RoLCBbXSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiByZXQ7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBSZW1vdmVzIGFuIGl0ZW0gZnJvbSB0aGUgZW5kIG9mIGFycmF5IGF0IHRoZSBwYXRoIHNwZWNpZmllZC4KICAgICAgICoKICAgICAgICogVGhlIGFyZ3VtZW50cyBhZnRlciBgcGF0aGAgYW5kIHJldHVybiB2YWx1ZSBtYXRjaCB0aGF0IG9mCiAgICAgICAqIGBBcnJheS5wcm90b3R5cGUucG9wYC4KICAgICAgICoKICAgICAgICogVGhpcyBtZXRob2Qgbm90aWZpZXMgb3RoZXIgcGF0aHMgdG8gdGhlIHNhbWUgYXJyYXkgdGhhdCBhCiAgICAgICAqIHNwbGljZSBvY2N1cnJlZCB0byB0aGUgYXJyYXkuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nIHwgIUFycmF5PHN0cmluZ3xudW1iZXI+fSBwYXRoIFBhdGggdG8gYXJyYXkuCiAgICAgICAqIEByZXR1cm4geyp9IEl0ZW0gdGhhdCB3YXMgcmVtb3ZlZC4KICAgICAgICogQHB1YmxpYwogICAgICAgKi8KICAgICAgcG9wKHBhdGgpIHsKICAgICAgICBsZXQgaW5mbyA9IHtwYXRoOiAnJ307CiAgICAgICAgbGV0IGFycmF5ID0gLyoqIEB0eXBlIHtBcnJheX0gKi8oUG9seW1lci5QYXRoLmdldCh0aGlzLCBwYXRoLCBpbmZvKSk7CiAgICAgICAgbGV0IGhhZExlbmd0aCA9IEJvb2xlYW4oYXJyYXkubGVuZ3RoKTsKICAgICAgICBsZXQgcmV0ID0gYXJyYXkucG9wKCk7CiAgICAgICAgaWYgKGhhZExlbmd0aCkgewogICAgICAgICAgbm90aWZ5U3BsaWNlKHRoaXMsIGFycmF5LCBpbmZvLnBhdGgsIGFycmF5Lmxlbmd0aCwgMCwgW3JldF0pOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcmV0OwogICAgICB9CgogICAgICAvKioKICAgICAgICogU3RhcnRpbmcgZnJvbSB0aGUgc3RhcnQgaW5kZXggc3BlY2lmaWVkLCByZW1vdmVzIDAgb3IgbW9yZSBpdGVtcwogICAgICAgKiBmcm9tIHRoZSBhcnJheSBhbmQgaW5zZXJ0cyAwIG9yIG1vcmUgbmV3IGl0ZW1zIGluIHRoZWlyIHBsYWNlLgogICAgICAgKgogICAgICAgKiBUaGUgYXJndW1lbnRzIGFmdGVyIGBwYXRoYCBhbmQgcmV0dXJuIHZhbHVlIG1hdGNoIHRoYXQgb2YKICAgICAgICogYEFycmF5LnByb3RvdHlwZS5zcGxpY2VgLgogICAgICAgKgogICAgICAgKiBUaGlzIG1ldGhvZCBub3RpZmllcyBvdGhlciBwYXRocyB0byB0aGUgc2FtZSBhcnJheSB0aGF0IGEKICAgICAgICogc3BsaWNlIG9jY3VycmVkIHRvIHRoZSBhcnJheS4KICAgICAgICoKICAgICAgICogQHBhcmFtIHtzdHJpbmcgfCAhQXJyYXk8c3RyaW5nfG51bWJlcj59IHBhdGggUGF0aCB0byBhcnJheS4KICAgICAgICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0IEluZGV4IGZyb20gd2hpY2ggdG8gc3RhcnQgcmVtb3ZpbmcvaW5zZXJ0aW5nLgogICAgICAgKiBAcGFyYW0ge251bWJlcn0gZGVsZXRlQ291bnQgTnVtYmVyIG9mIGl0ZW1zIHRvIHJlbW92ZS4KICAgICAgICogQHBhcmFtIHsuLi4qfSBpdGVtcyBJdGVtcyB0byBpbnNlcnQgaW50byBhcnJheS4KICAgICAgICogQHJldHVybiB7QXJyYXl9IEFycmF5IG9mIHJlbW92ZWQgaXRlbXMuCiAgICAgICAqIEBwdWJsaWMKICAgICAgICovCiAgICAgIHNwbGljZShwYXRoLCBzdGFydCwgZGVsZXRlQ291bnQsIC4uLml0ZW1zKSB7CiAgICAgICAgbGV0IGluZm8gPSB7cGF0aCA6ICcnfTsKICAgICAgICBsZXQgYXJyYXkgPSAvKiogQHR5cGUge0FycmF5fSAqLyhQb2x5bWVyLlBhdGguZ2V0KHRoaXMsIHBhdGgsIGluZm8pKTsKICAgICAgICAvLyBOb3JtYWxpemUgZmFuY3kgbmF0aXZlIHNwbGljZSBoYW5kbGluZyBvZiBjcmF6eSBzdGFydCB2YWx1ZXMKICAgICAgICBpZiAoc3RhcnQgPCAwKSB7CiAgICAgICAgICBzdGFydCA9IGFycmF5Lmxlbmd0aCAtIE1hdGguZmxvb3IoLXN0YXJ0KTsKICAgICAgICB9IGVsc2UgaWYgKHN0YXJ0KSB7CiAgICAgICAgICBzdGFydCA9IE1hdGguZmxvb3Ioc3RhcnQpOwogICAgICAgIH0KICAgICAgICAvLyBhcnJheS5zcGxpY2UgZG9lcyBkaWZmZXJlbnQgdGhpbmdzIGJhc2VkIG9uIHRoZSBudW1iZXIgb2YgYXJndW1lbnRzCiAgICAgICAgLy8geW91IHBhc3MgaW4uIFRoZXJlZm9yZSwgYXJyYXkuc3BsaWNlKDApIGFuZCBhcnJheS5zcGxpY2UoMCwgdW5kZWZpbmVkKQogICAgICAgIC8vIGRvIGRpZmZlcmVudCB0aGluZ3MuIEluIHRoZSBmb3JtZXIsIHRoZSB3aG9sZSBhcnJheSBpcyBjbGVhcmVkLiBJbiB0aGUKICAgICAgICAvLyBsYXR0ZXIsIG5vIGl0ZW1zIGFyZSByZW1vdmVkLgogICAgICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB3ZSBuZWVkIHRvIGRldGVjdCB3aGV0aGVyIDEuIG9uZSBvZiB0aGUgYXJndW1lbnRzCiAgICAgICAgLy8gaXMgYWN0dWFsbHkgcGFzc2VkIGluIGFuZCB0aGVuIDIuIGRldGVybWluZSBob3cgbWFueSBhcmd1bWVudHMKICAgICAgICAvLyB3ZSBzaG91bGQgcGFzcyBvbiB0byB0aGUgbmF0aXZlIGFycmF5LnNwbGljZQogICAgICAgIC8vCiAgICAgICAgbGV0IHJldDsKICAgICAgICAvLyBPbWl0IGFueSBhZGRpdGlvbmFsIGFyZ3VtZW50cyBpZiB0aGV5IHdlcmUgbm90IHBhc3NlZCBpbgogICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSB7CiAgICAgICAgICByZXQgPSBhcnJheS5zcGxpY2Uoc3RhcnQpOwogICAgICAgIC8vIEVpdGhlciBzdGFydCB3YXMgdW5kZWZpbmVkIGFuZCB0aGUgb3RoZXJzIHdlcmUgZGVmaW5lZCwgYnV0IGluIHRoaXMKICAgICAgICAvLyBjYXNlIHdlIGNhbiBzYWZlbHkgcGFzcyBvbiBhbGwgYXJndW1lbnRzCiAgICAgICAgLy8KICAgICAgICAvLyBOb3RlOiB0aGlzIGluY2x1ZGVzIHRoZSBjYXNlIHdoZXJlIG5vbmUgb2YgdGhlIGFyZ3VtZW50cyB3ZXJlIHBhc3NlZCBpbiwKICAgICAgICAvLyBlLmcuIHRoaXMuc3BsaWNlKCdhcnJheScpLiBIb3dldmVyLCBpZiBib3RoIHN0YXJ0IGFuZCBkZWxldGVDb3VudAogICAgICAgIC8vIGFyZSB1bmRlZmluZWQsIGFycmF5LnNwbGljZSB3aWxsIG5vdCBtb2RpZnkgdGhlIGFycmF5IChhcyBleHBlY3RlZCkKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmV0ID0gYXJyYXkuc3BsaWNlKHN0YXJ0LCBkZWxldGVDb3VudCwgLi4uaXRlbXMpOwogICAgICAgIH0KICAgICAgICAvLyBBdCB0aGUgZW5kLCBjaGVjayB3aGV0aGVyIGFueSBpdGVtcyB3ZXJlIHBhc3NlZCBpbiAoZS5nLiBpbnNlcnRpb25zKQogICAgICAgIC8vIG9yIGlmIHRoZSByZXR1cm4gYXJyYXkgY29udGFpbnMgaXRlbXMgKGUuZy4gZGVsZXRpb25zKS4KICAgICAgICAvLyBPbmx5IG5vdGlmeSBpZiBpdGVtcyB3ZXJlIGFkZGVkIG9yIGRlbGV0ZWQuCiAgICAgICAgaWYgKGl0ZW1zLmxlbmd0aCB8fCByZXQubGVuZ3RoKSB7CiAgICAgICAgICBub3RpZnlTcGxpY2UodGhpcywgYXJyYXksIGluZm8ucGF0aCwgc3RhcnQsIGl0ZW1zLmxlbmd0aCwgcmV0KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJldDsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIFJlbW92ZXMgYW4gaXRlbSBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgYXJyYXkgYXQgdGhlIHBhdGggc3BlY2lmaWVkLgogICAgICAgKgogICAgICAgKiBUaGUgYXJndW1lbnRzIGFmdGVyIGBwYXRoYCBhbmQgcmV0dXJuIHZhbHVlIG1hdGNoIHRoYXQgb2YKICAgICAgICogYEFycmF5LnByb3RvdHlwZS5wb3BgLgogICAgICAgKgogICAgICAgKiBUaGlzIG1ldGhvZCBub3RpZmllcyBvdGhlciBwYXRocyB0byB0aGUgc2FtZSBhcnJheSB0aGF0IGEKICAgICAgICogc3BsaWNlIG9jY3VycmVkIHRvIHRoZSBhcnJheS4KICAgICAgICoKICAgICAgICogQHBhcmFtIHtzdHJpbmcgfCAhQXJyYXk8c3RyaW5nfG51bWJlcj59IHBhdGggUGF0aCB0byBhcnJheS4KICAgICAgICogQHJldHVybiB7Kn0gSXRlbSB0aGF0IHdhcyByZW1vdmVkLgogICAgICAgKiBAcHVibGljCiAgICAgICAqLwogICAgICBzaGlmdChwYXRoKSB7CiAgICAgICAgbGV0IGluZm8gPSB7cGF0aDogJyd9OwogICAgICAgIGxldCBhcnJheSA9IC8qKiBAdHlwZSB7QXJyYXl9ICovKFBvbHltZXIuUGF0aC5nZXQodGhpcywgcGF0aCwgaW5mbykpOwogICAgICAgIGxldCBoYWRMZW5ndGggPSBCb29sZWFuKGFycmF5Lmxlbmd0aCk7CiAgICAgICAgbGV0IHJldCA9IGFycmF5LnNoaWZ0KCk7CiAgICAgICAgaWYgKGhhZExlbmd0aCkgewogICAgICAgICAgbm90aWZ5U3BsaWNlKHRoaXMsIGFycmF5LCBpbmZvLnBhdGgsIDAsIDAsIFtyZXRdKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJldDsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIEFkZHMgaXRlbXMgb250byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBhcnJheSBhdCB0aGUgcGF0aCBzcGVjaWZpZWQuCiAgICAgICAqCiAgICAgICAqIFRoZSBhcmd1bWVudHMgYWZ0ZXIgYHBhdGhgIGFuZCByZXR1cm4gdmFsdWUgbWF0Y2ggdGhhdCBvZgogICAgICAgKiBgQXJyYXkucHJvdG90eXBlLnB1c2hgLgogICAgICAgKgogICAgICAgKiBUaGlzIG1ldGhvZCBub3RpZmllcyBvdGhlciBwYXRocyB0byB0aGUgc2FtZSBhcnJheSB0aGF0IGEKICAgICAgICogc3BsaWNlIG9jY3VycmVkIHRvIHRoZSBhcnJheS4KICAgICAgICoKICAgICAgICogQHBhcmFtIHtzdHJpbmcgfCAhQXJyYXk8c3RyaW5nfG51bWJlcj59IHBhdGggUGF0aCB0byBhcnJheS4KICAgICAgICogQHBhcmFtIHsuLi4qfSBpdGVtcyBJdGVtcyB0byBpbnNlcnQgaW5mbyBhcnJheQogICAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IE5ldyBsZW5ndGggb2YgdGhlIGFycmF5LgogICAgICAgKiBAcHVibGljCiAgICAgICAqLwogICAgICB1bnNoaWZ0KHBhdGgsIC4uLml0ZW1zKSB7CiAgICAgICAgbGV0IGluZm8gPSB7cGF0aDogJyd9OwogICAgICAgIGxldCBhcnJheSA9IC8qKiBAdHlwZSB7QXJyYXl9ICovKFBvbHltZXIuUGF0aC5nZXQodGhpcywgcGF0aCwgaW5mbykpOwogICAgICAgIGxldCByZXQgPSBhcnJheS51bnNoaWZ0KC4uLml0ZW1zKTsKICAgICAgICBpZiAoaXRlbXMubGVuZ3RoKSB7CiAgICAgICAgICBub3RpZnlTcGxpY2UodGhpcywgYXJyYXksIGluZm8ucGF0aCwgMCwgaXRlbXMubGVuZ3RoLCBbXSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiByZXQ7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBOb3RpZnkgdGhhdCBhIHBhdGggaGFzIGNoYW5nZWQuCiAgICAgICAqCiAgICAgICAqIEV4YW1wbGU6CiAgICAgICAqCiAgICAgICAqICAgICB0aGlzLml0ZW0udXNlci5uYW1lID0gJ0JvYic7CiAgICAgICAqICAgICB0aGlzLm5vdGlmeVBhdGgoJ2l0ZW0udXNlci5uYW1lJyk7CiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIFBhdGggdGhhdCBzaG91bGQgYmUgbm90aWZpZWQuCiAgICAgICAqIEBwYXJhbSB7Kj19IHZhbHVlIFZhbHVlIGF0IHRoZSBwYXRoIChvcHRpb25hbCkuCiAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAqIEBwdWJsaWMKICAgICAgKi8KICAgICAgbm90aWZ5UGF0aChwYXRoLCB2YWx1ZSkgewogICAgICAgIC8qKiBAdHlwZSB7c3RyaW5nfSAqLwogICAgICAgIGxldCBwcm9wUGF0aDsKICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PSAxKSB7CiAgICAgICAgICAvLyBHZXQgdmFsdWUgaWYgbm90IHN1cHBsaWVkCiAgICAgICAgICBsZXQgaW5mbyA9IHtwYXRoOiAnJ307CiAgICAgICAgICB2YWx1ZSA9IFBvbHltZXIuUGF0aC5nZXQodGhpcywgcGF0aCwgaW5mbyk7CiAgICAgICAgICBwcm9wUGF0aCA9IGluZm8ucGF0aDsKICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkocGF0aCkpIHsKICAgICAgICAgIC8vIE5vcm1hbGl6ZSBwYXRoIGlmIG5lZWRlZAogICAgICAgICAgcHJvcFBhdGggPSBQb2x5bWVyLlBhdGgubm9ybWFsaXplKHBhdGgpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBwcm9wUGF0aCA9IC8qKiBAdHlwZXtzdHJpbmd9ICovKHBhdGgpOwogICAgICAgIH0KICAgICAgICBpZiAodGhpcy5fc2V0UGVuZGluZ1Byb3BlcnR5T3JQYXRoKHByb3BQYXRoLCB2YWx1ZSwgdHJ1ZSwgdHJ1ZSkpIHsKICAgICAgICAgIHRoaXMuX2ludmFsaWRhdGVQcm9wZXJ0aWVzKCk7CiAgICAgICAgfQogICAgICB9CgogICAgICAvKioKICAgICAgICogRXF1aXZhbGVudCB0byBzdGF0aWMgYGNyZWF0ZVJlYWRPbmx5UHJvcGVydHlgIEFQSSBidXQgY2FuIGJlIGNhbGxlZCBvbgogICAgICAgKiBhbiBpbnN0YW5jZSB0byBhZGQgZWZmZWN0cyBhdCBydW50aW1lLiAgU2VlIHRoYXQgbWV0aG9kIGZvcgogICAgICAgKiBmdWxsIEFQSSBkb2NzLgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkgUHJvcGVydHkgbmFtZQogICAgICAgKiBAcGFyYW0ge2Jvb2xlYW49fSBwcm90ZWN0ZWRTZXR0ZXIgQ3JlYXRlcyBhIGN1c3RvbSBwcm90ZWN0ZWQgc2V0dGVyCiAgICAgICAqICAgd2hlbiBgdHJ1ZWAuCiAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAqIEBwcm90ZWN0ZWQKICAgICAgICovCiAgICAgIF9jcmVhdGVSZWFkT25seVByb3BlcnR5KHByb3BlcnR5LCBwcm90ZWN0ZWRTZXR0ZXIpIHsKICAgICAgICB0aGlzLl9hZGRQcm9wZXJ0eUVmZmVjdChwcm9wZXJ0eSwgVFlQRVMuUkVBRF9PTkxZKTsKICAgICAgICBpZiAocHJvdGVjdGVkU2V0dGVyKSB7CiAgICAgICAgICB0aGlzWydfc2V0JyArIHVwcGVyKHByb3BlcnR5KV0gPSAvKiogQHRoaXMge1Byb3BlcnR5RWZmZWN0c30gKi9mdW5jdGlvbih2YWx1ZSkgewogICAgICAgICAgICB0aGlzLl9zZXRQcm9wZXJ0eShwcm9wZXJ0eSwgdmFsdWUpOwogICAgICAgICAgfTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBFcXVpdmFsZW50IHRvIHN0YXRpYyBgY3JlYXRlUHJvcGVydHlPYnNlcnZlcmAgQVBJIGJ1dCBjYW4gYmUgY2FsbGVkIG9uCiAgICAgICAqIGFuIGluc3RhbmNlIHRvIGFkZCBlZmZlY3RzIGF0IHJ1bnRpbWUuICBTZWUgdGhhdCBtZXRob2QgZm9yCiAgICAgICAqIGZ1bGwgQVBJIGRvY3MuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eSBQcm9wZXJ0eSBuYW1lCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfGZ1bmN0aW9uKCosKil9IG1ldGhvZCBGdW5jdGlvbiBvciBuYW1lIG9mIG9ic2VydmVyIG1ldGhvZCB0byBjYWxsCiAgICAgICAqIEBwYXJhbSB7Ym9vbGVhbj19IGR5bmFtaWNGbiBXaGV0aGVyIHRoZSBtZXRob2QgbmFtZSBzaG91bGQgYmUgaW5jbHVkZWQgYXMKICAgICAgICogICBhIGRlcGVuZGVuY3kgdG8gdGhlIGVmZmVjdC4KICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICogQHByb3RlY3RlZAogICAgICAgKi8KICAgICAgX2NyZWF0ZVByb3BlcnR5T2JzZXJ2ZXIocHJvcGVydHksIG1ldGhvZCwgZHluYW1pY0ZuKSB7CiAgICAgICAgbGV0IGluZm8gPSB7IHByb3BlcnR5LCBtZXRob2QsIGR5bmFtaWNGbjogQm9vbGVhbihkeW5hbWljRm4pIH07CiAgICAgICAgdGhpcy5fYWRkUHJvcGVydHlFZmZlY3QocHJvcGVydHksIFRZUEVTLk9CU0VSVkUsIHsKICAgICAgICAgIGZuOiBydW5PYnNlcnZlckVmZmVjdCwgaW5mbywgdHJpZ2dlcjoge25hbWU6IHByb3BlcnR5fQogICAgICAgIH0pOwogICAgICAgIGlmIChkeW5hbWljRm4pIHsKICAgICAgICAgIHRoaXMuX2FkZFByb3BlcnR5RWZmZWN0KC8qKiBAdHlwZSB7c3RyaW5nfSAqLyhtZXRob2QpLCBUWVBFUy5PQlNFUlZFLCB7CiAgICAgICAgICAgIGZuOiBydW5PYnNlcnZlckVmZmVjdCwgaW5mbywgdHJpZ2dlcjoge25hbWU6IG1ldGhvZH0KICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIEVxdWl2YWxlbnQgdG8gc3RhdGljIGBjcmVhdGVNZXRob2RPYnNlcnZlcmAgQVBJIGJ1dCBjYW4gYmUgY2FsbGVkIG9uCiAgICAgICAqIGFuIGluc3RhbmNlIHRvIGFkZCBlZmZlY3RzIGF0IHJ1bnRpbWUuICBTZWUgdGhhdCBtZXRob2QgZm9yCiAgICAgICAqIGZ1bGwgQVBJIGRvY3MuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBleHByZXNzaW9uIE1ldGhvZCBleHByZXNzaW9uCiAgICAgICAqIEBwYXJhbSB7Ym9vbGVhbnxPYmplY3Q9fSBkeW5hbWljRm4gQm9vbGVhbiBvciBvYmplY3QgbWFwIGluZGljYXRpbmcKICAgICAgICogICB3aGV0aGVyIG1ldGhvZCBuYW1lcyBzaG91bGQgYmUgaW5jbHVkZWQgYXMgYSBkZXBlbmRlbmN5IHRvIHRoZSBlZmZlY3QuCiAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAqIEBwcm90ZWN0ZWQKICAgICAgICovCiAgICAgIF9jcmVhdGVNZXRob2RPYnNlcnZlcihleHByZXNzaW9uLCBkeW5hbWljRm4pIHsKICAgICAgICBsZXQgc2lnID0gcGFyc2VNZXRob2QoZXhwcmVzc2lvbik7CiAgICAgICAgaWYgKCFzaWcpIHsKICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiTWFsZm9ybWVkIG9ic2VydmVyIGV4cHJlc3Npb24gJyIgKyBleHByZXNzaW9uICsgIiciKTsKICAgICAgICB9CiAgICAgICAgY3JlYXRlTWV0aG9kRWZmZWN0KHRoaXMsIHNpZywgVFlQRVMuT0JTRVJWRSwgcnVuTWV0aG9kRWZmZWN0LCBudWxsLCBkeW5hbWljRm4pOwogICAgICB9CgogICAgICAvKioKICAgICAgICogRXF1aXZhbGVudCB0byBzdGF0aWMgYGNyZWF0ZU5vdGlmeWluZ1Byb3BlcnR5YCBBUEkgYnV0IGNhbiBiZSBjYWxsZWQgb24KICAgICAgICogYW4gaW5zdGFuY2UgdG8gYWRkIGVmZmVjdHMgYXQgcnVudGltZS4gIFNlZSB0aGF0IG1ldGhvZCBmb3IKICAgICAgICogZnVsbCBBUEkgZG9jcy4KICAgICAgICoKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IFByb3BlcnR5IG5hbWUKICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICogQHByb3RlY3RlZAogICAgICAgKi8KICAgICAgX2NyZWF0ZU5vdGlmeWluZ1Byb3BlcnR5KHByb3BlcnR5KSB7CiAgICAgICAgdGhpcy5fYWRkUHJvcGVydHlFZmZlY3QocHJvcGVydHksIFRZUEVTLk5PVElGWSwgewogICAgICAgICAgZm46IHJ1bk5vdGlmeUVmZmVjdCwKICAgICAgICAgIGluZm86IHsKICAgICAgICAgICAgZXZlbnROYW1lOiBDYXNlTWFwLmNhbWVsVG9EYXNoQ2FzZShwcm9wZXJ0eSkgKyAnLWNoYW5nZWQnLAogICAgICAgICAgICBwcm9wZXJ0eTogcHJvcGVydHkKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIEVxdWl2YWxlbnQgdG8gc3RhdGljIGBjcmVhdGVSZWZsZWN0ZWRQcm9wZXJ0eWAgQVBJIGJ1dCBjYW4gYmUgY2FsbGVkIG9uCiAgICAgICAqIGFuIGluc3RhbmNlIHRvIGFkZCBlZmZlY3RzIGF0IHJ1bnRpbWUuICBTZWUgdGhhdCBtZXRob2QgZm9yCiAgICAgICAqIGZ1bGwgQVBJIGRvY3MuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eSBQcm9wZXJ0eSBuYW1lCiAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAqIEBwcm90ZWN0ZWQKICAgICAgICovCiAgICAgIF9jcmVhdGVSZWZsZWN0ZWRQcm9wZXJ0eShwcm9wZXJ0eSkgewogICAgICAgIGxldCBhdHRyID0gdGhpcy5jb25zdHJ1Y3Rvci5hdHRyaWJ1dGVOYW1lRm9yUHJvcGVydHkocHJvcGVydHkpOwogICAgICAgIGlmIChhdHRyWzBdID09PSAnLScpIHsKICAgICAgICAgIGNvbnNvbGUud2FybignUHJvcGVydHkgJyArIHByb3BlcnR5ICsgJyBjYW5ub3QgYmUgcmVmbGVjdGVkIHRvIGF0dHJpYnV0ZSAnICsKICAgICAgICAgICAgYXR0ciArICcgYmVjYXVzZSAiLSIgaXMgbm90IGEgdmFsaWQgc3RhcnRpbmcgYXR0cmlidXRlIG5hbWUuIFVzZSBhIGxvd2VyY2FzZSBmaXJzdCBsZXR0ZXIgZm9yIHRoZSBwcm9wZXJ0eSBpbnN0ZWFkLicpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aGlzLl9hZGRQcm9wZXJ0eUVmZmVjdChwcm9wZXJ0eSwgVFlQRVMuUkVGTEVDVCwgewogICAgICAgICAgICBmbjogcnVuUmVmbGVjdEVmZmVjdCwKICAgICAgICAgICAgaW5mbzogewogICAgICAgICAgICAgIGF0dHJOYW1lOiBhdHRyCiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIEVxdWl2YWxlbnQgdG8gc3RhdGljIGBjcmVhdGVDb21wdXRlZFByb3BlcnR5YCBBUEkgYnV0IGNhbiBiZSBjYWxsZWQgb24KICAgICAgICogYW4gaW5zdGFuY2UgdG8gYWRkIGVmZmVjdHMgYXQgcnVudGltZS4gIFNlZSB0aGF0IG1ldGhvZCBmb3IKICAgICAgICogZnVsbCBBUEkgZG9jcy4KICAgICAgICoKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IE5hbWUgb2YgY29tcHV0ZWQgcHJvcGVydHkgdG8gc2V0CiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBleHByZXNzaW9uIE1ldGhvZCBleHByZXNzaW9uCiAgICAgICAqIEBwYXJhbSB7Ym9vbGVhbnxPYmplY3Q9fSBkeW5hbWljRm4gQm9vbGVhbiBvciBvYmplY3QgbWFwIGluZGljYXRpbmcKICAgICAgICogICB3aGV0aGVyIG1ldGhvZCBuYW1lcyBzaG91bGQgYmUgaW5jbHVkZWQgYXMgYSBkZXBlbmRlbmN5IHRvIHRoZSBlZmZlY3QuCiAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAqIEBwcm90ZWN0ZWQKICAgICAgICovCiAgICAgIF9jcmVhdGVDb21wdXRlZFByb3BlcnR5KHByb3BlcnR5LCBleHByZXNzaW9uLCBkeW5hbWljRm4pIHsKICAgICAgICBsZXQgc2lnID0gcGFyc2VNZXRob2QoZXhwcmVzc2lvbik7CiAgICAgICAgaWYgKCFzaWcpIHsKICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiTWFsZm9ybWVkIGNvbXB1dGVkIGV4cHJlc3Npb24gJyIgKyBleHByZXNzaW9uICsgIiciKTsKICAgICAgICB9CiAgICAgICAgY3JlYXRlTWV0aG9kRWZmZWN0KHRoaXMsIHNpZywgVFlQRVMuQ09NUFVURSwgcnVuQ29tcHV0ZWRFZmZlY3QsIHByb3BlcnR5LCBkeW5hbWljRm4pOwogICAgICB9CgogICAgICAvKioKICAgICAgICogR2F0aGVyIHRoZSBhcmd1bWVudCB2YWx1ZXMgZm9yIGEgbWV0aG9kIHNwZWNpZmllZCBpbiB0aGUgcHJvdmlkZWQgYXJyYXkKICAgICAgICogb2YgYXJndW1lbnQgbWV0YWRhdGEuCiAgICAgICAqCiAgICAgICAqIFRoZSBgcGF0aGAgYW5kIGB2YWx1ZWAgYXJndW1lbnRzIGFyZSB1c2VkIHRvIGZpbGwgaW4gd2lsZGNhcmQgZGVzY3JpcHRvcgogICAgICAgKiB3aGVuIHRoZSBtZXRob2QgaXMgYmVpbmcgY2FsbGVkIGFzIGEgcmVzdWx0IG9mIGEgcGF0aCBub3RpZmljYXRpb24uCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7IUFycmF5PCFNZXRob2RBcmc+fSBhcmdzIEFycmF5IG9mIGFyZ3VtZW50IG1ldGFkYXRhCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIFByb3BlcnR5L3BhdGggbmFtZSB0aGF0IHRyaWdnZXJlZCB0aGUgbWV0aG9kIGVmZmVjdAogICAgICAgKiBAcGFyYW0ge09iamVjdH0gcHJvcHMgQmFnIG9mIGN1cnJlbnQgcHJvcGVydHkgY2hhbmdlcwogICAgICAgKiBAcmV0dXJuIHtBcnJheTwqPn0gQXJyYXkgb2YgYXJndW1lbnQgdmFsdWVzCiAgICAgICAqIEBwcml2YXRlCiAgICAgICAqLwogICAgICBfbWFyc2hhbEFyZ3MoYXJncywgcGF0aCwgcHJvcHMpIHsKICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5fX2RhdGE7CiAgICAgICAgbGV0IHZhbHVlcyA9IFtdOwogICAgICAgIGZvciAobGV0IGk9MCwgbD1hcmdzLmxlbmd0aDsgaTxsOyBpKyspIHsKICAgICAgICAgIGxldCBhcmcgPSBhcmdzW2ldOwogICAgICAgICAgbGV0IG5hbWUgPSBhcmcubmFtZTsKICAgICAgICAgIGxldCB2OwogICAgICAgICAgaWYgKGFyZy5saXRlcmFsKSB7CiAgICAgICAgICAgIHYgPSBhcmcudmFsdWU7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpZiAoYXJnLnN0cnVjdHVyZWQpIHsKICAgICAgICAgICAgICB2ID0gUG9seW1lci5QYXRoLmdldChkYXRhLCBuYW1lKTsKICAgICAgICAgICAgICAvLyB3aGVuIGRhdGEgaXMgbm90IHN0b3JlZCBlLmcuIGBzcGxpY2VzYAogICAgICAgICAgICAgIGlmICh2ID09PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgICAgIHYgPSBwcm9wc1tuYW1lXTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgdiA9IGRhdGFbbmFtZV07CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGlmIChhcmcud2lsZGNhcmQpIHsKICAgICAgICAgICAgLy8gT25seSBzZW5kIHRoZSBhY3R1YWwgcGF0aCBjaGFuZ2VkIGluZm8gaWYgdGhlIGNoYW5nZSB0aGF0CiAgICAgICAgICAgIC8vIGNhdXNlZCB0aGUgb2JzZXJ2ZXIgdG8gcnVuIG1hdGNoZWQgdGhlIHdpbGRjYXJkCiAgICAgICAgICAgIGxldCBiYXNlQ2hhbmdlZCA9IChuYW1lLmluZGV4T2YocGF0aCArICcuJykgPT09IDApOwogICAgICAgICAgICBsZXQgbWF0Y2hlcyA9IChwYXRoLmluZGV4T2YobmFtZSkgPT09IDAgJiYgIWJhc2VDaGFuZ2VkKTsKICAgICAgICAgICAgdmFsdWVzW2ldID0gewogICAgICAgICAgICAgIHBhdGg6IG1hdGNoZXMgPyBwYXRoIDogbmFtZSwKICAgICAgICAgICAgICB2YWx1ZTogbWF0Y2hlcyA/IHByb3BzW3BhdGhdIDogdiwKICAgICAgICAgICAgICBiYXNlOiB2CiAgICAgICAgICAgIH07CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB2YWx1ZXNbaV0gPSB2OwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gdmFsdWVzOwogICAgICB9CgogICAgICAvLyAtLSBzdGF0aWMgY2xhc3MgbWV0aG9kcyAtLS0tLS0tLS0tLS0KCiAgICAgIC8qKgogICAgICAgKiBFbnN1cmVzIGFuIGFjY2Vzc29yIGV4aXN0cyBmb3IgdGhlIHNwZWNpZmllZCBwcm9wZXJ0eSwgYW5kIGFkZHMKICAgICAgICogdG8gYSBsaXN0IG9mICJwcm9wZXJ0eSBlZmZlY3RzIiB0aGF0IHdpbGwgcnVuIHdoZW4gdGhlIGFjY2Vzc29yIGZvcgogICAgICAgKiB0aGUgc3BlY2lmaWVkIHByb3BlcnR5IGlzIHNldC4gIEVmZmVjdHMgYXJlIGdyb3VwZWQgYnkgInR5cGUiLCB3aGljaAogICAgICAgKiByb3VnaGx5IGNvcnJlc3BvbmRzIHRvIGEgcGhhc2UgaW4gZWZmZWN0IHByb2Nlc3NpbmcuICBUaGUgZWZmZWN0CiAgICAgICAqIG1ldGFkYXRhIHNob3VsZCBiZSBpbiB0aGUgZm9sbG93aW5nIGZvcm06CiAgICAgICAqCiAgICAgICAqICAgICB7CiAgICAgICAqICAgICAgIGZuOiBlZmZlY3RGdW5jdGlvbiwgLy8gUmVmZXJlbmNlIHRvIGZ1bmN0aW9uIHRvIGNhbGwgdG8gcGVyZm9ybSBlZmZlY3QKICAgICAgICogICAgICAgaW5mbzogeyAuLi4gfSAgICAgICAvLyBFZmZlY3QgbWV0YWRhdGEgcGFzc2VkIHRvIGZ1bmN0aW9uCiAgICAgICAqICAgICAgIHRyaWdnZXI6IHsgICAgICAgICAgLy8gT3B0aW9uYWwgdHJpZ2dlcmluZyBtZXRhZGF0YTsgaWYgbm90IHByb3ZpZGVkCiAgICAgICAqICAgICAgICAgbmFtZTogc3RyaW5nICAgICAgLy8gdGhlIHByb3BlcnR5IGlzIHRyZWF0ZWQgYXMgYSB3aWxkY2FyZAogICAgICAgKiAgICAgICAgIHN0cnVjdHVyZWQ6IGJvb2xlYW4KICAgICAgICogICAgICAgICB3aWxkY2FyZDogYm9vbGVhbgogICAgICAgKiAgICAgICB9CiAgICAgICAqICAgICB9CiAgICAgICAqCiAgICAgICAqIEVmZmVjdHMgYXJlIGNhbGxlZCBmcm9tIGBfcHJvcGVydGllc0NoYW5nZWRgIGluIHRoZSBmb2xsb3dpbmcgb3JkZXIgYnkKICAgICAgICogdHlwZToKICAgICAgICoKICAgICAgICogMS4gQ09NUFVURQogICAgICAgKiAyLiBQUk9QQUdBVEUKICAgICAgICogMy4gUkVGTEVDVAogICAgICAgKiA0LiBPQlNFUlZFCiAgICAgICAqIDUuIE5PVElGWQogICAgICAgKgogICAgICAgKiBFZmZlY3QgZnVuY3Rpb25zIGFyZSBjYWxsZWQgd2l0aCB0aGUgZm9sbG93aW5nIHNpZ25hdHVyZToKICAgICAgICoKICAgICAgICogICAgIGVmZmVjdEZ1bmN0aW9uKGluc3QsIHBhdGgsIHByb3BzLCBvbGRQcm9wcywgaW5mbywgaGFzUGF0aHMpCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eSBQcm9wZXJ0eSB0aGF0IHNob3VsZCB0cmlnZ2VyIHRoZSBlZmZlY3QKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgRWZmZWN0IHR5cGUsIGZyb20gdGhpcy5QUk9QRVJUWV9FRkZFQ1RfVFlQRVMKICAgICAgICogQHBhcmFtIHtPYmplY3Q9fSBlZmZlY3QgRWZmZWN0IG1ldGFkYXRhIG9iamVjdAogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKiBAcHJvdGVjdGVkCiAgICAgICAqLwogICAgICBzdGF0aWMgYWRkUHJvcGVydHlFZmZlY3QocHJvcGVydHksIHR5cGUsIGVmZmVjdCkgewogICAgICAgIHRoaXMucHJvdG90eXBlLl9hZGRQcm9wZXJ0eUVmZmVjdChwcm9wZXJ0eSwgdHlwZSwgZWZmZWN0KTsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIENyZWF0ZXMgYSBzaW5nbGUtcHJvcGVydHkgb2JzZXJ2ZXIgZm9yIHRoZSBnaXZlbiBwcm9wZXJ0eS4KICAgICAgICoKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IFByb3BlcnR5IG5hbWUKICAgICAgICogQHBhcmFtIHtzdHJpbmd8ZnVuY3Rpb24oKiwqKX0gbWV0aG9kIEZ1bmN0aW9uIG9yIG5hbWUgb2Ygb2JzZXJ2ZXIgbWV0aG9kIHRvIGNhbGwKICAgICAgICogQHBhcmFtIHtib29sZWFuPX0gZHluYW1pY0ZuIFdoZXRoZXIgdGhlIG1ldGhvZCBuYW1lIHNob3VsZCBiZSBpbmNsdWRlZCBhcwogICAgICAgKiAgIGEgZGVwZW5kZW5jeSB0byB0aGUgZWZmZWN0LgogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKiBAcHJvdGVjdGVkCiAgICAgICAqLwogICAgICBzdGF0aWMgY3JlYXRlUHJvcGVydHlPYnNlcnZlcihwcm9wZXJ0eSwgbWV0aG9kLCBkeW5hbWljRm4pIHsKICAgICAgICB0aGlzLnByb3RvdHlwZS5fY3JlYXRlUHJvcGVydHlPYnNlcnZlcihwcm9wZXJ0eSwgbWV0aG9kLCBkeW5hbWljRm4pOwogICAgICB9CgogICAgICAvKioKICAgICAgICogQ3JlYXRlcyBhIG11bHRpLXByb3BlcnR5ICJtZXRob2Qgb2JzZXJ2ZXIiIGJhc2VkIG9uIHRoZSBwcm92aWRlZAogICAgICAgKiBleHByZXNzaW9uLCB3aGljaCBzaG91bGQgYmUgYSBzdHJpbmcgaW4gdGhlIGZvcm0gb2YgYSBub3JtYWwgSmF2YVNjcmlwdAogICAgICAgKiBmdW5jdGlvbiBzaWduYXR1cmU6IGAnbWV0aG9kTmFtZShhcmcxLCBbLi4uLCBhcmduXSknYC4gIEVhY2ggYXJndW1lbnQKICAgICAgICogc2hvdWxkIGNvcnJlc3BvbmQgdG8gYSBwcm9wZXJ0eSBvciBwYXRoIGluIHRoZSBjb250ZXh0IG9mIHRoaXMKICAgICAgICogcHJvdG90eXBlIChvciBpbnN0YW5jZSksIG9yIG1heSBiZSBhIGxpdGVyYWwgc3RyaW5nIG9yIG51bWJlci4KICAgICAgICoKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IGV4cHJlc3Npb24gTWV0aG9kIGV4cHJlc3Npb24KICAgICAgICogQHBhcmFtIHtib29sZWFufE9iamVjdD19IGR5bmFtaWNGbiBCb29sZWFuIG9yIG9iamVjdCBtYXAgaW5kaWNhdGluZwogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKiAgIHdoZXRoZXIgbWV0aG9kIG5hbWVzIHNob3VsZCBiZSBpbmNsdWRlZCBhcyBhIGRlcGVuZGVuY3kgdG8gdGhlIGVmZmVjdC4KICAgICAgICogQHByb3RlY3RlZAogICAgICAgKi8KICAgICAgc3RhdGljIGNyZWF0ZU1ldGhvZE9ic2VydmVyKGV4cHJlc3Npb24sIGR5bmFtaWNGbikgewogICAgICAgIHRoaXMucHJvdG90eXBlLl9jcmVhdGVNZXRob2RPYnNlcnZlcihleHByZXNzaW9uLCBkeW5hbWljRm4pOwogICAgICB9CgogICAgICAvKioKICAgICAgICogQ2F1c2VzIHRoZSBzZXR0ZXIgZm9yIHRoZSBnaXZlbiBwcm9wZXJ0eSB0byBkaXNwYXRjaCBgPHByb3BlcnR5Pi1jaGFuZ2VkYAogICAgICAgKiBldmVudHMgdG8gbm90aWZ5IG9mIGNoYW5nZXMgdG8gdGhlIHByb3BlcnR5LgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkgUHJvcGVydHkgbmFtZQogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKiBAcHJvdGVjdGVkCiAgICAgICAqLwogICAgICBzdGF0aWMgY3JlYXRlTm90aWZ5aW5nUHJvcGVydHkocHJvcGVydHkpIHsKICAgICAgICB0aGlzLnByb3RvdHlwZS5fY3JlYXRlTm90aWZ5aW5nUHJvcGVydHkocHJvcGVydHkpOwogICAgICB9CgogICAgICAvKioKICAgICAgICogQ3JlYXRlcyBhIHJlYWQtb25seSBhY2Nlc3NvciBmb3IgdGhlIGdpdmVuIHByb3BlcnR5LgogICAgICAgKgogICAgICAgKiBUbyBzZXQgdGhlIHByb3BlcnR5LCB1c2UgdGhlIHByb3RlY3RlZCBgX3NldFByb3BlcnR5YCBBUEkuCiAgICAgICAqIFRvIGNyZWF0ZSBhIGN1c3RvbSBwcm90ZWN0ZWQgc2V0dGVyIChlLmcuIGBfc2V0TXlQcm9wKClgIGZvcgogICAgICAgKiBwcm9wZXJ0eSBgbXlQcm9wYCksIHBhc3MgYHRydWVgIGZvciBgcHJvdGVjdGVkU2V0dGVyYC4KICAgICAgICoKICAgICAgICogTm90ZSwgaWYgdGhlIHByb3BlcnR5IHdpbGwgaGF2ZSBvdGhlciBwcm9wZXJ0eSBlZmZlY3RzLCB0aGlzIG1ldGhvZAogICAgICAgKiBzaG91bGQgYmUgY2FsbGVkIGZpcnN0LCBiZWZvcmUgYWRkaW5nIG90aGVyIGVmZmVjdHMuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eSBQcm9wZXJ0eSBuYW1lCiAgICAgICAqIEBwYXJhbSB7Ym9vbGVhbj19IHByb3RlY3RlZFNldHRlciBDcmVhdGVzIGEgY3VzdG9tIHByb3RlY3RlZCBzZXR0ZXIKICAgICAgICogICB3aGVuIGB0cnVlYC4KICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICogQHByb3RlY3RlZAogICAgICAgKi8KICAgICAgc3RhdGljIGNyZWF0ZVJlYWRPbmx5UHJvcGVydHkocHJvcGVydHksIHByb3RlY3RlZFNldHRlcikgewogICAgICAgIHRoaXMucHJvdG90eXBlLl9jcmVhdGVSZWFkT25seVByb3BlcnR5KHByb3BlcnR5LCBwcm90ZWN0ZWRTZXR0ZXIpOwogICAgICB9CgogICAgICAvKioKICAgICAgICogQ2F1c2VzIHRoZSBzZXR0ZXIgZm9yIHRoZSBnaXZlbiBwcm9wZXJ0eSB0byByZWZsZWN0IHRoZSBwcm9wZXJ0eSB2YWx1ZQogICAgICAgKiB0byBhIChkYXNoLWNhc2VkKSBhdHRyaWJ1dGUgb2YgdGhlIHNhbWUgbmFtZS4KICAgICAgICoKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IFByb3BlcnR5IG5hbWUKICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICogQHByb3RlY3RlZAogICAgICAgKi8KICAgICAgc3RhdGljIGNyZWF0ZVJlZmxlY3RlZFByb3BlcnR5KHByb3BlcnR5KSB7CiAgICAgICAgdGhpcy5wcm90b3R5cGUuX2NyZWF0ZVJlZmxlY3RlZFByb3BlcnR5KHByb3BlcnR5KTsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIENyZWF0ZXMgYSBjb21wdXRlZCBwcm9wZXJ0eSB3aG9zZSB2YWx1ZSBpcyBzZXQgdG8gdGhlIHJlc3VsdCBvZiB0aGUKICAgICAgICogbWV0aG9kIGRlc2NyaWJlZCBieSB0aGUgZ2l2ZW4gYGV4cHJlc3Npb25gIGVhY2ggdGltZSBvbmUgb3IgbW9yZQogICAgICAgKiBhcmd1bWVudHMgdG8gdGhlIG1ldGhvZCBjaGFuZ2VzLiAgVGhlIGV4cHJlc3Npb24gc2hvdWxkIGJlIGEgc3RyaW5nCiAgICAgICAqIGluIHRoZSBmb3JtIG9mIGEgbm9ybWFsIEphdmFTY3JpcHQgZnVuY3Rpb24gc2lnbmF0dXJlOgogICAgICAgKiBgJ21ldGhvZE5hbWUoYXJnMSwgWy4uLiwgYXJnbl0pJ2AKICAgICAgICoKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IE5hbWUgb2YgY29tcHV0ZWQgcHJvcGVydHkgdG8gc2V0CiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBleHByZXNzaW9uIE1ldGhvZCBleHByZXNzaW9uCiAgICAgICAqIEBwYXJhbSB7Ym9vbGVhbnxPYmplY3Q9fSBkeW5hbWljRm4gQm9vbGVhbiBvciBvYmplY3QgbWFwIGluZGljYXRpbmcgd2hldGhlcgogICAgICAgKiAgIG1ldGhvZCBuYW1lcyBzaG91bGQgYmUgaW5jbHVkZWQgYXMgYSBkZXBlbmRlbmN5IHRvIHRoZSBlZmZlY3QuCiAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAqIEBwcm90ZWN0ZWQKICAgICAgICovCiAgICAgIHN0YXRpYyBjcmVhdGVDb21wdXRlZFByb3BlcnR5KHByb3BlcnR5LCBleHByZXNzaW9uLCBkeW5hbWljRm4pIHsKICAgICAgICB0aGlzLnByb3RvdHlwZS5fY3JlYXRlQ29tcHV0ZWRQcm9wZXJ0eShwcm9wZXJ0eSwgZXhwcmVzc2lvbiwgZHluYW1pY0ZuKTsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIFBhcnNlcyB0aGUgcHJvdmlkZWQgdGVtcGxhdGUgdG8gZW5zdXJlIGJpbmRpbmcgZWZmZWN0cyBhcmUgY3JlYXRlZAogICAgICAgKiBmb3IgdGhlbSwgYW5kIHRoZW4gZW5zdXJlcyBwcm9wZXJ0eSBhY2Nlc3NvcnMgYXJlIGNyZWF0ZWQgZm9yIGFueQogICAgICAgKiBkZXBlbmRlbnQgcHJvcGVydGllcyBpbiB0aGUgdGVtcGxhdGUuICBCaW5kaW5nIGVmZmVjdHMgZm9yIGJvdW5kCiAgICAgICAqIHRlbXBsYXRlcyBhcmUgc3RvcmVkIGluIGEgbGlua2VkIGxpc3Qgb24gdGhlIGluc3RhbmNlIHNvIHRoYXQKICAgICAgICogdGVtcGxhdGVzIGNhbiBiZSBlZmZpY2llbnRseSBzdGFtcGVkIGFuZCB1bnN0YW1wZWQuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7IUhUTUxUZW1wbGF0ZUVsZW1lbnR9IHRlbXBsYXRlIFRlbXBsYXRlIGNvbnRhaW5pbmcgYmluZGluZwogICAgICAgKiAgIGJpbmRpbmdzCiAgICAgICAqIEByZXR1cm4geyFUZW1wbGF0ZUluZm99IFRlbXBsYXRlIG1ldGFkYXRhIG9iamVjdAogICAgICAgKiBAcHJvdGVjdGVkCiAgICAgICAqLwogICAgICBzdGF0aWMgYmluZFRlbXBsYXRlKHRlbXBsYXRlKSB7CiAgICAgICAgcmV0dXJuIHRoaXMucHJvdG90eXBlLl9iaW5kVGVtcGxhdGUodGVtcGxhdGUpOwogICAgICB9CgogICAgICAvLyAtLSBiaW5kaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICAgIC8qKgogICAgICAgKiBFcXVpdmFsZW50IHRvIHN0YXRpYyBgYmluZFRlbXBsYXRlYCBBUEkgYnV0IGNhbiBiZSBjYWxsZWQgb24KICAgICAgICogYW4gaW5zdGFuY2UgdG8gYWRkIGVmZmVjdHMgYXQgcnVudGltZS4gIFNlZSB0aGF0IG1ldGhvZCBmb3IKICAgICAgICogZnVsbCBBUEkgZG9jcy4KICAgICAgICoKICAgICAgICogVGhpcyBtZXRob2QgbWF5IGJlIGNhbGxlZCBvbiB0aGUgcHJvdG90eXBlIChmb3IgcHJvdG90eXBpY2FsIHRlbXBsYXRlCiAgICAgICAqIGJpbmRpbmcsIHRvIGF2b2lkIGNyZWF0aW5nIGFjY2Vzc29ycyBldmVyeSBpbnN0YW5jZSkgb25jZSBwZXIgcHJvdG90eXBlLAogICAgICAgKiBhbmQgd2lsbCBiZSBjYWxsZWQgd2l0aCBgcnVudGltZUJpbmRpbmc6IHRydWVgIGJ5IGBfc3RhbXBUZW1wbGF0ZWAgdG8KICAgICAgICogY3JlYXRlIGFuZCBsaW5rIGFuIGluc3RhbmNlIG9mIHRoZSB0ZW1wbGF0ZSBtZXRhZGF0YSBhc3NvY2lhdGVkIHdpdGggYQogICAgICAgKiBwYXJ0aWN1bGFyIHN0YW1waW5nLgogICAgICAgKgogICAgICAgKiBAcGFyYW0geyFIVE1MVGVtcGxhdGVFbGVtZW50fSB0ZW1wbGF0ZSBUZW1wbGF0ZSBjb250YWluaW5nIGJpbmRpbmcKICAgICAgICogICBiaW5kaW5ncwogICAgICAgKiBAcGFyYW0ge2Jvb2xlYW49fSBpbnN0YW5jZUJpbmRpbmcgV2hlbiBmYWxzZSAoZGVmYXVsdCksIHBlcmZvcm1zCiAgICAgICAqICAgInByb3RvdHlwaWNhbCIgYmluZGluZyBvZiB0aGUgdGVtcGxhdGUgYW5kIG92ZXJ3cml0ZXMgYW55IHByZXZpb3VzbHkKICAgICAgICogICBib3VuZCB0ZW1wbGF0ZSBmb3IgdGhlIGNsYXNzLiBXaGVuIHRydWUgKGFzIHBhc3NlZCBmcm9tCiAgICAgICAqICAgYF9zdGFtcFRlbXBsYXRlYCksIHRoZSB0ZW1wbGF0ZSBpbmZvIGlzIGluc3RhbmNlZCBhbmQgbGlua2VkIGludG8KICAgICAgICogICB0aGUgbGlzdCBvZiBib3VuZCB0ZW1wbGF0ZXMuCiAgICAgICAqIEByZXR1cm4geyFUZW1wbGF0ZUluZm99IFRlbXBsYXRlIG1ldGFkYXRhIG9iamVjdDsgZm9yIGBydW50aW1lQmluZGluZ2AsCiAgICAgICAqICAgdGhpcyBpcyBhbiBpbnN0YW5jZSBvZiB0aGUgcHJvdG90eXBpY2FsIHRlbXBsYXRlIGluZm8KICAgICAgICogQHByb3RlY3RlZAogICAgICAgKi8KICAgICAgX2JpbmRUZW1wbGF0ZSh0ZW1wbGF0ZSwgaW5zdGFuY2VCaW5kaW5nKSB7CiAgICAgICAgbGV0IHRlbXBsYXRlSW5mbyA9IHRoaXMuY29uc3RydWN0b3IuX3BhcnNlVGVtcGxhdGUodGVtcGxhdGUpOwogICAgICAgIGxldCB3YXNQcmVCb3VuZCA9IHRoaXMuX190ZW1wbGF0ZUluZm8gPT0gdGVtcGxhdGVJbmZvOwogICAgICAgIC8vIE9wdGltaXphdGlvbjogc2luY2UgdGhpcyBpcyBjYWxsZWQgdHdpY2UgZm9yIHByb3RvLWJvdW5kIHRlbXBsYXRlcywKICAgICAgICAvLyBkb24ndCBhdHRlbXB0IHRvIHJlY3JlYXRlIGFjY2Vzc29ycyBpZiB0aGlzIHRlbXBsYXRlIHdhcyBwcmUtYm91bmQKICAgICAgICBpZiAoIXdhc1ByZUJvdW5kKSB7CiAgICAgICAgICBmb3IgKGxldCBwcm9wIGluIHRlbXBsYXRlSW5mby5wcm9wZXJ0eUVmZmVjdHMpIHsKICAgICAgICAgICAgdGhpcy5fY3JlYXRlUHJvcGVydHlBY2Nlc3Nvcihwcm9wKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKGluc3RhbmNlQmluZGluZykgewogICAgICAgICAgLy8gRm9yIGluc3RhbmNlLXRpbWUgYmluZGluZywgY3JlYXRlIGluc3RhbmNlIG9mIHRlbXBsYXRlIG1ldGFkYXRhCiAgICAgICAgICAvLyBhbmQgbGluayBpbnRvIGxpc3Qgb2YgdGVtcGxhdGVzIGlmIG5lY2Vzc2FyeQogICAgICAgICAgdGVtcGxhdGVJbmZvID0gLyoqIEB0eXBlIHshVGVtcGxhdGVJbmZvfSAqLyhPYmplY3QuY3JlYXRlKHRlbXBsYXRlSW5mbykpOwogICAgICAgICAgdGVtcGxhdGVJbmZvLndhc1ByZUJvdW5kID0gd2FzUHJlQm91bmQ7CiAgICAgICAgICBpZiAoIXdhc1ByZUJvdW5kICYmIHRoaXMuX190ZW1wbGF0ZUluZm8pIHsKICAgICAgICAgICAgbGV0IGxhc3QgPSB0aGlzLl9fdGVtcGxhdGVJbmZvTGFzdCB8fCB0aGlzLl9fdGVtcGxhdGVJbmZvOwogICAgICAgICAgICB0aGlzLl9fdGVtcGxhdGVJbmZvTGFzdCA9IGxhc3QubmV4dFRlbXBsYXRlSW5mbyA9IHRlbXBsYXRlSW5mbzsKICAgICAgICAgICAgdGVtcGxhdGVJbmZvLnByZXZpb3VzVGVtcGxhdGVJbmZvID0gbGFzdDsKICAgICAgICAgICAgcmV0dXJuIHRlbXBsYXRlSW5mbzsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRoaXMuX190ZW1wbGF0ZUluZm8gPSB0ZW1wbGF0ZUluZm87CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBBZGRzIGEgcHJvcGVydHkgZWZmZWN0IHRvIHRoZSBnaXZlbiB0ZW1wbGF0ZSBtZXRhZGF0YSwgd2hpY2ggaXMgcnVuCiAgICAgICAqIGF0IHRoZSAicHJvcGFnYXRlIiBzdGFnZSBvZiBgX3Byb3BlcnRpZXNDaGFuZ2VkYCB3aGVuIHRoZSB0ZW1wbGF0ZQogICAgICAgKiBoYXMgYmVlbiBib3VuZCB0byB0aGUgZWxlbWVudCB2aWEgYF9iaW5kVGVtcGxhdGVgLgogICAgICAgKgogICAgICAgKiBUaGUgYGVmZmVjdGAgb2JqZWN0IHNob3VsZCBtYXRjaCB0aGUgZm9ybWF0IGluIGBfYWRkUHJvcGVydHlFZmZlY3RgLgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge09iamVjdH0gdGVtcGxhdGVJbmZvIFRlbXBsYXRlIG1ldGFkYXRhIHRvIGFkZCBlZmZlY3QgdG8KICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHByb3AgUHJvcGVydHkgdGhhdCBzaG91bGQgdHJpZ2dlciB0aGUgZWZmZWN0CiAgICAgICAqIEBwYXJhbSB7T2JqZWN0PX0gZWZmZWN0IEVmZmVjdCBtZXRhZGF0YSBvYmplY3QKICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICogQHByb3RlY3RlZAogICAgICAgKi8KICAgICAgc3RhdGljIF9hZGRUZW1wbGF0ZVByb3BlcnR5RWZmZWN0KHRlbXBsYXRlSW5mbywgcHJvcCwgZWZmZWN0KSB7CiAgICAgICAgbGV0IGhvc3RQcm9wcyA9IHRlbXBsYXRlSW5mby5ob3N0UHJvcHMgPSB0ZW1wbGF0ZUluZm8uaG9zdFByb3BzIHx8IHt9OwogICAgICAgIGhvc3RQcm9wc1twcm9wXSA9IHRydWU7CiAgICAgICAgbGV0IGVmZmVjdHMgPSB0ZW1wbGF0ZUluZm8ucHJvcGVydHlFZmZlY3RzID0gdGVtcGxhdGVJbmZvLnByb3BlcnR5RWZmZWN0cyB8fCB7fTsKICAgICAgICBsZXQgcHJvcEVmZmVjdHMgPSBlZmZlY3RzW3Byb3BdID0gZWZmZWN0c1twcm9wXSB8fCBbXTsKICAgICAgICBwcm9wRWZmZWN0cy5wdXNoKGVmZmVjdCk7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBTdGFtcHMgdGhlIHByb3ZpZGVkIHRlbXBsYXRlIGFuZCBwZXJmb3JtcyBpbnN0YW5jZS10aW1lIHNldHVwIGZvcgogICAgICAgKiBQb2x5bWVyIHRlbXBsYXRlIGZlYXR1cmVzLCBpbmNsdWRpbmcgZGF0YSBiaW5kaW5ncywgZGVjbGFyYXRpdmUgZXZlbnQKICAgICAgICogbGlzdGVuZXJzLCBhbmQgdGhlIGB0aGlzLiRgIG1hcCBvZiBgaWRgJ3MgdG8gbm9kZXMuICBBIGRvY3VtZW50IGZyYWdtZW50CiAgICAgICAqIGlzIHJldHVybmVkIGNvbnRhaW5pbmcgdGhlIHN0YW1wZWQgRE9NLCByZWFkeSBmb3IgaW5zZXJ0aW9uIGludG8gdGhlCiAgICAgICAqIERPTS4KICAgICAgICoKICAgICAgICogVGhpcyBtZXRob2QgbWF5IGJlIGNhbGxlZCBtb3JlIHRoYW4gb25jZTsgaG93ZXZlciBub3RlIHRoYXQgZHVlIHRvCiAgICAgICAqIGBzaGFkeWNzc2AgcG9seWZpbGwgbGltaXRhdGlvbnMsIG9ubHkgc3R5bGVzIGZyb20gdGVtcGxhdGVzIHByZXBhcmVkCiAgICAgICAqIHVzaW5nIGBTaGFkeUNTUy5wcmVwYXJlVGVtcGxhdGVgIHdpbGwgYmUgY29ycmVjdGx5IHBvbHlmaWxsZWQgKHNjb3BlZAogICAgICAgKiB0byB0aGUgc2hhZG93IHJvb3QgYW5kIHN1cHBvcnQgQ1NTIGN1c3RvbSBwcm9wZXJ0aWVzKSwgYW5kIG5vdGUgdGhhdAogICAgICAgKiBgU2hhZHlDU1MucHJlcGFyZVRlbXBsYXRlYCBtYXkgb25seSBiZSBjYWxsZWQgb25jZSBwZXIgZWxlbWVudC4gQXMgc3VjaCwKICAgICAgICogYW55IHN0eWxlcyByZXF1aXJlZCBieSBpbiBydW50aW1lLXN0YW1wZWQgdGVtcGxhdGVzIG11c3QgYmUgaW5jbHVkZWQKICAgICAgICogaW4gdGhlIG1haW4gZWxlbWVudCB0ZW1wbGF0ZS4KICAgICAgICoKICAgICAgICogQHBhcmFtIHshSFRNTFRlbXBsYXRlRWxlbWVudH0gdGVtcGxhdGUgVGVtcGxhdGUgdG8gc3RhbXAKICAgICAgICogQHJldHVybiB7IVN0YW1wZWRUZW1wbGF0ZX0gQ2xvbmVkIHRlbXBsYXRlIGNvbnRlbnQKICAgICAgICogQG92ZXJyaWRlCiAgICAgICAqIEBwcm90ZWN0ZWQKICAgICAgICovCiAgICAgIF9zdGFtcFRlbXBsYXRlKHRlbXBsYXRlKSB7CiAgICAgICAgLy8gRW5zdXJlcyB0aGF0IGNyZWF0ZWQgZG9tIGlzIGBfZW5xdWV1ZUNsaWVudGAnZCB0byB0aGlzIGVsZW1lbnQgc28KICAgICAgICAvLyB0aGF0IGl0IGNhbiBiZSBmbHVzaGVkIG9uIG5leHQgY2FsbCB0byBgX2ZsdXNoUHJvcGVydGllc2AKICAgICAgICBob3N0U3RhY2suYmVnaW5Ib3N0aW5nKHRoaXMpOwogICAgICAgIGxldCBkb20gPSBzdXBlci5fc3RhbXBUZW1wbGF0ZSh0ZW1wbGF0ZSk7CiAgICAgICAgaG9zdFN0YWNrLmVuZEhvc3RpbmcodGhpcyk7CiAgICAgICAgbGV0IHRlbXBsYXRlSW5mbyA9IC8qKiBAdHlwZSB7IVRlbXBsYXRlSW5mb30gKi8odGhpcy5fYmluZFRlbXBsYXRlKHRlbXBsYXRlLCB0cnVlKSk7CiAgICAgICAgLy8gQWRkIHRlbXBsYXRlLWluc3RhbmNlLXNwZWNpZmljIGRhdGEgdG8gaW5zdGFuY2VkIHRlbXBsYXRlSW5mbwogICAgICAgIHRlbXBsYXRlSW5mby5ub2RlTGlzdCA9IGRvbS5ub2RlTGlzdDsKICAgICAgICAvLyBDYXB0dXJlIGNoaWxkIG5vZGVzIHRvIGFsbG93IHVuc3RhbXBpbmcgb2Ygbm9uLXByb3RvdHlwaWNhbCB0ZW1wbGF0ZXMKICAgICAgICBpZiAoIXRlbXBsYXRlSW5mby53YXNQcmVCb3VuZCkgewogICAgICAgICAgbGV0IG5vZGVzID0gdGVtcGxhdGVJbmZvLmNoaWxkTm9kZXMgPSBbXTsKICAgICAgICAgIGZvciAobGV0IG49ZG9tLmZpcnN0Q2hpbGQ7IG47IG49bi5uZXh0U2libGluZykgewogICAgICAgICAgICBub2Rlcy5wdXNoKG4pOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBkb20udGVtcGxhdGVJbmZvID0gdGVtcGxhdGVJbmZvOwogICAgICAgIC8vIFNldHVwIGNvbXBvdW5kIHN0b3JhZ2UsIDItd2F5IGxpc3RlbmVycywgYW5kIGRhdGFIb3N0IGZvciBiaW5kaW5ncwogICAgICAgIHNldHVwQmluZGluZ3ModGhpcywgdGVtcGxhdGVJbmZvKTsKICAgICAgICAvLyBGbHVzaCBwcm9wZXJ0aWVzIGludG8gdGVtcGxhdGUgbm9kZXMgaWYgYWxyZWFkeSBib290ZWQKICAgICAgICBpZiAodGhpcy5fX2RhdGFSZWFkeSkgewogICAgICAgICAgcnVuRWZmZWN0cyh0aGlzLCB0ZW1wbGF0ZUluZm8ucHJvcGVydHlFZmZlY3RzLCB0aGlzLl9fZGF0YSwgbnVsbCwKICAgICAgICAgICAgZmFsc2UsIHRlbXBsYXRlSW5mby5ub2RlTGlzdCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBkb207CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBSZW1vdmVzIGFuZCB1bmJpbmRzIHRoZSBub2RlcyBwcmV2aW91c2x5IGNvbnRhaW5lZCBpbiB0aGUgcHJvdmlkZWQKICAgICAgICogRG9jdW1lbnRGcmFnbWVudCByZXR1cm5lZCBmcm9tIGBfc3RhbXBUZW1wbGF0ZWAuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7IVN0YW1wZWRUZW1wbGF0ZX0gZG9tIERvY3VtZW50RnJhZ21lbnQgcHJldmlvdXNseSByZXR1cm5lZAogICAgICAgKiAgIGZyb20gYF9zdGFtcFRlbXBsYXRlYCBhc3NvY2lhdGVkIHdpdGggdGhlIG5vZGVzIHRvIGJlIHJlbW92ZWQKICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICogQHByb3RlY3RlZAogICAgICAgKi8KICAgICAgX3JlbW92ZUJvdW5kRG9tKGRvbSkgewogICAgICAgIC8vIFVubGluayB0ZW1wbGF0ZSBpbmZvCiAgICAgICAgbGV0IHRlbXBsYXRlSW5mbyA9IGRvbS50ZW1wbGF0ZUluZm87CiAgICAgICAgaWYgKHRlbXBsYXRlSW5mby5wcmV2aW91c1RlbXBsYXRlSW5mbykgewogICAgICAgICAgdGVtcGxhdGVJbmZvLnByZXZpb3VzVGVtcGxhdGVJbmZvLm5leHRUZW1wbGF0ZUluZm8gPQogICAgICAgICAgICB0ZW1wbGF0ZUluZm8ubmV4dFRlbXBsYXRlSW5mbzsKICAgICAgICB9CiAgICAgICAgaWYgKHRlbXBsYXRlSW5mby5uZXh0VGVtcGxhdGVJbmZvKSB7CiAgICAgICAgICB0ZW1wbGF0ZUluZm8ubmV4dFRlbXBsYXRlSW5mby5wcmV2aW91c1RlbXBsYXRlSW5mbyA9CiAgICAgICAgICAgIHRlbXBsYXRlSW5mby5wcmV2aW91c1RlbXBsYXRlSW5mbzsKICAgICAgICB9CiAgICAgICAgaWYgKHRoaXMuX190ZW1wbGF0ZUluZm9MYXN0ID09IHRlbXBsYXRlSW5mbykgewogICAgICAgICAgdGhpcy5fX3RlbXBsYXRlSW5mb0xhc3QgPSB0ZW1wbGF0ZUluZm8ucHJldmlvdXNUZW1wbGF0ZUluZm87CiAgICAgICAgfQogICAgICAgIHRlbXBsYXRlSW5mby5wcmV2aW91c1RlbXBsYXRlSW5mbyA9IHRlbXBsYXRlSW5mby5uZXh0VGVtcGxhdGVJbmZvID0gbnVsbDsKICAgICAgICAvLyBSZW1vdmUgc3RhbXBlZCBub2RlcwogICAgICAgIGxldCBub2RlcyA9IHRlbXBsYXRlSW5mby5jaGlsZE5vZGVzOwogICAgICAgIGZvciAobGV0IGk9MDsgaTxub2Rlcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgbGV0IG5vZGUgPSBub2Rlc1tpXTsKICAgICAgICAgIG5vZGUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChub2RlKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBPdmVycmlkZXMgZGVmYXVsdCBgVGVtcGxhdGVTdGFtcGAgaW1wbGVtZW50YXRpb24gdG8gYWRkIHN1cHBvcnQgZm9yCiAgICAgICAqIHBhcnNpbmcgYmluZGluZ3MgZnJvbSBgVGV4dE5vZGVgJ3MnIGB0ZXh0Q29udGVudGAuICBBIGBiaW5kaW5nc2AKICAgICAgICogYXJyYXkgaXMgYWRkZWQgdG8gYG5vZGVJbmZvYCBhbmQgcG9wdWxhdGVkIHdpdGggYmluZGluZyBtZXRhZGF0YQogICAgICAgKiB3aXRoIGluZm9ybWF0aW9uIGNhcHR1cmluZyB0aGUgYmluZGluZyB0YXJnZXQsIGFuZCBhIGBwYXJ0c2AgYXJyYXkKICAgICAgICogd2l0aCBvbmUgb3IgbW9yZSBtZXRhZGF0YSBvYmplY3RzIGNhcHR1cmluZyB0aGUgc291cmNlKHMpIG9mIHRoZQogICAgICAgKiBiaW5kaW5nLgogICAgICAgKgogICAgICAgKiBAb3ZlcnJpZGUKICAgICAgICogQHBhcmFtIHtOb2RlfSBub2RlIE5vZGUgdG8gcGFyc2UKICAgICAgICogQHBhcmFtIHtUZW1wbGF0ZUluZm99IHRlbXBsYXRlSW5mbyBUZW1wbGF0ZSBtZXRhZGF0YSBmb3IgY3VycmVudCB0ZW1wbGF0ZQogICAgICAgKiBAcGFyYW0ge05vZGVJbmZvfSBub2RlSW5mbyBOb2RlIG1ldGFkYXRhIGZvciBjdXJyZW50IHRlbXBsYXRlIG5vZGUKICAgICAgICogQHJldHVybiB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSB2aXNpdGVkIG5vZGUgYWRkZWQgbm9kZS1zcGVjaWZpYwogICAgICAgKiAgIG1ldGFkYXRhIHRvIGBub2RlSW5mb2AKICAgICAgICogQHByb3RlY3RlZAogICAgICAgKiBAc3VwcHJlc3Mge21pc3NpbmdQcm9wZXJ0aWVzfSBJbnRlcmZhY2VzIGluIGNsb3N1cmUgZG8gbm90IGluaGVyaXQgc3RhdGljcywgYnV0IGNsYXNzZXMgZG8KICAgICAgICovCiAgICAgIHN0YXRpYyBfcGFyc2VUZW1wbGF0ZU5vZGUobm9kZSwgdGVtcGxhdGVJbmZvLCBub2RlSW5mbykgewogICAgICAgIGxldCBub3RlZCA9IHN1cGVyLl9wYXJzZVRlbXBsYXRlTm9kZShub2RlLCB0ZW1wbGF0ZUluZm8sIG5vZGVJbmZvKTsKICAgICAgICBpZiAobm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5URVhUX05PREUpIHsKICAgICAgICAgIGxldCBwYXJ0cyA9IHRoaXMuX3BhcnNlQmluZGluZ3Mobm9kZS50ZXh0Q29udGVudCwgdGVtcGxhdGVJbmZvKTsKICAgICAgICAgIGlmIChwYXJ0cykgewogICAgICAgICAgICAvLyBJbml0aWFsaXplIHRoZSB0ZXh0Q29udGVudCB3aXRoIGFueSBsaXRlcmFsIHBhcnRzCiAgICAgICAgICAgIC8vIE5PVEU6IGRlZmF1bHQgdG8gYSBzcGFjZSBoZXJlIHNvIHRoZSB0ZXh0Tm9kZSByZW1haW5zOyBzb21lIGJyb3dzZXJzCiAgICAgICAgICAgIC8vIChJRSkgb21pdCBhbiBlbXB0eSB0ZXh0Tm9kZSBmb2xsb3dpbmcgY2xvbmVOb2RlL2ltcG9ydE5vZGUuCiAgICAgICAgICAgIG5vZGUudGV4dENvbnRlbnQgPSBsaXRlcmFsRnJvbVBhcnRzKHBhcnRzKSB8fCAnICc7CiAgICAgICAgICAgIGFkZEJpbmRpbmcodGhpcywgdGVtcGxhdGVJbmZvLCBub2RlSW5mbywgJ3RleHQnLCAndGV4dENvbnRlbnQnLCBwYXJ0cyk7CiAgICAgICAgICAgIG5vdGVkID0gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIG5vdGVkOwogICAgICB9CgogICAgICAvKioKICAgICAgICogT3ZlcnJpZGVzIGRlZmF1bHQgYFRlbXBsYXRlU3RhbXBgIGltcGxlbWVudGF0aW9uIHRvIGFkZCBzdXBwb3J0IGZvcgogICAgICAgKiBwYXJzaW5nIGJpbmRpbmdzIGZyb20gYXR0cmlidXRlcy4gIEEgYGJpbmRpbmdzYAogICAgICAgKiBhcnJheSBpcyBhZGRlZCB0byBgbm9kZUluZm9gIGFuZCBwb3B1bGF0ZWQgd2l0aCBiaW5kaW5nIG1ldGFkYXRhCiAgICAgICAqIHdpdGggaW5mb3JtYXRpb24gY2FwdHVyaW5nIHRoZSBiaW5kaW5nIHRhcmdldCwgYW5kIGEgYHBhcnRzYCBhcnJheQogICAgICAgKiB3aXRoIG9uZSBvciBtb3JlIG1ldGFkYXRhIG9iamVjdHMgY2FwdHVyaW5nIHRoZSBzb3VyY2Uocykgb2YgdGhlCiAgICAgICAqIGJpbmRpbmcuCiAgICAgICAqCiAgICAgICAqIEBvdmVycmlkZQogICAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IG5vZGUgTm9kZSB0byBwYXJzZQogICAgICAgKiBAcGFyYW0ge1RlbXBsYXRlSW5mb30gdGVtcGxhdGVJbmZvIFRlbXBsYXRlIG1ldGFkYXRhIGZvciBjdXJyZW50IHRlbXBsYXRlCiAgICAgICAqIEBwYXJhbSB7Tm9kZUluZm99IG5vZGVJbmZvIE5vZGUgbWV0YWRhdGEgZm9yIGN1cnJlbnQgdGVtcGxhdGUgbm9kZQogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBBdHRyaWJ1dGUgbmFtZQogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gdmFsdWUgQXR0cmlidXRlIHZhbHVlCiAgICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgdmlzaXRlZCBub2RlIGFkZGVkIG5vZGUtc3BlY2lmaWMKICAgICAgICogICBtZXRhZGF0YSB0byBgbm9kZUluZm9gCiAgICAgICAqIEBwcm90ZWN0ZWQKICAgICAgICogQHN1cHByZXNzIHttaXNzaW5nUHJvcGVydGllc30gSW50ZXJmYWNlcyBpbiBjbG9zdXJlIGRvIG5vdCBpbmhlcml0IHN0YXRpY3MsIGJ1dCBjbGFzc2VzIGRvCiAgICAgICAqLwogICAgICBzdGF0aWMgX3BhcnNlVGVtcGxhdGVOb2RlQXR0cmlidXRlKG5vZGUsIHRlbXBsYXRlSW5mbywgbm9kZUluZm8sIG5hbWUsIHZhbHVlKSB7CiAgICAgICAgbGV0IHBhcnRzID0gdGhpcy5fcGFyc2VCaW5kaW5ncyh2YWx1ZSwgdGVtcGxhdGVJbmZvKTsKICAgICAgICBpZiAocGFydHMpIHsKICAgICAgICAgIC8vIEF0dHJpYnV0ZSBvciBwcm9wZXJ0eQogICAgICAgICAgbGV0IG9yaWdOYW1lID0gbmFtZTsKICAgICAgICAgIGxldCBraW5kID0gJ3Byb3BlcnR5JzsKICAgICAgICAgIC8vIFRoZSBvbmx5IHdheSB3ZSBzZWUgYSBjYXBpdGFsIGxldHRlciBoZXJlIGlzIGlmIHRoZSBhdHRyIGhhcwogICAgICAgICAgLy8gYSBjYXBpdGFsIGxldHRlciBpbiBpdCBwZXIgc3BlYy4gSW4gdGhpcyBjYXNlLCB0byBtYWtlIHN1cmUKICAgICAgICAgIC8vIHRoaXMgYmluZGluZyB3b3Jrcywgd2UgZ28gYWhlYWQgYW5kIG1ha2UgdGhlIGJpbmRpbmcgdG8gdGhlIGF0dHJpYnV0ZS4KICAgICAgICAgIGlmIChjYXBpdGFsQXR0cmlidXRlUmVnZXgudGVzdChuYW1lKSkgewogICAgICAgICAgICBraW5kID0gJ2F0dHJpYnV0ZSc7CiAgICAgICAgICB9IGVsc2UgaWYgKG5hbWVbbmFtZS5sZW5ndGgtMV0gPT0gJyQnKSB7CiAgICAgICAgICAgIG5hbWUgPSBuYW1lLnNsaWNlKDAsIC0xKTsKICAgICAgICAgICAga2luZCA9ICdhdHRyaWJ1dGUnOwogICAgICAgICAgfQogICAgICAgICAgLy8gSW5pdGlhbGl6ZSBhdHRyaWJ1dGUgYmluZGluZ3Mgd2l0aCBhbnkgbGl0ZXJhbCBwYXJ0cwogICAgICAgICAgbGV0IGxpdGVyYWwgPSBsaXRlcmFsRnJvbVBhcnRzKHBhcnRzKTsKICAgICAgICAgIGlmIChsaXRlcmFsICYmIGtpbmQgPT0gJ2F0dHJpYnV0ZScpIHsKICAgICAgICAgICAgLy8gRW5zdXJlIGEgU2hhZHlDU1MgdGVtcGxhdGUgc2NvcGVkIHN0eWxlIGlzIG5vdCByZW1vdmVkCiAgICAgICAgICAgIC8vIHdoZW4gYSBjbGFzcyQgYmluZGluZydzIGluaXRpYWwgbGl0ZXJhbCB2YWx1ZSBpcyBzZXQuCiAgICAgICAgICAgIGlmIChuYW1lID09ICdjbGFzcycgJiYgbm9kZS5oYXNBdHRyaWJ1dGUoJ2NsYXNzJykpIHsKICAgICAgICAgICAgICBsaXRlcmFsICs9ICcgJyArIG5vZGUuZ2V0QXR0cmlidXRlKG5hbWUpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKG5hbWUsIGxpdGVyYWwpOwogICAgICAgICAgfQogICAgICAgICAgLy8gQ2xlYXIgYXR0cmlidXRlIGJlZm9yZSByZW1vdmluZywgc2luY2UgSUUgd29uJ3QgYWxsb3cgcmVtb3ZpbmcKICAgICAgICAgIC8vIGB2YWx1ZWAgYXR0cmlidXRlIGlmIGl0IHByZXZpb3VzbHkgaGFkIGEgdmFsdWUgKGNhbid0CiAgICAgICAgICAvLyB1bmNvbmRpdGlvbmFsbHkgc2V0ICcnIGJlZm9yZSByZW1vdmluZyBzaW5jZSBhdHRyaWJ1dGVzIHdpdGggYCRgCiAgICAgICAgICAvLyBjYW4ndCBiZSBzZXQgdXNpbmcgc2V0QXR0cmlidXRlKQogICAgICAgICAgaWYgKG5vZGUubG9jYWxOYW1lID09PSAnaW5wdXQnICYmIG9yaWdOYW1lID09PSAndmFsdWUnKSB7CiAgICAgICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKG9yaWdOYW1lLCAnJyk7CiAgICAgICAgICB9CiAgICAgICAgICAvLyBSZW1vdmUgYW5ub3RhdGlvbgogICAgICAgICAgbm9kZS5yZW1vdmVBdHRyaWJ1dGUob3JpZ05hbWUpOwogICAgICAgICAgLy8gQ2FzZSBoYWNrZXJ5OiBhdHRyaWJ1dGVzIGFyZSBsb3dlci1jYXNlLCBidXQgYmluZCB0YXJnZXRzCiAgICAgICAgICAvLyAocHJvcGVydGllcykgYXJlIGNhc2Ugc2Vuc2l0aXZlLiBHYW1iaXQgaXMgdG8gbWFwIGRhc2gtY2FzZSB0bwogICAgICAgICAgLy8gY2FtZWwtY2FzZTogYGZvby1iYXJgIGJlY29tZXMgYGZvb0JhcmAuCiAgICAgICAgICAvLyBBdHRyaWJ1dGUgYmluZGluZ3MgYXJlIGV4Y2VwdGVkLgogICAgICAgICAgaWYgKGtpbmQgPT09ICdwcm9wZXJ0eScpIHsKICAgICAgICAgICAgbmFtZSA9IFBvbHltZXIuQ2FzZU1hcC5kYXNoVG9DYW1lbENhc2UobmFtZSk7CiAgICAgICAgICB9CiAgICAgICAgICBhZGRCaW5kaW5nKHRoaXMsIHRlbXBsYXRlSW5mbywgbm9kZUluZm8sIGtpbmQsIG5hbWUsIHBhcnRzLCBsaXRlcmFsKTsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXR1cm4gc3VwZXIuX3BhcnNlVGVtcGxhdGVOb2RlQXR0cmlidXRlKG5vZGUsIHRlbXBsYXRlSW5mbywgbm9kZUluZm8sIG5hbWUsIHZhbHVlKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBPdmVycmlkZXMgZGVmYXVsdCBgVGVtcGxhdGVTdGFtcGAgaW1wbGVtZW50YXRpb24gdG8gYWRkIHN1cHBvcnQgZm9yCiAgICAgICAqIGJpbmRpbmcgdGhlIHByb3BlcnRpZXMgdGhhdCBhIG5lc3RlZCB0ZW1wbGF0ZSBkZXBlbmRzIG9uIHRvIHRoZSB0ZW1wbGF0ZQogICAgICAgKiBhcyBgX2hvc3RfPHByb3BlcnR5PmAuCiAgICAgICAqCiAgICAgICAqIEBvdmVycmlkZQogICAgICAgKiBAcGFyYW0ge05vZGV9IG5vZGUgTm9kZSB0byBwYXJzZQogICAgICAgKiBAcGFyYW0ge1RlbXBsYXRlSW5mb30gdGVtcGxhdGVJbmZvIFRlbXBsYXRlIG1ldGFkYXRhIGZvciBjdXJyZW50IHRlbXBsYXRlCiAgICAgICAqIEBwYXJhbSB7Tm9kZUluZm99IG5vZGVJbmZvIE5vZGUgbWV0YWRhdGEgZm9yIGN1cnJlbnQgdGVtcGxhdGUgbm9kZQogICAgICAgKiBAcmV0dXJuIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIHZpc2l0ZWQgbm9kZSBhZGRlZCBub2RlLXNwZWNpZmljCiAgICAgICAqICAgbWV0YWRhdGEgdG8gYG5vZGVJbmZvYAogICAgICAgKiBAcHJvdGVjdGVkCiAgICAgICAqIEBzdXBwcmVzcyB7bWlzc2luZ1Byb3BlcnRpZXN9IEludGVyZmFjZXMgaW4gY2xvc3VyZSBkbyBub3QgaW5oZXJpdCBzdGF0aWNzLCBidXQgY2xhc3NlcyBkbwogICAgICAgKi8KICAgICAgc3RhdGljIF9wYXJzZVRlbXBsYXRlTmVzdGVkVGVtcGxhdGUobm9kZSwgdGVtcGxhdGVJbmZvLCBub2RlSW5mbykgewogICAgICAgIGxldCBub3RlZCA9IHN1cGVyLl9wYXJzZVRlbXBsYXRlTmVzdGVkVGVtcGxhdGUobm9kZSwgdGVtcGxhdGVJbmZvLCBub2RlSW5mbyk7CiAgICAgICAgLy8gTWVyZ2UgaG9zdCBwcm9wcyBpbnRvIG91dGVyIHRlbXBsYXRlIGFuZCBhZGQgYmluZGluZ3MKICAgICAgICBsZXQgaG9zdFByb3BzID0gbm9kZUluZm8udGVtcGxhdGVJbmZvLmhvc3RQcm9wczsKICAgICAgICBsZXQgbW9kZSA9ICd7JzsKICAgICAgICBmb3IgKGxldCBzb3VyY2UgaW4gaG9zdFByb3BzKSB7CiAgICAgICAgICBsZXQgcGFydHMgPSBbeyBtb2RlLCBzb3VyY2UsIGRlcGVuZGVuY2llczogW3NvdXJjZV0gfV07CiAgICAgICAgICBhZGRCaW5kaW5nKHRoaXMsIHRlbXBsYXRlSW5mbywgbm9kZUluZm8sICdwcm9wZXJ0eScsICdfaG9zdF8nICsgc291cmNlLCBwYXJ0cyk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBub3RlZDsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIENhbGxlZCB0byBwYXJzZSB0ZXh0IGluIGEgdGVtcGxhdGUgKGVpdGhlciBhdHRyaWJ1dGUgdmFsdWVzIG9yCiAgICAgICAqIHRleHRDb250ZW50KSBpbnRvIGJpbmRpbmcgbWV0YWRhdGEuCiAgICAgICAqCiAgICAgICAqIEFueSBvdmVycmlkZXMgb2YgdGhpcyBtZXRob2Qgc2hvdWxkIHJldHVybiBhbiBhcnJheSBvZiBiaW5kaW5nIHBhcnQKICAgICAgICogbWV0YWRhdGEgIHJlcHJlc2VudGluZyBvbmUgb3IgbW9yZSBiaW5kaW5ncyBmb3VuZCBpbiB0aGUgcHJvdmlkZWQgdGV4dAogICAgICAgKiBhbmQgYW55ICJsaXRlcmFsIiB0ZXh0IGluIGJldHdlZW4uICBBbnkgbm9uLWxpdGVyYWwgcGFydHMgd2lsbCBiZSBwYXNzZWQKICAgICAgICogdG8gYF9ldmFsdWF0ZUJpbmRpbmdgIHdoZW4gYW55IGRlcGVuZGVuY2llcyBjaGFuZ2UuICBUaGUgb25seSByZXF1aXJlZAogICAgICAgKiBmaWVsZHMgb2YgZWFjaCAicGFydCIgaW4gdGhlIHJldHVybmVkIGFycmF5IGFyZSBhcyBmb2xsb3dzOgogICAgICAgKgogICAgICAgKiAtIGBkZXBlbmRlbmNpZXNgIC0gQXJyYXkgY29udGFpbmluZyB0cmlnZ2VyIG1ldGFkYXRhIGZvciBlYWNoIHByb3BlcnR5CiAgICAgICAqICAgdGhhdCBzaG91bGQgdHJpZ2dlciB0aGUgYmluZGluZyB0byB1cGRhdGUKICAgICAgICogLSBgbGl0ZXJhbGAgLSBTdHJpbmcgY29udGFpbmluZyB0ZXh0IGlmIHRoZSBwYXJ0IHJlcHJlc2VudHMgYSBsaXRlcmFsOwogICAgICAgKiAgIGluIHRoaXMgY2FzZSBubyBgZGVwZW5kZW5jaWVzYCBhcmUgbmVlZGVkCiAgICAgICAqCiAgICAgICAqIEFkZGl0aW9uYWwgbWV0YWRhdGEgZm9yIHVzZSBieSBgX2V2YWx1YXRlQmluZGluZ2AgbWF5IGJlIHByb3ZpZGVkIGluCiAgICAgICAqIGVhY2ggcGFydCBvYmplY3QgYXMgbmVlZGVkLgogICAgICAgKgogICAgICAgKiBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBoYW5kbGVzIHRoZSBmb2xsb3dpbmcgdHlwZXMgb2YgYmluZGluZ3MKICAgICAgICogKG9uZSBvciBtb3JlIG1heSBiZSBpbnRlcm1peGVkIHdpdGggbGl0ZXJhbCBzdHJpbmdzKToKICAgICAgICogLSBQcm9wZXJ0eSBiaW5kaW5nOiBgW1twcm9wXV1gCiAgICAgICAqIC0gUGF0aCBiaW5kaW5nOiBgW1tvYmplY3QucHJvcF1dYAogICAgICAgKiAtIE5lZ2F0ZWQgcHJvcGVydHkgb3IgcGF0aCBiaW5kaW5nczogYFtbIXByb3BdXWAgb3IgYFtbIW9iamVjdC5wcm9wXV1gCiAgICAgICAqIC0gVHdvLXdheSBwcm9wZXJ0eSBvciBwYXRoIGJpbmRpbmdzIChzdXBwb3J0cyBuZWdhdGlvbik6CiAgICAgICAqICAgYHt7cHJvcH19YCwgYHt7b2JqZWN0LnByb3B9fWAsIGB7eyFwcm9wfX1gIG9yIGB7eyFvYmplY3QucHJvcH19YAogICAgICAgKiAtIElubGluZSBjb21wdXRlZCBtZXRob2QgKHN1cHBvcnRzIG5lZ2F0aW9uKToKICAgICAgICogICBgW1tjb21wdXRlKGEsICdsaXRlcmFsJywgYildXWAsIGBbWyFjb21wdXRlKGEsICdsaXRlcmFsJywgYildXWAKICAgICAgICoKICAgICAgICogVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gdXNlcyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBmb3IgYmVzdAogICAgICAgKiBwZXJmb3JtYW5jZS4gSG93ZXZlciwgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiB1c2VzIGEgd2hpdGUtbGlzdCBvZgogICAgICAgKiBhbGxvd2VkIGNoYXJhY3RlcnMgaW4gYSBkYXRhLWJpbmRpbmcsIHdoaWNoIGNhdXNlcyBwcm9ibGVtcyBmb3IKICAgICAgICogZGF0YS1iaW5kaW5ncyB0aGF0IGRvIHVzZSBjaGFyYWN0ZXJzIG5vdCBpbiB0aGlzIHdoaXRlLWxpc3QuCiAgICAgICAqCiAgICAgICAqIEluc3RlYWQgb2YgdXBkYXRpbmcgdGhlIHdoaXRlLWxpc3Qgd2l0aCBhbGwgYWxsb3dlZCBjaGFyYWN0ZXJzLAogICAgICAgKiB0aGVyZSBpcyBhIFN0cmljdEJpbmRpbmdQYXJzZXIgKHNlZSBsaWIvbWl4aW5zL3N0cmljdC1iaW5kaW5nLXBhcnNlcikKICAgICAgICogdGhhdCB1c2VzIGEgc3RhdGUgbWFjaGluZSBpbnN0ZWFkLiBUaGlzIHN0YXRlIG1hY2hpbmUgaXMgYWJsZSB0byBoYW5kbGUKICAgICAgICogYWxsIGNoYXJhY3RlcnMuIEhvd2V2ZXIsIGl0IGlzIHNsaWdodGx5IGxlc3MgcGVyZm9ybWFudCwgdGhlcmVmb3JlIHdlCiAgICAgICAqIGV4dHJhY3RlZCBpdCBpbnRvIGEgc2VwYXJhdGUgb3B0aW9uYWwgbWl4aW4uCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IFRleHQgdG8gcGFyc2UgZnJvbSBhdHRyaWJ1dGUgb3IgdGV4dENvbnRlbnQKICAgICAgICogQHBhcmFtIHtPYmplY3R9IHRlbXBsYXRlSW5mbyBDdXJyZW50IHRlbXBsYXRlIG1ldGFkYXRhCiAgICAgICAqIEByZXR1cm4ge0FycmF5PCFCaW5kaW5nUGFydD59IEFycmF5IG9mIGJpbmRpbmcgcGFydCBtZXRhZGF0YQogICAgICAgKiBAcHJvdGVjdGVkCiAgICAgICAqLwogICAgICBzdGF0aWMgX3BhcnNlQmluZGluZ3ModGV4dCwgdGVtcGxhdGVJbmZvKSB7CiAgICAgICAgbGV0IHBhcnRzID0gW107CiAgICAgICAgbGV0IGxhc3RJbmRleCA9IDA7CiAgICAgICAgbGV0IG07CiAgICAgICAgLy8gRXhhbXBsZTogImxpdGVyYWwxe3twcm9wfX1saXRlcmFsMltbIWNvbXB1dGUoZm9vLGJhcildXWZpbmFsIgogICAgICAgIC8vIFJlZ2V4IG1hdGNoZXM6CiAgICAgICAgLy8gICAgICAgIEl0ZXJhdGlvbiAxOiAgSXRlcmF0aW9uIDI6CiAgICAgICAgLy8gbVsxXTogJ3t7JyAgICAgICAgICAnW1snCiAgICAgICAgLy8gbVsyXTogJycgICAgICAgICAgICAnIScKICAgICAgICAvLyBtWzNdOiAncHJvcCcgICAgICAgICdjb21wdXRlKGZvbyxiYXIpJwogICAgICAgIHdoaWxlICgobSA9IGJpbmRpbmdSZWdleC5leGVjKHRleHQpKSAhPT0gbnVsbCkgewogICAgICAgICAgLy8gQWRkIGxpdGVyYWwgcGFydAogICAgICAgICAgaWYgKG0uaW5kZXggPiBsYXN0SW5kZXgpIHsKICAgICAgICAgICAgcGFydHMucHVzaCh7bGl0ZXJhbDogdGV4dC5zbGljZShsYXN0SW5kZXgsIG0uaW5kZXgpfSk7CiAgICAgICAgICB9CiAgICAgICAgICAvLyBBZGQgYmluZGluZyBwYXJ0CiAgICAgICAgICBsZXQgbW9kZSA9IG1bMV1bMF07CiAgICAgICAgICBsZXQgbmVnYXRlID0gQm9vbGVhbihtWzJdKTsKICAgICAgICAgIGxldCBzb3VyY2UgPSBtWzNdLnRyaW0oKTsKICAgICAgICAgIGxldCBjdXN0b21FdmVudCA9IGZhbHNlLCBub3RpZnlFdmVudCA9ICcnLCBjb2xvbiA9IC0xOwogICAgICAgICAgaWYgKG1vZGUgPT0gJ3snICYmIChjb2xvbiA9IHNvdXJjZS5pbmRleE9mKCc6OicpKSA+IDApIHsKICAgICAgICAgICAgbm90aWZ5RXZlbnQgPSBzb3VyY2Uuc3Vic3RyaW5nKGNvbG9uICsgMik7CiAgICAgICAgICAgIHNvdXJjZSA9IHNvdXJjZS5zdWJzdHJpbmcoMCwgY29sb24pOwogICAgICAgICAgICBjdXN0b21FdmVudCA9IHRydWU7CiAgICAgICAgICB9CiAgICAgICAgICBsZXQgc2lnbmF0dXJlID0gcGFyc2VNZXRob2Qoc291cmNlKTsKICAgICAgICAgIGxldCBkZXBlbmRlbmNpZXMgPSBbXTsKICAgICAgICAgIGlmIChzaWduYXR1cmUpIHsKICAgICAgICAgICAgLy8gSW5saW5lIGNvbXB1dGVkIGZ1bmN0aW9uCiAgICAgICAgICAgIGxldCB7YXJncywgbWV0aG9kTmFtZX0gPSBzaWduYXR1cmU7CiAgICAgICAgICAgIGZvciAobGV0IGk9MDsgaTxhcmdzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgbGV0IGFyZyA9IGFyZ3NbaV07CiAgICAgICAgICAgICAgaWYgKCFhcmcubGl0ZXJhbCkgewogICAgICAgICAgICAgICAgZGVwZW5kZW5jaWVzLnB1c2goYXJnKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgbGV0IGR5bmFtaWNGbnMgPSB0ZW1wbGF0ZUluZm8uZHluYW1pY0ZuczsKICAgICAgICAgICAgaWYgKGR5bmFtaWNGbnMgJiYgZHluYW1pY0Zuc1ttZXRob2ROYW1lXSB8fCBzaWduYXR1cmUuc3RhdGljKSB7CiAgICAgICAgICAgICAgZGVwZW5kZW5jaWVzLnB1c2gobWV0aG9kTmFtZSk7CiAgICAgICAgICAgICAgc2lnbmF0dXJlLmR5bmFtaWNGbiA9IHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIC8vIFByb3BlcnR5IG9yIHBhdGgKICAgICAgICAgICAgZGVwZW5kZW5jaWVzLnB1c2goc291cmNlKTsKICAgICAgICAgIH0KICAgICAgICAgIHBhcnRzLnB1c2goewogICAgICAgICAgICBzb3VyY2UsIG1vZGUsIG5lZ2F0ZSwgY3VzdG9tRXZlbnQsIHNpZ25hdHVyZSwgZGVwZW5kZW5jaWVzLAogICAgICAgICAgICBldmVudDogbm90aWZ5RXZlbnQKICAgICAgICAgIH0pOwogICAgICAgICAgbGFzdEluZGV4ID0gYmluZGluZ1JlZ2V4Lmxhc3RJbmRleDsKICAgICAgICB9CiAgICAgICAgLy8gQWRkIGEgZmluYWwgbGl0ZXJhbCBwYXJ0CiAgICAgICAgaWYgKGxhc3RJbmRleCAmJiBsYXN0SW5kZXggPCB0ZXh0Lmxlbmd0aCkgewogICAgICAgICAgbGV0IGxpdGVyYWwgPSB0ZXh0LnN1YnN0cmluZyhsYXN0SW5kZXgpOwogICAgICAgICAgaWYgKGxpdGVyYWwpIHsKICAgICAgICAgICAgcGFydHMucHVzaCh7CiAgICAgICAgICAgICAgbGl0ZXJhbDogbGl0ZXJhbAogICAgICAgICAgICB9KTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKHBhcnRzLmxlbmd0aCkgewogICAgICAgICAgcmV0dXJuIHBhcnRzOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBDYWxsZWQgdG8gZXZhbHVhdGUgYSBwcmV2aW91c2x5IHBhcnNlZCBiaW5kaW5nIHBhcnQgYmFzZWQgb24gYSBzZXQgb2YKICAgICAgICogb25lIG9yIG1vcmUgY2hhbmdlZCBkZXBlbmRlbmNpZXMuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7dGhpc30gaW5zdCBFbGVtZW50IHRoYXQgc2hvdWxkIGJlIHVzZWQgYXMgc2NvcGUgZm9yCiAgICAgICAqICAgYmluZGluZyBkZXBlbmRlbmNpZXMKICAgICAgICogQHBhcmFtIHtCaW5kaW5nUGFydH0gcGFydCBCaW5kaW5nIHBhcnQgbWV0YWRhdGEKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHBhdGggUHJvcGVydHkvcGF0aCB0aGF0IHRyaWdnZXJlZCB0aGlzIGVmZmVjdAogICAgICAgKiBAcGFyYW0ge09iamVjdH0gcHJvcHMgQmFnIG9mIGN1cnJlbnQgcHJvcGVydHkgY2hhbmdlcwogICAgICAgKiBAcGFyYW0ge09iamVjdH0gb2xkUHJvcHMgQmFnIG9mIHByZXZpb3VzIHZhbHVlcyBmb3IgY2hhbmdlZCBwcm9wZXJ0aWVzCiAgICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gaGFzUGF0aHMgVHJ1ZSB3aXRoIGBwcm9wc2AgY29udGFpbnMgb25lIG9yIG1vcmUgcGF0aHMKICAgICAgICogQHJldHVybiB7Kn0gVmFsdWUgdGhlIGJpbmRpbmcgcGFydCBldmFsdWF0ZWQgdG8KICAgICAgICogQHByb3RlY3RlZAogICAgICAgKi8KICAgICAgc3RhdGljIF9ldmFsdWF0ZUJpbmRpbmcoaW5zdCwgcGFydCwgcGF0aCwgcHJvcHMsIG9sZFByb3BzLCBoYXNQYXRocykgewogICAgICAgIGxldCB2YWx1ZTsKICAgICAgICBpZiAocGFydC5zaWduYXR1cmUpIHsKICAgICAgICAgIHZhbHVlID0gcnVuTWV0aG9kRWZmZWN0KGluc3QsIHBhdGgsIHByb3BzLCBvbGRQcm9wcywgcGFydC5zaWduYXR1cmUpOwogICAgICAgIH0gZWxzZSBpZiAocGF0aCAhPSBwYXJ0LnNvdXJjZSkgewogICAgICAgICAgdmFsdWUgPSBQb2x5bWVyLlBhdGguZ2V0KGluc3QsIHBhcnQuc291cmNlKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgaWYgKGhhc1BhdGhzICYmIFBvbHltZXIuUGF0aC5pc1BhdGgocGF0aCkpIHsKICAgICAgICAgICAgdmFsdWUgPSBQb2x5bWVyLlBhdGguZ2V0KGluc3QsIHBhdGgpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdmFsdWUgPSBpbnN0Ll9fZGF0YVtwYXRoXTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKHBhcnQubmVnYXRlKSB7CiAgICAgICAgICB2YWx1ZSA9ICF2YWx1ZTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHZhbHVlOwogICAgICB9CgogICAgfQoKICAgIC8vIG1ha2UgYSB0eXBpbmcgZm9yIGNsb3N1cmUgOlAKICAgIFByb3BlcnR5RWZmZWN0c1R5cGUgPSBQcm9wZXJ0eUVmZmVjdHM7CgogICAgcmV0dXJuIFByb3BlcnR5RWZmZWN0czsKICB9KTsKCiAgLyoqCiAgICogSGVscGVyIGFwaSBmb3IgZW5xdWV1aW5nIGNsaWVudCBkb20gY3JlYXRlZCBieSBhIGhvc3QgZWxlbWVudC4KICAgKgogICAqIEJ5IGRlZmF1bHQgZWxlbWVudHMgYXJlIGZsdXNoZWQgdmlhIGBfZmx1c2hQcm9wZXJ0aWVzYCB3aGVuCiAgICogYGNvbm5lY3RlZENhbGxiYWNrYCBpcyBjYWxsZWQuIEVsZW1lbnRzIGF0dGFjaCB0aGVpciBjbGllbnQgZG9tIHRvCiAgICogdGhlbXNlbHZlcyBhdCBgcmVhZHlgIHRpbWUgd2hpY2ggcmVzdWx0cyBmcm9tIHRoaXMgZmlyc3QgZmx1c2guCiAgICogVGhpcyBwcm92aWRlcyBhbiBvcmRlcmluZyBndWFyYW50ZWUgdGhhdCB0aGUgY2xpZW50IGRvbSBhbiBlbGVtZW50CiAgICogY3JlYXRlcyBpcyBmbHVzaGVkIGJlZm9yZSB0aGUgZWxlbWVudCBpdHNlbGYgKGkuZS4gY2xpZW50IGByZWFkeWAKICAgKiBmaXJlcyBiZWZvcmUgaG9zdCBgcmVhZHlgKS4KICAgKgogICAqIEhvd2V2ZXIsIGlmIGBfZmx1c2hQcm9wZXJ0aWVzYCBpcyBjYWxsZWQgKmJlZm9yZSogYW4gZWxlbWVudCBpcyBjb25uZWN0ZWQsCiAgICogYXMgZm9yIGV4YW1wbGUgYFRlbXBsYXRpemVgIGRvZXMsIHRoaXMgb3JkZXJpbmcgZ3VhcmFudGVlIGNhbm5vdCBiZQogICAqIHNhdGlzZmllZCBiZWNhdXNlIG5vIGVsZW1lbnRzIGFyZSBjb25uZWN0ZWQuIChOb3RlOiBCb3VuZCBlbGVtZW50cyB0aGF0CiAgICogcmVjZWl2ZSBkYXRhIGRvIGJlY29tZSBlbnF1ZXVlZCBjbGllbnRzIGFuZCBhcmUgcHJvcGVybHkgb3JkZXJlZCBidXQKICAgKiB1bmJvdW5kIGVsZW1lbnRzIGFyZSBub3QuKQogICAqCiAgICogVG8gbWFpbnRhaW4gdGhlIGRlc2lyZWQgImNsaWVudCBiZWZvcmUgaG9zdCIgb3JkZXJpbmcgZ3VhcmFudGVlIGZvciB0aGlzCiAgICogY2FzZSB3ZSByZWx5IG9uIHRoZSAiaG9zdCBzdGFjay4gQ2xpZW50IG5vZGVzIHJlZ2lzdGVycyB0aGVtc2VsdmVzIHdpdGgKICAgKiB0aGUgY3JlYXRpbmcgaG9zdCBlbGVtZW50IHdoZW4gY3JlYXRlZC4gVGhpcyBlbnN1cmVzIHRoYXQgYWxsIGNsaWVudCBkb20KICAgKiBpcyByZWFkaWVkIGluIHRoZSBwcm9wZXIgb3JkZXIsIG1haW50YWluaW5nIHRoZSBkZXNpcmVkIGd1YXJhbnRlZS4KICAgKgogICAqIEBwcml2YXRlCiAgICovCiAgbGV0IGhvc3RTdGFjayA9IHsKCiAgICBzdGFjazogW10sCgogICAgLyoqCiAgICAgKiBAcGFyYW0geyp9IGluc3QgSW5zdGFuY2UgdG8gYWRkIHRvIGhvc3RTdGFjawogICAgICogQHJldHVybiB7dm9pZH0KICAgICAqIEB0aGlzIHtob3N0U3RhY2t9CiAgICAgKi8KICAgIHJlZ2lzdGVySG9zdChpbnN0KSB7CiAgICAgIGlmICh0aGlzLnN0YWNrLmxlbmd0aCkgewogICAgICAgIGxldCBob3N0ID0gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aC0xXTsKICAgICAgICBob3N0Ll9lbnF1ZXVlQ2xpZW50KGluc3QpOwogICAgICB9CiAgICB9LAoKICAgIC8qKgogICAgICogQHBhcmFtIHsqfSBpbnN0IEluc3RhbmNlIHRvIGJlZ2luIGhvc3RpbmcKICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgKiBAdGhpcyB7aG9zdFN0YWNrfQogICAgICovCiAgICBiZWdpbkhvc3RpbmcoaW5zdCkgewogICAgICB0aGlzLnN0YWNrLnB1c2goaW5zdCk7CiAgICB9LAoKICAgIC8qKgogICAgICogQHBhcmFtIHsqfSBpbnN0IEluc3RhbmNlIHRvIGVuZCBob3N0aW5nCiAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICogQHRoaXMge2hvc3RTdGFja30KICAgICAqLwogICAgZW5kSG9zdGluZyhpbnN0KSB7CiAgICAgIGxldCBzdGFja0xlbiA9IHRoaXMuc3RhY2subGVuZ3RoOwogICAgICBpZiAoc3RhY2tMZW4gJiYgdGhpcy5zdGFja1tzdGFja0xlbi0xXSA9PSBpbnN0KSB7CiAgICAgICAgdGhpcy5zdGFjay5wb3AoKTsKICAgICAgfQogICAgfQoKICB9OwoKfSkoKTsKPC9zY3JpcHQ+PHNjcmlwdD4KKGZ1bmN0aW9uKCkgewogICd1c2Ugc3RyaWN0JzsKCiAgLyoqCiAgICogUHJvdmlkZXMgYmFzaWMgdHJhY2tpbmcgb2YgZWxlbWVudCBkZWZpbml0aW9ucyAocmVnaXN0cmF0aW9ucykgYW5kCiAgICogaW5zdGFuY2UgY291bnRzLgogICAqCiAgICogQG5hbWVzcGFjZQogICAqIEBzdW1tYXJ5IFByb3ZpZGVzIGJhc2ljIHRyYWNraW5nIG9mIGVsZW1lbnQgZGVmaW5pdGlvbnMgKHJlZ2lzdHJhdGlvbnMpIGFuZAogICAqIGluc3RhbmNlIGNvdW50cy4KICAgKi8KICBQb2x5bWVyLnRlbGVtZXRyeSA9IHsKICAgIC8qKgogICAgICogVG90YWwgbnVtYmVyIG9mIFBvbHltZXIgZWxlbWVudCBpbnN0YW5jZXMgY3JlYXRlZC4KICAgICAqIEB0eXBlIHtudW1iZXJ9CiAgICAgKi8KICAgIGluc3RhbmNlQ291bnQ6IDAsCiAgICAvKioKICAgICAqIEFycmF5IG9mIFBvbHltZXIgZWxlbWVudCBjbGFzc2VzIHRoYXQgaGF2ZSBiZWVuIGZpbmFsaXplZC4KICAgICAqIEB0eXBlIHtBcnJheTxQb2x5bWVyLkVsZW1lbnQ+fQogICAgICovCiAgICByZWdpc3RyYXRpb25zOiBbXSwKICAgIC8qKgogICAgICogQHBhcmFtIHshUG9seW1lckVsZW1lbnRDb25zdHJ1Y3Rvcn0gcHJvdG90eXBlIEVsZW1lbnQgcHJvdG90eXBlIHRvIGxvZwogICAgICogQHRoaXMge3RoaXN9CiAgICAgKiBAcHJpdmF0ZQogICAgICovCiAgICBfcmVnTG9nOiBmdW5jdGlvbihwcm90b3R5cGUpIHsKICAgICAgY29uc29sZS5sb2coJ1snICsgcHJvdG90eXBlLmlzICsgJ106IHJlZ2lzdGVyZWQnKTsKICAgIH0sCiAgICAvKioKICAgICAqIFJlZ2lzdGVycyBhIGNsYXNzIHByb3RvdHlwZSBmb3IgdGVsZW1ldHJ5IHB1cnBvc2VzLgogICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gcHJvdG90eXBlIEVsZW1lbnQgcHJvdG90eXBlIHRvIHJlZ2lzdGVyCiAgICAgKiBAdGhpcyB7dGhpc30KICAgICAqIEBwcm90ZWN0ZWQKICAgICAqLwogICAgcmVnaXN0ZXI6IGZ1bmN0aW9uKHByb3RvdHlwZSkgewogICAgICB0aGlzLnJlZ2lzdHJhdGlvbnMucHVzaChwcm90b3R5cGUpOwogICAgICBQb2x5bWVyLmxvZyAmJiB0aGlzLl9yZWdMb2cocHJvdG90eXBlKTsKICAgIH0sCiAgICAvKioKICAgICAqIExvZ3MgYWxsIGVsZW1lbnRzIHJlZ2lzdGVyZWQgd2l0aCBhbiBgaXNgIHRvIHRoZSBjb25zb2xlLgogICAgICogQHB1YmxpYwogICAgICogQHRoaXMge3RoaXN9CiAgICAgKi8KICAgIGR1bXBSZWdpc3RyYXRpb25zOiBmdW5jdGlvbigpIHsKICAgICAgdGhpcy5yZWdpc3RyYXRpb25zLmZvckVhY2godGhpcy5fcmVnTG9nKTsKICAgIH0KICB9OwoKfSkoKTsKPC9zY3JpcHQ+PHNjcmlwdD4KKGZ1bmN0aW9uKCkgewogICd1c2Ugc3RyaWN0JzsKCiAgLyoqCiAgICogQ3JlYXRlcyBhIGNvcHkgb2YgYHByb3BzYCB3aXRoIGVhY2ggcHJvcGVydHkgbm9ybWFsaXplZCBzdWNoIHRoYXQKICAgKiB1cGdyYWRlZCBpdCBpcyBhbiBvYmplY3Qgd2l0aCBhdCBsZWFzdCBhIHR5cGUgcHJvcGVydHkgeyB0eXBlOiBUeXBlfS4KICAgKgogICAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wcyBQcm9wZXJ0aWVzIHRvIG5vcm1hbGl6ZQogICAqIEByZXR1cm4ge09iamVjdH0gQ29weSBvZiBpbnB1dCBgcHJvcHNgIHdpdGggbm9ybWFsaXplZCBwcm9wZXJ0aWVzIHRoYXQKICAgKiBhcmUgaW4gdGhlIGZvcm0ge3R5cGU6IFR5cGV9CiAgICogQHByaXZhdGUKICAgKi8KICBmdW5jdGlvbiBub3JtYWxpemVQcm9wZXJ0aWVzKHByb3BzKSB7CiAgICBjb25zdCBvdXRwdXQgPSB7fTsKICAgIGZvciAobGV0IHAgaW4gcHJvcHMpIHsKICAgICAgY29uc3QgbyA9IHByb3BzW3BdOwogICAgICBvdXRwdXRbcF0gPSAodHlwZW9mIG8gPT09ICdmdW5jdGlvbicpID8ge3R5cGU6IG99IDogbzsKICAgIH0KICAgIHJldHVybiBvdXRwdXQ7CiAgfQoKICAvKioKICAgKiBNaXhpbiB0aGF0IHByb3ZpZGVzIGEgbWluaW1hbCBzdGFydGluZyBwb2ludCB0byB1c2luZyB0aGUgUHJvcGVydGllc0NoYW5nZWQKICAgKiBtaXhpbiBieSBwcm92aWRpbmcgYSBtZWNoYW5pc20gdG8gZGVjbGFyZSBwcm9wZXJ0aWVzIGluIGEgc3RhdGljCiAgICogZ2V0dGVyIChlLmcuIHN0YXRpYyBnZXQgcHJvcGVydGllcygpIHsgcmV0dXJuIHsgZm9vOiBTdHJpbmcgfSB9KS4gQ2hhbmdlcwogICAqIGFyZSByZXBvcnRlZCB2aWEgdGhlIGBfcHJvcGVydGllc0NoYW5nZWRgIG1ldGhvZC4KICAgKgogICAqIFRoaXMgbWl4aW4gcHJvdmlkZXMgbm8gc3BlY2lmaWMgc3VwcG9ydCBmb3IgcmVuZGVyaW5nLiBVc2VycyBhcmUgZXhwZWN0ZWQKICAgKiB0byBjcmVhdGUgYSBTaGFkb3dSb290IGFuZCBwdXQgY29udGVudCBpbnRvIGl0IGFuZCB1cGRhdGUgaXQgaW4gd2hhdGV2ZXIKICAgKiB3YXkgbWFrZXMgc2Vuc2UuIFRoaXMgY2FuIGJlIGRvbmUgaW4gcmVhY3Rpb24gdG8gcHJvcGVydGllcyBjaGFuZ2luZyBieQogICAqIGltcGxlbWVudGluZyBgX3Byb3BlcnRpZXNDaGFuZ2VkYC4KICAgKgogICAqIEBtaXhpbkZ1bmN0aW9uCiAgICogQHBvbHltZXIKICAgKiBAYXBwbGllc01peGluIFBvbHltZXIuUHJvcGVydGllc0NoYW5nZWQKICAgKiBAbWVtYmVyb2YgUG9seW1lcgogICAqIEBzdW1tYXJ5IE1peGluIHRoYXQgcHJvdmlkZXMgYSBtaW5pbWFsIHN0YXJ0aW5nIHBvaW50IGZvciB1c2luZwogICAqIHRoZSBQcm9wZXJ0aWVzQ2hhbmdlZCBtaXhpbiBieSBwcm92aWRpbmcgYSBkZWNsYXJhdGl2ZSBgcHJvcGVydGllc2Agb2JqZWN0LgogICAqLwogICBQb2x5bWVyLlByb3BlcnRpZXNNaXhpbiA9IFBvbHltZXIuZGVkdXBpbmdNaXhpbihzdXBlckNsYXNzID0+IHsKCiAgICAvKioKICAgICAqIEBjb25zdHJ1Y3RvcgogICAgICogQGV4dGVuZHMge3N1cGVyQ2xhc3N9CiAgICAgKiBAaW1wbGVtZW50cyB7UG9seW1lcl9Qcm9wZXJ0aWVzQ2hhbmdlZH0KICAgICAqIEBwcml2YXRlCiAgICAgKi8KICAgIGNvbnN0IGJhc2UgPSBQb2x5bWVyLlByb3BlcnRpZXNDaGFuZ2VkKHN1cGVyQ2xhc3MpOwoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgc3VwZXIgY2xhc3MgY29uc3RydWN0b3IgZm9yIHRoZSBnaXZlbiBjbGFzcywgaWYgaXQgaXMgYW4KICAgICAqIGluc3RhbmNlIG9mIHRoZSBQcm9wZXJ0aWVzTWl4aW4uCiAgICAgKgogICAgICogQHBhcmFtIHshUHJvcGVydGllc01peGluQ29uc3RydWN0b3J9IGNvbnN0cnVjdG9yIFByb3BlcnRpZXNNaXhpbiBjb25zdHJ1Y3RvcgogICAgICogQHJldHVybiB7UHJvcGVydGllc01peGluQ29uc3RydWN0b3J9IFN1cGVyIGNsYXNzIGNvbnN0cnVjdG9yCiAgICAgKi8KICAgIGZ1bmN0aW9uIHN1cGVyUHJvcGVydGllc0NsYXNzKGNvbnN0cnVjdG9yKSB7CiAgICAgIGNvbnN0IHN1cGVyQ3RvciA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihjb25zdHJ1Y3Rvcik7CgogICAgICAvLyBOb3RlLCB0aGUgYFByb3BlcnRpZXNNaXhpbmAgY2xhc3MgYmVsb3cgb25seSByZWZlcnMgdG8gdGhlIGNsYXNzCiAgICAgIC8vIGdlbmVyYXRlZCBieSB0aGlzIGNhbGwgdG8gdGhlIG1peGluOyB0aGUgaW5zdGFuY2VvZiB0ZXN0IG9ubHkgd29ya3MKICAgICAgLy8gYmVjYXVzZSB0aGUgbWl4aW4gaXMgZGVkdXBlZCBhbmQgZ3VhcmFudGVlZCBvbmx5IHRvIGFwcGx5IG9uY2UsIGhlbmNlCiAgICAgIC8vIGFsbCBjb25zdHJ1Y3RvcnMgaW4gYSBwcm90byBjaGFpbiB3aWxsIHNlZSB0aGUgc2FtZSBgUHJvcGVydGllc01peGluYAogICAgICByZXR1cm4gKHN1cGVyQ3Rvci5wcm90b3R5cGUgaW5zdGFuY2VvZiBQcm9wZXJ0aWVzTWl4aW4pID8KICAgICAgICAvKiogQHR5cGUge1Byb3BlcnRpZXNNaXhpbkNvbnN0cnVjdG9yfSAqLyAoc3VwZXJDdG9yKSA6IG51bGw7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGEgbWVtb2l6ZWQgdmVyc2lvbiBvZiB0aGUgYHByb3BlcnRpZXNgIG9iamVjdCBmb3IgdGhlCiAgICAgKiBnaXZlbiBjbGFzcy4gUHJvcGVydGllcyBub3QgaW4gb2JqZWN0IGZvcm1hdCBhcmUgY29udmVydGVkIHRvIGF0CiAgICAgKiBsZWFzdCB7dHlwZX0uCiAgICAgKgogICAgICogQHBhcmFtIHtQcm9wZXJ0aWVzTWl4aW5Db25zdHJ1Y3Rvcn0gY29uc3RydWN0b3IgUHJvcGVydGllc01peGluIGNvbnN0cnVjdG9yCiAgICAgKiBAcmV0dXJuIHtPYmplY3R9IE1lbW9pemVkIHByb3BlcnRpZXMgb2JqZWN0CiAgICAgKi8KICAgIGZ1bmN0aW9uIG93blByb3BlcnRpZXMoY29uc3RydWN0b3IpIHsKICAgICAgaWYgKCFjb25zdHJ1Y3Rvci5oYXNPd25Qcm9wZXJ0eShKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCdfX293blByb3BlcnRpZXMnLCBjb25zdHJ1Y3RvcikpKSB7CiAgICAgICAgbGV0IHByb3BzID0gbnVsbDsKCiAgICAgICAgaWYgKGNvbnN0cnVjdG9yLmhhc093blByb3BlcnR5KEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoJ3Byb3BlcnRpZXMnLCBjb25zdHJ1Y3RvcikpKSB7CiAgICAgICAgICBjb25zdCBwcm9wZXJ0aWVzID0gY29uc3RydWN0b3IucHJvcGVydGllczsKICAgICAgICAgIAogICAgICAgICAgaWYgKHByb3BlcnRpZXMpIHsKICAgICAgICAgICAgcHJvcHMgPSBub3JtYWxpemVQcm9wZXJ0aWVzKHByb3BlcnRpZXMpOwogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgY29uc3RydWN0b3IuX19vd25Qcm9wZXJ0aWVzID0gcHJvcHM7CiAgICAgIH0KICAgICAgcmV0dXJuIGNvbnN0cnVjdG9yLl9fb3duUHJvcGVydGllczsKICAgIH0KCiAgICAvKioKICAgICAqIEBwb2x5bWVyCiAgICAgKiBAbWl4aW5DbGFzcwogICAgICogQGV4dGVuZHMge2Jhc2V9CiAgICAgKiBAaW1wbGVtZW50cyB7UG9seW1lcl9Qcm9wZXJ0aWVzTWl4aW59CiAgICAgKiBAdW5yZXN0cmljdGVkCiAgICAgKi8KICAgIGNsYXNzIFByb3BlcnRpZXNNaXhpbiBleHRlbmRzIGJhc2UgewoKICAgICAgLyoqCiAgICAgICAqIEltcGxlbWVudHMgc3RhbmRhcmQgY3VzdG9tIGVsZW1lbnRzIGdldHRlciB0byBvYnNlcnZlcyB0aGUgYXR0cmlidXRlcwogICAgICAgKiBsaXN0ZWQgaW4gYHByb3BlcnRpZXNgLgogICAgICAgKiBAc3VwcHJlc3Mge21pc3NpbmdQcm9wZXJ0aWVzfSBJbnRlcmZhY2VzIGluIGNsb3N1cmUgZG8gbm90IGluaGVyaXQgc3RhdGljcywgYnV0IGNsYXNzZXMgZG8KICAgICAgICovCiAgICAgIHN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCkgewogICAgICAgIGlmICghdGhpcy5oYXNPd25Qcm9wZXJ0eSgnX19vYnNlcnZlZEF0dHJpYnV0ZXMnKSkgewogICAgICAgICAgUG9seW1lci50ZWxlbWV0cnkucmVnaXN0ZXIodGhpcy5wcm90b3R5cGUpOwogICAgICAgICAgY29uc3QgcHJvcHMgPSB0aGlzLl9wcm9wZXJ0aWVzOwogICAgICAgICAgdGhpcy5fX29ic2VydmVkQXR0cmlidXRlcyA9IHByb3BzID8gT2JqZWN0LmtleXMocHJvcHMpLm1hcChwID0+IHRoaXMuYXR0cmlidXRlTmFtZUZvclByb3BlcnR5KHApKSA6IFtdOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdGhpcy5fX29ic2VydmVkQXR0cmlidXRlczsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIEZpbmFsaXplcyBhbiBlbGVtZW50IGRlZmluaXRpb24sIGluY2x1ZGluZyBlbnN1cmluZyBhbnkgc3VwZXIgY2xhc3NlcwogICAgICAgKiBhcmUgYWxzbyBmaW5hbGl6ZWQuIFRoaXMgaW5jbHVkZXMgZW5zdXJpbmcgcHJvcGVydHkKICAgICAgICogYWNjZXNzb3JzIGV4aXN0IG9uIHRoZSBlbGVtZW50IHByb3RvdHlwZS4gVGhpcyBtZXRob2QgY2FsbHMKICAgICAgICogYF9maW5hbGl6ZUNsYXNzYCB0byBmaW5hbGl6ZSBlYWNoIGNvbnN0cnVjdG9yIGluIHRoZSBwcm90b3R5cGUgY2hhaW4uCiAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAqLwogICAgICBzdGF0aWMgZmluYWxpemUoKSB7CiAgICAgICAgaWYgKCF0aGlzLmhhc093blByb3BlcnR5KEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoJ19fZmluYWxpemVkJywgdGhpcykpKSB7CiAgICAgICAgICBjb25zdCBzdXBlckN0b3IgPSBzdXBlclByb3BlcnRpZXNDbGFzcygvKiogQHR5cGUge1Byb3BlcnRpZXNNaXhpbkNvbnN0cnVjdG9yfSAqLyh0aGlzKSk7CiAgICAgICAgICBpZiAoc3VwZXJDdG9yKSB7CiAgICAgICAgICAgIHN1cGVyQ3Rvci5maW5hbGl6ZSgpOwogICAgICAgICAgfQogICAgICAgICAgdGhpcy5fX2ZpbmFsaXplZCA9IHRydWU7CiAgICAgICAgICB0aGlzLl9maW5hbGl6ZUNsYXNzKCk7CiAgICAgICAgfQogICAgICB9CgogICAgICAvKioKICAgICAgICogRmluYWxpemUgYW4gZWxlbWVudCBjbGFzcy4gVGhpcyBpbmNsdWRlcyBlbnN1cmluZyBwcm9wZXJ0eQogICAgICAgKiBhY2Nlc3NvcnMgZXhpc3Qgb24gdGhlIGVsZW1lbnQgcHJvdG90eXBlLiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkKICAgICAgICogYGZpbmFsaXplYCBhbmQgZmluYWxpemVzIHRoZSBjbGFzcyBjb25zdHJ1Y3Rvci4KICAgICAgICoKICAgICAgICogQHByb3RlY3RlZAogICAgICAgKi8KICAgICAgc3RhdGljIF9maW5hbGl6ZUNsYXNzKCkgewogICAgICAgIGNvbnN0IHByb3BzID0gb3duUHJvcGVydGllcygvKiogQHR5cGUge1Byb3BlcnRpZXNNaXhpbkNvbnN0cnVjdG9yfSAqLyh0aGlzKSk7CiAgICAgICAgaWYgKHByb3BzKSB7CiAgICAgICAgICB0aGlzLmNyZWF0ZVByb3BlcnRpZXMocHJvcHMpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIFJldHVybnMgYSBtZW1vaXplZCB2ZXJzaW9uIG9mIGFsbCBwcm9wZXJ0aWVzLCBpbmNsdWRpbmcgdGhvc2UgaW5oZXJpdGVkCiAgICAgICAqIGZyb20gc3VwZXIgY2xhc3Nlcy4gUHJvcGVydGllcyBub3QgaW4gb2JqZWN0IGZvcm1hdCBhcmUgY29udmVydGVkIHRvCiAgICAgICAqIGF0IGxlYXN0IHt0eXBlfS4KICAgICAgICoKICAgICAgICogQHJldHVybiB7T2JqZWN0fSBPYmplY3QgY29udGFpbmluZyBwcm9wZXJ0aWVzIGZvciB0aGlzIGNsYXNzCiAgICAgICAqIEBwcm90ZWN0ZWQKICAgICAgICovCiAgICAgIHN0YXRpYyBnZXQgX3Byb3BlcnRpZXMoKSB7CiAgICAgICAgaWYgKCF0aGlzLmhhc093blByb3BlcnR5KAogICAgICAgICAgSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgnX19wcm9wZXJ0aWVzJywgdGhpcykpKSB7CiAgICAgICAgICBjb25zdCBzdXBlckN0b3IgPSBzdXBlclByb3BlcnRpZXNDbGFzcygvKiogQHR5cGUge1Byb3BlcnRpZXNNaXhpbkNvbnN0cnVjdG9yfSAqLyh0aGlzKSk7CiAgICAgICAgICB0aGlzLl9fcHJvcGVydGllcyA9IE9iamVjdC5hc3NpZ24oe30sCiAgICAgICAgICAgIHN1cGVyQ3RvciAmJiBzdXBlckN0b3IuX3Byb3BlcnRpZXMsCiAgICAgICAgICAgIG93blByb3BlcnRpZXMoLyoqIEB0eXBlIHtQcm9wZXJ0aWVzTWl4aW5Db25zdHJ1Y3Rvcn0gKi8odGhpcykpKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRoaXMuX19wcm9wZXJ0aWVzOwogICAgICB9CgogICAgICAvKioKICAgICAgICogT3ZlcnJpZGVzIGBQcm9wZXJ0aWVzQ2hhbmdlZGAgbWV0aG9kIHRvIHJldHVybiB0eXBlIHNwZWNpZmllZCBpbiB0aGUKICAgICAgICogc3RhdGljIGBwcm9wZXJ0aWVzYCBvYmplY3QgZm9yIHRoZSBnaXZlbiBwcm9wZXJ0eS4KICAgICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgTmFtZSBvZiBwcm9wZXJ0eQogICAgICAgKiBAcmV0dXJuIHsqfSBUeXBlIHRvIHdoaWNoIHRvIGRlc2VyaWFsaXplIGF0dHJpYnV0ZQogICAgICAgKgogICAgICAgKiBAcHJvdGVjdGVkCiAgICAgICAqLwogICAgICBzdGF0aWMgdHlwZUZvclByb3BlcnR5KG5hbWUpIHsKICAgICAgICBjb25zdCBpbmZvID0gdGhpcy5fcHJvcGVydGllc1tuYW1lXTsKICAgICAgICByZXR1cm4gaW5mbyAmJiBpbmZvLnR5cGU7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBPdmVycmlkZXMgYFByb3BlcnRpZXNDaGFuZ2VkYCBtZXRob2QgYW5kIGFkZHMgYSBjYWxsIHRvCiAgICAgICAqIGBmaW5hbGl6ZWAgd2hpY2ggbGF6aWx5IGNvbmZpZ3VyZXMgdGhlIGVsZW1lbnQncyBwcm9wZXJ0eSBhY2Nlc3NvcnMuCiAgICAgICAqIEBvdmVycmlkZQogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKi8KICAgICAgX2luaXRpYWxpemVQcm9wZXJ0aWVzKCkgewogICAgICAgIFBvbHltZXIudGVsZW1ldHJ5Lmluc3RhbmNlQ291bnQrKzsKICAgICAgICB0aGlzLmNvbnN0cnVjdG9yLmZpbmFsaXplKCk7CiAgICAgICAgc3VwZXIuX2luaXRpYWxpemVQcm9wZXJ0aWVzKCk7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBDYWxsZWQgd2hlbiB0aGUgZWxlbWVudCBpcyBhZGRlZCB0byBhIGRvY3VtZW50LgogICAgICAgKiBDYWxscyBgX2VuYWJsZVByb3BlcnRpZXNgIHRvIHR1cm4gb24gcHJvcGVydHkgc3lzdGVtIGZyb20KICAgICAgICogYFByb3BlcnRpZXNDaGFuZ2VkYC4KICAgICAgICogQHN1cHByZXNzIHttaXNzaW5nUHJvcGVydGllc30gU3VwZXIgbWF5IG9yIG1heSBub3QgaW1wbGVtZW50IHRoZSBjYWxsYmFjawogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKi8KICAgICAgY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICAgICAgaWYgKHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKSB7CiAgICAgICAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpOwogICAgICAgIH0KICAgICAgICB0aGlzLl9lbmFibGVQcm9wZXJ0aWVzKCk7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBDYWxsZWQgd2hlbiB0aGUgZWxlbWVudCBpcyByZW1vdmVkIGZyb20gYSBkb2N1bWVudAogICAgICAgKiBAc3VwcHJlc3Mge21pc3NpbmdQcm9wZXJ0aWVzfSBTdXBlciBtYXkgb3IgbWF5IG5vdCBpbXBsZW1lbnQgdGhlIGNhbGxiYWNrCiAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAqLwogICAgICBkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHsKICAgICAgICBpZiAoc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2spIHsKICAgICAgICAgIHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7CiAgICAgICAgfQogICAgICB9CgogICAgfQoKICAgIHJldHVybiBQcm9wZXJ0aWVzTWl4aW47CgogIH0pOwoKfSkoKTsKCjwvc2NyaXB0PjxzY3JpcHQ+CihmdW5jdGlvbigpIHsKICAndXNlIHN0cmljdCc7CgogIGNvbnN0IGJ1aWx0Q1NTID0gd2luZG93LlNoYWR5Q1NTICYmIHdpbmRvdy5TaGFkeUNTU1snY3NzQnVpbGQnXTsKCiAgLyoqCiAgICogRWxlbWVudCBjbGFzcyBtaXhpbiB0aGF0IHByb3ZpZGVzIHRoZSBjb3JlIEFQSSBmb3IgUG9seW1lcidzIG1ldGEtcHJvZ3JhbW1pbmcKICAgKiBmZWF0dXJlcyBpbmNsdWRpbmcgdGVtcGxhdGUgc3RhbXBpbmcsIGRhdGEtYmluZGluZywgYXR0cmlidXRlIGRlc2VyaWFsaXphdGlvbiwKICAgKiBhbmQgcHJvcGVydHkgY2hhbmdlIG9ic2VydmF0aW9uLgogICAqCiAgICogU3ViY2xhc3NlcnMgbWF5IHByb3ZpZGUgdGhlIGZvbGxvd2luZyBzdGF0aWMgZ2V0dGVycyB0byByZXR1cm4gbWV0YWRhdGEKICAgKiB1c2VkIHRvIGNvbmZpZ3VyZSBQb2x5bWVyJ3MgZmVhdHVyZXMgZm9yIHRoZSBjbGFzczoKICAgKgogICAqIC0gYHN0YXRpYyBnZXQgaXMoKWA6IFdoZW4gdGhlIHRlbXBsYXRlIGlzIHByb3ZpZGVkIHZpYSBhIGBkb20tbW9kdWxlYCwKICAgKiAgIHVzZXJzIHNob3VsZCByZXR1cm4gdGhlIGBkb20tbW9kdWxlYCBpZCBmcm9tIGEgc3RhdGljIGBpc2AgZ2V0dGVyLiAgSWYKICAgKiAgIG5vIHRlbXBsYXRlIGlzIG5lZWRlZCBvciB0aGUgdGVtcGxhdGUgaXMgcHJvdmlkZWQgZGlyZWN0bHkgdmlhIHRoZQogICAqICAgYHRlbXBsYXRlYCBnZXR0ZXIsIHRoZXJlIGlzIG5vIG5lZWQgdG8gZGVmaW5lIGBpc2AgZm9yIHRoZSBlbGVtZW50LgogICAqCiAgICogLSBgc3RhdGljIGdldCB0ZW1wbGF0ZSgpYDogVXNlcnMgbWF5IHByb3ZpZGUgdGhlIHRlbXBsYXRlIGRpcmVjdGx5IChhcwogICAqICAgb3Bwb3NlZCB0byB2aWEgYGRvbS1tb2R1bGVgKSBieSBpbXBsZW1lbnRpbmcgYSBzdGF0aWMgYHRlbXBsYXRlYCBnZXR0ZXIuCiAgICogICBUaGUgZ2V0dGVyIG1heSByZXR1cm4gYW4gYEhUTUxUZW1wbGF0ZUVsZW1lbnRgIG9yIGEgc3RyaW5nLCB3aGljaCB3aWxsCiAgICogICBhdXRvbWF0aWNhbGx5IGJlIHBhcnNlZCBpbnRvIGEgdGVtcGxhdGUuCiAgICoKICAgKiAtIGBzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKWA6IFNob3VsZCByZXR1cm4gYW4gb2JqZWN0IGRlc2NyaWJpbmcKICAgKiAgIHByb3BlcnR5LXJlbGF0ZWQgbWV0YWRhdGEgdXNlZCBieSBQb2x5bWVyIGZlYXR1cmVzIChrZXk6IHByb3BlcnR5IG5hbWUKICAgKiAgIHZhbHVlOiBvYmplY3QgY29udGFpbmluZyBwcm9wZXJ0eSBtZXRhZGF0YSkuIFZhbGlkIGtleXMgaW4gcGVyLXByb3BlcnR5CiAgICogICBtZXRhZGF0YSBpbmNsdWRlOgogICAqICAgLSBgdHlwZWAgKFN0cmluZ3xOdW1iZXJ8T2JqZWN0fEFycmF5fC4uLik6IFVzZWQgYnkKICAgKiAgICAgYGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFja2AgdG8gZGV0ZXJtaW5lIGhvdyBzdHJpbmctYmFzZWQgYXR0cmlidXRlcwogICAqICAgICBhcmUgZGVzZXJpYWxpemVkIHRvIEphdmFTY3JpcHQgcHJvcGVydHkgdmFsdWVzLgogICAqICAgLSBgbm90aWZ5YCAoYm9vbGVhbik6IENhdXNlcyBhIGNoYW5nZSBpbiB0aGUgcHJvcGVydHkgdG8gZmlyZSBhCiAgICogICAgIG5vbi1idWJibGluZyBldmVudCBjYWxsZWQgYDxwcm9wZXJ0eT4tY2hhbmdlZGAuIEVsZW1lbnRzIHRoYXQgaGF2ZQogICAqICAgICBlbmFibGVkIHR3by13YXkgYmluZGluZyB0byB0aGUgcHJvcGVydHkgdXNlIHRoaXMgZXZlbnQgdG8gb2JzZXJ2ZSBjaGFuZ2VzLgogICAqICAgLSBgcmVhZE9ubHlgIChib29sZWFuKTogQ3JlYXRlcyBhIGdldHRlciBmb3IgdGhlIHByb3BlcnR5LCBidXQgbm8gc2V0dGVyLgogICAqICAgICBUbyBzZXQgYSByZWFkLW9ubHkgcHJvcGVydHksIHVzZSB0aGUgcHJpdmF0ZSBzZXR0ZXIgbWV0aG9kCiAgICogICAgIGBfc2V0UHJvcGVydHkocHJvcGVydHksIHZhbHVlKWAuCiAgICogICAtIGBvYnNlcnZlcmAgKHN0cmluZyk6IE9ic2VydmVyIG1ldGhvZCBuYW1lIHRoYXQgd2lsbCBiZSBjYWxsZWQgd2hlbgogICAqICAgICB0aGUgcHJvcGVydHkgY2hhbmdlcy4gVGhlIGFyZ3VtZW50cyBvZiB0aGUgbWV0aG9kIGFyZQogICAqICAgICBgKHZhbHVlLCBwcmV2aW91c1ZhbHVlKWAuCiAgICogICAtIGBjb21wdXRlZGAgKHN0cmluZyk6IFN0cmluZyBkZXNjcmliaW5nIG1ldGhvZCBhbmQgZGVwZW5kZW50IHByb3BlcnRpZXMKICAgKiAgICAgZm9yIGNvbXB1dGluZyB0aGUgdmFsdWUgb2YgdGhpcyBwcm9wZXJ0eSAoZS5nLiBgJ2NvbXB1dGVGb28oYmFyLCB6b3QpJ2ApLgogICAqICAgICBDb21wdXRlZCBwcm9wZXJ0aWVzIGFyZSByZWFkLW9ubHkgYnkgZGVmYXVsdCBhbmQgY2FuIG9ubHkgYmUgY2hhbmdlZAogICAqICAgICB2aWEgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgY29tcHV0aW5nIG1ldGhvZC4KICAgKgogICAqIC0gYHN0YXRpYyBnZXQgb2JzZXJ2ZXJzKClgOiBBcnJheSBvZiBzdHJpbmdzIGRlc2NyaWJpbmcgbXVsdGktcHJvcGVydHkKICAgKiAgIG9ic2VydmVyIG1ldGhvZHMgYW5kIHRoZWlyIGRlcGVuZGVudCBwcm9wZXJ0aWVzIChlLmcuCiAgICogICBgJ29ic2VydmVBQkMoYSwgYiwgYyknYCkuCiAgICoKICAgKiBUaGUgYmFzZSBjbGFzcyBwcm92aWRlcyBkZWZhdWx0IGltcGxlbWVudGF0aW9ucyBmb3IgdGhlIGZvbGxvd2luZyBzdGFuZGFyZAogICAqIGN1c3RvbSBlbGVtZW50IGxpZmVjeWNsZSBjYWxsYmFja3M7IHVzZXJzIG1heSBvdmVycmlkZSB0aGVzZSwgYnV0IHNob3VsZAogICAqIGNhbGwgdGhlIHN1cGVyIG1ldGhvZCB0byBlbnN1cmUKICAgKiAtIGBjb25zdHJ1Y3RvcmA6IFJ1biB3aGVuIHRoZSBlbGVtZW50IGlzIGNyZWF0ZWQgb3IgdXBncmFkZWQKICAgKiAtIGBjb25uZWN0ZWRDYWxsYmFja2A6IFJ1biBlYWNoIHRpbWUgdGhlIGVsZW1lbnQgaXMgY29ubmVjdGVkIHRvIHRoZQogICAqICAgZG9jdW1lbnQKICAgKiAtIGBkaXNjb25uZWN0ZWRDYWxsYmFja2A6IFJ1biBlYWNoIHRpbWUgdGhlIGVsZW1lbnQgaXMgZGlzY29ubmVjdGVkIGZyb20KICAgKiAgIHRoZSBkb2N1bWVudAogICAqIC0gYGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFja2A6IFJ1biBlYWNoIHRpbWUgYW4gYXR0cmlidXRlIGluCiAgICogICBgb2JzZXJ2ZWRBdHRyaWJ1dGVzYCBpcyBzZXQgb3IgcmVtb3ZlZCAobm90ZTogdGhpcyBlbGVtZW50J3MgZGVmYXVsdAogICAqICAgYG9ic2VydmVkQXR0cmlidXRlc2AgaW1wbGVtZW50YXRpb24gd2lsbCBhdXRvbWF0aWNhbGx5IHJldHVybiBhbiBhcnJheQogICAqICAgb2YgZGFzaC1jYXNlZCBhdHRyaWJ1dGVzIGJhc2VkIG9uIGBwcm9wZXJ0aWVzYCkKICAgKgogICAqIEBtaXhpbkZ1bmN0aW9uCiAgICogQHBvbHltZXIKICAgKiBAYXBwbGllc01peGluIFBvbHltZXIuUHJvcGVydHlFZmZlY3RzCiAgICogQGFwcGxpZXNNaXhpbiBQb2x5bWVyLlByb3BlcnRpZXNNaXhpbgogICAqIEBtZW1iZXJvZiBQb2x5bWVyCiAgICogQHByb3BlcnR5IHJvb3RQYXRoIHtzdHJpbmd9IFNldCB0byB0aGUgdmFsdWUgb2YgYFBvbHltZXIucm9vdFBhdGhgLAogICAqICAgd2hpY2ggZGVmYXVsdHMgdG8gdGhlIG1haW4gZG9jdW1lbnQgcGF0aAogICAqIEBwcm9wZXJ0eSBpbXBvcnRQYXRoIHtzdHJpbmd9IFNldCB0byB0aGUgdmFsdWUgb2YgdGhlIGNsYXNzJ3Mgc3RhdGljCiAgICogICBgaW1wb3J0UGF0aGAgcHJvcGVydHksIHdoaWNoIGRlZmF1bHRzIHRvIHRoZSBwYXRoIG9mIHRoaXMgZWxlbWVudCdzCiAgICogICBgZG9tLW1vZHVsZWAgKHdoZW4gYGlzYCBpcyB1c2VkKSwgYnV0IGNhbiBiZSBvdmVycmlkZGVuIGZvciBvdGhlcgogICAqICAgaW1wb3J0IHN0cmF0ZWdpZXMuCiAgICogQHN1bW1hcnkgRWxlbWVudCBjbGFzcyBtaXhpbiB0aGF0IHByb3ZpZGVzIHRoZSBjb3JlIEFQSSBmb3IgUG9seW1lcidzCiAgICogbWV0YS1wcm9ncmFtbWluZyBmZWF0dXJlcy4KICAgKi8KICBQb2x5bWVyLkVsZW1lbnRNaXhpbiA9IFBvbHltZXIuZGVkdXBpbmdNaXhpbihiYXNlID0+IHsKCiAgICAvKioKICAgICAqIEBjb25zdHJ1Y3RvcgogICAgICogQGV4dGVuZHMge2Jhc2V9CiAgICAgKiBAaW1wbGVtZW50cyB7UG9seW1lcl9Qcm9wZXJ0eUVmZmVjdHN9CiAgICAgKiBAaW1wbGVtZW50cyB7UG9seW1lcl9Qcm9wZXJ0aWVzTWl4aW59CiAgICAgKiBAcHJpdmF0ZQogICAgICovCiAgICBjb25zdCBwb2x5bWVyRWxlbWVudEJhc2UgPSBQb2x5bWVyLlByb3BlcnRpZXNNaXhpbihQb2x5bWVyLlByb3BlcnR5RWZmZWN0cyhiYXNlKSk7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGEgbGlzdCBvZiBwcm9wZXJ0aWVzIHdpdGggZGVmYXVsdCB2YWx1ZXMuCiAgICAgKiBUaGlzIGxpc3QgaXMgY3JlYXRlZCBhcyBhbiBvcHRpbWl6YXRpb24gc2luY2UgaXQgaXMgYSBzdWJzZXQgb2YKICAgICAqIHRoZSBsaXN0IHJldHVybmVkIGZyb20gYF9wcm9wZXJ0aWVzYC4KICAgICAqIFRoaXMgbGlzdCBpcyB1c2VkIGluIGBfaW5pdGlhbGl6ZVByb3BlcnRpZXNgIHRvIHNldCBwcm9wZXJ0eSBkZWZhdWx0cy4KICAgICAqCiAgICAgKiBAcGFyYW0ge1BvbHltZXJFbGVtZW50Q29uc3RydWN0b3J9IGNvbnN0cnVjdG9yIEVsZW1lbnQgY2xhc3MKICAgICAqIEByZXR1cm4ge1BvbHltZXJFbGVtZW50UHJvcGVydGllc30gRmxhdHRlbmVkIHByb3BlcnRpZXMgZm9yIHRoaXMgY2xhc3MKICAgICAqICAgdGhhdCBoYXZlIGRlZmF1bHQgdmFsdWVzCiAgICAgKiBAcHJpdmF0ZQogICAgICovCiAgICBmdW5jdGlvbiBwcm9wZXJ0eURlZmF1bHRzKGNvbnN0cnVjdG9yKSB7CiAgICAgIGlmICghY29uc3RydWN0b3IuaGFzT3duUHJvcGVydHkoCiAgICAgICAgSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgnX19wcm9wZXJ0eURlZmF1bHRzJywgY29uc3RydWN0b3IpKSkgewogICAgICAgIGNvbnN0cnVjdG9yLl9fcHJvcGVydHlEZWZhdWx0cyA9IG51bGw7CiAgICAgICAgbGV0IHByb3BzID0gY29uc3RydWN0b3IuX3Byb3BlcnRpZXM7CiAgICAgICAgZm9yIChsZXQgcCBpbiBwcm9wcykgewogICAgICAgICAgbGV0IGluZm8gPSBwcm9wc1twXTsKICAgICAgICAgIGlmICgndmFsdWUnIGluIGluZm8pIHsKICAgICAgICAgICAgY29uc3RydWN0b3IuX19wcm9wZXJ0eURlZmF1bHRzID0gY29uc3RydWN0b3IuX19wcm9wZXJ0eURlZmF1bHRzIHx8IHt9OwogICAgICAgICAgICBjb25zdHJ1Y3Rvci5fX3Byb3BlcnR5RGVmYXVsdHNbcF0gPSBpbmZvOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gY29uc3RydWN0b3IuX19wcm9wZXJ0eURlZmF1bHRzOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyBhIG1lbW9pemVkIHZlcnNpb24gb2YgdGhlIGBvYnNlcnZlcnNgIGFycmF5LgogICAgICogQHBhcmFtIHtQb2x5bWVyRWxlbWVudENvbnN0cnVjdG9yfSBjb25zdHJ1Y3RvciBFbGVtZW50IGNsYXNzCiAgICAgKiBAcmV0dXJuIHtBcnJheX0gQXJyYXkgY29udGFpbmluZyBvd24gb2JzZXJ2ZXJzIGZvciB0aGUgZ2l2ZW4gY2xhc3MKICAgICAqIEBwcm90ZWN0ZWQKICAgICAqLwogICAgZnVuY3Rpb24gb3duT2JzZXJ2ZXJzKGNvbnN0cnVjdG9yKSB7CiAgICAgIGlmICghY29uc3RydWN0b3IuaGFzT3duUHJvcGVydHkoCiAgICAgICAgSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgnX19vd25PYnNlcnZlcnMnLCBjb25zdHJ1Y3RvcikpKSB7CiAgICAgICAgICBjb25zdHJ1Y3Rvci5fX293bk9ic2VydmVycyA9CiAgICAgICAgICBjb25zdHJ1Y3Rvci5oYXNPd25Qcm9wZXJ0eShKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCdvYnNlcnZlcnMnLCBjb25zdHJ1Y3RvcikpID8KICAgICAgICAgIC8qKiBAdHlwZSB7UG9seW1lckVsZW1lbnRDb25zdHJ1Y3Rvcn0gKi8gKGNvbnN0cnVjdG9yKS5vYnNlcnZlcnMgOiBudWxsOwogICAgICB9CiAgICAgIHJldHVybiBjb25zdHJ1Y3Rvci5fX293bk9ic2VydmVyczsKICAgIH0KCiAgICAvKioKICAgICAqIENyZWF0ZXMgZWZmZWN0cyBmb3IgYSBwcm9wZXJ0eS4KICAgICAqCiAgICAgKiBOb3RlLCBvbmNlIGEgcHJvcGVydHkgaGFzIGJlZW4gc2V0IHRvCiAgICAgKiBgcmVhZE9ubHlgLCBgY29tcHV0ZWRgLCBgcmVmbGVjdFRvQXR0cmlidXRlYCwgb3IgYG5vdGlmeWAKICAgICAqIHRoZXNlIHZhbHVlcyBtYXkgbm90IGJlIGNoYW5nZWQuIEZvciBleGFtcGxlLCBhIHN1YmNsYXNzIGNhbm5vdAogICAgICogYWx0ZXIgdGhlc2Ugc2V0dGluZ3MuIEhvd2V2ZXIsIGFkZGl0aW9uYWwgYG9ic2VydmVyc2AgbWF5IGJlIGFkZGVkCiAgICAgKiBieSBzdWJjbGFzc2VzLgogICAgICoKICAgICAqIFRoZSBpbmZvIG9iamVjdCBzaG91bGQgY29udGFpbiBwcm9wZXJ0eSBtZXRhZGF0YSBhcyBmb2xsb3dzOgogICAgICoKICAgICAqICogYHR5cGVgOiB7ZnVuY3Rpb259IHR5cGUgdG8gd2hpY2ggYW4gYXR0cmlidXRlIG1hdGNoaW5nIHRoZSBwcm9wZXJ0eQogICAgICogaXMgZGVzZXJpYWxpemVkLiBOb3RlIHRoZSBwcm9wZXJ0eSBpcyBjYW1lbC1jYXNlZCBmcm9tIGEgZGFzaC1jYXNlZAogICAgICogYXR0cmlidXRlLiBGb3IgZXhhbXBsZSwgJ2Zvby1iYXInIGF0dHJpYnV0ZSBpcyBkZXNlcmlhbGl6ZWQgdG8gYQogICAgICogcHJvcGVydHkgbmFtZWQgJ2Zvb0JhcicuCiAgICAgKgogICAgICogKiBgcmVhZE9ubHlgOiB7Ym9vbGVhbn0gY3JlYXRlcyBhIHJlYWRPbmx5IHByb3BlcnR5IGFuZAogICAgICogbWFrZXMgYSBwcml2YXRlIHNldHRlciBmb3IgdGhlIHByaXZhdGUgb2YgdGhlIGZvcm0gJ19zZXRGb28nIGZvciBhCiAgICAgKiBwcm9wZXJ0eSAnZm9vJywKICAgICAqCiAgICAgKiAqIGBjb21wdXRlZGA6IHtzdHJpbmd9IGNyZWF0ZXMgYSBjb21wdXRlZCBwcm9wZXJ0eS4gQSBjb21wdXRlZCBwcm9wZXJ0eQogICAgICogaXMgYWxzbyBhdXRvbWF0aWNhbGx5IHNldCB0byBgcmVhZE9ubHk6IHRydWVgLiBUaGUgdmFsdWUgaXMgY2FsY3VsYXRlZAogICAgICogYnkgcnVubmluZyBhIG1ldGhvZCBhbmQgYXJndW1lbnRzIHBhcnNlZCBmcm9tIHRoZSBnaXZlbiBzdHJpbmcuIEZvcgogICAgICogZXhhbXBsZSAnY29tcHV0ZShmb28pJyB3aWxsIGNvbXB1dGUgYSBnaXZlbiBwcm9wZXJ0eSB3aGVuIHRoZQogICAgICogJ2ZvbycgcHJvcGVydHkgY2hhbmdlcyBieSBleGVjdXRpbmcgdGhlICdjb21wdXRlJyBtZXRob2QuIFRoaXMgbWV0aG9kCiAgICAgKiBtdXN0IHJldHVybiB0aGUgY29tcHV0ZWQgdmFsdWUuCiAgICAgKgogICAgICogKiBgcmVmbGVjdFRvQXR0cmlidXRlYDoge2Jvb2xlYW59IElmIHRydWUsIHRoZSBwcm9wZXJ0eSB2YWx1ZSBpcyByZWZsZWN0ZWQKICAgICAqIHRvIGFuIGF0dHJpYnV0ZSBvZiB0aGUgc2FtZSBuYW1lLiBOb3RlLCB0aGUgYXR0cmlidXRlIGlzIGRhc2gtY2FzZWQKICAgICAqIHNvIGEgcHJvcGVydHkgbmFtZWQgJ2Zvb0JhcicgaXMgcmVmbGVjdGVkIGFzICdmb28tYmFyJy4KICAgICAqCiAgICAgKiAqIGBub3RpZnlgOiB7Ym9vbGVhbn0gc2VuZHMgYSBub24tYnViYmxpbmcgbm90aWZpY2F0aW9uIGV2ZW50IHdoZW4KICAgICAqIHRoZSBwcm9wZXJ0eSBjaGFuZ2VzLiBGb3IgZXhhbXBsZSwgYSBwcm9wZXJ0eSBuYW1lZCAnZm9vJyBzZW5kcyBhbgogICAgICogZXZlbnQgbmFtZWQgJ2Zvby1jaGFuZ2VkJyB3aXRoIGBldmVudC5kZXRhaWxgIHNldCB0byB0aGUgdmFsdWUgb2YKICAgICAqIHRoZSBwcm9wZXJ0eS4KICAgICAqCiAgICAgKiAqIG9ic2VydmVyOiB7c3RyaW5nfSBuYW1lIG9mIGEgbWV0aG9kIHRoYXQgcnVucyB3aGVuIHRoZSBwcm9wZXJ0eQogICAgICogY2hhbmdlcy4gVGhlIGFyZ3VtZW50cyBvZiB0aGUgbWV0aG9kIGFyZSAodmFsdWUsIHByZXZpb3VzVmFsdWUpLgogICAgICoKICAgICAqIE5vdGU6IFVzZXJzIG1heSB3YW50IGNvbnRyb2wgb3ZlciBtb2RpZnlpbmcgcHJvcGVydHkKICAgICAqIGVmZmVjdHMgdmlhIHN1YmNsYXNzaW5nLiBGb3IgZXhhbXBsZSwgYSB1c2VyIG1pZ2h0IHdhbnQgdG8gbWFrZSBhCiAgICAgKiByZWZsZWN0VG9BdHRyaWJ1dGUgcHJvcGVydHkgbm90IGRvIHNvIGluIGEgc3ViY2xhc3MuIFdlJ3ZlIGNob3NlbiB0bwogICAgICogZGlzYWJsZSB0aGlzIGJlY2F1c2UgaXQgbGVhZHMgdG8gYWRkaXRpb25hbCBjb21wbGljYXRpb24uCiAgICAgKiBGb3IgZXhhbXBsZSwgYSByZWFkT25seSBlZmZlY3QgZ2VuZXJhdGVzIGEgc3BlY2lhbCBzZXR0ZXIuIElmIGEgc3ViY2xhc3MKICAgICAqIGRpc2FibGVzIHRoZSBlZmZlY3QsIHRoZSBzZXR0ZXIgd291bGQgZmFpbCB1bmV4cGVjdGVkbHkuCiAgICAgKiBCYXNlZCBvbiBmZWVkYmFjaywgd2UgbWF5IHdhbnQgdG8gdHJ5IHRvIG1ha2UgZWZmZWN0cyBtb3JlIG1hbGxlYWJsZQogICAgICogYW5kL29yIHByb3ZpZGUgYW4gYWR2YW5jZWQgYXBpIGZvciBtYW5pcHVsYXRpbmcgdGhlbS4KICAgICAqIEFsc28gY29uc2lkZXIgYWRkaW5nIHdhcm5pbmdzIHdoZW4gYW4gZWZmZWN0IGNhbm5vdCBiZSBjaGFuZ2VkLgogICAgICoKICAgICAqIEBwYXJhbSB7IVBvbHltZXJFbGVtZW50fSBwcm90byBFbGVtZW50IGNsYXNzIHByb3RvdHlwZSB0byBhZGQgYWNjZXNzb3JzCiAgICAgKiAgIGFuZCBlZmZlY3RzIHRvCiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBOYW1lIG9mIHRoZSBwcm9wZXJ0eS4KICAgICAqIEBwYXJhbSB7T2JqZWN0fSBpbmZvIEluZm8gb2JqZWN0IGZyb20gd2hpY2ggdG8gY3JlYXRlIHByb3BlcnR5IGVmZmVjdHMuCiAgICAgKiBTdXBwb3J0ZWQga2V5czoKICAgICAqIEBwYXJhbSB7T2JqZWN0fSBhbGxQcm9wcyBGbGF0dGVuZWQgbWFwIG9mIGFsbCBwcm9wZXJ0aWVzIGRlZmluZWQgaW4gdGhpcwogICAgICogICBlbGVtZW50IChpbmNsdWRpbmcgaW5oZXJpdGVkIHByb3BlcnRpZXMpCiAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICogQHByaXZhdGUKICAgICAqLwogICAgZnVuY3Rpb24gY3JlYXRlUHJvcGVydHlGcm9tQ29uZmlnKHByb3RvLCBuYW1lLCBpbmZvLCBhbGxQcm9wcykgewogICAgICAvLyBjb21wdXRlZCBmb3JjZXMgcmVhZE9ubHkuLi4KICAgICAgaWYgKGluZm8uY29tcHV0ZWQpIHsKICAgICAgICBpbmZvLnJlYWRPbmx5ID0gdHJ1ZTsKICAgICAgfQogICAgICAvLyBOb3RlLCBzaW5jZSBhbGwgY29tcHV0ZWQgcHJvcGVydGllcyBhcmUgcmVhZE9ubHksIHRoaXMgcHJldmVudHMKICAgICAgLy8gYWRkaW5nIGFkZGl0aW9uYWwgY29tcHV0ZWQgcHJvcGVydHkgZWZmZWN0cyAod2hpY2ggbGVhZHMgdG8gYSBjb25mdXNpbmcKICAgICAgLy8gc2V0dXAgd2hlcmUgbXVsdGlwbGUgdHJpZ2dlcnMgZm9yIHNldHRpbmcgYSBwcm9wZXJ0eSkKICAgICAgLy8gV2hpbGUgd2UgZG8gaGF2ZSBgaGFzQ29tcHV0ZWRFZmZlY3RgIHRoaXMgaXMgc2V0IG9uIHRoZSBwcm9wZXJ0eSdzCiAgICAgIC8vIGRlcGVuZGVuY2llcyByYXRoZXIgdGhhbiBpdHNlbGYuCiAgICAgIGlmIChpbmZvLmNvbXB1dGVkICYmICFwcm90by5faGFzUmVhZE9ubHlFZmZlY3QobmFtZSkpIHsKICAgICAgICBwcm90by5fY3JlYXRlQ29tcHV0ZWRQcm9wZXJ0eShuYW1lLCBpbmZvLmNvbXB1dGVkLCBhbGxQcm9wcyk7CiAgICAgIH0KICAgICAgaWYgKGluZm8ucmVhZE9ubHkgJiYgIXByb3RvLl9oYXNSZWFkT25seUVmZmVjdChuYW1lKSkgewogICAgICAgIHByb3RvLl9jcmVhdGVSZWFkT25seVByb3BlcnR5KG5hbWUsICFpbmZvLmNvbXB1dGVkKTsKICAgICAgfQogICAgICBpZiAoaW5mby5yZWZsZWN0VG9BdHRyaWJ1dGUgJiYgIXByb3RvLl9oYXNSZWZsZWN0RWZmZWN0KG5hbWUpKSB7CiAgICAgICAgcHJvdG8uX2NyZWF0ZVJlZmxlY3RlZFByb3BlcnR5KG5hbWUpOwogICAgICB9CiAgICAgIGlmIChpbmZvLm5vdGlmeSAmJiAhcHJvdG8uX2hhc05vdGlmeUVmZmVjdChuYW1lKSkgewogICAgICAgIHByb3RvLl9jcmVhdGVOb3RpZnlpbmdQcm9wZXJ0eShuYW1lKTsKICAgICAgfQogICAgICAvLyBhbHdheXMgYWRkIG9ic2VydmVyCiAgICAgIGlmIChpbmZvLm9ic2VydmVyKSB7CiAgICAgICAgcHJvdG8uX2NyZWF0ZVByb3BlcnR5T2JzZXJ2ZXIobmFtZSwgaW5mby5vYnNlcnZlciwgYWxsUHJvcHNbaW5mby5vYnNlcnZlcl0pOwogICAgICB9CiAgICAgIC8vIGFsd2F5cyBjcmVhdGUgdGhlIG1hcHBpbmcgZnJvbSBhdHRyaWJ1dGUgYmFjayB0byBwcm9wZXJ0eSBmb3IgZGVzZXJpYWxpemF0aW9uLgogICAgICBwcm90by5fYWRkUHJvcGVydHlUb0F0dHJpYnV0ZU1hcChuYW1lKTsKICAgIH0KCiAgICAvKioKICAgICAqIFByb2Nlc3MgYWxsIHN0eWxlIGVsZW1lbnRzIGluIHRoZSBlbGVtZW50IHRlbXBsYXRlLiBTdHlsZXMgd2l0aCB0aGUKICAgICAqIGBpbmNsdWRlYCBhdHRyaWJ1dGUgYXJlIHByb2Nlc3NlZCBzdWNoIHRoYXQgYW55IHN0eWxlcyBpbgogICAgICogdGhlIGFzc29jaWF0ZWQgInN0eWxlIG1vZHVsZXMiIGFyZSBpbmNsdWRlZCBpbiB0aGUgZWxlbWVudCB0ZW1wbGF0ZS4KICAgICAqIEBwYXJhbSB7UG9seW1lckVsZW1lbnRDb25zdHJ1Y3Rvcn0ga2xhc3MgRWxlbWVudCBjbGFzcwogICAgICogQHBhcmFtIHshSFRNTFRlbXBsYXRlRWxlbWVudH0gdGVtcGxhdGUgVGVtcGxhdGUgdG8gcHJvY2VzcwogICAgICogQHBhcmFtIHtzdHJpbmd9IGlzIE5hbWUgb2YgZWxlbWVudAogICAgICogQHBhcmFtIHtzdHJpbmd9IGJhc2VVUkkgQmFzZSBVUkkgZm9yIGVsZW1lbnQKICAgICAqIEBwcml2YXRlCiAgICAgKi8KICAgIGZ1bmN0aW9uIHByb2Nlc3NFbGVtZW50U3R5bGVzKGtsYXNzLCB0ZW1wbGF0ZSwgaXMsIGJhc2VVUkkpIHsKICAgICAgaWYgKCFidWlsdENTUykgewogICAgICAgIGNvbnN0IHRlbXBsYXRlU3R5bGVzID0gdGVtcGxhdGUuY29udGVudC5xdWVyeVNlbGVjdG9yQWxsKCdzdHlsZScpOwogICAgICAgIGNvbnN0IHN0eWxlc1dpdGhJbXBvcnRzID0gUG9seW1lci5TdHlsZUdhdGhlci5zdHlsZXNGcm9tVGVtcGxhdGUodGVtcGxhdGUpOwogICAgICAgIC8vIGluc2VydCBzdHlsZXMgZnJvbSA8bGluayByZWw9ImltcG9ydCIgdHlwZT0iY3NzIj4gYXQgdGhlIHRvcCBvZiB0aGUgdGVtcGxhdGUKICAgICAgICBjb25zdCBsaW5rZWRTdHlsZXMgPSBQb2x5bWVyLlN0eWxlR2F0aGVyLnN0eWxlc0Zyb21Nb2R1bGVJbXBvcnRzKGlzKTsKICAgICAgICBjb25zdCBmaXJzdFRlbXBsYXRlQ2hpbGQgPSB0ZW1wbGF0ZS5jb250ZW50LmZpcnN0RWxlbWVudENoaWxkOwogICAgICAgIGZvciAobGV0IGlkeCA9IDA7IGlkeCA8IGxpbmtlZFN0eWxlcy5sZW5ndGg7IGlkeCsrKSB7CiAgICAgICAgICBsZXQgcyA9IGxpbmtlZFN0eWxlc1tpZHhdOwogICAgICAgICAgcy50ZXh0Q29udGVudCA9IGtsYXNzLl9wcm9jZXNzU3R5bGVUZXh0KHMudGV4dENvbnRlbnQsIGJhc2VVUkkpOwogICAgICAgICAgdGVtcGxhdGUuY29udGVudC5pbnNlcnRCZWZvcmUocywgZmlyc3RUZW1wbGF0ZUNoaWxkKTsKICAgICAgICB9CiAgICAgICAgLy8ga2VlcCB0cmFjayBvZiB0aGUgbGFzdCAiY29uY3JldGUiIHN0eWxlIGluIHRoZSB0ZW1wbGF0ZSB3ZSBoYXZlIGVuY291bnRlcmVkCiAgICAgICAgbGV0IHRlbXBsYXRlU3R5bGVJbmRleCA9IDA7CiAgICAgICAgLy8gZW5zdXJlIGFsbCBnYXRoZXJlZCBzdHlsZXMgYXJlIGFjdHVhbGx5IGluIHRoaXMgdGVtcGxhdGUuCiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHlsZXNXaXRoSW1wb3J0cy5sZW5ndGg7IGkrKykgewogICAgICAgICAgbGV0IHMgPSBzdHlsZXNXaXRoSW1wb3J0c1tpXTsKICAgICAgICAgIGxldCB0ZW1wbGF0ZVN0eWxlID0gdGVtcGxhdGVTdHlsZXNbdGVtcGxhdGVTdHlsZUluZGV4XTsKICAgICAgICAgIC8vIGlmIHRoZSBzdHlsZSBpcyBub3QgaW4gdGhpcyB0ZW1wbGF0ZSwgaXQncyBiZWVuICJpbmNsdWRlZCIgYW5kCiAgICAgICAgICAvLyB3ZSBwdXQgYSBjbG9uZSBvZiBpdCBpbiB0aGUgdGVtcGxhdGUgYmVmb3JlIHRoZSBzdHlsZSB0aGF0IGluY2x1ZGVkIGl0CiAgICAgICAgICBpZiAodGVtcGxhdGVTdHlsZSAhPT0gcykgewogICAgICAgICAgICBzID0gcy5jbG9uZU5vZGUodHJ1ZSk7CiAgICAgICAgICAgIHRlbXBsYXRlU3R5bGUucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUocywgdGVtcGxhdGVTdHlsZSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0ZW1wbGF0ZVN0eWxlSW5kZXgrKzsKICAgICAgICAgIH0KICAgICAgICAgIHMudGV4dENvbnRlbnQgPSBrbGFzcy5fcHJvY2Vzc1N0eWxlVGV4dChzLnRleHRDb250ZW50LCBiYXNlVVJJKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKHdpbmRvdy5TaGFkeUNTUykgewogICAgICAgIHdpbmRvdy5TaGFkeUNTUy5wcmVwYXJlVGVtcGxhdGUodGVtcGxhdGUsIGlzKTsKICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogTG9vayB1cCB0ZW1wbGF0ZSBmcm9tIGRvbS1tb2R1bGUgZm9yIGVsZW1lbnQKICAgICAqCiAgICAgKiBAcGFyYW0geyFzdHJpbmd9IGlzIEVsZW1lbnQgbmFtZSB0byBsb29rIHVwCiAgICAgKiBAcmV0dXJuIHshSFRNTFRlbXBsYXRlRWxlbWVudH0gVGVtcGxhdGUgZm91bmQgaW4gZG9tIG1vZHVsZSwgb3IKICAgICAqICAgdW5kZWZpbmVkIGlmIG5vdCBmb3VuZAogICAgICogQHByb3RlY3RlZAogICAgICovCiAgICBmdW5jdGlvbiBnZXRUZW1wbGF0ZUZyb21Eb21Nb2R1bGUoaXMpIHsKICAgICAgbGV0IHRlbXBsYXRlID0gbnVsbDsKICAgICAgaWYgKGlzICYmIFBvbHltZXIuRG9tTW9kdWxlKSB7CiAgICAgICAgdGVtcGxhdGUgPSBQb2x5bWVyLkRvbU1vZHVsZS5pbXBvcnQoaXMsICd0ZW1wbGF0ZScpOwogICAgICAgIC8vIFVuZGVyIHN0cmljdFRlbXBsYXRlUG9saWN5LCByZXF1aXJlIGFueSBlbGVtZW50IHdpdGggYW4gYGlzYAogICAgICAgIC8vIHNwZWNpZmllZCB0byBoYXZlIGEgZG9tLW1vZHVsZQogICAgICAgIGlmIChQb2x5bWVyLnN0cmljdFRlbXBsYXRlUG9saWN5ICYmICF0ZW1wbGF0ZSkgewogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBzdHJpY3RUZW1wbGF0ZVBvbGljeTogZXhwZWN0aW5nIGRvbS1tb2R1bGUgb3IgbnVsbCB0ZW1wbGF0ZSBmb3IgJHtpc31gKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIHRlbXBsYXRlOwogICAgfQoKICAvKioKICAgICAqIEBwb2x5bWVyCiAgICAgKiBAbWl4aW5DbGFzcwogICAgICogQHVucmVzdHJpY3RlZAogICAgICogQGltcGxlbWVudHMge1BvbHltZXJfRWxlbWVudE1peGlufQogICAgICovCiAgICBjbGFzcyBQb2x5bWVyRWxlbWVudCBleHRlbmRzIHBvbHltZXJFbGVtZW50QmFzZSB7CgogICAgICAvKioKICAgICAgICogT3ZlcnJpZGUgb2YgUHJvcGVydGllc01peGluIF9maW5hbGl6ZUNsYXNzIHRvIGNyZWF0ZSBvYnNlcnZlcnMgYW5kCiAgICAgICAqIGZpbmQgdGhlIHRlbXBsYXRlLgogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKiBAcHJvdGVjdGVkCiAgICAgICAqIEBvdmVycmlkZQogICAgICAgKiBAc3VwcHJlc3Mge21pc3NpbmdQcm9wZXJ0aWVzfSBJbnRlcmZhY2VzIGluIGNsb3N1cmUgZG8gbm90IGluaGVyaXQgc3RhdGljcywgYnV0IGNsYXNzZXMgZG8KICAgICAgICovCiAgICAgIHN0YXRpYyBfZmluYWxpemVDbGFzcygpIHsKICAgICAgICBzdXBlci5fZmluYWxpemVDbGFzcygpOwogICAgICAgIGNvbnN0IG9ic2VydmVycyA9IG93bk9ic2VydmVycyh0aGlzKTsKICAgICAgICBpZiAob2JzZXJ2ZXJzKSB7CiAgICAgICAgICB0aGlzLmNyZWF0ZU9ic2VydmVycyhvYnNlcnZlcnMsIHRoaXMuX3Byb3BlcnRpZXMpOwogICAgICAgIH0KICAgICAgICB0aGlzLl9wcmVwYXJlVGVtcGxhdGUoKTsKICAgICAgfQoKICAgICAgc3RhdGljIF9wcmVwYXJlVGVtcGxhdGUoKSB7CiAgICAgICAgLy8gbm90ZTogY3JlYXRlICJ3b3JraW5nIiB0ZW1wbGF0ZSB0aGF0IGlzIGZpbmFsaXplZCBhdCBpbnN0YW5jZSB0aW1lCiAgICAgICAgbGV0IHRlbXBsYXRlID0gLyoqIEB0eXBlIHtQb2x5bWVyRWxlbWVudENvbnN0cnVjdG9yfSAqLyAodGhpcykudGVtcGxhdGU7CiAgICAgICAgaWYgKHRlbXBsYXRlKSB7CiAgICAgICAgICBpZiAodHlwZW9mIHRlbXBsYXRlID09PSAnc3RyaW5nJykgewogICAgICAgICAgICBsZXQgdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RlbXBsYXRlJyk7CiAgICAgICAgICAgIHQuaW5uZXJIVE1MID0gdGVtcGxhdGU7CiAgICAgICAgICAgIHRlbXBsYXRlID0gdDsKICAgICAgICAgIH0gZWxzZSBpZiAoIVBvbHltZXIubGVnYWN5T3B0aW1pemF0aW9ucykgewogICAgICAgICAgICAgdGVtcGxhdGUgPSB0ZW1wbGF0ZS5jbG9uZU5vZGUodHJ1ZSk7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICB0aGlzLnByb3RvdHlwZS5fdGVtcGxhdGUgPSB0ZW1wbGF0ZTsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIE92ZXJyaWRlIG9mIFByb3BlcnRpZXNDaGFuZ2VkIGNyZWF0ZVByb3BlcnRpZXMgdG8gY3JlYXRlIGFjY2Vzc29ycwogICAgICAgKiBhbmQgcHJvcGVydHkgZWZmZWN0cyBmb3IgYWxsIG9mIHRoZSBwcm9wZXJ0aWVzLgogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKiBAcHJvdGVjdGVkCiAgICAgICAqIEBvdmVycmlkZQogICAgICAgKi8KICAgICAgc3RhdGljIGNyZWF0ZVByb3BlcnRpZXMocHJvcHMpIHsKICAgICAgICBmb3IgKGxldCBwIGluIHByb3BzKSB7CiAgICAgICAgICBjcmVhdGVQcm9wZXJ0eUZyb21Db25maWcodGhpcy5wcm90b3R5cGUsIHAsIHByb3BzW3BdLCBwcm9wcyk7CiAgICAgICAgfQogICAgICB9CgogICAgICAvKioKICAgICAgICogQ3JlYXRlcyBvYnNlcnZlcnMgZm9yIHRoZSBnaXZlbiBgb2JzZXJ2ZXJzYCBhcnJheS4KICAgICAgICogTGV2ZXJhZ2VzIGBQcm9wZXJ0eUVmZmVjdHNgIHRvIGNyZWF0ZSBvYnNlcnZlcnMuCiAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYnNlcnZlcnMgQXJyYXkgb2Ygb2JzZXJ2ZXIgZGVzY3JpcHRvcnMgZm9yCiAgICAgICAqICAgdGhpcyBjbGFzcwogICAgICAgKiBAcGFyYW0ge09iamVjdH0gZHluYW1pY0ZucyBPYmplY3QgY29udGFpbmluZyBrZXlzIGZvciBhbnkgcHJvcGVydGllcwogICAgICAgKiAgIHRoYXQgYXJlIGZ1bmN0aW9ucyBhbmQgc2hvdWxkIHRyaWdnZXIgdGhlIGVmZmVjdCB3aGVuIHRoZSBmdW5jdGlvbgogICAgICAgKiAgIHJlZmVyZW5jZSBpcyBjaGFuZ2VkCiAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAqIEBwcm90ZWN0ZWQKICAgICAgICovCiAgICAgIHN0YXRpYyBjcmVhdGVPYnNlcnZlcnMob2JzZXJ2ZXJzLCBkeW5hbWljRm5zKSB7CiAgICAgICAgY29uc3QgcHJvdG8gPSB0aGlzLnByb3RvdHlwZTsKICAgICAgICBmb3IgKGxldCBpPTA7IGkgPCBvYnNlcnZlcnMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgIHByb3RvLl9jcmVhdGVNZXRob2RPYnNlcnZlcihvYnNlcnZlcnNbaV0sIGR5bmFtaWNGbnMpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIFJldHVybnMgdGhlIHRlbXBsYXRlIHRoYXQgd2lsbCBiZSBzdGFtcGVkIGludG8gdGhpcyBlbGVtZW50J3Mgc2hhZG93IHJvb3QuCiAgICAgICAqCiAgICAgICAqIElmIGEgYHN0YXRpYyBnZXQgaXMoKWAgZ2V0dGVyIGlzIGRlZmluZWQsIHRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uCiAgICAgICAqIHdpbGwgcmV0dXJuIHRoZSBmaXJzdCBgPHRlbXBsYXRlPmAgaW4gYSBgZG9tLW1vZHVsZWAgd2hvc2UgYGlkYAogICAgICAgKiBtYXRjaGVzIHRoaXMgZWxlbWVudCdzIGBpc2AuCiAgICAgICAqCiAgICAgICAqIFVzZXJzIG1heSBvdmVycmlkZSB0aGlzIGdldHRlciB0byByZXR1cm4gYW4gYXJiaXRyYXJ5IHRlbXBsYXRlCiAgICAgICAqIChpbiB3aGljaCBjYXNlIHRoZSBgaXNgIGdldHRlciBpcyB1bm5lY2Vzc2FyeSkuIFRoZSB0ZW1wbGF0ZSByZXR1cm5lZAogICAgICAgKiBtYXkgYmUgZWl0aGVyIGFuIGBIVE1MVGVtcGxhdGVFbGVtZW50YCBvciBhIHN0cmluZyB0aGF0IHdpbGwgYmUKICAgICAgICogYXV0b21hdGljYWxseSBwYXJzZWQgaW50byBhIHRlbXBsYXRlLgogICAgICAgKgogICAgICAgKiBOb3RlIHRoYXQgd2hlbiBzdWJjbGFzc2luZywgaWYgdGhlIHN1cGVyIGNsYXNzIG92ZXJyb2RlIHRoZSBkZWZhdWx0CiAgICAgICAqIGltcGxlbWVudGF0aW9uIGFuZCB0aGUgc3ViY2xhc3Mgd291bGQgbGlrZSB0byBwcm92aWRlIGFuIGFsdGVybmF0ZQogICAgICAgKiB0ZW1wbGF0ZSB2aWEgYSBgZG9tLW1vZHVsZWAsIGl0IHNob3VsZCBvdmVycmlkZSB0aGlzIGdldHRlciBhbmQKICAgICAgICogcmV0dXJuIGBQb2x5bWVyLkRvbU1vZHVsZS5pbXBvcnQodGhpcy5pcywgJ3RlbXBsYXRlJylgLgogICAgICAgKgogICAgICAgKiBJZiBhIHN1YmNsYXNzIHdvdWxkIGxpa2UgdG8gbW9kaWZ5IHRoZSBzdXBlciBjbGFzcyB0ZW1wbGF0ZSwgaXQgc2hvdWxkCiAgICAgICAqIGNsb25lIGl0IHJhdGhlciB0aGFuIG1vZGlmeSBpdCBpbiBwbGFjZS4gIElmIHRoZSBnZXR0ZXIgZG9lcyBleHBlbnNpdmUKICAgICAgICogd29yayBzdWNoIGFzIGNsb25pbmcvbW9kaWZ5aW5nIGEgdGVtcGxhdGUsIGl0IHNob3VsZCBtZW1vaXplIHRoZQogICAgICAgKiB0ZW1wbGF0ZSBmb3IgbWF4aW11bSBwZXJmb3JtYW5jZToKICAgICAgICoKICAgICAgICogICBsZXQgbWVtb2l6ZWRUZW1wbGF0ZTsKICAgICAgICogICBjbGFzcyBNeVN1YkNsYXNzIGV4dGVuZHMgTXlTdXBlckNsYXNzIHsKICAgICAgICogICAgIHN0YXRpYyBnZXQgdGVtcGxhdGUoKSB7CiAgICAgICAqICAgICAgIGlmICghbWVtb2l6ZWRUZW1wbGF0ZSkgewogICAgICAgKiAgICAgICAgIG1lbW9pemVkVGVtcGxhdGUgPSBNeVN1cGVyQ2xhc3MudGVtcGxhdGUuY2xvbmVOb2RlKHRydWUpOwogICAgICAgKiAgICAgICAgIGxldCBzdWJDb250ZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgICAgICAqICAgICAgICAgc3ViQ29udGVudC50ZXh0Q29udGVudCA9ICdUaGlzIGNhbWUgZnJvbSBNeVN1YkNsYXNzJzsKICAgICAgICogICAgICAgICBtZW1vaXplZFRlbXBsYXRlLmNvbnRlbnQuYXBwZW5kQ2hpbGQoc3ViQ29udGVudCk7CiAgICAgICAqICAgICAgIH0KICAgICAgICogICAgICAgcmV0dXJuIG1lbW9pemVkVGVtcGxhdGU7CiAgICAgICAqICAgICB9CiAgICAgICAqICAgfQogICAgICAgKgogICAgICAgKiBAcmV0dXJuIHtIVE1MVGVtcGxhdGVFbGVtZW50fHN0cmluZ30gVGVtcGxhdGUgdG8gYmUgc3RhbXBlZAogICAgICAgKi8KICAgICAgc3RhdGljIGdldCB0ZW1wbGF0ZSgpIHsKICAgICAgICAvLyBFeHBsYW5hdGlvbiBvZiB0ZW1wbGF0ZS1yZWxhdGVkIHByb3BlcnRpZXM6CiAgICAgICAgLy8gLSBjb25zdHJ1Y3Rvci50ZW1wbGF0ZSAodGhpcyBnZXR0ZXIpOiB0aGUgdGVtcGxhdGUgZm9yIHRoZSBjbGFzcy4KICAgICAgICAvLyAgICAgVGhpcyBjYW4gY29tZSBmcm9tIHRoZSBwcm90b3R5cGUgKGZvciBsZWdhY3kgZWxlbWVudHMpLCBmcm9tIGEKICAgICAgICAvLyAgICAgZG9tLW1vZHVsZSwgb3IgZnJvbSB0aGUgc3VwZXIgY2xhc3MncyB0ZW1wbGF0ZSAob3IgY2FuIGJlIG92ZXJyaWRkZW4KICAgICAgICAvLyAgICAgYWx0b2dldGhlciBieSB0aGUgdXNlcikKICAgICAgICAvLyAtIGNvbnN0cnVjdG9yLl90ZW1wbGF0ZTogbWVtb2l6ZWQgdmVyc2lvbiBvZiBjb25zdHJ1Y3Rvci50ZW1wbGF0ZQogICAgICAgIC8vIC0gcHJvdG90eXBlLl90ZW1wbGF0ZTogd29ya2luZyB0ZW1wbGF0ZSBmb3IgdGhlIGVsZW1lbnQsIHdoaWNoIHdpbGwgYmUKICAgICAgICAvLyAgICAgcGFyc2VkIGFuZCBtb2RpZmllZCBpbiBwbGFjZS4gSXQgaXMgYSBjbG9uZWQgdmVyc2lvbiBvZgogICAgICAgIC8vICAgICBjb25zdHJ1Y3Rvci50ZW1wbGF0ZSwgc2F2ZWQgaW4gX2ZpbmFsaXplQ2xhc3MoKS4gTm90ZSB0aGF0IGJlZm9yZQogICAgICAgIC8vICAgICB0aGlzIGdldHRlciBpcyBjYWxsZWQsIGZvciBsZWdhY3kgZWxlbWVudHMgdGhpcyBjb3VsZCBiZSBmcm9tIGEKICAgICAgICAvLyAgICAgX3RlbXBsYXRlIGZpZWxkIG9uIHRoZSBpbmZvIG9iamVjdCBwYXNzZWQgdG8gUG9seW1lcigpLCBhIGJlaGF2aW9yLAogICAgICAgIC8vICAgICBvciBzZXQgaW4gcmVnaXN0ZXJlZCgpOyBvbmNlIHRoZSBzdGF0aWMgZ2V0dGVyIHJ1bnMsIGEgY2xvbmUgb2YgaXQKICAgICAgICAvLyAgICAgd2lsbCBvdmVyd3JpdGUgaXQgb24gdGhlIHByb3RvdHlwZSBhcyB0aGUgd29ya2luZyB0ZW1wbGF0ZS4KICAgICAgICBpZiAoIXRoaXMuaGFzT3duUHJvcGVydHkoSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgnX3RlbXBsYXRlJywgdGhpcykpKSB7CiAgICAgICAgICB0aGlzLl90ZW1wbGF0ZSA9CiAgICAgICAgICAgIC8vIElmIHVzZXIgaGFzIHB1dCB0ZW1wbGF0ZSBvbiBwcm90b3R5cGUgKGUuZy4gaW4gbGVnYWN5IHZpYSByZWdpc3RlcmVkCiAgICAgICAgICAgIC8vIGNhbGxiYWNrIG9yIGluZm8gb2JqZWN0KSwgcHJlZmVyIHRoYXQgZmlyc3QKICAgICAgICAgICAgdGhpcy5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkoSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgnX3RlbXBsYXRlJywgdGhpcy5wcm90b3R5cGUpKSA/CiAgICAgICAgICAgIHRoaXMucHJvdG90eXBlLl90ZW1wbGF0ZSA6CiAgICAgICAgICAgIC8vIExvb2sgaW4gZG9tLW1vZHVsZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBlbGVtZW50J3MgaXMKICAgICAgICAgICAgKGdldFRlbXBsYXRlRnJvbURvbU1vZHVsZSgvKiogQHR5cGUge1BvbHltZXJFbGVtZW50Q29uc3RydWN0b3J9Ki8gKHRoaXMpLmlzKSB8fAogICAgICAgICAgICAvLyBOZXh0IGxvb2sgZm9yIHN1cGVyY2xhc3MgdGVtcGxhdGUgKGNhbGwgdGhlIHN1cGVyIGltcGwgdGhpcwogICAgICAgICAgICAvLyB3YXkgc28gdGhhdCBgdGhpc2AgcG9pbnRzIHRvIHRoZSBzdXBlcmNsYXNzKQogICAgICAgICAgICBPYmplY3QuZ2V0UHJvdG90eXBlT2YoLyoqIEB0eXBlIHtQb2x5bWVyRWxlbWVudENvbnN0cnVjdG9yfSovICh0aGlzKS5wcm90b3R5cGUpLmNvbnN0cnVjdG9yLnRlbXBsYXRlKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRoaXMuX3RlbXBsYXRlOwogICAgICB9CgogICAgICAvKioKICAgICAgICogU2V0IHRoZSB0ZW1wbGF0ZS4KICAgICAgICoKICAgICAgICogQHBhcmFtIHshSFRNTFRlbXBsYXRlRWxlbWVudHxzdHJpbmd9IHZhbHVlIFRlbXBsYXRlIHRvIHNldC4KICAgICAgICovCiAgICAgIHN0YXRpYyBzZXQgdGVtcGxhdGUodmFsdWUpIHsKICAgICAgICB0aGlzLl90ZW1wbGF0ZSA9IHZhbHVlOwogICAgICB9CgogICAgICAvKioKICAgICAgICogUGF0aCBtYXRjaGluZyB0aGUgdXJsIGZyb20gd2hpY2ggdGhlIGVsZW1lbnQgd2FzIGltcG9ydGVkLgogICAgICAgKgogICAgICAgKiBUaGlzIHBhdGggaXMgdXNlZCB0byByZXNvbHZlIHVybCdzIGluIHRlbXBsYXRlIHN0eWxlIGNzc1RleHQuCiAgICAgICAqIFRoZSBgaW1wb3J0UGF0aGAgcHJvcGVydHkgaXMgYWxzbyBzZXQgb24gZWxlbWVudCBpbnN0YW5jZXMgYW5kIGNhbiBiZQogICAgICAgKiB1c2VkIHRvIGNyZWF0ZSBiaW5kaW5ncyByZWxhdGl2ZSB0byB0aGUgaW1wb3J0IHBhdGguCiAgICAgICAqCiAgICAgICAqIEZvciBlbGVtZW50cyBkZWZpbmVkIGluIEVTIG1vZHVsZXMsIHVzZXJzIHNob3VsZCBpbXBsZW1lbnQKICAgICAgICogYHN0YXRpYyBnZXQgaW1wb3J0TWV0YSgpIHsgcmV0dXJuIGltcG9ydC5tZXRhOyB9YCwgYW5kIHRoZSBkZWZhdWx0CiAgICAgICAqIGltcGxlbWVudGF0aW9uIG9mIGBpbXBvcnRQYXRoYCB3aWxsICByZXR1cm4gYGltcG9ydC5tZXRhLnVybGAncyBwYXRoLgogICAgICAgKiBGb3IgZWxlbWVudHMgZGVmaW5lZCBpbiBIVE1MIGltcG9ydHMsIHRoaXMgZ2V0dGVyIHdpbGwgcmV0dXJuIHRoZSBwYXRoCiAgICAgICAqIHRvIHRoZSBkb2N1bWVudCBjb250YWluaW5nIGEgYGRvbS1tb2R1bGVgIGVsZW1lbnQgbWF0Y2hpbmcgdGhpcwogICAgICAgKiBlbGVtZW50J3Mgc3RhdGljIGBpc2AgcHJvcGVydHkuCiAgICAgICAqCiAgICAgICAqIE5vdGUsIHRoaXMgcGF0aCBzaG91bGQgY29udGFpbiBhIHRyYWlsaW5nIGAvYC4KICAgICAgICoKICAgICAgICogQHJldHVybiB7c3RyaW5nfSBUaGUgaW1wb3J0IHBhdGggZm9yIHRoaXMgZWxlbWVudCBjbGFzcwogICAgICAgKiBAc3VwcHJlc3Mge21pc3NpbmdQcm9wZXJ0aWVzfQogICAgICAgKi8KICAgICAgc3RhdGljIGdldCBpbXBvcnRQYXRoKCkgewogICAgICAgIGlmICghdGhpcy5oYXNPd25Qcm9wZXJ0eShKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCdfaW1wb3J0UGF0aCcsIHRoaXMpKSkgewogICAgICAgICAgY29uc3QgbWV0YSA9IHRoaXMuaW1wb3J0TWV0YTsKICAgICAgICAgIGlmIChtZXRhKSB7CiAgICAgICAgICAgIHRoaXMuX2ltcG9ydFBhdGggPSBQb2x5bWVyLlJlc29sdmVVcmwucGF0aEZyb21VcmwobWV0YS51cmwpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgY29uc3QgbW9kdWxlID0gUG9seW1lci5Eb21Nb2R1bGUgJiYgUG9seW1lci5Eb21Nb2R1bGUuaW1wb3J0KC8qKiBAdHlwZSB7UG9seW1lckVsZW1lbnRDb25zdHJ1Y3Rvcn0gKi8gKHRoaXMpLmlzKTsKICAgICAgICAgICAgdGhpcy5faW1wb3J0UGF0aCA9IChtb2R1bGUgJiYgbW9kdWxlLmFzc2V0cGF0aCkgfHwKICAgICAgICAgICAgICBPYmplY3QuZ2V0UHJvdG90eXBlT2YoLyoqIEB0eXBlIHtQb2x5bWVyRWxlbWVudENvbnN0cnVjdG9yfSovICh0aGlzKS5wcm90b3R5cGUpLmNvbnN0cnVjdG9yLmltcG9ydFBhdGg7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiB0aGlzLl9pbXBvcnRQYXRoOwogICAgICB9CgogICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICBzdXBlcigpOwogICAgICAgIC8qKiBAdHlwZSB7SFRNTFRlbXBsYXRlRWxlbWVudH0gKi8KICAgICAgICB0aGlzLl90ZW1wbGF0ZTsKICAgICAgICAvKiogQHR5cGUge3N0cmluZ30gKi8KICAgICAgICB0aGlzLl9pbXBvcnRQYXRoOwogICAgICAgIC8qKiBAdHlwZSB7c3RyaW5nfSAqLwogICAgICAgIHRoaXMucm9vdFBhdGg7CiAgICAgICAgLyoqIEB0eXBlIHtzdHJpbmd9ICovCiAgICAgICAgdGhpcy5pbXBvcnRQYXRoOwogICAgICAgIC8qKiBAdHlwZSB7U3RhbXBlZFRlbXBsYXRlIHwgSFRNTEVsZW1lbnQgfCBTaGFkb3dSb290fSAqLwogICAgICAgIHRoaXMucm9vdDsKICAgICAgICAvKiogQHR5cGUgeyFPYmplY3Q8c3RyaW5nLCAhRWxlbWVudD59ICovCiAgICAgICAgdGhpcy4kOwogICAgICB9CgogICAgICAvKioKICAgICAgICogT3ZlcnJpZGVzIHRoZSBkZWZhdWx0IGBQb2x5bWVyLlByb3BlcnR5QWNjZXNzb3JzYCB0byBlbnN1cmUgY2xhc3MKICAgICAgICogbWV0YXByb2dyYW1taW5nIHJlbGF0ZWQgdG8gcHJvcGVydHkgYWNjZXNzb3JzIGFuZCBlZmZlY3RzIGhhcwogICAgICAgKiBjb21wbGV0ZWQgKGNhbGxzIGBmaW5hbGl6ZWApLgogICAgICAgKgogICAgICAgKiBJdCBhbHNvIGluaXRpYWxpemVzIGFueSBwcm9wZXJ0eSBkZWZhdWx0cyBwcm92aWRlZCB2aWEgYHZhbHVlYCBpbgogICAgICAgKiBgcHJvcGVydGllc2AgbWV0YWRhdGEuCiAgICAgICAqCiAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAqIEBvdmVycmlkZQogICAgICAgKiBAc3VwcHJlc3Mge2ludmFsaWRDYXN0c30KICAgICAgICovCiAgICAgIF9pbml0aWFsaXplUHJvcGVydGllcygpIHsKICAgICAgICB0aGlzLmNvbnN0cnVjdG9yLmZpbmFsaXplKCk7CiAgICAgICAgLy8gbm90ZTogZmluYWxpemUgdGVtcGxhdGUgd2hlbiB3ZSBoYXZlIGFjY2VzcyB0byBgbG9jYWxOYW1lYCB0bwogICAgICAgIC8vIGF2b2lkIGRlcGVuZGVuY2Ugb24gYGlzYCBmb3IgcG9seWZpbGxpbmcgc3R5bGluZy4KICAgICAgICB0aGlzLmNvbnN0cnVjdG9yLl9maW5hbGl6ZVRlbXBsYXRlKC8qKiBAdHlwZSB7IUhUTUxFbGVtZW50fSAqLyh0aGlzKS5sb2NhbE5hbWUpOwogICAgICAgIHN1cGVyLl9pbml0aWFsaXplUHJvcGVydGllcygpOwogICAgICAgIC8vIHNldCBwYXRoIGRlZmF1bHRzCiAgICAgICAgdGhpcy5yb290UGF0aCA9IFBvbHltZXIucm9vdFBhdGg7CiAgICAgICAgdGhpcy5pbXBvcnRQYXRoID0gdGhpcy5jb25zdHJ1Y3Rvci5pbXBvcnRQYXRoOwogICAgICAgIC8vIGFwcGx5IHByb3BlcnR5IGRlZmF1bHRzLi4uCiAgICAgICAgbGV0IHAkID0gcHJvcGVydHlEZWZhdWx0cyh0aGlzLmNvbnN0cnVjdG9yKTsKICAgICAgICBpZiAoIXAkKSB7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGZvciAobGV0IHAgaW4gcCQpIHsKICAgICAgICAgIGxldCBpbmZvID0gcCRbcF07CiAgICAgICAgICAvLyBEb24ndCBzZXQgZGVmYXVsdCB2YWx1ZSBpZiB0aGVyZSBpcyBhbHJlYWR5IGFuIG93biBwcm9wZXJ0eSwgd2hpY2gKICAgICAgICAgIC8vIGhhcHBlbnMgd2hlbiBhIGBwcm9wZXJ0aWVzYCBwcm9wZXJ0eSB3aXRoIGRlZmF1bHQgYnV0IG5vIGVmZmVjdHMgaGFkCiAgICAgICAgICAvLyBhIHByb3BlcnR5IHNldCAoZS5nLiBib3VuZCkgYnkgaXRzIGhvc3QgYmVmb3JlIHVwZ3JhZGUKICAgICAgICAgIGlmICghdGhpcy5oYXNPd25Qcm9wZXJ0eShwKSkgewogICAgICAgICAgICBsZXQgdmFsdWUgPSB0eXBlb2YgaW5mby52YWx1ZSA9PSAnZnVuY3Rpb24nID8KICAgICAgICAgICAgICBpbmZvLnZhbHVlLmNhbGwodGhpcykgOgogICAgICAgICAgICAgIGluZm8udmFsdWU7CiAgICAgICAgICAgIC8vIFNldCB2aWEgYF9zZXRQcm9wZXJ0eWAgaWYgdGhlcmUgaXMgYW4gYWNjZXNzb3IsIHRvIGVuYWJsZQogICAgICAgICAgICAvLyBpbml0aWFsaXppbmcgcmVhZE9ubHkgcHJvcGVydHkgZGVmYXVsdHMKICAgICAgICAgICAgaWYgKHRoaXMuX2hhc0FjY2Vzc29yKHApKSB7CiAgICAgICAgICAgICAgdGhpcy5fc2V0UGVuZGluZ1Byb3BlcnR5KHAsIHZhbHVlLCB0cnVlKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICB0aGlzW3BdID0gdmFsdWU7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBHYXRoZXIgc3R5bGUgdGV4dCBmb3IgYSBzdHlsZSBlbGVtZW50IGluIHRoZSB0ZW1wbGF0ZS4KICAgICAgICoKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IGNzc1RleHQgVGV4dCBjb250YWluaW5nIHN0eWxpbmcgdG8gcHJvY2VzcwogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gYmFzZVVSSSBCYXNlIFVSSSB0byByZWJhc2UgQ1NTIHBhdGhzIGFnYWluc3QKICAgICAgICogQHJldHVybiB7c3RyaW5nfSBUaGUgcHJvY2Vzc2VkIENTUyB0ZXh0CiAgICAgICAqIEBwcm90ZWN0ZWQKICAgICAgICovCiAgICAgIHN0YXRpYyBfcHJvY2Vzc1N0eWxlVGV4dChjc3NUZXh0LCBiYXNlVVJJKSB7CiAgICAgICAgcmV0dXJuIFBvbHltZXIuUmVzb2x2ZVVybC5yZXNvbHZlQ3NzKGNzc1RleHQsIGJhc2VVUkkpOwogICAgICB9CgogICAgICAvKioKICAgICAgKiBDb25maWd1cmVzIGFuIGVsZW1lbnQgYHByb3RvYCB0byBmdW5jdGlvbiB3aXRoIGEgZ2l2ZW4gYHRlbXBsYXRlYC4KICAgICAgKiBUaGUgZWxlbWVudCBuYW1lIGBpc2AgYW5kIGV4dGVuZHMgYGV4dGAgbXVzdCBiZSBzcGVjaWZpZWQgZm9yIFNoYWR5Q1NTCiAgICAgICogc3R5bGUgc2NvcGluZy4KICAgICAgKgogICAgICAqIEBwYXJhbSB7c3RyaW5nfSBpcyBUYWcgbmFtZSAob3IgdHlwZSBleHRlbnNpb24gbmFtZSkgZm9yIHRoaXMgZWxlbWVudAogICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICogQHByb3RlY3RlZAogICAgICAqLwogICAgICBzdGF0aWMgX2ZpbmFsaXplVGVtcGxhdGUoaXMpIHsKICAgICAgICAvKiogQGNvbnN0IHtIVE1MVGVtcGxhdGVFbGVtZW50fSAqLwogICAgICAgIGNvbnN0IHRlbXBsYXRlID0gdGhpcy5wcm90b3R5cGUuX3RlbXBsYXRlOwogICAgICAgIGlmICh0ZW1wbGF0ZSAmJiAhdGVtcGxhdGUuX19wb2x5bWVyRmluYWxpemVkKSB7CiAgICAgICAgICB0ZW1wbGF0ZS5fX3BvbHltZXJGaW5hbGl6ZWQgPSB0cnVlOwogICAgICAgICAgY29uc3QgaW1wb3J0UGF0aCA9IHRoaXMuaW1wb3J0UGF0aDsKICAgICAgICAgIGNvbnN0IGJhc2VVUkkgPSBpbXBvcnRQYXRoID8gUG9seW1lci5SZXNvbHZlVXJsLnJlc29sdmVVcmwoaW1wb3J0UGF0aCkgOiAnJzsKICAgICAgICAgIC8vIGUuZy4gc3VwcG9ydCBgaW5jbHVkZT0ibW9kdWxlLW5hbWUiYCwgYW5kIFNoYWR5Q1NTCiAgICAgICAgICBwcm9jZXNzRWxlbWVudFN0eWxlcyh0aGlzLCB0ZW1wbGF0ZSwgaXMsIGJhc2VVUkkpOwogICAgICAgICAgdGhpcy5wcm90b3R5cGUuX2JpbmRUZW1wbGF0ZSh0ZW1wbGF0ZSk7CiAgICAgICAgfQogICAgICB9CgogICAgICAvKioKICAgICAgICogUHJvdmlkZXMgYSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIHRoZSBzdGFuZGFyZCBDdXN0b20gRWxlbWVudHMKICAgICAgICogYGNvbm5lY3RlZENhbGxiYWNrYC4KICAgICAgICoKICAgICAgICogVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gZW5hYmxlcyB0aGUgcHJvcGVydHkgZWZmZWN0cyBzeXN0ZW0gYW5kCiAgICAgICAqIGZsdXNoZXMgYW55IHBlbmRpbmcgcHJvcGVydGllcywgYW5kIHVwZGF0ZXMgc2hpbW1lZCBDU1MgcHJvcGVydGllcwogICAgICAgKiB3aGVuIHVzaW5nIHRoZSBTaGFkeUNTUyBzY29waW5nL2N1c3RvbSBwcm9wZXJ0aWVzIHBvbHlmaWxsLgogICAgICAgKgogICAgICAgKiBAc3VwcHJlc3Mge21pc3NpbmdQcm9wZXJ0aWVzLCBpbnZhbGlkQ2FzdHN9IFN1cGVyIG1heSBvciBtYXkgbm90IGltcGxlbWVudCB0aGUgY2FsbGJhY2sKICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICovCiAgICAgIGNvbm5lY3RlZENhbGxiYWNrKCkgewogICAgICAgIGlmICh3aW5kb3cuU2hhZHlDU1MgJiYgdGhpcy5fdGVtcGxhdGUpIHsKICAgICAgICAgIHdpbmRvdy5TaGFkeUNTUy5zdHlsZUVsZW1lbnQoLyoqIEB0eXBlIHshSFRNTEVsZW1lbnR9ICovKHRoaXMpKTsKICAgICAgICB9CiAgICAgICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIFN0YW1wcyB0aGUgZWxlbWVudCB0ZW1wbGF0ZS4KICAgICAgICoKICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICogQG92ZXJyaWRlCiAgICAgICAqLwogICAgICByZWFkeSgpIHsKICAgICAgICBpZiAodGhpcy5fdGVtcGxhdGUpIHsKICAgICAgICAgIHRoaXMucm9vdCA9IHRoaXMuX3N0YW1wVGVtcGxhdGUodGhpcy5fdGVtcGxhdGUpOwogICAgICAgICAgdGhpcy4kID0gdGhpcy5yb290LiQ7CiAgICAgICAgfQogICAgICAgIHN1cGVyLnJlYWR5KCk7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBJbXBsZW1lbnRzIGBQcm9wZXJ0eUVmZmVjdHNgJ3MgYF9yZWFkeUNsaWVudHNgIGNhbGwuIEF0dGFjaGVzCiAgICAgICAqIGVsZW1lbnQgZG9tIGJ5IGNhbGxpbmcgYF9hdHRhY2hEb21gIHdpdGggdGhlIGRvbSBzdGFtcGVkIGZyb20gdGhlCiAgICAgICAqIGVsZW1lbnQncyB0ZW1wbGF0ZSB2aWEgYF9zdGFtcFRlbXBsYXRlYC4gTm90ZSB0aGF0IHRoaXMgYWxsb3dzCiAgICAgICAqIGNsaWVudCBkb20gdG8gYmUgYXR0YWNoZWQgdG8gdGhlIGVsZW1lbnQgcHJpb3IgdG8gYW55IG9ic2VydmVycwogICAgICAgKiBydW5uaW5nLgogICAgICAgKgogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKiBAb3ZlcnJpZGUKICAgICAgICovCiAgICAgIF9yZWFkeUNsaWVudHMoKSB7CiAgICAgICAgaWYgKHRoaXMuX3RlbXBsYXRlKSB7CiAgICAgICAgICB0aGlzLnJvb3QgPSB0aGlzLl9hdHRhY2hEb20oLyoqIEB0eXBlIHtTdGFtcGVkVGVtcGxhdGV9ICovKHRoaXMucm9vdCkpOwogICAgICAgIH0KICAgICAgICAvLyBUaGUgc3VwZXIuX3JlYWR5Q2xpZW50cyBoZXJlIHNldHMgdGhlIGNsaWVudHMgaW5pdGlhbGl6ZWQgZmxhZy4KICAgICAgICAvLyBXZSBtdXN0IHdhaXQgdG8gZG8gdGhpcyB1bnRpbCBhZnRlciBjbGllbnQgZG9tIGlzIGNyZWF0ZWQvYXR0YWNoZWQKICAgICAgICAvLyBzbyB0aGF0IHRoaXMgZmxhZyBjYW4gYmUgY2hlY2tlZCB0byBwcmV2ZW50IG5vdGlmaWNhdGlvbnMgZmlyZWQKICAgICAgICAvLyBkdXJpbmcgdGhpcyBwcm9jZXNzIGZyb20gYmVpbmcgaGFuZGxlZCBiZWZvcmUgY2xpZW50cyBhcmUgcmVhZHkuCiAgICAgICAgc3VwZXIuX3JlYWR5Q2xpZW50cygpOwogICAgICB9CgoKICAgICAgLyoqCiAgICAgICAqIEF0dGFjaGVzIGFuIGVsZW1lbnQncyBzdGFtcGVkIGRvbSB0byBpdHNlbGYuIEJ5IGRlZmF1bHQsCiAgICAgICAqIHRoaXMgbWV0aG9kIGNyZWF0ZXMgYSBgc2hhZG93Um9vdGAgYW5kIGFkZHMgdGhlIGRvbSB0byBpdC4KICAgICAgICogSG93ZXZlciwgdGhpcyBtZXRob2QgbWF5IGJlIG92ZXJyaWRkZW4gdG8gYWxsb3cgYW4gZWxlbWVudAogICAgICAgKiB0byBwdXQgaXRzIGRvbSBpbiBhbm90aGVyIGxvY2F0aW9uLgogICAgICAgKgogICAgICAgKiBAdGhyb3dzIHtFcnJvcn0KICAgICAgICogQHN1cHByZXNzIHttaXNzaW5nUmV0dXJufQogICAgICAgKiBAcGFyYW0ge1N0YW1wZWRUZW1wbGF0ZX0gZG9tIHRvIGF0dGFjaCB0byB0aGUgZWxlbWVudC4KICAgICAgICogQHJldHVybiB7U2hhZG93Um9vdH0gbm9kZSB0byB3aGljaCB0aGUgZG9tIGhhcyBiZWVuIGF0dGFjaGVkLgogICAgICAgKi8KICAgICAgX2F0dGFjaERvbShkb20pIHsKICAgICAgICBpZiAodGhpcy5hdHRhY2hTaGFkb3cpIHsKICAgICAgICAgIGlmIChkb20pIHsKICAgICAgICAgICAgaWYgKCF0aGlzLnNoYWRvd1Jvb3QpIHsKICAgICAgICAgICAgICB0aGlzLmF0dGFjaFNoYWRvdyh7bW9kZTogJ29wZW4nfSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdGhpcy5zaGFkb3dSb290LmFwcGVuZENoaWxkKGRvbSk7CiAgICAgICAgICAgIHJldHVybiB0aGlzLnNoYWRvd1Jvb3Q7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTaGFkb3dET00gbm90IGF2YWlsYWJsZS4gJyArCiAgICAgICAgICAgIC8vIFRPRE8oc29ydmVsbCk6IG1vdmUgdG8gY29tcGlsZS10aW1lIGNvbmRpdGlvbmFsIHdoZW4gc3VwcG9ydGVkCiAgICAgICAgICAnUG9seW1lci5FbGVtZW50IGNhbiBjcmVhdGUgZG9tIGFzIGNoaWxkcmVuIGluc3RlYWQgb2YgaW4gJyArCiAgICAgICAgICAnU2hhZG93RE9NIGJ5IHNldHRpbmcgYHRoaXMucm9vdCA9IHRoaXM7XGAgYmVmb3JlIFxgcmVhZHlcYC4nKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBXaGVuIHVzaW5nIHRoZSBTaGFkeUNTUyBzY29waW5nIGFuZCBjdXN0b20gcHJvcGVydHkgc2hpbSwgY2F1c2VzIGFsbAogICAgICAgKiBzaGltbWVkIHN0eWxlcyBpbiB0aGlzIGVsZW1lbnQgKGFuZCBpdHMgc3VidHJlZSkgdG8gYmUgdXBkYXRlZAogICAgICAgKiBiYXNlZCBvbiBjdXJyZW50IGN1c3RvbSBwcm9wZXJ0eSB2YWx1ZXMuCiAgICAgICAqCiAgICAgICAqIFRoZSBvcHRpb25hbCBwYXJhbWV0ZXIgb3ZlcnJpZGVzIGlubGluZSBjdXN0b20gcHJvcGVydHkgc3R5bGVzIHdpdGggYW4KICAgICAgICogb2JqZWN0IG9mIHByb3BlcnRpZXMgd2hlcmUgdGhlIGtleXMgYXJlIENTUyBwcm9wZXJ0aWVzLCBhbmQgdGhlIHZhbHVlcwogICAgICAgKiBhcmUgc3RyaW5ncy4KICAgICAgICoKICAgICAgICogRXhhbXBsZTogYHRoaXMudXBkYXRlU3R5bGVzKHsnLS1jb2xvcic6ICdibHVlJ30pYAogICAgICAgKgogICAgICAgKiBUaGVzZSBwcm9wZXJ0aWVzIGFyZSByZXRhaW5lZCB1bmxlc3MgYSB2YWx1ZSBvZiBgbnVsbGAgaXMgc2V0LgogICAgICAgKgogICAgICAgKiBOb3RlOiBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IHN1cHBvcnQgdXBkYXRpbmcgQ1NTIG1peGlucy4KICAgICAgICogWW91IGNhbiBub3QgZHluYW1pY2FsbHkgY2hhbmdlIHRoZSB2YWx1ZSBvZiBhbiBgQGFwcGx5YC4KICAgICAgICoKICAgICAgICogQHBhcmFtIHtPYmplY3Q9fSBwcm9wZXJ0aWVzIEJhZyBvZiBjdXN0b20gcHJvcGVydHkga2V5L3ZhbHVlcyB0bwogICAgICAgKiAgIGFwcGx5IHRvIHRoaXMgZWxlbWVudC4KICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICogQHN1cHByZXNzIHtpbnZhbGlkQ2FzdHN9CiAgICAgICAqLwogICAgICB1cGRhdGVTdHlsZXMocHJvcGVydGllcykgewogICAgICAgIGlmICh3aW5kb3cuU2hhZHlDU1MpIHsKICAgICAgICAgIHdpbmRvdy5TaGFkeUNTUy5zdHlsZVN1YnRyZWUoLyoqIEB0eXBlIHshSFRNTEVsZW1lbnR9ICovKHRoaXMpLCBwcm9wZXJ0aWVzKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBSZXdyaXRlcyBhIGdpdmVuIFVSTCByZWxhdGl2ZSB0byBhIGJhc2UgVVJMLiBUaGUgYmFzZSBVUkwgZGVmYXVsdHMgdG8KICAgICAgICogdGhlIG9yaWdpbmFsIGxvY2F0aW9uIG9mIHRoZSBkb2N1bWVudCBjb250YWluaW5nIHRoZSBgZG9tLW1vZHVsZWAgZm9yCiAgICAgICAqIHRoaXMgZWxlbWVudC4gVGhpcyBtZXRob2Qgd2lsbCByZXR1cm4gdGhlIHNhbWUgVVJMIGJlZm9yZSBhbmQgYWZ0ZXIKICAgICAgICogYnVuZGxpbmcuCiAgICAgICAqCiAgICAgICAqIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIHBlcmZvcm1zIG5vIHJlc29sdXRpb24gZm9yIFVSTHMgdGhhdCBzdGFydAogICAgICAgKiB3aXRoIGAvYCAoYWJzb2x1dGUgVVJMcykgb3IgYCNgIChoYXNoIGlkZW50aWZpZXJzKS4gIEZvciBnZW5lcmFsIHB1cnBvc2UKICAgICAgICogVVJMIHJlc29sdXRpb24sIHVzZSBgd2luZG93LlVSTGAuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgVVJMIHRvIHJlc29sdmUuCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nPX0gYmFzZSBPcHRpb25hbCBiYXNlIFVSTCB0byByZXNvbHZlIGFnYWluc3QsIGRlZmF1bHRzCiAgICAgICAqIHRvIHRoZSBlbGVtZW50J3MgYGltcG9ydFBhdGhgCiAgICAgICAqIEByZXR1cm4ge3N0cmluZ30gUmV3cml0dGVuIFVSTCByZWxhdGl2ZSB0byBiYXNlCiAgICAgICAqLwogICAgICByZXNvbHZlVXJsKHVybCwgYmFzZSkgewogICAgICAgIGlmICghYmFzZSAmJiB0aGlzLmltcG9ydFBhdGgpIHsKICAgICAgICAgIGJhc2UgPSBQb2x5bWVyLlJlc29sdmVVcmwucmVzb2x2ZVVybCh0aGlzLmltcG9ydFBhdGgpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gUG9seW1lci5SZXNvbHZlVXJsLnJlc29sdmVVcmwodXJsLCBiYXNlKTsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIE92ZXJyaWRlcyBgUHJvcGVydHlBY2Nlc3NvcnNgIHRvIGFkZCBtYXAgb2YgZHluYW1pYyBmdW5jdGlvbnMgb24KICAgICAgICogdGVtcGxhdGUgaW5mbywgZm9yIGNvbnN1bXB0aW9uIGJ5IGBQcm9wZXJ0eUVmZmVjdHNgIHRlbXBsYXRlIGJpbmRpbmcKICAgICAgICogY29kZS4gVGhpcyBtYXAgZGV0ZXJtaW5lcyB3aGljaCBtZXRob2QgdGVtcGxhdGVzIHNob3VsZCBoYXZlIGFjY2Vzc29ycwogICAgICAgKiBjcmVhdGVkIGZvciB0aGVtLgogICAgICAgKgogICAgICAgKiBAb3ZlcnJpZGUKICAgICAgICogQHN1cHByZXNzIHttaXNzaW5nUHJvcGVydGllc30gSW50ZXJmYWNlcyBpbiBjbG9zdXJlIGRvIG5vdCBpbmhlcml0IHN0YXRpY3MsIGJ1dCBjbGFzc2VzIGRvCiAgICAgICAqLwogICAgICBzdGF0aWMgX3BhcnNlVGVtcGxhdGVDb250ZW50KHRlbXBsYXRlLCB0ZW1wbGF0ZUluZm8sIG5vZGVJbmZvKSB7CiAgICAgICAgdGVtcGxhdGVJbmZvLmR5bmFtaWNGbnMgPSB0ZW1wbGF0ZUluZm8uZHluYW1pY0ZucyB8fCB0aGlzLl9wcm9wZXJ0aWVzOwogICAgICAgIHJldHVybiBzdXBlci5fcGFyc2VUZW1wbGF0ZUNvbnRlbnQodGVtcGxhdGUsIHRlbXBsYXRlSW5mbywgbm9kZUluZm8pOwogICAgICB9CgogICAgfQoKICAgIHJldHVybiBQb2x5bWVyRWxlbWVudDsKICB9KTsKCiAgLyoqCiAgICogV2hlbiB1c2luZyB0aGUgU2hhZHlDU1Mgc2NvcGluZyBhbmQgY3VzdG9tIHByb3BlcnR5IHNoaW0sIGNhdXNlcyBhbGwKICAgKiBzaGltbWVkIGBzdHlsZXNgICh2aWEgYGN1c3RvbS1zdHlsZWApIGluIHRoZSBkb2N1bWVudCAoYW5kIGl0cyBzdWJ0cmVlKQogICAqIHRvIGJlIHVwZGF0ZWQgYmFzZWQgb24gY3VycmVudCBjdXN0b20gcHJvcGVydHkgdmFsdWVzLgogICAqCiAgICogVGhlIG9wdGlvbmFsIHBhcmFtZXRlciBvdmVycmlkZXMgaW5saW5lIGN1c3RvbSBwcm9wZXJ0eSBzdHlsZXMgd2l0aCBhbgogICAqIG9iamVjdCBvZiBwcm9wZXJ0aWVzIHdoZXJlIHRoZSBrZXlzIGFyZSBDU1MgcHJvcGVydGllcywgYW5kIHRoZSB2YWx1ZXMKICAgKiBhcmUgc3RyaW5ncy4KICAgKgogICAqIEV4YW1wbGU6IGBQb2x5bWVyLnVwZGF0ZVN0eWxlcyh7Jy0tY29sb3InOiAnYmx1ZSd9KWAKICAgKgogICAqIFRoZXNlIHByb3BlcnRpZXMgYXJlIHJldGFpbmVkIHVubGVzcyBhIHZhbHVlIG9mIGBudWxsYCBpcyBzZXQuCiAgICoKICAgKiBAcGFyYW0ge09iamVjdD19IHByb3BzIEJhZyBvZiBjdXN0b20gcHJvcGVydHkga2V5L3ZhbHVlcyB0bwogICAqICAgYXBwbHkgdG8gdGhlIGRvY3VtZW50LgogICAqIEByZXR1cm4ge3ZvaWR9CiAgICovCiAgUG9seW1lci51cGRhdGVTdHlsZXMgPSBmdW5jdGlvbihwcm9wcykgewogICAgaWYgKHdpbmRvdy5TaGFkeUNTUykgewogICAgICB3aW5kb3cuU2hhZHlDU1Muc3R5bGVEb2N1bWVudChwcm9wcyk7CiAgICB9CiAgfTsKCn0pKCk7Cjwvc2NyaXB0PjxzY3JpcHQ+CihmdW5jdGlvbigpIHsKICAndXNlIHN0cmljdCc7CgogIC8qKgogICAqIEBzdW1tYXJ5IENvbGxhcHNlIG11bHRpcGxlIGNhbGxiYWNrcyBpbnRvIG9uZSBpbnZvY2F0aW9uIGFmdGVyIGEgdGltZXIuCiAgICogQG1lbWJlcm9mIFBvbHltZXIKICAgKi8KICBjbGFzcyBEZWJvdW5jZXIgewogICAgY29uc3RydWN0b3IoKSB7CiAgICAgIHRoaXMuX2FzeW5jTW9kdWxlID0gbnVsbDsKICAgICAgdGhpcy5fY2FsbGJhY2sgPSBudWxsOwogICAgICB0aGlzLl90aW1lciA9IG51bGw7CiAgICB9CiAgICAvKioKICAgICAqIFNldHMgdGhlIHNjaGVkdWxlcjsgdGhhdCBpcywgYSBtb2R1bGUgd2l0aCB0aGUgQXN5bmMgaW50ZXJmYWNlLAogICAgICogYSBjYWxsYmFjayBhbmQgb3B0aW9uYWwgYXJndW1lbnRzIHRvIGJlIHBhc3NlZCB0byB0aGUgcnVuIGZ1bmN0aW9uCiAgICAgKiBmcm9tIHRoZSBhc3luYyBtb2R1bGUuCiAgICAgKgogICAgICogQHBhcmFtIHshQXN5bmNJbnRlcmZhY2V9IGFzeW5jTW9kdWxlIE9iamVjdCB3aXRoIEFzeW5jIGludGVyZmFjZS4KICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24oKX0gY2FsbGJhY2sgQ2FsbGJhY2sgdG8gcnVuLgogICAgICogQHJldHVybiB7dm9pZH0KICAgICAqLwogICAgc2V0Q29uZmlnKGFzeW5jTW9kdWxlLCBjYWxsYmFjaykgewogICAgICB0aGlzLl9hc3luY01vZHVsZSA9IGFzeW5jTW9kdWxlOwogICAgICB0aGlzLl9jYWxsYmFjayA9IGNhbGxiYWNrOwogICAgICB0aGlzLl90aW1lciA9IHRoaXMuX2FzeW5jTW9kdWxlLnJ1bigoKSA9PiB7CiAgICAgICAgdGhpcy5fdGltZXIgPSBudWxsOwogICAgICAgIHRoaXMuX2NhbGxiYWNrKCk7CiAgICAgIH0pOwogICAgfQogICAgLyoqCiAgICAgKiBDYW5jZWxzIGFuIGFjdGl2ZSBkZWJvdW5jZXIgYW5kIHJldHVybnMgYSByZWZlcmVuY2UgdG8gaXRzZWxmLgogICAgICoKICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgKi8KICAgIGNhbmNlbCgpIHsKICAgICAgaWYgKHRoaXMuaXNBY3RpdmUoKSkgewogICAgICAgIHRoaXMuX2FzeW5jTW9kdWxlLmNhbmNlbCh0aGlzLl90aW1lcik7CiAgICAgICAgdGhpcy5fdGltZXIgPSBudWxsOwogICAgICB9CiAgICB9CiAgICAvKioKICAgICAqIEZsdXNoZXMgYW4gYWN0aXZlIGRlYm91bmNlciBhbmQgcmV0dXJucyBhIHJlZmVyZW5jZSB0byBpdHNlbGYuCiAgICAgKgogICAgICogQHJldHVybiB7dm9pZH0KICAgICAqLwogICAgZmx1c2goKSB7CiAgICAgIGlmICh0aGlzLmlzQWN0aXZlKCkpIHsKICAgICAgICB0aGlzLmNhbmNlbCgpOwogICAgICAgIHRoaXMuX2NhbGxiYWNrKCk7CiAgICAgIH0KICAgIH0KICAgIC8qKgogICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBkZWJvdW5jZXIgaXMgYWN0aXZlLgogICAgICoKICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgYWN0aXZlLgogICAgICovCiAgICBpc0FjdGl2ZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuX3RpbWVyICE9IG51bGw7CiAgICB9CiAgICAvKioKICAgICAqIENyZWF0ZXMgYSBkZWJvdW5jZXIgaWYgbm8gZGVib3VuY2VyIGlzIHBhc3NlZCBhcyBhIHBhcmFtZXRlcgogICAgICogb3IgaXQgY2FuY2VscyBhbiBhY3RpdmUgZGVib3VuY2VyIG90aGVyd2lzZS4gVGhlIGZvbGxvd2luZwogICAgICogZXhhbXBsZSBzaG93cyBob3cgYSBkZWJvdW5jZXIgY2FuIGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyB3aXRoaW4gYQogICAgICogbWljcm90YXNrIGFuZCAiZGVib3VuY2VkIiBzdWNoIHRoYXQgdGhlIHByb3ZpZGVkIGNhbGxiYWNrIGZ1bmN0aW9uIGlzCiAgICAgKiBjYWxsZWQgb25jZS4gQWRkIHRoaXMgbWV0aG9kIHRvIGEgY3VzdG9tIGVsZW1lbnQ6CiAgICAgKgogICAgICogX2RlYm91bmNlV29yaygpIHsKICAgICAqICAgdGhpcy5fZGVib3VuY2VKb2IgPSBQb2x5bWVyLkRlYm91bmNlci5kZWJvdW5jZSh0aGlzLl9kZWJvdW5jZUpvYiwKICAgICAqICAgICAgIFBvbHltZXIuQXN5bmMubWljcm9UYXNrLCAoKSA9PiB7CiAgICAgKiAgICAgdGhpcy5fZG9Xb3JrKCk7CiAgICAgKiAgIH0pOwogICAgICogfQogICAgICoKICAgICAqIElmIHRoZSBgX2RlYm91bmNlV29ya2AgbWV0aG9kIGlzIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyB3aXRoaW4gdGhlIHNhbWUKICAgICAqIG1pY3JvdGFzaywgdGhlIGBfZG9Xb3JrYCBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBvbmx5IG9uY2UgYXQgdGhlIG5leHQKICAgICAqIG1pY3JvdGFzayBjaGVja3BvaW50LgogICAgICoKICAgICAqIE5vdGU6IEluIHRlc3RpbmcgaXQgaXMgb2Z0ZW4gY29udmVuaWVudCB0byBhdm9pZCBhc3luY2hyb255LiBUbyBhY2NvbXBsaXNoCiAgICAgKiB0aGlzIHdpdGggYSBkZWJvdW5jZXIsIHlvdSBjYW4gdXNlIGBQb2x5bWVyLmVucXVldWVEZWJvdW5jZXJgIGFuZAogICAgICogYFBvbHltZXIuZmx1c2hgLiBGb3IgZXhhbXBsZSwgZXh0ZW5kIHRoZSBhYm92ZSBleGFtcGxlIGJ5IGFkZGluZwogICAgICogYFBvbHltZXIuZW5xdWV1ZURlYm91bmNlcih0aGlzLl9kZWJvdW5jZUpvYilgIGF0IHRoZSBlbmQgb2YgdGhlCiAgICAgKiBgX2RlYm91bmNlV29ya2AgbWV0aG9kLiBUaGVuIGluIGEgdGVzdCwgY2FsbCBgUG9seW1lci5mbHVzaGAgdG8gZW5zdXJlCiAgICAgKiB0aGUgZGVib3VuY2VyIGhhcyBjb21wbGV0ZWQuCiAgICAgKgogICAgICogQHBhcmFtIHtEZWJvdW5jZXI/fSBkZWJvdW5jZXIgRGVib3VuY2VyIG9iamVjdC4KICAgICAqIEBwYXJhbSB7IUFzeW5jSW50ZXJmYWNlfSBhc3luY01vZHVsZSBPYmplY3Qgd2l0aCBBc3luYyBpbnRlcmZhY2UKICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24oKX0gY2FsbGJhY2sgQ2FsbGJhY2sgdG8gcnVuLgogICAgICogQHJldHVybiB7IURlYm91bmNlcn0gUmV0dXJucyBhIGRlYm91bmNlciBvYmplY3QuCiAgICAgKi8KICAgIHN0YXRpYyBkZWJvdW5jZShkZWJvdW5jZXIsIGFzeW5jTW9kdWxlLCBjYWxsYmFjaykgewogICAgICBpZiAoZGVib3VuY2VyIGluc3RhbmNlb2YgRGVib3VuY2VyKSB7CiAgICAgICAgZGVib3VuY2VyLmNhbmNlbCgpOwogICAgICB9IGVsc2UgewogICAgICAgIGRlYm91bmNlciA9IG5ldyBEZWJvdW5jZXIoKTsKICAgICAgfQogICAgICBkZWJvdW5jZXIuc2V0Q29uZmlnKGFzeW5jTW9kdWxlLCBjYWxsYmFjayk7CiAgICAgIHJldHVybiBkZWJvdW5jZXI7CiAgICB9CiAgfQoKICAvKiogQGNvbnN0ICovCiAgUG9seW1lci5EZWJvdW5jZXIgPSBEZWJvdW5jZXI7Cn0pKCk7Cjwvc2NyaXB0PjxzY3JpcHQ+CihmdW5jdGlvbigpIHsKCiAgJ3VzZSBzdHJpY3QnOwoKICAvLyBkZXRlY3QgbmF0aXZlIHRvdWNoIGFjdGlvbiBzdXBwb3J0CiAgbGV0IEhBU19OQVRJVkVfVEEgPSB0eXBlb2YgZG9jdW1lbnQuaGVhZC5zdHlsZS50b3VjaEFjdGlvbiA9PT0gJ3N0cmluZyc7CiAgbGV0IEdFU1RVUkVfS0VZID0gJ19fcG9seW1lckdlc3R1cmVzJzsKICBsZXQgSEFORExFRF9PQkogPSAnX19wb2x5bWVyR2VzdHVyZXNIYW5kbGVkJzsKICBsZXQgVE9VQ0hfQUNUSU9OID0gJ19fcG9seW1lckdlc3R1cmVzVG91Y2hBY3Rpb24nOwogIC8vIHJhZGl1cyBmb3IgdGFwIGFuZCB0cmFjawogIGxldCBUQVBfRElTVEFOQ0UgPSAyNTsKICBsZXQgVFJBQ0tfRElTVEFOQ0UgPSA1OwogIC8vIG51bWJlciBvZiBsYXN0IE4gdHJhY2sgcG9zaXRpb25zIHRvIGtlZXAKICBsZXQgVFJBQ0tfTEVOR1RIID0gMjsKCiAgLy8gRGlzYWJsaW5nICJtb3VzZSIgaGFuZGxlcnMgZm9yIDI1MDBtcyBpcyBlbm91Z2gKICBsZXQgTU9VU0VfVElNRU9VVCA9IDI1MDA7CiAgbGV0IE1PVVNFX0VWRU5UUyA9IFsnbW91c2Vkb3duJywgJ21vdXNlbW92ZScsICdtb3VzZXVwJywgJ2NsaWNrJ107CiAgLy8gYW4gYXJyYXkgb2YgYml0bWFzayB2YWx1ZXMgZm9yIG1hcHBpbmcgTW91c2VFdmVudC53aGljaCB0byBNb3VzZUV2ZW50LmJ1dHRvbnMKICBsZXQgTU9VU0VfV0hJQ0hfVE9fQlVUVE9OUyA9IFswLCAxLCA0LCAyXTsKICBsZXQgTU9VU0VfSEFTX0JVVFRPTlMgPSAoZnVuY3Rpb24oKSB7CiAgICB0cnkgewogICAgICByZXR1cm4gbmV3IE1vdXNlRXZlbnQoJ3Rlc3QnLCB7YnV0dG9uczogMX0pLmJ1dHRvbnMgPT09IDE7CiAgICB9IGNhdGNoIChlKSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICB9KSgpOwoKICAvKioKICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBQb3NzaWJsZSBtb3VzZSBldmVudCBuYW1lCiAgICogQHJldHVybiB7Ym9vbGVhbn0gdHJ1ZSBpZiBtb3VzZSBldmVudCwgZmFsc2UgaWYgbm90CiAgICovCiAgZnVuY3Rpb24gaXNNb3VzZUV2ZW50KG5hbWUpIHsKICAgIHJldHVybiBNT1VTRV9FVkVOVFMuaW5kZXhPZihuYW1lKSA+IC0xOwogIH0KCiAgLyogZXNsaW50IG5vLWVtcHR5OiBbImVycm9yIiwgeyAiYWxsb3dFbXB0eUNhdGNoIjogdHJ1ZSB9XSAqLwogIC8vIGNoZWNrIGZvciBwYXNzaXZlIGV2ZW50IGxpc3RlbmVycwogIGxldCBTVVBQT1JUU19QQVNTSVZFID0gZmFsc2U7CiAgKGZ1bmN0aW9uKCkgewogICAgdHJ5IHsKICAgICAgbGV0IG9wdHMgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sICdwYXNzaXZlJywge2dldCgpIHtTVVBQT1JUU19QQVNTSVZFID0gdHJ1ZTt9fSk7CiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCd0ZXN0JywgbnVsbCwgb3B0cyk7CiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCd0ZXN0JywgbnVsbCwgb3B0cyk7CiAgICB9IGNhdGNoKGUpIHt9CiAgfSkoKTsKCiAgLyoqCiAgICogR2VuZXJhdGUgc2V0dGluZ3MgZm9yIGV2ZW50IGxpc3RlbmVycywgZGVwZW5kYW50IG9uIGBQb2x5bWVyLnBhc3NpdmVUb3VjaEdlc3R1cmVzYAogICAqCiAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50TmFtZSBFdmVudCBuYW1lIHRvIGRldGVybWluZSBpZiBge3Bhc3NpdmV9YCBvcHRpb24gaXMgbmVlZGVkCiAgICogQHJldHVybiB7e3Bhc3NpdmU6IGJvb2xlYW59IHwgdW5kZWZpbmVkfSBPcHRpb25zIHRvIHVzZSBmb3IgYWRkRXZlbnRMaXN0ZW5lciBhbmQgcmVtb3ZlRXZlbnRMaXN0ZW5lcgogICAqLwogIGZ1bmN0aW9uIFBBU1NJVkVfVE9VQ0goZXZlbnROYW1lKSB7CiAgICBpZiAoaXNNb3VzZUV2ZW50KGV2ZW50TmFtZSkgfHwgZXZlbnROYW1lID09PSAndG91Y2hlbmQnKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmIChIQVNfTkFUSVZFX1RBICYmIFNVUFBPUlRTX1BBU1NJVkUgJiYgUG9seW1lci5wYXNzaXZlVG91Y2hHZXN0dXJlcykgewogICAgICByZXR1cm4ge3Bhc3NpdmU6IHRydWV9OwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuOwogICAgfQogIH0KCiAgLy8gQ2hlY2sgZm9yIHRvdWNoLW9ubHkgZGV2aWNlcwogIGxldCBJU19UT1VDSF9PTkxZID0gbmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvaVAoPzpbb2FdZHxob25lKXxBbmRyb2lkLyk7CgogIGxldCBHZXN0dXJlUmVjb2duaXplciA9IGZ1bmN0aW9uKCl7fTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFycwogIC8qKiBAdHlwZSB7ZnVuY3Rpb24oKTogdm9pZH0gKi8KICBHZXN0dXJlUmVjb2duaXplci5wcm90b3R5cGUucmVzZXQ7CiAgLyoqIEB0eXBlIHtmdW5jdGlvbihNb3VzZUV2ZW50KTogdm9pZCB8IHVuZGVmaW5lZH0gKi8KICBHZXN0dXJlUmVjb2duaXplci5wcm90b3R5cGUubW91c2Vkb3duOwogIC8qKiBAdHlwZSB7KGZ1bmN0aW9uKE1vdXNlRXZlbnQpOiB2b2lkIHwgdW5kZWZpbmVkKX0gKi8KICBHZXN0dXJlUmVjb2duaXplci5wcm90b3R5cGUubW91c2Vtb3ZlOwogIC8qKiBAdHlwZSB7KGZ1bmN0aW9uKE1vdXNlRXZlbnQpOiB2b2lkIHwgdW5kZWZpbmVkKX0gKi8KICBHZXN0dXJlUmVjb2duaXplci5wcm90b3R5cGUubW91c2V1cDsKICAvKiogQHR5cGUgeyhmdW5jdGlvbihUb3VjaEV2ZW50KTogdm9pZCB8IHVuZGVmaW5lZCl9ICovCiAgR2VzdHVyZVJlY29nbml6ZXIucHJvdG90eXBlLnRvdWNoc3RhcnQ7CiAgLyoqIEB0eXBlIHsoZnVuY3Rpb24oVG91Y2hFdmVudCk6IHZvaWQgfCB1bmRlZmluZWQpfSAqLwogIEdlc3R1cmVSZWNvZ25pemVyLnByb3RvdHlwZS50b3VjaG1vdmU7CiAgLyoqIEB0eXBlIHsoZnVuY3Rpb24oVG91Y2hFdmVudCk6IHZvaWQgfCB1bmRlZmluZWQpfSAqLwogIEdlc3R1cmVSZWNvZ25pemVyLnByb3RvdHlwZS50b3VjaGVuZDsKICAvKiogQHR5cGUgeyhmdW5jdGlvbihNb3VzZUV2ZW50KTogdm9pZCB8IHVuZGVmaW5lZCl9ICovCiAgR2VzdHVyZVJlY29nbml6ZXIucHJvdG90eXBlLmNsaWNrOwoKICAvLyBrZWVwIHRyYWNrIG9mIGFueSBsYWJlbHMgaGl0IGJ5IHRoZSBtb3VzZUNhbmNlbGxlcgogIC8qKiBAdHlwZSB7IUFycmF5PCFIVE1MTGFiZWxFbGVtZW50Pn0gKi8KICBjb25zdCBjbGlja2VkTGFiZWxzID0gW107CgogIC8qKiBAdHlwZSB7IU9iamVjdDxib29sZWFuPn0gKi8KICBjb25zdCBsYWJlbGxhYmxlID0gewogICAgJ2J1dHRvbic6IHRydWUsCiAgICAnaW5wdXQnOiB0cnVlLAogICAgJ2tleWdlbic6IHRydWUsCiAgICAnbWV0ZXInOiB0cnVlLAogICAgJ291dHB1dCc6IHRydWUsCiAgICAndGV4dGFyZWEnOiB0cnVlLAogICAgJ3Byb2dyZXNzJzogdHJ1ZSwKICAgICdzZWxlY3QnOiB0cnVlCiAgfTsKCiAgLy8gRGVmaW5lZCBhdCBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9mb3JtLWNvbnRyb2wtaW5mcmFzdHJ1Y3R1cmUuaHRtbCNlbmFibGluZy1hbmQtZGlzYWJsaW5nLWZvcm0tY29udHJvbHM6LXRoZS1kaXNhYmxlZC1hdHRyaWJ1dGUKICAvKiogQHR5cGUgeyFPYmplY3Q8Ym9vbGVhbj59ICovCiAgY29uc3QgY2FuQmVEaXNhYmxlZCA9IHsKICAgICdidXR0b24nOiB0cnVlLAogICAgJ2NvbW1hbmQnOiB0cnVlLAogICAgJ2ZpZWxkc2V0JzogdHJ1ZSwKICAgICdpbnB1dCc6IHRydWUsCiAgICAna2V5Z2VuJzogdHJ1ZSwKICAgICdvcHRncm91cCc6IHRydWUsCiAgICAnb3B0aW9uJzogdHJ1ZSwKICAgICdzZWxlY3QnOiB0cnVlLAogICAgJ3RleHRhcmVhJzogdHJ1ZQogIH07CgogIC8qKgogICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsIEVsZW1lbnQgdG8gY2hlY2sgbGFiZWxsaW5nIHN0YXR1cwogICAqIEByZXR1cm4ge2Jvb2xlYW59IGVsZW1lbnQgY2FuIGhhdmUgbGFiZWxzCiAgICovCiAgZnVuY3Rpb24gY2FuQmVMYWJlbGxlZChlbCkgewogICAgcmV0dXJuIGxhYmVsbGFibGVbZWwubG9jYWxOYW1lXSB8fCBmYWxzZTsKICB9CgogIC8qKgogICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsIEVsZW1lbnQgdGhhdCBtYXkgYmUgbGFiZWxsZWQuCiAgICogQHJldHVybiB7IUFycmF5PCFIVE1MTGFiZWxFbGVtZW50Pn0gUmVsZXZhbnQgbGFiZWwgZm9yIGBlbGAKICAgKi8KICBmdW5jdGlvbiBtYXRjaGluZ0xhYmVscyhlbCkgewogICAgbGV0IGxhYmVscyA9IEFycmF5LmZyb20oLyoqIEB0eXBlIHtIVE1MSW5wdXRFbGVtZW50fSAqLyhlbCkubGFiZWxzIHx8IFtdKTsKICAgIC8vIElFIGRvZXNuJ3QgaGF2ZSBgbGFiZWxzYCBhbmQgU2FmYXJpIGRvZXNuJ3QgcG9wdWxhdGUgYGxhYmVsc2AKICAgIC8vIGlmIGVsZW1lbnQgaXMgaW4gYSBzaGFkb3dyb290LgogICAgLy8gSW4gdGhpcyBpbnN0YW5jZSwgZmluZGluZyB0aGUgbm9uLWFuY2VzdG9yIGxhYmVscyBpcyBlbm91Z2gsCiAgICAvLyBhcyB0aGUgbW91c2VDYW5jZWxsb3IgY29kZSB3aWxsIGhhbmRsZSBhbmNzdG9yIGxhYmVscwogICAgaWYgKCFsYWJlbHMubGVuZ3RoKSB7CiAgICAgIGxhYmVscyA9IFtdOwogICAgICBsZXQgcm9vdCA9IGVsLmdldFJvb3ROb2RlKCk7CiAgICAgIC8vIGlmIHRoZXJlIGlzIGFuIGlkIG9uIGBlbGAsIGNoZWNrIGZvciBhbGwgbGFiZWxzIHdpdGggYSBtYXRjaGluZyBgZm9yYCBhdHRyaWJ1dGUKICAgICAgaWYgKGVsLmlkKSB7CiAgICAgICAgbGV0IG1hdGNoaW5nID0gcm9vdC5xdWVyeVNlbGVjdG9yQWxsKGBsYWJlbFtmb3IgPSAke2VsLmlkfV1gKTsKICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1hdGNoaW5nLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICBsYWJlbHMucHVzaCgvKiogQHR5cGUgeyFIVE1MTGFiZWxFbGVtZW50fSAqLyhtYXRjaGluZ1tpXSkpOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIGxhYmVsczsKICB9CgogIC8vIHRvdWNoIHdpbGwgbWFrZSBzeW50aGV0aWMgbW91c2UgZXZlbnRzCiAgLy8gYHByZXZlbnREZWZhdWx0YCBvbiB0b3VjaGVuZCB3aWxsIGNhbmNlbCB0aGVtLAogIC8vIGJ1dCB0aGlzIGJyZWFrcyBgPGlucHV0PmAgZm9jdXMgYW5kIGxpbmsgY2xpY2tzCiAgLy8gZGlzYWJsZSBtb3VzZSBoYW5kbGVycyBmb3IgTU9VU0VfVElNRU9VVCBtcyBhZnRlcgogIC8vIGEgdG91Y2hlbmQgdG8gaWdub3JlIHN5bnRoZXRpYyBtb3VzZSBldmVudHMKICBsZXQgbW91c2VDYW5jZWxsZXIgPSBmdW5jdGlvbihtb3VzZUV2ZW50KSB7CiAgICAvLyBDaGVjayBmb3Igc291cmNlQ2FwYWJpbGl0aWVzLCB1c2VkIHRvIGRpc3Rpbmd1aXNoIHN5bnRoZXRpYyBldmVudHMKICAgIC8vIGlmIG1vdXNlRXZlbnQgZGlkIG5vdCBjb21lIGZyb20gYSBkZXZpY2UgdGhhdCBmaXJlcyB0b3VjaCBldmVudHMsCiAgICAvLyBpdCB3YXMgbWFkZSBieSBhIHJlYWwgbW91c2UgYW5kIHNob3VsZCBiZSBjb3VudGVkCiAgICAvLyBodHRwOi8vd2ljZy5naXRodWIuaW8vSW5wdXREZXZpY2VDYXBhYmlsaXRpZXMvI2RvbS1pbnB1dGRldmljZWNhcGFiaWxpdGllcy1maXJlc3RvdWNoZXZlbnRzCiAgICBsZXQgc2MgPSBtb3VzZUV2ZW50LnNvdXJjZUNhcGFiaWxpdGllczsKICAgIGlmIChzYyAmJiAhc2MuZmlyZXNUb3VjaEV2ZW50cykgewogICAgICByZXR1cm47CiAgICB9CiAgICAvLyBza2lwIHN5bnRoZXRpYyBtb3VzZSBldmVudHMKICAgIG1vdXNlRXZlbnRbSEFORExFRF9PQkpdID0ge3NraXA6IHRydWV9OwogICAgLy8gZGlzYWJsZSAiZ2hvc3QgY2xpY2tzIgogICAgaWYgKG1vdXNlRXZlbnQudHlwZSA9PT0gJ2NsaWNrJykgewogICAgICBsZXQgY2xpY2tGcm9tTGFiZWwgPSBmYWxzZTsKICAgICAgbGV0IHBhdGggPSBtb3VzZUV2ZW50LmNvbXBvc2VkUGF0aCAmJiBtb3VzZUV2ZW50LmNvbXBvc2VkUGF0aCgpOwogICAgICBpZiAocGF0aCkgewogICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGF0aC5sZW5ndGg7IGkrKykgewogICAgICAgICAgaWYgKHBhdGhbaV0ubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7CiAgICAgICAgICAgIGlmIChwYXRoW2ldLmxvY2FsTmFtZSA9PT0gJ2xhYmVsJykgewogICAgICAgICAgICAgIGNsaWNrZWRMYWJlbHMucHVzaChwYXRoW2ldKTsKICAgICAgICAgICAgfSBlbHNlIGlmIChjYW5CZUxhYmVsbGVkKHBhdGhbaV0pKSB7CiAgICAgICAgICAgICAgbGV0IG93bmVyTGFiZWxzID0gbWF0Y2hpbmdMYWJlbHMocGF0aFtpXSk7CiAgICAgICAgICAgICAgLy8gY2hlY2sgaWYgb25lIG9mIHRoZSBjbGlja2VkIGxhYmVscyBpcyBsYWJlbGxpbmcgdGhpcyBlbGVtZW50CiAgICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBvd25lckxhYmVscy5sZW5ndGg7IGorKykgewogICAgICAgICAgICAgICAgY2xpY2tGcm9tTGFiZWwgPSBjbGlja0Zyb21MYWJlbCB8fCBjbGlja2VkTGFiZWxzLmluZGV4T2Yob3duZXJMYWJlbHNbal0pID4gLTE7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBpZiAocGF0aFtpXSA9PT0gUE9JTlRFUlNUQVRFLm1vdXNlLnRhcmdldCkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIC8vIGlmIG9uZSBvZiB0aGUgY2xpY2tlZCBsYWJlbHMgd2FzIGxhYmVsbGluZyB0aGUgdGFyZ2V0IGVsZW1lbnQsCiAgICAgIC8vIHRoaXMgaXMgbm90IGEgZ2hvc3QgY2xpY2sKICAgICAgaWYgKGNsaWNrRnJvbUxhYmVsKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIG1vdXNlRXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICAgbW91c2VFdmVudC5zdG9wUHJvcGFnYXRpb24oKTsKICAgIH0KICB9OwoKICAvKioKICAgKiBAcGFyYW0ge2Jvb2xlYW49fSBzZXR1cCBUcnVlIHRvIGFkZCwgZmFsc2UgdG8gcmVtb3ZlLgogICAqIEByZXR1cm4ge3ZvaWR9CiAgICovCiAgZnVuY3Rpb24gc2V0dXBUZWFyZG93bk1vdXNlQ2FuY2VsbGVyKHNldHVwKSB7CiAgICBsZXQgZXZlbnRzID0gSVNfVE9VQ0hfT05MWSA/IFsnY2xpY2snXSA6IE1PVVNFX0VWRU5UUzsKICAgIGZvciAobGV0IGkgPSAwLCBlbjsgaSA8IGV2ZW50cy5sZW5ndGg7IGkrKykgewogICAgICBlbiA9IGV2ZW50c1tpXTsKICAgICAgaWYgKHNldHVwKSB7CiAgICAgICAgLy8gcmVzZXQgY2xpY2tMYWJlbHMgYXJyYXkKICAgICAgICBjbGlja2VkTGFiZWxzLmxlbmd0aCA9IDA7CiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihlbiwgbW91c2VDYW5jZWxsZXIsIHRydWUpOwogICAgICB9IGVsc2UgewogICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoZW4sIG1vdXNlQ2FuY2VsbGVyLCB0cnVlKTsKICAgICAgfQogICAgfQogIH0KCiAgZnVuY3Rpb24gaWdub3JlTW91c2UoZSkgewogICAgaWYgKCFQT0lOVEVSU1RBVEUubW91c2UubW91c2VJZ25vcmVKb2IpIHsKICAgICAgc2V0dXBUZWFyZG93bk1vdXNlQ2FuY2VsbGVyKHRydWUpOwogICAgfQogICAgbGV0IHVuc2V0ID0gZnVuY3Rpb24oKSB7CiAgICAgIHNldHVwVGVhcmRvd25Nb3VzZUNhbmNlbGxlcigpOwogICAgICBQT0lOVEVSU1RBVEUubW91c2UudGFyZ2V0ID0gbnVsbDsKICAgICAgUE9JTlRFUlNUQVRFLm1vdXNlLm1vdXNlSWdub3JlSm9iID0gbnVsbDsKICAgIH07CiAgICBQT0lOVEVSU1RBVEUubW91c2UudGFyZ2V0ID0gZS5jb21wb3NlZFBhdGgoKVswXTsKICAgIFBPSU5URVJTVEFURS5tb3VzZS5tb3VzZUlnbm9yZUpvYiA9IFBvbHltZXIuRGVib3VuY2VyLmRlYm91bmNlKAogICAgICAgICAgUE9JTlRFUlNUQVRFLm1vdXNlLm1vdXNlSWdub3JlSm9iCiAgICAgICAgLCBQb2x5bWVyLkFzeW5jLnRpbWVPdXQuYWZ0ZXIoTU9VU0VfVElNRU9VVCkKICAgICAgICAsIHVuc2V0KTsKICB9CgogIC8qKgogICAqIEBwYXJhbSB7TW91c2VFdmVudH0gZXYgZXZlbnQgdG8gdGVzdCBmb3IgbGVmdCBtb3VzZSBidXR0b24gZG93bgogICAqIEByZXR1cm4ge2Jvb2xlYW59IGhhcyBsZWZ0IG1vdXNlIGJ1dHRvbiBkb3duCiAgICovCiAgZnVuY3Rpb24gaGFzTGVmdE1vdXNlQnV0dG9uKGV2KSB7CiAgICBsZXQgdHlwZSA9IGV2LnR5cGU7CiAgICAvLyBleGl0IGVhcmx5IGlmIHRoZSBldmVudCBpcyBub3QgYSBtb3VzZSBldmVudAogICAgaWYgKCFpc01vdXNlRXZlbnQodHlwZSkpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgLy8gZXYuYnV0dG9uIGlzIG5vdCByZWxpYWJsZSBmb3IgbW91c2Vtb3ZlICgwIGlzIG92ZXJsb2FkZWQgYXMgYm90aCBsZWZ0IGJ1dHRvbiBhbmQgbm8gYnV0dG9ucykKICAgIC8vIGluc3RlYWQgd2UgdXNlIGV2LmJ1dHRvbnMgKGJpdG1hc2sgb2YgYnV0dG9ucykgb3IgZmFsbCBiYWNrIHRvIGV2LndoaWNoIChkZXByZWNhdGVkLCAwIGZvciBubyBidXR0b25zLCAxIGZvciBsZWZ0IGJ1dHRvbikKICAgIGlmICh0eXBlID09PSAnbW91c2Vtb3ZlJykgewogICAgICAvLyBhbGxvdyB1bmRlZmluZWQgZm9yIHRlc3RpbmcgZXZlbnRzCiAgICAgIGxldCBidXR0b25zID0gZXYuYnV0dG9ucyA9PT0gdW5kZWZpbmVkID8gMSA6IGV2LmJ1dHRvbnM7CiAgICAgIGlmICgoZXYgaW5zdGFuY2VvZiB3aW5kb3cuTW91c2VFdmVudCkgJiYgIU1PVVNFX0hBU19CVVRUT05TKSB7CiAgICAgICAgYnV0dG9ucyA9IE1PVVNFX1dISUNIX1RPX0JVVFRPTlNbZXYud2hpY2hdIHx8IDA7CiAgICAgIH0KICAgICAgLy8gYnV0dG9ucyBpcyBhIGJpdG1hc2ssIGNoZWNrIHRoYXQgdGhlIGxlZnQgYnV0dG9uIGJpdCBpcyBzZXQgKDEpCiAgICAgIHJldHVybiBCb29sZWFuKGJ1dHRvbnMgJiAxKTsKICAgIH0gZWxzZSB7CiAgICAgIC8vIGFsbG93IHVuZGVmaW5lZCBmb3IgdGVzdGluZyBldmVudHMKICAgICAgbGV0IGJ1dHRvbiA9IGV2LmJ1dHRvbiA9PT0gdW5kZWZpbmVkID8gMCA6IGV2LmJ1dHRvbjsKICAgICAgLy8gZXYuYnV0dG9uIGlzIDAgaW4gbW91c2Vkb3duL21vdXNldXAvY2xpY2sgZm9yIGxlZnQgYnV0dG9uIGFjdGl2YXRpb24KICAgICAgcmV0dXJuIGJ1dHRvbiA9PT0gMDsKICAgIH0KICB9CgogIGZ1bmN0aW9uIGlzU3ludGhldGljQ2xpY2soZXYpIHsKICAgIGlmIChldi50eXBlID09PSAnY2xpY2snKSB7CiAgICAgIC8vIGV2LmRldGFpbCBpcyAwIGZvciBIVE1MRWxlbWVudC5jbGljayBpbiBtb3N0IGJyb3dzZXJzCiAgICAgIGlmIChldi5kZXRhaWwgPT09IDApIHsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgICAvLyBpbiB0aGUgd29yc3QgY2FzZSwgY2hlY2sgdGhhdCB0aGUgeC95IHBvc2l0aW9uIG9mIHRoZSBjbGljayBpcyB3aXRoaW4KICAgICAgLy8gdGhlIGJvdW5kaW5nIGJveCBvZiB0aGUgdGFyZ2V0IG9mIHRoZSBldmVudAogICAgICAvLyBUaGFua3MgSUUgMTAgPjooCiAgICAgIGxldCB0ID0gR2VzdHVyZXMuX2ZpbmRPcmlnaW5hbFRhcmdldChldik7CiAgICAgIC8vIG1ha2Ugc3VyZSB0aGUgdGFyZ2V0IG9mIHRoZSBldmVudCBpcyBhbiBlbGVtZW50IHNvIHdlIGNhbiB1c2UgZ2V0Qm91bmRpbmdDbGllbnRSZWN0LAogICAgICAvLyBpZiBub3QsIGp1c3QgYXNzdW1lIGl0IGlzIGEgc3ludGhldGljIGNsaWNrCiAgICAgIGlmICghdC5ub2RlVHlwZSB8fCAvKiogQHR5cGUge0VsZW1lbnR9ICovKHQpLm5vZGVUeXBlICE9PSBOb2RlLkVMRU1FTlRfTk9ERSkgewogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICAgIGxldCBiY3IgPSAvKiogQHR5cGUge0VsZW1lbnR9ICovKHQpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICAvLyB1c2UgcGFnZSB4L3kgdG8gYWNjb3VudCBmb3Igc2Nyb2xsaW5nCiAgICAgIGxldCB4ID0gZXYucGFnZVgsIHkgPSBldi5wYWdlWTsKICAgICAgLy8gZXYgaXMgYSBzeW50aGV0aWMgY2xpY2sgaWYgdGhlIHBvc2l0aW9uIGlzIG91dHNpZGUgdGhlIGJvdW5kaW5nIGJveCBvZiB0aGUgdGFyZ2V0CiAgICAgIHJldHVybiAhKCh4ID49IGJjci5sZWZ0ICYmIHggPD0gYmNyLnJpZ2h0KSAmJiAoeSA+PSBiY3IudG9wICYmIHkgPD0gYmNyLmJvdHRvbSkpOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgbGV0IFBPSU5URVJTVEFURSA9IHsKICAgIG1vdXNlOiB7CiAgICAgIHRhcmdldDogbnVsbCwKICAgICAgbW91c2VJZ25vcmVKb2I6IG51bGwKICAgIH0sCiAgICB0b3VjaDogewogICAgICB4OiAwLAogICAgICB5OiAwLAogICAgICBpZDogLTEsCiAgICAgIHNjcm9sbERlY2lkZWQ6IGZhbHNlCiAgICB9CiAgfTsKCiAgZnVuY3Rpb24gZmlyc3RUb3VjaEFjdGlvbihldikgewogICAgbGV0IHRhID0gJ2F1dG8nOwogICAgbGV0IHBhdGggPSBldi5jb21wb3NlZFBhdGggJiYgZXYuY29tcG9zZWRQYXRoKCk7CiAgICBpZiAocGF0aCkgewogICAgICBmb3IgKGxldCBpID0gMCwgbjsgaSA8IHBhdGgubGVuZ3RoOyBpKyspIHsKICAgICAgICBuID0gcGF0aFtpXTsKICAgICAgICBpZiAobltUT1VDSF9BQ1RJT05dKSB7CiAgICAgICAgICB0YSA9IG5bVE9VQ0hfQUNUSU9OXTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIHRhOwogIH0KCiAgZnVuY3Rpb24gdHJhY2tEb2N1bWVudChzdGF0ZU9iaiwgbW92ZWZuLCB1cGZuKSB7CiAgICBzdGF0ZU9iai5tb3ZlZm4gPSBtb3ZlZm47CiAgICBzdGF0ZU9iai51cGZuID0gdXBmbjsKICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIG1vdmVmbik7CiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgdXBmbik7CiAgfQoKICBmdW5jdGlvbiB1bnRyYWNrRG9jdW1lbnQoc3RhdGVPYmopIHsKICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHN0YXRlT2JqLm1vdmVmbik7CiAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgc3RhdGVPYmoudXBmbik7CiAgICBzdGF0ZU9iai5tb3ZlZm4gPSBudWxsOwogICAgc3RhdGVPYmoudXBmbiA9IG51bGw7CiAgfQoKICAvLyB1c2UgYSBkb2N1bWVudC13aWRlIHRvdWNoZW5kIGxpc3RlbmVyIHRvIHN0YXJ0IHRoZSBnaG9zdC1jbGljayBwcmV2ZW50aW9uIG1lY2hhbmlzbQogIC8vIFVzZSBwYXNzaXZlIGV2ZW50IGxpc3RlbmVycywgaWYgc3VwcG9ydGVkLCB0byBub3QgYWZmZWN0IHNjcm9sbGluZyBwZXJmb3JtYW5jZQogIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgaWdub3JlTW91c2UsIFNVUFBPUlRTX1BBU1NJVkUgPyB7cGFzc2l2ZTogdHJ1ZX0gOiBmYWxzZSk7CgogIC8qKgogICAqIE1vZHVsZSBmb3IgYWRkaW5nIGxpc3RlbmVycyB0byBhIG5vZGUgZm9yIHRoZSBmb2xsb3dpbmcgbm9ybWFsaXplZAogICAqIGNyb3NzLXBsYXRmb3JtICJnZXN0dXJlIiBldmVudHM6CiAgICogLSBgZG93bmAgLSBtb3VzZSBvciB0b3VjaCB3ZW50IGRvd24KICAgKiAtIGB1cGAgLSBtb3VzZSBvciB0b3VjaCB3ZW50IHVwCiAgICogLSBgdGFwYCAtIG1vdXNlIGNsaWNrIG9yIGZpbmdlciB0YXAKICAgKiAtIGB0cmFja2AgLSBtb3VzZSBkcmFnIG9yIHRvdWNoIG1vdmUKICAgKgogICAqIEBuYW1lc3BhY2UKICAgKiBAbWVtYmVyb2YgUG9seW1lcgogICAqIEBzdW1tYXJ5IE1vZHVsZSBmb3IgYWRkaW5nIGNyb3NzLXBsYXRmb3JtIGdlc3R1cmUgZXZlbnQgbGlzdGVuZXJzLgogICAqLwogIGNvbnN0IEdlc3R1cmVzID0gewogICAgZ2VzdHVyZXM6IHt9LAogICAgcmVjb2duaXplcnM6IFtdLAoKICAgIC8qKgogICAgICogRmluZHMgdGhlIGVsZW1lbnQgcmVuZGVyZWQgb24gdGhlIHNjcmVlbiBhdCB0aGUgcHJvdmlkZWQgY29vcmRpbmF0ZXMuCiAgICAgKgogICAgICogU2ltaWxhciB0byBgZG9jdW1lbnQuZWxlbWVudEZyb21Qb2ludGAsIGJ1dCBwaWVyY2VzIHRocm91Z2gKICAgICAqIHNoYWRvdyByb290cy4KICAgICAqCiAgICAgKiBAbWVtYmVyb2YgUG9seW1lci5HZXN0dXJlcwogICAgICogQHBhcmFtIHtudW1iZXJ9IHggSG9yaXpvbnRhbCBwaXhlbCBjb29yZGluYXRlCiAgICAgKiBAcGFyYW0ge251bWJlcn0geSBWZXJ0aWNhbCBwaXhlbCBjb29yZGluYXRlCiAgICAgKiBAcmV0dXJuIHtFbGVtZW50fSBSZXR1cm5zIHRoZSBkZWVwZXN0IHNoYWRvd1Jvb3QgaW5jbHVzaXZlIGVsZW1lbnQKICAgICAqIGZvdW5kIGF0IHRoZSBzY3JlZW4gcG9zaXRpb24gZ2l2ZW4uCiAgICAgKi8KICAgIGRlZXBUYXJnZXRGaW5kOiBmdW5jdGlvbih4LCB5KSB7CiAgICAgIGxldCBub2RlID0gZG9jdW1lbnQuZWxlbWVudEZyb21Qb2ludCh4LCB5KTsKICAgICAgbGV0IG5leHQgPSBub2RlOwogICAgICAvLyB0aGlzIGNvZGUgcGF0aCBpcyBvbmx5IHRha2VuIHdoZW4gbmF0aXZlIFNoYWRvd0RPTSBpcyB1c2VkCiAgICAgIC8vIGlmIHRoZXJlIGlzIGEgc2hhZG93cm9vdCwgaXQgbWF5IGhhdmUgYSBub2RlIGF0IHgveQogICAgICAvLyBpZiB0aGVyZSBpcyBub3QgYSBzaGFkb3dyb290LCBleGl0IHRoZSBsb29wCiAgICAgIHdoaWxlIChuZXh0ICYmIG5leHQuc2hhZG93Um9vdCAmJiAhd2luZG93LlNoYWR5RE9NKSB7CiAgICAgICAgLy8gaWYgdGhlcmUgaXMgYSBub2RlIGF0IHgveSBpbiB0aGUgc2hhZG93cm9vdCwgbG9vayBkZWVwZXIKICAgICAgICBsZXQgb2xkTmV4dCA9IG5leHQ7CiAgICAgICAgbmV4dCA9IG5leHQuc2hhZG93Um9vdC5lbGVtZW50RnJvbVBvaW50KHgsIHkpOwogICAgICAgIC8vIG9uIFNhZmFyaSwgZWxlbWVudEZyb21Qb2ludCBtYXkgcmV0dXJuIHRoZSBzaGFkb3dSb290IGhvc3QKICAgICAgICBpZiAob2xkTmV4dCA9PT0gbmV4dCkgewogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGlmIChuZXh0KSB7CiAgICAgICAgICBub2RlID0gbmV4dDsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIG5vZGU7CiAgICB9LAogICAgLyoqCiAgICAgKiBhIGNoZWFwZXIgY2hlY2sgdGhhbiBldi5jb21wb3NlZFBhdGgoKVswXTsKICAgICAqCiAgICAgKiBAcHJpdmF0ZQogICAgICogQHBhcmFtIHtFdmVudH0gZXYgRXZlbnQuCiAgICAgKiBAcmV0dXJuIHtFdmVudFRhcmdldH0gUmV0dXJucyB0aGUgZXZlbnQgdGFyZ2V0LgogICAgICovCiAgICBfZmluZE9yaWdpbmFsVGFyZ2V0OiBmdW5jdGlvbihldikgewogICAgICAvLyBzaGFkb3dkb20KICAgICAgaWYgKGV2LmNvbXBvc2VkUGF0aCkgewogICAgICAgIGNvbnN0IHRhcmdldHMgPSAvKiogQHR5cGUgeyFBcnJheTwhRXZlbnRUYXJnZXQ+fSAqLyhldi5jb21wb3NlZFBhdGgoKSk7CiAgICAgICAgLy8gSXQgc2hvdWxkbid0IGJlLCBidXQgc29tZXRpbWVzIHRhcmdldHMgaXMgZW1wdHkgKHdpbmRvdyBvbiBTYWZhcmkpLgogICAgICAgIHJldHVybiB0YXJnZXRzLmxlbmd0aCA+IDAgPyB0YXJnZXRzWzBdIDogZXYudGFyZ2V0OwogICAgICB9CiAgICAgIC8vIHNoYWR5ZG9tCiAgICAgIHJldHVybiBldi50YXJnZXQ7CiAgICB9LAoKICAgIC8qKgogICAgICogQHByaXZhdGUKICAgICAqIEBwYXJhbSB7RXZlbnR9IGV2IEV2ZW50LgogICAgICogQHJldHVybiB7dm9pZH0KICAgICAqLwogICAgX2hhbmRsZU5hdGl2ZTogZnVuY3Rpb24oZXYpIHsKICAgICAgbGV0IGhhbmRsZWQ7CiAgICAgIGxldCB0eXBlID0gZXYudHlwZTsKICAgICAgbGV0IG5vZGUgPSBldi5jdXJyZW50VGFyZ2V0OwogICAgICBsZXQgZ29iaiA9IG5vZGVbR0VTVFVSRV9LRVldOwogICAgICBpZiAoIWdvYmopIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgbGV0IGdzID0gZ29ialt0eXBlXTsKICAgICAgaWYgKCFncykgewogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBpZiAoIWV2W0hBTkRMRURfT0JKXSkgewogICAgICAgIGV2W0hBTkRMRURfT0JKXSA9IHt9OwogICAgICAgIGlmICh0eXBlLnNsaWNlKDAsIDUpID09PSAndG91Y2gnKSB7CiAgICAgICAgICBldiA9IC8qKiBAdHlwZSB7VG91Y2hFdmVudH0gKi8oZXYpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXNlbGYtYXNzaWduCiAgICAgICAgICBsZXQgdCA9IGV2LmNoYW5nZWRUb3VjaGVzWzBdOwogICAgICAgICAgaWYgKHR5cGUgPT09ICd0b3VjaHN0YXJ0JykgewogICAgICAgICAgICAvLyBvbmx5IGhhbmRsZSB0aGUgZmlyc3QgZmluZ2VyCiAgICAgICAgICAgIGlmIChldi50b3VjaGVzLmxlbmd0aCA9PT0gMSkgewogICAgICAgICAgICAgIFBPSU5URVJTVEFURS50b3VjaC5pZCA9IHQuaWRlbnRpZmllcjsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgaWYgKFBPSU5URVJTVEFURS50b3VjaC5pZCAhPT0gdC5pZGVudGlmaWVyKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KICAgICAgICAgIGlmICghSEFTX05BVElWRV9UQSkgewogICAgICAgICAgICBpZiAodHlwZSA9PT0gJ3RvdWNoc3RhcnQnIHx8IHR5cGUgPT09ICd0b3VjaG1vdmUnKSB7CiAgICAgICAgICAgICAgR2VzdHVyZXMuX2hhbmRsZVRvdWNoQWN0aW9uKGV2KTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICBoYW5kbGVkID0gZXZbSEFORExFRF9PQkpdOwogICAgICAvLyB1c2VkIHRvIGlnbm9yZSBzeW50aGV0aWMgbW91c2UgZXZlbnRzCiAgICAgIGlmIChoYW5kbGVkLnNraXApIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgLy8gcmVzZXQgcmVjb2duaXplciBzdGF0ZQogICAgICBmb3IgKGxldCBpID0gMCwgcjsgaSA8IEdlc3R1cmVzLnJlY29nbml6ZXJzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgciA9IEdlc3R1cmVzLnJlY29nbml6ZXJzW2ldOwogICAgICAgIGlmIChnc1tyLm5hbWVdICYmICFoYW5kbGVkW3IubmFtZV0pIHsKICAgICAgICAgIGlmIChyLmZsb3cgJiYgci5mbG93LnN0YXJ0LmluZGV4T2YoZXYudHlwZSkgPiAtMSAmJiByLnJlc2V0KSB7CiAgICAgICAgICAgIHIucmVzZXQoKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgLy8gZW5mb3JjZSBnZXN0dXJlIHJlY29nbml6ZXIgb3JkZXIKICAgICAgZm9yIChsZXQgaSA9IDAsIHI7IGkgPCBHZXN0dXJlcy5yZWNvZ25pemVycy5sZW5ndGg7IGkrKykgewogICAgICAgIHIgPSBHZXN0dXJlcy5yZWNvZ25pemVyc1tpXTsKICAgICAgICBpZiAoZ3Nbci5uYW1lXSAmJiAhaGFuZGxlZFtyLm5hbWVdKSB7CiAgICAgICAgICBoYW5kbGVkW3IubmFtZV0gPSB0cnVlOwogICAgICAgICAgclt0eXBlXShldik7CiAgICAgICAgfQogICAgICB9CiAgICB9LAoKICAgIC8qKgogICAgICogQHByaXZhdGUKICAgICAqIEBwYXJhbSB7VG91Y2hFdmVudH0gZXYgRXZlbnQuCiAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICovCiAgICBfaGFuZGxlVG91Y2hBY3Rpb246IGZ1bmN0aW9uKGV2KSB7CiAgICAgIGxldCB0ID0gZXYuY2hhbmdlZFRvdWNoZXNbMF07CiAgICAgIGxldCB0eXBlID0gZXYudHlwZTsKICAgICAgaWYgKHR5cGUgPT09ICd0b3VjaHN0YXJ0JykgewogICAgICAgIFBPSU5URVJTVEFURS50b3VjaC54ID0gdC5jbGllbnRYOwogICAgICAgIFBPSU5URVJTVEFURS50b3VjaC55ID0gdC5jbGllbnRZOwogICAgICAgIFBPSU5URVJTVEFURS50b3VjaC5zY3JvbGxEZWNpZGVkID0gZmFsc2U7CiAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ3RvdWNobW92ZScpIHsKICAgICAgICBpZiAoUE9JTlRFUlNUQVRFLnRvdWNoLnNjcm9sbERlY2lkZWQpIHsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgUE9JTlRFUlNUQVRFLnRvdWNoLnNjcm9sbERlY2lkZWQgPSB0cnVlOwogICAgICAgIGxldCB0YSA9IGZpcnN0VG91Y2hBY3Rpb24oZXYpOwogICAgICAgIGxldCBwcmV2ZW50ID0gZmFsc2U7CiAgICAgICAgbGV0IGR4ID0gTWF0aC5hYnMoUE9JTlRFUlNUQVRFLnRvdWNoLnggLSB0LmNsaWVudFgpOwogICAgICAgIGxldCBkeSA9IE1hdGguYWJzKFBPSU5URVJTVEFURS50b3VjaC55IC0gdC5jbGllbnRZKTsKICAgICAgICBpZiAoIWV2LmNhbmNlbGFibGUpIHsKICAgICAgICAgIC8vIHNjcm9sbGluZyBpcyBoYXBwZW5pbmcKICAgICAgICB9IGVsc2UgaWYgKHRhID09PSAnbm9uZScpIHsKICAgICAgICAgIHByZXZlbnQgPSB0cnVlOwogICAgICAgIH0gZWxzZSBpZiAodGEgPT09ICdwYW4teCcpIHsKICAgICAgICAgIHByZXZlbnQgPSBkeSA+IGR4OwogICAgICAgIH0gZWxzZSBpZiAodGEgPT09ICdwYW4teScpIHsKICAgICAgICAgIHByZXZlbnQgPSBkeCA+IGR5OwogICAgICAgIH0KICAgICAgICBpZiAocHJldmVudCkgewogICAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgR2VzdHVyZXMucHJldmVudCgndHJhY2snKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0sCgogICAgLyoqCiAgICAgKiBBZGRzIGFuIGV2ZW50IGxpc3RlbmVyIHRvIGEgbm9kZSBmb3IgdGhlIGdpdmVuIGdlc3R1cmUgdHlwZS4KICAgICAqCiAgICAgKiBAbWVtYmVyb2YgUG9seW1lci5HZXN0dXJlcwogICAgICogQHBhcmFtIHshTm9kZX0gbm9kZSBOb2RlIHRvIGFkZCBsaXN0ZW5lciBvbgogICAgICogQHBhcmFtIHtzdHJpbmd9IGV2VHlwZSBHZXN0dXJlIHR5cGU6IGBkb3duYCwgYHVwYCwgYHRyYWNrYCwgb3IgYHRhcGAKICAgICAqIEBwYXJhbSB7IWZ1bmN0aW9uKCFFdmVudCk6dm9pZH0gaGFuZGxlciBFdmVudCBsaXN0ZW5lciBmdW5jdGlvbiB0byBjYWxsCiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBSZXR1cm5zIHRydWUgaWYgYSBnZXN0dXJlIGV2ZW50IGxpc3RlbmVyIHdhcyBhZGRlZC4KICAgICAqIEB0aGlzIHtHZXN0dXJlc30KICAgICAqLwogICAgYWRkTGlzdGVuZXI6IGZ1bmN0aW9uKG5vZGUsIGV2VHlwZSwgaGFuZGxlcikgewogICAgICBpZiAodGhpcy5nZXN0dXJlc1tldlR5cGVdKSB7CiAgICAgICAgdGhpcy5fYWRkKG5vZGUsIGV2VHlwZSwgaGFuZGxlcik7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgICAgcmV0dXJuIGZhbHNlOwogICAgfSwKCiAgICAvKioKICAgICAqIFJlbW92ZXMgYW4gZXZlbnQgbGlzdGVuZXIgZnJvbSBhIG5vZGUgZm9yIHRoZSBnaXZlbiBnZXN0dXJlIHR5cGUuCiAgICAgKgogICAgICogQG1lbWJlcm9mIFBvbHltZXIuR2VzdHVyZXMKICAgICAqIEBwYXJhbSB7IU5vZGV9IG5vZGUgTm9kZSB0byByZW1vdmUgbGlzdGVuZXIgZnJvbQogICAgICogQHBhcmFtIHtzdHJpbmd9IGV2VHlwZSBHZXN0dXJlIHR5cGU6IGBkb3duYCwgYHVwYCwgYHRyYWNrYCwgb3IgYHRhcGAKICAgICAqIEBwYXJhbSB7IWZ1bmN0aW9uKCFFdmVudCk6dm9pZH0gaGFuZGxlciBFdmVudCBsaXN0ZW5lciBmdW5jdGlvbiBwcmV2aW91c2x5IHBhc3NlZCB0bwogICAgICogIGBhZGRMaXN0ZW5lcmAuCiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBSZXR1cm5zIHRydWUgaWYgYSBnZXN0dXJlIGV2ZW50IGxpc3RlbmVyIHdhcyByZW1vdmVkLgogICAgICogQHRoaXMge0dlc3R1cmVzfQogICAgICovCiAgICByZW1vdmVMaXN0ZW5lcjogZnVuY3Rpb24obm9kZSwgZXZUeXBlLCBoYW5kbGVyKSB7CiAgICAgIGlmICh0aGlzLmdlc3R1cmVzW2V2VHlwZV0pIHsKICAgICAgICB0aGlzLl9yZW1vdmUobm9kZSwgZXZUeXBlLCBoYW5kbGVyKTsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgICByZXR1cm4gZmFsc2U7CiAgICB9LAoKICAgIC8qKgogICAgICogYXV0b21hdGUgdGhlIGV2ZW50IGxpc3RlbmVycyBmb3IgdGhlIG5hdGl2ZSBldmVudHMKICAgICAqCiAgICAgKiBAcHJpdmF0ZQogICAgICogQHBhcmFtIHshSFRNTEVsZW1lbnR9IG5vZGUgTm9kZSBvbiB3aGljaCB0byBhZGQgdGhlIGV2ZW50LgogICAgICogQHBhcmFtIHtzdHJpbmd9IGV2VHlwZSBFdmVudCB0eXBlIHRvIGFkZC4KICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24oIUV2ZW50KX0gaGFuZGxlciBFdmVudCBoYW5kbGVyIGZ1bmN0aW9uLgogICAgICogQHJldHVybiB7dm9pZH0KICAgICAqIEB0aGlzIHtHZXN0dXJlc30KICAgICAqLwogICAgX2FkZDogZnVuY3Rpb24obm9kZSwgZXZUeXBlLCBoYW5kbGVyKSB7CiAgICAgIGxldCByZWNvZ25pemVyID0gdGhpcy5nZXN0dXJlc1tldlR5cGVdOwogICAgICBsZXQgZGVwcyA9IHJlY29nbml6ZXIuZGVwczsKICAgICAgbGV0IG5hbWUgPSByZWNvZ25pemVyLm5hbWU7CiAgICAgIGxldCBnb2JqID0gbm9kZVtHRVNUVVJFX0tFWV07CiAgICAgIGlmICghZ29iaikgewogICAgICAgIG5vZGVbR0VTVFVSRV9LRVldID0gZ29iaiA9IHt9OwogICAgICB9CiAgICAgIGZvciAobGV0IGkgPSAwLCBkZXAsIGdkOyBpIDwgZGVwcy5sZW5ndGg7IGkrKykgewogICAgICAgIGRlcCA9IGRlcHNbaV07CiAgICAgICAgLy8gZG9uJ3QgYWRkIG1vdXNlIGhhbmRsZXJzIG9uIGlPUyBiZWNhdXNlIHRoZXkgY2F1c2UgZ3JheSBzZWxlY3Rpb24gb3ZlcmxheXMKICAgICAgICBpZiAoSVNfVE9VQ0hfT05MWSAmJiBpc01vdXNlRXZlbnQoZGVwKSAmJiBkZXAgIT09ICdjbGljaycpIHsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICBnZCA9IGdvYmpbZGVwXTsKICAgICAgICBpZiAoIWdkKSB7CiAgICAgICAgICBnb2JqW2RlcF0gPSBnZCA9IHtfY291bnQ6IDB9OwogICAgICAgIH0KICAgICAgICBpZiAoZ2QuX2NvdW50ID09PSAwKSB7CiAgICAgICAgICBub2RlLmFkZEV2ZW50TGlzdGVuZXIoZGVwLCB0aGlzLl9oYW5kbGVOYXRpdmUsIFBBU1NJVkVfVE9VQ0goZGVwKSk7CiAgICAgICAgfQogICAgICAgIGdkW25hbWVdID0gKGdkW25hbWVdIHx8IDApICsgMTsKICAgICAgICBnZC5fY291bnQgPSAoZ2QuX2NvdW50IHx8IDApICsgMTsKICAgICAgfQogICAgICBub2RlLmFkZEV2ZW50TGlzdGVuZXIoZXZUeXBlLCBoYW5kbGVyKTsKICAgICAgaWYgKHJlY29nbml6ZXIudG91Y2hBY3Rpb24pIHsKICAgICAgICB0aGlzLnNldFRvdWNoQWN0aW9uKG5vZGUsIHJlY29nbml6ZXIudG91Y2hBY3Rpb24pOwogICAgICB9CiAgICB9LAoKICAgIC8qKgogICAgICogYXV0b21hdGUgZXZlbnQgbGlzdGVuZXIgcmVtb3ZhbCBmb3IgbmF0aXZlIGV2ZW50cwogICAgICoKICAgICAqIEBwcml2YXRlCiAgICAgKiBAcGFyYW0geyFIVE1MRWxlbWVudH0gbm9kZSBOb2RlIG9uIHdoaWNoIHRvIHJlbW92ZSB0aGUgZXZlbnQuCiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXZUeXBlIEV2ZW50IHR5cGUgdG8gcmVtb3ZlLgogICAgICogQHBhcmFtIHtmdW5jdGlvbihFdmVudD8pfSBoYW5kbGVyIEV2ZW50IGhhbmRsZXIgZnVuY3Rpb24uCiAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICogQHRoaXMge0dlc3R1cmVzfQogICAgICovCiAgICBfcmVtb3ZlOiBmdW5jdGlvbihub2RlLCBldlR5cGUsIGhhbmRsZXIpIHsKICAgICAgbGV0IHJlY29nbml6ZXIgPSB0aGlzLmdlc3R1cmVzW2V2VHlwZV07CiAgICAgIGxldCBkZXBzID0gcmVjb2duaXplci5kZXBzOwogICAgICBsZXQgbmFtZSA9IHJlY29nbml6ZXIubmFtZTsKICAgICAgbGV0IGdvYmogPSBub2RlW0dFU1RVUkVfS0VZXTsKICAgICAgaWYgKGdvYmopIHsKICAgICAgICBmb3IgKGxldCBpID0gMCwgZGVwLCBnZDsgaSA8IGRlcHMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgIGRlcCA9IGRlcHNbaV07CiAgICAgICAgICBnZCA9IGdvYmpbZGVwXTsKICAgICAgICAgIGlmIChnZCAmJiBnZFtuYW1lXSkgewogICAgICAgICAgICBnZFtuYW1lXSA9IChnZFtuYW1lXSB8fCAxKSAtIDE7CiAgICAgICAgICAgIGdkLl9jb3VudCA9IChnZC5fY291bnQgfHwgMSkgLSAxOwogICAgICAgICAgICBpZiAoZ2QuX2NvdW50ID09PSAwKSB7CiAgICAgICAgICAgICAgbm9kZS5yZW1vdmVFdmVudExpc3RlbmVyKGRlcCwgdGhpcy5faGFuZGxlTmF0aXZlLCBQQVNTSVZFX1RPVUNIKGRlcCkpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIG5vZGUucmVtb3ZlRXZlbnRMaXN0ZW5lcihldlR5cGUsIGhhbmRsZXIpOwogICAgfSwKCiAgICAvKioKICAgICAqIFJlZ2lzdGVycyBhIG5ldyBnZXN0dXJlIGV2ZW50IHJlY29nbml6ZXIgZm9yIGFkZGluZyBuZXcgY3VzdG9tCiAgICAgKiBnZXN0dXJlIGV2ZW50IHR5cGVzLgogICAgICoKICAgICAqIEBtZW1iZXJvZiBQb2x5bWVyLkdlc3R1cmVzCiAgICAgKiBAcGFyYW0geyFHZXN0dXJlUmVjb2duaXplcn0gcmVjb2cgR2VzdHVyZSByZWNvZ25pemVyIGRlc2NyaXB0b3IKICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgKiBAdGhpcyB7R2VzdHVyZXN9CiAgICAgKi8KICAgIHJlZ2lzdGVyOiBmdW5jdGlvbihyZWNvZykgewogICAgICB0aGlzLnJlY29nbml6ZXJzLnB1c2gocmVjb2cpOwogICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlY29nLmVtaXRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgdGhpcy5nZXN0dXJlc1tyZWNvZy5lbWl0c1tpXV0gPSByZWNvZzsKICAgICAgfQogICAgfSwKCiAgICAvKioKICAgICAqIEBwcml2YXRlCiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXZOYW1lIEV2ZW50IG5hbWUuCiAgICAgKiBAcmV0dXJuIHtPYmplY3R9IFJldHVybnMgdGhlIGdlc3R1cmUgZm9yIHRoZSBnaXZlbiBldmVudCBuYW1lLgogICAgICogQHRoaXMge0dlc3R1cmVzfQogICAgICovCiAgICBfZmluZFJlY29nbml6ZXJCeUV2ZW50OiBmdW5jdGlvbihldk5hbWUpIHsKICAgICAgZm9yIChsZXQgaSA9IDAsIHI7IGkgPCB0aGlzLnJlY29nbml6ZXJzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgciA9IHRoaXMucmVjb2duaXplcnNbaV07CiAgICAgICAgZm9yIChsZXQgaiA9IDAsIG47IGogPCByLmVtaXRzLmxlbmd0aDsgaisrKSB7CiAgICAgICAgICBuID0gci5lbWl0c1tqXTsKICAgICAgICAgIGlmIChuID09PSBldk5hbWUpIHsKICAgICAgICAgICAgcmV0dXJuIHI7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBudWxsOwogICAgfSwKCiAgICAvKioKICAgICAqIFNldHMgc2Nyb2xsaW5nIGRpcmVjdGlvbiBvbiBub2RlLgogICAgICoKICAgICAqIFRoaXMgdmFsdWUgaXMgY2hlY2tlZCBvbiBmaXJzdCBtb3ZlLCB0aHVzIGl0IHNob3VsZCBiZSBjYWxsZWQgcHJpb3IgdG8KICAgICAqIGFkZGluZyBldmVudCBsaXN0ZW5lcnMuCiAgICAgKgogICAgICogQG1lbWJlcm9mIFBvbHltZXIuR2VzdHVyZXMKICAgICAqIEBwYXJhbSB7IUVsZW1lbnR9IG5vZGUgTm9kZSB0byBzZXQgdG91Y2ggYWN0aW9uIHNldHRpbmcgb24KICAgICAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZSBUb3VjaCBhY3Rpb24gdmFsdWUKICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgKi8KICAgIHNldFRvdWNoQWN0aW9uOiBmdW5jdGlvbihub2RlLCB2YWx1ZSkgewogICAgICBpZiAoSEFTX05BVElWRV9UQSkgewogICAgICAgIC8vIE5PVEU6IGFkZCB0b3VjaEFjdGlvbiBhc3luYyBzbyB0aGF0IGV2ZW50cyBjYW4gYmUgYWRkZWQgaW4KICAgICAgICAvLyBjdXN0b20gZWxlbWVudCBjb25zdHJ1Y3RvcnMuIE90aGVyd2lzZSB3ZSBydW4gYWZvdWwgb2YgY3VzdG9tCiAgICAgICAgLy8gZWxlbWVudHMgcmVzdHJpY3Rpb24gYWdhaW5zdCBzZXR0aW5ncyBhdHRyaWJ1dGVzIChzdHlsZSkgaW4gdGhlCiAgICAgICAgLy8gY29uc3RydWN0b3IuCiAgICAgICAgUG9seW1lci5Bc3luYy5taWNyb1Rhc2sucnVuKCgpID0+IHsKICAgICAgICAgIG5vZGUuc3R5bGUudG91Y2hBY3Rpb24gPSB2YWx1ZTsKICAgICAgICB9KTsKICAgICAgfQogICAgICBub2RlW1RPVUNIX0FDVElPTl0gPSB2YWx1ZTsKICAgIH0sCgogICAgLyoqCiAgICAgKiBEaXNwYXRjaGVzIGFuIGV2ZW50IG9uIHRoZSBgdGFyZ2V0YCBlbGVtZW50IG9mIGB0eXBlYCB3aXRoIHRoZSBnaXZlbgogICAgICogYGRldGFpbGAuCiAgICAgKiBAcHJpdmF0ZQogICAgICogQHBhcmFtIHshRXZlbnRUYXJnZXR9IHRhcmdldCBUaGUgZWxlbWVudCBvbiB3aGljaCB0byBmaXJlIGFuIGV2ZW50LgogICAgICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgVGhlIHR5cGUgb2YgZXZlbnQgdG8gZmlyZS4KICAgICAqIEBwYXJhbSB7IU9iamVjdD19IGRldGFpbCBUaGUgZGV0YWlsIG9iamVjdCB0byBwb3B1bGF0ZSBvbiB0aGUgZXZlbnQuCiAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICovCiAgICBfZmlyZTogZnVuY3Rpb24odGFyZ2V0LCB0eXBlLCBkZXRhaWwpIHsKICAgICAgbGV0IGV2ID0gbmV3IEV2ZW50KHR5cGUsIHsgYnViYmxlczogdHJ1ZSwgY2FuY2VsYWJsZTogdHJ1ZSwgY29tcG9zZWQ6IHRydWUgfSk7CiAgICAgIGV2LmRldGFpbCA9IGRldGFpbDsKICAgICAgdGFyZ2V0LmRpc3BhdGNoRXZlbnQoZXYpOwogICAgICAvLyBmb3J3YXJkIGBwcmV2ZW50RGVmYXVsdGAgaW4gYSBjbGVhbiB3YXkKICAgICAgaWYgKGV2LmRlZmF1bHRQcmV2ZW50ZWQpIHsKICAgICAgICBsZXQgcHJldmVudGVyID0gZGV0YWlsLnByZXZlbnRlciB8fCBkZXRhaWwuc291cmNlRXZlbnQ7CiAgICAgICAgaWYgKHByZXZlbnRlciAmJiBwcmV2ZW50ZXIucHJldmVudERlZmF1bHQpIHsKICAgICAgICAgIHByZXZlbnRlci5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgIH0KICAgICAgfQogICAgfSwKCiAgICAvKioKICAgICAqIFByZXZlbnRzIHRoZSBkaXNwYXRjaCBhbmQgZGVmYXVsdCBhY3Rpb24gb2YgdGhlIGdpdmVuIGV2ZW50IG5hbWUuCiAgICAgKgogICAgICogQG1lbWJlcm9mIFBvbHltZXIuR2VzdHVyZXMKICAgICAqIEBwYXJhbSB7c3RyaW5nfSBldk5hbWUgRXZlbnQgbmFtZS4KICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgKiBAdGhpcyB7R2VzdHVyZXN9CiAgICAgKi8KICAgIHByZXZlbnQ6IGZ1bmN0aW9uKGV2TmFtZSkgewogICAgICBsZXQgcmVjb2duaXplciA9IHRoaXMuX2ZpbmRSZWNvZ25pemVyQnlFdmVudChldk5hbWUpOwogICAgICBpZiAocmVjb2duaXplci5pbmZvKSB7CiAgICAgICAgcmVjb2duaXplci5pbmZvLnByZXZlbnQgPSB0cnVlOwogICAgICB9CiAgICB9LAoKICAgIC8qKgogICAgICogUmVzZXQgdGhlIDI1MDBtcyB0aW1lb3V0IG9uIHByb2Nlc3NpbmcgbW91c2UgaW5wdXQgYWZ0ZXIgZGV0ZWN0aW5nIHRvdWNoIGlucHV0LgogICAgICoKICAgICAqIFRvdWNoIGlucHV0cyBjcmVhdGUgc3ludGhlc2l6ZWQgbW91c2UgaW5wdXRzIGFueXdoZXJlIGZyb20gMCB0byAyMDAwbXMgYWZ0ZXIgdGhlIHRvdWNoLgogICAgICogVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyB0ZXN0aW5nIHdpdGggc2ltdWxhdGVkIHRvdWNoIGlucHV0cy4KICAgICAqIENhbGxpbmcgdGhpcyBtZXRob2QgaW4gcHJvZHVjdGlvbiBtYXkgY2F1c2UgZHVwbGljYXRlIHRhcHMgb3Igb3RoZXIgR2VzdHVyZXMuCiAgICAgKgogICAgICogQG1lbWJlcm9mIFBvbHltZXIuR2VzdHVyZXMKICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgKi8KICAgIHJlc2V0TW91c2VDYW5jZWxsZXI6IGZ1bmN0aW9uKCkgewogICAgICBpZiAoUE9JTlRFUlNUQVRFLm1vdXNlLm1vdXNlSWdub3JlSm9iKSB7CiAgICAgICAgUE9JTlRFUlNUQVRFLm1vdXNlLm1vdXNlSWdub3JlSm9iLmZsdXNoKCk7CiAgICAgIH0KICAgIH0KICB9OwoKICAvKiBlc2xpbnQtZGlzYWJsZSB2YWxpZC1qc2RvYyAqLwoKICBHZXN0dXJlcy5yZWdpc3Rlcih7CiAgICBuYW1lOiAnZG93bnVwJywKICAgIGRlcHM6IFsnbW91c2Vkb3duJywgJ3RvdWNoc3RhcnQnLCAndG91Y2hlbmQnXSwKICAgIGZsb3c6IHsKICAgICAgc3RhcnQ6IFsnbW91c2Vkb3duJywgJ3RvdWNoc3RhcnQnXSwKICAgICAgZW5kOiBbJ21vdXNldXAnLCAndG91Y2hlbmQnXQogICAgfSwKICAgIGVtaXRzOiBbJ2Rvd24nLCAndXAnXSwKCiAgICBpbmZvOiB7CiAgICAgIG1vdmVmbjogbnVsbCwKICAgICAgdXBmbjogbnVsbAogICAgfSwKCiAgICAvKioKICAgICAqIEB0aGlzIHtHZXN0dXJlUmVjb2duaXplcn0KICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgKi8KICAgIHJlc2V0OiBmdW5jdGlvbigpIHsKICAgICAgdW50cmFja0RvY3VtZW50KHRoaXMuaW5mbyk7CiAgICB9LAoKICAgIC8qKgogICAgICogQHRoaXMge0dlc3R1cmVSZWNvZ25pemVyfQogICAgICogQHBhcmFtIHtNb3VzZUV2ZW50fSBlCiAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICovCiAgICBtb3VzZWRvd246IGZ1bmN0aW9uKGUpIHsKICAgICAgaWYgKCFoYXNMZWZ0TW91c2VCdXR0b24oZSkpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgbGV0IHQgPSBHZXN0dXJlcy5fZmluZE9yaWdpbmFsVGFyZ2V0KGUpOwogICAgICBsZXQgc2VsZiA9IHRoaXM7CiAgICAgIGxldCBtb3ZlZm4gPSBmdW5jdGlvbiBtb3ZlZm4oZSkgewogICAgICAgIGlmICghaGFzTGVmdE1vdXNlQnV0dG9uKGUpKSB7CiAgICAgICAgICBzZWxmLl9maXJlKCd1cCcsIHQsIGUpOwogICAgICAgICAgdW50cmFja0RvY3VtZW50KHNlbGYuaW5mbyk7CiAgICAgICAgfQogICAgICB9OwogICAgICBsZXQgdXBmbiA9IGZ1bmN0aW9uIHVwZm4oZSkgewogICAgICAgIGlmIChoYXNMZWZ0TW91c2VCdXR0b24oZSkpIHsKICAgICAgICAgIHNlbGYuX2ZpcmUoJ3VwJywgdCwgZSk7CiAgICAgICAgfQogICAgICAgIHVudHJhY2tEb2N1bWVudChzZWxmLmluZm8pOwogICAgICB9OwogICAgICB0cmFja0RvY3VtZW50KHRoaXMuaW5mbywgbW92ZWZuLCB1cGZuKTsKICAgICAgdGhpcy5fZmlyZSgnZG93bicsIHQsIGUpOwogICAgfSwKICAgIC8qKgogICAgICogQHRoaXMge0dlc3R1cmVSZWNvZ25pemVyfQogICAgICogQHBhcmFtIHtUb3VjaEV2ZW50fSBlCiAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICovCiAgICB0b3VjaHN0YXJ0OiBmdW5jdGlvbihlKSB7CiAgICAgIHRoaXMuX2ZpcmUoJ2Rvd24nLCBHZXN0dXJlcy5fZmluZE9yaWdpbmFsVGFyZ2V0KGUpLCBlLmNoYW5nZWRUb3VjaGVzWzBdLCBlKTsKICAgIH0sCiAgICAvKioKICAgICAqIEB0aGlzIHtHZXN0dXJlUmVjb2duaXplcn0KICAgICAqIEBwYXJhbSB7VG91Y2hFdmVudH0gZQogICAgICogQHJldHVybiB7dm9pZH0KICAgICAqLwogICAgdG91Y2hlbmQ6IGZ1bmN0aW9uKGUpIHsKICAgICAgdGhpcy5fZmlyZSgndXAnLCBHZXN0dXJlcy5fZmluZE9yaWdpbmFsVGFyZ2V0KGUpLCBlLmNoYW5nZWRUb3VjaGVzWzBdLCBlKTsKICAgIH0sCiAgICAvKioKICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlCiAgICAgKiBAcGFyYW0geyFFdmVudFRhcmdldH0gdGFyZ2V0CiAgICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudAogICAgICogQHBhcmFtIHtGdW5jdGlvbn0gcHJldmVudGVyCiAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICovCiAgICBfZmlyZTogZnVuY3Rpb24odHlwZSwgdGFyZ2V0LCBldmVudCwgcHJldmVudGVyKSB7CiAgICAgIEdlc3R1cmVzLl9maXJlKHRhcmdldCwgdHlwZSwgewogICAgICAgIHg6IGV2ZW50LmNsaWVudFgsCiAgICAgICAgeTogZXZlbnQuY2xpZW50WSwKICAgICAgICBzb3VyY2VFdmVudDogZXZlbnQsCiAgICAgICAgcHJldmVudGVyOiBwcmV2ZW50ZXIsCiAgICAgICAgcHJldmVudDogZnVuY3Rpb24oZSkgewogICAgICAgICAgcmV0dXJuIEdlc3R1cmVzLnByZXZlbnQoZSk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0KICB9KTsKCiAgR2VzdHVyZXMucmVnaXN0ZXIoewogICAgbmFtZTogJ3RyYWNrJywKICAgIHRvdWNoQWN0aW9uOiAnbm9uZScsCiAgICBkZXBzOiBbJ21vdXNlZG93bicsICd0b3VjaHN0YXJ0JywgJ3RvdWNobW92ZScsICd0b3VjaGVuZCddLAogICAgZmxvdzogewogICAgICBzdGFydDogWydtb3VzZWRvd24nLCAndG91Y2hzdGFydCddLAogICAgICBlbmQ6IFsnbW91c2V1cCcsICd0b3VjaGVuZCddCiAgICB9LAogICAgZW1pdHM6IFsndHJhY2snXSwKCiAgICBpbmZvOiB7CiAgICAgIHg6IDAsCiAgICAgIHk6IDAsCiAgICAgIHN0YXRlOiAnc3RhcnQnLAogICAgICBzdGFydGVkOiBmYWxzZSwKICAgICAgbW92ZXM6IFtdLAogICAgICAvKiogQHRoaXMge0dlc3R1cmVSZWNvZ25pemVyfSAqLwogICAgICBhZGRNb3ZlOiBmdW5jdGlvbihtb3ZlKSB7CiAgICAgICAgaWYgKHRoaXMubW92ZXMubGVuZ3RoID4gVFJBQ0tfTEVOR1RIKSB7CiAgICAgICAgICB0aGlzLm1vdmVzLnNoaWZ0KCk7CiAgICAgICAgfQogICAgICAgIHRoaXMubW92ZXMucHVzaChtb3ZlKTsKICAgICAgfSwKICAgICAgbW92ZWZuOiBudWxsLAogICAgICB1cGZuOiBudWxsLAogICAgICBwcmV2ZW50OiBmYWxzZQogICAgfSwKCiAgICAvKioKICAgICAqIEB0aGlzIHtHZXN0dXJlUmVjb2duaXplcn0KICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgKi8KICAgIHJlc2V0OiBmdW5jdGlvbigpIHsKICAgICAgdGhpcy5pbmZvLnN0YXRlID0gJ3N0YXJ0JzsKICAgICAgdGhpcy5pbmZvLnN0YXJ0ZWQgPSBmYWxzZTsKICAgICAgdGhpcy5pbmZvLm1vdmVzID0gW107CiAgICAgIHRoaXMuaW5mby54ID0gMDsKICAgICAgdGhpcy5pbmZvLnkgPSAwOwogICAgICB0aGlzLmluZm8ucHJldmVudCA9IGZhbHNlOwogICAgICB1bnRyYWNrRG9jdW1lbnQodGhpcy5pbmZvKTsKICAgIH0sCgogICAgLyoqCiAgICAgKiBAdGhpcyB7R2VzdHVyZVJlY29nbml6ZXJ9CiAgICAgKiBAcGFyYW0ge251bWJlcn0geAogICAgICogQHBhcmFtIHtudW1iZXJ9IHkKICAgICAqIEByZXR1cm4ge2Jvb2xlYW59CiAgICAgKi8KICAgIGhhc01vdmVkRW5vdWdoOiBmdW5jdGlvbih4LCB5KSB7CiAgICAgIGlmICh0aGlzLmluZm8ucHJldmVudCkgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgICBpZiAodGhpcy5pbmZvLnN0YXJ0ZWQpIHsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgICBsZXQgZHggPSBNYXRoLmFicyh0aGlzLmluZm8ueCAtIHgpOwogICAgICBsZXQgZHkgPSBNYXRoLmFicyh0aGlzLmluZm8ueSAtIHkpOwogICAgICByZXR1cm4gKGR4ID49IFRSQUNLX0RJU1RBTkNFIHx8IGR5ID49IFRSQUNLX0RJU1RBTkNFKTsKICAgIH0sCiAgICAvKioKICAgICAqIEB0aGlzIHtHZXN0dXJlUmVjb2duaXplcn0KICAgICAqIEBwYXJhbSB7TW91c2VFdmVudH0gZQogICAgICogQHJldHVybiB7dm9pZH0KICAgICAqLwogICAgbW91c2Vkb3duOiBmdW5jdGlvbihlKSB7CiAgICAgIGlmICghaGFzTGVmdE1vdXNlQnV0dG9uKGUpKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGxldCB0ID0gR2VzdHVyZXMuX2ZpbmRPcmlnaW5hbFRhcmdldChlKTsKICAgICAgbGV0IHNlbGYgPSB0aGlzOwogICAgICBsZXQgbW92ZWZuID0gZnVuY3Rpb24gbW92ZWZuKGUpIHsKICAgICAgICBsZXQgeCA9IGUuY2xpZW50WCwgeSA9IGUuY2xpZW50WTsKICAgICAgICBpZiAoc2VsZi5oYXNNb3ZlZEVub3VnaCh4LCB5KSkgewogICAgICAgICAgLy8gZmlyc3QgbW92ZSBpcyAnc3RhcnQnLCBzdWJzZXF1ZW50IG1vdmVzIGFyZSAnbW92ZScsIG1vdXNldXAgaXMgJ2VuZCcKICAgICAgICAgIHNlbGYuaW5mby5zdGF0ZSA9IHNlbGYuaW5mby5zdGFydGVkID8gKGUudHlwZSA9PT0gJ21vdXNldXAnID8gJ2VuZCcgOiAndHJhY2snKSA6ICdzdGFydCc7CiAgICAgICAgICBpZiAoc2VsZi5pbmZvLnN0YXRlID09PSAnc3RhcnQnKSB7CiAgICAgICAgICAgIC8vIGlmIGFuZCBvbmx5IGlmIHRyYWNraW5nLCBhbHdheXMgcHJldmVudCB0YXAKICAgICAgICAgICAgR2VzdHVyZXMucHJldmVudCgndGFwJyk7CiAgICAgICAgICB9CiAgICAgICAgICBzZWxmLmluZm8uYWRkTW92ZSh7eDogeCwgeTogeX0pOwogICAgICAgICAgaWYgKCFoYXNMZWZ0TW91c2VCdXR0b24oZSkpIHsKICAgICAgICAgICAgLy8gYWx3YXlzIF9maXJlICJlbmQiCiAgICAgICAgICAgIHNlbGYuaW5mby5zdGF0ZSA9ICdlbmQnOwogICAgICAgICAgICB1bnRyYWNrRG9jdW1lbnQoc2VsZi5pbmZvKTsKICAgICAgICAgIH0KICAgICAgICAgIHNlbGYuX2ZpcmUodCwgZSk7CiAgICAgICAgICBzZWxmLmluZm8uc3RhcnRlZCA9IHRydWU7CiAgICAgICAgfQogICAgICB9OwogICAgICBsZXQgdXBmbiA9IGZ1bmN0aW9uIHVwZm4oZSkgewogICAgICAgIGlmIChzZWxmLmluZm8uc3RhcnRlZCkgewogICAgICAgICAgbW92ZWZuKGUpOwogICAgICAgIH0KCiAgICAgICAgLy8gcmVtb3ZlIHRoZSB0ZW1wb3JhcnkgbGlzdGVuZXJzCiAgICAgICAgdW50cmFja0RvY3VtZW50KHNlbGYuaW5mbyk7CiAgICAgIH07CiAgICAgIC8vIGFkZCB0ZW1wb3JhcnkgZG9jdW1lbnQgbGlzdGVuZXJzIGFzIG1vdXNlIHJldGFyZ2V0cwogICAgICB0cmFja0RvY3VtZW50KHRoaXMuaW5mbywgbW92ZWZuLCB1cGZuKTsKICAgICAgdGhpcy5pbmZvLnggPSBlLmNsaWVudFg7CiAgICAgIHRoaXMuaW5mby55ID0gZS5jbGllbnRZOwogICAgfSwKICAgIC8qKgogICAgICogQHRoaXMge0dlc3R1cmVSZWNvZ25pemVyfQogICAgICogQHBhcmFtIHtUb3VjaEV2ZW50fSBlCiAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICovCiAgICB0b3VjaHN0YXJ0OiBmdW5jdGlvbihlKSB7CiAgICAgIGxldCBjdCA9IGUuY2hhbmdlZFRvdWNoZXNbMF07CiAgICAgIHRoaXMuaW5mby54ID0gY3QuY2xpZW50WDsKICAgICAgdGhpcy5pbmZvLnkgPSBjdC5jbGllbnRZOwogICAgfSwKICAgIC8qKgogICAgICogQHRoaXMge0dlc3R1cmVSZWNvZ25pemVyfQogICAgICogQHBhcmFtIHtUb3VjaEV2ZW50fSBlCiAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICovCiAgICB0b3VjaG1vdmU6IGZ1bmN0aW9uKGUpIHsKICAgICAgbGV0IHQgPSBHZXN0dXJlcy5fZmluZE9yaWdpbmFsVGFyZ2V0KGUpOwogICAgICBsZXQgY3QgPSBlLmNoYW5nZWRUb3VjaGVzWzBdOwogICAgICBsZXQgeCA9IGN0LmNsaWVudFgsIHkgPSBjdC5jbGllbnRZOwogICAgICBpZiAodGhpcy5oYXNNb3ZlZEVub3VnaCh4LCB5KSkgewogICAgICAgIGlmICh0aGlzLmluZm8uc3RhdGUgPT09ICdzdGFydCcpIHsKICAgICAgICAgIC8vIGlmIGFuZCBvbmx5IGlmIHRyYWNraW5nLCBhbHdheXMgcHJldmVudCB0YXAKICAgICAgICAgIEdlc3R1cmVzLnByZXZlbnQoJ3RhcCcpOwogICAgICAgIH0KICAgICAgICB0aGlzLmluZm8uYWRkTW92ZSh7eDogeCwgeTogeX0pOwogICAgICAgIHRoaXMuX2ZpcmUodCwgY3QpOwogICAgICAgIHRoaXMuaW5mby5zdGF0ZSA9ICd0cmFjayc7CiAgICAgICAgdGhpcy5pbmZvLnN0YXJ0ZWQgPSB0cnVlOwogICAgICB9CiAgICB9LAogICAgLyoqCiAgICAgKiBAdGhpcyB7R2VzdHVyZVJlY29nbml6ZXJ9CiAgICAgKiBAcGFyYW0ge1RvdWNoRXZlbnR9IGUKICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgKi8KICAgIHRvdWNoZW5kOiBmdW5jdGlvbihlKSB7CiAgICAgIGxldCB0ID0gR2VzdHVyZXMuX2ZpbmRPcmlnaW5hbFRhcmdldChlKTsKICAgICAgbGV0IGN0ID0gZS5jaGFuZ2VkVG91Y2hlc1swXTsKICAgICAgLy8gb25seSB0cmFja2VuZCBpZiB0cmFjayB3YXMgc3RhcnRlZCBhbmQgbm90IGFib3J0ZWQKICAgICAgaWYgKHRoaXMuaW5mby5zdGFydGVkKSB7CiAgICAgICAgLy8gcmVzZXQgc3RhcnRlZCBzdGF0ZSBvbiB1cAogICAgICAgIHRoaXMuaW5mby5zdGF0ZSA9ICdlbmQnOwogICAgICAgIHRoaXMuaW5mby5hZGRNb3ZlKHt4OiBjdC5jbGllbnRYLCB5OiBjdC5jbGllbnRZfSk7CiAgICAgICAgdGhpcy5fZmlyZSh0LCBjdCwgZSk7CiAgICAgIH0KICAgIH0sCgogICAgLyoqCiAgICAgKiBAdGhpcyB7R2VzdHVyZVJlY29nbml6ZXJ9CiAgICAgKiBAcGFyYW0geyFFdmVudFRhcmdldH0gdGFyZ2V0CiAgICAgKiBAcGFyYW0ge1RvdWNofSB0b3VjaAogICAgICogQHJldHVybiB7dm9pZH0KICAgICAqLwogICAgX2ZpcmU6IGZ1bmN0aW9uKHRhcmdldCwgdG91Y2gpIHsKICAgICAgbGV0IHNlY29uZGxhc3QgPSB0aGlzLmluZm8ubW92ZXNbdGhpcy5pbmZvLm1vdmVzLmxlbmd0aCAtIDJdOwogICAgICBsZXQgbGFzdG1vdmUgPSB0aGlzLmluZm8ubW92ZXNbdGhpcy5pbmZvLm1vdmVzLmxlbmd0aCAtIDFdOwogICAgICBsZXQgZHggPSBsYXN0bW92ZS54IC0gdGhpcy5pbmZvLng7CiAgICAgIGxldCBkeSA9IGxhc3Rtb3ZlLnkgLSB0aGlzLmluZm8ueTsKICAgICAgbGV0IGRkeCwgZGR5ID0gMDsKICAgICAgaWYgKHNlY29uZGxhc3QpIHsKICAgICAgICBkZHggPSBsYXN0bW92ZS54IC0gc2Vjb25kbGFzdC54OwogICAgICAgIGRkeSA9IGxhc3Rtb3ZlLnkgLSBzZWNvbmRsYXN0Lnk7CiAgICAgIH0KICAgICAgR2VzdHVyZXMuX2ZpcmUodGFyZ2V0LCAndHJhY2snLCB7CiAgICAgICAgc3RhdGU6IHRoaXMuaW5mby5zdGF0ZSwKICAgICAgICB4OiB0b3VjaC5jbGllbnRYLAogICAgICAgIHk6IHRvdWNoLmNsaWVudFksCiAgICAgICAgZHg6IGR4LAogICAgICAgIGR5OiBkeSwKICAgICAgICBkZHg6IGRkeCwKICAgICAgICBkZHk6IGRkeSwKICAgICAgICBzb3VyY2VFdmVudDogdG91Y2gsCiAgICAgICAgaG92ZXI6IGZ1bmN0aW9uKCkgewogICAgICAgICAgcmV0dXJuIEdlc3R1cmVzLmRlZXBUYXJnZXRGaW5kKHRvdWNoLmNsaWVudFgsIHRvdWNoLmNsaWVudFkpOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9CgogIH0pOwoKICBHZXN0dXJlcy5yZWdpc3Rlcih7CiAgICBuYW1lOiAndGFwJywKICAgIGRlcHM6IFsnbW91c2Vkb3duJywgJ2NsaWNrJywgJ3RvdWNoc3RhcnQnLCAndG91Y2hlbmQnXSwKICAgIGZsb3c6IHsKICAgICAgc3RhcnQ6IFsnbW91c2Vkb3duJywgJ3RvdWNoc3RhcnQnXSwKICAgICAgZW5kOiBbJ2NsaWNrJywgJ3RvdWNoZW5kJ10KICAgIH0sCiAgICBlbWl0czogWyd0YXAnXSwKICAgIGluZm86IHsKICAgICAgeDogTmFOLAogICAgICB5OiBOYU4sCiAgICAgIHByZXZlbnQ6IGZhbHNlCiAgICB9LAogICAgLyoqCiAgICAgKiBAdGhpcyB7R2VzdHVyZVJlY29nbml6ZXJ9CiAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICovCiAgICByZXNldDogZnVuY3Rpb24oKSB7CiAgICAgIHRoaXMuaW5mby54ID0gTmFOOwogICAgICB0aGlzLmluZm8ueSA9IE5hTjsKICAgICAgdGhpcy5pbmZvLnByZXZlbnQgPSBmYWxzZTsKICAgIH0sCiAgICAvKioKICAgICAqIEB0aGlzIHtHZXN0dXJlUmVjb2duaXplcn0KICAgICAqIEBwYXJhbSB7TW91c2VFdmVudH0gZQogICAgICogQHJldHVybiB7dm9pZH0KICAgICAqLwogICAgc2F2ZTogZnVuY3Rpb24oZSkgewogICAgICB0aGlzLmluZm8ueCA9IGUuY2xpZW50WDsKICAgICAgdGhpcy5pbmZvLnkgPSBlLmNsaWVudFk7CiAgICB9LAogICAgLyoqCiAgICAgKiBAdGhpcyB7R2VzdHVyZVJlY29nbml6ZXJ9CiAgICAgKiBAcGFyYW0ge01vdXNlRXZlbnR9IGUKICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgKi8KICAgIG1vdXNlZG93bjogZnVuY3Rpb24oZSkgewogICAgICBpZiAoaGFzTGVmdE1vdXNlQnV0dG9uKGUpKSB7CiAgICAgICAgdGhpcy5zYXZlKGUpOwogICAgICB9CiAgICB9LAogICAgLyoqCiAgICAgKiBAdGhpcyB7R2VzdHVyZVJlY29nbml6ZXJ9CiAgICAgKiBAcGFyYW0ge01vdXNlRXZlbnR9IGUKICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgKi8KICAgIGNsaWNrOiBmdW5jdGlvbihlKSB7CiAgICAgIGlmIChoYXNMZWZ0TW91c2VCdXR0b24oZSkpIHsKICAgICAgICB0aGlzLmZvcndhcmQoZSk7CiAgICAgIH0KICAgIH0sCiAgICAvKioKICAgICAqIEB0aGlzIHtHZXN0dXJlUmVjb2duaXplcn0KICAgICAqIEBwYXJhbSB7VG91Y2hFdmVudH0gZQogICAgICogQHJldHVybiB7dm9pZH0KICAgICAqLwogICAgdG91Y2hzdGFydDogZnVuY3Rpb24oZSkgewogICAgICB0aGlzLnNhdmUoZS5jaGFuZ2VkVG91Y2hlc1swXSwgZSk7CiAgICB9LAogICAgLyoqCiAgICAgKiBAdGhpcyB7R2VzdHVyZVJlY29nbml6ZXJ9CiAgICAgKiBAcGFyYW0ge1RvdWNoRXZlbnR9IGUKICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgKi8KICAgIHRvdWNoZW5kOiBmdW5jdGlvbihlKSB7CiAgICAgIHRoaXMuZm9yd2FyZChlLmNoYW5nZWRUb3VjaGVzWzBdLCBlKTsKICAgIH0sCiAgICAvKioKICAgICAqIEB0aGlzIHtHZXN0dXJlUmVjb2duaXplcn0KICAgICAqIEBwYXJhbSB7RXZlbnQgfCBUb3VjaH0gZQogICAgICogQHBhcmFtIHtFdmVudD19IHByZXZlbnRlcgogICAgICogQHJldHVybiB7dm9pZH0KICAgICAqLwogICAgZm9yd2FyZDogZnVuY3Rpb24oZSwgcHJldmVudGVyKSB7CiAgICAgIGxldCBkeCA9IE1hdGguYWJzKGUuY2xpZW50WCAtIHRoaXMuaW5mby54KTsKICAgICAgbGV0IGR5ID0gTWF0aC5hYnMoZS5jbGllbnRZIC0gdGhpcy5pbmZvLnkpOwogICAgICAvLyBmaW5kIG9yaWdpbmFsIHRhcmdldCBmcm9tIGBwcmV2ZW50ZXJgIGZvciBUb3VjaEV2ZW50cywgb3IgYGVgIGZvciBNb3VzZUV2ZW50cwogICAgICBsZXQgdCA9IEdlc3R1cmVzLl9maW5kT3JpZ2luYWxUYXJnZXQoLyoqIEB0eXBlIHtFdmVudH0gKi8ocHJldmVudGVyIHx8IGUpKTsKICAgICAgaWYgKCF0IHx8IChjYW5CZURpc2FibGVkWy8qKiBAdHlwZSB7IUhUTUxFbGVtZW50fSAqLyh0KS5sb2NhbE5hbWVdICYmIHQuaGFzQXR0cmlidXRlKCdkaXNhYmxlZCcpKSkgewogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICAvLyBkeCxkeSBjYW4gYmUgTmFOIGlmIGBjbGlja2AgaGFzIGJlZW4gc2ltdWxhdGVkIGFuZCB0aGVyZSB3YXMgbm8gYGRvd25gIGZvciBgc3RhcnRgCiAgICAgIGlmIChpc05hTihkeCkgfHwgaXNOYU4oZHkpIHx8IChkeCA8PSBUQVBfRElTVEFOQ0UgJiYgZHkgPD0gVEFQX0RJU1RBTkNFKSB8fCBpc1N5bnRoZXRpY0NsaWNrKGUpKSB7CiAgICAgICAgLy8gcHJldmVudCB0YXBzIGZyb20gYmVpbmcgZ2VuZXJhdGVkIGlmIGFuIGV2ZW50IGhhcyBjYW5jZWxlZCB0aGVtCiAgICAgICAgaWYgKCF0aGlzLmluZm8ucHJldmVudCkgewogICAgICAgICAgR2VzdHVyZXMuX2ZpcmUodCwgJ3RhcCcsIHsKICAgICAgICAgICAgeDogZS5jbGllbnRYLAogICAgICAgICAgICB5OiBlLmNsaWVudFksCiAgICAgICAgICAgIHNvdXJjZUV2ZW50OiBlLAogICAgICAgICAgICBwcmV2ZW50ZXI6IHByZXZlbnRlcgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfSk7CgogIC8qIGVzbGludC1lbmFibGUgdmFsaWQtanNkb2MgKi8KCiAgLyoqIEBkZXByZWNhdGVkICovCiAgR2VzdHVyZXMuZmluZE9yaWdpbmFsVGFyZ2V0ID0gR2VzdHVyZXMuX2ZpbmRPcmlnaW5hbFRhcmdldDsKCiAgLyoqIEBkZXByZWNhdGVkICovCiAgR2VzdHVyZXMuYWRkID0gR2VzdHVyZXMuYWRkTGlzdGVuZXI7CgogIC8qKiBAZGVwcmVjYXRlZCAqLwogIEdlc3R1cmVzLnJlbW92ZSA9IEdlc3R1cmVzLnJlbW92ZUxpc3RlbmVyOwoKICBQb2x5bWVyLkdlc3R1cmVzID0gR2VzdHVyZXM7Cgp9KSgpOwo8L3NjcmlwdD48c2NyaXB0PgooZnVuY3Rpb24oKSB7CgogICd1c2Ugc3RyaWN0JzsKCiAgLyoqCiAgICogQGNvbnN0IHtQb2x5bWVyLkdlc3R1cmVzfQogICAqLwogIGNvbnN0IGdlc3R1cmVzID0gUG9seW1lci5HZXN0dXJlczsKCiAgLyoqCiAgICogRWxlbWVudCBjbGFzcyBtaXhpbiB0aGF0IHByb3ZpZGVzIEFQSSBmb3IgYWRkaW5nIFBvbHltZXIncyBjcm9zcy1wbGF0Zm9ybQogICAqIGdlc3R1cmUgZXZlbnRzIHRvIG5vZGVzLgogICAqCiAgICogVGhlIEFQSSBpcyBkZXNpZ25lZCB0byBiZSBjb21wYXRpYmxlIHdpdGggb3ZlcnJpZGUgcG9pbnRzIGltcGxlbWVudGVkCiAgICogaW4gYFBvbHltZXIuVGVtcGxhdGVTdGFtcGAgc3VjaCB0aGF0IGRlY2xhcmF0aXZlIGV2ZW50IGxpc3RlbmVycyBpbgogICAqIHRlbXBsYXRlcyB3aWxsIHN1cHBvcnQgZ2VzdHVyZSBldmVudHMgd2hlbiB0aGlzIG1peGluIGlzIGFwcGxpZWQgYWxvbmcgd2l0aAogICAqIGBQb2x5bWVyLlRlbXBsYXRlU3RhbXBgLgogICAqCiAgICogQG1peGluRnVuY3Rpb24KICAgKiBAcG9seW1lcgogICAqIEBtZW1iZXJvZiBQb2x5bWVyCiAgICogQHN1bW1hcnkgRWxlbWVudCBjbGFzcyBtaXhpbiB0aGF0IHByb3ZpZGVzIEFQSSBmb3IgYWRkaW5nIFBvbHltZXIncyBjcm9zcy1wbGF0Zm9ybQogICAqIGdlc3R1cmUgZXZlbnRzIHRvIG5vZGVzCiAgICovCiAgUG9seW1lci5HZXN0dXJlRXZlbnRMaXN0ZW5lcnMgPSBQb2x5bWVyLmRlZHVwaW5nTWl4aW4oc3VwZXJDbGFzcyA9PiB7CgogICAgLyoqCiAgICAgKiBAcG9seW1lcgogICAgICogQG1peGluQ2xhc3MKICAgICAqIEBpbXBsZW1lbnRzIHtQb2x5bWVyX0dlc3R1cmVFdmVudExpc3RlbmVyc30KICAgICAqLwogICAgY2xhc3MgR2VzdHVyZUV2ZW50TGlzdGVuZXJzIGV4dGVuZHMgc3VwZXJDbGFzcyB7CgogICAgICAvKioKICAgICAgICogQWRkIHRoZSBldmVudCBsaXN0ZW5lciB0byB0aGUgbm9kZSBpZiBpdCBpcyBhIGdlc3R1cmVzIGV2ZW50LgogICAgICAgKgogICAgICAgKiBAcGFyYW0geyFOb2RlfSBub2RlIE5vZGUgdG8gYWRkIGV2ZW50IGxpc3RlbmVyIHRvCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudE5hbWUgTmFtZSBvZiBldmVudAogICAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKCFFdmVudCk6dm9pZH0gaGFuZGxlciBMaXN0ZW5lciBmdW5jdGlvbiB0byBhZGQKICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICovCiAgICAgIF9hZGRFdmVudExpc3RlbmVyVG9Ob2RlKG5vZGUsIGV2ZW50TmFtZSwgaGFuZGxlcikgewogICAgICAgIGlmICghZ2VzdHVyZXMuYWRkTGlzdGVuZXIobm9kZSwgZXZlbnROYW1lLCBoYW5kbGVyKSkgewogICAgICAgICAgc3VwZXIuX2FkZEV2ZW50TGlzdGVuZXJUb05vZGUobm9kZSwgZXZlbnROYW1lLCBoYW5kbGVyKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBSZW1vdmUgdGhlIGV2ZW50IGxpc3RlbmVyIHRvIHRoZSBub2RlIGlmIGl0IGlzIGEgZ2VzdHVyZXMgZXZlbnQuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7IU5vZGV9IG5vZGUgTm9kZSB0byByZW1vdmUgZXZlbnQgbGlzdGVuZXIgZnJvbQogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnROYW1lIE5hbWUgb2YgZXZlbnQKICAgICAgICogQHBhcmFtIHtmdW5jdGlvbighRXZlbnQpOnZvaWR9IGhhbmRsZXIgTGlzdGVuZXIgZnVuY3Rpb24gdG8gcmVtb3ZlCiAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAqLwogICAgICBfcmVtb3ZlRXZlbnRMaXN0ZW5lckZyb21Ob2RlKG5vZGUsIGV2ZW50TmFtZSwgaGFuZGxlcikgewogICAgICAgIGlmICghZ2VzdHVyZXMucmVtb3ZlTGlzdGVuZXIobm9kZSwgZXZlbnROYW1lLCBoYW5kbGVyKSkgewogICAgICAgICAgc3VwZXIuX3JlbW92ZUV2ZW50TGlzdGVuZXJGcm9tTm9kZShub2RlLCBldmVudE5hbWUsIGhhbmRsZXIpOwogICAgICAgIH0KICAgICAgfQoKICAgIH0KCiAgICByZXR1cm4gR2VzdHVyZUV2ZW50TGlzdGVuZXJzOwoKICB9KTsKCn0pKCk7Cjwvc2NyaXB0PjxzY3JpcHQ+CiAgKGZ1bmN0aW9uKCkgewogICAgJ3VzZSBzdHJpY3QnOwoKICAgIGNvbnN0IEhPU1RfRElSID0gLzpob3N0XCg6ZGlyXCgobHRyfHJ0bClcKVwpL2c7CiAgICBjb25zdCBIT1NUX0RJUl9SRVBMQUNNRU5UID0gJzpob3N0KFtkaXI9IiQxIl0pJzsKCiAgICBjb25zdCBFTF9ESVIgPSAvKFtcc1x3LSNcLlxbXF1cKl0qKTpkaXJcKChsdHJ8cnRsKVwpL2c7CiAgICBjb25zdCBFTF9ESVJfUkVQTEFDTUVOVCA9ICc6aG9zdChbZGlyPSIkMiJdKSAkMSc7CgogICAgY29uc3QgRElSX0NIRUNLID0gLzpkaXJcKCg/Omx0cnxydGwpXCkvOwogICAgCiAgICBjb25zdCBTSElNX1NIQURPVyA9IEJvb2xlYW4od2luZG93WydTaGFkeURPTSddICYmIHdpbmRvd1snU2hhZHlET00nXVsnaW5Vc2UnXSk7CgogICAgLyoqCiAgICAgKiBAdHlwZSB7IUFycmF5PCFQb2x5bWVyX0Rpck1peGluPn0KICAgICAqLwogICAgY29uc3QgRElSX0lOU1RBTkNFUyA9IFtdOwoKICAgIC8qKiBAdHlwZSB7TXV0YXRpb25PYnNlcnZlcn0gKi8KICAgIGxldCBvYnNlcnZlciA9IG51bGw7CgogICAgbGV0IERPQ1VNRU5UX0RJUiA9ICcnOwoKICAgIGZ1bmN0aW9uIGdldFJUTCgpIHsKICAgICAgRE9DVU1FTlRfRElSID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmdldEF0dHJpYnV0ZSgnZGlyJyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0geyFQb2x5bWVyX0Rpck1peGlufSBpbnN0YW5jZSBJbnN0YW5jZSB0byBzZXQgUlRMIHN0YXR1cyBvbgogICAgICovCiAgICBmdW5jdGlvbiBzZXRSVEwoaW5zdGFuY2UpIHsKICAgICAgaWYgKCFpbnN0YW5jZS5fX2F1dG9EaXJPcHRPdXQpIHsKICAgICAgICBjb25zdCBlbCA9IC8qKiBAdHlwZSB7IUhUTUxFbGVtZW50fSAqLyhpbnN0YW5jZSk7CiAgICAgICAgZWwuc2V0QXR0cmlidXRlKCdkaXInLCBET0NVTUVOVF9ESVIpOwogICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gdXBkYXRlRGlyZWN0aW9uKCkgewogICAgICBnZXRSVEwoKTsKICAgICAgRE9DVU1FTlRfRElSID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmdldEF0dHJpYnV0ZSgnZGlyJyk7CiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgRElSX0lOU1RBTkNFUy5sZW5ndGg7IGkrKykgewogICAgICAgIHNldFJUTChESVJfSU5TVEFOQ0VTW2ldKTsKICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIHRha2VSZWNvcmRzKCkgewogICAgICBpZiAob2JzZXJ2ZXIgJiYgb2JzZXJ2ZXIudGFrZVJlY29yZHMoKS5sZW5ndGgpIHsKICAgICAgICB1cGRhdGVEaXJlY3Rpb24oKTsKICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogRWxlbWVudCBjbGFzcyBtaXhpbiB0aGF0IGFsbG93cyBlbGVtZW50cyB0byB1c2UgdGhlIGA6ZGlyYCBDU1MgU2VsZWN0b3IgdG8gaGF2ZQogICAgICogdGV4dCBkaXJlY3Rpb24gc3BlY2lmaWMgc3R5bGluZy4KICAgICAqCiAgICAgKiBXaXRoIHRoaXMgbWl4aW4sIGFueSBzdHlsZXNoZWV0IHByb3ZpZGVkIGluIHRoZSB0ZW1wbGF0ZSB3aWxsIHRyYW5zZm9ybSBgOmRpcmAgaW50bwogICAgICogYDpob3N0KFtkaXJdKWAgYW5kIHN5bmMgZGlyZWN0aW9uIHdpdGggdGhlIHBhZ2UgdmlhIHRoZSBlbGVtZW50J3MgYGRpcmAgYXR0cmlidXRlLgogICAgICoKICAgICAqIEVsZW1lbnRzIGNhbiBvcHQgb3V0IG9mIHRoZSBnbG9iYWwgcGFnZSB0ZXh0IGRpcmVjdGlvbiBieSBzZXR0aW5nIHRoZSBgZGlyYCBhdHRyaWJ1dGUKICAgICAqIGRpcmVjdGx5IGluIGByZWFkeSgpYCBvciBpbiBIVE1MLgogICAgICoKICAgICAqIENhdmVhdHM6CiAgICAgKiAtIEFwcGxpY2F0aW9ucyBtdXN0IHNldCBgPGh0bWwgZGlyPSJsdHIiPmAgb3IgYDxodG1sIGRpcj0icnRsIj5gIHRvIHN5bmMgZGlyZWN0aW9uCiAgICAgKiAtIEF1dG9tYXRpYyBsZWZ0LXRvLXJpZ2h0IG9yIHJpZ2h0LXRvLWxlZnQgc3R5bGluZyBpcyBzeW5jJ2Qgd2l0aCB0aGUgYDxodG1sPmAgZWxlbWVudCBvbmx5LgogICAgICogLSBDaGFuZ2luZyBgZGlyYCBhdCBydW50aW1lIGlzIHN1cHBvcnRlZC4KICAgICAqIC0gT3B0aW5nIG91dCBvZiB0aGUgZ2xvYmFsIGRpcmVjdGlvbiBzdHlsaW5nIGlzIHBlcm1hbmVudAogICAgICoKICAgICAqIEBtaXhpbkZ1bmN0aW9uCiAgICAgKiBAcG9seW1lcgogICAgICogQGFwcGxpZXNNaXhpbiBQb2x5bWVyLlByb3BlcnR5QWNjZXNzb3JzCiAgICAgKiBAbWVtYmVyb2YgUG9seW1lcgogICAgICovCiAgICBQb2x5bWVyLkRpck1peGluID0gUG9seW1lci5kZWR1cGluZ01peGluKChiYXNlKSA9PiB7CgogICAgICBpZiAoIVNISU1fU0hBRE9XKSB7CiAgICAgICAgaWYgKCFvYnNlcnZlcikgewogICAgICAgICAgZ2V0UlRMKCk7CiAgICAgICAgICBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKHVwZGF0ZURpcmVjdGlvbik7CiAgICAgICAgICBvYnNlcnZlci5vYnNlcnZlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwge2F0dHJpYnV0ZXM6IHRydWUsIGF0dHJpYnV0ZUZpbHRlcjogWydkaXInXX0pOwogICAgICAgIH0KICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIEBjb25zdHJ1Y3RvcgogICAgICAgKiBAZXh0ZW5kcyB7YmFzZX0KICAgICAgICogQGltcGxlbWVudHMge1BvbHltZXJfUHJvcGVydHlBY2Nlc3NvcnN9CiAgICAgICAqIEBwcml2YXRlCiAgICAgICAqLwogICAgICBjb25zdCBlbGVtZW50QmFzZSA9IFBvbHltZXIuUHJvcGVydHlBY2Nlc3NvcnMoYmFzZSk7CgogICAgICAvKioKICAgICAgICogQHBvbHltZXIKICAgICAgICogQG1peGluQ2xhc3MKICAgICAgICogQGltcGxlbWVudHMge1BvbHltZXJfRGlyTWl4aW59CiAgICAgICAqLwogICAgICBjbGFzcyBEaXIgZXh0ZW5kcyBlbGVtZW50QmFzZSB7CgogICAgICAgIC8qKgogICAgICAgICAqIEBvdmVycmlkZQogICAgICAgICAqIEBzdXBwcmVzcyB7bWlzc2luZ1Byb3BlcnRpZXN9IEludGVyZmFjZXMgaW4gY2xvc3VyZSBkbyBub3QgaW5oZXJpdCBzdGF0aWNzLCBidXQgY2xhc3NlcyBkbwogICAgICAgICAqLwogICAgICAgIHN0YXRpYyBfcHJvY2Vzc1N0eWxlVGV4dChjc3NUZXh0LCBiYXNlVVJJKSB7CiAgICAgICAgICBjc3NUZXh0ID0gc3VwZXIuX3Byb2Nlc3NTdHlsZVRleHQoY3NzVGV4dCwgYmFzZVVSSSk7CiAgICAgICAgICBpZiAoIVNISU1fU0hBRE9XICYmIERJUl9DSEVDSy50ZXN0KGNzc1RleHQpKSB7CiAgICAgICAgICAgIGNzc1RleHQgPSB0aGlzLl9yZXBsYWNlRGlySW5Dc3NUZXh0KGNzc1RleHQpOwogICAgICAgICAgICB0aGlzLl9fYWN0aXZhdGVEaXIgPSB0cnVlOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIGNzc1RleHQ7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBSZXBsYWNlIGA6ZGlyYCBpbiB0aGUgZ2l2ZW4gQ1NTIHRleHQKICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IENTUyB0ZXh0IHRvIHJlcGxhY2UgRElSCiAgICAgICAgICogQHJldHVybiB7c3RyaW5nfSBNb2RpZmllZCBDU1MKICAgICAgICAgKi8KICAgICAgICBzdGF0aWMgX3JlcGxhY2VEaXJJbkNzc1RleHQodGV4dCkgewogICAgICAgICAgbGV0IHJlcGxhY2VkVGV4dCA9IHRleHQ7CiAgICAgICAgICByZXBsYWNlZFRleHQgPSByZXBsYWNlZFRleHQucmVwbGFjZShIT1NUX0RJUiwgSE9TVF9ESVJfUkVQTEFDTUVOVCk7CiAgICAgICAgICByZXBsYWNlZFRleHQgPSByZXBsYWNlZFRleHQucmVwbGFjZShFTF9ESVIsIEVMX0RJUl9SRVBMQUNNRU5UKTsKICAgICAgICAgIHJldHVybiByZXBsYWNlZFRleHQ7CiAgICAgICAgfQoKICAgICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICAgIHN1cGVyKCk7CiAgICAgICAgICAvKiogQHR5cGUge2Jvb2xlYW59ICovCiAgICAgICAgICB0aGlzLl9fYXV0b0Rpck9wdE91dCA9IGZhbHNlOwogICAgICAgIH0KCiAgICAgICAgLyoqCiAgICAgICAgICogQHN1cHByZXNzIHtpbnZhbGlkQ2FzdHN9IENsb3N1cmUgZG9lc24ndCB1bmRlcnN0YW5kIHRoYXQgYHRoaXNgIGlzIGFuIEhUTUxFbGVtZW50CiAgICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICAgKi8KICAgICAgICByZWFkeSgpIHsKICAgICAgICAgIHN1cGVyLnJlYWR5KCk7CiAgICAgICAgICB0aGlzLl9fYXV0b0Rpck9wdE91dCA9IC8qKiBAdHlwZSB7IUhUTUxFbGVtZW50fSAqLyh0aGlzKS5oYXNBdHRyaWJ1dGUoJ2RpcicpOwogICAgICAgIH0KCiAgICAgICAgLyoqCiAgICAgICAgICogQHN1cHByZXNzIHttaXNzaW5nUHJvcGVydGllc30gSWYgaXQgZXhpc3RzIG9uIGVsZW1lbnRCYXNlLCBpdCBjYW4gYmUgc3VwZXInZAogICAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAgICovCiAgICAgICAgY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICAgICAgICBpZiAoZWxlbWVudEJhc2UucHJvdG90eXBlLmNvbm5lY3RlZENhbGxiYWNrKSB7CiAgICAgICAgICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAodGhpcy5jb25zdHJ1Y3Rvci5fX2FjdGl2YXRlRGlyKSB7CiAgICAgICAgICAgIHRha2VSZWNvcmRzKCk7CiAgICAgICAgICAgIERJUl9JTlNUQU5DRVMucHVzaCh0aGlzKTsKICAgICAgICAgICAgc2V0UlRMKHRoaXMpOwogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLyoqCiAgICAgICAgICogQHN1cHByZXNzIHttaXNzaW5nUHJvcGVydGllc30gSWYgaXQgZXhpc3RzIG9uIGVsZW1lbnRCYXNlLCBpdCBjYW4gYmUgc3VwZXInZAogICAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAgICovCiAgICAgICAgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICAgICAgICBpZiAoZWxlbWVudEJhc2UucHJvdG90eXBlLmRpc2Nvbm5lY3RlZENhbGxiYWNrKSB7CiAgICAgICAgICAgIHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAodGhpcy5jb25zdHJ1Y3Rvci5fX2FjdGl2YXRlRGlyKSB7CiAgICAgICAgICAgIGNvbnN0IGlkeCA9IERJUl9JTlNUQU5DRVMuaW5kZXhPZih0aGlzKTsKICAgICAgICAgICAgaWYgKGlkeCA+IC0xKSB7CiAgICAgICAgICAgICAgRElSX0lOU1RBTkNFUy5zcGxpY2UoaWR4LCAxKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQoKICAgICAgRGlyLl9fYWN0aXZhdGVEaXIgPSBmYWxzZTsKCiAgICAgIHJldHVybiBEaXI7CiAgICB9KTsKICB9KSgpOwo8L3NjcmlwdD48c2NyaXB0PgoKKGZ1bmN0aW9uKCkgewoKICAndXNlIHN0cmljdCc7CgogIC8vIHJ1biBhIGNhbGxiYWNrIHdoZW4gSFRNTEltcG9ydHMgYXJlIHJlYWR5IG9yIGltbWVkaWF0ZWx5IGlmCiAgLy8gdGhpcyBhcGkgaXMgbm90IGF2YWlsYWJsZS4KICBmdW5jdGlvbiB3aGVuSW1wb3J0c1JlYWR5KGNiKSB7CiAgICBpZiAod2luZG93LkhUTUxJbXBvcnRzKSB7CiAgICAgIEhUTUxJbXBvcnRzLndoZW5SZWFkeShjYik7CiAgICB9IGVsc2UgewogICAgICBjYigpOwogICAgfQogIH0KCiAgLyoqCiAgICogQ29udmVuaWVuY2UgbWV0aG9kIGZvciBpbXBvcnRpbmcgYW4gSFRNTCBkb2N1bWVudCBpbXBlcmF0aXZlbHkuCiAgICoKICAgKiBUaGlzIG1ldGhvZCBjcmVhdGVzIGEgbmV3IGA8bGluayByZWw9ImltcG9ydCI+YCBlbGVtZW50IHdpdGgKICAgKiB0aGUgcHJvdmlkZWQgVVJMIGFuZCBhcHBlbmRzIGl0IHRvIHRoZSBkb2N1bWVudCB0byBzdGFydCBsb2FkaW5nLgogICAqIEluIHRoZSBgb25sb2FkYCBjYWxsYmFjaywgdGhlIGBpbXBvcnRgIHByb3BlcnR5IG9mIHRoZSBgbGlua2AKICAgKiBlbGVtZW50IHdpbGwgY29udGFpbiB0aGUgaW1wb3J0ZWQgZG9jdW1lbnQgY29udGVudHMuCiAgICoKICAgKiBAbWVtYmVyb2YgUG9seW1lcgogICAqIEBwYXJhbSB7c3RyaW5nfSBocmVmIFVSTCB0byBkb2N1bWVudCB0byBsb2FkLgogICAqIEBwYXJhbSB7P2Z1bmN0aW9uKCFFdmVudCk6dm9pZD19IG9ubG9hZCBDYWxsYmFjayB0byBub3RpZnkgd2hlbiBhbiBpbXBvcnQgc3VjY2Vzc2Z1bGx5CiAgICogICBsb2FkZWQuCiAgICogQHBhcmFtIHs/ZnVuY3Rpb24oIUVycm9yRXZlbnQpOnZvaWQ9fSBvbmVycm9yIENhbGxiYWNrIHRvIG5vdGlmeSB3aGVuIGFuIGltcG9ydAogICAqICAgdW5zdWNjZXNzZnVsbHkgbG9hZGVkLgogICAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdEFzeW5jIFRydWUgaWYgdGhlIGltcG9ydCBzaG91bGQgYmUgbG9hZGVkIGBhc3luY2AuCiAgICogICBEZWZhdWx0cyB0byBgZmFsc2VgLgogICAqIEByZXR1cm4geyFIVE1MTGlua0VsZW1lbnR9IFRoZSBsaW5rIGVsZW1lbnQgZm9yIHRoZSBVUkwgdG8gYmUgbG9hZGVkLgogICAqLwogIFBvbHltZXIuaW1wb3J0SHJlZiA9IGZ1bmN0aW9uKGhyZWYsIG9ubG9hZCwgb25lcnJvciwgb3B0QXN5bmMpIHsKICAgIGxldCBsaW5rID0gLyoqIEB0eXBlIHtIVE1MTGlua0VsZW1lbnR9ICovCiAgICAgIChkb2N1bWVudC5oZWFkLnF1ZXJ5U2VsZWN0b3IoJ2xpbmtbaHJlZj0iJyArIGhyZWYgKyAnIl1baW1wb3J0LWhyZWZdJykpOwogICAgaWYgKCFsaW5rKSB7CiAgICAgIGxpbmsgPSAvKiogQHR5cGUge0hUTUxMaW5rRWxlbWVudH0gKi8gKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xpbmsnKSk7CiAgICAgIGxpbmsucmVsID0gJ2ltcG9ydCc7CiAgICAgIGxpbmsuaHJlZiA9IGhyZWY7CiAgICAgIGxpbmsuc2V0QXR0cmlidXRlKCdpbXBvcnQtaHJlZicsICcnKTsKICAgIH0KICAgIC8vIGFsd2F5cyBlbnN1cmUgbGluayBoYXMgYGFzeW5jYCBhdHRyaWJ1dGUgaWYgdXNlciBzcGVjaWZpZWQgb25lLAogICAgLy8gZXZlbiBpZiBpdCB3YXMgcHJldmlvdXNseSBub3QgYXN5bmMuIFRoaXMgaXMgY29uc2lkZXJlZCBsZXNzIGNvbmZ1c2luZy4KICAgIGlmIChvcHRBc3luYykgewogICAgICBsaW5rLnNldEF0dHJpYnV0ZSgnYXN5bmMnLCAnJyk7CiAgICB9CiAgICAvLyBOT1RFOiB0aGUgbGluayBtYXkgbm93IGJlIGluIDMgc3RhdGVzOiAoMSkgcGVuZGluZyBpbnNlcnRpb24sCiAgICAvLyAoMikgaW5mbGlnaHQsICgzKSBhbHJlYWR5IGxvYWRlZC4gSW4gZWFjaCBjYXNlLCB3ZSBuZWVkIHRvIGFkZAogICAgLy8gZXZlbnQgbGlzdGVuZXJzIHRvIHByb2Nlc3MgY2FsbGJhY2tzLgogICAgbGV0IGNsZWFudXAgPSBmdW5jdGlvbigpIHsKICAgICAgbGluay5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkJywgbG9hZExpc3RlbmVyKTsKICAgICAgbGluay5yZW1vdmVFdmVudExpc3RlbmVyKCdlcnJvcicsIGVycm9yTGlzdGVuZXIpOwogICAgfTsKICAgIGxldCBsb2FkTGlzdGVuZXIgPSBmdW5jdGlvbihldmVudCkgewogICAgICBjbGVhbnVwKCk7CiAgICAgIC8vIEluIGNhc2Ugb2YgYSBzdWNjZXNzZnVsIGxvYWQsIGNhY2hlIHRoZSBsb2FkIGV2ZW50IG9uIHRoZSBsaW5rIHNvCiAgICAgIC8vIHRoYXQgaXQgY2FuIGJlIHVzZWQgdG8gc2hvcnQtY2lyY3VpdCB0aGlzIG1ldGhvZCBpbiB0aGUgZnV0dXJlIHdoZW4KICAgICAgLy8gaXQgaXMgY2FsbGVkIHdpdGggdGhlIHNhbWUgaHJlZiBwYXJhbS4KICAgICAgbGluay5fX2R5bmFtaWNJbXBvcnRMb2FkZWQgPSB0cnVlOwogICAgICBpZiAob25sb2FkKSB7CiAgICAgICAgd2hlbkltcG9ydHNSZWFkeSgoKSA9PiB7CiAgICAgICAgICBvbmxvYWQoZXZlbnQpOwogICAgICAgIH0pOwogICAgICB9CiAgICB9OwogICAgbGV0IGVycm9yTGlzdGVuZXIgPSBmdW5jdGlvbihldmVudCkgewogICAgICBjbGVhbnVwKCk7CiAgICAgIC8vIEluIGNhc2Ugb2YgYW4gZXJyb3IsIHJlbW92ZSB0aGUgbGluayBmcm9tIHRoZSBkb2N1bWVudCBzbyB0aGF0IGl0CiAgICAgIC8vIHdpbGwgYmUgYXV0b21hdGljYWxseSBjcmVhdGVkIGFnYWluIHRoZSBuZXh0IHRpbWUgYGltcG9ydEhyZWZgIGlzCiAgICAgIC8vIGNhbGxlZC4KICAgICAgaWYgKGxpbmsucGFyZW50Tm9kZSkgewogICAgICAgIGxpbmsucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChsaW5rKTsKICAgICAgfQogICAgICBpZiAob25lcnJvcikgewogICAgICAgIHdoZW5JbXBvcnRzUmVhZHkoKCkgPT4gewogICAgICAgICAgb25lcnJvcihldmVudCk7CiAgICAgICAgfSk7CiAgICAgIH0KICAgIH07CiAgICBsaW5rLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBsb2FkTGlzdGVuZXIpOwogICAgbGluay5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIGVycm9yTGlzdGVuZXIpOwogICAgaWYgKGxpbmsucGFyZW50Tm9kZSA9PSBudWxsKSB7CiAgICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQobGluayk7CiAgICAvLyBpZiB0aGUgbGluayBhbHJlYWR5IGxvYWRlZCwgZGlzcGF0Y2ggYSBmYWtlIGxvYWQgZXZlbnQKICAgIC8vIHNvIHRoYXQgbGlzdGVuZXJzIGFyZSBjYWxsZWQgYW5kIGdldCBhIHByb3BlciBldmVudCBhcmd1bWVudC4KICAgIH0gZWxzZSBpZiAobGluay5fX2R5bmFtaWNJbXBvcnRMb2FkZWQpIHsKICAgICAgbGluay5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgnbG9hZCcpKTsKICAgIH0KICAgIHJldHVybiBsaW5rOwogIH07Cgp9KSgpOwo8L3NjcmlwdD48c2NyaXB0PgooZnVuY3Rpb24oKSB7CgogICd1c2Ugc3RyaWN0JzsKCiAgbGV0IHNjaGVkdWxlZCA9IGZhbHNlOwogIGxldCBiZWZvcmVSZW5kZXJRdWV1ZSA9IFtdOwogIGxldCBhZnRlclJlbmRlclF1ZXVlID0gW107CgogIGZ1bmN0aW9uIHNjaGVkdWxlKCkgewogICAgc2NoZWR1bGVkID0gdHJ1ZTsKICAgIC8vIGJlZm9yZSBuZXh0IHJlbmRlcgogICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uKCkgewogICAgICBzY2hlZHVsZWQgPSBmYWxzZTsKICAgICAgZmx1c2hRdWV1ZShiZWZvcmVSZW5kZXJRdWV1ZSk7CiAgICAgIC8vIGFmdGVyIHRoZSByZW5kZXIKICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKICAgICAgICBydW5RdWV1ZShhZnRlclJlbmRlclF1ZXVlKTsKICAgICAgfSk7CiAgICB9KTsKICB9CgogIGZ1bmN0aW9uIGZsdXNoUXVldWUocXVldWUpIHsKICAgIHdoaWxlIChxdWV1ZS5sZW5ndGgpIHsKICAgICAgY2FsbE1ldGhvZChxdWV1ZS5zaGlmdCgpKTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIHJ1blF1ZXVlKHF1ZXVlKSB7CiAgICBmb3IgKGxldCBpPTAsIGw9cXVldWUubGVuZ3RoOyBpIDwgbDsgaSsrKSB7CiAgICAgIGNhbGxNZXRob2QocXVldWUuc2hpZnQoKSk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBjYWxsTWV0aG9kKGluZm8pIHsKICAgIGNvbnN0IGNvbnRleHQgPSBpbmZvWzBdOwogICAgY29uc3QgY2FsbGJhY2sgPSBpbmZvWzFdOwogICAgY29uc3QgYXJncyA9IGluZm9bMl07CiAgICB0cnkgewogICAgICBjYWxsYmFjay5hcHBseShjb250ZXh0LCBhcmdzKTsKICAgIH0gY2F0Y2goZSkgewogICAgICBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICB0aHJvdyBlOwogICAgICB9KTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIGZsdXNoKCkgewogICAgd2hpbGUgKGJlZm9yZVJlbmRlclF1ZXVlLmxlbmd0aCB8fCBhZnRlclJlbmRlclF1ZXVlLmxlbmd0aCkgewogICAgICBmbHVzaFF1ZXVlKGJlZm9yZVJlbmRlclF1ZXVlKTsKICAgICAgZmx1c2hRdWV1ZShhZnRlclJlbmRlclF1ZXVlKTsKICAgIH0KICAgIHNjaGVkdWxlZCA9IGZhbHNlOwogIH0KCiAgLyoqCiAgICogTW9kdWxlIGZvciBzY2hlZHVsaW5nIGZsdXNoYWJsZSBwcmUtcmVuZGVyIGFuZCBwb3N0LXJlbmRlciB0YXNrcy4KICAgKgogICAqIEBuYW1lc3BhY2UKICAgKiBAbWVtYmVyb2YgUG9seW1lcgogICAqIEBzdW1tYXJ5IE1vZHVsZSBmb3Igc2NoZWR1bGluZyBmbHVzaGFibGUgcHJlLXJlbmRlciBhbmQgcG9zdC1yZW5kZXIgdGFza3MuCiAgICovCiAgUG9seW1lci5SZW5kZXJTdGF0dXMgPSB7CgogICAgLyoqCiAgICAgKiBFbnF1ZXVlcyBhIGNhbGxiYWNrIHdoaWNoIHdpbGwgYmUgcnVuIGJlZm9yZSB0aGUgbmV4dCByZW5kZXIsIGF0CiAgICAgKiBgcmVxdWVzdEFuaW1hdGlvbkZyYW1lYCB0aW1pbmcuCiAgICAgKgogICAgICogVGhpcyBtZXRob2QgaXMgdXNlZnVsIGZvciBlbnF1ZXVpbmcgd29yayB0aGF0IHJlcXVpcmVzIERPTSBtZWFzdXJlbWVudCwKICAgICAqIHNpbmNlIG1lYXN1cmVtZW50IG1heSBub3QgYmUgcmVsaWFibGUgaW4gY3VzdG9tIGVsZW1lbnQgY2FsbGJhY2tzIGJlZm9yZQogICAgICogdGhlIGZpcnN0IHJlbmRlciwgYXMgd2VsbCBhcyBmb3IgYmF0Y2hpbmcgbWVhc3VyZW1lbnQgdGFza3MgaW4gZ2VuZXJhbC4KICAgICAqCiAgICAgKiBUYXNrcyBpbiB0aGlzIHF1ZXVlIG1heSBiZSBmbHVzaGVkIGJ5IGNhbGxpbmcgYFBvbHltZXIuUmVuZGVyU3RhdHVzLmZsdXNoKClgLgogICAgICoKICAgICAqIEBtZW1iZXJvZiBQb2x5bWVyLlJlbmRlclN0YXR1cwogICAgICogQHBhcmFtIHsqfSBjb250ZXh0IENvbnRleHQgb2JqZWN0IHRoZSBjYWxsYmFjayBmdW5jdGlvbiB3aWxsIGJlIGJvdW5kIHRvCiAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKC4uLiopOnZvaWR9IGNhbGxiYWNrIENhbGxiYWNrIGZ1bmN0aW9uCiAgICAgKiBAcGFyYW0geyFBcnJheT19IGFyZ3MgQW4gYXJyYXkgb2YgYXJndW1lbnRzIHRvIGNhbGwgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHdpdGgKICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgKi8KICAgIGJlZm9yZU5leHRSZW5kZXI6IGZ1bmN0aW9uKGNvbnRleHQsIGNhbGxiYWNrLCBhcmdzKSB7CiAgICAgIGlmICghc2NoZWR1bGVkKSB7CiAgICAgICAgc2NoZWR1bGUoKTsKICAgICAgfQogICAgICBiZWZvcmVSZW5kZXJRdWV1ZS5wdXNoKFtjb250ZXh0LCBjYWxsYmFjaywgYXJnc10pOwogICAgfSwKCiAgICAvKioKICAgICAqIEVucXVldWVzIGEgY2FsbGJhY2sgd2hpY2ggd2lsbCBiZSBydW4gYWZ0ZXIgdGhlIG5leHQgcmVuZGVyLCBlcXVpdmFsZW50CiAgICAgKiB0byBvbmUgdGFzayAoYHNldFRpbWVvdXRgKSBhZnRlciB0aGUgbmV4dCBgcmVxdWVzdEFuaW1hdGlvbkZyYW1lYC4KICAgICAqCiAgICAgKiBUaGlzIG1ldGhvZCBpcyB1c2VmdWwgZm9yIHR1bmluZyB0aGUgZmlyc3QtcmVuZGVyIHBlcmZvcm1hbmNlIG9mIGFuCiAgICAgKiBlbGVtZW50IG9yIGFwcGxpY2F0aW9uIGJ5IGRlZmVycmluZyBub24tY3JpdGljYWwgd29yayB1bnRpbCBhZnRlciB0aGUKICAgICAqIGZpcnN0IHBhaW50LiAgVHlwaWNhbCBub24tcmVuZGVyLWNyaXRpY2FsIHdvcmsgbWF5IGluY2x1ZGUgYWRkaW5nIFVJCiAgICAgKiBldmVudCBsaXN0ZW5lcnMgYW5kIGFyaWEgYXR0cmlidXRlcy4KICAgICAqCiAgICAgKiBAbWVtYmVyb2YgUG9seW1lci5SZW5kZXJTdGF0dXMKICAgICAqIEBwYXJhbSB7Kn0gY29udGV4dCBDb250ZXh0IG9iamVjdCB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gd2lsbCBiZSBib3VuZCB0bwogICAgICogQHBhcmFtIHtmdW5jdGlvbiguLi4qKTp2b2lkfSBjYWxsYmFjayBDYWxsYmFjayBmdW5jdGlvbgogICAgICogQHBhcmFtIHshQXJyYXk9fSBhcmdzIEFuIGFycmF5IG9mIGFyZ3VtZW50cyB0byBjYWxsIHRoZSBjYWxsYmFjayBmdW5jdGlvbiB3aXRoCiAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICovCiAgICBhZnRlck5leHRSZW5kZXI6IGZ1bmN0aW9uKGNvbnRleHQsIGNhbGxiYWNrLCBhcmdzKSB7CiAgICAgIGlmICghc2NoZWR1bGVkKSB7CiAgICAgICAgc2NoZWR1bGUoKTsKICAgICAgfQogICAgICBhZnRlclJlbmRlclF1ZXVlLnB1c2goW2NvbnRleHQsIGNhbGxiYWNrLCBhcmdzXSk7CiAgICB9LAoKICAgIC8qKgogICAgICogRmx1c2hlcyBhbGwgYGJlZm9yZU5leHRSZW5kZXJgIHRhc2tzLCBmb2xsb3dlZCBieSBhbGwgYGFmdGVyTmV4dFJlbmRlcmAKICAgICAqIHRhc2tzLgogICAgICoKICAgICAqIEBtZW1iZXJvZiBQb2x5bWVyLlJlbmRlclN0YXR1cwogICAgICogQHJldHVybiB7dm9pZH0KICAgICAqLwogICAgZmx1c2g6IGZsdXNoCgogIH07Cgp9KSgpOwo8L3NjcmlwdD48c2NyaXB0PgooZnVuY3Rpb24oKSB7CiAgJ3VzZSBzdHJpY3QnOwoKICAvLyB1bnJlc29sdmVkCgogIGZ1bmN0aW9uIHJlc29sdmUoKSB7CiAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUF0dHJpYnV0ZSgndW5yZXNvbHZlZCcpOwogIH0KCiAgaWYgKHdpbmRvdy5XZWJDb21wb25lbnRzKSB7CiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignV2ViQ29tcG9uZW50c1JlYWR5JywgcmVzb2x2ZSk7CiAgfSBlbHNlIHsKICAgIGlmIChkb2N1bWVudC5yZWFkeVN0YXRlID09PSAnaW50ZXJhY3RpdmUnIHx8IGRvY3VtZW50LnJlYWR5U3RhdGUgPT09ICdjb21wbGV0ZScpIHsKICAgICAgcmVzb2x2ZSgpOwogICAgfSBlbHNlIHsKICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLCByZXNvbHZlKTsKICAgIH0KICB9Cgp9KSgpOwo8L3NjcmlwdD48c2NyaXB0PgooZnVuY3Rpb24oKSB7CgogICd1c2Ugc3RyaWN0JzsKCiAgZnVuY3Rpb24gbmV3U3BsaWNlKGluZGV4LCByZW1vdmVkLCBhZGRlZENvdW50KSB7CiAgICByZXR1cm4gewogICAgICBpbmRleDogaW5kZXgsCiAgICAgIHJlbW92ZWQ6IHJlbW92ZWQsCiAgICAgIGFkZGVkQ291bnQ6IGFkZGVkQ291bnQKICAgIH07CiAgfQoKICBjb25zdCBFRElUX0xFQVZFID0gMDsKICBjb25zdCBFRElUX1VQREFURSA9IDE7CiAgY29uc3QgRURJVF9BREQgPSAyOwogIGNvbnN0IEVESVRfREVMRVRFID0gMzsKCiAgLy8gTm90ZTogVGhpcyBmdW5jdGlvbiBpcyAqYmFzZWQqIG9uIHRoZSBjb21wdXRhdGlvbiBvZiB0aGUgTGV2ZW5zaHRlaW4KICAvLyAiZWRpdCIgZGlzdGFuY2UuIFRoZSBvbmUgY2hhbmdlIGlzIHRoYXQgInVwZGF0ZXMiIGFyZSB0cmVhdGVkIGFzIHR3bwogIC8vIGVkaXRzIC0gbm90IG9uZS4gV2l0aCBBcnJheSBzcGxpY2VzLCBhbiB1cGRhdGUgaXMgcmVhbGx5IGEgZGVsZXRlCiAgLy8gZm9sbG93ZWQgYnkgYW4gYWRkLiBCeSByZXRhaW5pbmcgdGhpcywgd2Ugb3B0aW1pemUgZm9yICJrZWVwaW5nIiB0aGUKICAvLyBtYXhpbXVtIGFycmF5IGl0ZW1zIGluIHRoZSBvcmlnaW5hbCBhcnJheS4gRm9yIGV4YW1wbGU6CiAgLy8KICAvLyAgICd4eHh4MTIzJyAtPiAnMTIzeXl5eScKICAvLwogIC8vIFdpdGggMS1lZGl0IHVwZGF0ZXMsIHRoZSBzaG9ydGVzdCBwYXRoIHdvdWxkIGJlIGp1c3QgdG8gdXBkYXRlIGFsbCBzZXZlbgogIC8vIGNoYXJhY3RlcnMuIFdpdGggMi1lZGl0IHVwZGF0ZXMsIHdlIGRlbGV0ZSA0LCBsZWF2ZSAzLCBhbmQgYWRkIDQuIFRoaXMKICAvLyBsZWF2ZXMgdGhlIHN1YnN0cmluZyAnMTIzJyBpbnRhY3QuCiAgZnVuY3Rpb24gY2FsY0VkaXREaXN0YW5jZXMoY3VycmVudCwgY3VycmVudFN0YXJ0LCBjdXJyZW50RW5kLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbGQsIG9sZFN0YXJ0LCBvbGRFbmQpIHsKICAgIC8vICJEZWxldGlvbiIgY29sdW1ucwogICAgbGV0IHJvd0NvdW50ID0gb2xkRW5kIC0gb2xkU3RhcnQgKyAxOwogICAgbGV0IGNvbHVtbkNvdW50ID0gY3VycmVudEVuZCAtIGN1cnJlbnRTdGFydCArIDE7CiAgICBsZXQgZGlzdGFuY2VzID0gbmV3IEFycmF5KHJvd0NvdW50KTsKCiAgICAvLyAiQWRkaXRpb24iIHJvd3MuIEluaXRpYWxpemUgbnVsbCBjb2x1bW4uCiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJvd0NvdW50OyBpKyspIHsKICAgICAgZGlzdGFuY2VzW2ldID0gbmV3IEFycmF5KGNvbHVtbkNvdW50KTsKICAgICAgZGlzdGFuY2VzW2ldWzBdID0gaTsKICAgIH0KCiAgICAvLyBJbml0aWFsaXplIG51bGwgcm93CiAgICBmb3IgKGxldCBqID0gMDsgaiA8IGNvbHVtbkNvdW50OyBqKyspCiAgICAgIGRpc3RhbmNlc1swXVtqXSA9IGo7CgogICAgZm9yIChsZXQgaSA9IDE7IGkgPCByb3dDb3VudDsgaSsrKSB7CiAgICAgIGZvciAobGV0IGogPSAxOyBqIDwgY29sdW1uQ291bnQ7IGorKykgewogICAgICAgIGlmIChlcXVhbHMoY3VycmVudFtjdXJyZW50U3RhcnQgKyBqIC0gMV0sIG9sZFtvbGRTdGFydCArIGkgLSAxXSkpCiAgICAgICAgICBkaXN0YW5jZXNbaV1bal0gPSBkaXN0YW5jZXNbaSAtIDFdW2ogLSAxXTsKICAgICAgICBlbHNlIHsKICAgICAgICAgIGxldCBub3J0aCA9IGRpc3RhbmNlc1tpIC0gMV1bal0gKyAxOwogICAgICAgICAgbGV0IHdlc3QgPSBkaXN0YW5jZXNbaV1baiAtIDFdICsgMTsKICAgICAgICAgIGRpc3RhbmNlc1tpXVtqXSA9IG5vcnRoIDwgd2VzdCA/IG5vcnRoIDogd2VzdDsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gZGlzdGFuY2VzOwogIH0KCiAgLy8gVGhpcyBzdGFydHMgYXQgdGhlIGZpbmFsIHdlaWdodCwgYW5kIHdhbGtzICJiYWNrd2FyZCIgYnkgZmluZGluZwogIC8vIHRoZSBtaW5pbXVtIHByZXZpb3VzIHdlaWdodCByZWN1cnNpdmVseSB1bnRpbCB0aGUgb3JpZ2luIG9mIHRoZSB3ZWlnaHQKICAvLyBtYXRyaXguCiAgZnVuY3Rpb24gc3BsaWNlT3BlcmF0aW9uc0Zyb21FZGl0RGlzdGFuY2VzKGRpc3RhbmNlcykgewogICAgbGV0IGkgPSBkaXN0YW5jZXMubGVuZ3RoIC0gMTsKICAgIGxldCBqID0gZGlzdGFuY2VzWzBdLmxlbmd0aCAtIDE7CiAgICBsZXQgY3VycmVudCA9IGRpc3RhbmNlc1tpXVtqXTsKICAgIGxldCBlZGl0cyA9IFtdOwogICAgd2hpbGUgKGkgPiAwIHx8IGogPiAwKSB7CiAgICAgIGlmIChpID09IDApIHsKICAgICAgICBlZGl0cy5wdXNoKEVESVRfQUREKTsKICAgICAgICBqLS07CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgaWYgKGogPT0gMCkgewogICAgICAgIGVkaXRzLnB1c2goRURJVF9ERUxFVEUpOwogICAgICAgIGktLTsKICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICBsZXQgbm9ydGhXZXN0ID0gZGlzdGFuY2VzW2kgLSAxXVtqIC0gMV07CiAgICAgIGxldCB3ZXN0ID0gZGlzdGFuY2VzW2kgLSAxXVtqXTsKICAgICAgbGV0IG5vcnRoID0gZGlzdGFuY2VzW2ldW2ogLSAxXTsKCiAgICAgIGxldCBtaW47CiAgICAgIGlmICh3ZXN0IDwgbm9ydGgpCiAgICAgICAgbWluID0gd2VzdCA8IG5vcnRoV2VzdCA/IHdlc3QgOiBub3J0aFdlc3Q7CiAgICAgIGVsc2UKICAgICAgICBtaW4gPSBub3J0aCA8IG5vcnRoV2VzdCA/IG5vcnRoIDogbm9ydGhXZXN0OwoKICAgICAgaWYgKG1pbiA9PSBub3J0aFdlc3QpIHsKICAgICAgICBpZiAobm9ydGhXZXN0ID09IGN1cnJlbnQpIHsKICAgICAgICAgIGVkaXRzLnB1c2goRURJVF9MRUFWRSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGVkaXRzLnB1c2goRURJVF9VUERBVEUpOwogICAgICAgICAgY3VycmVudCA9IG5vcnRoV2VzdDsKICAgICAgICB9CiAgICAgICAgaS0tOwogICAgICAgIGotLTsKICAgICAgfSBlbHNlIGlmIChtaW4gPT0gd2VzdCkgewogICAgICAgIGVkaXRzLnB1c2goRURJVF9ERUxFVEUpOwogICAgICAgIGktLTsKICAgICAgICBjdXJyZW50ID0gd2VzdDsKICAgICAgfSBlbHNlIHsKICAgICAgICBlZGl0cy5wdXNoKEVESVRfQUREKTsKICAgICAgICBqLS07CiAgICAgICAgY3VycmVudCA9IG5vcnRoOwogICAgICB9CiAgICB9CgogICAgZWRpdHMucmV2ZXJzZSgpOwogICAgcmV0dXJuIGVkaXRzOwogIH0KCiAgLyoqCiAgICogU3BsaWNlIFByb2plY3Rpb24gZnVuY3Rpb25zOgogICAqCiAgICogQSBzcGxpY2UgbWFwIGlzIGEgcmVwcmVzZW50YXRpb24gb2YgaG93IGEgcHJldmlvdXMgYXJyYXkgb2YgaXRlbXMKICAgKiB3YXMgdHJhbnNmb3JtZWQgaW50byBhIG5ldyBhcnJheSBvZiBpdGVtcy4gQ29uY2VwdHVhbGx5IGl0IGlzIGEgbGlzdCBvZgogICAqIHR1cGxlcyBvZgogICAqCiAgICogICA8aW5kZXgsIHJlbW92ZWQsIGFkZGVkQ291bnQ+CiAgICoKICAgKiB3aGljaCBhcmUga2VwdCBpbiBhc2NlbmRpbmcgaW5kZXggb3JkZXIgb2YuIFRoZSB0dXBsZSByZXByZXNlbnRzIHRoYXQgYXQKICAgKiB0aGUgfGluZGV4fCwgfHJlbW92ZWR8IHNlcXVlbmNlIG9mIGl0ZW1zIHdlcmUgcmVtb3ZlZCwgYW5kIGNvdW50aW5nIGZvcndhcmQKICAgKiBmcm9tIHxpbmRleHwsIHxhZGRlZENvdW50fCBpdGVtcyB3ZXJlIGFkZGVkLgogICAqLwoKICAvKioKICAgKiBMYWNraW5nIGluZGl2aWR1YWwgc3BsaWNlIG11dGF0aW9uIGluZm9ybWF0aW9uLCB0aGUgbWluaW1hbCBzZXQgb2YKICAgKiBzcGxpY2VzIGNhbiBiZSBzeW50aGVzaXplZCBnaXZlbiB0aGUgcHJldmlvdXMgc3RhdGUgYW5kIGZpbmFsIHN0YXRlIG9mIGFuCiAgICogYXJyYXkuIFRoZSBiYXNpYyBhcHByb2FjaCBpcyB0byBjYWxjdWxhdGUgdGhlIGVkaXQgZGlzdGFuY2UgbWF0cml4IGFuZAogICAqIGNob29zZSB0aGUgc2hvcnRlc3QgcGF0aCB0aHJvdWdoIGl0LgogICAqCiAgICogQ29tcGxleGl0eTogTyhsICogcCkKICAgKiAgIGw6IFRoZSBsZW5ndGggb2YgdGhlIGN1cnJlbnQgYXJyYXkKICAgKiAgIHA6IFRoZSBsZW5ndGggb2YgdGhlIG9sZCBhcnJheQogICAqCiAgICogQHBhcmFtIHshQXJyYXl9IGN1cnJlbnQgVGhlIGN1cnJlbnQgImNoYW5nZWQiIGFycmF5IGZvciB3aGljaCB0bwogICAqIGNhbGN1bGF0ZSBzcGxpY2VzLgogICAqIEBwYXJhbSB7bnVtYmVyfSBjdXJyZW50U3RhcnQgU3RhcnRpbmcgaW5kZXggaW4gdGhlIGBjdXJyZW50YCBhcnJheSBmb3IKICAgKiB3aGljaCBzcGxpY2VzIGFyZSBjYWxjdWxhdGVkLgogICAqIEBwYXJhbSB7bnVtYmVyfSBjdXJyZW50RW5kIEVuZGluZyBpbmRleCBpbiB0aGUgYGN1cnJlbnRgIGFycmF5IGZvcgogICAqIHdoaWNoIHNwbGljZXMgYXJlIGNhbGN1bGF0ZWQuCiAgICogQHBhcmFtIHshQXJyYXl9IG9sZCBUaGUgb3JpZ2luYWwgInVuY2hhbmdlZCIgYXJyYXkgdG8gY29tcGFyZSBgY3VycmVudGAKICAgKiBhZ2FpbnN0IHRvIGRldGVybWluZSBzcGxpY2VzLgogICAqIEBwYXJhbSB7bnVtYmVyfSBvbGRTdGFydCBTdGFydGluZyBpbmRleCBpbiB0aGUgYG9sZGAgYXJyYXkgZm9yCiAgICogd2hpY2ggc3BsaWNlcyBhcmUgY2FsY3VsYXRlZC4KICAgKiBAcGFyYW0ge251bWJlcn0gb2xkRW5kIEVuZGluZyBpbmRleCBpbiB0aGUgYG9sZGAgYXJyYXkgZm9yCiAgICogd2hpY2ggc3BsaWNlcyBhcmUgY2FsY3VsYXRlZC4KICAgKiBAcmV0dXJuIHshQXJyYXl9IFJldHVybnMgYW4gYXJyYXkgb2Ygc3BsaWNlIHJlY29yZCBvYmplY3RzLiBFYWNoIG9mIHRoZXNlCiAgICogY29udGFpbnM6IGBpbmRleGAgdGhlIGxvY2F0aW9uIHdoZXJlIHRoZSBzcGxpY2Ugb2NjdXJyZWQ7IGByZW1vdmVkYAogICAqIHRoZSBhcnJheSBvZiByZW1vdmVkIGl0ZW1zIGZyb20gdGhpcyBsb2NhdGlvbjsgYGFkZGVkQ291bnRgIHRoZSBudW1iZXIKICAgKiBvZiBpdGVtcyBhZGRlZCBhdCB0aGlzIGxvY2F0aW9uLgogICAqLwogIGZ1bmN0aW9uIGNhbGNTcGxpY2VzKGN1cnJlbnQsIGN1cnJlbnRTdGFydCwgY3VycmVudEVuZCwKICAgICAgICAgICAgICAgICAgICAgICAgb2xkLCBvbGRTdGFydCwgb2xkRW5kKSB7CiAgICBsZXQgcHJlZml4Q291bnQgPSAwOwogICAgbGV0IHN1ZmZpeENvdW50ID0gMDsKICAgIGxldCBzcGxpY2U7CgogICAgbGV0IG1pbkxlbmd0aCA9IE1hdGgubWluKGN1cnJlbnRFbmQgLSBjdXJyZW50U3RhcnQsIG9sZEVuZCAtIG9sZFN0YXJ0KTsKICAgIGlmIChjdXJyZW50U3RhcnQgPT0gMCAmJiBvbGRTdGFydCA9PSAwKQogICAgICBwcmVmaXhDb3VudCA9IHNoYXJlZFByZWZpeChjdXJyZW50LCBvbGQsIG1pbkxlbmd0aCk7CgogICAgaWYgKGN1cnJlbnRFbmQgPT0gY3VycmVudC5sZW5ndGggJiYgb2xkRW5kID09IG9sZC5sZW5ndGgpCiAgICAgIHN1ZmZpeENvdW50ID0gc2hhcmVkU3VmZml4KGN1cnJlbnQsIG9sZCwgbWluTGVuZ3RoIC0gcHJlZml4Q291bnQpOwoKICAgIGN1cnJlbnRTdGFydCArPSBwcmVmaXhDb3VudDsKICAgIG9sZFN0YXJ0ICs9IHByZWZpeENvdW50OwogICAgY3VycmVudEVuZCAtPSBzdWZmaXhDb3VudDsKICAgIG9sZEVuZCAtPSBzdWZmaXhDb3VudDsKCiAgICBpZiAoY3VycmVudEVuZCAtIGN1cnJlbnRTdGFydCA9PSAwICYmIG9sZEVuZCAtIG9sZFN0YXJ0ID09IDApCiAgICAgIHJldHVybiBbXTsKCiAgICBpZiAoY3VycmVudFN0YXJ0ID09IGN1cnJlbnRFbmQpIHsKICAgICAgc3BsaWNlID0gbmV3U3BsaWNlKGN1cnJlbnRTdGFydCwgW10sIDApOwogICAgICB3aGlsZSAob2xkU3RhcnQgPCBvbGRFbmQpCiAgICAgICAgc3BsaWNlLnJlbW92ZWQucHVzaChvbGRbb2xkU3RhcnQrK10pOwoKICAgICAgcmV0dXJuIFsgc3BsaWNlIF07CiAgICB9IGVsc2UgaWYgKG9sZFN0YXJ0ID09IG9sZEVuZCkKICAgICAgcmV0dXJuIFsgbmV3U3BsaWNlKGN1cnJlbnRTdGFydCwgW10sIGN1cnJlbnRFbmQgLSBjdXJyZW50U3RhcnQpIF07CgogICAgbGV0IG9wcyA9IHNwbGljZU9wZXJhdGlvbnNGcm9tRWRpdERpc3RhbmNlcygKICAgICAgICBjYWxjRWRpdERpc3RhbmNlcyhjdXJyZW50LCBjdXJyZW50U3RhcnQsIGN1cnJlbnRFbmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbGQsIG9sZFN0YXJ0LCBvbGRFbmQpKTsKCiAgICBzcGxpY2UgPSB1bmRlZmluZWQ7CiAgICBsZXQgc3BsaWNlcyA9IFtdOwogICAgbGV0IGluZGV4ID0gY3VycmVudFN0YXJ0OwogICAgbGV0IG9sZEluZGV4ID0gb2xkU3RhcnQ7CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9wcy5sZW5ndGg7IGkrKykgewogICAgICBzd2l0Y2gob3BzW2ldKSB7CiAgICAgICAgY2FzZSBFRElUX0xFQVZFOgogICAgICAgICAgaWYgKHNwbGljZSkgewogICAgICAgICAgICBzcGxpY2VzLnB1c2goc3BsaWNlKTsKICAgICAgICAgICAgc3BsaWNlID0gdW5kZWZpbmVkOwogICAgICAgICAgfQoKICAgICAgICAgIGluZGV4Kys7CiAgICAgICAgICBvbGRJbmRleCsrOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBFRElUX1VQREFURToKICAgICAgICAgIGlmICghc3BsaWNlKQogICAgICAgICAgICBzcGxpY2UgPSBuZXdTcGxpY2UoaW5kZXgsIFtdLCAwKTsKCiAgICAgICAgICBzcGxpY2UuYWRkZWRDb3VudCsrOwogICAgICAgICAgaW5kZXgrKzsKCiAgICAgICAgICBzcGxpY2UucmVtb3ZlZC5wdXNoKG9sZFtvbGRJbmRleF0pOwogICAgICAgICAgb2xkSW5kZXgrKzsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgRURJVF9BREQ6CiAgICAgICAgICBpZiAoIXNwbGljZSkKICAgICAgICAgICAgc3BsaWNlID0gbmV3U3BsaWNlKGluZGV4LCBbXSwgMCk7CgogICAgICAgICAgc3BsaWNlLmFkZGVkQ291bnQrKzsKICAgICAgICAgIGluZGV4Kys7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIEVESVRfREVMRVRFOgogICAgICAgICAgaWYgKCFzcGxpY2UpCiAgICAgICAgICAgIHNwbGljZSA9IG5ld1NwbGljZShpbmRleCwgW10sIDApOwoKICAgICAgICAgIHNwbGljZS5yZW1vdmVkLnB1c2gob2xkW29sZEluZGV4XSk7CiAgICAgICAgICBvbGRJbmRleCsrOwogICAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0KCiAgICBpZiAoc3BsaWNlKSB7CiAgICAgIHNwbGljZXMucHVzaChzcGxpY2UpOwogICAgfQogICAgcmV0dXJuIHNwbGljZXM7CiAgfQoKICBmdW5jdGlvbiBzaGFyZWRQcmVmaXgoY3VycmVudCwgb2xkLCBzZWFyY2hMZW5ndGgpIHsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2VhcmNoTGVuZ3RoOyBpKyspCiAgICAgIGlmICghZXF1YWxzKGN1cnJlbnRbaV0sIG9sZFtpXSkpCiAgICAgICAgcmV0dXJuIGk7CiAgICByZXR1cm4gc2VhcmNoTGVuZ3RoOwogIH0KCiAgZnVuY3Rpb24gc2hhcmVkU3VmZml4KGN1cnJlbnQsIG9sZCwgc2VhcmNoTGVuZ3RoKSB7CiAgICBsZXQgaW5kZXgxID0gY3VycmVudC5sZW5ndGg7CiAgICBsZXQgaW5kZXgyID0gb2xkLmxlbmd0aDsKICAgIGxldCBjb3VudCA9IDA7CiAgICB3aGlsZSAoY291bnQgPCBzZWFyY2hMZW5ndGggJiYgZXF1YWxzKGN1cnJlbnRbLS1pbmRleDFdLCBvbGRbLS1pbmRleDJdKSkKICAgICAgY291bnQrKzsKCiAgICByZXR1cm4gY291bnQ7CiAgfQoKICBmdW5jdGlvbiBjYWxjdWxhdGVTcGxpY2VzKGN1cnJlbnQsIHByZXZpb3VzKSB7CiAgICByZXR1cm4gY2FsY1NwbGljZXMoY3VycmVudCwgMCwgY3VycmVudC5sZW5ndGgsIHByZXZpb3VzLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXMubGVuZ3RoKTsKICB9CgogIGZ1bmN0aW9uIGVxdWFscyhjdXJyZW50VmFsdWUsIHByZXZpb3VzVmFsdWUpIHsKICAgIHJldHVybiBjdXJyZW50VmFsdWUgPT09IHByZXZpb3VzVmFsdWU7CiAgfQoKICAvKioKICAgKiBAbmFtZXNwYWNlCiAgICogQG1lbWJlcm9mIFBvbHltZXIKICAgKiBAc3VtbWFyeSBNb2R1bGUgdGhhdCBwcm92aWRlcyB1dGlsaXRpZXMgZm9yIGRpZmZpbmcgYXJyYXlzLgogICAqLwogIFBvbHltZXIuQXJyYXlTcGxpY2UgPSB7CiAgICAvKioKICAgICAqIFJldHVybnMgYW4gYXJyYXkgb2Ygc3BsaWNlIHJlY29yZHMgaW5kaWNhdGluZyB0aGUgbWluaW11bSBlZGl0cyByZXF1aXJlZAogICAgICogdG8gdHJhbnNmb3JtIHRoZSBgcHJldmlvdXNgIGFycmF5IGludG8gdGhlIGBjdXJyZW50YCBhcnJheS4KICAgICAqCiAgICAgKiBTcGxpY2UgcmVjb3JkcyBhcmUgb3JkZXJlZCBieSBpbmRleCBhbmQgY29udGFpbiB0aGUgZm9sbG93aW5nIGZpZWxkczoKICAgICAqIC0gYGluZGV4YDogaW5kZXggd2hlcmUgZWRpdCBzdGFydGVkCiAgICAgKiAtIGByZW1vdmVkYDogYXJyYXkgb2YgcmVtb3ZlZCBpdGVtcyBmcm9tIHRoaXMgaW5kZXgKICAgICAqIC0gYGFkZGVkQ291bnRgOiBudW1iZXIgb2YgaXRlbXMgYWRkZWQgYXQgdGhpcyBpbmRleAogICAgICoKICAgICAqIFRoaXMgZnVuY3Rpb24gaXMgYmFzZWQgb24gdGhlIExldmVuc2h0ZWluICJtaW5pbXVtIGVkaXQgZGlzdGFuY2UiCiAgICAgKiBhbGdvcml0aG0uIE5vdGUgdGhhdCB1cGRhdGVzIGFyZSB0cmVhdGVkIGFzIHJlbW92YWwgZm9sbG93ZWQgYnkgYWRkaXRpb24uCiAgICAgKgogICAgICogVGhlIHdvcnN0LWNhc2UgdGltZSBjb21wbGV4aXR5IG9mIHRoaXMgYWxnb3JpdGhtIGlzIGBPKGwgKiBwKWAKICAgICAqICAgbDogVGhlIGxlbmd0aCBvZiB0aGUgY3VycmVudCBhcnJheQogICAgICogICBwOiBUaGUgbGVuZ3RoIG9mIHRoZSBwcmV2aW91cyBhcnJheQogICAgICoKICAgICAqIEhvd2V2ZXIsIHRoZSB3b3JzdC1jYXNlIGNvbXBsZXhpdHkgaXMgcmVkdWNlZCBieSBhbiBgTyhuKWAgb3B0aW1pemF0aW9uCiAgICAgKiB0byBkZXRlY3QgYW55IHNoYXJlZCBwcmVmaXggJiBzdWZmaXggYmV0d2VlbiB0aGUgdHdvIGFycmF5cyBhbmQgb25seQogICAgICogcGVyZm9ybSB0aGUgbW9yZSBleHBlbnNpdmUgbWluaW11bSBlZGl0IGRpc3RhbmNlIGNhbGN1bGF0aW9uIG92ZXIgdGhlCiAgICAgKiBub24tc2hhcmVkIHBvcnRpb25zIG9mIHRoZSBhcnJheXMuCiAgICAgKgogICAgICogQGZ1bmN0aW9uCiAgICAgKiBAbWVtYmVyb2YgUG9seW1lci5BcnJheVNwbGljZQogICAgICogQHBhcmFtIHshQXJyYXl9IGN1cnJlbnQgVGhlICJjaGFuZ2VkIiBhcnJheSBmb3Igd2hpY2ggc3BsaWNlcyB3aWxsIGJlCiAgICAgKiBjYWxjdWxhdGVkLgogICAgICogQHBhcmFtIHshQXJyYXl9IHByZXZpb3VzIFRoZSAidW5jaGFuZ2VkIiBvcmlnaW5hbCBhcnJheSB0byBjb21wYXJlCiAgICAgKiBgY3VycmVudGAgYWdhaW5zdCB0byBkZXRlcm1pbmUgdGhlIHNwbGljZXMuCiAgICAgKiBAcmV0dXJuIHshQXJyYXl9IFJldHVybnMgYW4gYXJyYXkgb2Ygc3BsaWNlIHJlY29yZCBvYmplY3RzLiBFYWNoIG9mIHRoZXNlCiAgICAgKiBjb250YWluczogYGluZGV4YCB0aGUgbG9jYXRpb24gd2hlcmUgdGhlIHNwbGljZSBvY2N1cnJlZDsgYHJlbW92ZWRgCiAgICAgKiB0aGUgYXJyYXkgb2YgcmVtb3ZlZCBpdGVtcyBmcm9tIHRoaXMgbG9jYXRpb247IGBhZGRlZENvdW50YCB0aGUgbnVtYmVyCiAgICAgKiBvZiBpdGVtcyBhZGRlZCBhdCB0aGlzIGxvY2F0aW9uLgogICAgICovCiAgICBjYWxjdWxhdGVTcGxpY2VzCiAgfTsKCn0pKCk7Cjwvc2NyaXB0PjxzY3JpcHQ+CihmdW5jdGlvbigpIHsKICAndXNlIHN0cmljdCc7CgogIC8qKgogICAqIFJldHVybnMgdHJ1ZSBpZiBgbm9kZWAgaXMgYSBzbG90IGVsZW1lbnQKICAgKiBAcGFyYW0ge05vZGV9IG5vZGUgTm9kZSB0byB0ZXN0LgogICAqIEByZXR1cm4ge2Jvb2xlYW59IFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gYG5vZGVgIGlzIGEgc2xvdAogICAqIEBwcml2YXRlCiAgICovCiAgZnVuY3Rpb24gaXNTbG90KG5vZGUpIHsKICAgIHJldHVybiAobm9kZS5sb2NhbE5hbWUgPT09ICdzbG90Jyk7CiAgfQoKICAvKioKICAgKiBDbGFzcyB0aGF0IGxpc3RlbnMgZm9yIGNoYW5nZXMgKGFkZGl0aW9ucyBvciByZW1vdmFscykgdG8KICAgKiAiZmxhdHRlbmVkIG5vZGVzIiBvbiBhIGdpdmVuIGBub2RlYC4gVGhlIGxpc3Qgb2YgZmxhdHRlbmVkIG5vZGVzIGNvbnNpc3RzCiAgICogb2YgYSBub2RlJ3MgY2hpbGRyZW4gYW5kLCBmb3IgYW55IGNoaWxkcmVuIHRoYXQgYXJlIGA8c2xvdD5gIGVsZW1lbnRzLAogICAqIHRoZSBleHBhbmRlZCBmbGF0dGVuZWQgbGlzdCBvZiBgYXNzaWduZWROb2Rlc2AuCiAgICogRm9yIGV4YW1wbGUsIGlmIHRoZSBvYnNlcnZlZCBub2RlIGhhcyBjaGlsZHJlbiBgPGE+PC9hPjxzbG90Pjwvc2xvdD48Yj48L2I+YAogICAqIGFuZCB0aGUgYDxzbG90PmAgaGFzIG9uZSBgPGRpdj5gIGFzc2lnbmVkIHRvIGl0LCB0aGVuIHRoZSBmbGF0dGVuZWQKICAgKiBub2RlcyBsaXN0IGlzIGA8YT48L2E+PGRpdj48L2Rpdj48Yj48L2I+YC4gSWYgdGhlIGA8c2xvdD5gIGhhcyBvdGhlcgogICAqIGA8c2xvdD5gIGVsZW1lbnRzIGFzc2lnbmVkIHRvIGl0LCB0aGVzZSBhcmUgZmxhdHRlbmVkIGFzIHdlbGwuCiAgICoKICAgKiBUaGUgcHJvdmlkZWQgYGNhbGxiYWNrYCBpcyBjYWxsZWQgd2hlbmV2ZXIgYW55IGNoYW5nZSB0byB0aGlzIGxpc3QKICAgKiBvZiBmbGF0dGVuZWQgbm9kZXMgb2NjdXJzLCB3aGVyZSBhbiBhZGRpdGlvbiBvciByZW1vdmFsIG9mIGEgbm9kZSBpcwogICAqIGNvbnNpZGVyZWQgYSBjaGFuZ2UuIFRoZSBgY2FsbGJhY2tgIGlzIGNhbGxlZCB3aXRoIG9uZSBhcmd1bWVudCwgYW4gb2JqZWN0CiAgICogY29udGFpbmluZyBhbiBhcnJheSBvZiBhbnkgYGFkZGVkTm9kZXNgIGFuZCBgcmVtb3ZlZE5vZGVzYC4KICAgKgogICAqIE5vdGU6IHRoZSBjYWxsYmFjayBpcyBjYWxsZWQgYXN5bmNocm9ub3VzIHRvIGFueSBjaGFuZ2VzCiAgICogYXQgYSBtaWNyb3Rhc2sgY2hlY2twb2ludC4gVGhpcyBpcyBiZWNhdXNlIG9ic2VydmF0aW9uIGlzIHBlcmZvcm1lZCB1c2luZwogICAqIGBNdXRhdGlvbk9ic2VydmVyYCBhbmQgdGhlIGA8c2xvdD5gIGVsZW1lbnQncyBgc2xvdGNoYW5nZWAgZXZlbnQgd2hpY2gKICAgKiBhcmUgYXN5bmNocm9ub3VzLgogICAqCiAgICogQW4gZXhhbXBsZToKICAgKiBgYGBqcwogICAqIGNsYXNzIFRlc3RTZWxmT2JzZXJ2ZSBleHRlbmRzIFBvbHltZXIuRWxlbWVudCB7CiAgICogICBzdGF0aWMgZ2V0IGlzKCkgeyByZXR1cm4gJ3Rlc3Qtc2VsZi1vYnNlcnZlJzt9CiAgICogICBjb25uZWN0ZWRDYWxsYmFjaygpIHsKICAgKiAgICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTsKICAgKiAgICAgdGhpcy5fb2JzZXJ2ZXIgPSBuZXcgUG9seW1lci5GbGF0dGVuZWROb2Rlc09ic2VydmVyKHRoaXMsIChpbmZvKSA9PiB7CiAgICogICAgICAgdGhpcy5pbmZvID0gaW5mbzsKICAgKiAgICAgfSk7CiAgICogICB9CiAgICogICBkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHsKICAgKiAgICAgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTsKICAgKiAgICAgdGhpcy5fb2JzZXJ2ZXIuZGlzY29ubmVjdCgpOwogICAqICAgfQogICAqIH0KICAgKiBjdXN0b21FbGVtZW50cy5kZWZpbmUoVGVzdFNlbGZPYnNlcnZlLmlzLCBUZXN0U2VsZk9ic2VydmUpOwogICAqIGBgYAogICAqCiAgICogQG1lbWJlcm9mIFBvbHltZXIKICAgKiBAc3VtbWFyeSBDbGFzcyB0aGF0IGxpc3RlbnMgZm9yIGNoYW5nZXMgKGFkZGl0aW9ucyBvciByZW1vdmFscykgdG8KICAgKiAiZmxhdHRlbmVkIG5vZGVzIiBvbiBhIGdpdmVuIGBub2RlYC4KICAgKi8KICBjbGFzcyBGbGF0dGVuZWROb2Rlc09ic2VydmVyIHsKCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIGxpc3Qgb2YgZmxhdHRlbmVkIG5vZGVzIGZvciB0aGUgZ2l2ZW4gYG5vZGVgLgogICAgICogVGhpcyBsaXN0IGNvbnNpc3RzIG9mIGEgbm9kZSdzIGNoaWxkcmVuIGFuZCwgZm9yIGFueSBjaGlsZHJlbgogICAgICogdGhhdCBhcmUgYDxzbG90PmAgZWxlbWVudHMsIHRoZSBleHBhbmRlZCBmbGF0dGVuZWQgbGlzdCBvZiBgYXNzaWduZWROb2Rlc2AuCiAgICAgKiBGb3IgZXhhbXBsZSwgaWYgdGhlIG9ic2VydmVkIG5vZGUgaGFzIGNoaWxkcmVuIGA8YT48L2E+PHNsb3Q+PC9zbG90PjxiPjwvYj5gCiAgICAgKiBhbmQgdGhlIGA8c2xvdD5gIGhhcyBvbmUgYDxkaXY+YCBhc3NpZ25lZCB0byBpdCwgdGhlbiB0aGUgZmxhdHRlbmVkCiAgICAgKiBub2RlcyBsaXN0IGlzIGA8YT48L2E+PGRpdj48L2Rpdj48Yj48L2I+YC4gSWYgdGhlIGA8c2xvdD5gIGhhcyBvdGhlcgogICAgICogYDxzbG90PmAgZWxlbWVudHMgYXNzaWduZWQgdG8gaXQsIHRoZXNlIGFyZSBmbGF0dGVuZWQgYXMgd2VsbC4KICAgICAqCiAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fEhUTUxTbG90RWxlbWVudH0gbm9kZSBUaGUgbm9kZSBmb3Igd2hpY2ggdG8gcmV0dXJuIHRoZSBsaXN0IG9mIGZsYXR0ZW5lZCBub2Rlcy4KICAgICAqIEByZXR1cm4ge0FycmF5fSBUaGUgbGlzdCBvZiBmbGF0dGVuZWQgbm9kZXMgZm9yIHRoZSBnaXZlbiBgbm9kZWAuCiAgICAqLwogICAgc3RhdGljIGdldEZsYXR0ZW5lZE5vZGVzKG5vZGUpIHsKICAgICAgaWYgKGlzU2xvdChub2RlKSkgewogICAgICAgIG5vZGUgPSAvKiogQHR5cGUge0hUTUxTbG90RWxlbWVudH0gKi8obm9kZSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tc2VsZi1hc3NpZ24KICAgICAgICByZXR1cm4gbm9kZS5hc3NpZ25lZE5vZGVzKHtmbGF0dGVuOiB0cnVlfSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIEFycmF5LmZyb20obm9kZS5jaGlsZE5vZGVzKS5tYXAoKG5vZGUpID0+IHsKICAgICAgICAgIGlmIChpc1Nsb3Qobm9kZSkpIHsKICAgICAgICAgICAgbm9kZSA9IC8qKiBAdHlwZSB7SFRNTFNsb3RFbGVtZW50fSAqLyhub2RlKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1zZWxmLWFzc2lnbgogICAgICAgICAgICByZXR1cm4gbm9kZS5hc3NpZ25lZE5vZGVzKHtmbGF0dGVuOiB0cnVlfSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gW25vZGVdOwogICAgICAgICAgfQogICAgICAgIH0pLnJlZHVjZSgoYSwgYikgPT4gYS5jb25jYXQoYiksIFtdKTsKICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIHtFbGVtZW50fSB0YXJnZXQgTm9kZSBvbiB3aGljaCB0byBsaXN0ZW4gZm9yIGNoYW5nZXMuCiAgICAgKiBAcGFyYW0gez9mdW5jdGlvbighRWxlbWVudCwgeyB0YXJnZXQ6ICFFbGVtZW50LCBhZGRlZE5vZGVzOiAhQXJyYXk8IUVsZW1lbnQ+LCByZW1vdmVkTm9kZXM6ICFBcnJheTwhRWxlbWVudD4gfSk6dm9pZH0gY2FsbGJhY2sgRnVuY3Rpb24gY2FsbGVkIHdoZW4gdGhlcmUgYXJlIGFkZGl0aW9ucwogICAgICogb3IgcmVtb3ZhbHMgZnJvbSB0aGUgdGFyZ2V0J3MgbGlzdCBvZiBmbGF0dGVuZWQgbm9kZXMuCiAgICAqLwogICAgY29uc3RydWN0b3IodGFyZ2V0LCBjYWxsYmFjaykgewogICAgICAvKioKICAgICAgICogQHR5cGUge011dGF0aW9uT2JzZXJ2ZXJ9CiAgICAgICAqIEBwcml2YXRlCiAgICAgICAqLwogICAgICB0aGlzLl9zaGFkeUNoaWxkcmVuT2JzZXJ2ZXIgPSBudWxsOwogICAgICAvKioKICAgICAgICogQHR5cGUge011dGF0aW9uT2JzZXJ2ZXJ9CiAgICAgICAqIEBwcml2YXRlCiAgICAgICAqLwogICAgICB0aGlzLl9uYXRpdmVDaGlsZHJlbk9ic2VydmVyID0gbnVsbDsKICAgICAgdGhpcy5fY29ubmVjdGVkID0gZmFsc2U7CiAgICAgIC8qKgogICAgICAgKiBAdHlwZSB7RWxlbWVudH0KICAgICAgICogQHByaXZhdGUKICAgICAgICovCiAgICAgIHRoaXMuX3RhcmdldCA9IHRhcmdldDsKICAgICAgdGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrOwogICAgICB0aGlzLl9lZmZlY3RpdmVOb2RlcyA9IFtdOwogICAgICB0aGlzLl9vYnNlcnZlciA9IG51bGw7CiAgICAgIHRoaXMuX3NjaGVkdWxlZCA9IGZhbHNlOwogICAgICAvKioKICAgICAgICogQHR5cGUge2Z1bmN0aW9uKCl9CiAgICAgICAqIEBwcml2YXRlCiAgICAgICAqLwogICAgICB0aGlzLl9ib3VuZFNjaGVkdWxlID0gKCkgPT4gewogICAgICAgIHRoaXMuX3NjaGVkdWxlKCk7CiAgICAgIH07CiAgICAgIHRoaXMuY29ubmVjdCgpOwogICAgICB0aGlzLl9zY2hlZHVsZSgpOwogICAgfQoKICAgIC8qKgogICAgICogQWN0aXZhdGVzIGFuIG9ic2VydmVyLiBUaGlzIG1ldGhvZCBpcyBhdXRvbWF0aWNhbGx5IGNhbGxlZCB3aGVuCiAgICAgKiBhIGBGbGF0dGVuZWROb2Rlc09ic2VydmVyYCBpcyBjcmVhdGVkLiBJdCBzaG91bGQgb25seSBiZSBjYWxsZWQgdG8KICAgICAqIHJlLWFjdGl2YXRlIGFuIG9ic2VydmVyIHRoYXQgaGFzIGJlZW4gZGVhY3RpdmF0ZWQgdmlhIHRoZSBgZGlzY29ubmVjdGAgbWV0aG9kLgogICAgICoKICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgKi8KICAgIGNvbm5lY3QoKSB7CiAgICAgIGlmIChpc1Nsb3QodGhpcy5fdGFyZ2V0KSkgewogICAgICAgIHRoaXMuX2xpc3RlblNsb3RzKFt0aGlzLl90YXJnZXRdKTsKICAgICAgfSBlbHNlIGlmICh0aGlzLl90YXJnZXQuY2hpbGRyZW4pIHsKICAgICAgICB0aGlzLl9saXN0ZW5TbG90cyh0aGlzLl90YXJnZXQuY2hpbGRyZW4pOwogICAgICAgIGlmICh3aW5kb3cuU2hhZHlET00pIHsKICAgICAgICAgIHRoaXMuX3NoYWR5Q2hpbGRyZW5PYnNlcnZlciA9CiAgICAgICAgICAgIFNoYWR5RE9NLm9ic2VydmVDaGlsZHJlbih0aGlzLl90YXJnZXQsIChtdXRhdGlvbnMpID0+IHsKICAgICAgICAgICAgICB0aGlzLl9wcm9jZXNzTXV0YXRpb25zKG11dGF0aW9ucyk7CiAgICAgICAgICAgIH0pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aGlzLl9uYXRpdmVDaGlsZHJlbk9ic2VydmVyID0KICAgICAgICAgICAgbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKG11dGF0aW9ucykgPT4gewogICAgICAgICAgICAgIHRoaXMuX3Byb2Nlc3NNdXRhdGlvbnMobXV0YXRpb25zKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICB0aGlzLl9uYXRpdmVDaGlsZHJlbk9ic2VydmVyLm9ic2VydmUodGhpcy5fdGFyZ2V0LCB7Y2hpbGRMaXN0OiB0cnVlfSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHRoaXMuX2Nvbm5lY3RlZCA9IHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBEZWFjdGl2YXRlcyB0aGUgZmxhdHRlbmVkIG5vZGVzIG9ic2VydmVyLiBBZnRlciBjYWxsaW5nIHRoaXMgbWV0aG9kCiAgICAgKiB0aGUgb2JzZXJ2ZXIgY2FsbGJhY2sgd2lsbCBub3QgYmUgY2FsbGVkIHdoZW4gY2hhbmdlcyB0byBmbGF0dGVuZWQgbm9kZXMKICAgICAqIG9jY3VyLiBUaGUgYGNvbm5lY3RgIG1ldGhvZCBtYXkgYmUgc3Vic2VxdWVudGx5IGNhbGxlZCB0byByZWFjdGl2YXRlCiAgICAgKiB0aGUgb2JzZXJ2ZXIuCiAgICAgKgogICAgICogQHJldHVybiB7dm9pZH0KICAgICAqLwogICAgZGlzY29ubmVjdCgpIHsKICAgICAgaWYgKGlzU2xvdCh0aGlzLl90YXJnZXQpKSB7CiAgICAgICAgdGhpcy5fdW5saXN0ZW5TbG90cyhbdGhpcy5fdGFyZ2V0XSk7CiAgICAgIH0gZWxzZSBpZiAodGhpcy5fdGFyZ2V0LmNoaWxkcmVuKSB7CiAgICAgICAgdGhpcy5fdW5saXN0ZW5TbG90cyh0aGlzLl90YXJnZXQuY2hpbGRyZW4pOwogICAgICAgIGlmICh3aW5kb3cuU2hhZHlET00gJiYgdGhpcy5fc2hhZHlDaGlsZHJlbk9ic2VydmVyKSB7CiAgICAgICAgICBTaGFkeURPTS51bm9ic2VydmVDaGlsZHJlbih0aGlzLl9zaGFkeUNoaWxkcmVuT2JzZXJ2ZXIpOwogICAgICAgICAgdGhpcy5fc2hhZHlDaGlsZHJlbk9ic2VydmVyID0gbnVsbDsKICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX25hdGl2ZUNoaWxkcmVuT2JzZXJ2ZXIpIHsKICAgICAgICAgIHRoaXMuX25hdGl2ZUNoaWxkcmVuT2JzZXJ2ZXIuZGlzY29ubmVjdCgpOwogICAgICAgICAgdGhpcy5fbmF0aXZlQ2hpbGRyZW5PYnNlcnZlciA9IG51bGw7CiAgICAgICAgfQogICAgICB9CiAgICAgIHRoaXMuX2Nvbm5lY3RlZCA9IGZhbHNlOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiB7dm9pZH0KICAgICAqIEBwcml2YXRlCiAgICAgKi8KICAgIF9zY2hlZHVsZSgpIHsKICAgICAgaWYgKCF0aGlzLl9zY2hlZHVsZWQpIHsKICAgICAgICB0aGlzLl9zY2hlZHVsZWQgPSB0cnVlOwogICAgICAgIFBvbHltZXIuQXN5bmMubWljcm9UYXNrLnJ1bigoKSA9PiB0aGlzLmZsdXNoKCkpOwogICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0ge0FycmF5PE11dGF0aW9uUmVjb3JkPn0gbXV0YXRpb25zIE11dGF0aW9ucyBzaWduYWxlZCBieSB0aGUgbXV0YXRpb24gb2JzZXJ2ZXIKICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgKiBAcHJpdmF0ZQogICAgICovCiAgICBfcHJvY2Vzc011dGF0aW9ucyhtdXRhdGlvbnMpIHsKICAgICAgdGhpcy5fcHJvY2Vzc1Nsb3RNdXRhdGlvbnMobXV0YXRpb25zKTsKICAgICAgdGhpcy5mbHVzaCgpOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIHtBcnJheTxNdXRhdGlvblJlY29yZD59IG11dGF0aW9ucyBNdXRhdGlvbnMgc2lnbmFsZWQgYnkgdGhlIG11dGF0aW9uIG9ic2VydmVyCiAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICogQHByaXZhdGUKICAgICAqLwogICAgX3Byb2Nlc3NTbG90TXV0YXRpb25zKG11dGF0aW9ucykgewogICAgICBpZiAobXV0YXRpb25zKSB7CiAgICAgICAgZm9yIChsZXQgaT0wOyBpIDwgbXV0YXRpb25zLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICBsZXQgbXV0YXRpb24gPSBtdXRhdGlvbnNbaV07CiAgICAgICAgICBpZiAobXV0YXRpb24uYWRkZWROb2RlcykgewogICAgICAgICAgICB0aGlzLl9saXN0ZW5TbG90cyhtdXRhdGlvbi5hZGRlZE5vZGVzKTsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChtdXRhdGlvbi5yZW1vdmVkTm9kZXMpIHsKICAgICAgICAgICAgdGhpcy5fdW5saXN0ZW5TbG90cyhtdXRhdGlvbi5yZW1vdmVkTm9kZXMpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogRmx1c2hlcyB0aGUgb2JzZXJ2ZXIgY2F1c2luZyBhbnkgcGVuZGluZyBjaGFuZ2VzIHRvIGJlIGltbWVkaWF0ZWx5CiAgICAgKiBkZWxpdmVyZWQgdGhlIG9ic2VydmVyIGNhbGxiYWNrLiBCeSBkZWZhdWx0IHRoZXNlIGNoYW5nZXMgYXJlIGRlbGl2ZXJlZAogICAgICogYXN5bmNocm9ub3VzbHkgYXQgdGhlIG5leHQgbWljcm90YXNrIGNoZWNrcG9pbnQuCiAgICAgKgogICAgICogQHJldHVybiB7Ym9vbGVhbn0gUmV0dXJucyB0cnVlIGlmIGFueSBwZW5kaW5nIGNoYW5nZXMgY2F1c2VkIHRoZSBvYnNlcnZlcgogICAgICogY2FsbGJhY2sgdG8gcnVuLgogICAgICovCiAgICBmbHVzaCgpIHsKICAgICAgaWYgKCF0aGlzLl9jb25uZWN0ZWQpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgaWYgKHdpbmRvdy5TaGFkeURPTSkgewogICAgICAgIFNoYWR5RE9NLmZsdXNoKCk7CiAgICAgIH0KICAgICAgaWYgKHRoaXMuX25hdGl2ZUNoaWxkcmVuT2JzZXJ2ZXIpIHsKICAgICAgICB0aGlzLl9wcm9jZXNzU2xvdE11dGF0aW9ucyh0aGlzLl9uYXRpdmVDaGlsZHJlbk9ic2VydmVyLnRha2VSZWNvcmRzKCkpOwogICAgICB9IGVsc2UgaWYgKHRoaXMuX3NoYWR5Q2hpbGRyZW5PYnNlcnZlcikgewogICAgICAgIHRoaXMuX3Byb2Nlc3NTbG90TXV0YXRpb25zKHRoaXMuX3NoYWR5Q2hpbGRyZW5PYnNlcnZlci50YWtlUmVjb3JkcygpKTsKICAgICAgfQogICAgICB0aGlzLl9zY2hlZHVsZWQgPSBmYWxzZTsKICAgICAgbGV0IGluZm8gPSB7CiAgICAgICAgdGFyZ2V0OiB0aGlzLl90YXJnZXQsCiAgICAgICAgYWRkZWROb2RlczogW10sCiAgICAgICAgcmVtb3ZlZE5vZGVzOiBbXQogICAgICB9OwogICAgICBsZXQgbmV3Tm9kZXMgPSB0aGlzLmNvbnN0cnVjdG9yLmdldEZsYXR0ZW5lZE5vZGVzKHRoaXMuX3RhcmdldCk7CiAgICAgIGxldCBzcGxpY2VzID0gUG9seW1lci5BcnJheVNwbGljZS5jYWxjdWxhdGVTcGxpY2VzKG5ld05vZGVzLAogICAgICAgIHRoaXMuX2VmZmVjdGl2ZU5vZGVzKTsKICAgICAgLy8gcHJvY2VzcyByZW1vdmFscwogICAgICBmb3IgKGxldCBpPTAsIHM7IChpPHNwbGljZXMubGVuZ3RoKSAmJiAocz1zcGxpY2VzW2ldKTsgaSsrKSB7CiAgICAgICAgZm9yIChsZXQgaj0wLCBuOyAoaiA8IHMucmVtb3ZlZC5sZW5ndGgpICYmIChuPXMucmVtb3ZlZFtqXSk7IGorKykgewogICAgICAgICAgaW5mby5yZW1vdmVkTm9kZXMucHVzaChuKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgLy8gcHJvY2VzcyBhZGRzCiAgICAgIGZvciAobGV0IGk9MCwgczsgKGk8c3BsaWNlcy5sZW5ndGgpICYmIChzPXNwbGljZXNbaV0pOyBpKyspIHsKICAgICAgICBmb3IgKGxldCBqPXMuaW5kZXg7IGogPCBzLmluZGV4ICsgcy5hZGRlZENvdW50OyBqKyspIHsKICAgICAgICAgIGluZm8uYWRkZWROb2Rlcy5wdXNoKG5ld05vZGVzW2pdKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgLy8gdXBkYXRlIGNhY2hlCiAgICAgIHRoaXMuX2VmZmVjdGl2ZU5vZGVzID0gbmV3Tm9kZXM7CiAgICAgIGxldCBkaWRGbHVzaCA9IGZhbHNlOwogICAgICBpZiAoaW5mby5hZGRlZE5vZGVzLmxlbmd0aCB8fCBpbmZvLnJlbW92ZWROb2Rlcy5sZW5ndGgpIHsKICAgICAgICBkaWRGbHVzaCA9IHRydWU7CiAgICAgICAgdGhpcy5jYWxsYmFjay5jYWxsKHRoaXMuX3RhcmdldCwgaW5mbyk7CiAgICAgIH0KICAgICAgcmV0dXJuIGRpZEZsdXNoOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIHshQXJyYXk8RWxlbWVudHxOb2RlPnwhTm9kZUxpc3Q8Tm9kZT59IG5vZGVMaXN0IE5vZGVzIHRoYXQgY291bGQgY2hhbmdlCiAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICogQHByaXZhdGUKICAgICAqLwogICAgX2xpc3RlblNsb3RzKG5vZGVMaXN0KSB7CiAgICAgIGZvciAobGV0IGk9MDsgaSA8IG5vZGVMaXN0Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgbGV0IG4gPSBub2RlTGlzdFtpXTsKICAgICAgICBpZiAoaXNTbG90KG4pKSB7CiAgICAgICAgICBuLmFkZEV2ZW50TGlzdGVuZXIoJ3Nsb3RjaGFuZ2UnLCB0aGlzLl9ib3VuZFNjaGVkdWxlKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSB7IUFycmF5PEVsZW1lbnR8Tm9kZT58IU5vZGVMaXN0PE5vZGU+fSBub2RlTGlzdCBOb2RlcyB0aGF0IGNvdWxkIGNoYW5nZQogICAgICogQHJldHVybiB7dm9pZH0KICAgICAqIEBwcml2YXRlCiAgICAgKi8KICAgIF91bmxpc3RlblNsb3RzKG5vZGVMaXN0KSB7CiAgICAgIGZvciAobGV0IGk9MDsgaSA8IG5vZGVMaXN0Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgbGV0IG4gPSBub2RlTGlzdFtpXTsKICAgICAgICBpZiAoaXNTbG90KG4pKSB7CiAgICAgICAgICBuLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Nsb3RjaGFuZ2UnLCB0aGlzLl9ib3VuZFNjaGVkdWxlKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgfQoKICBQb2x5bWVyLkZsYXR0ZW5lZE5vZGVzT2JzZXJ2ZXIgPSBGbGF0dGVuZWROb2Rlc09ic2VydmVyOwoKfSkoKTsKPC9zY3JpcHQ+PHNjcmlwdD4KKGZ1bmN0aW9uKCkgewogICd1c2Ugc3RyaWN0JzsKCiAgbGV0IGRlYm91bmNlclF1ZXVlID0gW107CgogIC8qKgogICAqIEFkZHMgYSBgUG9seW1lci5EZWJvdW5jZXJgIHRvIGEgbGlzdCBvZiBnbG9iYWxseSBmbHVzaGFibGUgdGFza3MuCiAgICoKICAgKiBAbWVtYmVyb2YgUG9seW1lcgogICAqIEBwYXJhbSB7IVBvbHltZXIuRGVib3VuY2VyfSBkZWJvdW5jZXIgRGVib3VuY2VyIHRvIGVucXVldWUKICAgKiBAcmV0dXJuIHt2b2lkfQogICAqLwogIFBvbHltZXIuZW5xdWV1ZURlYm91bmNlciA9IGZ1bmN0aW9uKGRlYm91bmNlcikgewogICAgZGVib3VuY2VyUXVldWUucHVzaChkZWJvdW5jZXIpOwogIH07CgogIGZ1bmN0aW9uIGZsdXNoRGVib3VuY2VycygpIHsKICAgIGNvbnN0IGRpZEZsdXNoID0gQm9vbGVhbihkZWJvdW5jZXJRdWV1ZS5sZW5ndGgpOwogICAgd2hpbGUgKGRlYm91bmNlclF1ZXVlLmxlbmd0aCkgewogICAgICB0cnkgewogICAgICAgIGRlYm91bmNlclF1ZXVlLnNoaWZ0KCkuZmx1c2goKTsKICAgICAgfSBjYXRjaChlKSB7CiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICB0aHJvdyBlOwogICAgICAgIH0pOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gZGlkRmx1c2g7CiAgfQoKICAvKioKICAgKiBGb3JjZXMgc2V2ZXJhbCBjbGFzc2VzIG9mIGFzeW5jaHJvbm91c2x5IHF1ZXVlZCB0YXNrcyB0byBmbHVzaDoKICAgKiAtIERlYm91bmNlcnMgYWRkZWQgdmlhIGBlbnF1ZXVlRGVib3VuY2VyYAogICAqIC0gU2hhZHlET00gZGlzdHJpYnV0aW9uCiAgICoKICAgKiBAbWVtYmVyb2YgUG9seW1lcgogICAqIEByZXR1cm4ge3ZvaWR9CiAgICovCiAgUG9seW1lci5mbHVzaCA9IGZ1bmN0aW9uKCkgewogICAgbGV0IHNoYWR5RE9NLCBkZWJvdW5jZXJzOwogICAgZG8gewogICAgICBzaGFkeURPTSA9IHdpbmRvdy5TaGFkeURPTSAmJiBTaGFkeURPTS5mbHVzaCgpOwogICAgICBpZiAod2luZG93LlNoYWR5Q1NTICYmIHdpbmRvdy5TaGFkeUNTUy5TY29waW5nU2hpbSkgewogICAgICAgIHdpbmRvdy5TaGFkeUNTUy5TY29waW5nU2hpbS5mbHVzaCgpOwogICAgICB9CiAgICAgIGRlYm91bmNlcnMgPSBmbHVzaERlYm91bmNlcnMoKTsKICAgIH0gd2hpbGUgKHNoYWR5RE9NIHx8IGRlYm91bmNlcnMpOwogIH07Cgp9KSgpOwo8L3NjcmlwdD48c2NyaXB0PgooZnVuY3Rpb24oKSB7CiAgJ3VzZSBzdHJpY3QnOwoKICBjb25zdCBwID0gRWxlbWVudC5wcm90b3R5cGU7CiAgLyoqCiAgICogQGNvbnN0IHtmdW5jdGlvbih0aGlzOk5vZGUsIHN0cmluZyk6IGJvb2xlYW59CiAgICovCiAgY29uc3Qgbm9ybWFsaXplZE1hdGNoZXNTZWxlY3RvciA9IHAubWF0Y2hlcyB8fCBwLm1hdGNoZXNTZWxlY3RvciB8fAogICAgcC5tb3pNYXRjaGVzU2VsZWN0b3IgfHwgcC5tc01hdGNoZXNTZWxlY3RvciB8fAogICAgcC5vTWF0Y2hlc1NlbGVjdG9yIHx8IHAud2Via2l0TWF0Y2hlc1NlbGVjdG9yOwoKICAvKioKICAgKiBDcm9zcy1wbGF0Zm9ybSBgZWxlbWVudC5tYXRjaGVzYCBzaGltLgogICAqCiAgICogQGZ1bmN0aW9uIG1hdGNoZXNTZWxlY3RvcgogICAqIEBtZW1iZXJvZiBQb2x5bWVyLmRvbQogICAqIEBwYXJhbSB7IU5vZGV9IG5vZGUgTm9kZSB0byBjaGVjayBzZWxlY3RvciBhZ2FpbnN0CiAgICogQHBhcmFtIHtzdHJpbmd9IHNlbGVjdG9yIFNlbGVjdG9yIHRvIG1hdGNoCiAgICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiBub2RlIG1hdGNoZWQgc2VsZWN0b3IKICAgKi8KICBjb25zdCBtYXRjaGVzU2VsZWN0b3IgPSBmdW5jdGlvbihub2RlLCBzZWxlY3RvcikgewogICAgcmV0dXJuIG5vcm1hbGl6ZWRNYXRjaGVzU2VsZWN0b3IuY2FsbChub2RlLCBzZWxlY3Rvcik7CiAgfTsKCiAgLyoqCiAgICogTm9kZSBBUEkgd3JhcHBlciBjbGFzcyByZXR1cm5lZCBmcm9tIGBQb2x5bWVyLmRvbS4odGFyZ2V0KWAgd2hlbgogICAqIGB0YXJnZXRgIGlzIGEgYE5vZGVgLgogICAqCiAgICogQG1lbWJlcm9mIFBvbHltZXIKICAgKi8KICBjbGFzcyBEb21BcGkgewoKICAgIC8qKgogICAgICogQHBhcmFtIHtOb2RlfSBub2RlIE5vZGUgZm9yIHdoaWNoIHRvIGNyZWF0ZSBhIFBvbHltZXIuZG9tIGhlbHBlciBvYmplY3QuCiAgICAgKi8KICAgIGNvbnN0cnVjdG9yKG5vZGUpIHsKICAgICAgdGhpcy5ub2RlID0gbm9kZTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgYW4gaW5zdGFuY2Ugb2YgYFBvbHltZXIuRmxhdHRlbmVkTm9kZXNPYnNlcnZlcmAgdGhhdAogICAgICogbGlzdGVucyBmb3Igbm9kZSBjaGFuZ2VzIG9uIHRoaXMgZWxlbWVudC4KICAgICAqCiAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKCFFbGVtZW50LCB7IHRhcmdldDogIUVsZW1lbnQsIGFkZGVkTm9kZXM6ICFBcnJheTwhRWxlbWVudD4sIHJlbW92ZWROb2RlczogIUFycmF5PCFFbGVtZW50PiB9KTp2b2lkfSBjYWxsYmFjayBDYWxsZWQgd2hlbiBkaXJlY3Qgb3IgZGlzdHJpYnV0ZWQgY2hpbGRyZW4KICAgICAqICAgb2YgdGhpcyBlbGVtZW50IGNoYW5nZXMKICAgICAqIEByZXR1cm4geyFQb2x5bWVyLkZsYXR0ZW5lZE5vZGVzT2JzZXJ2ZXJ9IE9ic2VydmVyIGluc3RhbmNlCiAgICAgKi8KICAgIG9ic2VydmVOb2RlcyhjYWxsYmFjaykgewogICAgICByZXR1cm4gbmV3IFBvbHltZXIuRmxhdHRlbmVkTm9kZXNPYnNlcnZlcih0aGlzLm5vZGUsIGNhbGxiYWNrKTsKICAgIH0KCiAgICAvKioKICAgICAqIERpc2Nvbm5lY3RzIGFuIG9ic2VydmVyIHByZXZpb3VzbHkgY3JlYXRlZCB2aWEgYG9ic2VydmVOb2Rlc2AKICAgICAqCiAgICAgKiBAcGFyYW0geyFQb2x5bWVyLkZsYXR0ZW5lZE5vZGVzT2JzZXJ2ZXJ9IG9ic2VydmVySGFuZGxlIE9ic2VydmVyIGluc3RhbmNlCiAgICAgKiAgIHRvIGRpc2Nvbm5lY3QuCiAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICovCiAgICB1bm9ic2VydmVOb2RlcyhvYnNlcnZlckhhbmRsZSkgewogICAgICBvYnNlcnZlckhhbmRsZS5kaXNjb25uZWN0KCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBQcm92aWRlZCBhcyBhIGJhY2t3YXJkcy1jb21wYXRpYmxlIEFQSSBvbmx5LiAgVGhpcyBtZXRob2QgZG9lcyBub3RoaW5nLgogICAgICogQHJldHVybiB7dm9pZH0KICAgICAqLwogICAgbm90aWZ5T2JzZXJ2ZXIoKSB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBwcm92aWRlZCBub2RlIGlzIGNvbnRhaW5lZCB3aXRoIHRoaXMgZWxlbWVudCdzCiAgICAgKiBsaWdodC1ET00gY2hpbGRyZW4gb3Igc2hhZG93IHJvb3QsIGluY2x1ZGluZyBhbnkgbmVzdGVkIHNoYWRvdyByb290cwogICAgICogb2YgY2hpbGRyZW4gdGhlcmVpbi4KICAgICAqCiAgICAgKiBAcGFyYW0ge05vZGV9IG5vZGUgTm9kZSB0byB0ZXN0CiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIGBub2RlYCBpcyBjb250YWluZWQgd2l0aGluCiAgICAgKiAgIHRoaXMgZWxlbWVudCdzIGxpZ2h0IG9yIHNoYWRvdyBET00uCiAgICAgKi8KICAgIGRlZXBDb250YWlucyhub2RlKSB7CiAgICAgIGlmICh0aGlzLm5vZGUuY29udGFpbnMobm9kZSkpIHsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgICBsZXQgbiA9IG5vZGU7CiAgICAgIGxldCBkb2MgPSBub2RlLm93bmVyRG9jdW1lbnQ7CiAgICAgIC8vIHdhbGsgZnJvbSBub2RlIHRvIGB0aGlzYCBvciBgZG9jdW1lbnRgCiAgICAgIHdoaWxlIChuICYmIG4gIT09IGRvYyAmJiBuICE9PSB0aGlzLm5vZGUpIHsKICAgICAgICAvLyB1c2UgbG9naWNhbCBwYXJlbnRub2RlLCBvciBuYXRpdmUgU2hhZG93Um9vdCBob3N0CiAgICAgICAgbiA9IG4ucGFyZW50Tm9kZSB8fCBuLmhvc3Q7CiAgICAgIH0KICAgICAgcmV0dXJuIG4gPT09IHRoaXMubm9kZTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIHJvb3Qgbm9kZSBvZiB0aGlzIG5vZGUuICBFcXVpdmFsZW50IHRvIGBnZXRSb29kTm9kZSgpYC4KICAgICAqCiAgICAgKiBAcmV0dXJuIHtOb2RlfSBUb3AgbW9zdCBlbGVtZW50IGluIHRoZSBkb20gdHJlZSBpbiB3aGljaCB0aGUgbm9kZQogICAgICogZXhpc3RzLiBJZiB0aGUgbm9kZSBpcyBjb25uZWN0ZWQgdG8gYSBkb2N1bWVudCB0aGlzIGlzIGVpdGhlciBhCiAgICAgKiBzaGFkb3dSb290IG9yIHRoZSBkb2N1bWVudDsgb3RoZXJ3aXNlLCBpdCBtYXkgYmUgdGhlIG5vZGUKICAgICAqIGl0c2VsZiBvciBhIG5vZGUgb3IgZG9jdW1lbnQgZnJhZ21lbnQgY29udGFpbmluZyBpdC4KICAgICAqLwogICAgZ2V0T3duZXJSb290KCkgewogICAgICByZXR1cm4gdGhpcy5ub2RlLmdldFJvb3ROb2RlKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBGb3Igc2xvdCBlbGVtZW50cywgcmV0dXJucyB0aGUgbm9kZXMgYXNzaWduZWQgdG8gdGhlIHNsb3Q7IG90aGVyd2lzZQogICAgICogYW4gZW1wdHkgYXJyYXkuIEl0IGlzIGVxdWl2YWxlbnQgdG8gYDxzbG90Pi5hZGRpZ25lZE5vZGVzKHtmbGF0dGVuOnRydWV9KWAuCiAgICAgKgogICAgICogQHJldHVybiB7IUFycmF5PCFOb2RlPn0gQXJyYXkgb2YgYXNzaWduZWQgbm9kZXMKICAgICAqLwogICAgZ2V0RGlzdHJpYnV0ZWROb2RlcygpIHsKICAgICAgcmV0dXJuICh0aGlzLm5vZGUubG9jYWxOYW1lID09PSAnc2xvdCcpID8KICAgICAgICB0aGlzLm5vZGUuYXNzaWduZWROb2Rlcyh7ZmxhdHRlbjogdHJ1ZX0pIDoKICAgICAgICBbXTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgYW4gYXJyYXkgb2YgYWxsIHNsb3RzIHRoaXMgZWxlbWVudCB3YXMgZGlzdHJpYnV0ZWQgdG8uCiAgICAgKgogICAgICogQHJldHVybiB7IUFycmF5PCFIVE1MU2xvdEVsZW1lbnQ+fSBEZXNjcmlwdGlvbgogICAgICovCiAgICBnZXREZXN0aW5hdGlvbkluc2VydGlvblBvaW50cygpIHsKICAgICAgbGV0IGlwJCA9IFtdOwogICAgICBsZXQgbiA9IHRoaXMubm9kZS5hc3NpZ25lZFNsb3Q7CiAgICAgIHdoaWxlIChuKSB7CiAgICAgICAgaXAkLnB1c2gobik7CiAgICAgICAgbiA9IG4uYXNzaWduZWRTbG90OwogICAgICB9CiAgICAgIHJldHVybiBpcCQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBDYWxscyBgaW1wb3J0Tm9kZWAgb24gdGhlIGBvd25lckRvY3VtZW50YCBmb3IgdGhpcyBub2RlLgogICAgICoKICAgICAqIEBwYXJhbSB7IU5vZGV9IG5vZGUgTm9kZSB0byBpbXBvcnQKICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZGVlcCBUcnVlIGlmIHRoZSBub2RlIHNob3VsZCBiZSBjbG9uZWQgZGVlcGx5IGR1cmluZwogICAgICogICBpbXBvcnQKICAgICAqIEByZXR1cm4ge05vZGV9IENsb25lIG9mIGdpdmVuIG5vZGUgaW1wb3J0ZWQgdG8gdGhpcyBvd25lciBkb2N1bWVudAogICAgICovCiAgICBpbXBvcnROb2RlKG5vZGUsIGRlZXApIHsKICAgICAgbGV0IGRvYyA9IHRoaXMubm9kZSBpbnN0YW5jZW9mIERvY3VtZW50ID8gdGhpcy5ub2RlIDoKICAgICAgICB0aGlzLm5vZGUub3duZXJEb2N1bWVudDsKICAgICAgcmV0dXJuIGRvYy5pbXBvcnROb2RlKG5vZGUsIGRlZXApOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiB7IUFycmF5PCFOb2RlPn0gUmV0dXJucyBhIGZsYXR0ZW5lZCBsaXN0IG9mIGFsbCBjaGlsZCBub2RlcyBhbmQKICAgICAqIG5vZGVzIGFzc2lnbmVkIHRvIGNoaWxkIHNsb3RzLgogICAgICovCiAgICBnZXRFZmZlY3RpdmVDaGlsZE5vZGVzKCkgewogICAgICByZXR1cm4gUG9seW1lci5GbGF0dGVuZWROb2Rlc09ic2VydmVyLmdldEZsYXR0ZW5lZE5vZGVzKHRoaXMubm9kZSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGEgZmlsdGVyZWQgbGlzdCBvZiBmbGF0dGVuZWQgY2hpbGQgZWxlbWVudHMgZm9yIHRoaXMgZWxlbWVudCBiYXNlZAogICAgICogb24gdGhlIGdpdmVuIHNlbGVjdG9yLgogICAgICoKICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzZWxlY3RvciBTZWxlY3RvciB0byBmaWx0ZXIgbm9kZXMgYWdhaW5zdAogICAgICogQHJldHVybiB7IUFycmF5PCFIVE1MRWxlbWVudD59IExpc3Qgb2YgZmxhdHRlbmVkIGNoaWxkIGVsZW1lbnRzCiAgICAgKi8KICAgIHF1ZXJ5RGlzdHJpYnV0ZWRFbGVtZW50cyhzZWxlY3RvcikgewogICAgICBsZXQgYyQgPSB0aGlzLmdldEVmZmVjdGl2ZUNoaWxkTm9kZXMoKTsKICAgICAgbGV0IGxpc3QgPSBbXTsKICAgICAgZm9yIChsZXQgaT0wLCBsPWMkLmxlbmd0aCwgYzsgKGk8bCkgJiYgKGM9YyRbaV0pOyBpKyspIHsKICAgICAgICBpZiAoKGMubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFKSAmJgogICAgICAgICAgICBtYXRjaGVzU2VsZWN0b3IoYywgc2VsZWN0b3IpKSB7CiAgICAgICAgICBsaXN0LnB1c2goYyk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBsaXN0OwogICAgfQoKICAgIC8qKgogICAgICogRm9yIHNoYWRvdyByb290cywgcmV0dXJucyB0aGUgY3VycmVudGx5IGZvY3VzZWQgZWxlbWVudCB3aXRoaW4gdGhpcwogICAgICogc2hhZG93IHJvb3QuCiAgICAgKgogICAgICogQHJldHVybiB7Tm9kZXx1bmRlZmluZWR9IEN1cnJlbnRseSBmb2N1c2VkIGVsZW1lbnQKICAgICAqLwogICAgZ2V0IGFjdGl2ZUVsZW1lbnQoKSB7CiAgICAgIGxldCBub2RlID0gdGhpcy5ub2RlOwogICAgICByZXR1cm4gbm9kZS5fYWN0aXZlRWxlbWVudCAhPT0gdW5kZWZpbmVkID8gbm9kZS5fYWN0aXZlRWxlbWVudCA6IG5vZGUuYWN0aXZlRWxlbWVudDsKICAgIH0KICB9CgogIGZ1bmN0aW9uIGZvcndhcmRNZXRob2RzKHByb3RvLCBtZXRob2RzKSB7CiAgICBmb3IgKGxldCBpPTA7IGkgPCBtZXRob2RzLmxlbmd0aDsgaSsrKSB7CiAgICAgIGxldCBtZXRob2QgPSBtZXRob2RzW2ldOwogICAgICAvKiBlc2xpbnQtZGlzYWJsZSB2YWxpZC1qc2RvYyAqLwogICAgICBwcm90b1ttZXRob2RdID0gLyoqIEB0aGlzIHtEb21BcGl9ICovIGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiB0aGlzLm5vZGVbbWV0aG9kXS5hcHBseSh0aGlzLm5vZGUsIGFyZ3VtZW50cyk7CiAgICAgIH07CiAgICAgIC8qIGVzbGludC1lbmFibGUgKi8KICAgIH0KICB9CgogIGZ1bmN0aW9uIGZvcndhcmRSZWFkT25seVByb3BlcnRpZXMocHJvdG8sIHByb3BlcnRpZXMpIHsKICAgIGZvciAobGV0IGk9MDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHsKICAgICAgbGV0IG5hbWUgPSBwcm9wZXJ0aWVzW2ldOwogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocHJvdG8sIG5hbWUsIHsKICAgICAgICBnZXQ6IGZ1bmN0aW9uKCkgewogICAgICAgICAgY29uc3QgZG9tQXBpID0gLyoqIEB0eXBlIHtEb21BcGl9ICovKHRoaXMpOwogICAgICAgICAgcmV0dXJuIGRvbUFwaS5ub2RlW25hbWVdOwogICAgICAgIH0sCiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCiAgICAgIH0pOwogICAgfQogIH0KCiAgZnVuY3Rpb24gZm9yd2FyZFByb3BlcnRpZXMocHJvdG8sIHByb3BlcnRpZXMpIHsKICAgIGZvciAobGV0IGk9MDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHsKICAgICAgbGV0IG5hbWUgPSBwcm9wZXJ0aWVzW2ldOwogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocHJvdG8sIG5hbWUsIHsKICAgICAgICBnZXQ6IGZ1bmN0aW9uKCkgewogICAgICAgICAgY29uc3QgZG9tQXBpID0gLyoqIEB0eXBlIHtEb21BcGl9ICovKHRoaXMpOwogICAgICAgICAgcmV0dXJuIGRvbUFwaS5ub2RlW25hbWVdOwogICAgICAgIH0sCiAgICAgICAgc2V0OiBmdW5jdGlvbih2YWx1ZSkgewogICAgICAgICAgLyoqIEB0eXBlIHtEb21BcGl9ICovICh0aGlzKS5ub2RlW25hbWVdID0gdmFsdWU7CiAgICAgICAgfSwKICAgICAgICBjb25maWd1cmFibGU6IHRydWUKICAgICAgfSk7CiAgICB9CiAgfQoKICBmb3J3YXJkTWV0aG9kcyhEb21BcGkucHJvdG90eXBlLCBbCiAgICAnY2xvbmVOb2RlJywgJ2FwcGVuZENoaWxkJywgJ2luc2VydEJlZm9yZScsICdyZW1vdmVDaGlsZCcsCiAgICAncmVwbGFjZUNoaWxkJywgJ3NldEF0dHJpYnV0ZScsICdyZW1vdmVBdHRyaWJ1dGUnLAogICAgJ3F1ZXJ5U2VsZWN0b3InLCAncXVlcnlTZWxlY3RvckFsbCcKICBdKTsKCiAgZm9yd2FyZFJlYWRPbmx5UHJvcGVydGllcyhEb21BcGkucHJvdG90eXBlLCBbCiAgICAncGFyZW50Tm9kZScsICdmaXJzdENoaWxkJywgJ2xhc3RDaGlsZCcsCiAgICAnbmV4dFNpYmxpbmcnLCAncHJldmlvdXNTaWJsaW5nJywgJ2ZpcnN0RWxlbWVudENoaWxkJywKICAgICdsYXN0RWxlbWVudENoaWxkJywgJ25leHRFbGVtZW50U2libGluZycsICdwcmV2aW91c0VsZW1lbnRTaWJsaW5nJywKICAgICdjaGlsZE5vZGVzJywgJ2NoaWxkcmVuJywgJ2NsYXNzTGlzdCcKICBdKTsKCiAgZm9yd2FyZFByb3BlcnRpZXMoRG9tQXBpLnByb3RvdHlwZSwgWwogICAgJ3RleHRDb250ZW50JywgJ2lubmVySFRNTCcKICBdKTsKCgogIC8qKgogICAqIEV2ZW50IEFQSSB3cmFwcGVyIGNsYXNzIHJldHVybmVkIGZyb20gYFBvbHltZXIuZG9tLih0YXJnZXQpYCB3aGVuCiAgICogYHRhcmdldGAgaXMgYW4gYEV2ZW50YC4KICAgKi8KICBjbGFzcyBFdmVudEFwaSB7CiAgICBjb25zdHJ1Y3RvcihldmVudCkgewogICAgICB0aGlzLmV2ZW50ID0gZXZlbnQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBmaXJzdCBub2RlIG9uIHRoZSBgY29tcG9zZWRQYXRoYCBvZiB0aGlzIGV2ZW50LgogICAgICoKICAgICAqIEByZXR1cm4geyFFdmVudFRhcmdldH0gVGhlIG5vZGUgdGhpcyBldmVudCB3YXMgZGlzcGF0Y2hlZCB0bwogICAgICovCiAgICBnZXQgcm9vdFRhcmdldCgpIHsKICAgICAgcmV0dXJuIHRoaXMuZXZlbnQuY29tcG9zZWRQYXRoKClbMF07CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBsb2NhbCAocmUtdGFyZ2V0ZWQpIHRhcmdldCBmb3IgdGhpcyBldmVudC4KICAgICAqCiAgICAgKiBAcmV0dXJuIHshRXZlbnRUYXJnZXR9IFRoZSBsb2NhbCAocmUtdGFyZ2V0ZWQpIHRhcmdldCBmb3IgdGhpcyBldmVudC4KICAgICAqLwogICAgZ2V0IGxvY2FsVGFyZ2V0KCkgewogICAgICByZXR1cm4gdGhpcy5ldmVudC50YXJnZXQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBgY29tcG9zZWRQYXRoYCBmb3IgdGhpcyBldmVudC4KICAgICAqIEByZXR1cm4geyFBcnJheTwhRXZlbnRUYXJnZXQ+fSBUaGUgbm9kZXMgdGhpcyBldmVudCBwcm9wYWdhdGVkIHRocm91Z2gKICAgICAqLwogICAgZ2V0IHBhdGgoKSB7CiAgICAgIHJldHVybiB0aGlzLmV2ZW50LmNvbXBvc2VkUGF0aCgpOwogICAgfQogIH0KCiAgUG9seW1lci5Eb21BcGkgPSBEb21BcGk7CgogIC8qKgogICAqIEBmdW5jdGlvbgogICAqIEBwYXJhbSB7Ym9vbGVhbj19IGRlZXAKICAgKiBAcmV0dXJuIHshTm9kZX0KICAgKi8KICBQb2x5bWVyLkRvbUFwaS5wcm90b3R5cGUuY2xvbmVOb2RlOwogIC8qKgogICAqIEBmdW5jdGlvbgogICAqIEBwYXJhbSB7IU5vZGV9IG5vZGUKICAgKiBAcmV0dXJuIHshTm9kZX0KICAgKi8KICBQb2x5bWVyLkRvbUFwaS5wcm90b3R5cGUuYXBwZW5kQ2hpbGQ7CiAgLyoqCiAgICogQGZ1bmN0aW9uCiAgICogQHBhcmFtIHshTm9kZX0gbmV3Q2hpbGQKICAgKiBAcGFyYW0ge05vZGV9IHJlZkNoaWxkCiAgICogQHJldHVybiB7IU5vZGV9CiAgICovCiAgUG9seW1lci5Eb21BcGkucHJvdG90eXBlLmluc2VydEJlZm9yZTsKICAvKioKICAgKiBAZnVuY3Rpb24KICAgKiBAcGFyYW0geyFOb2RlfSBub2RlCiAgICogQHJldHVybiB7IU5vZGV9CiAgICovCiAgUG9seW1lci5Eb21BcGkucHJvdG90eXBlLnJlbW92ZUNoaWxkOwogIC8qKgogICAqIEBmdW5jdGlvbgogICAqIEBwYXJhbSB7IU5vZGV9IG9sZENoaWxkCiAgICogQHBhcmFtIHshTm9kZX0gbmV3Q2hpbGQKICAgKiBAcmV0dXJuIHshTm9kZX0KICAgKi8KICBQb2x5bWVyLkRvbUFwaS5wcm90b3R5cGUucmVwbGFjZUNoaWxkOwogIC8qKgogICAqIEBmdW5jdGlvbgogICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lCiAgICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlCiAgICogQHJldHVybiB7dm9pZH0KICAgKi8KICBQb2x5bWVyLkRvbUFwaS5wcm90b3R5cGUuc2V0QXR0cmlidXRlOwogIC8qKgogICAqIEBmdW5jdGlvbgogICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lCiAgICogQHJldHVybiB7dm9pZH0KICAgKi8KICBQb2x5bWVyLkRvbUFwaS5wcm90b3R5cGUucmVtb3ZlQXR0cmlidXRlOwogIC8qKgogICAqIEBmdW5jdGlvbgogICAqIEBwYXJhbSB7c3RyaW5nfSBzZWxlY3RvcgogICAqIEByZXR1cm4gez9FbGVtZW50fQogICAqLwogIFBvbHltZXIuRG9tQXBpLnByb3RvdHlwZS5xdWVyeVNlbGVjdG9yOwogIC8qKgogICAqIEBmdW5jdGlvbgogICAqIEBwYXJhbSB7c3RyaW5nfSBzZWxlY3RvcgogICAqIEByZXR1cm4geyFOb2RlTGlzdDwhRWxlbWVudD59CiAgICovCiAgUG9seW1lci5Eb21BcGkucHJvdG90eXBlLnF1ZXJ5U2VsZWN0b3JBbGw7CgogIC8qKgogICAqIExlZ2FjeSBET00gYW5kIEV2ZW50IG1hbmlwdWxhdGlvbiBBUEkgd3JhcHBlciBmYWN0b3J5IHVzZWQgdG8gYWJzdHJhY3QKICAgKiBkaWZmZXJlbmNlcyBiZXR3ZWVuIG5hdGl2ZSBTaGFkb3cgRE9NIGFuZCAiU2hhZHkgRE9NIiB3aGVuIHBvbHlmaWxsaW5nIG9uCiAgICogb2xkZXIgYnJvd3NlcnMuCiAgICoKICAgKiBOb3RlIHRoYXQgaW4gUG9seW1lciAyLnggdXNlIG9mIGBQb2x5bWVyLmRvbWAgaXMgbm8gbG9uZ2VyIHJlcXVpcmVkIGFuZAogICAqIGluIHRoZSBtYWpvcml0eSBvZiBjYXNlcyBzaW1wbHkgZmFjYWRlcyBkaXJlY3RseSB0byB0aGUgc3RhbmRhcmQgbmF0aXZlCiAgICogQVBJLgogICAqCiAgICogQG5hbWVzcGFjZQogICAqIEBzdW1tYXJ5IExlZ2FjeSBET00gYW5kIEV2ZW50IG1hbmlwdWxhdGlvbiBBUEkgd3JhcHBlciBmYWN0b3J5IHVzZWQgdG8KICAgKiBhYnN0cmFjdCBkaWZmZXJlbmNlcyBiZXR3ZWVuIG5hdGl2ZSBTaGFkb3cgRE9NIGFuZCAiU2hhZHkgRE9NLiIKICAgKiBAbWVtYmVyb2YgUG9seW1lcgogICAqIEBwYXJhbSB7KE5vZGV8RXZlbnQpPX0gb2JqIE5vZGUgb3IgZXZlbnQgdG8gb3BlcmF0ZSBvbgogICAqIEByZXR1cm4geyFEb21BcGl8IUV2ZW50QXBpfSBXcmFwcGVyIHByb3ZpZGluZyBlaXRoZXIgbm9kZSBBUEkgb3IgZXZlbnQgQVBJCiAgICovCiAgUG9seW1lci5kb20gPSBmdW5jdGlvbihvYmopIHsKICAgIG9iaiA9IG9iaiB8fCBkb2N1bWVudDsKICAgIGlmICghb2JqLl9fZG9tQXBpKSB7CiAgICAgIGxldCBoZWxwZXI7CiAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBFdmVudCkgewogICAgICAgIGhlbHBlciA9IG5ldyBFdmVudEFwaShvYmopOwogICAgICB9IGVsc2UgewogICAgICAgIGhlbHBlciA9IG5ldyBEb21BcGkob2JqKTsKICAgICAgfQogICAgICBvYmouX19kb21BcGkgPSBoZWxwZXI7CiAgICB9CiAgICByZXR1cm4gb2JqLl9fZG9tQXBpOwogIH07CgogIFBvbHltZXIuZG9tLm1hdGNoZXNTZWxlY3RvciA9IG1hdGNoZXNTZWxlY3RvcjsKCiAgLyoqCiAgICogRm9yY2VzIHNldmVyYWwgY2xhc3NlcyBvZiBhc3luY2hyb25vdXNseSBxdWV1ZWQgdGFza3MgdG8gZmx1c2g6CiAgICogLSBEZWJvdW5jZXJzIGFkZGVkIHZpYSBgUG9seW1lci5lbnF1ZXVlRGVib3VuY2VyYAogICAqIC0gU2hhZHlET00gZGlzdHJpYnV0aW9uCiAgICoKICAgKiBUaGlzIG1ldGhvZCBmYWNhZGVzIHRvIGBQb2x5bWVyLmZsdXNoYC4KICAgKgogICAqIEBtZW1iZXJvZiBQb2x5bWVyLmRvbQogICAqLwogIFBvbHltZXIuZG9tLmZsdXNoID0gUG9seW1lci5mbHVzaDsKCiAgLyoqCiAgICogQWRkcyBhIGBQb2x5bWVyLkRlYm91bmNlcmAgdG8gYSBsaXN0IG9mIGdsb2JhbGx5IGZsdXNoYWJsZSB0YXNrcy4KICAgKgogICAqIFRoaXMgbWV0aG9kIGZhY2FkZXMgdG8gYFBvbHltZXIuZW5xdWV1ZURlYm91bmNlcmAuCiAgICoKICAgKiBAbWVtYmVyb2YgUG9seW1lci5kb20KICAgKiBAcGFyYW0geyFQb2x5bWVyLkRlYm91bmNlcn0gZGVib3VuY2VyIERlYm91bmNlciB0byBlbnF1ZXVlCiAgICovCiAgUG9seW1lci5kb20uYWRkRGVib3VuY2VyID0gUG9seW1lci5lbnF1ZXVlRGVib3VuY2VyOwp9KSgpOwo8L3NjcmlwdD48c2NyaXB0PgooZnVuY3Rpb24oKSB7CgogICd1c2Ugc3RyaWN0JzsKCiAgbGV0IHN0eWxlSW50ZXJmYWNlID0gd2luZG93LlNoYWR5Q1NTOwoKICAvKioKICAgKiBFbGVtZW50IGNsYXNzIG1peGluIHRoYXQgcHJvdmlkZXMgUG9seW1lcidzICJsZWdhY3kiIEFQSSBpbnRlbmRlZCB0byBiZQogICAqIGJhY2t3YXJkLWNvbXBhdGlibGUgdG8gdGhlIGdyZWF0ZXN0IGV4dGVudCBwb3NzaWJsZSB3aXRoIHRoZSBBUEkKICAgKiBmb3VuZCBvbiB0aGUgUG9seW1lciAxLnggYFBvbHltZXIuQmFzZWAgcHJvdG90eXBlIGFwcGxpZWQgdG8gYWxsIGVsZW1lbnRzCiAgICogZGVmaW5lZCB1c2luZyB0aGUgYFBvbHltZXIoey4uLn0pYCBmdW5jdGlvbi4KICAgKgogICAqIEBtaXhpbkZ1bmN0aW9uCiAgICogQHBvbHltZXIKICAgKiBAYXBwbGllc01peGluIFBvbHltZXIuRWxlbWVudE1peGluCiAgICogQGFwcGxpZXNNaXhpbiBQb2x5bWVyLkdlc3R1cmVFdmVudExpc3RlbmVycwogICAqIEBwcm9wZXJ0eSBpc0F0dGFjaGVkIHtib29sZWFufSBTZXQgdG8gYHRydWVgIGluIHRoaXMgZWxlbWVudCdzCiAgICogICBgY29ubmVjdGVkQ2FsbGJhY2tgIGFuZCBgZmFsc2VgIGluIGBkaXNjb25uZWN0ZWRDYWxsYmFja2AKICAgKiBAbWVtYmVyb2YgUG9seW1lcgogICAqIEBzdW1tYXJ5IEVsZW1lbnQgY2xhc3MgbWl4aW4gdGhhdCBwcm92aWRlcyBQb2x5bWVyJ3MgImxlZ2FjeSIgQVBJCiAgICovCiAgUG9seW1lci5MZWdhY3lFbGVtZW50TWl4aW4gPSBQb2x5bWVyLmRlZHVwaW5nTWl4aW4oKGJhc2UpID0+IHsKCiAgICAvKioKICAgICAqIEBjb25zdHJ1Y3RvcgogICAgICogQGV4dGVuZHMge2Jhc2V9CiAgICAgKiBAaW1wbGVtZW50cyB7UG9seW1lcl9FbGVtZW50TWl4aW59CiAgICAgKiBAaW1wbGVtZW50cyB7UG9seW1lcl9HZXN0dXJlRXZlbnRMaXN0ZW5lcnN9CiAgICAgKiBAaW1wbGVtZW50cyB7UG9seW1lcl9EaXJNaXhpbn0KICAgICAqIEBwcml2YXRlCiAgICAgKi8KICAgIGNvbnN0IGxlZ2FjeUVsZW1lbnRCYXNlID0gUG9seW1lci5EaXJNaXhpbihQb2x5bWVyLkdlc3R1cmVFdmVudExpc3RlbmVycyhQb2x5bWVyLkVsZW1lbnRNaXhpbihiYXNlKSkpOwoKICAgIC8qKgogICAgICogTWFwIG9mIHNpbXBsZSBuYW1lcyB0byB0b3VjaCBhY3Rpb24gbmFtZXMKICAgICAqIEBkaWN0CiAgICAgKi8KICAgIGNvbnN0IERJUkVDVElPTl9NQVAgPSB7CiAgICAgICd4JzogJ3Bhbi14JywKICAgICAgJ3knOiAncGFuLXknLAogICAgICAnbm9uZSc6ICdub25lJywKICAgICAgJ2FsbCc6ICdhdXRvJwogICAgfTsKCiAgICAvKioKICAgICAqIEBwb2x5bWVyCiAgICAgKiBAbWl4aW5DbGFzcwogICAgICogQGV4dGVuZHMge2xlZ2FjeUVsZW1lbnRCYXNlfQogICAgICogQGltcGxlbWVudHMge1BvbHltZXJfTGVnYWN5RWxlbWVudE1peGlufQogICAgICogQHVucmVzdHJpY3RlZAogICAgICovCiAgICBjbGFzcyBMZWdhY3lFbGVtZW50IGV4dGVuZHMgbGVnYWN5RWxlbWVudEJhc2UgewoKICAgICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgc3VwZXIoKTsKICAgICAgICAvKiogQHR5cGUge2Jvb2xlYW59ICovCiAgICAgICAgdGhpcy5pc0F0dGFjaGVkOwogICAgICAgIC8qKiBAdHlwZSB7V2Vha01hcDwhRWxlbWVudCwgIU9iamVjdDxzdHJpbmcsICFGdW5jdGlvbj4+fSAqLwogICAgICAgIHRoaXMuX19ib3VuZExpc3RlbmVyczsKICAgICAgICAvKiogQHR5cGUge09iamVjdDxzdHJpbmcsIEZ1bmN0aW9uPn0gKi8KICAgICAgICB0aGlzLl9kZWJvdW5jZXJzOwogICAgICB9CgogICAgICAvKioKICAgICAgICogRm9yd2FyZHMgYGltcG9ydE1ldGFgIGZyb20gdGhlIHByb3RvdHlwZSAoaS5lLiBmcm9tIHRoZSBpbmZvIG9iamVjdAogICAgICAgKiBwYXNzZWQgdG8gYFBvbHltZXIoey4uLn0pYCkgdG8gdGhlIHN0YXRpYyBBUEkuCiAgICAgICAqCiAgICAgICAqIEByZXR1cm4geyFPYmplY3R9IFRoZSBgaW1wb3J0Lm1ldGFgIG9iamVjdCBzZXQgb24gdGhlIHByb3RvdHlwZQogICAgICAgKiBAc3VwcHJlc3Mge21pc3NpbmdQcm9wZXJ0aWVzfSBgdGhpc2AgaXMgYWx3YXlzIGluIHRoZSBpbnN0YW5jZSBpbgogICAgICAgKiAgY2xvc3VyZSBmb3Igc29tZSByZWFzb24gZXZlbiBpbiBhIHN0YXRpYyBtZXRob2QsIHJhdGhlciB0aGFuIHRoZSBjbGFzcwogICAgICAgKi8KICAgICAgc3RhdGljIGdldCBpbXBvcnRNZXRhKCkgewogICAgICAgIHJldHVybiB0aGlzLnByb3RvdHlwZS5pbXBvcnRNZXRhOwogICAgICB9CgogICAgICAvKioKICAgICAgICogTGVnYWN5IGNhbGxiYWNrIGNhbGxlZCBkdXJpbmcgdGhlIGBjb25zdHJ1Y3RvcmAsIGZvciBvdmVycmlkaW5nCiAgICAgICAqIGJ5IHRoZSB1c2VyLgogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKi8KICAgICAgY3JlYXRlZCgpIHt9CgogICAgICAvKioKICAgICAgICogUHJvdmlkZXMgYW4gaW1wbGVtZW50YXRpb24gb2YgYGNvbm5lY3RlZENhbGxiYWNrYAogICAgICAgKiB3aGljaCBhZGRzIFBvbHltZXIgbGVnYWN5IEFQSSdzIGBhdHRhY2hlZGAgbWV0aG9kLgogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKiBAb3ZlcnJpZGUKICAgICAgICovCiAgICAgIGNvbm5lY3RlZENhbGxiYWNrKCkgewogICAgICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7CiAgICAgICAgdGhpcy5pc0F0dGFjaGVkID0gdHJ1ZTsKICAgICAgICB0aGlzLmF0dGFjaGVkKCk7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBMZWdhY3kgY2FsbGJhY2sgY2FsbGVkIGR1cmluZyBgY29ubmVjdGVkQ2FsbGJhY2tgLCBmb3Igb3ZlcnJpZGluZwogICAgICAgKiBieSB0aGUgdXNlci4KICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICovCiAgICAgIGF0dGFjaGVkKCkge30KCiAgICAgIC8qKgogICAgICAgKiBQcm92aWRlcyBhbiBpbXBsZW1lbnRhdGlvbiBvZiBgZGlzY29ubmVjdGVkQ2FsbGJhY2tgCiAgICAgICAqIHdoaWNoIGFkZHMgUG9seW1lciBsZWdhY3kgQVBJJ3MgYGRldGFjaGVkYCBtZXRob2QuCiAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAqIEBvdmVycmlkZQogICAgICAgKi8KICAgICAgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICAgICAgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTsKICAgICAgICB0aGlzLmlzQXR0YWNoZWQgPSBmYWxzZTsKICAgICAgICB0aGlzLmRldGFjaGVkKCk7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBMZWdhY3kgY2FsbGJhY2sgY2FsbGVkIGR1cmluZyBgZGlzY29ubmVjdGVkQ2FsbGJhY2tgLCBmb3Igb3ZlcnJpZGluZwogICAgICAgKiBieSB0aGUgdXNlci4KICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICovCiAgICAgIGRldGFjaGVkKCkge30KCiAgICAgIC8qKgogICAgICAgKiBQcm92aWRlcyBhbiBvdmVycmlkZSBpbXBsZW1lbnRhdGlvbiBvZiBgYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrYAogICAgICAgKiB3aGljaCBhZGRzIHRoZSBQb2x5bWVyIGxlZ2FjeSBBUEkncyBgYXR0cmlidXRlQ2hhbmdlZGAgbWV0aG9kLgogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBOYW1lIG9mIGF0dHJpYnV0ZS4KICAgICAgICogQHBhcmFtIHs/c3RyaW5nfSBvbGQgT2xkIHZhbHVlIG9mIGF0dHJpYnV0ZS4KICAgICAgICogQHBhcmFtIHs/c3RyaW5nfSB2YWx1ZSBDdXJyZW50IHZhbHVlIG9mIGF0dHJpYnV0ZS4KICAgICAgICogQHBhcmFtIHs/c3RyaW5nfSBuYW1lc3BhY2UgQXR0cmlidXRlIG5hbWVzcGFjZS4KICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICogQG92ZXJyaWRlCiAgICAgICAqLwogICAgICBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2sobmFtZSwgb2xkLCB2YWx1ZSwgbmFtZXNwYWNlKSB7CiAgICAgICAgaWYgKG9sZCAhPT0gdmFsdWUpIHsKICAgICAgICAgIHN1cGVyLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhuYW1lLCBvbGQsIHZhbHVlLCBuYW1lc3BhY2UpOwogICAgICAgICAgdGhpcy5hdHRyaWJ1dGVDaGFuZ2VkKG5hbWUsIG9sZCwgdmFsdWUpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIExlZ2FjeSBjYWxsYmFjayBjYWxsZWQgZHVyaW5nIGBhdHRyaWJ1dGVDaGFuZ2VkQ2hhbGxiYWNrYCwgZm9yIG92ZXJyaWRpbmcKICAgICAgICogYnkgdGhlIHVzZXIuCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIE5hbWUgb2YgYXR0cmlidXRlLgogICAgICAgKiBAcGFyYW0gez9zdHJpbmd9IG9sZCBPbGQgdmFsdWUgb2YgYXR0cmlidXRlLgogICAgICAgKiBAcGFyYW0gez9zdHJpbmd9IHZhbHVlIEN1cnJlbnQgdmFsdWUgb2YgYXR0cmlidXRlLgogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKi8KICAgICAgYXR0cmlidXRlQ2hhbmdlZChuYW1lLCBvbGQsIHZhbHVlKSB7fSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzCgogICAgICAvKioKICAgICAgICogT3ZlcnJpZGVzIHRoZSBkZWZhdWx0IGBQb2x5bWVyLlByb3BlcnR5RWZmZWN0c2AgaW1wbGVtZW50YXRpb24gdG8KICAgICAgICogYWRkIHN1cHBvcnQgZm9yIGNsYXNzIGluaXRpYWxpemF0aW9uIHZpYSB0aGUgYF9yZWdpc3RlcmVkYCBjYWxsYmFjay4KICAgICAgICogVGhpcyBpcyBjYWxsZWQgb25seSB3aGVuIHRoZSBmaXJzdCBpbnN0YW5jZSBvZiB0aGUgZWxlbWVudCBpcyBjcmVhdGVkLgogICAgICAgKgogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKiBAb3ZlcnJpZGUKICAgICAgICogQHN1cHByZXNzIHtpbnZhbGlkQ2FzdHN9CiAgICAgICAqLwogICAgICBfaW5pdGlhbGl6ZVByb3BlcnRpZXMoKSB7CiAgICAgICAgbGV0IHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpOwogICAgICAgIGlmICghcHJvdG8uaGFzT3duUHJvcGVydHkoJ19faGFzUmVnaXN0ZXJGaW5pc2hlZCcpKSB7CiAgICAgICAgICB0aGlzLl9yZWdpc3RlcmVkKCk7CiAgICAgICAgICAvLyBiYWNrc3RvcCBpbiBjYXNlIHRoZSBgX3JlZ2lzdGVyZWRgIGltcGxlbWVudGF0aW9uIGRvZXMgbm90IHNldCB0aGlzCiAgICAgICAgICBwcm90by5fX2hhc1JlZ2lzdGVyRmluaXNoZWQgPSB0cnVlOwogICAgICAgIH0KICAgICAgICBzdXBlci5faW5pdGlhbGl6ZVByb3BlcnRpZXMoKTsKICAgICAgICB0aGlzLnJvb3QgPSAvKiogQHR5cGUge0hUTUxFbGVtZW50fSAqLyh0aGlzKTsKICAgICAgICB0aGlzLmNyZWF0ZWQoKTsKICAgICAgICAvLyBFbnN1cmUgbGlzdGVuZXJzIGFyZSBhcHBsaWVkIGltbWVkaWF0ZWx5IHNvIHRoYXQgdGhleSBhcmUKICAgICAgICAvLyBhZGRlZCBiZWZvcmUgZGVjbGFyYXRpdmUgZXZlbnQgbGlzdGVuZXJzLiBUaGlzIGFsbG93cyBhbiBlbGVtZW50IHRvCiAgICAgICAgLy8gZGVjb3JhdGUgaXRzZWxmIHZpYSBhbiBldmVudCBwcmlvciB0byBhbnkgZGVjbGFyYXRpdmUgbGlzdGVuZXJzCiAgICAgICAgLy8gc2VlaW5nIHRoZSBldmVudC4gTm90ZSwgdGhpcyBlbnN1cmVzIGNvbXBhdGliaWxpdHkgd2l0aCAxLnggb3JkZXJpbmcuCiAgICAgICAgdGhpcy5fYXBwbHlMaXN0ZW5lcnMoKTsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIENhbGxlZCBhdXRvbWF0aWNhbGx5IHdoZW4gYW4gZWxlbWVudCBpcyBpbml0aWFsaXppbmcuCiAgICAgICAqIFVzZXJzIG1heSBvdmVycmlkZSB0aGlzIG1ldGhvZCB0byBwZXJmb3JtIGNsYXNzIHJlZ2lzdHJhdGlvbiB0aW1lCiAgICAgICAqIHdvcmsuIFRoZSBpbXBsZW1lbnRhdGlvbiBzaG91bGQgZW5zdXJlIHRoZSB3b3JrIGlzIHBlcmZvcm1lZAogICAgICAgKiBvbmx5IG9uY2UgZm9yIHRoZSBjbGFzcy4KICAgICAgICogQHByb3RlY3RlZAogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKi8KICAgICAgX3JlZ2lzdGVyZWQoKSB7fQoKICAgICAgLyoqCiAgICAgICAqIE92ZXJyaWRlcyB0aGUgZGVmYXVsdCBgUG9seW1lci5Qcm9wZXJ0eUVmZmVjdHNgIGltcGxlbWVudGF0aW9uIHRvCiAgICAgICAqIGFkZCBzdXBwb3J0IGZvciBpbnN0YWxsaW5nIGBob3N0QXR0cmlidXRlc2AgYW5kIGBsaXN0ZW5lcnNgLgogICAgICAgKgogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKiBAb3ZlcnJpZGUKICAgICAgICovCiAgICAgIHJlYWR5KCkgewogICAgICAgIHRoaXMuX2Vuc3VyZUF0dHJpYnV0ZXMoKTsKICAgICAgICBzdXBlci5yZWFkeSgpOwogICAgICB9CgogICAgICAvKioKICAgICAgICogRW5zdXJlcyBhbiBlbGVtZW50IGhhcyByZXF1aXJlZCBhdHRyaWJ1dGVzLiBDYWxsZWQgd2hlbiB0aGUgZWxlbWVudAogICAgICAgKiBpcyBiZWluZyByZWFkaWVkIHZpYSBgcmVhZHlgLiBVc2VycyBzaG91bGQgb3ZlcnJpZGUgdG8gc2V0IHRoZQogICAgICAgKiBlbGVtZW50J3MgcmVxdWlyZWQgYXR0cmlidXRlcy4gVGhlIGltcGxlbWVudGF0aW9uIHNob3VsZCBiZSBzdXJlCiAgICAgICAqIHRvIGNoZWNrIGFuZCBub3Qgb3ZlcnJpZGUgZXhpc3RpbmcgYXR0cmlidXRlcyBhZGRlZCBieQogICAgICAgKiB0aGUgdXNlciBvZiB0aGUgZWxlbWVudC4gVHlwaWNhbGx5LCBzZXR0aW5nIGF0dHJpYnV0ZXMgc2hvdWxkIGJlIGxlZnQKICAgICAgICogdG8gdGhlIGVsZW1lbnQgdXNlciBhbmQgbm90IGRvbmUgaGVyZTsgcmVhc29uYWJsZSBleGNlcHRpb25zIGluY2x1ZGUKICAgICAgICogc2V0dGluZyBhcmlhIHJvbGVzIGFuZCBmb2N1c2FiaWxpdHkuCiAgICAgICAqIEBwcm90ZWN0ZWQKICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICovCiAgICAgIF9lbnN1cmVBdHRyaWJ1dGVzKCkge30KCiAgICAgIC8qKgogICAgICAgKiBBZGRzIGVsZW1lbnQgZXZlbnQgbGlzdGVuZXJzLiBDYWxsZWQgd2hlbiB0aGUgZWxlbWVudAogICAgICAgKiBpcyBiZWluZyByZWFkaWVkIHZpYSBgcmVhZHlgLiBVc2VycyBzaG91bGQgb3ZlcnJpZGUgdG8KICAgICAgICogYWRkIGFueSByZXF1aXJlZCBlbGVtZW50IGV2ZW50IGxpc3RlbmVycy4KICAgICAgICogSW4gcGVyZm9ybWFuY2UgY3JpdGljYWwgZWxlbWVudHMsIHRoZSB3b3JrIGRvbmUgaGVyZSBzaG91bGQgYmUga2VwdAogICAgICAgKiB0byBhIG1pbmltdW0gc2luY2UgaXQgaXMgZG9uZSBiZWZvcmUgdGhlIGVsZW1lbnQgaXMgcmVuZGVyZWQuIEluCiAgICAgICAqIHRoZXNlIGVsZW1lbnRzLCBjb25zaWRlciBhZGRpbmcgbGlzdGVuZXJzIGFzeW5jaHJvbm91c2x5IHNvIGFzIG5vdCB0bwogICAgICAgKiBibG9jayByZW5kZXIuCiAgICAgICAqIEBwcm90ZWN0ZWQKICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICovCiAgICAgIF9hcHBseUxpc3RlbmVycygpIHt9CgogICAgICAvKioKICAgICAgICogQ29udmVydHMgYSB0eXBlZCBKYXZhU2NyaXB0IHZhbHVlIHRvIGEgc3RyaW5nLgogICAgICAgKgogICAgICAgKiBOb3RlIHRoaXMgbWV0aG9kIGlzIHByb3ZpZGVkIGFzIGJhY2t3YXJkLWNvbXBhdGlibGUgbGVnYWN5IEFQSQogICAgICAgKiBvbmx5LiAgSXQgaXMgbm90IGRpcmVjdGx5IGNhbGxlZCBieSBhbnkgUG9seW1lciBmZWF0dXJlcy4gVG8gY3VzdG9taXplCiAgICAgICAqIGhvdyBwcm9wZXJ0aWVzIGFyZSBzZXJpYWxpemVkIHRvIGF0dHJpYnV0ZXMgZm9yIGF0dHJpYnV0ZSBiaW5kaW5ncyBhbmQKICAgICAgICogYHJlZmxlY3RUb0F0dHJpYnV0ZTogdHJ1ZWAgcHJvcGVydGllcyBhcyB3ZWxsIGFzIHRoaXMgbWV0aG9kLCBvdmVycmlkZQogICAgICAgKiB0aGUgYF9zZXJpYWxpemVWYWx1ZWAgbWV0aG9kIHByb3ZpZGVkIGJ5IGBQb2x5bWVyLlByb3BlcnR5QWNjZXNzb3JzYC4KICAgICAgICoKICAgICAgICogQHBhcmFtIHsqfSB2YWx1ZSBWYWx1ZSB0byBkZXNlcmlhbGl6ZQogICAgICAgKiBAcmV0dXJuIHtzdHJpbmcgfCB1bmRlZmluZWR9IFNlcmlhbGl6ZWQgdmFsdWUKICAgICAgICovCiAgICAgIHNlcmlhbGl6ZSh2YWx1ZSkgewogICAgICAgIHJldHVybiB0aGlzLl9zZXJpYWxpemVWYWx1ZSh2YWx1ZSk7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBDb252ZXJ0cyBhIHN0cmluZyB0byBhIHR5cGVkIEphdmFTY3JpcHQgdmFsdWUuCiAgICAgICAqCiAgICAgICAqIE5vdGUgdGhpcyBtZXRob2QgaXMgcHJvdmlkZWQgYXMgYmFja3dhcmQtY29tcGF0aWJsZSBsZWdhY3kgQVBJCiAgICAgICAqIG9ubHkuICBJdCBpcyBub3QgZGlyZWN0bHkgY2FsbGVkIGJ5IGFueSBQb2x5bWVyIGZlYXR1cmVzLiAgVG8gY3VzdG9taXplCiAgICAgICAqIGhvdyBhdHRyaWJ1dGVzIGFyZSBkZXNlcmlhbGl6ZWQgdG8gcHJvcGVydGllcyBmb3IgaW4KICAgICAgICogYGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFja2AsIG92ZXJyaWRlIGBfZGVzZXJpYWxpemVWYWx1ZWAgbWV0aG9kCiAgICAgICAqIHByb3ZpZGVkIGJ5IGBQb2x5bWVyLlByb3BlcnR5QWNjZXNzb3JzYC4KICAgICAgICoKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlIFN0cmluZyB0byBkZXNlcmlhbGl6ZQogICAgICAgKiBAcGFyYW0geyp9IHR5cGUgVHlwZSB0byBkZXNlcmlhbGl6ZSB0aGUgc3RyaW5nIHRvCiAgICAgICAqIEByZXR1cm4geyp9IFJldHVybnMgdGhlIGRlc2VyaWFsaXplZCB2YWx1ZSBpbiB0aGUgYHR5cGVgIGdpdmVuLgogICAgICAgKi8KICAgICAgZGVzZXJpYWxpemUodmFsdWUsIHR5cGUpIHsKICAgICAgICByZXR1cm4gdGhpcy5fZGVzZXJpYWxpemVWYWx1ZSh2YWx1ZSwgdHlwZSk7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBTZXJpYWxpemVzIGEgcHJvcGVydHkgdG8gaXRzIGFzc29jaWF0ZWQgYXR0cmlidXRlLgogICAgICAgKgogICAgICAgKiBOb3RlIHRoaXMgbWV0aG9kIGlzIHByb3ZpZGVkIGFzIGJhY2t3YXJkLWNvbXBhdGlibGUgbGVnYWN5IEFQSQogICAgICAgKiBvbmx5LiAgSXQgaXMgbm90IGRpcmVjdGx5IGNhbGxlZCBieSBhbnkgUG9seW1lciBmZWF0dXJlcy4KICAgICAgICoKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IFByb3BlcnR5IG5hbWUgdG8gcmVmbGVjdC4KICAgICAgICogQHBhcmFtIHtzdHJpbmc9fSBhdHRyaWJ1dGUgQXR0cmlidXRlIG5hbWUgdG8gcmVmbGVjdC4KICAgICAgICogQHBhcmFtIHsqPX0gdmFsdWUgUHJvcGVydHkgdmFsdWUgdG8gcmVmbGVjdC4KICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICovCiAgICAgIHJlZmxlY3RQcm9wZXJ0eVRvQXR0cmlidXRlKHByb3BlcnR5LCBhdHRyaWJ1dGUsIHZhbHVlKSB7CiAgICAgICAgdGhpcy5fcHJvcGVydHlUb0F0dHJpYnV0ZShwcm9wZXJ0eSwgYXR0cmlidXRlLCB2YWx1ZSk7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBTZXRzIGEgdHlwZWQgdmFsdWUgdG8gYW4gSFRNTCBhdHRyaWJ1dGUgb24gYSBub2RlLgogICAgICAgKgogICAgICAgKiBOb3RlIHRoaXMgbWV0aG9kIGlzIHByb3ZpZGVkIGFzIGJhY2t3YXJkLWNvbXBhdGlibGUgbGVnYWN5IEFQSQogICAgICAgKiBvbmx5LiAgSXQgaXMgbm90IGRpcmVjdGx5IGNhbGxlZCBieSBhbnkgUG9seW1lciBmZWF0dXJlcy4KICAgICAgICoKICAgICAgICogQHBhcmFtIHsqfSB2YWx1ZSBWYWx1ZSB0byBzZXJpYWxpemUuCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBhdHRyaWJ1dGUgQXR0cmlidXRlIG5hbWUgdG8gc2VyaWFsaXplIHRvLgogICAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IG5vZGUgRWxlbWVudCB0byBzZXQgYXR0cmlidXRlIHRvLgogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKi8KICAgICAgc2VyaWFsaXplVmFsdWVUb0F0dHJpYnV0ZSh2YWx1ZSwgYXR0cmlidXRlLCBub2RlKSB7CiAgICAgICAgdGhpcy5fdmFsdWVUb05vZGVBdHRyaWJ1dGUoLyoqIEB0eXBlIHtFbGVtZW50fSAqLyAobm9kZSB8fCB0aGlzKSwgdmFsdWUsIGF0dHJpYnV0ZSk7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBDb3BpZXMgb3duIHByb3BlcnRpZXMgKGluY2x1ZGluZyBhY2Nlc3NvciBkZXNjcmlwdG9ycykgZnJvbSBhIHNvdXJjZQogICAgICAgKiBvYmplY3QgdG8gYSB0YXJnZXQgb2JqZWN0LgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge09iamVjdH0gcHJvdG90eXBlIFRhcmdldCBvYmplY3QgdG8gY29weSBwcm9wZXJ0aWVzIHRvLgogICAgICAgKiBAcGFyYW0ge09iamVjdH0gYXBpIFNvdXJjZSBvYmplY3QgdG8gY29weSBwcm9wZXJ0aWVzIGZyb20uCiAgICAgICAqIEByZXR1cm4ge09iamVjdH0gcHJvdG90eXBlIG9iamVjdCB0aGF0IHdhcyBwYXNzZWQgYXMgZmlyc3QgYXJndW1lbnQuCiAgICAgICAqLwogICAgICBleHRlbmQocHJvdG90eXBlLCBhcGkpIHsKICAgICAgICBpZiAoIShwcm90b3R5cGUgJiYgYXBpKSkgewogICAgICAgICAgcmV0dXJuIHByb3RvdHlwZSB8fCBhcGk7CiAgICAgICAgfQogICAgICAgIGxldCBuJCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGFwaSk7CiAgICAgICAgZm9yIChsZXQgaT0wLCBuOyAoaTxuJC5sZW5ndGgpICYmIChuPW4kW2ldKTsgaSsrKSB7CiAgICAgICAgICBsZXQgcGQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGFwaSwgbik7CiAgICAgICAgICBpZiAocGQpIHsKICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3RvdHlwZSwgbiwgcGQpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gcHJvdG90eXBlOwogICAgICB9CgogICAgICAvKioKICAgICAgICogQ29waWVzIHByb3BzIGZyb20gYSBzb3VyY2Ugb2JqZWN0IHRvIGEgdGFyZ2V0IG9iamVjdC4KICAgICAgICoKICAgICAgICogTm90ZSwgdGhpcyBtZXRob2QgdXNlcyBhIHNpbXBsZSBgZm9yLi4uaW5gIHN0cmF0ZWd5IGZvciBlbnVtZXJhdGluZwogICAgICAgKiBwcm9wZXJ0aWVzLiAgVG8gZW5zdXJlIG9ubHkgYG93blByb3BlcnRpZXNgIGFyZSBjb3BpZWQgZnJvbSBzb3VyY2UKICAgICAgICogdG8gdGFyZ2V0IGFuZCB0aGF0IGFjY2Vzc29yIGltcGxlbWVudGF0aW9ucyBhcmUgY29waWVkLCB1c2UgYGV4dGVuZGAuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7IU9iamVjdH0gdGFyZ2V0IFRhcmdldCBvYmplY3QgdG8gY29weSBwcm9wZXJ0aWVzIHRvLgogICAgICAgKiBAcGFyYW0geyFPYmplY3R9IHNvdXJjZSBTb3VyY2Ugb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyBmcm9tLgogICAgICAgKiBAcmV0dXJuIHshT2JqZWN0fSBUYXJnZXQgb2JqZWN0IHRoYXQgd2FzIHBhc3NlZCBhcyBmaXJzdCBhcmd1bWVudC4KICAgICAgICovCiAgICAgIG1peGluKHRhcmdldCwgc291cmNlKSB7CiAgICAgICAgZm9yIChsZXQgaSBpbiBzb3VyY2UpIHsKICAgICAgICAgIHRhcmdldFtpXSA9IHNvdXJjZVtpXTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRhcmdldDsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIFNldHMgdGhlIHByb3RvdHlwZSBvZiBhbiBvYmplY3QuCiAgICAgICAqCiAgICAgICAqIE5vdGUgdGhpcyBtZXRob2QgaXMgcHJvdmlkZWQgYXMgYmFja3dhcmQtY29tcGF0aWJsZSBsZWdhY3kgQVBJCiAgICAgICAqIG9ubHkuICBJdCBpcyBub3QgZGlyZWN0bHkgY2FsbGVkIGJ5IGFueSBQb2x5bWVyIGZlYXR1cmVzLgogICAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3Qgb24gd2hpY2ggdG8gc2V0IHRoZSBwcm90b3R5cGUuCiAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBwcm90b3R5cGUgVGhlIHByb3RvdHlwZSB0aGF0IHdpbGwgYmUgc2V0IG9uIHRoZSBnaXZlbgogICAgICAgKiBgb2JqZWN0YC4KICAgICAgICogQHJldHVybiB7T2JqZWN0fSBSZXR1cm5zIHRoZSBnaXZlbiBgb2JqZWN0YCB3aXRoIGl0cyBwcm90b3R5cGUgc2V0CiAgICAgICAqIHRvIHRoZSBnaXZlbiBgcHJvdG90eXBlYCBvYmplY3QuCiAgICAgICAqLwogICAgICBjaGFpbk9iamVjdChvYmplY3QsIHByb3RvdHlwZSkgewogICAgICAgIGlmIChvYmplY3QgJiYgcHJvdG90eXBlICYmIG9iamVjdCAhPT0gcHJvdG90eXBlKSB7CiAgICAgICAgICBvYmplY3QuX19wcm90b19fID0gcHJvdG90eXBlOwogICAgICAgIH0KICAgICAgICByZXR1cm4gb2JqZWN0OwogICAgICB9CgogICAgICAvKiAqKioqIEJlZ2luIFRlbXBsYXRlICoqKiogKi8KCiAgICAgIC8qKgogICAgICAgKiBDYWxscyBgaW1wb3J0Tm9kZWAgb24gdGhlIGBjb250ZW50YCBvZiB0aGUgYHRlbXBsYXRlYCBzcGVjaWZpZWQgYW5kCiAgICAgICAqIHJldHVybnMgYSBkb2N1bWVudCBmcmFnbWVudCBjb250YWluaW5nIHRoZSBpbXBvcnRlZCBjb250ZW50LgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge0hUTUxUZW1wbGF0ZUVsZW1lbnR9IHRlbXBsYXRlIEhUTUwgdGVtcGxhdGUgZWxlbWVudCB0byBpbnN0YW5jZS4KICAgICAgICogQHJldHVybiB7IURvY3VtZW50RnJhZ21lbnR9IERvY3VtZW50IGZyYWdtZW50IGNvbnRhaW5pbmcgdGhlIGltcG9ydGVkCiAgICAgICAqICAgdGVtcGxhdGUgY29udGVudC4KICAgICAgKi8KICAgICAgaW5zdGFuY2VUZW1wbGF0ZSh0ZW1wbGF0ZSkgewogICAgICAgIGxldCBjb250ZW50ID0gdGhpcy5jb25zdHJ1Y3Rvci5fY29udGVudEZvclRlbXBsYXRlKHRlbXBsYXRlKTsKICAgICAgICBsZXQgZG9tID0gLyoqIEB0eXBlIHshRG9jdW1lbnRGcmFnbWVudH0gKi8KICAgICAgICAgIChkb2N1bWVudC5pbXBvcnROb2RlKGNvbnRlbnQsIHRydWUpKTsKICAgICAgICByZXR1cm4gZG9tOwogICAgICB9CgogICAgICAvKiAqKioqIEJlZ2luIEV2ZW50cyAqKioqICovCgoKCiAgICAgIC8qKgogICAgICAgKiBEaXNwYXRjaGVzIGEgY3VzdG9tIGV2ZW50IHdpdGggYW4gb3B0aW9uYWwgZGV0YWlsIHZhbHVlLgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gdHlwZSBOYW1lIG9mIGV2ZW50IHR5cGUuCiAgICAgICAqIEBwYXJhbSB7Kj19IGRldGFpbCBEZXRhaWwgdmFsdWUgY29udGFpbmluZyBldmVudC1zcGVjaWZpYwogICAgICAgKiAgIHBheWxvYWQuCiAgICAgICAqIEBwYXJhbSB7eyBidWJibGVzOiAoYm9vbGVhbnx1bmRlZmluZWQpLCBjYW5jZWxhYmxlOiAoYm9vbGVhbnx1bmRlZmluZWQpLCBjb21wb3NlZDogKGJvb2xlYW58dW5kZWZpbmVkKSB9PX0KICAgICAgICogIG9wdGlvbnMgT2JqZWN0IHNwZWNpZnlpbmcgb3B0aW9ucy4gIFRoZXNlIG1heSBpbmNsdWRlOgogICAgICAgKiAgYGJ1YmJsZXNgIChib29sZWFuLCBkZWZhdWx0cyB0byBgdHJ1ZWApLAogICAgICAgKiAgYGNhbmNlbGFibGVgIChib29sZWFuLCBkZWZhdWx0cyB0byBmYWxzZSksIGFuZAogICAgICAgKiAgYG5vZGVgIG9uIHdoaWNoIHRvIGZpcmUgdGhlIGV2ZW50IChIVE1MRWxlbWVudCwgZGVmYXVsdHMgdG8gYHRoaXNgKS4KICAgICAgICogQHJldHVybiB7IUV2ZW50fSBUaGUgbmV3IGV2ZW50IHRoYXQgd2FzIGZpcmVkLgogICAgICAgKi8KICAgICAgZmlyZSh0eXBlLCBkZXRhaWwsIG9wdGlvbnMpIHsKICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTsKICAgICAgICBkZXRhaWwgPSAoZGV0YWlsID09PSBudWxsIHx8IGRldGFpbCA9PT0gdW5kZWZpbmVkKSA/IHt9IDogZGV0YWlsOwogICAgICAgIGxldCBldmVudCA9IG5ldyBFdmVudCh0eXBlLCB7CiAgICAgICAgICBidWJibGVzOiBvcHRpb25zLmJ1YmJsZXMgPT09IHVuZGVmaW5lZCA/IHRydWUgOiBvcHRpb25zLmJ1YmJsZXMsCiAgICAgICAgICBjYW5jZWxhYmxlOiBCb29sZWFuKG9wdGlvbnMuY2FuY2VsYWJsZSksCiAgICAgICAgICBjb21wb3NlZDogb3B0aW9ucy5jb21wb3NlZCA9PT0gdW5kZWZpbmVkID8gdHJ1ZTogb3B0aW9ucy5jb21wb3NlZAogICAgICAgIH0pOwogICAgICAgIGV2ZW50LmRldGFpbCA9IGRldGFpbDsKICAgICAgICBsZXQgbm9kZSA9IG9wdGlvbnMubm9kZSB8fCB0aGlzOwogICAgICAgIG5vZGUuZGlzcGF0Y2hFdmVudChldmVudCk7CiAgICAgICAgcmV0dXJuIGV2ZW50OwogICAgICB9CgogICAgICAvKioKICAgICAgICogQ29udmVuaWVuY2UgbWV0aG9kIHRvIGFkZCBhbiBldmVudCBsaXN0ZW5lciBvbiBhIGdpdmVuIGVsZW1lbnQsCiAgICAgICAqIGxhdGUgYm91bmQgdG8gYSBuYW1lZCBtZXRob2Qgb24gdGhpcyBlbGVtZW50LgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IG5vZGUgRWxlbWVudCB0byBhZGQgZXZlbnQgbGlzdGVuZXIgdG8uCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudE5hbWUgTmFtZSBvZiBldmVudCB0byBsaXN0ZW4gZm9yLgogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gbWV0aG9kTmFtZSBOYW1lIG9mIGhhbmRsZXIgbWV0aG9kIG9uIGB0aGlzYCB0byBjYWxsLgogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKi8KICAgICAgbGlzdGVuKG5vZGUsIGV2ZW50TmFtZSwgbWV0aG9kTmFtZSkgewogICAgICAgIG5vZGUgPSAvKiogQHR5cGUgeyFFbGVtZW50fSAqLyAobm9kZSB8fCB0aGlzKTsKICAgICAgICBsZXQgaGJsID0gdGhpcy5fX2JvdW5kTGlzdGVuZXJzIHx8CiAgICAgICAgICAodGhpcy5fX2JvdW5kTGlzdGVuZXJzID0gbmV3IFdlYWtNYXAoKSk7CiAgICAgICAgbGV0IGJsID0gaGJsLmdldChub2RlKTsKICAgICAgICBpZiAoIWJsKSB7CiAgICAgICAgICBibCA9IHt9OwogICAgICAgICAgaGJsLnNldChub2RlLCBibCk7CiAgICAgICAgfQogICAgICAgIGxldCBrZXkgPSBldmVudE5hbWUgKyBtZXRob2ROYW1lOwogICAgICAgIGlmICghYmxba2V5XSkgewogICAgICAgICAgYmxba2V5XSA9IHRoaXMuX2FkZE1ldGhvZEV2ZW50TGlzdGVuZXJUb05vZGUoCiAgICAgICAgICAgIG5vZGUsIGV2ZW50TmFtZSwgbWV0aG9kTmFtZSwgdGhpcyk7CiAgICAgICAgfQogICAgICB9CgogICAgICAvKioKICAgICAgICogQ29udmVuaWVuY2UgbWV0aG9kIHRvIHJlbW92ZSBhbiBldmVudCBsaXN0ZW5lciBmcm9tIGEgZ2l2ZW4gZWxlbWVudCwKICAgICAgICogbGF0ZSBib3VuZCB0byBhIG5hbWVkIG1ldGhvZCBvbiB0aGlzIGVsZW1lbnQuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7RWxlbWVudH0gbm9kZSBFbGVtZW50IHRvIHJlbW92ZSBldmVudCBsaXN0ZW5lciBmcm9tLgogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnROYW1lIE5hbWUgb2YgZXZlbnQgdG8gc3RvcCBsaXN0ZW5pbmcgdG8uCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBtZXRob2ROYW1lIE5hbWUgb2YgaGFuZGxlciBtZXRob2Qgb24gYHRoaXNgIHRvIG5vdCBjYWxsCiAgICAgICBhbnltb3JlLgogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKi8KICAgICAgdW5saXN0ZW4obm9kZSwgZXZlbnROYW1lLCBtZXRob2ROYW1lKSB7CiAgICAgICAgbm9kZSA9IC8qKiBAdHlwZSB7IUVsZW1lbnR9ICovIChub2RlIHx8IHRoaXMpOwogICAgICAgIGxldCBibCA9IHRoaXMuX19ib3VuZExpc3RlbmVycyAmJiB0aGlzLl9fYm91bmRMaXN0ZW5lcnMuZ2V0KG5vZGUpOwogICAgICAgIGxldCBrZXkgPSBldmVudE5hbWUgKyBtZXRob2ROYW1lOwogICAgICAgIGxldCBoYW5kbGVyID0gYmwgJiYgYmxba2V5XTsKICAgICAgICBpZiAoaGFuZGxlcikgewogICAgICAgICAgdGhpcy5fcmVtb3ZlRXZlbnRMaXN0ZW5lckZyb21Ob2RlKG5vZGUsIGV2ZW50TmFtZSwgaGFuZGxlcik7CiAgICAgICAgICBibFtrZXldID0gbnVsbDsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBPdmVycmlkZSBzY3JvbGxpbmcgYmVoYXZpb3IgdG8gYWxsIGRpcmVjdGlvbiwgb25lIGRpcmVjdGlvbiwgb3Igbm9uZS4KICAgICAgICoKICAgICAgICogVmFsaWQgc2Nyb2xsIGRpcmVjdGlvbnM6CiAgICAgICAqICAgLSAnYWxsJzogc2Nyb2xsIGluIGFueSBkaXJlY3Rpb24KICAgICAgICogICAtICd4Jzogc2Nyb2xsIG9ubHkgaW4gdGhlICd4JyBkaXJlY3Rpb24KICAgICAgICogICAtICd5Jzogc2Nyb2xsIG9ubHkgaW4gdGhlICd5JyBkaXJlY3Rpb24KICAgICAgICogICAtICdub25lJzogZGlzYWJsZSBzY3JvbGxpbmcgZm9yIHRoaXMgbm9kZQogICAgICAgKgogICAgICAgKiBAcGFyYW0ge3N0cmluZz19IGRpcmVjdGlvbiBEaXJlY3Rpb24gdG8gYWxsb3cgc2Nyb2xsaW5nCiAgICAgICAqIERlZmF1bHRzIHRvIGBhbGxgLgogICAgICAgKiBAcGFyYW0ge0VsZW1lbnQ9fSBub2RlIEVsZW1lbnQgdG8gYXBwbHkgc2Nyb2xsIGRpcmVjdGlvbiBzZXR0aW5nLgogICAgICAgKiBEZWZhdWx0cyB0byBgdGhpc2AuCiAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAqLwogICAgICBzZXRTY3JvbGxEaXJlY3Rpb24oZGlyZWN0aW9uLCBub2RlKSB7CiAgICAgICAgUG9seW1lci5HZXN0dXJlcy5zZXRUb3VjaEFjdGlvbigvKiogQHR5cGUge0VsZW1lbnR9ICovIChub2RlIHx8IHRoaXMpLCBESVJFQ1RJT05fTUFQW2RpcmVjdGlvbl0gfHwgJ2F1dG8nKTsKICAgICAgfQogICAgICAvKiAqKioqIEVuZCBFdmVudHMgKioqKiAqLwoKICAgICAgLyoqCiAgICAgICAqIENvbnZlbmllbmNlIG1ldGhvZCB0byBydW4gYHF1ZXJ5U2VsZWN0b3JgIG9uIHRoaXMgbG9jYWwgRE9NIHNjb3BlLgogICAgICAgKgogICAgICAgKiBUaGlzIGZ1bmN0aW9uIGNhbGxzIGBQb2x5bWVyLmRvbSh0aGlzLnJvb3QpLnF1ZXJ5U2VsZWN0b3Ioc2xjdHIpYC4KICAgICAgICoKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHNsY3RyIFNlbGVjdG9yIHRvIHJ1biBvbiB0aGlzIGxvY2FsIERPTSBzY29wZQogICAgICAgKiBAcmV0dXJuIHtFbGVtZW50fSBFbGVtZW50IGZvdW5kIGJ5IHRoZSBzZWxlY3Rvciwgb3IgbnVsbCBpZiBub3QgZm91bmQuCiAgICAgICAqLwogICAgICAkJChzbGN0cikgewogICAgICAgIHJldHVybiB0aGlzLnJvb3QucXVlcnlTZWxlY3RvcihzbGN0cik7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBSZXR1cm4gdGhlIGVsZW1lbnQgd2hvc2UgbG9jYWwgZG9tIHdpdGhpbiB3aGljaCB0aGlzIGVsZW1lbnQKICAgICAgICogaXMgY29udGFpbmVkLiBUaGlzIGlzIGEgc2hvcnRoYW5kIGZvcgogICAgICAgKiBgdGhpcy5nZXRSb290Tm9kZSgpLmhvc3RgLgogICAgICAgKiBAdGhpcyB7RWxlbWVudH0KICAgICAgICovCiAgICAgIGdldCBkb21Ib3N0KCkgewogICAgICAgIGxldCByb290ID0gdGhpcy5nZXRSb290Tm9kZSgpOwogICAgICAgIHJldHVybiAocm9vdCBpbnN0YW5jZW9mIERvY3VtZW50RnJhZ21lbnQpID8gLyoqIEB0eXBlIHtTaGFkb3dSb290fSAqLyAocm9vdCkuaG9zdCA6IHJvb3Q7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBGb3JjZSB0aGlzIGVsZW1lbnQgdG8gZGlzdHJpYnV0ZSBpdHMgY2hpbGRyZW4gdG8gaXRzIGxvY2FsIGRvbS4KICAgICAgICogVGhpcyBzaG91bGQgbm90IGJlIG5lY2Vzc2FyeSBhcyBvZiBQb2x5bWVyIDIuMC4yIGFuZCBpcyBwcm92aWRlZCBvbmx5CiAgICAgICAqIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4KICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICovCiAgICAgIGRpc3RyaWJ1dGVDb250ZW50KCkgewogICAgICAgIGlmICh3aW5kb3cuU2hhZHlET00gJiYgdGhpcy5zaGFkb3dSb290KSB7CiAgICAgICAgICBTaGFkeURPTS5mbHVzaCgpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIFJldHVybnMgYSBsaXN0IG9mIG5vZGVzIHRoYXQgYXJlIHRoZSBlZmZlY3RpdmUgY2hpbGROb2Rlcy4gVGhlIGVmZmVjdGl2ZQogICAgICAgKiBjaGlsZE5vZGVzIGxpc3QgaXMgdGhlIHNhbWUgYXMgdGhlIGVsZW1lbnQncyBjaGlsZE5vZGVzIGV4Y2VwdCB0aGF0CiAgICAgICAqIGFueSBgPGNvbnRlbnQ+YCBlbGVtZW50cyBhcmUgcmVwbGFjZWQgd2l0aCB0aGUgbGlzdCBvZiBub2RlcyBkaXN0cmlidXRlZAogICAgICAgKiB0byB0aGUgYDxjb250ZW50PmAsIHRoZSByZXN1bHQgb2YgaXRzIGBnZXREaXN0cmlidXRlZE5vZGVzYCBtZXRob2QuCiAgICAgICAqIEByZXR1cm4geyFBcnJheTwhTm9kZT59IExpc3Qgb2YgZWZmZWN0aXZlIGNoaWxkIG5vZGVzLgogICAgICAgKiBAc3VwcHJlc3Mge2ludmFsaWRDYXN0c30gTGVnYWN5RWxlbWVudE1peGluIG11c3QgYmUgYXBwbGllZCB0byBhbiBIVE1MRWxlbWVudAogICAgICAgKi8KICAgICAgZ2V0RWZmZWN0aXZlQ2hpbGROb2RlcygpIHsKICAgICAgICBjb25zdCB0aGlzRWwgPSAvKiogQHR5cGUge0VsZW1lbnR9ICovICh0aGlzKTsKICAgICAgICBjb25zdCBkb21BcGkgPSAvKiogQHR5cGUge1BvbHltZXIuRG9tQXBpfSAqLyhQb2x5bWVyLmRvbSh0aGlzRWwpKTsKICAgICAgICByZXR1cm4gZG9tQXBpLmdldEVmZmVjdGl2ZUNoaWxkTm9kZXMoKTsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIFJldHVybnMgYSBsaXN0IG9mIG5vZGVzIGRpc3RyaWJ1dGVkIHdpdGhpbiB0aGlzIGVsZW1lbnQgdGhhdCBtYXRjaAogICAgICAgKiBgc2VsZWN0b3JgLiBUaGVzZSBjYW4gYmUgZG9tIGNoaWxkcmVuIG9yIGVsZW1lbnRzIGRpc3RyaWJ1dGVkIHRvCiAgICAgICAqIGNoaWxkcmVuIHRoYXQgYXJlIGluc2VydGlvbiBwb2ludHMuCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzZWxlY3RvciBTZWxlY3RvciB0byBydW4uCiAgICAgICAqIEByZXR1cm4geyFBcnJheTwhTm9kZT59IExpc3Qgb2YgZGlzdHJpYnV0ZWQgZWxlbWVudHMgdGhhdCBtYXRjaCBzZWxlY3Rvci4KICAgICAgICogQHN1cHByZXNzIHtpbnZhbGlkQ2FzdHN9IExlZ2FjeUVsZW1lbnRNaXhpbiBtdXN0IGJlIGFwcGxpZWQgdG8gYW4gSFRNTEVsZW1lbnQKICAgICAgICovCiAgICAgIHF1ZXJ5RGlzdHJpYnV0ZWRFbGVtZW50cyhzZWxlY3RvcikgewogICAgICAgIGNvbnN0IHRoaXNFbCA9IC8qKiBAdHlwZSB7RWxlbWVudH0gKi8gKHRoaXMpOwogICAgICAgIGNvbnN0IGRvbUFwaSA9IC8qKiBAdHlwZSB7UG9seW1lci5Eb21BcGl9ICovKFBvbHltZXIuZG9tKHRoaXNFbCkpOwogICAgICAgIHJldHVybiBkb21BcGkucXVlcnlEaXN0cmlidXRlZEVsZW1lbnRzKHNlbGVjdG9yKTsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIFJldHVybnMgYSBsaXN0IG9mIGVsZW1lbnRzIHRoYXQgYXJlIHRoZSBlZmZlY3RpdmUgY2hpbGRyZW4uIFRoZSBlZmZlY3RpdmUKICAgICAgICogY2hpbGRyZW4gbGlzdCBpcyB0aGUgc2FtZSBhcyB0aGUgZWxlbWVudCdzIGNoaWxkcmVuIGV4Y2VwdCB0aGF0CiAgICAgICAqIGFueSBgPGNvbnRlbnQ+YCBlbGVtZW50cyBhcmUgcmVwbGFjZWQgd2l0aCB0aGUgbGlzdCBvZiBlbGVtZW50cwogICAgICAgKiBkaXN0cmlidXRlZCB0byB0aGUgYDxjb250ZW50PmAuCiAgICAgICAqCiAgICAgICAqIEByZXR1cm4geyFBcnJheTwhTm9kZT59IExpc3Qgb2YgZWZmZWN0aXZlIGNoaWxkcmVuLgogICAgICAgKi8KICAgICAgZ2V0RWZmZWN0aXZlQ2hpbGRyZW4oKSB7CiAgICAgICAgbGV0IGxpc3QgPSB0aGlzLmdldEVmZmVjdGl2ZUNoaWxkTm9kZXMoKTsKICAgICAgICByZXR1cm4gbGlzdC5maWx0ZXIoZnVuY3Rpb24oLyoqIEB0eXBlIHshTm9kZX0gKi8gbikgewogICAgICAgICAgcmV0dXJuIChuLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSk7CiAgICAgICAgfSk7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBSZXR1cm5zIGEgc3RyaW5nIG9mIHRleHQgY29udGVudCB0aGF0IGlzIHRoZSBjb25jYXRlbmF0aW9uIG9mIHRoZQogICAgICAgKiB0ZXh0IGNvbnRlbnQncyBvZiB0aGUgZWxlbWVudCdzIGVmZmVjdGl2ZSBjaGlsZE5vZGVzICh0aGUgZWxlbWVudHMKICAgICAgICogcmV0dXJuZWQgYnkgPGEgaHJlZj0iI2dldEVmZmVjdGl2ZUNoaWxkTm9kZXM+Z2V0RWZmZWN0aXZlQ2hpbGROb2RlczwvYT4uCiAgICAgICAqCiAgICAgICAqIEByZXR1cm4ge3N0cmluZ30gTGlzdCBvZiBlZmZlY3RpdmUgY2hpbGRyZW4uCiAgICAgICAqLwogICAgICBnZXRFZmZlY3RpdmVUZXh0Q29udGVudCgpIHsKICAgICAgICBsZXQgY24gPSB0aGlzLmdldEVmZmVjdGl2ZUNoaWxkTm9kZXMoKTsKICAgICAgICBsZXQgdGMgPSBbXTsKICAgICAgICBmb3IgKGxldCBpPTAsIGM7IChjID0gY25baV0pOyBpKyspIHsKICAgICAgICAgIGlmIChjLm5vZGVUeXBlICE9PSBOb2RlLkNPTU1FTlRfTk9ERSkgewogICAgICAgICAgICB0Yy5wdXNoKGMudGV4dENvbnRlbnQpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gdGMuam9pbignJyk7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBSZXR1cm5zIHRoZSBmaXJzdCBlZmZlY3RpdmUgY2hpbGROb2RlIHdpdGhpbiB0aGlzIGVsZW1lbnQgdGhhdAogICAgICAgKiBtYXRjaCBgc2VsZWN0b3JgLiBUaGVzZSBjYW4gYmUgZG9tIGNoaWxkIG5vZGVzIG9yIGVsZW1lbnRzIGRpc3RyaWJ1dGVkCiAgICAgICAqIHRvIGNoaWxkcmVuIHRoYXQgYXJlIGluc2VydGlvbiBwb2ludHMuCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzZWxlY3RvciBTZWxlY3RvciB0byBydW4uCiAgICAgICAqIEByZXR1cm4ge05vZGV9IEZpcnN0IGVmZmVjdGl2ZSBjaGlsZCBub2RlIHRoYXQgbWF0Y2hlcyBzZWxlY3Rvci4KICAgICAgICovCiAgICAgIHF1ZXJ5RWZmZWN0aXZlQ2hpbGRyZW4oc2VsZWN0b3IpIHsKICAgICAgICBsZXQgZSQgPSB0aGlzLnF1ZXJ5RGlzdHJpYnV0ZWRFbGVtZW50cyhzZWxlY3Rvcik7CiAgICAgICAgcmV0dXJuIGUkICYmIGUkWzBdOwogICAgICB9CgogICAgICAvKioKICAgICAgICogUmV0dXJucyBhIGxpc3Qgb2YgZWZmZWN0aXZlIGNoaWxkTm9kZXMgd2l0aGluIHRoaXMgZWxlbWVudCB0aGF0CiAgICAgICAqIG1hdGNoIGBzZWxlY3RvcmAuIFRoZXNlIGNhbiBiZSBkb20gY2hpbGQgbm9kZXMgb3IgZWxlbWVudHMgZGlzdHJpYnV0ZWQKICAgICAgICogdG8gY2hpbGRyZW4gdGhhdCBhcmUgaW5zZXJ0aW9uIHBvaW50cy4KICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHNlbGVjdG9yIFNlbGVjdG9yIHRvIHJ1bi4KICAgICAgICogQHJldHVybiB7IUFycmF5PCFOb2RlPn0gTGlzdCBvZiBlZmZlY3RpdmUgY2hpbGQgbm9kZXMgdGhhdCBtYXRjaCBzZWxlY3Rvci4KICAgICAgICovCiAgICAgIHF1ZXJ5QWxsRWZmZWN0aXZlQ2hpbGRyZW4oc2VsZWN0b3IpIHsKICAgICAgICByZXR1cm4gdGhpcy5xdWVyeURpc3RyaWJ1dGVkRWxlbWVudHMoc2VsZWN0b3IpOwogICAgICB9CgogICAgICAvKioKICAgICAgICogUmV0dXJucyBhIGxpc3Qgb2Ygbm9kZXMgZGlzdHJpYnV0ZWQgdG8gdGhpcyBlbGVtZW50J3MgYDxzbG90PmAuCiAgICAgICAqCiAgICAgICAqIElmIHRoaXMgZWxlbWVudCBjb250YWlucyBtb3JlIHRoYW4gb25lIGA8c2xvdD5gIGluIGl0cyBsb2NhbCBET00sCiAgICAgICAqIGFuIG9wdGlvbmFsIHNlbGVjdG9yIG1heSBiZSBwYXNzZWQgdG8gY2hvb3NlIHRoZSBkZXNpcmVkIGNvbnRlbnQuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nPX0gc2xjdHIgQ1NTIHNlbGVjdG9yIHRvIGNob29zZSB0aGUgZGVzaXJlZAogICAgICAgKiAgIGA8c2xvdD5gLiAgRGVmYXVsdHMgdG8gYGNvbnRlbnRgLgogICAgICAgKiBAcmV0dXJuIHshQXJyYXk8IU5vZGU+fSBMaXN0IG9mIGRpc3RyaWJ1dGVkIG5vZGVzIGZvciB0aGUgYDxzbG90PmAuCiAgICAgICAqLwogICAgICBnZXRDb250ZW50Q2hpbGROb2RlcyhzbGN0cikgewogICAgICAgIGxldCBjb250ZW50ID0gdGhpcy5yb290LnF1ZXJ5U2VsZWN0b3Ioc2xjdHIgfHwgJ3Nsb3QnKTsKICAgICAgICByZXR1cm4gY29udGVudCA/IC8qKiBAdHlwZSB7UG9seW1lci5Eb21BcGl9ICovKFBvbHltZXIuZG9tKGNvbnRlbnQpKS5nZXREaXN0cmlidXRlZE5vZGVzKCkgOiBbXTsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIFJldHVybnMgYSBsaXN0IG9mIGVsZW1lbnQgY2hpbGRyZW4gZGlzdHJpYnV0ZWQgdG8gdGhpcyBlbGVtZW50J3MKICAgICAgICogYDxzbG90PmAuCiAgICAgICAqCiAgICAgICAqIElmIHRoaXMgZWxlbWVudCBjb250YWlucyBtb3JlIHRoYW4gb25lIGA8c2xvdD5gIGluIGl0cwogICAgICAgKiBsb2NhbCBET00sIGFuIG9wdGlvbmFsIHNlbGVjdG9yIG1heSBiZSBwYXNzZWQgdG8gY2hvb3NlIHRoZSBkZXNpcmVkCiAgICAgICAqIGNvbnRlbnQuICBUaGlzIG1ldGhvZCBkaWZmZXJzIGZyb20gYGdldENvbnRlbnRDaGlsZE5vZGVzYCBpbiB0aGF0IG9ubHkKICAgICAgICogZWxlbWVudHMgYXJlIHJldHVybmVkLgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge3N0cmluZz19IHNsY3RyIENTUyBzZWxlY3RvciB0byBjaG9vc2UgdGhlIGRlc2lyZWQKICAgICAgICogICBgPGNvbnRlbnQ+YC4gIERlZmF1bHRzIHRvIGBjb250ZW50YC4KICAgICAgICogQHJldHVybiB7IUFycmF5PCFIVE1MRWxlbWVudD59IExpc3Qgb2YgZGlzdHJpYnV0ZWQgbm9kZXMgZm9yIHRoZQogICAgICAgKiAgIGA8c2xvdD5gLgogICAgICAgKiBAc3VwcHJlc3Mge2ludmFsaWRDYXN0c30KICAgICAgICovCiAgICAgIGdldENvbnRlbnRDaGlsZHJlbihzbGN0cikgewogICAgICAgIGxldCBjaGlsZHJlbiA9IC8qKiBAdHlwZSB7IUFycmF5PCFIVE1MRWxlbWVudD59ICovKHRoaXMuZ2V0Q29udGVudENoaWxkTm9kZXMoc2xjdHIpLmZpbHRlcihmdW5jdGlvbihuKSB7CiAgICAgICAgICByZXR1cm4gKG4ubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFKTsKICAgICAgICB9KSk7CiAgICAgICAgcmV0dXJuIGNoaWxkcmVuOwogICAgICB9CgogICAgICAvKioKICAgICAgICogQ2hlY2tzIHdoZXRoZXIgYW4gZWxlbWVudCBpcyBpbiB0aGlzIGVsZW1lbnQncyBsaWdodCBET00gdHJlZS4KICAgICAgICoKICAgICAgICogQHBhcmFtIHs/Tm9kZX0gbm9kZSBUaGUgZWxlbWVudCB0byBiZSBjaGVja2VkLgogICAgICAgKiBAcmV0dXJuIHtib29sZWFufSB0cnVlIGlmIG5vZGUgaXMgaW4gdGhpcyBlbGVtZW50J3MgbGlnaHQgRE9NIHRyZWUuCiAgICAgICAqIEBzdXBwcmVzcyB7aW52YWxpZENhc3RzfSBMZWdhY3lFbGVtZW50TWl4aW4gbXVzdCBiZSBhcHBsaWVkIHRvIGFuIEhUTUxFbGVtZW50CiAgICAgICAqLwogICAgICBpc0xpZ2h0RGVzY2VuZGFudChub2RlKSB7CiAgICAgICAgY29uc3QgdGhpc05vZGUgPSAvKiogQHR5cGUge05vZGV9ICovICh0aGlzKTsKICAgICAgICByZXR1cm4gdGhpc05vZGUgIT09IG5vZGUgJiYgdGhpc05vZGUuY29udGFpbnMobm9kZSkgJiYKICAgICAgICAgIHRoaXNOb2RlLmdldFJvb3ROb2RlKCkgPT09IG5vZGUuZ2V0Um9vdE5vZGUoKTsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIENoZWNrcyB3aGV0aGVyIGFuIGVsZW1lbnQgaXMgaW4gdGhpcyBlbGVtZW50J3MgbG9jYWwgRE9NIHRyZWUuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7IUVsZW1lbnR9IG5vZGUgVGhlIGVsZW1lbnQgdG8gYmUgY2hlY2tlZC4KICAgICAgICogQHJldHVybiB7Ym9vbGVhbn0gdHJ1ZSBpZiBub2RlIGlzIGluIHRoaXMgZWxlbWVudCdzIGxvY2FsIERPTSB0cmVlLgogICAgICAgKi8KICAgICAgaXNMb2NhbERlc2NlbmRhbnQobm9kZSkgewogICAgICAgIHJldHVybiB0aGlzLnJvb3QgPT09IG5vZGUuZ2V0Um9vdE5vZGUoKTsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIE5vLW9wIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4gVGhpcyBzaG91bGQgbm93IGJlIGhhbmRsZWQgYnkKICAgICAgICogU2hhZHlDc3MgbGlicmFyeS4KICAgICAgICogQHBhcmFtICB7Kn0gY29udGFpbmVyIFVudXNlZAogICAgICAgKiBAcGFyYW0gIHsqfSBzaG91bGRPYnNlcnZlIFVudXNlZAogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKi8KICAgICAgc2NvcGVTdWJ0cmVlKGNvbnRhaW5lciwgc2hvdWxkT2JzZXJ2ZSkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzCiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBSZXR1cm5zIHRoZSBjb21wdXRlZCBzdHlsZSB2YWx1ZSBmb3IgdGhlIGdpdmVuIHByb3BlcnR5LgogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkgVGhlIGNzcyBwcm9wZXJ0eSBuYW1lLgogICAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IFJldHVybnMgdGhlIGNvbXB1dGVkIGNzcyBwcm9wZXJ0eSB2YWx1ZSBmb3IgdGhlIGdpdmVuCiAgICAgICAqIGBwcm9wZXJ0eWAuCiAgICAgICAqIEBzdXBwcmVzcyB7aW52YWxpZENhc3RzfSBMZWdhY3lFbGVtZW50TWl4aW4gbXVzdCBiZSBhcHBsaWVkIHRvIGFuIEhUTUxFbGVtZW50CiAgICAgICAqLwogICAgICBnZXRDb21wdXRlZFN0eWxlVmFsdWUocHJvcGVydHkpIHsKICAgICAgICByZXR1cm4gc3R5bGVJbnRlcmZhY2UuZ2V0Q29tcHV0ZWRTdHlsZVZhbHVlKC8qKiBAdHlwZSB7IUVsZW1lbnR9ICovKHRoaXMpLCBwcm9wZXJ0eSk7CiAgICAgIH0KCiAgICAgIC8vIGRlYm91bmNlCgogICAgICAvKioKICAgICAgICogQ2FsbCBgZGVib3VuY2VgIHRvIGNvbGxhcHNlIG11bHRpcGxlIHJlcXVlc3RzIGZvciBhIG5hbWVkIHRhc2sgaW50bwogICAgICAgKiBvbmUgaW52b2NhdGlvbiB3aGljaCBpcyBtYWRlIGFmdGVyIHRoZSB3YWl0IHRpbWUgaGFzIGVsYXBzZWQgd2l0aAogICAgICAgKiBubyBuZXcgcmVxdWVzdC4gIElmIG5vIHdhaXQgdGltZSBpcyBnaXZlbiwgdGhlIGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkCiAgICAgICAqIGF0IG1pY3JvdGFzayB0aW1pbmcgKGd1YXJhbnRlZWQgYmVmb3JlIHBhaW50KS4KICAgICAgICoKICAgICAgICogICAgIGRlYm91bmNlZENsaWNrQWN0aW9uKGUpIHsKICAgICAgICogICAgICAgLy8gd2lsbCBub3QgY2FsbCBgcHJvY2Vzc0NsaWNrYCBtb3JlIHRoYW4gb25jZSBwZXIgMTAwbXMKICAgICAgICogICAgICAgdGhpcy5kZWJvdW5jZSgnY2xpY2snLCBmdW5jdGlvbigpIHsKICAgICAgICogICAgICAgIHRoaXMucHJvY2Vzc0NsaWNrKCk7CiAgICAgICAqICAgICAgIH0gMTAwKTsKICAgICAgICogICAgIH0KICAgICAgICoKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IGpvYk5hbWUgU3RyaW5nIHRvIGlkZW50aWZ5IHRoZSBkZWJvdW5jZSBqb2IuCiAgICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24oKTp2b2lkfSBjYWxsYmFjayBGdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCAod2l0aCBgdGhpc2AKICAgICAgICogICBjb250ZXh0KSB3aGVuIHRoZSB3YWl0IHRpbWUgZWxhcHNlcy4KICAgICAgICogQHBhcmFtIHtudW1iZXJ9IHdhaXQgT3B0aW9uYWwgd2FpdCB0aW1lIGluIG1pbGxpc2Vjb25kcyAobXMpIGFmdGVyIHRoZQogICAgICAgKiAgIGxhc3Qgc2lnbmFsIHRoYXQgbXVzdCBlbGFwc2UgYmVmb3JlIGludm9raW5nIGBjYWxsYmFja2AKICAgICAgICogQHJldHVybiB7IU9iamVjdH0gUmV0dXJucyBhIGRlYm91bmNlciBvYmplY3Qgb24gd2hpY2ggZXhpc3RzIHRoZQogICAgICAgKiBmb2xsb3dpbmcgbWV0aG9kczogYGlzQWN0aXZlKClgIHJldHVybnMgdHJ1ZSBpZiB0aGUgZGVib3VuY2VyIGlzCiAgICAgICAqIGFjdGl2ZTsgYGNhbmNlbCgpYCBjYW5jZWxzIHRoZSBkZWJvdW5jZXIgaWYgaXQgaXMgYWN0aXZlOwogICAgICAgKiBgZmx1c2goKWAgaW1tZWRpYXRlbHkgaW52b2tlcyB0aGUgZGVib3VuY2VkIGNhbGxiYWNrIGlmIHRoZSBkZWJvdW5jZXIKICAgICAgICogaXMgYWN0aXZlLgogICAgICAgKi8KICAgICAgZGVib3VuY2Uoam9iTmFtZSwgY2FsbGJhY2ssIHdhaXQpIHsKICAgICAgICB0aGlzLl9kZWJvdW5jZXJzID0gdGhpcy5fZGVib3VuY2VycyB8fCB7fTsKICAgICAgICByZXR1cm4gdGhpcy5fZGVib3VuY2Vyc1tqb2JOYW1lXSA9IFBvbHltZXIuRGVib3VuY2VyLmRlYm91bmNlKAogICAgICAgICAgICAgIHRoaXMuX2RlYm91bmNlcnNbam9iTmFtZV0KICAgICAgICAgICAgLCB3YWl0ID4gMCA/IFBvbHltZXIuQXN5bmMudGltZU91dC5hZnRlcih3YWl0KSA6IFBvbHltZXIuQXN5bmMubWljcm9UYXNrCiAgICAgICAgICAgICwgY2FsbGJhY2suYmluZCh0aGlzKSk7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBSZXR1cm5zIHdoZXRoZXIgYSBuYW1lZCBkZWJvdW5jZXIgaXMgYWN0aXZlLgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gam9iTmFtZSBUaGUgbmFtZSBvZiB0aGUgZGVib3VuY2VyIHN0YXJ0ZWQgd2l0aCBgZGVib3VuY2VgCiAgICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIGRlYm91bmNlciBpcyBhY3RpdmUgKGhhcyBub3QgeWV0IGZpcmVkKS4KICAgICAgICovCiAgICAgIGlzRGVib3VuY2VyQWN0aXZlKGpvYk5hbWUpIHsKICAgICAgICB0aGlzLl9kZWJvdW5jZXJzID0gdGhpcy5fZGVib3VuY2VycyB8fCB7fTsKICAgICAgICBsZXQgZGVib3VuY2VyID0gdGhpcy5fZGVib3VuY2Vyc1tqb2JOYW1lXTsKICAgICAgICByZXR1cm4gISEoZGVib3VuY2VyICYmIGRlYm91bmNlci5pc0FjdGl2ZSgpKTsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIEltbWVkaWF0ZWx5IGNhbGxzIHRoZSBkZWJvdW5jZXIgYGNhbGxiYWNrYCBhbmQgaW5hY3RpdmF0ZXMgaXQuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBqb2JOYW1lIFRoZSBuYW1lIG9mIHRoZSBkZWJvdW5jZXIgc3RhcnRlZCB3aXRoIGBkZWJvdW5jZWAKICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICovCiAgICAgIGZsdXNoRGVib3VuY2VyKGpvYk5hbWUpIHsKICAgICAgICB0aGlzLl9kZWJvdW5jZXJzID0gdGhpcy5fZGVib3VuY2VycyB8fCB7fTsKICAgICAgICBsZXQgZGVib3VuY2VyID0gdGhpcy5fZGVib3VuY2Vyc1tqb2JOYW1lXTsKICAgICAgICBpZiAoZGVib3VuY2VyKSB7CiAgICAgICAgICBkZWJvdW5jZXIuZmx1c2goKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBDYW5jZWxzIGFuIGFjdGl2ZSBkZWJvdW5jZXIuICBUaGUgYGNhbGxiYWNrYCB3aWxsIG5vdCBiZSBjYWxsZWQuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBqb2JOYW1lIFRoZSBuYW1lIG9mIHRoZSBkZWJvdW5jZXIgc3RhcnRlZCB3aXRoIGBkZWJvdW5jZWAKICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICovCiAgICAgIGNhbmNlbERlYm91bmNlcihqb2JOYW1lKSB7CiAgICAgICAgdGhpcy5fZGVib3VuY2VycyA9IHRoaXMuX2RlYm91bmNlcnMgfHwge307CiAgICAgICAgbGV0IGRlYm91bmNlciA9IHRoaXMuX2RlYm91bmNlcnNbam9iTmFtZV07CiAgICAgICAgaWYgKGRlYm91bmNlcikgewogICAgICAgICAgZGVib3VuY2VyLmNhbmNlbCgpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIFJ1bnMgYSBjYWxsYmFjayBmdW5jdGlvbiBhc3luY2hyb25vdXNseS4KICAgICAgICoKICAgICAgICogQnkgZGVmYXVsdCAoaWYgbm8gd2FpdFRpbWUgaXMgc3BlY2lmaWVkKSwgYXN5bmMgY2FsbGJhY2tzIGFyZSBydW4gYXQKICAgICAgICogbWljcm90YXNrIHRpbWluZywgd2hpY2ggd2lsbCBvY2N1ciBiZWZvcmUgcGFpbnQuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7IUZ1bmN0aW9ufSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gdG8gcnVuLCBib3VuZCB0byBgdGhpc2AuCiAgICAgICAqIEBwYXJhbSB7bnVtYmVyPX0gd2FpdFRpbWUgVGltZSB0byB3YWl0IGJlZm9yZSBjYWxsaW5nIHRoZQogICAgICAgKiAgIGBjYWxsYmFja2AuICBJZiB1bnNwZWNpZmllZCBvciAwLCB0aGUgY2FsbGJhY2sgd2lsbCBiZSBydW4gYXQgbWljcm90YXNrCiAgICAgICAqICAgdGltaW5nIChiZWZvcmUgcGFpbnQpLgogICAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IEhhbmRsZSB0aGF0IG1heSBiZSB1c2VkIHRvIGNhbmNlbCB0aGUgYXN5bmMgam9iLgogICAgICAgKi8KICAgICAgYXN5bmMoY2FsbGJhY2ssIHdhaXRUaW1lKSB7CiAgICAgICAgcmV0dXJuIHdhaXRUaW1lID4gMCA/IFBvbHltZXIuQXN5bmMudGltZU91dC5ydW4oY2FsbGJhY2suYmluZCh0aGlzKSwgd2FpdFRpbWUpIDoKICAgICAgICAgICAgflBvbHltZXIuQXN5bmMubWljcm9UYXNrLnJ1bihjYWxsYmFjay5iaW5kKHRoaXMpKTsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIENhbmNlbHMgYW4gYXN5bmMgb3BlcmF0aW9uIHN0YXJ0ZWQgd2l0aCBgYXN5bmNgLgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge251bWJlcn0gaGFuZGxlIEhhbmRsZSByZXR1cm5lZCBmcm9tIG9yaWdpbmFsIGBhc3luY2AgY2FsbCB0bwogICAgICAgKiAgIGNhbmNlbC4KICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICovCiAgICAgIGNhbmNlbEFzeW5jKGhhbmRsZSkgewogICAgICAgIGhhbmRsZSA8IDAgPyBQb2x5bWVyLkFzeW5jLm1pY3JvVGFzay5jYW5jZWwofmhhbmRsZSkgOgogICAgICAgICAgICBQb2x5bWVyLkFzeW5jLnRpbWVPdXQuY2FuY2VsKGhhbmRsZSk7CiAgICAgIH0KCiAgICAgIC8vIG90aGVyCgogICAgICAvKioKICAgICAgICogQ29udmVuaWVuY2UgbWV0aG9kIGZvciBjcmVhdGluZyBhbiBlbGVtZW50IGFuZCBjb25maWd1cmluZyBpdC4KICAgICAgICoKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHRhZyBIVE1MIGVsZW1lbnQgdGFnIHRvIGNyZWF0ZS4KICAgICAgICogQHBhcmFtIHtPYmplY3Q9fSBwcm9wcyBPYmplY3Qgb2YgcHJvcGVydGllcyB0byBjb25maWd1cmUgb24gdGhlCiAgICAgICAqICAgIGluc3RhbmNlLgogICAgICAgKiBAcmV0dXJuIHshRWxlbWVudH0gTmV3bHkgY3JlYXRlZCBhbmQgY29uZmlndXJlZCBlbGVtZW50LgogICAgICAgKi8KICAgICAgY3JlYXRlKHRhZywgcHJvcHMpIHsKICAgICAgICBsZXQgZWx0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWcpOwogICAgICAgIGlmIChwcm9wcykgewogICAgICAgICAgaWYgKGVsdC5zZXRQcm9wZXJ0aWVzKSB7CiAgICAgICAgICAgIGVsdC5zZXRQcm9wZXJ0aWVzKHByb3BzKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGZvciAobGV0IG4gaW4gcHJvcHMpIHsKICAgICAgICAgICAgICBlbHRbbl0gPSBwcm9wc1tuXTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gZWx0OwogICAgICB9CgogICAgICAvKioKICAgICAgICogQ29udmVuaWVuY2UgbWV0aG9kIGZvciBpbXBvcnRpbmcgYW4gSFRNTCBkb2N1bWVudCBpbXBlcmF0aXZlbHkuCiAgICAgICAqCiAgICAgICAqIFRoaXMgbWV0aG9kIGNyZWF0ZXMgYSBuZXcgYDxsaW5rIHJlbD0iaW1wb3J0Ij5gIGVsZW1lbnQgd2l0aAogICAgICAgKiB0aGUgcHJvdmlkZWQgVVJMIGFuZCBhcHBlbmRzIGl0IHRvIHRoZSBkb2N1bWVudCB0byBzdGFydCBsb2FkaW5nLgogICAgICAgKiBJbiB0aGUgYG9ubG9hZGAgY2FsbGJhY2ssIHRoZSBgaW1wb3J0YCBwcm9wZXJ0eSBvZiB0aGUgYGxpbmtgCiAgICAgICAqIGVsZW1lbnQgd2lsbCBjb250YWluIHRoZSBpbXBvcnRlZCBkb2N1bWVudCBjb250ZW50cy4KICAgICAgICoKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IGhyZWYgVVJMIHRvIGRvY3VtZW50IHRvIGxvYWQuCiAgICAgICAqIEBwYXJhbSB7P2Z1bmN0aW9uKCFFdmVudCk6dm9pZD19IG9ubG9hZCBDYWxsYmFjayB0byBub3RpZnkgd2hlbiBhbiBpbXBvcnQgc3VjY2Vzc2Z1bGx5CiAgICAgICAqICAgbG9hZGVkLgogICAgICAgKiBAcGFyYW0gez9mdW5jdGlvbighRXJyb3JFdmVudCk6dm9pZD19IG9uZXJyb3IgQ2FsbGJhY2sgdG8gbm90aWZ5IHdoZW4gYW4gaW1wb3J0CiAgICAgICAqICAgdW5zdWNjZXNzZnVsbHkgbG9hZGVkLgogICAgICAgKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRBc3luYyBUcnVlIGlmIHRoZSBpbXBvcnQgc2hvdWxkIGJlIGxvYWRlZCBgYXN5bmNgLgogICAgICAgKiAgIERlZmF1bHRzIHRvIGBmYWxzZWAuCiAgICAgICAqIEByZXR1cm4geyFIVE1MTGlua0VsZW1lbnR9IFRoZSBsaW5rIGVsZW1lbnQgZm9yIHRoZSBVUkwgdG8gYmUgbG9hZGVkLgogICAgICAgKi8KICAgICAgaW1wb3J0SHJlZihocmVmLCBvbmxvYWQsIG9uZXJyb3IsIG9wdEFzeW5jKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnMKICAgICAgICBsZXQgbG9hZEZuID0gb25sb2FkID8gb25sb2FkLmJpbmQodGhpcykgOiBudWxsOwogICAgICAgIGxldCBlcnJvckZuID0gb25lcnJvciA/IG9uZXJyb3IuYmluZCh0aGlzKSA6IG51bGw7CiAgICAgICAgcmV0dXJuIFBvbHltZXIuaW1wb3J0SHJlZihocmVmLCBsb2FkRm4sIGVycm9yRm4sIG9wdEFzeW5jKTsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIFBvbHlmaWxsIGZvciBFbGVtZW50LnByb3RvdHlwZS5tYXRjaGVzLCB3aGljaCBpcyBzb21ldGltZXMgc3RpbGwKICAgICAgICogcHJlZml4ZWQuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzZWxlY3RvciBTZWxlY3RvciB0byB0ZXN0LgogICAgICAgKiBAcGFyYW0geyFFbGVtZW50PX0gbm9kZSBFbGVtZW50IHRvIHRlc3QgdGhlIHNlbGVjdG9yIGFnYWluc3QuCiAgICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIGVsZW1lbnQgbWF0Y2hlcyB0aGUgc2VsZWN0b3IuCiAgICAgICAqLwogICAgICBlbGVtZW50TWF0Y2hlcyhzZWxlY3Rvciwgbm9kZSkgewogICAgICAgIHJldHVybiBQb2x5bWVyLmRvbS5tYXRjaGVzU2VsZWN0b3IoLyoqIEB0eXBlIHshRWxlbWVudH0gKi8gKG5vZGUgfHwgdGhpcyksIHNlbGVjdG9yKTsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIFRvZ2dsZXMgYW4gSFRNTCBhdHRyaWJ1dGUgb24gb3Igb2ZmLgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBIVE1MIGF0dHJpYnV0ZSBuYW1lCiAgICAgICAqIEBwYXJhbSB7Ym9vbGVhbj19IGJvb2wgQm9vbGVhbiB0byBmb3JjZSB0aGUgYXR0cmlidXRlIG9uIG9yIG9mZi4KICAgICAgICogICAgV2hlbiB1bnNwZWNpZmllZCwgdGhlIHN0YXRlIG9mIHRoZSBhdHRyaWJ1dGUgd2lsbCBiZSByZXZlcnNlZC4KICAgICAgICogQHBhcmFtIHtFbGVtZW50PX0gbm9kZSBOb2RlIHRvIHRhcmdldC4gIERlZmF1bHRzIHRvIGB0aGlzYC4KICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICovCiAgICAgIHRvZ2dsZUF0dHJpYnV0ZShuYW1lLCBib29sLCBub2RlKSB7CiAgICAgICAgbm9kZSA9IC8qKiBAdHlwZSB7RWxlbWVudH0gKi8gKG5vZGUgfHwgdGhpcyk7CiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMSkgewogICAgICAgICAgYm9vbCA9ICFub2RlLmhhc0F0dHJpYnV0ZShuYW1lKTsKICAgICAgICB9CiAgICAgICAgaWYgKGJvb2wpIHsKICAgICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKG5hbWUsICcnKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgbm9kZS5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7CiAgICAgICAgfQogICAgICB9CgoKICAgICAgLyoqCiAgICAgICAqIFRvZ2dsZXMgYSBDU1MgY2xhc3Mgb24gb3Igb2ZmLgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBDU1MgY2xhc3MgbmFtZQogICAgICAgKiBAcGFyYW0ge2Jvb2xlYW49fSBib29sIEJvb2xlYW4gdG8gZm9yY2UgdGhlIGNsYXNzIG9uIG9yIG9mZi4KICAgICAgICogICAgV2hlbiB1bnNwZWNpZmllZCwgdGhlIHN0YXRlIG9mIHRoZSBjbGFzcyB3aWxsIGJlIHJldmVyc2VkLgogICAgICAgKiBAcGFyYW0ge0VsZW1lbnQ9fSBub2RlIE5vZGUgdG8gdGFyZ2V0LiAgRGVmYXVsdHMgdG8gYHRoaXNgLgogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKi8KICAgICAgdG9nZ2xlQ2xhc3MobmFtZSwgYm9vbCwgbm9kZSkgewogICAgICAgIG5vZGUgPSAvKiogQHR5cGUge0VsZW1lbnR9ICovIChub2RlIHx8IHRoaXMpOwogICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09IDEpIHsKICAgICAgICAgIGJvb2wgPSAhbm9kZS5jbGFzc0xpc3QuY29udGFpbnMobmFtZSk7CiAgICAgICAgfQogICAgICAgIGlmIChib29sKSB7CiAgICAgICAgICBub2RlLmNsYXNzTGlzdC5hZGQobmFtZSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIG5vZGUuY2xhc3NMaXN0LnJlbW92ZShuYW1lKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBDcm9zcy1wbGF0Zm9ybSBoZWxwZXIgZm9yIHNldHRpbmcgYW4gZWxlbWVudCdzIENTUyBgdHJhbnNmb3JtYCBwcm9wZXJ0eS4KICAgICAgICoKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHRyYW5zZm9ybVRleHQgVHJhbnNmb3JtIHNldHRpbmcuCiAgICAgICAqIEBwYXJhbSB7RWxlbWVudD19IG5vZGUgRWxlbWVudCB0byBhcHBseSB0aGUgdHJhbnNmb3JtIHRvLgogICAgICAgKiBEZWZhdWx0cyB0byBgdGhpc2AKICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICovCiAgICAgIHRyYW5zZm9ybSh0cmFuc2Zvcm1UZXh0LCBub2RlKSB7CiAgICAgICAgbm9kZSA9IC8qKiBAdHlwZSB7RWxlbWVudH0gKi8gKG5vZGUgfHwgdGhpcyk7CiAgICAgICAgbm9kZS5zdHlsZS53ZWJraXRUcmFuc2Zvcm0gPSB0cmFuc2Zvcm1UZXh0OwogICAgICAgIG5vZGUuc3R5bGUudHJhbnNmb3JtID0gdHJhbnNmb3JtVGV4dDsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIENyb3NzLXBsYXRmb3JtIGhlbHBlciBmb3Igc2V0dGluZyBhbiBlbGVtZW50J3MgQ1NTIGB0cmFuc2xhdGUzZGAKICAgICAgICogcHJvcGVydHkuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4IFggb2Zmc2V0LgogICAgICAgKiBAcGFyYW0ge251bWJlcn0geSBZIG9mZnNldC4KICAgICAgICogQHBhcmFtIHtudW1iZXJ9IHogWiBvZmZzZXQuCiAgICAgICAqIEBwYXJhbSB7RWxlbWVudD19IG5vZGUgRWxlbWVudCB0byBhcHBseSB0aGUgdHJhbnNmb3JtIHRvLgogICAgICAgKiBEZWZhdWx0cyB0byBgdGhpc2AuCiAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAqLwogICAgICB0cmFuc2xhdGUzZCh4LCB5LCB6LCBub2RlKSB7CiAgICAgICAgbm9kZSA9IC8qKiBAdHlwZSB7RWxlbWVudH0gKi8gKG5vZGUgfHwgdGhpcyk7CiAgICAgICAgdGhpcy50cmFuc2Zvcm0oJ3RyYW5zbGF0ZTNkKCcgKyB4ICsgJywnICsgeSArICcsJyArIHogKyAnKScsIG5vZGUpOwogICAgICB9CgogICAgICAvKioKICAgICAgICogUmVtb3ZlcyBhbiBpdGVtIGZyb20gYW4gYXJyYXksIGlmIGl0IGV4aXN0cy4KICAgICAgICoKICAgICAgICogSWYgdGhlIGFycmF5IGlzIHNwZWNpZmllZCBieSBwYXRoLCBhIGNoYW5nZSBub3RpZmljYXRpb24gaXMKICAgICAgICogZ2VuZXJhdGVkLCBzbyB0aGF0IG9ic2VydmVycywgZGF0YSBiaW5kaW5ncyBhbmQgY29tcHV0ZWQKICAgICAgICogcHJvcGVydGllcyB3YXRjaGluZyB0aGF0IHBhdGggY2FuIHVwZGF0ZS4KICAgICAgICoKICAgICAgICogSWYgdGhlIGFycmF5IGlzIHBhc3NlZCBkaXJlY3RseSwgKipubyBjaGFuZ2UKICAgICAgICogbm90aWZpY2F0aW9uIGlzIGdlbmVyYXRlZCoqLgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge3N0cmluZyB8ICFBcnJheTxudW1iZXJ8c3RyaW5nPn0gYXJyYXlPclBhdGggUGF0aCB0byBhcnJheSBmcm9tIHdoaWNoIHRvIHJlbW92ZSB0aGUgaXRlbQogICAgICAgKiAgIChvciB0aGUgYXJyYXkgaXRzZWxmKS4KICAgICAgICogQHBhcmFtIHsqfSBpdGVtIEl0ZW0gdG8gcmVtb3ZlLgogICAgICAgKiBAcmV0dXJuIHtBcnJheX0gQXJyYXkgY29udGFpbmluZyBpdGVtIHJlbW92ZWQuCiAgICAgICAqLwogICAgICBhcnJheURlbGV0ZShhcnJheU9yUGF0aCwgaXRlbSkgewogICAgICAgIGxldCBpbmRleDsKICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShhcnJheU9yUGF0aCkpIHsKICAgICAgICAgIGluZGV4ID0gYXJyYXlPclBhdGguaW5kZXhPZihpdGVtKTsKICAgICAgICAgIGlmIChpbmRleCA+PSAwKSB7CiAgICAgICAgICAgIHJldHVybiBhcnJheU9yUGF0aC5zcGxpY2UoaW5kZXgsIDEpOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBsZXQgYXJyID0gUG9seW1lci5QYXRoLmdldCh0aGlzLCBhcnJheU9yUGF0aCk7CiAgICAgICAgICBpbmRleCA9IGFyci5pbmRleE9mKGl0ZW0pOwogICAgICAgICAgaWYgKGluZGV4ID49IDApIHsKICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3BsaWNlKGFycmF5T3JQYXRoLCBpbmRleCwgMSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBudWxsOwogICAgICB9CgogICAgICAvLyBsb2dnaW5nCgogICAgICAvKioKICAgICAgICogRmFjYWRlcyBgY29uc29sZS5sb2dgL2B3YXJuYC9gZXJyb3JgIGFzIG92ZXJyaWRlIHBvaW50LgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gbGV2ZWwgT25lIG9mICdsb2cnLCAnd2FybicsICdlcnJvcicKICAgICAgICogQHBhcmFtIHtBcnJheX0gYXJncyBBcnJheSBvZiBzdHJpbmdzIG9yIG9iamVjdHMgdG8gbG9nCiAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAqLwogICAgICBfbG9nZ2VyKGxldmVsLCBhcmdzKSB7CiAgICAgICAgLy8gYWNjZXB0IFsnZm9vJywgJ2JhciddIGFuZCBbWydmb28nLCAnYmFyJ11dCiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYXJncykgJiYgYXJncy5sZW5ndGggPT09IDEgJiYgQXJyYXkuaXNBcnJheShhcmdzWzBdKSkgewogICAgICAgICAgYXJncyA9IGFyZ3NbMF07CiAgICAgICAgfQogICAgICAgIHN3aXRjaChsZXZlbCkgewogICAgICAgICAgY2FzZSAnbG9nJzoKICAgICAgICAgIGNhc2UgJ3dhcm4nOgogICAgICAgICAgY2FzZSAnZXJyb3InOgogICAgICAgICAgICBjb25zb2xlW2xldmVsXSguLi5hcmdzKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBGYWNhZGVzIGBjb25zb2xlLmxvZ2AgYXMgYW4gb3ZlcnJpZGUgcG9pbnQuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7Li4uKn0gYXJncyBBcnJheSBvZiBzdHJpbmdzIG9yIG9iamVjdHMgdG8gbG9nCiAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAqLwogICAgICBfbG9nKC4uLmFyZ3MpIHsKICAgICAgICB0aGlzLl9sb2dnZXIoJ2xvZycsIGFyZ3MpOwogICAgICB9CgogICAgICAvKioKICAgICAgICogRmFjYWRlcyBgY29uc29sZS53YXJuYCBhcyBhbiBvdmVycmlkZSBwb2ludC4KICAgICAgICoKICAgICAgICogQHBhcmFtIHsuLi4qfSBhcmdzIEFycmF5IG9mIHN0cmluZ3Mgb3Igb2JqZWN0cyB0byBsb2cKICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICovCiAgICAgIF93YXJuKC4uLmFyZ3MpIHsKICAgICAgICB0aGlzLl9sb2dnZXIoJ3dhcm4nLCBhcmdzKTsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIEZhY2FkZXMgYGNvbnNvbGUuZXJyb3JgIGFzIGFuIG92ZXJyaWRlIHBvaW50LgogICAgICAgKgogICAgICAgKiBAcGFyYW0gey4uLip9IGFyZ3MgQXJyYXkgb2Ygc3RyaW5ncyBvciBvYmplY3RzIHRvIGxvZwogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKi8KICAgICAgX2Vycm9yKC4uLmFyZ3MpIHsKICAgICAgICB0aGlzLl9sb2dnZXIoJ2Vycm9yJywgYXJncyk7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBGb3JtYXRzIGEgbWVzc2FnZSB1c2luZyB0aGUgZWxlbWVudCB0eXBlIGFuIGEgbWV0aG9kIG5hbWUuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBtZXRob2ROYW1lIE1ldGhvZCBuYW1lIHRvIGFzc29jaWF0ZSB3aXRoIG1lc3NhZ2UKICAgICAgICogQHBhcmFtIHsuLi4qfSBhcmdzIEFycmF5IG9mIHN0cmluZ3Mgb3Igb2JqZWN0cyB0byBsb2cKICAgICAgICogQHJldHVybiB7QXJyYXl9IEFycmF5IHdpdGggZm9ybWF0dGluZyBpbmZvcm1hdGlvbiBmb3IgYGNvbnNvbGVgCiAgICAgICAqICAgbG9nZ2luZy4KICAgICAgICovCiAgICAgIF9sb2dmKG1ldGhvZE5hbWUsIC4uLmFyZ3MpIHsKICAgICAgICByZXR1cm4gWydbJXM6OiVzXScsIHRoaXMuaXMsIG1ldGhvZE5hbWUsIC4uLmFyZ3NdOwogICAgICB9CgogICAgfQoKICAgIExlZ2FjeUVsZW1lbnQucHJvdG90eXBlLmlzID0gJyc7CgogICAgcmV0dXJuIExlZ2FjeUVsZW1lbnQ7CgogIH0pOwoKfSkoKTsKPC9zY3JpcHQ+PHNjcmlwdD4KCiAgKGZ1bmN0aW9uKCkgewoKICAgICd1c2Ugc3RyaWN0JzsKCiAgICBjb25zdCBsaWZlY3ljbGVQcm9wcyA9IHsKICAgICAgYXR0YWNoZWQ6IHRydWUsCiAgICAgIGRldGFjaGVkOiB0cnVlLAogICAgICByZWFkeTogdHJ1ZSwKICAgICAgY3JlYXRlZDogdHJ1ZSwKICAgICAgYmVmb3JlUmVnaXN0ZXI6IHRydWUsCiAgICAgIHJlZ2lzdGVyZWQ6IHRydWUsCiAgICAgIGF0dHJpYnV0ZUNoYW5nZWQ6IHRydWUsCiAgICAgIGxpc3RlbmVyczogdHJ1ZSwKICAgICAgaG9zdEF0dHJpYnV0ZXM6IHRydWUKICAgIH07CgogICAgY29uc3QgZXhjbHVkZU9uSW5mbyA9IHsKICAgICAgYXR0YWNoZWQ6IHRydWUsCiAgICAgIGRldGFjaGVkOiB0cnVlLAogICAgICByZWFkeTogdHJ1ZSwKICAgICAgY3JlYXRlZDogdHJ1ZSwKICAgICAgYmVmb3JlUmVnaXN0ZXI6IHRydWUsCiAgICAgIHJlZ2lzdGVyZWQ6IHRydWUsCiAgICAgIGF0dHJpYnV0ZUNoYW5nZWQ6IHRydWUsCiAgICAgIGJlaGF2aW9yczogdHJ1ZSwKICAgICAgX25vQWNjZXNzb3JzOiB0cnVlCiAgICB9OwoKICAgIGNvbnN0IGV4Y2x1ZGVPbkJlaGF2aW9ycyA9IE9iamVjdC5hc3NpZ24oewogICAgICBsaXN0ZW5lcnM6IHRydWUsCiAgICAgIGhvc3RBdHRyaWJ1dGVzOiB0cnVlLAogICAgICBwcm9wZXJ0aWVzOiB0cnVlLAogICAgICBvYnNlcnZlcnM6IHRydWUsCiAgICB9LCBleGNsdWRlT25JbmZvKTsKCiAgICBmdW5jdGlvbiBjb3B5UHJvcGVydGllcyhzb3VyY2UsIHRhcmdldCwgZXhjbHVkZVByb3BzKSB7CiAgICAgIGNvbnN0IG5vQWNjZXNzb3JzID0gc291cmNlLl9ub0FjY2Vzc29yczsKICAgICAgZm9yIChsZXQgcCBpbiBzb3VyY2UpIHsKICAgICAgICBpZiAoIShwIGluIGV4Y2x1ZGVQcm9wcykpIHsKICAgICAgICAgIGlmIChub0FjY2Vzc29ycykgewogICAgICAgICAgICB0YXJnZXRbcF0gPSBzb3VyY2VbcF07CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBsZXQgcGQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwgcCk7CiAgICAgICAgICAgIGlmIChwZCkgewogICAgICAgICAgICAgIC8vIGVuc3VyZSBwcm9wZXJ0eSBpcyBjb25maWd1cmFibGUgc28gdGhhdCBhIGxhdGVyIGJlaGF2aW9yIGNhbgogICAgICAgICAgICAgIC8vIHJlLWNvbmZpZ3VyZSBpdC4KICAgICAgICAgICAgICBwZC5jb25maWd1cmFibGUgPSB0cnVlOwogICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIHAsIHBkKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogQXBwbGllcyBhICJsZWdhY3kiIGJlaGF2aW9yIG9yIGFycmF5IG9mIGJlaGF2aW9ycyB0byB0aGUgcHJvdmlkZWQgY2xhc3MuCiAgICAgKgogICAgICogTm90ZTogdGhpcyBtZXRob2Qgd2lsbCBhdXRvbWF0aWNhbGx5IGFsc28gYXBwbHkgdGhlIGBQb2x5bWVyLkxlZ2FjeUVsZW1lbnRNaXhpbmAKICAgICAqIHRvIGVuc3VyZSB0aGF0IGFueSBsZWdhY3kgYmVoYXZpb3JzIGNhbiByZWx5IG9uIGxlZ2FjeSBQb2x5bWVyIEFQSSBvbgogICAgICogdGhlIHVuZGVybHlpbmcgZWxlbWVudC4KICAgICAqCiAgICAgKiBAdGVtcGxhdGUgVAogICAgICogQHBhcmFtIHshT2JqZWN0fCFBcnJheTwhT2JqZWN0Pn0gYmVoYXZpb3JzIEJlaGF2aW9yIG9iamVjdCBvciBhcnJheSBvZiBiZWhhdmlvcnMuCiAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKG5ldzpUKX0ga2xhc3MgRWxlbWVudCBjbGFzcy4KICAgICAqIEByZXR1cm4ge2Z1bmN0aW9uKG5ldzpUKX0gUmV0dXJucyBhIG5ldyBFbGVtZW50IGNsYXNzIGV4dGVuZGVkIGJ5IHRoZQogICAgICogcGFzc2VkIGluIGBiZWhhdmlvcnNgIGFuZCBhbHNvIGJ5IGBQb2x5bWVyLkxlZ2FjeUVsZW1lbnRNaXhpbmAuCiAgICAgKiBAbWVtYmVyb2YgUG9seW1lcgogICAgICogQHN1cHByZXNzIHtpbnZhbGlkQ2FzdHMsIGNoZWNrVHlwZXN9CiAgICAgKi8KICAgIGZ1bmN0aW9uIG1peGluQmVoYXZpb3JzKGJlaGF2aW9ycywga2xhc3MpIHsKICAgICAgcmV0dXJuIEdlbmVyYXRlQ2xhc3NGcm9tSW5mbyh7fSwgUG9seW1lci5MZWdhY3lFbGVtZW50TWl4aW4oa2xhc3MpLCBiZWhhdmlvcnMpOwogICAgfQoKICAgIC8vIE5PVEU6CiAgICAvLyAxLngKICAgIC8vIEJlaGF2aW9ycyB3ZXJlIG1peGVkIGluICppbiByZXZlcnNlIG9yZGVyKiBhbmQgZGUtZHVwZWQgb24gdGhlIGZseS4KICAgIC8vIFRoZSBydWxlIHdhcyB0aGF0IGJlaGF2aW9yIHByb3BlcnRpZXMgd2VyZSBjb3BpZWQgb250byB0aGUgZWxlbWVudAogICAgLy8gcHJvdG90eXBlIGlmIGFuZCBvbmx5IGlmIHRoZSBwcm9wZXJ0eSBkaWQgbm90IGFscmVhZHkgZXhpc3QuCiAgICAvLyBHaXZlbjogUG9seW1lcnsgYmVoYXZpb3JzOiBbQSwgQiwgQywgQSwgQl19LCBwcm9wZXJ0eSBjb3B5IG9yZGVyIHdhczoKICAgIC8vICgxKSwgQiwgKDIpLCBBLCAoMykgQy4gVGhpcyBtZWFucyBwcm90b3R5cGUgcHJvcGVydGllcyB3aW4gb3ZlcgogICAgLy8gQiBwcm9wZXJ0aWVzIHdpbiBvdmVyIEEgd2luIG92ZXIgQy4gVGhpcyBtaXJyb3JzIHdoYXQgd291bGQgaGFwcGVuCiAgICAvLyB3aXRoIGluaGVyaXRhbmNlIGlmIGVsZW1lbnQgZXh0ZW5kZWQgQiBleHRlbmRlZCBBIGV4dGVuZGVkIEMuCiAgICAvLwogICAgLy8gQWdhaW4gZ2l2ZW4sIFBvbHltZXJ7IGJlaGF2aW9yczogW0EsIEIsIEMsIEEsIEJdfSwgdGhlIHJlc3VsdGluZwogICAgLy8gYGJlaGF2aW9yc2AgYXJyYXkgd2FzIFtDLCBBLCBCXS4KICAgIC8vIEJlaGF2aW9yIGxpZmVjeWNsZSBtZXRob2RzIHdlcmUgY2FsbGVkIGluIGJlaGF2aW9yIGFycmF5IG9yZGVyCiAgICAvLyBmb2xsb3dlZCBieSB0aGUgZWxlbWVudCwgZS5nLiAoMSkgQy5jcmVhdGVkLCAoMikgQS5jcmVhdGVkLAogICAgLy8gKDMpIEIuY3JlYXRlZCwgKDQpIGVsZW1lbnQuY3JlYXRlZC4gVGhlcmUgd2FzIG5vIHN1cHBvcnQgZm9yCiAgICAvLyBzdXBlciwgYW5kICJzdXBlci1iZWhhdmlvciIgbWV0aG9kcyB3ZXJlIGNhbGxhYmxlIG9ubHkgYnkgbmFtZSkuCiAgICAvLwogICAgLy8gMi54CiAgICAvLyBCZWhhdmlvcnMgYXJlIG1hZGUgaW50byBwcm9wZXIgbWl4aW5zIHdoaWNoIGxpdmUgaW4gdGhlCiAgICAvLyBlbGVtZW50J3MgcHJvdG90eXBlIGNoYWluLiBCZWhhdmlvcnMgYXJlIHBsYWNlZCBpbiB0aGUgZWxlbWVudCBwcm90b3R5cGUKICAgIC8vIGVsZGVzdCB0byB5b3VuZ2VzdCBhbmQgZGUtZHVwZWQgeW91bmdlc3QgdG8gb2xkZXN0OgogICAgLy8gU28sIGZpcnN0IFtBLCBCLCBDLCBBLCBCXSBiZWNvbWVzIFtDLCBBLCBCXSB0aGVuLAogICAgLy8gdGhlIGVsZW1lbnQgcHJvdG90eXBlIGJlY29tZXMgKG9sZGVzdCkgKDEpIFBvbHltZXIuRWxlbWVudCwgKDIpIGNsYXNzKEMpLAogICAgLy8gKDMpIGNsYXNzKEEpLCAoNCkgY2xhc3MoQiksICg1KSBjbGFzcyhQb2x5bWVyKHsuLi59KSkuCiAgICAvLyBSZXN1bHQ6CiAgICAvLyBUaGlzIG1lYW5zIGVsZW1lbnQgcHJvcGVydGllcyB3aW4gb3ZlciBCIHByb3BlcnRpZXMgd2luIG92ZXIgQSB3aW4KICAgIC8vIG92ZXIgQy4gKHNhbWUgYXMgMS54KQogICAgLy8gSWYgbGlmZWN5Y2xlIGlzIGNhbGxlZCAoc3VwZXIgdGhlbiBtZSksIG9yZGVyIGlzCiAgICAvLyAoMSkgQy5jcmVhdGVkLCAoMikgQS5jcmVhdGVkLCAoMykgQi5jcmVhdGVkLCAoNCkgZWxlbWVudC5jcmVhdGVkCiAgICAvLyAoYWdhaW4gc2FtZSBhcyAxLngpCiAgICBmdW5jdGlvbiBhcHBseUJlaGF2aW9ycyhwcm90bywgYmVoYXZpb3JzLCBsaWZlY3ljbGUpIHsKICAgICAgZm9yIChsZXQgaT0wOyBpPGJlaGF2aW9ycy5sZW5ndGg7IGkrKykgewogICAgICAgIGFwcGx5SW5mbyhwcm90bywgYmVoYXZpb3JzW2ldLCBsaWZlY3ljbGUsIGV4Y2x1ZGVPbkJlaGF2aW9ycyk7CiAgICAgIH0KICAgIH0KCiAgICBmdW5jdGlvbiBhcHBseUluZm8ocHJvdG8sIGluZm8sIGxpZmVjeWNsZSwgZXhjbHVkZVByb3BzKSB7CiAgICAgIGNvcHlQcm9wZXJ0aWVzKGluZm8sIHByb3RvLCBleGNsdWRlUHJvcHMpOwogICAgICBmb3IgKGxldCBwIGluIGxpZmVjeWNsZVByb3BzKSB7CiAgICAgICAgaWYgKGluZm9bcF0pIHsKICAgICAgICAgIGxpZmVjeWNsZVtwXSA9IGxpZmVjeWNsZVtwXSB8fCBbXTsKICAgICAgICAgIGxpZmVjeWNsZVtwXS5wdXNoKGluZm9bcF0pOwogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIHtBcnJheX0gYmVoYXZpb3JzIExpc3Qgb2YgYmVoYXZpb3JzIHRvIGZsYXR0ZW4uCiAgICAgKiBAcGFyYW0ge0FycmF5PX0gbGlzdCBUYXJnZXQgbGlzdCB0byBmbGF0dGVuIGJlaGF2aW9ycyBpbnRvLgogICAgICogQHBhcmFtIHtBcnJheT19IGV4Y2x1ZGUgTGlzdCBvZiBiZWhhdmlvcnMgdG8gZXhjbHVkZSBmcm9tIHRoZSBsaXN0LgogICAgICogQHJldHVybiB7IUFycmF5fSBSZXR1cm5zIHRoZSBsaXN0IG9mIGZsYXR0ZW5lZCBiZWhhdmlvcnMuCiAgICAgKi8KICAgIGZ1bmN0aW9uIGZsYXR0ZW5CZWhhdmlvcnMoYmVoYXZpb3JzLCBsaXN0LCBleGNsdWRlKSB7CiAgICAgIGxpc3QgPSBsaXN0IHx8IFtdOwogICAgICBmb3IgKGxldCBpPWJlaGF2aW9ycy5sZW5ndGgtMTsgaSA+PSAwOyBpLS0pIHsKICAgICAgICBsZXQgYiA9IGJlaGF2aW9yc1tpXTsKICAgICAgICBpZiAoYikgewogICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYikpIHsKICAgICAgICAgICAgZmxhdHRlbkJlaGF2aW9ycyhiLCBsaXN0KTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIC8vIGRlZHVwCiAgICAgICAgICAgIGlmIChsaXN0LmluZGV4T2YoYikgPCAwICYmICghZXhjbHVkZSB8fCBleGNsdWRlLmluZGV4T2YoYikgPCAwKSkgewogICAgICAgICAgICAgIGxpc3QudW5zaGlmdChiKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBjb25zb2xlLndhcm4oJ2JlaGF2aW9yIGlzIG51bGwsIGNoZWNrIGZvciBtaXNzaW5nIG9yIDQwNCBpbXBvcnQnKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIGxpc3Q7CiAgICB9CgogICAgLyogTm90ZSBhYm91dCBjb25zdHJ1Y3Rpb24gYW5kIGV4dGVuc2lvbiBvZiBsZWdhY3kgY2xhc3Nlcy4KICAgICAgW0NoYW5nZWQgaW4gUTQgMjAxOCB0byBvcHRpbWl6ZSBwZXJmb3JtYW5jZS5dCgogICAgICBXaGVuIGNhbGxpbmcgYFBvbHltZXJgIG9yIGBtaXhpbkJlaGF2aW9yc2AsIHRoZSBnZW5lcmF0ZWQgY2xhc3MgYmVsb3cgaXMKICAgICAgbWFkZS4gVGhlIGxpc3Qgb2YgYmVoYXZpb3JzIHdhcyBwcmV2aW91c2x5IG1hZGUgaW50byBvbmUgZ2VuZXJhdGVkIGNsYXNzIHBlcgogICAgICBiZWhhdmlvciwgYnV0IHRoaXMgaXMgbm8gbG9uZ2VyIHRoZSBjYXNlIGFzIGJlaGF2aW9ycyBhcmUgbm93IGNhbGxlZAogICAgICBtYW51YWxseS4gTm90ZSwgdGhlcmUgbWF5ICpzdGlsbCogYmUgbXVsdGlwbGUgZ2VuZXJhdGVkIGNsYXNzZXMgaW4gdGhlCiAgICAgIGVsZW1lbnQncyBwcm90b3R5cGUgY2hhaW4gaWYgZXh0ZW5zaW9uIGlzIHVzZWQgd2l0aCBgbWl4aW5CZWhhdmlvcnNgLgoKICAgICAgVGhlIGdlbmVyYXRlZCBjbGFzcyBpcyBkaXJlY3RseSB0aWVkIHRvIHRoZSBpbmZvIG9iamVjdCBhbmQgYmVoYXZpb3JzCiAgICAgIHVzZWQgdG8gY3JlYXRlIGl0LiBUaGF0IGxpc3Qgb2YgYmVoYXZpb3JzIGlzIGZpbHRlcmVkIHNvIGl0J3Mgb25seSB0aGUKICAgICAgYmVoYXZpb3JzIG5vdCBhY3RpdmUgb24gdGhlIHN1cGVyY2xhc3MuIEluIG9yZGVyIHRvIGNhbGwgdGhyb3VnaCB0byB0aGUKICAgICAgZW50aXJlIGxpc3Qgb2YgbGlmZWN5Y2xlIG1ldGhvZHMsIGl0J3MgaW1wb3J0YW50IHRvIGNhbGwgYHN1cGVyYC4KCiAgICAgIFRoZSBlbGVtZW50J3MgYHByb3BlcnRpZXNgIGFuZCBgb2JzZXJ2ZXJzYCBhcmUgY29udHJvbGxlZCB2aWEgdGhlIGZpbmFsaXphdGlvbgogICAgICBtZWNoYW5pc20gcHJvdmlkZWQgYnkgYFByb3BlcnRpZXNNaXhpbmAuIGBQcm9wZXJ0aWVzYCBhbmQgYG9ic2VydmVyc2AgYXJlCiAgICAgIGNvbGxlY3RlZCBieSBtYW51YWxseSB0cmF2ZXJzaW5nIHRoZSBwcm90b3R5cGUgY2hhaW4gYW5kIG1lcmdpbmcuCgogICAgICBUbyBsaW1pdCBjaGFuZ2VzLCB0aGUgYF9yZWdpc3RlcmVkYCBtZXRob2QgaXMgY2FsbGVkIHZpYSBgX2luaXRpYWxpemVQcm9wZXJ0aWVzYAogICAgICBhbmQgbm90IGBfZmluYWxpemVDbGFzc2AuCiAgICAqLwogICAgLyoqCiAgICAgKiBAcGFyYW0geyFQb2x5bWVySW5pdH0gaW5mbyBQb2x5bWVyIGluZm8gb2JqZWN0CiAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKG5ldzpIVE1MRWxlbWVudCl9IEJhc2UgYmFzZSBjbGFzcyB0byBleHRlbmQgd2l0aCBpbmZvIG9iamVjdAogICAgICogQHBhcmFtIHtPYmplY3R9IGJlaGF2aW9ycyBiZWhhdmlvcnMgdG8gY29weSBpbnRvIHRoZSBlbGVtZW50CiAgICAgKiBAcmV0dXJuIHtmdW5jdGlvbihuZXc6SFRNTEVsZW1lbnQpfSBHZW5lcmF0ZWQgY2xhc3MKICAgICAqIEBzdXBwcmVzcyB7Y2hlY2tUeXBlc30KICAgICAqIEBwcml2YXRlCiAgICAgKi8KICAgIGZ1bmN0aW9uIEdlbmVyYXRlQ2xhc3NGcm9tSW5mbyhpbmZvLCBCYXNlLCBiZWhhdmlvcnMpIHsKCiAgICAgIC8vIG1hbmFnZXMgYmVoYXZpb3IgYW5kIGxpZmVjeWNsZSBwcm9jZXNzaW5nIChmaWxsZWQgaW4gYWZ0ZXIgY2xhc3MgZGVmaW5pdGlvbikKICAgICAgbGV0IGJlaGF2aW9yTGlzdDsKICAgICAgY29uc3QgbGlmZWN5Y2xlID0ge307CgogICAgICAvKiogQHByaXZhdGUgKi8KICAgICAgY2xhc3MgUG9seW1lckdlbmVyYXRlZCBleHRlbmRzIEJhc2UgewoKICAgICAgICAvLyBleHBsaWNpdGx5IG5vdCBjYWxsaW5nIHN1cGVyLl9maW5hbGl6ZUNsYXNzCiAgICAgICAgc3RhdGljIF9maW5hbGl6ZUNsYXNzKCkgewogICAgICAgICAgLy8gaWYgY2FsbGluZyB2aWEgYSBzdWJjbGFzcyB0aGF0IGhhc24ndCBiZWVuIGdlbmVyYXRlZCwgcGFzcyB0aHJvdWdoIHRvIHN1cGVyCiAgICAgICAgICBpZiAoIXRoaXMuaGFzT3duUHJvcGVydHkod2luZG93LkpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoJ2dlbmVyYXRlZEZyb20nLCB0aGlzKSkpIHsKICAgICAgICAgICAgc3VwZXIuX2ZpbmFsaXplQ2xhc3MoKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIC8vIGludGVybGVhdmUgcHJvcGVydGllcyBhbmQgb2JzZXJ2ZXJzIHBlciBiZWhhdmlvciBhbmQgYGluZm9gCiAgICAgICAgICAgIGlmIChiZWhhdmlvckxpc3QpIHsKICAgICAgICAgICAgICBmb3IgKGxldCBpPTAsIGI7IGkgPCBiZWhhdmlvckxpc3QubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgIGIgPSBiZWhhdmlvckxpc3RbaV07CiAgICAgICAgICAgICAgICBpZiAoYi5wcm9wZXJ0aWVzKSB7CiAgICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlUHJvcGVydGllcyhiLnByb3BlcnRpZXMpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKGIub2JzZXJ2ZXJzKSB7CiAgICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlT2JzZXJ2ZXJzKGIub2JzZXJ2ZXJzLCBiLnByb3BlcnRpZXMpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoaW5mby5wcm9wZXJ0aWVzKSB7CiAgICAgICAgICAgICAgdGhpcy5jcmVhdGVQcm9wZXJ0aWVzKGluZm8ucHJvcGVydGllcyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKGluZm8ub2JzZXJ2ZXJzKSB7CiAgICAgICAgICAgICAgdGhpcy5jcmVhdGVPYnNlcnZlcnMoaW5mby5vYnNlcnZlcnMsIGluZm8ucHJvcGVydGllcyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy8gbWFrZSBzdXJlIHRvIHByZXBhcmUgdGhlIGVsZW1lbnQgdGVtcGxhdGUKICAgICAgICAgICAgdGhpcy5fcHJlcGFyZVRlbXBsYXRlKCk7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKSB7CiAgICAgICAgICBjb25zdCBwcm9wZXJ0aWVzID0ge307CiAgICAgICAgICBpZiAoYmVoYXZpb3JMaXN0KSB7CiAgICAgICAgICAgIGZvciAobGV0IGk9MDsgaSA8IGJlaGF2aW9yTGlzdC5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24ocHJvcGVydGllcywgYmVoYXZpb3JMaXN0W2ldLnByb3BlcnRpZXMpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBPYmplY3QuYXNzaWduKHByb3BlcnRpZXMsIGluZm8ucHJvcGVydGllcyk7CiAgICAgICAgICByZXR1cm4gcHJvcGVydGllczsKICAgICAgICB9CgogICAgICAgIHN0YXRpYyBnZXQgb2JzZXJ2ZXJzKCkgewogICAgICAgICAgbGV0IG9ic2VydmVycyA9IFtdOwogICAgICAgICAgaWYgKGJlaGF2aW9yTGlzdCkgewogICAgICAgICAgICBmb3IgKGxldCBpPTAsIGI7IGkgPCBiZWhhdmlvckxpc3QubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICBiID0gYmVoYXZpb3JMaXN0W2ldOwogICAgICAgICAgICAgIGlmIChiLm9ic2VydmVycykgewogICAgICAgICAgICAgICAgb2JzZXJ2ZXJzID0gb2JzZXJ2ZXJzLmNvbmNhdChiLm9ic2VydmVycyk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoaW5mby5vYnNlcnZlcnMpIHsKICAgICAgICAgICAgb2JzZXJ2ZXJzID0gb2JzZXJ2ZXJzLmNvbmNhdChpbmZvLm9ic2VydmVycyk7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gb2JzZXJ2ZXJzOwogICAgICAgIH0KCiAgICAgICAgLyoqCiAgICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICAgKi8KICAgICAgICBjcmVhdGVkKCkgewogICAgICAgICAgc3VwZXIuY3JlYXRlZCgpOwogICAgICAgICAgY29uc3QgbGlzdCA9IGxpZmVjeWNsZS5jcmVhdGVkOwogICAgICAgICAgaWYgKGxpc3QpIHsKICAgICAgICAgICAgZm9yIChsZXQgaT0wOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgIGxpc3RbaV0uY2FsbCh0aGlzKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLyoqCiAgICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICAgKi8KICAgICAgICBfcmVnaXN0ZXJlZCgpIHsKICAgICAgICAgIC8qIE5PVEU6IGBiZWZvcmVSZWdpc3RlcmAgaXMgY2FsbGVkIGhlcmUgZm9yIGJjLCBidXQgdGhlIGJlaGF2aW9yCiAgICAgICAgICAgIGlzIGRpZmZlcmVudCB0aGFuIGluIDEueC4gSW4gMS4wLCB0aGUgbWV0aG9kIHdhcyBjYWxsZWQgKmFmdGVyKgogICAgICAgICAgICBtaXhpbmcgcHJvdG90eXBlcyB0b2dldGhlciBidXQgKmJlZm9yZSogcHJvY2Vzc2luZyBvZiBtZXRhLW9iamVjdHMuCiAgICAgICAgICAgIEhvd2V2ZXIsIGR5bmFtaWMgZWZmZWN0cyBjYW4gc3RpbGwgYmUgc2V0IGhlcmUgYW5kIGNhbiBiZSBkb25lIGVpdGhlcgogICAgICAgICAgICBpbiBgYmVmb3JlUmVnaXN0ZXJgIG9yIGByZWdpc3RlcmVkYC4gSXQgaXMgbm8gbG9uZ2VyIHBvc3NpYmxlIHRvIHNldAogICAgICAgICAgICBgaXNgIGluIGBiZWZvcmVSZWdpc3RlcmAgYXMgeW91IGNvdWxkIGluIDEueC4KICAgICAgICAgICovCiAgICAgICAgICAvLyBvbmx5IHByb2NlZWQgaWYgdGhlIGdlbmVyYXRlZCBjbGFzcycgcHJvdG90eXBlIGhhcyBub3QgYmVlbiByZWdpc3RlcmVkLgogICAgICAgICAgY29uc3QgZ2VuZXJhdGVkUHJvdG8gPSBQb2x5bWVyR2VuZXJhdGVkLnByb3RvdHlwZTsKICAgICAgICAgIGlmICghZ2VuZXJhdGVkUHJvdG8uaGFzT3duUHJvcGVydHkoJ19faGFzUmVnaXN0ZXJGaW5pc2hlZCcpKSB7CiAgICAgICAgICAgIGdlbmVyYXRlZFByb3RvLl9faGFzUmVnaXN0ZXJGaW5pc2hlZCA9IHRydWU7CiAgICAgICAgICAgIC8vIGVuc3VyZSBzdXBlcmNsYXNzIGlzIHJlZ2lzdGVyZWQgZmlyc3QuCiAgICAgICAgICAgIHN1cGVyLl9yZWdpc3RlcmVkKCk7CiAgICAgICAgICAgIC8vIGNvcHkgcHJvcGVydGllcyBvbnRvIHRoZSBnZW5lcmF0ZWQgY2xhc3MgbGF6aWx5IGlmIHdlJ3JlIG9wdGltaXppbmcsCiAgICAgICAgICAgIGlmIChQb2x5bWVyLmxlZ2FjeU9wdGltaXphdGlvbnMpIHsKICAgICAgICAgICAgICBjb3B5UHJvcGVydGllc1RvUHJvdG8oZ2VuZXJhdGVkUHJvdG8pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSBsZWdhY3kgbGlmZWN5Y2xlIGlzIGNhbGxlZCBvbiB0aGUgKmVsZW1lbnQqJ3MgcHJvdG90eXBlCiAgICAgICAgICAgIC8vIGFuZCBub3QgdGhlIGdlbmVyYXRlZCBjbGFzcyBwcm90b3R5cGU7IGlmIHRoZSBlbGVtZW50IGhhcyBiZWVuCiAgICAgICAgICAgIC8vIGV4dGVuZGVkLCB0aGVzZSBhcmUgKm5vdCogdGhlIHNhbWUuCiAgICAgICAgICAgIGNvbnN0IHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpOwogICAgICAgICAgICBsZXQgbGlzdCA9IGxpZmVjeWNsZS5iZWZvcmVSZWdpc3RlcjsKICAgICAgICAgICAgaWYgKGxpc3QpIHsKICAgICAgICAgICAgICBmb3IgKGxldCBpPTA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICBsaXN0W2ldLmNhbGwocHJvdG8pOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBsaXN0ID0gbGlmZWN5Y2xlLnJlZ2lzdGVyZWQ7CiAgICAgICAgICAgIGlmIChsaXN0KSB7CiAgICAgICAgICAgICAgZm9yIChsZXQgaT0wOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgbGlzdFtpXS5jYWxsKHByb3RvKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAgICovCiAgICAgICAgX2FwcGx5TGlzdGVuZXJzKCkgewogICAgICAgICAgc3VwZXIuX2FwcGx5TGlzdGVuZXJzKCk7CiAgICAgICAgICBjb25zdCBsaXN0ID0gbGlmZWN5Y2xlLmxpc3RlbmVyczsKICAgICAgICAgIGlmIChsaXN0KSB7CiAgICAgICAgICAgIGZvciAobGV0IGk9MDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICBjb25zdCBsaXN0ZW5lcnMgPSBsaXN0W2ldOwogICAgICAgICAgICAgIGlmIChsaXN0ZW5lcnMpIHsKICAgICAgICAgICAgICAgIGZvciAobGV0IGwgaW4gbGlzdGVuZXJzKSB7CiAgICAgICAgICAgICAgICAgIHRoaXMuX2FkZE1ldGhvZEV2ZW50TGlzdGVuZXJUb05vZGUodGhpcywgbCwgbGlzdGVuZXJzW2xdKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8vIG5vdGU6IGV4Y2VwdGlvbiB0byAic3VwZXIgdGhlbiBtZSIgcnVsZTsKICAgICAgICAvLyBkbyB3b3JrIGJlZm9yZSBjYWxsaW5nIHN1cGVyIHNvIHRoYXQgc3VwZXIgYXR0cmlidXRlcwogICAgICAgIC8vIG9ubHkgYXBwbHkgaWYgbm90IGFscmVhZHkgc2V0LgogICAgICAgIC8qKgogICAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAgICovCiAgICAgICAgX2Vuc3VyZUF0dHJpYnV0ZXMoKSB7CiAgICAgICAgICBjb25zdCBsaXN0ID0gbGlmZWN5Y2xlLmhvc3RBdHRyaWJ1dGVzOwogICAgICAgICAgaWYgKGxpc3QpIHsKICAgICAgICAgICAgZm9yIChsZXQgaT1saXN0Lmxlbmd0aC0xOyBpID49IDA7IGktLSkgewogICAgICAgICAgICAgIGNvbnN0IGhvc3RBdHRyaWJ1dGVzID0gbGlzdFtpXTsKICAgICAgICAgICAgICBmb3IgKGxldCBhIGluIGhvc3RBdHRyaWJ1dGVzKSB7CiAgICAgICAgICAgICAgICAgIHRoaXMuX2Vuc3VyZUF0dHJpYnV0ZShhLCBob3N0QXR0cmlidXRlc1thXSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIHN1cGVyLl9lbnN1cmVBdHRyaWJ1dGVzKCk7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgICAqLwogICAgICAgIHJlYWR5KCkgewogICAgICAgICAgc3VwZXIucmVhZHkoKTsKICAgICAgICAgIGxldCBsaXN0ID0gbGlmZWN5Y2xlLnJlYWR5OwogICAgICAgICAgaWYgKGxpc3QpIHsKICAgICAgICAgICAgZm9yIChsZXQgaT0wOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgIGxpc3RbaV0uY2FsbCh0aGlzKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLyoqCiAgICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICAgKi8KICAgICAgICBhdHRhY2hlZCgpIHsKICAgICAgICAgIHN1cGVyLmF0dGFjaGVkKCk7CiAgICAgICAgICBsZXQgbGlzdCA9IGxpZmVjeWNsZS5hdHRhY2hlZDsKICAgICAgICAgIGlmIChsaXN0KSB7CiAgICAgICAgICAgIGZvciAobGV0IGk9MDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICBsaXN0W2ldLmNhbGwodGhpcyk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAgICovCiAgICAgICAgZGV0YWNoZWQoKSB7CiAgICAgICAgICBzdXBlci5kZXRhY2hlZCgpOwogICAgICAgICAgbGV0IGxpc3QgPSBsaWZlY3ljbGUuZGV0YWNoZWQ7CiAgICAgICAgICBpZiAobGlzdCkgewogICAgICAgICAgICBmb3IgKGxldCBpPTA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgbGlzdFtpXS5jYWxsKHRoaXMpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBJbXBsZW1lbnRzIG5hdGl2ZSBDdXN0b20gRWxlbWVudHMgYGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFja2AgdG8KICAgICAgICAgKiBzZXQgYW4gYXR0cmlidXRlIHZhbHVlIHRvIGEgcHJvcGVydHkgdmlhIGBfYXR0cmlidXRlVG9Qcm9wZXJ0eWAuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBOYW1lIG9mIGF0dHJpYnV0ZSB0aGF0IGNoYW5nZWQKICAgICAgICAgKiBAcGFyYW0gez9zdHJpbmd9IG9sZCBPbGQgYXR0cmlidXRlIHZhbHVlCiAgICAgICAgICogQHBhcmFtIHs/c3RyaW5nfSB2YWx1ZSBOZXcgYXR0cmlidXRlIHZhbHVlCiAgICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICAgKi8KICAgICAgICBhdHRyaWJ1dGVDaGFuZ2VkKG5hbWUsIG9sZCwgdmFsdWUpIHsKICAgICAgICAgIHN1cGVyLmF0dHJpYnV0ZUNoYW5nZWQoKTsKICAgICAgICAgIGxldCBsaXN0ID0gbGlmZWN5Y2xlLmF0dHJpYnV0ZUNoYW5nZWQ7CiAgICAgICAgICBpZiAobGlzdCkgewogICAgICAgICAgICBmb3IgKGxldCBpPTA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgbGlzdFtpXS5jYWxsKHRoaXMsIG5hbWUsIG9sZCwgdmFsdWUpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CgogICAgICAvLyBhcHBseSBiZWhhdmlvcnMsIG5vdGUgYWN0dWFsIGNvcHlpbmcgaXMgZG9uZSBsYXppbHkgYXQgZmlyc3QgaW5zdGFuY2UgY3JlYXRpb24KICAgICAgaWYgKGJlaGF2aW9ycykgewogICAgICAgIC8vIE5PVEU6IGVuc3VyZSB0aGUgYmVoYXZpb3IgaXMgZXh0ZW5kaW5nIGEgY2xhc3Mgd2l0aAogICAgICAgIC8vIGxlZ2FjeSBlbGVtZW50IGFwaS4gVGhpcyBpcyBuZWNlc3Nhcnkgc2luY2UgYmVoYXZpb3JzIGV4cGVjdCB0byBiZSBhYmxlCiAgICAgICAgLy8gdG8gYWNjZXNzIDEueCBsZWdhY3kgYXBpLgogICAgICAgIGlmICghQXJyYXkuaXNBcnJheShiZWhhdmlvcnMpKSB7CiAgICAgICAgICBiZWhhdmlvcnMgPSBbYmVoYXZpb3JzXTsKICAgICAgICB9CiAgICAgICAgbGV0IHN1cGVyQmVoYXZpb3JzID0gQmFzZS5wcm90b3R5cGUuYmVoYXZpb3JzOwogICAgICAgIC8vIGdldCBmbGF0dGVuZWQsIGRlZHVwZWQgbGlzdCBvZiBiZWhhdmlvcnMgKm5vdCogYWxyZWFkeSBvbiBzdXBlciBjbGFzcwogICAgICAgIGJlaGF2aW9yTGlzdCA9IGZsYXR0ZW5CZWhhdmlvcnMoYmVoYXZpb3JzLCBudWxsLCBzdXBlckJlaGF2aW9ycyk7CiAgICAgICAgUG9seW1lckdlbmVyYXRlZC5wcm90b3R5cGUuYmVoYXZpb3JzID0gc3VwZXJCZWhhdmlvcnMgPwogICAgICAgICAgc3VwZXJCZWhhdmlvcnMuY29uY2F0KGJlaGF2aW9ycykgOiBiZWhhdmlvckxpc3Q7CiAgICAgIH0KCiAgICAgIGNvbnN0IGNvcHlQcm9wZXJ0aWVzVG9Qcm90byA9IChwcm90bykgPT4gewogICAgICAgIGlmIChiZWhhdmlvckxpc3QpIHsKICAgICAgICAgIGFwcGx5QmVoYXZpb3JzKHByb3RvLCBiZWhhdmlvckxpc3QsIGxpZmVjeWNsZSk7CiAgICAgICAgfQogICAgICAgIGFwcGx5SW5mbyhwcm90bywgaW5mbywgbGlmZWN5Y2xlLCBleGNsdWRlT25JbmZvKTsKICAgICAgfTsKCiAgICAgIC8vIGNvcHkgcHJvcGVydGllcyBpZiB3ZSdyZSBub3Qgb3B0aW1pemluZwogICAgICBpZiAoIVBvbHltZXIubGVnYWN5T3B0aW1pemF0aW9ucykgewogICAgICAgIGNvcHlQcm9wZXJ0aWVzVG9Qcm90byhQb2x5bWVyR2VuZXJhdGVkLnByb3RvdHlwZSk7CiAgICAgIH0KCiAgICAgIFBvbHltZXJHZW5lcmF0ZWQuZ2VuZXJhdGVkRnJvbSA9IGluZm87CgogICAgICByZXR1cm4gUG9seW1lckdlbmVyYXRlZDsKICAgIH0KCiAgICAvKioKICAgICAqIEdlbmVyYXRlcyBhIGNsYXNzIHRoYXQgZXh0ZW5kcyBgUG9seW1lci5MZWdhY3lFbGVtZW50YCBiYXNlZCBvbiB0aGUKICAgICAqIHByb3ZpZGVkIGluZm8gb2JqZWN0LiAgTWV0YWRhdGEgb2JqZWN0cyBvbiB0aGUgYGluZm9gIG9iamVjdAogICAgICogKGBwcm9wZXJ0aWVzYCwgYG9ic2VydmVyc2AsIGBsaXN0ZW5lcnNgLCBgYmVoYXZpb3JzYCwgYGlzYCkgYXJlIHVzZWQKICAgICAqIGZvciBQb2x5bWVyJ3MgbWV0YS1wcm9ncmFtbWluZyBzeXN0ZW1zLCBhbmQgYW55IGZ1bmN0aW9ucyBhcmUgY29waWVkCiAgICAgKiB0byB0aGUgZ2VuZXJhdGVkIGNsYXNzLgogICAgICoKICAgICAqIFZhbGlkICJtZXRhZGF0YSIgdmFsdWVzIGFyZSBhcyBmb2xsb3dzOgogICAgICoKICAgICAqIGBpc2A6IFN0cmluZyBwcm92aWRpbmcgdGhlIHRhZyBuYW1lIHRvIHJlZ2lzdGVyIHRoZSBlbGVtZW50IHVuZGVyLiBJbgogICAgICogYWRkaXRpb24sIGlmIGEgYGRvbS1tb2R1bGVgIHdpdGggdGhlIHNhbWUgaWQgZXhpc3RzLCB0aGUgZmlyc3QgdGVtcGxhdGUKICAgICAqIGluIHRoYXQgYGRvbS1tb2R1bGVgIHdpbGwgYmUgc3RhbXBlZCBpbnRvIHRoZSBzaGFkb3cgcm9vdCBvZiB0aGlzIGVsZW1lbnQsCiAgICAgKiB3aXRoIHN1cHBvcnQgZm9yIGRlY2xhcmF0aXZlIGV2ZW50IGxpc3RlbmVycyAoYG9uLS4uLmApLCBQb2x5bWVyIGRhdGEKICAgICAqIGJpbmRpbmdzIChgW1suLi5dXWAgYW5kIGB7ey4uLn19YCksIGFuZCBpZC1iYXNlZCBub2RlIGZpbmRpbmcgaW50bwogICAgICogYHRoaXMuJGAuCiAgICAgKgogICAgICogYHByb3BlcnRpZXNgOiBPYmplY3QgZGVzY3JpYmluZyBwcm9wZXJ0eS1yZWxhdGVkIG1ldGFkYXRhIHVzZWQgYnkgUG9seW1lcgogICAgICogZmVhdHVyZXMgKGtleTogcHJvcGVydHkgbmFtZXMsIHZhbHVlOiBvYmplY3QgY29udGFpbmluZyBwcm9wZXJ0eSBtZXRhZGF0YSkuCiAgICAgKiBWYWxpZCBrZXlzIGluIHBlci1wcm9wZXJ0eSBtZXRhZGF0YSBpbmNsdWRlOgogICAgICogLSBgdHlwZWAgKFN0cmluZ3xOdW1iZXJ8T2JqZWN0fEFycmF5fC4uLik6IFVzZWQgYnkKICAgICAqICAgYGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFja2AgdG8gZGV0ZXJtaW5lIGhvdyBzdHJpbmctYmFzZWQgYXR0cmlidXRlcwogICAgICogICBhcmUgZGVzZXJpYWxpemVkIHRvIEphdmFTY3JpcHQgcHJvcGVydHkgdmFsdWVzLgogICAgICogLSBgbm90aWZ5YCAoYm9vbGVhbik6IENhdXNlcyBhIGNoYW5nZSBpbiB0aGUgcHJvcGVydHkgdG8gZmlyZSBhCiAgICAgKiAgIG5vbi1idWJibGluZyBldmVudCBjYWxsZWQgYDxwcm9wZXJ0eT4tY2hhbmdlZGAuIEVsZW1lbnRzIHRoYXQgaGF2ZQogICAgICogICBlbmFibGVkIHR3by13YXkgYmluZGluZyB0byB0aGUgcHJvcGVydHkgdXNlIHRoaXMgZXZlbnQgdG8gb2JzZXJ2ZSBjaGFuZ2VzLgogICAgICogLSBgcmVhZE9ubHlgIChib29sZWFuKTogQ3JlYXRlcyBhIGdldHRlciBmb3IgdGhlIHByb3BlcnR5LCBidXQgbm8gc2V0dGVyLgogICAgICogICBUbyBzZXQgYSByZWFkLW9ubHkgcHJvcGVydHksIHVzZSB0aGUgcHJpdmF0ZSBzZXR0ZXIgbWV0aG9kCiAgICAgKiAgIGBfc2V0UHJvcGVydHkocHJvcGVydHksIHZhbHVlKWAuCiAgICAgKiAtIGBvYnNlcnZlcmAgKHN0cmluZyk6IE9ic2VydmVyIG1ldGhvZCBuYW1lIHRoYXQgd2lsbCBiZSBjYWxsZWQgd2hlbgogICAgICogICB0aGUgcHJvcGVydHkgY2hhbmdlcy4gVGhlIGFyZ3VtZW50cyBvZiB0aGUgbWV0aG9kIGFyZQogICAgICogICBgKHZhbHVlLCBwcmV2aW91c1ZhbHVlKWAuCiAgICAgKiAtIGBjb21wdXRlZGAgKHN0cmluZyk6IFN0cmluZyBkZXNjcmliaW5nIG1ldGhvZCBhbmQgZGVwZW5kZW50IHByb3BlcnRpZXMKICAgICAqICAgZm9yIGNvbXB1dGluZyB0aGUgdmFsdWUgb2YgdGhpcyBwcm9wZXJ0eSAoZS5nLiBgJ2NvbXB1dGVGb28oYmFyLCB6b3QpJ2ApLgogICAgICogICBDb21wdXRlZCBwcm9wZXJ0aWVzIGFyZSByZWFkLW9ubHkgYnkgZGVmYXVsdCBhbmQgY2FuIG9ubHkgYmUgY2hhbmdlZAogICAgICogICB2aWEgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgY29tcHV0aW5nIG1ldGhvZC4KICAgICAqCiAgICAgKiBgb2JzZXJ2ZXJzYDogQXJyYXkgb2Ygc3RyaW5ncyBkZXNjcmliaW5nIG11bHRpLXByb3BlcnR5IG9ic2VydmVyIG1ldGhvZHMKICAgICAqICBhbmQgdGhlaXIgZGVwZW5kZW50IHByb3BlcnRpZXMgKGUuZy4gYCdvYnNlcnZlQUJDKGEsIGIsIGMpJ2ApLgogICAgICoKICAgICAqIGBsaXN0ZW5lcnNgOiBPYmplY3QgZGVzY3JpYmluZyBldmVudCBsaXN0ZW5lcnMgdG8gYmUgYWRkZWQgdG8gZWFjaAogICAgICogIGluc3RhbmNlIG9mIHRoaXMgZWxlbWVudCAoa2V5OiBldmVudCBuYW1lLCB2YWx1ZTogbWV0aG9kIG5hbWUpLgogICAgICoKICAgICAqIGBiZWhhdmlvcnNgOiBBcnJheSBvZiBhZGRpdGlvbmFsIGBpbmZvYCBvYmplY3RzIGNvbnRhaW5pbmcgbWV0YWRhdGEKICAgICAqIGFuZCBjYWxsYmFja3MgaW4gdGhlIHNhbWUgZm9ybWF0IGFzIHRoZSBgaW5mb2Agb2JqZWN0IGhlcmUgd2hpY2ggYXJlCiAgICAgKiBtZXJnZWQgaW50byB0aGlzIGVsZW1lbnQuCiAgICAgKgogICAgICogYGhvc3RBdHRyaWJ1dGVzYDogT2JqZWN0IGxpc3RpbmcgYXR0cmlidXRlcyB0byBiZSBhcHBsaWVkIHRvIHRoZSBob3N0CiAgICAgKiAgb25jZSBjcmVhdGVkIChrZXk6IGF0dHJpYnV0ZSBuYW1lLCB2YWx1ZTogYXR0cmlidXRlIHZhbHVlKS4gIFZhbHVlcwogICAgICogIGFyZSBzZXJpYWxpemVkIGJhc2VkIG9uIHRoZSB0eXBlIG9mIHRoZSB2YWx1ZS4gIEhvc3QgYXR0cmlidXRlcyBzaG91bGQKICAgICAqICBnZW5lcmFsbHkgYmUgbGltaXRlZCB0byBhdHRyaWJ1dGVzIHN1Y2ggYXMgYHRhYkluZGV4YCBhbmQgYGFyaWEtLi4uYC4KICAgICAqICBBdHRyaWJ1dGVzIGluIGBob3N0QXR0cmlidXRlc2AgYXJlIG9ubHkgYXBwbGllZCBpZiBhIHVzZXItc3VwcGxpZWQKICAgICAqICBhdHRyaWJ1dGUgaXMgbm90IGFscmVhZHkgcHJlc2VudCAoYXR0cmlidXRlcyBpbiBtYXJrdXAgb3ZlcnJpZGUKICAgICAqICBgaG9zdEF0dHJpYnV0ZXNgKS4KICAgICAqCiAgICAgKiBJbiBhZGRpdGlvbiwgdGhlIGZvbGxvd2luZyBQb2x5bWVyLXNwZWNpZmljIGNhbGxiYWNrcyBtYXkgYmUgcHJvdmlkZWQ6CiAgICAgKiAtIGByZWdpc3RlcmVkYDogY2FsbGVkIGFmdGVyIGZpcnN0IGluc3RhbmNlIG9mIHRoaXMgZWxlbWVudCwKICAgICAqIC0gYGNyZWF0ZWRgOiBjYWxsZWQgZHVyaW5nIGBjb25zdHJ1Y3RvcmAKICAgICAqIC0gYGF0dGFjaGVkYDogY2FsbGVkIGR1cmluZyBgY29ubmVjdGVkQ2FsbGJhY2tgCiAgICAgKiAtIGBkZXRhY2hlZGA6IGNhbGxlZCBkdXJpbmcgYGRpc2Nvbm5lY3RlZENhbGxiYWNrYAogICAgICogLSBgcmVhZHlgOiBjYWxsZWQgYmVmb3JlIGZpcnN0IGBhdHRhY2hlZGAsIGFmdGVyIGFsbCBwcm9wZXJ0aWVzIG9mCiAgICAgKiAgIHRoaXMgZWxlbWVudCBoYXZlIGJlZW4gcHJvcGFnYXRlZCB0byBpdHMgdGVtcGxhdGUgYW5kIGFsbCBvYnNlcnZlcnMKICAgICAqICAgaGF2ZSBydW4KICAgICAqCiAgICAgKiBAcGFyYW0geyFQb2x5bWVySW5pdH0gaW5mbyBPYmplY3QgY29udGFpbmluZyBQb2x5bWVyIG1ldGFkYXRhIGFuZCBmdW5jdGlvbnMKICAgICAqICAgdG8gYmVjb21lIGNsYXNzIG1ldGhvZHMuCiAgICAgKiBAdGVtcGxhdGUgVAogICAgICogQHBhcmFtIHtmdW5jdGlvbihUKTpUfSBtaXhpbiBPcHRpb25hbCBtaXhpbiB0byBhcHBseSB0byBsZWdhY3kgYmFzZSBjbGFzcwogICAgICogICBiZWZvcmUgZXh0ZW5kaW5nIHdpdGggUG9seW1lciBtZXRhcHJvZ3JhbW1pbmcuCiAgICAgKiBAcmV0dXJuIHtmdW5jdGlvbihuZXc6SFRNTEVsZW1lbnQpfSBHZW5lcmF0ZWQgY2xhc3MKICAgICAqIEBtZW1iZXJvZiBQb2x5bWVyCiAgICAgKi8KICAgIFBvbHltZXIuQ2xhc3MgPSBmdW5jdGlvbihpbmZvLCBtaXhpbikgewogICAgICBpZiAoIWluZm8pIHsKICAgICAgICBjb25zb2xlLndhcm4oJ1BvbHltZXIuQ2xhc3MgcmVxdWlyZXMgYGluZm9gIGFyZ3VtZW50Jyk7CiAgICAgIH0KICAgICAgbGV0IGtsYXNzID0gbWl4aW4gPyBtaXhpbihQb2x5bWVyLkxlZ2FjeUVsZW1lbnRNaXhpbihIVE1MRWxlbWVudCkpIDoKICAgICAgICAgIFBvbHltZXIuTGVnYWN5RWxlbWVudE1peGluKEhUTUxFbGVtZW50KTsKICAgICAga2xhc3MgPSBHZW5lcmF0ZUNsYXNzRnJvbUluZm8oaW5mbywga2xhc3MsIGluZm8uYmVoYXZpb3JzKTsKICAgICAgaWYgKGluZm8uX2VuYWJsZURpc2FibGVVcGdyYWRlKSB7CiAgICAgICAga2xhc3MgPSBQb2x5bWVyLkRpc2FibGVVcGdyYWRlTWl4aW4oa2xhc3MpOwogICAgICB9CiAgICAgIC8vIGRlY29yYXRlIGtsYXNzIHdpdGggcmVnaXN0cmF0aW9uIGluZm8KICAgICAga2xhc3MuaXMgPSBrbGFzcy5wcm90b3R5cGUuaXMgPSBpbmZvLmlzOwogICAgICByZXR1cm4ga2xhc3M7CiAgICB9OwoKICAgIFBvbHltZXIubWl4aW5CZWhhdmlvcnMgPSBtaXhpbkJlaGF2aW9yczsKCiAgfSkoKTsKCjwvc2NyaXB0PjxzY3JpcHQ+CgogIChmdW5jdGlvbigpIHsKICAgICd1c2Ugc3RyaWN0JzsKCiAgICAvKioKICAgICAqIExlZ2FjeSBjbGFzcyBmYWN0b3J5IGFuZCByZWdpc3RyYXRpb24gaGVscGVyIGZvciBkZWZpbmluZyBQb2x5bWVyCiAgICAgKiBlbGVtZW50cy4KICAgICAqCiAgICAgKiBUaGlzIG1ldGhvZCBpcyBlcXVpdmFsZW50IHRvCiAgICAgKiBgY3VzdG9tRWxlbWVudHMuZGVmaW5lKGluZm8uaXMsIFBvbHltZXIuQ2xhc3MoaW5mbykpO2AKICAgICAqCiAgICAgKiBTZWUgYFBvbHltZXIuQ2xhc3NgIGZvciBkZXRhaWxzIG9uIHZhbGlkIGxlZ2FjeSBtZXRhZGF0YSBmb3JtYXQgZm9yIGBpbmZvYC4KICAgICAqCiAgICAgKiBAZ2xvYmFsCiAgICAgKiBAb3ZlcnJpZGUKICAgICAqIEBmdW5jdGlvbiBQb2x5bWVyCiAgICAgKiBAcGFyYW0geyFQb2x5bWVySW5pdH0gaW5mbyBPYmplY3QgY29udGFpbmluZyBQb2x5bWVyIG1ldGFkYXRhIGFuZCBmdW5jdGlvbnMKICAgICAqICAgdG8gYmVjb21lIGNsYXNzIG1ldGhvZHMuCiAgICAgKiBAcmV0dXJuIHtmdW5jdGlvbihuZXc6IEhUTUxFbGVtZW50KX0gR2VuZXJhdGVkIGNsYXNzCiAgICAgKiBAc3VwcHJlc3Mge2R1cGxpY2F0ZSwgaW52YWxpZENhc3RzLCBjaGVja1R5cGVzfQogICAgICovCiAgICB3aW5kb3cuUG9seW1lci5fcG9seW1lckZuID0gZnVuY3Rpb24oaW5mbykgewogICAgICAvLyBpZiBpbnB1dCBpcyBhIGBjbGFzc2AgKGFrYSBhIGZ1bmN0aW9uIHdpdGggYSBwcm90b3R5cGUpLCB1c2UgdGhlIHByb3RvdHlwZQogICAgICAvLyByZW1lbWJlciB0aGF0IHRoZSBgY29uc3RydWN0b3JgIHdpbGwgbmV2ZXIgYmUgY2FsbGVkCiAgICAgIGxldCBrbGFzczsKICAgICAgaWYgKHR5cGVvZiBpbmZvID09PSAnZnVuY3Rpb24nKSB7CiAgICAgICAga2xhc3MgPSBpbmZvOwogICAgICB9IGVsc2UgewogICAgICAgIGtsYXNzID0gUG9seW1lci5DbGFzcyhpbmZvKTsKICAgICAgfQogICAgICBjdXN0b21FbGVtZW50cy5kZWZpbmUoa2xhc3MuaXMsIC8qKiBAdHlwZSB7IUhUTUxFbGVtZW50fSAqLyhrbGFzcykpOwogICAgICByZXR1cm4ga2xhc3M7CiAgICB9OwoKICB9KSgpOwoKPC9zY3JpcHQ+PHNjcmlwdD4KKGZ1bmN0aW9uKCkgewogICd1c2Ugc3RyaWN0JzsKCiAgLy8gQ29tbW9uIGltcGxlbWVudGF0aW9uIGZvciBtaXhpbiAmIGJlaGF2aW9yCiAgZnVuY3Rpb24gbXV0YWJsZVByb3BlcnR5Q2hhbmdlKGluc3QsIHByb3BlcnR5LCB2YWx1ZSwgb2xkLCBtdXRhYmxlRGF0YSkgewogICAgbGV0IGlzT2JqZWN0OwogICAgaWYgKG11dGFibGVEYXRhKSB7CiAgICAgIGlzT2JqZWN0ID0gKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGwpOwogICAgICAvLyBQdWxsIGBvbGRgIGZvciBPYmplY3RzIGZyb20gdGVtcCBjYWNoZSwgYnV0IHRyZWF0IGBudWxsYCBhcyBhIHByaW1pdGl2ZQogICAgICBpZiAoaXNPYmplY3QpIHsKICAgICAgICBvbGQgPSBpbnN0Ll9fZGF0YVRlbXBbcHJvcGVydHldOwogICAgICB9CiAgICB9CiAgICAvLyBTdHJpY3QgZXF1YWxpdHkgY2hlY2ssIGJ1dCByZXR1cm4gZmFsc2UgZm9yIE5hTj09PU5hTgogICAgbGV0IHNob3VsZENoYW5nZSA9IChvbGQgIT09IHZhbHVlICYmIChvbGQgPT09IG9sZCB8fCB2YWx1ZSA9PT0gdmFsdWUpKTsKICAgIC8vIE9iamVjdHMgYXJlIHN0b3JlZCBpbiB0ZW1wb3JhcnkgY2FjaGUgKGNsZWFyZWQgYXQgZW5kIG9mCiAgICAvLyB0dXJuKSwgd2hpY2ggaXMgdXNlZCBmb3IgZGlydHktY2hlY2tpbmcKICAgIGlmIChpc09iamVjdCAmJiBzaG91bGRDaGFuZ2UpIHsKICAgICAgaW5zdC5fX2RhdGFUZW1wW3Byb3BlcnR5XSA9IHZhbHVlOwogICAgfQogICAgcmV0dXJuIHNob3VsZENoYW5nZTsKICB9CgogIC8qKgogICAqIEVsZW1lbnQgY2xhc3MgbWl4aW4gdG8gc2tpcCBzdHJpY3QgZGlydHktY2hlY2tpbmcgZm9yIG9iamVjdHMgYW5kIGFycmF5cwogICAqIChhbHdheXMgY29uc2lkZXIgdGhlbSB0byBiZSAiZGlydHkiKSwgZm9yIHVzZSBvbiBlbGVtZW50cyB1dGlsaXppbmcKICAgKiBgUG9seW1lci5Qcm9wZXJ0eUVmZmVjdHNgCiAgICoKICAgKiBCeSBkZWZhdWx0LCBgUG9seW1lci5Qcm9wZXJ0eUVmZmVjdHNgIHBlcmZvcm1zIHN0cmljdCBkaXJ0eSBjaGVja2luZyBvbgogICAqIG9iamVjdHMsIHdoaWNoIG1lYW5zIHRoYXQgYW55IGRlZXAgbW9kaWZpY2F0aW9ucyB0byBhbiBvYmplY3Qgb3IgYXJyYXkgd2lsbAogICAqIG5vdCBiZSBwcm9wYWdhdGVkIHVubGVzcyAiaW1tdXRhYmxlIiBkYXRhIHBhdHRlcm5zIGFyZSB1c2VkIChpLmUuIGFsbCBvYmplY3QKICAgKiByZWZlcmVuY2VzIGZyb20gdGhlIHJvb3QgdG8gdGhlIG11dGF0aW9uIHdlcmUgY2hhbmdlZCkuCiAgICoKICAgKiBQb2x5bWVyIGFsc28gcHJvdmlkZXMgYSBwcm9wcmlldGFyeSBkYXRhIG11dGF0aW9uIGFuZCBwYXRoIG5vdGlmaWNhdGlvbiBBUEkKICAgKiAoZS5nLiBgbm90aWZ5UGF0aGAsIGBzZXRgLCBhbmQgYXJyYXkgbXV0YXRpb24gQVBJJ3MpIHRoYXQgYWxsb3cgZWZmaWNpZW50CiAgICogbXV0YXRpb24gYW5kIG5vdGlmaWNhdGlvbiBvZiBkZWVwIGNoYW5nZXMgaW4gYW4gb2JqZWN0IGdyYXBoIHRvIGFsbCBlbGVtZW50cwogICAqIGJvdW5kIHRvIHRoZSBzYW1lIG9iamVjdCBncmFwaC4KICAgKgogICAqIEluIGNhc2VzIHdoZXJlIG5laXRoZXIgaW1tdXRhYmxlIHBhdHRlcm5zIG5vciB0aGUgZGF0YSBtdXRhdGlvbiBBUEkgY2FuIGJlCiAgICogdXNlZCwgYXBwbHlpbmcgdGhpcyBtaXhpbiB3aWxsIGNhdXNlIFBvbHltZXIgdG8gc2tpcCBkaXJ0eSBjaGVja2luZyBmb3IKICAgKiBvYmplY3RzIGFuZCBhcnJheXMgKGFsd2F5cyBjb25zaWRlciB0aGVtIHRvIGJlICJkaXJ0eSIpLiAgVGhpcyBhbGxvd3MgYQogICAqIHVzZXIgdG8gbWFrZSBhIGRlZXAgbW9kaWZpY2F0aW9uIHRvIGEgYm91bmQgb2JqZWN0IGdyYXBoLCBhbmQgdGhlbiBlaXRoZXIKICAgKiBzaW1wbHkgcmUtc2V0IHRoZSBvYmplY3QgKGUuZy4gYHRoaXMuaXRlbXMgPSB0aGlzLml0ZW1zYCkgb3IgY2FsbCBgbm90aWZ5UGF0aGAKICAgKiAoZS5nLiBgdGhpcy5ub3RpZnlQYXRoKCdpdGVtcycpYCkgdG8gdXBkYXRlIHRoZSB0cmVlLiAgTm90ZSB0aGF0IGFsbAogICAqIGVsZW1lbnRzIHRoYXQgd2lzaCB0byBiZSB1cGRhdGVkIGJhc2VkIG9uIGRlZXAgbXV0YXRpb25zIG11c3QgYXBwbHkgdGhpcwogICAqIG1peGluIG9yIG90aGVyd2lzZSBza2lwIHN0cmljdCBkaXJ0eSBjaGVja2luZyBmb3Igb2JqZWN0cy9hcnJheXMuCiAgICogU3BlY2lmaWNhbGx5LCBhbnkgZWxlbWVudHMgaW4gdGhlIGJpbmRpbmcgdHJlZSBiZXR3ZWVuIHRoZSBzb3VyY2Ugb2YgYQogICAqIG11dGF0aW9uIGFuZCB0aGUgY29uc3VtcHRpb24gb2YgaXQgbXVzdCBhcHBseSB0aGlzIG1peGluIG9yIGVuYWJsZSB0aGUKICAgKiBgUG9seW1lci5PcHRpb25hbE11dGFibGVEYXRhYCBtaXhpbi4KICAgKgogICAqIEluIG9yZGVyIHRvIG1ha2UgdGhlIGRpcnR5IGNoZWNrIHN0cmF0ZWd5IGNvbmZpZ3VyYWJsZSwgc2VlCiAgICogYFBvbHltZXIuT3B0aW9uYWxNdXRhYmxlRGF0YWAuCiAgICoKICAgKiBOb3RlLCB0aGUgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzIG9mIHByb3BhZ2F0aW5nIGxhcmdlIG9iamVjdCBncmFwaHMKICAgKiB3aWxsIGJlIHdvcnNlIGFzIG9wcG9zZWQgdG8gdXNpbmcgc3RyaWN0IGRpcnR5IGNoZWNraW5nIHdpdGggaW1tdXRhYmxlCiAgICogcGF0dGVybnMgb3IgUG9seW1lcidzIHBhdGggbm90aWZpY2F0aW9uIEFQSS4KICAgKgogICAqIEBtaXhpbkZ1bmN0aW9uCiAgICogQHBvbHltZXIKICAgKiBAbWVtYmVyb2YgUG9seW1lcgogICAqIEBzdW1tYXJ5IEVsZW1lbnQgY2xhc3MgbWl4aW4gdG8gc2tpcCBzdHJpY3QgZGlydHktY2hlY2tpbmcgZm9yIG9iamVjdHMKICAgKiAgIGFuZCBhcnJheXMKICAgKi8KICBQb2x5bWVyLk11dGFibGVEYXRhID0gUG9seW1lci5kZWR1cGluZ01peGluKHN1cGVyQ2xhc3MgPT4gewoKICAgIC8qKgogICAgICogQHBvbHltZXIKICAgICAqIEBtaXhpbkNsYXNzCiAgICAgKiBAaW1wbGVtZW50cyB7UG9seW1lcl9NdXRhYmxlRGF0YX0KICAgICAqLwogICAgY2xhc3MgTXV0YWJsZURhdGEgZXh0ZW5kcyBzdXBlckNsYXNzIHsKICAgICAgLyoqCiAgICAgICAqIE92ZXJyaWRlcyBgUG9seW1lci5Qcm9wZXJ0eUVmZmVjdHNgIHRvIHByb3ZpZGUgb3B0aW9uIGZvciBza2lwcGluZwogICAgICAgKiBzdHJpY3QgZXF1YWxpdHkgY2hlY2tpbmcgZm9yIE9iamVjdHMgYW5kIEFycmF5cy4KICAgICAgICoKICAgICAgICogVGhpcyBtZXRob2QgcHVsbHMgdGhlIHZhbHVlIHRvIGRpcnR5IGNoZWNrIGFnYWluc3QgZnJvbSB0aGUgYF9fZGF0YVRlbXBgCiAgICAgICAqIGNhY2hlIChyYXRoZXIgdGhhbiB0aGUgbm9ybWFsIGBfX2RhdGFgIGNhY2hlKSBmb3IgT2JqZWN0cy4gIFNpbmNlIHRoZSB0ZW1wCiAgICAgICAqIGNhY2hlIGlzIGNsZWFyZWQgYXQgdGhlIGVuZCBvZiBhIHR1cm4sIHRoaXMgaW1wbGVtZW50YXRpb24gYWxsb3dzCiAgICAgICAqIHNpZGUtZWZmZWN0cyBvZiBkZWVwIG9iamVjdCBjaGFuZ2VzIHRvIGJlIHByb2Nlc3NlZCBieSByZS1zZXR0aW5nIHRoZQogICAgICAgKiBzYW1lIG9iamVjdCAodXNpbmcgdGhlIHRlbXAgY2FjaGUgYXMgYW4gaW4tdHVybiBiYWNrc3RvcCB0byBwcmV2ZW50CiAgICAgICAqIGN5Y2xlcyBkdWUgdG8gMi13YXkgbm90aWZpY2F0aW9uKS4KICAgICAgICoKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IFByb3BlcnR5IG5hbWUKICAgICAgICogQHBhcmFtIHsqfSB2YWx1ZSBOZXcgcHJvcGVydHkgdmFsdWUKICAgICAgICogQHBhcmFtIHsqfSBvbGQgUHJldmlvdXMgcHJvcGVydHkgdmFsdWUKICAgICAgICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB0aGUgcHJvcGVydHkgc2hvdWxkIGJlIGNvbnNpZGVyZWQgYSBjaGFuZ2UKICAgICAgICogQHByb3RlY3RlZAogICAgICAgKi8KICAgICAgX3Nob3VsZFByb3BlcnR5Q2hhbmdlKHByb3BlcnR5LCB2YWx1ZSwgb2xkKSB7CiAgICAgICAgcmV0dXJuIG11dGFibGVQcm9wZXJ0eUNoYW5nZSh0aGlzLCBwcm9wZXJ0eSwgdmFsdWUsIG9sZCwgdHJ1ZSk7CiAgICAgIH0KCiAgICB9CgogICAgcmV0dXJuIE11dGFibGVEYXRhOwoKICB9KTsKCgogIC8qKgogICAqIEVsZW1lbnQgY2xhc3MgbWl4aW4gdG8gYWRkIHRoZSBvcHRpb25hbCBhYmlsaXR5IHRvIHNraXAgc3RyaWN0CiAgICogZGlydHktY2hlY2tpbmcgZm9yIG9iamVjdHMgYW5kIGFycmF5cyAoYWx3YXlzIGNvbnNpZGVyIHRoZW0gdG8gYmUKICAgKiAiZGlydHkiKSBieSBzZXR0aW5nIGEgYG11dGFibGUtZGF0YWAgYXR0cmlidXRlIG9uIGFuIGVsZW1lbnQgaW5zdGFuY2UuCiAgICoKICAgKiBCeSBkZWZhdWx0LCBgUG9seW1lci5Qcm9wZXJ0eUVmZmVjdHNgIHBlcmZvcm1zIHN0cmljdCBkaXJ0eSBjaGVja2luZyBvbgogICAqIG9iamVjdHMsIHdoaWNoIG1lYW5zIHRoYXQgYW55IGRlZXAgbW9kaWZpY2F0aW9ucyB0byBhbiBvYmplY3Qgb3IgYXJyYXkgd2lsbAogICAqIG5vdCBiZSBwcm9wYWdhdGVkIHVubGVzcyAiaW1tdXRhYmxlIiBkYXRhIHBhdHRlcm5zIGFyZSB1c2VkIChpLmUuIGFsbCBvYmplY3QKICAgKiByZWZlcmVuY2VzIGZyb20gdGhlIHJvb3QgdG8gdGhlIG11dGF0aW9uIHdlcmUgY2hhbmdlZCkuCiAgICoKICAgKiBQb2x5bWVyIGFsc28gcHJvdmlkZXMgYSBwcm9wcmlldGFyeSBkYXRhIG11dGF0aW9uIGFuZCBwYXRoIG5vdGlmaWNhdGlvbiBBUEkKICAgKiAoZS5nLiBgbm90aWZ5UGF0aGAsIGBzZXRgLCBhbmQgYXJyYXkgbXV0YXRpb24gQVBJJ3MpIHRoYXQgYWxsb3cgZWZmaWNpZW50CiAgICogbXV0YXRpb24gYW5kIG5vdGlmaWNhdGlvbiBvZiBkZWVwIGNoYW5nZXMgaW4gYW4gb2JqZWN0IGdyYXBoIHRvIGFsbCBlbGVtZW50cwogICAqIGJvdW5kIHRvIHRoZSBzYW1lIG9iamVjdCBncmFwaC4KICAgKgogICAqIEluIGNhc2VzIHdoZXJlIG5laXRoZXIgaW1tdXRhYmxlIHBhdHRlcm5zIG5vciB0aGUgZGF0YSBtdXRhdGlvbiBBUEkgY2FuIGJlCiAgICogdXNlZCwgYXBwbHlpbmcgdGhpcyBtaXhpbiB3aWxsIGFsbG93IFBvbHltZXIgdG8gc2tpcCBkaXJ0eSBjaGVja2luZyBmb3IKICAgKiBvYmplY3RzIGFuZCBhcnJheXMgKGFsd2F5cyBjb25zaWRlciB0aGVtIHRvIGJlICJkaXJ0eSIpLiAgVGhpcyBhbGxvd3MgYQogICAqIHVzZXIgdG8gbWFrZSBhIGRlZXAgbW9kaWZpY2F0aW9uIHRvIGEgYm91bmQgb2JqZWN0IGdyYXBoLCBhbmQgdGhlbiBlaXRoZXIKICAgKiBzaW1wbHkgcmUtc2V0IHRoZSBvYmplY3QgKGUuZy4gYHRoaXMuaXRlbXMgPSB0aGlzLml0ZW1zYCkgb3IgY2FsbCBgbm90aWZ5UGF0aGAKICAgKiAoZS5nLiBgdGhpcy5ub3RpZnlQYXRoKCdpdGVtcycpYCkgdG8gdXBkYXRlIHRoZSB0cmVlLiAgTm90ZSB0aGF0IGFsbAogICAqIGVsZW1lbnRzIHRoYXQgd2lzaCB0byBiZSB1cGRhdGVkIGJhc2VkIG9uIGRlZXAgbXV0YXRpb25zIG11c3QgYXBwbHkgdGhpcwogICAqIG1peGluIG9yIG90aGVyd2lzZSBza2lwIHN0cmljdCBkaXJ0eSBjaGVja2luZyBmb3Igb2JqZWN0cy9hcnJheXMuCiAgICogU3BlY2lmaWNhbGx5LCBhbnkgZWxlbWVudHMgaW4gdGhlIGJpbmRpbmcgdHJlZSBiZXR3ZWVuIHRoZSBzb3VyY2Ugb2YgYQogICAqIG11dGF0aW9uIGFuZCB0aGUgY29uc3VtcHRpb24gb2YgaXQgbXVzdCBlbmFibGUgdGhpcyBtaXhpbiBvciBhcHBseSB0aGUKICAgKiBgUG9seW1lci5NdXRhYmxlRGF0YWAgbWl4aW4uCiAgICoKICAgKiBXaGlsZSB0aGlzIG1peGluIGFkZHMgdGhlIGFiaWxpdHkgdG8gZm9yZ28gT2JqZWN0L0FycmF5IGRpcnR5IGNoZWNraW5nLAogICAqIHRoZSBgbXV0YWJsZURhdGFgIGZsYWcgZGVmYXVsdHMgdG8gZmFsc2UgYW5kIG11c3QgYmUgc2V0IG9uIHRoZSBpbnN0YW5jZS4KICAgKgogICAqIE5vdGUsIHRoZSBwZXJmb3JtYW5jZSBjaGFyYWN0ZXJpc3RpY3Mgb2YgcHJvcGFnYXRpbmcgbGFyZ2Ugb2JqZWN0IGdyYXBocwogICAqIHdpbGwgYmUgd29yc2UgYnkgcmVseWluZyBvbiBgbXV0YWJsZURhdGE6IHRydWVgIGFzIG9wcG9zZWQgdG8gdXNpbmcKICAgKiBzdHJpY3QgZGlydHkgY2hlY2tpbmcgd2l0aCBpbW11dGFibGUgcGF0dGVybnMgb3IgUG9seW1lcidzIHBhdGggbm90aWZpY2F0aW9uCiAgICogQVBJLgogICAqCiAgICogQG1peGluRnVuY3Rpb24KICAgKiBAcG9seW1lcgogICAqIEBtZW1iZXJvZiBQb2x5bWVyCiAgICogQHN1bW1hcnkgRWxlbWVudCBjbGFzcyBtaXhpbiB0byBvcHRpb25hbGx5IHNraXAgc3RyaWN0IGRpcnR5LWNoZWNraW5nCiAgICogICBmb3Igb2JqZWN0cyBhbmQgYXJyYXlzCiAgICovCiAgUG9seW1lci5PcHRpb25hbE11dGFibGVEYXRhID0gUG9seW1lci5kZWR1cGluZ01peGluKHN1cGVyQ2xhc3MgPT4gewoKICAgIC8qKgogICAgICogQG1peGluQ2xhc3MKICAgICAqIEBwb2x5bWVyCiAgICAgKiBAaW1wbGVtZW50cyB7UG9seW1lcl9PcHRpb25hbE11dGFibGVEYXRhfQogICAgICovCiAgICBjbGFzcyBPcHRpb25hbE11dGFibGVEYXRhIGV4dGVuZHMgc3VwZXJDbGFzcyB7CgogICAgICBzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKSB7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIC8qKgogICAgICAgICAgICogSW5zdGFuY2UtbGV2ZWwgZmxhZyBmb3IgY29uZmlndXJpbmcgdGhlIGRpcnR5LWNoZWNraW5nIHN0cmF0ZWd5CiAgICAgICAgICAgKiBmb3IgdGhpcyBlbGVtZW50LiAgV2hlbiB0cnVlLCBPYmplY3RzIGFuZCBBcnJheXMgd2lsbCBza2lwIGRpcnR5CiAgICAgICAgICAgKiBjaGVja2luZywgb3RoZXJ3aXNlIHN0cmljdCBlcXVhbGl0eSBjaGVja2luZyB3aWxsIGJlIHVzZWQuCiAgICAgICAgICAgKi8KICAgICAgICAgIG11dGFibGVEYXRhOiBCb29sZWFuCiAgICAgICAgfTsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIE92ZXJyaWRlcyBgUG9seW1lci5Qcm9wZXJ0eUVmZmVjdHNgIHRvIHByb3ZpZGUgb3B0aW9uIGZvciBza2lwcGluZwogICAgICAgKiBzdHJpY3QgZXF1YWxpdHkgY2hlY2tpbmcgZm9yIE9iamVjdHMgYW5kIEFycmF5cy4KICAgICAgICoKICAgICAgICogV2hlbiBgdGhpcy5tdXRhYmxlRGF0YWAgaXMgdHJ1ZSBvbiB0aGlzIGluc3RhbmNlLCB0aGlzIG1ldGhvZAogICAgICAgKiBwdWxscyB0aGUgdmFsdWUgdG8gZGlydHkgY2hlY2sgYWdhaW5zdCBmcm9tIHRoZSBgX19kYXRhVGVtcGAgY2FjaGUKICAgICAgICogKHJhdGhlciB0aGFuIHRoZSBub3JtYWwgYF9fZGF0YWAgY2FjaGUpIGZvciBPYmplY3RzLiAgU2luY2UgdGhlIHRlbXAKICAgICAgICogY2FjaGUgaXMgY2xlYXJlZCBhdCB0aGUgZW5kIG9mIGEgdHVybiwgdGhpcyBpbXBsZW1lbnRhdGlvbiBhbGxvd3MKICAgICAgICogc2lkZS1lZmZlY3RzIG9mIGRlZXAgb2JqZWN0IGNoYW5nZXMgdG8gYmUgcHJvY2Vzc2VkIGJ5IHJlLXNldHRpbmcgdGhlCiAgICAgICAqIHNhbWUgb2JqZWN0ICh1c2luZyB0aGUgdGVtcCBjYWNoZSBhcyBhbiBpbi10dXJuIGJhY2tzdG9wIHRvIHByZXZlbnQKICAgICAgICogY3ljbGVzIGR1ZSB0byAyLXdheSBub3RpZmljYXRpb24pLgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkgUHJvcGVydHkgbmFtZQogICAgICAgKiBAcGFyYW0geyp9IHZhbHVlIE5ldyBwcm9wZXJ0eSB2YWx1ZQogICAgICAgKiBAcGFyYW0geyp9IG9sZCBQcmV2aW91cyBwcm9wZXJ0eSB2YWx1ZQogICAgICAgKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSBwcm9wZXJ0eSBzaG91bGQgYmUgY29uc2lkZXJlZCBhIGNoYW5nZQogICAgICAgKiBAcHJvdGVjdGVkCiAgICAgICAqLwogICAgICBfc2hvdWxkUHJvcGVydHlDaGFuZ2UocHJvcGVydHksIHZhbHVlLCBvbGQpIHsKICAgICAgICByZXR1cm4gbXV0YWJsZVByb3BlcnR5Q2hhbmdlKHRoaXMsIHByb3BlcnR5LCB2YWx1ZSwgb2xkLCB0aGlzLm11dGFibGVEYXRhKTsKICAgICAgfQogICAgfQoKICAgIHJldHVybiBPcHRpb25hbE11dGFibGVEYXRhOwoKICB9KTsKCiAgLy8gRXhwb3J0IGZvciB1c2UgYnkgbGVnYWN5IGJlaGF2aW9yCiAgUG9seW1lci5NdXRhYmxlRGF0YS5fbXV0YWJsZVByb3BlcnR5Q2hhbmdlID0gbXV0YWJsZVByb3BlcnR5Q2hhbmdlOwoKfSkoKTsKPC9zY3JpcHQ+PHNjcmlwdD4KICAoZnVuY3Rpb24oKSB7CiAgICAndXNlIHN0cmljdCc7CgogICAgLy8gQmFzZSBjbGFzcyBmb3IgSFRNTFRlbXBsYXRlRWxlbWVudCBleHRlbnNpb24gdGhhdCBoYXMgcHJvcGVydHkgZWZmZWN0cwogICAgLy8gbWFjaGluZXJ5IGZvciBwcm9wYWdhdGluZyBob3N0IHByb3BlcnRpZXMgdG8gY2hpbGRyZW4uIFRoaXMgaXMgYW4gRVM1CiAgICAvLyBjbGFzcyBvbmx5IGJlY2F1c2UgQmFiZWwgKGluY29ycmVjdGx5KSByZXF1aXJlcyBzdXBlcigpIGluIHRoZSBjbGFzcwogICAgLy8gY29uc3RydWN0b3IgZXZlbiB0aG91Z2ggbm8gYHRoaXNgIGlzIHVzZWQgYW5kIGl0IHJldHVybnMgYW4gaW5zdGFuY2UuCiAgICBsZXQgbmV3SW5zdGFuY2UgPSBudWxsOwoKICAgIC8qKgogICAgICogQGNvbnN0cnVjdG9yCiAgICAgKiBAZXh0ZW5kcyB7SFRNTFRlbXBsYXRlRWxlbWVudH0KICAgICAqIEBwcml2YXRlCiAgICAgKi8KICAgIGZ1bmN0aW9uIEhUTUxUZW1wbGF0ZUVsZW1lbnRFeHRlbnNpb24oKSB7IHJldHVybiBuZXdJbnN0YW5jZTsgfQogICAgSFRNTFRlbXBsYXRlRWxlbWVudEV4dGVuc2lvbi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEhUTUxUZW1wbGF0ZUVsZW1lbnQucHJvdG90eXBlLCB7CiAgICAgIGNvbnN0cnVjdG9yOiB7CiAgICAgICAgdmFsdWU6IEhUTUxUZW1wbGF0ZUVsZW1lbnRFeHRlbnNpb24sCiAgICAgICAgd3JpdGFibGU6IHRydWUKICAgICAgfQogICAgfSk7CgogICAgLyoqCiAgICAgKiBAY29uc3RydWN0b3IKICAgICAqIEBpbXBsZW1lbnRzIHtQb2x5bWVyX1Byb3BlcnR5RWZmZWN0c30KICAgICAqIEBleHRlbmRzIHtIVE1MVGVtcGxhdGVFbGVtZW50RXh0ZW5zaW9ufQogICAgICogQHByaXZhdGUKICAgICAqLwogICAgY29uc3QgRGF0YVRlbXBsYXRlID0gUG9seW1lci5Qcm9wZXJ0eUVmZmVjdHMoSFRNTFRlbXBsYXRlRWxlbWVudEV4dGVuc2lvbik7CgogICAgLyoqCiAgICAgKiBAY29uc3RydWN0b3IKICAgICAqIEBpbXBsZW1lbnRzIHtQb2x5bWVyX011dGFibGVEYXRhfQogICAgICogQGV4dGVuZHMge0RhdGFUZW1wbGF0ZX0KICAgICAqIEBwcml2YXRlCiAgICAgKi8KICAgIGNvbnN0IE11dGFibGVEYXRhVGVtcGxhdGUgPSBQb2x5bWVyLk11dGFibGVEYXRhKERhdGFUZW1wbGF0ZSk7CgogICAgLy8gQXBwbGllcyBhIERhdGFUZW1wbGF0ZSBzdWJjbGFzcyB0byBhIDx0ZW1wbGF0ZT4gaW5zdGFuY2UKICAgIGZ1bmN0aW9uIHVwZ3JhZGVUZW1wbGF0ZSh0ZW1wbGF0ZSwgY29uc3RydWN0b3IpIHsKICAgICAgbmV3SW5zdGFuY2UgPSB0ZW1wbGF0ZTsKICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHRlbXBsYXRlLCBjb25zdHJ1Y3Rvci5wcm90b3R5cGUpOwogICAgICBuZXcgY29uc3RydWN0b3IoKTsKICAgICAgbmV3SW5zdGFuY2UgPSBudWxsOwogICAgfQoKICAgIC8qKgogICAgICogQmFzZSBjbGFzcyBmb3IgVGVtcGxhdGVJbnN0YW5jZS4KICAgICAqIEBjb25zdHJ1Y3RvcgogICAgICogQGltcGxlbWVudHMge1BvbHltZXJfUHJvcGVydHlFZmZlY3RzfQogICAgICogQHByaXZhdGUKICAgICAqLwogICAgY29uc3QgYmFzZSA9IFBvbHltZXIuUHJvcGVydHlFZmZlY3RzKGNsYXNzIHt9KTsKCiAgICAvKioKICAgICAqIEBwb2x5bWVyCiAgICAgKiBAY3VzdG9tRWxlbWVudAogICAgICogQGFwcGxpZXNNaXhpbiBQb2x5bWVyLlByb3BlcnR5RWZmZWN0cwogICAgICogQHVucmVzdHJpY3RlZAogICAgICovCiAgICBjbGFzcyBUZW1wbGF0ZUluc3RhbmNlQmFzZSBleHRlbmRzIGJhc2UgewogICAgICBjb25zdHJ1Y3Rvcihwcm9wcykgewogICAgICAgIHN1cGVyKCk7CiAgICAgICAgdGhpcy5fY29uZmlndXJlUHJvcGVydGllcyhwcm9wcyk7CiAgICAgICAgdGhpcy5yb290ID0gdGhpcy5fc3RhbXBUZW1wbGF0ZSh0aGlzLl9fZGF0YUhvc3QpOwogICAgICAgIC8vIFNhdmUgbGlzdCBvZiBzdGFtcGVkIGNoaWxkcmVuCiAgICAgICAgbGV0IGNoaWxkcmVuID0gdGhpcy5jaGlsZHJlbiA9IFtdOwogICAgICAgIGZvciAobGV0IG4gPSB0aGlzLnJvb3QuZmlyc3RDaGlsZDsgbjsgbj1uLm5leHRTaWJsaW5nKSB7CiAgICAgICAgICBjaGlsZHJlbi5wdXNoKG4pOwogICAgICAgICAgbi5fX3RlbXBsYXRpemVJbnN0YW5jZSA9IHRoaXM7CiAgICAgICAgfQogICAgICAgIGlmICh0aGlzLl9fdGVtcGxhdGl6ZU93bmVyICYmCiAgICAgICAgICB0aGlzLl9fdGVtcGxhdGl6ZU93bmVyLl9faGlkZVRlbXBsYXRlQ2hpbGRyZW5fXykgewogICAgICAgICAgdGhpcy5fc2hvd0hpZGVDaGlsZHJlbih0cnVlKTsKICAgICAgICB9CiAgICAgICAgLy8gRmx1c2ggcHJvcHMgb25seSB3aGVuIHByb3BzIGFyZSBwYXNzZWQgaWYgaW5zdGFuY2UgcHJvcHMgZXhpc3QKICAgICAgICAvLyBvciB3aGVuIHRoZXJlIGlzbid0IGluc3RhbmNlIHByb3BzLgogICAgICAgIGxldCBvcHRpb25zID0gdGhpcy5fX3RlbXBsYXRpemVPcHRpb25zOwogICAgICAgIGlmICgocHJvcHMgJiYgb3B0aW9ucy5pbnN0YW5jZVByb3BzKSB8fCAhb3B0aW9ucy5pbnN0YW5jZVByb3BzKSB7CiAgICAgICAgICB0aGlzLl9lbmFibGVQcm9wZXJ0aWVzKCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBDb25maWd1cmUgdGhlIGdpdmVuIGBwcm9wc2AgYnkgY2FsbGluZyBgX3NldFBlbmRpbmdQcm9wZXJ0eWAuIEFsc28KICAgICAgICogc2V0cyBhbnkgcHJvcGVydGllcyBzdG9yZWQgaW4gYF9faG9zdFByb3BzYC4KICAgICAgICogQHByaXZhdGUKICAgICAgICogQHBhcmFtIHtPYmplY3R9IHByb3BzIE9iamVjdCBvZiBwcm9wZXJ0eSBuYW1lLXZhbHVlIHBhaXJzIHRvIHNldC4KICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICovCiAgICAgIF9jb25maWd1cmVQcm9wZXJ0aWVzKHByb3BzKSB7CiAgICAgICAgbGV0IG9wdGlvbnMgPSB0aGlzLl9fdGVtcGxhdGl6ZU9wdGlvbnM7CiAgICAgICAgaWYgKG9wdGlvbnMuZm9yd2FyZEhvc3RQcm9wKSB7CiAgICAgICAgICBmb3IgKGxldCBocHJvcCBpbiB0aGlzLl9faG9zdFByb3BzKSB7CiAgICAgICAgICAgIHRoaXMuX3NldFBlbmRpbmdQcm9wZXJ0eShocHJvcCwgdGhpcy5fX2RhdGFIb3N0WydfaG9zdF8nICsgaHByb3BdKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgLy8gQW55IGluc3RhbmNlIHByb3BzIHBhc3NlZCBpbiB0aGUgY29uc3RydWN0b3Igd2lsbCBvdmVyd3JpdGUgaG9zdCBwcm9wczsKICAgICAgICAvLyBub3JtYWxseSB0aGlzIHdvdWxkIGJlIGEgdXNlciBlcnJvciBidXQgd2UgZG9uJ3Qgc3BlY2lmaWNhbGx5IGZpbHRlciB0aGVtCiAgICAgICAgZm9yIChsZXQgaXByb3AgaW4gcHJvcHMpIHsKICAgICAgICAgIHRoaXMuX3NldFBlbmRpbmdQcm9wZXJ0eShpcHJvcCwgcHJvcHNbaXByb3BdKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEZvcndhcmRzIGEgaG9zdCBwcm9wZXJ0eSB0byB0aGlzIGluc3RhbmNlLiAgVGhpcyBtZXRob2Qgc2hvdWxkIGJlCiAgICAgICAqIGNhbGxlZCBvbiBpbnN0YW5jZXMgZnJvbSB0aGUgYG9wdGlvbnMuZm9yd2FyZEhvc3RQcm9wYCBjYWxsYmFjawogICAgICAgKiB0byBwcm9wYWdhdGUgY2hhbmdlcyBvZiBob3N0IHByb3BlcnRpZXMgdG8gZWFjaCBpbnN0YW5jZS4KICAgICAgICoKICAgICAgICogTm90ZSB0aGlzIG1ldGhvZCBlbnF1ZXVlcyB0aGUgY2hhbmdlLCB3aGljaCBhcmUgZmx1c2hlZCBhcyBhIGJhdGNoLgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcCBQcm9wZXJ0eSBvciBwYXRoIG5hbWUKICAgICAgICogQHBhcmFtIHsqfSB2YWx1ZSBWYWx1ZSBvZiB0aGUgcHJvcGVydHkgdG8gZm9yd2FyZAogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKi8KICAgICAgZm9yd2FyZEhvc3RQcm9wKHByb3AsIHZhbHVlKSB7CiAgICAgICAgaWYgKHRoaXMuX3NldFBlbmRpbmdQcm9wZXJ0eU9yUGF0aChwcm9wLCB2YWx1ZSwgZmFsc2UsIHRydWUpKSB7CiAgICAgICAgICB0aGlzLl9fZGF0YUhvc3QuX2VucXVldWVDbGllbnQodGhpcyk7CiAgICAgICAgfQogICAgICB9CgogICAgICAvKioKICAgICAgICogT3ZlcnJpZGUgcG9pbnQgZm9yIGFkZGluZyBjdXN0b20gb3Igc2ltdWxhdGVkIGV2ZW50IGhhbmRsaW5nLgogICAgICAgKgogICAgICAgKiBAcGFyYW0geyFOb2RlfSBub2RlIE5vZGUgdG8gYWRkIGV2ZW50IGxpc3RlbmVyIHRvCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudE5hbWUgTmFtZSBvZiBldmVudAogICAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKCFFdmVudCk6dm9pZH0gaGFuZGxlciBMaXN0ZW5lciBmdW5jdGlvbiB0byBhZGQKICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICovCiAgICAgIF9hZGRFdmVudExpc3RlbmVyVG9Ob2RlKG5vZGUsIGV2ZW50TmFtZSwgaGFuZGxlcikgewogICAgICAgIGlmICh0aGlzLl9tZXRob2RIb3N0ICYmIHRoaXMuX190ZW1wbGF0aXplT3B0aW9ucy5wYXJlbnRNb2RlbCkgewogICAgICAgICAgLy8gSWYgdGhpcyBpbnN0YW5jZSBzaG91bGQgYmUgY29uc2lkZXJlZCBhIHBhcmVudCBtb2RlbCwgZGVjb3JhdGUKICAgICAgICAgIC8vIGV2ZW50cyB0aGlzIHRlbXBsYXRlIGluc3RhbmNlIGFzIGBtb2RlbGAKICAgICAgICAgIHRoaXMuX21ldGhvZEhvc3QuX2FkZEV2ZW50TGlzdGVuZXJUb05vZGUobm9kZSwgZXZlbnROYW1lLCAoZSkgPT4gewogICAgICAgICAgICBlLm1vZGVsID0gdGhpczsKICAgICAgICAgICAgaGFuZGxlcihlKTsKICAgICAgICAgIH0pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAvLyBPdGhlcndpc2UgZGVsZWdhdGUgdG8gdGhlIHRlbXBsYXRlJ3MgaG9zdCAod2hpY2ggY291bGQgYmUpCiAgICAgICAgICAvLyBhbm90aGVyIHRlbXBsYXRlIGluc3RhbmNlCiAgICAgICAgICBsZXQgdGVtcGxhdGVIb3N0ID0gdGhpcy5fX2RhdGFIb3N0Ll9fZGF0YUhvc3Q7CiAgICAgICAgICBpZiAodGVtcGxhdGVIb3N0KSB7CiAgICAgICAgICAgIHRlbXBsYXRlSG9zdC5fYWRkRXZlbnRMaXN0ZW5lclRvTm9kZShub2RlLCBldmVudE5hbWUsIGhhbmRsZXIpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICAvKioKICAgICAgICogU2hvd3Mgb3IgaGlkZXMgdGhlIHRlbXBsYXRlIGluc3RhbmNlIHRvcCBsZXZlbCBjaGlsZCBlbGVtZW50cy4gRm9yCiAgICAgICAqIHRleHQgbm9kZXMsIGB0ZXh0Q29udGVudGAgaXMgcmVtb3ZlZCB3aGlsZSAiaGlkZGVuIiBhbmQgcmVwbGFjZWQgd2hlbgogICAgICAgKiAic2hvd24uIgogICAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGhpZGUgU2V0IHRvIHRydWUgdG8gaGlkZSB0aGUgY2hpbGRyZW47CiAgICAgICAqIHNldCB0byBmYWxzZSB0byBzaG93IHRoZW0uCiAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAqIEBwcm90ZWN0ZWQKICAgICAgICovCiAgICAgIF9zaG93SGlkZUNoaWxkcmVuKGhpZGUpIHsKICAgICAgICBsZXQgYyA9IHRoaXMuY2hpbGRyZW47CiAgICAgICAgZm9yIChsZXQgaT0wOyBpPGMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgIGxldCBuID0gY1tpXTsKICAgICAgICAgIC8vIElnbm9yZSBub24tY2hhbmdlcwogICAgICAgICAgaWYgKEJvb2xlYW4oaGlkZSkgIT0gQm9vbGVhbihuLl9faGlkZVRlbXBsYXRlQ2hpbGRyZW5fXykpIHsKICAgICAgICAgICAgaWYgKG4ubm9kZVR5cGUgPT09IE5vZGUuVEVYVF9OT0RFKSB7CiAgICAgICAgICAgICAgaWYgKGhpZGUpIHsKICAgICAgICAgICAgICAgIG4uX19wb2x5bWVyVGV4dENvbnRlbnRfXyA9IG4udGV4dENvbnRlbnQ7CiAgICAgICAgICAgICAgICBuLnRleHRDb250ZW50ID0gJyc7CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIG4udGV4dENvbnRlbnQgPSBuLl9fcG9seW1lclRleHRDb250ZW50X187CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAvLyByZW1vdmUgYW5kIHJlcGxhY2Ugc2xvdAogICAgICAgICAgICB9IGVsc2UgaWYgKG4ubG9jYWxOYW1lID09PSAnc2xvdCcpIHsKICAgICAgICAgICAgICBpZiAoaGlkZSkgewogICAgICAgICAgICAgICAgbi5fX3BvbHltZXJSZXBsYWNlZF9fID0gZG9jdW1lbnQuY3JlYXRlQ29tbWVudCgnaGlkZGVuLXNsb3QnKTsKICAgICAgICAgICAgICAgIG4ucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQobi5fX3BvbHltZXJSZXBsYWNlZF9fLCBuKTsKICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgY29uc3QgcmVwbGFjZSA9IG4uX19wb2x5bWVyUmVwbGFjZWRfXzsKICAgICAgICAgICAgICAgIGlmIChyZXBsYWNlKSB7CiAgICAgICAgICAgICAgICAgIHJlcGxhY2UucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQobiwgcmVwbGFjZSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICBlbHNlIGlmIChuLnN0eWxlKSB7CiAgICAgICAgICAgICAgaWYgKGhpZGUpIHsKICAgICAgICAgICAgICAgIG4uX19wb2x5bWVyRGlzcGxheV9fID0gbi5zdHlsZS5kaXNwbGF5OwogICAgICAgICAgICAgICAgbi5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBuLnN0eWxlLmRpc3BsYXkgPSBuLl9fcG9seW1lckRpc3BsYXlfXzsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIG4uX19oaWRlVGVtcGxhdGVDaGlsZHJlbl9fID0gaGlkZTsKICAgICAgICAgIGlmIChuLl9zaG93SGlkZUNoaWxkcmVuKSB7CiAgICAgICAgICAgIG4uX3Nob3dIaWRlQ2hpbGRyZW4oaGlkZSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBPdmVycmlkZXMgZGVmYXVsdCBwcm9wZXJ0eS1lZmZlY3RzIGltcGxlbWVudGF0aW9uIHRvIGludGVyY2VwdAogICAgICAgKiB0ZXh0Q29udGVudCBiaW5kaW5ncyB3aGlsZSBjaGlsZHJlbiBhcmUgImhpZGRlbiIgYW5kIGNhY2hlIGluCiAgICAgICAqIHByaXZhdGUgc3RvcmFnZSBmb3IgbGF0ZXIgcmV0cmlldmFsLgogICAgICAgKgogICAgICAgKiBAcGFyYW0geyFOb2RlfSBub2RlIFRoZSBub2RlIHRvIHNldCBhIHByb3BlcnR5IG9uCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wIFRoZSBwcm9wZXJ0eSB0byBzZXQKICAgICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0CiAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAqIEBwcm90ZWN0ZWQKICAgICAgICovCiAgICAgIF9zZXRVbm1hbmFnZWRQcm9wZXJ0eVRvTm9kZShub2RlLCBwcm9wLCB2YWx1ZSkgewogICAgICAgIGlmIChub2RlLl9faGlkZVRlbXBsYXRlQ2hpbGRyZW5fXyAmJgogICAgICAgICAgICBub2RlLm5vZGVUeXBlID09IE5vZGUuVEVYVF9OT0RFICYmIHByb3AgPT0gJ3RleHRDb250ZW50JykgewogICAgICAgICAgbm9kZS5fX3BvbHltZXJUZXh0Q29udGVudF9fID0gdmFsdWU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHN1cGVyLl9zZXRVbm1hbmFnZWRQcm9wZXJ0eVRvTm9kZShub2RlLCBwcm9wLCB2YWx1ZSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBGaW5kIHRoZSBwYXJlbnQgbW9kZWwgb2YgdGhpcyB0ZW1wbGF0ZSBpbnN0YW5jZS4gIFRoZSBwYXJlbnQgbW9kZWwKICAgICAgICogaXMgZWl0aGVyIGFub3RoZXIgdGVtcGxhdGl6ZSBpbnN0YW5jZSB0aGF0IGhhZCBvcHRpb24gYHBhcmVudE1vZGVsOiB0cnVlYCwKICAgICAgICogb3IgZWxzZSB0aGUgaG9zdCBlbGVtZW50LgogICAgICAgKgogICAgICAgKiBAcmV0dXJuIHshUG9seW1lcl9Qcm9wZXJ0eUVmZmVjdHN9IFRoZSBwYXJlbnQgbW9kZWwgb2YgdGhpcyBpbnN0YW5jZQogICAgICAgKi8KICAgICAgZ2V0IHBhcmVudE1vZGVsKCkgewogICAgICAgIGxldCBtb2RlbCA9IHRoaXMuX19wYXJlbnRNb2RlbDsKICAgICAgICBpZiAoIW1vZGVsKSB7CiAgICAgICAgICBsZXQgb3B0aW9uczsKICAgICAgICAgIG1vZGVsID0gdGhpczsKICAgICAgICAgIGRvIHsKICAgICAgICAgICAgLy8gQSB0ZW1wbGF0ZSBpbnN0YW5jZSdzIGBfX2RhdGFIb3N0YCBpcyBhIDx0ZW1wbGF0ZT4KICAgICAgICAgICAgLy8gYG1vZGVsLl9fZGF0YUhvc3QuX19kYXRhSG9zdGAgaXMgdGhlIHRlbXBsYXRlJ3MgaG9zdAogICAgICAgICAgICBtb2RlbCA9IG1vZGVsLl9fZGF0YUhvc3QuX19kYXRhSG9zdDsKICAgICAgICAgIH0gd2hpbGUgKChvcHRpb25zID0gbW9kZWwuX190ZW1wbGF0aXplT3B0aW9ucykgJiYgIW9wdGlvbnMucGFyZW50TW9kZWwpOwogICAgICAgICAgdGhpcy5fX3BhcmVudE1vZGVsID0gbW9kZWw7CiAgICAgICAgfQogICAgICAgIHJldHVybiBtb2RlbDsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIFN0dWIgb2YgSFRNTEVsZW1lbnQncyBgZGlzcGF0Y2hFdmVudGAsIHNvIHRoYXQgZWZmZWN0cyB0aGF0IG1heQogICAgICAgKiBkaXNwYXRjaCBldmVudHMgc2FmZWx5IG5vLW9wLgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudCBFdmVudCB0byBkaXNwYXRjaAogICAgICAgKiBAcmV0dXJuIHtib29sZWFufSBBbHdheXMgdHJ1ZS4KICAgICAgICovCiAgICAgICBkaXNwYXRjaEV2ZW50KGV2ZW50KSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnMKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgIH0KCiAgICAvKiogQHR5cGUgeyFEYXRhVGVtcGxhdGV9ICovCiAgICBUZW1wbGF0ZUluc3RhbmNlQmFzZS5wcm90b3R5cGUuX19kYXRhSG9zdDsKICAgIC8qKiBAdHlwZSB7IVRlbXBsYXRpemVPcHRpb25zfSAqLwogICAgVGVtcGxhdGVJbnN0YW5jZUJhc2UucHJvdG90eXBlLl9fdGVtcGxhdGl6ZU9wdGlvbnM7CiAgICAvKiogQHR5cGUgeyFQb2x5bWVyX1Byb3BlcnR5RWZmZWN0c30gKi8KICAgIFRlbXBsYXRlSW5zdGFuY2VCYXNlLnByb3RvdHlwZS5fbWV0aG9kSG9zdDsKICAgIC8qKiBAdHlwZSB7IU9iamVjdH0gKi8KICAgIFRlbXBsYXRlSW5zdGFuY2VCYXNlLnByb3RvdHlwZS5fX3RlbXBsYXRpemVPd25lcjsKICAgIC8qKiBAdHlwZSB7IU9iamVjdH0gKi8KICAgIFRlbXBsYXRlSW5zdGFuY2VCYXNlLnByb3RvdHlwZS5fX2hvc3RQcm9wczsKCiAgICAvKioKICAgICAqIEBjb25zdHJ1Y3RvcgogICAgICogQGV4dGVuZHMge1RlbXBsYXRlSW5zdGFuY2VCYXNlfQogICAgICogQGltcGxlbWVudHMge1BvbHltZXJfTXV0YWJsZURhdGF9CiAgICAgKiBAcHJpdmF0ZQogICAgICovCiAgICBjb25zdCBNdXRhYmxlVGVtcGxhdGVJbnN0YW5jZUJhc2UgPSBQb2x5bWVyLk11dGFibGVEYXRhKFRlbXBsYXRlSW5zdGFuY2VCYXNlKTsKCiAgICBmdW5jdGlvbiBmaW5kTWV0aG9kSG9zdCh0ZW1wbGF0ZSkgewogICAgICAvLyBUZWNobmljYWxseSB0aGlzIHNob3VsZCBiZSB0aGUgb3duZXIgb2YgdGhlIG91dGVybW9zdCB0ZW1wbGF0ZS4KICAgICAgLy8gSW4gc2hhZG93IGRvbSwgdGhpcyBpcyBhbHdheXMgZ2V0Um9vdE5vZGUoKS5ob3N0LCBidXQgd2UgY2FuCiAgICAgIC8vIGFwcHJveGltYXRlIHRoaXMgdmlhIGNvb3BlcmF0aW9uIHdpdGggb3VyIGRhdGFIb3N0IGFsd2F5cyBzZXR0aW5nCiAgICAgIC8vIGBfbWV0aG9kSG9zdGAgYXMgbG9uZyBhcyB0aGVyZSB3ZXJlIGJpbmRpbmdzIChvciBpZCdzKSBvbiB0aGlzCiAgICAgIC8vIGluc3RhbmNlIGNhdXNpbmcgaXQgdG8gZ2V0IGEgZGF0YUhvc3QuCiAgICAgIGxldCB0ZW1wbGF0ZUhvc3QgPSB0ZW1wbGF0ZS5fX2RhdGFIb3N0OwogICAgICByZXR1cm4gdGVtcGxhdGVIb3N0ICYmIHRlbXBsYXRlSG9zdC5fbWV0aG9kSG9zdCB8fCB0ZW1wbGF0ZUhvc3Q7CiAgICB9CgogICAgLyogZXNsaW50LWRpc2FibGUgdmFsaWQtanNkb2MgKi8KICAgIC8qKgogICAgICogQHN1cHByZXNzIHttaXNzaW5nUHJvcGVydGllc30gY2xhc3MucHJvdG90eXBlIGlzIG5vdCBkZWZpbmVkIGZvciBzb21lIHJlYXNvbgogICAgICovCiAgICBmdW5jdGlvbiBjcmVhdGVUZW1wbGF0aXplckNsYXNzKHRlbXBsYXRlLCB0ZW1wbGF0ZUluZm8sIG9wdGlvbnMpIHsKICAgICAgLy8gQW5vbnltb3VzIGNsYXNzIGNyZWF0ZWQgYnkgdGhlIHRlbXBsYXRpemUKICAgICAgbGV0IGJhc2UgPSBvcHRpb25zLm11dGFibGVEYXRhID8KICAgICAgICBNdXRhYmxlVGVtcGxhdGVJbnN0YW5jZUJhc2UgOiBUZW1wbGF0ZUluc3RhbmNlQmFzZTsKICAgICAgLy8gQWZmb3JkYW5jZSBmb3IgZ2xvYmFsIG1peGlucyBvbnRvIFRlbXBsYXRpemVJbnN0YW5jZQogICAgICBpZiAoUG9seW1lci5UZW1wbGF0aXplLm1peGluKSB7CiAgICAgICAgYmFzZSA9IFBvbHltZXIuVGVtcGxhdGl6ZS5taXhpbihiYXNlKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogQGNvbnN0cnVjdG9yCiAgICAgICAqIEBleHRlbmRzIHtiYXNlfQogICAgICAgKiBAcHJpdmF0ZQogICAgICAgKi8KICAgICAgbGV0IGtsYXNzID0gY2xhc3MgZXh0ZW5kcyBiYXNlIHsgfTsKICAgICAga2xhc3MucHJvdG90eXBlLl9fdGVtcGxhdGl6ZU9wdGlvbnMgPSBvcHRpb25zOwogICAgICBrbGFzcy5wcm90b3R5cGUuX2JpbmRUZW1wbGF0ZSh0ZW1wbGF0ZSk7CiAgICAgIGFkZE5vdGlmeUVmZmVjdHMoa2xhc3MsIHRlbXBsYXRlLCB0ZW1wbGF0ZUluZm8sIG9wdGlvbnMpOwogICAgICByZXR1cm4ga2xhc3M7CiAgICB9CgogICAgLyoqCiAgICAgKiBAc3VwcHJlc3Mge21pc3NpbmdQcm9wZXJ0aWVzfSBjbGFzcy5wcm90b3R5cGUgaXMgbm90IGRlZmluZWQgZm9yIHNvbWUgcmVhc29uCiAgICAgKi8KICAgIGZ1bmN0aW9uIGFkZFByb3BhZ2F0ZUVmZmVjdHModGVtcGxhdGUsIHRlbXBsYXRlSW5mbywgb3B0aW9ucykgewogICAgICBsZXQgdXNlckZvcndhcmRIb3N0UHJvcCA9IG9wdGlvbnMuZm9yd2FyZEhvc3RQcm9wOwogICAgICBpZiAodXNlckZvcndhcmRIb3N0UHJvcCkgewogICAgICAgIC8vIFByb3ZpZGUgZGF0YSBBUEkgYW5kIHByb3BlcnR5IGVmZmVjdHMgb24gbWVtb2l6ZWQgdGVtcGxhdGUgY2xhc3MKICAgICAgICBsZXQga2xhc3MgPSB0ZW1wbGF0ZUluZm8udGVtcGxhdGl6ZVRlbXBsYXRlQ2xhc3M7CiAgICAgICAgaWYgKCFrbGFzcykgewogICAgICAgICAgbGV0IGJhc2UgPSBvcHRpb25zLm11dGFibGVEYXRhID8gTXV0YWJsZURhdGFUZW1wbGF0ZSA6IERhdGFUZW1wbGF0ZTsKICAgICAgICAgIC8qKiBAcHJpdmF0ZSAqLwogICAgICAgICAga2xhc3MgPSB0ZW1wbGF0ZUluZm8udGVtcGxhdGl6ZVRlbXBsYXRlQ2xhc3MgPQogICAgICAgICAgICBjbGFzcyBUZW1wbGF0aXplZFRlbXBsYXRlIGV4dGVuZHMgYmFzZSB7fTsKICAgICAgICAgIC8vIEFkZCB0ZW1wbGF0ZSAtID5pbnN0YW5jZXMgZWZmZWN0cwogICAgICAgICAgLy8gYW5kIGhvc3QgPC0gdGVtcGxhdGUgZWZmZWN0cwogICAgICAgICAgbGV0IGhvc3RQcm9wcyA9IHRlbXBsYXRlSW5mby5ob3N0UHJvcHM7CiAgICAgICAgICBmb3IgKGxldCBwcm9wIGluIGhvc3RQcm9wcykgewogICAgICAgICAgICBrbGFzcy5wcm90b3R5cGUuX2FkZFByb3BlcnR5RWZmZWN0KCdfaG9zdF8nICsgcHJvcCwKICAgICAgICAgICAgICBrbGFzcy5wcm90b3R5cGUuUFJPUEVSVFlfRUZGRUNUX1RZUEVTLlBST1BBR0FURSwKICAgICAgICAgICAgICB7Zm46IGNyZWF0ZUZvcndhcmRIb3N0UHJvcEVmZmVjdChwcm9wLCB1c2VyRm9yd2FyZEhvc3RQcm9wKX0pOwogICAgICAgICAgICBrbGFzcy5wcm90b3R5cGUuX2NyZWF0ZU5vdGlmeWluZ1Byb3BlcnR5KCdfaG9zdF8nICsgcHJvcCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHVwZ3JhZGVUZW1wbGF0ZSh0ZW1wbGF0ZSwga2xhc3MpOwogICAgICAgIC8vIE1peCBhbnkgcHJlLWJvdW5kIGRhdGEgaW50byBfX2RhdGE7IG5vIG5lZWQgdG8gZmx1c2ggdGhpcyB0bwogICAgICAgIC8vIGluc3RhbmNlcyBzaW5jZSB0aGV5IHB1bGwgZnJvbSB0aGUgdGVtcGxhdGUgYXQgaW5zdGFuY2UtdGltZQogICAgICAgIGlmICh0ZW1wbGF0ZS5fX2RhdGFQcm90bykgewogICAgICAgICAgLy8gTm90ZSwgZ2VuZXJhbGx5IGBfX2RhdGFQcm90b2AgY291bGQgYmUgY2hhaW5lZCwgYnV0IGl0J3MgZ3VhcmFudGVlZAogICAgICAgICAgLy8gdG8gbm90IGJlIHNpbmNlIHRoaXMgaXMgYSB2YW5pbGxhIHRlbXBsYXRlIHdlIGp1c3QgYWRkZWQgZWZmZWN0cyB0bwogICAgICAgICAgT2JqZWN0LmFzc2lnbih0ZW1wbGF0ZS5fX2RhdGEsIHRlbXBsYXRlLl9fZGF0YVByb3RvKTsKICAgICAgICB9CiAgICAgICAgLy8gQ2xlYXIgYW55IHBlbmRpbmcgZGF0YSBmb3IgcGVyZm9ybWFuY2UKICAgICAgICB0ZW1wbGF0ZS5fX2RhdGFUZW1wID0ge307CiAgICAgICAgdGVtcGxhdGUuX19kYXRhUGVuZGluZyA9IG51bGw7CiAgICAgICAgdGVtcGxhdGUuX19kYXRhT2xkID0gbnVsbDsKICAgICAgICB0ZW1wbGF0ZS5fZW5hYmxlUHJvcGVydGllcygpOwogICAgICB9CiAgICB9CiAgICAvKiBlc2xpbnQtZW5hYmxlIHZhbGlkLWpzZG9jICovCgogICAgZnVuY3Rpb24gY3JlYXRlRm9yd2FyZEhvc3RQcm9wRWZmZWN0KGhvc3RQcm9wLCB1c2VyRm9yd2FyZEhvc3RQcm9wKSB7CiAgICAgIHJldHVybiBmdW5jdGlvbiBmb3J3YXJkSG9zdFByb3AodGVtcGxhdGUsIHByb3AsIHByb3BzKSB7CiAgICAgICAgdXNlckZvcndhcmRIb3N0UHJvcC5jYWxsKHRlbXBsYXRlLl9fdGVtcGxhdGl6ZU93bmVyLAogICAgICAgICAgcHJvcC5zdWJzdHJpbmcoJ19ob3N0XycubGVuZ3RoKSwgcHJvcHNbcHJvcF0pOwogICAgICB9OwogICAgfQoKICAgIGZ1bmN0aW9uIGFkZE5vdGlmeUVmZmVjdHMoa2xhc3MsIHRlbXBsYXRlLCB0ZW1wbGF0ZUluZm8sIG9wdGlvbnMpIHsKICAgICAgbGV0IGhvc3RQcm9wcyA9IHRlbXBsYXRlSW5mby5ob3N0UHJvcHMgfHwge307CiAgICAgIGZvciAobGV0IGlwcm9wIGluIG9wdGlvbnMuaW5zdGFuY2VQcm9wcykgewogICAgICAgIGRlbGV0ZSBob3N0UHJvcHNbaXByb3BdOwogICAgICAgIGxldCB1c2VyTm90aWZ5SW5zdGFuY2VQcm9wID0gb3B0aW9ucy5ub3RpZnlJbnN0YW5jZVByb3A7CiAgICAgICAgaWYgKHVzZXJOb3RpZnlJbnN0YW5jZVByb3ApIHsKICAgICAgICAgIGtsYXNzLnByb3RvdHlwZS5fYWRkUHJvcGVydHlFZmZlY3QoaXByb3AsCiAgICAgICAgICAgIGtsYXNzLnByb3RvdHlwZS5QUk9QRVJUWV9FRkZFQ1RfVFlQRVMuTk9USUZZLAogICAgICAgICAgICB7Zm46IGNyZWF0ZU5vdGlmeUluc3RhbmNlUHJvcEVmZmVjdChpcHJvcCwgdXNlck5vdGlmeUluc3RhbmNlUHJvcCl9KTsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKG9wdGlvbnMuZm9yd2FyZEhvc3RQcm9wICYmIHRlbXBsYXRlLl9fZGF0YUhvc3QpIHsKICAgICAgICBmb3IgKGxldCBocHJvcCBpbiBob3N0UHJvcHMpIHsKICAgICAgICAgIGtsYXNzLnByb3RvdHlwZS5fYWRkUHJvcGVydHlFZmZlY3QoaHByb3AsCiAgICAgICAgICAgIGtsYXNzLnByb3RvdHlwZS5QUk9QRVJUWV9FRkZFQ1RfVFlQRVMuTk9USUZZLAogICAgICAgICAgICB7Zm46IGNyZWF0ZU5vdGlmeUhvc3RQcm9wRWZmZWN0KCl9KTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICBmdW5jdGlvbiBjcmVhdGVOb3RpZnlJbnN0YW5jZVByb3BFZmZlY3QoaW5zdFByb3AsIHVzZXJOb3RpZnlJbnN0YW5jZVByb3ApIHsKICAgICAgcmV0dXJuIGZ1bmN0aW9uIG5vdGlmeUluc3RhbmNlUHJvcChpbnN0LCBwcm9wLCBwcm9wcykgewogICAgICAgIHVzZXJOb3RpZnlJbnN0YW5jZVByb3AuY2FsbChpbnN0Ll9fdGVtcGxhdGl6ZU93bmVyLAogICAgICAgICAgaW5zdCwgcHJvcCwgcHJvcHNbcHJvcF0pOwogICAgICB9OwogICAgfQoKICAgIGZ1bmN0aW9uIGNyZWF0ZU5vdGlmeUhvc3RQcm9wRWZmZWN0KCkgewogICAgICByZXR1cm4gZnVuY3Rpb24gbm90aWZ5SG9zdFByb3AoaW5zdCwgcHJvcCwgcHJvcHMpIHsKICAgICAgICBpbnN0Ll9fZGF0YUhvc3QuX3NldFBlbmRpbmdQcm9wZXJ0eU9yUGF0aCgnX2hvc3RfJyArIHByb3AsIHByb3BzW3Byb3BdLCB0cnVlLCB0cnVlKTsKICAgICAgfTsKICAgIH0KCiAgICAvKioKICAgICAqIE1vZHVsZSBmb3IgcHJlcGFyaW5nIGFuZCBzdGFtcGluZyBpbnN0YW5jZXMgb2YgdGVtcGxhdGVzIHRoYXQgdXRpbGl6ZQogICAgICogUG9seW1lcidzIGRhdGEtYmluZGluZyBhbmQgZGVjbGFyYXRpdmUgZXZlbnQgbGlzdGVuZXIgZmVhdHVyZXMuCiAgICAgKgogICAgICogRXhhbXBsZToKICAgICAqCiAgICAgKiAgICAgLy8gR2V0IGEgdGVtcGxhdGUgZnJvbSBzb21ld2hlcmUsIGUuZy4gbGlnaHQgRE9NCiAgICAgKiAgICAgbGV0IHRlbXBsYXRlID0gdGhpcy5xdWVyeVNlbGVjdG9yKCd0ZW1wbGF0ZScpOwogICAgICogICAgIC8vIFByZXBhcmUgdGhlIHRlbXBsYXRlCiAgICAgKiAgICAgbGV0IFRlbXBsYXRlQ2xhc3MgPSBQb2x5bWVyLlRlbXBsYXRpemUudGVtcGxhdGl6ZSh0ZW1wbGF0ZSk7CiAgICAgKiAgICAgLy8gSW5zdGFuY2UgdGhlIHRlbXBsYXRlIHdpdGggYW4gaW5pdGlhbCBkYXRhIG1vZGVsCiAgICAgKiAgICAgbGV0IGluc3RhbmNlID0gbmV3IFRlbXBsYXRlQ2xhc3Moe215UHJvcDogJ2luaXRpYWwnfSk7CiAgICAgKiAgICAgLy8gSW5zZXJ0IHRoZSBpbnN0YW5jZSdzIERPTSBzb21ld2hlcmUsIGUuZy4gZWxlbWVudCdzIHNoYWRvdyBET00KICAgICAqICAgICB0aGlzLnNoYWRvd1Jvb3QuYXBwZW5kQ2hpbGQoaW5zdGFuY2Uucm9vdCk7CiAgICAgKiAgICAgLy8gQ2hhbmdpbmcgYSBwcm9wZXJ0eSBvbiB0aGUgaW5zdGFuY2Ugd2lsbCBwcm9wYWdhdGUgdG8gYmluZGluZ3MKICAgICAqICAgICAvLyBpbiB0aGUgdGVtcGxhdGUKICAgICAqICAgICBpbnN0YW5jZS5teVByb3AgPSAnbmV3IHZhbHVlJzsKICAgICAqCiAgICAgKiBUaGUgYG9wdGlvbnNgIGRpY3Rpb25hcnkgcGFzc2VkIHRvIGB0ZW1wbGF0aXplYCBhbGxvd3MgZm9yIGN1c3RvbWl6aW5nCiAgICAgKiBmZWF0dXJlcyBvZiB0aGUgZ2VuZXJhdGVkIHRlbXBsYXRlIGNsYXNzLCBpbmNsdWRpbmcgaG93IG91dGVyLXNjb3BlIGhvc3QKICAgICAqIHByb3BlcnRpZXMgc2hvdWxkIGJlIGZvcndhcmRlZCBpbnRvIHRlbXBsYXRlIGluc3RhbmNlcywgaG93IGFueSBpbnN0YW5jZQogICAgICogcHJvcGVydGllcyBhZGRlZCBpbnRvIHRoZSB0ZW1wbGF0ZSdzIHNjb3BlIHNob3VsZCBiZSBub3RpZmllZCBvdXQgdG8KICAgICAqIHRoZSBob3N0LCBhbmQgd2hldGhlciB0aGUgaW5zdGFuY2Ugc2hvdWxkIGJlIGRlY29yYXRlZCBhcyBhICJwYXJlbnQgbW9kZWwiCiAgICAgKiBvZiBhbnkgZXZlbnQgaGFuZGxlcnMuCiAgICAgKgogICAgICogICAgIC8vIEN1c3RvbWl6ZSBwcm9wZXJ0eSBmb3J3YXJkaW5nIGFuZCBldmVudCBtb2RlbCBkZWNvcmF0aW9uCiAgICAgKiAgICAgbGV0IFRlbXBsYXRlQ2xhc3MgPSBQb2x5bWVyLlRlbXBsYXRpemUudGVtcGxhdGl6ZSh0ZW1wbGF0ZSwgdGhpcywgewogICAgICogICAgICAgcGFyZW50TW9kZWw6IHRydWUsCiAgICAgKiAgICAgICBmb3J3YXJkSG9zdFByb3AocHJvcGVydHksIHZhbHVlKSB7Li4ufSwKICAgICAqICAgICAgIGluc3RhbmNlUHJvcHM6IHsuLi59LAogICAgICogICAgICAgbm90aWZ5SW5zdGFuY2VQcm9wKGluc3RhbmNlLCBwcm9wZXJ0eSwgdmFsdWUpIHsuLi59LAogICAgICogICAgIH0pOwogICAgICoKICAgICAqIEBuYW1lc3BhY2UKICAgICAqIEBtZW1iZXJvZiBQb2x5bWVyCiAgICAgKiBAc3VtbWFyeSBNb2R1bGUgZm9yIHByZXBhcmluZyBhbmQgc3RhbXBpbmcgaW5zdGFuY2VzIG9mIHRlbXBsYXRlcwogICAgICogICB1dGlsaXppbmcgUG9seW1lciB0ZW1wbGF0aW5nIGZlYXR1cmVzLgogICAgICovCiAgICBQb2x5bWVyLlRlbXBsYXRpemUgPSB7CgogICAgICAvKioKICAgICAgICogUmV0dXJucyBhbiBhbm9ueW1vdXMgYFBvbHltZXIuUHJvcGVydHlFZmZlY3RzYCBjbGFzcyBib3VuZCB0byB0aGUKICAgICAgICogYDx0ZW1wbGF0ZT5gIHByb3ZpZGVkLiAgSW5zdGFuY2luZyB0aGUgY2xhc3Mgd2lsbCByZXN1bHQgaW4gdGhlCiAgICAgICAqIHRlbXBsYXRlIGJlaW5nIHN0YW1wZWQgaW50byBhIGRvY3VtZW50IGZyYWdtZW50IHN0b3JlZCBhcyB0aGUgaW5zdGFuY2UncwogICAgICAgKiBgcm9vdGAgcHJvcGVydHksIGFmdGVyIHdoaWNoIGl0IGNhbiBiZSBhcHBlbmRlZCB0byB0aGUgRE9NLgogICAgICAgKgogICAgICAgKiBUZW1wbGF0ZXMgbWF5IHV0aWxpemUgYWxsIFBvbHltZXIgZGF0YS1iaW5kaW5nIGZlYXR1cmVzIGFzIHdlbGwgYXMKICAgICAgICogZGVjbGFyYXRpdmUgZXZlbnQgbGlzdGVuZXJzLiAgRXZlbnQgbGlzdGVuZXJzIGFuZCBpbmxpbmUgY29tcHV0aW5nCiAgICAgICAqIGZ1bmN0aW9ucyBpbiB0aGUgdGVtcGxhdGUgd2lsbCBiZSBjYWxsZWQgb24gdGhlIGhvc3Qgb2YgdGhlIHRlbXBsYXRlLgogICAgICAgKgogICAgICAgKiBUaGUgY29uc3RydWN0b3IgcmV0dXJuZWQgdGFrZXMgYSBzaW5nbGUgYXJndW1lbnQgZGljdGlvbmFyeSBvZiBpbml0aWFsCiAgICAgICAqIHByb3BlcnR5IHZhbHVlcyB0byBwcm9wYWdhdGUgaW50byB0ZW1wbGF0ZSBiaW5kaW5ncy4gIEFkZGl0aW9uYWxseQogICAgICAgKiBob3N0IHByb3BlcnRpZXMgY2FuIGJlIGZvcndhcmRlZCBpbiwgYW5kIGluc3RhbmNlIHByb3BlcnRpZXMgY2FuIGJlCiAgICAgICAqIG5vdGlmaWVkIG91dCBieSBwcm92aWRpbmcgb3B0aW9uYWwgY2FsbGJhY2tzIGluIHRoZSBgb3B0aW9uc2AgZGljdGlvbmFyeS4KICAgICAgICoKICAgICAgICogVmFsaWQgY29uZmlndXJhdGlvbiBpbiBgb3B0aW9uc2AgYXJlIGFzIGZvbGxvd3M6CiAgICAgICAqCiAgICAgICAqIC0gYGZvcndhcmRIb3N0UHJvcChwcm9wZXJ0eSwgdmFsdWUpYDogQ2FsbGVkIHdoZW4gYSBwcm9wZXJ0eSByZWZlcmVuY2VkCiAgICAgICAqICAgaW4gdGhlIHRlbXBsYXRlIGNoYW5nZWQgb24gdGhlIHRlbXBsYXRlJ3MgaG9zdC4gQXMgdGhpcyBsaWJyYXJ5IGRvZXMKICAgICAgICogICBub3QgcmV0YWluIHJlZmVyZW5jZXMgdG8gdGVtcGxhdGVzIGluc3RhbmNlZCBieSB0aGUgdXNlciwgaXQgaXMgdGhlCiAgICAgICAqICAgdGVtcGxhdGl6ZSBvd25lcidzIHJlc3BvbnNpYmlsaXR5IHRvIGZvcndhcmQgaG9zdCBwcm9wZXJ0eSBjaGFuZ2VzIGludG8KICAgICAgICogICB1c2VyLXN0YW1wZWQgaW5zdGFuY2VzLiAgVGhlIGBpbnN0YW5jZS5mb3J3YXJkSG9zdFByb3AocHJvcGVydHksIHZhbHVlKWAKICAgICAgICogICAgbWV0aG9kIG9uIHRoZSBnZW5lcmF0ZWQgY2xhc3Mgc2hvdWxkIGJlIGNhbGxlZCB0byBmb3J3YXJkIGhvc3QKICAgICAgICogICBwcm9wZXJ0aWVzIGludG8gdGhlIHRlbXBsYXRlIHRvIHByZXZlbnQgdW5uZWNlc3NhcnkgcHJvcGVydHktY2hhbmdlZAogICAgICAgKiAgIG5vdGlmaWNhdGlvbnMuIEFueSBwcm9wZXJ0aWVzIHJlZmVyZW5jZWQgaW4gdGhlIHRlbXBsYXRlIHRoYXQgYXJlIG5vdAogICAgICAgKiAgIGRlZmluZWQgaW4gYGluc3RhbmNlUHJvcHNgIHdpbGwgYmUgbm90aWZpZWQgdXAgdG8gdGhlIHRlbXBsYXRlJ3MgaG9zdAogICAgICAgKiAgIGF1dG9tYXRpY2FsbHkuCiAgICAgICAqIC0gYGluc3RhbmNlUHJvcHNgOiBEaWN0aW9uYXJ5IG9mIHByb3BlcnR5IG5hbWVzIHRoYXQgd2lsbCBiZSBhZGRlZAogICAgICAgKiAgIHRvIHRoZSBpbnN0YW5jZSBieSB0aGUgdGVtcGxhdGl6ZSBvd25lci4gIFRoZXNlIHByb3BlcnRpZXMgc2hhZG93IGFueQogICAgICAgKiAgIGhvc3QgcHJvcGVydGllcywgYW5kIGNoYW5nZXMgd2l0aGluIHRoZSB0ZW1wbGF0ZSB0byB0aGVzZSBwcm9wZXJ0aWVzCiAgICAgICAqICAgd2lsbCByZXN1bHQgaW4gYG5vdGlmeUluc3RhbmNlUHJvcGAgYmVpbmcgY2FsbGVkLgogICAgICAgKiAtIGBtdXRhYmxlRGF0YWA6IFdoZW4gYHRydWVgLCB0aGUgZ2VuZXJhdGVkIGNsYXNzIHdpbGwgc2tpcCBzdHJpY3QKICAgICAgICogICBkaXJ0eS1jaGVja2luZyBmb3Igb2JqZWN0cyBhbmQgYXJyYXlzIChhbHdheXMgY29uc2lkZXIgdGhlbSB0byBiZQogICAgICAgKiAgICJkaXJ0eSIpLgogICAgICAgKiAtIGBub3RpZnlJbnN0YW5jZVByb3AoaW5zdGFuY2UsIHByb3BlcnR5LCB2YWx1ZSlgOiBDYWxsZWQgd2hlbgogICAgICAgKiAgIGFuIGluc3RhbmNlIHByb3BlcnR5IGNoYW5nZXMuICBVc2VycyBtYXkgY2hvb3NlIHRvIGNhbGwgYG5vdGlmeVBhdGhgCiAgICAgICAqICAgb24gZS5nLiB0aGUgb3duZXIgdG8gbm90aWZ5IHRoZSBjaGFuZ2UuCiAgICAgICAqIC0gYHBhcmVudE1vZGVsYDogV2hlbiBgdHJ1ZWAsIGV2ZW50cyBoYW5kbGVkIGJ5IGRlY2xhcmF0aXZlIGV2ZW50IGxpc3RlbmVycwogICAgICAgKiAgIChgb24tZXZlbnQ9ImhhbmRsZXIiYCkgd2lsbCBiZSBkZWNvcmF0ZWQgd2l0aCBhIGBtb2RlbGAgcHJvcGVydHkgcG9pbnRpbmcKICAgICAgICogICB0byB0aGUgdGVtcGxhdGUgaW5zdGFuY2UgdGhhdCBzdGFtcGVkIGl0LiAgSXQgd2lsbCBhbHNvIGJlIHJldHVybmVkCiAgICAgICAqICAgZnJvbSBgaW5zdGFuY2UucGFyZW50TW9kZWxgIGluIGNhc2VzIHdoZXJlIHRlbXBsYXRlIGluc3RhbmNlIG5lc3RpbmcKICAgICAgICogICBjYXVzZXMgYW4gaW5uZXIgbW9kZWwgdG8gc2hhZG93IGFuIG91dGVyIG1vZGVsLgogICAgICAgKgogICAgICAgKiBBbGwgY2FsbGJhY2tzIGFyZSBjYWxsZWQgYm91bmQgdG8gdGhlIGBvd25lcmAuIEFueSBjb250ZXh0CiAgICAgICAqIG5lZWRlZCBmb3IgdGhlIGNhbGxiYWNrcyAoc3VjaCBhcyByZWZlcmVuY2VzIHRvIGBpbnN0YW5jZXNgIHN0YW1wZWQpCiAgICAgICAqIHNob3VsZCBiZSBzdG9yZWQgb24gdGhlIGBvd25lcmAgc3VjaCB0aGF0IHRoZXkgY2FuIGJlIHJldHJpZXZlZCB2aWEKICAgICAgICogYHRoaXNgLgogICAgICAgKgogICAgICAgKiBXaGVuIGBvcHRpb25zLmZvcndhcmRIb3N0UHJvcGAgaXMgZGVjbGFyZWQgYXMgYW4gb3B0aW9uLCBhbnkgcHJvcGVydGllcwogICAgICAgKiByZWZlcmVuY2VkIGluIHRoZSB0ZW1wbGF0ZSB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgZm9yd2FyZGVkIGZyb20gdGhlIGhvc3Qgb2YKICAgICAgICogdGhlIGA8dGVtcGxhdGU+YCB0byBpbnN0YW5jZXMsIHdpdGggdGhlIGV4Y2VwdGlvbiBvZiBhbnkgcHJvcGVydGllcyBsaXN0ZWQgaW4KICAgICAgICogdGhlIGBvcHRpb25zLmluc3RhbmNlUHJvcHNgIG9iamVjdC4gIGBpbnN0YW5jZVByb3BzYCBhcmUgYXNzdW1lZCB0byBiZQogICAgICAgKiBtYW5hZ2VkIGJ5IHRoZSBvd25lciBvZiB0aGUgaW5zdGFuY2VzLCBlaXRoZXIgcGFzc2VkIGludG8gdGhlIGNvbnN0cnVjdG9yCiAgICAgICAqIG9yIHNldCBhZnRlciB0aGUgZmFjdC4gIE5vdGUsIGFueSBwcm9wZXJ0aWVzIHBhc3NlZCBpbnRvIHRoZSBjb25zdHJ1Y3RvciB3aWxsCiAgICAgICAqIGFsd2F5cyBiZSBzZXQgdG8gdGhlIGluc3RhbmNlIChyZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhleSB3b3VsZCBub3JtYWxseQogICAgICAgKiBiZSBmb3J3YXJkZWQgZnJvbSB0aGUgaG9zdCkuCiAgICAgICAqCiAgICAgICAqIE5vdGUgdGhhdCBgdGVtcGxhdGl6ZSgpYCBjYW4gYmUgcnVuIG9ubHkgb25jZSBmb3IgYSBnaXZlbiBgPHRlbXBsYXRlPmAuCiAgICAgICAqIEZ1cnRoZXIgY2FsbHMgd2lsbCByZXN1bHQgaW4gYW4gZXJyb3IuIEFsc28sIHRoZXJlIGlzIGEgc3BlY2lhbAogICAgICAgKiBiZWhhdmlvciBpZiB0aGUgdGVtcGxhdGUgd2FzIGR1cGxpY2F0ZWQgdGhyb3VnaCBhIG1lY2hhbmlzbSBzdWNoIGFzCiAgICAgICAqIGA8ZG9tLXJlcGVhdD5gIG9yIGA8dGVzdC1maXh0dXJlPmAuIEluIHRoaXMgY2FzZSwgYWxsIGNhbGxzIHRvCiAgICAgICAqIGB0ZW1wbGF0aXplKClgIHJldHVybiB0aGUgc2FtZSBjbGFzcyBmb3IgYWxsIGR1cGxpY2F0ZXMgb2YgYSB0ZW1wbGF0ZS4KICAgICAgICogVGhlIGNsYXNzIHJldHVybmVkIGZyb20gYHRlbXBsYXRpemUoKWAgaXMgZ2VuZXJhdGVkIG9ubHkgb25jZSB1c2luZwogICAgICAgKiB0aGUgYG9wdGlvbnNgIGZyb20gdGhlIGZpcnN0IGNhbGwuIFRoaXMgbWVhbnMgdGhhdCBhbnkgYG9wdGlvbnNgCiAgICAgICAqIHByb3ZpZGVkIHRvIHN1YnNlcXVlbnQgY2FsbHMgd2lsbCBiZSBpZ25vcmVkLiBUaGVyZWZvcmUsIGl0IGlzIHZlcnkKICAgICAgICogaW1wb3J0YW50IG5vdCB0byBjbG9zZSBvdmVyIGFueSB2YXJpYWJsZXMgaW5zaWRlIHRoZSBjYWxsYmFja3MuIEFsc28sCiAgICAgICAqIGFycm93IGZ1bmN0aW9ucyBtdXN0IGJlIGF2b2lkZWQgYmVjYXVzZSB0aGV5IGJpbmQgdGhlIG91dGVyIGB0aGlzYC4KICAgICAgICogSW5zaWRlIHRoZSBjYWxsYmFja3MsIGFueSBjb250ZXh0dWFsIGluZm9ybWF0aW9uIGNhbiBiZSBhY2Nlc3NlZAogICAgICAgKiB0aHJvdWdoIGB0aGlzYCwgd2hpY2ggcG9pbnRzIHRvIHRoZSBgb3duZXJgLgogICAgICAgKgogICAgICAgKiBAbWVtYmVyb2YgUG9seW1lci5UZW1wbGF0aXplCiAgICAgICAqIEBwYXJhbSB7IUhUTUxUZW1wbGF0ZUVsZW1lbnR9IHRlbXBsYXRlIFRlbXBsYXRlIHRvIHRlbXBsYXRpemUKICAgICAgICogQHBhcmFtIHtQb2x5bWVyX1Byb3BlcnR5RWZmZWN0cz19IG93bmVyIE93bmVyIG9mIHRoZSB0ZW1wbGF0ZSBpbnN0YW5jZXM7CiAgICAgICAqICAgYW55IG9wdGlvbmFsIGNhbGxiYWNrcyB3aWxsIGJlIGJvdW5kIHRvIHRoaXMgb3duZXIuCiAgICAgICAqIEBwYXJhbSB7T2JqZWN0PX0gb3B0aW9ucyBPcHRpb25zIGRpY3Rpb25hcnkgKHNlZSBzdW1tYXJ5IGZvciBkZXRhaWxzKQogICAgICAgKiBAcmV0dXJuIHtmdW5jdGlvbihuZXc6VGVtcGxhdGVJbnN0YW5jZUJhc2UpfSBHZW5lcmF0ZWQgY2xhc3MgYm91bmQgdG8gdGhlIHRlbXBsYXRlCiAgICAgICAqICAgcHJvdmlkZWQKICAgICAgICogQHN1cHByZXNzIHtpbnZhbGlkQ2FzdHN9CiAgICAgICAqLwogICAgICB0ZW1wbGF0aXplKHRlbXBsYXRlLCBvd25lciwgb3B0aW9ucykgewogICAgICAgIC8vIFVuZGVyIHN0cmljdFRlbXBsYXRlUG9saWN5LCB0aGUgdGVtcGxhdGl6ZWQgZWxlbWVudCBtdXN0IGJlIG93bmVkCiAgICAgICAgLy8gYnkgYSAodHJ1c3RlZCkgUG9seW1lciBlbGVtZW50LCBpbmRpY2F0ZWQgYnkgZXhpc3RlbmNlIG9mIF9tZXRob2RIb3N0OwogICAgICAgIC8vIGUuZy4gZm9yIGRvbS1pZiAmIGRvbS1yZXBlYXQgaW4gbWFpbiBkb2N1bWVudCwgX21ldGhvZEhvc3QgaXMgbnVsbAogICAgICAgIGlmIChQb2x5bWVyLnN0cmljdFRlbXBsYXRlUG9saWN5ICYmICFmaW5kTWV0aG9kSG9zdCh0ZW1wbGF0ZSkpIHsKICAgICAgICAgIHRocm93IG5ldyBFcnJvcignc3RyaWN0VGVtcGxhdGVQb2xpY3k6IHRlbXBsYXRlIG93bmVyIG5vdCB0cnVzdGVkJyk7CiAgICAgICAgfQogICAgICAgIG9wdGlvbnMgPSAvKiogQHR5cGUgeyFUZW1wbGF0aXplT3B0aW9uc30gKi8ob3B0aW9ucyB8fCB7fSk7CiAgICAgICAgaWYgKHRlbXBsYXRlLl9fdGVtcGxhdGl6ZU93bmVyKSB7CiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0EgPHRlbXBsYXRlPiBjYW4gb25seSBiZSB0ZW1wbGF0aXplZCBvbmNlJyk7CiAgICAgICAgfQogICAgICAgIHRlbXBsYXRlLl9fdGVtcGxhdGl6ZU93bmVyID0gb3duZXI7CiAgICAgICAgY29uc3QgY3RvciA9IG93bmVyID8gb3duZXIuY29uc3RydWN0b3IgOiBUZW1wbGF0ZUluc3RhbmNlQmFzZTsKICAgICAgICBsZXQgdGVtcGxhdGVJbmZvID0gY3Rvci5fcGFyc2VUZW1wbGF0ZSh0ZW1wbGF0ZSk7CiAgICAgICAgLy8gR2V0IG1lbW9pemVkIGJhc2UgY2xhc3MgZm9yIHRoZSBwcm90b3R5cGljYWwgdGVtcGxhdGUsIHdoaWNoCiAgICAgICAgLy8gaW5jbHVkZXMgcHJvcGVydHkgZWZmZWN0cyBmb3IgYmluZGluZyB0ZW1wbGF0ZSAmIGZvcndhcmRpbmcKICAgICAgICBsZXQgYmFzZUNsYXNzID0gdGVtcGxhdGVJbmZvLnRlbXBsYXRpemVJbnN0YW5jZUNsYXNzOwogICAgICAgIGlmICghYmFzZUNsYXNzKSB7CiAgICAgICAgICBiYXNlQ2xhc3MgPSBjcmVhdGVUZW1wbGF0aXplckNsYXNzKHRlbXBsYXRlLCB0ZW1wbGF0ZUluZm8sIG9wdGlvbnMpOwogICAgICAgICAgdGVtcGxhdGVJbmZvLnRlbXBsYXRpemVJbnN0YW5jZUNsYXNzID0gYmFzZUNsYXNzOwogICAgICAgIH0KICAgICAgICAvLyBIb3N0IHByb3BlcnR5IGZvcndhcmRpbmcgbXVzdCBiZSBpbnN0YWxsZWQgb250byB0ZW1wbGF0ZSBpbnN0YW5jZQogICAgICAgIGFkZFByb3BhZ2F0ZUVmZmVjdHModGVtcGxhdGUsIHRlbXBsYXRlSW5mbywgb3B0aW9ucyk7CiAgICAgICAgLy8gU3ViY2xhc3MgYmFzZSBjbGFzcyBhbmQgYWRkIHJlZmVyZW5jZSBmb3IgdGhpcyBzcGVjaWZpYyB0ZW1wbGF0ZQogICAgICAgIC8qKiBAcHJpdmF0ZSAqLwogICAgICAgIGxldCBrbGFzcyA9IGNsYXNzIFRlbXBsYXRlSW5zdGFuY2UgZXh0ZW5kcyBiYXNlQ2xhc3Mge307CiAgICAgICAga2xhc3MucHJvdG90eXBlLl9tZXRob2RIb3N0ID0gZmluZE1ldGhvZEhvc3QodGVtcGxhdGUpOwogICAgICAgIGtsYXNzLnByb3RvdHlwZS5fX2RhdGFIb3N0ID0gdGVtcGxhdGU7CiAgICAgICAga2xhc3MucHJvdG90eXBlLl9fdGVtcGxhdGl6ZU93bmVyID0gb3duZXI7CiAgICAgICAga2xhc3MucHJvdG90eXBlLl9faG9zdFByb3BzID0gdGVtcGxhdGVJbmZvLmhvc3RQcm9wczsKICAgICAgICBrbGFzcyA9IC8qKiBAdHlwZSB7ZnVuY3Rpb24obmV3OlRlbXBsYXRlSW5zdGFuY2VCYXNlKX0gKi8oa2xhc3MpOyAvL2VzbGludC1kaXNhYmxlLWxpbmUgbm8tc2VsZi1hc3NpZ24KICAgICAgICByZXR1cm4ga2xhc3M7CiAgICAgIH0sCgogICAgICAvKioKICAgICAgICogUmV0dXJucyB0aGUgdGVtcGxhdGUgIm1vZGVsIiBhc3NvY2lhdGVkIHdpdGggYSBnaXZlbiBlbGVtZW50LCB3aGljaAogICAgICAgKiBzZXJ2ZXMgYXMgdGhlIGJpbmRpbmcgc2NvcGUgZm9yIHRoZSB0ZW1wbGF0ZSBpbnN0YW5jZSB0aGUgZWxlbWVudCBpcwogICAgICAgKiBjb250YWluZWQgaW4uIEEgdGVtcGxhdGUgbW9kZWwgaXMgYW4gaW5zdGFuY2Ugb2YKICAgICAgICogYFRlbXBsYXRlSW5zdGFuY2VCYXNlYCwgYW5kIHNob3VsZCBiZSB1c2VkIHRvIG1hbmlwdWxhdGUgZGF0YQogICAgICAgKiBhc3NvY2lhdGVkIHdpdGggdGhpcyB0ZW1wbGF0ZSBpbnN0YW5jZS4KICAgICAgICoKICAgICAgICogRXhhbXBsZToKICAgICAgICoKICAgICAgICogICBsZXQgbW9kZWwgPSBtb2RlbEZvckVsZW1lbnQoZWwpOwogICAgICAgKiAgIGlmIChtb2RlbC5pbmRleCA8IDEwKSB7CiAgICAgICAqICAgICBtb2RlbC5zZXQoJ2l0ZW0uY2hlY2tlZCcsIHRydWUpOwogICAgICAgKiAgIH0KICAgICAgICoKICAgICAgICogQG1lbWJlcm9mIFBvbHltZXIuVGVtcGxhdGl6ZQogICAgICAgKiBAcGFyYW0ge0hUTUxUZW1wbGF0ZUVsZW1lbnR9IHRlbXBsYXRlIFRoZSBtb2RlbCB3aWxsIGJlIHJldHVybmVkIGZvcgogICAgICAgKiAgIGVsZW1lbnRzIHN0YW1wZWQgZnJvbSB0aGlzIHRlbXBsYXRlCiAgICAgICAqIEBwYXJhbSB7Tm9kZT19IG5vZGUgTm9kZSBmb3Igd2hpY2ggdG8gcmV0dXJuIGEgdGVtcGxhdGUgbW9kZWwuCiAgICAgICAqIEByZXR1cm4ge1RlbXBsYXRlSW5zdGFuY2VCYXNlfSBUZW1wbGF0ZSBpbnN0YW5jZSByZXByZXNlbnRpbmcgdGhlCiAgICAgICAqICAgYmluZGluZyBzY29wZSBmb3IgdGhlIGVsZW1lbnQKICAgICAgICovCiAgICAgIG1vZGVsRm9yRWxlbWVudCh0ZW1wbGF0ZSwgbm9kZSkgewogICAgICAgIGxldCBtb2RlbDsKICAgICAgICB3aGlsZSAobm9kZSkgewogICAgICAgICAgLy8gQW4gZWxlbWVudCB3aXRoIGEgX190ZW1wbGF0aXplSW5zdGFuY2UgbWFya3MgdGhlIHRvcCBib3VuZGFyeQogICAgICAgICAgLy8gb2YgYSBzY29wZTsgd2FsayB1cCB1bnRpbCB3ZSBmaW5kIG9uZSwgYW5kIHRoZW4gZW5zdXJlIHRoYXQKICAgICAgICAgIC8vIGl0cyBfX2RhdGFIb3N0IG1hdGNoZXMgYHRoaXNgLCBtZWFuaW5nIHRoaXMgZG9tLXJlcGVhdCBzdGFtcGVkIGl0CiAgICAgICAgICBpZiAoKG1vZGVsID0gbm9kZS5fX3RlbXBsYXRpemVJbnN0YW5jZSkpIHsKICAgICAgICAgICAgLy8gRm91bmQgYW4gZWxlbWVudCBzdGFtcGVkIGJ5IGFub3RoZXIgdGVtcGxhdGU7IGtlZXAgd2Fsa2luZyB1cAogICAgICAgICAgICAvLyBmcm9tIGl0cyBfX2RhdGFIb3N0CiAgICAgICAgICAgIGlmIChtb2RlbC5fX2RhdGFIb3N0ICE9IHRlbXBsYXRlKSB7CiAgICAgICAgICAgICAgbm9kZSA9IG1vZGVsLl9fZGF0YUhvc3Q7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgcmV0dXJuIG1vZGVsOwogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAvLyBTdGlsbCBpbiBhIHRlbXBsYXRlIHNjb3BlLCBrZWVwIGdvaW5nIHVwIHVudGlsCiAgICAgICAgICAgIC8vIGEgX190ZW1wbGF0aXplSW5zdGFuY2UgaXMgZm91bmQKICAgICAgICAgICAgbm9kZSA9IG5vZGUucGFyZW50Tm9kZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgIH07CgogICAgUG9seW1lci5UZW1wbGF0ZUluc3RhbmNlQmFzZSA9IFRlbXBsYXRlSW5zdGFuY2VCYXNlOwoKICB9KSgpOwoKPC9zY3JpcHQ+PHNjcmlwdD4KICAoZnVuY3Rpb24oKSB7CiAgICAndXNlIHN0cmljdCc7CgogICAgbGV0IFRlbXBsYXRlSW5zdGFuY2VCYXNlID0gUG9seW1lci5UZW1wbGF0ZUluc3RhbmNlQmFzZTsgLy8gZXNsaW50LWRpc2FibGUtbGluZQoKICAgIC8qKgogICAgICogQHR5cGVkZWYge3sKICAgICAqICAgX3RlbXBsYXRpemVyVGVtcGxhdGU6IEhUTUxUZW1wbGF0ZUVsZW1lbnQsCiAgICAgKiAgIF9wYXJlbnRNb2RlbDogYm9vbGVhbiwKICAgICAqICAgX2luc3RhbmNlUHJvcHM6IE9iamVjdCwKICAgICAqICAgX2ZvcndhcmRIb3N0UHJvcFYyOiBGdW5jdGlvbiwKICAgICAqICAgX25vdGlmeUluc3RhbmNlUHJvcFYyOiBGdW5jdGlvbiwKICAgICAqICAgY3RvcjogVGVtcGxhdGVJbnN0YW5jZUJhc2UKICAgICAqIH19CiAgICAgKi8KICAgIGxldCBUZW1wbGF0aXplclVzZXI7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUKCiAgICAvKioKICAgICAqIFRoZSBgUG9seW1lci5UZW1wbGF0aXplcmAgYmVoYXZpb3IgYWRkcyBtZXRob2RzIHRvIGdlbmVyYXRlIGluc3RhbmNlcyBvZgogICAgICogdGVtcGxhdGVzIHRoYXQgYXJlIGVhY2ggbWFuYWdlZCBieSBhbiBhbm9ueW1vdXMgYFBvbHltZXIuUHJvcGVydHlFZmZlY3RzYAogICAgICogaW5zdGFuY2Ugd2hlcmUgZGF0YS1iaW5kaW5ncyBpbiB0aGUgc3RhbXBlZCB0ZW1wbGF0ZSBjb250ZW50IGFyZSBib3VuZCB0bwogICAgICogYWNjZXNzb3JzIG9uIGl0c2VsZi4KICAgICAqCiAgICAgKiBUaGlzIGJlaGF2aW9yIGlzIHByb3ZpZGVkIGluIFBvbHltZXIgMi54IGFzIGEgaHlicmlkLWVsZW1lbnQgY29udmVuaWVuY2UKICAgICAqIG9ubHkuICBGb3Igbm9uLWh5YnJpZCB1c2FnZSwgdGhlIGBQb2x5bWVyLlRlbXBsYXRpemVgIGxpYnJhcnkKICAgICAqIHNob3VsZCBiZSB1c2VkIGluc3RlYWQuCiAgICAgKgogICAgICogRXhhbXBsZToKICAgICAqCiAgICAgKiAgICAgLy8gR2V0IGEgdGVtcGxhdGUgZnJvbSBzb21ld2hlcmUsIGUuZy4gbGlnaHQgRE9NCiAgICAgKiAgICAgbGV0IHRlbXBsYXRlID0gdGhpcy5xdWVyeVNlbGVjdG9yKCd0ZW1wbGF0ZScpOwogICAgICogICAgIC8vIFByZXBhcmUgdGhlIHRlbXBsYXRlCiAgICAgKiAgICAgdGhpcy50ZW1wbGF0aXplKHRlbXBsYXRlKTsKICAgICAqICAgICAvLyBJbnN0YW5jZSB0aGUgdGVtcGxhdGUgd2l0aCBhbiBpbml0aWFsIGRhdGEgbW9kZWwKICAgICAqICAgICBsZXQgaW5zdGFuY2UgPSB0aGlzLnN0YW1wKHtteVByb3A6ICdpbml0aWFsJ30pOwogICAgICogICAgIC8vIEluc2VydCB0aGUgaW5zdGFuY2UncyBET00gc29tZXdoZXJlLCBlLmcuIGxpZ2h0IERPTQogICAgICogICAgIFBvbHltZXIuZG9tKHRoaXMpLmFwcGVuZENoaWxkKGluc3RhbmNlLnJvb3QpOwogICAgICogICAgIC8vIENoYW5naW5nIGEgcHJvcGVydHkgb24gdGhlIGluc3RhbmNlIHdpbGwgcHJvcGFnYXRlIHRvIGJpbmRpbmdzCiAgICAgKiAgICAgLy8gaW4gdGhlIHRlbXBsYXRlCiAgICAgKiAgICAgaW5zdGFuY2UubXlQcm9wID0gJ25ldyB2YWx1ZSc7CiAgICAgKgogICAgICogVXNlcnMgb2YgYFRlbXBsYXRpemVyYCBtYXkgbmVlZCB0byBpbXBsZW1lbnQgdGhlIGZvbGxvd2luZyBhYnN0cmFjdAogICAgICogQVBJJ3MgdG8gZGV0ZXJtaW5lIGhvdyBwcm9wZXJ0aWVzIGFuZCBwYXRocyBmcm9tIHRoZSBob3N0IHNob3VsZCBiZQogICAgICogZm9yd2FyZGVkIGludG8gdG8gaW5zdGFuY2VzOgogICAgICoKICAgICAqICAgICBfZm9yd2FyZEhvc3RQcm9wVjI6IGZ1bmN0aW9uKHByb3AsIHZhbHVlKQogICAgICoKICAgICAqIExpa2V3aXNlLCB1c2VycyBtYXkgaW1wbGVtZW50IHRoZXNlIGFkZGl0aW9uYWwgYWJzdHJhY3QgQVBJJ3MgdG8gZGV0ZXJtaW5lCiAgICAgKiBob3cgaW5zdGFuY2Utc3BlY2lmaWMgcHJvcGVydGllcyB0aGF0IGNoYW5nZSBvbiB0aGUgaW5zdGFuY2Ugc2hvdWxkIGJlCiAgICAgKiBmb3J3YXJkZWQgb3V0IHRvIHRoZSBob3N0LCBpZiBuZWNlc3NhcnkuCiAgICAgKgogICAgICogICAgIF9ub3RpZnlJbnN0YW5jZVByb3BWMjogZnVuY3Rpb24oaW5zdCwgcHJvcCwgdmFsdWUpCiAgICAgKgogICAgICogSW4gb3JkZXIgdG8gZGV0ZXJtaW5lIHdoaWNoIHByb3BlcnRpZXMgYXJlIGluc3RhbmNlLXNwZWNpZmljIGFuZCByZXF1aXJlCiAgICAgKiBjdXN0b20gbm90aWZpY2F0aW9uIHZpYSBgX25vdGlmeUluc3RhbmNlUHJvcGAsIGRlZmluZSBhbiBgX2luc3RhbmNlUHJvcHNgCiAgICAgKiBvYmplY3QgY29udGFpbmluZyBrZXlzIGZvciBlYWNoIGluc3RhbmNlIHByb3AsIGZvciBleGFtcGxlOgogICAgICoKICAgICAqICAgICBfaW5zdGFuY2VQcm9wczogewogICAgICogICAgICAgaXRlbTogdHJ1ZSwKICAgICAqICAgICAgIGluZGV4OiB0cnVlCiAgICAgKiAgICAgfQogICAgICoKICAgICAqIEFueSBwcm9wZXJ0aWVzIHVzZWQgaW4gdGhlIHRlbXBsYXRlIHRoYXQgYXJlIG5vdCBkZWZpbmVkIGluIF9pbnN0YW5jZVByb3AKICAgICAqIHdpbGwgYmUgZm9yd2FyZGVkIG91dCB0byB0aGUgVGVtcGxhdGl6ZSBgb3duZXJgIGF1dG9tYXRpY2FsbHkuCiAgICAgKgogICAgICogVXNlcnMgbWF5IGFsc28gaW1wbGVtZW50IHRoZSBmb2xsb3dpbmcgYWJzdHJhY3QgZnVuY3Rpb24gdG8gc2hvdyBvcgogICAgICogaGlkZSBhbnkgRE9NIGdlbmVyYXRlZCB1c2luZyBgc3RhbXBgOgogICAgICoKICAgICAqICAgICBfc2hvd0hpZGVDaGlsZHJlbjogZnVuY3Rpb24oc2hvdWxkSGlkZSkKICAgICAqCiAgICAgKiBOb3RlIHRoYXQgc29tZSBjYWxsYmFja3MgYXJlIHN1ZmZpeGVkIHdpdGggYFYyYCBpbiB0aGUgUG9seW1lciAyLnggYmVoYXZpb3IKICAgICAqIGFzIHRoZSBpbXBsZW1lbnRhdGlvbnMgd2lsbCBuZWVkIHRvIGRpZmZlciBmcm9tIHRoZSBjYWxsYmFja3MgcmVxdWlyZWQKICAgICAqIGJ5IHRoZSAxLnggVGVtcGxhdGl6ZXIgQVBJIGR1ZSB0byBjaGFuZ2VzIGluIHRoZSBgVGVtcGxhdGVJbnN0YW5jZWAgQVBJCiAgICAgKiBiZXR3ZWVuIHZlcnNpb25zIDEueCBhbmQgMi54LgogICAgICoKICAgICAqIEBwb2x5bWVyQmVoYXZpb3IKICAgICAqLwogICAgUG9seW1lci5UZW1wbGF0aXplciA9IHsKCiAgICAgIC8qKgogICAgICAgKiBHZW5lcmF0ZXMgYW4gYW5vbnltb3VzIGBUZW1wbGF0ZUluc3RhbmNlYCBjbGFzcyAoc3RvcmVkIGFzIGB0aGlzLmN0b3JgKQogICAgICAgKiBmb3IgdGhlIHByb3ZpZGVkIHRlbXBsYXRlLiAgVGhpcyBtZXRob2Qgc2hvdWxkIGJlIGNhbGxlZCBvbmNlIHBlcgogICAgICAgKiB0ZW1wbGF0ZSB0byBwcmVwYXJlIGFuIGVsZW1lbnQgZm9yIHN0YW1waW5nIHRoZSB0ZW1wbGF0ZSwgZm9sbG93ZWQKICAgICAgICogYnkgYHN0YW1wYCB0byBjcmVhdGUgbmV3IGluc3RhbmNlcyBvZiB0aGUgdGVtcGxhdGUuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7IUhUTUxUZW1wbGF0ZUVsZW1lbnR9IHRlbXBsYXRlIFRlbXBsYXRlIHRvIHByZXBhcmUKICAgICAgICogQHBhcmFtIHtib29sZWFuPX0gbXV0YWJsZURhdGEgV2hlbiBgdHJ1ZWAsIHRoZSBnZW5lcmF0ZWQgY2xhc3Mgd2lsbCBza2lwCiAgICAgICAqICAgc3RyaWN0IGRpcnR5LWNoZWNraW5nIGZvciBvYmplY3RzIGFuZCBhcnJheXMgKGFsd2F5cyBjb25zaWRlciB0aGVtIHRvCiAgICAgICAqICAgYmUgImRpcnR5IikuIERlZmF1bHRzIHRvIGZhbHNlLgogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKiBAdGhpcyB7VGVtcGxhdGl6ZXJVc2VyfQogICAgICAgKi8KICAgICAgdGVtcGxhdGl6ZSh0ZW1wbGF0ZSwgbXV0YWJsZURhdGEpIHsKICAgICAgICB0aGlzLl90ZW1wbGF0aXplclRlbXBsYXRlID0gdGVtcGxhdGU7CiAgICAgICAgdGhpcy5jdG9yID0gUG9seW1lci5UZW1wbGF0aXplLnRlbXBsYXRpemUodGVtcGxhdGUsIHRoaXMsIHsKICAgICAgICAgIG11dGFibGVEYXRhOiBCb29sZWFuKG11dGFibGVEYXRhKSwKICAgICAgICAgIHBhcmVudE1vZGVsOiB0aGlzLl9wYXJlbnRNb2RlbCwKICAgICAgICAgIGluc3RhbmNlUHJvcHM6IHRoaXMuX2luc3RhbmNlUHJvcHMsCiAgICAgICAgICBmb3J3YXJkSG9zdFByb3A6IHRoaXMuX2ZvcndhcmRIb3N0UHJvcFYyLAogICAgICAgICAgbm90aWZ5SW5zdGFuY2VQcm9wOiB0aGlzLl9ub3RpZnlJbnN0YW5jZVByb3BWMgogICAgICAgIH0pOwogICAgICB9LAoKICAgICAgLyoqCiAgICAgICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIHRlbXBsYXRlIHByZXBhcmVkIGJ5IGB0ZW1wbGF0aXplYC4gIFRoZSBvYmplY3QKICAgICAgICogcmV0dXJuZWQgaXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGFub255bW91cyBjbGFzcyBnZW5lcmF0ZWQgYnkgYHRlbXBsYXRpemVgCiAgICAgICAqIHdob3NlIGByb290YCBwcm9wZXJ0eSBpcyBhIGRvY3VtZW50IGZyYWdtZW50IGNvbnRhaW5pbmcgbmV3bHkgY2xvbmVkCiAgICAgICAqIHRlbXBsYXRlIGNvbnRlbnQsIGFuZCB3aGljaCBoYXMgcHJvcGVydHkgYWNjZXNzb3JzIGNvcnJlc3BvbmRpbmcgdG8KICAgICAgICogcHJvcGVydGllcyByZWZlcmVuY2VkIGluIHRlbXBsYXRlIGJpbmRpbmdzLgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge09iamVjdD19IG1vZGVsIE9iamVjdCBjb250YWluaW5nIGluaXRpYWwgcHJvcGVydHkgdmFsdWVzIHRvCiAgICAgICAqICAgcG9wdWxhdGUgaW50byB0aGUgdGVtcGxhdGUgYmluZGluZ3MuCiAgICAgICAqIEByZXR1cm4ge1RlbXBsYXRlSW5zdGFuY2VCYXNlfSBSZXR1cm5zIHRoZSBjcmVhdGVkIGluc3RhbmNlIG9mCiAgICAgICAqIHRoZSB0ZW1wbGF0ZSBwcmVwYXJlZCBieSBgdGVtcGxhdGl6ZWAuCiAgICAgICAqIEB0aGlzIHtUZW1wbGF0aXplclVzZXJ9CiAgICAgICAqLwogICAgICBzdGFtcChtb2RlbCkgewogICAgICAgIHJldHVybiBuZXcgdGhpcy5jdG9yKG1vZGVsKTsKICAgICAgfSwKCiAgICAgIC8qKgogICAgICAgKiBSZXR1cm5zIHRoZSB0ZW1wbGF0ZSAibW9kZWwiIChgVGVtcGxhdGVJbnN0YW5jZWApIGFzc29jaWF0ZWQgd2l0aAogICAgICAgKiBhIGdpdmVuIGVsZW1lbnQsIHdoaWNoIHNlcnZlcyBhcyB0aGUgYmluZGluZyBzY29wZSBmb3IgdGhlIHRlbXBsYXRlCiAgICAgICAqIGluc3RhbmNlIHRoZSBlbGVtZW50IGlzIGNvbnRhaW5lZCBpbi4gIEEgdGVtcGxhdGUgbW9kZWwgc2hvdWxkIGJlIHVzZWQKICAgICAgICogdG8gbWFuaXB1bGF0ZSBkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHRlbXBsYXRlIGluc3RhbmNlLgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbCBFbGVtZW50IGZvciB3aGljaCB0byByZXR1cm4gYSB0ZW1wbGF0ZSBtb2RlbC4KICAgICAgICogQHJldHVybiB7VGVtcGxhdGVJbnN0YW5jZUJhc2V9IE1vZGVsIHJlcHJlc2VudGluZyB0aGUgYmluZGluZyBzY29wZSBmb3IKICAgICAgICogICB0aGUgZWxlbWVudC4KICAgICAgICogQHRoaXMge1RlbXBsYXRpemVyVXNlcn0KICAgICAgICovCiAgICAgIG1vZGVsRm9yRWxlbWVudChlbCkgewogICAgICAgIHJldHVybiBQb2x5bWVyLlRlbXBsYXRpemUubW9kZWxGb3JFbGVtZW50KHRoaXMuX3RlbXBsYXRpemVyVGVtcGxhdGUsIGVsKTsKICAgICAgfQogICAgfTsKCiAgfSkoKTsKPC9zY3JpcHQ+PHNjcmlwdD4KCiAgKGZ1bmN0aW9uKCkgewogICAgJ3VzZSBzdHJpY3QnOwoKICAgIC8qKgogICAgICogQGNvbnN0cnVjdG9yCiAgICAgKiBAZXh0ZW5kcyB7SFRNTEVsZW1lbnR9CiAgICAgKiBAaW1wbGVtZW50cyB7UG9seW1lcl9Qcm9wZXJ0eUVmZmVjdHN9CiAgICAgKiBAaW1wbGVtZW50cyB7UG9seW1lcl9PcHRpb25hbE11dGFibGVEYXRhfQogICAgICogQGltcGxlbWVudHMge1BvbHltZXJfR2VzdHVyZUV2ZW50TGlzdGVuZXJzfQogICAgICogQHByaXZhdGUKICAgICAqLwogICAgY29uc3QgZG9tQmluZEJhc2UgPQogICAgICBQb2x5bWVyLkdlc3R1cmVFdmVudExpc3RlbmVycygKICAgICAgICBQb2x5bWVyLk9wdGlvbmFsTXV0YWJsZURhdGEoCiAgICAgICAgICBQb2x5bWVyLlByb3BlcnR5RWZmZWN0cyhIVE1MRWxlbWVudCkpKTsKCiAgICAvKioKICAgICAqIEN1c3RvbSBlbGVtZW50IHRvIGFsbG93IHVzaW5nIFBvbHltZXIncyB0ZW1wbGF0ZSBmZWF0dXJlcyAoZGF0YSBiaW5kaW5nLAogICAgICogZGVjbGFyYXRpdmUgZXZlbnQgbGlzdGVuZXJzLCBldGMuKSBpbiB0aGUgbWFpbiBkb2N1bWVudCB3aXRob3V0IGRlZmluaW5nCiAgICAgKiBhIG5ldyBjdXN0b20gZWxlbWVudC4KICAgICAqCiAgICAgKiBgPHRlbXBsYXRlPmAgdGFncyB1dGlsaXppbmcgYmluZGluZ3MgbWF5IGJlIHdyYXBwZWQgd2l0aCB0aGUgYDxkb20tYmluZD5gCiAgICAgKiBlbGVtZW50LCB3aGljaCB3aWxsIGltbWVkaWF0ZWx5IHN0YW1wIHRoZSB3cmFwcGVkIHRlbXBsYXRlIGludG8gdGhlIG1haW4KICAgICAqIGRvY3VtZW50IGFuZCBiaW5kIGVsZW1lbnRzIHRvIHRoZSBgZG9tLWJpbmRgIGVsZW1lbnQgaXRzZWxmIGFzIHRoZQogICAgICogYmluZGluZyBzY29wZS4KICAgICAqCiAgICAgKiBAcG9seW1lcgogICAgICogQGN1c3RvbUVsZW1lbnQKICAgICAqIEBhcHBsaWVzTWl4aW4gUG9seW1lci5Qcm9wZXJ0eUVmZmVjdHMKICAgICAqIEBhcHBsaWVzTWl4aW4gUG9seW1lci5PcHRpb25hbE11dGFibGVEYXRhCiAgICAgKiBAYXBwbGllc01peGluIFBvbHltZXIuR2VzdHVyZUV2ZW50TGlzdGVuZXJzCiAgICAgKiBAZXh0ZW5kcyB7ZG9tQmluZEJhc2V9CiAgICAgKiBAbWVtYmVyb2YgUG9seW1lcgogICAgICogQHN1bW1hcnkgQ3VzdG9tIGVsZW1lbnQgdG8gYWxsb3cgdXNpbmcgUG9seW1lcidzIHRlbXBsYXRlIGZlYXR1cmVzIChkYXRhCiAgICAgKiAgIGJpbmRpbmcsIGRlY2xhcmF0aXZlIGV2ZW50IGxpc3RlbmVycywgZXRjLikgaW4gdGhlIG1haW4gZG9jdW1lbnQuCiAgICAgKi8KICAgIGNsYXNzIERvbUJpbmQgZXh0ZW5kcyBkb21CaW5kQmFzZSB7CgogICAgICBzdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpIHsgcmV0dXJuIFsnbXV0YWJsZS1kYXRhJ107IH0KCiAgICAgIGNvbnN0cnVjdG9yKCkgewogICAgICAgIHN1cGVyKCk7CiAgICAgICAgaWYgKFBvbHltZXIuc3RyaWN0VGVtcGxhdGVQb2xpY3kpIHsKICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgc3RyaWN0VGVtcGxhdGVQb2xpY3k6IGRvbS1iaW5kIG5vdCBhbGxvd2VkYCk7CiAgICAgICAgfQogICAgICAgIHRoaXMucm9vdCA9IG51bGw7CiAgICAgICAgdGhpcy4kID0gbnVsbDsKICAgICAgICB0aGlzLl9fY2hpbGRyZW4gPSBudWxsOwogICAgICB9CgogICAgICAvKiogQHJldHVybiB7dm9pZH0gKi8KICAgICAgYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKCkgewogICAgICAgIC8vIGFzc3VtZXMgb25seSBvbmUgb2JzZXJ2ZWQgYXR0cmlidXRlCiAgICAgICAgdGhpcy5tdXRhYmxlRGF0YSA9IHRydWU7CiAgICAgIH0KCiAgICAgIC8qKiBAcmV0dXJuIHt2b2lkfSAqLwogICAgICBjb25uZWN0ZWRDYWxsYmFjaygpIHsKICAgICAgICB0aGlzLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CiAgICAgICAgdGhpcy5yZW5kZXIoKTsKICAgICAgfQoKICAgICAgLyoqIEByZXR1cm4ge3ZvaWR9ICovCiAgICAgIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkgewogICAgICAgIHRoaXMuX19yZW1vdmVDaGlsZHJlbigpOwogICAgICB9CgogICAgICBfX2luc2VydENoaWxkcmVuKCkgewogICAgICAgIHRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcy5yb290LCB0aGlzKTsKICAgICAgfQoKICAgICAgX19yZW1vdmVDaGlsZHJlbigpIHsKICAgICAgICBpZiAodGhpcy5fX2NoaWxkcmVuKSB7CiAgICAgICAgICBmb3IgKGxldCBpPTA7IGk8dGhpcy5fX2NoaWxkcmVuLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIHRoaXMucm9vdC5hcHBlbmRDaGlsZCh0aGlzLl9fY2hpbGRyZW5baV0pOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIEZvcmNlcyB0aGUgZWxlbWVudCB0byByZW5kZXIgaXRzIGNvbnRlbnQuIFRoaXMgaXMgdHlwaWNhbGx5IG9ubHkKICAgICAgICogbmVjZXNzYXJ5IHRvIGNhbGwgaWYgSFRNTEltcG9ydHMgd2l0aCB0aGUgYXN5bmMgYXR0cmlidXRlIGFyZSB1c2VkLgogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKi8KICAgICAgcmVuZGVyKCkgewogICAgICAgIGxldCB0ZW1wbGF0ZTsKICAgICAgICBpZiAoIXRoaXMuX19jaGlsZHJlbikgewogICAgICAgICAgdGVtcGxhdGUgPSAvKiogQHR5cGUge0hUTUxUZW1wbGF0ZUVsZW1lbnR9ICovKHRlbXBsYXRlIHx8IHRoaXMucXVlcnlTZWxlY3RvcigndGVtcGxhdGUnKSk7CiAgICAgICAgICBpZiAoIXRlbXBsYXRlKSB7CiAgICAgICAgICAgIC8vIFdhaXQgdW50aWwgY2hpbGRMaXN0IGNoYW5nZXMgYW5kIHRlbXBsYXRlIHNob3VsZCBiZSB0aGVyZSBieSB0aGVuCiAgICAgICAgICAgIGxldCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKCgpID0+IHsKICAgICAgICAgICAgICB0ZW1wbGF0ZSA9IC8qKiBAdHlwZSB7SFRNTFRlbXBsYXRlRWxlbWVudH0gKi8odGhpcy5xdWVyeVNlbGVjdG9yKCd0ZW1wbGF0ZScpKTsKICAgICAgICAgICAgICBpZiAodGVtcGxhdGUpIHsKICAgICAgICAgICAgICAgIG9ic2VydmVyLmRpc2Nvbm5lY3QoKTsKICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyKCk7CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignZG9tLWJpbmQgcmVxdWlyZXMgYSA8dGVtcGxhdGU+IGNoaWxkJyk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLCB7Y2hpbGRMaXN0OiB0cnVlfSk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KICAgICAgICAgIHRoaXMucm9vdCA9IHRoaXMuX3N0YW1wVGVtcGxhdGUodGVtcGxhdGUpOwogICAgICAgICAgdGhpcy4kID0gdGhpcy5yb290LiQ7CiAgICAgICAgICB0aGlzLl9fY2hpbGRyZW4gPSBbXTsKICAgICAgICAgIGZvciAobGV0IG49dGhpcy5yb290LmZpcnN0Q2hpbGQ7IG47IG49bi5uZXh0U2libGluZykgewogICAgICAgICAgICB0aGlzLl9fY2hpbGRyZW5bdGhpcy5fX2NoaWxkcmVuLmxlbmd0aF0gPSBuOwogICAgICAgICAgfQogICAgICAgICAgdGhpcy5fZW5hYmxlUHJvcGVydGllcygpOwogICAgICAgIH0KICAgICAgICB0aGlzLl9faW5zZXJ0Q2hpbGRyZW4oKTsKICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdkb20tY2hhbmdlJywgewogICAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICAgICAgfSkpOwogICAgICB9CgogICAgfQoKICAgIGN1c3RvbUVsZW1lbnRzLmRlZmluZSgnZG9tLWJpbmQnLCBEb21CaW5kKTsKCiAgICAvKiogQGNvbnN0ICovCiAgICBQb2x5bWVyLkRvbUJpbmQgPSBEb21CaW5kOwoKICB9KSgpOwoKPC9zY3JpcHQ+PHNjcmlwdD4KICAoZnVuY3Rpb24oKSB7CiAgICAndXNlIHN0cmljdCc7CgogICAgLyoqCiAgICAgKiBDbGFzcyByZXByZXNlbnRpbmcgYSBzdGF0aWMgc3RyaW5nIHZhbHVlIHdoaWNoIGNhbiBiZSB1c2VkIHRvIGZpbHRlcgogICAgICogc3RyaW5ncyBieSBhc3NldGluZyB0aGF0IHRoZXkgaGF2ZSBiZWVuIGNyZWF0ZWQgdmlhIHRoaXMgY2xhc3MuIFRoZQogICAgICogYHZhbHVlYCBwcm9wZXJ0eSByZXR1cm5zIHRoZSBzdHJpbmcgcGFzc2VkIHRvIHRoZSBjb25zdHJ1Y3Rvci4KICAgICAqLwogICAgY2xhc3MgTGl0ZXJhbFN0cmluZyB7CiAgICAgIGNvbnN0cnVjdG9yKHN0cmluZykgewogICAgICAgIC8qKiBAdHlwZSB7c3RyaW5nfSAqLwogICAgICAgIHRoaXMudmFsdWUgPSBzdHJpbmcudG9TdHJpbmcoKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogQHJldHVybiB7c3RyaW5nfSBMaXRlcmFsU3RyaW5nIHN0cmluZyB2YWx1ZQogICAgICAgKi8KICAgICAgdG9TdHJpbmcoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWU7CiAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgT2JqZWN0IHRvIHN0cmluZ2lmeSBpbnRvIEhUTUwKICAgICAqIEByZXR1cm4ge3N0cmluZ30gSFRNTCBzdHJpbmdpZmllZCBmb3JtIG9mIGBvYmpgCiAgICAgKi8KICAgIGZ1bmN0aW9uIGxpdGVyYWxWYWx1ZSh2YWx1ZSkgewogICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBMaXRlcmFsU3RyaW5nKSB7CiAgICAgICAgcmV0dXJuIC8qKiBAdHlwZSB7IUxpdGVyYWxTdHJpbmd9ICovKHZhbHVlKS52YWx1ZTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYG5vbi1saXRlcmFsIHZhbHVlIHBhc3NlZCB0byBQb2x5bWVyLmh0bWxMaXRlcmFsOiAke3ZhbHVlfWApOwogICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIE9iamVjdCB0byBzdHJpbmdpZnkgaW50byBIVE1MCiAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IEhUTUwgc3RyaW5naWZpZWQgZm9ybSBvZiBgb2JqYAogICAgICovCiAgICBmdW5jdGlvbiBodG1sVmFsdWUodmFsdWUpIHsKICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgSFRNTFRlbXBsYXRlRWxlbWVudCkgewogICAgICAgIHJldHVybiAvKiogQHR5cGUgeyFIVE1MVGVtcGxhdGVFbGVtZW50IH0gKi8odmFsdWUpLmlubmVySFRNTDsKICAgICAgfSBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIExpdGVyYWxTdHJpbmcpIHsKICAgICAgICByZXR1cm4gbGl0ZXJhbFZhbHVlKHZhbHVlKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYG5vbi10ZW1wbGF0ZSB2YWx1ZSBwYXNzZWQgdG8gUG9seW1lci5odG1sOiAke3ZhbHVlfWApOwogICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBBIHRlbXBsYXRlIGxpdGVyYWwgdGFnIHRoYXQgY3JlYXRlcyBhbiBIVE1MIDx0ZW1wbGF0ZT4gZWxlbWVudCBmcm9tIHRoZQogICAgICogY29udGVudHMgb2YgdGhlIHN0cmluZy4KICAgICAqCiAgICAgKiBUaGlzIGFsbG93cyB5b3UgdG8gd3JpdGUgYSBQb2x5bWVyIFRlbXBsYXRlIGluIEphdmFTY3JpcHQuCiAgICAgKgogICAgICogVGVtcGxhdGVzIGNhbiBiZSBjb21wb3NlZCBieSBpbnRlcnBvbGF0aW5nIGBIVE1MVGVtcGxhdGVFbGVtZW50YHMgaW4KICAgICAqIGV4cHJlc3Npb25zIGluIHRoZSBKYXZhU2NyaXB0IHRlbXBsYXRlIGxpdGVyYWwuIFRoZSBuZXN0ZWQgdGVtcGxhdGUncwogICAgICogYGlubmVySFRNTGAgaXMgaW5jbHVkZWQgaW4gdGhlIGNvbnRhaW5pbmcgdGVtcGxhdGUuICBUaGUgb25seSBvdGhlcgogICAgICogdmFsdWVzIGFsbG93ZWQgaW4gZXhwcmVzc2lvbnMgYXJlIHRob3NlIHJldHVybmVkIGZyb20gYFBvbHltZXIuaHRtbExpdGVyYWxgCiAgICAgKiB3aGljaCBlbnN1cmVzIG9ubHkgbGl0ZXJhbCB2YWx1ZXMgZnJvbSBKUyBzb3VyY2UgZXZlciByZWFjaCB0aGUgSFRNTCwgdG8KICAgICAqIGd1YXJkIGFnYWluc3QgWFNTIHJpc2tzLgogICAgICoKICAgICAqIEFsbCBvdGhlciB2YWx1ZXMgYXJlIGRpc2FsbG93ZWQgaW4gZXhwcmVzc2lvbnMgdG8gaGVscCBwcmV2ZW50IFhTUwogICAgICogYXR0YWNrczsgaG93ZXZlciwgYFBvbHltZXIuaHRtbExpdGVyYWxgIGNhbiBiZSB1c2VkIHRvIGNvbXBvc2Ugc3RhdGljCiAgICAgKiBzdHJpbmcgdmFsdWVzIGludG8gdGVtcGxhdGVzLiBUaGlzIGlzIHVzZWZ1bCB0byBjb21wb3NlIHN0cmluZ3MgaW50bwogICAgICogcGxhY2VzIHRoYXQgZG8gbm90IGFjY2VwdCBodG1sLCBsaWtlIHRoZSBjc3MgdGV4dCBvZiBhIGBzdHlsZWAKICAgICAqIGVsZW1lbnQuCiAgICAgKgogICAgICogRXhhbXBsZToKICAgICAqCiAgICAgKiAgICAgc3RhdGljIGdldCB0ZW1wbGF0ZSgpIHsKICAgICAqICAgICAgIHJldHVybiBQb2x5bWVyLmh0bWxgCiAgICAgKiAgICAgICAgIDxzdHlsZT46aG9zdHsgY29udGVudDoiLi4uIiB9PC9zdHlsZT4KICAgICAqICAgICAgICAgPGRpdiBjbGFzcz0ic2hhZG93ZWQiPiR7dGhpcy5wYXJ0aWFsVGVtcGxhdGV9PC9kaXY+CiAgICAgKiAgICAgICAgICR7c3VwZXIudGVtcGxhdGV9CiAgICAgKiAgICAgICBgOwogICAgICogICAgIH0KICAgICAqICAgICBzdGF0aWMgZ2V0IHBhcnRpYWxUZW1wbGF0ZSgpIHsgcmV0dXJuIFBvbHltZXIuaHRtbGA8c3Bhbj5QYXJ0aWFsITwvc3Bhbj5gOyB9CiAgICAgKgogICAgICogQG1lbWJlcm9mIFBvbHltZXIKICAgICAqIEBwYXJhbSB7IUlUZW1wbGF0ZUFycmF5fSBzdHJpbmdzIENvbnN0YW50IHBhcnRzIG9mIHRhZ2dlZCB0ZW1wbGF0ZSBsaXRlcmFsCiAgICAgKiBAcGFyYW0gey4uLip9IHZhbHVlcyBWYXJpYWJsZSBwYXJ0cyBvZiB0YWdnZWQgdGVtcGxhdGUgbGl0ZXJhbAogICAgICogQHJldHVybiB7IUhUTUxUZW1wbGF0ZUVsZW1lbnR9IENvbnN0cnVjdGVkIEhUTUxUZW1wbGF0ZUVsZW1lbnQKICAgICAqLwogICAgUG9seW1lci5odG1sID0gZnVuY3Rpb24gaHRtbChzdHJpbmdzLCAuLi52YWx1ZXMpIHsKICAgICAgY29uc3QgdGVtcGxhdGUgPSAvKiogQHR5cGUgeyFIVE1MVGVtcGxhdGVFbGVtZW50fSAqLyhkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZW1wbGF0ZScpKTsKICAgICAgdGVtcGxhdGUuaW5uZXJIVE1MID0gdmFsdWVzLnJlZHVjZSgoYWNjLCB2LCBpZHgpID0+CiAgICAgICAgICBhY2MgKyBodG1sVmFsdWUodikgKyBzdHJpbmdzW2lkeCArIDFdLCBzdHJpbmdzWzBdKTsKICAgICAgcmV0dXJuIHRlbXBsYXRlOwogICAgfTsKCiAgICAvKioKICAgICAqIEFuIGh0bWwgbGl0ZXJhbCB0YWcgdGhhdCBjYW4gYmUgdXNlZCB3aXRoIGBQb2x5bWVyLmh0bWxgIHRvIGNvbXBvc2UuCiAgICAgKiBhIGxpdGVyYWwgc3RyaW5nLgogICAgICoKICAgICAqIEV4YW1wbGU6CiAgICAgKgogICAgICogICAgIHN0YXRpYyBnZXQgdGVtcGxhdGUoKSB7CiAgICAgKiAgICAgICByZXR1cm4gUG9seW1lci5odG1sYAogICAgICogICAgICAgICA8c3R5bGU+CiAgICAgKiAgICAgICAgICAgOmhvc3QgeyBkaXNwbGF5OiBibG9jazsgfQogICAgICogICAgICAgICAgICR7c3R5bGVUZW1wbGF0ZX0KICAgICAqICAgICAgICAgPC9zdHlsZT4KICAgICAqICAgICAgICAgPGRpdiBjbGFzcz0ic2hhZG93ZWQiPiR7c3RhdGljVmFsdWV9PC9kaXY+CiAgICAgKiAgICAgICAgICR7c3VwZXIudGVtcGxhdGV9CiAgICAgKiAgICAgICBgOwogICAgICogICAgIH0KICAgICAqICAgICBzdGF0aWMgZ2V0IHN0eWxlVGVtcGxhdGUoKSB7IHJldHVybiBQb2x5bWVyLmh0bWxMaXRlcmFsYC5zaGFkb3dlZCB7IGJhY2tncm91bmQ6IGdyYXk7IH1gOyB9CiAgICAgKgogICAgICogQG1lbWJlcm9mIFBvbHltZXIKICAgICAqIEBwYXJhbSB7IUlUZW1wbGF0ZUFycmF5fSBzdHJpbmdzIENvbnN0YW50IHBhcnRzIG9mIHRhZ2dlZCB0ZW1wbGF0ZSBsaXRlcmFsCiAgICAgKiBAcGFyYW0gey4uLip9IHZhbHVlcyBWYXJpYWJsZSBwYXJ0cyBvZiB0YWdnZWQgdGVtcGxhdGUgbGl0ZXJhbAogICAgICogQHJldHVybiB7IUxpdGVyYWxTdHJpbmd9IENvbnN0cnVjdGVkIGxpdGVyYWwgc3RyaW5nCiAgICAgKi8KICAgIFBvbHltZXIuaHRtbExpdGVyYWwgPSBmdW5jdGlvbihzdHJpbmdzLCAuLi52YWx1ZXMpIHsKICAgICAgcmV0dXJuIG5ldyBMaXRlcmFsU3RyaW5nKHZhbHVlcy5yZWR1Y2UoKGFjYywgdiwgaWR4KSA9PgogICAgICAgICAgYWNjICsgbGl0ZXJhbFZhbHVlKHYpICsgc3RyaW5nc1tpZHggKyAxXSwgc3RyaW5nc1swXSkpOwogICAgfTsKICB9KSgpOwo8L3NjcmlwdD48c2NyaXB0PgooZnVuY3Rpb24oKSB7CiAgJ3VzZSBzdHJpY3QnOwoKICAvKioKICAgKiBCYXNlIGNsYXNzIHRoYXQgcHJvdmlkZXMgdGhlIGNvcmUgQVBJIGZvciBQb2x5bWVyJ3MgbWV0YS1wcm9ncmFtbWluZwogICAqIGZlYXR1cmVzIGluY2x1ZGluZyB0ZW1wbGF0ZSBzdGFtcGluZywgZGF0YS1iaW5kaW5nLCBhdHRyaWJ1dGUgZGVzZXJpYWxpemF0aW9uLAogICAqIGFuZCBwcm9wZXJ0eSBjaGFuZ2Ugb2JzZXJ2YXRpb24uCiAgICoKICAgKiBAY3VzdG9tRWxlbWVudAogICAqIEBtZW1iZXJvZiBQb2x5bWVyCiAgICogQGNvbnN0cnVjdG9yCiAgICogQGltcGxlbWVudHMge1BvbHltZXJfRWxlbWVudE1peGlufQogICAqIEBleHRlbmRzIHtIVE1MRWxlbWVudH0KICAgKiBAYXBwbGllc01peGluIFBvbHltZXIuRWxlbWVudE1peGluCiAgICogQHN1bW1hcnkgQ3VzdG9tIGVsZW1lbnQgYmFzZSBjbGFzcyB0aGF0IHByb3ZpZGVzIHRoZSBjb3JlIEFQSSBmb3IgUG9seW1lcidzCiAgICogICBrZXkgbWV0YS1wcm9ncmFtbWluZyBmZWF0dXJlcyBpbmNsdWRpbmcgdGVtcGxhdGUgc3RhbXBpbmcsIGRhdGEtYmluZGluZywKICAgKiAgIGF0dHJpYnV0ZSBkZXNlcmlhbGl6YXRpb24sIGFuZCBwcm9wZXJ0eSBjaGFuZ2Ugb2JzZXJ2YXRpb24KICAgKi8KICBQb2x5bWVyLkVsZW1lbnQgPSBQb2x5bWVyLkVsZW1lbnRNaXhpbihIVE1MRWxlbWVudCk7CgogIC8vIE5PVEU6IHRoaXMgaXMgaGVyZSBmb3IgbW9kdWxpemVyIHRvIGV4cG9ydCBgaHRtbGAgZm9yIHRoZSBtb2R1bGUgdmVyc2lvbiBvZiB0aGlzIGZpbGUKICBQb2x5bWVyLmh0bWwgPSBQb2x5bWVyLmh0bWw7Cn0pKCk7Cjwvc2NyaXB0PjxzY3JpcHQ+CihmdW5jdGlvbigpIHsKICAndXNlIHN0cmljdCc7CgogIGxldCBUZW1wbGF0ZUluc3RhbmNlQmFzZSA9IFBvbHltZXIuVGVtcGxhdGVJbnN0YW5jZUJhc2U7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUKCiAgLyoqCiAgICogQGNvbnN0cnVjdG9yCiAgICogQGltcGxlbWVudHMge1BvbHltZXJfT3B0aW9uYWxNdXRhYmxlRGF0YX0KICAgKiBAZXh0ZW5kcyB7UG9seW1lci5FbGVtZW50fQogICAqIEBwcml2YXRlCiAgICovCiAgY29uc3QgZG9tUmVwZWF0QmFzZSA9IFBvbHltZXIuT3B0aW9uYWxNdXRhYmxlRGF0YShQb2x5bWVyLkVsZW1lbnQpOwoKICAvKioKICAgKiBUaGUgYDxkb20tcmVwZWF0PmAgZWxlbWVudCB3aWxsIGF1dG9tYXRpY2FsbHkgc3RhbXAgYW5kIGJpbmRzIG9uZSBpbnN0YW5jZQogICAqIG9mIHRlbXBsYXRlIGNvbnRlbnQgdG8gZWFjaCBvYmplY3QgaW4gYSB1c2VyLXByb3ZpZGVkIGFycmF5LgogICAqIGBkb20tcmVwZWF0YCBhY2NlcHRzIGFuIGBpdGVtc2AgcHJvcGVydHksIGFuZCBvbmUgaW5zdGFuY2Ugb2YgdGhlIHRlbXBsYXRlCiAgICogaXMgc3RhbXBlZCBmb3IgZWFjaCBpdGVtIGludG8gdGhlIERPTSBhdCB0aGUgbG9jYXRpb24gb2YgdGhlIGBkb20tcmVwZWF0YAogICAqIGVsZW1lbnQuICBUaGUgYGl0ZW1gIHByb3BlcnR5IHdpbGwgYmUgc2V0IG9uIGVhY2ggaW5zdGFuY2UncyBiaW5kaW5nCiAgICogc2NvcGUsIHRodXMgdGVtcGxhdGVzIHNob3VsZCBiaW5kIHRvIHN1Yi1wcm9wZXJ0aWVzIG9mIGBpdGVtYC4KICAgKgogICAqIEV4YW1wbGU6CiAgICoKICAgKiBgYGBodG1sCiAgICogPGRvbS1tb2R1bGUgaWQ9ImVtcGxveWVlLWxpc3QiPgogICAqCiAgICogICA8dGVtcGxhdGU+CiAgICoKICAgKiAgICAgPGRpdj4gRW1wbG95ZWUgbGlzdDogPC9kaXY+CiAgICogICAgIDxkb20tcmVwZWF0IGl0ZW1zPSJ7e2VtcGxveWVlc319Ij4KICAgKiAgICAgICA8dGVtcGxhdGU+CiAgICogICAgICAgICA8ZGl2PkZpcnN0IG5hbWU6IDxzcGFuPnt7aXRlbS5maXJzdH19PC9zcGFuPjwvZGl2PgogICAqICAgICAgICAgPGRpdj5MYXN0IG5hbWU6IDxzcGFuPnt7aXRlbS5sYXN0fX08L3NwYW4+PC9kaXY+CiAgICogICAgICAgPC90ZW1wbGF0ZT4KICAgKiAgICAgPC9kb20tcmVwZWF0PgogICAqCiAgICogICA8L3RlbXBsYXRlPgogICAqCiAgICogPC9kb20tbW9kdWxlPgogICAqIGBgYAogICAqCiAgICogV2l0aCB0aGUgZm9sbG93aW5nIGN1c3RvbSBlbGVtZW50IGRlZmluaXRpb246CiAgICoKICAgKiBgYGBqcwogICAqIGNsYXNzIEVtcGxveWVlTGlzdCBleHRlbmRzIFBvbHltZXIuRWxlbWVudCB7CiAgICogICBzdGF0aWMgZ2V0IGlzKCkgeyByZXR1cm4gJ2VtcGxveWVlLWxpc3QnOyB9CiAgICogICBzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKSB7CiAgICogICAgIHJldHVybiB7CiAgICogICAgICAgZW1wbG95ZWVzOiB7CiAgICogICAgICAgICB2YWx1ZSgpIHsKICAgKiAgICAgICAgICAgcmV0dXJuIFsKICAgKiAgICAgICAgICAgICB7Zmlyc3Q6ICdCb2InLCBsYXN0OiAnU21pdGgnfSwKICAgKiAgICAgICAgICAgICB7Zmlyc3Q6ICdTYWxseScsIGxhc3Q6ICdKb2huc29uJ30sCiAgICogICAgICAgICAgICAgLi4uCiAgICogICAgICAgICAgIF07CiAgICogICAgICAgICB9CiAgICogICAgICAgfQogICAqICAgICB9OwogICAqICAgfQogICAqIH0KICAgKiBgYGAKICAgKgogICAqIE5vdGlmaWNhdGlvbnMgZm9yIGNoYW5nZXMgdG8gaXRlbXMgc3ViLXByb3BlcnRpZXMgd2lsbCBiZSBmb3J3YXJkZWQgdG8gdGVtcGxhdGUKICAgKiBpbnN0YW5jZXMsIHdoaWNoIHdpbGwgdXBkYXRlIHZpYSB0aGUgbm9ybWFsIHN0cnVjdHVyZWQgZGF0YSBub3RpZmljYXRpb24gc3lzdGVtLgogICAqCiAgICogTXV0YXRpb25zIHRvIHRoZSBgaXRlbXNgIGFycmF5IGl0c2VsZiBzaG91bGQgYmUgbWFkZSB1c2luZyB0aGUgQXJyYXkKICAgKiBtdXRhdGlvbiBBUEkncyBvbiBgUG9seW1lci5CYXNlYCAoYHB1c2hgLCBgcG9wYCwgYHNwbGljZWAsIGBzaGlmdGAsCiAgICogYHVuc2hpZnRgKSwgYW5kIHRlbXBsYXRlIGluc3RhbmNlcyB3aWxsIGJlIGtlcHQgaW4gc3luYyB3aXRoIHRoZSBkYXRhIGluIHRoZQogICAqIGFycmF5LgogICAqCiAgICogRXZlbnRzIGNhdWdodCBieSBldmVudCBoYW5kbGVycyB3aXRoaW4gdGhlIGBkb20tcmVwZWF0YCB0ZW1wbGF0ZSB3aWxsIGJlCiAgICogZGVjb3JhdGVkIHdpdGggYSBgbW9kZWxgIHByb3BlcnR5LCB3aGljaCByZXByZXNlbnRzIHRoZSBiaW5kaW5nIHNjb3BlIGZvcgogICAqIGVhY2ggdGVtcGxhdGUgaW5zdGFuY2UuICBUaGUgbW9kZWwgaXMgYW4gaW5zdGFuY2Ugb2YgUG9seW1lci5CYXNlLCBhbmQgc2hvdWxkCiAgICogYmUgdXNlZCB0byBtYW5pcHVsYXRlIGRhdGEgb24gdGhlIGluc3RhbmNlLCBmb3IgZXhhbXBsZQogICAqIGBldmVudC5tb2RlbC5zZXQoJ2l0ZW0uY2hlY2tlZCcsIHRydWUpO2AuCiAgICoKICAgKiBBbHRlcm5hdGl2ZWx5LCB0aGUgbW9kZWwgZm9yIGEgdGVtcGxhdGUgaW5zdGFuY2UgZm9yIGFuIGVsZW1lbnQgc3RhbXBlZCBieQogICAqIGEgYGRvbS1yZXBlYXRgIGNhbiBiZSBvYnRhaW5lZCB1c2luZyB0aGUgYG1vZGVsRm9yRWxlbWVudGAgQVBJIG9uIHRoZQogICAqIGBkb20tcmVwZWF0YCB0aGF0IHN0YW1wZWQgaXQsIGZvciBleGFtcGxlCiAgICogYHRoaXMuJC5kb21SZXBlYXQubW9kZWxGb3JFbGVtZW50KGV2ZW50LnRhcmdldCkuc2V0KCdpdGVtLmNoZWNrZWQnLCB0cnVlKTtgLgogICAqIFRoaXMgbWF5IGJlIHVzZWZ1bCBmb3IgbWFuaXB1bGF0aW5nIGluc3RhbmNlIGRhdGEgb2YgZXZlbnQgdGFyZ2V0cyBvYnRhaW5lZAogICAqIGJ5IGV2ZW50IGhhbmRsZXJzIG9uIHBhcmVudHMgb2YgdGhlIGBkb20tcmVwZWF0YCAoZXZlbnQgZGVsZWdhdGlvbikuCiAgICoKICAgKiBBIHZpZXctc3BlY2lmaWMgZmlsdGVyL3NvcnQgbWF5IGJlIGFwcGxpZWQgdG8gZWFjaCBgZG9tLXJlcGVhdGAgYnkgc3VwcGx5aW5nIGEKICAgKiBgZmlsdGVyYCBhbmQvb3IgYHNvcnRgIHByb3BlcnR5LiAgVGhpcyBtYXkgYmUgYSBzdHJpbmcgdGhhdCBuYW1lcyBhIGZ1bmN0aW9uIG9uCiAgICogdGhlIGhvc3QsIG9yIGEgZnVuY3Rpb24gbWF5IGJlIGFzc2lnbmVkIHRvIHRoZSBwcm9wZXJ0eSBkaXJlY3RseS4gIFRoZSBmdW5jdGlvbnMKICAgKiBzaG91bGQgaW1wbGVtZW50ZWQgZm9sbG93aW5nIHRoZSBzdGFuZGFyZCBgQXJyYXlgIGZpbHRlci9zb3J0IEFQSS4KICAgKgogICAqIEluIG9yZGVyIHRvIHJlLXJ1biB0aGUgZmlsdGVyIG9yIHNvcnQgZnVuY3Rpb25zIGJhc2VkIG9uIGNoYW5nZXMgdG8gc3ViLWZpZWxkcwogICAqIG9mIGBpdGVtc2AsIHRoZSBgb2JzZXJ2ZWAgcHJvcGVydHkgbWF5IGJlIHNldCBhcyBhIHNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mCiAgICogYGl0ZW1gIHN1Yi1maWVsZHMgdGhhdCBzaG91bGQgY2F1c2UgYSByZS1maWx0ZXIvc29ydCB3aGVuIG1vZGlmaWVkLiAgSWYKICAgKiB0aGUgZmlsdGVyIG9yIHNvcnQgZnVuY3Rpb24gZGVwZW5kcyBvbiBwcm9wZXJ0aWVzIG5vdCBjb250YWluZWQgaW4gYGl0ZW1zYCwKICAgKiB0aGUgdXNlciBzaG91bGQgb2JzZXJ2ZSBjaGFuZ2VzIHRvIHRob3NlIHByb3BlcnRpZXMgYW5kIGNhbGwgYHJlbmRlcmAgdG8gdXBkYXRlCiAgICogdGhlIHZpZXcgYmFzZWQgb24gdGhlIGRlcGVuZGVuY3kgY2hhbmdlLgogICAqCiAgICogRm9yIGV4YW1wbGUsIGZvciBhbiBgZG9tLXJlcGVhdGAgd2l0aCBhIGZpbHRlciBvZiB0aGUgZm9sbG93aW5nOgogICAqCiAgICogYGBganMKICAgKiBpc0VuZ2luZWVyKGl0ZW0pIHsKICAgKiAgIHJldHVybiBpdGVtLnR5cGUgPT0gJ2VuZ2luZWVyJyB8fCBpdGVtLm1hbmFnZXIudHlwZSA9PSAnZW5naW5lZXInOwogICAqIH0KICAgKiBgYGAKICAgKgogICAqIFRoZW4gdGhlIGBvYnNlcnZlYCBwcm9wZXJ0eSBzaG91bGQgYmUgY29uZmlndXJlZCBhcyBmb2xsb3dzOgogICAqCiAgICogYGBgaHRtbAogICAqIDxkb20tcmVwZWF0IGl0ZW1zPSJ7e2VtcGxveWVlc319IiBmaWx0ZXI9ImlzRW5naW5lZXIiIG9ic2VydmU9InR5cGUgbWFuYWdlci50eXBlIj4KICAgKiBgYGAKICAgKgogICAqIEBjdXN0b21FbGVtZW50CiAgICogQHBvbHltZXIKICAgKiBAbWVtYmVyb2YgUG9seW1lcgogICAqIEBleHRlbmRzIHtkb21SZXBlYXRCYXNlfQogICAqIEBhcHBsaWVzTWl4aW4gUG9seW1lci5PcHRpb25hbE11dGFibGVEYXRhCiAgICogQHN1bW1hcnkgQ3VzdG9tIGVsZW1lbnQgZm9yIHN0YW1waW5nIGluc3RhbmNlIG9mIGEgdGVtcGxhdGUgYm91bmQgdG8KICAgKiAgIGl0ZW1zIGluIGFuIGFycmF5LgogICAqLwogIGNsYXNzIERvbVJlcGVhdCBleHRlbmRzIGRvbVJlcGVhdEJhc2UgewoKICAgIC8vIE5vdCBuZWVkZWQgdG8gZmluZCB0ZW1wbGF0ZTsgY2FuIGJlIHJlbW92ZWQgb25jZSB0aGUgYW5hbHl6ZXIKICAgIC8vIGNhbiBmaW5kIHRoZSB0YWcgbmFtZSBmcm9tIGN1c3RvbUVsZW1lbnRzLmRlZmluZSBjYWxsCiAgICBzdGF0aWMgZ2V0IGlzKCkgeyByZXR1cm4gJ2RvbS1yZXBlYXQnOyB9CgogICAgc3RhdGljIGdldCB0ZW1wbGF0ZSgpIHsgcmV0dXJuIG51bGw7IH0KCiAgICBzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKSB7CgogICAgICAvKioKICAgICAgICogRmlyZWQgd2hlbmV2ZXIgRE9NIGlzIGFkZGVkIG9yIHJlbW92ZWQgYnkgdGhpcyB0ZW1wbGF0ZSAoYnkKICAgICAgICogZGVmYXVsdCwgcmVuZGVyaW5nIG9jY3VycyBsYXppbHkpLiAgVG8gZm9yY2UgaW1tZWRpYXRlIHJlbmRlcmluZywgY2FsbAogICAgICAgKiBgcmVuZGVyYC4KICAgICAgICoKICAgICAgICogQGV2ZW50IGRvbS1jaGFuZ2UKICAgICAgICovCiAgICAgIHJldHVybiB7CgogICAgICAgIC8qKgogICAgICAgICAqIEFuIGFycmF5IGNvbnRhaW5pbmcgaXRlbXMgZGV0ZXJtaW5pbmcgaG93IG1hbnkgaW5zdGFuY2VzIG9mIHRoZSB0ZW1wbGF0ZQogICAgICAgICAqIHRvIHN0YW1wIGFuZCB0aGF0IHRoYXQgZWFjaCB0ZW1wbGF0ZSBpbnN0YW5jZSBzaG91bGQgYmluZCB0by4KICAgICAgICAgKi8KICAgICAgICBpdGVtczogewogICAgICAgICAgdHlwZTogQXJyYXkKICAgICAgICB9LAoKICAgICAgICAvKioKICAgICAgICAgKiBUaGUgbmFtZSBvZiB0aGUgdmFyaWFibGUgdG8gYWRkIHRvIHRoZSBiaW5kaW5nIHNjb3BlIGZvciB0aGUgYXJyYXkKICAgICAgICAgKiBlbGVtZW50IGFzc29jaWF0ZWQgd2l0aCBhIGdpdmVuIHRlbXBsYXRlIGluc3RhbmNlLgogICAgICAgICAqLwogICAgICAgIGFzOiB7CiAgICAgICAgICB0eXBlOiBTdHJpbmcsCiAgICAgICAgICB2YWx1ZTogJ2l0ZW0nCiAgICAgICAgfSwKCiAgICAgICAgLyoqCiAgICAgICAgICogVGhlIG5hbWUgb2YgdGhlIHZhcmlhYmxlIHRvIGFkZCB0byB0aGUgYmluZGluZyBzY29wZSB3aXRoIHRoZSBpbmRleAogICAgICAgICAqIG9mIHRoZSBpbnN0YW5jZSBpbiB0aGUgc29ydGVkIGFuZCBmaWx0ZXJlZCBsaXN0IG9mIHJlbmRlcmVkIGl0ZW1zLgogICAgICAgICAqIE5vdGUsIGZvciB0aGUgaW5kZXggaW4gdGhlIGB0aGlzLml0ZW1zYCBhcnJheSwgdXNlIHRoZSB2YWx1ZSBvZiB0aGUKICAgICAgICAgKiBgaXRlbXNJbmRleEFzYCBwcm9wZXJ0eS4KICAgICAgICAgKi8KICAgICAgICBpbmRleEFzOiB7CiAgICAgICAgICB0eXBlOiBTdHJpbmcsCiAgICAgICAgICB2YWx1ZTogJ2luZGV4JwogICAgICAgIH0sCgogICAgICAgIC8qKgogICAgICAgICAqIFRoZSBuYW1lIG9mIHRoZSB2YXJpYWJsZSB0byBhZGQgdG8gdGhlIGJpbmRpbmcgc2NvcGUgd2l0aCB0aGUgaW5kZXgKICAgICAgICAgKiBvZiB0aGUgaW5zdGFuY2UgaW4gdGhlIGB0aGlzLml0ZW1zYCBhcnJheS4gTm90ZSwgZm9yIHRoZSBpbmRleCBvZgogICAgICAgICAqIHRoaXMgaW5zdGFuY2UgaW4gdGhlIHNvcnRlZCBhbmQgZmlsdGVyZWQgbGlzdCBvZiByZW5kZXJlZCBpdGVtcywKICAgICAgICAgKiB1c2UgdGhlIHZhbHVlIG9mIHRoZSBgaW5kZXhBc2AgcHJvcGVydHkuCiAgICAgICAgICovCiAgICAgICAgaXRlbXNJbmRleEFzOiB7CiAgICAgICAgICB0eXBlOiBTdHJpbmcsCiAgICAgICAgICB2YWx1ZTogJ2l0ZW1zSW5kZXgnCiAgICAgICAgfSwKCiAgICAgICAgLyoqCiAgICAgICAgICogQSBmdW5jdGlvbiB0aGF0IHNob3VsZCBkZXRlcm1pbmUgdGhlIHNvcnQgb3JkZXIgb2YgdGhlIGl0ZW1zLiAgVGhpcwogICAgICAgICAqIHByb3BlcnR5IHNob3VsZCBlaXRoZXIgYmUgcHJvdmlkZWQgYXMgYSBzdHJpbmcsIGluZGljYXRpbmcgYSBtZXRob2QKICAgICAgICAgKiBuYW1lIG9uIHRoZSBlbGVtZW50J3MgaG9zdCwgb3IgZWxzZSBiZSBhbiBhY3R1YWwgZnVuY3Rpb24uICBUaGUKICAgICAgICAgKiBmdW5jdGlvbiBzaG91bGQgbWF0Y2ggdGhlIHNvcnQgZnVuY3Rpb24gcGFzc2VkIHRvIGBBcnJheS5zb3J0YC4KICAgICAgICAgKiBVc2luZyBhIHNvcnQgZnVuY3Rpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgdW5kZXJseWluZyBgaXRlbXNgIGFycmF5LgogICAgICAgICAqLwogICAgICAgIHNvcnQ6IHsKICAgICAgICAgIHR5cGU6IEZ1bmN0aW9uLAogICAgICAgICAgb2JzZXJ2ZXI6ICdfX3NvcnRDaGFuZ2VkJwogICAgICAgIH0sCgogICAgICAgIC8qKgogICAgICAgICAqIEEgZnVuY3Rpb24gdGhhdCBjYW4gYmUgdXNlZCB0byBmaWx0ZXIgaXRlbXMgb3V0IG9mIHRoZSB2aWV3LiAgVGhpcwogICAgICAgICAqIHByb3BlcnR5IHNob3VsZCBlaXRoZXIgYmUgcHJvdmlkZWQgYXMgYSBzdHJpbmcsIGluZGljYXRpbmcgYSBtZXRob2QKICAgICAgICAgKiBuYW1lIG9uIHRoZSBlbGVtZW50J3MgaG9zdCwgb3IgZWxzZSBiZSBhbiBhY3R1YWwgZnVuY3Rpb24uICBUaGUKICAgICAgICAgKiBmdW5jdGlvbiBzaG91bGQgbWF0Y2ggdGhlIHNvcnQgZnVuY3Rpb24gcGFzc2VkIHRvIGBBcnJheS5maWx0ZXJgLgogICAgICAgICAqIFVzaW5nIGEgZmlsdGVyIGZ1bmN0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHVuZGVybHlpbmcgYGl0ZW1zYCBhcnJheS4KICAgICAgICAgKi8KICAgICAgICBmaWx0ZXI6IHsKICAgICAgICAgIHR5cGU6IEZ1bmN0aW9uLAogICAgICAgICAgb2JzZXJ2ZXI6ICdfX2ZpbHRlckNoYW5nZWQnCiAgICAgICAgfSwKCiAgICAgICAgLyoqCiAgICAgICAgICogV2hlbiB1c2luZyBhIGBmaWx0ZXJgIG9yIGBzb3J0YCBmdW5jdGlvbiwgdGhlIGBvYnNlcnZlYCBwcm9wZXJ0eQogICAgICAgICAqIHNob3VsZCBiZSBzZXQgdG8gYSBzcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZiB0aGUgbmFtZXMgb2YgaXRlbQogICAgICAgICAqIHN1Yi1maWVsZHMgdGhhdCBzaG91bGQgdHJpZ2dlciBhIHJlLXNvcnQgb3IgcmUtZmlsdGVyIHdoZW4gY2hhbmdlZC4KICAgICAgICAgKiBUaGVzZSBzaG91bGQgZ2VuZXJhbGx5IGJlIGZpZWxkcyBvZiBgaXRlbWAgdGhhdCB0aGUgc29ydCBvciBmaWx0ZXIKICAgICAgICAgKiBmdW5jdGlvbiBkZXBlbmRzIG9uLgogICAgICAgICAqLwogICAgICAgIG9ic2VydmU6IHsKICAgICAgICAgIHR5cGU6IFN0cmluZywKICAgICAgICAgIG9ic2VydmVyOiAnX19vYnNlcnZlQ2hhbmdlZCcKICAgICAgICB9LAoKICAgICAgICAvKioKICAgICAgICAgKiBXaGVuIHVzaW5nIGEgYGZpbHRlcmAgb3IgYHNvcnRgIGZ1bmN0aW9uLCB0aGUgYGRlbGF5YCBwcm9wZXJ0eQogICAgICAgICAqIGRldGVybWluZXMgYSBkZWJvdW5jZSB0aW1lIGluIG1zIGFmdGVyIGEgY2hhbmdlIHRvIG9ic2VydmVkIGl0ZW0KICAgICAgICAgKiBwcm9wZXJ0aWVzIHRoYXQgbXVzdCBwYXNzIGJlZm9yZSB0aGUgZmlsdGVyIG9yIHNvcnQgaXMgcmUtcnVuLgogICAgICAgICAqIFRoaXMgaXMgdXNlZnVsIGluIHJhdGUtbGltaXRpbmcgc2h1ZmZsaW5nIG9mIHRoZSB2aWV3IHdoZW4KICAgICAgICAgKiBpdGVtIGNoYW5nZXMgbWF5IGJlIGZyZXF1ZW50LgogICAgICAgICAqLwogICAgICAgIGRlbGF5OiBOdW1iZXIsCgogICAgICAgIC8qKgogICAgICAgICAqIENvdW50IG9mIGN1cnJlbnRseSByZW5kZXJlZCBpdGVtcyBhZnRlciBgZmlsdGVyYCAoaWYgYW55KSBoYXMgYmVlbiBhcHBsaWVkLgogICAgICAgICAqIElmICJjaHVua2luZyBtb2RlIiBpcyBlbmFibGVkLCBgcmVuZGVyZWRJdGVtQ291bnRgIGlzIHVwZGF0ZWQgZWFjaCB0aW1lIGEKICAgICAgICAgKiBzZXQgb2YgdGVtcGxhdGUgaW5zdGFuY2VzIGlzIHJlbmRlcmVkLgogICAgICAgICAqCiAgICAgICAgICovCiAgICAgICAgcmVuZGVyZWRJdGVtQ291bnQ6IHsKICAgICAgICAgIHR5cGU6IE51bWJlciwKICAgICAgICAgIG5vdGlmeTogdHJ1ZSwKICAgICAgICAgIHJlYWRPbmx5OiB0cnVlCiAgICAgICAgfSwKCiAgICAgICAgLyoqCiAgICAgICAgICogRGVmaW5lcyBhbiBpbml0aWFsIGNvdW50IG9mIHRlbXBsYXRlIGluc3RhbmNlcyB0byByZW5kZXIgYWZ0ZXIgc2V0dGluZwogICAgICAgICAqIHRoZSBgaXRlbXNgIGFycmF5LCBiZWZvcmUgdGhlIG5leHQgcGFpbnQsIGFuZCBwdXRzIHRoZSBgZG9tLXJlcGVhdGAKICAgICAgICAgKiBpbnRvICJjaHVua2luZyBtb2RlIi4gIFRoZSByZW1haW5pbmcgaXRlbXMgd2lsbCBiZSBjcmVhdGVkIGFuZCByZW5kZXJlZAogICAgICAgICAqIGluY3JlbWVudGFsbHkgYXQgZWFjaCBhbmltYXRpb24gZnJhbWUgdGhlcm9mIHVudGlsIGFsbCBpbnN0YW5jZXMgaGF2ZQogICAgICAgICAqIGJlZW4gcmVuZGVyZWQuCiAgICAgICAgICovCiAgICAgICAgaW5pdGlhbENvdW50OiB7CiAgICAgICAgICB0eXBlOiBOdW1iZXIsCiAgICAgICAgICBvYnNlcnZlcjogJ19faW5pdGlhbGl6ZUNodW5raW5nJwogICAgICAgIH0sCgogICAgICAgIC8qKgogICAgICAgICAqIFdoZW4gYGluaXRpYWxDb3VudGAgaXMgdXNlZCwgdGhpcyBwcm9wZXJ0eSBkZWZpbmVzIGEgZnJhbWUgcmF0ZSAoaW4KICAgICAgICAgKiBmcHMpIHRvIHRhcmdldCBieSB0aHJvdHRsaW5nIHRoZSBudW1iZXIgb2YgaW5zdGFuY2VzIHJlbmRlcmVkIGVhY2gKICAgICAgICAgKiBmcmFtZSB0byBub3QgZXhjZWVkIHRoZSBidWRnZXQgZm9yIHRoZSB0YXJnZXQgZnJhbWUgcmF0ZS4gIFRoZQogICAgICAgICAqIGZyYW1lcmF0ZSBpcyBlZmZlY3RpdmVseSB0aGUgbnVtYmVyIG9mIGByZXF1ZXN0QW5pbWF0aW9uRnJhbWVgcyB0aGF0CiAgICAgICAgICogaXQgdHJpZXMgdG8gYWxsb3cgdG8gYWN0dWFsbHkgZmlyZSBpbiBhIGdpdmVuIHNlY29uZC4gSXQgZG9lcyB0aGlzCiAgICAgICAgICogYnkgbWVhc3VyaW5nIHRoZSB0aW1lIGJldHdlZW4gYHJBRmBzIGFuZCBjb250aW51b3VzbHkgYWRqdXN0aW5nIHRoZQogICAgICAgICAqIG51bWJlciBvZiBpdGVtcyBjcmVhdGVkIGVhY2ggYHJBRmAgdG8gbWFpbnRhaW4gdGhlIHRhcmdldCBmcmFtZXJhdGUuCiAgICAgICAgICogU2V0dGluZyB0aGlzIHRvIGEgaGlnaGVyIG51bWJlciBhbGxvd3MgbG93ZXIgbGF0ZW5jeSBhbmQgaGlnaGVyCiAgICAgICAgICogdGhyb3VnaHB1dCBmb3IgZXZlbnQgaGFuZGxlcnMgYW5kIG90aGVyIHRhc2tzLCBidXQgcmVzdWx0cyBpbiBhCiAgICAgICAgICogbG9uZ2VyIHRpbWUgZm9yIHRoZSByZW1haW5pbmcgaXRlbXMgdG8gY29tcGxldGUgcmVuZGVyaW5nLgogICAgICAgICAqLwogICAgICAgIHRhcmdldEZyYW1lcmF0ZTogewogICAgICAgICAgdHlwZTogTnVtYmVyLAogICAgICAgICAgdmFsdWU6IDIwCiAgICAgICAgfSwKCiAgICAgICAgX3RhcmdldEZyYW1lVGltZTogewogICAgICAgICAgdHlwZTogTnVtYmVyLAogICAgICAgICAgY29tcHV0ZWQ6ICdfX2NvbXB1dGVGcmFtZVRpbWUodGFyZ2V0RnJhbWVyYXRlKScKICAgICAgICB9CgogICAgICB9OwoKICAgIH0KCiAgICBzdGF0aWMgZ2V0IG9ic2VydmVycygpIHsKICAgICAgcmV0dXJuIFsgJ19faXRlbXNDaGFuZ2VkKGl0ZW1zLiopJyBdOwogICAgfQoKICAgIGNvbnN0cnVjdG9yKCkgewogICAgICBzdXBlcigpOwogICAgICB0aGlzLl9faW5zdGFuY2VzID0gW107CiAgICAgIHRoaXMuX19saW1pdCA9IEluZmluaXR5OwogICAgICB0aGlzLl9fcG9vbCA9IFtdOwogICAgICB0aGlzLl9fcmVuZGVyRGVib3VuY2VyID0gbnVsbDsKICAgICAgdGhpcy5fX2l0ZW1zSWR4VG9JbnN0SWR4ID0ge307CiAgICAgIHRoaXMuX19jaHVua0NvdW50ID0gbnVsbDsKICAgICAgdGhpcy5fX2xhc3RDaHVua1RpbWUgPSBudWxsOwogICAgICB0aGlzLl9fc29ydEZuID0gbnVsbDsKICAgICAgdGhpcy5fX2ZpbHRlckZuID0gbnVsbDsKICAgICAgdGhpcy5fX29ic2VydmVQYXRocyA9IG51bGw7CiAgICAgIHRoaXMuX19jdG9yID0gbnVsbDsKICAgICAgdGhpcy5fX2lzRGV0YWNoZWQgPSB0cnVlOwogICAgICB0aGlzLnRlbXBsYXRlID0gbnVsbDsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgKi8KICAgIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkgewogICAgICBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpOwogICAgICB0aGlzLl9faXNEZXRhY2hlZCA9IHRydWU7CiAgICAgIGZvciAobGV0IGk9MDsgaTx0aGlzLl9faW5zdGFuY2VzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgdGhpcy5fX2RldGFjaEluc3RhbmNlKGkpOwogICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICovCiAgICBjb25uZWN0ZWRDYWxsYmFjaygpIHsKICAgICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTsKICAgICAgdGhpcy5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwogICAgICAvLyBvbmx5IHBlcmZvcm0gYXR0YWNobWVudCBpZiB0aGUgZWxlbWVudCB3YXMgcHJldmlvdXNseSBkZXRhY2hlZC4KICAgICAgaWYgKHRoaXMuX19pc0RldGFjaGVkKSB7CiAgICAgICAgdGhpcy5fX2lzRGV0YWNoZWQgPSBmYWxzZTsKICAgICAgICBsZXQgcGFyZW50ID0gdGhpcy5wYXJlbnROb2RlOwogICAgICAgIGZvciAobGV0IGk9MDsgaTx0aGlzLl9faW5zdGFuY2VzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICB0aGlzLl9fYXR0YWNoSW5zdGFuY2UoaSwgcGFyZW50KTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICBfX2Vuc3VyZVRlbXBsYXRpemVkKCkgewogICAgICAvLyBUZW1wbGF0aXppbmcgKGdlbmVyYXRpbmcgdGhlIGluc3RhbmNlIGNvbnN0cnVjdG9yKSBuZWVkcyB0byB3YWl0CiAgICAgIC8vIHVudGlsIHJlYWR5LCBzaW5jZSB3b24ndCBoYXZlIGl0cyB0ZW1wbGF0ZSBjb250ZW50IGhhbmRlZCBiYWNrIHRvCiAgICAgIC8vIGl0IHVudGlsIHRoZW4KICAgICAgaWYgKCF0aGlzLl9fY3RvcikgewogICAgICAgIGxldCB0ZW1wbGF0ZSA9IHRoaXMudGVtcGxhdGUgPSAvKiogQHR5cGUge0hUTUxUZW1wbGF0ZUVsZW1lbnR9ICovKHRoaXMucXVlcnlTZWxlY3RvcigndGVtcGxhdGUnKSk7CiAgICAgICAgaWYgKCF0ZW1wbGF0ZSkgewogICAgICAgICAgLy8gLy8gV2FpdCB1bnRpbCBjaGlsZExpc3QgY2hhbmdlcyBhbmQgdGVtcGxhdGUgc2hvdWxkIGJlIHRoZXJlIGJ5IHRoZW4KICAgICAgICAgIGxldCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKCgpID0+IHsKICAgICAgICAgICAgaWYgKHRoaXMucXVlcnlTZWxlY3RvcigndGVtcGxhdGUnKSkgewogICAgICAgICAgICAgIG9ic2VydmVyLmRpc2Nvbm5lY3QoKTsKICAgICAgICAgICAgICB0aGlzLl9fcmVuZGVyKCk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdkb20tcmVwZWF0IHJlcXVpcmVzIGEgPHRlbXBsYXRlPiBjaGlsZCcpOwogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICAgIG9ic2VydmVyLm9ic2VydmUodGhpcywge2NoaWxkTGlzdDogdHJ1ZX0pOwogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICAvLyBUZW1wbGF0ZSBpbnN0YW5jZSBwcm9wcyB0aGF0IHNob3VsZCBiZSBleGNsdWRlZCBmcm9tIGZvcndhcmRpbmcKICAgICAgICBsZXQgaW5zdGFuY2VQcm9wcyA9IHt9OwogICAgICAgIGluc3RhbmNlUHJvcHNbdGhpcy5hc10gPSB0cnVlOwogICAgICAgIGluc3RhbmNlUHJvcHNbdGhpcy5pbmRleEFzXSA9IHRydWU7CiAgICAgICAgaW5zdGFuY2VQcm9wc1t0aGlzLml0ZW1zSW5kZXhBc10gPSB0cnVlOwogICAgICAgIHRoaXMuX19jdG9yID0gUG9seW1lci5UZW1wbGF0aXplLnRlbXBsYXRpemUodGVtcGxhdGUsIHRoaXMsIHsKICAgICAgICAgIG11dGFibGVEYXRhOiB0aGlzLm11dGFibGVEYXRhLAogICAgICAgICAgcGFyZW50TW9kZWw6IHRydWUsCiAgICAgICAgICBpbnN0YW5jZVByb3BzOiBpbnN0YW5jZVByb3BzLAogICAgICAgICAgLyoqCiAgICAgICAgICAgKiBAdGhpcyB7dGhpc30KICAgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wIFByb3BlcnR5IHRvIHNldAogICAgICAgICAgICogQHBhcmFtIHsqfSB2YWx1ZSBWYWx1ZSB0byBzZXQgcHJvcGVydHkgdG8KICAgICAgICAgICAqLwogICAgICAgICAgZm9yd2FyZEhvc3RQcm9wOiBmdW5jdGlvbihwcm9wLCB2YWx1ZSkgewogICAgICAgICAgICBsZXQgaSQgPSB0aGlzLl9faW5zdGFuY2VzOwogICAgICAgICAgICBmb3IgKGxldCBpPTAsIGluc3Q7IChpPGkkLmxlbmd0aCkgJiYgKGluc3Q9aSRbaV0pOyBpKyspIHsKICAgICAgICAgICAgICBpbnN0LmZvcndhcmRIb3N0UHJvcChwcm9wLCB2YWx1ZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICAvKioKICAgICAgICAgICAqIEB0aGlzIHt0aGlzfQogICAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IGluc3QgSW5zdGFuY2UgdG8gbm90aWZ5CiAgICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcCBQcm9wZXJ0eSB0byBub3RpZnkKICAgICAgICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVmFsdWUgdG8gbm90aWZ5CiAgICAgICAgICAgKi8KICAgICAgICAgIG5vdGlmeUluc3RhbmNlUHJvcDogZnVuY3Rpb24oaW5zdCwgcHJvcCwgdmFsdWUpIHsKICAgICAgICAgICAgaWYgKFBvbHltZXIuUGF0aC5tYXRjaGVzKHRoaXMuYXMsIHByb3ApKSB7CiAgICAgICAgICAgICAgbGV0IGlkeCA9IGluc3RbdGhpcy5pdGVtc0luZGV4QXNdOwogICAgICAgICAgICAgIGlmIChwcm9wID09IHRoaXMuYXMpIHsKICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNbaWR4XSA9IHZhbHVlOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBsZXQgcGF0aCA9IFBvbHltZXIuUGF0aC50cmFuc2xhdGUodGhpcy5hcywgJ2l0ZW1zLicgKyBpZHgsIHByb3ApOwogICAgICAgICAgICAgIHRoaXMubm90aWZ5UGF0aChwYXRoLCB2YWx1ZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfQogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICBfX2dldE1ldGhvZEhvc3QoKSB7CiAgICAgIC8vIFRlY2huaWNhbGx5IHRoaXMgc2hvdWxkIGJlIHRoZSBvd25lciBvZiB0aGUgb3V0ZXJtb3N0IHRlbXBsYXRlLgogICAgICAvLyBJbiBzaGFkb3cgZG9tLCB0aGlzIGlzIGFsd2F5cyBnZXRSb290Tm9kZSgpLmhvc3QsIGJ1dCB3ZSBjYW4KICAgICAgLy8gYXBwcm94aW1hdGUgdGhpcyB2aWEgY29vcGVyYXRpb24gd2l0aCBvdXIgZGF0YUhvc3QgYWx3YXlzIHNldHRpbmcKICAgICAgLy8gYF9tZXRob2RIb3N0YCBhcyBsb25nIGFzIHRoZXJlIHdlcmUgYmluZGluZ3MgKG9yIGlkJ3MpIG9uIHRoaXMKICAgICAgLy8gaW5zdGFuY2UgY2F1c2luZyBpdCB0byBnZXQgYSBkYXRhSG9zdC4KICAgICAgcmV0dXJuIHRoaXMuX19kYXRhSG9zdC5fbWV0aG9kSG9zdCB8fCB0aGlzLl9fZGF0YUhvc3Q7CiAgICB9CgogICAgX19mdW5jdGlvbkZyb21Qcm9wZXJ0eVZhbHVlKGZ1bmN0aW9uT3JNZXRob2ROYW1lKSB7CiAgICAgIGlmICh0eXBlb2YgZnVuY3Rpb25Pck1ldGhvZE5hbWUgPT09ICdzdHJpbmcnKSB7CiAgICAgICAgbGV0IG1ldGhvZE5hbWUgPSBmdW5jdGlvbk9yTWV0aG9kTmFtZTsKICAgICAgICBsZXQgb2JqID0gdGhpcy5fX2dldE1ldGhvZEhvc3QoKTsKICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7IHJldHVybiBvYmpbbWV0aG9kTmFtZV0uYXBwbHkob2JqLCBhcmd1bWVudHMpOyB9OwogICAgICB9CgogICAgICByZXR1cm4gZnVuY3Rpb25Pck1ldGhvZE5hbWU7CiAgICB9CgogICAgX19zb3J0Q2hhbmdlZChzb3J0KSB7CiAgICAgIHRoaXMuX19zb3J0Rm4gPSB0aGlzLl9fZnVuY3Rpb25Gcm9tUHJvcGVydHlWYWx1ZShzb3J0KTsKICAgICAgaWYgKHRoaXMuaXRlbXMpIHsgdGhpcy5fX2RlYm91bmNlUmVuZGVyKHRoaXMuX19yZW5kZXIpOyB9CiAgICB9CgogICAgX19maWx0ZXJDaGFuZ2VkKGZpbHRlcikgewogICAgICB0aGlzLl9fZmlsdGVyRm4gPSB0aGlzLl9fZnVuY3Rpb25Gcm9tUHJvcGVydHlWYWx1ZShmaWx0ZXIpOwogICAgICBpZiAodGhpcy5pdGVtcykgeyB0aGlzLl9fZGVib3VuY2VSZW5kZXIodGhpcy5fX3JlbmRlcik7IH0KICAgIH0KCiAgICBfX2NvbXB1dGVGcmFtZVRpbWUocmF0ZSkgewogICAgICByZXR1cm4gTWF0aC5jZWlsKDEwMDAvcmF0ZSk7CiAgICB9CgogICAgX19pbml0aWFsaXplQ2h1bmtpbmcoKSB7CiAgICAgIGlmICh0aGlzLmluaXRpYWxDb3VudCkgewogICAgICAgIHRoaXMuX19saW1pdCA9IHRoaXMuaW5pdGlhbENvdW50OwogICAgICAgIHRoaXMuX19jaHVua0NvdW50ID0gdGhpcy5pbml0aWFsQ291bnQ7CiAgICAgICAgdGhpcy5fX2xhc3RDaHVua1RpbWUgPSBwZXJmb3JtYW5jZS5ub3coKTsKICAgICAgfQogICAgfQoKICAgIF9fdHJ5UmVuZGVyQ2h1bmsoKSB7CiAgICAgIC8vIERlYm91bmNlZCBzbyB0aGF0IG11bHRpcGxlIGNhbGxzIHRocm91Z2ggYF9yZW5kZXJgIGJldHdlZW4gYW5pbWF0aW9uCiAgICAgIC8vIGZyYW1lcyBvbmx5IHF1ZXVlIG9uZSBuZXcgckFGIChlLmcuIGFycmF5IG11dGF0aW9uICYgY2h1bmtlZCByZW5kZXIpCiAgICAgIGlmICh0aGlzLml0ZW1zICYmIHRoaXMuX19saW1pdCA8IHRoaXMuaXRlbXMubGVuZ3RoKSB7CiAgICAgICAgdGhpcy5fX2RlYm91bmNlUmVuZGVyKHRoaXMuX19yZXF1ZXN0UmVuZGVyQ2h1bmspOwogICAgICB9CiAgICB9CgogICAgX19yZXF1ZXN0UmVuZGVyQ2h1bmsoKSB7CiAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+dGhpcy5fX3JlbmRlckNodW5rKCkpOwogICAgfQoKICAgIF9fcmVuZGVyQ2h1bmsoKSB7CiAgICAgIC8vIFNpbXBsZSBhdXRvIGNodW5rU2l6ZSB0aHJvdHRsaW5nIGFsZ29yaXRobSBiYXNlZCBvbiBmZWVkYmFjayBsb29wOgogICAgICAvLyBtZWFzdXJlIGFjdHVhbCB0aW1lIGJldHdlZW4gZnJhbWVzIGFuZCBzY2FsZSBjaHVuayBjb3VudCBieSByYXRpbwogICAgICAvLyBvZiB0YXJnZXQvYWN0dWFsIGZyYW1lIHRpbWUKICAgICAgbGV0IGN1cnJDaHVua1RpbWUgPSBwZXJmb3JtYW5jZS5ub3coKTsKICAgICAgbGV0IHJhdGlvID0gdGhpcy5fdGFyZ2V0RnJhbWVUaW1lIC8gKGN1cnJDaHVua1RpbWUgLSB0aGlzLl9fbGFzdENodW5rVGltZSk7CiAgICAgIHRoaXMuX19jaHVua0NvdW50ID0gTWF0aC5yb3VuZCh0aGlzLl9fY2h1bmtDb3VudCAqIHJhdGlvKSB8fCAxOwogICAgICB0aGlzLl9fbGltaXQgKz0gdGhpcy5fX2NodW5rQ291bnQ7CiAgICAgIHRoaXMuX19sYXN0Q2h1bmtUaW1lID0gY3VyckNodW5rVGltZTsKICAgICAgdGhpcy5fX2RlYm91bmNlUmVuZGVyKHRoaXMuX19yZW5kZXIpOwogICAgfQoKICAgIF9fb2JzZXJ2ZUNoYW5nZWQoKSB7CiAgICAgIHRoaXMuX19vYnNlcnZlUGF0aHMgPSB0aGlzLm9ic2VydmUgJiYKICAgICAgICB0aGlzLm9ic2VydmUucmVwbGFjZSgnLionLCAnLicpLnNwbGl0KCcgJyk7CiAgICB9CgogICAgX19pdGVtc0NoYW5nZWQoY2hhbmdlKSB7CiAgICAgIGlmICh0aGlzLml0ZW1zICYmICFBcnJheS5pc0FycmF5KHRoaXMuaXRlbXMpKSB7CiAgICAgICAgY29uc29sZS53YXJuKCdkb20tcmVwZWF0IGV4cGVjdGVkIGFycmF5IGZvciBgaXRlbXNgLCBmb3VuZCcsIHRoaXMuaXRlbXMpOwogICAgICB9CiAgICAgIC8vIElmIHBhdGggd2FzIHRvIGFuIGl0ZW0gKGUuZy4gJ2l0ZW1zLjMnIG9yICdpdGVtcy4zLmZvbycpLCBmb3J3YXJkIHRoZQogICAgICAvLyBwYXRoIHRvIHRoYXQgaW5zdGFuY2Ugc3luY2hyb25vdXNseSAocmV0dXJucyBmYWxzZSBmb3Igbm9uLWl0ZW0gcGF0aHMpCiAgICAgIGlmICghdGhpcy5fX2hhbmRsZUl0ZW1QYXRoKGNoYW5nZS5wYXRoLCBjaGFuZ2UudmFsdWUpKSB7CiAgICAgICAgLy8gT3RoZXJ3aXNlLCB0aGUgYXJyYXkgd2FzIHJlc2V0ICgnaXRlbXMnKSBvciBzcGxpY2VkICgnaXRlbXMuc3BsaWNlcycpLAogICAgICAgIC8vIHNvIHF1ZXVlIGEgZnVsbCByZWZyZXNoCiAgICAgICAgdGhpcy5fX2luaXRpYWxpemVDaHVua2luZygpOwogICAgICAgIHRoaXMuX19kZWJvdW5jZVJlbmRlcih0aGlzLl9fcmVuZGVyKTsKICAgICAgfQogICAgfQoKICAgIF9faGFuZGxlT2JzZXJ2ZWRQYXRocyhwYXRoKSB7CiAgICAgIC8vIEhhbmRsZSBjYXNlcyB3aGVyZSBwYXRoIGNoYW5nZXMgc2hvdWxkIGNhdXNlIGEgcmUtc29ydC9maWx0ZXIKICAgICAgaWYgKHRoaXMuX19zb3J0Rm4gfHwgdGhpcy5fX2ZpbHRlckZuKSB7CiAgICAgICAgaWYgKCFwYXRoKSB7CiAgICAgICAgICAvLyBBbHdheXMgcmUtcmVuZGVyIGlmIHRoZSBpdGVtIGl0c2VsZiBjaGFuZ2VkCiAgICAgICAgICB0aGlzLl9fZGVib3VuY2VSZW5kZXIodGhpcy5fX3JlbmRlciwgdGhpcy5kZWxheSk7CiAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9fb2JzZXJ2ZVBhdGhzKSB7CiAgICAgICAgICAvLyBPdGhlcndpc2UsIHJlLXJlbmRlciBpZiB0aGUgcGF0aCBjaGFuZ2VkIG1hdGNoZXMgYW4gb2JzZXJ2ZWQgcGF0aAogICAgICAgICAgbGV0IHBhdGhzID0gdGhpcy5fX29ic2VydmVQYXRoczsKICAgICAgICAgIGZvciAobGV0IGk9MDsgaTxwYXRocy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICBpZiAocGF0aC5pbmRleE9mKHBhdGhzW2ldKSA9PT0gMCkgewogICAgICAgICAgICAgIHRoaXMuX19kZWJvdW5jZVJlbmRlcih0aGlzLl9fcmVuZGVyLCB0aGlzLmRlbGF5KTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIHtmdW5jdGlvbih0aGlzOkRvbVJlcGVhdCl9IGZuIEZ1bmN0aW9uIHRvIGRlYm91bmNlLgogICAgICogQHBhcmFtIHtudW1iZXI9fSBkZWxheSBEZWxheSBpbiBtcyB0byBkZWJvdW5jZSBieS4KICAgICAqLwogICAgX19kZWJvdW5jZVJlbmRlcihmbiwgZGVsYXkgPSAwKSB7CiAgICAgIHRoaXMuX19yZW5kZXJEZWJvdW5jZXIgPSBQb2x5bWVyLkRlYm91bmNlci5kZWJvdW5jZSgKICAgICAgICAgICAgdGhpcy5fX3JlbmRlckRlYm91bmNlcgogICAgICAgICAgLCBkZWxheSA+IDAgPyBQb2x5bWVyLkFzeW5jLnRpbWVPdXQuYWZ0ZXIoZGVsYXkpIDogUG9seW1lci5Bc3luYy5taWNyb1Rhc2sKICAgICAgICAgICwgZm4uYmluZCh0aGlzKSk7CiAgICAgIFBvbHltZXIuZW5xdWV1ZURlYm91bmNlcih0aGlzLl9fcmVuZGVyRGVib3VuY2VyKTsKICAgIH0KCiAgICAvKioKICAgICAqIEZvcmNlcyB0aGUgZWxlbWVudCB0byByZW5kZXIgaXRzIGNvbnRlbnQuIE5vcm1hbGx5IHJlbmRlcmluZyBpcwogICAgICogYXN5bmNocm9ub3VzIHRvIGEgcHJvdm9raW5nIGNoYW5nZS4gVGhpcyBpcyBkb25lIGZvciBlZmZpY2llbmN5IHNvCiAgICAgKiB0aGF0IG11bHRpcGxlIGNoYW5nZXMgdHJpZ2dlciBvbmx5IGEgc2luZ2xlIHJlbmRlci4gVGhlIHJlbmRlciBtZXRob2QKICAgICAqIHNob3VsZCBiZSBjYWxsZWQgaWYsIGZvciBleGFtcGxlLCB0ZW1wbGF0ZSByZW5kZXJpbmcgaXMgcmVxdWlyZWQgdG8KICAgICAqIHZhbGlkYXRlIGFwcGxpY2F0aW9uIHN0YXRlLgogICAgICogQHJldHVybiB7dm9pZH0KICAgICAqLwogICAgcmVuZGVyKCkgewogICAgICAvLyBRdWV1ZSB0aGlzIHJlcGVhdGVyLCB0aGVuIGZsdXNoIGFsbCBpbiBvcmRlcgogICAgICB0aGlzLl9fZGVib3VuY2VSZW5kZXIodGhpcy5fX3JlbmRlcik7CiAgICAgIFBvbHltZXIuZmx1c2goKTsKICAgIH0KCiAgICBfX3JlbmRlcigpIHsKICAgICAgaWYgKCF0aGlzLl9fZW5zdXJlVGVtcGxhdGl6ZWQoKSkgewogICAgICAgIC8vIE5vIHRlbXBsYXRlIGZvdW5kIHlldAogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICB0aGlzLl9fYXBwbHlGdWxsUmVmcmVzaCgpOwogICAgICAvLyBSZXNldCB0aGUgcG9vbAogICAgICAvLyBUT0RPKGtzY2hhYWYpOiBSZXVzZSBwb29sIGFjcm9zcyB0dXJucyBhbmQgbmVzdGVkIHRlbXBsYXRlcwogICAgICAvLyBOb3cgdGhhdCBvYmplY3RzL2FycmF5cyBhcmUgcmUtZXZhbHVhdGVkIHdoZW4gc2V0LCB3ZSBjYW4gc2FmZWx5CiAgICAgIC8vIHJldXNlIHBvb2xlZCBpbnN0YW5jZXMgYWNyb3NzIHR1cm5zLCBob3dldmVyIHdlIHN0aWxsIG5lZWQgdG8gZGVjaWRlCiAgICAgIC8vIHNlbWFudGljcyByZWdhcmRpbmcgaG93IGxvbmcgdG8gaG9sZCwgaG93IG1hbnkgdG8gaG9sZCwgZXRjLgogICAgICB0aGlzLl9fcG9vbC5sZW5ndGggPSAwOwogICAgICAvLyBTZXQgcmVuZGVyZWQgaXRlbSBjb3VudAogICAgICB0aGlzLl9zZXRSZW5kZXJlZEl0ZW1Db3VudCh0aGlzLl9faW5zdGFuY2VzLmxlbmd0aCk7CiAgICAgIC8vIE5vdGlmeSB1c2VycwogICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdkb20tY2hhbmdlJywgewogICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgfSkpOwogICAgICAvLyBDaGVjayB0byBzZWUgaWYgd2UgbmVlZCB0byByZW5kZXIgbW9yZSBpdGVtcwogICAgICB0aGlzLl9fdHJ5UmVuZGVyQ2h1bmsoKTsKICAgIH0KCiAgICBfX2FwcGx5RnVsbFJlZnJlc2goKSB7CiAgICAgIGxldCBpdGVtcyA9IHRoaXMuaXRlbXMgfHwgW107CiAgICAgIGxldCBpc250SWR4VG9JdGVtc0lkeCA9IG5ldyBBcnJheShpdGVtcy5sZW5ndGgpOwogICAgICBmb3IgKGxldCBpPTA7IGk8aXRlbXMubGVuZ3RoOyBpKyspIHsKICAgICAgICBpc250SWR4VG9JdGVtc0lkeFtpXSA9IGk7CiAgICAgIH0KICAgICAgLy8gQXBwbHkgdXNlciBmaWx0ZXIKICAgICAgaWYgKHRoaXMuX19maWx0ZXJGbikgewogICAgICAgIGlzbnRJZHhUb0l0ZW1zSWR4ID0gaXNudElkeFRvSXRlbXNJZHguZmlsdGVyKChpLCBpZHgsIGFycmF5KSA9PgogICAgICAgICAgdGhpcy5fX2ZpbHRlckZuKGl0ZW1zW2ldLCBpZHgsIGFycmF5KSk7CiAgICAgIH0KICAgICAgLy8gQXBwbHkgdXNlciBzb3J0CiAgICAgIGlmICh0aGlzLl9fc29ydEZuKSB7CiAgICAgICAgaXNudElkeFRvSXRlbXNJZHguc29ydCgoYSwgYikgPT4gdGhpcy5fX3NvcnRGbihpdGVtc1thXSwgaXRlbXNbYl0pKTsKICAgICAgfQogICAgICAvLyBpdGVtcy0+aW5zdCBtYXAga2VwdCBmb3IgaXRlbSBwYXRoIGZvcndhcmRpbmcKICAgICAgY29uc3QgaXRlbXNJZHhUb0luc3RJZHggPSB0aGlzLl9faXRlbXNJZHhUb0luc3RJZHggPSB7fTsKICAgICAgbGV0IGluc3RJZHggPSAwOwogICAgICAvLyBHZW5lcmF0ZSBpbnN0YW5jZXMgYW5kIGFzc2lnbiBpdGVtcwogICAgICBjb25zdCBsaW1pdCA9IE1hdGgubWluKGlzbnRJZHhUb0l0ZW1zSWR4Lmxlbmd0aCwgdGhpcy5fX2xpbWl0KTsKICAgICAgZm9yICg7IGluc3RJZHg8bGltaXQ7IGluc3RJZHgrKykgewogICAgICAgIGxldCBpbnN0ID0gdGhpcy5fX2luc3RhbmNlc1tpbnN0SWR4XTsKICAgICAgICBsZXQgaXRlbUlkeCA9IGlzbnRJZHhUb0l0ZW1zSWR4W2luc3RJZHhdOwogICAgICAgIGxldCBpdGVtID0gaXRlbXNbaXRlbUlkeF07CiAgICAgICAgaXRlbXNJZHhUb0luc3RJZHhbaXRlbUlkeF0gPSBpbnN0SWR4OwogICAgICAgIGlmIChpbnN0KSB7CiAgICAgICAgICBpbnN0Ll9zZXRQZW5kaW5nUHJvcGVydHkodGhpcy5hcywgaXRlbSk7CiAgICAgICAgICBpbnN0Ll9zZXRQZW5kaW5nUHJvcGVydHkodGhpcy5pbmRleEFzLCBpbnN0SWR4KTsKICAgICAgICAgIGluc3QuX3NldFBlbmRpbmdQcm9wZXJ0eSh0aGlzLml0ZW1zSW5kZXhBcywgaXRlbUlkeCk7CiAgICAgICAgICBpbnN0Ll9mbHVzaFByb3BlcnRpZXMoKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhpcy5fX2luc2VydEluc3RhbmNlKGl0ZW0sIGluc3RJZHgsIGl0ZW1JZHgpOwogICAgICAgIH0KICAgICAgfQogICAgICAvLyBSZW1vdmUgYW55IGV4dHJhIGluc3RhbmNlcyBmcm9tIHByZXZpb3VzIHN0YXRlCiAgICAgIGZvciAobGV0IGk9dGhpcy5fX2luc3RhbmNlcy5sZW5ndGgtMTsgaT49aW5zdElkeDsgaS0tKSB7CiAgICAgICAgdGhpcy5fX2RldGFjaEFuZFJlbW92ZUluc3RhbmNlKGkpOwogICAgICB9CiAgICB9CgogICAgX19kZXRhY2hJbnN0YW5jZShpZHgpIHsKICAgICAgbGV0IGluc3QgPSB0aGlzLl9faW5zdGFuY2VzW2lkeF07CiAgICAgIGZvciAobGV0IGk9MDsgaTxpbnN0LmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgbGV0IGVsID0gaW5zdC5jaGlsZHJlbltpXTsKICAgICAgICBpbnN0LnJvb3QuYXBwZW5kQ2hpbGQoZWwpOwogICAgICB9CiAgICAgIHJldHVybiBpbnN0OwogICAgfQoKICAgIF9fYXR0YWNoSW5zdGFuY2UoaWR4LCBwYXJlbnQpIHsKICAgICAgbGV0IGluc3QgPSB0aGlzLl9faW5zdGFuY2VzW2lkeF07CiAgICAgIHBhcmVudC5pbnNlcnRCZWZvcmUoaW5zdC5yb290LCB0aGlzKTsKICAgIH0KCiAgICBfX2RldGFjaEFuZFJlbW92ZUluc3RhbmNlKGlkeCkgewogICAgICBsZXQgaW5zdCA9IHRoaXMuX19kZXRhY2hJbnN0YW5jZShpZHgpOwogICAgICBpZiAoaW5zdCkgewogICAgICAgIHRoaXMuX19wb29sLnB1c2goaW5zdCk7CiAgICAgIH0KICAgICAgdGhpcy5fX2luc3RhbmNlcy5zcGxpY2UoaWR4LCAxKTsKICAgIH0KCiAgICBfX3N0YW1wSW5zdGFuY2UoaXRlbSwgaW5zdElkeCwgaXRlbUlkeCkgewogICAgICBsZXQgbW9kZWwgPSB7fTsKICAgICAgbW9kZWxbdGhpcy5hc10gPSBpdGVtOwogICAgICBtb2RlbFt0aGlzLmluZGV4QXNdID0gaW5zdElkeDsKICAgICAgbW9kZWxbdGhpcy5pdGVtc0luZGV4QXNdID0gaXRlbUlkeDsKICAgICAgcmV0dXJuIG5ldyB0aGlzLl9fY3Rvcihtb2RlbCk7CiAgICB9CgogICAgX19pbnNlcnRJbnN0YW5jZShpdGVtLCBpbnN0SWR4LCBpdGVtSWR4KSB7CiAgICAgIGxldCBpbnN0ID0gdGhpcy5fX3Bvb2wucG9wKCk7CiAgICAgIGlmIChpbnN0KSB7CiAgICAgICAgLy8gVE9ETyhrc2NoYWFmKTogSWYgdGhlIHBvb2wgaXMgc2hhcmVkIGFjcm9zcyB0dXJucywgaG9zdFByb3BzCiAgICAgICAgLy8gbmVlZCB0byBiZSByZS1zZXQgdG8gcmV1c2VkIGluc3RhbmNlcyBpbiBhZGRpdGlvbiB0byBpdGVtCiAgICAgICAgaW5zdC5fc2V0UGVuZGluZ1Byb3BlcnR5KHRoaXMuYXMsIGl0ZW0pOwogICAgICAgIGluc3QuX3NldFBlbmRpbmdQcm9wZXJ0eSh0aGlzLmluZGV4QXMsIGluc3RJZHgpOwogICAgICAgIGluc3QuX3NldFBlbmRpbmdQcm9wZXJ0eSh0aGlzLml0ZW1zSW5kZXhBcywgaXRlbUlkeCk7CiAgICAgICAgaW5zdC5fZmx1c2hQcm9wZXJ0aWVzKCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaW5zdCA9IHRoaXMuX19zdGFtcEluc3RhbmNlKGl0ZW0sIGluc3RJZHgsIGl0ZW1JZHgpOwogICAgICB9CiAgICAgIGxldCBiZWZvcmVSb3cgPSB0aGlzLl9faW5zdGFuY2VzW2luc3RJZHggKyAxXTsKICAgICAgbGV0IGJlZm9yZU5vZGUgPSBiZWZvcmVSb3cgPyBiZWZvcmVSb3cuY2hpbGRyZW5bMF0gOiB0aGlzOwogICAgICB0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGluc3Qucm9vdCwgYmVmb3JlTm9kZSk7CiAgICAgIHRoaXMuX19pbnN0YW5jZXNbaW5zdElkeF0gPSBpbnN0OwogICAgICByZXR1cm4gaW5zdDsKICAgIH0KCiAgICAvLyBJbXBsZW1lbnRzIGV4dGVuc2lvbiBwb2ludCBmcm9tIFRlbXBsYXRpemUgbWl4aW4KICAgIC8qKgogICAgICogU2hvd3Mgb3IgaGlkZXMgdGhlIHRlbXBsYXRlIGluc3RhbmNlIHRvcCBsZXZlbCBjaGlsZCBlbGVtZW50cy4gRm9yCiAgICAgKiB0ZXh0IG5vZGVzLCBgdGV4dENvbnRlbnRgIGlzIHJlbW92ZWQgd2hpbGUgImhpZGRlbiIgYW5kIHJlcGxhY2VkIHdoZW4KICAgICAqICJzaG93bi4iCiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGhpZGRlbiBTZXQgdG8gdHJ1ZSB0byBoaWRlIHRoZSBjaGlsZHJlbjsKICAgICAqIHNldCB0byBmYWxzZSB0byBzaG93IHRoZW0uCiAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICogQHByb3RlY3RlZAogICAgICovCiAgICBfc2hvd0hpZGVDaGlsZHJlbihoaWRkZW4pIHsKICAgICAgZm9yIChsZXQgaT0wOyBpPHRoaXMuX19pbnN0YW5jZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICB0aGlzLl9faW5zdGFuY2VzW2ldLl9zaG93SGlkZUNoaWxkcmVuKGhpZGRlbik7CiAgICAgIH0KICAgIH0KCiAgICAvLyBDYWxsZWQgYXMgYSBzaWRlIGVmZmVjdCBvZiBhIGhvc3QgaXRlbXMuPGtleT4uPHBhdGg+IHBhdGggY2hhbmdlLAogICAgLy8gcmVzcG9uc2libGUgZm9yIG5vdGlmeWluZyBpdGVtLjxwYXRoPiBjaGFuZ2VzIHRvIGluc3QgZm9yIGtleQogICAgX19oYW5kbGVJdGVtUGF0aChwYXRoLCB2YWx1ZSkgewogICAgICBsZXQgaXRlbXNQYXRoID0gcGF0aC5zbGljZSg2KTsgLy8gJ2l0ZW1zLicubGVuZ3RoID09IDYKICAgICAgbGV0IGRvdCA9IGl0ZW1zUGF0aC5pbmRleE9mKCcuJyk7CiAgICAgIGxldCBpdGVtc0lkeCA9IGRvdCA8IDAgPyBpdGVtc1BhdGggOiBpdGVtc1BhdGguc3Vic3RyaW5nKDAsIGRvdCk7CiAgICAgIC8vIElmIHBhdGggd2FzIGluZGV4IGludG8gYXJyYXkuLi4KICAgICAgaWYgKGl0ZW1zSWR4ID09IHBhcnNlSW50KGl0ZW1zSWR4LCAxMCkpIHsKICAgICAgICBsZXQgaXRlbVN1YlBhdGggPSBkb3QgPCAwID8gJycgOiBpdGVtc1BhdGguc3Vic3RyaW5nKGRvdCsxKTsKICAgICAgICAvLyBJZiB0aGUgcGF0aCBpcyBvYnNlcnZlZCwgaXQgd2lsbCB0cmlnZ2VyIGEgZnVsbCByZWZyZXNoCiAgICAgICAgdGhpcy5fX2hhbmRsZU9ic2VydmVkUGF0aHMoaXRlbVN1YlBhdGgpOwogICAgICAgIC8vIE5vdGUsIGV2ZW4gaWYgYSBydWxsIHJlZnJlc2ggaXMgdHJpZ2dlcmVkLCBhbHdheXMgZG8gdGhlIHBhdGgKICAgICAgICAvLyBub3RpZmljYXRpb24gYmVjYXVzZSB1bmxlc3MgbXV0YWJsZURhdGEgaXMgdXNlZCBmb3IgZG9tLXJlcGVhdAogICAgICAgIC8vIGFuZCBhbGwgZWxlbWVudHMgaW4gdGhlIGluc3RhbmNlIHN1YnRyZWUsIGEgZnVsbCByZWZyZXNoIG1heQogICAgICAgIC8vIG5vdCB0cmlnZ2VyIHRoZSBwcm9wZXIgdXBkYXRlLgogICAgICAgIGxldCBpbnN0SWR4ID0gdGhpcy5fX2l0ZW1zSWR4VG9JbnN0SWR4W2l0ZW1zSWR4XTsKICAgICAgICBsZXQgaW5zdCA9IHRoaXMuX19pbnN0YW5jZXNbaW5zdElkeF07CiAgICAgICAgaWYgKGluc3QpIHsKICAgICAgICAgIGxldCBpdGVtUGF0aCA9IHRoaXMuYXMgKyAoaXRlbVN1YlBhdGggPyAnLicgKyBpdGVtU3ViUGF0aCA6ICcnKTsKICAgICAgICAgIC8vIFRoaXMgaXMgZWZmZWN0aXZlbHkgYG5vdGlmeVBhdGhgLCBidXQgYXZvaWRzIHNvbWUgb2YgdGhlIG92ZXJoZWFkCiAgICAgICAgICAvLyBvZiB0aGUgcHVibGljIEFQSQogICAgICAgICAgaW5zdC5fc2V0UGVuZGluZ1Byb3BlcnR5T3JQYXRoKGl0ZW1QYXRoLCB2YWx1ZSwgZmFsc2UsIHRydWUpOwogICAgICAgICAgaW5zdC5fZmx1c2hQcm9wZXJ0aWVzKCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBpdGVtIGFzc29jaWF0ZWQgd2l0aCBhIGdpdmVuIGVsZW1lbnQgc3RhbXBlZCBieQogICAgICogdGhpcyBgZG9tLXJlcGVhdGAuCiAgICAgKgogICAgICogTm90ZSwgdG8gbW9kaWZ5IHN1Yi1wcm9wZXJ0aWVzIG9mIHRoZSBpdGVtLAogICAgICogYG1vZGVsRm9yRWxlbWVudChlbCkuc2V0KCdpdGVtLjxzdWItcHJvcD4nLCB2YWx1ZSlgCiAgICAgKiBzaG91bGQgYmUgdXNlZC4KICAgICAqCiAgICAgKiBAcGFyYW0geyFIVE1MRWxlbWVudH0gZWwgRWxlbWVudCBmb3Igd2hpY2ggdG8gcmV0dXJuIHRoZSBpdGVtLgogICAgICogQHJldHVybiB7Kn0gSXRlbSBhc3NvY2lhdGVkIHdpdGggdGhlIGVsZW1lbnQuCiAgICAgKi8KICAgIGl0ZW1Gb3JFbGVtZW50KGVsKSB7CiAgICAgIGxldCBpbnN0YW5jZSA9IHRoaXMubW9kZWxGb3JFbGVtZW50KGVsKTsKICAgICAgcmV0dXJuIGluc3RhbmNlICYmIGluc3RhbmNlW3RoaXMuYXNdOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgaW5zdCBpbmRleCBmb3IgYSBnaXZlbiBlbGVtZW50IHN0YW1wZWQgYnkgdGhpcyBgZG9tLXJlcGVhdGAuCiAgICAgKiBJZiBgc29ydGAgaXMgcHJvdmlkZWQsIHRoZSBpbmRleCB3aWxsIHJlZmxlY3QgdGhlIHNvcnRlZCBvcmRlciAocmF0aGVyCiAgICAgKiB0aGFuIHRoZSBvcmlnaW5hbCBhcnJheSBvcmRlcikuCiAgICAgKgogICAgICogQHBhcmFtIHshSFRNTEVsZW1lbnR9IGVsIEVsZW1lbnQgZm9yIHdoaWNoIHRvIHJldHVybiB0aGUgaW5kZXguCiAgICAgKiBAcmV0dXJuIHs/bnVtYmVyfSBSb3cgaW5kZXggYXNzb2NpYXRlZCB3aXRoIHRoZSBlbGVtZW50IChub3RlIHRoaXMgbWF5CiAgICAgKiAgIG5vdCBjb3JyZXNwb25kIHRvIHRoZSBhcnJheSBpbmRleCBpZiBhIHVzZXIgYHNvcnRgIGlzIGFwcGxpZWQpLgogICAgICovCiAgICBpbmRleEZvckVsZW1lbnQoZWwpIHsKICAgICAgbGV0IGluc3RhbmNlID0gdGhpcy5tb2RlbEZvckVsZW1lbnQoZWwpOwogICAgICByZXR1cm4gaW5zdGFuY2UgJiYgaW5zdGFuY2VbdGhpcy5pbmRleEFzXTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIHRlbXBsYXRlICJtb2RlbCIgYXNzb2NpYXRlZCB3aXRoIGEgZ2l2ZW4gZWxlbWVudCwgd2hpY2gKICAgICAqIHNlcnZlcyBhcyB0aGUgYmluZGluZyBzY29wZSBmb3IgdGhlIHRlbXBsYXRlIGluc3RhbmNlIHRoZSBlbGVtZW50IGlzCiAgICAgKiBjb250YWluZWQgaW4uIEEgdGVtcGxhdGUgbW9kZWwgaXMgYW4gaW5zdGFuY2Ugb2YgYFBvbHltZXIuQmFzZWAsIGFuZAogICAgICogc2hvdWxkIGJlIHVzZWQgdG8gbWFuaXB1bGF0ZSBkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHRlbXBsYXRlIGluc3RhbmNlLgogICAgICoKICAgICAqIEV4YW1wbGU6CiAgICAgKgogICAgICogICBsZXQgbW9kZWwgPSBtb2RlbEZvckVsZW1lbnQoZWwpOwogICAgICogICBpZiAobW9kZWwuaW5kZXggPCAxMCkgewogICAgICogICAgIG1vZGVsLnNldCgnaXRlbS5jaGVja2VkJywgdHJ1ZSk7CiAgICAgKiAgIH0KICAgICAqCiAgICAgKiBAcGFyYW0geyFIVE1MRWxlbWVudH0gZWwgRWxlbWVudCBmb3Igd2hpY2ggdG8gcmV0dXJuIGEgdGVtcGxhdGUgbW9kZWwuCiAgICAgKiBAcmV0dXJuIHtUZW1wbGF0ZUluc3RhbmNlQmFzZX0gTW9kZWwgcmVwcmVzZW50aW5nIHRoZSBiaW5kaW5nIHNjb3BlIGZvcgogICAgICogICB0aGUgZWxlbWVudC4KICAgICAqLwogICAgbW9kZWxGb3JFbGVtZW50KGVsKSB7CiAgICAgIHJldHVybiBQb2x5bWVyLlRlbXBsYXRpemUubW9kZWxGb3JFbGVtZW50KHRoaXMudGVtcGxhdGUsIGVsKTsKICAgIH0KCiAgfQoKICBjdXN0b21FbGVtZW50cy5kZWZpbmUoRG9tUmVwZWF0LmlzLCBEb21SZXBlYXQpOwoKICAvKiogQGNvbnN0ICovCiAgUG9seW1lci5Eb21SZXBlYXQgPSBEb21SZXBlYXQ7Cgp9KSgpOwoKPC9zY3JpcHQ+PHNjcmlwdD4KCihmdW5jdGlvbigpIHsKICAndXNlIHN0cmljdCc7CgogIC8qKgogICAqIFRoZSBgPGRvbS1pZj5gIGVsZW1lbnQgd2lsbCBzdGFtcCBhIGxpZ2h0LWRvbSBgPHRlbXBsYXRlPmAgY2hpbGQgd2hlbgogICAqIHRoZSBgaWZgIHByb3BlcnR5IGJlY29tZXMgdHJ1dGh5LCBhbmQgdGhlIHRlbXBsYXRlIGNhbiB1c2UgUG9seW1lcgogICAqIGRhdGEtYmluZGluZyBhbmQgZGVjbGFyYXRpdmUgZXZlbnQgZmVhdHVyZXMgd2hlbiB1c2VkIGluIHRoZSBjb250ZXh0IG9mCiAgICogYSBQb2x5bWVyIGVsZW1lbnQncyB0ZW1wbGF0ZS4KICAgKgogICAqIFdoZW4gYGlmYCBiZWNvbWVzIGZhbHN5LCB0aGUgc3RhbXBlZCBjb250ZW50IGlzIGhpZGRlbiBidXQgbm90CiAgICogcmVtb3ZlZCBmcm9tIGRvbS4gV2hlbiBgaWZgIHN1YnNlcXVlbnRseSBiZWNvbWVzIHRydXRoeSBhZ2FpbiwgdGhlIGNvbnRlbnQKICAgKiBpcyBzaW1wbHkgcmUtc2hvd24uIFRoaXMgYXBwcm9hY2ggaXMgdXNlZCBkdWUgdG8gaXRzIGZhdm9yYWJsZSBwZXJmb3JtYW5jZQogICAqIGNoYXJhY3RlcmlzdGljczogdGhlIGV4cGVuc2Ugb2YgY3JlYXRpbmcgdGVtcGxhdGUgY29udGVudCBpcyBwYWlkIG9ubHkKICAgKiBvbmNlIGFuZCBsYXppbHkuCiAgICoKICAgKiBTZXQgdGhlIGByZXN0YW1wYCBwcm9wZXJ0eSB0byB0cnVlIHRvIGZvcmNlIHRoZSBzdGFtcGVkIGNvbnRlbnQgdG8gYmUKICAgKiBjcmVhdGVkIC8gZGVzdHJveWVkIHdoZW4gdGhlIGBpZmAgY29uZGl0aW9uIGNoYW5nZXMuCiAgICoKICAgKiBAY3VzdG9tRWxlbWVudAogICAqIEBwb2x5bWVyCiAgICogQGV4dGVuZHMgUG9seW1lci5FbGVtZW50CiAgICogQG1lbWJlcm9mIFBvbHltZXIKICAgKiBAc3VtbWFyeSBDdXN0b20gZWxlbWVudCB0aGF0IGNvbmRpdGlvbmFsbHkgc3RhbXBzIGFuZCBoaWRlcyBvciByZW1vdmVzCiAgICogICB0ZW1wbGF0ZSBjb250ZW50IGJhc2VkIG9uIGEgYm9vbGVhbiBmbGFnLgogICAqLwogIGNsYXNzIERvbUlmIGV4dGVuZHMgUG9seW1lci5FbGVtZW50IHsKCiAgICAvLyBOb3QgbmVlZGVkIHRvIGZpbmQgdGVtcGxhdGU7IGNhbiBiZSByZW1vdmVkIG9uY2UgdGhlIGFuYWx5emVyCiAgICAvLyBjYW4gZmluZCB0aGUgdGFnIG5hbWUgZnJvbSBjdXN0b21FbGVtZW50cy5kZWZpbmUgY2FsbAogICAgc3RhdGljIGdldCBpcygpIHsgcmV0dXJuICdkb20taWYnOyB9CgogICAgc3RhdGljIGdldCB0ZW1wbGF0ZSgpIHsgcmV0dXJuIG51bGw7IH0KCiAgICBzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKSB7CgogICAgICByZXR1cm4gewoKICAgICAgICAvKioKICAgICAgICAgKiBGaXJlZCB3aGVuZXZlciBET00gaXMgYWRkZWQgb3IgcmVtb3ZlZC9oaWRkZW4gYnkgdGhpcyB0ZW1wbGF0ZSAoYnkKICAgICAgICAgKiBkZWZhdWx0LCByZW5kZXJpbmcgb2NjdXJzIGxhemlseSkuICBUbyBmb3JjZSBpbW1lZGlhdGUgcmVuZGVyaW5nLCBjYWxsCiAgICAgICAgICogYHJlbmRlcmAuCiAgICAgICAgICoKICAgICAgICAgKiBAZXZlbnQgZG9tLWNoYW5nZQogICAgICAgICAqLwoKICAgICAgICAvKioKICAgICAgICAgKiBBIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoaXMgdGVtcGxhdGUgc2hvdWxkIHN0YW1wLgogICAgICAgICAqLwogICAgICAgIGlmOiB7CiAgICAgICAgICB0eXBlOiBCb29sZWFuLAogICAgICAgICAgb2JzZXJ2ZXI6ICdfX2RlYm91bmNlUmVuZGVyJwogICAgICAgIH0sCgogICAgICAgIC8qKgogICAgICAgICAqIFdoZW4gdHJ1ZSwgZWxlbWVudHMgd2lsbCBiZSByZW1vdmVkIGZyb20gRE9NIGFuZCBkaXNjYXJkZWQgd2hlbiBgaWZgCiAgICAgICAgICogYmVjb21lcyBmYWxzZSBhbmQgcmUtY3JlYXRlZCBhbmQgYWRkZWQgYmFjayB0byB0aGUgRE9NIHdoZW4gYGlmYAogICAgICAgICAqIGJlY29tZXMgdHJ1ZS4gIEJ5IGRlZmF1bHQsIHN0YW1wZWQgZWxlbWVudHMgd2lsbCBiZSBoaWRkZW4gYnV0IGxlZnQKICAgICAgICAgKiBpbiB0aGUgRE9NIHdoZW4gYGlmYCBiZWNvbWVzIGZhbHNlLCB3aGljaCBpcyBnZW5lcmFsbHkgcmVzdWx0cwogICAgICAgICAqIGluIGJldHRlciBwZXJmb3JtYW5jZS4KICAgICAgICAgKi8KICAgICAgICByZXN0YW1wOiB7CiAgICAgICAgICB0eXBlOiBCb29sZWFuLAogICAgICAgICAgb2JzZXJ2ZXI6ICdfX2RlYm91bmNlUmVuZGVyJwogICAgICAgIH0KCiAgICAgIH07CgogICAgfQoKICAgIGNvbnN0cnVjdG9yKCkgewogICAgICBzdXBlcigpOwogICAgICB0aGlzLl9fcmVuZGVyRGVib3VuY2VyID0gbnVsbDsKICAgICAgdGhpcy5fX2ludmFsaWRQcm9wcyA9IG51bGw7CiAgICAgIHRoaXMuX19pbnN0YW5jZSA9IG51bGw7CiAgICAgIHRoaXMuX2xhc3RJZiA9IGZhbHNlOwogICAgICB0aGlzLl9fY3RvciA9IG51bGw7CiAgICB9CgogICAgX19kZWJvdW5jZVJlbmRlcigpIHsKICAgICAgLy8gUmVuZGVyIGlzIGFzeW5jIGZvciAyIHJlYXNvbnM6CiAgICAgIC8vIDEuIFRvIGVsaW1pbmF0ZSBkb20gY3JlYXRpb24gdHJhc2hpbmcgaWYgdXNlciBjb2RlIHRocmFzaGVzIGBpZmAgaW4gdGhlCiAgICAgIC8vICAgIHNhbWUgdHVybi4gVGhpcyB3YXMgbW9yZSBjb21tb24gaW4gMS54IHdoZXJlIGEgY29tcG91bmQgY29tcHV0ZWQKICAgICAgLy8gICAgcHJvcGVydHkgY291bGQgcmVzdWx0IGluIHRoZSByZXN1bHQgY2hhbmdpbmcgbXVsdGlwbGUgdGltZXMsIGJ1dCBpcwogICAgICAvLyAgICBtaXRpZ2F0ZWQgdG8gYSBsYXJnZSBleHRlbnQgYnkgYmF0Y2hlZCBwcm9wZXJ0eSBwcm9jZXNzaW5nIGluIDIueC4KICAgICAgLy8gMi4gVG8gYXZvaWQgZG91YmxlIG9iamVjdCBwcm9wYWdhdGlvbiB3aGVuIGEgYmFnIGluY2x1ZGluZyB2YWx1ZXMgYm91bmQKICAgICAgLy8gICAgdG8gdGhlIGBpZmAgcHJvcGVydHkgYXMgd2VsbCBhcyBvbmUgb3IgbW9yZSBob3N0UHJvcHMgY291bGQgZW5xdWV1ZQogICAgICAvLyAgICB0aGUgPGRvbS1pZj4gdG8gZmx1c2ggYmVmb3JlIHRoZSA8dGVtcGxhdGU+J3MgaG9zdCBwcm9wZXJ0eQogICAgICAvLyAgICBmb3J3YXJkaW5nLiBJbiB0aGF0IHNjZW5hcmlvIGNyZWF0aW5nIGFuIGluc3RhbmNlIHdvdWxkIHJlc3VsdCBpbgogICAgICAvLyAgICB0aGUgaG9zdCBwcm9wcyBiZWluZyBzZXQgb25jZSwgYW5kIHRoZW4gdGhlIGVucXVldWVkIGNoYW5nZXMgb24gdGhlCiAgICAgIC8vICAgIHRlbXBsYXRlIHdvdWxkIHNldCBwcm9wZXJ0aWVzIGEgc2Vjb25kIHRpbWUsIHBvdGVudGlhbGx5IGNhdXNpbmcgYW4KICAgICAgLy8gICAgb2JqZWN0IHRvIGJlIHNldCB0byBhbiBpbnN0YW5jZSBtb3JlIHRoYW4gb25jZS4gIENyZWF0aW5nIHRoZQogICAgICAvLyAgICBpbnN0YW5jZSBhc3luYyBmcm9tIGZsdXNoaW5nIGRhdGEgZW5zdXJlcyB0aGlzIGRvZXNuJ3QgaGFwcGVuLiBJZgogICAgICAvLyAgICB3ZSB3YW50ZWQgYSBzeW5jIG9wdGlvbiBpbiB0aGUgZnV0dXJlLCBzaW1wbHkgaGF2aW5nIDxkb20taWY+IGZsdXNoCiAgICAgIC8vICAgIChvciBjbGVhcikgaXRzIHRlbXBsYXRlJ3MgcGVuZGluZyBob3N0IHByb3BlcnRpZXMgYmVmb3JlIGNyZWF0aW5nCiAgICAgIC8vICAgIHRoZSBpbnN0YW5jZSB3b3VsZCBhbHNvIGF2b2lkIHRoZSBwcm9ibGVtLgogICAgICB0aGlzLl9fcmVuZGVyRGVib3VuY2VyID0gUG9seW1lci5EZWJvdW5jZXIuZGVib3VuY2UoCiAgICAgICAgICAgIHRoaXMuX19yZW5kZXJEZWJvdW5jZXIKICAgICAgICAgICwgUG9seW1lci5Bc3luYy5taWNyb1Rhc2sKICAgICAgICAgICwgKCkgPT4gdGhpcy5fX3JlbmRlcigpKTsKICAgICAgUG9seW1lci5lbnF1ZXVlRGVib3VuY2VyKHRoaXMuX19yZW5kZXJEZWJvdW5jZXIpOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiB7dm9pZH0KICAgICAqLwogICAgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICAgIHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7CiAgICAgIGlmICghdGhpcy5wYXJlbnROb2RlIHx8CiAgICAgICAgICAodGhpcy5wYXJlbnROb2RlLm5vZGVUeXBlID09IE5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERSAmJgogICAgICAgICAgICF0aGlzLnBhcmVudE5vZGUuaG9zdCkpIHsKICAgICAgICB0aGlzLl9fdGVhcmRvd25JbnN0YW5jZSgpOwogICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICovCiAgICBjb25uZWN0ZWRDYWxsYmFjaygpIHsKICAgICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTsKICAgICAgdGhpcy5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwogICAgICBpZiAodGhpcy5pZikgewogICAgICAgIHRoaXMuX19kZWJvdW5jZVJlbmRlcigpOwogICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBGb3JjZXMgdGhlIGVsZW1lbnQgdG8gcmVuZGVyIGl0cyBjb250ZW50LiBOb3JtYWxseSByZW5kZXJpbmcgaXMKICAgICAqIGFzeW5jaHJvbm91cyB0byBhIHByb3Zva2luZyBjaGFuZ2UuIFRoaXMgaXMgZG9uZSBmb3IgZWZmaWNpZW5jeSBzbwogICAgICogdGhhdCBtdWx0aXBsZSBjaGFuZ2VzIHRyaWdnZXIgb25seSBhIHNpbmdsZSByZW5kZXIuIFRoZSByZW5kZXIgbWV0aG9kCiAgICAgKiBzaG91bGQgYmUgY2FsbGVkIGlmLCBmb3IgZXhhbXBsZSwgdGVtcGxhdGUgcmVuZGVyaW5nIGlzIHJlcXVpcmVkIHRvCiAgICAgKiB2YWxpZGF0ZSBhcHBsaWNhdGlvbiBzdGF0ZS4KICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgKi8KICAgIHJlbmRlcigpIHsKICAgICAgUG9seW1lci5mbHVzaCgpOwogICAgfQoKICAgIF9fcmVuZGVyKCkgewogICAgICBpZiAodGhpcy5pZikgewogICAgICAgIGlmICghdGhpcy5fX2Vuc3VyZUluc3RhbmNlKCkpIHsKICAgICAgICAgIC8vIE5vIHRlbXBsYXRlIGZvdW5kIHlldAogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICB0aGlzLl9zaG93SGlkZUNoaWxkcmVuKCk7CiAgICAgIH0gZWxzZSBpZiAodGhpcy5yZXN0YW1wKSB7CiAgICAgICAgdGhpcy5fX3RlYXJkb3duSW5zdGFuY2UoKTsKICAgICAgfQogICAgICBpZiAoIXRoaXMucmVzdGFtcCAmJiB0aGlzLl9faW5zdGFuY2UpIHsKICAgICAgICB0aGlzLl9zaG93SGlkZUNoaWxkcmVuKCk7CiAgICAgIH0KICAgICAgaWYgKHRoaXMuaWYgIT0gdGhpcy5fbGFzdElmKSB7CiAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnZG9tLWNoYW5nZScsIHsKICAgICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgICBjb21wb3NlZDogdHJ1ZQogICAgICAgIH0pKTsKICAgICAgICB0aGlzLl9sYXN0SWYgPSB0aGlzLmlmOwogICAgICB9CiAgICB9CgogICAgX19lbnN1cmVJbnN0YW5jZSgpIHsKICAgICAgbGV0IHBhcmVudE5vZGUgPSB0aGlzLnBhcmVudE5vZGU7CiAgICAgIC8vIEd1YXJkIGFnYWluc3QgZWxlbWVudCBiZWluZyBkZXRhY2hlZCB3aGlsZSByZW5kZXIgd2FzIHF1ZXVlZAogICAgICBpZiAocGFyZW50Tm9kZSkgewogICAgICAgIGlmICghdGhpcy5fX2N0b3IpIHsKICAgICAgICAgIGxldCB0ZW1wbGF0ZSA9IC8qKiBAdHlwZSB7SFRNTFRlbXBsYXRlRWxlbWVudH0gKi8odGhpcy5xdWVyeVNlbGVjdG9yKCd0ZW1wbGF0ZScpKTsKICAgICAgICAgIGlmICghdGVtcGxhdGUpIHsKICAgICAgICAgICAgLy8gV2FpdCB1bnRpbCBjaGlsZExpc3QgY2hhbmdlcyBhbmQgdGVtcGxhdGUgc2hvdWxkIGJlIHRoZXJlIGJ5IHRoZW4KICAgICAgICAgICAgbGV0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKCkgPT4gewogICAgICAgICAgICAgIGlmICh0aGlzLnF1ZXJ5U2VsZWN0b3IoJ3RlbXBsYXRlJykpIHsKICAgICAgICAgICAgICAgIG9ic2VydmVyLmRpc2Nvbm5lY3QoKTsKICAgICAgICAgICAgICAgIHRoaXMuX19yZW5kZXIoKTsKICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdkb20taWYgcmVxdWlyZXMgYSA8dGVtcGxhdGU+IGNoaWxkJyk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLCB7Y2hpbGRMaXN0OiB0cnVlfSk7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgIH0KICAgICAgICAgIHRoaXMuX19jdG9yID0gUG9seW1lci5UZW1wbGF0aXplLnRlbXBsYXRpemUodGVtcGxhdGUsIHRoaXMsIHsKICAgICAgICAgICAgLy8gZG9tLWlmIHRlbXBsYXRpemVyIGluc3RhbmNlcyByZXF1aXJlIGBtdXRhYmxlOiB0cnVlYCwgYXMKICAgICAgICAgICAgLy8gYF9fc3luY0hvc3RQcm9wZXJ0aWVzYCByZWxpZXMgb24gdGhhdCBiZWhhdmlvciB0byBzeW5jIG9iamVjdHMKICAgICAgICAgICAgbXV0YWJsZURhdGE6IHRydWUsCiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcCBQcm9wZXJ0eSB0byBmb3J3YXJkCiAgICAgICAgICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVmFsdWUgb2YgcHJvcGVydHkKICAgICAgICAgICAgICogQHRoaXMge3RoaXN9CiAgICAgICAgICAgICAqLwogICAgICAgICAgICBmb3J3YXJkSG9zdFByb3A6IGZ1bmN0aW9uKHByb3AsIHZhbHVlKSB7CiAgICAgICAgICAgICAgaWYgKHRoaXMuX19pbnN0YW5jZSkgewogICAgICAgICAgICAgICAgaWYgKHRoaXMuaWYpIHsKICAgICAgICAgICAgICAgICAgdGhpcy5fX2luc3RhbmNlLmZvcndhcmRIb3N0UHJvcChwcm9wLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAvLyBJZiB3ZSBoYXZlIGFuIGluc3RhbmNlIGJ1dCBhcmUgc3F1ZWxjaGluZyBob3N0IHByb3BlcnR5CiAgICAgICAgICAgICAgICAgIC8vIGZvcndhcmRpbmcgZHVlIHRvIGlmIGJlaW5nIGZhbHNlLCBub3RlIHRoZSBpbnZhbGlkYXRlZAogICAgICAgICAgICAgICAgICAvLyBwcm9wZXJ0aWVzIHNvIGBfX3N5bmNIb3N0UHJvcGVydGllc2AgY2FuIHN5bmMgdGhlbSB0aGUgbmV4dAogICAgICAgICAgICAgICAgICAvLyB0aW1lIGBpZmAgYmVjb21lcyB0cnVlCiAgICAgICAgICAgICAgICAgIHRoaXMuX19pbnZhbGlkUHJvcHMgPSB0aGlzLl9faW52YWxpZFByb3BzIHx8IE9iamVjdC5jcmVhdGUobnVsbCk7CiAgICAgICAgICAgICAgICAgIHRoaXMuX19pbnZhbGlkUHJvcHNbUG9seW1lci5QYXRoLnJvb3QocHJvcCldID0gdHJ1ZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICBpZiAoIXRoaXMuX19pbnN0YW5jZSkgewogICAgICAgICAgdGhpcy5fX2luc3RhbmNlID0gbmV3IHRoaXMuX19jdG9yKCk7CiAgICAgICAgICBwYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLl9faW5zdGFuY2Uucm9vdCwgdGhpcyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRoaXMuX19zeW5jSG9zdFByb3BlcnRpZXMoKTsKICAgICAgICAgIGxldCBjJCA9IHRoaXMuX19pbnN0YW5jZS5jaGlsZHJlbjsKICAgICAgICAgIGlmIChjJCAmJiBjJC5sZW5ndGgpIHsKICAgICAgICAgICAgLy8gRGV0ZWN0IGNhc2Ugd2hlcmUgZG9tLWlmIHdhcyByZS1hdHRhY2hlZCBpbiBuZXcgcG9zaXRpb24KICAgICAgICAgICAgbGV0IGxhc3RDaGlsZCA9IHRoaXMucHJldmlvdXNTaWJsaW5nOwogICAgICAgICAgICBpZiAobGFzdENoaWxkICE9PSBjJFtjJC5sZW5ndGgtMV0pIHsKICAgICAgICAgICAgICBmb3IgKGxldCBpPTAsIG47IChpPGMkLmxlbmd0aCkgJiYgKG49YyRbaV0pOyBpKyspIHsKICAgICAgICAgICAgICAgIHBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKG4sIHRoaXMpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICBfX3N5bmNIb3N0UHJvcGVydGllcygpIHsKICAgICAgbGV0IHByb3BzID0gdGhpcy5fX2ludmFsaWRQcm9wczsKICAgICAgaWYgKHByb3BzKSB7CiAgICAgICAgZm9yIChsZXQgcHJvcCBpbiBwcm9wcykgewogICAgICAgICAgdGhpcy5fX2luc3RhbmNlLl9zZXRQZW5kaW5nUHJvcGVydHkocHJvcCwgdGhpcy5fX2RhdGFIb3N0W3Byb3BdKTsKICAgICAgICB9CiAgICAgICAgdGhpcy5fX2ludmFsaWRQcm9wcyA9IG51bGw7CiAgICAgICAgdGhpcy5fX2luc3RhbmNlLl9mbHVzaFByb3BlcnRpZXMoKTsKICAgICAgfQogICAgfQoKICAgIF9fdGVhcmRvd25JbnN0YW5jZSgpIHsKICAgICAgaWYgKHRoaXMuX19pbnN0YW5jZSkgewogICAgICAgIGxldCBjJCA9IHRoaXMuX19pbnN0YW5jZS5jaGlsZHJlbjsKICAgICAgICBpZiAoYyQgJiYgYyQubGVuZ3RoKSB7CiAgICAgICAgICAvLyB1c2UgZmlyc3QgY2hpbGQgcGFyZW50LCBmb3IgY2FzZSB3aGVuIGRvbS1pZiBtYXkgaGF2ZSBiZWVuIGRldGFjaGVkCiAgICAgICAgICBsZXQgcGFyZW50ID0gYyRbMF0ucGFyZW50Tm9kZTsKICAgICAgICAgIC8vIEluc3RhbmNlIGNoaWxkcmVuIG1heSBiZSBkaXNjb25uZWN0ZWQgZnJvbSBwYXJlbnRzIHdoZW4gZG9tLWlmCiAgICAgICAgICAvLyBkZXRhY2hlcyBpZiBhIHRyZWUgd2FzIGlubmVySFRNTCdlZAogICAgICAgICAgaWYgKHBhcmVudCkgewogICAgICAgICAgICBmb3IgKGxldCBpPTAsIG47IChpPGMkLmxlbmd0aCkgJiYgKG49YyRbaV0pOyBpKyspIHsKICAgICAgICAgICAgICBwYXJlbnQucmVtb3ZlQ2hpbGQobik7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgdGhpcy5fX2luc3RhbmNlID0gbnVsbDsKICAgICAgICB0aGlzLl9faW52YWxpZFByb3BzID0gbnVsbDsKICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogU2hvd3Mgb3IgaGlkZXMgdGhlIHRlbXBsYXRlIGluc3RhbmNlIHRvcCBsZXZlbCBjaGlsZCBlbGVtZW50cy4gRm9yCiAgICAgKiB0ZXh0IG5vZGVzLCBgdGV4dENvbnRlbnRgIGlzIHJlbW92ZWQgd2hpbGUgImhpZGRlbiIgYW5kIHJlcGxhY2VkIHdoZW4KICAgICAqICJzaG93bi4iCiAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICogQHByb3RlY3RlZAogICAgICovCiAgICBfc2hvd0hpZGVDaGlsZHJlbigpIHsKICAgICAgbGV0IGhpZGRlbiA9IHRoaXMuX19oaWRlVGVtcGxhdGVDaGlsZHJlbl9fIHx8ICF0aGlzLmlmOwogICAgICBpZiAodGhpcy5fX2luc3RhbmNlKSB7CiAgICAgICAgdGhpcy5fX2luc3RhbmNlLl9zaG93SGlkZUNoaWxkcmVuKGhpZGRlbik7CiAgICAgIH0KICAgIH0KCiAgfQoKICBjdXN0b21FbGVtZW50cy5kZWZpbmUoRG9tSWYuaXMsIERvbUlmKTsKCiAgLyoqIEBjb25zdCAqLwogIFBvbHltZXIuRG9tSWYgPSBEb21JZjsKCn0pKCk7Cjwvc2NyaXB0PjxzY3JpcHQ+CihmdW5jdGlvbigpIHsKICAndXNlIHN0cmljdCc7CgogIC8qKgogICAqIEVsZW1lbnQgbWl4aW4gZm9yIHJlY29yZGluZyBkeW5hbWljIGFzc29jaWF0aW9ucyBiZXR3ZWVuIGl0ZW0gcGF0aHMgaW4gYQogICAqIG1hc3RlciBgaXRlbXNgIGFycmF5IGFuZCBhIGBzZWxlY3RlZGAgYXJyYXkgc3VjaCB0aGF0IHBhdGggY2hhbmdlcyB0byB0aGUKICAgKiBtYXN0ZXIgYXJyYXkgKGF0IHRoZSBob3N0KSBlbGVtZW50IG9yIGVsc2V3aGVyZSB2aWEgZGF0YS1iaW5kaW5nKSBhcmUKICAgKiBjb3JyZWN0bHkgcHJvcGFnYXRlZCB0byBpdGVtcyBpbiB0aGUgc2VsZWN0ZWQgYXJyYXkgYW5kIHZpY2UtdmVyc2EuCiAgICoKICAgKiBUaGUgYGl0ZW1zYCBwcm9wZXJ0eSBhY2NlcHRzIGFuIGFycmF5IG9mIHVzZXIgZGF0YSwgYW5kIHZpYSB0aGUKICAgKiBgc2VsZWN0KGl0ZW0pYCBhbmQgYGRlc2VsZWN0KGl0ZW0pYCBBUEksIHVwZGF0ZXMgdGhlIGBzZWxlY3RlZGAgcHJvcGVydHkKICAgKiB3aGljaCBtYXkgYmUgYm91bmQgdG8gb3RoZXIgcGFydHMgb2YgdGhlIGFwcGxpY2F0aW9uLCBhbmQgYW55IGNoYW5nZXMgdG8KICAgKiBzdWItZmllbGRzIG9mIGBzZWxlY3RlZGAgaXRlbShzKSB3aWxsIGJlIGtlcHQgaW4gc3luYyB3aXRoIGl0ZW1zIGluIHRoZQogICAqIGBpdGVtc2AgYXJyYXkuICBXaGVuIGBtdWx0aWAgaXMgZmFsc2UsIGBzZWxlY3RlZGAgaXMgYSBwcm9wZXJ0eQogICAqIHJlcHJlc2VudGluZyB0aGUgbGFzdCBzZWxlY3RlZCBpdGVtLiAgV2hlbiBgbXVsdGlgIGlzIHRydWUsIGBzZWxlY3RlZGAKICAgKiBpcyBhbiBhcnJheSBvZiBtdWx0aXBseSBzZWxlY3RlZCBpdGVtcy4KICAgKgogICAqIEBwb2x5bWVyCiAgICogQG1peGluRnVuY3Rpb24KICAgKiBAYXBwbGllc01peGluIFBvbHltZXIuRWxlbWVudE1peGluCiAgICogQG1lbWJlcm9mIFBvbHltZXIKICAgKiBAc3VtbWFyeSBFbGVtZW50IG1peGluIGZvciByZWNvcmRpbmcgZHluYW1pYyBhc3NvY2lhdGlvbnMgYmV0d2VlbiBpdGVtIHBhdGhzIGluIGEKICAgKiBtYXN0ZXIgYGl0ZW1zYCBhcnJheSBhbmQgYSBgc2VsZWN0ZWRgIGFycmF5CiAgICovCiAgbGV0IEFycmF5U2VsZWN0b3JNaXhpbiA9IFBvbHltZXIuZGVkdXBpbmdNaXhpbihzdXBlckNsYXNzID0+IHsKCiAgICAvKioKICAgICAqIEBjb25zdHJ1Y3RvcgogICAgICogQGV4dGVuZHMge3N1cGVyQ2xhc3N9CiAgICAgKiBAaW1wbGVtZW50cyB7UG9seW1lcl9FbGVtZW50TWl4aW59CiAgICAgKiBAcHJpdmF0ZQogICAgICovCiAgICBsZXQgZWxlbWVudEJhc2UgPSBQb2x5bWVyLkVsZW1lbnRNaXhpbihzdXBlckNsYXNzKTsKCiAgICAvKioKICAgICAqIEBwb2x5bWVyCiAgICAgKiBAbWl4aW5DbGFzcwogICAgICogQGltcGxlbWVudHMge1BvbHltZXJfQXJyYXlTZWxlY3Rvck1peGlufQogICAgICogQHVucmVzdHJpY3RlZAogICAgICovCiAgICBjbGFzcyBBcnJheVNlbGVjdG9yTWl4aW4gZXh0ZW5kcyBlbGVtZW50QmFzZSB7CgogICAgICBzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKSB7CgogICAgICAgIHJldHVybiB7CgogICAgICAgICAgLyoqCiAgICAgICAgICAgKiBBbiBhcnJheSBjb250YWluaW5nIGl0ZW1zIGZyb20gd2hpY2ggc2VsZWN0aW9uIHdpbGwgYmUgbWFkZS4KICAgICAgICAgICAqLwogICAgICAgICAgaXRlbXM6IHsKICAgICAgICAgICAgdHlwZTogQXJyYXksCiAgICAgICAgICB9LAoKICAgICAgICAgIC8qKgogICAgICAgICAgICogV2hlbiBgdHJ1ZWAsIG11bHRpcGxlIGl0ZW1zIG1heSBiZSBzZWxlY3RlZCBhdCBvbmNlIChpbiB0aGlzIGNhc2UsCiAgICAgICAgICAgKiBgc2VsZWN0ZWRgIGlzIGFuIGFycmF5IG9mIGN1cnJlbnRseSBzZWxlY3RlZCBpdGVtcykuICBXaGVuIGBmYWxzZWAsCiAgICAgICAgICAgKiBvbmx5IG9uZSBpdGVtIG1heSBiZSBzZWxlY3RlZCBhdCBhIHRpbWUuCiAgICAgICAgICAgKi8KICAgICAgICAgIG11bHRpOiB7CiAgICAgICAgICAgIHR5cGU6IEJvb2xlYW4sCiAgICAgICAgICAgIHZhbHVlOiBmYWxzZSwKICAgICAgICAgIH0sCgogICAgICAgICAgLyoqCiAgICAgICAgICAgKiBXaGVuIGBtdWx0aWAgaXMgdHJ1ZSwgdGhpcyBpcyBhbiBhcnJheSB0aGF0IGNvbnRhaW5zIGFueSBzZWxlY3RlZC4KICAgICAgICAgICAqIFdoZW4gYG11bHRpYCBpcyBmYWxzZSwgdGhpcyBpcyB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGl0ZW0sIG9yIGBudWxsYAogICAgICAgICAgICogaWYgbm8gaXRlbSBpcyBzZWxlY3RlZC4KICAgICAgICAgICAqIEB0eXBlIHs/KE9iamVjdHxBcnJheTwhT2JqZWN0Pil9CiAgICAgICAgICAgKi8KICAgICAgICAgIHNlbGVjdGVkOiB7CiAgICAgICAgICAgIHR5cGU6IE9iamVjdCwKICAgICAgICAgICAgbm90aWZ5OiB0cnVlCiAgICAgICAgICB9LAoKICAgICAgICAgIC8qKgogICAgICAgICAgICogV2hlbiBgbXVsdGlgIGlzIGZhbHNlLCB0aGlzIGlzIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgaXRlbSwgb3IgYG51bGxgCiAgICAgICAgICAgKiBpZiBubyBpdGVtIGlzIHNlbGVjdGVkLgogICAgICAgICAgICogQHR5cGUgez9PYmplY3R9CiAgICAgICAgICAgKi8KICAgICAgICAgIHNlbGVjdGVkSXRlbTogewogICAgICAgICAgICB0eXBlOiBPYmplY3QsCiAgICAgICAgICAgIG5vdGlmeTogdHJ1ZQogICAgICAgICAgfSwKCiAgICAgICAgICAvKioKICAgICAgICAgICAqIFdoZW4gYHRydWVgLCBjYWxsaW5nIGBzZWxlY3RgIG9uIGFuIGl0ZW0gdGhhdCBpcyBhbHJlYWR5IHNlbGVjdGVkCiAgICAgICAgICAgKiB3aWxsIGRlc2VsZWN0IHRoZSBpdGVtLgogICAgICAgICAgICovCiAgICAgICAgICB0b2dnbGU6IHsKICAgICAgICAgICAgdHlwZTogQm9vbGVhbiwKICAgICAgICAgICAgdmFsdWU6IGZhbHNlCiAgICAgICAgICB9CgogICAgICAgIH07CiAgICAgIH0KCiAgICAgIHN0YXRpYyBnZXQgb2JzZXJ2ZXJzKCkgewogICAgICAgIHJldHVybiBbJ19fdXBkYXRlU2VsZWN0aW9uKG11bHRpLCBpdGVtcy4qKSddOwogICAgICB9CgogICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICBzdXBlcigpOwogICAgICAgIHRoaXMuX19sYXN0SXRlbXMgPSBudWxsOwogICAgICAgIHRoaXMuX19sYXN0TXVsdGkgPSBudWxsOwogICAgICAgIHRoaXMuX19zZWxlY3RlZE1hcCA9IG51bGw7CiAgICAgIH0KCiAgICAgIF9fdXBkYXRlU2VsZWN0aW9uKG11bHRpLCBpdGVtc0luZm8pIHsKICAgICAgICBsZXQgcGF0aCA9IGl0ZW1zSW5mby5wYXRoOwogICAgICAgIGlmIChwYXRoID09ICdpdGVtcycpIHsKICAgICAgICAgIC8vIENhc2UgMSAtIGl0ZW1zIGFycmF5IGNoYW5nZWQsIHNvIGRpZmYgYWdhaW5zdCBwcmV2aW91cyBhcnJheSBhbmQKICAgICAgICAgIC8vIGRlc2VsZWN0IGFueSByZW1vdmVkIGl0ZW1zIGFuZCBhZGp1c3Qgc2VsZWN0ZWQgaW5kaWNlcwogICAgICAgICAgbGV0IG5ld0l0ZW1zID0gaXRlbXNJbmZvLmJhc2UgfHwgW107CiAgICAgICAgICBsZXQgbGFzdEl0ZW1zID0gdGhpcy5fX2xhc3RJdGVtczsKICAgICAgICAgIGxldCBsYXN0TXVsdGkgPSB0aGlzLl9fbGFzdE11bHRpOwogICAgICAgICAgaWYgKG11bHRpICE9PSBsYXN0TXVsdGkpIHsKICAgICAgICAgICAgdGhpcy5jbGVhclNlbGVjdGlvbigpOwogICAgICAgICAgfQogICAgICAgICAgaWYgKGxhc3RJdGVtcykgewogICAgICAgICAgICBsZXQgc3BsaWNlcyA9IFBvbHltZXIuQXJyYXlTcGxpY2UuY2FsY3VsYXRlU3BsaWNlcyhuZXdJdGVtcywgbGFzdEl0ZW1zKTsKICAgICAgICAgICAgdGhpcy5fX2FwcGx5U3BsaWNlcyhzcGxpY2VzKTsKICAgICAgICAgIH0KICAgICAgICAgIHRoaXMuX19sYXN0SXRlbXMgPSBuZXdJdGVtczsKICAgICAgICAgIHRoaXMuX19sYXN0TXVsdGkgPSBtdWx0aTsKICAgICAgICB9IGVsc2UgaWYgKGl0ZW1zSW5mby5wYXRoID09ICdpdGVtcy5zcGxpY2VzJykgewogICAgICAgICAgLy8gQ2FzZSAyIC0gZ290IHNwZWNpZmljIHNwbGljZSBpbmZvcm1hdGlvbiBkZXNjcmliaW5nIHRoZSBhcnJheSBtdXRhdGlvbjoKICAgICAgICAgIC8vIGRlc2VsZWN0IGFueSByZW1vdmVkIGl0ZW1zIGFuZCBhZGp1c3Qgc2VsZWN0ZWQgaW5kaWNlcwogICAgICAgICAgdGhpcy5fX2FwcGx5U3BsaWNlcyhpdGVtc0luZm8udmFsdWUuaW5kZXhTcGxpY2VzKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgLy8gQ2FzZSAzIC0gYW4gYXJyYXkgZWxlbWVudCB3YXMgY2hhbmdlZCwgc28gZGVzZWxlY3QgdGhlIHByZXZpb3VzCiAgICAgICAgICAvLyBpdGVtIGZvciB0aGF0IGluZGV4IGlmIGl0IHdhcyBwcmV2aW91c2x5IHNlbGVjdGVkCiAgICAgICAgICBsZXQgcGFydCA9IHBhdGguc2xpY2UoJ2l0ZW1zLicubGVuZ3RoKTsKICAgICAgICAgIGxldCBpZHggPSBwYXJzZUludChwYXJ0LCAxMCk7CiAgICAgICAgICBpZiAoKHBhcnQuaW5kZXhPZignLicpIDwgMCkgJiYgcGFydCA9PSBpZHgpIHsKICAgICAgICAgICAgdGhpcy5fX2Rlc2VsZWN0Q2hhbmdlZElkeChpZHgpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQoKICAgICAgX19hcHBseVNwbGljZXMoc3BsaWNlcykgewogICAgICAgIGxldCBzZWxlY3RlZCA9IHRoaXMuX19zZWxlY3RlZE1hcDsKICAgICAgICAvLyBBZGp1c3Qgc2VsZWN0ZWQgaW5kaWNlcyBhbmQgbWFyayByZW1vdmFscwogICAgICAgIGZvciAobGV0IGk9MDsgaTxzcGxpY2VzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICBsZXQgcyA9IHNwbGljZXNbaV07CiAgICAgICAgICBzZWxlY3RlZC5mb3JFYWNoKChpZHgsIGl0ZW0pID0+IHsKICAgICAgICAgICAgaWYgKGlkeCA8IHMuaW5kZXgpIHsKICAgICAgICAgICAgICAvLyBubyBjaGFuZ2UKICAgICAgICAgICAgfSBlbHNlIGlmIChpZHggPj0gcy5pbmRleCArIHMucmVtb3ZlZC5sZW5ndGgpIHsKICAgICAgICAgICAgICAvLyBhZGp1c3QgaW5kZXgKICAgICAgICAgICAgICBzZWxlY3RlZC5zZXQoaXRlbSwgaWR4ICsgcy5hZGRlZENvdW50IC0gcy5yZW1vdmVkLmxlbmd0aCk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgLy8gcmVtb3ZlIGluZGV4CiAgICAgICAgICAgICAgc2VsZWN0ZWQuc2V0KGl0ZW0sIC0xKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgICBmb3IgKGxldCBqPTA7IGo8cy5hZGRlZENvdW50OyBqKyspIHsKICAgICAgICAgICAgbGV0IGlkeCA9IHMuaW5kZXggKyBqOwogICAgICAgICAgICBpZiAoc2VsZWN0ZWQuaGFzKHRoaXMuaXRlbXNbaWR4XSkpIHsKICAgICAgICAgICAgICBzZWxlY3RlZC5zZXQodGhpcy5pdGVtc1tpZHhdLCBpZHgpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIC8vIFVwZGF0ZSBsaW5rZWQgcGF0aHMKICAgICAgICB0aGlzLl9fdXBkYXRlTGlua3MoKTsKICAgICAgICAvLyBSZW1vdmUgc2VsZWN0ZWQgaXRlbXMgdGhhdCB3ZXJlIHJlbW92ZWQgZnJvbSB0aGUgaXRlbXMgYXJyYXkKICAgICAgICBsZXQgc2lkeCA9IDA7CiAgICAgICAgc2VsZWN0ZWQuZm9yRWFjaCgoaWR4LCBpdGVtKSA9PiB7CiAgICAgICAgICBpZiAoaWR4IDwgMCkgewogICAgICAgICAgICBpZiAodGhpcy5tdWx0aSkgewogICAgICAgICAgICAgIHRoaXMuc3BsaWNlKCdzZWxlY3RlZCcsIHNpZHgsIDEpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWQgPSB0aGlzLnNlbGVjdGVkSXRlbSA9IG51bGw7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgc2VsZWN0ZWQuZGVsZXRlKGl0ZW0pOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgc2lkeCsrOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9CgogICAgICBfX3VwZGF0ZUxpbmtzKCkgewogICAgICAgIHRoaXMuX19kYXRhTGlua2VkUGF0aHMgPSB7fTsKICAgICAgICBpZiAodGhpcy5tdWx0aSkgewogICAgICAgICAgbGV0IHNpZHggPSAwOwogICAgICAgICAgdGhpcy5fX3NlbGVjdGVkTWFwLmZvckVhY2goaWR4ID0+IHsKICAgICAgICAgICAgaWYgKGlkeCA+PSAwKSB7CiAgICAgICAgICAgICAgdGhpcy5saW5rUGF0aHMoJ2l0ZW1zLicgKyBpZHgsICdzZWxlY3RlZC4nICsgc2lkeCsrKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRoaXMuX19zZWxlY3RlZE1hcC5mb3JFYWNoKGlkeCA9PiB7CiAgICAgICAgICAgIHRoaXMubGlua1BhdGhzKCdzZWxlY3RlZCcsICdpdGVtcy4nICsgaWR4KTsKICAgICAgICAgICAgdGhpcy5saW5rUGF0aHMoJ3NlbGVjdGVkSXRlbScsICdpdGVtcy4nICsgaWR4KTsKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIENsZWFycyB0aGUgc2VsZWN0aW9uIHN0YXRlLgogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKi8KICAgICAgY2xlYXJTZWxlY3Rpb24oKSB7CiAgICAgICAgLy8gVW5iaW5kIHByZXZpb3VzIHNlbGVjdGlvbgogICAgICAgIHRoaXMuX19kYXRhTGlua2VkUGF0aHMgPSB7fTsKICAgICAgICAvLyBUaGUgc2VsZWN0ZWQgbWFwIHN0b3JlcyAzIHBpZWNlcyBvZiBpbmZvcm1hdGlvbjoKICAgICAgICAvLyBrZXk6IGl0ZW1zIGFycmF5IG9iamVjdAogICAgICAgIC8vIHZhbHVlOiBpdGVtcyBhcnJheSBpbmRleAogICAgICAgIC8vIG9yZGVyOiBzZWxlY3RlZCBhcnJheSBpbmRleAogICAgICAgIHRoaXMuX19zZWxlY3RlZE1hcCA9IG5ldyBNYXAoKTsKICAgICAgICAvLyBJbml0aWFsaXplIHNlbGVjdGlvbgogICAgICAgIHRoaXMuc2VsZWN0ZWQgPSB0aGlzLm11bHRpID8gW10gOiBudWxsOwogICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtID0gbnVsbDsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIFJldHVybnMgd2hldGhlciB0aGUgaXRlbSBpcyBjdXJyZW50bHkgc2VsZWN0ZWQuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7Kn0gaXRlbSBJdGVtIGZyb20gYGl0ZW1zYCBhcnJheSB0byB0ZXN0CiAgICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIGl0ZW0gaXMgc2VsZWN0ZWQKICAgICAgICovCiAgICAgIGlzU2VsZWN0ZWQoaXRlbSkgewogICAgICAgIHJldHVybiB0aGlzLl9fc2VsZWN0ZWRNYXAuaGFzKGl0ZW0pOwogICAgICB9CgogICAgICAvKioKICAgICAgICogUmV0dXJucyB3aGV0aGVyIHRoZSBpdGVtIGlzIGN1cnJlbnRseSBzZWxlY3RlZC4KICAgICAgICoKICAgICAgICogQHBhcmFtIHtudW1iZXJ9IGlkeCBJbmRleCBmcm9tIGBpdGVtc2AgYXJyYXkgdG8gdGVzdAogICAgICAgKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSBpdGVtIGlzIHNlbGVjdGVkCiAgICAgICAqLwogICAgICBpc0luZGV4U2VsZWN0ZWQoaWR4KSB7CiAgICAgICAgcmV0dXJuIHRoaXMuaXNTZWxlY3RlZCh0aGlzLml0ZW1zW2lkeF0pOwogICAgICB9CgogICAgICBfX2Rlc2VsZWN0Q2hhbmdlZElkeChpZHgpIHsKICAgICAgICBsZXQgc2lkeCA9IHRoaXMuX19zZWxlY3RlZEluZGV4Rm9ySXRlbUluZGV4KGlkeCk7CiAgICAgICAgaWYgKHNpZHggPj0gMCkgewogICAgICAgICAgbGV0IGkgPSAwOwogICAgICAgICAgdGhpcy5fX3NlbGVjdGVkTWFwLmZvckVhY2goKGlkeCwgaXRlbSkgPT4gewogICAgICAgICAgICBpZiAoc2lkeCA9PSBpKyspIHsKICAgICAgICAgICAgICB0aGlzLmRlc2VsZWN0KGl0ZW0pOwogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIF9fc2VsZWN0ZWRJbmRleEZvckl0ZW1JbmRleChpZHgpIHsKICAgICAgICBsZXQgc2VsZWN0ZWQgPSB0aGlzLl9fZGF0YUxpbmtlZFBhdGhzWydpdGVtcy4nICsgaWR4XTsKICAgICAgICBpZiAoc2VsZWN0ZWQpIHsKICAgICAgICAgIHJldHVybiBwYXJzZUludChzZWxlY3RlZC5zbGljZSgnc2VsZWN0ZWQuJy5sZW5ndGgpLCAxMCk7CiAgICAgICAgfQogICAgICB9CgogICAgICAvKioKICAgICAgICogRGVzZWxlY3RzIHRoZSBnaXZlbiBpdGVtIGlmIGl0IGlzIGFscmVhZHkgc2VsZWN0ZWQuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7Kn0gaXRlbSBJdGVtIGZyb20gYGl0ZW1zYCBhcnJheSB0byBkZXNlbGVjdAogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKi8KICAgICAgZGVzZWxlY3QoaXRlbSkgewogICAgICAgIGxldCBpZHggPSB0aGlzLl9fc2VsZWN0ZWRNYXAuZ2V0KGl0ZW0pOwogICAgICAgIGlmIChpZHggPj0gMCkgewogICAgICAgICAgdGhpcy5fX3NlbGVjdGVkTWFwLmRlbGV0ZShpdGVtKTsKICAgICAgICAgIGxldCBzaWR4OwogICAgICAgICAgaWYgKHRoaXMubXVsdGkpIHsKICAgICAgICAgICAgc2lkeCA9IHRoaXMuX19zZWxlY3RlZEluZGV4Rm9ySXRlbUluZGV4KGlkeCk7CiAgICAgICAgICB9CiAgICAgICAgICB0aGlzLl9fdXBkYXRlTGlua3MoKTsKICAgICAgICAgIGlmICh0aGlzLm11bHRpKSB7CiAgICAgICAgICAgIHRoaXMuc3BsaWNlKCdzZWxlY3RlZCcsIHNpZHgsIDEpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGhpcy5zZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWRJdGVtID0gbnVsbDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBEZXNlbGVjdHMgdGhlIGdpdmVuIGluZGV4IGlmIGl0IGlzIGFscmVhZHkgc2VsZWN0ZWQuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBpZHggSW5kZXggZnJvbSBgaXRlbXNgIGFycmF5IHRvIGRlc2VsZWN0CiAgICAgICAqIEByZXR1cm4ge3ZvaWR9CiAgICAgICAqLwogICAgICBkZXNlbGVjdEluZGV4KGlkeCkgewogICAgICAgIHRoaXMuZGVzZWxlY3QodGhpcy5pdGVtc1tpZHhdKTsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIFNlbGVjdHMgdGhlIGdpdmVuIGl0ZW0uICBXaGVuIGB0b2dnbGVgIGlzIHRydWUsIHRoaXMgd2lsbCBhdXRvbWF0aWNhbGx5CiAgICAgICAqIGRlc2VsZWN0IHRoZSBpdGVtIGlmIGFscmVhZHkgc2VsZWN0ZWQuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7Kn0gaXRlbSBJdGVtIGZyb20gYGl0ZW1zYCBhcnJheSB0byBzZWxlY3QKICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICovCiAgICAgIHNlbGVjdChpdGVtKSB7CiAgICAgICAgdGhpcy5zZWxlY3RJbmRleCh0aGlzLml0ZW1zLmluZGV4T2YoaXRlbSkpOwogICAgICB9CgogICAgICAvKioKICAgICAgICogU2VsZWN0cyB0aGUgZ2l2ZW4gaW5kZXguICBXaGVuIGB0b2dnbGVgIGlzIHRydWUsIHRoaXMgd2lsbCBhdXRvbWF0aWNhbGx5CiAgICAgICAqIGRlc2VsZWN0IHRoZSBpdGVtIGlmIGFscmVhZHkgc2VsZWN0ZWQuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBpZHggSW5kZXggZnJvbSBgaXRlbXNgIGFycmF5IHRvIHNlbGVjdAogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKi8KICAgICAgc2VsZWN0SW5kZXgoaWR4KSB7CiAgICAgICAgbGV0IGl0ZW0gPSB0aGlzLml0ZW1zW2lkeF07CiAgICAgICAgaWYgKCF0aGlzLmlzU2VsZWN0ZWQoaXRlbSkpIHsKICAgICAgICAgIGlmICghdGhpcy5tdWx0aSkgewogICAgICAgICAgICB0aGlzLl9fc2VsZWN0ZWRNYXAuY2xlYXIoKTsKICAgICAgICAgIH0KICAgICAgICAgIHRoaXMuX19zZWxlY3RlZE1hcC5zZXQoaXRlbSwgaWR4KTsKICAgICAgICAgIHRoaXMuX191cGRhdGVMaW5rcygpOwogICAgICAgICAgaWYgKHRoaXMubXVsdGkpIHsKICAgICAgICAgICAgdGhpcy5wdXNoKCdzZWxlY3RlZCcsIGl0ZW0pOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGhpcy5zZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWRJdGVtID0gaXRlbTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKHRoaXMudG9nZ2xlKSB7CiAgICAgICAgICB0aGlzLmRlc2VsZWN0SW5kZXgoaWR4KTsKICAgICAgICB9CiAgICAgIH0KCiAgICB9CgogICAgcmV0dXJuIEFycmF5U2VsZWN0b3JNaXhpbjsKCiAgfSk7CgogIC8vIGV4cG9ydCBtaXhpbgogIFBvbHltZXIuQXJyYXlTZWxlY3Rvck1peGluID0gQXJyYXlTZWxlY3Rvck1peGluOwoKICAvKioKICAgKiBAY29uc3RydWN0b3IKICAgKiBAZXh0ZW5kcyB7UG9seW1lci5FbGVtZW50fQogICAqIEBpbXBsZW1lbnRzIHtQb2x5bWVyX0FycmF5U2VsZWN0b3JNaXhpbn0KICAgKiBAcHJpdmF0ZQogICAqLwogIGxldCBiYXNlQXJyYXlTZWxlY3RvciA9IEFycmF5U2VsZWN0b3JNaXhpbihQb2x5bWVyLkVsZW1lbnQpOwoKICAvKioKICAgKiBFbGVtZW50IGltcGxlbWVudGluZyB0aGUgYFBvbHltZXIuQXJyYXlTZWxlY3RvcmAgbWl4aW4sIHdoaWNoIHJlY29yZHMKICAgKiBkeW5hbWljIGFzc29jaWF0aW9ucyBiZXR3ZWVuIGl0ZW0gcGF0aHMgaW4gYSBtYXN0ZXIgYGl0ZW1zYCBhcnJheSBhbmQgYQogICAqIGBzZWxlY3RlZGAgYXJyYXkgc3VjaCB0aGF0IHBhdGggY2hhbmdlcyB0byB0aGUgbWFzdGVyIGFycmF5IChhdCB0aGUgaG9zdCkKICAgKiBlbGVtZW50IG9yIGVsc2V3aGVyZSB2aWEgZGF0YS1iaW5kaW5nKSBhcmUgY29ycmVjdGx5IHByb3BhZ2F0ZWQgdG8gaXRlbXMKICAgKiBpbiB0aGUgc2VsZWN0ZWQgYXJyYXkgYW5kIHZpY2UtdmVyc2EuCiAgICoKICAgKiBUaGUgYGl0ZW1zYCBwcm9wZXJ0eSBhY2NlcHRzIGFuIGFycmF5IG9mIHVzZXIgZGF0YSwgYW5kIHZpYSB0aGUKICAgKiBgc2VsZWN0KGl0ZW0pYCBhbmQgYGRlc2VsZWN0KGl0ZW0pYCBBUEksIHVwZGF0ZXMgdGhlIGBzZWxlY3RlZGAgcHJvcGVydHkKICAgKiB3aGljaCBtYXkgYmUgYm91bmQgdG8gb3RoZXIgcGFydHMgb2YgdGhlIGFwcGxpY2F0aW9uLCBhbmQgYW55IGNoYW5nZXMgdG8KICAgKiBzdWItZmllbGRzIG9mIGBzZWxlY3RlZGAgaXRlbShzKSB3aWxsIGJlIGtlcHQgaW4gc3luYyB3aXRoIGl0ZW1zIGluIHRoZQogICAqIGBpdGVtc2AgYXJyYXkuICBXaGVuIGBtdWx0aWAgaXMgZmFsc2UsIGBzZWxlY3RlZGAgaXMgYSBwcm9wZXJ0eQogICAqIHJlcHJlc2VudGluZyB0aGUgbGFzdCBzZWxlY3RlZCBpdGVtLiAgV2hlbiBgbXVsdGlgIGlzIHRydWUsIGBzZWxlY3RlZGAKICAgKiBpcyBhbiBhcnJheSBvZiBtdWx0aXBseSBzZWxlY3RlZCBpdGVtcy4KICAgKgogICAqIEV4YW1wbGU6CiAgICoKICAgKiBgYGBodG1sCiAgICogPGRvbS1tb2R1bGUgaWQ9ImVtcGxveWVlLWxpc3QiPgogICAqCiAgICogICA8dGVtcGxhdGU+CiAgICoKICAgKiAgICAgPGRpdj4gRW1wbG95ZWUgbGlzdDogPC9kaXY+CiAgICogICAgIDxkb20tcmVwZWF0IGlkPSJlbXBsb3llZUxpc3QiIGl0ZW1zPSJ7e2VtcGxveWVlc319Ij4KICAgKiAgICAgICA8dGVtcGxhdGU+CiAgICogICAgICAgICA8ZGl2PkZpcnN0IG5hbWU6IDxzcGFuPnt7aXRlbS5maXJzdH19PC9zcGFuPjwvZGl2PgogICAqICAgICAgICAgICA8ZGl2Pkxhc3QgbmFtZTogPHNwYW4+e3tpdGVtLmxhc3R9fTwvc3Bhbj48L2Rpdj4KICAgKiAgICAgICAgICAgPGJ1dHRvbiBvbi1jbGljaz0idG9nZ2xlU2VsZWN0aW9uIj5TZWxlY3Q8L2J1dHRvbj4KICAgKiAgICAgICA8L3RlbXBsYXRlPgogICAqICAgICA8L2RvbS1yZXBlYXQ+CiAgICoKICAgKiAgICAgPGFycmF5LXNlbGVjdG9yIGlkPSJzZWxlY3RvciIgaXRlbXM9Int7ZW1wbG95ZWVzfX0iIHNlbGVjdGVkPSJ7e3NlbGVjdGVkfX0iIG11bHRpIHRvZ2dsZT48L2FycmF5LXNlbGVjdG9yPgogICAqCiAgICogICAgIDxkaXY+IFNlbGVjdGVkIGVtcGxveWVlczogPC9kaXY+CiAgICogICAgIDxkb20tcmVwZWF0IGl0ZW1zPSJ7e3NlbGVjdGVkfX0iPgogICAqICAgICAgIDx0ZW1wbGF0ZT4KICAgKiAgICAgICAgIDxkaXY+Rmlyc3QgbmFtZTogPHNwYW4+e3tpdGVtLmZpcnN0fX08L3NwYW4+PC9kaXY+CiAgICogICAgICAgICA8ZGl2Pkxhc3QgbmFtZTogPHNwYW4+e3tpdGVtLmxhc3R9fTwvc3Bhbj48L2Rpdj4KICAgKiAgICAgICA8L3RlbXBsYXRlPgogICAqICAgICA8L2RvbS1yZXBlYXQ+CiAgICoKICAgKiAgIDwvdGVtcGxhdGU+CiAgICoKICAgKiA8L2RvbS1tb2R1bGU+CiAgICogYGBgCiAgICoKICAgKiBgYGBqcwogICAqY2xhc3MgRW1wbG95ZWVMaXN0IGV4dGVuZHMgUG9seW1lci5FbGVtZW50IHsKICAgKiAgc3RhdGljIGdldCBpcygpIHsgcmV0dXJuICdlbXBsb3llZS1saXN0JzsgfQogICAqICBzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKSB7CiAgICogICAgcmV0dXJuIHsKICAgKiAgICAgIGVtcGxveWVlczogewogICAqICAgICAgICB2YWx1ZSgpIHsKICAgKiAgICAgICAgICByZXR1cm4gWwogICAqICAgICAgICAgICAge2ZpcnN0OiAnQm9iJywgbGFzdDogJ1NtaXRoJ30sCiAgICogICAgICAgICAgICB7Zmlyc3Q6ICdTYWxseScsIGxhc3Q6ICdKb2huc29uJ30sCiAgICogICAgICAgICAgICAuLi4KICAgKiAgICAgICAgICBdOwogICAqICAgICAgICB9CiAgICogICAgICB9CiAgICogICAgfTsKICAgKiAgfQogICAqICB0b2dnbGVTZWxlY3Rpb24oZSkgewogICAqICAgIGxldCBpdGVtID0gdGhpcy4kLmVtcGxveWVlTGlzdC5pdGVtRm9yRWxlbWVudChlLnRhcmdldCk7CiAgICogICAgdGhpcy4kLnNlbGVjdG9yLnNlbGVjdChpdGVtKTsKICAgKiAgfQogICAqfQogICAqIGBgYAogICAqCiAgICogQHBvbHltZXIKICAgKiBAY3VzdG9tRWxlbWVudAogICAqIEBleHRlbmRzIHtiYXNlQXJyYXlTZWxlY3Rvcn0KICAgKiBAYXBwbGllc01peGluIFBvbHltZXIuQXJyYXlTZWxlY3Rvck1peGluCiAgICogQG1lbWJlcm9mIFBvbHltZXIKICAgKiBAc3VtbWFyeSBDdXN0b20gZWxlbWVudCB0aGF0IGxpbmtzIHBhdGhzIGJldHdlZW4gYW4gaW5wdXQgYGl0ZW1zYCBhcnJheSBhbmQKICAgKiAgIGFuIG91dHB1dCBgc2VsZWN0ZWRgIGl0ZW0gb3IgYXJyYXkgYmFzZWQgb24gY2FsbHMgdG8gaXRzIHNlbGVjdGlvbiBBUEkuCiAgICovCiAgY2xhc3MgQXJyYXlTZWxlY3RvciBleHRlbmRzIGJhc2VBcnJheVNlbGVjdG9yIHsKICAgIC8vIE5vdCBuZWVkZWQgdG8gZmluZCB0ZW1wbGF0ZTsgY2FuIGJlIHJlbW92ZWQgb25jZSB0aGUgYW5hbHl6ZXIKICAgIC8vIGNhbiBmaW5kIHRoZSB0YWcgbmFtZSBmcm9tIGN1c3RvbUVsZW1lbnRzLmRlZmluZSBjYWxsCiAgICBzdGF0aWMgZ2V0IGlzKCkgeyByZXR1cm4gJ2FycmF5LXNlbGVjdG9yJzsgfQogIH0KICBjdXN0b21FbGVtZW50cy5kZWZpbmUoQXJyYXlTZWxlY3Rvci5pcywgQXJyYXlTZWxlY3Rvcik7CgogIC8qKiBAY29uc3QgKi8KICBQb2x5bWVyLkFycmF5U2VsZWN0b3IgPSBBcnJheVNlbGVjdG9yOwoKfSkoKTsKCjwvc2NyaXB0PjxzY3JpcHQ+KGZ1bmN0aW9uKCl7LyoKCkNvcHlyaWdodCAoYykgMjAxNyBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuClRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQKVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQKVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0CkNvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvCnN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiovCid1c2Ugc3RyaWN0Jzt2YXIgYz1udWxsLGY9d2luZG93LkhUTUxJbXBvcnRzJiZ3aW5kb3cuSFRNTEltcG9ydHMud2hlblJlYWR5fHxudWxsLGc7ZnVuY3Rpb24gaChhKXtyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24oKXtmP2YoYSk6KGN8fChjPW5ldyBQcm9taXNlKGZ1bmN0aW9uKGEpe2c9YX0pLCJjb21wbGV0ZSI9PT1kb2N1bWVudC5yZWFkeVN0YXRlP2coKTpkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJyZWFkeXN0YXRlY2hhbmdlIixmdW5jdGlvbigpeyJjb21wbGV0ZSI9PT1kb2N1bWVudC5yZWFkeVN0YXRlJiZnKCl9KSksYy50aGVuKGZ1bmN0aW9uKCl7YSYmYSgpfSkpfSl9O3ZhciBrPW51bGwsbD1udWxsO2Z1bmN0aW9uIG0oKXt0aGlzLmN1c3RvbVN0eWxlcz1bXTt0aGlzLmVucXVldWVkPSExO2goZnVuY3Rpb24oKXt3aW5kb3cuU2hhZHlDU1MuZmx1c2hDdXN0b21TdHlsZXMmJndpbmRvdy5TaGFkeUNTUy5mbHVzaEN1c3RvbVN0eWxlcygpfSl9ZnVuY3Rpb24gbihhKXshYS5lbnF1ZXVlZCYmbCYmKGEuZW5xdWV1ZWQ9ITAsaChsKSl9bS5wcm90b3R5cGUuYz1mdW5jdGlvbihhKXthLl9fc2VlbkJ5U2hhZHlDU1N8fChhLl9fc2VlbkJ5U2hhZHlDU1M9ITAsdGhpcy5jdXN0b21TdHlsZXMucHVzaChhKSxuKHRoaXMpKX07bS5wcm90b3R5cGUuYj1mdW5jdGlvbihhKXtpZihhLl9fc2hhZHlDU1NDYWNoZWRTdHlsZSlyZXR1cm4gYS5fX3NoYWR5Q1NTQ2FjaGVkU3R5bGU7dmFyIGI7YS5nZXRTdHlsZT9iPWEuZ2V0U3R5bGUoKTpiPWE7cmV0dXJuIGJ9OwptLnByb3RvdHlwZS5hPWZ1bmN0aW9uKCl7Zm9yKHZhciBhPXRoaXMuY3VzdG9tU3R5bGVzLGI9MDtiPGEubGVuZ3RoO2IrKyl7dmFyIGQ9YVtiXTtpZighZC5fX3NoYWR5Q1NTQ2FjaGVkU3R5bGUpe3ZhciBlPXRoaXMuYihkKTtlJiYoZT1lLl9fYXBwbGllZEVsZW1lbnR8fGUsayYmayhlKSxkLl9fc2hhZHlDU1NDYWNoZWRTdHlsZT1lKX19cmV0dXJuIGF9O20ucHJvdG90eXBlLmFkZEN1c3RvbVN0eWxlPW0ucHJvdG90eXBlLmM7bS5wcm90b3R5cGUuZ2V0U3R5bGVGb3JDdXN0b21TdHlsZT1tLnByb3RvdHlwZS5iO20ucHJvdG90eXBlLnByb2Nlc3NTdHlsZXM9bS5wcm90b3R5cGUuYTsKT2JqZWN0LmRlZmluZVByb3BlcnRpZXMobS5wcm90b3R5cGUse3RyYW5zZm9ybUNhbGxiYWNrOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4ga30sc2V0OmZ1bmN0aW9uKGEpe2s9YX19LHZhbGlkYXRlQ2FsbGJhY2s6e2dldDpmdW5jdGlvbigpe3JldHVybiBsfSxzZXQ6ZnVuY3Rpb24oYSl7dmFyIGI9ITE7bHx8KGI9ITApO2w9YTtiJiZuKHRoaXMpfX19KTtmdW5jdGlvbiBwKGEsYil7Zm9yKHZhciBkIGluIGIpbnVsbD09PWQ/YS5zdHlsZS5yZW1vdmVQcm9wZXJ0eShkKTphLnN0eWxlLnNldFByb3BlcnR5KGQsYltkXSl9O3ZhciBxPSEod2luZG93LlNoYWR5RE9NJiZ3aW5kb3cuU2hhZHlET00uaW5Vc2UpLHI7ZnVuY3Rpb24gdChhKXtyPWEmJmEuc2hpbWNzc3Byb3BlcnRpZXM/ITE6cXx8IShuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9BcHBsZVdlYktpdFwvNjAxfEVkZ2VcLzE1Lyl8fCF3aW5kb3cuQ1NTfHwhQ1NTLnN1cHBvcnRzfHwhQ1NTLnN1cHBvcnRzKCJib3gtc2hhZG93IiwiMCAwIDAgdmFyKC0tZm9vKSIpKX12YXIgdTt3aW5kb3cuU2hhZHlDU1MmJnZvaWQgMCE9PXdpbmRvdy5TaGFkeUNTUy5jc3NCdWlsZCYmKHU9d2luZG93LlNoYWR5Q1NTLmNzc0J1aWxkKTt2YXIgdj0hKCF3aW5kb3cuU2hhZHlDU1N8fCF3aW5kb3cuU2hhZHlDU1MuZGlzYWJsZVJ1bnRpbWUpOwp3aW5kb3cuU2hhZHlDU1MmJnZvaWQgMCE9PXdpbmRvdy5TaGFkeUNTUy5uYXRpdmVDc3M/cj13aW5kb3cuU2hhZHlDU1MubmF0aXZlQ3NzOndpbmRvdy5TaGFkeUNTUz8odCh3aW5kb3cuU2hhZHlDU1MpLHdpbmRvdy5TaGFkeUNTUz12b2lkIDApOnQod2luZG93LldlYkNvbXBvbmVudHMmJndpbmRvdy5XZWJDb21wb25lbnRzLmZsYWdzKTt2YXIgdz1yLHg9dTt2YXIgeT1uZXcgbTt3aW5kb3cuU2hhZHlDU1N8fCh3aW5kb3cuU2hhZHlDU1M9e3ByZXBhcmVUZW1wbGF0ZTpmdW5jdGlvbigpe30scHJlcGFyZVRlbXBsYXRlRG9tOmZ1bmN0aW9uKCl7fSxwcmVwYXJlVGVtcGxhdGVTdHlsZXM6ZnVuY3Rpb24oKXt9LHN0eWxlU3VidHJlZTpmdW5jdGlvbihhLGIpe3kuYSgpO3AoYSxiKX0sc3R5bGVFbGVtZW50OmZ1bmN0aW9uKCl7eS5hKCl9LHN0eWxlRG9jdW1lbnQ6ZnVuY3Rpb24oYSl7eS5hKCk7cChkb2N1bWVudC5ib2R5LGEpfSxnZXRDb21wdXRlZFN0eWxlVmFsdWU6ZnVuY3Rpb24oYSxiKXtyZXR1cm4oYT13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShhKS5nZXRQcm9wZXJ0eVZhbHVlKGIpKT9hLnRyaW0oKToiIn0sZmx1c2hDdXN0b21TdHlsZXM6ZnVuY3Rpb24oKXt9LG5hdGl2ZUNzczp3LG5hdGl2ZVNoYWRvdzpxLGNzc0J1aWxkOngsZGlzYWJsZVJ1bnRpbWU6dn0pO3dpbmRvdy5TaGFkeUNTUy5DdXN0b21TdHlsZUludGVyZmFjZT15O30pLmNhbGwodGhpcyk7CgoKPC9zY3JpcHQ+PHNjcmlwdD4KKGZ1bmN0aW9uKCkgewogICd1c2Ugc3RyaWN0JzsKCiAgY29uc3QgYXR0ciA9ICdpbmNsdWRlJzsKCiAgY29uc3QgQ3VzdG9tU3R5bGVJbnRlcmZhY2UgPSB3aW5kb3cuU2hhZHlDU1MuQ3VzdG9tU3R5bGVJbnRlcmZhY2U7CgogIC8qKgogICAqIEN1c3RvbSBlbGVtZW50IGZvciBkZWZpbmluZyBzdHlsZXMgaW4gdGhlIG1haW4gZG9jdW1lbnQgdGhhdCBjYW4gdGFrZQogICAqIGFkdmFudGFnZSBvZiBbc2hhZHkgRE9NXShodHRwczovL2dpdGh1Yi5jb20vd2ViY29tcG9uZW50cy9zaGFkeWNzcykgc2hpbXMKICAgKiBmb3Igc3R5bGUgZW5jYXBzdWxhdGlvbiwgY3VzdG9tIHByb3BlcnRpZXMsIGFuZCBjdXN0b20gbWl4aW5zLgogICAqCiAgICogLSBEb2N1bWVudCBzdHlsZXMgZGVmaW5lZCBpbiBhIGA8Y3VzdG9tLXN0eWxlPmAgYXJlIHNoaW1tZWQgdG8gZW5zdXJlIHRoZXkKICAgKiAgIGRvIG5vdCBsZWFrIGludG8gbG9jYWwgRE9NIHdoZW4gcnVubmluZyBvbiBicm93c2VycyB3aXRob3V0IG5hdGl2ZQogICAqICAgU2hhZG93IERPTS4KICAgKiAtIEN1c3RvbSBwcm9wZXJ0aWVzIGNhbiBiZSBkZWZpbmVkIGluIGEgYDxjdXN0b20tc3R5bGU+YC4gVXNlIHRoZSBgaHRtbGAgc2VsZWN0b3IKICAgKiAgIHRvIGRlZmluZSBjdXN0b20gcHJvcGVydGllcyB0aGF0IGFwcGx5IHRvIGFsbCBjdXN0b20gZWxlbWVudHMuCiAgICogLSBDdXN0b20gbWl4aW5zIGNhbiBiZSBkZWZpbmVkIGluIGEgYDxjdXN0b20tc3R5bGU+YCwgaWYgeW91IGltcG9ydCB0aGUgb3B0aW9uYWwKICAgKiAgIFthcHBseSBzaGltXShodHRwczovL2dpdGh1Yi5jb20vd2ViY29tcG9uZW50cy9zaGFkeWNzcyNhYm91dC1hcHBseXNoaW0pCiAgICogICAoYHNoYWR5Y3NzL2FwcGx5LXNoaW0uaHRtbGApLgogICAqCiAgICogVG8gdXNlOgogICAqCiAgICogLSBJbXBvcnQgYGN1c3RvbS1zdHlsZS5odG1sYC4KICAgKiAtIFBsYWNlIGEgYDxjdXN0b20tc3R5bGU+YCBlbGVtZW50IGluIHRoZSBtYWluIGRvY3VtZW50LCB3cmFwcGluZyBhbiBpbmxpbmUgYDxzdHlsZT5gIHRhZyB0aGF0CiAgICogICBjb250YWlucyB0aGUgQ1NTIHJ1bGVzIHlvdSB3YW50IHRvIHNoaW0uCiAgICoKICAgKiBGb3IgZXhhbXBsZToKICAgKgogICAqIGBgYGh0bWwKICAgKiA8IS0tIGltcG9ydCBhcHBseSBzaGltLS1vbmx5IHJlcXVpcmVkIGlmIHVzaW5nIG1peGlucyAtLT4KICAgKiA8bGluayByZWw9ImltcG9ydCIgaHJlZj0iYm93ZXJfY29tcG9uZW50cy9zaGFkeWNzcy9hcHBseS1zaGltLmh0bWwiPgogICAqIDwhLS0gaW1wb3J0IGN1c3RvbS1zdHlsZSBlbGVtZW50IC0tPgogICAqIDxsaW5rIHJlbD0iaW1wb3J0IiBocmVmPSJib3dlcl9jb21wb25lbnRzL3BvbHltZXIvbGliL2VsZW1lbnRzL2N1c3RvbS1zdHlsZS5odG1sIj4KICAgKgogICAqIDxjdXN0b20tc3R5bGU+CiAgICogICA8c3R5bGU+CiAgICogICAgIGh0bWwgewogICAqICAgICAgIC0tY3VzdG9tLWNvbG9yOiBibHVlOwogICAqICAgICAgIC0tY3VzdG9tLW1peGluOiB7CiAgICogICAgICAgICBmb250LXdlaWdodDogYm9sZDsKICAgKiAgICAgICAgIGNvbG9yOiByZWQ7CiAgICogICAgICAgfTsKICAgKiAgICAgfQogICAqICAgPC9zdHlsZT4KICAgKiA8L2N1c3RvbS1zdHlsZT4KICAgKiBgYGAKICAgKgogICAqIEBjdXN0b21FbGVtZW50CiAgICogQGV4dGVuZHMgSFRNTEVsZW1lbnQKICAgKiBAbWVtYmVyb2YgUG9seW1lcgogICAqIEBzdW1tYXJ5IEN1c3RvbSBlbGVtZW50IGZvciBkZWZpbmluZyBzdHlsZXMgaW4gdGhlIG1haW4gZG9jdW1lbnQgdGhhdCBjYW4KICAgKiAgIHRha2UgYWR2YW50YWdlIG9mIFBvbHltZXIncyBzdHlsZSBzY29waW5nIGFuZCBjdXN0b20gcHJvcGVydGllcyBzaGltcy4KICAgKi8KICBjbGFzcyBDdXN0b21TdHlsZSBleHRlbmRzIEhUTUxFbGVtZW50IHsKICAgIGNvbnN0cnVjdG9yKCkgewogICAgICBzdXBlcigpOwogICAgICB0aGlzLl9zdHlsZSA9IG51bGw7CiAgICAgIEN1c3RvbVN0eWxlSW50ZXJmYWNlLmFkZEN1c3RvbVN0eWxlKHRoaXMpOwogICAgfQogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBsaWdodC1ET00gYDxzdHlsZT5gIGNoaWxkIHRoaXMgZWxlbWVudCB3cmFwcy4gIFVwb24gZmlyc3QKICAgICAqIGNhbGwgYW55IHN0eWxlIG1vZHVsZXMgcmVmZXJlbmNlZCB2aWEgdGhlIGBpbmNsdWRlYCBhdHRyaWJ1dGUgd2lsbCBiZQogICAgICogY29uY2F0ZW5hdGVkIHRvIHRoaXMgZWxlbWVudCdzIGA8c3R5bGU+YC4KICAgICAqCiAgICAgKiBAcmV0dXJuIHtIVE1MU3R5bGVFbGVtZW50fSBUaGlzIGVsZW1lbnQncyBsaWdodC1ET00gYDxzdHlsZT5gCiAgICAgKi8KICAgIGdldFN0eWxlKCkgewogICAgICBpZiAodGhpcy5fc3R5bGUpIHsKICAgICAgICByZXR1cm4gdGhpcy5fc3R5bGU7CiAgICAgIH0KICAgICAgY29uc3Qgc3R5bGUgPSAvKiogQHR5cGUge0hUTUxTdHlsZUVsZW1lbnR9ICovKHRoaXMucXVlcnlTZWxlY3Rvcignc3R5bGUnKSk7CiAgICAgIGlmICghc3R5bGUpIHsKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfQogICAgICB0aGlzLl9zdHlsZSA9IHN0eWxlOwogICAgICBjb25zdCBpbmNsdWRlID0gc3R5bGUuZ2V0QXR0cmlidXRlKGF0dHIpOwogICAgICBpZiAoaW5jbHVkZSkgewogICAgICAgIHN0eWxlLnJlbW92ZUF0dHJpYnV0ZShhdHRyKTsKICAgICAgICBzdHlsZS50ZXh0Q29udGVudCA9IFBvbHltZXIuU3R5bGVHYXRoZXIuY3NzRnJvbU1vZHVsZXMoaW5jbHVkZSkgKyBzdHlsZS50ZXh0Q29udGVudDsKICAgICAgfQogICAgICAvKgogICAgICBIVE1MIEltcG9ydHMgc3R5bGluZyB0aGUgbWFpbiBkb2N1bWVudCBhcmUgZGVwcmVjYXRlZCBpbiBDaHJvbWUKICAgICAgaHR0cHM6Ly9jcmJ1Zy5jb20vNTIzOTUyCgogICAgICBJZiB0aGlzIGVsZW1lbnQgaXMgbm90IGluIHRoZSBtYWluIGRvY3VtZW50LCB0aGVuIGl0IG11c3QgYmUgaW4gYW4gSFRNTCBJbXBvcnQgZG9jdW1lbnQuCiAgICAgIEluIHRoYXQgY2FzZSwgbW92ZSB0aGUgY3VzdG9tIHN0eWxlIHRvIHRoZSBtYWluIGRvY3VtZW50LgoKICAgICAgVGhlIG9yZGVyaW5nIG9mIGA8Y3VzdG9tLXN0eWxlPmAgc2hvdWxkIHN0YXkgdGhlIHNhbWUgYXMgd2hlbiBsb2FkZWQgYnkgSFRNTCBJbXBvcnRzLCBidXQgdGhlcmUgbWF5IGJlIG9kZAogICAgICBjYXNlcyBvZiBvcmRlcmluZyB3LnIudCB0aGUgbWFpbiBkb2N1bWVudCBzdHlsZXMuCiAgICAgICovCiAgICAgIGlmICh0aGlzLm93bmVyRG9jdW1lbnQgIT09IHdpbmRvdy5kb2N1bWVudCkgewogICAgICAgIHdpbmRvdy5kb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHRoaXMpOwogICAgICB9CiAgICAgIHJldHVybiB0aGlzLl9zdHlsZTsKICAgIH0KICB9CgogIHdpbmRvdy5jdXN0b21FbGVtZW50cy5kZWZpbmUoJ2N1c3RvbS1zdHlsZScsIEN1c3RvbVN0eWxlKTsKCiAgLyoqIEBjb25zdCAqLwogIFBvbHltZXIuQ3VzdG9tU3R5bGUgPSBDdXN0b21TdHlsZTsKfSkoKTsKPC9zY3JpcHQ+PHNjcmlwdD4KKGZ1bmN0aW9uKCkgewogICd1c2Ugc3RyaWN0JzsKCiAgbGV0IG11dGFibGVQcm9wZXJ0eUNoYW5nZTsKICAvKiogQHN1cHByZXNzIHttaXNzaW5nUHJvcGVydGllc30gKi8KICAoKCkgPT4gewogICAgbXV0YWJsZVByb3BlcnR5Q2hhbmdlID0gUG9seW1lci5NdXRhYmxlRGF0YS5fbXV0YWJsZVByb3BlcnR5Q2hhbmdlOwogIH0pKCk7CgogIC8qKgogICAqIExlZ2FjeSBlbGVtZW50IGJlaGF2aW9yIHRvIHNraXAgc3RyaWN0IGRpcnR5LWNoZWNraW5nIGZvciBvYmplY3RzIGFuZCBhcnJheXMsCiAgICogKGFsd2F5cyBjb25zaWRlciB0aGVtIHRvIGJlICJkaXJ0eSIpIGZvciB1c2Ugb24gbGVnYWN5IEFQSSBQb2x5bWVyIGVsZW1lbnRzLgogICAqCiAgICogQnkgZGVmYXVsdCwgYFBvbHltZXIuUHJvcGVydHlFZmZlY3RzYCBwZXJmb3JtcyBzdHJpY3QgZGlydHkgY2hlY2tpbmcgb24KICAgKiBvYmplY3RzLCB3aGljaCBtZWFucyB0aGF0IGFueSBkZWVwIG1vZGlmaWNhdGlvbnMgdG8gYW4gb2JqZWN0IG9yIGFycmF5IHdpbGwKICAgKiBub3QgYmUgcHJvcGFnYXRlZCB1bmxlc3MgImltbXV0YWJsZSIgZGF0YSBwYXR0ZXJucyBhcmUgdXNlZCAoaS5lLiBhbGwgb2JqZWN0CiAgICogcmVmZXJlbmNlcyBmcm9tIHRoZSByb290IHRvIHRoZSBtdXRhdGlvbiB3ZXJlIGNoYW5nZWQpLgogICAqCiAgICogUG9seW1lciBhbHNvIHByb3ZpZGVzIGEgcHJvcHJpZXRhcnkgZGF0YSBtdXRhdGlvbiBhbmQgcGF0aCBub3RpZmljYXRpb24gQVBJCiAgICogKGUuZy4gYG5vdGlmeVBhdGhgLCBgc2V0YCwgYW5kIGFycmF5IG11dGF0aW9uIEFQSSdzKSB0aGF0IGFsbG93IGVmZmljaWVudAogICAqIG11dGF0aW9uIGFuZCBub3RpZmljYXRpb24gb2YgZGVlcCBjaGFuZ2VzIGluIGFuIG9iamVjdCBncmFwaCB0byBhbGwgZWxlbWVudHMKICAgKiBib3VuZCB0byB0aGUgc2FtZSBvYmplY3QgZ3JhcGguCiAgICoKICAgKiBJbiBjYXNlcyB3aGVyZSBuZWl0aGVyIGltbXV0YWJsZSBwYXR0ZXJucyBub3IgdGhlIGRhdGEgbXV0YXRpb24gQVBJIGNhbiBiZQogICAqIHVzZWQsIGFwcGx5aW5nIHRoaXMgbWl4aW4gd2lsbCBjYXVzZSBQb2x5bWVyIHRvIHNraXAgZGlydHkgY2hlY2tpbmcgZm9yCiAgICogb2JqZWN0cyBhbmQgYXJyYXlzIChhbHdheXMgY29uc2lkZXIgdGhlbSB0byBiZSAiZGlydHkiKS4gIFRoaXMgYWxsb3dzIGEKICAgKiB1c2VyIHRvIG1ha2UgYSBkZWVwIG1vZGlmaWNhdGlvbiB0byBhIGJvdW5kIG9iamVjdCBncmFwaCwgYW5kIHRoZW4gZWl0aGVyCiAgICogc2ltcGx5IHJlLXNldCB0aGUgb2JqZWN0IChlLmcuIGB0aGlzLml0ZW1zID0gdGhpcy5pdGVtc2ApIG9yIGNhbGwgYG5vdGlmeVBhdGhgCiAgICogKGUuZy4gYHRoaXMubm90aWZ5UGF0aCgnaXRlbXMnKWApIHRvIHVwZGF0ZSB0aGUgdHJlZS4gIE5vdGUgdGhhdCBhbGwKICAgKiBlbGVtZW50cyB0aGF0IHdpc2ggdG8gYmUgdXBkYXRlZCBiYXNlZCBvbiBkZWVwIG11dGF0aW9ucyBtdXN0IGFwcGx5IHRoaXMKICAgKiBtaXhpbiBvciBvdGhlcndpc2Ugc2tpcCBzdHJpY3QgZGlydHkgY2hlY2tpbmcgZm9yIG9iamVjdHMvYXJyYXlzLgogICAqIFNwZWNpZmljYWxseSwgYW55IGVsZW1lbnRzIGluIHRoZSBiaW5kaW5nIHRyZWUgYmV0d2VlbiB0aGUgc291cmNlIG9mIGEKICAgKiBtdXRhdGlvbiBhbmQgdGhlIGNvbnN1bXB0aW9uIG9mIGl0IG11c3QgYXBwbHkgdGhpcyBiZWhhdmlvciBvciBlbmFibGUgdGhlCiAgICogYFBvbHltZXIuT3B0aW9uYWxNdXRhYmxlRGF0YUJlaGF2aW9yYC4KICAgKgogICAqIEluIG9yZGVyIHRvIG1ha2UgdGhlIGRpcnR5IGNoZWNrIHN0cmF0ZWd5IGNvbmZpZ3VyYWJsZSwgc2VlCiAgICogYFBvbHltZXIuT3B0aW9uYWxNdXRhYmxlRGF0YUJlaGF2aW9yYC4KICAgKgogICAqIE5vdGUsIHRoZSBwZXJmb3JtYW5jZSBjaGFyYWN0ZXJpc3RpY3Mgb2YgcHJvcGFnYXRpbmcgbGFyZ2Ugb2JqZWN0IGdyYXBocwogICAqIHdpbGwgYmUgd29yc2UgYXMgb3Bwb3NlZCB0byB1c2luZyBzdHJpY3QgZGlydHkgY2hlY2tpbmcgd2l0aCBpbW11dGFibGUKICAgKiBwYXR0ZXJucyBvciBQb2x5bWVyJ3MgcGF0aCBub3RpZmljYXRpb24gQVBJLgogICAqCiAgICogQHBvbHltZXJCZWhhdmlvcgogICAqIEBtZW1iZXJvZiBQb2x5bWVyCiAgICogQHN1bW1hcnkgQmVoYXZpb3IgdG8gc2tpcCBzdHJpY3QgZGlydHktY2hlY2tpbmcgZm9yIG9iamVjdHMgYW5kCiAgICogICBhcnJheXMKICAgKi8KICBQb2x5bWVyLk11dGFibGVEYXRhQmVoYXZpb3IgPSB7CgogICAgLyoqCiAgICAgKiBPdmVycmlkZXMgYFBvbHltZXIuUHJvcGVydHlFZmZlY3RzYCB0byBwcm92aWRlIG9wdGlvbiBmb3Igc2tpcHBpbmcKICAgICAqIHN0cmljdCBlcXVhbGl0eSBjaGVja2luZyBmb3IgT2JqZWN0cyBhbmQgQXJyYXlzLgogICAgICoKICAgICAqIFRoaXMgbWV0aG9kIHB1bGxzIHRoZSB2YWx1ZSB0byBkaXJ0eSBjaGVjayBhZ2FpbnN0IGZyb20gdGhlIGBfX2RhdGFUZW1wYAogICAgICogY2FjaGUgKHJhdGhlciB0aGFuIHRoZSBub3JtYWwgYF9fZGF0YWAgY2FjaGUpIGZvciBPYmplY3RzLiAgU2luY2UgdGhlIHRlbXAKICAgICAqIGNhY2hlIGlzIGNsZWFyZWQgYXQgdGhlIGVuZCBvZiBhIHR1cm4sIHRoaXMgaW1wbGVtZW50YXRpb24gYWxsb3dzCiAgICAgKiBzaWRlLWVmZmVjdHMgb2YgZGVlcCBvYmplY3QgY2hhbmdlcyB0byBiZSBwcm9jZXNzZWQgYnkgcmUtc2V0dGluZyB0aGUKICAgICAqIHNhbWUgb2JqZWN0ICh1c2luZyB0aGUgdGVtcCBjYWNoZSBhcyBhbiBpbi10dXJuIGJhY2tzdG9wIHRvIHByZXZlbnQKICAgICAqIGN5Y2xlcyBkdWUgdG8gMi13YXkgbm90aWZpY2F0aW9uKS4KICAgICAqCiAgICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkgUHJvcGVydHkgbmFtZQogICAgICogQHBhcmFtIHsqfSB2YWx1ZSBOZXcgcHJvcGVydHkgdmFsdWUKICAgICAqIEBwYXJhbSB7Kn0gb2xkIFByZXZpb3VzIHByb3BlcnR5IHZhbHVlCiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSBwcm9wZXJ0eSBzaG91bGQgYmUgY29uc2lkZXJlZCBhIGNoYW5nZQogICAgICogQHByb3RlY3RlZAogICAgICovCiAgICBfc2hvdWxkUHJvcGVydHlDaGFuZ2UocHJvcGVydHksIHZhbHVlLCBvbGQpIHsKICAgICAgcmV0dXJuIG11dGFibGVQcm9wZXJ0eUNoYW5nZSh0aGlzLCBwcm9wZXJ0eSwgdmFsdWUsIG9sZCwgdHJ1ZSk7CiAgICB9CiAgfTsKCiAgLyoqCiAgICogTGVnYWN5IGVsZW1lbnQgYmVoYXZpb3IgdG8gYWRkIHRoZSBvcHRpb25hbCBhYmlsaXR5IHRvIHNraXAgc3RyaWN0CiAgICogZGlydHktY2hlY2tpbmcgZm9yIG9iamVjdHMgYW5kIGFycmF5cyAoYWx3YXlzIGNvbnNpZGVyIHRoZW0gdG8gYmUKICAgKiAiZGlydHkiKSBieSBzZXR0aW5nIGEgYG11dGFibGUtZGF0YWAgYXR0cmlidXRlIG9uIGFuIGVsZW1lbnQgaW5zdGFuY2UuCiAgICoKICAgKiBCeSBkZWZhdWx0LCBgUG9seW1lci5Qcm9wZXJ0eUVmZmVjdHNgIHBlcmZvcm1zIHN0cmljdCBkaXJ0eSBjaGVja2luZyBvbgogICAqIG9iamVjdHMsIHdoaWNoIG1lYW5zIHRoYXQgYW55IGRlZXAgbW9kaWZpY2F0aW9ucyB0byBhbiBvYmplY3Qgb3IgYXJyYXkgd2lsbAogICAqIG5vdCBiZSBwcm9wYWdhdGVkIHVubGVzcyAiaW1tdXRhYmxlIiBkYXRhIHBhdHRlcm5zIGFyZSB1c2VkIChpLmUuIGFsbCBvYmplY3QKICAgKiByZWZlcmVuY2VzIGZyb20gdGhlIHJvb3QgdG8gdGhlIG11dGF0aW9uIHdlcmUgY2hhbmdlZCkuCiAgICoKICAgKiBQb2x5bWVyIGFsc28gcHJvdmlkZXMgYSBwcm9wcmlldGFyeSBkYXRhIG11dGF0aW9uIGFuZCBwYXRoIG5vdGlmaWNhdGlvbiBBUEkKICAgKiAoZS5nLiBgbm90aWZ5UGF0aGAsIGBzZXRgLCBhbmQgYXJyYXkgbXV0YXRpb24gQVBJJ3MpIHRoYXQgYWxsb3cgZWZmaWNpZW50CiAgICogbXV0YXRpb24gYW5kIG5vdGlmaWNhdGlvbiBvZiBkZWVwIGNoYW5nZXMgaW4gYW4gb2JqZWN0IGdyYXBoIHRvIGFsbCBlbGVtZW50cwogICAqIGJvdW5kIHRvIHRoZSBzYW1lIG9iamVjdCBncmFwaC4KICAgKgogICAqIEluIGNhc2VzIHdoZXJlIG5laXRoZXIgaW1tdXRhYmxlIHBhdHRlcm5zIG5vciB0aGUgZGF0YSBtdXRhdGlvbiBBUEkgY2FuIGJlCiAgICogdXNlZCwgYXBwbHlpbmcgdGhpcyBtaXhpbiB3aWxsIGFsbG93IFBvbHltZXIgdG8gc2tpcCBkaXJ0eSBjaGVja2luZyBmb3IKICAgKiBvYmplY3RzIGFuZCBhcnJheXMgKGFsd2F5cyBjb25zaWRlciB0aGVtIHRvIGJlICJkaXJ0eSIpLiAgVGhpcyBhbGxvd3MgYQogICAqIHVzZXIgdG8gbWFrZSBhIGRlZXAgbW9kaWZpY2F0aW9uIHRvIGEgYm91bmQgb2JqZWN0IGdyYXBoLCBhbmQgdGhlbiBlaXRoZXIKICAgKiBzaW1wbHkgcmUtc2V0IHRoZSBvYmplY3QgKGUuZy4gYHRoaXMuaXRlbXMgPSB0aGlzLml0ZW1zYCkgb3IgY2FsbCBgbm90aWZ5UGF0aGAKICAgKiAoZS5nLiBgdGhpcy5ub3RpZnlQYXRoKCdpdGVtcycpYCkgdG8gdXBkYXRlIHRoZSB0cmVlLiAgTm90ZSB0aGF0IGFsbAogICAqIGVsZW1lbnRzIHRoYXQgd2lzaCB0byBiZSB1cGRhdGVkIGJhc2VkIG9uIGRlZXAgbXV0YXRpb25zIG11c3QgYXBwbHkgdGhpcwogICAqIG1peGluIG9yIG90aGVyd2lzZSBza2lwIHN0cmljdCBkaXJ0eSBjaGVja2luZyBmb3Igb2JqZWN0cy9hcnJheXMuCiAgICogU3BlY2lmaWNhbGx5LCBhbnkgZWxlbWVudHMgaW4gdGhlIGJpbmRpbmcgdHJlZSBiZXR3ZWVuIHRoZSBzb3VyY2Ugb2YgYQogICAqIG11dGF0aW9uIGFuZCB0aGUgY29uc3VtcHRpb24gb2YgaXQgbXVzdCBlbmFibGUgdGhpcyBiZWhhdmlvciBvciBhcHBseSB0aGUKICAgKiBgUG9seW1lci5PcHRpb25hbE11dGFibGVEYXRhQmVoYXZpb3JgLgogICAqCiAgICogV2hpbGUgdGhpcyBiZWhhdmlvciBhZGRzIHRoZSBhYmlsaXR5IHRvIGZvcmdvIE9iamVjdC9BcnJheSBkaXJ0eSBjaGVja2luZywKICAgKiB0aGUgYG11dGFibGVEYXRhYCBmbGFnIGRlZmF1bHRzIHRvIGZhbHNlIGFuZCBtdXN0IGJlIHNldCBvbiB0aGUgaW5zdGFuY2UuCiAgICoKICAgKiBOb3RlLCB0aGUgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzIG9mIHByb3BhZ2F0aW5nIGxhcmdlIG9iamVjdCBncmFwaHMKICAgKiB3aWxsIGJlIHdvcnNlIGJ5IHJlbHlpbmcgb24gYG11dGFibGVEYXRhOiB0cnVlYCBhcyBvcHBvc2VkIHRvIHVzaW5nCiAgICogc3RyaWN0IGRpcnR5IGNoZWNraW5nIHdpdGggaW1tdXRhYmxlIHBhdHRlcm5zIG9yIFBvbHltZXIncyBwYXRoIG5vdGlmaWNhdGlvbgogICAqIEFQSS4KICAgKgogICAqIEBwb2x5bWVyQmVoYXZpb3IKICAgKiBAbWVtYmVyb2YgUG9seW1lcgogICAqIEBzdW1tYXJ5IEJlaGF2aW9yIHRvIG9wdGlvbmFsbHkgc2tpcCBzdHJpY3QgZGlydHktY2hlY2tpbmcgZm9yIG9iamVjdHMgYW5kCiAgICogICBhcnJheXMKICAgKi8KICBQb2x5bWVyLk9wdGlvbmFsTXV0YWJsZURhdGFCZWhhdmlvciA9IHsKCiAgICBwcm9wZXJ0aWVzOiB7CiAgICAgIC8qKgogICAgICAgKiBJbnN0YW5jZS1sZXZlbCBmbGFnIGZvciBjb25maWd1cmluZyB0aGUgZGlydHktY2hlY2tpbmcgc3RyYXRlZ3kKICAgICAgICogZm9yIHRoaXMgZWxlbWVudC4gIFdoZW4gdHJ1ZSwgT2JqZWN0cyBhbmQgQXJyYXlzIHdpbGwgc2tpcCBkaXJ0eQogICAgICAgKiBjaGVja2luZywgb3RoZXJ3aXNlIHN0cmljdCBlcXVhbGl0eSBjaGVja2luZyB3aWxsIGJlIHVzZWQuCiAgICAgICAqLwogICAgICBtdXRhYmxlRGF0YTogQm9vbGVhbgogICAgfSwKCiAgICAvKioKICAgICAqIE92ZXJyaWRlcyBgUG9seW1lci5Qcm9wZXJ0eUVmZmVjdHNgIHRvIHNraXAgc3RyaWN0IGVxdWFsaXR5IGNoZWNraW5nCiAgICAgKiBmb3IgT2JqZWN0cyBhbmQgQXJyYXlzLgogICAgICoKICAgICAqIFB1bGxzIHRoZSB2YWx1ZSB0byBkaXJ0eSBjaGVjayBhZ2FpbnN0IGZyb20gdGhlIGBfX2RhdGFUZW1wYCBjYWNoZQogICAgICogKHJhdGhlciB0aGFuIHRoZSBub3JtYWwgYF9fZGF0YWAgY2FjaGUpIGZvciBPYmplY3RzLiAgU2luY2UgdGhlIHRlbXAKICAgICAqIGNhY2hlIGlzIGNsZWFyZWQgYXQgdGhlIGVuZCBvZiBhIHR1cm4sIHRoaXMgaW1wbGVtZW50YXRpb24gYWxsb3dzCiAgICAgKiBzaWRlLWVmZmVjdHMgb2YgZGVlcCBvYmplY3QgY2hhbmdlcyB0byBiZSBwcm9jZXNzZWQgYnkgcmUtc2V0dGluZyB0aGUKICAgICAqIHNhbWUgb2JqZWN0ICh1c2luZyB0aGUgdGVtcCBjYWNoZSBhcyBhbiBpbi10dXJuIGJhY2tzdG9wIHRvIHByZXZlbnQKICAgICAqIGN5Y2xlcyBkdWUgdG8gMi13YXkgbm90aWZpY2F0aW9uKS4KICAgICAqCiAgICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkgUHJvcGVydHkgbmFtZQogICAgICogQHBhcmFtIHsqfSB2YWx1ZSBOZXcgcHJvcGVydHkgdmFsdWUKICAgICAqIEBwYXJhbSB7Kn0gb2xkIFByZXZpb3VzIHByb3BlcnR5IHZhbHVlCiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSBwcm9wZXJ0eSBzaG91bGQgYmUgY29uc2lkZXJlZCBhIGNoYW5nZQogICAgICogQHRoaXMge3RoaXN9CiAgICAgKiBAcHJvdGVjdGVkCiAgICAgKi8KICAgIF9zaG91bGRQcm9wZXJ0eUNoYW5nZShwcm9wZXJ0eSwgdmFsdWUsIG9sZCkgewogICAgICByZXR1cm4gbXV0YWJsZVByb3BlcnR5Q2hhbmdlKHRoaXMsIHByb3BlcnR5LCB2YWx1ZSwgb2xkLCB0aGlzLm11dGFibGVEYXRhKTsKICAgIH0KICB9OwoKfSkoKTsKCjwvc2NyaXB0PjxzY3JpcHQ+CiAgLy8gYmMKICBQb2x5bWVyLkJhc2UgPSBQb2x5bWVyLkxlZ2FjeUVsZW1lbnRNaXhpbihIVE1MRWxlbWVudCkucHJvdG90eXBlOwoKICAvLyBOT1RFOiB0aGlzIGlzIGhlcmUgZm9yIG1vZHVsaXplciB0byBleHBvcnQgYGh0bWxgIGZvciB0aGUgbW9kdWxlIHZlcnNpb24gb2YgdGhpcyBmaWxlCiAgUG9seW1lci5odG1sID0gUG9seW1lci5odG1sOwo8L3NjcmlwdD48c2NyaXB0Pi8qCgogTG9kYXNoIDxodHRwczovL2xvZGFzaC5jb20vPgogQ29weXJpZ2h0IEpTIEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9ycyA8aHR0cHM6Ly9qcy5mb3VuZGF0aW9uLz4KIFJlbGVhc2VkIHVuZGVyIE1JVCBsaWNlbnNlIDxodHRwczovL2xvZGFzaC5jb20vbGljZW5zZT4KIEJhc2VkIG9uIFVuZGVyc2NvcmUuanMgMS44LjMgPGh0dHA6Ly91bmRlcnNjb3JlanMub3JnL0xJQ0VOU0U+CiBDb3B5cmlnaHQgSmVyZW15IEFzaGtlbmFzLCBEb2N1bWVudENsb3VkIGFuZCBJbnZlc3RpZ2F0aXZlIFJlcG9ydGVycyAmIEVkaXRvcnMKKi8KKGZ1bmN0aW9uKCl7dmFyIHVuZGVmaW5lZDt2YXIgVkVSU0lPTj0iNC4xNy41Ijt2YXIgTEFSR0VfQVJSQVlfU0laRT0yMDA7dmFyIENPUkVfRVJST1JfVEVYVD0iVW5zdXBwb3J0ZWQgY29yZS1qcyB1c2UuIFRyeSBodHRwczovL25wbXMuaW8vc2VhcmNoP3FceDNkcG9ueWZpbGwuIixGVU5DX0VSUk9SX1RFWFQ9IkV4cGVjdGVkIGEgZnVuY3Rpb24iO3ZhciBIQVNIX1VOREVGSU5FRD0iX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyI7dmFyIE1BWF9NRU1PSVpFX1NJWkU9NTAwO3ZhciBQTEFDRUhPTERFUj0iX19sb2Rhc2hfcGxhY2Vob2xkZXJfXyI7dmFyIENMT05FX0RFRVBfRkxBRz0xLENMT05FX0ZMQVRfRkxBRz0yLENMT05FX1NZTUJPTFNfRkxBRz00O3ZhciBDT01QQVJFX1BBUlRJQUxfRkxBRz0xLENPTVBBUkVfVU5PUkRFUkVEX0ZMQUc9Mjt2YXIgV1JBUF9CSU5EX0ZMQUc9MSxXUkFQX0JJTkRfS0VZX0ZMQUc9MixXUkFQX0NVUlJZX0JPVU5EX0ZMQUc9NCxXUkFQX0NVUlJZX0ZMQUc9CjgsV1JBUF9DVVJSWV9SSUdIVF9GTEFHPTE2LFdSQVBfUEFSVElBTF9GTEFHPTMyLFdSQVBfUEFSVElBTF9SSUdIVF9GTEFHPTY0LFdSQVBfQVJZX0ZMQUc9MTI4LFdSQVBfUkVBUkdfRkxBRz0yNTYsV1JBUF9GTElQX0ZMQUc9NTEyO3ZhciBERUZBVUxUX1RSVU5DX0xFTkdUSD0zMCxERUZBVUxUX1RSVU5DX09NSVNTSU9OPSIuLi4iO3ZhciBIT1RfQ09VTlQ9ODAwLEhPVF9TUEFOPTE2O3ZhciBMQVpZX0ZJTFRFUl9GTEFHPTEsTEFaWV9NQVBfRkxBRz0yLExBWllfV0hJTEVfRkxBRz0zO3ZhciBJTkZJTklUWT0xLzAsTUFYX1NBRkVfSU5URUdFUj05MDA3MTk5MjU0NzQwOTkxLE1BWF9JTlRFR0VSPTEuNzk3NjkzMTM0ODYyMzE1N0UzMDgsTkFOPTAvMDt2YXIgTUFYX0FSUkFZX0xFTkdUSD00Mjk0OTY3Mjk1LE1BWF9BUlJBWV9JTkRFWD1NQVhfQVJSQVlfTEVOR1RILTEsSEFMRl9NQVhfQVJSQVlfTEVOR1RIPU1BWF9BUlJBWV9MRU5HVEg+Pj4xO3ZhciB3cmFwRmxhZ3M9W1siYXJ5IiwKV1JBUF9BUllfRkxBR10sWyJiaW5kIixXUkFQX0JJTkRfRkxBR10sWyJiaW5kS2V5IixXUkFQX0JJTkRfS0VZX0ZMQUddLFsiY3VycnkiLFdSQVBfQ1VSUllfRkxBR10sWyJjdXJyeVJpZ2h0IixXUkFQX0NVUlJZX1JJR0hUX0ZMQUddLFsiZmxpcCIsV1JBUF9GTElQX0ZMQUddLFsicGFydGlhbCIsV1JBUF9QQVJUSUFMX0ZMQUddLFsicGFydGlhbFJpZ2h0IixXUkFQX1BBUlRJQUxfUklHSFRfRkxBR10sWyJyZWFyZyIsV1JBUF9SRUFSR19GTEFHXV07dmFyIGFyZ3NUYWc9IltvYmplY3QgQXJndW1lbnRzXSIsYXJyYXlUYWc9IltvYmplY3QgQXJyYXldIixhc3luY1RhZz0iW29iamVjdCBBc3luY0Z1bmN0aW9uXSIsYm9vbFRhZz0iW29iamVjdCBCb29sZWFuXSIsZGF0ZVRhZz0iW29iamVjdCBEYXRlXSIsZG9tRXhjVGFnPSJbb2JqZWN0IERPTUV4Y2VwdGlvbl0iLGVycm9yVGFnPSJbb2JqZWN0IEVycm9yXSIsZnVuY1RhZz0iW29iamVjdCBGdW5jdGlvbl0iLGdlblRhZz0iW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0iLAptYXBUYWc9IltvYmplY3QgTWFwXSIsbnVtYmVyVGFnPSJbb2JqZWN0IE51bWJlcl0iLG51bGxUYWc9IltvYmplY3QgTnVsbF0iLG9iamVjdFRhZz0iW29iamVjdCBPYmplY3RdIixwcm9taXNlVGFnPSJbb2JqZWN0IFByb21pc2VdIixwcm94eVRhZz0iW29iamVjdCBQcm94eV0iLHJlZ2V4cFRhZz0iW29iamVjdCBSZWdFeHBdIixzZXRUYWc9IltvYmplY3QgU2V0XSIsc3RyaW5nVGFnPSJbb2JqZWN0IFN0cmluZ10iLHN5bWJvbFRhZz0iW29iamVjdCBTeW1ib2xdIix1bmRlZmluZWRUYWc9IltvYmplY3QgVW5kZWZpbmVkXSIsd2Vha01hcFRhZz0iW29iamVjdCBXZWFrTWFwXSIsd2Vha1NldFRhZz0iW29iamVjdCBXZWFrU2V0XSI7dmFyIGFycmF5QnVmZmVyVGFnPSJbb2JqZWN0IEFycmF5QnVmZmVyXSIsZGF0YVZpZXdUYWc9IltvYmplY3QgRGF0YVZpZXddIixmbG9hdDMyVGFnPSJbb2JqZWN0IEZsb2F0MzJBcnJheV0iLGZsb2F0NjRUYWc9IltvYmplY3QgRmxvYXQ2NEFycmF5XSIsCmludDhUYWc9IltvYmplY3QgSW50OEFycmF5XSIsaW50MTZUYWc9IltvYmplY3QgSW50MTZBcnJheV0iLGludDMyVGFnPSJbb2JqZWN0IEludDMyQXJyYXldIix1aW50OFRhZz0iW29iamVjdCBVaW50OEFycmF5XSIsdWludDhDbGFtcGVkVGFnPSJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSIsdWludDE2VGFnPSJbb2JqZWN0IFVpbnQxNkFycmF5XSIsdWludDMyVGFnPSJbb2JqZWN0IFVpbnQzMkFycmF5XSI7dmFyIHJlRW1wdHlTdHJpbmdMZWFkaW5nPS9cYl9fcCBcKz0gJyc7L2cscmVFbXB0eVN0cmluZ01pZGRsZT0vXGIoX19wIFwrPSkgJycgXCsvZyxyZUVtcHR5U3RyaW5nVHJhaWxpbmc9LyhfX2VcKC4qP1wpfFxiX190XCkpIFwrXG4nJzsvZzt2YXIgcmVFc2NhcGVkSHRtbD0vJig/OmFtcHxsdHxndHxxdW90fCMzOSk7L2cscmVVbmVzY2FwZWRIdG1sPS9bJjw+IiddL2cscmVIYXNFc2NhcGVkSHRtbD1SZWdFeHAocmVFc2NhcGVkSHRtbC5zb3VyY2UpLHJlSGFzVW5lc2NhcGVkSHRtbD0KUmVnRXhwKHJlVW5lc2NhcGVkSHRtbC5zb3VyY2UpO3ZhciByZUVzY2FwZT0vPCUtKFtcc1xTXSs/KSU+L2cscmVFdmFsdWF0ZT0vPCUoW1xzXFNdKz8pJT4vZyxyZUludGVycG9sYXRlPS88JT0oW1xzXFNdKz8pJT4vZzt2YXIgcmVJc0RlZXBQcm9wPS9cLnxcWyg/OlteW1xdXSp8KFsiJ10pKD86KD8hXDEpW15cXF18XFwuKSo/XDEpXF0vLHJlSXNQbGFpblByb3A9L15cdyokLyxyZVByb3BOYW1lPS9bXi5bXF1dK3xcWyg/OigtP1xkKyg/OlwuXGQrKT8pfChbIiddKSgoPzooPyFcMilbXlxcXXxcXC4pKj8pXDIpXF18KD89KD86XC58XFtcXSkoPzpcLnxcW1xdfCQpKS9nO3ZhciByZVJlZ0V4cENoYXI9L1tcXF4kLiorPygpW1xde318XS9nLHJlSGFzUmVnRXhwQ2hhcj1SZWdFeHAocmVSZWdFeHBDaGFyLnNvdXJjZSk7dmFyIHJlVHJpbT0vXlxzK3xccyskL2cscmVUcmltU3RhcnQ9L15ccysvLHJlVHJpbUVuZD0vXHMrJC87dmFyIHJlV3JhcENvbW1lbnQ9L1x7KD86XG5cL1wqIFxbd3JhcHBlZCB3aXRoIC4rXF0gXCpcLyk/XG4/LywKcmVXcmFwRGV0YWlscz0vXHtcblwvXCogXFt3cmFwcGVkIHdpdGggKC4rKVxdIFwqLyxyZVNwbGl0RGV0YWlscz0vLD8gJiAvO3ZhciByZUFzY2lpV29yZD0vW15ceDAwLVx4MmZceDNhLVx4NDBceDViLVx4NjBceDdiLVx4N2ZdKy9nO3ZhciByZUVzY2FwZUNoYXI9L1xcKFxcKT8vZzt2YXIgcmVFc1RlbXBsYXRlPS9cJFx7KFteXFx9XSooPzpcXC5bXlxcfV0qKSopXH0vZzt2YXIgcmVGbGFncz0vXHcqJC87dmFyIHJlSXNCYWRIZXg9L15bLStdMHhbMC05YS1mXSskL2k7dmFyIHJlSXNCaW5hcnk9L14wYlswMV0rJC9pO3ZhciByZUlzSG9zdEN0b3I9L15cW29iamVjdCAuKz9Db25zdHJ1Y3RvclxdJC87dmFyIHJlSXNPY3RhbD0vXjBvWzAtN10rJC9pO3ZhciByZUlzVWludD0vXig/OjB8WzEtOV1cZCopJC87dmFyIHJlTGF0aW49L1tceGMwLVx4ZDZceGQ4LVx4ZjZceGY4LVx4ZmZcdTAxMDAtXHUwMTdmXS9nO3ZhciByZU5vTWF0Y2g9LygkXikvO3ZhciByZVVuZXNjYXBlZFN0cmluZz0KL1snXG5cclx1MjAyOFx1MjAyOVxcXS9nO3ZhciByc0FzdHJhbFJhbmdlPSJcXHVkODAwLVxcdWRmZmYiLHJzQ29tYm9NYXJrc1JhbmdlPSJcXHUwMzAwLVxcdTAzNmYiLHJlQ29tYm9IYWxmTWFya3NSYW5nZT0iXFx1ZmUyMC1cXHVmZTJmIixyc0NvbWJvU3ltYm9sc1JhbmdlPSJcXHUyMGQwLVxcdTIwZmYiLHJzQ29tYm9SYW5nZT1yc0NvbWJvTWFya3NSYW5nZStyZUNvbWJvSGFsZk1hcmtzUmFuZ2UrcnNDb21ib1N5bWJvbHNSYW5nZSxyc0RpbmdiYXRSYW5nZT0iXFx1MjcwMC1cXHUyN2JmIixyc0xvd2VyUmFuZ2U9ImEtelxceGRmLVxceGY2XFx4ZjgtXFx4ZmYiLHJzTWF0aE9wUmFuZ2U9IlxceGFjXFx4YjFcXHhkN1xceGY3Iixyc05vbkNoYXJSYW5nZT0iXFx4MDAtXFx4MmZcXHgzYS1cXHg0MFxceDViLVxceDYwXFx4N2ItXFx4YmYiLHJzUHVuY3R1YXRpb25SYW5nZT0iXFx1MjAwMC1cXHUyMDZmIixyc1NwYWNlUmFuZ2U9IiBcXHRcXHgwYlxcZlxceGEwXFx1ZmVmZlxcblxcclxcdTIwMjhcXHUyMDI5XFx1MTY4MFxcdTE4MGVcXHUyMDAwXFx1MjAwMVxcdTIwMDJcXHUyMDAzXFx1MjAwNFxcdTIwMDVcXHUyMDA2XFx1MjAwN1xcdTIwMDhcXHUyMDA5XFx1MjAwYVxcdTIwMmZcXHUyMDVmXFx1MzAwMCIsCnJzVXBwZXJSYW5nZT0iQS1aXFx4YzAtXFx4ZDZcXHhkOC1cXHhkZSIscnNWYXJSYW5nZT0iXFx1ZmUwZVxcdWZlMGYiLHJzQnJlYWtSYW5nZT1yc01hdGhPcFJhbmdlK3JzTm9uQ2hhclJhbmdlK3JzUHVuY3R1YXRpb25SYW5nZStyc1NwYWNlUmFuZ2U7dmFyIHJzQXBvcz0iWydcdTIwMTldIixyc0FzdHJhbD0iWyIrcnNBc3RyYWxSYW5nZSsiXSIscnNCcmVhaz0iWyIrcnNCcmVha1JhbmdlKyJdIixyc0NvbWJvPSJbIityc0NvbWJvUmFuZ2UrIl0iLHJzRGlnaXRzPSJcXGQrIixyc0RpbmdiYXQ9IlsiK3JzRGluZ2JhdFJhbmdlKyJdIixyc0xvd2VyPSJbIityc0xvd2VyUmFuZ2UrIl0iLHJzTWlzYz0iW14iK3JzQXN0cmFsUmFuZ2UrcnNCcmVha1JhbmdlK3JzRGlnaXRzK3JzRGluZ2JhdFJhbmdlK3JzTG93ZXJSYW5nZStyc1VwcGVyUmFuZ2UrIl0iLHJzRml0ej0iXFx1ZDgzY1tcXHVkZmZiLVxcdWRmZmZdIixyc01vZGlmaWVyPSIoPzoiK3JzQ29tYm8rInwiK3JzRml0eisiKSIscnNOb25Bc3RyYWw9CiJbXiIrcnNBc3RyYWxSYW5nZSsiXSIscnNSZWdpb25hbD0iKD86XFx1ZDgzY1tcXHVkZGU2LVxcdWRkZmZdKXsyfSIscnNTdXJyUGFpcj0iW1xcdWQ4MDAtXFx1ZGJmZl1bXFx1ZGMwMC1cXHVkZmZmXSIscnNVcHBlcj0iWyIrcnNVcHBlclJhbmdlKyJdIixyc1pXSj0iXFx1MjAwZCI7dmFyIHJzTWlzY0xvd2VyPSIoPzoiK3JzTG93ZXIrInwiK3JzTWlzYysiKSIscnNNaXNjVXBwZXI9Iig/OiIrcnNVcHBlcisifCIrcnNNaXNjKyIpIixyc09wdENvbnRyTG93ZXI9Iig/OiIrcnNBcG9zKyIoPzpkfGxsfG18cmV8c3x0fHZlKSk/Iixyc09wdENvbnRyVXBwZXI9Iig/OiIrcnNBcG9zKyIoPzpEfExMfE18UkV8U3xUfFZFKSk/IixyZU9wdE1vZD1yc01vZGlmaWVyKyI/Iixyc09wdFZhcj0iWyIrcnNWYXJSYW5nZSsiXT8iLHJzT3B0Sm9pbj0iKD86Iityc1pXSisiKD86IitbcnNOb25Bc3RyYWwscnNSZWdpb25hbCxyc1N1cnJQYWlyXS5qb2luKCJ8IikrIikiK3JzT3B0VmFyK3JlT3B0TW9kKwoiKSoiLHJzT3JkTG93ZXI9IlxcZCooPzoxc3R8Mm5kfDNyZHwoPyFbMTIzXSlcXGR0aCkoP1x4M2RcXGJ8W0EtWl9dKSIscnNPcmRVcHBlcj0iXFxkKig/OjFTVHwyTkR8M1JEfCg/IVsxMjNdKVxcZFRIKSg/XHgzZFxcYnxbYS16X10pIixyc1NlcT1yc09wdFZhcityZU9wdE1vZCtyc09wdEpvaW4scnNFbW9qaT0iKD86IitbcnNEaW5nYmF0LHJzUmVnaW9uYWwscnNTdXJyUGFpcl0uam9pbigifCIpKyIpIityc1NlcSxyc1N5bWJvbD0iKD86IitbcnNOb25Bc3RyYWwrcnNDb21ibysiPyIscnNDb21ibyxyc1JlZ2lvbmFsLHJzU3VyclBhaXIscnNBc3RyYWxdLmpvaW4oInwiKSsiKSI7dmFyIHJlQXBvcz1SZWdFeHAocnNBcG9zLCJnIik7dmFyIHJlQ29tYm9NYXJrPVJlZ0V4cChyc0NvbWJvLCJnIik7dmFyIHJlVW5pY29kZT1SZWdFeHAocnNGaXR6KyIoP1x4M2QiK3JzRml0eisiKXwiK3JzU3ltYm9sK3JzU2VxLCJnIik7dmFyIHJlVW5pY29kZVdvcmQ9UmVnRXhwKFtyc1VwcGVyKyI/IisKcnNMb3dlcisiKyIrcnNPcHRDb250ckxvd2VyKyIoP1x4M2QiK1tyc0JyZWFrLHJzVXBwZXIsIiQiXS5qb2luKCJ8IikrIikiLHJzTWlzY1VwcGVyKyIrIityc09wdENvbnRyVXBwZXIrIig/XHgzZCIrW3JzQnJlYWsscnNVcHBlcityc01pc2NMb3dlciwiJCJdLmpvaW4oInwiKSsiKSIscnNVcHBlcisiPyIrcnNNaXNjTG93ZXIrIisiK3JzT3B0Q29udHJMb3dlcixyc1VwcGVyKyIrIityc09wdENvbnRyVXBwZXIscnNPcmRVcHBlcixyc09yZExvd2VyLHJzRGlnaXRzLHJzRW1vamldLmpvaW4oInwiKSwiZyIpO3ZhciByZUhhc1VuaWNvZGU9UmVnRXhwKCJbIityc1pXSityc0FzdHJhbFJhbmdlK3JzQ29tYm9SYW5nZStyc1ZhclJhbmdlKyJdIik7dmFyIHJlSGFzVW5pY29kZVdvcmQ9L1thLXpdW0EtWl18W0EtWl17Mix9W2Etel18WzAtOV1bYS16QS1aXXxbYS16QS1aXVswLTldfFteYS16QS1aMC05IF0vO3ZhciBjb250ZXh0UHJvcHM9WyJBcnJheSIsIkJ1ZmZlciIsIkRhdGFWaWV3IiwKIkRhdGUiLCJFcnJvciIsIkZsb2F0MzJBcnJheSIsIkZsb2F0NjRBcnJheSIsIkZ1bmN0aW9uIiwiSW50OEFycmF5IiwiSW50MTZBcnJheSIsIkludDMyQXJyYXkiLCJNYXAiLCJNYXRoIiwiT2JqZWN0IiwiUHJvbWlzZSIsIlJlZ0V4cCIsIlNldCIsIlN0cmluZyIsIlN5bWJvbCIsIlR5cGVFcnJvciIsIlVpbnQ4QXJyYXkiLCJVaW50OENsYW1wZWRBcnJheSIsIlVpbnQxNkFycmF5IiwiVWludDMyQXJyYXkiLCJXZWFrTWFwIiwiXyIsImNsZWFyVGltZW91dCIsImlzRmluaXRlIiwicGFyc2VJbnQiLCJzZXRUaW1lb3V0Il07dmFyIHRlbXBsYXRlQ291bnRlcj0tMTt2YXIgdHlwZWRBcnJheVRhZ3M9e307dHlwZWRBcnJheVRhZ3NbZmxvYXQzMlRhZ109dHlwZWRBcnJheVRhZ3NbZmxvYXQ2NFRhZ109dHlwZWRBcnJheVRhZ3NbaW50OFRhZ109dHlwZWRBcnJheVRhZ3NbaW50MTZUYWddPXR5cGVkQXJyYXlUYWdzW2ludDMyVGFnXT10eXBlZEFycmF5VGFnc1t1aW50OFRhZ109dHlwZWRBcnJheVRhZ3NbdWludDhDbGFtcGVkVGFnXT0KdHlwZWRBcnJheVRhZ3NbdWludDE2VGFnXT10eXBlZEFycmF5VGFnc1t1aW50MzJUYWddPXRydWU7dHlwZWRBcnJheVRhZ3NbYXJnc1RhZ109dHlwZWRBcnJheVRhZ3NbYXJyYXlUYWddPXR5cGVkQXJyYXlUYWdzW2FycmF5QnVmZmVyVGFnXT10eXBlZEFycmF5VGFnc1tib29sVGFnXT10eXBlZEFycmF5VGFnc1tkYXRhVmlld1RhZ109dHlwZWRBcnJheVRhZ3NbZGF0ZVRhZ109dHlwZWRBcnJheVRhZ3NbZXJyb3JUYWddPXR5cGVkQXJyYXlUYWdzW2Z1bmNUYWddPXR5cGVkQXJyYXlUYWdzW21hcFRhZ109dHlwZWRBcnJheVRhZ3NbbnVtYmVyVGFnXT10eXBlZEFycmF5VGFnc1tvYmplY3RUYWddPXR5cGVkQXJyYXlUYWdzW3JlZ2V4cFRhZ109dHlwZWRBcnJheVRhZ3Nbc2V0VGFnXT10eXBlZEFycmF5VGFnc1tzdHJpbmdUYWddPXR5cGVkQXJyYXlUYWdzW3dlYWtNYXBUYWddPWZhbHNlO3ZhciBjbG9uZWFibGVUYWdzPXt9O2Nsb25lYWJsZVRhZ3NbYXJnc1RhZ109Y2xvbmVhYmxlVGFnc1thcnJheVRhZ109CmNsb25lYWJsZVRhZ3NbYXJyYXlCdWZmZXJUYWddPWNsb25lYWJsZVRhZ3NbZGF0YVZpZXdUYWddPWNsb25lYWJsZVRhZ3NbYm9vbFRhZ109Y2xvbmVhYmxlVGFnc1tkYXRlVGFnXT1jbG9uZWFibGVUYWdzW2Zsb2F0MzJUYWddPWNsb25lYWJsZVRhZ3NbZmxvYXQ2NFRhZ109Y2xvbmVhYmxlVGFnc1tpbnQ4VGFnXT1jbG9uZWFibGVUYWdzW2ludDE2VGFnXT1jbG9uZWFibGVUYWdzW2ludDMyVGFnXT1jbG9uZWFibGVUYWdzW21hcFRhZ109Y2xvbmVhYmxlVGFnc1tudW1iZXJUYWddPWNsb25lYWJsZVRhZ3Nbb2JqZWN0VGFnXT1jbG9uZWFibGVUYWdzW3JlZ2V4cFRhZ109Y2xvbmVhYmxlVGFnc1tzZXRUYWddPWNsb25lYWJsZVRhZ3Nbc3RyaW5nVGFnXT1jbG9uZWFibGVUYWdzW3N5bWJvbFRhZ109Y2xvbmVhYmxlVGFnc1t1aW50OFRhZ109Y2xvbmVhYmxlVGFnc1t1aW50OENsYW1wZWRUYWddPWNsb25lYWJsZVRhZ3NbdWludDE2VGFnXT1jbG9uZWFibGVUYWdzW3VpbnQzMlRhZ109dHJ1ZTsKY2xvbmVhYmxlVGFnc1tlcnJvclRhZ109Y2xvbmVhYmxlVGFnc1tmdW5jVGFnXT1jbG9uZWFibGVUYWdzW3dlYWtNYXBUYWddPWZhbHNlO3ZhciBkZWJ1cnJlZExldHRlcnM9eyJcdTAwYzAiOiJBIiwiXHUwMGMxIjoiQSIsIlx1MDBjMiI6IkEiLCJcdTAwYzMiOiJBIiwiXHUwMGM0IjoiQSIsIlx1MDBjNSI6IkEiLCJcdTAwZTAiOiJhIiwiXHUwMGUxIjoiYSIsIlx1MDBlMiI6ImEiLCJcdTAwZTMiOiJhIiwiXHUwMGU0IjoiYSIsIlx1MDBlNSI6ImEiLCJcdTAwYzciOiJDIiwiXHUwMGU3IjoiYyIsIlx1MDBkMCI6IkQiLCJcdTAwZjAiOiJkIiwiXHUwMGM4IjoiRSIsIlx1MDBjOSI6IkUiLCJcdTAwY2EiOiJFIiwiXHUwMGNiIjoiRSIsIlx1MDBlOCI6ImUiLCJcdTAwZTkiOiJlIiwiXHUwMGVhIjoiZSIsIlx1MDBlYiI6ImUiLCJcdTAwY2MiOiJJIiwiXHUwMGNkIjoiSSIsIlx1MDBjZSI6IkkiLCJcdTAwY2YiOiJJIiwiXHUwMGVjIjoiaSIsIlx1MDBlZCI6ImkiLCJcdTAwZWUiOiJpIiwKIlx1MDBlZiI6ImkiLCJcdTAwZDEiOiJOIiwiXHUwMGYxIjoibiIsIlx1MDBkMiI6Ik8iLCJcdTAwZDMiOiJPIiwiXHUwMGQ0IjoiTyIsIlx1MDBkNSI6Ik8iLCJcdTAwZDYiOiJPIiwiXHUwMGQ4IjoiTyIsIlx1MDBmMiI6Im8iLCJcdTAwZjMiOiJvIiwiXHUwMGY0IjoibyIsIlx1MDBmNSI6Im8iLCJcdTAwZjYiOiJvIiwiXHUwMGY4IjoibyIsIlx1MDBkOSI6IlUiLCJcdTAwZGEiOiJVIiwiXHUwMGRiIjoiVSIsIlx1MDBkYyI6IlUiLCJcdTAwZjkiOiJ1IiwiXHUwMGZhIjoidSIsIlx1MDBmYiI6InUiLCJcdTAwZmMiOiJ1IiwiXHUwMGRkIjoiWSIsIlx1MDBmZCI6InkiLCJcdTAwZmYiOiJ5IiwiXHUwMGM2IjoiQWUiLCJcdTAwZTYiOiJhZSIsIlx1MDBkZSI6IlRoIiwiXHUwMGZlIjoidGgiLCJcdTAwZGYiOiJzcyIsIlx1MDEwMCI6IkEiLCJcdTAxMDIiOiJBIiwiXHUwMTA0IjoiQSIsIlx1MDEwMSI6ImEiLCJcdTAxMDMiOiJhIiwiXHUwMTA1IjoiYSIsIlx1MDEwNiI6IkMiLCJcdTAxMDgiOiJDIiwKIlx1MDEwYSI6IkMiLCJcdTAxMGMiOiJDIiwiXHUwMTA3IjoiYyIsIlx1MDEwOSI6ImMiLCJcdTAxMGIiOiJjIiwiXHUwMTBkIjoiYyIsIlx1MDEwZSI6IkQiLCJcdTAxMTAiOiJEIiwiXHUwMTBmIjoiZCIsIlx1MDExMSI6ImQiLCJcdTAxMTIiOiJFIiwiXHUwMTE0IjoiRSIsIlx1MDExNiI6IkUiLCJcdTAxMTgiOiJFIiwiXHUwMTFhIjoiRSIsIlx1MDExMyI6ImUiLCJcdTAxMTUiOiJlIiwiXHUwMTE3IjoiZSIsIlx1MDExOSI6ImUiLCJcdTAxMWIiOiJlIiwiXHUwMTFjIjoiRyIsIlx1MDExZSI6IkciLCJcdTAxMjAiOiJHIiwiXHUwMTIyIjoiRyIsIlx1MDExZCI6ImciLCJcdTAxMWYiOiJnIiwiXHUwMTIxIjoiZyIsIlx1MDEyMyI6ImciLCJcdTAxMjQiOiJIIiwiXHUwMTI2IjoiSCIsIlx1MDEyNSI6ImgiLCJcdTAxMjciOiJoIiwiXHUwMTI4IjoiSSIsIlx1MDEyYSI6IkkiLCJcdTAxMmMiOiJJIiwiXHUwMTJlIjoiSSIsIlx1MDEzMCI6IkkiLCJcdTAxMjkiOiJpIiwiXHUwMTJiIjoiaSIsCiJcdTAxMmQiOiJpIiwiXHUwMTJmIjoiaSIsIlx1MDEzMSI6ImkiLCJcdTAxMzQiOiJKIiwiXHUwMTM1IjoiaiIsIlx1MDEzNiI6IksiLCJcdTAxMzciOiJrIiwiXHUwMTM4IjoiayIsIlx1MDEzOSI6IkwiLCJcdTAxM2IiOiJMIiwiXHUwMTNkIjoiTCIsIlx1MDEzZiI6IkwiLCJcdTAxNDEiOiJMIiwiXHUwMTNhIjoibCIsIlx1MDEzYyI6ImwiLCJcdTAxM2UiOiJsIiwiXHUwMTQwIjoibCIsIlx1MDE0MiI6ImwiLCJcdTAxNDMiOiJOIiwiXHUwMTQ1IjoiTiIsIlx1MDE0NyI6Ik4iLCJcdTAxNGEiOiJOIiwiXHUwMTQ0IjoibiIsIlx1MDE0NiI6Im4iLCJcdTAxNDgiOiJuIiwiXHUwMTRiIjoibiIsIlx1MDE0YyI6Ik8iLCJcdTAxNGUiOiJPIiwiXHUwMTUwIjoiTyIsIlx1MDE0ZCI6Im8iLCJcdTAxNGYiOiJvIiwiXHUwMTUxIjoibyIsIlx1MDE1NCI6IlIiLCJcdTAxNTYiOiJSIiwiXHUwMTU4IjoiUiIsIlx1MDE1NSI6InIiLCJcdTAxNTciOiJyIiwiXHUwMTU5IjoiciIsIlx1MDE1YSI6IlMiLAoiXHUwMTVjIjoiUyIsIlx1MDE1ZSI6IlMiLCJcdTAxNjAiOiJTIiwiXHUwMTViIjoicyIsIlx1MDE1ZCI6InMiLCJcdTAxNWYiOiJzIiwiXHUwMTYxIjoicyIsIlx1MDE2MiI6IlQiLCJcdTAxNjQiOiJUIiwiXHUwMTY2IjoiVCIsIlx1MDE2MyI6InQiLCJcdTAxNjUiOiJ0IiwiXHUwMTY3IjoidCIsIlx1MDE2OCI6IlUiLCJcdTAxNmEiOiJVIiwiXHUwMTZjIjoiVSIsIlx1MDE2ZSI6IlUiLCJcdTAxNzAiOiJVIiwiXHUwMTcyIjoiVSIsIlx1MDE2OSI6InUiLCJcdTAxNmIiOiJ1IiwiXHUwMTZkIjoidSIsIlx1MDE2ZiI6InUiLCJcdTAxNzEiOiJ1IiwiXHUwMTczIjoidSIsIlx1MDE3NCI6IlciLCJcdTAxNzUiOiJ3IiwiXHUwMTc2IjoiWSIsIlx1MDE3NyI6InkiLCJcdTAxNzgiOiJZIiwiXHUwMTc5IjoiWiIsIlx1MDE3YiI6IloiLCJcdTAxN2QiOiJaIiwiXHUwMTdhIjoieiIsIlx1MDE3YyI6InoiLCJcdTAxN2UiOiJ6IiwiXHUwMTMyIjoiSUoiLCJcdTAxMzMiOiJpaiIsIlx1MDE1MiI6Ik9lIiwKIlx1MDE1MyI6Im9lIiwiXHUwMTQ5IjoiJ24iLCJcdTAxN2YiOiJzIn07dmFyIGh0bWxFc2NhcGVzPXsiXHgyNiI6Ilx4MjZhbXA7IiwiXHgzYyI6Ilx4MjZsdDsiLCJceDNlIjoiXHgyNmd0OyIsJyInOiJceDI2cXVvdDsiLCInIjoiXHgyNiMzOTsifTt2YXIgaHRtbFVuZXNjYXBlcz17Ilx4MjZhbXA7IjoiXHgyNiIsIlx4MjZsdDsiOiJceDNjIiwiXHgyNmd0OyI6Ilx4M2UiLCJceDI2cXVvdDsiOiciJywiXHgyNiMzOTsiOiInIn07dmFyIHN0cmluZ0VzY2FwZXM9eyJcXCI6IlxcIiwiJyI6IiciLCJcbiI6Im4iLCJcciI6InIiLCJcdTIwMjgiOiJ1MjAyOCIsIlx1MjAyOSI6InUyMDI5In07dmFyIGZyZWVQYXJzZUZsb2F0PXBhcnNlRmxvYXQsZnJlZVBhcnNlSW50PXBhcnNlSW50O3ZhciBmcmVlR2xvYmFsPXR5cGVvZiBnbG9iYWw9PSJvYmplY3QiJiZnbG9iYWwmJmdsb2JhbC5PYmplY3Q9PT1PYmplY3QmJmdsb2JhbDt2YXIgZnJlZVNlbGY9dHlwZW9mIHNlbGY9PSJvYmplY3QiJiYKc2VsZiYmc2VsZi5PYmplY3Q9PT1PYmplY3QmJnNlbGY7dmFyIHJvb3Q9ZnJlZUdsb2JhbHx8ZnJlZVNlbGZ8fEZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCk7dmFyIGZyZWVFeHBvcnRzPXR5cGVvZiBleHBvcnRzPT0ib2JqZWN0IiYmZXhwb3J0cyYmIWV4cG9ydHMubm9kZVR5cGUmJmV4cG9ydHM7dmFyIGZyZWVNb2R1bGU9ZnJlZUV4cG9ydHMmJnR5cGVvZiBtb2R1bGU9PSJvYmplY3QiJiZtb2R1bGUmJiFtb2R1bGUubm9kZVR5cGUmJm1vZHVsZTt2YXIgbW9kdWxlRXhwb3J0cz1mcmVlTW9kdWxlJiZmcmVlTW9kdWxlLmV4cG9ydHM9PT1mcmVlRXhwb3J0czt2YXIgZnJlZVByb2Nlc3M9bW9kdWxlRXhwb3J0cyYmZnJlZUdsb2JhbC5wcm9jZXNzO3ZhciBub2RlVXRpbD1mdW5jdGlvbigpe3RyeXtyZXR1cm4gZnJlZVByb2Nlc3MmJmZyZWVQcm9jZXNzLmJpbmRpbmcmJmZyZWVQcm9jZXNzLmJpbmRpbmcoInV0aWwiKX1jYXRjaChlKXt9fSgpO3ZhciBub2RlSXNBcnJheUJ1ZmZlcj1ub2RlVXRpbCYmCm5vZGVVdGlsLmlzQXJyYXlCdWZmZXIsbm9kZUlzRGF0ZT1ub2RlVXRpbCYmbm9kZVV0aWwuaXNEYXRlLG5vZGVJc01hcD1ub2RlVXRpbCYmbm9kZVV0aWwuaXNNYXAsbm9kZUlzUmVnRXhwPW5vZGVVdGlsJiZub2RlVXRpbC5pc1JlZ0V4cCxub2RlSXNTZXQ9bm9kZVV0aWwmJm5vZGVVdGlsLmlzU2V0LG5vZGVJc1R5cGVkQXJyYXk9bm9kZVV0aWwmJm5vZGVVdGlsLmlzVHlwZWRBcnJheTtmdW5jdGlvbiBhcHBseShmdW5jLHRoaXNBcmcsYXJncyl7c3dpdGNoKGFyZ3MubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnKTtjYXNlIDE6cmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnLGFyZ3NbMF0pO2Nhc2UgMjpyZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcsYXJnc1swXSxhcmdzWzFdKTtjYXNlIDM6cmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnLGFyZ3NbMF0sYXJnc1sxXSxhcmdzWzJdKX1yZXR1cm4gZnVuYy5hcHBseSh0aGlzQXJnLGFyZ3MpfWZ1bmN0aW9uIGFycmF5QWdncmVnYXRvcihhcnJheSwKc2V0dGVyLGl0ZXJhdGVlLGFjY3VtdWxhdG9yKXt2YXIgaW5kZXg9LTEsbGVuZ3RoPWFycmF5PT1udWxsPzA6YXJyYXkubGVuZ3RoO3doaWxlKCsraW5kZXg8bGVuZ3RoKXt2YXIgdmFsdWU9YXJyYXlbaW5kZXhdO3NldHRlcihhY2N1bXVsYXRvcix2YWx1ZSxpdGVyYXRlZSh2YWx1ZSksYXJyYXkpfXJldHVybiBhY2N1bXVsYXRvcn1mdW5jdGlvbiBhcnJheUVhY2goYXJyYXksaXRlcmF0ZWUpe3ZhciBpbmRleD0tMSxsZW5ndGg9YXJyYXk9PW51bGw/MDphcnJheS5sZW5ndGg7d2hpbGUoKytpbmRleDxsZW5ndGgpaWYoaXRlcmF0ZWUoYXJyYXlbaW5kZXhdLGluZGV4LGFycmF5KT09PWZhbHNlKWJyZWFrO3JldHVybiBhcnJheX1mdW5jdGlvbiBhcnJheUVhY2hSaWdodChhcnJheSxpdGVyYXRlZSl7dmFyIGxlbmd0aD1hcnJheT09bnVsbD8wOmFycmF5Lmxlbmd0aDt3aGlsZShsZW5ndGgtLSlpZihpdGVyYXRlZShhcnJheVtsZW5ndGhdLGxlbmd0aCxhcnJheSk9PT1mYWxzZSlicmVhazsKcmV0dXJuIGFycmF5fWZ1bmN0aW9uIGFycmF5RXZlcnkoYXJyYXkscHJlZGljYXRlKXt2YXIgaW5kZXg9LTEsbGVuZ3RoPWFycmF5PT1udWxsPzA6YXJyYXkubGVuZ3RoO3doaWxlKCsraW5kZXg8bGVuZ3RoKWlmKCFwcmVkaWNhdGUoYXJyYXlbaW5kZXhdLGluZGV4LGFycmF5KSlyZXR1cm4gZmFsc2U7cmV0dXJuIHRydWV9ZnVuY3Rpb24gYXJyYXlGaWx0ZXIoYXJyYXkscHJlZGljYXRlKXt2YXIgaW5kZXg9LTEsbGVuZ3RoPWFycmF5PT1udWxsPzA6YXJyYXkubGVuZ3RoLHJlc0luZGV4PTAscmVzdWx0PVtdO3doaWxlKCsraW5kZXg8bGVuZ3RoKXt2YXIgdmFsdWU9YXJyYXlbaW5kZXhdO2lmKHByZWRpY2F0ZSh2YWx1ZSxpbmRleCxhcnJheSkpcmVzdWx0W3Jlc0luZGV4KytdPXZhbHVlfXJldHVybiByZXN1bHR9ZnVuY3Rpb24gYXJyYXlJbmNsdWRlcyhhcnJheSx2YWx1ZSl7dmFyIGxlbmd0aD1hcnJheT09bnVsbD8wOmFycmF5Lmxlbmd0aDtyZXR1cm4hIWxlbmd0aCYmYmFzZUluZGV4T2YoYXJyYXksCnZhbHVlLDApPi0xfWZ1bmN0aW9uIGFycmF5SW5jbHVkZXNXaXRoKGFycmF5LHZhbHVlLGNvbXBhcmF0b3Ipe3ZhciBpbmRleD0tMSxsZW5ndGg9YXJyYXk9PW51bGw/MDphcnJheS5sZW5ndGg7d2hpbGUoKytpbmRleDxsZW5ndGgpaWYoY29tcGFyYXRvcih2YWx1ZSxhcnJheVtpbmRleF0pKXJldHVybiB0cnVlO3JldHVybiBmYWxzZX1mdW5jdGlvbiBhcnJheU1hcChhcnJheSxpdGVyYXRlZSl7dmFyIGluZGV4PS0xLGxlbmd0aD1hcnJheT09bnVsbD8wOmFycmF5Lmxlbmd0aCxyZXN1bHQ9QXJyYXkobGVuZ3RoKTt3aGlsZSgrK2luZGV4PGxlbmd0aClyZXN1bHRbaW5kZXhdPWl0ZXJhdGVlKGFycmF5W2luZGV4XSxpbmRleCxhcnJheSk7cmV0dXJuIHJlc3VsdH1mdW5jdGlvbiBhcnJheVB1c2goYXJyYXksdmFsdWVzKXt2YXIgaW5kZXg9LTEsbGVuZ3RoPXZhbHVlcy5sZW5ndGgsb2Zmc2V0PWFycmF5Lmxlbmd0aDt3aGlsZSgrK2luZGV4PGxlbmd0aClhcnJheVtvZmZzZXQraW5kZXhdPQp2YWx1ZXNbaW5kZXhdO3JldHVybiBhcnJheX1mdW5jdGlvbiBhcnJheVJlZHVjZShhcnJheSxpdGVyYXRlZSxhY2N1bXVsYXRvcixpbml0QWNjdW0pe3ZhciBpbmRleD0tMSxsZW5ndGg9YXJyYXk9PW51bGw/MDphcnJheS5sZW5ndGg7aWYoaW5pdEFjY3VtJiZsZW5ndGgpYWNjdW11bGF0b3I9YXJyYXlbKytpbmRleF07d2hpbGUoKytpbmRleDxsZW5ndGgpYWNjdW11bGF0b3I9aXRlcmF0ZWUoYWNjdW11bGF0b3IsYXJyYXlbaW5kZXhdLGluZGV4LGFycmF5KTtyZXR1cm4gYWNjdW11bGF0b3J9ZnVuY3Rpb24gYXJyYXlSZWR1Y2VSaWdodChhcnJheSxpdGVyYXRlZSxhY2N1bXVsYXRvcixpbml0QWNjdW0pe3ZhciBsZW5ndGg9YXJyYXk9PW51bGw/MDphcnJheS5sZW5ndGg7aWYoaW5pdEFjY3VtJiZsZW5ndGgpYWNjdW11bGF0b3I9YXJyYXlbLS1sZW5ndGhdO3doaWxlKGxlbmd0aC0tKWFjY3VtdWxhdG9yPWl0ZXJhdGVlKGFjY3VtdWxhdG9yLGFycmF5W2xlbmd0aF0sbGVuZ3RoLGFycmF5KTsKcmV0dXJuIGFjY3VtdWxhdG9yfWZ1bmN0aW9uIGFycmF5U29tZShhcnJheSxwcmVkaWNhdGUpe3ZhciBpbmRleD0tMSxsZW5ndGg9YXJyYXk9PW51bGw/MDphcnJheS5sZW5ndGg7d2hpbGUoKytpbmRleDxsZW5ndGgpaWYocHJlZGljYXRlKGFycmF5W2luZGV4XSxpbmRleCxhcnJheSkpcmV0dXJuIHRydWU7cmV0dXJuIGZhbHNlfXZhciBhc2NpaVNpemU9YmFzZVByb3BlcnR5KCJsZW5ndGgiKTtmdW5jdGlvbiBhc2NpaVRvQXJyYXkoc3RyaW5nKXtyZXR1cm4gc3RyaW5nLnNwbGl0KCIiKX1mdW5jdGlvbiBhc2NpaVdvcmRzKHN0cmluZyl7cmV0dXJuIHN0cmluZy5tYXRjaChyZUFzY2lpV29yZCl8fFtdfWZ1bmN0aW9uIGJhc2VGaW5kS2V5KGNvbGxlY3Rpb24scHJlZGljYXRlLGVhY2hGdW5jKXt2YXIgcmVzdWx0O2VhY2hGdW5jKGNvbGxlY3Rpb24sZnVuY3Rpb24odmFsdWUsa2V5LGNvbGxlY3Rpb24pe2lmKHByZWRpY2F0ZSh2YWx1ZSxrZXksY29sbGVjdGlvbikpe3Jlc3VsdD1rZXk7CnJldHVybiBmYWxzZX19KTtyZXR1cm4gcmVzdWx0fWZ1bmN0aW9uIGJhc2VGaW5kSW5kZXgoYXJyYXkscHJlZGljYXRlLGZyb21JbmRleCxmcm9tUmlnaHQpe3ZhciBsZW5ndGg9YXJyYXkubGVuZ3RoLGluZGV4PWZyb21JbmRleCsoZnJvbVJpZ2h0PzE6LTEpO3doaWxlKGZyb21SaWdodD9pbmRleC0tOisraW5kZXg8bGVuZ3RoKWlmKHByZWRpY2F0ZShhcnJheVtpbmRleF0saW5kZXgsYXJyYXkpKXJldHVybiBpbmRleDtyZXR1cm4tMX1mdW5jdGlvbiBiYXNlSW5kZXhPZihhcnJheSx2YWx1ZSxmcm9tSW5kZXgpe3JldHVybiB2YWx1ZT09PXZhbHVlP3N0cmljdEluZGV4T2YoYXJyYXksdmFsdWUsZnJvbUluZGV4KTpiYXNlRmluZEluZGV4KGFycmF5LGJhc2VJc05hTixmcm9tSW5kZXgpfWZ1bmN0aW9uIGJhc2VJbmRleE9mV2l0aChhcnJheSx2YWx1ZSxmcm9tSW5kZXgsY29tcGFyYXRvcil7dmFyIGluZGV4PWZyb21JbmRleC0xLGxlbmd0aD1hcnJheS5sZW5ndGg7d2hpbGUoKytpbmRleDwKbGVuZ3RoKWlmKGNvbXBhcmF0b3IoYXJyYXlbaW5kZXhdLHZhbHVlKSlyZXR1cm4gaW5kZXg7cmV0dXJuLTF9ZnVuY3Rpb24gYmFzZUlzTmFOKHZhbHVlKXtyZXR1cm4gdmFsdWUhPT12YWx1ZX1mdW5jdGlvbiBiYXNlTWVhbihhcnJheSxpdGVyYXRlZSl7dmFyIGxlbmd0aD1hcnJheT09bnVsbD8wOmFycmF5Lmxlbmd0aDtyZXR1cm4gbGVuZ3RoP2Jhc2VTdW0oYXJyYXksaXRlcmF0ZWUpL2xlbmd0aDpOQU59ZnVuY3Rpb24gYmFzZVByb3BlcnR5KGtleSl7cmV0dXJuIGZ1bmN0aW9uKG9iamVjdCl7cmV0dXJuIG9iamVjdD09bnVsbD91bmRlZmluZWQ6b2JqZWN0W2tleV19fWZ1bmN0aW9uIGJhc2VQcm9wZXJ0eU9mKG9iamVjdCl7cmV0dXJuIGZ1bmN0aW9uKGtleSl7cmV0dXJuIG9iamVjdD09bnVsbD91bmRlZmluZWQ6b2JqZWN0W2tleV19fWZ1bmN0aW9uIGJhc2VSZWR1Y2UoY29sbGVjdGlvbixpdGVyYXRlZSxhY2N1bXVsYXRvcixpbml0QWNjdW0sZWFjaEZ1bmMpe2VhY2hGdW5jKGNvbGxlY3Rpb24sCmZ1bmN0aW9uKHZhbHVlLGluZGV4LGNvbGxlY3Rpb24pe2FjY3VtdWxhdG9yPWluaXRBY2N1bT8oaW5pdEFjY3VtPWZhbHNlLHZhbHVlKTppdGVyYXRlZShhY2N1bXVsYXRvcix2YWx1ZSxpbmRleCxjb2xsZWN0aW9uKX0pO3JldHVybiBhY2N1bXVsYXRvcn1mdW5jdGlvbiBiYXNlU29ydEJ5KGFycmF5LGNvbXBhcmVyKXt2YXIgbGVuZ3RoPWFycmF5Lmxlbmd0aDthcnJheS5zb3J0KGNvbXBhcmVyKTt3aGlsZShsZW5ndGgtLSlhcnJheVtsZW5ndGhdPWFycmF5W2xlbmd0aF0udmFsdWU7cmV0dXJuIGFycmF5fWZ1bmN0aW9uIGJhc2VTdW0oYXJyYXksaXRlcmF0ZWUpe3ZhciByZXN1bHQsaW5kZXg9LTEsbGVuZ3RoPWFycmF5Lmxlbmd0aDt3aGlsZSgrK2luZGV4PGxlbmd0aCl7dmFyIGN1cnJlbnQ9aXRlcmF0ZWUoYXJyYXlbaW5kZXhdKTtpZihjdXJyZW50IT09dW5kZWZpbmVkKXJlc3VsdD1yZXN1bHQ9PT11bmRlZmluZWQ/Y3VycmVudDpyZXN1bHQrY3VycmVudH1yZXR1cm4gcmVzdWx0fQpmdW5jdGlvbiBiYXNlVGltZXMobixpdGVyYXRlZSl7dmFyIGluZGV4PS0xLHJlc3VsdD1BcnJheShuKTt3aGlsZSgrK2luZGV4PG4pcmVzdWx0W2luZGV4XT1pdGVyYXRlZShpbmRleCk7cmV0dXJuIHJlc3VsdH1mdW5jdGlvbiBiYXNlVG9QYWlycyhvYmplY3QscHJvcHMpe3JldHVybiBhcnJheU1hcChwcm9wcyxmdW5jdGlvbihrZXkpe3JldHVybltrZXksb2JqZWN0W2tleV1dfSl9ZnVuY3Rpb24gYmFzZVVuYXJ5KGZ1bmMpe3JldHVybiBmdW5jdGlvbih2YWx1ZSl7cmV0dXJuIGZ1bmModmFsdWUpfX1mdW5jdGlvbiBiYXNlVmFsdWVzKG9iamVjdCxwcm9wcyl7cmV0dXJuIGFycmF5TWFwKHByb3BzLGZ1bmN0aW9uKGtleSl7cmV0dXJuIG9iamVjdFtrZXldfSl9ZnVuY3Rpb24gY2FjaGVIYXMoY2FjaGUsa2V5KXtyZXR1cm4gY2FjaGUuaGFzKGtleSl9ZnVuY3Rpb24gY2hhcnNTdGFydEluZGV4KHN0clN5bWJvbHMsY2hyU3ltYm9scyl7dmFyIGluZGV4PS0xLGxlbmd0aD1zdHJTeW1ib2xzLmxlbmd0aDsKd2hpbGUoKytpbmRleDxsZW5ndGgmJmJhc2VJbmRleE9mKGNoclN5bWJvbHMsc3RyU3ltYm9sc1tpbmRleF0sMCk+LTEpO3JldHVybiBpbmRleH1mdW5jdGlvbiBjaGFyc0VuZEluZGV4KHN0clN5bWJvbHMsY2hyU3ltYm9scyl7dmFyIGluZGV4PXN0clN5bWJvbHMubGVuZ3RoO3doaWxlKGluZGV4LS0mJmJhc2VJbmRleE9mKGNoclN5bWJvbHMsc3RyU3ltYm9sc1tpbmRleF0sMCk+LTEpO3JldHVybiBpbmRleH1mdW5jdGlvbiBjb3VudEhvbGRlcnMoYXJyYXkscGxhY2Vob2xkZXIpe3ZhciBsZW5ndGg9YXJyYXkubGVuZ3RoLHJlc3VsdD0wO3doaWxlKGxlbmd0aC0tKWlmKGFycmF5W2xlbmd0aF09PT1wbGFjZWhvbGRlcikrK3Jlc3VsdDtyZXR1cm4gcmVzdWx0fXZhciBkZWJ1cnJMZXR0ZXI9YmFzZVByb3BlcnR5T2YoZGVidXJyZWRMZXR0ZXJzKTt2YXIgZXNjYXBlSHRtbENoYXI9YmFzZVByb3BlcnR5T2YoaHRtbEVzY2FwZXMpO2Z1bmN0aW9uIGVzY2FwZVN0cmluZ0NoYXIoY2hyKXtyZXR1cm4iXFwiKwpzdHJpbmdFc2NhcGVzW2Nocl19ZnVuY3Rpb24gZ2V0VmFsdWUob2JqZWN0LGtleSl7cmV0dXJuIG9iamVjdD09bnVsbD91bmRlZmluZWQ6b2JqZWN0W2tleV19ZnVuY3Rpb24gaGFzVW5pY29kZShzdHJpbmcpe3JldHVybiByZUhhc1VuaWNvZGUudGVzdChzdHJpbmcpfWZ1bmN0aW9uIGhhc1VuaWNvZGVXb3JkKHN0cmluZyl7cmV0dXJuIHJlSGFzVW5pY29kZVdvcmQudGVzdChzdHJpbmcpfWZ1bmN0aW9uIGl0ZXJhdG9yVG9BcnJheShpdGVyYXRvcil7dmFyIGRhdGEscmVzdWx0PVtdO3doaWxlKCEoZGF0YT1pdGVyYXRvci5uZXh0KCkpLmRvbmUpcmVzdWx0LnB1c2goZGF0YS52YWx1ZSk7cmV0dXJuIHJlc3VsdH1mdW5jdGlvbiBtYXBUb0FycmF5KG1hcCl7dmFyIGluZGV4PS0xLHJlc3VsdD1BcnJheShtYXAuc2l6ZSk7bWFwLmZvckVhY2goZnVuY3Rpb24odmFsdWUsa2V5KXtyZXN1bHRbKytpbmRleF09W2tleSx2YWx1ZV19KTtyZXR1cm4gcmVzdWx0fWZ1bmN0aW9uIG92ZXJBcmcoZnVuYywKdHJhbnNmb3JtKXtyZXR1cm4gZnVuY3Rpb24oYXJnKXtyZXR1cm4gZnVuYyh0cmFuc2Zvcm0oYXJnKSl9fWZ1bmN0aW9uIHJlcGxhY2VIb2xkZXJzKGFycmF5LHBsYWNlaG9sZGVyKXt2YXIgaW5kZXg9LTEsbGVuZ3RoPWFycmF5Lmxlbmd0aCxyZXNJbmRleD0wLHJlc3VsdD1bXTt3aGlsZSgrK2luZGV4PGxlbmd0aCl7dmFyIHZhbHVlPWFycmF5W2luZGV4XTtpZih2YWx1ZT09PXBsYWNlaG9sZGVyfHx2YWx1ZT09PVBMQUNFSE9MREVSKXthcnJheVtpbmRleF09UExBQ0VIT0xERVI7cmVzdWx0W3Jlc0luZGV4KytdPWluZGV4fX1yZXR1cm4gcmVzdWx0fWZ1bmN0aW9uIHNhZmVHZXQob2JqZWN0LGtleSl7cmV0dXJuIGtleT09Il9fcHJvdG9fXyI/dW5kZWZpbmVkOm9iamVjdFtrZXldfWZ1bmN0aW9uIHNldFRvQXJyYXkoc2V0KXt2YXIgaW5kZXg9LTEscmVzdWx0PUFycmF5KHNldC5zaXplKTtzZXQuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSl7cmVzdWx0WysraW5kZXhdPXZhbHVlfSk7CnJldHVybiByZXN1bHR9ZnVuY3Rpb24gc2V0VG9QYWlycyhzZXQpe3ZhciBpbmRleD0tMSxyZXN1bHQ9QXJyYXkoc2V0LnNpemUpO3NldC5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlKXtyZXN1bHRbKytpbmRleF09W3ZhbHVlLHZhbHVlXX0pO3JldHVybiByZXN1bHR9ZnVuY3Rpb24gc3RyaWN0SW5kZXhPZihhcnJheSx2YWx1ZSxmcm9tSW5kZXgpe3ZhciBpbmRleD1mcm9tSW5kZXgtMSxsZW5ndGg9YXJyYXkubGVuZ3RoO3doaWxlKCsraW5kZXg8bGVuZ3RoKWlmKGFycmF5W2luZGV4XT09PXZhbHVlKXJldHVybiBpbmRleDtyZXR1cm4tMX1mdW5jdGlvbiBzdHJpY3RMYXN0SW5kZXhPZihhcnJheSx2YWx1ZSxmcm9tSW5kZXgpe3ZhciBpbmRleD1mcm9tSW5kZXgrMTt3aGlsZShpbmRleC0tKWlmKGFycmF5W2luZGV4XT09PXZhbHVlKXJldHVybiBpbmRleDtyZXR1cm4gaW5kZXh9ZnVuY3Rpb24gc3RyaW5nU2l6ZShzdHJpbmcpe3JldHVybiBoYXNVbmljb2RlKHN0cmluZyk/dW5pY29kZVNpemUoc3RyaW5nKToKYXNjaWlTaXplKHN0cmluZyl9ZnVuY3Rpb24gc3RyaW5nVG9BcnJheShzdHJpbmcpe3JldHVybiBoYXNVbmljb2RlKHN0cmluZyk/dW5pY29kZVRvQXJyYXkoc3RyaW5nKTphc2NpaVRvQXJyYXkoc3RyaW5nKX12YXIgdW5lc2NhcGVIdG1sQ2hhcj1iYXNlUHJvcGVydHlPZihodG1sVW5lc2NhcGVzKTtmdW5jdGlvbiB1bmljb2RlU2l6ZShzdHJpbmcpe3ZhciByZXN1bHQ9cmVVbmljb2RlLmxhc3RJbmRleD0wO3doaWxlKHJlVW5pY29kZS50ZXN0KHN0cmluZykpKytyZXN1bHQ7cmV0dXJuIHJlc3VsdH1mdW5jdGlvbiB1bmljb2RlVG9BcnJheShzdHJpbmcpe3JldHVybiBzdHJpbmcubWF0Y2gocmVVbmljb2RlKXx8W119ZnVuY3Rpb24gdW5pY29kZVdvcmRzKHN0cmluZyl7cmV0dXJuIHN0cmluZy5tYXRjaChyZVVuaWNvZGVXb3JkKXx8W119dmFyIHJ1bkluQ29udGV4dD1mdW5jdGlvbiBydW5JbkNvbnRleHQoY29udGV4dCl7Y29udGV4dD1jb250ZXh0PT1udWxsP3Jvb3Q6Xy5kZWZhdWx0cyhyb290Lk9iamVjdCgpLApjb250ZXh0LF8ucGljayhyb290LGNvbnRleHRQcm9wcykpO3ZhciBBcnJheT1jb250ZXh0LkFycmF5LERhdGU9Y29udGV4dC5EYXRlLEVycm9yPWNvbnRleHQuRXJyb3IsRnVuY3Rpb249Y29udGV4dC5GdW5jdGlvbixNYXRoPWNvbnRleHQuTWF0aCxPYmplY3Q9Y29udGV4dC5PYmplY3QsUmVnRXhwPWNvbnRleHQuUmVnRXhwLFN0cmluZz1jb250ZXh0LlN0cmluZyxUeXBlRXJyb3I9Y29udGV4dC5UeXBlRXJyb3I7dmFyIGFycmF5UHJvdG89QXJyYXkucHJvdG90eXBlLGZ1bmNQcm90bz1GdW5jdGlvbi5wcm90b3R5cGUsb2JqZWN0UHJvdG89T2JqZWN0LnByb3RvdHlwZTt2YXIgY29yZUpzRGF0YT1jb250ZXh0WyJfX2NvcmUtanNfc2hhcmVkX18iXTt2YXIgZnVuY1RvU3RyaW5nPWZ1bmNQcm90by50b1N0cmluZzt2YXIgaGFzT3duUHJvcGVydHk9b2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7dmFyIGlkQ291bnRlcj0wO3ZhciBtYXNrU3JjS2V5PWZ1bmN0aW9uKCl7dmFyIHVpZD0KL1teLl0rJC8uZXhlYyhjb3JlSnNEYXRhJiZjb3JlSnNEYXRhLmtleXMmJmNvcmVKc0RhdGEua2V5cy5JRV9QUk9UT3x8IiIpO3JldHVybiB1aWQ/IlN5bWJvbChzcmMpXzEuIit1aWQ6IiJ9KCk7dmFyIG5hdGl2ZU9iamVjdFRvU3RyaW5nPW9iamVjdFByb3RvLnRvU3RyaW5nO3ZhciBvYmplY3RDdG9yU3RyaW5nPWZ1bmNUb1N0cmluZy5jYWxsKE9iamVjdCk7dmFyIG9sZERhc2g9cm9vdC5fO3ZhciByZUlzTmF0aXZlPVJlZ0V4cCgiXiIrZnVuY1RvU3RyaW5nLmNhbGwoaGFzT3duUHJvcGVydHkpLnJlcGxhY2UocmVSZWdFeHBDaGFyLCJcXCRceDI2IikucmVwbGFjZSgvaGFzT3duUHJvcGVydHl8KGZ1bmN0aW9uKS4qPyg/PVxcXCgpfCBmb3IgLis/KD89XFxcXSkvZywiJDEuKj8iKSsiJCIpO3ZhciBCdWZmZXI9bW9kdWxlRXhwb3J0cz9jb250ZXh0LkJ1ZmZlcjp1bmRlZmluZWQsU3ltYm9sPWNvbnRleHQuU3ltYm9sLFVpbnQ4QXJyYXk9Y29udGV4dC5VaW50OEFycmF5LGFsbG9jVW5zYWZlPQpCdWZmZXI/QnVmZmVyLmFsbG9jVW5zYWZlOnVuZGVmaW5lZCxnZXRQcm90b3R5cGU9b3ZlckFyZyhPYmplY3QuZ2V0UHJvdG90eXBlT2YsT2JqZWN0KSxvYmplY3RDcmVhdGU9T2JqZWN0LmNyZWF0ZSxwcm9wZXJ0eUlzRW51bWVyYWJsZT1vYmplY3RQcm90by5wcm9wZXJ0eUlzRW51bWVyYWJsZSxzcGxpY2U9YXJyYXlQcm90by5zcGxpY2Usc3ByZWFkYWJsZVN5bWJvbD1TeW1ib2w/U3ltYm9sLmlzQ29uY2F0U3ByZWFkYWJsZTp1bmRlZmluZWQsc3ltSXRlcmF0b3I9U3ltYm9sP1N5bWJvbC5pdGVyYXRvcjp1bmRlZmluZWQsc3ltVG9TdHJpbmdUYWc9U3ltYm9sP1N5bWJvbC50b1N0cmluZ1RhZzp1bmRlZmluZWQ7dmFyIGRlZmluZVByb3BlcnR5PWZ1bmN0aW9uKCl7dHJ5e3ZhciBmdW5jPWdldE5hdGl2ZShPYmplY3QsImRlZmluZVByb3BlcnR5Iik7ZnVuYyh7fSwiIix7fSk7cmV0dXJuIGZ1bmN9Y2F0Y2goZSl7fX0oKTt2YXIgY3R4Q2xlYXJUaW1lb3V0PWNvbnRleHQuY2xlYXJUaW1lb3V0IT09CnJvb3QuY2xlYXJUaW1lb3V0JiZjb250ZXh0LmNsZWFyVGltZW91dCxjdHhOb3c9RGF0ZSYmRGF0ZS5ub3chPT1yb290LkRhdGUubm93JiZEYXRlLm5vdyxjdHhTZXRUaW1lb3V0PWNvbnRleHQuc2V0VGltZW91dCE9PXJvb3Quc2V0VGltZW91dCYmY29udGV4dC5zZXRUaW1lb3V0O3ZhciBuYXRpdmVDZWlsPU1hdGguY2VpbCxuYXRpdmVGbG9vcj1NYXRoLmZsb29yLG5hdGl2ZUdldFN5bWJvbHM9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyxuYXRpdmVJc0J1ZmZlcj1CdWZmZXI/QnVmZmVyLmlzQnVmZmVyOnVuZGVmaW5lZCxuYXRpdmVJc0Zpbml0ZT1jb250ZXh0LmlzRmluaXRlLG5hdGl2ZUpvaW49YXJyYXlQcm90by5qb2luLG5hdGl2ZUtleXM9b3ZlckFyZyhPYmplY3Qua2V5cyxPYmplY3QpLG5hdGl2ZU1heD1NYXRoLm1heCxuYXRpdmVNaW49TWF0aC5taW4sbmF0aXZlTm93PURhdGUubm93LG5hdGl2ZVBhcnNlSW50PWNvbnRleHQucGFyc2VJbnQsbmF0aXZlUmFuZG9tPQpNYXRoLnJhbmRvbSxuYXRpdmVSZXZlcnNlPWFycmF5UHJvdG8ucmV2ZXJzZTt2YXIgRGF0YVZpZXc9Z2V0TmF0aXZlKGNvbnRleHQsIkRhdGFWaWV3IiksTWFwPWdldE5hdGl2ZShjb250ZXh0LCJNYXAiKSxQcm9taXNlPWdldE5hdGl2ZShjb250ZXh0LCJQcm9taXNlIiksU2V0PWdldE5hdGl2ZShjb250ZXh0LCJTZXQiKSxXZWFrTWFwPWdldE5hdGl2ZShjb250ZXh0LCJXZWFrTWFwIiksbmF0aXZlQ3JlYXRlPWdldE5hdGl2ZShPYmplY3QsImNyZWF0ZSIpO3ZhciBtZXRhTWFwPVdlYWtNYXAmJm5ldyBXZWFrTWFwO3ZhciByZWFsTmFtZXM9e307dmFyIGRhdGFWaWV3Q3RvclN0cmluZz10b1NvdXJjZShEYXRhVmlldyksbWFwQ3RvclN0cmluZz10b1NvdXJjZShNYXApLHByb21pc2VDdG9yU3RyaW5nPXRvU291cmNlKFByb21pc2UpLHNldEN0b3JTdHJpbmc9dG9Tb3VyY2UoU2V0KSx3ZWFrTWFwQ3RvclN0cmluZz10b1NvdXJjZShXZWFrTWFwKTt2YXIgc3ltYm9sUHJvdG89U3ltYm9sPwpTeW1ib2wucHJvdG90eXBlOnVuZGVmaW5lZCxzeW1ib2xWYWx1ZU9mPXN5bWJvbFByb3RvP3N5bWJvbFByb3RvLnZhbHVlT2Y6dW5kZWZpbmVkLHN5bWJvbFRvU3RyaW5nPXN5bWJvbFByb3RvP3N5bWJvbFByb3RvLnRvU3RyaW5nOnVuZGVmaW5lZDtmdW5jdGlvbiBsb2Rhc2godmFsdWUpe2lmKGlzT2JqZWN0TGlrZSh2YWx1ZSkmJiFpc0FycmF5KHZhbHVlKSYmISh2YWx1ZSBpbnN0YW5jZW9mIExhenlXcmFwcGVyKSl7aWYodmFsdWUgaW5zdGFuY2VvZiBMb2Rhc2hXcmFwcGVyKXJldHVybiB2YWx1ZTtpZihoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCJfX3dyYXBwZWRfXyIpKXJldHVybiB3cmFwcGVyQ2xvbmUodmFsdWUpfXJldHVybiBuZXcgTG9kYXNoV3JhcHBlcih2YWx1ZSl9dmFyIGJhc2VDcmVhdGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBvYmplY3QoKXt9cmV0dXJuIGZ1bmN0aW9uKHByb3RvKXtpZighaXNPYmplY3QocHJvdG8pKXJldHVybnt9O2lmKG9iamVjdENyZWF0ZSlyZXR1cm4gb2JqZWN0Q3JlYXRlKHByb3RvKTsKb2JqZWN0LnByb3RvdHlwZT1wcm90bzt2YXIgcmVzdWx0PW5ldyBvYmplY3Q7b2JqZWN0LnByb3RvdHlwZT11bmRlZmluZWQ7cmV0dXJuIHJlc3VsdH19KCk7ZnVuY3Rpb24gYmFzZUxvZGFzaCgpe31mdW5jdGlvbiBMb2Rhc2hXcmFwcGVyKHZhbHVlLGNoYWluQWxsKXt0aGlzLl9fd3JhcHBlZF9fPXZhbHVlO3RoaXMuX19hY3Rpb25zX189W107dGhpcy5fX2NoYWluX189ISFjaGFpbkFsbDt0aGlzLl9faW5kZXhfXz0wO3RoaXMuX192YWx1ZXNfXz11bmRlZmluZWR9bG9kYXNoLnRlbXBsYXRlU2V0dGluZ3M9eyJlc2NhcGUiOnJlRXNjYXBlLCJldmFsdWF0ZSI6cmVFdmFsdWF0ZSwiaW50ZXJwb2xhdGUiOnJlSW50ZXJwb2xhdGUsInZhcmlhYmxlIjoiIiwiaW1wb3J0cyI6eyJfIjpsb2Rhc2h9fTtsb2Rhc2gucHJvdG90eXBlPWJhc2VMb2Rhc2gucHJvdG90eXBlO2xvZGFzaC5wcm90b3R5cGUuY29uc3RydWN0b3I9bG9kYXNoO0xvZGFzaFdyYXBwZXIucHJvdG90eXBlPWJhc2VDcmVhdGUoYmFzZUxvZGFzaC5wcm90b3R5cGUpOwpMb2Rhc2hXcmFwcGVyLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1Mb2Rhc2hXcmFwcGVyO2Z1bmN0aW9uIExhenlXcmFwcGVyKHZhbHVlKXt0aGlzLl9fd3JhcHBlZF9fPXZhbHVlO3RoaXMuX19hY3Rpb25zX189W107dGhpcy5fX2Rpcl9fPTE7dGhpcy5fX2ZpbHRlcmVkX189ZmFsc2U7dGhpcy5fX2l0ZXJhdGVlc19fPVtdO3RoaXMuX190YWtlQ291bnRfXz1NQVhfQVJSQVlfTEVOR1RIO3RoaXMuX192aWV3c19fPVtdfWZ1bmN0aW9uIGxhenlDbG9uZSgpe3ZhciByZXN1bHQ9bmV3IExhenlXcmFwcGVyKHRoaXMuX193cmFwcGVkX18pO3Jlc3VsdC5fX2FjdGlvbnNfXz1jb3B5QXJyYXkodGhpcy5fX2FjdGlvbnNfXyk7cmVzdWx0Ll9fZGlyX189dGhpcy5fX2Rpcl9fO3Jlc3VsdC5fX2ZpbHRlcmVkX189dGhpcy5fX2ZpbHRlcmVkX187cmVzdWx0Ll9faXRlcmF0ZWVzX189Y29weUFycmF5KHRoaXMuX19pdGVyYXRlZXNfXyk7cmVzdWx0Ll9fdGFrZUNvdW50X189dGhpcy5fX3Rha2VDb3VudF9fOwpyZXN1bHQuX192aWV3c19fPWNvcHlBcnJheSh0aGlzLl9fdmlld3NfXyk7cmV0dXJuIHJlc3VsdH1mdW5jdGlvbiBsYXp5UmV2ZXJzZSgpe2lmKHRoaXMuX19maWx0ZXJlZF9fKXt2YXIgcmVzdWx0PW5ldyBMYXp5V3JhcHBlcih0aGlzKTtyZXN1bHQuX19kaXJfXz0tMTtyZXN1bHQuX19maWx0ZXJlZF9fPXRydWV9ZWxzZXtyZXN1bHQ9dGhpcy5jbG9uZSgpO3Jlc3VsdC5fX2Rpcl9fKj0tMX1yZXR1cm4gcmVzdWx0fWZ1bmN0aW9uIGxhenlWYWx1ZSgpe3ZhciBhcnJheT10aGlzLl9fd3JhcHBlZF9fLnZhbHVlKCksZGlyPXRoaXMuX19kaXJfXyxpc0Fycj1pc0FycmF5KGFycmF5KSxpc1JpZ2h0PWRpcjwwLGFyckxlbmd0aD1pc0Fycj9hcnJheS5sZW5ndGg6MCx2aWV3PWdldFZpZXcoMCxhcnJMZW5ndGgsdGhpcy5fX3ZpZXdzX18pLHN0YXJ0PXZpZXcuc3RhcnQsZW5kPXZpZXcuZW5kLGxlbmd0aD1lbmQtc3RhcnQsaW5kZXg9aXNSaWdodD9lbmQ6c3RhcnQtMSxpdGVyYXRlZXM9dGhpcy5fX2l0ZXJhdGVlc19fLAppdGVyTGVuZ3RoPWl0ZXJhdGVlcy5sZW5ndGgscmVzSW5kZXg9MCx0YWtlQ291bnQ9bmF0aXZlTWluKGxlbmd0aCx0aGlzLl9fdGFrZUNvdW50X18pO2lmKCFpc0Fycnx8IWlzUmlnaHQmJmFyckxlbmd0aD09bGVuZ3RoJiZ0YWtlQ291bnQ9PWxlbmd0aClyZXR1cm4gYmFzZVdyYXBwZXJWYWx1ZShhcnJheSx0aGlzLl9fYWN0aW9uc19fKTt2YXIgcmVzdWx0PVtdO291dGVyOndoaWxlKGxlbmd0aC0tJiZyZXNJbmRleDx0YWtlQ291bnQpe2luZGV4Kz1kaXI7dmFyIGl0ZXJJbmRleD0tMSx2YWx1ZT1hcnJheVtpbmRleF07d2hpbGUoKytpdGVySW5kZXg8aXRlckxlbmd0aCl7dmFyIGRhdGE9aXRlcmF0ZWVzW2l0ZXJJbmRleF0saXRlcmF0ZWU9ZGF0YS5pdGVyYXRlZSx0eXBlPWRhdGEudHlwZSxjb21wdXRlZD1pdGVyYXRlZSh2YWx1ZSk7aWYodHlwZT09TEFaWV9NQVBfRkxBRyl2YWx1ZT1jb21wdXRlZDtlbHNlIGlmKCFjb21wdXRlZClpZih0eXBlPT1MQVpZX0ZJTFRFUl9GTEFHKWNvbnRpbnVlIG91dGVyOwplbHNlIGJyZWFrIG91dGVyfXJlc3VsdFtyZXNJbmRleCsrXT12YWx1ZX1yZXR1cm4gcmVzdWx0fUxhenlXcmFwcGVyLnByb3RvdHlwZT1iYXNlQ3JlYXRlKGJhc2VMb2Rhc2gucHJvdG90eXBlKTtMYXp5V3JhcHBlci5wcm90b3R5cGUuY29uc3RydWN0b3I9TGF6eVdyYXBwZXI7ZnVuY3Rpb24gSGFzaChlbnRyaWVzKXt2YXIgaW5kZXg9LTEsbGVuZ3RoPWVudHJpZXM9PW51bGw/MDplbnRyaWVzLmxlbmd0aDt0aGlzLmNsZWFyKCk7d2hpbGUoKytpbmRleDxsZW5ndGgpe3ZhciBlbnRyeT1lbnRyaWVzW2luZGV4XTt0aGlzLnNldChlbnRyeVswXSxlbnRyeVsxXSl9fWZ1bmN0aW9uIGhhc2hDbGVhcigpe3RoaXMuX19kYXRhX189bmF0aXZlQ3JlYXRlP25hdGl2ZUNyZWF0ZShudWxsKTp7fTt0aGlzLnNpemU9MH1mdW5jdGlvbiBoYXNoRGVsZXRlKGtleSl7dmFyIHJlc3VsdD10aGlzLmhhcyhrZXkpJiZkZWxldGUgdGhpcy5fX2RhdGFfX1trZXldO3RoaXMuc2l6ZS09cmVzdWx0PzE6MDsKcmV0dXJuIHJlc3VsdH1mdW5jdGlvbiBoYXNoR2V0KGtleSl7dmFyIGRhdGE9dGhpcy5fX2RhdGFfXztpZihuYXRpdmVDcmVhdGUpe3ZhciByZXN1bHQ9ZGF0YVtrZXldO3JldHVybiByZXN1bHQ9PT1IQVNIX1VOREVGSU5FRD91bmRlZmluZWQ6cmVzdWx0fXJldHVybiBoYXNPd25Qcm9wZXJ0eS5jYWxsKGRhdGEsa2V5KT9kYXRhW2tleV06dW5kZWZpbmVkfWZ1bmN0aW9uIGhhc2hIYXMoa2V5KXt2YXIgZGF0YT10aGlzLl9fZGF0YV9fO3JldHVybiBuYXRpdmVDcmVhdGU/ZGF0YVtrZXldIT09dW5kZWZpbmVkOmhhc093blByb3BlcnR5LmNhbGwoZGF0YSxrZXkpfWZ1bmN0aW9uIGhhc2hTZXQoa2V5LHZhbHVlKXt2YXIgZGF0YT10aGlzLl9fZGF0YV9fO3RoaXMuc2l6ZSs9dGhpcy5oYXMoa2V5KT8wOjE7ZGF0YVtrZXldPW5hdGl2ZUNyZWF0ZSYmdmFsdWU9PT11bmRlZmluZWQ/SEFTSF9VTkRFRklORUQ6dmFsdWU7cmV0dXJuIHRoaXN9SGFzaC5wcm90b3R5cGUuY2xlYXI9aGFzaENsZWFyOwpIYXNoLnByb3RvdHlwZVsiZGVsZXRlIl09aGFzaERlbGV0ZTtIYXNoLnByb3RvdHlwZS5nZXQ9aGFzaEdldDtIYXNoLnByb3RvdHlwZS5oYXM9aGFzaEhhcztIYXNoLnByb3RvdHlwZS5zZXQ9aGFzaFNldDtmdW5jdGlvbiBMaXN0Q2FjaGUoZW50cmllcyl7dmFyIGluZGV4PS0xLGxlbmd0aD1lbnRyaWVzPT1udWxsPzA6ZW50cmllcy5sZW5ndGg7dGhpcy5jbGVhcigpO3doaWxlKCsraW5kZXg8bGVuZ3RoKXt2YXIgZW50cnk9ZW50cmllc1tpbmRleF07dGhpcy5zZXQoZW50cnlbMF0sZW50cnlbMV0pfX1mdW5jdGlvbiBsaXN0Q2FjaGVDbGVhcigpe3RoaXMuX19kYXRhX189W107dGhpcy5zaXplPTB9ZnVuY3Rpb24gbGlzdENhY2hlRGVsZXRlKGtleSl7dmFyIGRhdGE9dGhpcy5fX2RhdGFfXyxpbmRleD1hc3NvY0luZGV4T2YoZGF0YSxrZXkpO2lmKGluZGV4PDApcmV0dXJuIGZhbHNlO3ZhciBsYXN0SW5kZXg9ZGF0YS5sZW5ndGgtMTtpZihpbmRleD09bGFzdEluZGV4KWRhdGEucG9wKCk7CmVsc2Ugc3BsaWNlLmNhbGwoZGF0YSxpbmRleCwxKTstLXRoaXMuc2l6ZTtyZXR1cm4gdHJ1ZX1mdW5jdGlvbiBsaXN0Q2FjaGVHZXQoa2V5KXt2YXIgZGF0YT10aGlzLl9fZGF0YV9fLGluZGV4PWFzc29jSW5kZXhPZihkYXRhLGtleSk7cmV0dXJuIGluZGV4PDA/dW5kZWZpbmVkOmRhdGFbaW5kZXhdWzFdfWZ1bmN0aW9uIGxpc3RDYWNoZUhhcyhrZXkpe3JldHVybiBhc3NvY0luZGV4T2YodGhpcy5fX2RhdGFfXyxrZXkpPi0xfWZ1bmN0aW9uIGxpc3RDYWNoZVNldChrZXksdmFsdWUpe3ZhciBkYXRhPXRoaXMuX19kYXRhX18saW5kZXg9YXNzb2NJbmRleE9mKGRhdGEsa2V5KTtpZihpbmRleDwwKXsrK3RoaXMuc2l6ZTtkYXRhLnB1c2goW2tleSx2YWx1ZV0pfWVsc2UgZGF0YVtpbmRleF1bMV09dmFsdWU7cmV0dXJuIHRoaXN9TGlzdENhY2hlLnByb3RvdHlwZS5jbGVhcj1saXN0Q2FjaGVDbGVhcjtMaXN0Q2FjaGUucHJvdG90eXBlWyJkZWxldGUiXT1saXN0Q2FjaGVEZWxldGU7TGlzdENhY2hlLnByb3RvdHlwZS5nZXQ9Cmxpc3RDYWNoZUdldDtMaXN0Q2FjaGUucHJvdG90eXBlLmhhcz1saXN0Q2FjaGVIYXM7TGlzdENhY2hlLnByb3RvdHlwZS5zZXQ9bGlzdENhY2hlU2V0O2Z1bmN0aW9uIE1hcENhY2hlKGVudHJpZXMpe3ZhciBpbmRleD0tMSxsZW5ndGg9ZW50cmllcz09bnVsbD8wOmVudHJpZXMubGVuZ3RoO3RoaXMuY2xlYXIoKTt3aGlsZSgrK2luZGV4PGxlbmd0aCl7dmFyIGVudHJ5PWVudHJpZXNbaW5kZXhdO3RoaXMuc2V0KGVudHJ5WzBdLGVudHJ5WzFdKX19ZnVuY3Rpb24gbWFwQ2FjaGVDbGVhcigpe3RoaXMuc2l6ZT0wO3RoaXMuX19kYXRhX189eyJoYXNoIjpuZXcgSGFzaCwibWFwIjpuZXcgKE1hcHx8TGlzdENhY2hlKSwic3RyaW5nIjpuZXcgSGFzaH19ZnVuY3Rpb24gbWFwQ2FjaGVEZWxldGUoa2V5KXt2YXIgcmVzdWx0PWdldE1hcERhdGEodGhpcyxrZXkpWyJkZWxldGUiXShrZXkpO3RoaXMuc2l6ZS09cmVzdWx0PzE6MDtyZXR1cm4gcmVzdWx0fWZ1bmN0aW9uIG1hcENhY2hlR2V0KGtleSl7cmV0dXJuIGdldE1hcERhdGEodGhpcywKa2V5KS5nZXQoa2V5KX1mdW5jdGlvbiBtYXBDYWNoZUhhcyhrZXkpe3JldHVybiBnZXRNYXBEYXRhKHRoaXMsa2V5KS5oYXMoa2V5KX1mdW5jdGlvbiBtYXBDYWNoZVNldChrZXksdmFsdWUpe3ZhciBkYXRhPWdldE1hcERhdGEodGhpcyxrZXkpLHNpemU9ZGF0YS5zaXplO2RhdGEuc2V0KGtleSx2YWx1ZSk7dGhpcy5zaXplKz1kYXRhLnNpemU9PXNpemU/MDoxO3JldHVybiB0aGlzfU1hcENhY2hlLnByb3RvdHlwZS5jbGVhcj1tYXBDYWNoZUNsZWFyO01hcENhY2hlLnByb3RvdHlwZVsiZGVsZXRlIl09bWFwQ2FjaGVEZWxldGU7TWFwQ2FjaGUucHJvdG90eXBlLmdldD1tYXBDYWNoZUdldDtNYXBDYWNoZS5wcm90b3R5cGUuaGFzPW1hcENhY2hlSGFzO01hcENhY2hlLnByb3RvdHlwZS5zZXQ9bWFwQ2FjaGVTZXQ7ZnVuY3Rpb24gU2V0Q2FjaGUodmFsdWVzKXt2YXIgaW5kZXg9LTEsbGVuZ3RoPXZhbHVlcz09bnVsbD8wOnZhbHVlcy5sZW5ndGg7dGhpcy5fX2RhdGFfXz1uZXcgTWFwQ2FjaGU7CndoaWxlKCsraW5kZXg8bGVuZ3RoKXRoaXMuYWRkKHZhbHVlc1tpbmRleF0pfWZ1bmN0aW9uIHNldENhY2hlQWRkKHZhbHVlKXt0aGlzLl9fZGF0YV9fLnNldCh2YWx1ZSxIQVNIX1VOREVGSU5FRCk7cmV0dXJuIHRoaXN9ZnVuY3Rpb24gc2V0Q2FjaGVIYXModmFsdWUpe3JldHVybiB0aGlzLl9fZGF0YV9fLmhhcyh2YWx1ZSl9U2V0Q2FjaGUucHJvdG90eXBlLmFkZD1TZXRDYWNoZS5wcm90b3R5cGUucHVzaD1zZXRDYWNoZUFkZDtTZXRDYWNoZS5wcm90b3R5cGUuaGFzPXNldENhY2hlSGFzO2Z1bmN0aW9uIFN0YWNrKGVudHJpZXMpe3ZhciBkYXRhPXRoaXMuX19kYXRhX189bmV3IExpc3RDYWNoZShlbnRyaWVzKTt0aGlzLnNpemU9ZGF0YS5zaXplfWZ1bmN0aW9uIHN0YWNrQ2xlYXIoKXt0aGlzLl9fZGF0YV9fPW5ldyBMaXN0Q2FjaGU7dGhpcy5zaXplPTB9ZnVuY3Rpb24gc3RhY2tEZWxldGUoa2V5KXt2YXIgZGF0YT10aGlzLl9fZGF0YV9fLHJlc3VsdD1kYXRhWyJkZWxldGUiXShrZXkpOwp0aGlzLnNpemU9ZGF0YS5zaXplO3JldHVybiByZXN1bHR9ZnVuY3Rpb24gc3RhY2tHZXQoa2V5KXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5nZXQoa2V5KX1mdW5jdGlvbiBzdGFja0hhcyhrZXkpe3JldHVybiB0aGlzLl9fZGF0YV9fLmhhcyhrZXkpfWZ1bmN0aW9uIHN0YWNrU2V0KGtleSx2YWx1ZSl7dmFyIGRhdGE9dGhpcy5fX2RhdGFfXztpZihkYXRhIGluc3RhbmNlb2YgTGlzdENhY2hlKXt2YXIgcGFpcnM9ZGF0YS5fX2RhdGFfXztpZighTWFwfHxwYWlycy5sZW5ndGg8TEFSR0VfQVJSQVlfU0laRS0xKXtwYWlycy5wdXNoKFtrZXksdmFsdWVdKTt0aGlzLnNpemU9KytkYXRhLnNpemU7cmV0dXJuIHRoaXN9ZGF0YT10aGlzLl9fZGF0YV9fPW5ldyBNYXBDYWNoZShwYWlycyl9ZGF0YS5zZXQoa2V5LHZhbHVlKTt0aGlzLnNpemU9ZGF0YS5zaXplO3JldHVybiB0aGlzfVN0YWNrLnByb3RvdHlwZS5jbGVhcj1zdGFja0NsZWFyO1N0YWNrLnByb3RvdHlwZVsiZGVsZXRlIl09c3RhY2tEZWxldGU7ClN0YWNrLnByb3RvdHlwZS5nZXQ9c3RhY2tHZXQ7U3RhY2sucHJvdG90eXBlLmhhcz1zdGFja0hhcztTdGFjay5wcm90b3R5cGUuc2V0PXN0YWNrU2V0O2Z1bmN0aW9uIGFycmF5TGlrZUtleXModmFsdWUsaW5oZXJpdGVkKXt2YXIgaXNBcnI9aXNBcnJheSh2YWx1ZSksaXNBcmc9IWlzQXJyJiZpc0FyZ3VtZW50cyh2YWx1ZSksaXNCdWZmPSFpc0FyciYmIWlzQXJnJiZpc0J1ZmZlcih2YWx1ZSksaXNUeXBlPSFpc0FyciYmIWlzQXJnJiYhaXNCdWZmJiZpc1R5cGVkQXJyYXkodmFsdWUpLHNraXBJbmRleGVzPWlzQXJyfHxpc0FyZ3x8aXNCdWZmfHxpc1R5cGUscmVzdWx0PXNraXBJbmRleGVzP2Jhc2VUaW1lcyh2YWx1ZS5sZW5ndGgsU3RyaW5nKTpbXSxsZW5ndGg9cmVzdWx0Lmxlbmd0aDtmb3IodmFyIGtleSBpbiB2YWx1ZSlpZigoaW5oZXJpdGVkfHxoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLGtleSkpJiYhKHNraXBJbmRleGVzJiYoa2V5PT0ibGVuZ3RoInx8aXNCdWZmJiYoa2V5PT0KIm9mZnNldCJ8fGtleT09InBhcmVudCIpfHxpc1R5cGUmJihrZXk9PSJidWZmZXIifHxrZXk9PSJieXRlTGVuZ3RoInx8a2V5PT0iYnl0ZU9mZnNldCIpfHxpc0luZGV4KGtleSxsZW5ndGgpKSkpcmVzdWx0LnB1c2goa2V5KTtyZXR1cm4gcmVzdWx0fWZ1bmN0aW9uIGFycmF5U2FtcGxlKGFycmF5KXt2YXIgbGVuZ3RoPWFycmF5Lmxlbmd0aDtyZXR1cm4gbGVuZ3RoP2FycmF5W2Jhc2VSYW5kb20oMCxsZW5ndGgtMSldOnVuZGVmaW5lZH1mdW5jdGlvbiBhcnJheVNhbXBsZVNpemUoYXJyYXksbil7cmV0dXJuIHNodWZmbGVTZWxmKGNvcHlBcnJheShhcnJheSksYmFzZUNsYW1wKG4sMCxhcnJheS5sZW5ndGgpKX1mdW5jdGlvbiBhcnJheVNodWZmbGUoYXJyYXkpe3JldHVybiBzaHVmZmxlU2VsZihjb3B5QXJyYXkoYXJyYXkpKX1mdW5jdGlvbiBhc3NpZ25NZXJnZVZhbHVlKG9iamVjdCxrZXksdmFsdWUpe2lmKHZhbHVlIT09dW5kZWZpbmVkJiYhZXEob2JqZWN0W2tleV0sdmFsdWUpfHwKdmFsdWU9PT11bmRlZmluZWQmJiEoa2V5IGluIG9iamVjdCkpYmFzZUFzc2lnblZhbHVlKG9iamVjdCxrZXksdmFsdWUpfWZ1bmN0aW9uIGFzc2lnblZhbHVlKG9iamVjdCxrZXksdmFsdWUpe3ZhciBvYmpWYWx1ZT1vYmplY3Rba2V5XTtpZighKGhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LGtleSkmJmVxKG9ialZhbHVlLHZhbHVlKSl8fHZhbHVlPT09dW5kZWZpbmVkJiYhKGtleSBpbiBvYmplY3QpKWJhc2VBc3NpZ25WYWx1ZShvYmplY3Qsa2V5LHZhbHVlKX1mdW5jdGlvbiBhc3NvY0luZGV4T2YoYXJyYXksa2V5KXt2YXIgbGVuZ3RoPWFycmF5Lmxlbmd0aDt3aGlsZShsZW5ndGgtLSlpZihlcShhcnJheVtsZW5ndGhdWzBdLGtleSkpcmV0dXJuIGxlbmd0aDtyZXR1cm4tMX1mdW5jdGlvbiBiYXNlQWdncmVnYXRvcihjb2xsZWN0aW9uLHNldHRlcixpdGVyYXRlZSxhY2N1bXVsYXRvcil7YmFzZUVhY2goY29sbGVjdGlvbixmdW5jdGlvbih2YWx1ZSxrZXksY29sbGVjdGlvbil7c2V0dGVyKGFjY3VtdWxhdG9yLAp2YWx1ZSxpdGVyYXRlZSh2YWx1ZSksY29sbGVjdGlvbil9KTtyZXR1cm4gYWNjdW11bGF0b3J9ZnVuY3Rpb24gYmFzZUFzc2lnbihvYmplY3Qsc291cmNlKXtyZXR1cm4gb2JqZWN0JiZjb3B5T2JqZWN0KHNvdXJjZSxrZXlzKHNvdXJjZSksb2JqZWN0KX1mdW5jdGlvbiBiYXNlQXNzaWduSW4ob2JqZWN0LHNvdXJjZSl7cmV0dXJuIG9iamVjdCYmY29weU9iamVjdChzb3VyY2Usa2V5c0luKHNvdXJjZSksb2JqZWN0KX1mdW5jdGlvbiBiYXNlQXNzaWduVmFsdWUob2JqZWN0LGtleSx2YWx1ZSl7aWYoa2V5PT0iX19wcm90b19fIiYmZGVmaW5lUHJvcGVydHkpZGVmaW5lUHJvcGVydHkob2JqZWN0LGtleSx7ImNvbmZpZ3VyYWJsZSI6dHJ1ZSwiZW51bWVyYWJsZSI6dHJ1ZSwidmFsdWUiOnZhbHVlLCJ3cml0YWJsZSI6dHJ1ZX0pO2Vsc2Ugb2JqZWN0W2tleV09dmFsdWV9ZnVuY3Rpb24gYmFzZUF0KG9iamVjdCxwYXRocyl7dmFyIGluZGV4PS0xLGxlbmd0aD1wYXRocy5sZW5ndGgscmVzdWx0PQpBcnJheShsZW5ndGgpLHNraXA9b2JqZWN0PT1udWxsO3doaWxlKCsraW5kZXg8bGVuZ3RoKXJlc3VsdFtpbmRleF09c2tpcD91bmRlZmluZWQ6Z2V0KG9iamVjdCxwYXRoc1tpbmRleF0pO3JldHVybiByZXN1bHR9ZnVuY3Rpb24gYmFzZUNsYW1wKG51bWJlcixsb3dlcix1cHBlcil7aWYobnVtYmVyPT09bnVtYmVyKXtpZih1cHBlciE9PXVuZGVmaW5lZCludW1iZXI9bnVtYmVyPD11cHBlcj9udW1iZXI6dXBwZXI7aWYobG93ZXIhPT11bmRlZmluZWQpbnVtYmVyPW51bWJlcj49bG93ZXI/bnVtYmVyOmxvd2VyfXJldHVybiBudW1iZXJ9ZnVuY3Rpb24gYmFzZUNsb25lKHZhbHVlLGJpdG1hc2ssY3VzdG9taXplcixrZXksb2JqZWN0LHN0YWNrKXt2YXIgcmVzdWx0LGlzRGVlcD1iaXRtYXNrJkNMT05FX0RFRVBfRkxBRyxpc0ZsYXQ9Yml0bWFzayZDTE9ORV9GTEFUX0ZMQUcsaXNGdWxsPWJpdG1hc2smQ0xPTkVfU1lNQk9MU19GTEFHO2lmKGN1c3RvbWl6ZXIpcmVzdWx0PW9iamVjdD8KY3VzdG9taXplcih2YWx1ZSxrZXksb2JqZWN0LHN0YWNrKTpjdXN0b21pemVyKHZhbHVlKTtpZihyZXN1bHQhPT11bmRlZmluZWQpcmV0dXJuIHJlc3VsdDtpZighaXNPYmplY3QodmFsdWUpKXJldHVybiB2YWx1ZTt2YXIgaXNBcnI9aXNBcnJheSh2YWx1ZSk7aWYoaXNBcnIpe3Jlc3VsdD1pbml0Q2xvbmVBcnJheSh2YWx1ZSk7aWYoIWlzRGVlcClyZXR1cm4gY29weUFycmF5KHZhbHVlLHJlc3VsdCl9ZWxzZXt2YXIgdGFnPWdldFRhZyh2YWx1ZSksaXNGdW5jPXRhZz09ZnVuY1RhZ3x8dGFnPT1nZW5UYWc7aWYoaXNCdWZmZXIodmFsdWUpKXJldHVybiBjbG9uZUJ1ZmZlcih2YWx1ZSxpc0RlZXApO2lmKHRhZz09b2JqZWN0VGFnfHx0YWc9PWFyZ3NUYWd8fGlzRnVuYyYmIW9iamVjdCl7cmVzdWx0PWlzRmxhdHx8aXNGdW5jP3t9OmluaXRDbG9uZU9iamVjdCh2YWx1ZSk7aWYoIWlzRGVlcClyZXR1cm4gaXNGbGF0P2NvcHlTeW1ib2xzSW4odmFsdWUsYmFzZUFzc2lnbkluKHJlc3VsdCwKdmFsdWUpKTpjb3B5U3ltYm9scyh2YWx1ZSxiYXNlQXNzaWduKHJlc3VsdCx2YWx1ZSkpfWVsc2V7aWYoIWNsb25lYWJsZVRhZ3NbdGFnXSlyZXR1cm4gb2JqZWN0P3ZhbHVlOnt9O3Jlc3VsdD1pbml0Q2xvbmVCeVRhZyh2YWx1ZSx0YWcsaXNEZWVwKX19c3RhY2t8fChzdGFjaz1uZXcgU3RhY2spO3ZhciBzdGFja2VkPXN0YWNrLmdldCh2YWx1ZSk7aWYoc3RhY2tlZClyZXR1cm4gc3RhY2tlZDtzdGFjay5zZXQodmFsdWUscmVzdWx0KTtpZihpc1NldCh2YWx1ZSkpe3ZhbHVlLmZvckVhY2goZnVuY3Rpb24oc3ViVmFsdWUpe3Jlc3VsdC5hZGQoYmFzZUNsb25lKHN1YlZhbHVlLGJpdG1hc2ssY3VzdG9taXplcixzdWJWYWx1ZSx2YWx1ZSxzdGFjaykpfSk7cmV0dXJuIHJlc3VsdH1pZihpc01hcCh2YWx1ZSkpe3ZhbHVlLmZvckVhY2goZnVuY3Rpb24oc3ViVmFsdWUsa2V5KXtyZXN1bHQuc2V0KGtleSxiYXNlQ2xvbmUoc3ViVmFsdWUsYml0bWFzayxjdXN0b21pemVyLGtleSx2YWx1ZSwKc3RhY2spKX0pO3JldHVybiByZXN1bHR9dmFyIGtleXNGdW5jPWlzRnVsbD9pc0ZsYXQ/Z2V0QWxsS2V5c0luOmdldEFsbEtleXM6aXNGbGF0P2tleXNJbjprZXlzO3ZhciBwcm9wcz1pc0Fycj91bmRlZmluZWQ6a2V5c0Z1bmModmFsdWUpO2FycmF5RWFjaChwcm9wc3x8dmFsdWUsZnVuY3Rpb24oc3ViVmFsdWUsa2V5KXtpZihwcm9wcyl7a2V5PXN1YlZhbHVlO3N1YlZhbHVlPXZhbHVlW2tleV19YXNzaWduVmFsdWUocmVzdWx0LGtleSxiYXNlQ2xvbmUoc3ViVmFsdWUsYml0bWFzayxjdXN0b21pemVyLGtleSx2YWx1ZSxzdGFjaykpfSk7cmV0dXJuIHJlc3VsdH1mdW5jdGlvbiBiYXNlQ29uZm9ybXMoc291cmNlKXt2YXIgcHJvcHM9a2V5cyhzb3VyY2UpO3JldHVybiBmdW5jdGlvbihvYmplY3Qpe3JldHVybiBiYXNlQ29uZm9ybXNUbyhvYmplY3Qsc291cmNlLHByb3BzKX19ZnVuY3Rpb24gYmFzZUNvbmZvcm1zVG8ob2JqZWN0LHNvdXJjZSxwcm9wcyl7dmFyIGxlbmd0aD1wcm9wcy5sZW5ndGg7CmlmKG9iamVjdD09bnVsbClyZXR1cm4hbGVuZ3RoO29iamVjdD1PYmplY3Qob2JqZWN0KTt3aGlsZShsZW5ndGgtLSl7dmFyIGtleT1wcm9wc1tsZW5ndGhdLHByZWRpY2F0ZT1zb3VyY2Vba2V5XSx2YWx1ZT1vYmplY3Rba2V5XTtpZih2YWx1ZT09PXVuZGVmaW5lZCYmIShrZXkgaW4gb2JqZWN0KXx8IXByZWRpY2F0ZSh2YWx1ZSkpcmV0dXJuIGZhbHNlfXJldHVybiB0cnVlfWZ1bmN0aW9uIGJhc2VEZWxheShmdW5jLHdhaXQsYXJncyl7aWYodHlwZW9mIGZ1bmMhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpO3JldHVybiBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZnVuYy5hcHBseSh1bmRlZmluZWQsYXJncyl9LHdhaXQpfWZ1bmN0aW9uIGJhc2VEaWZmZXJlbmNlKGFycmF5LHZhbHVlcyxpdGVyYXRlZSxjb21wYXJhdG9yKXt2YXIgaW5kZXg9LTEsaW5jbHVkZXM9YXJyYXlJbmNsdWRlcyxpc0NvbW1vbj10cnVlLGxlbmd0aD1hcnJheS5sZW5ndGgsCnJlc3VsdD1bXSx2YWx1ZXNMZW5ndGg9dmFsdWVzLmxlbmd0aDtpZighbGVuZ3RoKXJldHVybiByZXN1bHQ7aWYoaXRlcmF0ZWUpdmFsdWVzPWFycmF5TWFwKHZhbHVlcyxiYXNlVW5hcnkoaXRlcmF0ZWUpKTtpZihjb21wYXJhdG9yKXtpbmNsdWRlcz1hcnJheUluY2x1ZGVzV2l0aDtpc0NvbW1vbj1mYWxzZX1lbHNlIGlmKHZhbHVlcy5sZW5ndGg+PUxBUkdFX0FSUkFZX1NJWkUpe2luY2x1ZGVzPWNhY2hlSGFzO2lzQ29tbW9uPWZhbHNlO3ZhbHVlcz1uZXcgU2V0Q2FjaGUodmFsdWVzKX1vdXRlcjp3aGlsZSgrK2luZGV4PGxlbmd0aCl7dmFyIHZhbHVlPWFycmF5W2luZGV4XSxjb21wdXRlZD1pdGVyYXRlZT09bnVsbD92YWx1ZTppdGVyYXRlZSh2YWx1ZSk7dmFsdWU9Y29tcGFyYXRvcnx8dmFsdWUhPT0wP3ZhbHVlOjA7aWYoaXNDb21tb24mJmNvbXB1dGVkPT09Y29tcHV0ZWQpe3ZhciB2YWx1ZXNJbmRleD12YWx1ZXNMZW5ndGg7d2hpbGUodmFsdWVzSW5kZXgtLSlpZih2YWx1ZXNbdmFsdWVzSW5kZXhdPT09CmNvbXB1dGVkKWNvbnRpbnVlIG91dGVyO3Jlc3VsdC5wdXNoKHZhbHVlKX1lbHNlIGlmKCFpbmNsdWRlcyh2YWx1ZXMsY29tcHV0ZWQsY29tcGFyYXRvcikpcmVzdWx0LnB1c2godmFsdWUpfXJldHVybiByZXN1bHR9dmFyIGJhc2VFYWNoPWNyZWF0ZUJhc2VFYWNoKGJhc2VGb3JPd24pO3ZhciBiYXNlRWFjaFJpZ2h0PWNyZWF0ZUJhc2VFYWNoKGJhc2VGb3JPd25SaWdodCx0cnVlKTtmdW5jdGlvbiBiYXNlRXZlcnkoY29sbGVjdGlvbixwcmVkaWNhdGUpe3ZhciByZXN1bHQ9dHJ1ZTtiYXNlRWFjaChjb2xsZWN0aW9uLGZ1bmN0aW9uKHZhbHVlLGluZGV4LGNvbGxlY3Rpb24pe3Jlc3VsdD0hIXByZWRpY2F0ZSh2YWx1ZSxpbmRleCxjb2xsZWN0aW9uKTtyZXR1cm4gcmVzdWx0fSk7cmV0dXJuIHJlc3VsdH1mdW5jdGlvbiBiYXNlRXh0cmVtdW0oYXJyYXksaXRlcmF0ZWUsY29tcGFyYXRvcil7dmFyIGluZGV4PS0xLGxlbmd0aD1hcnJheS5sZW5ndGg7d2hpbGUoKytpbmRleDxsZW5ndGgpe3ZhciB2YWx1ZT0KYXJyYXlbaW5kZXhdLGN1cnJlbnQ9aXRlcmF0ZWUodmFsdWUpO2lmKGN1cnJlbnQhPW51bGwmJihjb21wdXRlZD09PXVuZGVmaW5lZD9jdXJyZW50PT09Y3VycmVudCYmIWlzU3ltYm9sKGN1cnJlbnQpOmNvbXBhcmF0b3IoY3VycmVudCxjb21wdXRlZCkpKXZhciBjb21wdXRlZD1jdXJyZW50LHJlc3VsdD12YWx1ZX1yZXR1cm4gcmVzdWx0fWZ1bmN0aW9uIGJhc2VGaWxsKGFycmF5LHZhbHVlLHN0YXJ0LGVuZCl7dmFyIGxlbmd0aD1hcnJheS5sZW5ndGg7c3RhcnQ9dG9JbnRlZ2VyKHN0YXJ0KTtpZihzdGFydDwwKXN0YXJ0PS1zdGFydD5sZW5ndGg/MDpsZW5ndGgrc3RhcnQ7ZW5kPWVuZD09PXVuZGVmaW5lZHx8ZW5kPmxlbmd0aD9sZW5ndGg6dG9JbnRlZ2VyKGVuZCk7aWYoZW5kPDApZW5kKz1sZW5ndGg7ZW5kPXN0YXJ0PmVuZD8wOnRvTGVuZ3RoKGVuZCk7d2hpbGUoc3RhcnQ8ZW5kKWFycmF5W3N0YXJ0KytdPXZhbHVlO3JldHVybiBhcnJheX1mdW5jdGlvbiBiYXNlRmlsdGVyKGNvbGxlY3Rpb24sCnByZWRpY2F0ZSl7dmFyIHJlc3VsdD1bXTtiYXNlRWFjaChjb2xsZWN0aW9uLGZ1bmN0aW9uKHZhbHVlLGluZGV4LGNvbGxlY3Rpb24pe2lmKHByZWRpY2F0ZSh2YWx1ZSxpbmRleCxjb2xsZWN0aW9uKSlyZXN1bHQucHVzaCh2YWx1ZSl9KTtyZXR1cm4gcmVzdWx0fWZ1bmN0aW9uIGJhc2VGbGF0dGVuKGFycmF5LGRlcHRoLHByZWRpY2F0ZSxpc1N0cmljdCxyZXN1bHQpe3ZhciBpbmRleD0tMSxsZW5ndGg9YXJyYXkubGVuZ3RoO3ByZWRpY2F0ZXx8KHByZWRpY2F0ZT1pc0ZsYXR0ZW5hYmxlKTtyZXN1bHR8fChyZXN1bHQ9W10pO3doaWxlKCsraW5kZXg8bGVuZ3RoKXt2YXIgdmFsdWU9YXJyYXlbaW5kZXhdO2lmKGRlcHRoPjAmJnByZWRpY2F0ZSh2YWx1ZSkpaWYoZGVwdGg+MSliYXNlRmxhdHRlbih2YWx1ZSxkZXB0aC0xLHByZWRpY2F0ZSxpc1N0cmljdCxyZXN1bHQpO2Vsc2UgYXJyYXlQdXNoKHJlc3VsdCx2YWx1ZSk7ZWxzZSBpZighaXNTdHJpY3QpcmVzdWx0W3Jlc3VsdC5sZW5ndGhdPQp2YWx1ZX1yZXR1cm4gcmVzdWx0fXZhciBiYXNlRm9yPWNyZWF0ZUJhc2VGb3IoKTt2YXIgYmFzZUZvclJpZ2h0PWNyZWF0ZUJhc2VGb3IodHJ1ZSk7ZnVuY3Rpb24gYmFzZUZvck93bihvYmplY3QsaXRlcmF0ZWUpe3JldHVybiBvYmplY3QmJmJhc2VGb3Iob2JqZWN0LGl0ZXJhdGVlLGtleXMpfWZ1bmN0aW9uIGJhc2VGb3JPd25SaWdodChvYmplY3QsaXRlcmF0ZWUpe3JldHVybiBvYmplY3QmJmJhc2VGb3JSaWdodChvYmplY3QsaXRlcmF0ZWUsa2V5cyl9ZnVuY3Rpb24gYmFzZUZ1bmN0aW9ucyhvYmplY3QscHJvcHMpe3JldHVybiBhcnJheUZpbHRlcihwcm9wcyxmdW5jdGlvbihrZXkpe3JldHVybiBpc0Z1bmN0aW9uKG9iamVjdFtrZXldKX0pfWZ1bmN0aW9uIGJhc2VHZXQob2JqZWN0LHBhdGgpe3BhdGg9Y2FzdFBhdGgocGF0aCxvYmplY3QpO3ZhciBpbmRleD0wLGxlbmd0aD1wYXRoLmxlbmd0aDt3aGlsZShvYmplY3QhPW51bGwmJmluZGV4PGxlbmd0aClvYmplY3Q9b2JqZWN0W3RvS2V5KHBhdGhbaW5kZXgrK10pXTsKcmV0dXJuIGluZGV4JiZpbmRleD09bGVuZ3RoP29iamVjdDp1bmRlZmluZWR9ZnVuY3Rpb24gYmFzZUdldEFsbEtleXMob2JqZWN0LGtleXNGdW5jLHN5bWJvbHNGdW5jKXt2YXIgcmVzdWx0PWtleXNGdW5jKG9iamVjdCk7cmV0dXJuIGlzQXJyYXkob2JqZWN0KT9yZXN1bHQ6YXJyYXlQdXNoKHJlc3VsdCxzeW1ib2xzRnVuYyhvYmplY3QpKX1mdW5jdGlvbiBiYXNlR2V0VGFnKHZhbHVlKXtpZih2YWx1ZT09bnVsbClyZXR1cm4gdmFsdWU9PT11bmRlZmluZWQ/dW5kZWZpbmVkVGFnOm51bGxUYWc7cmV0dXJuIHN5bVRvU3RyaW5nVGFnJiZzeW1Ub1N0cmluZ1RhZyBpbiBPYmplY3QodmFsdWUpP2dldFJhd1RhZyh2YWx1ZSk6b2JqZWN0VG9TdHJpbmcodmFsdWUpfWZ1bmN0aW9uIGJhc2VHdCh2YWx1ZSxvdGhlcil7cmV0dXJuIHZhbHVlPm90aGVyfWZ1bmN0aW9uIGJhc2VIYXMob2JqZWN0LGtleSl7cmV0dXJuIG9iamVjdCE9bnVsbCYmaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsCmtleSl9ZnVuY3Rpb24gYmFzZUhhc0luKG9iamVjdCxrZXkpe3JldHVybiBvYmplY3QhPW51bGwmJmtleSBpbiBPYmplY3Qob2JqZWN0KX1mdW5jdGlvbiBiYXNlSW5SYW5nZShudW1iZXIsc3RhcnQsZW5kKXtyZXR1cm4gbnVtYmVyPj1uYXRpdmVNaW4oc3RhcnQsZW5kKSYmbnVtYmVyPG5hdGl2ZU1heChzdGFydCxlbmQpfWZ1bmN0aW9uIGJhc2VJbnRlcnNlY3Rpb24oYXJyYXlzLGl0ZXJhdGVlLGNvbXBhcmF0b3Ipe3ZhciBpbmNsdWRlcz1jb21wYXJhdG9yP2FycmF5SW5jbHVkZXNXaXRoOmFycmF5SW5jbHVkZXMsbGVuZ3RoPWFycmF5c1swXS5sZW5ndGgsb3RoTGVuZ3RoPWFycmF5cy5sZW5ndGgsb3RoSW5kZXg9b3RoTGVuZ3RoLGNhY2hlcz1BcnJheShvdGhMZW5ndGgpLG1heExlbmd0aD1JbmZpbml0eSxyZXN1bHQ9W107d2hpbGUob3RoSW5kZXgtLSl7dmFyIGFycmF5PWFycmF5c1tvdGhJbmRleF07aWYob3RoSW5kZXgmJml0ZXJhdGVlKWFycmF5PWFycmF5TWFwKGFycmF5LApiYXNlVW5hcnkoaXRlcmF0ZWUpKTttYXhMZW5ndGg9bmF0aXZlTWluKGFycmF5Lmxlbmd0aCxtYXhMZW5ndGgpO2NhY2hlc1tvdGhJbmRleF09IWNvbXBhcmF0b3ImJihpdGVyYXRlZXx8bGVuZ3RoPj0xMjAmJmFycmF5Lmxlbmd0aD49MTIwKT9uZXcgU2V0Q2FjaGUob3RoSW5kZXgmJmFycmF5KTp1bmRlZmluZWR9YXJyYXk9YXJyYXlzWzBdO3ZhciBpbmRleD0tMSxzZWVuPWNhY2hlc1swXTtvdXRlcjp3aGlsZSgrK2luZGV4PGxlbmd0aCYmcmVzdWx0Lmxlbmd0aDxtYXhMZW5ndGgpe3ZhciB2YWx1ZT1hcnJheVtpbmRleF0sY29tcHV0ZWQ9aXRlcmF0ZWU/aXRlcmF0ZWUodmFsdWUpOnZhbHVlO3ZhbHVlPWNvbXBhcmF0b3J8fHZhbHVlIT09MD92YWx1ZTowO2lmKCEoc2Vlbj9jYWNoZUhhcyhzZWVuLGNvbXB1dGVkKTppbmNsdWRlcyhyZXN1bHQsY29tcHV0ZWQsY29tcGFyYXRvcikpKXtvdGhJbmRleD1vdGhMZW5ndGg7d2hpbGUoLS1vdGhJbmRleCl7dmFyIGNhY2hlPWNhY2hlc1tvdGhJbmRleF07CmlmKCEoY2FjaGU/Y2FjaGVIYXMoY2FjaGUsY29tcHV0ZWQpOmluY2x1ZGVzKGFycmF5c1tvdGhJbmRleF0sY29tcHV0ZWQsY29tcGFyYXRvcikpKWNvbnRpbnVlIG91dGVyfWlmKHNlZW4pc2Vlbi5wdXNoKGNvbXB1dGVkKTtyZXN1bHQucHVzaCh2YWx1ZSl9fXJldHVybiByZXN1bHR9ZnVuY3Rpb24gYmFzZUludmVydGVyKG9iamVjdCxzZXR0ZXIsaXRlcmF0ZWUsYWNjdW11bGF0b3Ipe2Jhc2VGb3JPd24ob2JqZWN0LGZ1bmN0aW9uKHZhbHVlLGtleSxvYmplY3Qpe3NldHRlcihhY2N1bXVsYXRvcixpdGVyYXRlZSh2YWx1ZSksa2V5LG9iamVjdCl9KTtyZXR1cm4gYWNjdW11bGF0b3J9ZnVuY3Rpb24gYmFzZUludm9rZShvYmplY3QscGF0aCxhcmdzKXtwYXRoPWNhc3RQYXRoKHBhdGgsb2JqZWN0KTtvYmplY3Q9cGFyZW50KG9iamVjdCxwYXRoKTt2YXIgZnVuYz1vYmplY3Q9PW51bGw/b2JqZWN0Om9iamVjdFt0b0tleShsYXN0KHBhdGgpKV07cmV0dXJuIGZ1bmM9PW51bGw/dW5kZWZpbmVkOgphcHBseShmdW5jLG9iamVjdCxhcmdzKX1mdW5jdGlvbiBiYXNlSXNBcmd1bWVudHModmFsdWUpe3JldHVybiBpc09iamVjdExpa2UodmFsdWUpJiZiYXNlR2V0VGFnKHZhbHVlKT09YXJnc1RhZ31mdW5jdGlvbiBiYXNlSXNBcnJheUJ1ZmZlcih2YWx1ZSl7cmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkmJmJhc2VHZXRUYWcodmFsdWUpPT1hcnJheUJ1ZmZlclRhZ31mdW5jdGlvbiBiYXNlSXNEYXRlKHZhbHVlKXtyZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSYmYmFzZUdldFRhZyh2YWx1ZSk9PWRhdGVUYWd9ZnVuY3Rpb24gYmFzZUlzRXF1YWwodmFsdWUsb3RoZXIsYml0bWFzayxjdXN0b21pemVyLHN0YWNrKXtpZih2YWx1ZT09PW90aGVyKXJldHVybiB0cnVlO2lmKHZhbHVlPT1udWxsfHxvdGhlcj09bnVsbHx8IWlzT2JqZWN0TGlrZSh2YWx1ZSkmJiFpc09iamVjdExpa2Uob3RoZXIpKXJldHVybiB2YWx1ZSE9PXZhbHVlJiZvdGhlciE9PW90aGVyO3JldHVybiBiYXNlSXNFcXVhbERlZXAodmFsdWUsCm90aGVyLGJpdG1hc2ssY3VzdG9taXplcixiYXNlSXNFcXVhbCxzdGFjayl9ZnVuY3Rpb24gYmFzZUlzRXF1YWxEZWVwKG9iamVjdCxvdGhlcixiaXRtYXNrLGN1c3RvbWl6ZXIsZXF1YWxGdW5jLHN0YWNrKXt2YXIgb2JqSXNBcnI9aXNBcnJheShvYmplY3QpLG90aElzQXJyPWlzQXJyYXkob3RoZXIpLG9ialRhZz1vYmpJc0Fycj9hcnJheVRhZzpnZXRUYWcob2JqZWN0KSxvdGhUYWc9b3RoSXNBcnI/YXJyYXlUYWc6Z2V0VGFnKG90aGVyKTtvYmpUYWc9b2JqVGFnPT1hcmdzVGFnP29iamVjdFRhZzpvYmpUYWc7b3RoVGFnPW90aFRhZz09YXJnc1RhZz9vYmplY3RUYWc6b3RoVGFnO3ZhciBvYmpJc09iaj1vYmpUYWc9PW9iamVjdFRhZyxvdGhJc09iaj1vdGhUYWc9PW9iamVjdFRhZyxpc1NhbWVUYWc9b2JqVGFnPT1vdGhUYWc7aWYoaXNTYW1lVGFnJiZpc0J1ZmZlcihvYmplY3QpKXtpZighaXNCdWZmZXIob3RoZXIpKXJldHVybiBmYWxzZTtvYmpJc0Fycj10cnVlO29iaklzT2JqPQpmYWxzZX1pZihpc1NhbWVUYWcmJiFvYmpJc09iail7c3RhY2t8fChzdGFjaz1uZXcgU3RhY2spO3JldHVybiBvYmpJc0Fycnx8aXNUeXBlZEFycmF5KG9iamVjdCk/ZXF1YWxBcnJheXMob2JqZWN0LG90aGVyLGJpdG1hc2ssY3VzdG9taXplcixlcXVhbEZ1bmMsc3RhY2spOmVxdWFsQnlUYWcob2JqZWN0LG90aGVyLG9ialRhZyxiaXRtYXNrLGN1c3RvbWl6ZXIsZXF1YWxGdW5jLHN0YWNrKX1pZighKGJpdG1hc2smQ09NUEFSRV9QQVJUSUFMX0ZMQUcpKXt2YXIgb2JqSXNXcmFwcGVkPW9iaklzT2JqJiZoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwiX193cmFwcGVkX18iKSxvdGhJc1dyYXBwZWQ9b3RoSXNPYmomJmhhc093blByb3BlcnR5LmNhbGwob3RoZXIsIl9fd3JhcHBlZF9fIik7aWYob2JqSXNXcmFwcGVkfHxvdGhJc1dyYXBwZWQpe3ZhciBvYmpVbndyYXBwZWQ9b2JqSXNXcmFwcGVkP29iamVjdC52YWx1ZSgpOm9iamVjdCxvdGhVbndyYXBwZWQ9b3RoSXNXcmFwcGVkP290aGVyLnZhbHVlKCk6Cm90aGVyO3N0YWNrfHwoc3RhY2s9bmV3IFN0YWNrKTtyZXR1cm4gZXF1YWxGdW5jKG9ialVud3JhcHBlZCxvdGhVbndyYXBwZWQsYml0bWFzayxjdXN0b21pemVyLHN0YWNrKX19aWYoIWlzU2FtZVRhZylyZXR1cm4gZmFsc2U7c3RhY2t8fChzdGFjaz1uZXcgU3RhY2spO3JldHVybiBlcXVhbE9iamVjdHMob2JqZWN0LG90aGVyLGJpdG1hc2ssY3VzdG9taXplcixlcXVhbEZ1bmMsc3RhY2spfWZ1bmN0aW9uIGJhc2VJc01hcCh2YWx1ZSl7cmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkmJmdldFRhZyh2YWx1ZSk9PW1hcFRhZ31mdW5jdGlvbiBiYXNlSXNNYXRjaChvYmplY3Qsc291cmNlLG1hdGNoRGF0YSxjdXN0b21pemVyKXt2YXIgaW5kZXg9bWF0Y2hEYXRhLmxlbmd0aCxsZW5ndGg9aW5kZXgsbm9DdXN0b21pemVyPSFjdXN0b21pemVyO2lmKG9iamVjdD09bnVsbClyZXR1cm4hbGVuZ3RoO29iamVjdD1PYmplY3Qob2JqZWN0KTt3aGlsZShpbmRleC0tKXt2YXIgZGF0YT1tYXRjaERhdGFbaW5kZXhdOwppZihub0N1c3RvbWl6ZXImJmRhdGFbMl0/ZGF0YVsxXSE9PW9iamVjdFtkYXRhWzBdXTohKGRhdGFbMF1pbiBvYmplY3QpKXJldHVybiBmYWxzZX13aGlsZSgrK2luZGV4PGxlbmd0aCl7ZGF0YT1tYXRjaERhdGFbaW5kZXhdO3ZhciBrZXk9ZGF0YVswXSxvYmpWYWx1ZT1vYmplY3Rba2V5XSxzcmNWYWx1ZT1kYXRhWzFdO2lmKG5vQ3VzdG9taXplciYmZGF0YVsyXSl7aWYob2JqVmFsdWU9PT11bmRlZmluZWQmJiEoa2V5IGluIG9iamVjdCkpcmV0dXJuIGZhbHNlfWVsc2V7dmFyIHN0YWNrPW5ldyBTdGFjaztpZihjdXN0b21pemVyKXZhciByZXN1bHQ9Y3VzdG9taXplcihvYmpWYWx1ZSxzcmNWYWx1ZSxrZXksb2JqZWN0LHNvdXJjZSxzdGFjayk7aWYoIShyZXN1bHQ9PT11bmRlZmluZWQ/YmFzZUlzRXF1YWwoc3JjVmFsdWUsb2JqVmFsdWUsQ09NUEFSRV9QQVJUSUFMX0ZMQUd8Q09NUEFSRV9VTk9SREVSRURfRkxBRyxjdXN0b21pemVyLHN0YWNrKTpyZXN1bHQpKXJldHVybiBmYWxzZX19cmV0dXJuIHRydWV9CmZ1bmN0aW9uIGJhc2VJc05hdGl2ZSh2YWx1ZSl7aWYoIWlzT2JqZWN0KHZhbHVlKXx8aXNNYXNrZWQodmFsdWUpKXJldHVybiBmYWxzZTt2YXIgcGF0dGVybj1pc0Z1bmN0aW9uKHZhbHVlKT9yZUlzTmF0aXZlOnJlSXNIb3N0Q3RvcjtyZXR1cm4gcGF0dGVybi50ZXN0KHRvU291cmNlKHZhbHVlKSl9ZnVuY3Rpb24gYmFzZUlzUmVnRXhwKHZhbHVlKXtyZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSYmYmFzZUdldFRhZyh2YWx1ZSk9PXJlZ2V4cFRhZ31mdW5jdGlvbiBiYXNlSXNTZXQodmFsdWUpe3JldHVybiBpc09iamVjdExpa2UodmFsdWUpJiZnZXRUYWcodmFsdWUpPT1zZXRUYWd9ZnVuY3Rpb24gYmFzZUlzVHlwZWRBcnJheSh2YWx1ZSl7cmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkmJmlzTGVuZ3RoKHZhbHVlLmxlbmd0aCkmJiEhdHlwZWRBcnJheVRhZ3NbYmFzZUdldFRhZyh2YWx1ZSldfWZ1bmN0aW9uIGJhc2VJdGVyYXRlZSh2YWx1ZSl7aWYodHlwZW9mIHZhbHVlPT0iZnVuY3Rpb24iKXJldHVybiB2YWx1ZTsKaWYodmFsdWU9PW51bGwpcmV0dXJuIGlkZW50aXR5O2lmKHR5cGVvZiB2YWx1ZT09Im9iamVjdCIpcmV0dXJuIGlzQXJyYXkodmFsdWUpP2Jhc2VNYXRjaGVzUHJvcGVydHkodmFsdWVbMF0sdmFsdWVbMV0pOmJhc2VNYXRjaGVzKHZhbHVlKTtyZXR1cm4gcHJvcGVydHkodmFsdWUpfWZ1bmN0aW9uIGJhc2VLZXlzKG9iamVjdCl7aWYoIWlzUHJvdG90eXBlKG9iamVjdCkpcmV0dXJuIG5hdGl2ZUtleXMob2JqZWN0KTt2YXIgcmVzdWx0PVtdO2Zvcih2YXIga2V5IGluIE9iamVjdChvYmplY3QpKWlmKGhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LGtleSkmJmtleSE9ImNvbnN0cnVjdG9yIilyZXN1bHQucHVzaChrZXkpO3JldHVybiByZXN1bHR9ZnVuY3Rpb24gYmFzZUtleXNJbihvYmplY3Qpe2lmKCFpc09iamVjdChvYmplY3QpKXJldHVybiBuYXRpdmVLZXlzSW4ob2JqZWN0KTt2YXIgaXNQcm90bz1pc1Byb3RvdHlwZShvYmplY3QpLHJlc3VsdD1bXTtmb3IodmFyIGtleSBpbiBvYmplY3QpaWYoIShrZXk9PQoiY29uc3RydWN0b3IiJiYoaXNQcm90b3x8IWhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LGtleSkpKSlyZXN1bHQucHVzaChrZXkpO3JldHVybiByZXN1bHR9ZnVuY3Rpb24gYmFzZUx0KHZhbHVlLG90aGVyKXtyZXR1cm4gdmFsdWU8b3RoZXJ9ZnVuY3Rpb24gYmFzZU1hcChjb2xsZWN0aW9uLGl0ZXJhdGVlKXt2YXIgaW5kZXg9LTEscmVzdWx0PWlzQXJyYXlMaWtlKGNvbGxlY3Rpb24pP0FycmF5KGNvbGxlY3Rpb24ubGVuZ3RoKTpbXTtiYXNlRWFjaChjb2xsZWN0aW9uLGZ1bmN0aW9uKHZhbHVlLGtleSxjb2xsZWN0aW9uKXtyZXN1bHRbKytpbmRleF09aXRlcmF0ZWUodmFsdWUsa2V5LGNvbGxlY3Rpb24pfSk7cmV0dXJuIHJlc3VsdH1mdW5jdGlvbiBiYXNlTWF0Y2hlcyhzb3VyY2Upe3ZhciBtYXRjaERhdGE9Z2V0TWF0Y2hEYXRhKHNvdXJjZSk7aWYobWF0Y2hEYXRhLmxlbmd0aD09MSYmbWF0Y2hEYXRhWzBdWzJdKXJldHVybiBtYXRjaGVzU3RyaWN0Q29tcGFyYWJsZShtYXRjaERhdGFbMF1bMF0sCm1hdGNoRGF0YVswXVsxXSk7cmV0dXJuIGZ1bmN0aW9uKG9iamVjdCl7cmV0dXJuIG9iamVjdD09PXNvdXJjZXx8YmFzZUlzTWF0Y2gob2JqZWN0LHNvdXJjZSxtYXRjaERhdGEpfX1mdW5jdGlvbiBiYXNlTWF0Y2hlc1Byb3BlcnR5KHBhdGgsc3JjVmFsdWUpe2lmKGlzS2V5KHBhdGgpJiZpc1N0cmljdENvbXBhcmFibGUoc3JjVmFsdWUpKXJldHVybiBtYXRjaGVzU3RyaWN0Q29tcGFyYWJsZSh0b0tleShwYXRoKSxzcmNWYWx1ZSk7cmV0dXJuIGZ1bmN0aW9uKG9iamVjdCl7dmFyIG9ialZhbHVlPWdldChvYmplY3QscGF0aCk7cmV0dXJuIG9ialZhbHVlPT09dW5kZWZpbmVkJiZvYmpWYWx1ZT09PXNyY1ZhbHVlP2hhc0luKG9iamVjdCxwYXRoKTpiYXNlSXNFcXVhbChzcmNWYWx1ZSxvYmpWYWx1ZSxDT01QQVJFX1BBUlRJQUxfRkxBR3xDT01QQVJFX1VOT1JERVJFRF9GTEFHKX19ZnVuY3Rpb24gYmFzZU1lcmdlKG9iamVjdCxzb3VyY2Usc3JjSW5kZXgsY3VzdG9taXplcixzdGFjayl7aWYob2JqZWN0PT09CnNvdXJjZSlyZXR1cm47YmFzZUZvcihzb3VyY2UsZnVuY3Rpb24oc3JjVmFsdWUsa2V5KXtpZihpc09iamVjdChzcmNWYWx1ZSkpe3N0YWNrfHwoc3RhY2s9bmV3IFN0YWNrKTtiYXNlTWVyZ2VEZWVwKG9iamVjdCxzb3VyY2Usa2V5LHNyY0luZGV4LGJhc2VNZXJnZSxjdXN0b21pemVyLHN0YWNrKX1lbHNle3ZhciBuZXdWYWx1ZT1jdXN0b21pemVyP2N1c3RvbWl6ZXIoc2FmZUdldChvYmplY3Qsa2V5KSxzcmNWYWx1ZSxrZXkrIiIsb2JqZWN0LHNvdXJjZSxzdGFjayk6dW5kZWZpbmVkO2lmKG5ld1ZhbHVlPT09dW5kZWZpbmVkKW5ld1ZhbHVlPXNyY1ZhbHVlO2Fzc2lnbk1lcmdlVmFsdWUob2JqZWN0LGtleSxuZXdWYWx1ZSl9fSxrZXlzSW4pfWZ1bmN0aW9uIGJhc2VNZXJnZURlZXAob2JqZWN0LHNvdXJjZSxrZXksc3JjSW5kZXgsbWVyZ2VGdW5jLGN1c3RvbWl6ZXIsc3RhY2spe3ZhciBvYmpWYWx1ZT1zYWZlR2V0KG9iamVjdCxrZXkpLHNyY1ZhbHVlPXNhZmVHZXQoc291cmNlLAprZXkpLHN0YWNrZWQ9c3RhY2suZ2V0KHNyY1ZhbHVlKTtpZihzdGFja2VkKXthc3NpZ25NZXJnZVZhbHVlKG9iamVjdCxrZXksc3RhY2tlZCk7cmV0dXJufXZhciBuZXdWYWx1ZT1jdXN0b21pemVyP2N1c3RvbWl6ZXIob2JqVmFsdWUsc3JjVmFsdWUsa2V5KyIiLG9iamVjdCxzb3VyY2Usc3RhY2spOnVuZGVmaW5lZDt2YXIgaXNDb21tb249bmV3VmFsdWU9PT11bmRlZmluZWQ7aWYoaXNDb21tb24pe3ZhciBpc0Fycj1pc0FycmF5KHNyY1ZhbHVlKSxpc0J1ZmY9IWlzQXJyJiZpc0J1ZmZlcihzcmNWYWx1ZSksaXNUeXBlZD0haXNBcnImJiFpc0J1ZmYmJmlzVHlwZWRBcnJheShzcmNWYWx1ZSk7bmV3VmFsdWU9c3JjVmFsdWU7aWYoaXNBcnJ8fGlzQnVmZnx8aXNUeXBlZClpZihpc0FycmF5KG9ialZhbHVlKSluZXdWYWx1ZT1vYmpWYWx1ZTtlbHNlIGlmKGlzQXJyYXlMaWtlT2JqZWN0KG9ialZhbHVlKSluZXdWYWx1ZT1jb3B5QXJyYXkob2JqVmFsdWUpO2Vsc2UgaWYoaXNCdWZmKXtpc0NvbW1vbj0KZmFsc2U7bmV3VmFsdWU9Y2xvbmVCdWZmZXIoc3JjVmFsdWUsdHJ1ZSl9ZWxzZSBpZihpc1R5cGVkKXtpc0NvbW1vbj1mYWxzZTtuZXdWYWx1ZT1jbG9uZVR5cGVkQXJyYXkoc3JjVmFsdWUsdHJ1ZSl9ZWxzZSBuZXdWYWx1ZT1bXTtlbHNlIGlmKGlzUGxhaW5PYmplY3Qoc3JjVmFsdWUpfHxpc0FyZ3VtZW50cyhzcmNWYWx1ZSkpe25ld1ZhbHVlPW9ialZhbHVlO2lmKGlzQXJndW1lbnRzKG9ialZhbHVlKSluZXdWYWx1ZT10b1BsYWluT2JqZWN0KG9ialZhbHVlKTtlbHNlIGlmKCFpc09iamVjdChvYmpWYWx1ZSl8fHNyY0luZGV4JiZpc0Z1bmN0aW9uKG9ialZhbHVlKSluZXdWYWx1ZT1pbml0Q2xvbmVPYmplY3Qoc3JjVmFsdWUpfWVsc2UgaXNDb21tb249ZmFsc2V9aWYoaXNDb21tb24pe3N0YWNrLnNldChzcmNWYWx1ZSxuZXdWYWx1ZSk7bWVyZ2VGdW5jKG5ld1ZhbHVlLHNyY1ZhbHVlLHNyY0luZGV4LGN1c3RvbWl6ZXIsc3RhY2spO3N0YWNrWyJkZWxldGUiXShzcmNWYWx1ZSl9YXNzaWduTWVyZ2VWYWx1ZShvYmplY3QsCmtleSxuZXdWYWx1ZSl9ZnVuY3Rpb24gYmFzZU50aChhcnJheSxuKXt2YXIgbGVuZ3RoPWFycmF5Lmxlbmd0aDtpZighbGVuZ3RoKXJldHVybjtuKz1uPDA/bGVuZ3RoOjA7cmV0dXJuIGlzSW5kZXgobixsZW5ndGgpP2FycmF5W25dOnVuZGVmaW5lZH1mdW5jdGlvbiBiYXNlT3JkZXJCeShjb2xsZWN0aW9uLGl0ZXJhdGVlcyxvcmRlcnMpe3ZhciBpbmRleD0tMTtpdGVyYXRlZXM9YXJyYXlNYXAoaXRlcmF0ZWVzLmxlbmd0aD9pdGVyYXRlZXM6W2lkZW50aXR5XSxiYXNlVW5hcnkoZ2V0SXRlcmF0ZWUoKSkpO3ZhciByZXN1bHQ9YmFzZU1hcChjb2xsZWN0aW9uLGZ1bmN0aW9uKHZhbHVlLGtleSxjb2xsZWN0aW9uKXt2YXIgY3JpdGVyaWE9YXJyYXlNYXAoaXRlcmF0ZWVzLGZ1bmN0aW9uKGl0ZXJhdGVlKXtyZXR1cm4gaXRlcmF0ZWUodmFsdWUpfSk7cmV0dXJueyJjcml0ZXJpYSI6Y3JpdGVyaWEsImluZGV4IjorK2luZGV4LCJ2YWx1ZSI6dmFsdWV9fSk7cmV0dXJuIGJhc2VTb3J0QnkocmVzdWx0LApmdW5jdGlvbihvYmplY3Qsb3RoZXIpe3JldHVybiBjb21wYXJlTXVsdGlwbGUob2JqZWN0LG90aGVyLG9yZGVycyl9KX1mdW5jdGlvbiBiYXNlUGljayhvYmplY3QscGF0aHMpe3JldHVybiBiYXNlUGlja0J5KG9iamVjdCxwYXRocyxmdW5jdGlvbih2YWx1ZSxwYXRoKXtyZXR1cm4gaGFzSW4ob2JqZWN0LHBhdGgpfSl9ZnVuY3Rpb24gYmFzZVBpY2tCeShvYmplY3QscGF0aHMscHJlZGljYXRlKXt2YXIgaW5kZXg9LTEsbGVuZ3RoPXBhdGhzLmxlbmd0aCxyZXN1bHQ9e307d2hpbGUoKytpbmRleDxsZW5ndGgpe3ZhciBwYXRoPXBhdGhzW2luZGV4XSx2YWx1ZT1iYXNlR2V0KG9iamVjdCxwYXRoKTtpZihwcmVkaWNhdGUodmFsdWUscGF0aCkpYmFzZVNldChyZXN1bHQsY2FzdFBhdGgocGF0aCxvYmplY3QpLHZhbHVlKX1yZXR1cm4gcmVzdWx0fWZ1bmN0aW9uIGJhc2VQcm9wZXJ0eURlZXAocGF0aCl7cmV0dXJuIGZ1bmN0aW9uKG9iamVjdCl7cmV0dXJuIGJhc2VHZXQob2JqZWN0LHBhdGgpfX0KZnVuY3Rpb24gYmFzZVB1bGxBbGwoYXJyYXksdmFsdWVzLGl0ZXJhdGVlLGNvbXBhcmF0b3Ipe3ZhciBpbmRleE9mPWNvbXBhcmF0b3I/YmFzZUluZGV4T2ZXaXRoOmJhc2VJbmRleE9mLGluZGV4PS0xLGxlbmd0aD12YWx1ZXMubGVuZ3RoLHNlZW49YXJyYXk7aWYoYXJyYXk9PT12YWx1ZXMpdmFsdWVzPWNvcHlBcnJheSh2YWx1ZXMpO2lmKGl0ZXJhdGVlKXNlZW49YXJyYXlNYXAoYXJyYXksYmFzZVVuYXJ5KGl0ZXJhdGVlKSk7d2hpbGUoKytpbmRleDxsZW5ndGgpe3ZhciBmcm9tSW5kZXg9MCx2YWx1ZT12YWx1ZXNbaW5kZXhdLGNvbXB1dGVkPWl0ZXJhdGVlP2l0ZXJhdGVlKHZhbHVlKTp2YWx1ZTt3aGlsZSgoZnJvbUluZGV4PWluZGV4T2Yoc2Vlbixjb21wdXRlZCxmcm9tSW5kZXgsY29tcGFyYXRvcikpPi0xKXtpZihzZWVuIT09YXJyYXkpc3BsaWNlLmNhbGwoc2Vlbixmcm9tSW5kZXgsMSk7c3BsaWNlLmNhbGwoYXJyYXksZnJvbUluZGV4LDEpfX1yZXR1cm4gYXJyYXl9ZnVuY3Rpb24gYmFzZVB1bGxBdChhcnJheSwKaW5kZXhlcyl7dmFyIGxlbmd0aD1hcnJheT9pbmRleGVzLmxlbmd0aDowLGxhc3RJbmRleD1sZW5ndGgtMTt3aGlsZShsZW5ndGgtLSl7dmFyIGluZGV4PWluZGV4ZXNbbGVuZ3RoXTtpZihsZW5ndGg9PWxhc3RJbmRleHx8aW5kZXghPT1wcmV2aW91cyl7dmFyIHByZXZpb3VzPWluZGV4O2lmKGlzSW5kZXgoaW5kZXgpKXNwbGljZS5jYWxsKGFycmF5LGluZGV4LDEpO2Vsc2UgYmFzZVVuc2V0KGFycmF5LGluZGV4KX19cmV0dXJuIGFycmF5fWZ1bmN0aW9uIGJhc2VSYW5kb20obG93ZXIsdXBwZXIpe3JldHVybiBsb3dlcituYXRpdmVGbG9vcihuYXRpdmVSYW5kb20oKSoodXBwZXItbG93ZXIrMSkpfWZ1bmN0aW9uIGJhc2VSYW5nZShzdGFydCxlbmQsc3RlcCxmcm9tUmlnaHQpe3ZhciBpbmRleD0tMSxsZW5ndGg9bmF0aXZlTWF4KG5hdGl2ZUNlaWwoKGVuZC1zdGFydCkvKHN0ZXB8fDEpKSwwKSxyZXN1bHQ9QXJyYXkobGVuZ3RoKTt3aGlsZShsZW5ndGgtLSl7cmVzdWx0W2Zyb21SaWdodD8KbGVuZ3RoOisraW5kZXhdPXN0YXJ0O3N0YXJ0Kz1zdGVwfXJldHVybiByZXN1bHR9ZnVuY3Rpb24gYmFzZVJlcGVhdChzdHJpbmcsbil7dmFyIHJlc3VsdD0iIjtpZighc3RyaW5nfHxuPDF8fG4+TUFYX1NBRkVfSU5URUdFUilyZXR1cm4gcmVzdWx0O2Rve2lmKG4lMilyZXN1bHQrPXN0cmluZztuPW5hdGl2ZUZsb29yKG4vMik7aWYobilzdHJpbmcrPXN0cmluZ313aGlsZShuKTtyZXR1cm4gcmVzdWx0fWZ1bmN0aW9uIGJhc2VSZXN0KGZ1bmMsc3RhcnQpe3JldHVybiBzZXRUb1N0cmluZyhvdmVyUmVzdChmdW5jLHN0YXJ0LGlkZW50aXR5KSxmdW5jKyIiKX1mdW5jdGlvbiBiYXNlU2FtcGxlKGNvbGxlY3Rpb24pe3JldHVybiBhcnJheVNhbXBsZSh2YWx1ZXMoY29sbGVjdGlvbikpfWZ1bmN0aW9uIGJhc2VTYW1wbGVTaXplKGNvbGxlY3Rpb24sbil7dmFyIGFycmF5PXZhbHVlcyhjb2xsZWN0aW9uKTtyZXR1cm4gc2h1ZmZsZVNlbGYoYXJyYXksYmFzZUNsYW1wKG4sMCxhcnJheS5sZW5ndGgpKX0KZnVuY3Rpb24gYmFzZVNldChvYmplY3QscGF0aCx2YWx1ZSxjdXN0b21pemVyKXtpZighaXNPYmplY3Qob2JqZWN0KSlyZXR1cm4gb2JqZWN0O3BhdGg9Y2FzdFBhdGgocGF0aCxvYmplY3QpO3ZhciBpbmRleD0tMSxsZW5ndGg9cGF0aC5sZW5ndGgsbGFzdEluZGV4PWxlbmd0aC0xLG5lc3RlZD1vYmplY3Q7d2hpbGUobmVzdGVkIT1udWxsJiYrK2luZGV4PGxlbmd0aCl7dmFyIGtleT10b0tleShwYXRoW2luZGV4XSksbmV3VmFsdWU9dmFsdWU7aWYoaW5kZXghPWxhc3RJbmRleCl7dmFyIG9ialZhbHVlPW5lc3RlZFtrZXldO25ld1ZhbHVlPWN1c3RvbWl6ZXI/Y3VzdG9taXplcihvYmpWYWx1ZSxrZXksbmVzdGVkKTp1bmRlZmluZWQ7aWYobmV3VmFsdWU9PT11bmRlZmluZWQpbmV3VmFsdWU9aXNPYmplY3Qob2JqVmFsdWUpP29ialZhbHVlOmlzSW5kZXgocGF0aFtpbmRleCsxXSk/W106e319YXNzaWduVmFsdWUobmVzdGVkLGtleSxuZXdWYWx1ZSk7bmVzdGVkPW5lc3RlZFtrZXldfXJldHVybiBvYmplY3R9CnZhciBiYXNlU2V0RGF0YT0hbWV0YU1hcD9pZGVudGl0eTpmdW5jdGlvbihmdW5jLGRhdGEpe21ldGFNYXAuc2V0KGZ1bmMsZGF0YSk7cmV0dXJuIGZ1bmN9O3ZhciBiYXNlU2V0VG9TdHJpbmc9IWRlZmluZVByb3BlcnR5P2lkZW50aXR5OmZ1bmN0aW9uKGZ1bmMsc3RyaW5nKXtyZXR1cm4gZGVmaW5lUHJvcGVydHkoZnVuYywidG9TdHJpbmciLHsiY29uZmlndXJhYmxlIjp0cnVlLCJlbnVtZXJhYmxlIjpmYWxzZSwidmFsdWUiOmNvbnN0YW50KHN0cmluZyksIndyaXRhYmxlIjp0cnVlfSl9O2Z1bmN0aW9uIGJhc2VTaHVmZmxlKGNvbGxlY3Rpb24pe3JldHVybiBzaHVmZmxlU2VsZih2YWx1ZXMoY29sbGVjdGlvbikpfWZ1bmN0aW9uIGJhc2VTbGljZShhcnJheSxzdGFydCxlbmQpe3ZhciBpbmRleD0tMSxsZW5ndGg9YXJyYXkubGVuZ3RoO2lmKHN0YXJ0PDApc3RhcnQ9LXN0YXJ0Pmxlbmd0aD8wOmxlbmd0aCtzdGFydDtlbmQ9ZW5kPmxlbmd0aD9sZW5ndGg6ZW5kO2lmKGVuZDwwKWVuZCs9Cmxlbmd0aDtsZW5ndGg9c3RhcnQ+ZW5kPzA6ZW5kLXN0YXJ0Pj4+MDtzdGFydD4+Pj0wO3ZhciByZXN1bHQ9QXJyYXkobGVuZ3RoKTt3aGlsZSgrK2luZGV4PGxlbmd0aClyZXN1bHRbaW5kZXhdPWFycmF5W2luZGV4K3N0YXJ0XTtyZXR1cm4gcmVzdWx0fWZ1bmN0aW9uIGJhc2VTb21lKGNvbGxlY3Rpb24scHJlZGljYXRlKXt2YXIgcmVzdWx0O2Jhc2VFYWNoKGNvbGxlY3Rpb24sZnVuY3Rpb24odmFsdWUsaW5kZXgsY29sbGVjdGlvbil7cmVzdWx0PXByZWRpY2F0ZSh2YWx1ZSxpbmRleCxjb2xsZWN0aW9uKTtyZXR1cm4hcmVzdWx0fSk7cmV0dXJuISFyZXN1bHR9ZnVuY3Rpb24gYmFzZVNvcnRlZEluZGV4KGFycmF5LHZhbHVlLHJldEhpZ2hlc3Qpe3ZhciBsb3c9MCxoaWdoPWFycmF5PT1udWxsP2xvdzphcnJheS5sZW5ndGg7aWYodHlwZW9mIHZhbHVlPT0ibnVtYmVyIiYmdmFsdWU9PT12YWx1ZSYmaGlnaDw9SEFMRl9NQVhfQVJSQVlfTEVOR1RIKXt3aGlsZShsb3c8aGlnaCl7dmFyIG1pZD0KbG93K2hpZ2g+Pj4xLGNvbXB1dGVkPWFycmF5W21pZF07aWYoY29tcHV0ZWQhPT1udWxsJiYhaXNTeW1ib2woY29tcHV0ZWQpJiYocmV0SGlnaGVzdD9jb21wdXRlZDw9dmFsdWU6Y29tcHV0ZWQ8dmFsdWUpKWxvdz1taWQrMTtlbHNlIGhpZ2g9bWlkfXJldHVybiBoaWdofXJldHVybiBiYXNlU29ydGVkSW5kZXhCeShhcnJheSx2YWx1ZSxpZGVudGl0eSxyZXRIaWdoZXN0KX1mdW5jdGlvbiBiYXNlU29ydGVkSW5kZXhCeShhcnJheSx2YWx1ZSxpdGVyYXRlZSxyZXRIaWdoZXN0KXt2YWx1ZT1pdGVyYXRlZSh2YWx1ZSk7dmFyIGxvdz0wLGhpZ2g9YXJyYXk9PW51bGw/MDphcnJheS5sZW5ndGgsdmFsSXNOYU49dmFsdWUhPT12YWx1ZSx2YWxJc051bGw9dmFsdWU9PT1udWxsLHZhbElzU3ltYm9sPWlzU3ltYm9sKHZhbHVlKSx2YWxJc1VuZGVmaW5lZD12YWx1ZT09PXVuZGVmaW5lZDt3aGlsZShsb3c8aGlnaCl7dmFyIG1pZD1uYXRpdmVGbG9vcigobG93K2hpZ2gpLzIpLGNvbXB1dGVkPQppdGVyYXRlZShhcnJheVttaWRdKSxvdGhJc0RlZmluZWQ9Y29tcHV0ZWQhPT11bmRlZmluZWQsb3RoSXNOdWxsPWNvbXB1dGVkPT09bnVsbCxvdGhJc1JlZmxleGl2ZT1jb21wdXRlZD09PWNvbXB1dGVkLG90aElzU3ltYm9sPWlzU3ltYm9sKGNvbXB1dGVkKTtpZih2YWxJc05hTil2YXIgc2V0TG93PXJldEhpZ2hlc3R8fG90aElzUmVmbGV4aXZlO2Vsc2UgaWYodmFsSXNVbmRlZmluZWQpc2V0TG93PW90aElzUmVmbGV4aXZlJiYocmV0SGlnaGVzdHx8b3RoSXNEZWZpbmVkKTtlbHNlIGlmKHZhbElzTnVsbClzZXRMb3c9b3RoSXNSZWZsZXhpdmUmJm90aElzRGVmaW5lZCYmKHJldEhpZ2hlc3R8fCFvdGhJc051bGwpO2Vsc2UgaWYodmFsSXNTeW1ib2wpc2V0TG93PW90aElzUmVmbGV4aXZlJiZvdGhJc0RlZmluZWQmJiFvdGhJc051bGwmJihyZXRIaWdoZXN0fHwhb3RoSXNTeW1ib2wpO2Vsc2UgaWYob3RoSXNOdWxsfHxvdGhJc1N5bWJvbClzZXRMb3c9ZmFsc2U7ZWxzZSBzZXRMb3c9CnJldEhpZ2hlc3Q/Y29tcHV0ZWQ8PXZhbHVlOmNvbXB1dGVkPHZhbHVlO2lmKHNldExvdylsb3c9bWlkKzE7ZWxzZSBoaWdoPW1pZH1yZXR1cm4gbmF0aXZlTWluKGhpZ2gsTUFYX0FSUkFZX0lOREVYKX1mdW5jdGlvbiBiYXNlU29ydGVkVW5pcShhcnJheSxpdGVyYXRlZSl7dmFyIGluZGV4PS0xLGxlbmd0aD1hcnJheS5sZW5ndGgscmVzSW5kZXg9MCxyZXN1bHQ9W107d2hpbGUoKytpbmRleDxsZW5ndGgpe3ZhciB2YWx1ZT1hcnJheVtpbmRleF0sY29tcHV0ZWQ9aXRlcmF0ZWU/aXRlcmF0ZWUodmFsdWUpOnZhbHVlO2lmKCFpbmRleHx8IWVxKGNvbXB1dGVkLHNlZW4pKXt2YXIgc2Vlbj1jb21wdXRlZDtyZXN1bHRbcmVzSW5kZXgrK109dmFsdWU9PT0wPzA6dmFsdWV9fXJldHVybiByZXN1bHR9ZnVuY3Rpb24gYmFzZVRvTnVtYmVyKHZhbHVlKXtpZih0eXBlb2YgdmFsdWU9PSJudW1iZXIiKXJldHVybiB2YWx1ZTtpZihpc1N5bWJvbCh2YWx1ZSkpcmV0dXJuIE5BTjtyZXR1cm4rdmFsdWV9CmZ1bmN0aW9uIGJhc2VUb1N0cmluZyh2YWx1ZSl7aWYodHlwZW9mIHZhbHVlPT0ic3RyaW5nIilyZXR1cm4gdmFsdWU7aWYoaXNBcnJheSh2YWx1ZSkpcmV0dXJuIGFycmF5TWFwKHZhbHVlLGJhc2VUb1N0cmluZykrIiI7aWYoaXNTeW1ib2wodmFsdWUpKXJldHVybiBzeW1ib2xUb1N0cmluZz9zeW1ib2xUb1N0cmluZy5jYWxsKHZhbHVlKToiIjt2YXIgcmVzdWx0PXZhbHVlKyIiO3JldHVybiByZXN1bHQ9PSIwIiYmMS92YWx1ZT09LUlORklOSVRZPyItMCI6cmVzdWx0fWZ1bmN0aW9uIGJhc2VVbmlxKGFycmF5LGl0ZXJhdGVlLGNvbXBhcmF0b3Ipe3ZhciBpbmRleD0tMSxpbmNsdWRlcz1hcnJheUluY2x1ZGVzLGxlbmd0aD1hcnJheS5sZW5ndGgsaXNDb21tb249dHJ1ZSxyZXN1bHQ9W10sc2Vlbj1yZXN1bHQ7aWYoY29tcGFyYXRvcil7aXNDb21tb249ZmFsc2U7aW5jbHVkZXM9YXJyYXlJbmNsdWRlc1dpdGh9ZWxzZSBpZihsZW5ndGg+PUxBUkdFX0FSUkFZX1NJWkUpe3ZhciBzZXQ9Cml0ZXJhdGVlP251bGw6Y3JlYXRlU2V0KGFycmF5KTtpZihzZXQpcmV0dXJuIHNldFRvQXJyYXkoc2V0KTtpc0NvbW1vbj1mYWxzZTtpbmNsdWRlcz1jYWNoZUhhcztzZWVuPW5ldyBTZXRDYWNoZX1lbHNlIHNlZW49aXRlcmF0ZWU/W106cmVzdWx0O291dGVyOndoaWxlKCsraW5kZXg8bGVuZ3RoKXt2YXIgdmFsdWU9YXJyYXlbaW5kZXhdLGNvbXB1dGVkPWl0ZXJhdGVlP2l0ZXJhdGVlKHZhbHVlKTp2YWx1ZTt2YWx1ZT1jb21wYXJhdG9yfHx2YWx1ZSE9PTA/dmFsdWU6MDtpZihpc0NvbW1vbiYmY29tcHV0ZWQ9PT1jb21wdXRlZCl7dmFyIHNlZW5JbmRleD1zZWVuLmxlbmd0aDt3aGlsZShzZWVuSW5kZXgtLSlpZihzZWVuW3NlZW5JbmRleF09PT1jb21wdXRlZCljb250aW51ZSBvdXRlcjtpZihpdGVyYXRlZSlzZWVuLnB1c2goY29tcHV0ZWQpO3Jlc3VsdC5wdXNoKHZhbHVlKX1lbHNlIGlmKCFpbmNsdWRlcyhzZWVuLGNvbXB1dGVkLGNvbXBhcmF0b3IpKXtpZihzZWVuIT09cmVzdWx0KXNlZW4ucHVzaChjb21wdXRlZCk7CnJlc3VsdC5wdXNoKHZhbHVlKX19cmV0dXJuIHJlc3VsdH1mdW5jdGlvbiBiYXNlVW5zZXQob2JqZWN0LHBhdGgpe3BhdGg9Y2FzdFBhdGgocGF0aCxvYmplY3QpO29iamVjdD1wYXJlbnQob2JqZWN0LHBhdGgpO3JldHVybiBvYmplY3Q9PW51bGx8fGRlbGV0ZSBvYmplY3RbdG9LZXkobGFzdChwYXRoKSldfWZ1bmN0aW9uIGJhc2VVcGRhdGUob2JqZWN0LHBhdGgsdXBkYXRlcixjdXN0b21pemVyKXtyZXR1cm4gYmFzZVNldChvYmplY3QscGF0aCx1cGRhdGVyKGJhc2VHZXQob2JqZWN0LHBhdGgpKSxjdXN0b21pemVyKX1mdW5jdGlvbiBiYXNlV2hpbGUoYXJyYXkscHJlZGljYXRlLGlzRHJvcCxmcm9tUmlnaHQpe3ZhciBsZW5ndGg9YXJyYXkubGVuZ3RoLGluZGV4PWZyb21SaWdodD9sZW5ndGg6LTE7d2hpbGUoKGZyb21SaWdodD9pbmRleC0tOisraW5kZXg8bGVuZ3RoKSYmcHJlZGljYXRlKGFycmF5W2luZGV4XSxpbmRleCxhcnJheSkpO3JldHVybiBpc0Ryb3A/YmFzZVNsaWNlKGFycmF5LApmcm9tUmlnaHQ/MDppbmRleCxmcm9tUmlnaHQ/aW5kZXgrMTpsZW5ndGgpOmJhc2VTbGljZShhcnJheSxmcm9tUmlnaHQ/aW5kZXgrMTowLGZyb21SaWdodD9sZW5ndGg6aW5kZXgpfWZ1bmN0aW9uIGJhc2VXcmFwcGVyVmFsdWUodmFsdWUsYWN0aW9ucyl7dmFyIHJlc3VsdD12YWx1ZTtpZihyZXN1bHQgaW5zdGFuY2VvZiBMYXp5V3JhcHBlcilyZXN1bHQ9cmVzdWx0LnZhbHVlKCk7cmV0dXJuIGFycmF5UmVkdWNlKGFjdGlvbnMsZnVuY3Rpb24ocmVzdWx0LGFjdGlvbil7cmV0dXJuIGFjdGlvbi5mdW5jLmFwcGx5KGFjdGlvbi50aGlzQXJnLGFycmF5UHVzaChbcmVzdWx0XSxhY3Rpb24uYXJncykpfSxyZXN1bHQpfWZ1bmN0aW9uIGJhc2VYb3IoYXJyYXlzLGl0ZXJhdGVlLGNvbXBhcmF0b3Ipe3ZhciBsZW5ndGg9YXJyYXlzLmxlbmd0aDtpZihsZW5ndGg8MilyZXR1cm4gbGVuZ3RoP2Jhc2VVbmlxKGFycmF5c1swXSk6W107dmFyIGluZGV4PS0xLHJlc3VsdD1BcnJheShsZW5ndGgpOwp3aGlsZSgrK2luZGV4PGxlbmd0aCl7dmFyIGFycmF5PWFycmF5c1tpbmRleF0sb3RoSW5kZXg9LTE7d2hpbGUoKytvdGhJbmRleDxsZW5ndGgpaWYob3RoSW5kZXghPWluZGV4KXJlc3VsdFtpbmRleF09YmFzZURpZmZlcmVuY2UocmVzdWx0W2luZGV4XXx8YXJyYXksYXJyYXlzW290aEluZGV4XSxpdGVyYXRlZSxjb21wYXJhdG9yKX1yZXR1cm4gYmFzZVVuaXEoYmFzZUZsYXR0ZW4ocmVzdWx0LDEpLGl0ZXJhdGVlLGNvbXBhcmF0b3IpfWZ1bmN0aW9uIGJhc2VaaXBPYmplY3QocHJvcHMsdmFsdWVzLGFzc2lnbkZ1bmMpe3ZhciBpbmRleD0tMSxsZW5ndGg9cHJvcHMubGVuZ3RoLHZhbHNMZW5ndGg9dmFsdWVzLmxlbmd0aCxyZXN1bHQ9e307d2hpbGUoKytpbmRleDxsZW5ndGgpe3ZhciB2YWx1ZT1pbmRleDx2YWxzTGVuZ3RoP3ZhbHVlc1tpbmRleF06dW5kZWZpbmVkO2Fzc2lnbkZ1bmMocmVzdWx0LHByb3BzW2luZGV4XSx2YWx1ZSl9cmV0dXJuIHJlc3VsdH1mdW5jdGlvbiBjYXN0QXJyYXlMaWtlT2JqZWN0KHZhbHVlKXtyZXR1cm4gaXNBcnJheUxpa2VPYmplY3QodmFsdWUpPwp2YWx1ZTpbXX1mdW5jdGlvbiBjYXN0RnVuY3Rpb24odmFsdWUpe3JldHVybiB0eXBlb2YgdmFsdWU9PSJmdW5jdGlvbiI/dmFsdWU6aWRlbnRpdHl9ZnVuY3Rpb24gY2FzdFBhdGgodmFsdWUsb2JqZWN0KXtpZihpc0FycmF5KHZhbHVlKSlyZXR1cm4gdmFsdWU7cmV0dXJuIGlzS2V5KHZhbHVlLG9iamVjdCk/W3ZhbHVlXTpzdHJpbmdUb1BhdGgodG9TdHJpbmcodmFsdWUpKX12YXIgY2FzdFJlc3Q9YmFzZVJlc3Q7ZnVuY3Rpb24gY2FzdFNsaWNlKGFycmF5LHN0YXJ0LGVuZCl7dmFyIGxlbmd0aD1hcnJheS5sZW5ndGg7ZW5kPWVuZD09PXVuZGVmaW5lZD9sZW5ndGg6ZW5kO3JldHVybiFzdGFydCYmZW5kPj1sZW5ndGg/YXJyYXk6YmFzZVNsaWNlKGFycmF5LHN0YXJ0LGVuZCl9dmFyIGNsZWFyVGltZW91dD1jdHhDbGVhclRpbWVvdXR8fGZ1bmN0aW9uKGlkKXtyZXR1cm4gcm9vdC5jbGVhclRpbWVvdXQoaWQpfTtmdW5jdGlvbiBjbG9uZUJ1ZmZlcihidWZmZXIsaXNEZWVwKXtpZihpc0RlZXApcmV0dXJuIGJ1ZmZlci5zbGljZSgpOwp2YXIgbGVuZ3RoPWJ1ZmZlci5sZW5ndGgscmVzdWx0PWFsbG9jVW5zYWZlP2FsbG9jVW5zYWZlKGxlbmd0aCk6bmV3IGJ1ZmZlci5jb25zdHJ1Y3RvcihsZW5ndGgpO2J1ZmZlci5jb3B5KHJlc3VsdCk7cmV0dXJuIHJlc3VsdH1mdW5jdGlvbiBjbG9uZUFycmF5QnVmZmVyKGFycmF5QnVmZmVyKXt2YXIgcmVzdWx0PW5ldyBhcnJheUJ1ZmZlci5jb25zdHJ1Y3RvcihhcnJheUJ1ZmZlci5ieXRlTGVuZ3RoKTsobmV3IFVpbnQ4QXJyYXkocmVzdWx0KSkuc2V0KG5ldyBVaW50OEFycmF5KGFycmF5QnVmZmVyKSk7cmV0dXJuIHJlc3VsdH1mdW5jdGlvbiBjbG9uZURhdGFWaWV3KGRhdGFWaWV3LGlzRGVlcCl7dmFyIGJ1ZmZlcj1pc0RlZXA/Y2xvbmVBcnJheUJ1ZmZlcihkYXRhVmlldy5idWZmZXIpOmRhdGFWaWV3LmJ1ZmZlcjtyZXR1cm4gbmV3IGRhdGFWaWV3LmNvbnN0cnVjdG9yKGJ1ZmZlcixkYXRhVmlldy5ieXRlT2Zmc2V0LGRhdGFWaWV3LmJ5dGVMZW5ndGgpfWZ1bmN0aW9uIGNsb25lUmVnRXhwKHJlZ2V4cCl7dmFyIHJlc3VsdD0KbmV3IHJlZ2V4cC5jb25zdHJ1Y3RvcihyZWdleHAuc291cmNlLHJlRmxhZ3MuZXhlYyhyZWdleHApKTtyZXN1bHQubGFzdEluZGV4PXJlZ2V4cC5sYXN0SW5kZXg7cmV0dXJuIHJlc3VsdH1mdW5jdGlvbiBjbG9uZVN5bWJvbChzeW1ib2wpe3JldHVybiBzeW1ib2xWYWx1ZU9mP09iamVjdChzeW1ib2xWYWx1ZU9mLmNhbGwoc3ltYm9sKSk6e319ZnVuY3Rpb24gY2xvbmVUeXBlZEFycmF5KHR5cGVkQXJyYXksaXNEZWVwKXt2YXIgYnVmZmVyPWlzRGVlcD9jbG9uZUFycmF5QnVmZmVyKHR5cGVkQXJyYXkuYnVmZmVyKTp0eXBlZEFycmF5LmJ1ZmZlcjtyZXR1cm4gbmV3IHR5cGVkQXJyYXkuY29uc3RydWN0b3IoYnVmZmVyLHR5cGVkQXJyYXkuYnl0ZU9mZnNldCx0eXBlZEFycmF5Lmxlbmd0aCl9ZnVuY3Rpb24gY29tcGFyZUFzY2VuZGluZyh2YWx1ZSxvdGhlcil7aWYodmFsdWUhPT1vdGhlcil7dmFyIHZhbElzRGVmaW5lZD12YWx1ZSE9PXVuZGVmaW5lZCx2YWxJc051bGw9dmFsdWU9PT0KbnVsbCx2YWxJc1JlZmxleGl2ZT12YWx1ZT09PXZhbHVlLHZhbElzU3ltYm9sPWlzU3ltYm9sKHZhbHVlKTt2YXIgb3RoSXNEZWZpbmVkPW90aGVyIT09dW5kZWZpbmVkLG90aElzTnVsbD1vdGhlcj09PW51bGwsb3RoSXNSZWZsZXhpdmU9b3RoZXI9PT1vdGhlcixvdGhJc1N5bWJvbD1pc1N5bWJvbChvdGhlcik7aWYoIW90aElzTnVsbCYmIW90aElzU3ltYm9sJiYhdmFsSXNTeW1ib2wmJnZhbHVlPm90aGVyfHx2YWxJc1N5bWJvbCYmb3RoSXNEZWZpbmVkJiZvdGhJc1JlZmxleGl2ZSYmIW90aElzTnVsbCYmIW90aElzU3ltYm9sfHx2YWxJc051bGwmJm90aElzRGVmaW5lZCYmb3RoSXNSZWZsZXhpdmV8fCF2YWxJc0RlZmluZWQmJm90aElzUmVmbGV4aXZlfHwhdmFsSXNSZWZsZXhpdmUpcmV0dXJuIDE7aWYoIXZhbElzTnVsbCYmIXZhbElzU3ltYm9sJiYhb3RoSXNTeW1ib2wmJnZhbHVlPG90aGVyfHxvdGhJc1N5bWJvbCYmdmFsSXNEZWZpbmVkJiZ2YWxJc1JlZmxleGl2ZSYmIXZhbElzTnVsbCYmCiF2YWxJc1N5bWJvbHx8b3RoSXNOdWxsJiZ2YWxJc0RlZmluZWQmJnZhbElzUmVmbGV4aXZlfHwhb3RoSXNEZWZpbmVkJiZ2YWxJc1JlZmxleGl2ZXx8IW90aElzUmVmbGV4aXZlKXJldHVybi0xfXJldHVybiAwfWZ1bmN0aW9uIGNvbXBhcmVNdWx0aXBsZShvYmplY3Qsb3RoZXIsb3JkZXJzKXt2YXIgaW5kZXg9LTEsb2JqQ3JpdGVyaWE9b2JqZWN0LmNyaXRlcmlhLG90aENyaXRlcmlhPW90aGVyLmNyaXRlcmlhLGxlbmd0aD1vYmpDcml0ZXJpYS5sZW5ndGgsb3JkZXJzTGVuZ3RoPW9yZGVycy5sZW5ndGg7d2hpbGUoKytpbmRleDxsZW5ndGgpe3ZhciByZXN1bHQ9Y29tcGFyZUFzY2VuZGluZyhvYmpDcml0ZXJpYVtpbmRleF0sb3RoQ3JpdGVyaWFbaW5kZXhdKTtpZihyZXN1bHQpe2lmKGluZGV4Pj1vcmRlcnNMZW5ndGgpcmV0dXJuIHJlc3VsdDt2YXIgb3JkZXI9b3JkZXJzW2luZGV4XTtyZXR1cm4gcmVzdWx0KihvcmRlcj09ImRlc2MiPy0xOjEpfX1yZXR1cm4gb2JqZWN0LmluZGV4LQpvdGhlci5pbmRleH1mdW5jdGlvbiBjb21wb3NlQXJncyhhcmdzLHBhcnRpYWxzLGhvbGRlcnMsaXNDdXJyaWVkKXt2YXIgYXJnc0luZGV4PS0xLGFyZ3NMZW5ndGg9YXJncy5sZW5ndGgsaG9sZGVyc0xlbmd0aD1ob2xkZXJzLmxlbmd0aCxsZWZ0SW5kZXg9LTEsbGVmdExlbmd0aD1wYXJ0aWFscy5sZW5ndGgscmFuZ2VMZW5ndGg9bmF0aXZlTWF4KGFyZ3NMZW5ndGgtaG9sZGVyc0xlbmd0aCwwKSxyZXN1bHQ9QXJyYXkobGVmdExlbmd0aCtyYW5nZUxlbmd0aCksaXNVbmN1cnJpZWQ9IWlzQ3VycmllZDt3aGlsZSgrK2xlZnRJbmRleDxsZWZ0TGVuZ3RoKXJlc3VsdFtsZWZ0SW5kZXhdPXBhcnRpYWxzW2xlZnRJbmRleF07d2hpbGUoKythcmdzSW5kZXg8aG9sZGVyc0xlbmd0aClpZihpc1VuY3VycmllZHx8YXJnc0luZGV4PGFyZ3NMZW5ndGgpcmVzdWx0W2hvbGRlcnNbYXJnc0luZGV4XV09YXJnc1thcmdzSW5kZXhdO3doaWxlKHJhbmdlTGVuZ3RoLS0pcmVzdWx0W2xlZnRJbmRleCsrXT0KYXJnc1thcmdzSW5kZXgrK107cmV0dXJuIHJlc3VsdH1mdW5jdGlvbiBjb21wb3NlQXJnc1JpZ2h0KGFyZ3MscGFydGlhbHMsaG9sZGVycyxpc0N1cnJpZWQpe3ZhciBhcmdzSW5kZXg9LTEsYXJnc0xlbmd0aD1hcmdzLmxlbmd0aCxob2xkZXJzSW5kZXg9LTEsaG9sZGVyc0xlbmd0aD1ob2xkZXJzLmxlbmd0aCxyaWdodEluZGV4PS0xLHJpZ2h0TGVuZ3RoPXBhcnRpYWxzLmxlbmd0aCxyYW5nZUxlbmd0aD1uYXRpdmVNYXgoYXJnc0xlbmd0aC1ob2xkZXJzTGVuZ3RoLDApLHJlc3VsdD1BcnJheShyYW5nZUxlbmd0aCtyaWdodExlbmd0aCksaXNVbmN1cnJpZWQ9IWlzQ3VycmllZDt3aGlsZSgrK2FyZ3NJbmRleDxyYW5nZUxlbmd0aClyZXN1bHRbYXJnc0luZGV4XT1hcmdzW2FyZ3NJbmRleF07dmFyIG9mZnNldD1hcmdzSW5kZXg7d2hpbGUoKytyaWdodEluZGV4PHJpZ2h0TGVuZ3RoKXJlc3VsdFtvZmZzZXQrcmlnaHRJbmRleF09cGFydGlhbHNbcmlnaHRJbmRleF07d2hpbGUoKytob2xkZXJzSW5kZXg8CmhvbGRlcnNMZW5ndGgpaWYoaXNVbmN1cnJpZWR8fGFyZ3NJbmRleDxhcmdzTGVuZ3RoKXJlc3VsdFtvZmZzZXQraG9sZGVyc1tob2xkZXJzSW5kZXhdXT1hcmdzW2FyZ3NJbmRleCsrXTtyZXR1cm4gcmVzdWx0fWZ1bmN0aW9uIGNvcHlBcnJheShzb3VyY2UsYXJyYXkpe3ZhciBpbmRleD0tMSxsZW5ndGg9c291cmNlLmxlbmd0aDthcnJheXx8KGFycmF5PUFycmF5KGxlbmd0aCkpO3doaWxlKCsraW5kZXg8bGVuZ3RoKWFycmF5W2luZGV4XT1zb3VyY2VbaW5kZXhdO3JldHVybiBhcnJheX1mdW5jdGlvbiBjb3B5T2JqZWN0KHNvdXJjZSxwcm9wcyxvYmplY3QsY3VzdG9taXplcil7dmFyIGlzTmV3PSFvYmplY3Q7b2JqZWN0fHwob2JqZWN0PXt9KTt2YXIgaW5kZXg9LTEsbGVuZ3RoPXByb3BzLmxlbmd0aDt3aGlsZSgrK2luZGV4PGxlbmd0aCl7dmFyIGtleT1wcm9wc1tpbmRleF07dmFyIG5ld1ZhbHVlPWN1c3RvbWl6ZXI/Y3VzdG9taXplcihvYmplY3Rba2V5XSxzb3VyY2Vba2V5XSwKa2V5LG9iamVjdCxzb3VyY2UpOnVuZGVmaW5lZDtpZihuZXdWYWx1ZT09PXVuZGVmaW5lZCluZXdWYWx1ZT1zb3VyY2Vba2V5XTtpZihpc05ldyliYXNlQXNzaWduVmFsdWUob2JqZWN0LGtleSxuZXdWYWx1ZSk7ZWxzZSBhc3NpZ25WYWx1ZShvYmplY3Qsa2V5LG5ld1ZhbHVlKX1yZXR1cm4gb2JqZWN0fWZ1bmN0aW9uIGNvcHlTeW1ib2xzKHNvdXJjZSxvYmplY3Qpe3JldHVybiBjb3B5T2JqZWN0KHNvdXJjZSxnZXRTeW1ib2xzKHNvdXJjZSksb2JqZWN0KX1mdW5jdGlvbiBjb3B5U3ltYm9sc0luKHNvdXJjZSxvYmplY3Qpe3JldHVybiBjb3B5T2JqZWN0KHNvdXJjZSxnZXRTeW1ib2xzSW4oc291cmNlKSxvYmplY3QpfWZ1bmN0aW9uIGNyZWF0ZUFnZ3JlZ2F0b3Ioc2V0dGVyLGluaXRpYWxpemVyKXtyZXR1cm4gZnVuY3Rpb24oY29sbGVjdGlvbixpdGVyYXRlZSl7dmFyIGZ1bmM9aXNBcnJheShjb2xsZWN0aW9uKT9hcnJheUFnZ3JlZ2F0b3I6YmFzZUFnZ3JlZ2F0b3IsYWNjdW11bGF0b3I9CmluaXRpYWxpemVyP2luaXRpYWxpemVyKCk6e307cmV0dXJuIGZ1bmMoY29sbGVjdGlvbixzZXR0ZXIsZ2V0SXRlcmF0ZWUoaXRlcmF0ZWUsMiksYWNjdW11bGF0b3IpfX1mdW5jdGlvbiBjcmVhdGVBc3NpZ25lcihhc3NpZ25lcil7cmV0dXJuIGJhc2VSZXN0KGZ1bmN0aW9uKG9iamVjdCxzb3VyY2VzKXt2YXIgaW5kZXg9LTEsbGVuZ3RoPXNvdXJjZXMubGVuZ3RoLGN1c3RvbWl6ZXI9bGVuZ3RoPjE/c291cmNlc1tsZW5ndGgtMV06dW5kZWZpbmVkLGd1YXJkPWxlbmd0aD4yP3NvdXJjZXNbMl06dW5kZWZpbmVkO2N1c3RvbWl6ZXI9YXNzaWduZXIubGVuZ3RoPjMmJnR5cGVvZiBjdXN0b21pemVyPT0iZnVuY3Rpb24iPyhsZW5ndGgtLSxjdXN0b21pemVyKTp1bmRlZmluZWQ7aWYoZ3VhcmQmJmlzSXRlcmF0ZWVDYWxsKHNvdXJjZXNbMF0sc291cmNlc1sxXSxndWFyZCkpe2N1c3RvbWl6ZXI9bGVuZ3RoPDM/dW5kZWZpbmVkOmN1c3RvbWl6ZXI7bGVuZ3RoPTF9b2JqZWN0PU9iamVjdChvYmplY3QpOwp3aGlsZSgrK2luZGV4PGxlbmd0aCl7dmFyIHNvdXJjZT1zb3VyY2VzW2luZGV4XTtpZihzb3VyY2UpYXNzaWduZXIob2JqZWN0LHNvdXJjZSxpbmRleCxjdXN0b21pemVyKX1yZXR1cm4gb2JqZWN0fSl9ZnVuY3Rpb24gY3JlYXRlQmFzZUVhY2goZWFjaEZ1bmMsZnJvbVJpZ2h0KXtyZXR1cm4gZnVuY3Rpb24oY29sbGVjdGlvbixpdGVyYXRlZSl7aWYoY29sbGVjdGlvbj09bnVsbClyZXR1cm4gY29sbGVjdGlvbjtpZighaXNBcnJheUxpa2UoY29sbGVjdGlvbikpcmV0dXJuIGVhY2hGdW5jKGNvbGxlY3Rpb24saXRlcmF0ZWUpO3ZhciBsZW5ndGg9Y29sbGVjdGlvbi5sZW5ndGgsaW5kZXg9ZnJvbVJpZ2h0P2xlbmd0aDotMSxpdGVyYWJsZT1PYmplY3QoY29sbGVjdGlvbik7d2hpbGUoZnJvbVJpZ2h0P2luZGV4LS06KytpbmRleDxsZW5ndGgpaWYoaXRlcmF0ZWUoaXRlcmFibGVbaW5kZXhdLGluZGV4LGl0ZXJhYmxlKT09PWZhbHNlKWJyZWFrO3JldHVybiBjb2xsZWN0aW9ufX1mdW5jdGlvbiBjcmVhdGVCYXNlRm9yKGZyb21SaWdodCl7cmV0dXJuIGZ1bmN0aW9uKG9iamVjdCwKaXRlcmF0ZWUsa2V5c0Z1bmMpe3ZhciBpbmRleD0tMSxpdGVyYWJsZT1PYmplY3Qob2JqZWN0KSxwcm9wcz1rZXlzRnVuYyhvYmplY3QpLGxlbmd0aD1wcm9wcy5sZW5ndGg7d2hpbGUobGVuZ3RoLS0pe3ZhciBrZXk9cHJvcHNbZnJvbVJpZ2h0P2xlbmd0aDorK2luZGV4XTtpZihpdGVyYXRlZShpdGVyYWJsZVtrZXldLGtleSxpdGVyYWJsZSk9PT1mYWxzZSlicmVha31yZXR1cm4gb2JqZWN0fX1mdW5jdGlvbiBjcmVhdGVCaW5kKGZ1bmMsYml0bWFzayx0aGlzQXJnKXt2YXIgaXNCaW5kPWJpdG1hc2smV1JBUF9CSU5EX0ZMQUcsQ3Rvcj1jcmVhdGVDdG9yKGZ1bmMpO2Z1bmN0aW9uIHdyYXBwZXIoKXt2YXIgZm49dGhpcyYmdGhpcyE9PXJvb3QmJnRoaXMgaW5zdGFuY2VvZiB3cmFwcGVyP0N0b3I6ZnVuYztyZXR1cm4gZm4uYXBwbHkoaXNCaW5kP3RoaXNBcmc6dGhpcyxhcmd1bWVudHMpfXJldHVybiB3cmFwcGVyfWZ1bmN0aW9uIGNyZWF0ZUNhc2VGaXJzdChtZXRob2ROYW1lKXtyZXR1cm4gZnVuY3Rpb24oc3RyaW5nKXtzdHJpbmc9CnRvU3RyaW5nKHN0cmluZyk7dmFyIHN0clN5bWJvbHM9aGFzVW5pY29kZShzdHJpbmcpP3N0cmluZ1RvQXJyYXkoc3RyaW5nKTp1bmRlZmluZWQ7dmFyIGNocj1zdHJTeW1ib2xzP3N0clN5bWJvbHNbMF06c3RyaW5nLmNoYXJBdCgwKTt2YXIgdHJhaWxpbmc9c3RyU3ltYm9scz9jYXN0U2xpY2Uoc3RyU3ltYm9scywxKS5qb2luKCIiKTpzdHJpbmcuc2xpY2UoMSk7cmV0dXJuIGNoclttZXRob2ROYW1lXSgpK3RyYWlsaW5nfX1mdW5jdGlvbiBjcmVhdGVDb21wb3VuZGVyKGNhbGxiYWNrKXtyZXR1cm4gZnVuY3Rpb24oc3RyaW5nKXtyZXR1cm4gYXJyYXlSZWR1Y2Uod29yZHMoZGVidXJyKHN0cmluZykucmVwbGFjZShyZUFwb3MsIiIpKSxjYWxsYmFjaywiIil9fWZ1bmN0aW9uIGNyZWF0ZUN0b3IoQ3Rvcil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGFyZ3M9YXJndW1lbnRzO3N3aXRjaChhcmdzLmxlbmd0aCl7Y2FzZSAwOnJldHVybiBuZXcgQ3RvcjtjYXNlIDE6cmV0dXJuIG5ldyBDdG9yKGFyZ3NbMF0pOwpjYXNlIDI6cmV0dXJuIG5ldyBDdG9yKGFyZ3NbMF0sYXJnc1sxXSk7Y2FzZSAzOnJldHVybiBuZXcgQ3RvcihhcmdzWzBdLGFyZ3NbMV0sYXJnc1syXSk7Y2FzZSA0OnJldHVybiBuZXcgQ3RvcihhcmdzWzBdLGFyZ3NbMV0sYXJnc1syXSxhcmdzWzNdKTtjYXNlIDU6cmV0dXJuIG5ldyBDdG9yKGFyZ3NbMF0sYXJnc1sxXSxhcmdzWzJdLGFyZ3NbM10sYXJnc1s0XSk7Y2FzZSA2OnJldHVybiBuZXcgQ3RvcihhcmdzWzBdLGFyZ3NbMV0sYXJnc1syXSxhcmdzWzNdLGFyZ3NbNF0sYXJnc1s1XSk7Y2FzZSA3OnJldHVybiBuZXcgQ3RvcihhcmdzWzBdLGFyZ3NbMV0sYXJnc1syXSxhcmdzWzNdLGFyZ3NbNF0sYXJnc1s1XSxhcmdzWzZdKX12YXIgdGhpc0JpbmRpbmc9YmFzZUNyZWF0ZShDdG9yLnByb3RvdHlwZSkscmVzdWx0PUN0b3IuYXBwbHkodGhpc0JpbmRpbmcsYXJncyk7cmV0dXJuIGlzT2JqZWN0KHJlc3VsdCk/cmVzdWx0OnRoaXNCaW5kaW5nfX1mdW5jdGlvbiBjcmVhdGVDdXJyeShmdW5jLApiaXRtYXNrLGFyaXR5KXt2YXIgQ3Rvcj1jcmVhdGVDdG9yKGZ1bmMpO2Z1bmN0aW9uIHdyYXBwZXIoKXt2YXIgbGVuZ3RoPWFyZ3VtZW50cy5sZW5ndGgsYXJncz1BcnJheShsZW5ndGgpLGluZGV4PWxlbmd0aCxwbGFjZWhvbGRlcj1nZXRIb2xkZXIod3JhcHBlcik7d2hpbGUoaW5kZXgtLSlhcmdzW2luZGV4XT1hcmd1bWVudHNbaW5kZXhdO3ZhciBob2xkZXJzPWxlbmd0aDwzJiZhcmdzWzBdIT09cGxhY2Vob2xkZXImJmFyZ3NbbGVuZ3RoLTFdIT09cGxhY2Vob2xkZXI/W106cmVwbGFjZUhvbGRlcnMoYXJncyxwbGFjZWhvbGRlcik7bGVuZ3RoLT1ob2xkZXJzLmxlbmd0aDtpZihsZW5ndGg8YXJpdHkpcmV0dXJuIGNyZWF0ZVJlY3VycnkoZnVuYyxiaXRtYXNrLGNyZWF0ZUh5YnJpZCx3cmFwcGVyLnBsYWNlaG9sZGVyLHVuZGVmaW5lZCxhcmdzLGhvbGRlcnMsdW5kZWZpbmVkLHVuZGVmaW5lZCxhcml0eS1sZW5ndGgpO3ZhciBmbj10aGlzJiZ0aGlzIT09cm9vdCYmdGhpcyBpbnN0YW5jZW9mCndyYXBwZXI/Q3RvcjpmdW5jO3JldHVybiBhcHBseShmbix0aGlzLGFyZ3MpfXJldHVybiB3cmFwcGVyfWZ1bmN0aW9uIGNyZWF0ZUZpbmQoZmluZEluZGV4RnVuYyl7cmV0dXJuIGZ1bmN0aW9uKGNvbGxlY3Rpb24scHJlZGljYXRlLGZyb21JbmRleCl7dmFyIGl0ZXJhYmxlPU9iamVjdChjb2xsZWN0aW9uKTtpZighaXNBcnJheUxpa2UoY29sbGVjdGlvbikpe3ZhciBpdGVyYXRlZT1nZXRJdGVyYXRlZShwcmVkaWNhdGUsMyk7Y29sbGVjdGlvbj1rZXlzKGNvbGxlY3Rpb24pO3ByZWRpY2F0ZT1mdW5jdGlvbihrZXkpe3JldHVybiBpdGVyYXRlZShpdGVyYWJsZVtrZXldLGtleSxpdGVyYWJsZSl9fXZhciBpbmRleD1maW5kSW5kZXhGdW5jKGNvbGxlY3Rpb24scHJlZGljYXRlLGZyb21JbmRleCk7cmV0dXJuIGluZGV4Pi0xP2l0ZXJhYmxlW2l0ZXJhdGVlP2NvbGxlY3Rpb25baW5kZXhdOmluZGV4XTp1bmRlZmluZWR9fWZ1bmN0aW9uIGNyZWF0ZUZsb3coZnJvbVJpZ2h0KXtyZXR1cm4gZmxhdFJlc3QoZnVuY3Rpb24oZnVuY3Mpe3ZhciBsZW5ndGg9CmZ1bmNzLmxlbmd0aCxpbmRleD1sZW5ndGgscHJlcmVxPUxvZGFzaFdyYXBwZXIucHJvdG90eXBlLnRocnU7aWYoZnJvbVJpZ2h0KWZ1bmNzLnJldmVyc2UoKTt3aGlsZShpbmRleC0tKXt2YXIgZnVuYz1mdW5jc1tpbmRleF07aWYodHlwZW9mIGZ1bmMhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpO2lmKHByZXJlcSYmIXdyYXBwZXImJmdldEZ1bmNOYW1lKGZ1bmMpPT0id3JhcHBlciIpdmFyIHdyYXBwZXI9bmV3IExvZGFzaFdyYXBwZXIoW10sdHJ1ZSl9aW5kZXg9d3JhcHBlcj9pbmRleDpsZW5ndGg7d2hpbGUoKytpbmRleDxsZW5ndGgpe2Z1bmM9ZnVuY3NbaW5kZXhdO3ZhciBmdW5jTmFtZT1nZXRGdW5jTmFtZShmdW5jKSxkYXRhPWZ1bmNOYW1lPT0id3JhcHBlciI/Z2V0RGF0YShmdW5jKTp1bmRlZmluZWQ7aWYoZGF0YSYmaXNMYXppYWJsZShkYXRhWzBdKSYmZGF0YVsxXT09KFdSQVBfQVJZX0ZMQUd8V1JBUF9DVVJSWV9GTEFHfFdSQVBfUEFSVElBTF9GTEFHfApXUkFQX1JFQVJHX0ZMQUcpJiYhZGF0YVs0XS5sZW5ndGgmJmRhdGFbOV09PTEpd3JhcHBlcj13cmFwcGVyW2dldEZ1bmNOYW1lKGRhdGFbMF0pXS5hcHBseSh3cmFwcGVyLGRhdGFbM10pO2Vsc2Ugd3JhcHBlcj1mdW5jLmxlbmd0aD09MSYmaXNMYXppYWJsZShmdW5jKT93cmFwcGVyW2Z1bmNOYW1lXSgpOndyYXBwZXIudGhydShmdW5jKX1yZXR1cm4gZnVuY3Rpb24oKXt2YXIgYXJncz1hcmd1bWVudHMsdmFsdWU9YXJnc1swXTtpZih3cmFwcGVyJiZhcmdzLmxlbmd0aD09MSYmaXNBcnJheSh2YWx1ZSkpcmV0dXJuIHdyYXBwZXIucGxhbnQodmFsdWUpLnZhbHVlKCk7dmFyIGluZGV4PTAscmVzdWx0PWxlbmd0aD9mdW5jc1tpbmRleF0uYXBwbHkodGhpcyxhcmdzKTp2YWx1ZTt3aGlsZSgrK2luZGV4PGxlbmd0aClyZXN1bHQ9ZnVuY3NbaW5kZXhdLmNhbGwodGhpcyxyZXN1bHQpO3JldHVybiByZXN1bHR9fSl9ZnVuY3Rpb24gY3JlYXRlSHlicmlkKGZ1bmMsYml0bWFzayx0aGlzQXJnLApwYXJ0aWFscyxob2xkZXJzLHBhcnRpYWxzUmlnaHQsaG9sZGVyc1JpZ2h0LGFyZ1BvcyxhcnksYXJpdHkpe3ZhciBpc0FyeT1iaXRtYXNrJldSQVBfQVJZX0ZMQUcsaXNCaW5kPWJpdG1hc2smV1JBUF9CSU5EX0ZMQUcsaXNCaW5kS2V5PWJpdG1hc2smV1JBUF9CSU5EX0tFWV9GTEFHLGlzQ3VycmllZD1iaXRtYXNrJihXUkFQX0NVUlJZX0ZMQUd8V1JBUF9DVVJSWV9SSUdIVF9GTEFHKSxpc0ZsaXA9Yml0bWFzayZXUkFQX0ZMSVBfRkxBRyxDdG9yPWlzQmluZEtleT91bmRlZmluZWQ6Y3JlYXRlQ3RvcihmdW5jKTtmdW5jdGlvbiB3cmFwcGVyKCl7dmFyIGxlbmd0aD1hcmd1bWVudHMubGVuZ3RoLGFyZ3M9QXJyYXkobGVuZ3RoKSxpbmRleD1sZW5ndGg7d2hpbGUoaW5kZXgtLSlhcmdzW2luZGV4XT1hcmd1bWVudHNbaW5kZXhdO2lmKGlzQ3VycmllZCl2YXIgcGxhY2Vob2xkZXI9Z2V0SG9sZGVyKHdyYXBwZXIpLGhvbGRlcnNDb3VudD1jb3VudEhvbGRlcnMoYXJncyxwbGFjZWhvbGRlcik7CmlmKHBhcnRpYWxzKWFyZ3M9Y29tcG9zZUFyZ3MoYXJncyxwYXJ0aWFscyxob2xkZXJzLGlzQ3VycmllZCk7aWYocGFydGlhbHNSaWdodClhcmdzPWNvbXBvc2VBcmdzUmlnaHQoYXJncyxwYXJ0aWFsc1JpZ2h0LGhvbGRlcnNSaWdodCxpc0N1cnJpZWQpO2xlbmd0aC09aG9sZGVyc0NvdW50O2lmKGlzQ3VycmllZCYmbGVuZ3RoPGFyaXR5KXt2YXIgbmV3SG9sZGVycz1yZXBsYWNlSG9sZGVycyhhcmdzLHBsYWNlaG9sZGVyKTtyZXR1cm4gY3JlYXRlUmVjdXJyeShmdW5jLGJpdG1hc2ssY3JlYXRlSHlicmlkLHdyYXBwZXIucGxhY2Vob2xkZXIsdGhpc0FyZyxhcmdzLG5ld0hvbGRlcnMsYXJnUG9zLGFyeSxhcml0eS1sZW5ndGgpfXZhciB0aGlzQmluZGluZz1pc0JpbmQ/dGhpc0FyZzp0aGlzLGZuPWlzQmluZEtleT90aGlzQmluZGluZ1tmdW5jXTpmdW5jO2xlbmd0aD1hcmdzLmxlbmd0aDtpZihhcmdQb3MpYXJncz1yZW9yZGVyKGFyZ3MsYXJnUG9zKTtlbHNlIGlmKGlzRmxpcCYmbGVuZ3RoPgoxKWFyZ3MucmV2ZXJzZSgpO2lmKGlzQXJ5JiZhcnk8bGVuZ3RoKWFyZ3MubGVuZ3RoPWFyeTtpZih0aGlzJiZ0aGlzIT09cm9vdCYmdGhpcyBpbnN0YW5jZW9mIHdyYXBwZXIpZm49Q3Rvcnx8Y3JlYXRlQ3Rvcihmbik7cmV0dXJuIGZuLmFwcGx5KHRoaXNCaW5kaW5nLGFyZ3MpfXJldHVybiB3cmFwcGVyfWZ1bmN0aW9uIGNyZWF0ZUludmVydGVyKHNldHRlcix0b0l0ZXJhdGVlKXtyZXR1cm4gZnVuY3Rpb24ob2JqZWN0LGl0ZXJhdGVlKXtyZXR1cm4gYmFzZUludmVydGVyKG9iamVjdCxzZXR0ZXIsdG9JdGVyYXRlZShpdGVyYXRlZSkse30pfX1mdW5jdGlvbiBjcmVhdGVNYXRoT3BlcmF0aW9uKG9wZXJhdG9yLGRlZmF1bHRWYWx1ZSl7cmV0dXJuIGZ1bmN0aW9uKHZhbHVlLG90aGVyKXt2YXIgcmVzdWx0O2lmKHZhbHVlPT09dW5kZWZpbmVkJiZvdGhlcj09PXVuZGVmaW5lZClyZXR1cm4gZGVmYXVsdFZhbHVlO2lmKHZhbHVlIT09dW5kZWZpbmVkKXJlc3VsdD12YWx1ZTtpZihvdGhlciE9PQp1bmRlZmluZWQpe2lmKHJlc3VsdD09PXVuZGVmaW5lZClyZXR1cm4gb3RoZXI7aWYodHlwZW9mIHZhbHVlPT0ic3RyaW5nInx8dHlwZW9mIG90aGVyPT0ic3RyaW5nIil7dmFsdWU9YmFzZVRvU3RyaW5nKHZhbHVlKTtvdGhlcj1iYXNlVG9TdHJpbmcob3RoZXIpfWVsc2V7dmFsdWU9YmFzZVRvTnVtYmVyKHZhbHVlKTtvdGhlcj1iYXNlVG9OdW1iZXIob3RoZXIpfXJlc3VsdD1vcGVyYXRvcih2YWx1ZSxvdGhlcil9cmV0dXJuIHJlc3VsdH19ZnVuY3Rpb24gY3JlYXRlT3ZlcihhcnJheUZ1bmMpe3JldHVybiBmbGF0UmVzdChmdW5jdGlvbihpdGVyYXRlZXMpe2l0ZXJhdGVlcz1hcnJheU1hcChpdGVyYXRlZXMsYmFzZVVuYXJ5KGdldEl0ZXJhdGVlKCkpKTtyZXR1cm4gYmFzZVJlc3QoZnVuY3Rpb24oYXJncyl7dmFyIHRoaXNBcmc9dGhpcztyZXR1cm4gYXJyYXlGdW5jKGl0ZXJhdGVlcyxmdW5jdGlvbihpdGVyYXRlZSl7cmV0dXJuIGFwcGx5KGl0ZXJhdGVlLHRoaXNBcmcsYXJncyl9KX0pfSl9CmZ1bmN0aW9uIGNyZWF0ZVBhZGRpbmcobGVuZ3RoLGNoYXJzKXtjaGFycz1jaGFycz09PXVuZGVmaW5lZD8iICI6YmFzZVRvU3RyaW5nKGNoYXJzKTt2YXIgY2hhcnNMZW5ndGg9Y2hhcnMubGVuZ3RoO2lmKGNoYXJzTGVuZ3RoPDIpcmV0dXJuIGNoYXJzTGVuZ3RoP2Jhc2VSZXBlYXQoY2hhcnMsbGVuZ3RoKTpjaGFyczt2YXIgcmVzdWx0PWJhc2VSZXBlYXQoY2hhcnMsbmF0aXZlQ2VpbChsZW5ndGgvc3RyaW5nU2l6ZShjaGFycykpKTtyZXR1cm4gaGFzVW5pY29kZShjaGFycyk/Y2FzdFNsaWNlKHN0cmluZ1RvQXJyYXkocmVzdWx0KSwwLGxlbmd0aCkuam9pbigiIik6cmVzdWx0LnNsaWNlKDAsbGVuZ3RoKX1mdW5jdGlvbiBjcmVhdGVQYXJ0aWFsKGZ1bmMsYml0bWFzayx0aGlzQXJnLHBhcnRpYWxzKXt2YXIgaXNCaW5kPWJpdG1hc2smV1JBUF9CSU5EX0ZMQUcsQ3Rvcj1jcmVhdGVDdG9yKGZ1bmMpO2Z1bmN0aW9uIHdyYXBwZXIoKXt2YXIgYXJnc0luZGV4PS0xLGFyZ3NMZW5ndGg9CmFyZ3VtZW50cy5sZW5ndGgsbGVmdEluZGV4PS0xLGxlZnRMZW5ndGg9cGFydGlhbHMubGVuZ3RoLGFyZ3M9QXJyYXkobGVmdExlbmd0aCthcmdzTGVuZ3RoKSxmbj10aGlzJiZ0aGlzIT09cm9vdCYmdGhpcyBpbnN0YW5jZW9mIHdyYXBwZXI/Q3RvcjpmdW5jO3doaWxlKCsrbGVmdEluZGV4PGxlZnRMZW5ndGgpYXJnc1tsZWZ0SW5kZXhdPXBhcnRpYWxzW2xlZnRJbmRleF07d2hpbGUoYXJnc0xlbmd0aC0tKWFyZ3NbbGVmdEluZGV4KytdPWFyZ3VtZW50c1srK2FyZ3NJbmRleF07cmV0dXJuIGFwcGx5KGZuLGlzQmluZD90aGlzQXJnOnRoaXMsYXJncyl9cmV0dXJuIHdyYXBwZXJ9ZnVuY3Rpb24gY3JlYXRlUmFuZ2UoZnJvbVJpZ2h0KXtyZXR1cm4gZnVuY3Rpb24oc3RhcnQsZW5kLHN0ZXApe2lmKHN0ZXAmJnR5cGVvZiBzdGVwIT0ibnVtYmVyIiYmaXNJdGVyYXRlZUNhbGwoc3RhcnQsZW5kLHN0ZXApKWVuZD1zdGVwPXVuZGVmaW5lZDtzdGFydD10b0Zpbml0ZShzdGFydCk7aWYoZW5kPT09CnVuZGVmaW5lZCl7ZW5kPXN0YXJ0O3N0YXJ0PTB9ZWxzZSBlbmQ9dG9GaW5pdGUoZW5kKTtzdGVwPXN0ZXA9PT11bmRlZmluZWQ/c3RhcnQ8ZW5kPzE6LTE6dG9GaW5pdGUoc3RlcCk7cmV0dXJuIGJhc2VSYW5nZShzdGFydCxlbmQsc3RlcCxmcm9tUmlnaHQpfX1mdW5jdGlvbiBjcmVhdGVSZWxhdGlvbmFsT3BlcmF0aW9uKG9wZXJhdG9yKXtyZXR1cm4gZnVuY3Rpb24odmFsdWUsb3RoZXIpe2lmKCEodHlwZW9mIHZhbHVlPT0ic3RyaW5nIiYmdHlwZW9mIG90aGVyPT0ic3RyaW5nIikpe3ZhbHVlPXRvTnVtYmVyKHZhbHVlKTtvdGhlcj10b051bWJlcihvdGhlcil9cmV0dXJuIG9wZXJhdG9yKHZhbHVlLG90aGVyKX19ZnVuY3Rpb24gY3JlYXRlUmVjdXJyeShmdW5jLGJpdG1hc2ssd3JhcEZ1bmMscGxhY2Vob2xkZXIsdGhpc0FyZyxwYXJ0aWFscyxob2xkZXJzLGFyZ1BvcyxhcnksYXJpdHkpe3ZhciBpc0N1cnJ5PWJpdG1hc2smV1JBUF9DVVJSWV9GTEFHLG5ld0hvbGRlcnM9aXNDdXJyeT8KaG9sZGVyczp1bmRlZmluZWQsbmV3SG9sZGVyc1JpZ2h0PWlzQ3Vycnk/dW5kZWZpbmVkOmhvbGRlcnMsbmV3UGFydGlhbHM9aXNDdXJyeT9wYXJ0aWFsczp1bmRlZmluZWQsbmV3UGFydGlhbHNSaWdodD1pc0N1cnJ5P3VuZGVmaW5lZDpwYXJ0aWFscztiaXRtYXNrfD1pc0N1cnJ5P1dSQVBfUEFSVElBTF9GTEFHOldSQVBfUEFSVElBTF9SSUdIVF9GTEFHO2JpdG1hc2smPX4oaXNDdXJyeT9XUkFQX1BBUlRJQUxfUklHSFRfRkxBRzpXUkFQX1BBUlRJQUxfRkxBRyk7aWYoIShiaXRtYXNrJldSQVBfQ1VSUllfQk9VTkRfRkxBRykpYml0bWFzayY9fihXUkFQX0JJTkRfRkxBR3xXUkFQX0JJTkRfS0VZX0ZMQUcpO3ZhciBuZXdEYXRhPVtmdW5jLGJpdG1hc2ssdGhpc0FyZyxuZXdQYXJ0aWFscyxuZXdIb2xkZXJzLG5ld1BhcnRpYWxzUmlnaHQsbmV3SG9sZGVyc1JpZ2h0LGFyZ1BvcyxhcnksYXJpdHldO3ZhciByZXN1bHQ9d3JhcEZ1bmMuYXBwbHkodW5kZWZpbmVkLG5ld0RhdGEpO2lmKGlzTGF6aWFibGUoZnVuYykpc2V0RGF0YShyZXN1bHQsCm5ld0RhdGEpO3Jlc3VsdC5wbGFjZWhvbGRlcj1wbGFjZWhvbGRlcjtyZXR1cm4gc2V0V3JhcFRvU3RyaW5nKHJlc3VsdCxmdW5jLGJpdG1hc2spfWZ1bmN0aW9uIGNyZWF0ZVJvdW5kKG1ldGhvZE5hbWUpe3ZhciBmdW5jPU1hdGhbbWV0aG9kTmFtZV07cmV0dXJuIGZ1bmN0aW9uKG51bWJlcixwcmVjaXNpb24pe251bWJlcj10b051bWJlcihudW1iZXIpO3ByZWNpc2lvbj1wcmVjaXNpb249PW51bGw/MDpuYXRpdmVNaW4odG9JbnRlZ2VyKHByZWNpc2lvbiksMjkyKTtpZihwcmVjaXNpb24pe3ZhciBwYWlyPSh0b1N0cmluZyhudW1iZXIpKyJlIikuc3BsaXQoImUiKSx2YWx1ZT1mdW5jKHBhaXJbMF0rImUiKygrcGFpclsxXStwcmVjaXNpb24pKTtwYWlyPSh0b1N0cmluZyh2YWx1ZSkrImUiKS5zcGxpdCgiZSIpO3JldHVybisocGFpclswXSsiZSIrKCtwYWlyWzFdLXByZWNpc2lvbikpfXJldHVybiBmdW5jKG51bWJlcil9fXZhciBjcmVhdGVTZXQ9IShTZXQmJjEvc2V0VG9BcnJheShuZXcgU2V0KFssCi0wXSkpWzFdPT1JTkZJTklUWSk/bm9vcDpmdW5jdGlvbih2YWx1ZXMpe3JldHVybiBuZXcgU2V0KHZhbHVlcyl9O2Z1bmN0aW9uIGNyZWF0ZVRvUGFpcnMoa2V5c0Z1bmMpe3JldHVybiBmdW5jdGlvbihvYmplY3Qpe3ZhciB0YWc9Z2V0VGFnKG9iamVjdCk7aWYodGFnPT1tYXBUYWcpcmV0dXJuIG1hcFRvQXJyYXkob2JqZWN0KTtpZih0YWc9PXNldFRhZylyZXR1cm4gc2V0VG9QYWlycyhvYmplY3QpO3JldHVybiBiYXNlVG9QYWlycyhvYmplY3Qsa2V5c0Z1bmMob2JqZWN0KSl9fWZ1bmN0aW9uIGNyZWF0ZVdyYXAoZnVuYyxiaXRtYXNrLHRoaXNBcmcscGFydGlhbHMsaG9sZGVycyxhcmdQb3MsYXJ5LGFyaXR5KXt2YXIgaXNCaW5kS2V5PWJpdG1hc2smV1JBUF9CSU5EX0tFWV9GTEFHO2lmKCFpc0JpbmRLZXkmJnR5cGVvZiBmdW5jIT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoRlVOQ19FUlJPUl9URVhUKTt2YXIgbGVuZ3RoPXBhcnRpYWxzP3BhcnRpYWxzLmxlbmd0aDoKMDtpZighbGVuZ3RoKXtiaXRtYXNrJj1+KFdSQVBfUEFSVElBTF9GTEFHfFdSQVBfUEFSVElBTF9SSUdIVF9GTEFHKTtwYXJ0aWFscz1ob2xkZXJzPXVuZGVmaW5lZH1hcnk9YXJ5PT09dW5kZWZpbmVkP2FyeTpuYXRpdmVNYXgodG9JbnRlZ2VyKGFyeSksMCk7YXJpdHk9YXJpdHk9PT11bmRlZmluZWQ/YXJpdHk6dG9JbnRlZ2VyKGFyaXR5KTtsZW5ndGgtPWhvbGRlcnM/aG9sZGVycy5sZW5ndGg6MDtpZihiaXRtYXNrJldSQVBfUEFSVElBTF9SSUdIVF9GTEFHKXt2YXIgcGFydGlhbHNSaWdodD1wYXJ0aWFscyxob2xkZXJzUmlnaHQ9aG9sZGVycztwYXJ0aWFscz1ob2xkZXJzPXVuZGVmaW5lZH12YXIgZGF0YT1pc0JpbmRLZXk/dW5kZWZpbmVkOmdldERhdGEoZnVuYyk7dmFyIG5ld0RhdGE9W2Z1bmMsYml0bWFzayx0aGlzQXJnLHBhcnRpYWxzLGhvbGRlcnMscGFydGlhbHNSaWdodCxob2xkZXJzUmlnaHQsYXJnUG9zLGFyeSxhcml0eV07aWYoZGF0YSltZXJnZURhdGEobmV3RGF0YSwKZGF0YSk7ZnVuYz1uZXdEYXRhWzBdO2JpdG1hc2s9bmV3RGF0YVsxXTt0aGlzQXJnPW5ld0RhdGFbMl07cGFydGlhbHM9bmV3RGF0YVszXTtob2xkZXJzPW5ld0RhdGFbNF07YXJpdHk9bmV3RGF0YVs5XT1uZXdEYXRhWzldPT09dW5kZWZpbmVkP2lzQmluZEtleT8wOmZ1bmMubGVuZ3RoOm5hdGl2ZU1heChuZXdEYXRhWzldLWxlbmd0aCwwKTtpZighYXJpdHkmJmJpdG1hc2smKFdSQVBfQ1VSUllfRkxBR3xXUkFQX0NVUlJZX1JJR0hUX0ZMQUcpKWJpdG1hc2smPX4oV1JBUF9DVVJSWV9GTEFHfFdSQVBfQ1VSUllfUklHSFRfRkxBRyk7aWYoIWJpdG1hc2t8fGJpdG1hc2s9PVdSQVBfQklORF9GTEFHKXZhciByZXN1bHQ9Y3JlYXRlQmluZChmdW5jLGJpdG1hc2ssdGhpc0FyZyk7ZWxzZSBpZihiaXRtYXNrPT1XUkFQX0NVUlJZX0ZMQUd8fGJpdG1hc2s9PVdSQVBfQ1VSUllfUklHSFRfRkxBRylyZXN1bHQ9Y3JlYXRlQ3VycnkoZnVuYyxiaXRtYXNrLGFyaXR5KTtlbHNlIGlmKChiaXRtYXNrPT0KV1JBUF9QQVJUSUFMX0ZMQUd8fGJpdG1hc2s9PShXUkFQX0JJTkRfRkxBR3xXUkFQX1BBUlRJQUxfRkxBRykpJiYhaG9sZGVycy5sZW5ndGgpcmVzdWx0PWNyZWF0ZVBhcnRpYWwoZnVuYyxiaXRtYXNrLHRoaXNBcmcscGFydGlhbHMpO2Vsc2UgcmVzdWx0PWNyZWF0ZUh5YnJpZC5hcHBseSh1bmRlZmluZWQsbmV3RGF0YSk7dmFyIHNldHRlcj1kYXRhP2Jhc2VTZXREYXRhOnNldERhdGE7cmV0dXJuIHNldFdyYXBUb1N0cmluZyhzZXR0ZXIocmVzdWx0LG5ld0RhdGEpLGZ1bmMsYml0bWFzayl9ZnVuY3Rpb24gY3VzdG9tRGVmYXVsdHNBc3NpZ25JbihvYmpWYWx1ZSxzcmNWYWx1ZSxrZXksb2JqZWN0KXtpZihvYmpWYWx1ZT09PXVuZGVmaW5lZHx8ZXEob2JqVmFsdWUsb2JqZWN0UHJvdG9ba2V5XSkmJiFoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCxrZXkpKXJldHVybiBzcmNWYWx1ZTtyZXR1cm4gb2JqVmFsdWV9ZnVuY3Rpb24gY3VzdG9tRGVmYXVsdHNNZXJnZShvYmpWYWx1ZSxzcmNWYWx1ZSwKa2V5LG9iamVjdCxzb3VyY2Usc3RhY2spe2lmKGlzT2JqZWN0KG9ialZhbHVlKSYmaXNPYmplY3Qoc3JjVmFsdWUpKXtzdGFjay5zZXQoc3JjVmFsdWUsb2JqVmFsdWUpO2Jhc2VNZXJnZShvYmpWYWx1ZSxzcmNWYWx1ZSx1bmRlZmluZWQsY3VzdG9tRGVmYXVsdHNNZXJnZSxzdGFjayk7c3RhY2tbImRlbGV0ZSJdKHNyY1ZhbHVlKX1yZXR1cm4gb2JqVmFsdWV9ZnVuY3Rpb24gY3VzdG9tT21pdENsb25lKHZhbHVlKXtyZXR1cm4gaXNQbGFpbk9iamVjdCh2YWx1ZSk/dW5kZWZpbmVkOnZhbHVlfWZ1bmN0aW9uIGVxdWFsQXJyYXlzKGFycmF5LG90aGVyLGJpdG1hc2ssY3VzdG9taXplcixlcXVhbEZ1bmMsc3RhY2spe3ZhciBpc1BhcnRpYWw9Yml0bWFzayZDT01QQVJFX1BBUlRJQUxfRkxBRyxhcnJMZW5ndGg9YXJyYXkubGVuZ3RoLG90aExlbmd0aD1vdGhlci5sZW5ndGg7aWYoYXJyTGVuZ3RoIT1vdGhMZW5ndGgmJiEoaXNQYXJ0aWFsJiZvdGhMZW5ndGg+YXJyTGVuZ3RoKSlyZXR1cm4gZmFsc2U7CnZhciBzdGFja2VkPXN0YWNrLmdldChhcnJheSk7aWYoc3RhY2tlZCYmc3RhY2suZ2V0KG90aGVyKSlyZXR1cm4gc3RhY2tlZD09b3RoZXI7dmFyIGluZGV4PS0xLHJlc3VsdD10cnVlLHNlZW49Yml0bWFzayZDT01QQVJFX1VOT1JERVJFRF9GTEFHP25ldyBTZXRDYWNoZTp1bmRlZmluZWQ7c3RhY2suc2V0KGFycmF5LG90aGVyKTtzdGFjay5zZXQob3RoZXIsYXJyYXkpO3doaWxlKCsraW5kZXg8YXJyTGVuZ3RoKXt2YXIgYXJyVmFsdWU9YXJyYXlbaW5kZXhdLG90aFZhbHVlPW90aGVyW2luZGV4XTtpZihjdXN0b21pemVyKXZhciBjb21wYXJlZD1pc1BhcnRpYWw/Y3VzdG9taXplcihvdGhWYWx1ZSxhcnJWYWx1ZSxpbmRleCxvdGhlcixhcnJheSxzdGFjayk6Y3VzdG9taXplcihhcnJWYWx1ZSxvdGhWYWx1ZSxpbmRleCxhcnJheSxvdGhlcixzdGFjayk7aWYoY29tcGFyZWQhPT11bmRlZmluZWQpe2lmKGNvbXBhcmVkKWNvbnRpbnVlO3Jlc3VsdD1mYWxzZTticmVha31pZihzZWVuKXtpZighYXJyYXlTb21lKG90aGVyLApmdW5jdGlvbihvdGhWYWx1ZSxvdGhJbmRleCl7aWYoIWNhY2hlSGFzKHNlZW4sb3RoSW5kZXgpJiYoYXJyVmFsdWU9PT1vdGhWYWx1ZXx8ZXF1YWxGdW5jKGFyclZhbHVlLG90aFZhbHVlLGJpdG1hc2ssY3VzdG9taXplcixzdGFjaykpKXJldHVybiBzZWVuLnB1c2gob3RoSW5kZXgpfSkpe3Jlc3VsdD1mYWxzZTticmVha319ZWxzZSBpZighKGFyclZhbHVlPT09b3RoVmFsdWV8fGVxdWFsRnVuYyhhcnJWYWx1ZSxvdGhWYWx1ZSxiaXRtYXNrLGN1c3RvbWl6ZXIsc3RhY2spKSl7cmVzdWx0PWZhbHNlO2JyZWFrfX1zdGFja1siZGVsZXRlIl0oYXJyYXkpO3N0YWNrWyJkZWxldGUiXShvdGhlcik7cmV0dXJuIHJlc3VsdH1mdW5jdGlvbiBlcXVhbEJ5VGFnKG9iamVjdCxvdGhlcix0YWcsYml0bWFzayxjdXN0b21pemVyLGVxdWFsRnVuYyxzdGFjayl7c3dpdGNoKHRhZyl7Y2FzZSBkYXRhVmlld1RhZzppZihvYmplY3QuYnl0ZUxlbmd0aCE9b3RoZXIuYnl0ZUxlbmd0aHx8b2JqZWN0LmJ5dGVPZmZzZXQhPQpvdGhlci5ieXRlT2Zmc2V0KXJldHVybiBmYWxzZTtvYmplY3Q9b2JqZWN0LmJ1ZmZlcjtvdGhlcj1vdGhlci5idWZmZXI7Y2FzZSBhcnJheUJ1ZmZlclRhZzppZihvYmplY3QuYnl0ZUxlbmd0aCE9b3RoZXIuYnl0ZUxlbmd0aHx8IWVxdWFsRnVuYyhuZXcgVWludDhBcnJheShvYmplY3QpLG5ldyBVaW50OEFycmF5KG90aGVyKSkpcmV0dXJuIGZhbHNlO3JldHVybiB0cnVlO2Nhc2UgYm9vbFRhZzpjYXNlIGRhdGVUYWc6Y2FzZSBudW1iZXJUYWc6cmV0dXJuIGVxKCtvYmplY3QsK290aGVyKTtjYXNlIGVycm9yVGFnOnJldHVybiBvYmplY3QubmFtZT09b3RoZXIubmFtZSYmb2JqZWN0Lm1lc3NhZ2U9PW90aGVyLm1lc3NhZ2U7Y2FzZSByZWdleHBUYWc6Y2FzZSBzdHJpbmdUYWc6cmV0dXJuIG9iamVjdD09b3RoZXIrIiI7Y2FzZSBtYXBUYWc6dmFyIGNvbnZlcnQ9bWFwVG9BcnJheTtjYXNlIHNldFRhZzp2YXIgaXNQYXJ0aWFsPWJpdG1hc2smQ09NUEFSRV9QQVJUSUFMX0ZMQUc7Y29udmVydHx8Cihjb252ZXJ0PXNldFRvQXJyYXkpO2lmKG9iamVjdC5zaXplIT1vdGhlci5zaXplJiYhaXNQYXJ0aWFsKXJldHVybiBmYWxzZTt2YXIgc3RhY2tlZD1zdGFjay5nZXQob2JqZWN0KTtpZihzdGFja2VkKXJldHVybiBzdGFja2VkPT1vdGhlcjtiaXRtYXNrfD1DT01QQVJFX1VOT1JERVJFRF9GTEFHO3N0YWNrLnNldChvYmplY3Qsb3RoZXIpO3ZhciByZXN1bHQ9ZXF1YWxBcnJheXMoY29udmVydChvYmplY3QpLGNvbnZlcnQob3RoZXIpLGJpdG1hc2ssY3VzdG9taXplcixlcXVhbEZ1bmMsc3RhY2spO3N0YWNrWyJkZWxldGUiXShvYmplY3QpO3JldHVybiByZXN1bHQ7Y2FzZSBzeW1ib2xUYWc6aWYoc3ltYm9sVmFsdWVPZilyZXR1cm4gc3ltYm9sVmFsdWVPZi5jYWxsKG9iamVjdCk9PXN5bWJvbFZhbHVlT2YuY2FsbChvdGhlcil9cmV0dXJuIGZhbHNlfWZ1bmN0aW9uIGVxdWFsT2JqZWN0cyhvYmplY3Qsb3RoZXIsYml0bWFzayxjdXN0b21pemVyLGVxdWFsRnVuYyxzdGFjayl7dmFyIGlzUGFydGlhbD0KYml0bWFzayZDT01QQVJFX1BBUlRJQUxfRkxBRyxvYmpQcm9wcz1nZXRBbGxLZXlzKG9iamVjdCksb2JqTGVuZ3RoPW9ialByb3BzLmxlbmd0aCxvdGhQcm9wcz1nZXRBbGxLZXlzKG90aGVyKSxvdGhMZW5ndGg9b3RoUHJvcHMubGVuZ3RoO2lmKG9iakxlbmd0aCE9b3RoTGVuZ3RoJiYhaXNQYXJ0aWFsKXJldHVybiBmYWxzZTt2YXIgaW5kZXg9b2JqTGVuZ3RoO3doaWxlKGluZGV4LS0pe3ZhciBrZXk9b2JqUHJvcHNbaW5kZXhdO2lmKCEoaXNQYXJ0aWFsP2tleSBpbiBvdGhlcjpoYXNPd25Qcm9wZXJ0eS5jYWxsKG90aGVyLGtleSkpKXJldHVybiBmYWxzZX12YXIgc3RhY2tlZD1zdGFjay5nZXQob2JqZWN0KTtpZihzdGFja2VkJiZzdGFjay5nZXQob3RoZXIpKXJldHVybiBzdGFja2VkPT1vdGhlcjt2YXIgcmVzdWx0PXRydWU7c3RhY2suc2V0KG9iamVjdCxvdGhlcik7c3RhY2suc2V0KG90aGVyLG9iamVjdCk7dmFyIHNraXBDdG9yPWlzUGFydGlhbDt3aGlsZSgrK2luZGV4PG9iakxlbmd0aCl7a2V5PQpvYmpQcm9wc1tpbmRleF07dmFyIG9ialZhbHVlPW9iamVjdFtrZXldLG90aFZhbHVlPW90aGVyW2tleV07aWYoY3VzdG9taXplcil2YXIgY29tcGFyZWQ9aXNQYXJ0aWFsP2N1c3RvbWl6ZXIob3RoVmFsdWUsb2JqVmFsdWUsa2V5LG90aGVyLG9iamVjdCxzdGFjayk6Y3VzdG9taXplcihvYmpWYWx1ZSxvdGhWYWx1ZSxrZXksb2JqZWN0LG90aGVyLHN0YWNrKTtpZighKGNvbXBhcmVkPT09dW5kZWZpbmVkP29ialZhbHVlPT09b3RoVmFsdWV8fGVxdWFsRnVuYyhvYmpWYWx1ZSxvdGhWYWx1ZSxiaXRtYXNrLGN1c3RvbWl6ZXIsc3RhY2spOmNvbXBhcmVkKSl7cmVzdWx0PWZhbHNlO2JyZWFrfXNraXBDdG9yfHwoc2tpcEN0b3I9a2V5PT0iY29uc3RydWN0b3IiKX1pZihyZXN1bHQmJiFza2lwQ3Rvcil7dmFyIG9iakN0b3I9b2JqZWN0LmNvbnN0cnVjdG9yLG90aEN0b3I9b3RoZXIuY29uc3RydWN0b3I7aWYob2JqQ3RvciE9b3RoQ3RvciYmKCJjb25zdHJ1Y3RvciJpbiBvYmplY3QmJiJjb25zdHJ1Y3RvciJpbgpvdGhlcikmJiEodHlwZW9mIG9iakN0b3I9PSJmdW5jdGlvbiImJm9iakN0b3IgaW5zdGFuY2VvZiBvYmpDdG9yJiZ0eXBlb2Ygb3RoQ3Rvcj09ImZ1bmN0aW9uIiYmb3RoQ3RvciBpbnN0YW5jZW9mIG90aEN0b3IpKXJlc3VsdD1mYWxzZX1zdGFja1siZGVsZXRlIl0ob2JqZWN0KTtzdGFja1siZGVsZXRlIl0ob3RoZXIpO3JldHVybiByZXN1bHR9ZnVuY3Rpb24gZmxhdFJlc3QoZnVuYyl7cmV0dXJuIHNldFRvU3RyaW5nKG92ZXJSZXN0KGZ1bmMsdW5kZWZpbmVkLGZsYXR0ZW4pLGZ1bmMrIiIpfWZ1bmN0aW9uIGdldEFsbEtleXMob2JqZWN0KXtyZXR1cm4gYmFzZUdldEFsbEtleXMob2JqZWN0LGtleXMsZ2V0U3ltYm9scyl9ZnVuY3Rpb24gZ2V0QWxsS2V5c0luKG9iamVjdCl7cmV0dXJuIGJhc2VHZXRBbGxLZXlzKG9iamVjdCxrZXlzSW4sZ2V0U3ltYm9sc0luKX12YXIgZ2V0RGF0YT0hbWV0YU1hcD9ub29wOmZ1bmN0aW9uKGZ1bmMpe3JldHVybiBtZXRhTWFwLmdldChmdW5jKX07CmZ1bmN0aW9uIGdldEZ1bmNOYW1lKGZ1bmMpe3ZhciByZXN1bHQ9ZnVuYy5uYW1lKyIiLGFycmF5PXJlYWxOYW1lc1tyZXN1bHRdLGxlbmd0aD1oYXNPd25Qcm9wZXJ0eS5jYWxsKHJlYWxOYW1lcyxyZXN1bHQpP2FycmF5Lmxlbmd0aDowO3doaWxlKGxlbmd0aC0tKXt2YXIgZGF0YT1hcnJheVtsZW5ndGhdLG90aGVyRnVuYz1kYXRhLmZ1bmM7aWYob3RoZXJGdW5jPT1udWxsfHxvdGhlckZ1bmM9PWZ1bmMpcmV0dXJuIGRhdGEubmFtZX1yZXR1cm4gcmVzdWx0fWZ1bmN0aW9uIGdldEhvbGRlcihmdW5jKXt2YXIgb2JqZWN0PWhhc093blByb3BlcnR5LmNhbGwobG9kYXNoLCJwbGFjZWhvbGRlciIpP2xvZGFzaDpmdW5jO3JldHVybiBvYmplY3QucGxhY2Vob2xkZXJ9ZnVuY3Rpb24gZ2V0SXRlcmF0ZWUoKXt2YXIgcmVzdWx0PWxvZGFzaC5pdGVyYXRlZXx8aXRlcmF0ZWU7cmVzdWx0PXJlc3VsdD09PWl0ZXJhdGVlP2Jhc2VJdGVyYXRlZTpyZXN1bHQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/CnJlc3VsdChhcmd1bWVudHNbMF0sYXJndW1lbnRzWzFdKTpyZXN1bHR9ZnVuY3Rpb24gZ2V0TWFwRGF0YShtYXAsa2V5KXt2YXIgZGF0YT1tYXAuX19kYXRhX187cmV0dXJuIGlzS2V5YWJsZShrZXkpP2RhdGFbdHlwZW9mIGtleT09InN0cmluZyI/InN0cmluZyI6Imhhc2giXTpkYXRhLm1hcH1mdW5jdGlvbiBnZXRNYXRjaERhdGEob2JqZWN0KXt2YXIgcmVzdWx0PWtleXMob2JqZWN0KSxsZW5ndGg9cmVzdWx0Lmxlbmd0aDt3aGlsZShsZW5ndGgtLSl7dmFyIGtleT1yZXN1bHRbbGVuZ3RoXSx2YWx1ZT1vYmplY3Rba2V5XTtyZXN1bHRbbGVuZ3RoXT1ba2V5LHZhbHVlLGlzU3RyaWN0Q29tcGFyYWJsZSh2YWx1ZSldfXJldHVybiByZXN1bHR9ZnVuY3Rpb24gZ2V0TmF0aXZlKG9iamVjdCxrZXkpe3ZhciB2YWx1ZT1nZXRWYWx1ZShvYmplY3Qsa2V5KTtyZXR1cm4gYmFzZUlzTmF0aXZlKHZhbHVlKT92YWx1ZTp1bmRlZmluZWR9ZnVuY3Rpb24gZ2V0UmF3VGFnKHZhbHVlKXt2YXIgaXNPd249Cmhhc093blByb3BlcnR5LmNhbGwodmFsdWUsc3ltVG9TdHJpbmdUYWcpLHRhZz12YWx1ZVtzeW1Ub1N0cmluZ1RhZ107dHJ5e3ZhbHVlW3N5bVRvU3RyaW5nVGFnXT11bmRlZmluZWQ7dmFyIHVubWFza2VkPXRydWV9Y2F0Y2goZSl7fXZhciByZXN1bHQ9bmF0aXZlT2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSk7aWYodW5tYXNrZWQpaWYoaXNPd24pdmFsdWVbc3ltVG9TdHJpbmdUYWddPXRhZztlbHNlIGRlbGV0ZSB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ107cmV0dXJuIHJlc3VsdH12YXIgZ2V0U3ltYm9scz0hbmF0aXZlR2V0U3ltYm9scz9zdHViQXJyYXk6ZnVuY3Rpb24ob2JqZWN0KXtpZihvYmplY3Q9PW51bGwpcmV0dXJuW107b2JqZWN0PU9iamVjdChvYmplY3QpO3JldHVybiBhcnJheUZpbHRlcihuYXRpdmVHZXRTeW1ib2xzKG9iamVjdCksZnVuY3Rpb24oc3ltYm9sKXtyZXR1cm4gcHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChvYmplY3Qsc3ltYm9sKX0pfTt2YXIgZ2V0U3ltYm9sc0luPQohbmF0aXZlR2V0U3ltYm9scz9zdHViQXJyYXk6ZnVuY3Rpb24ob2JqZWN0KXt2YXIgcmVzdWx0PVtdO3doaWxlKG9iamVjdCl7YXJyYXlQdXNoKHJlc3VsdCxnZXRTeW1ib2xzKG9iamVjdCkpO29iamVjdD1nZXRQcm90b3R5cGUob2JqZWN0KX1yZXR1cm4gcmVzdWx0fTt2YXIgZ2V0VGFnPWJhc2VHZXRUYWc7aWYoRGF0YVZpZXcmJmdldFRhZyhuZXcgRGF0YVZpZXcobmV3IEFycmF5QnVmZmVyKDEpKSkhPWRhdGFWaWV3VGFnfHxNYXAmJmdldFRhZyhuZXcgTWFwKSE9bWFwVGFnfHxQcm9taXNlJiZnZXRUYWcoUHJvbWlzZS5yZXNvbHZlKCkpIT1wcm9taXNlVGFnfHxTZXQmJmdldFRhZyhuZXcgU2V0KSE9c2V0VGFnfHxXZWFrTWFwJiZnZXRUYWcobmV3IFdlYWtNYXApIT13ZWFrTWFwVGFnKWdldFRhZz1mdW5jdGlvbih2YWx1ZSl7dmFyIHJlc3VsdD1iYXNlR2V0VGFnKHZhbHVlKSxDdG9yPXJlc3VsdD09b2JqZWN0VGFnP3ZhbHVlLmNvbnN0cnVjdG9yOnVuZGVmaW5lZCxjdG9yU3RyaW5nPQpDdG9yP3RvU291cmNlKEN0b3IpOiIiO2lmKGN0b3JTdHJpbmcpc3dpdGNoKGN0b3JTdHJpbmcpe2Nhc2UgZGF0YVZpZXdDdG9yU3RyaW5nOnJldHVybiBkYXRhVmlld1RhZztjYXNlIG1hcEN0b3JTdHJpbmc6cmV0dXJuIG1hcFRhZztjYXNlIHByb21pc2VDdG9yU3RyaW5nOnJldHVybiBwcm9taXNlVGFnO2Nhc2Ugc2V0Q3RvclN0cmluZzpyZXR1cm4gc2V0VGFnO2Nhc2Ugd2Vha01hcEN0b3JTdHJpbmc6cmV0dXJuIHdlYWtNYXBUYWd9cmV0dXJuIHJlc3VsdH07ZnVuY3Rpb24gZ2V0VmlldyhzdGFydCxlbmQsdHJhbnNmb3Jtcyl7dmFyIGluZGV4PS0xLGxlbmd0aD10cmFuc2Zvcm1zLmxlbmd0aDt3aGlsZSgrK2luZGV4PGxlbmd0aCl7dmFyIGRhdGE9dHJhbnNmb3Jtc1tpbmRleF0sc2l6ZT1kYXRhLnNpemU7c3dpdGNoKGRhdGEudHlwZSl7Y2FzZSAiZHJvcCI6c3RhcnQrPXNpemU7YnJlYWs7Y2FzZSAiZHJvcFJpZ2h0IjplbmQtPXNpemU7YnJlYWs7Y2FzZSAidGFrZSI6ZW5kPW5hdGl2ZU1pbihlbmQsCnN0YXJ0K3NpemUpO2JyZWFrO2Nhc2UgInRha2VSaWdodCI6c3RhcnQ9bmF0aXZlTWF4KHN0YXJ0LGVuZC1zaXplKTticmVha319cmV0dXJueyJzdGFydCI6c3RhcnQsImVuZCI6ZW5kfX1mdW5jdGlvbiBnZXRXcmFwRGV0YWlscyhzb3VyY2Upe3ZhciBtYXRjaD1zb3VyY2UubWF0Y2gocmVXcmFwRGV0YWlscyk7cmV0dXJuIG1hdGNoP21hdGNoWzFdLnNwbGl0KHJlU3BsaXREZXRhaWxzKTpbXX1mdW5jdGlvbiBoYXNQYXRoKG9iamVjdCxwYXRoLGhhc0Z1bmMpe3BhdGg9Y2FzdFBhdGgocGF0aCxvYmplY3QpO3ZhciBpbmRleD0tMSxsZW5ndGg9cGF0aC5sZW5ndGgscmVzdWx0PWZhbHNlO3doaWxlKCsraW5kZXg8bGVuZ3RoKXt2YXIga2V5PXRvS2V5KHBhdGhbaW5kZXhdKTtpZighKHJlc3VsdD1vYmplY3QhPW51bGwmJmhhc0Z1bmMob2JqZWN0LGtleSkpKWJyZWFrO29iamVjdD1vYmplY3Rba2V5XX1pZihyZXN1bHR8fCsraW5kZXghPWxlbmd0aClyZXR1cm4gcmVzdWx0O2xlbmd0aD0Kb2JqZWN0PT1udWxsPzA6b2JqZWN0Lmxlbmd0aDtyZXR1cm4hIWxlbmd0aCYmaXNMZW5ndGgobGVuZ3RoKSYmaXNJbmRleChrZXksbGVuZ3RoKSYmKGlzQXJyYXkob2JqZWN0KXx8aXNBcmd1bWVudHMob2JqZWN0KSl9ZnVuY3Rpb24gaW5pdENsb25lQXJyYXkoYXJyYXkpe3ZhciBsZW5ndGg9YXJyYXkubGVuZ3RoLHJlc3VsdD1uZXcgYXJyYXkuY29uc3RydWN0b3IobGVuZ3RoKTtpZihsZW5ndGgmJnR5cGVvZiBhcnJheVswXT09InN0cmluZyImJmhhc093blByb3BlcnR5LmNhbGwoYXJyYXksImluZGV4Iikpe3Jlc3VsdC5pbmRleD1hcnJheS5pbmRleDtyZXN1bHQuaW5wdXQ9YXJyYXkuaW5wdXR9cmV0dXJuIHJlc3VsdH1mdW5jdGlvbiBpbml0Q2xvbmVPYmplY3Qob2JqZWN0KXtyZXR1cm4gdHlwZW9mIG9iamVjdC5jb25zdHJ1Y3Rvcj09ImZ1bmN0aW9uIiYmIWlzUHJvdG90eXBlKG9iamVjdCk/YmFzZUNyZWF0ZShnZXRQcm90b3R5cGUob2JqZWN0KSk6e319ZnVuY3Rpb24gaW5pdENsb25lQnlUYWcob2JqZWN0LAp0YWcsaXNEZWVwKXt2YXIgQ3Rvcj1vYmplY3QuY29uc3RydWN0b3I7c3dpdGNoKHRhZyl7Y2FzZSBhcnJheUJ1ZmZlclRhZzpyZXR1cm4gY2xvbmVBcnJheUJ1ZmZlcihvYmplY3QpO2Nhc2UgYm9vbFRhZzpjYXNlIGRhdGVUYWc6cmV0dXJuIG5ldyBDdG9yKCtvYmplY3QpO2Nhc2UgZGF0YVZpZXdUYWc6cmV0dXJuIGNsb25lRGF0YVZpZXcob2JqZWN0LGlzRGVlcCk7Y2FzZSBmbG9hdDMyVGFnOmNhc2UgZmxvYXQ2NFRhZzpjYXNlIGludDhUYWc6Y2FzZSBpbnQxNlRhZzpjYXNlIGludDMyVGFnOmNhc2UgdWludDhUYWc6Y2FzZSB1aW50OENsYW1wZWRUYWc6Y2FzZSB1aW50MTZUYWc6Y2FzZSB1aW50MzJUYWc6cmV0dXJuIGNsb25lVHlwZWRBcnJheShvYmplY3QsaXNEZWVwKTtjYXNlIG1hcFRhZzpyZXR1cm4gbmV3IEN0b3I7Y2FzZSBudW1iZXJUYWc6Y2FzZSBzdHJpbmdUYWc6cmV0dXJuIG5ldyBDdG9yKG9iamVjdCk7Y2FzZSByZWdleHBUYWc6cmV0dXJuIGNsb25lUmVnRXhwKG9iamVjdCk7CmNhc2Ugc2V0VGFnOnJldHVybiBuZXcgQ3RvcjtjYXNlIHN5bWJvbFRhZzpyZXR1cm4gY2xvbmVTeW1ib2wob2JqZWN0KX19ZnVuY3Rpb24gaW5zZXJ0V3JhcERldGFpbHMoc291cmNlLGRldGFpbHMpe3ZhciBsZW5ndGg9ZGV0YWlscy5sZW5ndGg7aWYoIWxlbmd0aClyZXR1cm4gc291cmNlO3ZhciBsYXN0SW5kZXg9bGVuZ3RoLTE7ZGV0YWlsc1tsYXN0SW5kZXhdPShsZW5ndGg+MT8iXHgyNiAiOiIiKStkZXRhaWxzW2xhc3RJbmRleF07ZGV0YWlscz1kZXRhaWxzLmpvaW4obGVuZ3RoPjI/IiwgIjoiICIpO3JldHVybiBzb3VyY2UucmVwbGFjZShyZVdyYXBDb21tZW50LCJ7XG4vKiBbd3JhcHBlZCB3aXRoICIrZGV0YWlscysiXSAqL1xuIil9ZnVuY3Rpb24gaXNGbGF0dGVuYWJsZSh2YWx1ZSl7cmV0dXJuIGlzQXJyYXkodmFsdWUpfHxpc0FyZ3VtZW50cyh2YWx1ZSl8fCEhKHNwcmVhZGFibGVTeW1ib2wmJnZhbHVlJiZ2YWx1ZVtzcHJlYWRhYmxlU3ltYm9sXSl9ZnVuY3Rpb24gaXNJbmRleCh2YWx1ZSwKbGVuZ3RoKXt2YXIgdHlwZT10eXBlb2YgdmFsdWU7bGVuZ3RoPWxlbmd0aD09bnVsbD9NQVhfU0FGRV9JTlRFR0VSOmxlbmd0aDtyZXR1cm4hIWxlbmd0aCYmKHR5cGU9PSJudW1iZXIifHx0eXBlIT0ic3ltYm9sIiYmcmVJc1VpbnQudGVzdCh2YWx1ZSkpJiYodmFsdWU+LTEmJnZhbHVlJTE9PTAmJnZhbHVlPGxlbmd0aCl9ZnVuY3Rpb24gaXNJdGVyYXRlZUNhbGwodmFsdWUsaW5kZXgsb2JqZWN0KXtpZighaXNPYmplY3Qob2JqZWN0KSlyZXR1cm4gZmFsc2U7dmFyIHR5cGU9dHlwZW9mIGluZGV4O2lmKHR5cGU9PSJudW1iZXIiP2lzQXJyYXlMaWtlKG9iamVjdCkmJmlzSW5kZXgoaW5kZXgsb2JqZWN0Lmxlbmd0aCk6dHlwZT09InN0cmluZyImJmluZGV4IGluIG9iamVjdClyZXR1cm4gZXEob2JqZWN0W2luZGV4XSx2YWx1ZSk7cmV0dXJuIGZhbHNlfWZ1bmN0aW9uIGlzS2V5KHZhbHVlLG9iamVjdCl7aWYoaXNBcnJheSh2YWx1ZSkpcmV0dXJuIGZhbHNlO3ZhciB0eXBlPXR5cGVvZiB2YWx1ZTsKaWYodHlwZT09Im51bWJlciJ8fHR5cGU9PSJzeW1ib2wifHx0eXBlPT0iYm9vbGVhbiJ8fHZhbHVlPT1udWxsfHxpc1N5bWJvbCh2YWx1ZSkpcmV0dXJuIHRydWU7cmV0dXJuIHJlSXNQbGFpblByb3AudGVzdCh2YWx1ZSl8fCFyZUlzRGVlcFByb3AudGVzdCh2YWx1ZSl8fG9iamVjdCE9bnVsbCYmdmFsdWUgaW4gT2JqZWN0KG9iamVjdCl9ZnVuY3Rpb24gaXNLZXlhYmxlKHZhbHVlKXt2YXIgdHlwZT10eXBlb2YgdmFsdWU7cmV0dXJuIHR5cGU9PSJzdHJpbmcifHx0eXBlPT0ibnVtYmVyInx8dHlwZT09InN5bWJvbCJ8fHR5cGU9PSJib29sZWFuIj92YWx1ZSE9PSJfX3Byb3RvX18iOnZhbHVlPT09bnVsbH1mdW5jdGlvbiBpc0xhemlhYmxlKGZ1bmMpe3ZhciBmdW5jTmFtZT1nZXRGdW5jTmFtZShmdW5jKSxvdGhlcj1sb2Rhc2hbZnVuY05hbWVdO2lmKHR5cGVvZiBvdGhlciE9ImZ1bmN0aW9uInx8IShmdW5jTmFtZSBpbiBMYXp5V3JhcHBlci5wcm90b3R5cGUpKXJldHVybiBmYWxzZTsKaWYoZnVuYz09PW90aGVyKXJldHVybiB0cnVlO3ZhciBkYXRhPWdldERhdGEob3RoZXIpO3JldHVybiEhZGF0YSYmZnVuYz09PWRhdGFbMF19ZnVuY3Rpb24gaXNNYXNrZWQoZnVuYyl7cmV0dXJuISFtYXNrU3JjS2V5JiZtYXNrU3JjS2V5IGluIGZ1bmN9dmFyIGlzTWFza2FibGU9Y29yZUpzRGF0YT9pc0Z1bmN0aW9uOnN0dWJGYWxzZTtmdW5jdGlvbiBpc1Byb3RvdHlwZSh2YWx1ZSl7dmFyIEN0b3I9dmFsdWUmJnZhbHVlLmNvbnN0cnVjdG9yLHByb3RvPXR5cGVvZiBDdG9yPT0iZnVuY3Rpb24iJiZDdG9yLnByb3RvdHlwZXx8b2JqZWN0UHJvdG87cmV0dXJuIHZhbHVlPT09cHJvdG99ZnVuY3Rpb24gaXNTdHJpY3RDb21wYXJhYmxlKHZhbHVlKXtyZXR1cm4gdmFsdWU9PT12YWx1ZSYmIWlzT2JqZWN0KHZhbHVlKX1mdW5jdGlvbiBtYXRjaGVzU3RyaWN0Q29tcGFyYWJsZShrZXksc3JjVmFsdWUpe3JldHVybiBmdW5jdGlvbihvYmplY3Qpe2lmKG9iamVjdD09bnVsbClyZXR1cm4gZmFsc2U7CnJldHVybiBvYmplY3Rba2V5XT09PXNyY1ZhbHVlJiYoc3JjVmFsdWUhPT11bmRlZmluZWR8fGtleSBpbiBPYmplY3Qob2JqZWN0KSl9fWZ1bmN0aW9uIG1lbW9pemVDYXBwZWQoZnVuYyl7dmFyIHJlc3VsdD1tZW1vaXplKGZ1bmMsZnVuY3Rpb24oa2V5KXtpZihjYWNoZS5zaXplPT09TUFYX01FTU9JWkVfU0laRSljYWNoZS5jbGVhcigpO3JldHVybiBrZXl9KTt2YXIgY2FjaGU9cmVzdWx0LmNhY2hlO3JldHVybiByZXN1bHR9ZnVuY3Rpb24gbWVyZ2VEYXRhKGRhdGEsc291cmNlKXt2YXIgYml0bWFzaz1kYXRhWzFdLHNyY0JpdG1hc2s9c291cmNlWzFdLG5ld0JpdG1hc2s9Yml0bWFza3xzcmNCaXRtYXNrLGlzQ29tbW9uPW5ld0JpdG1hc2s8KFdSQVBfQklORF9GTEFHfFdSQVBfQklORF9LRVlfRkxBR3xXUkFQX0FSWV9GTEFHKTt2YXIgaXNDb21ibz1zcmNCaXRtYXNrPT1XUkFQX0FSWV9GTEFHJiZiaXRtYXNrPT1XUkFQX0NVUlJZX0ZMQUd8fHNyY0JpdG1hc2s9PVdSQVBfQVJZX0ZMQUcmJgpiaXRtYXNrPT1XUkFQX1JFQVJHX0ZMQUcmJmRhdGFbN10ubGVuZ3RoPD1zb3VyY2VbOF18fHNyY0JpdG1hc2s9PShXUkFQX0FSWV9GTEFHfFdSQVBfUkVBUkdfRkxBRykmJnNvdXJjZVs3XS5sZW5ndGg8PXNvdXJjZVs4XSYmYml0bWFzaz09V1JBUF9DVVJSWV9GTEFHO2lmKCEoaXNDb21tb258fGlzQ29tYm8pKXJldHVybiBkYXRhO2lmKHNyY0JpdG1hc2smV1JBUF9CSU5EX0ZMQUcpe2RhdGFbMl09c291cmNlWzJdO25ld0JpdG1hc2t8PWJpdG1hc2smV1JBUF9CSU5EX0ZMQUc/MDpXUkFQX0NVUlJZX0JPVU5EX0ZMQUd9dmFyIHZhbHVlPXNvdXJjZVszXTtpZih2YWx1ZSl7dmFyIHBhcnRpYWxzPWRhdGFbM107ZGF0YVszXT1wYXJ0aWFscz9jb21wb3NlQXJncyhwYXJ0aWFscyx2YWx1ZSxzb3VyY2VbNF0pOnZhbHVlO2RhdGFbNF09cGFydGlhbHM/cmVwbGFjZUhvbGRlcnMoZGF0YVszXSxQTEFDRUhPTERFUik6c291cmNlWzRdfXZhbHVlPXNvdXJjZVs1XTtpZih2YWx1ZSl7cGFydGlhbHM9CmRhdGFbNV07ZGF0YVs1XT1wYXJ0aWFscz9jb21wb3NlQXJnc1JpZ2h0KHBhcnRpYWxzLHZhbHVlLHNvdXJjZVs2XSk6dmFsdWU7ZGF0YVs2XT1wYXJ0aWFscz9yZXBsYWNlSG9sZGVycyhkYXRhWzVdLFBMQUNFSE9MREVSKTpzb3VyY2VbNl19dmFsdWU9c291cmNlWzddO2lmKHZhbHVlKWRhdGFbN109dmFsdWU7aWYoc3JjQml0bWFzayZXUkFQX0FSWV9GTEFHKWRhdGFbOF09ZGF0YVs4XT09bnVsbD9zb3VyY2VbOF06bmF0aXZlTWluKGRhdGFbOF0sc291cmNlWzhdKTtpZihkYXRhWzldPT1udWxsKWRhdGFbOV09c291cmNlWzldO2RhdGFbMF09c291cmNlWzBdO2RhdGFbMV09bmV3Qml0bWFzaztyZXR1cm4gZGF0YX1mdW5jdGlvbiBuYXRpdmVLZXlzSW4ob2JqZWN0KXt2YXIgcmVzdWx0PVtdO2lmKG9iamVjdCE9bnVsbClmb3IodmFyIGtleSBpbiBPYmplY3Qob2JqZWN0KSlyZXN1bHQucHVzaChrZXkpO3JldHVybiByZXN1bHR9ZnVuY3Rpb24gb2JqZWN0VG9TdHJpbmcodmFsdWUpe3JldHVybiBuYXRpdmVPYmplY3RUb1N0cmluZy5jYWxsKHZhbHVlKX0KZnVuY3Rpb24gb3ZlclJlc3QoZnVuYyxzdGFydCx0cmFuc2Zvcm0pe3N0YXJ0PW5hdGl2ZU1heChzdGFydD09PXVuZGVmaW5lZD9mdW5jLmxlbmd0aC0xOnN0YXJ0LDApO3JldHVybiBmdW5jdGlvbigpe3ZhciBhcmdzPWFyZ3VtZW50cyxpbmRleD0tMSxsZW5ndGg9bmF0aXZlTWF4KGFyZ3MubGVuZ3RoLXN0YXJ0LDApLGFycmF5PUFycmF5KGxlbmd0aCk7d2hpbGUoKytpbmRleDxsZW5ndGgpYXJyYXlbaW5kZXhdPWFyZ3Nbc3RhcnQraW5kZXhdO2luZGV4PS0xO3ZhciBvdGhlckFyZ3M9QXJyYXkoc3RhcnQrMSk7d2hpbGUoKytpbmRleDxzdGFydClvdGhlckFyZ3NbaW5kZXhdPWFyZ3NbaW5kZXhdO290aGVyQXJnc1tzdGFydF09dHJhbnNmb3JtKGFycmF5KTtyZXR1cm4gYXBwbHkoZnVuYyx0aGlzLG90aGVyQXJncyl9fWZ1bmN0aW9uIHBhcmVudChvYmplY3QscGF0aCl7cmV0dXJuIHBhdGgubGVuZ3RoPDI/b2JqZWN0OmJhc2VHZXQob2JqZWN0LGJhc2VTbGljZShwYXRoLDAsLTEpKX0KZnVuY3Rpb24gcmVvcmRlcihhcnJheSxpbmRleGVzKXt2YXIgYXJyTGVuZ3RoPWFycmF5Lmxlbmd0aCxsZW5ndGg9bmF0aXZlTWluKGluZGV4ZXMubGVuZ3RoLGFyckxlbmd0aCksb2xkQXJyYXk9Y29weUFycmF5KGFycmF5KTt3aGlsZShsZW5ndGgtLSl7dmFyIGluZGV4PWluZGV4ZXNbbGVuZ3RoXTthcnJheVtsZW5ndGhdPWlzSW5kZXgoaW5kZXgsYXJyTGVuZ3RoKT9vbGRBcnJheVtpbmRleF06dW5kZWZpbmVkfXJldHVybiBhcnJheX12YXIgc2V0RGF0YT1zaG9ydE91dChiYXNlU2V0RGF0YSk7dmFyIHNldFRpbWVvdXQ9Y3R4U2V0VGltZW91dHx8ZnVuY3Rpb24oZnVuYyx3YWl0KXtyZXR1cm4gcm9vdC5zZXRUaW1lb3V0KGZ1bmMsd2FpdCl9O3ZhciBzZXRUb1N0cmluZz1zaG9ydE91dChiYXNlU2V0VG9TdHJpbmcpO2Z1bmN0aW9uIHNldFdyYXBUb1N0cmluZyh3cmFwcGVyLHJlZmVyZW5jZSxiaXRtYXNrKXt2YXIgc291cmNlPXJlZmVyZW5jZSsiIjtyZXR1cm4gc2V0VG9TdHJpbmcod3JhcHBlciwKaW5zZXJ0V3JhcERldGFpbHMoc291cmNlLHVwZGF0ZVdyYXBEZXRhaWxzKGdldFdyYXBEZXRhaWxzKHNvdXJjZSksYml0bWFzaykpKX1mdW5jdGlvbiBzaG9ydE91dChmdW5jKXt2YXIgY291bnQ9MCxsYXN0Q2FsbGVkPTA7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHN0YW1wPW5hdGl2ZU5vdygpLHJlbWFpbmluZz1IT1RfU1BBTi0oc3RhbXAtbGFzdENhbGxlZCk7bGFzdENhbGxlZD1zdGFtcDtpZihyZW1haW5pbmc+MCl7aWYoKytjb3VudD49SE9UX0NPVU5UKXJldHVybiBhcmd1bWVudHNbMF19ZWxzZSBjb3VudD0wO3JldHVybiBmdW5jLmFwcGx5KHVuZGVmaW5lZCxhcmd1bWVudHMpfX1mdW5jdGlvbiBzaHVmZmxlU2VsZihhcnJheSxzaXplKXt2YXIgaW5kZXg9LTEsbGVuZ3RoPWFycmF5Lmxlbmd0aCxsYXN0SW5kZXg9bGVuZ3RoLTE7c2l6ZT1zaXplPT09dW5kZWZpbmVkP2xlbmd0aDpzaXplO3doaWxlKCsraW5kZXg8c2l6ZSl7dmFyIHJhbmQ9YmFzZVJhbmRvbShpbmRleCxsYXN0SW5kZXgpLAp2YWx1ZT1hcnJheVtyYW5kXTthcnJheVtyYW5kXT1hcnJheVtpbmRleF07YXJyYXlbaW5kZXhdPXZhbHVlfWFycmF5Lmxlbmd0aD1zaXplO3JldHVybiBhcnJheX12YXIgc3RyaW5nVG9QYXRoPW1lbW9pemVDYXBwZWQoZnVuY3Rpb24oc3RyaW5nKXt2YXIgcmVzdWx0PVtdO2lmKHN0cmluZy5jaGFyQ29kZUF0KDApPT09NDYpcmVzdWx0LnB1c2goIiIpO3N0cmluZy5yZXBsYWNlKHJlUHJvcE5hbWUsZnVuY3Rpb24obWF0Y2gsbnVtYmVyLHF1b3RlLHN1YlN0cmluZyl7cmVzdWx0LnB1c2gocXVvdGU/c3ViU3RyaW5nLnJlcGxhY2UocmVFc2NhcGVDaGFyLCIkMSIpOm51bWJlcnx8bWF0Y2gpfSk7cmV0dXJuIHJlc3VsdH0pO2Z1bmN0aW9uIHRvS2V5KHZhbHVlKXtpZih0eXBlb2YgdmFsdWU9PSJzdHJpbmcifHxpc1N5bWJvbCh2YWx1ZSkpcmV0dXJuIHZhbHVlO3ZhciByZXN1bHQ9dmFsdWUrIiI7cmV0dXJuIHJlc3VsdD09IjAiJiYxL3ZhbHVlPT0tSU5GSU5JVFk/Ii0wIjpyZXN1bHR9CmZ1bmN0aW9uIHRvU291cmNlKGZ1bmMpe2lmKGZ1bmMhPW51bGwpe3RyeXtyZXR1cm4gZnVuY1RvU3RyaW5nLmNhbGwoZnVuYyl9Y2F0Y2goZSl7fXRyeXtyZXR1cm4gZnVuYysiIn1jYXRjaChlJDApe319cmV0dXJuIiJ9ZnVuY3Rpb24gdXBkYXRlV3JhcERldGFpbHMoZGV0YWlscyxiaXRtYXNrKXthcnJheUVhY2god3JhcEZsYWdzLGZ1bmN0aW9uKHBhaXIpe3ZhciB2YWx1ZT0iXy4iK3BhaXJbMF07aWYoYml0bWFzayZwYWlyWzFdJiYhYXJyYXlJbmNsdWRlcyhkZXRhaWxzLHZhbHVlKSlkZXRhaWxzLnB1c2godmFsdWUpfSk7cmV0dXJuIGRldGFpbHMuc29ydCgpfWZ1bmN0aW9uIHdyYXBwZXJDbG9uZSh3cmFwcGVyKXtpZih3cmFwcGVyIGluc3RhbmNlb2YgTGF6eVdyYXBwZXIpcmV0dXJuIHdyYXBwZXIuY2xvbmUoKTt2YXIgcmVzdWx0PW5ldyBMb2Rhc2hXcmFwcGVyKHdyYXBwZXIuX193cmFwcGVkX18sd3JhcHBlci5fX2NoYWluX18pO3Jlc3VsdC5fX2FjdGlvbnNfXz1jb3B5QXJyYXkod3JhcHBlci5fX2FjdGlvbnNfXyk7CnJlc3VsdC5fX2luZGV4X189d3JhcHBlci5fX2luZGV4X187cmVzdWx0Ll9fdmFsdWVzX189d3JhcHBlci5fX3ZhbHVlc19fO3JldHVybiByZXN1bHR9ZnVuY3Rpb24gY2h1bmsoYXJyYXksc2l6ZSxndWFyZCl7aWYoZ3VhcmQ/aXNJdGVyYXRlZUNhbGwoYXJyYXksc2l6ZSxndWFyZCk6c2l6ZT09PXVuZGVmaW5lZClzaXplPTE7ZWxzZSBzaXplPW5hdGl2ZU1heCh0b0ludGVnZXIoc2l6ZSksMCk7dmFyIGxlbmd0aD1hcnJheT09bnVsbD8wOmFycmF5Lmxlbmd0aDtpZighbGVuZ3RofHxzaXplPDEpcmV0dXJuW107dmFyIGluZGV4PTAscmVzSW5kZXg9MCxyZXN1bHQ9QXJyYXkobmF0aXZlQ2VpbChsZW5ndGgvc2l6ZSkpO3doaWxlKGluZGV4PGxlbmd0aClyZXN1bHRbcmVzSW5kZXgrK109YmFzZVNsaWNlKGFycmF5LGluZGV4LGluZGV4Kz1zaXplKTtyZXR1cm4gcmVzdWx0fWZ1bmN0aW9uIGNvbXBhY3QoYXJyYXkpe3ZhciBpbmRleD0tMSxsZW5ndGg9YXJyYXk9PW51bGw/MDphcnJheS5sZW5ndGgsCnJlc0luZGV4PTAscmVzdWx0PVtdO3doaWxlKCsraW5kZXg8bGVuZ3RoKXt2YXIgdmFsdWU9YXJyYXlbaW5kZXhdO2lmKHZhbHVlKXJlc3VsdFtyZXNJbmRleCsrXT12YWx1ZX1yZXR1cm4gcmVzdWx0fWZ1bmN0aW9uIGNvbmNhdCgpe3ZhciBsZW5ndGg9YXJndW1lbnRzLmxlbmd0aDtpZighbGVuZ3RoKXJldHVybltdO3ZhciBhcmdzPUFycmF5KGxlbmd0aC0xKSxhcnJheT1hcmd1bWVudHNbMF0saW5kZXg9bGVuZ3RoO3doaWxlKGluZGV4LS0pYXJnc1tpbmRleC0xXT1hcmd1bWVudHNbaW5kZXhdO3JldHVybiBhcnJheVB1c2goaXNBcnJheShhcnJheSk/Y29weUFycmF5KGFycmF5KTpbYXJyYXldLGJhc2VGbGF0dGVuKGFyZ3MsMSkpfXZhciBkaWZmZXJlbmNlPWJhc2VSZXN0KGZ1bmN0aW9uKGFycmF5LHZhbHVlcyl7cmV0dXJuIGlzQXJyYXlMaWtlT2JqZWN0KGFycmF5KT9iYXNlRGlmZmVyZW5jZShhcnJheSxiYXNlRmxhdHRlbih2YWx1ZXMsMSxpc0FycmF5TGlrZU9iamVjdCx0cnVlKSk6CltdfSk7dmFyIGRpZmZlcmVuY2VCeT1iYXNlUmVzdChmdW5jdGlvbihhcnJheSx2YWx1ZXMpe3ZhciBpdGVyYXRlZT1sYXN0KHZhbHVlcyk7aWYoaXNBcnJheUxpa2VPYmplY3QoaXRlcmF0ZWUpKWl0ZXJhdGVlPXVuZGVmaW5lZDtyZXR1cm4gaXNBcnJheUxpa2VPYmplY3QoYXJyYXkpP2Jhc2VEaWZmZXJlbmNlKGFycmF5LGJhc2VGbGF0dGVuKHZhbHVlcywxLGlzQXJyYXlMaWtlT2JqZWN0LHRydWUpLGdldEl0ZXJhdGVlKGl0ZXJhdGVlLDIpKTpbXX0pO3ZhciBkaWZmZXJlbmNlV2l0aD1iYXNlUmVzdChmdW5jdGlvbihhcnJheSx2YWx1ZXMpe3ZhciBjb21wYXJhdG9yPWxhc3QodmFsdWVzKTtpZihpc0FycmF5TGlrZU9iamVjdChjb21wYXJhdG9yKSljb21wYXJhdG9yPXVuZGVmaW5lZDtyZXR1cm4gaXNBcnJheUxpa2VPYmplY3QoYXJyYXkpP2Jhc2VEaWZmZXJlbmNlKGFycmF5LGJhc2VGbGF0dGVuKHZhbHVlcywxLGlzQXJyYXlMaWtlT2JqZWN0LHRydWUpLHVuZGVmaW5lZCxjb21wYXJhdG9yKToKW119KTtmdW5jdGlvbiBkcm9wKGFycmF5LG4sZ3VhcmQpe3ZhciBsZW5ndGg9YXJyYXk9PW51bGw/MDphcnJheS5sZW5ndGg7aWYoIWxlbmd0aClyZXR1cm5bXTtuPWd1YXJkfHxuPT09dW5kZWZpbmVkPzE6dG9JbnRlZ2VyKG4pO3JldHVybiBiYXNlU2xpY2UoYXJyYXksbjwwPzA6bixsZW5ndGgpfWZ1bmN0aW9uIGRyb3BSaWdodChhcnJheSxuLGd1YXJkKXt2YXIgbGVuZ3RoPWFycmF5PT1udWxsPzA6YXJyYXkubGVuZ3RoO2lmKCFsZW5ndGgpcmV0dXJuW107bj1ndWFyZHx8bj09PXVuZGVmaW5lZD8xOnRvSW50ZWdlcihuKTtuPWxlbmd0aC1uO3JldHVybiBiYXNlU2xpY2UoYXJyYXksMCxuPDA/MDpuKX1mdW5jdGlvbiBkcm9wUmlnaHRXaGlsZShhcnJheSxwcmVkaWNhdGUpe3JldHVybiBhcnJheSYmYXJyYXkubGVuZ3RoP2Jhc2VXaGlsZShhcnJheSxnZXRJdGVyYXRlZShwcmVkaWNhdGUsMyksdHJ1ZSx0cnVlKTpbXX1mdW5jdGlvbiBkcm9wV2hpbGUoYXJyYXkscHJlZGljYXRlKXtyZXR1cm4gYXJyYXkmJgphcnJheS5sZW5ndGg/YmFzZVdoaWxlKGFycmF5LGdldEl0ZXJhdGVlKHByZWRpY2F0ZSwzKSx0cnVlKTpbXX1mdW5jdGlvbiBmaWxsKGFycmF5LHZhbHVlLHN0YXJ0LGVuZCl7dmFyIGxlbmd0aD1hcnJheT09bnVsbD8wOmFycmF5Lmxlbmd0aDtpZighbGVuZ3RoKXJldHVybltdO2lmKHN0YXJ0JiZ0eXBlb2Ygc3RhcnQhPSJudW1iZXIiJiZpc0l0ZXJhdGVlQ2FsbChhcnJheSx2YWx1ZSxzdGFydCkpe3N0YXJ0PTA7ZW5kPWxlbmd0aH1yZXR1cm4gYmFzZUZpbGwoYXJyYXksdmFsdWUsc3RhcnQsZW5kKX1mdW5jdGlvbiBmaW5kSW5kZXgoYXJyYXkscHJlZGljYXRlLGZyb21JbmRleCl7dmFyIGxlbmd0aD1hcnJheT09bnVsbD8wOmFycmF5Lmxlbmd0aDtpZighbGVuZ3RoKXJldHVybi0xO3ZhciBpbmRleD1mcm9tSW5kZXg9PW51bGw/MDp0b0ludGVnZXIoZnJvbUluZGV4KTtpZihpbmRleDwwKWluZGV4PW5hdGl2ZU1heChsZW5ndGgraW5kZXgsMCk7cmV0dXJuIGJhc2VGaW5kSW5kZXgoYXJyYXksCmdldEl0ZXJhdGVlKHByZWRpY2F0ZSwzKSxpbmRleCl9ZnVuY3Rpb24gZmluZExhc3RJbmRleChhcnJheSxwcmVkaWNhdGUsZnJvbUluZGV4KXt2YXIgbGVuZ3RoPWFycmF5PT1udWxsPzA6YXJyYXkubGVuZ3RoO2lmKCFsZW5ndGgpcmV0dXJuLTE7dmFyIGluZGV4PWxlbmd0aC0xO2lmKGZyb21JbmRleCE9PXVuZGVmaW5lZCl7aW5kZXg9dG9JbnRlZ2VyKGZyb21JbmRleCk7aW5kZXg9ZnJvbUluZGV4PDA/bmF0aXZlTWF4KGxlbmd0aCtpbmRleCwwKTpuYXRpdmVNaW4oaW5kZXgsbGVuZ3RoLTEpfXJldHVybiBiYXNlRmluZEluZGV4KGFycmF5LGdldEl0ZXJhdGVlKHByZWRpY2F0ZSwzKSxpbmRleCx0cnVlKX1mdW5jdGlvbiBmbGF0dGVuKGFycmF5KXt2YXIgbGVuZ3RoPWFycmF5PT1udWxsPzA6YXJyYXkubGVuZ3RoO3JldHVybiBsZW5ndGg/YmFzZUZsYXR0ZW4oYXJyYXksMSk6W119ZnVuY3Rpb24gZmxhdHRlbkRlZXAoYXJyYXkpe3ZhciBsZW5ndGg9YXJyYXk9PW51bGw/MDphcnJheS5sZW5ndGg7CnJldHVybiBsZW5ndGg/YmFzZUZsYXR0ZW4oYXJyYXksSU5GSU5JVFkpOltdfWZ1bmN0aW9uIGZsYXR0ZW5EZXB0aChhcnJheSxkZXB0aCl7dmFyIGxlbmd0aD1hcnJheT09bnVsbD8wOmFycmF5Lmxlbmd0aDtpZighbGVuZ3RoKXJldHVybltdO2RlcHRoPWRlcHRoPT09dW5kZWZpbmVkPzE6dG9JbnRlZ2VyKGRlcHRoKTtyZXR1cm4gYmFzZUZsYXR0ZW4oYXJyYXksZGVwdGgpfWZ1bmN0aW9uIGZyb21QYWlycyhwYWlycyl7dmFyIGluZGV4PS0xLGxlbmd0aD1wYWlycz09bnVsbD8wOnBhaXJzLmxlbmd0aCxyZXN1bHQ9e307d2hpbGUoKytpbmRleDxsZW5ndGgpe3ZhciBwYWlyPXBhaXJzW2luZGV4XTtyZXN1bHRbcGFpclswXV09cGFpclsxXX1yZXR1cm4gcmVzdWx0fWZ1bmN0aW9uIGhlYWQoYXJyYXkpe3JldHVybiBhcnJheSYmYXJyYXkubGVuZ3RoP2FycmF5WzBdOnVuZGVmaW5lZH1mdW5jdGlvbiBpbmRleE9mKGFycmF5LHZhbHVlLGZyb21JbmRleCl7dmFyIGxlbmd0aD1hcnJheT09Cm51bGw/MDphcnJheS5sZW5ndGg7aWYoIWxlbmd0aClyZXR1cm4tMTt2YXIgaW5kZXg9ZnJvbUluZGV4PT1udWxsPzA6dG9JbnRlZ2VyKGZyb21JbmRleCk7aWYoaW5kZXg8MClpbmRleD1uYXRpdmVNYXgobGVuZ3RoK2luZGV4LDApO3JldHVybiBiYXNlSW5kZXhPZihhcnJheSx2YWx1ZSxpbmRleCl9ZnVuY3Rpb24gaW5pdGlhbChhcnJheSl7dmFyIGxlbmd0aD1hcnJheT09bnVsbD8wOmFycmF5Lmxlbmd0aDtyZXR1cm4gbGVuZ3RoP2Jhc2VTbGljZShhcnJheSwwLC0xKTpbXX12YXIgaW50ZXJzZWN0aW9uPWJhc2VSZXN0KGZ1bmN0aW9uKGFycmF5cyl7dmFyIG1hcHBlZD1hcnJheU1hcChhcnJheXMsY2FzdEFycmF5TGlrZU9iamVjdCk7cmV0dXJuIG1hcHBlZC5sZW5ndGgmJm1hcHBlZFswXT09PWFycmF5c1swXT9iYXNlSW50ZXJzZWN0aW9uKG1hcHBlZCk6W119KTt2YXIgaW50ZXJzZWN0aW9uQnk9YmFzZVJlc3QoZnVuY3Rpb24oYXJyYXlzKXt2YXIgaXRlcmF0ZWU9bGFzdChhcnJheXMpLAptYXBwZWQ9YXJyYXlNYXAoYXJyYXlzLGNhc3RBcnJheUxpa2VPYmplY3QpO2lmKGl0ZXJhdGVlPT09bGFzdChtYXBwZWQpKWl0ZXJhdGVlPXVuZGVmaW5lZDtlbHNlIG1hcHBlZC5wb3AoKTtyZXR1cm4gbWFwcGVkLmxlbmd0aCYmbWFwcGVkWzBdPT09YXJyYXlzWzBdP2Jhc2VJbnRlcnNlY3Rpb24obWFwcGVkLGdldEl0ZXJhdGVlKGl0ZXJhdGVlLDIpKTpbXX0pO3ZhciBpbnRlcnNlY3Rpb25XaXRoPWJhc2VSZXN0KGZ1bmN0aW9uKGFycmF5cyl7dmFyIGNvbXBhcmF0b3I9bGFzdChhcnJheXMpLG1hcHBlZD1hcnJheU1hcChhcnJheXMsY2FzdEFycmF5TGlrZU9iamVjdCk7Y29tcGFyYXRvcj10eXBlb2YgY29tcGFyYXRvcj09ImZ1bmN0aW9uIj9jb21wYXJhdG9yOnVuZGVmaW5lZDtpZihjb21wYXJhdG9yKW1hcHBlZC5wb3AoKTtyZXR1cm4gbWFwcGVkLmxlbmd0aCYmbWFwcGVkWzBdPT09YXJyYXlzWzBdP2Jhc2VJbnRlcnNlY3Rpb24obWFwcGVkLHVuZGVmaW5lZCxjb21wYXJhdG9yKToKW119KTtmdW5jdGlvbiBqb2luKGFycmF5LHNlcGFyYXRvcil7cmV0dXJuIGFycmF5PT1udWxsPyIiOm5hdGl2ZUpvaW4uY2FsbChhcnJheSxzZXBhcmF0b3IpfWZ1bmN0aW9uIGxhc3QoYXJyYXkpe3ZhciBsZW5ndGg9YXJyYXk9PW51bGw/MDphcnJheS5sZW5ndGg7cmV0dXJuIGxlbmd0aD9hcnJheVtsZW5ndGgtMV06dW5kZWZpbmVkfWZ1bmN0aW9uIGxhc3RJbmRleE9mKGFycmF5LHZhbHVlLGZyb21JbmRleCl7dmFyIGxlbmd0aD1hcnJheT09bnVsbD8wOmFycmF5Lmxlbmd0aDtpZighbGVuZ3RoKXJldHVybi0xO3ZhciBpbmRleD1sZW5ndGg7aWYoZnJvbUluZGV4IT09dW5kZWZpbmVkKXtpbmRleD10b0ludGVnZXIoZnJvbUluZGV4KTtpbmRleD1pbmRleDwwP25hdGl2ZU1heChsZW5ndGgraW5kZXgsMCk6bmF0aXZlTWluKGluZGV4LGxlbmd0aC0xKX1yZXR1cm4gdmFsdWU9PT12YWx1ZT9zdHJpY3RMYXN0SW5kZXhPZihhcnJheSx2YWx1ZSxpbmRleCk6YmFzZUZpbmRJbmRleChhcnJheSwKYmFzZUlzTmFOLGluZGV4LHRydWUpfWZ1bmN0aW9uIG50aChhcnJheSxuKXtyZXR1cm4gYXJyYXkmJmFycmF5Lmxlbmd0aD9iYXNlTnRoKGFycmF5LHRvSW50ZWdlcihuKSk6dW5kZWZpbmVkfXZhciBwdWxsPWJhc2VSZXN0KHB1bGxBbGwpO2Z1bmN0aW9uIHB1bGxBbGwoYXJyYXksdmFsdWVzKXtyZXR1cm4gYXJyYXkmJmFycmF5Lmxlbmd0aCYmdmFsdWVzJiZ2YWx1ZXMubGVuZ3RoP2Jhc2VQdWxsQWxsKGFycmF5LHZhbHVlcyk6YXJyYXl9ZnVuY3Rpb24gcHVsbEFsbEJ5KGFycmF5LHZhbHVlcyxpdGVyYXRlZSl7cmV0dXJuIGFycmF5JiZhcnJheS5sZW5ndGgmJnZhbHVlcyYmdmFsdWVzLmxlbmd0aD9iYXNlUHVsbEFsbChhcnJheSx2YWx1ZXMsZ2V0SXRlcmF0ZWUoaXRlcmF0ZWUsMikpOmFycmF5fWZ1bmN0aW9uIHB1bGxBbGxXaXRoKGFycmF5LHZhbHVlcyxjb21wYXJhdG9yKXtyZXR1cm4gYXJyYXkmJmFycmF5Lmxlbmd0aCYmdmFsdWVzJiZ2YWx1ZXMubGVuZ3RoP2Jhc2VQdWxsQWxsKGFycmF5LAp2YWx1ZXMsdW5kZWZpbmVkLGNvbXBhcmF0b3IpOmFycmF5fXZhciBwdWxsQXQ9ZmxhdFJlc3QoZnVuY3Rpb24oYXJyYXksaW5kZXhlcyl7dmFyIGxlbmd0aD1hcnJheT09bnVsbD8wOmFycmF5Lmxlbmd0aCxyZXN1bHQ9YmFzZUF0KGFycmF5LGluZGV4ZXMpO2Jhc2VQdWxsQXQoYXJyYXksYXJyYXlNYXAoaW5kZXhlcyxmdW5jdGlvbihpbmRleCl7cmV0dXJuIGlzSW5kZXgoaW5kZXgsbGVuZ3RoKT8raW5kZXg6aW5kZXh9KS5zb3J0KGNvbXBhcmVBc2NlbmRpbmcpKTtyZXR1cm4gcmVzdWx0fSk7ZnVuY3Rpb24gcmVtb3ZlKGFycmF5LHByZWRpY2F0ZSl7dmFyIHJlc3VsdD1bXTtpZighKGFycmF5JiZhcnJheS5sZW5ndGgpKXJldHVybiByZXN1bHQ7dmFyIGluZGV4PS0xLGluZGV4ZXM9W10sbGVuZ3RoPWFycmF5Lmxlbmd0aDtwcmVkaWNhdGU9Z2V0SXRlcmF0ZWUocHJlZGljYXRlLDMpO3doaWxlKCsraW5kZXg8bGVuZ3RoKXt2YXIgdmFsdWU9YXJyYXlbaW5kZXhdO2lmKHByZWRpY2F0ZSh2YWx1ZSwKaW5kZXgsYXJyYXkpKXtyZXN1bHQucHVzaCh2YWx1ZSk7aW5kZXhlcy5wdXNoKGluZGV4KX19YmFzZVB1bGxBdChhcnJheSxpbmRleGVzKTtyZXR1cm4gcmVzdWx0fWZ1bmN0aW9uIHJldmVyc2UoYXJyYXkpe3JldHVybiBhcnJheT09bnVsbD9hcnJheTpuYXRpdmVSZXZlcnNlLmNhbGwoYXJyYXkpfWZ1bmN0aW9uIHNsaWNlKGFycmF5LHN0YXJ0LGVuZCl7dmFyIGxlbmd0aD1hcnJheT09bnVsbD8wOmFycmF5Lmxlbmd0aDtpZighbGVuZ3RoKXJldHVybltdO2lmKGVuZCYmdHlwZW9mIGVuZCE9Im51bWJlciImJmlzSXRlcmF0ZWVDYWxsKGFycmF5LHN0YXJ0LGVuZCkpe3N0YXJ0PTA7ZW5kPWxlbmd0aH1lbHNle3N0YXJ0PXN0YXJ0PT1udWxsPzA6dG9JbnRlZ2VyKHN0YXJ0KTtlbmQ9ZW5kPT09dW5kZWZpbmVkP2xlbmd0aDp0b0ludGVnZXIoZW5kKX1yZXR1cm4gYmFzZVNsaWNlKGFycmF5LHN0YXJ0LGVuZCl9ZnVuY3Rpb24gc29ydGVkSW5kZXgoYXJyYXksdmFsdWUpe3JldHVybiBiYXNlU29ydGVkSW5kZXgoYXJyYXksCnZhbHVlKX1mdW5jdGlvbiBzb3J0ZWRJbmRleEJ5KGFycmF5LHZhbHVlLGl0ZXJhdGVlKXtyZXR1cm4gYmFzZVNvcnRlZEluZGV4QnkoYXJyYXksdmFsdWUsZ2V0SXRlcmF0ZWUoaXRlcmF0ZWUsMikpfWZ1bmN0aW9uIHNvcnRlZEluZGV4T2YoYXJyYXksdmFsdWUpe3ZhciBsZW5ndGg9YXJyYXk9PW51bGw/MDphcnJheS5sZW5ndGg7aWYobGVuZ3RoKXt2YXIgaW5kZXg9YmFzZVNvcnRlZEluZGV4KGFycmF5LHZhbHVlKTtpZihpbmRleDxsZW5ndGgmJmVxKGFycmF5W2luZGV4XSx2YWx1ZSkpcmV0dXJuIGluZGV4fXJldHVybi0xfWZ1bmN0aW9uIHNvcnRlZExhc3RJbmRleChhcnJheSx2YWx1ZSl7cmV0dXJuIGJhc2VTb3J0ZWRJbmRleChhcnJheSx2YWx1ZSx0cnVlKX1mdW5jdGlvbiBzb3J0ZWRMYXN0SW5kZXhCeShhcnJheSx2YWx1ZSxpdGVyYXRlZSl7cmV0dXJuIGJhc2VTb3J0ZWRJbmRleEJ5KGFycmF5LHZhbHVlLGdldEl0ZXJhdGVlKGl0ZXJhdGVlLDIpLHRydWUpfWZ1bmN0aW9uIHNvcnRlZExhc3RJbmRleE9mKGFycmF5LAp2YWx1ZSl7dmFyIGxlbmd0aD1hcnJheT09bnVsbD8wOmFycmF5Lmxlbmd0aDtpZihsZW5ndGgpe3ZhciBpbmRleD1iYXNlU29ydGVkSW5kZXgoYXJyYXksdmFsdWUsdHJ1ZSktMTtpZihlcShhcnJheVtpbmRleF0sdmFsdWUpKXJldHVybiBpbmRleH1yZXR1cm4tMX1mdW5jdGlvbiBzb3J0ZWRVbmlxKGFycmF5KXtyZXR1cm4gYXJyYXkmJmFycmF5Lmxlbmd0aD9iYXNlU29ydGVkVW5pcShhcnJheSk6W119ZnVuY3Rpb24gc29ydGVkVW5pcUJ5KGFycmF5LGl0ZXJhdGVlKXtyZXR1cm4gYXJyYXkmJmFycmF5Lmxlbmd0aD9iYXNlU29ydGVkVW5pcShhcnJheSxnZXRJdGVyYXRlZShpdGVyYXRlZSwyKSk6W119ZnVuY3Rpb24gdGFpbChhcnJheSl7dmFyIGxlbmd0aD1hcnJheT09bnVsbD8wOmFycmF5Lmxlbmd0aDtyZXR1cm4gbGVuZ3RoP2Jhc2VTbGljZShhcnJheSwxLGxlbmd0aCk6W119ZnVuY3Rpb24gdGFrZShhcnJheSxuLGd1YXJkKXtpZighKGFycmF5JiZhcnJheS5sZW5ndGgpKXJldHVybltdOwpuPWd1YXJkfHxuPT09dW5kZWZpbmVkPzE6dG9JbnRlZ2VyKG4pO3JldHVybiBiYXNlU2xpY2UoYXJyYXksMCxuPDA/MDpuKX1mdW5jdGlvbiB0YWtlUmlnaHQoYXJyYXksbixndWFyZCl7dmFyIGxlbmd0aD1hcnJheT09bnVsbD8wOmFycmF5Lmxlbmd0aDtpZighbGVuZ3RoKXJldHVybltdO249Z3VhcmR8fG49PT11bmRlZmluZWQ/MTp0b0ludGVnZXIobik7bj1sZW5ndGgtbjtyZXR1cm4gYmFzZVNsaWNlKGFycmF5LG48MD8wOm4sbGVuZ3RoKX1mdW5jdGlvbiB0YWtlUmlnaHRXaGlsZShhcnJheSxwcmVkaWNhdGUpe3JldHVybiBhcnJheSYmYXJyYXkubGVuZ3RoP2Jhc2VXaGlsZShhcnJheSxnZXRJdGVyYXRlZShwcmVkaWNhdGUsMyksZmFsc2UsdHJ1ZSk6W119ZnVuY3Rpb24gdGFrZVdoaWxlKGFycmF5LHByZWRpY2F0ZSl7cmV0dXJuIGFycmF5JiZhcnJheS5sZW5ndGg/YmFzZVdoaWxlKGFycmF5LGdldEl0ZXJhdGVlKHByZWRpY2F0ZSwzKSk6W119dmFyIHVuaW9uPWJhc2VSZXN0KGZ1bmN0aW9uKGFycmF5cyl7cmV0dXJuIGJhc2VVbmlxKGJhc2VGbGF0dGVuKGFycmF5cywKMSxpc0FycmF5TGlrZU9iamVjdCx0cnVlKSl9KTt2YXIgdW5pb25CeT1iYXNlUmVzdChmdW5jdGlvbihhcnJheXMpe3ZhciBpdGVyYXRlZT1sYXN0KGFycmF5cyk7aWYoaXNBcnJheUxpa2VPYmplY3QoaXRlcmF0ZWUpKWl0ZXJhdGVlPXVuZGVmaW5lZDtyZXR1cm4gYmFzZVVuaXEoYmFzZUZsYXR0ZW4oYXJyYXlzLDEsaXNBcnJheUxpa2VPYmplY3QsdHJ1ZSksZ2V0SXRlcmF0ZWUoaXRlcmF0ZWUsMikpfSk7dmFyIHVuaW9uV2l0aD1iYXNlUmVzdChmdW5jdGlvbihhcnJheXMpe3ZhciBjb21wYXJhdG9yPWxhc3QoYXJyYXlzKTtjb21wYXJhdG9yPXR5cGVvZiBjb21wYXJhdG9yPT0iZnVuY3Rpb24iP2NvbXBhcmF0b3I6dW5kZWZpbmVkO3JldHVybiBiYXNlVW5pcShiYXNlRmxhdHRlbihhcnJheXMsMSxpc0FycmF5TGlrZU9iamVjdCx0cnVlKSx1bmRlZmluZWQsY29tcGFyYXRvcil9KTtmdW5jdGlvbiB1bmlxKGFycmF5KXtyZXR1cm4gYXJyYXkmJmFycmF5Lmxlbmd0aD9iYXNlVW5pcShhcnJheSk6CltdfWZ1bmN0aW9uIHVuaXFCeShhcnJheSxpdGVyYXRlZSl7cmV0dXJuIGFycmF5JiZhcnJheS5sZW5ndGg/YmFzZVVuaXEoYXJyYXksZ2V0SXRlcmF0ZWUoaXRlcmF0ZWUsMikpOltdfWZ1bmN0aW9uIHVuaXFXaXRoKGFycmF5LGNvbXBhcmF0b3Ipe2NvbXBhcmF0b3I9dHlwZW9mIGNvbXBhcmF0b3I9PSJmdW5jdGlvbiI/Y29tcGFyYXRvcjp1bmRlZmluZWQ7cmV0dXJuIGFycmF5JiZhcnJheS5sZW5ndGg/YmFzZVVuaXEoYXJyYXksdW5kZWZpbmVkLGNvbXBhcmF0b3IpOltdfWZ1bmN0aW9uIHVuemlwKGFycmF5KXtpZighKGFycmF5JiZhcnJheS5sZW5ndGgpKXJldHVybltdO3ZhciBsZW5ndGg9MDthcnJheT1hcnJheUZpbHRlcihhcnJheSxmdW5jdGlvbihncm91cCl7aWYoaXNBcnJheUxpa2VPYmplY3QoZ3JvdXApKXtsZW5ndGg9bmF0aXZlTWF4KGdyb3VwLmxlbmd0aCxsZW5ndGgpO3JldHVybiB0cnVlfX0pO3JldHVybiBiYXNlVGltZXMobGVuZ3RoLGZ1bmN0aW9uKGluZGV4KXtyZXR1cm4gYXJyYXlNYXAoYXJyYXksCmJhc2VQcm9wZXJ0eShpbmRleCkpfSl9ZnVuY3Rpb24gdW56aXBXaXRoKGFycmF5LGl0ZXJhdGVlKXtpZighKGFycmF5JiZhcnJheS5sZW5ndGgpKXJldHVybltdO3ZhciByZXN1bHQ9dW56aXAoYXJyYXkpO2lmKGl0ZXJhdGVlPT1udWxsKXJldHVybiByZXN1bHQ7cmV0dXJuIGFycmF5TWFwKHJlc3VsdCxmdW5jdGlvbihncm91cCl7cmV0dXJuIGFwcGx5KGl0ZXJhdGVlLHVuZGVmaW5lZCxncm91cCl9KX12YXIgd2l0aG91dD1iYXNlUmVzdChmdW5jdGlvbihhcnJheSx2YWx1ZXMpe3JldHVybiBpc0FycmF5TGlrZU9iamVjdChhcnJheSk/YmFzZURpZmZlcmVuY2UoYXJyYXksdmFsdWVzKTpbXX0pO3ZhciB4b3I9YmFzZVJlc3QoZnVuY3Rpb24oYXJyYXlzKXtyZXR1cm4gYmFzZVhvcihhcnJheUZpbHRlcihhcnJheXMsaXNBcnJheUxpa2VPYmplY3QpKX0pO3ZhciB4b3JCeT1iYXNlUmVzdChmdW5jdGlvbihhcnJheXMpe3ZhciBpdGVyYXRlZT1sYXN0KGFycmF5cyk7aWYoaXNBcnJheUxpa2VPYmplY3QoaXRlcmF0ZWUpKWl0ZXJhdGVlPQp1bmRlZmluZWQ7cmV0dXJuIGJhc2VYb3IoYXJyYXlGaWx0ZXIoYXJyYXlzLGlzQXJyYXlMaWtlT2JqZWN0KSxnZXRJdGVyYXRlZShpdGVyYXRlZSwyKSl9KTt2YXIgeG9yV2l0aD1iYXNlUmVzdChmdW5jdGlvbihhcnJheXMpe3ZhciBjb21wYXJhdG9yPWxhc3QoYXJyYXlzKTtjb21wYXJhdG9yPXR5cGVvZiBjb21wYXJhdG9yPT0iZnVuY3Rpb24iP2NvbXBhcmF0b3I6dW5kZWZpbmVkO3JldHVybiBiYXNlWG9yKGFycmF5RmlsdGVyKGFycmF5cyxpc0FycmF5TGlrZU9iamVjdCksdW5kZWZpbmVkLGNvbXBhcmF0b3IpfSk7dmFyIHppcD1iYXNlUmVzdCh1bnppcCk7ZnVuY3Rpb24gemlwT2JqZWN0KHByb3BzLHZhbHVlcyl7cmV0dXJuIGJhc2VaaXBPYmplY3QocHJvcHN8fFtdLHZhbHVlc3x8W10sYXNzaWduVmFsdWUpfWZ1bmN0aW9uIHppcE9iamVjdERlZXAocHJvcHMsdmFsdWVzKXtyZXR1cm4gYmFzZVppcE9iamVjdChwcm9wc3x8W10sdmFsdWVzfHxbXSxiYXNlU2V0KX12YXIgemlwV2l0aD0KYmFzZVJlc3QoZnVuY3Rpb24oYXJyYXlzKXt2YXIgbGVuZ3RoPWFycmF5cy5sZW5ndGgsaXRlcmF0ZWU9bGVuZ3RoPjE/YXJyYXlzW2xlbmd0aC0xXTp1bmRlZmluZWQ7aXRlcmF0ZWU9dHlwZW9mIGl0ZXJhdGVlPT0iZnVuY3Rpb24iPyhhcnJheXMucG9wKCksaXRlcmF0ZWUpOnVuZGVmaW5lZDtyZXR1cm4gdW56aXBXaXRoKGFycmF5cyxpdGVyYXRlZSl9KTtmdW5jdGlvbiBjaGFpbih2YWx1ZSl7dmFyIHJlc3VsdD1sb2Rhc2godmFsdWUpO3Jlc3VsdC5fX2NoYWluX189dHJ1ZTtyZXR1cm4gcmVzdWx0fWZ1bmN0aW9uIHRhcCh2YWx1ZSxpbnRlcmNlcHRvcil7aW50ZXJjZXB0b3IodmFsdWUpO3JldHVybiB2YWx1ZX1mdW5jdGlvbiB0aHJ1KHZhbHVlLGludGVyY2VwdG9yKXtyZXR1cm4gaW50ZXJjZXB0b3IodmFsdWUpfXZhciB3cmFwcGVyQXQ9ZmxhdFJlc3QoZnVuY3Rpb24ocGF0aHMpe3ZhciBsZW5ndGg9cGF0aHMubGVuZ3RoLHN0YXJ0PWxlbmd0aD9wYXRoc1swXTowLHZhbHVlPQp0aGlzLl9fd3JhcHBlZF9fLGludGVyY2VwdG9yPWZ1bmN0aW9uKG9iamVjdCl7cmV0dXJuIGJhc2VBdChvYmplY3QscGF0aHMpfTtpZihsZW5ndGg+MXx8dGhpcy5fX2FjdGlvbnNfXy5sZW5ndGh8fCEodmFsdWUgaW5zdGFuY2VvZiBMYXp5V3JhcHBlcil8fCFpc0luZGV4KHN0YXJ0KSlyZXR1cm4gdGhpcy50aHJ1KGludGVyY2VwdG9yKTt2YWx1ZT12YWx1ZS5zbGljZShzdGFydCwrc3RhcnQrKGxlbmd0aD8xOjApKTt2YWx1ZS5fX2FjdGlvbnNfXy5wdXNoKHsiZnVuYyI6dGhydSwiYXJncyI6W2ludGVyY2VwdG9yXSwidGhpc0FyZyI6dW5kZWZpbmVkfSk7cmV0dXJuKG5ldyBMb2Rhc2hXcmFwcGVyKHZhbHVlLHRoaXMuX19jaGFpbl9fKSkudGhydShmdW5jdGlvbihhcnJheSl7aWYobGVuZ3RoJiYhYXJyYXkubGVuZ3RoKWFycmF5LnB1c2godW5kZWZpbmVkKTtyZXR1cm4gYXJyYXl9KX0pO2Z1bmN0aW9uIHdyYXBwZXJDaGFpbigpe3JldHVybiBjaGFpbih0aGlzKX1mdW5jdGlvbiB3cmFwcGVyQ29tbWl0KCl7cmV0dXJuIG5ldyBMb2Rhc2hXcmFwcGVyKHRoaXMudmFsdWUoKSwKdGhpcy5fX2NoYWluX18pfWZ1bmN0aW9uIHdyYXBwZXJOZXh0KCl7aWYodGhpcy5fX3ZhbHVlc19fPT09dW5kZWZpbmVkKXRoaXMuX192YWx1ZXNfXz10b0FycmF5KHRoaXMudmFsdWUoKSk7dmFyIGRvbmU9dGhpcy5fX2luZGV4X18+PXRoaXMuX192YWx1ZXNfXy5sZW5ndGgsdmFsdWU9ZG9uZT91bmRlZmluZWQ6dGhpcy5fX3ZhbHVlc19fW3RoaXMuX19pbmRleF9fKytdO3JldHVybnsiZG9uZSI6ZG9uZSwidmFsdWUiOnZhbHVlfX1mdW5jdGlvbiB3cmFwcGVyVG9JdGVyYXRvcigpe3JldHVybiB0aGlzfWZ1bmN0aW9uIHdyYXBwZXJQbGFudCh2YWx1ZSl7dmFyIHJlc3VsdCxwYXJlbnQ9dGhpczt3aGlsZShwYXJlbnQgaW5zdGFuY2VvZiBiYXNlTG9kYXNoKXt2YXIgY2xvbmU9d3JhcHBlckNsb25lKHBhcmVudCk7Y2xvbmUuX19pbmRleF9fPTA7Y2xvbmUuX192YWx1ZXNfXz11bmRlZmluZWQ7aWYocmVzdWx0KXByZXZpb3VzLl9fd3JhcHBlZF9fPWNsb25lO2Vsc2UgcmVzdWx0PWNsb25lOwp2YXIgcHJldmlvdXM9Y2xvbmU7cGFyZW50PXBhcmVudC5fX3dyYXBwZWRfX31wcmV2aW91cy5fX3dyYXBwZWRfXz12YWx1ZTtyZXR1cm4gcmVzdWx0fWZ1bmN0aW9uIHdyYXBwZXJSZXZlcnNlKCl7dmFyIHZhbHVlPXRoaXMuX193cmFwcGVkX187aWYodmFsdWUgaW5zdGFuY2VvZiBMYXp5V3JhcHBlcil7dmFyIHdyYXBwZWQ9dmFsdWU7aWYodGhpcy5fX2FjdGlvbnNfXy5sZW5ndGgpd3JhcHBlZD1uZXcgTGF6eVdyYXBwZXIodGhpcyk7d3JhcHBlZD13cmFwcGVkLnJldmVyc2UoKTt3cmFwcGVkLl9fYWN0aW9uc19fLnB1c2goeyJmdW5jIjp0aHJ1LCJhcmdzIjpbcmV2ZXJzZV0sInRoaXNBcmciOnVuZGVmaW5lZH0pO3JldHVybiBuZXcgTG9kYXNoV3JhcHBlcih3cmFwcGVkLHRoaXMuX19jaGFpbl9fKX1yZXR1cm4gdGhpcy50aHJ1KHJldmVyc2UpfWZ1bmN0aW9uIHdyYXBwZXJWYWx1ZSgpe3JldHVybiBiYXNlV3JhcHBlclZhbHVlKHRoaXMuX193cmFwcGVkX18sdGhpcy5fX2FjdGlvbnNfXyl9CnZhciBjb3VudEJ5PWNyZWF0ZUFnZ3JlZ2F0b3IoZnVuY3Rpb24ocmVzdWx0LHZhbHVlLGtleSl7aWYoaGFzT3duUHJvcGVydHkuY2FsbChyZXN1bHQsa2V5KSkrK3Jlc3VsdFtrZXldO2Vsc2UgYmFzZUFzc2lnblZhbHVlKHJlc3VsdCxrZXksMSl9KTtmdW5jdGlvbiBldmVyeShjb2xsZWN0aW9uLHByZWRpY2F0ZSxndWFyZCl7dmFyIGZ1bmM9aXNBcnJheShjb2xsZWN0aW9uKT9hcnJheUV2ZXJ5OmJhc2VFdmVyeTtpZihndWFyZCYmaXNJdGVyYXRlZUNhbGwoY29sbGVjdGlvbixwcmVkaWNhdGUsZ3VhcmQpKXByZWRpY2F0ZT11bmRlZmluZWQ7cmV0dXJuIGZ1bmMoY29sbGVjdGlvbixnZXRJdGVyYXRlZShwcmVkaWNhdGUsMykpfWZ1bmN0aW9uIGZpbHRlcihjb2xsZWN0aW9uLHByZWRpY2F0ZSl7dmFyIGZ1bmM9aXNBcnJheShjb2xsZWN0aW9uKT9hcnJheUZpbHRlcjpiYXNlRmlsdGVyO3JldHVybiBmdW5jKGNvbGxlY3Rpb24sZ2V0SXRlcmF0ZWUocHJlZGljYXRlLDMpKX12YXIgZmluZD0KY3JlYXRlRmluZChmaW5kSW5kZXgpO3ZhciBmaW5kTGFzdD1jcmVhdGVGaW5kKGZpbmRMYXN0SW5kZXgpO2Z1bmN0aW9uIGZsYXRNYXAoY29sbGVjdGlvbixpdGVyYXRlZSl7cmV0dXJuIGJhc2VGbGF0dGVuKG1hcChjb2xsZWN0aW9uLGl0ZXJhdGVlKSwxKX1mdW5jdGlvbiBmbGF0TWFwRGVlcChjb2xsZWN0aW9uLGl0ZXJhdGVlKXtyZXR1cm4gYmFzZUZsYXR0ZW4obWFwKGNvbGxlY3Rpb24saXRlcmF0ZWUpLElORklOSVRZKX1mdW5jdGlvbiBmbGF0TWFwRGVwdGgoY29sbGVjdGlvbixpdGVyYXRlZSxkZXB0aCl7ZGVwdGg9ZGVwdGg9PT11bmRlZmluZWQ/MTp0b0ludGVnZXIoZGVwdGgpO3JldHVybiBiYXNlRmxhdHRlbihtYXAoY29sbGVjdGlvbixpdGVyYXRlZSksZGVwdGgpfWZ1bmN0aW9uIGZvckVhY2goY29sbGVjdGlvbixpdGVyYXRlZSl7dmFyIGZ1bmM9aXNBcnJheShjb2xsZWN0aW9uKT9hcnJheUVhY2g6YmFzZUVhY2g7cmV0dXJuIGZ1bmMoY29sbGVjdGlvbixnZXRJdGVyYXRlZShpdGVyYXRlZSwKMykpfWZ1bmN0aW9uIGZvckVhY2hSaWdodChjb2xsZWN0aW9uLGl0ZXJhdGVlKXt2YXIgZnVuYz1pc0FycmF5KGNvbGxlY3Rpb24pP2FycmF5RWFjaFJpZ2h0OmJhc2VFYWNoUmlnaHQ7cmV0dXJuIGZ1bmMoY29sbGVjdGlvbixnZXRJdGVyYXRlZShpdGVyYXRlZSwzKSl9dmFyIGdyb3VwQnk9Y3JlYXRlQWdncmVnYXRvcihmdW5jdGlvbihyZXN1bHQsdmFsdWUsa2V5KXtpZihoYXNPd25Qcm9wZXJ0eS5jYWxsKHJlc3VsdCxrZXkpKXJlc3VsdFtrZXldLnB1c2godmFsdWUpO2Vsc2UgYmFzZUFzc2lnblZhbHVlKHJlc3VsdCxrZXksW3ZhbHVlXSl9KTtmdW5jdGlvbiBpbmNsdWRlcyhjb2xsZWN0aW9uLHZhbHVlLGZyb21JbmRleCxndWFyZCl7Y29sbGVjdGlvbj1pc0FycmF5TGlrZShjb2xsZWN0aW9uKT9jb2xsZWN0aW9uOnZhbHVlcyhjb2xsZWN0aW9uKTtmcm9tSW5kZXg9ZnJvbUluZGV4JiYhZ3VhcmQ/dG9JbnRlZ2VyKGZyb21JbmRleCk6MDt2YXIgbGVuZ3RoPWNvbGxlY3Rpb24ubGVuZ3RoOwppZihmcm9tSW5kZXg8MClmcm9tSW5kZXg9bmF0aXZlTWF4KGxlbmd0aCtmcm9tSW5kZXgsMCk7cmV0dXJuIGlzU3RyaW5nKGNvbGxlY3Rpb24pP2Zyb21JbmRleDw9bGVuZ3RoJiZjb2xsZWN0aW9uLmluZGV4T2YodmFsdWUsZnJvbUluZGV4KT4tMTohIWxlbmd0aCYmYmFzZUluZGV4T2YoY29sbGVjdGlvbix2YWx1ZSxmcm9tSW5kZXgpPi0xfXZhciBpbnZva2VNYXA9YmFzZVJlc3QoZnVuY3Rpb24oY29sbGVjdGlvbixwYXRoLGFyZ3Mpe3ZhciBpbmRleD0tMSxpc0Z1bmM9dHlwZW9mIHBhdGg9PSJmdW5jdGlvbiIscmVzdWx0PWlzQXJyYXlMaWtlKGNvbGxlY3Rpb24pP0FycmF5KGNvbGxlY3Rpb24ubGVuZ3RoKTpbXTtiYXNlRWFjaChjb2xsZWN0aW9uLGZ1bmN0aW9uKHZhbHVlKXtyZXN1bHRbKytpbmRleF09aXNGdW5jP2FwcGx5KHBhdGgsdmFsdWUsYXJncyk6YmFzZUludm9rZSh2YWx1ZSxwYXRoLGFyZ3MpfSk7cmV0dXJuIHJlc3VsdH0pO3ZhciBrZXlCeT1jcmVhdGVBZ2dyZWdhdG9yKGZ1bmN0aW9uKHJlc3VsdCwKdmFsdWUsa2V5KXtiYXNlQXNzaWduVmFsdWUocmVzdWx0LGtleSx2YWx1ZSl9KTtmdW5jdGlvbiBtYXAoY29sbGVjdGlvbixpdGVyYXRlZSl7dmFyIGZ1bmM9aXNBcnJheShjb2xsZWN0aW9uKT9hcnJheU1hcDpiYXNlTWFwO3JldHVybiBmdW5jKGNvbGxlY3Rpb24sZ2V0SXRlcmF0ZWUoaXRlcmF0ZWUsMykpfWZ1bmN0aW9uIG9yZGVyQnkoY29sbGVjdGlvbixpdGVyYXRlZXMsb3JkZXJzLGd1YXJkKXtpZihjb2xsZWN0aW9uPT1udWxsKXJldHVybltdO2lmKCFpc0FycmF5KGl0ZXJhdGVlcykpaXRlcmF0ZWVzPWl0ZXJhdGVlcz09bnVsbD9bXTpbaXRlcmF0ZWVzXTtvcmRlcnM9Z3VhcmQ/dW5kZWZpbmVkOm9yZGVycztpZighaXNBcnJheShvcmRlcnMpKW9yZGVycz1vcmRlcnM9PW51bGw/W106W29yZGVyc107cmV0dXJuIGJhc2VPcmRlckJ5KGNvbGxlY3Rpb24saXRlcmF0ZWVzLG9yZGVycyl9dmFyIHBhcnRpdGlvbj1jcmVhdGVBZ2dyZWdhdG9yKGZ1bmN0aW9uKHJlc3VsdCx2YWx1ZSwKa2V5KXtyZXN1bHRba2V5PzA6MV0ucHVzaCh2YWx1ZSl9LGZ1bmN0aW9uKCl7cmV0dXJuW1tdLFtdXX0pO2Z1bmN0aW9uIHJlZHVjZShjb2xsZWN0aW9uLGl0ZXJhdGVlLGFjY3VtdWxhdG9yKXt2YXIgZnVuYz1pc0FycmF5KGNvbGxlY3Rpb24pP2FycmF5UmVkdWNlOmJhc2VSZWR1Y2UsaW5pdEFjY3VtPWFyZ3VtZW50cy5sZW5ndGg8MztyZXR1cm4gZnVuYyhjb2xsZWN0aW9uLGdldEl0ZXJhdGVlKGl0ZXJhdGVlLDQpLGFjY3VtdWxhdG9yLGluaXRBY2N1bSxiYXNlRWFjaCl9ZnVuY3Rpb24gcmVkdWNlUmlnaHQoY29sbGVjdGlvbixpdGVyYXRlZSxhY2N1bXVsYXRvcil7dmFyIGZ1bmM9aXNBcnJheShjb2xsZWN0aW9uKT9hcnJheVJlZHVjZVJpZ2h0OmJhc2VSZWR1Y2UsaW5pdEFjY3VtPWFyZ3VtZW50cy5sZW5ndGg8MztyZXR1cm4gZnVuYyhjb2xsZWN0aW9uLGdldEl0ZXJhdGVlKGl0ZXJhdGVlLDQpLGFjY3VtdWxhdG9yLGluaXRBY2N1bSxiYXNlRWFjaFJpZ2h0KX1mdW5jdGlvbiByZWplY3QoY29sbGVjdGlvbiwKcHJlZGljYXRlKXt2YXIgZnVuYz1pc0FycmF5KGNvbGxlY3Rpb24pP2FycmF5RmlsdGVyOmJhc2VGaWx0ZXI7cmV0dXJuIGZ1bmMoY29sbGVjdGlvbixuZWdhdGUoZ2V0SXRlcmF0ZWUocHJlZGljYXRlLDMpKSl9ZnVuY3Rpb24gc2FtcGxlKGNvbGxlY3Rpb24pe3ZhciBmdW5jPWlzQXJyYXkoY29sbGVjdGlvbik/YXJyYXlTYW1wbGU6YmFzZVNhbXBsZTtyZXR1cm4gZnVuYyhjb2xsZWN0aW9uKX1mdW5jdGlvbiBzYW1wbGVTaXplKGNvbGxlY3Rpb24sbixndWFyZCl7aWYoZ3VhcmQ/aXNJdGVyYXRlZUNhbGwoY29sbGVjdGlvbixuLGd1YXJkKTpuPT09dW5kZWZpbmVkKW49MTtlbHNlIG49dG9JbnRlZ2VyKG4pO3ZhciBmdW5jPWlzQXJyYXkoY29sbGVjdGlvbik/YXJyYXlTYW1wbGVTaXplOmJhc2VTYW1wbGVTaXplO3JldHVybiBmdW5jKGNvbGxlY3Rpb24sbil9ZnVuY3Rpb24gc2h1ZmZsZShjb2xsZWN0aW9uKXt2YXIgZnVuYz1pc0FycmF5KGNvbGxlY3Rpb24pP2FycmF5U2h1ZmZsZToKYmFzZVNodWZmbGU7cmV0dXJuIGZ1bmMoY29sbGVjdGlvbil9ZnVuY3Rpb24gc2l6ZShjb2xsZWN0aW9uKXtpZihjb2xsZWN0aW9uPT1udWxsKXJldHVybiAwO2lmKGlzQXJyYXlMaWtlKGNvbGxlY3Rpb24pKXJldHVybiBpc1N0cmluZyhjb2xsZWN0aW9uKT9zdHJpbmdTaXplKGNvbGxlY3Rpb24pOmNvbGxlY3Rpb24ubGVuZ3RoO3ZhciB0YWc9Z2V0VGFnKGNvbGxlY3Rpb24pO2lmKHRhZz09bWFwVGFnfHx0YWc9PXNldFRhZylyZXR1cm4gY29sbGVjdGlvbi5zaXplO3JldHVybiBiYXNlS2V5cyhjb2xsZWN0aW9uKS5sZW5ndGh9ZnVuY3Rpb24gc29tZShjb2xsZWN0aW9uLHByZWRpY2F0ZSxndWFyZCl7dmFyIGZ1bmM9aXNBcnJheShjb2xsZWN0aW9uKT9hcnJheVNvbWU6YmFzZVNvbWU7aWYoZ3VhcmQmJmlzSXRlcmF0ZWVDYWxsKGNvbGxlY3Rpb24scHJlZGljYXRlLGd1YXJkKSlwcmVkaWNhdGU9dW5kZWZpbmVkO3JldHVybiBmdW5jKGNvbGxlY3Rpb24sZ2V0SXRlcmF0ZWUocHJlZGljYXRlLAozKSl9dmFyIHNvcnRCeT1iYXNlUmVzdChmdW5jdGlvbihjb2xsZWN0aW9uLGl0ZXJhdGVlcyl7aWYoY29sbGVjdGlvbj09bnVsbClyZXR1cm5bXTt2YXIgbGVuZ3RoPWl0ZXJhdGVlcy5sZW5ndGg7aWYobGVuZ3RoPjEmJmlzSXRlcmF0ZWVDYWxsKGNvbGxlY3Rpb24saXRlcmF0ZWVzWzBdLGl0ZXJhdGVlc1sxXSkpaXRlcmF0ZWVzPVtdO2Vsc2UgaWYobGVuZ3RoPjImJmlzSXRlcmF0ZWVDYWxsKGl0ZXJhdGVlc1swXSxpdGVyYXRlZXNbMV0saXRlcmF0ZWVzWzJdKSlpdGVyYXRlZXM9W2l0ZXJhdGVlc1swXV07cmV0dXJuIGJhc2VPcmRlckJ5KGNvbGxlY3Rpb24sYmFzZUZsYXR0ZW4oaXRlcmF0ZWVzLDEpLFtdKX0pO3ZhciBub3c9Y3R4Tm93fHxmdW5jdGlvbigpe3JldHVybiByb290LkRhdGUubm93KCl9O2Z1bmN0aW9uIGFmdGVyKG4sZnVuYyl7aWYodHlwZW9mIGZ1bmMhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpO249dG9JbnRlZ2VyKG4pOwpyZXR1cm4gZnVuY3Rpb24oKXtpZigtLW48MSlyZXR1cm4gZnVuYy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIGFyeShmdW5jLG4sZ3VhcmQpe249Z3VhcmQ/dW5kZWZpbmVkOm47bj1mdW5jJiZuPT1udWxsP2Z1bmMubGVuZ3RoOm47cmV0dXJuIGNyZWF0ZVdyYXAoZnVuYyxXUkFQX0FSWV9GTEFHLHVuZGVmaW5lZCx1bmRlZmluZWQsdW5kZWZpbmVkLHVuZGVmaW5lZCxuKX1mdW5jdGlvbiBiZWZvcmUobixmdW5jKXt2YXIgcmVzdWx0O2lmKHR5cGVvZiBmdW5jIT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoRlVOQ19FUlJPUl9URVhUKTtuPXRvSW50ZWdlcihuKTtyZXR1cm4gZnVuY3Rpb24oKXtpZigtLW4+MClyZXN1bHQ9ZnVuYy5hcHBseSh0aGlzLGFyZ3VtZW50cyk7aWYobjw9MSlmdW5jPXVuZGVmaW5lZDtyZXR1cm4gcmVzdWx0fX12YXIgYmluZD1iYXNlUmVzdChmdW5jdGlvbihmdW5jLHRoaXNBcmcscGFydGlhbHMpe3ZhciBiaXRtYXNrPVdSQVBfQklORF9GTEFHOwppZihwYXJ0aWFscy5sZW5ndGgpe3ZhciBob2xkZXJzPXJlcGxhY2VIb2xkZXJzKHBhcnRpYWxzLGdldEhvbGRlcihiaW5kKSk7Yml0bWFza3w9V1JBUF9QQVJUSUFMX0ZMQUd9cmV0dXJuIGNyZWF0ZVdyYXAoZnVuYyxiaXRtYXNrLHRoaXNBcmcscGFydGlhbHMsaG9sZGVycyl9KTt2YXIgYmluZEtleT1iYXNlUmVzdChmdW5jdGlvbihvYmplY3Qsa2V5LHBhcnRpYWxzKXt2YXIgYml0bWFzaz1XUkFQX0JJTkRfRkxBR3xXUkFQX0JJTkRfS0VZX0ZMQUc7aWYocGFydGlhbHMubGVuZ3RoKXt2YXIgaG9sZGVycz1yZXBsYWNlSG9sZGVycyhwYXJ0aWFscyxnZXRIb2xkZXIoYmluZEtleSkpO2JpdG1hc2t8PVdSQVBfUEFSVElBTF9GTEFHfXJldHVybiBjcmVhdGVXcmFwKGtleSxiaXRtYXNrLG9iamVjdCxwYXJ0aWFscyxob2xkZXJzKX0pO2Z1bmN0aW9uIGN1cnJ5KGZ1bmMsYXJpdHksZ3VhcmQpe2FyaXR5PWd1YXJkP3VuZGVmaW5lZDphcml0eTt2YXIgcmVzdWx0PWNyZWF0ZVdyYXAoZnVuYywKV1JBUF9DVVJSWV9GTEFHLHVuZGVmaW5lZCx1bmRlZmluZWQsdW5kZWZpbmVkLHVuZGVmaW5lZCx1bmRlZmluZWQsYXJpdHkpO3Jlc3VsdC5wbGFjZWhvbGRlcj1jdXJyeS5wbGFjZWhvbGRlcjtyZXR1cm4gcmVzdWx0fWZ1bmN0aW9uIGN1cnJ5UmlnaHQoZnVuYyxhcml0eSxndWFyZCl7YXJpdHk9Z3VhcmQ/dW5kZWZpbmVkOmFyaXR5O3ZhciByZXN1bHQ9Y3JlYXRlV3JhcChmdW5jLFdSQVBfQ1VSUllfUklHSFRfRkxBRyx1bmRlZmluZWQsdW5kZWZpbmVkLHVuZGVmaW5lZCx1bmRlZmluZWQsdW5kZWZpbmVkLGFyaXR5KTtyZXN1bHQucGxhY2Vob2xkZXI9Y3VycnlSaWdodC5wbGFjZWhvbGRlcjtyZXR1cm4gcmVzdWx0fWZ1bmN0aW9uIGRlYm91bmNlKGZ1bmMsd2FpdCxvcHRpb25zKXt2YXIgbGFzdEFyZ3MsbGFzdFRoaXMsbWF4V2FpdCxyZXN1bHQsdGltZXJJZCxsYXN0Q2FsbFRpbWUsbGFzdEludm9rZVRpbWU9MCxsZWFkaW5nPWZhbHNlLG1heGluZz1mYWxzZSx0cmFpbGluZz10cnVlOwppZih0eXBlb2YgZnVuYyE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKEZVTkNfRVJST1JfVEVYVCk7d2FpdD10b051bWJlcih3YWl0KXx8MDtpZihpc09iamVjdChvcHRpb25zKSl7bGVhZGluZz0hIW9wdGlvbnMubGVhZGluZzttYXhpbmc9Im1heFdhaXQiaW4gb3B0aW9uczttYXhXYWl0PW1heGluZz9uYXRpdmVNYXgodG9OdW1iZXIob3B0aW9ucy5tYXhXYWl0KXx8MCx3YWl0KTptYXhXYWl0O3RyYWlsaW5nPSJ0cmFpbGluZyJpbiBvcHRpb25zPyEhb3B0aW9ucy50cmFpbGluZzp0cmFpbGluZ31mdW5jdGlvbiBpbnZva2VGdW5jKHRpbWUpe3ZhciBhcmdzPWxhc3RBcmdzLHRoaXNBcmc9bGFzdFRoaXM7bGFzdEFyZ3M9bGFzdFRoaXM9dW5kZWZpbmVkO2xhc3RJbnZva2VUaW1lPXRpbWU7cmVzdWx0PWZ1bmMuYXBwbHkodGhpc0FyZyxhcmdzKTtyZXR1cm4gcmVzdWx0fWZ1bmN0aW9uIGxlYWRpbmdFZGdlKHRpbWUpe2xhc3RJbnZva2VUaW1lPXRpbWU7dGltZXJJZD1zZXRUaW1lb3V0KHRpbWVyRXhwaXJlZCwKd2FpdCk7cmV0dXJuIGxlYWRpbmc/aW52b2tlRnVuYyh0aW1lKTpyZXN1bHR9ZnVuY3Rpb24gcmVtYWluaW5nV2FpdCh0aW1lKXt2YXIgdGltZVNpbmNlTGFzdENhbGw9dGltZS1sYXN0Q2FsbFRpbWUsdGltZVNpbmNlTGFzdEludm9rZT10aW1lLWxhc3RJbnZva2VUaW1lLHRpbWVXYWl0aW5nPXdhaXQtdGltZVNpbmNlTGFzdENhbGw7cmV0dXJuIG1heGluZz9uYXRpdmVNaW4odGltZVdhaXRpbmcsbWF4V2FpdC10aW1lU2luY2VMYXN0SW52b2tlKTp0aW1lV2FpdGluZ31mdW5jdGlvbiBzaG91bGRJbnZva2UodGltZSl7dmFyIHRpbWVTaW5jZUxhc3RDYWxsPXRpbWUtbGFzdENhbGxUaW1lLHRpbWVTaW5jZUxhc3RJbnZva2U9dGltZS1sYXN0SW52b2tlVGltZTtyZXR1cm4gbGFzdENhbGxUaW1lPT09dW5kZWZpbmVkfHx0aW1lU2luY2VMYXN0Q2FsbD49d2FpdHx8dGltZVNpbmNlTGFzdENhbGw8MHx8bWF4aW5nJiZ0aW1lU2luY2VMYXN0SW52b2tlPj1tYXhXYWl0fWZ1bmN0aW9uIHRpbWVyRXhwaXJlZCgpe3ZhciB0aW1lPQpub3coKTtpZihzaG91bGRJbnZva2UodGltZSkpcmV0dXJuIHRyYWlsaW5nRWRnZSh0aW1lKTt0aW1lcklkPXNldFRpbWVvdXQodGltZXJFeHBpcmVkLHJlbWFpbmluZ1dhaXQodGltZSkpfWZ1bmN0aW9uIHRyYWlsaW5nRWRnZSh0aW1lKXt0aW1lcklkPXVuZGVmaW5lZDtpZih0cmFpbGluZyYmbGFzdEFyZ3MpcmV0dXJuIGludm9rZUZ1bmModGltZSk7bGFzdEFyZ3M9bGFzdFRoaXM9dW5kZWZpbmVkO3JldHVybiByZXN1bHR9ZnVuY3Rpb24gY2FuY2VsKCl7aWYodGltZXJJZCE9PXVuZGVmaW5lZCljbGVhclRpbWVvdXQodGltZXJJZCk7bGFzdEludm9rZVRpbWU9MDtsYXN0QXJncz1sYXN0Q2FsbFRpbWU9bGFzdFRoaXM9dGltZXJJZD11bmRlZmluZWR9ZnVuY3Rpb24gZmx1c2goKXtyZXR1cm4gdGltZXJJZD09PXVuZGVmaW5lZD9yZXN1bHQ6dHJhaWxpbmdFZGdlKG5vdygpKX1mdW5jdGlvbiBkZWJvdW5jZWQoKXt2YXIgdGltZT1ub3coKSxpc0ludm9raW5nPXNob3VsZEludm9rZSh0aW1lKTsKbGFzdEFyZ3M9YXJndW1lbnRzO2xhc3RUaGlzPXRoaXM7bGFzdENhbGxUaW1lPXRpbWU7aWYoaXNJbnZva2luZyl7aWYodGltZXJJZD09PXVuZGVmaW5lZClyZXR1cm4gbGVhZGluZ0VkZ2UobGFzdENhbGxUaW1lKTtpZihtYXhpbmcpe3RpbWVySWQ9c2V0VGltZW91dCh0aW1lckV4cGlyZWQsd2FpdCk7cmV0dXJuIGludm9rZUZ1bmMobGFzdENhbGxUaW1lKX19aWYodGltZXJJZD09PXVuZGVmaW5lZCl0aW1lcklkPXNldFRpbWVvdXQodGltZXJFeHBpcmVkLHdhaXQpO3JldHVybiByZXN1bHR9ZGVib3VuY2VkLmNhbmNlbD1jYW5jZWw7ZGVib3VuY2VkLmZsdXNoPWZsdXNoO3JldHVybiBkZWJvdW5jZWR9dmFyIGRlZmVyPWJhc2VSZXN0KGZ1bmN0aW9uKGZ1bmMsYXJncyl7cmV0dXJuIGJhc2VEZWxheShmdW5jLDEsYXJncyl9KTt2YXIgZGVsYXk9YmFzZVJlc3QoZnVuY3Rpb24oZnVuYyx3YWl0LGFyZ3Mpe3JldHVybiBiYXNlRGVsYXkoZnVuYyx0b051bWJlcih3YWl0KXx8MCxhcmdzKX0pOwpmdW5jdGlvbiBmbGlwKGZ1bmMpe3JldHVybiBjcmVhdGVXcmFwKGZ1bmMsV1JBUF9GTElQX0ZMQUcpfWZ1bmN0aW9uIG1lbW9pemUoZnVuYyxyZXNvbHZlcil7aWYodHlwZW9mIGZ1bmMhPSJmdW5jdGlvbiJ8fHJlc29sdmVyIT1udWxsJiZ0eXBlb2YgcmVzb2x2ZXIhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpO3ZhciBtZW1vaXplZD1mdW5jdGlvbigpe3ZhciBhcmdzPWFyZ3VtZW50cyxrZXk9cmVzb2x2ZXI/cmVzb2x2ZXIuYXBwbHkodGhpcyxhcmdzKTphcmdzWzBdLGNhY2hlPW1lbW9pemVkLmNhY2hlO2lmKGNhY2hlLmhhcyhrZXkpKXJldHVybiBjYWNoZS5nZXQoa2V5KTt2YXIgcmVzdWx0PWZ1bmMuYXBwbHkodGhpcyxhcmdzKTttZW1vaXplZC5jYWNoZT1jYWNoZS5zZXQoa2V5LHJlc3VsdCl8fGNhY2hlO3JldHVybiByZXN1bHR9O21lbW9pemVkLmNhY2hlPW5ldyAobWVtb2l6ZS5DYWNoZXx8TWFwQ2FjaGUpO3JldHVybiBtZW1vaXplZH0KbWVtb2l6ZS5DYWNoZT1NYXBDYWNoZTtmdW5jdGlvbiBuZWdhdGUocHJlZGljYXRlKXtpZih0eXBlb2YgcHJlZGljYXRlIT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoRlVOQ19FUlJPUl9URVhUKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYXJncz1hcmd1bWVudHM7c3dpdGNoKGFyZ3MubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIXByZWRpY2F0ZS5jYWxsKHRoaXMpO2Nhc2UgMTpyZXR1cm4hcHJlZGljYXRlLmNhbGwodGhpcyxhcmdzWzBdKTtjYXNlIDI6cmV0dXJuIXByZWRpY2F0ZS5jYWxsKHRoaXMsYXJnc1swXSxhcmdzWzFdKTtjYXNlIDM6cmV0dXJuIXByZWRpY2F0ZS5jYWxsKHRoaXMsYXJnc1swXSxhcmdzWzFdLGFyZ3NbMl0pfXJldHVybiFwcmVkaWNhdGUuYXBwbHkodGhpcyxhcmdzKX19ZnVuY3Rpb24gb25jZShmdW5jKXtyZXR1cm4gYmVmb3JlKDIsZnVuYyl9dmFyIG92ZXJBcmdzPWNhc3RSZXN0KGZ1bmN0aW9uKGZ1bmMsdHJhbnNmb3Jtcyl7dHJhbnNmb3Jtcz10cmFuc2Zvcm1zLmxlbmd0aD09CjEmJmlzQXJyYXkodHJhbnNmb3Jtc1swXSk/YXJyYXlNYXAodHJhbnNmb3Jtc1swXSxiYXNlVW5hcnkoZ2V0SXRlcmF0ZWUoKSkpOmFycmF5TWFwKGJhc2VGbGF0dGVuKHRyYW5zZm9ybXMsMSksYmFzZVVuYXJ5KGdldEl0ZXJhdGVlKCkpKTt2YXIgZnVuY3NMZW5ndGg9dHJhbnNmb3Jtcy5sZW5ndGg7cmV0dXJuIGJhc2VSZXN0KGZ1bmN0aW9uKGFyZ3Mpe3ZhciBpbmRleD0tMSxsZW5ndGg9bmF0aXZlTWluKGFyZ3MubGVuZ3RoLGZ1bmNzTGVuZ3RoKTt3aGlsZSgrK2luZGV4PGxlbmd0aClhcmdzW2luZGV4XT10cmFuc2Zvcm1zW2luZGV4XS5jYWxsKHRoaXMsYXJnc1tpbmRleF0pO3JldHVybiBhcHBseShmdW5jLHRoaXMsYXJncyl9KX0pO3ZhciBwYXJ0aWFsPWJhc2VSZXN0KGZ1bmN0aW9uKGZ1bmMscGFydGlhbHMpe3ZhciBob2xkZXJzPXJlcGxhY2VIb2xkZXJzKHBhcnRpYWxzLGdldEhvbGRlcihwYXJ0aWFsKSk7cmV0dXJuIGNyZWF0ZVdyYXAoZnVuYyxXUkFQX1BBUlRJQUxfRkxBRywKdW5kZWZpbmVkLHBhcnRpYWxzLGhvbGRlcnMpfSk7dmFyIHBhcnRpYWxSaWdodD1iYXNlUmVzdChmdW5jdGlvbihmdW5jLHBhcnRpYWxzKXt2YXIgaG9sZGVycz1yZXBsYWNlSG9sZGVycyhwYXJ0aWFscyxnZXRIb2xkZXIocGFydGlhbFJpZ2h0KSk7cmV0dXJuIGNyZWF0ZVdyYXAoZnVuYyxXUkFQX1BBUlRJQUxfUklHSFRfRkxBRyx1bmRlZmluZWQscGFydGlhbHMsaG9sZGVycyl9KTt2YXIgcmVhcmc9ZmxhdFJlc3QoZnVuY3Rpb24oZnVuYyxpbmRleGVzKXtyZXR1cm4gY3JlYXRlV3JhcChmdW5jLFdSQVBfUkVBUkdfRkxBRyx1bmRlZmluZWQsdW5kZWZpbmVkLHVuZGVmaW5lZCxpbmRleGVzKX0pO2Z1bmN0aW9uIHJlc3QoZnVuYyxzdGFydCl7aWYodHlwZW9mIGZ1bmMhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpO3N0YXJ0PXN0YXJ0PT09dW5kZWZpbmVkP3N0YXJ0OnRvSW50ZWdlcihzdGFydCk7cmV0dXJuIGJhc2VSZXN0KGZ1bmMsc3RhcnQpfQpmdW5jdGlvbiBzcHJlYWQoZnVuYyxzdGFydCl7aWYodHlwZW9mIGZ1bmMhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpO3N0YXJ0PXN0YXJ0PT1udWxsPzA6bmF0aXZlTWF4KHRvSW50ZWdlcihzdGFydCksMCk7cmV0dXJuIGJhc2VSZXN0KGZ1bmN0aW9uKGFyZ3Mpe3ZhciBhcnJheT1hcmdzW3N0YXJ0XSxvdGhlckFyZ3M9Y2FzdFNsaWNlKGFyZ3MsMCxzdGFydCk7aWYoYXJyYXkpYXJyYXlQdXNoKG90aGVyQXJncyxhcnJheSk7cmV0dXJuIGFwcGx5KGZ1bmMsdGhpcyxvdGhlckFyZ3MpfSl9ZnVuY3Rpb24gdGhyb3R0bGUoZnVuYyx3YWl0LG9wdGlvbnMpe3ZhciBsZWFkaW5nPXRydWUsdHJhaWxpbmc9dHJ1ZTtpZih0eXBlb2YgZnVuYyE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKEZVTkNfRVJST1JfVEVYVCk7aWYoaXNPYmplY3Qob3B0aW9ucykpe2xlYWRpbmc9ImxlYWRpbmciaW4gb3B0aW9ucz8hIW9wdGlvbnMubGVhZGluZzoKbGVhZGluZzt0cmFpbGluZz0idHJhaWxpbmciaW4gb3B0aW9ucz8hIW9wdGlvbnMudHJhaWxpbmc6dHJhaWxpbmd9cmV0dXJuIGRlYm91bmNlKGZ1bmMsd2FpdCx7ImxlYWRpbmciOmxlYWRpbmcsIm1heFdhaXQiOndhaXQsInRyYWlsaW5nIjp0cmFpbGluZ30pfWZ1bmN0aW9uIHVuYXJ5KGZ1bmMpe3JldHVybiBhcnkoZnVuYywxKX1mdW5jdGlvbiB3cmFwKHZhbHVlLHdyYXBwZXIpe3JldHVybiBwYXJ0aWFsKGNhc3RGdW5jdGlvbih3cmFwcGVyKSx2YWx1ZSl9ZnVuY3Rpb24gY2FzdEFycmF5KCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuW107dmFyIHZhbHVlPWFyZ3VtZW50c1swXTtyZXR1cm4gaXNBcnJheSh2YWx1ZSk/dmFsdWU6W3ZhbHVlXX1mdW5jdGlvbiBjbG9uZSh2YWx1ZSl7cmV0dXJuIGJhc2VDbG9uZSh2YWx1ZSxDTE9ORV9TWU1CT0xTX0ZMQUcpfWZ1bmN0aW9uIGNsb25lV2l0aCh2YWx1ZSxjdXN0b21pemVyKXtjdXN0b21pemVyPXR5cGVvZiBjdXN0b21pemVyPT0KImZ1bmN0aW9uIj9jdXN0b21pemVyOnVuZGVmaW5lZDtyZXR1cm4gYmFzZUNsb25lKHZhbHVlLENMT05FX1NZTUJPTFNfRkxBRyxjdXN0b21pemVyKX1mdW5jdGlvbiBjbG9uZURlZXAodmFsdWUpe3JldHVybiBiYXNlQ2xvbmUodmFsdWUsQ0xPTkVfREVFUF9GTEFHfENMT05FX1NZTUJPTFNfRkxBRyl9ZnVuY3Rpb24gY2xvbmVEZWVwV2l0aCh2YWx1ZSxjdXN0b21pemVyKXtjdXN0b21pemVyPXR5cGVvZiBjdXN0b21pemVyPT0iZnVuY3Rpb24iP2N1c3RvbWl6ZXI6dW5kZWZpbmVkO3JldHVybiBiYXNlQ2xvbmUodmFsdWUsQ0xPTkVfREVFUF9GTEFHfENMT05FX1NZTUJPTFNfRkxBRyxjdXN0b21pemVyKX1mdW5jdGlvbiBjb25mb3Jtc1RvKG9iamVjdCxzb3VyY2Upe3JldHVybiBzb3VyY2U9PW51bGx8fGJhc2VDb25mb3Jtc1RvKG9iamVjdCxzb3VyY2Usa2V5cyhzb3VyY2UpKX1mdW5jdGlvbiBlcSh2YWx1ZSxvdGhlcil7cmV0dXJuIHZhbHVlPT09b3RoZXJ8fHZhbHVlIT09dmFsdWUmJgpvdGhlciE9PW90aGVyfXZhciBndD1jcmVhdGVSZWxhdGlvbmFsT3BlcmF0aW9uKGJhc2VHdCk7dmFyIGd0ZT1jcmVhdGVSZWxhdGlvbmFsT3BlcmF0aW9uKGZ1bmN0aW9uKHZhbHVlLG90aGVyKXtyZXR1cm4gdmFsdWU+PW90aGVyfSk7dmFyIGlzQXJndW1lbnRzPWJhc2VJc0FyZ3VtZW50cyhmdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHN9KCkpP2Jhc2VJc0FyZ3VtZW50czpmdW5jdGlvbih2YWx1ZSl7cmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkmJmhhc093blByb3BlcnR5LmNhbGwodmFsdWUsImNhbGxlZSIpJiYhcHJvcGVydHlJc0VudW1lcmFibGUuY2FsbCh2YWx1ZSwiY2FsbGVlIil9O3ZhciBpc0FycmF5PUFycmF5LmlzQXJyYXk7dmFyIGlzQXJyYXlCdWZmZXI9bm9kZUlzQXJyYXlCdWZmZXI/YmFzZVVuYXJ5KG5vZGVJc0FycmF5QnVmZmVyKTpiYXNlSXNBcnJheUJ1ZmZlcjtmdW5jdGlvbiBpc0FycmF5TGlrZSh2YWx1ZSl7cmV0dXJuIHZhbHVlIT1udWxsJiZpc0xlbmd0aCh2YWx1ZS5sZW5ndGgpJiYKIWlzRnVuY3Rpb24odmFsdWUpfWZ1bmN0aW9uIGlzQXJyYXlMaWtlT2JqZWN0KHZhbHVlKXtyZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSYmaXNBcnJheUxpa2UodmFsdWUpfWZ1bmN0aW9uIGlzQm9vbGVhbih2YWx1ZSl7cmV0dXJuIHZhbHVlPT09dHJ1ZXx8dmFsdWU9PT1mYWxzZXx8aXNPYmplY3RMaWtlKHZhbHVlKSYmYmFzZUdldFRhZyh2YWx1ZSk9PWJvb2xUYWd9dmFyIGlzQnVmZmVyPW5hdGl2ZUlzQnVmZmVyfHxzdHViRmFsc2U7dmFyIGlzRGF0ZT1ub2RlSXNEYXRlP2Jhc2VVbmFyeShub2RlSXNEYXRlKTpiYXNlSXNEYXRlO2Z1bmN0aW9uIGlzRWxlbWVudCh2YWx1ZSl7cmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkmJnZhbHVlLm5vZGVUeXBlPT09MSYmIWlzUGxhaW5PYmplY3QodmFsdWUpfWZ1bmN0aW9uIGlzRW1wdHkodmFsdWUpe2lmKHZhbHVlPT1udWxsKXJldHVybiB0cnVlO2lmKGlzQXJyYXlMaWtlKHZhbHVlKSYmKGlzQXJyYXkodmFsdWUpfHx0eXBlb2YgdmFsdWU9PQoic3RyaW5nInx8dHlwZW9mIHZhbHVlLnNwbGljZT09ImZ1bmN0aW9uInx8aXNCdWZmZXIodmFsdWUpfHxpc1R5cGVkQXJyYXkodmFsdWUpfHxpc0FyZ3VtZW50cyh2YWx1ZSkpKXJldHVybiF2YWx1ZS5sZW5ndGg7dmFyIHRhZz1nZXRUYWcodmFsdWUpO2lmKHRhZz09bWFwVGFnfHx0YWc9PXNldFRhZylyZXR1cm4hdmFsdWUuc2l6ZTtpZihpc1Byb3RvdHlwZSh2YWx1ZSkpcmV0dXJuIWJhc2VLZXlzKHZhbHVlKS5sZW5ndGg7Zm9yKHZhciBrZXkgaW4gdmFsdWUpaWYoaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSxrZXkpKXJldHVybiBmYWxzZTtyZXR1cm4gdHJ1ZX1mdW5jdGlvbiBpc0VxdWFsKHZhbHVlLG90aGVyKXtyZXR1cm4gYmFzZUlzRXF1YWwodmFsdWUsb3RoZXIpfWZ1bmN0aW9uIGlzRXF1YWxXaXRoKHZhbHVlLG90aGVyLGN1c3RvbWl6ZXIpe2N1c3RvbWl6ZXI9dHlwZW9mIGN1c3RvbWl6ZXI9PSJmdW5jdGlvbiI/Y3VzdG9taXplcjp1bmRlZmluZWQ7dmFyIHJlc3VsdD0KY3VzdG9taXplcj9jdXN0b21pemVyKHZhbHVlLG90aGVyKTp1bmRlZmluZWQ7cmV0dXJuIHJlc3VsdD09PXVuZGVmaW5lZD9iYXNlSXNFcXVhbCh2YWx1ZSxvdGhlcix1bmRlZmluZWQsY3VzdG9taXplcik6ISFyZXN1bHR9ZnVuY3Rpb24gaXNFcnJvcih2YWx1ZSl7aWYoIWlzT2JqZWN0TGlrZSh2YWx1ZSkpcmV0dXJuIGZhbHNlO3ZhciB0YWc9YmFzZUdldFRhZyh2YWx1ZSk7cmV0dXJuIHRhZz09ZXJyb3JUYWd8fHRhZz09ZG9tRXhjVGFnfHx0eXBlb2YgdmFsdWUubWVzc2FnZT09InN0cmluZyImJnR5cGVvZiB2YWx1ZS5uYW1lPT0ic3RyaW5nIiYmIWlzUGxhaW5PYmplY3QodmFsdWUpfWZ1bmN0aW9uIGlzRmluaXRlKHZhbHVlKXtyZXR1cm4gdHlwZW9mIHZhbHVlPT0ibnVtYmVyIiYmbmF0aXZlSXNGaW5pdGUodmFsdWUpfWZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsdWUpe2lmKCFpc09iamVjdCh2YWx1ZSkpcmV0dXJuIGZhbHNlO3ZhciB0YWc9YmFzZUdldFRhZyh2YWx1ZSk7cmV0dXJuIHRhZz09CmZ1bmNUYWd8fHRhZz09Z2VuVGFnfHx0YWc9PWFzeW5jVGFnfHx0YWc9PXByb3h5VGFnfWZ1bmN0aW9uIGlzSW50ZWdlcih2YWx1ZSl7cmV0dXJuIHR5cGVvZiB2YWx1ZT09Im51bWJlciImJnZhbHVlPT10b0ludGVnZXIodmFsdWUpfWZ1bmN0aW9uIGlzTGVuZ3RoKHZhbHVlKXtyZXR1cm4gdHlwZW9mIHZhbHVlPT0ibnVtYmVyIiYmdmFsdWU+LTEmJnZhbHVlJTE9PTAmJnZhbHVlPD1NQVhfU0FGRV9JTlRFR0VSfWZ1bmN0aW9uIGlzT2JqZWN0KHZhbHVlKXt2YXIgdHlwZT10eXBlb2YgdmFsdWU7cmV0dXJuIHZhbHVlIT1udWxsJiYodHlwZT09Im9iamVjdCJ8fHR5cGU9PSJmdW5jdGlvbiIpfWZ1bmN0aW9uIGlzT2JqZWN0TGlrZSh2YWx1ZSl7cmV0dXJuIHZhbHVlIT1udWxsJiZ0eXBlb2YgdmFsdWU9PSJvYmplY3QifXZhciBpc01hcD1ub2RlSXNNYXA/YmFzZVVuYXJ5KG5vZGVJc01hcCk6YmFzZUlzTWFwO2Z1bmN0aW9uIGlzTWF0Y2gob2JqZWN0LHNvdXJjZSl7cmV0dXJuIG9iamVjdD09PQpzb3VyY2V8fGJhc2VJc01hdGNoKG9iamVjdCxzb3VyY2UsZ2V0TWF0Y2hEYXRhKHNvdXJjZSkpfWZ1bmN0aW9uIGlzTWF0Y2hXaXRoKG9iamVjdCxzb3VyY2UsY3VzdG9taXplcil7Y3VzdG9taXplcj10eXBlb2YgY3VzdG9taXplcj09ImZ1bmN0aW9uIj9jdXN0b21pemVyOnVuZGVmaW5lZDtyZXR1cm4gYmFzZUlzTWF0Y2gob2JqZWN0LHNvdXJjZSxnZXRNYXRjaERhdGEoc291cmNlKSxjdXN0b21pemVyKX1mdW5jdGlvbiBpc05hTih2YWx1ZSl7cmV0dXJuIGlzTnVtYmVyKHZhbHVlKSYmdmFsdWUhPSt2YWx1ZX1mdW5jdGlvbiBpc05hdGl2ZSh2YWx1ZSl7aWYoaXNNYXNrYWJsZSh2YWx1ZSkpdGhyb3cgbmV3IEVycm9yKENPUkVfRVJST1JfVEVYVCk7cmV0dXJuIGJhc2VJc05hdGl2ZSh2YWx1ZSl9ZnVuY3Rpb24gaXNOdWxsKHZhbHVlKXtyZXR1cm4gdmFsdWU9PT1udWxsfWZ1bmN0aW9uIGlzTmlsKHZhbHVlKXtyZXR1cm4gdmFsdWU9PW51bGx9ZnVuY3Rpb24gaXNOdW1iZXIodmFsdWUpe3JldHVybiB0eXBlb2YgdmFsdWU9PQoibnVtYmVyInx8aXNPYmplY3RMaWtlKHZhbHVlKSYmYmFzZUdldFRhZyh2YWx1ZSk9PW51bWJlclRhZ31mdW5jdGlvbiBpc1BsYWluT2JqZWN0KHZhbHVlKXtpZighaXNPYmplY3RMaWtlKHZhbHVlKXx8YmFzZUdldFRhZyh2YWx1ZSkhPW9iamVjdFRhZylyZXR1cm4gZmFsc2U7dmFyIHByb3RvPWdldFByb3RvdHlwZSh2YWx1ZSk7aWYocHJvdG89PT1udWxsKXJldHVybiB0cnVlO3ZhciBDdG9yPWhhc093blByb3BlcnR5LmNhbGwocHJvdG8sImNvbnN0cnVjdG9yIikmJnByb3RvLmNvbnN0cnVjdG9yO3JldHVybiB0eXBlb2YgQ3Rvcj09ImZ1bmN0aW9uIiYmQ3RvciBpbnN0YW5jZW9mIEN0b3ImJmZ1bmNUb1N0cmluZy5jYWxsKEN0b3IpPT1vYmplY3RDdG9yU3RyaW5nfXZhciBpc1JlZ0V4cD1ub2RlSXNSZWdFeHA/YmFzZVVuYXJ5KG5vZGVJc1JlZ0V4cCk6YmFzZUlzUmVnRXhwO2Z1bmN0aW9uIGlzU2FmZUludGVnZXIodmFsdWUpe3JldHVybiBpc0ludGVnZXIodmFsdWUpJiZ2YWx1ZT49Ci1NQVhfU0FGRV9JTlRFR0VSJiZ2YWx1ZTw9TUFYX1NBRkVfSU5URUdFUn12YXIgaXNTZXQ9bm9kZUlzU2V0P2Jhc2VVbmFyeShub2RlSXNTZXQpOmJhc2VJc1NldDtmdW5jdGlvbiBpc1N0cmluZyh2YWx1ZSl7cmV0dXJuIHR5cGVvZiB2YWx1ZT09InN0cmluZyJ8fCFpc0FycmF5KHZhbHVlKSYmaXNPYmplY3RMaWtlKHZhbHVlKSYmYmFzZUdldFRhZyh2YWx1ZSk9PXN0cmluZ1RhZ31mdW5jdGlvbiBpc1N5bWJvbCh2YWx1ZSl7cmV0dXJuIHR5cGVvZiB2YWx1ZT09InN5bWJvbCJ8fGlzT2JqZWN0TGlrZSh2YWx1ZSkmJmJhc2VHZXRUYWcodmFsdWUpPT1zeW1ib2xUYWd9dmFyIGlzVHlwZWRBcnJheT1ub2RlSXNUeXBlZEFycmF5P2Jhc2VVbmFyeShub2RlSXNUeXBlZEFycmF5KTpiYXNlSXNUeXBlZEFycmF5O2Z1bmN0aW9uIGlzVW5kZWZpbmVkKHZhbHVlKXtyZXR1cm4gdmFsdWU9PT11bmRlZmluZWR9ZnVuY3Rpb24gaXNXZWFrTWFwKHZhbHVlKXtyZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSYmCmdldFRhZyh2YWx1ZSk9PXdlYWtNYXBUYWd9ZnVuY3Rpb24gaXNXZWFrU2V0KHZhbHVlKXtyZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSYmYmFzZUdldFRhZyh2YWx1ZSk9PXdlYWtTZXRUYWd9dmFyIGx0PWNyZWF0ZVJlbGF0aW9uYWxPcGVyYXRpb24oYmFzZUx0KTt2YXIgbHRlPWNyZWF0ZVJlbGF0aW9uYWxPcGVyYXRpb24oZnVuY3Rpb24odmFsdWUsb3RoZXIpe3JldHVybiB2YWx1ZTw9b3RoZXJ9KTtmdW5jdGlvbiB0b0FycmF5KHZhbHVlKXtpZighdmFsdWUpcmV0dXJuW107aWYoaXNBcnJheUxpa2UodmFsdWUpKXJldHVybiBpc1N0cmluZyh2YWx1ZSk/c3RyaW5nVG9BcnJheSh2YWx1ZSk6Y29weUFycmF5KHZhbHVlKTtpZihzeW1JdGVyYXRvciYmdmFsdWVbc3ltSXRlcmF0b3JdKXJldHVybiBpdGVyYXRvclRvQXJyYXkodmFsdWVbc3ltSXRlcmF0b3JdKCkpO3ZhciB0YWc9Z2V0VGFnKHZhbHVlKSxmdW5jPXRhZz09bWFwVGFnP21hcFRvQXJyYXk6dGFnPT1zZXRUYWc/c2V0VG9BcnJheToKdmFsdWVzO3JldHVybiBmdW5jKHZhbHVlKX1mdW5jdGlvbiB0b0Zpbml0ZSh2YWx1ZSl7aWYoIXZhbHVlKXJldHVybiB2YWx1ZT09PTA/dmFsdWU6MDt2YWx1ZT10b051bWJlcih2YWx1ZSk7aWYodmFsdWU9PT1JTkZJTklUWXx8dmFsdWU9PT0tSU5GSU5JVFkpe3ZhciBzaWduPXZhbHVlPDA/LTE6MTtyZXR1cm4gc2lnbipNQVhfSU5URUdFUn1yZXR1cm4gdmFsdWU9PT12YWx1ZT92YWx1ZTowfWZ1bmN0aW9uIHRvSW50ZWdlcih2YWx1ZSl7dmFyIHJlc3VsdD10b0Zpbml0ZSh2YWx1ZSkscmVtYWluZGVyPXJlc3VsdCUxO3JldHVybiByZXN1bHQ9PT1yZXN1bHQ/cmVtYWluZGVyP3Jlc3VsdC1yZW1haW5kZXI6cmVzdWx0OjB9ZnVuY3Rpb24gdG9MZW5ndGgodmFsdWUpe3JldHVybiB2YWx1ZT9iYXNlQ2xhbXAodG9JbnRlZ2VyKHZhbHVlKSwwLE1BWF9BUlJBWV9MRU5HVEgpOjB9ZnVuY3Rpb24gdG9OdW1iZXIodmFsdWUpe2lmKHR5cGVvZiB2YWx1ZT09Im51bWJlciIpcmV0dXJuIHZhbHVlOwppZihpc1N5bWJvbCh2YWx1ZSkpcmV0dXJuIE5BTjtpZihpc09iamVjdCh2YWx1ZSkpe3ZhciBvdGhlcj10eXBlb2YgdmFsdWUudmFsdWVPZj09ImZ1bmN0aW9uIj92YWx1ZS52YWx1ZU9mKCk6dmFsdWU7dmFsdWU9aXNPYmplY3Qob3RoZXIpP290aGVyKyIiOm90aGVyfWlmKHR5cGVvZiB2YWx1ZSE9InN0cmluZyIpcmV0dXJuIHZhbHVlPT09MD92YWx1ZTordmFsdWU7dmFsdWU9dmFsdWUucmVwbGFjZShyZVRyaW0sIiIpO3ZhciBpc0JpbmFyeT1yZUlzQmluYXJ5LnRlc3QodmFsdWUpO3JldHVybiBpc0JpbmFyeXx8cmVJc09jdGFsLnRlc3QodmFsdWUpP2ZyZWVQYXJzZUludCh2YWx1ZS5zbGljZSgyKSxpc0JpbmFyeT8yOjgpOnJlSXNCYWRIZXgudGVzdCh2YWx1ZSk/TkFOOit2YWx1ZX1mdW5jdGlvbiB0b1BsYWluT2JqZWN0KHZhbHVlKXtyZXR1cm4gY29weU9iamVjdCh2YWx1ZSxrZXlzSW4odmFsdWUpKX1mdW5jdGlvbiB0b1NhZmVJbnRlZ2VyKHZhbHVlKXtyZXR1cm4gdmFsdWU/CmJhc2VDbGFtcCh0b0ludGVnZXIodmFsdWUpLC1NQVhfU0FGRV9JTlRFR0VSLE1BWF9TQUZFX0lOVEVHRVIpOnZhbHVlPT09MD92YWx1ZTowfWZ1bmN0aW9uIHRvU3RyaW5nKHZhbHVlKXtyZXR1cm4gdmFsdWU9PW51bGw/IiI6YmFzZVRvU3RyaW5nKHZhbHVlKX12YXIgYXNzaWduPWNyZWF0ZUFzc2lnbmVyKGZ1bmN0aW9uKG9iamVjdCxzb3VyY2Upe2lmKGlzUHJvdG90eXBlKHNvdXJjZSl8fGlzQXJyYXlMaWtlKHNvdXJjZSkpe2NvcHlPYmplY3Qoc291cmNlLGtleXMoc291cmNlKSxvYmplY3QpO3JldHVybn1mb3IodmFyIGtleSBpbiBzb3VyY2UpaWYoaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2Usa2V5KSlhc3NpZ25WYWx1ZShvYmplY3Qsa2V5LHNvdXJjZVtrZXldKX0pO3ZhciBhc3NpZ25Jbj1jcmVhdGVBc3NpZ25lcihmdW5jdGlvbihvYmplY3Qsc291cmNlKXtjb3B5T2JqZWN0KHNvdXJjZSxrZXlzSW4oc291cmNlKSxvYmplY3QpfSk7dmFyIGFzc2lnbkluV2l0aD1jcmVhdGVBc3NpZ25lcihmdW5jdGlvbihvYmplY3QsCnNvdXJjZSxzcmNJbmRleCxjdXN0b21pemVyKXtjb3B5T2JqZWN0KHNvdXJjZSxrZXlzSW4oc291cmNlKSxvYmplY3QsY3VzdG9taXplcil9KTt2YXIgYXNzaWduV2l0aD1jcmVhdGVBc3NpZ25lcihmdW5jdGlvbihvYmplY3Qsc291cmNlLHNyY0luZGV4LGN1c3RvbWl6ZXIpe2NvcHlPYmplY3Qoc291cmNlLGtleXMoc291cmNlKSxvYmplY3QsY3VzdG9taXplcil9KTt2YXIgYXQ9ZmxhdFJlc3QoYmFzZUF0KTtmdW5jdGlvbiBjcmVhdGUocHJvdG90eXBlLHByb3BlcnRpZXMpe3ZhciByZXN1bHQ9YmFzZUNyZWF0ZShwcm90b3R5cGUpO3JldHVybiBwcm9wZXJ0aWVzPT1udWxsP3Jlc3VsdDpiYXNlQXNzaWduKHJlc3VsdCxwcm9wZXJ0aWVzKX12YXIgZGVmYXVsdHM9YmFzZVJlc3QoZnVuY3Rpb24ob2JqZWN0LHNvdXJjZXMpe29iamVjdD1PYmplY3Qob2JqZWN0KTt2YXIgaW5kZXg9LTE7dmFyIGxlbmd0aD1zb3VyY2VzLmxlbmd0aDt2YXIgZ3VhcmQ9bGVuZ3RoPjI/c291cmNlc1syXToKdW5kZWZpbmVkO2lmKGd1YXJkJiZpc0l0ZXJhdGVlQ2FsbChzb3VyY2VzWzBdLHNvdXJjZXNbMV0sZ3VhcmQpKWxlbmd0aD0xO3doaWxlKCsraW5kZXg8bGVuZ3RoKXt2YXIgc291cmNlPXNvdXJjZXNbaW5kZXhdO3ZhciBwcm9wcz1rZXlzSW4oc291cmNlKTt2YXIgcHJvcHNJbmRleD0tMTt2YXIgcHJvcHNMZW5ndGg9cHJvcHMubGVuZ3RoO3doaWxlKCsrcHJvcHNJbmRleDxwcm9wc0xlbmd0aCl7dmFyIGtleT1wcm9wc1twcm9wc0luZGV4XTt2YXIgdmFsdWU9b2JqZWN0W2tleV07aWYodmFsdWU9PT11bmRlZmluZWR8fGVxKHZhbHVlLG9iamVjdFByb3RvW2tleV0pJiYhaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3Qsa2V5KSlvYmplY3Rba2V5XT1zb3VyY2Vba2V5XX19cmV0dXJuIG9iamVjdH0pO3ZhciBkZWZhdWx0c0RlZXA9YmFzZVJlc3QoZnVuY3Rpb24oYXJncyl7YXJncy5wdXNoKHVuZGVmaW5lZCxjdXN0b21EZWZhdWx0c01lcmdlKTtyZXR1cm4gYXBwbHkobWVyZ2VXaXRoLAp1bmRlZmluZWQsYXJncyl9KTtmdW5jdGlvbiBmaW5kS2V5KG9iamVjdCxwcmVkaWNhdGUpe3JldHVybiBiYXNlRmluZEtleShvYmplY3QsZ2V0SXRlcmF0ZWUocHJlZGljYXRlLDMpLGJhc2VGb3JPd24pfWZ1bmN0aW9uIGZpbmRMYXN0S2V5KG9iamVjdCxwcmVkaWNhdGUpe3JldHVybiBiYXNlRmluZEtleShvYmplY3QsZ2V0SXRlcmF0ZWUocHJlZGljYXRlLDMpLGJhc2VGb3JPd25SaWdodCl9ZnVuY3Rpb24gZm9ySW4ob2JqZWN0LGl0ZXJhdGVlKXtyZXR1cm4gb2JqZWN0PT1udWxsP29iamVjdDpiYXNlRm9yKG9iamVjdCxnZXRJdGVyYXRlZShpdGVyYXRlZSwzKSxrZXlzSW4pfWZ1bmN0aW9uIGZvckluUmlnaHQob2JqZWN0LGl0ZXJhdGVlKXtyZXR1cm4gb2JqZWN0PT1udWxsP29iamVjdDpiYXNlRm9yUmlnaHQob2JqZWN0LGdldEl0ZXJhdGVlKGl0ZXJhdGVlLDMpLGtleXNJbil9ZnVuY3Rpb24gZm9yT3duKG9iamVjdCxpdGVyYXRlZSl7cmV0dXJuIG9iamVjdCYmYmFzZUZvck93bihvYmplY3QsCmdldEl0ZXJhdGVlKGl0ZXJhdGVlLDMpKX1mdW5jdGlvbiBmb3JPd25SaWdodChvYmplY3QsaXRlcmF0ZWUpe3JldHVybiBvYmplY3QmJmJhc2VGb3JPd25SaWdodChvYmplY3QsZ2V0SXRlcmF0ZWUoaXRlcmF0ZWUsMykpfWZ1bmN0aW9uIGZ1bmN0aW9ucyhvYmplY3Qpe3JldHVybiBvYmplY3Q9PW51bGw/W106YmFzZUZ1bmN0aW9ucyhvYmplY3Qsa2V5cyhvYmplY3QpKX1mdW5jdGlvbiBmdW5jdGlvbnNJbihvYmplY3Qpe3JldHVybiBvYmplY3Q9PW51bGw/W106YmFzZUZ1bmN0aW9ucyhvYmplY3Qsa2V5c0luKG9iamVjdCkpfWZ1bmN0aW9uIGdldChvYmplY3QscGF0aCxkZWZhdWx0VmFsdWUpe3ZhciByZXN1bHQ9b2JqZWN0PT1udWxsP3VuZGVmaW5lZDpiYXNlR2V0KG9iamVjdCxwYXRoKTtyZXR1cm4gcmVzdWx0PT09dW5kZWZpbmVkP2RlZmF1bHRWYWx1ZTpyZXN1bHR9ZnVuY3Rpb24gaGFzKG9iamVjdCxwYXRoKXtyZXR1cm4gb2JqZWN0IT1udWxsJiZoYXNQYXRoKG9iamVjdCwKcGF0aCxiYXNlSGFzKX1mdW5jdGlvbiBoYXNJbihvYmplY3QscGF0aCl7cmV0dXJuIG9iamVjdCE9bnVsbCYmaGFzUGF0aChvYmplY3QscGF0aCxiYXNlSGFzSW4pfXZhciBpbnZlcnQ9Y3JlYXRlSW52ZXJ0ZXIoZnVuY3Rpb24ocmVzdWx0LHZhbHVlLGtleSl7aWYodmFsdWUhPW51bGwmJnR5cGVvZiB2YWx1ZS50b1N0cmluZyE9ImZ1bmN0aW9uIil2YWx1ZT1uYXRpdmVPYmplY3RUb1N0cmluZy5jYWxsKHZhbHVlKTtyZXN1bHRbdmFsdWVdPWtleX0sY29uc3RhbnQoaWRlbnRpdHkpKTt2YXIgaW52ZXJ0Qnk9Y3JlYXRlSW52ZXJ0ZXIoZnVuY3Rpb24ocmVzdWx0LHZhbHVlLGtleSl7aWYodmFsdWUhPW51bGwmJnR5cGVvZiB2YWx1ZS50b1N0cmluZyE9ImZ1bmN0aW9uIil2YWx1ZT1uYXRpdmVPYmplY3RUb1N0cmluZy5jYWxsKHZhbHVlKTtpZihoYXNPd25Qcm9wZXJ0eS5jYWxsKHJlc3VsdCx2YWx1ZSkpcmVzdWx0W3ZhbHVlXS5wdXNoKGtleSk7ZWxzZSByZXN1bHRbdmFsdWVdPVtrZXldfSwKZ2V0SXRlcmF0ZWUpO3ZhciBpbnZva2U9YmFzZVJlc3QoYmFzZUludm9rZSk7ZnVuY3Rpb24ga2V5cyhvYmplY3Qpe3JldHVybiBpc0FycmF5TGlrZShvYmplY3QpP2FycmF5TGlrZUtleXMob2JqZWN0KTpiYXNlS2V5cyhvYmplY3QpfWZ1bmN0aW9uIGtleXNJbihvYmplY3Qpe3JldHVybiBpc0FycmF5TGlrZShvYmplY3QpP2FycmF5TGlrZUtleXMob2JqZWN0LHRydWUpOmJhc2VLZXlzSW4ob2JqZWN0KX1mdW5jdGlvbiBtYXBLZXlzKG9iamVjdCxpdGVyYXRlZSl7dmFyIHJlc3VsdD17fTtpdGVyYXRlZT1nZXRJdGVyYXRlZShpdGVyYXRlZSwzKTtiYXNlRm9yT3duKG9iamVjdCxmdW5jdGlvbih2YWx1ZSxrZXksb2JqZWN0KXtiYXNlQXNzaWduVmFsdWUocmVzdWx0LGl0ZXJhdGVlKHZhbHVlLGtleSxvYmplY3QpLHZhbHVlKX0pO3JldHVybiByZXN1bHR9ZnVuY3Rpb24gbWFwVmFsdWVzKG9iamVjdCxpdGVyYXRlZSl7dmFyIHJlc3VsdD17fTtpdGVyYXRlZT1nZXRJdGVyYXRlZShpdGVyYXRlZSwKMyk7YmFzZUZvck93bihvYmplY3QsZnVuY3Rpb24odmFsdWUsa2V5LG9iamVjdCl7YmFzZUFzc2lnblZhbHVlKHJlc3VsdCxrZXksaXRlcmF0ZWUodmFsdWUsa2V5LG9iamVjdCkpfSk7cmV0dXJuIHJlc3VsdH12YXIgbWVyZ2U9Y3JlYXRlQXNzaWduZXIoZnVuY3Rpb24ob2JqZWN0LHNvdXJjZSxzcmNJbmRleCl7YmFzZU1lcmdlKG9iamVjdCxzb3VyY2Usc3JjSW5kZXgpfSk7dmFyIG1lcmdlV2l0aD1jcmVhdGVBc3NpZ25lcihmdW5jdGlvbihvYmplY3Qsc291cmNlLHNyY0luZGV4LGN1c3RvbWl6ZXIpe2Jhc2VNZXJnZShvYmplY3Qsc291cmNlLHNyY0luZGV4LGN1c3RvbWl6ZXIpfSk7dmFyIG9taXQ9ZmxhdFJlc3QoZnVuY3Rpb24ob2JqZWN0LHBhdGhzKXt2YXIgcmVzdWx0PXt9O2lmKG9iamVjdD09bnVsbClyZXR1cm4gcmVzdWx0O3ZhciBpc0RlZXA9ZmFsc2U7cGF0aHM9YXJyYXlNYXAocGF0aHMsZnVuY3Rpb24ocGF0aCl7cGF0aD1jYXN0UGF0aChwYXRoLG9iamVjdCk7aXNEZWVwfHwKKGlzRGVlcD1wYXRoLmxlbmd0aD4xKTtyZXR1cm4gcGF0aH0pO2NvcHlPYmplY3Qob2JqZWN0LGdldEFsbEtleXNJbihvYmplY3QpLHJlc3VsdCk7aWYoaXNEZWVwKXJlc3VsdD1iYXNlQ2xvbmUocmVzdWx0LENMT05FX0RFRVBfRkxBR3xDTE9ORV9GTEFUX0ZMQUd8Q0xPTkVfU1lNQk9MU19GTEFHLGN1c3RvbU9taXRDbG9uZSk7dmFyIGxlbmd0aD1wYXRocy5sZW5ndGg7d2hpbGUobGVuZ3RoLS0pYmFzZVVuc2V0KHJlc3VsdCxwYXRoc1tsZW5ndGhdKTtyZXR1cm4gcmVzdWx0fSk7ZnVuY3Rpb24gb21pdEJ5KG9iamVjdCxwcmVkaWNhdGUpe3JldHVybiBwaWNrQnkob2JqZWN0LG5lZ2F0ZShnZXRJdGVyYXRlZShwcmVkaWNhdGUpKSl9dmFyIHBpY2s9ZmxhdFJlc3QoZnVuY3Rpb24ob2JqZWN0LHBhdGhzKXtyZXR1cm4gb2JqZWN0PT1udWxsP3t9OmJhc2VQaWNrKG9iamVjdCxwYXRocyl9KTtmdW5jdGlvbiBwaWNrQnkob2JqZWN0LHByZWRpY2F0ZSl7aWYob2JqZWN0PT1udWxsKXJldHVybnt9Owp2YXIgcHJvcHM9YXJyYXlNYXAoZ2V0QWxsS2V5c0luKG9iamVjdCksZnVuY3Rpb24ocHJvcCl7cmV0dXJuW3Byb3BdfSk7cHJlZGljYXRlPWdldEl0ZXJhdGVlKHByZWRpY2F0ZSk7cmV0dXJuIGJhc2VQaWNrQnkob2JqZWN0LHByb3BzLGZ1bmN0aW9uKHZhbHVlLHBhdGgpe3JldHVybiBwcmVkaWNhdGUodmFsdWUscGF0aFswXSl9KX1mdW5jdGlvbiByZXN1bHQob2JqZWN0LHBhdGgsZGVmYXVsdFZhbHVlKXtwYXRoPWNhc3RQYXRoKHBhdGgsb2JqZWN0KTt2YXIgaW5kZXg9LTEsbGVuZ3RoPXBhdGgubGVuZ3RoO2lmKCFsZW5ndGgpe2xlbmd0aD0xO29iamVjdD11bmRlZmluZWR9d2hpbGUoKytpbmRleDxsZW5ndGgpe3ZhciB2YWx1ZT1vYmplY3Q9PW51bGw/dW5kZWZpbmVkOm9iamVjdFt0b0tleShwYXRoW2luZGV4XSldO2lmKHZhbHVlPT09dW5kZWZpbmVkKXtpbmRleD1sZW5ndGg7dmFsdWU9ZGVmYXVsdFZhbHVlfW9iamVjdD1pc0Z1bmN0aW9uKHZhbHVlKT92YWx1ZS5jYWxsKG9iamVjdCk6CnZhbHVlfXJldHVybiBvYmplY3R9ZnVuY3Rpb24gc2V0KG9iamVjdCxwYXRoLHZhbHVlKXtyZXR1cm4gb2JqZWN0PT1udWxsP29iamVjdDpiYXNlU2V0KG9iamVjdCxwYXRoLHZhbHVlKX1mdW5jdGlvbiBzZXRXaXRoKG9iamVjdCxwYXRoLHZhbHVlLGN1c3RvbWl6ZXIpe2N1c3RvbWl6ZXI9dHlwZW9mIGN1c3RvbWl6ZXI9PSJmdW5jdGlvbiI/Y3VzdG9taXplcjp1bmRlZmluZWQ7cmV0dXJuIG9iamVjdD09bnVsbD9vYmplY3Q6YmFzZVNldChvYmplY3QscGF0aCx2YWx1ZSxjdXN0b21pemVyKX12YXIgdG9QYWlycz1jcmVhdGVUb1BhaXJzKGtleXMpO3ZhciB0b1BhaXJzSW49Y3JlYXRlVG9QYWlycyhrZXlzSW4pO2Z1bmN0aW9uIHRyYW5zZm9ybShvYmplY3QsaXRlcmF0ZWUsYWNjdW11bGF0b3Ipe3ZhciBpc0Fycj1pc0FycmF5KG9iamVjdCksaXNBcnJMaWtlPWlzQXJyfHxpc0J1ZmZlcihvYmplY3QpfHxpc1R5cGVkQXJyYXkob2JqZWN0KTtpdGVyYXRlZT1nZXRJdGVyYXRlZShpdGVyYXRlZSwKNCk7aWYoYWNjdW11bGF0b3I9PW51bGwpe3ZhciBDdG9yPW9iamVjdCYmb2JqZWN0LmNvbnN0cnVjdG9yO2lmKGlzQXJyTGlrZSlhY2N1bXVsYXRvcj1pc0Fycj9uZXcgQ3RvcjpbXTtlbHNlIGlmKGlzT2JqZWN0KG9iamVjdCkpYWNjdW11bGF0b3I9aXNGdW5jdGlvbihDdG9yKT9iYXNlQ3JlYXRlKGdldFByb3RvdHlwZShvYmplY3QpKTp7fTtlbHNlIGFjY3VtdWxhdG9yPXt9fShpc0Fyckxpa2U/YXJyYXlFYWNoOmJhc2VGb3JPd24pKG9iamVjdCxmdW5jdGlvbih2YWx1ZSxpbmRleCxvYmplY3Qpe3JldHVybiBpdGVyYXRlZShhY2N1bXVsYXRvcix2YWx1ZSxpbmRleCxvYmplY3QpfSk7cmV0dXJuIGFjY3VtdWxhdG9yfWZ1bmN0aW9uIHVuc2V0KG9iamVjdCxwYXRoKXtyZXR1cm4gb2JqZWN0PT1udWxsP3RydWU6YmFzZVVuc2V0KG9iamVjdCxwYXRoKX1mdW5jdGlvbiB1cGRhdGUob2JqZWN0LHBhdGgsdXBkYXRlcil7cmV0dXJuIG9iamVjdD09bnVsbD9vYmplY3Q6YmFzZVVwZGF0ZShvYmplY3QsCnBhdGgsY2FzdEZ1bmN0aW9uKHVwZGF0ZXIpKX1mdW5jdGlvbiB1cGRhdGVXaXRoKG9iamVjdCxwYXRoLHVwZGF0ZXIsY3VzdG9taXplcil7Y3VzdG9taXplcj10eXBlb2YgY3VzdG9taXplcj09ImZ1bmN0aW9uIj9jdXN0b21pemVyOnVuZGVmaW5lZDtyZXR1cm4gb2JqZWN0PT1udWxsP29iamVjdDpiYXNlVXBkYXRlKG9iamVjdCxwYXRoLGNhc3RGdW5jdGlvbih1cGRhdGVyKSxjdXN0b21pemVyKX1mdW5jdGlvbiB2YWx1ZXMob2JqZWN0KXtyZXR1cm4gb2JqZWN0PT1udWxsP1tdOmJhc2VWYWx1ZXMob2JqZWN0LGtleXMob2JqZWN0KSl9ZnVuY3Rpb24gdmFsdWVzSW4ob2JqZWN0KXtyZXR1cm4gb2JqZWN0PT1udWxsP1tdOmJhc2VWYWx1ZXMob2JqZWN0LGtleXNJbihvYmplY3QpKX1mdW5jdGlvbiBjbGFtcChudW1iZXIsbG93ZXIsdXBwZXIpe2lmKHVwcGVyPT09dW5kZWZpbmVkKXt1cHBlcj1sb3dlcjtsb3dlcj11bmRlZmluZWR9aWYodXBwZXIhPT11bmRlZmluZWQpe3VwcGVyPQp0b051bWJlcih1cHBlcik7dXBwZXI9dXBwZXI9PT11cHBlcj91cHBlcjowfWlmKGxvd2VyIT09dW5kZWZpbmVkKXtsb3dlcj10b051bWJlcihsb3dlcik7bG93ZXI9bG93ZXI9PT1sb3dlcj9sb3dlcjowfXJldHVybiBiYXNlQ2xhbXAodG9OdW1iZXIobnVtYmVyKSxsb3dlcix1cHBlcil9ZnVuY3Rpb24gaW5SYW5nZShudW1iZXIsc3RhcnQsZW5kKXtzdGFydD10b0Zpbml0ZShzdGFydCk7aWYoZW5kPT09dW5kZWZpbmVkKXtlbmQ9c3RhcnQ7c3RhcnQ9MH1lbHNlIGVuZD10b0Zpbml0ZShlbmQpO251bWJlcj10b051bWJlcihudW1iZXIpO3JldHVybiBiYXNlSW5SYW5nZShudW1iZXIsc3RhcnQsZW5kKX1mdW5jdGlvbiByYW5kb20obG93ZXIsdXBwZXIsZmxvYXRpbmcpe2lmKGZsb2F0aW5nJiZ0eXBlb2YgZmxvYXRpbmchPSJib29sZWFuIiYmaXNJdGVyYXRlZUNhbGwobG93ZXIsdXBwZXIsZmxvYXRpbmcpKXVwcGVyPWZsb2F0aW5nPXVuZGVmaW5lZDtpZihmbG9hdGluZz09PXVuZGVmaW5lZClpZih0eXBlb2YgdXBwZXI9PQoiYm9vbGVhbiIpe2Zsb2F0aW5nPXVwcGVyO3VwcGVyPXVuZGVmaW5lZH1lbHNlIGlmKHR5cGVvZiBsb3dlcj09ImJvb2xlYW4iKXtmbG9hdGluZz1sb3dlcjtsb3dlcj11bmRlZmluZWR9aWYobG93ZXI9PT11bmRlZmluZWQmJnVwcGVyPT09dW5kZWZpbmVkKXtsb3dlcj0wO3VwcGVyPTF9ZWxzZXtsb3dlcj10b0Zpbml0ZShsb3dlcik7aWYodXBwZXI9PT11bmRlZmluZWQpe3VwcGVyPWxvd2VyO2xvd2VyPTB9ZWxzZSB1cHBlcj10b0Zpbml0ZSh1cHBlcil9aWYobG93ZXI+dXBwZXIpe3ZhciB0ZW1wPWxvd2VyO2xvd2VyPXVwcGVyO3VwcGVyPXRlbXB9aWYoZmxvYXRpbmd8fGxvd2VyJTF8fHVwcGVyJTEpe3ZhciByYW5kPW5hdGl2ZVJhbmRvbSgpO3JldHVybiBuYXRpdmVNaW4obG93ZXIrcmFuZCoodXBwZXItbG93ZXIrZnJlZVBhcnNlRmxvYXQoIjFlLSIrKChyYW5kKyIiKS5sZW5ndGgtMSkpKSx1cHBlcil9cmV0dXJuIGJhc2VSYW5kb20obG93ZXIsdXBwZXIpfXZhciBjYW1lbENhc2U9CmNyZWF0ZUNvbXBvdW5kZXIoZnVuY3Rpb24ocmVzdWx0LHdvcmQsaW5kZXgpe3dvcmQ9d29yZC50b0xvd2VyQ2FzZSgpO3JldHVybiByZXN1bHQrKGluZGV4P2NhcGl0YWxpemUod29yZCk6d29yZCl9KTtmdW5jdGlvbiBjYXBpdGFsaXplKHN0cmluZyl7cmV0dXJuIHVwcGVyRmlyc3QodG9TdHJpbmcoc3RyaW5nKS50b0xvd2VyQ2FzZSgpKX1mdW5jdGlvbiBkZWJ1cnIoc3RyaW5nKXtzdHJpbmc9dG9TdHJpbmcoc3RyaW5nKTtyZXR1cm4gc3RyaW5nJiZzdHJpbmcucmVwbGFjZShyZUxhdGluLGRlYnVyckxldHRlcikucmVwbGFjZShyZUNvbWJvTWFyaywiIil9ZnVuY3Rpb24gZW5kc1dpdGgoc3RyaW5nLHRhcmdldCxwb3NpdGlvbil7c3RyaW5nPXRvU3RyaW5nKHN0cmluZyk7dGFyZ2V0PWJhc2VUb1N0cmluZyh0YXJnZXQpO3ZhciBsZW5ndGg9c3RyaW5nLmxlbmd0aDtwb3NpdGlvbj1wb3NpdGlvbj09PXVuZGVmaW5lZD9sZW5ndGg6YmFzZUNsYW1wKHRvSW50ZWdlcihwb3NpdGlvbiksCjAsbGVuZ3RoKTt2YXIgZW5kPXBvc2l0aW9uO3Bvc2l0aW9uLT10YXJnZXQubGVuZ3RoO3JldHVybiBwb3NpdGlvbj49MCYmc3RyaW5nLnNsaWNlKHBvc2l0aW9uLGVuZCk9PXRhcmdldH1mdW5jdGlvbiBlc2NhcGUoc3RyaW5nKXtzdHJpbmc9dG9TdHJpbmcoc3RyaW5nKTtyZXR1cm4gc3RyaW5nJiZyZUhhc1VuZXNjYXBlZEh0bWwudGVzdChzdHJpbmcpP3N0cmluZy5yZXBsYWNlKHJlVW5lc2NhcGVkSHRtbCxlc2NhcGVIdG1sQ2hhcik6c3RyaW5nfWZ1bmN0aW9uIGVzY2FwZVJlZ0V4cChzdHJpbmcpe3N0cmluZz10b1N0cmluZyhzdHJpbmcpO3JldHVybiBzdHJpbmcmJnJlSGFzUmVnRXhwQ2hhci50ZXN0KHN0cmluZyk/c3RyaW5nLnJlcGxhY2UocmVSZWdFeHBDaGFyLCJcXCRceDI2Iik6c3RyaW5nfXZhciBrZWJhYkNhc2U9Y3JlYXRlQ29tcG91bmRlcihmdW5jdGlvbihyZXN1bHQsd29yZCxpbmRleCl7cmV0dXJuIHJlc3VsdCsoaW5kZXg/Ii0iOiIiKSt3b3JkLnRvTG93ZXJDYXNlKCl9KTsKdmFyIGxvd2VyQ2FzZT1jcmVhdGVDb21wb3VuZGVyKGZ1bmN0aW9uKHJlc3VsdCx3b3JkLGluZGV4KXtyZXR1cm4gcmVzdWx0KyhpbmRleD8iICI6IiIpK3dvcmQudG9Mb3dlckNhc2UoKX0pO3ZhciBsb3dlckZpcnN0PWNyZWF0ZUNhc2VGaXJzdCgidG9Mb3dlckNhc2UiKTtmdW5jdGlvbiBwYWQoc3RyaW5nLGxlbmd0aCxjaGFycyl7c3RyaW5nPXRvU3RyaW5nKHN0cmluZyk7bGVuZ3RoPXRvSW50ZWdlcihsZW5ndGgpO3ZhciBzdHJMZW5ndGg9bGVuZ3RoP3N0cmluZ1NpemUoc3RyaW5nKTowO2lmKCFsZW5ndGh8fHN0ckxlbmd0aD49bGVuZ3RoKXJldHVybiBzdHJpbmc7dmFyIG1pZD0obGVuZ3RoLXN0ckxlbmd0aCkvMjtyZXR1cm4gY3JlYXRlUGFkZGluZyhuYXRpdmVGbG9vcihtaWQpLGNoYXJzKStzdHJpbmcrY3JlYXRlUGFkZGluZyhuYXRpdmVDZWlsKG1pZCksY2hhcnMpfWZ1bmN0aW9uIHBhZEVuZChzdHJpbmcsbGVuZ3RoLGNoYXJzKXtzdHJpbmc9dG9TdHJpbmcoc3RyaW5nKTsKbGVuZ3RoPXRvSW50ZWdlcihsZW5ndGgpO3ZhciBzdHJMZW5ndGg9bGVuZ3RoP3N0cmluZ1NpemUoc3RyaW5nKTowO3JldHVybiBsZW5ndGgmJnN0ckxlbmd0aDxsZW5ndGg/c3RyaW5nK2NyZWF0ZVBhZGRpbmcobGVuZ3RoLXN0ckxlbmd0aCxjaGFycyk6c3RyaW5nfWZ1bmN0aW9uIHBhZFN0YXJ0KHN0cmluZyxsZW5ndGgsY2hhcnMpe3N0cmluZz10b1N0cmluZyhzdHJpbmcpO2xlbmd0aD10b0ludGVnZXIobGVuZ3RoKTt2YXIgc3RyTGVuZ3RoPWxlbmd0aD9zdHJpbmdTaXplKHN0cmluZyk6MDtyZXR1cm4gbGVuZ3RoJiZzdHJMZW5ndGg8bGVuZ3RoP2NyZWF0ZVBhZGRpbmcobGVuZ3RoLXN0ckxlbmd0aCxjaGFycykrc3RyaW5nOnN0cmluZ31mdW5jdGlvbiBwYXJzZUludChzdHJpbmcscmFkaXgsZ3VhcmQpe2lmKGd1YXJkfHxyYWRpeD09bnVsbClyYWRpeD0wO2Vsc2UgaWYocmFkaXgpcmFkaXg9K3JhZGl4O3JldHVybiBuYXRpdmVQYXJzZUludCh0b1N0cmluZyhzdHJpbmcpLnJlcGxhY2UocmVUcmltU3RhcnQsCiIiKSxyYWRpeHx8MCl9ZnVuY3Rpb24gcmVwZWF0KHN0cmluZyxuLGd1YXJkKXtpZihndWFyZD9pc0l0ZXJhdGVlQ2FsbChzdHJpbmcsbixndWFyZCk6bj09PXVuZGVmaW5lZCluPTE7ZWxzZSBuPXRvSW50ZWdlcihuKTtyZXR1cm4gYmFzZVJlcGVhdCh0b1N0cmluZyhzdHJpbmcpLG4pfWZ1bmN0aW9uIHJlcGxhY2UoKXt2YXIgYXJncz1hcmd1bWVudHMsc3RyaW5nPXRvU3RyaW5nKGFyZ3NbMF0pO3JldHVybiBhcmdzLmxlbmd0aDwzP3N0cmluZzpzdHJpbmcucmVwbGFjZShhcmdzWzFdLGFyZ3NbMl0pfXZhciBzbmFrZUNhc2U9Y3JlYXRlQ29tcG91bmRlcihmdW5jdGlvbihyZXN1bHQsd29yZCxpbmRleCl7cmV0dXJuIHJlc3VsdCsoaW5kZXg/Il8iOiIiKSt3b3JkLnRvTG93ZXJDYXNlKCl9KTtmdW5jdGlvbiBzcGxpdChzdHJpbmcsc2VwYXJhdG9yLGxpbWl0KXtpZihsaW1pdCYmdHlwZW9mIGxpbWl0IT0ibnVtYmVyIiYmaXNJdGVyYXRlZUNhbGwoc3RyaW5nLHNlcGFyYXRvcixsaW1pdCkpc2VwYXJhdG9yPQpsaW1pdD11bmRlZmluZWQ7bGltaXQ9bGltaXQ9PT11bmRlZmluZWQ/TUFYX0FSUkFZX0xFTkdUSDpsaW1pdD4+PjA7aWYoIWxpbWl0KXJldHVybltdO3N0cmluZz10b1N0cmluZyhzdHJpbmcpO2lmKHN0cmluZyYmKHR5cGVvZiBzZXBhcmF0b3I9PSJzdHJpbmcifHxzZXBhcmF0b3IhPW51bGwmJiFpc1JlZ0V4cChzZXBhcmF0b3IpKSl7c2VwYXJhdG9yPWJhc2VUb1N0cmluZyhzZXBhcmF0b3IpO2lmKCFzZXBhcmF0b3ImJmhhc1VuaWNvZGUoc3RyaW5nKSlyZXR1cm4gY2FzdFNsaWNlKHN0cmluZ1RvQXJyYXkoc3RyaW5nKSwwLGxpbWl0KX1yZXR1cm4gc3RyaW5nLnNwbGl0KHNlcGFyYXRvcixsaW1pdCl9dmFyIHN0YXJ0Q2FzZT1jcmVhdGVDb21wb3VuZGVyKGZ1bmN0aW9uKHJlc3VsdCx3b3JkLGluZGV4KXtyZXR1cm4gcmVzdWx0KyhpbmRleD8iICI6IiIpK3VwcGVyRmlyc3Qod29yZCl9KTtmdW5jdGlvbiBzdGFydHNXaXRoKHN0cmluZyx0YXJnZXQscG9zaXRpb24pe3N0cmluZz0KdG9TdHJpbmcoc3RyaW5nKTtwb3NpdGlvbj1wb3NpdGlvbj09bnVsbD8wOmJhc2VDbGFtcCh0b0ludGVnZXIocG9zaXRpb24pLDAsc3RyaW5nLmxlbmd0aCk7dGFyZ2V0PWJhc2VUb1N0cmluZyh0YXJnZXQpO3JldHVybiBzdHJpbmcuc2xpY2UocG9zaXRpb24scG9zaXRpb24rdGFyZ2V0Lmxlbmd0aCk9PXRhcmdldH1mdW5jdGlvbiB0ZW1wbGF0ZShzdHJpbmcsb3B0aW9ucyxndWFyZCl7dmFyIHNldHRpbmdzPWxvZGFzaC50ZW1wbGF0ZVNldHRpbmdzO2lmKGd1YXJkJiZpc0l0ZXJhdGVlQ2FsbChzdHJpbmcsb3B0aW9ucyxndWFyZCkpb3B0aW9ucz11bmRlZmluZWQ7c3RyaW5nPXRvU3RyaW5nKHN0cmluZyk7b3B0aW9ucz1hc3NpZ25JbldpdGgoe30sb3B0aW9ucyxzZXR0aW5ncyxjdXN0b21EZWZhdWx0c0Fzc2lnbkluKTt2YXIgaW1wb3J0cz1hc3NpZ25JbldpdGgoe30sb3B0aW9ucy5pbXBvcnRzLHNldHRpbmdzLmltcG9ydHMsY3VzdG9tRGVmYXVsdHNBc3NpZ25JbiksaW1wb3J0c0tleXM9CmtleXMoaW1wb3J0cyksaW1wb3J0c1ZhbHVlcz1iYXNlVmFsdWVzKGltcG9ydHMsaW1wb3J0c0tleXMpO3ZhciBpc0VzY2FwaW5nLGlzRXZhbHVhdGluZyxpbmRleD0wLGludGVycG9sYXRlPW9wdGlvbnMuaW50ZXJwb2xhdGV8fHJlTm9NYXRjaCxzb3VyY2U9Il9fcCArXHgzZCAnIjt2YXIgcmVEZWxpbWl0ZXJzPVJlZ0V4cCgob3B0aW9ucy5lc2NhcGV8fHJlTm9NYXRjaCkuc291cmNlKyJ8IitpbnRlcnBvbGF0ZS5zb3VyY2UrInwiKyhpbnRlcnBvbGF0ZT09PXJlSW50ZXJwb2xhdGU/cmVFc1RlbXBsYXRlOnJlTm9NYXRjaCkuc291cmNlKyJ8Iisob3B0aW9ucy5ldmFsdWF0ZXx8cmVOb01hdGNoKS5zb3VyY2UrInwkIiwiZyIpO3ZhciBzb3VyY2VVUkw9Ii8vIyBzb3VyY2VVUkxceDNkIisoInNvdXJjZVVSTCJpbiBvcHRpb25zP29wdGlvbnMuc291cmNlVVJMOiJsb2Rhc2gudGVtcGxhdGVTb3VyY2VzWyIrICsrdGVtcGxhdGVDb3VudGVyKyJdIikrIlxuIjtzdHJpbmcucmVwbGFjZShyZURlbGltaXRlcnMsCmZ1bmN0aW9uKG1hdGNoLGVzY2FwZVZhbHVlLGludGVycG9sYXRlVmFsdWUsZXNUZW1wbGF0ZVZhbHVlLGV2YWx1YXRlVmFsdWUsb2Zmc2V0KXtpbnRlcnBvbGF0ZVZhbHVlfHwoaW50ZXJwb2xhdGVWYWx1ZT1lc1RlbXBsYXRlVmFsdWUpO3NvdXJjZSs9c3RyaW5nLnNsaWNlKGluZGV4LG9mZnNldCkucmVwbGFjZShyZVVuZXNjYXBlZFN0cmluZyxlc2NhcGVTdHJpbmdDaGFyKTtpZihlc2NhcGVWYWx1ZSl7aXNFc2NhcGluZz10cnVlO3NvdXJjZSs9IicgK1xuX19lKCIrZXNjYXBlVmFsdWUrIikgK1xuJyJ9aWYoZXZhbHVhdGVWYWx1ZSl7aXNFdmFsdWF0aW5nPXRydWU7c291cmNlKz0iJztcbiIrZXZhbHVhdGVWYWx1ZSsiO1xuX19wICtceDNkICcifWlmKGludGVycG9sYXRlVmFsdWUpc291cmNlKz0iJyArXG4oKF9fdCBceDNkICgiK2ludGVycG9sYXRlVmFsdWUrIikpIFx4M2RceDNkIG51bGwgPyAnJyA6IF9fdCkgK1xuJyI7aW5kZXg9b2Zmc2V0K21hdGNoLmxlbmd0aDtyZXR1cm4gbWF0Y2h9KTsKc291cmNlKz0iJztcbiI7dmFyIHZhcmlhYmxlPW9wdGlvbnMudmFyaWFibGU7aWYoIXZhcmlhYmxlKXNvdXJjZT0id2l0aCAob2JqKSB7XG4iK3NvdXJjZSsiXG59XG4iO3NvdXJjZT0oaXNFdmFsdWF0aW5nP3NvdXJjZS5yZXBsYWNlKHJlRW1wdHlTdHJpbmdMZWFkaW5nLCIiKTpzb3VyY2UpLnJlcGxhY2UocmVFbXB0eVN0cmluZ01pZGRsZSwiJDEiKS5yZXBsYWNlKHJlRW1wdHlTdHJpbmdUcmFpbGluZywiJDE7Iik7c291cmNlPSJmdW5jdGlvbigiKyh2YXJpYWJsZXx8Im9iaiIpKyIpIHtcbiIrKHZhcmlhYmxlPyIiOiJvYmogfHwgKG9iaiBceDNkIHt9KTtcbiIpKyJ2YXIgX190LCBfX3AgXHgzZCAnJyIrKGlzRXNjYXBpbmc/IiwgX19lIFx4M2QgXy5lc2NhcGUiOiIiKSsoaXNFdmFsdWF0aW5nPyIsIF9faiBceDNkIEFycmF5LnByb3RvdHlwZS5qb2luO1xuIisiZnVuY3Rpb24gcHJpbnQoKSB7IF9fcCArXHgzZCBfX2ouY2FsbChhcmd1bWVudHMsICcnKSB9XG4iOiI7XG4iKStzb3VyY2UrCiJyZXR1cm4gX19wXG59Ijt2YXIgcmVzdWx0PWF0dGVtcHQoZnVuY3Rpb24oKXtyZXR1cm4gRnVuY3Rpb24oaW1wb3J0c0tleXMsc291cmNlVVJMKyJyZXR1cm4gIitzb3VyY2UpLmFwcGx5KHVuZGVmaW5lZCxpbXBvcnRzVmFsdWVzKX0pO3Jlc3VsdC5zb3VyY2U9c291cmNlO2lmKGlzRXJyb3IocmVzdWx0KSl0aHJvdyByZXN1bHQ7cmV0dXJuIHJlc3VsdH1mdW5jdGlvbiB0b0xvd2VyKHZhbHVlKXtyZXR1cm4gdG9TdHJpbmcodmFsdWUpLnRvTG93ZXJDYXNlKCl9ZnVuY3Rpb24gdG9VcHBlcih2YWx1ZSl7cmV0dXJuIHRvU3RyaW5nKHZhbHVlKS50b1VwcGVyQ2FzZSgpfWZ1bmN0aW9uIHRyaW0oc3RyaW5nLGNoYXJzLGd1YXJkKXtzdHJpbmc9dG9TdHJpbmcoc3RyaW5nKTtpZihzdHJpbmcmJihndWFyZHx8Y2hhcnM9PT11bmRlZmluZWQpKXJldHVybiBzdHJpbmcucmVwbGFjZShyZVRyaW0sIiIpO2lmKCFzdHJpbmd8fCEoY2hhcnM9YmFzZVRvU3RyaW5nKGNoYXJzKSkpcmV0dXJuIHN0cmluZzsKdmFyIHN0clN5bWJvbHM9c3RyaW5nVG9BcnJheShzdHJpbmcpLGNoclN5bWJvbHM9c3RyaW5nVG9BcnJheShjaGFycyksc3RhcnQ9Y2hhcnNTdGFydEluZGV4KHN0clN5bWJvbHMsY2hyU3ltYm9scyksZW5kPWNoYXJzRW5kSW5kZXgoc3RyU3ltYm9scyxjaHJTeW1ib2xzKSsxO3JldHVybiBjYXN0U2xpY2Uoc3RyU3ltYm9scyxzdGFydCxlbmQpLmpvaW4oIiIpfWZ1bmN0aW9uIHRyaW1FbmQoc3RyaW5nLGNoYXJzLGd1YXJkKXtzdHJpbmc9dG9TdHJpbmcoc3RyaW5nKTtpZihzdHJpbmcmJihndWFyZHx8Y2hhcnM9PT11bmRlZmluZWQpKXJldHVybiBzdHJpbmcucmVwbGFjZShyZVRyaW1FbmQsIiIpO2lmKCFzdHJpbmd8fCEoY2hhcnM9YmFzZVRvU3RyaW5nKGNoYXJzKSkpcmV0dXJuIHN0cmluZzt2YXIgc3RyU3ltYm9scz1zdHJpbmdUb0FycmF5KHN0cmluZyksZW5kPWNoYXJzRW5kSW5kZXgoc3RyU3ltYm9scyxzdHJpbmdUb0FycmF5KGNoYXJzKSkrMTtyZXR1cm4gY2FzdFNsaWNlKHN0clN5bWJvbHMsCjAsZW5kKS5qb2luKCIiKX1mdW5jdGlvbiB0cmltU3RhcnQoc3RyaW5nLGNoYXJzLGd1YXJkKXtzdHJpbmc9dG9TdHJpbmcoc3RyaW5nKTtpZihzdHJpbmcmJihndWFyZHx8Y2hhcnM9PT11bmRlZmluZWQpKXJldHVybiBzdHJpbmcucmVwbGFjZShyZVRyaW1TdGFydCwiIik7aWYoIXN0cmluZ3x8IShjaGFycz1iYXNlVG9TdHJpbmcoY2hhcnMpKSlyZXR1cm4gc3RyaW5nO3ZhciBzdHJTeW1ib2xzPXN0cmluZ1RvQXJyYXkoc3RyaW5nKSxzdGFydD1jaGFyc1N0YXJ0SW5kZXgoc3RyU3ltYm9scyxzdHJpbmdUb0FycmF5KGNoYXJzKSk7cmV0dXJuIGNhc3RTbGljZShzdHJTeW1ib2xzLHN0YXJ0KS5qb2luKCIiKX1mdW5jdGlvbiB0cnVuY2F0ZShzdHJpbmcsb3B0aW9ucyl7dmFyIGxlbmd0aD1ERUZBVUxUX1RSVU5DX0xFTkdUSCxvbWlzc2lvbj1ERUZBVUxUX1RSVU5DX09NSVNTSU9OO2lmKGlzT2JqZWN0KG9wdGlvbnMpKXt2YXIgc2VwYXJhdG9yPSJzZXBhcmF0b3IiaW4gb3B0aW9ucz8Kb3B0aW9ucy5zZXBhcmF0b3I6c2VwYXJhdG9yO2xlbmd0aD0ibGVuZ3RoImluIG9wdGlvbnM/dG9JbnRlZ2VyKG9wdGlvbnMubGVuZ3RoKTpsZW5ndGg7b21pc3Npb249Im9taXNzaW9uImluIG9wdGlvbnM/YmFzZVRvU3RyaW5nKG9wdGlvbnMub21pc3Npb24pOm9taXNzaW9ufXN0cmluZz10b1N0cmluZyhzdHJpbmcpO3ZhciBzdHJMZW5ndGg9c3RyaW5nLmxlbmd0aDtpZihoYXNVbmljb2RlKHN0cmluZykpe3ZhciBzdHJTeW1ib2xzPXN0cmluZ1RvQXJyYXkoc3RyaW5nKTtzdHJMZW5ndGg9c3RyU3ltYm9scy5sZW5ndGh9aWYobGVuZ3RoPj1zdHJMZW5ndGgpcmV0dXJuIHN0cmluZzt2YXIgZW5kPWxlbmd0aC1zdHJpbmdTaXplKG9taXNzaW9uKTtpZihlbmQ8MSlyZXR1cm4gb21pc3Npb247dmFyIHJlc3VsdD1zdHJTeW1ib2xzP2Nhc3RTbGljZShzdHJTeW1ib2xzLDAsZW5kKS5qb2luKCIiKTpzdHJpbmcuc2xpY2UoMCxlbmQpO2lmKHNlcGFyYXRvcj09PXVuZGVmaW5lZClyZXR1cm4gcmVzdWx0KwpvbWlzc2lvbjtpZihzdHJTeW1ib2xzKWVuZCs9cmVzdWx0Lmxlbmd0aC1lbmQ7aWYoaXNSZWdFeHAoc2VwYXJhdG9yKSl7aWYoc3RyaW5nLnNsaWNlKGVuZCkuc2VhcmNoKHNlcGFyYXRvcikpe3ZhciBtYXRjaCxzdWJzdHJpbmc9cmVzdWx0O2lmKCFzZXBhcmF0b3IuZ2xvYmFsKXNlcGFyYXRvcj1SZWdFeHAoc2VwYXJhdG9yLnNvdXJjZSx0b1N0cmluZyhyZUZsYWdzLmV4ZWMoc2VwYXJhdG9yKSkrImciKTtzZXBhcmF0b3IubGFzdEluZGV4PTA7d2hpbGUobWF0Y2g9c2VwYXJhdG9yLmV4ZWMoc3Vic3RyaW5nKSl2YXIgbmV3RW5kPW1hdGNoLmluZGV4O3Jlc3VsdD1yZXN1bHQuc2xpY2UoMCxuZXdFbmQ9PT11bmRlZmluZWQ/ZW5kOm5ld0VuZCl9fWVsc2UgaWYoc3RyaW5nLmluZGV4T2YoYmFzZVRvU3RyaW5nKHNlcGFyYXRvciksZW5kKSE9ZW5kKXt2YXIgaW5kZXg9cmVzdWx0Lmxhc3RJbmRleE9mKHNlcGFyYXRvcik7aWYoaW5kZXg+LTEpcmVzdWx0PXJlc3VsdC5zbGljZSgwLGluZGV4KX1yZXR1cm4gcmVzdWx0KwpvbWlzc2lvbn1mdW5jdGlvbiB1bmVzY2FwZShzdHJpbmcpe3N0cmluZz10b1N0cmluZyhzdHJpbmcpO3JldHVybiBzdHJpbmcmJnJlSGFzRXNjYXBlZEh0bWwudGVzdChzdHJpbmcpP3N0cmluZy5yZXBsYWNlKHJlRXNjYXBlZEh0bWwsdW5lc2NhcGVIdG1sQ2hhcik6c3RyaW5nfXZhciB1cHBlckNhc2U9Y3JlYXRlQ29tcG91bmRlcihmdW5jdGlvbihyZXN1bHQsd29yZCxpbmRleCl7cmV0dXJuIHJlc3VsdCsoaW5kZXg/IiAiOiIiKSt3b3JkLnRvVXBwZXJDYXNlKCl9KTt2YXIgdXBwZXJGaXJzdD1jcmVhdGVDYXNlRmlyc3QoInRvVXBwZXJDYXNlIik7ZnVuY3Rpb24gd29yZHMoc3RyaW5nLHBhdHRlcm4sZ3VhcmQpe3N0cmluZz10b1N0cmluZyhzdHJpbmcpO3BhdHRlcm49Z3VhcmQ/dW5kZWZpbmVkOnBhdHRlcm47aWYocGF0dGVybj09PXVuZGVmaW5lZClyZXR1cm4gaGFzVW5pY29kZVdvcmQoc3RyaW5nKT91bmljb2RlV29yZHMoc3RyaW5nKTphc2NpaVdvcmRzKHN0cmluZyk7cmV0dXJuIHN0cmluZy5tYXRjaChwYXR0ZXJuKXx8CltdfXZhciBhdHRlbXB0PWJhc2VSZXN0KGZ1bmN0aW9uKGZ1bmMsYXJncyl7dHJ5e3JldHVybiBhcHBseShmdW5jLHVuZGVmaW5lZCxhcmdzKX1jYXRjaChlKXtyZXR1cm4gaXNFcnJvcihlKT9lOm5ldyBFcnJvcihlKX19KTt2YXIgYmluZEFsbD1mbGF0UmVzdChmdW5jdGlvbihvYmplY3QsbWV0aG9kTmFtZXMpe2FycmF5RWFjaChtZXRob2ROYW1lcyxmdW5jdGlvbihrZXkpe2tleT10b0tleShrZXkpO2Jhc2VBc3NpZ25WYWx1ZShvYmplY3Qsa2V5LGJpbmQob2JqZWN0W2tleV0sb2JqZWN0KSl9KTtyZXR1cm4gb2JqZWN0fSk7ZnVuY3Rpb24gY29uZChwYWlycyl7dmFyIGxlbmd0aD1wYWlycz09bnVsbD8wOnBhaXJzLmxlbmd0aCx0b0l0ZXJhdGVlPWdldEl0ZXJhdGVlKCk7cGFpcnM9IWxlbmd0aD9bXTphcnJheU1hcChwYWlycyxmdW5jdGlvbihwYWlyKXtpZih0eXBlb2YgcGFpclsxXSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKEZVTkNfRVJST1JfVEVYVCk7cmV0dXJuW3RvSXRlcmF0ZWUocGFpclswXSksCnBhaXJbMV1dfSk7cmV0dXJuIGJhc2VSZXN0KGZ1bmN0aW9uKGFyZ3Mpe3ZhciBpbmRleD0tMTt3aGlsZSgrK2luZGV4PGxlbmd0aCl7dmFyIHBhaXI9cGFpcnNbaW5kZXhdO2lmKGFwcGx5KHBhaXJbMF0sdGhpcyxhcmdzKSlyZXR1cm4gYXBwbHkocGFpclsxXSx0aGlzLGFyZ3MpfX0pfWZ1bmN0aW9uIGNvbmZvcm1zKHNvdXJjZSl7cmV0dXJuIGJhc2VDb25mb3JtcyhiYXNlQ2xvbmUoc291cmNlLENMT05FX0RFRVBfRkxBRykpfWZ1bmN0aW9uIGNvbnN0YW50KHZhbHVlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdmFsdWV9fWZ1bmN0aW9uIGRlZmF1bHRUbyh2YWx1ZSxkZWZhdWx0VmFsdWUpe3JldHVybiB2YWx1ZT09bnVsbHx8dmFsdWUhPT12YWx1ZT9kZWZhdWx0VmFsdWU6dmFsdWV9dmFyIGZsb3c9Y3JlYXRlRmxvdygpO3ZhciBmbG93UmlnaHQ9Y3JlYXRlRmxvdyh0cnVlKTtmdW5jdGlvbiBpZGVudGl0eSh2YWx1ZSl7cmV0dXJuIHZhbHVlfWZ1bmN0aW9uIGl0ZXJhdGVlKGZ1bmMpe3JldHVybiBiYXNlSXRlcmF0ZWUodHlwZW9mIGZ1bmM9PQoiZnVuY3Rpb24iP2Z1bmM6YmFzZUNsb25lKGZ1bmMsQ0xPTkVfREVFUF9GTEFHKSl9ZnVuY3Rpb24gbWF0Y2hlcyhzb3VyY2Upe3JldHVybiBiYXNlTWF0Y2hlcyhiYXNlQ2xvbmUoc291cmNlLENMT05FX0RFRVBfRkxBRykpfWZ1bmN0aW9uIG1hdGNoZXNQcm9wZXJ0eShwYXRoLHNyY1ZhbHVlKXtyZXR1cm4gYmFzZU1hdGNoZXNQcm9wZXJ0eShwYXRoLGJhc2VDbG9uZShzcmNWYWx1ZSxDTE9ORV9ERUVQX0ZMQUcpKX12YXIgbWV0aG9kPWJhc2VSZXN0KGZ1bmN0aW9uKHBhdGgsYXJncyl7cmV0dXJuIGZ1bmN0aW9uKG9iamVjdCl7cmV0dXJuIGJhc2VJbnZva2Uob2JqZWN0LHBhdGgsYXJncyl9fSk7dmFyIG1ldGhvZE9mPWJhc2VSZXN0KGZ1bmN0aW9uKG9iamVjdCxhcmdzKXtyZXR1cm4gZnVuY3Rpb24ocGF0aCl7cmV0dXJuIGJhc2VJbnZva2Uob2JqZWN0LHBhdGgsYXJncyl9fSk7ZnVuY3Rpb24gbWl4aW4ob2JqZWN0LHNvdXJjZSxvcHRpb25zKXt2YXIgcHJvcHM9a2V5cyhzb3VyY2UpLAptZXRob2ROYW1lcz1iYXNlRnVuY3Rpb25zKHNvdXJjZSxwcm9wcyk7aWYob3B0aW9ucz09bnVsbCYmIShpc09iamVjdChzb3VyY2UpJiYobWV0aG9kTmFtZXMubGVuZ3RofHwhcHJvcHMubGVuZ3RoKSkpe29wdGlvbnM9c291cmNlO3NvdXJjZT1vYmplY3Q7b2JqZWN0PXRoaXM7bWV0aG9kTmFtZXM9YmFzZUZ1bmN0aW9ucyhzb3VyY2Usa2V5cyhzb3VyY2UpKX12YXIgY2hhaW49IShpc09iamVjdChvcHRpb25zKSYmImNoYWluImluIG9wdGlvbnMpfHwhIW9wdGlvbnMuY2hhaW4saXNGdW5jPWlzRnVuY3Rpb24ob2JqZWN0KTthcnJheUVhY2gobWV0aG9kTmFtZXMsZnVuY3Rpb24obWV0aG9kTmFtZSl7dmFyIGZ1bmM9c291cmNlW21ldGhvZE5hbWVdO29iamVjdFttZXRob2ROYW1lXT1mdW5jO2lmKGlzRnVuYylvYmplY3QucHJvdG90eXBlW21ldGhvZE5hbWVdPWZ1bmN0aW9uKCl7dmFyIGNoYWluQWxsPXRoaXMuX19jaGFpbl9fO2lmKGNoYWlufHxjaGFpbkFsbCl7dmFyIHJlc3VsdD0Kb2JqZWN0KHRoaXMuX193cmFwcGVkX18pLGFjdGlvbnM9cmVzdWx0Ll9fYWN0aW9uc19fPWNvcHlBcnJheSh0aGlzLl9fYWN0aW9uc19fKTthY3Rpb25zLnB1c2goeyJmdW5jIjpmdW5jLCJhcmdzIjphcmd1bWVudHMsInRoaXNBcmciOm9iamVjdH0pO3Jlc3VsdC5fX2NoYWluX189Y2hhaW5BbGw7cmV0dXJuIHJlc3VsdH1yZXR1cm4gZnVuYy5hcHBseShvYmplY3QsYXJyYXlQdXNoKFt0aGlzLnZhbHVlKCldLGFyZ3VtZW50cykpfX0pO3JldHVybiBvYmplY3R9ZnVuY3Rpb24gbm9Db25mbGljdCgpe2lmKHJvb3QuXz09PXRoaXMpcm9vdC5fPW9sZERhc2g7cmV0dXJuIHRoaXN9ZnVuY3Rpb24gbm9vcCgpe31mdW5jdGlvbiBudGhBcmcobil7bj10b0ludGVnZXIobik7cmV0dXJuIGJhc2VSZXN0KGZ1bmN0aW9uKGFyZ3Mpe3JldHVybiBiYXNlTnRoKGFyZ3Msbil9KX12YXIgb3Zlcj1jcmVhdGVPdmVyKGFycmF5TWFwKTt2YXIgb3ZlckV2ZXJ5PWNyZWF0ZU92ZXIoYXJyYXlFdmVyeSk7CnZhciBvdmVyU29tZT1jcmVhdGVPdmVyKGFycmF5U29tZSk7ZnVuY3Rpb24gcHJvcGVydHkocGF0aCl7cmV0dXJuIGlzS2V5KHBhdGgpP2Jhc2VQcm9wZXJ0eSh0b0tleShwYXRoKSk6YmFzZVByb3BlcnR5RGVlcChwYXRoKX1mdW5jdGlvbiBwcm9wZXJ0eU9mKG9iamVjdCl7cmV0dXJuIGZ1bmN0aW9uKHBhdGgpe3JldHVybiBvYmplY3Q9PW51bGw/dW5kZWZpbmVkOmJhc2VHZXQob2JqZWN0LHBhdGgpfX12YXIgcmFuZ2U9Y3JlYXRlUmFuZ2UoKTt2YXIgcmFuZ2VSaWdodD1jcmVhdGVSYW5nZSh0cnVlKTtmdW5jdGlvbiBzdHViQXJyYXkoKXtyZXR1cm5bXX1mdW5jdGlvbiBzdHViRmFsc2UoKXtyZXR1cm4gZmFsc2V9ZnVuY3Rpb24gc3R1Yk9iamVjdCgpe3JldHVybnt9fWZ1bmN0aW9uIHN0dWJTdHJpbmcoKXtyZXR1cm4iIn1mdW5jdGlvbiBzdHViVHJ1ZSgpe3JldHVybiB0cnVlfWZ1bmN0aW9uIHRpbWVzKG4saXRlcmF0ZWUpe249dG9JbnRlZ2VyKG4pO2lmKG48MXx8bj5NQVhfU0FGRV9JTlRFR0VSKXJldHVybltdOwp2YXIgaW5kZXg9TUFYX0FSUkFZX0xFTkdUSCxsZW5ndGg9bmF0aXZlTWluKG4sTUFYX0FSUkFZX0xFTkdUSCk7aXRlcmF0ZWU9Z2V0SXRlcmF0ZWUoaXRlcmF0ZWUpO24tPU1BWF9BUlJBWV9MRU5HVEg7dmFyIHJlc3VsdD1iYXNlVGltZXMobGVuZ3RoLGl0ZXJhdGVlKTt3aGlsZSgrK2luZGV4PG4paXRlcmF0ZWUoaW5kZXgpO3JldHVybiByZXN1bHR9ZnVuY3Rpb24gdG9QYXRoKHZhbHVlKXtpZihpc0FycmF5KHZhbHVlKSlyZXR1cm4gYXJyYXlNYXAodmFsdWUsdG9LZXkpO3JldHVybiBpc1N5bWJvbCh2YWx1ZSk/W3ZhbHVlXTpjb3B5QXJyYXkoc3RyaW5nVG9QYXRoKHRvU3RyaW5nKHZhbHVlKSkpfWZ1bmN0aW9uIHVuaXF1ZUlkKHByZWZpeCl7dmFyIGlkPSsraWRDb3VudGVyO3JldHVybiB0b1N0cmluZyhwcmVmaXgpK2lkfXZhciBhZGQ9Y3JlYXRlTWF0aE9wZXJhdGlvbihmdW5jdGlvbihhdWdlbmQsYWRkZW5kKXtyZXR1cm4gYXVnZW5kK2FkZGVuZH0sMCk7dmFyIGNlaWw9Y3JlYXRlUm91bmQoImNlaWwiKTsKdmFyIGRpdmlkZT1jcmVhdGVNYXRoT3BlcmF0aW9uKGZ1bmN0aW9uKGRpdmlkZW5kLGRpdmlzb3Ipe3JldHVybiBkaXZpZGVuZC9kaXZpc29yfSwxKTt2YXIgZmxvb3I9Y3JlYXRlUm91bmQoImZsb29yIik7ZnVuY3Rpb24gbWF4KGFycmF5KXtyZXR1cm4gYXJyYXkmJmFycmF5Lmxlbmd0aD9iYXNlRXh0cmVtdW0oYXJyYXksaWRlbnRpdHksYmFzZUd0KTp1bmRlZmluZWR9ZnVuY3Rpb24gbWF4QnkoYXJyYXksaXRlcmF0ZWUpe3JldHVybiBhcnJheSYmYXJyYXkubGVuZ3RoP2Jhc2VFeHRyZW11bShhcnJheSxnZXRJdGVyYXRlZShpdGVyYXRlZSwyKSxiYXNlR3QpOnVuZGVmaW5lZH1mdW5jdGlvbiBtZWFuKGFycmF5KXtyZXR1cm4gYmFzZU1lYW4oYXJyYXksaWRlbnRpdHkpfWZ1bmN0aW9uIG1lYW5CeShhcnJheSxpdGVyYXRlZSl7cmV0dXJuIGJhc2VNZWFuKGFycmF5LGdldEl0ZXJhdGVlKGl0ZXJhdGVlLDIpKX1mdW5jdGlvbiBtaW4oYXJyYXkpe3JldHVybiBhcnJheSYmYXJyYXkubGVuZ3RoPwpiYXNlRXh0cmVtdW0oYXJyYXksaWRlbnRpdHksYmFzZUx0KTp1bmRlZmluZWR9ZnVuY3Rpb24gbWluQnkoYXJyYXksaXRlcmF0ZWUpe3JldHVybiBhcnJheSYmYXJyYXkubGVuZ3RoP2Jhc2VFeHRyZW11bShhcnJheSxnZXRJdGVyYXRlZShpdGVyYXRlZSwyKSxiYXNlTHQpOnVuZGVmaW5lZH12YXIgbXVsdGlwbHk9Y3JlYXRlTWF0aE9wZXJhdGlvbihmdW5jdGlvbihtdWx0aXBsaWVyLG11bHRpcGxpY2FuZCl7cmV0dXJuIG11bHRpcGxpZXIqbXVsdGlwbGljYW5kfSwxKTt2YXIgcm91bmQ9Y3JlYXRlUm91bmQoInJvdW5kIik7dmFyIHN1YnRyYWN0PWNyZWF0ZU1hdGhPcGVyYXRpb24oZnVuY3Rpb24obWludWVuZCxzdWJ0cmFoZW5kKXtyZXR1cm4gbWludWVuZC1zdWJ0cmFoZW5kfSwwKTtmdW5jdGlvbiBzdW0oYXJyYXkpe3JldHVybiBhcnJheSYmYXJyYXkubGVuZ3RoP2Jhc2VTdW0oYXJyYXksaWRlbnRpdHkpOjB9ZnVuY3Rpb24gc3VtQnkoYXJyYXksaXRlcmF0ZWUpe3JldHVybiBhcnJheSYmCmFycmF5Lmxlbmd0aD9iYXNlU3VtKGFycmF5LGdldEl0ZXJhdGVlKGl0ZXJhdGVlLDIpKTowfWxvZGFzaC5hZnRlcj1hZnRlcjtsb2Rhc2guYXJ5PWFyeTtsb2Rhc2guYXNzaWduPWFzc2lnbjtsb2Rhc2guYXNzaWduSW49YXNzaWduSW47bG9kYXNoLmFzc2lnbkluV2l0aD1hc3NpZ25JbldpdGg7bG9kYXNoLmFzc2lnbldpdGg9YXNzaWduV2l0aDtsb2Rhc2guYXQ9YXQ7bG9kYXNoLmJlZm9yZT1iZWZvcmU7bG9kYXNoLmJpbmQ9YmluZDtsb2Rhc2guYmluZEFsbD1iaW5kQWxsO2xvZGFzaC5iaW5kS2V5PWJpbmRLZXk7bG9kYXNoLmNhc3RBcnJheT1jYXN0QXJyYXk7bG9kYXNoLmNoYWluPWNoYWluO2xvZGFzaC5jaHVuaz1jaHVuaztsb2Rhc2guY29tcGFjdD1jb21wYWN0O2xvZGFzaC5jb25jYXQ9Y29uY2F0O2xvZGFzaC5jb25kPWNvbmQ7bG9kYXNoLmNvbmZvcm1zPWNvbmZvcm1zO2xvZGFzaC5jb25zdGFudD1jb25zdGFudDtsb2Rhc2guY291bnRCeT1jb3VudEJ5O2xvZGFzaC5jcmVhdGU9CmNyZWF0ZTtsb2Rhc2guY3Vycnk9Y3Vycnk7bG9kYXNoLmN1cnJ5UmlnaHQ9Y3VycnlSaWdodDtsb2Rhc2guZGVib3VuY2U9ZGVib3VuY2U7bG9kYXNoLmRlZmF1bHRzPWRlZmF1bHRzO2xvZGFzaC5kZWZhdWx0c0RlZXA9ZGVmYXVsdHNEZWVwO2xvZGFzaC5kZWZlcj1kZWZlcjtsb2Rhc2guZGVsYXk9ZGVsYXk7bG9kYXNoLmRpZmZlcmVuY2U9ZGlmZmVyZW5jZTtsb2Rhc2guZGlmZmVyZW5jZUJ5PWRpZmZlcmVuY2VCeTtsb2Rhc2guZGlmZmVyZW5jZVdpdGg9ZGlmZmVyZW5jZVdpdGg7bG9kYXNoLmRyb3A9ZHJvcDtsb2Rhc2guZHJvcFJpZ2h0PWRyb3BSaWdodDtsb2Rhc2guZHJvcFJpZ2h0V2hpbGU9ZHJvcFJpZ2h0V2hpbGU7bG9kYXNoLmRyb3BXaGlsZT1kcm9wV2hpbGU7bG9kYXNoLmZpbGw9ZmlsbDtsb2Rhc2guZmlsdGVyPWZpbHRlcjtsb2Rhc2guZmxhdE1hcD1mbGF0TWFwO2xvZGFzaC5mbGF0TWFwRGVlcD1mbGF0TWFwRGVlcDtsb2Rhc2guZmxhdE1hcERlcHRoPWZsYXRNYXBEZXB0aDsKbG9kYXNoLmZsYXR0ZW49ZmxhdHRlbjtsb2Rhc2guZmxhdHRlbkRlZXA9ZmxhdHRlbkRlZXA7bG9kYXNoLmZsYXR0ZW5EZXB0aD1mbGF0dGVuRGVwdGg7bG9kYXNoLmZsaXA9ZmxpcDtsb2Rhc2guZmxvdz1mbG93O2xvZGFzaC5mbG93UmlnaHQ9Zmxvd1JpZ2h0O2xvZGFzaC5mcm9tUGFpcnM9ZnJvbVBhaXJzO2xvZGFzaC5mdW5jdGlvbnM9ZnVuY3Rpb25zO2xvZGFzaC5mdW5jdGlvbnNJbj1mdW5jdGlvbnNJbjtsb2Rhc2guZ3JvdXBCeT1ncm91cEJ5O2xvZGFzaC5pbml0aWFsPWluaXRpYWw7bG9kYXNoLmludGVyc2VjdGlvbj1pbnRlcnNlY3Rpb247bG9kYXNoLmludGVyc2VjdGlvbkJ5PWludGVyc2VjdGlvbkJ5O2xvZGFzaC5pbnRlcnNlY3Rpb25XaXRoPWludGVyc2VjdGlvbldpdGg7bG9kYXNoLmludmVydD1pbnZlcnQ7bG9kYXNoLmludmVydEJ5PWludmVydEJ5O2xvZGFzaC5pbnZva2VNYXA9aW52b2tlTWFwO2xvZGFzaC5pdGVyYXRlZT1pdGVyYXRlZTtsb2Rhc2gua2V5Qnk9CmtleUJ5O2xvZGFzaC5rZXlzPWtleXM7bG9kYXNoLmtleXNJbj1rZXlzSW47bG9kYXNoLm1hcD1tYXA7bG9kYXNoLm1hcEtleXM9bWFwS2V5cztsb2Rhc2gubWFwVmFsdWVzPW1hcFZhbHVlcztsb2Rhc2gubWF0Y2hlcz1tYXRjaGVzO2xvZGFzaC5tYXRjaGVzUHJvcGVydHk9bWF0Y2hlc1Byb3BlcnR5O2xvZGFzaC5tZW1vaXplPW1lbW9pemU7bG9kYXNoLm1lcmdlPW1lcmdlO2xvZGFzaC5tZXJnZVdpdGg9bWVyZ2VXaXRoO2xvZGFzaC5tZXRob2Q9bWV0aG9kO2xvZGFzaC5tZXRob2RPZj1tZXRob2RPZjtsb2Rhc2gubWl4aW49bWl4aW47bG9kYXNoLm5lZ2F0ZT1uZWdhdGU7bG9kYXNoLm50aEFyZz1udGhBcmc7bG9kYXNoLm9taXQ9b21pdDtsb2Rhc2gub21pdEJ5PW9taXRCeTtsb2Rhc2gub25jZT1vbmNlO2xvZGFzaC5vcmRlckJ5PW9yZGVyQnk7bG9kYXNoLm92ZXI9b3Zlcjtsb2Rhc2gub3ZlckFyZ3M9b3ZlckFyZ3M7bG9kYXNoLm92ZXJFdmVyeT1vdmVyRXZlcnk7bG9kYXNoLm92ZXJTb21lPQpvdmVyU29tZTtsb2Rhc2gucGFydGlhbD1wYXJ0aWFsO2xvZGFzaC5wYXJ0aWFsUmlnaHQ9cGFydGlhbFJpZ2h0O2xvZGFzaC5wYXJ0aXRpb249cGFydGl0aW9uO2xvZGFzaC5waWNrPXBpY2s7bG9kYXNoLnBpY2tCeT1waWNrQnk7bG9kYXNoLnByb3BlcnR5PXByb3BlcnR5O2xvZGFzaC5wcm9wZXJ0eU9mPXByb3BlcnR5T2Y7bG9kYXNoLnB1bGw9cHVsbDtsb2Rhc2gucHVsbEFsbD1wdWxsQWxsO2xvZGFzaC5wdWxsQWxsQnk9cHVsbEFsbEJ5O2xvZGFzaC5wdWxsQWxsV2l0aD1wdWxsQWxsV2l0aDtsb2Rhc2gucHVsbEF0PXB1bGxBdDtsb2Rhc2gucmFuZ2U9cmFuZ2U7bG9kYXNoLnJhbmdlUmlnaHQ9cmFuZ2VSaWdodDtsb2Rhc2gucmVhcmc9cmVhcmc7bG9kYXNoLnJlamVjdD1yZWplY3Q7bG9kYXNoLnJlbW92ZT1yZW1vdmU7bG9kYXNoLnJlc3Q9cmVzdDtsb2Rhc2gucmV2ZXJzZT1yZXZlcnNlO2xvZGFzaC5zYW1wbGVTaXplPXNhbXBsZVNpemU7bG9kYXNoLnNldD1zZXQ7bG9kYXNoLnNldFdpdGg9CnNldFdpdGg7bG9kYXNoLnNodWZmbGU9c2h1ZmZsZTtsb2Rhc2guc2xpY2U9c2xpY2U7bG9kYXNoLnNvcnRCeT1zb3J0Qnk7bG9kYXNoLnNvcnRlZFVuaXE9c29ydGVkVW5pcTtsb2Rhc2guc29ydGVkVW5pcUJ5PXNvcnRlZFVuaXFCeTtsb2Rhc2guc3BsaXQ9c3BsaXQ7bG9kYXNoLnNwcmVhZD1zcHJlYWQ7bG9kYXNoLnRhaWw9dGFpbDtsb2Rhc2gudGFrZT10YWtlO2xvZGFzaC50YWtlUmlnaHQ9dGFrZVJpZ2h0O2xvZGFzaC50YWtlUmlnaHRXaGlsZT10YWtlUmlnaHRXaGlsZTtsb2Rhc2gudGFrZVdoaWxlPXRha2VXaGlsZTtsb2Rhc2gudGFwPXRhcDtsb2Rhc2gudGhyb3R0bGU9dGhyb3R0bGU7bG9kYXNoLnRocnU9dGhydTtsb2Rhc2gudG9BcnJheT10b0FycmF5O2xvZGFzaC50b1BhaXJzPXRvUGFpcnM7bG9kYXNoLnRvUGFpcnNJbj10b1BhaXJzSW47bG9kYXNoLnRvUGF0aD10b1BhdGg7bG9kYXNoLnRvUGxhaW5PYmplY3Q9dG9QbGFpbk9iamVjdDtsb2Rhc2gudHJhbnNmb3JtPQp0cmFuc2Zvcm07bG9kYXNoLnVuYXJ5PXVuYXJ5O2xvZGFzaC51bmlvbj11bmlvbjtsb2Rhc2gudW5pb25CeT11bmlvbkJ5O2xvZGFzaC51bmlvbldpdGg9dW5pb25XaXRoO2xvZGFzaC51bmlxPXVuaXE7bG9kYXNoLnVuaXFCeT11bmlxQnk7bG9kYXNoLnVuaXFXaXRoPXVuaXFXaXRoO2xvZGFzaC51bnNldD11bnNldDtsb2Rhc2gudW56aXA9dW56aXA7bG9kYXNoLnVuemlwV2l0aD11bnppcFdpdGg7bG9kYXNoLnVwZGF0ZT11cGRhdGU7bG9kYXNoLnVwZGF0ZVdpdGg9dXBkYXRlV2l0aDtsb2Rhc2gudmFsdWVzPXZhbHVlcztsb2Rhc2gudmFsdWVzSW49dmFsdWVzSW47bG9kYXNoLndpdGhvdXQ9d2l0aG91dDtsb2Rhc2gud29yZHM9d29yZHM7bG9kYXNoLndyYXA9d3JhcDtsb2Rhc2gueG9yPXhvcjtsb2Rhc2gueG9yQnk9eG9yQnk7bG9kYXNoLnhvcldpdGg9eG9yV2l0aDtsb2Rhc2guemlwPXppcDtsb2Rhc2guemlwT2JqZWN0PXppcE9iamVjdDtsb2Rhc2guemlwT2JqZWN0RGVlcD0KemlwT2JqZWN0RGVlcDtsb2Rhc2guemlwV2l0aD16aXBXaXRoO2xvZGFzaC5lbnRyaWVzPXRvUGFpcnM7bG9kYXNoLmVudHJpZXNJbj10b1BhaXJzSW47bG9kYXNoLmV4dGVuZD1hc3NpZ25Jbjtsb2Rhc2guZXh0ZW5kV2l0aD1hc3NpZ25JbldpdGg7bWl4aW4obG9kYXNoLGxvZGFzaCk7bG9kYXNoLmFkZD1hZGQ7bG9kYXNoLmF0dGVtcHQ9YXR0ZW1wdDtsb2Rhc2guY2FtZWxDYXNlPWNhbWVsQ2FzZTtsb2Rhc2guY2FwaXRhbGl6ZT1jYXBpdGFsaXplO2xvZGFzaC5jZWlsPWNlaWw7bG9kYXNoLmNsYW1wPWNsYW1wO2xvZGFzaC5jbG9uZT1jbG9uZTtsb2Rhc2guY2xvbmVEZWVwPWNsb25lRGVlcDtsb2Rhc2guY2xvbmVEZWVwV2l0aD1jbG9uZURlZXBXaXRoO2xvZGFzaC5jbG9uZVdpdGg9Y2xvbmVXaXRoO2xvZGFzaC5jb25mb3Jtc1RvPWNvbmZvcm1zVG87bG9kYXNoLmRlYnVycj1kZWJ1cnI7bG9kYXNoLmRlZmF1bHRUbz1kZWZhdWx0VG87bG9kYXNoLmRpdmlkZT1kaXZpZGU7bG9kYXNoLmVuZHNXaXRoPQplbmRzV2l0aDtsb2Rhc2guZXE9ZXE7bG9kYXNoLmVzY2FwZT1lc2NhcGU7bG9kYXNoLmVzY2FwZVJlZ0V4cD1lc2NhcGVSZWdFeHA7bG9kYXNoLmV2ZXJ5PWV2ZXJ5O2xvZGFzaC5maW5kPWZpbmQ7bG9kYXNoLmZpbmRJbmRleD1maW5kSW5kZXg7bG9kYXNoLmZpbmRLZXk9ZmluZEtleTtsb2Rhc2guZmluZExhc3Q9ZmluZExhc3Q7bG9kYXNoLmZpbmRMYXN0SW5kZXg9ZmluZExhc3RJbmRleDtsb2Rhc2guZmluZExhc3RLZXk9ZmluZExhc3RLZXk7bG9kYXNoLmZsb29yPWZsb29yO2xvZGFzaC5mb3JFYWNoPWZvckVhY2g7bG9kYXNoLmZvckVhY2hSaWdodD1mb3JFYWNoUmlnaHQ7bG9kYXNoLmZvckluPWZvckluO2xvZGFzaC5mb3JJblJpZ2h0PWZvckluUmlnaHQ7bG9kYXNoLmZvck93bj1mb3JPd247bG9kYXNoLmZvck93blJpZ2h0PWZvck93blJpZ2h0O2xvZGFzaC5nZXQ9Z2V0O2xvZGFzaC5ndD1ndDtsb2Rhc2guZ3RlPWd0ZTtsb2Rhc2guaGFzPWhhcztsb2Rhc2guaGFzSW49aGFzSW47CmxvZGFzaC5oZWFkPWhlYWQ7bG9kYXNoLmlkZW50aXR5PWlkZW50aXR5O2xvZGFzaC5pbmNsdWRlcz1pbmNsdWRlcztsb2Rhc2guaW5kZXhPZj1pbmRleE9mO2xvZGFzaC5pblJhbmdlPWluUmFuZ2U7bG9kYXNoLmludm9rZT1pbnZva2U7bG9kYXNoLmlzQXJndW1lbnRzPWlzQXJndW1lbnRzO2xvZGFzaC5pc0FycmF5PWlzQXJyYXk7bG9kYXNoLmlzQXJyYXlCdWZmZXI9aXNBcnJheUJ1ZmZlcjtsb2Rhc2guaXNBcnJheUxpa2U9aXNBcnJheUxpa2U7bG9kYXNoLmlzQXJyYXlMaWtlT2JqZWN0PWlzQXJyYXlMaWtlT2JqZWN0O2xvZGFzaC5pc0Jvb2xlYW49aXNCb29sZWFuO2xvZGFzaC5pc0J1ZmZlcj1pc0J1ZmZlcjtsb2Rhc2guaXNEYXRlPWlzRGF0ZTtsb2Rhc2guaXNFbGVtZW50PWlzRWxlbWVudDtsb2Rhc2guaXNFbXB0eT1pc0VtcHR5O2xvZGFzaC5pc0VxdWFsPWlzRXF1YWw7bG9kYXNoLmlzRXF1YWxXaXRoPWlzRXF1YWxXaXRoO2xvZGFzaC5pc0Vycm9yPWlzRXJyb3I7bG9kYXNoLmlzRmluaXRlPQppc0Zpbml0ZTtsb2Rhc2guaXNGdW5jdGlvbj1pc0Z1bmN0aW9uO2xvZGFzaC5pc0ludGVnZXI9aXNJbnRlZ2VyO2xvZGFzaC5pc0xlbmd0aD1pc0xlbmd0aDtsb2Rhc2guaXNNYXA9aXNNYXA7bG9kYXNoLmlzTWF0Y2g9aXNNYXRjaDtsb2Rhc2guaXNNYXRjaFdpdGg9aXNNYXRjaFdpdGg7bG9kYXNoLmlzTmFOPWlzTmFOO2xvZGFzaC5pc05hdGl2ZT1pc05hdGl2ZTtsb2Rhc2guaXNOaWw9aXNOaWw7bG9kYXNoLmlzTnVsbD1pc051bGw7bG9kYXNoLmlzTnVtYmVyPWlzTnVtYmVyO2xvZGFzaC5pc09iamVjdD1pc09iamVjdDtsb2Rhc2guaXNPYmplY3RMaWtlPWlzT2JqZWN0TGlrZTtsb2Rhc2guaXNQbGFpbk9iamVjdD1pc1BsYWluT2JqZWN0O2xvZGFzaC5pc1JlZ0V4cD1pc1JlZ0V4cDtsb2Rhc2guaXNTYWZlSW50ZWdlcj1pc1NhZmVJbnRlZ2VyO2xvZGFzaC5pc1NldD1pc1NldDtsb2Rhc2guaXNTdHJpbmc9aXNTdHJpbmc7bG9kYXNoLmlzU3ltYm9sPWlzU3ltYm9sO2xvZGFzaC5pc1R5cGVkQXJyYXk9CmlzVHlwZWRBcnJheTtsb2Rhc2guaXNVbmRlZmluZWQ9aXNVbmRlZmluZWQ7bG9kYXNoLmlzV2Vha01hcD1pc1dlYWtNYXA7bG9kYXNoLmlzV2Vha1NldD1pc1dlYWtTZXQ7bG9kYXNoLmpvaW49am9pbjtsb2Rhc2gua2ViYWJDYXNlPWtlYmFiQ2FzZTtsb2Rhc2gubGFzdD1sYXN0O2xvZGFzaC5sYXN0SW5kZXhPZj1sYXN0SW5kZXhPZjtsb2Rhc2gubG93ZXJDYXNlPWxvd2VyQ2FzZTtsb2Rhc2gubG93ZXJGaXJzdD1sb3dlckZpcnN0O2xvZGFzaC5sdD1sdDtsb2Rhc2gubHRlPWx0ZTtsb2Rhc2gubWF4PW1heDtsb2Rhc2gubWF4Qnk9bWF4Qnk7bG9kYXNoLm1lYW49bWVhbjtsb2Rhc2gubWVhbkJ5PW1lYW5CeTtsb2Rhc2gubWluPW1pbjtsb2Rhc2gubWluQnk9bWluQnk7bG9kYXNoLnN0dWJBcnJheT1zdHViQXJyYXk7bG9kYXNoLnN0dWJGYWxzZT1zdHViRmFsc2U7bG9kYXNoLnN0dWJPYmplY3Q9c3R1Yk9iamVjdDtsb2Rhc2guc3R1YlN0cmluZz1zdHViU3RyaW5nO2xvZGFzaC5zdHViVHJ1ZT0Kc3R1YlRydWU7bG9kYXNoLm11bHRpcGx5PW11bHRpcGx5O2xvZGFzaC5udGg9bnRoO2xvZGFzaC5ub0NvbmZsaWN0PW5vQ29uZmxpY3Q7bG9kYXNoLm5vb3A9bm9vcDtsb2Rhc2gubm93PW5vdztsb2Rhc2gucGFkPXBhZDtsb2Rhc2gucGFkRW5kPXBhZEVuZDtsb2Rhc2gucGFkU3RhcnQ9cGFkU3RhcnQ7bG9kYXNoLnBhcnNlSW50PXBhcnNlSW50O2xvZGFzaC5yYW5kb209cmFuZG9tO2xvZGFzaC5yZWR1Y2U9cmVkdWNlO2xvZGFzaC5yZWR1Y2VSaWdodD1yZWR1Y2VSaWdodDtsb2Rhc2gucmVwZWF0PXJlcGVhdDtsb2Rhc2gucmVwbGFjZT1yZXBsYWNlO2xvZGFzaC5yZXN1bHQ9cmVzdWx0O2xvZGFzaC5yb3VuZD1yb3VuZDtsb2Rhc2gucnVuSW5Db250ZXh0PXJ1bkluQ29udGV4dDtsb2Rhc2guc2FtcGxlPXNhbXBsZTtsb2Rhc2guc2l6ZT1zaXplO2xvZGFzaC5zbmFrZUNhc2U9c25ha2VDYXNlO2xvZGFzaC5zb21lPXNvbWU7bG9kYXNoLnNvcnRlZEluZGV4PXNvcnRlZEluZGV4O2xvZGFzaC5zb3J0ZWRJbmRleEJ5PQpzb3J0ZWRJbmRleEJ5O2xvZGFzaC5zb3J0ZWRJbmRleE9mPXNvcnRlZEluZGV4T2Y7bG9kYXNoLnNvcnRlZExhc3RJbmRleD1zb3J0ZWRMYXN0SW5kZXg7bG9kYXNoLnNvcnRlZExhc3RJbmRleEJ5PXNvcnRlZExhc3RJbmRleEJ5O2xvZGFzaC5zb3J0ZWRMYXN0SW5kZXhPZj1zb3J0ZWRMYXN0SW5kZXhPZjtsb2Rhc2guc3RhcnRDYXNlPXN0YXJ0Q2FzZTtsb2Rhc2guc3RhcnRzV2l0aD1zdGFydHNXaXRoO2xvZGFzaC5zdWJ0cmFjdD1zdWJ0cmFjdDtsb2Rhc2guc3VtPXN1bTtsb2Rhc2guc3VtQnk9c3VtQnk7bG9kYXNoLnRlbXBsYXRlPXRlbXBsYXRlO2xvZGFzaC50aW1lcz10aW1lcztsb2Rhc2gudG9GaW5pdGU9dG9GaW5pdGU7bG9kYXNoLnRvSW50ZWdlcj10b0ludGVnZXI7bG9kYXNoLnRvTGVuZ3RoPXRvTGVuZ3RoO2xvZGFzaC50b0xvd2VyPXRvTG93ZXI7bG9kYXNoLnRvTnVtYmVyPXRvTnVtYmVyO2xvZGFzaC50b1NhZmVJbnRlZ2VyPXRvU2FmZUludGVnZXI7bG9kYXNoLnRvU3RyaW5nPQp0b1N0cmluZztsb2Rhc2gudG9VcHBlcj10b1VwcGVyO2xvZGFzaC50cmltPXRyaW07bG9kYXNoLnRyaW1FbmQ9dHJpbUVuZDtsb2Rhc2gudHJpbVN0YXJ0PXRyaW1TdGFydDtsb2Rhc2gudHJ1bmNhdGU9dHJ1bmNhdGU7bG9kYXNoLnVuZXNjYXBlPXVuZXNjYXBlO2xvZGFzaC51bmlxdWVJZD11bmlxdWVJZDtsb2Rhc2gudXBwZXJDYXNlPXVwcGVyQ2FzZTtsb2Rhc2gudXBwZXJGaXJzdD11cHBlckZpcnN0O2xvZGFzaC5lYWNoPWZvckVhY2g7bG9kYXNoLmVhY2hSaWdodD1mb3JFYWNoUmlnaHQ7bG9kYXNoLmZpcnN0PWhlYWQ7bWl4aW4obG9kYXNoLGZ1bmN0aW9uKCl7dmFyIHNvdXJjZT17fTtiYXNlRm9yT3duKGxvZGFzaCxmdW5jdGlvbihmdW5jLG1ldGhvZE5hbWUpe2lmKCFoYXNPd25Qcm9wZXJ0eS5jYWxsKGxvZGFzaC5wcm90b3R5cGUsbWV0aG9kTmFtZSkpc291cmNlW21ldGhvZE5hbWVdPWZ1bmN9KTtyZXR1cm4gc291cmNlfSgpLHsiY2hhaW4iOmZhbHNlfSk7bG9kYXNoLlZFUlNJT049ClZFUlNJT047YXJyYXlFYWNoKFsiYmluZCIsImJpbmRLZXkiLCJjdXJyeSIsImN1cnJ5UmlnaHQiLCJwYXJ0aWFsIiwicGFydGlhbFJpZ2h0Il0sZnVuY3Rpb24obWV0aG9kTmFtZSl7bG9kYXNoW21ldGhvZE5hbWVdLnBsYWNlaG9sZGVyPWxvZGFzaH0pO2FycmF5RWFjaChbImRyb3AiLCJ0YWtlIl0sZnVuY3Rpb24obWV0aG9kTmFtZSxpbmRleCl7TGF6eVdyYXBwZXIucHJvdG90eXBlW21ldGhvZE5hbWVdPWZ1bmN0aW9uKG4pe249bj09PXVuZGVmaW5lZD8xOm5hdGl2ZU1heCh0b0ludGVnZXIobiksMCk7dmFyIHJlc3VsdD10aGlzLl9fZmlsdGVyZWRfXyYmIWluZGV4P25ldyBMYXp5V3JhcHBlcih0aGlzKTp0aGlzLmNsb25lKCk7aWYocmVzdWx0Ll9fZmlsdGVyZWRfXylyZXN1bHQuX190YWtlQ291bnRfXz1uYXRpdmVNaW4obixyZXN1bHQuX190YWtlQ291bnRfXyk7ZWxzZSByZXN1bHQuX192aWV3c19fLnB1c2goeyJzaXplIjpuYXRpdmVNaW4obixNQVhfQVJSQVlfTEVOR1RIKSwKInR5cGUiOm1ldGhvZE5hbWUrKHJlc3VsdC5fX2Rpcl9fPDA/IlJpZ2h0IjoiIil9KTtyZXR1cm4gcmVzdWx0fTtMYXp5V3JhcHBlci5wcm90b3R5cGVbbWV0aG9kTmFtZSsiUmlnaHQiXT1mdW5jdGlvbihuKXtyZXR1cm4gdGhpcy5yZXZlcnNlKClbbWV0aG9kTmFtZV0obikucmV2ZXJzZSgpfX0pO2FycmF5RWFjaChbImZpbHRlciIsIm1hcCIsInRha2VXaGlsZSJdLGZ1bmN0aW9uKG1ldGhvZE5hbWUsaW5kZXgpe3ZhciB0eXBlPWluZGV4KzEsaXNGaWx0ZXI9dHlwZT09TEFaWV9GSUxURVJfRkxBR3x8dHlwZT09TEFaWV9XSElMRV9GTEFHO0xhenlXcmFwcGVyLnByb3RvdHlwZVttZXRob2ROYW1lXT1mdW5jdGlvbihpdGVyYXRlZSl7dmFyIHJlc3VsdD10aGlzLmNsb25lKCk7cmVzdWx0Ll9faXRlcmF0ZWVzX18ucHVzaCh7Iml0ZXJhdGVlIjpnZXRJdGVyYXRlZShpdGVyYXRlZSwzKSwidHlwZSI6dHlwZX0pO3Jlc3VsdC5fX2ZpbHRlcmVkX189cmVzdWx0Ll9fZmlsdGVyZWRfX3x8CmlzRmlsdGVyO3JldHVybiByZXN1bHR9fSk7YXJyYXlFYWNoKFsiaGVhZCIsImxhc3QiXSxmdW5jdGlvbihtZXRob2ROYW1lLGluZGV4KXt2YXIgdGFrZU5hbWU9InRha2UiKyhpbmRleD8iUmlnaHQiOiIiKTtMYXp5V3JhcHBlci5wcm90b3R5cGVbbWV0aG9kTmFtZV09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1t0YWtlTmFtZV0oMSkudmFsdWUoKVswXX19KTthcnJheUVhY2goWyJpbml0aWFsIiwidGFpbCJdLGZ1bmN0aW9uKG1ldGhvZE5hbWUsaW5kZXgpe3ZhciBkcm9wTmFtZT0iZHJvcCIrKGluZGV4PyIiOiJSaWdodCIpO0xhenlXcmFwcGVyLnByb3RvdHlwZVttZXRob2ROYW1lXT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZmlsdGVyZWRfXz9uZXcgTGF6eVdyYXBwZXIodGhpcyk6dGhpc1tkcm9wTmFtZV0oMSl9fSk7TGF6eVdyYXBwZXIucHJvdG90eXBlLmNvbXBhY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5maWx0ZXIoaWRlbnRpdHkpfTtMYXp5V3JhcHBlci5wcm90b3R5cGUuZmluZD0KZnVuY3Rpb24ocHJlZGljYXRlKXtyZXR1cm4gdGhpcy5maWx0ZXIocHJlZGljYXRlKS5oZWFkKCl9O0xhenlXcmFwcGVyLnByb3RvdHlwZS5maW5kTGFzdD1mdW5jdGlvbihwcmVkaWNhdGUpe3JldHVybiB0aGlzLnJldmVyc2UoKS5maW5kKHByZWRpY2F0ZSl9O0xhenlXcmFwcGVyLnByb3RvdHlwZS5pbnZva2VNYXA9YmFzZVJlc3QoZnVuY3Rpb24ocGF0aCxhcmdzKXtpZih0eXBlb2YgcGF0aD09ImZ1bmN0aW9uIilyZXR1cm4gbmV3IExhenlXcmFwcGVyKHRoaXMpO3JldHVybiB0aGlzLm1hcChmdW5jdGlvbih2YWx1ZSl7cmV0dXJuIGJhc2VJbnZva2UodmFsdWUscGF0aCxhcmdzKX0pfSk7TGF6eVdyYXBwZXIucHJvdG90eXBlLnJlamVjdD1mdW5jdGlvbihwcmVkaWNhdGUpe3JldHVybiB0aGlzLmZpbHRlcihuZWdhdGUoZ2V0SXRlcmF0ZWUocHJlZGljYXRlKSkpfTtMYXp5V3JhcHBlci5wcm90b3R5cGUuc2xpY2U9ZnVuY3Rpb24oc3RhcnQsZW5kKXtzdGFydD10b0ludGVnZXIoc3RhcnQpOwp2YXIgcmVzdWx0PXRoaXM7aWYocmVzdWx0Ll9fZmlsdGVyZWRfXyYmKHN0YXJ0PjB8fGVuZDwwKSlyZXR1cm4gbmV3IExhenlXcmFwcGVyKHJlc3VsdCk7aWYoc3RhcnQ8MClyZXN1bHQ9cmVzdWx0LnRha2VSaWdodCgtc3RhcnQpO2Vsc2UgaWYoc3RhcnQpcmVzdWx0PXJlc3VsdC5kcm9wKHN0YXJ0KTtpZihlbmQhPT11bmRlZmluZWQpe2VuZD10b0ludGVnZXIoZW5kKTtyZXN1bHQ9ZW5kPDA/cmVzdWx0LmRyb3BSaWdodCgtZW5kKTpyZXN1bHQudGFrZShlbmQtc3RhcnQpfXJldHVybiByZXN1bHR9O0xhenlXcmFwcGVyLnByb3RvdHlwZS50YWtlUmlnaHRXaGlsZT1mdW5jdGlvbihwcmVkaWNhdGUpe3JldHVybiB0aGlzLnJldmVyc2UoKS50YWtlV2hpbGUocHJlZGljYXRlKS5yZXZlcnNlKCl9O0xhenlXcmFwcGVyLnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGFrZShNQVhfQVJSQVlfTEVOR1RIKX07YmFzZUZvck93bihMYXp5V3JhcHBlci5wcm90b3R5cGUsCmZ1bmN0aW9uKGZ1bmMsbWV0aG9kTmFtZSl7dmFyIGNoZWNrSXRlcmF0ZWU9L14oPzpmaWx0ZXJ8ZmluZHxtYXB8cmVqZWN0KXxXaGlsZSQvLnRlc3QobWV0aG9kTmFtZSksaXNUYWtlcj0vXig/OmhlYWR8bGFzdCkkLy50ZXN0KG1ldGhvZE5hbWUpLGxvZGFzaEZ1bmM9bG9kYXNoW2lzVGFrZXI/InRha2UiKyhtZXRob2ROYW1lPT0ibGFzdCI/IlJpZ2h0IjoiIik6bWV0aG9kTmFtZV0scmV0VW53cmFwcGVkPWlzVGFrZXJ8fC9eZmluZC8udGVzdChtZXRob2ROYW1lKTtpZighbG9kYXNoRnVuYylyZXR1cm47bG9kYXNoLnByb3RvdHlwZVttZXRob2ROYW1lXT1mdW5jdGlvbigpe3ZhciB2YWx1ZT10aGlzLl9fd3JhcHBlZF9fLGFyZ3M9aXNUYWtlcj9bMV06YXJndW1lbnRzLGlzTGF6eT12YWx1ZSBpbnN0YW5jZW9mIExhenlXcmFwcGVyLGl0ZXJhdGVlPWFyZ3NbMF0sdXNlTGF6eT1pc0xhenl8fGlzQXJyYXkodmFsdWUpO3ZhciBpbnRlcmNlcHRvcj1mdW5jdGlvbih2YWx1ZSl7dmFyIHJlc3VsdD0KbG9kYXNoRnVuYy5hcHBseShsb2Rhc2gsYXJyYXlQdXNoKFt2YWx1ZV0sYXJncykpO3JldHVybiBpc1Rha2VyJiZjaGFpbkFsbD9yZXN1bHRbMF06cmVzdWx0fTtpZih1c2VMYXp5JiZjaGVja0l0ZXJhdGVlJiZ0eXBlb2YgaXRlcmF0ZWU9PSJmdW5jdGlvbiImJml0ZXJhdGVlLmxlbmd0aCE9MSlpc0xhenk9dXNlTGF6eT1mYWxzZTt2YXIgY2hhaW5BbGw9dGhpcy5fX2NoYWluX18saXNIeWJyaWQ9ISF0aGlzLl9fYWN0aW9uc19fLmxlbmd0aCxpc1Vud3JhcHBlZD1yZXRVbndyYXBwZWQmJiFjaGFpbkFsbCxvbmx5TGF6eT1pc0xhenkmJiFpc0h5YnJpZDtpZighcmV0VW53cmFwcGVkJiZ1c2VMYXp5KXt2YWx1ZT1vbmx5TGF6eT92YWx1ZTpuZXcgTGF6eVdyYXBwZXIodGhpcyk7dmFyIHJlc3VsdD1mdW5jLmFwcGx5KHZhbHVlLGFyZ3MpO3Jlc3VsdC5fX2FjdGlvbnNfXy5wdXNoKHsiZnVuYyI6dGhydSwiYXJncyI6W2ludGVyY2VwdG9yXSwidGhpc0FyZyI6dW5kZWZpbmVkfSk7cmV0dXJuIG5ldyBMb2Rhc2hXcmFwcGVyKHJlc3VsdCwKY2hhaW5BbGwpfWlmKGlzVW53cmFwcGVkJiZvbmx5TGF6eSlyZXR1cm4gZnVuYy5hcHBseSh0aGlzLGFyZ3MpO3Jlc3VsdD10aGlzLnRocnUoaW50ZXJjZXB0b3IpO3JldHVybiBpc1Vud3JhcHBlZD9pc1Rha2VyP3Jlc3VsdC52YWx1ZSgpWzBdOnJlc3VsdC52YWx1ZSgpOnJlc3VsdH19KTthcnJheUVhY2goWyJwb3AiLCJwdXNoIiwic2hpZnQiLCJzb3J0Iiwic3BsaWNlIiwidW5zaGlmdCJdLGZ1bmN0aW9uKG1ldGhvZE5hbWUpe3ZhciBmdW5jPWFycmF5UHJvdG9bbWV0aG9kTmFtZV0sY2hhaW5OYW1lPS9eKD86cHVzaHxzb3J0fHVuc2hpZnQpJC8udGVzdChtZXRob2ROYW1lKT8idGFwIjoidGhydSIscmV0VW53cmFwcGVkPS9eKD86cG9wfHNoaWZ0KSQvLnRlc3QobWV0aG9kTmFtZSk7bG9kYXNoLnByb3RvdHlwZVttZXRob2ROYW1lXT1mdW5jdGlvbigpe3ZhciBhcmdzPWFyZ3VtZW50cztpZihyZXRVbndyYXBwZWQmJiF0aGlzLl9fY2hhaW5fXyl7dmFyIHZhbHVlPXRoaXMudmFsdWUoKTsKcmV0dXJuIGZ1bmMuYXBwbHkoaXNBcnJheSh2YWx1ZSk/dmFsdWU6W10sYXJncyl9cmV0dXJuIHRoaXNbY2hhaW5OYW1lXShmdW5jdGlvbih2YWx1ZSl7cmV0dXJuIGZ1bmMuYXBwbHkoaXNBcnJheSh2YWx1ZSk/dmFsdWU6W10sYXJncyl9KX19KTtiYXNlRm9yT3duKExhenlXcmFwcGVyLnByb3RvdHlwZSxmdW5jdGlvbihmdW5jLG1ldGhvZE5hbWUpe3ZhciBsb2Rhc2hGdW5jPWxvZGFzaFttZXRob2ROYW1lXTtpZihsb2Rhc2hGdW5jKXt2YXIga2V5PWxvZGFzaEZ1bmMubmFtZSsiIixuYW1lcz1yZWFsTmFtZXNba2V5XXx8KHJlYWxOYW1lc1trZXldPVtdKTtuYW1lcy5wdXNoKHsibmFtZSI6bWV0aG9kTmFtZSwiZnVuYyI6bG9kYXNoRnVuY30pfX0pO3JlYWxOYW1lc1tjcmVhdGVIeWJyaWQodW5kZWZpbmVkLFdSQVBfQklORF9LRVlfRkxBRykubmFtZV09W3sibmFtZSI6IndyYXBwZXIiLCJmdW5jIjp1bmRlZmluZWR9XTtMYXp5V3JhcHBlci5wcm90b3R5cGUuY2xvbmU9bGF6eUNsb25lOwpMYXp5V3JhcHBlci5wcm90b3R5cGUucmV2ZXJzZT1sYXp5UmV2ZXJzZTtMYXp5V3JhcHBlci5wcm90b3R5cGUudmFsdWU9bGF6eVZhbHVlO2xvZGFzaC5wcm90b3R5cGUuYXQ9d3JhcHBlckF0O2xvZGFzaC5wcm90b3R5cGUuY2hhaW49d3JhcHBlckNoYWluO2xvZGFzaC5wcm90b3R5cGUuY29tbWl0PXdyYXBwZXJDb21taXQ7bG9kYXNoLnByb3RvdHlwZS5uZXh0PXdyYXBwZXJOZXh0O2xvZGFzaC5wcm90b3R5cGUucGxhbnQ9d3JhcHBlclBsYW50O2xvZGFzaC5wcm90b3R5cGUucmV2ZXJzZT13cmFwcGVyUmV2ZXJzZTtsb2Rhc2gucHJvdG90eXBlLnRvSlNPTj1sb2Rhc2gucHJvdG90eXBlLnZhbHVlT2Y9bG9kYXNoLnByb3RvdHlwZS52YWx1ZT13cmFwcGVyVmFsdWU7bG9kYXNoLnByb3RvdHlwZS5maXJzdD1sb2Rhc2gucHJvdG90eXBlLmhlYWQ7aWYoc3ltSXRlcmF0b3IpbG9kYXNoLnByb3RvdHlwZVtzeW1JdGVyYXRvcl09d3JhcHBlclRvSXRlcmF0b3I7cmV0dXJuIGxvZGFzaH07CnZhciBfPXJ1bkluQ29udGV4dCgpO2lmKHR5cGVvZiBkZWZpbmU9PSJmdW5jdGlvbiImJnR5cGVvZiBkZWZpbmUuYW1kPT0ib2JqZWN0IiYmZGVmaW5lLmFtZCl7cm9vdC5fPV87ZGVmaW5lKGZ1bmN0aW9uKCl7cmV0dXJuIF99KX1lbHNlIGlmKGZyZWVNb2R1bGUpeyhmcmVlTW9kdWxlLmV4cG9ydHM9XykuXz1fO2ZyZWVFeHBvcnRzLl89X31lbHNlIHJvb3QuXz1ffSkuY2FsbCh0aGlzKTs8L3NjcmlwdD48c2NyaXB0Pi8vIGh0dHBzOi8vZDNqcy5vcmcgdjUuNy4wIENvcHlyaWdodCAyMDE4IE1pa2UgQm9zdG9jawohZnVuY3Rpb24odCxuKXsib2JqZWN0Ij09dHlwZW9mIGV4cG9ydHMmJiJ1bmRlZmluZWQiIT10eXBlb2YgbW9kdWxlP24oZXhwb3J0cyk6ImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoWyJleHBvcnRzIl0sbik6bih0LmQzPXQuZDN8fHt9KX0odGhpcyxmdW5jdGlvbih0KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LG4pe3JldHVybiB0PG4/LTE6dD5uPzE6dD49bj8wOk5hTn1mdW5jdGlvbiBlKHQpe3ZhciBlO3JldHVybiAxPT09dC5sZW5ndGgmJihlPXQsdD1mdW5jdGlvbih0LHIpe3JldHVybiBuKGUodCkscil9KSx7bGVmdDpmdW5jdGlvbihuLGUscixpKXtmb3IobnVsbD09ciYmKHI9MCksbnVsbD09aSYmKGk9bi5sZW5ndGgpO3I8aTspe3ZhciBvPXIraT4+PjE7dChuW29dLGUpPDA/cj1vKzE6aT1vfXJldHVybiByfSxyaWdodDpmdW5jdGlvbihuLGUscixpKXtmb3IobnVsbD09ciYmKHI9MCksbnVsbD09aSYmKGk9bi5sZW5ndGgpO3I8aTspe3ZhciBvPXIraT4+PjE7dChuW29dLGUpPjA/aT1vOnI9bysxfXJldHVybiByfX19dmFyIHI9ZShuKSxpPXIucmlnaHQsbz1yLmxlZnQ7ZnVuY3Rpb24gYSh0LG4pe3JldHVyblt0LG5dfWZ1bmN0aW9uIHUodCl7cmV0dXJuIG51bGw9PT10P05hTjordH1mdW5jdGlvbiBmKHQsbil7dmFyIGUscixpPXQubGVuZ3RoLG89MCxhPS0xLGY9MCxjPTA7aWYobnVsbD09bilmb3IoOysrYTxpOylpc05hTihlPXUodFthXSkpfHwoYys9KHI9ZS1mKSooZS0oZis9ci8rK28pKSk7ZWxzZSBmb3IoOysrYTxpOylpc05hTihlPXUobih0W2FdLGEsdCkpKXx8KGMrPShyPWUtZikqKGUtKGYrPXIvKytvKSkpO2lmKG8+MSlyZXR1cm4gYy8oby0xKX1mdW5jdGlvbiBjKHQsbil7dmFyIGU9Zih0LG4pO3JldHVybiBlP01hdGguc3FydChlKTplfWZ1bmN0aW9uIHModCxuKXt2YXIgZSxyLGksbz10Lmxlbmd0aCxhPS0xO2lmKG51bGw9PW4pe2Zvcig7KythPG87KWlmKG51bGwhPShlPXRbYV0pJiZlPj1lKWZvcihyPWk9ZTsrK2E8bzspbnVsbCE9KGU9dFthXSkmJihyPmUmJihyPWUpLGk8ZSYmKGk9ZSkpfWVsc2UgZm9yKDsrK2E8bzspaWYobnVsbCE9KGU9bih0W2FdLGEsdCkpJiZlPj1lKWZvcihyPWk9ZTsrK2E8bzspbnVsbCE9KGU9bih0W2FdLGEsdCkpJiYocj5lJiYocj1lKSxpPGUmJihpPWUpKTtyZXR1cm5bcixpXX12YXIgbD1BcnJheS5wcm90b3R5cGUsaD1sLnNsaWNlLGQ9bC5tYXA7ZnVuY3Rpb24gcCh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24gdih0KXtyZXR1cm4gdH1mdW5jdGlvbiBnKHQsbixlKXt0PSt0LG49K24sZT0oaT1hcmd1bWVudHMubGVuZ3RoKTwyPyhuPXQsdD0wLDEpOmk8Mz8xOitlO2Zvcih2YXIgcj0tMSxpPTB8TWF0aC5tYXgoMCxNYXRoLmNlaWwoKG4tdCkvZSkpLG89bmV3IEFycmF5KGkpOysrcjxpOylvW3JdPXQrciplO3JldHVybiBvfXZhciB5PU1hdGguc3FydCg1MCksXz1NYXRoLnNxcnQoMTApLGI9TWF0aC5zcXJ0KDIpO2Z1bmN0aW9uIG0odCxuLGUpe3ZhciByLGksbyxhLHU9LTE7aWYoZT0rZSwodD0rdCk9PT0obj0rbikmJmU+MClyZXR1cm5bdF07aWYoKHI9bjx0KSYmKGk9dCx0PW4sbj1pKSwwPT09KGE9eCh0LG4sZSkpfHwhaXNGaW5pdGUoYSkpcmV0dXJuW107aWYoYT4wKWZvcih0PU1hdGguY2VpbCh0L2EpLG49TWF0aC5mbG9vcihuL2EpLG89bmV3IEFycmF5KGk9TWF0aC5jZWlsKG4tdCsxKSk7Kyt1PGk7KW9bdV09KHQrdSkqYTtlbHNlIGZvcih0PU1hdGguZmxvb3IodCphKSxuPU1hdGguY2VpbChuKmEpLG89bmV3IEFycmF5KGk9TWF0aC5jZWlsKHQtbisxKSk7Kyt1PGk7KW9bdV09KHQtdSkvYTtyZXR1cm4gciYmby5yZXZlcnNlKCksb31mdW5jdGlvbiB4KHQsbixlKXt2YXIgcj0obi10KS9NYXRoLm1heCgwLGUpLGk9TWF0aC5mbG9vcihNYXRoLmxvZyhyKS9NYXRoLkxOMTApLG89ci9NYXRoLnBvdygxMCxpKTtyZXR1cm4gaT49MD8obz49eT8xMDpvPj1fPzU6bz49Yj8yOjEpKk1hdGgucG93KDEwLGkpOi1NYXRoLnBvdygxMCwtaSkvKG8+PXk/MTA6bz49Xz81Om8+PWI/MjoxKX1mdW5jdGlvbiB3KHQsbixlKXt2YXIgcj1NYXRoLmFicyhuLXQpL01hdGgubWF4KDAsZSksaT1NYXRoLnBvdygxMCxNYXRoLmZsb29yKE1hdGgubG9nKHIpL01hdGguTE4xMCkpLG89ci9pO3JldHVybiBvPj15P2kqPTEwOm8+PV8/aSo9NTpvPj1iJiYoaSo9Miksbjx0Py1pOml9ZnVuY3Rpb24gTSh0KXtyZXR1cm4gTWF0aC5jZWlsKE1hdGgubG9nKHQubGVuZ3RoKS9NYXRoLkxOMikrMX1mdW5jdGlvbiBBKHQsbixlKXtpZihudWxsPT1lJiYoZT11KSxyPXQubGVuZ3RoKXtpZigobj0rbik8PTB8fHI8MilyZXR1cm4rZSh0WzBdLDAsdCk7aWYobj49MSlyZXR1cm4rZSh0W3ItMV0sci0xLHQpO3ZhciByLGk9KHItMSkqbixvPU1hdGguZmxvb3IoaSksYT0rZSh0W29dLG8sdCk7cmV0dXJuIGErKCtlKHRbbysxXSxvKzEsdCktYSkqKGktbyl9fWZ1bmN0aW9uIFQodCxuKXt2YXIgZSxyLGk9dC5sZW5ndGgsbz0tMTtpZihudWxsPT1uKXtmb3IoOysrbzxpOylpZihudWxsIT0oZT10W29dKSYmZT49ZSlmb3Iocj1lOysrbzxpOyludWxsIT0oZT10W29dKSYmZT5yJiYocj1lKX1lbHNlIGZvcig7KytvPGk7KWlmKG51bGwhPShlPW4odFtvXSxvLHQpKSYmZT49ZSlmb3Iocj1lOysrbzxpOyludWxsIT0oZT1uKHRbb10sbyx0KSkmJmU+ciYmKHI9ZSk7cmV0dXJuIHJ9ZnVuY3Rpb24gTih0KXtmb3IodmFyIG4sZSxyLGk9dC5sZW5ndGgsbz0tMSxhPTA7KytvPGk7KWErPXRbb10ubGVuZ3RoO2ZvcihlPW5ldyBBcnJheShhKTstLWk+PTA7KWZvcihuPShyPXRbaV0pLmxlbmd0aDstLW4+PTA7KWVbLS1hXT1yW25dO3JldHVybiBlfWZ1bmN0aW9uIFModCxuKXt2YXIgZSxyLGk9dC5sZW5ndGgsbz0tMTtpZihudWxsPT1uKXtmb3IoOysrbzxpOylpZihudWxsIT0oZT10W29dKSYmZT49ZSlmb3Iocj1lOysrbzxpOyludWxsIT0oZT10W29dKSYmcj5lJiYocj1lKX1lbHNlIGZvcig7KytvPGk7KWlmKG51bGwhPShlPW4odFtvXSxvLHQpKSYmZT49ZSlmb3Iocj1lOysrbzxpOyludWxsIT0oZT1uKHRbb10sbyx0KSkmJnI+ZSYmKHI9ZSk7cmV0dXJuIHJ9ZnVuY3Rpb24gRSh0KXtpZighKGk9dC5sZW5ndGgpKXJldHVybltdO2Zvcih2YXIgbj0tMSxlPVModCxrKSxyPW5ldyBBcnJheShlKTsrK248ZTspZm9yKHZhciBpLG89LTEsYT1yW25dPW5ldyBBcnJheShpKTsrK288aTspYVtvXT10W29dW25dO3JldHVybiByfWZ1bmN0aW9uIGsodCl7cmV0dXJuIHQubGVuZ3RofXZhciBDPUFycmF5LnByb3RvdHlwZS5zbGljZTtmdW5jdGlvbiBQKHQpe3JldHVybiB0fXZhciB6PTEsUj0yLEw9MyxEPTQsVT0xZS02O2Z1bmN0aW9uIHEodCl7cmV0dXJuInRyYW5zbGF0ZSgiKyh0Ky41KSsiLDApIn1mdW5jdGlvbiBPKHQpe3JldHVybiJ0cmFuc2xhdGUoMCwiKyh0Ky41KSsiKSJ9ZnVuY3Rpb24gWSgpe3JldHVybiF0aGlzLl9fYXhpc31mdW5jdGlvbiBCKHQsbil7dmFyIGU9W10scj1udWxsLGk9bnVsbCxvPTYsYT02LHU9MyxmPXQ9PT16fHx0PT09RD8tMToxLGM9dD09PUR8fHQ9PT1SPyJ4IjoieSIscz10PT09enx8dD09PUw/cTpPO2Z1bmN0aW9uIGwobCl7dmFyIGg9bnVsbD09cj9uLnRpY2tzP24udGlja3MuYXBwbHkobixlKTpuLmRvbWFpbigpOnIsZD1udWxsPT1pP24udGlja0Zvcm1hdD9uLnRpY2tGb3JtYXQuYXBwbHkobixlKTpQOmkscD1NYXRoLm1heChvLDApK3Usdj1uLnJhbmdlKCksZz0rdlswXSsuNSx5PSt2W3YubGVuZ3RoLTFdKy41LF89KG4uYmFuZHdpZHRoP2Z1bmN0aW9uKHQpe3ZhciBuPU1hdGgubWF4KDAsdC5iYW5kd2lkdGgoKS0xKS8yO3JldHVybiB0LnJvdW5kKCkmJihuPU1hdGgucm91bmQobikpLGZ1bmN0aW9uKGUpe3JldHVybit0KGUpK259fTpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuK3Qobil9fSkobi5jb3B5KCkpLGI9bC5zZWxlY3Rpb24/bC5zZWxlY3Rpb24oKTpsLG09Yi5zZWxlY3RBbGwoIi5kb21haW4iKS5kYXRhKFtudWxsXSkseD1iLnNlbGVjdEFsbCgiLnRpY2siKS5kYXRhKGgsbikub3JkZXIoKSx3PXguZXhpdCgpLE09eC5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwidGljayIpLEE9eC5zZWxlY3QoImxpbmUiKSxUPXguc2VsZWN0KCJ0ZXh0Iik7bT1tLm1lcmdlKG0uZW50ZXIoKS5pbnNlcnQoInBhdGgiLCIudGljayIpLmF0dHIoImNsYXNzIiwiZG9tYWluIikuYXR0cigic3Ryb2tlIiwiY3VycmVudENvbG9yIikpLHg9eC5tZXJnZShNKSxBPUEubWVyZ2UoTS5hcHBlbmQoImxpbmUiKS5hdHRyKCJzdHJva2UiLCJjdXJyZW50Q29sb3IiKS5hdHRyKGMrIjIiLGYqbykpLFQ9VC5tZXJnZShNLmFwcGVuZCgidGV4dCIpLmF0dHIoImZpbGwiLCJjdXJyZW50Q29sb3IiKS5hdHRyKGMsZipwKS5hdHRyKCJkeSIsdD09PXo/IjBlbSI6dD09PUw/IjAuNzFlbSI6IjAuMzJlbSIpKSxsIT09YiYmKG09bS50cmFuc2l0aW9uKGwpLHg9eC50cmFuc2l0aW9uKGwpLEE9QS50cmFuc2l0aW9uKGwpLFQ9VC50cmFuc2l0aW9uKGwpLHc9dy50cmFuc2l0aW9uKGwpLmF0dHIoIm9wYWNpdHkiLFUpLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24odCl7cmV0dXJuIGlzRmluaXRlKHQ9Xyh0KSk/cyh0KTp0aGlzLmdldEF0dHJpYnV0ZSgidHJhbnNmb3JtIil9KSxNLmF0dHIoIm9wYWNpdHkiLFUpLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24odCl7dmFyIG49dGhpcy5wYXJlbnROb2RlLl9fYXhpcztyZXR1cm4gcyhuJiZpc0Zpbml0ZShuPW4odCkpP246Xyh0KSl9KSksdy5yZW1vdmUoKSxtLmF0dHIoImQiLHQ9PT1EfHx0PT1SP2E/Ik0iK2YqYSsiLCIrZysiSDAuNVYiK3krIkgiK2YqYToiTTAuNSwiK2crIlYiK3k6YT8iTSIrZysiLCIrZiphKyJWMC41SCIreSsiViIrZiphOiJNIitnKyIsMC41SCIreSkseC5hdHRyKCJvcGFjaXR5IiwxKS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKHQpe3JldHVybiBzKF8odCkpfSksQS5hdHRyKGMrIjIiLGYqbyksVC5hdHRyKGMsZipwKS50ZXh0KGQpLGIuZmlsdGVyKFkpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigiZm9udC1zaXplIiwxMCkuYXR0cigiZm9udC1mYW1pbHkiLCJzYW5zLXNlcmlmIikuYXR0cigidGV4dC1hbmNob3IiLHQ9PT1SPyJzdGFydCI6dD09PUQ/ImVuZCI6Im1pZGRsZSIpLGIuZWFjaChmdW5jdGlvbigpe3RoaXMuX19heGlzPV99KX1yZXR1cm4gbC5zY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10LGwpOm59LGwudGlja3M9ZnVuY3Rpb24oKXtyZXR1cm4gZT1DLmNhbGwoYXJndW1lbnRzKSxsfSxsLnRpY2tBcmd1bWVudHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9bnVsbD09dD9bXTpDLmNhbGwodCksbCk6ZS5zbGljZSgpfSxsLnRpY2tWYWx1ZXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9bnVsbD09dD9udWxsOkMuY2FsbCh0KSxsKTpyJiZyLnNsaWNlKCl9LGwudGlja0Zvcm1hdD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10LGwpOml9LGwudGlja1NpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89YT0rdCxsKTpvfSxsLnRpY2tTaXplSW5uZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89K3QsbCk6b30sbC50aWNrU2l6ZU91dGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSt0LGwpOmF9LGwudGlja1BhZGRpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9K3QsbCk6dX0sbH12YXIgRj17dmFsdWU6ZnVuY3Rpb24oKXt9fTtmdW5jdGlvbiBJKCl7Zm9yKHZhciB0LG49MCxlPWFyZ3VtZW50cy5sZW5ndGgscj17fTtuPGU7KytuKXtpZighKHQ9YXJndW1lbnRzW25dKyIiKXx8dCBpbiByKXRocm93IG5ldyBFcnJvcigiaWxsZWdhbCB0eXBlOiAiK3QpO3JbdF09W119cmV0dXJuIG5ldyBIKHIpfWZ1bmN0aW9uIEgodCl7dGhpcy5fPXR9ZnVuY3Rpb24gaih0LG4pe2Zvcih2YXIgZSxyPTAsaT10Lmxlbmd0aDtyPGk7KytyKWlmKChlPXRbcl0pLm5hbWU9PT1uKXJldHVybiBlLnZhbHVlfWZ1bmN0aW9uIFgodCxuLGUpe2Zvcih2YXIgcj0wLGk9dC5sZW5ndGg7cjxpOysrcilpZih0W3JdLm5hbWU9PT1uKXt0W3JdPUYsdD10LnNsaWNlKDAscikuY29uY2F0KHQuc2xpY2UocisxKSk7YnJlYWt9cmV0dXJuIG51bGwhPWUmJnQucHVzaCh7bmFtZTpuLHZhbHVlOmV9KSx0fUgucHJvdG90eXBlPUkucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpILG9uOmZ1bmN0aW9uKHQsbil7dmFyIGUscixpPXRoaXMuXyxvPShyPWksKHQrIiIpLnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24odCl7dmFyIG49IiIsZT10LmluZGV4T2YoIi4iKTtpZihlPj0wJiYobj10LnNsaWNlKGUrMSksdD10LnNsaWNlKDAsZSkpLHQmJiFyLmhhc093blByb3BlcnR5KHQpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3QpO3JldHVybnt0eXBlOnQsbmFtZTpufX0pKSxhPS0xLHU9by5sZW5ndGg7aWYoIShhcmd1bWVudHMubGVuZ3RoPDIpKXtpZihudWxsIT1uJiYiZnVuY3Rpb24iIT10eXBlb2Ygbil0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2s6ICIrbik7Zm9yKDsrK2E8dTspaWYoZT0odD1vW2FdKS50eXBlKWlbZV09WChpW2VdLHQubmFtZSxuKTtlbHNlIGlmKG51bGw9PW4pZm9yKGUgaW4gaSlpW2VdPVgoaVtlXSx0Lm5hbWUsbnVsbCk7cmV0dXJuIHRoaXN9Zm9yKDsrK2E8dTspaWYoKGU9KHQ9b1thXSkudHlwZSkmJihlPWooaVtlXSx0Lm5hbWUpKSlyZXR1cm4gZX0sY29weTpmdW5jdGlvbigpe3ZhciB0PXt9LG49dGhpcy5fO2Zvcih2YXIgZSBpbiBuKXRbZV09bltlXS5zbGljZSgpO3JldHVybiBuZXcgSCh0KX0sY2FsbDpmdW5jdGlvbih0LG4pe2lmKChlPWFyZ3VtZW50cy5sZW5ndGgtMik+MClmb3IodmFyIGUscixpPW5ldyBBcnJheShlKSxvPTA7bzxlOysrbylpW29dPWFyZ3VtZW50c1tvKzJdO2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkodCkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrdCk7Zm9yKG89MCxlPShyPXRoaXMuX1t0XSkubGVuZ3RoO288ZTsrK28pcltvXS52YWx1ZS5hcHBseShuLGkpfSxhcHBseTpmdW5jdGlvbih0LG4sZSl7aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eSh0KSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIit0KTtmb3IodmFyIHI9dGhpcy5fW3RdLGk9MCxvPXIubGVuZ3RoO2k8bzsrK2kpcltpXS52YWx1ZS5hcHBseShuLGUpfX07dmFyIEc9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLFY9e3N2ZzoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHhodG1sOkcseGxpbms6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLHhtbDoiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8ifTtmdW5jdGlvbiAkKHQpe3ZhciBuPXQrPSIiLGU9bi5pbmRleE9mKCI6Iik7cmV0dXJuIGU+PTAmJiJ4bWxucyIhPT0obj10LnNsaWNlKDAsZSkpJiYodD10LnNsaWNlKGUrMSkpLFYuaGFzT3duUHJvcGVydHkobik/e3NwYWNlOlZbbl0sbG9jYWw6dH06dH1mdW5jdGlvbiBXKHQpe3ZhciBuPSQodCk7cmV0dXJuKG4ubG9jYWw/ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50TlModC5zcGFjZSx0LmxvY2FsKX19OmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPXRoaXMub3duZXJEb2N1bWVudCxlPXRoaXMubmFtZXNwYWNlVVJJO3JldHVybiBlPT09RyYmbi5kb2N1bWVudEVsZW1lbnQubmFtZXNwYWNlVVJJPT09Rz9uLmNyZWF0ZUVsZW1lbnQodCk6bi5jcmVhdGVFbGVtZW50TlMoZSx0KX19KShuKX1mdW5jdGlvbiBaKCl7fWZ1bmN0aW9uIFEodCl7cmV0dXJuIG51bGw9PXQ/WjpmdW5jdGlvbigpe3JldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3IodCl9fWZ1bmN0aW9uIEooKXtyZXR1cm5bXX1mdW5jdGlvbiBLKHQpe3JldHVybiBudWxsPT10P0o6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yQWxsKHQpfX12YXIgdHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWF0Y2hlcyh0KX19O2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgZG9jdW1lbnQpe3ZhciBudD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7aWYoIW50Lm1hdGNoZXMpe3ZhciBldD1udC53ZWJraXRNYXRjaGVzU2VsZWN0b3J8fG50Lm1zTWF0Y2hlc1NlbGVjdG9yfHxudC5tb3pNYXRjaGVzU2VsZWN0b3J8fG50Lm9NYXRjaGVzU2VsZWN0b3I7dHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV0LmNhbGwodGhpcyx0KX19fX12YXIgcnQ9dHQ7ZnVuY3Rpb24gaXQodCl7cmV0dXJuIG5ldyBBcnJheSh0Lmxlbmd0aCl9ZnVuY3Rpb24gb3QodCxuKXt0aGlzLm93bmVyRG9jdW1lbnQ9dC5vd25lckRvY3VtZW50LHRoaXMubmFtZXNwYWNlVVJJPXQubmFtZXNwYWNlVVJJLHRoaXMuX25leHQ9bnVsbCx0aGlzLl9wYXJlbnQ9dCx0aGlzLl9fZGF0YV9fPW59b3QucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpvdCxhcHBlbmRDaGlsZDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZSh0LHRoaXMuX25leHQpfSxpbnNlcnRCZWZvcmU6ZnVuY3Rpb24odCxuKXtyZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZSh0LG4pfSxxdWVyeVNlbGVjdG9yOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wYXJlbnQucXVlcnlTZWxlY3Rvcih0KX0scXVlcnlTZWxlY3RvckFsbDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwodCl9fTt2YXIgYXQ9IiQiO2Z1bmN0aW9uIHV0KHQsbixlLHIsaSxvKXtmb3IodmFyIGEsdT0wLGY9bi5sZW5ndGgsYz1vLmxlbmd0aDt1PGM7Kyt1KShhPW5bdV0pPyhhLl9fZGF0YV9fPW9bdV0sclt1XT1hKTplW3VdPW5ldyBvdCh0LG9bdV0pO2Zvcig7dTxmOysrdSkoYT1uW3VdKSYmKGlbdV09YSl9ZnVuY3Rpb24gZnQodCxuLGUscixpLG8sYSl7dmFyIHUsZixjLHM9e30sbD1uLmxlbmd0aCxoPW8ubGVuZ3RoLGQ9bmV3IEFycmF5KGwpO2Zvcih1PTA7dTxsOysrdSkoZj1uW3VdKSYmKGRbdV09Yz1hdCthLmNhbGwoZixmLl9fZGF0YV9fLHUsbiksYyBpbiBzP2lbdV09ZjpzW2NdPWYpO2Zvcih1PTA7dTxoOysrdSkoZj1zW2M9YXQrYS5jYWxsKHQsb1t1XSx1LG8pXSk/KHJbdV09ZixmLl9fZGF0YV9fPW9bdV0sc1tjXT1udWxsKTplW3VdPW5ldyBvdCh0LG9bdV0pO2Zvcih1PTA7dTxsOysrdSkoZj1uW3VdKSYmc1tkW3VdXT09PWYmJihpW3VdPWYpfWZ1bmN0aW9uIGN0KHQsbil7cmV0dXJuIHQ8bj8tMTp0Pm4/MTp0Pj1uPzA6TmFOfWZ1bmN0aW9uIHN0KHQpe3JldHVybiB0Lm93bmVyRG9jdW1lbnQmJnQub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld3x8dC5kb2N1bWVudCYmdHx8dC5kZWZhdWx0Vmlld31mdW5jdGlvbiBsdCh0LG4pe3JldHVybiB0LnN0eWxlLmdldFByb3BlcnR5VmFsdWUobil8fHN0KHQpLmdldENvbXB1dGVkU3R5bGUodCxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKG4pfWZ1bmN0aW9uIGh0KHQpe3JldHVybiB0LnRyaW0oKS5zcGxpdCgvXnxccysvKX1mdW5jdGlvbiBkdCh0KXtyZXR1cm4gdC5jbGFzc0xpc3R8fG5ldyBwdCh0KX1mdW5jdGlvbiBwdCh0KXt0aGlzLl9ub2RlPXQsdGhpcy5fbmFtZXM9aHQodC5nZXRBdHRyaWJ1dGUoImNsYXNzIil8fCIiKX1mdW5jdGlvbiB2dCh0LG4pe2Zvcih2YXIgZT1kdCh0KSxyPS0xLGk9bi5sZW5ndGg7KytyPGk7KWUuYWRkKG5bcl0pfWZ1bmN0aW9uIGd0KHQsbil7Zm9yKHZhciBlPWR0KHQpLHI9LTEsaT1uLmxlbmd0aDsrK3I8aTspZS5yZW1vdmUobltyXSl9ZnVuY3Rpb24geXQoKXt0aGlzLnRleHRDb250ZW50PSIifWZ1bmN0aW9uIF90KCl7dGhpcy5pbm5lckhUTUw9IiJ9ZnVuY3Rpb24gYnQoKXt0aGlzLm5leHRTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcyl9ZnVuY3Rpb24gbXQoKXt0aGlzLnByZXZpb3VzU2libGluZyYmdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLHRoaXMucGFyZW50Tm9kZS5maXJzdENoaWxkKX1mdW5jdGlvbiB4dCgpe3JldHVybiBudWxsfWZ1bmN0aW9uIHd0KCl7dmFyIHQ9dGhpcy5wYXJlbnROb2RlO3QmJnQucmVtb3ZlQ2hpbGQodGhpcyl9ZnVuY3Rpb24gTXQoKXtyZXR1cm4gdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLmNsb25lTm9kZSghMSksdGhpcy5uZXh0U2libGluZyl9ZnVuY3Rpb24gQXQoKXtyZXR1cm4gdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLmNsb25lTm9kZSghMCksdGhpcy5uZXh0U2libGluZyl9cHQucHJvdG90eXBlPXthZGQ6ZnVuY3Rpb24odCl7dGhpcy5fbmFtZXMuaW5kZXhPZih0KTwwJiYodGhpcy5fbmFtZXMucHVzaCh0KSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSxyZW1vdmU6ZnVuY3Rpb24odCl7dmFyIG49dGhpcy5fbmFtZXMuaW5kZXhPZih0KTtuPj0wJiYodGhpcy5fbmFtZXMuc3BsaWNlKG4sMSksdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLl9uYW1lcy5qb2luKCIgIikpKX0sY29udGFpbnM6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX25hbWVzLmluZGV4T2YodCk+PTB9fTt2YXIgVHQ9e307KHQuZXZlbnQ9bnVsbCwidW5kZWZpbmVkIiE9dHlwZW9mIGRvY3VtZW50KSYmKCJvbm1vdXNlZW50ZXIiaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50fHwoVHQ9e21vdXNlZW50ZXI6Im1vdXNlb3ZlciIsbW91c2VsZWF2ZToibW91c2VvdXQifSkpO2Z1bmN0aW9uIE50KHQsbixlKXtyZXR1cm4gdD1TdCh0LG4sZSksZnVuY3Rpb24obil7dmFyIGU9bi5yZWxhdGVkVGFyZ2V0O2UmJihlPT09dGhpc3x8OCZlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHRoaXMpKXx8dC5jYWxsKHRoaXMsbil9fWZ1bmN0aW9uIFN0KG4sZSxyKXtyZXR1cm4gZnVuY3Rpb24oaSl7dmFyIG89dC5ldmVudDt0LmV2ZW50PWk7dHJ5e24uY2FsbCh0aGlzLHRoaXMuX19kYXRhX18sZSxyKX1maW5hbGx5e3QuZXZlbnQ9b319fWZ1bmN0aW9uIEV0KHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPXRoaXMuX19vbjtpZihuKXtmb3IodmFyIGUscj0wLGk9LTEsbz1uLmxlbmd0aDtyPG87KytyKWU9bltyXSx0LnR5cGUmJmUudHlwZSE9PXQudHlwZXx8ZS5uYW1lIT09dC5uYW1lP25bKytpXT1lOnRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihlLnR5cGUsZS5saXN0ZW5lcixlLmNhcHR1cmUpOysraT9uLmxlbmd0aD1pOmRlbGV0ZSB0aGlzLl9fb259fX1mdW5jdGlvbiBrdCh0LG4sZSl7dmFyIHI9VHQuaGFzT3duUHJvcGVydHkodC50eXBlKT9OdDpTdDtyZXR1cm4gZnVuY3Rpb24oaSxvLGEpe3ZhciB1LGY9dGhpcy5fX29uLGM9cihuLG8sYSk7aWYoZilmb3IodmFyIHM9MCxsPWYubGVuZ3RoO3M8bDsrK3MpaWYoKHU9ZltzXSkudHlwZT09PXQudHlwZSYmdS5uYW1lPT09dC5uYW1lKXJldHVybiB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIodS50eXBlLHUubGlzdGVuZXIsdS5jYXB0dXJlKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIodS50eXBlLHUubGlzdGVuZXI9Yyx1LmNhcHR1cmU9ZSksdm9pZCh1LnZhbHVlPW4pO3RoaXMuYWRkRXZlbnRMaXN0ZW5lcih0LnR5cGUsYyxlKSx1PXt0eXBlOnQudHlwZSxuYW1lOnQubmFtZSx2YWx1ZTpuLGxpc3RlbmVyOmMsY2FwdHVyZTplfSxmP2YucHVzaCh1KTp0aGlzLl9fb249W3VdfX1mdW5jdGlvbiBDdChuLGUscixpKXt2YXIgbz10LmV2ZW50O24uc291cmNlRXZlbnQ9dC5ldmVudCx0LmV2ZW50PW47dHJ5e3JldHVybiBlLmFwcGx5KHIsaSl9ZmluYWxseXt0LmV2ZW50PW99fWZ1bmN0aW9uIFB0KHQsbixlKXt2YXIgcj1zdCh0KSxpPXIuQ3VzdG9tRXZlbnQ7ImZ1bmN0aW9uIj09dHlwZW9mIGk/aT1uZXcgaShuLGUpOihpPXIuZG9jdW1lbnQuY3JlYXRlRXZlbnQoIkV2ZW50IiksZT8oaS5pbml0RXZlbnQobixlLmJ1YmJsZXMsZS5jYW5jZWxhYmxlKSxpLmRldGFpbD1lLmRldGFpbCk6aS5pbml0RXZlbnQobiwhMSwhMSkpLHQuZGlzcGF0Y2hFdmVudChpKX12YXIgenQ9W251bGxdO2Z1bmN0aW9uIFJ0KHQsbil7dGhpcy5fZ3JvdXBzPXQsdGhpcy5fcGFyZW50cz1ufWZ1bmN0aW9uIEx0KCl7cmV0dXJuIG5ldyBSdChbW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF1dLHp0KX1mdW5jdGlvbiBEdCh0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQ/bmV3IFJ0KFtbZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0KV1dLFtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdKTpuZXcgUnQoW1t0XV0senQpfVJ0LnByb3RvdHlwZT1MdC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlJ0LHNlbGVjdDpmdW5jdGlvbih0KXsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9USh0KSk7Zm9yKHZhciBuPXRoaXMuX2dyb3VwcyxlPW4ubGVuZ3RoLHI9bmV3IEFycmF5KGUpLGk9MDtpPGU7KytpKWZvcih2YXIgbyxhLHU9bltpXSxmPXUubGVuZ3RoLGM9cltpXT1uZXcgQXJyYXkoZikscz0wO3M8ZjsrK3MpKG89dVtzXSkmJihhPXQuY2FsbChvLG8uX19kYXRhX18scyx1KSkmJigiX19kYXRhX18iaW4gbyYmKGEuX19kYXRhX189by5fX2RhdGFfXyksY1tzXT1hKTtyZXR1cm4gbmV3IFJ0KHIsdGhpcy5fcGFyZW50cyl9LHNlbGVjdEFsbDpmdW5jdGlvbih0KXsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9Syh0KSk7Zm9yKHZhciBuPXRoaXMuX2dyb3VwcyxlPW4ubGVuZ3RoLHI9W10saT1bXSxvPTA7bzxlOysrbylmb3IodmFyIGEsdT1uW29dLGY9dS5sZW5ndGgsYz0wO2M8ZjsrK2MpKGE9dVtjXSkmJihyLnB1c2godC5jYWxsKGEsYS5fX2RhdGFfXyxjLHUpKSxpLnB1c2goYSkpO3JldHVybiBuZXcgUnQocixpKX0sZmlsdGVyOmZ1bmN0aW9uKHQpeyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1ydCh0KSk7Zm9yKHZhciBuPXRoaXMuX2dyb3VwcyxlPW4ubGVuZ3RoLHI9bmV3IEFycmF5KGUpLGk9MDtpPGU7KytpKWZvcih2YXIgbyxhPW5baV0sdT1hLmxlbmd0aCxmPXJbaV09W10sYz0wO2M8dTsrK2MpKG89YVtjXSkmJnQuY2FsbChvLG8uX19kYXRhX18sYyxhKSYmZi5wdXNoKG8pO3JldHVybiBuZXcgUnQocix0aGlzLl9wYXJlbnRzKX0sZGF0YTpmdW5jdGlvbih0LG4pe2lmKCF0KXJldHVybiBwPW5ldyBBcnJheSh0aGlzLnNpemUoKSkscz0tMSx0aGlzLmVhY2goZnVuY3Rpb24odCl7cFsrK3NdPXR9KSxwO3ZhciBlLHI9bj9mdDp1dCxpPXRoaXMuX3BhcmVudHMsbz10aGlzLl9ncm91cHM7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJihlPXQsdD1mdW5jdGlvbigpe3JldHVybiBlfSk7Zm9yKHZhciBhPW8ubGVuZ3RoLHU9bmV3IEFycmF5KGEpLGY9bmV3IEFycmF5KGEpLGM9bmV3IEFycmF5KGEpLHM9MDtzPGE7KytzKXt2YXIgbD1pW3NdLGg9b1tzXSxkPWgubGVuZ3RoLHA9dC5jYWxsKGwsbCYmbC5fX2RhdGFfXyxzLGkpLHY9cC5sZW5ndGgsZz1mW3NdPW5ldyBBcnJheSh2KSx5PXVbc109bmV3IEFycmF5KHYpO3IobCxoLGcseSxjW3NdPW5ldyBBcnJheShkKSxwLG4pO2Zvcih2YXIgXyxiLG09MCx4PTA7bTx2OysrbSlpZihfPWdbbV0pe2ZvcihtPj14JiYoeD1tKzEpOyEoYj15W3hdKSYmKyt4PHY7KTtfLl9uZXh0PWJ8fG51bGx9fXJldHVybih1PW5ldyBSdCh1LGkpKS5fZW50ZXI9Zix1Ll9leGl0PWMsdX0sZW50ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFJ0KHRoaXMuX2VudGVyfHx0aGlzLl9ncm91cHMubWFwKGl0KSx0aGlzLl9wYXJlbnRzKX0sZXhpdDpmdW5jdGlvbigpe3JldHVybiBuZXcgUnQodGhpcy5fZXhpdHx8dGhpcy5fZ3JvdXBzLm1hcChpdCksdGhpcy5fcGFyZW50cyl9LG1lcmdlOmZ1bmN0aW9uKHQpe2Zvcih2YXIgbj10aGlzLl9ncm91cHMsZT10Ll9ncm91cHMscj1uLmxlbmd0aCxpPWUubGVuZ3RoLG89TWF0aC5taW4ocixpKSxhPW5ldyBBcnJheShyKSx1PTA7dTxvOysrdSlmb3IodmFyIGYsYz1uW3VdLHM9ZVt1XSxsPWMubGVuZ3RoLGg9YVt1XT1uZXcgQXJyYXkobCksZD0wO2Q8bDsrK2QpKGY9Y1tkXXx8c1tkXSkmJihoW2RdPWYpO2Zvcig7dTxyOysrdSlhW3VdPW5bdV07cmV0dXJuIG5ldyBSdChhLHRoaXMuX3BhcmVudHMpfSxvcmRlcjpmdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLl9ncm91cHMsbj0tMSxlPXQubGVuZ3RoOysrbjxlOylmb3IodmFyIHIsaT10W25dLG89aS5sZW5ndGgtMSxhPWlbb107LS1vPj0wOykocj1pW29dKSYmKGEmJmEhPT1yLm5leHRTaWJsaW5nJiZhLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHIsYSksYT1yKTtyZXR1cm4gdGhpc30sc29ydDpmdW5jdGlvbih0KXtmdW5jdGlvbiBuKG4sZSl7cmV0dXJuIG4mJmU/dChuLl9fZGF0YV9fLGUuX19kYXRhX18pOiFuLSFlfXR8fCh0PWN0KTtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLHI9ZS5sZW5ndGgsaT1uZXcgQXJyYXkociksbz0wO288cjsrK28pe2Zvcih2YXIgYSx1PWVbb10sZj11Lmxlbmd0aCxjPWlbb109bmV3IEFycmF5KGYpLHM9MDtzPGY7KytzKShhPXVbc10pJiYoY1tzXT1hKTtjLnNvcnQobil9cmV0dXJuIG5ldyBSdChpLHRoaXMuX3BhcmVudHMpLm9yZGVyKCl9LGNhbGw6ZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHNbMF07cmV0dXJuIGFyZ3VtZW50c1swXT10aGlzLHQuYXBwbHkobnVsbCxhcmd1bWVudHMpLHRoaXN9LG5vZGVzOmZ1bmN0aW9uKCl7dmFyIHQ9bmV3IEFycmF5KHRoaXMuc2l6ZSgpKSxuPS0xO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt0Wysrbl09dGhpc30pLHR9LG5vZGU6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLG49MCxlPXQubGVuZ3RoO248ZTsrK24pZm9yKHZhciByPXRbbl0saT0wLG89ci5sZW5ndGg7aTxvOysraSl7dmFyIGE9cltpXTtpZihhKXJldHVybiBhfXJldHVybiBudWxsfSxzaXplOmZ1bmN0aW9uKCl7dmFyIHQ9MDtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7Kyt0fSksdH0sZW1wdHk6ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5ub2RlKCl9LGVhY2g6ZnVuY3Rpb24odCl7Zm9yKHZhciBuPXRoaXMuX2dyb3VwcyxlPTAscj1uLmxlbmd0aDtlPHI7KytlKWZvcih2YXIgaSxvPW5bZV0sYT0wLHU9by5sZW5ndGg7YTx1OysrYSkoaT1vW2FdKSYmdC5jYWxsKGksaS5fX2RhdGFfXyxhLG8pO3JldHVybiB0aGlzfSxhdHRyOmZ1bmN0aW9uKHQsbil7dmFyIGU9JCh0KTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciByPXRoaXMubm9kZSgpO3JldHVybiBlLmxvY2FsP3IuZ2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsKTpyLmdldEF0dHJpYnV0ZShlKX1yZXR1cm4gdGhpcy5lYWNoKChudWxsPT1uP2UubG9jYWw/ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpfX06ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUodCl9fToiZnVuY3Rpb24iPT10eXBlb2Ygbj9lLmxvY2FsP2Z1bmN0aW9uKHQsbil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09ZT90aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCk6dGhpcy5zZXRBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwsZSl9fTpmdW5jdGlvbih0LG4pe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPW4uYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PWU/dGhpcy5yZW1vdmVBdHRyaWJ1dGUodCk6dGhpcy5zZXRBdHRyaWJ1dGUodCxlKX19OmUubG9jYWw/ZnVuY3Rpb24odCxuKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCxuKX19OmZ1bmN0aW9uKHQsbil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zZXRBdHRyaWJ1dGUodCxuKX19KShlLG4pKX0sc3R5bGU6ZnVuY3Rpb24odCxuLGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKChudWxsPT1uP2Z1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCl9fToiZnVuY3Rpb24iPT10eXBlb2Ygbj9mdW5jdGlvbih0LG4sZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09cj90aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpOnRoaXMuc3R5bGUuc2V0UHJvcGVydHkodCxyLGUpfX06ZnVuY3Rpb24odCxuLGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkodCxuLGUpfX0pKHQsbixudWxsPT1lPyIiOmUpKTpsdCh0aGlzLm5vZGUoKSx0KX0scHJvcGVydHk6ZnVuY3Rpb24odCxuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaCgobnVsbD09bj9mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtkZWxldGUgdGhpc1t0XX19OiJmdW5jdGlvbiI9PXR5cGVvZiBuP2Z1bmN0aW9uKHQsbil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09ZT9kZWxldGUgdGhpc1t0XTp0aGlzW3RdPWV9fTpmdW5jdGlvbih0LG4pe3JldHVybiBmdW5jdGlvbigpe3RoaXNbdF09bn19KSh0LG4pKTp0aGlzLm5vZGUoKVt0XX0sY2xhc3NlZDpmdW5jdGlvbih0LG4pe3ZhciBlPWh0KHQrIiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciByPWR0KHRoaXMubm9kZSgpKSxpPS0xLG89ZS5sZW5ndGg7KytpPG87KWlmKCFyLmNvbnRhaW5zKGVbaV0pKXJldHVybiExO3JldHVybiEwfXJldHVybiB0aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiBuP2Z1bmN0aW9uKHQsbil7cmV0dXJuIGZ1bmN0aW9uKCl7KG4uYXBwbHkodGhpcyxhcmd1bWVudHMpP3Z0Omd0KSh0aGlzLHQpfX06bj9mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt2dCh0aGlzLHQpfX06ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7Z3QodGhpcyx0KX19KShlLG4pKX0sdGV4dDpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2gobnVsbD09dD95dDooImZ1bmN0aW9uIj09dHlwZW9mIHQ/ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy50ZXh0Q29udGVudD1udWxsPT1uPyIiOm59fTpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PXR9fSkodCkpOnRoaXMubm9kZSgpLnRleHRDb250ZW50fSxodG1sOmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChudWxsPT10P190OigiZnVuY3Rpb24iPT10eXBlb2YgdD9mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLmlubmVySFRNTD1udWxsPT1uPyIiOm59fTpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLmlubmVySFRNTD10fX0pKHQpKTp0aGlzLm5vZGUoKS5pbm5lckhUTUx9LHJhaXNlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWFjaChidCl9LGxvd2VyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWFjaChtdCl9LGFwcGVuZDpmdW5jdGlvbih0KXt2YXIgbj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OlcodCk7cmV0dXJuIHRoaXMuc2VsZWN0KGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYXBwZW5kQ2hpbGQobi5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSl9LGluc2VydDpmdW5jdGlvbih0LG4pe3ZhciBlPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6Vyh0KSxyPW51bGw9PW4/eHQ6ImZ1bmN0aW9uIj09dHlwZW9mIG4/bjpRKG4pO3JldHVybiB0aGlzLnNlbGVjdChmdW5jdGlvbigpe3JldHVybiB0aGlzLmluc2VydEJlZm9yZShlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxyLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8bnVsbCl9KX0scmVtb3ZlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWFjaCh3dCl9LGNsb25lOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnNlbGVjdCh0P0F0Ok10KX0sZGF0dW06ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5wcm9wZXJ0eSgiX19kYXRhX18iLHQpOnRoaXMubm9kZSgpLl9fZGF0YV9ffSxvbjpmdW5jdGlvbih0LG4sZSl7dmFyIHIsaSxvPWZ1bmN0aW9uKHQpe3JldHVybiB0LnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24odCl7dmFyIG49IiIsZT10LmluZGV4T2YoIi4iKTtyZXR1cm4gZT49MCYmKG49dC5zbGljZShlKzEpLHQ9dC5zbGljZSgwLGUpKSx7dHlwZTp0LG5hbWU6bn19KX0odCsiIiksYT1vLmxlbmd0aDtpZighKGFyZ3VtZW50cy5sZW5ndGg8Mikpe2Zvcih1PW4/a3Q6RXQsbnVsbD09ZSYmKGU9ITEpLHI9MDtyPGE7KytyKXRoaXMuZWFjaCh1KG9bcl0sbixlKSk7cmV0dXJuIHRoaXN9dmFyIHU9dGhpcy5ub2RlKCkuX19vbjtpZih1KWZvcih2YXIgZixjPTAscz11Lmxlbmd0aDtjPHM7KytjKWZvcihyPTAsZj11W2NdO3I8YTsrK3IpaWYoKGk9b1tyXSkudHlwZT09PWYudHlwZSYmaS5uYW1lPT09Zi5uYW1lKXJldHVybiBmLnZhbHVlfSxkaXNwYXRjaDpmdW5jdGlvbih0LG4pe3JldHVybiB0aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiBuP2Z1bmN0aW9uKHQsbil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIFB0KHRoaXMsdCxuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9fTpmdW5jdGlvbih0LG4pe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBQdCh0aGlzLHQsbil9fSkodCxuKSl9fTt2YXIgVXQ9MDtmdW5jdGlvbiBxdCgpe3JldHVybiBuZXcgT3R9ZnVuY3Rpb24gT3QoKXt0aGlzLl89IkAiKygrK1V0KS50b1N0cmluZygzNil9ZnVuY3Rpb24gWXQoKXtmb3IodmFyIG4sZT10LmV2ZW50O249ZS5zb3VyY2VFdmVudDspZT1uO3JldHVybiBlfWZ1bmN0aW9uIEJ0KHQsbil7dmFyIGU9dC5vd25lclNWR0VsZW1lbnR8fHQ7aWYoZS5jcmVhdGVTVkdQb2ludCl7dmFyIHI9ZS5jcmVhdGVTVkdQb2ludCgpO3JldHVybiByLng9bi5jbGllbnRYLHIueT1uLmNsaWVudFksWyhyPXIubWF0cml4VHJhbnNmb3JtKHQuZ2V0U2NyZWVuQ1RNKCkuaW52ZXJzZSgpKSkueCxyLnldfXZhciBpPXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuW24uY2xpZW50WC1pLmxlZnQtdC5jbGllbnRMZWZ0LG4uY2xpZW50WS1pLnRvcC10LmNsaWVudFRvcF19ZnVuY3Rpb24gRnQodCl7dmFyIG49WXQoKTtyZXR1cm4gbi5jaGFuZ2VkVG91Y2hlcyYmKG49bi5jaGFuZ2VkVG91Y2hlc1swXSksQnQodCxuKX1mdW5jdGlvbiBJdCh0LG4sZSl7YXJndW1lbnRzLmxlbmd0aDwzJiYoZT1uLG49WXQoKS5jaGFuZ2VkVG91Y2hlcyk7Zm9yKHZhciByLGk9MCxvPW4/bi5sZW5ndGg6MDtpPG87KytpKWlmKChyPW5baV0pLmlkZW50aWZpZXI9PT1lKXJldHVybiBCdCh0LHIpO3JldHVybiBudWxsfWZ1bmN0aW9uIEh0KCl7dC5ldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX1mdW5jdGlvbiBqdCgpe3QuZXZlbnQucHJldmVudERlZmF1bHQoKSx0LmV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfWZ1bmN0aW9uIFh0KHQpe3ZhciBuPXQuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LGU9RHQodCkub24oImRyYWdzdGFydC5kcmFnIixqdCwhMCk7Im9uc2VsZWN0c3RhcnQiaW4gbj9lLm9uKCJzZWxlY3RzdGFydC5kcmFnIixqdCwhMCk6KG4uX19ub3NlbGVjdD1uLnN0eWxlLk1velVzZXJTZWxlY3Qsbi5zdHlsZS5Nb3pVc2VyU2VsZWN0PSJub25lIil9ZnVuY3Rpb24gR3QodCxuKXt2YXIgZT10LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxyPUR0KHQpLm9uKCJkcmFnc3RhcnQuZHJhZyIsbnVsbCk7biYmKHIub24oImNsaWNrLmRyYWciLGp0LCEwKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ci5vbigiY2xpY2suZHJhZyIsbnVsbCl9LDApKSwib25zZWxlY3RzdGFydCJpbiBlP3Iub24oInNlbGVjdHN0YXJ0LmRyYWciLG51bGwpOihlLnN0eWxlLk1velVzZXJTZWxlY3Q9ZS5fX25vc2VsZWN0LGRlbGV0ZSBlLl9fbm9zZWxlY3QpfWZ1bmN0aW9uIFZ0KHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX1mdW5jdGlvbiAkdCh0LG4sZSxyLGksbyxhLHUsZixjKXt0aGlzLnRhcmdldD10LHRoaXMudHlwZT1uLHRoaXMuc3ViamVjdD1lLHRoaXMuaWRlbnRpZmllcj1yLHRoaXMuYWN0aXZlPWksdGhpcy54PW8sdGhpcy55PWEsdGhpcy5keD11LHRoaXMuZHk9Zix0aGlzLl89Y31mdW5jdGlvbiBXdCgpe3JldHVybiF0LmV2ZW50LmJ1dHRvbn1mdW5jdGlvbiBadCgpe3JldHVybiB0aGlzLnBhcmVudE5vZGV9ZnVuY3Rpb24gUXQobil7cmV0dXJuIG51bGw9PW4/e3g6dC5ldmVudC54LHk6dC5ldmVudC55fTpufWZ1bmN0aW9uIEp0KCl7cmV0dXJuIm9udG91Y2hzdGFydCJpbiB0aGlzfWZ1bmN0aW9uIEt0KHQsbixlKXt0LnByb3RvdHlwZT1uLnByb3RvdHlwZT1lLGUuY29uc3RydWN0b3I9dH1mdW5jdGlvbiB0bih0LG4pe3ZhciBlPU9iamVjdC5jcmVhdGUodC5wcm90b3R5cGUpO2Zvcih2YXIgciBpbiBuKWVbcl09bltyXTtyZXR1cm4gZX1mdW5jdGlvbiBubigpe31PdC5wcm90b3R5cGU9cXQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpPdCxnZXQ6ZnVuY3Rpb24odCl7Zm9yKHZhciBuPXRoaXMuXzshKG4gaW4gdCk7KWlmKCEodD10LnBhcmVudE5vZGUpKXJldHVybjtyZXR1cm4gdFtuXX0sc2V0OmZ1bmN0aW9uKHQsbil7cmV0dXJuIHRbdGhpcy5fXT1ufSxyZW1vdmU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuXyBpbiB0JiZkZWxldGUgdFt0aGlzLl9dfSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl99fSwkdC5wcm90b3R5cGUub249ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl8ub24uYXBwbHkodGhpcy5fLGFyZ3VtZW50cyk7cmV0dXJuIHQ9PT10aGlzLl8/dGhpczp0fTt2YXIgZW49IlxccyooWystXT9cXGQrKVxccyoiLHJuPSJcXHMqKFsrLV0/XFxkKlxcLj9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KVxccyoiLG9uPSJcXHMqKFsrLV0/XFxkKlxcLj9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KSVcXHMqIixhbj0vXiMoWzAtOWEtZl17M30pJC8sdW49L14jKFswLTlhLWZdezZ9KSQvLGZuPW5ldyBSZWdFeHAoIl5yZ2JcXCgiK1tlbixlbixlbl0rIlxcKSQiKSxjbj1uZXcgUmVnRXhwKCJecmdiXFwoIitbb24sb24sb25dKyJcXCkkIiksc249bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1tlbixlbixlbixybl0rIlxcKSQiKSxsbj1uZXcgUmVnRXhwKCJecmdiYVxcKCIrW29uLG9uLG9uLHJuXSsiXFwpJCIpLGhuPW5ldyBSZWdFeHAoIl5oc2xcXCgiK1tybixvbixvbl0rIlxcKSQiKSxkbj1uZXcgUmVnRXhwKCJeaHNsYVxcKCIrW3JuLG9uLG9uLHJuXSsiXFwpJCIpLHBuPXthbGljZWJsdWU6MTU3OTIzODMsYW50aXF1ZXdoaXRlOjE2NDQ0Mzc1LGFxdWE6NjU1MzUsYXF1YW1hcmluZTo4Mzg4NTY0LGF6dXJlOjE1Nzk0MTc1LGJlaWdlOjE2MTE5MjYwLGJpc3F1ZToxNjc3MDI0NCxibGFjazowLGJsYW5jaGVkYWxtb25kOjE2NzcyMDQ1LGJsdWU6MjU1LGJsdWV2aW9sZXQ6OTA1NTIwMixicm93bjoxMDgyNDIzNCxidXJseXdvb2Q6MTQ1OTYyMzEsY2FkZXRibHVlOjYyNjY1MjgsY2hhcnRyZXVzZTo4Mzg4MzUyLGNob2NvbGF0ZToxMzc4OTQ3MCxjb3JhbDoxNjc0NDI3Mixjb3JuZmxvd2VyYmx1ZTo2NTkxOTgxLGNvcm5zaWxrOjE2Nzc1Mzg4LGNyaW1zb246MTQ0MjMxMDAsY3lhbjo2NTUzNSxkYXJrYmx1ZToxMzksZGFya2N5YW46MzU3MjMsZGFya2dvbGRlbnJvZDoxMjA5MjkzOSxkYXJrZ3JheToxMTExOTAxNyxkYXJrZ3JlZW46MjU2MDAsZGFya2dyZXk6MTExMTkwMTcsZGFya2toYWtpOjEyNDMzMjU5LGRhcmttYWdlbnRhOjkxMDk2NDMsZGFya29saXZlZ3JlZW46NTU5Nzk5OSxkYXJrb3JhbmdlOjE2NzQ3NTIwLGRhcmtvcmNoaWQ6MTAwNDAwMTIsZGFya3JlZDo5MTA5NTA0LGRhcmtzYWxtb246MTUzMDg0MTAsZGFya3NlYWdyZWVuOjk0MTk5MTksZGFya3NsYXRlYmx1ZTo0NzM0MzQ3LGRhcmtzbGF0ZWdyYXk6MzEwMDQ5NSxkYXJrc2xhdGVncmV5OjMxMDA0OTUsZGFya3R1cnF1b2lzZTo1Mjk0NSxkYXJrdmlvbGV0Ojk2OTk1MzksZGVlcHBpbms6MTY3MTY5NDcsZGVlcHNreWJsdWU6NDkxNTEsZGltZ3JheTo2OTA4MjY1LGRpbWdyZXk6NjkwODI2NSxkb2RnZXJibHVlOjIwMDMxOTksZmlyZWJyaWNrOjExNjc0MTQ2LGZsb3JhbHdoaXRlOjE2Nzc1OTIwLGZvcmVzdGdyZWVuOjIyNjM4NDIsZnVjaHNpYToxNjcxMTkzNSxnYWluc2Jvcm86MTQ0NzQ0NjAsZ2hvc3R3aGl0ZToxNjMxNjY3MSxnb2xkOjE2NzY2NzIwLGdvbGRlbnJvZDoxNDMyOTEyMCxncmF5Ojg0MjE1MDQsZ3JlZW46MzI3NjgsZ3JlZW55ZWxsb3c6MTE0MDMwNTUsZ3JleTo4NDIxNTA0LGhvbmV5ZGV3OjE1Nzk0MTYwLGhvdHBpbms6MTY3Mzg3NDAsaW5kaWFucmVkOjEzNDU4NTI0LGluZGlnbzo0OTE1MzMwLGl2b3J5OjE2Nzc3MjAwLGtoYWtpOjE1Nzg3NjYwLGxhdmVuZGVyOjE1MTMyNDEwLGxhdmVuZGVyYmx1c2g6MTY3NzMzNjUsbGF3bmdyZWVuOjgxOTA5NzYsbGVtb25jaGlmZm9uOjE2Nzc1ODg1LGxpZ2h0Ymx1ZToxMTM5MzI1NCxsaWdodGNvcmFsOjE1NzYxNTM2LGxpZ2h0Y3lhbjoxNDc0NTU5OSxsaWdodGdvbGRlbnJvZHllbGxvdzoxNjQ0ODIxMCxsaWdodGdyYXk6MTM4ODIzMjMsbGlnaHRncmVlbjo5NDk4MjU2LGxpZ2h0Z3JleToxMzg4MjMyMyxsaWdodHBpbms6MTY3NTg0NjUsbGlnaHRzYWxtb246MTY3NTI3NjIsbGlnaHRzZWFncmVlbjoyMTQyODkwLGxpZ2h0c2t5Ymx1ZTo4OTAwMzQ2LGxpZ2h0c2xhdGVncmF5Ojc4MzM3NTMsbGlnaHRzbGF0ZWdyZXk6NzgzMzc1MyxsaWdodHN0ZWVsYmx1ZToxMTU4NDczNCxsaWdodHllbGxvdzoxNjc3NzE4NCxsaW1lOjY1MjgwLGxpbWVncmVlbjozMzI5MzMwLGxpbmVuOjE2NDQ1NjcwLG1hZ2VudGE6MTY3MTE5MzUsbWFyb29uOjgzODg2MDgsbWVkaXVtYXF1YW1hcmluZTo2NzM3MzIyLG1lZGl1bWJsdWU6MjA1LG1lZGl1bW9yY2hpZDoxMjIxMTY2NyxtZWRpdW1wdXJwbGU6OTY2MjY4MyxtZWRpdW1zZWFncmVlbjozOTc4MDk3LG1lZGl1bXNsYXRlYmx1ZTo4MDg3NzkwLG1lZGl1bXNwcmluZ2dyZWVuOjY0MTU0LG1lZGl1bXR1cnF1b2lzZTo0NzcyMzAwLG1lZGl1bXZpb2xldHJlZDoxMzA0NzE3MyxtaWRuaWdodGJsdWU6MTY0NDkxMixtaW50Y3JlYW06MTYxMjE4NTAsbWlzdHlyb3NlOjE2NzcwMjczLG1vY2Nhc2luOjE2NzcwMjI5LG5hdmFqb3doaXRlOjE2NzY4Njg1LG5hdnk6MTI4LG9sZGxhY2U6MTY2NDM1NTgsb2xpdmU6ODQyMTM3NixvbGl2ZWRyYWI6NzA0ODczOSxvcmFuZ2U6MTY3NTM5MjAsb3JhbmdlcmVkOjE2NzI5MzQ0LG9yY2hpZDoxNDMxNTczNCxwYWxlZ29sZGVucm9kOjE1NjU3MTMwLHBhbGVncmVlbjoxMDAyNTg4MCxwYWxldHVycXVvaXNlOjExNTI5OTY2LHBhbGV2aW9sZXRyZWQ6MTQzODEyMDMscGFwYXlhd2hpcDoxNjc3MzA3NyxwZWFjaHB1ZmY6MTY3Njc2NzMscGVydToxMzQ2ODk5MSxwaW5rOjE2NzYxMDM1LHBsdW06MTQ1MjQ2MzcscG93ZGVyYmx1ZToxMTU5MTkxMCxwdXJwbGU6ODM4ODczNixyZWJlY2NhcHVycGxlOjY2OTc4ODEscmVkOjE2NzExNjgwLHJvc3licm93bjoxMjM1NzUxOSxyb3lhbGJsdWU6NDI4Njk0NSxzYWRkbGVicm93bjo5MTI3MTg3LHNhbG1vbjoxNjQxNjg4MixzYW5keWJyb3duOjE2MDMyODY0LHNlYWdyZWVuOjMwNTAzMjcsc2Vhc2hlbGw6MTY3NzQ2Mzgsc2llbm5hOjEwNTA2Nzk3LHNpbHZlcjoxMjYzMjI1Nixza3libHVlOjg5MDAzMzEsc2xhdGVibHVlOjY5NzAwNjEsc2xhdGVncmF5OjczNzI5NDQsc2xhdGVncmV5OjczNzI5NDQsc25vdzoxNjc3NTkzMCxzcHJpbmdncmVlbjo2NTQwNyxzdGVlbGJsdWU6NDYyMDk4MCx0YW46MTM4MDg3ODAsdGVhbDozMjg5Nix0aGlzdGxlOjE0MjA0ODg4LHRvbWF0bzoxNjczNzA5NSx0dXJxdW9pc2U6NDI1MTg1Nix2aW9sZXQ6MTU2MzEwODYsd2hlYXQ6MTYxMTMzMzEsd2hpdGU6MTY3NzcyMTUsd2hpdGVzbW9rZToxNjExOTI4NSx5ZWxsb3c6MTY3NzY5NjAseWVsbG93Z3JlZW46MTAxNDUwNzR9O2Z1bmN0aW9uIHZuKHQpe3ZhciBuO3JldHVybiB0PSh0KyIiKS50cmltKCkudG9Mb3dlckNhc2UoKSwobj1hbi5leGVjKHQpKT9uZXcgbW4oKG49cGFyc2VJbnQoblsxXSwxNikpPj44JjE1fG4+PjQmMjQwLG4+PjQmMTV8MjQwJm4sKDE1Jm4pPDw0fDE1Jm4sMSk6KG49dW4uZXhlYyh0KSk/Z24ocGFyc2VJbnQoblsxXSwxNikpOihuPWZuLmV4ZWModCkpP25ldyBtbihuWzFdLG5bMl0sblszXSwxKToobj1jbi5leGVjKHQpKT9uZXcgbW4oMjU1Km5bMV0vMTAwLDI1NSpuWzJdLzEwMCwyNTUqblszXS8xMDAsMSk6KG49c24uZXhlYyh0KSk/eW4oblsxXSxuWzJdLG5bM10sbls0XSk6KG49bG4uZXhlYyh0KSk/eW4oMjU1Km5bMV0vMTAwLDI1NSpuWzJdLzEwMCwyNTUqblszXS8xMDAsbls0XSk6KG49aG4uZXhlYyh0KSk/d24oblsxXSxuWzJdLzEwMCxuWzNdLzEwMCwxKToobj1kbi5leGVjKHQpKT93bihuWzFdLG5bMl0vMTAwLG5bM10vMTAwLG5bNF0pOnBuLmhhc093blByb3BlcnR5KHQpP2duKHBuW3RdKToidHJhbnNwYXJlbnQiPT09dD9uZXcgbW4oTmFOLE5hTixOYU4sMCk6bnVsbH1mdW5jdGlvbiBnbih0KXtyZXR1cm4gbmV3IG1uKHQ+PjE2JjI1NSx0Pj44JjI1NSwyNTUmdCwxKX1mdW5jdGlvbiB5bih0LG4sZSxyKXtyZXR1cm4gcjw9MCYmKHQ9bj1lPU5hTiksbmV3IG1uKHQsbixlLHIpfWZ1bmN0aW9uIF9uKHQpe3JldHVybiB0IGluc3RhbmNlb2Ygbm58fCh0PXZuKHQpKSx0P25ldyBtbigodD10LnJnYigpKS5yLHQuZyx0LmIsdC5vcGFjaXR5KTpuZXcgbW59ZnVuY3Rpb24gYm4odCxuLGUscil7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP19uKHQpOm5ldyBtbih0LG4sZSxudWxsPT1yPzE6cil9ZnVuY3Rpb24gbW4odCxuLGUscil7dGhpcy5yPSt0LHRoaXMuZz0rbix0aGlzLmI9K2UsdGhpcy5vcGFjaXR5PStyfWZ1bmN0aW9uIHhuKHQpe3JldHVybigodD1NYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHQpfHwwKSkpPDE2PyIwIjoiIikrdC50b1N0cmluZygxNil9ZnVuY3Rpb24gd24odCxuLGUscil7cmV0dXJuIHI8PTA/dD1uPWU9TmFOOmU8PTB8fGU+PTE/dD1uPU5hTjpuPD0wJiYodD1OYU4pLG5ldyBBbih0LG4sZSxyKX1mdW5jdGlvbiBNbih0LG4sZSxyKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/ZnVuY3Rpb24odCl7aWYodCBpbnN0YW5jZW9mIEFuKXJldHVybiBuZXcgQW4odC5oLHQucyx0LmwsdC5vcGFjaXR5KTtpZih0IGluc3RhbmNlb2Ygbm58fCh0PXZuKHQpKSwhdClyZXR1cm4gbmV3IEFuO2lmKHQgaW5zdGFuY2VvZiBBbilyZXR1cm4gdDt2YXIgbj0odD10LnJnYigpKS5yLzI1NSxlPXQuZy8yNTUscj10LmIvMjU1LGk9TWF0aC5taW4obixlLHIpLG89TWF0aC5tYXgobixlLHIpLGE9TmFOLHU9by1pLGY9KG8raSkvMjtyZXR1cm4gdT8oYT1uPT09bz8oZS1yKS91KzYqKGU8cik6ZT09PW8/KHItbikvdSsyOihuLWUpL3UrNCx1Lz1mPC41P28raToyLW8taSxhKj02MCk6dT1mPjAmJmY8MT8wOmEsbmV3IEFuKGEsdSxmLHQub3BhY2l0eSl9KHQpOm5ldyBBbih0LG4sZSxudWxsPT1yPzE6cil9ZnVuY3Rpb24gQW4odCxuLGUscil7dGhpcy5oPSt0LHRoaXMucz0rbix0aGlzLmw9K2UsdGhpcy5vcGFjaXR5PStyfWZ1bmN0aW9uIFRuKHQsbixlKXtyZXR1cm4gMjU1Kih0PDYwP24rKGUtbikqdC82MDp0PDE4MD9lOnQ8MjQwP24rKGUtbikqKDI0MC10KS82MDpuKX1LdChubix2bix7ZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZ2IoKS5kaXNwbGF5YWJsZSgpfSxoZXg6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZ2IoKS5oZXgoKX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZ2IoKSsiIn19KSxLdChtbixibix0bihubix7YnJpZ2h0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD8xLy43Ok1hdGgucG93KDEvLjcsdCksbmV3IG1uKHRoaXMucip0LHRoaXMuZyp0LHRoaXMuYip0LHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10Py43Ok1hdGgucG93KC43LHQpLG5ldyBtbih0aGlzLnIqdCx0aGlzLmcqdCx0aGlzLmIqdCx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gMDw9dGhpcy5yJiZ0aGlzLnI8PTI1NSYmMDw9dGhpcy5nJiZ0aGlzLmc8PTI1NSYmMDw9dGhpcy5iJiZ0aGlzLmI8PTI1NSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9LGhleDpmdW5jdGlvbigpe3JldHVybiIjIit4bih0aGlzLnIpK3huKHRoaXMuZykreG4odGhpcy5iKX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wYWNpdHk7cmV0dXJuKDE9PT0odD1pc05hTih0KT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSx0KSkpPyJyZ2IoIjoicmdiYSgiKStNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMucil8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5nKXx8MCkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLmIpfHwwKSkrKDE9PT10PyIpIjoiLCAiK3QrIikiKX19KSksS3QoQW4sTW4sdG4obm4se2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/MS8uNzpNYXRoLnBvdygxLy43LHQpLG5ldyBBbih0aGlzLmgsdGhpcy5zLHRoaXMubCp0LHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10Py43Ok1hdGgucG93KC43LHQpLG5ldyBBbih0aGlzLmgsdGhpcy5zLHRoaXMubCp0LHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciB0PXRoaXMuaCUzNjArMzYwKih0aGlzLmg8MCksbj1pc05hTih0KXx8aXNOYU4odGhpcy5zKT8wOnRoaXMucyxlPXRoaXMubCxyPWUrKGU8LjU/ZToxLWUpKm4saT0yKmUtcjtyZXR1cm4gbmV3IG1uKFRuKHQ+PTI0MD90LTI0MDp0KzEyMCxpLHIpLFRuKHQsaSxyKSxUbih0PDEyMD90KzI0MDp0LTEyMCxpLHIpLHRoaXMub3BhY2l0eSl9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuKDA8PXRoaXMucyYmdGhpcy5zPD0xfHxpc05hTih0aGlzLnMpKSYmMDw9dGhpcy5sJiZ0aGlzLmw8PTEmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfX0pKTt2YXIgTm49TWF0aC5QSS8xODAsU249MTgwL01hdGguUEksRW49Ljk2NDIyLGtuPTEsQ249LjgyNTIxLFBuPTQvMjksem49Ni8yOSxSbj0zKnpuKnpuLExuPXpuKnpuKnpuO2Z1bmN0aW9uIERuKHQpe2lmKHQgaW5zdGFuY2VvZiBxbilyZXR1cm4gbmV3IHFuKHQubCx0LmEsdC5iLHQub3BhY2l0eSk7aWYodCBpbnN0YW5jZW9mIGpuKXtpZihpc05hTih0LmgpKXJldHVybiBuZXcgcW4odC5sLDAsMCx0Lm9wYWNpdHkpO3ZhciBuPXQuaCpObjtyZXR1cm4gbmV3IHFuKHQubCxNYXRoLmNvcyhuKSp0LmMsTWF0aC5zaW4obikqdC5jLHQub3BhY2l0eSl9dCBpbnN0YW5jZW9mIG1ufHwodD1fbih0KSk7dmFyIGUscixpPUZuKHQuciksbz1Gbih0LmcpLGE9Rm4odC5iKSx1PU9uKCguMjIyNTA0NSppKy43MTY4Nzg2Km8rLjA2MDYxNjkqYSkva24pO3JldHVybiBpPT09byYmbz09PWE/ZT1yPXU6KGU9T24oKC40MzYwNzQ3KmkrLjM4NTA2NDkqbysuMTQzMDgwNCphKS9Fbikscj1PbigoLjAxMzkzMjIqaSsuMDk3MTA0NSpvKy43MTQxNzMzKmEpL0NuKSksbmV3IHFuKDExNip1LTE2LDUwMCooZS11KSwyMDAqKHUtciksdC5vcGFjaXR5KX1mdW5jdGlvbiBVbih0LG4sZSxyKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/RG4odCk6bmV3IHFuKHQsbixlLG51bGw9PXI/MTpyKX1mdW5jdGlvbiBxbih0LG4sZSxyKXt0aGlzLmw9K3QsdGhpcy5hPStuLHRoaXMuYj0rZSx0aGlzLm9wYWNpdHk9K3J9ZnVuY3Rpb24gT24odCl7cmV0dXJuIHQ+TG4/TWF0aC5wb3codCwxLzMpOnQvUm4rUG59ZnVuY3Rpb24gWW4odCl7cmV0dXJuIHQ+em4/dCp0KnQ6Um4qKHQtUG4pfWZ1bmN0aW9uIEJuKHQpe3JldHVybiAyNTUqKHQ8PS4wMDMxMzA4PzEyLjkyKnQ6MS4wNTUqTWF0aC5wb3codCwxLzIuNCktLjA1NSl9ZnVuY3Rpb24gRm4odCl7cmV0dXJuKHQvPTI1NSk8PS4wNDA0NT90LzEyLjkyOk1hdGgucG93KCh0Ky4wNTUpLzEuMDU1LDIuNCl9ZnVuY3Rpb24gSW4odCl7aWYodCBpbnN0YW5jZW9mIGpuKXJldHVybiBuZXcgam4odC5oLHQuYyx0LmwsdC5vcGFjaXR5KTtpZih0IGluc3RhbmNlb2YgcW58fCh0PURuKHQpKSwwPT09dC5hJiYwPT09dC5iKXJldHVybiBuZXcgam4oTmFOLDAsdC5sLHQub3BhY2l0eSk7dmFyIG49TWF0aC5hdGFuMih0LmIsdC5hKSpTbjtyZXR1cm4gbmV3IGpuKG48MD9uKzM2MDpuLE1hdGguc3FydCh0LmEqdC5hK3QuYip0LmIpLHQubCx0Lm9wYWNpdHkpfWZ1bmN0aW9uIEhuKHQsbixlLHIpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9Jbih0KTpuZXcgam4odCxuLGUsbnVsbD09cj8xOnIpfWZ1bmN0aW9uIGpuKHQsbixlLHIpe3RoaXMuaD0rdCx0aGlzLmM9K24sdGhpcy5sPStlLHRoaXMub3BhY2l0eT0rcn1LdChxbixVbix0bihubix7YnJpZ2h0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBxbih0aGlzLmwrMTgqKG51bGw9PXQ/MTp0KSx0aGlzLmEsdGhpcy5iLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IHFuKHRoaXMubC0xOCoobnVsbD09dD8xOnQpLHRoaXMuYSx0aGlzLmIsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIHQ9KHRoaXMubCsxNikvMTE2LG49aXNOYU4odGhpcy5hKT90OnQrdGhpcy5hLzUwMCxlPWlzTmFOKHRoaXMuYik/dDp0LXRoaXMuYi8yMDA7cmV0dXJuIG5ldyBtbihCbigzLjEzMzg1NjEqKG49RW4qWW4obikpLTEuNjE2ODY2NyoodD1rbipZbih0KSktLjQ5MDYxNDYqKGU9Q24qWW4oZSkpKSxCbigtLjk3ODc2ODQqbisxLjkxNjE0MTUqdCsuMDMzNDU0KmUpLEJuKC4wNzE5NDUzKm4tLjIyODk5MTQqdCsxLjQwNTI0MjcqZSksdGhpcy5vcGFjaXR5KX19KSksS3Qoam4sSG4sdG4obm4se2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgam4odGhpcy5oLHRoaXMuYyx0aGlzLmwrMTgqKG51bGw9PXQ/MTp0KSx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBqbih0aGlzLmgsdGhpcy5jLHRoaXMubC0xOCoobnVsbD09dD8xOnQpLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3JldHVybiBEbih0aGlzKS5yZ2IoKX19KSk7dmFyIFhuPS0uMTQ4NjEsR249MS43ODI3NyxWbj0tLjI5MjI3LCRuPS0uOTA2NDksV249MS45NzI5NCxabj1XbiokbixRbj1XbipHbixKbj1HbipWbi0kbipYbjtmdW5jdGlvbiBLbih0LG4sZSxyKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/ZnVuY3Rpb24odCl7aWYodCBpbnN0YW5jZW9mIHRlKXJldHVybiBuZXcgdGUodC5oLHQucyx0LmwsdC5vcGFjaXR5KTt0IGluc3RhbmNlb2YgbW58fCh0PV9uKHQpKTt2YXIgbj10LnIvMjU1LGU9dC5nLzI1NSxyPXQuYi8yNTUsaT0oSm4qcitabipuLVFuKmUpLyhKbitabi1Rbiksbz1yLWksYT0oV24qKGUtaSktVm4qbykvJG4sdT1NYXRoLnNxcnQoYSphK28qbykvKFduKmkqKDEtaSkpLGY9dT9NYXRoLmF0YW4yKGEsbykqU24tMTIwOk5hTjtyZXR1cm4gbmV3IHRlKGY8MD9mKzM2MDpmLHUsaSx0Lm9wYWNpdHkpfSh0KTpuZXcgdGUodCxuLGUsbnVsbD09cj8xOnIpfWZ1bmN0aW9uIHRlKHQsbixlLHIpe3RoaXMuaD0rdCx0aGlzLnM9K24sdGhpcy5sPStlLHRoaXMub3BhY2l0eT0rcn1mdW5jdGlvbiBuZSh0LG4sZSxyLGkpe3ZhciBvPXQqdCxhPW8qdDtyZXR1cm4oKDEtMyp0KzMqby1hKSpuKyg0LTYqbyszKmEpKmUrKDErMyp0KzMqby0zKmEpKnIrYSppKS82fWZ1bmN0aW9uIGVlKHQpe3ZhciBuPXQubGVuZ3RoLTE7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciByPWU8PTA/ZT0wOmU+PTE/KGU9MSxuLTEpOk1hdGguZmxvb3IoZSpuKSxpPXRbcl0sbz10W3IrMV0sYT1yPjA/dFtyLTFdOjIqaS1vLHU9cjxuLTE/dFtyKzJdOjIqby1pO3JldHVybiBuZSgoZS1yL24pKm4sYSxpLG8sdSl9fWZ1bmN0aW9uIHJlKHQpe3ZhciBuPXQubGVuZ3RoO3JldHVybiBmdW5jdGlvbihlKXt2YXIgcj1NYXRoLmZsb29yKCgoZSU9MSk8MD8rK2U6ZSkqbiksaT10WyhyK24tMSklbl0sbz10W3Ilbl0sYT10WyhyKzEpJW5dLHU9dFsocisyKSVuXTtyZXR1cm4gbmUoKGUtci9uKSpuLGksbyxhLHUpfX1mdW5jdGlvbiBpZSh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24gb2UodCxuKXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQrZSpufX1mdW5jdGlvbiBhZSh0LG4pe3ZhciBlPW4tdDtyZXR1cm4gZT9vZSh0LGU+MTgwfHxlPC0xODA/ZS0zNjAqTWF0aC5yb3VuZChlLzM2MCk6ZSk6aWUoaXNOYU4odCk/bjp0KX1mdW5jdGlvbiB1ZSh0KXtyZXR1cm4gMT09KHQ9K3QpP2ZlOmZ1bmN0aW9uKG4sZSl7cmV0dXJuIGUtbj9mdW5jdGlvbih0LG4sZSl7cmV0dXJuIHQ9TWF0aC5wb3codCxlKSxuPU1hdGgucG93KG4sZSktdCxlPTEvZSxmdW5jdGlvbihyKXtyZXR1cm4gTWF0aC5wb3codCtyKm4sZSl9fShuLGUsdCk6aWUoaXNOYU4obik/ZTpuKX19ZnVuY3Rpb24gZmUodCxuKXt2YXIgZT1uLXQ7cmV0dXJuIGU/b2UodCxlKTppZShpc05hTih0KT9uOnQpfUt0KHRlLEtuLHRuKG5uLHticmlnaHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10PzEvLjc6TWF0aC5wb3coMS8uNyx0KSxuZXcgdGUodGhpcy5oLHRoaXMucyx0aGlzLmwqdCx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD8uNzpNYXRoLnBvdyguNyx0KSxuZXcgdGUodGhpcy5oLHRoaXMucyx0aGlzLmwqdCx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXt2YXIgdD1pc05hTih0aGlzLmgpPzA6KHRoaXMuaCsxMjApKk5uLG49K3RoaXMubCxlPWlzTmFOKHRoaXMucyk/MDp0aGlzLnMqbiooMS1uKSxyPU1hdGguY29zKHQpLGk9TWF0aC5zaW4odCk7cmV0dXJuIG5ldyBtbigyNTUqKG4rZSooWG4qcitHbippKSksMjU1KihuK2UqKFZuKnIrJG4qaSkpLDI1NSoobitlKihXbipyKSksdGhpcy5vcGFjaXR5KX19KSk7dmFyIGNlPWZ1bmN0aW9uIHQobil7dmFyIGU9dWUobik7ZnVuY3Rpb24gcih0LG4pe3ZhciByPWUoKHQ9Ym4odCkpLnIsKG49Ym4obikpLnIpLGk9ZSh0Lmcsbi5nKSxvPWUodC5iLG4uYiksYT1mZSh0Lm9wYWNpdHksbi5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIHQucj1yKG4pLHQuZz1pKG4pLHQuYj1vKG4pLHQub3BhY2l0eT1hKG4pLHQrIiJ9fXJldHVybiByLmdhbW1hPXQscn0oMSk7ZnVuY3Rpb24gc2UodCl7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciBlLHIsaT1uLmxlbmd0aCxvPW5ldyBBcnJheShpKSxhPW5ldyBBcnJheShpKSx1PW5ldyBBcnJheShpKTtmb3IoZT0wO2U8aTsrK2Upcj1ibihuW2VdKSxvW2VdPXIucnx8MCxhW2VdPXIuZ3x8MCx1W2VdPXIuYnx8MDtyZXR1cm4gbz10KG8pLGE9dChhKSx1PXQodSksci5vcGFjaXR5PTEsZnVuY3Rpb24odCl7cmV0dXJuIHIucj1vKHQpLHIuZz1hKHQpLHIuYj11KHQpLHIrIiJ9fX12YXIgbGU9c2UoZWUpLGhlPXNlKHJlKTtmdW5jdGlvbiBkZSh0LG4pe3ZhciBlLHI9bj9uLmxlbmd0aDowLGk9dD9NYXRoLm1pbihyLHQubGVuZ3RoKTowLG89bmV3IEFycmF5KGkpLGE9bmV3IEFycmF5KHIpO2ZvcihlPTA7ZTxpOysrZSlvW2VdPW1lKHRbZV0sbltlXSk7Zm9yKDtlPHI7KytlKWFbZV09bltlXTtyZXR1cm4gZnVuY3Rpb24odCl7Zm9yKGU9MDtlPGk7KytlKWFbZV09b1tlXSh0KTtyZXR1cm4gYX19ZnVuY3Rpb24gcGUodCxuKXt2YXIgZT1uZXcgRGF0ZTtyZXR1cm4gbi09dD0rdCxmdW5jdGlvbihyKXtyZXR1cm4gZS5zZXRUaW1lKHQrbipyKSxlfX1mdW5jdGlvbiB2ZSh0LG4pe3JldHVybiBuLT10PSt0LGZ1bmN0aW9uKGUpe3JldHVybiB0K24qZX19ZnVuY3Rpb24gZ2UodCxuKXt2YXIgZSxyPXt9LGk9e307Zm9yKGUgaW4gbnVsbCE9PXQmJiJvYmplY3QiPT10eXBlb2YgdHx8KHQ9e30pLG51bGwhPT1uJiYib2JqZWN0Ij09dHlwZW9mIG58fChuPXt9KSxuKWUgaW4gdD9yW2VdPW1lKHRbZV0sbltlXSk6aVtlXT1uW2VdO3JldHVybiBmdW5jdGlvbih0KXtmb3IoZSBpbiByKWlbZV09cltlXSh0KTtyZXR1cm4gaX19dmFyIHllPS9bLStdPyg/OlxkK1wuP1xkKnxcLj9cZCspKD86W2VFXVstK10/XGQrKT8vZyxfZT1uZXcgUmVnRXhwKHllLnNvdXJjZSwiZyIpO2Z1bmN0aW9uIGJlKHQsbil7dmFyIGUscixpLG89eWUubGFzdEluZGV4PV9lLmxhc3RJbmRleD0wLGE9LTEsdT1bXSxmPVtdO2Zvcih0Kz0iIixuKz0iIjsoZT15ZS5leGVjKHQpKSYmKHI9X2UuZXhlYyhuKSk7KShpPXIuaW5kZXgpPm8mJihpPW4uc2xpY2UobyxpKSx1W2FdP3VbYV0rPWk6dVsrK2FdPWkpLChlPWVbMF0pPT09KHI9clswXSk/dVthXT91W2FdKz1yOnVbKythXT1yOih1WysrYV09bnVsbCxmLnB1c2goe2k6YSx4OnZlKGUscil9KSksbz1fZS5sYXN0SW5kZXg7cmV0dXJuIG88bi5sZW5ndGgmJihpPW4uc2xpY2UobyksdVthXT91W2FdKz1pOnVbKythXT1pKSx1Lmxlbmd0aDwyP2ZbMF0/ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiB0KG4pKyIifX0oZlswXS54KTpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19KG4pOihuPWYubGVuZ3RoLGZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyPTA7cjxuOysrcil1WyhlPWZbcl0pLmldPWUueCh0KTtyZXR1cm4gdS5qb2luKCIiKX0pfWZ1bmN0aW9uIG1lKHQsbil7dmFyIGUscj10eXBlb2YgbjtyZXR1cm4gbnVsbD09bnx8ImJvb2xlYW4iPT09cj9pZShuKTooIm51bWJlciI9PT1yP3ZlOiJzdHJpbmciPT09cj8oZT12bihuKSk/KG49ZSxjZSk6YmU6biBpbnN0YW5jZW9mIHZuP2NlOm4gaW5zdGFuY2VvZiBEYXRlP3BlOkFycmF5LmlzQXJyYXkobik/ZGU6ImZ1bmN0aW9uIiE9dHlwZW9mIG4udmFsdWVPZiYmImZ1bmN0aW9uIiE9dHlwZW9mIG4udG9TdHJpbmd8fGlzTmFOKG4pP2dlOnZlKSh0LG4pfWZ1bmN0aW9uIHhlKHQsbil7cmV0dXJuIG4tPXQ9K3QsZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGgucm91bmQodCtuKmUpfX12YXIgd2UsTWUsQWUsVGUsTmU9MTgwL01hdGguUEksU2U9e3RyYW5zbGF0ZVg6MCx0cmFuc2xhdGVZOjAscm90YXRlOjAsc2tld1g6MCxzY2FsZVg6MSxzY2FsZVk6MX07ZnVuY3Rpb24gRWUodCxuLGUscixpLG8pe3ZhciBhLHUsZjtyZXR1cm4oYT1NYXRoLnNxcnQodCp0K24qbikpJiYodC89YSxuLz1hKSwoZj10KmUrbipyKSYmKGUtPXQqZixyLT1uKmYpLCh1PU1hdGguc3FydChlKmUrcipyKSkmJihlLz11LHIvPXUsZi89dSksdCpyPG4qZSYmKHQ9LXQsbj0tbixmPS1mLGE9LWEpLHt0cmFuc2xhdGVYOmksdHJhbnNsYXRlWTpvLHJvdGF0ZTpNYXRoLmF0YW4yKG4sdCkqTmUsc2tld1g6TWF0aC5hdGFuKGYpKk5lLHNjYWxlWDphLHNjYWxlWTp1fX1mdW5jdGlvbiBrZSh0LG4sZSxyKXtmdW5jdGlvbiBpKHQpe3JldHVybiB0Lmxlbmd0aD90LnBvcCgpKyIgIjoiIn1yZXR1cm4gZnVuY3Rpb24obyxhKXt2YXIgdT1bXSxmPVtdO3JldHVybiBvPXQobyksYT10KGEpLGZ1bmN0aW9uKHQscixpLG8sYSx1KXtpZih0IT09aXx8ciE9PW8pe3ZhciBmPWEucHVzaCgidHJhbnNsYXRlKCIsbnVsbCxuLG51bGwsZSk7dS5wdXNoKHtpOmYtNCx4OnZlKHQsaSl9LHtpOmYtMix4OnZlKHIsbyl9KX1lbHNlKGl8fG8pJiZhLnB1c2goInRyYW5zbGF0ZSgiK2krbitvK2UpfShvLnRyYW5zbGF0ZVgsby50cmFuc2xhdGVZLGEudHJhbnNsYXRlWCxhLnRyYW5zbGF0ZVksdSxmKSxmdW5jdGlvbih0LG4sZSxvKXt0IT09bj8odC1uPjE4MD9uKz0zNjA6bi10PjE4MCYmKHQrPTM2MCksby5wdXNoKHtpOmUucHVzaChpKGUpKyJyb3RhdGUoIixudWxsLHIpLTIseDp2ZSh0LG4pfSkpOm4mJmUucHVzaChpKGUpKyJyb3RhdGUoIituK3IpfShvLnJvdGF0ZSxhLnJvdGF0ZSx1LGYpLGZ1bmN0aW9uKHQsbixlLG8pe3QhPT1uP28ucHVzaCh7aTplLnB1c2goaShlKSsic2tld1goIixudWxsLHIpLTIseDp2ZSh0LG4pfSk6biYmZS5wdXNoKGkoZSkrInNrZXdYKCIrbityKX0oby5za2V3WCxhLnNrZXdYLHUsZiksZnVuY3Rpb24odCxuLGUscixvLGEpe2lmKHQhPT1lfHxuIT09cil7dmFyIHU9by5wdXNoKGkobykrInNjYWxlKCIsbnVsbCwiLCIsbnVsbCwiKSIpO2EucHVzaCh7aTp1LTQseDp2ZSh0LGUpfSx7aTp1LTIseDp2ZShuLHIpfSl9ZWxzZSAxPT09ZSYmMT09PXJ8fG8ucHVzaChpKG8pKyJzY2FsZSgiK2UrIiwiK3IrIikiKX0oby5zY2FsZVgsby5zY2FsZVksYS5zY2FsZVgsYS5zY2FsZVksdSxmKSxvPWE9bnVsbCxmdW5jdGlvbih0KXtmb3IodmFyIG4sZT0tMSxyPWYubGVuZ3RoOysrZTxyOyl1WyhuPWZbZV0pLmldPW4ueCh0KTtyZXR1cm4gdS5qb2luKCIiKX19fXZhciBDZT1rZShmdW5jdGlvbih0KXtyZXR1cm4ibm9uZSI9PT10P1NlOih3ZXx8KHdlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpLE1lPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxBZT1kb2N1bWVudC5kZWZhdWx0Vmlldyksd2Uuc3R5bGUudHJhbnNmb3JtPXQsdD1BZS5nZXRDb21wdXRlZFN0eWxlKE1lLmFwcGVuZENoaWxkKHdlKSxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKCJ0cmFuc2Zvcm0iKSxNZS5yZW1vdmVDaGlsZCh3ZSksRWUoKyh0PXQuc2xpY2UoNywtMSkuc3BsaXQoIiwiKSlbMF0sK3RbMV0sK3RbMl0sK3RbM10sK3RbNF0sK3RbNV0pKX0sInB4LCAiLCJweCkiLCJkZWcpIiksUGU9a2UoZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/U2U6KFRlfHwoVGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImciKSksVGUuc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLHQpLCh0PVRlLnRyYW5zZm9ybS5iYXNlVmFsLmNvbnNvbGlkYXRlKCkpP0VlKCh0PXQubWF0cml4KS5hLHQuYix0LmMsdC5kLHQuZSx0LmYpOlNlKX0sIiwgIiwiKSIsIikiKSx6ZT1NYXRoLlNRUlQyLFJlPTIsTGU9NCxEZT0xZS0xMjtmdW5jdGlvbiBVZSh0KXtyZXR1cm4oKHQ9TWF0aC5leHAodCkpKzEvdCkvMn1mdW5jdGlvbiBxZSh0LG4pe3ZhciBlLHIsaT10WzBdLG89dFsxXSxhPXRbMl0sdT1uWzBdLGY9blsxXSxjPW5bMl0scz11LWksbD1mLW8saD1zKnMrbCpsO2lmKGg8RGUpcj1NYXRoLmxvZyhjL2EpL3plLGU9ZnVuY3Rpb24odCl7cmV0dXJuW2krdCpzLG8rdCpsLGEqTWF0aC5leHAoemUqdCpyKV19O2Vsc2V7dmFyIGQ9TWF0aC5zcXJ0KGgpLHA9KGMqYy1hKmErTGUqaCkvKDIqYSpSZSpkKSx2PShjKmMtYSphLUxlKmgpLygyKmMqUmUqZCksZz1NYXRoLmxvZyhNYXRoLnNxcnQocCpwKzEpLXApLHk9TWF0aC5sb2coTWF0aC5zcXJ0KHYqdisxKS12KTtyPSh5LWcpL3plLGU9ZnVuY3Rpb24odCl7dmFyIG4sZT10KnIsdT1VZShnKSxmPWEvKFJlKmQpKih1KihuPXplKmUrZywoKG49TWF0aC5leHAoMipuKSktMSkvKG4rMSkpLWZ1bmN0aW9uKHQpe3JldHVybigodD1NYXRoLmV4cCh0KSktMS90KS8yfShnKSk7cmV0dXJuW2krZipzLG8rZipsLGEqdS9VZSh6ZSplK2cpXX19cmV0dXJuIGUuZHVyYXRpb249MWUzKnIsZX1mdW5jdGlvbiBPZSh0KXtyZXR1cm4gZnVuY3Rpb24obixlKXt2YXIgcj10KChuPU1uKG4pKS5oLChlPU1uKGUpKS5oKSxpPWZlKG4ucyxlLnMpLG89ZmUobi5sLGUubCksYT1mZShuLm9wYWNpdHksZS5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIG4uaD1yKHQpLG4ucz1pKHQpLG4ubD1vKHQpLG4ub3BhY2l0eT1hKHQpLG4rIiJ9fX12YXIgWWU9T2UoYWUpLEJlPU9lKGZlKTtmdW5jdGlvbiBGZSh0KXtyZXR1cm4gZnVuY3Rpb24obixlKXt2YXIgcj10KChuPUhuKG4pKS5oLChlPUhuKGUpKS5oKSxpPWZlKG4uYyxlLmMpLG89ZmUobi5sLGUubCksYT1mZShuLm9wYWNpdHksZS5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIG4uaD1yKHQpLG4uYz1pKHQpLG4ubD1vKHQpLG4ub3BhY2l0eT1hKHQpLG4rIiJ9fX12YXIgSWU9RmUoYWUpLEhlPUZlKGZlKTtmdW5jdGlvbiBqZSh0KXtyZXR1cm4gZnVuY3Rpb24gbihlKXtmdW5jdGlvbiByKG4scil7dmFyIGk9dCgobj1LbihuKSkuaCwocj1LbihyKSkuaCksbz1mZShuLnMsci5zKSxhPWZlKG4ubCxyLmwpLHU9ZmUobi5vcGFjaXR5LHIub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBuLmg9aSh0KSxuLnM9byh0KSxuLmw9YShNYXRoLnBvdyh0LGUpKSxuLm9wYWNpdHk9dSh0KSxuKyIifX1yZXR1cm4gZT0rZSxyLmdhbW1hPW4scn0oMSl9dmFyIFhlPWplKGFlKSxHZT1qZShmZSk7dmFyIFZlLCRlLFdlPTAsWmU9MCxRZT0wLEplPTFlMyxLZT0wLHRyPTAsbnI9MCxlcj0ib2JqZWN0Ij09dHlwZW9mIHBlcmZvcm1hbmNlJiZwZXJmb3JtYW5jZS5ub3c/cGVyZm9ybWFuY2U6RGF0ZSxycj0ib2JqZWN0Ij09dHlwZW9mIHdpbmRvdyYmd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZT93aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lLmJpbmQod2luZG93KTpmdW5jdGlvbih0KXtzZXRUaW1lb3V0KHQsMTcpfTtmdW5jdGlvbiBpcigpe3JldHVybiB0cnx8KHJyKG9yKSx0cj1lci5ub3coKStucil9ZnVuY3Rpb24gb3IoKXt0cj0wfWZ1bmN0aW9uIGFyKCl7dGhpcy5fY2FsbD10aGlzLl90aW1lPXRoaXMuX25leHQ9bnVsbH1mdW5jdGlvbiB1cih0LG4sZSl7dmFyIHI9bmV3IGFyO3JldHVybiByLnJlc3RhcnQodCxuLGUpLHJ9ZnVuY3Rpb24gZnIoKXtpcigpLCsrV2U7Zm9yKHZhciB0LG49VmU7bjspKHQ9dHItbi5fdGltZSk+PTAmJm4uX2NhbGwuY2FsbChudWxsLHQpLG49bi5fbmV4dDstLVdlfWZ1bmN0aW9uIGNyKCl7dHI9KEtlPWVyLm5vdygpKStucixXZT1aZT0wO3RyeXtmcigpfWZpbmFsbHl7V2U9MCxmdW5jdGlvbigpe3ZhciB0LG4sZT1WZSxyPTEvMDtmb3IoO2U7KWUuX2NhbGw/KHI+ZS5fdGltZSYmKHI9ZS5fdGltZSksdD1lLGU9ZS5fbmV4dCk6KG49ZS5fbmV4dCxlLl9uZXh0PW51bGwsZT10P3QuX25leHQ9bjpWZT1uKTskZT10LGxyKHIpfSgpLHRyPTB9fWZ1bmN0aW9uIHNyKCl7dmFyIHQ9ZXIubm93KCksbj10LUtlO24+SmUmJihuci09bixLZT10KX1mdW5jdGlvbiBscih0KXtXZXx8KFplJiYoWmU9Y2xlYXJUaW1lb3V0KFplKSksdC10cj4yND8odDwxLzAmJihaZT1zZXRUaW1lb3V0KGNyLHQtZXIubm93KCktbnIpKSxRZSYmKFFlPWNsZWFySW50ZXJ2YWwoUWUpKSk6KFFlfHwoS2U9ZXIubm93KCksUWU9c2V0SW50ZXJ2YWwoc3IsSmUpKSxXZT0xLHJyKGNyKSkpfWZ1bmN0aW9uIGhyKHQsbixlKXt2YXIgcj1uZXcgYXI7cmV0dXJuIG49bnVsbD09bj8wOituLHIucmVzdGFydChmdW5jdGlvbihlKXtyLnN0b3AoKSx0KGUrbil9LG4sZSkscn1hci5wcm90b3R5cGU9dXIucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjphcixyZXN0YXJ0OmZ1bmN0aW9uKHQsbixlKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCJjYWxsYmFjayBpcyBub3QgYSBmdW5jdGlvbiIpO2U9KG51bGw9PWU/aXIoKTorZSkrKG51bGw9PW4/MDorbiksdGhpcy5fbmV4dHx8JGU9PT10aGlzfHwoJGU/JGUuX25leHQ9dGhpczpWZT10aGlzLCRlPXRoaXMpLHRoaXMuX2NhbGw9dCx0aGlzLl90aW1lPWUsbHIoKX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuX2NhbGwmJih0aGlzLl9jYWxsPW51bGwsdGhpcy5fdGltZT0xLzAsbHIoKSl9fTt2YXIgZHI9SSgic3RhcnQiLCJlbmQiLCJpbnRlcnJ1cHQiKSxwcj1bXSx2cj0wLGdyPTEseXI9Mixfcj0zLGJyPTQsbXI9NSx4cj02O2Z1bmN0aW9uIHdyKHQsbixlLHIsaSxvKXt2YXIgYT10Ll9fdHJhbnNpdGlvbjtpZihhKXtpZihlIGluIGEpcmV0dXJufWVsc2UgdC5fX3RyYW5zaXRpb249e307IWZ1bmN0aW9uKHQsbixlKXt2YXIgcixpPXQuX190cmFuc2l0aW9uO2Z1bmN0aW9uIG8oZil7dmFyIGMscyxsLGg7aWYoZS5zdGF0ZSE9PWdyKXJldHVybiB1KCk7Zm9yKGMgaW4gaSlpZigoaD1pW2NdKS5uYW1lPT09ZS5uYW1lKXtpZihoLnN0YXRlPT09X3IpcmV0dXJuIGhyKG8pO2guc3RhdGU9PT1icj8oaC5zdGF0ZT14cixoLnRpbWVyLnN0b3AoKSxoLm9uLmNhbGwoImludGVycnVwdCIsdCx0Ll9fZGF0YV9fLGguaW5kZXgsaC5ncm91cCksZGVsZXRlIGlbY10pOitjPG4mJihoLnN0YXRlPXhyLGgudGltZXIuc3RvcCgpLGRlbGV0ZSBpW2NdKX1pZihocihmdW5jdGlvbigpe2Uuc3RhdGU9PT1fciYmKGUuc3RhdGU9YnIsZS50aW1lci5yZXN0YXJ0KGEsZS5kZWxheSxlLnRpbWUpLGEoZikpfSksZS5zdGF0ZT15cixlLm9uLmNhbGwoInN0YXJ0Iix0LHQuX19kYXRhX18sZS5pbmRleCxlLmdyb3VwKSxlLnN0YXRlPT09eXIpe2ZvcihlLnN0YXRlPV9yLHI9bmV3IEFycmF5KGw9ZS50d2Vlbi5sZW5ndGgpLGM9MCxzPS0xO2M8bDsrK2MpKGg9ZS50d2VlbltjXS52YWx1ZS5jYWxsKHQsdC5fX2RhdGFfXyxlLmluZGV4LGUuZ3JvdXApKSYmKHJbKytzXT1oKTtyLmxlbmd0aD1zKzF9fWZ1bmN0aW9uIGEobil7Zm9yKHZhciBpPW48ZS5kdXJhdGlvbj9lLmVhc2UuY2FsbChudWxsLG4vZS5kdXJhdGlvbik6KGUudGltZXIucmVzdGFydCh1KSxlLnN0YXRlPW1yLDEpLG89LTEsYT1yLmxlbmd0aDsrK288YTspcltvXS5jYWxsKG51bGwsaSk7ZS5zdGF0ZT09PW1yJiYoZS5vbi5jYWxsKCJlbmQiLHQsdC5fX2RhdGFfXyxlLmluZGV4LGUuZ3JvdXApLHUoKSl9ZnVuY3Rpb24gdSgpe2Zvcih2YXIgciBpbiBlLnN0YXRlPXhyLGUudGltZXIuc3RvcCgpLGRlbGV0ZSBpW25dLGkpcmV0dXJuO2RlbGV0ZSB0Ll9fdHJhbnNpdGlvbn1pW25dPWUsZS50aW1lcj11cihmdW5jdGlvbih0KXtlLnN0YXRlPWdyLGUudGltZXIucmVzdGFydChvLGUuZGVsYXksZS50aW1lKSxlLmRlbGF5PD10JiZvKHQtZS5kZWxheSl9LDAsZS50aW1lKX0odCxlLHtuYW1lOm4saW5kZXg6cixncm91cDppLG9uOmRyLHR3ZWVuOnByLHRpbWU6by50aW1lLGRlbGF5Om8uZGVsYXksZHVyYXRpb246by5kdXJhdGlvbixlYXNlOm8uZWFzZSx0aW1lcjpudWxsLHN0YXRlOnZyfSl9ZnVuY3Rpb24gTXIodCxuKXt2YXIgZT1Ucih0LG4pO2lmKGUuc3RhdGU+dnIpdGhyb3cgbmV3IEVycm9yKCJ0b28gbGF0ZTsgYWxyZWFkeSBzY2hlZHVsZWQiKTtyZXR1cm4gZX1mdW5jdGlvbiBBcih0LG4pe3ZhciBlPVRyKHQsbik7aWYoZS5zdGF0ZT55cil0aHJvdyBuZXcgRXJyb3IoInRvbyBsYXRlOyBhbHJlYWR5IHN0YXJ0ZWQiKTtyZXR1cm4gZX1mdW5jdGlvbiBUcih0LG4pe3ZhciBlPXQuX190cmFuc2l0aW9uO2lmKCFlfHwhKGU9ZVtuXSkpdGhyb3cgbmV3IEVycm9yKCJ0cmFuc2l0aW9uIG5vdCBmb3VuZCIpO3JldHVybiBlfWZ1bmN0aW9uIE5yKHQsbil7dmFyIGUscixpLG89dC5fX3RyYW5zaXRpb24sYT0hMDtpZihvKXtmb3IoaSBpbiBuPW51bGw9PW4/bnVsbDpuKyIiLG8pKGU9b1tpXSkubmFtZT09PW4/KHI9ZS5zdGF0ZT55ciYmZS5zdGF0ZTxtcixlLnN0YXRlPXhyLGUudGltZXIuc3RvcCgpLHImJmUub24uY2FsbCgiaW50ZXJydXB0Iix0LHQuX19kYXRhX18sZS5pbmRleCxlLmdyb3VwKSxkZWxldGUgb1tpXSk6YT0hMTthJiZkZWxldGUgdC5fX3RyYW5zaXRpb259fWZ1bmN0aW9uIFNyKHQsbixlKXt2YXIgcj10Ll9pZDtyZXR1cm4gdC5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9QXIodGhpcyxyKTsodC52YWx1ZXx8KHQudmFsdWU9e30pKVtuXT1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pLGZ1bmN0aW9uKHQpe3JldHVybiBUcih0LHIpLnZhbHVlW25dfX1mdW5jdGlvbiBFcih0LG4pe3ZhciBlO3JldHVybigibnVtYmVyIj09dHlwZW9mIG4/dmU6biBpbnN0YW5jZW9mIHZuP2NlOihlPXZuKG4pKT8obj1lLGNlKTpiZSkodCxuKX12YXIga3I9THQucHJvdG90eXBlLmNvbnN0cnVjdG9yO3ZhciBDcj0wO2Z1bmN0aW9uIFByKHQsbixlLHIpe3RoaXMuX2dyb3Vwcz10LHRoaXMuX3BhcmVudHM9bix0aGlzLl9uYW1lPWUsdGhpcy5faWQ9cn1mdW5jdGlvbiB6cih0KXtyZXR1cm4gTHQoKS50cmFuc2l0aW9uKHQpfWZ1bmN0aW9uIFJyKCl7cmV0dXJuKytDcn12YXIgTHI9THQucHJvdG90eXBlO2Z1bmN0aW9uIERyKHQpe3JldHVybigodCo9Mik8PTE/dCp0Oi0tdCooMi10KSsxKS8yfWZ1bmN0aW9uIFVyKHQpe3JldHVybigodCo9Mik8PTE/dCp0KnQ6KHQtPTIpKnQqdCsyKS8yfVByLnByb3RvdHlwZT16ci5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlByLHNlbGVjdDpmdW5jdGlvbih0KXt2YXIgbj10aGlzLl9uYW1lLGU9dGhpcy5faWQ7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PVEodCkpO2Zvcih2YXIgcj10aGlzLl9ncm91cHMsaT1yLmxlbmd0aCxvPW5ldyBBcnJheShpKSxhPTA7YTxpOysrYSlmb3IodmFyIHUsZixjPXJbYV0scz1jLmxlbmd0aCxsPW9bYV09bmV3IEFycmF5KHMpLGg9MDtoPHM7KytoKSh1PWNbaF0pJiYoZj10LmNhbGwodSx1Ll9fZGF0YV9fLGgsYykpJiYoIl9fZGF0YV9fImluIHUmJihmLl9fZGF0YV9fPXUuX19kYXRhX18pLGxbaF09Zix3cihsW2hdLG4sZSxoLGwsVHIodSxlKSkpO3JldHVybiBuZXcgUHIobyx0aGlzLl9wYXJlbnRzLG4sZSl9LHNlbGVjdEFsbDpmdW5jdGlvbih0KXt2YXIgbj10aGlzLl9uYW1lLGU9dGhpcy5faWQ7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PUsodCkpO2Zvcih2YXIgcj10aGlzLl9ncm91cHMsaT1yLmxlbmd0aCxvPVtdLGE9W10sdT0wO3U8aTsrK3UpZm9yKHZhciBmLGM9clt1XSxzPWMubGVuZ3RoLGw9MDtsPHM7KytsKWlmKGY9Y1tsXSl7Zm9yKHZhciBoLGQ9dC5jYWxsKGYsZi5fX2RhdGFfXyxsLGMpLHA9VHIoZixlKSx2PTAsZz1kLmxlbmd0aDt2PGc7Kyt2KShoPWRbdl0pJiZ3cihoLG4sZSx2LGQscCk7by5wdXNoKGQpLGEucHVzaChmKX1yZXR1cm4gbmV3IFByKG8sYSxuLGUpfSxmaWx0ZXI6ZnVuY3Rpb24odCl7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PXJ0KHQpKTtmb3IodmFyIG49dGhpcy5fZ3JvdXBzLGU9bi5sZW5ndGgscj1uZXcgQXJyYXkoZSksaT0wO2k8ZTsrK2kpZm9yKHZhciBvLGE9bltpXSx1PWEubGVuZ3RoLGY9cltpXT1bXSxjPTA7Yzx1OysrYykobz1hW2NdKSYmdC5jYWxsKG8sby5fX2RhdGFfXyxjLGEpJiZmLnB1c2gobyk7cmV0dXJuIG5ldyBQcihyLHRoaXMuX3BhcmVudHMsdGhpcy5fbmFtZSx0aGlzLl9pZCl9LG1lcmdlOmZ1bmN0aW9uKHQpe2lmKHQuX2lkIT09dGhpcy5faWQpdGhyb3cgbmV3IEVycm9yO2Zvcih2YXIgbj10aGlzLl9ncm91cHMsZT10Ll9ncm91cHMscj1uLmxlbmd0aCxpPWUubGVuZ3RoLG89TWF0aC5taW4ocixpKSxhPW5ldyBBcnJheShyKSx1PTA7dTxvOysrdSlmb3IodmFyIGYsYz1uW3VdLHM9ZVt1XSxsPWMubGVuZ3RoLGg9YVt1XT1uZXcgQXJyYXkobCksZD0wO2Q8bDsrK2QpKGY9Y1tkXXx8c1tkXSkmJihoW2RdPWYpO2Zvcig7dTxyOysrdSlhW3VdPW5bdV07cmV0dXJuIG5ldyBQcihhLHRoaXMuX3BhcmVudHMsdGhpcy5fbmFtZSx0aGlzLl9pZCl9LHNlbGVjdGlvbjpmdW5jdGlvbigpe3JldHVybiBuZXcga3IodGhpcy5fZ3JvdXBzLHRoaXMuX3BhcmVudHMpfSx0cmFuc2l0aW9uOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuX25hbWUsbj10aGlzLl9pZCxlPVJyKCkscj10aGlzLl9ncm91cHMsaT1yLmxlbmd0aCxvPTA7bzxpOysrbylmb3IodmFyIGEsdT1yW29dLGY9dS5sZW5ndGgsYz0wO2M8ZjsrK2MpaWYoYT11W2NdKXt2YXIgcz1UcihhLG4pO3dyKGEsdCxlLGMsdSx7dGltZTpzLnRpbWUrcy5kZWxheStzLmR1cmF0aW9uLGRlbGF5OjAsZHVyYXRpb246cy5kdXJhdGlvbixlYXNlOnMuZWFzZX0pfXJldHVybiBuZXcgUHIocix0aGlzLl9wYXJlbnRzLHQsZSl9LGNhbGw6THIuY2FsbCxub2RlczpMci5ub2Rlcyxub2RlOkxyLm5vZGUsc2l6ZTpMci5zaXplLGVtcHR5OkxyLmVtcHR5LGVhY2g6THIuZWFjaCxvbjpmdW5jdGlvbih0LG4pe3ZhciBlPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDI/VHIodGhpcy5ub2RlKCksZSkub24ub24odCk6dGhpcy5lYWNoKGZ1bmN0aW9uKHQsbixlKXt2YXIgcixpLG89ZnVuY3Rpb24odCl7cmV0dXJuKHQrIiIpLnRyaW0oKS5zcGxpdCgvXnxccysvKS5ldmVyeShmdW5jdGlvbih0KXt2YXIgbj10LmluZGV4T2YoIi4iKTtyZXR1cm4gbj49MCYmKHQ9dC5zbGljZSgwLG4pKSwhdHx8InN0YXJ0Ij09PXR9KX0obik/TXI6QXI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9byh0aGlzLHQpLHU9YS5vbjt1IT09ciYmKGk9KHI9dSkuY29weSgpKS5vbihuLGUpLGEub249aX19KGUsdCxuKSl9LGF0dHI6ZnVuY3Rpb24odCxuKXt2YXIgZT0kKHQpLHI9InRyYW5zZm9ybSI9PT1lP1BlOkVyO3JldHVybiB0aGlzLmF0dHJUd2Vlbih0LCJmdW5jdGlvbiI9PXR5cGVvZiBuPyhlLmxvY2FsP2Z1bmN0aW9uKHQsbixlKXt2YXIgcixpLG87cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGEsdT1lKHRoaXMpO2lmKG51bGwhPXUpcmV0dXJuKGE9dGhpcy5nZXRBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpKT09PXU/bnVsbDphPT09ciYmdT09PWk/bzpvPW4ocj1hLGk9dSk7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpfX06ZnVuY3Rpb24odCxuLGUpe3ZhciByLGksbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYSx1PWUodGhpcyk7aWYobnVsbCE9dSlyZXR1cm4oYT10aGlzLmdldEF0dHJpYnV0ZSh0KSk9PT11P251bGw6YT09PXImJnU9PT1pP286bz1uKHI9YSxpPXUpO3RoaXMucmVtb3ZlQXR0cmlidXRlKHQpfX0pKGUscixTcih0aGlzLCJhdHRyLiIrdCxuKSk6bnVsbD09bj8oZS5sb2NhbD9mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCl9fTpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZSh0KX19KShlKTooZS5sb2NhbD9mdW5jdGlvbih0LG4sZSl7dmFyIHIsaTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz10aGlzLmdldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCk7cmV0dXJuIG89PT1lP251bGw6bz09PXI/aTppPW4ocj1vLGUpfX06ZnVuY3Rpb24odCxuLGUpe3ZhciByLGk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89dGhpcy5nZXRBdHRyaWJ1dGUodCk7cmV0dXJuIG89PT1lP251bGw6bz09PXI/aTppPW4ocj1vLGUpfX0pKGUscixuKyIiKSl9LGF0dHJUd2VlbjpmdW5jdGlvbih0LG4pe3ZhciBlPSJhdHRyLiIrdDtpZihhcmd1bWVudHMubGVuZ3RoPDIpcmV0dXJuKGU9dGhpcy50d2VlbihlKSkmJmUuX3ZhbHVlO2lmKG51bGw9PW4pcmV0dXJuIHRoaXMudHdlZW4oZSxudWxsKTtpZigiZnVuY3Rpb24iIT10eXBlb2Ygbil0aHJvdyBuZXcgRXJyb3I7dmFyIHI9JCh0KTtyZXR1cm4gdGhpcy50d2VlbihlLChyLmxvY2FsP2Z1bmN0aW9uKHQsbil7ZnVuY3Rpb24gZSgpe3ZhciBlPXRoaXMscj1uLmFwcGx5KGUsYXJndW1lbnRzKTtyZXR1cm4gciYmZnVuY3Rpb24obil7ZS5zZXRBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwscihuKSl9fXJldHVybiBlLl92YWx1ZT1uLGV9OmZ1bmN0aW9uKHQsbil7ZnVuY3Rpb24gZSgpe3ZhciBlPXRoaXMscj1uLmFwcGx5KGUsYXJndW1lbnRzKTtyZXR1cm4gciYmZnVuY3Rpb24obil7ZS5zZXRBdHRyaWJ1dGUodCxyKG4pKX19cmV0dXJuIGUuX3ZhbHVlPW4sZX0pKHIsbikpfSxzdHlsZTpmdW5jdGlvbih0LG4sZSl7dmFyIHI9InRyYW5zZm9ybSI9PSh0Kz0iIik/Q2U6RXI7cmV0dXJuIG51bGw9PW4/dGhpcy5zdHlsZVR3ZWVuKHQsZnVuY3Rpb24odCxuKXt2YXIgZSxyLGk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89bHQodGhpcyx0KSxhPSh0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpLGx0KHRoaXMsdCkpO3JldHVybiBvPT09YT9udWxsOm89PT1lJiZhPT09cj9pOmk9bihlPW8scj1hKX19KHQscikpLm9uKCJlbmQuc3R5bGUuIit0LGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCl9fSh0KSk6dGhpcy5zdHlsZVR3ZWVuKHQsImZ1bmN0aW9uIj09dHlwZW9mIG4/ZnVuY3Rpb24odCxuLGUpe3ZhciByLGksbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT1sdCh0aGlzLHQpLHU9ZSh0aGlzKTtyZXR1cm4gbnVsbD09dSYmKHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCksdT1sdCh0aGlzLHQpKSxhPT09dT9udWxsOmE9PT1yJiZ1PT09aT9vOm89bihyPWEsaT11KX19KHQscixTcih0aGlzLCJzdHlsZS4iK3QsbikpOmZ1bmN0aW9uKHQsbixlKXt2YXIgcixpO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPWx0KHRoaXMsdCk7cmV0dXJuIG89PT1lP251bGw6bz09PXI/aTppPW4ocj1vLGUpfX0odCxyLG4rIiIpLGUpfSxzdHlsZVR3ZWVuOmZ1bmN0aW9uKHQsbixlKXt2YXIgcj0ic3R5bGUuIisodCs9IiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8MilyZXR1cm4ocj10aGlzLnR3ZWVuKHIpKSYmci5fdmFsdWU7aWYobnVsbD09bilyZXR1cm4gdGhpcy50d2VlbihyLG51bGwpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBuKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdGhpcy50d2VlbihyLGZ1bmN0aW9uKHQsbixlKXtmdW5jdGlvbiByKCl7dmFyIHI9dGhpcyxpPW4uYXBwbHkocixhcmd1bWVudHMpO3JldHVybiBpJiZmdW5jdGlvbihuKXtyLnN0eWxlLnNldFByb3BlcnR5KHQsaShuKSxlKX19cmV0dXJuIHIuX3ZhbHVlPW4scn0odCxuLG51bGw9PWU/IiI6ZSkpfSx0ZXh0OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnR3ZWVuKCJ0ZXh0IiwiZnVuY3Rpb24iPT10eXBlb2YgdD9mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj10KHRoaXMpO3RoaXMudGV4dENvbnRlbnQ9bnVsbD09bj8iIjpufX0oU3IodGhpcywidGV4dCIsdCkpOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9dH19KG51bGw9PXQ/IiI6dCsiIikpfSxyZW1vdmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vbigiZW5kLnJlbW92ZSIsKHQ9dGhpcy5faWQsZnVuY3Rpb24oKXt2YXIgbj10aGlzLnBhcmVudE5vZGU7Zm9yKHZhciBlIGluIHRoaXMuX190cmFuc2l0aW9uKWlmKCtlIT09dClyZXR1cm47biYmbi5yZW1vdmVDaGlsZCh0aGlzKX0pKTt2YXIgdH0sdHdlZW46ZnVuY3Rpb24odCxuKXt2YXIgZT10aGlzLl9pZDtpZih0Kz0iIixhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcih2YXIgcixpPVRyKHRoaXMubm9kZSgpLGUpLnR3ZWVuLG89MCxhPWkubGVuZ3RoO288YTsrK28paWYoKHI9aVtvXSkubmFtZT09PXQpcmV0dXJuIHIudmFsdWU7cmV0dXJuIG51bGx9cmV0dXJuIHRoaXMuZWFjaCgobnVsbD09bj9mdW5jdGlvbih0LG4pe3ZhciBlLHI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGk9QXIodGhpcyx0KSxvPWkudHdlZW47aWYobyE9PWUpZm9yKHZhciBhPTAsdT0ocj1lPW8pLmxlbmd0aDthPHU7KythKWlmKHJbYV0ubmFtZT09PW4peyhyPXIuc2xpY2UoKSkuc3BsaWNlKGEsMSk7YnJlYWt9aS50d2Vlbj1yfX06ZnVuY3Rpb24odCxuLGUpe3ZhciByLGk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPUFyKHRoaXMsdCksYT1vLnR3ZWVuO2lmKGEhPT1yKXtpPShyPWEpLnNsaWNlKCk7Zm9yKHZhciB1PXtuYW1lOm4sdmFsdWU6ZX0sZj0wLGM9aS5sZW5ndGg7ZjxjOysrZilpZihpW2ZdLm5hbWU9PT1uKXtpW2ZdPXU7YnJlYWt9Zj09PWMmJmkucHVzaCh1KX1vLnR3ZWVuPWl9fSkoZSx0LG4pKX0sZGVsYXk6ZnVuY3Rpb24odCl7dmFyIG49dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKCgiZnVuY3Rpb24iPT10eXBlb2YgdD9mdW5jdGlvbih0LG4pe3JldHVybiBmdW5jdGlvbigpe01yKHRoaXMsdCkuZGVsYXk9K24uYXBwbHkodGhpcyxhcmd1bWVudHMpfX06ZnVuY3Rpb24odCxuKXtyZXR1cm4gbj0rbixmdW5jdGlvbigpe01yKHRoaXMsdCkuZGVsYXk9bn19KShuLHQpKTpUcih0aGlzLm5vZGUoKSxuKS5kZWxheX0sZHVyYXRpb246ZnVuY3Rpb24odCl7dmFyIG49dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKCgiZnVuY3Rpb24iPT10eXBlb2YgdD9mdW5jdGlvbih0LG4pe3JldHVybiBmdW5jdGlvbigpe0FyKHRoaXMsdCkuZHVyYXRpb249K24uYXBwbHkodGhpcyxhcmd1bWVudHMpfX06ZnVuY3Rpb24odCxuKXtyZXR1cm4gbj0rbixmdW5jdGlvbigpe0FyKHRoaXMsdCkuZHVyYXRpb249bn19KShuLHQpKTpUcih0aGlzLm5vZGUoKSxuKS5kdXJhdGlvbn0sZWFzZTpmdW5jdGlvbih0KXt2YXIgbj10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goZnVuY3Rpb24odCxuKXtpZigiZnVuY3Rpb24iIT10eXBlb2Ygbil0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIGZ1bmN0aW9uKCl7QXIodGhpcyx0KS5lYXNlPW59fShuLHQpKTpUcih0aGlzLm5vZGUoKSxuKS5lYXNlfX07dmFyIHFyPWZ1bmN0aW9uIHQobil7ZnVuY3Rpb24gZSh0KXtyZXR1cm4gTWF0aC5wb3codCxuKX1yZXR1cm4gbj0rbixlLmV4cG9uZW50PXQsZX0oMyksT3I9ZnVuY3Rpb24gdChuKXtmdW5jdGlvbiBlKHQpe3JldHVybiAxLU1hdGgucG93KDEtdCxuKX1yZXR1cm4gbj0rbixlLmV4cG9uZW50PXQsZX0oMyksWXI9ZnVuY3Rpb24gdChuKXtmdW5jdGlvbiBlKHQpe3JldHVybigodCo9Mik8PTE/TWF0aC5wb3codCxuKToyLU1hdGgucG93KDItdCxuKSkvMn1yZXR1cm4gbj0rbixlLmV4cG9uZW50PXQsZX0oMyksQnI9TWF0aC5QSSxGcj1Cci8yO2Z1bmN0aW9uIElyKHQpe3JldHVybigxLU1hdGguY29zKEJyKnQpKS8yfWZ1bmN0aW9uIEhyKHQpe3JldHVybigodCo9Mik8PTE/TWF0aC5wb3coMiwxMCp0LTEwKToyLU1hdGgucG93KDIsMTAtMTAqdCkpLzJ9ZnVuY3Rpb24ganIodCl7cmV0dXJuKCh0Kj0yKTw9MT8xLU1hdGguc3FydCgxLXQqdCk6TWF0aC5zcXJ0KDEtKHQtPTIpKnQpKzEpLzJ9dmFyIFhyPTQvMTEsR3I9Ni8xMSxWcj04LzExLCRyPS43NSxXcj05LzExLFpyPTEwLzExLFFyPS45Mzc1LEpyPTIxLzIyLEtyPTYzLzY0LHRpPTEvWHIvWHI7ZnVuY3Rpb24gbmkodCl7cmV0dXJuKHQ9K3QpPFhyP3RpKnQqdDp0PFZyP3RpKih0LT1HcikqdCskcjp0PFpyP3RpKih0LT1XcikqdCtRcjp0aSoodC09SnIpKnQrS3J9dmFyIGVpPWZ1bmN0aW9uIHQobil7ZnVuY3Rpb24gZSh0KXtyZXR1cm4gdCp0KigobisxKSp0LW4pfXJldHVybiBuPStuLGUub3ZlcnNob290PXQsZX0oMS43MDE1OCkscmk9ZnVuY3Rpb24gdChuKXtmdW5jdGlvbiBlKHQpe3JldHVybi0tdCp0KigobisxKSp0K24pKzF9cmV0dXJuIG49K24sZS5vdmVyc2hvb3Q9dCxlfSgxLjcwMTU4KSxpaT1mdW5jdGlvbiB0KG4pe2Z1bmN0aW9uIGUodCl7cmV0dXJuKCh0Kj0yKTwxP3QqdCooKG4rMSkqdC1uKToodC09MikqdCooKG4rMSkqdCtuKSsyKS8yfXJldHVybiBuPStuLGUub3ZlcnNob290PXQsZX0oMS43MDE1OCksb2k9MipNYXRoLlBJLGFpPWZ1bmN0aW9uIHQobixlKXt2YXIgcj1NYXRoLmFzaW4oMS8obj1NYXRoLm1heCgxLG4pKSkqKGUvPW9pKTtmdW5jdGlvbiBpKHQpe3JldHVybiBuKk1hdGgucG93KDIsMTAqLS10KSpNYXRoLnNpbigoci10KS9lKX1yZXR1cm4gaS5hbXBsaXR1ZGU9ZnVuY3Rpb24obil7cmV0dXJuIHQobixlKm9pKX0saS5wZXJpb2Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHQobixlKX0saX0oMSwuMyksdWk9ZnVuY3Rpb24gdChuLGUpe3ZhciByPU1hdGguYXNpbigxLyhuPU1hdGgubWF4KDEsbikpKSooZS89b2kpO2Z1bmN0aW9uIGkodCl7cmV0dXJuIDEtbipNYXRoLnBvdygyLC0xMCoodD0rdCkpKk1hdGguc2luKCh0K3IpL2UpfXJldHVybiBpLmFtcGxpdHVkZT1mdW5jdGlvbihuKXtyZXR1cm4gdChuLGUqb2kpfSxpLnBlcmlvZD1mdW5jdGlvbihlKXtyZXR1cm4gdChuLGUpfSxpfSgxLC4zKSxmaT1mdW5jdGlvbiB0KG4sZSl7dmFyIHI9TWF0aC5hc2luKDEvKG49TWF0aC5tYXgoMSxuKSkpKihlLz1vaSk7ZnVuY3Rpb24gaSh0KXtyZXR1cm4oKHQ9Mip0LTEpPDA/bipNYXRoLnBvdygyLDEwKnQpKk1hdGguc2luKChyLXQpL2UpOjItbipNYXRoLnBvdygyLC0xMCp0KSpNYXRoLnNpbigocit0KS9lKSkvMn1yZXR1cm4gaS5hbXBsaXR1ZGU9ZnVuY3Rpb24obil7cmV0dXJuIHQobixlKm9pKX0saS5wZXJpb2Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHQobixlKX0saX0oMSwuMyksY2k9e3RpbWU6bnVsbCxkZWxheTowLGR1cmF0aW9uOjI1MCxlYXNlOlVyfTtmdW5jdGlvbiBzaSh0LG4pe2Zvcih2YXIgZTshKGU9dC5fX3RyYW5zaXRpb24pfHwhKGU9ZVtuXSk7KWlmKCEodD10LnBhcmVudE5vZGUpKXJldHVybiBjaS50aW1lPWlyKCksY2k7cmV0dXJuIGV9THQucHJvdG90eXBlLmludGVycnVwdD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7TnIodGhpcyx0KX0pfSxMdC5wcm90b3R5cGUudHJhbnNpdGlvbj1mdW5jdGlvbih0KXt2YXIgbixlO3QgaW5zdGFuY2VvZiBQcj8obj10Ll9pZCx0PXQuX25hbWUpOihuPVJyKCksKGU9Y2kpLnRpbWU9aXIoKSx0PW51bGw9PXQ/bnVsbDp0KyIiKTtmb3IodmFyIHI9dGhpcy5fZ3JvdXBzLGk9ci5sZW5ndGgsbz0wO288aTsrK28pZm9yKHZhciBhLHU9cltvXSxmPXUubGVuZ3RoLGM9MDtjPGY7KytjKShhPXVbY10pJiZ3cihhLHQsbixjLHUsZXx8c2koYSxuKSk7cmV0dXJuIG5ldyBQcihyLHRoaXMuX3BhcmVudHMsdCxuKX07dmFyIGxpPVtudWxsXTtmdW5jdGlvbiBoaSh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24gZGkodCxuLGUpe3RoaXMudGFyZ2V0PXQsdGhpcy50eXBlPW4sdGhpcy5zZWxlY3Rpb249ZX1mdW5jdGlvbiBwaSgpe3QuZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9ZnVuY3Rpb24gdmkoKXt0LmV2ZW50LnByZXZlbnREZWZhdWx0KCksdC5ldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX12YXIgZ2k9e25hbWU6ImRyYWcifSx5aT17bmFtZToic3BhY2UifSxfaT17bmFtZToiaGFuZGxlIn0sYmk9e25hbWU6ImNlbnRlciJ9LG1pPXtuYW1lOiJ4IixoYW5kbGVzOlsiZSIsInciXS5tYXAoRWkpLGlucHV0OmZ1bmN0aW9uKHQsbil7cmV0dXJuIHQmJltbdFswXSxuWzBdWzFdXSxbdFsxXSxuWzFdWzFdXV19LG91dHB1dDpmdW5jdGlvbih0KXtyZXR1cm4gdCYmW3RbMF1bMF0sdFsxXVswXV19fSx4aT17bmFtZToieSIsaGFuZGxlczpbIm4iLCJzIl0ubWFwKEVpKSxpbnB1dDpmdW5jdGlvbih0LG4pe3JldHVybiB0JiZbW25bMF1bMF0sdFswXV0sW25bMV1bMF0sdFsxXV1dfSxvdXRwdXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHQmJlt0WzBdWzFdLHRbMV1bMV1dfX0sd2k9e25hbWU6Inh5IixoYW5kbGVzOlsibiIsImUiLCJzIiwidyIsIm53IiwibmUiLCJzZSIsInN3Il0ubWFwKEVpKSxpbnB1dDpmdW5jdGlvbih0KXtyZXR1cm4gdH0sb3V0cHV0OmZ1bmN0aW9uKHQpe3JldHVybiB0fX0sTWk9e292ZXJsYXk6ImNyb3NzaGFpciIsc2VsZWN0aW9uOiJtb3ZlIixuOiJucy1yZXNpemUiLGU6ImV3LXJlc2l6ZSIsczoibnMtcmVzaXplIix3OiJldy1yZXNpemUiLG53OiJud3NlLXJlc2l6ZSIsbmU6Im5lc3ctcmVzaXplIixzZToibndzZS1yZXNpemUiLHN3OiJuZXN3LXJlc2l6ZSJ9LEFpPXtlOiJ3Iix3OiJlIixudzoibmUiLG5lOiJudyIsc2U6InN3Iixzdzoic2UifSxUaT17bjoicyIsczoibiIsbnc6InN3IixuZToic2UiLHNlOiJuZSIsc3c6Im53In0sTmk9e292ZXJsYXk6MSxzZWxlY3Rpb246MSxuOm51bGwsZToxLHM6bnVsbCx3Oi0xLG53Oi0xLG5lOjEsc2U6MSxzdzotMX0sU2k9e292ZXJsYXk6MSxzZWxlY3Rpb246MSxuOi0xLGU6bnVsbCxzOjEsdzpudWxsLG53Oi0xLG5lOi0xLHNlOjEsc3c6MX07ZnVuY3Rpb24gRWkodCl7cmV0dXJue3R5cGU6dH19ZnVuY3Rpb24ga2koKXtyZXR1cm4hdC5ldmVudC5idXR0b259ZnVuY3Rpb24gQ2koKXt2YXIgdD10aGlzLm93bmVyU1ZHRWxlbWVudHx8dGhpcztyZXR1cm5bWzAsMF0sW3Qud2lkdGguYmFzZVZhbC52YWx1ZSx0LmhlaWdodC5iYXNlVmFsLnZhbHVlXV19ZnVuY3Rpb24gUGkodCl7Zm9yKDshdC5fX2JydXNoOylpZighKHQ9dC5wYXJlbnROb2RlKSlyZXR1cm47cmV0dXJuIHQuX19icnVzaH1mdW5jdGlvbiB6aSh0KXtyZXR1cm4gdFswXVswXT09PXRbMV1bMF18fHRbMF1bMV09PT10WzFdWzFdfWZ1bmN0aW9uIFJpKG4pe3ZhciBlLHI9Q2ksaT1raSxvPUkodSwic3RhcnQiLCJicnVzaCIsImVuZCIpLGE9NjtmdW5jdGlvbiB1KHQpe3ZhciBlPXQucHJvcGVydHkoIl9fYnJ1c2giLGgpLnNlbGVjdEFsbCgiLm92ZXJsYXkiKS5kYXRhKFtFaSgib3ZlcmxheSIpXSk7ZS5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIiwib3ZlcmxheSIpLmF0dHIoInBvaW50ZXItZXZlbnRzIiwiYWxsIikuYXR0cigiY3Vyc29yIixNaS5vdmVybGF5KS5tZXJnZShlKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9UGkodGhpcykuZXh0ZW50O0R0KHRoaXMpLmF0dHIoIngiLHRbMF1bMF0pLmF0dHIoInkiLHRbMF1bMV0pLmF0dHIoIndpZHRoIix0WzFdWzBdLXRbMF1bMF0pLmF0dHIoImhlaWdodCIsdFsxXVsxXS10WzBdWzFdKX0pLHQuc2VsZWN0QWxsKCIuc2VsZWN0aW9uIikuZGF0YShbRWkoInNlbGVjdGlvbiIpXSkuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJjbGFzcyIsInNlbGVjdGlvbiIpLmF0dHIoImN1cnNvciIsTWkuc2VsZWN0aW9uKS5hdHRyKCJmaWxsIiwiIzc3NyIpLmF0dHIoImZpbGwtb3BhY2l0eSIsLjMpLmF0dHIoInN0cm9rZSIsIiNmZmYiKS5hdHRyKCJzaGFwZS1yZW5kZXJpbmciLCJjcmlzcEVkZ2VzIik7dmFyIHI9dC5zZWxlY3RBbGwoIi5oYW5kbGUiKS5kYXRhKG4uaGFuZGxlcyxmdW5jdGlvbih0KXtyZXR1cm4gdC50eXBlfSk7ci5leGl0KCkucmVtb3ZlKCksci5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIixmdW5jdGlvbih0KXtyZXR1cm4iaGFuZGxlIGhhbmRsZS0tIit0LnR5cGV9KS5hdHRyKCJjdXJzb3IiLGZ1bmN0aW9uKHQpe3JldHVybiBNaVt0LnR5cGVdfSksdC5lYWNoKGYpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigicG9pbnRlci1ldmVudHMiLCJhbGwiKS5zdHlsZSgiLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yIiwicmdiYSgwLDAsMCwwKSIpLm9uKCJtb3VzZWRvd24uYnJ1c2ggdG91Y2hzdGFydC5icnVzaCIsbCl9ZnVuY3Rpb24gZigpe3ZhciB0PUR0KHRoaXMpLG49UGkodGhpcykuc2VsZWN0aW9uO24/KHQuc2VsZWN0QWxsKCIuc2VsZWN0aW9uIikuc3R5bGUoImRpc3BsYXkiLG51bGwpLmF0dHIoIngiLG5bMF1bMF0pLmF0dHIoInkiLG5bMF1bMV0pLmF0dHIoIndpZHRoIixuWzFdWzBdLW5bMF1bMF0pLmF0dHIoImhlaWdodCIsblsxXVsxXS1uWzBdWzFdKSx0LnNlbGVjdEFsbCgiLmhhbmRsZSIpLnN0eWxlKCJkaXNwbGF5IixudWxsKS5hdHRyKCJ4IixmdW5jdGlvbih0KXtyZXR1cm4iZSI9PT10LnR5cGVbdC50eXBlLmxlbmd0aC0xXT9uWzFdWzBdLWEvMjpuWzBdWzBdLWEvMn0pLmF0dHIoInkiLGZ1bmN0aW9uKHQpe3JldHVybiJzIj09PXQudHlwZVswXT9uWzFdWzFdLWEvMjpuWzBdWzFdLWEvMn0pLmF0dHIoIndpZHRoIixmdW5jdGlvbih0KXtyZXR1cm4ibiI9PT10LnR5cGV8fCJzIj09PXQudHlwZT9uWzFdWzBdLW5bMF1bMF0rYTphfSkuYXR0cigiaGVpZ2h0IixmdW5jdGlvbih0KXtyZXR1cm4iZSI9PT10LnR5cGV8fCJ3Ij09PXQudHlwZT9uWzFdWzFdLW5bMF1bMV0rYTphfSkpOnQuc2VsZWN0QWxsKCIuc2VsZWN0aW9uLC5oYW5kbGUiKS5zdHlsZSgiZGlzcGxheSIsIm5vbmUiKS5hdHRyKCJ4IixudWxsKS5hdHRyKCJ5IixudWxsKS5hdHRyKCJ3aWR0aCIsbnVsbCkuYXR0cigiaGVpZ2h0IixudWxsKX1mdW5jdGlvbiBjKHQsbil7cmV0dXJuIHQuX19icnVzaC5lbWl0dGVyfHxuZXcgcyh0LG4pfWZ1bmN0aW9uIHModCxuKXt0aGlzLnRoYXQ9dCx0aGlzLmFyZ3M9bix0aGlzLnN0YXRlPXQuX19icnVzaCx0aGlzLmFjdGl2ZT0wfWZ1bmN0aW9uIGwoKXtpZih0LmV2ZW50LnRvdWNoZXMpe2lmKHQuZXZlbnQuY2hhbmdlZFRvdWNoZXMubGVuZ3RoPHQuZXZlbnQudG91Y2hlcy5sZW5ndGgpcmV0dXJuIHZpKCl9ZWxzZSBpZihlKXJldHVybjtpZihpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl7dmFyIHIsbyxhLHUscyxsLGgsZCxwLHYsZyx5LF8sYj10aGlzLG09dC5ldmVudC50YXJnZXQuX19kYXRhX18udHlwZSx4PSJzZWxlY3Rpb24iPT09KHQuZXZlbnQubWV0YUtleT9tPSJvdmVybGF5IjptKT9naTp0LmV2ZW50LmFsdEtleT9iaTpfaSx3PW49PT14aT9udWxsOk5pW21dLE09bj09PW1pP251bGw6U2lbbV0sQT1QaShiKSxUPUEuZXh0ZW50LE49QS5zZWxlY3Rpb24sUz1UWzBdWzBdLEU9VFswXVsxXSxrPVRbMV1bMF0sQz1UWzFdWzFdLFA9dyYmTSYmdC5ldmVudC5zaGlmdEtleSx6PUZ0KGIpLFI9eixMPWMoYixhcmd1bWVudHMpLmJlZm9yZXN0YXJ0KCk7Im92ZXJsYXkiPT09bT9BLnNlbGVjdGlvbj1OPVtbcj1uPT09eGk/Uzp6WzBdLGE9bj09PW1pP0U6elsxXV0sW3M9bj09PXhpP2s6cixoPW49PT1taT9DOmFdXToocj1OWzBdWzBdLGE9TlswXVsxXSxzPU5bMV1bMF0saD1OWzFdWzFdKSxvPXIsdT1hLGw9cyxkPWg7dmFyIEQ9RHQoYikuYXR0cigicG9pbnRlci1ldmVudHMiLCJub25lIiksVT1ELnNlbGVjdEFsbCgiLm92ZXJsYXkiKS5hdHRyKCJjdXJzb3IiLE1pW21dKTtpZih0LmV2ZW50LnRvdWNoZXMpRC5vbigidG91Y2htb3ZlLmJydXNoIixPLCEwKS5vbigidG91Y2hlbmQuYnJ1c2ggdG91Y2hjYW5jZWwuYnJ1c2giLEIsITApO2Vsc2V7dmFyIHE9RHQodC5ldmVudC52aWV3KS5vbigia2V5ZG93bi5icnVzaCIsZnVuY3Rpb24oKXtzd2l0Y2godC5ldmVudC5rZXlDb2RlKXtjYXNlIDE2OlA9dyYmTTticmVhaztjYXNlIDE4Ong9PT1faSYmKHcmJihzPWwtcCp3LHI9bytwKncpLE0mJihoPWQtdipNLGE9dSt2Kk0pLHg9YmksWSgpKTticmVhaztjYXNlIDMyOnghPT1faSYmeCE9PWJpfHwodzwwP3M9bC1wOnc+MCYmKHI9by1wKSxNPDA/aD1kLXY6TT4wJiYoYT11LXYpLHg9eWksVS5hdHRyKCJjdXJzb3IiLE1pLnNlbGVjdGlvbiksWSgpKTticmVhaztkZWZhdWx0OnJldHVybn12aSgpfSwhMCkub24oImtleXVwLmJydXNoIixmdW5jdGlvbigpe3N3aXRjaCh0LmV2ZW50LmtleUNvZGUpe2Nhc2UgMTY6UCYmKHk9Xz1QPSExLFkoKSk7YnJlYWs7Y2FzZSAxODp4PT09YmkmJih3PDA/cz1sOnc+MCYmKHI9byksTTwwP2g9ZDpNPjAmJihhPXUpLHg9X2ksWSgpKTticmVhaztjYXNlIDMyOng9PT15aSYmKHQuZXZlbnQuYWx0S2V5Pyh3JiYocz1sLXAqdyxyPW8rcCp3KSxNJiYoaD1kLXYqTSxhPXUrdipNKSx4PWJpKToodzwwP3M9bDp3PjAmJihyPW8pLE08MD9oPWQ6TT4wJiYoYT11KSx4PV9pKSxVLmF0dHIoImN1cnNvciIsTWlbbV0pLFkoKSk7YnJlYWs7ZGVmYXVsdDpyZXR1cm59dmkoKX0sITApLm9uKCJtb3VzZW1vdmUuYnJ1c2giLE8sITApLm9uKCJtb3VzZXVwLmJydXNoIixCLCEwKTtYdCh0LmV2ZW50LnZpZXcpfXBpKCksTnIoYiksZi5jYWxsKGIpLEwuc3RhcnQoKX1mdW5jdGlvbiBPKCl7dmFyIHQ9RnQoYik7IVB8fHl8fF98fChNYXRoLmFicyh0WzBdLVJbMF0pPk1hdGguYWJzKHRbMV0tUlsxXSk/Xz0hMDp5PSEwKSxSPXQsZz0hMCx2aSgpLFkoKX1mdW5jdGlvbiBZKCl7dmFyIHQ7c3dpdGNoKHA9UlswXS16WzBdLHY9UlsxXS16WzFdLHgpe2Nhc2UgeWk6Y2FzZSBnaTp3JiYocD1NYXRoLm1heChTLXIsTWF0aC5taW4oay1zLHApKSxvPXIrcCxsPXMrcCksTSYmKHY9TWF0aC5tYXgoRS1hLE1hdGgubWluKEMtaCx2KSksdT1hK3YsZD1oK3YpO2JyZWFrO2Nhc2UgX2k6dzwwPyhwPU1hdGgubWF4KFMtcixNYXRoLm1pbihrLXIscCkpLG89citwLGw9cyk6dz4wJiYocD1NYXRoLm1heChTLXMsTWF0aC5taW4oay1zLHApKSxvPXIsbD1zK3ApLE08MD8odj1NYXRoLm1heChFLWEsTWF0aC5taW4oQy1hLHYpKSx1PWErdixkPWgpOk0+MCYmKHY9TWF0aC5tYXgoRS1oLE1hdGgubWluKEMtaCx2KSksdT1hLGQ9aCt2KTticmVhaztjYXNlIGJpOncmJihvPU1hdGgubWF4KFMsTWF0aC5taW4oayxyLXAqdykpLGw9TWF0aC5tYXgoUyxNYXRoLm1pbihrLHMrcCp3KSkpLE0mJih1PU1hdGgubWF4KEUsTWF0aC5taW4oQyxhLXYqTSkpLGQ9TWF0aC5tYXgoRSxNYXRoLm1pbihDLGgrdipNKSkpfWw8byYmKHcqPS0xLHQ9cixyPXMscz10LHQ9byxvPWwsbD10LG0gaW4gQWkmJlUuYXR0cigiY3Vyc29yIixNaVttPUFpW21dXSkpLGQ8dSYmKE0qPS0xLHQ9YSxhPWgsaD10LHQ9dSx1PWQsZD10LG0gaW4gVGkmJlUuYXR0cigiY3Vyc29yIixNaVttPVRpW21dXSkpLEEuc2VsZWN0aW9uJiYoTj1BLnNlbGVjdGlvbikseSYmKG89TlswXVswXSxsPU5bMV1bMF0pLF8mJih1PU5bMF1bMV0sZD1OWzFdWzFdKSxOWzBdWzBdPT09byYmTlswXVsxXT09PXUmJk5bMV1bMF09PT1sJiZOWzFdWzFdPT09ZHx8KEEuc2VsZWN0aW9uPVtbbyx1XSxbbCxkXV0sZi5jYWxsKGIpLEwuYnJ1c2goKSl9ZnVuY3Rpb24gQigpe2lmKHBpKCksdC5ldmVudC50b3VjaGVzKXtpZih0LmV2ZW50LnRvdWNoZXMubGVuZ3RoKXJldHVybjtlJiZjbGVhclRpbWVvdXQoZSksZT1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZT1udWxsfSw1MDApLEQub24oInRvdWNobW92ZS5icnVzaCB0b3VjaGVuZC5icnVzaCB0b3VjaGNhbmNlbC5icnVzaCIsbnVsbCl9ZWxzZSBHdCh0LmV2ZW50LnZpZXcsZykscS5vbigia2V5ZG93bi5icnVzaCBrZXl1cC5icnVzaCBtb3VzZW1vdmUuYnJ1c2ggbW91c2V1cC5icnVzaCIsbnVsbCk7RC5hdHRyKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpLFUuYXR0cigiY3Vyc29yIixNaS5vdmVybGF5KSxBLnNlbGVjdGlvbiYmKE49QS5zZWxlY3Rpb24pLHppKE4pJiYoQS5zZWxlY3Rpb249bnVsbCxmLmNhbGwoYikpLEwuZW5kKCl9fWZ1bmN0aW9uIGgoKXt2YXIgdD10aGlzLl9fYnJ1c2h8fHtzZWxlY3Rpb246bnVsbH07cmV0dXJuIHQuZXh0ZW50PXIuYXBwbHkodGhpcyxhcmd1bWVudHMpLHQuZGltPW4sdH1yZXR1cm4gdS5tb3ZlPWZ1bmN0aW9uKHQsZSl7dC5zZWxlY3Rpb24/dC5vbigic3RhcnQuYnJ1c2giLGZ1bmN0aW9uKCl7Yyh0aGlzLGFyZ3VtZW50cykuYmVmb3Jlc3RhcnQoKS5zdGFydCgpfSkub24oImludGVycnVwdC5icnVzaCBlbmQuYnJ1c2giLGZ1bmN0aW9uKCl7Yyh0aGlzLGFyZ3VtZW50cykuZW5kKCl9KS50d2VlbigiYnJ1c2giLGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxyPXQuX19icnVzaCxpPWModCxhcmd1bWVudHMpLG89ci5zZWxlY3Rpb24sYT1uLmlucHV0KCJmdW5jdGlvbiI9PXR5cGVvZiBlP2UuYXBwbHkodGhpcyxhcmd1bWVudHMpOmUsci5leHRlbnQpLHU9bWUobyxhKTtmdW5jdGlvbiBzKG4pe3Iuc2VsZWN0aW9uPTE9PT1uJiZ6aShhKT9udWxsOnUobiksZi5jYWxsKHQpLGkuYnJ1c2goKX1yZXR1cm4gbyYmYT9zOnMoMSl9KTp0LmVhY2goZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHMscj10aGlzLl9fYnJ1c2gsaT1uLmlucHV0KCJmdW5jdGlvbiI9PXR5cGVvZiBlP2UuYXBwbHkodGhpcyx0KTplLHIuZXh0ZW50KSxvPWModGhpcyx0KS5iZWZvcmVzdGFydCgpO05yKHRoaXMpLHIuc2VsZWN0aW9uPW51bGw9PWl8fHppKGkpP251bGw6aSxmLmNhbGwodGhpcyksby5zdGFydCgpLmJydXNoKCkuZW5kKCl9KX0scy5wcm90b3R5cGU9e2JlZm9yZXN0YXJ0OmZ1bmN0aW9uKCl7cmV0dXJuIDE9PSsrdGhpcy5hY3RpdmUmJih0aGlzLnN0YXRlLmVtaXR0ZXI9dGhpcyx0aGlzLnN0YXJ0aW5nPSEwKSx0aGlzfSxzdGFydDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN0YXJ0aW5nJiYodGhpcy5zdGFydGluZz0hMSx0aGlzLmVtaXQoInN0YXJ0IikpLHRoaXN9LGJydXNoOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZW1pdCgiYnJ1c2giKSx0aGlzfSxlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gMD09LS10aGlzLmFjdGl2ZSYmKGRlbGV0ZSB0aGlzLnN0YXRlLmVtaXR0ZXIsdGhpcy5lbWl0KCJlbmQiKSksdGhpc30sZW1pdDpmdW5jdGlvbih0KXtDdChuZXcgZGkodSx0LG4ub3V0cHV0KHRoaXMuc3RhdGUuc2VsZWN0aW9uKSksby5hcHBseSxvLFt0LHRoaXMudGhhdCx0aGlzLmFyZ3NdKX19LHUuZXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6aGkoW1srdFswXVswXSwrdFswXVsxXV0sWyt0WzFdWzBdLCt0WzFdWzFdXV0pLHUpOnJ9LHUuZmlsdGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6aGkoISF0KSx1KTppfSx1LmhhbmRsZVNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9K3QsdSk6YX0sdS5vbj1mdW5jdGlvbigpe3ZhciB0PW8ub24uYXBwbHkobyxhcmd1bWVudHMpO3JldHVybiB0PT09bz91OnR9LHV9dmFyIExpPU1hdGguY29zLERpPU1hdGguc2luLFVpPU1hdGguUEkscWk9VWkvMixPaT0yKlVpLFlpPU1hdGgubWF4O3ZhciBCaT1BcnJheS5wcm90b3R5cGUuc2xpY2U7ZnVuY3Rpb24gRmkodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fXZhciBJaT1NYXRoLlBJLEhpPTIqSWksamk9SGktMWUtNjtmdW5jdGlvbiBYaSgpe3RoaXMuX3gwPXRoaXMuX3kwPXRoaXMuX3gxPXRoaXMuX3kxPW51bGwsdGhpcy5fPSIifWZ1bmN0aW9uIEdpKCl7cmV0dXJuIG5ldyBYaX1mdW5jdGlvbiBWaSh0KXtyZXR1cm4gdC5zb3VyY2V9ZnVuY3Rpb24gJGkodCl7cmV0dXJuIHQudGFyZ2V0fWZ1bmN0aW9uIFdpKHQpe3JldHVybiB0LnJhZGl1c31mdW5jdGlvbiBaaSh0KXtyZXR1cm4gdC5zdGFydEFuZ2xlfWZ1bmN0aW9uIFFpKHQpe3JldHVybiB0LmVuZEFuZ2xlfVhpLnByb3RvdHlwZT1HaS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlhpLG1vdmVUbzpmdW5jdGlvbih0LG4pe3RoaXMuXys9Ik0iKyh0aGlzLl94MD10aGlzLl94MT0rdCkrIiwiKyh0aGlzLl95MD10aGlzLl95MT0rbil9LGNsb3NlUGF0aDpmdW5jdGlvbigpe251bGwhPT10aGlzLl94MSYmKHRoaXMuX3gxPXRoaXMuX3gwLHRoaXMuX3kxPXRoaXMuX3kwLHRoaXMuXys9IloiKX0sbGluZVRvOmZ1bmN0aW9uKHQsbil7dGhpcy5fKz0iTCIrKHRoaXMuX3gxPSt0KSsiLCIrKHRoaXMuX3kxPStuKX0scXVhZHJhdGljQ3VydmVUbzpmdW5jdGlvbih0LG4sZSxyKXt0aGlzLl8rPSJRIisgK3QrIiwiKyArbisiLCIrKHRoaXMuX3gxPStlKSsiLCIrKHRoaXMuX3kxPStyKX0sYmV6aWVyQ3VydmVUbzpmdW5jdGlvbih0LG4sZSxyLGksbyl7dGhpcy5fKz0iQyIrICt0KyIsIisgK24rIiwiKyArZSsiLCIrICtyKyIsIisodGhpcy5feDE9K2kpKyIsIisodGhpcy5feTE9K28pfSxhcmNUbzpmdW5jdGlvbih0LG4sZSxyLGkpe3Q9K3Qsbj0rbixlPStlLHI9K3IsaT0raTt2YXIgbz10aGlzLl94MSxhPXRoaXMuX3kxLHU9ZS10LGY9ci1uLGM9by10LHM9YS1uLGw9YypjK3MqcztpZihpPDApdGhyb3cgbmV3IEVycm9yKCJuZWdhdGl2ZSByYWRpdXM6ICIraSk7aWYobnVsbD09PXRoaXMuX3gxKXRoaXMuXys9Ik0iKyh0aGlzLl94MT10KSsiLCIrKHRoaXMuX3kxPW4pO2Vsc2UgaWYobD4xZS02KWlmKE1hdGguYWJzKHMqdS1mKmMpPjFlLTYmJmkpe3ZhciBoPWUtbyxkPXItYSxwPXUqdStmKmYsdj1oKmgrZCpkLGc9TWF0aC5zcXJ0KHApLHk9TWF0aC5zcXJ0KGwpLF89aSpNYXRoLnRhbigoSWktTWF0aC5hY29zKChwK2wtdikvKDIqZyp5KSkpLzIpLGI9Xy95LG09Xy9nO01hdGguYWJzKGItMSk+MWUtNiYmKHRoaXMuXys9IkwiKyh0K2IqYykrIiwiKyhuK2IqcykpLHRoaXMuXys9IkEiK2krIiwiK2krIiwwLDAsIisgKyhzKmg+YypkKSsiLCIrKHRoaXMuX3gxPXQrbSp1KSsiLCIrKHRoaXMuX3kxPW4rbSpmKX1lbHNlIHRoaXMuXys9IkwiKyh0aGlzLl94MT10KSsiLCIrKHRoaXMuX3kxPW4pO2Vsc2U7fSxhcmM6ZnVuY3Rpb24odCxuLGUscixpLG8pe3Q9K3Qsbj0rbjt2YXIgYT0oZT0rZSkqTWF0aC5jb3MociksdT1lKk1hdGguc2luKHIpLGY9dCthLGM9bit1LHM9MV5vLGw9bz9yLWk6aS1yO2lmKGU8MCl0aHJvdyBuZXcgRXJyb3IoIm5lZ2F0aXZlIHJhZGl1czogIitlKTtudWxsPT09dGhpcy5feDE/dGhpcy5fKz0iTSIrZisiLCIrYzooTWF0aC5hYnModGhpcy5feDEtZik+MWUtNnx8TWF0aC5hYnModGhpcy5feTEtYyk+MWUtNikmJih0aGlzLl8rPSJMIitmKyIsIitjKSxlJiYobDwwJiYobD1sJUhpK0hpKSxsPmppP3RoaXMuXys9IkEiK2UrIiwiK2UrIiwwLDEsIitzKyIsIisodC1hKSsiLCIrKG4tdSkrIkEiK2UrIiwiK2UrIiwwLDEsIitzKyIsIisodGhpcy5feDE9ZikrIiwiKyh0aGlzLl95MT1jKTpsPjFlLTYmJih0aGlzLl8rPSJBIitlKyIsIitlKyIsMCwiKyArKGw+PUlpKSsiLCIrcysiLCIrKHRoaXMuX3gxPXQrZSpNYXRoLmNvcyhpKSkrIiwiKyh0aGlzLl95MT1uK2UqTWF0aC5zaW4oaSkpKSl9LHJlY3Q6ZnVuY3Rpb24odCxuLGUscil7dGhpcy5fKz0iTSIrKHRoaXMuX3gwPXRoaXMuX3gxPSt0KSsiLCIrKHRoaXMuX3kwPXRoaXMuX3kxPStuKSsiaCIrICtlKyJ2IisgK3IrImgiKy1lKyJaIn0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ffX07ZnVuY3Rpb24gSmkoKXt9ZnVuY3Rpb24gS2kodCxuKXt2YXIgZT1uZXcgSmk7aWYodCBpbnN0YW5jZW9mIEppKXQuZWFjaChmdW5jdGlvbih0LG4pe2Uuc2V0KG4sdCl9KTtlbHNlIGlmKEFycmF5LmlzQXJyYXkodCkpe3ZhciByLGk9LTEsbz10Lmxlbmd0aDtpZihudWxsPT1uKWZvcig7KytpPG87KWUuc2V0KGksdFtpXSk7ZWxzZSBmb3IoOysraTxvOyllLnNldChuKHI9dFtpXSxpLHQpLHIpfWVsc2UgaWYodClmb3IodmFyIGEgaW4gdCllLnNldChhLHRbYV0pO3JldHVybiBlfWZ1bmN0aW9uIHRvKCl7cmV0dXJue319ZnVuY3Rpb24gbm8odCxuLGUpe3Rbbl09ZX1mdW5jdGlvbiBlbygpe3JldHVybiBLaSgpfWZ1bmN0aW9uIHJvKHQsbixlKXt0LnNldChuLGUpfWZ1bmN0aW9uIGlvKCl7fUppLnByb3RvdHlwZT1LaS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOkppLGhhczpmdW5jdGlvbih0KXtyZXR1cm4iJCIrdCBpbiB0aGlzfSxnZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXNbIiQiK3RdfSxzZXQ6ZnVuY3Rpb24odCxuKXtyZXR1cm4gdGhpc1siJCIrdF09bix0aGlzfSxyZW1vdmU6ZnVuY3Rpb24odCl7dmFyIG49IiQiK3Q7cmV0dXJuIG4gaW4gdGhpcyYmZGVsZXRlIHRoaXNbbl19LGNsZWFyOmZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMpIiQiPT09dFswXSYmZGVsZXRlIHRoaXNbdF19LGtleXM6ZnVuY3Rpb24oKXt2YXIgdD1bXTtmb3IodmFyIG4gaW4gdGhpcykiJCI9PT1uWzBdJiZ0LnB1c2gobi5zbGljZSgxKSk7cmV0dXJuIHR9LHZhbHVlczpmdW5jdGlvbigpe3ZhciB0PVtdO2Zvcih2YXIgbiBpbiB0aGlzKSIkIj09PW5bMF0mJnQucHVzaCh0aGlzW25dKTtyZXR1cm4gdH0sZW50cmllczpmdW5jdGlvbigpe3ZhciB0PVtdO2Zvcih2YXIgbiBpbiB0aGlzKSIkIj09PW5bMF0mJnQucHVzaCh7a2V5Om4uc2xpY2UoMSksdmFsdWU6dGhpc1tuXX0pO3JldHVybiB0fSxzaXplOmZ1bmN0aW9uKCl7dmFyIHQ9MDtmb3IodmFyIG4gaW4gdGhpcykiJCI9PT1uWzBdJiYrK3Q7cmV0dXJuIHR9LGVtcHR5OmZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMpaWYoIiQiPT09dFswXSlyZXR1cm4hMTtyZXR1cm4hMH0sZWFjaDpmdW5jdGlvbih0KXtmb3IodmFyIG4gaW4gdGhpcykiJCI9PT1uWzBdJiZ0KHRoaXNbbl0sbi5zbGljZSgxKSx0aGlzKX19O3ZhciBvbz1LaS5wcm90b3R5cGU7ZnVuY3Rpb24gYW8odCxuKXt2YXIgZT1uZXcgaW87aWYodCBpbnN0YW5jZW9mIGlvKXQuZWFjaChmdW5jdGlvbih0KXtlLmFkZCh0KX0pO2Vsc2UgaWYodCl7dmFyIHI9LTEsaT10Lmxlbmd0aDtpZihudWxsPT1uKWZvcig7KytyPGk7KWUuYWRkKHRbcl0pO2Vsc2UgZm9yKDsrK3I8aTspZS5hZGQobih0W3JdLHIsdCkpfXJldHVybiBlfWlvLnByb3RvdHlwZT1hby5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmlvLGhhczpvby5oYXMsYWRkOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzWyIkIisodCs9IiIpXT10LHRoaXN9LHJlbW92ZTpvby5yZW1vdmUsY2xlYXI6b28uY2xlYXIsdmFsdWVzOm9vLmtleXMsc2l6ZTpvby5zaXplLGVtcHR5Om9vLmVtcHR5LGVhY2g6b28uZWFjaH07dmFyIHVvPUFycmF5LnByb3RvdHlwZS5zbGljZTtmdW5jdGlvbiBmbyh0LG4pe3JldHVybiB0LW59ZnVuY3Rpb24gY28odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fWZ1bmN0aW9uIHNvKHQsbil7Zm9yKHZhciBlLHI9LTEsaT1uLmxlbmd0aDsrK3I8aTspaWYoZT1sbyh0LG5bcl0pKXJldHVybiBlO3JldHVybiAwfWZ1bmN0aW9uIGxvKHQsbil7Zm9yKHZhciBlPW5bMF0scj1uWzFdLGk9LTEsbz0wLGE9dC5sZW5ndGgsdT1hLTE7bzxhO3U9bysrKXt2YXIgZj10W29dLGM9ZlswXSxzPWZbMV0sbD10W3VdLGg9bFswXSxkPWxbMV07aWYoaG8oZixsLG4pKXJldHVybiAwO3M+ciE9ZD5yJiZlPChoLWMpKihyLXMpLyhkLXMpK2MmJihpPS1pKX1yZXR1cm4gaX1mdW5jdGlvbiBobyh0LG4sZSl7dmFyIHIsaSxvLGE7cmV0dXJuIGZ1bmN0aW9uKHQsbixlKXtyZXR1cm4oblswXS10WzBdKSooZVsxXS10WzFdKT09KGVbMF0tdFswXSkqKG5bMV0tdFsxXSl9KHQsbixlKSYmKGk9dFtyPSsodFswXT09PW5bMF0pXSxvPWVbcl0sYT1uW3JdLGk8PW8mJm88PWF8fGE8PW8mJm88PWkpfWZ1bmN0aW9uIHBvKCl7fXZhciB2bz1bW10sW1tbMSwxLjVdLFsuNSwxXV1dLFtbWzEuNSwxXSxbMSwxLjVdXV0sW1tbMS41LDFdLFsuNSwxXV1dLFtbWzEsLjVdLFsxLjUsMV1dXSxbW1sxLDEuNV0sWy41LDFdXSxbWzEsLjVdLFsxLjUsMV1dXSxbW1sxLC41XSxbMSwxLjVdXV0sW1tbMSwuNV0sWy41LDFdXV0sW1tbLjUsMV0sWzEsLjVdXV0sW1tbMSwxLjVdLFsxLC41XV1dLFtbWy41LDFdLFsxLC41XV0sW1sxLjUsMV0sWzEsMS41XV1dLFtbWzEuNSwxXSxbMSwuNV1dXSxbW1suNSwxXSxbMS41LDFdXV0sW1tbMSwxLjVdLFsxLjUsMV1dXSxbW1suNSwxXSxbMSwxLjVdXV0sW11dO2Z1bmN0aW9uIGdvKCl7dmFyIHQ9MSxuPTEsZT1NLHI9dTtmdW5jdGlvbiBpKHQpe3ZhciBuPWUodCk7aWYoQXJyYXkuaXNBcnJheShuKSluPW4uc2xpY2UoKS5zb3J0KGZvKTtlbHNle3ZhciByPXModCksaT1yWzBdLGE9clsxXTtuPXcoaSxhLG4pLG49ZyhNYXRoLmZsb29yKGkvbikqbixNYXRoLmZsb29yKGEvbikqbixuKX1yZXR1cm4gbi5tYXAoZnVuY3Rpb24obil7cmV0dXJuIG8odCxuKX0pfWZ1bmN0aW9uIG8oZSxpKXt2YXIgbz1bXSx1PVtdO3JldHVybiBmdW5jdGlvbihlLHIsaSl7dmFyIG8sdSxmLGMscyxsLGg9bmV3IEFycmF5LGQ9bmV3IEFycmF5O289dT0tMSxjPWVbMF0+PXIsdm9bYzw8MV0uZm9yRWFjaChwKTtmb3IoOysrbzx0LTE7KWY9YyxjPWVbbysxXT49cix2b1tmfGM8PDFdLmZvckVhY2gocCk7dm9bYzw8MF0uZm9yRWFjaChwKTtmb3IoOysrdTxuLTE7KXtmb3Iobz0tMSxjPWVbdSp0K3RdPj1yLHM9ZVt1KnRdPj1yLHZvW2M8PDF8czw8Ml0uZm9yRWFjaChwKTsrK288dC0xOylmPWMsYz1lW3UqdCt0K28rMV0+PXIsbD1zLHM9ZVt1KnQrbysxXT49cix2b1tmfGM8PDF8czw8MnxsPDwzXS5mb3JFYWNoKHApO3ZvW2N8czw8M10uZm9yRWFjaChwKX1vPS0xLHM9ZVt1KnRdPj1yLHZvW3M8PDJdLmZvckVhY2gocCk7Zm9yKDsrK288dC0xOylsPXMscz1lW3UqdCtvKzFdPj1yLHZvW3M8PDJ8bDw8M10uZm9yRWFjaChwKTtmdW5jdGlvbiBwKHQpe3ZhciBuLGUscj1bdFswXVswXStvLHRbMF1bMV0rdV0sZj1bdFsxXVswXStvLHRbMV1bMV0rdV0sYz1hKHIpLHM9YShmKTsobj1kW2NdKT8oZT1oW3NdKT8oZGVsZXRlIGRbbi5lbmRdLGRlbGV0ZSBoW2Uuc3RhcnRdLG49PT1lPyhuLnJpbmcucHVzaChmKSxpKG4ucmluZykpOmhbbi5zdGFydF09ZFtlLmVuZF09e3N0YXJ0Om4uc3RhcnQsZW5kOmUuZW5kLHJpbmc6bi5yaW5nLmNvbmNhdChlLnJpbmcpfSk6KGRlbGV0ZSBkW24uZW5kXSxuLnJpbmcucHVzaChmKSxkW24uZW5kPXNdPW4pOihuPWhbc10pPyhlPWRbY10pPyhkZWxldGUgaFtuLnN0YXJ0XSxkZWxldGUgZFtlLmVuZF0sbj09PWU/KG4ucmluZy5wdXNoKGYpLGkobi5yaW5nKSk6aFtlLnN0YXJ0XT1kW24uZW5kXT17c3RhcnQ6ZS5zdGFydCxlbmQ6bi5lbmQscmluZzplLnJpbmcuY29uY2F0KG4ucmluZyl9KTooZGVsZXRlIGhbbi5zdGFydF0sbi5yaW5nLnVuc2hpZnQociksaFtuLnN0YXJ0PWNdPW4pOmhbY109ZFtzXT17c3RhcnQ6YyxlbmQ6cyxyaW5nOltyLGZdfX12b1tzPDwzXS5mb3JFYWNoKHApfShlLGksZnVuY3Rpb24odCl7cih0LGUsaSksZnVuY3Rpb24odCl7Zm9yKHZhciBuPTAsZT10Lmxlbmd0aCxyPXRbZS0xXVsxXSp0WzBdWzBdLXRbZS0xXVswXSp0WzBdWzFdOysrbjxlOylyKz10W24tMV1bMV0qdFtuXVswXS10W24tMV1bMF0qdFtuXVsxXTtyZXR1cm4gcn0odCk+MD9vLnB1c2goW3RdKTp1LnB1c2godCl9KSx1LmZvckVhY2goZnVuY3Rpb24odCl7Zm9yKHZhciBuLGU9MCxyPW8ubGVuZ3RoO2U8cjsrK2UpaWYoLTEhPT1zbygobj1vW2VdKVswXSx0KSlyZXR1cm4gdm9pZCBuLnB1c2godCl9KSx7dHlwZToiTXVsdGlQb2x5Z29uIix2YWx1ZTppLGNvb3JkaW5hdGVzOm99fWZ1bmN0aW9uIGEobil7cmV0dXJuIDIqblswXStuWzFdKih0KzEpKjR9ZnVuY3Rpb24gdShlLHIsaSl7ZS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciBvLGE9ZVswXSx1PWVbMV0sZj0wfGEsYz0wfHUscz1yW2MqdCtmXTthPjAmJmE8dCYmZj09PWEmJihvPXJbYyp0K2YtMV0sZVswXT1hKyhpLW8pLyhzLW8pLS41KSx1PjAmJnU8biYmYz09PXUmJihvPXJbKGMtMSkqdCtmXSxlWzFdPXUrKGktbykvKHMtbyktLjUpfSl9cmV0dXJuIGkuY29udG91cj1vLGkuc2l6ZT1mdW5jdGlvbihlKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm5bdCxuXTt2YXIgcj1NYXRoLmNlaWwoZVswXSksbz1NYXRoLmNlaWwoZVsxXSk7aWYoIShyPjAmJm8+MCkpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHNpemUiKTtyZXR1cm4gdD1yLG49byxpfSxpLnRocmVzaG9sZHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpBcnJheS5pc0FycmF5KHQpP2NvKHVvLmNhbGwodCkpOmNvKHQpLGkpOmV9LGkuc21vb3RoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQ/dTpwbyxpKTpyPT09dX0saX1mdW5jdGlvbiB5byh0LG4sZSl7Zm9yKHZhciByPXQud2lkdGgsaT10LmhlaWdodCxvPTErKGU8PDEpLGE9MDthPGk7KythKWZvcih2YXIgdT0wLGY9MDt1PHIrZTsrK3UpdTxyJiYoZis9dC5kYXRhW3UrYSpyXSksdT49ZSYmKHU+PW8mJihmLT10LmRhdGFbdS1vK2Eqcl0pLG4uZGF0YVt1LWUrYSpyXT1mL01hdGgubWluKHUrMSxyLTErby11LG8pKX1mdW5jdGlvbiBfbyh0LG4sZSl7Zm9yKHZhciByPXQud2lkdGgsaT10LmhlaWdodCxvPTErKGU8PDEpLGE9MDthPHI7KythKWZvcih2YXIgdT0wLGY9MDt1PGkrZTsrK3UpdTxpJiYoZis9dC5kYXRhW2ErdSpyXSksdT49ZSYmKHU+PW8mJihmLT10LmRhdGFbYSsodS1vKSpyXSksbi5kYXRhW2ErKHUtZSkqcl09Zi9NYXRoLm1pbih1KzEsaS0xK28tdSxvKSl9ZnVuY3Rpb24gYm8odCl7cmV0dXJuIHRbMF19ZnVuY3Rpb24gbW8odCl7cmV0dXJuIHRbMV19ZnVuY3Rpb24geG8oKXtyZXR1cm4gMX12YXIgd289e30sTW89e30sQW89MzQsVG89MTAsTm89MTM7ZnVuY3Rpb24gU28odCl7cmV0dXJuIG5ldyBGdW5jdGlvbigiZCIsInJldHVybiB7Iit0Lm1hcChmdW5jdGlvbih0LG4pe3JldHVybiBKU09OLnN0cmluZ2lmeSh0KSsiOiBkWyIrbisiXSJ9KS5qb2luKCIsIikrIn0iKX1mdW5jdGlvbiBFbyh0KXt2YXIgbj1uZXcgUmVnRXhwKCdbIicrdCsiXG5ccl0iKSxlPXQuY2hhckNvZGVBdCgwKTtmdW5jdGlvbiByKHQsbil7dmFyIHIsaT1bXSxvPXQubGVuZ3RoLGE9MCx1PTAsZj1vPD0wLGM9ITE7ZnVuY3Rpb24gcygpe2lmKGYpcmV0dXJuIE1vO2lmKGMpcmV0dXJuIGM9ITEsd287dmFyIG4scixpPWE7aWYodC5jaGFyQ29kZUF0KGkpPT09QW8pe2Zvcig7YSsrPG8mJnQuY2hhckNvZGVBdChhKSE9PUFvfHx0LmNoYXJDb2RlQXQoKythKT09PUFvOyk7cmV0dXJuKG49YSk+PW8/Zj0hMDoocj10LmNoYXJDb2RlQXQoYSsrKSk9PT1Ubz9jPSEwOnI9PT1ObyYmKGM9ITAsdC5jaGFyQ29kZUF0KGEpPT09VG8mJisrYSksdC5zbGljZShpKzEsbi0xKS5yZXBsYWNlKC8iIi9nLCciJyl9Zm9yKDthPG87KXtpZigocj10LmNoYXJDb2RlQXQobj1hKyspKT09PVRvKWM9ITA7ZWxzZSBpZihyPT09Tm8pYz0hMCx0LmNoYXJDb2RlQXQoYSk9PT1UbyYmKythO2Vsc2UgaWYociE9PWUpY29udGludWU7cmV0dXJuIHQuc2xpY2UoaSxuKX1yZXR1cm4gZj0hMCx0LnNsaWNlKGksbyl9Zm9yKHQuY2hhckNvZGVBdChvLTEpPT09VG8mJi0tbyx0LmNoYXJDb2RlQXQoby0xKT09PU5vJiYtLW87KHI9cygpKSE9PU1vOyl7Zm9yKHZhciBsPVtdO3IhPT13byYmciE9PU1vOylsLnB1c2gocikscj1zKCk7biYmbnVsbD09KGw9bihsLHUrKykpfHxpLnB1c2gobCl9cmV0dXJuIGl9ZnVuY3Rpb24gaShuKXtyZXR1cm4gbi5tYXAobykuam9pbih0KX1mdW5jdGlvbiBvKHQpe3JldHVybiBudWxsPT10PyIiOm4udGVzdCh0Kz0iIik/JyInK3QucmVwbGFjZSgvIi9nLCciIicpKyciJzp0fXJldHVybntwYXJzZTpmdW5jdGlvbih0LG4pe3ZhciBlLGksbz1yKHQsZnVuY3Rpb24odCxyKXtpZihlKXJldHVybiBlKHQsci0xKTtpPXQsZT1uP2Z1bmN0aW9uKHQsbil7dmFyIGU9U28odCk7cmV0dXJuIGZ1bmN0aW9uKHIsaSl7cmV0dXJuIG4oZShyKSxpLHQpfX0odCxuKTpTbyh0KX0pO3JldHVybiBvLmNvbHVtbnM9aXx8W10sb30scGFyc2VSb3dzOnIsZm9ybWF0OmZ1bmN0aW9uKG4sZSl7cmV0dXJuIG51bGw9PWUmJihlPWZ1bmN0aW9uKHQpe3ZhciBuPU9iamVjdC5jcmVhdGUobnVsbCksZT1bXTtyZXR1cm4gdC5mb3JFYWNoKGZ1bmN0aW9uKHQpe2Zvcih2YXIgciBpbiB0KXIgaW4gbnx8ZS5wdXNoKG5bcl09cil9KSxlfShuKSksW2UubWFwKG8pLmpvaW4odCldLmNvbmNhdChuLm1hcChmdW5jdGlvbihuKXtyZXR1cm4gZS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIG8oblt0XSl9KS5qb2luKHQpfSkpLmpvaW4oIlxuIil9LGZvcm1hdFJvd3M6ZnVuY3Rpb24odCl7cmV0dXJuIHQubWFwKGkpLmpvaW4oIlxuIil9fX12YXIga289RW8oIiwiKSxDbz1rby5wYXJzZSxQbz1rby5wYXJzZVJvd3Msem89a28uZm9ybWF0LFJvPWtvLmZvcm1hdFJvd3MsTG89RW8oIlx0IiksRG89TG8ucGFyc2UsVW89TG8ucGFyc2VSb3dzLHFvPUxvLmZvcm1hdCxPbz1Mby5mb3JtYXRSb3dzO2Z1bmN0aW9uIFlvKHQpe2lmKCF0Lm9rKXRocm93IG5ldyBFcnJvcih0LnN0YXR1cysiICIrdC5zdGF0dXNUZXh0KTtyZXR1cm4gdC5ibG9iKCl9ZnVuY3Rpb24gQm8odCl7aWYoIXQub2spdGhyb3cgbmV3IEVycm9yKHQuc3RhdHVzKyIgIit0LnN0YXR1c1RleHQpO3JldHVybiB0LmFycmF5QnVmZmVyKCl9ZnVuY3Rpb24gRm8odCl7aWYoIXQub2spdGhyb3cgbmV3IEVycm9yKHQuc3RhdHVzKyIgIit0LnN0YXR1c1RleHQpO3JldHVybiB0LnRleHQoKX1mdW5jdGlvbiBJbyh0LG4pe3JldHVybiBmZXRjaCh0LG4pLnRoZW4oRm8pfWZ1bmN0aW9uIEhvKHQpe3JldHVybiBmdW5jdGlvbihuLGUscil7cmV0dXJuIDI9PT1hcmd1bWVudHMubGVuZ3RoJiYiZnVuY3Rpb24iPT10eXBlb2YgZSYmKHI9ZSxlPXZvaWQgMCksSW8obixlKS50aGVuKGZ1bmN0aW9uKG4pe3JldHVybiB0KG4scil9KX19dmFyIGpvPUhvKENvKSxYbz1IbyhEbyk7ZnVuY3Rpb24gR28odCl7aWYoIXQub2spdGhyb3cgbmV3IEVycm9yKHQuc3RhdHVzKyIgIit0LnN0YXR1c1RleHQpO3JldHVybiB0Lmpzb24oKX1mdW5jdGlvbiBWbyh0KXtyZXR1cm4gZnVuY3Rpb24obixlKXtyZXR1cm4gSW8obixlKS50aGVuKGZ1bmN0aW9uKG4pe3JldHVybihuZXcgRE9NUGFyc2VyKS5wYXJzZUZyb21TdHJpbmcobix0KX0pfX12YXIgJG89Vm8oImFwcGxpY2F0aW9uL3htbCIpLFdvPVZvKCJ0ZXh0L2h0bWwiKSxabz1WbygiaW1hZ2Uvc3ZnK3htbCIpO2Z1bmN0aW9uIFFvKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX1mdW5jdGlvbiBKbygpe3JldHVybiAxZS02KihNYXRoLnJhbmRvbSgpLS41KX1mdW5jdGlvbiBLbyh0LG4sZSxyKXtpZihpc05hTihuKXx8aXNOYU4oZSkpcmV0dXJuIHQ7dmFyIGksbyxhLHUsZixjLHMsbCxoLGQ9dC5fcm9vdCxwPXtkYXRhOnJ9LHY9dC5feDAsZz10Ll95MCx5PXQuX3gxLF89dC5feTE7aWYoIWQpcmV0dXJuIHQuX3Jvb3Q9cCx0O2Zvcig7ZC5sZW5ndGg7KWlmKChjPW4+PShvPSh2K3kpLzIpKT92PW86eT1vLChzPWU+PShhPShnK18pLzIpKT9nPWE6Xz1hLGk9ZCwhKGQ9ZFtsPXM8PDF8Y10pKXJldHVybiBpW2xdPXAsdDtpZih1PSt0Ll94LmNhbGwobnVsbCxkLmRhdGEpLGY9K3QuX3kuY2FsbChudWxsLGQuZGF0YSksbj09PXUmJmU9PT1mKXJldHVybiBwLm5leHQ9ZCxpP2lbbF09cDp0Ll9yb290PXAsdDtkb3tpPWk/aVtsXT1uZXcgQXJyYXkoNCk6dC5fcm9vdD1uZXcgQXJyYXkoNCksKGM9bj49KG89KHYreSkvMikpP3Y9bzp5PW8sKHM9ZT49KGE9KGcrXykvMikpP2c9YTpfPWF9d2hpbGUoKGw9czw8MXxjKT09KGg9KGY+PWEpPDwxfHU+PW8pKTtyZXR1cm4gaVtoXT1kLGlbbF09cCx0fWZ1bmN0aW9uIHRhKHQsbixlLHIsaSl7dGhpcy5ub2RlPXQsdGhpcy54MD1uLHRoaXMueTA9ZSx0aGlzLngxPXIsdGhpcy55MT1pfWZ1bmN0aW9uIG5hKHQpe3JldHVybiB0WzBdfWZ1bmN0aW9uIGVhKHQpe3JldHVybiB0WzFdfWZ1bmN0aW9uIHJhKHQsbixlKXt2YXIgcj1uZXcgaWEobnVsbD09bj9uYTpuLG51bGw9PWU/ZWE6ZSxOYU4sTmFOLE5hTixOYU4pO3JldHVybiBudWxsPT10P3I6ci5hZGRBbGwodCl9ZnVuY3Rpb24gaWEodCxuLGUscixpLG8pe3RoaXMuX3g9dCx0aGlzLl95PW4sdGhpcy5feDA9ZSx0aGlzLl95MD1yLHRoaXMuX3gxPWksdGhpcy5feTE9byx0aGlzLl9yb290PXZvaWQgMH1mdW5jdGlvbiBvYSh0KXtmb3IodmFyIG49e2RhdGE6dC5kYXRhfSxlPW47dD10Lm5leHQ7KWU9ZS5uZXh0PXtkYXRhOnQuZGF0YX07cmV0dXJuIG59dmFyIGFhPXJhLnByb3RvdHlwZT1pYS5wcm90b3R5cGU7ZnVuY3Rpb24gdWEodCl7cmV0dXJuIHQueCt0LnZ4fWZ1bmN0aW9uIGZhKHQpe3JldHVybiB0LnkrdC52eX1mdW5jdGlvbiBjYSh0KXtyZXR1cm4gdC5pbmRleH1mdW5jdGlvbiBzYSh0LG4pe3ZhciBlPXQuZ2V0KG4pO2lmKCFlKXRocm93IG5ldyBFcnJvcigibWlzc2luZzogIituKTtyZXR1cm4gZX1mdW5jdGlvbiBsYSh0KXtyZXR1cm4gdC54fWZ1bmN0aW9uIGhhKHQpe3JldHVybiB0Lnl9YWEuY29weT1mdW5jdGlvbigpe3ZhciB0LG4sZT1uZXcgaWEodGhpcy5feCx0aGlzLl95LHRoaXMuX3gwLHRoaXMuX3kwLHRoaXMuX3gxLHRoaXMuX3kxKSxyPXRoaXMuX3Jvb3Q7aWYoIXIpcmV0dXJuIGU7aWYoIXIubGVuZ3RoKXJldHVybiBlLl9yb290PW9hKHIpLGU7Zm9yKHQ9W3tzb3VyY2U6cix0YXJnZXQ6ZS5fcm9vdD1uZXcgQXJyYXkoNCl9XTtyPXQucG9wKCk7KWZvcih2YXIgaT0wO2k8NDsrK2kpKG49ci5zb3VyY2VbaV0pJiYobi5sZW5ndGg/dC5wdXNoKHtzb3VyY2U6bix0YXJnZXQ6ci50YXJnZXRbaV09bmV3IEFycmF5KDQpfSk6ci50YXJnZXRbaV09b2EobikpO3JldHVybiBlfSxhYS5hZGQ9ZnVuY3Rpb24odCl7dmFyIG49K3RoaXMuX3guY2FsbChudWxsLHQpLGU9K3RoaXMuX3kuY2FsbChudWxsLHQpO3JldHVybiBLbyh0aGlzLmNvdmVyKG4sZSksbixlLHQpfSxhYS5hZGRBbGw9ZnVuY3Rpb24odCl7dmFyIG4sZSxyLGksbz10Lmxlbmd0aCxhPW5ldyBBcnJheShvKSx1PW5ldyBBcnJheShvKSxmPTEvMCxjPTEvMCxzPS0xLzAsbD0tMS8wO2ZvcihlPTA7ZTxvOysrZSlpc05hTihyPSt0aGlzLl94LmNhbGwobnVsbCxuPXRbZV0pKXx8aXNOYU4oaT0rdGhpcy5feS5jYWxsKG51bGwsbikpfHwoYVtlXT1yLHVbZV09aSxyPGYmJihmPXIpLHI+cyYmKHM9ciksaTxjJiYoYz1pKSxpPmwmJihsPWkpKTtmb3IoczxmJiYoZj10aGlzLl94MCxzPXRoaXMuX3gxKSxsPGMmJihjPXRoaXMuX3kwLGw9dGhpcy5feTEpLHRoaXMuY292ZXIoZixjKS5jb3ZlcihzLGwpLGU9MDtlPG87KytlKUtvKHRoaXMsYVtlXSx1W2VdLHRbZV0pO3JldHVybiB0aGlzfSxhYS5jb3Zlcj1mdW5jdGlvbih0LG4pe2lmKGlzTmFOKHQ9K3QpfHxpc05hTihuPStuKSlyZXR1cm4gdGhpczt2YXIgZT10aGlzLl94MCxyPXRoaXMuX3kwLGk9dGhpcy5feDEsbz10aGlzLl95MTtpZihpc05hTihlKSlpPShlPU1hdGguZmxvb3IodCkpKzEsbz0ocj1NYXRoLmZsb29yKG4pKSsxO2Vsc2V7aWYoIShlPnR8fHQ+aXx8cj5ufHxuPm8pKXJldHVybiB0aGlzO3ZhciBhLHUsZj1pLWUsYz10aGlzLl9yb290O3N3aXRjaCh1PShuPChyK28pLzIpPDwxfHQ8KGUraSkvMil7Y2FzZSAwOmRveyhhPW5ldyBBcnJheSg0KSlbdV09YyxjPWF9d2hpbGUobz1yKyhmKj0yKSx0PihpPWUrZil8fG4+byk7YnJlYWs7Y2FzZSAxOmRveyhhPW5ldyBBcnJheSg0KSlbdV09YyxjPWF9d2hpbGUobz1yKyhmKj0yKSwoZT1pLWYpPnR8fG4+byk7YnJlYWs7Y2FzZSAyOmRveyhhPW5ldyBBcnJheSg0KSlbdV09YyxjPWF9d2hpbGUocj1vLShmKj0yKSx0PihpPWUrZil8fHI+bik7YnJlYWs7Y2FzZSAzOmRveyhhPW5ldyBBcnJheSg0KSlbdV09YyxjPWF9d2hpbGUocj1vLShmKj0yKSwoZT1pLWYpPnR8fHI+bil9dGhpcy5fcm9vdCYmdGhpcy5fcm9vdC5sZW5ndGgmJih0aGlzLl9yb290PWMpfXJldHVybiB0aGlzLl94MD1lLHRoaXMuX3kwPXIsdGhpcy5feDE9aSx0aGlzLl95MT1vLHRoaXN9LGFhLmRhdGE9ZnVuY3Rpb24oKXt2YXIgdD1bXTtyZXR1cm4gdGhpcy52aXNpdChmdW5jdGlvbihuKXtpZighbi5sZW5ndGgpZG97dC5wdXNoKG4uZGF0YSl9d2hpbGUobj1uLm5leHQpfSksdH0sYWEuZXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuY292ZXIoK3RbMF1bMF0sK3RbMF1bMV0pLmNvdmVyKCt0WzFdWzBdLCt0WzFdWzFdKTppc05hTih0aGlzLl94MCk/dm9pZCAwOltbdGhpcy5feDAsdGhpcy5feTBdLFt0aGlzLl94MSx0aGlzLl95MV1dfSxhYS5maW5kPWZ1bmN0aW9uKHQsbixlKXt2YXIgcixpLG8sYSx1LGYsYyxzPXRoaXMuX3gwLGw9dGhpcy5feTAsaD10aGlzLl94MSxkPXRoaXMuX3kxLHA9W10sdj10aGlzLl9yb290O2Zvcih2JiZwLnB1c2gobmV3IHRhKHYscyxsLGgsZCkpLG51bGw9PWU/ZT0xLzA6KHM9dC1lLGw9bi1lLGg9dCtlLGQ9bitlLGUqPWUpO2Y9cC5wb3AoKTspaWYoISghKHY9Zi5ub2RlKXx8KGk9Zi54MCk+aHx8KG89Zi55MCk+ZHx8KGE9Zi54MSk8c3x8KHU9Zi55MSk8bCkpaWYodi5sZW5ndGgpe3ZhciBnPShpK2EpLzIseT0obyt1KS8yO3AucHVzaChuZXcgdGEodlszXSxnLHksYSx1KSxuZXcgdGEodlsyXSxpLHksZyx1KSxuZXcgdGEodlsxXSxnLG8sYSx5KSxuZXcgdGEodlswXSxpLG8sZyx5KSksKGM9KG4+PXkpPDwxfHQ+PWcpJiYoZj1wW3AubGVuZ3RoLTFdLHBbcC5sZW5ndGgtMV09cFtwLmxlbmd0aC0xLWNdLHBbcC5sZW5ndGgtMS1jXT1mKX1lbHNle3ZhciBfPXQtK3RoaXMuX3guY2FsbChudWxsLHYuZGF0YSksYj1uLSt0aGlzLl95LmNhbGwobnVsbCx2LmRhdGEpLG09XypfK2IqYjtpZihtPGUpe3ZhciB4PU1hdGguc3FydChlPW0pO3M9dC14LGw9bi14LGg9dCt4LGQ9bit4LHI9di5kYXRhfX1yZXR1cm4gcn0sYWEucmVtb3ZlPWZ1bmN0aW9uKHQpe2lmKGlzTmFOKG89K3RoaXMuX3guY2FsbChudWxsLHQpKXx8aXNOYU4oYT0rdGhpcy5feS5jYWxsKG51bGwsdCkpKXJldHVybiB0aGlzO3ZhciBuLGUscixpLG8sYSx1LGYsYyxzLGwsaCxkPXRoaXMuX3Jvb3QscD10aGlzLl94MCx2PXRoaXMuX3kwLGc9dGhpcy5feDEseT10aGlzLl95MTtpZighZClyZXR1cm4gdGhpcztpZihkLmxlbmd0aClmb3IoOzspe2lmKChjPW8+PSh1PShwK2cpLzIpKT9wPXU6Zz11LChzPWE+PShmPSh2K3kpLzIpKT92PWY6eT1mLG49ZCwhKGQ9ZFtsPXM8PDF8Y10pKXJldHVybiB0aGlzO2lmKCFkLmxlbmd0aClicmVhazsobltsKzEmM118fG5bbCsyJjNdfHxuW2wrMyYzXSkmJihlPW4saD1sKX1mb3IoO2QuZGF0YSE9PXQ7KWlmKHI9ZCwhKGQ9ZC5uZXh0KSlyZXR1cm4gdGhpcztyZXR1cm4oaT1kLm5leHQpJiZkZWxldGUgZC5uZXh0LHI/KGk/ci5uZXh0PWk6ZGVsZXRlIHIubmV4dCx0aGlzKTpuPyhpP25bbF09aTpkZWxldGUgbltsXSwoZD1uWzBdfHxuWzFdfHxuWzJdfHxuWzNdKSYmZD09PShuWzNdfHxuWzJdfHxuWzFdfHxuWzBdKSYmIWQubGVuZ3RoJiYoZT9lW2hdPWQ6dGhpcy5fcm9vdD1kKSx0aGlzKToodGhpcy5fcm9vdD1pLHRoaXMpfSxhYS5yZW1vdmVBbGw9ZnVuY3Rpb24odCl7Zm9yKHZhciBuPTAsZT10Lmxlbmd0aDtuPGU7KytuKXRoaXMucmVtb3ZlKHRbbl0pO3JldHVybiB0aGlzfSxhYS5yb290PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Jvb3R9LGFhLnNpemU9ZnVuY3Rpb24oKXt2YXIgdD0wO3JldHVybiB0aGlzLnZpc2l0KGZ1bmN0aW9uKG4pe2lmKCFuLmxlbmd0aClkb3srK3R9d2hpbGUobj1uLm5leHQpfSksdH0sYWEudmlzaXQ9ZnVuY3Rpb24odCl7dmFyIG4sZSxyLGksbyxhLHU9W10sZj10aGlzLl9yb290O2ZvcihmJiZ1LnB1c2gobmV3IHRhKGYsdGhpcy5feDAsdGhpcy5feTAsdGhpcy5feDEsdGhpcy5feTEpKTtuPXUucG9wKCk7KWlmKCF0KGY9bi5ub2RlLHI9bi54MCxpPW4ueTAsbz1uLngxLGE9bi55MSkmJmYubGVuZ3RoKXt2YXIgYz0ocitvKS8yLHM9KGkrYSkvMjsoZT1mWzNdKSYmdS5wdXNoKG5ldyB0YShlLGMscyxvLGEpKSwoZT1mWzJdKSYmdS5wdXNoKG5ldyB0YShlLHIscyxjLGEpKSwoZT1mWzFdKSYmdS5wdXNoKG5ldyB0YShlLGMsaSxvLHMpKSwoZT1mWzBdKSYmdS5wdXNoKG5ldyB0YShlLHIsaSxjLHMpKX1yZXR1cm4gdGhpc30sYWEudmlzaXRBZnRlcj1mdW5jdGlvbih0KXt2YXIgbixlPVtdLHI9W107Zm9yKHRoaXMuX3Jvb3QmJmUucHVzaChuZXcgdGEodGhpcy5fcm9vdCx0aGlzLl94MCx0aGlzLl95MCx0aGlzLl94MSx0aGlzLl95MSkpO249ZS5wb3AoKTspe3ZhciBpPW4ubm9kZTtpZihpLmxlbmd0aCl7dmFyIG8sYT1uLngwLHU9bi55MCxmPW4ueDEsYz1uLnkxLHM9KGErZikvMixsPSh1K2MpLzI7KG89aVswXSkmJmUucHVzaChuZXcgdGEobyxhLHUscyxsKSksKG89aVsxXSkmJmUucHVzaChuZXcgdGEobyxzLHUsZixsKSksKG89aVsyXSkmJmUucHVzaChuZXcgdGEobyxhLGwscyxjKSksKG89aVszXSkmJmUucHVzaChuZXcgdGEobyxzLGwsZixjKSl9ci5wdXNoKG4pfWZvcig7bj1yLnBvcCgpOyl0KG4ubm9kZSxuLngwLG4ueTAsbi54MSxuLnkxKTtyZXR1cm4gdGhpc30sYWEueD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odGhpcy5feD10LHRoaXMpOnRoaXMuX3h9LGFhLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHRoaXMuX3k9dCx0aGlzKTp0aGlzLl95fTt2YXIgZGE9MTAscGE9TWF0aC5QSSooMy1NYXRoLnNxcnQoNSkpO2Z1bmN0aW9uIHZhKHQsbil7aWYoKGU9KHQ9bj90LnRvRXhwb25lbnRpYWwobi0xKTp0LnRvRXhwb25lbnRpYWwoKSkuaW5kZXhPZigiZSIpKTwwKXJldHVybiBudWxsO3ZhciBlLHI9dC5zbGljZSgwLGUpO3JldHVybltyLmxlbmd0aD4xP3JbMF0rci5zbGljZSgyKTpyLCt0LnNsaWNlKGUrMSldfWZ1bmN0aW9uIGdhKHQpe3JldHVybih0PXZhKE1hdGguYWJzKHQpKSk/dFsxXTpOYU59dmFyIHlhLF9hPS9eKD86KC4pPyhbPD49Xl0pKT8oWytcLSggXSk/KFskI10pPygwKT8oXGQrKT8oLCk/KFwuXGQrKT8ofik/KFthLXolXSk/JC9pO2Z1bmN0aW9uIGJhKHQpe3JldHVybiBuZXcgbWEodCl9ZnVuY3Rpb24gbWEodCl7aWYoIShuPV9hLmV4ZWModCkpKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBmb3JtYXQ6ICIrdCk7dmFyIG47dGhpcy5maWxsPW5bMV18fCIgIix0aGlzLmFsaWduPW5bMl18fCI+Iix0aGlzLnNpZ249blszXXx8Ii0iLHRoaXMuc3ltYm9sPW5bNF18fCIiLHRoaXMuemVybz0hIW5bNV0sdGhpcy53aWR0aD1uWzZdJiYrbls2XSx0aGlzLmNvbW1hPSEhbls3XSx0aGlzLnByZWNpc2lvbj1uWzhdJiYrbls4XS5zbGljZSgxKSx0aGlzLnRyaW09ISFuWzldLHRoaXMudHlwZT1uWzEwXXx8IiJ9ZnVuY3Rpb24geGEodCxuKXt2YXIgZT12YSh0LG4pO2lmKCFlKXJldHVybiB0KyIiO3ZhciByPWVbMF0saT1lWzFdO3JldHVybiBpPDA/IjAuIituZXcgQXJyYXkoLWkpLmpvaW4oIjAiKStyOnIubGVuZ3RoPmkrMT9yLnNsaWNlKDAsaSsxKSsiLiIrci5zbGljZShpKzEpOnIrbmV3IEFycmF5KGktci5sZW5ndGgrMikuam9pbigiMCIpfWJhLnByb3RvdHlwZT1tYS5wcm90b3R5cGUsbWEucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmlsbCt0aGlzLmFsaWduK3RoaXMuc2lnbit0aGlzLnN5bWJvbCsodGhpcy56ZXJvPyIwIjoiIikrKG51bGw9PXRoaXMud2lkdGg/IiI6TWF0aC5tYXgoMSwwfHRoaXMud2lkdGgpKSsodGhpcy5jb21tYT8iLCI6IiIpKyhudWxsPT10aGlzLnByZWNpc2lvbj8iIjoiLiIrTWF0aC5tYXgoMCwwfHRoaXMucHJlY2lzaW9uKSkrKHRoaXMudHJpbT8ifiI6IiIpK3RoaXMudHlwZX07dmFyIHdhPXsiJSI6ZnVuY3Rpb24odCxuKXtyZXR1cm4oMTAwKnQpLnRvRml4ZWQobil9LGI6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucm91bmQodCkudG9TdHJpbmcoMil9LGM6ZnVuY3Rpb24odCl7cmV0dXJuIHQrIiJ9LGQ6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucm91bmQodCkudG9TdHJpbmcoMTApfSxlOmZ1bmN0aW9uKHQsbil7cmV0dXJuIHQudG9FeHBvbmVudGlhbChuKX0sZjpmdW5jdGlvbih0LG4pe3JldHVybiB0LnRvRml4ZWQobil9LGc6ZnVuY3Rpb24odCxuKXtyZXR1cm4gdC50b1ByZWNpc2lvbihuKX0sbzpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZCh0KS50b1N0cmluZyg4KX0scDpmdW5jdGlvbih0LG4pe3JldHVybiB4YSgxMDAqdCxuKX0scjp4YSxzOmZ1bmN0aW9uKHQsbil7dmFyIGU9dmEodCxuKTtpZighZSlyZXR1cm4gdCsiIjt2YXIgcj1lWzBdLGk9ZVsxXSxvPWktKHlhPTMqTWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKGkvMykpKSkrMSxhPXIubGVuZ3RoO3JldHVybiBvPT09YT9yOm8+YT9yK25ldyBBcnJheShvLWErMSkuam9pbigiMCIpOm8+MD9yLnNsaWNlKDAsbykrIi4iK3Iuc2xpY2Uobyk6IjAuIituZXcgQXJyYXkoMS1vKS5qb2luKCIwIikrdmEodCxNYXRoLm1heCgwLG4rby0xKSlbMF19LFg6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucm91bmQodCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCl9LHg6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucm91bmQodCkudG9TdHJpbmcoMTYpfX07ZnVuY3Rpb24gTWEodCl7cmV0dXJuIHR9dmFyIEFhLFRhPVsieSIsInoiLCJhIiwiZiIsInAiLCJuIiwiwrUiLCJtIiwiIiwiayIsIk0iLCJHIiwiVCIsIlAiLCJFIiwiWiIsIlkiXTtmdW5jdGlvbiBOYSh0KXt2YXIgbixlLHI9dC5ncm91cGluZyYmdC50aG91c2FuZHM/KG49dC5ncm91cGluZyxlPXQudGhvdXNhbmRzLGZ1bmN0aW9uKHQscil7Zm9yKHZhciBpPXQubGVuZ3RoLG89W10sYT0wLHU9blswXSxmPTA7aT4wJiZ1PjAmJihmK3UrMT5yJiYodT1NYXRoLm1heCgxLHItZikpLG8ucHVzaCh0LnN1YnN0cmluZyhpLT11LGkrdSkpLCEoKGYrPXUrMSk+cikpOyl1PW5bYT0oYSsxKSVuLmxlbmd0aF07cmV0dXJuIG8ucmV2ZXJzZSgpLmpvaW4oZSl9KTpNYSxpPXQuY3VycmVuY3ksbz10LmRlY2ltYWwsYT10Lm51bWVyYWxzP2Z1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gbi5yZXBsYWNlKC9bMC05XS9nLGZ1bmN0aW9uKG4pe3JldHVybiB0WytuXX0pfX0odC5udW1lcmFscyk6TWEsdT10LnBlcmNlbnR8fCIlIjtmdW5jdGlvbiBmKHQpe3ZhciBuPSh0PWJhKHQpKS5maWxsLGU9dC5hbGlnbixmPXQuc2lnbixjPXQuc3ltYm9sLHM9dC56ZXJvLGw9dC53aWR0aCxoPXQuY29tbWEsZD10LnByZWNpc2lvbixwPXQudHJpbSx2PXQudHlwZTsibiI9PT12PyhoPSEwLHY9ImciKTp3YVt2XXx8KG51bGw9PWQmJihkPTEyKSxwPSEwLHY9ImciKSwoc3x8IjAiPT09biYmIj0iPT09ZSkmJihzPSEwLG49IjAiLGU9Ij0iKTt2YXIgZz0iJCI9PT1jP2lbMF06IiMiPT09YyYmL1tib3hYXS8udGVzdCh2KT8iMCIrdi50b0xvd2VyQ2FzZSgpOiIiLHk9IiQiPT09Yz9pWzFdOi9bJXBdLy50ZXN0KHYpP3U6IiIsXz13YVt2XSxiPS9bZGVmZ3BycyVdLy50ZXN0KHYpO2Z1bmN0aW9uIG0odCl7dmFyIGksdSxjLG09Zyx4PXk7aWYoImMiPT09dil4PV8odCkreCx0PSIiO2Vsc2V7dmFyIHc9KHQ9K3QpPDA7aWYodD1fKE1hdGguYWJzKHQpLGQpLHAmJih0PWZ1bmN0aW9uKHQpe3Q6Zm9yKHZhciBuLGU9dC5sZW5ndGgscj0xLGk9LTE7cjxlOysrcilzd2l0Y2godFtyXSl7Y2FzZSIuIjppPW49cjticmVhaztjYXNlIjAiOjA9PT1pJiYoaT1yKSxuPXI7YnJlYWs7ZGVmYXVsdDppZihpPjApe2lmKCErdFtyXSlicmVhayB0O2k9MH19cmV0dXJuIGk+MD90LnNsaWNlKDAsaSkrdC5zbGljZShuKzEpOnR9KHQpKSx3JiYwPT0rdCYmKHc9ITEpLG09KHc/IigiPT09Zj9mOiItIjoiLSI9PT1mfHwiKCI9PT1mPyIiOmYpK20seD0oInMiPT09dj9UYVs4K3lhLzNdOiIiKSt4Kyh3JiYiKCI9PT1mPyIpIjoiIiksYilmb3IoaT0tMSx1PXQubGVuZ3RoOysraTx1OylpZig0OD4oYz10LmNoYXJDb2RlQXQoaSkpfHxjPjU3KXt4PSg0Nj09PWM/byt0LnNsaWNlKGkrMSk6dC5zbGljZShpKSkreCx0PXQuc2xpY2UoMCxpKTticmVha319aCYmIXMmJih0PXIodCwxLzApKTt2YXIgTT1tLmxlbmd0aCt0Lmxlbmd0aCt4Lmxlbmd0aCxBPU08bD9uZXcgQXJyYXkobC1NKzEpLmpvaW4obik6IiI7c3dpdGNoKGgmJnMmJih0PXIoQSt0LEEubGVuZ3RoP2wteC5sZW5ndGg6MS8wKSxBPSIiKSxlKXtjYXNlIjwiOnQ9bSt0K3grQTticmVhaztjYXNlIj0iOnQ9bStBK3QreDticmVhaztjYXNlIl4iOnQ9QS5zbGljZSgwLE09QS5sZW5ndGg+PjEpK20rdCt4K0Euc2xpY2UoTSk7YnJlYWs7ZGVmYXVsdDp0PUErbSt0K3h9cmV0dXJuIGEodCl9cmV0dXJuIGQ9bnVsbD09ZD82Oi9bZ3Byc10vLnRlc3Qodik/TWF0aC5tYXgoMSxNYXRoLm1pbigyMSxkKSk6TWF0aC5tYXgoMCxNYXRoLm1pbigyMCxkKSksbS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0KyIifSxtfXJldHVybntmb3JtYXQ6Zixmb3JtYXRQcmVmaXg6ZnVuY3Rpb24odCxuKXt2YXIgZT1mKCgodD1iYSh0KSkudHlwZT0iZiIsdCkpLHI9MypNYXRoLm1heCgtOCxNYXRoLm1pbig4LE1hdGguZmxvb3IoZ2EobikvMykpKSxpPU1hdGgucG93KDEwLC1yKSxvPVRhWzgrci8zXTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGUoaSp0KStvfX19fWZ1bmN0aW9uIFNhKG4pe3JldHVybiBBYT1OYShuKSx0LmZvcm1hdD1BYS5mb3JtYXQsdC5mb3JtYXRQcmVmaXg9QWEuZm9ybWF0UHJlZml4LEFhfWZ1bmN0aW9uIEVhKHQpe3JldHVybiBNYXRoLm1heCgwLC1nYShNYXRoLmFicyh0KSkpfWZ1bmN0aW9uIGthKHQsbil7cmV0dXJuIE1hdGgubWF4KDAsMypNYXRoLm1heCgtOCxNYXRoLm1pbig4LE1hdGguZmxvb3IoZ2EobikvMykpKS1nYShNYXRoLmFicyh0KSkpfWZ1bmN0aW9uIENhKHQsbil7cmV0dXJuIHQ9TWF0aC5hYnModCksbj1NYXRoLmFicyhuKS10LE1hdGgubWF4KDAsZ2EobiktZ2EodCkpKzF9ZnVuY3Rpb24gUGEoKXtyZXR1cm4gbmV3IHphfWZ1bmN0aW9uIHphKCl7dGhpcy5yZXNldCgpfVNhKHtkZWNpbWFsOiIuIix0aG91c2FuZHM6IiwiLGdyb3VwaW5nOlszXSxjdXJyZW5jeTpbIiQiLCIiXX0pLHphLnByb3RvdHlwZT17Y29uc3RydWN0b3I6emEscmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLnM9dGhpcy50PTB9LGFkZDpmdW5jdGlvbih0KXtMYShSYSx0LHRoaXMudCksTGEodGhpcyxSYS5zLHRoaXMucyksdGhpcy5zP3RoaXMudCs9UmEudDp0aGlzLnM9UmEudH0sdmFsdWVPZjpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN9fTt2YXIgUmE9bmV3IHphO2Z1bmN0aW9uIExhKHQsbixlKXt2YXIgcj10LnM9bitlLGk9ci1uLG89ci1pO3QudD1uLW8rKGUtaSl9dmFyIERhPTFlLTYsVWE9MWUtMTIscWE9TWF0aC5QSSxPYT1xYS8yLFlhPXFhLzQsQmE9MipxYSxGYT0xODAvcWEsSWE9cWEvMTgwLEhhPU1hdGguYWJzLGphPU1hdGguYXRhbixYYT1NYXRoLmF0YW4yLEdhPU1hdGguY29zLFZhPU1hdGguY2VpbCwkYT1NYXRoLmV4cCxXYT1NYXRoLmxvZyxaYT1NYXRoLnBvdyxRYT1NYXRoLnNpbixKYT1NYXRoLnNpZ258fGZ1bmN0aW9uKHQpe3JldHVybiB0PjA/MTp0PDA/LTE6MH0sS2E9TWF0aC5zcXJ0LHR1PU1hdGgudGFuO2Z1bmN0aW9uIG51KHQpe3JldHVybiB0PjE/MDp0PC0xP3FhOk1hdGguYWNvcyh0KX1mdW5jdGlvbiBldSh0KXtyZXR1cm4gdD4xP09hOnQ8LTE/LU9hOk1hdGguYXNpbih0KX1mdW5jdGlvbiBydSh0KXtyZXR1cm4odD1RYSh0LzIpKSp0fWZ1bmN0aW9uIGl1KCl7fWZ1bmN0aW9uIG91KHQsbil7dCYmdXUuaGFzT3duUHJvcGVydHkodC50eXBlKSYmdXVbdC50eXBlXSh0LG4pfXZhciBhdT17RmVhdHVyZTpmdW5jdGlvbih0LG4pe291KHQuZ2VvbWV0cnksbil9LEZlYXR1cmVDb2xsZWN0aW9uOmZ1bmN0aW9uKHQsbil7Zm9yKHZhciBlPXQuZmVhdHVyZXMscj0tMSxpPWUubGVuZ3RoOysrcjxpOylvdShlW3JdLmdlb21ldHJ5LG4pfX0sdXU9e1NwaGVyZTpmdW5jdGlvbih0LG4pe24uc3BoZXJlKCl9LFBvaW50OmZ1bmN0aW9uKHQsbil7dD10LmNvb3JkaW5hdGVzLG4ucG9pbnQodFswXSx0WzFdLHRbMl0pfSxNdWx0aVBvaW50OmZ1bmN0aW9uKHQsbil7Zm9yKHZhciBlPXQuY29vcmRpbmF0ZXMscj0tMSxpPWUubGVuZ3RoOysrcjxpOyl0PWVbcl0sbi5wb2ludCh0WzBdLHRbMV0sdFsyXSl9LExpbmVTdHJpbmc6ZnVuY3Rpb24odCxuKXtmdSh0LmNvb3JkaW5hdGVzLG4sMCl9LE11bHRpTGluZVN0cmluZzpmdW5jdGlvbih0LG4pe2Zvcih2YXIgZT10LmNvb3JkaW5hdGVzLHI9LTEsaT1lLmxlbmd0aDsrK3I8aTspZnUoZVtyXSxuLDApfSxQb2x5Z29uOmZ1bmN0aW9uKHQsbil7Y3UodC5jb29yZGluYXRlcyxuKX0sTXVsdGlQb2x5Z29uOmZ1bmN0aW9uKHQsbil7Zm9yKHZhciBlPXQuY29vcmRpbmF0ZXMscj0tMSxpPWUubGVuZ3RoOysrcjxpOyljdShlW3JdLG4pfSxHZW9tZXRyeUNvbGxlY3Rpb246ZnVuY3Rpb24odCxuKXtmb3IodmFyIGU9dC5nZW9tZXRyaWVzLHI9LTEsaT1lLmxlbmd0aDsrK3I8aTspb3UoZVtyXSxuKX19O2Z1bmN0aW9uIGZ1KHQsbixlKXt2YXIgcixpPS0xLG89dC5sZW5ndGgtZTtmb3Iobi5saW5lU3RhcnQoKTsrK2k8bzspcj10W2ldLG4ucG9pbnQoclswXSxyWzFdLHJbMl0pO24ubGluZUVuZCgpfWZ1bmN0aW9uIGN1KHQsbil7dmFyIGU9LTEscj10Lmxlbmd0aDtmb3Iobi5wb2x5Z29uU3RhcnQoKTsrK2U8cjspZnUodFtlXSxuLDEpO24ucG9seWdvbkVuZCgpfWZ1bmN0aW9uIHN1KHQsbil7dCYmYXUuaGFzT3duUHJvcGVydHkodC50eXBlKT9hdVt0LnR5cGVdKHQsbik6b3UodCxuKX12YXIgbHUsaHUsZHUscHUsdnUsZ3U9UGEoKSx5dT1QYSgpLF91PXtwb2ludDppdSxsaW5lU3RhcnQ6aXUsbGluZUVuZDppdSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtndS5yZXNldCgpLF91LmxpbmVTdGFydD1idSxfdS5saW5lRW5kPW11fSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dmFyIHQ9K2d1O3l1LmFkZCh0PDA/QmErdDp0KSx0aGlzLmxpbmVTdGFydD10aGlzLmxpbmVFbmQ9dGhpcy5wb2ludD1pdX0sc3BoZXJlOmZ1bmN0aW9uKCl7eXUuYWRkKEJhKX19O2Z1bmN0aW9uIGJ1KCl7X3UucG9pbnQ9eHV9ZnVuY3Rpb24gbXUoKXt3dShsdSxodSl9ZnVuY3Rpb24geHUodCxuKXtfdS5wb2ludD13dSxsdT10LGh1PW4sZHU9dCo9SWEscHU9R2Eobj0obio9SWEpLzIrWWEpLHZ1PVFhKG4pfWZ1bmN0aW9uIHd1KHQsbil7dmFyIGU9KHQqPUlhKS1kdSxyPWU+PTA/MTotMSxpPXIqZSxvPUdhKG49KG4qPUlhKS8yK1lhKSxhPVFhKG4pLHU9dnUqYSxmPXB1Km8rdSpHYShpKSxjPXUqcipRYShpKTtndS5hZGQoWGEoYyxmKSksZHU9dCxwdT1vLHZ1PWF9ZnVuY3Rpb24gTXUodCl7cmV0dXJuW1hhKHRbMV0sdFswXSksZXUodFsyXSldfWZ1bmN0aW9uIEF1KHQpe3ZhciBuPXRbMF0sZT10WzFdLHI9R2EoZSk7cmV0dXJuW3IqR2EobikscipRYShuKSxRYShlKV19ZnVuY3Rpb24gVHUodCxuKXtyZXR1cm4gdFswXSpuWzBdK3RbMV0qblsxXSt0WzJdKm5bMl19ZnVuY3Rpb24gTnUodCxuKXtyZXR1cm5bdFsxXSpuWzJdLXRbMl0qblsxXSx0WzJdKm5bMF0tdFswXSpuWzJdLHRbMF0qblsxXS10WzFdKm5bMF1dfWZ1bmN0aW9uIFN1KHQsbil7dFswXSs9blswXSx0WzFdKz1uWzFdLHRbMl0rPW5bMl19ZnVuY3Rpb24gRXUodCxuKXtyZXR1cm5bdFswXSpuLHRbMV0qbix0WzJdKm5dfWZ1bmN0aW9uIGt1KHQpe3ZhciBuPUthKHRbMF0qdFswXSt0WzFdKnRbMV0rdFsyXSp0WzJdKTt0WzBdLz1uLHRbMV0vPW4sdFsyXS89bn12YXIgQ3UsUHUsenUsUnUsTHUsRHUsVXUscXUsT3UsWXUsQnUsRnUsSXUsSHUsanUsWHUsR3UsVnUsJHUsV3UsWnUsUXUsSnUsS3UsdGYsbmYsZWY9UGEoKSxyZj17cG9pbnQ6b2YsbGluZVN0YXJ0OnVmLGxpbmVFbmQ6ZmYscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7cmYucG9pbnQ9Y2YscmYubGluZVN0YXJ0PXNmLHJmLmxpbmVFbmQ9bGYsZWYucmVzZXQoKSxfdS5wb2x5Z29uU3RhcnQoKX0scG9seWdvbkVuZDpmdW5jdGlvbigpe191LnBvbHlnb25FbmQoKSxyZi5wb2ludD1vZixyZi5saW5lU3RhcnQ9dWYscmYubGluZUVuZD1mZixndTwwPyhDdT0tKHp1PTE4MCksUHU9LShSdT05MCkpOmVmPkRhP1J1PTkwOmVmPC1EYSYmKFB1PS05MCksWXVbMF09Q3UsWXVbMV09enV9fTtmdW5jdGlvbiBvZih0LG4pe091LnB1c2goWXU9W0N1PXQsenU9dF0pLG48UHUmJihQdT1uKSxuPlJ1JiYoUnU9bil9ZnVuY3Rpb24gYWYodCxuKXt2YXIgZT1BdShbdCpJYSxuKklhXSk7aWYocXUpe3ZhciByPU51KHF1LGUpLGk9TnUoW3JbMV0sLXJbMF0sMF0scik7a3UoaSksaT1NdShpKTt2YXIgbyxhPXQtTHUsdT1hPjA/MTotMSxmPWlbMF0qRmEqdSxjPUhhKGEpPjE4MDtjXih1Kkx1PGYmJmY8dSp0KT8obz1pWzFdKkZhKT5SdSYmKFJ1PW8pOmNeKHUqTHU8KGY9KGYrMzYwKSUzNjAtMTgwKSYmZjx1KnQpPyhvPS1pWzFdKkZhKTxQdSYmKFB1PW8pOihuPFB1JiYoUHU9biksbj5SdSYmKFJ1PW4pKSxjP3Q8THU/aGYoQ3UsdCk+aGYoQ3UsenUpJiYoenU9dCk6aGYodCx6dSk+aGYoQ3UsenUpJiYoQ3U9dCk6enU+PUN1Pyh0PEN1JiYoQ3U9dCksdD56dSYmKHp1PXQpKTp0Pkx1P2hmKEN1LHQpPmhmKEN1LHp1KSYmKHp1PXQpOmhmKHQsenUpPmhmKEN1LHp1KSYmKEN1PXQpfWVsc2UgT3UucHVzaChZdT1bQ3U9dCx6dT10XSk7bjxQdSYmKFB1PW4pLG4+UnUmJihSdT1uKSxxdT1lLEx1PXR9ZnVuY3Rpb24gdWYoKXtyZi5wb2ludD1hZn1mdW5jdGlvbiBmZigpe1l1WzBdPUN1LFl1WzFdPXp1LHJmLnBvaW50PW9mLHF1PW51bGx9ZnVuY3Rpb24gY2YodCxuKXtpZihxdSl7dmFyIGU9dC1MdTtlZi5hZGQoSGEoZSk+MTgwP2UrKGU+MD8zNjA6LTM2MCk6ZSl9ZWxzZSBEdT10LFV1PW47X3UucG9pbnQodCxuKSxhZih0LG4pfWZ1bmN0aW9uIHNmKCl7X3UubGluZVN0YXJ0KCl9ZnVuY3Rpb24gbGYoKXtjZihEdSxVdSksX3UubGluZUVuZCgpLEhhKGVmKT5EYSYmKEN1PS0oenU9MTgwKSksWXVbMF09Q3UsWXVbMV09enUscXU9bnVsbH1mdW5jdGlvbiBoZih0LG4pe3JldHVybihuLT10KTwwP24rMzYwOm59ZnVuY3Rpb24gZGYodCxuKXtyZXR1cm4gdFswXS1uWzBdfWZ1bmN0aW9uIHBmKHQsbil7cmV0dXJuIHRbMF08PXRbMV0/dFswXTw9biYmbjw9dFsxXTpuPHRbMF18fHRbMV08bn12YXIgdmY9e3NwaGVyZTppdSxwb2ludDpnZixsaW5lU3RhcnQ6X2YsbGluZUVuZDp4Zixwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXt2Zi5saW5lU3RhcnQ9d2YsdmYubGluZUVuZD1NZn0scG9seWdvbkVuZDpmdW5jdGlvbigpe3ZmLmxpbmVTdGFydD1fZix2Zi5saW5lRW5kPXhmfX07ZnVuY3Rpb24gZ2YodCxuKXt0Kj1JYTt2YXIgZT1HYShuKj1JYSk7eWYoZSpHYSh0KSxlKlFhKHQpLFFhKG4pKX1mdW5jdGlvbiB5Zih0LG4sZSl7SXUrPSh0LUl1KS8rK0J1LEh1Kz0obi1IdSkvQnUsanUrPShlLWp1KS9CdX1mdW5jdGlvbiBfZigpe3ZmLnBvaW50PWJmfWZ1bmN0aW9uIGJmKHQsbil7dCo9SWE7dmFyIGU9R2Eobio9SWEpO0t1PWUqR2EodCksdGY9ZSpRYSh0KSxuZj1RYShuKSx2Zi5wb2ludD1tZix5ZihLdSx0ZixuZil9ZnVuY3Rpb24gbWYodCxuKXt0Kj1JYTt2YXIgZT1HYShuKj1JYSkscj1lKkdhKHQpLGk9ZSpRYSh0KSxvPVFhKG4pLGE9WGEoS2EoKGE9dGYqby1uZippKSphKyhhPW5mKnItS3UqbykqYSsoYT1LdSppLXRmKnIpKmEpLEt1KnIrdGYqaStuZipvKTtGdSs9YSxYdSs9YSooS3UrKEt1PXIpKSxHdSs9YSoodGYrKHRmPWkpKSxWdSs9YSoobmYrKG5mPW8pKSx5ZihLdSx0ZixuZil9ZnVuY3Rpb24geGYoKXt2Zi5wb2ludD1nZn1mdW5jdGlvbiB3Zigpe3ZmLnBvaW50PUFmfWZ1bmN0aW9uIE1mKCl7VGYoUXUsSnUpLHZmLnBvaW50PWdmfWZ1bmN0aW9uIEFmKHQsbil7UXU9dCxKdT1uLHQqPUlhLG4qPUlhLHZmLnBvaW50PVRmO3ZhciBlPUdhKG4pO0t1PWUqR2EodCksdGY9ZSpRYSh0KSxuZj1RYShuKSx5ZihLdSx0ZixuZil9ZnVuY3Rpb24gVGYodCxuKXt0Kj1JYTt2YXIgZT1HYShuKj1JYSkscj1lKkdhKHQpLGk9ZSpRYSh0KSxvPVFhKG4pLGE9dGYqby1uZippLHU9bmYqci1LdSpvLGY9S3UqaS10ZipyLGM9S2EoYSphK3UqdStmKmYpLHM9ZXUoYyksbD1jJiYtcy9jOyR1Kz1sKmEsV3UrPWwqdSxadSs9bCpmLEZ1Kz1zLFh1Kz1zKihLdSsoS3U9cikpLEd1Kz1zKih0ZisodGY9aSkpLFZ1Kz1zKihuZisobmY9bykpLHlmKEt1LHRmLG5mKX1mdW5jdGlvbiBOZih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24gU2YodCxuKXtmdW5jdGlvbiBlKGUscil7cmV0dXJuIGU9dChlLHIpLG4oZVswXSxlWzFdKX1yZXR1cm4gdC5pbnZlcnQmJm4uaW52ZXJ0JiYoZS5pbnZlcnQ9ZnVuY3Rpb24oZSxyKXtyZXR1cm4oZT1uLmludmVydChlLHIpKSYmdC5pbnZlcnQoZVswXSxlWzFdKX0pLGV9ZnVuY3Rpb24gRWYodCxuKXtyZXR1cm5bdD5xYT90LUJhOnQ8LXFhP3QrQmE6dCxuXX1mdW5jdGlvbiBrZih0LG4sZSl7cmV0dXJuKHQlPUJhKT9ufHxlP1NmKFBmKHQpLHpmKG4sZSkpOlBmKHQpOm58fGU/emYobixlKTpFZn1mdW5jdGlvbiBDZih0KXtyZXR1cm4gZnVuY3Rpb24obixlKXtyZXR1cm5bKG4rPXQpPnFhP24tQmE6bjwtcWE/bitCYTpuLGVdfX1mdW5jdGlvbiBQZih0KXt2YXIgbj1DZih0KTtyZXR1cm4gbi5pbnZlcnQ9Q2YoLXQpLG59ZnVuY3Rpb24gemYodCxuKXt2YXIgZT1HYSh0KSxyPVFhKHQpLGk9R2Eobiksbz1RYShuKTtmdW5jdGlvbiBhKHQsbil7dmFyIGE9R2EobiksdT1HYSh0KSphLGY9UWEodCkqYSxjPVFhKG4pLHM9YyplK3UqcjtyZXR1cm5bWGEoZippLXMqbyx1KmUtYypyKSxldShzKmkrZipvKV19cmV0dXJuIGEuaW52ZXJ0PWZ1bmN0aW9uKHQsbil7dmFyIGE9R2EobiksdT1HYSh0KSphLGY9UWEodCkqYSxjPVFhKG4pLHM9YyppLWYqbztyZXR1cm5bWGEoZippK2Mqbyx1KmUrcypyKSxldShzKmUtdSpyKV19LGF9ZnVuY3Rpb24gUmYodCl7ZnVuY3Rpb24gbihuKXtyZXR1cm4obj10KG5bMF0qSWEsblsxXSpJYSkpWzBdKj1GYSxuWzFdKj1GYSxufXJldHVybiB0PWtmKHRbMF0qSWEsdFsxXSpJYSx0Lmxlbmd0aD4yP3RbMl0qSWE6MCksbi5pbnZlcnQ9ZnVuY3Rpb24obil7cmV0dXJuKG49dC5pbnZlcnQoblswXSpJYSxuWzFdKklhKSlbMF0qPUZhLG5bMV0qPUZhLG59LG59ZnVuY3Rpb24gTGYodCxuLGUscixpLG8pe2lmKGUpe3ZhciBhPUdhKG4pLHU9UWEobiksZj1yKmU7bnVsbD09aT8oaT1uK3IqQmEsbz1uLWYvMik6KGk9RGYoYSxpKSxvPURmKGEsbyksKHI+MD9pPG86aT5vKSYmKGkrPXIqQmEpKTtmb3IodmFyIGMscz1pO3I+MD9zPm86czxvO3MtPWYpYz1NdShbYSwtdSpHYShzKSwtdSpRYShzKV0pLHQucG9pbnQoY1swXSxjWzFdKX19ZnVuY3Rpb24gRGYodCxuKXsobj1BdShuKSlbMF0tPXQsa3Uobik7dmFyIGU9bnUoLW5bMV0pO3JldHVybigoLW5bMl08MD8tZTplKStCYS1EYSklQmF9ZnVuY3Rpb24gVWYoKXt2YXIgdCxuPVtdO3JldHVybntwb2ludDpmdW5jdGlvbihuLGUpe3QucHVzaChbbixlXSl9LGxpbmVTdGFydDpmdW5jdGlvbigpe24ucHVzaCh0PVtdKX0sbGluZUVuZDppdSxyZWpvaW46ZnVuY3Rpb24oKXtuLmxlbmd0aD4xJiZuLnB1c2gobi5wb3AoKS5jb25jYXQobi5zaGlmdCgpKSl9LHJlc3VsdDpmdW5jdGlvbigpe3ZhciBlPW47cmV0dXJuIG49W10sdD1udWxsLGV9fX1mdW5jdGlvbiBxZih0LG4pe3JldHVybiBIYSh0WzBdLW5bMF0pPERhJiZIYSh0WzFdLW5bMV0pPERhfWZ1bmN0aW9uIE9mKHQsbixlLHIpe3RoaXMueD10LHRoaXMuej1uLHRoaXMubz1lLHRoaXMuZT1yLHRoaXMudj0hMSx0aGlzLm49dGhpcy5wPW51bGx9ZnVuY3Rpb24gWWYodCxuLGUscixpKXt2YXIgbyxhLHU9W10sZj1bXTtpZih0LmZvckVhY2goZnVuY3Rpb24odCl7aWYoISgobj10Lmxlbmd0aC0xKTw9MCkpe3ZhciBuLGUscj10WzBdLGE9dFtuXTtpZihxZihyLGEpKXtmb3IoaS5saW5lU3RhcnQoKSxvPTA7bzxuOysrbylpLnBvaW50KChyPXRbb10pWzBdLHJbMV0pO2kubGluZUVuZCgpfWVsc2UgdS5wdXNoKGU9bmV3IE9mKHIsdCxudWxsLCEwKSksZi5wdXNoKGUubz1uZXcgT2YocixudWxsLGUsITEpKSx1LnB1c2goZT1uZXcgT2YoYSx0LG51bGwsITEpKSxmLnB1c2goZS5vPW5ldyBPZihhLG51bGwsZSwhMCkpfX0pLHUubGVuZ3RoKXtmb3IoZi5zb3J0KG4pLEJmKHUpLEJmKGYpLG89MCxhPWYubGVuZ3RoO288YTsrK28pZltvXS5lPWU9IWU7Zm9yKHZhciBjLHMsbD11WzBdOzspe2Zvcih2YXIgaD1sLGQ9ITA7aC52OylpZigoaD1oLm4pPT09bClyZXR1cm47Yz1oLnosaS5saW5lU3RhcnQoKTtkb3tpZihoLnY9aC5vLnY9ITAsaC5lKXtpZihkKWZvcihvPTAsYT1jLmxlbmd0aDtvPGE7KytvKWkucG9pbnQoKHM9Y1tvXSlbMF0sc1sxXSk7ZWxzZSByKGgueCxoLm4ueCwxLGkpO2g9aC5ufWVsc2V7aWYoZClmb3IoYz1oLnAueixvPWMubGVuZ3RoLTE7bz49MDstLW8paS5wb2ludCgocz1jW29dKVswXSxzWzFdKTtlbHNlIHIoaC54LGgucC54LC0xLGkpO2g9aC5wfWM9KGg9aC5vKS56LGQ9IWR9d2hpbGUoIWgudik7aS5saW5lRW5kKCl9fX1mdW5jdGlvbiBCZih0KXtpZihuPXQubGVuZ3RoKXtmb3IodmFyIG4sZSxyPTAsaT10WzBdOysrcjxuOylpLm49ZT10W3JdLGUucD1pLGk9ZTtpLm49ZT10WzBdLGUucD1pfX1FZi5pbnZlcnQ9RWY7dmFyIEZmPVBhKCk7ZnVuY3Rpb24gSWYodCxuKXt2YXIgZT1uWzBdLHI9blsxXSxpPVFhKHIpLG89W1FhKGUpLC1HYShlKSwwXSxhPTAsdT0wO0ZmLnJlc2V0KCksMT09PWk/cj1PYStEYTotMT09PWkmJihyPS1PYS1EYSk7Zm9yKHZhciBmPTAsYz10Lmxlbmd0aDtmPGM7KytmKWlmKGw9KHM9dFtmXSkubGVuZ3RoKWZvcih2YXIgcyxsLGg9c1tsLTFdLGQ9aFswXSxwPWhbMV0vMitZYSx2PVFhKHApLGc9R2EocCkseT0wO3k8bDsrK3ksZD1iLHY9eCxnPXcsaD1fKXt2YXIgXz1zW3ldLGI9X1swXSxtPV9bMV0vMitZYSx4PVFhKG0pLHc9R2EobSksTT1iLWQsQT1NPj0wPzE6LTEsVD1BKk0sTj1UPnFhLFM9dip4O2lmKEZmLmFkZChYYShTKkEqUWEoVCksZyp3K1MqR2EoVCkpKSxhKz1OP00rQSpCYTpNLE5eZD49ZV5iPj1lKXt2YXIgRT1OdShBdShoKSxBdShfKSk7a3UoRSk7dmFyIGs9TnUobyxFKTtrdShrKTt2YXIgQz0oTl5NPj0wPy0xOjEpKmV1KGtbMl0pOyhyPkN8fHI9PT1DJiYoRVswXXx8RVsxXSkpJiYodSs9Tl5NPj0wPzE6LTEpfX1yZXR1cm4oYTwtRGF8fGE8RGEmJkZmPC1EYSleMSZ1fWZ1bmN0aW9uIEhmKHQsbixlLHIpe3JldHVybiBmdW5jdGlvbihpKXt2YXIgbyxhLHUsZj1uKGkpLGM9VWYoKSxzPW4oYyksbD0hMSxoPXtwb2ludDpkLGxpbmVTdGFydDp2LGxpbmVFbmQ6Zyxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtoLnBvaW50PXksaC5saW5lU3RhcnQ9XyxoLmxpbmVFbmQ9YixhPVtdLG89W119LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtoLnBvaW50PWQsaC5saW5lU3RhcnQ9dixoLmxpbmVFbmQ9ZyxhPU4oYSk7dmFyIHQ9SWYobyxyKTthLmxlbmd0aD8obHx8KGkucG9seWdvblN0YXJ0KCksbD0hMCksWWYoYSxYZix0LGUsaSkpOnQmJihsfHwoaS5wb2x5Z29uU3RhcnQoKSxsPSEwKSxpLmxpbmVTdGFydCgpLGUobnVsbCxudWxsLDEsaSksaS5saW5lRW5kKCkpLGwmJihpLnBvbHlnb25FbmQoKSxsPSExKSxhPW89bnVsbH0sc3BoZXJlOmZ1bmN0aW9uKCl7aS5wb2x5Z29uU3RhcnQoKSxpLmxpbmVTdGFydCgpLGUobnVsbCxudWxsLDEsaSksaS5saW5lRW5kKCksaS5wb2x5Z29uRW5kKCl9fTtmdW5jdGlvbiBkKG4sZSl7dChuLGUpJiZpLnBvaW50KG4sZSl9ZnVuY3Rpb24gcCh0LG4pe2YucG9pbnQodCxuKX1mdW5jdGlvbiB2KCl7aC5wb2ludD1wLGYubGluZVN0YXJ0KCl9ZnVuY3Rpb24gZygpe2gucG9pbnQ9ZCxmLmxpbmVFbmQoKX1mdW5jdGlvbiB5KHQsbil7dS5wdXNoKFt0LG5dKSxzLnBvaW50KHQsbil9ZnVuY3Rpb24gXygpe3MubGluZVN0YXJ0KCksdT1bXX1mdW5jdGlvbiBiKCl7eSh1WzBdWzBdLHVbMF1bMV0pLHMubGluZUVuZCgpO3ZhciB0LG4sZSxyLGY9cy5jbGVhbigpLGg9Yy5yZXN1bHQoKSxkPWgubGVuZ3RoO2lmKHUucG9wKCksby5wdXNoKHUpLHU9bnVsbCxkKWlmKDEmZil7aWYoKG49KGU9aFswXSkubGVuZ3RoLTEpPjApe2ZvcihsfHwoaS5wb2x5Z29uU3RhcnQoKSxsPSEwKSxpLmxpbmVTdGFydCgpLHQ9MDt0PG47Kyt0KWkucG9pbnQoKHI9ZVt0XSlbMF0sclsxXSk7aS5saW5lRW5kKCl9fWVsc2UgZD4xJiYyJmYmJmgucHVzaChoLnBvcCgpLmNvbmNhdChoLnNoaWZ0KCkpKSxhLnB1c2goaC5maWx0ZXIoamYpKX1yZXR1cm4gaH19ZnVuY3Rpb24gamYodCl7cmV0dXJuIHQubGVuZ3RoPjF9ZnVuY3Rpb24gWGYodCxuKXtyZXR1cm4oKHQ9dC54KVswXTwwP3RbMV0tT2EtRGE6T2EtdFsxXSktKChuPW4ueClbMF08MD9uWzFdLU9hLURhOk9hLW5bMV0pfXZhciBHZj1IZihmdW5jdGlvbigpe3JldHVybiEwfSxmdW5jdGlvbih0KXt2YXIgbixlPU5hTixyPU5hTixpPU5hTjtyZXR1cm57bGluZVN0YXJ0OmZ1bmN0aW9uKCl7dC5saW5lU3RhcnQoKSxuPTF9LHBvaW50OmZ1bmN0aW9uKG8sYSl7dmFyIHU9bz4wP3FhOi1xYSxmPUhhKG8tZSk7SGEoZi1xYSk8RGE/KHQucG9pbnQoZSxyPShyK2EpLzI+MD9PYTotT2EpLHQucG9pbnQoaSxyKSx0LmxpbmVFbmQoKSx0LmxpbmVTdGFydCgpLHQucG9pbnQodSxyKSx0LnBvaW50KG8sciksbj0wKTppIT09dSYmZj49cWEmJihIYShlLWkpPERhJiYoZS09aSpEYSksSGEoby11KTxEYSYmKG8tPXUqRGEpLHI9ZnVuY3Rpb24odCxuLGUscil7dmFyIGksbyxhPVFhKHQtZSk7cmV0dXJuIEhhKGEpPkRhP2phKChRYShuKSoobz1HYShyKSkqUWEoZSktUWEocikqKGk9R2EobikpKlFhKHQpKS8oaSpvKmEpKToobityKS8yfShlLHIsbyxhKSx0LnBvaW50KGksciksdC5saW5lRW5kKCksdC5saW5lU3RhcnQoKSx0LnBvaW50KHUsciksbj0wKSx0LnBvaW50KGU9byxyPWEpLGk9dX0sbGluZUVuZDpmdW5jdGlvbigpe3QubGluZUVuZCgpLGU9cj1OYU59LGNsZWFuOmZ1bmN0aW9uKCl7cmV0dXJuIDItbn19fSxmdW5jdGlvbih0LG4sZSxyKXt2YXIgaTtpZihudWxsPT10KWk9ZSpPYSxyLnBvaW50KC1xYSxpKSxyLnBvaW50KDAsaSksci5wb2ludChxYSxpKSxyLnBvaW50KHFhLDApLHIucG9pbnQocWEsLWkpLHIucG9pbnQoMCwtaSksci5wb2ludCgtcWEsLWkpLHIucG9pbnQoLXFhLDApLHIucG9pbnQoLXFhLGkpO2Vsc2UgaWYoSGEodFswXS1uWzBdKT5EYSl7dmFyIG89dFswXTxuWzBdP3FhOi1xYTtpPWUqby8yLHIucG9pbnQoLW8saSksci5wb2ludCgwLGkpLHIucG9pbnQobyxpKX1lbHNlIHIucG9pbnQoblswXSxuWzFdKX0sWy1xYSwtT2FdKTtmdW5jdGlvbiBWZih0KXt2YXIgbj1HYSh0KSxlPTYqSWEscj1uPjAsaT1IYShuKT5EYTtmdW5jdGlvbiBvKHQsZSl7cmV0dXJuIEdhKHQpKkdhKGUpPm59ZnVuY3Rpb24gYSh0LGUscil7dmFyIGk9WzEsMCwwXSxvPU51KEF1KHQpLEF1KGUpKSxhPVR1KG8sbyksdT1vWzBdLGY9YS11KnU7aWYoIWYpcmV0dXJuIXImJnQ7dmFyIGM9biphL2Yscz0tbip1L2YsbD1OdShpLG8pLGg9RXUoaSxjKTtTdShoLEV1KG8scykpO3ZhciBkPWwscD1UdShoLGQpLHY9VHUoZCxkKSxnPXAqcC12KihUdShoLGgpLTEpO2lmKCEoZzwwKSl7dmFyIHk9S2EoZyksXz1FdShkLCgtcC15KS92KTtpZihTdShfLGgpLF89TXUoXyksIXIpcmV0dXJuIF87dmFyIGIsbT10WzBdLHg9ZVswXSx3PXRbMV0sTT1lWzFdO3g8bSYmKGI9bSxtPXgseD1iKTt2YXIgQT14LW0sVD1IYShBLXFhKTxEYTtpZighVCYmTTx3JiYoYj13LHc9TSxNPWIpLFR8fEE8RGE/VD93K00+MF5fWzFdPChIYShfWzBdLW0pPERhP3c6TSk6dzw9X1sxXSYmX1sxXTw9TTpBPnFhXihtPD1fWzBdJiZfWzBdPD14KSl7dmFyIE49RXUoZCwoLXAreSkvdik7cmV0dXJuIFN1KE4saCksW18sTXUoTildfX19ZnVuY3Rpb24gdShuLGUpe3ZhciBpPXI/dDpxYS10LG89MDtyZXR1cm4gbjwtaT9vfD0xOm4+aSYmKG98PTIpLGU8LWk/b3w9NDplPmkmJihvfD04KSxvfXJldHVybiBIZihvLGZ1bmN0aW9uKHQpe3ZhciBuLGUsZixjLHM7cmV0dXJue2xpbmVTdGFydDpmdW5jdGlvbigpe2M9Zj0hMSxzPTF9LHBvaW50OmZ1bmN0aW9uKGwsaCl7dmFyIGQscD1bbCxoXSx2PW8obCxoKSxnPXI/dj8wOnUobCxoKTp2P3UobCsobDwwP3FhOi1xYSksaCk6MDtpZighbiYmKGM9Zj12KSYmdC5saW5lU3RhcnQoKSx2IT09ZiYmKCEoZD1hKG4scCkpfHxxZihuLGQpfHxxZihwLGQpKSYmKHBbMF0rPURhLHBbMV0rPURhLHY9byhwWzBdLHBbMV0pKSx2IT09ZilzPTAsdj8odC5saW5lU3RhcnQoKSxkPWEocCxuKSx0LnBvaW50KGRbMF0sZFsxXSkpOihkPWEobixwKSx0LnBvaW50KGRbMF0sZFsxXSksdC5saW5lRW5kKCkpLG49ZDtlbHNlIGlmKGkmJm4mJnJedil7dmFyIHk7ZyZlfHwhKHk9YShwLG4sITApKXx8KHM9MCxyPyh0LmxpbmVTdGFydCgpLHQucG9pbnQoeVswXVswXSx5WzBdWzFdKSx0LnBvaW50KHlbMV1bMF0seVsxXVsxXSksdC5saW5lRW5kKCkpOih0LnBvaW50KHlbMV1bMF0seVsxXVsxXSksdC5saW5lRW5kKCksdC5saW5lU3RhcnQoKSx0LnBvaW50KHlbMF1bMF0seVswXVsxXSkpKX0hdnx8biYmcWYobixwKXx8dC5wb2ludChwWzBdLHBbMV0pLG49cCxmPXYsZT1nfSxsaW5lRW5kOmZ1bmN0aW9uKCl7ZiYmdC5saW5lRW5kKCksbj1udWxsfSxjbGVhbjpmdW5jdGlvbigpe3JldHVybiBzfChjJiZmKTw8MX19fSxmdW5jdGlvbihuLHIsaSxvKXtMZihvLHQsZSxpLG4scil9LHI/WzAsLXRdOlstcWEsdC1xYV0pfXZhciAkZj0xZTksV2Y9LSRmO2Z1bmN0aW9uIFpmKHQsbixlLHIpe2Z1bmN0aW9uIGkoaSxvKXtyZXR1cm4gdDw9aSYmaTw9ZSYmbjw9byYmbzw9cn1mdW5jdGlvbiBvKGksbyx1LGMpe3ZhciBzPTAsbD0wO2lmKG51bGw9PWl8fChzPWEoaSx1KSkhPT0obD1hKG8sdSkpfHxmKGksbyk8MF51PjApZG97Yy5wb2ludCgwPT09c3x8Mz09PXM/dDplLHM+MT9yOm4pfXdoaWxlKChzPShzK3UrNCklNCkhPT1sKTtlbHNlIGMucG9pbnQob1swXSxvWzFdKX1mdW5jdGlvbiBhKHIsaSl7cmV0dXJuIEhhKHJbMF0tdCk8RGE/aT4wPzA6MzpIYShyWzBdLWUpPERhP2k+MD8yOjE6SGEoclsxXS1uKTxEYT9pPjA/MTowOmk+MD8zOjJ9ZnVuY3Rpb24gdSh0LG4pe3JldHVybiBmKHQueCxuLngpfWZ1bmN0aW9uIGYodCxuKXt2YXIgZT1hKHQsMSkscj1hKG4sMSk7cmV0dXJuIGUhPT1yP2UtcjowPT09ZT9uWzFdLXRbMV06MT09PWU/dFswXS1uWzBdOjI9PT1lP3RbMV0tblsxXTpuWzBdLXRbMF19cmV0dXJuIGZ1bmN0aW9uKGEpe3ZhciBmLGMscyxsLGgsZCxwLHYsZyx5LF8sYj1hLG09VWYoKSx4PXtwb2ludDp3LGxpbmVTdGFydDpmdW5jdGlvbigpe3gucG9pbnQ9TSxjJiZjLnB1c2gocz1bXSk7eT0hMCxnPSExLHA9dj1OYU59LGxpbmVFbmQ6ZnVuY3Rpb24oKXtmJiYoTShsLGgpLGQmJmcmJm0ucmVqb2luKCksZi5wdXNoKG0ucmVzdWx0KCkpKTt4LnBvaW50PXcsZyYmYi5saW5lRW5kKCl9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe2I9bSxmPVtdLGM9W10sXz0hMH0scG9seWdvbkVuZDpmdW5jdGlvbigpe3ZhciBuPWZ1bmN0aW9uKCl7Zm9yKHZhciBuPTAsZT0wLGk9Yy5sZW5ndGg7ZTxpOysrZSlmb3IodmFyIG8sYSx1PWNbZV0sZj0xLHM9dS5sZW5ndGgsbD11WzBdLGg9bFswXSxkPWxbMV07ZjxzOysrZilvPWgsYT1kLGw9dVtmXSxoPWxbMF0sZD1sWzFdLGE8PXI/ZD5yJiYoaC1vKSooci1hKT4oZC1hKSoodC1vKSYmKytuOmQ8PXImJihoLW8pKihyLWEpPChkLWEpKih0LW8pJiYtLW47cmV0dXJuIG59KCksZT1fJiZuLGk9KGY9TihmKSkubGVuZ3RoOyhlfHxpKSYmKGEucG9seWdvblN0YXJ0KCksZSYmKGEubGluZVN0YXJ0KCksbyhudWxsLG51bGwsMSxhKSxhLmxpbmVFbmQoKSksaSYmWWYoZix1LG4sbyxhKSxhLnBvbHlnb25FbmQoKSk7Yj1hLGY9Yz1zPW51bGx9fTtmdW5jdGlvbiB3KHQsbil7aSh0LG4pJiZiLnBvaW50KHQsbil9ZnVuY3Rpb24gTShvLGEpe3ZhciB1PWkobyxhKTtpZihjJiZzLnB1c2goW28sYV0pLHkpbD1vLGg9YSxkPXUseT0hMSx1JiYoYi5saW5lU3RhcnQoKSxiLnBvaW50KG8sYSkpO2Vsc2UgaWYodSYmZyliLnBvaW50KG8sYSk7ZWxzZXt2YXIgZj1bcD1NYXRoLm1heChXZixNYXRoLm1pbigkZixwKSksdj1NYXRoLm1heChXZixNYXRoLm1pbigkZix2KSldLG09W289TWF0aC5tYXgoV2YsTWF0aC5taW4oJGYsbykpLGE9TWF0aC5tYXgoV2YsTWF0aC5taW4oJGYsYSkpXTshZnVuY3Rpb24odCxuLGUscixpLG8pe3ZhciBhLHU9dFswXSxmPXRbMV0sYz0wLHM9MSxsPW5bMF0tdSxoPW5bMV0tZjtpZihhPWUtdSxsfHwhKGE+MCkpe2lmKGEvPWwsbDwwKXtpZihhPGMpcmV0dXJuO2E8cyYmKHM9YSl9ZWxzZSBpZihsPjApe2lmKGE+cylyZXR1cm47YT5jJiYoYz1hKX1pZihhPWktdSxsfHwhKGE8MCkpe2lmKGEvPWwsbDwwKXtpZihhPnMpcmV0dXJuO2E+YyYmKGM9YSl9ZWxzZSBpZihsPjApe2lmKGE8YylyZXR1cm47YTxzJiYocz1hKX1pZihhPXItZixofHwhKGE+MCkpe2lmKGEvPWgsaDwwKXtpZihhPGMpcmV0dXJuO2E8cyYmKHM9YSl9ZWxzZSBpZihoPjApe2lmKGE+cylyZXR1cm47YT5jJiYoYz1hKX1pZihhPW8tZixofHwhKGE8MCkpe2lmKGEvPWgsaDwwKXtpZihhPnMpcmV0dXJuO2E+YyYmKGM9YSl9ZWxzZSBpZihoPjApe2lmKGE8YylyZXR1cm47YTxzJiYocz1hKX1yZXR1cm4gYz4wJiYodFswXT11K2MqbCx0WzFdPWYrYypoKSxzPDEmJihuWzBdPXUrcypsLG5bMV09ZitzKmgpLCEwfX19fX0oZixtLHQsbixlLHIpP3UmJihiLmxpbmVTdGFydCgpLGIucG9pbnQobyxhKSxfPSExKTooZ3x8KGIubGluZVN0YXJ0KCksYi5wb2ludChmWzBdLGZbMV0pKSxiLnBvaW50KG1bMF0sbVsxXSksdXx8Yi5saW5lRW5kKCksXz0hMSl9cD1vLHY9YSxnPXV9cmV0dXJuIHh9fXZhciBRZixKZixLZix0Yz1QYSgpLG5jPXtzcGhlcmU6aXUscG9pbnQ6aXUsbGluZVN0YXJ0OmZ1bmN0aW9uKCl7bmMucG9pbnQ9cmMsbmMubGluZUVuZD1lY30sbGluZUVuZDppdSxwb2x5Z29uU3RhcnQ6aXUscG9seWdvbkVuZDppdX07ZnVuY3Rpb24gZWMoKXtuYy5wb2ludD1uYy5saW5lRW5kPWl1fWZ1bmN0aW9uIHJjKHQsbil7UWY9dCo9SWEsSmY9UWEobio9SWEpLEtmPUdhKG4pLG5jLnBvaW50PWljfWZ1bmN0aW9uIGljKHQsbil7dCo9SWE7dmFyIGU9UWEobio9SWEpLHI9R2EobiksaT1IYSh0LVFmKSxvPUdhKGkpLGE9cipRYShpKSx1PUtmKmUtSmYqcipvLGY9SmYqZStLZipyKm87dGMuYWRkKFhhKEthKGEqYSt1KnUpLGYpKSxRZj10LEpmPWUsS2Y9cn1mdW5jdGlvbiBvYyh0KXtyZXR1cm4gdGMucmVzZXQoKSxzdSh0LG5jKSwrdGN9dmFyIGFjPVtudWxsLG51bGxdLHVjPXt0eXBlOiJMaW5lU3RyaW5nIixjb29yZGluYXRlczphY307ZnVuY3Rpb24gZmModCxuKXtyZXR1cm4gYWNbMF09dCxhY1sxXT1uLG9jKHVjKX12YXIgY2M9e0ZlYXR1cmU6ZnVuY3Rpb24odCxuKXtyZXR1cm4gbGModC5nZW9tZXRyeSxuKX0sRmVhdHVyZUNvbGxlY3Rpb246ZnVuY3Rpb24odCxuKXtmb3IodmFyIGU9dC5mZWF0dXJlcyxyPS0xLGk9ZS5sZW5ndGg7KytyPGk7KWlmKGxjKGVbcl0uZ2VvbWV0cnksbikpcmV0dXJuITA7cmV0dXJuITF9fSxzYz17U3BoZXJlOmZ1bmN0aW9uKCl7cmV0dXJuITB9LFBvaW50OmZ1bmN0aW9uKHQsbil7cmV0dXJuIGhjKHQuY29vcmRpbmF0ZXMsbil9LE11bHRpUG9pbnQ6ZnVuY3Rpb24odCxuKXtmb3IodmFyIGU9dC5jb29yZGluYXRlcyxyPS0xLGk9ZS5sZW5ndGg7KytyPGk7KWlmKGhjKGVbcl0sbikpcmV0dXJuITA7cmV0dXJuITF9LExpbmVTdHJpbmc6ZnVuY3Rpb24odCxuKXtyZXR1cm4gZGModC5jb29yZGluYXRlcyxuKX0sTXVsdGlMaW5lU3RyaW5nOmZ1bmN0aW9uKHQsbil7Zm9yKHZhciBlPXQuY29vcmRpbmF0ZXMscj0tMSxpPWUubGVuZ3RoOysrcjxpOylpZihkYyhlW3JdLG4pKXJldHVybiEwO3JldHVybiExfSxQb2x5Z29uOmZ1bmN0aW9uKHQsbil7cmV0dXJuIHBjKHQuY29vcmRpbmF0ZXMsbil9LE11bHRpUG9seWdvbjpmdW5jdGlvbih0LG4pe2Zvcih2YXIgZT10LmNvb3JkaW5hdGVzLHI9LTEsaT1lLmxlbmd0aDsrK3I8aTspaWYocGMoZVtyXSxuKSlyZXR1cm4hMDtyZXR1cm4hMX0sR2VvbWV0cnlDb2xsZWN0aW9uOmZ1bmN0aW9uKHQsbil7Zm9yKHZhciBlPXQuZ2VvbWV0cmllcyxyPS0xLGk9ZS5sZW5ndGg7KytyPGk7KWlmKGxjKGVbcl0sbikpcmV0dXJuITA7cmV0dXJuITF9fTtmdW5jdGlvbiBsYyh0LG4pe3JldHVybiEoIXR8fCFzYy5oYXNPd25Qcm9wZXJ0eSh0LnR5cGUpKSYmc2NbdC50eXBlXSh0LG4pfWZ1bmN0aW9uIGhjKHQsbil7cmV0dXJuIDA9PT1mYyh0LG4pfWZ1bmN0aW9uIGRjKHQsbil7dmFyIGU9ZmModFswXSx0WzFdKTtyZXR1cm4gZmModFswXSxuKStmYyhuLHRbMV0pPD1lK0RhfWZ1bmN0aW9uIHBjKHQsbil7cmV0dXJuISFJZih0Lm1hcCh2YyksZ2MobikpfWZ1bmN0aW9uIHZjKHQpe3JldHVybih0PXQubWFwKGdjKSkucG9wKCksdH1mdW5jdGlvbiBnYyh0KXtyZXR1cm5bdFswXSpJYSx0WzFdKklhXX1mdW5jdGlvbiB5Yyh0LG4sZSl7dmFyIHI9Zyh0LG4tRGEsZSkuY29uY2F0KG4pO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gci5tYXAoZnVuY3Rpb24obil7cmV0dXJuW3Qsbl19KX19ZnVuY3Rpb24gX2ModCxuLGUpe3ZhciByPWcodCxuLURhLGUpLmNvbmNhdChuKTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHIubWFwKGZ1bmN0aW9uKG4pe3JldHVybltuLHRdfSl9fWZ1bmN0aW9uIGJjKCl7dmFyIHQsbixlLHIsaSxvLGEsdSxmLGMscyxsLGg9MTAsZD1oLHA9OTAsdj0zNjAseT0yLjU7ZnVuY3Rpb24gXygpe3JldHVybnt0eXBlOiJNdWx0aUxpbmVTdHJpbmciLGNvb3JkaW5hdGVzOmIoKX19ZnVuY3Rpb24gYigpe3JldHVybiBnKFZhKHIvcCkqcCxlLHApLm1hcChzKS5jb25jYXQoZyhWYSh1L3YpKnYsYSx2KS5tYXAobCkpLmNvbmNhdChnKFZhKG4vaCkqaCx0LGgpLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gSGEodCVwKT5EYX0pLm1hcChmKSkuY29uY2F0KGcoVmEoby9kKSpkLGksZCkuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiBIYSh0JXYpPkRhfSkubWFwKGMpKX1yZXR1cm4gXy5saW5lcz1mdW5jdGlvbigpe3JldHVybiBiKCkubWFwKGZ1bmN0aW9uKHQpe3JldHVybnt0eXBlOiJMaW5lU3RyaW5nIixjb29yZGluYXRlczp0fX0pfSxfLm91dGxpbmU9ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToiUG9seWdvbiIsY29vcmRpbmF0ZXM6W3MocikuY29uY2F0KGwoYSkuc2xpY2UoMSkscyhlKS5yZXZlcnNlKCkuc2xpY2UoMSksbCh1KS5yZXZlcnNlKCkuc2xpY2UoMSkpXX19LF8uZXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP18uZXh0ZW50TWFqb3IodCkuZXh0ZW50TWlub3IodCk6Xy5leHRlbnRNaW5vcigpfSxfLmV4dGVudE1ham9yPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSt0WzBdWzBdLGU9K3RbMV1bMF0sdT0rdFswXVsxXSxhPSt0WzFdWzFdLHI+ZSYmKHQ9cixyPWUsZT10KSx1PmEmJih0PXUsdT1hLGE9dCksXy5wcmVjaXNpb24oeSkpOltbcix1XSxbZSxhXV19LF8uZXh0ZW50TWlub3I9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49K2VbMF1bMF0sdD0rZVsxXVswXSxvPStlWzBdWzFdLGk9K2VbMV1bMV0sbj50JiYoZT1uLG49dCx0PWUpLG8+aSYmKGU9byxvPWksaT1lKSxfLnByZWNpc2lvbih5KSk6W1tuLG9dLFt0LGldXX0sXy5zdGVwPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP18uc3RlcE1ham9yKHQpLnN0ZXBNaW5vcih0KTpfLnN0ZXBNaW5vcigpfSxfLnN0ZXBNYWpvcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD0rdFswXSx2PSt0WzFdLF8pOltwLHZdfSxfLnN0ZXBNaW5vcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD0rdFswXSxkPSt0WzFdLF8pOltoLGRdfSxfLnByZWNpc2lvbj1mdW5jdGlvbihoKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oeT0raCxmPXljKG8saSw5MCksYz1fYyhuLHQseSkscz15Yyh1LGEsOTApLGw9X2MocixlLHkpLF8pOnl9LF8uZXh0ZW50TWFqb3IoW1stMTgwLC05MCtEYV0sWzE4MCw5MC1EYV1dKS5leHRlbnRNaW5vcihbWy0xODAsLTgwLURhXSxbMTgwLDgwK0RhXV0pfWZ1bmN0aW9uIG1jKHQpe3JldHVybiB0fXZhciB4Yyx3YyxNYyxBYyxUYz1QYSgpLE5jPVBhKCksU2M9e3BvaW50Oml1LGxpbmVTdGFydDppdSxsaW5lRW5kOml1LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe1NjLmxpbmVTdGFydD1FYyxTYy5saW5lRW5kPVBjfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7U2MubGluZVN0YXJ0PVNjLmxpbmVFbmQ9U2MucG9pbnQ9aXUsVGMuYWRkKEhhKE5jKSksTmMucmVzZXQoKX0scmVzdWx0OmZ1bmN0aW9uKCl7dmFyIHQ9VGMvMjtyZXR1cm4gVGMucmVzZXQoKSx0fX07ZnVuY3Rpb24gRWMoKXtTYy5wb2ludD1rY31mdW5jdGlvbiBrYyh0LG4pe1NjLnBvaW50PUNjLHhjPU1jPXQsd2M9QWM9bn1mdW5jdGlvbiBDYyh0LG4pe05jLmFkZChBYyp0LU1jKm4pLE1jPXQsQWM9bn1mdW5jdGlvbiBQYygpe0NjKHhjLHdjKX12YXIgemM9MS8wLFJjPXpjLExjPS16YyxEYz1MYyxVYz17cG9pbnQ6ZnVuY3Rpb24odCxuKXt0PHpjJiYoemM9dCk7dD5MYyYmKExjPXQpO248UmMmJihSYz1uKTtuPkRjJiYoRGM9bil9LGxpbmVTdGFydDppdSxsaW5lRW5kOml1LHBvbHlnb25TdGFydDppdSxwb2x5Z29uRW5kOml1LHJlc3VsdDpmdW5jdGlvbigpe3ZhciB0PVtbemMsUmNdLFtMYyxEY11dO3JldHVybiBMYz1EYz0tKFJjPXpjPTEvMCksdH19O3ZhciBxYyxPYyxZYyxCYyxGYz0wLEljPTAsSGM9MCxqYz0wLFhjPTAsR2M9MCxWYz0wLCRjPTAsV2M9MCxaYz17cG9pbnQ6UWMsbGluZVN0YXJ0OkpjLGxpbmVFbmQ6bnMscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7WmMubGluZVN0YXJ0PWVzLFpjLmxpbmVFbmQ9cnN9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtaYy5wb2ludD1RYyxaYy5saW5lU3RhcnQ9SmMsWmMubGluZUVuZD1uc30scmVzdWx0OmZ1bmN0aW9uKCl7dmFyIHQ9V2M/W1ZjL1djLCRjL1djXTpHYz9bamMvR2MsWGMvR2NdOkhjP1tGYy9IYyxJYy9IY106W05hTixOYU5dO3JldHVybiBGYz1JYz1IYz1qYz1YYz1HYz1WYz0kYz1XYz0wLHR9fTtmdW5jdGlvbiBRYyh0LG4pe0ZjKz10LEljKz1uLCsrSGN9ZnVuY3Rpb24gSmMoKXtaYy5wb2ludD1LY31mdW5jdGlvbiBLYyh0LG4pe1pjLnBvaW50PXRzLFFjKFljPXQsQmM9bil9ZnVuY3Rpb24gdHModCxuKXt2YXIgZT10LVljLHI9bi1CYyxpPUthKGUqZStyKnIpO2pjKz1pKihZYyt0KS8yLFhjKz1pKihCYytuKS8yLEdjKz1pLFFjKFljPXQsQmM9bil9ZnVuY3Rpb24gbnMoKXtaYy5wb2ludD1RY31mdW5jdGlvbiBlcygpe1pjLnBvaW50PWlzfWZ1bmN0aW9uIHJzKCl7b3MocWMsT2MpfWZ1bmN0aW9uIGlzKHQsbil7WmMucG9pbnQ9b3MsUWMocWM9WWM9dCxPYz1CYz1uKX1mdW5jdGlvbiBvcyh0LG4pe3ZhciBlPXQtWWMscj1uLUJjLGk9S2EoZSplK3Iqcik7amMrPWkqKFljK3QpLzIsWGMrPWkqKEJjK24pLzIsR2MrPWksVmMrPShpPUJjKnQtWWMqbikqKFljK3QpLCRjKz1pKihCYytuKSxXYys9MyppLFFjKFljPXQsQmM9bil9ZnVuY3Rpb24gYXModCl7dGhpcy5fY29udGV4dD10fWFzLnByb3RvdHlwZT17X3JhZGl1czo0LjUscG9pbnRSYWRpdXM6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3JhZGl1cz10LHRoaXN9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0scG9seWdvbkVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7MD09PXRoaXMuX2xpbmUmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fcG9pbnQ9TmFOfSxwb2ludDpmdW5jdGlvbih0LG4pe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsbiksdGhpcy5fcG9pbnQ9MTticmVhaztjYXNlIDE6dGhpcy5fY29udGV4dC5saW5lVG8odCxuKTticmVhaztkZWZhdWx0OnRoaXMuX2NvbnRleHQubW92ZVRvKHQrdGhpcy5fcmFkaXVzLG4pLHRoaXMuX2NvbnRleHQuYXJjKHQsbix0aGlzLl9yYWRpdXMsMCxCYSl9fSxyZXN1bHQ6aXV9O3ZhciB1cyxmcyxjcyxzcyxscyxocz1QYSgpLGRzPXtwb2ludDppdSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtkcy5wb2ludD1wc30sbGluZUVuZDpmdW5jdGlvbigpe3VzJiZ2cyhmcyxjcyksZHMucG9pbnQ9aXV9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3VzPSEwfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dXM9bnVsbH0scmVzdWx0OmZ1bmN0aW9uKCl7dmFyIHQ9K2hzO3JldHVybiBocy5yZXNldCgpLHR9fTtmdW5jdGlvbiBwcyh0LG4pe2RzLnBvaW50PXZzLGZzPXNzPXQsY3M9bHM9bn1mdW5jdGlvbiB2cyh0LG4pe3NzLT10LGxzLT1uLGhzLmFkZChLYShzcypzcytscypscykpLHNzPXQsbHM9bn1mdW5jdGlvbiBncygpe3RoaXMuX3N0cmluZz1bXX1mdW5jdGlvbiB5cyh0KXtyZXR1cm4ibTAsIit0KyJhIit0KyIsIit0KyIgMCAxLDEgMCwiKy0yKnQrImEiK3QrIiwiK3QrIiAwIDEsMSAwLCIrMip0KyJ6In1mdW5jdGlvbiBfcyh0KXtyZXR1cm4gZnVuY3Rpb24obil7dmFyIGU9bmV3IGJzO2Zvcih2YXIgciBpbiB0KWVbcl09dFtyXTtyZXR1cm4gZS5zdHJlYW09bixlfX1mdW5jdGlvbiBicygpe31mdW5jdGlvbiBtcyh0LG4sZSl7dmFyIHI9dC5jbGlwRXh0ZW50JiZ0LmNsaXBFeHRlbnQoKTtyZXR1cm4gdC5zY2FsZSgxNTApLnRyYW5zbGF0ZShbMCwwXSksbnVsbCE9ciYmdC5jbGlwRXh0ZW50KG51bGwpLHN1KGUsdC5zdHJlYW0oVWMpKSxuKFVjLnJlc3VsdCgpKSxudWxsIT1yJiZ0LmNsaXBFeHRlbnQociksdH1mdW5jdGlvbiB4cyh0LG4sZSl7cmV0dXJuIG1zKHQsZnVuY3Rpb24oZSl7dmFyIHI9blsxXVswXS1uWzBdWzBdLGk9blsxXVsxXS1uWzBdWzFdLG89TWF0aC5taW4oci8oZVsxXVswXS1lWzBdWzBdKSxpLyhlWzFdWzFdLWVbMF1bMV0pKSxhPStuWzBdWzBdKyhyLW8qKGVbMV1bMF0rZVswXVswXSkpLzIsdT0rblswXVsxXSsoaS1vKihlWzFdWzFdK2VbMF1bMV0pKS8yO3Quc2NhbGUoMTUwKm8pLnRyYW5zbGF0ZShbYSx1XSl9LGUpfWZ1bmN0aW9uIHdzKHQsbixlKXtyZXR1cm4geHModCxbWzAsMF0sbl0sZSl9ZnVuY3Rpb24gTXModCxuLGUpe3JldHVybiBtcyh0LGZ1bmN0aW9uKGUpe3ZhciByPStuLGk9ci8oZVsxXVswXS1lWzBdWzBdKSxvPShyLWkqKGVbMV1bMF0rZVswXVswXSkpLzIsYT0taSplWzBdWzFdO3Quc2NhbGUoMTUwKmkpLnRyYW5zbGF0ZShbbyxhXSl9LGUpfWZ1bmN0aW9uIEFzKHQsbixlKXtyZXR1cm4gbXModCxmdW5jdGlvbihlKXt2YXIgcj0rbixpPXIvKGVbMV1bMV0tZVswXVsxXSksbz0taSplWzBdWzBdLGE9KHItaSooZVsxXVsxXStlWzBdWzFdKSkvMjt0LnNjYWxlKDE1MCppKS50cmFuc2xhdGUoW28sYV0pfSxlKX1ncy5wcm90b3R5cGU9e19yYWRpdXM6NC41LF9jaXJjbGU6eXMoNC41KSxwb2ludFJhZGl1czpmdW5jdGlvbih0KXtyZXR1cm4odD0rdCkhPT10aGlzLl9yYWRpdXMmJih0aGlzLl9yYWRpdXM9dCx0aGlzLl9jaXJjbGU9bnVsbCksdGhpc30scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXswPT09dGhpcy5fbGluZSYmdGhpcy5fc3RyaW5nLnB1c2goIloiKSx0aGlzLl9wb2ludD1OYU59LHBvaW50OmZ1bmN0aW9uKHQsbil7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fc3RyaW5nLnB1c2goIk0iLHQsIiwiLG4pLHRoaXMuX3BvaW50PTE7YnJlYWs7Y2FzZSAxOnRoaXMuX3N0cmluZy5wdXNoKCJMIix0LCIsIixuKTticmVhaztkZWZhdWx0Om51bGw9PXRoaXMuX2NpcmNsZSYmKHRoaXMuX2NpcmNsZT15cyh0aGlzLl9yYWRpdXMpKSx0aGlzLl9zdHJpbmcucHVzaCgiTSIsdCwiLCIsbix0aGlzLl9jaXJjbGUpfX0scmVzdWx0OmZ1bmN0aW9uKCl7aWYodGhpcy5fc3RyaW5nLmxlbmd0aCl7dmFyIHQ9dGhpcy5fc3RyaW5nLmpvaW4oIiIpO3JldHVybiB0aGlzLl9zdHJpbmc9W10sdH1yZXR1cm4gbnVsbH19LGJzLnByb3RvdHlwZT17Y29uc3RydWN0b3I6YnMscG9pbnQ6ZnVuY3Rpb24odCxuKXt0aGlzLnN0cmVhbS5wb2ludCh0LG4pfSxzcGhlcmU6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5zcGhlcmUoKX0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0ubGluZVN0YXJ0KCl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5saW5lRW5kKCl9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLnBvbHlnb25TdGFydCgpfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0ucG9seWdvbkVuZCgpfX07dmFyIFRzPTE2LE5zPUdhKDMwKklhKTtmdW5jdGlvbiBTcyh0LG4pe3JldHVybituP2Z1bmN0aW9uKHQsbil7ZnVuY3Rpb24gZShyLGksbyxhLHUsZixjLHMsbCxoLGQscCx2LGcpe3ZhciB5PWMtcixfPXMtaSxiPXkqeStfKl87aWYoYj40Km4mJnYtLSl7dmFyIG09YStoLHg9dStkLHc9ZitwLE09S2EobSptK3gqeCt3KncpLEE9ZXUody89TSksVD1IYShIYSh3KS0xKTxEYXx8SGEoby1sKTxEYT8obytsKS8yOlhhKHgsbSksTj10KFQsQSksUz1OWzBdLEU9TlsxXSxrPVMtcixDPUUtaSxQPV8qay15KkM7KFAqUC9iPm58fEhhKCh5KmsrXypDKS9iLS41KT4uM3x8YSpoK3UqZCtmKnA8TnMpJiYoZShyLGksbyxhLHUsZixTLEUsVCxtLz1NLHgvPU0sdyx2LGcpLGcucG9pbnQoUyxFKSxlKFMsRSxULG0seCx3LGMscyxsLGgsZCxwLHYsZykpfX1yZXR1cm4gZnVuY3Rpb24obil7dmFyIHIsaSxvLGEsdSxmLGMscyxsLGgsZCxwLHY9e3BvaW50OmcsbGluZVN0YXJ0OnksbGluZUVuZDpiLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe24ucG9seWdvblN0YXJ0KCksdi5saW5lU3RhcnQ9bX0scG9seWdvbkVuZDpmdW5jdGlvbigpe24ucG9seWdvbkVuZCgpLHYubGluZVN0YXJ0PXl9fTtmdW5jdGlvbiBnKGUscil7ZT10KGUsciksbi5wb2ludChlWzBdLGVbMV0pfWZ1bmN0aW9uIHkoKXtzPU5hTix2LnBvaW50PV8sbi5saW5lU3RhcnQoKX1mdW5jdGlvbiBfKHIsaSl7dmFyIG89QXUoW3IsaV0pLGE9dChyLGkpO2UocyxsLGMsaCxkLHAscz1hWzBdLGw9YVsxXSxjPXIsaD1vWzBdLGQ9b1sxXSxwPW9bMl0sVHMsbiksbi5wb2ludChzLGwpfWZ1bmN0aW9uIGIoKXt2LnBvaW50PWcsbi5saW5lRW5kKCl9ZnVuY3Rpb24gbSgpe3koKSx2LnBvaW50PXgsdi5saW5lRW5kPXd9ZnVuY3Rpb24geCh0LG4pe18ocj10LG4pLGk9cyxvPWwsYT1oLHU9ZCxmPXAsdi5wb2ludD1ffWZ1bmN0aW9uIHcoKXtlKHMsbCxjLGgsZCxwLGksbyxyLGEsdSxmLFRzLG4pLHYubGluZUVuZD1iLGIoKX1yZXR1cm4gdn19KHQsbik6ZnVuY3Rpb24odCl7cmV0dXJuIF9zKHtwb2ludDpmdW5jdGlvbihuLGUpe249dChuLGUpLHRoaXMuc3RyZWFtLnBvaW50KG5bMF0sblsxXSl9fSl9KHQpfXZhciBFcz1fcyh7cG9pbnQ6ZnVuY3Rpb24odCxuKXt0aGlzLnN0cmVhbS5wb2ludCh0KklhLG4qSWEpfX0pO2Z1bmN0aW9uIGtzKHQsbixlLHIpe3ZhciBpPUdhKHIpLG89UWEociksYT1pKnQsdT1vKnQsZj1pL3QsYz1vL3Qscz0obyplLWkqbikvdCxsPShvKm4raSplKS90O2Z1bmN0aW9uIGgodCxyKXtyZXR1cm5bYSp0LXUqcituLGUtdSp0LWEqcl19cmV0dXJuIGguaW52ZXJ0PWZ1bmN0aW9uKHQsbil7cmV0dXJuW2YqdC1jKm4rcyxsLWMqdC1mKm5dfSxofWZ1bmN0aW9uIENzKHQpe3JldHVybiBQcyhmdW5jdGlvbigpe3JldHVybiB0fSkoKX1mdW5jdGlvbiBQcyh0KXt2YXIgbixlLHIsaSxvLGEsdSxmLGMscyxsPTE1MCxoPTQ4MCxkPTI1MCxwPTAsdj0wLGc9MCx5PTAsXz0wLGI9MCxtPW51bGwseD1HZix3PW51bGwsTT1tYyxBPS41O2Z1bmN0aW9uIFQodCl7cmV0dXJuIGYodFswXSpJYSx0WzFdKklhKX1mdW5jdGlvbiBOKHQpe3JldHVybih0PWYuaW52ZXJ0KHRbMF0sdFsxXSkpJiZbdFswXSpGYSx0WzFdKkZhXX1mdW5jdGlvbiBTKCl7dmFyIHQ9a3MobCwwLDAsYikuYXBwbHkobnVsbCxuKHAsdikpLHI9KGI/a3M6ZnVuY3Rpb24odCxuLGUpe2Z1bmN0aW9uIHIocixpKXtyZXR1cm5bbit0KnIsZS10KmldfXJldHVybiByLmludmVydD1mdW5jdGlvbihyLGkpe3JldHVyblsoci1uKS90LChlLWkpL3RdfSxyfSkobCxoLXRbMF0sZC10WzFdLGIpO3JldHVybiBlPWtmKGcseSxfKSx1PVNmKG4sciksZj1TZihlLHUpLGE9U3ModSxBKSxFKCl9ZnVuY3Rpb24gRSgpe3JldHVybiBjPXM9bnVsbCxUfXJldHVybiBULnN0cmVhbT1mdW5jdGlvbih0KXtyZXR1cm4gYyYmcz09PXQ/YzpjPUVzKGZ1bmN0aW9uKHQpe3JldHVybiBfcyh7cG9pbnQ6ZnVuY3Rpb24obixlKXt2YXIgcj10KG4sZSk7cmV0dXJuIHRoaXMuc3RyZWFtLnBvaW50KHJbMF0sclsxXSl9fSl9KGUpKHgoYShNKHM9dCkpKSkpfSxULnByZWNsaXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHg9dCxtPXZvaWQgMCxFKCkpOnh9LFQucG9zdGNsaXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KE09dCx3PXI9aT1vPW51bGwsRSgpKTpNfSxULmNsaXBBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oeD0rdD9WZihtPXQqSWEpOihtPW51bGwsR2YpLEUoKSk6bSpGYX0sVC5jbGlwRXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhNPW51bGw9PXQ/KHc9cj1pPW89bnVsbCxtYyk6WmYodz0rdFswXVswXSxyPSt0WzBdWzFdLGk9K3RbMV1bMF0sbz0rdFsxXVsxXSksRSgpKTpudWxsPT13P251bGw6W1t3LHJdLFtpLG9dXX0sVC5zY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD0rdCxTKCkpOmx9LFQudHJhbnNsYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPSt0WzBdLGQ9K3RbMV0sUygpKTpbaCxkXX0sVC5jZW50ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9dFswXSUzNjAqSWEsdj10WzFdJTM2MCpJYSxTKCkpOltwKkZhLHYqRmFdfSxULnJvdGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZz10WzBdJTM2MCpJYSx5PXRbMV0lMzYwKklhLF89dC5sZW5ndGg+Mj90WzJdJTM2MCpJYTowLFMoKSk6W2cqRmEseSpGYSxfKkZhXX0sVC5hbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYj10JTM2MCpJYSxTKCkpOmIqRmF9LFQucHJlY2lzaW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPVNzKHUsQT10KnQpLEUoKSk6S2EoQSl9LFQuZml0RXh0ZW50PWZ1bmN0aW9uKHQsbil7cmV0dXJuIHhzKFQsdCxuKX0sVC5maXRTaXplPWZ1bmN0aW9uKHQsbil7cmV0dXJuIHdzKFQsdCxuKX0sVC5maXRXaWR0aD1mdW5jdGlvbih0LG4pe3JldHVybiBNcyhULHQsbil9LFQuZml0SGVpZ2h0PWZ1bmN0aW9uKHQsbil7cmV0dXJuIEFzKFQsdCxuKX0sZnVuY3Rpb24oKXtyZXR1cm4gbj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKSxULmludmVydD1uLmludmVydCYmTixTKCl9fWZ1bmN0aW9uIHpzKHQpe3ZhciBuPTAsZT1xYS8zLHI9UHModCksaT1yKG4sZSk7cmV0dXJuIGkucGFyYWxsZWxzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3Iobj10WzBdKklhLGU9dFsxXSpJYSk6W24qRmEsZSpGYV19LGl9ZnVuY3Rpb24gUnModCxuKXt2YXIgZT1RYSh0KSxyPShlK1FhKG4pKS8yO2lmKEhhKHIpPERhKXJldHVybiBmdW5jdGlvbih0KXt2YXIgbj1HYSh0KTtmdW5jdGlvbiBlKHQsZSl7cmV0dXJuW3QqbixRYShlKS9uXX1yZXR1cm4gZS5pbnZlcnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm5bdC9uLGV1KGUqbildfSxlfSh0KTt2YXIgaT0xK2UqKDIqci1lKSxvPUthKGkpL3I7ZnVuY3Rpb24gYSh0LG4pe3ZhciBlPUthKGktMipyKlFhKG4pKS9yO3JldHVybltlKlFhKHQqPXIpLG8tZSpHYSh0KV19cmV0dXJuIGEuaW52ZXJ0PWZ1bmN0aW9uKHQsbil7dmFyIGU9by1uO3JldHVybltYYSh0LEhhKGUpKS9yKkphKGUpLGV1KChpLSh0KnQrZSplKSpyKnIpLygyKnIpKV19LGF9ZnVuY3Rpb24gTHMoKXtyZXR1cm4genMoUnMpLnNjYWxlKDE1NS40MjQpLmNlbnRlcihbMCwzMy42NDQyXSl9ZnVuY3Rpb24gRHMoKXtyZXR1cm4gTHMoKS5wYXJhbGxlbHMoWzI5LjUsNDUuNV0pLnNjYWxlKDEwNzApLnRyYW5zbGF0ZShbNDgwLDI1MF0pLnJvdGF0ZShbOTYsMF0pLmNlbnRlcihbLS42LDM4LjddKX1mdW5jdGlvbiBVcyh0KXtyZXR1cm4gZnVuY3Rpb24obixlKXt2YXIgcj1HYShuKSxpPUdhKGUpLG89dChyKmkpO3JldHVybltvKmkqUWEobiksbypRYShlKV19fWZ1bmN0aW9uIHFzKHQpe3JldHVybiBmdW5jdGlvbihuLGUpe3ZhciByPUthKG4qbitlKmUpLGk9dChyKSxvPVFhKGkpLGE9R2EoaSk7cmV0dXJuW1hhKG4qbyxyKmEpLGV1KHImJmUqby9yKV19fXZhciBPcz1VcyhmdW5jdGlvbih0KXtyZXR1cm4gS2EoMi8oMSt0KSl9KTtPcy5pbnZlcnQ9cXMoZnVuY3Rpb24odCl7cmV0dXJuIDIqZXUodC8yKX0pO3ZhciBZcz1VcyhmdW5jdGlvbih0KXtyZXR1cm4odD1udSh0KSkmJnQvUWEodCl9KTtmdW5jdGlvbiBCcyh0LG4pe3JldHVyblt0LFdhKHR1KChPYStuKS8yKSldfWZ1bmN0aW9uIEZzKHQpe3ZhciBuLGUscixpPUNzKHQpLG89aS5jZW50ZXIsYT1pLnNjYWxlLHU9aS50cmFuc2xhdGUsZj1pLmNsaXBFeHRlbnQsYz1udWxsO2Z1bmN0aW9uIHMoKXt2YXIgbz1xYSphKCksdT1pKFJmKGkucm90YXRlKCkpLmludmVydChbMCwwXSkpO3JldHVybiBmKG51bGw9PWM/W1t1WzBdLW8sdVsxXS1vXSxbdVswXStvLHVbMV0rb11dOnQ9PT1Ccz9bW01hdGgubWF4KHVbMF0tbyxjKSxuXSxbTWF0aC5taW4odVswXStvLGUpLHJdXTpbW2MsTWF0aC5tYXgodVsxXS1vLG4pXSxbZSxNYXRoLm1pbih1WzFdK28scildXSl9cmV0dXJuIGkuc2NhbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGEodCkscygpKTphKCl9LGkudHJhbnNsYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1KHQpLHMoKSk6dSgpfSxpLmNlbnRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obyh0KSxzKCkpOm8oKX0saS5jbGlwRXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhudWxsPT10P2M9bj1lPXI9bnVsbDooYz0rdFswXVswXSxuPSt0WzBdWzFdLGU9K3RbMV1bMF0scj0rdFsxXVsxXSkscygpKTpudWxsPT1jP251bGw6W1tjLG5dLFtlLHJdXX0scygpfWZ1bmN0aW9uIElzKHQpe3JldHVybiB0dSgoT2ErdCkvMil9ZnVuY3Rpb24gSHModCxuKXt2YXIgZT1HYSh0KSxyPXQ9PT1uP1FhKHQpOldhKGUvR2EobikpL1dhKElzKG4pL0lzKHQpKSxpPWUqWmEoSXModCkscikvcjtpZighcilyZXR1cm4gQnM7ZnVuY3Rpb24gbyh0LG4pe2k+MD9uPC1PYStEYSYmKG49LU9hK0RhKTpuPk9hLURhJiYobj1PYS1EYSk7dmFyIGU9aS9aYShJcyhuKSxyKTtyZXR1cm5bZSpRYShyKnQpLGktZSpHYShyKnQpXX1yZXR1cm4gby5pbnZlcnQ9ZnVuY3Rpb24odCxuKXt2YXIgZT1pLW4sbz1KYShyKSpLYSh0KnQrZSplKTtyZXR1cm5bWGEodCxIYShlKSkvcipKYShlKSwyKmphKFphKGkvbywxL3IpKS1PYV19LG99ZnVuY3Rpb24ganModCxuKXtyZXR1cm5bdCxuXX1mdW5jdGlvbiBYcyh0LG4pe3ZhciBlPUdhKHQpLHI9dD09PW4/UWEodCk6KGUtR2EobikpLyhuLXQpLGk9ZS9yK3Q7aWYoSGEocik8RGEpcmV0dXJuIGpzO2Z1bmN0aW9uIG8odCxuKXt2YXIgZT1pLW4sbz1yKnQ7cmV0dXJuW2UqUWEobyksaS1lKkdhKG8pXX1yZXR1cm4gby5pbnZlcnQ9ZnVuY3Rpb24odCxuKXt2YXIgZT1pLW47cmV0dXJuW1hhKHQsSGEoZSkpL3IqSmEoZSksaS1KYShyKSpLYSh0KnQrZSplKV19LG99WXMuaW52ZXJ0PXFzKGZ1bmN0aW9uKHQpe3JldHVybiB0fSksQnMuaW52ZXJ0PWZ1bmN0aW9uKHQsbil7cmV0dXJuW3QsMipqYSgkYShuKSktT2FdfSxqcy5pbnZlcnQ9anM7dmFyIEdzPTEuMzQwMjY0LFZzPS0uMDgxMTA2LCRzPTg5M2UtNixXcz0uMDAzNzk2LFpzPUthKDMpLzI7ZnVuY3Rpb24gUXModCxuKXt2YXIgZT1ldShacypRYShuKSkscj1lKmUsaT1yKnIqcjtyZXR1cm5bdCpHYShlKS8oWnMqKEdzKzMqVnMqcitpKig3KiRzKzkqV3MqcikpKSxlKihHcytWcypyK2kqKCRzK1dzKnIpKV19ZnVuY3Rpb24gSnModCxuKXt2YXIgZT1HYShuKSxyPUdhKHQpKmU7cmV0dXJuW2UqUWEodCkvcixRYShuKS9yXX1mdW5jdGlvbiBLcyh0LG4sZSxyKXtyZXR1cm4gMT09PXQmJjE9PT1uJiYwPT09ZSYmMD09PXI/bWM6X3Moe3BvaW50OmZ1bmN0aW9uKGksbyl7dGhpcy5zdHJlYW0ucG9pbnQoaSp0K2UsbypuK3IpfX0pfWZ1bmN0aW9uIHRsKHQsbil7dmFyIGU9bipuLHI9ZSplO3JldHVyblt0KiguODcwNy0uMTMxOTc5KmUrcioociooLjAwMzk3MSplLS4wMDE1MjkqciktLjAxMzc5MSkpLG4qKDEuMDA3MjI2K2UqKC4wMTUwODUrciooLjAyODg3NCplLS4wNDQ0NzUtLjAwNTkxNipyKSkpXX1mdW5jdGlvbiBubCh0LG4pe3JldHVybltHYShuKSpRYSh0KSxRYShuKV19ZnVuY3Rpb24gZWwodCxuKXt2YXIgZT1HYShuKSxyPTErR2EodCkqZTtyZXR1cm5bZSpRYSh0KS9yLFFhKG4pL3JdfWZ1bmN0aW9uIHJsKHQsbil7cmV0dXJuW1dhKHR1KChPYStuKS8yKSksLXRdfWZ1bmN0aW9uIGlsKHQsbil7cmV0dXJuIHQucGFyZW50PT09bi5wYXJlbnQ/MToyfWZ1bmN0aW9uIG9sKHQsbil7cmV0dXJuIHQrbi54fWZ1bmN0aW9uIGFsKHQsbil7cmV0dXJuIE1hdGgubWF4KHQsbi55KX1mdW5jdGlvbiB1bCh0KXt2YXIgbj0wLGU9dC5jaGlsZHJlbixyPWUmJmUubGVuZ3RoO2lmKHIpZm9yKDstLXI+PTA7KW4rPWVbcl0udmFsdWU7ZWxzZSBuPTE7dC52YWx1ZT1ufWZ1bmN0aW9uIGZsKHQsbil7dmFyIGUscixpLG8sYSx1PW5ldyBobCh0KSxmPSt0LnZhbHVlJiYodS52YWx1ZT10LnZhbHVlKSxjPVt1XTtmb3IobnVsbD09biYmKG49Y2wpO2U9Yy5wb3AoKTspaWYoZiYmKGUudmFsdWU9K2UuZGF0YS52YWx1ZSksKGk9bihlLmRhdGEpKSYmKGE9aS5sZW5ndGgpKWZvcihlLmNoaWxkcmVuPW5ldyBBcnJheShhKSxvPWEtMTtvPj0wOy0tbyljLnB1c2gocj1lLmNoaWxkcmVuW29dPW5ldyBobChpW29dKSksci5wYXJlbnQ9ZSxyLmRlcHRoPWUuZGVwdGgrMTtyZXR1cm4gdS5lYWNoQmVmb3JlKGxsKX1mdW5jdGlvbiBjbCh0KXtyZXR1cm4gdC5jaGlsZHJlbn1mdW5jdGlvbiBzbCh0KXt0LmRhdGE9dC5kYXRhLmRhdGF9ZnVuY3Rpb24gbGwodCl7dmFyIG49MDtkb3t0LmhlaWdodD1ufXdoaWxlKCh0PXQucGFyZW50KSYmdC5oZWlnaHQ8KytuKX1mdW5jdGlvbiBobCh0KXt0aGlzLmRhdGE9dCx0aGlzLmRlcHRoPXRoaXMuaGVpZ2h0PTAsdGhpcy5wYXJlbnQ9bnVsbH1Rcy5pbnZlcnQ9ZnVuY3Rpb24odCxuKXtmb3IodmFyIGUscj1uLGk9cipyLG89aSppKmksYT0wO2E8MTImJihvPShpPShyLT1lPShyKihHcytWcyppK28qKCRzK1dzKmkpKS1uKS8oR3MrMypWcyppK28qKDcqJHMrOSpXcyppKSkpKnIpKmkqaSwhKEhhKGUpPFVhKSk7KythKTtyZXR1cm5bWnMqdCooR3MrMypWcyppK28qKDcqJHMrOSpXcyppKSkvR2EociksZXUoUWEocikvWnMpXX0sSnMuaW52ZXJ0PXFzKGphKSx0bC5pbnZlcnQ9ZnVuY3Rpb24odCxuKXt2YXIgZSxyPW4saT0yNTtkb3t2YXIgbz1yKnIsYT1vKm87ci09ZT0ociooMS4wMDcyMjYrbyooLjAxNTA4NSthKiguMDI4ODc0Km8tLjA0NDQ3NS0uMDA1OTE2KmEpKSktbikvKDEuMDA3MjI2K28qKC4wNDUyNTUrYSooLjI1OTg2NipvLS4zMTEzMjUtLjAwNTkxNioxMSphKSkpfXdoaWxlKEhhKGUpPkRhJiYtLWk+MCk7cmV0dXJuW3QvKC44NzA3KyhvPXIqcikqKG8qKG8qbypvKiguMDAzOTcxLS4wMDE1MjkqbyktLjAxMzc5MSktLjEzMTk3OSkpLHJdfSxubC5pbnZlcnQ9cXMoZXUpLGVsLmludmVydD1xcyhmdW5jdGlvbih0KXtyZXR1cm4gMipqYSh0KX0pLHJsLmludmVydD1mdW5jdGlvbih0LG4pe3JldHVyblstbiwyKmphKCRhKHQpKS1PYV19LGhsLnByb3RvdHlwZT1mbC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmhsLGNvdW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWFjaEFmdGVyKHVsKX0sZWFjaDpmdW5jdGlvbih0KXt2YXIgbixlLHIsaSxvPXRoaXMsYT1bb107ZG97Zm9yKG49YS5yZXZlcnNlKCksYT1bXTtvPW4ucG9wKCk7KWlmKHQobyksZT1vLmNoaWxkcmVuKWZvcihyPTAsaT1lLmxlbmd0aDtyPGk7KytyKWEucHVzaChlW3JdKX13aGlsZShhLmxlbmd0aCk7cmV0dXJuIHRoaXN9LGVhY2hBZnRlcjpmdW5jdGlvbih0KXtmb3IodmFyIG4sZSxyLGk9dGhpcyxvPVtpXSxhPVtdO2k9by5wb3AoKTspaWYoYS5wdXNoKGkpLG49aS5jaGlsZHJlbilmb3IoZT0wLHI9bi5sZW5ndGg7ZTxyOysrZSlvLnB1c2gobltlXSk7Zm9yKDtpPWEucG9wKCk7KXQoaSk7cmV0dXJuIHRoaXN9LGVhY2hCZWZvcmU6ZnVuY3Rpb24odCl7Zm9yKHZhciBuLGUscj10aGlzLGk9W3JdO3I9aS5wb3AoKTspaWYodChyKSxuPXIuY2hpbGRyZW4pZm9yKGU9bi5sZW5ndGgtMTtlPj0wOy0tZSlpLnB1c2gobltlXSk7cmV0dXJuIHRoaXN9LHN1bTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5lYWNoQWZ0ZXIoZnVuY3Rpb24obil7Zm9yKHZhciBlPSt0KG4uZGF0YSl8fDAscj1uLmNoaWxkcmVuLGk9ciYmci5sZW5ndGg7LS1pPj0wOyllKz1yW2ldLnZhbHVlO24udmFsdWU9ZX0pfSxzb3J0OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmVhY2hCZWZvcmUoZnVuY3Rpb24obil7bi5jaGlsZHJlbiYmbi5jaGlsZHJlbi5zb3J0KHQpfSl9LHBhdGg6ZnVuY3Rpb24odCl7Zm9yKHZhciBuPXRoaXMsZT1mdW5jdGlvbih0LG4pe2lmKHQ9PT1uKXJldHVybiB0O3ZhciBlPXQuYW5jZXN0b3JzKCkscj1uLmFuY2VzdG9ycygpLGk9bnVsbDtmb3IodD1lLnBvcCgpLG49ci5wb3AoKTt0PT09bjspaT10LHQ9ZS5wb3AoKSxuPXIucG9wKCk7cmV0dXJuIGl9KG4sdCkscj1bbl07biE9PWU7KW49bi5wYXJlbnQsci5wdXNoKG4pO2Zvcih2YXIgaT1yLmxlbmd0aDt0IT09ZTspci5zcGxpY2UoaSwwLHQpLHQ9dC5wYXJlbnQ7cmV0dXJuIHJ9LGFuY2VzdG9yczpmdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLG49W3RdO3Q9dC5wYXJlbnQ7KW4ucHVzaCh0KTtyZXR1cm4gbn0sZGVzY2VuZGFudHM6ZnVuY3Rpb24oKXt2YXIgdD1bXTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKG4pe3QucHVzaChuKX0pLHR9LGxlYXZlczpmdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiB0aGlzLmVhY2hCZWZvcmUoZnVuY3Rpb24obil7bi5jaGlsZHJlbnx8dC5wdXNoKG4pfSksdH0sbGlua3M6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLG49W107cmV0dXJuIHQuZWFjaChmdW5jdGlvbihlKXtlIT09dCYmbi5wdXNoKHtzb3VyY2U6ZS5wYXJlbnQsdGFyZ2V0OmV9KX0pLG59LGNvcHk6ZnVuY3Rpb24oKXtyZXR1cm4gZmwodGhpcykuZWFjaEJlZm9yZShzbCl9fTt2YXIgZGw9QXJyYXkucHJvdG90eXBlLnNsaWNlO2Z1bmN0aW9uIHBsKHQpe2Zvcih2YXIgbixlLHI9MCxpPSh0PWZ1bmN0aW9uKHQpe2Zvcih2YXIgbixlLHI9dC5sZW5ndGg7cjspZT1NYXRoLnJhbmRvbSgpKnItLXwwLG49dFtyXSx0W3JdPXRbZV0sdFtlXT1uO3JldHVybiB0fShkbC5jYWxsKHQpKSkubGVuZ3RoLG89W107cjxpOyluPXRbcl0sZSYmeWwoZSxuKT8rK3I6KGU9Ymwobz12bChvLG4pKSxyPTApO3JldHVybiBlfWZ1bmN0aW9uIHZsKHQsbil7dmFyIGUscjtpZihfbChuLHQpKXJldHVybltuXTtmb3IoZT0wO2U8dC5sZW5ndGg7KytlKWlmKGdsKG4sdFtlXSkmJl9sKG1sKHRbZV0sbiksdCkpcmV0dXJuW3RbZV0sbl07Zm9yKGU9MDtlPHQubGVuZ3RoLTE7KytlKWZvcihyPWUrMTtyPHQubGVuZ3RoOysrcilpZihnbChtbCh0W2VdLHRbcl0pLG4pJiZnbChtbCh0W2VdLG4pLHRbcl0pJiZnbChtbCh0W3JdLG4pLHRbZV0pJiZfbCh4bCh0W2VdLHRbcl0sbiksdCkpcmV0dXJuW3RbZV0sdFtyXSxuXTt0aHJvdyBuZXcgRXJyb3J9ZnVuY3Rpb24gZ2wodCxuKXt2YXIgZT10LnItbi5yLHI9bi54LXQueCxpPW4ueS10Lnk7cmV0dXJuIGU8MHx8ZSplPHIqcitpKml9ZnVuY3Rpb24geWwodCxuKXt2YXIgZT10LnItbi5yKzFlLTYscj1uLngtdC54LGk9bi55LXQueTtyZXR1cm4gZT4wJiZlKmU+cipyK2kqaX1mdW5jdGlvbiBfbCh0LG4pe2Zvcih2YXIgZT0wO2U8bi5sZW5ndGg7KytlKWlmKCF5bCh0LG5bZV0pKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIGJsKHQpe3N3aXRjaCh0Lmxlbmd0aCl7Y2FzZSAxOnJldHVybnt4OihuPXRbMF0pLngseTpuLnkscjpuLnJ9O2Nhc2UgMjpyZXR1cm4gbWwodFswXSx0WzFdKTtjYXNlIDM6cmV0dXJuIHhsKHRbMF0sdFsxXSx0WzJdKX12YXIgbn1mdW5jdGlvbiBtbCh0LG4pe3ZhciBlPXQueCxyPXQueSxpPXQucixvPW4ueCxhPW4ueSx1PW4ucixmPW8tZSxjPWEtcixzPXUtaSxsPU1hdGguc3FydChmKmYrYypjKTtyZXR1cm57eDooZStvK2YvbCpzKS8yLHk6KHIrYStjL2wqcykvMixyOihsK2krdSkvMn19ZnVuY3Rpb24geGwodCxuLGUpe3ZhciByPXQueCxpPXQueSxvPXQucixhPW4ueCx1PW4ueSxmPW4ucixjPWUueCxzPWUueSxsPWUucixoPXItYSxkPXItYyxwPWktdSx2PWktcyxnPWYtbyx5PWwtbyxfPXIqcitpKmktbypvLGI9Xy1hKmEtdSp1K2YqZixtPV8tYypjLXMqcytsKmwseD1kKnAtaCp2LHc9KHAqbS12KmIpLygyKngpLXIsTT0odipnLXAqeSkveCxBPShkKmItaCptKS8oMip4KS1pLFQ9KGgqeS1kKmcpL3gsTj1NKk0rVCpULTEsUz0yKihvK3cqTStBKlQpLEU9dyp3K0EqQS1vKm8saz0tKE4/KFMrTWF0aC5zcXJ0KFMqUy00Kk4qRSkpLygyKk4pOkUvUyk7cmV0dXJue3g6cit3K00qayx5OmkrQStUKmsscjprfX1mdW5jdGlvbiB3bCh0LG4sZSl7dmFyIHIsaSxvLGEsdT10Lngtbi54LGY9dC55LW4ueSxjPXUqdStmKmY7Yz8oaT1uLnIrZS5yLGkqPWksYT10LnIrZS5yLGk+KGEqPWEpPyhyPShjK2EtaSkvKDIqYyksbz1NYXRoLnNxcnQoTWF0aC5tYXgoMCxhL2MtcipyKSksZS54PXQueC1yKnUtbypmLGUueT10LnktcipmK28qdSk6KHI9KGMraS1hKS8oMipjKSxvPU1hdGguc3FydChNYXRoLm1heCgwLGkvYy1yKnIpKSxlLng9bi54K3IqdS1vKmYsZS55PW4ueStyKmYrbyp1KSk6KGUueD1uLngrZS5yLGUueT1uLnkpfWZ1bmN0aW9uIE1sKHQsbil7dmFyIGU9dC5yK24uci0xZS02LHI9bi54LXQueCxpPW4ueS10Lnk7cmV0dXJuIGU+MCYmZSplPnIqcitpKml9ZnVuY3Rpb24gQWwodCl7dmFyIG49dC5fLGU9dC5uZXh0Ll8scj1uLnIrZS5yLGk9KG4ueCplLnIrZS54Km4ucikvcixvPShuLnkqZS5yK2UueSpuLnIpL3I7cmV0dXJuIGkqaStvKm99ZnVuY3Rpb24gVGwodCl7dGhpcy5fPXQsdGhpcy5uZXh0PW51bGwsdGhpcy5wcmV2aW91cz1udWxsfWZ1bmN0aW9uIE5sKHQpe2lmKCEoaT10Lmxlbmd0aCkpcmV0dXJuIDA7dmFyIG4sZSxyLGksbyxhLHUsZixjLHMsbDtpZigobj10WzBdKS54PTAsbi55PTAsIShpPjEpKXJldHVybiBuLnI7aWYoZT10WzFdLG4ueD0tZS5yLGUueD1uLnIsZS55PTAsIShpPjIpKXJldHVybiBuLnIrZS5yO3dsKGUsbixyPXRbMl0pLG49bmV3IFRsKG4pLGU9bmV3IFRsKGUpLHI9bmV3IFRsKHIpLG4ubmV4dD1yLnByZXZpb3VzPWUsZS5uZXh0PW4ucHJldmlvdXM9cixyLm5leHQ9ZS5wcmV2aW91cz1uO3Q6Zm9yKHU9Mzt1PGk7Kyt1KXt3bChuLl8sZS5fLHI9dFt1XSkscj1uZXcgVGwociksZj1lLm5leHQsYz1uLnByZXZpb3VzLHM9ZS5fLnIsbD1uLl8ucjtkb3tpZihzPD1sKXtpZihNbChmLl8sci5fKSl7ZT1mLG4ubmV4dD1lLGUucHJldmlvdXM9biwtLXU7Y29udGludWUgdH1zKz1mLl8ucixmPWYubmV4dH1lbHNle2lmKE1sKGMuXyxyLl8pKXsobj1jKS5uZXh0PWUsZS5wcmV2aW91cz1uLC0tdTtjb250aW51ZSB0fWwrPWMuXy5yLGM9Yy5wcmV2aW91c319d2hpbGUoZiE9PWMubmV4dCk7Zm9yKHIucHJldmlvdXM9bixyLm5leHQ9ZSxuLm5leHQ9ZS5wcmV2aW91cz1lPXIsbz1BbChuKTsocj1yLm5leHQpIT09ZTspKGE9QWwocikpPG8mJihuPXIsbz1hKTtlPW4ubmV4dH1mb3Iobj1bZS5fXSxyPWU7KHI9ci5uZXh0KSE9PWU7KW4ucHVzaChyLl8pO2ZvcihyPXBsKG4pLHU9MDt1PGk7Kyt1KShuPXRbdV0pLngtPXIueCxuLnktPXIueTtyZXR1cm4gci5yfWZ1bmN0aW9uIFNsKHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdH1mdW5jdGlvbiBFbCgpe3JldHVybiAwfWZ1bmN0aW9uIGtsKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX1mdW5jdGlvbiBDbCh0KXtyZXR1cm4gTWF0aC5zcXJ0KHQudmFsdWUpfWZ1bmN0aW9uIFBsKHQpe3JldHVybiBmdW5jdGlvbihuKXtuLmNoaWxkcmVufHwobi5yPU1hdGgubWF4KDAsK3Qobil8fDApKX19ZnVuY3Rpb24gemwodCxuKXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYocj1lLmNoaWxkcmVuKXt2YXIgcixpLG8sYT1yLmxlbmd0aCx1PXQoZSkqbnx8MDtpZih1KWZvcihpPTA7aTxhOysraSlyW2ldLnIrPXU7aWYobz1ObChyKSx1KWZvcihpPTA7aTxhOysraSlyW2ldLnItPXU7ZS5yPW8rdX19fWZ1bmN0aW9uIFJsKHQpe3JldHVybiBmdW5jdGlvbihuKXt2YXIgZT1uLnBhcmVudDtuLnIqPXQsZSYmKG4ueD1lLngrdCpuLngsbi55PWUueSt0Km4ueSl9fWZ1bmN0aW9uIExsKHQpe3QueDA9TWF0aC5yb3VuZCh0LngwKSx0LnkwPU1hdGgucm91bmQodC55MCksdC54MT1NYXRoLnJvdW5kKHQueDEpLHQueTE9TWF0aC5yb3VuZCh0LnkxKX1mdW5jdGlvbiBEbCh0LG4sZSxyLGkpe2Zvcih2YXIgbyxhPXQuY2hpbGRyZW4sdT0tMSxmPWEubGVuZ3RoLGM9dC52YWx1ZSYmKHItbikvdC52YWx1ZTsrK3U8ZjspKG89YVt1XSkueTA9ZSxvLnkxPWksby54MD1uLG8ueDE9bis9by52YWx1ZSpjfXZhciBVbD0iJCIscWw9e2RlcHRoOi0xfSxPbD17fTtmdW5jdGlvbiBZbCh0KXtyZXR1cm4gdC5pZH1mdW5jdGlvbiBCbCh0KXtyZXR1cm4gdC5wYXJlbnRJZH1mdW5jdGlvbiBGbCh0LG4pe3JldHVybiB0LnBhcmVudD09PW4ucGFyZW50PzE6Mn1mdW5jdGlvbiBJbCh0KXt2YXIgbj10LmNoaWxkcmVuO3JldHVybiBuP25bMF06dC50fWZ1bmN0aW9uIEhsKHQpe3ZhciBuPXQuY2hpbGRyZW47cmV0dXJuIG4/bltuLmxlbmd0aC0xXTp0LnR9ZnVuY3Rpb24gamwodCxuLGUpe3ZhciByPWUvKG4uaS10LmkpO24uYy09cixuLnMrPWUsdC5jKz1yLG4ueis9ZSxuLm0rPWV9ZnVuY3Rpb24gWGwodCxuLGUpe3JldHVybiB0LmEucGFyZW50PT09bi5wYXJlbnQ/dC5hOmV9ZnVuY3Rpb24gR2wodCxuKXt0aGlzLl89dCx0aGlzLnBhcmVudD1udWxsLHRoaXMuY2hpbGRyZW49bnVsbCx0aGlzLkE9bnVsbCx0aGlzLmE9dGhpcyx0aGlzLno9MCx0aGlzLm09MCx0aGlzLmM9MCx0aGlzLnM9MCx0aGlzLnQ9bnVsbCx0aGlzLmk9bn1mdW5jdGlvbiBWbCh0LG4sZSxyLGkpe2Zvcih2YXIgbyxhPXQuY2hpbGRyZW4sdT0tMSxmPWEubGVuZ3RoLGM9dC52YWx1ZSYmKGktZSkvdC52YWx1ZTsrK3U8ZjspKG89YVt1XSkueDA9bixvLngxPXIsby55MD1lLG8ueTE9ZSs9by52YWx1ZSpjfUdsLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGhsLnByb3RvdHlwZSk7dmFyICRsPSgxK01hdGguc3FydCg1KSkvMjtmdW5jdGlvbiBXbCh0LG4sZSxyLGksbyl7Zm9yKHZhciBhLHUsZixjLHMsbCxoLGQscCx2LGcseT1bXSxfPW4uY2hpbGRyZW4sYj0wLG09MCx4PV8ubGVuZ3RoLHc9bi52YWx1ZTtiPHg7KXtmPWktZSxjPW8tcjtkb3tzPV9bbSsrXS52YWx1ZX13aGlsZSghcyYmbTx4KTtmb3IobD1oPXMsZz1zKnMqKHY9TWF0aC5tYXgoYy9mLGYvYykvKHcqdCkpLHA9TWF0aC5tYXgoaC9nLGcvbCk7bTx4OysrbSl7aWYocys9dT1fW21dLnZhbHVlLHU8bCYmKGw9dSksdT5oJiYoaD11KSxnPXMqcyp2LChkPU1hdGgubWF4KGgvZyxnL2wpKT5wKXtzLT11O2JyZWFrfXA9ZH15LnB1c2goYT17dmFsdWU6cyxkaWNlOmY8YyxjaGlsZHJlbjpfLnNsaWNlKGIsbSl9KSxhLmRpY2U/RGwoYSxlLHIsaSx3P3IrPWMqcy93Om8pOlZsKGEsZSxyLHc/ZSs9ZipzL3c6aSxvKSx3LT1zLGI9bX1yZXR1cm4geX12YXIgWmw9ZnVuY3Rpb24gdChuKXtmdW5jdGlvbiBlKHQsZSxyLGksbyl7V2wobix0LGUscixpLG8pfXJldHVybiBlLnJhdGlvPWZ1bmN0aW9uKG4pe3JldHVybiB0KChuPStuKT4xP246MSl9LGV9KCRsKTt2YXIgUWw9ZnVuY3Rpb24gdChuKXtmdW5jdGlvbiBlKHQsZSxyLGksbyl7aWYoKGE9dC5fc3F1YXJpZnkpJiZhLnJhdGlvPT09bilmb3IodmFyIGEsdSxmLGMscyxsPS0xLGg9YS5sZW5ndGgsZD10LnZhbHVlOysrbDxoOyl7Zm9yKGY9KHU9YVtsXSkuY2hpbGRyZW4sYz11LnZhbHVlPTAscz1mLmxlbmd0aDtjPHM7KytjKXUudmFsdWUrPWZbY10udmFsdWU7dS5kaWNlP0RsKHUsZSxyLGkscis9KG8tcikqdS52YWx1ZS9kKTpWbCh1LGUscixlKz0oaS1lKSp1LnZhbHVlL2QsbyksZC09dS52YWx1ZX1lbHNlIHQuX3NxdWFyaWZ5PWE9V2wobix0LGUscixpLG8pLGEucmF0aW89bn1yZXR1cm4gZS5yYXRpbz1mdW5jdGlvbihuKXtyZXR1cm4gdCgobj0rbik+MT9uOjEpfSxlfSgkbCk7ZnVuY3Rpb24gSmwodCxuKXtyZXR1cm4gdFswXS1uWzBdfHx0WzFdLW5bMV19ZnVuY3Rpb24gS2wodCl7Zm9yKHZhciBuLGUscixpPXQubGVuZ3RoLG89WzAsMV0sYT0yLHU9Mjt1PGk7Kyt1KXtmb3IoO2E+MSYmKG49dFtvW2EtMl1dLGU9dFtvW2EtMV1dLHI9dFt1XSwoZVswXS1uWzBdKSooclsxXS1uWzFdKS0oZVsxXS1uWzFdKSooclswXS1uWzBdKTw9MCk7KS0tYTtvW2ErK109dX1yZXR1cm4gby5zbGljZSgwLGEpfWZ1bmN0aW9uIHRoKCl7cmV0dXJuIE1hdGgucmFuZG9tKCl9dmFyIG5oPWZ1bmN0aW9uIHQobil7ZnVuY3Rpb24gZSh0LGUpe3JldHVybiB0PW51bGw9PXQ/MDordCxlPW51bGw9PWU/MTorZSwxPT09YXJndW1lbnRzLmxlbmd0aD8oZT10LHQ9MCk6ZS09dCxmdW5jdGlvbigpe3JldHVybiBuKCkqZSt0fX1yZXR1cm4gZS5zb3VyY2U9dCxlfSh0aCksZWg9ZnVuY3Rpb24gdChuKXtmdW5jdGlvbiBlKHQsZSl7dmFyIHIsaTtyZXR1cm4gdD1udWxsPT10PzA6K3QsZT1udWxsPT1lPzE6K2UsZnVuY3Rpb24oKXt2YXIgbztpZihudWxsIT1yKW89cixyPW51bGw7ZWxzZSBkb3tyPTIqbigpLTEsbz0yKm4oKS0xLGk9cipyK28qb313aGlsZSghaXx8aT4xKTtyZXR1cm4gdCtlKm8qTWF0aC5zcXJ0KC0yKk1hdGgubG9nKGkpL2kpfX1yZXR1cm4gZS5zb3VyY2U9dCxlfSh0aCkscmg9ZnVuY3Rpb24gdChuKXtmdW5jdGlvbiBlKCl7dmFyIHQ9ZWguc291cmNlKG4pLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5leHAodCgpKX19cmV0dXJuIGUuc291cmNlPXQsZX0odGgpLGloPWZ1bmN0aW9uIHQobil7ZnVuY3Rpb24gZSh0KXtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIGU9MCxyPTA7cjx0OysrcillKz1uKCk7cmV0dXJuIGV9fXJldHVybiBlLnNvdXJjZT10LGV9KHRoKSxvaD1mdW5jdGlvbiB0KG4pe2Z1bmN0aW9uIGUodCl7dmFyIGU9aWguc291cmNlKG4pKHQpO3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlKCkvdH19cmV0dXJuIGUuc291cmNlPXQsZX0odGgpLGFoPWZ1bmN0aW9uIHQobil7ZnVuY3Rpb24gZSh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4tTWF0aC5sb2coMS1uKCkpL3R9fXJldHVybiBlLnNvdXJjZT10LGV9KHRoKSx1aD1BcnJheS5wcm90b3R5cGUsZmg9dWgubWFwLGNoPXVoLnNsaWNlLHNoPXtuYW1lOiJpbXBsaWNpdCJ9O2Z1bmN0aW9uIGxoKHQpe3ZhciBuPUtpKCksZT1bXSxyPXNoO2Z1bmN0aW9uIGkoaSl7dmFyIG89aSsiIixhPW4uZ2V0KG8pO2lmKCFhKXtpZihyIT09c2gpcmV0dXJuIHI7bi5zZXQobyxhPWUucHVzaChpKSl9cmV0dXJuIHRbKGEtMSkldC5sZW5ndGhdfXJldHVybiB0PW51bGw9PXQ/W106Y2guY2FsbCh0KSxpLmRvbWFpbj1mdW5jdGlvbih0KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gZS5zbGljZSgpO2U9W10sbj1LaSgpO2Zvcih2YXIgcixvLGE9LTEsdT10Lmxlbmd0aDsrK2E8dTspbi5oYXMobz0ocj10W2FdKSsiIil8fG4uc2V0KG8sZS5wdXNoKHIpKTtyZXR1cm4gaX0saS5yYW5nZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1jaC5jYWxsKG4pLGkpOnQuc2xpY2UoKX0saS51bmtub3duPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsaSk6cn0saS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGxoKCkuZG9tYWluKGUpLnJhbmdlKHQpLnVua25vd24ocil9LGl9ZnVuY3Rpb24gaGgoKXt2YXIgdCxuLGU9bGgoKS51bmtub3duKHZvaWQgMCkscj1lLmRvbWFpbixpPWUucmFuZ2Usbz1bMCwxXSxhPSExLHU9MCxmPTAsYz0uNTtmdW5jdGlvbiBzKCl7dmFyIGU9cigpLmxlbmd0aCxzPW9bMV08b1swXSxsPW9bcy0wXSxoPW9bMS1zXTt0PShoLWwpL01hdGgubWF4KDEsZS11KzIqZiksYSYmKHQ9TWF0aC5mbG9vcih0KSksbCs9KGgtbC10KihlLXUpKSpjLG49dCooMS11KSxhJiYobD1NYXRoLnJvdW5kKGwpLG49TWF0aC5yb3VuZChuKSk7dmFyIGQ9ZyhlKS5tYXAoZnVuY3Rpb24obil7cmV0dXJuIGwrdCpufSk7cmV0dXJuIGkocz9kLnJldmVyc2UoKTpkKX1yZXR1cm4gZGVsZXRlIGUudW5rbm93bixlLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocih0KSxzKCkpOnIoKX0sZS5yYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1bK3RbMF0sK3RbMV1dLHMoKSk6by5zbGljZSgpfSxlLnJhbmdlUm91bmQ9ZnVuY3Rpb24odCl7cmV0dXJuIG89Wyt0WzBdLCt0WzFdXSxhPSEwLHMoKX0sZS5iYW5kd2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4gbn0sZS5zdGVwPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LGUucm91bmQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9ISF0LHMoKSk6YX0sZS5wYWRkaW5nPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PWY9TWF0aC5tYXgoMCxNYXRoLm1pbigxLHQpKSxzKCkpOnV9LGUucGFkZGluZ0lubmVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PU1hdGgubWF4KDAsTWF0aC5taW4oMSx0KSkscygpKTp1fSxlLnBhZGRpbmdPdXRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj1NYXRoLm1heCgwLE1hdGgubWluKDEsdCkpLHMoKSk6Zn0sZS5hbGlnbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz1NYXRoLm1heCgwLE1hdGgubWluKDEsdCkpLHMoKSk6Y30sZS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGhoKCkuZG9tYWluKHIoKSkucmFuZ2Uobykucm91bmQoYSkucGFkZGluZ0lubmVyKHUpLnBhZGRpbmdPdXRlcihmKS5hbGlnbihjKX0scygpfWZ1bmN0aW9uIGRoKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX1mdW5jdGlvbiBwaCh0KXtyZXR1cm4rdH12YXIgdmg9WzAsMV07ZnVuY3Rpb24gZ2godCxuKXtyZXR1cm4obi09dD0rdCk/ZnVuY3Rpb24oZSl7cmV0dXJuKGUtdCkvbn06ZGgobil9ZnVuY3Rpb24geWgodCxuLGUscil7dmFyIGk9dFswXSxvPXRbMV0sYT1uWzBdLHU9blsxXTtyZXR1cm4gbzxpPyhpPWUobyxpKSxhPXIodSxhKSk6KGk9ZShpLG8pLGE9cihhLHUpKSxmdW5jdGlvbih0KXtyZXR1cm4gYShpKHQpKX19ZnVuY3Rpb24gX2godCxuLGUscil7dmFyIG89TWF0aC5taW4odC5sZW5ndGgsbi5sZW5ndGgpLTEsYT1uZXcgQXJyYXkobyksdT1uZXcgQXJyYXkobyksZj0tMTtmb3IodFtvXTx0WzBdJiYodD10LnNsaWNlKCkucmV2ZXJzZSgpLG49bi5zbGljZSgpLnJldmVyc2UoKSk7KytmPG87KWFbZl09ZSh0W2ZdLHRbZisxXSksdVtmXT1yKG5bZl0sbltmKzFdKTtyZXR1cm4gZnVuY3Rpb24obil7dmFyIGU9aSh0LG4sMSxvKS0xO3JldHVybiB1W2VdKGFbZV0obikpfX1mdW5jdGlvbiBiaCh0LG4pe3JldHVybiBuLmRvbWFpbih0LmRvbWFpbigpKS5yYW5nZSh0LnJhbmdlKCkpLmludGVycG9sYXRlKHQuaW50ZXJwb2xhdGUoKSkuY2xhbXAodC5jbGFtcCgpKX1mdW5jdGlvbiBtaCh0LG4pe3ZhciBlLHIsaSxvPXZoLGE9dmgsdT1tZSxmPSExO2Z1bmN0aW9uIGMoKXtyZXR1cm4gZT1NYXRoLm1pbihvLmxlbmd0aCxhLmxlbmd0aCk+Mj9faDp5aCxyPWk9bnVsbCxzfWZ1bmN0aW9uIHMobil7cmV0dXJuKHJ8fChyPWUobyxhLGY/ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKG4sZSl7dmFyIHI9dChuPStuLGU9K2UpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gdDw9bj8wOnQ+PWU/MTpyKHQpfX19KHQpOnQsdSkpKSgrbil9cmV0dXJuIHMuaW52ZXJ0PWZ1bmN0aW9uKHQpe3JldHVybihpfHwoaT1lKGEsbyxnaCxmP2Z1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihuLGUpe3ZhciByPXQobj0rbixlPStlKTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHQ8PTA/bjp0Pj0xP2U6cih0KX19fShuKTpuKSkpKCt0KX0scy5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ZmguY2FsbCh0LHBoKSxjKCkpOm8uc2xpY2UoKX0scy5yYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1jaC5jYWxsKHQpLGMoKSk6YS5zbGljZSgpfSxzLnJhbmdlUm91bmQ9ZnVuY3Rpb24odCl7cmV0dXJuIGE9Y2guY2FsbCh0KSx1PXhlLGMoKX0scy5jbGFtcD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj0hIXQsYygpKTpmfSxzLmludGVycG9sYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PXQsYygpKTp1fSxjKCl9ZnVuY3Rpb24geGgobil7dmFyIGU9bi5kb21haW47cmV0dXJuIG4udGlja3M9ZnVuY3Rpb24odCl7dmFyIG49ZSgpO3JldHVybiBtKG5bMF0sbltuLmxlbmd0aC0xXSxudWxsPT10PzEwOnQpfSxuLnRpY2tGb3JtYXQ9ZnVuY3Rpb24obixyKXtyZXR1cm4gZnVuY3Rpb24obixlLHIpe3ZhciBpLG89blswXSxhPW5bbi5sZW5ndGgtMV0sdT13KG8sYSxudWxsPT1lPzEwOmUpO3N3aXRjaCgocj1iYShudWxsPT1yPyIsZiI6cikpLnR5cGUpe2Nhc2UicyI6dmFyIGY9TWF0aC5tYXgoTWF0aC5hYnMobyksTWF0aC5hYnMoYSkpO3JldHVybiBudWxsIT1yLnByZWNpc2lvbnx8aXNOYU4oaT1rYSh1LGYpKXx8KHIucHJlY2lzaW9uPWkpLHQuZm9ybWF0UHJlZml4KHIsZik7Y2FzZSIiOmNhc2UiZSI6Y2FzZSJnIjpjYXNlInAiOmNhc2UiciI6bnVsbCE9ci5wcmVjaXNpb258fGlzTmFOKGk9Q2EodSxNYXRoLm1heChNYXRoLmFicyhvKSxNYXRoLmFicyhhKSkpKXx8KHIucHJlY2lzaW9uPWktKCJlIj09PXIudHlwZSkpO2JyZWFrO2Nhc2UiZiI6Y2FzZSIlIjpudWxsIT1yLnByZWNpc2lvbnx8aXNOYU4oaT1FYSh1KSl8fChyLnByZWNpc2lvbj1pLTIqKCIlIj09PXIudHlwZSkpfXJldHVybiB0LmZvcm1hdChyKX0oZSgpLG4scil9LG4ubmljZT1mdW5jdGlvbih0KXtudWxsPT10JiYodD0xMCk7dmFyIHIsaT1lKCksbz0wLGE9aS5sZW5ndGgtMSx1PWlbb10sZj1pW2FdO3JldHVybiBmPHUmJihyPXUsdT1mLGY9cixyPW8sbz1hLGE9ciksKHI9eCh1LGYsdCkpPjA/cj14KHU9TWF0aC5mbG9vcih1L3IpKnIsZj1NYXRoLmNlaWwoZi9yKSpyLHQpOnI8MCYmKHI9eCh1PU1hdGguY2VpbCh1KnIpL3IsZj1NYXRoLmZsb29yKGYqcikvcix0KSkscj4wPyhpW29dPU1hdGguZmxvb3IodS9yKSpyLGlbYV09TWF0aC5jZWlsKGYvcikqcixlKGkpKTpyPDAmJihpW29dPU1hdGguY2VpbCh1KnIpL3IsaVthXT1NYXRoLmZsb29yKGYqcikvcixlKGkpKSxufSxufWZ1bmN0aW9uIHdoKHQsbil7dmFyIGUscj0wLGk9KHQ9dC5zbGljZSgpKS5sZW5ndGgtMSxvPXRbcl0sYT10W2ldO3JldHVybiBhPG8mJihlPXIscj1pLGk9ZSxlPW8sbz1hLGE9ZSksdFtyXT1uLmZsb29yKG8pLHRbaV09bi5jZWlsKGEpLHR9ZnVuY3Rpb24gTWgodCxuKXtyZXR1cm4obj1NYXRoLmxvZyhuL3QpKT9mdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5sb2coZS90KS9ufTpkaChuKX1mdW5jdGlvbiBBaCh0LG4pe3JldHVybiB0PDA/ZnVuY3Rpb24oZSl7cmV0dXJuLU1hdGgucG93KC1uLGUpKk1hdGgucG93KC10LDEtZSl9OmZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLnBvdyhuLGUpKk1hdGgucG93KHQsMS1lKX19ZnVuY3Rpb24gVGgodCl7cmV0dXJuIGlzRmluaXRlKHQpPysoIjFlIit0KTp0PDA/MDp0fWZ1bmN0aW9uIE5oKHQpe3JldHVybiAxMD09PXQ/VGg6dD09PU1hdGguRT9NYXRoLmV4cDpmdW5jdGlvbihuKXtyZXR1cm4gTWF0aC5wb3codCxuKX19ZnVuY3Rpb24gU2godCl7cmV0dXJuIHQ9PT1NYXRoLkU/TWF0aC5sb2c6MTA9PT10JiZNYXRoLmxvZzEwfHwyPT09dCYmTWF0aC5sb2cyfHwodD1NYXRoLmxvZyh0KSxmdW5jdGlvbihuKXtyZXR1cm4gTWF0aC5sb2cobikvdH0pfWZ1bmN0aW9uIEVoKHQpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4tdCgtbil9fWZ1bmN0aW9uIGtoKHQsbil7cmV0dXJuIHQ8MD8tTWF0aC5wb3coLXQsbik6TWF0aC5wb3codCxuKX1mdW5jdGlvbiBDaCgpe3ZhciB0PTEsbj1taChmdW5jdGlvbihuLGUpe3JldHVybihlPWtoKGUsdCktKG49a2gobix0KSkpP2Z1bmN0aW9uKHIpe3JldHVybihraChyLHQpLW4pL2V9OmRoKGUpfSxmdW5jdGlvbihuLGUpe3JldHVybiBlPWtoKGUsdCktKG49a2gobix0KSksZnVuY3Rpb24ocil7cmV0dXJuIGtoKG4rZSpyLDEvdCl9fSksZT1uLmRvbWFpbjtyZXR1cm4gbi5leHBvbmVudD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0rbixlKGUoKSkpOnR9LG4uY29weT1mdW5jdGlvbigpe3JldHVybiBiaChuLENoKCkuZXhwb25lbnQodCkpfSx4aChuKX12YXIgUGg9bmV3IERhdGUsemg9bmV3IERhdGU7ZnVuY3Rpb24gUmgodCxuLGUscil7ZnVuY3Rpb24gaShuKXtyZXR1cm4gdChuPW5ldyBEYXRlKCtuKSksbn1yZXR1cm4gaS5mbG9vcj1pLGkuY2VpbD1mdW5jdGlvbihlKXtyZXR1cm4gdChlPW5ldyBEYXRlKGUtMSkpLG4oZSwxKSx0KGUpLGV9LGkucm91bmQ9ZnVuY3Rpb24odCl7dmFyIG49aSh0KSxlPWkuY2VpbCh0KTtyZXR1cm4gdC1uPGUtdD9uOmV9LGkub2Zmc2V0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4odD1uZXcgRGF0ZSgrdCksbnVsbD09ZT8xOk1hdGguZmxvb3IoZSkpLHR9LGkucmFuZ2U9ZnVuY3Rpb24oZSxyLG8pe3ZhciBhLHU9W107aWYoZT1pLmNlaWwoZSksbz1udWxsPT1vPzE6TWF0aC5mbG9vcihvKSwhKGU8ciYmbz4wKSlyZXR1cm4gdTtkb3t1LnB1c2goYT1uZXcgRGF0ZSgrZSkpLG4oZSxvKSx0KGUpfXdoaWxlKGE8ZSYmZTxyKTtyZXR1cm4gdX0saS5maWx0ZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIFJoKGZ1bmN0aW9uKG4pe2lmKG4+PW4pZm9yKDt0KG4pLCFlKG4pOyluLnNldFRpbWUobi0xKX0sZnVuY3Rpb24odCxyKXtpZih0Pj10KWlmKHI8MClmb3IoOysrcjw9MDspZm9yKDtuKHQsLTEpLCFlKHQpOyk7ZWxzZSBmb3IoOy0tcj49MDspZm9yKDtuKHQsMSksIWUodCk7KTt9KX0sZSYmKGkuY291bnQ9ZnVuY3Rpb24obixyKXtyZXR1cm4gUGguc2V0VGltZSgrbiksemguc2V0VGltZSgrciksdChQaCksdCh6aCksTWF0aC5mbG9vcihlKFBoLHpoKSl9LGkuZXZlcnk9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9TWF0aC5mbG9vcih0KSxpc0Zpbml0ZSh0KSYmdD4wP3Q+MT9pLmZpbHRlcihyP2Z1bmN0aW9uKG4pe3JldHVybiByKG4pJXQ9PTB9OmZ1bmN0aW9uKG4pe3JldHVybiBpLmNvdW50KDAsbikldD09MH0pOmk6bnVsbH0pLGl9dmFyIExoPVJoKGZ1bmN0aW9uKCl7fSxmdW5jdGlvbih0LG4pe3Quc2V0VGltZSgrdCtuKX0sZnVuY3Rpb24odCxuKXtyZXR1cm4gbi10fSk7TGguZXZlcnk9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9TWF0aC5mbG9vcih0KSxpc0Zpbml0ZSh0KSYmdD4wP3Q+MT9SaChmdW5jdGlvbihuKXtuLnNldFRpbWUoTWF0aC5mbG9vcihuL3QpKnQpfSxmdW5jdGlvbihuLGUpe24uc2V0VGltZSgrbitlKnQpfSxmdW5jdGlvbihuLGUpe3JldHVybihlLW4pL3R9KTpMaDpudWxsfTt2YXIgRGg9TGgucmFuZ2UsVWg9NmU0LHFoPTYwNDhlNSxPaD1SaChmdW5jdGlvbih0KXt0LnNldFRpbWUoMWUzKk1hdGguZmxvb3IodC8xZTMpKX0sZnVuY3Rpb24odCxuKXt0LnNldFRpbWUoK3QrMWUzKm4pfSxmdW5jdGlvbih0LG4pe3JldHVybihuLXQpLzFlM30sZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDU2Vjb25kcygpfSksWWg9T2gucmFuZ2UsQmg9UmgoZnVuY3Rpb24odCl7dC5zZXRUaW1lKE1hdGguZmxvb3IodC9VaCkqVWgpfSxmdW5jdGlvbih0LG4pe3Quc2V0VGltZSgrdCtuKlVoKX0sZnVuY3Rpb24odCxuKXtyZXR1cm4obi10KS9VaH0sZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0TWludXRlcygpfSksRmg9QmgucmFuZ2UsSWg9UmgoZnVuY3Rpb24odCl7dmFyIG49dC5nZXRUaW1lem9uZU9mZnNldCgpKlVoJTM2ZTU7bjwwJiYobis9MzZlNSksdC5zZXRUaW1lKDM2ZTUqTWF0aC5mbG9vcigoK3QtbikvMzZlNSkrbil9LGZ1bmN0aW9uKHQsbil7dC5zZXRUaW1lKCt0KzM2ZTUqbil9LGZ1bmN0aW9uKHQsbil7cmV0dXJuKG4tdCkvMzZlNX0sZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0SG91cnMoKX0pLEhoPUloLnJhbmdlLGpoPVJoKGZ1bmN0aW9uKHQpe3Quc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQsbil7dC5zZXREYXRlKHQuZ2V0RGF0ZSgpK24pfSxmdW5jdGlvbih0LG4pe3JldHVybihuLXQtKG4uZ2V0VGltZXpvbmVPZmZzZXQoKS10LmdldFRpbWV6b25lT2Zmc2V0KCkpKlVoKS84NjRlNX0sZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0RGF0ZSgpLTF9KSxYaD1qaC5yYW5nZTtmdW5jdGlvbiBHaCh0KXtyZXR1cm4gUmgoZnVuY3Rpb24obil7bi5zZXREYXRlKG4uZ2V0RGF0ZSgpLShuLmdldERheSgpKzctdCklNyksbi5zZXRIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24odCxuKXt0LnNldERhdGUodC5nZXREYXRlKCkrNypuKX0sZnVuY3Rpb24odCxuKXtyZXR1cm4obi10LShuLmdldFRpbWV6b25lT2Zmc2V0KCktdC5nZXRUaW1lem9uZU9mZnNldCgpKSpVaCkvcWh9KX12YXIgVmg9R2goMCksJGg9R2goMSksV2g9R2goMiksWmg9R2goMyksUWg9R2goNCksSmg9R2goNSksS2g9R2goNiksdGQ9VmgucmFuZ2UsbmQ9JGgucmFuZ2UsZWQ9V2gucmFuZ2UscmQ9WmgucmFuZ2UsaWQ9UWgucmFuZ2Usb2Q9SmgucmFuZ2UsYWQ9S2gucmFuZ2UsdWQ9UmgoZnVuY3Rpb24odCl7dC5zZXREYXRlKDEpLHQuc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQsbil7dC5zZXRNb250aCh0LmdldE1vbnRoKCkrbil9LGZ1bmN0aW9uKHQsbil7cmV0dXJuIG4uZ2V0TW9udGgoKS10LmdldE1vbnRoKCkrMTIqKG4uZ2V0RnVsbFllYXIoKS10LmdldEZ1bGxZZWFyKCkpfSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRNb250aCgpfSksZmQ9dWQucmFuZ2UsY2Q9UmgoZnVuY3Rpb24odCl7dC5zZXRNb250aCgwLDEpLHQuc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQsbil7dC5zZXRGdWxsWWVhcih0LmdldEZ1bGxZZWFyKCkrbil9LGZ1bmN0aW9uKHQsbil7cmV0dXJuIG4uZ2V0RnVsbFllYXIoKS10LmdldEZ1bGxZZWFyKCl9LGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldEZ1bGxZZWFyKCl9KTtjZC5ldmVyeT1mdW5jdGlvbih0KXtyZXR1cm4gaXNGaW5pdGUodD1NYXRoLmZsb29yKHQpKSYmdD4wP1JoKGZ1bmN0aW9uKG4pe24uc2V0RnVsbFllYXIoTWF0aC5mbG9vcihuLmdldEZ1bGxZZWFyKCkvdCkqdCksbi5zZXRNb250aCgwLDEpLG4uc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKG4sZSl7bi5zZXRGdWxsWWVhcihuLmdldEZ1bGxZZWFyKCkrZSp0KX0pOm51bGx9O3ZhciBzZD1jZC5yYW5nZSxsZD1SaChmdW5jdGlvbih0KXt0LnNldFVUQ1NlY29uZHMoMCwwKX0sZnVuY3Rpb24odCxuKXt0LnNldFRpbWUoK3QrbipVaCl9LGZ1bmN0aW9uKHQsbil7cmV0dXJuKG4tdCkvVWh9LGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ01pbnV0ZXMoKX0pLGhkPWxkLnJhbmdlLGRkPVJoKGZ1bmN0aW9uKHQpe3Quc2V0VVRDTWludXRlcygwLDAsMCl9LGZ1bmN0aW9uKHQsbil7dC5zZXRUaW1lKCt0KzM2ZTUqbil9LGZ1bmN0aW9uKHQsbil7cmV0dXJuKG4tdCkvMzZlNX0sZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDSG91cnMoKX0pLHBkPWRkLnJhbmdlLHZkPVJoKGZ1bmN0aW9uKHQpe3Quc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQsbil7dC5zZXRVVENEYXRlKHQuZ2V0VVRDRGF0ZSgpK24pfSxmdW5jdGlvbih0LG4pe3JldHVybihuLXQpLzg2NGU1fSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENEYXRlKCktMX0pLGdkPXZkLnJhbmdlO2Z1bmN0aW9uIHlkKHQpe3JldHVybiBSaChmdW5jdGlvbihuKXtuLnNldFVUQ0RhdGUobi5nZXRVVENEYXRlKCktKG4uZ2V0VVRDRGF5KCkrNy10KSU3KSxuLnNldFVUQ0hvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LG4pe3Quc2V0VVRDRGF0ZSh0LmdldFVUQ0RhdGUoKSs3Km4pfSxmdW5jdGlvbih0LG4pe3JldHVybihuLXQpL3FofSl9dmFyIF9kPXlkKDApLGJkPXlkKDEpLG1kPXlkKDIpLHhkPXlkKDMpLHdkPXlkKDQpLE1kPXlkKDUpLEFkPXlkKDYpLFRkPV9kLnJhbmdlLE5kPWJkLnJhbmdlLFNkPW1kLnJhbmdlLEVkPXhkLnJhbmdlLGtkPXdkLnJhbmdlLENkPU1kLnJhbmdlLFBkPUFkLnJhbmdlLHpkPVJoKGZ1bmN0aW9uKHQpe3Quc2V0VVRDRGF0ZSgxKSx0LnNldFVUQ0hvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LG4pe3Quc2V0VVRDTW9udGgodC5nZXRVVENNb250aCgpK24pfSxmdW5jdGlvbih0LG4pe3JldHVybiBuLmdldFVUQ01vbnRoKCktdC5nZXRVVENNb250aCgpKzEyKihuLmdldFVUQ0Z1bGxZZWFyKCktdC5nZXRVVENGdWxsWWVhcigpKX0sZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDTW9udGgoKX0pLFJkPXpkLnJhbmdlLExkPVJoKGZ1bmN0aW9uKHQpe3Quc2V0VVRDTW9udGgoMCwxKSx0LnNldFVUQ0hvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LG4pe3Quc2V0VVRDRnVsbFllYXIodC5nZXRVVENGdWxsWWVhcigpK24pfSxmdW5jdGlvbih0LG4pe3JldHVybiBuLmdldFVUQ0Z1bGxZZWFyKCktdC5nZXRVVENGdWxsWWVhcigpfSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENGdWxsWWVhcigpfSk7TGQuZXZlcnk9ZnVuY3Rpb24odCl7cmV0dXJuIGlzRmluaXRlKHQ9TWF0aC5mbG9vcih0KSkmJnQ+MD9SaChmdW5jdGlvbihuKXtuLnNldFVUQ0Z1bGxZZWFyKE1hdGguZmxvb3Iobi5nZXRVVENGdWxsWWVhcigpL3QpKnQpLG4uc2V0VVRDTW9udGgoMCwxKSxuLnNldFVUQ0hvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihuLGUpe24uc2V0VVRDRnVsbFllYXIobi5nZXRVVENGdWxsWWVhcigpK2UqdCl9KTpudWxsfTt2YXIgRGQ9TGQucmFuZ2U7ZnVuY3Rpb24gVWQodCl7aWYoMDw9dC55JiZ0Lnk8MTAwKXt2YXIgbj1uZXcgRGF0ZSgtMSx0Lm0sdC5kLHQuSCx0Lk0sdC5TLHQuTCk7cmV0dXJuIG4uc2V0RnVsbFllYXIodC55KSxufXJldHVybiBuZXcgRGF0ZSh0LnksdC5tLHQuZCx0LkgsdC5NLHQuUyx0LkwpfWZ1bmN0aW9uIHFkKHQpe2lmKDA8PXQueSYmdC55PDEwMCl7dmFyIG49bmV3IERhdGUoRGF0ZS5VVEMoLTEsdC5tLHQuZCx0LkgsdC5NLHQuUyx0LkwpKTtyZXR1cm4gbi5zZXRVVENGdWxsWWVhcih0LnkpLG59cmV0dXJuIG5ldyBEYXRlKERhdGUuVVRDKHQueSx0Lm0sdC5kLHQuSCx0Lk0sdC5TLHQuTCkpfWZ1bmN0aW9uIE9kKHQpe3JldHVybnt5OnQsbTowLGQ6MSxIOjAsTTowLFM6MCxMOjB9fWZ1bmN0aW9uIFlkKHQpe3ZhciBuPXQuZGF0ZVRpbWUsZT10LmRhdGUscj10LnRpbWUsaT10LnBlcmlvZHMsbz10LmRheXMsYT10LnNob3J0RGF5cyx1PXQubW9udGhzLGY9dC5zaG9ydE1vbnRocyxjPVZkKGkpLHM9JGQoaSksbD1WZChvKSxoPSRkKG8pLGQ9VmQoYSkscD0kZChhKSx2PVZkKHUpLGc9JGQodSkseT1WZChmKSxfPSRkKGYpLGI9e2E6ZnVuY3Rpb24odCl7cmV0dXJuIGFbdC5nZXREYXkoKV19LEE6ZnVuY3Rpb24odCl7cmV0dXJuIG9bdC5nZXREYXkoKV19LGI6ZnVuY3Rpb24odCl7cmV0dXJuIGZbdC5nZXRNb250aCgpXX0sQjpmdW5jdGlvbih0KXtyZXR1cm4gdVt0LmdldE1vbnRoKCldfSxjOm51bGwsZDpwcCxlOnBwLGY6YnAsSDp2cCxJOmdwLGo6eXAsTDpfcCxtOm1wLE06eHAscDpmdW5jdGlvbih0KXtyZXR1cm4gaVsrKHQuZ2V0SG91cnMoKT49MTIpXX0sUTpXcCxzOlpwLFM6d3AsdTpNcCxVOkFwLFY6VHAsdzpOcCxXOlNwLHg6bnVsbCxYOm51bGwseTpFcCxZOmtwLFo6Q3AsIiUiOiRwfSxtPXthOmZ1bmN0aW9uKHQpe3JldHVybiBhW3QuZ2V0VVRDRGF5KCldfSxBOmZ1bmN0aW9uKHQpe3JldHVybiBvW3QuZ2V0VVRDRGF5KCldfSxiOmZ1bmN0aW9uKHQpe3JldHVybiBmW3QuZ2V0VVRDTW9udGgoKV19LEI6ZnVuY3Rpb24odCl7cmV0dXJuIHVbdC5nZXRVVENNb250aCgpXX0sYzpudWxsLGQ6UHAsZTpQcCxmOlVwLEg6enAsSTpScCxqOkxwLEw6RHAsbTpxcCxNOk9wLHA6ZnVuY3Rpb24odCl7cmV0dXJuIGlbKyh0LmdldFVUQ0hvdXJzKCk+PTEyKV19LFE6V3AsczpacCxTOllwLHU6QnAsVTpGcCxWOklwLHc6SHAsVzpqcCx4Om51bGwsWDpudWxsLHk6WHAsWTpHcCxaOlZwLCIlIjokcH0seD17YTpmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZC5leGVjKG4uc2xpY2UoZSkpO3JldHVybiByPyh0Lnc9cFtyWzBdLnRvTG93ZXJDYXNlKCldLGUrclswXS5sZW5ndGgpOi0xfSxBOmZ1bmN0aW9uKHQsbixlKXt2YXIgcj1sLmV4ZWMobi5zbGljZShlKSk7cmV0dXJuIHI/KHQudz1oW3JbMF0udG9Mb3dlckNhc2UoKV0sZStyWzBdLmxlbmd0aCk6LTF9LGI6ZnVuY3Rpb24odCxuLGUpe3ZhciByPXkuZXhlYyhuLnNsaWNlKGUpKTtyZXR1cm4gcj8odC5tPV9bclswXS50b0xvd2VyQ2FzZSgpXSxlK3JbMF0ubGVuZ3RoKTotMX0sQjpmdW5jdGlvbih0LG4sZSl7dmFyIHI9di5leGVjKG4uc2xpY2UoZSkpO3JldHVybiByPyh0Lm09Z1tyWzBdLnRvTG93ZXJDYXNlKCldLGUrclswXS5sZW5ndGgpOi0xfSxjOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gQSh0LG4sZSxyKX0sZDppcCxlOmlwLGY6c3AsSDphcCxJOmFwLGo6b3AsTDpjcCxtOnJwLE06dXAscDpmdW5jdGlvbih0LG4sZSl7dmFyIHI9Yy5leGVjKG4uc2xpY2UoZSkpO3JldHVybiByPyh0LnA9c1tyWzBdLnRvTG93ZXJDYXNlKCldLGUrclswXS5sZW5ndGgpOi0xfSxROmhwLHM6ZHAsUzpmcCx1OlpkLFU6UWQsVjpKZCx3OldkLFc6S2QseDpmdW5jdGlvbih0LG4scil7cmV0dXJuIEEodCxlLG4scil9LFg6ZnVuY3Rpb24odCxuLGUpe3JldHVybiBBKHQscixuLGUpfSx5Om5wLFk6dHAsWjplcCwiJSI6bHB9O2Z1bmN0aW9uIHcodCxuKXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHIsaSxvLGE9W10sdT0tMSxmPTAsYz10Lmxlbmd0aDtmb3IoZSBpbnN0YW5jZW9mIERhdGV8fChlPW5ldyBEYXRlKCtlKSk7Kyt1PGM7KTM3PT09dC5jaGFyQ29kZUF0KHUpJiYoYS5wdXNoKHQuc2xpY2UoZix1KSksbnVsbCE9KGk9RmRbcj10LmNoYXJBdCgrK3UpXSk/cj10LmNoYXJBdCgrK3UpOmk9ImUiPT09cj8iICI6IjAiLChvPW5bcl0pJiYocj1vKGUsaSkpLGEucHVzaChyKSxmPXUrMSk7cmV0dXJuIGEucHVzaCh0LnNsaWNlKGYsdSkpLGEuam9pbigiIil9fWZ1bmN0aW9uIE0odCxuKXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHIsaSxvPU9kKDE5MDApO2lmKEEobyx0LGUrPSIiLDApIT1lLmxlbmd0aClyZXR1cm4gbnVsbDtpZigiUSJpbiBvKXJldHVybiBuZXcgRGF0ZShvLlEpO2lmKCJwImluIG8mJihvLkg9by5IJTEyKzEyKm8ucCksIlYiaW4gbyl7aWYoby5WPDF8fG8uVj41MylyZXR1cm4gbnVsbDsidyJpbiBvfHwoby53PTEpLCJaImluIG8/KGk9KHI9cWQoT2Qoby55KSkpLmdldFVUQ0RheSgpLHI9aT40fHwwPT09aT9iZC5jZWlsKHIpOmJkKHIpLHI9dmQub2Zmc2V0KHIsNyooby5WLTEpKSxvLnk9ci5nZXRVVENGdWxsWWVhcigpLG8ubT1yLmdldFVUQ01vbnRoKCksby5kPXIuZ2V0VVRDRGF0ZSgpKyhvLncrNiklNyk6KGk9KHI9bihPZChvLnkpKSkuZ2V0RGF5KCkscj1pPjR8fDA9PT1pPyRoLmNlaWwocik6JGgocikscj1qaC5vZmZzZXQociw3KihvLlYtMSkpLG8ueT1yLmdldEZ1bGxZZWFyKCksby5tPXIuZ2V0TW9udGgoKSxvLmQ9ci5nZXREYXRlKCkrKG8udys2KSU3KX1lbHNlKCJXImluIG98fCJVImluIG8pJiYoInciaW4gb3x8KG8udz0idSJpbiBvP28udSU3OiJXImluIG8/MTowKSxpPSJaImluIG8/cWQoT2Qoby55KSkuZ2V0VVRDRGF5KCk6bihPZChvLnkpKS5nZXREYXkoKSxvLm09MCxvLmQ9IlciaW4gbz8oby53KzYpJTcrNypvLlctKGkrNSklNzpvLncrNypvLlUtKGkrNiklNyk7cmV0dXJuIloiaW4gbz8oby5IKz1vLlovMTAwfDAsby5NKz1vLlolMTAwLHFkKG8pKTpuKG8pfX1mdW5jdGlvbiBBKHQsbixlLHIpe2Zvcih2YXIgaSxvLGE9MCx1PW4ubGVuZ3RoLGY9ZS5sZW5ndGg7YTx1Oyl7aWYocj49ZilyZXR1cm4tMTtpZigzNz09PShpPW4uY2hhckNvZGVBdChhKyspKSl7aWYoaT1uLmNoYXJBdChhKyspLCEobz14W2kgaW4gRmQ/bi5jaGFyQXQoYSsrKTppXSl8fChyPW8odCxlLHIpKTwwKXJldHVybi0xfWVsc2UgaWYoaSE9ZS5jaGFyQ29kZUF0KHIrKykpcmV0dXJuLTF9cmV0dXJuIHJ9cmV0dXJuIGIueD13KGUsYiksYi5YPXcocixiKSxiLmM9dyhuLGIpLG0ueD13KGUsbSksbS5YPXcocixtKSxtLmM9dyhuLG0pLHtmb3JtYXQ6ZnVuY3Rpb24odCl7dmFyIG49dyh0Kz0iIixiKTtyZXR1cm4gbi50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0fSxufSxwYXJzZTpmdW5jdGlvbih0KXt2YXIgbj1NKHQrPSIiLFVkKTtyZXR1cm4gbi50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0fSxufSx1dGNGb3JtYXQ6ZnVuY3Rpb24odCl7dmFyIG49dyh0Kz0iIixtKTtyZXR1cm4gbi50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0fSxufSx1dGNQYXJzZTpmdW5jdGlvbih0KXt2YXIgbj1NKHQscWQpO3JldHVybiBuLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LG59fX12YXIgQmQsRmQ9eyItIjoiIixfOiIgIiwwOiIwIn0sSWQ9L15ccypcZCsvLEhkPS9eJS8samQ9L1tcXF4kKis/fFtcXSgpLnt9XS9nO2Z1bmN0aW9uIFhkKHQsbixlKXt2YXIgcj10PDA/Ii0iOiIiLGk9KHI/LXQ6dCkrIiIsbz1pLmxlbmd0aDtyZXR1cm4gcisobzxlP25ldyBBcnJheShlLW8rMSkuam9pbihuKStpOmkpfWZ1bmN0aW9uIEdkKHQpe3JldHVybiB0LnJlcGxhY2UoamQsIlxcJCYiKX1mdW5jdGlvbiBWZCh0KXtyZXR1cm4gbmV3IFJlZ0V4cCgiXig/OiIrdC5tYXAoR2QpLmpvaW4oInwiKSsiKSIsImkiKX1mdW5jdGlvbiAkZCh0KXtmb3IodmFyIG49e30sZT0tMSxyPXQubGVuZ3RoOysrZTxyOyluW3RbZV0udG9Mb3dlckNhc2UoKV09ZTtyZXR1cm4gbn1mdW5jdGlvbiBXZCh0LG4sZSl7dmFyIHI9SWQuZXhlYyhuLnNsaWNlKGUsZSsxKSk7cmV0dXJuIHI/KHQudz0rclswXSxlK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBaZCh0LG4sZSl7dmFyIHI9SWQuZXhlYyhuLnNsaWNlKGUsZSsxKSk7cmV0dXJuIHI/KHQudT0rclswXSxlK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBRZCh0LG4sZSl7dmFyIHI9SWQuZXhlYyhuLnNsaWNlKGUsZSsyKSk7cmV0dXJuIHI/KHQuVT0rclswXSxlK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBKZCh0LG4sZSl7dmFyIHI9SWQuZXhlYyhuLnNsaWNlKGUsZSsyKSk7cmV0dXJuIHI/KHQuVj0rclswXSxlK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBLZCh0LG4sZSl7dmFyIHI9SWQuZXhlYyhuLnNsaWNlKGUsZSsyKSk7cmV0dXJuIHI/KHQuVz0rclswXSxlK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiB0cCh0LG4sZSl7dmFyIHI9SWQuZXhlYyhuLnNsaWNlKGUsZSs0KSk7cmV0dXJuIHI/KHQueT0rclswXSxlK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBucCh0LG4sZSl7dmFyIHI9SWQuZXhlYyhuLnNsaWNlKGUsZSsyKSk7cmV0dXJuIHI/KHQueT0rclswXSsoK3JbMF0+Njg/MTkwMDoyZTMpLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGVwKHQsbixlKXt2YXIgcj0vXihaKXwoWystXVxkXGQpKD86Oj8oXGRcZCkpPy8uZXhlYyhuLnNsaWNlKGUsZSs2KSk7cmV0dXJuIHI/KHQuWj1yWzFdPzA6LShyWzJdKyhyWzNdfHwiMDAiKSksZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gcnAodCxuLGUpe3ZhciByPUlkLmV4ZWMobi5zbGljZShlLGUrMikpO3JldHVybiByPyh0Lm09clswXS0xLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGlwKHQsbixlKXt2YXIgcj1JZC5leGVjKG4uc2xpY2UoZSxlKzIpKTtyZXR1cm4gcj8odC5kPStyWzBdLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIG9wKHQsbixlKXt2YXIgcj1JZC5leGVjKG4uc2xpY2UoZSxlKzMpKTtyZXR1cm4gcj8odC5tPTAsdC5kPStyWzBdLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGFwKHQsbixlKXt2YXIgcj1JZC5leGVjKG4uc2xpY2UoZSxlKzIpKTtyZXR1cm4gcj8odC5IPStyWzBdLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHVwKHQsbixlKXt2YXIgcj1JZC5leGVjKG4uc2xpY2UoZSxlKzIpKTtyZXR1cm4gcj8odC5NPStyWzBdLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGZwKHQsbixlKXt2YXIgcj1JZC5leGVjKG4uc2xpY2UoZSxlKzIpKTtyZXR1cm4gcj8odC5TPStyWzBdLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGNwKHQsbixlKXt2YXIgcj1JZC5leGVjKG4uc2xpY2UoZSxlKzMpKTtyZXR1cm4gcj8odC5MPStyWzBdLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHNwKHQsbixlKXt2YXIgcj1JZC5leGVjKG4uc2xpY2UoZSxlKzYpKTtyZXR1cm4gcj8odC5MPU1hdGguZmxvb3IoclswXS8xZTMpLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGxwKHQsbixlKXt2YXIgcj1IZC5leGVjKG4uc2xpY2UoZSxlKzEpKTtyZXR1cm4gcj9lK3JbMF0ubGVuZ3RoOi0xfWZ1bmN0aW9uIGhwKHQsbixlKXt2YXIgcj1JZC5leGVjKG4uc2xpY2UoZSkpO3JldHVybiByPyh0LlE9K3JbMF0sZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gZHAodCxuLGUpe3ZhciByPUlkLmV4ZWMobi5zbGljZShlKSk7cmV0dXJuIHI/KHQuUT0xZTMqK3JbMF0sZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gcHAodCxuKXtyZXR1cm4gWGQodC5nZXREYXRlKCksbiwyKX1mdW5jdGlvbiB2cCh0LG4pe3JldHVybiBYZCh0LmdldEhvdXJzKCksbiwyKX1mdW5jdGlvbiBncCh0LG4pe3JldHVybiBYZCh0LmdldEhvdXJzKCklMTJ8fDEyLG4sMil9ZnVuY3Rpb24geXAodCxuKXtyZXR1cm4gWGQoMStqaC5jb3VudChjZCh0KSx0KSxuLDMpfWZ1bmN0aW9uIF9wKHQsbil7cmV0dXJuIFhkKHQuZ2V0TWlsbGlzZWNvbmRzKCksbiwzKX1mdW5jdGlvbiBicCh0LG4pe3JldHVybiBfcCh0LG4pKyIwMDAifWZ1bmN0aW9uIG1wKHQsbil7cmV0dXJuIFhkKHQuZ2V0TW9udGgoKSsxLG4sMil9ZnVuY3Rpb24geHAodCxuKXtyZXR1cm4gWGQodC5nZXRNaW51dGVzKCksbiwyKX1mdW5jdGlvbiB3cCh0LG4pe3JldHVybiBYZCh0LmdldFNlY29uZHMoKSxuLDIpfWZ1bmN0aW9uIE1wKHQpe3ZhciBuPXQuZ2V0RGF5KCk7cmV0dXJuIDA9PT1uPzc6bn1mdW5jdGlvbiBBcCh0LG4pe3JldHVybiBYZChWaC5jb3VudChjZCh0KSx0KSxuLDIpfWZ1bmN0aW9uIFRwKHQsbil7dmFyIGU9dC5nZXREYXkoKTtyZXR1cm4gdD1lPj00fHwwPT09ZT9RaCh0KTpRaC5jZWlsKHQpLFhkKFFoLmNvdW50KGNkKHQpLHQpKyg0PT09Y2QodCkuZ2V0RGF5KCkpLG4sMil9ZnVuY3Rpb24gTnAodCl7cmV0dXJuIHQuZ2V0RGF5KCl9ZnVuY3Rpb24gU3AodCxuKXtyZXR1cm4gWGQoJGguY291bnQoY2QodCksdCksbiwyKX1mdW5jdGlvbiBFcCh0LG4pe3JldHVybiBYZCh0LmdldEZ1bGxZZWFyKCklMTAwLG4sMil9ZnVuY3Rpb24ga3AodCxuKXtyZXR1cm4gWGQodC5nZXRGdWxsWWVhcigpJTFlNCxuLDQpfWZ1bmN0aW9uIENwKHQpe3ZhciBuPXQuZ2V0VGltZXpvbmVPZmZzZXQoKTtyZXR1cm4obj4wPyItIjoobio9LTEsIisiKSkrWGQobi82MHwwLCIwIiwyKStYZChuJTYwLCIwIiwyKX1mdW5jdGlvbiBQcCh0LG4pe3JldHVybiBYZCh0LmdldFVUQ0RhdGUoKSxuLDIpfWZ1bmN0aW9uIHpwKHQsbil7cmV0dXJuIFhkKHQuZ2V0VVRDSG91cnMoKSxuLDIpfWZ1bmN0aW9uIFJwKHQsbil7cmV0dXJuIFhkKHQuZ2V0VVRDSG91cnMoKSUxMnx8MTIsbiwyKX1mdW5jdGlvbiBMcCh0LG4pe3JldHVybiBYZCgxK3ZkLmNvdW50KExkKHQpLHQpLG4sMyl9ZnVuY3Rpb24gRHAodCxuKXtyZXR1cm4gWGQodC5nZXRVVENNaWxsaXNlY29uZHMoKSxuLDMpfWZ1bmN0aW9uIFVwKHQsbil7cmV0dXJuIERwKHQsbikrIjAwMCJ9ZnVuY3Rpb24gcXAodCxuKXtyZXR1cm4gWGQodC5nZXRVVENNb250aCgpKzEsbiwyKX1mdW5jdGlvbiBPcCh0LG4pe3JldHVybiBYZCh0LmdldFVUQ01pbnV0ZXMoKSxuLDIpfWZ1bmN0aW9uIFlwKHQsbil7cmV0dXJuIFhkKHQuZ2V0VVRDU2Vjb25kcygpLG4sMil9ZnVuY3Rpb24gQnAodCl7dmFyIG49dC5nZXRVVENEYXkoKTtyZXR1cm4gMD09PW4/NzpufWZ1bmN0aW9uIEZwKHQsbil7cmV0dXJuIFhkKF9kLmNvdW50KExkKHQpLHQpLG4sMil9ZnVuY3Rpb24gSXAodCxuKXt2YXIgZT10LmdldFVUQ0RheSgpO3JldHVybiB0PWU+PTR8fDA9PT1lP3dkKHQpOndkLmNlaWwodCksWGQod2QuY291bnQoTGQodCksdCkrKDQ9PT1MZCh0KS5nZXRVVENEYXkoKSksbiwyKX1mdW5jdGlvbiBIcCh0KXtyZXR1cm4gdC5nZXRVVENEYXkoKX1mdW5jdGlvbiBqcCh0LG4pe3JldHVybiBYZChiZC5jb3VudChMZCh0KSx0KSxuLDIpfWZ1bmN0aW9uIFhwKHQsbil7cmV0dXJuIFhkKHQuZ2V0VVRDRnVsbFllYXIoKSUxMDAsbiwyKX1mdW5jdGlvbiBHcCh0LG4pe3JldHVybiBYZCh0LmdldFVUQ0Z1bGxZZWFyKCklMWU0LG4sNCl9ZnVuY3Rpb24gVnAoKXtyZXR1cm4iKzAwMDAifWZ1bmN0aW9uICRwKCl7cmV0dXJuIiUifWZ1bmN0aW9uIFdwKHQpe3JldHVybit0fWZ1bmN0aW9uIFpwKHQpe3JldHVybiBNYXRoLmZsb29yKCt0LzFlMyl9ZnVuY3Rpb24gUXAobil7cmV0dXJuIEJkPVlkKG4pLHQudGltZUZvcm1hdD1CZC5mb3JtYXQsdC50aW1lUGFyc2U9QmQucGFyc2UsdC51dGNGb3JtYXQ9QmQudXRjRm9ybWF0LHQudXRjUGFyc2U9QmQudXRjUGFyc2UsQmR9UXAoe2RhdGVUaW1lOiIleCwgJVgiLGRhdGU6IiUtbS8lLWQvJVkiLHRpbWU6IiUtSTolTTolUyAlcCIscGVyaW9kczpbIkFNIiwiUE0iXSxkYXlzOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSxzaG9ydERheXM6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSxtb250aHM6WyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdLHNob3J0TW9udGhzOlsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl19KTt2YXIgSnA9RGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmc/ZnVuY3Rpb24odCl7cmV0dXJuIHQudG9JU09TdHJpbmcoKX06dC51dGNGb3JtYXQoIiVZLSVtLSVkVCVIOiVNOiVTLiVMWiIpO3ZhciBLcD0rbmV3IERhdGUoIjIwMDAtMDEtMDFUMDA6MDA6MDAuMDAwWiIpP2Z1bmN0aW9uKHQpe3ZhciBuPW5ldyBEYXRlKHQpO3JldHVybiBpc05hTihuKT9udWxsOm59OnQudXRjUGFyc2UoIiVZLSVtLSVkVCVIOiVNOiVTLiVMWiIpLHR2PTFlMyxudj02MCp0dixldj02MCpudixydj0yNCpldixpdj03KnJ2LG92PTMwKnJ2LGF2PTM2NSpydjtmdW5jdGlvbiB1dih0KXtyZXR1cm4gbmV3IERhdGUodCl9ZnVuY3Rpb24gZnYodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBEYXRlPyt0OituZXcgRGF0ZSgrdCl9ZnVuY3Rpb24gY3YodCxuLHIsaSxvLGEsdSxmLGMpe3ZhciBzPW1oKGdoLHZlKSxsPXMuaW52ZXJ0LGg9cy5kb21haW4sZD1jKCIuJUwiKSxwPWMoIjolUyIpLHY9YygiJUk6JU0iKSxnPWMoIiVJICVwIikseT1jKCIlYSAlZCIpLF89YygiJWIgJWQiKSxiPWMoIiVCIiksbT1jKCIlWSIpLHg9W1t1LDEsdHZdLFt1LDUsNSp0dl0sW3UsMTUsMTUqdHZdLFt1LDMwLDMwKnR2XSxbYSwxLG52XSxbYSw1LDUqbnZdLFthLDE1LDE1Km52XSxbYSwzMCwzMCpudl0sW28sMSxldl0sW28sMywzKmV2XSxbbyw2LDYqZXZdLFtvLDEyLDEyKmV2XSxbaSwxLHJ2XSxbaSwyLDIqcnZdLFtyLDEsaXZdLFtuLDEsb3ZdLFtuLDMsMypvdl0sW3QsMSxhdl1dO2Z1bmN0aW9uIE0oZSl7cmV0dXJuKHUoZSk8ZT9kOmEoZSk8ZT9wOm8oZSk8ZT92OmkoZSk8ZT9nOm4oZSk8ZT9yKGUpPGU/eTpfOnQoZSk8ZT9iOm0pKGUpfWZ1bmN0aW9uIEEobixyLGksbyl7aWYobnVsbD09biYmKG49MTApLCJudW1iZXIiPT10eXBlb2Ygbil7dmFyIGE9TWF0aC5hYnMoaS1yKS9uLHU9ZShmdW5jdGlvbih0KXtyZXR1cm4gdFsyXX0pLnJpZ2h0KHgsYSk7dT09PXgubGVuZ3RoPyhvPXcoci9hdixpL2F2LG4pLG49dCk6dT8obz0odT14W2EveFt1LTFdWzJdPHhbdV1bMl0vYT91LTE6dV0pWzFdLG49dVswXSk6KG89TWF0aC5tYXgodyhyLGksbiksMSksbj1mKX1yZXR1cm4gbnVsbD09bz9uOm4uZXZlcnkobyl9cmV0dXJuIHMuaW52ZXJ0PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgRGF0ZShsKHQpKX0scy5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/aChmaC5jYWxsKHQsZnYpKTpoKCkubWFwKHV2KX0scy50aWNrcz1mdW5jdGlvbih0LG4pe3ZhciBlLHI9aCgpLGk9clswXSxvPXJbci5sZW5ndGgtMV0sYT1vPGk7cmV0dXJuIGEmJihlPWksaT1vLG89ZSksZT0oZT1BKHQsaSxvLG4pKT9lLnJhbmdlKGksbysxKTpbXSxhP2UucmV2ZXJzZSgpOmV9LHMudGlja0Zvcm1hdD1mdW5jdGlvbih0LG4pe3JldHVybiBudWxsPT1uP006YyhuKX0scy5uaWNlPWZ1bmN0aW9uKHQsbil7dmFyIGU9aCgpO3JldHVybih0PUEodCxlWzBdLGVbZS5sZW5ndGgtMV0sbikpP2god2goZSx0KSk6c30scy5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGJoKHMsY3YodCxuLHIsaSxvLGEsdSxmLGMpKX0sc31mdW5jdGlvbiBzdih0KXtmb3IodmFyIG49dC5sZW5ndGgvNnwwLGU9bmV3IEFycmF5KG4pLHI9MDtyPG47KWVbcl09IiMiK3Quc2xpY2UoNipyLDYqKytyKTtyZXR1cm4gZX12YXIgbHY9c3YoIjFmNzdiNGZmN2YwZTJjYTAyY2Q2MjcyODk0NjdiZDhjNTY0YmUzNzdjMjdmN2Y3ZmJjYmQyMjE3YmVjZiIpLGh2PXN2KCI3ZmM5N2ZiZWFlZDRmZGMwODZmZmZmOTkzODZjYjBmMDAyN2ZiZjViMTc2NjY2NjYiKSxkdj1zdigiMWI5ZTc3ZDk1ZjAyNzU3MGIzZTcyOThhNjZhNjFlZTZhYjAyYTY3NjFkNjY2NjY2IikscHY9c3YoImE2Y2VlMzFmNzhiNGIyZGY4YTMzYTAyY2ZiOWE5OWUzMWExY2ZkYmY2ZmZmN2YwMGNhYjJkNjZhM2Q5YWZmZmY5OWIxNTkyOCIpLHZ2PXN2KCJmYmI0YWViM2NkZTNjY2ViYzVkZWNiZTRmZWQ5YTZmZmZmY2NlNWQ4YmRmZGRhZWNmMmYyZjIiKSxndj1zdigiYjNlMmNkZmRjZGFjY2JkNWU4ZjRjYWU0ZTZmNWM5ZmZmMmFlZjFlMmNjY2NjY2NjIikseXY9c3YoImU0MWExYzM3N2ViODRkYWY0YTk4NGVhM2ZmN2YwMGZmZmYzM2E2NTYyOGY3ODFiZjk5OTk5OSIpLF92PXN2KCI2NmMyYTVmYzhkNjI4ZGEwY2JlNzhhYzNhNmQ4NTRmZmQ5MmZlNWM0OTRiM2IzYjMiKSxidj1zdigiOGRkM2M3ZmZmZmIzYmViYWRhZmI4MDcyODBiMWQzZmRiNDYyYjNkZTY5ZmNjZGU1ZDlkOWQ5YmM4MGJkY2NlYmM1ZmZlZDZmIik7ZnVuY3Rpb24gbXYodCl7cmV0dXJuIGxlKHRbdC5sZW5ndGgtMV0pfXZhciB4dj1uZXcgQXJyYXkoMykuY29uY2F0KCJkOGIzNjVmNWY1ZjU1YWI0YWMiLCJhNjYxMWFkZmMyN2Q4MGNkYzEwMTg1NzEiLCJhNjYxMWFkZmMyN2RmNWY1ZjU4MGNkYzEwMTg1NzEiLCI4YzUxMGFkOGIzNjVmNmU4YzNjN2VhZTU1YWI0YWMwMTY2NWUiLCI4YzUxMGFkOGIzNjVmNmU4YzNmNWY1ZjVjN2VhZTU1YWI0YWMwMTY2NWUiLCI4YzUxMGFiZjgxMmRkZmMyN2RmNmU4YzNjN2VhZTU4MGNkYzEzNTk3OGYwMTY2NWUiLCI4YzUxMGFiZjgxMmRkZmMyN2RmNmU4YzNmNWY1ZjVjN2VhZTU4MGNkYzEzNTk3OGYwMTY2NWUiLCI1NDMwMDU4YzUxMGFiZjgxMmRkZmMyN2RmNmU4YzNjN2VhZTU4MGNkYzEzNTk3OGYwMTY2NWUwMDNjMzAiLCI1NDMwMDU4YzUxMGFiZjgxMmRkZmMyN2RmNmU4YzNmNWY1ZjVjN2VhZTU4MGNkYzEzNTk3OGYwMTY2NWUwMDNjMzAiKS5tYXAoc3YpLHd2PW12KHh2KSxNdj1uZXcgQXJyYXkoMykuY29uY2F0KCJhZjhkYzNmN2Y3Zjc3ZmJmN2IiLCI3YjMyOTRjMmE1Y2ZhNmRiYTAwMDg4MzciLCI3YjMyOTRjMmE1Y2ZmN2Y3ZjdhNmRiYTAwMDg4MzciLCI3NjJhODNhZjhkYzNlN2Q0ZThkOWYwZDM3ZmJmN2IxYjc4MzciLCI3NjJhODNhZjhkYzNlN2Q0ZThmN2Y3ZjdkOWYwZDM3ZmJmN2IxYjc4MzciLCI3NjJhODM5OTcwYWJjMmE1Y2ZlN2Q0ZThkOWYwZDNhNmRiYTA1YWFlNjExYjc4MzciLCI3NjJhODM5OTcwYWJjMmE1Y2ZlN2Q0ZThmN2Y3ZjdkOWYwZDNhNmRiYTA1YWFlNjExYjc4MzciLCI0MDAwNGI3NjJhODM5OTcwYWJjMmE1Y2ZlN2Q0ZThkOWYwZDNhNmRiYTA1YWFlNjExYjc4MzcwMDQ0MWIiLCI0MDAwNGI3NjJhODM5OTcwYWJjMmE1Y2ZlN2Q0ZThmN2Y3ZjdkOWYwZDNhNmRiYTA1YWFlNjExYjc4MzcwMDQ0MWIiKS5tYXAoc3YpLEF2PW12KE12KSxUdj1uZXcgQXJyYXkoMykuY29uY2F0KCJlOWEzYzlmN2Y3ZjdhMWQ3NmEiLCJkMDFjOGJmMWI2ZGFiOGUxODY0ZGFjMjYiLCJkMDFjOGJmMWI2ZGFmN2Y3ZjdiOGUxODY0ZGFjMjYiLCJjNTFiN2RlOWEzYzlmZGUwZWZlNmY1ZDBhMWQ3NmE0ZDkyMjEiLCJjNTFiN2RlOWEzYzlmZGUwZWZmN2Y3ZjdlNmY1ZDBhMWQ3NmE0ZDkyMjEiLCJjNTFiN2RkZTc3YWVmMWI2ZGFmZGUwZWZlNmY1ZDBiOGUxODY3ZmJjNDE0ZDkyMjEiLCJjNTFiN2RkZTc3YWVmMWI2ZGFmZGUwZWZmN2Y3ZjdlNmY1ZDBiOGUxODY3ZmJjNDE0ZDkyMjEiLCI4ZTAxNTJjNTFiN2RkZTc3YWVmMWI2ZGFmZGUwZWZlNmY1ZDBiOGUxODY3ZmJjNDE0ZDkyMjEyNzY0MTkiLCI4ZTAxNTJjNTFiN2RkZTc3YWVmMWI2ZGFmZGUwZWZmN2Y3ZjdlNmY1ZDBiOGUxODY3ZmJjNDE0ZDkyMjEyNzY0MTkiKS5tYXAoc3YpLE52PW12KFR2KSxTdj1uZXcgQXJyYXkoMykuY29uY2F0KCI5OThlYzNmN2Y3ZjdmMWEzNDAiLCI1ZTNjOTliMmFiZDJmZGI4NjNlNjYxMDEiLCI1ZTNjOTliMmFiZDJmN2Y3ZjdmZGI4NjNlNjYxMDEiLCI1NDI3ODg5OThlYzNkOGRhZWJmZWUwYjZmMWEzNDBiMzU4MDYiLCI1NDI3ODg5OThlYzNkOGRhZWJmN2Y3ZjdmZWUwYjZmMWEzNDBiMzU4MDYiLCI1NDI3ODg4MDczYWNiMmFiZDJkOGRhZWJmZWUwYjZmZGI4NjNlMDgyMTRiMzU4MDYiLCI1NDI3ODg4MDczYWNiMmFiZDJkOGRhZWJmN2Y3ZjdmZWUwYjZmZGI4NjNlMDgyMTRiMzU4MDYiLCIyZDAwNGI1NDI3ODg4MDczYWNiMmFiZDJkOGRhZWJmZWUwYjZmZGI4NjNlMDgyMTRiMzU4MDY3ZjNiMDgiLCIyZDAwNGI1NDI3ODg4MDczYWNiMmFiZDJkOGRhZWJmN2Y3ZjdmZWUwYjZmZGI4NjNlMDgyMTRiMzU4MDY3ZjNiMDgiKS5tYXAoc3YpLEV2PW12KFN2KSxrdj1uZXcgQXJyYXkoMykuY29uY2F0KCJlZjhhNjJmN2Y3Zjc2N2E5Y2YiLCJjYTAwMjBmNGE1ODI5MmM1ZGUwNTcxYjAiLCJjYTAwMjBmNGE1ODJmN2Y3Zjc5MmM1ZGUwNTcxYjAiLCJiMjE4MmJlZjhhNjJmZGRiYzdkMWU1ZjA2N2E5Y2YyMTY2YWMiLCJiMjE4MmJlZjhhNjJmZGRiYzdmN2Y3ZjdkMWU1ZjA2N2E5Y2YyMTY2YWMiLCJiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdkMWU1ZjA5MmM1ZGU0MzkzYzMyMTY2YWMiLCJiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdmN2Y3ZjdkMWU1ZjA5MmM1ZGU0MzkzYzMyMTY2YWMiLCI2NzAwMWZiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdkMWU1ZjA5MmM1ZGU0MzkzYzMyMTY2YWMwNTMwNjEiLCI2NzAwMWZiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdmN2Y3ZjdkMWU1ZjA5MmM1ZGU0MzkzYzMyMTY2YWMwNTMwNjEiKS5tYXAoc3YpLEN2PW12KGt2KSxQdj1uZXcgQXJyYXkoMykuY29uY2F0KCJlZjhhNjJmZmZmZmY5OTk5OTkiLCJjYTAwMjBmNGE1ODJiYWJhYmE0MDQwNDAiLCJjYTAwMjBmNGE1ODJmZmZmZmZiYWJhYmE0MDQwNDAiLCJiMjE4MmJlZjhhNjJmZGRiYzdlMGUwZTA5OTk5OTk0ZDRkNGQiLCJiMjE4MmJlZjhhNjJmZGRiYzdmZmZmZmZlMGUwZTA5OTk5OTk0ZDRkNGQiLCJiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdlMGUwZTBiYWJhYmE4Nzg3ODc0ZDRkNGQiLCJiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdmZmZmZmZlMGUwZTBiYWJhYmE4Nzg3ODc0ZDRkNGQiLCI2NzAwMWZiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdlMGUwZTBiYWJhYmE4Nzg3ODc0ZDRkNGQxYTFhMWEiLCI2NzAwMWZiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdmZmZmZmZlMGUwZTBiYWJhYmE4Nzg3ODc0ZDRkNGQxYTFhMWEiKS5tYXAoc3YpLHp2PW12KFB2KSxSdj1uZXcgQXJyYXkoMykuY29uY2F0KCJmYzhkNTlmZmZmYmY5MWJmZGIiLCJkNzE5MWNmZGFlNjFhYmQ5ZTkyYzdiYjYiLCJkNzE5MWNmZGFlNjFmZmZmYmZhYmQ5ZTkyYzdiYjYiLCJkNzMwMjdmYzhkNTlmZWUwOTBlMGYzZjg5MWJmZGI0NTc1YjQiLCJkNzMwMjdmYzhkNTlmZWUwOTBmZmZmYmZlMGYzZjg5MWJmZGI0NTc1YjQiLCJkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOTBlMGYzZjhhYmQ5ZTk3NGFkZDE0NTc1YjQiLCJkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOTBmZmZmYmZlMGYzZjhhYmQ5ZTk3NGFkZDE0NTc1YjQiLCJhNTAwMjZkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOTBlMGYzZjhhYmQ5ZTk3NGFkZDE0NTc1YjQzMTM2OTUiLCJhNTAwMjZkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOTBmZmZmYmZlMGYzZjhhYmQ5ZTk3NGFkZDE0NTc1YjQzMTM2OTUiKS5tYXAoc3YpLEx2PW12KFJ2KSxEdj1uZXcgQXJyYXkoMykuY29uY2F0KCJmYzhkNTlmZmZmYmY5MWNmNjAiLCJkNzE5MWNmZGFlNjFhNmQ5NmExYTk2NDEiLCJkNzE5MWNmZGFlNjFmZmZmYmZhNmQ5NmExYTk2NDEiLCJkNzMwMjdmYzhkNTlmZWUwOGJkOWVmOGI5MWNmNjAxYTk4NTAiLCJkNzMwMjdmYzhkNTlmZWUwOGJmZmZmYmZkOWVmOGI5MWNmNjAxYTk4NTAiLCJkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOGJkOWVmOGJhNmQ5NmE2NmJkNjMxYTk4NTAiLCJkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOGJmZmZmYmZkOWVmOGJhNmQ5NmE2NmJkNjMxYTk4NTAiLCJhNTAwMjZkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOGJkOWVmOGJhNmQ5NmE2NmJkNjMxYTk4NTAwMDY4MzciLCJhNTAwMjZkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOGJmZmZmYmZkOWVmOGJhNmQ5NmE2NmJkNjMxYTk4NTAwMDY4MzciKS5tYXAoc3YpLFV2PW12KER2KSxxdj1uZXcgQXJyYXkoMykuY29uY2F0KCJmYzhkNTlmZmZmYmY5OWQ1OTQiLCJkNzE5MWNmZGFlNjFhYmRkYTQyYjgzYmEiLCJkNzE5MWNmZGFlNjFmZmZmYmZhYmRkYTQyYjgzYmEiLCJkNTNlNGZmYzhkNTlmZWUwOGJlNmY1OTg5OWQ1OTQzMjg4YmQiLCJkNTNlNGZmYzhkNTlmZWUwOGJmZmZmYmZlNmY1OTg5OWQ1OTQzMjg4YmQiLCJkNTNlNGZmNDZkNDNmZGFlNjFmZWUwOGJlNmY1OThhYmRkYTQ2NmMyYTUzMjg4YmQiLCJkNTNlNGZmNDZkNDNmZGFlNjFmZWUwOGJmZmZmYmZlNmY1OThhYmRkYTQ2NmMyYTUzMjg4YmQiLCI5ZTAxNDJkNTNlNGZmNDZkNDNmZGFlNjFmZWUwOGJlNmY1OThhYmRkYTQ2NmMyYTUzMjg4YmQ1ZTRmYTIiLCI5ZTAxNDJkNTNlNGZmNDZkNDNmZGFlNjFmZWUwOGJmZmZmYmZlNmY1OThhYmRkYTQ2NmMyYTUzMjg4YmQ1ZTRmYTIiKS5tYXAoc3YpLE92PW12KHF2KSxZdj1uZXcgQXJyYXkoMykuY29uY2F0KCJlNWY1Zjk5OWQ4YzkyY2EyNWYiLCJlZGY4ZmJiMmUyZTI2NmMyYTQyMzhiNDUiLCJlZGY4ZmJiMmUyZTI2NmMyYTQyY2EyNWYwMDZkMmMiLCJlZGY4ZmJjY2VjZTY5OWQ4Yzk2NmMyYTQyY2EyNWYwMDZkMmMiLCJlZGY4ZmJjY2VjZTY5OWQ4Yzk2NmMyYTQ0MWFlNzYyMzhiNDUwMDU4MjQiLCJmN2ZjZmRlNWY1ZjljY2VjZTY5OWQ4Yzk2NmMyYTQ0MWFlNzYyMzhiNDUwMDU4MjQiLCJmN2ZjZmRlNWY1ZjljY2VjZTY5OWQ4Yzk2NmMyYTQ0MWFlNzYyMzhiNDUwMDZkMmMwMDQ0MWIiKS5tYXAoc3YpLEJ2PW12KFl2KSxGdj1uZXcgQXJyYXkoMykuY29uY2F0KCJlMGVjZjQ5ZWJjZGE4ODU2YTciLCJlZGY4ZmJiM2NkZTM4Yzk2YzY4ODQxOWQiLCJlZGY4ZmJiM2NkZTM4Yzk2YzY4ODU2YTc4MTBmN2MiLCJlZGY4ZmJiZmQzZTY5ZWJjZGE4Yzk2YzY4ODU2YTc4MTBmN2MiLCJlZGY4ZmJiZmQzZTY5ZWJjZGE4Yzk2YzY4YzZiYjE4ODQxOWQ2ZTAxNmIiLCJmN2ZjZmRlMGVjZjRiZmQzZTY5ZWJjZGE4Yzk2YzY4YzZiYjE4ODQxOWQ2ZTAxNmIiLCJmN2ZjZmRlMGVjZjRiZmQzZTY5ZWJjZGE4Yzk2YzY4YzZiYjE4ODQxOWQ4MTBmN2M0ZDAwNGIiKS5tYXAoc3YpLEl2PW12KEZ2KSxIdj1uZXcgQXJyYXkoMykuY29uY2F0KCJlMGYzZGJhOGRkYjU0M2EyY2EiLCJmMGY5ZThiYWU0YmM3YmNjYzQyYjhjYmUiLCJmMGY5ZThiYWU0YmM3YmNjYzQ0M2EyY2EwODY4YWMiLCJmMGY5ZThjY2ViYzVhOGRkYjU3YmNjYzQ0M2EyY2EwODY4YWMiLCJmMGY5ZThjY2ViYzVhOGRkYjU3YmNjYzQ0ZWIzZDMyYjhjYmUwODU4OWUiLCJmN2ZjZjBlMGYzZGJjY2ViYzVhOGRkYjU3YmNjYzQ0ZWIzZDMyYjhjYmUwODU4OWUiLCJmN2ZjZjBlMGYzZGJjY2ViYzVhOGRkYjU3YmNjYzQ0ZWIzZDMyYjhjYmUwODY4YWMwODQwODEiKS5tYXAoc3YpLGp2PW12KEh2KSxYdj1uZXcgQXJyYXkoMykuY29uY2F0KCJmZWU4YzhmZGJiODRlMzRhMzMiLCJmZWYwZDlmZGNjOGFmYzhkNTlkNzMwMWYiLCJmZWYwZDlmZGNjOGFmYzhkNTllMzRhMzNiMzAwMDAiLCJmZWYwZDlmZGQ0OWVmZGJiODRmYzhkNTllMzRhMzNiMzAwMDAiLCJmZWYwZDlmZGQ0OWVmZGJiODRmYzhkNTllZjY1NDhkNzMwMWY5OTAwMDAiLCJmZmY3ZWNmZWU4YzhmZGQ0OWVmZGJiODRmYzhkNTllZjY1NDhkNzMwMWY5OTAwMDAiLCJmZmY3ZWNmZWU4YzhmZGQ0OWVmZGJiODRmYzhkNTllZjY1NDhkNzMwMWZiMzAwMDA3ZjAwMDAiKS5tYXAoc3YpLEd2PW12KFh2KSxWdj1uZXcgQXJyYXkoMykuY29uY2F0KCJlY2UyZjBhNmJkZGIxYzkwOTkiLCJmNmVmZjdiZGM5ZTE2N2E5Y2YwMjgxOGEiLCJmNmVmZjdiZGM5ZTE2N2E5Y2YxYzkwOTkwMTZjNTkiLCJmNmVmZjdkMGQxZTZhNmJkZGI2N2E5Y2YxYzkwOTkwMTZjNTkiLCJmNmVmZjdkMGQxZTZhNmJkZGI2N2E5Y2YzNjkwYzAwMjgxOGEwMTY0NTAiLCJmZmY3ZmJlY2UyZjBkMGQxZTZhNmJkZGI2N2E5Y2YzNjkwYzAwMjgxOGEwMTY0NTAiLCJmZmY3ZmJlY2UyZjBkMGQxZTZhNmJkZGI2N2E5Y2YzNjkwYzAwMjgxOGEwMTZjNTkwMTQ2MzYiKS5tYXAoc3YpLCR2PW12KFZ2KSxXdj1uZXcgQXJyYXkoMykuY29uY2F0KCJlY2U3ZjJhNmJkZGIyYjhjYmUiLCJmMWVlZjZiZGM5ZTE3NGE5Y2YwNTcwYjAiLCJmMWVlZjZiZGM5ZTE3NGE5Y2YyYjhjYmUwNDVhOGQiLCJmMWVlZjZkMGQxZTZhNmJkZGI3NGE5Y2YyYjhjYmUwNDVhOGQiLCJmMWVlZjZkMGQxZTZhNmJkZGI3NGE5Y2YzNjkwYzAwNTcwYjAwMzRlN2IiLCJmZmY3ZmJlY2U3ZjJkMGQxZTZhNmJkZGI3NGE5Y2YzNjkwYzAwNTcwYjAwMzRlN2IiLCJmZmY3ZmJlY2U3ZjJkMGQxZTZhNmJkZGI3NGE5Y2YzNjkwYzAwNTcwYjAwNDVhOGQwMjM4NTgiKS5tYXAoc3YpLFp2PW12KFd2KSxRdj1uZXcgQXJyYXkoMykuY29uY2F0KCJlN2UxZWZjOTk0YzdkZDFjNzciLCJmMWVlZjZkN2I1ZDhkZjY1YjBjZTEyNTYiLCJmMWVlZjZkN2I1ZDhkZjY1YjBkZDFjNzc5ODAwNDMiLCJmMWVlZjZkNGI5ZGFjOTk0YzdkZjY1YjBkZDFjNzc5ODAwNDMiLCJmMWVlZjZkNGI5ZGFjOTk0YzdkZjY1YjBlNzI5OGFjZTEyNTY5MTAwM2YiLCJmN2Y0ZjllN2UxZWZkNGI5ZGFjOTk0YzdkZjY1YjBlNzI5OGFjZTEyNTY5MTAwM2YiLCJmN2Y0ZjllN2UxZWZkNGI5ZGFjOTk0YzdkZjY1YjBlNzI5OGFjZTEyNTY5ODAwNDM2NzAwMWYiKS5tYXAoc3YpLEp2PW12KFF2KSxLdj1uZXcgQXJyYXkoMykuY29uY2F0KCJmZGUwZGRmYTlmYjVjNTFiOGEiLCJmZWViZTJmYmI0YjlmNzY4YTFhZTAxN2UiLCJmZWViZTJmYmI0YjlmNzY4YTFjNTFiOGE3YTAxNzciLCJmZWViZTJmY2M1YzBmYTlmYjVmNzY4YTFjNTFiOGE3YTAxNzciLCJmZWViZTJmY2M1YzBmYTlmYjVmNzY4YTFkZDM0OTdhZTAxN2U3YTAxNzciLCJmZmY3ZjNmZGUwZGRmY2M1YzBmYTlmYjVmNzY4YTFkZDM0OTdhZTAxN2U3YTAxNzciLCJmZmY3ZjNmZGUwZGRmY2M1YzBmYTlmYjVmNzY4YTFkZDM0OTdhZTAxN2U3YTAxNzc0OTAwNmEiKS5tYXAoc3YpLHRnPW12KEt2KSxuZz1uZXcgQXJyYXkoMykuY29uY2F0KCJlZGY4YjE3ZmNkYmIyYzdmYjgiLCJmZmZmY2NhMWRhYjQ0MWI2YzQyMjVlYTgiLCJmZmZmY2NhMWRhYjQ0MWI2YzQyYzdmYjgyNTM0OTQiLCJmZmZmY2NjN2U5YjQ3ZmNkYmI0MWI2YzQyYzdmYjgyNTM0OTQiLCJmZmZmY2NjN2U5YjQ3ZmNkYmI0MWI2YzQxZDkxYzAyMjVlYTgwYzJjODQiLCJmZmZmZDllZGY4YjFjN2U5YjQ3ZmNkYmI0MWI2YzQxZDkxYzAyMjVlYTgwYzJjODQiLCJmZmZmZDllZGY4YjFjN2U5YjQ3ZmNkYmI0MWI2YzQxZDkxYzAyMjVlYTgyNTM0OTQwODFkNTgiKS5tYXAoc3YpLGVnPW12KG5nKSxyZz1uZXcgQXJyYXkoMykuY29uY2F0KCJmN2ZjYjlhZGRkOGUzMWEzNTQiLCJmZmZmY2NjMmU2OTk3OGM2NzkyMzg0NDMiLCJmZmZmY2NjMmU2OTk3OGM2NzkzMWEzNTQwMDY4MzciLCJmZmZmY2NkOWYwYTNhZGRkOGU3OGM2NzkzMWEzNTQwMDY4MzciLCJmZmZmY2NkOWYwYTNhZGRkOGU3OGM2Nzk0MWFiNWQyMzg0NDMwMDVhMzIiLCJmZmZmZTVmN2ZjYjlkOWYwYTNhZGRkOGU3OGM2Nzk0MWFiNWQyMzg0NDMwMDVhMzIiLCJmZmZmZTVmN2ZjYjlkOWYwYTNhZGRkOGU3OGM2Nzk0MWFiNWQyMzg0NDMwMDY4MzcwMDQ1MjkiKS5tYXAoc3YpLGlnPW12KHJnKSxvZz1uZXcgQXJyYXkoMykuY29uY2F0KCJmZmY3YmNmZWM0NGZkOTVmMGUiLCJmZmZmZDRmZWQ5OGVmZTk5MjljYzRjMDIiLCJmZmZmZDRmZWQ5OGVmZTk5MjlkOTVmMGU5OTM0MDQiLCJmZmZmZDRmZWUzOTFmZWM0NGZmZTk5MjlkOTVmMGU5OTM0MDQiLCJmZmZmZDRmZWUzOTFmZWM0NGZmZTk5MjllYzcwMTRjYzRjMDI4YzJkMDQiLCJmZmZmZTVmZmY3YmNmZWUzOTFmZWM0NGZmZTk5MjllYzcwMTRjYzRjMDI4YzJkMDQiLCJmZmZmZTVmZmY3YmNmZWUzOTFmZWM0NGZmZTk5MjllYzcwMTRjYzRjMDI5OTM0MDQ2NjI1MDYiKS5tYXAoc3YpLGFnPW12KG9nKSx1Zz1uZXcgQXJyYXkoMykuY29uY2F0KCJmZmVkYTBmZWIyNGNmMDNiMjAiLCJmZmZmYjJmZWNjNWNmZDhkM2NlMzFhMWMiLCJmZmZmYjJmZWNjNWNmZDhkM2NmMDNiMjBiZDAwMjYiLCJmZmZmYjJmZWQ5NzZmZWIyNGNmZDhkM2NmMDNiMjBiZDAwMjYiLCJmZmZmYjJmZWQ5NzZmZWIyNGNmZDhkM2NmYzRlMmFlMzFhMWNiMTAwMjYiLCJmZmZmY2NmZmVkYTBmZWQ5NzZmZWIyNGNmZDhkM2NmYzRlMmFlMzFhMWNiMTAwMjYiLCJmZmZmY2NmZmVkYTBmZWQ5NzZmZWIyNGNmZDhkM2NmYzRlMmFlMzFhMWNiZDAwMjY4MDAwMjYiKS5tYXAoc3YpLGZnPW12KHVnKSxjZz1uZXcgQXJyYXkoMykuY29uY2F0KCJkZWViZjc5ZWNhZTEzMTgyYmQiLCJlZmYzZmZiZGQ3ZTc2YmFlZDYyMTcxYjUiLCJlZmYzZmZiZGQ3ZTc2YmFlZDYzMTgyYmQwODUxOWMiLCJlZmYzZmZjNmRiZWY5ZWNhZTE2YmFlZDYzMTgyYmQwODUxOWMiLCJlZmYzZmZjNmRiZWY5ZWNhZTE2YmFlZDY0MjkyYzYyMTcxYjUwODQ1OTQiLCJmN2ZiZmZkZWViZjdjNmRiZWY5ZWNhZTE2YmFlZDY0MjkyYzYyMTcxYjUwODQ1OTQiLCJmN2ZiZmZkZWViZjdjNmRiZWY5ZWNhZTE2YmFlZDY0MjkyYzYyMTcxYjUwODUxOWMwODMwNmIiKS5tYXAoc3YpLHNnPW12KGNnKSxsZz1uZXcgQXJyYXkoMykuY29uY2F0KCJlNWY1ZTBhMWQ5OWIzMWEzNTQiLCJlZGY4ZTliYWU0YjM3NGM0NzYyMzhiNDUiLCJlZGY4ZTliYWU0YjM3NGM0NzYzMWEzNTQwMDZkMmMiLCJlZGY4ZTljN2U5YzBhMWQ5OWI3NGM0NzYzMWEzNTQwMDZkMmMiLCJlZGY4ZTljN2U5YzBhMWQ5OWI3NGM0NzY0MWFiNWQyMzhiNDUwMDVhMzIiLCJmN2ZjZjVlNWY1ZTBjN2U5YzBhMWQ5OWI3NGM0NzY0MWFiNWQyMzhiNDUwMDVhMzIiLCJmN2ZjZjVlNWY1ZTBjN2U5YzBhMWQ5OWI3NGM0NzY0MWFiNWQyMzhiNDUwMDZkMmMwMDQ0MWIiKS5tYXAoc3YpLGhnPW12KGxnKSxkZz1uZXcgQXJyYXkoMykuY29uY2F0KCJmMGYwZjBiZGJkYmQ2MzYzNjMiLCJmN2Y3ZjdjY2NjY2M5Njk2OTY1MjUyNTIiLCJmN2Y3ZjdjY2NjY2M5Njk2OTY2MzYzNjMyNTI1MjUiLCJmN2Y3ZjdkOWQ5ZDliZGJkYmQ5Njk2OTY2MzYzNjMyNTI1MjUiLCJmN2Y3ZjdkOWQ5ZDliZGJkYmQ5Njk2OTY3MzczNzM1MjUyNTIyNTI1MjUiLCJmZmZmZmZmMGYwZjBkOWQ5ZDliZGJkYmQ5Njk2OTY3MzczNzM1MjUyNTIyNTI1MjUiLCJmZmZmZmZmMGYwZjBkOWQ5ZDliZGJkYmQ5Njk2OTY3MzczNzM1MjUyNTIyNTI1MjUwMDAwMDAiKS5tYXAoc3YpLHBnPW12KGRnKSx2Zz1uZXcgQXJyYXkoMykuY29uY2F0KCJlZmVkZjViY2JkZGM3NTZiYjEiLCJmMmYwZjdjYmM5ZTI5ZTlhYzg2YTUxYTMiLCJmMmYwZjdjYmM5ZTI5ZTlhYzg3NTZiYjE1NDI3OGYiLCJmMmYwZjdkYWRhZWJiY2JkZGM5ZTlhYzg3NTZiYjE1NDI3OGYiLCJmMmYwZjdkYWRhZWJiY2JkZGM5ZTlhYzg4MDdkYmE2YTUxYTM0YTE0ODYiLCJmY2ZiZmRlZmVkZjVkYWRhZWJiY2JkZGM5ZTlhYzg4MDdkYmE2YTUxYTM0YTE0ODYiLCJmY2ZiZmRlZmVkZjVkYWRhZWJiY2JkZGM5ZTlhYzg4MDdkYmE2YTUxYTM1NDI3OGYzZjAwN2QiKS5tYXAoc3YpLGdnPW12KHZnKSx5Zz1uZXcgQXJyYXkoMykuY29uY2F0KCJmZWUwZDJmYzkyNzJkZTJkMjYiLCJmZWU1ZDlmY2FlOTFmYjZhNGFjYjE4MWQiLCJmZWU1ZDlmY2FlOTFmYjZhNGFkZTJkMjZhNTBmMTUiLCJmZWU1ZDlmY2JiYTFmYzkyNzJmYjZhNGFkZTJkMjZhNTBmMTUiLCJmZWU1ZDlmY2JiYTFmYzkyNzJmYjZhNGFlZjNiMmNjYjE4MWQ5OTAwMGQiLCJmZmY1ZjBmZWUwZDJmY2JiYTFmYzkyNzJmYjZhNGFlZjNiMmNjYjE4MWQ5OTAwMGQiLCJmZmY1ZjBmZWUwZDJmY2JiYTFmYzkyNzJmYjZhNGFlZjNiMmNjYjE4MWRhNTBmMTU2NzAwMGQiKS5tYXAoc3YpLF9nPW12KHlnKSxiZz1uZXcgQXJyYXkoMykuY29uY2F0KCJmZWU2Y2VmZGFlNmJlNjU1MGQiLCJmZWVkZGVmZGJlODVmZDhkM2NkOTQ3MDEiLCJmZWVkZGVmZGJlODVmZDhkM2NlNjU1MGRhNjM2MDMiLCJmZWVkZGVmZGQwYTJmZGFlNmJmZDhkM2NlNjU1MGRhNjM2MDMiLCJmZWVkZGVmZGQwYTJmZGFlNmJmZDhkM2NmMTY5MTNkOTQ4MDE4YzJkMDQiLCJmZmY1ZWJmZWU2Y2VmZGQwYTJmZGFlNmJmZDhkM2NmMTY5MTNkOTQ4MDE4YzJkMDQiLCJmZmY1ZWJmZWU2Y2VmZGQwYTJmZGFlNmJmZDhkM2NmMTY5MTNkOTQ4MDFhNjM2MDM3ZjI3MDQiKS5tYXAoc3YpLG1nPW12KGJnKSx4Zz1HZShLbigzMDAsLjUsMCksS24oLTI0MCwuNSwxKSksd2c9R2UoS24oLTEwMCwuNzUsLjM1KSxLbig4MCwxLjUsLjgpKSxNZz1HZShLbigyNjAsLjc1LC4zNSksS24oODAsMS41LC44KSksQWc9S24oKTt2YXIgVGc9Ym4oKSxOZz1NYXRoLlBJLzMsU2c9MipNYXRoLlBJLzM7ZnVuY3Rpb24gRWcodCl7dmFyIG49dC5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0W01hdGgubWF4KDAsTWF0aC5taW4obi0xLE1hdGguZmxvb3IoZSpuKSkpXX19dmFyIGtnPUVnKHN2KCI0NDAxNTQ0NDAyNTY0NTA0NTc0NTA1NTk0NjA3NWE0NjA4NWM0NjBhNWQ0NjBiNWU0NzBkNjA0NzBlNjE0NzEwNjM0NzExNjQ0NzEzNjU0ODE0Njc0ODE2Njg0ODE3Njk0ODE4NmE0ODFhNmM0ODFiNmQ0ODFjNmU0ODFkNmY0ODFmNzA0ODIwNzE0ODIxNzM0ODIzNzQ0ODI0NzU0ODI1NzY0ODI2Nzc0ODI4Nzg0ODI5Nzk0NzJhN2E0NzJjN2E0NzJkN2I0NzJlN2M0NzJmN2Q0NjMwN2U0NjMyN2U0NjMzN2Y0NjM0ODA0NTM1ODE0NTM3ODE0NTM4ODI0NDM5ODM0NDNhODM0NDNiODQ0MzNkODQ0MzNlODU0MjNmODU0MjQwODY0MjQxODY0MTQyODc0MTQ0ODc0MDQ1ODg0MDQ2ODgzZjQ3ODgzZjQ4ODkzZTQ5ODkzZTRhODkzZTRjOGEzZDRkOGEzZDRlOGEzYzRmOGEzYzUwOGIzYjUxOGIzYjUyOGIzYTUzOGIzYTU0OGMzOTU1OGMzOTU2OGMzODU4OGMzODU5OGMzNzVhOGMzNzViOGQzNjVjOGQzNjVkOGQzNTVlOGQzNTVmOGQzNDYwOGQzNDYxOGQzMzYyOGQzMzYzOGQzMjY0OGUzMjY1OGUzMTY2OGUzMTY3OGUzMTY4OGUzMDY5OGUzMDZhOGUyZjZiOGUyZjZjOGUyZTZkOGUyZTZlOGUyZTZmOGUyZDcwOGUyZDcxOGUyYzcxOGUyYzcyOGUyYzczOGUyYjc0OGUyYjc1OGUyYTc2OGUyYTc3OGUyYTc4OGUyOTc5OGUyOTdhOGUyOTdiOGUyODdjOGUyODdkOGUyNzdlOGUyNzdmOGUyNzgwOGUyNjgxOGUyNjgyOGUyNjgyOGUyNTgzOGUyNTg0OGUyNTg1OGUyNDg2OGUyNDg3OGUyMzg4OGUyMzg5OGUyMzhhOGQyMjhiOGQyMjhjOGQyMjhkOGQyMThlOGQyMThmOGQyMTkwOGQyMTkxOGMyMDkyOGMyMDkyOGMyMDkzOGMxZjk0OGMxZjk1OGIxZjk2OGIxZjk3OGIxZjk4OGIxZjk5OGExZjlhOGExZTliOGExZTljODkxZTlkODkxZjllODkxZjlmODgxZmEwODgxZmExODgxZmExODcxZmEyODcyMGEzODYyMGE0ODYyMWE1ODUyMWE2ODUyMmE3ODUyMmE4ODQyM2E5ODMyNGFhODMyNWFiODIyNWFjODIyNmFkODEyN2FkODEyOGFlODAyOWFmN2YyYWIwN2YyY2IxN2UyZGIyN2QyZWIzN2MyZmI0N2MzMWI1N2IzMmI2N2EzNGI2NzkzNWI3NzkzN2I4NzgzOGI5NzczYWJhNzYzYmJiNzUzZGJjNzQzZmJjNzM0MGJkNzI0MmJlNzE0NGJmNzA0NmMwNmY0OGMxNmU0YWMxNmQ0Y2MyNmM0ZWMzNmI1MGM0NmE1MmM1Njk1NGM1Njg1NmM2Njc1OGM3NjU1YWM4NjQ1Y2M4NjM1ZWM5NjI2MGNhNjA2M2NiNWY2NWNiNWU2N2NjNWM2OWNkNWI2Y2NkNWE2ZWNlNTg3MGNmNTc3M2QwNTY3NWQwNTQ3N2QxNTM3YWQxNTE3Y2QyNTA3ZmQzNGU4MWQzNGQ4NGQ0NGI4NmQ1NDk4OWQ1NDg4YmQ2NDY4ZWQ2NDU5MGQ3NDM5M2Q3NDE5NWQ4NDA5OGQ4M2U5YmQ5M2M5ZGQ5M2JhMGRhMzlhMmRhMzdhNWRiMzZhOGRiMzRhYWRjMzJhZGRjMzBiMGRkMmZiMmRkMmRiNWRlMmJiOGRlMjliYWRlMjhiZGRmMjZjMGRmMjVjMmRmMjNjNWUwMjFjOGUwMjBjYWUxMWZjZGUxMWRkMGUxMWNkMmUyMWJkNWUyMWFkOGUyMTlkYWUzMTlkZGUzMThkZmUzMThlMmU0MThlNWU0MTllN2U0MTllYWU1MWFlY2U1MWJlZmU1MWNmMWU1MWRmNGU2MWVmNmU2MjBmOGU2MjFmYmU3MjNmZGU3MjUiKSksQ2c9RWcoc3YoIjAwMDAwNDAxMDAwNTAxMDEwNjAxMDEwODAyMDEwOTAyMDIwYjAyMDIwZDAzMDMwZjAzMDMxMjA0MDQxNDA1MDQxNjA2MDUxODA2MDUxYTA3MDYxYzA4MDcxZTA5MDcyMDBhMDgyMjBiMDkyNDBjMDkyNjBkMGEyOTBlMGIyYjEwMGIyZDExMGMyZjEyMGQzMTEzMGQzNDE0MGUzNjE1MGUzODE2MGYzYjE4MGYzZDE5MTAzZjFhMTA0MjFjMTA0NDFkMTE0NzFlMTE0OTIwMTE0YjIxMTE0ZTIyMTE1MDI0MTI1MzI1MTI1NTI3MTI1ODI5MTE1YTJhMTE1YzJjMTE1ZjJkMTE2MTJmMTE2MzMxMTE2NTMzMTA2NzM0MTA2OTM2MTA2YjM4MTA2YzM5MGY2ZTNiMGY3MDNkMGY3MTNmMGY3MjQwMGY3NDQyMGY3NTQ0MGY3NjQ1MTA3NzQ3MTA3ODQ5MTA3ODRhMTA3OTRjMTE3YTRlMTE3YjRmMTI3YjUxMTI3YzUyMTM3YzU0MTM3ZDU2MTQ3ZDU3MTU3ZTU5MTU3ZTVhMTY3ZTVjMTY3ZjVkMTc3ZjVmMTg3ZjYwMTg4MDYyMTk4MDY0MWE4MDY1MWE4MDY3MWI4MDY4MWM4MTZhMWM4MTZiMWQ4MTZkMWQ4MTZlMWU4MTcwMWY4MTcyMWY4MTczMjA4MTc1MjE4MTc2MjE4MTc4MjI4MTc5MjI4MjdiMjM4MjdjMjM4MjdlMjQ4MjgwMjU4MjgxMjU4MTgzMjY4MTg0MjY4MTg2Mjc4MTg4Mjc4MTg5Mjg4MThiMjk4MThjMjk4MThlMmE4MTkwMmE4MTkxMmI4MTkzMmI4MDk0MmM4MDk2MmM4MDk4MmQ4MDk5MmQ4MDliMmU3ZjljMmU3ZjllMmY3ZmEwMmY3ZmExMzA3ZWEzMzA3ZWE1MzE3ZWE2MzE3ZGE4MzI3ZGFhMzM3ZGFiMzM3Y2FkMzQ3Y2FlMzQ3YmIwMzU3YmIyMzU3YmIzMzY3YWI1MzY3YWI3Mzc3OWI4Mzc3OWJhMzg3OGJjMzk3OGJkMzk3N2JmM2E3N2MwM2E3NmMyM2I3NWM0M2M3NWM1M2M3NGM3M2Q3M2M4M2U3M2NhM2U3MmNjM2Y3MWNkNDA3MWNmNDA3MGQwNDE2ZmQyNDI2ZmQzNDM2ZWQ1NDQ2ZGQ2NDU2Y2Q4NDU2Y2Q5NDY2YmRiNDc2YWRjNDg2OWRlNDk2OGRmNGE2OGUwNGM2N2UyNGQ2NmUzNGU2NWU0NGY2NGU1NTA2NGU3NTI2M2U4NTM2MmU5NTQ2MmVhNTY2MWViNTc2MGVjNTg2MGVkNWE1ZmVlNWI1ZWVmNWQ1ZWYwNWY1ZWYxNjA1ZGYyNjI1ZGYyNjQ1Y2YzNjU1Y2Y0Njc1Y2Y0Njk1Y2Y1NmI1Y2Y2NmM1Y2Y2NmU1Y2Y3NzA1Y2Y3NzI1Y2Y4NzQ1Y2Y4NzY1Y2Y5Nzg1ZGY5Nzk1ZGY5N2I1ZGZhN2Q1ZWZhN2Y1ZWZhODE1ZmZiODM1ZmZiODU2MGZiODc2MWZjODk2MWZjOGE2MmZjOGM2M2ZjOGU2NGZjOTA2NWZkOTI2NmZkOTQ2N2ZkOTY2OGZkOTg2OWZkOWE2YWZkOWI2YmZlOWQ2Y2ZlOWY2ZGZlYTE2ZWZlYTM2ZmZlYTU3MWZlYTc3MmZlYTk3M2ZlYWE3NGZlYWM3NmZlYWU3N2ZlYjA3OGZlYjI3YWZlYjQ3YmZlYjY3Y2ZlYjc3ZWZlYjk3ZmZlYmI4MWZlYmQ4MmZlYmY4NGZlYzE4NWZlYzI4N2ZlYzQ4OGZlYzY4YWZlYzg4Y2ZlY2E4ZGZlY2M4ZmZlY2Q5MGZlY2Y5MmZlZDE5NGZlZDM5NWZlZDU5N2ZlZDc5OWZlZDg5YWZkZGE5Y2ZkZGM5ZWZkZGVhMGZkZTBhMWZkZTJhM2ZkZTNhNWZkZTVhN2ZkZTdhOWZkZTlhYWZkZWJhY2ZjZWNhZWZjZWViMGZjZjBiMmZjZjJiNGZjZjRiNmZjZjZiOGZjZjdiOWZjZjliYmZjZmJiZGZjZmRiZiIpKSxQZz1FZyhzdigiMDAwMDA0MDEwMDA1MDEwMTA2MDEwMTA4MDIwMTBhMDIwMjBjMDIwMjBlMDMwMjEwMDQwMzEyMDQwMzE0MDUwNDE3MDYwNDE5MDcwNTFiMDgwNTFkMDkwNjFmMGEwNzIyMGIwNzI0MGMwODI2MGQwODI5MGUwOTJiMTAwOTJkMTEwYTMwMTIwYTMyMTQwYjM0MTUwYjM3MTYwYjM5MTgwYzNjMTkwYzNlMWIwYzQxMWMwYzQzMWUwYzQ1MWYwYzQ4MjEwYzRhMjMwYzRjMjQwYzRmMjYwYzUxMjgwYjUzMjkwYjU1MmIwYjU3MmQwYjU5MmYwYTViMzEwYTVjMzIwYTVlMzQwYTVmMzYwOTYxMzgwOTYyMzkwOTYzM2IwOTY0M2QwOTY1M2UwOTY2NDAwYTY3NDIwYTY4NDQwYTY4NDUwYTY5NDcwYjZhNDkwYjZhNGEwYzZiNGMwYzZiNGQwZDZjNGYwZDZjNTEwZTZjNTIwZTZkNTQwZjZkNTUwZjZkNTcxMDZlNTkxMDZlNWExMTZlNWMxMjZlNWQxMjZlNWYxMzZlNjExMzZlNjIxNDZlNjQxNTZlNjUxNTZlNjcxNjZlNjkxNjZlNmExNzZlNmMxODZlNmQxODZlNmYxOTZlNzExOTZlNzIxYTZlNzQxYTZlNzUxYjZlNzcxYzZkNzgxYzZkN2ExZDZkN2MxZDZkN2QxZTZkN2YxZTZjODAxZjZjODIyMDZjODQyMDZiODUyMTZiODcyMTZiODgyMjZhOGEyMjZhOGMyMzY5OGQyMzY5OGYyNDY5OTAyNTY4OTIyNTY4OTMyNjY3OTUyNjY3OTcyNzY2OTgyNzY2OWEyODY1OWIyOTY0OWQyOTY0OWYyYTYzYTAyYTYzYTIyYjYyYTMyYzYxYTUyYzYwYTYyZDYwYTgyZTVmYTkyZTVlYWIyZjVlYWQzMDVkYWUzMDVjYjAzMTViYjEzMjVhYjMzMjVhYjQzMzU5YjYzNDU4YjczNTU3YjkzNTU2YmEzNjU1YmMzNzU0YmQzODUzYmYzOTUyYzAzYTUxYzEzYTUwYzMzYjRmYzQzYzRlYzYzZDRkYzczZTRjYzgzZjRiY2E0MDRhY2I0MTQ5Y2M0MjQ4Y2U0MzQ3Y2Y0NDQ2ZDA0NTQ1ZDI0NjQ0ZDM0NzQzZDQ0ODQyZDU0YTQxZDc0YjNmZDg0YzNlZDk0ZDNkZGE0ZTNjZGI1MDNiZGQ1MTNhZGU1MjM4ZGY1MzM3ZTA1NTM2ZTE1NjM1ZTI1NzM0ZTM1OTMzZTQ1YTMxZTU1YzMwZTY1ZDJmZTc1ZTJlZTg2MDJkZTk2MTJiZWE2MzJhZWI2NDI5ZWI2NjI4ZWM2NzI2ZWQ2OTI1ZWU2YTI0ZWY2YzIzZWY2ZTIxZjA2ZjIwZjE3MTFmZjE3MzFkZjI3NDFjZjM3NjFiZjM3ODE5ZjQ3OTE4ZjU3YjE3ZjU3ZDE1ZjY3ZTE0ZjY4MDEzZjc4MjEyZjc4NDEwZjg4NTBmZjg4NzBlZjg4OTBjZjk4YjBiZjk4YzBhZjk4ZTA5ZmE5MDA4ZmE5MjA3ZmE5NDA3ZmI5NjA2ZmI5NzA2ZmI5OTA2ZmI5YjA2ZmI5ZDA3ZmM5ZjA3ZmNhMTA4ZmNhMzA5ZmNhNTBhZmNhNjBjZmNhODBkZmNhYTBmZmNhYzExZmNhZTEyZmNiMDE0ZmNiMjE2ZmNiNDE4ZmJiNjFhZmJiODFkZmJiYTFmZmJiYzIxZmJiZTIzZmFjMDI2ZmFjMjI4ZmFjNDJhZmFjNjJkZjljNzJmZjljOTMyZjljYjM1ZjhjZDM3ZjhjZjNhZjdkMTNkZjdkMzQwZjZkNTQzZjZkNzQ2ZjVkOTQ5ZjVkYjRjZjRkZDRmZjRkZjUzZjRlMTU2ZjNlMzVhZjNlNTVkZjJlNjYxZjJlODY1ZjJlYTY5ZjFlYzZkZjFlZDcxZjFlZjc1ZjFmMTc5ZjJmMjdkZjJmNDgyZjNmNTg2ZjNmNjhhZjRmODhlZjVmOTkyZjZmYTk2ZjhmYjlhZjlmYzlkZmFmZGExZmNmZmE0IikpLHpnPUVnKHN2KCIwZDA4ODcxMDA3ODgxMzA3ODkxNjA3OGExOTA2OGMxYjA2OGQxZDA2OGUyMDA2OGYyMjA2OTAyNDA2OTEyNjA1OTEyODA1OTIyYTA1OTMyYzA1OTQyZTA1OTUyZjA1OTYzMTA1OTczMzA1OTczNTA0OTgzNzA0OTkzODA0OWEzYTA0OWEzYzA0OWIzZTA0OWMzZjA0OWM0MTA0OWQ0MzAzOWU0NDAzOWU0NjAzOWY0ODAzOWY0OTAzYTA0YjAzYTE0YzAyYTE0ZTAyYTI1MDAyYTI1MTAyYTM1MzAyYTM1NTAyYTQ1NjAxYTQ1ODAxYTQ1OTAxYTU1YjAxYTU1YzAxYTY1ZTAxYTY2MDAxYTY2MTAwYTc2MzAwYTc2NDAwYTc2NjAwYTc2NzAwYTg2OTAwYTg2YTAwYTg2YzAwYTg2ZTAwYTg2ZjAwYTg3MTAwYTg3MjAxYTg3NDAxYTg3NTAxYTg3NzAxYTg3ODAxYTg3YTAyYTg3YjAyYTg3ZDAzYTg3ZTAzYTg4MDA0YTg4MTA0YTc4MzA1YTc4NDA1YTc4NjA2YTY4NzA3YTY4ODA4YTY4YTA5YTU4YjBhYTU4ZDBiYTU4ZTBjYTQ4ZjBkYTQ5MTBlYTM5MjBmYTM5NDEwYTI5NTExYTE5NjEzYTE5ODE0YTA5OTE1OWY5YTE2OWY5YzE3OWU5ZDE4OWQ5ZTE5OWRhMDFhOWNhMTFiOWJhMjFkOWFhMzFlOWFhNTFmOTlhNjIwOThhNzIxOTdhODIyOTZhYTIzOTVhYjI0OTRhYzI2OTRhZDI3OTNhZTI4OTJiMDI5OTFiMTJhOTBiMjJiOGZiMzJjOGViNDJlOGRiNTJmOGNiNjMwOGJiNzMxOGFiODMyODliYTMzODhiYjM0ODhiYzM1ODdiZDM3ODZiZTM4ODViZjM5ODRjMDNhODNjMTNiODJjMjNjODFjMzNkODBjNDNlN2ZjNTQwN2VjNjQxN2RjNzQyN2NjODQzN2JjOTQ0N2FjYTQ1N2FjYjQ2NzljYzQ3NzhjYzQ5NzdjZDRhNzZjZTRiNzVjZjRjNzRkMDRkNzNkMTRlNzJkMjRmNzFkMzUxNzFkNDUyNzBkNTUzNmZkNTU0NmVkNjU1NmRkNzU2NmNkODU3NmJkOTU4NmFkYTVhNmFkYTViNjlkYjVjNjhkYzVkNjdkZDVlNjZkZTVmNjVkZTYxNjRkZjYyNjNlMDYzNjNlMTY0NjJlMjY1NjFlMjY2NjBlMzY4NWZlNDY5NWVlNTZhNWRlNTZiNWRlNjZjNWNlNzZlNWJlNzZmNWFlODcwNTllOTcxNThlOTcyNTdlYTc0NTdlYjc1NTZlYjc2NTVlYzc3NTRlZDc5NTNlZDdhNTJlZTdiNTFlZjdjNTFlZjdlNTBmMDdmNGZmMDgwNGVmMTgxNGRmMTgzNGNmMjg0NGJmMzg1NGJmMzg3NGFmNDg4NDlmNDg5NDhmNThiNDdmNThjNDZmNjhkNDVmNjhmNDRmNzkwNDRmNzkxNDNmNzkzNDJmODk0NDFmODk1NDBmOTk3M2ZmOTk4M2VmOTlhM2VmYTliM2RmYTljM2NmYTllM2JmYjlmM2FmYmExMzlmYmEyMzhmY2EzMzhmY2E1MzdmY2E2MzZmY2E4MzVmY2E5MzRmZGFiMzNmZGFjMzNmZGFlMzJmZGFmMzFmZGIxMzBmZGIyMmZmZGI0MmZmZGI1MmVmZWI3MmRmZWI4MmNmZWJhMmNmZWJiMmJmZWJkMmFmZWJlMmFmZWMwMjlmZGMyMjlmZGMzMjhmZGM1MjdmZGM2MjdmZGM4MjdmZGNhMjZmZGNiMjZmY2NkMjVmY2NlMjVmY2QwMjVmY2QyMjVmYmQzMjRmYmQ1MjRmYmQ3MjRmYWQ4MjRmYWRhMjRmOWRjMjRmOWRkMjVmOGRmMjVmOGUxMjVmN2UyMjVmN2U0MjVmNmU2MjZmNmU4MjZmNWU5MjZmNWViMjdmNGVkMjdmM2VlMjdmM2YwMjdmMmYyMjdmMWY0MjZmMWY1MjVmMGY3MjRmMGY5MjEiKSk7ZnVuY3Rpb24gUmcodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fXZhciBMZz1NYXRoLmFicyxEZz1NYXRoLmF0YW4yLFVnPU1hdGguY29zLHFnPU1hdGgubWF4LE9nPU1hdGgubWluLFlnPU1hdGguc2luLEJnPU1hdGguc3FydCxGZz0xZS0xMixJZz1NYXRoLlBJLEhnPUlnLzIsamc9MipJZztmdW5jdGlvbiBYZyh0KXtyZXR1cm4gdD49MT9IZzp0PD0tMT8tSGc6TWF0aC5hc2luKHQpfWZ1bmN0aW9uIEdnKHQpe3JldHVybiB0LmlubmVyUmFkaXVzfWZ1bmN0aW9uIFZnKHQpe3JldHVybiB0Lm91dGVyUmFkaXVzfWZ1bmN0aW9uICRnKHQpe3JldHVybiB0LnN0YXJ0QW5nbGV9ZnVuY3Rpb24gV2codCl7cmV0dXJuIHQuZW5kQW5nbGV9ZnVuY3Rpb24gWmcodCl7cmV0dXJuIHQmJnQucGFkQW5nbGV9ZnVuY3Rpb24gUWcodCxuLGUscixpLG8sYSl7dmFyIHU9dC1lLGY9bi1yLGM9KGE/bzotbykvQmcodSp1K2YqZikscz1jKmYsbD0tYyp1LGg9dCtzLGQ9bitsLHA9ZStzLHY9citsLGc9KGgrcCkvMix5PShkK3YpLzIsXz1wLWgsYj12LWQsbT1fKl8rYipiLHg9aS1vLHc9aCp2LXAqZCxNPShiPDA/LTE6MSkqQmcocWcoMCx4KngqbS13KncpKSxBPSh3KmItXypNKS9tLFQ9KC13Kl8tYipNKS9tLE49KHcqYitfKk0pL20sUz0oLXcqXytiKk0pL20sRT1BLWcsaz1ULXksQz1OLWcsUD1TLXk7cmV0dXJuIEUqRStrKms+QypDK1AqUCYmKEE9TixUPVMpLHtjeDpBLGN5OlQseDAxOi1zLHkwMTotbCx4MTE6QSooaS94LTEpLHkxMTpUKihpL3gtMSl9fWZ1bmN0aW9uIEpnKHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiBLZyh0KXtyZXR1cm4gbmV3IEpnKHQpfWZ1bmN0aW9uIHR5KHQpe3JldHVybiB0WzBdfWZ1bmN0aW9uIG55KHQpe3JldHVybiB0WzFdfWZ1bmN0aW9uIGV5KCl7dmFyIHQ9dHksbj1ueSxlPVJnKCEwKSxyPW51bGwsaT1LZyxvPW51bGw7ZnVuY3Rpb24gYShhKXt2YXIgdSxmLGMscz1hLmxlbmd0aCxsPSExO2ZvcihudWxsPT1yJiYobz1pKGM9R2koKSkpLHU9MDt1PD1zOysrdSkhKHU8cyYmZShmPWFbdV0sdSxhKSk9PT1sJiYoKGw9IWwpP28ubGluZVN0YXJ0KCk6by5saW5lRW5kKCkpLGwmJm8ucG9pbnQoK3QoZix1LGEpLCtuKGYsdSxhKSk7aWYoYylyZXR1cm4gbz1udWxsLGMrIiJ8fG51bGx9cmV0dXJuIGEueD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uOlJnKCtuKSxhKTp0fSxhLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpSZygrdCksYSk6bn0sYS5kZWZpbmVkPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6UmcoISF0KSxhKTplfSxhLmN1cnZlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXQsbnVsbCE9ciYmKG89aShyKSksYSk6aX0sYS5jb250ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhudWxsPT10P3I9bz1udWxsOm89aShyPXQpLGEpOnJ9LGF9ZnVuY3Rpb24gcnkoKXt2YXIgdD10eSxuPW51bGwsZT1SZygwKSxyPW55LGk9UmcoITApLG89bnVsbCxhPUtnLHU9bnVsbDtmdW5jdGlvbiBmKGYpe3ZhciBjLHMsbCxoLGQscD1mLmxlbmd0aCx2PSExLGc9bmV3IEFycmF5KHApLHk9bmV3IEFycmF5KHApO2ZvcihudWxsPT1vJiYodT1hKGQ9R2koKSkpLGM9MDtjPD1wOysrYyl7aWYoIShjPHAmJmkoaD1mW2NdLGMsZikpPT09dilpZih2PSF2KXM9Yyx1LmFyZWFTdGFydCgpLHUubGluZVN0YXJ0KCk7ZWxzZXtmb3IodS5saW5lRW5kKCksdS5saW5lU3RhcnQoKSxsPWMtMTtsPj1zOy0tbCl1LnBvaW50KGdbbF0seVtsXSk7dS5saW5lRW5kKCksdS5hcmVhRW5kKCl9diYmKGdbY109K3QoaCxjLGYpLHlbY109K2UoaCxjLGYpLHUucG9pbnQobj8rbihoLGMsZik6Z1tjXSxyPytyKGgsYyxmKTp5W2NdKSl9aWYoZClyZXR1cm4gdT1udWxsLGQrIiJ8fG51bGx9ZnVuY3Rpb24gYygpe3JldHVybiBleSgpLmRlZmluZWQoaSkuY3VydmUoYSkuY29udGV4dChvKX1yZXR1cm4gZi54PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6UmcoK2UpLG49bnVsbCxmKTp0fSxmLngwPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBuP246UmcoK24pLGYpOnR9LGYueDE9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49bnVsbD09dD9udWxsOiJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6UmcoK3QpLGYpOm59LGYueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OlJnKCt0KSxyPW51bGwsZik6ZX0sZi55MD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OlJnKCt0KSxmKTplfSxmLnkxPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPW51bGw9PXQ/bnVsbDoiZnVuY3Rpb24iPT10eXBlb2YgdD90OlJnKCt0KSxmKTpyfSxmLmxpbmVYMD1mLmxpbmVZMD1mdW5jdGlvbigpe3JldHVybiBjKCkueCh0KS55KGUpfSxmLmxpbmVZMT1mdW5jdGlvbigpe3JldHVybiBjKCkueCh0KS55KHIpfSxmLmxpbmVYMT1mdW5jdGlvbigpe3JldHVybiBjKCkueChuKS55KGUpfSxmLmRlZmluZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpSZyghIXQpLGYpOml9LGYuY3VydmU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9dCxudWxsIT1vJiYodT1hKG8pKSxmKTphfSxmLmNvbnRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG51bGw9PXQ/bz11PW51bGw6dT1hKG89dCksZik6b30sZn1mdW5jdGlvbiBpeSh0LG4pe3JldHVybiBuPHQ/LTE6bj50PzE6bj49dD8wOk5hTn1mdW5jdGlvbiBveSh0KXtyZXR1cm4gdH1KZy5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LG4pe3N3aXRjaCh0PSt0LG49K24sdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxuKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LG4pO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2RlZmF1bHQ6dGhpcy5fY29udGV4dC5saW5lVG8odCxuKX19fTt2YXIgYXk9ZnkoS2cpO2Z1bmN0aW9uIHV5KHQpe3RoaXMuX2N1cnZlPXR9ZnVuY3Rpb24gZnkodCl7ZnVuY3Rpb24gbihuKXtyZXR1cm4gbmV3IHV5KHQobikpfXJldHVybiBuLl9jdXJ2ZT10LG59ZnVuY3Rpb24gY3kodCl7dmFyIG49dC5jdXJ2ZTtyZXR1cm4gdC5hbmdsZT10LngsZGVsZXRlIHQueCx0LnJhZGl1cz10LnksZGVsZXRlIHQueSx0LmN1cnZlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP24oZnkodCkpOm4oKS5fY3VydmV9LHR9ZnVuY3Rpb24gc3koKXtyZXR1cm4gY3koZXkoKS5jdXJ2ZShheSkpfWZ1bmN0aW9uIGx5KCl7dmFyIHQ9cnkoKS5jdXJ2ZShheSksbj10LmN1cnZlLGU9dC5saW5lWDAscj10LmxpbmVYMSxpPXQubGluZVkwLG89dC5saW5lWTE7cmV0dXJuIHQuYW5nbGU9dC54LGRlbGV0ZSB0LngsdC5zdGFydEFuZ2xlPXQueDAsZGVsZXRlIHQueDAsdC5lbmRBbmdsZT10LngxLGRlbGV0ZSB0LngxLHQucmFkaXVzPXQueSxkZWxldGUgdC55LHQuaW5uZXJSYWRpdXM9dC55MCxkZWxldGUgdC55MCx0Lm91dGVyUmFkaXVzPXQueTEsZGVsZXRlIHQueTEsdC5saW5lU3RhcnRBbmdsZT1mdW5jdGlvbigpe3JldHVybiBjeShlKCkpfSxkZWxldGUgdC5saW5lWDAsdC5saW5lRW5kQW5nbGU9ZnVuY3Rpb24oKXtyZXR1cm4gY3kocigpKX0sZGVsZXRlIHQubGluZVgxLHQubGluZUlubmVyUmFkaXVzPWZ1bmN0aW9uKCl7cmV0dXJuIGN5KGkoKSl9LGRlbGV0ZSB0LmxpbmVZMCx0LmxpbmVPdXRlclJhZGl1cz1mdW5jdGlvbigpe3JldHVybiBjeShvKCkpfSxkZWxldGUgdC5saW5lWTEsdC5jdXJ2ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9uKGZ5KHQpKTpuKCkuX2N1cnZlfSx0fWZ1bmN0aW9uIGh5KHQsbil7cmV0dXJuWyhuPStuKSpNYXRoLmNvcyh0LT1NYXRoLlBJLzIpLG4qTWF0aC5zaW4odCldfXV5LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fY3VydmUuYXJlYVN0YXJ0KCl9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9jdXJ2ZS5hcmVhRW5kKCl9LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX2N1cnZlLmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dGhpcy5fY3VydmUubGluZUVuZCgpfSxwb2ludDpmdW5jdGlvbih0LG4pe3RoaXMuX2N1cnZlLnBvaW50KG4qTWF0aC5zaW4odCksbiotTWF0aC5jb3ModCkpfX07dmFyIGR5PUFycmF5LnByb3RvdHlwZS5zbGljZTtmdW5jdGlvbiBweSh0KXtyZXR1cm4gdC5zb3VyY2V9ZnVuY3Rpb24gdnkodCl7cmV0dXJuIHQudGFyZ2V0fWZ1bmN0aW9uIGd5KHQpe3ZhciBuPXB5LGU9dnkscj10eSxpPW55LG89bnVsbDtmdW5jdGlvbiBhKCl7dmFyIGEsdT1keS5jYWxsKGFyZ3VtZW50cyksZj1uLmFwcGx5KHRoaXMsdSksYz1lLmFwcGx5KHRoaXMsdSk7aWYob3x8KG89YT1HaSgpKSx0KG8sK3IuYXBwbHkodGhpcywodVswXT1mLHUpKSwraS5hcHBseSh0aGlzLHUpLCtyLmFwcGx5KHRoaXMsKHVbMF09Yyx1KSksK2kuYXBwbHkodGhpcyx1KSksYSlyZXR1cm4gbz1udWxsLGErIiJ8fG51bGx9cmV0dXJuIGEuc291cmNlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQsYSk6bn0sYS50YXJnZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCxhKTplfSxhLng9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpSZygrdCksYSk6cn0sYS55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6UmcoK3QpLGEpOml9LGEuY29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1udWxsPT10P251bGw6dCxhKTpvfSxhfWZ1bmN0aW9uIHl5KHQsbixlLHIsaSl7dC5tb3ZlVG8obixlKSx0LmJlemllckN1cnZlVG8obj0obityKS8yLGUsbixpLHIsaSl9ZnVuY3Rpb24gX3kodCxuLGUscixpKXt0Lm1vdmVUbyhuLGUpLHQuYmV6aWVyQ3VydmVUbyhuLGU9KGUraSkvMixyLGUscixpKX1mdW5jdGlvbiBieSh0LG4sZSxyLGkpe3ZhciBvPWh5KG4sZSksYT1oeShuLGU9KGUraSkvMiksdT1oeShyLGUpLGY9aHkocixpKTt0Lm1vdmVUbyhvWzBdLG9bMV0pLHQuYmV6aWVyQ3VydmVUbyhhWzBdLGFbMV0sdVswXSx1WzFdLGZbMF0sZlsxXSl9dmFyIG15PXtkcmF3OmZ1bmN0aW9uKHQsbil7dmFyIGU9TWF0aC5zcXJ0KG4vSWcpO3QubW92ZVRvKGUsMCksdC5hcmMoMCwwLGUsMCxqZyl9fSx4eT17ZHJhdzpmdW5jdGlvbih0LG4pe3ZhciBlPU1hdGguc3FydChuLzUpLzI7dC5tb3ZlVG8oLTMqZSwtZSksdC5saW5lVG8oLWUsLWUpLHQubGluZVRvKC1lLC0zKmUpLHQubGluZVRvKGUsLTMqZSksdC5saW5lVG8oZSwtZSksdC5saW5lVG8oMyplLC1lKSx0LmxpbmVUbygzKmUsZSksdC5saW5lVG8oZSxlKSx0LmxpbmVUbyhlLDMqZSksdC5saW5lVG8oLWUsMyplKSx0LmxpbmVUbygtZSxlKSx0LmxpbmVUbygtMyplLGUpLHQuY2xvc2VQYXRoKCl9fSx3eT1NYXRoLnNxcnQoMS8zKSxNeT0yKnd5LEF5PXtkcmF3OmZ1bmN0aW9uKHQsbil7dmFyIGU9TWF0aC5zcXJ0KG4vTXkpLHI9ZSp3eTt0Lm1vdmVUbygwLC1lKSx0LmxpbmVUbyhyLDApLHQubGluZVRvKDAsZSksdC5saW5lVG8oLXIsMCksdC5jbG9zZVBhdGgoKX19LFR5PU1hdGguc2luKElnLzEwKS9NYXRoLnNpbig3KklnLzEwKSxOeT1NYXRoLnNpbihqZy8xMCkqVHksU3k9LU1hdGguY29zKGpnLzEwKSpUeSxFeT17ZHJhdzpmdW5jdGlvbih0LG4pe3ZhciBlPU1hdGguc3FydCguODkwODEzMDkxNTI5Mjg1MipuKSxyPU55KmUsaT1TeSplO3QubW92ZVRvKDAsLWUpLHQubGluZVRvKHIsaSk7Zm9yKHZhciBvPTE7bzw1Oysrbyl7dmFyIGE9amcqby81LHU9TWF0aC5jb3MoYSksZj1NYXRoLnNpbihhKTt0LmxpbmVUbyhmKmUsLXUqZSksdC5saW5lVG8odSpyLWYqaSxmKnIrdSppKX10LmNsb3NlUGF0aCgpfX0sa3k9e2RyYXc6ZnVuY3Rpb24odCxuKXt2YXIgZT1NYXRoLnNxcnQobikscj0tZS8yO3QucmVjdChyLHIsZSxlKX19LEN5PU1hdGguc3FydCgzKSxQeT17ZHJhdzpmdW5jdGlvbih0LG4pe3ZhciBlPS1NYXRoLnNxcnQobi8oMypDeSkpO3QubW92ZVRvKDAsMiplKSx0LmxpbmVUbygtQ3kqZSwtZSksdC5saW5lVG8oQ3kqZSwtZSksdC5jbG9zZVBhdGgoKX19LHp5PU1hdGguc3FydCgzKS8yLFJ5PTEvTWF0aC5zcXJ0KDEyKSxMeT0zKihSeS8yKzEpLER5PXtkcmF3OmZ1bmN0aW9uKHQsbil7dmFyIGU9TWF0aC5zcXJ0KG4vTHkpLHI9ZS8yLGk9ZSpSeSxvPXIsYT1lKlJ5K2UsdT0tbyxmPWE7dC5tb3ZlVG8ocixpKSx0LmxpbmVUbyhvLGEpLHQubGluZVRvKHUsZiksdC5saW5lVG8oLS41KnItenkqaSx6eSpyKy0uNSppKSx0LmxpbmVUbygtLjUqby16eSphLHp5Km8rLS41KmEpLHQubGluZVRvKC0uNSp1LXp5KmYsenkqdSstLjUqZiksdC5saW5lVG8oLS41KnIrenkqaSwtLjUqaS16eSpyKSx0LmxpbmVUbygtLjUqbyt6eSphLC0uNSphLXp5Km8pLHQubGluZVRvKC0uNSp1K3p5KmYsLS41KmYtenkqdSksdC5jbG9zZVBhdGgoKX19LFV5PVtteSx4eSxBeSxreSxFeSxQeSxEeV07ZnVuY3Rpb24gcXkoKXt9ZnVuY3Rpb24gT3kodCxuLGUpe3QuX2NvbnRleHQuYmV6aWVyQ3VydmVUbygoMip0Ll94MCt0Ll94MSkvMywoMip0Ll95MCt0Ll95MSkvMywodC5feDArMip0Ll94MSkvMywodC5feTArMip0Ll95MSkvMywodC5feDArNCp0Ll94MStuKS82LCh0Ll95MCs0KnQuX3kxK2UpLzYpfWZ1bmN0aW9uIFl5KHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiBCeSh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gRnkodCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIEl5KHQsbil7dGhpcy5fYmFzaXM9bmV3IFl5KHQpLHRoaXMuX2JldGE9bn1ZeS5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl95MD10aGlzLl95MT1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAzOk95KHRoaXMsdGhpcy5feDEsdGhpcy5feTEpO2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94MSx0aGlzLl95MSl9KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LG4pe3N3aXRjaCh0PSt0LG49K24sdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxuKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LG4pO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX2NvbnRleHQubGluZVRvKCg1KnRoaXMuX3gwK3RoaXMuX3gxKS82LCg1KnRoaXMuX3kwK3RoaXMuX3kxKS82KTtkZWZhdWx0Ok95KHRoaXMsdCxuKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPW59fSxCeS5wcm90b3R5cGU9e2FyZWFTdGFydDpxeSxhcmVhRW5kOnF5LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3gzPXRoaXMuX3g0PXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPXRoaXMuX3kzPXRoaXMuX3k0PU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDE6dGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDIsdGhpcy5feTIpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWs7Y2FzZSAyOnRoaXMuX2NvbnRleHQubW92ZVRvKCh0aGlzLl94MisyKnRoaXMuX3gzKS8zLCh0aGlzLl95MisyKnRoaXMuX3kzKS8zKSx0aGlzLl9jb250ZXh0LmxpbmVUbygodGhpcy5feDMrMip0aGlzLl94MikvMywodGhpcy5feTMrMip0aGlzLl95MikvMyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVhaztjYXNlIDM6dGhpcy5wb2ludCh0aGlzLl94Mix0aGlzLl95MiksdGhpcy5wb2ludCh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5wb2ludCh0aGlzLl94NCx0aGlzLl95NCl9fSxwb2ludDpmdW5jdGlvbih0LG4pe3N3aXRjaCh0PSt0LG49K24sdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX3gyPXQsdGhpcy5feTI9bjticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9Mix0aGlzLl94Mz10LHRoaXMuX3kzPW47YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5feDQ9dCx0aGlzLl95ND1uLHRoaXMuX2NvbnRleHQubW92ZVRvKCh0aGlzLl94MCs0KnRoaXMuX3gxK3QpLzYsKHRoaXMuX3kwKzQqdGhpcy5feTErbikvNik7YnJlYWs7ZGVmYXVsdDpPeSh0aGlzLHQsbil9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT1ufX0sRnkucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feTA9dGhpcy5feTE9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjM9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsbil7c3dpdGNoKHQ9K3Qsbj0rbix0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTE7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTM7dmFyIGU9KHRoaXMuX3gwKzQqdGhpcy5feDErdCkvNixyPSh0aGlzLl95MCs0KnRoaXMuX3kxK24pLzY7dGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyhlLHIpOnRoaXMuX2NvbnRleHQubW92ZVRvKGUscik7YnJlYWs7Y2FzZSAzOnRoaXMuX3BvaW50PTQ7ZGVmYXVsdDpPeSh0aGlzLHQsbil9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT1ufX0sSXkucHJvdG90eXBlPXtsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94PVtdLHRoaXMuX3k9W10sdGhpcy5fYmFzaXMubGluZVN0YXJ0KCl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl94LG49dGhpcy5feSxlPXQubGVuZ3RoLTE7aWYoZT4wKWZvcih2YXIgcixpPXRbMF0sbz1uWzBdLGE9dFtlXS1pLHU9bltlXS1vLGY9LTE7KytmPD1lOylyPWYvZSx0aGlzLl9iYXNpcy5wb2ludCh0aGlzLl9iZXRhKnRbZl0rKDEtdGhpcy5fYmV0YSkqKGkrciphKSx0aGlzLl9iZXRhKm5bZl0rKDEtdGhpcy5fYmV0YSkqKG8rcip1KSk7dGhpcy5feD10aGlzLl95PW51bGwsdGhpcy5fYmFzaXMubGluZUVuZCgpfSxwb2ludDpmdW5jdGlvbih0LG4pe3RoaXMuX3gucHVzaCgrdCksdGhpcy5feS5wdXNoKCtuKX19O3ZhciBIeT1mdW5jdGlvbiB0KG4pe2Z1bmN0aW9uIGUodCl7cmV0dXJuIDE9PT1uP25ldyBZeSh0KTpuZXcgSXkodCxuKX1yZXR1cm4gZS5iZXRhPWZ1bmN0aW9uKG4pe3JldHVybiB0KCtuKX0sZX0oLjg1KTtmdW5jdGlvbiBqeSh0LG4sZSl7dC5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKHQuX3gxK3QuX2sqKHQuX3gyLXQuX3gwKSx0Ll95MSt0Ll9rKih0Ll95Mi10Ll95MCksdC5feDIrdC5fayoodC5feDEtbiksdC5feTIrdC5fayoodC5feTEtZSksdC5feDIsdC5feTIpfWZ1bmN0aW9uIFh5KHQsbil7dGhpcy5fY29udGV4dD10LHRoaXMuX2s9KDEtbikvNn1YeS5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6ankodGhpcyx0aGlzLl94MSx0aGlzLl95MSl9KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LG4pe3N3aXRjaCh0PSt0LG49K24sdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxuKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LG4pO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX3gxPXQsdGhpcy5feTE9bjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9MztkZWZhdWx0Omp5KHRoaXMsdCxuKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPW59fTt2YXIgR3k9ZnVuY3Rpb24gdChuKXtmdW5jdGlvbiBlKHQpe3JldHVybiBuZXcgWHkodCxuKX1yZXR1cm4gZS50ZW5zaW9uPWZ1bmN0aW9uKG4pe3JldHVybiB0KCtuKX0sZX0oMCk7ZnVuY3Rpb24gVnkodCxuKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5faz0oMS1uKS82fVZ5LnByb3RvdHlwZT17YXJlYVN0YXJ0OnF5LGFyZWFFbmQ6cXksbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feDM9dGhpcy5feDQ9dGhpcy5feDU9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9dGhpcy5feTM9dGhpcy5feTQ9dGhpcy5feTU9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVhaztjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWs7Y2FzZSAzOnRoaXMucG9pbnQodGhpcy5feDMsdGhpcy5feTMpLHRoaXMucG9pbnQodGhpcy5feDQsdGhpcy5feTQpLHRoaXMucG9pbnQodGhpcy5feDUsdGhpcy5feTUpfX0scG9pbnQ6ZnVuY3Rpb24odCxuKXtzd2l0Y2godD0rdCxuPStuLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl94Mz10LHRoaXMuX3kzPW47YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTIsdGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDQ9dCx0aGlzLl95ND1uKTticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl94NT10LHRoaXMuX3k1PW47YnJlYWs7ZGVmYXVsdDpqeSh0aGlzLHQsbil9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1ufX07dmFyICR5PWZ1bmN0aW9uIHQobil7ZnVuY3Rpb24gZSh0KXtyZXR1cm4gbmV3IFZ5KHQsbil9cmV0dXJuIGUudGVuc2lvbj1mdW5jdGlvbihuKXtyZXR1cm4gdCgrbil9LGV9KDApO2Z1bmN0aW9uIFd5KHQsbil7dGhpcy5fY29udGV4dD10LHRoaXMuX2s9KDEtbikvNn1XeS5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpeyh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMz09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxuKXtzd2l0Y2godD0rdCxuPStuLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Mix0aGlzLl95Mik7YnJlYWs7Y2FzZSAzOnRoaXMuX3BvaW50PTQ7ZGVmYXVsdDpqeSh0aGlzLHQsbil9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1ufX07dmFyIFp5PWZ1bmN0aW9uIHQobil7ZnVuY3Rpb24gZSh0KXtyZXR1cm4gbmV3IFd5KHQsbil9cmV0dXJuIGUudGVuc2lvbj1mdW5jdGlvbihuKXtyZXR1cm4gdCgrbil9LGV9KDApO2Z1bmN0aW9uIFF5KHQsbixlKXt2YXIgcj10Ll94MSxpPXQuX3kxLG89dC5feDIsYT10Ll95MjtpZih0Ll9sMDFfYT5GZyl7dmFyIHU9Mip0Ll9sMDFfMmErMyp0Ll9sMDFfYSp0Ll9sMTJfYSt0Ll9sMTJfMmEsZj0zKnQuX2wwMV9hKih0Ll9sMDFfYSt0Ll9sMTJfYSk7cj0ocip1LXQuX3gwKnQuX2wxMl8yYSt0Ll94Mip0Ll9sMDFfMmEpL2YsaT0oaSp1LXQuX3kwKnQuX2wxMl8yYSt0Ll95Mip0Ll9sMDFfMmEpL2Z9aWYodC5fbDIzX2E+Rmcpe3ZhciBjPTIqdC5fbDIzXzJhKzMqdC5fbDIzX2EqdC5fbDEyX2ErdC5fbDEyXzJhLHM9Myp0Ll9sMjNfYSoodC5fbDIzX2ErdC5fbDEyX2EpO289KG8qYyt0Ll94MSp0Ll9sMjNfMmEtbip0Ll9sMTJfMmEpL3MsYT0oYSpjK3QuX3kxKnQuX2wyM18yYS1lKnQuX2wxMl8yYSkvc310Ll9jb250ZXh0LmJlemllckN1cnZlVG8ocixpLG8sYSx0Ll94Mix0Ll95Mil9ZnVuY3Rpb24gSnkodCxuKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5fYWxwaGE9bn1KeS5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fbDAxX2E9dGhpcy5fbDEyX2E9dGhpcy5fbDIzX2E9dGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmE9dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6dGhpcy5wb2ludCh0aGlzLl94Mix0aGlzLl95Mil9KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LG4pe2lmKHQ9K3Qsbj0rbix0aGlzLl9wb2ludCl7dmFyIGU9dGhpcy5feDItdCxyPXRoaXMuX3kyLW47dGhpcy5fbDIzX2E9TWF0aC5zcXJ0KHRoaXMuX2wyM18yYT1NYXRoLnBvdyhlKmUrcipyLHRoaXMuX2FscGhhKSl9c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHQsbik6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxuKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9MztkZWZhdWx0OlF5KHRoaXMsdCxuKX10aGlzLl9sMDFfYT10aGlzLl9sMTJfYSx0aGlzLl9sMTJfYT10aGlzLl9sMjNfYSx0aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhLHRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmEsdGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1ufX07dmFyIEt5PWZ1bmN0aW9uIHQobil7ZnVuY3Rpb24gZSh0KXtyZXR1cm4gbj9uZXcgSnkodCxuKTpuZXcgWHkodCwwKX1yZXR1cm4gZS5hbHBoYT1mdW5jdGlvbihuKXtyZXR1cm4gdCgrbil9LGV9KC41KTtmdW5jdGlvbiB0Xyh0LG4pe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl9hbHBoYT1ufXRfLnByb3RvdHlwZT17YXJlYVN0YXJ0OnF5LGFyZWFFbmQ6cXksbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feDM9dGhpcy5feDQ9dGhpcy5feDU9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9dGhpcy5feTM9dGhpcy5feTQ9dGhpcy5feTU9TmFOLHRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hPXRoaXMuX2wyM19hPXRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhPXRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVhaztjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWs7Y2FzZSAzOnRoaXMucG9pbnQodGhpcy5feDMsdGhpcy5feTMpLHRoaXMucG9pbnQodGhpcy5feDQsdGhpcy5feTQpLHRoaXMucG9pbnQodGhpcy5feDUsdGhpcy5feTUpfX0scG9pbnQ6ZnVuY3Rpb24odCxuKXtpZih0PSt0LG49K24sdGhpcy5fcG9pbnQpe3ZhciBlPXRoaXMuX3gyLXQscj10aGlzLl95Mi1uO3RoaXMuX2wyM19hPU1hdGguc3FydCh0aGlzLl9sMjNfMmE9TWF0aC5wb3coZSplK3Iqcix0aGlzLl9hbHBoYSkpfXN3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5feDM9dCx0aGlzLl95Mz1uO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3g0PXQsdGhpcy5feTQ9bik7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5feDU9dCx0aGlzLl95NT1uO2JyZWFrO2RlZmF1bHQ6UXkodGhpcyx0LG4pfXRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hLHRoaXMuX2wxMl9hPXRoaXMuX2wyM19hLHRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmEsdGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYSx0aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPW59fTt2YXIgbl89ZnVuY3Rpb24gdChuKXtmdW5jdGlvbiBlKHQpe3JldHVybiBuP25ldyB0Xyh0LG4pOm5ldyBWeSh0LDApfXJldHVybiBlLmFscGhhPWZ1bmN0aW9uKG4pe3JldHVybiB0KCtuKX0sZX0oLjUpO2Z1bmN0aW9uIGVfKHQsbil7dGhpcy5fY29udGV4dD10LHRoaXMuX2FscGhhPW59ZV8ucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9TmFOLHRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hPXRoaXMuX2wyM19hPXRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhPXRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjM9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsbil7aWYodD0rdCxuPStuLHRoaXMuX3BvaW50KXt2YXIgZT10aGlzLl94Mi10LHI9dGhpcy5feTItbjt0aGlzLl9sMjNfYT1NYXRoLnNxcnQodGhpcy5fbDIzXzJhPU1hdGgucG93KGUqZStyKnIsdGhpcy5fYWxwaGEpKX1zd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpOnRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6dGhpcy5fcG9pbnQ9NDtkZWZhdWx0OlF5KHRoaXMsdCxuKX10aGlzLl9sMDFfYT10aGlzLl9sMTJfYSx0aGlzLl9sMTJfYT10aGlzLl9sMjNfYSx0aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhLHRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmEsdGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1ufX07dmFyIHJfPWZ1bmN0aW9uIHQobil7ZnVuY3Rpb24gZSh0KXtyZXR1cm4gbj9uZXcgZV8odCxuKTpuZXcgV3kodCwwKX1yZXR1cm4gZS5hbHBoYT1mdW5jdGlvbihuKXtyZXR1cm4gdCgrbil9LGV9KC41KTtmdW5jdGlvbiBpXyh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gb18odCl7cmV0dXJuIHQ8MD8tMToxfWZ1bmN0aW9uIGFfKHQsbixlKXt2YXIgcj10Ll94MS10Ll94MCxpPW4tdC5feDEsbz0odC5feTEtdC5feTApLyhyfHxpPDAmJi0wKSxhPShlLXQuX3kxKS8oaXx8cjwwJiYtMCksdT0obyppK2EqcikvKHIraSk7cmV0dXJuKG9fKG8pK29fKGEpKSpNYXRoLm1pbihNYXRoLmFicyhvKSxNYXRoLmFicyhhKSwuNSpNYXRoLmFicyh1KSl8fDB9ZnVuY3Rpb24gdV8odCxuKXt2YXIgZT10Ll94MS10Ll94MDtyZXR1cm4gZT8oMyoodC5feTEtdC5feTApL2UtbikvMjpufWZ1bmN0aW9uIGZfKHQsbixlKXt2YXIgcj10Ll94MCxpPXQuX3kwLG89dC5feDEsYT10Ll95MSx1PShvLXIpLzM7dC5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKHIrdSxpK3UqbixvLXUsYS11KmUsbyxhKX1mdW5jdGlvbiBjXyh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gc18odCl7dGhpcy5fY29udGV4dD1uZXcgbF8odCl9ZnVuY3Rpb24gbF8odCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIGhfKHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiBkXyh0KXt2YXIgbixlLHI9dC5sZW5ndGgtMSxpPW5ldyBBcnJheShyKSxvPW5ldyBBcnJheShyKSxhPW5ldyBBcnJheShyKTtmb3IoaVswXT0wLG9bMF09MixhWzBdPXRbMF0rMip0WzFdLG49MTtuPHItMTsrK24paVtuXT0xLG9bbl09NCxhW25dPTQqdFtuXSsyKnRbbisxXTtmb3IoaVtyLTFdPTIsb1tyLTFdPTcsYVtyLTFdPTgqdFtyLTFdK3Rbcl0sbj0xO248cjsrK24pZT1pW25dL29bbi0xXSxvW25dLT1lLGFbbl0tPWUqYVtuLTFdO2ZvcihpW3ItMV09YVtyLTFdL29bci0xXSxuPXItMjtuPj0wOy0tbilpW25dPShhW25dLWlbbisxXSkvb1tuXTtmb3Iob1tyLTFdPSh0W3JdK2lbci0xXSkvMixuPTA7bjxyLTE7KytuKW9bbl09Mip0W24rMV0taVtuKzFdO3JldHVybltpLG9dfWZ1bmN0aW9uIHBfKHQsbil7dGhpcy5fY29udGV4dD10LHRoaXMuX3Q9bn1mdW5jdGlvbiB2Xyh0LG4pe2lmKChpPXQubGVuZ3RoKT4xKWZvcih2YXIgZSxyLGksbz0xLGE9dFtuWzBdXSx1PWEubGVuZ3RoO288aTsrK28pZm9yKHI9YSxhPXRbbltvXV0sZT0wO2U8dTsrK2UpYVtlXVsxXSs9YVtlXVswXT1pc05hTihyW2VdWzFdKT9yW2VdWzBdOnJbZV1bMV19ZnVuY3Rpb24gZ18odCl7Zm9yKHZhciBuPXQubGVuZ3RoLGU9bmV3IEFycmF5KG4pOy0tbj49MDspZVtuXT1uO3JldHVybiBlfWZ1bmN0aW9uIHlfKHQsbil7cmV0dXJuIHRbbl19ZnVuY3Rpb24gX18odCl7dmFyIG49dC5tYXAoYl8pO3JldHVybiBnXyh0KS5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5bdF0tbltlXX0pfWZ1bmN0aW9uIGJfKHQpe2Zvcih2YXIgbixlPTAscj0tMSxpPXQubGVuZ3RoOysrcjxpOykobj0rdFtyXVsxXSkmJihlKz1uKTtyZXR1cm4gZX1mdW5jdGlvbiBtXyh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24geF8odCl7cmV0dXJuIHRbMF19ZnVuY3Rpb24gd18odCl7cmV0dXJuIHRbMV19ZnVuY3Rpb24gTV8oKXt0aGlzLl89bnVsbH1mdW5jdGlvbiBBXyh0KXt0LlU9dC5DPXQuTD10LlI9dC5QPXQuTj1udWxsfWZ1bmN0aW9uIFRfKHQsbil7dmFyIGU9bixyPW4uUixpPWUuVTtpP2kuTD09PWU/aS5MPXI6aS5SPXI6dC5fPXIsci5VPWksZS5VPXIsZS5SPXIuTCxlLlImJihlLlIuVT1lKSxyLkw9ZX1mdW5jdGlvbiBOXyh0LG4pe3ZhciBlPW4scj1uLkwsaT1lLlU7aT9pLkw9PT1lP2kuTD1yOmkuUj1yOnQuXz1yLHIuVT1pLGUuVT1yLGUuTD1yLlIsZS5MJiYoZS5MLlU9ZSksci5SPWV9ZnVuY3Rpb24gU18odCl7Zm9yKDt0Lkw7KXQ9dC5MO3JldHVybiB0fWZ1bmN0aW9uIEVfKHQsbixlLHIpe3ZhciBpPVtudWxsLG51bGxdLG89Sl8ucHVzaChpKS0xO3JldHVybiBpLmxlZnQ9dCxpLnJpZ2h0PW4sZSYmQ18oaSx0LG4sZSksciYmQ18oaSxuLHQsciksWl9bdC5pbmRleF0uaGFsZmVkZ2VzLnB1c2gobyksWl9bbi5pbmRleF0uaGFsZmVkZ2VzLnB1c2gobyksaX1mdW5jdGlvbiBrXyh0LG4sZSl7dmFyIHI9W24sZV07cmV0dXJuIHIubGVmdD10LHJ9ZnVuY3Rpb24gQ18odCxuLGUscil7dFswXXx8dFsxXT90LmxlZnQ9PT1lP3RbMV09cjp0WzBdPXI6KHRbMF09cix0LmxlZnQ9bix0LnJpZ2h0PWUpfWZ1bmN0aW9uIFBfKHQsbixlLHIsaSl7dmFyIG8sYT10WzBdLHU9dFsxXSxmPWFbMF0sYz1hWzFdLHM9MCxsPTEsaD11WzBdLWYsZD11WzFdLWM7aWYobz1uLWYsaHx8IShvPjApKXtpZihvLz1oLGg8MCl7aWYobzxzKXJldHVybjtvPGwmJihsPW8pfWVsc2UgaWYoaD4wKXtpZihvPmwpcmV0dXJuO28+cyYmKHM9byl9aWYobz1yLWYsaHx8IShvPDApKXtpZihvLz1oLGg8MCl7aWYobz5sKXJldHVybjtvPnMmJihzPW8pfWVsc2UgaWYoaD4wKXtpZihvPHMpcmV0dXJuO288bCYmKGw9byl9aWYobz1lLWMsZHx8IShvPjApKXtpZihvLz1kLGQ8MCl7aWYobzxzKXJldHVybjtvPGwmJihsPW8pfWVsc2UgaWYoZD4wKXtpZihvPmwpcmV0dXJuO28+cyYmKHM9byl9aWYobz1pLWMsZHx8IShvPDApKXtpZihvLz1kLGQ8MCl7aWYobz5sKXJldHVybjtvPnMmJihzPW8pfWVsc2UgaWYoZD4wKXtpZihvPHMpcmV0dXJuO288bCYmKGw9byl9cmV0dXJuIShzPjB8fGw8MSl8fChzPjAmJih0WzBdPVtmK3MqaCxjK3MqZF0pLGw8MSYmKHRbMV09W2YrbCpoLGMrbCpkXSksITApfX19fX1mdW5jdGlvbiB6Xyh0LG4sZSxyLGkpe3ZhciBvPXRbMV07aWYobylyZXR1cm4hMDt2YXIgYSx1LGY9dFswXSxjPXQubGVmdCxzPXQucmlnaHQsbD1jWzBdLGg9Y1sxXSxkPXNbMF0scD1zWzFdLHY9KGwrZCkvMixnPShoK3ApLzI7aWYocD09PWgpe2lmKHY8bnx8dj49cilyZXR1cm47aWYobD5kKXtpZihmKXtpZihmWzFdPj1pKXJldHVybn1lbHNlIGY9W3YsZV07bz1bdixpXX1lbHNle2lmKGYpe2lmKGZbMV08ZSlyZXR1cm59ZWxzZSBmPVt2LGldO289W3YsZV19fWVsc2UgaWYodT1nLShhPShsLWQpLyhwLWgpKSp2LGE8LTF8fGE+MSlpZihsPmQpe2lmKGYpe2lmKGZbMV0+PWkpcmV0dXJufWVsc2UgZj1bKGUtdSkvYSxlXTtvPVsoaS11KS9hLGldfWVsc2V7aWYoZil7aWYoZlsxXTxlKXJldHVybn1lbHNlIGY9WyhpLXUpL2EsaV07bz1bKGUtdSkvYSxlXX1lbHNlIGlmKGg8cCl7aWYoZil7aWYoZlswXT49cilyZXR1cm59ZWxzZSBmPVtuLGEqbit1XTtvPVtyLGEqcit1XX1lbHNle2lmKGYpe2lmKGZbMF08bilyZXR1cm59ZWxzZSBmPVtyLGEqcit1XTtvPVtuLGEqbit1XX1yZXR1cm4gdFswXT1mLHRbMV09bywhMH1mdW5jdGlvbiBSXyh0LG4pe3ZhciBlPXQuc2l0ZSxyPW4ubGVmdCxpPW4ucmlnaHQ7cmV0dXJuIGU9PT1pJiYoaT1yLHI9ZSksaT9NYXRoLmF0YW4yKGlbMV0tclsxXSxpWzBdLXJbMF0pOihlPT09cj8ocj1uWzFdLGk9blswXSk6KHI9blswXSxpPW5bMV0pLE1hdGguYXRhbjIoclswXS1pWzBdLGlbMV0tclsxXSkpfWZ1bmN0aW9uIExfKHQsbil7cmV0dXJuIG5bKyhuLmxlZnQhPT10LnNpdGUpXX1mdW5jdGlvbiBEXyh0LG4pe3JldHVybiBuWysobi5sZWZ0PT09dC5zaXRlKV19aV8ucHJvdG90eXBlPXthcmVhU3RhcnQ6cXksYXJlYUVuZDpxeSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCl9LHBvaW50OmZ1bmN0aW9uKHQsbil7dD0rdCxuPStuLHRoaXMuX3BvaW50P3RoaXMuX2NvbnRleHQubGluZVRvKHQsbik6KHRoaXMuX3BvaW50PTEsdGhpcy5fY29udGV4dC5tb3ZlVG8odCxuKSl9fSxjXy5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl95MD10aGlzLl95MT10aGlzLl90MD1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gxLHRoaXMuX3kxKTticmVhaztjYXNlIDM6Zl8odGhpcyx0aGlzLl90MCx1Xyh0aGlzLHRoaXMuX3QwKSl9KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LG4pe3ZhciBlPU5hTjtpZihuPStuLCh0PSt0KSE9PXRoaXMuX3gxfHxuIT09dGhpcy5feTEpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LG4pOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsbik7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsZl8odGhpcyx1Xyh0aGlzLGU9YV8odGhpcyx0LG4pKSxlKTticmVhaztkZWZhdWx0OmZfKHRoaXMsdGhpcy5fdDAsZT1hXyh0aGlzLHQsbikpfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9bix0aGlzLl90MD1lfX19LChzXy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShjXy5wcm90b3R5cGUpKS5wb2ludD1mdW5jdGlvbih0LG4pe2NfLnByb3RvdHlwZS5wb2ludC5jYWxsKHRoaXMsbix0KX0sbF8ucHJvdG90eXBlPXttb3ZlVG86ZnVuY3Rpb24odCxuKXt0aGlzLl9jb250ZXh0Lm1vdmVUbyhuLHQpfSxjbG9zZVBhdGg6ZnVuY3Rpb24oKXt0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpfSxsaW5lVG86ZnVuY3Rpb24odCxuKXt0aGlzLl9jb250ZXh0LmxpbmVUbyhuLHQpfSxiZXppZXJDdXJ2ZVRvOmZ1bmN0aW9uKHQsbixlLHIsaSxvKXt0aGlzLl9jb250ZXh0LmJlemllckN1cnZlVG8obix0LHIsZSxvLGkpfX0saF8ucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feD1bXSx0aGlzLl95PVtdfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5feCxuPXRoaXMuX3ksZT10Lmxlbmd0aDtpZihlKWlmKHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odFswXSxuWzBdKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0WzBdLG5bMF0pLDI9PT1lKXRoaXMuX2NvbnRleHQubGluZVRvKHRbMV0sblsxXSk7ZWxzZSBmb3IodmFyIHI9ZF8odCksaT1kXyhuKSxvPTAsYT0xO2E8ZTsrK28sKythKXRoaXMuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyhyWzBdW29dLGlbMF1bb10sclsxXVtvXSxpWzFdW29dLHRbYV0sblthXSk7KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09ZSkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmUsdGhpcy5feD10aGlzLl95PW51bGx9LHBvaW50OmZ1bmN0aW9uKHQsbil7dGhpcy5feC5wdXNoKCt0KSx0aGlzLl95LnB1c2goK24pfX0scF8ucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feD10aGlzLl95PU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7MDx0aGlzLl90JiZ0aGlzLl90PDEmJjI9PT10aGlzLl9wb2ludCYmdGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feCx0aGlzLl95KSwodGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT49MCYmKHRoaXMuX3Q9MS10aGlzLl90LHRoaXMuX2xpbmU9MS10aGlzLl9saW5lKX0scG9pbnQ6ZnVuY3Rpb24odCxuKXtzd2l0Y2godD0rdCxuPStuLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHQsbik6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxuKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjtkZWZhdWx0OmlmKHRoaXMuX3Q8PTApdGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feCxuKSx0aGlzLl9jb250ZXh0LmxpbmVUbyh0LG4pO2Vsc2V7dmFyIGU9dGhpcy5feCooMS10aGlzLl90KSt0KnRoaXMuX3Q7dGhpcy5fY29udGV4dC5saW5lVG8oZSx0aGlzLl95KSx0aGlzLl9jb250ZXh0LmxpbmVUbyhlLG4pfX10aGlzLl94PXQsdGhpcy5feT1ufX0sTV8ucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpNXyxpbnNlcnQ6ZnVuY3Rpb24odCxuKXt2YXIgZSxyLGk7aWYodCl7aWYobi5QPXQsbi5OPXQuTix0Lk4mJih0Lk4uUD1uKSx0Lk49bix0LlIpe2Zvcih0PXQuUjt0Lkw7KXQ9dC5MO3QuTD1ufWVsc2UgdC5SPW47ZT10fWVsc2UgdGhpcy5fPyh0PVNfKHRoaXMuXyksbi5QPW51bGwsbi5OPXQsdC5QPXQuTD1uLGU9dCk6KG4uUD1uLk49bnVsbCx0aGlzLl89bixlPW51bGwpO2ZvcihuLkw9bi5SPW51bGwsbi5VPWUsbi5DPSEwLHQ9bjtlJiZlLkM7KWU9PT0ocj1lLlUpLkw/KGk9ci5SKSYmaS5DPyhlLkM9aS5DPSExLHIuQz0hMCx0PXIpOih0PT09ZS5SJiYoVF8odGhpcyxlKSxlPSh0PWUpLlUpLGUuQz0hMSxyLkM9ITAsTl8odGhpcyxyKSk6KGk9ci5MKSYmaS5DPyhlLkM9aS5DPSExLHIuQz0hMCx0PXIpOih0PT09ZS5MJiYoTl8odGhpcyxlKSxlPSh0PWUpLlUpLGUuQz0hMSxyLkM9ITAsVF8odGhpcyxyKSksZT10LlU7dGhpcy5fLkM9ITF9LHJlbW92ZTpmdW5jdGlvbih0KXt0Lk4mJih0Lk4uUD10LlApLHQuUCYmKHQuUC5OPXQuTiksdC5OPXQuUD1udWxsO3ZhciBuLGUscixpPXQuVSxvPXQuTCxhPXQuUjtpZihlPW8/YT9TXyhhKTpvOmEsaT9pLkw9PT10P2kuTD1lOmkuUj1lOnRoaXMuXz1lLG8mJmE/KHI9ZS5DLGUuQz10LkMsZS5MPW8sby5VPWUsZSE9PWE/KGk9ZS5VLGUuVT10LlUsdD1lLlIsaS5MPXQsZS5SPWEsYS5VPWUpOihlLlU9aSxpPWUsdD1lLlIpKToocj10LkMsdD1lKSx0JiYodC5VPWkpLCFyKWlmKHQmJnQuQyl0LkM9ITE7ZWxzZXtkb3tpZih0PT09dGhpcy5fKWJyZWFrO2lmKHQ9PT1pLkwpe2lmKChuPWkuUikuQyYmKG4uQz0hMSxpLkM9ITAsVF8odGhpcyxpKSxuPWkuUiksbi5MJiZuLkwuQ3x8bi5SJiZuLlIuQyl7bi5SJiZuLlIuQ3x8KG4uTC5DPSExLG4uQz0hMCxOXyh0aGlzLG4pLG49aS5SKSxuLkM9aS5DLGkuQz1uLlIuQz0hMSxUXyh0aGlzLGkpLHQ9dGhpcy5fO2JyZWFrfX1lbHNlIGlmKChuPWkuTCkuQyYmKG4uQz0hMSxpLkM9ITAsTl8odGhpcyxpKSxuPWkuTCksbi5MJiZuLkwuQ3x8bi5SJiZuLlIuQyl7bi5MJiZuLkwuQ3x8KG4uUi5DPSExLG4uQz0hMCxUXyh0aGlzLG4pLG49aS5MKSxuLkM9aS5DLGkuQz1uLkwuQz0hMSxOXyh0aGlzLGkpLHQ9dGhpcy5fO2JyZWFrfW4uQz0hMCx0PWksaT1pLlV9d2hpbGUoIXQuQyk7dCYmKHQuQz0hMSl9fX07dmFyIFVfLHFfPVtdO2Z1bmN0aW9uIE9fKCl7QV8odGhpcyksdGhpcy54PXRoaXMueT10aGlzLmFyYz10aGlzLnNpdGU9dGhpcy5jeT1udWxsfWZ1bmN0aW9uIFlfKHQpe3ZhciBuPXQuUCxlPXQuTjtpZihuJiZlKXt2YXIgcj1uLnNpdGUsaT10LnNpdGUsbz1lLnNpdGU7aWYociE9PW8pe3ZhciBhPWlbMF0sdT1pWzFdLGY9clswXS1hLGM9clsxXS11LHM9b1swXS1hLGw9b1sxXS11LGg9MiooZipsLWMqcyk7aWYoIShoPj0tdGIpKXt2YXIgZD1mKmYrYypjLHA9cypzK2wqbCx2PShsKmQtYypwKS9oLGc9KGYqcC1zKmQpL2gseT1xXy5wb3AoKXx8bmV3IE9fO3kuYXJjPXQseS5zaXRlPWkseS54PXYrYSx5Lnk9KHkuY3k9Zyt1KStNYXRoLnNxcnQodip2K2cqZyksdC5jaXJjbGU9eTtmb3IodmFyIF89bnVsbCxiPVFfLl87YjspaWYoeS55PGIueXx8eS55PT09Yi55JiZ5Lng8PWIueCl7aWYoIWIuTCl7Xz1iLlA7YnJlYWt9Yj1iLkx9ZWxzZXtpZighYi5SKXtfPWI7YnJlYWt9Yj1iLlJ9UV8uaW5zZXJ0KF8seSksX3x8KFVfPXkpfX19fWZ1bmN0aW9uIEJfKHQpe3ZhciBuPXQuY2lyY2xlO24mJihuLlB8fChVXz1uLk4pLFFfLnJlbW92ZShuKSxxXy5wdXNoKG4pLEFfKG4pLHQuY2lyY2xlPW51bGwpfXZhciBGXz1bXTtmdW5jdGlvbiBJXygpe0FfKHRoaXMpLHRoaXMuZWRnZT10aGlzLnNpdGU9dGhpcy5jaXJjbGU9bnVsbH1mdW5jdGlvbiBIXyh0KXt2YXIgbj1GXy5wb3AoKXx8bmV3IElfO3JldHVybiBuLnNpdGU9dCxufWZ1bmN0aW9uIGpfKHQpe0JfKHQpLFdfLnJlbW92ZSh0KSxGXy5wdXNoKHQpLEFfKHQpfWZ1bmN0aW9uIFhfKHQpe3ZhciBuPXQuY2lyY2xlLGU9bi54LHI9bi5jeSxpPVtlLHJdLG89dC5QLGE9dC5OLHU9W3RdO2pfKHQpO2Zvcih2YXIgZj1vO2YuY2lyY2xlJiZNYXRoLmFicyhlLWYuY2lyY2xlLngpPEtfJiZNYXRoLmFicyhyLWYuY2lyY2xlLmN5KTxLXzspbz1mLlAsdS51bnNoaWZ0KGYpLGpfKGYpLGY9bzt1LnVuc2hpZnQoZiksQl8oZik7Zm9yKHZhciBjPWE7Yy5jaXJjbGUmJk1hdGguYWJzKGUtYy5jaXJjbGUueCk8S18mJk1hdGguYWJzKHItYy5jaXJjbGUuY3kpPEtfOylhPWMuTix1LnB1c2goYyksal8oYyksYz1hO3UucHVzaChjKSxCXyhjKTt2YXIgcyxsPXUubGVuZ3RoO2ZvcihzPTE7czxsOysrcyljPXVbc10sZj11W3MtMV0sQ18oYy5lZGdlLGYuc2l0ZSxjLnNpdGUsaSk7Zj11WzBdLChjPXVbbC0xXSkuZWRnZT1FXyhmLnNpdGUsYy5zaXRlLG51bGwsaSksWV8oZiksWV8oYyl9ZnVuY3Rpb24gR18odCl7Zm9yKHZhciBuLGUscixpLG89dFswXSxhPXRbMV0sdT1XXy5fO3U7KWlmKChyPVZfKHUsYSktbyk+S18pdT11Lkw7ZWxzZXtpZighKChpPW8tJF8odSxhKSk+S18pKXtyPi1LXz8obj11LlAsZT11KTppPi1LXz8obj11LGU9dS5OKTpuPWU9dTticmVha31pZighdS5SKXtuPXU7YnJlYWt9dT11LlJ9IWZ1bmN0aW9uKHQpe1pfW3QuaW5kZXhdPXtzaXRlOnQsaGFsZmVkZ2VzOltdfX0odCk7dmFyIGY9SF8odCk7aWYoV18uaW5zZXJ0KG4sZiksbnx8ZSl7aWYobj09PWUpcmV0dXJuIEJfKG4pLGU9SF8obi5zaXRlKSxXXy5pbnNlcnQoZixlKSxmLmVkZ2U9ZS5lZGdlPUVfKG4uc2l0ZSxmLnNpdGUpLFlfKG4pLHZvaWQgWV8oZSk7aWYoZSl7Ql8obiksQl8oZSk7dmFyIGM9bi5zaXRlLHM9Y1swXSxsPWNbMV0saD10WzBdLXMsZD10WzFdLWwscD1lLnNpdGUsdj1wWzBdLXMsZz1wWzFdLWwseT0yKihoKmctZCp2KSxfPWgqaCtkKmQsYj12KnYrZypnLG09WyhnKl8tZCpiKS95K3MsKGgqYi12Kl8pL3krbF07Q18oZS5lZGdlLGMscCxtKSxmLmVkZ2U9RV8oYyx0LG51bGwsbSksZS5lZGdlPUVfKHQscCxudWxsLG0pLFlfKG4pLFlfKGUpfWVsc2UgZi5lZGdlPUVfKG4uc2l0ZSxmLnNpdGUpfX1mdW5jdGlvbiBWXyh0LG4pe3ZhciBlPXQuc2l0ZSxyPWVbMF0saT1lWzFdLG89aS1uO2lmKCFvKXJldHVybiByO3ZhciBhPXQuUDtpZighYSlyZXR1cm4tMS8wO3ZhciB1PShlPWEuc2l0ZSlbMF0sZj1lWzFdLGM9Zi1uO2lmKCFjKXJldHVybiB1O3ZhciBzPXUtcixsPTEvby0xL2MsaD1zL2M7cmV0dXJuIGw/KC1oK01hdGguc3FydChoKmgtMipsKihzKnMvKC0yKmMpLWYrYy8yK2ktby8yKSkpL2wrcjoocit1KS8yfWZ1bmN0aW9uICRfKHQsbil7dmFyIGU9dC5OO2lmKGUpcmV0dXJuIFZfKGUsbik7dmFyIHI9dC5zaXRlO3JldHVybiByWzFdPT09bj9yWzBdOjEvMH12YXIgV18sWl8sUV8sSl8sS189MWUtNix0Yj0xZS0xMjtmdW5jdGlvbiBuYih0LG4pe3JldHVybiBuWzFdLXRbMV18fG5bMF0tdFswXX1mdW5jdGlvbiBlYih0LG4pe3ZhciBlLHIsaSxvPXQuc29ydChuYikucG9wKCk7Zm9yKEpfPVtdLFpfPW5ldyBBcnJheSh0Lmxlbmd0aCksV189bmV3IE1fLFFfPW5ldyBNXzs7KWlmKGk9VV8sbyYmKCFpfHxvWzFdPGkueXx8b1sxXT09PWkueSYmb1swXTxpLngpKW9bMF09PT1lJiZvWzFdPT09cnx8KEdfKG8pLGU9b1swXSxyPW9bMV0pLG89dC5wb3AoKTtlbHNle2lmKCFpKWJyZWFrO1hfKGkuYXJjKX1pZihmdW5jdGlvbigpe2Zvcih2YXIgdCxuLGUscixpPTAsbz1aXy5sZW5ndGg7aTxvOysraSlpZigodD1aX1tpXSkmJihyPShuPXQuaGFsZmVkZ2VzKS5sZW5ndGgpKXt2YXIgYT1uZXcgQXJyYXkociksdT1uZXcgQXJyYXkocik7Zm9yKGU9MDtlPHI7KytlKWFbZV09ZSx1W2VdPVJfKHQsSl9bbltlXV0pO2ZvcihhLnNvcnQoZnVuY3Rpb24odCxuKXtyZXR1cm4gdVtuXS11W3RdfSksZT0wO2U8cjsrK2UpdVtlXT1uW2FbZV1dO2ZvcihlPTA7ZTxyOysrZSluW2VdPXVbZV19fSgpLG4pe3ZhciBhPStuWzBdWzBdLHU9K25bMF1bMV0sZj0rblsxXVswXSxjPStuWzFdWzFdOyFmdW5jdGlvbih0LG4sZSxyKXtmb3IodmFyIGksbz1KXy5sZW5ndGg7by0tOyl6XyhpPUpfW29dLHQsbixlLHIpJiZQXyhpLHQsbixlLHIpJiYoTWF0aC5hYnMoaVswXVswXS1pWzFdWzBdKT5LX3x8TWF0aC5hYnMoaVswXVsxXS1pWzFdWzFdKT5LXyl8fGRlbGV0ZSBKX1tvXX0oYSx1LGYsYyksZnVuY3Rpb24odCxuLGUscil7dmFyIGksbyxhLHUsZixjLHMsbCxoLGQscCx2LGc9Wl8ubGVuZ3RoLHk9ITA7Zm9yKGk9MDtpPGc7KytpKWlmKG89Wl9baV0pe2ZvcihhPW8uc2l0ZSx1PShmPW8uaGFsZmVkZ2VzKS5sZW5ndGg7dS0tOylKX1tmW3VdXXx8Zi5zcGxpY2UodSwxKTtmb3IodT0wLGM9Zi5sZW5ndGg7dTxjOylwPShkPURfKG8sSl9bZlt1XV0pKVswXSx2PWRbMV0sbD0ocz1MXyhvLEpfW2ZbKyt1JWNdXSkpWzBdLGg9c1sxXSwoTWF0aC5hYnMocC1sKT5LX3x8TWF0aC5hYnModi1oKT5LXykmJihmLnNwbGljZSh1LDAsSl8ucHVzaChrXyhhLGQsTWF0aC5hYnMocC10KTxLXyYmci12PktfP1t0LE1hdGguYWJzKGwtdCk8S18/aDpyXTpNYXRoLmFicyh2LXIpPEtfJiZlLXA+S18/W01hdGguYWJzKGgtcik8S18/bDplLHJdOk1hdGguYWJzKHAtZSk8S18mJnYtbj5LXz9bZSxNYXRoLmFicyhsLWUpPEtfP2g6bl06TWF0aC5hYnModi1uKTxLXyYmcC10PktfP1tNYXRoLmFicyhoLW4pPEtfP2w6dCxuXTpudWxsKSktMSksKytjKTtjJiYoeT0hMSl9aWYoeSl7dmFyIF8sYixtLHg9MS8wO2ZvcihpPTAseT1udWxsO2k8ZzsrK2kpKG89Wl9baV0pJiYobT0oXz0oYT1vLnNpdGUpWzBdLXQpKl8rKGI9YVsxXS1uKSpiKTx4JiYoeD1tLHk9byk7aWYoeSl7dmFyIHc9W3Qsbl0sTT1bdCxyXSxBPVtlLHJdLFQ9W2Usbl07eS5oYWxmZWRnZXMucHVzaChKXy5wdXNoKGtfKGE9eS5zaXRlLHcsTSkpLTEsSl8ucHVzaChrXyhhLE0sQSkpLTEsSl8ucHVzaChrXyhhLEEsVCkpLTEsSl8ucHVzaChrXyhhLFQsdykpLTEpfX1mb3IoaT0wO2k8ZzsrK2kpKG89Wl9baV0pJiYoby5oYWxmZWRnZXMubGVuZ3RofHxkZWxldGUgWl9baV0pfShhLHUsZixjKX10aGlzLmVkZ2VzPUpfLHRoaXMuY2VsbHM9Wl8sV189UV89Sl89Wl89bnVsbH1mdW5jdGlvbiByYih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24gaWIodCxuLGUpe3RoaXMudGFyZ2V0PXQsdGhpcy50eXBlPW4sdGhpcy50cmFuc2Zvcm09ZX1mdW5jdGlvbiBvYih0LG4sZSl7dGhpcy5rPXQsdGhpcy54PW4sdGhpcy55PWV9ZWIucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjplYixwb2x5Z29uczpmdW5jdGlvbigpe3ZhciB0PXRoaXMuZWRnZXM7cmV0dXJuIHRoaXMuY2VsbHMubWFwKGZ1bmN0aW9uKG4pe3ZhciBlPW4uaGFsZmVkZ2VzLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gTF8obix0W2VdKX0pO3JldHVybiBlLmRhdGE9bi5zaXRlLmRhdGEsZX0pfSx0cmlhbmdsZXM6ZnVuY3Rpb24oKXt2YXIgdD1bXSxuPXRoaXMuZWRnZXM7cmV0dXJuIHRoaXMuY2VsbHMuZm9yRWFjaChmdW5jdGlvbihlLHIpe2lmKG89KGk9ZS5oYWxmZWRnZXMpLmxlbmd0aClmb3IodmFyIGksbyxhLHUsZixjLHM9ZS5zaXRlLGw9LTEsaD1uW2lbby0xXV0sZD1oLmxlZnQ9PT1zP2gucmlnaHQ6aC5sZWZ0OysrbDxvOylhPWQsZD0oaD1uW2lbbF1dKS5sZWZ0PT09cz9oLnJpZ2h0OmgubGVmdCxhJiZkJiZyPGEuaW5kZXgmJnI8ZC5pbmRleCYmKGY9YSxjPWQsKCh1PXMpWzBdLWNbMF0pKihmWzFdLXVbMV0pLSh1WzBdLWZbMF0pKihjWzFdLXVbMV0pPDApJiZ0LnB1c2goW3MuZGF0YSxhLmRhdGEsZC5kYXRhXSl9KSx0fSxsaW5rczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZ2VzLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdC5yaWdodH0pLm1hcChmdW5jdGlvbih0KXtyZXR1cm57c291cmNlOnQubGVmdC5kYXRhLHRhcmdldDp0LnJpZ2h0LmRhdGF9fSl9LGZpbmQ6ZnVuY3Rpb24odCxuLGUpe2Zvcih2YXIgcixpLG89dGhpcyxhPW8uX2ZvdW5kfHwwLHU9by5jZWxscy5sZW5ndGg7IShpPW8uY2VsbHNbYV0pOylpZigrK2E+PXUpcmV0dXJuIG51bGw7dmFyIGY9dC1pLnNpdGVbMF0sYz1uLWkuc2l0ZVsxXSxzPWYqZitjKmM7ZG97aT1vLmNlbGxzW3I9YV0sYT1udWxsLGkuaGFsZmVkZ2VzLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHI9by5lZGdlc1tlXSx1PXIubGVmdDtpZih1IT09aS5zaXRlJiZ1fHwodT1yLnJpZ2h0KSl7dmFyIGY9dC11WzBdLGM9bi11WzFdLGw9ZipmK2MqYztsPHMmJihzPWwsYT11LmluZGV4KX19KX13aGlsZShudWxsIT09YSk7cmV0dXJuIG8uX2ZvdW5kPXIsbnVsbD09ZXx8czw9ZSplP2kuc2l0ZTpudWxsfX0sb2IucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpvYixzY2FsZTpmdW5jdGlvbih0KXtyZXR1cm4gMT09PXQ/dGhpczpuZXcgb2IodGhpcy5rKnQsdGhpcy54LHRoaXMueSl9LHRyYW5zbGF0ZTpmdW5jdGlvbih0LG4pe3JldHVybiAwPT09dCYwPT09bj90aGlzOm5ldyBvYih0aGlzLmssdGhpcy54K3RoaXMuayp0LHRoaXMueSt0aGlzLmsqbil9LGFwcGx5OmZ1bmN0aW9uKHQpe3JldHVyblt0WzBdKnRoaXMuayt0aGlzLngsdFsxXSp0aGlzLmsrdGhpcy55XX0sYXBwbHlYOmZ1bmN0aW9uKHQpe3JldHVybiB0KnRoaXMuayt0aGlzLnh9LGFwcGx5WTpmdW5jdGlvbih0KXtyZXR1cm4gdCp0aGlzLmsrdGhpcy55fSxpbnZlcnQ6ZnVuY3Rpb24odCl7cmV0dXJuWyh0WzBdLXRoaXMueCkvdGhpcy5rLCh0WzFdLXRoaXMueSkvdGhpcy5rXX0saW52ZXJ0WDpmdW5jdGlvbih0KXtyZXR1cm4odC10aGlzLngpL3RoaXMua30saW52ZXJ0WTpmdW5jdGlvbih0KXtyZXR1cm4odC10aGlzLnkpL3RoaXMua30scmVzY2FsZVg6ZnVuY3Rpb24odCl7cmV0dXJuIHQuY29weSgpLmRvbWFpbih0LnJhbmdlKCkubWFwKHRoaXMuaW52ZXJ0WCx0aGlzKS5tYXAodC5pbnZlcnQsdCkpfSxyZXNjYWxlWTpmdW5jdGlvbih0KXtyZXR1cm4gdC5jb3B5KCkuZG9tYWluKHQucmFuZ2UoKS5tYXAodGhpcy5pbnZlcnRZLHRoaXMpLm1hcCh0LmludmVydCx0KSl9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuInRyYW5zbGF0ZSgiK3RoaXMueCsiLCIrdGhpcy55KyIpIHNjYWxlKCIrdGhpcy5rKyIpIn19O3ZhciBhYj1uZXcgb2IoMSwwLDApO2Z1bmN0aW9uIHViKHQpe3JldHVybiB0Ll9fem9vbXx8YWJ9ZnVuY3Rpb24gZmIoKXt0LmV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfWZ1bmN0aW9uIGNiKCl7dC5ldmVudC5wcmV2ZW50RGVmYXVsdCgpLHQuZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9ZnVuY3Rpb24gc2IoKXtyZXR1cm4hdC5ldmVudC5idXR0b259ZnVuY3Rpb24gbGIoKXt2YXIgdCxuLGU9dGhpcztyZXR1cm4gZSBpbnN0YW5jZW9mIFNWR0VsZW1lbnQ/KHQ9KGU9ZS5vd25lclNWR0VsZW1lbnR8fGUpLndpZHRoLmJhc2VWYWwudmFsdWUsbj1lLmhlaWdodC5iYXNlVmFsLnZhbHVlKToodD1lLmNsaWVudFdpZHRoLG49ZS5jbGllbnRIZWlnaHQpLFtbMCwwXSxbdCxuXV19ZnVuY3Rpb24gaGIoKXtyZXR1cm4gdGhpcy5fX3pvb218fGFifWZ1bmN0aW9uIGRiKCl7cmV0dXJuLXQuZXZlbnQuZGVsdGFZKih0LmV2ZW50LmRlbHRhTW9kZT8xMjA6MSkvNTAwfWZ1bmN0aW9uIHBiKCl7cmV0dXJuIm9udG91Y2hzdGFydCJpbiB0aGlzfWZ1bmN0aW9uIHZiKHQsbixlKXt2YXIgcj10LmludmVydFgoblswXVswXSktZVswXVswXSxpPXQuaW52ZXJ0WChuWzFdWzBdKS1lWzFdWzBdLG89dC5pbnZlcnRZKG5bMF1bMV0pLWVbMF1bMV0sYT10LmludmVydFkoblsxXVsxXSktZVsxXVsxXTtyZXR1cm4gdC50cmFuc2xhdGUoaT5yPyhyK2kpLzI6TWF0aC5taW4oMCxyKXx8TWF0aC5tYXgoMCxpKSxhPm8/KG8rYSkvMjpNYXRoLm1pbigwLG8pfHxNYXRoLm1heCgwLGEpKX11Yi5wcm90b3R5cGU9b2IucHJvdG90eXBlLHQudmVyc2lvbj0iNS43LjAiLHQuYmlzZWN0PWksdC5iaXNlY3RSaWdodD1pLHQuYmlzZWN0TGVmdD1vLHQuYXNjZW5kaW5nPW4sdC5iaXNlY3Rvcj1lLHQuY3Jvc3M9ZnVuY3Rpb24odCxuLGUpe3ZhciByLGksbyx1LGY9dC5sZW5ndGgsYz1uLmxlbmd0aCxzPW5ldyBBcnJheShmKmMpO2ZvcihudWxsPT1lJiYoZT1hKSxyPW89MDtyPGY7KytyKWZvcih1PXRbcl0saT0wO2k8YzsrK2ksKytvKXNbb109ZSh1LG5baV0pO3JldHVybiBzfSx0LmRlc2NlbmRpbmc9ZnVuY3Rpb24odCxuKXtyZXR1cm4gbjx0Py0xOm4+dD8xOm4+PXQ/MDpOYU59LHQuZGV2aWF0aW9uPWMsdC5leHRlbnQ9cyx0Lmhpc3RvZ3JhbT1mdW5jdGlvbigpe3ZhciB0PXYsbj1zLGU9TTtmdW5jdGlvbiByKHIpe3ZhciBvLGEsdT1yLmxlbmd0aCxmPW5ldyBBcnJheSh1KTtmb3Iobz0wO288dTsrK28pZltvXT10KHJbb10sbyxyKTt2YXIgYz1uKGYpLHM9Y1swXSxsPWNbMV0saD1lKGYscyxsKTtBcnJheS5pc0FycmF5KGgpfHwoaD13KHMsbCxoKSxoPWcoTWF0aC5jZWlsKHMvaCkqaCxsLGgpKTtmb3IodmFyIGQ9aC5sZW5ndGg7aFswXTw9czspaC5zaGlmdCgpLC0tZDtmb3IoO2hbZC0xXT5sOyloLnBvcCgpLC0tZDt2YXIgcCx2PW5ldyBBcnJheShkKzEpO2ZvcihvPTA7bzw9ZDsrK28pKHA9dltvXT1bXSkueDA9bz4wP2hbby0xXTpzLHAueDE9bzxkP2hbb106bDtmb3Iobz0wO288dTsrK28pczw9KGE9ZltvXSkmJmE8PWwmJnZbaShoLGEsMCxkKV0ucHVzaChyW29dKTtyZXR1cm4gdn1yZXR1cm4gci52YWx1ZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uOnAobikscik6dH0sci5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpwKFt0WzBdLHRbMV1dKSxyKTpufSxyLnRocmVzaG9sZHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpBcnJheS5pc0FycmF5KHQpP3AoaC5jYWxsKHQpKTpwKHQpLHIpOmV9LHJ9LHQudGhyZXNob2xkRnJlZWRtYW5EaWFjb25pcz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQ9ZC5jYWxsKHQsdSkuc29ydChuKSxNYXRoLmNlaWwoKHItZSkvKDIqKEEodCwuNzUpLUEodCwuMjUpKSpNYXRoLnBvdyh0Lmxlbmd0aCwtMS8zKSkpfSx0LnRocmVzaG9sZFNjb3R0PWZ1bmN0aW9uKHQsbixlKXtyZXR1cm4gTWF0aC5jZWlsKChlLW4pLygzLjUqYyh0KSpNYXRoLnBvdyh0Lmxlbmd0aCwtMS8zKSkpfSx0LnRocmVzaG9sZFN0dXJnZXM9TSx0Lm1heD1ULHQubWVhbj1mdW5jdGlvbih0LG4pe3ZhciBlLHI9dC5sZW5ndGgsaT1yLG89LTEsYT0wO2lmKG51bGw9PW4pZm9yKDsrK288cjspaXNOYU4oZT11KHRbb10pKT8tLWk6YSs9ZTtlbHNlIGZvcig7KytvPHI7KWlzTmFOKGU9dShuKHRbb10sbyx0KSkpPy0taTphKz1lO2lmKGkpcmV0dXJuIGEvaX0sdC5tZWRpYW49ZnVuY3Rpb24odCxlKXt2YXIgcixpPXQubGVuZ3RoLG89LTEsYT1bXTtpZihudWxsPT1lKWZvcig7KytvPGk7KWlzTmFOKHI9dSh0W29dKSl8fGEucHVzaChyKTtlbHNlIGZvcig7KytvPGk7KWlzTmFOKHI9dShlKHRbb10sbyx0KSkpfHxhLnB1c2gocik7cmV0dXJuIEEoYS5zb3J0KG4pLC41KX0sdC5tZXJnZT1OLHQubWluPVMsdC5wYWlycz1mdW5jdGlvbih0LG4pe251bGw9PW4mJihuPWEpO2Zvcih2YXIgZT0wLHI9dC5sZW5ndGgtMSxpPXRbMF0sbz1uZXcgQXJyYXkocjwwPzA6cik7ZTxyOylvW2VdPW4oaSxpPXRbKytlXSk7cmV0dXJuIG99LHQucGVybXV0ZT1mdW5jdGlvbih0LG4pe2Zvcih2YXIgZT1uLmxlbmd0aCxyPW5ldyBBcnJheShlKTtlLS07KXJbZV09dFtuW2VdXTtyZXR1cm4gcn0sdC5xdWFudGlsZT1BLHQucmFuZ2U9Zyx0LnNjYW49ZnVuY3Rpb24odCxlKXtpZihyPXQubGVuZ3RoKXt2YXIgcixpLG89MCxhPTAsdT10W2FdO2ZvcihudWxsPT1lJiYoZT1uKTsrK288cjspKGUoaT10W29dLHUpPDB8fDAhPT1lKHUsdSkpJiYodT1pLGE9byk7cmV0dXJuIDA9PT1lKHUsdSk/YTp2b2lkIDB9fSx0LnNodWZmbGU9ZnVuY3Rpb24odCxuLGUpe2Zvcih2YXIgcixpLG89KG51bGw9PWU/dC5sZW5ndGg6ZSktKG49bnVsbD09bj8wOituKTtvOylpPU1hdGgucmFuZG9tKCkqby0tfDAscj10W28rbl0sdFtvK25dPXRbaStuXSx0W2krbl09cjtyZXR1cm4gdH0sdC5zdW09ZnVuY3Rpb24odCxuKXt2YXIgZSxyPXQubGVuZ3RoLGk9LTEsbz0wO2lmKG51bGw9PW4pZm9yKDsrK2k8cjspKGU9K3RbaV0pJiYobys9ZSk7ZWxzZSBmb3IoOysraTxyOykoZT0rbih0W2ldLGksdCkpJiYobys9ZSk7cmV0dXJuIG99LHQudGlja3M9bSx0LnRpY2tJbmNyZW1lbnQ9eCx0LnRpY2tTdGVwPXcsdC50cmFuc3Bvc2U9RSx0LnZhcmlhbmNlPWYsdC56aXA9ZnVuY3Rpb24oKXtyZXR1cm4gRShhcmd1bWVudHMpfSx0LmF4aXNUb3A9ZnVuY3Rpb24odCl7cmV0dXJuIEIoeix0KX0sdC5heGlzUmlnaHQ9ZnVuY3Rpb24odCl7cmV0dXJuIEIoUix0KX0sdC5heGlzQm90dG9tPWZ1bmN0aW9uKHQpe3JldHVybiBCKEwsdCl9LHQuYXhpc0xlZnQ9ZnVuY3Rpb24odCl7cmV0dXJuIEIoRCx0KX0sdC5icnVzaD1mdW5jdGlvbigpe3JldHVybiBSaSh3aSl9LHQuYnJ1c2hYPWZ1bmN0aW9uKCl7cmV0dXJuIFJpKG1pKX0sdC5icnVzaFk9ZnVuY3Rpb24oKXtyZXR1cm4gUmkoeGkpfSx0LmJydXNoU2VsZWN0aW9uPWZ1bmN0aW9uKHQpe3ZhciBuPXQuX19icnVzaDtyZXR1cm4gbj9uLmRpbS5vdXRwdXQobi5zZWxlY3Rpb24pOm51bGx9LHQuY2hvcmQ9ZnVuY3Rpb24oKXt2YXIgdD0wLG49bnVsbCxlPW51bGwscj1udWxsO2Z1bmN0aW9uIGkoaSl7dmFyIG8sYSx1LGYsYyxzLGw9aS5sZW5ndGgsaD1bXSxkPWcobCkscD1bXSx2PVtdLHk9di5ncm91cHM9bmV3IEFycmF5KGwpLF89bmV3IEFycmF5KGwqbCk7Zm9yKG89MCxjPS0xOysrYzxsOyl7Zm9yKGE9MCxzPS0xOysrczxsOylhKz1pW2NdW3NdO2gucHVzaChhKSxwLnB1c2goZyhsKSksbys9YX1mb3IobiYmZC5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4oaFt0XSxoW2VdKX0pLGUmJnAuZm9yRWFjaChmdW5jdGlvbih0LG4pe3Quc29ydChmdW5jdGlvbih0LHIpe3JldHVybiBlKGlbbl1bdF0saVtuXVtyXSl9KX0pLGY9KG89WWkoMCxPaS10KmwpL28pP3Q6T2kvbCxhPTAsYz0tMTsrK2M8bDspe2Zvcih1PWEscz0tMTsrK3M8bDspe3ZhciBiPWRbY10sbT1wW2JdW3NdLHg9aVtiXVttXSx3PWEsTT1hKz14Km87X1ttKmwrYl09e2luZGV4OmIsc3ViaW5kZXg6bSxzdGFydEFuZ2xlOncsZW5kQW5nbGU6TSx2YWx1ZTp4fX15W2JdPXtpbmRleDpiLHN0YXJ0QW5nbGU6dSxlbmRBbmdsZTphLHZhbHVlOmhbYl19LGErPWZ9Zm9yKGM9LTE7KytjPGw7KWZvcihzPWMtMTsrK3M8bDspe3ZhciBBPV9bcypsK2NdLFQ9X1tjKmwrc107KEEudmFsdWV8fFQudmFsdWUpJiZ2LnB1c2goQS52YWx1ZTxULnZhbHVlP3tzb3VyY2U6VCx0YXJnZXQ6QX06e3NvdXJjZTpBLHRhcmdldDpUfSl9cmV0dXJuIHI/di5zb3J0KHIpOnZ9cmV0dXJuIGkucGFkQW5nbGU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9WWkoMCxuKSxpKTp0fSxpLnNvcnRHcm91cHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dCxpKTpufSxpLnNvcnRTdWJncm91cHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCxpKTplfSxpLnNvcnRDaG9yZHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG51bGw9PXQ/cj1udWxsOihuPXQscj1mdW5jdGlvbih0LGUpe3JldHVybiBuKHQuc291cmNlLnZhbHVlK3QudGFyZ2V0LnZhbHVlLGUuc291cmNlLnZhbHVlK2UudGFyZ2V0LnZhbHVlKX0pLl89dCxpKTpyJiZyLl87dmFyIG59LGl9LHQucmliYm9uPWZ1bmN0aW9uKCl7dmFyIHQ9Vmksbj0kaSxlPVdpLHI9WmksaT1RaSxvPW51bGw7ZnVuY3Rpb24gYSgpe3ZhciBhLHU9QmkuY2FsbChhcmd1bWVudHMpLGY9dC5hcHBseSh0aGlzLHUpLGM9bi5hcHBseSh0aGlzLHUpLHM9K2UuYXBwbHkodGhpcywodVswXT1mLHUpKSxsPXIuYXBwbHkodGhpcyx1KS1xaSxoPWkuYXBwbHkodGhpcyx1KS1xaSxkPXMqTGkobCkscD1zKkRpKGwpLHY9K2UuYXBwbHkodGhpcywodVswXT1jLHUpKSxnPXIuYXBwbHkodGhpcyx1KS1xaSx5PWkuYXBwbHkodGhpcyx1KS1xaTtpZihvfHwobz1hPUdpKCkpLG8ubW92ZVRvKGQscCksby5hcmMoMCwwLHMsbCxoKSxsPT09ZyYmaD09PXl8fChvLnF1YWRyYXRpY0N1cnZlVG8oMCwwLHYqTGkoZyksdipEaShnKSksby5hcmMoMCwwLHYsZyx5KSksby5xdWFkcmF0aWNDdXJ2ZVRvKDAsMCxkLHApLG8uY2xvc2VQYXRoKCksYSlyZXR1cm4gbz1udWxsLGErIiJ8fG51bGx9cmV0dXJuIGEucmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6RmkoK3QpLGEpOmV9LGEuc3RhcnRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkZpKCt0KSxhKTpyfSxhLmVuZEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6RmkoK3QpLGEpOml9LGEuc291cmNlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PW4sYSk6dH0sYS50YXJnZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dCxhKTpufSxhLmNvbnRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89bnVsbD09dD9udWxsOnQsYSk6b30sYX0sdC5uZXN0PWZ1bmN0aW9uKCl7dmFyIHQsbixlLHI9W10saT1bXTtmdW5jdGlvbiBvKGUsaSxhLHUpe2lmKGk+PXIubGVuZ3RoKXJldHVybiBudWxsIT10JiZlLnNvcnQodCksbnVsbCE9bj9uKGUpOmU7Zm9yKHZhciBmLGMscyxsPS0xLGg9ZS5sZW5ndGgsZD1yW2krK10scD1LaSgpLHY9YSgpOysrbDxoOykocz1wLmdldChmPWQoYz1lW2xdKSsiIikpP3MucHVzaChjKTpwLnNldChmLFtjXSk7cmV0dXJuIHAuZWFjaChmdW5jdGlvbih0LG4pe3UodixuLG8odCxpLGEsdSkpfSksdn1yZXR1cm4gZT17b2JqZWN0OmZ1bmN0aW9uKHQpe3JldHVybiBvKHQsMCx0byxubyl9LG1hcDpmdW5jdGlvbih0KXtyZXR1cm4gbyh0LDAsZW8scm8pfSxlbnRyaWVzOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbiB0KGUsbyl7aWYoKytvPnIubGVuZ3RoKXJldHVybiBlO3ZhciBhLHU9aVtvLTFdO3JldHVybiBudWxsIT1uJiZvPj1yLmxlbmd0aD9hPWUuZW50cmllcygpOihhPVtdLGUuZWFjaChmdW5jdGlvbihuLGUpe2EucHVzaCh7a2V5OmUsdmFsdWVzOnQobixvKX0pfSkpLG51bGwhPXU/YS5zb3J0KGZ1bmN0aW9uKHQsbil7cmV0dXJuIHUodC5rZXksbi5rZXkpfSk6YX0obyh0LDAsZW8scm8pLDApfSxrZXk6ZnVuY3Rpb24odCl7cmV0dXJuIHIucHVzaCh0KSxlfSxzb3J0S2V5czpmdW5jdGlvbih0KXtyZXR1cm4gaVtyLmxlbmd0aC0xXT10LGV9LHNvcnRWYWx1ZXM6ZnVuY3Rpb24obil7cmV0dXJuIHQ9bixlfSxyb2xsdXA6ZnVuY3Rpb24odCl7cmV0dXJuIG49dCxlfX19LHQuc2V0PWFvLHQubWFwPUtpLHQua2V5cz1mdW5jdGlvbih0KXt2YXIgbj1bXTtmb3IodmFyIGUgaW4gdCluLnB1c2goZSk7cmV0dXJuIG59LHQudmFsdWVzPWZ1bmN0aW9uKHQpe3ZhciBuPVtdO2Zvcih2YXIgZSBpbiB0KW4ucHVzaCh0W2VdKTtyZXR1cm4gbn0sdC5lbnRyaWVzPWZ1bmN0aW9uKHQpe3ZhciBuPVtdO2Zvcih2YXIgZSBpbiB0KW4ucHVzaCh7a2V5OmUsdmFsdWU6dFtlXX0pO3JldHVybiBufSx0LmNvbG9yPXZuLHQucmdiPWJuLHQuaHNsPU1uLHQubGFiPVVuLHQuaGNsPUhuLHQubGNoPWZ1bmN0aW9uKHQsbixlLHIpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9Jbih0KTpuZXcgam4oZSxuLHQsbnVsbD09cj8xOnIpfSx0LmdyYXk9ZnVuY3Rpb24odCxuKXtyZXR1cm4gbmV3IHFuKHQsMCwwLG51bGw9PW4/MTpuKX0sdC5jdWJlaGVsaXg9S24sdC5jb250b3Vycz1nbyx0LmNvbnRvdXJEZW5zaXR5PWZ1bmN0aW9uKCl7dmFyIHQ9Ym8sbj1tbyxlPXhvLHI9OTYwLGk9NTAwLG89MjAsYT0yLHU9MypvLGY9cisyKnU+PmEsYz1pKzIqdT4+YSxzPWNvKDIwKTtmdW5jdGlvbiBsKHIpe3ZhciBpPW5ldyBGbG9hdDMyQXJyYXkoZipjKSxsPW5ldyBGbG9hdDMyQXJyYXkoZipjKTtyLmZvckVhY2goZnVuY3Rpb24ocixvLHMpe3ZhciBsPSt0KHIsbyxzKSt1Pj5hLGg9K24ocixvLHMpK3U+PmEsZD0rZShyLG8scyk7bD49MCYmbDxmJiZoPj0wJiZoPGMmJihpW2wraCpmXSs9ZCl9KSx5byh7d2lkdGg6ZixoZWlnaHQ6YyxkYXRhOml9LHt3aWR0aDpmLGhlaWdodDpjLGRhdGE6bH0sbz4+YSksX28oe3dpZHRoOmYsaGVpZ2h0OmMsZGF0YTpsfSx7d2lkdGg6ZixoZWlnaHQ6YyxkYXRhOml9LG8+PmEpLHlvKHt3aWR0aDpmLGhlaWdodDpjLGRhdGE6aX0se3dpZHRoOmYsaGVpZ2h0OmMsZGF0YTpsfSxvPj5hKSxfbyh7d2lkdGg6ZixoZWlnaHQ6YyxkYXRhOmx9LHt3aWR0aDpmLGhlaWdodDpjLGRhdGE6aX0sbz4+YSkseW8oe3dpZHRoOmYsaGVpZ2h0OmMsZGF0YTppfSx7d2lkdGg6ZixoZWlnaHQ6YyxkYXRhOmx9LG8+PmEpLF9vKHt3aWR0aDpmLGhlaWdodDpjLGRhdGE6bH0se3dpZHRoOmYsaGVpZ2h0OmMsZGF0YTppfSxvPj5hKTt2YXIgZD1zKGkpO2lmKCFBcnJheS5pc0FycmF5KGQpKXt2YXIgcD1UKGkpO2Q9dygwLHAsZCksKGQ9ZygwLE1hdGguZmxvb3IocC9kKSpkLGQpKS5zaGlmdCgpfXJldHVybiBnbygpLnRocmVzaG9sZHMoZCkuc2l6ZShbZixjXSkoaSkubWFwKGgpfWZ1bmN0aW9uIGgodCl7cmV0dXJuIHQudmFsdWUqPU1hdGgucG93KDIsLTIqYSksdC5jb29yZGluYXRlcy5mb3JFYWNoKGQpLHR9ZnVuY3Rpb24gZCh0KXt0LmZvckVhY2gocCl9ZnVuY3Rpb24gcCh0KXt0LmZvckVhY2godil9ZnVuY3Rpb24gdih0KXt0WzBdPXRbMF0qTWF0aC5wb3coMixhKS11LHRbMV09dFsxXSpNYXRoLnBvdygyLGEpLXV9ZnVuY3Rpb24geSgpe3JldHVybiBmPXIrMioodT0zKm8pPj5hLGM9aSsyKnU+PmEsbH1yZXR1cm4gbC54PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBuP246Y28oK24pLGwpOnR9LGwueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmNvKCt0KSxsKTpufSxsLndlaWdodD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmNvKCt0KSxsKTplfSxsLnNpemU9ZnVuY3Rpb24odCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuW3IsaV07dmFyIG49TWF0aC5jZWlsKHRbMF0pLGU9TWF0aC5jZWlsKHRbMV0pO2lmKCEobj49MHx8bj49MCkpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHNpemUiKTtyZXR1cm4gcj1uLGk9ZSx5KCl9LGwuY2VsbFNpemU9ZnVuY3Rpb24odCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIDE8PGE7aWYoISgodD0rdCk+PTEpKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBjZWxsIHNpemUiKTtyZXR1cm4gYT1NYXRoLmZsb29yKE1hdGgubG9nKHQpL01hdGguTE4yKSx5KCl9LGwudGhyZXNob2xkcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkFycmF5LmlzQXJyYXkodCk/Y28odW8uY2FsbCh0KSk6Y28odCksbCk6c30sbC5iYW5kd2lkdGg9ZnVuY3Rpb24odCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIE1hdGguc3FydChvKihvKzEpKTtpZighKCh0PSt0KT49MCkpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGJhbmR3aWR0aCIpO3JldHVybiBvPU1hdGgucm91bmQoKE1hdGguc3FydCg0KnQqdCsxKS0xKS8yKSx5KCl9LGx9LHQuZGlzcGF0Y2g9SSx0LmRyYWc9ZnVuY3Rpb24oKXt2YXIgbixlLHIsaSxvPVd0LGE9WnQsdT1RdCxmPUp0LGM9e30scz1JKCJzdGFydCIsImRyYWciLCJlbmQiKSxsPTAsaD0wO2Z1bmN0aW9uIGQodCl7dC5vbigibW91c2Vkb3duLmRyYWciLHApLmZpbHRlcihmKS5vbigidG91Y2hzdGFydC5kcmFnIix5KS5vbigidG91Y2htb3ZlLmRyYWciLF8pLm9uKCJ0b3VjaGVuZC5kcmFnIHRvdWNoY2FuY2VsLmRyYWciLGIpLnN0eWxlKCJ0b3VjaC1hY3Rpb24iLCJub25lIikuc3R5bGUoIi13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvciIsInJnYmEoMCwwLDAsMCkiKX1mdW5jdGlvbiBwKCl7aWYoIWkmJm8uYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgdT1tKCJtb3VzZSIsYS5hcHBseSh0aGlzLGFyZ3VtZW50cyksRnQsdGhpcyxhcmd1bWVudHMpO3UmJihEdCh0LmV2ZW50LnZpZXcpLm9uKCJtb3VzZW1vdmUuZHJhZyIsdiwhMCkub24oIm1vdXNldXAuZHJhZyIsZywhMCksWHQodC5ldmVudC52aWV3KSxIdCgpLHI9ITEsbj10LmV2ZW50LmNsaWVudFgsZT10LmV2ZW50LmNsaWVudFksdSgic3RhcnQiKSl9fWZ1bmN0aW9uIHYoKXtpZihqdCgpLCFyKXt2YXIgaT10LmV2ZW50LmNsaWVudFgtbixvPXQuZXZlbnQuY2xpZW50WS1lO3I9aSppK28qbz5ofWMubW91c2UoImRyYWciKX1mdW5jdGlvbiBnKCl7RHQodC5ldmVudC52aWV3KS5vbigibW91c2Vtb3ZlLmRyYWcgbW91c2V1cC5kcmFnIixudWxsKSxHdCh0LmV2ZW50LnZpZXcsciksanQoKSxjLm1vdXNlKCJlbmQiKX1mdW5jdGlvbiB5KCl7aWYoby5hcHBseSh0aGlzLGFyZ3VtZW50cykpe3ZhciBuLGUscj10LmV2ZW50LmNoYW5nZWRUb3VjaGVzLGk9YS5hcHBseSh0aGlzLGFyZ3VtZW50cyksdT1yLmxlbmd0aDtmb3Iobj0wO248dTsrK24pKGU9bShyW25dLmlkZW50aWZpZXIsaSxJdCx0aGlzLGFyZ3VtZW50cykpJiYoSHQoKSxlKCJzdGFydCIpKX19ZnVuY3Rpb24gXygpe3ZhciBuLGUscj10LmV2ZW50LmNoYW5nZWRUb3VjaGVzLGk9ci5sZW5ndGg7Zm9yKG49MDtuPGk7KytuKShlPWNbcltuXS5pZGVudGlmaWVyXSkmJihqdCgpLGUoImRyYWciKSl9ZnVuY3Rpb24gYigpe3ZhciBuLGUscj10LmV2ZW50LmNoYW5nZWRUb3VjaGVzLG89ci5sZW5ndGg7Zm9yKGkmJmNsZWFyVGltZW91dChpKSxpPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtpPW51bGx9LDUwMCksbj0wO248bzsrK24pKGU9Y1tyW25dLmlkZW50aWZpZXJdKSYmKEh0KCksZSgiZW5kIikpfWZ1bmN0aW9uIG0obixlLHIsaSxvKXt2YXIgYSxmLGgscD1yKGUsbiksdj1zLmNvcHkoKTtpZihDdChuZXcgJHQoZCwiYmVmb3Jlc3RhcnQiLGEsbixsLHBbMF0scFsxXSwwLDAsdiksZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9KHQuZXZlbnQuc3ViamVjdD1hPXUuYXBwbHkoaSxvKSkmJihmPWEueC1wWzBdfHwwLGg9YS55LXBbMV18fDAsITApfSkpcmV0dXJuIGZ1bmN0aW9uIHQodSl7dmFyIHMsZz1wO3N3aXRjaCh1KXtjYXNlInN0YXJ0IjpjW25dPXQscz1sKys7YnJlYWs7Y2FzZSJlbmQiOmRlbGV0ZSBjW25dLC0tbDtjYXNlImRyYWciOnA9cihlLG4pLHM9bH1DdChuZXcgJHQoZCx1LGEsbixzLHBbMF0rZixwWzFdK2gscFswXS1nWzBdLHBbMV0tZ1sxXSx2KSx2LmFwcGx5LHYsW3UsaSxvXSl9fXJldHVybiBkLmZpbHRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0iZnVuY3Rpb24iPT10eXBlb2YgdD90OlZ0KCEhdCksZCk6b30sZC5jb250YWluZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpWdCh0KSxkKTphfSxkLnN1YmplY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpWdCh0KSxkKTp1fSxkLnRvdWNoYWJsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OlZ0KCEhdCksZCk6Zn0sZC5vbj1mdW5jdGlvbigpe3ZhciB0PXMub24uYXBwbHkocyxhcmd1bWVudHMpO3JldHVybiB0PT09cz9kOnR9LGQuY2xpY2tEaXN0YW5jZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD0odD0rdCkqdCxkKTpNYXRoLnNxcnQoaCl9LGR9LHQuZHJhZ0Rpc2FibGU9WHQsdC5kcmFnRW5hYmxlPUd0LHQuZHN2Rm9ybWF0PUVvLHQuY3N2UGFyc2U9Q28sdC5jc3ZQYXJzZVJvd3M9UG8sdC5jc3ZGb3JtYXQ9em8sdC5jc3ZGb3JtYXRSb3dzPVJvLHQudHN2UGFyc2U9RG8sdC50c3ZQYXJzZVJvd3M9VW8sdC50c3ZGb3JtYXQ9cW8sdC50c3ZGb3JtYXRSb3dzPU9vLHQuZWFzZUxpbmVhcj1mdW5jdGlvbih0KXtyZXR1cm4rdH0sdC5lYXNlUXVhZD1Ecix0LmVhc2VRdWFkSW49ZnVuY3Rpb24odCl7cmV0dXJuIHQqdH0sdC5lYXNlUXVhZE91dD1mdW5jdGlvbih0KXtyZXR1cm4gdCooMi10KX0sdC5lYXNlUXVhZEluT3V0PURyLHQuZWFzZUN1YmljPVVyLHQuZWFzZUN1YmljSW49ZnVuY3Rpb24odCl7cmV0dXJuIHQqdCp0fSx0LmVhc2VDdWJpY091dD1mdW5jdGlvbih0KXtyZXR1cm4tLXQqdCp0KzF9LHQuZWFzZUN1YmljSW5PdXQ9VXIsdC5lYXNlUG9seT1Zcix0LmVhc2VQb2x5SW49cXIsdC5lYXNlUG9seU91dD1Pcix0LmVhc2VQb2x5SW5PdXQ9WXIsdC5lYXNlU2luPUlyLHQuZWFzZVNpbkluPWZ1bmN0aW9uKHQpe3JldHVybiAxLU1hdGguY29zKHQqRnIpfSx0LmVhc2VTaW5PdXQ9ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguc2luKHQqRnIpfSx0LmVhc2VTaW5Jbk91dD1Jcix0LmVhc2VFeHA9SHIsdC5lYXNlRXhwSW49ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucG93KDIsMTAqdC0xMCl9LHQuZWFzZUV4cE91dD1mdW5jdGlvbih0KXtyZXR1cm4gMS1NYXRoLnBvdygyLC0xMCp0KX0sdC5lYXNlRXhwSW5PdXQ9SHIsdC5lYXNlQ2lyY2xlPWpyLHQuZWFzZUNpcmNsZUluPWZ1bmN0aW9uKHQpe3JldHVybiAxLU1hdGguc3FydCgxLXQqdCl9LHQuZWFzZUNpcmNsZU91dD1mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5zcXJ0KDEtIC0tdCp0KX0sdC5lYXNlQ2lyY2xlSW5PdXQ9anIsdC5lYXNlQm91bmNlPW5pLHQuZWFzZUJvdW5jZUluPWZ1bmN0aW9uKHQpe3JldHVybiAxLW5pKDEtdCl9LHQuZWFzZUJvdW5jZU91dD1uaSx0LmVhc2VCb3VuY2VJbk91dD1mdW5jdGlvbih0KXtyZXR1cm4oKHQqPTIpPD0xPzEtbmkoMS10KTpuaSh0LTEpKzEpLzJ9LHQuZWFzZUJhY2s9aWksdC5lYXNlQmFja0luPWVpLHQuZWFzZUJhY2tPdXQ9cmksdC5lYXNlQmFja0luT3V0PWlpLHQuZWFzZUVsYXN0aWM9dWksdC5lYXNlRWxhc3RpY0luPWFpLHQuZWFzZUVsYXN0aWNPdXQ9dWksdC5lYXNlRWxhc3RpY0luT3V0PWZpLHQuYmxvYj1mdW5jdGlvbih0LG4pe3JldHVybiBmZXRjaCh0LG4pLnRoZW4oWW8pfSx0LmJ1ZmZlcj1mdW5jdGlvbih0LG4pe3JldHVybiBmZXRjaCh0LG4pLnRoZW4oQm8pfSx0LmRzdj1mdW5jdGlvbih0LG4sZSxyKXszPT09YXJndW1lbnRzLmxlbmd0aCYmImZ1bmN0aW9uIj09dHlwZW9mIGUmJihyPWUsZT12b2lkIDApO3ZhciBpPUVvKHQpO3JldHVybiBJbyhuLGUpLnRoZW4oZnVuY3Rpb24odCl7cmV0dXJuIGkucGFyc2UodCxyKX0pfSx0LmNzdj1qbyx0LnRzdj1Ybyx0LmltYWdlPWZ1bmN0aW9uKHQsbil7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGUscil7dmFyIGk9bmV3IEltYWdlO2Zvcih2YXIgbyBpbiBuKWlbb109bltvXTtpLm9uZXJyb3I9cixpLm9ubG9hZD1mdW5jdGlvbigpe2UoaSl9LGkuc3JjPXR9KX0sdC5qc29uPWZ1bmN0aW9uKHQsbil7cmV0dXJuIGZldGNoKHQsbikudGhlbihHbyl9LHQudGV4dD1Jbyx0LnhtbD0kbyx0Lmh0bWw9V28sdC5zdmc9Wm8sdC5mb3JjZUNlbnRlcj1mdW5jdGlvbih0LG4pe3ZhciBlO2Z1bmN0aW9uIHIoKXt2YXIgcixpLG89ZS5sZW5ndGgsYT0wLHU9MDtmb3Iocj0wO3I8bzsrK3IpYSs9KGk9ZVtyXSkueCx1Kz1pLnk7Zm9yKGE9YS9vLXQsdT11L28tbixyPTA7cjxvOysrcikoaT1lW3JdKS54LT1hLGkueS09dX1yZXR1cm4gbnVsbD09dCYmKHQ9MCksbnVsbD09biYmKG49MCksci5pbml0aWFsaXplPWZ1bmN0aW9uKHQpe2U9dH0sci54PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PStuLHIpOnR9LHIueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0rdCxyKTpufSxyfSx0LmZvcmNlQ29sbGlkZT1mdW5jdGlvbih0KXt2YXIgbixlLHI9MSxpPTE7ZnVuY3Rpb24gbygpe2Zvcih2YXIgdCxvLHUsZixjLHMsbCxoPW4ubGVuZ3RoLGQ9MDtkPGk7KytkKWZvcihvPXJhKG4sdWEsZmEpLnZpc2l0QWZ0ZXIoYSksdD0wO3Q8aDsrK3QpdT1uW3RdLHM9ZVt1LmluZGV4XSxsPXMqcyxmPXUueCt1LnZ4LGM9dS55K3Uudnksby52aXNpdChwKTtmdW5jdGlvbiBwKHQsbixlLGksbyl7dmFyIGE9dC5kYXRhLGg9dC5yLGQ9cytoO2lmKCFhKXJldHVybiBuPmYrZHx8aTxmLWR8fGU+YytkfHxvPGMtZDtpZihhLmluZGV4PnUuaW5kZXgpe3ZhciBwPWYtYS54LWEudngsdj1jLWEueS1hLnZ5LGc9cCpwK3YqdjtnPGQqZCYmKDA9PT1wJiYoZys9KHA9Sm8oKSkqcCksMD09PXYmJihnKz0odj1KbygpKSp2KSxnPShkLShnPU1hdGguc3FydChnKSkpL2cqcix1LnZ4Kz0ocCo9ZykqKGQ9KGgqPWgpLyhsK2gpKSx1LnZ5Kz0odio9ZykqZCxhLnZ4LT1wKihkPTEtZCksYS52eS09dipkKX19fWZ1bmN0aW9uIGEodCl7aWYodC5kYXRhKXJldHVybiB0LnI9ZVt0LmRhdGEuaW5kZXhdO2Zvcih2YXIgbj10LnI9MDtuPDQ7KytuKXRbbl0mJnRbbl0ucj50LnImJih0LnI9dFtuXS5yKX1mdW5jdGlvbiB1KCl7aWYobil7dmFyIHIsaSxvPW4ubGVuZ3RoO2ZvcihlPW5ldyBBcnJheShvKSxyPTA7cjxvOysrcilpPW5bcl0sZVtpLmluZGV4XT0rdChpLHIsbil9fXJldHVybiJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1RbyhudWxsPT10PzE6K3QpKSxvLmluaXRpYWxpemU9ZnVuY3Rpb24odCl7bj10LHUoKX0sby5pdGVyYXRpb25zPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSt0LG8pOml9LG8uc3RyZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9K3Qsbyk6cn0sby5yYWRpdXM9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIG4/bjpRbygrbiksdSgpLG8pOnR9LG99LHQuZm9yY2VMaW5rPWZ1bmN0aW9uKHQpe3ZhciBuLGUscixpLG8sYT1jYSx1PWZ1bmN0aW9uKHQpe3JldHVybiAxL01hdGgubWluKGlbdC5zb3VyY2UuaW5kZXhdLGlbdC50YXJnZXQuaW5kZXhdKX0sZj1RbygzMCksYz0xO2Z1bmN0aW9uIHMocil7Zm9yKHZhciBpPTAsYT10Lmxlbmd0aDtpPGM7KytpKWZvcih2YXIgdSxmLHMsbCxoLGQscCx2PTA7djxhOysrdilmPSh1PXRbdl0pLnNvdXJjZSxsPShzPXUudGFyZ2V0KS54K3MudngtZi54LWYudnh8fEpvKCksaD1zLnkrcy52eS1mLnktZi52eXx8Sm8oKSxsKj1kPSgoZD1NYXRoLnNxcnQobCpsK2gqaCkpLWVbdl0pL2QqcipuW3ZdLGgqPWQscy52eC09bCoocD1vW3ZdKSxzLnZ5LT1oKnAsZi52eCs9bCoocD0xLXApLGYudnkrPWgqcH1mdW5jdGlvbiBsKCl7aWYocil7dmFyIHUsZixjPXIubGVuZ3RoLHM9dC5sZW5ndGgsbD1LaShyLGEpO2Zvcih1PTAsaT1uZXcgQXJyYXkoYyk7dTxzOysrdSkoZj10W3VdKS5pbmRleD11LCJvYmplY3QiIT10eXBlb2YgZi5zb3VyY2UmJihmLnNvdXJjZT1zYShsLGYuc291cmNlKSksIm9iamVjdCIhPXR5cGVvZiBmLnRhcmdldCYmKGYudGFyZ2V0PXNhKGwsZi50YXJnZXQpKSxpW2Yuc291cmNlLmluZGV4XT0oaVtmLnNvdXJjZS5pbmRleF18fDApKzEsaVtmLnRhcmdldC5pbmRleF09KGlbZi50YXJnZXQuaW5kZXhdfHwwKSsxO2Zvcih1PTAsbz1uZXcgQXJyYXkocyk7dTxzOysrdSlmPXRbdV0sb1t1XT1pW2Yuc291cmNlLmluZGV4XS8oaVtmLnNvdXJjZS5pbmRleF0raVtmLnRhcmdldC5pbmRleF0pO249bmV3IEFycmF5KHMpLGgoKSxlPW5ldyBBcnJheShzKSxkKCl9fWZ1bmN0aW9uIGgoKXtpZihyKWZvcih2YXIgZT0wLGk9dC5sZW5ndGg7ZTxpOysrZSluW2VdPSt1KHRbZV0sZSx0KX1mdW5jdGlvbiBkKCl7aWYocilmb3IodmFyIG49MCxpPXQubGVuZ3RoO248aTsrK24pZVtuXT0rZih0W25dLG4sdCl9cmV0dXJuIG51bGw9PXQmJih0PVtdKSxzLmluaXRpYWxpemU9ZnVuY3Rpb24odCl7cj10LGwoKX0scy5saW5rcz1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1uLGwoKSxzKTp0fSxzLmlkPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPXQscyk6YX0scy5pdGVyYXRpb25zPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPSt0LHMpOmN9LHMuc3RyZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpRbygrdCksaCgpLHMpOnV9LHMuZGlzdGFuY2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpRbygrdCksZCgpLHMpOmZ9LHN9LHQuZm9yY2VNYW55Qm9keT1mdW5jdGlvbigpe3ZhciB0LG4sZSxyLGk9UW8oLTMwKSxvPTEsYT0xLzAsdT0uODE7ZnVuY3Rpb24gZihyKXt2YXIgaSxvPXQubGVuZ3RoLGE9cmEodCxsYSxoYSkudmlzaXRBZnRlcihzKTtmb3IoZT1yLGk9MDtpPG87KytpKW49dFtpXSxhLnZpc2l0KGwpfWZ1bmN0aW9uIGMoKXtpZih0KXt2YXIgbixlLG89dC5sZW5ndGg7Zm9yKHI9bmV3IEFycmF5KG8pLG49MDtuPG87KytuKWU9dFtuXSxyW2UuaW5kZXhdPStpKGUsbix0KX19ZnVuY3Rpb24gcyh0KXt2YXIgbixlLGksbyxhLHU9MCxmPTA7aWYodC5sZW5ndGgpe2ZvcihpPW89YT0wO2E8NDsrK2EpKG49dFthXSkmJihlPU1hdGguYWJzKG4udmFsdWUpKSYmKHUrPW4udmFsdWUsZis9ZSxpKz1lKm4ueCxvKz1lKm4ueSk7dC54PWkvZix0Lnk9by9mfWVsc2V7KG49dCkueD1uLmRhdGEueCxuLnk9bi5kYXRhLnk7ZG97dSs9cltuLmRhdGEuaW5kZXhdfXdoaWxlKG49bi5uZXh0KX10LnZhbHVlPXV9ZnVuY3Rpb24gbCh0LGksZixjKXtpZighdC52YWx1ZSlyZXR1cm4hMDt2YXIgcz10Lngtbi54LGw9dC55LW4ueSxoPWMtaSxkPXMqcytsKmw7aWYoaCpoL3U8ZClyZXR1cm4gZDxhJiYoMD09PXMmJihkKz0ocz1KbygpKSpzKSwwPT09bCYmKGQrPShsPUpvKCkpKmwpLGQ8byYmKGQ9TWF0aC5zcXJ0KG8qZCkpLG4udngrPXMqdC52YWx1ZSplL2Qsbi52eSs9bCp0LnZhbHVlKmUvZCksITA7aWYoISh0Lmxlbmd0aHx8ZD49YSkpeyh0LmRhdGEhPT1ufHx0Lm5leHQpJiYoMD09PXMmJihkKz0ocz1KbygpKSpzKSwwPT09bCYmKGQrPShsPUpvKCkpKmwpLGQ8byYmKGQ9TWF0aC5zcXJ0KG8qZCkpKTtkb3t0LmRhdGEhPT1uJiYoaD1yW3QuZGF0YS5pbmRleF0qZS9kLG4udngrPXMqaCxuLnZ5Kz1sKmgpfXdoaWxlKHQ9dC5uZXh0KX19cmV0dXJuIGYuaW5pdGlhbGl6ZT1mdW5jdGlvbihuKXt0PW4sYygpfSxmLnN0cmVuZ3RoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6UW8oK3QpLGMoKSxmKTppfSxmLmRpc3RhbmNlTWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPXQqdCxmKTpNYXRoLnNxcnQobyl9LGYuZGlzdGFuY2VNYXg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9dCp0LGYpOk1hdGguc3FydChhKX0sZi50aGV0YT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT10KnQsZik6TWF0aC5zcXJ0KHUpfSxmfSx0LmZvcmNlUmFkaWFsPWZ1bmN0aW9uKHQsbixlKXt2YXIgcixpLG8sYT1RbyguMSk7ZnVuY3Rpb24gdSh0KXtmb3IodmFyIGE9MCx1PXIubGVuZ3RoO2E8dTsrK2Epe3ZhciBmPXJbYV0sYz1mLngtbnx8MWUtNixzPWYueS1lfHwxZS02LGw9TWF0aC5zcXJ0KGMqYytzKnMpLGg9KG9bYV0tbCkqaVthXSp0L2w7Zi52eCs9YypoLGYudnkrPXMqaH19ZnVuY3Rpb24gZigpe2lmKHIpe3ZhciBuLGU9ci5sZW5ndGg7Zm9yKGk9bmV3IEFycmF5KGUpLG89bmV3IEFycmF5KGUpLG49MDtuPGU7KytuKW9bbl09K3QocltuXSxuLHIpLGlbbl09aXNOYU4ob1tuXSk/MDorYShyW25dLG4scil9fXJldHVybiJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1RbygrdCkpLG51bGw9PW4mJihuPTApLG51bGw9PWUmJihlPTApLHUuaW5pdGlhbGl6ZT1mdW5jdGlvbih0KXtyPXQsZigpfSx1LnN0cmVuZ3RoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6UW8oK3QpLGYoKSx1KTphfSx1LnJhZGl1cz1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uOlFvKCtuKSxmKCksdSk6dH0sdS54PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSt0LHUpOm59LHUueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0rdCx1KTplfSx1fSx0LmZvcmNlU2ltdWxhdGlvbj1mdW5jdGlvbih0KXt2YXIgbixlPTEscj0uMDAxLGk9MS1NYXRoLnBvdyhyLDEvMzAwKSxvPTAsYT0uNix1PUtpKCksZj11cihzKSxjPUkoInRpY2siLCJlbmQiKTtmdW5jdGlvbiBzKCl7bCgpLGMuY2FsbCgidGljayIsbiksZTxyJiYoZi5zdG9wKCksYy5jYWxsKCJlbmQiLG4pKX1mdW5jdGlvbiBsKCl7dmFyIG4scixmPXQubGVuZ3RoO2ZvcihlKz0oby1lKSppLHUuZWFjaChmdW5jdGlvbih0KXt0KGUpfSksbj0wO248ZjsrK24pbnVsbD09KHI9dFtuXSkuZng/ci54Kz1yLnZ4Kj1hOihyLng9ci5meCxyLnZ4PTApLG51bGw9PXIuZnk/ci55Kz1yLnZ5Kj1hOihyLnk9ci5meSxyLnZ5PTApfWZ1bmN0aW9uIGgoKXtmb3IodmFyIG4sZT0wLHI9dC5sZW5ndGg7ZTxyOysrZSl7aWYoKG49dFtlXSkuaW5kZXg9ZSxpc05hTihuLngpfHxpc05hTihuLnkpKXt2YXIgaT1kYSpNYXRoLnNxcnQoZSksbz1lKnBhO24ueD1pKk1hdGguY29zKG8pLG4ueT1pKk1hdGguc2luKG8pfShpc05hTihuLnZ4KXx8aXNOYU4obi52eSkpJiYobi52eD1uLnZ5PTApfX1mdW5jdGlvbiBkKG4pe3JldHVybiBuLmluaXRpYWxpemUmJm4uaW5pdGlhbGl6ZSh0KSxufXJldHVybiBudWxsPT10JiYodD1bXSksaCgpLG49e3RpY2s6bCxyZXN0YXJ0OmZ1bmN0aW9uKCl7cmV0dXJuIGYucmVzdGFydChzKSxufSxzdG9wOmZ1bmN0aW9uKCl7cmV0dXJuIGYuc3RvcCgpLG59LG5vZGVzOmZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PWUsaCgpLHUuZWFjaChkKSxuKTp0fSxhbHBoYTpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0rdCxuKTplfSxhbHBoYU1pbjpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0rdCxuKTpyfSxhbHBoYURlY2F5OmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSt0LG4pOitpfSxhbHBoYVRhcmdldDpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0rdCxuKTpvfSx2ZWxvY2l0eURlY2F5OmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPTEtdCxuKToxLWF9LGZvcmNlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT8obnVsbD09ZT91LnJlbW92ZSh0KTp1LnNldCh0LGQoZSkpLG4pOnUuZ2V0KHQpfSxmaW5kOmZ1bmN0aW9uKG4sZSxyKXt2YXIgaSxvLGEsdSxmLGM9MCxzPXQubGVuZ3RoO2ZvcihudWxsPT1yP3I9MS8wOnIqPXIsYz0wO2M8czsrK2MpKGE9KGk9bi0odT10W2NdKS54KSppKyhvPWUtdS55KSpvKTxyJiYoZj11LHI9YSk7cmV0dXJuIGZ9LG9uOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT8oYy5vbih0LGUpLG4pOmMub24odCl9fX0sdC5mb3JjZVg9ZnVuY3Rpb24odCl7dmFyIG4sZSxyLGk9UW8oLjEpO2Z1bmN0aW9uIG8odCl7Zm9yKHZhciBpLG89MCxhPW4ubGVuZ3RoO288YTsrK28pKGk9bltvXSkudngrPShyW29dLWkueCkqZVtvXSp0fWZ1bmN0aW9uIGEoKXtpZihuKXt2YXIgbyxhPW4ubGVuZ3RoO2ZvcihlPW5ldyBBcnJheShhKSxyPW5ldyBBcnJheShhKSxvPTA7bzxhOysrbyllW29dPWlzTmFOKHJbb109K3QobltvXSxvLG4pKT8wOitpKG5bb10sbyxuKX19cmV0dXJuImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PVFvKG51bGw9PXQ/MDordCkpLG8uaW5pdGlhbGl6ZT1mdW5jdGlvbih0KXtuPXQsYSgpfSxvLnN0cmVuZ3RoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6UW8oK3QpLGEoKSxvKTppfSxvLng9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIG4/bjpRbygrbiksYSgpLG8pOnR9LG99LHQuZm9yY2VZPWZ1bmN0aW9uKHQpe3ZhciBuLGUscixpPVFvKC4xKTtmdW5jdGlvbiBvKHQpe2Zvcih2YXIgaSxvPTAsYT1uLmxlbmd0aDtvPGE7KytvKShpPW5bb10pLnZ5Kz0ocltvXS1pLnkpKmVbb10qdH1mdW5jdGlvbiBhKCl7aWYobil7dmFyIG8sYT1uLmxlbmd0aDtmb3IoZT1uZXcgQXJyYXkoYSkscj1uZXcgQXJyYXkoYSksbz0wO288YTsrK28pZVtvXT1pc05hTihyW29dPSt0KG5bb10sbyxuKSk/MDoraShuW29dLG8sbil9fXJldHVybiJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1RbyhudWxsPT10PzA6K3QpKSxvLmluaXRpYWxpemU9ZnVuY3Rpb24odCl7bj10LGEoKX0sby5zdHJlbmd0aD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OlFvKCt0KSxhKCksbyk6aX0sby55PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBuP246UW8oK24pLGEoKSxvKTp0fSxvfSx0LmZvcm1hdERlZmF1bHRMb2NhbGU9U2EsdC5mb3JtYXRMb2NhbGU9TmEsdC5mb3JtYXRTcGVjaWZpZXI9YmEsdC5wcmVjaXNpb25GaXhlZD1FYSx0LnByZWNpc2lvblByZWZpeD1rYSx0LnByZWNpc2lvblJvdW5kPUNhLHQuZ2VvQXJlYT1mdW5jdGlvbih0KXtyZXR1cm4geXUucmVzZXQoKSxzdSh0LF91KSwyKnl1fSx0Lmdlb0JvdW5kcz1mdW5jdGlvbih0KXt2YXIgbixlLHIsaSxvLGEsdTtpZihSdT16dT0tKEN1PVB1PTEvMCksT3U9W10sc3UodCxyZiksZT1PdS5sZW5ndGgpe2ZvcihPdS5zb3J0KGRmKSxuPTEsbz1bcj1PdVswXV07bjxlOysrbilwZihyLChpPU91W25dKVswXSl8fHBmKHIsaVsxXSk/KGhmKHJbMF0saVsxXSk+aGYoclswXSxyWzFdKSYmKHJbMV09aVsxXSksaGYoaVswXSxyWzFdKT5oZihyWzBdLHJbMV0pJiYoclswXT1pWzBdKSk6by5wdXNoKHI9aSk7Zm9yKGE9LTEvMCxuPTAscj1vW2U9by5sZW5ndGgtMV07bjw9ZTtyPWksKytuKWk9b1tuXSwodT1oZihyWzFdLGlbMF0pKT5hJiYoYT11LEN1PWlbMF0senU9clsxXSl9cmV0dXJuIE91PVl1PW51bGwsQ3U9PT0xLzB8fFB1PT09MS8wP1tbTmFOLE5hTl0sW05hTixOYU5dXTpbW0N1LFB1XSxbenUsUnVdXX0sdC5nZW9DZW50cm9pZD1mdW5jdGlvbih0KXtCdT1GdT1JdT1IdT1qdT1YdT1HdT1WdT0kdT1XdT1adT0wLHN1KHQsdmYpO3ZhciBuPSR1LGU9V3Uscj1adSxpPW4qbitlKmUrcipyO3JldHVybiBpPFVhJiYobj1YdSxlPUd1LHI9VnUsRnU8RGEmJihuPUl1LGU9SHUscj1qdSksKGk9bipuK2UqZStyKnIpPFVhKT9bTmFOLE5hTl06W1hhKGUsbikqRmEsZXUoci9LYShpKSkqRmFdfSx0Lmdlb0NpcmNsZT1mdW5jdGlvbigpe3ZhciB0LG4sZT1OZihbMCwwXSkscj1OZig5MCksaT1OZig2KSxvPXtwb2ludDpmdW5jdGlvbihlLHIpe3QucHVzaChlPW4oZSxyKSksZVswXSo9RmEsZVsxXSo9RmF9fTtmdW5jdGlvbiBhKCl7dmFyIGE9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyksdT1yLmFwcGx5KHRoaXMsYXJndW1lbnRzKSpJYSxmPWkuYXBwbHkodGhpcyxhcmd1bWVudHMpKklhO3JldHVybiB0PVtdLG49a2YoLWFbMF0qSWEsLWFbMV0qSWEsMCkuaW52ZXJ0LExmKG8sdSxmLDEpLGE9e3R5cGU6IlBvbHlnb24iLGNvb3JkaW5hdGVzOlt0XX0sdD1uPW51bGwsYX1yZXR1cm4gYS5jZW50ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpOZihbK3RbMF0sK3RbMV1dKSxhKTplfSxhLnJhZGl1cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0iZnVuY3Rpb24iPT10eXBlb2YgdD90Ok5mKCt0KSxhKTpyfSxhLnByZWNpc2lvbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90Ok5mKCt0KSxhKTppfSxhfSx0Lmdlb0NsaXBBbnRpbWVyaWRpYW49R2YsdC5nZW9DbGlwQ2lyY2xlPVZmLHQuZ2VvQ2xpcEV4dGVudD1mdW5jdGlvbigpe3ZhciB0LG4sZSxyPTAsaT0wLG89OTYwLGE9NTAwO3JldHVybiBlPXtzdHJlYW06ZnVuY3Rpb24oZSl7cmV0dXJuIHQmJm49PT1lP3Q6dD1aZihyLGksbyxhKShuPWUpfSxleHRlbnQ6ZnVuY3Rpb24odSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9K3VbMF1bMF0saT0rdVswXVsxXSxvPSt1WzFdWzBdLGE9K3VbMV1bMV0sdD1uPW51bGwsZSk6W1tyLGldLFtvLGFdXX19fSx0Lmdlb0NsaXBSZWN0YW5nbGU9WmYsdC5nZW9Db250YWlucz1mdW5jdGlvbih0LG4pe3JldHVybih0JiZjYy5oYXNPd25Qcm9wZXJ0eSh0LnR5cGUpP2NjW3QudHlwZV06bGMpKHQsbil9LHQuZ2VvRGlzdGFuY2U9ZmMsdC5nZW9HcmF0aWN1bGU9YmMsdC5nZW9HcmF0aWN1bGUxMD1mdW5jdGlvbigpe3JldHVybiBiYygpKCl9LHQuZ2VvSW50ZXJwb2xhdGU9ZnVuY3Rpb24odCxuKXt2YXIgZT10WzBdKklhLHI9dFsxXSpJYSxpPW5bMF0qSWEsbz1uWzFdKklhLGE9R2EociksdT1RYShyKSxmPUdhKG8pLGM9UWEobykscz1hKkdhKGUpLGw9YSpRYShlKSxoPWYqR2EoaSksZD1mKlFhKGkpLHA9MipldShLYShydShvLXIpK2EqZipydShpLWUpKSksdj1RYShwKSxnPXA/ZnVuY3Rpb24odCl7dmFyIG49UWEodCo9cCkvdixlPVFhKHAtdCkvdixyPWUqcytuKmgsaT1lKmwrbipkLG89ZSp1K24qYztyZXR1cm5bWGEoaSxyKSpGYSxYYShvLEthKHIqcitpKmkpKSpGYV19OmZ1bmN0aW9uKCl7cmV0dXJuW2UqRmEscipGYV19O3JldHVybiBnLmRpc3RhbmNlPXAsZ30sdC5nZW9MZW5ndGg9b2MsdC5nZW9QYXRoPWZ1bmN0aW9uKHQsbil7dmFyIGUscixpPTQuNTtmdW5jdGlvbiBvKHQpe3JldHVybiB0JiYoImZ1bmN0aW9uIj09dHlwZW9mIGkmJnIucG9pbnRSYWRpdXMoK2kuYXBwbHkodGhpcyxhcmd1bWVudHMpKSxzdSh0LGUocikpKSxyLnJlc3VsdCgpfXJldHVybiBvLmFyZWE9ZnVuY3Rpb24odCl7cmV0dXJuIHN1KHQsZShTYykpLFNjLnJlc3VsdCgpfSxvLm1lYXN1cmU9ZnVuY3Rpb24odCl7cmV0dXJuIHN1KHQsZShkcykpLGRzLnJlc3VsdCgpfSxvLmJvdW5kcz1mdW5jdGlvbih0KXtyZXR1cm4gc3UodCxlKFVjKSksVWMucmVzdWx0KCl9LG8uY2VudHJvaWQ9ZnVuY3Rpb24odCl7cmV0dXJuIHN1KHQsZShaYykpLFpjLnJlc3VsdCgpfSxvLnByb2plY3Rpb249ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9bnVsbD09bj8odD1udWxsLG1jKToodD1uKS5zdHJlYW0sbyk6dH0sby5jb250ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPW51bGw9PXQ/KG49bnVsbCxuZXcgZ3MpOm5ldyBhcyhuPXQpLCJmdW5jdGlvbiIhPXR5cGVvZiBpJiZyLnBvaW50UmFkaXVzKGkpLG8pOm59LG8ucG9pbnRSYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDooci5wb2ludFJhZGl1cygrdCksK3QpLG8pOml9LG8ucHJvamVjdGlvbih0KS5jb250ZXh0KG4pfSx0Lmdlb0FsYmVycz1Ecyx0Lmdlb0FsYmVyc1VzYT1mdW5jdGlvbigpe3ZhciB0LG4sZSxyLGksbyxhPURzKCksdT1McygpLnJvdGF0ZShbMTU0LDBdKS5jZW50ZXIoWy0yLDU4LjVdKS5wYXJhbGxlbHMoWzU1LDY1XSksZj1McygpLnJvdGF0ZShbMTU3LDBdKS5jZW50ZXIoWy0zLDE5LjldKS5wYXJhbGxlbHMoWzgsMThdKSxjPXtwb2ludDpmdW5jdGlvbih0LG4pe289W3Qsbl19fTtmdW5jdGlvbiBzKHQpe3ZhciBuPXRbMF0sYT10WzFdO3JldHVybiBvPW51bGwsZS5wb2ludChuLGEpLG98fChyLnBvaW50KG4sYSksbyl8fChpLnBvaW50KG4sYSksbyl9ZnVuY3Rpb24gbCgpe3JldHVybiB0PW49bnVsbCxzfXJldHVybiBzLmludmVydD1mdW5jdGlvbih0KXt2YXIgbj1hLnNjYWxlKCksZT1hLnRyYW5zbGF0ZSgpLHI9KHRbMF0tZVswXSkvbixpPSh0WzFdLWVbMV0pL247cmV0dXJuKGk+PS4xMiYmaTwuMjM0JiZyPj0tLjQyNSYmcjwtLjIxND91Omk+PS4xNjYmJmk8LjIzNCYmcj49LS4yMTQmJnI8LS4xMTU/ZjphKS5pbnZlcnQodCl9LHMuc3RyZWFtPWZ1bmN0aW9uKGUpe3JldHVybiB0JiZuPT09ZT90OihyPVthLnN0cmVhbShuPWUpLHUuc3RyZWFtKGUpLGYuc3RyZWFtKGUpXSxpPXIubGVuZ3RoLHQ9e3BvaW50OmZ1bmN0aW9uKHQsbil7Zm9yKHZhciBlPS0xOysrZTxpOylyW2VdLnBvaW50KHQsbil9LHNwaGVyZTpmdW5jdGlvbigpe2Zvcih2YXIgdD0tMTsrK3Q8aTspclt0XS5zcGhlcmUoKX0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7Zm9yKHZhciB0PS0xOysrdDxpOylyW3RdLmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PS0xOysrdDxpOylyW3RdLmxpbmVFbmQoKX0scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7Zm9yKHZhciB0PS0xOysrdDxpOylyW3RdLnBvbHlnb25TdGFydCgpfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PS0xOysrdDxpOylyW3RdLnBvbHlnb25FbmQoKX19KTt2YXIgcixpfSxzLnByZWNpc2lvbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYS5wcmVjaXNpb24odCksdS5wcmVjaXNpb24odCksZi5wcmVjaXNpb24odCksbCgpKTphLnByZWNpc2lvbigpfSxzLnNjYWxlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhLnNjYWxlKHQpLHUuc2NhbGUoLjM1KnQpLGYuc2NhbGUodCkscy50cmFuc2xhdGUoYS50cmFuc2xhdGUoKSkpOmEuc2NhbGUoKX0scy50cmFuc2xhdGU9ZnVuY3Rpb24odCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGEudHJhbnNsYXRlKCk7dmFyIG49YS5zY2FsZSgpLG89K3RbMF0scz0rdFsxXTtyZXR1cm4gZT1hLnRyYW5zbGF0ZSh0KS5jbGlwRXh0ZW50KFtbby0uNDU1Km4scy0uMjM4Km5dLFtvKy40NTUqbixzKy4yMzgqbl1dKS5zdHJlYW0oYykscj11LnRyYW5zbGF0ZShbby0uMzA3Km4scysuMjAxKm5dKS5jbGlwRXh0ZW50KFtbby0uNDI1Km4rRGEscysuMTIqbitEYV0sW28tLjIxNCpuLURhLHMrLjIzNCpuLURhXV0pLnN0cmVhbShjKSxpPWYudHJhbnNsYXRlKFtvLS4yMDUqbixzKy4yMTIqbl0pLmNsaXBFeHRlbnQoW1tvLS4yMTQqbitEYSxzKy4xNjYqbitEYV0sW28tLjExNSpuLURhLHMrLjIzNCpuLURhXV0pLnN0cmVhbShjKSxsKCl9LHMuZml0RXh0ZW50PWZ1bmN0aW9uKHQsbil7cmV0dXJuIHhzKHMsdCxuKX0scy5maXRTaXplPWZ1bmN0aW9uKHQsbil7cmV0dXJuIHdzKHMsdCxuKX0scy5maXRXaWR0aD1mdW5jdGlvbih0LG4pe3JldHVybiBNcyhzLHQsbil9LHMuZml0SGVpZ2h0PWZ1bmN0aW9uKHQsbil7cmV0dXJuIEFzKHMsdCxuKX0scy5zY2FsZSgxMDcwKX0sdC5nZW9BemltdXRoYWxFcXVhbEFyZWE9ZnVuY3Rpb24oKXtyZXR1cm4gQ3MoT3MpLnNjYWxlKDEyNC43NSkuY2xpcEFuZ2xlKDE3OS45OTkpfSx0Lmdlb0F6aW11dGhhbEVxdWFsQXJlYVJhdz1Pcyx0Lmdlb0F6aW11dGhhbEVxdWlkaXN0YW50PWZ1bmN0aW9uKCl7cmV0dXJuIENzKFlzKS5zY2FsZSg3OS40MTg4KS5jbGlwQW5nbGUoMTc5Ljk5OSl9LHQuZ2VvQXppbXV0aGFsRXF1aWRpc3RhbnRSYXc9WXMsdC5nZW9Db25pY0NvbmZvcm1hbD1mdW5jdGlvbigpe3JldHVybiB6cyhIcykuc2NhbGUoMTA5LjUpLnBhcmFsbGVscyhbMzAsMzBdKX0sdC5nZW9Db25pY0NvbmZvcm1hbFJhdz1Icyx0Lmdlb0NvbmljRXF1YWxBcmVhPUxzLHQuZ2VvQ29uaWNFcXVhbEFyZWFSYXc9UnMsdC5nZW9Db25pY0VxdWlkaXN0YW50PWZ1bmN0aW9uKCl7cmV0dXJuIHpzKFhzKS5zY2FsZSgxMzEuMTU0KS5jZW50ZXIoWzAsMTMuOTM4OV0pfSx0Lmdlb0NvbmljRXF1aWRpc3RhbnRSYXc9WHMsdC5nZW9FcXVhbEVhcnRoPWZ1bmN0aW9uKCl7cmV0dXJuIENzKFFzKS5zY2FsZSgxNzcuMTU4KX0sdC5nZW9FcXVhbEVhcnRoUmF3PVFzLHQuZ2VvRXF1aXJlY3Rhbmd1bGFyPWZ1bmN0aW9uKCl7cmV0dXJuIENzKGpzKS5zY2FsZSgxNTIuNjMpfSx0Lmdlb0VxdWlyZWN0YW5ndWxhclJhdz1qcyx0Lmdlb0dub21vbmljPWZ1bmN0aW9uKCl7cmV0dXJuIENzKEpzKS5zY2FsZSgxNDQuMDQ5KS5jbGlwQW5nbGUoNjApfSx0Lmdlb0dub21vbmljUmF3PUpzLHQuZ2VvSWRlbnRpdHk9ZnVuY3Rpb24oKXt2YXIgdCxuLGUscixpLG8sYT0xLHU9MCxmPTAsYz0xLHM9MSxsPW1jLGg9bnVsbCxkPW1jO2Z1bmN0aW9uIHAoKXtyZXR1cm4gcj1pPW51bGwsb31yZXR1cm4gbz17c3RyZWFtOmZ1bmN0aW9uKHQpe3JldHVybiByJiZpPT09dD9yOnI9bChkKGk9dCkpfSxwb3N0Y2xpcDpmdW5jdGlvbihyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZD1yLGg9dD1uPWU9bnVsbCxwKCkpOmR9LGNsaXBFeHRlbnQ6ZnVuY3Rpb24ocil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGQ9bnVsbD09cj8oaD10PW49ZT1udWxsLG1jKTpaZihoPStyWzBdWzBdLHQ9K3JbMF1bMV0sbj0rclsxXVswXSxlPStyWzFdWzFdKSxwKCkpOm51bGw9PWg/bnVsbDpbW2gsdF0sW24sZV1dfSxzY2FsZTpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD1LcygoYT0rdCkqYyxhKnMsdSxmKSxwKCkpOmF9LHRyYW5zbGF0ZTpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD1LcyhhKmMsYSpzLHU9K3RbMF0sZj0rdFsxXSkscCgpKTpbdSxmXX0scmVmbGVjdFg6ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9S3MoYSooYz10Py0xOjEpLGEqcyx1LGYpLHAoKSk6YzwwfSxyZWZsZWN0WTpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD1LcyhhKmMsYSoocz10Py0xOjEpLHUsZikscCgpKTpzPDB9LGZpdEV4dGVudDpmdW5jdGlvbih0LG4pe3JldHVybiB4cyhvLHQsbil9LGZpdFNpemU6ZnVuY3Rpb24odCxuKXtyZXR1cm4gd3Mobyx0LG4pfSxmaXRXaWR0aDpmdW5jdGlvbih0LG4pe3JldHVybiBNcyhvLHQsbil9LGZpdEhlaWdodDpmdW5jdGlvbih0LG4pe3JldHVybiBBcyhvLHQsbil9fX0sdC5nZW9Qcm9qZWN0aW9uPUNzLHQuZ2VvUHJvamVjdGlvbk11dGF0b3I9UHMsdC5nZW9NZXJjYXRvcj1mdW5jdGlvbigpe3JldHVybiBGcyhCcykuc2NhbGUoOTYxL0JhKX0sdC5nZW9NZXJjYXRvclJhdz1Ccyx0Lmdlb05hdHVyYWxFYXJ0aDE9ZnVuY3Rpb24oKXtyZXR1cm4gQ3ModGwpLnNjYWxlKDE3NS4yOTUpfSx0Lmdlb05hdHVyYWxFYXJ0aDFSYXc9dGwsdC5nZW9PcnRob2dyYXBoaWM9ZnVuY3Rpb24oKXtyZXR1cm4gQ3MobmwpLnNjYWxlKDI0OS41KS5jbGlwQW5nbGUoOTArRGEpfSx0Lmdlb09ydGhvZ3JhcGhpY1Jhdz1ubCx0Lmdlb1N0ZXJlb2dyYXBoaWM9ZnVuY3Rpb24oKXtyZXR1cm4gQ3MoZWwpLnNjYWxlKDI1MCkuY2xpcEFuZ2xlKDE0Mil9LHQuZ2VvU3RlcmVvZ3JhcGhpY1Jhdz1lbCx0Lmdlb1RyYW5zdmVyc2VNZXJjYXRvcj1mdW5jdGlvbigpe3ZhciB0PUZzKHJsKSxuPXQuY2VudGVyLGU9dC5yb3RhdGU7cmV0dXJuIHQuY2VudGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP24oWy10WzFdLHRbMF1dKTpbKHQ9bigpKVsxXSwtdFswXV19LHQucm90YXRlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP2UoW3RbMF0sdFsxXSx0Lmxlbmd0aD4yP3RbMl0rOTA6OTBdKTpbKHQ9ZSgpKVswXSx0WzFdLHRbMl0tOTBdfSxlKFswLDAsOTBdKS5zY2FsZSgxNTkuMTU1KX0sdC5nZW9UcmFuc3ZlcnNlTWVyY2F0b3JSYXc9cmwsdC5nZW9Sb3RhdGlvbj1SZix0Lmdlb1N0cmVhbT1zdSx0Lmdlb1RyYW5zZm9ybT1mdW5jdGlvbih0KXtyZXR1cm57c3RyZWFtOl9zKHQpfX0sdC5jbHVzdGVyPWZ1bmN0aW9uKCl7dmFyIHQ9aWwsbj0xLGU9MSxyPSExO2Z1bmN0aW9uIGkoaSl7dmFyIG8sYT0wO2kuZWFjaEFmdGVyKGZ1bmN0aW9uKG4pe3ZhciBlPW4uY2hpbGRyZW47ZT8obi54PWZ1bmN0aW9uKHQpe3JldHVybiB0LnJlZHVjZShvbCwwKS90Lmxlbmd0aH0oZSksbi55PWZ1bmN0aW9uKHQpe3JldHVybiAxK3QucmVkdWNlKGFsLDApfShlKSk6KG4ueD1vP2ErPXQobixvKTowLG4ueT0wLG89bil9KTt2YXIgdT1mdW5jdGlvbih0KXtmb3IodmFyIG47bj10LmNoaWxkcmVuOyl0PW5bMF07cmV0dXJuIHR9KGkpLGY9ZnVuY3Rpb24odCl7Zm9yKHZhciBuO249dC5jaGlsZHJlbjspdD1uW24ubGVuZ3RoLTFdO3JldHVybiB0fShpKSxjPXUueC10KHUsZikvMixzPWYueCt0KGYsdSkvMjtyZXR1cm4gaS5lYWNoQWZ0ZXIocj9mdW5jdGlvbih0KXt0Lng9KHQueC1pLngpKm4sdC55PShpLnktdC55KSplfTpmdW5jdGlvbih0KXt0Lng9KHQueC1jKS8ocy1jKSpuLHQueT0oMS0oaS55P3QueS9pLnk6MSkpKmV9KX1yZXR1cm4gaS5zZXBhcmF0aW9uPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PW4saSk6dH0saS5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSExLG49K3RbMF0sZT0rdFsxXSxpKTpyP251bGw6W24sZV19LGkubm9kZVNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ITAsbj0rdFswXSxlPSt0WzFdLGkpOnI/W24sZV06bnVsbH0saX0sdC5oaWVyYXJjaHk9ZmwsdC5wYWNrPWZ1bmN0aW9uKCl7dmFyIHQ9bnVsbCxuPTEsZT0xLHI9RWw7ZnVuY3Rpb24gaShpKXtyZXR1cm4gaS54PW4vMixpLnk9ZS8yLHQ/aS5lYWNoQmVmb3JlKFBsKHQpKS5lYWNoQWZ0ZXIoemwociwuNSkpLmVhY2hCZWZvcmUoUmwoMSkpOmkuZWFjaEJlZm9yZShQbChDbCkpLmVhY2hBZnRlcih6bChFbCwxKSkuZWFjaEFmdGVyKHpsKHIsaS5yL01hdGgubWluKG4sZSkpKS5lYWNoQmVmb3JlKFJsKE1hdGgubWluKG4sZSkvKDIqaS5yKSkpLGl9cmV0dXJuIGkucmFkaXVzPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PW51bGw9PShlPW4pP251bGw6U2woZSksaSk6dDt2YXIgZX0saS5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSt0WzBdLGU9K3RbMV0saSk6W24sZV19LGkucGFkZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmtsKCt0KSxpKTpyfSxpfSx0LnBhY2tTaWJsaW5ncz1mdW5jdGlvbih0KXtyZXR1cm4gTmwodCksdH0sdC5wYWNrRW5jbG9zZT1wbCx0LnBhcnRpdGlvbj1mdW5jdGlvbigpe3ZhciB0PTEsbj0xLGU9MCxyPSExO2Z1bmN0aW9uIGkoaSl7dmFyIG89aS5oZWlnaHQrMTtyZXR1cm4gaS54MD1pLnkwPWUsaS54MT10LGkueTE9bi9vLGkuZWFjaEJlZm9yZShmdW5jdGlvbih0LG4pe3JldHVybiBmdW5jdGlvbihyKXtyLmNoaWxkcmVuJiZEbChyLHIueDAsdCooci5kZXB0aCsxKS9uLHIueDEsdCooci5kZXB0aCsyKS9uKTt2YXIgaT1yLngwLG89ci55MCxhPXIueDEtZSx1PXIueTEtZTthPGkmJihpPWE9KGkrYSkvMiksdTxvJiYobz11PShvK3UpLzIpLHIueDA9aSxyLnkwPW8sci54MT1hLHIueTE9dX19KG4sbykpLHImJmkuZWFjaEJlZm9yZShMbCksaX1yZXR1cm4gaS5yb3VuZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0hIXQsaSk6cn0saS5zaXplPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PStlWzBdLG49K2VbMV0saSk6W3Qsbl19LGkucGFkZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0rdCxpKTplfSxpfSx0LnN0cmF0aWZ5PWZ1bmN0aW9uKCl7dmFyIHQ9WWwsbj1CbDtmdW5jdGlvbiBlKGUpe3ZhciByLGksbyxhLHUsZixjLHM9ZS5sZW5ndGgsbD1uZXcgQXJyYXkocyksaD17fTtmb3IoaT0wO2k8czsrK2kpcj1lW2ldLHU9bFtpXT1uZXcgaGwociksbnVsbCE9KGY9dChyLGksZSkpJiYoZis9IiIpJiYoaFtjPVVsKyh1LmlkPWYpXT1jIGluIGg/T2w6dSk7Zm9yKGk9MDtpPHM7KytpKWlmKHU9bFtpXSxudWxsIT0oZj1uKGVbaV0saSxlKSkmJihmKz0iIikpe2lmKCEoYT1oW1VsK2ZdKSl0aHJvdyBuZXcgRXJyb3IoIm1pc3Npbmc6ICIrZik7aWYoYT09PU9sKXRocm93IG5ldyBFcnJvcigiYW1iaWd1b3VzOiAiK2YpO2EuY2hpbGRyZW4/YS5jaGlsZHJlbi5wdXNoKHUpOmEuY2hpbGRyZW49W3VdLHUucGFyZW50PWF9ZWxzZXtpZihvKXRocm93IG5ldyBFcnJvcigibXVsdGlwbGUgcm9vdHMiKTtvPXV9aWYoIW8pdGhyb3cgbmV3IEVycm9yKCJubyByb290Iik7aWYoby5wYXJlbnQ9cWwsby5lYWNoQmVmb3JlKGZ1bmN0aW9uKHQpe3QuZGVwdGg9dC5wYXJlbnQuZGVwdGgrMSwtLXN9KS5lYWNoQmVmb3JlKGxsKSxvLnBhcmVudD1udWxsLHM+MCl0aHJvdyBuZXcgRXJyb3IoImN5Y2xlIik7cmV0dXJuIG99cmV0dXJuIGUuaWQ9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9U2wobiksZSk6dH0sZS5wYXJlbnRJZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1TbCh0KSxlKTpufSxlfSx0LnRyZWU9ZnVuY3Rpb24oKXt2YXIgdD1GbCxuPTEsZT0xLHI9bnVsbDtmdW5jdGlvbiBpKGkpe3ZhciBmPWZ1bmN0aW9uKHQpe2Zvcih2YXIgbixlLHIsaSxvLGE9bmV3IEdsKHQsMCksdT1bYV07bj11LnBvcCgpOylpZihyPW4uXy5jaGlsZHJlbilmb3Iobi5jaGlsZHJlbj1uZXcgQXJyYXkobz1yLmxlbmd0aCksaT1vLTE7aT49MDstLWkpdS5wdXNoKGU9bi5jaGlsZHJlbltpXT1uZXcgR2wocltpXSxpKSksZS5wYXJlbnQ9bjtyZXR1cm4oYS5wYXJlbnQ9bmV3IEdsKG51bGwsMCkpLmNoaWxkcmVuPVthXSxhfShpKTtpZihmLmVhY2hBZnRlcihvKSxmLnBhcmVudC5tPS1mLnosZi5lYWNoQmVmb3JlKGEpLHIpaS5lYWNoQmVmb3JlKHUpO2Vsc2V7dmFyIGM9aSxzPWksbD1pO2kuZWFjaEJlZm9yZShmdW5jdGlvbih0KXt0Lng8Yy54JiYoYz10KSx0Lng+cy54JiYocz10KSx0LmRlcHRoPmwuZGVwdGgmJihsPXQpfSk7dmFyIGg9Yz09PXM/MTp0KGMscykvMixkPWgtYy54LHA9bi8ocy54K2grZCksdj1lLyhsLmRlcHRofHwxKTtpLmVhY2hCZWZvcmUoZnVuY3Rpb24odCl7dC54PSh0LngrZCkqcCx0Lnk9dC5kZXB0aCp2fSl9cmV0dXJuIGl9ZnVuY3Rpb24gbyhuKXt2YXIgZT1uLmNoaWxkcmVuLHI9bi5wYXJlbnQuY2hpbGRyZW4saT1uLmk/cltuLmktMV06bnVsbDtpZihlKXshZnVuY3Rpb24odCl7Zm9yKHZhciBuLGU9MCxyPTAsaT10LmNoaWxkcmVuLG89aS5sZW5ndGg7LS1vPj0wOykobj1pW29dKS56Kz1lLG4ubSs9ZSxlKz1uLnMrKHIrPW4uYyl9KG4pO3ZhciBvPShlWzBdLnorZVtlLmxlbmd0aC0xXS56KS8yO2k/KG4uej1pLnordChuLl8saS5fKSxuLm09bi56LW8pOm4uej1vfWVsc2UgaSYmKG4uej1pLnordChuLl8saS5fKSk7bi5wYXJlbnQuQT1mdW5jdGlvbihuLGUscil7aWYoZSl7Zm9yKHZhciBpLG89bixhPW4sdT1lLGY9by5wYXJlbnQuY2hpbGRyZW5bMF0sYz1vLm0scz1hLm0sbD11Lm0saD1mLm07dT1IbCh1KSxvPUlsKG8pLHUmJm87KWY9SWwoZiksKGE9SGwoYSkpLmE9biwoaT11LnorbC1vLnotYyt0KHUuXyxvLl8pKT4wJiYoamwoWGwodSxuLHIpLG4saSksYys9aSxzKz1pKSxsKz11Lm0sYys9by5tLGgrPWYubSxzKz1hLm07dSYmIUhsKGEpJiYoYS50PXUsYS5tKz1sLXMpLG8mJiFJbChmKSYmKGYudD1vLGYubSs9Yy1oLHI9bil9cmV0dXJuIHJ9KG4saSxuLnBhcmVudC5BfHxyWzBdKX1mdW5jdGlvbiBhKHQpe3QuXy54PXQueit0LnBhcmVudC5tLHQubSs9dC5wYXJlbnQubX1mdW5jdGlvbiB1KHQpe3QueCo9bix0Lnk9dC5kZXB0aCplfXJldHVybiBpLnNlcGFyYXRpb249ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9bixpKTp0fSxpLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ITEsbj0rdFswXSxlPSt0WzFdLGkpOnI/bnVsbDpbbixlXX0saS5ub2RlU2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0hMCxuPSt0WzBdLGU9K3RbMV0saSk6cj9bbixlXTpudWxsfSxpfSx0LnRyZWVtYXA9ZnVuY3Rpb24oKXt2YXIgdD1abCxuPSExLGU9MSxyPTEsaT1bMF0sbz1FbCxhPUVsLHU9RWwsZj1FbCxjPUVsO2Z1bmN0aW9uIHModCl7cmV0dXJuIHQueDA9dC55MD0wLHQueDE9ZSx0LnkxPXIsdC5lYWNoQmVmb3JlKGwpLGk9WzBdLG4mJnQuZWFjaEJlZm9yZShMbCksdH1mdW5jdGlvbiBsKG4pe3ZhciBlPWlbbi5kZXB0aF0scj1uLngwK2Uscz1uLnkwK2UsbD1uLngxLWUsaD1uLnkxLWU7bDxyJiYocj1sPShyK2wpLzIpLGg8cyYmKHM9aD0ocytoKS8yKSxuLngwPXIsbi55MD1zLG4ueDE9bCxuLnkxPWgsbi5jaGlsZHJlbiYmKGU9aVtuLmRlcHRoKzFdPW8obikvMixyKz1jKG4pLWUscys9YShuKS1lLChsLT11KG4pLWUpPHImJihyPWw9KHIrbCkvMiksKGgtPWYobiktZSk8cyYmKHM9aD0ocytoKS8yKSx0KG4scixzLGwsaCkpfXJldHVybiBzLnJvdW5kPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSEhdCxzKTpufSxzLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9K3RbMF0scj0rdFsxXSxzKTpbZSxyXX0scy50aWxlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PVNsKG4pLHMpOnR9LHMucGFkZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9zLnBhZGRpbmdJbm5lcih0KS5wYWRkaW5nT3V0ZXIodCk6cy5wYWRkaW5nSW5uZXIoKX0scy5wYWRkaW5nSW5uZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDprbCgrdCkscyk6b30scy5wYWRkaW5nT3V0ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/cy5wYWRkaW5nVG9wKHQpLnBhZGRpbmdSaWdodCh0KS5wYWRkaW5nQm90dG9tKHQpLnBhZGRpbmdMZWZ0KHQpOnMucGFkZGluZ1RvcCgpfSxzLnBhZGRpbmdUb3A9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDprbCgrdCkscyk6YX0scy5wYWRkaW5nUmlnaHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDprbCgrdCkscyk6dX0scy5wYWRkaW5nQm90dG9tPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6a2woK3QpLHMpOmZ9LHMucGFkZGluZ0xlZnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDprbCgrdCkscyk6Y30sc30sdC50cmVlbWFwQmluYXJ5PWZ1bmN0aW9uKHQsbixlLHIsaSl7dmFyIG8sYSx1PXQuY2hpbGRyZW4sZj11Lmxlbmd0aCxjPW5ldyBBcnJheShmKzEpO2ZvcihjWzBdPWE9bz0wO288ZjsrK28pY1tvKzFdPWErPXVbb10udmFsdWU7IWZ1bmN0aW9uIHQobixlLHIsaSxvLGEsZil7aWYobj49ZS0xKXt2YXIgcz11W25dO3JldHVybiBzLngwPWkscy55MD1vLHMueDE9YSx2b2lkKHMueTE9Zil9Zm9yKHZhciBsPWNbbl0saD1yLzIrbCxkPW4rMSxwPWUtMTtkPHA7KXt2YXIgdj1kK3A+Pj4xO2Nbdl08aD9kPXYrMTpwPXZ9aC1jW2QtMV08Y1tkXS1oJiZuKzE8ZCYmLS1kO3ZhciBnPWNbZF0tbCx5PXItZztpZihhLWk+Zi1vKXt2YXIgXz0oaSp5K2EqZykvcjt0KG4sZCxnLGksbyxfLGYpLHQoZCxlLHksXyxvLGEsZil9ZWxzZXt2YXIgYj0obyp5K2YqZykvcjt0KG4sZCxnLGksbyxhLGIpLHQoZCxlLHksaSxiLGEsZil9fSgwLGYsdC52YWx1ZSxuLGUscixpKX0sdC50cmVlbWFwRGljZT1EbCx0LnRyZWVtYXBTbGljZT1WbCx0LnRyZWVtYXBTbGljZURpY2U9ZnVuY3Rpb24odCxuLGUscixpKXsoMSZ0LmRlcHRoP1ZsOkRsKSh0LG4sZSxyLGkpfSx0LnRyZWVtYXBTcXVhcmlmeT1abCx0LnRyZWVtYXBSZXNxdWFyaWZ5PVFsLHQuaW50ZXJwb2xhdGU9bWUsdC5pbnRlcnBvbGF0ZUFycmF5PWRlLHQuaW50ZXJwb2xhdGVCYXNpcz1lZSx0LmludGVycG9sYXRlQmFzaXNDbG9zZWQ9cmUsdC5pbnRlcnBvbGF0ZURhdGU9cGUsdC5pbnRlcnBvbGF0ZURpc2NyZXRlPWZ1bmN0aW9uKHQpe3ZhciBuPXQubGVuZ3RoO3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdFtNYXRoLm1heCgwLE1hdGgubWluKG4tMSxNYXRoLmZsb29yKGUqbikpKV19fSx0LmludGVycG9sYXRlSHVlPWZ1bmN0aW9uKHQsbil7dmFyIGU9YWUoK3QsK24pO3JldHVybiBmdW5jdGlvbih0KXt2YXIgbj1lKHQpO3JldHVybiBuLTM2MCpNYXRoLmZsb29yKG4vMzYwKX19LHQuaW50ZXJwb2xhdGVOdW1iZXI9dmUsdC5pbnRlcnBvbGF0ZU9iamVjdD1nZSx0LmludGVycG9sYXRlUm91bmQ9eGUsdC5pbnRlcnBvbGF0ZVN0cmluZz1iZSx0LmludGVycG9sYXRlVHJhbnNmb3JtQ3NzPUNlLHQuaW50ZXJwb2xhdGVUcmFuc2Zvcm1Tdmc9UGUsdC5pbnRlcnBvbGF0ZVpvb209cWUsdC5pbnRlcnBvbGF0ZVJnYj1jZSx0LmludGVycG9sYXRlUmdiQmFzaXM9bGUsdC5pbnRlcnBvbGF0ZVJnYkJhc2lzQ2xvc2VkPWhlLHQuaW50ZXJwb2xhdGVIc2w9WWUsdC5pbnRlcnBvbGF0ZUhzbExvbmc9QmUsdC5pbnRlcnBvbGF0ZUxhYj1mdW5jdGlvbih0LG4pe3ZhciBlPWZlKCh0PVVuKHQpKS5sLChuPVVuKG4pKS5sKSxyPWZlKHQuYSxuLmEpLGk9ZmUodC5iLG4uYiksbz1mZSh0Lm9wYWNpdHksbi5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIHQubD1lKG4pLHQuYT1yKG4pLHQuYj1pKG4pLHQub3BhY2l0eT1vKG4pLHQrIiJ9fSx0LmludGVycG9sYXRlSGNsPUllLHQuaW50ZXJwb2xhdGVIY2xMb25nPUhlLHQuaW50ZXJwb2xhdGVDdWJlaGVsaXg9WGUsdC5pbnRlcnBvbGF0ZUN1YmVoZWxpeExvbmc9R2UsdC5waWVjZXdpc2U9ZnVuY3Rpb24odCxuKXtmb3IodmFyIGU9MCxyPW4ubGVuZ3RoLTEsaT1uWzBdLG89bmV3IEFycmF5KHI8MD8wOnIpO2U8cjspb1tlXT10KGksaT1uWysrZV0pO3JldHVybiBmdW5jdGlvbih0KXt2YXIgbj1NYXRoLm1heCgwLE1hdGgubWluKHItMSxNYXRoLmZsb29yKHQqPXIpKSk7cmV0dXJuIG9bbl0odC1uKX19LHQucXVhbnRpemU9ZnVuY3Rpb24odCxuKXtmb3IodmFyIGU9bmV3IEFycmF5KG4pLHI9MDtyPG47KytyKWVbcl09dChyLyhuLTEpKTtyZXR1cm4gZX0sdC5wYXRoPUdpLHQucG9seWdvbkFyZWE9ZnVuY3Rpb24odCl7Zm9yKHZhciBuLGU9LTEscj10Lmxlbmd0aCxpPXRbci0xXSxvPTA7KytlPHI7KW49aSxpPXRbZV0sbys9blsxXSppWzBdLW5bMF0qaVsxXTtyZXR1cm4gby8yfSx0LnBvbHlnb25DZW50cm9pZD1mdW5jdGlvbih0KXtmb3IodmFyIG4sZSxyPS0xLGk9dC5sZW5ndGgsbz0wLGE9MCx1PXRbaS0xXSxmPTA7KytyPGk7KW49dSx1PXRbcl0sZis9ZT1uWzBdKnVbMV0tdVswXSpuWzFdLG8rPShuWzBdK3VbMF0pKmUsYSs9KG5bMV0rdVsxXSkqZTtyZXR1cm5bby8oZio9MyksYS9mXX0sdC5wb2x5Z29uSHVsbD1mdW5jdGlvbih0KXtpZigoZT10Lmxlbmd0aCk8MylyZXR1cm4gbnVsbDt2YXIgbixlLHI9bmV3IEFycmF5KGUpLGk9bmV3IEFycmF5KGUpO2ZvcihuPTA7bjxlOysrbilyW25dPVsrdFtuXVswXSwrdFtuXVsxXSxuXTtmb3Ioci5zb3J0KEpsKSxuPTA7bjxlOysrbilpW25dPVtyW25dWzBdLC1yW25dWzFdXTt2YXIgbz1LbChyKSxhPUtsKGkpLHU9YVswXT09PW9bMF0sZj1hW2EubGVuZ3RoLTFdPT09b1tvLmxlbmd0aC0xXSxjPVtdO2ZvcihuPW8ubGVuZ3RoLTE7bj49MDstLW4pYy5wdXNoKHRbcltvW25dXVsyXV0pO2ZvcihuPSt1O248YS5sZW5ndGgtZjsrK24pYy5wdXNoKHRbclthW25dXVsyXV0pO3JldHVybiBjfSx0LnBvbHlnb25Db250YWlucz1mdW5jdGlvbih0LG4pe2Zvcih2YXIgZSxyLGk9dC5sZW5ndGgsbz10W2ktMV0sYT1uWzBdLHU9blsxXSxmPW9bMF0sYz1vWzFdLHM9ITEsbD0wO2w8aTsrK2wpZT0obz10W2xdKVswXSwocj1vWzFdKT51IT1jPnUmJmE8KGYtZSkqKHUtcikvKGMtcikrZSYmKHM9IXMpLGY9ZSxjPXI7cmV0dXJuIHN9LHQucG9seWdvbkxlbmd0aD1mdW5jdGlvbih0KXtmb3IodmFyIG4sZSxyPS0xLGk9dC5sZW5ndGgsbz10W2ktMV0sYT1vWzBdLHU9b1sxXSxmPTA7KytyPGk7KW49YSxlPXUsbi09YT0obz10W3JdKVswXSxlLT11PW9bMV0sZis9TWF0aC5zcXJ0KG4qbitlKmUpO3JldHVybiBmfSx0LnF1YWR0cmVlPXJhLHQucmFuZG9tVW5pZm9ybT1uaCx0LnJhbmRvbU5vcm1hbD1laCx0LnJhbmRvbUxvZ05vcm1hbD1yaCx0LnJhbmRvbUJhdGVzPW9oLHQucmFuZG9tSXJ3aW5IYWxsPWloLHQucmFuZG9tRXhwb25lbnRpYWw9YWgsdC5zY2FsZUJhbmQ9aGgsdC5zY2FsZVBvaW50PWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uIHQobil7dmFyIGU9bi5jb3B5O3JldHVybiBuLnBhZGRpbmc9bi5wYWRkaW5nT3V0ZXIsZGVsZXRlIG4ucGFkZGluZ0lubmVyLGRlbGV0ZSBuLnBhZGRpbmdPdXRlcixuLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gdChlKCkpfSxufShoaCgpLnBhZGRpbmdJbm5lcigxKSl9LHQuc2NhbGVJZGVudGl0eT1mdW5jdGlvbiB0KCl7dmFyIG49WzAsMV07ZnVuY3Rpb24gZSh0KXtyZXR1cm4rdH1yZXR1cm4gZS5pbnZlcnQ9ZSxlLmRvbWFpbj1lLnJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPWZoLmNhbGwodCxwaCksZSk6bi5zbGljZSgpfSxlLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gdCgpLmRvbWFpbihuKX0seGgoZSl9LHQuc2NhbGVMaW5lYXI9ZnVuY3Rpb24gdCgpe3ZhciBuPW1oKGdoLHZlKTtyZXR1cm4gbi5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGJoKG4sdCgpKX0seGgobil9LHQuc2NhbGVMb2c9ZnVuY3Rpb24gbigpe3ZhciBlPW1oKE1oLEFoKS5kb21haW4oWzEsMTBdKSxyPWUuZG9tYWluLGk9MTAsbz1TaCgxMCksYT1OaCgxMCk7ZnVuY3Rpb24gdSgpe3JldHVybiBvPVNoKGkpLGE9TmgoaSkscigpWzBdPDAmJihvPUVoKG8pLGE9RWgoYSkpLGV9cmV0dXJuIGUuYmFzZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0rdCx1KCkpOml9LGUuZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyKHQpLHUoKSk6cigpfSxlLnRpY2tzPWZ1bmN0aW9uKHQpe3ZhciBuLGU9cigpLHU9ZVswXSxmPWVbZS5sZW5ndGgtMV07KG49Zjx1KSYmKGg9dSx1PWYsZj1oKTt2YXIgYyxzLGwsaD1vKHUpLGQ9byhmKSxwPW51bGw9PXQ/MTA6K3Qsdj1bXTtpZighKGklMSkmJmQtaDxwKXtpZihoPU1hdGgucm91bmQoaCktMSxkPU1hdGgucm91bmQoZCkrMSx1PjApe2Zvcig7aDxkOysraClmb3Iocz0xLGM9YShoKTtzPGk7KytzKWlmKCEoKGw9YypzKTx1KSl7aWYobD5mKWJyZWFrO3YucHVzaChsKX19ZWxzZSBmb3IoO2g8ZDsrK2gpZm9yKHM9aS0xLGM9YShoKTtzPj0xOy0tcylpZighKChsPWMqcyk8dSkpe2lmKGw+ZilicmVhazt2LnB1c2gobCl9fWVsc2Ugdj1tKGgsZCxNYXRoLm1pbihkLWgscCkpLm1hcChhKTtyZXR1cm4gbj92LnJldmVyc2UoKTp2fSxlLnRpY2tGb3JtYXQ9ZnVuY3Rpb24obixyKXtpZihudWxsPT1yJiYocj0xMD09PWk/Ii4wZSI6IiwiKSwiZnVuY3Rpb24iIT10eXBlb2YgciYmKHI9dC5mb3JtYXQocikpLG49PT0xLzApcmV0dXJuIHI7bnVsbD09biYmKG49MTApO3ZhciB1PU1hdGgubWF4KDEsaSpuL2UudGlja3MoKS5sZW5ndGgpO3JldHVybiBmdW5jdGlvbih0KXt2YXIgbj10L2EoTWF0aC5yb3VuZChvKHQpKSk7cmV0dXJuIG4qaTxpLS41JiYobio9aSksbjw9dT9yKHQpOiIifX0sZS5uaWNlPWZ1bmN0aW9uKCl7cmV0dXJuIHIod2gocigpLHtmbG9vcjpmdW5jdGlvbih0KXtyZXR1cm4gYShNYXRoLmZsb29yKG8odCkpKX0sY2VpbDpmdW5jdGlvbih0KXtyZXR1cm4gYShNYXRoLmNlaWwobyh0KSkpfX0pKX0sZS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGJoKGUsbigpLmJhc2UoaSkpfSxlfSx0LnNjYWxlT3JkaW5hbD1saCx0LnNjYWxlSW1wbGljaXQ9c2gsdC5zY2FsZVBvdz1DaCx0LnNjYWxlU3FydD1mdW5jdGlvbigpe3JldHVybiBDaCgpLmV4cG9uZW50KC41KX0sdC5zY2FsZVF1YW50aWxlPWZ1bmN0aW9uIHQoKXt2YXIgZT1bXSxyPVtdLG89W107ZnVuY3Rpb24gYSgpe3ZhciB0PTAsbj1NYXRoLm1heCgxLHIubGVuZ3RoKTtmb3Iobz1uZXcgQXJyYXkobi0xKTsrK3Q8bjspb1t0LTFdPUEoZSx0L24pO3JldHVybiB1fWZ1bmN0aW9uIHUodCl7aWYoIWlzTmFOKHQ9K3QpKXJldHVybiByW2kobyx0KV19cmV0dXJuIHUuaW52ZXJ0RXh0ZW50PWZ1bmN0aW9uKHQpe3ZhciBuPXIuaW5kZXhPZih0KTtyZXR1cm4gbjwwP1tOYU4sTmFOXTpbbj4wP29bbi0xXTplWzBdLG48by5sZW5ndGg/b1tuXTplW2UubGVuZ3RoLTFdXX0sdS5kb21haW49ZnVuY3Rpb24odCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGUuc2xpY2UoKTtlPVtdO2Zvcih2YXIgcixpPTAsbz10Lmxlbmd0aDtpPG87KytpKW51bGw9PShyPXRbaV0pfHxpc05hTihyPStyKXx8ZS5wdXNoKHIpO3JldHVybiBlLnNvcnQobiksYSgpfSx1LnJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPWNoLmNhbGwodCksYSgpKTpyLnNsaWNlKCl9LHUucXVhbnRpbGVzPWZ1bmN0aW9uKCl7cmV0dXJuIG8uc2xpY2UoKX0sdS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIHQoKS5kb21haW4oZSkucmFuZ2Uocil9LHV9LHQuc2NhbGVRdWFudGl6ZT1mdW5jdGlvbiB0KCl7dmFyIG49MCxlPTEscj0xLG89Wy41XSxhPVswLDFdO2Z1bmN0aW9uIHUodCl7aWYodDw9dClyZXR1cm4gYVtpKG8sdCwwLHIpXX1mdW5jdGlvbiBmKCl7dmFyIHQ9LTE7Zm9yKG89bmV3IEFycmF5KHIpOysrdDxyOylvW3RdPSgodCsxKSplLSh0LXIpKm4pLyhyKzEpO3JldHVybiB1fXJldHVybiB1LmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0rdFswXSxlPSt0WzFdLGYoKSk6W24sZV19LHUucmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9KGE9Y2guY2FsbCh0KSkubGVuZ3RoLTEsZigpKTphLnNsaWNlKCl9LHUuaW52ZXJ0RXh0ZW50PWZ1bmN0aW9uKHQpe3ZhciBpPWEuaW5kZXhPZih0KTtyZXR1cm4gaTwwP1tOYU4sTmFOXTppPDE/W24sb1swXV06aT49cj9bb1tyLTFdLGVdOltvW2ktMV0sb1tpXV19LHUuY29weT1mdW5jdGlvbigpe3JldHVybiB0KCkuZG9tYWluKFtuLGVdKS5yYW5nZShhKX0seGgodSl9LHQuc2NhbGVUaHJlc2hvbGQ9ZnVuY3Rpb24gdCgpe3ZhciBuPVsuNV0sZT1bMCwxXSxyPTE7ZnVuY3Rpb24gbyh0KXtpZih0PD10KXJldHVybiBlW2kobix0LDAscildfXJldHVybiBvLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1jaC5jYWxsKHQpLHI9TWF0aC5taW4obi5sZW5ndGgsZS5sZW5ndGgtMSksbyk6bi5zbGljZSgpfSxvLnJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPWNoLmNhbGwodCkscj1NYXRoLm1pbihuLmxlbmd0aCxlLmxlbmd0aC0xKSxvKTplLnNsaWNlKCl9LG8uaW52ZXJ0RXh0ZW50PWZ1bmN0aW9uKHQpe3ZhciByPWUuaW5kZXhPZih0KTtyZXR1cm5bbltyLTFdLG5bcl1dfSxvLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gdCgpLmRvbWFpbihuKS5yYW5nZShlKX0sb30sdC5zY2FsZVRpbWU9ZnVuY3Rpb24oKXtyZXR1cm4gY3YoY2QsdWQsVmgsamgsSWgsQmgsT2gsTGgsdC50aW1lRm9ybWF0KS5kb21haW4oW25ldyBEYXRlKDJlMywwLDEpLG5ldyBEYXRlKDJlMywwLDIpXSl9LHQuc2NhbGVVdGM9ZnVuY3Rpb24oKXtyZXR1cm4gY3YoTGQsemQsX2QsdmQsZGQsbGQsT2gsTGgsdC51dGNGb3JtYXQpLmRvbWFpbihbRGF0ZS5VVEMoMmUzLDAsMSksRGF0ZS5VVEMoMmUzLDAsMildKX0sdC5zY2FsZVNlcXVlbnRpYWw9ZnVuY3Rpb24gdChuKXt2YXIgZT0wLHI9MSxpPTEsbz0hMTtmdW5jdGlvbiBhKHQpe3ZhciByPSh0LWUpKmk7cmV0dXJuIG4obz9NYXRoLm1heCgwLE1hdGgubWluKDEscikpOnIpfXJldHVybiBhLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0rdFswXSxyPSt0WzFdLGk9ZT09PXI/MDoxLyhyLWUpLGEpOltlLHJdfSxhLmNsYW1wPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSEhdCxhKTpvfSxhLmludGVycG9sYXRvcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10LGEpOm59LGEuY29weT1mdW5jdGlvbigpe3JldHVybiB0KG4pLmRvbWFpbihbZSxyXSkuY2xhbXAobyl9LHhoKGEpfSx0LnNjYWxlRGl2ZXJnaW5nPWZ1bmN0aW9uIHQobil7dmFyIGU9MCxyPS41LGk9MSxvPTEsYT0xLHU9ITE7ZnVuY3Rpb24gZih0KXt2YXIgZT0uNSsoKHQ9K3QpLXIpKih0PHI/bzphKTtyZXR1cm4gbih1P01hdGgubWF4KDAsTWF0aC5taW4oMSxlKSk6ZSl9cmV0dXJuIGYuZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSt0WzBdLHI9K3RbMV0saT0rdFsyXSxvPWU9PT1yPzA6LjUvKHItZSksYT1yPT09aT8wOi41LyhpLXIpLGYpOltlLHIsaV19LGYuY2xhbXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9ISF0LGYpOnV9LGYuaW50ZXJwb2xhdG9yPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQsZik6bn0sZi5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIHQobikuZG9tYWluKFtlLHIsaV0pLmNsYW1wKHUpfSx4aChmKX0sdC5zY2hlbWVDYXRlZ29yeTEwPWx2LHQuc2NoZW1lQWNjZW50PWh2LHQuc2NoZW1lRGFyazI9ZHYsdC5zY2hlbWVQYWlyZWQ9cHYsdC5zY2hlbWVQYXN0ZWwxPXZ2LHQuc2NoZW1lUGFzdGVsMj1ndix0LnNjaGVtZVNldDE9eXYsdC5zY2hlbWVTZXQyPV92LHQuc2NoZW1lU2V0Mz1idix0LmludGVycG9sYXRlQnJCRz13dix0LnNjaGVtZUJyQkc9eHYsdC5pbnRlcnBvbGF0ZVBSR249QXYsdC5zY2hlbWVQUkduPU12LHQuaW50ZXJwb2xhdGVQaVlHPU52LHQuc2NoZW1lUGlZRz1Udix0LmludGVycG9sYXRlUHVPcj1Fdix0LnNjaGVtZVB1T3I9U3YsdC5pbnRlcnBvbGF0ZVJkQnU9Q3YsdC5zY2hlbWVSZEJ1PWt2LHQuaW50ZXJwb2xhdGVSZEd5PXp2LHQuc2NoZW1lUmRHeT1Qdix0LmludGVycG9sYXRlUmRZbEJ1PUx2LHQuc2NoZW1lUmRZbEJ1PVJ2LHQuaW50ZXJwb2xhdGVSZFlsR249VXYsdC5zY2hlbWVSZFlsR249RHYsdC5pbnRlcnBvbGF0ZVNwZWN0cmFsPU92LHQuc2NoZW1lU3BlY3RyYWw9cXYsdC5pbnRlcnBvbGF0ZUJ1R249QnYsdC5zY2hlbWVCdUduPVl2LHQuaW50ZXJwb2xhdGVCdVB1PUl2LHQuc2NoZW1lQnVQdT1Gdix0LmludGVycG9sYXRlR25CdT1qdix0LnNjaGVtZUduQnU9SHYsdC5pbnRlcnBvbGF0ZU9yUmQ9R3YsdC5zY2hlbWVPclJkPVh2LHQuaW50ZXJwb2xhdGVQdUJ1R249JHYsdC5zY2hlbWVQdUJ1R249VnYsdC5pbnRlcnBvbGF0ZVB1QnU9WnYsdC5zY2hlbWVQdUJ1PVd2LHQuaW50ZXJwb2xhdGVQdVJkPUp2LHQuc2NoZW1lUHVSZD1Rdix0LmludGVycG9sYXRlUmRQdT10Zyx0LnNjaGVtZVJkUHU9S3YsdC5pbnRlcnBvbGF0ZVlsR25CdT1lZyx0LnNjaGVtZVlsR25CdT1uZyx0LmludGVycG9sYXRlWWxHbj1pZyx0LnNjaGVtZVlsR249cmcsdC5pbnRlcnBvbGF0ZVlsT3JCcj1hZyx0LnNjaGVtZVlsT3JCcj1vZyx0LmludGVycG9sYXRlWWxPclJkPWZnLHQuc2NoZW1lWWxPclJkPXVnLHQuaW50ZXJwb2xhdGVCbHVlcz1zZyx0LnNjaGVtZUJsdWVzPWNnLHQuaW50ZXJwb2xhdGVHcmVlbnM9aGcsdC5zY2hlbWVHcmVlbnM9bGcsdC5pbnRlcnBvbGF0ZUdyZXlzPXBnLHQuc2NoZW1lR3JleXM9ZGcsdC5pbnRlcnBvbGF0ZVB1cnBsZXM9Z2csdC5zY2hlbWVQdXJwbGVzPXZnLHQuaW50ZXJwb2xhdGVSZWRzPV9nLHQuc2NoZW1lUmVkcz15Zyx0LmludGVycG9sYXRlT3Jhbmdlcz1tZyx0LnNjaGVtZU9yYW5nZXM9YmcsdC5pbnRlcnBvbGF0ZUN1YmVoZWxpeERlZmF1bHQ9eGcsdC5pbnRlcnBvbGF0ZVJhaW5ib3c9ZnVuY3Rpb24odCl7KHQ8MHx8dD4xKSYmKHQtPU1hdGguZmxvb3IodCkpO3ZhciBuPU1hdGguYWJzKHQtLjUpO3JldHVybiBBZy5oPTM2MCp0LTEwMCxBZy5zPTEuNS0xLjUqbixBZy5sPS44LS45Km4sQWcrIiJ9LHQuaW50ZXJwb2xhdGVXYXJtPXdnLHQuaW50ZXJwb2xhdGVDb29sPU1nLHQuaW50ZXJwb2xhdGVTaW5lYm93PWZ1bmN0aW9uKHQpe3ZhciBuO3JldHVybiB0PSguNS10KSpNYXRoLlBJLFRnLnI9MjU1KihuPU1hdGguc2luKHQpKSpuLFRnLmc9MjU1KihuPU1hdGguc2luKHQrTmcpKSpuLFRnLmI9MjU1KihuPU1hdGguc2luKHQrU2cpKSpuLFRnKyIifSx0LmludGVycG9sYXRlVmlyaWRpcz1rZyx0LmludGVycG9sYXRlTWFnbWE9Q2csdC5pbnRlcnBvbGF0ZUluZmVybm89UGcsdC5pbnRlcnBvbGF0ZVBsYXNtYT16Zyx0LmNyZWF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gRHQoVyh0KS5jYWxsKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkpfSx0LmNyZWF0b3I9Vyx0LmxvY2FsPXF0LHQubWF0Y2hlcj1ydCx0Lm1vdXNlPUZ0LHQubmFtZXNwYWNlPSQsdC5uYW1lc3BhY2VzPVYsdC5jbGllbnRQb2ludD1CdCx0LnNlbGVjdD1EdCx0LnNlbGVjdEFsbD1mdW5jdGlvbih0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQ/bmV3IFJ0KFtkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHQpXSxbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XSk6bmV3IFJ0KFtudWxsPT10P1tdOnRdLHp0KX0sdC5zZWxlY3Rpb249THQsdC5zZWxlY3Rvcj1RLHQuc2VsZWN0b3JBbGw9Syx0LnN0eWxlPWx0LHQudG91Y2g9SXQsdC50b3VjaGVzPWZ1bmN0aW9uKHQsbil7bnVsbD09biYmKG49WXQoKS50b3VjaGVzKTtmb3IodmFyIGU9MCxyPW4/bi5sZW5ndGg6MCxpPW5ldyBBcnJheShyKTtlPHI7KytlKWlbZV09QnQodCxuW2VdKTtyZXR1cm4gaX0sdC53aW5kb3c9c3QsdC5jdXN0b21FdmVudD1DdCx0LmFyYz1mdW5jdGlvbigpe3ZhciB0PUdnLG49VmcsZT1SZygwKSxyPW51bGwsaT0kZyxvPVdnLGE9WmcsdT1udWxsO2Z1bmN0aW9uIGYoKXt2YXIgZixjLHMsbD0rdC5hcHBseSh0aGlzLGFyZ3VtZW50cyksaD0rbi5hcHBseSh0aGlzLGFyZ3VtZW50cyksZD1pLmFwcGx5KHRoaXMsYXJndW1lbnRzKS1IZyxwPW8uYXBwbHkodGhpcyxhcmd1bWVudHMpLUhnLHY9TGcocC1kKSxnPXA+ZDtpZih1fHwodT1mPUdpKCkpLGg8bCYmKGM9aCxoPWwsbD1jKSxoPkZnKWlmKHY+amctRmcpdS5tb3ZlVG8oaCpVZyhkKSxoKllnKGQpKSx1LmFyYygwLDAsaCxkLHAsIWcpLGw+RmcmJih1Lm1vdmVUbyhsKlVnKHApLGwqWWcocCkpLHUuYXJjKDAsMCxsLHAsZCxnKSk7ZWxzZXt2YXIgeSxfLGI9ZCxtPXAseD1kLHc9cCxNPXYsQT12LFQ9YS5hcHBseSh0aGlzLGFyZ3VtZW50cykvMixOPVQ+RmcmJihyPytyLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpCZyhsKmwraCpoKSksUz1PZyhMZyhoLWwpLzIsK2UuYXBwbHkodGhpcyxhcmd1bWVudHMpKSxFPVMsaz1TO2lmKE4+Rmcpe3ZhciBDPVhnKE4vbCpZZyhUKSksUD1YZyhOL2gqWWcoVCkpOyhNLT0yKkMpPkZnPyh4Kz1DKj1nPzE6LTEsdy09Qyk6KE09MCx4PXc9KGQrcCkvMiksKEEtPTIqUCk+Rmc/KGIrPVAqPWc/MTotMSxtLT1QKTooQT0wLGI9bT0oZCtwKS8yKX12YXIgej1oKlVnKGIpLFI9aCpZZyhiKSxMPWwqVWcodyksRD1sKllnKHcpO2lmKFM+Rmcpe3ZhciBVPWgqVWcobSkscT1oKllnKG0pLE89bCpVZyh4KSxZPWwqWWcoeCk7aWYodjxJZyl7dmFyIEI9TT5GZz9mdW5jdGlvbih0LG4sZSxyLGksbyxhLHUpe3ZhciBmPWUtdCxjPXItbixzPWEtaSxsPXUtbyxoPShzKihuLW8pLWwqKHQtaSkpLyhsKmYtcypjKTtyZXR1cm5bdCtoKmYsbitoKmNdfSh6LFIsTyxZLFUscSxMLEQpOltMLERdLEY9ei1CWzBdLEk9Ui1CWzFdLEg9VS1CWzBdLGo9cS1CWzFdLFg9MS9ZZygoKHM9KEYqSCtJKmopLyhCZyhGKkYrSSpJKSpCZyhIKkgraipqKSkpPjE/MDpzPC0xP0lnOk1hdGguYWNvcyhzKSkvMiksRz1CZyhCWzBdKkJbMF0rQlsxXSpCWzFdKTtFPU9nKFMsKGwtRykvKFgtMSkpLGs9T2coUywoaC1HKS8oWCsxKSl9fUE+Rmc/az5GZz8oeT1RZyhPLFkseixSLGgsayxnKSxfPVFnKFUscSxMLEQsaCxrLGcpLHUubW92ZVRvKHkuY3greS54MDEseS5jeSt5LnkwMSksazxTP3UuYXJjKHkuY3gseS5jeSxrLERnKHkueTAxLHkueDAxKSxEZyhfLnkwMSxfLngwMSksIWcpOih1LmFyYyh5LmN4LHkuY3ksayxEZyh5LnkwMSx5LngwMSksRGcoeS55MTEseS54MTEpLCFnKSx1LmFyYygwLDAsaCxEZyh5LmN5K3kueTExLHkuY3greS54MTEpLERnKF8uY3krXy55MTEsXy5jeCtfLngxMSksIWcpLHUuYXJjKF8uY3gsXy5jeSxrLERnKF8ueTExLF8ueDExKSxEZyhfLnkwMSxfLngwMSksIWcpKSk6KHUubW92ZVRvKHosUiksdS5hcmMoMCwwLGgsYixtLCFnKSk6dS5tb3ZlVG8oeixSKSxsPkZnJiZNPkZnP0U+Rmc/KHk9UWcoTCxELFUscSxsLC1FLGcpLF89UWcoeixSLE8sWSxsLC1FLGcpLHUubGluZVRvKHkuY3greS54MDEseS5jeSt5LnkwMSksRTxTP3UuYXJjKHkuY3gseS5jeSxFLERnKHkueTAxLHkueDAxKSxEZyhfLnkwMSxfLngwMSksIWcpOih1LmFyYyh5LmN4LHkuY3ksRSxEZyh5LnkwMSx5LngwMSksRGcoeS55MTEseS54MTEpLCFnKSx1LmFyYygwLDAsbCxEZyh5LmN5K3kueTExLHkuY3greS54MTEpLERnKF8uY3krXy55MTEsXy5jeCtfLngxMSksZyksdS5hcmMoXy5jeCxfLmN5LEUsRGcoXy55MTEsXy54MTEpLERnKF8ueTAxLF8ueDAxKSwhZykpKTp1LmFyYygwLDAsbCx3LHgsZyk6dS5saW5lVG8oTCxEKX1lbHNlIHUubW92ZVRvKDAsMCk7aWYodS5jbG9zZVBhdGgoKSxmKXJldHVybiB1PW51bGwsZisiInx8bnVsbH1yZXR1cm4gZi5jZW50cm9pZD1mdW5jdGlvbigpe3ZhciBlPSgrdC5hcHBseSh0aGlzLGFyZ3VtZW50cykrICtuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkvMixyPSgraS5hcHBseSh0aGlzLGFyZ3VtZW50cykrICtvLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkvMi1JZy8yO3JldHVybltVZyhyKSplLFlnKHIpKmVdfSxmLmlubmVyUmFkaXVzPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBuP246UmcoK24pLGYpOnR9LGYub3V0ZXJSYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpSZygrdCksZik6bn0sZi5jb3JuZXJSYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpSZygrdCksZik6ZX0sZi5wYWRSYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9bnVsbD09dD9udWxsOiJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6UmcoK3QpLGYpOnJ9LGYuc3RhcnRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OlJnKCt0KSxmKTppfSxmLmVuZEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6UmcoK3QpLGYpOm99LGYucGFkQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpSZygrdCksZik6YX0sZi5jb250ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PW51bGw9PXQ/bnVsbDp0LGYpOnV9LGZ9LHQuYXJlYT1yeSx0LmxpbmU9ZXksdC5waWU9ZnVuY3Rpb24oKXt2YXIgdD1veSxuPWl5LGU9bnVsbCxyPVJnKDApLGk9UmcoamcpLG89UmcoMCk7ZnVuY3Rpb24gYShhKXt2YXIgdSxmLGMscyxsLGg9YS5sZW5ndGgsZD0wLHA9bmV3IEFycmF5KGgpLHY9bmV3IEFycmF5KGgpLGc9K3IuYXBwbHkodGhpcyxhcmd1bWVudHMpLHk9TWF0aC5taW4oamcsTWF0aC5tYXgoLWpnLGkuYXBwbHkodGhpcyxhcmd1bWVudHMpLWcpKSxfPU1hdGgubWluKE1hdGguYWJzKHkpL2gsby5hcHBseSh0aGlzLGFyZ3VtZW50cykpLGI9XyooeTwwPy0xOjEpO2Zvcih1PTA7dTxoOysrdSkobD12W3BbdV09dV09K3QoYVt1XSx1LGEpKT4wJiYoZCs9bCk7Zm9yKG51bGwhPW4/cC5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4odlt0XSx2W2VdKX0pOm51bGwhPWUmJnAuc29ydChmdW5jdGlvbih0LG4pe3JldHVybiBlKGFbdF0sYVtuXSl9KSx1PTAsYz1kPyh5LWgqYikvZDowO3U8aDsrK3UsZz1zKWY9cFt1XSxzPWcrKChsPXZbZl0pPjA/bCpjOjApK2IsdltmXT17ZGF0YTphW2ZdLGluZGV4OnUsdmFsdWU6bCxzdGFydEFuZ2xlOmcsZW5kQW5nbGU6cyxwYWRBbmdsZTpffTtyZXR1cm4gdn1yZXR1cm4gYS52YWx1ZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uOlJnKCtuKSxhKTp0fSxhLnNvcnRWYWx1ZXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dCxlPW51bGwsYSk6bn0sYS5zb3J0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXQsbj1udWxsLGEpOmV9LGEuc3RhcnRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OlJnKCt0KSxhKTpyfSxhLmVuZEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6UmcoK3QpLGEpOml9LGEucGFkQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpSZygrdCksYSk6b30sYX0sdC5hcmVhUmFkaWFsPWx5LHQucmFkaWFsQXJlYT1seSx0LmxpbmVSYWRpYWw9c3ksdC5yYWRpYWxMaW5lPXN5LHQucG9pbnRSYWRpYWw9aHksdC5saW5rSG9yaXpvbnRhbD1mdW5jdGlvbigpe3JldHVybiBneSh5eSl9LHQubGlua1ZlcnRpY2FsPWZ1bmN0aW9uKCl7cmV0dXJuIGd5KF95KX0sdC5saW5rUmFkaWFsPWZ1bmN0aW9uKCl7dmFyIHQ9Z3koYnkpO3JldHVybiB0LmFuZ2xlPXQueCxkZWxldGUgdC54LHQucmFkaXVzPXQueSxkZWxldGUgdC55LHR9LHQuc3ltYm9sPWZ1bmN0aW9uKCl7dmFyIHQ9UmcobXkpLG49UmcoNjQpLGU9bnVsbDtmdW5jdGlvbiByKCl7dmFyIHI7aWYoZXx8KGU9cj1HaSgpKSx0LmFwcGx5KHRoaXMsYXJndW1lbnRzKS5kcmF3KGUsK24uYXBwbHkodGhpcyxhcmd1bWVudHMpKSxyKXJldHVybiBlPW51bGwscisiInx8bnVsbH1yZXR1cm4gci50eXBlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBuP246Umcobikscik6dH0sci5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6UmcoK3QpLHIpOm59LHIuY29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1udWxsPT10P251bGw6dCxyKTplfSxyfSx0LnN5bWJvbHM9VXksdC5zeW1ib2xDaXJjbGU9bXksdC5zeW1ib2xDcm9zcz14eSx0LnN5bWJvbERpYW1vbmQ9QXksdC5zeW1ib2xTcXVhcmU9a3ksdC5zeW1ib2xTdGFyPUV5LHQuc3ltYm9sVHJpYW5nbGU9UHksdC5zeW1ib2xXeWU9RHksdC5jdXJ2ZUJhc2lzQ2xvc2VkPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgQnkodCl9LHQuY3VydmVCYXNpc09wZW49ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBGeSh0KX0sdC5jdXJ2ZUJhc2lzPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgWXkodCl9LHQuY3VydmVCdW5kbGU9SHksdC5jdXJ2ZUNhcmRpbmFsQ2xvc2VkPSR5LHQuY3VydmVDYXJkaW5hbE9wZW49WnksdC5jdXJ2ZUNhcmRpbmFsPUd5LHQuY3VydmVDYXRtdWxsUm9tQ2xvc2VkPW5fLHQuY3VydmVDYXRtdWxsUm9tT3Blbj1yXyx0LmN1cnZlQ2F0bXVsbFJvbT1LeSx0LmN1cnZlTGluZWFyQ2xvc2VkPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgaV8odCl9LHQuY3VydmVMaW5lYXI9S2csdC5jdXJ2ZU1vbm90b25lWD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGNfKHQpfSx0LmN1cnZlTW9ub3RvbmVZPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgc18odCl9LHQuY3VydmVOYXR1cmFsPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgaF8odCl9LHQuY3VydmVTdGVwPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgcF8odCwuNSl9LHQuY3VydmVTdGVwQWZ0ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBwXyh0LDEpfSx0LmN1cnZlU3RlcEJlZm9yZT1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IHBfKHQsMCl9LHQuc3RhY2s9ZnVuY3Rpb24oKXt2YXIgdD1SZyhbXSksbj1nXyxlPXZfLHI9eV87ZnVuY3Rpb24gaShpKXt2YXIgbyxhLHU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyksZj1pLmxlbmd0aCxjPXUubGVuZ3RoLHM9bmV3IEFycmF5KGMpO2ZvcihvPTA7bzxjOysrbyl7Zm9yKHZhciBsLGg9dVtvXSxkPXNbb109bmV3IEFycmF5KGYpLHA9MDtwPGY7KytwKWRbcF09bD1bMCwrcihpW3BdLGgscCxpKV0sbC5kYXRhPWlbcF07ZC5rZXk9aH1mb3Iobz0wLGE9bihzKTtvPGM7KytvKXNbYVtvXV0uaW5kZXg9bztyZXR1cm4gZShzLGEpLHN9cmV0dXJuIGkua2V5cz1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uOlJnKGR5LmNhbGwobikpLGkpOnR9LGkudmFsdWU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpSZygrdCksaSk6cn0saS5vcmRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1udWxsPT10P2dfOiJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6UmcoZHkuY2FsbCh0KSksaSk6bn0saS5vZmZzZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9bnVsbD09dD92Xzp0LGkpOmV9LGl9LHQuc3RhY2tPZmZzZXRFeHBhbmQ9ZnVuY3Rpb24odCxuKXtpZigocj10Lmxlbmd0aCk+MCl7Zm9yKHZhciBlLHIsaSxvPTAsYT10WzBdLmxlbmd0aDtvPGE7KytvKXtmb3IoaT1lPTA7ZTxyOysrZSlpKz10W2VdW29dWzFdfHwwO2lmKGkpZm9yKGU9MDtlPHI7KytlKXRbZV1bb11bMV0vPWl9dl8odCxuKX19LHQuc3RhY2tPZmZzZXREaXZlcmdpbmc9ZnVuY3Rpb24odCxuKXtpZigodT10Lmxlbmd0aCk+MSlmb3IodmFyIGUscixpLG8sYSx1LGY9MCxjPXRbblswXV0ubGVuZ3RoO2Y8YzsrK2YpZm9yKG89YT0wLGU9MDtlPHU7KytlKShpPShyPXRbbltlXV1bZl0pWzFdLXJbMF0pPj0wPyhyWzBdPW8sclsxXT1vKz1pKTppPDA/KHJbMV09YSxyWzBdPWErPWkpOnJbMF09b30sdC5zdGFja09mZnNldE5vbmU9dl8sdC5zdGFja09mZnNldFNpbGhvdWV0dGU9ZnVuY3Rpb24odCxuKXtpZigoZT10Lmxlbmd0aCk+MCl7Zm9yKHZhciBlLHI9MCxpPXRbblswXV0sbz1pLmxlbmd0aDtyPG87KytyKXtmb3IodmFyIGE9MCx1PTA7YTxlOysrYSl1Kz10W2FdW3JdWzFdfHwwO2lbcl1bMV0rPWlbcl1bMF09LXUvMn12Xyh0LG4pfX0sdC5zdGFja09mZnNldFdpZ2dsZT1mdW5jdGlvbih0LG4pe2lmKChpPXQubGVuZ3RoKT4wJiYocj0oZT10W25bMF1dKS5sZW5ndGgpPjApe2Zvcih2YXIgZSxyLGksbz0wLGE9MTthPHI7KythKXtmb3IodmFyIHU9MCxmPTAsYz0wO3U8aTsrK3Upe2Zvcih2YXIgcz10W25bdV1dLGw9c1thXVsxXXx8MCxoPShsLShzW2EtMV1bMV18fDApKS8yLGQ9MDtkPHU7KytkKXt2YXIgcD10W25bZF1dO2grPShwW2FdWzFdfHwwKS0ocFthLTFdWzFdfHwwKX1mKz1sLGMrPWgqbH1lW2EtMV1bMV0rPWVbYS0xXVswXT1vLGYmJihvLT1jL2YpfWVbYS0xXVsxXSs9ZVthLTFdWzBdPW8sdl8odCxuKX19LHQuc3RhY2tPcmRlckFzY2VuZGluZz1fXyx0LnN0YWNrT3JkZXJEZXNjZW5kaW5nPWZ1bmN0aW9uKHQpe3JldHVybiBfXyh0KS5yZXZlcnNlKCl9LHQuc3RhY2tPcmRlckluc2lkZU91dD1mdW5jdGlvbih0KXt2YXIgbixlLHI9dC5sZW5ndGgsaT10Lm1hcChiXyksbz1nXyh0KS5zb3J0KGZ1bmN0aW9uKHQsbil7cmV0dXJuIGlbbl0taVt0XX0pLGE9MCx1PTAsZj1bXSxjPVtdO2ZvcihuPTA7bjxyOysrbillPW9bbl0sYTx1PyhhKz1pW2VdLGYucHVzaChlKSk6KHUrPWlbZV0sYy5wdXNoKGUpKTtyZXR1cm4gYy5yZXZlcnNlKCkuY29uY2F0KGYpfSx0LnN0YWNrT3JkZXJOb25lPWdfLHQuc3RhY2tPcmRlclJldmVyc2U9ZnVuY3Rpb24odCl7cmV0dXJuIGdfKHQpLnJldmVyc2UoKX0sdC50aW1lSW50ZXJ2YWw9UmgsdC50aW1lTWlsbGlzZWNvbmQ9TGgsdC50aW1lTWlsbGlzZWNvbmRzPURoLHQudXRjTWlsbGlzZWNvbmQ9TGgsdC51dGNNaWxsaXNlY29uZHM9RGgsdC50aW1lU2Vjb25kPU9oLHQudGltZVNlY29uZHM9WWgsdC51dGNTZWNvbmQ9T2gsdC51dGNTZWNvbmRzPVloLHQudGltZU1pbnV0ZT1CaCx0LnRpbWVNaW51dGVzPUZoLHQudGltZUhvdXI9SWgsdC50aW1lSG91cnM9SGgsdC50aW1lRGF5PWpoLHQudGltZURheXM9WGgsdC50aW1lV2Vlaz1WaCx0LnRpbWVXZWVrcz10ZCx0LnRpbWVTdW5kYXk9VmgsdC50aW1lU3VuZGF5cz10ZCx0LnRpbWVNb25kYXk9JGgsdC50aW1lTW9uZGF5cz1uZCx0LnRpbWVUdWVzZGF5PVdoLHQudGltZVR1ZXNkYXlzPWVkLHQudGltZVdlZG5lc2RheT1aaCx0LnRpbWVXZWRuZXNkYXlzPXJkLHQudGltZVRodXJzZGF5PVFoLHQudGltZVRodXJzZGF5cz1pZCx0LnRpbWVGcmlkYXk9SmgsdC50aW1lRnJpZGF5cz1vZCx0LnRpbWVTYXR1cmRheT1LaCx0LnRpbWVTYXR1cmRheXM9YWQsdC50aW1lTW9udGg9dWQsdC50aW1lTW9udGhzPWZkLHQudGltZVllYXI9Y2QsdC50aW1lWWVhcnM9c2QsdC51dGNNaW51dGU9bGQsdC51dGNNaW51dGVzPWhkLHQudXRjSG91cj1kZCx0LnV0Y0hvdXJzPXBkLHQudXRjRGF5PXZkLHQudXRjRGF5cz1nZCx0LnV0Y1dlZWs9X2QsdC51dGNXZWVrcz1UZCx0LnV0Y1N1bmRheT1fZCx0LnV0Y1N1bmRheXM9VGQsdC51dGNNb25kYXk9YmQsdC51dGNNb25kYXlzPU5kLHQudXRjVHVlc2RheT1tZCx0LnV0Y1R1ZXNkYXlzPVNkLHQudXRjV2VkbmVzZGF5PXhkLHQudXRjV2VkbmVzZGF5cz1FZCx0LnV0Y1RodXJzZGF5PXdkLHQudXRjVGh1cnNkYXlzPWtkLHQudXRjRnJpZGF5PU1kLHQudXRjRnJpZGF5cz1DZCx0LnV0Y1NhdHVyZGF5PUFkLHQudXRjU2F0dXJkYXlzPVBkLHQudXRjTW9udGg9emQsdC51dGNNb250aHM9UmQsdC51dGNZZWFyPUxkLHQudXRjWWVhcnM9RGQsdC50aW1lRm9ybWF0RGVmYXVsdExvY2FsZT1RcCx0LnRpbWVGb3JtYXRMb2NhbGU9WWQsdC5pc29Gb3JtYXQ9SnAsdC5pc29QYXJzZT1LcCx0Lm5vdz1pcix0LnRpbWVyPXVyLHQudGltZXJGbHVzaD1mcix0LnRpbWVvdXQ9aHIsdC5pbnRlcnZhbD1mdW5jdGlvbih0LG4sZSl7dmFyIHI9bmV3IGFyLGk9bjtyZXR1cm4gbnVsbD09bj8oci5yZXN0YXJ0KHQsbixlKSxyKToobj0rbixlPW51bGw9PWU/aXIoKTorZSxyLnJlc3RhcnQoZnVuY3Rpb24gbyhhKXthKz1pLHIucmVzdGFydChvLGkrPW4sZSksdChhKX0sbixlKSxyKX0sdC50cmFuc2l0aW9uPXpyLHQuYWN0aXZlPWZ1bmN0aW9uKHQsbil7dmFyIGUscixpPXQuX190cmFuc2l0aW9uO2lmKGkpZm9yKHIgaW4gbj1udWxsPT1uP251bGw6bisiIixpKWlmKChlPWlbcl0pLnN0YXRlPmdyJiZlLm5hbWU9PT1uKXJldHVybiBuZXcgUHIoW1t0XV0sbGksbiwrcik7cmV0dXJuIG51bGx9LHQuaW50ZXJydXB0PU5yLHQudm9yb25vaT1mdW5jdGlvbigpe3ZhciB0PXhfLG49d18sZT1udWxsO2Z1bmN0aW9uIHIocil7cmV0dXJuIG5ldyBlYihyLm1hcChmdW5jdGlvbihlLGkpe3ZhciBvPVtNYXRoLnJvdW5kKHQoZSxpLHIpL0tfKSpLXyxNYXRoLnJvdW5kKG4oZSxpLHIpL0tfKSpLX107cmV0dXJuIG8uaW5kZXg9aSxvLmRhdGE9ZSxvfSksZSl9cmV0dXJuIHIucG9seWdvbnM9ZnVuY3Rpb24odCl7cmV0dXJuIHIodCkucG9seWdvbnMoKX0sci5saW5rcz1mdW5jdGlvbih0KXtyZXR1cm4gcih0KS5saW5rcygpfSxyLnRyaWFuZ2xlcz1mdW5jdGlvbih0KXtyZXR1cm4gcih0KS50cmlhbmdsZXMoKX0sci54PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBuP246bV8oK24pLHIpOnR9LHIueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgdD90Om1fKCt0KSxyKTpufSxyLmV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1udWxsPT10P251bGw6W1srdFswXVswXSwrdFswXVsxXV0sWyt0WzFdWzBdLCt0WzFdWzFdXV0scik6ZSYmW1tlWzBdWzBdLGVbMF1bMV1dLFtlWzFdWzBdLGVbMV1bMV1dXX0sci5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPW51bGw9PXQ/bnVsbDpbWzAsMF0sWyt0WzBdLCt0WzFdXV0scik6ZSYmW2VbMV1bMF0tZVswXVswXSxlWzFdWzFdLWVbMF1bMV1dfSxyfSx0Lnpvb209ZnVuY3Rpb24oKXt2YXIgbixlLHI9c2IsaT1sYixvPXZiLGE9ZGIsdT1wYixmPVswLDEvMF0sYz1bWy0xLzAsLTEvMF0sWzEvMCwxLzBdXSxzPTI1MCxsPXFlLGg9W10sZD1JKCJzdGFydCIsInpvb20iLCJlbmQiKSxwPTUwMCx2PTE1MCxnPTA7ZnVuY3Rpb24geSh0KXt0LnByb3BlcnR5KCJfX3pvb20iLGhiKS5vbigid2hlZWwuem9vbSIsQSkub24oIm1vdXNlZG93bi56b29tIixUKS5vbigiZGJsY2xpY2suem9vbSIsTikuZmlsdGVyKHUpLm9uKCJ0b3VjaHN0YXJ0Lnpvb20iLFMpLm9uKCJ0b3VjaG1vdmUuem9vbSIsRSkub24oInRvdWNoZW5kLnpvb20gdG91Y2hjYW5jZWwuem9vbSIsaykuc3R5bGUoInRvdWNoLWFjdGlvbiIsIm5vbmUiKS5zdHlsZSgiLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yIiwicmdiYSgwLDAsMCwwKSIpfWZ1bmN0aW9uIF8odCxuKXtyZXR1cm4obj1NYXRoLm1heChmWzBdLE1hdGgubWluKGZbMV0sbikpKT09PXQuaz90Om5ldyBvYihuLHQueCx0LnkpfWZ1bmN0aW9uIGIodCxuLGUpe3ZhciByPW5bMF0tZVswXSp0LmssaT1uWzFdLWVbMV0qdC5rO3JldHVybiByPT09dC54JiZpPT09dC55P3Q6bmV3IG9iKHQuayxyLGkpfWZ1bmN0aW9uIG0odCl7cmV0dXJuWygrdFswXVswXSsgK3RbMV1bMF0pLzIsKCt0WzBdWzFdKyArdFsxXVsxXSkvMl19ZnVuY3Rpb24geCh0LG4sZSl7dC5vbigic3RhcnQuem9vbSIsZnVuY3Rpb24oKXt3KHRoaXMsYXJndW1lbnRzKS5zdGFydCgpfSkub24oImludGVycnVwdC56b29tIGVuZC56b29tIixmdW5jdGlvbigpe3codGhpcyxhcmd1bWVudHMpLmVuZCgpfSkudHdlZW4oInpvb20iLGZ1bmN0aW9uKCl7dmFyIHQ9YXJndW1lbnRzLHI9dyh0aGlzLHQpLG89aS5hcHBseSh0aGlzLHQpLGE9ZXx8bShvKSx1PU1hdGgubWF4KG9bMV1bMF0tb1swXVswXSxvWzFdWzFdLW9bMF1bMV0pLGY9dGhpcy5fX3pvb20sYz0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uLmFwcGx5KHRoaXMsdCk6bixzPWwoZi5pbnZlcnQoYSkuY29uY2F0KHUvZi5rKSxjLmludmVydChhKS5jb25jYXQodS9jLmspKTtyZXR1cm4gZnVuY3Rpb24odCl7aWYoMT09PXQpdD1jO2Vsc2V7dmFyIG49cyh0KSxlPXUvblsyXTt0PW5ldyBvYihlLGFbMF0tblswXSplLGFbMV0tblsxXSplKX1yLnpvb20obnVsbCx0KX19KX1mdW5jdGlvbiB3KHQsbil7Zm9yKHZhciBlLHI9MCxpPWgubGVuZ3RoO3I8aTsrK3IpaWYoKGU9aFtyXSkudGhhdD09PXQpcmV0dXJuIGU7cmV0dXJuIG5ldyBNKHQsbil9ZnVuY3Rpb24gTSh0LG4pe3RoaXMudGhhdD10LHRoaXMuYXJncz1uLHRoaXMuaW5kZXg9LTEsdGhpcy5hY3RpdmU9MCx0aGlzLmV4dGVudD1pLmFwcGx5KHQsbil9ZnVuY3Rpb24gQSgpe2lmKHIuYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgdD13KHRoaXMsYXJndW1lbnRzKSxuPXRoaXMuX196b29tLGU9TWF0aC5tYXgoZlswXSxNYXRoLm1pbihmWzFdLG4uaypNYXRoLnBvdygyLGEuYXBwbHkodGhpcyxhcmd1bWVudHMpKSkpLGk9RnQodGhpcyk7aWYodC53aGVlbCl0Lm1vdXNlWzBdWzBdPT09aVswXSYmdC5tb3VzZVswXVsxXT09PWlbMV18fCh0Lm1vdXNlWzFdPW4uaW52ZXJ0KHQubW91c2VbMF09aSkpLGNsZWFyVGltZW91dCh0LndoZWVsKTtlbHNle2lmKG4uaz09PWUpcmV0dXJuO3QubW91c2U9W2ksbi5pbnZlcnQoaSldLE5yKHRoaXMpLHQuc3RhcnQoKX1jYigpLHQud2hlZWw9c2V0VGltZW91dChmdW5jdGlvbigpe3Qud2hlZWw9bnVsbCx0LmVuZCgpfSx2KSx0Lnpvb20oIm1vdXNlIixvKGIoXyhuLGUpLHQubW91c2VbMF0sdC5tb3VzZVsxXSksdC5leHRlbnQsYykpfX1mdW5jdGlvbiBUKCl7aWYoIWUmJnIuYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgbj13KHRoaXMsYXJndW1lbnRzKSxpPUR0KHQuZXZlbnQudmlldykub24oIm1vdXNlbW92ZS56b29tIixmdW5jdGlvbigpe2lmKGNiKCksIW4ubW92ZWQpe3ZhciBlPXQuZXZlbnQuY2xpZW50WC11LHI9dC5ldmVudC5jbGllbnRZLWY7bi5tb3ZlZD1lKmUrcipyPmd9bi56b29tKCJtb3VzZSIsbyhiKG4udGhhdC5fX3pvb20sbi5tb3VzZVswXT1GdChuLnRoYXQpLG4ubW91c2VbMV0pLG4uZXh0ZW50LGMpKX0sITApLm9uKCJtb3VzZXVwLnpvb20iLGZ1bmN0aW9uKCl7aS5vbigibW91c2Vtb3ZlLnpvb20gbW91c2V1cC56b29tIixudWxsKSxHdCh0LmV2ZW50LnZpZXcsbi5tb3ZlZCksY2IoKSxuLmVuZCgpfSwhMCksYT1GdCh0aGlzKSx1PXQuZXZlbnQuY2xpZW50WCxmPXQuZXZlbnQuY2xpZW50WTtYdCh0LmV2ZW50LnZpZXcpLGZiKCksbi5tb3VzZT1bYSx0aGlzLl9fem9vbS5pbnZlcnQoYSldLE5yKHRoaXMpLG4uc3RhcnQoKX19ZnVuY3Rpb24gTigpe2lmKHIuYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgbj10aGlzLl9fem9vbSxlPUZ0KHRoaXMpLGE9bi5pbnZlcnQoZSksdT1uLmsqKHQuZXZlbnQuc2hpZnRLZXk/LjU6MiksZj1vKGIoXyhuLHUpLGUsYSksaS5hcHBseSh0aGlzLGFyZ3VtZW50cyksYyk7Y2IoKSxzPjA/RHQodGhpcykudHJhbnNpdGlvbigpLmR1cmF0aW9uKHMpLmNhbGwoeCxmLGUpOkR0KHRoaXMpLmNhbGwoeS50cmFuc2Zvcm0sZil9fWZ1bmN0aW9uIFMoKXtpZihyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl7dmFyIGUsaSxvLGEsdT13KHRoaXMsYXJndW1lbnRzKSxmPXQuZXZlbnQuY2hhbmdlZFRvdWNoZXMsYz1mLmxlbmd0aDtmb3IoZmIoKSxpPTA7aTxjOysraSlhPVthPUl0KHRoaXMsZiwobz1mW2ldKS5pZGVudGlmaWVyKSx0aGlzLl9fem9vbS5pbnZlcnQoYSksby5pZGVudGlmaWVyXSx1LnRvdWNoMD91LnRvdWNoMXx8KHUudG91Y2gxPWEpOih1LnRvdWNoMD1hLGU9ITApO2lmKG4mJihuPWNsZWFyVGltZW91dChuKSwhdS50b3VjaDEpKXJldHVybiB1LmVuZCgpLHZvaWQoKGE9RHQodGhpcykub24oImRibGNsaWNrLnpvb20iKSkmJmEuYXBwbHkodGhpcyxhcmd1bWVudHMpKTtlJiYobj1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7bj1udWxsfSxwKSxOcih0aGlzKSx1LnN0YXJ0KCkpfX1mdW5jdGlvbiBFKCl7dmFyIGUscixpLGEsdT13KHRoaXMsYXJndW1lbnRzKSxmPXQuZXZlbnQuY2hhbmdlZFRvdWNoZXMscz1mLmxlbmd0aDtmb3IoY2IoKSxuJiYobj1jbGVhclRpbWVvdXQobikpLGU9MDtlPHM7KytlKWk9SXQodGhpcyxmLChyPWZbZV0pLmlkZW50aWZpZXIpLHUudG91Y2gwJiZ1LnRvdWNoMFsyXT09PXIuaWRlbnRpZmllcj91LnRvdWNoMFswXT1pOnUudG91Y2gxJiZ1LnRvdWNoMVsyXT09PXIuaWRlbnRpZmllciYmKHUudG91Y2gxWzBdPWkpO2lmKHI9dS50aGF0Ll9fem9vbSx1LnRvdWNoMSl7dmFyIGw9dS50b3VjaDBbMF0saD11LnRvdWNoMFsxXSxkPXUudG91Y2gxWzBdLHA9dS50b3VjaDFbMV0sdj0odj1kWzBdLWxbMF0pKnYrKHY9ZFsxXS1sWzFdKSp2LGc9KGc9cFswXS1oWzBdKSpnKyhnPXBbMV0taFsxXSkqZztyPV8ocixNYXRoLnNxcnQodi9nKSksaT1bKGxbMF0rZFswXSkvMiwobFsxXStkWzFdKS8yXSxhPVsoaFswXStwWzBdKS8yLChoWzFdK3BbMV0pLzJdfWVsc2V7aWYoIXUudG91Y2gwKXJldHVybjtpPXUudG91Y2gwWzBdLGE9dS50b3VjaDBbMV19dS56b29tKCJ0b3VjaCIsbyhiKHIsaSxhKSx1LmV4dGVudCxjKSl9ZnVuY3Rpb24gaygpe3ZhciBuLHIsaT13KHRoaXMsYXJndW1lbnRzKSxvPXQuZXZlbnQuY2hhbmdlZFRvdWNoZXMsYT1vLmxlbmd0aDtmb3IoZmIoKSxlJiZjbGVhclRpbWVvdXQoZSksZT1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZT1udWxsfSxwKSxuPTA7bjxhOysrbilyPW9bbl0saS50b3VjaDAmJmkudG91Y2gwWzJdPT09ci5pZGVudGlmaWVyP2RlbGV0ZSBpLnRvdWNoMDppLnRvdWNoMSYmaS50b3VjaDFbMl09PT1yLmlkZW50aWZpZXImJmRlbGV0ZSBpLnRvdWNoMTtpLnRvdWNoMSYmIWkudG91Y2gwJiYoaS50b3VjaDA9aS50b3VjaDEsZGVsZXRlIGkudG91Y2gxKSxpLnRvdWNoMD9pLnRvdWNoMFsxXT10aGlzLl9fem9vbS5pbnZlcnQoaS50b3VjaDBbMF0pOmkuZW5kKCl9cmV0dXJuIHkudHJhbnNmb3JtPWZ1bmN0aW9uKHQsbil7dmFyIGU9dC5zZWxlY3Rpb24/dC5zZWxlY3Rpb24oKTp0O2UucHJvcGVydHkoIl9fem9vbSIsaGIpLHQhPT1lP3godCxuKTplLmludGVycnVwdCgpLmVhY2goZnVuY3Rpb24oKXt3KHRoaXMsYXJndW1lbnRzKS5zdGFydCgpLnpvb20obnVsbCwiZnVuY3Rpb24iPT10eXBlb2Ygbj9uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpuKS5lbmQoKX0pfSx5LnNjYWxlQnk9ZnVuY3Rpb24odCxuKXt5LnNjYWxlVG8odCxmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fem9vbS5rKigiZnVuY3Rpb24iPT10eXBlb2Ygbj9uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpuKX0pfSx5LnNjYWxlVG89ZnVuY3Rpb24odCxuKXt5LnRyYW5zZm9ybSh0LGZ1bmN0aW9uKCl7dmFyIHQ9aS5hcHBseSh0aGlzLGFyZ3VtZW50cyksZT10aGlzLl9fem9vbSxyPW0odCksYT1lLmludmVydChyKSx1PSJmdW5jdGlvbiI9PXR5cGVvZiBuP24uYXBwbHkodGhpcyxhcmd1bWVudHMpOm47cmV0dXJuIG8oYihfKGUsdSkscixhKSx0LGMpfSl9LHkudHJhbnNsYXRlQnk9ZnVuY3Rpb24odCxuLGUpe3kudHJhbnNmb3JtKHQsZnVuY3Rpb24oKXtyZXR1cm4gbyh0aGlzLl9fem9vbS50cmFuc2xhdGUoImZ1bmN0aW9uIj09dHlwZW9mIG4/bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk6biwiZnVuY3Rpb24iPT10eXBlb2YgZT9lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTplKSxpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxjKX0pfSx5LnRyYW5zbGF0ZVRvPWZ1bmN0aW9uKHQsbixlKXt5LnRyYW5zZm9ybSh0LGZ1bmN0aW9uKCl7dmFyIHQ9aS5hcHBseSh0aGlzLGFyZ3VtZW50cykscj10aGlzLl9fem9vbSxhPW0odCk7cmV0dXJuIG8oYWIudHJhbnNsYXRlKGFbMF0sYVsxXSkuc2NhbGUoci5rKS50cmFuc2xhdGUoImZ1bmN0aW9uIj09dHlwZW9mIG4/LW4uYXBwbHkodGhpcyxhcmd1bWVudHMpOi1uLCJmdW5jdGlvbiI9PXR5cGVvZiBlPy1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTotZSksdCxjKX0pfSxNLnByb3RvdHlwZT17c3RhcnQ6ZnVuY3Rpb24oKXtyZXR1cm4gMT09Kyt0aGlzLmFjdGl2ZSYmKHRoaXMuaW5kZXg9aC5wdXNoKHRoaXMpLTEsdGhpcy5lbWl0KCJzdGFydCIpKSx0aGlzfSx6b29tOmZ1bmN0aW9uKHQsbil7cmV0dXJuIHRoaXMubW91c2UmJiJtb3VzZSIhPT10JiYodGhpcy5tb3VzZVsxXT1uLmludmVydCh0aGlzLm1vdXNlWzBdKSksdGhpcy50b3VjaDAmJiJ0b3VjaCIhPT10JiYodGhpcy50b3VjaDBbMV09bi5pbnZlcnQodGhpcy50b3VjaDBbMF0pKSx0aGlzLnRvdWNoMSYmInRvdWNoIiE9PXQmJih0aGlzLnRvdWNoMVsxXT1uLmludmVydCh0aGlzLnRvdWNoMVswXSkpLHRoaXMudGhhdC5fX3pvb209bix0aGlzLmVtaXQoInpvb20iKSx0aGlzfSxlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gMD09LS10aGlzLmFjdGl2ZSYmKGguc3BsaWNlKHRoaXMuaW5kZXgsMSksdGhpcy5pbmRleD0tMSx0aGlzLmVtaXQoImVuZCIpKSx0aGlzfSxlbWl0OmZ1bmN0aW9uKHQpe0N0KG5ldyBpYih5LHQsdGhpcy50aGF0Ll9fem9vbSksZC5hcHBseSxkLFt0LHRoaXMudGhhdCx0aGlzLmFyZ3NdKX19LHkud2hlZWxEZWx0YT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnJiKCt0KSx5KTphfSx5LmZpbHRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnJiKCEhdCkseSk6cn0seS50b3VjaGFibGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpyYighIXQpLHkpOnV9LHkuZXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cmIoW1srdFswXVswXSwrdFswXVsxXV0sWyt0WzFdWzBdLCt0WzFdWzFdXV0pLHkpOml9LHkuc2NhbGVFeHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGZbMF09K3RbMF0sZlsxXT0rdFsxXSx5KTpbZlswXSxmWzFdXX0seS50cmFuc2xhdGVFeHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGNbMF1bMF09K3RbMF1bMF0sY1sxXVswXT0rdFsxXVswXSxjWzBdWzFdPSt0WzBdWzFdLGNbMV1bMV09K3RbMV1bMV0seSk6W1tjWzBdWzBdLGNbMF1bMV1dLFtjWzFdWzBdLGNbMV1bMV1dXX0seS5jb25zdHJhaW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89dCx5KTpvfSx5LmR1cmF0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPSt0LHkpOnN9LHkuaW50ZXJwb2xhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9dCx5KTpsfSx5Lm9uPWZ1bmN0aW9uKCl7dmFyIHQ9ZC5vbi5hcHBseShkLGFyZ3VtZW50cyk7cmV0dXJuIHQ9PT1kP3k6dH0seS5jbGlja0Rpc3RhbmNlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhnPSh0PSt0KSp0LHkpOk1hdGguc3FydChnKX0seX0sdC56b29tVHJhbnNmb3JtPXViLHQuem9vbUlkZW50aXR5PWFiLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0pOwo8L3NjcmlwdD48c2NyaXB0PihmdW5jdGlvbihmKXtpZih0eXBlb2YgZXhwb3J0cz09PSJvYmplY3QiJiZ0eXBlb2YgbW9kdWxlIT09InVuZGVmaW5lZCIpbW9kdWxlLmV4cG9ydHM9ZigpO2Vsc2UgaWYodHlwZW9mIGRlZmluZT09PSJmdW5jdGlvbiImJmRlZmluZS5hbWQpZGVmaW5lKFtdLGYpO2Vsc2V7dmFyIGc7aWYodHlwZW9mIHdpbmRvdyE9PSJ1bmRlZmluZWQiKWc9d2luZG93O2Vsc2UgaWYodHlwZW9mIGdsb2JhbCE9PSJ1bmRlZmluZWQiKWc9Z2xvYmFsO2Vsc2UgaWYodHlwZW9mIHNlbGYhPT0idW5kZWZpbmVkIilnPXNlbGY7ZWxzZSBnPXRoaXM7Zy5ncmFwaGxpYj1mKCl9fSkoZnVuY3Rpb24oKXt2YXIgZGVmaW5lLG1vZHVsZSxleHBvcnRzO3JldHVybiBmdW5jdGlvbiBlKHQsbixyKXtmdW5jdGlvbiBzKG8sdSl7aWYoIW5bb10pe2lmKCF0W29dKXt2YXIgYT10eXBlb2YgcmVxdWlyZT09ImZ1bmN0aW9uIiYmcmVxdWlyZTtpZighdSYmYSlyZXR1cm4gYShvLCEwKTtpZihpKXJldHVybiBpKG8sITApOwp2YXIgZj1uZXcgRXJyb3IoIkNhbm5vdCBmaW5kIG1vZHVsZSAnIitvKyInIik7dGhyb3cgZi5jb2RlPSJNT0RVTEVfTk9UX0ZPVU5EIixmO312YXIgbD1uW29dPXtleHBvcnRzOnt9fTt0W29dWzBdLmNhbGwobC5leHBvcnRzLGZ1bmN0aW9uKGUpe3ZhciBuPXRbb11bMV1bZV07cmV0dXJuIHMobj9uOmUpfSxsLGwuZXhwb3J0cyxlLHQsbixyKX1yZXR1cm4gbltvXS5leHBvcnRzfXZhciBpPXR5cGVvZiByZXF1aXJlPT0iZnVuY3Rpb24iJiZyZXF1aXJlO2Zvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKXMocltvXSk7cmV0dXJuIHN9KHsxOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXt2YXIgbGliPXJlcXVpcmUoIi4vbGliIik7bW9kdWxlLmV4cG9ydHM9e0dyYXBoOmxpYi5HcmFwaCxqc29uOnJlcXVpcmUoIi4vbGliL2pzb24iKSxhbGc6cmVxdWlyZSgiLi9saWIvYWxnIiksdmVyc2lvbjpsaWIudmVyc2lvbn19LHsiLi9saWIiOjE3LCIuL2xpYi9hbGciOjgsIi4vbGliL2pzb24iOjE4fV0sCjI6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe3ZhciBfPXJlcXVpcmUoIi4uL2xvZGFzaCIpO21vZHVsZS5leHBvcnRzPWNvbXBvbmVudHM7ZnVuY3Rpb24gY29tcG9uZW50cyhnKXt2YXIgdmlzaXRlZD17fSxjbXB0cz1bXSxjbXB0O2Z1bmN0aW9uIGRmcyh2KXtpZihfLmhhcyh2aXNpdGVkLHYpKXJldHVybjt2aXNpdGVkW3ZdPXRydWU7Y21wdC5wdXNoKHYpO18uZWFjaChnLnN1Y2Nlc3NvcnModiksZGZzKTtfLmVhY2goZy5wcmVkZWNlc3NvcnModiksZGZzKX1fLmVhY2goZy5ub2RlcygpLGZ1bmN0aW9uKHYpe2NtcHQ9W107ZGZzKHYpO2lmKGNtcHQubGVuZ3RoKWNtcHRzLnB1c2goY21wdCl9KTtyZXR1cm4gY21wdHN9fSx7Ii4uL2xvZGFzaCI6MTl9XSwzOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXt2YXIgXz1yZXF1aXJlKCIuLi9sb2Rhc2giKTttb2R1bGUuZXhwb3J0cz1kZnM7ZnVuY3Rpb24gZGZzKGcsdnMsb3JkZXIpe2lmKCFfLmlzQXJyYXkodnMpKXZzPQpbdnNdO3ZhciBuYXZpZ2F0aW9uPShnLmlzRGlyZWN0ZWQoKT9nLnN1Y2Nlc3NvcnM6Zy5uZWlnaGJvcnMpLmJpbmQoZyk7dmFyIGFjYz1bXSx2aXNpdGVkPXt9O18uZWFjaCh2cyxmdW5jdGlvbih2KXtpZighZy5oYXNOb2RlKHYpKXRocm93IG5ldyBFcnJvcigiR3JhcGggZG9lcyBub3QgaGF2ZSBub2RlOiAiK3YpO2RvRGZzKGcsdixvcmRlcj09PSJwb3N0Iix2aXNpdGVkLG5hdmlnYXRpb24sYWNjKX0pO3JldHVybiBhY2N9ZnVuY3Rpb24gZG9EZnMoZyx2LHBvc3RvcmRlcix2aXNpdGVkLG5hdmlnYXRpb24sYWNjKXtpZighXy5oYXModmlzaXRlZCx2KSl7dmlzaXRlZFt2XT10cnVlO2lmKCFwb3N0b3JkZXIpYWNjLnB1c2godik7Xy5lYWNoKG5hdmlnYXRpb24odiksZnVuY3Rpb24odyl7ZG9EZnMoZyx3LHBvc3RvcmRlcix2aXNpdGVkLG5hdmlnYXRpb24sYWNjKX0pO2lmKHBvc3RvcmRlcilhY2MucHVzaCh2KX19fSx7Ii4uL2xvZGFzaCI6MTl9XSw0OltmdW5jdGlvbihyZXF1aXJlLAptb2R1bGUsZXhwb3J0cyl7dmFyIGRpamtzdHJhPXJlcXVpcmUoIi4vZGlqa3N0cmEiKSxfPXJlcXVpcmUoIi4uL2xvZGFzaCIpO21vZHVsZS5leHBvcnRzPWRpamtzdHJhQWxsO2Z1bmN0aW9uIGRpamtzdHJhQWxsKGcsd2VpZ2h0RnVuYyxlZGdlRnVuYyl7cmV0dXJuIF8udHJhbnNmb3JtKGcubm9kZXMoKSxmdW5jdGlvbihhY2Msdil7YWNjW3ZdPWRpamtzdHJhKGcsdix3ZWlnaHRGdW5jLGVkZ2VGdW5jKX0se30pfX0seyIuLi9sb2Rhc2giOjE5LCIuL2RpamtzdHJhIjo1fV0sNTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7dmFyIF89cmVxdWlyZSgiLi4vbG9kYXNoIiksUHJpb3JpdHlRdWV1ZT1yZXF1aXJlKCIuLi9kYXRhL3ByaW9yaXR5LXF1ZXVlIik7bW9kdWxlLmV4cG9ydHM9ZGlqa3N0cmE7dmFyIERFRkFVTFRfV0VJR0hUX0ZVTkM9Xy5jb25zdGFudCgxKTtmdW5jdGlvbiBkaWprc3RyYShnLHNvdXJjZSx3ZWlnaHRGbixlZGdlRm4pe3JldHVybiBydW5EaWprc3RyYShnLApTdHJpbmcoc291cmNlKSx3ZWlnaHRGbnx8REVGQVVMVF9XRUlHSFRfRlVOQyxlZGdlRm58fGZ1bmN0aW9uKHYpe3JldHVybiBnLm91dEVkZ2VzKHYpfSl9ZnVuY3Rpb24gcnVuRGlqa3N0cmEoZyxzb3VyY2Usd2VpZ2h0Rm4sZWRnZUZuKXt2YXIgcmVzdWx0cz17fSxwcT1uZXcgUHJpb3JpdHlRdWV1ZSx2LHZFbnRyeTt2YXIgdXBkYXRlTmVpZ2hib3JzPWZ1bmN0aW9uKGVkZ2Upe3ZhciB3PWVkZ2UudiE9PXY/ZWRnZS52OmVkZ2Uudyx3RW50cnk9cmVzdWx0c1t3XSx3ZWlnaHQ9d2VpZ2h0Rm4oZWRnZSksZGlzdGFuY2U9dkVudHJ5LmRpc3RhbmNlK3dlaWdodDtpZih3ZWlnaHQ8MCl0aHJvdyBuZXcgRXJyb3IoImRpamtzdHJhIGRvZXMgbm90IGFsbG93IG5lZ2F0aXZlIGVkZ2Ugd2VpZ2h0cy4gIisiQmFkIGVkZ2U6ICIrZWRnZSsiIFdlaWdodDogIit3ZWlnaHQpO2lmKGRpc3RhbmNlPHdFbnRyeS5kaXN0YW5jZSl7d0VudHJ5LmRpc3RhbmNlPWRpc3RhbmNlO3dFbnRyeS5wcmVkZWNlc3Nvcj0KdjtwcS5kZWNyZWFzZSh3LGRpc3RhbmNlKX19O2cubm9kZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKHYpe3ZhciBkaXN0YW5jZT12PT09c291cmNlPzA6TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO3Jlc3VsdHNbdl09e2Rpc3RhbmNlOmRpc3RhbmNlfTtwcS5hZGQodixkaXN0YW5jZSl9KTt3aGlsZShwcS5zaXplKCk+MCl7dj1wcS5yZW1vdmVNaW4oKTt2RW50cnk9cmVzdWx0c1t2XTtpZih2RW50cnkuZGlzdGFuY2U9PT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpYnJlYWs7ZWRnZUZuKHYpLmZvckVhY2godXBkYXRlTmVpZ2hib3JzKX1yZXR1cm4gcmVzdWx0c319LHsiLi4vZGF0YS9wcmlvcml0eS1xdWV1ZSI6MTUsIi4uL2xvZGFzaCI6MTl9XSw2OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXt2YXIgXz1yZXF1aXJlKCIuLi9sb2Rhc2giKSx0YXJqYW49cmVxdWlyZSgiLi90YXJqYW4iKTttb2R1bGUuZXhwb3J0cz1maW5kQ3ljbGVzO2Z1bmN0aW9uIGZpbmRDeWNsZXMoZyl7cmV0dXJuIF8uZmlsdGVyKHRhcmphbihnKSwKZnVuY3Rpb24oY21wdCl7cmV0dXJuIGNtcHQubGVuZ3RoPjF8fGNtcHQubGVuZ3RoPT09MSYmZy5oYXNFZGdlKGNtcHRbMF0sY21wdFswXSl9KX19LHsiLi4vbG9kYXNoIjoxOSwiLi90YXJqYW4iOjEzfV0sNzpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7dmFyIF89cmVxdWlyZSgiLi4vbG9kYXNoIik7bW9kdWxlLmV4cG9ydHM9ZmxveWRXYXJzaGFsbDt2YXIgREVGQVVMVF9XRUlHSFRfRlVOQz1fLmNvbnN0YW50KDEpO2Z1bmN0aW9uIGZsb3lkV2Fyc2hhbGwoZyx3ZWlnaHRGbixlZGdlRm4pe3JldHVybiBydW5GbG95ZFdhcnNoYWxsKGcsd2VpZ2h0Rm58fERFRkFVTFRfV0VJR0hUX0ZVTkMsZWRnZUZufHxmdW5jdGlvbih2KXtyZXR1cm4gZy5vdXRFZGdlcyh2KX0pfWZ1bmN0aW9uIHJ1bkZsb3lkV2Fyc2hhbGwoZyx3ZWlnaHRGbixlZGdlRm4pe3ZhciByZXN1bHRzPXt9LG5vZGVzPWcubm9kZXMoKTtub2Rlcy5mb3JFYWNoKGZ1bmN0aW9uKHYpe3Jlc3VsdHNbdl09Cnt9O3Jlc3VsdHNbdl1bdl09e2Rpc3RhbmNlOjB9O25vZGVzLmZvckVhY2goZnVuY3Rpb24odyl7aWYodiE9PXcpcmVzdWx0c1t2XVt3XT17ZGlzdGFuY2U6TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZfX0pO2VkZ2VGbih2KS5mb3JFYWNoKGZ1bmN0aW9uKGVkZ2Upe3ZhciB3PWVkZ2Uudj09PXY/ZWRnZS53OmVkZ2UudixkPXdlaWdodEZuKGVkZ2UpO3Jlc3VsdHNbdl1bd109e2Rpc3RhbmNlOmQscHJlZGVjZXNzb3I6dn19KX0pO25vZGVzLmZvckVhY2goZnVuY3Rpb24oayl7dmFyIHJvd0s9cmVzdWx0c1trXTtub2Rlcy5mb3JFYWNoKGZ1bmN0aW9uKGkpe3ZhciByb3dJPXJlc3VsdHNbaV07bm9kZXMuZm9yRWFjaChmdW5jdGlvbihqKXt2YXIgaWs9cm93SVtrXTt2YXIga2o9cm93S1tqXTt2YXIgaWo9cm93SVtqXTt2YXIgYWx0RGlzdGFuY2U9aWsuZGlzdGFuY2Ura2ouZGlzdGFuY2U7aWYoYWx0RGlzdGFuY2U8aWouZGlzdGFuY2Upe2lqLmRpc3RhbmNlPWFsdERpc3RhbmNlO2lqLnByZWRlY2Vzc29yPQprai5wcmVkZWNlc3Nvcn19KX0pfSk7cmV0dXJuIHJlc3VsdHN9fSx7Ii4uL2xvZGFzaCI6MTl9XSw4OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXttb2R1bGUuZXhwb3J0cz17Y29tcG9uZW50czpyZXF1aXJlKCIuL2NvbXBvbmVudHMiKSxkaWprc3RyYTpyZXF1aXJlKCIuL2RpamtzdHJhIiksZGlqa3N0cmFBbGw6cmVxdWlyZSgiLi9kaWprc3RyYS1hbGwiKSxmaW5kQ3ljbGVzOnJlcXVpcmUoIi4vZmluZC1jeWNsZXMiKSxmbG95ZFdhcnNoYWxsOnJlcXVpcmUoIi4vZmxveWQtd2Fyc2hhbGwiKSxpc0FjeWNsaWM6cmVxdWlyZSgiLi9pcy1hY3ljbGljIikscG9zdG9yZGVyOnJlcXVpcmUoIi4vcG9zdG9yZGVyIikscHJlb3JkZXI6cmVxdWlyZSgiLi9wcmVvcmRlciIpLHByaW06cmVxdWlyZSgiLi9wcmltIiksdGFyamFuOnJlcXVpcmUoIi4vdGFyamFuIiksdG9wc29ydDpyZXF1aXJlKCIuL3RvcHNvcnQiKX19LHsiLi9jb21wb25lbnRzIjoyLCIuL2RpamtzdHJhIjo1LAoiLi9kaWprc3RyYS1hbGwiOjQsIi4vZmluZC1jeWNsZXMiOjYsIi4vZmxveWQtd2Fyc2hhbGwiOjcsIi4vaXMtYWN5Y2xpYyI6OSwiLi9wb3N0b3JkZXIiOjEwLCIuL3ByZW9yZGVyIjoxMSwiLi9wcmltIjoxMiwiLi90YXJqYW4iOjEzLCIuL3RvcHNvcnQiOjE0fV0sOTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7dmFyIHRvcHNvcnQ9cmVxdWlyZSgiLi90b3Bzb3J0Iik7bW9kdWxlLmV4cG9ydHM9aXNBY3ljbGljO2Z1bmN0aW9uIGlzQWN5Y2xpYyhnKXt0cnl7dG9wc29ydChnKX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2YgdG9wc29ydC5DeWNsZUV4Y2VwdGlvbilyZXR1cm4gZmFsc2U7dGhyb3cgZTt9cmV0dXJuIHRydWV9fSx7Ii4vdG9wc29ydCI6MTR9XSwxMDpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7dmFyIGRmcz1yZXF1aXJlKCIuL2RmcyIpO21vZHVsZS5leHBvcnRzPXBvc3RvcmRlcjtmdW5jdGlvbiBwb3N0b3JkZXIoZyx2cyl7cmV0dXJuIGRmcyhnLAp2cywicG9zdCIpfX0seyIuL2RmcyI6M31dLDExOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXt2YXIgZGZzPXJlcXVpcmUoIi4vZGZzIik7bW9kdWxlLmV4cG9ydHM9cHJlb3JkZXI7ZnVuY3Rpb24gcHJlb3JkZXIoZyx2cyl7cmV0dXJuIGRmcyhnLHZzLCJwcmUiKX19LHsiLi9kZnMiOjN9XSwxMjpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7dmFyIF89cmVxdWlyZSgiLi4vbG9kYXNoIiksR3JhcGg9cmVxdWlyZSgiLi4vZ3JhcGgiKSxQcmlvcml0eVF1ZXVlPXJlcXVpcmUoIi4uL2RhdGEvcHJpb3JpdHktcXVldWUiKTttb2R1bGUuZXhwb3J0cz1wcmltO2Z1bmN0aW9uIHByaW0oZyx3ZWlnaHRGdW5jKXt2YXIgcmVzdWx0PW5ldyBHcmFwaCxwYXJlbnRzPXt9LHBxPW5ldyBQcmlvcml0eVF1ZXVlLHY7ZnVuY3Rpb24gdXBkYXRlTmVpZ2hib3JzKGVkZ2Upe3ZhciB3PWVkZ2Uudj09PXY/ZWRnZS53OmVkZ2Uudixwcmk9cHEucHJpb3JpdHkodyk7aWYocHJpIT09CnVuZGVmaW5lZCl7dmFyIGVkZ2VXZWlnaHQ9d2VpZ2h0RnVuYyhlZGdlKTtpZihlZGdlV2VpZ2h0PHByaSl7cGFyZW50c1t3XT12O3BxLmRlY3JlYXNlKHcsZWRnZVdlaWdodCl9fX1pZihnLm5vZGVDb3VudCgpPT09MClyZXR1cm4gcmVzdWx0O18uZWFjaChnLm5vZGVzKCksZnVuY3Rpb24odil7cHEuYWRkKHYsTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKTtyZXN1bHQuc2V0Tm9kZSh2KX0pO3BxLmRlY3JlYXNlKGcubm9kZXMoKVswXSwwKTt2YXIgaW5pdD1mYWxzZTt3aGlsZShwcS5zaXplKCk+MCl7dj1wcS5yZW1vdmVNaW4oKTtpZihfLmhhcyhwYXJlbnRzLHYpKXJlc3VsdC5zZXRFZGdlKHYscGFyZW50c1t2XSk7ZWxzZSBpZihpbml0KXRocm93IG5ldyBFcnJvcigiSW5wdXQgZ3JhcGggaXMgbm90IGNvbm5lY3RlZDogIitnKTtlbHNlIGluaXQ9dHJ1ZTtnLm5vZGVFZGdlcyh2KS5mb3JFYWNoKHVwZGF0ZU5laWdoYm9ycyl9cmV0dXJuIHJlc3VsdH19LHsiLi4vZGF0YS9wcmlvcml0eS1xdWV1ZSI6MTUsCiIuLi9ncmFwaCI6MTYsIi4uL2xvZGFzaCI6MTl9XSwxMzpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7dmFyIF89cmVxdWlyZSgiLi4vbG9kYXNoIik7bW9kdWxlLmV4cG9ydHM9dGFyamFuO2Z1bmN0aW9uIHRhcmphbihnKXt2YXIgaW5kZXg9MCxzdGFjaz1bXSx2aXNpdGVkPXt9LHJlc3VsdHM9W107ZnVuY3Rpb24gZGZzKHYpe3ZhciBlbnRyeT12aXNpdGVkW3ZdPXtvblN0YWNrOnRydWUsbG93bGluazppbmRleCxpbmRleDppbmRleCsrfTtzdGFjay5wdXNoKHYpO2cuc3VjY2Vzc29ycyh2KS5mb3JFYWNoKGZ1bmN0aW9uKHcpe2lmKCFfLmhhcyh2aXNpdGVkLHcpKXtkZnModyk7ZW50cnkubG93bGluaz1NYXRoLm1pbihlbnRyeS5sb3dsaW5rLHZpc2l0ZWRbd10ubG93bGluayl9ZWxzZSBpZih2aXNpdGVkW3ddLm9uU3RhY2spZW50cnkubG93bGluaz1NYXRoLm1pbihlbnRyeS5sb3dsaW5rLHZpc2l0ZWRbd10uaW5kZXgpfSk7aWYoZW50cnkubG93bGluaz09PWVudHJ5LmluZGV4KXt2YXIgY21wdD0KW10sdztkb3t3PXN0YWNrLnBvcCgpO3Zpc2l0ZWRbd10ub25TdGFjaz1mYWxzZTtjbXB0LnB1c2godyl9d2hpbGUodiE9PXcpO3Jlc3VsdHMucHVzaChjbXB0KX19Zy5ub2RlcygpLmZvckVhY2goZnVuY3Rpb24odil7aWYoIV8uaGFzKHZpc2l0ZWQsdikpZGZzKHYpfSk7cmV0dXJuIHJlc3VsdHN9fSx7Ii4uL2xvZGFzaCI6MTl9XSwxNDpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7dmFyIF89cmVxdWlyZSgiLi4vbG9kYXNoIik7bW9kdWxlLmV4cG9ydHM9dG9wc29ydDt0b3Bzb3J0LkN5Y2xlRXhjZXB0aW9uPUN5Y2xlRXhjZXB0aW9uO2Z1bmN0aW9uIHRvcHNvcnQoZyl7dmFyIHZpc2l0ZWQ9e30sc3RhY2s9e30scmVzdWx0cz1bXTtmdW5jdGlvbiB2aXNpdChub2RlKXtpZihfLmhhcyhzdGFjayxub2RlKSl0aHJvdyBuZXcgQ3ljbGVFeGNlcHRpb247aWYoIV8uaGFzKHZpc2l0ZWQsbm9kZSkpe3N0YWNrW25vZGVdPXRydWU7dmlzaXRlZFtub2RlXT10cnVlO18uZWFjaChnLnByZWRlY2Vzc29ycyhub2RlKSwKdmlzaXQpO2RlbGV0ZSBzdGFja1tub2RlXTtyZXN1bHRzLnB1c2gobm9kZSl9fV8uZWFjaChnLnNpbmtzKCksdmlzaXQpO2lmKF8uc2l6ZSh2aXNpdGVkKSE9PWcubm9kZUNvdW50KCkpdGhyb3cgbmV3IEN5Y2xlRXhjZXB0aW9uO3JldHVybiByZXN1bHRzfWZ1bmN0aW9uIEN5Y2xlRXhjZXB0aW9uKCl7fX0seyIuLi9sb2Rhc2giOjE5fV0sMTU6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe3ZhciBfPXJlcXVpcmUoIi4uL2xvZGFzaCIpO21vZHVsZS5leHBvcnRzPVByaW9yaXR5UXVldWU7ZnVuY3Rpb24gUHJpb3JpdHlRdWV1ZSgpe3RoaXMuX2Fycj1bXTt0aGlzLl9rZXlJbmRpY2VzPXt9fVByaW9yaXR5UXVldWUucHJvdG90eXBlLnNpemU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXJyLmxlbmd0aH07UHJpb3JpdHlRdWV1ZS5wcm90b3R5cGUua2V5cz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcnIubWFwKGZ1bmN0aW9uKHgpe3JldHVybiB4LmtleX0pfTtQcmlvcml0eVF1ZXVlLnByb3RvdHlwZS5oYXM9CmZ1bmN0aW9uKGtleSl7cmV0dXJuIF8uaGFzKHRoaXMuX2tleUluZGljZXMsa2V5KX07UHJpb3JpdHlRdWV1ZS5wcm90b3R5cGUucHJpb3JpdHk9ZnVuY3Rpb24oa2V5KXt2YXIgaW5kZXg9dGhpcy5fa2V5SW5kaWNlc1trZXldO2lmKGluZGV4IT09dW5kZWZpbmVkKXJldHVybiB0aGlzLl9hcnJbaW5kZXhdLnByaW9yaXR5fTtQcmlvcml0eVF1ZXVlLnByb3RvdHlwZS5taW49ZnVuY3Rpb24oKXtpZih0aGlzLnNpemUoKT09PTApdGhyb3cgbmV3IEVycm9yKCJRdWV1ZSB1bmRlcmZsb3ciKTtyZXR1cm4gdGhpcy5fYXJyWzBdLmtleX07UHJpb3JpdHlRdWV1ZS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGtleSxwcmlvcml0eSl7dmFyIGtleUluZGljZXM9dGhpcy5fa2V5SW5kaWNlcztrZXk9U3RyaW5nKGtleSk7aWYoIV8uaGFzKGtleUluZGljZXMsa2V5KSl7dmFyIGFycj10aGlzLl9hcnI7dmFyIGluZGV4PWFyci5sZW5ndGg7a2V5SW5kaWNlc1trZXldPWluZGV4O2Fyci5wdXNoKHtrZXk6a2V5LApwcmlvcml0eTpwcmlvcml0eX0pO3RoaXMuX2RlY3JlYXNlKGluZGV4KTtyZXR1cm4gdHJ1ZX1yZXR1cm4gZmFsc2V9O1ByaW9yaXR5UXVldWUucHJvdG90eXBlLnJlbW92ZU1pbj1mdW5jdGlvbigpe3RoaXMuX3N3YXAoMCx0aGlzLl9hcnIubGVuZ3RoLTEpO3ZhciBtaW49dGhpcy5fYXJyLnBvcCgpO2RlbGV0ZSB0aGlzLl9rZXlJbmRpY2VzW21pbi5rZXldO3RoaXMuX2hlYXBpZnkoMCk7cmV0dXJuIG1pbi5rZXl9O1ByaW9yaXR5UXVldWUucHJvdG90eXBlLmRlY3JlYXNlPWZ1bmN0aW9uKGtleSxwcmlvcml0eSl7dmFyIGluZGV4PXRoaXMuX2tleUluZGljZXNba2V5XTtpZihwcmlvcml0eT50aGlzLl9hcnJbaW5kZXhdLnByaW9yaXR5KXRocm93IG5ldyBFcnJvcigiTmV3IHByaW9yaXR5IGlzIGdyZWF0ZXIgdGhhbiBjdXJyZW50IHByaW9yaXR5LiAiKyJLZXk6ICIra2V5KyIgT2xkOiAiK3RoaXMuX2FycltpbmRleF0ucHJpb3JpdHkrIiBOZXc6ICIrcHJpb3JpdHkpO3RoaXMuX2FycltpbmRleF0ucHJpb3JpdHk9CnByaW9yaXR5O3RoaXMuX2RlY3JlYXNlKGluZGV4KX07UHJpb3JpdHlRdWV1ZS5wcm90b3R5cGUuX2hlYXBpZnk9ZnVuY3Rpb24oaSl7dmFyIGFycj10aGlzLl9hcnI7dmFyIGw9MippLHI9bCsxLGxhcmdlc3Q9aTtpZihsPGFyci5sZW5ndGgpe2xhcmdlc3Q9YXJyW2xdLnByaW9yaXR5PGFycltsYXJnZXN0XS5wcmlvcml0eT9sOmxhcmdlc3Q7aWYocjxhcnIubGVuZ3RoKWxhcmdlc3Q9YXJyW3JdLnByaW9yaXR5PGFycltsYXJnZXN0XS5wcmlvcml0eT9yOmxhcmdlc3Q7aWYobGFyZ2VzdCE9PWkpe3RoaXMuX3N3YXAoaSxsYXJnZXN0KTt0aGlzLl9oZWFwaWZ5KGxhcmdlc3QpfX19O1ByaW9yaXR5UXVldWUucHJvdG90eXBlLl9kZWNyZWFzZT1mdW5jdGlvbihpbmRleCl7dmFyIGFycj10aGlzLl9hcnI7dmFyIHByaW9yaXR5PWFycltpbmRleF0ucHJpb3JpdHk7dmFyIHBhcmVudDt3aGlsZShpbmRleCE9PTApe3BhcmVudD1pbmRleD4+MTtpZihhcnJbcGFyZW50XS5wcmlvcml0eTxwcmlvcml0eSlicmVhazsKdGhpcy5fc3dhcChpbmRleCxwYXJlbnQpO2luZGV4PXBhcmVudH19O1ByaW9yaXR5UXVldWUucHJvdG90eXBlLl9zd2FwPWZ1bmN0aW9uKGksail7dmFyIGFycj10aGlzLl9hcnI7dmFyIGtleUluZGljZXM9dGhpcy5fa2V5SW5kaWNlczt2YXIgb3JpZ0Fyckk9YXJyW2ldO3ZhciBvcmlnQXJySj1hcnJbal07YXJyW2ldPW9yaWdBcnJKO2FycltqXT1vcmlnQXJySTtrZXlJbmRpY2VzW29yaWdBcnJKLmtleV09aTtrZXlJbmRpY2VzW29yaWdBcnJJLmtleV09an19LHsiLi4vbG9kYXNoIjoxOX1dLDE2OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXt2YXIgXz1yZXF1aXJlKCIuL2xvZGFzaCIpO21vZHVsZS5leHBvcnRzPUdyYXBoO3ZhciBERUZBVUxUX0VER0VfTkFNRT0iXHgwMCIsR1JBUEhfTk9ERT0iXHgwMCIsRURHRV9LRVlfREVMSU09Ilx1MDAwMSI7ZnVuY3Rpb24gR3JhcGgob3B0cyl7dGhpcy5faXNEaXJlY3RlZD1fLmhhcyhvcHRzLCJkaXJlY3RlZCIpP29wdHMuZGlyZWN0ZWQ6CnRydWU7dGhpcy5faXNNdWx0aWdyYXBoPV8uaGFzKG9wdHMsIm11bHRpZ3JhcGgiKT9vcHRzLm11bHRpZ3JhcGg6ZmFsc2U7dGhpcy5faXNDb21wb3VuZD1fLmhhcyhvcHRzLCJjb21wb3VuZCIpP29wdHMuY29tcG91bmQ6ZmFsc2U7dGhpcy5fbGFiZWw9dW5kZWZpbmVkO3RoaXMuX2RlZmF1bHROb2RlTGFiZWxGbj1fLmNvbnN0YW50KHVuZGVmaW5lZCk7dGhpcy5fZGVmYXVsdEVkZ2VMYWJlbEZuPV8uY29uc3RhbnQodW5kZWZpbmVkKTt0aGlzLl9ub2Rlcz17fTtpZih0aGlzLl9pc0NvbXBvdW5kKXt0aGlzLl9wYXJlbnQ9e307dGhpcy5fY2hpbGRyZW49e307dGhpcy5fY2hpbGRyZW5bR1JBUEhfTk9ERV09e319dGhpcy5faW49e307dGhpcy5fcHJlZHM9e307dGhpcy5fb3V0PXt9O3RoaXMuX3N1Y3M9e307dGhpcy5fZWRnZU9ianM9e307dGhpcy5fZWRnZUxhYmVscz17fX1HcmFwaC5wcm90b3R5cGUuX25vZGVDb3VudD0wO0dyYXBoLnByb3RvdHlwZS5fZWRnZUNvdW50PTA7R3JhcGgucHJvdG90eXBlLmlzRGlyZWN0ZWQ9CmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lzRGlyZWN0ZWR9O0dyYXBoLnByb3RvdHlwZS5pc011bHRpZ3JhcGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faXNNdWx0aWdyYXBofTtHcmFwaC5wcm90b3R5cGUuaXNDb21wb3VuZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9pc0NvbXBvdW5kfTtHcmFwaC5wcm90b3R5cGUuc2V0R3JhcGg9ZnVuY3Rpb24obGFiZWwpe3RoaXMuX2xhYmVsPWxhYmVsO3JldHVybiB0aGlzfTtHcmFwaC5wcm90b3R5cGUuZ3JhcGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbGFiZWx9O0dyYXBoLnByb3RvdHlwZS5zZXREZWZhdWx0Tm9kZUxhYmVsPWZ1bmN0aW9uKG5ld0RlZmF1bHQpe2lmKCFfLmlzRnVuY3Rpb24obmV3RGVmYXVsdCkpbmV3RGVmYXVsdD1fLmNvbnN0YW50KG5ld0RlZmF1bHQpO3RoaXMuX2RlZmF1bHROb2RlTGFiZWxGbj1uZXdEZWZhdWx0O3JldHVybiB0aGlzfTtHcmFwaC5wcm90b3R5cGUubm9kZUNvdW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX25vZGVDb3VudH07CkdyYXBoLnByb3RvdHlwZS5ub2Rlcz1mdW5jdGlvbigpe3JldHVybiBfLmtleXModGhpcy5fbm9kZXMpfTtHcmFwaC5wcm90b3R5cGUuc291cmNlcz1mdW5jdGlvbigpe3ZhciBzZWxmPXRoaXM7cmV0dXJuIF8uZmlsdGVyKHRoaXMubm9kZXMoKSxmdW5jdGlvbih2KXtyZXR1cm4gXy5pc0VtcHR5KHNlbGYuX2luW3ZdKX0pfTtHcmFwaC5wcm90b3R5cGUuc2lua3M9ZnVuY3Rpb24oKXt2YXIgc2VsZj10aGlzO3JldHVybiBfLmZpbHRlcih0aGlzLm5vZGVzKCksZnVuY3Rpb24odil7cmV0dXJuIF8uaXNFbXB0eShzZWxmLl9vdXRbdl0pfSl9O0dyYXBoLnByb3RvdHlwZS5zZXROb2Rlcz1mdW5jdGlvbih2cyx2YWx1ZSl7dmFyIGFyZ3M9YXJndW1lbnRzO3ZhciBzZWxmPXRoaXM7Xy5lYWNoKHZzLGZ1bmN0aW9uKHYpe2lmKGFyZ3MubGVuZ3RoPjEpc2VsZi5zZXROb2RlKHYsdmFsdWUpO2Vsc2Ugc2VsZi5zZXROb2RlKHYpfSk7cmV0dXJuIHRoaXN9O0dyYXBoLnByb3RvdHlwZS5zZXROb2RlPQpmdW5jdGlvbih2LHZhbHVlKXtpZihfLmhhcyh0aGlzLl9ub2Rlcyx2KSl7aWYoYXJndW1lbnRzLmxlbmd0aD4xKXRoaXMuX25vZGVzW3ZdPXZhbHVlO3JldHVybiB0aGlzfXRoaXMuX25vZGVzW3ZdPWFyZ3VtZW50cy5sZW5ndGg+MT92YWx1ZTp0aGlzLl9kZWZhdWx0Tm9kZUxhYmVsRm4odik7aWYodGhpcy5faXNDb21wb3VuZCl7dGhpcy5fcGFyZW50W3ZdPUdSQVBIX05PREU7dGhpcy5fY2hpbGRyZW5bdl09e307dGhpcy5fY2hpbGRyZW5bR1JBUEhfTk9ERV1bdl09dHJ1ZX10aGlzLl9pblt2XT17fTt0aGlzLl9wcmVkc1t2XT17fTt0aGlzLl9vdXRbdl09e307dGhpcy5fc3Vjc1t2XT17fTsrK3RoaXMuX25vZGVDb3VudDtyZXR1cm4gdGhpc307R3JhcGgucHJvdG90eXBlLm5vZGU9ZnVuY3Rpb24odil7cmV0dXJuIHRoaXMuX25vZGVzW3ZdfTtHcmFwaC5wcm90b3R5cGUuaGFzTm9kZT1mdW5jdGlvbih2KXtyZXR1cm4gXy5oYXModGhpcy5fbm9kZXMsdil9O0dyYXBoLnByb3RvdHlwZS5yZW1vdmVOb2RlPQpmdW5jdGlvbih2KXt2YXIgc2VsZj10aGlzO2lmKF8uaGFzKHRoaXMuX25vZGVzLHYpKXt2YXIgcmVtb3ZlRWRnZT1mdW5jdGlvbihlKXtzZWxmLnJlbW92ZUVkZ2Uoc2VsZi5fZWRnZU9ianNbZV0pfTtkZWxldGUgdGhpcy5fbm9kZXNbdl07aWYodGhpcy5faXNDb21wb3VuZCl7dGhpcy5fcmVtb3ZlRnJvbVBhcmVudHNDaGlsZExpc3Qodik7ZGVsZXRlIHRoaXMuX3BhcmVudFt2XTtfLmVhY2godGhpcy5jaGlsZHJlbih2KSxmdW5jdGlvbihjaGlsZCl7c2VsZi5zZXRQYXJlbnQoY2hpbGQpfSk7ZGVsZXRlIHRoaXMuX2NoaWxkcmVuW3ZdfV8uZWFjaChfLmtleXModGhpcy5faW5bdl0pLHJlbW92ZUVkZ2UpO2RlbGV0ZSB0aGlzLl9pblt2XTtkZWxldGUgdGhpcy5fcHJlZHNbdl07Xy5lYWNoKF8ua2V5cyh0aGlzLl9vdXRbdl0pLHJlbW92ZUVkZ2UpO2RlbGV0ZSB0aGlzLl9vdXRbdl07ZGVsZXRlIHRoaXMuX3N1Y3Nbdl07LS10aGlzLl9ub2RlQ291bnR9cmV0dXJuIHRoaXN9O0dyYXBoLnByb3RvdHlwZS5zZXRQYXJlbnQ9CmZ1bmN0aW9uKHYscGFyZW50KXtpZighdGhpcy5faXNDb21wb3VuZCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBzZXQgcGFyZW50IGluIGEgbm9uLWNvbXBvdW5kIGdyYXBoIik7aWYoXy5pc1VuZGVmaW5lZChwYXJlbnQpKXBhcmVudD1HUkFQSF9OT0RFO2Vsc2V7cGFyZW50Kz0iIjtmb3IodmFyIGFuY2VzdG9yPXBhcmVudDshXy5pc1VuZGVmaW5lZChhbmNlc3Rvcik7YW5jZXN0b3I9dGhpcy5wYXJlbnQoYW5jZXN0b3IpKWlmKGFuY2VzdG9yPT09dil0aHJvdyBuZXcgRXJyb3IoIlNldHRpbmcgIitwYXJlbnQrIiBhcyBwYXJlbnQgb2YgIit2KyIgd291bGQgY3JlYXRlIGEgY3ljbGUiKTt0aGlzLnNldE5vZGUocGFyZW50KX10aGlzLnNldE5vZGUodik7dGhpcy5fcmVtb3ZlRnJvbVBhcmVudHNDaGlsZExpc3Qodik7dGhpcy5fcGFyZW50W3ZdPXBhcmVudDt0aGlzLl9jaGlsZHJlbltwYXJlbnRdW3ZdPXRydWU7cmV0dXJuIHRoaXN9O0dyYXBoLnByb3RvdHlwZS5fcmVtb3ZlRnJvbVBhcmVudHNDaGlsZExpc3Q9CmZ1bmN0aW9uKHYpe2RlbGV0ZSB0aGlzLl9jaGlsZHJlblt0aGlzLl9wYXJlbnRbdl1dW3ZdfTtHcmFwaC5wcm90b3R5cGUucGFyZW50PWZ1bmN0aW9uKHYpe2lmKHRoaXMuX2lzQ29tcG91bmQpe3ZhciBwYXJlbnQ9dGhpcy5fcGFyZW50W3ZdO2lmKHBhcmVudCE9PUdSQVBIX05PREUpcmV0dXJuIHBhcmVudH19O0dyYXBoLnByb3RvdHlwZS5jaGlsZHJlbj1mdW5jdGlvbih2KXtpZihfLmlzVW5kZWZpbmVkKHYpKXY9R1JBUEhfTk9ERTtpZih0aGlzLl9pc0NvbXBvdW5kKXt2YXIgY2hpbGRyZW49dGhpcy5fY2hpbGRyZW5bdl07aWYoY2hpbGRyZW4pcmV0dXJuIF8ua2V5cyhjaGlsZHJlbil9ZWxzZSBpZih2PT09R1JBUEhfTk9ERSlyZXR1cm4gdGhpcy5ub2RlcygpO2Vsc2UgaWYodGhpcy5oYXNOb2RlKHYpKXJldHVybltdfTtHcmFwaC5wcm90b3R5cGUucHJlZGVjZXNzb3JzPWZ1bmN0aW9uKHYpe3ZhciBwcmVkc1Y9dGhpcy5fcHJlZHNbdl07aWYocHJlZHNWKXJldHVybiBfLmtleXMocHJlZHNWKX07CkdyYXBoLnByb3RvdHlwZS5zdWNjZXNzb3JzPWZ1bmN0aW9uKHYpe3ZhciBzdWNzVj10aGlzLl9zdWNzW3ZdO2lmKHN1Y3NWKXJldHVybiBfLmtleXMoc3Vjc1YpfTtHcmFwaC5wcm90b3R5cGUubmVpZ2hib3JzPWZ1bmN0aW9uKHYpe3ZhciBwcmVkcz10aGlzLnByZWRlY2Vzc29ycyh2KTtpZihwcmVkcylyZXR1cm4gXy51bmlvbihwcmVkcyx0aGlzLnN1Y2Nlc3NvcnModikpfTtHcmFwaC5wcm90b3R5cGUuaXNMZWFmPWZ1bmN0aW9uKHYpe3ZhciBuZWlnaGJvcnM7aWYodGhpcy5pc0RpcmVjdGVkKCkpbmVpZ2hib3JzPXRoaXMuc3VjY2Vzc29ycyh2KTtlbHNlIG5laWdoYm9ycz10aGlzLm5laWdoYm9ycyh2KTtyZXR1cm4gbmVpZ2hib3JzLmxlbmd0aD09PTB9O0dyYXBoLnByb3RvdHlwZS5maWx0ZXJOb2Rlcz1mdW5jdGlvbihmaWx0ZXIpe3ZhciBjb3B5PW5ldyB0aGlzLmNvbnN0cnVjdG9yKHtkaXJlY3RlZDp0aGlzLl9pc0RpcmVjdGVkLG11bHRpZ3JhcGg6dGhpcy5faXNNdWx0aWdyYXBoLApjb21wb3VuZDp0aGlzLl9pc0NvbXBvdW5kfSk7Y29weS5zZXRHcmFwaCh0aGlzLmdyYXBoKCkpO3ZhciBzZWxmPXRoaXM7Xy5lYWNoKHRoaXMuX25vZGVzLGZ1bmN0aW9uKHZhbHVlLHYpe2lmKGZpbHRlcih2KSljb3B5LnNldE5vZGUodix2YWx1ZSl9KTtfLmVhY2godGhpcy5fZWRnZU9ianMsZnVuY3Rpb24oZSl7aWYoY29weS5oYXNOb2RlKGUudikmJmNvcHkuaGFzTm9kZShlLncpKWNvcHkuc2V0RWRnZShlLHNlbGYuZWRnZShlKSl9KTt2YXIgcGFyZW50cz17fTtmdW5jdGlvbiBmaW5kUGFyZW50KHYpe3ZhciBwYXJlbnQ9c2VsZi5wYXJlbnQodik7aWYocGFyZW50PT09dW5kZWZpbmVkfHxjb3B5Lmhhc05vZGUocGFyZW50KSl7cGFyZW50c1t2XT1wYXJlbnQ7cmV0dXJuIHBhcmVudH1lbHNlIGlmKHBhcmVudCBpbiBwYXJlbnRzKXJldHVybiBwYXJlbnRzW3BhcmVudF07ZWxzZSByZXR1cm4gZmluZFBhcmVudChwYXJlbnQpfWlmKHRoaXMuX2lzQ29tcG91bmQpXy5lYWNoKGNvcHkubm9kZXMoKSwKZnVuY3Rpb24odil7Y29weS5zZXRQYXJlbnQodixmaW5kUGFyZW50KHYpKX0pO3JldHVybiBjb3B5fTtHcmFwaC5wcm90b3R5cGUuc2V0RGVmYXVsdEVkZ2VMYWJlbD1mdW5jdGlvbihuZXdEZWZhdWx0KXtpZighXy5pc0Z1bmN0aW9uKG5ld0RlZmF1bHQpKW5ld0RlZmF1bHQ9Xy5jb25zdGFudChuZXdEZWZhdWx0KTt0aGlzLl9kZWZhdWx0RWRnZUxhYmVsRm49bmV3RGVmYXVsdDtyZXR1cm4gdGhpc307R3JhcGgucHJvdG90eXBlLmVkZ2VDb3VudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9lZGdlQ291bnR9O0dyYXBoLnByb3RvdHlwZS5lZGdlcz1mdW5jdGlvbigpe3JldHVybiBfLnZhbHVlcyh0aGlzLl9lZGdlT2Jqcyl9O0dyYXBoLnByb3RvdHlwZS5zZXRQYXRoPWZ1bmN0aW9uKHZzLHZhbHVlKXt2YXIgc2VsZj10aGlzLGFyZ3M9YXJndW1lbnRzO18ucmVkdWNlKHZzLGZ1bmN0aW9uKHYsdyl7aWYoYXJncy5sZW5ndGg+MSlzZWxmLnNldEVkZ2Uodix3LHZhbHVlKTtlbHNlIHNlbGYuc2V0RWRnZSh2LAp3KTtyZXR1cm4gd30pO3JldHVybiB0aGlzfTtHcmFwaC5wcm90b3R5cGUuc2V0RWRnZT1mdW5jdGlvbigpe3ZhciB2LHcsbmFtZSx2YWx1ZSx2YWx1ZVNwZWNpZmllZD1mYWxzZSxhcmcwPWFyZ3VtZW50c1swXTtpZih0eXBlb2YgYXJnMD09PSJvYmplY3QiJiZhcmcwIT09bnVsbCYmInYiaW4gYXJnMCl7dj1hcmcwLnY7dz1hcmcwLnc7bmFtZT1hcmcwLm5hbWU7aWYoYXJndW1lbnRzLmxlbmd0aD09PTIpe3ZhbHVlPWFyZ3VtZW50c1sxXTt2YWx1ZVNwZWNpZmllZD10cnVlfX1lbHNle3Y9YXJnMDt3PWFyZ3VtZW50c1sxXTtuYW1lPWFyZ3VtZW50c1szXTtpZihhcmd1bWVudHMubGVuZ3RoPjIpe3ZhbHVlPWFyZ3VtZW50c1syXTt2YWx1ZVNwZWNpZmllZD10cnVlfX12PSIiK3Y7dz0iIit3O2lmKCFfLmlzVW5kZWZpbmVkKG5hbWUpKW5hbWU9IiIrbmFtZTt2YXIgZT1lZGdlQXJnc1RvSWQodGhpcy5faXNEaXJlY3RlZCx2LHcsbmFtZSk7aWYoXy5oYXModGhpcy5fZWRnZUxhYmVscywKZSkpe2lmKHZhbHVlU3BlY2lmaWVkKXRoaXMuX2VkZ2VMYWJlbHNbZV09dmFsdWU7cmV0dXJuIHRoaXN9aWYoIV8uaXNVbmRlZmluZWQobmFtZSkmJiF0aGlzLl9pc011bHRpZ3JhcGgpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3Qgc2V0IGEgbmFtZWQgZWRnZSB3aGVuIGlzTXVsdGlncmFwaCBceDNkIGZhbHNlIik7dGhpcy5zZXROb2RlKHYpO3RoaXMuc2V0Tm9kZSh3KTt0aGlzLl9lZGdlTGFiZWxzW2VdPXZhbHVlU3BlY2lmaWVkP3ZhbHVlOnRoaXMuX2RlZmF1bHRFZGdlTGFiZWxGbih2LHcsbmFtZSk7dmFyIGVkZ2VPYmo9ZWRnZUFyZ3NUb09iaih0aGlzLl9pc0RpcmVjdGVkLHYsdyxuYW1lKTt2PWVkZ2VPYmoudjt3PWVkZ2VPYmoudztPYmplY3QuZnJlZXplKGVkZ2VPYmopO3RoaXMuX2VkZ2VPYmpzW2VdPWVkZ2VPYmo7aW5jcmVtZW50T3JJbml0RW50cnkodGhpcy5fcHJlZHNbd10sdik7aW5jcmVtZW50T3JJbml0RW50cnkodGhpcy5fc3Vjc1t2XSx3KTt0aGlzLl9pblt3XVtlXT0KZWRnZU9iajt0aGlzLl9vdXRbdl1bZV09ZWRnZU9iajt0aGlzLl9lZGdlQ291bnQrKztyZXR1cm4gdGhpc307R3JhcGgucHJvdG90eXBlLmVkZ2U9ZnVuY3Rpb24odix3LG5hbWUpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg9PT0xP2VkZ2VPYmpUb0lkKHRoaXMuX2lzRGlyZWN0ZWQsYXJndW1lbnRzWzBdKTplZGdlQXJnc1RvSWQodGhpcy5faXNEaXJlY3RlZCx2LHcsbmFtZSk7cmV0dXJuIHRoaXMuX2VkZ2VMYWJlbHNbZV19O0dyYXBoLnByb3RvdHlwZS5oYXNFZGdlPWZ1bmN0aW9uKHYsdyxuYW1lKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPT09MT9lZGdlT2JqVG9JZCh0aGlzLl9pc0RpcmVjdGVkLGFyZ3VtZW50c1swXSk6ZWRnZUFyZ3NUb0lkKHRoaXMuX2lzRGlyZWN0ZWQsdix3LG5hbWUpO3JldHVybiBfLmhhcyh0aGlzLl9lZGdlTGFiZWxzLGUpfTtHcmFwaC5wcm90b3R5cGUucmVtb3ZlRWRnZT1mdW5jdGlvbih2LHcsbmFtZSl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD09PTE/CmVkZ2VPYmpUb0lkKHRoaXMuX2lzRGlyZWN0ZWQsYXJndW1lbnRzWzBdKTplZGdlQXJnc1RvSWQodGhpcy5faXNEaXJlY3RlZCx2LHcsbmFtZSksZWRnZT10aGlzLl9lZGdlT2Jqc1tlXTtpZihlZGdlKXt2PWVkZ2Uudjt3PWVkZ2UudztkZWxldGUgdGhpcy5fZWRnZUxhYmVsc1tlXTtkZWxldGUgdGhpcy5fZWRnZU9ianNbZV07ZGVjcmVtZW50T3JSZW1vdmVFbnRyeSh0aGlzLl9wcmVkc1t3XSx2KTtkZWNyZW1lbnRPclJlbW92ZUVudHJ5KHRoaXMuX3N1Y3Nbdl0sdyk7ZGVsZXRlIHRoaXMuX2luW3ddW2VdO2RlbGV0ZSB0aGlzLl9vdXRbdl1bZV07dGhpcy5fZWRnZUNvdW50LS19cmV0dXJuIHRoaXN9O0dyYXBoLnByb3RvdHlwZS5pbkVkZ2VzPWZ1bmN0aW9uKHYsdSl7dmFyIGluVj10aGlzLl9pblt2XTtpZihpblYpe3ZhciBlZGdlcz1fLnZhbHVlcyhpblYpO2lmKCF1KXJldHVybiBlZGdlcztyZXR1cm4gXy5maWx0ZXIoZWRnZXMsZnVuY3Rpb24oZWRnZSl7cmV0dXJuIGVkZ2Uudj09PQp1fSl9fTtHcmFwaC5wcm90b3R5cGUub3V0RWRnZXM9ZnVuY3Rpb24odix3KXt2YXIgb3V0Vj10aGlzLl9vdXRbdl07aWYob3V0Vil7dmFyIGVkZ2VzPV8udmFsdWVzKG91dFYpO2lmKCF3KXJldHVybiBlZGdlcztyZXR1cm4gXy5maWx0ZXIoZWRnZXMsZnVuY3Rpb24oZWRnZSl7cmV0dXJuIGVkZ2Uudz09PXd9KX19O0dyYXBoLnByb3RvdHlwZS5ub2RlRWRnZXM9ZnVuY3Rpb24odix3KXt2YXIgaW5FZGdlcz10aGlzLmluRWRnZXModix3KTtpZihpbkVkZ2VzKXJldHVybiBpbkVkZ2VzLmNvbmNhdCh0aGlzLm91dEVkZ2VzKHYsdykpfTtmdW5jdGlvbiBpbmNyZW1lbnRPckluaXRFbnRyeShtYXAsayl7aWYobWFwW2tdKW1hcFtrXSsrO2Vsc2UgbWFwW2tdPTF9ZnVuY3Rpb24gZGVjcmVtZW50T3JSZW1vdmVFbnRyeShtYXAsayl7aWYoIS0tbWFwW2tdKWRlbGV0ZSBtYXBba119ZnVuY3Rpb24gZWRnZUFyZ3NUb0lkKGlzRGlyZWN0ZWQsdl8sd18sbmFtZSl7dmFyIHY9IiIrdl87dmFyIHc9CiIiK3dfO2lmKCFpc0RpcmVjdGVkJiZ2Pncpe3ZhciB0bXA9djt2PXc7dz10bXB9cmV0dXJuIHYrRURHRV9LRVlfREVMSU0rdytFREdFX0tFWV9ERUxJTSsoXy5pc1VuZGVmaW5lZChuYW1lKT9ERUZBVUxUX0VER0VfTkFNRTpuYW1lKX1mdW5jdGlvbiBlZGdlQXJnc1RvT2JqKGlzRGlyZWN0ZWQsdl8sd18sbmFtZSl7dmFyIHY9IiIrdl87dmFyIHc9IiIrd187aWYoIWlzRGlyZWN0ZWQmJnY+dyl7dmFyIHRtcD12O3Y9dzt3PXRtcH12YXIgZWRnZU9iaj17djp2LHc6d307aWYobmFtZSllZGdlT2JqLm5hbWU9bmFtZTtyZXR1cm4gZWRnZU9ian1mdW5jdGlvbiBlZGdlT2JqVG9JZChpc0RpcmVjdGVkLGVkZ2VPYmope3JldHVybiBlZGdlQXJnc1RvSWQoaXNEaXJlY3RlZCxlZGdlT2JqLnYsZWRnZU9iai53LGVkZ2VPYmoubmFtZSl9fSx7Ii4vbG9kYXNoIjoxOX1dLDE3OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXttb2R1bGUuZXhwb3J0cz17R3JhcGg6cmVxdWlyZSgiLi9ncmFwaCIpLAp2ZXJzaW9uOnJlcXVpcmUoIi4vdmVyc2lvbiIpfX0seyIuL2dyYXBoIjoxNiwiLi92ZXJzaW9uIjoyMH1dLDE4OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXt2YXIgXz1yZXF1aXJlKCIuL2xvZGFzaCIpLEdyYXBoPXJlcXVpcmUoIi4vZ3JhcGgiKTttb2R1bGUuZXhwb3J0cz17d3JpdGU6d3JpdGUscmVhZDpyZWFkfTtmdW5jdGlvbiB3cml0ZShnKXt2YXIganNvbj17b3B0aW9uczp7ZGlyZWN0ZWQ6Zy5pc0RpcmVjdGVkKCksbXVsdGlncmFwaDpnLmlzTXVsdGlncmFwaCgpLGNvbXBvdW5kOmcuaXNDb21wb3VuZCgpfSxub2Rlczp3cml0ZU5vZGVzKGcpLGVkZ2VzOndyaXRlRWRnZXMoZyl9O2lmKCFfLmlzVW5kZWZpbmVkKGcuZ3JhcGgoKSkpanNvbi52YWx1ZT1fLmNsb25lKGcuZ3JhcGgoKSk7cmV0dXJuIGpzb259ZnVuY3Rpb24gd3JpdGVOb2RlcyhnKXtyZXR1cm4gXy5tYXAoZy5ub2RlcygpLGZ1bmN0aW9uKHYpe3ZhciBub2RlVmFsdWU9Zy5ub2RlKHYpLHBhcmVudD0KZy5wYXJlbnQodiksbm9kZT17djp2fTtpZighXy5pc1VuZGVmaW5lZChub2RlVmFsdWUpKW5vZGUudmFsdWU9bm9kZVZhbHVlO2lmKCFfLmlzVW5kZWZpbmVkKHBhcmVudCkpbm9kZS5wYXJlbnQ9cGFyZW50O3JldHVybiBub2RlfSl9ZnVuY3Rpb24gd3JpdGVFZGdlcyhnKXtyZXR1cm4gXy5tYXAoZy5lZGdlcygpLGZ1bmN0aW9uKGUpe3ZhciBlZGdlVmFsdWU9Zy5lZGdlKGUpLGVkZ2U9e3Y6ZS52LHc6ZS53fTtpZighXy5pc1VuZGVmaW5lZChlLm5hbWUpKWVkZ2UubmFtZT1lLm5hbWU7aWYoIV8uaXNVbmRlZmluZWQoZWRnZVZhbHVlKSllZGdlLnZhbHVlPWVkZ2VWYWx1ZTtyZXR1cm4gZWRnZX0pfWZ1bmN0aW9uIHJlYWQoanNvbil7dmFyIGc9KG5ldyBHcmFwaChqc29uLm9wdGlvbnMpKS5zZXRHcmFwaChqc29uLnZhbHVlKTtfLmVhY2goanNvbi5ub2RlcyxmdW5jdGlvbihlbnRyeSl7Zy5zZXROb2RlKGVudHJ5LnYsZW50cnkudmFsdWUpO2lmKGVudHJ5LnBhcmVudClnLnNldFBhcmVudChlbnRyeS52LAplbnRyeS5wYXJlbnQpfSk7Xy5lYWNoKGpzb24uZWRnZXMsZnVuY3Rpb24oZW50cnkpe2cuc2V0RWRnZSh7djplbnRyeS52LHc6ZW50cnkudyxuYW1lOmVudHJ5Lm5hbWV9LGVudHJ5LnZhbHVlKX0pO3JldHVybiBnfX0seyIuL2dyYXBoIjoxNiwiLi9sb2Rhc2giOjE5fV0sMTk6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe3ZhciBsb2Rhc2g7aWYodHlwZW9mIHJlcXVpcmU9PT0iZnVuY3Rpb24iKXRyeXtsb2Rhc2g9cmVxdWlyZSgibG9kYXNoIil9Y2F0Y2goZSl7fWlmKCFsb2Rhc2gpbG9kYXNoPXdpbmRvdy5fO21vZHVsZS5leHBvcnRzPWxvZGFzaH0seyJsb2Rhc2giOnVuZGVmaW5lZH1dLDIwOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXttb2R1bGUuZXhwb3J0cz0iMi4xLjUifSx7fV19LHt9LFsxXSkoMSl9KTs8L3NjcmlwdD48c2NyaXB0PihmdW5jdGlvbihmKXtpZih0eXBlb2YgZXhwb3J0cz09PSJvYmplY3QiJiZ0eXBlb2YgbW9kdWxlIT09InVuZGVmaW5lZCIpbW9kdWxlLmV4cG9ydHM9ZigpO2Vsc2UgaWYodHlwZW9mIGRlZmluZT09PSJmdW5jdGlvbiImJmRlZmluZS5hbWQpZGVmaW5lKFtdLGYpO2Vsc2V7dmFyIGc7aWYodHlwZW9mIHdpbmRvdyE9PSJ1bmRlZmluZWQiKWc9d2luZG93O2Vsc2UgaWYodHlwZW9mIGdsb2JhbCE9PSJ1bmRlZmluZWQiKWc9Z2xvYmFsO2Vsc2UgaWYodHlwZW9mIHNlbGYhPT0idW5kZWZpbmVkIilnPXNlbGY7ZWxzZSBnPXRoaXM7Zy5kYWdyZT1mKCl9fSkoZnVuY3Rpb24oKXt2YXIgZGVmaW5lLG1vZHVsZSxleHBvcnRzO3JldHVybiBmdW5jdGlvbiBlKHQsbixyKXtmdW5jdGlvbiBzKG8sdSl7aWYoIW5bb10pe2lmKCF0W29dKXt2YXIgYT10eXBlb2YgcmVxdWlyZT09ImZ1bmN0aW9uIiYmcmVxdWlyZTtpZighdSYmYSlyZXR1cm4gYShvLCEwKTtpZihpKXJldHVybiBpKG8sITApO3ZhciBmPQpuZXcgRXJyb3IoIkNhbm5vdCBmaW5kIG1vZHVsZSAnIitvKyInIik7dGhyb3cgZi5jb2RlPSJNT0RVTEVfTk9UX0ZPVU5EIixmO312YXIgbD1uW29dPXtleHBvcnRzOnt9fTt0W29dWzBdLmNhbGwobC5leHBvcnRzLGZ1bmN0aW9uKGUpe3ZhciBuPXRbb11bMV1bZV07cmV0dXJuIHMobj9uOmUpfSxsLGwuZXhwb3J0cyxlLHQsbixyKX1yZXR1cm4gbltvXS5leHBvcnRzfXZhciBpPXR5cGVvZiByZXF1aXJlPT0iZnVuY3Rpb24iJiZyZXF1aXJlO2Zvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKXMocltvXSk7cmV0dXJuIHN9KHsxOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXttb2R1bGUuZXhwb3J0cz17Z3JhcGhsaWI6cmVxdWlyZSgiLi9saWIvZ3JhcGhsaWIiKSxsYXlvdXQ6cmVxdWlyZSgiLi9saWIvbGF5b3V0IiksZGVidWc6cmVxdWlyZSgiLi9saWIvZGVidWciKSx1dGlsOnt0aW1lOnJlcXVpcmUoIi4vbGliL3V0aWwiKS50aW1lLG5vdGltZTpyZXF1aXJlKCIuL2xpYi91dGlsIikubm90aW1lfSwKdmVyc2lvbjpyZXF1aXJlKCIuL2xpYi92ZXJzaW9uIil9fSx7Ii4vbGliL2RlYnVnIjo2LCIuL2xpYi9ncmFwaGxpYiI6NywiLi9saWIvbGF5b3V0Ijo5LCIuL2xpYi91dGlsIjoyOSwiLi9saWIvdmVyc2lvbiI6MzB9XSwyOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXt2YXIgXz1yZXF1aXJlKCIuL2xvZGFzaCIpLGdyZWVkeUZBUz1yZXF1aXJlKCIuL2dyZWVkeS1mYXMiKTttb2R1bGUuZXhwb3J0cz17cnVuOnJ1bix1bmRvOnVuZG99O2Z1bmN0aW9uIHJ1bihnKXt2YXIgZmFzPWcuZ3JhcGgoKS5hY3ljbGljZXI9PT0iZ3JlZWR5Ij9ncmVlZHlGQVMoZyx3ZWlnaHRGbihnKSk6ZGZzRkFTKGcpO18uZm9yRWFjaChmYXMsZnVuY3Rpb24oZSl7dmFyIGxhYmVsPWcuZWRnZShlKTtnLnJlbW92ZUVkZ2UoZSk7bGFiZWwuZm9yd2FyZE5hbWU9ZS5uYW1lO2xhYmVsLnJldmVyc2VkPXRydWU7Zy5zZXRFZGdlKGUudyxlLnYsbGFiZWwsXy51bmlxdWVJZCgicmV2IikpfSk7ZnVuY3Rpb24gd2VpZ2h0Rm4oZyl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBnLmVkZ2UoZSkud2VpZ2h0fX0KfWZ1bmN0aW9uIGRmc0ZBUyhnKXt2YXIgZmFzPVtdLHN0YWNrPXt9LHZpc2l0ZWQ9e307ZnVuY3Rpb24gZGZzKHYpe2lmKF8uaGFzKHZpc2l0ZWQsdikpcmV0dXJuO3Zpc2l0ZWRbdl09dHJ1ZTtzdGFja1t2XT10cnVlO18uZm9yRWFjaChnLm91dEVkZ2VzKHYpLGZ1bmN0aW9uKGUpe2lmKF8uaGFzKHN0YWNrLGUudykpZmFzLnB1c2goZSk7ZWxzZSBkZnMoZS53KX0pO2RlbGV0ZSBzdGFja1t2XX1fLmZvckVhY2goZy5ub2RlcygpLGRmcyk7cmV0dXJuIGZhc31mdW5jdGlvbiB1bmRvKGcpe18uZm9yRWFjaChnLmVkZ2VzKCksZnVuY3Rpb24oZSl7dmFyIGxhYmVsPWcuZWRnZShlKTtpZihsYWJlbC5yZXZlcnNlZCl7Zy5yZW1vdmVFZGdlKGUpO3ZhciBmb3J3YXJkTmFtZT1sYWJlbC5mb3J3YXJkTmFtZTtkZWxldGUgbGFiZWwucmV2ZXJzZWQ7ZGVsZXRlIGxhYmVsLmZvcndhcmROYW1lO2cuc2V0RWRnZShlLncsZS52LGxhYmVsLGZvcndhcmROYW1lKX19KX19LHsiLi9ncmVlZHktZmFzIjo4LAoiLi9sb2Rhc2giOjEwfV0sMzpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7dmFyIF89cmVxdWlyZSgiLi9sb2Rhc2giKSx1dGlsPXJlcXVpcmUoIi4vdXRpbCIpO21vZHVsZS5leHBvcnRzPWFkZEJvcmRlclNlZ21lbnRzO2Z1bmN0aW9uIGFkZEJvcmRlclNlZ21lbnRzKGcpe2Z1bmN0aW9uIGRmcyh2KXt2YXIgY2hpbGRyZW49Zy5jaGlsZHJlbih2KSxub2RlPWcubm9kZSh2KTtpZihjaGlsZHJlbi5sZW5ndGgpXy5mb3JFYWNoKGNoaWxkcmVuLGRmcyk7aWYoXy5oYXMobm9kZSwibWluUmFuayIpKXtub2RlLmJvcmRlckxlZnQ9W107bm9kZS5ib3JkZXJSaWdodD1bXTtmb3IodmFyIHJhbms9bm9kZS5taW5SYW5rLG1heFJhbms9bm9kZS5tYXhSYW5rKzE7cmFuazxtYXhSYW5rOysrcmFuayl7YWRkQm9yZGVyTm9kZShnLCJib3JkZXJMZWZ0IiwiX2JsIix2LG5vZGUscmFuayk7YWRkQm9yZGVyTm9kZShnLCJib3JkZXJSaWdodCIsIl9iciIsdixub2RlLHJhbmspfX19Xy5mb3JFYWNoKGcuY2hpbGRyZW4oKSwKZGZzKX1mdW5jdGlvbiBhZGRCb3JkZXJOb2RlKGcscHJvcCxwcmVmaXgsc2csc2dOb2RlLHJhbmspe3ZhciBsYWJlbD17d2lkdGg6MCxoZWlnaHQ6MCxyYW5rOnJhbmssYm9yZGVyVHlwZTpwcm9wfSxwcmV2PXNnTm9kZVtwcm9wXVtyYW5rLTFdLGN1cnI9dXRpbC5hZGREdW1teU5vZGUoZywiYm9yZGVyIixsYWJlbCxwcmVmaXgpO3NnTm9kZVtwcm9wXVtyYW5rXT1jdXJyO2cuc2V0UGFyZW50KGN1cnIsc2cpO2lmKHByZXYpZy5zZXRFZGdlKHByZXYsY3Vycix7d2VpZ2h0OjF9KX19LHsiLi9sb2Rhc2giOjEwLCIuL3V0aWwiOjI5fV0sNDpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7dmFyIF89cmVxdWlyZSgiLi9sb2Rhc2giKTttb2R1bGUuZXhwb3J0cz17YWRqdXN0OmFkanVzdCx1bmRvOnVuZG99O2Z1bmN0aW9uIGFkanVzdChnKXt2YXIgcmFua0Rpcj1nLmdyYXBoKCkucmFua2Rpci50b0xvd2VyQ2FzZSgpO2lmKHJhbmtEaXI9PT0ibHIifHxyYW5rRGlyPT09InJsIilzd2FwV2lkdGhIZWlnaHQoZyl9CmZ1bmN0aW9uIHVuZG8oZyl7dmFyIHJhbmtEaXI9Zy5ncmFwaCgpLnJhbmtkaXIudG9Mb3dlckNhc2UoKTtpZihyYW5rRGlyPT09ImJ0Inx8cmFua0Rpcj09PSJybCIpcmV2ZXJzZVkoZyk7aWYocmFua0Rpcj09PSJsciJ8fHJhbmtEaXI9PT0icmwiKXtzd2FwWFkoZyk7c3dhcFdpZHRoSGVpZ2h0KGcpfX1mdW5jdGlvbiBzd2FwV2lkdGhIZWlnaHQoZyl7Xy5mb3JFYWNoKGcubm9kZXMoKSxmdW5jdGlvbih2KXtzd2FwV2lkdGhIZWlnaHRPbmUoZy5ub2RlKHYpKX0pO18uZm9yRWFjaChnLmVkZ2VzKCksZnVuY3Rpb24oZSl7c3dhcFdpZHRoSGVpZ2h0T25lKGcuZWRnZShlKSl9KX1mdW5jdGlvbiBzd2FwV2lkdGhIZWlnaHRPbmUoYXR0cnMpe3ZhciB3PWF0dHJzLndpZHRoO2F0dHJzLndpZHRoPWF0dHJzLmhlaWdodDthdHRycy5oZWlnaHQ9d31mdW5jdGlvbiByZXZlcnNlWShnKXtfLmZvckVhY2goZy5ub2RlcygpLGZ1bmN0aW9uKHYpe3JldmVyc2VZT25lKGcubm9kZSh2KSl9KTtfLmZvckVhY2goZy5lZGdlcygpLApmdW5jdGlvbihlKXt2YXIgZWRnZT1nLmVkZ2UoZSk7Xy5mb3JFYWNoKGVkZ2UucG9pbnRzLHJldmVyc2VZT25lKTtpZihfLmhhcyhlZGdlLCJ5IikpcmV2ZXJzZVlPbmUoZWRnZSl9KX1mdW5jdGlvbiByZXZlcnNlWU9uZShhdHRycyl7YXR0cnMueT0tYXR0cnMueX1mdW5jdGlvbiBzd2FwWFkoZyl7Xy5mb3JFYWNoKGcubm9kZXMoKSxmdW5jdGlvbih2KXtzd2FwWFlPbmUoZy5ub2RlKHYpKX0pO18uZm9yRWFjaChnLmVkZ2VzKCksZnVuY3Rpb24oZSl7dmFyIGVkZ2U9Zy5lZGdlKGUpO18uZm9yRWFjaChlZGdlLnBvaW50cyxzd2FwWFlPbmUpO2lmKF8uaGFzKGVkZ2UsIngiKSlzd2FwWFlPbmUoZWRnZSl9KX1mdW5jdGlvbiBzd2FwWFlPbmUoYXR0cnMpe3ZhciB4PWF0dHJzLng7YXR0cnMueD1hdHRycy55O2F0dHJzLnk9eH19LHsiLi9sb2Rhc2giOjEwfV0sNTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7bW9kdWxlLmV4cG9ydHM9TGlzdDtmdW5jdGlvbiBMaXN0KCl7dmFyIHNlbnRpbmVsPQp7fTtzZW50aW5lbC5fbmV4dD1zZW50aW5lbC5fcHJldj1zZW50aW5lbDt0aGlzLl9zZW50aW5lbD1zZW50aW5lbH1MaXN0LnByb3RvdHlwZS5kZXF1ZXVlPWZ1bmN0aW9uKCl7dmFyIHNlbnRpbmVsPXRoaXMuX3NlbnRpbmVsLGVudHJ5PXNlbnRpbmVsLl9wcmV2O2lmKGVudHJ5IT09c2VudGluZWwpe3VubGluayhlbnRyeSk7cmV0dXJuIGVudHJ5fX07TGlzdC5wcm90b3R5cGUuZW5xdWV1ZT1mdW5jdGlvbihlbnRyeSl7dmFyIHNlbnRpbmVsPXRoaXMuX3NlbnRpbmVsO2lmKGVudHJ5Ll9wcmV2JiZlbnRyeS5fbmV4dCl1bmxpbmsoZW50cnkpO2VudHJ5Ll9uZXh0PXNlbnRpbmVsLl9uZXh0O3NlbnRpbmVsLl9uZXh0Ll9wcmV2PWVudHJ5O3NlbnRpbmVsLl9uZXh0PWVudHJ5O2VudHJ5Ll9wcmV2PXNlbnRpbmVsfTtMaXN0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3ZhciBzdHJzPVtdLHNlbnRpbmVsPXRoaXMuX3NlbnRpbmVsLGN1cnI9c2VudGluZWwuX3ByZXY7d2hpbGUoY3VyciE9PQpzZW50aW5lbCl7c3Rycy5wdXNoKEpTT04uc3RyaW5naWZ5KGN1cnIsZmlsdGVyT3V0TGlua3MpKTtjdXJyPWN1cnIuX3ByZXZ9cmV0dXJuIlsiK3N0cnMuam9pbigiLCAiKSsiXSJ9O2Z1bmN0aW9uIHVubGluayhlbnRyeSl7ZW50cnkuX3ByZXYuX25leHQ9ZW50cnkuX25leHQ7ZW50cnkuX25leHQuX3ByZXY9ZW50cnkuX3ByZXY7ZGVsZXRlIGVudHJ5Ll9uZXh0O2RlbGV0ZSBlbnRyeS5fcHJldn1mdW5jdGlvbiBmaWx0ZXJPdXRMaW5rcyhrLHYpe2lmKGshPT0iX25leHQiJiZrIT09Il9wcmV2IilyZXR1cm4gdn19LHt9XSw2OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXt2YXIgXz1yZXF1aXJlKCIuL2xvZGFzaCIpLHV0aWw9cmVxdWlyZSgiLi91dGlsIiksR3JhcGg9cmVxdWlyZSgiLi9ncmFwaGxpYiIpLkdyYXBoO21vZHVsZS5leHBvcnRzPXtkZWJ1Z09yZGVyaW5nOmRlYnVnT3JkZXJpbmd9O2Z1bmN0aW9uIGRlYnVnT3JkZXJpbmcoZyl7dmFyIGxheWVyTWF0cml4PQp1dGlsLmJ1aWxkTGF5ZXJNYXRyaXgoZyk7dmFyIGg9KG5ldyBHcmFwaCh7Y29tcG91bmQ6dHJ1ZSxtdWx0aWdyYXBoOnRydWV9KSkuc2V0R3JhcGgoe30pO18uZm9yRWFjaChnLm5vZGVzKCksZnVuY3Rpb24odil7aC5zZXROb2RlKHYse2xhYmVsOnZ9KTtoLnNldFBhcmVudCh2LCJsYXllciIrZy5ub2RlKHYpLnJhbmspfSk7Xy5mb3JFYWNoKGcuZWRnZXMoKSxmdW5jdGlvbihlKXtoLnNldEVkZ2UoZS52LGUudyx7fSxlLm5hbWUpfSk7Xy5mb3JFYWNoKGxheWVyTWF0cml4LGZ1bmN0aW9uKGxheWVyLGkpe3ZhciBsYXllclY9ImxheWVyIitpO2guc2V0Tm9kZShsYXllclYse3Jhbms6InNhbWUifSk7Xy5yZWR1Y2UobGF5ZXIsZnVuY3Rpb24odSx2KXtoLnNldEVkZ2UodSx2LHtzdHlsZToiaW52aXMifSk7cmV0dXJuIHZ9KX0pO3JldHVybiBofX0seyIuL2dyYXBobGliIjo3LCIuL2xvZGFzaCI6MTAsIi4vdXRpbCI6Mjl9XSw3OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXt2YXIgZ3JhcGhsaWI7CmlmKHR5cGVvZiByZXF1aXJlPT09ImZ1bmN0aW9uIil0cnl7Z3JhcGhsaWI9cmVxdWlyZSgiZ3JhcGhsaWIiKX1jYXRjaChlKXt9aWYoIWdyYXBobGliKWdyYXBobGliPXdpbmRvdy5ncmFwaGxpYjttb2R1bGUuZXhwb3J0cz1ncmFwaGxpYn0seyJncmFwaGxpYiI6dW5kZWZpbmVkfV0sODpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7dmFyIF89cmVxdWlyZSgiLi9sb2Rhc2giKSxHcmFwaD1yZXF1aXJlKCIuL2dyYXBobGliIikuR3JhcGgsTGlzdD1yZXF1aXJlKCIuL2RhdGEvbGlzdCIpO21vZHVsZS5leHBvcnRzPWdyZWVkeUZBUzt2YXIgREVGQVVMVF9XRUlHSFRfRk49Xy5jb25zdGFudCgxKTtmdW5jdGlvbiBncmVlZHlGQVMoZyx3ZWlnaHRGbil7aWYoZy5ub2RlQ291bnQoKTw9MSlyZXR1cm5bXTt2YXIgc3RhdGU9YnVpbGRTdGF0ZShnLHdlaWdodEZufHxERUZBVUxUX1dFSUdIVF9GTik7dmFyIHJlc3VsdHM9ZG9HcmVlZHlGQVMoc3RhdGUuZ3JhcGgsc3RhdGUuYnVja2V0cywKc3RhdGUuemVyb0lkeCk7cmV0dXJuIF8uZmxhdHRlbihfLm1hcChyZXN1bHRzLGZ1bmN0aW9uKGUpe3JldHVybiBnLm91dEVkZ2VzKGUudixlLncpfSksdHJ1ZSl9ZnVuY3Rpb24gZG9HcmVlZHlGQVMoZyxidWNrZXRzLHplcm9JZHgpe3ZhciByZXN1bHRzPVtdLHNvdXJjZXM9YnVja2V0c1tidWNrZXRzLmxlbmd0aC0xXSxzaW5rcz1idWNrZXRzWzBdO3ZhciBlbnRyeTt3aGlsZShnLm5vZGVDb3VudCgpKXt3aGlsZShlbnRyeT1zaW5rcy5kZXF1ZXVlKCkpcmVtb3ZlTm9kZShnLGJ1Y2tldHMsemVyb0lkeCxlbnRyeSk7d2hpbGUoZW50cnk9c291cmNlcy5kZXF1ZXVlKCkpcmVtb3ZlTm9kZShnLGJ1Y2tldHMsemVyb0lkeCxlbnRyeSk7aWYoZy5ub2RlQ291bnQoKSlmb3IodmFyIGk9YnVja2V0cy5sZW5ndGgtMjtpPjA7LS1pKXtlbnRyeT1idWNrZXRzW2ldLmRlcXVldWUoKTtpZihlbnRyeSl7cmVzdWx0cz1yZXN1bHRzLmNvbmNhdChyZW1vdmVOb2RlKGcsYnVja2V0cyx6ZXJvSWR4LAplbnRyeSx0cnVlKSk7YnJlYWt9fX1yZXR1cm4gcmVzdWx0c31mdW5jdGlvbiByZW1vdmVOb2RlKGcsYnVja2V0cyx6ZXJvSWR4LGVudHJ5LGNvbGxlY3RQcmVkZWNlc3NvcnMpe3ZhciByZXN1bHRzPWNvbGxlY3RQcmVkZWNlc3NvcnM/W106dW5kZWZpbmVkO18uZm9yRWFjaChnLmluRWRnZXMoZW50cnkudiksZnVuY3Rpb24oZWRnZSl7dmFyIHdlaWdodD1nLmVkZ2UoZWRnZSksdUVudHJ5PWcubm9kZShlZGdlLnYpO2lmKGNvbGxlY3RQcmVkZWNlc3NvcnMpcmVzdWx0cy5wdXNoKHt2OmVkZ2Uudix3OmVkZ2Uud30pO3VFbnRyeS5vdXQtPXdlaWdodDthc3NpZ25CdWNrZXQoYnVja2V0cyx6ZXJvSWR4LHVFbnRyeSl9KTtfLmZvckVhY2goZy5vdXRFZGdlcyhlbnRyeS52KSxmdW5jdGlvbihlZGdlKXt2YXIgd2VpZ2h0PWcuZWRnZShlZGdlKSx3PWVkZ2Uudyx3RW50cnk9Zy5ub2RlKHcpO3dFbnRyeVsiaW4iXS09d2VpZ2h0O2Fzc2lnbkJ1Y2tldChidWNrZXRzLHplcm9JZHgsd0VudHJ5KX0pOwpnLnJlbW92ZU5vZGUoZW50cnkudik7cmV0dXJuIHJlc3VsdHN9ZnVuY3Rpb24gYnVpbGRTdGF0ZShnLHdlaWdodEZuKXt2YXIgZmFzR3JhcGg9bmV3IEdyYXBoLG1heEluPTAsbWF4T3V0PTA7Xy5mb3JFYWNoKGcubm9kZXMoKSxmdW5jdGlvbih2KXtmYXNHcmFwaC5zZXROb2RlKHYse3Y6diwiaW4iOjAsb3V0OjB9KX0pO18uZm9yRWFjaChnLmVkZ2VzKCksZnVuY3Rpb24oZSl7dmFyIHByZXZXZWlnaHQ9ZmFzR3JhcGguZWRnZShlLnYsZS53KXx8MCx3ZWlnaHQ9d2VpZ2h0Rm4oZSksZWRnZVdlaWdodD1wcmV2V2VpZ2h0K3dlaWdodDtmYXNHcmFwaC5zZXRFZGdlKGUudixlLncsZWRnZVdlaWdodCk7bWF4T3V0PU1hdGgubWF4KG1heE91dCxmYXNHcmFwaC5ub2RlKGUudikub3V0Kz13ZWlnaHQpO21heEluPU1hdGgubWF4KG1heEluLGZhc0dyYXBoLm5vZGUoZS53KVsiaW4iXSs9d2VpZ2h0KX0pO3ZhciBidWNrZXRzPV8ucmFuZ2UobWF4T3V0K21heEluKzMpLm1hcChmdW5jdGlvbigpe3JldHVybiBuZXcgTGlzdH0pOwp2YXIgemVyb0lkeD1tYXhJbisxO18uZm9yRWFjaChmYXNHcmFwaC5ub2RlcygpLGZ1bmN0aW9uKHYpe2Fzc2lnbkJ1Y2tldChidWNrZXRzLHplcm9JZHgsZmFzR3JhcGgubm9kZSh2KSl9KTtyZXR1cm57Z3JhcGg6ZmFzR3JhcGgsYnVja2V0czpidWNrZXRzLHplcm9JZHg6emVyb0lkeH19ZnVuY3Rpb24gYXNzaWduQnVja2V0KGJ1Y2tldHMsemVyb0lkeCxlbnRyeSl7aWYoIWVudHJ5Lm91dClidWNrZXRzWzBdLmVucXVldWUoZW50cnkpO2Vsc2UgaWYoIWVudHJ5WyJpbiJdKWJ1Y2tldHNbYnVja2V0cy5sZW5ndGgtMV0uZW5xdWV1ZShlbnRyeSk7ZWxzZSBidWNrZXRzW2VudHJ5Lm91dC1lbnRyeVsiaW4iXSt6ZXJvSWR4XS5lbnF1ZXVlKGVudHJ5KX19LHsiLi9kYXRhL2xpc3QiOjUsIi4vZ3JhcGhsaWIiOjcsIi4vbG9kYXNoIjoxMH1dLDk6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe3ZhciBfPXJlcXVpcmUoIi4vbG9kYXNoIiksYWN5Y2xpYz1yZXF1aXJlKCIuL2FjeWNsaWMiKSwKbm9ybWFsaXplPXJlcXVpcmUoIi4vbm9ybWFsaXplIikscmFuaz1yZXF1aXJlKCIuL3JhbmsiKSxub3JtYWxpemVSYW5rcz1yZXF1aXJlKCIuL3V0aWwiKS5ub3JtYWxpemVSYW5rcyxwYXJlbnREdW1teUNoYWlucz1yZXF1aXJlKCIuL3BhcmVudC1kdW1teS1jaGFpbnMiKSxyZW1vdmVFbXB0eVJhbmtzPXJlcXVpcmUoIi4vdXRpbCIpLnJlbW92ZUVtcHR5UmFua3MsbmVzdGluZ0dyYXBoPXJlcXVpcmUoIi4vbmVzdGluZy1ncmFwaCIpLGFkZEJvcmRlclNlZ21lbnRzPXJlcXVpcmUoIi4vYWRkLWJvcmRlci1zZWdtZW50cyIpLGNvb3JkaW5hdGVTeXN0ZW09cmVxdWlyZSgiLi9jb29yZGluYXRlLXN5c3RlbSIpLG9yZGVyPXJlcXVpcmUoIi4vb3JkZXIiKSxwb3NpdGlvbj1yZXF1aXJlKCIuL3Bvc2l0aW9uIiksdXRpbD1yZXF1aXJlKCIuL3V0aWwiKSxHcmFwaD1yZXF1aXJlKCIuL2dyYXBobGliIikuR3JhcGg7bW9kdWxlLmV4cG9ydHM9bGF5b3V0O2Z1bmN0aW9uIGxheW91dChnLG9wdHMpe3ZhciB0aW1lPQpvcHRzJiZvcHRzLmRlYnVnVGltaW5nP3V0aWwudGltZTp1dGlsLm5vdGltZTt0aW1lKCJsYXlvdXQiLGZ1bmN0aW9uKCl7dmFyIGxheW91dEdyYXBoPXRpbWUoIiAgYnVpbGRMYXlvdXRHcmFwaCIsZnVuY3Rpb24oKXtyZXR1cm4gYnVpbGRMYXlvdXRHcmFwaChnKX0pO3RpbWUoIiAgcnVuTGF5b3V0IixmdW5jdGlvbigpe3J1bkxheW91dChsYXlvdXRHcmFwaCx0aW1lKX0pO3RpbWUoIiAgdXBkYXRlSW5wdXRHcmFwaCIsZnVuY3Rpb24oKXt1cGRhdGVJbnB1dEdyYXBoKGcsbGF5b3V0R3JhcGgpfSl9KX1mdW5jdGlvbiBydW5MYXlvdXQoZyx0aW1lKXt0aW1lKCIgICAgbWFrZVNwYWNlRm9yRWRnZUxhYmVscyIsZnVuY3Rpb24oKXttYWtlU3BhY2VGb3JFZGdlTGFiZWxzKGcpfSk7dGltZSgiICAgIHJlbW92ZVNlbGZFZGdlcyIsZnVuY3Rpb24oKXtyZW1vdmVTZWxmRWRnZXMoZyl9KTt0aW1lKCIgICAgYWN5Y2xpYyIsZnVuY3Rpb24oKXthY3ljbGljLnJ1bihnKX0pO3RpbWUoIiAgICBuZXN0aW5nR3JhcGgucnVuIiwKZnVuY3Rpb24oKXtuZXN0aW5nR3JhcGgucnVuKGcpfSk7dGltZSgiICAgIHJhbmsiLGZ1bmN0aW9uKCl7cmFuayh1dGlsLmFzTm9uQ29tcG91bmRHcmFwaChnKSl9KTt0aW1lKCIgICAgaW5qZWN0RWRnZUxhYmVsUHJveGllcyIsZnVuY3Rpb24oKXtpbmplY3RFZGdlTGFiZWxQcm94aWVzKGcpfSk7dGltZSgiICAgIHJlbW92ZUVtcHR5UmFua3MiLGZ1bmN0aW9uKCl7cmVtb3ZlRW1wdHlSYW5rcyhnKX0pO3RpbWUoIiAgICBuZXN0aW5nR3JhcGguY2xlYW51cCIsZnVuY3Rpb24oKXtuZXN0aW5nR3JhcGguY2xlYW51cChnKX0pO3RpbWUoIiAgICBub3JtYWxpemVSYW5rcyIsZnVuY3Rpb24oKXtub3JtYWxpemVSYW5rcyhnKX0pO3RpbWUoIiAgICBhc3NpZ25SYW5rTWluTWF4IixmdW5jdGlvbigpe2Fzc2lnblJhbmtNaW5NYXgoZyl9KTt0aW1lKCIgICAgcmVtb3ZlRWRnZUxhYmVsUHJveGllcyIsZnVuY3Rpb24oKXtyZW1vdmVFZGdlTGFiZWxQcm94aWVzKGcpfSk7dGltZSgiICAgIG5vcm1hbGl6ZS5ydW4iLApmdW5jdGlvbigpe25vcm1hbGl6ZS5ydW4oZyl9KTt0aW1lKCIgICAgcGFyZW50RHVtbXlDaGFpbnMiLGZ1bmN0aW9uKCl7cGFyZW50RHVtbXlDaGFpbnMoZyl9KTt0aW1lKCIgICAgYWRkQm9yZGVyU2VnbWVudHMiLGZ1bmN0aW9uKCl7YWRkQm9yZGVyU2VnbWVudHMoZyl9KTt0aW1lKCIgICAgb3JkZXIiLGZ1bmN0aW9uKCl7b3JkZXIoZyl9KTt0aW1lKCIgICAgaW5zZXJ0U2VsZkVkZ2VzIixmdW5jdGlvbigpe2luc2VydFNlbGZFZGdlcyhnKX0pO3RpbWUoIiAgICBhZGp1c3RDb29yZGluYXRlU3lzdGVtIixmdW5jdGlvbigpe2Nvb3JkaW5hdGVTeXN0ZW0uYWRqdXN0KGcpfSk7dGltZSgiICAgIHBvc2l0aW9uIixmdW5jdGlvbigpe3Bvc2l0aW9uKGcpfSk7dGltZSgiICAgIHBvc2l0aW9uU2VsZkVkZ2VzIixmdW5jdGlvbigpe3Bvc2l0aW9uU2VsZkVkZ2VzKGcpfSk7dGltZSgiICAgIHJlbW92ZUJvcmRlck5vZGVzIixmdW5jdGlvbigpe3JlbW92ZUJvcmRlck5vZGVzKGcpfSk7dGltZSgiICAgIG5vcm1hbGl6ZS51bmRvIiwKZnVuY3Rpb24oKXtub3JtYWxpemUudW5kbyhnKX0pO3RpbWUoIiAgICBmaXh1cEVkZ2VMYWJlbENvb3JkcyIsZnVuY3Rpb24oKXtmaXh1cEVkZ2VMYWJlbENvb3JkcyhnKX0pO3RpbWUoIiAgICB1bmRvQ29vcmRpbmF0ZVN5c3RlbSIsZnVuY3Rpb24oKXtjb29yZGluYXRlU3lzdGVtLnVuZG8oZyl9KTt0aW1lKCIgICAgdHJhbnNsYXRlR3JhcGgiLGZ1bmN0aW9uKCl7dHJhbnNsYXRlR3JhcGgoZyl9KTt0aW1lKCIgICAgYXNzaWduTm9kZUludGVyc2VjdHMiLGZ1bmN0aW9uKCl7YXNzaWduTm9kZUludGVyc2VjdHMoZyl9KTt0aW1lKCIgICAgcmV2ZXJzZVBvaW50cyIsZnVuY3Rpb24oKXtyZXZlcnNlUG9pbnRzRm9yUmV2ZXJzZWRFZGdlcyhnKX0pO3RpbWUoIiAgICBhY3ljbGljLnVuZG8iLGZ1bmN0aW9uKCl7YWN5Y2xpYy51bmRvKGcpfSl9ZnVuY3Rpb24gdXBkYXRlSW5wdXRHcmFwaChpbnB1dEdyYXBoLGxheW91dEdyYXBoKXtfLmZvckVhY2goaW5wdXRHcmFwaC5ub2RlcygpLGZ1bmN0aW9uKHYpe3ZhciBpbnB1dExhYmVsPQppbnB1dEdyYXBoLm5vZGUodiksbGF5b3V0TGFiZWw9bGF5b3V0R3JhcGgubm9kZSh2KTtpZihpbnB1dExhYmVsKXtpbnB1dExhYmVsLng9bGF5b3V0TGFiZWwueDtpbnB1dExhYmVsLnk9bGF5b3V0TGFiZWwueTtpZihsYXlvdXRHcmFwaC5jaGlsZHJlbih2KS5sZW5ndGgpe2lucHV0TGFiZWwud2lkdGg9bGF5b3V0TGFiZWwud2lkdGg7aW5wdXRMYWJlbC5oZWlnaHQ9bGF5b3V0TGFiZWwuaGVpZ2h0fX19KTtfLmZvckVhY2goaW5wdXRHcmFwaC5lZGdlcygpLGZ1bmN0aW9uKGUpe3ZhciBpbnB1dExhYmVsPWlucHV0R3JhcGguZWRnZShlKSxsYXlvdXRMYWJlbD1sYXlvdXRHcmFwaC5lZGdlKGUpO2lucHV0TGFiZWwucG9pbnRzPWxheW91dExhYmVsLnBvaW50cztpZihfLmhhcyhsYXlvdXRMYWJlbCwieCIpKXtpbnB1dExhYmVsLng9bGF5b3V0TGFiZWwueDtpbnB1dExhYmVsLnk9bGF5b3V0TGFiZWwueX19KTtpbnB1dEdyYXBoLmdyYXBoKCkud2lkdGg9bGF5b3V0R3JhcGguZ3JhcGgoKS53aWR0aDsKaW5wdXRHcmFwaC5ncmFwaCgpLmhlaWdodD1sYXlvdXRHcmFwaC5ncmFwaCgpLmhlaWdodH12YXIgZ3JhcGhOdW1BdHRycz1bIm5vZGVzZXAiLCJlZGdlc2VwIiwicmFua3NlcCIsIm1hcmdpbngiLCJtYXJnaW55Il0sZ3JhcGhEZWZhdWx0cz17cmFua3NlcDo1MCxlZGdlc2VwOjIwLG5vZGVzZXA6NTAscmFua2RpcjoidGIifSxncmFwaEF0dHJzPVsiYWN5Y2xpY2VyIiwicmFua2VyIiwicmFua2RpciIsImFsaWduIl0sbm9kZU51bUF0dHJzPVsid2lkdGgiLCJoZWlnaHQiXSxub2RlRGVmYXVsdHM9e3dpZHRoOjAsaGVpZ2h0OjB9LGVkZ2VOdW1BdHRycz1bIm1pbmxlbiIsIndlaWdodCIsIndpZHRoIiwiaGVpZ2h0IiwibGFiZWxvZmZzZXQiXSxlZGdlRGVmYXVsdHM9e21pbmxlbjoxLHdlaWdodDoxLHdpZHRoOjAsaGVpZ2h0OjAsbGFiZWxvZmZzZXQ6MTAsbGFiZWxwb3M6InIifSxlZGdlQXR0cnM9WyJsYWJlbHBvcyJdO2Z1bmN0aW9uIGJ1aWxkTGF5b3V0R3JhcGgoaW5wdXRHcmFwaCl7dmFyIGc9Cm5ldyBHcmFwaCh7bXVsdGlncmFwaDp0cnVlLGNvbXBvdW5kOnRydWV9KSxncmFwaD1jYW5vbmljYWxpemUoaW5wdXRHcmFwaC5ncmFwaCgpKTtnLnNldEdyYXBoKF8ubWVyZ2Uoe30sZ3JhcGhEZWZhdWx0cyxzZWxlY3ROdW1iZXJBdHRycyhncmFwaCxncmFwaE51bUF0dHJzKSxfLnBpY2soZ3JhcGgsZ3JhcGhBdHRycykpKTtfLmZvckVhY2goaW5wdXRHcmFwaC5ub2RlcygpLGZ1bmN0aW9uKHYpe3ZhciBub2RlPWNhbm9uaWNhbGl6ZShpbnB1dEdyYXBoLm5vZGUodikpO2cuc2V0Tm9kZSh2LF8uZGVmYXVsdHMoc2VsZWN0TnVtYmVyQXR0cnMobm9kZSxub2RlTnVtQXR0cnMpLG5vZGVEZWZhdWx0cykpO2cuc2V0UGFyZW50KHYsaW5wdXRHcmFwaC5wYXJlbnQodikpfSk7Xy5mb3JFYWNoKGlucHV0R3JhcGguZWRnZXMoKSxmdW5jdGlvbihlKXt2YXIgZWRnZT1jYW5vbmljYWxpemUoaW5wdXRHcmFwaC5lZGdlKGUpKTtnLnNldEVkZ2UoZSxfLm1lcmdlKHt9LGVkZ2VEZWZhdWx0cyxzZWxlY3ROdW1iZXJBdHRycyhlZGdlLAplZGdlTnVtQXR0cnMpLF8ucGljayhlZGdlLGVkZ2VBdHRycykpKX0pO3JldHVybiBnfWZ1bmN0aW9uIG1ha2VTcGFjZUZvckVkZ2VMYWJlbHMoZyl7dmFyIGdyYXBoPWcuZ3JhcGgoKTtncmFwaC5yYW5rc2VwLz0yO18uZm9yRWFjaChnLmVkZ2VzKCksZnVuY3Rpb24oZSl7dmFyIGVkZ2U9Zy5lZGdlKGUpO2VkZ2UubWlubGVuKj0yO2lmKGVkZ2UubGFiZWxwb3MudG9Mb3dlckNhc2UoKSE9PSJjIilpZihncmFwaC5yYW5rZGlyPT09IlRCInx8Z3JhcGgucmFua2Rpcj09PSJCVCIpZWRnZS53aWR0aCs9ZWRnZS5sYWJlbG9mZnNldDtlbHNlIGVkZ2UuaGVpZ2h0Kz1lZGdlLmxhYmVsb2Zmc2V0fSl9ZnVuY3Rpb24gaW5qZWN0RWRnZUxhYmVsUHJveGllcyhnKXtfLmZvckVhY2goZy5lZGdlcygpLGZ1bmN0aW9uKGUpe3ZhciBlZGdlPWcuZWRnZShlKTtpZihlZGdlLndpZHRoJiZlZGdlLmhlaWdodCl7dmFyIHY9Zy5ub2RlKGUudiksdz1nLm5vZGUoZS53KSxsYWJlbD17cmFuazoody5yYW5rLQp2LnJhbmspLzIrdi5yYW5rLGU6ZX07dXRpbC5hZGREdW1teU5vZGUoZywiZWRnZS1wcm94eSIsbGFiZWwsIl9lcCIpfX0pfWZ1bmN0aW9uIGFzc2lnblJhbmtNaW5NYXgoZyl7dmFyIG1heFJhbms9MDtfLmZvckVhY2goZy5ub2RlcygpLGZ1bmN0aW9uKHYpe3ZhciBub2RlPWcubm9kZSh2KTtpZihub2RlLmJvcmRlclRvcCl7bm9kZS5taW5SYW5rPWcubm9kZShub2RlLmJvcmRlclRvcCkucmFuaztub2RlLm1heFJhbms9Zy5ub2RlKG5vZGUuYm9yZGVyQm90dG9tKS5yYW5rO21heFJhbms9Xy5tYXgobWF4UmFuayxub2RlLm1heFJhbmspfX0pO2cuZ3JhcGgoKS5tYXhSYW5rPW1heFJhbmt9ZnVuY3Rpb24gcmVtb3ZlRWRnZUxhYmVsUHJveGllcyhnKXtfLmZvckVhY2goZy5ub2RlcygpLGZ1bmN0aW9uKHYpe3ZhciBub2RlPWcubm9kZSh2KTtpZihub2RlLmR1bW15PT09ImVkZ2UtcHJveHkiKXtnLmVkZ2Uobm9kZS5lKS5sYWJlbFJhbms9bm9kZS5yYW5rO2cucmVtb3ZlTm9kZSh2KX19KX0KZnVuY3Rpb24gdHJhbnNsYXRlR3JhcGgoZyl7dmFyIG1pblg9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLG1heFg9MCxtaW5ZPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxtYXhZPTAsZ3JhcGhMYWJlbD1nLmdyYXBoKCksbWFyZ2luWD1ncmFwaExhYmVsLm1hcmdpbnh8fDAsbWFyZ2luWT1ncmFwaExhYmVsLm1hcmdpbnl8fDA7ZnVuY3Rpb24gZ2V0RXh0cmVtZXMoYXR0cnMpe3ZhciB4PWF0dHJzLngseT1hdHRycy55LHc9YXR0cnMud2lkdGgsaD1hdHRycy5oZWlnaHQ7bWluWD1NYXRoLm1pbihtaW5YLHgtdy8yKTttYXhYPU1hdGgubWF4KG1heFgseCt3LzIpO21pblk9TWF0aC5taW4obWluWSx5LWgvMik7bWF4WT1NYXRoLm1heChtYXhZLHkraC8yKX1fLmZvckVhY2goZy5ub2RlcygpLGZ1bmN0aW9uKHYpe2dldEV4dHJlbWVzKGcubm9kZSh2KSl9KTtfLmZvckVhY2goZy5lZGdlcygpLGZ1bmN0aW9uKGUpe3ZhciBlZGdlPWcuZWRnZShlKTtpZihfLmhhcyhlZGdlLCJ4IikpZ2V0RXh0cmVtZXMoZWRnZSl9KTsKbWluWC09bWFyZ2luWDttaW5ZLT1tYXJnaW5ZO18uZm9yRWFjaChnLm5vZGVzKCksZnVuY3Rpb24odil7dmFyIG5vZGU9Zy5ub2RlKHYpO25vZGUueC09bWluWDtub2RlLnktPW1pbll9KTtfLmZvckVhY2goZy5lZGdlcygpLGZ1bmN0aW9uKGUpe3ZhciBlZGdlPWcuZWRnZShlKTtfLmZvckVhY2goZWRnZS5wb2ludHMsZnVuY3Rpb24ocCl7cC54LT1taW5YO3AueS09bWluWX0pO2lmKF8uaGFzKGVkZ2UsIngiKSllZGdlLngtPW1pblg7aWYoXy5oYXMoZWRnZSwieSIpKWVkZ2UueS09bWluWX0pO2dyYXBoTGFiZWwud2lkdGg9bWF4WC1taW5YK21hcmdpblg7Z3JhcGhMYWJlbC5oZWlnaHQ9bWF4WS1taW5ZK21hcmdpbll9ZnVuY3Rpb24gYXNzaWduTm9kZUludGVyc2VjdHMoZyl7Xy5mb3JFYWNoKGcuZWRnZXMoKSxmdW5jdGlvbihlKXt2YXIgZWRnZT1nLmVkZ2UoZSksbm9kZVY9Zy5ub2RlKGUudiksbm9kZVc9Zy5ub2RlKGUudykscDEscDI7aWYoIWVkZ2UucG9pbnRzKXtlZGdlLnBvaW50cz0KW107cDE9bm9kZVc7cDI9bm9kZVZ9ZWxzZXtwMT1lZGdlLnBvaW50c1swXTtwMj1lZGdlLnBvaW50c1tlZGdlLnBvaW50cy5sZW5ndGgtMV19ZWRnZS5wb2ludHMudW5zaGlmdCh1dGlsLmludGVyc2VjdFJlY3Qobm9kZVYscDEpKTtlZGdlLnBvaW50cy5wdXNoKHV0aWwuaW50ZXJzZWN0UmVjdChub2RlVyxwMikpfSl9ZnVuY3Rpb24gZml4dXBFZGdlTGFiZWxDb29yZHMoZyl7Xy5mb3JFYWNoKGcuZWRnZXMoKSxmdW5jdGlvbihlKXt2YXIgZWRnZT1nLmVkZ2UoZSk7aWYoXy5oYXMoZWRnZSwieCIpKXtpZihlZGdlLmxhYmVscG9zPT09ImwifHxlZGdlLmxhYmVscG9zPT09InIiKWVkZ2Uud2lkdGgtPWVkZ2UubGFiZWxvZmZzZXQ7c3dpdGNoKGVkZ2UubGFiZWxwb3Mpe2Nhc2UgImwiOmVkZ2UueC09ZWRnZS53aWR0aC8yK2VkZ2UubGFiZWxvZmZzZXQ7YnJlYWs7Y2FzZSAiciI6ZWRnZS54Kz1lZGdlLndpZHRoLzIrZWRnZS5sYWJlbG9mZnNldDticmVha319fSl9ZnVuY3Rpb24gcmV2ZXJzZVBvaW50c0ZvclJldmVyc2VkRWRnZXMoZyl7Xy5mb3JFYWNoKGcuZWRnZXMoKSwKZnVuY3Rpb24oZSl7dmFyIGVkZ2U9Zy5lZGdlKGUpO2lmKGVkZ2UucmV2ZXJzZWQpZWRnZS5wb2ludHMucmV2ZXJzZSgpfSl9ZnVuY3Rpb24gcmVtb3ZlQm9yZGVyTm9kZXMoZyl7Xy5mb3JFYWNoKGcubm9kZXMoKSxmdW5jdGlvbih2KXtpZihnLmNoaWxkcmVuKHYpLmxlbmd0aCl7dmFyIG5vZGU9Zy5ub2RlKHYpLHQ9Zy5ub2RlKG5vZGUuYm9yZGVyVG9wKSxiPWcubm9kZShub2RlLmJvcmRlckJvdHRvbSksbD1nLm5vZGUoXy5sYXN0KG5vZGUuYm9yZGVyTGVmdCkpLHI9Zy5ub2RlKF8ubGFzdChub2RlLmJvcmRlclJpZ2h0KSk7bm9kZS53aWR0aD1NYXRoLmFicyhyLngtbC54KTtub2RlLmhlaWdodD1NYXRoLmFicyhiLnktdC55KTtub2RlLng9bC54K25vZGUud2lkdGgvMjtub2RlLnk9dC55K25vZGUuaGVpZ2h0LzJ9fSk7Xy5mb3JFYWNoKGcubm9kZXMoKSxmdW5jdGlvbih2KXtpZihnLm5vZGUodikuZHVtbXk9PT0iYm9yZGVyIilnLnJlbW92ZU5vZGUodil9KX1mdW5jdGlvbiByZW1vdmVTZWxmRWRnZXMoZyl7Xy5mb3JFYWNoKGcuZWRnZXMoKSwKZnVuY3Rpb24oZSl7aWYoZS52PT09ZS53KXt2YXIgbm9kZT1nLm5vZGUoZS52KTtpZighbm9kZS5zZWxmRWRnZXMpbm9kZS5zZWxmRWRnZXM9W107bm9kZS5zZWxmRWRnZXMucHVzaCh7ZTplLGxhYmVsOmcuZWRnZShlKX0pO2cucmVtb3ZlRWRnZShlKX19KX1mdW5jdGlvbiBpbnNlcnRTZWxmRWRnZXMoZyl7dmFyIGxheWVycz11dGlsLmJ1aWxkTGF5ZXJNYXRyaXgoZyk7Xy5mb3JFYWNoKGxheWVycyxmdW5jdGlvbihsYXllcil7dmFyIG9yZGVyU2hpZnQ9MDtfLmZvckVhY2gobGF5ZXIsZnVuY3Rpb24odixpKXt2YXIgbm9kZT1nLm5vZGUodik7bm9kZS5vcmRlcj1pK29yZGVyU2hpZnQ7Xy5mb3JFYWNoKG5vZGUuc2VsZkVkZ2VzLGZ1bmN0aW9uKHNlbGZFZGdlKXt1dGlsLmFkZER1bW15Tm9kZShnLCJzZWxmZWRnZSIse3dpZHRoOnNlbGZFZGdlLmxhYmVsLndpZHRoLGhlaWdodDpzZWxmRWRnZS5sYWJlbC5oZWlnaHQscmFuazpub2RlLnJhbmssb3JkZXI6aSsgKytvcmRlclNoaWZ0LAplOnNlbGZFZGdlLmUsbGFiZWw6c2VsZkVkZ2UubGFiZWx9LCJfc2UiKX0pO2RlbGV0ZSBub2RlLnNlbGZFZGdlc30pfSl9ZnVuY3Rpb24gcG9zaXRpb25TZWxmRWRnZXMoZyl7Xy5mb3JFYWNoKGcubm9kZXMoKSxmdW5jdGlvbih2KXt2YXIgbm9kZT1nLm5vZGUodik7aWYobm9kZS5kdW1teT09PSJzZWxmZWRnZSIpe3ZhciBzZWxmTm9kZT1nLm5vZGUobm9kZS5lLnYpLHg9c2VsZk5vZGUueCtzZWxmTm9kZS53aWR0aC8yLHk9c2VsZk5vZGUueSxkeD1ub2RlLngteCxkeT1zZWxmTm9kZS5oZWlnaHQvMjtnLnNldEVkZ2Uobm9kZS5lLG5vZGUubGFiZWwpO2cucmVtb3ZlTm9kZSh2KTtub2RlLmxhYmVsLnBvaW50cz1be3g6eCsyKmR4LzMseTp5LWR5fSx7eDp4KzUqZHgvNix5OnktZHl9LHt4OngrZHgseTp5fSx7eDp4KzUqZHgvNix5OnkrZHl9LHt4OngrMipkeC8zLHk6eStkeX1dO25vZGUubGFiZWwueD1ub2RlLng7bm9kZS5sYWJlbC55PW5vZGUueX19KX1mdW5jdGlvbiBzZWxlY3ROdW1iZXJBdHRycyhvYmosCmF0dHJzKXtyZXR1cm4gXy5tYXBWYWx1ZXMoXy5waWNrKG9iaixhdHRycyksTnVtYmVyKX1mdW5jdGlvbiBjYW5vbmljYWxpemUoYXR0cnMpe3ZhciBuZXdBdHRycz17fTtfLmZvckVhY2goYXR0cnMsZnVuY3Rpb24odixrKXtuZXdBdHRyc1trLnRvTG93ZXJDYXNlKCldPXZ9KTtyZXR1cm4gbmV3QXR0cnN9fSx7Ii4vYWN5Y2xpYyI6MiwiLi9hZGQtYm9yZGVyLXNlZ21lbnRzIjozLCIuL2Nvb3JkaW5hdGUtc3lzdGVtIjo0LCIuL2dyYXBobGliIjo3LCIuL2xvZGFzaCI6MTAsIi4vbmVzdGluZy1ncmFwaCI6MTEsIi4vbm9ybWFsaXplIjoxMiwiLi9vcmRlciI6MTcsIi4vcGFyZW50LWR1bW15LWNoYWlucyI6MjIsIi4vcG9zaXRpb24iOjI0LCIuL3JhbmsiOjI2LCIuL3V0aWwiOjI5fV0sMTA6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe3ZhciBsb2Rhc2g7aWYodHlwZW9mIHJlcXVpcmU9PT0iZnVuY3Rpb24iKXRyeXtsb2Rhc2g9cmVxdWlyZSgibG9kYXNoIil9Y2F0Y2goZSl7fWlmKCFsb2Rhc2gpbG9kYXNoPQp3aW5kb3cuXzttb2R1bGUuZXhwb3J0cz1sb2Rhc2h9LHsibG9kYXNoIjp1bmRlZmluZWR9XSwxMTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7dmFyIF89cmVxdWlyZSgiLi9sb2Rhc2giKSx1dGlsPXJlcXVpcmUoIi4vdXRpbCIpO21vZHVsZS5leHBvcnRzPXtydW46cnVuLGNsZWFudXA6Y2xlYW51cH07ZnVuY3Rpb24gcnVuKGcpe3ZhciByb290PXV0aWwuYWRkRHVtbXlOb2RlKGcsInJvb3QiLHt9LCJfcm9vdCIpO3ZhciBkZXB0aHM9dHJlZURlcHRocyhnKTt2YXIgaGVpZ2h0PV8ubWF4KF8udmFsdWVzKGRlcHRocykpLTE7dmFyIG5vZGVTZXA9MipoZWlnaHQrMTtnLmdyYXBoKCkubmVzdGluZ1Jvb3Q9cm9vdDtfLmZvckVhY2goZy5lZGdlcygpLGZ1bmN0aW9uKGUpe2cuZWRnZShlKS5taW5sZW4qPW5vZGVTZXB9KTt2YXIgd2VpZ2h0PXN1bVdlaWdodHMoZykrMTtfLmZvckVhY2goZy5jaGlsZHJlbigpLGZ1bmN0aW9uKGNoaWxkKXtkZnMoZyxyb290LG5vZGVTZXAsCndlaWdodCxoZWlnaHQsZGVwdGhzLGNoaWxkKX0pO2cuZ3JhcGgoKS5ub2RlUmFua0ZhY3Rvcj1ub2RlU2VwfWZ1bmN0aW9uIGRmcyhnLHJvb3Qsbm9kZVNlcCx3ZWlnaHQsaGVpZ2h0LGRlcHRocyx2KXt2YXIgY2hpbGRyZW49Zy5jaGlsZHJlbih2KTtpZighY2hpbGRyZW4ubGVuZ3RoKXtpZih2IT09cm9vdClnLnNldEVkZ2Uocm9vdCx2LHt3ZWlnaHQ6MCxtaW5sZW46bm9kZVNlcH0pO3JldHVybn12YXIgdG9wPXV0aWwuYWRkQm9yZGVyTm9kZShnLCJfYnQiKSxib3R0b209dXRpbC5hZGRCb3JkZXJOb2RlKGcsIl9iYiIpLGxhYmVsPWcubm9kZSh2KTtnLnNldFBhcmVudCh0b3Asdik7bGFiZWwuYm9yZGVyVG9wPXRvcDtnLnNldFBhcmVudChib3R0b20sdik7bGFiZWwuYm9yZGVyQm90dG9tPWJvdHRvbTtfLmZvckVhY2goY2hpbGRyZW4sZnVuY3Rpb24oY2hpbGQpe2RmcyhnLHJvb3Qsbm9kZVNlcCx3ZWlnaHQsaGVpZ2h0LGRlcHRocyxjaGlsZCk7dmFyIGNoaWxkTm9kZT1nLm5vZGUoY2hpbGQpLApjaGlsZFRvcD1jaGlsZE5vZGUuYm9yZGVyVG9wP2NoaWxkTm9kZS5ib3JkZXJUb3A6Y2hpbGQsY2hpbGRCb3R0b209Y2hpbGROb2RlLmJvcmRlckJvdHRvbT9jaGlsZE5vZGUuYm9yZGVyQm90dG9tOmNoaWxkLHRoaXNXZWlnaHQ9Y2hpbGROb2RlLmJvcmRlclRvcD93ZWlnaHQ6Mip3ZWlnaHQsbWlubGVuPWNoaWxkVG9wIT09Y2hpbGRCb3R0b20/MTpoZWlnaHQtZGVwdGhzW3ZdKzE7Zy5zZXRFZGdlKHRvcCxjaGlsZFRvcCx7d2VpZ2h0OnRoaXNXZWlnaHQsbWlubGVuOm1pbmxlbixuZXN0aW5nRWRnZTp0cnVlfSk7Zy5zZXRFZGdlKGNoaWxkQm90dG9tLGJvdHRvbSx7d2VpZ2h0OnRoaXNXZWlnaHQsbWlubGVuOm1pbmxlbixuZXN0aW5nRWRnZTp0cnVlfSl9KTtpZighZy5wYXJlbnQodikpZy5zZXRFZGdlKHJvb3QsdG9wLHt3ZWlnaHQ6MCxtaW5sZW46aGVpZ2h0K2RlcHRoc1t2XX0pfWZ1bmN0aW9uIHRyZWVEZXB0aHMoZyl7dmFyIGRlcHRocz17fTtmdW5jdGlvbiBkZnModixkZXB0aCl7dmFyIGNoaWxkcmVuPQpnLmNoaWxkcmVuKHYpO2lmKGNoaWxkcmVuJiZjaGlsZHJlbi5sZW5ndGgpXy5mb3JFYWNoKGNoaWxkcmVuLGZ1bmN0aW9uKGNoaWxkKXtkZnMoY2hpbGQsZGVwdGgrMSl9KTtkZXB0aHNbdl09ZGVwdGh9Xy5mb3JFYWNoKGcuY2hpbGRyZW4oKSxmdW5jdGlvbih2KXtkZnModiwxKX0pO3JldHVybiBkZXB0aHN9ZnVuY3Rpb24gc3VtV2VpZ2h0cyhnKXtyZXR1cm4gXy5yZWR1Y2UoZy5lZGdlcygpLGZ1bmN0aW9uKGFjYyxlKXtyZXR1cm4gYWNjK2cuZWRnZShlKS53ZWlnaHR9LDApfWZ1bmN0aW9uIGNsZWFudXAoZyl7dmFyIGdyYXBoTGFiZWw9Zy5ncmFwaCgpO2cucmVtb3ZlTm9kZShncmFwaExhYmVsLm5lc3RpbmdSb290KTtkZWxldGUgZ3JhcGhMYWJlbC5uZXN0aW5nUm9vdDtfLmZvckVhY2goZy5lZGdlcygpLGZ1bmN0aW9uKGUpe3ZhciBlZGdlPWcuZWRnZShlKTtpZihlZGdlLm5lc3RpbmdFZGdlKWcucmVtb3ZlRWRnZShlKX0pfX0seyIuL2xvZGFzaCI6MTAsIi4vdXRpbCI6Mjl9XSwKMTI6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe3ZhciBfPXJlcXVpcmUoIi4vbG9kYXNoIiksdXRpbD1yZXF1aXJlKCIuL3V0aWwiKTttb2R1bGUuZXhwb3J0cz17cnVuOnJ1bix1bmRvOnVuZG99O2Z1bmN0aW9uIHJ1bihnKXtnLmdyYXBoKCkuZHVtbXlDaGFpbnM9W107Xy5mb3JFYWNoKGcuZWRnZXMoKSxmdW5jdGlvbihlZGdlKXtub3JtYWxpemVFZGdlKGcsZWRnZSl9KX1mdW5jdGlvbiBub3JtYWxpemVFZGdlKGcsZSl7dmFyIHY9ZS52LHZSYW5rPWcubm9kZSh2KS5yYW5rLHc9ZS53LHdSYW5rPWcubm9kZSh3KS5yYW5rLG5hbWU9ZS5uYW1lLGVkZ2VMYWJlbD1nLmVkZ2UoZSksbGFiZWxSYW5rPWVkZ2VMYWJlbC5sYWJlbFJhbms7aWYod1Jhbms9PT12UmFuaysxKXJldHVybjtnLnJlbW92ZUVkZ2UoZSk7dmFyIGR1bW15LGF0dHJzLGk7Zm9yKGk9MCwrK3ZSYW5rO3ZSYW5rPHdSYW5rOysraSwrK3ZSYW5rKXtlZGdlTGFiZWwucG9pbnRzPVtdO2F0dHJzPXt3aWR0aDowLApoZWlnaHQ6MCxlZGdlTGFiZWw6ZWRnZUxhYmVsLGVkZ2VPYmo6ZSxyYW5rOnZSYW5rfTtkdW1teT11dGlsLmFkZER1bW15Tm9kZShnLCJlZGdlIixhdHRycywiX2QiKTtpZih2UmFuaz09PWxhYmVsUmFuayl7YXR0cnMud2lkdGg9ZWRnZUxhYmVsLndpZHRoO2F0dHJzLmhlaWdodD1lZGdlTGFiZWwuaGVpZ2h0O2F0dHJzLmR1bW15PSJlZGdlLWxhYmVsIjthdHRycy5sYWJlbHBvcz1lZGdlTGFiZWwubGFiZWxwb3N9Zy5zZXRFZGdlKHYsZHVtbXkse3dlaWdodDplZGdlTGFiZWwud2VpZ2h0fSxuYW1lKTtpZihpPT09MClnLmdyYXBoKCkuZHVtbXlDaGFpbnMucHVzaChkdW1teSk7dj1kdW1teX1nLnNldEVkZ2Uodix3LHt3ZWlnaHQ6ZWRnZUxhYmVsLndlaWdodH0sbmFtZSl9ZnVuY3Rpb24gdW5kbyhnKXtfLmZvckVhY2goZy5ncmFwaCgpLmR1bW15Q2hhaW5zLGZ1bmN0aW9uKHYpe3ZhciBub2RlPWcubm9kZSh2KSxvcmlnTGFiZWw9bm9kZS5lZGdlTGFiZWwsdztnLnNldEVkZ2Uobm9kZS5lZGdlT2JqLApvcmlnTGFiZWwpO3doaWxlKG5vZGUuZHVtbXkpe3c9Zy5zdWNjZXNzb3JzKHYpWzBdO2cucmVtb3ZlTm9kZSh2KTtvcmlnTGFiZWwucG9pbnRzLnB1c2goe3g6bm9kZS54LHk6bm9kZS55fSk7aWYobm9kZS5kdW1teT09PSJlZGdlLWxhYmVsIil7b3JpZ0xhYmVsLng9bm9kZS54O29yaWdMYWJlbC55PW5vZGUueTtvcmlnTGFiZWwud2lkdGg9bm9kZS53aWR0aDtvcmlnTGFiZWwuaGVpZ2h0PW5vZGUuaGVpZ2h0fXY9dztub2RlPWcubm9kZSh2KX19KX19LHsiLi9sb2Rhc2giOjEwLCIuL3V0aWwiOjI5fV0sMTM6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe3ZhciBfPXJlcXVpcmUoIi4uL2xvZGFzaCIpO21vZHVsZS5leHBvcnRzPWFkZFN1YmdyYXBoQ29uc3RyYWludHM7ZnVuY3Rpb24gYWRkU3ViZ3JhcGhDb25zdHJhaW50cyhnLGNnLHZzKXt2YXIgcHJldj17fSxyb290UHJldjtfLmZvckVhY2godnMsZnVuY3Rpb24odil7dmFyIGNoaWxkPWcucGFyZW50KHYpLHBhcmVudCwKcHJldkNoaWxkO3doaWxlKGNoaWxkKXtwYXJlbnQ9Zy5wYXJlbnQoY2hpbGQpO2lmKHBhcmVudCl7cHJldkNoaWxkPXByZXZbcGFyZW50XTtwcmV2W3BhcmVudF09Y2hpbGR9ZWxzZXtwcmV2Q2hpbGQ9cm9vdFByZXY7cm9vdFByZXY9Y2hpbGR9aWYocHJldkNoaWxkJiZwcmV2Q2hpbGQhPT1jaGlsZCl7Y2cuc2V0RWRnZShwcmV2Q2hpbGQsY2hpbGQpO3JldHVybn1jaGlsZD1wYXJlbnR9fSl9fSx7Ii4uL2xvZGFzaCI6MTB9XSwxNDpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7dmFyIF89cmVxdWlyZSgiLi4vbG9kYXNoIik7bW9kdWxlLmV4cG9ydHM9YmFyeWNlbnRlcjtmdW5jdGlvbiBiYXJ5Y2VudGVyKGcsbW92YWJsZSl7cmV0dXJuIF8ubWFwKG1vdmFibGUsZnVuY3Rpb24odil7dmFyIGluVj1nLmluRWRnZXModik7aWYoIWluVi5sZW5ndGgpcmV0dXJue3Y6dn07ZWxzZXt2YXIgcmVzdWx0PV8ucmVkdWNlKGluVixmdW5jdGlvbihhY2MsZSl7dmFyIGVkZ2U9Zy5lZGdlKGUpLApub2RlVT1nLm5vZGUoZS52KTtyZXR1cm57c3VtOmFjYy5zdW0rZWRnZS53ZWlnaHQqbm9kZVUub3JkZXIsd2VpZ2h0OmFjYy53ZWlnaHQrZWRnZS53ZWlnaHR9fSx7c3VtOjAsd2VpZ2h0OjB9KTtyZXR1cm57djp2LGJhcnljZW50ZXI6cmVzdWx0LnN1bS9yZXN1bHQud2VpZ2h0LHdlaWdodDpyZXN1bHQud2VpZ2h0fX19KX19LHsiLi4vbG9kYXNoIjoxMH1dLDE1OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXt2YXIgXz1yZXF1aXJlKCIuLi9sb2Rhc2giKSxHcmFwaD1yZXF1aXJlKCIuLi9ncmFwaGxpYiIpLkdyYXBoO21vZHVsZS5leHBvcnRzPWJ1aWxkTGF5ZXJHcmFwaDtmdW5jdGlvbiBidWlsZExheWVyR3JhcGgoZyxyYW5rLHJlbGF0aW9uc2hpcCl7dmFyIHJvb3Q9Y3JlYXRlUm9vdE5vZGUoZykscmVzdWx0PShuZXcgR3JhcGgoe2NvbXBvdW5kOnRydWV9KSkuc2V0R3JhcGgoe3Jvb3Q6cm9vdH0pLnNldERlZmF1bHROb2RlTGFiZWwoZnVuY3Rpb24odil7cmV0dXJuIGcubm9kZSh2KX0pOwpfLmZvckVhY2goZy5ub2RlcygpLGZ1bmN0aW9uKHYpe3ZhciBub2RlPWcubm9kZSh2KSxwYXJlbnQ9Zy5wYXJlbnQodik7aWYobm9kZS5yYW5rPT09cmFua3x8bm9kZS5taW5SYW5rPD1yYW5rJiZyYW5rPD1ub2RlLm1heFJhbmspe3Jlc3VsdC5zZXROb2RlKHYpO3Jlc3VsdC5zZXRQYXJlbnQodixwYXJlbnR8fHJvb3QpO18uZm9yRWFjaChnW3JlbGF0aW9uc2hpcF0odiksZnVuY3Rpb24oZSl7dmFyIHU9ZS52PT09dj9lLnc6ZS52LGVkZ2U9cmVzdWx0LmVkZ2UodSx2KSx3ZWlnaHQ9IV8uaXNVbmRlZmluZWQoZWRnZSk/ZWRnZS53ZWlnaHQ6MDtyZXN1bHQuc2V0RWRnZSh1LHYse3dlaWdodDpnLmVkZ2UoZSkud2VpZ2h0K3dlaWdodH0pfSk7aWYoXy5oYXMobm9kZSwibWluUmFuayIpKXJlc3VsdC5zZXROb2RlKHYse2JvcmRlckxlZnQ6bm9kZS5ib3JkZXJMZWZ0W3JhbmtdLGJvcmRlclJpZ2h0Om5vZGUuYm9yZGVyUmlnaHRbcmFua119KX19KTtyZXR1cm4gcmVzdWx0fWZ1bmN0aW9uIGNyZWF0ZVJvb3ROb2RlKGcpe3ZhciB2Owp3aGlsZShnLmhhc05vZGUodj1fLnVuaXF1ZUlkKCJfcm9vdCIpKSk7cmV0dXJuIHZ9fSx7Ii4uL2dyYXBobGliIjo3LCIuLi9sb2Rhc2giOjEwfV0sMTY6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe3ZhciBfPXJlcXVpcmUoIi4uL2xvZGFzaCIpO21vZHVsZS5leHBvcnRzPWNyb3NzQ291bnQ7ZnVuY3Rpb24gY3Jvc3NDb3VudChnLGxheWVyaW5nKXt2YXIgY2M9MDtmb3IodmFyIGk9MTtpPGxheWVyaW5nLmxlbmd0aDsrK2kpY2MrPXR3b0xheWVyQ3Jvc3NDb3VudChnLGxheWVyaW5nW2ktMV0sbGF5ZXJpbmdbaV0pO3JldHVybiBjY31mdW5jdGlvbiB0d29MYXllckNyb3NzQ291bnQoZyxub3J0aExheWVyLHNvdXRoTGF5ZXIpe3ZhciBzb3V0aFBvcz1fLnppcE9iamVjdChzb3V0aExheWVyLF8ubWFwKHNvdXRoTGF5ZXIsZnVuY3Rpb24odixpKXtyZXR1cm4gaX0pKTt2YXIgc291dGhFbnRyaWVzPV8uZmxhdHRlbihfLm1hcChub3J0aExheWVyLGZ1bmN0aW9uKHYpe3JldHVybiBfLmNoYWluKGcub3V0RWRnZXModikpLm1hcChmdW5jdGlvbihlKXtyZXR1cm57cG9zOnNvdXRoUG9zW2Uud10sCndlaWdodDpnLmVkZ2UoZSkud2VpZ2h0fX0pLnNvcnRCeSgicG9zIikudmFsdWUoKX0pLHRydWUpO3ZhciBmaXJzdEluZGV4PTE7d2hpbGUoZmlyc3RJbmRleDxzb3V0aExheWVyLmxlbmd0aClmaXJzdEluZGV4PDw9MTt2YXIgdHJlZVNpemU9MipmaXJzdEluZGV4LTE7Zmlyc3RJbmRleC09MTt2YXIgdHJlZT1fLm1hcChuZXcgQXJyYXkodHJlZVNpemUpLGZ1bmN0aW9uKCl7cmV0dXJuIDB9KTt2YXIgY2M9MDtfLmZvckVhY2goc291dGhFbnRyaWVzLmZvckVhY2goZnVuY3Rpb24oZW50cnkpe3ZhciBpbmRleD1lbnRyeS5wb3MrZmlyc3RJbmRleDt0cmVlW2luZGV4XSs9ZW50cnkud2VpZ2h0O3ZhciB3ZWlnaHRTdW09MDt3aGlsZShpbmRleD4wKXtpZihpbmRleCUyKXdlaWdodFN1bSs9dHJlZVtpbmRleCsxXTtpbmRleD1pbmRleC0xPj4xO3RyZWVbaW5kZXhdKz1lbnRyeS53ZWlnaHR9Y2MrPWVudHJ5LndlaWdodCp3ZWlnaHRTdW19KSk7cmV0dXJuIGNjfX0seyIuLi9sb2Rhc2giOjEwfV0sCjE3OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXt2YXIgXz1yZXF1aXJlKCIuLi9sb2Rhc2giKSxpbml0T3JkZXI9cmVxdWlyZSgiLi9pbml0LW9yZGVyIiksY3Jvc3NDb3VudD1yZXF1aXJlKCIuL2Nyb3NzLWNvdW50Iiksc29ydFN1YmdyYXBoPXJlcXVpcmUoIi4vc29ydC1zdWJncmFwaCIpLGJ1aWxkTGF5ZXJHcmFwaD1yZXF1aXJlKCIuL2J1aWxkLWxheWVyLWdyYXBoIiksYWRkU3ViZ3JhcGhDb25zdHJhaW50cz1yZXF1aXJlKCIuL2FkZC1zdWJncmFwaC1jb25zdHJhaW50cyIpLEdyYXBoPXJlcXVpcmUoIi4uL2dyYXBobGliIikuR3JhcGgsdXRpbD1yZXF1aXJlKCIuLi91dGlsIik7bW9kdWxlLmV4cG9ydHM9b3JkZXI7ZnVuY3Rpb24gb3JkZXIoZyl7dmFyIG1heFJhbms9dXRpbC5tYXhSYW5rKGcpLGRvd25MYXllckdyYXBocz1idWlsZExheWVyR3JhcGhzKGcsXy5yYW5nZSgxLG1heFJhbmsrMSksImluRWRnZXMiKSx1cExheWVyR3JhcGhzPWJ1aWxkTGF5ZXJHcmFwaHMoZywKXy5yYW5nZShtYXhSYW5rLTEsLTEsLTEpLCJvdXRFZGdlcyIpO3ZhciBsYXllcmluZz1pbml0T3JkZXIoZyk7YXNzaWduT3JkZXIoZyxsYXllcmluZyk7dmFyIGJlc3RDQz1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksYmVzdDtmb3IodmFyIGk9MCxsYXN0QmVzdD0wO2xhc3RCZXN0PDQ7KytpLCsrbGFzdEJlc3Qpe3N3ZWVwTGF5ZXJHcmFwaHMoaSUyP2Rvd25MYXllckdyYXBoczp1cExheWVyR3JhcGhzLGklND49Mik7bGF5ZXJpbmc9dXRpbC5idWlsZExheWVyTWF0cml4KGcpO3ZhciBjYz1jcm9zc0NvdW50KGcsbGF5ZXJpbmcpO2lmKGNjPGJlc3RDQyl7bGFzdEJlc3Q9MDtiZXN0PV8uY2xvbmVEZWVwKGxheWVyaW5nKTtiZXN0Q0M9Y2N9fWFzc2lnbk9yZGVyKGcsYmVzdCl9ZnVuY3Rpb24gYnVpbGRMYXllckdyYXBocyhnLHJhbmtzLHJlbGF0aW9uc2hpcCl7cmV0dXJuIF8ubWFwKHJhbmtzLGZ1bmN0aW9uKHJhbmspe3JldHVybiBidWlsZExheWVyR3JhcGgoZyxyYW5rLHJlbGF0aW9uc2hpcCl9KX0KZnVuY3Rpb24gc3dlZXBMYXllckdyYXBocyhsYXllckdyYXBocyxiaWFzUmlnaHQpe3ZhciBjZz1uZXcgR3JhcGg7Xy5mb3JFYWNoKGxheWVyR3JhcGhzLGZ1bmN0aW9uKGxnKXt2YXIgcm9vdD1sZy5ncmFwaCgpLnJvb3Q7dmFyIHNvcnRlZD1zb3J0U3ViZ3JhcGgobGcscm9vdCxjZyxiaWFzUmlnaHQpO18uZm9yRWFjaChzb3J0ZWQudnMsZnVuY3Rpb24odixpKXtsZy5ub2RlKHYpLm9yZGVyPWl9KTthZGRTdWJncmFwaENvbnN0cmFpbnRzKGxnLGNnLHNvcnRlZC52cyl9KX1mdW5jdGlvbiBhc3NpZ25PcmRlcihnLGxheWVyaW5nKXtfLmZvckVhY2gobGF5ZXJpbmcsZnVuY3Rpb24obGF5ZXIpe18uZm9yRWFjaChsYXllcixmdW5jdGlvbih2LGkpe2cubm9kZSh2KS5vcmRlcj1pfSl9KX19LHsiLi4vZ3JhcGhsaWIiOjcsIi4uL2xvZGFzaCI6MTAsIi4uL3V0aWwiOjI5LCIuL2FkZC1zdWJncmFwaC1jb25zdHJhaW50cyI6MTMsIi4vYnVpbGQtbGF5ZXItZ3JhcGgiOjE1LCIuL2Nyb3NzLWNvdW50IjoxNiwKIi4vaW5pdC1vcmRlciI6MTgsIi4vc29ydC1zdWJncmFwaCI6MjB9XSwxODpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7dmFyIF89cmVxdWlyZSgiLi4vbG9kYXNoIik7bW9kdWxlLmV4cG9ydHM9aW5pdE9yZGVyO2Z1bmN0aW9uIGluaXRPcmRlcihnKXt2YXIgdmlzaXRlZD17fSxzaW1wbGVOb2Rlcz1fLmZpbHRlcihnLm5vZGVzKCksZnVuY3Rpb24odil7cmV0dXJuIWcuY2hpbGRyZW4odikubGVuZ3RofSksbWF4UmFuaz1fLm1heChfLm1hcChzaW1wbGVOb2RlcyxmdW5jdGlvbih2KXtyZXR1cm4gZy5ub2RlKHYpLnJhbmt9KSksbGF5ZXJzPV8ubWFwKF8ucmFuZ2UobWF4UmFuaysxKSxmdW5jdGlvbigpe3JldHVybltdfSk7ZnVuY3Rpb24gZGZzKHYpe2lmKF8uaGFzKHZpc2l0ZWQsdikpcmV0dXJuO3Zpc2l0ZWRbdl09dHJ1ZTt2YXIgbm9kZT1nLm5vZGUodik7bGF5ZXJzW25vZGUucmFua10ucHVzaCh2KTtfLmZvckVhY2goZy5zdWNjZXNzb3JzKHYpLGRmcyl9dmFyIG9yZGVyZWRWcz0KXy5zb3J0Qnkoc2ltcGxlTm9kZXMsZnVuY3Rpb24odil7cmV0dXJuIGcubm9kZSh2KS5yYW5rfSk7Xy5mb3JFYWNoKG9yZGVyZWRWcyxkZnMpO3JldHVybiBsYXllcnN9fSx7Ii4uL2xvZGFzaCI6MTB9XSwxOTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7dmFyIF89cmVxdWlyZSgiLi4vbG9kYXNoIik7bW9kdWxlLmV4cG9ydHM9cmVzb2x2ZUNvbmZsaWN0cztmdW5jdGlvbiByZXNvbHZlQ29uZmxpY3RzKGVudHJpZXMsY2cpe3ZhciBtYXBwZWRFbnRyaWVzPXt9O18uZm9yRWFjaChlbnRyaWVzLGZ1bmN0aW9uKGVudHJ5LGkpe3ZhciB0bXA9bWFwcGVkRW50cmllc1tlbnRyeS52XT17aW5kZWdyZWU6MCwiaW4iOltdLG91dDpbXSx2czpbZW50cnkudl0saTppfTtpZighXy5pc1VuZGVmaW5lZChlbnRyeS5iYXJ5Y2VudGVyKSl7dG1wLmJhcnljZW50ZXI9ZW50cnkuYmFyeWNlbnRlcjt0bXAud2VpZ2h0PWVudHJ5LndlaWdodH19KTtfLmZvckVhY2goY2cuZWRnZXMoKSxmdW5jdGlvbihlKXt2YXIgZW50cnlWPQptYXBwZWRFbnRyaWVzW2Uudl0sZW50cnlXPW1hcHBlZEVudHJpZXNbZS53XTtpZighXy5pc1VuZGVmaW5lZChlbnRyeVYpJiYhXy5pc1VuZGVmaW5lZChlbnRyeVcpKXtlbnRyeVcuaW5kZWdyZWUrKztlbnRyeVYub3V0LnB1c2gobWFwcGVkRW50cmllc1tlLnddKX19KTt2YXIgc291cmNlU2V0PV8uZmlsdGVyKG1hcHBlZEVudHJpZXMsZnVuY3Rpb24oZW50cnkpe3JldHVybiFlbnRyeS5pbmRlZ3JlZX0pO3JldHVybiBkb1Jlc29sdmVDb25mbGljdHMoc291cmNlU2V0KX1mdW5jdGlvbiBkb1Jlc29sdmVDb25mbGljdHMoc291cmNlU2V0KXt2YXIgZW50cmllcz1bXTtmdW5jdGlvbiBoYW5kbGVJbih2RW50cnkpe3JldHVybiBmdW5jdGlvbih1RW50cnkpe2lmKHVFbnRyeS5tZXJnZWQpcmV0dXJuO2lmKF8uaXNVbmRlZmluZWQodUVudHJ5LmJhcnljZW50ZXIpfHxfLmlzVW5kZWZpbmVkKHZFbnRyeS5iYXJ5Y2VudGVyKXx8dUVudHJ5LmJhcnljZW50ZXI+PXZFbnRyeS5iYXJ5Y2VudGVyKW1lcmdlRW50cmllcyh2RW50cnksCnVFbnRyeSl9fWZ1bmN0aW9uIGhhbmRsZU91dCh2RW50cnkpe3JldHVybiBmdW5jdGlvbih3RW50cnkpe3dFbnRyeVsiaW4iXS5wdXNoKHZFbnRyeSk7aWYoLS13RW50cnkuaW5kZWdyZWU9PT0wKXNvdXJjZVNldC5wdXNoKHdFbnRyeSl9fXdoaWxlKHNvdXJjZVNldC5sZW5ndGgpe3ZhciBlbnRyeT1zb3VyY2VTZXQucG9wKCk7ZW50cmllcy5wdXNoKGVudHJ5KTtfLmZvckVhY2goZW50cnlbImluIl0ucmV2ZXJzZSgpLGhhbmRsZUluKGVudHJ5KSk7Xy5mb3JFYWNoKGVudHJ5Lm91dCxoYW5kbGVPdXQoZW50cnkpKX1yZXR1cm4gXy5jaGFpbihlbnRyaWVzKS5maWx0ZXIoZnVuY3Rpb24oZW50cnkpe3JldHVybiFlbnRyeS5tZXJnZWR9KS5tYXAoZnVuY3Rpb24oZW50cnkpe3JldHVybiBfLnBpY2soZW50cnksWyJ2cyIsImkiLCJiYXJ5Y2VudGVyIiwid2VpZ2h0Il0pfSkudmFsdWUoKX1mdW5jdGlvbiBtZXJnZUVudHJpZXModGFyZ2V0LHNvdXJjZSl7dmFyIHN1bT0wLHdlaWdodD0wOwppZih0YXJnZXQud2VpZ2h0KXtzdW0rPXRhcmdldC5iYXJ5Y2VudGVyKnRhcmdldC53ZWlnaHQ7d2VpZ2h0Kz10YXJnZXQud2VpZ2h0fWlmKHNvdXJjZS53ZWlnaHQpe3N1bSs9c291cmNlLmJhcnljZW50ZXIqc291cmNlLndlaWdodDt3ZWlnaHQrPXNvdXJjZS53ZWlnaHR9dGFyZ2V0LnZzPXNvdXJjZS52cy5jb25jYXQodGFyZ2V0LnZzKTt0YXJnZXQuYmFyeWNlbnRlcj1zdW0vd2VpZ2h0O3RhcmdldC53ZWlnaHQ9d2VpZ2h0O3RhcmdldC5pPU1hdGgubWluKHNvdXJjZS5pLHRhcmdldC5pKTtzb3VyY2UubWVyZ2VkPXRydWV9fSx7Ii4uL2xvZGFzaCI6MTB9XSwyMDpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7dmFyIF89cmVxdWlyZSgiLi4vbG9kYXNoIiksYmFyeWNlbnRlcj1yZXF1aXJlKCIuL2JhcnljZW50ZXIiKSxyZXNvbHZlQ29uZmxpY3RzPXJlcXVpcmUoIi4vcmVzb2x2ZS1jb25mbGljdHMiKSxzb3J0PXJlcXVpcmUoIi4vc29ydCIpO21vZHVsZS5leHBvcnRzPQpzb3J0U3ViZ3JhcGg7ZnVuY3Rpb24gc29ydFN1YmdyYXBoKGcsdixjZyxiaWFzUmlnaHQpe3ZhciBtb3ZhYmxlPWcuY2hpbGRyZW4odiksbm9kZT1nLm5vZGUodiksYmw9bm9kZT9ub2RlLmJvcmRlckxlZnQ6dW5kZWZpbmVkLGJyPW5vZGU/bm9kZS5ib3JkZXJSaWdodDp1bmRlZmluZWQsc3ViZ3JhcGhzPXt9O2lmKGJsKW1vdmFibGU9Xy5maWx0ZXIobW92YWJsZSxmdW5jdGlvbih3KXtyZXR1cm4gdyE9PWJsJiZ3IT09YnJ9KTt2YXIgYmFyeWNlbnRlcnM9YmFyeWNlbnRlcihnLG1vdmFibGUpO18uZm9yRWFjaChiYXJ5Y2VudGVycyxmdW5jdGlvbihlbnRyeSl7aWYoZy5jaGlsZHJlbihlbnRyeS52KS5sZW5ndGgpe3ZhciBzdWJncmFwaFJlc3VsdD1zb3J0U3ViZ3JhcGgoZyxlbnRyeS52LGNnLGJpYXNSaWdodCk7c3ViZ3JhcGhzW2VudHJ5LnZdPXN1YmdyYXBoUmVzdWx0O2lmKF8uaGFzKHN1YmdyYXBoUmVzdWx0LCJiYXJ5Y2VudGVyIikpbWVyZ2VCYXJ5Y2VudGVycyhlbnRyeSwKc3ViZ3JhcGhSZXN1bHQpfX0pO3ZhciBlbnRyaWVzPXJlc29sdmVDb25mbGljdHMoYmFyeWNlbnRlcnMsY2cpO2V4cGFuZFN1YmdyYXBocyhlbnRyaWVzLHN1YmdyYXBocyk7dmFyIHJlc3VsdD1zb3J0KGVudHJpZXMsYmlhc1JpZ2h0KTtpZihibCl7cmVzdWx0LnZzPV8uZmxhdHRlbihbYmwscmVzdWx0LnZzLGJyXSx0cnVlKTtpZihnLnByZWRlY2Vzc29ycyhibCkubGVuZ3RoKXt2YXIgYmxQcmVkPWcubm9kZShnLnByZWRlY2Vzc29ycyhibClbMF0pLGJyUHJlZD1nLm5vZGUoZy5wcmVkZWNlc3NvcnMoYnIpWzBdKTtpZighXy5oYXMocmVzdWx0LCJiYXJ5Y2VudGVyIikpe3Jlc3VsdC5iYXJ5Y2VudGVyPTA7cmVzdWx0LndlaWdodD0wfXJlc3VsdC5iYXJ5Y2VudGVyPShyZXN1bHQuYmFyeWNlbnRlcipyZXN1bHQud2VpZ2h0K2JsUHJlZC5vcmRlciticlByZWQub3JkZXIpLyhyZXN1bHQud2VpZ2h0KzIpO3Jlc3VsdC53ZWlnaHQrPTJ9fXJldHVybiByZXN1bHR9ZnVuY3Rpb24gZXhwYW5kU3ViZ3JhcGhzKGVudHJpZXMsCnN1YmdyYXBocyl7Xy5mb3JFYWNoKGVudHJpZXMsZnVuY3Rpb24oZW50cnkpe2VudHJ5LnZzPV8uZmxhdHRlbihlbnRyeS52cy5tYXAoZnVuY3Rpb24odil7aWYoc3ViZ3JhcGhzW3ZdKXJldHVybiBzdWJncmFwaHNbdl0udnM7cmV0dXJuIHZ9KSx0cnVlKX0pfWZ1bmN0aW9uIG1lcmdlQmFyeWNlbnRlcnModGFyZ2V0LG90aGVyKXtpZighXy5pc1VuZGVmaW5lZCh0YXJnZXQuYmFyeWNlbnRlcikpe3RhcmdldC5iYXJ5Y2VudGVyPSh0YXJnZXQuYmFyeWNlbnRlcip0YXJnZXQud2VpZ2h0K290aGVyLmJhcnljZW50ZXIqb3RoZXIud2VpZ2h0KS8odGFyZ2V0LndlaWdodCtvdGhlci53ZWlnaHQpO3RhcmdldC53ZWlnaHQrPW90aGVyLndlaWdodH1lbHNle3RhcmdldC5iYXJ5Y2VudGVyPW90aGVyLmJhcnljZW50ZXI7dGFyZ2V0LndlaWdodD1vdGhlci53ZWlnaHR9fX0seyIuLi9sb2Rhc2giOjEwLCIuL2JhcnljZW50ZXIiOjE0LCIuL3Jlc29sdmUtY29uZmxpY3RzIjoxOSwiLi9zb3J0IjoyMX1dLAoyMTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7dmFyIF89cmVxdWlyZSgiLi4vbG9kYXNoIiksdXRpbD1yZXF1aXJlKCIuLi91dGlsIik7bW9kdWxlLmV4cG9ydHM9c29ydDtmdW5jdGlvbiBzb3J0KGVudHJpZXMsYmlhc1JpZ2h0KXt2YXIgcGFydHM9dXRpbC5wYXJ0aXRpb24oZW50cmllcyxmdW5jdGlvbihlbnRyeSl7cmV0dXJuIF8uaGFzKGVudHJ5LCJiYXJ5Y2VudGVyIil9KTt2YXIgc29ydGFibGU9cGFydHMubGhzLHVuc29ydGFibGU9Xy5zb3J0QnkocGFydHMucmhzLGZ1bmN0aW9uKGVudHJ5KXtyZXR1cm4tZW50cnkuaX0pLHZzPVtdLHN1bT0wLHdlaWdodD0wLHZzSW5kZXg9MDtzb3J0YWJsZS5zb3J0KGNvbXBhcmVXaXRoQmlhcyghIWJpYXNSaWdodCkpO3ZzSW5kZXg9Y29uc3VtZVVuc29ydGFibGUodnMsdW5zb3J0YWJsZSx2c0luZGV4KTtfLmZvckVhY2goc29ydGFibGUsZnVuY3Rpb24oZW50cnkpe3ZzSW5kZXgrPWVudHJ5LnZzLmxlbmd0aDt2cy5wdXNoKGVudHJ5LnZzKTsKc3VtKz1lbnRyeS5iYXJ5Y2VudGVyKmVudHJ5LndlaWdodDt3ZWlnaHQrPWVudHJ5LndlaWdodDt2c0luZGV4PWNvbnN1bWVVbnNvcnRhYmxlKHZzLHVuc29ydGFibGUsdnNJbmRleCl9KTt2YXIgcmVzdWx0PXt2czpfLmZsYXR0ZW4odnMsdHJ1ZSl9O2lmKHdlaWdodCl7cmVzdWx0LmJhcnljZW50ZXI9c3VtL3dlaWdodDtyZXN1bHQud2VpZ2h0PXdlaWdodH1yZXR1cm4gcmVzdWx0fWZ1bmN0aW9uIGNvbnN1bWVVbnNvcnRhYmxlKHZzLHVuc29ydGFibGUsaW5kZXgpe3ZhciBsYXN0O3doaWxlKHVuc29ydGFibGUubGVuZ3RoJiYobGFzdD1fLmxhc3QodW5zb3J0YWJsZSkpLmk8PWluZGV4KXt1bnNvcnRhYmxlLnBvcCgpO3ZzLnB1c2gobGFzdC52cyk7aW5kZXgrK31yZXR1cm4gaW5kZXh9ZnVuY3Rpb24gY29tcGFyZVdpdGhCaWFzKGJpYXMpe3JldHVybiBmdW5jdGlvbihlbnRyeVYsZW50cnlXKXtpZihlbnRyeVYuYmFyeWNlbnRlcjxlbnRyeVcuYmFyeWNlbnRlcilyZXR1cm4tMTtlbHNlIGlmKGVudHJ5Vi5iYXJ5Y2VudGVyPgplbnRyeVcuYmFyeWNlbnRlcilyZXR1cm4gMTtyZXR1cm4hYmlhcz9lbnRyeVYuaS1lbnRyeVcuaTplbnRyeVcuaS1lbnRyeVYuaX19fSx7Ii4uL2xvZGFzaCI6MTAsIi4uL3V0aWwiOjI5fV0sMjI6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe3ZhciBfPXJlcXVpcmUoIi4vbG9kYXNoIik7bW9kdWxlLmV4cG9ydHM9cGFyZW50RHVtbXlDaGFpbnM7ZnVuY3Rpb24gcGFyZW50RHVtbXlDaGFpbnMoZyl7dmFyIHBvc3RvcmRlck51bXM9cG9zdG9yZGVyKGcpO18uZm9yRWFjaChnLmdyYXBoKCkuZHVtbXlDaGFpbnMsZnVuY3Rpb24odil7dmFyIG5vZGU9Zy5ub2RlKHYpLGVkZ2VPYmo9bm9kZS5lZGdlT2JqLHBhdGhEYXRhPWZpbmRQYXRoKGcscG9zdG9yZGVyTnVtcyxlZGdlT2JqLnYsZWRnZU9iai53KSxwYXRoPXBhdGhEYXRhLnBhdGgsbGNhPXBhdGhEYXRhLmxjYSxwYXRoSWR4PTAscGF0aFY9cGF0aFtwYXRoSWR4XSxhc2NlbmRpbmc9dHJ1ZTt3aGlsZSh2IT09ZWRnZU9iai53KXtub2RlPQpnLm5vZGUodik7aWYoYXNjZW5kaW5nKXt3aGlsZSgocGF0aFY9cGF0aFtwYXRoSWR4XSkhPT1sY2EmJmcubm9kZShwYXRoVikubWF4UmFuazxub2RlLnJhbmspcGF0aElkeCsrO2lmKHBhdGhWPT09bGNhKWFzY2VuZGluZz1mYWxzZX1pZighYXNjZW5kaW5nKXt3aGlsZShwYXRoSWR4PHBhdGgubGVuZ3RoLTEmJmcubm9kZShwYXRoVj1wYXRoW3BhdGhJZHgrMV0pLm1pblJhbms8PW5vZGUucmFuaylwYXRoSWR4Kys7cGF0aFY9cGF0aFtwYXRoSWR4XX1nLnNldFBhcmVudCh2LHBhdGhWKTt2PWcuc3VjY2Vzc29ycyh2KVswXX19KX1mdW5jdGlvbiBmaW5kUGF0aChnLHBvc3RvcmRlck51bXMsdix3KXt2YXIgdlBhdGg9W10sd1BhdGg9W10sbG93PU1hdGgubWluKHBvc3RvcmRlck51bXNbdl0ubG93LHBvc3RvcmRlck51bXNbd10ubG93KSxsaW09TWF0aC5tYXgocG9zdG9yZGVyTnVtc1t2XS5saW0scG9zdG9yZGVyTnVtc1t3XS5saW0pLHBhcmVudCxsY2E7cGFyZW50PXY7ZG97cGFyZW50PQpnLnBhcmVudChwYXJlbnQpO3ZQYXRoLnB1c2gocGFyZW50KX13aGlsZShwYXJlbnQmJihwb3N0b3JkZXJOdW1zW3BhcmVudF0ubG93Pmxvd3x8bGltPnBvc3RvcmRlck51bXNbcGFyZW50XS5saW0pKTtsY2E9cGFyZW50O3BhcmVudD13O3doaWxlKChwYXJlbnQ9Zy5wYXJlbnQocGFyZW50KSkhPT1sY2Epd1BhdGgucHVzaChwYXJlbnQpO3JldHVybntwYXRoOnZQYXRoLmNvbmNhdCh3UGF0aC5yZXZlcnNlKCkpLGxjYTpsY2F9fWZ1bmN0aW9uIHBvc3RvcmRlcihnKXt2YXIgcmVzdWx0PXt9LGxpbT0wO2Z1bmN0aW9uIGRmcyh2KXt2YXIgbG93PWxpbTtfLmZvckVhY2goZy5jaGlsZHJlbih2KSxkZnMpO3Jlc3VsdFt2XT17bG93OmxvdyxsaW06bGltKyt9fV8uZm9yRWFjaChnLmNoaWxkcmVuKCksZGZzKTtyZXR1cm4gcmVzdWx0fX0seyIuL2xvZGFzaCI6MTB9XSwyMzpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7dmFyIF89cmVxdWlyZSgiLi4vbG9kYXNoIiksR3JhcGg9CnJlcXVpcmUoIi4uL2dyYXBobGliIikuR3JhcGgsdXRpbD1yZXF1aXJlKCIuLi91dGlsIik7bW9kdWxlLmV4cG9ydHM9e3Bvc2l0aW9uWDpwb3NpdGlvblgsZmluZFR5cGUxQ29uZmxpY3RzOmZpbmRUeXBlMUNvbmZsaWN0cyxmaW5kVHlwZTJDb25mbGljdHM6ZmluZFR5cGUyQ29uZmxpY3RzLGFkZENvbmZsaWN0OmFkZENvbmZsaWN0LGhhc0NvbmZsaWN0Omhhc0NvbmZsaWN0LHZlcnRpY2FsQWxpZ25tZW50OnZlcnRpY2FsQWxpZ25tZW50LGhvcml6b250YWxDb21wYWN0aW9uOmhvcml6b250YWxDb21wYWN0aW9uLGFsaWduQ29vcmRpbmF0ZXM6YWxpZ25Db29yZGluYXRlcyxmaW5kU21hbGxlc3RXaWR0aEFsaWdubWVudDpmaW5kU21hbGxlc3RXaWR0aEFsaWdubWVudCxiYWxhbmNlOmJhbGFuY2V9O2Z1bmN0aW9uIGZpbmRUeXBlMUNvbmZsaWN0cyhnLGxheWVyaW5nKXt2YXIgY29uZmxpY3RzPXt9O2Z1bmN0aW9uIHZpc2l0TGF5ZXIocHJldkxheWVyLGxheWVyKXt2YXIgazA9MCxzY2FuUG9zPQowLHByZXZMYXllckxlbmd0aD1wcmV2TGF5ZXIubGVuZ3RoLGxhc3ROb2RlPV8ubGFzdChsYXllcik7Xy5mb3JFYWNoKGxheWVyLGZ1bmN0aW9uKHYsaSl7dmFyIHc9ZmluZE90aGVySW5uZXJTZWdtZW50Tm9kZShnLHYpLGsxPXc/Zy5ub2RlKHcpLm9yZGVyOnByZXZMYXllckxlbmd0aDtpZih3fHx2PT09bGFzdE5vZGUpe18uZm9yRWFjaChsYXllci5zbGljZShzY2FuUG9zLGkrMSksZnVuY3Rpb24oc2Nhbk5vZGUpe18uZm9yRWFjaChnLnByZWRlY2Vzc29ycyhzY2FuTm9kZSksZnVuY3Rpb24odSl7dmFyIHVMYWJlbD1nLm5vZGUodSksdVBvcz11TGFiZWwub3JkZXI7aWYoKHVQb3M8azB8fGsxPHVQb3MpJiYhKHVMYWJlbC5kdW1teSYmZy5ub2RlKHNjYW5Ob2RlKS5kdW1teSkpYWRkQ29uZmxpY3QoY29uZmxpY3RzLHUsc2Nhbk5vZGUpfSl9KTtzY2FuUG9zPWkrMTtrMD1rMX19KTtyZXR1cm4gbGF5ZXJ9Xy5yZWR1Y2UobGF5ZXJpbmcsdmlzaXRMYXllcik7cmV0dXJuIGNvbmZsaWN0c30KZnVuY3Rpb24gZmluZFR5cGUyQ29uZmxpY3RzKGcsbGF5ZXJpbmcpe3ZhciBjb25mbGljdHM9e307ZnVuY3Rpb24gc2Nhbihzb3V0aCxzb3V0aFBvcyxzb3V0aEVuZCxwcmV2Tm9ydGhCb3JkZXIsbmV4dE5vcnRoQm9yZGVyKXt2YXIgdjtfLmZvckVhY2goXy5yYW5nZShzb3V0aFBvcyxzb3V0aEVuZCksZnVuY3Rpb24oaSl7dj1zb3V0aFtpXTtpZihnLm5vZGUodikuZHVtbXkpXy5mb3JFYWNoKGcucHJlZGVjZXNzb3JzKHYpLGZ1bmN0aW9uKHUpe3ZhciB1Tm9kZT1nLm5vZGUodSk7aWYodU5vZGUuZHVtbXkmJih1Tm9kZS5vcmRlcjxwcmV2Tm9ydGhCb3JkZXJ8fHVOb2RlLm9yZGVyPm5leHROb3J0aEJvcmRlcikpYWRkQ29uZmxpY3QoY29uZmxpY3RzLHUsdil9KX0pfWZ1bmN0aW9uIHZpc2l0TGF5ZXIobm9ydGgsc291dGgpe3ZhciBwcmV2Tm9ydGhQb3M9LTEsbmV4dE5vcnRoUG9zLHNvdXRoUG9zPTA7Xy5mb3JFYWNoKHNvdXRoLGZ1bmN0aW9uKHYsc291dGhMb29rYWhlYWQpe2lmKGcubm9kZSh2KS5kdW1teT09PQoiYm9yZGVyIil7dmFyIHByZWRlY2Vzc29ycz1nLnByZWRlY2Vzc29ycyh2KTtpZihwcmVkZWNlc3NvcnMubGVuZ3RoKXtuZXh0Tm9ydGhQb3M9Zy5ub2RlKHByZWRlY2Vzc29yc1swXSkub3JkZXI7c2Nhbihzb3V0aCxzb3V0aFBvcyxzb3V0aExvb2thaGVhZCxwcmV2Tm9ydGhQb3MsbmV4dE5vcnRoUG9zKTtzb3V0aFBvcz1zb3V0aExvb2thaGVhZDtwcmV2Tm9ydGhQb3M9bmV4dE5vcnRoUG9zfX1zY2FuKHNvdXRoLHNvdXRoUG9zLHNvdXRoLmxlbmd0aCxuZXh0Tm9ydGhQb3Msbm9ydGgubGVuZ3RoKX0pO3JldHVybiBzb3V0aH1fLnJlZHVjZShsYXllcmluZyx2aXNpdExheWVyKTtyZXR1cm4gY29uZmxpY3RzfWZ1bmN0aW9uIGZpbmRPdGhlcklubmVyU2VnbWVudE5vZGUoZyx2KXtpZihnLm5vZGUodikuZHVtbXkpcmV0dXJuIF8uZmluZChnLnByZWRlY2Vzc29ycyh2KSxmdW5jdGlvbih1KXtyZXR1cm4gZy5ub2RlKHUpLmR1bW15fSl9ZnVuY3Rpb24gYWRkQ29uZmxpY3QoY29uZmxpY3RzLAp2LHcpe2lmKHY+dyl7dmFyIHRtcD12O3Y9dzt3PXRtcH12YXIgY29uZmxpY3RzVj1jb25mbGljdHNbdl07aWYoIWNvbmZsaWN0c1YpY29uZmxpY3RzW3ZdPWNvbmZsaWN0c1Y9e307Y29uZmxpY3RzVlt3XT10cnVlfWZ1bmN0aW9uIGhhc0NvbmZsaWN0KGNvbmZsaWN0cyx2LHcpe2lmKHY+dyl7dmFyIHRtcD12O3Y9dzt3PXRtcH1yZXR1cm4gXy5oYXMoY29uZmxpY3RzW3ZdLHcpfWZ1bmN0aW9uIHZlcnRpY2FsQWxpZ25tZW50KGcsbGF5ZXJpbmcsY29uZmxpY3RzLG5laWdoYm9yRm4pe3ZhciByb290PXt9LGFsaWduPXt9LHBvcz17fTtfLmZvckVhY2gobGF5ZXJpbmcsZnVuY3Rpb24obGF5ZXIpe18uZm9yRWFjaChsYXllcixmdW5jdGlvbih2LG9yZGVyKXtyb290W3ZdPXY7YWxpZ25bdl09djtwb3Nbdl09b3JkZXJ9KX0pO18uZm9yRWFjaChsYXllcmluZyxmdW5jdGlvbihsYXllcil7dmFyIHByZXZJZHg9LTE7Xy5mb3JFYWNoKGxheWVyLGZ1bmN0aW9uKHYpe3ZhciB3cz1uZWlnaGJvckZuKHYpOwppZih3cy5sZW5ndGgpe3dzPV8uc29ydEJ5KHdzLGZ1bmN0aW9uKHcpe3JldHVybiBwb3Nbd119KTt2YXIgbXA9KHdzLmxlbmd0aC0xKS8yO2Zvcih2YXIgaT1NYXRoLmZsb29yKG1wKSxpbD1NYXRoLmNlaWwobXApO2k8PWlsOysraSl7dmFyIHc9d3NbaV07aWYoYWxpZ25bdl09PT12JiZwcmV2SWR4PHBvc1t3XSYmIWhhc0NvbmZsaWN0KGNvbmZsaWN0cyx2LHcpKXthbGlnblt3XT12O2FsaWduW3ZdPXJvb3Rbdl09cm9vdFt3XTtwcmV2SWR4PXBvc1t3XX19fX0pfSk7cmV0dXJue3Jvb3Q6cm9vdCxhbGlnbjphbGlnbn19ZnVuY3Rpb24gaG9yaXpvbnRhbENvbXBhY3Rpb24oZyxsYXllcmluZyxyb290LGFsaWduLHJldmVyc2VTZXApe3ZhciB4cz17fSxibG9ja0c9YnVpbGRCbG9ja0dyYXBoKGcsbGF5ZXJpbmcscm9vdCxyZXZlcnNlU2VwKSxib3JkZXJUeXBlPXJldmVyc2VTZXA/ImJvcmRlckxlZnQiOiJib3JkZXJSaWdodCI7ZnVuY3Rpb24gaXRlcmF0ZShzZXRYc0Z1bmMsbmV4dE5vZGVzRnVuYyl7dmFyIHN0YWNrPQpibG9ja0cubm9kZXMoKTt2YXIgZWxlbT1zdGFjay5wb3AoKTt2YXIgdmlzaXRlZD17fTt3aGlsZShlbGVtKXtpZih2aXNpdGVkW2VsZW1dKXNldFhzRnVuYyhlbGVtKTtlbHNle3Zpc2l0ZWRbZWxlbV09dHJ1ZTtzdGFjay5wdXNoKGVsZW0pO3N0YWNrPXN0YWNrLmNvbmNhdChuZXh0Tm9kZXNGdW5jKGVsZW0pKX1lbGVtPXN0YWNrLnBvcCgpfX1mdW5jdGlvbiBwYXNzMShlbGVtKXt4c1tlbGVtXT1ibG9ja0cuaW5FZGdlcyhlbGVtKS5yZWR1Y2UoZnVuY3Rpb24oYWNjLGUpe3JldHVybiBNYXRoLm1heChhY2MseHNbZS52XStibG9ja0cuZWRnZShlKSl9LDApfWZ1bmN0aW9uIHBhc3MyKGVsZW0pe3ZhciBtaW49YmxvY2tHLm91dEVkZ2VzKGVsZW0pLnJlZHVjZShmdW5jdGlvbihhY2MsZSl7cmV0dXJuIE1hdGgubWluKGFjYyx4c1tlLnddLWJsb2NrRy5lZGdlKGUpKX0sTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKTt2YXIgbm9kZT1nLm5vZGUoZWxlbSk7aWYobWluIT09TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZJiYKbm9kZS5ib3JkZXJUeXBlIT09Ym9yZGVyVHlwZSl4c1tlbGVtXT1NYXRoLm1heCh4c1tlbGVtXSxtaW4pfWl0ZXJhdGUocGFzczEsXy5iaW5kKGJsb2NrRy5wcmVkZWNlc3NvcnMsYmxvY2tHKSk7aXRlcmF0ZShwYXNzMixfLmJpbmQoYmxvY2tHLnN1Y2Nlc3NvcnMsYmxvY2tHKSk7Xy5mb3JFYWNoKGFsaWduLGZ1bmN0aW9uKHYpe3hzW3ZdPXhzW3Jvb3Rbdl1dfSk7cmV0dXJuIHhzfWZ1bmN0aW9uIGJ1aWxkQmxvY2tHcmFwaChnLGxheWVyaW5nLHJvb3QscmV2ZXJzZVNlcCl7dmFyIGJsb2NrR3JhcGg9bmV3IEdyYXBoLGdyYXBoTGFiZWw9Zy5ncmFwaCgpLHNlcEZuPXNlcChncmFwaExhYmVsLm5vZGVzZXAsZ3JhcGhMYWJlbC5lZGdlc2VwLHJldmVyc2VTZXApO18uZm9yRWFjaChsYXllcmluZyxmdW5jdGlvbihsYXllcil7dmFyIHU7Xy5mb3JFYWNoKGxheWVyLGZ1bmN0aW9uKHYpe3ZhciB2Um9vdD1yb290W3ZdO2Jsb2NrR3JhcGguc2V0Tm9kZSh2Um9vdCk7aWYodSl7dmFyIHVSb290PQpyb290W3VdLHByZXZNYXg9YmxvY2tHcmFwaC5lZGdlKHVSb290LHZSb290KTtibG9ja0dyYXBoLnNldEVkZ2UodVJvb3QsdlJvb3QsTWF0aC5tYXgoc2VwRm4oZyx2LHUpLHByZXZNYXh8fDApKX11PXZ9KX0pO3JldHVybiBibG9ja0dyYXBofWZ1bmN0aW9uIGZpbmRTbWFsbGVzdFdpZHRoQWxpZ25tZW50KGcseHNzKXtyZXR1cm4gXy5taW5CeShfLnZhbHVlcyh4c3MpLGZ1bmN0aW9uKHhzKXt2YXIgbWF4PU51bWJlci5ORUdBVElWRV9JTkZJTklUWTt2YXIgbWluPU51bWJlci5QT1NJVElWRV9JTkZJTklUWTtfLmZvckluKHhzLGZ1bmN0aW9uKHgsdil7dmFyIGhhbGZXaWR0aD13aWR0aChnLHYpLzI7bWF4PU1hdGgubWF4KHgraGFsZldpZHRoLG1heCk7bWluPU1hdGgubWluKHgtaGFsZldpZHRoLG1pbil9KTtyZXR1cm4gbWF4LW1pbn0pfWZ1bmN0aW9uIGFsaWduQ29vcmRpbmF0ZXMoeHNzLGFsaWduVG8pe3ZhciBhbGlnblRvVmFscz1fLnZhbHVlcyhhbGlnblRvKSxhbGlnblRvTWluPQpfLm1pbihhbGlnblRvVmFscyksYWxpZ25Ub01heD1fLm1heChhbGlnblRvVmFscyk7Xy5mb3JFYWNoKFsidSIsImQiXSxmdW5jdGlvbih2ZXJ0KXtfLmZvckVhY2goWyJsIiwiciJdLGZ1bmN0aW9uKGhvcml6KXt2YXIgYWxpZ25tZW50PXZlcnQraG9yaXoseHM9eHNzW2FsaWdubWVudF0sZGVsdGE7aWYoeHM9PT1hbGlnblRvKXJldHVybjt2YXIgeHNWYWxzPV8udmFsdWVzKHhzKTtkZWx0YT1ob3Jpej09PSJsIj9hbGlnblRvTWluLV8ubWluKHhzVmFscyk6YWxpZ25Ub01heC1fLm1heCh4c1ZhbHMpO2lmKGRlbHRhKXhzc1thbGlnbm1lbnRdPV8ubWFwVmFsdWVzKHhzLGZ1bmN0aW9uKHgpe3JldHVybiB4K2RlbHRhfSl9KX0pfWZ1bmN0aW9uIGJhbGFuY2UoeHNzLGFsaWduKXtyZXR1cm4gXy5tYXBWYWx1ZXMoeHNzLnVsLGZ1bmN0aW9uKGlnbm9yZSx2KXtpZihhbGlnbilyZXR1cm4geHNzW2FsaWduLnRvTG93ZXJDYXNlKCldW3ZdO2Vsc2V7dmFyIHhzPV8uc29ydEJ5KF8ubWFwKHhzcywKdikpO3JldHVybih4c1sxXSt4c1syXSkvMn19KX1mdW5jdGlvbiBwb3NpdGlvblgoZyl7dmFyIGxheWVyaW5nPXV0aWwuYnVpbGRMYXllck1hdHJpeChnKSxjb25mbGljdHM9Xy5tZXJnZShmaW5kVHlwZTFDb25mbGljdHMoZyxsYXllcmluZyksZmluZFR5cGUyQ29uZmxpY3RzKGcsbGF5ZXJpbmcpKTt2YXIgeHNzPXt9LGFkanVzdGVkTGF5ZXJpbmc7Xy5mb3JFYWNoKFsidSIsImQiXSxmdW5jdGlvbih2ZXJ0KXthZGp1c3RlZExheWVyaW5nPXZlcnQ9PT0idSI/bGF5ZXJpbmc6Xy52YWx1ZXMobGF5ZXJpbmcpLnJldmVyc2UoKTtfLmZvckVhY2goWyJsIiwiciJdLGZ1bmN0aW9uKGhvcml6KXtpZihob3Jpej09PSJyIilhZGp1c3RlZExheWVyaW5nPV8ubWFwKGFkanVzdGVkTGF5ZXJpbmcsZnVuY3Rpb24oaW5uZXIpe3JldHVybiBfLnZhbHVlcyhpbm5lcikucmV2ZXJzZSgpfSk7dmFyIG5laWdoYm9yRm49Xy5iaW5kKHZlcnQ9PT0idSI/Zy5wcmVkZWNlc3NvcnM6Zy5zdWNjZXNzb3JzLApnKTt2YXIgYWxpZ249dmVydGljYWxBbGlnbm1lbnQoZyxhZGp1c3RlZExheWVyaW5nLGNvbmZsaWN0cyxuZWlnaGJvckZuKTt2YXIgeHM9aG9yaXpvbnRhbENvbXBhY3Rpb24oZyxhZGp1c3RlZExheWVyaW5nLGFsaWduLnJvb3QsYWxpZ24uYWxpZ24saG9yaXo9PT0iciIpO2lmKGhvcml6PT09InIiKXhzPV8ubWFwVmFsdWVzKHhzLGZ1bmN0aW9uKHgpe3JldHVybi14fSk7eHNzW3ZlcnQraG9yaXpdPXhzfSl9KTt2YXIgc21hbGxlc3RXaWR0aD1maW5kU21hbGxlc3RXaWR0aEFsaWdubWVudChnLHhzcyk7YWxpZ25Db29yZGluYXRlcyh4c3Msc21hbGxlc3RXaWR0aCk7cmV0dXJuIGJhbGFuY2UoeHNzLGcuZ3JhcGgoKS5hbGlnbil9ZnVuY3Rpb24gc2VwKG5vZGVTZXAsZWRnZVNlcCxyZXZlcnNlU2VwKXtyZXR1cm4gZnVuY3Rpb24oZyx2LHcpe3ZhciB2TGFiZWw9Zy5ub2RlKHYpLHdMYWJlbD1nLm5vZGUodyksc3VtPTAsZGVsdGE7c3VtKz12TGFiZWwud2lkdGgvMjtpZihfLmhhcyh2TGFiZWwsCiJsYWJlbHBvcyIpKXN3aXRjaCh2TGFiZWwubGFiZWxwb3MudG9Mb3dlckNhc2UoKSl7Y2FzZSAibCI6ZGVsdGE9LXZMYWJlbC53aWR0aC8yO2JyZWFrO2Nhc2UgInIiOmRlbHRhPXZMYWJlbC53aWR0aC8yO2JyZWFrfWlmKGRlbHRhKXN1bSs9cmV2ZXJzZVNlcD9kZWx0YTotZGVsdGE7ZGVsdGE9MDtzdW0rPSh2TGFiZWwuZHVtbXk/ZWRnZVNlcDpub2RlU2VwKS8yO3N1bSs9KHdMYWJlbC5kdW1teT9lZGdlU2VwOm5vZGVTZXApLzI7c3VtKz13TGFiZWwud2lkdGgvMjtpZihfLmhhcyh3TGFiZWwsImxhYmVscG9zIikpc3dpdGNoKHdMYWJlbC5sYWJlbHBvcy50b0xvd2VyQ2FzZSgpKXtjYXNlICJsIjpkZWx0YT13TGFiZWwud2lkdGgvMjticmVhaztjYXNlICJyIjpkZWx0YT0td0xhYmVsLndpZHRoLzI7YnJlYWt9aWYoZGVsdGEpc3VtKz1yZXZlcnNlU2VwP2RlbHRhOi1kZWx0YTtkZWx0YT0wO3JldHVybiBzdW19fWZ1bmN0aW9uIHdpZHRoKGcsdil7cmV0dXJuIGcubm9kZSh2KS53aWR0aH0KfSx7Ii4uL2dyYXBobGliIjo3LCIuLi9sb2Rhc2giOjEwLCIuLi91dGlsIjoyOX1dLDI0OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXt2YXIgXz1yZXF1aXJlKCIuLi9sb2Rhc2giKSx1dGlsPXJlcXVpcmUoIi4uL3V0aWwiKSxwb3NpdGlvblg9cmVxdWlyZSgiLi9iayIpLnBvc2l0aW9uWDttb2R1bGUuZXhwb3J0cz1wb3NpdGlvbjtmdW5jdGlvbiBwb3NpdGlvbihnKXtnPXV0aWwuYXNOb25Db21wb3VuZEdyYXBoKGcpO3Bvc2l0aW9uWShnKTtfLmZvckVhY2gocG9zaXRpb25YKGcpLGZ1bmN0aW9uKHgsdil7Zy5ub2RlKHYpLng9eH0pfWZ1bmN0aW9uIHBvc2l0aW9uWShnKXt2YXIgbGF5ZXJpbmc9dXRpbC5idWlsZExheWVyTWF0cml4KGcpLHJhbmtTZXA9Zy5ncmFwaCgpLnJhbmtzZXAscHJldlk9MDtfLmZvckVhY2gobGF5ZXJpbmcsZnVuY3Rpb24obGF5ZXIpe3ZhciBtYXhIZWlnaHQ9Xy5tYXgoXy5tYXAobGF5ZXIsZnVuY3Rpb24odil7cmV0dXJuIGcubm9kZSh2KS5oZWlnaHR9KSk7Cl8uZm9yRWFjaChsYXllcixmdW5jdGlvbih2KXtnLm5vZGUodikueT1wcmV2WSttYXhIZWlnaHQvMn0pO3ByZXZZKz1tYXhIZWlnaHQrcmFua1NlcH0pfX0seyIuLi9sb2Rhc2giOjEwLCIuLi91dGlsIjoyOSwiLi9iayI6MjN9XSwyNTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7dmFyIF89cmVxdWlyZSgiLi4vbG9kYXNoIiksR3JhcGg9cmVxdWlyZSgiLi4vZ3JhcGhsaWIiKS5HcmFwaCxzbGFjaz1yZXF1aXJlKCIuL3V0aWwiKS5zbGFjazttb2R1bGUuZXhwb3J0cz1mZWFzaWJsZVRyZWU7ZnVuY3Rpb24gZmVhc2libGVUcmVlKGcpe3ZhciB0PW5ldyBHcmFwaCh7ZGlyZWN0ZWQ6ZmFsc2V9KTt2YXIgc3RhcnQ9Zy5ub2RlcygpWzBdLHNpemU9Zy5ub2RlQ291bnQoKTt0LnNldE5vZGUoc3RhcnQse30pO3ZhciBlZGdlLGRlbHRhO3doaWxlKHRpZ2h0VHJlZSh0LGcpPHNpemUpe2VkZ2U9ZmluZE1pblNsYWNrRWRnZSh0LGcpO2RlbHRhPXQuaGFzTm9kZShlZGdlLnYpPwpzbGFjayhnLGVkZ2UpOi1zbGFjayhnLGVkZ2UpO3NoaWZ0UmFua3ModCxnLGRlbHRhKX1yZXR1cm4gdH1mdW5jdGlvbiB0aWdodFRyZWUodCxnKXtmdW5jdGlvbiBkZnModil7Xy5mb3JFYWNoKGcubm9kZUVkZ2VzKHYpLGZ1bmN0aW9uKGUpe3ZhciBlZGdlVj1lLnYsdz12PT09ZWRnZVY/ZS53OmVkZ2VWO2lmKCF0Lmhhc05vZGUodykmJiFzbGFjayhnLGUpKXt0LnNldE5vZGUodyx7fSk7dC5zZXRFZGdlKHYsdyx7fSk7ZGZzKHcpfX0pfV8uZm9yRWFjaCh0Lm5vZGVzKCksZGZzKTtyZXR1cm4gdC5ub2RlQ291bnQoKX1mdW5jdGlvbiBmaW5kTWluU2xhY2tFZGdlKHQsZyl7cmV0dXJuIF8ubWluQnkoZy5lZGdlcygpLGZ1bmN0aW9uKGUpe2lmKHQuaGFzTm9kZShlLnYpIT09dC5oYXNOb2RlKGUudykpcmV0dXJuIHNsYWNrKGcsZSl9KX1mdW5jdGlvbiBzaGlmdFJhbmtzKHQsZyxkZWx0YSl7Xy5mb3JFYWNoKHQubm9kZXMoKSxmdW5jdGlvbih2KXtnLm5vZGUodikucmFuays9ZGVsdGF9KX0KfSx7Ii4uL2dyYXBobGliIjo3LCIuLi9sb2Rhc2giOjEwLCIuL3V0aWwiOjI4fV0sMjY6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe3ZhciByYW5rVXRpbD1yZXF1aXJlKCIuL3V0aWwiKSxsb25nZXN0UGF0aD1yYW5rVXRpbC5sb25nZXN0UGF0aCxmZWFzaWJsZVRyZWU9cmVxdWlyZSgiLi9mZWFzaWJsZS10cmVlIiksbmV0d29ya1NpbXBsZXg9cmVxdWlyZSgiLi9uZXR3b3JrLXNpbXBsZXgiKTttb2R1bGUuZXhwb3J0cz1yYW5rO2Z1bmN0aW9uIHJhbmsoZyl7c3dpdGNoKGcuZ3JhcGgoKS5yYW5rZXIpe2Nhc2UgIm5ldHdvcmstc2ltcGxleCI6bmV0d29ya1NpbXBsZXhSYW5rZXIoZyk7YnJlYWs7Y2FzZSAidGlnaHQtdHJlZSI6dGlnaHRUcmVlUmFua2VyKGcpO2JyZWFrO2Nhc2UgImxvbmdlc3QtcGF0aCI6bG9uZ2VzdFBhdGhSYW5rZXIoZyk7YnJlYWs7ZGVmYXVsdDpuZXR3b3JrU2ltcGxleFJhbmtlcihnKX19dmFyIGxvbmdlc3RQYXRoUmFua2VyPWxvbmdlc3RQYXRoOwpmdW5jdGlvbiB0aWdodFRyZWVSYW5rZXIoZyl7bG9uZ2VzdFBhdGgoZyk7ZmVhc2libGVUcmVlKGcpfWZ1bmN0aW9uIG5ldHdvcmtTaW1wbGV4UmFua2VyKGcpe25ldHdvcmtTaW1wbGV4KGcpfX0seyIuL2ZlYXNpYmxlLXRyZWUiOjI1LCIuL25ldHdvcmstc2ltcGxleCI6MjcsIi4vdXRpbCI6Mjh9XSwyNzpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7dmFyIF89cmVxdWlyZSgiLi4vbG9kYXNoIiksZmVhc2libGVUcmVlPXJlcXVpcmUoIi4vZmVhc2libGUtdHJlZSIpLHNsYWNrPXJlcXVpcmUoIi4vdXRpbCIpLnNsYWNrLGluaXRSYW5rPXJlcXVpcmUoIi4vdXRpbCIpLmxvbmdlc3RQYXRoLHByZW9yZGVyPXJlcXVpcmUoIi4uL2dyYXBobGliIikuYWxnLnByZW9yZGVyLHBvc3RvcmRlcj1yZXF1aXJlKCIuLi9ncmFwaGxpYiIpLmFsZy5wb3N0b3JkZXIsc2ltcGxpZnk9cmVxdWlyZSgiLi4vdXRpbCIpLnNpbXBsaWZ5O21vZHVsZS5leHBvcnRzPW5ldHdvcmtTaW1wbGV4OwpuZXR3b3JrU2ltcGxleC5pbml0TG93TGltVmFsdWVzPWluaXRMb3dMaW1WYWx1ZXM7bmV0d29ya1NpbXBsZXguaW5pdEN1dFZhbHVlcz1pbml0Q3V0VmFsdWVzO25ldHdvcmtTaW1wbGV4LmNhbGNDdXRWYWx1ZT1jYWxjQ3V0VmFsdWU7bmV0d29ya1NpbXBsZXgubGVhdmVFZGdlPWxlYXZlRWRnZTtuZXR3b3JrU2ltcGxleC5lbnRlckVkZ2U9ZW50ZXJFZGdlO25ldHdvcmtTaW1wbGV4LmV4Y2hhbmdlRWRnZXM9ZXhjaGFuZ2VFZGdlcztmdW5jdGlvbiBuZXR3b3JrU2ltcGxleChnKXtnPXNpbXBsaWZ5KGcpO2luaXRSYW5rKGcpO3ZhciB0PWZlYXNpYmxlVHJlZShnKTtpbml0TG93TGltVmFsdWVzKHQpO2luaXRDdXRWYWx1ZXModCxnKTt2YXIgZSxmO3doaWxlKGU9bGVhdmVFZGdlKHQpKXtmPWVudGVyRWRnZSh0LGcsZSk7ZXhjaGFuZ2VFZGdlcyh0LGcsZSxmKX19ZnVuY3Rpb24gaW5pdEN1dFZhbHVlcyh0LGcpe3ZhciB2cz1wb3N0b3JkZXIodCx0Lm5vZGVzKCkpO3ZzPXZzLnNsaWNlKDAsCnZzLmxlbmd0aC0xKTtfLmZvckVhY2godnMsZnVuY3Rpb24odil7YXNzaWduQ3V0VmFsdWUodCxnLHYpfSl9ZnVuY3Rpb24gYXNzaWduQ3V0VmFsdWUodCxnLGNoaWxkKXt2YXIgY2hpbGRMYWI9dC5ub2RlKGNoaWxkKSxwYXJlbnQ9Y2hpbGRMYWIucGFyZW50O3QuZWRnZShjaGlsZCxwYXJlbnQpLmN1dHZhbHVlPWNhbGNDdXRWYWx1ZSh0LGcsY2hpbGQpfWZ1bmN0aW9uIGNhbGNDdXRWYWx1ZSh0LGcsY2hpbGQpe3ZhciBjaGlsZExhYj10Lm5vZGUoY2hpbGQpLHBhcmVudD1jaGlsZExhYi5wYXJlbnQsY2hpbGRJc1RhaWw9dHJ1ZSxncmFwaEVkZ2U9Zy5lZGdlKGNoaWxkLHBhcmVudCksY3V0VmFsdWU9MDtpZighZ3JhcGhFZGdlKXtjaGlsZElzVGFpbD1mYWxzZTtncmFwaEVkZ2U9Zy5lZGdlKHBhcmVudCxjaGlsZCl9Y3V0VmFsdWU9Z3JhcGhFZGdlLndlaWdodDtfLmZvckVhY2goZy5ub2RlRWRnZXMoY2hpbGQpLGZ1bmN0aW9uKGUpe3ZhciBpc091dEVkZ2U9ZS52PT09Y2hpbGQsb3RoZXI9CmlzT3V0RWRnZT9lLnc6ZS52O2lmKG90aGVyIT09cGFyZW50KXt2YXIgcG9pbnRzVG9IZWFkPWlzT3V0RWRnZT09PWNoaWxkSXNUYWlsLG90aGVyV2VpZ2h0PWcuZWRnZShlKS53ZWlnaHQ7Y3V0VmFsdWUrPXBvaW50c1RvSGVhZD9vdGhlcldlaWdodDotb3RoZXJXZWlnaHQ7aWYoaXNUcmVlRWRnZSh0LGNoaWxkLG90aGVyKSl7dmFyIG90aGVyQ3V0VmFsdWU9dC5lZGdlKGNoaWxkLG90aGVyKS5jdXR2YWx1ZTtjdXRWYWx1ZSs9cG9pbnRzVG9IZWFkPy1vdGhlckN1dFZhbHVlOm90aGVyQ3V0VmFsdWV9fX0pO3JldHVybiBjdXRWYWx1ZX1mdW5jdGlvbiBpbml0TG93TGltVmFsdWVzKHRyZWUscm9vdCl7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXJvb3Q9dHJlZS5ub2RlcygpWzBdO2Rmc0Fzc2lnbkxvd0xpbSh0cmVlLHt9LDEscm9vdCl9ZnVuY3Rpb24gZGZzQXNzaWduTG93TGltKHRyZWUsdmlzaXRlZCxuZXh0TGltLHYscGFyZW50KXt2YXIgbG93PW5leHRMaW0sbGFiZWw9dHJlZS5ub2RlKHYpOwp2aXNpdGVkW3ZdPXRydWU7Xy5mb3JFYWNoKHRyZWUubmVpZ2hib3JzKHYpLGZ1bmN0aW9uKHcpe2lmKCFfLmhhcyh2aXNpdGVkLHcpKW5leHRMaW09ZGZzQXNzaWduTG93TGltKHRyZWUsdmlzaXRlZCxuZXh0TGltLHcsdil9KTtsYWJlbC5sb3c9bG93O2xhYmVsLmxpbT1uZXh0TGltKys7aWYocGFyZW50KWxhYmVsLnBhcmVudD1wYXJlbnQ7ZWxzZSBkZWxldGUgbGFiZWwucGFyZW50O3JldHVybiBuZXh0TGltfWZ1bmN0aW9uIGxlYXZlRWRnZSh0cmVlKXtyZXR1cm4gXy5maW5kKHRyZWUuZWRnZXMoKSxmdW5jdGlvbihlKXtyZXR1cm4gdHJlZS5lZGdlKGUpLmN1dHZhbHVlPDB9KX1mdW5jdGlvbiBlbnRlckVkZ2UodCxnLGVkZ2Upe3ZhciB2PWVkZ2Uudix3PWVkZ2UudztpZighZy5oYXNFZGdlKHYsdykpe3Y9ZWRnZS53O3c9ZWRnZS52fXZhciB2TGFiZWw9dC5ub2RlKHYpLHdMYWJlbD10Lm5vZGUodyksdGFpbExhYmVsPXZMYWJlbCxmbGlwPWZhbHNlO2lmKHZMYWJlbC5saW0+d0xhYmVsLmxpbSl7dGFpbExhYmVsPQp3TGFiZWw7ZmxpcD10cnVlfXZhciBjYW5kaWRhdGVzPV8uZmlsdGVyKGcuZWRnZXMoKSxmdW5jdGlvbihlZGdlKXtyZXR1cm4gZmxpcD09PWlzRGVzY2VuZGFudCh0LHQubm9kZShlZGdlLnYpLHRhaWxMYWJlbCkmJmZsaXAhPT1pc0Rlc2NlbmRhbnQodCx0Lm5vZGUoZWRnZS53KSx0YWlsTGFiZWwpfSk7cmV0dXJuIF8ubWluQnkoY2FuZGlkYXRlcyxmdW5jdGlvbihlZGdlKXtyZXR1cm4gc2xhY2soZyxlZGdlKX0pfWZ1bmN0aW9uIGV4Y2hhbmdlRWRnZXModCxnLGUsZil7dmFyIHY9ZS52LHc9ZS53O3QucmVtb3ZlRWRnZSh2LHcpO3Quc2V0RWRnZShmLnYsZi53LHt9KTtpbml0TG93TGltVmFsdWVzKHQpO2luaXRDdXRWYWx1ZXModCxnKTt1cGRhdGVSYW5rcyh0LGcpfWZ1bmN0aW9uIHVwZGF0ZVJhbmtzKHQsZyl7dmFyIHJvb3Q9Xy5maW5kKHQubm9kZXMoKSxmdW5jdGlvbih2KXtyZXR1cm4hZy5ub2RlKHYpLnBhcmVudH0pLHZzPXByZW9yZGVyKHQscm9vdCk7dnM9dnMuc2xpY2UoMSk7Cl8uZm9yRWFjaCh2cyxmdW5jdGlvbih2KXt2YXIgcGFyZW50PXQubm9kZSh2KS5wYXJlbnQsZWRnZT1nLmVkZ2UodixwYXJlbnQpLGZsaXBwZWQ9ZmFsc2U7aWYoIWVkZ2Upe2VkZ2U9Zy5lZGdlKHBhcmVudCx2KTtmbGlwcGVkPXRydWV9Zy5ub2RlKHYpLnJhbms9Zy5ub2RlKHBhcmVudCkucmFuaysoZmxpcHBlZD9lZGdlLm1pbmxlbjotZWRnZS5taW5sZW4pfSl9ZnVuY3Rpb24gaXNUcmVlRWRnZSh0cmVlLHUsdil7cmV0dXJuIHRyZWUuaGFzRWRnZSh1LHYpfWZ1bmN0aW9uIGlzRGVzY2VuZGFudCh0cmVlLHZMYWJlbCxyb290TGFiZWwpe3JldHVybiByb290TGFiZWwubG93PD12TGFiZWwubGltJiZ2TGFiZWwubGltPD1yb290TGFiZWwubGltfX0seyIuLi9ncmFwaGxpYiI6NywiLi4vbG9kYXNoIjoxMCwiLi4vdXRpbCI6MjksIi4vZmVhc2libGUtdHJlZSI6MjUsIi4vdXRpbCI6Mjh9XSwyODpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7dmFyIF89cmVxdWlyZSgiLi4vbG9kYXNoIik7Cm1vZHVsZS5leHBvcnRzPXtsb25nZXN0UGF0aDpsb25nZXN0UGF0aCxzbGFjazpzbGFja307ZnVuY3Rpb24gbG9uZ2VzdFBhdGgoZyl7dmFyIHZpc2l0ZWQ9e307ZnVuY3Rpb24gZGZzKHYpe3ZhciBsYWJlbD1nLm5vZGUodik7aWYoXy5oYXModmlzaXRlZCx2KSlyZXR1cm4gbGFiZWwucmFuazt2aXNpdGVkW3ZdPXRydWU7dmFyIHJhbms9Xy5taW5CeShfLm1hcChnLm91dEVkZ2VzKHYpLGZ1bmN0aW9uKGUpe3JldHVybiBkZnMoZS53KS1nLmVkZ2UoZSkubWlubGVufSkpO2lmKHJhbms9PT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFl8fHJhbms9PT11bmRlZmluZWR8fHJhbms9PT1udWxsKXJhbms9MDtyZXR1cm4gbGFiZWwucmFuaz1yYW5rfV8uZm9yRWFjaChnLnNvdXJjZXMoKSxkZnMpfWZ1bmN0aW9uIHNsYWNrKGcsZSl7cmV0dXJuIGcubm9kZShlLncpLnJhbmstZy5ub2RlKGUudikucmFuay1nLmVkZ2UoZSkubWlubGVufX0seyIuLi9sb2Rhc2giOjEwfV0sMjk6W2Z1bmN0aW9uKHJlcXVpcmUsCm1vZHVsZSxleHBvcnRzKXt2YXIgXz1yZXF1aXJlKCIuL2xvZGFzaCIpLEdyYXBoPXJlcXVpcmUoIi4vZ3JhcGhsaWIiKS5HcmFwaDttb2R1bGUuZXhwb3J0cz17YWRkRHVtbXlOb2RlOmFkZER1bW15Tm9kZSxzaW1wbGlmeTpzaW1wbGlmeSxhc05vbkNvbXBvdW5kR3JhcGg6YXNOb25Db21wb3VuZEdyYXBoLHN1Y2Nlc3NvcldlaWdodHM6c3VjY2Vzc29yV2VpZ2h0cyxwcmVkZWNlc3NvcldlaWdodHM6cHJlZGVjZXNzb3JXZWlnaHRzLGludGVyc2VjdFJlY3Q6aW50ZXJzZWN0UmVjdCxidWlsZExheWVyTWF0cml4OmJ1aWxkTGF5ZXJNYXRyaXgsbm9ybWFsaXplUmFua3M6bm9ybWFsaXplUmFua3MscmVtb3ZlRW1wdHlSYW5rczpyZW1vdmVFbXB0eVJhbmtzLGFkZEJvcmRlck5vZGU6YWRkQm9yZGVyTm9kZSxtYXhSYW5rOm1heFJhbmsscGFydGl0aW9uOnBhcnRpdGlvbix0aW1lOnRpbWUsbm90aW1lOm5vdGltZX07ZnVuY3Rpb24gYWRkRHVtbXlOb2RlKGcsdHlwZSxhdHRycyxuYW1lKXt2YXIgdjsKZG8gdj1fLnVuaXF1ZUlkKG5hbWUpO3doaWxlKGcuaGFzTm9kZSh2KSk7YXR0cnMuZHVtbXk9dHlwZTtnLnNldE5vZGUodixhdHRycyk7cmV0dXJuIHZ9ZnVuY3Rpb24gc2ltcGxpZnkoZyl7dmFyIHNpbXBsaWZpZWQ9KG5ldyBHcmFwaCkuc2V0R3JhcGgoZy5ncmFwaCgpKTtfLmZvckVhY2goZy5ub2RlcygpLGZ1bmN0aW9uKHYpe3NpbXBsaWZpZWQuc2V0Tm9kZSh2LGcubm9kZSh2KSl9KTtfLmZvckVhY2goZy5lZGdlcygpLGZ1bmN0aW9uKGUpe3ZhciBzaW1wbGVMYWJlbD1zaW1wbGlmaWVkLmVkZ2UoZS52LGUudyl8fHt3ZWlnaHQ6MCxtaW5sZW46MX0sbGFiZWw9Zy5lZGdlKGUpO3NpbXBsaWZpZWQuc2V0RWRnZShlLnYsZS53LHt3ZWlnaHQ6c2ltcGxlTGFiZWwud2VpZ2h0K2xhYmVsLndlaWdodCxtaW5sZW46TWF0aC5tYXgoc2ltcGxlTGFiZWwubWlubGVuLGxhYmVsLm1pbmxlbil9KX0pO3JldHVybiBzaW1wbGlmaWVkfWZ1bmN0aW9uIGFzTm9uQ29tcG91bmRHcmFwaChnKXt2YXIgc2ltcGxpZmllZD0KKG5ldyBHcmFwaCh7bXVsdGlncmFwaDpnLmlzTXVsdGlncmFwaCgpfSkpLnNldEdyYXBoKGcuZ3JhcGgoKSk7Xy5mb3JFYWNoKGcubm9kZXMoKSxmdW5jdGlvbih2KXtpZighZy5jaGlsZHJlbih2KS5sZW5ndGgpc2ltcGxpZmllZC5zZXROb2RlKHYsZy5ub2RlKHYpKX0pO18uZm9yRWFjaChnLmVkZ2VzKCksZnVuY3Rpb24oZSl7c2ltcGxpZmllZC5zZXRFZGdlKGUsZy5lZGdlKGUpKX0pO3JldHVybiBzaW1wbGlmaWVkfWZ1bmN0aW9uIHN1Y2Nlc3NvcldlaWdodHMoZyl7dmFyIHdlaWdodE1hcD1fLm1hcChnLm5vZGVzKCksZnVuY3Rpb24odil7dmFyIHN1Y3M9e307Xy5mb3JFYWNoKGcub3V0RWRnZXModiksZnVuY3Rpb24oZSl7c3Vjc1tlLnddPShzdWNzW2Uud118fDApK2cuZWRnZShlKS53ZWlnaHR9KTtyZXR1cm4gc3Vjc30pO3JldHVybiBfLnppcE9iamVjdChnLm5vZGVzKCksd2VpZ2h0TWFwKX1mdW5jdGlvbiBwcmVkZWNlc3NvcldlaWdodHMoZyl7dmFyIHdlaWdodE1hcD1fLm1hcChnLm5vZGVzKCksCmZ1bmN0aW9uKHYpe3ZhciBwcmVkcz17fTtfLmZvckVhY2goZy5pbkVkZ2VzKHYpLGZ1bmN0aW9uKGUpe3ByZWRzW2Uudl09KHByZWRzW2Uudl18fDApK2cuZWRnZShlKS53ZWlnaHR9KTtyZXR1cm4gcHJlZHN9KTtyZXR1cm4gXy56aXBPYmplY3QoZy5ub2RlcygpLHdlaWdodE1hcCl9ZnVuY3Rpb24gaW50ZXJzZWN0UmVjdChyZWN0LHBvaW50KXt2YXIgeD1yZWN0Lng7dmFyIHk9cmVjdC55O3ZhciBkeD1wb2ludC54LXg7dmFyIGR5PXBvaW50LnkteTt2YXIgdz1yZWN0LndpZHRoLzI7dmFyIGg9cmVjdC5oZWlnaHQvMjtpZighZHgmJiFkeSl0aHJvdyBuZXcgRXJyb3IoIk5vdCBwb3NzaWJsZSB0byBmaW5kIGludGVyc2VjdGlvbiBpbnNpZGUgb2YgdGhlIHJlY3RhbmdsZSIpO3ZhciBzeCxzeTtpZihNYXRoLmFicyhkeSkqdz5NYXRoLmFicyhkeCkqaCl7aWYoZHk8MCloPS1oO3N4PWgqZHgvZHk7c3k9aH1lbHNle2lmKGR4PDApdz0tdztzeD13O3N5PXcqZHkvZHh9cmV0dXJue3g6eCsKc3gseTp5K3N5fX1mdW5jdGlvbiBidWlsZExheWVyTWF0cml4KGcpe3ZhciBsYXllcmluZz1fLm1hcChfLnJhbmdlKG1heFJhbmsoZykrMSksZnVuY3Rpb24oKXtyZXR1cm5bXX0pO18uZm9yRWFjaChnLm5vZGVzKCksZnVuY3Rpb24odil7dmFyIG5vZGU9Zy5ub2RlKHYpLHJhbms9bm9kZS5yYW5rO2lmKCFfLmlzVW5kZWZpbmVkKHJhbmspKWxheWVyaW5nW3JhbmtdW25vZGUub3JkZXJdPXZ9KTtyZXR1cm4gbGF5ZXJpbmd9ZnVuY3Rpb24gbm9ybWFsaXplUmFua3MoZyl7dmFyIG1pbj1fLm1pbkJ5KF8ubWFwKGcubm9kZXMoKSxmdW5jdGlvbih2KXtyZXR1cm4gZy5ub2RlKHYpLnJhbmt9KSk7Xy5mb3JFYWNoKGcubm9kZXMoKSxmdW5jdGlvbih2KXt2YXIgbm9kZT1nLm5vZGUodik7aWYoXy5oYXMobm9kZSwicmFuayIpKW5vZGUucmFuay09bWlufSl9ZnVuY3Rpb24gcmVtb3ZlRW1wdHlSYW5rcyhnKXt2YXIgb2Zmc2V0PV8ubWluQnkoXy5tYXAoZy5ub2RlcygpLGZ1bmN0aW9uKHYpe3JldHVybiBnLm5vZGUodikucmFua30pKTsKdmFyIGxheWVycz1bXTtfLmZvckVhY2goZy5ub2RlcygpLGZ1bmN0aW9uKHYpe3ZhciByYW5rPWcubm9kZSh2KS5yYW5rLW9mZnNldDtpZighbGF5ZXJzW3JhbmtdKWxheWVyc1tyYW5rXT1bXTtsYXllcnNbcmFua10ucHVzaCh2KX0pO3ZhciBkZWx0YT0wLG5vZGVSYW5rRmFjdG9yPWcuZ3JhcGgoKS5ub2RlUmFua0ZhY3RvcjtfLmZvckVhY2gobGF5ZXJzLGZ1bmN0aW9uKHZzLGkpe2lmKF8uaXNVbmRlZmluZWQodnMpJiZpJW5vZGVSYW5rRmFjdG9yIT09MCktLWRlbHRhO2Vsc2UgaWYoZGVsdGEpXy5mb3JFYWNoKHZzLGZ1bmN0aW9uKHYpe2cubm9kZSh2KS5yYW5rKz1kZWx0YX0pfSl9ZnVuY3Rpb24gYWRkQm9yZGVyTm9kZShnLHByZWZpeCxyYW5rLG9yZGVyKXt2YXIgbm9kZT17d2lkdGg6MCxoZWlnaHQ6MH07aWYoYXJndW1lbnRzLmxlbmd0aD49NCl7bm9kZS5yYW5rPXJhbms7bm9kZS5vcmRlcj1vcmRlcn1yZXR1cm4gYWRkRHVtbXlOb2RlKGcsImJvcmRlciIsbm9kZSxwcmVmaXgpfQpmdW5jdGlvbiBtYXhSYW5rKGcpe3JldHVybiBfLm1heChfLm1hcChnLm5vZGVzKCksZnVuY3Rpb24odil7dmFyIHJhbms9Zy5ub2RlKHYpLnJhbms7aWYoIV8uaXNVbmRlZmluZWQocmFuaykpcmV0dXJuIHJhbmt9KSl9ZnVuY3Rpb24gcGFydGl0aW9uKGNvbGxlY3Rpb24sZm4pe3ZhciByZXN1bHQ9e2xoczpbXSxyaHM6W119O18uZm9yRWFjaChjb2xsZWN0aW9uLGZ1bmN0aW9uKHZhbHVlKXtpZihmbih2YWx1ZSkpcmVzdWx0Lmxocy5wdXNoKHZhbHVlKTtlbHNlIHJlc3VsdC5yaHMucHVzaCh2YWx1ZSl9KTtyZXR1cm4gcmVzdWx0fWZ1bmN0aW9uIHRpbWUobmFtZSxmbil7dmFyIHN0YXJ0PV8ubm93KCk7dHJ5e3JldHVybiBmbigpfWZpbmFsbHl7Y29uc29sZS5sb2cobmFtZSsiIHRpbWU6ICIrKF8ubm93KCktc3RhcnQpKyJtcyIpfX1mdW5jdGlvbiBub3RpbWUobmFtZSxmbil7cmV0dXJuIGZuKCl9fSx7Ii4vZ3JhcGhsaWIiOjcsIi4vbG9kYXNoIjoxMH1dLDMwOltmdW5jdGlvbihyZXF1aXJlLAptb2R1bGUsZXhwb3J0cyl7bW9kdWxlLmV4cG9ydHM9IjAuOC4yIn0se31dfSx7fSxbMV0pKDEpfSk7PC9zY3JpcHQ+PHNjcmlwdD4vL35+V0VCUEFUSH5+ZXh0ZXJuYWwvY29tX2dvb2dsZV9qYXZhc2NyaXB0X2Nsb3N1cmVfbGlicmFyeS9jbG9zdXJlL2dvb2cvYmFzZS5qcwondXNlIHN0cmljdCc7dmFyIE07ZnVuY3Rpb24gdWEoYSl7dmFyIGM9MDtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gYzxhLmxlbmd0aD97ZG9uZTohMSx2YWx1ZTphW2MrK119Ontkb25lOiEwfX19ZnVuY3Rpb24gUGEoYSl7cmV0dXJue25leHQ6dWEoYSl9fWZ1bmN0aW9uIGpiKGEpe3ZhciBjPSJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuaXRlcmF0b3ImJmFbU3ltYm9sLml0ZXJhdG9yXTtyZXR1cm4gYz9jLmNhbGwoYSk6UGEoYSl9CnZhciBrYj1mdW5jdGlvbihhKXtyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdyYmd2luZG93PT09YT9hOiJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsJiZudWxsIT1nbG9iYWw/Z2xvYmFsOmF9KHRoaXMpLG1iPSJmdW5jdGlvbiI9PXR5cGVvZiBPYmplY3QuZGVmaW5lUHJvcGVydGllcz9PYmplY3QuZGVmaW5lUHJvcGVydHk6ZnVuY3Rpb24oYSxjLGQpe2EhPUFycmF5LnByb3RvdHlwZSYmYSE9T2JqZWN0LnByb3RvdHlwZSYmKGFbY109ZC52YWx1ZSl9O2Z1bmN0aW9uIHNiKGEsYyl7aWYoYyl7dmFyIGQ9a2I7YT1hLnNwbGl0KCIuIik7Zm9yKHZhciBmPTA7ZjxhLmxlbmd0aC0xO2YrKyl7dmFyIGc9YVtmXTtnIGluIGR8fChkW2ddPXt9KTtkPWRbZ119YT1hW2EubGVuZ3RoLTFdO2Y9ZFthXTtjPWMoZik7YyE9ZiYmbnVsbCE9YyYmbWIoZCxhLHtjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6Y30pfX0Kc2IoIlByb21pc2UiLGZ1bmN0aW9uKGEpe2Z1bmN0aW9uIGMobSl7dGhpcy5zdGF0ZV89MDt0aGlzLnJlc3VsdF89dm9pZCAwO3RoaXMub25TZXR0bGVkQ2FsbGJhY2tzXz1bXTt2YXIgcD10aGlzLmNyZWF0ZVJlc29sdmVBbmRSZWplY3RfKCk7dHJ5e20ocC5yZXNvbHZlLHAucmVqZWN0KX1jYXRjaChxKXtwLnJlamVjdChxKX19ZnVuY3Rpb24gZCgpe3RoaXMuYmF0Y2hfPW51bGx9ZnVuY3Rpb24gZihtKXtzd2l0Y2godHlwZW9mIG0pe2Nhc2UgIm9iamVjdCI6cmV0dXJuIG51bGwhPW07Y2FzZSAiZnVuY3Rpb24iOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fWZ1bmN0aW9uIGcobSl7cmV0dXJuIG0gaW5zdGFuY2VvZiBjP206bmV3IGMoZnVuY3Rpb24ocCl7cChtKX0pfWlmKGEpcmV0dXJuIGE7ZC5wcm90b3R5cGUuYXN5bmNFeGVjdXRlPWZ1bmN0aW9uKG0pe2lmKG51bGw9PXRoaXMuYmF0Y2hfKXt0aGlzLmJhdGNoXz1bXTt2YXIgcD10aGlzO3RoaXMuYXN5bmNFeGVjdXRlRnVuY3Rpb24oZnVuY3Rpb24oKXtwLmV4ZWN1dGVCYXRjaF8oKX0pfXRoaXMuYmF0Y2hfLnB1c2gobSl9Owp2YXIgbD1rYi5zZXRUaW1lb3V0O2QucHJvdG90eXBlLmFzeW5jRXhlY3V0ZUZ1bmN0aW9uPWZ1bmN0aW9uKG0pe2wobSwwKX07ZC5wcm90b3R5cGUuZXhlY3V0ZUJhdGNoXz1mdW5jdGlvbigpe2Zvcig7dGhpcy5iYXRjaF8mJnRoaXMuYmF0Y2hfLmxlbmd0aDspe3ZhciBtPXRoaXMuYmF0Y2hfO3RoaXMuYmF0Y2hfPVtdO2Zvcih2YXIgcD0wO3A8bS5sZW5ndGg7KytwKXt2YXIgcT1tW3BdO21bcF09bnVsbDt0cnl7cSgpfWNhdGNoKHIpe3RoaXMuYXN5bmNUaHJvd18ocil9fX10aGlzLmJhdGNoXz1udWxsfTtkLnByb3RvdHlwZS5hc3luY1Rocm93Xz1mdW5jdGlvbihtKXt0aGlzLmFzeW5jRXhlY3V0ZUZ1bmN0aW9uKGZ1bmN0aW9uKCl7dGhyb3cgbTt9KX07Yy5wcm90b3R5cGUuY3JlYXRlUmVzb2x2ZUFuZFJlamVjdF89ZnVuY3Rpb24oKXtmdW5jdGlvbiBtKHIpe3JldHVybiBmdW5jdGlvbih0KXtxfHwocT0hMCxyLmNhbGwocCx0KSl9fXZhciBwPXRoaXMscT0hMTtyZXR1cm57cmVzb2x2ZTptKHRoaXMucmVzb2x2ZVRvXyksCnJlamVjdDptKHRoaXMucmVqZWN0Xyl9fTtjLnByb3RvdHlwZS5yZXNvbHZlVG9fPWZ1bmN0aW9uKG0pe209PT10aGlzP3RoaXMucmVqZWN0XyhuZXcgVHlwZUVycm9yKCJBIFByb21pc2UgY2Fubm90IHJlc29sdmUgdG8gaXRzZWxmIikpOm0gaW5zdGFuY2VvZiBjP3RoaXMuc2V0dGxlU2FtZUFzUHJvbWlzZV8obSk6ZihtKT90aGlzLnJlc29sdmVUb05vblByb21pc2VPYmpfKG0pOnRoaXMuZnVsZmlsbF8obSl9O2MucHJvdG90eXBlLnJlc29sdmVUb05vblByb21pc2VPYmpfPWZ1bmN0aW9uKG0pe3ZhciBwPXZvaWQgMDt0cnl7cD1tLnRoZW59Y2F0Y2gocSl7dGhpcy5yZWplY3RfKHEpO3JldHVybn0iZnVuY3Rpb24iPT10eXBlb2YgcD90aGlzLnNldHRsZVNhbWVBc1RoZW5hYmxlXyhwLG0pOnRoaXMuZnVsZmlsbF8obSl9O2MucHJvdG90eXBlLnJlamVjdF89ZnVuY3Rpb24obSl7dGhpcy5zZXR0bGVfKDIsbSl9O2MucHJvdG90eXBlLmZ1bGZpbGxfPWZ1bmN0aW9uKG0pe3RoaXMuc2V0dGxlXygxLAptKX07Yy5wcm90b3R5cGUuc2V0dGxlXz1mdW5jdGlvbihtLHApe2lmKDAhPXRoaXMuc3RhdGVfKXRocm93IEVycm9yKCJDYW5ub3Qgc2V0dGxlKCIrbSsiLCAiK3ArIik6IFByb21pc2UgYWxyZWFkeSBzZXR0bGVkIGluIHN0YXRlIit0aGlzLnN0YXRlXyk7dGhpcy5zdGF0ZV89bTt0aGlzLnJlc3VsdF89cDt0aGlzLmV4ZWN1dGVPblNldHRsZWRDYWxsYmFja3NfKCl9O2MucHJvdG90eXBlLmV4ZWN1dGVPblNldHRsZWRDYWxsYmFja3NfPWZ1bmN0aW9uKCl7aWYobnVsbCE9dGhpcy5vblNldHRsZWRDYWxsYmFja3NfKXtmb3IodmFyIG09MDttPHRoaXMub25TZXR0bGVkQ2FsbGJhY2tzXy5sZW5ndGg7KyttKWsuYXN5bmNFeGVjdXRlKHRoaXMub25TZXR0bGVkQ2FsbGJhY2tzX1ttXSk7dGhpcy5vblNldHRsZWRDYWxsYmFja3NfPW51bGx9fTt2YXIgaz1uZXcgZDtjLnByb3RvdHlwZS5zZXR0bGVTYW1lQXNQcm9taXNlXz1mdW5jdGlvbihtKXt2YXIgcD10aGlzLmNyZWF0ZVJlc29sdmVBbmRSZWplY3RfKCk7Cm0uY2FsbFdoZW5TZXR0bGVkXyhwLnJlc29sdmUscC5yZWplY3QpfTtjLnByb3RvdHlwZS5zZXR0bGVTYW1lQXNUaGVuYWJsZV89ZnVuY3Rpb24obSxwKXt2YXIgcT10aGlzLmNyZWF0ZVJlc29sdmVBbmRSZWplY3RfKCk7dHJ5e20uY2FsbChwLHEucmVzb2x2ZSxxLnJlamVjdCl9Y2F0Y2gocil7cS5yZWplY3Qocil9fTtjLnByb3RvdHlwZS50aGVuPWZ1bmN0aW9uKG0scCl7ZnVuY3Rpb24gcShBLHkpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBBP2Z1bmN0aW9uKHgpe3RyeXtyKEEoeCkpfWNhdGNoKEMpe3QoQyl9fTp5fXZhciByLHQsdj1uZXcgYyhmdW5jdGlvbihBLHkpe3I9QTt0PXl9KTt0aGlzLmNhbGxXaGVuU2V0dGxlZF8ocShtLHIpLHEocCx0KSk7cmV0dXJuIHZ9O2MucHJvdG90eXBlLmNhdGNoPWZ1bmN0aW9uKG0pe3JldHVybiB0aGlzLnRoZW4odm9pZCAwLG0pfTtjLnByb3RvdHlwZS5jYWxsV2hlblNldHRsZWRfPWZ1bmN0aW9uKG0scCl7ZnVuY3Rpb24gcSgpe3N3aXRjaChyLnN0YXRlXyl7Y2FzZSAxOm0oci5yZXN1bHRfKTsKYnJlYWs7Y2FzZSAyOnAoci5yZXN1bHRfKTticmVhaztkZWZhdWx0OnRocm93IEVycm9yKCJVbmV4cGVjdGVkIHN0YXRlOiAiK3Iuc3RhdGVfKTt9fXZhciByPXRoaXM7bnVsbD09dGhpcy5vblNldHRsZWRDYWxsYmFja3NfP2suYXN5bmNFeGVjdXRlKHEpOnRoaXMub25TZXR0bGVkQ2FsbGJhY2tzXy5wdXNoKHEpfTtjLnJlc29sdmU9ZztjLnJlamVjdD1mdW5jdGlvbihtKXtyZXR1cm4gbmV3IGMoZnVuY3Rpb24ocCxxKXtxKG0pfSl9O2MucmFjZT1mdW5jdGlvbihtKXtyZXR1cm4gbmV3IGMoZnVuY3Rpb24ocCxxKXtmb3IodmFyIHI9amIobSksdD1yLm5leHQoKTshdC5kb25lO3Q9ci5uZXh0KCkpZyh0LnZhbHVlKS5jYWxsV2hlblNldHRsZWRfKHAscSl9KX07Yy5hbGw9ZnVuY3Rpb24obSl7dmFyIHA9amIobSkscT1wLm5leHQoKTtyZXR1cm4gcS5kb25lP2coW10pOm5ldyBjKGZ1bmN0aW9uKHIsdCl7ZnVuY3Rpb24gdih4KXtyZXR1cm4gZnVuY3Rpb24oQyl7QVt4XT1DO3ktLTswPT0KeSYmcihBKX19dmFyIEE9W10seT0wO2RvIEEucHVzaCh2b2lkIDApLHkrKyxnKHEudmFsdWUpLmNhbGxXaGVuU2V0dGxlZF8odihBLmxlbmd0aC0xKSx0KSxxPXAubmV4dCgpO3doaWxlKCFxLmRvbmUpfSl9O3JldHVybiBjfSk7c2IoIlByb21pc2UucHJvdG90eXBlLmZpbmFsbHkiLGZ1bmN0aW9uKGEpe3JldHVybiBhP2E6ZnVuY3Rpb24oYyl7cmV0dXJuIHRoaXMudGhlbihmdW5jdGlvbihkKXtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGMoKSkudGhlbihmdW5jdGlvbigpe3JldHVybiBkfSl9LGZ1bmN0aW9uKGQpe3JldHVybiBQcm9taXNlLnJlc29sdmUoYygpKS50aGVuKGZ1bmN0aW9uKCl7dGhyb3cgZDt9KX0pfX0pOwpmdW5jdGlvbiB3YihhKXtmdW5jdGlvbiBjKGYpe3JldHVybiBhLm5leHQoZil9ZnVuY3Rpb24gZChmKXtyZXR1cm4gYS50aHJvdyhmKX1yZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oZixnKXtmdW5jdGlvbiBsKGspe2suZG9uZT9mKGsudmFsdWUpOlByb21pc2UucmVzb2x2ZShrLnZhbHVlKS50aGVuKGMsZCkudGhlbihsLGcpfWwoYS5uZXh0KCkpfSl9ZnVuY3Rpb24gRGIoYSl7cmV0dXJuIHdiKGEoKSl9ZnVuY3Rpb24gRWIoYSl7cmV0dXJuIHZvaWQgMCE9PWF9ZnVuY3Rpb24gR2IoYSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBhfQpmdW5jdGlvbiBJYihhKXt2YXIgYz10eXBlb2YgYTtpZigib2JqZWN0Ij09YylpZihhKXtpZihhIGluc3RhbmNlb2YgQXJyYXkpcmV0dXJuImFycmF5IjtpZihhIGluc3RhbmNlb2YgT2JqZWN0KXJldHVybiBjO3ZhciBkPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhKTtpZigiW29iamVjdCBXaW5kb3ddIj09ZClyZXR1cm4ib2JqZWN0IjtpZigiW29iamVjdCBBcnJheV0iPT1kfHwibnVtYmVyIj09dHlwZW9mIGEubGVuZ3RoJiYidW5kZWZpbmVkIiE9dHlwZW9mIGEuc3BsaWNlJiYidW5kZWZpbmVkIiE9dHlwZW9mIGEucHJvcGVydHlJc0VudW1lcmFibGUmJiFhLnByb3BlcnR5SXNFbnVtZXJhYmxlKCJzcGxpY2UiKSlyZXR1cm4iYXJyYXkiO2lmKCJbb2JqZWN0IEZ1bmN0aW9uXSI9PWR8fCJ1bmRlZmluZWQiIT10eXBlb2YgYS5jYWxsJiYidW5kZWZpbmVkIiE9dHlwZW9mIGEucHJvcGVydHlJc0VudW1lcmFibGUmJiFhLnByb3BlcnR5SXNFbnVtZXJhYmxlKCJjYWxsIikpcmV0dXJuImZ1bmN0aW9uIn1lbHNlIHJldHVybiJudWxsIjsKZWxzZSBpZigiZnVuY3Rpb24iPT1jJiYidW5kZWZpbmVkIj09dHlwZW9mIGEuY2FsbClyZXR1cm4ib2JqZWN0IjtyZXR1cm4gY31mdW5jdGlvbiBKYihhKXtyZXR1cm4gbnVsbD09PWF9ZnVuY3Rpb24gTmIoYSl7cmV0dXJuImFycmF5Ij09SWIoYSl9ZnVuY3Rpb24gUWIoYSxjKXtmdW5jdGlvbiBkKCl7fWQucHJvdG90eXBlPWMucHJvdG90eXBlO2Euc3VwZXJDbGFzc189Yy5wcm90b3R5cGU7YS5wcm90b3R5cGU9bmV3IGQ7YS5wcm90b3R5cGUuY29uc3RydWN0b3I9YTthLmJhc2U9ZnVuY3Rpb24oZixnLGwpe2Zvcih2YXIgaz1BcnJheShhcmd1bWVudHMubGVuZ3RoLTIpLG09MjttPGFyZ3VtZW50cy5sZW5ndGg7bSsrKWtbbS0yXT1hcmd1bWVudHNbbV07cmV0dXJuIGMucHJvdG90eXBlW2ddLmFwcGx5KGYsayl9fTsKLy9+fldFQlBBVEh+fmV4dGVybmFsL2NvbV9nb29nbGVfamF2YXNjcmlwdF9jbG9zdXJlX2xpYnJhcnkvY2xvc3VyZS9nb29nL3RyYW5zaXRpb25hbGZvcndhcmRkZWNsYXJhdGlvbnMuanMKLy9+fldFQlBBVEh+fmV4dGVybmFsL2NvbV9nb29nbGVfamF2YXNjcmlwdF9jbG9zdXJlX2xpYnJhcnkvY2xvc3VyZS9nb29nL2RlYnVnL2Vycm9yLmpzCmZ1bmN0aW9uIFRiKGEpe2lmKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKUVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsVGIpO2Vsc2V7dmFyIGM9RXJyb3IoKS5zdGFjaztjJiYodGhpcy5zdGFjaz1jKX1hJiYodGhpcy5tZXNzYWdlPVN0cmluZyhhKSk7dGhpcy5yZXBvcnRFcnJvclRvU2VydmVyPSEwfVFiKFRiLEVycm9yKTtUYi5wcm90b3R5cGUubmFtZT0iQ3VzdG9tRXJyb3IiOwovL35+V0VCUEFUSH5+ZXh0ZXJuYWwvY29tX2dvb2dsZV9qYXZhc2NyaXB0X2Nsb3N1cmVfbGlicmFyeS9jbG9zdXJlL2dvb2cvZG9tL25vZGV0eXBlLmpzCi8vfn5XRUJQQVRIfn5leHRlcm5hbC9jb21fZ29vZ2xlX2phdmFzY3JpcHRfY2xvc3VyZV9saWJyYXJ5L2Nsb3N1cmUvZ29vZy9hc3NlcnRzL2Fzc2VydHMuanMKZnVuY3Rpb24gVWIoYSxjKXtUYi5jYWxsKHRoaXMsWGIoYSxjKSk7dGhpcy5tZXNzYWdlUGF0dGVybj1hfVFiKFViLFRiKTtVYi5wcm90b3R5cGUubmFtZT0iQXNzZXJ0aW9uRXJyb3IiO2Z1bmN0aW9uIFliKGEpe3Rocm93IGE7fWZ1bmN0aW9uIFhiKGEsYyl7YT1hLnNwbGl0KCIlcyIpO2Zvcih2YXIgZD0iIixmPWEubGVuZ3RoLTEsZz0wO2c8ZjtnKyspZCs9YVtnXSsoZzxjLmxlbmd0aD9jW2ddOiIlcyIpO3JldHVybiBkK2FbZl19ZnVuY3Rpb24gYmMoYSxjKXtZYihuZXcgVWIoIkZhaWx1cmUiKyhhPyI6ICIrYToiIiksQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpKSl9OwovL35+V0VCUEFUSH5+ZXh0ZXJuYWwvY29tX2dvb2dsZV9qYXZhc2NyaXB0X2Nsb3N1cmVfbGlicmFyeS9jbG9zdXJlL2dvb2cvYXJyYXkvYXJyYXkuanMKdmFyIGRjPUFycmF5LnByb3RvdHlwZS5mb3JFYWNoP2Z1bmN0aW9uKGEsYyl7QXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbChhLGMsdm9pZCAwKX06ZnVuY3Rpb24oYSxjKXtmb3IodmFyIGQ9YS5sZW5ndGgsZj1HYihhKT9hLnNwbGl0KCIiKTphLGc9MDtnPGQ7ZysrKWcgaW4gZiYmYy5jYWxsKHZvaWQgMCxmW2ddLGcsYSl9LGVjPUFycmF5LnByb3RvdHlwZS5tYXA/ZnVuY3Rpb24oYSxjKXtyZXR1cm4gQXJyYXkucHJvdG90eXBlLm1hcC5jYWxsKGEsYyx2b2lkIDApfTpmdW5jdGlvbihhLGMpe2Zvcih2YXIgZD1hLmxlbmd0aCxmPUFycmF5KGQpLGc9R2IoYSk/YS5zcGxpdCgiIik6YSxsPTA7bDxkO2wrKylsIGluIGcmJihmW2xdPWMuY2FsbCh2b2lkIDAsZ1tsXSxsLGEpKTtyZXR1cm4gZn07CmZ1bmN0aW9uIGhjKGEsYyxkKXtyZXR1cm4gMj49YXJndW1lbnRzLmxlbmd0aD9BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhLGMpOkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGEsYyxkKX07Ci8vfn5XRUJQQVRIfn5leHRlcm5hbC9jb21fZ29vZ2xlX2phdmFzY3JpcHRfY2xvc3VyZV9saWJyYXJ5L2Nsb3N1cmUvZ29vZy9jcnlwdC9jcnlwdC5qcwpmdW5jdGlvbiBpYyhhKXtpZig4MTkyPj1hLmxlbmd0aClyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLGEpO2Zvcih2YXIgYz0iIixkPTA7ZDxhLmxlbmd0aDtkKz04MTkyKWMrPVN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxoYyhhLGQsZCs4MTkyKSk7cmV0dXJuIGN9OwovL35+V0VCUEFUSH5+ZXh0ZXJuYWwvY29tX2dvb2dsZV9qYXZhc2NyaXB0X2Nsb3N1cmVfbGlicmFyeS9jbG9zdXJlL2dvb2cvc3RyaW5nL2ludGVybmFsLmpzCmZ1bmN0aW9uIG5jKGEpe3JldHVybi9eW1xzXHhhMF0qJC8udGVzdChhKX07Ci8vfn5XRUJQQVRIfn5leHRlcm5hbC9jb21fZ29vZ2xlX2phdmFzY3JpcHRfY2xvc3VyZV9saWJyYXJ5L2Nsb3N1cmUvZ29vZy9zdHJpbmcvc3RyaW5nLmpzCi8vfn5XRUJQQVRIfn5leHRlcm5hbC9jb21fZ29vZ2xlX2phdmFzY3JpcHRfY2xvc3VyZV9saWJyYXJ5L2Nsb3N1cmUvZ29vZy9sYWJzL3VzZXJhZ2VudC91dGlsLmpzCi8vfn5XRUJQQVRIfn5leHRlcm5hbC9jb21fZ29vZ2xlX2phdmFzY3JpcHRfY2xvc3VyZV9saWJyYXJ5L2Nsb3N1cmUvZ29vZy9vYmplY3Qvb2JqZWN0LmpzCi8vfn5XRUJQQVRIfn5leHRlcm5hbC9jb21fZ29vZ2xlX2phdmFzY3JpcHRfY2xvc3VyZV9saWJyYXJ5L2Nsb3N1cmUvZ29vZy9sYWJzL3VzZXJhZ2VudC9icm93c2VyLmpzCi8vfn5XRUJQQVRIfn5leHRlcm5hbC9jb21fZ29vZ2xlX2phdmFzY3JpcHRfY2xvc3VyZV9saWJyYXJ5L2Nsb3N1cmUvZ29vZy9sYWJzL3VzZXJhZ2VudC9lbmdpbmUuanMKLy9+fldFQlBBVEh+fmV4dGVybmFsL2NvbV9nb29nbGVfamF2YXNjcmlwdF9jbG9zdXJlX2xpYnJhcnkvY2xvc3VyZS9nb29nL2xhYnMvdXNlcmFnZW50L3BsYXRmb3JtLmpzCi8vfn5XRUJQQVRIfn5leHRlcm5hbC9jb21fZ29vZ2xlX2phdmFzY3JpcHRfY2xvc3VyZV9saWJyYXJ5L2Nsb3N1cmUvZ29vZy9yZWZsZWN0L3JlZmxlY3QuanMKLy9+fldFQlBBVEh+fmV4dGVybmFsL2NvbV9nb29nbGVfamF2YXNjcmlwdF9jbG9zdXJlX2xpYnJhcnkvY2xvc3VyZS9nb29nL3VzZXJhZ2VudC91c2VyYWdlbnQuanMKLy9+fldFQlBBVEh+fmV4dGVybmFsL2NvbV9nb29nbGVfamF2YXNjcmlwdF9jbG9zdXJlX2xpYnJhcnkvY2xvc3VyZS9nb29nL3VzZXJhZ2VudC9wcm9kdWN0LmpzCi8vfn5XRUJQQVRIfn5leHRlcm5hbC9jb21fZ29vZ2xlX2phdmFzY3JpcHRfY2xvc3VyZV9saWJyYXJ5L2Nsb3N1cmUvZ29vZy9jcnlwdC9iYXNlNjQuanMKdmFyIG9jPW51bGwscGM9bnVsbCxxYz1udWxsO2Z1bmN0aW9uIHRjKGEsYyl7eWMoKTtjPWM/cWM6b2M7Zm9yKHZhciBkPVtdLGY9MDtmPGEubGVuZ3RoO2YrPTMpe3ZhciBnPWFbZl0sbD1mKzE8YS5sZW5ndGgsaz1sP2FbZisxXTowLG09ZisyPGEubGVuZ3RoLHA9bT9hW2YrMl06MCxxPWc+PjI7Zz0oZyYzKTw8NHxrPj40O2s9KGsmMTUpPDwyfHA+PjY7cCY9NjM7bXx8KHA9NjQsbHx8KGs9NjQpKTtkLnB1c2goY1txXSxjW2ddLGNba10sY1twXSl9cmV0dXJuIGQuam9pbigiIil9ZnVuY3Rpb24gRmMoYSl7dmFyIGM9YS5sZW5ndGgsZD0wOyJceDNkIj09PWFbYy0yXT9kPTI6Ilx4M2QiPT09YVtjLTFdJiYoZD0xKTt2YXIgZj1uZXcgVWludDhBcnJheShNYXRoLmNlaWwoMypjLzQpLWQpLGc9MDtHYyhhLGZ1bmN0aW9uKGwpe2ZbZysrXT1sfSk7cmV0dXJuIGYuc3ViYXJyYXkoMCxnKX0KZnVuY3Rpb24gR2MoYSxjKXtmdW5jdGlvbiBkKHApe2Zvcig7ZjxhLmxlbmd0aDspe3ZhciBxPWEuY2hhckF0KGYrKykscj1wY1txXTtpZihudWxsIT1yKXJldHVybiByO2lmKCFuYyhxKSl0aHJvdyBFcnJvcigiVW5rbm93biBiYXNlNjQgZW5jb2RpbmcgYXQgY2hhcjogIitxKTt9cmV0dXJuIHB9eWMoKTtmb3IodmFyIGY9MDs7KXt2YXIgZz1kKC0xKSxsPWQoMCksaz1kKDY0KSxtPWQoNjQpO2lmKDY0PT09bSYmLTE9PT1nKWJyZWFrO2MoZzw8MnxsPj40KTs2NCE9ayYmKGMobDw8NCYyNDB8az4+MiksNjQhPW0mJmMoazw8NiYxOTJ8bSkpfX0KZnVuY3Rpb24geWMoKXtpZighb2Mpe29jPXt9O3BjPXt9O3FjPXt9O2Zvcih2YXIgYT0wOzY1PmE7YSsrKW9jW2FdPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvXHgzZCIuY2hhckF0KGEpLHBjW29jW2FdXT1hLHFjW2FdPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OS1fLiIuY2hhckF0KGEpLDYyPD1hJiYocGNbIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5LV8uIi5jaGFyQXQoYSldPWEpfX07Ci8vfn5XRUJQQVRIfn5leHRlcm5hbC9jb21fZ29vZ2xlX3Byb3RvYnVmX2pzL2JpbmFyeS9hcml0aC5qcwpmdW5jdGlvbiBIYyhhLGMpe3RoaXMubG89YTt0aGlzLmhpPWN9TT1IYy5wcm90b3R5cGU7TS5jbXA9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuaGk8YS5oaXx8dGhpcy5oaT09YS5oaSYmdGhpcy5sbzxhLmxvPy0xOnRoaXMuaGk9PWEuaGkmJnRoaXMubG89PWEubG8/MDoxfTtNLnJpZ2h0U2hpZnQ9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEhjKCh0aGlzLmxvPj4+MXwodGhpcy5oaSYxKTw8MzEpPj4+MCx0aGlzLmhpPj4+MT4+PjApfTtNLmxlZnRTaGlmdD1mdW5jdGlvbigpe3JldHVybiBuZXcgSGModGhpcy5sbzw8MT4+PjAsKHRoaXMuaGk8PDF8dGhpcy5sbz4+PjMxKT4+PjApfTtNLm1zYj1mdW5jdGlvbigpe3JldHVybiEhKHRoaXMuaGkmMjE0NzQ4MzY0OCl9O00ubHNiPWZ1bmN0aW9uKCl7cmV0dXJuISEodGhpcy5sbyYxKX07TS56ZXJvPWZ1bmN0aW9uKCl7cmV0dXJuIDA9PXRoaXMubG8mJjA9PXRoaXMuaGl9OwpNLmFkZD1mdW5jdGlvbihhKXtyZXR1cm4gbmV3IEhjKCh0aGlzLmxvK2EubG8mNDI5NDk2NzI5NSk+Pj4wPj4+MCwoKHRoaXMuaGkrYS5oaSY0Mjk0OTY3Mjk1KT4+PjApKyg0Mjk0OTY3Mjk2PD10aGlzLmxvK2EubG8/MTowKT4+PjApfTtNLnN1Yj1mdW5jdGlvbihhKXtyZXR1cm4gbmV3IEhjKCh0aGlzLmxvLWEubG8mNDI5NDk2NzI5NSk+Pj4wPj4+MCwoKHRoaXMuaGktYS5oaSY0Mjk0OTY3Mjk1KT4+PjApLSgwPnRoaXMubG8tYS5sbz8xOjApPj4+MCl9O2Z1bmN0aW9uIEpjKGEpe3ZhciBjPWEmNjU1MzUsZD1hPj4+MTY7YT0xMCpjKzY1NTM2KigwKmMmNjU1MzUpKzY1NTM2KigxMCpkJjY1NTM1KTtmb3IoYz0wKmQrKDAqYz4+PjE2KSsoMTAqZD4+PjE2KTs0Mjk0OTY3Mjk2PD1hOylhLT00Mjk0OTY3Mjk2LGMrPTE7cmV0dXJuIG5ldyBIYyhhPj4+MCxjPj4+MCl9Ck0ubXVsPWZ1bmN0aW9uKCl7dmFyIGE9SmModGhpcy5sbyksYz1KYyh0aGlzLmhpKTtjLmhpPWMubG87Yy5sbz0wO3JldHVybiBhLmFkZChjKX07TS5kaXY9ZnVuY3Rpb24oKXtmb3IodmFyIGE9bmV3IEhjKDAsMCksYz1uZXcgSGModGhpcy5sbyx0aGlzLmhpKSxkPW5ldyBIYygxMCwwKSxmPW5ldyBIYygxLDApOyFkLm1zYigpOylkPWQubGVmdFNoaWZ0KCksZj1mLmxlZnRTaGlmdCgpO2Zvcig7IWYuemVybygpOykwPj1kLmNtcChjKSYmKGE9YS5hZGQoZiksYz1jLnN1YihkKSksZD1kLnJpZ2h0U2hpZnQoKSxmPWYucmlnaHRTaGlmdCgpO3JldHVyblthLGNdfTtNLnRvU3RyaW5nPWZ1bmN0aW9uKCl7Zm9yKHZhciBhPSIiLGM9dGhpczshYy56ZXJvKCk7KXtjPWMuZGl2KCk7dmFyIGQ9Y1swXTthPWNbMV0ubG8rYTtjPWR9IiI9PWEmJihhPSIwIik7cmV0dXJuIGF9OwpmdW5jdGlvbiBLYyhhKXtmb3IodmFyIGM9bmV3IEhjKDAsMCksZD1uZXcgSGMoMCwwKSxmPTA7ZjxhLmxlbmd0aDtmKyspe2lmKCIwIj5hW2ZdfHwiOSI8YVtmXSlyZXR1cm4gbnVsbDtkLmxvPXBhcnNlSW50KGFbZl0sMTApO2M9Yy5tdWwoKS5hZGQoZCl9cmV0dXJuIGN9TS5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBuZXcgSGModGhpcy5sbyx0aGlzLmhpKX07ZnVuY3Rpb24gTGMoYSxjKXt0aGlzLmxvPWE7dGhpcy5oaT1jfUxjLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyBMYygodGhpcy5sbythLmxvJjQyOTQ5NjcyOTUpPj4+MD4+PjAsKCh0aGlzLmhpK2EuaGkmNDI5NDk2NzI5NSk+Pj4wKSsoNDI5NDk2NzI5Njw9dGhpcy5sbythLmxvPzE6MCk+Pj4wKX07CkxjLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyBMYygodGhpcy5sby1hLmxvJjQyOTQ5NjcyOTUpPj4+MD4+PjAsKCh0aGlzLmhpLWEuaGkmNDI5NDk2NzI5NSk+Pj4wKS0oMD50aGlzLmxvLWEubG8/MTowKT4+PjApfTtMYy5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IExjKHRoaXMubG8sdGhpcy5oaSl9O0xjLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3ZhciBhPTAhPSh0aGlzLmhpJjIxNDc0ODM2NDgpLGM9bmV3IEhjKHRoaXMubG8sdGhpcy5oaSk7YSYmKGM9KG5ldyBIYygwLDApKS5zdWIoYykpO3JldHVybihhPyItIjoiIikrYy50b1N0cmluZygpfTtmdW5jdGlvbiBNYyhhKXt2YXIgYz0wPGEubGVuZ3RoJiYiLSI9PWFbMF07YyYmKGE9YS5zdWJzdHJpbmcoMSkpO2E9S2MoYSk7aWYobnVsbD09PWEpcmV0dXJuIG51bGw7YyYmKGE9KG5ldyBIYygwLDApKS5zdWIoYSkpO3JldHVybiBuZXcgTGMoYS5sbyxhLmhpKX07Ci8vfn5XRUJQQVRIfn5leHRlcm5hbC9jb21fZ29vZ2xlX3Byb3RvYnVmX2pzL2JpbmFyeS9jb25zdGFudHMuanMKZnVuY3Rpb24gTmMoYSl7c3dpdGNoKGEpe2Nhc2UgNTpjYXNlIDM6Y2FzZSAxMzpjYXNlIDQ6Y2FzZSAxNzpjYXNlIDE4OmNhc2UgODpjYXNlIDE0OmNhc2UgMzE6cmV0dXJuIDA7Y2FzZSAxOmNhc2UgNjpjYXNlIDE2OmNhc2UgMzA6cmV0dXJuIDE7Y2FzZSA5OmNhc2UgMTE6Y2FzZSAxMjpyZXR1cm4gMjtjYXNlIDI6Y2FzZSA3OmNhc2UgMTU6cmV0dXJuIDU7ZGVmYXVsdDpyZXR1cm4tMX19OwovL35+V0VCUEFUSH5+ZXh0ZXJuYWwvY29tX2dvb2dsZV9wcm90b2J1Zl9qcy9iaW5hcnkvdXRpbHMuanMKdmFyIE9jPTAsYmQ9MDtmdW5jdGlvbiBjZChhKXt2YXIgYz1hPj4+MDthPU1hdGguZmxvb3IoKGEtYykvNDI5NDk2NzI5Nik+Pj4wO09jPWM7YmQ9YX1mdW5jdGlvbiBkZChhKXt2YXIgYz0wPmE7YT1NYXRoLmFicyhhKTt2YXIgZD1hPj4+MDthPU1hdGguZmxvb3IoKGEtZCkvNDI5NDk2NzI5Nik7YT4+Pj0wO2MmJihhPX5hPj4+MCxkPSh+ZD4+PjApKzEsNDI5NDk2NzI5NTxkJiYoZD0wLGErKyw0Mjk0OTY3Mjk1PGEmJihhPTApKSk7T2M9ZDtiZD1hfWZ1bmN0aW9uIGVkKGEpe3ZhciBjPTA+YTthPTIqTWF0aC5hYnMoYSk7Y2QoYSk7YT1PYzt2YXIgZD1iZDtjJiYoMD09YT8wPT1kP2Q9YT00Mjk0OTY3Mjk1OihkLS0sYT00Mjk0OTY3Mjk1KTphLS0pO09jPWE7YmQ9ZH0KZnVuY3Rpb24gZmQoYSl7dmFyIGM9MD5hPzE6MDthPWM/LWE6YTtpZigwPT09YSkwPDEvYT9PYz1iZD0wOihiZD0wLE9jPTIxNDc0ODM2NDgpO2Vsc2UgaWYoaXNOYU4oYSkpYmQ9MCxPYz0yMTQ3NDgzNjQ3O2Vsc2UgaWYoMy40MDI4MjM0NjYzODUyODg2RTM4PGEpYmQ9MCxPYz0oYzw8MzF8MjEzOTA5NTA0MCk+Pj4wO2Vsc2UgaWYoMS4xNzU0OTQzNTA4MjIyODc1RS0zOD5hKWE9TWF0aC5yb3VuZChhL01hdGgucG93KDIsLTE0OSkpLGJkPTAsT2M9KGM8PDMxfGEpPj4+MDtlbHNle3ZhciBkPU1hdGguZmxvb3IoTWF0aC5sb2coYSkvTWF0aC5MTjIpO2EqPU1hdGgucG93KDIsLWQpO2E9TWF0aC5yb3VuZCg4Mzg4NjA4KmEpJjgzODg2MDc7YmQ9MDtPYz0oYzw8MzF8ZCsxMjc8PDIzfGEpPj4+MH19CmZ1bmN0aW9uIGdkKGEpe3ZhciBjPTA+YT8xOjA7YT1jPy1hOmE7aWYoMD09PWEpYmQ9MDwxL2E/MDoyMTQ3NDgzNjQ4LE9jPTA7ZWxzZSBpZihpc05hTihhKSliZD0yMTQ3NDgzNjQ3LE9jPTQyOTQ5NjcyOTU7ZWxzZSBpZigxLjc5NzY5MzEzNDg2MjMxNTdFMzA4PGEpYmQ9KGM8PDMxfDIxNDY0MzUwNzIpPj4+MCxPYz0wO2Vsc2UgaWYoMi4yMjUwNzM4NTg1MDcyMDE0RS0zMDg+YSlhLz1NYXRoLnBvdygyLC0xMDc0KSxiZD0oYzw8MzF8YS80Mjk0OTY3Mjk2KT4+PjAsT2M9YT4+PjA7ZWxzZXt2YXIgZD1NYXRoLmZsb29yKE1hdGgubG9nKGEpL01hdGguTE4yKTsxMDI0PT1kJiYoZD0xMDIzKTthKj1NYXRoLnBvdygyLC1kKTtiZD0oYzw8MzF8ZCsxMDIzPDwyMHwxMDQ4NTc2KmEmMTA0ODU3NSk+Pj4wO09jPTQ1MDM1OTk2MjczNzA0OTYqYT4+PjB9fQpmdW5jdGlvbiBxZChhKXt2YXIgYz1hLmNoYXJDb2RlQXQoNCksZD1hLmNoYXJDb2RlQXQoNSksZj1hLmNoYXJDb2RlQXQoNiksZz1hLmNoYXJDb2RlQXQoNyk7T2M9YS5jaGFyQ29kZUF0KDApKyhhLmNoYXJDb2RlQXQoMSk8PDgpKyhhLmNoYXJDb2RlQXQoMik8PDE2KSsoYS5jaGFyQ29kZUF0KDMpPDwyNCk+Pj4wO2JkPWMrKGQ8PDgpKyhmPDwxNikrKGc8PDI0KT4+PjB9ZnVuY3Rpb24gcmQoYSxjKXtyZXR1cm4gNDI5NDk2NzI5NipjK2F9ZnVuY3Rpb24gc2QoYSxjKXt2YXIgZD1jJjIxNDc0ODM2NDg7ZCYmKGE9fmErMT4+PjAsYz1+Yz4+PjAsMD09YSYmKGM9YysxPj4+MCkpO2E9cmQoYSxjKTtyZXR1cm4gZD8tYTphfWZ1bmN0aW9uIERkKGEsYyl7dmFyIGQ9YSYxO2E9KGE+Pj4xfGM8PDMxKT4+PjA7Yz4+Pj0xO2QmJihhPWErMT4+PjAsMD09YSYmKGM9YysxPj4+MCkpO2E9cmQoYSxjKTtyZXR1cm4gZD8tYTphfQpmdW5jdGlvbiBFZChhKXt2YXIgYz0yKihhPj4zMSkrMSxkPWE+Pj4yMyYyNTU7YSY9ODM4ODYwNztyZXR1cm4gMjU1PT1kP2E/TmFOOkluZmluaXR5KmM6MD09ZD9jKk1hdGgucG93KDIsLTE0OSkqYTpjKk1hdGgucG93KDIsZC0xNTApKihhK01hdGgucG93KDIsMjMpKX1mdW5jdGlvbiBGZChhLGMpe3ZhciBkPTIqKGM+PjMxKSsxLGY9Yz4+PjIwJjIwNDc7YT00Mjk0OTY3Mjk2KihjJjEwNDg1NzUpK2E7cmV0dXJuIDIwNDc9PWY/YT9OYU46SW5maW5pdHkqZDowPT1mP2QqTWF0aC5wb3coMiwtMTA3NCkqYTpkKk1hdGgucG93KDIsZi0xMDc1KSooYSs0NTAzNTk5NjI3MzcwNDk2KX1mdW5jdGlvbiBHZChhLGMpe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGE+Pj4wJjI1NSxhPj4+OCYyNTUsYT4+PjE2JjI1NSxhPj4+MjQmMjU1LGM+Pj4wJjI1NSxjPj4+OCYyNTUsYz4+PjE2JjI1NSxjPj4+MjQmMjU1KX12YXIgSGQ9IjAxMjM0NTY3ODlhYmNkZWYiLnNwbGl0KCIiKTsKZnVuY3Rpb24gSWQoYSxjKXtmdW5jdGlvbiBkKG0pe2Zvcih2YXIgcD0xRTcscT0wOzc+cTtxKyspe3AvPTEwO3ZhciByPW0vcCUxMD4+PjA7aWYoMCE9cnx8bClsPSEwLGsrPWdbcl19fWlmKDIwOTcxNTE+PWMpcmV0dXJuIiIrKDQyOTQ5NjcyOTYqYythKTt2YXIgZj0oYT4+PjI0fGM8PDgpPj4+MCYxNjc3NzIxNTtjPWM+PjE2JjY1NTM1O2E9KGEmMTY3NzcyMTUpKzY3NzcyMTYqZis2NzEwNjU2KmM7Zis9ODE0NzQ5NypjO2MqPTI7MUU3PD1hJiYoZis9TWF0aC5mbG9vcihhLzFFNyksYSU9MUU3KTsxRTc8PWYmJihjKz1NYXRoLmZsb29yKGYvMUU3KSxmJT0xRTcpO3ZhciBnPUhkLGw9ITEsaz0iIjsoY3x8bCkmJmQoYyk7KGZ8fGwpJiZkKGYpOyhhfHxsKSYmZChhKTtyZXR1cm4ga31mdW5jdGlvbiBKZChhLGMpe3ZhciBkPWMmMjE0NzQ4MzY0ODtkJiYoYT1+YSsxPj4+MCxjPX5jKygwPT1hPzE6MCk+Pj4wKTthPUlkKGEsYyk7cmV0dXJuIGQ/Ii0iK2E6YX0KZnVuY3Rpb24gS2QoYSl7ZnVuY3Rpb24gYyhrLG0pe2Zvcih2YXIgcD0wOzg+cCYmKDEhPT1rfHwwPG0pO3ArKyltPWsqZ1twXSttLGdbcF09bSYyNTUsbT4+Pj04fWZ1bmN0aW9uIGQoKXtmb3IodmFyIGs9MDs4Pms7aysrKWdba109fmdba10mMjU1fXZhciBmPSExOyItIj09PWFbMF0mJihmPSEwLGE9YS5zbGljZSgxKSk7Zm9yKHZhciBnPVswLDAsMCwwLDAsMCwwLDBdLGw9MDtsPGEubGVuZ3RoO2wrKyljKDEwLEhkLmluZGV4T2YoYVtsXSkpO2YmJihkKCksYygxLDEpKTtyZXR1cm4gaWMoZyl9CmZ1bmN0aW9uIExkKGEpe2lmKGEuY29uc3RydWN0b3I9PT1VaW50OEFycmF5KXJldHVybiBhO2lmKGEuY29uc3RydWN0b3I9PT1BcnJheUJ1ZmZlcilyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoYSk7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBCdWZmZXImJmEuY29uc3RydWN0b3I9PT1CdWZmZXIpcmV0dXJuIG5ldyBVaW50OEFycmF5KGEpO2lmKGEuY29uc3RydWN0b3I9PT1BcnJheSlyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoYSk7aWYoYS5jb25zdHJ1Y3Rvcj09PVN0cmluZylyZXR1cm4gRmMoYSk7YmMoIlR5cGUgbm90IGNvbnZlcnRpYmxlIHRvIFVpbnQ4QXJyYXkuIik7cmV0dXJuIG5ldyBVaW50OEFycmF5KDApfTsKLy9+fldFQlBBVEh+fmV4dGVybmFsL2NvbV9nb29nbGVfcHJvdG9idWZfanMvYmluYXJ5L2RlY29kZXIuanMKZnVuY3Rpb24gTWQoYSxjLGQpe3RoaXMuYnl0ZXNfPW51bGw7dGhpcy50ZW1wSGlnaF89dGhpcy50ZW1wTG93Xz10aGlzLmN1cnNvcl89dGhpcy5lbmRfPXRoaXMuc3RhcnRfPTA7dGhpcy5lcnJvcl89ITE7YSYmdGhpcy5zZXRCbG9jayhhLGMsZCl9dmFyIFpkPVtdO2Z1bmN0aW9uICRkKGEsYyxkKXtpZihaZC5sZW5ndGgpe3ZhciBmPVpkLnBvcCgpO2EmJmYuc2V0QmxvY2soYSxjLGQpO3JldHVybiBmfXJldHVybiBuZXcgTWQoYSxjLGQpfU09TWQucHJvdG90eXBlO00uZnJlZT1mdW5jdGlvbigpe3RoaXMuY2xlYXIoKTsxMDA+WmQubGVuZ3RoJiZaZC5wdXNoKHRoaXMpfTtNLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuICRkKHRoaXMuYnl0ZXNfLHRoaXMuc3RhcnRfLHRoaXMuZW5kXy10aGlzLnN0YXJ0Xyl9O00uY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLmJ5dGVzXz1udWxsO3RoaXMuY3Vyc29yXz10aGlzLmVuZF89dGhpcy5zdGFydF89MDt0aGlzLmVycm9yXz0hMX07Ck0uZ2V0QnVmZmVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYnl0ZXNffTtNLnNldEJsb2NrPWZ1bmN0aW9uKGEsYyxkKXt0aGlzLmJ5dGVzXz1MZChhKTt0aGlzLnN0YXJ0Xz1FYihjKT9jOjA7dGhpcy5lbmRfPUViKGQpP3RoaXMuc3RhcnRfK2Q6dGhpcy5ieXRlc18ubGVuZ3RoO3RoaXMuY3Vyc29yXz10aGlzLnN0YXJ0X307TS5nZXRFbmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbmRffTtNLnNldEVuZD1mdW5jdGlvbihhKXt0aGlzLmVuZF89YX07TS5yZXNldD1mdW5jdGlvbigpe3RoaXMuY3Vyc29yXz10aGlzLnN0YXJ0X307TS5nZXRDdXJzb3I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJzb3JffTtNLnNldEN1cnNvcj1mdW5jdGlvbihhKXt0aGlzLmN1cnNvcl89YX07TS5hZHZhbmNlPWZ1bmN0aW9uKGEpe3RoaXMuY3Vyc29yXys9YX07TS5hdEVuZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnNvcl89PXRoaXMuZW5kX307Ck0ucGFzdEVuZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnNvcl8+dGhpcy5lbmRffTtNLmdldEVycm9yPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXJyb3JffHwwPnRoaXMuY3Vyc29yX3x8dGhpcy5jdXJzb3JfPnRoaXMuZW5kX307Ck0ucmVhZFNwbGl0VmFyaW50NjRfPWZ1bmN0aW9uKCl7Zm9yKHZhciBhLGM9MCxkLGY9MDs0PmY7ZisrKWlmKGE9dGhpcy5ieXRlc19bdGhpcy5jdXJzb3JfKytdLGN8PShhJjEyNyk8PDcqZiwxMjg+YSl7dGhpcy50ZW1wTG93Xz1jPj4+MDt0aGlzLnRlbXBIaWdoXz0wO3JldHVybn1hPXRoaXMuYnl0ZXNfW3RoaXMuY3Vyc29yXysrXTtjfD0oYSYxMjcpPDwyODtkPTB8KGEmMTI3KT4+NDtpZigxMjg+YSl0aGlzLnRlbXBMb3dfPWM+Pj4wLHRoaXMudGVtcEhpZ2hfPWQ+Pj4wO2Vsc2V7Zm9yKGY9MDs1PmY7ZisrKWlmKGE9dGhpcy5ieXRlc19bdGhpcy5jdXJzb3JfKytdLGR8PShhJjEyNyk8PDcqZiszLDEyOD5hKXt0aGlzLnRlbXBMb3dfPWM+Pj4wO3RoaXMudGVtcEhpZ2hfPWQ+Pj4wO3JldHVybn1iYygiRmFpbGVkIHRvIHJlYWQgdmFyaW50LCBlbmNvZGluZyBpcyBpbnZhbGlkLiIpO3RoaXMuZXJyb3JfPSEwfX07Ck0uc2tpcFZhcmludD1mdW5jdGlvbigpe2Zvcig7dGhpcy5ieXRlc19bdGhpcy5jdXJzb3JfXSYxMjg7KXRoaXMuY3Vyc29yXysrO3RoaXMuY3Vyc29yXysrfTtNLnVuc2tpcFZhcmludD1mdW5jdGlvbihhKXtmb3IoOzEyODxhOyl0aGlzLmN1cnNvcl8tLSxhPj4+PTc7dGhpcy5jdXJzb3JfLS19OwpNLnJlYWRVbnNpZ25lZFZhcmludDMyPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5ieXRlc187dmFyIGM9YVt0aGlzLmN1cnNvcl8rMF07dmFyIGQ9YyYxMjc7aWYoMTI4PmMpcmV0dXJuIHRoaXMuY3Vyc29yXys9MSxkO2M9YVt0aGlzLmN1cnNvcl8rMV07ZHw9KGMmMTI3KTw8NztpZigxMjg+YylyZXR1cm4gdGhpcy5jdXJzb3JfKz0yLGQ7Yz1hW3RoaXMuY3Vyc29yXysyXTtkfD0oYyYxMjcpPDwxNDtpZigxMjg+YylyZXR1cm4gdGhpcy5jdXJzb3JfKz0zLGQ7Yz1hW3RoaXMuY3Vyc29yXyszXTtkfD0oYyYxMjcpPDwyMTtpZigxMjg+YylyZXR1cm4gdGhpcy5jdXJzb3JfKz00LGQ7Yz1hW3RoaXMuY3Vyc29yXys0XTtkfD0oYyYxNSk8PDI4O2lmKDEyOD5jKXJldHVybiB0aGlzLmN1cnNvcl8rPTUsZD4+PjA7dGhpcy5jdXJzb3JfKz01OzEyODw9YVt0aGlzLmN1cnNvcl8rK10mJjEyODw9YVt0aGlzLmN1cnNvcl8rK10mJjEyODw9YVt0aGlzLmN1cnNvcl8rK10mJjEyODw9YVt0aGlzLmN1cnNvcl8rK10mJgp0aGlzLmN1cnNvcl8rKztyZXR1cm4gZH07TS5yZWFkU2lnbmVkVmFyaW50MzI9TWQucHJvdG90eXBlLnJlYWRVbnNpZ25lZFZhcmludDMyO00ucmVhZFVuc2lnbmVkVmFyaW50MzJTdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWFkVW5zaWduZWRWYXJpbnQzMigpLnRvU3RyaW5nKCl9O00ucmVhZFNpZ25lZFZhcmludDMyU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhZFNpZ25lZFZhcmludDMyKCkudG9TdHJpbmcoKX07TS5yZWFkWmlnemFnVmFyaW50MzI9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLnJlYWRVbnNpZ25lZFZhcmludDMyKCk7cmV0dXJuIGE+Pj4xXi0oYSYxKX07TS5yZWFkVW5zaWduZWRWYXJpbnQ2ND1mdW5jdGlvbigpe3RoaXMucmVhZFNwbGl0VmFyaW50NjRfKCk7cmV0dXJuIHJkKHRoaXMudGVtcExvd18sdGhpcy50ZW1wSGlnaF8pfTsKTS5yZWFkVW5zaWduZWRWYXJpbnQ2NFN0cmluZz1mdW5jdGlvbigpe3RoaXMucmVhZFNwbGl0VmFyaW50NjRfKCk7cmV0dXJuIElkKHRoaXMudGVtcExvd18sdGhpcy50ZW1wSGlnaF8pfTtNLnJlYWRTaWduZWRWYXJpbnQ2ND1mdW5jdGlvbigpe3RoaXMucmVhZFNwbGl0VmFyaW50NjRfKCk7cmV0dXJuIHNkKHRoaXMudGVtcExvd18sdGhpcy50ZW1wSGlnaF8pfTtNLnJlYWRTaWduZWRWYXJpbnQ2NFN0cmluZz1mdW5jdGlvbigpe3RoaXMucmVhZFNwbGl0VmFyaW50NjRfKCk7cmV0dXJuIEpkKHRoaXMudGVtcExvd18sdGhpcy50ZW1wSGlnaF8pfTtNLnJlYWRaaWd6YWdWYXJpbnQ2ND1mdW5jdGlvbigpe3RoaXMucmVhZFNwbGl0VmFyaW50NjRfKCk7cmV0dXJuIERkKHRoaXMudGVtcExvd18sdGhpcy50ZW1wSGlnaF8pfTtNLnJlYWRaaWd6YWdWYXJpbnQ2NFN0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlYWRaaWd6YWdWYXJpbnQ2NCgpLnRvU3RyaW5nKCl9OwpNLnJlYWRVaW50OD1mdW5jdGlvbigpe3ZhciBhPXRoaXMuYnl0ZXNfW3RoaXMuY3Vyc29yXyswXTt0aGlzLmN1cnNvcl8rPTE7cmV0dXJuIGF9O00ucmVhZFVpbnQxNj1mdW5jdGlvbigpe3ZhciBhPXRoaXMuYnl0ZXNfW3RoaXMuY3Vyc29yXyswXSxjPXRoaXMuYnl0ZXNfW3RoaXMuY3Vyc29yXysxXTt0aGlzLmN1cnNvcl8rPTI7cmV0dXJuIGE8PDB8Yzw8OH07TS5yZWFkVWludDMyPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5ieXRlc19bdGhpcy5jdXJzb3JfKzBdLGM9dGhpcy5ieXRlc19bdGhpcy5jdXJzb3JfKzFdLGQ9dGhpcy5ieXRlc19bdGhpcy5jdXJzb3JfKzJdLGY9dGhpcy5ieXRlc19bdGhpcy5jdXJzb3JfKzNdO3RoaXMuY3Vyc29yXys9NDtyZXR1cm4oYTw8MHxjPDw4fGQ8PDE2fGY8PDI0KT4+PjB9O00ucmVhZFVpbnQ2ND1mdW5jdGlvbigpe3ZhciBhPXRoaXMucmVhZFVpbnQzMigpLGM9dGhpcy5yZWFkVWludDMyKCk7cmV0dXJuIHJkKGEsYyl9OwpNLnJlYWRVaW50NjRTdHJpbmc9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLnJlYWRVaW50MzIoKSxjPXRoaXMucmVhZFVpbnQzMigpO3JldHVybiBJZChhLGMpfTtNLnJlYWRJbnQ4PWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5ieXRlc19bdGhpcy5jdXJzb3JfKzBdO3RoaXMuY3Vyc29yXys9MTtyZXR1cm4gYTw8MjQ+PjI0fTtNLnJlYWRJbnQxNj1mdW5jdGlvbigpe3ZhciBhPXRoaXMuYnl0ZXNfW3RoaXMuY3Vyc29yXyswXSxjPXRoaXMuYnl0ZXNfW3RoaXMuY3Vyc29yXysxXTt0aGlzLmN1cnNvcl8rPTI7cmV0dXJuKGE8PDB8Yzw8OCk8PDE2Pj4xNn07TS5yZWFkSW50MzI9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmJ5dGVzX1t0aGlzLmN1cnNvcl8rMF0sYz10aGlzLmJ5dGVzX1t0aGlzLmN1cnNvcl8rMV0sZD10aGlzLmJ5dGVzX1t0aGlzLmN1cnNvcl8rMl0sZj10aGlzLmJ5dGVzX1t0aGlzLmN1cnNvcl8rM107dGhpcy5jdXJzb3JfKz00O3JldHVybiBhPDwwfGM8PDh8ZDw8MTZ8Zjw8MjR9OwpNLnJlYWRJbnQ2ND1mdW5jdGlvbigpe3ZhciBhPXRoaXMucmVhZFVpbnQzMigpLGM9dGhpcy5yZWFkVWludDMyKCk7cmV0dXJuIHNkKGEsYyl9O00ucmVhZEludDY0U3RyaW5nPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5yZWFkVWludDMyKCksYz10aGlzLnJlYWRVaW50MzIoKTtyZXR1cm4gSmQoYSxjKX07TS5yZWFkRmxvYXQ9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLnJlYWRVaW50MzIoKTtyZXR1cm4gRWQoYSl9O00ucmVhZERvdWJsZT1mdW5jdGlvbigpe3ZhciBhPXRoaXMucmVhZFVpbnQzMigpLGM9dGhpcy5yZWFkVWludDMyKCk7cmV0dXJuIEZkKGEsYyl9O00ucmVhZEJvb2w9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuYnl0ZXNfW3RoaXMuY3Vyc29yXysrXX07TS5yZWFkRW51bT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlYWRTaWduZWRWYXJpbnQzMigpfTsKTS5yZWFkU3RyaW5nPWZ1bmN0aW9uKGEpe3ZhciBjPXRoaXMuYnl0ZXNfLGQ9dGhpcy5jdXJzb3JfO2E9ZCthO2Zvcih2YXIgZj1bXSxnPSIiO2Q8YTspe3ZhciBsPWNbZCsrXTtpZigxMjg+bClmLnB1c2gobCk7ZWxzZSBpZigxOTI+bCljb250aW51ZTtlbHNlIGlmKDIyND5sKXt2YXIgaz1jW2QrK107Zi5wdXNoKChsJjMxKTw8NnxrJjYzKX1lbHNlIGlmKDI0MD5sKXtrPWNbZCsrXTt2YXIgbT1jW2QrK107Zi5wdXNoKChsJjE1KTw8MTJ8KGsmNjMpPDw2fG0mNjMpfWVsc2UgaWYoMjQ4Pmwpe2s9Y1tkKytdO209Y1tkKytdO3ZhciBwPWNbZCsrXTtsPShsJjcpPDwxOHwoayY2Myk8PDEyfChtJjYzKTw8NnxwJjYzO2wtPTY1NTM2O2YucHVzaCgobD4+MTAmMTAyMykrNTUyOTYsKGwmMTAyMykrNTYzMjApfTgxOTI8PWYubGVuZ3RoJiYoZys9U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLGYpLGYubGVuZ3RoPTApfWcrPWljKGYpO3RoaXMuY3Vyc29yXz1kO3JldHVybiBnfTsKTS5yZWFkU3RyaW5nV2l0aExlbmd0aD1mdW5jdGlvbigpe3ZhciBhPXRoaXMucmVhZFVuc2lnbmVkVmFyaW50MzIoKTtyZXR1cm4gdGhpcy5yZWFkU3RyaW5nKGEpfTtNLnJlYWRCeXRlcz1mdW5jdGlvbihhKXtpZigwPmF8fHRoaXMuY3Vyc29yXythPnRoaXMuYnl0ZXNfLmxlbmd0aClyZXR1cm4gdGhpcy5lcnJvcl89ITAsYmMoIkludmFsaWQgYnl0ZSBsZW5ndGghIiksbmV3IFVpbnQ4QXJyYXkoMCk7dmFyIGM9dGhpcy5ieXRlc18uc3ViYXJyYXkodGhpcy5jdXJzb3JfLHRoaXMuY3Vyc29yXythKTt0aGlzLmN1cnNvcl8rPWE7cmV0dXJuIGN9O00ucmVhZFZhcmludEhhc2g2ND1mdW5jdGlvbigpe3RoaXMucmVhZFNwbGl0VmFyaW50NjRfKCk7cmV0dXJuIEdkKHRoaXMudGVtcExvd18sdGhpcy50ZW1wSGlnaF8pfTsKTS5yZWFkRml4ZWRIYXNoNjQ9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmJ5dGVzXyxjPXRoaXMuY3Vyc29yXyxkPWFbYyswXSxmPWFbYysxXSxnPWFbYysyXSxsPWFbYyszXSxrPWFbYys0XSxtPWFbYys1XSxwPWFbYys2XTthPWFbYys3XTt0aGlzLmN1cnNvcl8rPTg7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoZCxmLGcsbCxrLG0scCxhKX07Ci8vfn5XRUJQQVRIfn5leHRlcm5hbC9jb21fZ29vZ2xlX3Byb3RvYnVmX2pzL2JpbmFyeS9lbmNvZGVyLmpzCmZ1bmN0aW9uIGFlKCl7dGhpcy5idWZmZXJfPVtdfU09YWUucHJvdG90eXBlO00ubGVuZ3RoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYnVmZmVyXy5sZW5ndGh9O00uZW5kPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5idWZmZXJfO3RoaXMuYnVmZmVyXz1bXTtyZXR1cm4gYX07TS53cml0ZVNwbGl0VmFyaW50NjQ9ZnVuY3Rpb24oYSxjKXtmb3IoOzA8Y3x8MTI3PGE7KXRoaXMuYnVmZmVyXy5wdXNoKGEmMTI3fDEyOCksYT0oYT4+Pjd8Yzw8MjUpPj4+MCxjPj4+PTc7dGhpcy5idWZmZXJfLnB1c2goYSl9O00ud3JpdGVTcGxpdEZpeGVkNjQ9ZnVuY3Rpb24oYSxjKXt0aGlzLndyaXRlVWludDMyKGEpO3RoaXMud3JpdGVVaW50MzIoYyl9O00ud3JpdGVVbnNpZ25lZFZhcmludDMyPWZ1bmN0aW9uKGEpe2Zvcig7MTI3PGE7KXRoaXMuYnVmZmVyXy5wdXNoKGEmMTI3fDEyOCksYT4+Pj03O3RoaXMuYnVmZmVyXy5wdXNoKGEpfTsKTS53cml0ZVNpZ25lZFZhcmludDMyPWZ1bmN0aW9uKGEpe2lmKDA8PWEpdGhpcy53cml0ZVVuc2lnbmVkVmFyaW50MzIoYSk7ZWxzZXtmb3IodmFyIGM9MDs5PmM7YysrKXRoaXMuYnVmZmVyXy5wdXNoKGEmMTI3fDEyOCksYT4+PTc7dGhpcy5idWZmZXJfLnB1c2goMSl9fTtNLndyaXRlVW5zaWduZWRWYXJpbnQ2ND1mdW5jdGlvbihhKXtkZChhKTt0aGlzLndyaXRlU3BsaXRWYXJpbnQ2NChPYyxiZCl9O00ud3JpdGVTaWduZWRWYXJpbnQ2ND1mdW5jdGlvbihhKXtkZChhKTt0aGlzLndyaXRlU3BsaXRWYXJpbnQ2NChPYyxiZCl9O00ud3JpdGVaaWd6YWdWYXJpbnQzMj1mdW5jdGlvbihhKXt0aGlzLndyaXRlVW5zaWduZWRWYXJpbnQzMigoYTw8MV5hPj4zMSk+Pj4wKX07TS53cml0ZVppZ3phZ1ZhcmludDY0PWZ1bmN0aW9uKGEpe2VkKGEpO3RoaXMud3JpdGVTcGxpdFZhcmludDY0KE9jLGJkKX07Ck0ud3JpdGVaaWd6YWdWYXJpbnQ2NFN0cmluZz1mdW5jdGlvbihhKXt0aGlzLndyaXRlWmlnemFnVmFyaW50NjQocGFyc2VJbnQoYSwxMCkpfTtNLndyaXRlVWludDg9ZnVuY3Rpb24oYSl7dGhpcy5idWZmZXJfLnB1c2goYT4+PjAmMjU1KX07TS53cml0ZVVpbnQxNj1mdW5jdGlvbihhKXt0aGlzLmJ1ZmZlcl8ucHVzaChhPj4+MCYyNTUpO3RoaXMuYnVmZmVyXy5wdXNoKGE+Pj44JjI1NSl9O00ud3JpdGVVaW50MzI9ZnVuY3Rpb24oYSl7dGhpcy5idWZmZXJfLnB1c2goYT4+PjAmMjU1KTt0aGlzLmJ1ZmZlcl8ucHVzaChhPj4+OCYyNTUpO3RoaXMuYnVmZmVyXy5wdXNoKGE+Pj4xNiYyNTUpO3RoaXMuYnVmZmVyXy5wdXNoKGE+Pj4yNCYyNTUpfTtNLndyaXRlVWludDY0PWZ1bmN0aW9uKGEpe2NkKGEpO3RoaXMud3JpdGVVaW50MzIoT2MpO3RoaXMud3JpdGVVaW50MzIoYmQpfTtNLndyaXRlSW50OD1mdW5jdGlvbihhKXt0aGlzLmJ1ZmZlcl8ucHVzaChhPj4+MCYyNTUpfTsKTS53cml0ZUludDE2PWZ1bmN0aW9uKGEpe3RoaXMuYnVmZmVyXy5wdXNoKGE+Pj4wJjI1NSk7dGhpcy5idWZmZXJfLnB1c2goYT4+PjgmMjU1KX07TS53cml0ZUludDMyPWZ1bmN0aW9uKGEpe3RoaXMuYnVmZmVyXy5wdXNoKGE+Pj4wJjI1NSk7dGhpcy5idWZmZXJfLnB1c2goYT4+PjgmMjU1KTt0aGlzLmJ1ZmZlcl8ucHVzaChhPj4+MTYmMjU1KTt0aGlzLmJ1ZmZlcl8ucHVzaChhPj4+MjQmMjU1KX07TS53cml0ZUludDY0PWZ1bmN0aW9uKGEpe2RkKGEpO3RoaXMud3JpdGVTcGxpdEZpeGVkNjQoT2MsYmQpfTtNLndyaXRlSW50NjRTdHJpbmc9ZnVuY3Rpb24oYSl7cWQoS2QoYSkpO3RoaXMud3JpdGVTcGxpdEZpeGVkNjQoT2MsYmQpfTtNLndyaXRlRmxvYXQ9ZnVuY3Rpb24oYSl7ZmQoYSk7dGhpcy53cml0ZVVpbnQzMihPYyl9O00ud3JpdGVEb3VibGU9ZnVuY3Rpb24oYSl7Z2QoYSk7dGhpcy53cml0ZVVpbnQzMihPYyk7dGhpcy53cml0ZVVpbnQzMihiZCl9OwpNLndyaXRlQm9vbD1mdW5jdGlvbihhKXt0aGlzLmJ1ZmZlcl8ucHVzaChhPzE6MCl9O00ud3JpdGVFbnVtPWZ1bmN0aW9uKGEpe3RoaXMud3JpdGVTaWduZWRWYXJpbnQzMihhKX07TS53cml0ZUJ5dGVzPWZ1bmN0aW9uKGEpe3RoaXMuYnVmZmVyXy5wdXNoLmFwcGx5KHRoaXMuYnVmZmVyXyxhKX07TS53cml0ZVZhcmludEhhc2g2ND1mdW5jdGlvbihhKXtxZChhKTt0aGlzLndyaXRlU3BsaXRWYXJpbnQ2NChPYyxiZCl9O00ud3JpdGVGaXhlZEhhc2g2ND1mdW5jdGlvbihhKXtxZChhKTt0aGlzLndyaXRlVWludDMyKE9jKTt0aGlzLndyaXRlVWludDMyKGJkKX07Ck0ud3JpdGVTdHJpbmc9ZnVuY3Rpb24oYSl7Zm9yKHZhciBjPXRoaXMuYnVmZmVyXy5sZW5ndGgsZD0wO2Q8YS5sZW5ndGg7ZCsrKXt2YXIgZj1hLmNoYXJDb2RlQXQoZCk7aWYoMTI4PmYpdGhpcy5idWZmZXJfLnB1c2goZik7ZWxzZSBpZigyMDQ4PmYpdGhpcy5idWZmZXJfLnB1c2goZj4+NnwxOTIpLHRoaXMuYnVmZmVyXy5wdXNoKGYmNjN8MTI4KTtlbHNlIGlmKDY1NTM2PmYpaWYoNTUyOTY8PWYmJjU2MzE5Pj1mJiZkKzE8YS5sZW5ndGgpe3ZhciBnPWEuY2hhckNvZGVBdChkKzEpOzU2MzIwPD1nJiY1NzM0Mz49ZyYmKGY9MTAyNCooZi01NTI5NikrZy01NjMyMCs2NTUzNix0aGlzLmJ1ZmZlcl8ucHVzaChmPj4xOHwyNDApLHRoaXMuYnVmZmVyXy5wdXNoKGY+PjEyJjYzfDEyOCksdGhpcy5idWZmZXJfLnB1c2goZj4+NiY2M3wxMjgpLHRoaXMuYnVmZmVyXy5wdXNoKGYmNjN8MTI4KSxkKyspfWVsc2UgdGhpcy5idWZmZXJfLnB1c2goZj4+MTJ8MjI0KSx0aGlzLmJ1ZmZlcl8ucHVzaChmPj4KNiY2M3wxMjgpLHRoaXMuYnVmZmVyXy5wdXNoKGYmNjN8MTI4KX1yZXR1cm4gdGhpcy5idWZmZXJfLmxlbmd0aC1jfTsKLy9+fldFQlBBVEh+fmV4dGVybmFsL2NvbV9nb29nbGVfcHJvdG9idWZfanMvYmluYXJ5L3JlYWRlci5qcwpmdW5jdGlvbiBiZShhLGMsZCl7dGhpcy5kZWNvZGVyXz0kZChhLGMsZCk7dGhpcy5maWVsZEN1cnNvcl89dGhpcy5kZWNvZGVyXy5nZXRDdXJzb3IoKTt0aGlzLm5leHRXaXJlVHlwZV89dGhpcy5uZXh0RmllbGRfPS0xO3RoaXMuZXJyb3JfPSExO3RoaXMucmVhZENhbGxiYWNrc189bnVsbH12YXIgY2U9W107TT1iZS5wcm90b3R5cGU7TS5hbGxvYz1mdW5jdGlvbihhLGMsZCl7aWYoY2UubGVuZ3RoKXt2YXIgZj1jZS5wb3AoKTthJiZmLmRlY29kZXJfLnNldEJsb2NrKGEsYyxkKTtyZXR1cm4gZn1yZXR1cm4gbmV3IGJlKGEsYyxkKX07TS5mcmVlPWZ1bmN0aW9uKCl7dGhpcy5kZWNvZGVyXy5jbGVhcigpO3RoaXMubmV4dFdpcmVUeXBlXz10aGlzLm5leHRGaWVsZF89LTE7dGhpcy5lcnJvcl89ITE7dGhpcy5yZWFkQ2FsbGJhY2tzXz1udWxsOzEwMD5jZS5sZW5ndGgmJmNlLnB1c2godGhpcyl9O00uZ2V0RmllbGRDdXJzb3I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5maWVsZEN1cnNvcl99OwpNLmdldEN1cnNvcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRlY29kZXJfLmdldEN1cnNvcigpfTtNLmdldEJ1ZmZlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRlY29kZXJfLmdldEJ1ZmZlcigpfTtNLmdldEZpZWxkTnVtYmVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmV4dEZpZWxkX307TS5nZXRXaXJlVHlwZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5leHRXaXJlVHlwZV99O00uaXNFbmRHcm91cD1mdW5jdGlvbigpe3JldHVybiA0PT10aGlzLm5leHRXaXJlVHlwZV99O00uZ2V0RXJyb3I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lcnJvcl98fHRoaXMuZGVjb2Rlcl8uZ2V0RXJyb3IoKX07TS5zZXRCbG9jaz1mdW5jdGlvbihhLGMsZCl7dGhpcy5kZWNvZGVyXy5zZXRCbG9jayhhLGMsZCk7dGhpcy5uZXh0V2lyZVR5cGVfPXRoaXMubmV4dEZpZWxkXz0tMX07Ck0ucmVzZXQ9ZnVuY3Rpb24oKXt0aGlzLmRlY29kZXJfLnJlc2V0KCk7dGhpcy5uZXh0V2lyZVR5cGVfPXRoaXMubmV4dEZpZWxkXz0tMX07TS5hZHZhbmNlPWZ1bmN0aW9uKGEpe3RoaXMuZGVjb2Rlcl8uYWR2YW5jZShhKX07Ck0ubmV4dEZpZWxkPWZ1bmN0aW9uKCl7aWYodGhpcy5kZWNvZGVyXy5hdEVuZCgpKXJldHVybiExO2lmKHRoaXMuZ2V0RXJyb3IoKSlyZXR1cm4gYmMoIkRlY29kZXIgaGl0IGFuIGVycm9yIiksITE7dGhpcy5maWVsZEN1cnNvcl89dGhpcy5kZWNvZGVyXy5nZXRDdXJzb3IoKTt2YXIgYT10aGlzLmRlY29kZXJfLnJlYWRVbnNpZ25lZFZhcmludDMyKCksYz1hPj4+MzthJj03O2lmKDAhPWEmJjUhPWEmJjEhPWEmJjIhPWEmJjMhPWEmJjQhPWEpcmV0dXJuIGJjKCJJbnZhbGlkIHdpcmUgdHlwZTogJXMgKGF0IHBvc2l0aW9uICVzKSIsYSx0aGlzLmZpZWxkQ3Vyc29yXyksdGhpcy5lcnJvcl89ITAsITE7dGhpcy5uZXh0RmllbGRfPWM7dGhpcy5uZXh0V2lyZVR5cGVfPWE7cmV0dXJuITB9O00udW5za2lwSGVhZGVyPWZ1bmN0aW9uKCl7dGhpcy5kZWNvZGVyXy51bnNraXBWYXJpbnQodGhpcy5uZXh0RmllbGRfPDwzfHRoaXMubmV4dFdpcmVUeXBlXyl9OwpNLnNraXBNYXRjaGluZ0ZpZWxkcz1mdW5jdGlvbigpe3ZhciBhPXRoaXMubmV4dEZpZWxkXztmb3IodGhpcy51bnNraXBIZWFkZXIoKTt0aGlzLm5leHRGaWVsZCgpJiZ0aGlzLmdldEZpZWxkTnVtYmVyKCk9PWE7KXRoaXMuc2tpcEZpZWxkKCk7dGhpcy5kZWNvZGVyXy5hdEVuZCgpfHx0aGlzLnVuc2tpcEhlYWRlcigpfTtNLnNraXBWYXJpbnRGaWVsZD1mdW5jdGlvbigpezAhPXRoaXMubmV4dFdpcmVUeXBlXz8oYmMoIkludmFsaWQgd2lyZSB0eXBlIGZvciBza2lwVmFyaW50RmllbGQiKSx0aGlzLnNraXBGaWVsZCgpKTp0aGlzLmRlY29kZXJfLnNraXBWYXJpbnQoKX07TS5za2lwRGVsaW1pdGVkRmllbGQ9ZnVuY3Rpb24oKXtpZigyIT10aGlzLm5leHRXaXJlVHlwZV8pYmMoIkludmFsaWQgd2lyZSB0eXBlIGZvciBza2lwRGVsaW1pdGVkRmllbGQiKSx0aGlzLnNraXBGaWVsZCgpO2Vsc2V7dmFyIGE9dGhpcy5kZWNvZGVyXy5yZWFkVW5zaWduZWRWYXJpbnQzMigpO3RoaXMuZGVjb2Rlcl8uYWR2YW5jZShhKX19OwpNLnNraXBGaXhlZDMyRmllbGQ9ZnVuY3Rpb24oKXs1IT10aGlzLm5leHRXaXJlVHlwZV8/KGJjKCJJbnZhbGlkIHdpcmUgdHlwZSBmb3Igc2tpcEZpeGVkMzJGaWVsZCIpLHRoaXMuc2tpcEZpZWxkKCkpOnRoaXMuZGVjb2Rlcl8uYWR2YW5jZSg0KX07TS5za2lwRml4ZWQ2NEZpZWxkPWZ1bmN0aW9uKCl7MSE9dGhpcy5uZXh0V2lyZVR5cGVfPyhiYygiSW52YWxpZCB3aXJlIHR5cGUgZm9yIHNraXBGaXhlZDY0RmllbGQiKSx0aGlzLnNraXBGaWVsZCgpKTp0aGlzLmRlY29kZXJfLmFkdmFuY2UoOCl9OwpNLnNraXBHcm91cD1mdW5jdGlvbigpe3ZhciBhPXRoaXMubmV4dEZpZWxkXztkb3tpZighdGhpcy5uZXh0RmllbGQoKSl7YmMoIlVubWF0Y2hlZCBzdGFydC1ncm91cCB0YWc6IHN0cmVhbSBFT0YiKTt0aGlzLmVycm9yXz0hMDticmVha31pZig0PT10aGlzLm5leHRXaXJlVHlwZV8pe3RoaXMubmV4dEZpZWxkXyE9YSYmKGJjKCJVbm1hdGNoZWQgZW5kLWdyb3VwIHRhZyIpLHRoaXMuZXJyb3JfPSEwKTticmVha310aGlzLnNraXBGaWVsZCgpfXdoaWxlKDEpfTtNLnNraXBGaWVsZD1mdW5jdGlvbigpe3N3aXRjaCh0aGlzLm5leHRXaXJlVHlwZV8pe2Nhc2UgMDp0aGlzLnNraXBWYXJpbnRGaWVsZCgpO2JyZWFrO2Nhc2UgMTp0aGlzLnNraXBGaXhlZDY0RmllbGQoKTticmVhaztjYXNlIDI6dGhpcy5za2lwRGVsaW1pdGVkRmllbGQoKTticmVhaztjYXNlIDU6dGhpcy5za2lwRml4ZWQzMkZpZWxkKCk7YnJlYWs7Y2FzZSAzOnRoaXMuc2tpcEdyb3VwKCk7YnJlYWs7ZGVmYXVsdDpiYygiSW52YWxpZCB3aXJlIGVuY29kaW5nIGZvciBmaWVsZC4iKX19OwpNLnJlZ2lzdGVyUmVhZENhbGxiYWNrPWZ1bmN0aW9uKGEsYyl7SmIodGhpcy5yZWFkQ2FsbGJhY2tzXykmJih0aGlzLnJlYWRDYWxsYmFja3NfPXt9KTt0aGlzLnJlYWRDYWxsYmFja3NfW2FdPWN9O00ucnVuUmVhZENhbGxiYWNrPWZ1bmN0aW9uKGEpe3JldHVybigwLHRoaXMucmVhZENhbGxiYWNrc19bYV0pKHRoaXMpfTsKTS5yZWFkQW55PWZ1bmN0aW9uKGEpe3RoaXMubmV4dFdpcmVUeXBlXz1OYyhhKTtzd2l0Y2goYSl7Y2FzZSAxOnJldHVybiB0aGlzLnJlYWREb3VibGUoKTtjYXNlIDI6cmV0dXJuIHRoaXMucmVhZEZsb2F0KCk7Y2FzZSAzOnJldHVybiB0aGlzLnJlYWRJbnQ2NCgpO2Nhc2UgNDpyZXR1cm4gdGhpcy5yZWFkVWludDY0KCk7Y2FzZSA1OnJldHVybiB0aGlzLnJlYWRJbnQzMigpO2Nhc2UgNjpyZXR1cm4gdGhpcy5yZWFkRml4ZWQ2NCgpO2Nhc2UgNzpyZXR1cm4gdGhpcy5yZWFkRml4ZWQzMigpO2Nhc2UgODpyZXR1cm4gdGhpcy5yZWFkQm9vbCgpO2Nhc2UgOTpyZXR1cm4gdGhpcy5yZWFkU3RyaW5nKCk7Y2FzZSAxMDpiYygiR3JvdXAgZmllbGQgdHlwZSBub3Qgc3VwcG9ydGVkIGluIHJlYWRBbnkoKSIpO2Nhc2UgMTE6YmMoIk1lc3NhZ2UgZmllbGQgdHlwZSBub3Qgc3VwcG9ydGVkIGluIHJlYWRBbnkoKSIpO2Nhc2UgMTI6cmV0dXJuIHRoaXMucmVhZEJ5dGVzKCk7Y2FzZSAxMzpyZXR1cm4gdGhpcy5yZWFkVWludDMyKCk7CmNhc2UgMTQ6cmV0dXJuIHRoaXMucmVhZEVudW0oKTtjYXNlIDE1OnJldHVybiB0aGlzLnJlYWRTZml4ZWQzMigpO2Nhc2UgMTY6cmV0dXJuIHRoaXMucmVhZFNmaXhlZDY0KCk7Y2FzZSAxNzpyZXR1cm4gdGhpcy5yZWFkU2ludDMyKCk7Y2FzZSAxODpyZXR1cm4gdGhpcy5yZWFkU2ludDY0KCk7Y2FzZSAzMDpyZXR1cm4gdGhpcy5yZWFkRml4ZWRIYXNoNjQoKTtjYXNlIDMxOnJldHVybiB0aGlzLnJlYWRWYXJpbnRIYXNoNjQoKTtkZWZhdWx0OmJjKCJJbnZhbGlkIGZpZWxkIHR5cGUgaW4gcmVhZEFueSgpIil9cmV0dXJuIDB9O00ucmVhZE1lc3NhZ2U9ZnVuY3Rpb24oYSxjKXt2YXIgZD10aGlzLmRlY29kZXJfLmdldEVuZCgpLGY9dGhpcy5kZWNvZGVyXy5yZWFkVW5zaWduZWRWYXJpbnQzMigpO2Y9dGhpcy5kZWNvZGVyXy5nZXRDdXJzb3IoKStmO3RoaXMuZGVjb2Rlcl8uc2V0RW5kKGYpO2MoYSx0aGlzKTt0aGlzLmRlY29kZXJfLnNldEN1cnNvcihmKTt0aGlzLmRlY29kZXJfLnNldEVuZChkKX07Ck0ucmVhZEdyb3VwPWZ1bmN0aW9uKGEsYyxkKXtkKGMsdGhpcyk7dGhpcy5lcnJvcl98fDQ9PXRoaXMubmV4dFdpcmVUeXBlX3x8KGJjKCJHcm91cCBzdWJtZXNzYWdlIGRpZCBub3QgZW5kIHdpdGggYW4gRU5EX0dST1VQIHRhZyIpLHRoaXMuZXJyb3JfPSEwKX07TS5nZXRGaWVsZERlY29kZXI9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmRlY29kZXJfLnJlYWRVbnNpZ25lZFZhcmludDMyKCksYz10aGlzLmRlY29kZXJfLmdldEN1cnNvcigpLGQ9YythO2E9JGQodGhpcy5kZWNvZGVyXy5nZXRCdWZmZXIoKSxjLGEpO3RoaXMuZGVjb2Rlcl8uc2V0Q3Vyc29yKGQpO3JldHVybiBhfTtNLnJlYWRJbnQzMj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRlY29kZXJfLnJlYWRTaWduZWRWYXJpbnQzMigpfTtNLnJlYWRJbnQzMlN0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRlY29kZXJfLnJlYWRTaWduZWRWYXJpbnQzMlN0cmluZygpfTtNLnJlYWRJbnQ2ND1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRlY29kZXJfLnJlYWRTaWduZWRWYXJpbnQ2NCgpfTsKTS5yZWFkSW50NjRTdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kZWNvZGVyXy5yZWFkU2lnbmVkVmFyaW50NjRTdHJpbmcoKX07TS5yZWFkVWludDMyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGVjb2Rlcl8ucmVhZFVuc2lnbmVkVmFyaW50MzIoKX07TS5yZWFkVWludDMyU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGVjb2Rlcl8ucmVhZFVuc2lnbmVkVmFyaW50MzJTdHJpbmcoKX07TS5yZWFkVWludDY0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGVjb2Rlcl8ucmVhZFVuc2lnbmVkVmFyaW50NjQoKX07TS5yZWFkVWludDY0U3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGVjb2Rlcl8ucmVhZFVuc2lnbmVkVmFyaW50NjRTdHJpbmcoKX07TS5yZWFkU2ludDMyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGVjb2Rlcl8ucmVhZFppZ3phZ1ZhcmludDMyKCl9O00ucmVhZFNpbnQ2ND1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRlY29kZXJfLnJlYWRaaWd6YWdWYXJpbnQ2NCgpfTsKTS5yZWFkU2ludDY0U3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGVjb2Rlcl8ucmVhZFppZ3phZ1ZhcmludDY0U3RyaW5nKCl9O00ucmVhZEZpeGVkMzI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kZWNvZGVyXy5yZWFkVWludDMyKCl9O00ucmVhZEZpeGVkNjQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kZWNvZGVyXy5yZWFkVWludDY0KCl9O00ucmVhZEZpeGVkNjRTdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kZWNvZGVyXy5yZWFkVWludDY0U3RyaW5nKCl9O00ucmVhZFNmaXhlZDMyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGVjb2Rlcl8ucmVhZEludDMyKCl9O00ucmVhZFNmaXhlZDMyU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGVjb2Rlcl8ucmVhZEludDMyKCkudG9TdHJpbmcoKX07TS5yZWFkU2ZpeGVkNjQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kZWNvZGVyXy5yZWFkSW50NjQoKX07TS5yZWFkU2ZpeGVkNjRTdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kZWNvZGVyXy5yZWFkSW50NjRTdHJpbmcoKX07Ck0ucmVhZEZsb2F0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGVjb2Rlcl8ucmVhZEZsb2F0KCl9O00ucmVhZERvdWJsZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRlY29kZXJfLnJlYWREb3VibGUoKX07TS5yZWFkQm9vbD1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5kZWNvZGVyXy5yZWFkVW5zaWduZWRWYXJpbnQzMigpfTtNLnJlYWRFbnVtPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGVjb2Rlcl8ucmVhZFNpZ25lZFZhcmludDY0KCl9O00ucmVhZFN0cmluZz1mdW5jdGlvbigpe3ZhciBhPXRoaXMuZGVjb2Rlcl8ucmVhZFVuc2lnbmVkVmFyaW50MzIoKTtyZXR1cm4gdGhpcy5kZWNvZGVyXy5yZWFkU3RyaW5nKGEpfTtNLnJlYWRCeXRlcz1mdW5jdGlvbigpe3ZhciBhPXRoaXMuZGVjb2Rlcl8ucmVhZFVuc2lnbmVkVmFyaW50MzIoKTtyZXR1cm4gdGhpcy5kZWNvZGVyXy5yZWFkQnl0ZXMoYSl9O00ucmVhZFZhcmludEhhc2g2ND1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRlY29kZXJfLnJlYWRWYXJpbnRIYXNoNjQoKX07Ck0ucmVhZEZpeGVkSGFzaDY0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGVjb2Rlcl8ucmVhZEZpeGVkSGFzaDY0KCl9O00ucmVhZFBhY2tlZEZpZWxkXz1mdW5jdGlvbihhKXt2YXIgYz10aGlzLmRlY29kZXJfLnJlYWRVbnNpZ25lZFZhcmludDMyKCk7Yz10aGlzLmRlY29kZXJfLmdldEN1cnNvcigpK2M7Zm9yKHZhciBkPVtdO3RoaXMuZGVjb2Rlcl8uZ2V0Q3Vyc29yKCk8YzspZC5wdXNoKGEuY2FsbCh0aGlzLmRlY29kZXJfKSk7cmV0dXJuIGR9O00ucmVhZFBhY2tlZEludDMyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhZFBhY2tlZEZpZWxkXyh0aGlzLmRlY29kZXJfLnJlYWRTaWduZWRWYXJpbnQzMil9O00ucmVhZFBhY2tlZEludDMyU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhZFBhY2tlZEZpZWxkXyh0aGlzLmRlY29kZXJfLnJlYWRTaWduZWRWYXJpbnQzMlN0cmluZyl9O00ucmVhZFBhY2tlZEludDY0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhZFBhY2tlZEZpZWxkXyh0aGlzLmRlY29kZXJfLnJlYWRTaWduZWRWYXJpbnQ2NCl9OwpNLnJlYWRQYWNrZWRJbnQ2NFN0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlYWRQYWNrZWRGaWVsZF8odGhpcy5kZWNvZGVyXy5yZWFkU2lnbmVkVmFyaW50NjRTdHJpbmcpfTtNLnJlYWRQYWNrZWRVaW50MzI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWFkUGFja2VkRmllbGRfKHRoaXMuZGVjb2Rlcl8ucmVhZFVuc2lnbmVkVmFyaW50MzIpfTtNLnJlYWRQYWNrZWRVaW50MzJTdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWFkUGFja2VkRmllbGRfKHRoaXMuZGVjb2Rlcl8ucmVhZFVuc2lnbmVkVmFyaW50MzJTdHJpbmcpfTtNLnJlYWRQYWNrZWRVaW50NjQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWFkUGFja2VkRmllbGRfKHRoaXMuZGVjb2Rlcl8ucmVhZFVuc2lnbmVkVmFyaW50NjQpfTtNLnJlYWRQYWNrZWRVaW50NjRTdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWFkUGFja2VkRmllbGRfKHRoaXMuZGVjb2Rlcl8ucmVhZFVuc2lnbmVkVmFyaW50NjRTdHJpbmcpfTsKTS5yZWFkUGFja2VkU2ludDMyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhZFBhY2tlZEZpZWxkXyh0aGlzLmRlY29kZXJfLnJlYWRaaWd6YWdWYXJpbnQzMil9O00ucmVhZFBhY2tlZFNpbnQ2ND1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlYWRQYWNrZWRGaWVsZF8odGhpcy5kZWNvZGVyXy5yZWFkWmlnemFnVmFyaW50NjQpfTtNLnJlYWRQYWNrZWRTaW50NjRTdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWFkUGFja2VkRmllbGRfKHRoaXMuZGVjb2Rlcl8ucmVhZFppZ3phZ1ZhcmludDY0U3RyaW5nKX07TS5yZWFkUGFja2VkRml4ZWQzMj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlYWRQYWNrZWRGaWVsZF8odGhpcy5kZWNvZGVyXy5yZWFkVWludDMyKX07TS5yZWFkUGFja2VkRml4ZWQ2ND1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlYWRQYWNrZWRGaWVsZF8odGhpcy5kZWNvZGVyXy5yZWFkVWludDY0KX07TS5yZWFkUGFja2VkRml4ZWQ2NFN0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlYWRQYWNrZWRGaWVsZF8odGhpcy5kZWNvZGVyXy5yZWFkVWludDY0U3RyaW5nKX07Ck0ucmVhZFBhY2tlZFNmaXhlZDMyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhZFBhY2tlZEZpZWxkXyh0aGlzLmRlY29kZXJfLnJlYWRJbnQzMil9O00ucmVhZFBhY2tlZFNmaXhlZDY0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhZFBhY2tlZEZpZWxkXyh0aGlzLmRlY29kZXJfLnJlYWRJbnQ2NCl9O00ucmVhZFBhY2tlZFNmaXhlZDY0U3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhZFBhY2tlZEZpZWxkXyh0aGlzLmRlY29kZXJfLnJlYWRJbnQ2NFN0cmluZyl9O00ucmVhZFBhY2tlZEZsb2F0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhZFBhY2tlZEZpZWxkXyh0aGlzLmRlY29kZXJfLnJlYWRGbG9hdCl9O00ucmVhZFBhY2tlZERvdWJsZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlYWRQYWNrZWRGaWVsZF8odGhpcy5kZWNvZGVyXy5yZWFkRG91YmxlKX07TS5yZWFkUGFja2VkQm9vbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlYWRQYWNrZWRGaWVsZF8odGhpcy5kZWNvZGVyXy5yZWFkQm9vbCl9OwpNLnJlYWRQYWNrZWRFbnVtPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhZFBhY2tlZEZpZWxkXyh0aGlzLmRlY29kZXJfLnJlYWRFbnVtKX07TS5yZWFkUGFja2VkVmFyaW50SGFzaDY0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhZFBhY2tlZEZpZWxkXyh0aGlzLmRlY29kZXJfLnJlYWRWYXJpbnRIYXNoNjQpfTtNLnJlYWRQYWNrZWRGaXhlZEhhc2g2ND1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlYWRQYWNrZWRGaWVsZF8odGhpcy5kZWNvZGVyXy5yZWFkRml4ZWRIYXNoNjQpfTsKLy9+fldFQlBBVEh+fmV4dGVybmFsL2NvbV9nb29nbGVfcHJvdG9idWZfanMvYmluYXJ5L3dyaXRlci5qcwpmdW5jdGlvbiBkZSgpe3RoaXMuYmxvY2tzXz1bXTt0aGlzLnRvdGFsTGVuZ3RoXz0wO3RoaXMuZW5jb2Rlcl89bmV3IGFlO3RoaXMuYm9va21hcmtzXz1bXX1NPWRlLnByb3RvdHlwZTtNLmFwcGVuZFVpbnQ4QXJyYXlfPWZ1bmN0aW9uKGEpe3ZhciBjPXRoaXMuZW5jb2Rlcl8uZW5kKCk7dGhpcy5ibG9ja3NfLnB1c2goYyk7dGhpcy5ibG9ja3NfLnB1c2goYSk7dGhpcy50b3RhbExlbmd0aF8rPWMubGVuZ3RoK2EubGVuZ3RofTtNLmJlZ2luRGVsaW1pdGVkXz1mdW5jdGlvbihhKXt0aGlzLndyaXRlRmllbGRIZWFkZXJfKGEsMik7YT10aGlzLmVuY29kZXJfLmVuZCgpO3RoaXMuYmxvY2tzXy5wdXNoKGEpO3RoaXMudG90YWxMZW5ndGhfKz1hLmxlbmd0aDthLnB1c2godGhpcy50b3RhbExlbmd0aF8pO3JldHVybiBhfTsKTS5lbmREZWxpbWl0ZWRfPWZ1bmN0aW9uKGEpe3ZhciBjPWEucG9wKCk7Zm9yKGM9dGhpcy50b3RhbExlbmd0aF8rdGhpcy5lbmNvZGVyXy5sZW5ndGgoKS1jOzEyNzxjOylhLnB1c2goYyYxMjd8MTI4KSxjPj4+PTcsdGhpcy50b3RhbExlbmd0aF8rKzthLnB1c2goYyk7dGhpcy50b3RhbExlbmd0aF8rK307TS53cml0ZVNlcmlhbGl6ZWRNZXNzYWdlPWZ1bmN0aW9uKGEsYyxkKXt0aGlzLmFwcGVuZFVpbnQ4QXJyYXlfKGEuc3ViYXJyYXkoYyxkKSl9O00ubWF5YmVXcml0ZVNlcmlhbGl6ZWRNZXNzYWdlPWZ1bmN0aW9uKGEsYyxkKXtudWxsIT1hJiZudWxsIT1jJiZudWxsIT1kJiZ0aGlzLndyaXRlU2VyaWFsaXplZE1lc3NhZ2UoYSxjLGQpfTtNLnJlc2V0PWZ1bmN0aW9uKCl7dGhpcy5ibG9ja3NfPVtdO3RoaXMuZW5jb2Rlcl8uZW5kKCk7dGhpcy50b3RhbExlbmd0aF89MDt0aGlzLmJvb2ttYXJrc189W119OwpNLmdldFJlc3VsdEJ1ZmZlcj1mdW5jdGlvbigpe2Zvcih2YXIgYT1uZXcgVWludDhBcnJheSh0aGlzLnRvdGFsTGVuZ3RoXyt0aGlzLmVuY29kZXJfLmxlbmd0aCgpKSxjPXRoaXMuYmxvY2tzXyxkPWMubGVuZ3RoLGY9MCxnPTA7ZzxkO2crKyl7dmFyIGw9Y1tnXTthLnNldChsLGYpO2YrPWwubGVuZ3RofWM9dGhpcy5lbmNvZGVyXy5lbmQoKTthLnNldChjLGYpO3RoaXMuYmxvY2tzXz1bYV07cmV0dXJuIGF9O00uZ2V0UmVzdWx0QmFzZTY0U3RyaW5nPWZ1bmN0aW9uKGEpe3JldHVybiB0Yyh0aGlzLmdldFJlc3VsdEJ1ZmZlcigpLGEpfTtNLmJlZ2luU3ViTWVzc2FnZT1mdW5jdGlvbihhKXt0aGlzLmJvb2ttYXJrc18ucHVzaCh0aGlzLmJlZ2luRGVsaW1pdGVkXyhhKSl9O00uZW5kU3ViTWVzc2FnZT1mdW5jdGlvbigpe3RoaXMuZW5kRGVsaW1pdGVkXyh0aGlzLmJvb2ttYXJrc18ucG9wKCkpfTsKTS53cml0ZUZpZWxkSGVhZGVyXz1mdW5jdGlvbihhLGMpe3RoaXMuZW5jb2Rlcl8ud3JpdGVVbnNpZ25lZFZhcmludDMyKDgqYStjKX07Ck0ud3JpdGVBbnk9ZnVuY3Rpb24oYSxjLGQpe3N3aXRjaChhKXtjYXNlIDE6dGhpcy53cml0ZURvdWJsZShjLGQpO2JyZWFrO2Nhc2UgMjp0aGlzLndyaXRlRmxvYXQoYyxkKTticmVhaztjYXNlIDM6dGhpcy53cml0ZUludDY0KGMsZCk7YnJlYWs7Y2FzZSA0OnRoaXMud3JpdGVVaW50NjQoYyxkKTticmVhaztjYXNlIDU6dGhpcy53cml0ZUludDMyKGMsZCk7YnJlYWs7Y2FzZSA2OnRoaXMud3JpdGVGaXhlZDY0KGMsZCk7YnJlYWs7Y2FzZSA3OnRoaXMud3JpdGVGaXhlZDMyKGMsZCk7YnJlYWs7Y2FzZSA4OnRoaXMud3JpdGVCb29sKGMsZCk7YnJlYWs7Y2FzZSA5OnRoaXMud3JpdGVTdHJpbmcoYyxkKTticmVhaztjYXNlIDEwOmJjKCJHcm91cCBmaWVsZCB0eXBlIG5vdCBzdXBwb3J0ZWQgaW4gd3JpdGVBbnkoKSIpO2JyZWFrO2Nhc2UgMTE6YmMoIk1lc3NhZ2UgZmllbGQgdHlwZSBub3Qgc3VwcG9ydGVkIGluIHdyaXRlQW55KCkiKTticmVhaztjYXNlIDEyOnRoaXMud3JpdGVCeXRlcyhjLApkKTticmVhaztjYXNlIDEzOnRoaXMud3JpdGVVaW50MzIoYyxkKTticmVhaztjYXNlIDE0OnRoaXMud3JpdGVFbnVtKGMsZCk7YnJlYWs7Y2FzZSAxNTp0aGlzLndyaXRlU2ZpeGVkMzIoYyxkKTticmVhaztjYXNlIDE2OnRoaXMud3JpdGVTZml4ZWQ2NChjLGQpO2JyZWFrO2Nhc2UgMTc6dGhpcy53cml0ZVNpbnQzMihjLGQpO2JyZWFrO2Nhc2UgMTg6dGhpcy53cml0ZVNpbnQ2NChjLGQpO2JyZWFrO2Nhc2UgMzA6dGhpcy53cml0ZUZpeGVkSGFzaDY0KGMsZCk7YnJlYWs7Y2FzZSAzMTp0aGlzLndyaXRlVmFyaW50SGFzaDY0KGMsZCk7YnJlYWs7ZGVmYXVsdDpiYygiSW52YWxpZCBmaWVsZCB0eXBlIGluIHdyaXRlQW55KCkiKX19O00ud3JpdGVVbnNpZ25lZFZhcmludDMyXz1mdW5jdGlvbihhLGMpe251bGwhPWMmJih0aGlzLndyaXRlRmllbGRIZWFkZXJfKGEsMCksdGhpcy5lbmNvZGVyXy53cml0ZVVuc2lnbmVkVmFyaW50MzIoYykpfTsKTS53cml0ZVNpZ25lZFZhcmludDMyXz1mdW5jdGlvbihhLGMpe251bGwhPWMmJih0aGlzLndyaXRlRmllbGRIZWFkZXJfKGEsMCksdGhpcy5lbmNvZGVyXy53cml0ZVNpZ25lZFZhcmludDMyKGMpKX07TS53cml0ZVVuc2lnbmVkVmFyaW50NjRfPWZ1bmN0aW9uKGEsYyl7bnVsbCE9YyYmKHRoaXMud3JpdGVGaWVsZEhlYWRlcl8oYSwwKSx0aGlzLmVuY29kZXJfLndyaXRlVW5zaWduZWRWYXJpbnQ2NChjKSl9O00ud3JpdGVTaWduZWRWYXJpbnQ2NF89ZnVuY3Rpb24oYSxjKXtudWxsIT1jJiYodGhpcy53cml0ZUZpZWxkSGVhZGVyXyhhLDApLHRoaXMuZW5jb2Rlcl8ud3JpdGVTaWduZWRWYXJpbnQ2NChjKSl9O00ud3JpdGVaaWd6YWdWYXJpbnQzMl89ZnVuY3Rpb24oYSxjKXtudWxsIT1jJiYodGhpcy53cml0ZUZpZWxkSGVhZGVyXyhhLDApLHRoaXMuZW5jb2Rlcl8ud3JpdGVaaWd6YWdWYXJpbnQzMihjKSl9OwpNLndyaXRlWmlnemFnVmFyaW50NjRfPWZ1bmN0aW9uKGEsYyl7bnVsbCE9YyYmKHRoaXMud3JpdGVGaWVsZEhlYWRlcl8oYSwwKSx0aGlzLmVuY29kZXJfLndyaXRlWmlnemFnVmFyaW50NjQoYykpfTtNLndyaXRlWmlnemFnVmFyaW50NjRTdHJpbmdfPWZ1bmN0aW9uKGEsYyl7bnVsbCE9YyYmKHRoaXMud3JpdGVGaWVsZEhlYWRlcl8oYSwwKSx0aGlzLmVuY29kZXJfLndyaXRlWmlnemFnVmFyaW50NjRTdHJpbmcoYykpfTtNLndyaXRlSW50MzI9ZnVuY3Rpb24oYSxjKXtudWxsIT1jJiZ0aGlzLndyaXRlU2lnbmVkVmFyaW50MzJfKGEsYyl9O00ud3JpdGVJbnQzMlN0cmluZz1mdW5jdGlvbihhLGMpe251bGwhPWMmJnRoaXMud3JpdGVTaWduZWRWYXJpbnQzMl8oYSxwYXJzZUludChjLDEwKSl9O00ud3JpdGVJbnQ2ND1mdW5jdGlvbihhLGMpe251bGwhPWMmJnRoaXMud3JpdGVTaWduZWRWYXJpbnQ2NF8oYSxjKX07Ck0ud3JpdGVJbnQ2NFN0cmluZz1mdW5jdGlvbihhLGMpe251bGwhPWMmJihjPU1jKGMpLHRoaXMud3JpdGVGaWVsZEhlYWRlcl8oYSwwKSx0aGlzLmVuY29kZXJfLndyaXRlU3BsaXRWYXJpbnQ2NChjLmxvLGMuaGkpKX07TS53cml0ZVVpbnQzMj1mdW5jdGlvbihhLGMpe251bGwhPWMmJnRoaXMud3JpdGVVbnNpZ25lZFZhcmludDMyXyhhLGMpfTtNLndyaXRlVWludDMyU3RyaW5nPWZ1bmN0aW9uKGEsYyl7bnVsbCE9YyYmdGhpcy53cml0ZVVuc2lnbmVkVmFyaW50MzJfKGEscGFyc2VJbnQoYywxMCkpfTtNLndyaXRlVWludDY0PWZ1bmN0aW9uKGEsYyl7bnVsbCE9YyYmdGhpcy53cml0ZVVuc2lnbmVkVmFyaW50NjRfKGEsYyl9O00ud3JpdGVVaW50NjRTdHJpbmc9ZnVuY3Rpb24oYSxjKXtudWxsIT1jJiYoYz1LYyhjKSx0aGlzLndyaXRlRmllbGRIZWFkZXJfKGEsMCksdGhpcy5lbmNvZGVyXy53cml0ZVNwbGl0VmFyaW50NjQoYy5sbyxjLmhpKSl9OwpNLndyaXRlU2ludDMyPWZ1bmN0aW9uKGEsYyl7bnVsbCE9YyYmdGhpcy53cml0ZVppZ3phZ1ZhcmludDMyXyhhLGMpfTtNLndyaXRlU2ludDY0PWZ1bmN0aW9uKGEsYyl7bnVsbCE9YyYmdGhpcy53cml0ZVppZ3phZ1ZhcmludDY0XyhhLGMpfTtNLndyaXRlU2ludDY0U3RyaW5nPWZ1bmN0aW9uKGEsYyl7bnVsbCE9YyYmdGhpcy53cml0ZVppZ3phZ1ZhcmludDY0U3RyaW5nXyhhLGMpfTtNLndyaXRlRml4ZWQzMj1mdW5jdGlvbihhLGMpe251bGwhPWMmJih0aGlzLndyaXRlRmllbGRIZWFkZXJfKGEsNSksdGhpcy5lbmNvZGVyXy53cml0ZVVpbnQzMihjKSl9O00ud3JpdGVGaXhlZDY0PWZ1bmN0aW9uKGEsYyl7bnVsbCE9YyYmKHRoaXMud3JpdGVGaWVsZEhlYWRlcl8oYSwxKSx0aGlzLmVuY29kZXJfLndyaXRlVWludDY0KGMpKX07Ck0ud3JpdGVGaXhlZDY0U3RyaW5nPWZ1bmN0aW9uKGEsYyl7bnVsbCE9YyYmKGM9S2MoYyksdGhpcy53cml0ZUZpZWxkSGVhZGVyXyhhLDEpLHRoaXMuZW5jb2Rlcl8ud3JpdGVTcGxpdEZpeGVkNjQoYy5sbyxjLmhpKSl9O00ud3JpdGVTZml4ZWQzMj1mdW5jdGlvbihhLGMpe251bGwhPWMmJih0aGlzLndyaXRlRmllbGRIZWFkZXJfKGEsNSksdGhpcy5lbmNvZGVyXy53cml0ZUludDMyKGMpKX07TS53cml0ZVNmaXhlZDY0PWZ1bmN0aW9uKGEsYyl7bnVsbCE9YyYmKHRoaXMud3JpdGVGaWVsZEhlYWRlcl8oYSwxKSx0aGlzLmVuY29kZXJfLndyaXRlSW50NjQoYykpfTtNLndyaXRlU2ZpeGVkNjRTdHJpbmc9ZnVuY3Rpb24oYSxjKXtudWxsIT1jJiYoYz1NYyhjKSx0aGlzLndyaXRlRmllbGRIZWFkZXJfKGEsMSksdGhpcy5lbmNvZGVyXy53cml0ZVNwbGl0Rml4ZWQ2NChjLmxvLGMuaGkpKX07Ck0ud3JpdGVGbG9hdD1mdW5jdGlvbihhLGMpe251bGwhPWMmJih0aGlzLndyaXRlRmllbGRIZWFkZXJfKGEsNSksdGhpcy5lbmNvZGVyXy53cml0ZUZsb2F0KGMpKX07TS53cml0ZURvdWJsZT1mdW5jdGlvbihhLGMpe251bGwhPWMmJih0aGlzLndyaXRlRmllbGRIZWFkZXJfKGEsMSksdGhpcy5lbmNvZGVyXy53cml0ZURvdWJsZShjKSl9O00ud3JpdGVCb29sPWZ1bmN0aW9uKGEsYyl7bnVsbCE9YyYmKHRoaXMud3JpdGVGaWVsZEhlYWRlcl8oYSwwKSx0aGlzLmVuY29kZXJfLndyaXRlQm9vbChjKSl9O00ud3JpdGVFbnVtPWZ1bmN0aW9uKGEsYyl7bnVsbCE9YyYmKHRoaXMud3JpdGVGaWVsZEhlYWRlcl8oYSwwKSx0aGlzLmVuY29kZXJfLndyaXRlU2lnbmVkVmFyaW50MzIoYykpfTtNLndyaXRlU3RyaW5nPWZ1bmN0aW9uKGEsYyl7bnVsbCE9YyYmKGE9dGhpcy5iZWdpbkRlbGltaXRlZF8oYSksdGhpcy5lbmNvZGVyXy53cml0ZVN0cmluZyhjKSx0aGlzLmVuZERlbGltaXRlZF8oYSkpfTsKTS53cml0ZUJ5dGVzPWZ1bmN0aW9uKGEsYyl7bnVsbCE9YyYmKGM9TGQoYyksdGhpcy53cml0ZUZpZWxkSGVhZGVyXyhhLDIpLHRoaXMuZW5jb2Rlcl8ud3JpdGVVbnNpZ25lZFZhcmludDMyKGMubGVuZ3RoKSx0aGlzLmFwcGVuZFVpbnQ4QXJyYXlfKGMpKX07TS53cml0ZU1lc3NhZ2U9ZnVuY3Rpb24oYSxjLGQpe251bGwhPWMmJihhPXRoaXMuYmVnaW5EZWxpbWl0ZWRfKGEpLGQoYyx0aGlzKSx0aGlzLmVuZERlbGltaXRlZF8oYSkpfTtNLndyaXRlTWVzc2FnZVNldD1mdW5jdGlvbihhLGMsZCl7bnVsbCE9YyYmKHRoaXMud3JpdGVGaWVsZEhlYWRlcl8oMSwzKSx0aGlzLndyaXRlRmllbGRIZWFkZXJfKDIsMCksdGhpcy5lbmNvZGVyXy53cml0ZVNpZ25lZFZhcmludDMyKGEpLGE9dGhpcy5iZWdpbkRlbGltaXRlZF8oMyksZChjLHRoaXMpLHRoaXMuZW5kRGVsaW1pdGVkXyhhKSx0aGlzLndyaXRlRmllbGRIZWFkZXJfKDEsNCkpfTsKTS53cml0ZUdyb3VwPWZ1bmN0aW9uKGEsYyxkKXtudWxsIT1jJiYodGhpcy53cml0ZUZpZWxkSGVhZGVyXyhhLDMpLGQoYyx0aGlzKSx0aGlzLndyaXRlRmllbGRIZWFkZXJfKGEsNCkpfTtNLndyaXRlRml4ZWRIYXNoNjQ9ZnVuY3Rpb24oYSxjKXtudWxsIT1jJiYodGhpcy53cml0ZUZpZWxkSGVhZGVyXyhhLDEpLHRoaXMuZW5jb2Rlcl8ud3JpdGVGaXhlZEhhc2g2NChjKSl9O00ud3JpdGVWYXJpbnRIYXNoNjQ9ZnVuY3Rpb24oYSxjKXtudWxsIT1jJiYodGhpcy53cml0ZUZpZWxkSGVhZGVyXyhhLDApLHRoaXMuZW5jb2Rlcl8ud3JpdGVWYXJpbnRIYXNoNjQoYykpfTtNLndyaXRlUmVwZWF0ZWRJbnQzMj1mdW5jdGlvbihhLGMpe2lmKG51bGwhPWMpZm9yKHZhciBkPTA7ZDxjLmxlbmd0aDtkKyspdGhpcy53cml0ZVNpZ25lZFZhcmludDMyXyhhLGNbZF0pfTsKTS53cml0ZVJlcGVhdGVkSW50MzJTdHJpbmc9ZnVuY3Rpb24oYSxjKXtpZihudWxsIT1jKWZvcih2YXIgZD0wO2Q8Yy5sZW5ndGg7ZCsrKXRoaXMud3JpdGVJbnQzMlN0cmluZyhhLGNbZF0pfTtNLndyaXRlUmVwZWF0ZWRJbnQ2ND1mdW5jdGlvbihhLGMpe2lmKG51bGwhPWMpZm9yKHZhciBkPTA7ZDxjLmxlbmd0aDtkKyspdGhpcy53cml0ZVNpZ25lZFZhcmludDY0XyhhLGNbZF0pfTtNLndyaXRlUmVwZWF0ZWRJbnQ2NFN0cmluZz1mdW5jdGlvbihhLGMpe2lmKG51bGwhPWMpZm9yKHZhciBkPTA7ZDxjLmxlbmd0aDtkKyspdGhpcy53cml0ZUludDY0U3RyaW5nKGEsY1tkXSl9O00ud3JpdGVSZXBlYXRlZFVpbnQzMj1mdW5jdGlvbihhLGMpe2lmKG51bGwhPWMpZm9yKHZhciBkPTA7ZDxjLmxlbmd0aDtkKyspdGhpcy53cml0ZVVuc2lnbmVkVmFyaW50MzJfKGEsY1tkXSl9OwpNLndyaXRlUmVwZWF0ZWRVaW50MzJTdHJpbmc9ZnVuY3Rpb24oYSxjKXtpZihudWxsIT1jKWZvcih2YXIgZD0wO2Q8Yy5sZW5ndGg7ZCsrKXRoaXMud3JpdGVVaW50MzJTdHJpbmcoYSxjW2RdKX07TS53cml0ZVJlcGVhdGVkVWludDY0PWZ1bmN0aW9uKGEsYyl7aWYobnVsbCE9Yylmb3IodmFyIGQ9MDtkPGMubGVuZ3RoO2QrKyl0aGlzLndyaXRlVW5zaWduZWRWYXJpbnQ2NF8oYSxjW2RdKX07TS53cml0ZVJlcGVhdGVkVWludDY0U3RyaW5nPWZ1bmN0aW9uKGEsYyl7aWYobnVsbCE9Yylmb3IodmFyIGQ9MDtkPGMubGVuZ3RoO2QrKyl0aGlzLndyaXRlVWludDY0U3RyaW5nKGEsY1tkXSl9O00ud3JpdGVSZXBlYXRlZFNpbnQzMj1mdW5jdGlvbihhLGMpe2lmKG51bGwhPWMpZm9yKHZhciBkPTA7ZDxjLmxlbmd0aDtkKyspdGhpcy53cml0ZVppZ3phZ1ZhcmludDMyXyhhLGNbZF0pfTsKTS53cml0ZVJlcGVhdGVkU2ludDY0PWZ1bmN0aW9uKGEsYyl7aWYobnVsbCE9Yylmb3IodmFyIGQ9MDtkPGMubGVuZ3RoO2QrKyl0aGlzLndyaXRlWmlnemFnVmFyaW50NjRfKGEsY1tkXSl9O00ud3JpdGVSZXBlYXRlZFNpbnQ2NFN0cmluZz1mdW5jdGlvbihhLGMpe2lmKG51bGwhPWMpZm9yKHZhciBkPTA7ZDxjLmxlbmd0aDtkKyspdGhpcy53cml0ZVppZ3phZ1ZhcmludDY0U3RyaW5nXyhhLGNbZF0pfTtNLndyaXRlUmVwZWF0ZWRGaXhlZDMyPWZ1bmN0aW9uKGEsYyl7aWYobnVsbCE9Yylmb3IodmFyIGQ9MDtkPGMubGVuZ3RoO2QrKyl0aGlzLndyaXRlRml4ZWQzMihhLGNbZF0pfTtNLndyaXRlUmVwZWF0ZWRGaXhlZDY0PWZ1bmN0aW9uKGEsYyl7aWYobnVsbCE9Yylmb3IodmFyIGQ9MDtkPGMubGVuZ3RoO2QrKyl0aGlzLndyaXRlRml4ZWQ2NChhLGNbZF0pfTsKTS53cml0ZVJlcGVhdGVkRml4ZWQ2NFN0cmluZz1mdW5jdGlvbihhLGMpe2lmKG51bGwhPWMpZm9yKHZhciBkPTA7ZDxjLmxlbmd0aDtkKyspdGhpcy53cml0ZUZpeGVkNjRTdHJpbmcoYSxjW2RdKX07TS53cml0ZVJlcGVhdGVkU2ZpeGVkMzI9ZnVuY3Rpb24oYSxjKXtpZihudWxsIT1jKWZvcih2YXIgZD0wO2Q8Yy5sZW5ndGg7ZCsrKXRoaXMud3JpdGVTZml4ZWQzMihhLGNbZF0pfTtNLndyaXRlUmVwZWF0ZWRTZml4ZWQ2ND1mdW5jdGlvbihhLGMpe2lmKG51bGwhPWMpZm9yKHZhciBkPTA7ZDxjLmxlbmd0aDtkKyspdGhpcy53cml0ZVNmaXhlZDY0KGEsY1tkXSl9O00ud3JpdGVSZXBlYXRlZFNmaXhlZDY0U3RyaW5nPWZ1bmN0aW9uKGEsYyl7aWYobnVsbCE9Yylmb3IodmFyIGQ9MDtkPGMubGVuZ3RoO2QrKyl0aGlzLndyaXRlU2ZpeGVkNjRTdHJpbmcoYSxjW2RdKX07Ck0ud3JpdGVSZXBlYXRlZEZsb2F0PWZ1bmN0aW9uKGEsYyl7aWYobnVsbCE9Yylmb3IodmFyIGQ9MDtkPGMubGVuZ3RoO2QrKyl0aGlzLndyaXRlRmxvYXQoYSxjW2RdKX07TS53cml0ZVJlcGVhdGVkRG91YmxlPWZ1bmN0aW9uKGEsYyl7aWYobnVsbCE9Yylmb3IodmFyIGQ9MDtkPGMubGVuZ3RoO2QrKyl0aGlzLndyaXRlRG91YmxlKGEsY1tkXSl9O00ud3JpdGVSZXBlYXRlZEJvb2w9ZnVuY3Rpb24oYSxjKXtpZihudWxsIT1jKWZvcih2YXIgZD0wO2Q8Yy5sZW5ndGg7ZCsrKXRoaXMud3JpdGVCb29sKGEsY1tkXSl9O00ud3JpdGVSZXBlYXRlZEVudW09ZnVuY3Rpb24oYSxjKXtpZihudWxsIT1jKWZvcih2YXIgZD0wO2Q8Yy5sZW5ndGg7ZCsrKXRoaXMud3JpdGVFbnVtKGEsY1tkXSl9O00ud3JpdGVSZXBlYXRlZFN0cmluZz1mdW5jdGlvbihhKXtpZihudWxsIT1hKWZvcih2YXIgYz0wO2M8YS5sZW5ndGg7YysrKXRoaXMud3JpdGVTdHJpbmcoMSxhW2NdKX07Ck0ud3JpdGVSZXBlYXRlZEJ5dGVzPWZ1bmN0aW9uKGEpe2lmKG51bGwhPWEpZm9yKHZhciBjPTA7YzxhLmxlbmd0aDtjKyspdGhpcy53cml0ZUJ5dGVzKDEsYVtjXSl9O00ud3JpdGVSZXBlYXRlZE1lc3NhZ2U9ZnVuY3Rpb24oYSxjLGQpe2lmKG51bGwhPWMpZm9yKHZhciBmPTA7ZjxjLmxlbmd0aDtmKyspe3ZhciBnPXRoaXMuYmVnaW5EZWxpbWl0ZWRfKGEpO2QoY1tmXSx0aGlzKTt0aGlzLmVuZERlbGltaXRlZF8oZyl9fTtNLndyaXRlUmVwZWF0ZWRHcm91cD1mdW5jdGlvbihhLGMsZCl7aWYobnVsbCE9Yylmb3IodmFyIGY9MDtmPGMubGVuZ3RoO2YrKyl0aGlzLndyaXRlRmllbGRIZWFkZXJfKGEsMyksZChjW2ZdLHRoaXMpLHRoaXMud3JpdGVGaWVsZEhlYWRlcl8oYSw0KX07TS53cml0ZVJlcGVhdGVkRml4ZWRIYXNoNjQ9ZnVuY3Rpb24oYSxjKXtpZihudWxsIT1jKWZvcih2YXIgZD0wO2Q8Yy5sZW5ndGg7ZCsrKXRoaXMud3JpdGVGaXhlZEhhc2g2NChhLGNbZF0pfTsKTS53cml0ZVJlcGVhdGVkVmFyaW50SGFzaDY0PWZ1bmN0aW9uKGEsYyl7aWYobnVsbCE9Yylmb3IodmFyIGQ9MDtkPGMubGVuZ3RoO2QrKyl0aGlzLndyaXRlVmFyaW50SGFzaDY0KGEsY1tkXSl9O00ud3JpdGVQYWNrZWRJbnQzMj1mdW5jdGlvbihhLGMpe2lmKG51bGwhPWMmJmMubGVuZ3RoKXthPXRoaXMuYmVnaW5EZWxpbWl0ZWRfKGEpO2Zvcih2YXIgZD0wO2Q8Yy5sZW5ndGg7ZCsrKXRoaXMuZW5jb2Rlcl8ud3JpdGVTaWduZWRWYXJpbnQzMihjW2RdKTt0aGlzLmVuZERlbGltaXRlZF8oYSl9fTtNLndyaXRlUGFja2VkSW50MzJTdHJpbmc9ZnVuY3Rpb24oYSxjKXtpZihudWxsIT1jJiZjLmxlbmd0aCl7YT10aGlzLmJlZ2luRGVsaW1pdGVkXyhhKTtmb3IodmFyIGQ9MDtkPGMubGVuZ3RoO2QrKyl0aGlzLmVuY29kZXJfLndyaXRlU2lnbmVkVmFyaW50MzIocGFyc2VJbnQoY1tkXSwxMCkpO3RoaXMuZW5kRGVsaW1pdGVkXyhhKX19OwpNLndyaXRlUGFja2VkSW50NjQ9ZnVuY3Rpb24oYSl7aWYobnVsbCE9YSYmYS5sZW5ndGgpe2Zvcih2YXIgYz10aGlzLmJlZ2luRGVsaW1pdGVkXygxKSxkPTA7ZDxhLmxlbmd0aDtkKyspdGhpcy5lbmNvZGVyXy53cml0ZVNpZ25lZFZhcmludDY0KGFbZF0pO3RoaXMuZW5kRGVsaW1pdGVkXyhjKX19O00ud3JpdGVQYWNrZWRJbnQ2NFN0cmluZz1mdW5jdGlvbihhLGMpe2lmKG51bGwhPWMmJmMubGVuZ3RoKXthPXRoaXMuYmVnaW5EZWxpbWl0ZWRfKGEpO2Zvcih2YXIgZD0wO2Q8Yy5sZW5ndGg7ZCsrKXt2YXIgZj1NYyhjW2RdKTt0aGlzLmVuY29kZXJfLndyaXRlU3BsaXRWYXJpbnQ2NChmLmxvLGYuaGkpfXRoaXMuZW5kRGVsaW1pdGVkXyhhKX19OwpNLndyaXRlUGFja2VkVWludDMyPWZ1bmN0aW9uKGEsYyl7aWYobnVsbCE9YyYmYy5sZW5ndGgpe2E9dGhpcy5iZWdpbkRlbGltaXRlZF8oYSk7Zm9yKHZhciBkPTA7ZDxjLmxlbmd0aDtkKyspdGhpcy5lbmNvZGVyXy53cml0ZVVuc2lnbmVkVmFyaW50MzIoY1tkXSk7dGhpcy5lbmREZWxpbWl0ZWRfKGEpfX07TS53cml0ZVBhY2tlZFVpbnQzMlN0cmluZz1mdW5jdGlvbihhLGMpe2lmKG51bGwhPWMmJmMubGVuZ3RoKXthPXRoaXMuYmVnaW5EZWxpbWl0ZWRfKGEpO2Zvcih2YXIgZD0wO2Q8Yy5sZW5ndGg7ZCsrKXRoaXMuZW5jb2Rlcl8ud3JpdGVVbnNpZ25lZFZhcmludDMyKHBhcnNlSW50KGNbZF0sMTApKTt0aGlzLmVuZERlbGltaXRlZF8oYSl9fTsKTS53cml0ZVBhY2tlZFVpbnQ2ND1mdW5jdGlvbihhLGMpe2lmKG51bGwhPWMmJmMubGVuZ3RoKXthPXRoaXMuYmVnaW5EZWxpbWl0ZWRfKGEpO2Zvcih2YXIgZD0wO2Q8Yy5sZW5ndGg7ZCsrKXRoaXMuZW5jb2Rlcl8ud3JpdGVVbnNpZ25lZFZhcmludDY0KGNbZF0pO3RoaXMuZW5kRGVsaW1pdGVkXyhhKX19O00ud3JpdGVQYWNrZWRVaW50NjRTdHJpbmc9ZnVuY3Rpb24oYSxjKXtpZihudWxsIT1jJiZjLmxlbmd0aCl7YT10aGlzLmJlZ2luRGVsaW1pdGVkXyhhKTtmb3IodmFyIGQ9MDtkPGMubGVuZ3RoO2QrKyl7dmFyIGY9S2MoY1tkXSk7dGhpcy5lbmNvZGVyXy53cml0ZVNwbGl0VmFyaW50NjQoZi5sbyxmLmhpKX10aGlzLmVuZERlbGltaXRlZF8oYSl9fTsKTS53cml0ZVBhY2tlZFNpbnQzMj1mdW5jdGlvbihhLGMpe2lmKG51bGwhPWMmJmMubGVuZ3RoKXthPXRoaXMuYmVnaW5EZWxpbWl0ZWRfKGEpO2Zvcih2YXIgZD0wO2Q8Yy5sZW5ndGg7ZCsrKXRoaXMuZW5jb2Rlcl8ud3JpdGVaaWd6YWdWYXJpbnQzMihjW2RdKTt0aGlzLmVuZERlbGltaXRlZF8oYSl9fTtNLndyaXRlUGFja2VkU2ludDY0PWZ1bmN0aW9uKGEsYyl7aWYobnVsbCE9YyYmYy5sZW5ndGgpe2E9dGhpcy5iZWdpbkRlbGltaXRlZF8oYSk7Zm9yKHZhciBkPTA7ZDxjLmxlbmd0aDtkKyspdGhpcy5lbmNvZGVyXy53cml0ZVppZ3phZ1ZhcmludDY0KGNbZF0pO3RoaXMuZW5kRGVsaW1pdGVkXyhhKX19OwpNLndyaXRlUGFja2VkU2ludDY0U3RyaW5nPWZ1bmN0aW9uKGEsYyl7aWYobnVsbCE9YyYmYy5sZW5ndGgpe2E9dGhpcy5iZWdpbkRlbGltaXRlZF8oYSk7Zm9yKHZhciBkPTA7ZDxjLmxlbmd0aDtkKyspdGhpcy5lbmNvZGVyXy53cml0ZVppZ3phZ1ZhcmludDY0KHBhcnNlSW50KGNbZF0sMTApKTt0aGlzLmVuZERlbGltaXRlZF8oYSl9fTtNLndyaXRlUGFja2VkRml4ZWQzMj1mdW5jdGlvbihhLGMpe2lmKG51bGwhPWMmJmMubGVuZ3RoKWZvcih0aGlzLndyaXRlRmllbGRIZWFkZXJfKGEsMiksdGhpcy5lbmNvZGVyXy53cml0ZVVuc2lnbmVkVmFyaW50MzIoNCpjLmxlbmd0aCksYT0wO2E8Yy5sZW5ndGg7YSsrKXRoaXMuZW5jb2Rlcl8ud3JpdGVVaW50MzIoY1thXSl9OwpNLndyaXRlUGFja2VkRml4ZWQ2ND1mdW5jdGlvbihhLGMpe2lmKG51bGwhPWMmJmMubGVuZ3RoKWZvcih0aGlzLndyaXRlRmllbGRIZWFkZXJfKGEsMiksdGhpcy5lbmNvZGVyXy53cml0ZVVuc2lnbmVkVmFyaW50MzIoOCpjLmxlbmd0aCksYT0wO2E8Yy5sZW5ndGg7YSsrKXRoaXMuZW5jb2Rlcl8ud3JpdGVVaW50NjQoY1thXSl9O00ud3JpdGVQYWNrZWRGaXhlZDY0U3RyaW5nPWZ1bmN0aW9uKGEsYyl7aWYobnVsbCE9YyYmYy5sZW5ndGgpZm9yKHRoaXMud3JpdGVGaWVsZEhlYWRlcl8oYSwyKSx0aGlzLmVuY29kZXJfLndyaXRlVW5zaWduZWRWYXJpbnQzMig4KmMubGVuZ3RoKSxhPTA7YTxjLmxlbmd0aDthKyspe3ZhciBkPUtjKGNbYV0pO3RoaXMuZW5jb2Rlcl8ud3JpdGVTcGxpdEZpeGVkNjQoZC5sbyxkLmhpKX19OwpNLndyaXRlUGFja2VkU2ZpeGVkMzI9ZnVuY3Rpb24oYSxjKXtpZihudWxsIT1jJiZjLmxlbmd0aClmb3IodGhpcy53cml0ZUZpZWxkSGVhZGVyXyhhLDIpLHRoaXMuZW5jb2Rlcl8ud3JpdGVVbnNpZ25lZFZhcmludDMyKDQqYy5sZW5ndGgpLGE9MDthPGMubGVuZ3RoO2ErKyl0aGlzLmVuY29kZXJfLndyaXRlSW50MzIoY1thXSl9O00ud3JpdGVQYWNrZWRTZml4ZWQ2ND1mdW5jdGlvbihhLGMpe2lmKG51bGwhPWMmJmMubGVuZ3RoKWZvcih0aGlzLndyaXRlRmllbGRIZWFkZXJfKGEsMiksdGhpcy5lbmNvZGVyXy53cml0ZVVuc2lnbmVkVmFyaW50MzIoOCpjLmxlbmd0aCksYT0wO2E8Yy5sZW5ndGg7YSsrKXRoaXMuZW5jb2Rlcl8ud3JpdGVJbnQ2NChjW2FdKX07Ck0ud3JpdGVQYWNrZWRTZml4ZWQ2NFN0cmluZz1mdW5jdGlvbihhLGMpe2lmKG51bGwhPWMmJmMubGVuZ3RoKWZvcih0aGlzLndyaXRlRmllbGRIZWFkZXJfKGEsMiksdGhpcy5lbmNvZGVyXy53cml0ZVVuc2lnbmVkVmFyaW50MzIoOCpjLmxlbmd0aCksYT0wO2E8Yy5sZW5ndGg7YSsrKXRoaXMuZW5jb2Rlcl8ud3JpdGVJbnQ2NFN0cmluZyhjW2FdKX07TS53cml0ZVBhY2tlZEZsb2F0PWZ1bmN0aW9uKGEpe2lmKG51bGwhPWEmJmEubGVuZ3RoKXt0aGlzLndyaXRlRmllbGRIZWFkZXJfKDEsMik7dGhpcy5lbmNvZGVyXy53cml0ZVVuc2lnbmVkVmFyaW50MzIoNCphLmxlbmd0aCk7Zm9yKHZhciBjPTA7YzxhLmxlbmd0aDtjKyspdGhpcy5lbmNvZGVyXy53cml0ZUZsb2F0KGFbY10pfX07Ck0ud3JpdGVQYWNrZWREb3VibGU9ZnVuY3Rpb24oYSxjKXtpZihudWxsIT1jJiZjLmxlbmd0aClmb3IodGhpcy53cml0ZUZpZWxkSGVhZGVyXyhhLDIpLHRoaXMuZW5jb2Rlcl8ud3JpdGVVbnNpZ25lZFZhcmludDMyKDgqYy5sZW5ndGgpLGE9MDthPGMubGVuZ3RoO2ErKyl0aGlzLmVuY29kZXJfLndyaXRlRG91YmxlKGNbYV0pfTtNLndyaXRlUGFja2VkQm9vbD1mdW5jdGlvbihhLGMpe2lmKG51bGwhPWMmJmMubGVuZ3RoKWZvcih0aGlzLndyaXRlRmllbGRIZWFkZXJfKGEsMiksdGhpcy5lbmNvZGVyXy53cml0ZVVuc2lnbmVkVmFyaW50MzIoYy5sZW5ndGgpLGE9MDthPGMubGVuZ3RoO2ErKyl0aGlzLmVuY29kZXJfLndyaXRlQm9vbChjW2FdKX07Ck0ud3JpdGVQYWNrZWRFbnVtPWZ1bmN0aW9uKGEsYyl7aWYobnVsbCE9YyYmYy5sZW5ndGgpe2E9dGhpcy5iZWdpbkRlbGltaXRlZF8oYSk7Zm9yKHZhciBkPTA7ZDxjLmxlbmd0aDtkKyspdGhpcy5lbmNvZGVyXy53cml0ZUVudW0oY1tkXSk7dGhpcy5lbmREZWxpbWl0ZWRfKGEpfX07TS53cml0ZVBhY2tlZEZpeGVkSGFzaDY0PWZ1bmN0aW9uKGEsYyl7aWYobnVsbCE9YyYmYy5sZW5ndGgpZm9yKHRoaXMud3JpdGVGaWVsZEhlYWRlcl8oYSwyKSx0aGlzLmVuY29kZXJfLndyaXRlVW5zaWduZWRWYXJpbnQzMig4KmMubGVuZ3RoKSxhPTA7YTxjLmxlbmd0aDthKyspdGhpcy5lbmNvZGVyXy53cml0ZUZpeGVkSGFzaDY0KGNbYV0pfTsKTS53cml0ZVBhY2tlZFZhcmludEhhc2g2ND1mdW5jdGlvbihhLGMpe2lmKG51bGwhPWMmJmMubGVuZ3RoKXthPXRoaXMuYmVnaW5EZWxpbWl0ZWRfKGEpO2Zvcih2YXIgZD0wO2Q8Yy5sZW5ndGg7ZCsrKXRoaXMuZW5jb2Rlcl8ud3JpdGVWYXJpbnRIYXNoNjQoY1tkXSk7dGhpcy5lbmREZWxpbWl0ZWRfKGEpfX07Ci8vfn5XRUJQQVRIfn5leHRlcm5hbC9jb21fZ29vZ2xlX3Byb3RvYnVmX2pzL21hcC5qcwpmdW5jdGlvbiBlZShhLGMpe3RoaXMuYXJyXz1hO3RoaXMudmFsdWVDdG9yXz1jO3RoaXMubWFwXz17fTt0aGlzLmFyckNsZWFuPSEwOzA8dGhpcy5hcnJfLmxlbmd0aCYmdGhpcy5sb2FkRnJvbUFycmF5XygpfWVlLnByb3RvdHlwZS5sb2FkRnJvbUFycmF5Xz1mdW5jdGlvbigpe2Zvcih2YXIgYT0wO2E8dGhpcy5hcnJfLmxlbmd0aDthKyspe3ZhciBjPXRoaXMuYXJyX1thXSxkPWNbMF07dGhpcy5tYXBfW2QudG9TdHJpbmcoKV09bmV3IGZlKGQsY1sxXSl9dGhpcy5hcnJDbGVhbj0hMH07CmVlLnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKCl7aWYodGhpcy5hcnJDbGVhbil7aWYodGhpcy52YWx1ZUN0b3JfKXt2YXIgYT10aGlzLm1hcF8sYztmb3IoYyBpbiBhKWlmKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChhLGMpKXt2YXIgZD1hW2NdLnZhbHVlV3JhcHBlcjtkJiZkLnRvQXJyYXkoKX19fWVsc2V7dGhpcy5hcnJfLmxlbmd0aD0wO2E9dGhpcy5zdHJpbmdLZXlzXygpO2Euc29ydCgpO2ZvcihjPTA7YzxhLmxlbmd0aDtjKyspe3ZhciBmPXRoaXMubWFwX1thW2NdXTsoZD1mLnZhbHVlV3JhcHBlcikmJmQudG9BcnJheSgpO3RoaXMuYXJyXy5wdXNoKFtmLmtleSxmLnZhbHVlXSl9dGhpcy5hcnJDbGVhbj0hMH1yZXR1cm4gdGhpcy5hcnJffTsKZWUucHJvdG90eXBlLnRvT2JqZWN0PWZ1bmN0aW9uKGEsYyl7Zm9yKHZhciBkPXRoaXMudG9BcnJheSgpLGY9W10sZz0wO2c8ZC5sZW5ndGg7ZysrKXt2YXIgbD10aGlzLm1hcF9bZFtnXVswXS50b1N0cmluZygpXTt0aGlzLndyYXBFbnRyeV8obCk7dmFyIGs9bC52YWx1ZVdyYXBwZXI7az9mLnB1c2goW2wua2V5LGMoYSxrKV0pOmYucHVzaChbbC5rZXksbC52YWx1ZV0pfXJldHVybiBmfTtmdW5jdGlvbiB5ZShhKXt0aGlzLmlkeF89MDt0aGlzLmFycl89YX15ZS5wcm90b3R5cGUubmV4dD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlkeF88dGhpcy5hcnJfLmxlbmd0aD97ZG9uZTohMSx2YWx1ZTp0aGlzLmFycl9bdGhpcy5pZHhfKytdfTp7ZG9uZTohMCx2YWx1ZTp2b2lkIDB9fTsidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmKHllLnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KTtNPWVlLnByb3RvdHlwZTtNLmdldExlbmd0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnN0cmluZ0tleXNfKCkubGVuZ3RofTsKTS5jbGVhcj1mdW5jdGlvbigpe3RoaXMubWFwXz17fTt0aGlzLmFyckNsZWFuPSExfTtNLmRlbD1mdW5jdGlvbihhKXthPWEudG9TdHJpbmcoKTt2YXIgYz10aGlzLm1hcF8uaGFzT3duUHJvcGVydHkoYSk7ZGVsZXRlIHRoaXMubWFwX1thXTt0aGlzLmFyckNsZWFuPSExO3JldHVybiBjfTtNLmdldEVudHJ5TGlzdD1mdW5jdGlvbigpe3ZhciBhPVtdLGM9dGhpcy5zdHJpbmdLZXlzXygpO2Muc29ydCgpO2Zvcih2YXIgZD0wO2Q8Yy5sZW5ndGg7ZCsrKXt2YXIgZj10aGlzLm1hcF9bY1tkXV07YS5wdXNoKFtmLmtleSxmLnZhbHVlXSl9cmV0dXJuIGF9O00uZW50cmllcz1mdW5jdGlvbigpe3ZhciBhPVtdLGM9dGhpcy5zdHJpbmdLZXlzXygpO2Muc29ydCgpO2Zvcih2YXIgZD0wO2Q8Yy5sZW5ndGg7ZCsrKXt2YXIgZj10aGlzLm1hcF9bY1tkXV07YS5wdXNoKFtmLmtleSx0aGlzLndyYXBFbnRyeV8oZildKX1yZXR1cm4gbmV3IHllKGEpfTsKTS5rZXlzPWZ1bmN0aW9uKCl7dmFyIGE9W10sYz10aGlzLnN0cmluZ0tleXNfKCk7Yy5zb3J0KCk7Zm9yKHZhciBkPTA7ZDxjLmxlbmd0aDtkKyspYS5wdXNoKHRoaXMubWFwX1tjW2RdXS5rZXkpO3JldHVybiBuZXcgeWUoYSl9O00udmFsdWVzPWZ1bmN0aW9uKCl7dmFyIGE9W10sYz10aGlzLnN0cmluZ0tleXNfKCk7Yy5zb3J0KCk7Zm9yKHZhciBkPTA7ZDxjLmxlbmd0aDtkKyspYS5wdXNoKHRoaXMud3JhcEVudHJ5Xyh0aGlzLm1hcF9bY1tkXV0pKTtyZXR1cm4gbmV3IHllKGEpfTtNLmZvckVhY2g9ZnVuY3Rpb24oYSxjKXt2YXIgZD10aGlzLnN0cmluZ0tleXNfKCk7ZC5zb3J0KCk7Zm9yKHZhciBmPTA7ZjxkLmxlbmd0aDtmKyspe3ZhciBnPXRoaXMubWFwX1tkW2ZdXTthLmNhbGwoYyx0aGlzLndyYXBFbnRyeV8oZyksZy5rZXksdGhpcyl9fTsKTS5zZXQ9ZnVuY3Rpb24oYSxjKXt2YXIgZD1uZXcgZmUoYSk7dGhpcy52YWx1ZUN0b3JfPyhkLnZhbHVlV3JhcHBlcj1jLGQudmFsdWU9Yy50b0FycmF5KCkpOmQudmFsdWU9Yzt0aGlzLm1hcF9bYS50b1N0cmluZygpXT1kO3RoaXMuYXJyQ2xlYW49ITE7cmV0dXJuIHRoaXN9O00ud3JhcEVudHJ5Xz1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy52YWx1ZUN0b3JfPyhhLnZhbHVlV3JhcHBlcnx8KGEudmFsdWVXcmFwcGVyPW5ldyB0aGlzLnZhbHVlQ3Rvcl8oYS52YWx1ZSkpLGEudmFsdWVXcmFwcGVyKTphLnZhbHVlfTtNLmdldD1mdW5jdGlvbihhKXtpZihhPXRoaXMubWFwX1thLnRvU3RyaW5nKCldKXJldHVybiB0aGlzLndyYXBFbnRyeV8oYSl9O00uaGFzPWZ1bmN0aW9uKGEpe3JldHVybiBhLnRvU3RyaW5nKClpbiB0aGlzLm1hcF99OwpNLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbihhLGMsZCxmLGcpe3ZhciBsPXRoaXMuc3RyaW5nS2V5c18oKTtsLnNvcnQoKTtmb3IodmFyIGs9MDtrPGwubGVuZ3RoO2srKyl7dmFyIG09dGhpcy5tYXBfW2xba11dO2MuYmVnaW5TdWJNZXNzYWdlKGEpO2QuY2FsbChjLDEsbS5rZXkpO3RoaXMudmFsdWVDdG9yXz9mLmNhbGwoYywyLHRoaXMud3JhcEVudHJ5XyhtKSxnKTpmLmNhbGwoYywyLG0udmFsdWUpO2MuZW5kU3ViTWVzc2FnZSgpfX07ZnVuY3Rpb24gemUoYSxjLGQpe2Zvcih2YXIgZj1iZS5wcm90b3R5cGUucmVhZFN0cmluZyxnPWJlLnByb3RvdHlwZS5yZWFkTWVzc2FnZSxsPSIiLGs9dm9pZCAwO2MubmV4dEZpZWxkKCkmJiFjLmlzRW5kR3JvdXAoKTspe3ZhciBtPWMuZ2V0RmllbGROdW1iZXIoKTsxPT1tP2w9Zi5jYWxsKGMpOjI9PW0mJihhLnZhbHVlQ3Rvcl8/KGs9bmV3IGEudmFsdWVDdG9yXyxnLmNhbGwoYyxrLGQpKTprPWcuY2FsbChjKSl9YS5zZXQobCxrKX0KTS5zdHJpbmdLZXlzXz1mdW5jdGlvbigpe3ZhciBhPXRoaXMubWFwXyxjPVtdLGQ7Zm9yKGQgaW4gYSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYSxkKSYmYy5wdXNoKGQpO3JldHVybiBjfTtmdW5jdGlvbiBmZShhLGMpe3RoaXMua2V5PWE7dGhpcy52YWx1ZT1jO3RoaXMudmFsdWVXcmFwcGVyPXZvaWQgMH07Ci8vfn5XRUJQQVRIfn5leHRlcm5hbC9jb21fZ29vZ2xlX3Byb3RvYnVmX2pzL21lc3NhZ2UuanMKZnVuY3Rpb24gQWUoKXt9dmFyIEJlPSJmdW5jdGlvbiI9PXR5cGVvZiBVaW50OEFycmF5O0FlLnByb3RvdHlwZS5nZXRKc1BiTWVzc2FnZUlkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWVzc2FnZUlkX307ZnVuY3Rpb24gQ2UoYSxjKXtyZXR1cm4gYythLmFycmF5SW5kZXhPZmZzZXRffWZ1bmN0aW9uIERlKGEsYyl7cmV0dXJuIGMtYS5hcnJheUluZGV4T2Zmc2V0X30KZnVuY3Rpb24gRWUoYSxjLGQsZil7YS53cmFwcGVyc189bnVsbDtjfHwoYz1bXSk7YS5tZXNzYWdlSWRfPXZvaWQgMDthLmFycmF5SW5kZXhPZmZzZXRfPS0xO2EuYXJyYXk9YztGZShhKTthLmNvbnZlcnRlZFByaW1pdGl2ZUZpZWxkc189e307aWYoZClmb3IoYz0wO2M8ZC5sZW5ndGg7YysrKXt2YXIgZz1kW2NdO2c8YS5waXZvdF8/KGc9Q2UoYSxnKSxhLmFycmF5W2ddPWEuYXJyYXlbZ118fEdlKTooSGUoYSksYS5leHRlbnNpb25PYmplY3RfW2ddPWEuZXh0ZW5zaW9uT2JqZWN0X1tnXXx8R2UpfWlmKGYmJmYubGVuZ3RoKWZvcihjPTA7YzxmLmxlbmd0aDtjKyspSWUoYSxmW2NdKX12YXIgR2U9T2JqZWN0LmZyZWV6ZT9PYmplY3QuZnJlZXplKFtdKTpbXTtmdW5jdGlvbiBKZShhKXtyZXR1cm4gTmIoYSl9ZnVuY3Rpb24gdWYoYSl7cmV0dXJuIG51bGwhPT1hJiYib2JqZWN0Ij09dHlwZW9mIGEmJiFKZShhKSYmIShCZSYmYSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpfQpmdW5jdGlvbiBGZShhKXt2YXIgYz1hLmFycmF5Lmxlbmd0aDtpZihjKXstLWM7dmFyIGQ9YS5hcnJheVtjXTtpZih1ZihkKSl7YS5waXZvdF89RGUoYSxjKTthLmV4dGVuc2lvbk9iamVjdF89ZDtyZXR1cm59fWEucGl2b3RfPU51bWJlci5NQVhfVkFMVUV9ZnVuY3Rpb24gSGUoYSl7dmFyIGM9Q2UoYSxhLnBpdm90Xyk7YS5hcnJheVtjXXx8KGEuZXh0ZW5zaW9uT2JqZWN0Xz1hLmFycmF5W2NdPXt9KX1mdW5jdGlvbiB2ZihhLGMsZCl7Zm9yKHZhciBmPVtdLGc9MDtnPGEubGVuZ3RoO2crKylmW2ddPWMuY2FsbChhW2ddLGQsYVtnXSk7cmV0dXJuIGZ9ZnVuY3Rpb24gd2YoYSxjKXtpZihjPGEucGl2b3RfKXtjPUNlKGEsYyk7dmFyIGQ9YS5hcnJheVtjXTtyZXR1cm4gZD09PUdlP2EuYXJyYXlbY109W106ZH1pZihhLmV4dGVuc2lvbk9iamVjdF8pcmV0dXJuIGQ9YS5leHRlbnNpb25PYmplY3RfW2NdLGQ9PT1HZT9hLmV4dGVuc2lvbk9iamVjdF9bY109W106ZH0KZnVuY3Rpb24geGYoYSxjKXtyZXR1cm4gd2YoYSxjKX1mdW5jdGlvbiB5ZihhLGMpe2E9d2YoYSxjKTtyZXR1cm4gbnVsbD09YT9hOithfWZ1bmN0aW9uIHpmKGEpe3ZhciBjPXhmKGEsMSk7YS5jb252ZXJ0ZWRQcmltaXRpdmVGaWVsZHNffHwoYS5jb252ZXJ0ZWRQcmltaXRpdmVGaWVsZHNfPXt9KTtpZighYS5jb252ZXJ0ZWRQcmltaXRpdmVGaWVsZHNfWzFdKXtmb3IodmFyIGQ9MDtkPGMubGVuZ3RoO2QrKyljW2RdPStjW2RdO2EuY29udmVydGVkUHJpbWl0aXZlRmllbGRzX1sxXT0hMH1yZXR1cm4gY31mdW5jdGlvbiBBZihhKXtpZihudWxsPT1hfHxHYihhKSlyZXR1cm4gYTtpZihCZSYmYSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpcmV0dXJuIHRjKGEpO2JjKCJDYW5ub3QgY29lcmNlIHRvIGI2NCBzdHJpbmc6ICIrSWIoYSkpO3JldHVybiBudWxsfQpmdW5jdGlvbiBCZihhKXtpZihudWxsPT1hfHxhIGluc3RhbmNlb2YgVWludDhBcnJheSlyZXR1cm4gYTtpZihHYihhKSlyZXR1cm4gRmMoYSk7YmMoIkNhbm5vdCBjb2VyY2UgdG8gVWludDhBcnJheTogIitJYihhKSk7cmV0dXJuIG51bGx9ZnVuY3Rpb24gQ2YoYSl7RGYoYSk7cmV0dXJuIWEubGVuZ3RofHxHYihhWzBdKT9hOmVjKGEsQWYpfWZ1bmN0aW9uIEVmKGEpe0RmKGEpO3JldHVybiFhLmxlbmd0aHx8YVswXWluc3RhbmNlb2YgVWludDhBcnJheT9hOmVjKGEsQmYpfWZ1bmN0aW9uIERmKGEpe2lmKGEmJjE8YS5sZW5ndGgpe3ZhciBjPUliKGFbMF0pO2RjKGEsZnVuY3Rpb24oZCl7SWIoZCkhPWMmJmJjKCJJbmNvbnNpc3RlbnQgdHlwZSBpbiBKU1BCIHJlcGVhdGVkIGZpZWxkIGFycmF5LiBHb3QgIitJYihkKSsiIGV4cGVjdGVkICIrYyl9KX19ZnVuY3Rpb24gRmYoYSxjLGQpe2E9d2YoYSxjKTtyZXR1cm4gbnVsbD09YT9kOmF9CmZ1bmN0aW9uIEdmKGEsYyl7YT15ZihhLGMpO3JldHVybiBudWxsPT1hPzA6YX1mdW5jdGlvbiBIZihhLGMsZCl7YS53cmFwcGVyc198fChhLndyYXBwZXJzXz17fSk7aWYoMSBpbiBhLndyYXBwZXJzXylyZXR1cm4gYS53cmFwcGVyc19bMV07aWYoIWMpcmV0dXJuIGM9d2YoYSwxKSxjfHwoYz1bXSxJZihhLDEsYykpLGEud3JhcHBlcnNfWzFdPW5ldyBlZShjLGQpfWZ1bmN0aW9uIElmKGEsYyxkKXtjPGEucGl2b3RfP2EuYXJyYXlbQ2UoYSxjKV09ZDooSGUoYSksYS5leHRlbnNpb25PYmplY3RfW2NdPWQpfWZ1bmN0aW9uIEpmKGEsYyxkKXtLZihhLGMsZCwwKX1mdW5jdGlvbiBMZihhLGMsZCl7S2YoYSxjLGQsMCl9ZnVuY3Rpb24gTWYoYSxjLGQpe0tmKGEsYyxkLCIiKX1mdW5jdGlvbiBOZihhLGMsZCl7S2YoYSxjLGQsMCl9ZnVuY3Rpb24gS2YoYSxjLGQsZil7ZCE9PWY/SWYoYSxjLGQpOmEuYXJyYXlbQ2UoYSxjKV09bnVsbH0KZnVuY3Rpb24gRmcoYSxjLGQpe2E9eGYoYSwxKTt2b2lkIDAhPWQ/YS5zcGxpY2UoZCwwLGMpOmEucHVzaChjKX1mdW5jdGlvbiBHZyhhLGMsZCxmKXsoZD1JZShhLGQpKSYmZCE9PWMmJnZvaWQgMCE9PWYmJihhLndyYXBwZXJzXyYmZCBpbiBhLndyYXBwZXJzXyYmKGEud3JhcHBlcnNfW2RdPXZvaWQgMCksSWYoYSxkLHZvaWQgMCkpO0lmKGEsYyxmKX1mdW5jdGlvbiBJZShhLGMpe2Zvcih2YXIgZCxmLGc9MDtnPGMubGVuZ3RoO2crKyl7dmFyIGw9Y1tnXSxrPXdmKGEsbCk7bnVsbCE9ayYmKGQ9bCxmPWssSWYoYSxsLHZvaWQgMCkpfXJldHVybiBkPyhJZihhLGQsZiksZCk6MH1mdW5jdGlvbiBIZyhhLGMsZCl7YS53cmFwcGVyc198fChhLndyYXBwZXJzXz17fSk7aWYoIWEud3JhcHBlcnNfW2RdKXt2YXIgZj13ZihhLGQpO2YmJihhLndyYXBwZXJzX1tkXT1uZXcgYyhmKSl9cmV0dXJuIGEud3JhcHBlcnNfW2RdfQpmdW5jdGlvbiBJZyhhLGMsZCl7SmcoYSxjLGQpO2M9YS53cmFwcGVyc19bZF07Yz09R2UmJihjPWEud3JhcHBlcnNfW2RdPVtdKTtyZXR1cm4gY31mdW5jdGlvbiBKZyhhLGMsZCl7YS53cmFwcGVyc198fChhLndyYXBwZXJzXz17fSk7aWYoIWEud3JhcHBlcnNfW2RdKXtmb3IodmFyIGY9eGYoYSxkKSxnPVtdLGw9MDtsPGYubGVuZ3RoO2wrKylnW2xdPW5ldyBjKGZbbF0pO2Eud3JhcHBlcnNfW2RdPWd9fWZ1bmN0aW9uIEtnKGEsYyxkKXthLndyYXBwZXJzX3x8KGEud3JhcHBlcnNfPXt9KTt2YXIgZj1kP2QudG9BcnJheSgpOmQ7YS53cmFwcGVyc19bY109ZDtJZihhLGMsZil9ZnVuY3Rpb24gTGcoYSxjLGQsZil7YS53cmFwcGVyc198fChhLndyYXBwZXJzXz17fSk7dmFyIGc9Zj9mLnRvQXJyYXkoKTpmO2Eud3JhcHBlcnNfW2NdPWY7R2coYSxjLGQsZyl9CmZ1bmN0aW9uIE1nKGEsYyxkKXthLndyYXBwZXJzX3x8KGEud3JhcHBlcnNfPXt9KTtkPWR8fFtdO2Zvcih2YXIgZj1bXSxnPTA7ZzxkLmxlbmd0aDtnKyspZltnXT1kW2ddLnRvQXJyYXkoKTthLndyYXBwZXJzX1tjXT1kO0lmKGEsYyxmKX1mdW5jdGlvbiBOZyhhLGMsZCxmLGcpe0pnKGEsZixjKTt2YXIgbD1hLndyYXBwZXJzX1tjXTtsfHwobD1hLndyYXBwZXJzX1tjXT1bXSk7ZD1kP2Q6bmV3IGY7YT14ZihhLGMpO3ZvaWQgMCE9Zz8obC5zcGxpY2UoZywwLGQpLGEuc3BsaWNlKGcsMCxkLnRvQXJyYXkoKSkpOihsLnB1c2goZCksYS5wdXNoKGQudG9BcnJheSgpKSk7cmV0dXJuIGR9TT1BZS5wcm90b3R5cGU7Ck0uc3luY01hcEZpZWxkc189ZnVuY3Rpb24oKXtpZih0aGlzLndyYXBwZXJzXylmb3IodmFyIGEgaW4gdGhpcy53cmFwcGVyc18pe3ZhciBjPXRoaXMud3JhcHBlcnNfW2FdO2lmKE5iKGMpKWZvcih2YXIgZD0wO2Q8Yy5sZW5ndGg7ZCsrKWNbZF0mJmNbZF0udG9BcnJheSgpO2Vsc2UgYyYmYy50b0FycmF5KCl9fTtNLnRvQXJyYXk9ZnVuY3Rpb24oKXt0aGlzLnN5bmNNYXBGaWVsZHNfKCk7cmV0dXJuIHRoaXMuYXJyYXl9O00udG9TdHJpbmc9ZnVuY3Rpb24oKXt0aGlzLnN5bmNNYXBGaWVsZHNfKCk7cmV0dXJuIHRoaXMuYXJyYXkudG9TdHJpbmcoKX07Ck0uZ2V0RXh0ZW5zaW9uPWZ1bmN0aW9uKGEpe2lmKHRoaXMuZXh0ZW5zaW9uT2JqZWN0Xyl7dGhpcy53cmFwcGVyc198fCh0aGlzLndyYXBwZXJzXz17fSk7dmFyIGM9YS5maWVsZEluZGV4O2lmKGEuaXNSZXBlYXRlZCl7aWYoYS5pc01lc3NhZ2VUeXBlKCkpcmV0dXJuIHRoaXMud3JhcHBlcnNfW2NdfHwodGhpcy53cmFwcGVyc19bY109ZWModGhpcy5leHRlbnNpb25PYmplY3RfW2NdfHxbXSxmdW5jdGlvbihkKXtyZXR1cm4gbmV3IGEuY3RvcihkKX0pKSx0aGlzLndyYXBwZXJzX1tjXX1lbHNlIGlmKGEuaXNNZXNzYWdlVHlwZSgpKXJldHVybiF0aGlzLndyYXBwZXJzX1tjXSYmdGhpcy5leHRlbnNpb25PYmplY3RfW2NdJiYodGhpcy53cmFwcGVyc19bY109bmV3IGEuY3Rvcih0aGlzLmV4dGVuc2lvbk9iamVjdF9bY10pKSx0aGlzLndyYXBwZXJzX1tjXTtyZXR1cm4gdGhpcy5leHRlbnNpb25PYmplY3RfW2NdfX07Ck0uc2V0RXh0ZW5zaW9uPWZ1bmN0aW9uKGEsYyl7dGhpcy53cmFwcGVyc198fCh0aGlzLndyYXBwZXJzXz17fSk7SGUodGhpcyk7dmFyIGQ9YS5maWVsZEluZGV4O2EuaXNSZXBlYXRlZD8oYz1jfHxbXSxhLmlzTWVzc2FnZVR5cGUoKT8odGhpcy53cmFwcGVyc19bZF09Yyx0aGlzLmV4dGVuc2lvbk9iamVjdF9bZF09ZWMoYyxmdW5jdGlvbihmKXtyZXR1cm4gZi50b0FycmF5KCl9KSk6dGhpcy5leHRlbnNpb25PYmplY3RfW2RdPWMpOmEuaXNNZXNzYWdlVHlwZSgpPyh0aGlzLndyYXBwZXJzX1tkXT1jLHRoaXMuZXh0ZW5zaW9uT2JqZWN0X1tkXT1jP2MudG9BcnJheSgpOmMpOnRoaXMuZXh0ZW5zaW9uT2JqZWN0X1tkXT1jO3JldHVybiB0aGlzfTtNLmNsb25lTWVzc2FnZT1mdW5jdGlvbigpe3JldHVybiBPZyh0aGlzKX07TS5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBPZyh0aGlzKX07CmZ1bmN0aW9uIE9nKGEpe3JldHVybiBuZXcgYS5jb25zdHJ1Y3RvcihQZyhhLnRvQXJyYXkoKSkpfWZ1bmN0aW9uIFBnKGEpe2lmKE5iKGEpKXtmb3IodmFyIGM9QXJyYXkoYS5sZW5ndGgpLGQ9MDtkPGEubGVuZ3RoO2QrKyl7dmFyIGY9YVtkXTtudWxsIT1mJiYoY1tkXT0ib2JqZWN0Ij09dHlwZW9mIGY/UGcoZik6Zil9cmV0dXJuIGN9aWYoQmUmJmEgaW5zdGFuY2VvZiBVaW50OEFycmF5KXJldHVybiBuZXcgVWludDhBcnJheShhKTtjPXt9O2ZvcihkIGluIGEpZj1hW2RdLG51bGwhPWYmJihjW2RdPSJvYmplY3QiPT10eXBlb2YgZj9QZyhmKTpmKTtyZXR1cm4gY307Ci8vfn5XRUJQQVRIfn5leHRlcm5hbC9jb21fZ29vZ2xlX3Byb3RvYnVmX2pzL2RlYnVnLmpzCi8vfn5XRUJQQVRIfn5iYXplbC1vdXQvaG9zdC9iaW4vZXh0ZXJuYWwvb3JnX3RlbnNvcmZsb3cvdGVuc29yZmxvdy9jb3JlL2V4YW1wbGVfcHJvdG9zLmpzCmZ1bmN0aW9uIFFnKGEpe0VlKHRoaXMsYSxSZyxudWxsKX1RYihRZyxBZSk7ZnVuY3Rpb24gU2coYSl7RWUodGhpcyxhLFRnLG51bGwpfVFiKFNnLEFlKTtmdW5jdGlvbiBVZyhhKXtFZSh0aGlzLGEsVmcsbnVsbCl9UWIoVWcsQWUpO2Z1bmN0aW9uIFdnKGEpe0VlKHRoaXMsYSxudWxsLFhnKX1RYihXZyxBZSk7ZnVuY3Rpb24gWWcoYSl7RWUodGhpcyxhLG51bGwsbnVsbCl9UWIoWWcsQWUpO2Z1bmN0aW9uIFpnKGEpe0VlKHRoaXMsYSxKaCxudWxsKX1RYihaZyxBZSk7ZnVuY3Rpb24gS2goYSl7RWUodGhpcyxhLG51bGwsbnVsbCl9UWIoS2gsQWUpO3ZhciBSZz1bMV07TT1RZy5wcm90b3R5cGU7TS50b09iamVjdD1mdW5jdGlvbihhKXtyZXR1cm4gTGgoYSx0aGlzKX07ZnVuY3Rpb24gTGgoYSxjKXt2YXIgZD17dmFsdWVMaXN0OmMuZ2V0VmFsdWVMaXN0X2FzQjY0KCl9O2EmJihkLiRqc3BiTWVzc2FnZUluc3RhbmNlPWMpO3JldHVybiBkfQpmdW5jdGlvbiBNaChhLGMpe2Zvcig7Yy5uZXh0RmllbGQoKSYmIWMuaXNFbmRHcm91cCgpOylzd2l0Y2goYy5nZXRGaWVsZE51bWJlcigpKXtjYXNlIDE6dmFyIGQ9Yy5yZWFkQnl0ZXMoKTthLmFkZFZhbHVlKGQpO2JyZWFrO2RlZmF1bHQ6Yy5za2lwRmllbGQoKX1yZXR1cm4gYX1NLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciBhPW5ldyBkZTtOaCh0aGlzLGEpO3JldHVybiBhLmdldFJlc3VsdEJ1ZmZlcigpfTtmdW5jdGlvbiBOaChhLGMpe2E9YS5nZXRWYWx1ZUxpc3RfYXNVOCgpOzA8YS5sZW5ndGgmJmMud3JpdGVSZXBlYXRlZEJ5dGVzKGEpfU0uZ2V0VmFsdWVMaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHhmKHRoaXMsMSl9O00uZ2V0VmFsdWVMaXN0X2FzQjY0PWZ1bmN0aW9uKCl7cmV0dXJuIENmKHRoaXMuZ2V0VmFsdWVMaXN0KCkpfTtNLmdldFZhbHVlTGlzdF9hc1U4PWZ1bmN0aW9uKCl7cmV0dXJuIEVmKHRoaXMuZ2V0VmFsdWVMaXN0KCkpfTsKTS5zZXRWYWx1ZUxpc3Q9ZnVuY3Rpb24oYSl7SWYodGhpcywxLGF8fFtdKX07TS5hZGRWYWx1ZT1mdW5jdGlvbihhLGMpe0ZnKHRoaXMsYSxjKX07TS5jbGVhclZhbHVlTGlzdD1mdW5jdGlvbigpe3RoaXMuc2V0VmFsdWVMaXN0KFtdKX07dmFyIFRnPVsxXTtNPVNnLnByb3RvdHlwZTtNLnRvT2JqZWN0PWZ1bmN0aW9uKGEpe3JldHVybiBPaChhLHRoaXMpfTtmdW5jdGlvbiBPaChhLGMpe3ZhciBkLGY9e3ZhbHVlTGlzdDpudWxsPT0oZD16ZihjKSk/dm9pZCAwOmR9O2EmJihmLiRqc3BiTWVzc2FnZUluc3RhbmNlPWMpO3JldHVybiBmfWZ1bmN0aW9uIFBoKGEsYyl7Zm9yKDtjLm5leHRGaWVsZCgpJiYhYy5pc0VuZEdyb3VwKCk7KXN3aXRjaChjLmdldEZpZWxkTnVtYmVyKCkpe2Nhc2UgMTp2YXIgZD1jLnJlYWRQYWNrZWRGbG9hdCgpO2Euc2V0VmFsdWVMaXN0KGQpO2JyZWFrO2RlZmF1bHQ6Yy5za2lwRmllbGQoKX1yZXR1cm4gYX0KTS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgYT1uZXcgZGU7UWgodGhpcyxhKTtyZXR1cm4gYS5nZXRSZXN1bHRCdWZmZXIoKX07ZnVuY3Rpb24gUWgoYSxjKXthPWEuZ2V0VmFsdWVMaXN0KCk7MDxhLmxlbmd0aCYmYy53cml0ZVBhY2tlZEZsb2F0KGEpfU0uZ2V0VmFsdWVMaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHpmKHRoaXMpfTtNLnNldFZhbHVlTGlzdD1mdW5jdGlvbihhKXtJZih0aGlzLDEsYXx8W10pfTtNLmFkZFZhbHVlPWZ1bmN0aW9uKGEsYyl7RmcodGhpcyxhLGMpfTtNLmNsZWFyVmFsdWVMaXN0PWZ1bmN0aW9uKCl7dGhpcy5zZXRWYWx1ZUxpc3QoW10pfTt2YXIgVmc9WzFdO009VWcucHJvdG90eXBlO00udG9PYmplY3Q9ZnVuY3Rpb24oYSl7cmV0dXJuIFJoKGEsdGhpcyl9O2Z1bmN0aW9uIFJoKGEsYyl7dmFyIGQsZj17dmFsdWVMaXN0Om51bGw9PShkPXhmKGMsMSkpP3ZvaWQgMDpkfTthJiYoZi4kanNwYk1lc3NhZ2VJbnN0YW5jZT1jKTtyZXR1cm4gZn0KZnVuY3Rpb24gU2goYSxjKXtmb3IoO2MubmV4dEZpZWxkKCkmJiFjLmlzRW5kR3JvdXAoKTspc3dpdGNoKGMuZ2V0RmllbGROdW1iZXIoKSl7Y2FzZSAxOnZhciBkPWMucmVhZFBhY2tlZEludDY0KCk7YS5zZXRWYWx1ZUxpc3QoZCk7YnJlYWs7ZGVmYXVsdDpjLnNraXBGaWVsZCgpfXJldHVybiBhfU0uc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIGE9bmV3IGRlO1RoKHRoaXMsYSk7cmV0dXJuIGEuZ2V0UmVzdWx0QnVmZmVyKCl9O2Z1bmN0aW9uIFRoKGEsYyl7YT1hLmdldFZhbHVlTGlzdCgpOzA8YS5sZW5ndGgmJmMud3JpdGVQYWNrZWRJbnQ2NChhKX1NLmdldFZhbHVlTGlzdD1mdW5jdGlvbigpe3JldHVybiB4Zih0aGlzLDEpfTtNLnNldFZhbHVlTGlzdD1mdW5jdGlvbihhKXtJZih0aGlzLDEsYXx8W10pfTtNLmFkZFZhbHVlPWZ1bmN0aW9uKGEsYyl7RmcodGhpcyxhLGMpfTtNLmNsZWFyVmFsdWVMaXN0PWZ1bmN0aW9uKCl7dGhpcy5zZXRWYWx1ZUxpc3QoW10pfTsKdmFyIFhnPVtbMSwyLDNdXTtNPVdnLnByb3RvdHlwZTtNLmdldEtpbmRDYXNlPWZ1bmN0aW9uKCl7cmV0dXJuIEllKHRoaXMsWGdbMF0pfTtNLnRvT2JqZWN0PWZ1bmN0aW9uKGEpe3JldHVybiBVaChhLHRoaXMpfTtmdW5jdGlvbiBVaChhLGMpe3ZhciBkLGY9e2J5dGVzTGlzdDooZD1jLmdldEJ5dGVzTGlzdCgpKSYmTGgoYSxkKSxmbG9hdExpc3Q6KGQ9Yy5nZXRGbG9hdExpc3QoKSkmJk9oKGEsZCksaW50NjRMaXN0OihkPWMuZ2V0SW50NjRMaXN0KCkpJiZSaChhLGQpfTthJiYoZi4kanNwYk1lc3NhZ2VJbnN0YW5jZT1jKTtyZXR1cm4gZn0KZnVuY3Rpb24gVmgoYSxjKXtmb3IoO2MubmV4dEZpZWxkKCkmJiFjLmlzRW5kR3JvdXAoKTspc3dpdGNoKGMuZ2V0RmllbGROdW1iZXIoKSl7Y2FzZSAxOnZhciBkPW5ldyBRZztjLnJlYWRNZXNzYWdlKGQsTWgpO2Euc2V0Qnl0ZXNMaXN0KGQpO2JyZWFrO2Nhc2UgMjpkPW5ldyBTZztjLnJlYWRNZXNzYWdlKGQsUGgpO2Euc2V0RmxvYXRMaXN0KGQpO2JyZWFrO2Nhc2UgMzpkPW5ldyBVZztjLnJlYWRNZXNzYWdlKGQsU2gpO2Euc2V0SW50NjRMaXN0KGQpO2JyZWFrO2RlZmF1bHQ6Yy5za2lwRmllbGQoKX1yZXR1cm4gYX1NLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciBhPW5ldyBkZTtXaCh0aGlzLGEpO3JldHVybiBhLmdldFJlc3VsdEJ1ZmZlcigpfTsKZnVuY3Rpb24gV2goYSxjKXt2YXIgZD1hLmdldEJ5dGVzTGlzdCgpO251bGwhPWQmJmMud3JpdGVNZXNzYWdlKDEsZCxOaCk7ZD1hLmdldEZsb2F0TGlzdCgpO251bGwhPWQmJmMud3JpdGVNZXNzYWdlKDIsZCxRaCk7ZD1hLmdldEludDY0TGlzdCgpO251bGwhPWQmJmMud3JpdGVNZXNzYWdlKDMsZCxUaCl9TS5nZXRCeXRlc0xpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gSGcodGhpcyxRZywxKX07TS5zZXRCeXRlc0xpc3Q9ZnVuY3Rpb24oYSl7TGcodGhpcywxLFhnWzBdLGEpfTtNLmNsZWFyQnl0ZXNMaXN0PWZ1bmN0aW9uKCl7dGhpcy5zZXRCeXRlc0xpc3Qodm9pZCAwKX07TS5oYXNCeXRlc0xpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9d2YodGhpcywxKX07TS5nZXRGbG9hdExpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gSGcodGhpcyxTZywyKX07TS5zZXRGbG9hdExpc3Q9ZnVuY3Rpb24oYSl7TGcodGhpcywyLFhnWzBdLGEpfTtNLmNsZWFyRmxvYXRMaXN0PWZ1bmN0aW9uKCl7dGhpcy5zZXRGbG9hdExpc3Qodm9pZCAwKX07Ck0uaGFzRmxvYXRMaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXdmKHRoaXMsMil9O00uZ2V0SW50NjRMaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIEhnKHRoaXMsVWcsMyl9O00uc2V0SW50NjRMaXN0PWZ1bmN0aW9uKGEpe0xnKHRoaXMsMyxYZ1swXSxhKX07TS5jbGVhckludDY0TGlzdD1mdW5jdGlvbigpe3RoaXMuc2V0SW50NjRMaXN0KHZvaWQgMCl9O00uaGFzSW50NjRMaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXdmKHRoaXMsMyl9O1lnLnByb3RvdHlwZS50b09iamVjdD1mdW5jdGlvbihhKXtyZXR1cm4gWGgoYSx0aGlzKX07ZnVuY3Rpb24gWGgoYSxjKXt2YXIgZCxmPXtmZWF0dXJlTWFwOihkPWMuZ2V0RmVhdHVyZU1hcCgpKT9kLnRvT2JqZWN0KGEsVWgpOltdfTthJiYoZi4kanNwYk1lc3NhZ2VJbnN0YW5jZT1jKTtyZXR1cm4gZn0KZnVuY3Rpb24gWWgoYSxjKXtmb3IoO2MubmV4dEZpZWxkKCkmJiFjLmlzRW5kR3JvdXAoKTspc3dpdGNoKGMuZ2V0RmllbGROdW1iZXIoKSl7Y2FzZSAxOnZhciBkPWEuZ2V0RmVhdHVyZU1hcCgpO2MucmVhZE1lc3NhZ2UoZCxmdW5jdGlvbihmLGcpe3plKGYsZyxWaCl9KTticmVhaztkZWZhdWx0OmMuc2tpcEZpZWxkKCl9cmV0dXJuIGF9WWcucHJvdG90eXBlLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciBhPW5ldyBkZTtaaCh0aGlzLGEpO3JldHVybiBhLmdldFJlc3VsdEJ1ZmZlcigpfTtmdW5jdGlvbiBaaChhLGMpeyhhPWEuZ2V0RmVhdHVyZU1hcCghMCkpJiYwPGEuZ2V0TGVuZ3RoKCkmJmEuc2VyaWFsaXplQmluYXJ5KDEsYyxkZS5wcm90b3R5cGUud3JpdGVTdHJpbmcsZGUucHJvdG90eXBlLndyaXRlTWVzc2FnZSxXaCl9WWcucHJvdG90eXBlLmdldEZlYXR1cmVNYXA9ZnVuY3Rpb24oYSl7cmV0dXJuIEhmKHRoaXMsYSxXZyl9OwpZZy5wcm90b3R5cGUuY2xlYXJGZWF0dXJlTWFwPWZ1bmN0aW9uKCl7dGhpcy5nZXRGZWF0dXJlTWFwKCkuY2xlYXIoKX07dmFyIEpoPVsxXTtNPVpnLnByb3RvdHlwZTtNLnRvT2JqZWN0PWZ1bmN0aW9uKGEpe3JldHVybiAkaChhLHRoaXMpfTtmdW5jdGlvbiAkaChhLGMpe3ZhciBkPXtmZWF0dXJlTGlzdDp2ZihjLmdldEZlYXR1cmVMaXN0KCksVWgsYSl9O2EmJihkLiRqc3BiTWVzc2FnZUluc3RhbmNlPWMpO3JldHVybiBkfWZ1bmN0aW9uIGFpKGEsYyl7Zm9yKDtjLm5leHRGaWVsZCgpJiYhYy5pc0VuZEdyb3VwKCk7KXN3aXRjaChjLmdldEZpZWxkTnVtYmVyKCkpe2Nhc2UgMTp2YXIgZD1uZXcgV2c7Yy5yZWFkTWVzc2FnZShkLFZoKTthLmFkZEZlYXR1cmUoZCk7YnJlYWs7ZGVmYXVsdDpjLnNraXBGaWVsZCgpfXJldHVybiBhfU0uc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIGE9bmV3IGRlO2JpKHRoaXMsYSk7cmV0dXJuIGEuZ2V0UmVzdWx0QnVmZmVyKCl9OwpmdW5jdGlvbiBiaShhLGMpe2E9YS5nZXRGZWF0dXJlTGlzdCgpOzA8YS5sZW5ndGgmJmMud3JpdGVSZXBlYXRlZE1lc3NhZ2UoMSxhLFdoKX1NLmdldEZlYXR1cmVMaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIElnKHRoaXMsV2csMSl9O00uc2V0RmVhdHVyZUxpc3Q9ZnVuY3Rpb24oYSl7TWcodGhpcywxLGEpfTtNLmFkZEZlYXR1cmU9ZnVuY3Rpb24oYSxjKXtyZXR1cm4gTmcodGhpcywxLGEsV2csYyl9O00uY2xlYXJGZWF0dXJlTGlzdD1mdW5jdGlvbigpe3RoaXMuc2V0RmVhdHVyZUxpc3QoW10pfTtLaC5wcm90b3R5cGUudG9PYmplY3Q9ZnVuY3Rpb24oYSl7cmV0dXJuIGNpKGEsdGhpcyl9O2Z1bmN0aW9uIGNpKGEsYyl7dmFyIGQsZj17ZmVhdHVyZUxpc3RNYXA6KGQ9Yy5nZXRGZWF0dXJlTGlzdE1hcCgpKT9kLnRvT2JqZWN0KGEsJGgpOltdfTthJiYoZi4kanNwYk1lc3NhZ2VJbnN0YW5jZT1jKTtyZXR1cm4gZn0KZnVuY3Rpb24gZGkoYSxjKXtmb3IoO2MubmV4dEZpZWxkKCkmJiFjLmlzRW5kR3JvdXAoKTspc3dpdGNoKGMuZ2V0RmllbGROdW1iZXIoKSl7Y2FzZSAxOnZhciBkPWEuZ2V0RmVhdHVyZUxpc3RNYXAoKTtjLnJlYWRNZXNzYWdlKGQsZnVuY3Rpb24oZixnKXt6ZShmLGcsYWkpfSk7YnJlYWs7ZGVmYXVsdDpjLnNraXBGaWVsZCgpfXJldHVybiBhfUtoLnByb3RvdHlwZS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgYT1uZXcgZGU7ZWkodGhpcyxhKTtyZXR1cm4gYS5nZXRSZXN1bHRCdWZmZXIoKX07ZnVuY3Rpb24gZWkoYSxjKXsoYT1hLmdldEZlYXR1cmVMaXN0TWFwKCEwKSkmJjA8YS5nZXRMZW5ndGgoKSYmYS5zZXJpYWxpemVCaW5hcnkoMSxjLGRlLnByb3RvdHlwZS53cml0ZVN0cmluZyxkZS5wcm90b3R5cGUud3JpdGVNZXNzYWdlLGJpKX1LaC5wcm90b3R5cGUuZ2V0RmVhdHVyZUxpc3RNYXA9ZnVuY3Rpb24oYSl7cmV0dXJuIEhmKHRoaXMsYSxaZyl9OwpLaC5wcm90b3R5cGUuY2xlYXJGZWF0dXJlTGlzdE1hcD1mdW5jdGlvbigpe3RoaXMuZ2V0RmVhdHVyZUxpc3RNYXAoKS5jbGVhcigpfTtmdW5jdGlvbiBmaShhKXtFZSh0aGlzLGEsbnVsbCxudWxsKX1RYihmaSxBZSk7ZnVuY3Rpb24gZ2koYSl7RWUodGhpcyxhLG51bGwsbnVsbCl9UWIoZ2ksQWUpO009ZmkucHJvdG90eXBlO00udG9PYmplY3Q9ZnVuY3Rpb24oYSl7cmV0dXJuIGhpKGEsdGhpcyl9O2Z1bmN0aW9uIGhpKGEsYyl7dmFyIGQsZj17ZmVhdHVyZXM6KGQ9Yy5nZXRGZWF0dXJlcygpKSYmWGgoYSxkKX07YSYmKGYuJGpzcGJNZXNzYWdlSW5zdGFuY2U9Yyk7cmV0dXJuIGZ9ZnVuY3Rpb24gaWkoYSl7YT1uZXcgYmUoYSk7dmFyIGM9bmV3IGZpO3JldHVybiBqaShjLGEpfQpmdW5jdGlvbiBqaShhLGMpe2Zvcig7Yy5uZXh0RmllbGQoKSYmIWMuaXNFbmRHcm91cCgpOylzd2l0Y2goYy5nZXRGaWVsZE51bWJlcigpKXtjYXNlIDE6dmFyIGQ9bmV3IFlnO2MucmVhZE1lc3NhZ2UoZCxZaCk7YS5zZXRGZWF0dXJlcyhkKTticmVhaztkZWZhdWx0OmMuc2tpcEZpZWxkKCl9cmV0dXJuIGF9TS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgYT1uZXcgZGU7a2kodGhpcyxhKTtyZXR1cm4gYS5nZXRSZXN1bHRCdWZmZXIoKX07ZnVuY3Rpb24ga2koYSxjKXthPWEuZ2V0RmVhdHVyZXMoKTtudWxsIT1hJiZjLndyaXRlTWVzc2FnZSgxLGEsWmgpfU0uZ2V0RmVhdHVyZXM9ZnVuY3Rpb24oKXtyZXR1cm4gSGcodGhpcyxZZywxKX07TS5zZXRGZWF0dXJlcz1mdW5jdGlvbihhKXtLZyh0aGlzLDEsYSl9O00uY2xlYXJGZWF0dXJlcz1mdW5jdGlvbigpe3RoaXMuc2V0RmVhdHVyZXModm9pZCAwKX07Ck0uaGFzRmVhdHVyZXM9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9d2YodGhpcywxKX07TT1naS5wcm90b3R5cGU7TS50b09iamVjdD1mdW5jdGlvbihhKXtyZXR1cm4gbGkoYSx0aGlzKX07ZnVuY3Rpb24gbGkoYSxjKXt2YXIgZCxmPXtjb250ZXh0OihkPWMuZ2V0Q29udGV4dCgpKSYmWGgoYSxkKSxmZWF0dXJlTGlzdHM6KGQ9Yy5nZXRGZWF0dXJlTGlzdHMoKSkmJmNpKGEsZCl9O2EmJihmLiRqc3BiTWVzc2FnZUluc3RhbmNlPWMpO3JldHVybiBmfWZ1bmN0aW9uIG1pKGEpe2E9bmV3IGJlKGEpO3ZhciBjPW5ldyBnaTtyZXR1cm4gbmkoYyxhKX0KZnVuY3Rpb24gbmkoYSxjKXtmb3IoO2MubmV4dEZpZWxkKCkmJiFjLmlzRW5kR3JvdXAoKTspc3dpdGNoKGMuZ2V0RmllbGROdW1iZXIoKSl7Y2FzZSAxOnZhciBkPW5ldyBZZztjLnJlYWRNZXNzYWdlKGQsWWgpO2Euc2V0Q29udGV4dChkKTticmVhaztjYXNlIDI6ZD1uZXcgS2g7Yy5yZWFkTWVzc2FnZShkLGRpKTthLnNldEZlYXR1cmVMaXN0cyhkKTticmVhaztkZWZhdWx0OmMuc2tpcEZpZWxkKCl9cmV0dXJuIGF9TS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgYT1uZXcgZGU7b2kodGhpcyxhKTtyZXR1cm4gYS5nZXRSZXN1bHRCdWZmZXIoKX07ZnVuY3Rpb24gb2koYSxjKXt2YXIgZD1hLmdldENvbnRleHQoKTtudWxsIT1kJiZjLndyaXRlTWVzc2FnZSgxLGQsWmgpO2Q9YS5nZXRGZWF0dXJlTGlzdHMoKTtudWxsIT1kJiZjLndyaXRlTWVzc2FnZSgyLGQsZWkpfU0uZ2V0Q29udGV4dD1mdW5jdGlvbigpe3JldHVybiBIZyh0aGlzLFlnLDEpfTsKTS5zZXRDb250ZXh0PWZ1bmN0aW9uKGEpe0tnKHRoaXMsMSxhKX07TS5jbGVhckNvbnRleHQ9ZnVuY3Rpb24oKXt0aGlzLnNldENvbnRleHQodm9pZCAwKX07TS5oYXNDb250ZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXdmKHRoaXMsMSl9O00uZ2V0RmVhdHVyZUxpc3RzPWZ1bmN0aW9uKCl7cmV0dXJuIEhnKHRoaXMsS2gsMil9O00uc2V0RmVhdHVyZUxpc3RzPWZ1bmN0aW9uKGEpe0tnKHRoaXMsMixhKX07TS5jbGVhckZlYXR1cmVMaXN0cz1mdW5jdGlvbigpe3RoaXMuc2V0RmVhdHVyZUxpc3RzKHZvaWQgMCl9O00uaGFzRmVhdHVyZUxpc3RzPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXdmKHRoaXMsMil9OwovL35+V0VCUEFUSH5+YmF6ZWwtb3V0L2hvc3QvYmluL2V4dGVybmFsL2FpX2dvb2dsZV9wYWlyX2ZhY2V0cy9mYWNldHNfb3ZlcnZpZXcvcHJvdG8vZmVhdHVyZV9zdGF0aXN0aWNzX3Byb3RvLmpzCmZ1bmN0aW9uIHBpKGEpe0VlKHRoaXMsYSxxaSxudWxsKX1RYihwaSxBZSk7ZnVuY3Rpb24gamooYSl7RWUodGhpcyxhLGtqLG51bGwpfVFiKGpqLEFlKTtmdW5jdGlvbiBsaihhKXtFZSh0aGlzLGEsbWosbnVsbCl9UWIobGosQWUpO2Z1bmN0aW9uIG5qKGEpe0VlKHRoaXMsYSxvaixwail9UWIobmosQWUpO2Z1bmN0aW9uIHFqKGEpe0VlKHRoaXMsYSxudWxsLG51bGwpfVFiKHFqLEFlKTtmdW5jdGlvbiByaihhKXtFZSh0aGlzLGEsbnVsbCxzail9UWIocmosQWUpO2Z1bmN0aW9uIHRqKGEpe0VlKHRoaXMsYSx1aixudWxsKX1RYih0aixBZSk7ZnVuY3Rpb24gdmooYSl7RWUodGhpcyxhLHdqLG51bGwpfVFiKHZqLEFlKTtmdW5jdGlvbiB4aihhKXtFZSh0aGlzLGEsbnVsbCxudWxsKX1RYih4aixBZSk7ZnVuY3Rpb24geWooYSl7RWUodGhpcyxhLHpqLG51bGwpfVFiKHlqLEFlKTtmdW5jdGlvbiBBaihhKXtFZSh0aGlzLGEsQmosbnVsbCl9UWIoQWosQWUpOwpmdW5jdGlvbiBDaihhKXtFZSh0aGlzLGEsbnVsbCxudWxsKX1RYihDaixBZSk7ZnVuY3Rpb24gRGooYSl7RWUodGhpcyxhLG51bGwsbnVsbCl9UWIoRGosQWUpO2Z1bmN0aW9uIEVqKGEpe0VlKHRoaXMsYSxudWxsLG51bGwpfVFiKEVqLEFlKTtmdW5jdGlvbiBGaihhKXtFZSh0aGlzLGEsR2osbnVsbCl9UWIoRmosQWUpO2Z1bmN0aW9uIEhqKGEpe0VlKHRoaXMsYSxudWxsLG51bGwpfVFiKEhqLEFlKTtmdW5jdGlvbiBJaihhKXtFZSh0aGlzLGEsSmosbnVsbCl9UWIoSWosQWUpO2Z1bmN0aW9uIEtqKGEpe0VlKHRoaXMsYSxudWxsLG51bGwpfVFiKEtqLEFlKTt2YXIgcWk9WzFdO009cGkucHJvdG90eXBlO00udG9PYmplY3Q9ZnVuY3Rpb24oYSl7cmV0dXJuIExqKGEsdGhpcyl9O2Z1bmN0aW9uIExqKGEsYyl7dmFyIGQ9e2RhdGFzZXRzTGlzdDp2ZihjLmdldERhdGFzZXRzTGlzdCgpLE1qLGEpfTthJiYoZC4kanNwYk1lc3NhZ2VJbnN0YW5jZT1jKTtyZXR1cm4gZH0KZnVuY3Rpb24gTmooYSl7YT1uZXcgYmUoYSk7dmFyIGM9bmV3IHBpO3JldHVybiBPaihjLGEpfWZ1bmN0aW9uIE9qKGEsYyl7Zm9yKDtjLm5leHRGaWVsZCgpJiYhYy5pc0VuZEdyb3VwKCk7KXN3aXRjaChjLmdldEZpZWxkTnVtYmVyKCkpe2Nhc2UgMTp2YXIgZD1uZXcgbGo7Yy5yZWFkTWVzc2FnZShkLFBqKTthLmFkZERhdGFzZXRzKGQpO2JyZWFrO2RlZmF1bHQ6Yy5za2lwRmllbGQoKX1yZXR1cm4gYX1NLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciBhPW5ldyBkZTtRaih0aGlzLGEpO3JldHVybiBhLmdldFJlc3VsdEJ1ZmZlcigpfTtmdW5jdGlvbiBRaihhLGMpe2E9YS5nZXREYXRhc2V0c0xpc3QoKTswPGEubGVuZ3RoJiZjLndyaXRlUmVwZWF0ZWRNZXNzYWdlKDEsYSxSail9TS5nZXREYXRhc2V0c0xpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gSWcodGhpcyxsaiwxKX07TS5zZXREYXRhc2V0c0xpc3Q9ZnVuY3Rpb24oKXtNZyh0aGlzLDEsW10pfTsKTS5hZGREYXRhc2V0cz1mdW5jdGlvbihhKXtOZyh0aGlzLDEsYSxsaix2b2lkIDApfTtNLmNsZWFyRGF0YXNldHNMaXN0PWZ1bmN0aW9uKCl7dGhpcy5zZXREYXRhc2V0c0xpc3QoKX07dmFyIGtqPVsxXTtNPWpqLnByb3RvdHlwZTtNLnRvT2JqZWN0PWZ1bmN0aW9uKGEpe3JldHVybiBTaihhLHRoaXMpfTtmdW5jdGlvbiBTaihhLGMpe3ZhciBkLGY9e3N0ZXBMaXN0Om51bGw9PShkPXhmKGMsMSkpP3ZvaWQgMDpkfTthJiYoZi4kanNwYk1lc3NhZ2VJbnN0YW5jZT1jKTtyZXR1cm4gZn1mdW5jdGlvbiBUaihhLGMpe2Zvcig7Yy5uZXh0RmllbGQoKSYmIWMuaXNFbmRHcm91cCgpOylzd2l0Y2goYy5nZXRGaWVsZE51bWJlcigpKXtjYXNlIDE6dmFyIGQ9Yy5yZWFkU3RyaW5nKCk7YS5hZGRTdGVwKGQpO2JyZWFrO2RlZmF1bHQ6Yy5za2lwRmllbGQoKX1yZXR1cm4gYX1NLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciBhPW5ldyBkZTtVaih0aGlzLGEpO3JldHVybiBhLmdldFJlc3VsdEJ1ZmZlcigpfTsKZnVuY3Rpb24gVWooYSxjKXthPWEuZ2V0U3RlcExpc3QoKTswPGEubGVuZ3RoJiZjLndyaXRlUmVwZWF0ZWRTdHJpbmcoYSl9TS5nZXRTdGVwTGlzdD1mdW5jdGlvbigpe3JldHVybiB4Zih0aGlzLDEpfTtNLnNldFN0ZXBMaXN0PWZ1bmN0aW9uKCl7SWYodGhpcywxLFtdKX07TS5hZGRTdGVwPWZ1bmN0aW9uKGEpe0ZnKHRoaXMsYSx2b2lkIDApfTtNLmNsZWFyU3RlcExpc3Q9ZnVuY3Rpb24oKXt0aGlzLnNldFN0ZXBMaXN0KCl9O3ZhciBtaj1bM107TT1sai5wcm90b3R5cGU7TS50b09iamVjdD1mdW5jdGlvbihhKXtyZXR1cm4gTWooYSx0aGlzKX07ZnVuY3Rpb24gTWooYSxjKXt2YXIgZD17bmFtZTpGZihjLDEsIiIpLG51bUV4YW1wbGVzOkZmKGMsMiwwKSx3ZWlnaHRlZE51bUV4YW1wbGVzOkdmKGMsNCksZmVhdHVyZXNMaXN0OnZmKGMuZ2V0RmVhdHVyZXNMaXN0KCksVmosYSl9O2EmJihkLiRqc3BiTWVzc2FnZUluc3RhbmNlPWMpO3JldHVybiBkfQpmdW5jdGlvbiBQaihhLGMpe2Zvcig7Yy5uZXh0RmllbGQoKSYmIWMuaXNFbmRHcm91cCgpOylzd2l0Y2goYy5nZXRGaWVsZE51bWJlcigpKXtjYXNlIDE6dmFyIGQ9Yy5yZWFkU3RyaW5nKCk7YS5zZXROYW1lKGQpO2JyZWFrO2Nhc2UgMjpkPWMucmVhZFVpbnQ2NCgpO2Euc2V0TnVtRXhhbXBsZXMoZCk7YnJlYWs7Y2FzZSA0OmQ9Yy5yZWFkRG91YmxlKCk7YS5zZXRXZWlnaHRlZE51bUV4YW1wbGVzKGQpO2JyZWFrO2Nhc2UgMzpkPW5ldyBuajtjLnJlYWRNZXNzYWdlKGQsV2opO2EuYWRkRmVhdHVyZXMoZCk7YnJlYWs7ZGVmYXVsdDpjLnNraXBGaWVsZCgpfXJldHVybiBhfU0uc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIGE9bmV3IGRlO1JqKHRoaXMsYSk7cmV0dXJuIGEuZ2V0UmVzdWx0QnVmZmVyKCl9OwpmdW5jdGlvbiBSaihhLGMpe3ZhciBkPWEuZ2V0TmFtZSgpOzA8ZC5sZW5ndGgmJmMud3JpdGVTdHJpbmcoMSxkKTtkPWEuZ2V0TnVtRXhhbXBsZXMoKTswIT09ZCYmYy53cml0ZVVpbnQ2NCgyLGQpO2Q9YS5nZXRXZWlnaHRlZE51bUV4YW1wbGVzKCk7MCE9PWQmJmMud3JpdGVEb3VibGUoNCxkKTtkPWEuZ2V0RmVhdHVyZXNMaXN0KCk7MDxkLmxlbmd0aCYmYy53cml0ZVJlcGVhdGVkTWVzc2FnZSgzLGQsWGopfU0uZ2V0TmFtZT1mdW5jdGlvbigpe3JldHVybiBGZih0aGlzLDEsIiIpfTtNLnNldE5hbWU9ZnVuY3Rpb24oYSl7TWYodGhpcywxLGEpfTtNLmdldE51bUV4YW1wbGVzPWZ1bmN0aW9uKCl7cmV0dXJuIEZmKHRoaXMsMiwwKX07TS5zZXROdW1FeGFtcGxlcz1mdW5jdGlvbihhKXtKZih0aGlzLDIsYSl9O00uZ2V0V2VpZ2h0ZWROdW1FeGFtcGxlcz1mdW5jdGlvbigpe3JldHVybiBHZih0aGlzLDQpfTsKTS5zZXRXZWlnaHRlZE51bUV4YW1wbGVzPWZ1bmN0aW9uKGEpe0xmKHRoaXMsNCxhKX07TS5nZXRGZWF0dXJlc0xpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gSWcodGhpcyxuaiwzKX07TS5zZXRGZWF0dXJlc0xpc3Q9ZnVuY3Rpb24oKXtNZyh0aGlzLDMsW10pfTtNLmFkZEZlYXR1cmVzPWZ1bmN0aW9uKGEpe05nKHRoaXMsMyxhLG5qLHZvaWQgMCl9O00uY2xlYXJGZWF0dXJlc0xpc3Q9ZnVuY3Rpb24oKXt0aGlzLnNldEZlYXR1cmVzTGlzdCgpfTt2YXIgb2o9WzZdLHBqPVtbMSw4XSxbMyw0LDUsN11dO009bmoucHJvdG90eXBlO00uZ2V0RmllbGRJZENhc2U9ZnVuY3Rpb24oKXtyZXR1cm4gSWUodGhpcyxwalswXSl9O00uZ2V0U3RhdHNDYXNlPWZ1bmN0aW9uKCl7cmV0dXJuIEllKHRoaXMscGpbMV0pfTtNLnRvT2JqZWN0PWZ1bmN0aW9uKGEpe3JldHVybiBWaihhLHRoaXMpfTsKZnVuY3Rpb24gVmooYSxjKXt2YXIgZCxmPXtuYW1lOkZmKGMsMSwiIikscGF0aDooZD1jLmdldFBhdGgoKSkmJlNqKGEsZCksdHlwZTpGZihjLDIsMCksbnVtU3RhdHM6KGQ9Yy5nZXROdW1TdGF0cygpKSYmWWooYSxkKSxzdHJpbmdTdGF0czooZD1jLmdldFN0cmluZ1N0YXRzKCkpJiZaaihhLGQpLGJ5dGVzU3RhdHM6KGQ9Yy5nZXRCeXRlc1N0YXRzKCkpJiZhayhhLGQpLHN0cnVjdFN0YXRzOihkPWMuZ2V0U3RydWN0U3RhdHMoKSkmJmJrKGEsZCksY3VzdG9tU3RhdHNMaXN0OnZmKGMuZ2V0Q3VzdG9tU3RhdHNMaXN0KCksY2ssYSl9O2EmJihmLiRqc3BiTWVzc2FnZUluc3RhbmNlPWMpO3JldHVybiBmfQpmdW5jdGlvbiBXaihhLGMpe2Zvcig7Yy5uZXh0RmllbGQoKSYmIWMuaXNFbmRHcm91cCgpOylzd2l0Y2goYy5nZXRGaWVsZE51bWJlcigpKXtjYXNlIDE6dmFyIGQ9Yy5yZWFkU3RyaW5nKCk7YS5zZXROYW1lKGQpO2JyZWFrO2Nhc2UgODpkPW5ldyBqajtjLnJlYWRNZXNzYWdlKGQsVGopO2Euc2V0UGF0aChkKTticmVhaztjYXNlIDI6ZD1jLnJlYWRFbnVtKCk7YS5zZXRUeXBlKGQpO2JyZWFrO2Nhc2UgMzpkPW5ldyB0ajtjLnJlYWRNZXNzYWdlKGQsZGspO2Euc2V0TnVtU3RhdHMoZCk7YnJlYWs7Y2FzZSA0OmQ9bmV3IHZqO2MucmVhZE1lc3NhZ2UoZCxlayk7YS5zZXRTdHJpbmdTdGF0cyhkKTticmVhaztjYXNlIDU6ZD1uZXcgQ2o7Yy5yZWFkTWVzc2FnZShkLGZrKTthLnNldEJ5dGVzU3RhdHMoZCk7YnJlYWs7Y2FzZSA3OmQ9bmV3IERqO2MucmVhZE1lc3NhZ2UoZCxnayk7YS5zZXRTdHJ1Y3RTdGF0cyhkKTticmVhaztjYXNlIDY6ZD1uZXcgcmo7Yy5yZWFkTWVzc2FnZShkLGhrKTsKYS5hZGRDdXN0b21TdGF0cyhkKTticmVhaztkZWZhdWx0OmMuc2tpcEZpZWxkKCl9cmV0dXJuIGF9TS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgYT1uZXcgZGU7WGoodGhpcyxhKTtyZXR1cm4gYS5nZXRSZXN1bHRCdWZmZXIoKX07CmZ1bmN0aW9uIFhqKGEsYyl7dmFyIGQ9d2YoYSwxKTtudWxsIT1kJiZjLndyaXRlU3RyaW5nKDEsZCk7ZD1hLmdldFBhdGgoKTtudWxsIT1kJiZjLndyaXRlTWVzc2FnZSg4LGQsVWopO2Q9YS5nZXRUeXBlKCk7MCE9PWQmJmMud3JpdGVFbnVtKDIsZCk7ZD1hLmdldE51bVN0YXRzKCk7bnVsbCE9ZCYmYy53cml0ZU1lc3NhZ2UoMyxkLGlrKTtkPWEuZ2V0U3RyaW5nU3RhdHMoKTtudWxsIT1kJiZjLndyaXRlTWVzc2FnZSg0LGQsamspO2Q9YS5nZXRCeXRlc1N0YXRzKCk7bnVsbCE9ZCYmYy53cml0ZU1lc3NhZ2UoNSxkLGtrKTtkPWEuZ2V0U3RydWN0U3RhdHMoKTtudWxsIT1kJiZjLndyaXRlTWVzc2FnZSg3LGQsbGspO2Q9YS5nZXRDdXN0b21TdGF0c0xpc3QoKTswPGQubGVuZ3RoJiZjLndyaXRlUmVwZWF0ZWRNZXNzYWdlKDYsZCxtayl9TS5nZXROYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIEZmKHRoaXMsMSwiIil9O00uc2V0TmFtZT1mdW5jdGlvbihhKXtHZyh0aGlzLDEscGpbMF0sYSl9OwpNLmNsZWFyTmFtZT1mdW5jdGlvbigpe0dnKHRoaXMsMSxwalswXSx2b2lkIDApfTtNLmhhc05hbWU9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9d2YodGhpcywxKX07TS5nZXRQYXRoPWZ1bmN0aW9uKCl7cmV0dXJuIEhnKHRoaXMsamosOCl9O00uc2V0UGF0aD1mdW5jdGlvbihhKXtMZyh0aGlzLDgscGpbMF0sYSl9O00uY2xlYXJQYXRoPWZ1bmN0aW9uKCl7dGhpcy5zZXRQYXRoKHZvaWQgMCl9O00uaGFzUGF0aD1mdW5jdGlvbigpe3JldHVybiBudWxsIT13Zih0aGlzLDgpfTtNLmdldFR5cGU9ZnVuY3Rpb24oKXtyZXR1cm4gRmYodGhpcywyLDApfTtNLnNldFR5cGU9ZnVuY3Rpb24oYSl7TmYodGhpcywyLGEpfTtNLmdldE51bVN0YXRzPWZ1bmN0aW9uKCl7cmV0dXJuIEhnKHRoaXMsdGosMyl9O00uc2V0TnVtU3RhdHM9ZnVuY3Rpb24oYSl7TGcodGhpcywzLHBqWzFdLGEpfTtNLmNsZWFyTnVtU3RhdHM9ZnVuY3Rpb24oKXt0aGlzLnNldE51bVN0YXRzKHZvaWQgMCl9OwpNLmhhc051bVN0YXRzPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXdmKHRoaXMsMyl9O00uZ2V0U3RyaW5nU3RhdHM9ZnVuY3Rpb24oKXtyZXR1cm4gSGcodGhpcyx2aiw0KX07TS5zZXRTdHJpbmdTdGF0cz1mdW5jdGlvbihhKXtMZyh0aGlzLDQscGpbMV0sYSl9O00uY2xlYXJTdHJpbmdTdGF0cz1mdW5jdGlvbigpe3RoaXMuc2V0U3RyaW5nU3RhdHModm9pZCAwKX07TS5oYXNTdHJpbmdTdGF0cz1mdW5jdGlvbigpe3JldHVybiBudWxsIT13Zih0aGlzLDQpfTtNLmdldEJ5dGVzU3RhdHM9ZnVuY3Rpb24oKXtyZXR1cm4gSGcodGhpcyxDaiw1KX07TS5zZXRCeXRlc1N0YXRzPWZ1bmN0aW9uKGEpe0xnKHRoaXMsNSxwalsxXSxhKX07TS5jbGVhckJ5dGVzU3RhdHM9ZnVuY3Rpb24oKXt0aGlzLnNldEJ5dGVzU3RhdHModm9pZCAwKX07TS5oYXNCeXRlc1N0YXRzPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXdmKHRoaXMsNSl9OwpNLmdldFN0cnVjdFN0YXRzPWZ1bmN0aW9uKCl7cmV0dXJuIEhnKHRoaXMsRGosNyl9O00uc2V0U3RydWN0U3RhdHM9ZnVuY3Rpb24oYSl7TGcodGhpcyw3LHBqWzFdLGEpfTtNLmNsZWFyU3RydWN0U3RhdHM9ZnVuY3Rpb24oKXt0aGlzLnNldFN0cnVjdFN0YXRzKHZvaWQgMCl9O00uaGFzU3RydWN0U3RhdHM9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9d2YodGhpcyw3KX07TS5nZXRDdXN0b21TdGF0c0xpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gSWcodGhpcyxyaiw2KX07TS5zZXRDdXN0b21TdGF0c0xpc3Q9ZnVuY3Rpb24oKXtNZyh0aGlzLDYsW10pfTtNLmFkZEN1c3RvbVN0YXRzPWZ1bmN0aW9uKGEpe05nKHRoaXMsNixhLHJqLHZvaWQgMCl9O00uY2xlYXJDdXN0b21TdGF0c0xpc3Q9ZnVuY3Rpb24oKXt0aGlzLnNldEN1c3RvbVN0YXRzTGlzdCgpfTtNPXFqLnByb3RvdHlwZTtNLnRvT2JqZWN0PWZ1bmN0aW9uKGEpe3JldHVybiBuayhhLHRoaXMpfTsKZnVuY3Rpb24gbmsoYSxjKXt2YXIgZD17bnVtTm9uTWlzc2luZzpHZihjLDEpLG51bU1pc3Npbmc6R2YoYywyKSxhdmdOdW1WYWx1ZXM6R2YoYywzKSx0b3ROdW1WYWx1ZXM6R2YoYyw0KX07YSYmKGQuJGpzcGJNZXNzYWdlSW5zdGFuY2U9Yyk7cmV0dXJuIGR9ZnVuY3Rpb24gb2soYSxjKXtmb3IoO2MubmV4dEZpZWxkKCkmJiFjLmlzRW5kR3JvdXAoKTspc3dpdGNoKGMuZ2V0RmllbGROdW1iZXIoKSl7Y2FzZSAxOnZhciBkPWMucmVhZERvdWJsZSgpO2Euc2V0TnVtTm9uTWlzc2luZyhkKTticmVhaztjYXNlIDI6ZD1jLnJlYWREb3VibGUoKTthLnNldE51bU1pc3NpbmcoZCk7YnJlYWs7Y2FzZSAzOmQ9Yy5yZWFkRG91YmxlKCk7YS5zZXRBdmdOdW1WYWx1ZXMoZCk7YnJlYWs7Y2FzZSA0OmQ9Yy5yZWFkRG91YmxlKCk7YS5zZXRUb3ROdW1WYWx1ZXMoZCk7YnJlYWs7ZGVmYXVsdDpjLnNraXBGaWVsZCgpfXJldHVybiBhfQpNLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciBhPW5ldyBkZTtwayh0aGlzLGEpO3JldHVybiBhLmdldFJlc3VsdEJ1ZmZlcigpfTtmdW5jdGlvbiBwayhhLGMpe3ZhciBkPWEuZ2V0TnVtTm9uTWlzc2luZygpOzAhPT1kJiZjLndyaXRlRG91YmxlKDEsZCk7ZD1hLmdldE51bU1pc3NpbmcoKTswIT09ZCYmYy53cml0ZURvdWJsZSgyLGQpO2Q9YS5nZXRBdmdOdW1WYWx1ZXMoKTswIT09ZCYmYy53cml0ZURvdWJsZSgzLGQpO2Q9YS5nZXRUb3ROdW1WYWx1ZXMoKTswIT09ZCYmYy53cml0ZURvdWJsZSg0LGQpfU0uZ2V0TnVtTm9uTWlzc2luZz1mdW5jdGlvbigpe3JldHVybiBHZih0aGlzLDEpfTtNLnNldE51bU5vbk1pc3Npbmc9ZnVuY3Rpb24oYSl7TGYodGhpcywxLGEpfTtNLmdldE51bU1pc3Npbmc9ZnVuY3Rpb24oKXtyZXR1cm4gR2YodGhpcywyKX07TS5zZXROdW1NaXNzaW5nPWZ1bmN0aW9uKGEpe0xmKHRoaXMsMixhKX07Ck0uZ2V0QXZnTnVtVmFsdWVzPWZ1bmN0aW9uKCl7cmV0dXJuIEdmKHRoaXMsMyl9O00uc2V0QXZnTnVtVmFsdWVzPWZ1bmN0aW9uKGEpe0xmKHRoaXMsMyxhKX07TS5nZXRUb3ROdW1WYWx1ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gR2YodGhpcyw0KX07TS5zZXRUb3ROdW1WYWx1ZXM9ZnVuY3Rpb24oYSl7TGYodGhpcyw0LGEpfTt2YXIgc2o9W1syLDMsNCw1XV07TT1yai5wcm90b3R5cGU7TS5nZXRWYWxDYXNlPWZ1bmN0aW9uKCl7cmV0dXJuIEllKHRoaXMsc2pbMF0pfTtNLnRvT2JqZWN0PWZ1bmN0aW9uKGEpe3JldHVybiBjayhhLHRoaXMpfTsKZnVuY3Rpb24gY2soYSxjKXt2YXIgZCxmPXtuYW1lOkZmKGMsMSwiIiksbnVtOkdmKGMsMiksc3RyOkZmKGMsMywiIiksaGlzdG9ncmFtOihkPWMuZ2V0SGlzdG9ncmFtKCkpJiZxayhhLGQpLHJhbmtIaXN0b2dyYW06KGQ9Yy5nZXRSYW5rSGlzdG9ncmFtKCkpJiZyayhhLGQpfTthJiYoZi4kanNwYk1lc3NhZ2VJbnN0YW5jZT1jKTtyZXR1cm4gZn0KZnVuY3Rpb24gaGsoYSxjKXtmb3IoO2MubmV4dEZpZWxkKCkmJiFjLmlzRW5kR3JvdXAoKTspc3dpdGNoKGMuZ2V0RmllbGROdW1iZXIoKSl7Y2FzZSAxOnZhciBkPWMucmVhZFN0cmluZygpO2Euc2V0TmFtZShkKTticmVhaztjYXNlIDI6ZD1jLnJlYWREb3VibGUoKTthLnNldE51bShkKTticmVhaztjYXNlIDM6ZD1jLnJlYWRTdHJpbmcoKTthLnNldFN0cihkKTticmVhaztjYXNlIDQ6ZD1uZXcgRmo7Yy5yZWFkTWVzc2FnZShkLHNrKTthLnNldEhpc3RvZ3JhbShkKTticmVhaztjYXNlIDU6ZD1uZXcgSWo7Yy5yZWFkTWVzc2FnZShkLHRrKTthLnNldFJhbmtIaXN0b2dyYW0oZCk7YnJlYWs7ZGVmYXVsdDpjLnNraXBGaWVsZCgpfXJldHVybiBhfU0uc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIGE9bmV3IGRlO21rKHRoaXMsYSk7cmV0dXJuIGEuZ2V0UmVzdWx0QnVmZmVyKCl9OwpmdW5jdGlvbiBtayhhLGMpe3ZhciBkPWEuZ2V0TmFtZSgpOzA8ZC5sZW5ndGgmJmMud3JpdGVTdHJpbmcoMSxkKTtkPXdmKGEsMik7bnVsbCE9ZCYmYy53cml0ZURvdWJsZSgyLGQpO2Q9d2YoYSwzKTtudWxsIT1kJiZjLndyaXRlU3RyaW5nKDMsZCk7ZD1hLmdldEhpc3RvZ3JhbSgpO251bGwhPWQmJmMud3JpdGVNZXNzYWdlKDQsZCx1ayk7ZD1hLmdldFJhbmtIaXN0b2dyYW0oKTtudWxsIT1kJiZjLndyaXRlTWVzc2FnZSg1LGQsdmspfU0uZ2V0TmFtZT1mdW5jdGlvbigpe3JldHVybiBGZih0aGlzLDEsIiIpfTtNLnNldE5hbWU9ZnVuY3Rpb24oYSl7TWYodGhpcywxLGEpfTtNLmdldE51bT1mdW5jdGlvbigpe3JldHVybiBHZih0aGlzLDIpfTtNLnNldE51bT1mdW5jdGlvbihhKXtHZyh0aGlzLDIsc2pbMF0sYSl9O00uY2xlYXJOdW09ZnVuY3Rpb24oKXtHZyh0aGlzLDIsc2pbMF0sdm9pZCAwKX07TS5oYXNOdW09ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9d2YodGhpcywyKX07Ck0uZ2V0U3RyPWZ1bmN0aW9uKCl7cmV0dXJuIEZmKHRoaXMsMywiIil9O00uc2V0U3RyPWZ1bmN0aW9uKGEpe0dnKHRoaXMsMyxzalswXSxhKX07TS5jbGVhclN0cj1mdW5jdGlvbigpe0dnKHRoaXMsMyxzalswXSx2b2lkIDApfTtNLmhhc1N0cj1mdW5jdGlvbigpe3JldHVybiBudWxsIT13Zih0aGlzLDMpfTtNLmdldEhpc3RvZ3JhbT1mdW5jdGlvbigpe3JldHVybiBIZyh0aGlzLEZqLDQpfTtNLnNldEhpc3RvZ3JhbT1mdW5jdGlvbihhKXtMZyh0aGlzLDQsc2pbMF0sYSl9O00uY2xlYXJIaXN0b2dyYW09ZnVuY3Rpb24oKXt0aGlzLnNldEhpc3RvZ3JhbSh2b2lkIDApfTtNLmhhc0hpc3RvZ3JhbT1mdW5jdGlvbigpe3JldHVybiBudWxsIT13Zih0aGlzLDQpfTtNLmdldFJhbmtIaXN0b2dyYW09ZnVuY3Rpb24oKXtyZXR1cm4gSGcodGhpcyxJaiw1KX07TS5zZXRSYW5rSGlzdG9ncmFtPWZ1bmN0aW9uKGEpe0xnKHRoaXMsNSxzalswXSxhKX07TS5jbGVhclJhbmtIaXN0b2dyYW09ZnVuY3Rpb24oKXt0aGlzLnNldFJhbmtIaXN0b2dyYW0odm9pZCAwKX07Ck0uaGFzUmFua0hpc3RvZ3JhbT1mdW5jdGlvbigpe3JldHVybiBudWxsIT13Zih0aGlzLDUpfTt2YXIgdWo9WzhdO009dGoucHJvdG90eXBlO00udG9PYmplY3Q9ZnVuY3Rpb24oYSl7cmV0dXJuIFlqKGEsdGhpcyl9O2Z1bmN0aW9uIFlqKGEsYyl7dmFyIGQsZj17Y29tbW9uU3RhdHM6KGQ9Yy5nZXRDb21tb25TdGF0cygpKSYmd2soYSxkKSxtZWFuOkdmKGMsMiksc3RkRGV2OkdmKGMsMyksbnVtWmVyb3M6RmYoYyw0LDApLG1pbjpHZihjLDUpLG1lZGlhbjpHZihjLDYpLG1heDpHZihjLDcpLGhpc3RvZ3JhbXNMaXN0OnZmKGMuZ2V0SGlzdG9ncmFtc0xpc3QoKSxxayxhKSx3ZWlnaHRlZE51bWVyaWNTdGF0czooZD1jLmdldFdlaWdodGVkTnVtZXJpY1N0YXRzKCkpJiZ4ayhhLGQpfTthJiYoZi4kanNwYk1lc3NhZ2VJbnN0YW5jZT1jKTtyZXR1cm4gZn0KZnVuY3Rpb24gZGsoYSxjKXtmb3IoO2MubmV4dEZpZWxkKCkmJiFjLmlzRW5kR3JvdXAoKTspc3dpdGNoKGMuZ2V0RmllbGROdW1iZXIoKSl7Y2FzZSAxOnZhciBkPW5ldyBFajtjLnJlYWRNZXNzYWdlKGQseWspO2Euc2V0Q29tbW9uU3RhdHMoZCk7YnJlYWs7Y2FzZSAyOmQ9Yy5yZWFkRG91YmxlKCk7YS5zZXRNZWFuKGQpO2JyZWFrO2Nhc2UgMzpkPWMucmVhZERvdWJsZSgpO2Euc2V0U3RkRGV2KGQpO2JyZWFrO2Nhc2UgNDpkPWMucmVhZFVpbnQ2NCgpO2Euc2V0TnVtWmVyb3MoZCk7YnJlYWs7Y2FzZSA1OmQ9Yy5yZWFkRG91YmxlKCk7YS5zZXRNaW4oZCk7YnJlYWs7Y2FzZSA2OmQ9Yy5yZWFkRG91YmxlKCk7YS5zZXRNZWRpYW4oZCk7YnJlYWs7Y2FzZSA3OmQ9Yy5yZWFkRG91YmxlKCk7YS5zZXRNYXgoZCk7YnJlYWs7Y2FzZSA4OmQ9bmV3IEZqO2MucmVhZE1lc3NhZ2UoZCxzayk7YS5hZGRIaXN0b2dyYW1zKGQpO2JyZWFrO2Nhc2UgOTpkPW5ldyB5ajtjLnJlYWRNZXNzYWdlKGQsCnprKTthLnNldFdlaWdodGVkTnVtZXJpY1N0YXRzKGQpO2JyZWFrO2RlZmF1bHQ6Yy5za2lwRmllbGQoKX1yZXR1cm4gYX1NLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciBhPW5ldyBkZTtpayh0aGlzLGEpO3JldHVybiBhLmdldFJlc3VsdEJ1ZmZlcigpfTsKZnVuY3Rpb24gaWsoYSxjKXt2YXIgZD1hLmdldENvbW1vblN0YXRzKCk7bnVsbCE9ZCYmYy53cml0ZU1lc3NhZ2UoMSxkLEFrKTtkPWEuZ2V0TWVhbigpOzAhPT1kJiZjLndyaXRlRG91YmxlKDIsZCk7ZD1hLmdldFN0ZERldigpOzAhPT1kJiZjLndyaXRlRG91YmxlKDMsZCk7ZD1hLmdldE51bVplcm9zKCk7MCE9PWQmJmMud3JpdGVVaW50NjQoNCxkKTtkPWEuZ2V0TWluKCk7MCE9PWQmJmMud3JpdGVEb3VibGUoNSxkKTtkPWEuZ2V0TWVkaWFuKCk7MCE9PWQmJmMud3JpdGVEb3VibGUoNixkKTtkPWEuZ2V0TWF4KCk7MCE9PWQmJmMud3JpdGVEb3VibGUoNyxkKTtkPWEuZ2V0SGlzdG9ncmFtc0xpc3QoKTswPGQubGVuZ3RoJiZjLndyaXRlUmVwZWF0ZWRNZXNzYWdlKDgsZCx1ayk7ZD1hLmdldFdlaWdodGVkTnVtZXJpY1N0YXRzKCk7bnVsbCE9ZCYmYy53cml0ZU1lc3NhZ2UoOSxkLEJrKX1NLmdldENvbW1vblN0YXRzPWZ1bmN0aW9uKCl7cmV0dXJuIEhnKHRoaXMsRWosMSl9OwpNLnNldENvbW1vblN0YXRzPWZ1bmN0aW9uKGEpe0tnKHRoaXMsMSxhKX07TS5jbGVhckNvbW1vblN0YXRzPWZ1bmN0aW9uKCl7dGhpcy5zZXRDb21tb25TdGF0cyh2b2lkIDApfTtNLmhhc0NvbW1vblN0YXRzPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXdmKHRoaXMsMSl9O00uZ2V0TWVhbj1mdW5jdGlvbigpe3JldHVybiBHZih0aGlzLDIpfTtNLnNldE1lYW49ZnVuY3Rpb24oYSl7TGYodGhpcywyLGEpfTtNLmdldFN0ZERldj1mdW5jdGlvbigpe3JldHVybiBHZih0aGlzLDMpfTtNLnNldFN0ZERldj1mdW5jdGlvbihhKXtMZih0aGlzLDMsYSl9O00uZ2V0TnVtWmVyb3M9ZnVuY3Rpb24oKXtyZXR1cm4gRmYodGhpcyw0LDApfTtNLnNldE51bVplcm9zPWZ1bmN0aW9uKGEpe0pmKHRoaXMsNCxhKX07TS5nZXRNaW49ZnVuY3Rpb24oKXtyZXR1cm4gR2YodGhpcyw1KX07TS5zZXRNaW49ZnVuY3Rpb24oYSl7TGYodGhpcyw1LGEpfTsKTS5nZXRNZWRpYW49ZnVuY3Rpb24oKXtyZXR1cm4gR2YodGhpcyw2KX07TS5zZXRNZWRpYW49ZnVuY3Rpb24oYSl7TGYodGhpcyw2LGEpfTtNLmdldE1heD1mdW5jdGlvbigpe3JldHVybiBHZih0aGlzLDcpfTtNLnNldE1heD1mdW5jdGlvbihhKXtMZih0aGlzLDcsYSl9O00uZ2V0SGlzdG9ncmFtc0xpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gSWcodGhpcyxGaiw4KX07TS5zZXRIaXN0b2dyYW1zTGlzdD1mdW5jdGlvbihhKXtNZyh0aGlzLDgsYSl9O00uYWRkSGlzdG9ncmFtcz1mdW5jdGlvbihhKXtyZXR1cm4gTmcodGhpcyw4LGEsRmosdm9pZCAwKX07TS5jbGVhckhpc3RvZ3JhbXNMaXN0PWZ1bmN0aW9uKCl7dGhpcy5zZXRIaXN0b2dyYW1zTGlzdChbXSl9O00uZ2V0V2VpZ2h0ZWROdW1lcmljU3RhdHM9ZnVuY3Rpb24oKXtyZXR1cm4gSGcodGhpcyx5aiw5KX07TS5zZXRXZWlnaHRlZE51bWVyaWNTdGF0cz1mdW5jdGlvbihhKXtLZyh0aGlzLDksYSl9OwpNLmNsZWFyV2VpZ2h0ZWROdW1lcmljU3RhdHM9ZnVuY3Rpb24oKXt0aGlzLnNldFdlaWdodGVkTnVtZXJpY1N0YXRzKHZvaWQgMCl9O00uaGFzV2VpZ2h0ZWROdW1lcmljU3RhdHM9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9d2YodGhpcyw5KX07dmFyIHdqPVszXTt2ai5wcm90b3R5cGUudG9PYmplY3Q9ZnVuY3Rpb24oYSl7cmV0dXJuIFpqKGEsdGhpcyl9O2Z1bmN0aW9uIFpqKGEsYyl7dmFyIGQsZj17Y29tbW9uU3RhdHM6KGQ9Yy5nZXRDb21tb25TdGF0cygpKSYmd2soYSxkKSx1bmlxdWU6RmYoYywyLDApLHRvcFZhbHVlc0xpc3Q6dmYoYy5nZXRUb3BWYWx1ZXNMaXN0KCksQ2ssYSksYXZnTGVuZ3RoOkdmKGMsNCkscmFua0hpc3RvZ3JhbTooZD1jLmdldFJhbmtIaXN0b2dyYW0oKSkmJnJrKGEsZCksd2VpZ2h0ZWRTdHJpbmdTdGF0czooZD1jLmdldFdlaWdodGVkU3RyaW5nU3RhdHMoKSkmJkRrKGEsZCl9O2EmJihmLiRqc3BiTWVzc2FnZUluc3RhbmNlPWMpO3JldHVybiBmfQpmdW5jdGlvbiBlayhhLGMpe2Zvcig7Yy5uZXh0RmllbGQoKSYmIWMuaXNFbmRHcm91cCgpOylzd2l0Y2goYy5nZXRGaWVsZE51bWJlcigpKXtjYXNlIDE6dmFyIGQ9bmV3IEVqO2MucmVhZE1lc3NhZ2UoZCx5ayk7YS5zZXRDb21tb25TdGF0cyhkKTticmVhaztjYXNlIDI6ZD1jLnJlYWRVaW50NjQoKTthLnNldFVuaXF1ZShkKTticmVhaztjYXNlIDM6ZD1uZXcgeGo7Yy5yZWFkTWVzc2FnZShkLEVrKTthLmFkZFRvcFZhbHVlcyhkKTticmVhaztjYXNlIDQ6ZD1jLnJlYWRGbG9hdCgpO2Euc2V0QXZnTGVuZ3RoKGQpO2JyZWFrO2Nhc2UgNTpkPW5ldyBJajtjLnJlYWRNZXNzYWdlKGQsdGspO2Euc2V0UmFua0hpc3RvZ3JhbShkKTticmVhaztjYXNlIDY6ZD1uZXcgQWo7Yy5yZWFkTWVzc2FnZShkLEZrKTthLnNldFdlaWdodGVkU3RyaW5nU3RhdHMoZCk7YnJlYWs7ZGVmYXVsdDpjLnNraXBGaWVsZCgpfXJldHVybiBhfQp2ai5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIGE9bmV3IGRlO2prKHRoaXMsYSk7cmV0dXJuIGEuZ2V0UmVzdWx0QnVmZmVyKCl9O2Z1bmN0aW9uIGprKGEsYyl7dmFyIGQ9YS5nZXRDb21tb25TdGF0cygpO251bGwhPWQmJmMud3JpdGVNZXNzYWdlKDEsZCxBayk7ZD1hLmdldFVuaXF1ZSgpOzAhPT1kJiZjLndyaXRlVWludDY0KDIsZCk7ZD1hLmdldFRvcFZhbHVlc0xpc3QoKTswPGQubGVuZ3RoJiZjLndyaXRlUmVwZWF0ZWRNZXNzYWdlKDMsZCxHayk7ZD1hLmdldEF2Z0xlbmd0aCgpOzAhPT1kJiZjLndyaXRlRmxvYXQoNCxkKTtkPWEuZ2V0UmFua0hpc3RvZ3JhbSgpO251bGwhPWQmJmMud3JpdGVNZXNzYWdlKDUsZCx2ayk7ZD1hLmdldFdlaWdodGVkU3RyaW5nU3RhdHMoKTtudWxsIT1kJiZjLndyaXRlTWVzc2FnZSg2LGQsSGspfU09eGoucHJvdG90eXBlO00udG9PYmplY3Q9ZnVuY3Rpb24oYSl7cmV0dXJuIENrKGEsdGhpcyl9OwpmdW5jdGlvbiBDayhhLGMpe3ZhciBkPXtkZXByZWNhdGVkRnJlcTpGZihjLDEsMCksdmFsdWU6RmYoYywyLCIiKSxmcmVxdWVuY3k6R2YoYywzKX07YSYmKGQuJGpzcGJNZXNzYWdlSW5zdGFuY2U9Yyk7cmV0dXJuIGR9ZnVuY3Rpb24gRWsoYSxjKXtmb3IoO2MubmV4dEZpZWxkKCkmJiFjLmlzRW5kR3JvdXAoKTspc3dpdGNoKGMuZ2V0RmllbGROdW1iZXIoKSl7Y2FzZSAxOnZhciBkPWMucmVhZFVpbnQ2NCgpO2Euc2V0RGVwcmVjYXRlZEZyZXEoZCk7YnJlYWs7Y2FzZSAyOmQ9Yy5yZWFkU3RyaW5nKCk7YS5zZXRWYWx1ZShkKTticmVhaztjYXNlIDM6ZD1jLnJlYWREb3VibGUoKTthLnNldEZyZXF1ZW5jeShkKTticmVhaztkZWZhdWx0OmMuc2tpcEZpZWxkKCl9cmV0dXJuIGF9TS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgYT1uZXcgZGU7R2sodGhpcyxhKTtyZXR1cm4gYS5nZXRSZXN1bHRCdWZmZXIoKX07CmZ1bmN0aW9uIEdrKGEsYyl7dmFyIGQ9YS5nZXREZXByZWNhdGVkRnJlcSgpOzAhPT1kJiZjLndyaXRlVWludDY0KDEsZCk7ZD1hLmdldFZhbHVlKCk7MDxkLmxlbmd0aCYmYy53cml0ZVN0cmluZygyLGQpO2Q9YS5nZXRGcmVxdWVuY3koKTswIT09ZCYmYy53cml0ZURvdWJsZSgzLGQpfU0uZ2V0RGVwcmVjYXRlZEZyZXE9ZnVuY3Rpb24oKXtyZXR1cm4gRmYodGhpcywxLDApfTtNLnNldERlcHJlY2F0ZWRGcmVxPWZ1bmN0aW9uKGEpe0pmKHRoaXMsMSxhKX07TS5nZXRWYWx1ZT1mdW5jdGlvbigpe3JldHVybiBGZih0aGlzLDIsIiIpfTtNLnNldFZhbHVlPWZ1bmN0aW9uKGEpe01mKHRoaXMsMixhKX07TS5nZXRGcmVxdWVuY3k9ZnVuY3Rpb24oKXtyZXR1cm4gR2YodGhpcywzKX07TS5zZXRGcmVxdWVuY3k9ZnVuY3Rpb24oYSl7TGYodGhpcywzLGEpfTtNPXZqLnByb3RvdHlwZTtNLmdldENvbW1vblN0YXRzPWZ1bmN0aW9uKCl7cmV0dXJuIEhnKHRoaXMsRWosMSl9OwpNLnNldENvbW1vblN0YXRzPWZ1bmN0aW9uKGEpe0tnKHRoaXMsMSxhKX07TS5jbGVhckNvbW1vblN0YXRzPWZ1bmN0aW9uKCl7dGhpcy5zZXRDb21tb25TdGF0cyh2b2lkIDApfTtNLmhhc0NvbW1vblN0YXRzPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXdmKHRoaXMsMSl9O00uZ2V0VW5pcXVlPWZ1bmN0aW9uKCl7cmV0dXJuIEZmKHRoaXMsMiwwKX07TS5zZXRVbmlxdWU9ZnVuY3Rpb24oYSl7SmYodGhpcywyLGEpfTtNLmdldFRvcFZhbHVlc0xpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gSWcodGhpcyx4aiwzKX07TS5zZXRUb3BWYWx1ZXNMaXN0PWZ1bmN0aW9uKGEpe01nKHRoaXMsMyxhKX07TS5hZGRUb3BWYWx1ZXM9ZnVuY3Rpb24oYSl7cmV0dXJuIE5nKHRoaXMsMyxhLHhqLHZvaWQgMCl9O00uY2xlYXJUb3BWYWx1ZXNMaXN0PWZ1bmN0aW9uKCl7dGhpcy5zZXRUb3BWYWx1ZXNMaXN0KFtdKX07TS5nZXRBdmdMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gR2YodGhpcyw0KX07Ck0uc2V0QXZnTGVuZ3RoPWZ1bmN0aW9uKGEpe0xmKHRoaXMsNCxhKX07TS5nZXRSYW5rSGlzdG9ncmFtPWZ1bmN0aW9uKCl7cmV0dXJuIEhnKHRoaXMsSWosNSl9O00uc2V0UmFua0hpc3RvZ3JhbT1mdW5jdGlvbihhKXtLZyh0aGlzLDUsYSl9O00uY2xlYXJSYW5rSGlzdG9ncmFtPWZ1bmN0aW9uKCl7dGhpcy5zZXRSYW5rSGlzdG9ncmFtKHZvaWQgMCl9O00uaGFzUmFua0hpc3RvZ3JhbT1mdW5jdGlvbigpe3JldHVybiBudWxsIT13Zih0aGlzLDUpfTtNLmdldFdlaWdodGVkU3RyaW5nU3RhdHM9ZnVuY3Rpb24oKXtyZXR1cm4gSGcodGhpcyxBaiw2KX07TS5zZXRXZWlnaHRlZFN0cmluZ1N0YXRzPWZ1bmN0aW9uKGEpe0tnKHRoaXMsNixhKX07TS5jbGVhcldlaWdodGVkU3RyaW5nU3RhdHM9ZnVuY3Rpb24oKXt0aGlzLnNldFdlaWdodGVkU3RyaW5nU3RhdHModm9pZCAwKX07TS5oYXNXZWlnaHRlZFN0cmluZ1N0YXRzPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXdmKHRoaXMsNil9Owp2YXIgemo9WzRdO009eWoucHJvdG90eXBlO00udG9PYmplY3Q9ZnVuY3Rpb24oYSl7cmV0dXJuIHhrKGEsdGhpcyl9O2Z1bmN0aW9uIHhrKGEsYyl7dmFyIGQ9e21lYW46R2YoYywxKSxzdGREZXY6R2YoYywyKSxtZWRpYW46R2YoYywzKSxoaXN0b2dyYW1zTGlzdDp2ZihjLmdldEhpc3RvZ3JhbXNMaXN0KCkscWssYSl9O2EmJihkLiRqc3BiTWVzc2FnZUluc3RhbmNlPWMpO3JldHVybiBkfQpmdW5jdGlvbiB6ayhhLGMpe2Zvcig7Yy5uZXh0RmllbGQoKSYmIWMuaXNFbmRHcm91cCgpOylzd2l0Y2goYy5nZXRGaWVsZE51bWJlcigpKXtjYXNlIDE6dmFyIGQ9Yy5yZWFkRG91YmxlKCk7YS5zZXRNZWFuKGQpO2JyZWFrO2Nhc2UgMjpkPWMucmVhZERvdWJsZSgpO2Euc2V0U3RkRGV2KGQpO2JyZWFrO2Nhc2UgMzpkPWMucmVhZERvdWJsZSgpO2Euc2V0TWVkaWFuKGQpO2JyZWFrO2Nhc2UgNDpkPW5ldyBGajtjLnJlYWRNZXNzYWdlKGQsc2spO2EuYWRkSGlzdG9ncmFtcyhkKTticmVhaztkZWZhdWx0OmMuc2tpcEZpZWxkKCl9cmV0dXJuIGF9TS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgYT1uZXcgZGU7QmsodGhpcyxhKTtyZXR1cm4gYS5nZXRSZXN1bHRCdWZmZXIoKX07CmZ1bmN0aW9uIEJrKGEsYyl7dmFyIGQ9YS5nZXRNZWFuKCk7MCE9PWQmJmMud3JpdGVEb3VibGUoMSxkKTtkPWEuZ2V0U3RkRGV2KCk7MCE9PWQmJmMud3JpdGVEb3VibGUoMixkKTtkPWEuZ2V0TWVkaWFuKCk7MCE9PWQmJmMud3JpdGVEb3VibGUoMyxkKTtkPWEuZ2V0SGlzdG9ncmFtc0xpc3QoKTswPGQubGVuZ3RoJiZjLndyaXRlUmVwZWF0ZWRNZXNzYWdlKDQsZCx1ayl9TS5nZXRNZWFuPWZ1bmN0aW9uKCl7cmV0dXJuIEdmKHRoaXMsMSl9O00uc2V0TWVhbj1mdW5jdGlvbihhKXtMZih0aGlzLDEsYSl9O00uZ2V0U3RkRGV2PWZ1bmN0aW9uKCl7cmV0dXJuIEdmKHRoaXMsMil9O00uc2V0U3RkRGV2PWZ1bmN0aW9uKGEpe0xmKHRoaXMsMixhKX07TS5nZXRNZWRpYW49ZnVuY3Rpb24oKXtyZXR1cm4gR2YodGhpcywzKX07TS5zZXRNZWRpYW49ZnVuY3Rpb24oYSl7TGYodGhpcywzLGEpfTtNLmdldEhpc3RvZ3JhbXNMaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIElnKHRoaXMsRmosNCl9OwpNLnNldEhpc3RvZ3JhbXNMaXN0PWZ1bmN0aW9uKGEpe01nKHRoaXMsNCxhKX07TS5hZGRIaXN0b2dyYW1zPWZ1bmN0aW9uKGEpe3JldHVybiBOZyh0aGlzLDQsYSxGaix2b2lkIDApfTtNLmNsZWFySGlzdG9ncmFtc0xpc3Q9ZnVuY3Rpb24oKXt0aGlzLnNldEhpc3RvZ3JhbXNMaXN0KFtdKX07dmFyIEJqPVsxXTtNPUFqLnByb3RvdHlwZTtNLnRvT2JqZWN0PWZ1bmN0aW9uKGEpe3JldHVybiBEayhhLHRoaXMpfTtmdW5jdGlvbiBEayhhLGMpe3ZhciBkLGY9e3RvcFZhbHVlc0xpc3Q6dmYoYy5nZXRUb3BWYWx1ZXNMaXN0KCksQ2ssYSkscmFua0hpc3RvZ3JhbTooZD1jLmdldFJhbmtIaXN0b2dyYW0oKSkmJnJrKGEsZCl9O2EmJihmLiRqc3BiTWVzc2FnZUluc3RhbmNlPWMpO3JldHVybiBmfQpmdW5jdGlvbiBGayhhLGMpe2Zvcig7Yy5uZXh0RmllbGQoKSYmIWMuaXNFbmRHcm91cCgpOylzd2l0Y2goYy5nZXRGaWVsZE51bWJlcigpKXtjYXNlIDE6dmFyIGQ9bmV3IHhqO2MucmVhZE1lc3NhZ2UoZCxFayk7YS5hZGRUb3BWYWx1ZXMoZCk7YnJlYWs7Y2FzZSAyOmQ9bmV3IElqO2MucmVhZE1lc3NhZ2UoZCx0ayk7YS5zZXRSYW5rSGlzdG9ncmFtKGQpO2JyZWFrO2RlZmF1bHQ6Yy5za2lwRmllbGQoKX1yZXR1cm4gYX1NLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciBhPW5ldyBkZTtIayh0aGlzLGEpO3JldHVybiBhLmdldFJlc3VsdEJ1ZmZlcigpfTtmdW5jdGlvbiBIayhhLGMpe3ZhciBkPWEuZ2V0VG9wVmFsdWVzTGlzdCgpOzA8ZC5sZW5ndGgmJmMud3JpdGVSZXBlYXRlZE1lc3NhZ2UoMSxkLEdrKTtkPWEuZ2V0UmFua0hpc3RvZ3JhbSgpO251bGwhPWQmJmMud3JpdGVNZXNzYWdlKDIsZCx2ayl9Ck0uZ2V0VG9wVmFsdWVzTGlzdD1mdW5jdGlvbigpe3JldHVybiBJZyh0aGlzLHhqLDEpfTtNLnNldFRvcFZhbHVlc0xpc3Q9ZnVuY3Rpb24oYSl7TWcodGhpcywxLGEpfTtNLmFkZFRvcFZhbHVlcz1mdW5jdGlvbihhKXtyZXR1cm4gTmcodGhpcywxLGEseGosdm9pZCAwKX07TS5jbGVhclRvcFZhbHVlc0xpc3Q9ZnVuY3Rpb24oKXt0aGlzLnNldFRvcFZhbHVlc0xpc3QoW10pfTtNLmdldFJhbmtIaXN0b2dyYW09ZnVuY3Rpb24oKXtyZXR1cm4gSGcodGhpcyxJaiwyKX07TS5zZXRSYW5rSGlzdG9ncmFtPWZ1bmN0aW9uKGEpe0tnKHRoaXMsMixhKX07TS5jbGVhclJhbmtIaXN0b2dyYW09ZnVuY3Rpb24oKXt0aGlzLnNldFJhbmtIaXN0b2dyYW0odm9pZCAwKX07TS5oYXNSYW5rSGlzdG9ncmFtPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXdmKHRoaXMsMil9O009Q2oucHJvdG90eXBlO00udG9PYmplY3Q9ZnVuY3Rpb24oYSl7cmV0dXJuIGFrKGEsdGhpcyl9OwpmdW5jdGlvbiBhayhhLGMpe3ZhciBkLGY9e2NvbW1vblN0YXRzOihkPWMuZ2V0Q29tbW9uU3RhdHMoKSkmJndrKGEsZCksdW5pcXVlOkZmKGMsMiwwKSxhdmdOdW1CeXRlczpHZihjLDMpLG1pbk51bUJ5dGVzOkdmKGMsNCksbWF4TnVtQnl0ZXM6R2YoYyw1KX07YSYmKGYuJGpzcGJNZXNzYWdlSW5zdGFuY2U9Yyk7cmV0dXJuIGZ9CmZ1bmN0aW9uIGZrKGEsYyl7Zm9yKDtjLm5leHRGaWVsZCgpJiYhYy5pc0VuZEdyb3VwKCk7KXN3aXRjaChjLmdldEZpZWxkTnVtYmVyKCkpe2Nhc2UgMTp2YXIgZD1uZXcgRWo7Yy5yZWFkTWVzc2FnZShkLHlrKTthLnNldENvbW1vblN0YXRzKGQpO2JyZWFrO2Nhc2UgMjpkPWMucmVhZFVpbnQ2NCgpO2Euc2V0VW5pcXVlKGQpO2JyZWFrO2Nhc2UgMzpkPWMucmVhZEZsb2F0KCk7YS5zZXRBdmdOdW1CeXRlcyhkKTticmVhaztjYXNlIDQ6ZD1jLnJlYWRGbG9hdCgpO2Euc2V0TWluTnVtQnl0ZXMoZCk7YnJlYWs7Y2FzZSA1OmQ9Yy5yZWFkRmxvYXQoKTthLnNldE1heE51bUJ5dGVzKGQpO2JyZWFrO2RlZmF1bHQ6Yy5za2lwRmllbGQoKX1yZXR1cm4gYX1NLnNlcmlhbGl6ZUJpbmFyeT1mdW5jdGlvbigpe3ZhciBhPW5ldyBkZTtrayh0aGlzLGEpO3JldHVybiBhLmdldFJlc3VsdEJ1ZmZlcigpfTsKZnVuY3Rpb24ga2soYSxjKXt2YXIgZD1hLmdldENvbW1vblN0YXRzKCk7bnVsbCE9ZCYmYy53cml0ZU1lc3NhZ2UoMSxkLEFrKTtkPWEuZ2V0VW5pcXVlKCk7MCE9PWQmJmMud3JpdGVVaW50NjQoMixkKTtkPWEuZ2V0QXZnTnVtQnl0ZXMoKTswIT09ZCYmYy53cml0ZUZsb2F0KDMsZCk7ZD1hLmdldE1pbk51bUJ5dGVzKCk7MCE9PWQmJmMud3JpdGVGbG9hdCg0LGQpO2Q9YS5nZXRNYXhOdW1CeXRlcygpOzAhPT1kJiZjLndyaXRlRmxvYXQoNSxkKX1NLmdldENvbW1vblN0YXRzPWZ1bmN0aW9uKCl7cmV0dXJuIEhnKHRoaXMsRWosMSl9O00uc2V0Q29tbW9uU3RhdHM9ZnVuY3Rpb24oYSl7S2codGhpcywxLGEpfTtNLmNsZWFyQ29tbW9uU3RhdHM9ZnVuY3Rpb24oKXt0aGlzLnNldENvbW1vblN0YXRzKHZvaWQgMCl9O00uaGFzQ29tbW9uU3RhdHM9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9d2YodGhpcywxKX07TS5nZXRVbmlxdWU9ZnVuY3Rpb24oKXtyZXR1cm4gRmYodGhpcywyLDApfTsKTS5zZXRVbmlxdWU9ZnVuY3Rpb24oYSl7SmYodGhpcywyLGEpfTtNLmdldEF2Z051bUJ5dGVzPWZ1bmN0aW9uKCl7cmV0dXJuIEdmKHRoaXMsMyl9O00uc2V0QXZnTnVtQnl0ZXM9ZnVuY3Rpb24oYSl7TGYodGhpcywzLGEpfTtNLmdldE1pbk51bUJ5dGVzPWZ1bmN0aW9uKCl7cmV0dXJuIEdmKHRoaXMsNCl9O00uc2V0TWluTnVtQnl0ZXM9ZnVuY3Rpb24oYSl7TGYodGhpcyw0LGEpfTtNLmdldE1heE51bUJ5dGVzPWZ1bmN0aW9uKCl7cmV0dXJuIEdmKHRoaXMsNSl9O00uc2V0TWF4TnVtQnl0ZXM9ZnVuY3Rpb24oYSl7TGYodGhpcyw1LGEpfTtNPURqLnByb3RvdHlwZTtNLnRvT2JqZWN0PWZ1bmN0aW9uKGEpe3JldHVybiBiayhhLHRoaXMpfTtmdW5jdGlvbiBiayhhLGMpe3ZhciBkLGY9e2NvbW1vblN0YXRzOihkPWMuZ2V0Q29tbW9uU3RhdHMoKSkmJndrKGEsZCl9O2EmJihmLiRqc3BiTWVzc2FnZUluc3RhbmNlPWMpO3JldHVybiBmfQpmdW5jdGlvbiBnayhhLGMpe2Zvcig7Yy5uZXh0RmllbGQoKSYmIWMuaXNFbmRHcm91cCgpOylzd2l0Y2goYy5nZXRGaWVsZE51bWJlcigpKXtjYXNlIDE6dmFyIGQ9bmV3IEVqO2MucmVhZE1lc3NhZ2UoZCx5ayk7YS5zZXRDb21tb25TdGF0cyhkKTticmVhaztkZWZhdWx0OmMuc2tpcEZpZWxkKCl9cmV0dXJuIGF9TS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgYT1uZXcgZGU7bGsodGhpcyxhKTtyZXR1cm4gYS5nZXRSZXN1bHRCdWZmZXIoKX07ZnVuY3Rpb24gbGsoYSxjKXthPWEuZ2V0Q29tbW9uU3RhdHMoKTtudWxsIT1hJiZjLndyaXRlTWVzc2FnZSgxLGEsQWspfU0uZ2V0Q29tbW9uU3RhdHM9ZnVuY3Rpb24oKXtyZXR1cm4gSGcodGhpcyxFaiwxKX07TS5zZXRDb21tb25TdGF0cz1mdW5jdGlvbihhKXtLZyh0aGlzLDEsYSl9O00uY2xlYXJDb21tb25TdGF0cz1mdW5jdGlvbigpe3RoaXMuc2V0Q29tbW9uU3RhdHModm9pZCAwKX07Ck0uaGFzQ29tbW9uU3RhdHM9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9d2YodGhpcywxKX07TT1Fai5wcm90b3R5cGU7TS50b09iamVjdD1mdW5jdGlvbihhKXtyZXR1cm4gd2soYSx0aGlzKX07CmZ1bmN0aW9uIHdrKGEsYyl7dmFyIGQsZj17bnVtTm9uTWlzc2luZzpGZihjLDEsMCksbnVtTWlzc2luZzpGZihjLDIsMCksbWluTnVtVmFsdWVzOkZmKGMsMywwKSxtYXhOdW1WYWx1ZXM6RmYoYyw0LDApLGF2Z051bVZhbHVlczpHZihjLDUpLHRvdE51bVZhbHVlczpGZihjLDgsMCksbnVtVmFsdWVzSGlzdG9ncmFtOihkPWMuZ2V0TnVtVmFsdWVzSGlzdG9ncmFtKCkpJiZxayhhLGQpLHdlaWdodGVkQ29tbW9uU3RhdHM6KGQ9Yy5nZXRXZWlnaHRlZENvbW1vblN0YXRzKCkpJiZuayhhLGQpLGZlYXR1cmVMaXN0TGVuZ3RoSGlzdG9ncmFtOihkPWMuZ2V0RmVhdHVyZUxpc3RMZW5ndGhIaXN0b2dyYW0oKSkmJnFrKGEsZCl9O2EmJihmLiRqc3BiTWVzc2FnZUluc3RhbmNlPWMpO3JldHVybiBmfQpmdW5jdGlvbiB5ayhhLGMpe2Zvcig7Yy5uZXh0RmllbGQoKSYmIWMuaXNFbmRHcm91cCgpOylzd2l0Y2goYy5nZXRGaWVsZE51bWJlcigpKXtjYXNlIDE6dmFyIGQ9Yy5yZWFkVWludDY0KCk7YS5zZXROdW1Ob25NaXNzaW5nKGQpO2JyZWFrO2Nhc2UgMjpkPWMucmVhZFVpbnQ2NCgpO2Euc2V0TnVtTWlzc2luZyhkKTticmVhaztjYXNlIDM6ZD1jLnJlYWRVaW50NjQoKTthLnNldE1pbk51bVZhbHVlcyhkKTticmVhaztjYXNlIDQ6ZD1jLnJlYWRVaW50NjQoKTthLnNldE1heE51bVZhbHVlcyhkKTticmVhaztjYXNlIDU6ZD1jLnJlYWRGbG9hdCgpO2Euc2V0QXZnTnVtVmFsdWVzKGQpO2JyZWFrO2Nhc2UgODpkPWMucmVhZFVpbnQ2NCgpO2Euc2V0VG90TnVtVmFsdWVzKGQpO2JyZWFrO2Nhc2UgNjpkPW5ldyBGajtjLnJlYWRNZXNzYWdlKGQsc2spO2Euc2V0TnVtVmFsdWVzSGlzdG9ncmFtKGQpO2JyZWFrO2Nhc2UgNzpkPW5ldyBxajtjLnJlYWRNZXNzYWdlKGQsb2spO2Euc2V0V2VpZ2h0ZWRDb21tb25TdGF0cyhkKTsKYnJlYWs7Y2FzZSA5OmQ9bmV3IEZqO2MucmVhZE1lc3NhZ2UoZCxzayk7YS5zZXRGZWF0dXJlTGlzdExlbmd0aEhpc3RvZ3JhbShkKTticmVhaztkZWZhdWx0OmMuc2tpcEZpZWxkKCl9cmV0dXJuIGF9TS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgYT1uZXcgZGU7QWsodGhpcyxhKTtyZXR1cm4gYS5nZXRSZXN1bHRCdWZmZXIoKX07CmZ1bmN0aW9uIEFrKGEsYyl7dmFyIGQ9YS5nZXROdW1Ob25NaXNzaW5nKCk7MCE9PWQmJmMud3JpdGVVaW50NjQoMSxkKTtkPWEuZ2V0TnVtTWlzc2luZygpOzAhPT1kJiZjLndyaXRlVWludDY0KDIsZCk7ZD1hLmdldE1pbk51bVZhbHVlcygpOzAhPT1kJiZjLndyaXRlVWludDY0KDMsZCk7ZD1hLmdldE1heE51bVZhbHVlcygpOzAhPT1kJiZjLndyaXRlVWludDY0KDQsZCk7ZD1hLmdldEF2Z051bVZhbHVlcygpOzAhPT1kJiZjLndyaXRlRmxvYXQoNSxkKTtkPWEuZ2V0VG90TnVtVmFsdWVzKCk7MCE9PWQmJmMud3JpdGVVaW50NjQoOCxkKTtkPWEuZ2V0TnVtVmFsdWVzSGlzdG9ncmFtKCk7bnVsbCE9ZCYmYy53cml0ZU1lc3NhZ2UoNixkLHVrKTtkPWEuZ2V0V2VpZ2h0ZWRDb21tb25TdGF0cygpO251bGwhPWQmJmMud3JpdGVNZXNzYWdlKDcsZCxwayk7ZD1hLmdldEZlYXR1cmVMaXN0TGVuZ3RoSGlzdG9ncmFtKCk7bnVsbCE9ZCYmYy53cml0ZU1lc3NhZ2UoOSxkLHVrKX0KTS5nZXROdW1Ob25NaXNzaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIEZmKHRoaXMsMSwwKX07TS5zZXROdW1Ob25NaXNzaW5nPWZ1bmN0aW9uKGEpe0pmKHRoaXMsMSxhKX07TS5nZXROdW1NaXNzaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIEZmKHRoaXMsMiwwKX07TS5zZXROdW1NaXNzaW5nPWZ1bmN0aW9uKGEpe0pmKHRoaXMsMixhKX07TS5nZXRNaW5OdW1WYWx1ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gRmYodGhpcywzLDApfTtNLnNldE1pbk51bVZhbHVlcz1mdW5jdGlvbihhKXtKZih0aGlzLDMsYSl9O00uZ2V0TWF4TnVtVmFsdWVzPWZ1bmN0aW9uKCl7cmV0dXJuIEZmKHRoaXMsNCwwKX07TS5zZXRNYXhOdW1WYWx1ZXM9ZnVuY3Rpb24oYSl7SmYodGhpcyw0LGEpfTtNLmdldEF2Z051bVZhbHVlcz1mdW5jdGlvbigpe3JldHVybiBHZih0aGlzLDUpfTtNLnNldEF2Z051bVZhbHVlcz1mdW5jdGlvbihhKXtMZih0aGlzLDUsYSl9OwpNLmdldFRvdE51bVZhbHVlcz1mdW5jdGlvbigpe3JldHVybiBGZih0aGlzLDgsMCl9O00uc2V0VG90TnVtVmFsdWVzPWZ1bmN0aW9uKGEpe0pmKHRoaXMsOCxhKX07TS5nZXROdW1WYWx1ZXNIaXN0b2dyYW09ZnVuY3Rpb24oKXtyZXR1cm4gSGcodGhpcyxGaiw2KX07TS5zZXROdW1WYWx1ZXNIaXN0b2dyYW09ZnVuY3Rpb24oYSl7S2codGhpcyw2LGEpfTtNLmNsZWFyTnVtVmFsdWVzSGlzdG9ncmFtPWZ1bmN0aW9uKCl7dGhpcy5zZXROdW1WYWx1ZXNIaXN0b2dyYW0odm9pZCAwKX07TS5oYXNOdW1WYWx1ZXNIaXN0b2dyYW09ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9d2YodGhpcyw2KX07TS5nZXRXZWlnaHRlZENvbW1vblN0YXRzPWZ1bmN0aW9uKCl7cmV0dXJuIEhnKHRoaXMscWosNyl9O00uc2V0V2VpZ2h0ZWRDb21tb25TdGF0cz1mdW5jdGlvbihhKXtLZyh0aGlzLDcsYSl9O00uY2xlYXJXZWlnaHRlZENvbW1vblN0YXRzPWZ1bmN0aW9uKCl7dGhpcy5zZXRXZWlnaHRlZENvbW1vblN0YXRzKHZvaWQgMCl9OwpNLmhhc1dlaWdodGVkQ29tbW9uU3RhdHM9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9d2YodGhpcyw3KX07TS5nZXRGZWF0dXJlTGlzdExlbmd0aEhpc3RvZ3JhbT1mdW5jdGlvbigpe3JldHVybiBIZyh0aGlzLEZqLDkpfTtNLnNldEZlYXR1cmVMaXN0TGVuZ3RoSGlzdG9ncmFtPWZ1bmN0aW9uKGEpe0tnKHRoaXMsOSxhKX07TS5jbGVhckZlYXR1cmVMaXN0TGVuZ3RoSGlzdG9ncmFtPWZ1bmN0aW9uKCl7dGhpcy5zZXRGZWF0dXJlTGlzdExlbmd0aEhpc3RvZ3JhbSh2b2lkIDApfTtNLmhhc0ZlYXR1cmVMaXN0TGVuZ3RoSGlzdG9ncmFtPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXdmKHRoaXMsOSl9O3ZhciBHaj1bM107RmoucHJvdG90eXBlLnRvT2JqZWN0PWZ1bmN0aW9uKGEpe3JldHVybiBxayhhLHRoaXMpfTsKZnVuY3Rpb24gcWsoYSxjKXt2YXIgZD17bnVtTmFuOkZmKGMsMSwwKSxudW1VbmRlZmluZWQ6RmYoYywyLDApLGJ1Y2tldHNMaXN0OnZmKGMuZ2V0QnVja2V0c0xpc3QoKSxJayxhKSx0eXBlOkZmKGMsNCwwKSxuYW1lOkZmKGMsNSwiIil9O2EmJihkLiRqc3BiTWVzc2FnZUluc3RhbmNlPWMpO3JldHVybiBkfQpmdW5jdGlvbiBzayhhLGMpe2Zvcig7Yy5uZXh0RmllbGQoKSYmIWMuaXNFbmRHcm91cCgpOylzd2l0Y2goYy5nZXRGaWVsZE51bWJlcigpKXtjYXNlIDE6dmFyIGQ9Yy5yZWFkVWludDY0KCk7YS5zZXROdW1OYW4oZCk7YnJlYWs7Y2FzZSAyOmQ9Yy5yZWFkVWludDY0KCk7YS5zZXROdW1VbmRlZmluZWQoZCk7YnJlYWs7Y2FzZSAzOmQ9bmV3IEhqO2MucmVhZE1lc3NhZ2UoZCxKayk7YS5hZGRCdWNrZXRzKGQpO2JyZWFrO2Nhc2UgNDpkPWMucmVhZEVudW0oKTthLnNldFR5cGUoZCk7YnJlYWs7Y2FzZSA1OmQ9Yy5yZWFkU3RyaW5nKCk7YS5zZXROYW1lKGQpO2JyZWFrO2RlZmF1bHQ6Yy5za2lwRmllbGQoKX1yZXR1cm4gYX1Gai5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIGE9bmV3IGRlO3VrKHRoaXMsYSk7cmV0dXJuIGEuZ2V0UmVzdWx0QnVmZmVyKCl9OwpmdW5jdGlvbiB1ayhhLGMpe3ZhciBkPWEuZ2V0TnVtTmFuKCk7MCE9PWQmJmMud3JpdGVVaW50NjQoMSxkKTtkPWEuZ2V0TnVtVW5kZWZpbmVkKCk7MCE9PWQmJmMud3JpdGVVaW50NjQoMixkKTtkPWEuZ2V0QnVja2V0c0xpc3QoKTswPGQubGVuZ3RoJiZjLndyaXRlUmVwZWF0ZWRNZXNzYWdlKDMsZCxLayk7ZD1hLmdldFR5cGUoKTswIT09ZCYmYy53cml0ZUVudW0oNCxkKTtkPWEuZ2V0TmFtZSgpOzA8ZC5sZW5ndGgmJmMud3JpdGVTdHJpbmcoNSxkKX1NPUhqLnByb3RvdHlwZTtNLnRvT2JqZWN0PWZ1bmN0aW9uKGEpe3JldHVybiBJayhhLHRoaXMpfTtmdW5jdGlvbiBJayhhLGMpe3ZhciBkPXtsb3dWYWx1ZTpHZihjLDEpLGhpZ2hWYWx1ZTpHZihjLDIpLGRlcHJlY2F0ZWRDb3VudDpGZihjLDMsMCksc2FtcGxlQ291bnQ6R2YoYyw0KX07YSYmKGQuJGpzcGJNZXNzYWdlSW5zdGFuY2U9Yyk7cmV0dXJuIGR9CmZ1bmN0aW9uIEprKGEsYyl7Zm9yKDtjLm5leHRGaWVsZCgpJiYhYy5pc0VuZEdyb3VwKCk7KXN3aXRjaChjLmdldEZpZWxkTnVtYmVyKCkpe2Nhc2UgMTp2YXIgZD1jLnJlYWREb3VibGUoKTthLnNldExvd1ZhbHVlKGQpO2JyZWFrO2Nhc2UgMjpkPWMucmVhZERvdWJsZSgpO2Euc2V0SGlnaFZhbHVlKGQpO2JyZWFrO2Nhc2UgMzpkPWMucmVhZFVpbnQ2NCgpO2Euc2V0RGVwcmVjYXRlZENvdW50KGQpO2JyZWFrO2Nhc2UgNDpkPWMucmVhZERvdWJsZSgpO2Euc2V0U2FtcGxlQ291bnQoZCk7YnJlYWs7ZGVmYXVsdDpjLnNraXBGaWVsZCgpfXJldHVybiBhfU0uc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIGE9bmV3IGRlO0trKHRoaXMsYSk7cmV0dXJuIGEuZ2V0UmVzdWx0QnVmZmVyKCl9OwpmdW5jdGlvbiBLayhhLGMpe3ZhciBkPWEuZ2V0TG93VmFsdWUoKTswIT09ZCYmYy53cml0ZURvdWJsZSgxLGQpO2Q9YS5nZXRIaWdoVmFsdWUoKTswIT09ZCYmYy53cml0ZURvdWJsZSgyLGQpO2Q9YS5nZXREZXByZWNhdGVkQ291bnQoKTswIT09ZCYmYy53cml0ZVVpbnQ2NCgzLGQpO2Q9YS5nZXRTYW1wbGVDb3VudCgpOzAhPT1kJiZjLndyaXRlRG91YmxlKDQsZCl9TS5nZXRMb3dWYWx1ZT1mdW5jdGlvbigpe3JldHVybiBHZih0aGlzLDEpfTtNLnNldExvd1ZhbHVlPWZ1bmN0aW9uKGEpe0xmKHRoaXMsMSxhKX07TS5nZXRIaWdoVmFsdWU9ZnVuY3Rpb24oKXtyZXR1cm4gR2YodGhpcywyKX07TS5zZXRIaWdoVmFsdWU9ZnVuY3Rpb24oYSl7TGYodGhpcywyLGEpfTtNLmdldERlcHJlY2F0ZWRDb3VudD1mdW5jdGlvbigpe3JldHVybiBGZih0aGlzLDMsMCl9O00uc2V0RGVwcmVjYXRlZENvdW50PWZ1bmN0aW9uKGEpe0pmKHRoaXMsMyxhKX07Ck0uZ2V0U2FtcGxlQ291bnQ9ZnVuY3Rpb24oKXtyZXR1cm4gR2YodGhpcyw0KX07TS5zZXRTYW1wbGVDb3VudD1mdW5jdGlvbihhKXtMZih0aGlzLDQsYSl9O009RmoucHJvdG90eXBlO00uZ2V0TnVtTmFuPWZ1bmN0aW9uKCl7cmV0dXJuIEZmKHRoaXMsMSwwKX07TS5zZXROdW1OYW49ZnVuY3Rpb24oYSl7SmYodGhpcywxLGEpfTtNLmdldE51bVVuZGVmaW5lZD1mdW5jdGlvbigpe3JldHVybiBGZih0aGlzLDIsMCl9O00uc2V0TnVtVW5kZWZpbmVkPWZ1bmN0aW9uKGEpe0pmKHRoaXMsMixhKX07TS5nZXRCdWNrZXRzTGlzdD1mdW5jdGlvbigpe3JldHVybiBJZyh0aGlzLEhqLDMpfTtNLnNldEJ1Y2tldHNMaXN0PWZ1bmN0aW9uKGEpe01nKHRoaXMsMyxhKX07TS5hZGRCdWNrZXRzPWZ1bmN0aW9uKGEpe3JldHVybiBOZyh0aGlzLDMsYSxIaix2b2lkIDApfTtNLmNsZWFyQnVja2V0c0xpc3Q9ZnVuY3Rpb24oKXt0aGlzLnNldEJ1Y2tldHNMaXN0KFtdKX07Ck0uZ2V0VHlwZT1mdW5jdGlvbigpe3JldHVybiBGZih0aGlzLDQsMCl9O00uc2V0VHlwZT1mdW5jdGlvbihhKXtOZih0aGlzLDQsYSl9O00uZ2V0TmFtZT1mdW5jdGlvbigpe3JldHVybiBGZih0aGlzLDUsIiIpfTtNLnNldE5hbWU9ZnVuY3Rpb24oYSl7TWYodGhpcyw1LGEpfTt2YXIgSmo9WzFdO0lqLnByb3RvdHlwZS50b09iamVjdD1mdW5jdGlvbihhKXtyZXR1cm4gcmsoYSx0aGlzKX07ZnVuY3Rpb24gcmsoYSxjKXt2YXIgZD17YnVja2V0c0xpc3Q6dmYoYy5nZXRCdWNrZXRzTGlzdCgpLExrLGEpLG5hbWU6RmYoYywyLCIiKX07YSYmKGQuJGpzcGJNZXNzYWdlSW5zdGFuY2U9Yyk7cmV0dXJuIGR9CmZ1bmN0aW9uIHRrKGEsYyl7Zm9yKDtjLm5leHRGaWVsZCgpJiYhYy5pc0VuZEdyb3VwKCk7KXN3aXRjaChjLmdldEZpZWxkTnVtYmVyKCkpe2Nhc2UgMTp2YXIgZD1uZXcgS2o7Yy5yZWFkTWVzc2FnZShkLE1rKTthLmFkZEJ1Y2tldHMoZCk7YnJlYWs7Y2FzZSAyOmQ9Yy5yZWFkU3RyaW5nKCk7YS5zZXROYW1lKGQpO2JyZWFrO2RlZmF1bHQ6Yy5za2lwRmllbGQoKX1yZXR1cm4gYX1Jai5wcm90b3R5cGUuc2VyaWFsaXplQmluYXJ5PWZ1bmN0aW9uKCl7dmFyIGE9bmV3IGRlO3ZrKHRoaXMsYSk7cmV0dXJuIGEuZ2V0UmVzdWx0QnVmZmVyKCl9O2Z1bmN0aW9uIHZrKGEsYyl7dmFyIGQ9YS5nZXRCdWNrZXRzTGlzdCgpOzA8ZC5sZW5ndGgmJmMud3JpdGVSZXBlYXRlZE1lc3NhZ2UoMSxkLE5rKTtkPWEuZ2V0TmFtZSgpOzA8ZC5sZW5ndGgmJmMud3JpdGVTdHJpbmcoMixkKX1NPUtqLnByb3RvdHlwZTtNLnRvT2JqZWN0PWZ1bmN0aW9uKGEpe3JldHVybiBMayhhLHRoaXMpfTsKZnVuY3Rpb24gTGsoYSxjKXt2YXIgZD17bG93UmFuazpGZihjLDEsMCksaGlnaFJhbms6RmYoYywyLDApLGRlcHJlY2F0ZWRDb3VudDpGZihjLDMsMCksbGFiZWw6RmYoYyw0LCIiKSxzYW1wbGVDb3VudDpHZihjLDUpfTthJiYoZC4kanNwYk1lc3NhZ2VJbnN0YW5jZT1jKTtyZXR1cm4gZH0KZnVuY3Rpb24gTWsoYSxjKXtmb3IoO2MubmV4dEZpZWxkKCkmJiFjLmlzRW5kR3JvdXAoKTspc3dpdGNoKGMuZ2V0RmllbGROdW1iZXIoKSl7Y2FzZSAxOnZhciBkPWMucmVhZFVpbnQ2NCgpO2Euc2V0TG93UmFuayhkKTticmVhaztjYXNlIDI6ZD1jLnJlYWRVaW50NjQoKTthLnNldEhpZ2hSYW5rKGQpO2JyZWFrO2Nhc2UgMzpkPWMucmVhZFVpbnQ2NCgpO2Euc2V0RGVwcmVjYXRlZENvdW50KGQpO2JyZWFrO2Nhc2UgNDpkPWMucmVhZFN0cmluZygpO2Euc2V0TGFiZWwoZCk7YnJlYWs7Y2FzZSA1OmQ9Yy5yZWFkRG91YmxlKCk7YS5zZXRTYW1wbGVDb3VudChkKTticmVhaztkZWZhdWx0OmMuc2tpcEZpZWxkKCl9cmV0dXJuIGF9TS5zZXJpYWxpemVCaW5hcnk9ZnVuY3Rpb24oKXt2YXIgYT1uZXcgZGU7TmsodGhpcyxhKTtyZXR1cm4gYS5nZXRSZXN1bHRCdWZmZXIoKX07CmZ1bmN0aW9uIE5rKGEsYyl7dmFyIGQ9YS5nZXRMb3dSYW5rKCk7MCE9PWQmJmMud3JpdGVVaW50NjQoMSxkKTtkPWEuZ2V0SGlnaFJhbmsoKTswIT09ZCYmYy53cml0ZVVpbnQ2NCgyLGQpO2Q9YS5nZXREZXByZWNhdGVkQ291bnQoKTswIT09ZCYmYy53cml0ZVVpbnQ2NCgzLGQpO2Q9YS5nZXRMYWJlbCgpOzA8ZC5sZW5ndGgmJmMud3JpdGVTdHJpbmcoNCxkKTtkPWEuZ2V0U2FtcGxlQ291bnQoKTswIT09ZCYmYy53cml0ZURvdWJsZSg1LGQpfU0uZ2V0TG93UmFuaz1mdW5jdGlvbigpe3JldHVybiBGZih0aGlzLDEsMCl9O00uc2V0TG93UmFuaz1mdW5jdGlvbihhKXtKZih0aGlzLDEsYSl9O00uZ2V0SGlnaFJhbms9ZnVuY3Rpb24oKXtyZXR1cm4gRmYodGhpcywyLDApfTtNLnNldEhpZ2hSYW5rPWZ1bmN0aW9uKGEpe0pmKHRoaXMsMixhKX07TS5nZXREZXByZWNhdGVkQ291bnQ9ZnVuY3Rpb24oKXtyZXR1cm4gRmYodGhpcywzLDApfTsKTS5zZXREZXByZWNhdGVkQ291bnQ9ZnVuY3Rpb24oYSl7SmYodGhpcywzLGEpfTtNLmdldExhYmVsPWZ1bmN0aW9uKCl7cmV0dXJuIEZmKHRoaXMsNCwiIil9O00uc2V0TGFiZWw9ZnVuY3Rpb24oYSl7TWYodGhpcyw0LGEpfTtNLmdldFNhbXBsZUNvdW50PWZ1bmN0aW9uKCl7cmV0dXJuIEdmKHRoaXMsNSl9O00uc2V0U2FtcGxlQ291bnQ9ZnVuY3Rpb24oYSl7TGYodGhpcyw1LGEpfTtNPUlqLnByb3RvdHlwZTtNLmdldEJ1Y2tldHNMaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIElnKHRoaXMsS2osMSl9O00uc2V0QnVja2V0c0xpc3Q9ZnVuY3Rpb24oYSl7TWcodGhpcywxLGEpfTtNLmFkZEJ1Y2tldHM9ZnVuY3Rpb24oYSl7cmV0dXJuIE5nKHRoaXMsMSxhLEtqLHZvaWQgMCl9O00uY2xlYXJCdWNrZXRzTGlzdD1mdW5jdGlvbigpe3RoaXMuc2V0QnVja2V0c0xpc3QoW10pfTtNLmdldE5hbWU9ZnVuY3Rpb24oKXtyZXR1cm4gRmYodGhpcywyLCIiKX07Ck0uc2V0TmFtZT1mdW5jdGlvbihhKXtNZih0aGlzLDIsYSl9OwovL35+V0VCUEFUSH5+ZXh0ZXJuYWwvY29tX2dvb2dsZV9qYXZhc2NyaXB0X2Nsb3N1cmVfbGlicmFyeS9jbG9zdXJlL2dvb2cvZGVwcy5qcwovL35+V0VCUEFUSH5+L2FuYWx5dGljcy5odG1sLmpzCndpbmRvdy5nYT1mdW5jdGlvbigpe307Cjwvc2NyaXB0PgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKPHN0eWxlPgpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvJyksIGxvY2FsKCdSb2JvdG8tUmVndWxhcicpLCB1cmwoL2ZvbnQtcm9ib3RvL3VZRUNNS29IY085eDF3ZG1ieUhJbTMtX2tmNkJ5WU82Q0xZZEI0SFFFLVkud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzA0MDAtMDQ1RiwgVSswNDkwLTA0OTEsIFUrMDRCMC0wNEIxLCBVKzIxMTY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNDAwOwogIHNyYzogbG9jYWwoJ1JvYm90bycpLCBsb2NhbCgnUm9ib3RvLVJlZ3VsYXInKSwgdXJsKC9mb250LXJvYm90by9zVGRhQTZqMFBzYjkyMFZqdi1tcnpILV9rZjZCeVlPNkNMWWRCNEhRRS1ZLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDYwLTA1MkYsIFUrMjBCNCwgVSsyREUwLTJERkYsIFUrQTY0MC1BNjlGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8nKSwgbG9jYWwoJ1JvYm90by1SZWd1bGFyJyksIHVybCgvZm9udC1yb2JvdG8vX1ZZRngtczgyNGtYcV9VbDJCSHFZSC1fa2Y2QnlZTzZDTFlkQjRIUUUtWS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDM3MC0wM0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8nKSwgbG9jYWwoJ1JvYm90by1SZWd1bGFyJyksIHVybCgvZm9udC1yb2JvdG8vdG5qNFNCNkROYmRhUW5zTThDRnFCWC1fa2Y2QnlZTzZDTFlkQjRIUUUtWS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMUYwMC0xRkZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8nKSwgbG9jYWwoJ1JvYm90by1SZWd1bGFyJyksIHVybCgvZm9udC1yb2JvdG8vb01NZ2ZaTVF0aE9yeVFvOW4yMmRjdXZ2RGluMXBLOGFLdGVMcGVaNWMwQS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDAwMC0wMEZGLCBVKzAxMzEsIFUrMDE1Mi0wMTUzLCBVKzAyQzYsIFUrMDJEQSwgVSswMkRDLCBVKzIwMDAtMjA2RiwgVSsyMDc0LCBVKzIwQUMsIFUrMjIxMiwgVSsyMjE1Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8nKSwgbG9jYWwoJ1JvYm90by1SZWd1bGFyJyksIHVybCgvZm9udC1yb2JvdG8vS3NfY1Z4aUNpd1VXVnNGV0ZBM0Jqbi1fa2Y2QnlZTzZDTFlkQjRIUUUtWS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMC0wMjRGLCBVKzFFMDAtMUVGRiwgVSsyMEEwLTIwQUIsIFUrMjBBRC0yMENGLCBVKzJDNjAtMkM3RiwgVStBNzIwLUE3RkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNDAwOwogIHNyYzogbG9jYWwoJ1JvYm90bycpLCBsb2NhbCgnUm9ib3RvLVJlZ3VsYXInKSwgdXJsKC9mb250LXJvYm90by9OSjR2eGxnV3dXYkVzdjE4ZEFocW5uLV9rZjZCeVlPNkNMWWRCNEhRRS1ZLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMTAyLTAxMDMsIFUrMUVBMC0xRUY5LCBVKzIwQUI7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBCb2xkJyksIGxvY2FsKCdSb2JvdG8tQm9sZCcpLCB1cmwoL2ZvbnQtcm9ib3RvL2lzWi13YkNYTktBYm5qbzZfVHdIVG9YMGhWZ3paUVVmUkR1WnJQdkgzRDgud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzA0MDAtMDQ1RiwgVSswNDkwLTA0OTEsIFUrMDRCMC0wNEIxLCBVKzIxMTY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBCb2xkJyksIGxvY2FsKCdSb2JvdG8tQm9sZCcpLCB1cmwoL2ZvbnQtcm9ib3RvLzc3RlhGalJiR3pONGFDclNGaGxoM29YMGhWZ3paUVVmUkR1WnJQdkgzRDgud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzA0NjAtMDUyRiwgVSsyMEI0LCBVKzJERTAtMkRGRiwgVStBNjQwLUE2OUY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBCb2xkJyksIGxvY2FsKCdSb2JvdG8tQm9sZCcpLCB1cmwoL2ZvbnQtcm9ib3RvL2pTTjJDR1ZEYmNWeUNuZkpmalNkZklYMGhWZ3paUVVmUkR1WnJQdkgzRDgud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAzNzAtMDNGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIEJvbGQnKSwgbG9jYWwoJ1JvYm90by1Cb2xkJyksIHVybCgvZm9udC1yb2JvdG8vVVg2aTRKeFFEbTNmVlRjMUNQdXdxb1gwaFZnelpRVWZSRHVaclB2SDNEOC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMUYwMC0xRkZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gQm9sZCcpLCBsb2NhbCgnUm9ib3RvLUJvbGQnKSwgdXJsKC9mb250LXJvYm90by9kLTZJWXBsT0ZvY0NhY0t6eHdYU09KQncxeFUxcktwdEpqXzBqYW5zOTIwLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMDAwLTAwRkYsIFUrMDEzMSwgVSswMTUyLTAxNTMsIFUrMDJDNiwgVSswMkRBLCBVKzAyREMsIFUrMjAwMC0yMDZGLCBVKzIwNzQsIFUrMjBBQywgVSsyMjEyLCBVKzIyMTU7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBCb2xkJyksIGxvY2FsKCdSb2JvdG8tQm9sZCcpLCB1cmwoL2ZvbnQtcm9ib3RvLzk3dWFoeGlxWlJvbmNCYUNFSTNhVzRYMGhWZ3paUVVmUkR1WnJQdkgzRDgud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDAtMDI0RiwgVSsxRTAwLTFFRkYsIFUrMjBBMC0yMEFCLCBVKzIwQUQtMjBDRiwgVSsyQzYwLTJDN0YsIFUrQTcyMC1BN0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gQm9sZCcpLCBsb2NhbCgnUm9ib3RvLUJvbGQnKSwgdXJsKC9mb250LXJvYm90by9Qd1pjLVliSUw0MTR3QjlyQjFJQVBZWDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMTAyLTAxMDMsIFUrMUVBMC0xRUY5LCBVKzIwQUI7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBCb2xkIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUJvbGRJdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by90Nk5kNGNmUFJoWlA0NFE1UUFqY0MxNHNZWWRKZzVkVTJxekpFVlN1dGEwLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDAwLTA0NUYsIFUrMDQ5MC0wNDkxLCBVKzA0QjAtMDRCMSwgVSsyMTE2Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gQm9sZCBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1Cb2xkSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vdDZOZDRjZlBSaFpQNDRRNVFBamNDX1pyYVIyVGc4dzJsem03a0xOTDAtdy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQ2MC0wNTJGLCBVKzIwQjQsIFUrMkRFMC0yREZGLCBVK0E2NDAtQTY5RjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIEJvbGQgSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tQm9sZEl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvL3Q2TmQ0Y2ZQUmhaUDQ0UTVRQWpjQ3d0X1JtNjkxTFRlYktmWTJaa0tTbUkud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAzNzAtMDNGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIEJvbGQgSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tQm9sZEl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvL3Q2TmQ0Y2ZQUmhaUDQ0UTVRQWpjQzFCVzI2UXhwU2otX1pLbV94VDRoV3cud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzFGMDAtMUZGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIEJvbGQgSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tQm9sZEl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvL3Q2TmQ0Y2ZQUmhaUDQ0UTVRQWpjQzRncDlROGdiWXJocUdsUmF2X0lYZmsud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAwMDAtMDBGRiwgVSswMTMxLCBVKzAxNTItMDE1MywgVSswMkM2LCBVKzAyREEsIFUrMDJEQywgVSsyMDAwLTIwNkYsIFUrMjA3NCwgVSsyMEFDLCBVKzIyMTIsIFUrMjIxNTsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIEJvbGQgSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tQm9sZEl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvL3Q2TmQ0Y2ZQUmhaUDQ0UTVRQWpjQzZFOGtNNHhXUjFfMWJZVVJSb2pSR2Mud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDAtMDI0RiwgVSsxRTAwLTFFRkYsIFUrMjBBMC0yMEFCLCBVKzIwQUQtMjBDRiwgVSsyQzYwLTJDN0YsIFUrQTcyMC1BN0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gQm9sZCBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1Cb2xkSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vdDZOZDRjZlBSaFpQNDRRNVFBamNDOURpTnNSNWEtOU9lX0l2cHU4WFdsWS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMi0wMTAzLCBVKzFFQTAtMUVGOSwgVSsyMEFCOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vT3BYVXFUbzBVZ1FRaEdqX1NGZExXQmtBejRyWW40N1p5MnJ2aWdXUWY2dy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQwMC0wNDVGLCBVKzA0OTAtMDQ5MSwgVSswNEIwLTA0QjEsIFUrMjExNjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvL1d4clhKYTBDM0tkdEM3bE1hZkc0ZFJrQXo0clluNDdaeTJydmlnV1FmNncud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzA0NjAtMDUyRiwgVSsyMEI0LCBVKzJERTAtMkRGRiwgVStBNjQwLUE2OUY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNDAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1JdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by9jREtoUmFYblFUT1ZiYW94d2RPcjl4a0F6NHJZbjQ3WnkycnZpZ1dRZjZ3LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMzcwLTAzRkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNDAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1JdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by8xaFpmMDJQT0FOaDMyazJWa2dFb1VCa0F6NHJZbjQ3WnkycnZpZ1dRZjZ3LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSsxRjAwLTFGRkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNDAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1JdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by92UGN5blNMMHFIcV82ZFg3bEtWQnlYWWhqYlNwdmM0N2VlNnhSXzgwSG53LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMDAwLTAwRkYsIFUrMDEzMSwgVSswMTUyLTAxNTMsIFUrMDJDNiwgVSswMkRBLCBVKzAyREMsIFUrMjAwMC0yMDZGLCBVKzIwNzQsIFUrMjBBQywgVSsyMjEyLCBVKzIyMTU7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNDAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1JdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by92U3p1bGZLU0swTExqamZlYXhjUkVoa0F6NHJZbjQ3WnkycnZpZ1dRZjZ3LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMTAwLTAyNEYsIFUrMUUwMC0xRUZGLCBVKzIwQTAtMjBBQiwgVSsyMEFELTIwQ0YsIFUrMkM2MC0yQzdGLCBVK0E3MjAtQTdGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvL0syM2N4V1ZUcklGRDZESnNFVmkwN1JrQXo0clluNDdaeTJydmlnV1FmNncud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDItMDEwMywgVSsxRUEwLTFFRjksIFUrMjBBQjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiAzMDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIExpZ2h0JyksIGxvY2FsKCdSb2JvdG8tTGlnaHQnKSwgdXJsKC9mb250LXJvYm90by9GbDR5MFFkT3h5eVRIRUdNWFg4a2NZWDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDAwLTA0NUYsIFUrMDQ5MC0wNDkxLCBVKzA0QjAtMDRCMSwgVSsyMTE2Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDMwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTGlnaHQnKSwgbG9jYWwoJ1JvYm90by1MaWdodCcpLCB1cmwoL2ZvbnQtcm9ib3RvLzBlQzZmbDA2bHVYRVlXcEJTSnZYQ0lYMGhWZ3paUVVmUkR1WnJQdkgzRDgud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzA0NjAtMDUyRiwgVSsyMEI0LCBVKzJERTAtMkRGRiwgVStBNjQwLUE2OUY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogMzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBMaWdodCcpLCBsb2NhbCgnUm9ib3RvLUxpZ2h0JyksIHVybCgvZm9udC1yb2JvdG8vSTNTMXdzZ1NnOVlDdXJWNlBVa1RPWVgwaFZnelpRVWZSRHVaclB2SDNEOC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDM3MC0wM0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDMwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTGlnaHQnKSwgbG9jYWwoJ1JvYm90by1MaWdodCcpLCB1cmwoL2ZvbnQtcm9ib3RvLy1MMTRKazA2bTZwVUhCLTVtWFFRbllYMGhWZ3paUVVmUkR1WnJQdkgzRDgud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzFGMDAtMUZGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiAzMDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIExpZ2h0JyksIGxvY2FsKCdSb2JvdG8tTGlnaHQnKSwgdXJsKC9mb250LXJvYm90by9IZ28xM2stdGZTcG4wcWkxU0ZkVWZaQncxeFUxcktwdEpqXzBqYW5zOTIwLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMDAwLTAwRkYsIFUrMDEzMSwgVSswMTUyLTAxNTMsIFUrMDJDNiwgVSswMkRBLCBVKzAyREMsIFUrMjAwMC0yMDZGLCBVKzIwNzQsIFUrMjBBQywgVSsyMjEyLCBVKzIyMTU7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogMzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBMaWdodCcpLCBsb2NhbCgnUm9ib3RvLUxpZ2h0JyksIHVybCgvZm9udC1yb2JvdG8vUHJ1MzNxalNocFpTbUczejZWWXduWVgwaFZnelpRVWZSRHVaclB2SDNEOC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMC0wMjRGLCBVKzFFMDAtMUVGRiwgVSsyMEEwLTIwQUIsIFUrMjBBRC0yMENGLCBVKzJDNjAtMkM3RiwgVStBNzIwLUE3RkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogMzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBMaWdodCcpLCBsb2NhbCgnUm9ib3RvLUxpZ2h0JyksIHVybCgvZm9udC1yb2JvdG8vTllEV0JkRDRnSXEyNkc1WFliSHNGSVgwaFZnelpRVWZSRHVaclB2SDNEOC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMi0wMTAzLCBVKzFFQTAtMUVGOSwgVSsyMEFCOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDMwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTGlnaHQgSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tTGlnaHRJdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by83bThsN1RsRk8tUzNWa2hIdVIwYXQxNHNZWWRKZzVkVTJxekpFVlN1dGEwLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDAwLTA0NUYsIFUrMDQ5MC0wNDkxLCBVKzA0QjAtMDRCMSwgVSsyMTE2Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDMwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTGlnaHQgSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tTGlnaHRJdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by83bThsN1RsRk8tUzNWa2hIdVIwYXRfWnJhUjJUZzh3Mmx6bTdrTE5MMC13LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDYwLTA1MkYsIFUrMjBCNCwgVSsyREUwLTJERkYsIFUrQTY0MC1BNjlGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDMwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTGlnaHQgSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tTGlnaHRJdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by83bThsN1RsRk8tUzNWa2hIdVIwYXR3dF9SbTY5MUxUZWJLZlkyWmtLU21JLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMzcwLTAzRkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogMzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBMaWdodCBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1MaWdodEl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvLzdtOGw3VGxGTy1TM1ZraEh1UjBhdDFCVzI2UXhwU2otX1pLbV94VDRoV3cud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzFGMDAtMUZGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiAzMDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIExpZ2h0IEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUxpZ2h0SXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vN204bDdUbEZPLVMzVmtoSHVSMGF0NGdwOVE4Z2JZcmhxR2xSYXZfSVhmay53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDAwMC0wMEZGLCBVKzAxMzEsIFUrMDE1Mi0wMTUzLCBVKzAyQzYsIFUrMDJEQSwgVSswMkRDLCBVKzIwMDAtMjA2RiwgVSsyMDc0LCBVKzIwQUMsIFUrMjIxMiwgVSsyMjE1Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDMwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTGlnaHQgSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tTGlnaHRJdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by83bThsN1RsRk8tUzNWa2hIdVIwYXQ2RThrTTR4V1IxXzFiWVVSUm9qUkdjLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMTAwLTAyNEYsIFUrMUUwMC0xRUZGLCBVKzIwQTAtMjBBQiwgVSsyMEFELTIwQ0YsIFUrMkM2MC0yQzdGLCBVK0E3MjAtQTdGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiAzMDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIExpZ2h0IEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUxpZ2h0SXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vN204bDdUbEZPLVMzVmtoSHVSMGF0OURpTnNSNWEtOU9lX0l2cHU4WFdsWS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMi0wMTAzLCBVKzFFQTAtMUVGOSwgVSsyMEFCOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDUwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTWVkaXVtJyksIGxvY2FsKCdSb2JvdG8tTWVkaXVtJyksIHVybCgvZm9udC1yb2JvdG8vb0hpMzBrd1FXdnBDV3FBaHpIY0NTSVgwaFZnelpRVWZSRHVaclB2SDNEOC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQwMC0wNDVGLCBVKzA0OTAtMDQ5MSwgVSswNEIwLTA0QjEsIFUrMjExNjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA1MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1lZGl1bScpLCBsb2NhbCgnUm9ib3RvLU1lZGl1bScpLCB1cmwoL2ZvbnQtcm9ib3RvL1pMcUtlZWxZYkFURzYwRXBaQlNEeTRYMGhWZ3paUVVmUkR1WnJQdkgzRDgud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzA0NjAtMDUyRiwgVSsyMEI0LCBVKzJERTAtMkRGRiwgVStBNjQwLUE2OUY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNTAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNZWRpdW0nKSwgbG9jYWwoJ1JvYm90by1NZWRpdW0nKSwgdXJsKC9mb250LXJvYm90by9teDlVY2s2dUI2M1ZJS0ZZbkVNWHJZWDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMzcwLTAzRkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNTAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNZWRpdW0nKSwgbG9jYWwoJ1JvYm90by1NZWRpdW0nKSwgdXJsKC9mb250LXJvYm90by9yR3ZIZEpucjJsNzVxYjBZTkQ5TnlJWDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSsxRjAwLTFGRkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNTAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNZWRpdW0nKSwgbG9jYWwoJ1JvYm90by1NZWRpdW0nKSwgdXJsKC9mb250LXJvYm90by9SeFpKZG56ZW8zUjV6U2V4Z2U4VVVaQncxeFUxcktwdEpqXzBqYW5zOTIwLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMDAwLTAwRkYsIFUrMDEzMSwgVSswMTUyLTAxNTMsIFUrMDJDNiwgVSswMkRBLCBVKzAyREMsIFUrMjAwMC0yMDZGLCBVKzIwNzQsIFUrMjBBQywgVSsyMjEyLCBVKzIyMTU7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNTAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNZWRpdW0nKSwgbG9jYWwoJ1JvYm90by1NZWRpdW0nKSwgdXJsKC9mb250LXJvYm90by9vT2VGd1pObHJUZWZ6TFltbFZWMVVJWDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMTAwLTAyNEYsIFUrMUUwMC0xRUZGLCBVKzIwQTAtMjBBQiwgVSsyMEFELTIwQ0YsIFUrMkM2MC0yQzdGLCBVK0E3MjAtQTdGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA1MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1lZGl1bScpLCBsb2NhbCgnUm9ib3RvLU1lZGl1bScpLCB1cmwoL2ZvbnQtcm9ib3RvL21ibWhwck1INjlaaTZlRVBCWVZGaFlYMGhWZ3paUVVmUkR1WnJQdkgzRDgud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDItMDEwMywgVSsxRUEwLTFFRjksIFUrMjBBQjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiA1MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1lZGl1bSBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1NZWRpdW1JdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by9PTGZmR0JUYUYwWEZPVzFnbnVIRjBWNHNZWWRKZzVkVTJxekpFVlN1dGEwLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDAwLTA0NUYsIFUrMDQ5MC0wNDkxLCBVKzA0QjAtMDRCMSwgVSsyMTE2Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDUwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTWVkaXVtIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLU1lZGl1bUl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvL09MZmZHQlRhRjBYRk9XMWdudUhGMGZacmFSMlRnOHcybHptN2tMTkwwLXcud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzA0NjAtMDUyRiwgVSsyMEI0LCBVKzJERTAtMkRGRiwgVStBNjQwLUE2OUY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNTAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNZWRpdW0gSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tTWVkaXVtSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vT0xmZkdCVGFGMFhGT1cxZ251SEYwUXRfUm02OTFMVGViS2ZZMlprS1NtSS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDM3MC0wM0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDUwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTWVkaXVtIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLU1lZGl1bUl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvL09MZmZHQlRhRjBYRk9XMWdudUhGMFZCVzI2UXhwU2otX1pLbV94VDRoV3cud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzFGMDAtMUZGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiA1MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1lZGl1bSBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1NZWRpdW1JdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by9PTGZmR0JUYUYwWEZPVzFnbnVIRjBZZ3A5UThnYllyaHFHbFJhdl9JWGZrLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMDAwLTAwRkYsIFUrMDEzMSwgVSswMTUyLTAxNTMsIFUrMDJDNiwgVSswMkRBLCBVKzAyREMsIFUrMjAwMC0yMDZGLCBVKzIwNzQsIFUrMjBBQywgVSsyMjEyLCBVKzIyMTU7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNTAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNZWRpdW0gSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tTWVkaXVtSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vT0xmZkdCVGFGMFhGT1cxZ251SEYwYUU4a000eFdSMV8xYllVUlJvalJHYy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMC0wMjRGLCBVKzFFMDAtMUVGRiwgVSsyMEEwLTIwQUIsIFUrMjBBRC0yMENGLCBVKzJDNjAtMkM3RiwgVStBNzIwLUE3RkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNTAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNZWRpdW0gSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tTWVkaXVtSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vT0xmZkdCVGFGMFhGT1cxZ251SEYwZERpTnNSNWEtOU9lX0l2cHU4WFdsWS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMi0wMTAzLCBVKzFFQTAtMUVGOSwgVSsyMEFCOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvIE1vbm8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNDAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNb25vJyksIGxvY2FsKCdSb2JvdG9Nb25vLVJlZ3VsYXInKSwgdXJsKC9mb250LXJvYm90by9oTXFQTkxzdV9keXdNYTRDX0RFcFkxNHNZWWRKZzVkVTJxekpFVlN1dGEwLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDAwLTA0NUYsIFUrMDQ5MC0wNDkxLCBVKzA0QjAtMDRCMSwgVSsyMTE2Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvIE1vbm8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNDAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNb25vJyksIGxvY2FsKCdSb2JvdG9Nb25vLVJlZ3VsYXInKSwgdXJsKC9mb250LXJvYm90by9oTXFQTkxzdV9keXdNYTRDX0RFcFlfWnJhUjJUZzh3Mmx6bTdrTE5MMC13LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDYwLTA1MkYsIFUrMjBCNCwgVSsyREUwLTJERkYsIFUrQTY0MC1BNjlGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvIE1vbm8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNDAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNb25vJyksIGxvY2FsKCdSb2JvdG9Nb25vLVJlZ3VsYXInKSwgdXJsKC9mb250LXJvYm90by9oTXFQTkxzdV9keXdNYTRDX0RFcFl3dF9SbTY5MUxUZWJLZlkyWmtLU21JLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMzcwLTAzRkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubyc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1vbm8nKSwgbG9jYWwoJ1JvYm90b01vbm8tUmVndWxhcicpLCB1cmwoL2ZvbnQtcm9ib3RvL2hNcVBOTHN1X2R5d01hNENfREVwWTFCVzI2UXhwU2otX1pLbV94VDRoV3cud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzFGMDAtMUZGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byBNb25vJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTW9ubycpLCBsb2NhbCgnUm9ib3RvTW9uby1SZWd1bGFyJyksIHVybCgvZm9udC1yb2JvdG8vaE1xUE5Mc3VfZHl3TWE0Q19ERXBZNGdwOVE4Z2JZcmhxR2xSYXZfSVhmay53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDAwMC0wMEZGLCBVKzAxMzEsIFUrMDE1Mi0wMTUzLCBVKzAyQzYsIFUrMDJEQSwgVSswMkRDLCBVKzIwMDAtMjA2RiwgVSsyMDc0LCBVKzIwQUMsIFUrMjIxMiwgVSsyMjE1Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvIE1vbm8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNDAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNb25vJyksIGxvY2FsKCdSb2JvdG9Nb25vLVJlZ3VsYXInKSwgdXJsKC9mb250LXJvYm90by9oTXFQTkxzdV9keXdNYTRDX0RFcFk2RThrTTR4V1IxXzFiWVVSUm9qUkdjLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMTAwLTAyNEYsIFUrMUUwMC0xRUZGLCBVKzIwQTAtMjBBQiwgVSsyMEFELTIwQ0YsIFUrMkM2MC0yQzdGLCBVK0E3MjAtQTdGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byBNb25vJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTW9ubycpLCBsb2NhbCgnUm9ib3RvTW9uby1SZWd1bGFyJyksIHVybCgvZm9udC1yb2JvdG8vaE1xUE5Mc3VfZHl3TWE0Q19ERXBZOURpTnNSNWEtOU9lX0l2cHU4WFdsWS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMi0wMTAzLCBVKzFFQTAtMUVGOSwgVSsyMEFCOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvIE1vbm8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNb25vIEJvbGQnKSwgbG9jYWwoJ1JvYm90b01vbm8tQm9sZCcpLCB1cmwoL2ZvbnQtcm9ib3RvL040ZHVWYzlDNTh1d1BpWThfNTlGejF4LU0xSTF3NU9NaXFuVkY4eEJMaFUud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzA0MDAtMDQ1RiwgVSswNDkwLTA0OTEsIFUrMDRCMC0wNEIxLCBVKzIxMTY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubyc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1vbm8gQm9sZCcpLCBsb2NhbCgnUm9ib3RvTW9uby1Cb2xkJyksIHVybCgvZm9udC1yb2JvdG8vTjRkdVZjOUM1OHV3UGlZOF81OUZ6d1hhQVh1cDVtWmxmSzZ4UkxyaHNjby53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQ2MC0wNTJGLCBVKzIwQjQsIFUrMkRFMC0yREZGLCBVK0E2NDAtQTY5RjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byBNb25vJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTW9ubyBCb2xkJyksIGxvY2FsKCdSb2JvdG9Nb25vLUJvbGQnKSwgdXJsKC9mb250LXJvYm90by9ONGR1VmM5QzU4dXdQaVk4XzU5Rnp3bjZXcXhvLXh3eGlsRFhQVThjaFZVLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMzcwLTAzRkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubyc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1vbm8gQm9sZCcpLCBsb2NhbCgnUm9ib3RvTW9uby1Cb2xkJyksIHVybCgvZm9udC1yb2JvdG8vTjRkdVZjOUM1OHV3UGlZOF81OUZ6MVQ3YUpMSzZuS3BuMzZJTXdUY01NYy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMUYwMC0xRkZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvIE1vbm8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNb25vIEJvbGQnKSwgbG9jYWwoJ1JvYm90b01vbm8tQm9sZCcpLCB1cmwoL2ZvbnQtcm9ib3RvL040ZHVWYzlDNTh1d1BpWThfNTlGel83OV9adVV4Q2lnTTJEZXNwVG5GYXcud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAwMDAtMDBGRiwgVSswMTMxLCBVKzAxNTItMDE1MywgVSswMkM2LCBVKzAyREEsIFUrMDJEQywgVSsyMDAwLTIwNkYsIFUrMjA3NCwgVSsyMEFDLCBVKzIyMTIsIFUrMjIxNTsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byBNb25vJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTW9ubyBCb2xkJyksIGxvY2FsKCdSb2JvdG9Nb25vLUJvbGQnKSwgdXJsKC9mb250LXJvYm90by9ONGR1VmM5QzU4dXdQaVk4XzU5Rno0Z2Q5T0VQVUNOM0FkWVcwZTh0YXQ0LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMTAwLTAyNEYsIFUrMUUwMC0xRUZGLCBVKzIwQTAtMjBBQiwgVSsyMEFELTIwQ0YsIFUrMkM2MC0yQzdGLCBVK0E3MjAtQTdGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byBNb25vJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTW9ubyBCb2xkJyksIGxvY2FsKCdSb2JvdG9Nb25vLUJvbGQnKSwgdXJsKC9mb250LXJvYm90by9ONGR1VmM5QzU4dXdQaVk4XzU5Rno4YklRU1labldMYVdDOVFOQ3BUS19VLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMTAyLTAxMDMsIFUrMUVBMC0xRUY5LCBVKzIwQUI7Cn0KPC9zdHlsZT4KCgo8c3R5bGU+CiAgaHRtbCwKICBib2R5IHsKICAgIG1hcmdpbjogMDsKICAgIHBhZGRpbmc6IDA7CiAgICBoZWlnaHQ6IDEwMCU7CiAgICBmb250LWZhbWlseTogUm9ib3RvLCBzYW5zLXNlcmlmOwogIH0KPC9zdHlsZT4KCgoKCgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vaXJvbi1mbGV4LWxheW91dC9pcm9uLWZsZXgtbGF5b3V0Lmh0bWwuanMKKGZ1bmN0aW9uKCl7dmFyIGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTthLnRleHRDb250ZW50PSJbaGlkZGVuXSB7IGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsgfSI7ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChhKX0pKCk7Cjwvc2NyaXB0Pgo8Y3VzdG9tLXN0eWxlPgogIDxzdHlsZSBpcz0iY3VzdG9tLXN0eWxlIj4KICAgIFtoaWRkZW5dIHsKICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgfQogIDwvc3R5bGU+CjwvY3VzdG9tLXN0eWxlPgoKPGN1c3RvbS1zdHlsZT4KICA8c3R5bGUgaXM9ImN1c3RvbS1zdHlsZSI+CiAgICBodG1sIHsKCiAgICAgIC0tbGF5b3V0OiB7CiAgICAgICAgZGlzcGxheTogLW1zLWZsZXhib3g7CiAgICAgICAgZGlzcGxheTogLXdlYmtpdC1mbGV4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIH07CgogICAgICAtLWxheW91dC1pbmxpbmU6IHsKICAgICAgICBkaXNwbGF5OiAtbXMtaW5saW5lLWZsZXhib3g7CiAgICAgICAgZGlzcGxheTogLXdlYmtpdC1pbmxpbmUtZmxleDsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWhvcml6b250YWw6IHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQ7CgogICAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogcm93OwogICAgICAgIC13ZWJraXQtZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtaG9yaXpvbnRhbC1yZXZlcnNlOiB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0OwoKICAgICAgICAtbXMtZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlOwogICAgICAgIC13ZWJraXQtZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlOwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZTsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LXZlcnRpY2FsOiB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0OwoKICAgICAgICAtbXMtZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICAtd2Via2l0LWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LXZlcnRpY2FsLXJldmVyc2U6IHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQ7CgogICAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogY29sdW1uLXJldmVyc2U7CiAgICAgICAgLXdlYmtpdC1mbGV4LWRpcmVjdGlvbjogY29sdW1uLXJldmVyc2U7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbi1yZXZlcnNlOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtd3JhcDogewogICAgICAgIC1tcy1mbGV4LXdyYXA6IHdyYXA7CiAgICAgICAgLXdlYmtpdC1mbGV4LXdyYXA6IHdyYXA7CiAgICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtd3JhcC1yZXZlcnNlOiB7CiAgICAgICAgLW1zLWZsZXgtd3JhcDogd3JhcC1yZXZlcnNlOwogICAgICAgIC13ZWJraXQtZmxleC13cmFwOiB3cmFwLXJldmVyc2U7CiAgICAgICAgZmxleC13cmFwOiB3cmFwLXJldmVyc2U7CiAgICAgIH07CgogICAgICAtLWxheW91dC1mbGV4LWF1dG86IHsKICAgICAgICAtbXMtZmxleDogMSAxIGF1dG87CiAgICAgICAgLXdlYmtpdC1mbGV4OiAxIDEgYXV0bzsKICAgICAgICBmbGV4OiAxIDEgYXV0bzsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWZsZXgtbm9uZTogewogICAgICAgIC1tcy1mbGV4OiBub25lOwogICAgICAgIC13ZWJraXQtZmxleDogbm9uZTsKICAgICAgICBmbGV4OiBub25lOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtZmxleDogewogICAgICAgIC1tcy1mbGV4OiAxIDEgMC4wMDAwMDAwMDFweDsKICAgICAgICAtd2Via2l0LWZsZXg6IDE7CiAgICAgICAgZmxleDogMTsKICAgICAgICAtd2Via2l0LWZsZXgtYmFzaXM6IDAuMDAwMDAwMDAxcHg7CiAgICAgICAgZmxleC1iYXNpczogMC4wMDAwMDAwMDFweDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWZsZXgtMjogewogICAgICAgIC1tcy1mbGV4OiAyOwogICAgICAgIC13ZWJraXQtZmxleDogMjsKICAgICAgICBmbGV4OiAyOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtZmxleC0zOiB7CiAgICAgICAgLW1zLWZsZXg6IDM7CiAgICAgICAgLXdlYmtpdC1mbGV4OiAzOwogICAgICAgIGZsZXg6IDM7CiAgICAgIH07CgogICAgICAtLWxheW91dC1mbGV4LTQ6IHsKICAgICAgICAtbXMtZmxleDogNDsKICAgICAgICAtd2Via2l0LWZsZXg6IDQ7CiAgICAgICAgZmxleDogNDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWZsZXgtNTogewogICAgICAgIC1tcy1mbGV4OiA1OwogICAgICAgIC13ZWJraXQtZmxleDogNTsKICAgICAgICBmbGV4OiA1OwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtZmxleC02OiB7CiAgICAgICAgLW1zLWZsZXg6IDY7CiAgICAgICAgLXdlYmtpdC1mbGV4OiA2OwogICAgICAgIGZsZXg6IDY7CiAgICAgIH07CgogICAgICAtLWxheW91dC1mbGV4LTc6IHsKICAgICAgICAtbXMtZmxleDogNzsKICAgICAgICAtd2Via2l0LWZsZXg6IDc7CiAgICAgICAgZmxleDogNzsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWZsZXgtODogewogICAgICAgIC1tcy1mbGV4OiA4OwogICAgICAgIC13ZWJraXQtZmxleDogODsKICAgICAgICBmbGV4OiA4OwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtZmxleC05OiB7CiAgICAgICAgLW1zLWZsZXg6IDk7CiAgICAgICAgLXdlYmtpdC1mbGV4OiA5OwogICAgICAgIGZsZXg6IDk7CiAgICAgIH07CgogICAgICAtLWxheW91dC1mbGV4LTEwOiB7CiAgICAgICAgLW1zLWZsZXg6IDEwOwogICAgICAgIC13ZWJraXQtZmxleDogMTA7CiAgICAgICAgZmxleDogMTA7CiAgICAgIH07CgogICAgICAtLWxheW91dC1mbGV4LTExOiB7CiAgICAgICAgLW1zLWZsZXg6IDExOwogICAgICAgIC13ZWJraXQtZmxleDogMTE7CiAgICAgICAgZmxleDogMTE7CiAgICAgIH07CgogICAgICAtLWxheW91dC1mbGV4LTEyOiB7CiAgICAgICAgLW1zLWZsZXg6IDEyOwogICAgICAgIC13ZWJraXQtZmxleDogMTI7CiAgICAgICAgZmxleDogMTI7CiAgICAgIH07CgogICAgICAvKiBhbGlnbm1lbnQgaW4gY3Jvc3MgYXhpcyAqLwoKICAgICAgLS1sYXlvdXQtc3RhcnQ6IHsKICAgICAgICAtbXMtZmxleC1hbGlnbjogc3RhcnQ7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1pdGVtczogZmxleC1zdGFydDsKICAgICAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWNlbnRlcjogewogICAgICAgIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgIH07CgogICAgICAtLWxheW91dC1lbmQ6IHsKICAgICAgICAtbXMtZmxleC1hbGlnbjogZW5kOwogICAgICAgIC13ZWJraXQtYWxpZ24taXRlbXM6IGZsZXgtZW5kOwogICAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWJhc2VsaW5lOiB7CiAgICAgICAgLW1zLWZsZXgtYWxpZ246IGJhc2VsaW5lOwogICAgICAgIC13ZWJraXQtYWxpZ24taXRlbXM6IGJhc2VsaW5lOwogICAgICAgIGFsaWduLWl0ZW1zOiBiYXNlbGluZTsKICAgICAgfTsKCiAgICAgIC8qIGFsaWdubWVudCBpbiBtYWluIGF4aXMgKi8KCiAgICAgIC0tbGF5b3V0LXN0YXJ0LWp1c3RpZmllZDogewogICAgICAgIC1tcy1mbGV4LXBhY2s6IHN0YXJ0OwogICAgICAgIC13ZWJraXQtanVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0OwogICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWNlbnRlci1qdXN0aWZpZWQ6IHsKICAgICAgICAtbXMtZmxleC1wYWNrOiBjZW50ZXI7CiAgICAgICAgLXdlYmtpdC1qdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWVuZC1qdXN0aWZpZWQ6IHsKICAgICAgICAtbXMtZmxleC1wYWNrOiBlbmQ7CiAgICAgICAgLXdlYmtpdC1qdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kOwogICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7CiAgICAgIH07CgogICAgICAtLWxheW91dC1hcm91bmQtanVzdGlmaWVkOiB7CiAgICAgICAgLW1zLWZsZXgtcGFjazogZGlzdHJpYnV0ZTsKICAgICAgICAtd2Via2l0LWp1c3RpZnktY29udGVudDogc3BhY2UtYXJvdW5kOwogICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYXJvdW5kOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtanVzdGlmaWVkOiB7CiAgICAgICAgLW1zLWZsZXgtcGFjazoganVzdGlmeTsKICAgICAgICAtd2Via2l0LWp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgIH07CgogICAgICAtLWxheW91dC1jZW50ZXItY2VudGVyOiB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWNlbnRlcjsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtY2VudGVyLWp1c3RpZmllZDsKICAgICAgfTsKCiAgICAgIC8qIHNlbGYgYWxpZ25tZW50ICovCgogICAgICAtLWxheW91dC1zZWxmLXN0YXJ0OiB7CiAgICAgICAgLW1zLWFsaWduLXNlbGY6IGZsZXgtc3RhcnQ7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1zZWxmOiBmbGV4LXN0YXJ0OwogICAgICAgIGFsaWduLXNlbGY6IGZsZXgtc3RhcnQ7CiAgICAgIH07CgogICAgICAtLWxheW91dC1zZWxmLWNlbnRlcjogewogICAgICAgIC1tcy1hbGlnbi1zZWxmOiBjZW50ZXI7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1zZWxmOiBjZW50ZXI7CiAgICAgICAgYWxpZ24tc2VsZjogY2VudGVyOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtc2VsZi1lbmQ6IHsKICAgICAgICAtbXMtYWxpZ24tc2VsZjogZmxleC1lbmQ7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1zZWxmOiBmbGV4LWVuZDsKICAgICAgICBhbGlnbi1zZWxmOiBmbGV4LWVuZDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LXNlbGYtc3RyZXRjaDogewogICAgICAgIC1tcy1hbGlnbi1zZWxmOiBzdHJldGNoOwogICAgICAgIC13ZWJraXQtYWxpZ24tc2VsZjogc3RyZXRjaDsKICAgICAgICBhbGlnbi1zZWxmOiBzdHJldGNoOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtc2VsZi1iYXNlbGluZTogewogICAgICAgIC1tcy1hbGlnbi1zZWxmOiBiYXNlbGluZTsKICAgICAgICAtd2Via2l0LWFsaWduLXNlbGY6IGJhc2VsaW5lOwogICAgICAgIGFsaWduLXNlbGY6IGJhc2VsaW5lOwogICAgICB9OwoKICAgICAgLyogbXVsdGktbGluZSBhbGlnbm1lbnQgaW4gbWFpbiBheGlzICovCgogICAgICAtLWxheW91dC1zdGFydC1hbGlnbmVkOiB7CiAgICAgICAgLW1zLWZsZXgtbGluZS1wYWNrOiBzdGFydDsgIC8qIElFMTAgKi8KICAgICAgICAtbXMtYWxpZ24tY29udGVudDogZmxleC1zdGFydDsKICAgICAgICAtd2Via2l0LWFsaWduLWNvbnRlbnQ6IGZsZXgtc3RhcnQ7CiAgICAgICAgYWxpZ24tY29udGVudDogZmxleC1zdGFydDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWVuZC1hbGlnbmVkOiB7CiAgICAgICAgLW1zLWZsZXgtbGluZS1wYWNrOiBlbmQ7ICAvKiBJRTEwICovCiAgICAgICAgLW1zLWFsaWduLWNvbnRlbnQ6IGZsZXgtZW5kOwogICAgICAgIC13ZWJraXQtYWxpZ24tY29udGVudDogZmxleC1lbmQ7CiAgICAgICAgYWxpZ24tY29udGVudDogZmxleC1lbmQ7CiAgICAgIH07CgogICAgICAtLWxheW91dC1jZW50ZXItYWxpZ25lZDogewogICAgICAgIC1tcy1mbGV4LWxpbmUtcGFjazogY2VudGVyOyAgLyogSUUxMCAqLwogICAgICAgIC1tcy1hbGlnbi1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgYWxpZ24tY29udGVudDogY2VudGVyOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtYmV0d2Vlbi1hbGlnbmVkOiB7CiAgICAgICAgLW1zLWZsZXgtbGluZS1wYWNrOiBqdXN0aWZ5OyAgLyogSUUxMCAqLwogICAgICAgIC1tcy1hbGlnbi1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICAgIC13ZWJraXQtYWxpZ24tY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICBhbGlnbi1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtYXJvdW5kLWFsaWduZWQ6IHsKICAgICAgICAtbXMtZmxleC1saW5lLXBhY2s6IGRpc3RyaWJ1dGU7ICAvKiBJRTEwICovCiAgICAgICAgLW1zLWFsaWduLWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDsKICAgICAgICAtd2Via2l0LWFsaWduLWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDsKICAgICAgICBhbGlnbi1jb250ZW50OiBzcGFjZS1hcm91bmQ7CiAgICAgIH07CgogICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgICAgICAgICAgICAgT3RoZXIgTGF5b3V0CiAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgogICAgICAtLWxheW91dC1ibG9jazogewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtaW52aXNpYmxlOiB7CiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuICFpbXBvcnRhbnQ7CiAgICAgIH07CgogICAgICAtLWxheW91dC1yZWxhdGl2ZTogewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWZpdDogewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgIH07CgogICAgICAtLWxheW91dC1zY3JvbGw6IHsKICAgICAgICAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7CiAgICAgICAgb3ZlcmZsb3c6IGF1dG87CiAgICAgIH07CgogICAgICAtLWxheW91dC1mdWxsYmxlZWQ6IHsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgaGVpZ2h0OiAxMDB2aDsKICAgICAgfTsKCiAgICAgIC8qIGZpeGVkIHBvc2l0aW9uICovCgogICAgICAtLWxheW91dC1maXhlZC10b3A6IHsKICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgIH07CgogICAgICAtLWxheW91dC1maXhlZC1yaWdodDogewogICAgICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgICAgICB0b3A6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtZml4ZWQtYm90dG9tOiB7CiAgICAgICAgcG9zaXRpb246IGZpeGVkOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtZml4ZWQtbGVmdDogewogICAgICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgICAgICB0b3A6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgIH07CgogICAgfQogIDwvc3R5bGU+CjwvY3VzdG9tLXN0eWxlPgoKCgoKCjxzY3JpcHQ+Ly9+fldFQlBBVEh+fi9pcm9uLWExMXkta2V5cy1iZWhhdmlvci9pcm9uLWExMXkta2V5cy1iZWhhdmlvci5odG1sLmpzCihmdW5jdGlvbigpe2Z1bmN0aW9uIGEoeCxDKXt2YXIgRj0iIjtpZih4KWlmKHg9eC50b0xvd2VyQ2FzZSgpLCIgIj09PXh8fEEudGVzdCh4KSlGPSJzcGFjZSI7ZWxzZSBpZih5LnRlc3QoeCkpRj0iZXNjIjtlbHNlIGlmKDE9PXgubGVuZ3RoKXtpZighQ3x8ci50ZXN0KHgpKUY9eH1lbHNlIEY9di50ZXN0KHgpP3gucmVwbGFjZSgiYXJyb3ciLCIiKToibXVsdGlwbHkiPT14PyIqIjp4O3JldHVybiBGfWZ1bmN0aW9uIGMoeCl7dmFyIEM9IiI7eCYmKHggaW4gbT9DPW1beF06dC50ZXN0KHgpPyh4PXBhcnNlSW50KHgucmVwbGFjZSgiVSsiLCIweCIpLDE2KSxDPVN0cmluZy5mcm9tQ2hhckNvZGUoeCkudG9Mb3dlckNhc2UoKSk6Qz14LnRvTG93ZXJDYXNlKCkpO3JldHVybiBDfWZ1bmN0aW9uIGQoeCl7dmFyIEM9IiI7TnVtYmVyKHgpJiYoQz02NTw9eCYmOTA+PXg/U3RyaW5nLmZyb21DaGFyQ29kZSgzMit4KToxMTI8PXgmJjEyMz49eD8iZiIrKHgtMTEyKzEpOjQ4PD14JiY1Nz49eD8KU3RyaW5nKHgtNDgpOjk2PD14JiYxMDU+PXg/U3RyaW5nKHgtOTYpOnBbeF0pO3JldHVybiBDfWZ1bmN0aW9uIGYoeCxDKXtyZXR1cm4geC5rZXk/YSh4LmtleSxDKTp4LmRldGFpbCYmeC5kZXRhaWwua2V5P2EoeC5kZXRhaWwua2V5LEMpOmMoeC5rZXlJZGVudGlmaWVyKXx8ZCh4LmtleUNvZGUpfHwiIn1mdW5jdGlvbiBnKHgsQyl7cmV0dXJuIGYoQyx4Lmhhc01vZGlmaWVycyk9PT14LmtleSYmKCF4Lmhhc01vZGlmaWVyc3x8ISFDLnNoaWZ0S2V5PT09ISF4LnNoaWZ0S2V5JiYhIUMuY3RybEtleT09PSEheC5jdHJsS2V5JiYhIUMuYWx0S2V5PT09ISF4LmFsdEtleSYmISFDLm1ldGFLZXk9PT0hIXgubWV0YUtleSl9ZnVuY3Rpb24gbCh4KXtyZXR1cm4gMT09PXgubGVuZ3RoP3tjb21ibzp4LGtleTp4LGV2ZW50OiJrZXlkb3duIn06eC5zcGxpdCgiKyIpLnJlZHVjZShmdW5jdGlvbihDLEYpe3ZhciBEPUYuc3BsaXQoIjoiKTtGPURbMF07RD1EWzFdO0YgaW4gcT8oQ1txW0ZdXT0hMCwKQy5oYXNNb2RpZmllcnM9ITApOihDLmtleT1GLEMuZXZlbnQ9RHx8ImtleWRvd24iKTtyZXR1cm4gQ30se2NvbWJvOnguc3BsaXQoIjoiKS5zaGlmdCgpfSl9ZnVuY3Rpb24gayh4KXtyZXR1cm4geC50cmltKCkuc3BsaXQoIiAiKS5tYXAoZnVuY3Rpb24oQyl7cmV0dXJuIGwoQyl9KX12YXIgbT17IlUrMDAwOCI6ImJhY2tzcGFjZSIsIlUrMDAwOSI6InRhYiIsIlUrMDAxQiI6ImVzYyIsIlUrMDAyMCI6InNwYWNlIiwiVSswMDdGIjoiZGVsIn0scD17ODoiYmFja3NwYWNlIiw5OiJ0YWIiLDEzOiJlbnRlciIsMjc6ImVzYyIsMzM6InBhZ2V1cCIsMzQ6InBhZ2Vkb3duIiwzNToiZW5kIiwzNjoiaG9tZSIsMzI6InNwYWNlIiwzNzoibGVmdCIsMzg6InVwIiwzOToicmlnaHQiLDQwOiJkb3duIiw0NjoiZGVsIiwxMDY6IioifSxxPXtzaGlmdDoic2hpZnRLZXkiLGN0cmw6ImN0cmxLZXkiLGFsdDoiYWx0S2V5IixtZXRhOiJtZXRhS2V5In0scj0vW2EtejAtOSpdLyx0PS9VXCsvLHY9L15hcnJvdy8sCkE9L15zcGFjZShiYXIpPy8seT0vXmVzY2FwZSQvO1BvbHltZXIuSXJvbkExMXlLZXlzQmVoYXZpb3I9e3Byb3BlcnRpZXM6e2tleUV2ZW50VGFyZ2V0Ont0eXBlOk9iamVjdCx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzfX0sc3RvcEtleWJvYXJkRXZlbnRQcm9wYWdhdGlvbjp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxfYm91bmRLZXlIYW5kbGVyczp7dHlwZTpBcnJheSx2YWx1ZTpmdW5jdGlvbigpe3JldHVybltdfX0sX2ltcGVyYXRpdmVLZXlCaW5kaW5nczp7dHlwZTpPYmplY3QsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm57fX19fSxvYnNlcnZlcnM6WyJfcmVzZXRLZXlFdmVudExpc3RlbmVycyhrZXlFdmVudFRhcmdldCwgX2JvdW5kS2V5SGFuZGxlcnMpIl0sa2V5QmluZGluZ3M6e30scmVnaXN0ZXJlZDpmdW5jdGlvbigpe3RoaXMuX3ByZXBLZXlCaW5kaW5ncygpfSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX2xpc3RlbktleUV2ZW50TGlzdGVuZXJzKCl9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fdW5saXN0ZW5LZXlFdmVudExpc3RlbmVycygpfSwKYWRkT3duS2V5QmluZGluZzpmdW5jdGlvbih4LEMpe3RoaXMuX2ltcGVyYXRpdmVLZXlCaW5kaW5nc1t4XT1DO3RoaXMuX3ByZXBLZXlCaW5kaW5ncygpO3RoaXMuX3Jlc2V0S2V5RXZlbnRMaXN0ZW5lcnMoKX0scmVtb3ZlT3duS2V5QmluZGluZ3M6ZnVuY3Rpb24oKXt0aGlzLl9pbXBlcmF0aXZlS2V5QmluZGluZ3M9e307dGhpcy5fcHJlcEtleUJpbmRpbmdzKCk7dGhpcy5fcmVzZXRLZXlFdmVudExpc3RlbmVycygpfSxrZXlib2FyZEV2ZW50TWF0Y2hlc0tleXM6ZnVuY3Rpb24oeCxDKXtDPWsoQyk7Zm9yKHZhciBGPTA7RjxDLmxlbmd0aDsrK0YpaWYoZyhDW0ZdLHgpKXJldHVybiEwO3JldHVybiExfSxfY29sbGVjdEtleUJpbmRpbmdzOmZ1bmN0aW9uKCl7dmFyIHg9dGhpcy5iZWhhdmlvcnMubWFwKGZ1bmN0aW9uKEMpe3JldHVybiBDLmtleUJpbmRpbmdzfSk7LTE9PT14LmluZGV4T2YodGhpcy5rZXlCaW5kaW5ncykmJngucHVzaCh0aGlzLmtleUJpbmRpbmdzKTtyZXR1cm4geH0sCl9wcmVwS2V5QmluZGluZ3M6ZnVuY3Rpb24oKXt0aGlzLl9rZXlCaW5kaW5ncz17fTt0aGlzLl9jb2xsZWN0S2V5QmluZGluZ3MoKS5mb3JFYWNoKGZ1bmN0aW9uKEYpe2Zvcih2YXIgRCBpbiBGKXRoaXMuX2FkZEtleUJpbmRpbmcoRCxGW0RdKX0sdGhpcyk7Zm9yKHZhciB4IGluIHRoaXMuX2ltcGVyYXRpdmVLZXlCaW5kaW5ncyl0aGlzLl9hZGRLZXlCaW5kaW5nKHgsdGhpcy5faW1wZXJhdGl2ZUtleUJpbmRpbmdzW3hdKTtmb3IodmFyIEMgaW4gdGhpcy5fa2V5QmluZGluZ3MpdGhpcy5fa2V5QmluZGluZ3NbQ10uc29ydChmdW5jdGlvbihGLEQpe0Y9RlswXS5oYXNNb2RpZmllcnM7cmV0dXJuIEY9PT1EWzBdLmhhc01vZGlmaWVycz8wOkY/LTE6MX0pfSxfYWRkS2V5QmluZGluZzpmdW5jdGlvbih4LEMpe2soeCkuZm9yRWFjaChmdW5jdGlvbihGKXt0aGlzLl9rZXlCaW5kaW5nc1tGLmV2ZW50XT10aGlzLl9rZXlCaW5kaW5nc1tGLmV2ZW50XXx8W107dGhpcy5fa2V5QmluZGluZ3NbRi5ldmVudF0ucHVzaChbRiwKQ10pfSx0aGlzKX0sX3Jlc2V0S2V5RXZlbnRMaXN0ZW5lcnM6ZnVuY3Rpb24oKXt0aGlzLl91bmxpc3RlbktleUV2ZW50TGlzdGVuZXJzKCk7dGhpcy5pc0F0dGFjaGVkJiZ0aGlzLl9saXN0ZW5LZXlFdmVudExpc3RlbmVycygpfSxfbGlzdGVuS2V5RXZlbnRMaXN0ZW5lcnM6ZnVuY3Rpb24oKXt0aGlzLmtleUV2ZW50VGFyZ2V0JiZPYmplY3Qua2V5cyh0aGlzLl9rZXlCaW5kaW5ncykuZm9yRWFjaChmdW5jdGlvbih4KXt2YXIgQz10aGlzLl9vbktleUJpbmRpbmdFdmVudC5iaW5kKHRoaXMsdGhpcy5fa2V5QmluZGluZ3NbeF0pO3RoaXMuX2JvdW5kS2V5SGFuZGxlcnMucHVzaChbdGhpcy5rZXlFdmVudFRhcmdldCx4LENdKTt0aGlzLmtleUV2ZW50VGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoeCxDKX0sdGhpcyl9LF91bmxpc3RlbktleUV2ZW50TGlzdGVuZXJzOmZ1bmN0aW9uKCl7Zm9yKHZhciB4LEMsRjt0aGlzLl9ib3VuZEtleUhhbmRsZXJzLmxlbmd0aDspeD10aGlzLl9ib3VuZEtleUhhbmRsZXJzLnBvcCgpLApDPXhbMF0sRj14WzFdLHg9eFsyXSxDLnJlbW92ZUV2ZW50TGlzdGVuZXIoRix4KX0sX29uS2V5QmluZGluZ0V2ZW50OmZ1bmN0aW9uKHgsQyl7dGhpcy5zdG9wS2V5Ym9hcmRFdmVudFByb3BhZ2F0aW9uJiZDLnN0b3BQcm9wYWdhdGlvbigpO2lmKCFDLmRlZmF1bHRQcmV2ZW50ZWQpZm9yKHZhciBGPTA7Rjx4Lmxlbmd0aDtGKyspe3ZhciBEPXhbRl1bMF0sQj14W0ZdWzFdO2lmKGcoRCxDKSYmKHRoaXMuX3RyaWdnZXJLZXlIYW5kbGVyKEQsQixDKSxDLmRlZmF1bHRQcmV2ZW50ZWQpKWJyZWFrfX0sX3RyaWdnZXJLZXlIYW5kbGVyOmZ1bmN0aW9uKHgsQyxGKXt2YXIgRD1PYmplY3QuY3JlYXRlKHgpO0Qua2V5Ym9hcmRFdmVudD1GO3g9bmV3IEN1c3RvbUV2ZW50KHguZXZlbnQse2RldGFpbDpELGNhbmNlbGFibGU6ITB9KTt0aGlzW0NdLmNhbGwodGhpcyx4KTt4LmRlZmF1bHRQcmV2ZW50ZWQmJkYucHJldmVudERlZmF1bHQoKX19fSkoKTsKPC9zY3JpcHQ+CgoKCjxzY3JpcHQ+Ly9+fldFQlBBVEh+fi9pcm9uLWJlaGF2aW9ycy9pcm9uLWNvbnRyb2wtc3RhdGUuaHRtbC5qcwpQb2x5bWVyLklyb25Db250cm9sU3RhdGU9e3Byb3BlcnRpZXM6e2ZvY3VzZWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxub3RpZnk6ITAscmVhZE9ubHk6ITAscmVmbGVjdFRvQXR0cmlidXRlOiEwfSxkaXNhYmxlZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExLG5vdGlmeTohMCxvYnNlcnZlcjoiX2Rpc2FibGVkQ2hhbmdlZCIscmVmbGVjdFRvQXR0cmlidXRlOiEwfSxfb2xkVGFiSW5kZXg6e3R5cGU6U3RyaW5nfSxfYm91bmRGb2N1c0JsdXJIYW5kbGVyOnt0eXBlOkZ1bmN0aW9uLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2ZvY3VzQmx1ckhhbmRsZXIuYmluZCh0aGlzKX19LF9faGFuZGxlRXZlbnRSZXRhcmdldGluZzp7dHlwZTpCb29sZWFuLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuc2hhZG93Um9vdCYmIVBvbHltZXIuRWxlbWVudH19fSxvYnNlcnZlcnM6WyJfY2hhbmdlZENvbnRyb2xTdGF0ZShmb2N1c2VkLCBkaXNhYmxlZCkiXSxyZWFkeTpmdW5jdGlvbigpe3RoaXMuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLAp0aGlzLl9ib3VuZEZvY3VzQmx1ckhhbmRsZXIsITApO3RoaXMuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsdGhpcy5fYm91bmRGb2N1c0JsdXJIYW5kbGVyLCEwKX0sX2ZvY3VzQmx1ckhhbmRsZXI6ZnVuY3Rpb24oYSl7aWYoUG9seW1lci5FbGVtZW50KXRoaXMuX3NldEZvY3VzZWQoImZvY3VzIj09PWEudHlwZSk7ZWxzZSBpZihhLnRhcmdldD09PXRoaXMpdGhpcy5fc2V0Rm9jdXNlZCgiZm9jdXMiPT09YS50eXBlKTtlbHNlIGlmKHRoaXMuX19oYW5kbGVFdmVudFJldGFyZ2V0aW5nKXt2YXIgYz1Qb2x5bWVyLmRvbShhKS5sb2NhbFRhcmdldDt0aGlzLmlzTGlnaHREZXNjZW5kYW50KGMpfHx0aGlzLmZpcmUoYS50eXBlLHtzb3VyY2VFdmVudDphfSx7bm9kZTp0aGlzLGJ1YmJsZXM6YS5idWJibGVzLGNhbmNlbGFibGU6YS5jYW5jZWxhYmxlfSl9fSxfZGlzYWJsZWRDaGFuZ2VkOmZ1bmN0aW9uKGEpe3RoaXMuc2V0QXR0cmlidXRlKCJhcmlhLWRpc2FibGVkIixhPyJ0cnVlIjoiZmFsc2UiKTsKdGhpcy5zdHlsZS5wb2ludGVyRXZlbnRzPWE/Im5vbmUiOiIiO2E/KHRoaXMuX29sZFRhYkluZGV4PXRoaXMuZ2V0QXR0cmlidXRlKCJ0YWJpbmRleCIpLHRoaXMuX3NldEZvY3VzZWQoITEpLHRoaXMudGFiSW5kZXg9LTEsdGhpcy5ibHVyKCkpOnZvaWQgMCE9PXRoaXMuX29sZFRhYkluZGV4JiYobnVsbD09PXRoaXMuX29sZFRhYkluZGV4P3RoaXMucmVtb3ZlQXR0cmlidXRlKCJ0YWJpbmRleCIpOnRoaXMuc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsdGhpcy5fb2xkVGFiSW5kZXgpKX0sX2NoYW5nZWRDb250cm9sU3RhdGU6ZnVuY3Rpb24oKXt0aGlzLl9jb250cm9sU3RhdGVDaGFuZ2VkJiZ0aGlzLl9jb250cm9sU3RhdGVDaGFuZ2VkKCl9fTsKPC9zY3JpcHQ+CgoKPHNjcmlwdD4vL35+V0VCUEFUSH5+L2lyb24tYmVoYXZpb3JzL2lyb24tYnV0dG9uLXN0YXRlLmh0bWwuanMKUG9seW1lci5Jcm9uQnV0dG9uU3RhdGVJbXBsPXtwcm9wZXJ0aWVzOntwcmVzc2VkOnt0eXBlOkJvb2xlYW4scmVhZE9ubHk6ITAsdmFsdWU6ITEscmVmbGVjdFRvQXR0cmlidXRlOiEwLG9ic2VydmVyOiJfcHJlc3NlZENoYW5nZWQifSx0b2dnbGVzOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEscmVmbGVjdFRvQXR0cmlidXRlOiEwfSxhY3RpdmU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxub3RpZnk6ITAscmVmbGVjdFRvQXR0cmlidXRlOiEwfSxwb2ludGVyRG93bjp7dHlwZTpCb29sZWFuLHJlYWRPbmx5OiEwLHZhbHVlOiExfSxyZWNlaXZlZEZvY3VzRnJvbUtleWJvYXJkOnt0eXBlOkJvb2xlYW4scmVhZE9ubHk6ITB9LGFyaWFBY3RpdmVBdHRyaWJ1dGU6e3R5cGU6U3RyaW5nLHZhbHVlOiJhcmlhLXByZXNzZWQiLG9ic2VydmVyOiJfYXJpYUFjdGl2ZUF0dHJpYnV0ZUNoYW5nZWQifX0sbGlzdGVuZXJzOntkb3duOiJfZG93bkhhbmRsZXIiLHVwOiJfdXBIYW5kbGVyIix0YXA6Il90YXBIYW5kbGVyIn0sCm9ic2VydmVyczpbIl9mb2N1c0NoYW5nZWQoZm9jdXNlZCkiLCJfYWN0aXZlQ2hhbmdlZChhY3RpdmUsIGFyaWFBY3RpdmVBdHRyaWJ1dGUpIl0sa2V5QmluZGluZ3M6eyJlbnRlcjprZXlkb3duIjoiX2FzeW5jQ2xpY2siLCJzcGFjZTprZXlkb3duIjoiX3NwYWNlS2V5RG93bkhhbmRsZXIiLCJzcGFjZTprZXl1cCI6Il9zcGFjZUtleVVwSGFuZGxlciJ9LF9tb3VzZUV2ZW50UmU6L15tb3VzZS8sX3RhcEhhbmRsZXI6ZnVuY3Rpb24oKXt0aGlzLnRvZ2dsZXM/dGhpcy5fdXNlckFjdGl2YXRlKCF0aGlzLmFjdGl2ZSk6dGhpcy5hY3RpdmU9ITF9LF9mb2N1c0NoYW5nZWQ6ZnVuY3Rpb24oYSl7dGhpcy5fZGV0ZWN0S2V5Ym9hcmRGb2N1cyhhKTthfHx0aGlzLl9zZXRQcmVzc2VkKCExKX0sX2RldGVjdEtleWJvYXJkRm9jdXM6ZnVuY3Rpb24oYSl7dGhpcy5fc2V0UmVjZWl2ZWRGb2N1c0Zyb21LZXlib2FyZCghdGhpcy5wb2ludGVyRG93biYmYSl9LF91c2VyQWN0aXZhdGU6ZnVuY3Rpb24oYSl7dGhpcy5hY3RpdmUhPT0KYSYmKHRoaXMuYWN0aXZlPWEsdGhpcy5maXJlKCJjaGFuZ2UiKSl9LF9kb3duSGFuZGxlcjpmdW5jdGlvbigpe3RoaXMuX3NldFBvaW50ZXJEb3duKCEwKTt0aGlzLl9zZXRQcmVzc2VkKCEwKTt0aGlzLl9zZXRSZWNlaXZlZEZvY3VzRnJvbUtleWJvYXJkKCExKX0sX3VwSGFuZGxlcjpmdW5jdGlvbigpe3RoaXMuX3NldFBvaW50ZXJEb3duKCExKTt0aGlzLl9zZXRQcmVzc2VkKCExKX0sX3NwYWNlS2V5RG93bkhhbmRsZXI6ZnVuY3Rpb24oYSl7YT1hLmRldGFpbC5rZXlib2FyZEV2ZW50O3ZhciBjPVBvbHltZXIuZG9tKGEpLmxvY2FsVGFyZ2V0O3RoaXMuaXNMaWdodERlc2NlbmRhbnQoYyl8fChhLnByZXZlbnREZWZhdWx0KCksYS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKSx0aGlzLl9zZXRQcmVzc2VkKCEwKSl9LF9zcGFjZUtleVVwSGFuZGxlcjpmdW5jdGlvbihhKXthPVBvbHltZXIuZG9tKGEuZGV0YWlsLmtleWJvYXJkRXZlbnQpLmxvY2FsVGFyZ2V0O3RoaXMuaXNMaWdodERlc2NlbmRhbnQoYSl8fAoodGhpcy5wcmVzc2VkJiZ0aGlzLl9hc3luY0NsaWNrKCksdGhpcy5fc2V0UHJlc3NlZCghMSkpfSxfYXN5bmNDbGljazpmdW5jdGlvbigpe3RoaXMuYXN5bmMoZnVuY3Rpb24oKXt0aGlzLmNsaWNrKCl9LDEpfSxfcHJlc3NlZENoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLl9jaGFuZ2VkQnV0dG9uU3RhdGUoKX0sX2FyaWFBY3RpdmVBdHRyaWJ1dGVDaGFuZ2VkOmZ1bmN0aW9uKGEsYyl7YyYmYyE9YSYmdGhpcy5oYXNBdHRyaWJ1dGUoYykmJnRoaXMucmVtb3ZlQXR0cmlidXRlKGMpfSxfYWN0aXZlQ2hhbmdlZDpmdW5jdGlvbihhKXt0aGlzLnRvZ2dsZXM/dGhpcy5zZXRBdHRyaWJ1dGUodGhpcy5hcmlhQWN0aXZlQXR0cmlidXRlLGE/InRydWUiOiJmYWxzZSIpOnRoaXMucmVtb3ZlQXR0cmlidXRlKHRoaXMuYXJpYUFjdGl2ZUF0dHJpYnV0ZSk7dGhpcy5fY2hhbmdlZEJ1dHRvblN0YXRlKCl9LF9jb250cm9sU3RhdGVDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5kaXNhYmxlZD90aGlzLl9zZXRQcmVzc2VkKCExKToKdGhpcy5fY2hhbmdlZEJ1dHRvblN0YXRlKCl9LF9jaGFuZ2VkQnV0dG9uU3RhdGU6ZnVuY3Rpb24oKXt0aGlzLl9idXR0b25TdGF0ZUNoYW5nZWQmJnRoaXMuX2J1dHRvblN0YXRlQ2hhbmdlZCgpfX07UG9seW1lci5Jcm9uQnV0dG9uU3RhdGU9W1BvbHltZXIuSXJvbkExMXlLZXlzQmVoYXZpb3IsUG9seW1lci5Jcm9uQnV0dG9uU3RhdGVJbXBsXTsKPC9zY3JpcHQ+CgoKCgoKCgoKPGRvbS1tb2R1bGUgaWQ9InBhcGVyLXJpcHBsZSI+CgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBib3JkZXItcmFkaXVzOiBpbmhlcml0OwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgdG9wOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwoKICAgICAgICAvKiBTZWUgUG9seW1lckVsZW1lbnRzL3BhcGVyLWJlaGF2aW9ycy9pc3N1ZXMvMzQuIE9uIG5vbi1DaHJvbWUgYnJvd3NlcnMsCiAgICAgICAgICogY3JlYXRpbmcgYSBub2RlICh3aXRoIGEgcG9zaXRpb246YWJzb2x1dGUpIGluIHRoZSBtaWRkbGUgb2YgYW4gZXZlbnQKICAgICAgICAgKiBoYW5kbGVyICJpbnRlcnJ1cHRzIiB0aGF0IGV2ZW50IGhhbmRsZXIgKHdoaWNoIGhhcHBlbnMgd2hlbiB0aGUKICAgICAgICAgKiByaXBwbGUgaXMgY3JlYXRlZCBvbiBkZW1hbmQpICovCiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIH0KCiAgICAgIDpob3N0KFthbmltYXRpbmddKSB7CiAgICAgICAgLyogVGhpcyByZXNvbHZlcyBhIHJlbmRlcmluZyBpc3N1ZSBpbiBDaHJvbWUgKGFzIG9mIDQwKSB3aGVyZSB0aGUKICAgICAgICAgICByaXBwbGUgaXMgbm90IHByb3Blcmx5IGNsaXBwZWQgYnkgaXRzIHBhcmVudCAod2hpY2ggbWF5IGhhdmUKICAgICAgICAgICByb3VuZGVkIGNvcm5lcnMpLiBTZWU6IGh0dHA6Ly9qc2Jpbi5jb20vdGVtZXhhLzQKCiAgICAgICAgICAgTm90ZTogV2Ugb25seSBhcHBseSB0aGlzIHN0eWxlIGNvbmRpdGlvbmFsbHkuIE90aGVyd2lzZSwgdGhlIGJyb3dzZXIKICAgICAgICAgICB3aWxsIGNyZWF0ZSBhIG5ldyBjb21wb3NpdGluZyBsYXllciBmb3IgZXZlcnkgcmlwcGxlIGVsZW1lbnQgb24gdGhlCiAgICAgICAgICAgcGFnZSwgYW5kIHRoYXQgd291bGQgYmUgYmFkLiAqLwogICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgMCk7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwLCAwLCAwKTsKICAgICAgfQoKICAgICAgI2JhY2tncm91bmQsCiAgICAgICN3YXZlcywKICAgICAgLndhdmUtY29udGFpbmVyLAogICAgICAud2F2ZSB7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgfQoKICAgICAgI2JhY2tncm91bmQsCiAgICAgIC53YXZlIHsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICB9CgogICAgICAjd2F2ZXMsCiAgICAgIC53YXZlIHsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB9CgogICAgICAud2F2ZS1jb250YWluZXIsCiAgICAgIC53YXZlIHsKICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICAgIH0KCiAgICAgIDpob3N0KC5jaXJjbGUpICNiYWNrZ3JvdW5kLAogICAgICA6aG9zdCguY2lyY2xlKSAjd2F2ZXMgewogICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgfQoKICAgICAgOmhvc3QoLmNpcmNsZSkgLndhdmUtY29udGFpbmVyIHsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxkaXYgaWQ9ImJhY2tncm91bmQiPjwvZGl2PgogICAgPGRpdiBpZD0id2F2ZXMiPjwvZGl2PgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT4KPHNjcmlwdD4vL35+V0VCUEFUSH5+L3BhcGVyLXJpcHBsZS9wYXBlci1yaXBwbGUuaHRtbC5qcwooZnVuY3Rpb24oKXtmdW5jdGlvbiBhKGYpe3RoaXMuZWxlbWVudD1mO3RoaXMud2lkdGg9dGhpcy5ib3VuZGluZ1JlY3Qud2lkdGg7dGhpcy5oZWlnaHQ9dGhpcy5ib3VuZGluZ1JlY3QuaGVpZ2h0O3RoaXMuc2l6ZT1NYXRoLm1heCh0aGlzLndpZHRoLHRoaXMuaGVpZ2h0KX1mdW5jdGlvbiBjKGYpe3RoaXMuZWxlbWVudD1mO3RoaXMuY29sb3I9d2luZG93LmdldENvbXB1dGVkU3R5bGUoZikuY29sb3I7dGhpcy53YXZlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3RoaXMud2F2ZUNvbnRhaW5lcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTt0aGlzLndhdmUuc3R5bGUuYmFja2dyb3VuZENvbG9yPXRoaXMuY29sb3I7dGhpcy53YXZlLmNsYXNzTGlzdC5hZGQoIndhdmUiKTt0aGlzLndhdmVDb250YWluZXIuY2xhc3NMaXN0LmFkZCgid2F2ZS1jb250YWluZXIiKTtQb2x5bWVyLmRvbSh0aGlzLndhdmVDb250YWluZXIpLmFwcGVuZENoaWxkKHRoaXMud2F2ZSk7dGhpcy5yZXNldEludGVyYWN0aW9uU3RhdGUoKX0KdmFyIGQ9e2Rpc3RhbmNlOmZ1bmN0aW9uKGYsZyxsLGspe2YtPWw7Zy09aztyZXR1cm4gTWF0aC5zcXJ0KGYqZitnKmcpfSxub3c6d2luZG93LnBlcmZvcm1hbmNlJiZ3aW5kb3cucGVyZm9ybWFuY2Uubm93P3dpbmRvdy5wZXJmb3JtYW5jZS5ub3cuYmluZCh3aW5kb3cucGVyZm9ybWFuY2UpOkRhdGUubm93fTthLnByb3RvdHlwZT17Z2V0IGJvdW5kaW5nUmVjdCgpe3JldHVybiB0aGlzLmVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCl9LGZ1cnRoZXN0Q29ybmVyRGlzdGFuY2VGcm9tOmZ1bmN0aW9uKGYsZyl7dmFyIGw9ZC5kaXN0YW5jZShmLGcsMCwwKSxrPWQuZGlzdGFuY2UoZixnLHRoaXMud2lkdGgsMCksbT1kLmRpc3RhbmNlKGYsZywwLHRoaXMuaGVpZ2h0KTtmPWQuZGlzdGFuY2UoZixnLHRoaXMud2lkdGgsdGhpcy5oZWlnaHQpO3JldHVybiBNYXRoLm1heChsLGssbSxmKX19O2MuTUFYX1JBRElVUz0zMDA7Yy5wcm90b3R5cGU9e2dldCByZWNlbnRlcnMoKXtyZXR1cm4gdGhpcy5lbGVtZW50LnJlY2VudGVyc30sCmdldCBjZW50ZXIoKXtyZXR1cm4gdGhpcy5lbGVtZW50LmNlbnRlcn0sZ2V0IG1vdXNlRG93bkVsYXBzZWQoKXtpZighdGhpcy5tb3VzZURvd25TdGFydClyZXR1cm4gMDt2YXIgZj1kLm5vdygpLXRoaXMubW91c2VEb3duU3RhcnQ7dGhpcy5tb3VzZVVwU3RhcnQmJihmLT10aGlzLm1vdXNlVXBFbGFwc2VkKTtyZXR1cm4gZn0sZ2V0IG1vdXNlVXBFbGFwc2VkKCl7cmV0dXJuIHRoaXMubW91c2VVcFN0YXJ0P2Qubm93KCktdGhpcy5tb3VzZVVwU3RhcnQ6MH0sZ2V0IG1vdXNlRG93bkVsYXBzZWRTZWNvbmRzKCl7cmV0dXJuIHRoaXMubW91c2VEb3duRWxhcHNlZC8xRTN9LGdldCBtb3VzZVVwRWxhcHNlZFNlY29uZHMoKXtyZXR1cm4gdGhpcy5tb3VzZVVwRWxhcHNlZC8xRTN9LGdldCBtb3VzZUludGVyYWN0aW9uU2Vjb25kcygpe3JldHVybiB0aGlzLm1vdXNlRG93bkVsYXBzZWRTZWNvbmRzK3RoaXMubW91c2VVcEVsYXBzZWRTZWNvbmRzfSxnZXQgaW5pdGlhbE9wYWNpdHkoKXtyZXR1cm4gdGhpcy5lbGVtZW50LmluaXRpYWxPcGFjaXR5fSwKZ2V0IG9wYWNpdHlEZWNheVZlbG9jaXR5KCl7cmV0dXJuIHRoaXMuZWxlbWVudC5vcGFjaXR5RGVjYXlWZWxvY2l0eX0sZ2V0IHJhZGl1cygpe3ZhciBmPTEuMSpNYXRoLm1pbihNYXRoLnNxcnQodGhpcy5jb250YWluZXJNZXRyaWNzLndpZHRoKnRoaXMuY29udGFpbmVyTWV0cmljcy53aWR0aCt0aGlzLmNvbnRhaW5lck1ldHJpY3MuaGVpZ2h0KnRoaXMuY29udGFpbmVyTWV0cmljcy5oZWlnaHQpLGMuTUFYX1JBRElVUykrNTtyZXR1cm4gTWF0aC5hYnMoZiooMS1NYXRoLnBvdyg4MCwtKHRoaXMubW91c2VJbnRlcmFjdGlvblNlY29uZHMvKDEuMS1mL2MuTUFYX1JBRElVUyouMikpKSkpfSxnZXQgb3BhY2l0eSgpe3JldHVybiB0aGlzLm1vdXNlVXBTdGFydD9NYXRoLm1heCgwLHRoaXMuaW5pdGlhbE9wYWNpdHktdGhpcy5tb3VzZVVwRWxhcHNlZFNlY29uZHMqdGhpcy5vcGFjaXR5RGVjYXlWZWxvY2l0eSk6dGhpcy5pbml0aWFsT3BhY2l0eX0sZ2V0IG91dGVyT3BhY2l0eSgpe3JldHVybiBNYXRoLm1heCgwLApNYXRoLm1pbiguMyp0aGlzLm1vdXNlVXBFbGFwc2VkU2Vjb25kcyx0aGlzLm9wYWNpdHkpKX0sZ2V0IGlzT3BhY2l0eUZ1bGx5RGVjYXllZCgpe3JldHVybi4wMT50aGlzLm9wYWNpdHkmJnRoaXMucmFkaXVzPj1NYXRoLm1pbih0aGlzLm1heFJhZGl1cyxjLk1BWF9SQURJVVMpfSxnZXQgaXNSZXN0aW5nQXRNYXhSYWRpdXMoKXtyZXR1cm4gdGhpcy5vcGFjaXR5Pj10aGlzLmluaXRpYWxPcGFjaXR5JiZ0aGlzLnJhZGl1cz49TWF0aC5taW4odGhpcy5tYXhSYWRpdXMsYy5NQVhfUkFESVVTKX0sZ2V0IGlzQW5pbWF0aW9uQ29tcGxldGUoKXtyZXR1cm4gdGhpcy5tb3VzZVVwU3RhcnQ/dGhpcy5pc09wYWNpdHlGdWxseURlY2F5ZWQ6dGhpcy5pc1Jlc3RpbmdBdE1heFJhZGl1c30sZ2V0IHRyYW5zbGF0aW9uRnJhY3Rpb24oKXtyZXR1cm4gTWF0aC5taW4oMSx0aGlzLnJhZGl1cy90aGlzLmNvbnRhaW5lck1ldHJpY3Muc2l6ZSoyL01hdGguc3FydCgyKSl9LGdldCB4Tm93KCl7cmV0dXJuIHRoaXMueEVuZD8KdGhpcy54U3RhcnQrdGhpcy50cmFuc2xhdGlvbkZyYWN0aW9uKih0aGlzLnhFbmQtdGhpcy54U3RhcnQpOnRoaXMueFN0YXJ0fSxnZXQgeU5vdygpe3JldHVybiB0aGlzLnlFbmQ/dGhpcy55U3RhcnQrdGhpcy50cmFuc2xhdGlvbkZyYWN0aW9uKih0aGlzLnlFbmQtdGhpcy55U3RhcnQpOnRoaXMueVN0YXJ0fSxnZXQgaXNNb3VzZURvd24oKXtyZXR1cm4gdGhpcy5tb3VzZURvd25TdGFydCYmIXRoaXMubW91c2VVcFN0YXJ0fSxyZXNldEludGVyYWN0aW9uU3RhdGU6ZnVuY3Rpb24oKXt0aGlzLnNsaWRlRGlzdGFuY2U9dGhpcy55RW5kPXRoaXMueEVuZD10aGlzLnlTdGFydD10aGlzLnhTdGFydD10aGlzLm1vdXNlVXBTdGFydD10aGlzLm1vdXNlRG93blN0YXJ0PXRoaXMubWF4UmFkaXVzPTA7dGhpcy5jb250YWluZXJNZXRyaWNzPW5ldyBhKHRoaXMuZWxlbWVudCl9LGRyYXc6ZnVuY3Rpb24oKXt0aGlzLndhdmUuc3R5bGUub3BhY2l0eT10aGlzLm9wYWNpdHk7dmFyIGY9dGhpcy5yYWRpdXMvCih0aGlzLmNvbnRhaW5lck1ldHJpY3Muc2l6ZS8yKTt2YXIgZz10aGlzLnhOb3ctdGhpcy5jb250YWluZXJNZXRyaWNzLndpZHRoLzI7dmFyIGw9dGhpcy55Tm93LXRoaXMuY29udGFpbmVyTWV0cmljcy5oZWlnaHQvMjt0aGlzLndhdmVDb250YWluZXIuc3R5bGUud2Via2l0VHJhbnNmb3JtPSJ0cmFuc2xhdGUoIitnKyJweCwgIitsKyJweCkiO3RoaXMud2F2ZUNvbnRhaW5lci5zdHlsZS50cmFuc2Zvcm09InRyYW5zbGF0ZTNkKCIrZysicHgsICIrbCsicHgsIDApIjt0aGlzLndhdmUuc3R5bGUud2Via2l0VHJhbnNmb3JtPSJzY2FsZSgiK2YrIiwiK2YrIikiO3RoaXMud2F2ZS5zdHlsZS50cmFuc2Zvcm09InNjYWxlM2QoIitmKyIsIitmKyIsMSkifSxkb3duQWN0aW9uOmZ1bmN0aW9uKGYpe3ZhciBnPXRoaXMuY29udGFpbmVyTWV0cmljcy53aWR0aC8yLGw9dGhpcy5jb250YWluZXJNZXRyaWNzLmhlaWdodC8yO3RoaXMucmVzZXRJbnRlcmFjdGlvblN0YXRlKCk7dGhpcy5tb3VzZURvd25TdGFydD0KZC5ub3coKTt0aGlzLmNlbnRlcj8odGhpcy54U3RhcnQ9Zyx0aGlzLnlTdGFydD1sLHRoaXMuc2xpZGVEaXN0YW5jZT1kLmRpc3RhbmNlKHRoaXMueFN0YXJ0LHRoaXMueVN0YXJ0LHRoaXMueEVuZCx0aGlzLnlFbmQpKToodGhpcy54U3RhcnQ9Zj9mLmRldGFpbC54LXRoaXMuY29udGFpbmVyTWV0cmljcy5ib3VuZGluZ1JlY3QubGVmdDp0aGlzLmNvbnRhaW5lck1ldHJpY3Mud2lkdGgvMix0aGlzLnlTdGFydD1mP2YuZGV0YWlsLnktdGhpcy5jb250YWluZXJNZXRyaWNzLmJvdW5kaW5nUmVjdC50b3A6dGhpcy5jb250YWluZXJNZXRyaWNzLmhlaWdodC8yKTt0aGlzLnJlY2VudGVycyYmKHRoaXMueEVuZD1nLHRoaXMueUVuZD1sLHRoaXMuc2xpZGVEaXN0YW5jZT1kLmRpc3RhbmNlKHRoaXMueFN0YXJ0LHRoaXMueVN0YXJ0LHRoaXMueEVuZCx0aGlzLnlFbmQpKTt0aGlzLm1heFJhZGl1cz10aGlzLmNvbnRhaW5lck1ldHJpY3MuZnVydGhlc3RDb3JuZXJEaXN0YW5jZUZyb20odGhpcy54U3RhcnQsCnRoaXMueVN0YXJ0KTt0aGlzLndhdmVDb250YWluZXIuc3R5bGUudG9wPSh0aGlzLmNvbnRhaW5lck1ldHJpY3MuaGVpZ2h0LXRoaXMuY29udGFpbmVyTWV0cmljcy5zaXplKS8yKyJweCI7dGhpcy53YXZlQ29udGFpbmVyLnN0eWxlLmxlZnQ9KHRoaXMuY29udGFpbmVyTWV0cmljcy53aWR0aC10aGlzLmNvbnRhaW5lck1ldHJpY3Muc2l6ZSkvMisicHgiO3RoaXMud2F2ZUNvbnRhaW5lci5zdHlsZS53aWR0aD10aGlzLmNvbnRhaW5lck1ldHJpY3Muc2l6ZSsicHgiO3RoaXMud2F2ZUNvbnRhaW5lci5zdHlsZS5oZWlnaHQ9dGhpcy5jb250YWluZXJNZXRyaWNzLnNpemUrInB4In0sdXBBY3Rpb246ZnVuY3Rpb24oKXt0aGlzLmlzTW91c2VEb3duJiYodGhpcy5tb3VzZVVwU3RhcnQ9ZC5ub3coKSl9LHJlbW92ZTpmdW5jdGlvbigpe1BvbHltZXIuZG9tKHRoaXMud2F2ZUNvbnRhaW5lci5wYXJlbnROb2RlKS5yZW1vdmVDaGlsZCh0aGlzLndhdmVDb250YWluZXIpfX07UG9seW1lcih7aXM6InBhcGVyLXJpcHBsZSIsCmJlaGF2aW9yczpbUG9seW1lci5Jcm9uQTExeUtleXNCZWhhdmlvcl0scHJvcGVydGllczp7aW5pdGlhbE9wYWNpdHk6e3R5cGU6TnVtYmVyLHZhbHVlOi4yNX0sb3BhY2l0eURlY2F5VmVsb2NpdHk6e3R5cGU6TnVtYmVyLHZhbHVlOi44fSxyZWNlbnRlcnM6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sY2VudGVyOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LHJpcHBsZXM6e3R5cGU6QXJyYXksdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm5bXX19LGFuaW1hdGluZzp7dHlwZTpCb29sZWFuLHJlYWRPbmx5OiEwLHJlZmxlY3RUb0F0dHJpYnV0ZTohMCx2YWx1ZTohMX0saG9sZERvd246e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxvYnNlcnZlcjoiX2hvbGREb3duQ2hhbmdlZCJ9LG5vaW5rOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LF9hbmltYXRpbmc6e3R5cGU6Qm9vbGVhbn0sX2JvdW5kQW5pbWF0ZTp7dHlwZTpGdW5jdGlvbix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmFuaW1hdGUuYmluZCh0aGlzKX19fSwKZ2V0IHRhcmdldCgpe3JldHVybiB0aGlzLmtleUV2ZW50VGFyZ2V0fSxrZXlCaW5kaW5nczp7ImVudGVyOmtleWRvd24iOiJfb25FbnRlcktleWRvd24iLCJzcGFjZTprZXlkb3duIjoiX29uU3BhY2VLZXlkb3duIiwic3BhY2U6a2V5dXAiOiJfb25TcGFjZUtleXVwIn0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt2YXIgZj10aGlzLmtleUV2ZW50VGFyZ2V0PTExPT10aGlzLnBhcmVudE5vZGUubm9kZVR5cGU/UG9seW1lci5kb20odGhpcykuZ2V0T3duZXJSb290KCkuaG9zdDp0aGlzLnBhcmVudE5vZGU7dGhpcy5saXN0ZW4oZiwidXAiLCJ1aVVwQWN0aW9uIik7dGhpcy5saXN0ZW4oZiwiZG93biIsInVpRG93bkFjdGlvbiIpfSxkZXRhY2hlZDpmdW5jdGlvbigpe3RoaXMudW5saXN0ZW4odGhpcy5rZXlFdmVudFRhcmdldCwidXAiLCJ1aVVwQWN0aW9uIik7dGhpcy51bmxpc3Rlbih0aGlzLmtleUV2ZW50VGFyZ2V0LCJkb3duIiwidWlEb3duQWN0aW9uIik7dGhpcy5rZXlFdmVudFRhcmdldD0KbnVsbH0sZ2V0IHNob3VsZEtlZXBBbmltYXRpbmcoKXtmb3IodmFyIGY9MDtmPHRoaXMucmlwcGxlcy5sZW5ndGg7KytmKWlmKCF0aGlzLnJpcHBsZXNbZl0uaXNBbmltYXRpb25Db21wbGV0ZSlyZXR1cm4hMDtyZXR1cm4hMX0sc2ltdWxhdGVkUmlwcGxlOmZ1bmN0aW9uKCl7dGhpcy5kb3duQWN0aW9uKG51bGwpO3RoaXMuYXN5bmMoZnVuY3Rpb24oKXt0aGlzLnVwQWN0aW9uKCl9LDEpfSx1aURvd25BY3Rpb246ZnVuY3Rpb24oZil7dGhpcy5ub2lua3x8dGhpcy5kb3duQWN0aW9uKGYpfSxkb3duQWN0aW9uOmZ1bmN0aW9uKGYpe3RoaXMuaG9sZERvd24mJjA8dGhpcy5yaXBwbGVzLmxlbmd0aHx8KHRoaXMuYWRkUmlwcGxlKCkuZG93bkFjdGlvbihmKSx0aGlzLl9hbmltYXRpbmd8fCh0aGlzLl9hbmltYXRpbmc9ITAsdGhpcy5hbmltYXRlKCkpKX0sdWlVcEFjdGlvbjpmdW5jdGlvbihmKXt0aGlzLm5vaW5rfHx0aGlzLnVwQWN0aW9uKGYpfSx1cEFjdGlvbjpmdW5jdGlvbihmKXt0aGlzLmhvbGREb3dufHwKKHRoaXMucmlwcGxlcy5mb3JFYWNoKGZ1bmN0aW9uKGcpe2cudXBBY3Rpb24oZil9KSx0aGlzLl9hbmltYXRpbmc9ITAsdGhpcy5hbmltYXRlKCkpfSxvbkFuaW1hdGlvbkNvbXBsZXRlOmZ1bmN0aW9uKCl7dGhpcy5fYW5pbWF0aW5nPSExO3RoaXMuJC5iYWNrZ3JvdW5kLnN0eWxlLmJhY2tncm91bmRDb2xvcj1udWxsO3RoaXMuZmlyZSgidHJhbnNpdGlvbmVuZCIpfSxhZGRSaXBwbGU6ZnVuY3Rpb24oKXt2YXIgZj1uZXcgYyh0aGlzKTtQb2x5bWVyLmRvbSh0aGlzLiQud2F2ZXMpLmFwcGVuZENoaWxkKGYud2F2ZUNvbnRhaW5lcik7dGhpcy4kLmJhY2tncm91bmQuc3R5bGUuYmFja2dyb3VuZENvbG9yPWYuY29sb3I7dGhpcy5yaXBwbGVzLnB1c2goZik7dGhpcy5fc2V0QW5pbWF0aW5nKCEwKTtyZXR1cm4gZn0scmVtb3ZlUmlwcGxlOmZ1bmN0aW9uKGYpe3ZhciBnPXRoaXMucmlwcGxlcy5pbmRleE9mKGYpOzA+Z3x8KHRoaXMucmlwcGxlcy5zcGxpY2UoZywxKSxmLnJlbW92ZSgpLAp0aGlzLnJpcHBsZXMubGVuZ3RofHx0aGlzLl9zZXRBbmltYXRpbmcoITEpKX0sYW5pbWF0ZTpmdW5jdGlvbigpe2lmKHRoaXMuX2FuaW1hdGluZyl7dmFyIGY7Zm9yKGY9MDtmPHRoaXMucmlwcGxlcy5sZW5ndGg7KytmKXt2YXIgZz10aGlzLnJpcHBsZXNbZl07Zy5kcmF3KCk7dGhpcy4kLmJhY2tncm91bmQuc3R5bGUub3BhY2l0eT1nLm91dGVyT3BhY2l0eTtnLmlzT3BhY2l0eUZ1bGx5RGVjYXllZCYmIWcuaXNSZXN0aW5nQXRNYXhSYWRpdXMmJnRoaXMucmVtb3ZlUmlwcGxlKGcpfWlmKHRoaXMuc2hvdWxkS2VlcEFuaW1hdGluZ3x8MCE9PXRoaXMucmlwcGxlcy5sZW5ndGgpd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSh0aGlzLl9ib3VuZEFuaW1hdGUpO2Vsc2UgdGhpcy5vbkFuaW1hdGlvbkNvbXBsZXRlKCl9fSxfb25FbnRlcktleWRvd246ZnVuY3Rpb24oKXt0aGlzLnVpRG93bkFjdGlvbigpO3RoaXMuYXN5bmModGhpcy51aVVwQWN0aW9uLDEpfSxfb25TcGFjZUtleWRvd246ZnVuY3Rpb24oKXt0aGlzLnVpRG93bkFjdGlvbigpfSwKX29uU3BhY2VLZXl1cDpmdW5jdGlvbigpe3RoaXMudWlVcEFjdGlvbigpfSxfaG9sZERvd25DaGFuZ2VkOmZ1bmN0aW9uKGYsZyl7dm9pZCAwIT09ZyYmKGY/dGhpcy5kb3duQWN0aW9uKCk6dGhpcy51cEFjdGlvbigpKX19KX0pKCk7Cjwvc2NyaXB0PgoKCjxzY3JpcHQ+Ly9+fldFQlBBVEh+fi9wYXBlci1iZWhhdmlvcnMvcGFwZXItcmlwcGxlLWJlaGF2aW9yLmh0bWwuanMKUG9seW1lci5QYXBlclJpcHBsZUJlaGF2aW9yPXtwcm9wZXJ0aWVzOntub2luazp7dHlwZTpCb29sZWFuLG9ic2VydmVyOiJfbm9pbmtDaGFuZ2VkIn0sX3JpcHBsZUNvbnRhaW5lcjp7dHlwZTpPYmplY3R9fSxfYnV0dG9uU3RhdGVDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5mb2N1c2VkJiZ0aGlzLmVuc3VyZVJpcHBsZSgpfSxfZG93bkhhbmRsZXI6ZnVuY3Rpb24oYSl7UG9seW1lci5Jcm9uQnV0dG9uU3RhdGVJbXBsLl9kb3duSGFuZGxlci5jYWxsKHRoaXMsYSk7dGhpcy5wcmVzc2VkJiZ0aGlzLmVuc3VyZVJpcHBsZShhKX0sZW5zdXJlUmlwcGxlOmZ1bmN0aW9uKGEpe2lmKCF0aGlzLmhhc1JpcHBsZSgpKXt0aGlzLl9yaXBwbGU9dGhpcy5fY3JlYXRlUmlwcGxlKCk7dGhpcy5fcmlwcGxlLm5vaW5rPXRoaXMubm9pbms7dmFyIGM9dGhpcy5fcmlwcGxlQ29udGFpbmVyfHx0aGlzLnJvb3Q7YyYmUG9seW1lci5kb20oYykuYXBwZW5kQ2hpbGQodGhpcy5fcmlwcGxlKTtpZihhKXtjPQpQb2x5bWVyLmRvbSh0aGlzLl9yaXBwbGVDb250YWluZXJ8fHRoaXMpO3ZhciBkPVBvbHltZXIuZG9tKGEpLnJvb3RUYXJnZXQ7Yy5kZWVwQ29udGFpbnMoZCkmJnRoaXMuX3JpcHBsZS51aURvd25BY3Rpb24oYSl9fX0sZ2V0UmlwcGxlOmZ1bmN0aW9uKCl7dGhpcy5lbnN1cmVSaXBwbGUoKTtyZXR1cm4gdGhpcy5fcmlwcGxlfSxoYXNSaXBwbGU6ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuX3JpcHBsZX0sX2NyZWF0ZVJpcHBsZTpmdW5jdGlvbigpe3JldHVybiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJwYXBlci1yaXBwbGUiKX0sX25vaW5rQ2hhbmdlZDpmdW5jdGlvbihhKXt0aGlzLmhhc1JpcHBsZSgpJiYodGhpcy5fcmlwcGxlLm5vaW5rPWEpfX07Cjwvc2NyaXB0PgoKCjxzY3JpcHQ+Ly9+fldFQlBBVEh+fi9wYXBlci1iZWhhdmlvcnMvcGFwZXItYnV0dG9uLWJlaGF2aW9yLmh0bWwuanMKUG9seW1lci5QYXBlckJ1dHRvbkJlaGF2aW9ySW1wbD17cHJvcGVydGllczp7ZWxldmF0aW9uOnt0eXBlOk51bWJlcixyZWZsZWN0VG9BdHRyaWJ1dGU6ITAscmVhZE9ubHk6ITB9fSxvYnNlcnZlcnM6WyJfY2FsY3VsYXRlRWxldmF0aW9uKGZvY3VzZWQsIGRpc2FibGVkLCBhY3RpdmUsIHByZXNzZWQsIHJlY2VpdmVkRm9jdXNGcm9tS2V5Ym9hcmQpIiwiX2NvbXB1dGVLZXlib2FyZENsYXNzKHJlY2VpdmVkRm9jdXNGcm9tS2V5Ym9hcmQpIl0saG9zdEF0dHJpYnV0ZXM6e3JvbGU6ImJ1dHRvbiIsdGFiaW5kZXg6IjAiLGFuaW1hdGVkOiEwfSxfY2FsY3VsYXRlRWxldmF0aW9uOmZ1bmN0aW9uKCl7dmFyIGE9MTt0aGlzLmRpc2FibGVkP2E9MDp0aGlzLmFjdGl2ZXx8dGhpcy5wcmVzc2VkP2E9NDp0aGlzLnJlY2VpdmVkRm9jdXNGcm9tS2V5Ym9hcmQmJihhPTMpO3RoaXMuX3NldEVsZXZhdGlvbihhKX0sX2NvbXB1dGVLZXlib2FyZENsYXNzOmZ1bmN0aW9uKGEpe3RoaXMudG9nZ2xlQ2xhc3MoImtleWJvYXJkLWZvY3VzIiwKYSl9LF9zcGFjZUtleURvd25IYW5kbGVyOmZ1bmN0aW9uKGEpe1BvbHltZXIuSXJvbkJ1dHRvblN0YXRlSW1wbC5fc3BhY2VLZXlEb3duSGFuZGxlci5jYWxsKHRoaXMsYSk7dGhpcy5oYXNSaXBwbGUoKSYmMT50aGlzLmdldFJpcHBsZSgpLnJpcHBsZXMubGVuZ3RoJiZ0aGlzLl9yaXBwbGUudWlEb3duQWN0aW9uKCl9LF9zcGFjZUtleVVwSGFuZGxlcjpmdW5jdGlvbihhKXtQb2x5bWVyLklyb25CdXR0b25TdGF0ZUltcGwuX3NwYWNlS2V5VXBIYW5kbGVyLmNhbGwodGhpcyxhKTt0aGlzLmhhc1JpcHBsZSgpJiZ0aGlzLl9yaXBwbGUudWlVcEFjdGlvbigpfX07UG9seW1lci5QYXBlckJ1dHRvbkJlaGF2aW9yPVtQb2x5bWVyLklyb25CdXR0b25TdGF0ZSxQb2x5bWVyLklyb25Db250cm9sU3RhdGUsUG9seW1lci5QYXBlclJpcHBsZUJlaGF2aW9yLFBvbHltZXIuUGFwZXJCdXR0b25CZWhhdmlvckltcGxdOwo8L3NjcmlwdD4KCgoKCjxjdXN0b20tc3R5bGU+CiAgPHN0eWxlIGlzPSJjdXN0b20tc3R5bGUiPgogICAgaHRtbCB7CgogICAgICAtLXNoYWRvdy10cmFuc2l0aW9uOiB7CiAgICAgICAgdHJhbnNpdGlvbjogYm94LXNoYWRvdyAwLjI4cyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpOwogICAgICB9OwoKICAgICAgLS1zaGFkb3ctbm9uZTogewogICAgICAgIGJveC1zaGFkb3c6IG5vbmU7CiAgICAgIH07CgogICAgICAvKiBmcm9tIGh0dHA6Ly9jb2RlcGVuLmlvL3NoeW5kbWFuL3Blbi9jNTM5NGRkZjJlOGIyYTVjOTE4NTkwNGI1NzQyMWNkYiAqLwoKICAgICAgLS1zaGFkb3ctZWxldmF0aW9uLTJkcDogewogICAgICAgIGJveC1zaGFkb3c6IDAgMnB4IDJweCAwIHJnYmEoMCwgMCwgMCwgMC4xNCksCiAgICAgICAgICAgICAgICAgICAgMCAxcHggNXB4IDAgcmdiYSgwLCAwLCAwLCAwLjEyKSwKICAgICAgICAgICAgICAgICAgICAwIDNweCAxcHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMik7CiAgICAgIH07CgogICAgICAtLXNoYWRvdy1lbGV2YXRpb24tM2RwOiB7CiAgICAgICAgYm94LXNoYWRvdzogMCAzcHggNHB4IDAgcmdiYSgwLCAwLCAwLCAwLjE0KSwKICAgICAgICAgICAgICAgICAgICAwIDFweCA4cHggMCByZ2JhKDAsIDAsIDAsIDAuMTIpLAogICAgICAgICAgICAgICAgICAgIDAgM3B4IDNweCAtMnB4IHJnYmEoMCwgMCwgMCwgMC40KTsKICAgICAgfTsKCiAgICAgIC0tc2hhZG93LWVsZXZhdGlvbi00ZHA6IHsKICAgICAgICBib3gtc2hhZG93OiAwIDRweCA1cHggMCByZ2JhKDAsIDAsIDAsIDAuMTQpLAogICAgICAgICAgICAgICAgICAgIDAgMXB4IDEwcHggMCByZ2JhKDAsIDAsIDAsIDAuMTIpLAogICAgICAgICAgICAgICAgICAgIDAgMnB4IDRweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC40KTsKICAgICAgfTsKCiAgICAgIC0tc2hhZG93LWVsZXZhdGlvbi02ZHA6IHsKICAgICAgICBib3gtc2hhZG93OiAwIDZweCAxMHB4IDAgcmdiYSgwLCAwLCAwLCAwLjE0KSwKICAgICAgICAgICAgICAgICAgICAwIDFweCAxOHB4IDAgcmdiYSgwLCAwLCAwLCAwLjEyKSwKICAgICAgICAgICAgICAgICAgICAwIDNweCA1cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuNCk7CiAgICAgIH07CgogICAgICAtLXNoYWRvdy1lbGV2YXRpb24tOGRwOiB7CiAgICAgICAgYm94LXNoYWRvdzogMCA4cHggMTBweCAxcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwKICAgICAgICAgICAgICAgICAgICAwIDNweCAxNHB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTIpLAogICAgICAgICAgICAgICAgICAgIDAgNXB4IDVweCAtM3B4IHJnYmEoMCwgMCwgMCwgMC40KTsKICAgICAgfTsKCiAgICAgIC0tc2hhZG93LWVsZXZhdGlvbi0xMmRwOiB7CiAgICAgICAgYm94LXNoYWRvdzogMCAxMnB4IDE2cHggMXB4IHJnYmEoMCwgMCwgMCwgMC4xNCksCiAgICAgICAgICAgICAgICAgICAgMCA0cHggMjJweCAzcHggcmdiYSgwLCAwLCAwLCAwLjEyKSwKICAgICAgICAgICAgICAgICAgICAwIDZweCA3cHggLTRweCByZ2JhKDAsIDAsIDAsIDAuNCk7CiAgICAgIH07CgogICAgICAtLXNoYWRvdy1lbGV2YXRpb24tMTZkcDogewogICAgICAgIGJveC1zaGFkb3c6IDAgMTZweCAyNHB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLAogICAgICAgICAgICAgICAgICAgIDAgIDZweCAzMHB4IDVweCByZ2JhKDAsIDAsIDAsIDAuMTIpLAogICAgICAgICAgICAgICAgICAgIDAgIDhweCAxMHB4IC01cHggcmdiYSgwLCAwLCAwLCAwLjQpOwogICAgICB9OwoKICAgICAgLS1zaGFkb3ctZWxldmF0aW9uLTI0ZHA6IHsKICAgICAgICBib3gtc2hhZG93OiAwIDI0cHggMzhweCAzcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwKICAgICAgICAgICAgICAgICAgICAwIDlweCA0NnB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMTIpLAogICAgICAgICAgICAgICAgICAgIDAgMTFweCAxNXB4IC03cHggcmdiYSgwLCAwLCAwLCAwLjQpOwogICAgICB9OwogICAgfQogIDwvc3R5bGU+CjwvY3VzdG9tLXN0eWxlPgoKCgoKPGRvbS1tb2R1bGUgaWQ9InBhcGVyLW1hdGVyaWFsLXN0eWxlcyI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICA6aG9zdCwgaHRtbCB7CiAgICAgICAgLS1wYXBlci1tYXRlcmlhbDogewogICAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgfTsKICAgICAgICAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi0xOiB7CiAgICAgICAgICBAYXBwbHkgLS1zaGFkb3ctZWxldmF0aW9uLTJkcDsKICAgICAgICB9OwogICAgICAgIC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTI6IHsKICAgICAgICAgIEBhcHBseSAtLXNoYWRvdy1lbGV2YXRpb24tNGRwOwogICAgICAgIH07CiAgICAgICAgLS1wYXBlci1tYXRlcmlhbC1lbGV2YXRpb24tMzogewogICAgICAgICAgQGFwcGx5IC0tc2hhZG93LWVsZXZhdGlvbi02ZHA7CiAgICAgICAgfTsKICAgICAgICAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi00OiB7CiAgICAgICAgICBAYXBwbHkgLS1zaGFkb3ctZWxldmF0aW9uLThkcDsKICAgICAgICB9OwogICAgICAgIC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTU6IHsKICAgICAgICAgIEBhcHBseSAtLXNoYWRvdy1lbGV2YXRpb24tMTZkcDsKICAgICAgICB9OwogICAgICB9CiAgICAgIDpob3N0KC5wYXBlci1tYXRlcmlhbCksIC5wYXBlci1tYXRlcmlhbCB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItbWF0ZXJpYWw7CiAgICAgIH0KICAgICAgOmhvc3QoLnBhcGVyLW1hdGVyaWFsW2VsZXZhdGlvbj0iMSJdKSwgLnBhcGVyLW1hdGVyaWFsW2VsZXZhdGlvbj0iMSJdIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1tYXRlcmlhbC1lbGV2YXRpb24tMTsKICAgICAgfQogICAgICA6aG9zdCgucGFwZXItbWF0ZXJpYWxbZWxldmF0aW9uPSIyIl0pLCAucGFwZXItbWF0ZXJpYWxbZWxldmF0aW9uPSIyIl0gewogICAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi0yOwogICAgICB9CiAgICAgIDpob3N0KC5wYXBlci1tYXRlcmlhbFtlbGV2YXRpb249IjMiXSksIC5wYXBlci1tYXRlcmlhbFtlbGV2YXRpb249IjMiXSB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTM7CiAgICAgIH0KICAgICAgOmhvc3QoLnBhcGVyLW1hdGVyaWFsW2VsZXZhdGlvbj0iNCJdKSwgLnBhcGVyLW1hdGVyaWFsW2VsZXZhdGlvbj0iNCJdIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1tYXRlcmlhbC1lbGV2YXRpb24tNDsKICAgICAgfQogICAgICA6aG9zdCgucGFwZXItbWF0ZXJpYWxbZWxldmF0aW9uPSI1Il0pLCAucGFwZXItbWF0ZXJpYWxbZWxldmF0aW9uPSI1Il0gewogICAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi01OwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT4KCgoKCjxkb20tbW9kdWxlIGlkPSJwYXBlci1idXR0b24iPgogIDx0ZW1wbGF0ZSBzdHJpcC13aGl0ZXNwYWNlPgogICAgPHN0eWxlIGluY2x1ZGU9InBhcGVyLW1hdGVyaWFsLXN0eWxlcyI+CiAgICAgIC8qIE5lZWQgdG8gc3BlY2lmeSB0aGUgc2FtZSBzcGVjaWZpY2l0eSBhcyB0aGUgc3R5bGVzIGltcG9ydGVkIGZyb20gcGFwZXItbWF0ZXJpYWwuICovCiAgICAgIDpob3N0IHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtaW5saW5lOwogICAgICAgIEBhcHBseSAtLWxheW91dC1jZW50ZXItY2VudGVyOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgIG1pbi13aWR0aDogNS4xNGVtOwogICAgICAgIG1hcmdpbjogMCAwLjI5ZW07CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgICAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiByZ2JhKDAsIDAsIDAsIDApOwogICAgICAgIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogdHJhbnNwYXJlbnQ7CiAgICAgICAgZm9udDogaW5oZXJpdDsKICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgICAgIG91dGxpbmUtd2lkdGg6IDA7CiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgLW1zLXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHotaW5kZXg6IDA7CiAgICAgICAgcGFkZGluZzogMC43ZW0gMC41N2VtOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1iYXNlOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWJ1dHRvbjsKICAgICAgfQoKICAgICAgOmhvc3QoW2VsZXZhdGlvbj0iMSJdKSB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTE7CiAgICAgIH0KCiAgICAgIDpob3N0KFtlbGV2YXRpb249IjIiXSkgewogICAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi0yOwogICAgICB9CgogICAgICA6aG9zdChbZWxldmF0aW9uPSIzIl0pIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1tYXRlcmlhbC1lbGV2YXRpb24tMzsKICAgICAgfQoKICAgICAgOmhvc3QoW2VsZXZhdGlvbj0iNCJdKSB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTQ7CiAgICAgIH0KCiAgICAgIDpob3N0KFtlbGV2YXRpb249IjUiXSkgewogICAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi01OwogICAgICB9CgogICAgICA6aG9zdChbaGlkZGVuXSkgewogICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgOmhvc3QoW3JhaXNlZF0ua2V5Ym9hcmQtZm9jdXMpIHsKICAgICAgICBmb250LXdlaWdodDogYm9sZDsKICAgICAgICBAYXBwbHkgLS1wYXBlci1idXR0b24tcmFpc2VkLWtleWJvYXJkLWZvY3VzOwogICAgICB9CgogICAgICA6aG9zdCg6bm90KFtyYWlzZWRdKS5rZXlib2FyZC1mb2N1cykgewogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWJ1dHRvbi1mbGF0LWtleWJvYXJkLWZvY3VzOwogICAgICB9CgogICAgICA6aG9zdChbZGlzYWJsZWRdKSB7CiAgICAgICAgYmFja2dyb3VuZDogI2VhZWFlYTsKICAgICAgICBjb2xvcjogI2E4YThhODsKICAgICAgICBjdXJzb3I6IGF1dG87CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWJ1dHRvbi1kaXNhYmxlZDsKICAgICAgfQoKICAgICAgOmhvc3QoW2FuaW1hdGVkXSkgewogICAgICAgIEBhcHBseSAtLXNoYWRvdy10cmFuc2l0aW9uOwogICAgICB9CgogICAgICBwYXBlci1yaXBwbGUgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1idXR0b24taW5rLWNvbG9yKTsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8c2xvdD48L3Nsb3Q+CiAgPC90ZW1wbGF0ZT4KCiAgPHNjcmlwdD4vL35+V0VCUEFUSH5+L3BhcGVyLWJ1dHRvbi9wYXBlci1idXR0b24uaHRtbC5qcwpQb2x5bWVyKHtpczoicGFwZXItYnV0dG9uIixiZWhhdmlvcnM6W1BvbHltZXIuUGFwZXJCdXR0b25CZWhhdmlvcl0scHJvcGVydGllczp7cmFpc2VkOnt0eXBlOkJvb2xlYW4scmVmbGVjdFRvQXR0cmlidXRlOiEwLHZhbHVlOiExLG9ic2VydmVyOiJfY2FsY3VsYXRlRWxldmF0aW9uIn19LF9jYWxjdWxhdGVFbGV2YXRpb246ZnVuY3Rpb24oKXt0aGlzLnJhaXNlZD9Qb2x5bWVyLlBhcGVyQnV0dG9uQmVoYXZpb3JJbXBsLl9jYWxjdWxhdGVFbGV2YXRpb24uYXBwbHkodGhpcyk6dGhpcy5fc2V0RWxldmF0aW9uKDApfX0pOwo8L3NjcmlwdD4KPC9kb20tbW9kdWxlPgoKCgoKCjxjdXN0b20tc3R5bGU+CiAgPHN0eWxlIGlzPSJjdXN0b20tc3R5bGUiPgogICAgaHRtbCB7CgogICAgICAvKiBNYXRlcmlhbCBEZXNpZ24gY29sb3IgcGFsZXR0ZSBmb3IgR29vZ2xlIHByb2R1Y3RzICovCgogICAgICAtLWdvb2dsZS1yZWQtMTAwOiAjZjRjN2MzOwogICAgICAtLWdvb2dsZS1yZWQtMzAwOiAjZTY3YzczOwogICAgICAtLWdvb2dsZS1yZWQtNTAwOiAjZGI0NDM3OwogICAgICAtLWdvb2dsZS1yZWQtNzAwOiAjYzUzOTI5OwoKICAgICAgLS1nb29nbGUtYmx1ZS0xMDA6ICNjNmRhZmM7CiAgICAgIC0tZ29vZ2xlLWJsdWUtMzAwOiAjN2JhYWY3OwogICAgICAtLWdvb2dsZS1ibHVlLTUwMDogIzQyODVmNDsKICAgICAgLS1nb29nbGUtYmx1ZS03MDA6ICMzMzY3ZDY7CgogICAgICAtLWdvb2dsZS1ncmVlbi0xMDA6ICNiN2UxY2Q7CiAgICAgIC0tZ29vZ2xlLWdyZWVuLTMwMDogIzU3YmI4YTsKICAgICAgLS1nb29nbGUtZ3JlZW4tNTAwOiAjMGY5ZDU4OwogICAgICAtLWdvb2dsZS1ncmVlbi03MDA6ICMwYjgwNDM7CgogICAgICAtLWdvb2dsZS15ZWxsb3ctMTAwOiAjZmNlOGIyOwogICAgICAtLWdvb2dsZS15ZWxsb3ctMzAwOiAjZjdjYjRkOwogICAgICAtLWdvb2dsZS15ZWxsb3ctNTAwOiAjZjRiNDAwOwogICAgICAtLWdvb2dsZS15ZWxsb3ctNzAwOiAjZjA5MzAwOwoKICAgICAgLS1nb29nbGUtZ3JleS0xMDA6ICNmNWY1ZjU7CiAgICAgIC0tZ29vZ2xlLWdyZXktMzAwOiAjZTBlMGUwOwogICAgICAtLWdvb2dsZS1ncmV5LTUwMDogIzllOWU5ZTsKICAgICAgLS1nb29nbGUtZ3JleS03MDA6ICM2MTYxNjE7CgogICAgICAvKiBNYXRlcmlhbCBEZXNpZ24gY29sb3IgcGFsZXR0ZSBmcm9tIG9ubGluZSBzcGVjIGRvY3VtZW50ICovCgogICAgICAtLXBhcGVyLXJlZC01MDogI2ZmZWJlZTsKICAgICAgLS1wYXBlci1yZWQtMTAwOiAjZmZjZGQyOwogICAgICAtLXBhcGVyLXJlZC0yMDA6ICNlZjlhOWE7CiAgICAgIC0tcGFwZXItcmVkLTMwMDogI2U1NzM3MzsKICAgICAgLS1wYXBlci1yZWQtNDAwOiAjZWY1MzUwOwogICAgICAtLXBhcGVyLXJlZC01MDA6ICNmNDQzMzY7CiAgICAgIC0tcGFwZXItcmVkLTYwMDogI2U1MzkzNTsKICAgICAgLS1wYXBlci1yZWQtNzAwOiAjZDMyZjJmOwogICAgICAtLXBhcGVyLXJlZC04MDA6ICNjNjI4Mjg7CiAgICAgIC0tcGFwZXItcmVkLTkwMDogI2I3MWMxYzsKICAgICAgLS1wYXBlci1yZWQtYTEwMDogI2ZmOGE4MDsKICAgICAgLS1wYXBlci1yZWQtYTIwMDogI2ZmNTI1MjsKICAgICAgLS1wYXBlci1yZWQtYTQwMDogI2ZmMTc0NDsKICAgICAgLS1wYXBlci1yZWQtYTcwMDogI2Q1MDAwMDsKCiAgICAgIC0tcGFwZXItcGluay01MDogI2ZjZTRlYzsKICAgICAgLS1wYXBlci1waW5rLTEwMDogI2Y4YmJkMDsKICAgICAgLS1wYXBlci1waW5rLTIwMDogI2Y0OGZiMTsKICAgICAgLS1wYXBlci1waW5rLTMwMDogI2YwNjI5MjsKICAgICAgLS1wYXBlci1waW5rLTQwMDogI2VjNDA3YTsKICAgICAgLS1wYXBlci1waW5rLTUwMDogI2U5MWU2MzsKICAgICAgLS1wYXBlci1waW5rLTYwMDogI2Q4MWI2MDsKICAgICAgLS1wYXBlci1waW5rLTcwMDogI2MyMTg1YjsKICAgICAgLS1wYXBlci1waW5rLTgwMDogI2FkMTQ1NzsKICAgICAgLS1wYXBlci1waW5rLTkwMDogIzg4MGU0ZjsKICAgICAgLS1wYXBlci1waW5rLWExMDA6ICNmZjgwYWI7CiAgICAgIC0tcGFwZXItcGluay1hMjAwOiAjZmY0MDgxOwogICAgICAtLXBhcGVyLXBpbmstYTQwMDogI2Y1MDA1NzsKICAgICAgLS1wYXBlci1waW5rLWE3MDA6ICNjNTExNjI7CgogICAgICAtLXBhcGVyLXB1cnBsZS01MDogI2YzZTVmNTsKICAgICAgLS1wYXBlci1wdXJwbGUtMTAwOiAjZTFiZWU3OwogICAgICAtLXBhcGVyLXB1cnBsZS0yMDA6ICNjZTkzZDg7CiAgICAgIC0tcGFwZXItcHVycGxlLTMwMDogI2JhNjhjODsKICAgICAgLS1wYXBlci1wdXJwbGUtNDAwOiAjYWI0N2JjOwogICAgICAtLXBhcGVyLXB1cnBsZS01MDA6ICM5YzI3YjA7CiAgICAgIC0tcGFwZXItcHVycGxlLTYwMDogIzhlMjRhYTsKICAgICAgLS1wYXBlci1wdXJwbGUtNzAwOiAjN2IxZmEyOwogICAgICAtLXBhcGVyLXB1cnBsZS04MDA6ICM2YTFiOWE7CiAgICAgIC0tcGFwZXItcHVycGxlLTkwMDogIzRhMTQ4YzsKICAgICAgLS1wYXBlci1wdXJwbGUtYTEwMDogI2VhODBmYzsKICAgICAgLS1wYXBlci1wdXJwbGUtYTIwMDogI2UwNDBmYjsKICAgICAgLS1wYXBlci1wdXJwbGUtYTQwMDogI2Q1MDBmOTsKICAgICAgLS1wYXBlci1wdXJwbGUtYTcwMDogI2FhMDBmZjsKCiAgICAgIC0tcGFwZXItZGVlcC1wdXJwbGUtNTA6ICNlZGU3ZjY7CiAgICAgIC0tcGFwZXItZGVlcC1wdXJwbGUtMTAwOiAjZDFjNGU5OwogICAgICAtLXBhcGVyLWRlZXAtcHVycGxlLTIwMDogI2IzOWRkYjsKICAgICAgLS1wYXBlci1kZWVwLXB1cnBsZS0zMDA6ICM5NTc1Y2Q7CiAgICAgIC0tcGFwZXItZGVlcC1wdXJwbGUtNDAwOiAjN2U1N2MyOwogICAgICAtLXBhcGVyLWRlZXAtcHVycGxlLTUwMDogIzY3M2FiNzsKICAgICAgLS1wYXBlci1kZWVwLXB1cnBsZS02MDA6ICM1ZTM1YjE7CiAgICAgIC0tcGFwZXItZGVlcC1wdXJwbGUtNzAwOiAjNTEyZGE4OwogICAgICAtLXBhcGVyLWRlZXAtcHVycGxlLTgwMDogIzQ1MjdhMDsKICAgICAgLS1wYXBlci1kZWVwLXB1cnBsZS05MDA6ICMzMTFiOTI7CiAgICAgIC0tcGFwZXItZGVlcC1wdXJwbGUtYTEwMDogI2IzODhmZjsKICAgICAgLS1wYXBlci1kZWVwLXB1cnBsZS1hMjAwOiAjN2M0ZGZmOwogICAgICAtLXBhcGVyLWRlZXAtcHVycGxlLWE0MDA6ICM2NTFmZmY7CiAgICAgIC0tcGFwZXItZGVlcC1wdXJwbGUtYTcwMDogIzYyMDBlYTsKCiAgICAgIC0tcGFwZXItaW5kaWdvLTUwOiAjZThlYWY2OwogICAgICAtLXBhcGVyLWluZGlnby0xMDA6ICNjNWNhZTk7CiAgICAgIC0tcGFwZXItaW5kaWdvLTIwMDogIzlmYThkYTsKICAgICAgLS1wYXBlci1pbmRpZ28tMzAwOiAjNzk4NmNiOwogICAgICAtLXBhcGVyLWluZGlnby00MDA6ICM1YzZiYzA7CiAgICAgIC0tcGFwZXItaW5kaWdvLTUwMDogIzNmNTFiNTsKICAgICAgLS1wYXBlci1pbmRpZ28tNjAwOiAjMzk0OWFiOwogICAgICAtLXBhcGVyLWluZGlnby03MDA6ICMzMDNmOWY7CiAgICAgIC0tcGFwZXItaW5kaWdvLTgwMDogIzI4MzU5MzsKICAgICAgLS1wYXBlci1pbmRpZ28tOTAwOiAjMWEyMzdlOwogICAgICAtLXBhcGVyLWluZGlnby1hMTAwOiAjOGM5ZWZmOwogICAgICAtLXBhcGVyLWluZGlnby1hMjAwOiAjNTM2ZGZlOwogICAgICAtLXBhcGVyLWluZGlnby1hNDAwOiAjM2Q1YWZlOwogICAgICAtLXBhcGVyLWluZGlnby1hNzAwOiAjMzA0ZmZlOwoKICAgICAgLS1wYXBlci1ibHVlLTUwOiAjZTNmMmZkOwogICAgICAtLXBhcGVyLWJsdWUtMTAwOiAjYmJkZWZiOwogICAgICAtLXBhcGVyLWJsdWUtMjAwOiAjOTBjYWY5OwogICAgICAtLXBhcGVyLWJsdWUtMzAwOiAjNjRiNWY2OwogICAgICAtLXBhcGVyLWJsdWUtNDAwOiAjNDJhNWY1OwogICAgICAtLXBhcGVyLWJsdWUtNTAwOiAjMjE5NmYzOwogICAgICAtLXBhcGVyLWJsdWUtNjAwOiAjMWU4OGU1OwogICAgICAtLXBhcGVyLWJsdWUtNzAwOiAjMTk3NmQyOwogICAgICAtLXBhcGVyLWJsdWUtODAwOiAjMTU2NWMwOwogICAgICAtLXBhcGVyLWJsdWUtOTAwOiAjMGQ0N2ExOwogICAgICAtLXBhcGVyLWJsdWUtYTEwMDogIzgyYjFmZjsKICAgICAgLS1wYXBlci1ibHVlLWEyMDA6ICM0NDhhZmY7CiAgICAgIC0tcGFwZXItYmx1ZS1hNDAwOiAjMjk3OWZmOwogICAgICAtLXBhcGVyLWJsdWUtYTcwMDogIzI5NjJmZjsKCiAgICAgIC0tcGFwZXItbGlnaHQtYmx1ZS01MDogI2UxZjVmZTsKICAgICAgLS1wYXBlci1saWdodC1ibHVlLTEwMDogI2IzZTVmYzsKICAgICAgLS1wYXBlci1saWdodC1ibHVlLTIwMDogIzgxZDRmYTsKICAgICAgLS1wYXBlci1saWdodC1ibHVlLTMwMDogIzRmYzNmNzsKICAgICAgLS1wYXBlci1saWdodC1ibHVlLTQwMDogIzI5YjZmNjsKICAgICAgLS1wYXBlci1saWdodC1ibHVlLTUwMDogIzAzYTlmNDsKICAgICAgLS1wYXBlci1saWdodC1ibHVlLTYwMDogIzAzOWJlNTsKICAgICAgLS1wYXBlci1saWdodC1ibHVlLTcwMDogIzAyODhkMTsKICAgICAgLS1wYXBlci1saWdodC1ibHVlLTgwMDogIzAyNzdiZDsKICAgICAgLS1wYXBlci1saWdodC1ibHVlLTkwMDogIzAxNTc5YjsKICAgICAgLS1wYXBlci1saWdodC1ibHVlLWExMDA6ICM4MGQ4ZmY7CiAgICAgIC0tcGFwZXItbGlnaHQtYmx1ZS1hMjAwOiAjNDBjNGZmOwogICAgICAtLXBhcGVyLWxpZ2h0LWJsdWUtYTQwMDogIzAwYjBmZjsKICAgICAgLS1wYXBlci1saWdodC1ibHVlLWE3MDA6ICMwMDkxZWE7CgogICAgICAtLXBhcGVyLWN5YW4tNTA6ICNlMGY3ZmE7CiAgICAgIC0tcGFwZXItY3lhbi0xMDA6ICNiMmViZjI7CiAgICAgIC0tcGFwZXItY3lhbi0yMDA6ICM4MGRlZWE7CiAgICAgIC0tcGFwZXItY3lhbi0zMDA6ICM0ZGQwZTE7CiAgICAgIC0tcGFwZXItY3lhbi00MDA6ICMyNmM2ZGE7CiAgICAgIC0tcGFwZXItY3lhbi01MDA6ICMwMGJjZDQ7CiAgICAgIC0tcGFwZXItY3lhbi02MDA6ICMwMGFjYzE7CiAgICAgIC0tcGFwZXItY3lhbi03MDA6ICMwMDk3YTc7CiAgICAgIC0tcGFwZXItY3lhbi04MDA6ICMwMDgzOGY7CiAgICAgIC0tcGFwZXItY3lhbi05MDA6ICMwMDYwNjQ7CiAgICAgIC0tcGFwZXItY3lhbi1hMTAwOiAjODRmZmZmOwogICAgICAtLXBhcGVyLWN5YW4tYTIwMDogIzE4ZmZmZjsKICAgICAgLS1wYXBlci1jeWFuLWE0MDA6ICMwMGU1ZmY7CiAgICAgIC0tcGFwZXItY3lhbi1hNzAwOiAjMDBiOGQ0OwoKICAgICAgLS1wYXBlci10ZWFsLTUwOiAjZTBmMmYxOwogICAgICAtLXBhcGVyLXRlYWwtMTAwOiAjYjJkZmRiOwogICAgICAtLXBhcGVyLXRlYWwtMjAwOiAjODBjYmM0OwogICAgICAtLXBhcGVyLXRlYWwtMzAwOiAjNGRiNmFjOwogICAgICAtLXBhcGVyLXRlYWwtNDAwOiAjMjZhNjlhOwogICAgICAtLXBhcGVyLXRlYWwtNTAwOiAjMDA5Njg4OwogICAgICAtLXBhcGVyLXRlYWwtNjAwOiAjMDA4OTdiOwogICAgICAtLXBhcGVyLXRlYWwtNzAwOiAjMDA3OTZiOwogICAgICAtLXBhcGVyLXRlYWwtODAwOiAjMDA2OTVjOwogICAgICAtLXBhcGVyLXRlYWwtOTAwOiAjMDA0ZDQwOwogICAgICAtLXBhcGVyLXRlYWwtYTEwMDogI2E3ZmZlYjsKICAgICAgLS1wYXBlci10ZWFsLWEyMDA6ICM2NGZmZGE7CiAgICAgIC0tcGFwZXItdGVhbC1hNDAwOiAjMWRlOWI2OwogICAgICAtLXBhcGVyLXRlYWwtYTcwMDogIzAwYmZhNTsKCiAgICAgIC0tcGFwZXItZ3JlZW4tNTA6ICNlOGY1ZTk7CiAgICAgIC0tcGFwZXItZ3JlZW4tMTAwOiAjYzhlNmM5OwogICAgICAtLXBhcGVyLWdyZWVuLTIwMDogI2E1ZDZhNzsKICAgICAgLS1wYXBlci1ncmVlbi0zMDA6ICM4MWM3ODQ7CiAgICAgIC0tcGFwZXItZ3JlZW4tNDAwOiAjNjZiYjZhOwogICAgICAtLXBhcGVyLWdyZWVuLTUwMDogIzRjYWY1MDsKICAgICAgLS1wYXBlci1ncmVlbi02MDA6ICM0M2EwNDc7CiAgICAgIC0tcGFwZXItZ3JlZW4tNzAwOiAjMzg4ZTNjOwogICAgICAtLXBhcGVyLWdyZWVuLTgwMDogIzJlN2QzMjsKICAgICAgLS1wYXBlci1ncmVlbi05MDA6ICMxYjVlMjA7CiAgICAgIC0tcGFwZXItZ3JlZW4tYTEwMDogI2I5ZjZjYTsKICAgICAgLS1wYXBlci1ncmVlbi1hMjAwOiAjNjlmMGFlOwogICAgICAtLXBhcGVyLWdyZWVuLWE0MDA6ICMwMGU2NzY7CiAgICAgIC0tcGFwZXItZ3JlZW4tYTcwMDogIzAwYzg1MzsKCiAgICAgIC0tcGFwZXItbGlnaHQtZ3JlZW4tNTA6ICNmMWY4ZTk7CiAgICAgIC0tcGFwZXItbGlnaHQtZ3JlZW4tMTAwOiAjZGNlZGM4OwogICAgICAtLXBhcGVyLWxpZ2h0LWdyZWVuLTIwMDogI2M1ZTFhNTsKICAgICAgLS1wYXBlci1saWdodC1ncmVlbi0zMDA6ICNhZWQ1ODE7CiAgICAgIC0tcGFwZXItbGlnaHQtZ3JlZW4tNDAwOiAjOWNjYzY1OwogICAgICAtLXBhcGVyLWxpZ2h0LWdyZWVuLTUwMDogIzhiYzM0YTsKICAgICAgLS1wYXBlci1saWdodC1ncmVlbi02MDA6ICM3Y2IzNDI7CiAgICAgIC0tcGFwZXItbGlnaHQtZ3JlZW4tNzAwOiAjNjg5ZjM4OwogICAgICAtLXBhcGVyLWxpZ2h0LWdyZWVuLTgwMDogIzU1OGIyZjsKICAgICAgLS1wYXBlci1saWdodC1ncmVlbi05MDA6ICMzMzY5MWU7CiAgICAgIC0tcGFwZXItbGlnaHQtZ3JlZW4tYTEwMDogI2NjZmY5MDsKICAgICAgLS1wYXBlci1saWdodC1ncmVlbi1hMjAwOiAjYjJmZjU5OwogICAgICAtLXBhcGVyLWxpZ2h0LWdyZWVuLWE0MDA6ICM3NmZmMDM7CiAgICAgIC0tcGFwZXItbGlnaHQtZ3JlZW4tYTcwMDogIzY0ZGQxNzsKCiAgICAgIC0tcGFwZXItbGltZS01MDogI2Y5ZmJlNzsKICAgICAgLS1wYXBlci1saW1lLTEwMDogI2YwZjRjMzsKICAgICAgLS1wYXBlci1saW1lLTIwMDogI2U2ZWU5YzsKICAgICAgLS1wYXBlci1saW1lLTMwMDogI2RjZTc3NTsKICAgICAgLS1wYXBlci1saW1lLTQwMDogI2Q0ZTE1NzsKICAgICAgLS1wYXBlci1saW1lLTUwMDogI2NkZGMzOTsKICAgICAgLS1wYXBlci1saW1lLTYwMDogI2MwY2EzMzsKICAgICAgLS1wYXBlci1saW1lLTcwMDogI2FmYjQyYjsKICAgICAgLS1wYXBlci1saW1lLTgwMDogIzllOWQyNDsKICAgICAgLS1wYXBlci1saW1lLTkwMDogIzgyNzcxNzsKICAgICAgLS1wYXBlci1saW1lLWExMDA6ICNmNGZmODE7CiAgICAgIC0tcGFwZXItbGltZS1hMjAwOiAjZWVmZjQxOwogICAgICAtLXBhcGVyLWxpbWUtYTQwMDogI2M2ZmYwMDsKICAgICAgLS1wYXBlci1saW1lLWE3MDA6ICNhZWVhMDA7CgogICAgICAtLXBhcGVyLXllbGxvdy01MDogI2ZmZmRlNzsKICAgICAgLS1wYXBlci15ZWxsb3ctMTAwOiAjZmZmOWM0OwogICAgICAtLXBhcGVyLXllbGxvdy0yMDA6ICNmZmY1OWQ7CiAgICAgIC0tcGFwZXIteWVsbG93LTMwMDogI2ZmZjE3NjsKICAgICAgLS1wYXBlci15ZWxsb3ctNDAwOiAjZmZlZTU4OwogICAgICAtLXBhcGVyLXllbGxvdy01MDA6ICNmZmViM2I7CiAgICAgIC0tcGFwZXIteWVsbG93LTYwMDogI2ZkZDgzNTsKICAgICAgLS1wYXBlci15ZWxsb3ctNzAwOiAjZmJjMDJkOwogICAgICAtLXBhcGVyLXllbGxvdy04MDA6ICNmOWE4MjU7CiAgICAgIC0tcGFwZXIteWVsbG93LTkwMDogI2Y1N2YxNzsKICAgICAgLS1wYXBlci15ZWxsb3ctYTEwMDogI2ZmZmY4ZDsKICAgICAgLS1wYXBlci15ZWxsb3ctYTIwMDogI2ZmZmYwMDsKICAgICAgLS1wYXBlci15ZWxsb3ctYTQwMDogI2ZmZWEwMDsKICAgICAgLS1wYXBlci15ZWxsb3ctYTcwMDogI2ZmZDYwMDsKCiAgICAgIC0tcGFwZXItYW1iZXItNTA6ICNmZmY4ZTE7CiAgICAgIC0tcGFwZXItYW1iZXItMTAwOiAjZmZlY2IzOwogICAgICAtLXBhcGVyLWFtYmVyLTIwMDogI2ZmZTA4MjsKICAgICAgLS1wYXBlci1hbWJlci0zMDA6ICNmZmQ1NGY7CiAgICAgIC0tcGFwZXItYW1iZXItNDAwOiAjZmZjYTI4OwogICAgICAtLXBhcGVyLWFtYmVyLTUwMDogI2ZmYzEwNzsKICAgICAgLS1wYXBlci1hbWJlci02MDA6ICNmZmIzMDA7CiAgICAgIC0tcGFwZXItYW1iZXItNzAwOiAjZmZhMDAwOwogICAgICAtLXBhcGVyLWFtYmVyLTgwMDogI2ZmOGYwMDsKICAgICAgLS1wYXBlci1hbWJlci05MDA6ICNmZjZmMDA7CiAgICAgIC0tcGFwZXItYW1iZXItYTEwMDogI2ZmZTU3ZjsKICAgICAgLS1wYXBlci1hbWJlci1hMjAwOiAjZmZkNzQwOwogICAgICAtLXBhcGVyLWFtYmVyLWE0MDA6ICNmZmM0MDA7CiAgICAgIC0tcGFwZXItYW1iZXItYTcwMDogI2ZmYWIwMDsKCiAgICAgIC0tcGFwZXItb3JhbmdlLTUwOiAjZmZmM2UwOwogICAgICAtLXBhcGVyLW9yYW5nZS0xMDA6ICNmZmUwYjI7CiAgICAgIC0tcGFwZXItb3JhbmdlLTIwMDogI2ZmY2M4MDsKICAgICAgLS1wYXBlci1vcmFuZ2UtMzAwOiAjZmZiNzRkOwogICAgICAtLXBhcGVyLW9yYW5nZS00MDA6ICNmZmE3MjY7CiAgICAgIC0tcGFwZXItb3JhbmdlLTUwMDogI2ZmOTgwMDsKICAgICAgLS1wYXBlci1vcmFuZ2UtNjAwOiAjZmI4YzAwOwogICAgICAtLXBhcGVyLW9yYW5nZS03MDA6ICNmNTdjMDA7CiAgICAgIC0tcGFwZXItb3JhbmdlLTgwMDogI2VmNmMwMDsKICAgICAgLS1wYXBlci1vcmFuZ2UtOTAwOiAjZTY1MTAwOwogICAgICAtLXBhcGVyLW9yYW5nZS1hMTAwOiAjZmZkMTgwOwogICAgICAtLXBhcGVyLW9yYW5nZS1hMjAwOiAjZmZhYjQwOwogICAgICAtLXBhcGVyLW9yYW5nZS1hNDAwOiAjZmY5MTAwOwogICAgICAtLXBhcGVyLW9yYW5nZS1hNzAwOiAjZmY2NTAwOwoKICAgICAgLS1wYXBlci1kZWVwLW9yYW5nZS01MDogI2ZiZTllNzsKICAgICAgLS1wYXBlci1kZWVwLW9yYW5nZS0xMDA6ICNmZmNjYmM7CiAgICAgIC0tcGFwZXItZGVlcC1vcmFuZ2UtMjAwOiAjZmZhYjkxOwogICAgICAtLXBhcGVyLWRlZXAtb3JhbmdlLTMwMDogI2ZmOGE2NTsKICAgICAgLS1wYXBlci1kZWVwLW9yYW5nZS00MDA6ICNmZjcwNDM7CiAgICAgIC0tcGFwZXItZGVlcC1vcmFuZ2UtNTAwOiAjZmY1NzIyOwogICAgICAtLXBhcGVyLWRlZXAtb3JhbmdlLTYwMDogI2Y0NTExZTsKICAgICAgLS1wYXBlci1kZWVwLW9yYW5nZS03MDA6ICNlNjRhMTk7CiAgICAgIC0tcGFwZXItZGVlcC1vcmFuZ2UtODAwOiAjZDg0MzE1OwogICAgICAtLXBhcGVyLWRlZXAtb3JhbmdlLTkwMDogI2JmMzYwYzsKICAgICAgLS1wYXBlci1kZWVwLW9yYW5nZS1hMTAwOiAjZmY5ZTgwOwogICAgICAtLXBhcGVyLWRlZXAtb3JhbmdlLWEyMDA6ICNmZjZlNDA7CiAgICAgIC0tcGFwZXItZGVlcC1vcmFuZ2UtYTQwMDogI2ZmM2QwMDsKICAgICAgLS1wYXBlci1kZWVwLW9yYW5nZS1hNzAwOiAjZGQyYzAwOwoKICAgICAgLS1wYXBlci1icm93bi01MDogI2VmZWJlOTsKICAgICAgLS1wYXBlci1icm93bi0xMDA6ICNkN2NjYzg7CiAgICAgIC0tcGFwZXItYnJvd24tMjAwOiAjYmNhYWE0OwogICAgICAtLXBhcGVyLWJyb3duLTMwMDogI2ExODg3ZjsKICAgICAgLS1wYXBlci1icm93bi00MDA6ICM4ZDZlNjM7CiAgICAgIC0tcGFwZXItYnJvd24tNTAwOiAjNzk1NTQ4OwogICAgICAtLXBhcGVyLWJyb3duLTYwMDogIzZkNGM0MTsKICAgICAgLS1wYXBlci1icm93bi03MDA6ICM1ZDQwMzc7CiAgICAgIC0tcGFwZXItYnJvd24tODAwOiAjNGUzNDJlOwogICAgICAtLXBhcGVyLWJyb3duLTkwMDogIzNlMjcyMzsKCiAgICAgIC0tcGFwZXItZ3JleS01MDogI2ZhZmFmYTsKICAgICAgLS1wYXBlci1ncmV5LTEwMDogI2Y1ZjVmNTsKICAgICAgLS1wYXBlci1ncmV5LTIwMDogI2VlZWVlZTsKICAgICAgLS1wYXBlci1ncmV5LTMwMDogI2UwZTBlMDsKICAgICAgLS1wYXBlci1ncmV5LTQwMDogI2JkYmRiZDsKICAgICAgLS1wYXBlci1ncmV5LTUwMDogIzllOWU5ZTsKICAgICAgLS1wYXBlci1ncmV5LTYwMDogIzc1NzU3NTsKICAgICAgLS1wYXBlci1ncmV5LTcwMDogIzYxNjE2MTsKICAgICAgLS1wYXBlci1ncmV5LTgwMDogIzQyNDI0MjsKICAgICAgLS1wYXBlci1ncmV5LTkwMDogIzIxMjEyMTsKCiAgICAgIC0tcGFwZXItYmx1ZS1ncmV5LTUwOiAjZWNlZmYxOwogICAgICAtLXBhcGVyLWJsdWUtZ3JleS0xMDA6ICNjZmQ4ZGM7CiAgICAgIC0tcGFwZXItYmx1ZS1ncmV5LTIwMDogI2IwYmVjNTsKICAgICAgLS1wYXBlci1ibHVlLWdyZXktMzAwOiAjOTBhNGFlOwogICAgICAtLXBhcGVyLWJsdWUtZ3JleS00MDA6ICM3ODkwOWM7CiAgICAgIC0tcGFwZXItYmx1ZS1ncmV5LTUwMDogIzYwN2Q4YjsKICAgICAgLS1wYXBlci1ibHVlLWdyZXktNjAwOiAjNTQ2ZTdhOwogICAgICAtLXBhcGVyLWJsdWUtZ3JleS03MDA6ICM0NTVhNjQ7CiAgICAgIC0tcGFwZXItYmx1ZS1ncmV5LTgwMDogIzM3NDc0ZjsKICAgICAgLS1wYXBlci1ibHVlLWdyZXktOTAwOiAjMjYzMjM4OwoKICAgICAgLyogb3BhY2l0eSBmb3IgZGFyayB0ZXh0IG9uIGEgbGlnaHQgYmFja2dyb3VuZCAqLwogICAgICAtLWRhcmstZGl2aWRlci1vcGFjaXR5OiAwLjEyOwogICAgICAtLWRhcmstZGlzYWJsZWQtb3BhY2l0eTogMC4zODsgLyogb3IgaGludCB0ZXh0IG9yIGljb24gKi8KICAgICAgLS1kYXJrLXNlY29uZGFyeS1vcGFjaXR5OiAwLjU0OwogICAgICAtLWRhcmstcHJpbWFyeS1vcGFjaXR5OiAwLjg3OwoKICAgICAgLyogb3BhY2l0eSBmb3IgbGlnaHQgdGV4dCBvbiBhIGRhcmsgYmFja2dyb3VuZCAqLwogICAgICAtLWxpZ2h0LWRpdmlkZXItb3BhY2l0eTogMC4xMjsKICAgICAgLS1saWdodC1kaXNhYmxlZC1vcGFjaXR5OiAwLjM7IC8qIG9yIGhpbnQgdGV4dCBvciBpY29uICovCiAgICAgIC0tbGlnaHQtc2Vjb25kYXJ5LW9wYWNpdHk6IDAuNzsKICAgICAgLS1saWdodC1wcmltYXJ5LW9wYWNpdHk6IDEuMDsKCiAgICB9CgogIDwvc3R5bGU+CjwvY3VzdG9tLXN0eWxlPgoKCgoKPGN1c3RvbS1zdHlsZT4KICA8c3R5bGUgaXM9ImN1c3RvbS1zdHlsZSI+CiAgICBodG1sIHsKICAgICAgLyoKICAgICAgICogWW91IGNhbiB1c2UgdGhlc2UgZ2VuZXJpYyB2YXJpYWJsZXMgaW4geW91ciBlbGVtZW50cyBmb3IgZWFzeSB0aGVtaW5nLgogICAgICAgKiBGb3IgZXhhbXBsZSwgaWYgYWxsIHlvdXIgZWxlbWVudHMgdXNlIGAtLXByaW1hcnktdGV4dC1jb2xvcmAgYXMgaXRzIG1haW4KICAgICAgICogY29sb3IsIHRoZW4gc3dpdGNoaW5nIGZyb20gYSBsaWdodCB0byBhIGRhcmsgdGhlbWUgaXMganVzdCBhIG1hdHRlciBvZgogICAgICAgKiBjaGFuZ2luZyB0aGUgdmFsdWUgb2YgYC0tcHJpbWFyeS10ZXh0LWNvbG9yYCBpbiB5b3VyIGFwcGxpY2F0aW9uLgogICAgICAgKi8KICAgICAgLS1wcmltYXJ5LXRleHQtY29sb3I6IHZhcigtLWxpZ2h0LXRoZW1lLXRleHQtY29sb3IpOwogICAgICAtLXByaW1hcnktYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbGlnaHQtdGhlbWUtYmFja2dyb3VuZC1jb2xvcik7CiAgICAgIC0tc2Vjb25kYXJ5LXRleHQtY29sb3I6IHZhcigtLWxpZ2h0LXRoZW1lLXNlY29uZGFyeS1jb2xvcik7CiAgICAgIC0tZGlzYWJsZWQtdGV4dC1jb2xvcjogdmFyKC0tbGlnaHQtdGhlbWUtZGlzYWJsZWQtY29sb3IpOwogICAgICAtLWRpdmlkZXItY29sb3I6IHZhcigtLWxpZ2h0LXRoZW1lLWRpdmlkZXItY29sb3IpOwogICAgICAtLWVycm9yLWNvbG9yOiB2YXIoLS1wYXBlci1kZWVwLW9yYW5nZS1hNzAwKTsKCiAgICAgIC8qCiAgICAgICAqIFByaW1hcnkgYW5kIGFjY2VudCBjb2xvcnMuIEFsc28gc2VlIGNvbG9yLmh0bWwgZm9yIG1vcmUgY29sb3JzLgogICAgICAgKi8KICAgICAgLS1wcmltYXJ5LWNvbG9yOiB2YXIoLS1wYXBlci1pbmRpZ28tNTAwKTsKICAgICAgLS1saWdodC1wcmltYXJ5LWNvbG9yOiB2YXIoLS1wYXBlci1pbmRpZ28tMTAwKTsKICAgICAgLS1kYXJrLXByaW1hcnktY29sb3I6IHZhcigtLXBhcGVyLWluZGlnby03MDApOwoKICAgICAgLS1hY2NlbnQtY29sb3I6IHZhcigtLXBhcGVyLXBpbmstYTIwMCk7CiAgICAgIC0tbGlnaHQtYWNjZW50LWNvbG9yOiB2YXIoLS1wYXBlci1waW5rLWExMDApOwogICAgICAtLWRhcmstYWNjZW50LWNvbG9yOiB2YXIoLS1wYXBlci1waW5rLWE0MDApOwoKCiAgICAgIC8qCiAgICAgICAqIE1hdGVyaWFsIERlc2lnbiBMaWdodCBiYWNrZ3JvdW5kIHRoZW1lCiAgICAgICAqLwogICAgICAtLWxpZ2h0LXRoZW1lLWJhY2tncm91bmQtY29sb3I6ICNmZmZmZmY7CiAgICAgIC0tbGlnaHQtdGhlbWUtYmFzZS1jb2xvcjogIzAwMDAwMDsKICAgICAgLS1saWdodC10aGVtZS10ZXh0LWNvbG9yOiB2YXIoLS1wYXBlci1ncmV5LTkwMCk7CiAgICAgIC0tbGlnaHQtdGhlbWUtc2Vjb25kYXJ5LWNvbG9yOiAjNzM3MzczOyAgLyogZm9yIHNlY29uZGFyeSB0ZXh0IGFuZCBpY29ucyAqLwogICAgICAtLWxpZ2h0LXRoZW1lLWRpc2FibGVkLWNvbG9yOiAjOWI5YjliOyAgLyogZGlzYWJsZWQvaGludCB0ZXh0ICovCiAgICAgIC0tbGlnaHQtdGhlbWUtZGl2aWRlci1jb2xvcjogI2RiZGJkYjsKCiAgICAgIC8qCiAgICAgICAqIE1hdGVyaWFsIERlc2lnbiBEYXJrIGJhY2tncm91bmQgdGhlbWUKICAgICAgICovCiAgICAgIC0tZGFyay10aGVtZS1iYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci1ncmV5LTkwMCk7CiAgICAgIC0tZGFyay10aGVtZS1iYXNlLWNvbG9yOiAjZmZmZmZmOwogICAgICAtLWRhcmstdGhlbWUtdGV4dC1jb2xvcjogI2ZmZmZmZjsKICAgICAgLS1kYXJrLXRoZW1lLXNlY29uZGFyeS1jb2xvcjogI2JjYmNiYzsgIC8qIGZvciBzZWNvbmRhcnkgdGV4dCBhbmQgaWNvbnMgKi8KICAgICAgLS1kYXJrLXRoZW1lLWRpc2FibGVkLWNvbG9yOiAjNjQ2NDY0OyAgLyogZGlzYWJsZWQvaGludCB0ZXh0ICovCiAgICAgIC0tZGFyay10aGVtZS1kaXZpZGVyLWNvbG9yOiAjM2MzYzNjOwoKICAgICAgLyoKICAgICAgICogRGVwcmVjYXRlZCB2YWx1ZXMgYmVjYXVzZSBvZiB0aGVpciBjb25mdXNpbmcgbmFtZXMuCiAgICAgICAqLwogICAgICAtLXRleHQtcHJpbWFyeS1jb2xvcjogdmFyKC0tZGFyay10aGVtZS10ZXh0LWNvbG9yKTsKICAgICAgLS1kZWZhdWx0LXByaW1hcnktY29sb3I6IHZhcigtLXByaW1hcnktY29sb3IpOwogICAgfQogIDwvc3R5bGU+CjwvY3VzdG9tLXN0eWxlPgoKCgoKCgoKCjxzY3JpcHQ+Ly9+fldFQlBBVEh+fi9pcm9uLW1ldGEvaXJvbi1tZXRhLmh0bWwuanMKKGZ1bmN0aW9uKCl7UG9seW1lci5Jcm9uTWV0YT1mdW5jdGlvbihjKXtQb2x5bWVyLklyb25NZXRhWyIgIl0oYyk7dGhpcy50eXBlPWMmJmMudHlwZXx8ImRlZmF1bHQiO3RoaXMua2V5PWMmJmMua2V5O2MmJiJ2YWx1ZSJpbiBjJiYodGhpcy52YWx1ZT1jLnZhbHVlKX07UG9seW1lci5Jcm9uTWV0YVsiICJdPWZ1bmN0aW9uKCl7fTtQb2x5bWVyLklyb25NZXRhLnR5cGVzPXt9O1BvbHltZXIuSXJvbk1ldGEucHJvdG90eXBlPXtnZXQgdmFsdWUoKXt2YXIgYz10aGlzLnR5cGUsZD10aGlzLmtleTtpZihjJiZkKXJldHVybiBQb2x5bWVyLklyb25NZXRhLnR5cGVzW2NdJiZQb2x5bWVyLklyb25NZXRhLnR5cGVzW2NdW2RdfSxzZXQgdmFsdWUoYyl7dmFyIGQ9dGhpcy50eXBlLGY9dGhpcy5rZXk7ZCYmZiYmKGQ9UG9seW1lci5Jcm9uTWV0YS50eXBlc1tkXT1Qb2x5bWVyLklyb25NZXRhLnR5cGVzW2RdfHx7fSxudWxsPT1jP2RlbGV0ZSBkW2ZdOmRbZl09Yyl9LGdldCBsaXN0KCl7aWYodGhpcy50eXBlKXt2YXIgYz0KUG9seW1lci5Jcm9uTWV0YS50eXBlc1t0aGlzLnR5cGVdO3JldHVybiBjP09iamVjdC5rZXlzKGMpLm1hcChmdW5jdGlvbihkKXtyZXR1cm4gYVt0aGlzLnR5cGVdW2RdfSx0aGlzKTpbXX19LGJ5S2V5OmZ1bmN0aW9uKGMpe3RoaXMua2V5PWM7cmV0dXJuIHRoaXMudmFsdWV9fTt2YXIgYT1Qb2x5bWVyLklyb25NZXRhLnR5cGVzO1BvbHltZXIoe2lzOiJpcm9uLW1ldGEiLHByb3BlcnRpZXM6e3R5cGU6e3R5cGU6U3RyaW5nLHZhbHVlOiJkZWZhdWx0In0sa2V5Ont0eXBlOlN0cmluZ30sdmFsdWU6e3R5cGU6U3RyaW5nLG5vdGlmeTohMH0sc2VsZjp7dHlwZTpCb29sZWFuLG9ic2VydmVyOiJfc2VsZkNoYW5nZWQifSxfX21ldGE6e3R5cGU6Qm9vbGVhbixjb21wdXRlZDoiX19jb21wdXRlTWV0YSh0eXBlLCBrZXksIHZhbHVlKSJ9fSxob3N0QXR0cmlidXRlczp7aGlkZGVuOiEwfSxfX2NvbXB1dGVNZXRhOmZ1bmN0aW9uKGMsZCxmKXtjPW5ldyBQb2x5bWVyLklyb25NZXRhKHt0eXBlOmMsCmtleTpkfSk7dm9pZCAwIT09ZiYmZiE9PWMudmFsdWU/Yy52YWx1ZT1mOnRoaXMudmFsdWUhPT1jLnZhbHVlJiYodGhpcy52YWx1ZT1jLnZhbHVlKTtyZXR1cm4gY30sZ2V0IGxpc3QoKXtyZXR1cm4gdGhpcy5fX21ldGEmJnRoaXMuX19tZXRhLmxpc3R9LF9zZWxmQ2hhbmdlZDpmdW5jdGlvbihjKXtjJiYodGhpcy52YWx1ZT10aGlzKX0sYnlLZXk6ZnVuY3Rpb24oYyl7cmV0dXJuKG5ldyBQb2x5bWVyLklyb25NZXRhKHt0eXBlOnRoaXMudHlwZSxrZXk6Y30pKS52YWx1ZX19KX0pKCk7Cjwvc2NyaXB0PgoKCjxzY3JpcHQ+Ly9+fldFQlBBVEh+fi9pcm9uLXZhbGlkYXRhYmxlLWJlaGF2aW9yL2lyb24tdmFsaWRhdGFibGUtYmVoYXZpb3IuaHRtbC5qcwpQb2x5bWVyLklyb25WYWxpZGF0YWJsZUJlaGF2aW9yTWV0YT1udWxsOwpQb2x5bWVyLklyb25WYWxpZGF0YWJsZUJlaGF2aW9yPXtwcm9wZXJ0aWVzOnt2YWxpZGF0b3I6e3R5cGU6U3RyaW5nfSxpbnZhbGlkOntub3RpZnk6ITAscmVmbGVjdFRvQXR0cmlidXRlOiEwLHR5cGU6Qm9vbGVhbix2YWx1ZTohMSxvYnNlcnZlcjoiX2ludmFsaWRDaGFuZ2VkIn19LHJlZ2lzdGVyZWQ6ZnVuY3Rpb24oKXtQb2x5bWVyLklyb25WYWxpZGF0YWJsZUJlaGF2aW9yTWV0YT1uZXcgUG9seW1lci5Jcm9uTWV0YSh7dHlwZToidmFsaWRhdG9yIn0pfSxfaW52YWxpZENoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLmludmFsaWQ/dGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtaW52YWxpZCIsInRydWUiKTp0aGlzLnJlbW92ZUF0dHJpYnV0ZSgiYXJpYS1pbnZhbGlkIil9LGdldCBfdmFsaWRhdG9yKCl7cmV0dXJuIFBvbHltZXIuSXJvblZhbGlkYXRhYmxlQmVoYXZpb3JNZXRhJiZQb2x5bWVyLklyb25WYWxpZGF0YWJsZUJlaGF2aW9yTWV0YS5ieUtleSh0aGlzLnZhbGlkYXRvcil9LGhhc1ZhbGlkYXRvcjpmdW5jdGlvbigpe3JldHVybiBudWxsIT0KdGhpcy5fdmFsaWRhdG9yfSx2YWxpZGF0ZTpmdW5jdGlvbihhKXt0aGlzLmludmFsaWQ9dm9pZCAwPT09YSYmdm9pZCAwIT09dGhpcy52YWx1ZT8hdGhpcy5fZ2V0VmFsaWRpdHkodGhpcy52YWx1ZSk6IXRoaXMuX2dldFZhbGlkaXR5KGEpO3JldHVybiF0aGlzLmludmFsaWR9LF9nZXRWYWxpZGl0eTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5oYXNWYWxpZGF0b3IoKT90aGlzLl92YWxpZGF0b3IudmFsaWRhdGUoYSk6ITB9fTsKPC9zY3JpcHQ+CgoKCjxzY3JpcHQ+Ly9+fldFQlBBVEh+fi9pcm9uLWZvcm0tZWxlbWVudC1iZWhhdmlvci9pcm9uLWZvcm0tZWxlbWVudC1iZWhhdmlvci5odG1sLmpzClBvbHltZXIuSXJvbkZvcm1FbGVtZW50QmVoYXZpb3I9e3Byb3BlcnRpZXM6e25hbWU6e3R5cGU6U3RyaW5nfSx2YWx1ZTp7bm90aWZ5OiEwLHR5cGU6U3RyaW5nfSxyZXF1aXJlZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxfcGFyZW50Rm9ybTp7dHlwZTpPYmplY3R9fSxhdHRhY2hlZDpmdW5jdGlvbigpe1BvbHltZXIuRWxlbWVudHx8dGhpcy5maXJlKCJpcm9uLWZvcm0tZWxlbWVudC1yZWdpc3RlciIpfSxkZXRhY2hlZDpmdW5jdGlvbigpeyFQb2x5bWVyLkVsZW1lbnQmJnRoaXMuX3BhcmVudEZvcm0mJnRoaXMuX3BhcmVudEZvcm0uZmlyZSgiaXJvbi1mb3JtLWVsZW1lbnQtdW5yZWdpc3RlciIse3RhcmdldDp0aGlzfSl9fTsKPC9zY3JpcHQ+CgoKPHNjcmlwdD4vL35+V0VCUEFUSH5+L2lyb24tY2hlY2tlZC1lbGVtZW50LWJlaGF2aW9yL2lyb24tY2hlY2tlZC1lbGVtZW50LWJlaGF2aW9yLmh0bWwuanMKUG9seW1lci5Jcm9uQ2hlY2tlZEVsZW1lbnRCZWhhdmlvckltcGw9e3Byb3BlcnRpZXM6e2NoZWNrZWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxyZWZsZWN0VG9BdHRyaWJ1dGU6ITAsbm90aWZ5OiEwLG9ic2VydmVyOiJfY2hlY2tlZENoYW5nZWQifSx0b2dnbGVzOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITAscmVmbGVjdFRvQXR0cmlidXRlOiEwfSx2YWx1ZTp7dHlwZTpTdHJpbmcsdmFsdWU6Im9uIixvYnNlcnZlcjoiX3ZhbHVlQ2hhbmdlZCJ9fSxvYnNlcnZlcnM6WyJfcmVxdWlyZWRDaGFuZ2VkKHJlcXVpcmVkKSJdLGNyZWF0ZWQ6ZnVuY3Rpb24oKXt0aGlzLl9oYXNJcm9uQ2hlY2tlZEVsZW1lbnRCZWhhdmlvcj0hMH0sX2dldFZhbGlkaXR5OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGlzYWJsZWR8fCF0aGlzLnJlcXVpcmVkfHx0aGlzLmNoZWNrZWR9LF9yZXF1aXJlZENoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLnJlcXVpcmVkP3RoaXMuc2V0QXR0cmlidXRlKCJhcmlhLXJlcXVpcmVkIiwKInRydWUiKTp0aGlzLnJlbW92ZUF0dHJpYnV0ZSgiYXJpYS1yZXF1aXJlZCIpfSxfY2hlY2tlZENoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLmFjdGl2ZT10aGlzLmNoZWNrZWQ7dGhpcy5maXJlKCJpcm9uLWNoYW5nZSIpfSxfdmFsdWVDaGFuZ2VkOmZ1bmN0aW9uKCl7aWYodm9pZCAwPT09dGhpcy52YWx1ZXx8bnVsbD09PXRoaXMudmFsdWUpdGhpcy52YWx1ZT0ib24ifX07UG9seW1lci5Jcm9uQ2hlY2tlZEVsZW1lbnRCZWhhdmlvcj1bUG9seW1lci5Jcm9uRm9ybUVsZW1lbnRCZWhhdmlvcixQb2x5bWVyLklyb25WYWxpZGF0YWJsZUJlaGF2aW9yLFBvbHltZXIuSXJvbkNoZWNrZWRFbGVtZW50QmVoYXZpb3JJbXBsXTsKPC9zY3JpcHQ+CgoKCgoKPHNjcmlwdD4vL35+V0VCUEFUSH5+L3BhcGVyLWJlaGF2aW9ycy9wYXBlci1pbmt5LWZvY3VzLWJlaGF2aW9yLmh0bWwuanMKUG9seW1lci5QYXBlcklua3lGb2N1c0JlaGF2aW9ySW1wbD17b2JzZXJ2ZXJzOlsiX2ZvY3VzZWRDaGFuZ2VkKHJlY2VpdmVkRm9jdXNGcm9tS2V5Ym9hcmQpIl0sX2ZvY3VzZWRDaGFuZ2VkOmZ1bmN0aW9uKGEpe2EmJnRoaXMuZW5zdXJlUmlwcGxlKCk7dGhpcy5oYXNSaXBwbGUoKSYmKHRoaXMuX3JpcHBsZS5ob2xkRG93bj1hKX0sX2NyZWF0ZVJpcHBsZTpmdW5jdGlvbigpe3ZhciBhPVBvbHltZXIuUGFwZXJSaXBwbGVCZWhhdmlvci5fY3JlYXRlUmlwcGxlKCk7YS5pZD0iaW5rIjthLnNldEF0dHJpYnV0ZSgiY2VudGVyIiwiIik7YS5jbGFzc0xpc3QuYWRkKCJjaXJjbGUiKTtyZXR1cm4gYX19O1BvbHltZXIuUGFwZXJJbmt5Rm9jdXNCZWhhdmlvcj1bUG9seW1lci5Jcm9uQnV0dG9uU3RhdGUsUG9seW1lci5Jcm9uQ29udHJvbFN0YXRlLFBvbHltZXIuUGFwZXJSaXBwbGVCZWhhdmlvcixQb2x5bWVyLlBhcGVySW5reUZvY3VzQmVoYXZpb3JJbXBsXTsKPC9zY3JpcHQ+CgoKPHNjcmlwdD4vL35+V0VCUEFUSH5+L3BhcGVyLWJlaGF2aW9ycy9wYXBlci1jaGVja2VkLWVsZW1lbnQtYmVoYXZpb3IuaHRtbC5qcwpQb2x5bWVyLlBhcGVyQ2hlY2tlZEVsZW1lbnRCZWhhdmlvckltcGw9e19jaGVja2VkQ2hhbmdlZDpmdW5jdGlvbigpe1BvbHltZXIuSXJvbkNoZWNrZWRFbGVtZW50QmVoYXZpb3JJbXBsLl9jaGVja2VkQ2hhbmdlZC5jYWxsKHRoaXMpO3RoaXMuaGFzUmlwcGxlKCkmJih0aGlzLmNoZWNrZWQ/dGhpcy5fcmlwcGxlLnNldEF0dHJpYnV0ZSgiY2hlY2tlZCIsIiIpOnRoaXMuX3JpcHBsZS5yZW1vdmVBdHRyaWJ1dGUoImNoZWNrZWQiKSl9LF9idXR0b25TdGF0ZUNoYW5nZWQ6ZnVuY3Rpb24oKXtQb2x5bWVyLlBhcGVyUmlwcGxlQmVoYXZpb3IuX2J1dHRvblN0YXRlQ2hhbmdlZC5jYWxsKHRoaXMpOyF0aGlzLmRpc2FibGVkJiZ0aGlzLmlzQXR0YWNoZWQmJih0aGlzLmNoZWNrZWQ9dGhpcy5hY3RpdmUpfX07ClBvbHltZXIuUGFwZXJDaGVja2VkRWxlbWVudEJlaGF2aW9yPVtQb2x5bWVyLlBhcGVySW5reUZvY3VzQmVoYXZpb3IsUG9seW1lci5Jcm9uQ2hlY2tlZEVsZW1lbnRCZWhhdmlvcixQb2x5bWVyLlBhcGVyQ2hlY2tlZEVsZW1lbnRCZWhhdmlvckltcGxdOwo8L3NjcmlwdD4KCgoKCjxkb20tbW9kdWxlIGlkPSJwYXBlci1jaGVja2JveCI+CiAgPHRlbXBsYXRlIHN0cmlwLXdoaXRlc3BhY2U+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgLS1jYWxjdWxhdGVkLXBhcGVyLWNoZWNrYm94LXNpemU6IHZhcigtLXBhcGVyLWNoZWNrYm94LXNpemUsIDE4cHgpOwogICAgICAgIC8qIC0xcHggaXMgYSBzZW50aW5lbCBmb3IgdGhlIGRlZmF1bHQgYW5kIGlzIHJlcGxhY2VkIGluIGBhdHRhY2hlZGAuICovCiAgICAgICAgLS1jYWxjdWxhdGVkLXBhcGVyLWNoZWNrYm94LWluay1zaXplOiB2YXIoLS1wYXBlci1jaGVja2JveC1pbmstc2l6ZSwgLTFweCk7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKICAgICAgICBsaW5lLWhlaWdodDogMDsKICAgICAgICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHRyYW5zcGFyZW50OwogICAgICB9CgogICAgICA6aG9zdChbaGlkZGVuXSkgewogICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgOmhvc3QoOmZvY3VzKSB7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgfQoKICAgICAgLmhpZGRlbiB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQoKICAgICAgI2NoZWNrYm94Q29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHdpZHRoOiB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLWNoZWNrYm94LXNpemUpOwogICAgICAgIGhlaWdodDogdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1jaGVja2JveC1zaXplKTsKICAgICAgICBtaW4td2lkdGg6IHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItY2hlY2tib3gtc2l6ZSk7CiAgICAgICAgbWFyZ2luOiB2YXIoLS1wYXBlci1jaGVja2JveC1tYXJnaW4sIGluaXRpYWwpOwogICAgICAgIHZlcnRpY2FsLWFsaWduOiB2YXIoLS1wYXBlci1jaGVja2JveC12ZXJ0aWNhbC1hbGlnbiwgbWlkZGxlKTsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtYmFja2dyb3VuZC1jb2xvciwgdHJhbnNwYXJlbnQpOwogICAgICB9CgogICAgICAjaW5rIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CgogICAgICAgIC8qIENlbnRlciB0aGUgcmlwcGxlIGluIHRoZSBjaGVja2JveCBieSBuZWdhdGl2ZSBvZmZzZXR0aW5nIGl0IGJ5CiAgICAgICAgICogKGlua1dpZHRoIC0gcmlwcGxlV2lkdGgpIC8gMiAqLwogICAgICAgIHRvcDogY2FsYygwcHggLSAodmFyKC0tY2FsY3VsYXRlZC1wYXBlci1jaGVja2JveC1pbmstc2l6ZSkgLSB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLWNoZWNrYm94LXNpemUpKSAvIDIpOwogICAgICAgIGxlZnQ6IGNhbGMoMHB4IC0gKHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItY2hlY2tib3gtaW5rLXNpemUpIC0gdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1jaGVja2JveC1zaXplKSkgLyAyKTsKICAgICAgICB3aWR0aDogdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1jaGVja2JveC1pbmstc2l6ZSk7CiAgICAgICAgaGVpZ2h0OiB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLWNoZWNrYm94LWluay1zaXplKTsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItY2hlY2tib3gtdW5jaGVja2VkLWluay1jb2xvciwgdmFyKC0tcHJpbWFyeS10ZXh0LWNvbG9yKSk7CiAgICAgICAgb3BhY2l0eTogMC42OwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CgogICAgICAjaW5rOmRpcihydGwpIHsKICAgICAgICByaWdodDogY2FsYygwcHggLSAodmFyKC0tY2FsY3VsYXRlZC1wYXBlci1jaGVja2JveC1pbmstc2l6ZSkgLSB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLWNoZWNrYm94LXNpemUpKSAvIDIpOwogICAgICAgIGxlZnQ6IGF1dG87CiAgICAgIH0KCiAgICAgICNpbmtbY2hlY2tlZF0gewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1jaGVja2JveC1jaGVja2VkLWluay1jb2xvciwgdmFyKC0tcHJpbWFyeS1jb2xvcikpOwogICAgICB9CgogICAgICAjY2hlY2tib3ggewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBib3JkZXI6IHNvbGlkIDJweDsKICAgICAgICBib3JkZXItY29sb3I6IHZhcigtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1jb2xvciwgdmFyKC0tcHJpbWFyeS10ZXh0LWNvbG9yKSk7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMnB4OwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIC13ZWJraXQtdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAxNDBtcywgYm9yZGVyLWNvbG9yIDE0MG1zOwogICAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMTQwbXMsIGJvcmRlci1jb2xvciAxNDBtczsKICAgICAgfQoKICAgICAgLyogY2hlY2tib3ggY2hlY2tlZCBhbmltYXRpb25zICovCiAgICAgICNjaGVja2JveC5jaGVja2VkICNjaGVja21hcmsgewogICAgICAgIC13ZWJraXQtYW5pbWF0aW9uOiBjaGVja21hcmstZXhwYW5kIDE0MG1zIGVhc2Utb3V0IGZvcndhcmRzOwogICAgICAgIGFuaW1hdGlvbjogY2hlY2ttYXJrLWV4cGFuZCAxNDBtcyBlYXNlLW91dCBmb3J3YXJkczsKICAgICAgfQoKICAgICAgQC13ZWJraXQta2V5ZnJhbWVzIGNoZWNrbWFyay1leHBhbmQgewogICAgICAgIDAlIHsKICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgwLCAwKSByb3RhdGUoNDVkZWcpOwogICAgICAgIH0KICAgICAgICAxMDAlIHsKICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgxLCAxKSByb3RhdGUoNDVkZWcpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgQGtleWZyYW1lcyBjaGVja21hcmstZXhwYW5kIHsKICAgICAgICAwJSB7CiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDAsIDApIHJvdGF0ZSg0NWRlZyk7CiAgICAgICAgfQogICAgICAgIDEwMCUgewogICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxLCAxKSByb3RhdGUoNDVkZWcpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgI2NoZWNrYm94LmNoZWNrZWQgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtY29sb3IsIHZhcigtLXByaW1hcnktY29sb3IpKTsKICAgICAgICBib3JkZXItY29sb3I6IHZhcigtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtY29sb3IsIHZhcigtLXByaW1hcnktY29sb3IpKTsKICAgICAgfQoKICAgICAgI2NoZWNrbWFyayB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHdpZHRoOiAzNiU7CiAgICAgICAgaGVpZ2h0OiA3MCU7CiAgICAgICAgYm9yZGVyLXN0eWxlOiBzb2xpZDsKICAgICAgICBib3JkZXItdG9wOiBub25lOwogICAgICAgIGJvcmRlci1sZWZ0OiBub25lOwogICAgICAgIGJvcmRlci1yaWdodC13aWR0aDogY2FsYygyLzE1ICogdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1jaGVja2JveC1zaXplKSk7CiAgICAgICAgYm9yZGVyLWJvdHRvbS13aWR0aDogY2FsYygyLzE1ICogdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1jaGVja2JveC1zaXplKSk7CiAgICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1wYXBlci1jaGVja2JveC1jaGVja21hcmstY29sb3IsIHdoaXRlKTsKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46IDk3JSA4NiU7CiAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogOTclIDg2JTsKICAgICAgICBib3gtc2l6aW5nOiBjb250ZW50LWJveDsgLyogcHJvdGVjdCBhZ2FpbnN0IHBhZ2UtbGV2ZWwgYm94LXNpemluZyAqLwogICAgICB9CgogICAgICAjY2hlY2ttYXJrOmRpcihydGwpIHsKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46IDUwJSAxNCU7CiAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogNTAlIDE0JTsKICAgICAgfQoKICAgICAgLyogbGFiZWwgKi8KICAgICAgI2NoZWNrYm94TGFiZWwgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKICAgICAgICBwYWRkaW5nLWxlZnQ6IHZhcigtLXBhcGVyLWNoZWNrYm94LWxhYmVsLXNwYWNpbmcsIDhweCk7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vcm1hbDsKICAgICAgICBsaW5lLWhlaWdodDogbm9ybWFsOwogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1jaGVja2JveC1sYWJlbC1jb2xvciwgdmFyKC0tcHJpbWFyeS10ZXh0LWNvbG9yKSk7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItY2hlY2tib3gtbGFiZWw7CiAgICAgIH0KCiAgICAgIDpob3N0KFtjaGVja2VkXSkgI2NoZWNrYm94TGFiZWwgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1jaGVja2JveC1sYWJlbC1jaGVja2VkLWNvbG9yLCB2YXIoLS1wYXBlci1jaGVja2JveC1sYWJlbC1jb2xvciwgdmFyKC0tcHJpbWFyeS10ZXh0LWNvbG9yKSkpOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWNoZWNrYm94LWxhYmVsLWNoZWNrZWQ7CiAgICAgIH0KCiAgICAgICNjaGVja2JveExhYmVsOmRpcihydGwpIHsKICAgICAgICBwYWRkaW5nLXJpZ2h0OiB2YXIoLS1wYXBlci1jaGVja2JveC1sYWJlbC1zcGFjaW5nLCA4cHgpOwogICAgICAgIHBhZGRpbmctbGVmdDogMDsKICAgICAgfQoKICAgICAgI2NoZWNrYm94TGFiZWxbaGlkZGVuXSB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQoKICAgICAgLyogZGlzYWJsZWQgc3RhdGUgKi8KCiAgICAgIDpob3N0KFtkaXNhYmxlZF0pICNjaGVja2JveCB7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tcGFwZXItY2hlY2tib3gtdW5jaGVja2VkLWNvbG9yLCB2YXIoLS1wcmltYXJ5LXRleHQtY29sb3IpKTsKICAgICAgfQoKICAgICAgOmhvc3QoW2Rpc2FibGVkXVtjaGVja2VkXSkgI2NoZWNrYm94IHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtY29sb3IsIHZhcigtLXByaW1hcnktdGV4dC1jb2xvcikpOwogICAgICAgIG9wYWNpdHk6IDAuNTsKICAgICAgfQoKICAgICAgOmhvc3QoW2Rpc2FibGVkXSkgI2NoZWNrYm94TGFiZWwgIHsKICAgICAgICBvcGFjaXR5OiAwLjY1OwogICAgICB9CgogICAgICAvKiBpbnZhbGlkIHN0YXRlICovCiAgICAgICNjaGVja2JveC5pbnZhbGlkOm5vdCguY2hlY2tlZCkgewogICAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tcGFwZXItY2hlY2tib3gtZXJyb3ItY29sb3IsIHZhcigtLWVycm9yLWNvbG9yKSk7CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPGRpdiBpZD0iY2hlY2tib3hDb250YWluZXIiPgogICAgICA8ZGl2IGlkPSJjaGVja2JveCIgY2xhc3MkPSJbW19jb21wdXRlQ2hlY2tib3hDbGFzcyhjaGVja2VkLCBpbnZhbGlkKV1dIj4KICAgICAgICA8ZGl2IGlkPSJjaGVja21hcmsiIGNsYXNzJD0iW1tfY29tcHV0ZUNoZWNrbWFya0NsYXNzKGNoZWNrZWQpXV0iPjwvZGl2PgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgoKICAgIDxkaXYgaWQ9ImNoZWNrYm94TGFiZWwiPjxzbG90Pjwvc2xvdD48L2Rpdj4KICA8L3RlbXBsYXRlPgoKICA8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vcGFwZXItY2hlY2tib3gvcGFwZXItY2hlY2tib3guaHRtbC5qcwpQb2x5bWVyKHtpczoicGFwZXItY2hlY2tib3giLGJlaGF2aW9yczpbUG9seW1lci5QYXBlckNoZWNrZWRFbGVtZW50QmVoYXZpb3JdLGhvc3RBdHRyaWJ1dGVzOntyb2xlOiJjaGVja2JveCIsImFyaWEtY2hlY2tlZCI6ITEsdGFiaW5kZXg6MH0scHJvcGVydGllczp7YXJpYUFjdGl2ZUF0dHJpYnV0ZTp7dHlwZTpTdHJpbmcsdmFsdWU6ImFyaWEtY2hlY2tlZCJ9fSxhdHRhY2hlZDpmdW5jdGlvbigpe1BvbHltZXIuUmVuZGVyU3RhdHVzLmFmdGVyTmV4dFJlbmRlcih0aGlzLGZ1bmN0aW9uKCl7aWYoIi0xcHgiPT09dGhpcy5nZXRDb21wdXRlZFN0eWxlVmFsdWUoIi0tY2FsY3VsYXRlZC1wYXBlci1jaGVja2JveC1pbmstc2l6ZSIpLnRyaW0oKSl7dmFyIGE9dGhpcy5nZXRDb21wdXRlZFN0eWxlVmFsdWUoIi0tY2FsY3VsYXRlZC1wYXBlci1jaGVja2JveC1zaXplIikudHJpbSgpLGM9InB4IixkPWEubWF0Y2goL1tBLVphLXpdKyQvKTtudWxsIT09ZCYmKGM9ZFswXSk7YT1wYXJzZUZsb2F0KGEpOwpkPTgvMyphOyJweCI9PT1jJiYoZD1NYXRoLmZsb29yKGQpLGQlMiE9PWElMiYmZCsrKTt0aGlzLnVwZGF0ZVN0eWxlcyh7Ii0tcGFwZXItY2hlY2tib3gtaW5rLXNpemUiOmQrY30pfX0pfSxfY29tcHV0ZUNoZWNrYm94Q2xhc3M6ZnVuY3Rpb24oYSxjKXt2YXIgZD0iIjthJiYoZCs9ImNoZWNrZWQgIik7YyYmKGQrPSJpbnZhbGlkIik7cmV0dXJuIGR9LF9jb21wdXRlQ2hlY2ttYXJrQ2xhc3M6ZnVuY3Rpb24oYSl7cmV0dXJuIGE/IiI6ImhpZGRlbiJ9LF9jcmVhdGVSaXBwbGU6ZnVuY3Rpb24oKXt0aGlzLl9yaXBwbGVDb250YWluZXI9dGhpcy4kLmNoZWNrYm94Q29udGFpbmVyO3JldHVybiBQb2x5bWVyLlBhcGVySW5reUZvY3VzQmVoYXZpb3JJbXBsLl9jcmVhdGVSaXBwbGUuY2FsbCh0aGlzKX19KTsKPC9zY3JpcHQ+CjwvZG9tLW1vZHVsZT4KCgoKCgoKCgoKCgoKPGRvbS1tb2R1bGUgaWQ9Imlyb24taWNvbiI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWlubGluZTsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtY2VudGVyLWNlbnRlcjsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CgogICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CgogICAgICAgIGZpbGw6IHZhcigtLWlyb24taWNvbi1maWxsLWNvbG9yLCBjdXJyZW50Y29sb3IpOwogICAgICAgIHN0cm9rZTogdmFyKC0taXJvbi1pY29uLXN0cm9rZS1jb2xvciwgbm9uZSk7CgogICAgICAgIHdpZHRoOiB2YXIoLS1pcm9uLWljb24td2lkdGgsIDI0cHgpOwogICAgICAgIGhlaWdodDogdmFyKC0taXJvbi1pY29uLWhlaWdodCwgMjRweCk7CiAgICAgICAgQGFwcGx5IC0taXJvbi1pY29uOwogICAgICB9CgogICAgICA6aG9zdChbaGlkZGVuXSkgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KCiAgPHNjcmlwdD4vL35+V0VCUEFUSH5+L2lyb24taWNvbi9pcm9uLWljb24uaHRtbC5qcwpQb2x5bWVyKHtpczoiaXJvbi1pY29uIixwcm9wZXJ0aWVzOntpY29uOnt0eXBlOlN0cmluZ30sdGhlbWU6e3R5cGU6U3RyaW5nfSxzcmM6e3R5cGU6U3RyaW5nfSxfbWV0YTp7dmFsdWU6UG9seW1lci5CYXNlLmNyZWF0ZSgiaXJvbi1tZXRhIix7dHlwZToiaWNvbnNldCJ9KX19LG9ic2VydmVyczpbIl91cGRhdGVJY29uKF9tZXRhLCBpc0F0dGFjaGVkKSIsIl91cGRhdGVJY29uKHRoZW1lLCBpc0F0dGFjaGVkKSIsIl9zcmNDaGFuZ2VkKHNyYywgaXNBdHRhY2hlZCkiLCJfaWNvbkNoYW5nZWQoaWNvbiwgaXNBdHRhY2hlZCkiXSxfREVGQVVMVF9JQ09OU0VUOiJpY29ucyIsX2ljb25DaGFuZ2VkOmZ1bmN0aW9uKGEpe2E9KGF8fCIiKS5zcGxpdCgiOiIpO3RoaXMuX2ljb25OYW1lPWEucG9wKCk7dGhpcy5faWNvbnNldE5hbWU9YS5wb3AoKXx8dGhpcy5fREVGQVVMVF9JQ09OU0VUO3RoaXMuX3VwZGF0ZUljb24oKX0sX3NyY0NoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVJY29uKCl9LApfdXNlc0ljb25zZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pY29ufHwhdGhpcy5zcmN9LF91cGRhdGVJY29uOmZ1bmN0aW9uKCl7dGhpcy5fdXNlc0ljb25zZXQoKT8odGhpcy5faW1nJiZ0aGlzLl9pbWcucGFyZW50Tm9kZSYmUG9seW1lci5kb20odGhpcy5yb290KS5yZW1vdmVDaGlsZCh0aGlzLl9pbWcpLCIiPT09dGhpcy5faWNvbk5hbWU/dGhpcy5faWNvbnNldCYmdGhpcy5faWNvbnNldC5yZW1vdmVJY29uKHRoaXMpOnRoaXMuX2ljb25zZXROYW1lJiZ0aGlzLl9tZXRhJiYoKHRoaXMuX2ljb25zZXQ9dGhpcy5fbWV0YS5ieUtleSh0aGlzLl9pY29uc2V0TmFtZSkpPyh0aGlzLl9pY29uc2V0LmFwcGx5SWNvbih0aGlzLHRoaXMuX2ljb25OYW1lLHRoaXMudGhlbWUpLHRoaXMudW5saXN0ZW4od2luZG93LCJpcm9uLWljb25zZXQtYWRkZWQiLCJfdXBkYXRlSWNvbiIpKTp0aGlzLmxpc3Rlbih3aW5kb3csImlyb24taWNvbnNldC1hZGRlZCIsIl91cGRhdGVJY29uIikpKToodGhpcy5faWNvbnNldCYmCnRoaXMuX2ljb25zZXQucmVtb3ZlSWNvbih0aGlzKSx0aGlzLl9pbWd8fCh0aGlzLl9pbWc9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW1nIiksdGhpcy5faW1nLnN0eWxlLndpZHRoPSIxMDAlIix0aGlzLl9pbWcuc3R5bGUuaGVpZ2h0PSIxMDAlIix0aGlzLl9pbWcuZHJhZ2dhYmxlPSExKSx0aGlzLl9pbWcuc3JjPXRoaXMuc3JjLFBvbHltZXIuZG9tKHRoaXMucm9vdCkuYXBwZW5kQ2hpbGQodGhpcy5faW1nKSl9fSk7Cjwvc2NyaXB0PgoKPC9kb20tbW9kdWxlPgoKCgoKCgoKCgo8ZG9tLW1vZHVsZSBpZD0iaXJvbi1hMTF5LWFubm91bmNlciI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgICAgICBjbGlwOiByZWN0KDBweCwwcHgsMHB4LDBweCk7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8ZGl2IGFyaWEtbGl2ZSQ9IltbbW9kZV1dIj5bW190ZXh0XV08L2Rpdj4KICA8L3RlbXBsYXRlPgoKICA8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vaXJvbi1hMTF5LWFubm91bmNlci9pcm9uLWExMXktYW5ub3VuY2VyLmh0bWwuanMKKGZ1bmN0aW9uKCl7UG9seW1lci5Jcm9uQTExeUFubm91bmNlcj1mdW5jdGlvbigpe307UG9seW1lci5Jcm9uQTExeUFubm91bmNlcj1Qb2x5bWVyKHtpczoiaXJvbi1hMTF5LWFubm91bmNlciIscHJvcGVydGllczp7bW9kZTp7dHlwZTpTdHJpbmcsdmFsdWU6InBvbGl0ZSJ9LF90ZXh0Ont0eXBlOlN0cmluZyx2YWx1ZToiIn19LGNyZWF0ZWQ6ZnVuY3Rpb24oKXtQb2x5bWVyLklyb25BMTF5QW5ub3VuY2VyLmluc3RhbmNlfHwoUG9seW1lci5Jcm9uQTExeUFubm91bmNlci5pbnN0YW5jZT10aGlzKTtkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoImlyb24tYW5ub3VuY2UiLHRoaXMuX29uSXJvbkFubm91bmNlLmJpbmQodGhpcykpfSxhbm5vdW5jZTpmdW5jdGlvbihhKXt0aGlzLl90ZXh0PSIiO3RoaXMuYXN5bmMoZnVuY3Rpb24oKXt0aGlzLl90ZXh0PWF9LDEwMCl9LF9vbklyb25Bbm5vdW5jZTpmdW5jdGlvbihhKXthLmRldGFpbCYmYS5kZXRhaWwudGV4dCYmdGhpcy5hbm5vdW5jZShhLmRldGFpbC50ZXh0KX19KTsKUG9seW1lci5Jcm9uQTExeUFubm91bmNlci5pbnN0YW5jZT1udWxsO1BvbHltZXIuSXJvbkExMXlBbm5vdW5jZXIucmVxdWVzdEF2YWlsYWJpbGl0eT1mdW5jdGlvbigpe1BvbHltZXIuSXJvbkExMXlBbm5vdW5jZXIuaW5zdGFuY2V8fChQb2x5bWVyLklyb25BMTF5QW5ub3VuY2VyLmluc3RhbmNlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlyb24tYTExeS1hbm5vdW5jZXIiKSk7ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChQb2x5bWVyLklyb25BMTF5QW5ub3VuY2VyLmluc3RhbmNlKX19KSgpOwo8L3NjcmlwdD4KPC9kb20tbW9kdWxlPgoKCgoKCjxkb20tbW9kdWxlIGlkPSJpcm9uLWlucHV0Ij4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8c2xvdCBpZD0iY29udGVudCI+PC9zbG90PgogIDwvdGVtcGxhdGU+CiAgPHNjcmlwdD4vL35+V0VCUEFUSH5+L2lyb24taW5wdXQvaXJvbi1pbnB1dC5odG1sLmpzClBvbHltZXIoe2lzOiJpcm9uLWlucHV0IixiZWhhdmlvcnM6W1BvbHltZXIuSXJvblZhbGlkYXRhYmxlQmVoYXZpb3JdLHByb3BlcnRpZXM6e2JpbmRWYWx1ZTp7dHlwZTpTdHJpbmcsdmFsdWU6IiJ9LHZhbHVlOnt0eXBlOlN0cmluZyxjb21wdXRlZDoiX2NvbXB1dGVWYWx1ZShiaW5kVmFsdWUpIn0sYWxsb3dlZFBhdHRlcm46e3R5cGU6U3RyaW5nfSxhdXRvVmFsaWRhdGU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sX2lucHV0RWxlbWVudDpPYmplY3R9LG9ic2VydmVyczpbIl9iaW5kVmFsdWVDaGFuZ2VkKGJpbmRWYWx1ZSwgX2lucHV0RWxlbWVudCkiXSxsaXN0ZW5lcnM6e2lucHV0OiJfb25JbnB1dCIsa2V5cHJlc3M6Il9vbktleXByZXNzIn0sY3JlYXRlZDpmdW5jdGlvbigpe1BvbHltZXIuSXJvbkExMXlBbm5vdW5jZXIucmVxdWVzdEF2YWlsYWJpbGl0eSgpO3RoaXMuX3ByZXZpb3VzVmFsaWRJbnB1dD0iIjt0aGlzLl9wYXR0ZXJuQWxyZWFkeUNoZWNrZWQ9ITF9LGF0dGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fb2JzZXJ2ZXI9ClBvbHltZXIuZG9tKHRoaXMpLm9ic2VydmVOb2RlcyhmdW5jdGlvbigpe3RoaXMuX2luaXRTbG90dGVkSW5wdXQoKX0uYmluZCh0aGlzKSl9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fb2JzZXJ2ZXImJihQb2x5bWVyLmRvbSh0aGlzKS51bm9ic2VydmVOb2Rlcyh0aGlzLl9vYnNlcnZlciksdGhpcy5fb2JzZXJ2ZXI9bnVsbCl9LGdldCBpbnB1dEVsZW1lbnQoKXtyZXR1cm4gdGhpcy5faW5wdXRFbGVtZW50fSxfaW5pdFNsb3R0ZWRJbnB1dDpmdW5jdGlvbigpe3RoaXMuX2lucHV0RWxlbWVudD10aGlzLmdldEVmZmVjdGl2ZUNoaWxkcmVuKClbMF07dGhpcy5pbnB1dEVsZW1lbnQmJnRoaXMuaW5wdXRFbGVtZW50LnZhbHVlJiYodGhpcy5iaW5kVmFsdWU9dGhpcy5pbnB1dEVsZW1lbnQudmFsdWUpO3RoaXMuZmlyZSgiaXJvbi1pbnB1dC1yZWFkeSIpfSxnZXQgX3BhdHRlcm5SZWdFeHAoKXtpZih0aGlzLmFsbG93ZWRQYXR0ZXJuKXZhciBhPW5ldyBSZWdFeHAodGhpcy5hbGxvd2VkUGF0dGVybik7CmVsc2Ugc3dpdGNoKHRoaXMuaW5wdXRFbGVtZW50LnR5cGUpe2Nhc2UgIm51bWJlciI6YT0vWzAtOS4sZS1dL31yZXR1cm4gYX0sX2JpbmRWYWx1ZUNoYW5nZWQ6ZnVuY3Rpb24oYSxjKXtjJiYodm9pZCAwPT09YT9jLnZhbHVlPW51bGw6YSE9PWMudmFsdWUmJih0aGlzLmlucHV0RWxlbWVudC52YWx1ZT1hKSx0aGlzLmF1dG9WYWxpZGF0ZSYmdGhpcy52YWxpZGF0ZSgpLHRoaXMuZmlyZSgiYmluZC12YWx1ZS1jaGFuZ2VkIix7dmFsdWU6YX0pKX0sX29uSW5wdXQ6ZnVuY3Rpb24oKXshdGhpcy5hbGxvd2VkUGF0dGVybnx8dGhpcy5fcGF0dGVybkFscmVhZHlDaGVja2VkfHx0aGlzLl9jaGVja1BhdHRlcm5WYWxpZGl0eSgpfHwodGhpcy5fYW5ub3VuY2VJbnZhbGlkQ2hhcmFjdGVyKCJJbnZhbGlkIHN0cmluZyBvZiBjaGFyYWN0ZXJzIG5vdCBlbnRlcmVkLiIpLHRoaXMuaW5wdXRFbGVtZW50LnZhbHVlPXRoaXMuX3ByZXZpb3VzVmFsaWRJbnB1dCk7dGhpcy5iaW5kVmFsdWU9dGhpcy5fcHJldmlvdXNWYWxpZElucHV0PQp0aGlzLmlucHV0RWxlbWVudC52YWx1ZTt0aGlzLl9wYXR0ZXJuQWxyZWFkeUNoZWNrZWQ9ITF9LF9pc1ByaW50YWJsZTpmdW5jdGlvbihhKXt2YXIgYz0xOT09YS5rZXlDb2RlfHwyMD09YS5rZXlDb2RlfHw0NT09YS5rZXlDb2RlfHw0Nj09YS5rZXlDb2RlfHwxNDQ9PWEua2V5Q29kZXx8MTQ1PT1hLmtleUNvZGV8fDMyPGEua2V5Q29kZSYmNDE+YS5rZXlDb2RlfHwxMTE8YS5rZXlDb2RlJiYxMjQ+YS5rZXlDb2RlO3JldHVybiEoOD09YS5rZXlDb2RlfHw5PT1hLmtleUNvZGV8fDEzPT1hLmtleUNvZGV8fDI3PT1hLmtleUNvZGUpJiYhKDA9PWEuY2hhckNvZGUmJmMpfSxfb25LZXlwcmVzczpmdW5jdGlvbihhKXtpZih0aGlzLmFsbG93ZWRQYXR0ZXJufHwibnVtYmVyIj09PXRoaXMuaW5wdXRFbGVtZW50LnR5cGUpe3ZhciBjPXRoaXMuX3BhdHRlcm5SZWdFeHA7aWYoYyYmIShhLm1ldGFLZXl8fGEuY3RybEtleXx8YS5hbHRLZXkpKXt0aGlzLl9wYXR0ZXJuQWxyZWFkeUNoZWNrZWQ9CiEwO3ZhciBkPVN0cmluZy5mcm9tQ2hhckNvZGUoYS5jaGFyQ29kZSk7dGhpcy5faXNQcmludGFibGUoYSkmJiFjLnRlc3QoZCkmJihhLnByZXZlbnREZWZhdWx0KCksdGhpcy5fYW5ub3VuY2VJbnZhbGlkQ2hhcmFjdGVyKCJJbnZhbGlkIGNoYXJhY3RlciAiK2QrIiBub3QgZW50ZXJlZC4iKSl9fX0sX2NoZWNrUGF0dGVyblZhbGlkaXR5OmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5fcGF0dGVyblJlZ0V4cDtpZighYSlyZXR1cm4hMDtmb3IodmFyIGM9MDtjPHRoaXMuaW5wdXRFbGVtZW50LnZhbHVlLmxlbmd0aDtjKyspaWYoIWEudGVzdCh0aGlzLmlucHV0RWxlbWVudC52YWx1ZVtjXSkpcmV0dXJuITE7cmV0dXJuITB9LHZhbGlkYXRlOmZ1bmN0aW9uKCl7aWYoIXRoaXMuaW5wdXRFbGVtZW50KXJldHVybiB0aGlzLmludmFsaWQ9ITEsITA7dmFyIGE9dGhpcy5pbnB1dEVsZW1lbnQuY2hlY2tWYWxpZGl0eSgpO2EmJih0aGlzLnJlcXVpcmVkJiYiIj09PXRoaXMuYmluZFZhbHVlP2E9ITE6CnRoaXMuaGFzVmFsaWRhdG9yKCkmJihhPVBvbHltZXIuSXJvblZhbGlkYXRhYmxlQmVoYXZpb3IudmFsaWRhdGUuY2FsbCh0aGlzLHRoaXMuYmluZFZhbHVlKSkpO3RoaXMuaW52YWxpZD0hYTt0aGlzLmZpcmUoImlyb24taW5wdXQtdmFsaWRhdGUiKTtyZXR1cm4gYX0sX2Fubm91bmNlSW52YWxpZENoYXJhY3RlcjpmdW5jdGlvbihhKXt0aGlzLmZpcmUoImlyb24tYW5ub3VuY2UiLHt0ZXh0OmF9KX0sX2NvbXB1dGVWYWx1ZTpmdW5jdGlvbihhKXtyZXR1cm4gYX19KTsKPC9zY3JpcHQ+CjwvZG9tLW1vZHVsZT4KCgoKCgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vcGFwZXItaW5wdXQvcGFwZXItaW5wdXQtYmVoYXZpb3IuaHRtbC5qcwpQb2x5bWVyLlBhcGVySW5wdXRIZWxwZXI9e307UG9seW1lci5QYXBlcklucHV0SGVscGVyLk5leHRMYWJlbElEPTE7UG9seW1lci5QYXBlcklucHV0SGVscGVyLk5leHRBZGRvbklEPTE7UG9seW1lci5QYXBlcklucHV0SGVscGVyLk5leHRJbnB1dElEPTE7ClBvbHltZXIuUGFwZXJJbnB1dEJlaGF2aW9ySW1wbD17cHJvcGVydGllczp7bGFiZWw6e3R5cGU6U3RyaW5nfSx2YWx1ZTp7bm90aWZ5OiEwLHR5cGU6U3RyaW5nfSxkaXNhYmxlZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxpbnZhbGlkOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEsbm90aWZ5OiEwfSxhbGxvd2VkUGF0dGVybjp7dHlwZTpTdHJpbmd9LHR5cGU6e3R5cGU6U3RyaW5nfSxsaXN0Ont0eXBlOlN0cmluZ30scGF0dGVybjp7dHlwZTpTdHJpbmd9LHJlcXVpcmVkOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGVycm9yTWVzc2FnZTp7dHlwZTpTdHJpbmd9LGNoYXJDb3VudGVyOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LG5vTGFiZWxGbG9hdDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxhbHdheXNGbG9hdExhYmVsOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGF1dG9WYWxpZGF0ZTp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSx2YWxpZGF0b3I6e3R5cGU6U3RyaW5nfSxhdXRvY29tcGxldGU6e3R5cGU6U3RyaW5nLAp2YWx1ZToib2ZmIn0sYXV0b2ZvY3VzOnt0eXBlOkJvb2xlYW4sb2JzZXJ2ZXI6Il9hdXRvZm9jdXNDaGFuZ2VkIn0saW5wdXRtb2RlOnt0eXBlOlN0cmluZ30sbWlubGVuZ3RoOnt0eXBlOk51bWJlcn0sbWF4bGVuZ3RoOnt0eXBlOk51bWJlcn0sbWluOnt0eXBlOlN0cmluZ30sbWF4Ont0eXBlOlN0cmluZ30sc3RlcDp7dHlwZTpTdHJpbmd9LG5hbWU6e3R5cGU6U3RyaW5nfSxwbGFjZWhvbGRlcjp7dHlwZTpTdHJpbmcsdmFsdWU6IiJ9LHJlYWRvbmx5Ont0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LHNpemU6e3R5cGU6TnVtYmVyfSxhdXRvY2FwaXRhbGl6ZTp7dHlwZTpTdHJpbmcsdmFsdWU6Im5vbmUifSxhdXRvY29ycmVjdDp7dHlwZTpTdHJpbmcsdmFsdWU6Im9mZiJ9LGF1dG9zYXZlOnt0eXBlOlN0cmluZ30scmVzdWx0czp7dHlwZTpOdW1iZXJ9LGFjY2VwdDp7dHlwZTpTdHJpbmd9LG11bHRpcGxlOnt0eXBlOkJvb2xlYW59LF9hcmlhRGVzY3JpYmVkQnk6e3R5cGU6U3RyaW5nLHZhbHVlOiIifSwKX2FyaWFMYWJlbGxlZEJ5Ont0eXBlOlN0cmluZyx2YWx1ZToiIn0sX2lucHV0SWQ6e3R5cGU6U3RyaW5nLHZhbHVlOiIifX0sbGlzdGVuZXJzOnsiYWRkb24tYXR0YWNoZWQiOiJfb25BZGRvbkF0dGFjaGVkIn0sa2V5QmluZGluZ3M6eyJzaGlmdCt0YWI6a2V5ZG93biI6Il9vblNoaWZ0VGFiRG93biJ9LGhvc3RBdHRyaWJ1dGVzOnt0YWJpbmRleDowfSxnZXQgaW5wdXRFbGVtZW50KCl7dGhpcy4kfHwodGhpcy4kPXt9KTt0aGlzLiQuaW5wdXR8fCh0aGlzLl9nZW5lcmF0ZUlucHV0SWQoKSx0aGlzLiQuaW5wdXQ9dGhpcy4kJCgiIyIrdGhpcy5faW5wdXRJZCkpO3JldHVybiB0aGlzLiQuaW5wdXR9LGdldCBfZm9jdXNhYmxlRWxlbWVudCgpe3JldHVybiB0aGlzLmlucHV0RWxlbWVudH0sY3JlYXRlZDpmdW5jdGlvbigpe3RoaXMuX3R5cGVzVGhhdEhhdmVUZXh0PSJkYXRlIGRhdGV0aW1lIGRhdGV0aW1lLWxvY2FsIG1vbnRoIHRpbWUgd2VlayBmaWxlIi5zcGxpdCgiICIpfSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX3VwZGF0ZUFyaWFMYWJlbGxlZEJ5KCk7CiFQb2x5bWVyLkVsZW1lbnQmJnRoaXMuaW5wdXRFbGVtZW50JiYtMSE9PXRoaXMuX3R5cGVzVGhhdEhhdmVUZXh0LmluZGV4T2YodGhpcy5pbnB1dEVsZW1lbnQudHlwZSkmJih0aGlzLmFsd2F5c0Zsb2F0TGFiZWw9ITApfSxfYXBwZW5kU3RyaW5nV2l0aFNwYWNlOmZ1bmN0aW9uKGEsYyl7cmV0dXJuIGE/YSsiICIrYzpjfSxfb25BZGRvbkF0dGFjaGVkOmZ1bmN0aW9uKGEpe2E9UG9seW1lci5kb20oYSkucm9vdFRhcmdldDtpZihhLmlkKXRoaXMuX2FyaWFEZXNjcmliZWRCeT10aGlzLl9hcHBlbmRTdHJpbmdXaXRoU3BhY2UodGhpcy5fYXJpYURlc2NyaWJlZEJ5LGEuaWQpO2Vsc2V7dmFyIGM9InBhcGVyLWlucHV0LWFkZC1vbi0iK1BvbHltZXIuUGFwZXJJbnB1dEhlbHBlci5OZXh0QWRkb25JRCsrO2EuaWQ9Yzt0aGlzLl9hcmlhRGVzY3JpYmVkQnk9dGhpcy5fYXBwZW5kU3RyaW5nV2l0aFNwYWNlKHRoaXMuX2FyaWFEZXNjcmliZWRCeSxjKX19LHZhbGlkYXRlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5wdXRFbGVtZW50LnZhbGlkYXRlKCl9LApfZm9jdXNCbHVySGFuZGxlcjpmdW5jdGlvbihhKXtQb2x5bWVyLklyb25Db250cm9sU3RhdGUuX2ZvY3VzQmx1ckhhbmRsZXIuY2FsbCh0aGlzLGEpO3RoaXMuZm9jdXNlZCYmIXRoaXMuX3NoaWZ0VGFiUHJlc3NlZCYmdGhpcy5fZm9jdXNhYmxlRWxlbWVudCYmdGhpcy5fZm9jdXNhYmxlRWxlbWVudC5mb2N1cygpfSxfb25TaGlmdFRhYkRvd246ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmdldEF0dHJpYnV0ZSgidGFiaW5kZXgiKTt0aGlzLl9zaGlmdFRhYlByZXNzZWQ9ITA7dGhpcy5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IiwiLTEiKTt0aGlzLmFzeW5jKGZ1bmN0aW9uKCl7dGhpcy5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IixhKTt0aGlzLl9zaGlmdFRhYlByZXNzZWQ9ITF9LDEpfSxfaGFuZGxlQXV0b1ZhbGlkYXRlOmZ1bmN0aW9uKCl7dGhpcy5hdXRvVmFsaWRhdGUmJnRoaXMudmFsaWRhdGUoKX0sdXBkYXRlVmFsdWVBbmRQcmVzZXJ2ZUNhcmV0OmZ1bmN0aW9uKGEpe3RyeXt2YXIgYz0KdGhpcy5pbnB1dEVsZW1lbnQuc2VsZWN0aW9uU3RhcnQ7dGhpcy52YWx1ZT1hO3RoaXMuaW5wdXRFbGVtZW50LnNlbGVjdGlvblN0YXJ0PWM7dGhpcy5pbnB1dEVsZW1lbnQuc2VsZWN0aW9uRW5kPWN9Y2F0Y2goZCl7dGhpcy52YWx1ZT1hfX0sX2NvbXB1dGVBbHdheXNGbG9hdExhYmVsOmZ1bmN0aW9uKGEsYyl7cmV0dXJuIGN8fGF9LF91cGRhdGVBcmlhTGFiZWxsZWRCeTpmdW5jdGlvbigpe3ZhciBhPVBvbHltZXIuZG9tKHRoaXMucm9vdCkucXVlcnlTZWxlY3RvcigibGFiZWwiKTtpZihhKXtpZihhLmlkKXZhciBjPWEuaWQ7ZWxzZSBjPSJwYXBlci1pbnB1dC1sYWJlbC0iK1BvbHltZXIuUGFwZXJJbnB1dEhlbHBlci5OZXh0TGFiZWxJRCsrLGEuaWQ9Yzt0aGlzLl9hcmlhTGFiZWxsZWRCeT1jfWVsc2UgdGhpcy5fYXJpYUxhYmVsbGVkQnk9IiJ9LF9nZW5lcmF0ZUlucHV0SWQ6ZnVuY3Rpb24oKXt0aGlzLl9pbnB1dElkJiYiIiE9PXRoaXMuX2lucHV0SWR8fCh0aGlzLl9pbnB1dElkPQoiaW5wdXQtIitQb2x5bWVyLlBhcGVySW5wdXRIZWxwZXIuTmV4dElucHV0SUQrKyl9LF9vbkNoYW5nZTpmdW5jdGlvbihhKXt0aGlzLnNoYWRvd1Jvb3QmJnRoaXMuZmlyZShhLnR5cGUse3NvdXJjZUV2ZW50OmF9LHtub2RlOnRoaXMsYnViYmxlczphLmJ1YmJsZXMsY2FuY2VsYWJsZTphLmNhbmNlbGFibGV9KX0sX2F1dG9mb2N1c0NoYW5nZWQ6ZnVuY3Rpb24oKXtpZih0aGlzLmF1dG9mb2N1cyYmdGhpcy5fZm9jdXNhYmxlRWxlbWVudCl7dmFyIGE9ZG9jdW1lbnQuYWN0aXZlRWxlbWVudDthIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQmJmEhPT1kb2N1bWVudC5ib2R5JiZhIT09ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50fHx0aGlzLl9mb2N1c2FibGVFbGVtZW50LmZvY3VzKCl9fX07UG9seW1lci5QYXBlcklucHV0QmVoYXZpb3I9W1BvbHltZXIuSXJvbkNvbnRyb2xTdGF0ZSxQb2x5bWVyLklyb25BMTF5S2V5c0JlaGF2aW9yLFBvbHltZXIuUGFwZXJJbnB1dEJlaGF2aW9ySW1wbF07Cjwvc2NyaXB0PgoKCgoKCgo8Y3VzdG9tLXN0eWxlPgogIDxzdHlsZSBpcz0iY3VzdG9tLXN0eWxlIj4KICAgIGh0bWwgewoKICAgICAgLyogU2hhcmVkIFN0eWxlcyAqLwogICAgICAtLXBhcGVyLWZvbnQtY29tbW9uLWJhc2U6IHsKICAgICAgICBmb250LWZhbWlseTogJ1JvYm90bycsICdOb3RvJywgc2Fucy1zZXJpZjsKICAgICAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKICAgICAgfTsKCiAgICAgIC0tcGFwZXItZm9udC1jb21tb24tY29kZTogewogICAgICAgIGZvbnQtZmFtaWx5OiAnUm9ib3RvIE1vbm8nLCAnQ29uc29sYXMnLCAnTWVubG8nLCBtb25vc3BhY2U7CiAgICAgICAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7CiAgICAgIH07CgogICAgICAtLXBhcGVyLWZvbnQtY29tbW9uLWV4cGVuc2l2ZS1rZXJuaW5nOiB7CiAgICAgICAgdGV4dC1yZW5kZXJpbmc6IG9wdGltaXplTGVnaWJpbGl0eTsKICAgICAgfTsKCiAgICAgIC0tcGFwZXItZm9udC1jb21tb24tbm93cmFwOiB7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICB9OwoKICAgICAgLyogTWF0ZXJpYWwgRm9udCBTdHlsZXMgKi8KCiAgICAgIC0tcGFwZXItZm9udC1kaXNwbGF5NDogewogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLWJhc2U7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tbm93cmFwOwoKICAgICAgICBmb250LXNpemU6IDExMnB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiAzMDA7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0uMDQ0ZW07CiAgICAgICAgbGluZS1oZWlnaHQ6IDEyMHB4OwogICAgICB9OwoKICAgICAgLS1wYXBlci1mb250LWRpc3BsYXkzOiB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1ub3dyYXA7CgogICAgICAgIGZvbnQtc2l6ZTogNTZweDsKICAgICAgICBmb250LXdlaWdodDogNDAwOwogICAgICAgIGxldHRlci1zcGFjaW5nOiAtLjAyNmVtOwogICAgICAgIGxpbmUtaGVpZ2h0OiA2MHB4OwogICAgICB9OwoKICAgICAgLS1wYXBlci1mb250LWRpc3BsYXkyOiB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKCiAgICAgICAgZm9udC1zaXplOiA0NXB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0uMDE4ZW07CiAgICAgICAgbGluZS1oZWlnaHQ6IDQ4cHg7CiAgICAgIH07CgogICAgICAtLXBhcGVyLWZvbnQtZGlzcGxheTE6IHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1iYXNlOwoKICAgICAgICBmb250LXNpemU6IDM0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgICAgICBsZXR0ZXItc3BhY2luZzogLS4wMWVtOwogICAgICAgIGxpbmUtaGVpZ2h0OiA0MHB4OwogICAgICB9OwoKICAgICAgLS1wYXBlci1mb250LWhlYWRsaW5lOiB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKCiAgICAgICAgZm9udC1zaXplOiAyNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0uMDEyZW07CiAgICAgICAgbGluZS1oZWlnaHQ6IDMycHg7CiAgICAgIH07CgogICAgICAtLXBhcGVyLWZvbnQtdGl0bGU6IHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1iYXNlOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLW5vd3JhcDsKCiAgICAgICAgZm9udC1zaXplOiAyMHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgbGluZS1oZWlnaHQ6IDI4cHg7CiAgICAgIH07CgogICAgICAtLXBhcGVyLWZvbnQtc3ViaGVhZDogewogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLWJhc2U7CgogICAgICAgIGZvbnQtc2l6ZTogMTZweDsKICAgICAgICBmb250LXdlaWdodDogNDAwOwogICAgICAgIGxpbmUtaGVpZ2h0OiAyNHB4OwogICAgICB9OwoKICAgICAgLS1wYXBlci1mb250LWJvZHkyOiB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKCiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgbGluZS1oZWlnaHQ6IDI0cHg7CiAgICAgIH07CgogICAgICAtLXBhcGVyLWZvbnQtYm9keTE6IHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1iYXNlOwoKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgICAgICBsaW5lLWhlaWdodDogMjBweDsKICAgICAgfTsKCiAgICAgIC0tcGFwZXItZm9udC1jYXB0aW9uOiB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1ub3dyYXA7CgogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBmb250LXdlaWdodDogNDAwOwogICAgICAgIGxldHRlci1zcGFjaW5nOiAwLjAxMWVtOwogICAgICAgIGxpbmUtaGVpZ2h0OiAyMHB4OwogICAgICB9OwoKICAgICAgLS1wYXBlci1mb250LW1lbnU6IHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1iYXNlOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLW5vd3JhcDsKCiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgbGluZS1oZWlnaHQ6IDI0cHg7CiAgICAgIH07CgogICAgICAtLXBhcGVyLWZvbnQtYnV0dG9uOiB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1ub3dyYXA7CgogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGxldHRlci1zcGFjaW5nOiAwLjAxOGVtOwogICAgICAgIGxpbmUtaGVpZ2h0OiAyNHB4OwogICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICAgIH07CgogICAgICAtLXBhcGVyLWZvbnQtY29kZTI6IHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1jb2RlOwoKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgICAgICBsaW5lLWhlaWdodDogMjBweDsKICAgICAgfTsKCiAgICAgIC0tcGFwZXItZm9udC1jb2RlMTogewogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLWNvZGU7CgogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGxpbmUtaGVpZ2h0OiAyMHB4OwogICAgICB9OwoKICAgIH0KCiAgPC9zdHlsZT4KPC9jdXN0b20tc3R5bGU+CgoKCjxzY3JpcHQ+Ly9+fldFQlBBVEh+fi9wYXBlci1pbnB1dC9wYXBlci1pbnB1dC1hZGRvbi1iZWhhdmlvci5odG1sLmpzClBvbHltZXIuUGFwZXJJbnB1dEFkZG9uQmVoYXZpb3I9e2F0dGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5maXJlKCJhZGRvbi1hdHRhY2hlZCIpfSx1cGRhdGU6ZnVuY3Rpb24oKXt9fTsKPC9zY3JpcHQ+CgoKCgo8ZG9tLW1vZHVsZSBpZD0icGFwZXItaW5wdXQtY2hhci1jb3VudGVyIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgZmxvYXQ6IHJpZ2h0OwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNhcHRpb247CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY2hhci1jb3VudGVyOwogICAgICB9CgogICAgICA6aG9zdChbaGlkZGVuXSkgewogICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgOmhvc3QoOmRpcihydGwpKSB7CiAgICAgICAgZmxvYXQ6IGxlZnQ7CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPHNwYW4+W1tfY2hhckNvdW50ZXJTdHJdXTwvc3Bhbj4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+Cgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vcGFwZXItaW5wdXQvcGFwZXItaW5wdXQtY2hhci1jb3VudGVyLmh0bWwuanMKUG9seW1lcih7aXM6InBhcGVyLWlucHV0LWNoYXItY291bnRlciIsYmVoYXZpb3JzOltQb2x5bWVyLlBhcGVySW5wdXRBZGRvbkJlaGF2aW9yXSxwcm9wZXJ0aWVzOntfY2hhckNvdW50ZXJTdHI6e3R5cGU6U3RyaW5nLHZhbHVlOiIwIn19LHVwZGF0ZTpmdW5jdGlvbihhKXtpZihhLmlucHV0RWxlbWVudCl7YS52YWx1ZT1hLnZhbHVlfHwiIjt2YXIgYz1hLnZhbHVlLnRvU3RyaW5nKCkubGVuZ3RoLnRvU3RyaW5nKCk7YS5pbnB1dEVsZW1lbnQuaGFzQXR0cmlidXRlKCJtYXhsZW5ndGgiKSYmKGMrPSIvIithLmlucHV0RWxlbWVudC5nZXRBdHRyaWJ1dGUoIm1heGxlbmd0aCIpKTt0aGlzLl9jaGFyQ291bnRlclN0cj1jfX19KTsKPC9zY3JpcHQ+CgoKCgoKCgoKPGN1c3RvbS1zdHlsZT4KICA8c3R5bGUgaXM9ImN1c3RvbS1zdHlsZSI+CiAgICBodG1sIHsKICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItc2hhcmVkLWlucHV0LXN0eWxlOiB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOyAvKiB0byBtYWtlIGEgc3RhY2tpbmcgY29udGV4dCAqLwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgYm94LXNoYWRvdzogbm9uZTsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICAgIG1hcmdpbjogMDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBtYXgtd2lkdGg6IDEwMCU7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgICAgYm9yZGVyOiBub25lOwogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1pbnB1dC1jb250YWluZXItaW5wdXQtY29sb3IsIHZhcigtLXByaW1hcnktdGV4dC1jb2xvcikpOwogICAgICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTsKICAgICAgICB0ZXh0LWFsaWduOiBpbmhlcml0OwogICAgICAgIHZlcnRpY2FsLWFsaWduOiBib3R0b207CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtc3ViaGVhZDsKICAgICAgfTsKICAgIH0KICA8L3N0eWxlPgo8L2N1c3RvbS1zdHlsZT4KCjxkb20tbW9kdWxlIGlkPSJwYXBlci1pbnB1dC1jb250YWluZXIiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBhZGRpbmc6IDhweCAwOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNvbnRhaW5lcjsKICAgICAgfQoKICAgICAgOmhvc3QoW2lubGluZV0pIHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgIH0KCiAgICAgIDpob3N0KFtkaXNhYmxlZF0pIHsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICBvcGFjaXR5OiAwLjMzOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1pbnB1dC1jb250YWluZXItZGlzYWJsZWQ7CiAgICAgIH0KCiAgICAgIDpob3N0KFtoaWRkZW5dKSB7CiAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgICB9CgogICAgICBbaGlkZGVuXSB7CiAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgICB9CgogICAgICAuZmxvYXRlZC1sYWJlbC1wbGFjZWhvbGRlciB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jYXB0aW9uOwogICAgICB9CgogICAgICAudW5kZXJsaW5lIHsKICAgICAgICBoZWlnaHQ6IDJweDsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KCiAgICAgIC5mb2N1c2VkLWxpbmUgewogICAgICAgIEBhcHBseSAtLWxheW91dC1maXQ7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkIHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1mb2N1cy1jb2xvciwgdmFyKC0tcHJpbWFyeS1jb2xvcikpOwoKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46IGNlbnRlciBjZW50ZXI7CiAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogY2VudGVyIGNlbnRlcjsKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUzZCgwLDEsMSk7CiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZTNkKDAsMSwxKTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLXVuZGVybGluZS1mb2N1czsKICAgICAgfQoKICAgICAgLnVuZGVybGluZS5pcy1oaWdobGlnaHRlZCAuZm9jdXNlZC1saW5lIHsKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogbm9uZTsKICAgICAgICB0cmFuc2Zvcm06IG5vbmU7CiAgICAgICAgLXdlYmtpdC10cmFuc2l0aW9uOiAtd2Via2l0LXRyYW5zZm9ybSAwLjI1czsKICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4yNXM7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLXRyYW5zaXRpb24tZWFzaW5nOwogICAgICB9CgogICAgICAudW5kZXJsaW5lLmlzLWludmFsaWQgLmZvY3VzZWQtbGluZSB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1wYXBlci1pbnB1dC1jb250YWluZXItaW52YWxpZC1jb2xvciwgdmFyKC0tZXJyb3ItY29sb3IpKTsKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogbm9uZTsKICAgICAgICB0cmFuc2Zvcm06IG5vbmU7CiAgICAgICAgLXdlYmtpdC10cmFuc2l0aW9uOiAtd2Via2l0LXRyYW5zZm9ybSAwLjI1czsKICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4yNXM7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLXRyYW5zaXRpb24tZWFzaW5nOwogICAgICB9CgogICAgICAudW5mb2N1c2VkLWxpbmUgewogICAgICAgIEBhcHBseSAtLWxheW91dC1maXQ7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1jb2xvciwgdmFyKC0tc2Vjb25kYXJ5LXRleHQtY29sb3IpKTsKICAgICAgICBAYXBwbHkgLS1wYXBlci1pbnB1dC1jb250YWluZXItdW5kZXJsaW5lOwogICAgICB9CgogICAgICA6aG9zdChbZGlzYWJsZWRdKSAudW5mb2N1c2VkLWxpbmUgewogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBkYXNoZWQ7CiAgICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1wYXBlci1pbnB1dC1jb250YWluZXItY29sb3IsIHZhcigtLXNlY29uZGFyeS10ZXh0LWNvbG9yKSk7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLXVuZGVybGluZS1kaXNhYmxlZDsKICAgICAgfQoKICAgICAgLmlucHV0LXdyYXBwZXIgewogICAgICAgIEBhcHBseSAtLWxheW91dC1ob3Jpem9udGFsOwogICAgICAgIEBhcHBseSAtLWxheW91dC1jZW50ZXI7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICAuaW5wdXQtY29udGVudCB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWZsZXgtYXV0bzsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtcmVsYXRpdmU7CiAgICAgICAgbWF4LXdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAuaW5wdXQtY29udGVudCA6OnNsb3R0ZWQobGFiZWwpLAogICAgICAuaW5wdXQtY29udGVudCA6OnNsb3R0ZWQoLnBhcGVyLWlucHV0LWxhYmVsKSB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGZvbnQ6IGluaGVyaXQ7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1jb2xvciwgdmFyKC0tc2Vjb25kYXJ5LXRleHQtY29sb3IpKTsKICAgICAgICAtd2Via2l0LXRyYW5zaXRpb246IC13ZWJraXQtdHJhbnNmb3JtIDAuMjVzLCB3aWR0aCAwLjI1czsKICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4yNXMsIHdpZHRoIDAuMjVzOwogICAgICAgIC13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjogbGVmdCB0b3A7CiAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogbGVmdCB0b3A7CiAgICAgICAgLyogRml4IGZvciBzYWZhcmkgbm90IGZvY3VzaW5nIDAtaGVpZ2h0IGRhdGUvdGltZSBpbnB1dHMgd2l0aCAtd2Via2l0LWFwcGVyYW5jZTogbm9uZTsgKi8KICAgICAgICBtaW4taGVpZ2h0OiAxcHg7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLW5vd3JhcDsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LXN1YmhlYWQ7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWxhYmVsOwogICAgICAgIEBhcHBseSAtLXBhcGVyLXRyYW5zaXRpb24tZWFzaW5nOwogICAgICB9CgogICAgICAuaW5wdXQtY29udGVudC5sYWJlbC1pcy1mbG9hdGluZyA6OnNsb3R0ZWQobGFiZWwpLAogICAgICAuaW5wdXQtY29udGVudC5sYWJlbC1pcy1mbG9hdGluZyA6OnNsb3R0ZWQoLnBhcGVyLWlucHV0LWxhYmVsKSB7CiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTc1JSkgc2NhbGUoMC43NSk7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC03NSUpIHNjYWxlKDAuNzUpOwoKICAgICAgICAvKiBTaW5jZSB3ZSBzY2FsZSB0byA3NS8xMDAgb2YgdGhlIHNpemUsIHdlIGFjdHVhbGx5IGhhdmUgMTAwLzc1IG9mIHRoZQogICAgICAgIG9yaWdpbmFsIHNwYWNlIG5vdyBhdmFpbGFibGUgKi8KICAgICAgICB3aWR0aDogMTMzJTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWxhYmVsLWZsb2F0aW5nOwogICAgICB9CgogICAgICA6aG9zdCg6ZGlyKHJ0bCkpIC5pbnB1dC1jb250ZW50LmxhYmVsLWlzLWZsb2F0aW5nIDo6c2xvdHRlZChsYWJlbCksCiAgICAgIDpob3N0KDpkaXIocnRsKSkgLmlucHV0LWNvbnRlbnQubGFiZWwtaXMtZmxvYXRpbmcgOjpzbG90dGVkKC5wYXBlci1pbnB1dC1sYWJlbCkgewogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGxlZnQ6IGF1dG87CiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOiByaWdodCB0b3A7CiAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogcmlnaHQgdG9wOwogICAgICB9CgogICAgICAuaW5wdXQtY29udGVudC5sYWJlbC1pcy1oaWdobGlnaHRlZCA6OnNsb3R0ZWQobGFiZWwpLAogICAgICAuaW5wdXQtY29udGVudC5sYWJlbC1pcy1oaWdobGlnaHRlZCA6OnNsb3R0ZWQoLnBhcGVyLWlucHV0LWxhYmVsKSB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1mb2N1cy1jb2xvciwgdmFyKC0tcHJpbWFyeS1jb2xvcikpOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1pbnB1dC1jb250YWluZXItbGFiZWwtZm9jdXM7CiAgICAgIH0KCiAgICAgIC5pbnB1dC1jb250ZW50LmlzLWludmFsaWQgOjpzbG90dGVkKGxhYmVsKSwKICAgICAgLmlucHV0LWNvbnRlbnQuaXMtaW52YWxpZCA6OnNsb3R0ZWQoLnBhcGVyLWlucHV0LWxhYmVsKSB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnZhbGlkLWNvbG9yLCB2YXIoLS1lcnJvci1jb2xvcikpOwogICAgICB9CgogICAgICAuaW5wdXQtY29udGVudC5sYWJlbC1pcy1oaWRkZW4gOjpzbG90dGVkKGxhYmVsKSwKICAgICAgLmlucHV0LWNvbnRlbnQubGFiZWwtaXMtaGlkZGVuIDo6c2xvdHRlZCgucGFwZXItaW5wdXQtbGFiZWwpIHsKICAgICAgICB2aXNpYmlsaXR5OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC5pbnB1dC1jb250ZW50IDo6c2xvdHRlZChpbnB1dCksCiAgICAgIC5pbnB1dC1jb250ZW50IDo6c2xvdHRlZChpcm9uLWlucHV0KSwKICAgICAgLmlucHV0LWNvbnRlbnQgOjpzbG90dGVkKHRleHRhcmVhKSwKICAgICAgLmlucHV0LWNvbnRlbnQgOjpzbG90dGVkKGlyb24tYXV0b2dyb3ctdGV4dGFyZWEpLAogICAgICAuaW5wdXQtY29udGVudCA6OnNsb3R0ZWQoLnBhcGVyLWlucHV0LWlucHV0KSB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLXNoYXJlZC1pbnB1dC1zdHlsZTsKICAgICAgICAvKiBUaGUgYXBwbHkgc2hpbSBkb2Vzbid0IGFwcGx5IHRoZSBuZXN0ZWQgY29sb3IgY3VzdG9tIHByb3BlcnR5LAogICAgICAgICAgc28gd2UgaGF2ZSB0byByZS1hcHBseSBpdCBoZXJlLiAqLwogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1pbnB1dC1jb250YWluZXItaW5wdXQtY29sb3IsIHZhcigtLXByaW1hcnktdGV4dC1jb2xvcikpOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnB1dDsKICAgICAgfQoKICAgICAgLmlucHV0LWNvbnRlbnQgOjpzbG90dGVkKGlucHV0KTo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbiwKICAgICAgLmlucHV0LWNvbnRlbnQgOjpzbG90dGVkKGlucHV0KTo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbiB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWlucHV0LXdlYmtpdC1zcGlubmVyOwogICAgICB9CgogICAgICAuaW5wdXQtY29udGVudC5mb2N1c2VkIDo6c2xvdHRlZChpbnB1dCksCiAgICAgIC5pbnB1dC1jb250ZW50LmZvY3VzZWQgOjpzbG90dGVkKGlyb24taW5wdXQpLAogICAgICAuaW5wdXQtY29udGVudC5mb2N1c2VkIDo6c2xvdHRlZCh0ZXh0YXJlYSksCiAgICAgIC5pbnB1dC1jb250ZW50LmZvY3VzZWQgOjpzbG90dGVkKGlyb24tYXV0b2dyb3ctdGV4dGFyZWEpLAogICAgICAuaW5wdXQtY29udGVudC5mb2N1c2VkIDo6c2xvdHRlZCgucGFwZXItaW5wdXQtaW5wdXQpIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1pbnB1dC1jb250YWluZXItaW5wdXQtZm9jdXM7CiAgICAgIH0KCiAgICAgIC5pbnB1dC1jb250ZW50LmlzLWludmFsaWQgOjpzbG90dGVkKGlucHV0KSwKICAgICAgLmlucHV0LWNvbnRlbnQuaXMtaW52YWxpZCA6OnNsb3R0ZWQoaXJvbi1pbnB1dCksCiAgICAgIC5pbnB1dC1jb250ZW50LmlzLWludmFsaWQgOjpzbG90dGVkKHRleHRhcmVhKSwKICAgICAgLmlucHV0LWNvbnRlbnQuaXMtaW52YWxpZCA6OnNsb3R0ZWQoaXJvbi1hdXRvZ3Jvdy10ZXh0YXJlYSksCiAgICAgIC5pbnB1dC1jb250ZW50LmlzLWludmFsaWQgOjpzbG90dGVkKC5wYXBlci1pbnB1dC1pbnB1dCkgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnB1dC1pbnZhbGlkOwogICAgICB9CgogICAgICAucHJlZml4IDo6c2xvdHRlZCgqKSB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtc3ViaGVhZDsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtZmxleC1ub25lOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LXByZWZpeDsKICAgICAgfQoKICAgICAgLnN1ZmZpeCA6OnNsb3R0ZWQoKikgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LXN1YmhlYWQ7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWZsZXgtbm9uZTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtc3VmZml4OwogICAgICB9CgogICAgICAvKiBGaXJlZm94IHNldHMgYSBtaW4td2lkdGggb24gdGhlIGlucHV0LCB3aGljaCBjYW4gY2F1c2UgbGF5b3V0IGlzc3VlcyAqLwogICAgICAuaW5wdXQtY29udGVudCA6OnNsb3R0ZWQoaW5wdXQpIHsKICAgICAgICBtaW4td2lkdGg6IDA7CiAgICAgIH0KCiAgICAgIC5pbnB1dC1jb250ZW50IDo6c2xvdHRlZCh0ZXh0YXJlYSkgewogICAgICAgIHJlc2l6ZTogbm9uZTsKICAgICAgfQoKICAgICAgLmFkZC1vbi1jb250ZW50IHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KCiAgICAgIC5hZGQtb24tY29udGVudC5pcy1pbnZhbGlkIDo6c2xvdHRlZCgqKSB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnZhbGlkLWNvbG9yLCB2YXIoLS1lcnJvci1jb2xvcikpOwogICAgICB9CgogICAgICAuYWRkLW9uLWNvbnRlbnQuaXMtaGlnaGxpZ2h0ZWQgOjpzbG90dGVkKCopIHsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWZvY3VzLWNvbG9yLCB2YXIoLS1wcmltYXJ5LWNvbG9yKSk7CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPGRpdiBjbGFzcz0iZmxvYXRlZC1sYWJlbC1wbGFjZWhvbGRlciIgYXJpYS1oaWRkZW49InRydWUiIGhpZGRlbj0iW1tub0xhYmVsRmxvYXRdXSI+Jm5ic3A7PC9kaXY+CgogICAgPGRpdiBjbGFzcz0iaW5wdXQtd3JhcHBlciI+CiAgICAgIDxzcGFuIGNsYXNzPSJwcmVmaXgiPjxzbG90IG5hbWU9InByZWZpeCI+PC9zbG90Pjwvc3Bhbj4KCiAgICAgIDxkaXYgY2xhc3MkPSJbW19jb21wdXRlSW5wdXRDb250ZW50Q2xhc3Mobm9MYWJlbEZsb2F0LGFsd2F5c0Zsb2F0TGFiZWwsZm9jdXNlZCxpbnZhbGlkLF9pbnB1dEhhc0NvbnRlbnQpXV0iIGlkPSJsYWJlbEFuZElucHV0Q29udGFpbmVyIj4KICAgICAgICA8c2xvdCBuYW1lPSJsYWJlbCI+PC9zbG90PgogICAgICAgIDxzbG90IG5hbWU9ImlucHV0Ij48L3Nsb3Q+CiAgICAgIDwvZGl2PgoKICAgICAgPHNwYW4gY2xhc3M9InN1ZmZpeCI+PHNsb3QgbmFtZT0ic3VmZml4Ij48L3Nsb3Q+PC9zcGFuPgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcyQ9IltbX2NvbXB1dGVVbmRlcmxpbmVDbGFzcyhmb2N1c2VkLGludmFsaWQpXV0iPgogICAgICA8ZGl2IGNsYXNzPSJ1bmZvY3VzZWQtbGluZSI+PC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImZvY3VzZWQtbGluZSI+PC9kaXY+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGNsYXNzJD0iW1tfY29tcHV0ZUFkZE9uQ29udGVudENsYXNzKGZvY3VzZWQsaW52YWxpZCldXSI+CiAgICAgIDxzbG90IG5hbWU9ImFkZC1vbiI+PC9zbG90PgogICAgPC9kaXY+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPgoKPHNjcmlwdD4vL35+V0VCUEFUSH5+L3BhcGVyLWlucHV0L3BhcGVyLWlucHV0LWNvbnRhaW5lci5odG1sLmpzClBvbHltZXIoe2lzOiJwYXBlci1pbnB1dC1jb250YWluZXIiLHByb3BlcnRpZXM6e25vTGFiZWxGbG9hdDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxhbHdheXNGbG9hdExhYmVsOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGF0dHJGb3JWYWx1ZTp7dHlwZTpTdHJpbmcsdmFsdWU6ImJpbmQtdmFsdWUifSxhdXRvVmFsaWRhdGU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0saW52YWxpZDp7b2JzZXJ2ZXI6Il9pbnZhbGlkQ2hhbmdlZCIsdHlwZTpCb29sZWFuLHZhbHVlOiExfSxmb2N1c2VkOntyZWFkT25seTohMCx0eXBlOkJvb2xlYW4sdmFsdWU6ITEsbm90aWZ5OiEwfSxfYWRkb25zOnt0eXBlOkFycmF5fSxfaW5wdXRIYXNDb250ZW50Ont0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LF9pbnB1dFNlbGVjdG9yOnt0eXBlOlN0cmluZyx2YWx1ZToiaW5wdXQsaXJvbi1pbnB1dCx0ZXh0YXJlYSwucGFwZXItaW5wdXQtaW5wdXQifSxfYm91bmRPbkZvY3VzOnt0eXBlOkZ1bmN0aW9uLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX29uRm9jdXMuYmluZCh0aGlzKX19LApfYm91bmRPbkJsdXI6e3R5cGU6RnVuY3Rpb24sdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fb25CbHVyLmJpbmQodGhpcyl9fSxfYm91bmRPbklucHV0Ont0eXBlOkZ1bmN0aW9uLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX29uSW5wdXQuYmluZCh0aGlzKX19LF9ib3VuZFZhbHVlQ2hhbmdlZDp7dHlwZTpGdW5jdGlvbix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9vblZhbHVlQ2hhbmdlZC5iaW5kKHRoaXMpfX19LGxpc3RlbmVyczp7ImFkZG9uLWF0dGFjaGVkIjoiX29uQWRkb25BdHRhY2hlZCIsImlyb24taW5wdXQtdmFsaWRhdGUiOiJfb25Jcm9uSW5wdXRWYWxpZGF0ZSJ9LGdldCBfdmFsdWVDaGFuZ2VkRXZlbnQoKXtyZXR1cm4gdGhpcy5hdHRyRm9yVmFsdWUrIi1jaGFuZ2VkIn0sZ2V0IF9wcm9wZXJ0eUZvclZhbHVlKCl7cmV0dXJuIFBvbHltZXIuQ2FzZU1hcC5kYXNoVG9DYW1lbENhc2UodGhpcy5hdHRyRm9yVmFsdWUpfSxnZXQgX2lucHV0RWxlbWVudCgpe3JldHVybiBQb2x5bWVyLmRvbSh0aGlzKS5xdWVyeVNlbGVjdG9yKHRoaXMuX2lucHV0U2VsZWN0b3IpfSwKZ2V0IF9pbnB1dEVsZW1lbnRWYWx1ZSgpe3JldHVybiB0aGlzLl9pbnB1dEVsZW1lbnRbdGhpcy5fcHJvcGVydHlGb3JWYWx1ZV18fHRoaXMuX2lucHV0RWxlbWVudC52YWx1ZX0scmVhZHk6ZnVuY3Rpb24oKXt0aGlzLl9faXNGaXJzdFZhbHVlVXBkYXRlPSEwO3RoaXMuX2FkZG9uc3x8KHRoaXMuX2FkZG9ucz1bXSk7dGhpcy5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsdGhpcy5fYm91bmRPbkZvY3VzLCEwKTt0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLHRoaXMuX2JvdW5kT25CbHVyLCEwKX0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLmF0dHJGb3JWYWx1ZT90aGlzLl9pbnB1dEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLl92YWx1ZUNoYW5nZWRFdmVudCx0aGlzLl9ib3VuZFZhbHVlQ2hhbmdlZCk6dGhpcy5hZGRFdmVudExpc3RlbmVyKCJpbnB1dCIsdGhpcy5fb25JbnB1dCk7dGhpcy5faW5wdXRFbGVtZW50VmFsdWUmJiIiIT10aGlzLl9pbnB1dEVsZW1lbnRWYWx1ZT8KdGhpcy5faGFuZGxlVmFsdWVBbmRBdXRvVmFsaWRhdGUodGhpcy5faW5wdXRFbGVtZW50KTp0aGlzLl9oYW5kbGVWYWx1ZSh0aGlzLl9pbnB1dEVsZW1lbnQpfSxfb25BZGRvbkF0dGFjaGVkOmZ1bmN0aW9uKGEpe3RoaXMuX2FkZG9uc3x8KHRoaXMuX2FkZG9ucz1bXSk7YT1hLnRhcmdldDstMT09PXRoaXMuX2FkZG9ucy5pbmRleE9mKGEpJiYodGhpcy5fYWRkb25zLnB1c2goYSksdGhpcy5pc0F0dGFjaGVkJiZ0aGlzLl9oYW5kbGVWYWx1ZSh0aGlzLl9pbnB1dEVsZW1lbnQpKX0sX29uRm9jdXM6ZnVuY3Rpb24oKXt0aGlzLl9zZXRGb2N1c2VkKCEwKX0sX29uQmx1cjpmdW5jdGlvbigpe3RoaXMuX3NldEZvY3VzZWQoITEpO3RoaXMuX2hhbmRsZVZhbHVlQW5kQXV0b1ZhbGlkYXRlKHRoaXMuX2lucHV0RWxlbWVudCl9LF9vbklucHV0OmZ1bmN0aW9uKGEpe3RoaXMuX2hhbmRsZVZhbHVlQW5kQXV0b1ZhbGlkYXRlKGEudGFyZ2V0KX0sX29uVmFsdWVDaGFuZ2VkOmZ1bmN0aW9uKGEpe3ZhciBjPQphLnRhcmdldDtpZih0aGlzLl9faXNGaXJzdFZhbHVlVXBkYXRlJiYodGhpcy5fX2lzRmlyc3RWYWx1ZVVwZGF0ZT0hMSx2b2lkIDA9PT1jLnZhbHVlfHwiIj09PWMudmFsdWUpKXJldHVybjt0aGlzLl9oYW5kbGVWYWx1ZUFuZEF1dG9WYWxpZGF0ZShhLnRhcmdldCl9LF9oYW5kbGVWYWx1ZTpmdW5jdGlvbihhKXt2YXIgYz10aGlzLl9pbnB1dEVsZW1lbnRWYWx1ZTtjfHwwPT09Y3x8Im51bWJlciI9PT1hLnR5cGUmJiFhLmNoZWNrVmFsaWRpdHkoKT90aGlzLl9pbnB1dEhhc0NvbnRlbnQ9ITA6dGhpcy5faW5wdXRIYXNDb250ZW50PSExO3RoaXMudXBkYXRlQWRkb25zKHtpbnB1dEVsZW1lbnQ6YSx2YWx1ZTpjLGludmFsaWQ6dGhpcy5pbnZhbGlkfSl9LF9oYW5kbGVWYWx1ZUFuZEF1dG9WYWxpZGF0ZTpmdW5jdGlvbihhKXt0aGlzLmF1dG9WYWxpZGF0ZSYmYSYmKHRoaXMuaW52YWxpZD0hKGEudmFsaWRhdGU/YS52YWxpZGF0ZSh0aGlzLl9pbnB1dEVsZW1lbnRWYWx1ZSk6YS5jaGVja1ZhbGlkaXR5KCkpKTsKdGhpcy5faGFuZGxlVmFsdWUoYSl9LF9vbklyb25JbnB1dFZhbGlkYXRlOmZ1bmN0aW9uKCl7dGhpcy5pbnZhbGlkPXRoaXMuX2lucHV0RWxlbWVudC5pbnZhbGlkfSxfaW52YWxpZENoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLl9hZGRvbnMmJnRoaXMudXBkYXRlQWRkb25zKHtpbnZhbGlkOnRoaXMuaW52YWxpZH0pfSx1cGRhdGVBZGRvbnM6ZnVuY3Rpb24oYSl7Zm9yKHZhciBjLGQ9MDtjPXRoaXMuX2FkZG9uc1tkXTtkKyspYy51cGRhdGUoYSl9LF9jb21wdXRlSW5wdXRDb250ZW50Q2xhc3M6ZnVuY3Rpb24oYSxjLGQsZixnKXt2YXIgbD0iaW5wdXQtY29udGVudCI7YT8oZyYmKGwrPSIgbGFiZWwtaXMtaGlkZGVuIiksZiYmKGwrPSIgaXMtaW52YWxpZCIpKTooYT10aGlzLnF1ZXJ5U2VsZWN0b3IoImxhYmVsIiksY3x8Zz8obCs9IiBsYWJlbC1pcy1mbG9hdGluZyIsdGhpcy4kLmxhYmVsQW5kSW5wdXRDb250YWluZXIuc3R5bGUucG9zaXRpb249InN0YXRpYyIsZj9sKz0iIGlzLWludmFsaWQiOgpkJiYobCs9IiBsYWJlbC1pcy1oaWdobGlnaHRlZCIpKTooYSYmKHRoaXMuJC5sYWJlbEFuZElucHV0Q29udGFpbmVyLnN0eWxlLnBvc2l0aW9uPSJyZWxhdGl2ZSIpLGYmJihsKz0iIGlzLWludmFsaWQiKSkpO2QmJihsKz0iIGZvY3VzZWQiKTtyZXR1cm4gbH0sX2NvbXB1dGVVbmRlcmxpbmVDbGFzczpmdW5jdGlvbihhLGMpe3ZhciBkPSJ1bmRlcmxpbmUiO2M/ZCs9IiBpcy1pbnZhbGlkIjphJiYoZCs9IiBpcy1oaWdobGlnaHRlZCIpO3JldHVybiBkfSxfY29tcHV0ZUFkZE9uQ29udGVudENsYXNzOmZ1bmN0aW9uKGEsYyl7dmFyIGQ9ImFkZC1vbi1jb250ZW50IjtjP2QrPSIgaXMtaW52YWxpZCI6YSYmKGQrPSIgaXMtaGlnaGxpZ2h0ZWQiKTtyZXR1cm4gZH19KTsKPC9zY3JpcHQ+CgoKCgoKCgoKPGRvbS1tb2R1bGUgaWQ9InBhcGVyLWlucHV0LWVycm9yIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuOwoKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWludmFsaWQtY29sb3IsIHZhcigtLWVycm9yLWNvbG9yKSk7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY2FwdGlvbjsKICAgICAgICBAYXBwbHkgLS1wYXBlci1pbnB1dC1lcnJvcjsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgbGVmdDowOwogICAgICAgIHJpZ2h0OjA7CiAgICAgIH0KCiAgICAgIDpob3N0KFtpbnZhbGlkXSkgewogICAgICAgIHZpc2liaWxpdHk6IHZpc2libGU7CiAgICAgIH07CiAgICA8L3N0eWxlPgoKICAgIDxzbG90Pjwvc2xvdD4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+Cgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vcGFwZXItaW5wdXQvcGFwZXItaW5wdXQtZXJyb3IuaHRtbC5qcwpQb2x5bWVyKHtpczoicGFwZXItaW5wdXQtZXJyb3IiLGJlaGF2aW9yczpbUG9seW1lci5QYXBlcklucHV0QWRkb25CZWhhdmlvcl0scHJvcGVydGllczp7aW52YWxpZDp7cmVhZE9ubHk6ITAscmVmbGVjdFRvQXR0cmlidXRlOiEwLHR5cGU6Qm9vbGVhbn19LHVwZGF0ZTpmdW5jdGlvbihhKXt0aGlzLl9zZXRJbnZhbGlkKGEuaW52YWxpZCl9fSk7Cjwvc2NyaXB0PgoKCgoKPGRvbS1tb2R1bGUgaWQ9InBhcGVyLWlucHV0Ij4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQoKICAgICAgOmhvc3QoW2ZvY3VzZWRdKSB7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgfQoKICAgICAgOmhvc3QoW2hpZGRlbl0pIHsKICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICAgIH0KCiAgICAgIGlucHV0IHsKICAgICAgICAvKiBGaXJlZm94IHNldHMgYSBtaW4td2lkdGggb24gdGhlIGlucHV0LCB3aGljaCBjYW4gY2F1c2UgbGF5b3V0IGlzc3VlcyAqLwogICAgICAgIG1pbi13aWR0aDogMDsKICAgICAgfQoKICAgICAgLyogSW4gMS54LCB0aGUgPGlucHV0PiBpcyBkaXN0cmlidXRlZCB0byBwYXBlci1pbnB1dC1jb250YWluZXIsIHdoaWNoIHN0eWxlcyBpdC4KICAgICAgSW4gMi54IHRoZSA8aXJvbi1pbnB1dD4gaXMgZGlzdHJpYnV0ZWQgdG8gcGFwZXItaW5wdXQtY29udGFpbmVyLCB3aGljaCBzdHlsZXMKICAgICAgaXQsIGJ1dCBpbiBvcmRlciBmb3IgdGhpcyB0byB3b3JrIGNvcnJlY3RseSwgd2UgbmVlZCB0byByZXNldCBzb21lCiAgICAgIG9mIHRoZSBuYXRpdmUgaW5wdXQncyBwcm9wZXJ0aWVzIHRvIGluaGVyaXQgKGZyb20gdGhlIGlyb24taW5wdXQpICovCiAgICAgIGlyb24taW5wdXQgPiBpbnB1dCB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLXNoYXJlZC1pbnB1dC1zdHlsZTsKICAgICAgICBmb250LWZhbWlseTogaW5oZXJpdDsKICAgICAgICBmb250LXdlaWdodDogaW5oZXJpdDsKICAgICAgICBmb250LXNpemU6IGluaGVyaXQ7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IGluaGVyaXQ7CiAgICAgICAgd29yZC1zcGFjaW5nOiBpbmhlcml0OwogICAgICAgIGxpbmUtaGVpZ2h0OiBpbmhlcml0OwogICAgICAgIHRleHQtc2hhZG93OiBpbmhlcml0OwogICAgICAgIGNvbG9yOiBpbmhlcml0OwogICAgICAgIGN1cnNvcjogaW5oZXJpdDsKICAgICAgfQoKICAgICAgaW5wdXQ6ZGlzYWJsZWQgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnB1dC1kaXNhYmxlZDsKICAgICAgfQoKICAgICAgaW5wdXQ6Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b24sCiAgICAgIGlucHV0Ojotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1pbnB1dC1jb250YWluZXItaW5wdXQtd2Via2l0LXNwaW5uZXI7CiAgICAgIH0KCiAgICAgIGlucHV0Ojotd2Via2l0LWNsZWFyLWJ1dHRvbiB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWlucHV0LXdlYmtpdC1jbGVhcjsKICAgICAgfQoKICAgICAgaW5wdXQ6Oi13ZWJraXQtY2FsZW5kYXItcGlja2VyLWluZGljYXRvciB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWlucHV0LXdlYmtpdC1jYWxlbmRhci1waWNrZXItaW5kaWNhdG9yOwogICAgICB9CgogICAgICBpbnB1dDo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlciB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1jb2xvciwgdmFyKC0tc2Vjb25kYXJ5LXRleHQtY29sb3IpKTsKICAgICAgfQoKICAgICAgaW5wdXQ6LW1vei1wbGFjZWhvbGRlciB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1jb2xvciwgdmFyKC0tc2Vjb25kYXJ5LXRleHQtY29sb3IpKTsKICAgICAgfQoKICAgICAgaW5wdXQ6Oi1tb3otcGxhY2Vob2xkZXIgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1pbnB1dC1jb250YWluZXItY29sb3IsIHZhcigtLXNlY29uZGFyeS10ZXh0LWNvbG9yKSk7CiAgICAgIH0KCiAgICAgIGlucHV0OjotbXMtY2xlYXIgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1tcy1jbGVhcjsKICAgICAgfQoKICAgICAgaW5wdXQ6Oi1tcy1yZXZlYWwgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1tcy1yZXZlYWw7CiAgICAgIH0KCiAgICAgIGlucHV0Oi1tcy1pbnB1dC1wbGFjZWhvbGRlciB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1jb2xvciwgdmFyKC0tc2Vjb25kYXJ5LXRleHQtY29sb3IpKTsKICAgICAgfQoKICAgICAgbGFiZWwgewogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxwYXBlci1pbnB1dC1jb250YWluZXIgaWQ9ImNvbnRhaW5lciIgbm8tbGFiZWwtZmxvYXQ9Iltbbm9MYWJlbEZsb2F0XV0iIGFsd2F5cy1mbG9hdC1sYWJlbD0iW1tfY29tcHV0ZUFsd2F5c0Zsb2F0TGFiZWwoYWx3YXlzRmxvYXRMYWJlbCxwbGFjZWhvbGRlcildXSIgYXV0by12YWxpZGF0ZSQ9IltbYXV0b1ZhbGlkYXRlXV0iIGRpc2FibGVkJD0iW1tkaXNhYmxlZF1dIiBpbnZhbGlkPSJbW2ludmFsaWRdXSI+CgogICAgICA8c2xvdCBuYW1lPSJwcmVmaXgiIHNsb3Q9InByZWZpeCI+PC9zbG90PgoKICAgICAgPGxhYmVsIGhpZGRlbiQ9IltbIWxhYmVsXV0iIGFyaWEtaGlkZGVuPSJ0cnVlIiBmb3IkPSJbW19pbnB1dElkXV0iIHNsb3Q9ImxhYmVsIj5bW2xhYmVsXV08L2xhYmVsPgoKICAgICAgPHNwYW4gaWQ9InRlbXBsYXRlLXBsYWNlaG9sZGVyIj48L3NwYW4+CgogICAgICA8c2xvdCBuYW1lPSJzdWZmaXgiIHNsb3Q9InN1ZmZpeCI+PC9zbG90PgoKICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2Vycm9yTWVzc2FnZV1dIj4KICAgICAgICA8cGFwZXItaW5wdXQtZXJyb3IgYXJpYS1saXZlPSJhc3NlcnRpdmUiIHNsb3Q9ImFkZC1vbiI+W1tlcnJvck1lc3NhZ2VdXTwvcGFwZXItaW5wdXQtZXJyb3I+CiAgICAgIDwvdGVtcGxhdGU+CgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbY2hhckNvdW50ZXJdXSI+CiAgICAgICAgPHBhcGVyLWlucHV0LWNoYXItY291bnRlciBzbG90PSJhZGQtb24iPjwvcGFwZXItaW5wdXQtY2hhci1jb3VudGVyPgogICAgICA8L3RlbXBsYXRlPgoKICAgIDwvcGFwZXItaW5wdXQtY29udGFpbmVyPgogIDwvdGVtcGxhdGU+CgogIAogIDx0ZW1wbGF0ZSBpZD0idjAiPgogICAgPGlucHV0IGlzPSJpcm9uLWlucHV0IiBzbG90PSJpbnB1dCIgY2xhc3M9ImlucHV0LWVsZW1lbnQiIGlkJD0iW1tfaW5wdXRJZF1dIiBhcmlhLWxhYmVsbGVkYnkkPSJbW19hcmlhTGFiZWxsZWRCeV1dIiBhcmlhLWRlc2NyaWJlZGJ5JD0iW1tfYXJpYURlc2NyaWJlZEJ5XV0iIGRpc2FibGVkJD0iW1tkaXNhYmxlZF1dIiB0aXRsZSQ9IltbdGl0bGVdXSIgYmluZC12YWx1ZT0ie3t2YWx1ZX19IiBpbnZhbGlkPSJ7e2ludmFsaWR9fSIgcHJldmVudC1pbnZhbGlkLWlucHV0PSJbW3ByZXZlbnRJbnZhbGlkSW5wdXRdXSIgYWxsb3dlZC1wYXR0ZXJuPSJbW2FsbG93ZWRQYXR0ZXJuXV0iIHZhbGlkYXRvcj0iW1t2YWxpZGF0b3JdXSIgdHlwZSQ9IltbdHlwZV1dIiBwYXR0ZXJuJD0iW1twYXR0ZXJuXV0iIHJlcXVpcmVkJD0iW1tyZXF1aXJlZF1dIiBhdXRvY29tcGxldGUkPSJbW2F1dG9jb21wbGV0ZV1dIiBhdXRvZm9jdXMkPSJbW2F1dG9mb2N1c11dIiBpbnB1dG1vZGUkPSJbW2lucHV0bW9kZV1dIiBtaW5sZW5ndGgkPSJbW21pbmxlbmd0aF1dIiBtYXhsZW5ndGgkPSJbW21heGxlbmd0aF1dIiBtaW4kPSJbW21pbl1dIiBtYXgkPSJbW21heF1dIiBzdGVwJD0iW1tzdGVwXV0iIG5hbWUkPSJbW25hbWVdXSIgcGxhY2Vob2xkZXIkPSJbW3BsYWNlaG9sZGVyXV0iIHJlYWRvbmx5JD0iW1tyZWFkb25seV1dIiBsaXN0JD0iW1tsaXN0XV0iIHNpemUkPSJbW3NpemVdXSIgYXV0b2NhcGl0YWxpemUkPSJbW2F1dG9jYXBpdGFsaXplXV0iIGF1dG9jb3JyZWN0JD0iW1thdXRvY29ycmVjdF1dIiBvbi1jaGFuZ2U9Il9vbkNoYW5nZSIgdGFiaW5kZXgkPSJbW3RhYkluZGV4XV0iIGF1dG9zYXZlJD0iW1thdXRvc2F2ZV1dIiByZXN1bHRzJD0iW1tyZXN1bHRzXV0iIGFjY2VwdCQ9IltbYWNjZXB0XV0iIG11bHRpcGxlJD0iW1ttdWx0aXBsZV1dIj4KICA8L3RlbXBsYXRlPgoKICA8dGVtcGxhdGUgaWQ9InYxIj4KICAgIAogICAgPGlyb24taW5wdXQgYmluZC12YWx1ZT0ie3t2YWx1ZX19IiBzbG90PSJpbnB1dCIgY2xhc3M9ImlucHV0LWVsZW1lbnQiIGlkJD0iW1tfaW5wdXRJZF1dIiBtYXhsZW5ndGgkPSJbW21heGxlbmd0aF1dIiBhbGxvd2VkLXBhdHRlcm49IltbYWxsb3dlZFBhdHRlcm5dXSIgaW52YWxpZD0ie3tpbnZhbGlkfX0iIHZhbGlkYXRvcj0iW1t2YWxpZGF0b3JdXSI+CiAgICAgIDxpbnB1dCBhcmlhLWxhYmVsbGVkYnkkPSJbW19hcmlhTGFiZWxsZWRCeV1dIiBhcmlhLWRlc2NyaWJlZGJ5JD0iW1tfYXJpYURlc2NyaWJlZEJ5XV0iIGRpc2FibGVkJD0iW1tkaXNhYmxlZF1dIiB0aXRsZSQ9IltbdGl0bGVdXSIgdHlwZSQ9IltbdHlwZV1dIiBwYXR0ZXJuJD0iW1twYXR0ZXJuXV0iIHJlcXVpcmVkJD0iW1tyZXF1aXJlZF1dIiBhdXRvY29tcGxldGUkPSJbW2F1dG9jb21wbGV0ZV1dIiBhdXRvZm9jdXMkPSJbW2F1dG9mb2N1c11dIiBpbnB1dG1vZGUkPSJbW2lucHV0bW9kZV1dIiBtaW5sZW5ndGgkPSJbW21pbmxlbmd0aF1dIiBtYXhsZW5ndGgkPSJbW21heGxlbmd0aF1dIiBtaW4kPSJbW21pbl1dIiBtYXgkPSJbW21heF1dIiBzdGVwJD0iW1tzdGVwXV0iIG5hbWUkPSJbW25hbWVdXSIgcGxhY2Vob2xkZXIkPSJbW3BsYWNlaG9sZGVyXV0iIHJlYWRvbmx5JD0iW1tyZWFkb25seV1dIiBsaXN0JD0iW1tsaXN0XV0iIHNpemUkPSJbW3NpemVdXSIgYXV0b2NhcGl0YWxpemUkPSJbW2F1dG9jYXBpdGFsaXplXV0iIGF1dG9jb3JyZWN0JD0iW1thdXRvY29ycmVjdF1dIiBvbi1jaGFuZ2U9Il9vbkNoYW5nZSIgdGFiaW5kZXgkPSJbW3RhYkluZGV4XV0iIGF1dG9zYXZlJD0iW1thdXRvc2F2ZV1dIiByZXN1bHRzJD0iW1tyZXN1bHRzXV0iIGFjY2VwdCQ9IltbYWNjZXB0XV0iIG11bHRpcGxlJD0iW1ttdWx0aXBsZV1dIj4KICAgIDwvaXJvbi1pbnB1dD4KICA8L3RlbXBsYXRlPgoKPC9kb20tbW9kdWxlPgoKPHNjcmlwdD4vL35+V0VCUEFUSH5+L3BhcGVyLWlucHV0L3BhcGVyLWlucHV0Lmh0bWwuanMKUG9seW1lcih7aXM6InBhcGVyLWlucHV0IixiZWhhdmlvcnM6W1BvbHltZXIuUGFwZXJJbnB1dEJlaGF2aW9yLFBvbHltZXIuSXJvbkZvcm1FbGVtZW50QmVoYXZpb3JdLHByb3BlcnRpZXM6e3ZhbHVlOnt0eXBlOlN0cmluZ319LGJlZm9yZVJlZ2lzdGVyOmZ1bmN0aW9uKCl7dmFyIGE9ImZ1bmN0aW9uIj09dHlwZW9mIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlyb24taW5wdXQiKS5faW5pdFNsb3R0ZWRJbnB1dD8idjEiOiJ2MCIsYz1Qb2x5bWVyLkRvbU1vZHVsZS5pbXBvcnQoInBhcGVyLWlucHV0IiwidGVtcGxhdGUiKTthPVBvbHltZXIuRG9tTW9kdWxlLmltcG9ydCgicGFwZXItaW5wdXQiLCJ0ZW1wbGF0ZSMiK2EpOyhjPWMuY29udGVudC5xdWVyeVNlbGVjdG9yKCIjdGVtcGxhdGUtcGxhY2Vob2xkZXIiKSkmJmMucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQoYS5jb250ZW50LGMpfSxnZXQgX2ZvY3VzYWJsZUVsZW1lbnQoKXtyZXR1cm4gUG9seW1lci5FbGVtZW50P3RoaXMuaW5wdXRFbGVtZW50Ll9pbnB1dEVsZW1lbnQ6CnRoaXMuaW5wdXRFbGVtZW50fSxsaXN0ZW5lcnM6eyJpcm9uLWlucHV0LXJlYWR5IjoiX29uSXJvbklucHV0UmVhZHkifSxfb25Jcm9uSW5wdXRSZWFkeTpmdW5jdGlvbigpe3RoaXMuJC5uYXRpdmVJbnB1dHx8KHRoaXMuJC5uYXRpdmVJbnB1dD10aGlzLiQkKCJpbnB1dCIpKTt0aGlzLmlucHV0RWxlbWVudCYmLTEhPT10aGlzLl90eXBlc1RoYXRIYXZlVGV4dC5pbmRleE9mKHRoaXMuJC5uYXRpdmVJbnB1dC50eXBlKSYmKHRoaXMuYWx3YXlzRmxvYXRMYWJlbD0hMCk7dGhpcy5pbnB1dEVsZW1lbnQuYmluZFZhbHVlJiZ0aGlzLiQuY29udGFpbmVyLl9oYW5kbGVWYWx1ZUFuZEF1dG9WYWxpZGF0ZSh0aGlzLmlucHV0RWxlbWVudCl9fSk7Cjwvc2NyaXB0PgoKCgoKCgoKCgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vaXJvbi1maXQtYmVoYXZpb3IvaXJvbi1maXQtYmVoYXZpb3IuaHRtbC5qcwpQb2x5bWVyLklyb25GaXRCZWhhdmlvcj17cHJvcGVydGllczp7c2l6aW5nVGFyZ2V0Ont0eXBlOk9iamVjdCx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzfX0sZml0SW50bzp7dHlwZTpPYmplY3QsdmFsdWU6d2luZG93fSxub092ZXJsYXA6e3R5cGU6Qm9vbGVhbn0scG9zaXRpb25UYXJnZXQ6e3R5cGU6RWxlbWVudH0saG9yaXpvbnRhbEFsaWduOnt0eXBlOlN0cmluZ30sdmVydGljYWxBbGlnbjp7dHlwZTpTdHJpbmd9LGR5bmFtaWNBbGlnbjp7dHlwZTpCb29sZWFufSxob3Jpem9udGFsT2Zmc2V0Ont0eXBlOk51bWJlcix2YWx1ZTowLG5vdGlmeTohMH0sdmVydGljYWxPZmZzZXQ6e3R5cGU6TnVtYmVyLHZhbHVlOjAsbm90aWZ5OiEwfSxhdXRvRml0T25BdHRhY2g6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sX2ZpdEluZm86e3R5cGU6T2JqZWN0fX0sZ2V0IF9maXRXaWR0aCgpe3JldHVybiB0aGlzLmZpdEludG89PT13aW5kb3c/dGhpcy5maXRJbnRvLmlubmVyV2lkdGg6dGhpcy5maXRJbnRvLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRofSwKZ2V0IF9maXRIZWlnaHQoKXtyZXR1cm4gdGhpcy5maXRJbnRvPT09d2luZG93P3RoaXMuZml0SW50by5pbm5lckhlaWdodDp0aGlzLmZpdEludG8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0fSxnZXQgX2ZpdExlZnQoKXtyZXR1cm4gdGhpcy5maXRJbnRvPT09d2luZG93PzA6dGhpcy5maXRJbnRvLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnR9LGdldCBfZml0VG9wKCl7cmV0dXJuIHRoaXMuZml0SW50bz09PXdpbmRvdz8wOnRoaXMuZml0SW50by5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3B9LGdldCBfZGVmYXVsdFBvc2l0aW9uVGFyZ2V0KCl7dmFyIGE9UG9seW1lci5kb20odGhpcykucGFyZW50Tm9kZTthJiZhLm5vZGVUeXBlPT09Tm9kZS5ET0NVTUVOVF9GUkFHTUVOVF9OT0RFJiYoYT1hLmhvc3QpO3JldHVybiBhfSxnZXQgX2xvY2FsZUhvcml6b250YWxBbGlnbigpe2lmKHRoaXMuX2lzUlRMKXtpZigicmlnaHQiPT09dGhpcy5ob3Jpem9udGFsQWxpZ24pcmV0dXJuImxlZnQiOwppZigibGVmdCI9PT10aGlzLmhvcml6b250YWxBbGlnbilyZXR1cm4icmlnaHQifXJldHVybiB0aGlzLmhvcml6b250YWxBbGlnbn0sZ2V0IF9fc2hvdWxkUG9zaXRpb24oKXtyZXR1cm4odGhpcy5ob3Jpem9udGFsQWxpZ258fHRoaXMudmVydGljYWxBbGlnbikmJnRoaXMucG9zaXRpb25UYXJnZXR9LGF0dGFjaGVkOmZ1bmN0aW9uKCl7InVuZGVmaW5lZCI9PT10eXBlb2YgdGhpcy5faXNSVEwmJih0aGlzLl9pc1JUTD0icnRsIj09d2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcykuZGlyZWN0aW9uKTt0aGlzLnBvc2l0aW9uVGFyZ2V0PXRoaXMucG9zaXRpb25UYXJnZXR8fHRoaXMuX2RlZmF1bHRQb3NpdGlvblRhcmdldDt0aGlzLmF1dG9GaXRPbkF0dGFjaCYmKCJub25lIj09PXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMpLmRpc3BsYXk/c2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMuZml0KCl9LmJpbmQodGhpcykpOih3aW5kb3cuU2hhZHlET00mJlNoYWR5RE9NLmZsdXNoKCksCnRoaXMuZml0KCkpKX0sZGV0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl9fZGVmZXJyZWRGaXQmJihjbGVhclRpbWVvdXQodGhpcy5fX2RlZmVycmVkRml0KSx0aGlzLl9fZGVmZXJyZWRGaXQ9bnVsbCl9LGZpdDpmdW5jdGlvbigpe3RoaXMucG9zaXRpb24oKTt0aGlzLmNvbnN0cmFpbigpO3RoaXMuY2VudGVyKCl9LF9kaXNjb3ZlckluZm86ZnVuY3Rpb24oKXtpZighdGhpcy5fZml0SW5mbyl7dmFyIGE9d2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcyksYz13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLnNpemluZ1RhcmdldCk7dGhpcy5fZml0SW5mbz17aW5saW5lU3R5bGU6e3RvcDp0aGlzLnN0eWxlLnRvcHx8IiIsbGVmdDp0aGlzLnN0eWxlLmxlZnR8fCIiLHBvc2l0aW9uOnRoaXMuc3R5bGUucG9zaXRpb258fCIifSxzaXplcklubGluZVN0eWxlOnttYXhXaWR0aDp0aGlzLnNpemluZ1RhcmdldC5zdHlsZS5tYXhXaWR0aHx8IiIsbWF4SGVpZ2h0OnRoaXMuc2l6aW5nVGFyZ2V0LnN0eWxlLm1heEhlaWdodHx8CiIiLGJveFNpemluZzp0aGlzLnNpemluZ1RhcmdldC5zdHlsZS5ib3hTaXppbmd8fCIifSxwb3NpdGlvbmVkQnk6e3ZlcnRpY2FsbHk6ImF1dG8iIT09YS50b3A/InRvcCI6ImF1dG8iIT09YS5ib3R0b20/ImJvdHRvbSI6bnVsbCxob3Jpem9udGFsbHk6ImF1dG8iIT09YS5sZWZ0PyJsZWZ0IjoiYXV0byIhPT1hLnJpZ2h0PyJyaWdodCI6bnVsbH0sc2l6ZWRCeTp7aGVpZ2h0OiJub25lIiE9PWMubWF4SGVpZ2h0LHdpZHRoOiJub25lIiE9PWMubWF4V2lkdGgsbWluV2lkdGg6cGFyc2VJbnQoYy5taW5XaWR0aCwxMCl8fDAsbWluSGVpZ2h0OnBhcnNlSW50KGMubWluSGVpZ2h0LDEwKXx8MH0sbWFyZ2luOnt0b3A6cGFyc2VJbnQoYS5tYXJnaW5Ub3AsMTApfHwwLHJpZ2h0OnBhcnNlSW50KGEubWFyZ2luUmlnaHQsMTApfHwwLGJvdHRvbTpwYXJzZUludChhLm1hcmdpbkJvdHRvbSwxMCl8fDAsbGVmdDpwYXJzZUludChhLm1hcmdpbkxlZnQsMTApfHwwfX19fSxyZXNldEZpdDpmdW5jdGlvbigpe3ZhciBhPQp0aGlzLl9maXRJbmZvfHx7fSxjO2ZvcihjIGluIGEuc2l6ZXJJbmxpbmVTdHlsZSl0aGlzLnNpemluZ1RhcmdldC5zdHlsZVtjXT1hLnNpemVySW5saW5lU3R5bGVbY107Zm9yKGMgaW4gYS5pbmxpbmVTdHlsZSl0aGlzLnN0eWxlW2NdPWEuaW5saW5lU3R5bGVbY107dGhpcy5fZml0SW5mbz1udWxsfSxyZWZpdDpmdW5jdGlvbigpe3ZhciBhPXRoaXMuc2l6aW5nVGFyZ2V0LnNjcm9sbExlZnQsYz10aGlzLnNpemluZ1RhcmdldC5zY3JvbGxUb3A7dGhpcy5yZXNldEZpdCgpO3RoaXMuZml0KCk7dGhpcy5zaXppbmdUYXJnZXQuc2Nyb2xsTGVmdD1hO3RoaXMuc2l6aW5nVGFyZ2V0LnNjcm9sbFRvcD1jfSxwb3NpdGlvbjpmdW5jdGlvbigpe2lmKHRoaXMuX19zaG91bGRQb3NpdGlvbil7dGhpcy5fZGlzY292ZXJJbmZvKCk7dGhpcy5zdHlsZS5wb3NpdGlvbj0iZml4ZWQiO3RoaXMuc2l6aW5nVGFyZ2V0LnN0eWxlLmJveFNpemluZz0iYm9yZGVyLWJveCI7dGhpcy5zdHlsZS5sZWZ0PSIwcHgiOwp0aGlzLnN0eWxlLnRvcD0iMHB4Ijt2YXIgYT10aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGM9dGhpcy5fX2dldE5vcm1hbGl6ZWRSZWN0KHRoaXMucG9zaXRpb25UYXJnZXQpLGQ9dGhpcy5fX2dldE5vcm1hbGl6ZWRSZWN0KHRoaXMuZml0SW50byksZj10aGlzLl9maXRJbmZvLm1hcmdpbixnPXRoaXMuX19nZXRQb3NpdGlvbih0aGlzLl9sb2NhbGVIb3Jpem9udGFsQWxpZ24sdGhpcy52ZXJ0aWNhbEFsaWduLHt3aWR0aDphLndpZHRoK2YubGVmdCtmLnJpZ2h0LGhlaWdodDphLmhlaWdodCtmLnRvcCtmLmJvdHRvbX0sYSxjLGQpO2M9Zy5sZWZ0K2YubGVmdDtnPWcudG9wK2YudG9wO3ZhciBsPU1hdGgubWluKGQucmlnaHQtZi5yaWdodCxjK2Eud2lkdGgpLGs9TWF0aC5taW4oZC5ib3R0b20tZi5ib3R0b20sZythLmhlaWdodCk7Yz1NYXRoLm1heChkLmxlZnQrZi5sZWZ0LE1hdGgubWluKGMsbC10aGlzLl9maXRJbmZvLnNpemVkQnkubWluV2lkdGgpKTtnPU1hdGgubWF4KGQudG9wKwpmLnRvcCxNYXRoLm1pbihnLGstdGhpcy5fZml0SW5mby5zaXplZEJ5Lm1pbkhlaWdodCkpO3RoaXMuc2l6aW5nVGFyZ2V0LnN0eWxlLm1heFdpZHRoPU1hdGgubWF4KGwtYyx0aGlzLl9maXRJbmZvLnNpemVkQnkubWluV2lkdGgpKyJweCI7dGhpcy5zaXppbmdUYXJnZXQuc3R5bGUubWF4SGVpZ2h0PU1hdGgubWF4KGstZyx0aGlzLl9maXRJbmZvLnNpemVkQnkubWluSGVpZ2h0KSsicHgiO3RoaXMuc3R5bGUubGVmdD1jLWEubGVmdCsicHgiO3RoaXMuc3R5bGUudG9wPWctYS50b3ArInB4In19LGNvbnN0cmFpbjpmdW5jdGlvbigpe2lmKCF0aGlzLl9fc2hvdWxkUG9zaXRpb24pe3RoaXMuX2Rpc2NvdmVySW5mbygpO3ZhciBhPXRoaXMuX2ZpdEluZm87YS5wb3NpdGlvbmVkQnkudmVydGljYWxseXx8KHRoaXMuc3R5bGUucG9zaXRpb249ImZpeGVkIix0aGlzLnN0eWxlLnRvcD0iMHB4Iik7YS5wb3NpdGlvbmVkQnkuaG9yaXpvbnRhbGx5fHwodGhpcy5zdHlsZS5wb3NpdGlvbj0iZml4ZWQiLAp0aGlzLnN0eWxlLmxlZnQ9IjBweCIpO3RoaXMuc2l6aW5nVGFyZ2V0LnN0eWxlLmJveFNpemluZz0iYm9yZGVyLWJveCI7dmFyIGM9dGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTthLnNpemVkQnkuaGVpZ2h0fHx0aGlzLl9fc2l6ZURpbWVuc2lvbihjLGEucG9zaXRpb25lZEJ5LnZlcnRpY2FsbHksInRvcCIsImJvdHRvbSIsIkhlaWdodCIpO2Euc2l6ZWRCeS53aWR0aHx8dGhpcy5fX3NpemVEaW1lbnNpb24oYyxhLnBvc2l0aW9uZWRCeS5ob3Jpem9udGFsbHksImxlZnQiLCJyaWdodCIsIldpZHRoIil9fSxfc2l6ZURpbWVuc2lvbjpmdW5jdGlvbihhLGMsZCxmLGcpe3RoaXMuX19zaXplRGltZW5zaW9uKGEsYyxkLGYsZyl9LF9fc2l6ZURpbWVuc2lvbjpmdW5jdGlvbihhLGMsZCxmLGcpe3ZhciBsPXRoaXMuX2ZpdEluZm8saz10aGlzLl9fZ2V0Tm9ybWFsaXplZFJlY3QodGhpcy5maXRJbnRvKTtrPSJXaWR0aCI9PT1nP2sud2lkdGg6ay5oZWlnaHQ7Yz1jPT09Zjt2YXIgbT0KIm9mZnNldCIrZzt0aGlzLnNpemluZ1RhcmdldC5zdHlsZVsibWF4IitnXT1rLWwubWFyZ2luW2M/ZDpmXS0oYz9rLWFbZl06YVtkXSktKHRoaXNbbV0tdGhpcy5zaXppbmdUYXJnZXRbbV0pKyJweCJ9LGNlbnRlcjpmdW5jdGlvbigpe2lmKCF0aGlzLl9fc2hvdWxkUG9zaXRpb24pe3RoaXMuX2Rpc2NvdmVySW5mbygpO3ZhciBhPXRoaXMuX2ZpdEluZm8ucG9zaXRpb25lZEJ5O2lmKCFhLnZlcnRpY2FsbHl8fCFhLmhvcml6b250YWxseSl7dGhpcy5zdHlsZS5wb3NpdGlvbj0iZml4ZWQiO2EudmVydGljYWxseXx8KHRoaXMuc3R5bGUudG9wPSIwcHgiKTthLmhvcml6b250YWxseXx8KHRoaXMuc3R5bGUubGVmdD0iMHB4Iik7dmFyIGM9dGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxkPXRoaXMuX19nZXROb3JtYWxpemVkUmVjdCh0aGlzLmZpdEludG8pO2EudmVydGljYWxseXx8KHRoaXMuc3R5bGUudG9wPWQudG9wLWMudG9wKyhkLmhlaWdodC1jLmhlaWdodCkvMisicHgiKTthLmhvcml6b250YWxseXx8Cih0aGlzLnN0eWxlLmxlZnQ9ZC5sZWZ0LWMubGVmdCsoZC53aWR0aC1jLndpZHRoKS8yKyJweCIpfX19LF9fZ2V0Tm9ybWFsaXplZFJlY3Q6ZnVuY3Rpb24oYSl7cmV0dXJuIGE9PT1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnR8fGE9PT13aW5kb3c/e3RvcDowLGxlZnQ6MCx3aWR0aDp3aW5kb3cuaW5uZXJXaWR0aCxoZWlnaHQ6d2luZG93LmlubmVySGVpZ2h0LHJpZ2h0OndpbmRvdy5pbm5lcldpZHRoLGJvdHRvbTp3aW5kb3cuaW5uZXJIZWlnaHR9OmEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCl9LF9fZ2V0T2Zmc2NyZWVuQXJlYTpmdW5jdGlvbihhLGMsZCl7cmV0dXJuIE1hdGguYWJzKE1hdGgubWluKDAsYS50b3ApK01hdGgubWluKDAsZC5ib3R0b20tKGEudG9wK2MuaGVpZ2h0KSkpKmMud2lkdGgrTWF0aC5hYnMoTWF0aC5taW4oMCxhLmxlZnQpK01hdGgubWluKDAsZC5yaWdodC0oYS5sZWZ0K2Mud2lkdGgpKSkqYy5oZWlnaHR9LF9fZ2V0UG9zaXRpb246ZnVuY3Rpb24oYSxjLApkLGYsZyxsKXt2YXIgaz1be3ZlcnRpY2FsQWxpZ246InRvcCIsaG9yaXpvbnRhbEFsaWduOiJsZWZ0Iix0b3A6Zy50b3ArdGhpcy52ZXJ0aWNhbE9mZnNldCxsZWZ0OmcubGVmdCt0aGlzLmhvcml6b250YWxPZmZzZXR9LHt2ZXJ0aWNhbEFsaWduOiJ0b3AiLGhvcml6b250YWxBbGlnbjoicmlnaHQiLHRvcDpnLnRvcCt0aGlzLnZlcnRpY2FsT2Zmc2V0LGxlZnQ6Zy5yaWdodC1kLndpZHRoLXRoaXMuaG9yaXpvbnRhbE9mZnNldH0se3ZlcnRpY2FsQWxpZ246ImJvdHRvbSIsaG9yaXpvbnRhbEFsaWduOiJsZWZ0Iix0b3A6Zy5ib3R0b20tZC5oZWlnaHQtdGhpcy52ZXJ0aWNhbE9mZnNldCxsZWZ0OmcubGVmdCt0aGlzLmhvcml6b250YWxPZmZzZXR9LHt2ZXJ0aWNhbEFsaWduOiJib3R0b20iLGhvcml6b250YWxBbGlnbjoicmlnaHQiLHRvcDpnLmJvdHRvbS1kLmhlaWdodC10aGlzLnZlcnRpY2FsT2Zmc2V0LGxlZnQ6Zy5yaWdodC1kLndpZHRoLXRoaXMuaG9yaXpvbnRhbE9mZnNldH1dOwppZih0aGlzLm5vT3ZlcmxhcCl7Zm9yKHZhciBtPTAscD1rLmxlbmd0aDttPHA7bSsrKXt2YXIgcT17fSxyO2ZvcihyIGluIGtbbV0pcVtyXT1rW21dW3JdO2sucHVzaChxKX1rWzBdLnRvcD1rWzFdLnRvcCs9Zy5oZWlnaHQ7a1syXS50b3A9a1szXS50b3AtPWcuaGVpZ2h0O2tbNF0ubGVmdD1rWzZdLmxlZnQrPWcud2lkdGg7a1s1XS5sZWZ0PWtbN10ubGVmdC09Zy53aWR0aH1jPSJhdXRvIj09PWM/bnVsbDpjO2E9ImF1dG8iPT09YT9udWxsOmE7YSYmImNlbnRlciIhPT1hfHwoay5wdXNoKHt2ZXJ0aWNhbEFsaWduOiJ0b3AiLGhvcml6b250YWxBbGlnbjoiY2VudGVyIix0b3A6Zy50b3ArdGhpcy52ZXJ0aWNhbE9mZnNldCsodGhpcy5ub092ZXJsYXA/Zy5oZWlnaHQ6MCksbGVmdDpnLmxlZnQtZi53aWR0aC8yK2cud2lkdGgvMit0aGlzLmhvcml6b250YWxPZmZzZXR9KSxrLnB1c2goe3ZlcnRpY2FsQWxpZ246ImJvdHRvbSIsaG9yaXpvbnRhbEFsaWduOiJjZW50ZXIiLHRvcDpnLmJvdHRvbS0KZC5oZWlnaHQtdGhpcy52ZXJ0aWNhbE9mZnNldC0odGhpcy5ub092ZXJsYXA/Zy5oZWlnaHQ6MCksbGVmdDpnLmxlZnQtZi53aWR0aC8yK2cud2lkdGgvMit0aGlzLmhvcml6b250YWxPZmZzZXR9KSk7YyYmIm1pZGRsZSIhPT1jfHwoay5wdXNoKHt2ZXJ0aWNhbEFsaWduOiJtaWRkbGUiLGhvcml6b250YWxBbGlnbjoibGVmdCIsdG9wOmcudG9wLWYuaGVpZ2h0LzIrZy5oZWlnaHQvMit0aGlzLnZlcnRpY2FsT2Zmc2V0LGxlZnQ6Zy5sZWZ0K3RoaXMuaG9yaXpvbnRhbE9mZnNldCsodGhpcy5ub092ZXJsYXA/Zy53aWR0aDowKX0pLGsucHVzaCh7dmVydGljYWxBbGlnbjoibWlkZGxlIixob3Jpem9udGFsQWxpZ246InJpZ2h0Iix0b3A6Zy50b3AtZi5oZWlnaHQvMitnLmhlaWdodC8yK3RoaXMudmVydGljYWxPZmZzZXQsbGVmdDpnLnJpZ2h0LWQud2lkdGgtdGhpcy5ob3Jpem9udGFsT2Zmc2V0LSh0aGlzLm5vT3ZlcmxhcD9nLndpZHRoOjApfSkpOyJtaWRkbGUiPT09YyYmImNlbnRlciI9PT0KYSYmay5wdXNoKHt2ZXJ0aWNhbEFsaWduOiJtaWRkbGUiLGhvcml6b250YWxBbGlnbjoiY2VudGVyIix0b3A6Zy50b3AtZi5oZWlnaHQvMitnLmhlaWdodC8yK3RoaXMudmVydGljYWxPZmZzZXQsbGVmdDpnLmxlZnQtZi53aWR0aC8yK2cud2lkdGgvMit0aGlzLmhvcml6b250YWxPZmZzZXR9KTtmb3IobT0wO208ay5sZW5ndGg7bSsrKXtmPWtbbV07Zz1mLnZlcnRpY2FsQWxpZ249PT1jO3A9Zi5ob3Jpem9udGFsQWxpZ249PT1hO2lmKCF0aGlzLmR5bmFtaWNBbGlnbiYmIXRoaXMubm9PdmVybGFwJiZnJiZwKXt2YXIgdD1mO2JyZWFrfXE9KCFjfHxnKSYmKCFhfHxwKTtpZih0aGlzLmR5bmFtaWNBbGlnbnx8cSl7Zi5vZmZzY3JlZW5BcmVhPXRoaXMuX19nZXRPZmZzY3JlZW5BcmVhKGYsZCxsKTtpZigwPT09Zi5vZmZzY3JlZW5BcmVhJiZxKXt0PWY7YnJlYWt9dD10fHxmO3E9Zi5vZmZzY3JlZW5BcmVhLXQub2Zmc2NyZWVuQXJlYTtpZigwPnF8fDA9PT1xJiYoZ3x8cCkpdD1mfX1yZXR1cm4gdH19Owo8L3NjcmlwdD4KCgoKPHNjcmlwdD4vL35+V0VCUEFUSH5+L2lyb24tcmVzaXphYmxlLWJlaGF2aW9yL2lyb24tcmVzaXphYmxlLWJlaGF2aW9yLmh0bWwuanMKUG9seW1lci5Jcm9uUmVzaXphYmxlQmVoYXZpb3I9e3Byb3BlcnRpZXM6e19wYXJlbnRSZXNpemFibGU6e3R5cGU6T2JqZWN0LG9ic2VydmVyOiJfcGFyZW50UmVzaXphYmxlQ2hhbmdlZCJ9LF9ub3RpZnlpbmdEZXNjZW5kYW50Ont0eXBlOkJvb2xlYW4sdmFsdWU6ITF9fSxsaXN0ZW5lcnM6eyJpcm9uLXJlcXVlc3QtcmVzaXplLW5vdGlmaWNhdGlvbnMiOiJfb25Jcm9uUmVxdWVzdFJlc2l6ZU5vdGlmaWNhdGlvbnMifSxjcmVhdGVkOmZ1bmN0aW9uKCl7dGhpcy5faW50ZXJlc3RlZFJlc2l6YWJsZXM9W107dGhpcy5fYm91bmROb3RpZnlSZXNpemU9dGhpcy5ub3RpZnlSZXNpemUuYmluZCh0aGlzKX0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl9yZXF1ZXN0UmVzaXplTm90aWZpY2F0aW9ucygpfSxkZXRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX3BhcmVudFJlc2l6YWJsZT90aGlzLl9wYXJlbnRSZXNpemFibGUuc3RvcFJlc2l6ZU5vdGlmaWNhdGlvbnNGb3IodGhpcyk6d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsCnRoaXMuX2JvdW5kTm90aWZ5UmVzaXplKTt0aGlzLl9wYXJlbnRSZXNpemFibGU9bnVsbH0sbm90aWZ5UmVzaXplOmZ1bmN0aW9uKCl7dGhpcy5pc0F0dGFjaGVkJiYodGhpcy5faW50ZXJlc3RlZFJlc2l6YWJsZXMuZm9yRWFjaChmdW5jdGlvbihhKXt0aGlzLnJlc2l6ZXJTaG91bGROb3RpZnkoYSkmJnRoaXMuX25vdGlmeURlc2NlbmRhbnQoYSl9LHRoaXMpLHRoaXMuX2ZpcmVSZXNpemUoKSl9LGFzc2lnblBhcmVudFJlc2l6YWJsZTpmdW5jdGlvbihhKXt0aGlzLl9wYXJlbnRSZXNpemFibGU9YX0sc3RvcFJlc2l6ZU5vdGlmaWNhdGlvbnNGb3I6ZnVuY3Rpb24oYSl7dmFyIGM9dGhpcy5faW50ZXJlc3RlZFJlc2l6YWJsZXMuaW5kZXhPZihhKTstMTxjJiYodGhpcy5faW50ZXJlc3RlZFJlc2l6YWJsZXMuc3BsaWNlKGMsMSksdGhpcy51bmxpc3RlbihhLCJpcm9uLXJlc2l6ZSIsIl9vbkRlc2NlbmRhbnRJcm9uUmVzaXplIikpfSxyZXNpemVyU2hvdWxkTm90aWZ5OmZ1bmN0aW9uKCl7cmV0dXJuITB9LApfb25EZXNjZW5kYW50SXJvblJlc2l6ZTpmdW5jdGlvbihhKXt0aGlzLl9ub3RpZnlpbmdEZXNjZW5kYW50P2Euc3RvcFByb3BhZ2F0aW9uKCk6UG9seW1lci5TZXR0aW5ncy51c2VTaGFkb3d8fHRoaXMuX2ZpcmVSZXNpemUoKX0sX2ZpcmVSZXNpemU6ZnVuY3Rpb24oKXt0aGlzLmZpcmUoImlyb24tcmVzaXplIixudWxsLHtub2RlOnRoaXMsYnViYmxlczohMX0pfSxfb25Jcm9uUmVxdWVzdFJlc2l6ZU5vdGlmaWNhdGlvbnM6ZnVuY3Rpb24oYSl7dmFyIGM9UG9seW1lci5kb20oYSkucm9vdFRhcmdldDtjIT09dGhpcyYmKC0xPT09dGhpcy5faW50ZXJlc3RlZFJlc2l6YWJsZXMuaW5kZXhPZihjKSYmKHRoaXMuX2ludGVyZXN0ZWRSZXNpemFibGVzLnB1c2goYyksdGhpcy5saXN0ZW4oYywiaXJvbi1yZXNpemUiLCJfb25EZXNjZW5kYW50SXJvblJlc2l6ZSIpKSxjLmFzc2lnblBhcmVudFJlc2l6YWJsZSh0aGlzKSx0aGlzLl9ub3RpZnlEZXNjZW5kYW50KGMpLGEuc3RvcFByb3BhZ2F0aW9uKCkpfSwKX3BhcmVudFJlc2l6YWJsZUNoYW5nZWQ6ZnVuY3Rpb24oYSl7YSYmd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsdGhpcy5fYm91bmROb3RpZnlSZXNpemUpfSxfbm90aWZ5RGVzY2VuZGFudDpmdW5jdGlvbihhKXt0aGlzLmlzQXR0YWNoZWQmJih0aGlzLl9ub3RpZnlpbmdEZXNjZW5kYW50PSEwLGEubm90aWZ5UmVzaXplKCksdGhpcy5fbm90aWZ5aW5nRGVzY2VuZGFudD0hMSl9LF9yZXF1ZXN0UmVzaXplTm90aWZpY2F0aW9uczpmdW5jdGlvbigpe2lmKHRoaXMuaXNBdHRhY2hlZClpZigibG9hZGluZyI9PT1kb2N1bWVudC5yZWFkeVN0YXRlKXt2YXIgYT10aGlzLl9yZXF1ZXN0UmVzaXplTm90aWZpY2F0aW9ucy5iaW5kKHRoaXMpO2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInJlYWR5c3RhdGVjaGFuZ2UiLGZ1bmN0aW9uIGQoKXtkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJyZWFkeXN0YXRlY2hhbmdlIixkKTthKCl9KX1lbHNlIHRoaXMuZmlyZSgiaXJvbi1yZXF1ZXN0LXJlc2l6ZS1ub3RpZmljYXRpb25zIiwKbnVsbCx7bm9kZTp0aGlzLGJ1YmJsZXM6ITAsY2FuY2VsYWJsZTohMH0pLHRoaXMuX3BhcmVudFJlc2l6YWJsZXx8KHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJyZXNpemUiLHRoaXMuX2JvdW5kTm90aWZ5UmVzaXplKSx0aGlzLm5vdGlmeVJlc2l6ZSgpKX19Owo8L3NjcmlwdD4KCgoKCgoKCjxkb20tbW9kdWxlIGlkPSJpcm9uLW92ZXJsYXktYmFja2Ryb3AiPgoKICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWlyb24tb3ZlcmxheS1iYWNrZHJvcC1iYWNrZ3JvdW5kLWNvbG9yLCAjMDAwKTsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4yczsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICBAYXBwbHkgLS1pcm9uLW92ZXJsYXktYmFja2Ryb3A7CiAgICAgIH0KCiAgICAgIDpob3N0KC5vcGVuZWQpIHsKICAgICAgICBvcGFjaXR5OiB2YXIoLS1pcm9uLW92ZXJsYXktYmFja2Ryb3Atb3BhY2l0eSwgMC42KTsKICAgICAgICBwb2ludGVyLWV2ZW50czogYXV0bzsKICAgICAgICBAYXBwbHkgLS1pcm9uLW92ZXJsYXktYmFja2Ryb3Atb3BlbmVkOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxzbG90Pjwvc2xvdD4KICA8L3RlbXBsYXRlPgoKPC9kb20tbW9kdWxlPgoKPHNjcmlwdD4vL35+V0VCUEFUSH5+L2lyb24tb3ZlcmxheS1iZWhhdmlvci9pcm9uLW92ZXJsYXktYmFja2Ryb3AuaHRtbC5qcwooZnVuY3Rpb24oKXtQb2x5bWVyKHtpczoiaXJvbi1vdmVybGF5LWJhY2tkcm9wIixwcm9wZXJ0aWVzOntvcGVuZWQ6e3JlZmxlY3RUb0F0dHJpYnV0ZTohMCx0eXBlOkJvb2xlYW4sdmFsdWU6ITEsb2JzZXJ2ZXI6Il9vcGVuZWRDaGFuZ2VkIn19LGxpc3RlbmVyczp7dHJhbnNpdGlvbmVuZDoiX29uVHJhbnNpdGlvbmVuZCJ9LGNyZWF0ZWQ6ZnVuY3Rpb24oKXt0aGlzLl9fb3BlbmVkUmFmPW51bGx9LGF0dGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5vcGVuZWQmJnRoaXMuX29wZW5lZENoYW5nZWQodGhpcy5vcGVuZWQpfSxwcmVwYXJlOmZ1bmN0aW9uKCl7dGhpcy5vcGVuZWQmJiF0aGlzLnBhcmVudE5vZGUmJlBvbHltZXIuZG9tKGRvY3VtZW50LmJvZHkpLmFwcGVuZENoaWxkKHRoaXMpfSxvcGVuOmZ1bmN0aW9uKCl7dGhpcy5vcGVuZWQ9ITB9LGNsb3NlOmZ1bmN0aW9uKCl7dGhpcy5vcGVuZWQ9ITF9LGNvbXBsZXRlOmZ1bmN0aW9uKCl7dGhpcy5vcGVuZWR8fHRoaXMucGFyZW50Tm9kZSE9PQpkb2N1bWVudC5ib2R5fHxQb2x5bWVyLmRvbSh0aGlzLnBhcmVudE5vZGUpLnJlbW92ZUNoaWxkKHRoaXMpfSxfb25UcmFuc2l0aW9uZW5kOmZ1bmN0aW9uKGEpe2EmJmEudGFyZ2V0PT09dGhpcyYmdGhpcy5jb21wbGV0ZSgpfSxfb3BlbmVkQ2hhbmdlZDpmdW5jdGlvbihhKXthP3RoaXMucHJlcGFyZSgpOihhPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMpLCIwcyIhPT1hLnRyYW5zaXRpb25EdXJhdGlvbiYmMCE9YS5vcGFjaXR5fHx0aGlzLmNvbXBsZXRlKCkpO3RoaXMuaXNBdHRhY2hlZCYmKHRoaXMuX19vcGVuZWRSYWYmJih3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5fX29wZW5lZFJhZiksdGhpcy5fX29wZW5lZFJhZj1udWxsKSx0aGlzLnNjcm9sbFRvcD10aGlzLnNjcm9sbFRvcCx0aGlzLl9fb3BlbmVkUmFmPXdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24oKXt0aGlzLl9fb3BlbmVkUmFmPW51bGw7dGhpcy50b2dnbGVDbGFzcygib3BlbmVkIiwKdGhpcy5vcGVuZWQpfS5iaW5kKHRoaXMpKSl9fSl9KSgpOwo8L3NjcmlwdD4KCgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vaXJvbi1vdmVybGF5LWJlaGF2aW9yL2lyb24tb3ZlcmxheS1tYW5hZ2VyLmh0bWwuanMKUG9seW1lci5Jcm9uT3ZlcmxheU1hbmFnZXJDbGFzcz1mdW5jdGlvbigpe3RoaXMuX292ZXJsYXlzPVtdO3RoaXMuX21pbmltdW1aPTEwMTt0aGlzLl9iYWNrZHJvcEVsZW1lbnQ9bnVsbDtQb2x5bWVyLkdlc3R1cmVzLmFkZChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsInRhcCIsZnVuY3Rpb24oKXt9KTtkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ0YXAiLHRoaXMuX29uQ2FwdHVyZUNsaWNrLmJpbmQodGhpcyksITApO2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIix0aGlzLl9vbkNhcHR1cmVGb2N1cy5iaW5kKHRoaXMpLCEwKTtkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIix0aGlzLl9vbkNhcHR1cmVLZXlEb3duLmJpbmQodGhpcyksITApfTsKUG9seW1lci5Jcm9uT3ZlcmxheU1hbmFnZXJDbGFzcy5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlBvbHltZXIuSXJvbk92ZXJsYXlNYW5hZ2VyQ2xhc3MsZ2V0IGJhY2tkcm9wRWxlbWVudCgpe3RoaXMuX2JhY2tkcm9wRWxlbWVudHx8KHRoaXMuX2JhY2tkcm9wRWxlbWVudD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpcm9uLW92ZXJsYXktYmFja2Ryb3AiKSk7cmV0dXJuIHRoaXMuX2JhY2tkcm9wRWxlbWVudH0sZ2V0IGRlZXBBY3RpdmVFbGVtZW50KCl7dmFyIGE9ZG9jdW1lbnQuYWN0aXZlRWxlbWVudDthJiYhMSE9PWEgaW5zdGFuY2VvZiBFbGVtZW50fHwoYT1kb2N1bWVudC5ib2R5KTtmb3IoO2Eucm9vdCYmUG9seW1lci5kb20oYS5yb290KS5hY3RpdmVFbGVtZW50OylhPVBvbHltZXIuZG9tKGEucm9vdCkuYWN0aXZlRWxlbWVudDtyZXR1cm4gYX0sX2JyaW5nT3ZlcmxheUF0SW5kZXhUb0Zyb250OmZ1bmN0aW9uKGEpe3ZhciBjPXRoaXMuX292ZXJsYXlzW2FdO2lmKGMpe3ZhciBkPQp0aGlzLl9vdmVybGF5cy5sZW5ndGgtMSxmPXRoaXMuX292ZXJsYXlzW2RdO2YmJnRoaXMuX3Nob3VsZEJlQmVoaW5kT3ZlcmxheShjLGYpJiZkLS07aWYoIShhPj1kKSl7Zj1NYXRoLm1heCh0aGlzLmN1cnJlbnRPdmVybGF5WigpLHRoaXMuX21pbmltdW1aKTtmb3IodGhpcy5fZ2V0WihjKTw9ZiYmdGhpcy5fYXBwbHlPdmVybGF5WihjLGYpO2E8ZDspdGhpcy5fb3ZlcmxheXNbYV09dGhpcy5fb3ZlcmxheXNbYSsxXSxhKys7dGhpcy5fb3ZlcmxheXNbZF09Y319fSxhZGRPclJlbW92ZU92ZXJsYXk6ZnVuY3Rpb24oYSl7YS5vcGVuZWQ/dGhpcy5hZGRPdmVybGF5KGEpOnRoaXMucmVtb3ZlT3ZlcmxheShhKX0sYWRkT3ZlcmxheTpmdW5jdGlvbihhKXt2YXIgYz10aGlzLl9vdmVybGF5cy5pbmRleE9mKGEpO2lmKDA8PWMpdGhpcy5fYnJpbmdPdmVybGF5QXRJbmRleFRvRnJvbnQoYyk7ZWxzZXtjPXRoaXMuX292ZXJsYXlzLmxlbmd0aDt2YXIgZD10aGlzLl9vdmVybGF5c1tjLTFdLGY9Ck1hdGgubWF4KHRoaXMuX2dldFooZCksdGhpcy5fbWluaW11bVopLGc9dGhpcy5fZ2V0WihhKTtkJiZ0aGlzLl9zaG91bGRCZUJlaGluZE92ZXJsYXkoYSxkKSYmKHRoaXMuX2FwcGx5T3ZlcmxheVooZCxmKSxjLS0sZj1NYXRoLm1heCh0aGlzLl9nZXRaKHRoaXMuX292ZXJsYXlzW2MtMV0pLHRoaXMuX21pbmltdW1aKSk7Zzw9ZiYmdGhpcy5fYXBwbHlPdmVybGF5WihhLGYpO3RoaXMuX292ZXJsYXlzLnNwbGljZShjLDAsYSl9dGhpcy50cmFja0JhY2tkcm9wKCl9LHJlbW92ZU92ZXJsYXk6ZnVuY3Rpb24oYSl7YT10aGlzLl9vdmVybGF5cy5pbmRleE9mKGEpOy0xIT09YSYmKHRoaXMuX292ZXJsYXlzLnNwbGljZShhLDEpLHRoaXMudHJhY2tCYWNrZHJvcCgpKX0sY3VycmVudE92ZXJsYXk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fb3ZlcmxheXNbdGhpcy5fb3ZlcmxheXMubGVuZ3RoLTFdfSxjdXJyZW50T3ZlcmxheVo6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZ2V0Wih0aGlzLmN1cnJlbnRPdmVybGF5KCkpfSwKZW5zdXJlTWluaW11bVo6ZnVuY3Rpb24oYSl7dGhpcy5fbWluaW11bVo9TWF0aC5tYXgodGhpcy5fbWluaW11bVosYSl9LGZvY3VzT3ZlcmxheTpmdW5jdGlvbigpe3ZhciBhPXRoaXMuY3VycmVudE92ZXJsYXkoKTthJiZhLl9hcHBseUZvY3VzKCl9LHRyYWNrQmFja2Ryb3A6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLl9vdmVybGF5V2l0aEJhY2tkcm9wKCk7aWYoYXx8dGhpcy5fYmFja2Ryb3BFbGVtZW50KXRoaXMuYmFja2Ryb3BFbGVtZW50LnN0eWxlLnpJbmRleD10aGlzLl9nZXRaKGEpLTEsdGhpcy5iYWNrZHJvcEVsZW1lbnQub3BlbmVkPSEhYSx0aGlzLmJhY2tkcm9wRWxlbWVudC5wcmVwYXJlKCl9LGdldEJhY2tkcm9wczpmdW5jdGlvbigpe2Zvcih2YXIgYT1bXSxjPTA7Yzx0aGlzLl9vdmVybGF5cy5sZW5ndGg7YysrKXRoaXMuX292ZXJsYXlzW2NdLndpdGhCYWNrZHJvcCYmYS5wdXNoKHRoaXMuX292ZXJsYXlzW2NdKTtyZXR1cm4gYX0sYmFja2Ryb3BaOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2dldFoodGhpcy5fb3ZlcmxheVdpdGhCYWNrZHJvcCgpKS0KMX0sX292ZXJsYXlXaXRoQmFja2Ryb3A6ZnVuY3Rpb24oKXtmb3IodmFyIGE9dGhpcy5fb3ZlcmxheXMubGVuZ3RoLTE7MDw9YTthLS0paWYodGhpcy5fb3ZlcmxheXNbYV0ud2l0aEJhY2tkcm9wKXJldHVybiB0aGlzLl9vdmVybGF5c1thXX0sX2dldFo6ZnVuY3Rpb24oYSl7dmFyIGM9dGhpcy5fbWluaW11bVo7YSYmKGE9TnVtYmVyKGEuc3R5bGUuekluZGV4fHx3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShhKS56SW5kZXgpLGE9PT1hJiYoYz1hKSk7cmV0dXJuIGN9LF9zZXRaOmZ1bmN0aW9uKGEsYyl7YS5zdHlsZS56SW5kZXg9Y30sX2FwcGx5T3ZlcmxheVo6ZnVuY3Rpb24oYSxjKXt0aGlzLl9zZXRaKGEsYysyKX0sX292ZXJsYXlJblBhdGg6ZnVuY3Rpb24oYSl7YT1hfHxbXTtmb3IodmFyIGM9MDtjPGEubGVuZ3RoO2MrKylpZihhW2NdLl9tYW5hZ2VyPT09dGhpcylyZXR1cm4gYVtjXX0sX29uQ2FwdHVyZUNsaWNrOmZ1bmN0aW9uKGEpe3ZhciBjPXRoaXMuX292ZXJsYXlzLmxlbmd0aC0KMTtpZigtMSE9PWMpZm9yKHZhciBkPVBvbHltZXIuZG9tKGEpLnBhdGgsZjsoZj10aGlzLl9vdmVybGF5c1tjXSkmJnRoaXMuX292ZXJsYXlJblBhdGgoZCkhPT1mOylpZihmLl9vbkNhcHR1cmVDbGljayhhKSxmLmFsbG93Q2xpY2tUaHJvdWdoKWMtLTtlbHNlIGJyZWFrfSxfb25DYXB0dXJlRm9jdXM6ZnVuY3Rpb24oYSl7dmFyIGM9dGhpcy5jdXJyZW50T3ZlcmxheSgpO2MmJmMuX29uQ2FwdHVyZUZvY3VzKGEpfSxfb25DYXB0dXJlS2V5RG93bjpmdW5jdGlvbihhKXt2YXIgYz10aGlzLmN1cnJlbnRPdmVybGF5KCk7YyYmKFBvbHltZXIuSXJvbkExMXlLZXlzQmVoYXZpb3Iua2V5Ym9hcmRFdmVudE1hdGNoZXNLZXlzKGEsImVzYyIpP2MuX29uQ2FwdHVyZUVzYyhhKTpQb2x5bWVyLklyb25BMTF5S2V5c0JlaGF2aW9yLmtleWJvYXJkRXZlbnRNYXRjaGVzS2V5cyhhLCJ0YWIiKSYmYy5fb25DYXB0dXJlVGFiKGEpKX0sX3Nob3VsZEJlQmVoaW5kT3ZlcmxheTpmdW5jdGlvbihhLGMpe3JldHVybiFhLmFsd2F5c09uVG9wJiYKYy5hbHdheXNPblRvcH19O1BvbHltZXIuSXJvbk92ZXJsYXlNYW5hZ2VyPW5ldyBQb2x5bWVyLklyb25PdmVybGF5TWFuYWdlckNsYXNzOwo8L3NjcmlwdD4KCgoKPHNjcmlwdD4vL35+V0VCUEFUSH5+L2lyb24tb3ZlcmxheS1iZWhhdmlvci9pcm9uLXNjcm9sbC1tYW5hZ2VyLmh0bWwuanMKKGZ1bmN0aW9uKCl7dmFyIGE9MCxjPTAsZD1udWxsLGY9W10sZz1bIndoZWVsIiwibW91c2V3aGVlbCIsIkRPTU1vdXNlU2Nyb2xsIiwidG91Y2hzdGFydCIsInRvdWNobW92ZSJdO1BvbHltZXIuSXJvblNjcm9sbE1hbmFnZXI9e2dldCBjdXJyZW50TG9ja2luZ0VsZW1lbnQoKXtyZXR1cm4gdGhpcy5fbG9ja2luZ0VsZW1lbnRzW3RoaXMuX2xvY2tpbmdFbGVtZW50cy5sZW5ndGgtMV19LGVsZW1lbnRJc1Njcm9sbExvY2tlZDpmdW5jdGlvbihsKXt2YXIgaz10aGlzLmN1cnJlbnRMb2NraW5nRWxlbWVudDtpZih2b2lkIDA9PT1rKXJldHVybiExO2lmKHRoaXMuX2hhc0NhY2hlZExvY2tlZEVsZW1lbnQobCkpcmV0dXJuITA7aWYodGhpcy5faGFzQ2FjaGVkVW5sb2NrZWRFbGVtZW50KGwpKXJldHVybiExOyhrPSEhayYmayE9PWwmJiF0aGlzLl9jb21wb3NlZFRyZWVDb250YWlucyhrLGwpKT90aGlzLl9sb2NrZWRFbGVtZW50Q2FjaGUucHVzaChsKTp0aGlzLl91bmxvY2tlZEVsZW1lbnRDYWNoZS5wdXNoKGwpOwpyZXR1cm4ga30scHVzaFNjcm9sbExvY2s6ZnVuY3Rpb24obCl7MDw9dGhpcy5fbG9ja2luZ0VsZW1lbnRzLmluZGV4T2YobCl8fCgwPT09dGhpcy5fbG9ja2luZ0VsZW1lbnRzLmxlbmd0aCYmdGhpcy5fbG9ja1Njcm9sbEludGVyYWN0aW9ucygpLHRoaXMuX2xvY2tpbmdFbGVtZW50cy5wdXNoKGwpLHRoaXMuX2xvY2tlZEVsZW1lbnRDYWNoZT1bXSx0aGlzLl91bmxvY2tlZEVsZW1lbnRDYWNoZT1bXSl9LHJlbW92ZVNjcm9sbExvY2s6ZnVuY3Rpb24obCl7bD10aGlzLl9sb2NraW5nRWxlbWVudHMuaW5kZXhPZihsKTstMSE9PWwmJih0aGlzLl9sb2NraW5nRWxlbWVudHMuc3BsaWNlKGwsMSksdGhpcy5fbG9ja2VkRWxlbWVudENhY2hlPVtdLHRoaXMuX3VubG9ja2VkRWxlbWVudENhY2hlPVtdLDA9PT10aGlzLl9sb2NraW5nRWxlbWVudHMubGVuZ3RoJiZ0aGlzLl91bmxvY2tTY3JvbGxJbnRlcmFjdGlvbnMoKSl9LF9sb2NraW5nRWxlbWVudHM6W10sX2xvY2tlZEVsZW1lbnRDYWNoZTpudWxsLApfdW5sb2NrZWRFbGVtZW50Q2FjaGU6bnVsbCxfaGFzQ2FjaGVkTG9ja2VkRWxlbWVudDpmdW5jdGlvbihsKXtyZXR1cm4tMTx0aGlzLl9sb2NrZWRFbGVtZW50Q2FjaGUuaW5kZXhPZihsKX0sX2hhc0NhY2hlZFVubG9ja2VkRWxlbWVudDpmdW5jdGlvbihsKXtyZXR1cm4tMTx0aGlzLl91bmxvY2tlZEVsZW1lbnRDYWNoZS5pbmRleE9mKGwpfSxfY29tcG9zZWRUcmVlQ29udGFpbnM6ZnVuY3Rpb24obCxrKXt2YXIgbSxwO2lmKGwuY29udGFpbnMoaykpcmV0dXJuITA7bD1Qb2x5bWVyLmRvbShsKS5xdWVyeVNlbGVjdG9yQWxsKCJjb250ZW50LHNsb3QiKTtmb3IobT0wO208bC5sZW5ndGg7KyttKXt2YXIgcT1Qb2x5bWVyLmRvbShsW21dKS5nZXREaXN0cmlidXRlZE5vZGVzKCk7Zm9yKHA9MDtwPHEubGVuZ3RoOysrcClpZihxW3BdLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUmJnRoaXMuX2NvbXBvc2VkVHJlZUNvbnRhaW5zKHFbcF0saykpcmV0dXJuITB9cmV0dXJuITF9LF9zY3JvbGxJbnRlcmFjdGlvbkhhbmRsZXI6ZnVuY3Rpb24obCl7bC5jYW5jZWxhYmxlJiYKdGhpcy5fc2hvdWxkUHJldmVudFNjcm9sbGluZyhsKSYmbC5wcmV2ZW50RGVmYXVsdCgpO2wudGFyZ2V0VG91Y2hlcyYmKGw9bC50YXJnZXRUb3VjaGVzWzBdLGE9bC5wYWdlWCxjPWwucGFnZVkpfSxfbG9ja1Njcm9sbEludGVyYWN0aW9uczpmdW5jdGlvbigpe3RoaXMuX2JvdW5kU2Nyb2xsSGFuZGxlcj10aGlzLl9ib3VuZFNjcm9sbEhhbmRsZXJ8fHRoaXMuX3Njcm9sbEludGVyYWN0aW9uSGFuZGxlci5iaW5kKHRoaXMpO2Zvcih2YXIgbD0wLGs9Zy5sZW5ndGg7bDxrO2wrKylkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKGdbbF0sdGhpcy5fYm91bmRTY3JvbGxIYW5kbGVyLHtjYXB0dXJlOiEwLHBhc3NpdmU6ITF9KX0sX3VubG9ja1Njcm9sbEludGVyYWN0aW9uczpmdW5jdGlvbigpe2Zvcih2YXIgbD0wLGs9Zy5sZW5ndGg7bDxrO2wrKylkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKGdbbF0sdGhpcy5fYm91bmRTY3JvbGxIYW5kbGVyLHtjYXB0dXJlOiEwLHBhc3NpdmU6ITF9KX0sCl9zaG91bGRQcmV2ZW50U2Nyb2xsaW5nOmZ1bmN0aW9uKGwpe3ZhciBrPVBvbHltZXIuZG9tKGwpLnJvb3RUYXJnZXQ7InRvdWNobW92ZSIhPT1sLnR5cGUmJmQhPT1rJiYoZD1rLGY9dGhpcy5fZ2V0U2Nyb2xsYWJsZU5vZGVzKFBvbHltZXIuZG9tKGwpLnBhdGgpKTtpZighZi5sZW5ndGgpcmV0dXJuITA7aWYoInRvdWNoc3RhcnQiPT09bC50eXBlKXJldHVybiExO2w9dGhpcy5fZ2V0U2Nyb2xsSW5mbyhsKTtyZXR1cm4hdGhpcy5fZ2V0U2Nyb2xsaW5nTm9kZShmLGwuZGVsdGFYLGwuZGVsdGFZKX0sX2dldFNjcm9sbGFibGVOb2RlczpmdW5jdGlvbihsKXtmb3IodmFyIGs9W10sbT1sLmluZGV4T2YodGhpcy5jdXJyZW50TG9ja2luZ0VsZW1lbnQpLHA9MDtwPD1tO3ArKylpZihsW3BdLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUpe3ZhciBxPWxbcF0scj1xLnN0eWxlOyJzY3JvbGwiIT09ci5vdmVyZmxvdyYmImF1dG8iIT09ci5vdmVyZmxvdyYmKHI9d2luZG93LmdldENvbXB1dGVkU3R5bGUocSkpOwoic2Nyb2xsIiE9PXIub3ZlcmZsb3cmJiJhdXRvIiE9PXIub3ZlcmZsb3d8fGsucHVzaChxKX1yZXR1cm4ga30sX2dldFNjcm9sbGluZ05vZGU6ZnVuY3Rpb24obCxrLG0pe2lmKGt8fG0pZm9yKHZhciBwPU1hdGguYWJzKG0pPj1NYXRoLmFicyhrKSxxPTA7cTxsLmxlbmd0aDtxKyspe3ZhciByPWxbcV07aWYocD8wPm0/MDxyLnNjcm9sbFRvcDpyLnNjcm9sbFRvcDxyLnNjcm9sbEhlaWdodC1yLmNsaWVudEhlaWdodDowPms/MDxyLnNjcm9sbExlZnQ6ci5zY3JvbGxMZWZ0PHIuc2Nyb2xsV2lkdGgtci5jbGllbnRXaWR0aClyZXR1cm4gcn19LF9nZXRTY3JvbGxJbmZvOmZ1bmN0aW9uKGwpe3ZhciBrPXtkZWx0YVg6bC5kZWx0YVgsZGVsdGFZOmwuZGVsdGFZfTsiZGVsdGFYImluIGx8fCgid2hlZWxEZWx0YVgiaW4gbCYmIndoZWVsRGVsdGFZImluIGw/KGsuZGVsdGFYPS1sLndoZWVsRGVsdGFYLGsuZGVsdGFZPS1sLndoZWVsRGVsdGFZKToid2hlZWxEZWx0YSJpbiBsPyhrLmRlbHRhWD0KMCxrLmRlbHRhWT0tbC53aGVlbERlbHRhKToiYXhpcyJpbiBsPyhrLmRlbHRhWD0xPT09bC5heGlzP2wuZGV0YWlsOjAsay5kZWx0YVk9Mj09PWwuYXhpcz9sLmRldGFpbDowKTpsLnRhcmdldFRvdWNoZXMmJihsPWwudGFyZ2V0VG91Y2hlc1swXSxrLmRlbHRhWD1hLWwucGFnZVgsay5kZWx0YVk9Yy1sLnBhZ2VZKSk7cmV0dXJuIGt9fX0pKCk7Cjwvc2NyaXB0PgoKCgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vaXJvbi1vdmVybGF5LWJlaGF2aW9yL2lyb24tZm9jdXNhYmxlcy1oZWxwZXIuaHRtbC5qcwooZnVuY3Rpb24oKXt2YXIgYT1FbGVtZW50LnByb3RvdHlwZSxjPWEubWF0Y2hlc3x8YS5tYXRjaGVzU2VsZWN0b3J8fGEubW96TWF0Y2hlc1NlbGVjdG9yfHxhLm1zTWF0Y2hlc1NlbGVjdG9yfHxhLm9NYXRjaGVzU2VsZWN0b3J8fGEud2Via2l0TWF0Y2hlc1NlbGVjdG9yO1BvbHltZXIuSXJvbkZvY3VzYWJsZXNIZWxwZXI9e2dldFRhYmJhYmxlTm9kZXM6ZnVuY3Rpb24oZCl7dmFyIGY9W107cmV0dXJuIHRoaXMuX2NvbGxlY3RUYWJiYWJsZU5vZGVzKGQsZik/dGhpcy5fc29ydEJ5VGFiSW5kZXgoZik6Zn0saXNGb2N1c2FibGU6ZnVuY3Rpb24oZCl7cmV0dXJuIGMuY2FsbChkLCJpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYSwgYnV0dG9uLCBvYmplY3QiKT9jLmNhbGwoZCwiOm5vdChbZGlzYWJsZWRdKSIpOmMuY2FsbChkLCJhW2hyZWZdLCBhcmVhW2hyZWZdLCBpZnJhbWUsIFt0YWJpbmRleF0sIFtjb250ZW50RWRpdGFibGVdIil9LGlzVGFiYmFibGU6ZnVuY3Rpb24oZCl7cmV0dXJuIHRoaXMuaXNGb2N1c2FibGUoZCkmJgpjLmNhbGwoZCwnOm5vdChbdGFiaW5kZXhceDNkIi0xIl0pJykmJnRoaXMuX2lzVmlzaWJsZShkKX0sX25vcm1hbGl6ZWRUYWJJbmRleDpmdW5jdGlvbihkKXtyZXR1cm4gdGhpcy5pc0ZvY3VzYWJsZShkKT8oZD1kLmdldEF0dHJpYnV0ZSgidGFiaW5kZXgiKXx8MCxOdW1iZXIoZCkpOi0xfSxfY29sbGVjdFRhYmJhYmxlTm9kZXM6ZnVuY3Rpb24oZCxmKXtpZihkLm5vZGVUeXBlIT09Tm9kZS5FTEVNRU5UX05PREV8fCF0aGlzLl9pc1Zpc2libGUoZCkpcmV0dXJuITE7dmFyIGc9dGhpcy5fbm9ybWFsaXplZFRhYkluZGV4KGQpLGw9MDxnOzA8PWcmJmYucHVzaChkKTtkPSJjb250ZW50Ij09PWQubG9jYWxOYW1lfHwic2xvdCI9PT1kLmxvY2FsTmFtZT9Qb2x5bWVyLmRvbShkKS5nZXREaXN0cmlidXRlZE5vZGVzKCk6UG9seW1lci5kb20oZC5yb290fHxkKS5jaGlsZHJlbjtmb3IoZz0wO2c8ZC5sZW5ndGg7ZysrKWw9dGhpcy5fY29sbGVjdFRhYmJhYmxlTm9kZXMoZFtnXSxmKXx8bDsKcmV0dXJuIGx9LF9pc1Zpc2libGU6ZnVuY3Rpb24oZCl7dmFyIGY9ZC5zdHlsZTtyZXR1cm4iaGlkZGVuIiE9PWYudmlzaWJpbGl0eSYmIm5vbmUiIT09Zi5kaXNwbGF5PyhmPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGQpLCJoaWRkZW4iIT09Zi52aXNpYmlsaXR5JiYibm9uZSIhPT1mLmRpc3BsYXkpOiExfSxfc29ydEJ5VGFiSW5kZXg6ZnVuY3Rpb24oZCl7dmFyIGY9ZC5sZW5ndGg7aWYoMj5mKXJldHVybiBkO3ZhciBnPU1hdGguY2VpbChmLzIpO2Y9dGhpcy5fc29ydEJ5VGFiSW5kZXgoZC5zbGljZSgwLGcpKTtkPXRoaXMuX3NvcnRCeVRhYkluZGV4KGQuc2xpY2UoZykpO3JldHVybiB0aGlzLl9tZXJnZVNvcnRCeVRhYkluZGV4KGYsZCl9LF9tZXJnZVNvcnRCeVRhYkluZGV4OmZ1bmN0aW9uKGQsZil7Zm9yKHZhciBnPVtdOzA8ZC5sZW5ndGgmJjA8Zi5sZW5ndGg7KXRoaXMuX2hhc0xvd2VyVGFiT3JkZXIoZFswXSxmWzBdKT9nLnB1c2goZi5zaGlmdCgpKTpnLnB1c2goZC5zaGlmdCgpKTsKcmV0dXJuIGcuY29uY2F0KGQsZil9LF9oYXNMb3dlclRhYk9yZGVyOmZ1bmN0aW9uKGQsZil7ZD1NYXRoLm1heChkLnRhYkluZGV4LDApO2Y9TWF0aC5tYXgoZi50YWJJbmRleCwwKTtyZXR1cm4gMD09PWR8fDA9PT1mP2Y+ZDpkPmZ9fX0pKCk7Cjwvc2NyaXB0PgoKCjxzY3JpcHQ+Ly9+fldFQlBBVEh+fi9pcm9uLW92ZXJsYXktYmVoYXZpb3IvaXJvbi1vdmVybGF5LWJlaGF2aW9yLmh0bWwuanMKKGZ1bmN0aW9uKCl7UG9seW1lci5Jcm9uT3ZlcmxheUJlaGF2aW9ySW1wbD17cHJvcGVydGllczp7b3BlbmVkOntvYnNlcnZlcjoiX29wZW5lZENoYW5nZWQiLHR5cGU6Qm9vbGVhbix2YWx1ZTohMSxub3RpZnk6ITB9LGNhbmNlbGVkOntvYnNlcnZlcjoiX2NhbmNlbGVkQ2hhbmdlZCIscmVhZE9ubHk6ITAsdHlwZTpCb29sZWFuLHZhbHVlOiExfSx3aXRoQmFja2Ryb3A6e29ic2VydmVyOiJfd2l0aEJhY2tkcm9wQ2hhbmdlZCIsdHlwZTpCb29sZWFufSxub0F1dG9Gb2N1czp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxub0NhbmNlbE9uRXNjS2V5Ont0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LG5vQ2FuY2VsT25PdXRzaWRlQ2xpY2s6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sY2xvc2luZ1JlYXNvbjp7dHlwZTpPYmplY3R9LHJlc3RvcmVGb2N1c09uQ2xvc2U6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sYWxsb3dDbGlja1Rocm91Z2g6e3R5cGU6Qm9vbGVhbn0sYWx3YXlzT25Ub3A6e3R5cGU6Qm9vbGVhbn0sCnNjcm9sbEFjdGlvbjp7dHlwZTpTdHJpbmd9LF9tYW5hZ2VyOnt0eXBlOk9iamVjdCx2YWx1ZTpQb2x5bWVyLklyb25PdmVybGF5TWFuYWdlcn0sX2ZvY3VzZWRDaGlsZDp7dHlwZTpPYmplY3R9fSxsaXN0ZW5lcnM6eyJpcm9uLXJlc2l6ZSI6Il9vbklyb25SZXNpemUifSxvYnNlcnZlcnM6WyJfX3VwZGF0ZVNjcm9sbE9ic2VydmVycyhpc0F0dGFjaGVkLCBvcGVuZWQsIHNjcm9sbEFjdGlvbikiXSxnZXQgYmFja2Ryb3BFbGVtZW50KCl7cmV0dXJuIHRoaXMuX21hbmFnZXIuYmFja2Ryb3BFbGVtZW50fSxnZXQgX2ZvY3VzTm9kZSgpe3JldHVybiB0aGlzLl9mb2N1c2VkQ2hpbGR8fFBvbHltZXIuZG9tKHRoaXMpLnF1ZXJ5U2VsZWN0b3IoIlthdXRvZm9jdXNdIil8fHRoaXN9LGdldCBfZm9jdXNhYmxlTm9kZXMoKXtyZXR1cm4gUG9seW1lci5Jcm9uRm9jdXNhYmxlc0hlbHBlci5nZXRUYWJiYWJsZU5vZGVzKHRoaXMpfSxyZWFkeTpmdW5jdGlvbigpe3RoaXMuX19zaG91bGRSZW1vdmVUYWJJbmRleD0KdGhpcy5fX2lzQW5pbWF0aW5nPSExO3RoaXMuX19maXJzdEZvY3VzYWJsZU5vZGU9dGhpcy5fX2xhc3RGb2N1c2FibGVOb2RlPW51bGw7dGhpcy5fX3JhZnM9e307dGhpcy5fX3Njcm9sbFRvcD10aGlzLl9fc2Nyb2xsTGVmdD10aGlzLl9fcmVzdG9yZUZvY3VzTm9kZT1udWxsO3RoaXMuX19vbkNhcHR1cmVTY3JvbGw9dGhpcy5fX29uQ2FwdHVyZVNjcm9sbC5iaW5kKHRoaXMpO3RoaXMuX19yb290Tm9kZXM9bnVsbDt0aGlzLl9lbnN1cmVTZXR1cCgpfSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMub3BlbmVkJiZ0aGlzLl9vcGVuZWRDaGFuZ2VkKHRoaXMub3BlbmVkKTt0aGlzLl9vYnNlcnZlcj1Qb2x5bWVyLmRvbSh0aGlzKS5vYnNlcnZlTm9kZXModGhpcy5fb25Ob2Rlc0NoYW5nZSl9LGRldGFjaGVkOmZ1bmN0aW9uKCl7UG9seW1lci5kb20odGhpcykudW5vYnNlcnZlTm9kZXModGhpcy5fb2JzZXJ2ZXIpO3RoaXMuX29ic2VydmVyPW51bGw7Zm9yKHZhciBhIGluIHRoaXMuX19yYWZzKW51bGwhPT0KdGhpcy5fX3JhZnNbYV0mJmNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuX19yYWZzW2FdKTt0aGlzLl9fcmFmcz17fTt0aGlzLl9tYW5hZ2VyLnJlbW92ZU92ZXJsYXkodGhpcyk7dGhpcy5fX2lzQW5pbWF0aW5nJiYodGhpcy5vcGVuZWQ/dGhpcy5fZmluaXNoUmVuZGVyT3BlbmVkKCk6KHRoaXMuX2FwcGx5Rm9jdXMoKSx0aGlzLl9maW5pc2hSZW5kZXJDbG9zZWQoKSkpfSx0b2dnbGU6ZnVuY3Rpb24oKXt0aGlzLl9zZXRDYW5jZWxlZCghMSk7dGhpcy5vcGVuZWQ9IXRoaXMub3BlbmVkfSxvcGVuOmZ1bmN0aW9uKCl7dGhpcy5fc2V0Q2FuY2VsZWQoITEpO3RoaXMub3BlbmVkPSEwfSxjbG9zZTpmdW5jdGlvbigpe3RoaXMuX3NldENhbmNlbGVkKCExKTt0aGlzLm9wZW5lZD0hMX0sY2FuY2VsOmZ1bmN0aW9uKGEpe3RoaXMuZmlyZSgiaXJvbi1vdmVybGF5LWNhbmNlbGVkIixhLHtjYW5jZWxhYmxlOiEwfSkuZGVmYXVsdFByZXZlbnRlZHx8KHRoaXMuX3NldENhbmNlbGVkKCEwKSx0aGlzLm9wZW5lZD0KITEpfSxpbnZhbGlkYXRlVGFiYmFibGVzOmZ1bmN0aW9uKCl7dGhpcy5fX2ZpcnN0Rm9jdXNhYmxlTm9kZT10aGlzLl9fbGFzdEZvY3VzYWJsZU5vZGU9bnVsbH0sX2Vuc3VyZVNldHVwOmZ1bmN0aW9uKCl7dGhpcy5fb3ZlcmxheVNldHVwfHwodGhpcy5fb3ZlcmxheVNldHVwPSEwLHRoaXMuc3R5bGUub3V0bGluZT0ibm9uZSIsdGhpcy5zdHlsZS5kaXNwbGF5PSJub25lIil9LF9vcGVuZWRDaGFuZ2VkOmZ1bmN0aW9uKGEpe2E/dGhpcy5yZW1vdmVBdHRyaWJ1dGUoImFyaWEtaGlkZGVuIik6dGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtaGlkZGVuIiwidHJ1ZSIpO3RoaXMuaXNBdHRhY2hlZCYmKHRoaXMuX19pc0FuaW1hdGluZz0hMCx0aGlzLl9fZGVyYWYoIl9fb3BlbmVkQ2hhbmdlZCIsdGhpcy5fX29wZW5lZENoYW5nZWQpKX0sX2NhbmNlbGVkQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMuY2xvc2luZ1JlYXNvbj10aGlzLmNsb3NpbmdSZWFzb258fHt9O3RoaXMuY2xvc2luZ1JlYXNvbi5jYW5jZWxlZD0KdGhpcy5jYW5jZWxlZH0sX3dpdGhCYWNrZHJvcENoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLndpdGhCYWNrZHJvcCYmIXRoaXMuaGFzQXR0cmlidXRlKCJ0YWJpbmRleCIpPyh0aGlzLnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLCItMSIpLHRoaXMuX19zaG91bGRSZW1vdmVUYWJJbmRleD0hMCk6dGhpcy5fX3Nob3VsZFJlbW92ZVRhYkluZGV4JiYodGhpcy5yZW1vdmVBdHRyaWJ1dGUoInRhYmluZGV4IiksdGhpcy5fX3Nob3VsZFJlbW92ZVRhYkluZGV4PSExKTt0aGlzLm9wZW5lZCYmdGhpcy5pc0F0dGFjaGVkJiZ0aGlzLl9tYW5hZ2VyLnRyYWNrQmFja2Ryb3AoKX0sX3ByZXBhcmVSZW5kZXJPcGVuZWQ6ZnVuY3Rpb24oKXt0aGlzLl9fcmVzdG9yZUZvY3VzTm9kZT10aGlzLl9tYW5hZ2VyLmRlZXBBY3RpdmVFbGVtZW50O3RoaXMuX3ByZXBhcmVQb3NpdGlvbmluZygpO3RoaXMucmVmaXQoKTt0aGlzLl9maW5pc2hQb3NpdGlvbmluZygpO3RoaXMubm9BdXRvRm9jdXMmJmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ9PT0KdGhpcy5fZm9jdXNOb2RlJiYodGhpcy5fZm9jdXNOb2RlLmJsdXIoKSx0aGlzLl9fcmVzdG9yZUZvY3VzTm9kZS5mb2N1cygpKX0sX3JlbmRlck9wZW5lZDpmdW5jdGlvbigpe3RoaXMuX2ZpbmlzaFJlbmRlck9wZW5lZCgpfSxfcmVuZGVyQ2xvc2VkOmZ1bmN0aW9uKCl7dGhpcy5fZmluaXNoUmVuZGVyQ2xvc2VkKCl9LF9maW5pc2hSZW5kZXJPcGVuZWQ6ZnVuY3Rpb24oKXt0aGlzLm5vdGlmeVJlc2l6ZSgpO3RoaXMuX19pc0FuaW1hdGluZz0hMTt0aGlzLmZpcmUoImlyb24tb3ZlcmxheS1vcGVuZWQiKX0sX2ZpbmlzaFJlbmRlckNsb3NlZDpmdW5jdGlvbigpe3RoaXMuc3R5bGUuZGlzcGxheT0ibm9uZSI7dGhpcy5zdHlsZS56SW5kZXg9IiI7dGhpcy5ub3RpZnlSZXNpemUoKTt0aGlzLl9faXNBbmltYXRpbmc9ITE7dGhpcy5maXJlKCJpcm9uLW92ZXJsYXktY2xvc2VkIix0aGlzLmNsb3NpbmdSZWFzb24pfSxfcHJlcGFyZVBvc2l0aW9uaW5nOmZ1bmN0aW9uKCl7dGhpcy5zdHlsZS50cmFuc2l0aW9uPQp0aGlzLnN0eWxlLndlYmtpdFRyYW5zaXRpb249Im5vbmUiO3RoaXMuc3R5bGUudHJhbnNmb3JtPXRoaXMuc3R5bGUud2Via2l0VHJhbnNmb3JtPSJub25lIjt0aGlzLnN0eWxlLmRpc3BsYXk9IiJ9LF9maW5pc2hQb3NpdGlvbmluZzpmdW5jdGlvbigpe3RoaXMuc3R5bGUuZGlzcGxheT0ibm9uZSI7dGhpcy5zY3JvbGxUb3A9dGhpcy5zY3JvbGxUb3A7dGhpcy5zdHlsZS50cmFuc2l0aW9uPXRoaXMuc3R5bGUud2Via2l0VHJhbnNpdGlvbj0iIjt0aGlzLnN0eWxlLnRyYW5zZm9ybT10aGlzLnN0eWxlLndlYmtpdFRyYW5zZm9ybT0iIjt0aGlzLnN0eWxlLmRpc3BsYXk9IiI7dGhpcy5zY3JvbGxUb3A9dGhpcy5zY3JvbGxUb3B9LF9hcHBseUZvY3VzOmZ1bmN0aW9uKCl7aWYodGhpcy5vcGVuZWQpdGhpcy5ub0F1dG9Gb2N1c3x8dGhpcy5fZm9jdXNOb2RlLmZvY3VzKCk7ZWxzZXt0aGlzLl9mb2N1c05vZGUuYmx1cigpO3RoaXMuX2ZvY3VzZWRDaGlsZD1udWxsO2lmKHRoaXMucmVzdG9yZUZvY3VzT25DbG9zZSYmCnRoaXMuX19yZXN0b3JlRm9jdXNOb2RlKXt2YXIgYT10aGlzLl9tYW5hZ2VyLmRlZXBBY3RpdmVFbGVtZW50OyhhPT09ZG9jdW1lbnQuYm9keXx8UG9seW1lci5kb20odGhpcykuZGVlcENvbnRhaW5zKGEpKSYmdGhpcy5fX3Jlc3RvcmVGb2N1c05vZGUuZm9jdXMoKX10aGlzLl9fcmVzdG9yZUZvY3VzTm9kZT1udWxsOyhhPXRoaXMuX21hbmFnZXIuY3VycmVudE92ZXJsYXkoKSkmJnRoaXMhPT1hJiZhLl9hcHBseUZvY3VzKCl9fSxfb25DYXB0dXJlQ2xpY2s6ZnVuY3Rpb24oYSl7dGhpcy5ub0NhbmNlbE9uT3V0c2lkZUNsaWNrfHx0aGlzLmNhbmNlbChhKX0sX29uQ2FwdHVyZUZvY3VzOmZ1bmN0aW9uKGEpe2lmKHRoaXMud2l0aEJhY2tkcm9wKXt2YXIgYz1Qb2x5bWVyLmRvbShhKS5wYXRoOy0xPT09Yy5pbmRleE9mKHRoaXMpPyhhLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMuX2FwcGx5Rm9jdXMoKSk6dGhpcy5fZm9jdXNlZENoaWxkPWNbMF19fSxfb25DYXB0dXJlRXNjOmZ1bmN0aW9uKGEpe3RoaXMubm9DYW5jZWxPbkVzY0tleXx8CnRoaXMuY2FuY2VsKGEpfSxfb25DYXB0dXJlVGFiOmZ1bmN0aW9uKGEpe2lmKHRoaXMud2l0aEJhY2tkcm9wKXt0aGlzLl9fZW5zdXJlRmlyc3RMYXN0Rm9jdXNhYmxlcygpO3ZhciBjPWEuc2hpZnRLZXksZD1jP3RoaXMuX19maXJzdEZvY3VzYWJsZU5vZGU6dGhpcy5fX2xhc3RGb2N1c2FibGVOb2RlO2M9Yz90aGlzLl9fbGFzdEZvY3VzYWJsZU5vZGU6dGhpcy5fX2ZpcnN0Rm9jdXNhYmxlTm9kZTtpZihkPT09YylkPSEwO2Vsc2V7dmFyIGY9dGhpcy5fbWFuYWdlci5kZWVwQWN0aXZlRWxlbWVudDtkPWY9PT1kfHxmPT09dGhpc31kJiYoYS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX2ZvY3VzZWRDaGlsZD1jLHRoaXMuX2FwcGx5Rm9jdXMoKSl9fSxfb25Jcm9uUmVzaXplOmZ1bmN0aW9uKCl7dGhpcy5vcGVuZWQmJiF0aGlzLl9faXNBbmltYXRpbmcmJnRoaXMuX19kZXJhZigicmVmaXQiLHRoaXMucmVmaXQpfSxfb25Ob2Rlc0NoYW5nZTpmdW5jdGlvbigpe3RoaXMub3BlbmVkJiYhdGhpcy5fX2lzQW5pbWF0aW5nJiYKKHRoaXMuaW52YWxpZGF0ZVRhYmJhYmxlcygpLHRoaXMubm90aWZ5UmVzaXplKCkpfSxfX2Vuc3VyZUZpcnN0TGFzdEZvY3VzYWJsZXM6ZnVuY3Rpb24oKXtpZighdGhpcy5fX2ZpcnN0Rm9jdXNhYmxlTm9kZXx8IXRoaXMuX19sYXN0Rm9jdXNhYmxlTm9kZSl7dmFyIGE9dGhpcy5fZm9jdXNhYmxlTm9kZXM7dGhpcy5fX2ZpcnN0Rm9jdXNhYmxlTm9kZT1hWzBdO3RoaXMuX19sYXN0Rm9jdXNhYmxlTm9kZT1hW2EubGVuZ3RoLTFdfX0sX19vcGVuZWRDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5vcGVuZWQ/KHRoaXMuX3ByZXBhcmVSZW5kZXJPcGVuZWQoKSx0aGlzLl9tYW5hZ2VyLmFkZE92ZXJsYXkodGhpcyksdGhpcy5fYXBwbHlGb2N1cygpLHRoaXMuX3JlbmRlck9wZW5lZCgpKToodGhpcy5fbWFuYWdlci5yZW1vdmVPdmVybGF5KHRoaXMpLHRoaXMuX2FwcGx5Rm9jdXMoKSx0aGlzLl9yZW5kZXJDbG9zZWQoKSl9LF9fZGVyYWY6ZnVuY3Rpb24oYSxjKXt2YXIgZD10aGlzLl9fcmFmczsKbnVsbCE9PWRbYV0mJmNhbmNlbEFuaW1hdGlvbkZyYW1lKGRbYV0pO2RbYV09cmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uKCl7ZFthXT1udWxsO2MuY2FsbCh0aGlzKX0uYmluZCh0aGlzKSl9LF9fdXBkYXRlU2Nyb2xsT2JzZXJ2ZXJzOmZ1bmN0aW9uKGEsYyxkKXthJiZjJiZ0aGlzLl9faXNWYWxpZFNjcm9sbEFjdGlvbihkKT8oImxvY2siPT09ZCYmKHRoaXMuX19zYXZlU2Nyb2xsUG9zaXRpb24oKSxQb2x5bWVyLklyb25TY3JvbGxNYW5hZ2VyLnB1c2hTY3JvbGxMb2NrKHRoaXMpKSx0aGlzLl9fYWRkU2Nyb2xsTGlzdGVuZXJzKCkpOihQb2x5bWVyLklyb25TY3JvbGxNYW5hZ2VyLnJlbW92ZVNjcm9sbExvY2sodGhpcyksdGhpcy5fX3JlbW92ZVNjcm9sbExpc3RlbmVycygpKX0sX19hZGRTY3JvbGxMaXN0ZW5lcnM6ZnVuY3Rpb24oKXtpZighdGhpcy5fX3Jvb3ROb2Rlcyl7dGhpcy5fX3Jvb3ROb2Rlcz1bXTtpZihQb2x5bWVyLlNldHRpbmdzLnVzZVNoYWRvdylmb3IodmFyIGE9CnRoaXM7YTspYS5ub2RlVHlwZT09PU5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERSYmYS5ob3N0JiZ0aGlzLl9fcm9vdE5vZGVzLnB1c2goYSksYT1hLmhvc3R8fGEuYXNzaWduZWRTbG90fHxhLnBhcmVudE5vZGU7dGhpcy5fX3Jvb3ROb2Rlcy5wdXNoKGRvY3VtZW50KX10aGlzLl9fcm9vdE5vZGVzLmZvckVhY2goZnVuY3Rpb24oYyl7Yy5hZGRFdmVudExpc3RlbmVyKCJzY3JvbGwiLHRoaXMuX19vbkNhcHR1cmVTY3JvbGwse2NhcHR1cmU6ITAscGFzc2l2ZTohMH0pfSx0aGlzKX0sX19yZW1vdmVTY3JvbGxMaXN0ZW5lcnM6ZnVuY3Rpb24oKXt0aGlzLl9fcm9vdE5vZGVzJiZ0aGlzLl9fcm9vdE5vZGVzLmZvckVhY2goZnVuY3Rpb24oYSl7YS5yZW1vdmVFdmVudExpc3RlbmVyKCJzY3JvbGwiLHRoaXMuX19vbkNhcHR1cmVTY3JvbGwse2NhcHR1cmU6ITAscGFzc2l2ZTohMH0pfSx0aGlzKTt0aGlzLmlzQXR0YWNoZWR8fCh0aGlzLl9fcm9vdE5vZGVzPW51bGwpfSxfX2lzVmFsaWRTY3JvbGxBY3Rpb246ZnVuY3Rpb24oYSl7cmV0dXJuImxvY2siPT09CmF8fCJyZWZpdCI9PT1hfHwiY2FuY2VsIj09PWF9LF9fb25DYXB0dXJlU2Nyb2xsOmZ1bmN0aW9uKGEpe2lmKCEodGhpcy5fX2lzQW5pbWF0aW5nfHwwPD1Qb2x5bWVyLmRvbShhKS5wYXRoLmluZGV4T2YodGhpcykpKXN3aXRjaCh0aGlzLnNjcm9sbEFjdGlvbil7Y2FzZSAibG9jayI6dGhpcy5fX3Jlc3RvcmVTY3JvbGxQb3NpdGlvbigpO2JyZWFrO2Nhc2UgInJlZml0Ijp0aGlzLl9fZGVyYWYoInJlZml0Iix0aGlzLnJlZml0KTticmVhaztjYXNlICJjYW5jZWwiOnRoaXMuY2FuY2VsKGEpfX0sX19zYXZlU2Nyb2xsUG9zaXRpb246ZnVuY3Rpb24oKXtkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50Pyh0aGlzLl9fc2Nyb2xsVG9wPWRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsVG9wLHRoaXMuX19zY3JvbGxMZWZ0PWRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsTGVmdCk6KHRoaXMuX19zY3JvbGxUb3A9TWF0aC5tYXgoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCwKZG9jdW1lbnQuYm9keS5zY3JvbGxUb3ApLHRoaXMuX19zY3JvbGxMZWZ0PU1hdGgubWF4KGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0LGRvY3VtZW50LmJvZHkuc2Nyb2xsTGVmdCkpfSxfX3Jlc3RvcmVTY3JvbGxQb3NpdGlvbjpmdW5jdGlvbigpe2RvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQ/KGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsVG9wPXRoaXMuX19zY3JvbGxUb3AsZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxMZWZ0PXRoaXMuX19zY3JvbGxMZWZ0KTooZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcD1kb2N1bWVudC5ib2R5LnNjcm9sbFRvcD10aGlzLl9fc2Nyb2xsVG9wLGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0PWRvY3VtZW50LmJvZHkuc2Nyb2xsTGVmdD10aGlzLl9fc2Nyb2xsTGVmdCl9fTtQb2x5bWVyLklyb25PdmVybGF5QmVoYXZpb3I9W1BvbHltZXIuSXJvbkZpdEJlaGF2aW9yLFBvbHltZXIuSXJvblJlc2l6YWJsZUJlaGF2aW9yLApQb2x5bWVyLklyb25PdmVybGF5QmVoYXZpb3JJbXBsXX0pKCk7Cjwvc2NyaXB0PgoKCgoKPHNjcmlwdD4vL35+V0VCUEFUSH5+L25lb24tYW5pbWF0aW9uL25lb24tYW5pbWF0YWJsZS1iZWhhdmlvci5odG1sLmpzClBvbHltZXIuTmVvbkFuaW1hdGFibGVCZWhhdmlvcj17cHJvcGVydGllczp7YW5pbWF0aW9uQ29uZmlnOnt0eXBlOk9iamVjdH0sZW50cnlBbmltYXRpb246e29ic2VydmVyOiJfZW50cnlBbmltYXRpb25DaGFuZ2VkIix0eXBlOlN0cmluZ30sZXhpdEFuaW1hdGlvbjp7b2JzZXJ2ZXI6Il9leGl0QW5pbWF0aW9uQ2hhbmdlZCIsdHlwZTpTdHJpbmd9fSxfZW50cnlBbmltYXRpb25DaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5hbmltYXRpb25Db25maWc9dGhpcy5hbmltYXRpb25Db25maWd8fHt9O3RoaXMuYW5pbWF0aW9uQ29uZmlnLmVudHJ5PVt7bmFtZTp0aGlzLmVudHJ5QW5pbWF0aW9uLG5vZGU6dGhpc31dfSxfZXhpdEFuaW1hdGlvbkNoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLmFuaW1hdGlvbkNvbmZpZz10aGlzLmFuaW1hdGlvbkNvbmZpZ3x8e307dGhpcy5hbmltYXRpb25Db25maWcuZXhpdD1be25hbWU6dGhpcy5leGl0QW5pbWF0aW9uLG5vZGU6dGhpc31dfSxfY29weVByb3BlcnRpZXM6ZnVuY3Rpb24oYSwKYyl7Zm9yKHZhciBkIGluIGMpYVtkXT1jW2RdfSxfY2xvbmVDb25maWc6ZnVuY3Rpb24oYSl7dmFyIGM9e2lzQ2xvbmU6ITB9O3RoaXMuX2NvcHlQcm9wZXJ0aWVzKGMsYSk7cmV0dXJuIGN9LF9nZXRBbmltYXRpb25Db25maWdSZWN1cnNpdmU6ZnVuY3Rpb24oYSxjLGQpe2lmKHRoaXMuYW5pbWF0aW9uQ29uZmlnKWlmKHRoaXMuYW5pbWF0aW9uQ29uZmlnLnZhbHVlJiYiZnVuY3Rpb24iPT09dHlwZW9mIHRoaXMuYW5pbWF0aW9uQ29uZmlnLnZhbHVlKXRoaXMuX3dhcm4odGhpcy5fbG9nZigicGxheUFuaW1hdGlvbiIsIlBsZWFzZSBwdXQgJ2FuaW1hdGlvbkNvbmZpZycgaW5zaWRlIG9mIHlvdXIgY29tcG9uZW50cyAncHJvcGVydGllcycgb2JqZWN0IGluc3RlYWQgb2Ygb3V0c2lkZSBvZiBpdC4iKSk7ZWxzZXt2YXIgZj1hP3RoaXMuYW5pbWF0aW9uQ29uZmlnW2FdOnRoaXMuYW5pbWF0aW9uQ29uZmlnO0FycmF5LmlzQXJyYXkoZil8fChmPVtmXSk7aWYoZilmb3IodmFyIGcsbD0wO2c9CmZbbF07bCsrKWlmKGcuYW5pbWF0YWJsZSlnLmFuaW1hdGFibGUuX2dldEFuaW1hdGlvbkNvbmZpZ1JlY3Vyc2l2ZShnLnR5cGV8fGEsYyxkKTtlbHNlIGlmKGcuaWQpe3ZhciBrPWNbZy5pZF07az8oay5pc0Nsb25lfHwoY1tnLmlkXT10aGlzLl9jbG9uZUNvbmZpZyhrKSxrPWNbZy5pZF0pLHRoaXMuX2NvcHlQcm9wZXJ0aWVzKGssZykpOmNbZy5pZF09Z31lbHNlIGQucHVzaChnKX19LGdldEFuaW1hdGlvbkNvbmZpZzpmdW5jdGlvbihhKXt2YXIgYz17fSxkPVtdO3RoaXMuX2dldEFuaW1hdGlvbkNvbmZpZ1JlY3Vyc2l2ZShhLGMsZCk7Zm9yKHZhciBmIGluIGMpZC5wdXNoKGNbZl0pO3JldHVybiBkfX07Cjwvc2NyaXB0PgoKCjxzY3JpcHQ+Ly9+fldFQlBBVEh+fi9uZW9uLWFuaW1hdGlvbi9uZW9uLWFuaW1hdGlvbi1ydW5uZXItYmVoYXZpb3IuaHRtbC5qcwpQb2x5bWVyLk5lb25BbmltYXRpb25SdW5uZXJCZWhhdmlvckltcGw9e19jb25maWd1cmVBbmltYXRpb25zOmZ1bmN0aW9uKGEpe3ZhciBjPVtdLGQ9W107aWYoMDxhLmxlbmd0aClmb3IodmFyIGYsZz0wO2Y9YVtnXTtnKyspe3ZhciBsPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoZi5uYW1lKTtpZihsLmlzTmVvbkFuaW1hdGlvbil7dmFyIGs9bnVsbDtsLmNvbmZpZ3VyZXx8KGwuY29uZmlndXJlPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9KTtrPWwuY29uZmlndXJlKGYpO2QucHVzaCh7cmVzdWx0OmssY29uZmlnOmZ9KX1lbHNlIGNvbnNvbGUud2Fybih0aGlzLmlzKyI6IixmLm5hbWUsIm5vdCBmb3VuZCEiKX1mb3IoYT0wO2E8ZC5sZW5ndGg7YSsrKXtrPWRbYV0ucmVzdWx0O2Y9ZFthXS5jb25maWc7dHJ5eyJmdW5jdGlvbiIhPXR5cGVvZiBrLmNhbmNlbCYmKGs9ZG9jdW1lbnQudGltZWxpbmUucGxheShrKSl9Y2F0Y2gobSl7az1udWxsLGNvbnNvbGUud2FybigiQ291bGRudCBwbGF5IiwKIigiLGYubmFtZSwiKS4iLG0pfWsmJmMucHVzaCh7bmVvbkFuaW1hdGlvbjpsLGNvbmZpZzpmLGFuaW1hdGlvbjprfSl9cmV0dXJuIGN9LF9zaG91bGRDb21wbGV0ZTpmdW5jdGlvbihhKXtmb3IodmFyIGM9ITAsZD0wO2Q8YS5sZW5ndGg7ZCsrKWlmKCJmaW5pc2hlZCIhPWFbZF0uYW5pbWF0aW9uLnBsYXlTdGF0ZSl7Yz0hMTticmVha31yZXR1cm4gY30sX2NvbXBsZXRlOmZ1bmN0aW9uKGEpe2Zvcih2YXIgYz0wO2M8YS5sZW5ndGg7YysrKWFbY10ubmVvbkFuaW1hdGlvbi5jb21wbGV0ZShhW2NdLmNvbmZpZyk7Zm9yKGM9MDtjPGEubGVuZ3RoO2MrKylhW2NdLmFuaW1hdGlvbi5jYW5jZWwoKX0scGxheUFuaW1hdGlvbjpmdW5jdGlvbihhLGMpe3ZhciBkPXRoaXMuZ2V0QW5pbWF0aW9uQ29uZmlnKGEpO2lmKGQpe3RoaXMuX2FjdGl2ZT10aGlzLl9hY3RpdmV8fHt9O3RoaXMuX2FjdGl2ZVthXSYmKHRoaXMuX2NvbXBsZXRlKHRoaXMuX2FjdGl2ZVthXSksZGVsZXRlIHRoaXMuX2FjdGl2ZVthXSk7CnZhciBmPXRoaXMuX2NvbmZpZ3VyZUFuaW1hdGlvbnMoZCk7aWYoMD09Zi5sZW5ndGgpdGhpcy5maXJlKCJuZW9uLWFuaW1hdGlvbi1maW5pc2giLGMse2J1YmJsZXM6ITF9KTtlbHNlIGZvcih0aGlzLl9hY3RpdmVbYV09ZixkPTA7ZDxmLmxlbmd0aDtkKyspZltkXS5hbmltYXRpb24ub25maW5pc2g9ZnVuY3Rpb24oKXt0aGlzLl9zaG91bGRDb21wbGV0ZShmKSYmKHRoaXMuX2NvbXBsZXRlKGYpLGRlbGV0ZSB0aGlzLl9hY3RpdmVbYV0sdGhpcy5maXJlKCJuZW9uLWFuaW1hdGlvbi1maW5pc2giLGMse2J1YmJsZXM6ITF9KSl9LmJpbmQodGhpcyl9fSxjYW5jZWxBbmltYXRpb246ZnVuY3Rpb24oKXtmb3IodmFyIGEgaW4gdGhpcy5fYWN0aXZlKXt2YXIgYz10aGlzLl9hY3RpdmVbYV0sZDtmb3IoZCBpbiBjKWNbZF0uYW5pbWF0aW9uLmNhbmNlbCgpfXRoaXMuX2FjdGl2ZT17fX19OwpQb2x5bWVyLk5lb25BbmltYXRpb25SdW5uZXJCZWhhdmlvcj1bUG9seW1lci5OZW9uQW5pbWF0YWJsZUJlaGF2aW9yLFBvbHltZXIuTmVvbkFuaW1hdGlvblJ1bm5lckJlaGF2aW9ySW1wbF07Cjwvc2NyaXB0PgoKCgoKPHNjcmlwdD4vL35+V0VCUEFUSH5+L2lyb24tZHJvcGRvd24vaXJvbi1kcm9wZG93bi1zY3JvbGwtbWFuYWdlci5odG1sLmpzCihmdW5jdGlvbigpe1BvbHltZXIuSXJvbkRyb3Bkb3duU2Nyb2xsTWFuYWdlcj1Qb2x5bWVyLklyb25TY3JvbGxNYW5hZ2VyfSkoKTsKPC9zY3JpcHQ+CgoKCjxkb20tbW9kdWxlIGlkPSJpcm9uLWRyb3Bkb3duIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgIH0KCiAgICAgICNjb250ZW50V3JhcHBlciA6OnNsb3R0ZWQoKikgewogICAgICAgIG92ZXJmbG93OiBhdXRvOwogICAgICB9CgogICAgICAjY29udGVudFdyYXBwZXIuYW5pbWF0aW5nIDo6c2xvdHRlZCgqKSB7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8ZGl2IGlkPSJjb250ZW50V3JhcHBlciI+CiAgICAgIDxzbG90IGlkPSJjb250ZW50IiBuYW1lPSJkcm9wZG93bi1jb250ZW50Ij48L3Nsb3Q+CiAgICA8L2Rpdj4KICA8L3RlbXBsYXRlPgoKICA8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vaXJvbi1kcm9wZG93bi9pcm9uLWRyb3Bkb3duLmh0bWwuanMKKGZ1bmN0aW9uKCl7UG9seW1lcih7aXM6Imlyb24tZHJvcGRvd24iLGJlaGF2aW9yczpbUG9seW1lci5Jcm9uQ29udHJvbFN0YXRlLFBvbHltZXIuSXJvbkExMXlLZXlzQmVoYXZpb3IsUG9seW1lci5Jcm9uT3ZlcmxheUJlaGF2aW9yLFBvbHltZXIuTmVvbkFuaW1hdGlvblJ1bm5lckJlaGF2aW9yXSxwcm9wZXJ0aWVzOntob3Jpem9udGFsQWxpZ246e3R5cGU6U3RyaW5nLHZhbHVlOiJsZWZ0IixyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9LHZlcnRpY2FsQWxpZ246e3R5cGU6U3RyaW5nLHZhbHVlOiJ0b3AiLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH0sb3BlbkFuaW1hdGlvbkNvbmZpZzp7dHlwZTpPYmplY3R9LGNsb3NlQW5pbWF0aW9uQ29uZmlnOnt0eXBlOk9iamVjdH0sZm9jdXNUYXJnZXQ6e3R5cGU6T2JqZWN0fSxub0FuaW1hdGlvbnM6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sYWxsb3dPdXRzaWRlU2Nyb2xsOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEsb2JzZXJ2ZXI6Il9hbGxvd091dHNpZGVTY3JvbGxDaGFuZ2VkIn19LApsaXN0ZW5lcnM6eyJuZW9uLWFuaW1hdGlvbi1maW5pc2giOiJfb25OZW9uQW5pbWF0aW9uRmluaXNoIn0sb2JzZXJ2ZXJzOlsiX3VwZGF0ZU92ZXJsYXlQb3NpdGlvbihwb3NpdGlvblRhcmdldCwgdmVydGljYWxBbGlnbiwgaG9yaXpvbnRhbEFsaWduLCB2ZXJ0aWNhbE9mZnNldCwgaG9yaXpvbnRhbE9mZnNldCkiXSxnZXQgY29udGFpbmVkRWxlbWVudCgpe2Zvcih2YXIgYT1Qb2x5bWVyLmRvbSh0aGlzLiQuY29udGVudCkuZ2V0RGlzdHJpYnV0ZWROb2RlcygpLGM9MCxkPWEubGVuZ3RoO2M8ZDtjKyspaWYoYVtjXS5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFKXJldHVybiBhW2NdfSxyZWFkeTpmdW5jdGlvbigpe3RoaXMuc2Nyb2xsQWN0aW9ufHwodGhpcy5zY3JvbGxBY3Rpb249dGhpcy5hbGxvd091dHNpZGVTY3JvbGw/InJlZml0IjoibG9jayIpO3RoaXMuX3JlYWRpZWQ9ITB9LGF0dGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5zaXppbmdUYXJnZXQmJnRoaXMuc2l6aW5nVGFyZ2V0IT09CnRoaXN8fCh0aGlzLnNpemluZ1RhcmdldD10aGlzLmNvbnRhaW5lZEVsZW1lbnR8fHRoaXMpfSxkZXRhY2hlZDpmdW5jdGlvbigpe3RoaXMuY2FuY2VsQW5pbWF0aW9uKCl9LF9vcGVuZWRDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5vcGVuZWQmJnRoaXMuZGlzYWJsZWQ/dGhpcy5jYW5jZWwoKToodGhpcy5jYW5jZWxBbmltYXRpb24oKSx0aGlzLl91cGRhdGVBbmltYXRpb25Db25maWcoKSxQb2x5bWVyLklyb25PdmVybGF5QmVoYXZpb3JJbXBsLl9vcGVuZWRDaGFuZ2VkLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9LF9yZW5kZXJPcGVuZWQ6ZnVuY3Rpb24oKXshdGhpcy5ub0FuaW1hdGlvbnMmJnRoaXMuYW5pbWF0aW9uQ29uZmlnLm9wZW4/KHRoaXMuJC5jb250ZW50V3JhcHBlci5jbGFzc0xpc3QuYWRkKCJhbmltYXRpbmciKSx0aGlzLnBsYXlBbmltYXRpb24oIm9wZW4iKSk6UG9seW1lci5Jcm9uT3ZlcmxheUJlaGF2aW9ySW1wbC5fcmVuZGVyT3BlbmVkLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sCl9yZW5kZXJDbG9zZWQ6ZnVuY3Rpb24oKXshdGhpcy5ub0FuaW1hdGlvbnMmJnRoaXMuYW5pbWF0aW9uQ29uZmlnLmNsb3NlPyh0aGlzLiQuY29udGVudFdyYXBwZXIuY2xhc3NMaXN0LmFkZCgiYW5pbWF0aW5nIiksdGhpcy5wbGF5QW5pbWF0aW9uKCJjbG9zZSIpKTpQb2x5bWVyLklyb25PdmVybGF5QmVoYXZpb3JJbXBsLl9yZW5kZXJDbG9zZWQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxfb25OZW9uQW5pbWF0aW9uRmluaXNoOmZ1bmN0aW9uKCl7dGhpcy4kLmNvbnRlbnRXcmFwcGVyLmNsYXNzTGlzdC5yZW1vdmUoImFuaW1hdGluZyIpO3RoaXMub3BlbmVkP3RoaXMuX2ZpbmlzaFJlbmRlck9wZW5lZCgpOnRoaXMuX2ZpbmlzaFJlbmRlckNsb3NlZCgpfSxfdXBkYXRlQW5pbWF0aW9uQ29uZmlnOmZ1bmN0aW9uKCl7Zm9yKHZhciBhPXRoaXMuY29udGFpbmVkRWxlbWVudCxjPVtdLmNvbmNhdCh0aGlzLm9wZW5BbmltYXRpb25Db25maWd8fFtdKS5jb25jYXQodGhpcy5jbG9zZUFuaW1hdGlvbkNvbmZpZ3x8CltdKSxkPTA7ZDxjLmxlbmd0aDtkKyspY1tkXS5ub2RlPWE7dGhpcy5hbmltYXRpb25Db25maWc9e29wZW46dGhpcy5vcGVuQW5pbWF0aW9uQ29uZmlnLGNsb3NlOnRoaXMuY2xvc2VBbmltYXRpb25Db25maWd9fSxfdXBkYXRlT3ZlcmxheVBvc2l0aW9uOmZ1bmN0aW9uKCl7dGhpcy5pc0F0dGFjaGVkJiZ0aGlzLm5vdGlmeVJlc2l6ZSgpfSxfYWxsb3dPdXRzaWRlU2Nyb2xsQ2hhbmdlZDpmdW5jdGlvbihhKXt0aGlzLl9yZWFkaWVkJiYoYT90aGlzLnNjcm9sbEFjdGlvbiYmImxvY2siIT09dGhpcy5zY3JvbGxBY3Rpb258fCh0aGlzLnNjcm9sbEFjdGlvbj0icmVmaXQiKTp0aGlzLnNjcm9sbEFjdGlvbj0ibG9jayIpfSxfYXBwbHlGb2N1czpmdW5jdGlvbigpe3ZhciBhPXRoaXMuZm9jdXNUYXJnZXR8fHRoaXMuY29udGFpbmVkRWxlbWVudDthJiZ0aGlzLm9wZW5lZCYmIXRoaXMubm9BdXRvRm9jdXM/YS5mb2N1cygpOlBvbHltZXIuSXJvbk92ZXJsYXlCZWhhdmlvckltcGwuX2FwcGx5Rm9jdXMuYXBwbHkodGhpcywKYXJndW1lbnRzKX19KX0pKCk7Cjwvc2NyaXB0Pgo8L2RvbS1tb2R1bGU+CgoKCgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vbmVvbi1hbmltYXRpb24vbmVvbi1hbmltYXRpb24tYmVoYXZpb3IuaHRtbC5qcwpQb2x5bWVyLk5lb25BbmltYXRpb25CZWhhdmlvcj17cHJvcGVydGllczp7YW5pbWF0aW9uVGltaW5nOnt0eXBlOk9iamVjdCx2YWx1ZTpmdW5jdGlvbigpe3JldHVybntkdXJhdGlvbjo1MDAsZWFzaW5nOiJjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpIixmaWxsOiJib3RoIn19fX0saXNOZW9uQW5pbWF0aW9uOiEwLGNyZWF0ZWQ6ZnVuY3Rpb24oKXtkb2N1bWVudC5ib2R5LmFuaW1hdGV8fGNvbnNvbGUud2FybigiTm8gd2ViIGFuaW1hdGlvbnMgZGV0ZWN0ZWQuIFRoaXMgZWxlbWVudCB3aWxsIG5vdCBmdW5jdGlvbiB3aXRob3V0IGEgd2ViIGFuaW1hdGlvbnMgcG9seWZpbGwuIil9LHRpbWluZ0Zyb21Db25maWc6ZnVuY3Rpb24oYSl7aWYoYS50aW1pbmcpZm9yKHZhciBjIGluIGEudGltaW5nKXRoaXMuYW5pbWF0aW9uVGltaW5nW2NdPWEudGltaW5nW2NdO3JldHVybiB0aGlzLmFuaW1hdGlvblRpbWluZ30sc2V0UHJlZml4ZWRQcm9wZXJ0eTpmdW5jdGlvbihhLGMsZCl7Zm9yKHZhciBmPQp7dHJhbnNmb3JtOlsid2Via2l0VHJhbnNmb3JtIl0sdHJhbnNmb3JtT3JpZ2luOlsibW96VHJhbnNmb3JtT3JpZ2luIiwid2Via2l0VHJhbnNmb3JtT3JpZ2luIl19W2NdLGcsbD0wO2c9ZltsXTtsKyspYS5zdHlsZVtnXT1kO2Euc3R5bGVbY109ZH0sY29tcGxldGU6ZnVuY3Rpb24oKXt9fTsKPC9zY3JpcHQ+CgoKCgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vbmVvbi1hbmltYXRpb24vYW5pbWF0aW9ucy9mYWRlLWluLWFuaW1hdGlvbi5odG1sLmpzClBvbHltZXIoe2lzOiJmYWRlLWluLWFuaW1hdGlvbiIsYmVoYXZpb3JzOltQb2x5bWVyLk5lb25BbmltYXRpb25CZWhhdmlvcl0sY29uZmlndXJlOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLl9lZmZlY3Q9bmV3IEtleWZyYW1lRWZmZWN0KGEubm9kZSxbe29wYWNpdHk6IjAifSx7b3BhY2l0eToiMSJ9XSx0aGlzLnRpbWluZ0Zyb21Db25maWcoYSkpfX0pOwo8L3NjcmlwdD4KCgoKCgoKPHNjcmlwdD4vL35+V0VCUEFUSH5+L25lb24tYW5pbWF0aW9uL2FuaW1hdGlvbnMvZmFkZS1vdXQtYW5pbWF0aW9uLmh0bWwuanMKUG9seW1lcih7aXM6ImZhZGUtb3V0LWFuaW1hdGlvbiIsYmVoYXZpb3JzOltQb2x5bWVyLk5lb25BbmltYXRpb25CZWhhdmlvcl0sY29uZmlndXJlOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLl9lZmZlY3Q9bmV3IEtleWZyYW1lRWZmZWN0KGEubm9kZSxbe29wYWNpdHk6IjEifSx7b3BhY2l0eToiMCJ9XSx0aGlzLnRpbWluZ0Zyb21Db25maWcoYSkpfX0pOwo8L3NjcmlwdD4KCgoKCgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vcGFwZXItbWVudS1idXR0b24vcGFwZXItbWVudS1idXR0b24tYW5pbWF0aW9ucy5odG1sLmpzClBvbHltZXIoe2lzOiJwYXBlci1tZW51LWdyb3ctaGVpZ2h0LWFuaW1hdGlvbiIsYmVoYXZpb3JzOltQb2x5bWVyLk5lb25BbmltYXRpb25CZWhhdmlvcl0sY29uZmlndXJlOmZ1bmN0aW9uKGEpe3ZhciBjPWEubm9kZSxkPWMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0O3JldHVybiB0aGlzLl9lZmZlY3Q9bmV3IEtleWZyYW1lRWZmZWN0KGMsW3toZWlnaHQ6ZC8yKyJweCJ9LHtoZWlnaHQ6ZCsicHgifV0sdGhpcy50aW1pbmdGcm9tQ29uZmlnKGEpKX19KTtQb2x5bWVyKHtpczoicGFwZXItbWVudS1ncm93LXdpZHRoLWFuaW1hdGlvbiIsYmVoYXZpb3JzOltQb2x5bWVyLk5lb25BbmltYXRpb25CZWhhdmlvcl0sY29uZmlndXJlOmZ1bmN0aW9uKGEpe3ZhciBjPWEubm9kZSxkPWMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7cmV0dXJuIHRoaXMuX2VmZmVjdD1uZXcgS2V5ZnJhbWVFZmZlY3QoYyxbe3dpZHRoOmQvMisicHgifSx7d2lkdGg6ZCsicHgifV0sdGhpcy50aW1pbmdGcm9tQ29uZmlnKGEpKX19KTsKUG9seW1lcih7aXM6InBhcGVyLW1lbnUtc2hyaW5rLXdpZHRoLWFuaW1hdGlvbiIsYmVoYXZpb3JzOltQb2x5bWVyLk5lb25BbmltYXRpb25CZWhhdmlvcl0sY29uZmlndXJlOmZ1bmN0aW9uKGEpe3ZhciBjPWEubm9kZSxkPWMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7cmV0dXJuIHRoaXMuX2VmZmVjdD1uZXcgS2V5ZnJhbWVFZmZlY3QoYyxbe3dpZHRoOmQrInB4In0se3dpZHRoOmQtZC8yMCsicHgifV0sdGhpcy50aW1pbmdGcm9tQ29uZmlnKGEpKX19KTsKUG9seW1lcih7aXM6InBhcGVyLW1lbnUtc2hyaW5rLWhlaWdodC1hbmltYXRpb24iLGJlaGF2aW9yczpbUG9seW1lci5OZW9uQW5pbWF0aW9uQmVoYXZpb3JdLGNvbmZpZ3VyZTpmdW5jdGlvbihhKXt2YXIgYz1hLm5vZGUsZD1jLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodDt0aGlzLnNldFByZWZpeGVkUHJvcGVydHkoYywidHJhbnNmb3JtT3JpZ2luIiwiMCAwIik7cmV0dXJuIHRoaXMuX2VmZmVjdD1uZXcgS2V5ZnJhbWVFZmZlY3QoYyxbe2hlaWdodDpkKyJweCIsdHJhbnNmb3JtOiJ0cmFuc2xhdGVZKDApIn0se2hlaWdodDpkLzIrInB4Iix0cmFuc2Zvcm06InRyYW5zbGF0ZVkoLTIwcHgpIn1dLHRoaXMudGltaW5nRnJvbUNvbmZpZyhhKSl9fSk7Cjwvc2NyaXB0PgoKCgoKCgo8ZG9tLW1vZHVsZSBpZD0icGFwZXItbWVudS1idXR0b24iPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgcGFkZGluZzogOHB4OwogICAgICAgIG91dGxpbmU6IG5vbmU7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLW1lbnUtYnV0dG9uOwogICAgICB9CgogICAgICA6aG9zdChbZGlzYWJsZWRdKSB7CiAgICAgICAgY3Vyc29yOiBhdXRvOwogICAgICAgIGNvbG9yOiB2YXIoLS1kaXNhYmxlZC10ZXh0LWNvbG9yKTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItbWVudS1idXR0b24tZGlzYWJsZWQ7CiAgICAgIH0KCiAgICAgIGlyb24tZHJvcGRvd24gewogICAgICAgIEBhcHBseSAtLXBhcGVyLW1lbnUtYnV0dG9uLWRyb3Bkb3duOwogICAgICB9CgogICAgICAuZHJvcGRvd24tY29udGVudCB7CiAgICAgICAgQGFwcGx5IC0tc2hhZG93LWVsZXZhdGlvbi0yZHA7CgogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBib3JkZXItcmFkaXVzOiAycHg7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItbWVudS1idXR0b24tZHJvcGRvd24tYmFja2dyb3VuZCwgdmFyKC0tcHJpbWFyeS1iYWNrZ3JvdW5kLWNvbG9yKSk7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLW1lbnUtYnV0dG9uLWNvbnRlbnQ7CiAgICAgIH0KCiAgICAgIDpob3N0KFt2ZXJ0aWNhbC1hbGlnbj0idG9wIl0pIC5kcm9wZG93bi1jb250ZW50IHsKICAgICAgICBtYXJnaW4tYm90dG9tOiAyMHB4OwogICAgICAgIG1hcmdpbi10b3A6IC0xMHB4OwogICAgICAgIHRvcDogMTBweDsKICAgICAgfQoKICAgICAgOmhvc3QoW3ZlcnRpY2FsLWFsaWduPSJib3R0b20iXSkgLmRyb3Bkb3duLWNvbnRlbnQgewogICAgICAgIGJvdHRvbTogMTBweDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAtMTBweDsKICAgICAgICBtYXJnaW4tdG9wOiAyMHB4OwogICAgICB9CgogICAgICAjdHJpZ2dlciB7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxkaXYgaWQ9InRyaWdnZXIiIG9uLXRhcD0idG9nZ2xlIj4KICAgICAgPHNsb3QgbmFtZT0iZHJvcGRvd24tdHJpZ2dlciI+PC9zbG90PgogICAgPC9kaXY+CgogICAgPGlyb24tZHJvcGRvd24gaWQ9ImRyb3Bkb3duIiBvcGVuZWQ9Int7b3BlbmVkfX0iIGhvcml6b250YWwtYWxpZ249IltbaG9yaXpvbnRhbEFsaWduXV0iIHZlcnRpY2FsLWFsaWduPSJbW3ZlcnRpY2FsQWxpZ25dXSIgZHluYW1pYy1hbGlnbj0iW1tkeW5hbWljQWxpZ25dXSIgaG9yaXpvbnRhbC1vZmZzZXQ9IltbaG9yaXpvbnRhbE9mZnNldF1dIiB2ZXJ0aWNhbC1vZmZzZXQ9IltbdmVydGljYWxPZmZzZXRdXSIgbm8tb3ZlcmxhcD0iW1tub092ZXJsYXBdXSIgb3Blbi1hbmltYXRpb24tY29uZmlnPSJbW29wZW5BbmltYXRpb25Db25maWddXSIgY2xvc2UtYW5pbWF0aW9uLWNvbmZpZz0iW1tjbG9zZUFuaW1hdGlvbkNvbmZpZ11dIiBuby1hbmltYXRpb25zPSJbW25vQW5pbWF0aW9uc11dIiBmb2N1cy10YXJnZXQ9IltbX2Ryb3Bkb3duQ29udGVudF1dIiBhbGxvdy1vdXRzaWRlLXNjcm9sbD0iW1thbGxvd091dHNpZGVTY3JvbGxdXSIgcmVzdG9yZS1mb2N1cy1vbi1jbG9zZT0iW1tyZXN0b3JlRm9jdXNPbkNsb3NlXV0iIG9uLWlyb24tb3ZlcmxheS1jYW5jZWxlZD0iX19vbklyb25PdmVybGF5Q2FuY2VsZWQiPgogICAgICA8ZGl2IHNsb3Q9ImRyb3Bkb3duLWNvbnRlbnQiIGNsYXNzPSJkcm9wZG93bi1jb250ZW50Ij4KICAgICAgICA8c2xvdCBpZD0iY29udGVudCIgbmFtZT0iZHJvcGRvd24tY29udGVudCI+PC9zbG90PgogICAgICA8L2Rpdj4KICAgIDwvaXJvbi1kcm9wZG93bj4KICA8L3RlbXBsYXRlPgoKICA8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vcGFwZXItbWVudS1idXR0b24vcGFwZXItbWVudS1idXR0b24uaHRtbC5qcwooZnVuY3Rpb24oKXt2YXIgYT17QU5JTUFUSU9OX0NVQklDX0JFWklFUjoiY3ViaWMtYmV6aWVyKC4zLC45NSwuNSwxKSIsTUFYX0FOSU1BVElPTl9USU1FX01TOjQwMH07UG9seW1lci5QYXBlck1lbnVCdXR0b249ZnVuY3Rpb24oKXt9O1BvbHltZXIuUGFwZXJNZW51QnV0dG9uLnByb3RvdHlwZS5yZWdpc3RlcmVkPWZ1bmN0aW9uKCl7fTtQb2x5bWVyLlBhcGVyTWVudUJ1dHRvbi5wcm90b3R5cGUuYWRkT3duS2V5QmluZGluZz1mdW5jdGlvbigpe307UG9seW1lci5QYXBlck1lbnVCdXR0b24ucHJvdG90eXBlLnJlbW92ZU93bktleUJpbmRpbmdzPWZ1bmN0aW9uKCl7fTtQb2x5bWVyLlBhcGVyTWVudUJ1dHRvbi5wcm90b3R5cGUua2V5Ym9hcmRFdmVudE1hdGNoZXNLZXlzPWZ1bmN0aW9uKCl7fTtQb2x5bWVyLlBhcGVyTWVudUJ1dHRvbi5wcm90b3R5cGUuX2NvbGxlY3RLZXlCaW5kaW5ncz1mdW5jdGlvbigpe307UG9seW1lci5QYXBlck1lbnVCdXR0b24ucHJvdG90eXBlLl9wcmVwS2V5QmluZGluZ3M9CmZ1bmN0aW9uKCl7fTtQb2x5bWVyLlBhcGVyTWVudUJ1dHRvbi5wcm90b3R5cGUuX2FkZEtleUJpbmRpbmc9ZnVuY3Rpb24oKXt9O1BvbHltZXIuUGFwZXJNZW51QnV0dG9uLnByb3RvdHlwZS5fcmVzZXRLZXlFdmVudExpc3RlbmVycz1mdW5jdGlvbigpe307UG9seW1lci5QYXBlck1lbnVCdXR0b24ucHJvdG90eXBlLl9saXN0ZW5LZXlFdmVudExpc3RlbmVycz1mdW5jdGlvbigpe307UG9seW1lci5QYXBlck1lbnVCdXR0b24ucHJvdG90eXBlLl91bmxpc3RlbktleUV2ZW50TGlzdGVuZXJzPWZ1bmN0aW9uKCl7fTtQb2x5bWVyLlBhcGVyTWVudUJ1dHRvbi5wcm90b3R5cGUuX29uS2V5QmluZGluZ0V2ZW50PWZ1bmN0aW9uKCl7fTtQb2x5bWVyLlBhcGVyTWVudUJ1dHRvbi5wcm90b3R5cGUuX3RyaWdnZXJLZXlIYW5kbGVyPWZ1bmN0aW9uKCl7fTtQb2x5bWVyLlBhcGVyTWVudUJ1dHRvbi5wcm90b3R5cGUuX2ZvY3VzQmx1ckhhbmRsZXI9ZnVuY3Rpb24oYyl7aWYoUG9seW1lci5FbGVtZW50KXRoaXMuX3NldEZvY3VzZWQoImZvY3VzIj09PQpjLnR5cGUpO2Vsc2UgaWYoYy50YXJnZXQ9PT10aGlzKXRoaXMuX3NldEZvY3VzZWQoImZvY3VzIj09PWMudHlwZSk7ZWxzZSBpZih0aGlzLl9faGFuZGxlRXZlbnRSZXRhcmdldGluZyl7dmFyIGQ9UG9seW1lci5kb20oYykubG9jYWxUYXJnZXQ7dGhpcy5pc0xpZ2h0RGVzY2VuZGFudChkKXx8dGhpcy5maXJlKGMudHlwZSx7c291cmNlRXZlbnQ6Y30se25vZGU6dGhpcyxidWJibGVzOmMuYnViYmxlcyxjYW5jZWxhYmxlOmMuY2FuY2VsYWJsZX0pfX07UG9seW1lci5QYXBlck1lbnVCdXR0b24ucHJvdG90eXBlLl9jaGFuZ2VkQ29udHJvbFN0YXRlPWZ1bmN0aW9uKCl7dGhpcy5fY29udHJvbFN0YXRlQ2hhbmdlZCYmdGhpcy5fY29udHJvbFN0YXRlQ2hhbmdlZCgpfTtQb2x5bWVyLlBhcGVyTWVudUJ1dHRvbi5wcm90b3R5cGUuX3NldEZvY3VzZWQ9ZnVuY3Rpb24oKXt9O1BvbHltZXIuUGFwZXJNZW51QnV0dG9uPVBvbHltZXIoe2lzOiJwYXBlci1tZW51LWJ1dHRvbiIsYmVoYXZpb3JzOltQb2x5bWVyLklyb25BMTF5S2V5c0JlaGF2aW9yLApQb2x5bWVyLklyb25Db250cm9sU3RhdGVdLHByb3BlcnRpZXM6e29wZW5lZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExLG5vdGlmeTohMCxvYnNlcnZlcjoiX29wZW5lZENoYW5nZWQifSxob3Jpem9udGFsQWxpZ246e3R5cGU6U3RyaW5nLHZhbHVlOiJsZWZ0IixyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9LHZlcnRpY2FsQWxpZ246e3R5cGU6U3RyaW5nLHZhbHVlOiJ0b3AiLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH0sZHluYW1pY0FsaWduOnt0eXBlOkJvb2xlYW59LGhvcml6b250YWxPZmZzZXQ6e3R5cGU6TnVtYmVyLHZhbHVlOjAsbm90aWZ5OiEwfSx2ZXJ0aWNhbE9mZnNldDp7dHlwZTpOdW1iZXIsdmFsdWU6MCxub3RpZnk6ITB9LG5vT3ZlcmxhcDp7dHlwZTpCb29sZWFufSxub0FuaW1hdGlvbnM6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0saWdub3JlU2VsZWN0Ont0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGNsb3NlT25BY3RpdmF0ZTp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxvcGVuQW5pbWF0aW9uQ29uZmlnOnt0eXBlOk9iamVjdCwKdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm5be25hbWU6ImZhZGUtaW4tYW5pbWF0aW9uIix0aW1pbmc6e2RlbGF5OjEwMCxkdXJhdGlvbjoyMDB9fSx7bmFtZToicGFwZXItbWVudS1ncm93LXdpZHRoLWFuaW1hdGlvbiIsdGltaW5nOntkZWxheToxMDAsZHVyYXRpb246MTUwLGVhc2luZzphLkFOSU1BVElPTl9DVUJJQ19CRVpJRVJ9fSx7bmFtZToicGFwZXItbWVudS1ncm93LWhlaWdodC1hbmltYXRpb24iLHRpbWluZzp7ZGVsYXk6MTAwLGR1cmF0aW9uOjI3NSxlYXNpbmc6YS5BTklNQVRJT05fQ1VCSUNfQkVaSUVSfX1dfX0sY2xvc2VBbmltYXRpb25Db25maWc6e3R5cGU6T2JqZWN0LHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuW3tuYW1lOiJmYWRlLW91dC1hbmltYXRpb24iLHRpbWluZzp7ZHVyYXRpb246MTUwfX0se25hbWU6InBhcGVyLW1lbnUtc2hyaW5rLXdpZHRoLWFuaW1hdGlvbiIsdGltaW5nOntkZWxheToxMDAsZHVyYXRpb246NTAsZWFzaW5nOmEuQU5JTUFUSU9OX0NVQklDX0JFWklFUn19LAp7bmFtZToicGFwZXItbWVudS1zaHJpbmstaGVpZ2h0LWFuaW1hdGlvbiIsdGltaW5nOntkdXJhdGlvbjoyMDAsZWFzaW5nOiJlYXNlLWluIn19XX19LGFsbG93T3V0c2lkZVNjcm9sbDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxyZXN0b3JlRm9jdXNPbkNsb3NlOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITB9LF9kcm9wZG93bkNvbnRlbnQ6e3R5cGU6T2JqZWN0fX0saG9zdEF0dHJpYnV0ZXM6e3JvbGU6Imdyb3VwIiwiYXJpYS1oYXNwb3B1cCI6InRydWUifSxsaXN0ZW5lcnM6eyJpcm9uLWFjdGl2YXRlIjoiX29uSXJvbkFjdGl2YXRlIiwiaXJvbi1zZWxlY3QiOiJfb25Jcm9uU2VsZWN0In0sZ2V0IGNvbnRlbnRFbGVtZW50KCl7Zm9yKHZhciBjPVBvbHltZXIuZG9tKHRoaXMuJC5jb250ZW50KS5nZXREaXN0cmlidXRlZE5vZGVzKCksZD0wLGY9Yy5sZW5ndGg7ZDxmO2QrKylpZihjW2RdLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUpcmV0dXJuIGNbZF19LHRvZ2dsZTpmdW5jdGlvbigpe3RoaXMub3BlbmVkPwp0aGlzLmNsb3NlKCk6dGhpcy5vcGVuKCl9LG9wZW46ZnVuY3Rpb24oKXt0aGlzLmRpc2FibGVkfHx0aGlzLiQuZHJvcGRvd24ub3BlbigpfSxjbG9zZTpmdW5jdGlvbigpe3RoaXMuJC5kcm9wZG93bi5jbG9zZSgpfSxfb25Jcm9uU2VsZWN0OmZ1bmN0aW9uKCl7dGhpcy5pZ25vcmVTZWxlY3R8fHRoaXMuY2xvc2UoKX0sX29uSXJvbkFjdGl2YXRlOmZ1bmN0aW9uKCl7dGhpcy5jbG9zZU9uQWN0aXZhdGUmJnRoaXMuY2xvc2UoKX0sX29wZW5lZENoYW5nZWQ6ZnVuY3Rpb24oYyxkKXtjPyh0aGlzLl9kcm9wZG93bkNvbnRlbnQ9dGhpcy5jb250ZW50RWxlbWVudCx0aGlzLmZpcmUoInBhcGVyLWRyb3Bkb3duLW9wZW4iKSk6bnVsbCE9ZCYmdGhpcy5maXJlKCJwYXBlci1kcm9wZG93bi1jbG9zZSIpfSxfZGlzYWJsZWRDaGFuZ2VkOmZ1bmN0aW9uKGMpe1BvbHltZXIuSXJvbkNvbnRyb2xTdGF0ZS5fZGlzYWJsZWRDaGFuZ2VkLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtjJiZ0aGlzLm9wZW5lZCYmCnRoaXMuY2xvc2UoKX0sX19vbklyb25PdmVybGF5Q2FuY2VsZWQ6ZnVuY3Rpb24oYyl7dmFyIGQ9dGhpcy4kLnRyaWdnZXI7LTE8UG9seW1lci5kb20oYy5kZXRhaWwpLnBhdGguaW5kZXhPZihkKSYmYy5wcmV2ZW50RGVmYXVsdCgpfX0pO09iamVjdC5rZXlzKGEpLmZvckVhY2goZnVuY3Rpb24oYyl7UG9seW1lci5QYXBlck1lbnVCdXR0b25bY109YVtjXX0pfSkoKTsKPC9zY3JpcHQ+CjwvZG9tLW1vZHVsZT4KCgoKCgoKCjxzY3JpcHQ+Ly9+fldFQlBBVEh+fi9pcm9uLWljb25zZXQtc3ZnL2lyb24taWNvbnNldC1zdmcuaHRtbC5qcwpQb2x5bWVyKHtpczoiaXJvbi1pY29uc2V0LXN2ZyIscHJvcGVydGllczp7bmFtZTp7dHlwZTpTdHJpbmcsb2JzZXJ2ZXI6Il9uYW1lQ2hhbmdlZCJ9LHNpemU6e3R5cGU6TnVtYmVyLHZhbHVlOjI0fSxydGxNaXJyb3Jpbmc6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sdXNlR2xvYmFsUnRsQXR0cmlidXRlOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9fSxjcmVhdGVkOmZ1bmN0aW9uKCl7dGhpcy5fbWV0YT1uZXcgUG9seW1lci5Jcm9uTWV0YSh7dHlwZToiaWNvbnNldCIsa2V5Om51bGwsdmFsdWU6bnVsbH0pfSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuc3R5bGUuZGlzcGxheT0ibm9uZSJ9LGdldEljb25OYW1lczpmdW5jdGlvbigpe3RoaXMuX2ljb25zPXRoaXMuX2NyZWF0ZUljb25NYXAoKTtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5faWNvbnMpLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5uYW1lKyI6IithfSx0aGlzKX0sYXBwbHlJY29uOmZ1bmN0aW9uKGEsYyl7dGhpcy5yZW1vdmVJY29uKGEpOwppZihjPXRoaXMuX2Nsb25lSWNvbihjLHRoaXMucnRsTWlycm9yaW5nJiZ0aGlzLl90YXJnZXRJc1JUTChhKSkpe3ZhciBkPVBvbHltZXIuZG9tKGEucm9vdHx8YSk7ZC5pbnNlcnRCZWZvcmUoYyxkLmNoaWxkTm9kZXNbMF0pO3JldHVybiBhLl9zdmdJY29uPWN9cmV0dXJuIG51bGx9LHJlbW92ZUljb246ZnVuY3Rpb24oYSl7YS5fc3ZnSWNvbiYmKFBvbHltZXIuZG9tKGEucm9vdHx8YSkucmVtb3ZlQ2hpbGQoYS5fc3ZnSWNvbiksYS5fc3ZnSWNvbj1udWxsKX0sX3RhcmdldElzUlRMOmZ1bmN0aW9uKGEpe251bGw9PXRoaXMuX190YXJnZXRJc1JUTCYmKHRoaXMudXNlR2xvYmFsUnRsQXR0cmlidXRlP3RoaXMuX190YXJnZXRJc1JUTD0icnRsIj09PShkb2N1bWVudC5ib2R5JiZkb2N1bWVudC5ib2R5Lmhhc0F0dHJpYnV0ZSgiZGlyIik/ZG9jdW1lbnQuYm9keTpkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpLmdldEF0dHJpYnV0ZSgiZGlyIik6KGEmJmEubm9kZVR5cGUhPT1Ob2RlLkVMRU1FTlRfTk9ERSYmCihhPWEuaG9zdCksdGhpcy5fX3RhcmdldElzUlRMPWEmJiJydGwiPT09d2luZG93LmdldENvbXB1dGVkU3R5bGUoYSkuZGlyZWN0aW9uKSk7cmV0dXJuIHRoaXMuX190YXJnZXRJc1JUTH0sX25hbWVDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5fbWV0YS52YWx1ZT1udWxsO3RoaXMuX21ldGEua2V5PXRoaXMubmFtZTt0aGlzLl9tZXRhLnZhbHVlPXRoaXM7dGhpcy5hc3luYyhmdW5jdGlvbigpe3RoaXMuZmlyZSgiaXJvbi1pY29uc2V0LWFkZGVkIix0aGlzLHtub2RlOndpbmRvd30pfSl9LF9jcmVhdGVJY29uTWFwOmZ1bmN0aW9uKCl7dmFyIGE9T2JqZWN0LmNyZWF0ZShudWxsKTtQb2x5bWVyLmRvbSh0aGlzKS5xdWVyeVNlbGVjdG9yQWxsKCJbaWRdIikuZm9yRWFjaChmdW5jdGlvbihjKXthW2MuaWRdPWN9KTtyZXR1cm4gYX0sX2Nsb25lSWNvbjpmdW5jdGlvbihhLGMpe3RoaXMuX2ljb25zPXRoaXMuX2ljb25zfHx0aGlzLl9jcmVhdGVJY29uTWFwKCk7cmV0dXJuIHRoaXMuX3ByZXBhcmVTdmdDbG9uZSh0aGlzLl9pY29uc1thXSwKdGhpcy5zaXplLGMpfSxfcHJlcGFyZVN2Z0Nsb25lOmZ1bmN0aW9uKGEsYyxkKXtpZihhKXthPWEuY2xvbmVOb2RlKCEwKTt2YXIgZj1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwic3ZnIik7Yz1hLmdldEF0dHJpYnV0ZSgidmlld0JveCIpfHwiMCAwICIrYysiICIrYzt2YXIgZz0icG9pbnRlci1ldmVudHM6IG5vbmU7IGRpc3BsYXk6IGJsb2NrOyB3aWR0aDogMTAwJTsgaGVpZ2h0OiAxMDAlOyI7ZCYmYS5oYXNBdHRyaWJ1dGUoIm1pcnJvci1pbi1ydGwiKSYmKGcrPSItd2Via2l0LXRyYW5zZm9ybTpzY2FsZSgtMSwxKTt0cmFuc2Zvcm06c2NhbGUoLTEsMSk7dHJhbnNmb3JtLW9yaWdpbjpjZW50ZXI7Iik7Zi5zZXRBdHRyaWJ1dGUoInZpZXdCb3giLGMpO2Yuc2V0QXR0cmlidXRlKCJwcmVzZXJ2ZUFzcGVjdFJhdGlvIiwieE1pZFlNaWQgbWVldCIpO2Yuc2V0QXR0cmlidXRlKCJmb2N1c2FibGUiLCJmYWxzZSIpO2Yuc3R5bGUuY3NzVGV4dD0KZztmLmFwcGVuZENoaWxkKGEpLnJlbW92ZUF0dHJpYnV0ZSgiaWQiKTtyZXR1cm4gZn1yZXR1cm4gbnVsbH19KTsKPC9zY3JpcHQ+CgoKPGlyb24taWNvbnNldC1zdmcgbmFtZT0icGFwZXItZHJvcGRvd24tbWVudSIgc2l6ZT0iMjQiPgo8c3ZnPjxkZWZzPgo8ZyBpZD0iYXJyb3ctZHJvcC1kb3duIj48cGF0aCBkPSJNNyAxMGw1IDUgNS01eiI+PC9wYXRoPjwvZz4KPC9kZWZzPjwvc3ZnPgo8L2lyb24taWNvbnNldC1zdmc+CgoKCjxkb20tbW9kdWxlIGlkPSJwYXBlci1kcm9wZG93bi1tZW51LXNoYXJlZC1zdHlsZXMiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsKCiAgICAgICAgLyogTk9URShjZGF0YSk6IEJvdGggdmFsdWVzIGFyZSBuZWVkZWQsIHNpbmNlIHNvbWUgcGhvbmVzIHJlcXVpcmUgdGhlCiAgICAgICAgICogdmFsdWUgdG8gYmUgYHRyYW5zcGFyZW50YC4KICAgICAgICAgKi8KICAgICAgICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHJnYmEoMCwwLDAsMCk7CiAgICAgICAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiB0cmFuc3BhcmVudDsKCiAgICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItaW5wdXQ6IHsKICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICAgICAgICBtYXgtd2lkdGg6IDEwMCU7CiAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIH07CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWRyb3Bkb3duLW1lbnU7CiAgICAgIH0KCiAgICAgIDpob3N0KFtkaXNhYmxlZF0pIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1kcm9wZG93bi1tZW51LWRpc2FibGVkOwogICAgICB9CgogICAgICA6aG9zdChbbm9pbmtdKSBwYXBlci1yaXBwbGUgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KCiAgICAgIDpob3N0KFtuby1sYWJlbC1mbG9hdF0pIHBhcGVyLXJpcHBsZSB7CiAgICAgICAgdG9wOiA4cHg7CiAgICAgIH0KCiAgICAgIHBhcGVyLXJpcHBsZSB7CiAgICAgICAgdG9wOiAxMnB4OwogICAgICAgIGxlZnQ6IDBweDsKICAgICAgICBib3R0b206IDhweDsKICAgICAgICByaWdodDogMHB4OwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1kcm9wZG93bi1tZW51LXJpcHBsZTsKICAgICAgfQoKICAgICAgcGFwZXItbWVudS1idXR0b24gewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBhZGRpbmc6IDA7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWRyb3Bkb3duLW1lbnUtYnV0dG9uOwogICAgICB9CgogICAgICBwYXBlci1pbnB1dCB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZHJvcGRvd24tbWVudS1pbnB1dDsKICAgICAgfQoKICAgICAgaXJvbi1pY29uIHsKICAgICAgICBjb2xvcjogdmFyKC0tZGlzYWJsZWQtdGV4dC1jb2xvcik7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWRyb3Bkb3duLW1lbnUtaWNvbjsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+CgoKCgo8ZG9tLW1vZHVsZSBpZD0icGFwZXItZHJvcGRvd24tbWVudSI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlIGluY2x1ZGU9InBhcGVyLWRyb3Bkb3duLW1lbnUtc2hhcmVkLXN0eWxlcyI+PC9zdHlsZT4KCiAgICAKICAgIDxzcGFuIHJvbGU9ImJ1dHRvbiI+PC9zcGFuPgogICAgPHBhcGVyLW1lbnUtYnV0dG9uIGlkPSJtZW51QnV0dG9uIiB2ZXJ0aWNhbC1hbGlnbj0iW1t2ZXJ0aWNhbEFsaWduXV0iIGhvcml6b250YWwtYWxpZ249IltbaG9yaXpvbnRhbEFsaWduXV0iIGR5bmFtaWMtYWxpZ249IltbZHluYW1pY0FsaWduXV0iIHZlcnRpY2FsLW9mZnNldD0iW1tfY29tcHV0ZU1lbnVWZXJ0aWNhbE9mZnNldChub0xhYmVsRmxvYXQsIHZlcnRpY2FsT2Zmc2V0KV1dIiBkaXNhYmxlZD0iW1tkaXNhYmxlZF1dIiBuby1hbmltYXRpb25zPSJbW25vQW5pbWF0aW9uc11dIiBvbi1pcm9uLXNlbGVjdD0iX29uSXJvblNlbGVjdCIgb24taXJvbi1kZXNlbGVjdD0iX29uSXJvbkRlc2VsZWN0IiBvcGVuZWQ9Int7b3BlbmVkfX0iIGNsb3NlLW9uLWFjdGl2YXRlIGFsbG93LW91dHNpZGUtc2Nyb2xsPSJbW2FsbG93T3V0c2lkZVNjcm9sbF1dIiByZXN0b3JlLWZvY3VzLW9uLWNsb3NlPSJbW3Jlc3RvcmVGb2N1c09uQ2xvc2VdXSI+CiAgICAgIAogICAgICA8ZGl2IGNsYXNzPSJkcm9wZG93bi10cmlnZ2VyIiBzbG90PSJkcm9wZG93bi10cmlnZ2VyIj4KICAgICAgICA8cGFwZXItcmlwcGxlPjwvcGFwZXItcmlwcGxlPgogICAgICAgIAogICAgICAgIDxwYXBlci1pbnB1dCB0eXBlPSJ0ZXh0IiBpbnZhbGlkPSJbW2ludmFsaWRdXSIgcmVhZG9ubHkgZGlzYWJsZWQ9IltbZGlzYWJsZWRdXSIgdmFsdWU9IltbdmFsdWVdXSIgcGxhY2Vob2xkZXI9IltbcGxhY2Vob2xkZXJdXSIgZXJyb3ItbWVzc2FnZT0iW1tlcnJvck1lc3NhZ2VdXSIgYWx3YXlzLWZsb2F0LWxhYmVsPSJbW2Fsd2F5c0Zsb2F0TGFiZWxdXSIgbm8tbGFiZWwtZmxvYXQ9Iltbbm9MYWJlbEZsb2F0XV0iIGxhYmVsPSJbW2xhYmVsXV0iPgogICAgICAgICAgCiAgICAgICAgICA8aXJvbi1pY29uIGljb249InBhcGVyLWRyb3Bkb3duLW1lbnU6YXJyb3ctZHJvcC1kb3duIiBzdWZmaXggc2xvdD0ic3VmZml4Ij48L2lyb24taWNvbj4KICAgICAgICA8L3BhcGVyLWlucHV0PgogICAgICA8L2Rpdj4KICAgICAgPHNsb3QgaWQ9ImNvbnRlbnQiIG5hbWU9ImRyb3Bkb3duLWNvbnRlbnQiIHNsb3Q9ImRyb3Bkb3duLWNvbnRlbnQiPjwvc2xvdD4KICAgIDwvcGFwZXItbWVudS1idXR0b24+CiAgPC90ZW1wbGF0ZT4KCiAgPHNjcmlwdD4vL35+V0VCUEFUSH5+L3BhcGVyLWRyb3Bkb3duLW1lbnUvcGFwZXItZHJvcGRvd24tbWVudS5odG1sLmpzCihmdW5jdGlvbigpe1BvbHltZXIoe2lzOiJwYXBlci1kcm9wZG93bi1tZW51IixiZWhhdmlvcnM6W1BvbHltZXIuSXJvbkJ1dHRvblN0YXRlLFBvbHltZXIuSXJvbkNvbnRyb2xTdGF0ZSxQb2x5bWVyLklyb25Gb3JtRWxlbWVudEJlaGF2aW9yLFBvbHltZXIuSXJvblZhbGlkYXRhYmxlQmVoYXZpb3JdLHByb3BlcnRpZXM6e3NlbGVjdGVkSXRlbUxhYmVsOnt0eXBlOlN0cmluZyxub3RpZnk6ITAscmVhZE9ubHk6ITB9LHNlbGVjdGVkSXRlbTp7dHlwZTpPYmplY3Qsbm90aWZ5OiEwLHJlYWRPbmx5OiEwfSx2YWx1ZTp7dHlwZTpTdHJpbmcsbm90aWZ5OiEwfSxsYWJlbDp7dHlwZTpTdHJpbmd9LHBsYWNlaG9sZGVyOnt0eXBlOlN0cmluZ30sZXJyb3JNZXNzYWdlOnt0eXBlOlN0cmluZ30sb3BlbmVkOnt0eXBlOkJvb2xlYW4sbm90aWZ5OiEwLHZhbHVlOiExLG9ic2VydmVyOiJfb3BlbmVkQ2hhbmdlZCJ9LGFsbG93T3V0c2lkZVNjcm9sbDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxub0xhYmVsRmxvYXQ6e3R5cGU6Qm9vbGVhbiwKdmFsdWU6ITEscmVmbGVjdFRvQXR0cmlidXRlOiEwfSxhbHdheXNGbG9hdExhYmVsOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LG5vQW5pbWF0aW9uczp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxob3Jpem9udGFsQWxpZ246e3R5cGU6U3RyaW5nLHZhbHVlOiJyaWdodCJ9LHZlcnRpY2FsQWxpZ246e3R5cGU6U3RyaW5nLHZhbHVlOiJ0b3AifSx2ZXJ0aWNhbE9mZnNldDpOdW1iZXIsZHluYW1pY0FsaWduOnt0eXBlOkJvb2xlYW59LHJlc3RvcmVGb2N1c09uQ2xvc2U6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMH19LGxpc3RlbmVyczp7dGFwOiJfb25UYXAifSxrZXlCaW5kaW5nczp7InVwIGRvd24iOiJvcGVuIixlc2M6ImNsb3NlIn0saG9zdEF0dHJpYnV0ZXM6e3JvbGU6ImNvbWJvYm94IiwiYXJpYS1hdXRvY29tcGxldGUiOiJub25lIiwiYXJpYS1oYXNwb3B1cCI6InRydWUifSxvYnNlcnZlcnM6WyJfc2VsZWN0ZWRJdGVtQ2hhbmdlZChzZWxlY3RlZEl0ZW0pIl0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt2YXIgYT0KdGhpcy5jb250ZW50RWxlbWVudDthJiZhLnNlbGVjdGVkSXRlbSYmdGhpcy5fc2V0U2VsZWN0ZWRJdGVtKGEuc2VsZWN0ZWRJdGVtKX0sZ2V0IGNvbnRlbnRFbGVtZW50KCl7Zm9yKHZhciBhPVBvbHltZXIuZG9tKHRoaXMuJC5jb250ZW50KS5nZXREaXN0cmlidXRlZE5vZGVzKCksYz0wLGQ9YS5sZW5ndGg7YzxkO2MrKylpZihhW2NdLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUpcmV0dXJuIGFbY119LG9wZW46ZnVuY3Rpb24oKXt0aGlzLiQubWVudUJ1dHRvbi5vcGVuKCl9LGNsb3NlOmZ1bmN0aW9uKCl7dGhpcy4kLm1lbnVCdXR0b24uY2xvc2UoKX0sX29uSXJvblNlbGVjdDpmdW5jdGlvbihhKXt0aGlzLl9zZXRTZWxlY3RlZEl0ZW0oYS5kZXRhaWwuaXRlbSl9LF9vbklyb25EZXNlbGVjdDpmdW5jdGlvbigpe3RoaXMuX3NldFNlbGVjdGVkSXRlbShudWxsKX0sX29uVGFwOmZ1bmN0aW9uKGEpe1BvbHltZXIuR2VzdHVyZXMuZmluZE9yaWdpbmFsVGFyZ2V0KGEpPT09dGhpcyYmCnRoaXMub3BlbigpfSxfc2VsZWN0ZWRJdGVtQ2hhbmdlZDpmdW5jdGlvbihhKXt0aGlzLnZhbHVlPWE9YT9hLmxhYmVsfHxhLmdldEF0dHJpYnV0ZSgibGFiZWwiKXx8YS50ZXh0Q29udGVudC50cmltKCk6IiI7dGhpcy5fc2V0U2VsZWN0ZWRJdGVtTGFiZWwoYSl9LF9jb21wdXRlTWVudVZlcnRpY2FsT2Zmc2V0OmZ1bmN0aW9uKGEsYyl7cmV0dXJuIGM/YzphPy00Ojh9LF9nZXRWYWxpZGl0eTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRpc2FibGVkfHwhdGhpcy5yZXF1aXJlZHx8dGhpcy5yZXF1aXJlZCYmISF0aGlzLnZhbHVlfSxfb3BlbmVkQ2hhbmdlZDpmdW5jdGlvbigpe3ZhciBhPXRoaXMub3BlbmVkPyJ0cnVlIjoiZmFsc2UiLGM9dGhpcy5jb250ZW50RWxlbWVudDtjJiZjLnNldEF0dHJpYnV0ZSgiYXJpYS1leHBhbmRlZCIsYSl9fSl9KSgpOwo8L3NjcmlwdD4KPC9kb20tbW9kdWxlPgoKCgoKCgoKPHNjcmlwdD4vL35+V0VCUEFUSH5+L2lyb24tc2VsZWN0b3IvaXJvbi1zZWxlY3Rpb24uaHRtbC5qcwpQb2x5bWVyLklyb25TZWxlY3Rpb249ZnVuY3Rpb24oYSl7dGhpcy5zZWxlY3Rpb249W107dGhpcy5zZWxlY3RDYWxsYmFjaz1hfTsKUG9seW1lci5Jcm9uU2VsZWN0aW9uLnByb3RvdHlwZT17Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubXVsdGk/dGhpcy5zZWxlY3Rpb24uc2xpY2UoKTp0aGlzLnNlbGVjdGlvblswXX0sY2xlYXI6ZnVuY3Rpb24oYSl7dGhpcy5zZWxlY3Rpb24uc2xpY2UoKS5mb3JFYWNoKGZ1bmN0aW9uKGMpeyghYXx8MD5hLmluZGV4T2YoYykpJiZ0aGlzLnNldEl0ZW1TZWxlY3RlZChjLCExKX0sdGhpcyl9LGlzU2VsZWN0ZWQ6ZnVuY3Rpb24oYSl7cmV0dXJuIDA8PXRoaXMuc2VsZWN0aW9uLmluZGV4T2YoYSl9LHNldEl0ZW1TZWxlY3RlZDpmdW5jdGlvbihhLGMpe2lmKG51bGwhPWEmJmMhPT10aGlzLmlzU2VsZWN0ZWQoYSkpe2lmKGMpdGhpcy5zZWxlY3Rpb24ucHVzaChhKTtlbHNle3ZhciBkPXRoaXMuc2VsZWN0aW9uLmluZGV4T2YoYSk7MDw9ZCYmdGhpcy5zZWxlY3Rpb24uc3BsaWNlKGQsMSl9dGhpcy5zZWxlY3RDYWxsYmFjayYmdGhpcy5zZWxlY3RDYWxsYmFjayhhLGMpfX0sc2VsZWN0OmZ1bmN0aW9uKGEpe3RoaXMubXVsdGk/CnRoaXMudG9nZ2xlKGEpOnRoaXMuZ2V0KCkhPT1hJiYodGhpcy5zZXRJdGVtU2VsZWN0ZWQodGhpcy5nZXQoKSwhMSksdGhpcy5zZXRJdGVtU2VsZWN0ZWQoYSwhMCkpfSx0b2dnbGU6ZnVuY3Rpb24oYSl7dGhpcy5zZXRJdGVtU2VsZWN0ZWQoYSwhdGhpcy5pc1NlbGVjdGVkKGEpKX19Owo8L3NjcmlwdD4KCgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vaXJvbi1zZWxlY3Rvci9pcm9uLXNlbGVjdGFibGUuaHRtbC5qcwpQb2x5bWVyLklyb25TZWxlY3RhYmxlQmVoYXZpb3I9e3Byb3BlcnRpZXM6e2F0dHJGb3JTZWxlY3RlZDp7dHlwZTpTdHJpbmcsdmFsdWU6bnVsbH0sc2VsZWN0ZWQ6e3R5cGU6U3RyaW5nLG5vdGlmeTohMH0sc2VsZWN0ZWRJdGVtOnt0eXBlOk9iamVjdCxyZWFkT25seTohMCxub3RpZnk6ITB9LGFjdGl2YXRlRXZlbnQ6e3R5cGU6U3RyaW5nLHZhbHVlOiJ0YXAiLG9ic2VydmVyOiJfYWN0aXZhdGVFdmVudENoYW5nZWQifSxzZWxlY3RhYmxlOlN0cmluZyxzZWxlY3RlZENsYXNzOnt0eXBlOlN0cmluZyx2YWx1ZToiaXJvbi1zZWxlY3RlZCJ9LHNlbGVjdGVkQXR0cmlidXRlOnt0eXBlOlN0cmluZyx2YWx1ZTpudWxsfSxmYWxsYmFja1NlbGVjdGlvbjp7dHlwZTpTdHJpbmcsdmFsdWU6bnVsbH0saXRlbXM6e3R5cGU6QXJyYXkscmVhZE9ubHk6ITAsbm90aWZ5OiEwLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuW119fSxfZXhjbHVkZWRMb2NhbE5hbWVzOnt0eXBlOk9iamVjdCx2YWx1ZTpmdW5jdGlvbigpe3JldHVybnt0ZW1wbGF0ZToxLAoiZG9tLWJpbmQiOjEsImRvbS1pZiI6MSwiZG9tLXJlcGVhdCI6MX19fX0sb2JzZXJ2ZXJzOlsiX3VwZGF0ZUF0dHJGb3JTZWxlY3RlZChhdHRyRm9yU2VsZWN0ZWQpIiwiX3VwZGF0ZVNlbGVjdGVkKHNlbGVjdGVkKSIsIl9jaGVja0ZhbGxiYWNrKGZhbGxiYWNrU2VsZWN0aW9uKSJdLGNyZWF0ZWQ6ZnVuY3Rpb24oKXt0aGlzLl9iaW5kRmlsdGVySXRlbT10aGlzLl9maWx0ZXJJdGVtLmJpbmQodGhpcyk7dGhpcy5fc2VsZWN0aW9uPW5ldyBQb2x5bWVyLklyb25TZWxlY3Rpb24odGhpcy5fYXBwbHlTZWxlY3Rpb24uYmluZCh0aGlzKSl9LGF0dGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fb2JzZXJ2ZXI9dGhpcy5fb2JzZXJ2ZUl0ZW1zKHRoaXMpO3RoaXMuX2FkZExpc3RlbmVyKHRoaXMuYWN0aXZhdGVFdmVudCl9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fb2JzZXJ2ZXImJlBvbHltZXIuZG9tKHRoaXMpLnVub2JzZXJ2ZU5vZGVzKHRoaXMuX29ic2VydmVyKTt0aGlzLl9yZW1vdmVMaXN0ZW5lcih0aGlzLmFjdGl2YXRlRXZlbnQpfSwKaW5kZXhPZjpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5pdGVtcz90aGlzLml0ZW1zLmluZGV4T2YoYSk6LTF9LHNlbGVjdDpmdW5jdGlvbihhKXt0aGlzLnNlbGVjdGVkPWF9LHNlbGVjdFByZXZpb3VzOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5pdGVtcy5sZW5ndGg7YT0oTnVtYmVyKHRoaXMuX3ZhbHVlVG9JbmRleCh0aGlzLnNlbGVjdGVkKSktMSthKSVhO3RoaXMuc2VsZWN0ZWQ9dGhpcy5faW5kZXhUb1ZhbHVlKGEpfSxzZWxlY3ROZXh0OmZ1bmN0aW9uKCl7dmFyIGE9KE51bWJlcih0aGlzLl92YWx1ZVRvSW5kZXgodGhpcy5zZWxlY3RlZCkpKzEpJXRoaXMuaXRlbXMubGVuZ3RoO3RoaXMuc2VsZWN0ZWQ9dGhpcy5faW5kZXhUb1ZhbHVlKGEpfSxzZWxlY3RJbmRleDpmdW5jdGlvbihhKXt0aGlzLnNlbGVjdCh0aGlzLl9pbmRleFRvVmFsdWUoYSkpfSxmb3JjZVN5bmNocm9ub3VzSXRlbVVwZGF0ZTpmdW5jdGlvbigpe3RoaXMuX29ic2VydmVyJiYiZnVuY3Rpb24iPT09dHlwZW9mIHRoaXMuX29ic2VydmVyLmZsdXNoPwp0aGlzLl9vYnNlcnZlci5mbHVzaCgpOnRoaXMuX3VwZGF0ZUl0ZW1zKCl9LGdldCBfc2hvdWxkVXBkYXRlU2VsZWN0aW9uKCl7cmV0dXJuIG51bGwhPXRoaXMuc2VsZWN0ZWR9LF9jaGVja0ZhbGxiYWNrOmZ1bmN0aW9uKCl7dGhpcy5fdXBkYXRlU2VsZWN0ZWQoKX0sX2FkZExpc3RlbmVyOmZ1bmN0aW9uKGEpe3RoaXMubGlzdGVuKHRoaXMsYSwiX2FjdGl2YXRlSGFuZGxlciIpfSxfcmVtb3ZlTGlzdGVuZXI6ZnVuY3Rpb24oYSl7dGhpcy51bmxpc3Rlbih0aGlzLGEsIl9hY3RpdmF0ZUhhbmRsZXIiKX0sX2FjdGl2YXRlRXZlbnRDaGFuZ2VkOmZ1bmN0aW9uKGEsYyl7dGhpcy5fcmVtb3ZlTGlzdGVuZXIoYyk7dGhpcy5fYWRkTGlzdGVuZXIoYSl9LF91cGRhdGVJdGVtczpmdW5jdGlvbigpe3ZhciBhPVBvbHltZXIuZG9tKHRoaXMpLnF1ZXJ5RGlzdHJpYnV0ZWRFbGVtZW50cyh0aGlzLnNlbGVjdGFibGV8fCIqIik7YT1BcnJheS5wcm90b3R5cGUuZmlsdGVyLmNhbGwoYSx0aGlzLl9iaW5kRmlsdGVySXRlbSk7CnRoaXMuX3NldEl0ZW1zKGEpfSxfdXBkYXRlQXR0ckZvclNlbGVjdGVkOmZ1bmN0aW9uKCl7dGhpcy5zZWxlY3RlZEl0ZW0mJih0aGlzLnNlbGVjdGVkPXRoaXMuX3ZhbHVlRm9ySXRlbSh0aGlzLnNlbGVjdGVkSXRlbSkpfSxfdXBkYXRlU2VsZWN0ZWQ6ZnVuY3Rpb24oKXt0aGlzLl9zZWxlY3RTZWxlY3RlZCh0aGlzLnNlbGVjdGVkKX0sX3NlbGVjdFNlbGVjdGVkOmZ1bmN0aW9uKCl7aWYodGhpcy5pdGVtcyl7dmFyIGE9dGhpcy5fdmFsdWVUb0l0ZW0odGhpcy5zZWxlY3RlZCk7YT90aGlzLl9zZWxlY3Rpb24uc2VsZWN0KGEpOnRoaXMuX3NlbGVjdGlvbi5jbGVhcigpO3RoaXMuZmFsbGJhY2tTZWxlY3Rpb24mJnRoaXMuaXRlbXMubGVuZ3RoJiZ2b2lkIDA9PT10aGlzLl9zZWxlY3Rpb24uZ2V0KCkmJih0aGlzLnNlbGVjdGVkPXRoaXMuZmFsbGJhY2tTZWxlY3Rpb24pfX0sX2ZpbHRlckl0ZW06ZnVuY3Rpb24oYSl7cmV0dXJuIXRoaXMuX2V4Y2x1ZGVkTG9jYWxOYW1lc1thLmxvY2FsTmFtZV19LApfdmFsdWVUb0l0ZW06ZnVuY3Rpb24oYSl7cmV0dXJuIG51bGw9PWE/bnVsbDp0aGlzLml0ZW1zW3RoaXMuX3ZhbHVlVG9JbmRleChhKV19LF92YWx1ZVRvSW5kZXg6ZnVuY3Rpb24oYSl7aWYodGhpcy5hdHRyRm9yU2VsZWN0ZWQpZm9yKHZhciBjPTAsZDtkPXRoaXMuaXRlbXNbY107YysrKXtpZih0aGlzLl92YWx1ZUZvckl0ZW0oZCk9PWEpcmV0dXJuIGN9ZWxzZSByZXR1cm4gTnVtYmVyKGEpfSxfaW5kZXhUb1ZhbHVlOmZ1bmN0aW9uKGEpe2lmKHRoaXMuYXR0ckZvclNlbGVjdGVkKXtpZihhPXRoaXMuaXRlbXNbYV0pcmV0dXJuIHRoaXMuX3ZhbHVlRm9ySXRlbShhKX1lbHNlIHJldHVybiBhfSxfdmFsdWVGb3JJdGVtOmZ1bmN0aW9uKGEpe2lmKCFhKXJldHVybiBudWxsO2lmKCF0aGlzLmF0dHJGb3JTZWxlY3RlZClyZXR1cm4gYT10aGlzLmluZGV4T2YoYSksLTE9PT1hP251bGw6YTt2YXIgYz1hW1BvbHltZXIuQ2FzZU1hcC5kYXNoVG9DYW1lbENhc2UodGhpcy5hdHRyRm9yU2VsZWN0ZWQpXTsKcmV0dXJuIHZvaWQgMCE9Yz9jOmEuZ2V0QXR0cmlidXRlKHRoaXMuYXR0ckZvclNlbGVjdGVkKX0sX2FwcGx5U2VsZWN0aW9uOmZ1bmN0aW9uKGEsYyl7dGhpcy5zZWxlY3RlZENsYXNzJiZ0aGlzLnRvZ2dsZUNsYXNzKHRoaXMuc2VsZWN0ZWRDbGFzcyxjLGEpO3RoaXMuc2VsZWN0ZWRBdHRyaWJ1dGUmJnRoaXMudG9nZ2xlQXR0cmlidXRlKHRoaXMuc2VsZWN0ZWRBdHRyaWJ1dGUsYyxhKTt0aGlzLl9zZWxlY3Rpb25DaGFuZ2UoKTt0aGlzLmZpcmUoImlyb24tIisoYz8ic2VsZWN0IjoiZGVzZWxlY3QiKSx7aXRlbTphfSl9LF9zZWxlY3Rpb25DaGFuZ2U6ZnVuY3Rpb24oKXt0aGlzLl9zZXRTZWxlY3RlZEl0ZW0odGhpcy5fc2VsZWN0aW9uLmdldCgpKX0sX29ic2VydmVJdGVtczpmdW5jdGlvbihhKXtyZXR1cm4gUG9seW1lci5kb20oYSkub2JzZXJ2ZU5vZGVzKGZ1bmN0aW9uKGMpe3RoaXMuX3VwZGF0ZUl0ZW1zKCk7dGhpcy5fdXBkYXRlU2VsZWN0ZWQoKTt0aGlzLmZpcmUoImlyb24taXRlbXMtY2hhbmdlZCIsCmMse2J1YmJsZXM6ITEsY2FuY2VsYWJsZTohMX0pfSl9LF9hY3RpdmF0ZUhhbmRsZXI6ZnVuY3Rpb24oYSl7YT1hLnRhcmdldDtmb3IodmFyIGM9dGhpcy5pdGVtczthJiZhIT10aGlzOyl7dmFyIGQ9Yy5pbmRleE9mKGEpO2lmKDA8PWQpe2M9dGhpcy5faW5kZXhUb1ZhbHVlKGQpO3RoaXMuX2l0ZW1BY3RpdmF0ZShjLGEpO2JyZWFrfWE9YS5wYXJlbnROb2RlfX0sX2l0ZW1BY3RpdmF0ZTpmdW5jdGlvbihhLGMpe3RoaXMuZmlyZSgiaXJvbi1hY3RpdmF0ZSIse3NlbGVjdGVkOmEsaXRlbTpjfSx7Y2FuY2VsYWJsZTohMH0pLmRlZmF1bHRQcmV2ZW50ZWR8fHRoaXMuc2VsZWN0KGEpfX07Cjwvc2NyaXB0PgoKCjxzY3JpcHQ+Ly9+fldFQlBBVEh+fi9pcm9uLXNlbGVjdG9yL2lyb24tbXVsdGktc2VsZWN0YWJsZS5odG1sLmpzClBvbHltZXIuSXJvbk11bHRpU2VsZWN0YWJsZUJlaGF2aW9ySW1wbD17cHJvcGVydGllczp7bXVsdGk6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxvYnNlcnZlcjoibXVsdGlDaGFuZ2VkIn0sc2VsZWN0ZWRWYWx1ZXM6e3R5cGU6QXJyYXksbm90aWZ5OiEwLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuW119fSxzZWxlY3RlZEl0ZW1zOnt0eXBlOkFycmF5LHJlYWRPbmx5OiEwLG5vdGlmeTohMCx2YWx1ZTpmdW5jdGlvbigpe3JldHVybltdfX19LG9ic2VydmVyczpbIl91cGRhdGVTZWxlY3RlZChzZWxlY3RlZFZhbHVlcy5zcGxpY2VzKSJdLHNlbGVjdDpmdW5jdGlvbihhKXt0aGlzLm11bHRpP3RoaXMuX3RvZ2dsZVNlbGVjdGVkKGEpOnRoaXMuc2VsZWN0ZWQ9YX0sbXVsdGlDaGFuZ2VkOmZ1bmN0aW9uKGEpe3RoaXMuX3NlbGVjdGlvbi5tdWx0aT1hO3RoaXMuX3VwZGF0ZVNlbGVjdGVkKCl9LGdldCBfc2hvdWxkVXBkYXRlU2VsZWN0aW9uKCl7cmV0dXJuIG51bGwhPXRoaXMuc2VsZWN0ZWR8fApudWxsIT10aGlzLnNlbGVjdGVkVmFsdWVzJiZ0aGlzLnNlbGVjdGVkVmFsdWVzLmxlbmd0aH0sX3VwZGF0ZUF0dHJGb3JTZWxlY3RlZDpmdW5jdGlvbigpe3RoaXMubXVsdGk/dGhpcy5zZWxlY3RlZEl0ZW1zJiYwPHRoaXMuc2VsZWN0ZWRJdGVtcy5sZW5ndGgmJih0aGlzLnNlbGVjdGVkVmFsdWVzPXRoaXMuc2VsZWN0ZWRJdGVtcy5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuX2luZGV4VG9WYWx1ZSh0aGlzLmluZGV4T2YoYSkpfSx0aGlzKS5maWx0ZXIoZnVuY3Rpb24oYSl7cmV0dXJuIG51bGwhPWF9LHRoaXMpKTpQb2x5bWVyLklyb25TZWxlY3RhYmxlQmVoYXZpb3IuX3VwZGF0ZUF0dHJGb3JTZWxlY3RlZC5hcHBseSh0aGlzKX0sX3VwZGF0ZVNlbGVjdGVkOmZ1bmN0aW9uKCl7dGhpcy5tdWx0aT90aGlzLl9zZWxlY3RNdWx0aSh0aGlzLnNlbGVjdGVkVmFsdWVzKTp0aGlzLl9zZWxlY3RTZWxlY3RlZCh0aGlzLnNlbGVjdGVkKX0sX3NlbGVjdE11bHRpOmZ1bmN0aW9uKGEpe2E9CmF8fFtdO2E9KHRoaXMuX3ZhbHVlc1RvSXRlbXMoYSl8fFtdKS5maWx0ZXIoZnVuY3Rpb24oZCl7cmV0dXJuIG51bGwhPT1kJiZ2b2lkIDAhPT1kfSk7dGhpcy5fc2VsZWN0aW9uLmNsZWFyKGEpO2Zvcih2YXIgYz0wO2M8YS5sZW5ndGg7YysrKXRoaXMuX3NlbGVjdGlvbi5zZXRJdGVtU2VsZWN0ZWQoYVtjXSwhMCk7dGhpcy5mYWxsYmFja1NlbGVjdGlvbiYmIXRoaXMuX3NlbGVjdGlvbi5nZXQoKS5sZW5ndGgmJnRoaXMuX3ZhbHVlVG9JdGVtKHRoaXMuZmFsbGJhY2tTZWxlY3Rpb24pJiZ0aGlzLnNlbGVjdCh0aGlzLmZhbGxiYWNrU2VsZWN0aW9uKX0sX3NlbGVjdGlvbkNoYW5nZTpmdW5jdGlvbigpe3ZhciBhPXRoaXMuX3NlbGVjdGlvbi5nZXQoKTt0aGlzLm11bHRpPyh0aGlzLl9zZXRTZWxlY3RlZEl0ZW1zKGEpLHRoaXMuX3NldFNlbGVjdGVkSXRlbShhLmxlbmd0aD9hWzBdOm51bGwpKTpudWxsIT09YSYmdm9pZCAwIT09YT8odGhpcy5fc2V0U2VsZWN0ZWRJdGVtcyhbYV0pLAp0aGlzLl9zZXRTZWxlY3RlZEl0ZW0oYSkpOih0aGlzLl9zZXRTZWxlY3RlZEl0ZW1zKFtdKSx0aGlzLl9zZXRTZWxlY3RlZEl0ZW0obnVsbCkpfSxfdG9nZ2xlU2VsZWN0ZWQ6ZnVuY3Rpb24oYSl7dmFyIGM9dGhpcy5zZWxlY3RlZFZhbHVlcy5pbmRleE9mKGEpOzA+Yz90aGlzLnB1c2goInNlbGVjdGVkVmFsdWVzIixhKTp0aGlzLnNwbGljZSgic2VsZWN0ZWRWYWx1ZXMiLGMsMSl9LF92YWx1ZXNUb0l0ZW1zOmZ1bmN0aW9uKGEpe3JldHVybiBudWxsPT1hP251bGw6YS5tYXAoZnVuY3Rpb24oYyl7cmV0dXJuIHRoaXMuX3ZhbHVlVG9JdGVtKGMpfSx0aGlzKX19O1BvbHltZXIuSXJvbk11bHRpU2VsZWN0YWJsZUJlaGF2aW9yPVtQb2x5bWVyLklyb25TZWxlY3RhYmxlQmVoYXZpb3IsUG9seW1lci5Jcm9uTXVsdGlTZWxlY3RhYmxlQmVoYXZpb3JJbXBsXTsKPC9zY3JpcHQ+CgoKCjxzY3JpcHQ+Ly9+fldFQlBBVEh+fi9pcm9uLW1lbnUtYmVoYXZpb3IvaXJvbi1tZW51LWJlaGF2aW9yLmh0bWwuanMKUG9seW1lci5Jcm9uTWVudUJlaGF2aW9ySW1wbD17cHJvcGVydGllczp7Zm9jdXNlZEl0ZW06e29ic2VydmVyOiJfZm9jdXNlZEl0ZW1DaGFuZ2VkIixyZWFkT25seTohMCx0eXBlOk9iamVjdH0sYXR0ckZvckl0ZW1UaXRsZTp7dHlwZTpTdHJpbmd9LGRpc2FibGVkOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEsb2JzZXJ2ZXI6Il9kaXNhYmxlZENoYW5nZWQifX0sX01PRElGSUVSX0tFWVM6IkFsdCBBbHRHcmFwaCBDYXBzTG9jayBDb250cm9sIEZuIEZuTG9jayBIeXBlciBNZXRhIE51bUxvY2sgT1MgU2Nyb2xsTG9jayBTaGlmdCBTdXBlciBTeW1ib2wgU3ltYm9sTG9jayIuc3BsaXQoIiAiKSxfU0VBUkNIX1JFU0VUX1RJTUVPVVRfTVM6MUUzLF9wcmV2aW91c1RhYkluZGV4OjAsaG9zdEF0dHJpYnV0ZXM6e3JvbGU6Im1lbnUifSxvYnNlcnZlcnM6WyJfdXBkYXRlTXVsdGlzZWxlY3RhYmxlKG11bHRpKSJdLGxpc3RlbmVyczp7Zm9jdXM6Il9vbkZvY3VzIixrZXlkb3duOiJfb25LZXlkb3duIiwKImlyb24taXRlbXMtY2hhbmdlZCI6Il9vbklyb25JdGVtc0NoYW5nZWQifSxrZXlCaW5kaW5nczp7dXA6Il9vblVwS2V5Iixkb3duOiJfb25Eb3duS2V5Iixlc2M6Il9vbkVzY0tleSIsInNoaWZ0K3RhYjprZXlkb3duIjoiX29uU2hpZnRUYWJEb3duIn0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl9yZXNldFRhYmluZGljZXMoKX0sc2VsZWN0OmZ1bmN0aW9uKGEpe3RoaXMuX2RlZmF1bHRGb2N1c0FzeW5jJiYodGhpcy5jYW5jZWxBc3luYyh0aGlzLl9kZWZhdWx0Rm9jdXNBc3luYyksdGhpcy5fZGVmYXVsdEZvY3VzQXN5bmM9bnVsbCk7dmFyIGM9dGhpcy5fdmFsdWVUb0l0ZW0oYSk7YyYmYy5oYXNBdHRyaWJ1dGUoImRpc2FibGVkIil8fCh0aGlzLl9zZXRGb2N1c2VkSXRlbShjKSxQb2x5bWVyLklyb25NdWx0aVNlbGVjdGFibGVCZWhhdmlvckltcGwuc2VsZWN0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9LF9yZXNldFRhYmluZGljZXM6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLm11bHRpPwp0aGlzLnNlbGVjdGVkSXRlbXMmJnRoaXMuc2VsZWN0ZWRJdGVtc1swXTp0aGlzLnNlbGVjdGVkSXRlbTt0aGlzLml0ZW1zLmZvckVhY2goZnVuY3Rpb24oYyl7Yy5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IixjPT09YT8iMCI6Ii0xIil9LHRoaXMpfSxfdXBkYXRlTXVsdGlzZWxlY3RhYmxlOmZ1bmN0aW9uKGEpe2E/dGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtbXVsdGlzZWxlY3RhYmxlIiwidHJ1ZSIpOnRoaXMucmVtb3ZlQXR0cmlidXRlKCJhcmlhLW11bHRpc2VsZWN0YWJsZSIpfSxfZm9jdXNXaXRoS2V5Ym9hcmRFdmVudDpmdW5jdGlvbihhKXtpZigtMT09PXRoaXMuX01PRElGSUVSX0tFWVMuaW5kZXhPZihhLmtleSkpe3RoaXMuY2FuY2VsRGVib3VuY2VyKCJfY2xlYXJTZWFyY2hUZXh0Iik7dmFyIGM9dGhpcy5fc2VhcmNoVGV4dHx8IiI7Yys9KGEua2V5JiYxPT1hLmtleS5sZW5ndGg/YS5rZXk6U3RyaW5nLmZyb21DaGFyQ29kZShhLmtleUNvZGUpKS50b0xvY2FsZUxvd2VyQ2FzZSgpOwphPWMubGVuZ3RoO2Zvcih2YXIgZD0wLGY7Zj10aGlzLml0ZW1zW2RdO2QrKylpZighZi5oYXNBdHRyaWJ1dGUoImRpc2FibGVkIikpe3ZhciBnPXRoaXMuYXR0ckZvckl0ZW1UaXRsZXx8InRleHRDb250ZW50IjtnPShmW2ddfHxmLmdldEF0dHJpYnV0ZShnKXx8IiIpLnRyaW0oKTtpZighKGcubGVuZ3RoPGEpJiZnLnNsaWNlKDAsYSkudG9Mb2NhbGVMb3dlckNhc2UoKT09Yyl7dGhpcy5fc2V0Rm9jdXNlZEl0ZW0oZik7YnJlYWt9fXRoaXMuX3NlYXJjaFRleHQ9Yzt0aGlzLmRlYm91bmNlKCJfY2xlYXJTZWFyY2hUZXh0Iix0aGlzLl9jbGVhclNlYXJjaFRleHQsdGhpcy5fU0VBUkNIX1JFU0VUX1RJTUVPVVRfTVMpfX0sX2NsZWFyU2VhcmNoVGV4dDpmdW5jdGlvbigpe3RoaXMuX3NlYXJjaFRleHQ9IiJ9LF9mb2N1c1ByZXZpb3VzOmZ1bmN0aW9uKCl7Zm9yKHZhciBhPXRoaXMuaXRlbXMubGVuZ3RoLGM9TnVtYmVyKHRoaXMuaW5kZXhPZih0aGlzLmZvY3VzZWRJdGVtKSksZD0xO2Q8CmErMTtkKyspe3ZhciBmPXRoaXMuaXRlbXNbKGMtZCthKSVhXTtpZighZi5oYXNBdHRyaWJ1dGUoImRpc2FibGVkIikpe3ZhciBnPVBvbHltZXIuZG9tKGYpLmdldE93bmVyUm9vdCgpfHxkb2N1bWVudDt0aGlzLl9zZXRGb2N1c2VkSXRlbShmKTtpZihQb2x5bWVyLmRvbShnKS5hY3RpdmVFbGVtZW50PT1mKWJyZWFrfX19LF9mb2N1c05leHQ6ZnVuY3Rpb24oKXtmb3IodmFyIGE9dGhpcy5pdGVtcy5sZW5ndGgsYz1OdW1iZXIodGhpcy5pbmRleE9mKHRoaXMuZm9jdXNlZEl0ZW0pKSxkPTE7ZDxhKzE7ZCsrKXt2YXIgZj10aGlzLml0ZW1zWyhjK2QpJWFdO2lmKCFmLmhhc0F0dHJpYnV0ZSgiZGlzYWJsZWQiKSl7dmFyIGc9UG9seW1lci5kb20oZikuZ2V0T3duZXJSb290KCl8fGRvY3VtZW50O3RoaXMuX3NldEZvY3VzZWRJdGVtKGYpO2lmKFBvbHltZXIuZG9tKGcpLmFjdGl2ZUVsZW1lbnQ9PWYpYnJlYWt9fX0sX2FwcGx5U2VsZWN0aW9uOmZ1bmN0aW9uKGEsYyl7Yz9hLnNldEF0dHJpYnV0ZSgiYXJpYS1zZWxlY3RlZCIsCiJ0cnVlIik6YS5yZW1vdmVBdHRyaWJ1dGUoImFyaWEtc2VsZWN0ZWQiKTtQb2x5bWVyLklyb25TZWxlY3RhYmxlQmVoYXZpb3IuX2FwcGx5U2VsZWN0aW9uLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sX2ZvY3VzZWRJdGVtQ2hhbmdlZDpmdW5jdGlvbihhLGMpe2MmJmMuc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsIi0xIik7IWF8fGEuaGFzQXR0cmlidXRlKCJkaXNhYmxlZCIpfHx0aGlzLmRpc2FibGVkfHwoYS5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IiwiMCIpLGEuZm9jdXMoKSl9LF9vbklyb25JdGVtc0NoYW5nZWQ6ZnVuY3Rpb24oYSl7YS5kZXRhaWwuYWRkZWROb2Rlcy5sZW5ndGgmJnRoaXMuX3Jlc2V0VGFiaW5kaWNlcygpfSxfb25TaGlmdFRhYkRvd246ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmdldEF0dHJpYnV0ZSgidGFiaW5kZXgiKTtQb2x5bWVyLklyb25NZW51QmVoYXZpb3JJbXBsLl9zaGlmdFRhYlByZXNzZWQ9ITA7dGhpcy5fc2V0Rm9jdXNlZEl0ZW0obnVsbCk7dGhpcy5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IiwKIi0xIik7dGhpcy5hc3luYyhmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsYSk7UG9seW1lci5Jcm9uTWVudUJlaGF2aW9ySW1wbC5fc2hpZnRUYWJQcmVzc2VkPSExfSwxKX0sX29uRm9jdXM6ZnVuY3Rpb24oYSl7IVBvbHltZXIuSXJvbk1lbnVCZWhhdmlvckltcGwuX3NoaWZ0VGFiUHJlc3NlZCYmKGE9UG9seW1lci5kb20oYSkucm9vdFRhcmdldCxhPT09dGhpc3x8InVuZGVmaW5lZCI9PT10eXBlb2YgYS50YWJJbmRleHx8dGhpcy5pc0xpZ2h0RGVzY2VuZGFudChhKSkmJih0aGlzLl9kZWZhdWx0Rm9jdXNBc3luYz10aGlzLmFzeW5jKGZ1bmN0aW9uKCl7dmFyIGM9dGhpcy5tdWx0aT90aGlzLnNlbGVjdGVkSXRlbXMmJnRoaXMuc2VsZWN0ZWRJdGVtc1swXTp0aGlzLnNlbGVjdGVkSXRlbTt0aGlzLl9zZXRGb2N1c2VkSXRlbShudWxsKTtjP3RoaXMuX3NldEZvY3VzZWRJdGVtKGMpOnRoaXMuaXRlbXNbMF0mJnRoaXMuX2ZvY3VzTmV4dCgpfSkpfSxfb25VcEtleTpmdW5jdGlvbihhKXt0aGlzLl9mb2N1c1ByZXZpb3VzKCk7CmEuZGV0YWlsLmtleWJvYXJkRXZlbnQucHJldmVudERlZmF1bHQoKX0sX29uRG93bktleTpmdW5jdGlvbihhKXt0aGlzLl9mb2N1c05leHQoKTthLmRldGFpbC5rZXlib2FyZEV2ZW50LnByZXZlbnREZWZhdWx0KCl9LF9vbkVzY0tleTpmdW5jdGlvbigpe3ZhciBhPXRoaXMuZm9jdXNlZEl0ZW07YSYmYS5ibHVyKCl9LF9vbktleWRvd246ZnVuY3Rpb24oYSl7dGhpcy5rZXlib2FyZEV2ZW50TWF0Y2hlc0tleXMoYSwidXAgZG93biBlc2MiKXx8dGhpcy5fZm9jdXNXaXRoS2V5Ym9hcmRFdmVudChhKTthLnN0b3BQcm9wYWdhdGlvbigpfSxfYWN0aXZhdGVIYW5kbGVyOmZ1bmN0aW9uKGEpe1BvbHltZXIuSXJvblNlbGVjdGFibGVCZWhhdmlvci5fYWN0aXZhdGVIYW5kbGVyLmNhbGwodGhpcyxhKTthLnN0b3BQcm9wYWdhdGlvbigpfSxfZGlzYWJsZWRDaGFuZ2VkOmZ1bmN0aW9uKGEpe2E/KHRoaXMuX3ByZXZpb3VzVGFiSW5kZXg9dGhpcy5oYXNBdHRyaWJ1dGUoInRhYmluZGV4Iik/dGhpcy50YWJJbmRleDoKMCx0aGlzLnJlbW92ZUF0dHJpYnV0ZSgidGFiaW5kZXgiKSk6dGhpcy5oYXNBdHRyaWJ1dGUoInRhYmluZGV4Iil8fHRoaXMuc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsdGhpcy5fcHJldmlvdXNUYWJJbmRleCl9fTtQb2x5bWVyLklyb25NZW51QmVoYXZpb3JJbXBsLl9zaGlmdFRhYlByZXNzZWQ9ITE7UG9seW1lci5Jcm9uTWVudUJlaGF2aW9yPVtQb2x5bWVyLklyb25NdWx0aVNlbGVjdGFibGVCZWhhdmlvcixQb2x5bWVyLklyb25BMTF5S2V5c0JlaGF2aW9yLFBvbHltZXIuSXJvbk1lbnVCZWhhdmlvckltcGxdOwo8L3NjcmlwdD4KCgoKCgo8ZG9tLW1vZHVsZSBpZD0icGFwZXItbGlzdGJveCI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcGFkZGluZzogOHB4IDA7CgogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXBhcGVyLWxpc3Rib3gtYmFja2dyb3VuZC1jb2xvciwgdmFyKC0tcHJpbWFyeS1iYWNrZ3JvdW5kLWNvbG9yKSk7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWxpc3Rib3gtY29sb3IsIHZhcigtLXByaW1hcnktdGV4dC1jb2xvcikpOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1saXN0Ym94OwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxzbG90Pjwvc2xvdD4KICA8L3RlbXBsYXRlPgoKICA8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vcGFwZXItbGlzdGJveC9wYXBlci1saXN0Ym94Lmh0bWwuanMKKGZ1bmN0aW9uKCl7UG9seW1lcih7aXM6InBhcGVyLWxpc3Rib3giLGJlaGF2aW9yczpbUG9seW1lci5Jcm9uTWVudUJlaGF2aW9yXSxob3N0QXR0cmlidXRlczp7cm9sZToibGlzdGJveCJ9fSl9KSgpOwo8L3NjcmlwdD4KPC9kb20tbW9kdWxlPgoKCgoKCgoKCgoKPHNjcmlwdD4vL35+V0VCUEFUSH5+L3BhcGVyLWl0ZW0vcGFwZXItaXRlbS1iZWhhdmlvci5odG1sLmpzClBvbHltZXIuUGFwZXJJdGVtQmVoYXZpb3JJbXBsPXtob3N0QXR0cmlidXRlczp7cm9sZToib3B0aW9uIix0YWJpbmRleDoiMCJ9fTtQb2x5bWVyLlBhcGVySXRlbUJlaGF2aW9yPVtQb2x5bWVyLklyb25CdXR0b25TdGF0ZSxQb2x5bWVyLklyb25Db250cm9sU3RhdGUsUG9seW1lci5QYXBlckl0ZW1CZWhhdmlvckltcGxdOwo8L3NjcmlwdD4KCgoKCgoKPGRvbS1tb2R1bGUgaWQ9InBhcGVyLWl0ZW0tc2hhcmVkLXN0eWxlcyI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICA6aG9zdCwgLnBhcGVyLWl0ZW0gewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBtaW4taGVpZ2h0OiB2YXIoLS1wYXBlci1pdGVtLW1pbi1oZWlnaHQsIDQ4cHgpOwogICAgICAgIHBhZGRpbmc6IDBweCAxNnB4OwogICAgICB9CgogICAgICAucGFwZXItaXRlbSB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1zdWJoZWFkOwogICAgICAgIGJvcmRlcjpub25lOwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgYmFja2dyb3VuZDogd2hpdGU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsKICAgICAgfQoKICAgICAgOmhvc3QoW2hpZGRlbl0pLCAucGFwZXItaXRlbVtoaWRkZW5dIHsKICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICAgIH0KCiAgICAgIDpob3N0KC5pcm9uLXNlbGVjdGVkKSwgLnBhcGVyLWl0ZW0uaXJvbi1zZWxlY3RlZCB7CiAgICAgICAgZm9udC13ZWlnaHQ6IHZhcigtLXBhcGVyLWl0ZW0tc2VsZWN0ZWQtd2VpZ2h0LCBib2xkKTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItaXRlbS1zZWxlY3RlZDsKICAgICAgfQoKICAgICAgOmhvc3QoW2Rpc2FibGVkXSksIC5wYXBlci1pdGVtW2Rpc2FibGVkXSB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWl0ZW0tZGlzYWJsZWQtY29sb3IsIHZhcigtLWRpc2FibGVkLXRleHQtY29sb3IpKTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItaXRlbS1kaXNhYmxlZDsKICAgICAgfQoKICAgICAgOmhvc3QoOmZvY3VzKSwgLnBhcGVyLWl0ZW06Zm9jdXMgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBvdXRsaW5lOiAwOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1pdGVtLWZvY3VzZWQ7CiAgICAgIH0KCiAgICAgIDpob3N0KDpmb2N1cyk6YmVmb3JlLCAucGFwZXItaXRlbTpmb2N1czpiZWZvcmUgewogICAgICAgIEBhcHBseSAtLWxheW91dC1maXQ7CgogICAgICAgIGJhY2tncm91bmQ6IGN1cnJlbnRDb2xvcjsKICAgICAgICBjb250ZW50OiAnJzsKICAgICAgICBvcGFjaXR5OiB2YXIoLS1kYXJrLWRpdmlkZXItb3BhY2l0eSk7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWl0ZW0tZm9jdXNlZC1iZWZvcmU7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPgoKCgoKPGRvbS1tb2R1bGUgaWQ9InBhcGVyLWl0ZW0iPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZSBpbmNsdWRlPSJwYXBlci1pdGVtLXNoYXJlZC1zdHlsZXMiPgogICAgICA6aG9zdCB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWhvcml6b250YWw7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWNlbnRlcjsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LXN1YmhlYWQ7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWl0ZW07CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8c2xvdD48L3Nsb3Q+CiAgPC90ZW1wbGF0ZT4KCiAgPHNjcmlwdD4vL35+V0VCUEFUSH5+L3BhcGVyLWl0ZW0vcGFwZXItaXRlbS5odG1sLmpzClBvbHltZXIoe2lzOiJwYXBlci1pdGVtIixiZWhhdmlvcnM6W1BvbHltZXIuUGFwZXJJdGVtQmVoYXZpb3JdfSk7Cjwvc2NyaXB0Pgo8L2RvbS1tb2R1bGU+CgoKCgoKPHNjcmlwdD4vL35+V0VCUEFUSH5+L3Z6LXNvcnRpbmcvc29ydGluZy5qcwp2YXIgT2s7CihmdW5jdGlvbihhKXtmdW5jdGlvbiBjKGcsbCl7bGV0IGs7KGZ1bmN0aW9uKHApe3BbcC5OQVRVUkFMPTBdPSJOQVRVUkFMIjtwW3AuUkVBTD0xXT0iUkVBTCI7cFtwLkVYUE9ORU5UX1NJR049Ml09IkVYUE9ORU5UX1NJR04iO3BbcC5FWFBPTkVOVD0zXT0iRVhQT05FTlQifSkoa3x8KGs9e30pKTtsZXQgbT1rLk5BVFVSQUw7Zm9yKDtsPGcubGVuZ3RoO2wrKylpZihtPT09ay5OQVRVUkFMKWlmKCIuIj09PWdbbF0pbT1rLlJFQUw7ZWxzZSBpZigiZSI9PT1nW2xdfHwiRSI9PT1nW2xdKW09ay5FWFBPTkVOVF9TSUdOO2Vsc2V7aWYoIWQoZ1tsXSkpYnJlYWt9ZWxzZSBpZihtPT09ay5SRUFMKWlmKCJlIj09PWdbbF18fCJFIj09PWdbbF0pbT1rLkVYUE9ORU5UX1NJR047ZWxzZXtpZighZChnW2xdKSlicmVha31lbHNlIGlmKG09PT1rLkVYUE9ORU5UX1NJR04paWYoZChnW2xdKXx8IisiPT09Z1tsXXx8Ii0iPT09Z1tsXSltPWsuRVhQT05FTlQ7ZWxzZSBicmVhaztlbHNlIGlmKG09PT1rLkVYUE9ORU5UJiYKIWQoZ1tsXSkpYnJlYWs7cmV0dXJuIGx9ZnVuY3Rpb24gZChnKXtyZXR1cm4iMCI8PWcmJiI5Ij49Z31mdW5jdGlvbiBmKGcpe3JldHVybiIvIj09PWd8fCJfIj09PWd8fGQoZyl9YS5jb21wYXJlVGFnTmFtZXM9ZnVuY3Rpb24oZyxsKXtsZXQgaz0wLG09MDtmb3IoOzspe2lmKGs9PT1nLmxlbmd0aClyZXR1cm4gbT09PWwubGVuZ3RoPzA6LTE7aWYobT09PWwubGVuZ3RoKXJldHVybiAxO2lmKGQoZ1trXSkmJmQobFttXSkpe3ZhciBwPWsscT1tO2s9YyhnLGsrMSk7bT1jKGwsbSsxKTtwPXBhcnNlRmxvYXQoZy5zbGljZShwLGspKTtxPXBhcnNlRmxvYXQobC5zbGljZShxLG0pKTtpZihwPHEpcmV0dXJuLTE7aWYocD5xKXJldHVybiAxfWVsc2V7aWYoZihnW2tdKSl7aWYoIWYobFttXSkpcmV0dXJuLTF9ZWxzZXtpZihmKGxbbV0pKXJldHVybiAxO2lmKGdba108bFttXSlyZXR1cm4tMTtpZihnW2tdPmxbbV0pcmV0dXJuIDF9aysrO20rK319fX0pKE9rfHwoT2s9e30pKTsKPC9zY3JpcHQ+CgoKPHNjcmlwdD4vL35+V0VCUEFUSH5+L3RmLWJhY2tlbmQvcmVxdWVzdE1hbmFnZXIuanMKdmFyIFBrOwooZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYyhyLHQsdixBKXtjb25zdCB5PW5ldyBYTUxIdHRwUmVxdWVzdDt5Lm9wZW4ocix0KTt2JiYoeS53aXRoQ3JlZGVudGlhbHM9dik7QSYmeS5zZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LVR5cGUiLEEpO3JldHVybiB5fWZ1bmN0aW9uIGQocil7Y29uc3QgdD1uZXcgcDtpZighcilyZXR1cm4gdC5tZXRob2RUeXBlPW0uR0VULHQ7dC5tZXRob2RUeXBlPW0uUE9TVDt0LmJvZHk9ZihyKTtyZXR1cm4gdH1mdW5jdGlvbiBmKHIpe2NvbnN0IHQ9bmV3IEZvcm1EYXRhO2ZvcihsZXQgdiBpbiByKXYmJnQuYXBwZW5kKHYsclt2XSk7cmV0dXJuIHR9Y2xhc3MgZyBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKTt0aGlzLm5hbWU9IlJlcXVlc3RDYW5jZWxsYXRpb25FcnJvciJ9fWEuUmVxdWVzdENhbmNlbGxhdGlvbkVycm9yPWc7Y2xhc3MgbCBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKHIpe3N1cGVyKHIpO3RoaXMubmFtZT0KIkludmFsaWRSZXF1ZXN0T3B0aW9uc0Vycm9yIjtPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcyxsLnByb3RvdHlwZSl9fWEuSW52YWxpZFJlcXVlc3RPcHRpb25zRXJyb3I9bDtjbGFzcyBrIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3Iocix0KXtzdXBlcigpO3RoaXMubWVzc2FnZT1gUmVxdWVzdE5ldHdvcmtFcnJvcjogJHtyLnN0YXR1c30gYXQgJHt0fWA7dGhpcy5uYW1lPSJSZXF1ZXN0TmV0d29ya0Vycm9yIjt0aGlzLnJlcT1yO3RoaXMudXJsPXR9fWEuUmVxdWVzdE5ldHdvcmtFcnJvcj1rO2xldCBtOyhmdW5jdGlvbihyKXtyLkdFVD0iR0VUIjtyLlBPU1Q9IlBPU1QifSkobT1hLkh0dHBNZXRob2RUeXBlfHwoYS5IdHRwTWV0aG9kVHlwZT17fSkpO2NsYXNzIHB7dmFsaWRhdGUoKXtpZih0aGlzLm1ldGhvZFR5cGU9PT1tLkdFVCYmdGhpcy5ib2R5KXRocm93IG5ldyBsKCJib2R5IG11c3QgYmUgbWlzc2luZyBmb3IgYSBHRVQgcmVxdWVzdC4iKTt9fWEuUmVxdWVzdE9wdGlvbnM9CnA7Y2xhc3MgcXtjb25zdHJ1Y3RvcihyPTEwLHQ9Myl7dGhpcy5fcXVldWU9W107dGhpcy5fbkFjdGl2ZVJlcXVlc3RzPTA7dGhpcy5fblNpbXVsdGFuZW91c1JlcXVlc3RzPXI7dGhpcy5fbWF4UmV0cmllcz10fXJlcXVlc3Qocix0KXt0PWQodCk7cmV0dXJuIHRoaXMucmVxdWVzdFdpdGhPcHRpb25zKHIsdCl9cmVxdWVzdFdpdGhPcHRpb25zKHIsdCl7dC52YWxpZGF0ZSgpO3JldHVybihuZXcgUHJvbWlzZSgodixBKT0+e3RoaXMuX3F1ZXVlLnB1c2goe3Jlc29sdmU6dixyZWplY3Q6QX0pO3RoaXMubGF1bmNoUmVxdWVzdHMoKX0pKS50aGVuKCgpPT50aGlzLnByb21pc2VXaXRoUmV0cmllcyhyLHRoaXMuX21heFJldHJpZXMsdCkpLnRoZW4odj0+e3RoaXMuX25BY3RpdmVSZXF1ZXN0cy0tO3RoaXMubGF1bmNoUmVxdWVzdHMoKTtyZXR1cm4gdn0sdj0+eyJSZXF1ZXN0TmV0d29ya0Vycm9yIj09PXYubmFtZSYmKHRoaXMuX25BY3RpdmVSZXF1ZXN0cy0tLHRoaXMubGF1bmNoUmVxdWVzdHMoKSk7CnJldHVybiBQcm9taXNlLnJlamVjdCh2KX0pfWZldGNoKHIsdCl7cmV0dXJuKG5ldyBQcm9taXNlKCh2LEEpPT57dGhpcy5fcXVldWUucHVzaCh7cmVzb2x2ZTp2LHJlamVjdDpBfSk7dGhpcy5sYXVuY2hSZXF1ZXN0cygpfSkpLnRoZW4oKCk9PntsZXQgdj0xO3JldHVybiBuZXcgUHJvbWlzZShBPT57Y29uc3QgeT0oKT0+e2ZldGNoKHIsdCkudGhlbih4PT57IXgub2smJnRoaXMuX21heFJldHJpZXM+dj8odisrLHkoKSk6KEEoeCksdGhpcy5fbkFjdGl2ZVJlcXVlc3RzLS0sdGhpcy5sYXVuY2hSZXF1ZXN0cygpKX0pfTt5KCl9KX0pfWNsZWFyUXVldWUoKXtmb3IoOzA8dGhpcy5fcXVldWUubGVuZ3RoOyl0aGlzLl9xdWV1ZS5wb3AoKS5yZWplY3QobmV3IGcoIlJlcXVlc3QgY2FuY2VsbGVkIGJ5IGNsZWFyUXVldWUiKSl9YWN0aXZlUmVxdWVzdHMoKXtyZXR1cm4gdGhpcy5fbkFjdGl2ZVJlcXVlc3RzfW91dHN0YW5kaW5nUmVxdWVzdHMoKXtyZXR1cm4gdGhpcy5fbkFjdGl2ZVJlcXVlc3RzKwp0aGlzLl9xdWV1ZS5sZW5ndGh9bGF1bmNoUmVxdWVzdHMoKXtmb3IoO3RoaXMuX25BY3RpdmVSZXF1ZXN0czx0aGlzLl9uU2ltdWx0YW5lb3VzUmVxdWVzdHMmJjA8dGhpcy5fcXVldWUubGVuZ3RoOyl0aGlzLl9uQWN0aXZlUmVxdWVzdHMrKyx0aGlzLl9xdWV1ZS5wb3AoKS5yZXNvbHZlKCl9cHJvbWlzZVdpdGhSZXRyaWVzKHIsdCx2KXtyZXR1cm4gdGhpcy5fcHJvbWlzZUZyb21Vcmwocix2KS50aGVuKEE9PkEsQT0+MDx0P3RoaXMucHJvbWlzZVdpdGhSZXRyaWVzKHIsdC0xLHYpOlByb21pc2UucmVqZWN0KEEpKX1fcHJvbWlzZUZyb21Vcmwocix0KXtyZXR1cm4gbmV3IFByb21pc2UoKHYsQSk9Pntjb25zdCB5PWModC5tZXRob2RUeXBlLHIsdC53aXRoQ3JlZGVudGlhbHMsdC5jb250ZW50VHlwZSk7eS5vbmxvYWQ9ZnVuY3Rpb24oKXsyMDA9PT15LnN0YXR1cz92KEpTT04ucGFyc2UoeS5yZXNwb25zZVRleHQpKTpBKG5ldyBrKHkscikpfTt5Lm9uZXJyb3I9ZnVuY3Rpb24oKXtBKG5ldyBrKHksCnIpKX07dC5ib2R5P3kuc2VuZCh0LmJvZHkpOnkuc2VuZCgpfSl9fWEuUmVxdWVzdE1hbmFnZXI9cX0pKFBrfHwoUGs9e30pKTsKPC9zY3JpcHQ+CjxzY3JpcHQ+Ly9+fldFQlBBVEh+fi90Zi1iYWNrZW5kL3VybFBhdGhIZWxwZXJzLmpzCihmdW5jdGlvbihhKXtmdW5jdGlvbiBjKGQpe3JldHVybiBlbmNvZGVVUklDb21wb25lbnQoZCkucmVwbGFjZSgvXCgvZywiJTI4IikucmVwbGFjZSgvXCkvZywiJTI5Iil9YS5hZGRQYXJhbXM9ZnVuY3Rpb24oZCxmKXt2YXIgZz1PYmplY3Qua2V5cyhmKS5zb3J0KCkuZmlsdGVyKGs9PnZvaWQgMCE9PWZba10pO2lmKCFnLmxlbmd0aClyZXR1cm4gZDtjb25zdCBsPS0xIT09ZC5pbmRleE9mKCI/Iik/Ilx4MjYiOiI/IjtnPVtdLmNvbmNhdCguLi5nLm1hcChrPT57Y29uc3QgbT1mW2tdO3JldHVybihBcnJheS5pc0FycmF5KG0pP206W21dKS5tYXAocD0+YCR7a309JHtjKHApfWApfSkpLmpvaW4oIlx4MjYiKTtyZXR1cm4gZCtsK2d9fSkoUGt8fChQaz17fSkpOwo8L3NjcmlwdD4KPHNjcmlwdD4vL35+V0VCUEFUSH5+L3RmLWJhY2tlbmQvcm91dGVyLmpzCihmdW5jdGlvbihhKXtmdW5jdGlvbiBjKGw9ImRhdGEiKXsiLyI9PT1sW2wubGVuZ3RoLTFdJiYobD1sLnNsaWNlKDAsbC5sZW5ndGgtMSkpO3JldHVybntlbnZpcm9ubWVudDooKT0+ZChsLCIvZW52aXJvbm1lbnQiKSxleHBlcmltZW50czooKT0+ZChsLCIvZXhwZXJpbWVudHMiKSxwbHVnaW5Sb3V0ZTooayxtLHApPT5kKGwrIi9wbHVnaW4iLGAvJHtrfSR7bX1gLHApLHBsdWdpbnNMaXN0aW5nOigpPT5kKGwsIi9wbHVnaW5zX2xpc3RpbmciKSxydW5zOms9Pntjb25zdCBtPW5ldyBVUkxTZWFyY2hQYXJhbXM7bS5zZXQoImV4cGVyaW1lbnQiLGt8fCIiKTtyZXR1cm4gZChsLCIvcnVucyIsbSl9LHJ1bnNGb3JFeHBlcmltZW50Oms9PmQobCwiL2V4cGVyaW1lbnRfcnVucyIsZih7ZXhwZXJpbWVudDpTdHJpbmcoayl9KSl9fWZ1bmN0aW9uIGQobCxrLG09bmV3IFVSTFNlYXJjaFBhcmFtcyl7bCs9aztTdHJpbmcobSkmJihrPWsuaW5jbHVkZXMoIj8iKT8iXHgyNiI6Ij8iLGwrPWsrU3RyaW5nKG0pKTsKcmV0dXJuIGx9ZnVuY3Rpb24gZihsPXt9KXtjb25zdCBrPU9iamVjdC5rZXlzKGwpLnNvcnQoKS5maWx0ZXIocD0+bFtwXSksbT1uZXcgVVJMU2VhcmNoUGFyYW1zO2suZm9yRWFjaChwPT57Y29uc3QgcT1sW3BdOyhBcnJheS5pc0FycmF5KHEpP3E6W3FdKS5mb3JFYWNoKHI9Pm0uYXBwZW5kKHAscikpfSk7cmV0dXJuIG19bGV0IGc9YygpO2EuY3JlYXRlUm91dGVyPWM7YS5nZXRSb3V0ZXI9ZnVuY3Rpb24oKXtyZXR1cm4gZ307YS5nZXRFeHBlcmltZW50SWQ9ZnVuY3Rpb24oKXtyZXR1cm4obmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKSkuZ2V0KCJleHBlcmltZW50Iil8fCIifTthLnNldFJvdXRlcj1mdW5jdGlvbihsKXtpZihudWxsPT1sKXRocm93IEVycm9yKCJSb3V0ZXIgcmVxdWlyZWQsIGJ1dCBnb3Q6ICIrbCk7Zz1sfTthLmNyZWF0ZVNlYXJjaFBhcmFtPWZ9KShQa3x8KFBrPXt9KSk7Cjwvc2NyaXB0Pgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdGYtYmFja2VuZC9iYXNlU3RvcmUuanMKKGZ1bmN0aW9uKGEpe2NsYXNzIGN7Y29uc3RydWN0b3IoZil7dGhpcy5saXN0ZW5lcj1mfX1hLkxpc3RlbktleT1jO2NsYXNzIGR7Y29uc3RydWN0b3IoKXt0aGlzLnJlcXVlc3RNYW5hZ2VyPW5ldyBhLlJlcXVlc3RNYW5hZ2VyKDEpO3RoaXMuX2xpc3RlbmVycz1uZXcgU2V0O3RoaXMuaW5pdGlhbGl6ZWQ9ITF9cmVmcmVzaCgpe3JldHVybiB0aGlzLmxvYWQoKS50aGVuKCgpPT57dGhpcy5pbml0aWFsaXplZD0hMH0pfWFkZExpc3RlbmVyKGYpe2Y9bmV3IGMoZik7dGhpcy5fbGlzdGVuZXJzLmFkZChmKTtyZXR1cm4gZn1yZW1vdmVMaXN0ZW5lckJ5S2V5KGYpe3RoaXMuX2xpc3RlbmVycy5kZWxldGUoZil9ZW1pdENoYW5nZSgpe3RoaXMuX2xpc3RlbmVycy5mb3JFYWNoKGY9Pnt0cnl7Zi5saXN0ZW5lcigpfWNhdGNoKGcpe319KX19YS5CYXNlU3RvcmU9ZH0pKFBrfHwoUGs9e30pKTsKPC9zY3JpcHQ+CjxzY3JpcHQ+Ly9+fldFQlBBVEh+fi90Zi1iYWNrZW5kL2Vudmlyb25tZW50U3RvcmUuanMKKGZ1bmN0aW9uKGEpe2NsYXNzIGMgZXh0ZW5kcyBhLkJhc2VTdG9yZXtsb2FkKCl7Y29uc3QgZD1hLmdldFJvdXRlcigpLmVudmlyb25tZW50KCk7cmV0dXJuIHRoaXMucmVxdWVzdE1hbmFnZXIucmVxdWVzdChkKS50aGVuKGY9PntmPXtkYXRhTG9jYXRpb246Zi5kYXRhX2xvY2F0aW9uLHdpbmRvd1RpdGxlOmYud2luZG93X3RpdGxlfTtfLmlzRXF1YWwodGhpcy5lbnZpcm9ubWVudCxmKXx8KHRoaXMuZW52aXJvbm1lbnQ9Zix0aGlzLmVtaXRDaGFuZ2UoKSl9KX1nZXREYXRhTG9jYXRpb24oKXtyZXR1cm4gdGhpcy5lbnZpcm9ubWVudD90aGlzLmVudmlyb25tZW50LmRhdGFMb2NhdGlvbjoiIn1nZXRXaW5kb3dUaXRsZSgpe3JldHVybiB0aGlzLmVudmlyb25tZW50P3RoaXMuZW52aXJvbm1lbnQud2luZG93VGl0bGU6IiJ9fWEuRW52aXJvbm1lbnRTdG9yZT1jO2EuZW52aXJvbm1lbnRTdG9yZT1uZXcgY30pKFBrfHwoUGs9e30pKTsKPC9zY3JpcHQ+CjxzY3JpcHQ+Ly9+fldFQlBBVEh+fi90Zi1iYWNrZW5kL2V4cGVyaW1lbnRzU3RvcmUuanMKKGZ1bmN0aW9uKGEpe2NsYXNzIGMgZXh0ZW5kcyBhLkJhc2VTdG9yZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyk7dGhpcy5fZXhwZXJpbWVudHM9W119bG9hZCgpe2NvbnN0IGQ9YS5nZXRSb3V0ZXIoKS5leHBlcmltZW50cygpO3JldHVybiB0aGlzLnJlcXVlc3RNYW5hZ2VyLnJlcXVlc3QoZCkudGhlbihmPT57Xy5pc0VxdWFsKHRoaXMuX2V4cGVyaW1lbnRzLGYpfHwodGhpcy5fZXhwZXJpbWVudHM9Zix0aGlzLmVtaXRDaGFuZ2UoKSl9KX1nZXRFeHBlcmltZW50cygpe3JldHVybiB0aGlzLl9leHBlcmltZW50cy5zbGljZSgpfX1hLkV4cGVyaW1lbnRzU3RvcmU9YzthLmV4cGVyaW1lbnRzU3RvcmU9bmV3IGN9KShQa3x8KFBrPXt9KSk7Cjwvc2NyaXB0Pgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdGYtYmFja2VuZC9ydW5zU3RvcmUuanMKKGZ1bmN0aW9uKGEpe2NsYXNzIGMgZXh0ZW5kcyBhLkJhc2VTdG9yZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyk7dGhpcy5fcnVucz1bXX1sb2FkKCl7Y29uc3QgZD1hLmdldFJvdXRlcigpLnJ1bnMoYS5nZXRFeHBlcmltZW50SWQoKSk7cmV0dXJuIHRoaXMucmVxdWVzdE1hbmFnZXIucmVxdWVzdChkKS50aGVuKGY9PntfLmlzRXF1YWwodGhpcy5fcnVucyxmKXx8KHRoaXMuX3J1bnM9Zix0aGlzLmVtaXRDaGFuZ2UoKSl9KX1nZXRSdW5zKCl7cmV0dXJuIHRoaXMuX3J1bnMuc2xpY2UoKX19YS5SdW5zU3RvcmU9YzthLnJ1bnNTdG9yZT1uZXcgY30pKFBrfHwoUGs9e30pKTsKPC9zY3JpcHQ+CjxzY3JpcHQ+Ly9+fldFQlBBVEh+fi90Zi1iYWNrZW5kL2JhY2tlbmQuanMKKGZ1bmN0aW9uKGEpe2EuVFlQRVM9W107YS5nZXRSdW5zTmFtZWQ9ZnVuY3Rpb24oYyl7cmV0dXJuIF8ua2V5cyhjKS5zb3J0KE9rLmNvbXBhcmVUYWdOYW1lcyl9O2EuZ2V0VGFncz1mdW5jdGlvbihjKXtyZXR1cm4gXy51bmlvbi5hcHBseShudWxsLF8udmFsdWVzKGMpKS5zb3J0KE9rLmNvbXBhcmVUYWdOYW1lcyl9O2EuZmlsdGVyVGFncz1mdW5jdGlvbihjLGQpe2xldCBmPVtdO2QuZm9yRWFjaChnPT5mPWYuY29uY2F0KGNbZ10pKTtyZXR1cm4gXy51bmlxKGYpLnNvcnQoT2suY29tcGFyZVRhZ05hbWVzKX19KShQa3x8KFBrPXt9KSk7Cjwvc2NyaXB0Pgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdGYtYmFja2VuZC9jYW5jZWxsZXIuanMKKGZ1bmN0aW9uKGEpe2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLmNhbmNlbGxhdGlvbkNvdW50PTB9Y2FuY2VsbGFibGUoZCl7Y29uc3QgZj10aGlzLmNhbmNlbGxhdGlvbkNvdW50O3JldHVybiBnPT5kKHt2YWx1ZTpnLGNhbmNlbGxlZDp0aGlzLmNhbmNlbGxhdGlvbkNvdW50IT09Zn0pfWNhbmNlbEFsbCgpe3RoaXMuY2FuY2VsbGF0aW9uQ291bnQrK319YS5DYW5jZWxsZXI9Y30pKFBrfHwoUGs9e30pKTsKPC9zY3JpcHQ+Cgo8ZG9tLW1vZHVsZSBpZD0idGYtYmFja2VuZCI+CiAgPHNjcmlwdD4vL35+V0VCUEFUSH5+L3RmLWJhY2tlbmQvdGYtYmFja2VuZC1wb2x5bWVyLmpzCihmdW5jdGlvbihhKXtQb2x5bWVyKHtpczoidGYtYmFja2VuZCIsdGZfYmFja2VuZDphfSl9KShQa3x8KFBrPXt9KSk7Cjwvc2NyaXB0Pgo8L2RvbS1tb2R1bGU+CgoKCgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdGYtY2F0ZWdvcml6YXRpb24tdXRpbHMvY2F0ZWdvcml6YXRpb25VdGlscy5qcwp2YXIgUWs7CihmdW5jdGlvbihhKXtmdW5jdGlvbiBjKHAscSl7Y29uc3Qgcj0oKCk9Pnt0cnl7cmV0dXJuIG5ldyBSZWdFeHAocSl9Y2F0Y2godCl7cmV0dXJuIG51bGx9fSkoKTtyZXR1cm57bmFtZTpxLG1ldGFkYXRhOnt0eXBlOm0uU0VBUkNIX1JFU1VMVFMsdmFsaWRSZWdleDohIXIsdW5pdmVyc2FsUmVnZXg6Ii4qIj09PXF9LGl0ZW1zOnI/cC5maWx0ZXIodD0+dC5tYXRjaChyKSk6W119fWZ1bmN0aW9uIGQocCxxPSIvIil7Y29uc3Qgcj1bXSx0PXt9O3AuZm9yRWFjaCh2PT57dmFyIEE9di5pbmRleE9mKHEpO0E9MDw9QT92LnNsaWNlKDAsQSk6djtpZighdFtBXSl7Y29uc3QgeT17bmFtZTpBLG1ldGFkYXRhOnt0eXBlOm0uUFJFRklYX0dST1VQfSxpdGVtczpbXX07dFtBXT15O3IucHVzaCh5KX10W0FdLml0ZW1zLnB1c2godil9KTtyZXR1cm4gcn1mdW5jdGlvbiBmKHAscT0iIil7cT1bYyhwLHEpXTtwPWQocCk7cmV0dXJuW10uY29uY2F0KHEscCl9ZnVuY3Rpb24gZyhwLHEscil7Y29uc3QgdD0KUGsuZ2V0VGFncyhwKTtyPWYodCxyKTtjb25zdCB2PWwoXy5waWNrKHAscSkpO3JldHVybiByLm1hcCgoe25hbWU6QSxtZXRhZGF0YTp5LGl0ZW1zOnh9KT0+KHtuYW1lOkEsbWV0YWRhdGE6eSxpdGVtczp4Lm1hcChDPT4oe3RhZzpDLHJ1bnM6KHYuZ2V0KEMpfHxbXSkuc2xpY2UoKX0pKX0pKX1mdW5jdGlvbiBsKHApe2NvbnN0IHE9bmV3IE1hcDtPYmplY3Qua2V5cyhwKS5mb3JFYWNoKHI9PntwW3JdLmZvckVhY2godD0+e2NvbnN0IHY9cS5nZXQodCl8fFtdO3YucHVzaChyKTtxLnNldCh0LHYpfSl9KTtyZXR1cm4gcX1mdW5jdGlvbiBrKHAscSl7Y29uc3Qgcj1Pay5jb21wYXJlVGFnTmFtZXMocC50YWcscS50YWcpO3JldHVybiAwIT1yP3I6T2suY29tcGFyZVRhZ05hbWVzKHAucnVuLHEucnVuKX1sZXQgbTsoZnVuY3Rpb24ocCl7cFtwLlNFQVJDSF9SRVNVTFRTPTBdPSJTRUFSQ0hfUkVTVUxUUyI7cFtwLlBSRUZJWF9HUk9VUD0xXT0iUFJFRklYX0dST1VQIn0pKG09YS5DYXRlZ29yeVR5cGV8fAooYS5DYXRlZ29yeVR5cGU9e30pKTthLmNhdGVnb3JpemVCeVNlYXJjaFF1ZXJ5PWM7YS5jYXRlZ29yaXplQnlQcmVmaXg9ZDthLmNhdGVnb3JpemU9ZjthLmNhdGVnb3JpemVUYWdzPWc7YS5jYXRlZ29yaXplUnVuVGFnQ29tYmluYXRpb25zPWZ1bmN0aW9uKHAscSxyKXtyZXR1cm4gZyhwLHEscikubWFwKGZ1bmN0aW9uKHQpe2NvbnN0IHY9Xy5mbGF0dGVuKHQuaXRlbXMubWFwKCh7dGFnOkEscnVuczp5fSk9PnkubWFwKHg9Pih7dGFnOkEscnVuOnh9KSkpKTt2LnNvcnQoayk7cmV0dXJue25hbWU6dC5uYW1lLG1ldGFkYXRhOnQubWV0YWRhdGEsaXRlbXM6dn19KX19KShRa3x8KFFrPXt9KSk7Cjwvc2NyaXB0PgoKCgoKCjxzY3JpcHQ+Ly9+fldFQlBBVEh+fi90Zi1nbG9iYWxzL2dsb2JhbHMuanMKdmFyIFJrOyhmdW5jdGlvbihhKXtsZXQgYz0hMTthLnNldFVzZUhhc2g9ZnVuY3Rpb24oZil7Yz1mfTthLnVzZUhhc2g9ZnVuY3Rpb24oKXtyZXR1cm4gY307bGV0IGQ9IiI7YS5zZXRGYWtlSGFzaD1mdW5jdGlvbihmKXtkPWZ9O2EuZ2V0RmFrZUhhc2g9ZnVuY3Rpb24oKXtyZXR1cm4gZH19KShSa3x8KFJrPXt9KSk7Cjwvc2NyaXB0PgoKCgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdGYtc3RvcmFnZS9saXN0ZW5lcnMuanMKdmFyIFZsOwooZnVuY3Rpb24oYSl7Y2xhc3MgY3tjb25zdHJ1Y3RvcihnKXt0aGlzLmxpc3RlbmVyPWd9fWEuTGlzdGVuS2V5PWM7Y29uc3QgZD1uZXcgU2V0LGY9bmV3IFNldDt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigiaGFzaGNoYW5nZSIsKCk9PntkLmZvckVhY2goZz0+Zy5saXN0ZW5lcigpKX0pO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJzdG9yYWdlIiwoKT0+e2YuZm9yRWFjaChnPT5nLmxpc3RlbmVyKCkpfSk7YS5hZGRIYXNoTGlzdGVuZXI9ZnVuY3Rpb24oZyl7Zz1uZXcgYyhnKTtkLmFkZChnKTtyZXR1cm4gZ307YS5hZGRTdG9yYWdlTGlzdGVuZXI9ZnVuY3Rpb24oZyl7Zz1uZXcgYyhnKTtmLmFkZChnKTtyZXR1cm4gZ307YS5maXJlU3RvcmFnZUNoYW5nZWQ9ZnVuY3Rpb24oKXtmLmZvckVhY2goZz0+Zy5saXN0ZW5lcigpKX07YS5yZW1vdmVIYXNoTGlzdGVuZXJCeUtleT1mdW5jdGlvbihnKXtkLmRlbGV0ZShnKX07YS5yZW1vdmVTdG9yYWdlTGlzdGVuZXJCeUtleT1mdW5jdGlvbihnKXtmLmRlbGV0ZShnKX19KShWbHx8CihWbD17fSkpOwo8L3NjcmlwdD4KPHNjcmlwdD4vL35+V0VCUEFUSH5+L3RmLXN0b3JhZ2Uvc3RvcmFnZS5qcwooZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYyhxLHIpe2Z1bmN0aW9uIHQoeCxDPXt9KXtjb25zdCB7ZGVmYXVsdFZhbHVlOkYsdXNlTG9jYWxTdG9yYWdlOkQ9ITF9PUM7eD1EP3dpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbSh4KTprKGYoKSlbeF07cmV0dXJuIHZvaWQgMD09eD9fLmNsb25lRGVlcChGKTpxKHgpfWZ1bmN0aW9uIHYoeCxDLEY9e30pe2NvbnN0IHtkZWZhdWx0VmFsdWU6RCx1c2VMb2NhbFN0b3JhZ2U6Qj0hMSx1c2VMb2NhdGlvblJlcGxhY2U6Rz0hMX09RjtGPXIoQyk7Qj8od2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKHgsRiksYS5maXJlU3RvcmFnZUNoYW5nZWQoKSk6Xy5pc0VxdWFsKEMsdCh4LHt1c2VMb2NhbFN0b3JhZ2U6Qn0pKXx8KF8uaXNFcXVhbChDLEQpP20oeCk6KEM9ayhmKCkpLENbeF09RixnKGwoQyksRykpKX1jb25zdCBBPVtdLHk9W107cmV0dXJue2dldDp0LHNldDp2LGdldEluaXRpYWxpemVyOmZ1bmN0aW9uKHgsQyl7Y29uc3QgRj1PYmplY3QuYXNzaWduKHtkZWZhdWx0VmFsdWU6Qy5kZWZhdWx0VmFsdWUsCnBvbHltZXJQcm9wZXJ0eTp4LHVzZUxvY2FsU3RvcmFnZTohMX0sQyk7cmV0dXJuIGZ1bmN0aW9uKCl7Y29uc3QgRD1kKHRoaXMseCksQj0oKT0+e2NvbnN0IEs9dChELEYpO18uaXNFcXVhbChLLHRoaXNbRi5wb2x5bWVyUHJvcGVydHldKXx8KHRoaXNbRi5wb2x5bWVyUHJvcGVydHldPUspfSxHPShGLnVzZUxvY2FsU3RvcmFnZT9hLmFkZFN0b3JhZ2VMaXN0ZW5lcjphLmFkZEhhc2hMaXN0ZW5lcikoKCk9PkIoKSk7Ri51c2VMb2NhbFN0b3JhZ2U/eS5wdXNoKEcpOkEucHVzaChHKTtCKCk7cmV0dXJuIHRoaXNbRi5wb2x5bWVyUHJvcGVydHldfX0sZ2V0T2JzZXJ2ZXI6ZnVuY3Rpb24oeCxDKXtjb25zdCBGPU9iamVjdC5hc3NpZ24oe2RlZmF1bHRWYWx1ZTpDLmRlZmF1bHRWYWx1ZSxwb2x5bWVyUHJvcGVydHk6eCx1c2VMb2NhbFN0b3JhZ2U6ITF9LEMpO3JldHVybiBmdW5jdGlvbigpe2NvbnN0IEQ9ZCh0aGlzLHgpO3YoRCx0aGlzW0YucG9seW1lclByb3BlcnR5XSxGKX19LGRpc3Bvc2VCaW5kaW5nOmZ1bmN0aW9uKCl7QS5mb3JFYWNoKHg9PgphLnJlbW92ZUhhc2hMaXN0ZW5lckJ5S2V5KHgpKTt5LmZvckVhY2goeD0+YS5yZW1vdmVTdG9yYWdlTGlzdGVuZXJCeUtleSh4KSl9fX1mdW5jdGlvbiBkKHEscil7cT1xW2EuRElTQU1CSUdVQVRPUl07cmV0dXJuKG51bGw9PXE/W3JdOltxLHJdKS5qb2luKCIuIil9ZnVuY3Rpb24gZigpe3JldHVybiBSay51c2VIYXNoKCk/d2luZG93LmxvY2F0aW9uLmhhc2guc2xpY2UoMSk6UmsuZ2V0RmFrZUhhc2goKX1mdW5jdGlvbiBnKHEscj0hMSl7UmsudXNlSGFzaCgpP3I/d2luZG93LmxvY2F0aW9uLnJlcGxhY2UoIiMiK3EpOndpbmRvdy5sb2NhdGlvbi5oYXNoPXE6Umsuc2V0RmFrZUhhc2gocSl9ZnVuY3Rpb24gbChxKXtsZXQgcj0iIjt2b2lkIDAhPT1xW2EuVEFCXSYmKHIrPXFbYS5UQUJdKTtjb25zdCB0PU9iamVjdC5rZXlzKHEpLm1hcCh2PT5bdixxW3ZdXSkuZmlsdGVyKHY9PnZbMF0hPT1hLlRBQikubWFwKHY9PmVuY29kZVVSSUNvbXBvbmVudCh2WzBdKSsiXHgzZCIrZW5jb2RlVVJJQ29tcG9uZW50KHZbMV0pKS5qb2luKCJceDI2Iik7CnJldHVybiAwPHQubGVuZ3RoP3IrIlx4MjYiK3Q6cn1mdW5jdGlvbiBrKHEpe2NvbnN0IHI9e307cS5zcGxpdCgiXHgyNiIpLmZvckVhY2godD0+e3Q9dC5zcGxpdCgiXHgzZCIpOzE9PT10Lmxlbmd0aD9yW2EuVEFCXT10WzBdOjI9PT10Lmxlbmd0aCYmKHJbZGVjb2RlVVJJQ29tcG9uZW50KHRbMF0pXT1kZWNvZGVVUklDb21wb25lbnQodFsxXSkpfSk7cmV0dXJuIHJ9ZnVuY3Rpb24gbShxKXtjb25zdCByPWsoZigpKTtkZWxldGUgcltxXTtnKGwocikpfWEuVEFCPSJfX3RhYl9fIjthLkRJU0FNQklHVUFUT1I9ImRpc2FtYmlndWF0b3IiO3ZhciBwPWMocT0+cSxxPT5xKTthLmdldFN0cmluZz1wLmdldDthLnNldFN0cmluZz1wLnNldDthLmdldFN0cmluZ0luaXRpYWxpemVyPXAuZ2V0SW5pdGlhbGl6ZXI7YS5nZXRTdHJpbmdPYnNlcnZlcj1wLmdldE9ic2VydmVyO2EuZGlzcG9zZVN0cmluZ0JpbmRpbmc9cC5kaXNwb3NlQmluZGluZztwPWMocT0+InRydWUiPT09cT8hMDoiZmFsc2UiPT09CnE/ITE6dm9pZCAwLHE9PnEudG9TdHJpbmcoKSk7YS5nZXRCb29sZWFuPXAuZ2V0O2Euc2V0Qm9vbGVhbj1wLnNldDthLmdldEJvb2xlYW5Jbml0aWFsaXplcj1wLmdldEluaXRpYWxpemVyO2EuZ2V0Qm9vbGVhbk9ic2VydmVyPXAuZ2V0T2JzZXJ2ZXI7YS5kaXNwb3NlQm9vbGVhbkJpbmRpbmc9cC5kaXNwb3NlQmluZGluZztwPWMocT0+K3EscT0+cS50b1N0cmluZygpKTthLmdldE51bWJlcj1wLmdldDthLnNldE51bWJlcj1wLnNldDthLmdldE51bWJlckluaXRpYWxpemVyPXAuZ2V0SW5pdGlhbGl6ZXI7YS5nZXROdW1iZXJPYnNlcnZlcj1wLmdldE9ic2VydmVyO2EuZGlzcG9zZU51bWJlckJpbmRpbmc9cC5kaXNwb3NlQmluZGluZztwPWMocT0+SlNPTi5wYXJzZShhdG9iKHEpKSxxPT5idG9hKEpTT04uc3RyaW5naWZ5KHEpKSk7YS5nZXRPYmplY3Q9cC5nZXQ7YS5zZXRPYmplY3Q9cC5zZXQ7YS5nZXRPYmplY3RJbml0aWFsaXplcj1wLmdldEluaXRpYWxpemVyO2EuZ2V0T2JqZWN0T2JzZXJ2ZXI9CnAuZ2V0T2JzZXJ2ZXI7YS5kaXNwb3NlT2JqZWN0QmluZGluZz1wLmRpc3Bvc2VCaW5kaW5nO2EubWFrZUJpbmRpbmdzPWN9KShWbHx8KFZsPXt9KSk7Cjwvc2NyaXB0PgoKPGRvbS1tb2R1bGUgaWQ9InRmLXN0b3JhZ2UiPgogIDxzY3JpcHQ+Ly9+fldFQlBBVEh+fi90Zi1zdG9yYWdlL3RmLXN0b3JhZ2UtcG9seW1lci5qcwooZnVuY3Rpb24oYSl7UG9seW1lcih7aXM6InRmLXN0b3JhZ2UiLHRmX3N0b3JhZ2U6YX0pfSkoVmx8fChWbD17fSkpOwo8L3NjcmlwdD4KPC9kb20tbW9kdWxlPgoKCgo8ZG9tLW1vZHVsZSBpZD0idGYtdGFnLWZpbHRlcmVyIj4KICA8dGVtcGxhdGU+CiAgICA8cGFwZXItaW5wdXQgbm8tbGFiZWwtZmxvYXQgbGFiZWw9IkZpbHRlciB0YWdzIChyZWd1bGFyIGV4cHJlc3Npb25zIHN1cHBvcnRlZCkiIHZhbHVlPSJ7e190YWdGaWx0ZXJ9fSIgY2xhc3M9InNlYXJjaC1pbnB1dCI+CiAgICAgIDxpcm9uLWljb24gcHJlZml4IGljb249InNlYXJjaCIgc2xvdD0icHJlZml4Ij48L2lyb24taWNvbj4KICAgIDwvcGFwZXItaW5wdXQ+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBtYXJnaW46IDEwcHggNXB4IDEwcHggMTBweDsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgogIDxzY3JpcHQ+Ly9+fldFQlBBVEh+fi90Zi1jYXRlZ29yaXphdGlvbi11dGlscy90Zi10YWctZmlsdGVyZXIuaHRtbC5qcwpQb2x5bWVyKHtpczoidGYtdGFnLWZpbHRlcmVyIixwcm9wZXJ0aWVzOnt0YWdGaWx0ZXI6e3R5cGU6U3RyaW5nLG5vdGlmeTohMCxjb21wdXRlZDoiX2NvbXB1dGVUYWdGaWx0ZXIoX3RhZ0ZpbHRlcikifSxfdGFnRmlsdGVyOnt0eXBlOlN0cmluZyx2YWx1ZTpWbC5nZXRTdHJpbmdJbml0aWFsaXplcigidGFnRmlsdGVyIix7ZGVmYXVsdFZhbHVlOiIiLHVzZUxvY2FsU3RvcmFnZTohMSxwb2x5bWVyUHJvcGVydHk6Il90YWdGaWx0ZXIifSksb2JzZXJ2ZXI6Il90YWdGaWx0ZXJPYnNlcnZlciJ9fSxfdGFnRmlsdGVyT2JzZXJ2ZXI6VmwuZ2V0U3RyaW5nT2JzZXJ2ZXIoInRhZ0ZpbHRlciIse2RlZmF1bHRWYWx1ZToiIix1c2VMb2NhbFN0b3JhZ2U6ITEscG9seW1lclByb3BlcnR5OiJfdGFnRmlsdGVyIn0pLF9jb21wdXRlVGFnRmlsdGVyKCl7cmV0dXJuIHRoaXMuX3RhZ0ZpbHRlcn19KTsKPC9zY3JpcHQ+CjwvZG9tLW1vZHVsZT4KCjxzY3JpcHQ+Ly9+fldFQlBBVEh+fi90Zi1kYXNoYm9hcmQtY29tbW9uL2FycmF5LXVwZGF0ZS1oZWxwZXIuanMKdmFyIFdsOyhmdW5jdGlvbihhKXthLkFycmF5VXBkYXRlSGVscGVyPXt1cGRhdGVBcnJheVByb3AoYyxkLGYpe2xldCBnPXRoaXMuZ2V0KGMpO2lmKCFBcnJheS5pc0FycmF5KGQpKXRocm93IFJhbmdlRXJyb3IoYEV4cGVjdGVkIG5ldyB2YWx1ZSB0byAnJHtjfScgdG8gYmUgYW4gYXJyYXkuYCk7QXJyYXkuaXNBcnJheShnKXx8KGc9W10sdGhpcy5zZXQoYyxnKSk7Y29uc3QgbD1uZXcgU2V0KGQubWFwKChwLHEpPT5mKHAscSkpKTtsZXQgaz0wLG09MDtmb3IoO2s8Zy5sZW5ndGgmJm08ZC5sZW5ndGg7KWwuaGFzKGYoZ1trXSxrKSk/KGYoZ1trXSxrKT09ZihkW21dLG0pP3RoaXMuc2V0KGAke2N9LiR7a31gLGRbbV0pOnRoaXMuc3BsaWNlKGMsaywwLGRbbV0pLG0rKyxrKyspOnRoaXMuc3BsaWNlKGMsaywxKTtrPGcubGVuZ3RoJiZ0aGlzLnNwbGljZShjLGspO208ZC5sZW5ndGgmJnRoaXMucHVzaChjLC4uLmQuc2xpY2UobSkpfX19KShXbHx8KFdsPXt9KSk7Cjwvc2NyaXB0PgoKCgoKPGRvbS1tb2R1bGUgaWQ9Imlyb24tZmxleCI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICAubGF5b3V0Lmhvcml6b250YWwsCiAgICAgIC5sYXlvdXQudmVydGljYWwgewogICAgICAgIGRpc3BsYXk6IC1tcy1mbGV4Ym94OwogICAgICAgIGRpc3BsYXk6IC13ZWJraXQtZmxleDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICB9CgogICAgICAubGF5b3V0LmlubGluZSB7CiAgICAgICAgZGlzcGxheTogLW1zLWlubGluZS1mbGV4Ym94OwogICAgICAgIGRpc3BsYXk6IC13ZWJraXQtaW5saW5lLWZsZXg7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQuaG9yaXpvbnRhbCB7CiAgICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICAgICAgLXdlYmtpdC1mbGV4LWRpcmVjdGlvbjogcm93OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQudmVydGljYWwgewogICAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIC13ZWJraXQtZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICB9CgogICAgICAubGF5b3V0LndyYXAgewogICAgICAgIC1tcy1mbGV4LXdyYXA6IHdyYXA7CiAgICAgICAgLXdlYmtpdC1mbGV4LXdyYXA6IHdyYXA7CiAgICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICB9CgogICAgICAubGF5b3V0Lm5vLXdyYXAgewogICAgICAgIC1tcy1mbGV4LXdyYXA6IG5vd3JhcDsKICAgICAgICAtd2Via2l0LWZsZXgtd3JhcDogbm93cmFwOwogICAgICAgIGZsZXgtd3JhcDogbm93cmFwOwogICAgICB9CgogICAgICAubGF5b3V0LmNlbnRlciwKICAgICAgLmxheW91dC5jZW50ZXItY2VudGVyIHsKICAgICAgICAtbXMtZmxleC1hbGlnbjogY2VudGVyOwogICAgICAgIC13ZWJraXQtYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICB9CgogICAgICAubGF5b3V0LmNlbnRlci1qdXN0aWZpZWQsCiAgICAgIC5sYXlvdXQuY2VudGVyLWNlbnRlciB7CiAgICAgICAgLW1zLWZsZXgtcGFjazogY2VudGVyOwogICAgICAgIC13ZWJraXQtanVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgIH0KCiAgICAgIC5mbGV4IHsKICAgICAgICAtbXMtZmxleDogMSAxIDAuMDAwMDAwMDAxcHg7CiAgICAgICAgLXdlYmtpdC1mbGV4OiAxOwogICAgICAgIGZsZXg6IDE7CiAgICAgICAgLXdlYmtpdC1mbGV4LWJhc2lzOiAwLjAwMDAwMDAwMXB4OwogICAgICAgIGZsZXgtYmFzaXM6IDAuMDAwMDAwMDAxcHg7CiAgICAgIH0KCiAgICAgIC5mbGV4LWF1dG8gewogICAgICAgIC1tcy1mbGV4OiAxIDEgYXV0bzsKICAgICAgICAtd2Via2l0LWZsZXg6IDEgMSBhdXRvOwogICAgICAgIGZsZXg6IDEgMSBhdXRvOwogICAgICB9CgogICAgICAuZmxleC1ub25lIHsKICAgICAgICAtbXMtZmxleDogbm9uZTsKICAgICAgICAtd2Via2l0LWZsZXg6IG5vbmU7CiAgICAgICAgZmxleDogbm9uZTsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+CgoKPGRvbS1tb2R1bGUgaWQ9Imlyb24tZmxleC1yZXZlcnNlIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIC5sYXlvdXQuaG9yaXpvbnRhbC1yZXZlcnNlLAogICAgICAubGF5b3V0LnZlcnRpY2FsLXJldmVyc2UgewogICAgICAgIGRpc3BsYXk6IC1tcy1mbGV4Ym94OwogICAgICAgIGRpc3BsYXk6IC13ZWJraXQtZmxleDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICB9CgogICAgICAubGF5b3V0Lmhvcml6b250YWwtcmV2ZXJzZSB7CiAgICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZTsKICAgICAgICAtd2Via2l0LWZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZTsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2U7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQudmVydGljYWwtcmV2ZXJzZSB7CiAgICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW4tcmV2ZXJzZTsKICAgICAgICAtd2Via2l0LWZsZXgtZGlyZWN0aW9uOiBjb2x1bW4tcmV2ZXJzZTsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uLXJldmVyc2U7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQud3JhcC1yZXZlcnNlIHsKICAgICAgICAtbXMtZmxleC13cmFwOiB3cmFwLXJldmVyc2U7CiAgICAgICAgLXdlYmtpdC1mbGV4LXdyYXA6IHdyYXAtcmV2ZXJzZTsKICAgICAgICBmbGV4LXdyYXA6IHdyYXAtcmV2ZXJzZTsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+CgoKPGRvbS1tb2R1bGUgaWQ9Imlyb24tZmxleC1hbGlnbm1lbnQiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgLyoqCiAgICAgICAqIEFsaWdubWVudCBpbiBjcm9zcyBheGlzLgogICAgICAgKi8KICAgICAgLmxheW91dC5zdGFydCB7CiAgICAgICAgLW1zLWZsZXgtYWxpZ246IHN0YXJ0OwogICAgICAgIC13ZWJraXQtYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7CiAgICAgICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQuY2VudGVyLAogICAgICAubGF5b3V0LmNlbnRlci1jZW50ZXIgewogICAgICAgIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQuZW5kIHsKICAgICAgICAtbXMtZmxleC1hbGlnbjogZW5kOwogICAgICAgIC13ZWJraXQtYWxpZ24taXRlbXM6IGZsZXgtZW5kOwogICAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDsKICAgICAgfQoKICAgICAgLmxheW91dC5iYXNlbGluZSB7CiAgICAgICAgLW1zLWZsZXgtYWxpZ246IGJhc2VsaW5lOwogICAgICAgIC13ZWJraXQtYWxpZ24taXRlbXM6IGJhc2VsaW5lOwogICAgICAgIGFsaWduLWl0ZW1zOiBiYXNlbGluZTsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIEFsaWdubWVudCBpbiBtYWluIGF4aXMuCiAgICAgICAqLwogICAgICAubGF5b3V0LnN0YXJ0LWp1c3RpZmllZCB7CiAgICAgICAgLW1zLWZsZXgtcGFjazogc3RhcnQ7CiAgICAgICAgLXdlYmtpdC1qdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0OwogICAgICB9CgogICAgICAubGF5b3V0LmNlbnRlci1qdXN0aWZpZWQsCiAgICAgIC5sYXlvdXQuY2VudGVyLWNlbnRlciB7CiAgICAgICAgLW1zLWZsZXgtcGFjazogY2VudGVyOwogICAgICAgIC13ZWJraXQtanVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQuZW5kLWp1c3RpZmllZCB7CiAgICAgICAgLW1zLWZsZXgtcGFjazogZW5kOwogICAgICAgIC13ZWJraXQtanVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kOwogICAgICB9CgogICAgICAubGF5b3V0LmFyb3VuZC1qdXN0aWZpZWQgewogICAgICAgIC1tcy1mbGV4LXBhY2s6IGRpc3RyaWJ1dGU7CiAgICAgICAgLXdlYmtpdC1qdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDsKICAgICAgfQoKICAgICAgLmxheW91dC5qdXN0aWZpZWQgewogICAgICAgIC1tcy1mbGV4LXBhY2s6IGp1c3RpZnk7CiAgICAgICAgLXdlYmtpdC1qdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICB9CgogICAgICAvKioKICAgICAgICogU2VsZiBhbGlnbm1lbnQuCiAgICAgICAqLwogICAgICAuc2VsZi1zdGFydCB7CiAgICAgICAgLW1zLWFsaWduLXNlbGY6IGZsZXgtc3RhcnQ7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1zZWxmOiBmbGV4LXN0YXJ0OwogICAgICAgIGFsaWduLXNlbGY6IGZsZXgtc3RhcnQ7CiAgICAgIH0KCiAgICAgIC5zZWxmLWNlbnRlciB7CiAgICAgICAgLW1zLWFsaWduLXNlbGY6IGNlbnRlcjsKICAgICAgICAtd2Via2l0LWFsaWduLXNlbGY6IGNlbnRlcjsKICAgICAgICBhbGlnbi1zZWxmOiBjZW50ZXI7CiAgICAgIH0KCiAgICAgIC5zZWxmLWVuZCB7CiAgICAgICAgLW1zLWFsaWduLXNlbGY6IGZsZXgtZW5kOwogICAgICAgIC13ZWJraXQtYWxpZ24tc2VsZjogZmxleC1lbmQ7CiAgICAgICAgYWxpZ24tc2VsZjogZmxleC1lbmQ7CiAgICAgIH0KCiAgICAgIC5zZWxmLXN0cmV0Y2ggewogICAgICAgIC1tcy1hbGlnbi1zZWxmOiBzdHJldGNoOwogICAgICAgIC13ZWJraXQtYWxpZ24tc2VsZjogc3RyZXRjaDsKICAgICAgICBhbGlnbi1zZWxmOiBzdHJldGNoOwogICAgICB9CgogICAgICAuc2VsZi1iYXNlbGluZSB7CiAgICAgICAgLW1zLWFsaWduLXNlbGY6IGJhc2VsaW5lOwogICAgICAgIC13ZWJraXQtYWxpZ24tc2VsZjogYmFzZWxpbmU7CiAgICAgICAgYWxpZ24tc2VsZjogYmFzZWxpbmU7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBtdWx0aS1saW5lIGFsaWdubWVudCBpbiBtYWluIGF4aXMuCiAgICAgICAqLwogICAgICAubGF5b3V0LnN0YXJ0LWFsaWduZWQgewogICAgICAgIC1tcy1mbGV4LWxpbmUtcGFjazogc3RhcnQ7ICAvKiBJRTEwICovCiAgICAgICAgLW1zLWFsaWduLWNvbnRlbnQ6IGZsZXgtc3RhcnQ7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1jb250ZW50OiBmbGV4LXN0YXJ0OwogICAgICAgIGFsaWduLWNvbnRlbnQ6IGZsZXgtc3RhcnQ7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQuZW5kLWFsaWduZWQgewogICAgICAgIC1tcy1mbGV4LWxpbmUtcGFjazogZW5kOyAgLyogSUUxMCAqLwogICAgICAgIC1tcy1hbGlnbi1jb250ZW50OiBmbGV4LWVuZDsKICAgICAgICAtd2Via2l0LWFsaWduLWNvbnRlbnQ6IGZsZXgtZW5kOwogICAgICAgIGFsaWduLWNvbnRlbnQ6IGZsZXgtZW5kOwogICAgICB9CgogICAgICAubGF5b3V0LmNlbnRlci1hbGlnbmVkIHsKICAgICAgICAtbXMtZmxleC1saW5lLXBhY2s6IGNlbnRlcjsgIC8qIElFMTAgKi8KICAgICAgICAtbXMtYWxpZ24tY29udGVudDogY2VudGVyOwogICAgICAgIC13ZWJraXQtYWxpZ24tY29udGVudDogY2VudGVyOwogICAgICAgIGFsaWduLWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgfQoKICAgICAgLmxheW91dC5iZXR3ZWVuLWFsaWduZWQgewogICAgICAgIC1tcy1mbGV4LWxpbmUtcGFjazoganVzdGlmeTsgIC8qIElFMTAgKi8KICAgICAgICAtbXMtYWxpZ24tY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICAtd2Via2l0LWFsaWduLWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgICAgYWxpZ24tY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgfQoKICAgICAgLmxheW91dC5hcm91bmQtYWxpZ25lZCB7CiAgICAgICAgLW1zLWZsZXgtbGluZS1wYWNrOiBkaXN0cmlidXRlOyAgLyogSUUxMCAqLwogICAgICAgIC1tcy1hbGlnbi1jb250ZW50OiBzcGFjZS1hcm91bmQ7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1jb250ZW50OiBzcGFjZS1hcm91bmQ7CiAgICAgICAgYWxpZ24tY29udGVudDogc3BhY2UtYXJvdW5kOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT4KCjxkb20tbW9kdWxlIGlkPSJpcm9uLWZsZXgtZmFjdG9ycyI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICAuZmxleCwKICAgICAgLmZsZXgtMSB7CiAgICAgICAgLW1zLWZsZXg6IDEgMSAwLjAwMDAwMDAwMXB4OwogICAgICAgIC13ZWJraXQtZmxleDogMTsKICAgICAgICBmbGV4OiAxOwogICAgICAgIC13ZWJraXQtZmxleC1iYXNpczogMC4wMDAwMDAwMDFweDsKICAgICAgICBmbGV4LWJhc2lzOiAwLjAwMDAwMDAwMXB4OwogICAgICB9CgogICAgICAuZmxleC0yIHsKICAgICAgICAtbXMtZmxleDogMjsKICAgICAgICAtd2Via2l0LWZsZXg6IDI7CiAgICAgICAgZmxleDogMjsKICAgICAgfQoKICAgICAgLmZsZXgtMyB7CiAgICAgICAgLW1zLWZsZXg6IDM7CiAgICAgICAgLXdlYmtpdC1mbGV4OiAzOwogICAgICAgIGZsZXg6IDM7CiAgICAgIH0KCiAgICAgIC5mbGV4LTQgewogICAgICAgIC1tcy1mbGV4OiA0OwogICAgICAgIC13ZWJraXQtZmxleDogNDsKICAgICAgICBmbGV4OiA0OwogICAgICB9CgogICAgICAuZmxleC01IHsKICAgICAgICAtbXMtZmxleDogNTsKICAgICAgICAtd2Via2l0LWZsZXg6IDU7CiAgICAgICAgZmxleDogNTsKICAgICAgfQoKICAgICAgLmZsZXgtNiB7CiAgICAgICAgLW1zLWZsZXg6IDY7CiAgICAgICAgLXdlYmtpdC1mbGV4OiA2OwogICAgICAgIGZsZXg6IDY7CiAgICAgIH0KCiAgICAgIC5mbGV4LTcgewogICAgICAgIC1tcy1mbGV4OiA3OwogICAgICAgIC13ZWJraXQtZmxleDogNzsKICAgICAgICBmbGV4OiA3OwogICAgICB9CgogICAgICAuZmxleC04IHsKICAgICAgICAtbXMtZmxleDogODsKICAgICAgICAtd2Via2l0LWZsZXg6IDg7CiAgICAgICAgZmxleDogODsKICAgICAgfQoKICAgICAgLmZsZXgtOSB7CiAgICAgICAgLW1zLWZsZXg6IDk7CiAgICAgICAgLXdlYmtpdC1mbGV4OiA5OwogICAgICAgIGZsZXg6IDk7CiAgICAgIH0KCiAgICAgIC5mbGV4LTEwIHsKICAgICAgICAtbXMtZmxleDogMTA7CiAgICAgICAgLXdlYmtpdC1mbGV4OiAxMDsKICAgICAgICBmbGV4OiAxMDsKICAgICAgfQoKICAgICAgLmZsZXgtMTEgewogICAgICAgIC1tcy1mbGV4OiAxMTsKICAgICAgICAtd2Via2l0LWZsZXg6IDExOwogICAgICAgIGZsZXg6IDExOwogICAgICB9CgogICAgICAuZmxleC0xMiB7CiAgICAgICAgLW1zLWZsZXg6IDEyOwogICAgICAgIC13ZWJraXQtZmxleDogMTI7CiAgICAgICAgZmxleDogMTI7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPgoKCjxkb20tbW9kdWxlIGlkPSJpcm9uLXBvc2l0aW9uaW5nIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIC5ibG9jayB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH0KCiAgICAgIFtoaWRkZW5dIHsKICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICAgIH0KCiAgICAgIC5pbnZpc2libGUgewogICAgICAgIHZpc2liaWxpdHk6IGhpZGRlbiAhaW1wb3J0YW50OwogICAgICB9CgogICAgICAucmVsYXRpdmUgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfQoKICAgICAgLmZpdCB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgfQoKICAgICAgYm9keS5mdWxsYmxlZWQgewogICAgICAgIG1hcmdpbjogMDsKICAgICAgICBoZWlnaHQ6IDEwMHZoOwogICAgICB9CgogICAgICAuc2Nyb2xsIHsKICAgICAgICAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7CiAgICAgICAgb3ZlcmZsb3c6IGF1dG87CiAgICAgIH0KCiAgICAgIC8qIGZpeGVkIHBvc2l0aW9uICovCiAgICAgIC5maXhlZC1ib3R0b20sCiAgICAgIC5maXhlZC1sZWZ0LAogICAgICAuZml4ZWQtcmlnaHQsCiAgICAgIC5maXhlZC10b3AgewogICAgICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgICAgfQoKICAgICAgLmZpeGVkLXRvcCB7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgIH0KCiAgICAgIC5maXhlZC1yaWdodCB7CiAgICAgICAgdG9wOiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgfQoKICAgICAgLmZpeGVkLWJvdHRvbSB7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgIH0KCiAgICAgIC5maXhlZC1sZWZ0IHsKICAgICAgICB0b3A6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPgoKCgoKCgoKCgo8c3R5bGUgaXM9ImN1c3RvbS1zdHlsZSI+CiAgOnJvb3QgewogICAgLS10Yi1vcmFuZ2Utd2VhazogI2ZmYTcyNjsKICAgIC0tdGItb3JhbmdlLXN0cm9uZzogI2Y1N2MwMDsKICAgIC0tdGItb3JhbmdlLWRhcms6ICNkYzczMjA7CiAgICAtLXRiLWdyZXktZGFya2VyOiAjZTJlMmUyOwogICAgLS10Yi1ncmV5LWxpZ2h0ZXI6ICNmM2YzZjM7CiAgICAtLXRiLXVpLWRhcmstYWNjZW50OiAjNzU3NTc1OwogICAgLS10Yi11aS1saWdodC1hY2NlbnQ6ICNlMGUwZTA7CiAgICAtLXRiLWdyYXBoLWZhZGVkOiAjZTBkNGIzOwogIH0KPC9zdHlsZT4KCgo8ZG9tLW1vZHVsZSBpZD0iZGFzaGJvYXJkLXN0eWxlIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGUgaW5jbHVkZT0iaXJvbi1mbGV4Ij48L3N0eWxlPgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgLS1zaWRlYmFyLXZlcnRpY2FsLXBhZGRpbmc6IDE1cHg7CiAgICAgICAgLS1zaWRlYmFyLWxlZnQtcGFkZGluZzogMzBweDsKICAgICAgfQoKICAgICAgW3Nsb3Q9J3NpZGViYXInXSB7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIG1hcmdpbi1yaWdodDogMjBweDsKICAgICAgICBvdmVyZmxvdy14OiBoaWRkZW47CiAgICAgICAgcGFkZGluZzogNXB4IDA7CiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICAgIH0KCiAgICAgIHRmLXJ1bnMtc2VsZWN0b3IgewogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgICBmbGV4LXNocmluazogMTsKICAgICAgICBsZWZ0OiB2YXIoLS1zaWRlYmFyLWxlZnQtcGFkZGluZyk7CiAgICAgICAgbWF4LWhlaWdodDogY2FsYygxMDAlIC0gdmFyKC0tc2lkZWJhci12ZXJ0aWNhbC1wYWRkaW5nKSAqIDIpOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHJpZ2h0OiAwOwogICAgICB9CgogICAgICAuc2VhcmNoLWlucHV0IHsKICAgICAgICBtYXJnaW46IDEwcHggNXB4IDAgMTBweDsKICAgICAgfQoKICAgICAgLnNpZGViYXItc2VjdGlvbiB7CiAgICAgICAgYm9yZGVyLXRvcDogc29saWQgMXB4IHJnYmEoMCwgMCwgMCwgMC4xMik7CiAgICAgICAgcGFkZGluZzogdmFyKC0tc2lkZWJhci12ZXJ0aWNhbC1wYWRkaW5nKSAwCiAgICAgICAgICB2YXIoLS1zaWRlYmFyLXZlcnRpY2FsLXBhZGRpbmcpIHZhcigtLXNpZGViYXItbGVmdC1wYWRkaW5nKTsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KCiAgICAgIC5zaWRlYmFyLXNlY3Rpb246Zmlyc3Qtb2YtdHlwZSB7CiAgICAgICAgYm9yZGVyOiBub25lOwogICAgICB9CgogICAgICAuc2lkZWJhci1zZWN0aW9uOmxhc3Qtb2YtdHlwZSB7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIH0KCiAgICAgIC5zaWRlYmFyLXNlY3Rpb24gcGFwZXItYnV0dG9uIHsKICAgICAgICBtYXJnaW46IDVweDsKICAgICAgfQoKICAgICAgLnNpZGViYXItc2VjdGlvbiBwYXBlci1idXR0b246Zmlyc3Qtb2YtdHlwZSB7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDAgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgLnNpZGViYXItc2VjdGlvbiBwYXBlci1idXR0b246bGFzdC1vZi10eXBlIHsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDAgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgLnNpZGViYXItc2VjdGlvbiA+IDpmaXJzdC1jaGlsZCB7CiAgICAgICAgbWFyZ2luLXRvcDogMDsKICAgICAgICBwYWRkaW5nLXRvcDogMDsKICAgICAgfQoKICAgICAgLnNpZGViYXItc2VjdGlvbiA+IDpsYXN0LWNoaWxkIHsKICAgICAgICBtYXJnaW4tYm90dG9tOiAwOwogICAgICAgIHBhZGRpbmctYm90dG9tOiAwOwogICAgICB9CgogICAgICAuc2lkZWJhci1zZWN0aW9uIGgzIHsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItZ3JleS04MDApOwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LXdlaWdodDogbm9ybWFsOwogICAgICAgIG1hcmdpbjogMTBweCAwIDVweDsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQoKICAgICAgcGFwZXItY2hlY2tib3ggewogICAgICAgIC0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1jb2xvcjogdmFyKC0tdGItdWktZGFyay1hY2NlbnQpOwogICAgICAgIC0tcGFwZXItY2hlY2tib3gtdW5jaGVja2VkLWNvbG9yOiB2YXIoLS10Yi11aS1kYXJrLWFjY2VudCk7CiAgICAgICAgZm9udC1zaXplOiAxNXB4OwogICAgICAgIG1hcmdpbi10b3A6IDVweDsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+CgoKCgoKPGRvbS1tb2R1bGUgaWQ9InNjcm9sbGJhci1zdHlsZSI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICAuc2Nyb2xsYmFyOjotd2Via2l0LXNjcm9sbGJhci10cmFjayB7CiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuOwogICAgICB9CgogICAgICAuc2Nyb2xsYmFyOjotd2Via2l0LXNjcm9sbGJhciB7CiAgICAgICAgd2lkdGg6IDEwcHg7CiAgICAgIH0KCiAgICAgIC5zY3JvbGxiYXI6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHsKICAgICAgICBib3JkZXItcmFkaXVzOiAxMHB4OwogICAgICAgIC13ZWJraXQtYm94LXNoYWRvdzogaW5zZXQgMCAwIDJweCByZ2JhKDAsIDAsIDAsIDAuMyk7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItZ3JleS01MDApOwogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1ncmV5LTkwMCk7CiAgICAgIH0KICAgICAgLnNjcm9sbGJhciB7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+CgoKCgo8ZG9tLW1vZHVsZSBpZD0idGYtZGFzaGJvYXJkLWxheW91dCI+CiAgPHRlbXBsYXRlPgogICAgPGRpdiBpZD0ic2lkZWJhciI+CiAgICAgIDxzbG90IG5hbWU9InNpZGViYXIiPjwvc2xvdD4KICAgIDwvZGl2PgoKICAgIDxkaXYgaWQ9ImNlbnRlciI+CiAgICAgIDxzbG90IG5hbWU9ImNlbnRlciIgY2xhc3M9InNjb2xsYmFyIj48L3Nsb3Q+CiAgICA8L2Rpdj4KICAgIDxzdHlsZSBpbmNsdWRlPSJzY3JvbGxiYXItc3R5bGUiPjwvc3R5bGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CgogICAgICAjc2lkZWJhciB7CiAgICAgICAgZmxleDogMCAwIHZhcigtLXRmLWRhc2hib2FyZC1sYXlvdXQtc2lkZWJhci1iYXNpcywgMjUlKTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgbWF4LXdpZHRoOiB2YXIoLS10Zi1kYXNoYm9hcmQtbGF5b3V0LXNpZGViYXItbWF4LXdpZHRoLCAzNTBweCk7CiAgICAgICAgbWluLXdpZHRoOiB2YXIoLS10Zi1kYXNoYm9hcmQtbGF5b3V0LXNpZGViYXItbWluLXdpZHRoLCAyNzBweCk7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgICAgfQoKICAgICAgI2NlbnRlciB7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICAgIGZsZXgtc2hyaW5rOiAxOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB9CgogICAgICA6OnNsb3R0ZWQoW3Nsb3Q9J2NlbnRlciddKSB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIG92ZXJmbG93LXg6IGhpZGRlbjsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm07CiAgICAgIH0KCiAgICAgIC50Zi1ncmFwaC1kYXNoYm9hcmQgI2NlbnRlciB7CiAgICAgICAgYmFja2dyb3VuZDogI2ZmZjsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgogIDxzY3JpcHQ+Ly9+fldFQlBBVEh+fi90Zi1kYXNoYm9hcmQtY29tbW9uL3RmLWRhc2hib2FyZC1sYXlvdXQuaHRtbC5qcwpQb2x5bWVyKHtpczoidGYtZGFzaGJvYXJkLWxheW91dCJ9KTsKPC9zY3JpcHQ+CjwvZG9tLW1vZHVsZT4KCgoKCgo8ZG9tLW1vZHVsZSBpZD0idGYtb3B0aW9uLXNlbGVjdG9yIj4KICA8dGVtcGxhdGU+CiAgICA8ZGl2IGlkPSJ3cmFwIj4KICAgICAgPGgzPltbbmFtZV1dPC9oMz4KICAgICAgPGRpdiBjbGFzcz0iY29udGVudC13cmFwcGVyIj48c2xvdD48L3Nsb3Q+PC9kaXY+CiAgICA8L2Rpdj4KICAgIDxzdHlsZT4KICAgICAgLmNvbnRlbnQtd3JhcHBlciA6OnNsb3R0ZWQoKikgewogICAgICAgIGJhY2tncm91bmQ6IG5vbmU7CiAgICAgICAgY29sb3I6IHZhcigtLXRiLXVpLWRhcmstYWNjZW50KTsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgbWFyZ2luLXRvcDogMTBweDsKICAgICAgfQoKICAgICAgLmNvbnRlbnQtd3JhcHBlciA6OnNsb3R0ZWQoKikgewogICAgICAgIGJhY2tncm91bmQ6IG5vbmU7CiAgICAgICAgY29sb3I6IHZhcigtLXRiLXVpLWRhcmstYWNjZW50KTsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgbWFyZ2luLXRvcDogMTBweDsKICAgICAgfQoKICAgICAgLmNvbnRlbnQtd3JhcHBlciA6OnNsb3R0ZWQoLnNlbGVjdGVkKSB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tdGItdWktZGFyay1hY2NlbnQpOwogICAgICAgIGNvbG9yOiB3aGl0ZSAhaW1wb3J0YW50OwogICAgICB9CgogICAgICBoMyB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWdyZXktODAwKTsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKICAgICAgICBtYXJnaW46IDAgMCA1cHg7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KICA8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdGYtZGFzaGJvYXJkLWNvbW1vbi90Zi1vcHRpb24tc2VsZWN0b3IuaHRtbC5qcwpQb2x5bWVyKHtpczoidGYtb3B0aW9uLXNlbGVjdG9yIixwcm9wZXJ0aWVzOntuYW1lOlN0cmluZyxzZWxlY3RlZElkOnt0eXBlOlN0cmluZyxub3RpZnk6ITAsb2JzZXJ2ZXI6Il9zZWxlY3RlZElkQ2hhbmdlZCJ9fSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuYXN5bmMoZnVuY3Rpb24oKXt0aGlzLmdldEVmZmVjdGl2ZUNoaWxkcmVuKCkuZm9yRWFjaChmdW5jdGlvbihhKXt0aGlzLmxpc3RlbihhLCJ0YXAiLCJfc2VsZWN0VGFyZ2V0Iil9LmJpbmQodGhpcykpfSl9LF9zZWxlY3RUYXJnZXQ6ZnVuY3Rpb24oYSl7dGhpcy5zZWxlY3RlZElkPWEuY3VycmVudFRhcmdldC5pZH0sX3NlbGVjdGVkSWRDaGFuZ2VkOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5xdWVyeUVmZmVjdGl2ZUNoaWxkcmVuKCIjIit0aGlzLnNlbGVjdGVkSWQpO2EmJih0aGlzLmdldEVmZmVjdGl2ZUNoaWxkcmVuKCkuZm9yRWFjaChmdW5jdGlvbihjKXtjLmNsYXNzTGlzdC5yZW1vdmUoInNlbGVjdGVkIil9KSxhLmNsYXNzTGlzdC5hZGQoInNlbGVjdGVkIikpfX0pOwo8L3NjcmlwdD4KPC9kb20tbW9kdWxlPgoKCgoKCgoKCjxkb20tbW9kdWxlIGlkPSJpcm9uLWNvbGxhcHNlIj4KCiAgPHRlbXBsYXRlPgoKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHRyYW5zaXRpb24tZHVyYXRpb246IHZhcigtLWlyb24tY29sbGFwc2UtdHJhbnNpdGlvbi1kdXJhdGlvbiwgMzAwbXMpOwogICAgICAgIC8qIFNhZmFyaSAxMCBuZWVkcyB0aGlzIHByb3BlcnR5IHByZWZpeGVkIHRvIGNvcnJlY3RseSBhcHBseSB0aGUgY3VzdG9tIHByb3BlcnR5ICovCiAgICAgICAgLXdlYmtpdC10cmFuc2l0aW9uLWR1cmF0aW9uOiB2YXIoLS1pcm9uLWNvbGxhcHNlLXRyYW5zaXRpb24tZHVyYXRpb24sIDMwMG1zKTsKICAgICAgICBvdmVyZmxvdzogdmlzaWJsZTsKICAgICAgfQoKICAgICAgOmhvc3QoLmlyb24tY29sbGFwc2UtY2xvc2VkKSB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQoKICAgICAgOmhvc3QoOm5vdCguaXJvbi1jb2xsYXBzZS1vcGVuZWQpKSB7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8c2xvdD48L3Nsb3Q+CgogIDwvdGVtcGxhdGU+Cgo8L2RvbS1tb2R1bGU+Cgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vaXJvbi1jb2xsYXBzZS9pcm9uLWNvbGxhcHNlLmh0bWwuanMKUG9seW1lcih7aXM6Imlyb24tY29sbGFwc2UiLGJlaGF2aW9yczpbUG9seW1lci5Jcm9uUmVzaXphYmxlQmVoYXZpb3JdLHByb3BlcnRpZXM6e2hvcml6b250YWw6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxvYnNlcnZlcjoiX2hvcml6b250YWxDaGFuZ2VkIn0sb3BlbmVkOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEsbm90aWZ5OiEwLG9ic2VydmVyOiJfb3BlbmVkQ2hhbmdlZCJ9LHRyYW5zaXRpb25pbmc6e3R5cGU6Qm9vbGVhbixub3RpZnk6ITAscmVhZE9ubHk6ITB9LG5vQW5pbWF0aW9uOnt0eXBlOkJvb2xlYW59LF9kZXNpcmVkU2l6ZTp7dHlwZTpTdHJpbmcsdmFsdWU6IiJ9fSxnZXQgZGltZW5zaW9uKCl7cmV0dXJuIHRoaXMuaG9yaXpvbnRhbD8id2lkdGgiOiJoZWlnaHQifSxnZXQgX2RpbWVuc2lvbk1heCgpe3JldHVybiB0aGlzLmhvcml6b250YWw/Im1heFdpZHRoIjoibWF4SGVpZ2h0In0sZ2V0IF9kaW1lbnNpb25NYXhDc3MoKXtyZXR1cm4gdGhpcy5ob3Jpem9udGFsPyJtYXgtd2lkdGgiOgoibWF4LWhlaWdodCJ9LGhvc3RBdHRyaWJ1dGVzOntyb2xlOiJncm91cCIsImFyaWEtaGlkZGVuIjoidHJ1ZSJ9LGxpc3RlbmVyczp7dHJhbnNpdGlvbmVuZDoiX29uVHJhbnNpdGlvbkVuZCJ9LHRvZ2dsZTpmdW5jdGlvbigpe3RoaXMub3BlbmVkPSF0aGlzLm9wZW5lZH0sc2hvdzpmdW5jdGlvbigpe3RoaXMub3BlbmVkPSEwfSxoaWRlOmZ1bmN0aW9uKCl7dGhpcy5vcGVuZWQ9ITF9LHVwZGF0ZVNpemU6ZnVuY3Rpb24oYSxjKXthPSJhdXRvIj09PWE/IiI6YTtjPWMmJiF0aGlzLm5vQW5pbWF0aW9uJiZ0aGlzLmlzQXR0YWNoZWQmJnRoaXMuX2Rlc2lyZWRTaXplIT09YTt0aGlzLl9kZXNpcmVkU2l6ZT1hO3RoaXMuX3VwZGF0ZVRyYW5zaXRpb24oITEpO2MmJihjPXRoaXMuX2NhbGNTaXplKCksIiI9PT1hJiYodGhpcy5zdHlsZVt0aGlzLl9kaW1lbnNpb25NYXhdPSIiLGE9dGhpcy5fY2FsY1NpemUoKSksdGhpcy5zdHlsZVt0aGlzLl9kaW1lbnNpb25NYXhdPWMsdGhpcy5zY3JvbGxUb3A9CnRoaXMuc2Nyb2xsVG9wLHRoaXMuX3VwZGF0ZVRyYW5zaXRpb24oITApLGM9YSE9PWMpO3RoaXMuc3R5bGVbdGhpcy5fZGltZW5zaW9uTWF4XT1hO2N8fHRoaXMuX3RyYW5zaXRpb25FbmQoKX0sZW5hYmxlVHJhbnNpdGlvbjpmdW5jdGlvbihhKXtQb2x5bWVyLkJhc2UuX3dhcm4oImBlbmFibGVUcmFuc2l0aW9uKClgIGlzIGRlcHJlY2F0ZWQsIHVzZSBgbm9BbmltYXRpb25gIGluc3RlYWQuIik7dGhpcy5ub0FuaW1hdGlvbj0hYX0sX3VwZGF0ZVRyYW5zaXRpb246ZnVuY3Rpb24oYSl7dGhpcy5zdHlsZS50cmFuc2l0aW9uRHVyYXRpb249YSYmIXRoaXMubm9BbmltYXRpb24/IiI6IjBzIn0sX2hvcml6b250YWxDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5zdHlsZS50cmFuc2l0aW9uUHJvcGVydHk9dGhpcy5fZGltZW5zaW9uTWF4Q3NzO3RoaXMuc3R5bGVbIm1heFdpZHRoIj09PXRoaXMuX2RpbWVuc2lvbk1heD8ibWF4SGVpZ2h0IjoibWF4V2lkdGgiXT0iIjt0aGlzLnVwZGF0ZVNpemUodGhpcy5vcGVuZWQ/CiJhdXRvIjoiMHB4IiwhMSl9LF9vcGVuZWRDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtaGlkZGVuIiwhdGhpcy5vcGVuZWQpO3RoaXMuX3NldFRyYW5zaXRpb25pbmcoITApO3RoaXMudG9nZ2xlQ2xhc3MoImlyb24tY29sbGFwc2UtY2xvc2VkIiwhMSk7dGhpcy50b2dnbGVDbGFzcygiaXJvbi1jb2xsYXBzZS1vcGVuZWQiLCExKTt0aGlzLnVwZGF0ZVNpemUodGhpcy5vcGVuZWQ/ImF1dG8iOiIwcHgiLCEwKTt0aGlzLm9wZW5lZCYmdGhpcy5mb2N1cygpfSxfdHJhbnNpdGlvbkVuZDpmdW5jdGlvbigpe3RoaXMuc3R5bGVbdGhpcy5fZGltZW5zaW9uTWF4XT10aGlzLl9kZXNpcmVkU2l6ZTt0aGlzLnRvZ2dsZUNsYXNzKCJpcm9uLWNvbGxhcHNlLWNsb3NlZCIsIXRoaXMub3BlbmVkKTt0aGlzLnRvZ2dsZUNsYXNzKCJpcm9uLWNvbGxhcHNlLW9wZW5lZCIsdGhpcy5vcGVuZWQpO3RoaXMuX3VwZGF0ZVRyYW5zaXRpb24oITEpO3RoaXMubm90aWZ5UmVzaXplKCk7CnRoaXMuX3NldFRyYW5zaXRpb25pbmcoITEpfSxfb25UcmFuc2l0aW9uRW5kOmZ1bmN0aW9uKGEpe1BvbHltZXIuZG9tKGEpLnJvb3RUYXJnZXQ9PT10aGlzJiZ0aGlzLl90cmFuc2l0aW9uRW5kKCl9LF9jYWxjU2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpW3RoaXMuZGltZW5zaW9uXSsicHgifX0pOwo8L3NjcmlwdD4KCgoKCgoKCjxzY3JpcHQ+Ly9+fldFQlBBVEh+fi90Zi1wYWdpbmF0ZWQtdmlldy90Zi1kb20tcmVwZWF0Lmh0bWwuanMKdmFyIFhsOwooZnVuY3Rpb24oYSl7YS5UZkRvbVJlcGVhdEJlaGF2aW9yPVtXbC5BcnJheVVwZGF0ZUhlbHBlcix7cHJvcGVydGllczp7YXM6e3R5cGU6U3RyaW5nLHZhbHVlOiJpdGVtIn0sX2NvbnRlbnRBY3RpdmU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMH0sX2RvbUJvb3RzdHJhcHBlZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxfY3Rvcjp7dHlwZTpGdW5jdGlvbix2YWx1ZTooKT0+bnVsbH0sX3JlbmRlcmVkSXRlbXM6e3R5cGU6QXJyYXksdmFsdWU6KCk9PltdfSxfcmVuZGVyZWRUZW1wbGF0ZUluc3Q6e3R5cGU6T2JqZWN0LHZhbHVlOigpPT5uZXcgTWFwfSxfbHJ1Q2FjaGVkSXRlbXM6e3R5cGU6T2JqZWN0LHZhbHVlOigpPT5uZXcgTWFwfSxfY2FjaGVTaXplOnt0eXBlOk51bWJlcix2YWx1ZToxMH0sX2dldEl0ZW1LZXk6e3R5cGU6RnVuY3Rpb24sdmFsdWU6KCk9PmM9PkpTT04uc3RyaW5naWZ5KGMpfX0sb2JzZXJ2ZXJzOlsiX2Jvb3RzdHJhcERvbShfaXRlbXNSZW5kZXJlZCwgaXNBdHRhY2hlZCkiLCJfdXBkYXRlRG9tKF9yZW5kZXJlZEl0ZW1zLiosIF9kb21Cb290c3RyYXBwZWQpIiwKIl91cGRhdGVBY3RpdmUoX2NvbnRlbnRBY3RpdmUpIiwiX3RyaW1DYWNoZShfY2FjaGVTaXplKSJdLHNldENhY2hlU2l6ZShjKXt0aGlzLl9jYWNoZVNpemU9Y30sc2V0R2V0SXRlbUtleShjKXt0aGlzLl9nZXRJdGVtS2V5PWN9LHVwZGF0ZURvbShjKXt0aGlzLnVwZGF0ZUFycmF5UHJvcCgiX3JlbmRlcmVkSXRlbXMiLGMsdGhpcy5fZ2V0SXRlbUtleSl9LF9lbnN1cmVUZW1wbGF0aXplZCgpe2lmKCF0aGlzLmlzQXR0YWNoZWQpcmV0dXJuITE7dGhpcy5fY3Rvcnx8KHRoaXMuX2N0b3I9UG9seW1lci5UZW1wbGF0aXplLnRlbXBsYXRpemUodGhpcy5xdWVyeVNlbGVjdG9yKCJ0ZW1wbGF0ZSIpLHRoaXMse3BhcmVudE1vZGVsOiEwLGluc3RhbmNlUHJvcHM6e1t0aGlzLmFzXTohMCxhY3RpdmU6dGhpcy5fY29udGVudEFjdGl2ZX0sZm9yd2FyZEhvc3RQcm9wOmZ1bmN0aW9uKGMsZCl7dGhpcy5fcmVuZGVyZWRUZW1wbGF0ZUluc3QuZm9yRWFjaChmPT57Zi5mb3J3YXJkSG9zdFByb3AoYywKZCl9KX19KSk7cmV0dXJuITB9LF9ib290c3RyYXBEb20oKXt0aGlzLl9pdGVtc1JlbmRlcmVkJiZ0aGlzLl9lbnN1cmVUZW1wbGF0aXplZCgpJiYhdGhpcy5fZG9tQm9vdHN0cmFwcGVkJiYoQXJyYXkuZnJvbSh0aGlzLmNoaWxkcmVuKS5mb3JFYWNoKGM9PntQb2x5bWVyLmRvbSh0aGlzKS5yZW1vdmVDaGlsZChjKX0pLHRoaXMuX2xydUNhY2hlZEl0ZW1zLmNsZWFyKCksdGhpcy5fcmVuZGVyZWRJdGVtcy5mb3JFYWNoKChjLGQpPT50aGlzLl9pbnNlcnRJdGVtKGMsZCkpLHRoaXMuX2RvbUJvb3RzdHJhcHBlZD0hMCl9LF91cGRhdGVBY3RpdmUoKXt0aGlzLl9kb21Cb290c3RyYXBwZWQmJkFycmF5LmZyb20odGhpcy5fcmVuZGVyZWRUZW1wbGF0ZUluc3QudmFsdWVzKCkpLmZvckVhY2goYz0+e2Mubm90aWZ5UGF0aCgiYWN0aXZlIix0aGlzLl9jb250ZW50QWN0aXZlKX0pfSxfdXBkYXRlRG9tKGMpe2lmKHRoaXMuX2RvbUJvb3RzdHJhcHBlZCYmIl9yZW5kZXJlZEl0ZW1zIiE9Yy5wYXRoJiYKIl9yZW5kZXJlZEl0ZW1zLmxlbmd0aCIhPWMucGF0aClpZigiX3JlbmRlcmVkSXRlbXMuc3BsaWNlcyI9PT1jLnBhdGgpYy52YWx1ZS5pbmRleFNwbGljZXMuZm9yRWFjaChkPT57Y29uc3Qge2luZGV4OmYsYWRkZWRDb3VudDpnLG9iamVjdDpsLHJlbW92ZWQ6a309ZDtrLmZvckVhY2gobT0+e3RoaXMuX3JlbW92ZUl0ZW0obSx0aGlzLmNoaWxkcmVuW2ZdKX0pO2wuc2xpY2UoZixmK2cpLmZvckVhY2goKG0scCk9PnRoaXMuX2luc2VydEl0ZW0obSxmK3ApKTt0aGlzLl90cmltQ2FjaGUoKX0pO2Vsc2V7Y29uc3QgZD10aGlzLl9nZXRJdGVtS2V5KGMudmFsdWUpO3RoaXMuX3JlbmRlcmVkVGVtcGxhdGVJbnN0LmhhcyhkKT90aGlzLl9yZW5kZXJlZFRlbXBsYXRlSW5zdC5nZXQoZCkubm90aWZ5UGF0aCh0aGlzLmFzLGMudmFsdWUpOmNvbnNvbGUud2FybihgRXhwZWN0ZWQgJyR7ZH0nIHRvIGV4aXN0IGluIHRoZSBET00gYnV0IGArImNvdWxkIG5vdCBmaW5kIG9uZS4iKX19LF9pbnNlcnRJdGVtKGMsCmQpe2lmKCF0aGlzLl9lbnN1cmVUZW1wbGF0aXplZCgpKXRocm93IEVycm9yKCJFeHBlY3RlZCB0ZW1wbGF0aXplZCBiZWZvcmUgaW5zZXJ0aW5nIGFuIGl0ZW0iKTtjb25zdCBmPXRoaXMuX2dldEl0ZW1LZXkoYyk7aWYodGhpcy5fbHJ1Q2FjaGVkSXRlbXMuaGFzKGYpKWM9dGhpcy5fbHJ1Q2FjaGVkSXRlbXMuZ2V0KGYpLHRoaXMuX2xydUNhY2hlZEl0ZW1zLmRlbGV0ZShmKSx0aGlzLl9yZW5kZXJlZFRlbXBsYXRlSW5zdC5nZXQoZikubm90aWZ5UGF0aCgiYWN0aXZlIix0aGlzLl9jb250ZW50QWN0aXZlKTtlbHNle2NvbnN0IGc9bmV3IHRoaXMuX2N0b3Ioe1t0aGlzLmFzXTpjLGFjdGl2ZTp0aGlzLl9jb250ZW50QWN0aXZlfSk7Yz1nLnJvb3Q7dGhpcy5fcmVuZGVyZWRUZW1wbGF0ZUluc3Quc2V0KGYsZyl9dGhpcy5jaGlsZHJlbltkXT9Qb2x5bWVyLmRvbSh0aGlzKS5pbnNlcnRCZWZvcmUoYyx0aGlzLmNoaWxkcmVuW2RdKTooKGMubm9kZVR5cGU9PU5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERT8KQXJyYXkuZnJvbShjLmNoaWxkcmVuKTpbY10pLmZvckVhY2goZz0+Zy5zZXRBdHRyaWJ1dGUoInNsb3QiLCJpdGVtcyIpKSxQb2x5bWVyLmRvbSh0aGlzKS5hcHBlbmRDaGlsZChjKSl9LF9yZW1vdmVJdGVtKGMsZCl7UG9seW1lci5kb20oZC5wYXJlbnROb2RlKS5yZW1vdmVDaGlsZChkKTtjPXRoaXMuX2dldEl0ZW1LZXkoYyk7dGhpcy5fbHJ1Q2FjaGVkSXRlbXMuc2V0KGMsZCk7dGhpcy5fcmVuZGVyZWRUZW1wbGF0ZUluc3QuZ2V0KGMpLm5vdGlmeVBhdGgoImFjdGl2ZSIsITEpfSxfdHJpbUNhY2hlKCl7Zm9yKDt0aGlzLl9scnVDYWNoZWRJdGVtcy5zaXplPnRoaXMuX2NhY2hlU2l6ZTspe2NvbnN0IFtjXT10aGlzLl9scnVDYWNoZWRJdGVtcy5rZXlzKCk7dGhpcy5fbHJ1Q2FjaGVkSXRlbXMuZGVsZXRlKGMpO3RoaXMuX3JlbmRlcmVkVGVtcGxhdGVJbnN0LmRlbGV0ZShjKX19fV19KShYbHx8KFhsPXt9KSk7Cjwvc2NyaXB0PgoKCgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdGYtcGFnaW5hdGVkLXZpZXcvcGFnaW5hdGVkVmlld1N0b3JlLmpzCnZhciBZbDsKKGZ1bmN0aW9uKGEpe2xldCBjPW51bGw7Y29uc3QgZD1uZXcgU2V0O2EuYWRkTGltaXRMaXN0ZW5lcj1mdW5jdGlvbihmKXtkLmFkZChmKX07YS5yZW1vdmVMaW1pdExpc3RlbmVyPWZ1bmN0aW9uKGYpe2QuZGVsZXRlKGYpfTthLmdldExpbWl0PWZ1bmN0aW9uKCl7bnVsbD09YyYmKGM9VmwuZ2V0TnVtYmVyKCJURi5UZW5zb3JCb2FyZC5QYWdpbmF0ZWRWaWV3LmxpbWl0Iix7dXNlTG9jYWxTdG9yYWdlOiEwfSksbnVsbD09Y3x8IWlzRmluaXRlKGMpfHwwPj1jKSYmKGM9MTIpO3JldHVybiBjfTthLnNldExpbWl0PWZ1bmN0aW9uKGYpe2lmKGYhPT1NYXRoLmZsb29yKGYpKXRocm93IEVycm9yKGBsaW1pdCBtdXN0IGJlIGFuIGludGVnZXIsIGJ1dCBnb3Q6ICR7Zn1gKTtpZigwPj1mKXRocm93IEVycm9yKGBsaW1pdCBtdXN0IGJlIHBvc2l0aXZlLCBidXQgZ290OiAke2Z9YCk7ZiE9PWMmJihjPWYsVmwuc2V0TnVtYmVyKCJURi5UZW5zb3JCb2FyZC5QYWdpbmF0ZWRWaWV3LmxpbWl0IixjLAp7dXNlTG9jYWxTdG9yYWdlOiEwfSksZC5mb3JFYWNoKGc9PntnKCl9KSl9fSkoWWx8fChZbD17fSkpOwo8L3NjcmlwdD4KCgoKPGRvbS1tb2R1bGUgaWQ9InRmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3Ij4KICA8dGVtcGxhdGU+CiAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX3BhbmVSZW5kZXJlZF1dIiBpZD0iaWZSZW5kZXJlZCI+CiAgICAgIDxidXR0b24gY2xhc3M9ImhlYWRpbmciIG9uLXRhcD0iX3RvZ2dsZVBhbmUiIG9wZW4tYnV0dG9uJD0iW1tvcGVuZWRdXSI+CiAgICAgICAgPHNwYW4gY2xhc3M9Im5hbWUiPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19pc1NlYXJjaFJlc3VsdHNdXSI+CiAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaXNDb21wb3NpdGVTZWFyY2goY2F0ZWdvcnkpXV0iPgogICAgICAgICAgICAgIDxzcGFuPlRhZ3MgbWF0Y2hpbmcgbXVsdGlwbGUgZXhwZXJpbWVudHM8L3NwYW4+CiAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19pc0ludmFsaWRTZWFyY2hSZXN1bHRzXV0iPgogICAgICAgICAgICAgICAgPHNwYW4+Jm5ic3A7PHN0cm9uZz4obWFsZm9ybWVkIHJlZ3VsYXIgZXhwcmVzc2lvbik8L3N0cm9uZz48L3NwYW4+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbWyFfaXNDb21wb3NpdGVTZWFyY2goY2F0ZWdvcnkpXV0iPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaWdodCI+VGFncyBtYXRjaGluZyAvPC9zcGFuPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjYXRlZ29yeS1uYW1lIj5bW2NhdGVnb3J5Lm5hbWVdXTwvc3Bhbj4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGlnaHQiPi88L3NwYW4+CiAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19pc1VuaXZlcnNhbFNlYXJjaFF1ZXJ5XV0iPgogICAgICAgICAgICAgICAgPHNwYW4+IChhbGwgdGFncyk8L3NwYW4+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2lzSW52YWxpZFNlYXJjaFJlc3VsdHNdXSI+CiAgICAgICAgICAgICAgICA8c3Bhbj4gPHN0cm9uZz4obWFsZm9ybWVkIHJlZ3VsYXIgZXhwcmVzc2lvbik8L3N0cm9uZz48L3NwYW4+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIV9pc1NlYXJjaFJlc3VsdHNdXSI+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjYXRlZ29yeS1uYW1lIj5bW2NhdGVnb3J5Lm5hbWVdXTwvc3Bhbj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC9zcGFuPgogICAgICAgIDxzcGFuIGNsYXNzPSJjb3VudCI+PHNwYW4+W1tfY291bnRdXTwvc3Bhbj48L3NwYW4+CiAgICAgIDwvYnV0dG9uPgogICAgICAKICAgICAgPGlyb24tY29sbGFwc2Ugb3BlbmVkPSJbW29wZW5lZF1dIiBuby1hbmltYXRpb24+CiAgICAgICAgPGRpdiBjbGFzcz0iY29udGVudCI+CiAgICAgICAgICA8c3BhbiBpZD0idG9wLW9mLWNvbnRhaW5lciI+PC9zcGFuPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19tdWx0aXBsZVBhZ2VzRXhpc3RdXSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImJpZy1wYWdlLWJ1dHRvbnMiIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAxMHB4OyI+CiAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbiBvbi10YXA9Il9wZXJmb3JtUHJldmlvdXNQYWdlIiBkaXNhYmxlZCQ9IltbIV9oYXNQcmV2aW91c1BhZ2VdXSI+UHJldmlvdXMgcGFnZTwvcGFwZXItYnV0dG9uPgogICAgICAgICAgICAgIDxwYXBlci1idXR0b24gb24tdGFwPSJfcGVyZm9ybU5leHRQYWdlIiBkaXNhYmxlZCQ9IltbIV9oYXNOZXh0UGFnZV1dIj5OZXh0IHBhZ2U8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L3RlbXBsYXRlPgoKICAgICAgICAgIDxkaXYgaWQ9Iml0ZW1zIj4KICAgICAgICAgICAgPHNsb3QgbmFtZT0iaXRlbXMiPjwvc2xvdD4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19tdWx0aXBsZVBhZ2VzRXhpc3RdXSI+CiAgICAgICAgICAgIDxkaXYgaWQ9ImNvbnRyb2xzLWNvbnRhaW5lciI+CiAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iZGlzcGxheTogaW5saW5lLWJsb2NrOyBwYWRkaW5nOiAwIDVweCI+CiAgICAgICAgICAgICAgICBQYWdlCiAgICAgICAgICAgICAgICA8cGFwZXItaW5wdXQgaWQ9InBhZ2UtaW5wdXQiIHR5cGU9Im51bWJlciIgbm8tbGFiZWwtZmxvYXQgbWluPSIxIiBtYXg9IltbX3BhZ2VDb3VudF1dIiB2YWx1ZT0iW1tfcGFnZUlucHV0VmFsdWVdXSIgc3R5bGU9ImRpc3BsYXk6IGlubGluZS1ibG9jazsgd2lkdGg6IFtbX2lucHV0V2lkdGhdXTsiIG9uLWlucHV0PSJfaGFuZGxlUGFnZUlucHV0RXZlbnQiIG9uLWNoYW5nZT0iX2hhbmRsZVBhZ2VDaGFuZ2VFdmVudCIgb24tZm9jdXM9Il9oYW5kbGVQYWdlRm9jdXNFdmVudCIgb24tYmx1cj0iX2hhbmRsZVBhZ2VCbHVyRXZlbnQiPjwvcGFwZXItaW5wdXQ+CiAgICAgICAgICAgICAgICBvZiBbW19wYWdlQ291bnRdXQogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImJpZy1wYWdlLWJ1dHRvbnMiIHN0eWxlPSJtYXJnaW4tdG9wOiAxMHB4OyI+CiAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbiBvbi10YXA9Il9wZXJmb3JtUHJldmlvdXNQYWdlIiBkaXNhYmxlZCQ9IltbIV9oYXNQcmV2aW91c1BhZ2VdXSI+UHJldmlvdXMgcGFnZTwvcGFwZXItYnV0dG9uPgogICAgICAgICAgICAgIDxwYXBlci1idXR0b24gb24tdGFwPSJfcGVyZm9ybU5leHRQYWdlIiBkaXNhYmxlZCQ9IltbIV9oYXNOZXh0UGFnZV1dIj5OZXh0IHBhZ2U8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvZGl2PgogICAgICA8L2lyb24tY29sbGFwc2U+CiAgICA8L3RlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgbWFyZ2luOiAwIDVweCAxcHggMTBweDsKICAgICAgfQoKICAgICAgOmhvc3QoOmZpcnN0LW9mLXR5cGUpIHsKICAgICAgICBtYXJnaW4tdG9wOiAxMHB4OwogICAgICB9CgogICAgICA6aG9zdCg6bGFzdC1vZi10eXBlKSB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMjBweDsKICAgICAgfQoKICAgICAgLmhlYWRpbmcgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlOwogICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgZm9udC1zaXplOiAxNXB4OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxOwogICAgICAgIGJveC1zaGFkb3c6IDAgMXB4IDVweCByZ2JhKDAsIDAsIDAsIDAuMik7CiAgICAgICAgcGFkZGluZzogMTBweCAxNXB4OwogICAgICB9CgogICAgICAuaGVhZGluZzo6LW1vei1mb2N1cy1pbm5lciB7CiAgICAgICAgcGFkZGluZzogMTBweCAxNXB4OwogICAgICB9CgogICAgICBbb3Blbi1idXR0b25dIHsKICAgICAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwICFpbXBvcnRhbnQ7CiAgICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDAgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgLm5hbWUgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgICAgIGZsb2F0OiBsZWZ0OwogICAgICB9CgogICAgICAubGlnaHQgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1ncmV5LTUwMCk7CiAgICAgIH0KCiAgICAgIC5jYXRlZ29yeS1uYW1lIHsKICAgICAgICB3aGl0ZS1zcGFjZTogcHJlOwogICAgICB9CgogICAgICAuY291bnQgewogICAgICAgIGZsb2F0OiByaWdodDsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDVweDsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWdyZXktNTAwKTsKICAgICAgfQoKICAgICAgLmhlYWRpbmc6Oi1tb3otZm9jdXMtaW5uZXIgewogICAgICAgIHBhZGRpbmc6IDEwcHggMTVweDsKICAgICAgfQoKICAgICAgLmNvbnRlbnQgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBiYWNrZ3JvdW5kOiB3aGl0ZTsKICAgICAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAycHg7CiAgICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDJweDsKICAgICAgICBib3JkZXItdG9wOiBub25lOwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNkZWRlZGU7CiAgICAgICAgcGFkZGluZzogMTVweDsKICAgICAgfQoKICAgICAgLm5hbWUgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgICAgIGZsb2F0OiBsZWZ0OwogICAgICB9CgogICAgICAubGlnaHQgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1ncmV5LTUwMCk7CiAgICAgIH0KCiAgICAgICNjb250cm9scy1jb250YWluZXIgewogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgICBmbGV4LWdyb3c6IDA7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgICNjb250cm9scy1jb250YWluZXIgcGFwZXItYnV0dG9uIHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgIH0KCiAgICAgIC5iaWctcGFnZS1idXR0b25zIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICB9CgogICAgICAuYmlnLXBhZ2UtYnV0dG9ucyBwYXBlci1idXR0b24gewogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXRiLXVpLWxpZ2h0LWFjY2VudCk7CiAgICAgICAgY29sb3I6IHZhcigtLXRiLXVpLWRhcmstYWNjZW50KTsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgZmxleC1iYXNpczogMDsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgZmxleC1zaHJpbms6IDE7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICB9CgogICAgICAuYmlnLXBhZ2UtYnV0dG9ucyBwYXBlci1idXR0b25bZGlzYWJsZWRdIHsKICAgICAgICBiYWNrZ3JvdW5kOiBub25lOwogICAgICB9CgogICAgICBzbG90IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CiAgPHNjcmlwdD4vL35+V0VCUEFUSH5+L3RmLXBhZ2luYXRlZC12aWV3L3RmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3Lmh0bWwuanMKUG9seW1lcih7aXM6InRmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3Iixwcm9wZXJ0aWVzOntjYXRlZ29yeTpPYmplY3QsaW5pdGlhbE9wZW5lZDpCb29sZWFuLG9wZW5lZDp7dHlwZTpCb29sZWFuLG5vdGlmeTohMCxyZWFkT25seTohMH0sX2NvbnRlbnRBY3RpdmU6e3R5cGU6Qm9vbGVhbixjb21wdXRlZDoiX2NvbXB1dGVDb250ZW50QWN0aXZlKG9wZW5lZCkifSxkaXNhYmxlUGFnaW5hdGlvbjp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxfY291bnQ6e3R5cGU6TnVtYmVyLGNvbXB1dGVkOiJfY29tcHV0ZUNvdW50KGNhdGVnb3J5Lml0ZW1zLiopIn0sX3BhbmVSZW5kZXJlZDp7dHlwZTpCb29sZWFuLGNvbXB1dGVkOiJfY29tcHV0ZVBhbmVSZW5kZXJlZChjYXRlZ29yeSkiLG9ic2VydmVyOiJfb25QYW5lUmVuZGVyZWRDaGFuZ2VkIn0sX2l0ZW1zUmVuZGVyZWQ6e3R5cGU6Qm9vbGVhbixjb21wdXRlZDoiX2NvbXB1dGVJdGVtc1JlbmRlcmVkKG9wZW5lZCwgX3BhbmVSZW5kZXJlZCkifSwKX2lzU2VhcmNoUmVzdWx0czp7dHlwZTpCb29sZWFuLGNvbXB1dGVkOiJfY29tcHV0ZUlzU2VhcmNoUmVzdWx0cyhjYXRlZ29yeS5tZXRhZGF0YS50eXBlKSJ9LF9pc0ludmFsaWRTZWFyY2hSZXN1bHRzOnt0eXBlOkJvb2xlYW4sY29tcHV0ZWQ6Il9jb21wdXRlSXNJbnZhbGlkU2VhcmNoUmVzdWx0cyhjYXRlZ29yeS5tZXRhZGF0YSkifSxfaXNVbml2ZXJzYWxTZWFyY2hRdWVyeTp7dHlwZTpCb29sZWFuLGNvbXB1dGVkOiJfY29tcHV0ZUlzVW5pdmVyc2FsU2VhcmNoUXVlcnkoY2F0ZWdvcnkubWV0YWRhdGEpIn0sZ2V0Q2F0ZWdvcnlJdGVtS2V5Ont0eXBlOkZ1bmN0aW9uLHZhbHVlOigpPT5hPT5KU09OLnN0cmluZ2lmeShhKSxvYnNlcnZlcjoiX2dldENhdGVnb3J5SXRlbUtleUNoYW5nZWQifSxfbGltaXQ6e3R5cGU6TnVtYmVyLHZhbHVlOjEyLG9ic2VydmVyOiJfbGltaXRDaGFuZ2VkIn0sX2FjdGl2ZUluZGV4Ont0eXBlOk51bWJlcix2YWx1ZTowfSxfY3VycmVudFBhZ2U6e3R5cGU6TnVtYmVyLApjb21wdXRlZDoiX2NvbXB1dGVDdXJyZW50UGFnZShfbGltaXQsIF9hY3RpdmVJbmRleCkifSxfcGFnZUNvdW50Ont0eXBlOk51bWJlcixjb21wdXRlZDoiX2NvbXB1dGVQYWdlQ291bnQoY2F0ZWdvcnkuaXRlbXMuKiwgX2xpbWl0KSJ9LF9tdWx0aXBsZVBhZ2VzRXhpc3Q6e3R5cGU6Qm9vbGVhbixjb21wdXRlZDoiX2NvbXB1dGVNdWx0aXBsZVBhZ2VzRXhpc3QoX3BhZ2VDb3VudCwgZGlzYWJsZVBhZ2luYXRpb24pIn0sX2hhc1ByZXZpb3VzUGFnZTp7dHlwZTpCb29sZWFuLGNvbXB1dGVkOiJfY29tcHV0ZUhhc1ByZXZpb3VzUGFnZShfY3VycmVudFBhZ2UpIn0sX2hhc05leHRQYWdlOnt0eXBlOkJvb2xlYW4sY29tcHV0ZWQ6Il9jb21wdXRlSGFzTmV4dFBhZ2UoX2N1cnJlbnRQYWdlLCBfcGFnZUNvdW50KSJ9LF9pbnB1dFdpZHRoOnt0eXBlOlN0cmluZyxjb21wdXRlZDoiX2NvbXB1dGVJbnB1dFdpZHRoKF9wYWdlQ291bnQpIn0sX3BhZ2VJbnB1dFZhbHVlOnt0eXBlOlN0cmluZywKY29tcHV0ZWQ6Il9jb21wdXRlUGFnZUlucHV0VmFsdWUoX3BhZ2VJbnB1dEZvY3VzZWQsIF9wYWdlSW5wdXRSYXdWYWx1ZSwgX2N1cnJlbnRQYWdlKSIsb2JzZXJ2ZXI6Il91cGRhdGVQYWdlSW5wdXRWYWx1ZSJ9LF9wYWdlSW5wdXRSYXdWYWx1ZTp7dHlwZTpTdHJpbmcsdmFsdWU6IiJ9LF9wYWdlSW5wdXRGb2N1c2VkOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9fSxvYnNlcnZlcnM6WyJfY2xhbXBBY3RpdmVJbmRleChjYXRlZ29yeS5pdGVtcy4qKSIsIl91cGRhdGVSZW5kZXJlZEl0ZW1zKF9pdGVtc1JlbmRlcmVkLCBjYXRlZ29yeS5pdGVtcy4qLCBfbGltaXQsIF9hY3RpdmVJbmRleCwgX3BhZ2VDb3VudCwgZGlzYWJsZVBhZ2luYXRpb24pIl0sYmVoYXZpb3JzOltYbC5UZkRvbVJlcGVhdEJlaGF2aW9yXSxfY29tcHV0ZUNvdW50KCl7cmV0dXJuIHRoaXMuY2F0ZWdvcnkuaXRlbXMubGVuZ3RofSxfdG9nZ2xlUGFuZSgpe3RoaXMuX3NldE9wZW5lZCghdGhpcy5vcGVuZWQpfSxfY29tcHV0ZUNvbnRlbnRBY3RpdmUoKXtyZXR1cm4gdGhpcy5vcGVuZWR9LApfb25QYW5lUmVuZGVyZWRDaGFuZ2VkKGEsYyl7YSYmYSE9PWMmJnRoaXMuJC5pZlJlbmRlcmVkLnJlbmRlcigpfSxfY29tcHV0ZVBhbmVSZW5kZXJlZChhKXtyZXR1cm4hKGEubWV0YWRhdGEudHlwZT09PVFrLkNhdGVnb3J5VHlwZS5TRUFSQ0hfUkVTVUxUUyYmIiI9PT1hLm5hbWUpfSxfY29tcHV0ZUl0ZW1zUmVuZGVyZWQoKXtyZXR1cm4gdGhpcy5fcGFuZVJlbmRlcmVkJiZ0aGlzLm9wZW5lZH0sX2NvbXB1dGVJc1NlYXJjaFJlc3VsdHMoYSl7cmV0dXJuIGE9PT1Ray5DYXRlZ29yeVR5cGUuU0VBUkNIX1JFU1VMVFN9LF9jb21wdXRlSXNJbnZhbGlkU2VhcmNoUmVzdWx0cyhhKXtyZXR1cm4gYS50eXBlPT09UWsuQ2F0ZWdvcnlUeXBlLlNFQVJDSF9SRVNVTFRTJiYhYS52YWxpZFJlZ2V4fSxfY29tcHV0ZUlzVW5pdmVyc2FsU2VhcmNoUXVlcnkoYSl7cmV0dXJuIGEudHlwZT09PVFrLkNhdGVnb3J5VHlwZS5TRUFSQ0hfUkVTVUxUUyYmYS51bml2ZXJzYWxSZWdleH0sX2lzQ29tcG9zaXRlU2VhcmNoKCl7Y29uc3Qge3R5cGU6YSwKY29tcG9zaXRlU2VhcmNoOmN9PXRoaXMuY2F0ZWdvcnkubWV0YWRhdGE7cmV0dXJuIGMmJmE9PT1Ray5DYXRlZ29yeVR5cGUuU0VBUkNIX1JFU1VMVFN9LHJlYWR5KCl7dGhpcy5fc2V0T3BlbmVkKG51bGw9PXRoaXMuaW5pdGlhbE9wZW5lZD8hMDp0aGlzLmluaXRpYWxPcGVuZWQpO3RoaXMuX2xpbWl0TGlzdGVuZXI9KCk9Pnt0aGlzLnNldCgiX2xpbWl0IixZbC5nZXRMaW1pdCgpKX07WWwuYWRkTGltaXRMaXN0ZW5lcih0aGlzLl9saW1pdExpc3RlbmVyKTt0aGlzLl9saW1pdExpc3RlbmVyKCl9LGRldGFjaGVkKCl7WWwucmVtb3ZlTGltaXRMaXN0ZW5lcih0aGlzLl9saW1pdExpc3RlbmVyKX0sX3VwZGF0ZVJlbmRlcmVkSXRlbXMoYSxjLGQsZixnLGwpe2EmJihhPU1hdGguZmxvb3IoZi9kKSxjPXRoaXMuY2F0ZWdvcnkuaXRlbXN8fFtdLHRoaXMudXBkYXRlRG9tKGw/YzpjLnNsaWNlKGEqZCwoYSsxKSpkKSx0aGlzLmdldENhdGVnb3J5SXRlbUtleSkpfSxfbGltaXRDaGFuZ2VkKGEpe3RoaXMuc2V0Q2FjaGVTaXplKDIqCmEpfSxfZ2V0Q2F0ZWdvcnlJdGVtS2V5Q2hhbmdlZCgpe3RoaXMuc2V0R2V0SXRlbUtleSh0aGlzLmdldENhdGVnb3J5SXRlbUtleSl9LF9jb21wdXRlQ3VycmVudFBhZ2UoYSxjKXtyZXR1cm4gTWF0aC5mbG9vcihjL2EpKzF9LF9jb21wdXRlUGFnZUNvdW50KGEsYyl7cmV0dXJuIHRoaXMuY2F0ZWdvcnk/TWF0aC5jZWlsKHRoaXMuY2F0ZWdvcnkuaXRlbXMubGVuZ3RoL2MpOjB9LF9jb21wdXRlTXVsdGlwbGVQYWdlc0V4aXN0KGEsYyl7cmV0dXJuIWMmJjE8YX0sX2NvbXB1dGVIYXNQcmV2aW91c1BhZ2UoYSl7cmV0dXJuIDE8YX0sX2NvbXB1dGVIYXNOZXh0UGFnZShhLGMpe3JldHVybiBhPGN9LF9jb21wdXRlSW5wdXRXaWR0aChhKXtyZXR1cm5gY2FsYygke2EudG9TdHJpbmcoKS5sZW5ndGh9ZW0gKyAyMHB4KWB9LF9zZXRBY3RpdmVJbmRleChhKXtjb25zdCBjPSh0aGlzLmNhdGVnb3J5Lml0ZW1zfHxbXSkubGVuZ3RoLTE7YT5jJiYoYT1jKTswPmEmJihhPTApO3RoaXMuc2V0KCJfYWN0aXZlSW5kZXgiLAphKX0sX2NsYW1wQWN0aXZlSW5kZXgoKXt0aGlzLl9zZXRBY3RpdmVJbmRleCh0aGlzLl9hY3RpdmVJbmRleCl9LF9wZXJmb3JtUHJldmlvdXNQYWdlKCl7dGhpcy5fc2V0QWN0aXZlSW5kZXgodGhpcy5fYWN0aXZlSW5kZXgtdGhpcy5fbGltaXQpfSxfcGVyZm9ybU5leHRQYWdlKCl7dGhpcy5fc2V0QWN0aXZlSW5kZXgodGhpcy5fYWN0aXZlSW5kZXgrdGhpcy5fbGltaXQpfSxfY29tcHV0ZVBhZ2VJbnB1dFZhbHVlKGEsYyxkKXtyZXR1cm4gYT9jOmQudG9TdHJpbmcoKX0sX2hhbmRsZVBhZ2VJbnB1dEV2ZW50KGEpe3RoaXMuc2V0KCJfcGFnZUlucHV0UmF3VmFsdWUiLGEudGFyZ2V0LnZhbHVlKTthPWEudGFyZ2V0LnZhbHVlQXNOdW1iZXI7aXNOYU4oYSl8fHRoaXMuX3NldEFjdGl2ZUluZGV4KHRoaXMuX2xpbWl0KihNYXRoLm1heCgxLE1hdGgubWluKGEsdGhpcy5fcGFnZUNvdW50KSktMSkpfSxfaGFuZGxlUGFnZUNoYW5nZUV2ZW50KCl7dGhpcy5zZXQoIl9wYWdlSW5wdXRSYXdWYWx1ZSIsCnRoaXMuX2N1cnJlbnRQYWdlLnRvU3RyaW5nKCkpfSxfaGFuZGxlUGFnZUZvY3VzRXZlbnQoKXt0aGlzLnNldCgiX3BhZ2VJbnB1dFJhd1ZhbHVlIix0aGlzLl9wYWdlSW5wdXRWYWx1ZSk7dGhpcy5zZXQoIl9wYWdlSW5wdXRGb2N1c2VkIiwhMCl9LF9oYW5kbGVQYWdlQmx1ckV2ZW50KCl7dGhpcy5zZXQoIl9wYWdlSW5wdXRGb2N1c2VkIiwhMSl9LF91cGRhdGVQYWdlSW5wdXRWYWx1ZShhKXtjb25zdCBjPXRoaXMuJCQoIiNwYWdlLWlucHV0IGlucHV0Iik7YyYmKGMudmFsdWU9YSl9fSk7Cjwvc2NyaXB0Pgo8L2RvbS1tb2R1bGU+CgoKCgoKCgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vcGFwZXItZGlhbG9nLWJlaGF2aW9yL3BhcGVyLWRpYWxvZy1iZWhhdmlvci5odG1sLmpzCihmdW5jdGlvbigpe1BvbHltZXIuUGFwZXJEaWFsb2dCZWhhdmlvckltcGw9e2hvc3RBdHRyaWJ1dGVzOntyb2xlOiJkaWFsb2ciLHRhYmluZGV4OiItMSJ9LHByb3BlcnRpZXM6e21vZGFsOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LF9fcmVhZGllZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfX0sb2JzZXJ2ZXJzOlsiX21vZGFsQ2hhbmdlZChtb2RhbCwgX19yZWFkaWVkKSJdLGxpc3RlbmVyczp7dGFwOiJfb25EaWFsb2dDbGljayJ9LHJlYWR5OmZ1bmN0aW9uKCl7dGhpcy5fX3ByZXZOb0NhbmNlbE9uT3V0c2lkZUNsaWNrPXRoaXMubm9DYW5jZWxPbk91dHNpZGVDbGljazt0aGlzLl9fcHJldk5vQ2FuY2VsT25Fc2NLZXk9dGhpcy5ub0NhbmNlbE9uRXNjS2V5O3RoaXMuX19wcmV2V2l0aEJhY2tkcm9wPXRoaXMud2l0aEJhY2tkcm9wO3RoaXMuX19yZWFkaWVkPSEwfSxfbW9kYWxDaGFuZ2VkOmZ1bmN0aW9uKGEsYyl7YyYmKGE/KHRoaXMuX19wcmV2Tm9DYW5jZWxPbk91dHNpZGVDbGljaz0KdGhpcy5ub0NhbmNlbE9uT3V0c2lkZUNsaWNrLHRoaXMuX19wcmV2Tm9DYW5jZWxPbkVzY0tleT10aGlzLm5vQ2FuY2VsT25Fc2NLZXksdGhpcy5fX3ByZXZXaXRoQmFja2Ryb3A9dGhpcy53aXRoQmFja2Ryb3AsdGhpcy53aXRoQmFja2Ryb3A9dGhpcy5ub0NhbmNlbE9uRXNjS2V5PXRoaXMubm9DYW5jZWxPbk91dHNpZGVDbGljaz0hMCk6KHRoaXMubm9DYW5jZWxPbk91dHNpZGVDbGljaz10aGlzLm5vQ2FuY2VsT25PdXRzaWRlQ2xpY2smJnRoaXMuX19wcmV2Tm9DYW5jZWxPbk91dHNpZGVDbGljayx0aGlzLm5vQ2FuY2VsT25Fc2NLZXk9dGhpcy5ub0NhbmNlbE9uRXNjS2V5JiZ0aGlzLl9fcHJldk5vQ2FuY2VsT25Fc2NLZXksdGhpcy53aXRoQmFja2Ryb3A9dGhpcy53aXRoQmFja2Ryb3AmJnRoaXMuX19wcmV2V2l0aEJhY2tkcm9wKSl9LF91cGRhdGVDbG9zaW5nUmVhc29uQ29uZmlybWVkOmZ1bmN0aW9uKGEpe3RoaXMuY2xvc2luZ1JlYXNvbj10aGlzLmNsb3NpbmdSZWFzb258fAp7fTt0aGlzLmNsb3NpbmdSZWFzb24uY29uZmlybWVkPWF9LF9vbkRpYWxvZ0NsaWNrOmZ1bmN0aW9uKGEpe2Zvcih2YXIgYz1Qb2x5bWVyLmRvbShhKS5wYXRoLGQ9MCxmPWMuaW5kZXhPZih0aGlzKTtkPGY7ZCsrKXt2YXIgZz1jW2RdO2lmKGcuaGFzQXR0cmlidXRlJiYoZy5oYXNBdHRyaWJ1dGUoImRpYWxvZy1kaXNtaXNzIil8fGcuaGFzQXR0cmlidXRlKCJkaWFsb2ctY29uZmlybSIpKSl7dGhpcy5fdXBkYXRlQ2xvc2luZ1JlYXNvbkNvbmZpcm1lZChnLmhhc0F0dHJpYnV0ZSgiZGlhbG9nLWNvbmZpcm0iKSk7dGhpcy5jbG9zZSgpO2Euc3RvcFByb3BhZ2F0aW9uKCk7YnJlYWt9fX19O1BvbHltZXIuUGFwZXJEaWFsb2dCZWhhdmlvcj1bUG9seW1lci5Jcm9uT3ZlcmxheUJlaGF2aW9yLFBvbHltZXIuUGFwZXJEaWFsb2dCZWhhdmlvckltcGxdfSkoKTsKPC9zY3JpcHQ+CgoKCgoKCgoKCjxkb20tbW9kdWxlIGlkPSJwYXBlci1kaWFsb2ctc2hhcmVkLXN0eWxlcyI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgbWFyZ2luOiAyNHB4IDQwcHg7CgogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXBhcGVyLWRpYWxvZy1iYWNrZ3JvdW5kLWNvbG9yLCB2YXIoLS1wcmltYXJ5LWJhY2tncm91bmQtY29sb3IpKTsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItZGlhbG9nLWNvbG9yLCB2YXIoLS1wcmltYXJ5LXRleHQtY29sb3IpKTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1ib2R5MTsKICAgICAgICBAYXBwbHkgLS1zaGFkb3ctZWxldmF0aW9uLTE2ZHA7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZGlhbG9nOwogICAgICB9CgogICAgICA6aG9zdCA+IDo6c2xvdHRlZCgqKSB7CiAgICAgICAgbWFyZ2luLXRvcDogMjBweDsKICAgICAgICBwYWRkaW5nOiAwIDI0cHg7CiAgICAgIH0KCiAgICAgIDpob3N0ID4gOjpzbG90dGVkKC5uby1wYWRkaW5nKSB7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgfQoKICAgICAgCiAgICAgIDpob3N0ID4gOjpzbG90dGVkKCo6Zmlyc3QtY2hpbGQpIHsKICAgICAgICBtYXJnaW4tdG9wOiAyNHB4OwogICAgICB9CgogICAgICA6aG9zdCA+IDo6c2xvdHRlZCgqOmxhc3QtY2hpbGQpIHsKICAgICAgICBtYXJnaW4tYm90dG9tOiAyNHB4OwogICAgICB9CgogICAgICAvKiBJbiAxLngsIHRoaXMgc2VsZWN0b3Igd2FzIGA6aG9zdCA+IDo6Y29udGVudCBoMmAuIEluIDIueCA8c2xvdD4gYWxsb3dzCiAgICAgIHRvIHNlbGVjdCBkaXJlY3QgY2hpbGRyZW4gb25seSwgd2hpY2ggaW5jcmVhc2VzIHRoZSB3ZWlnaHQgb2YgdGhpcwogICAgICBzZWxlY3Rvciwgc28gd2UgaGF2ZSB0byByZS1kZWZpbmUgZmlyc3QtY2hpbGQvbGFzdC1jaGlsZCBtYXJnaW5zIGJlbG93LiAqLwogICAgICA6aG9zdCA+IDo6c2xvdHRlZChoMikgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBtYXJnaW46IDA7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtdGl0bGU7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZGlhbG9nLXRpdGxlOwogICAgICB9CgogICAgICAvKiBBcHBseSBtaXhpbiBhZ2FpbiwgaW4gY2FzZSBpdCBzZXRzIG1hcmdpbi10b3AuICovCiAgICAgIDpob3N0ID4gOjpzbG90dGVkKGgyOmZpcnN0LWNoaWxkKSB7CiAgICAgICAgbWFyZ2luLXRvcDogMjRweDsKICAgICAgICBAYXBwbHkgLS1wYXBlci1kaWFsb2ctdGl0bGU7CiAgICAgIH0KCiAgICAgIC8qIEFwcGx5IG1peGluIGFnYWluLCBpbiBjYXNlIGl0IHNldHMgbWFyZ2luLWJvdHRvbS4gKi8KICAgICAgOmhvc3QgPiA6OnNsb3R0ZWQoaDI6bGFzdC1jaGlsZCkgewogICAgICAgIG1hcmdpbi1ib3R0b206IDI0cHg7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZGlhbG9nLXRpdGxlOwogICAgICB9CgogICAgICA6aG9zdCA+IDo6c2xvdHRlZCgucGFwZXItZGlhbG9nLWJ1dHRvbnMpLAogICAgICA6aG9zdCA+IDo6c2xvdHRlZCguYnV0dG9ucykgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBwYWRkaW5nOiA4cHggOHB4IDhweCAyNHB4OwogICAgICAgIG1hcmdpbjogMDsKCiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWRpYWxvZy1idXR0b24tY29sb3IsIHZhcigtLXByaW1hcnktY29sb3IpKTsKCiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWhvcml6b250YWw7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWVuZC1qdXN0aWZpZWQ7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPgoKCgo8ZG9tLW1vZHVsZSBpZD0icGFwZXItZGlhbG9nIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGUgaW5jbHVkZT0icGFwZXItZGlhbG9nLXNoYXJlZC1zdHlsZXMiPjwvc3R5bGU+CiAgICA8c2xvdD48L3Nsb3Q+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPgoKPHNjcmlwdD4vL35+V0VCUEFUSH5+L3BhcGVyLWRpYWxvZy9wYXBlci1kaWFsb2cuaHRtbC5qcwpQb2x5bWVyKHtpczoicGFwZXItZGlhbG9nIixiZWhhdmlvcnM6W1BvbHltZXIuUGFwZXJEaWFsb2dCZWhhdmlvcixQb2x5bWVyLk5lb25BbmltYXRpb25SdW5uZXJCZWhhdmlvcl0sbGlzdGVuZXJzOnsibmVvbi1hbmltYXRpb24tZmluaXNoIjoiX29uTmVvbkFuaW1hdGlvbkZpbmlzaCJ9LF9yZW5kZXJPcGVuZWQ6ZnVuY3Rpb24oKXt0aGlzLmNhbmNlbEFuaW1hdGlvbigpO3RoaXMucGxheUFuaW1hdGlvbigiZW50cnkiKX0sX3JlbmRlckNsb3NlZDpmdW5jdGlvbigpe3RoaXMuY2FuY2VsQW5pbWF0aW9uKCk7dGhpcy5wbGF5QW5pbWF0aW9uKCJleGl0Iil9LF9vbk5lb25BbmltYXRpb25GaW5pc2g6ZnVuY3Rpb24oKXt0aGlzLm9wZW5lZD90aGlzLl9maW5pc2hSZW5kZXJPcGVuZWQoKTp0aGlzLl9maW5pc2hSZW5kZXJDbG9zZWQoKX19KTsKPC9zY3JpcHQ+CgoKCgoKCgoKCjxkb20tbW9kdWxlIGlkPSJ0Zi1jb2xvci1zY2FsZSI+CiAgPHNjcmlwdD4vL35+V0VCUEFUSH5+L3RmLWNvbG9yLXNjYWxlL3BhbGV0dGVzLmpzCnZhciBabDsKKGZ1bmN0aW9uKGEpe2EucGFsZXR0ZXM9e2dvb2dsZVN0YW5kYXJkOiIjZGI0NDM3ICNmZjcwNDMgI2Y0YjQwMCAjMGY5ZDU4ICMwMDc5NmIgIzAwYWNjMSAjNDI4NWY0ICM1YzZiYzAgI2FiNDdiYyIuc3BsaXQoIiAiKSxnb29nbGVDb29sOiIjOWU5ZDI0ICMwZjlkNTggIzAwNzk2YiAjMDBhY2MxICM0Mjg1ZjQgIzVjNmJjMCAjNjA3ZDhiIi5zcGxpdCgiICIpLGdvb2dsZVdhcm06IiM3OTU1NDggI2FiNDdiYyAjZjA2MjkyICNjMjE4NWIgI2RiNDQzNyAjZmY3MDQzICNmNGI0MDAiLnNwbGl0KCIgIiksZ29vZ2xlQ29sb3JCbGluZEFzc2lzdDoiI2ZmNzA0MyAjMDBBQ0MxICNBQjQ3QkMgIzJBNTZDNiAjMGI4MDQzICNGN0NCNEQgI2MwY2EzMyAjNWUzNWIxICNBNTI3MTQiLnNwbGl0KCIgIiksdGVuc29yYm9hcmRDb2xvckJsaW5kQXNzaXN0OiIjZmY3MDQzICMwMDc3YmIgI2NjMzMxMSAjMzNiYmVlICNlZTMzNzcgIzAwOTk4OCAjYmJiYmJiIi5zcGxpdCgiICIpLGNvbG9yQmxpbmRBc3Npc3QxOiIjNDQ3N2FhICM0NGFhYWEgI2FhYWE0NCAjYWE3NzQ0ICNhYTQ0NTUgI2FhNDQ4OCIuc3BsaXQoIiAiKSxjb2xvckJsaW5kQXNzaXN0MjoiIzg4Y2NlZSAjNDRhYTk5ICMxMTc3MzMgIzk5OTkzMyAjZGRjYzc3ICNjYzY2NzcgIzg4MjI1NSAjYWE0NDk5Ii5zcGxpdCgiICIpLApjb2xvckJsaW5kQXNzaXN0MzoiIzMzMjI4OCAjNjY5OWNjICM4OGNjZWUgIzQ0YWE5OSAjMTE3NzMzICM5OTk5MzMgI2RkY2M3NyAjY2M2Njc3ICNhYTQ0NjYgIzg4MjI1NSAjNjYxMTAwICNhYTQ0OTkiLnNwbGl0KCIgIiksY29sb3JCbGluZEFzc2lzdDQ6IiM0NDc3YWEgIzY2Y2NlZSAjMjI4ODMzICNjY2JiNDQgI2VlNjY3NyAjYWEzMzc3ICNiYmJiYmIiLnNwbGl0KCIgIiksY29sb3JCbGluZEFzc2lzdDU6IiNGRjZEQjYgIzkyMDAwMCAjOTI0OTAwICNEQkQxMDAgIzI0RkYyNCAjMDA2RERCICM0OTAwOTIiLnNwbGl0KCIgIiksbWxkYXNoOiIjRTQ3RUFEICNGNDY0MEQgI0ZBQTMwMCAjRjVFNjM2ICMwMEEwNzcgIzAwNzdCOCAjMDBCN0VEIi5zcGxpdCgiICIpfTthLnN0YW5kYXJkPWEucGFsZXR0ZXMudGVuc29yYm9hcmRDb2xvckJsaW5kQXNzaXN0fSkoWmx8fChabD17fSkpOwo8L3NjcmlwdD4KICA8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdGYtY29sb3Itc2NhbGUvY29sb3JTY2FsZS5qcwooZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYyhmLGcpe2Z1bmN0aW9uIGwoKXtrLnNldERvbWFpbihnKCkpfWNvbnN0IGs9bmV3IGQ7Zi5hZGRMaXN0ZW5lcihsKTtsKCk7cmV0dXJuIG09PmsuZ2V0Q29sb3IobSl9Y2xhc3MgZHtjb25zdHJ1Y3RvcihmPWEuc3RhbmRhcmQpe3RoaXMucGFsZXR0ZT1mO3RoaXMuaWRlbnRpZmllcnM9ZDMubWFwKCl9c2V0RG9tYWluKGYpe3RoaXMuaWRlbnRpZmllcnM9ZDMubWFwKCk7Zi5mb3JFYWNoKChnLGwpPT57dGhpcy5pZGVudGlmaWVycy5zZXQoZyx0aGlzLnBhbGV0dGVbbCV0aGlzLnBhbGV0dGUubGVuZ3RoXSl9KX1nZXRDb2xvcihmKXtpZighdGhpcy5pZGVudGlmaWVycy5oYXMoZikpdGhyb3cgRXJyb3IoYFN0cmluZyAke2Z9IHdhcyBub3QgaW4gdGhlIGRvbWFpbi5gKTtyZXR1cm4gdGhpcy5pZGVudGlmaWVycy5nZXQoZil9fWEuQ29sb3JTY2FsZT1kO2EucnVuc0NvbG9yU2NhbGU9YyhQay5ydW5zU3RvcmUsKCk9PlBrLnJ1bnNTdG9yZS5nZXRSdW5zKCkpOwphLmV4cGVyaW1lbnRzQ29sb3JTY2FsZT1jKFBrLmV4cGVyaW1lbnRzU3RvcmUsKCk9PlBrLmV4cGVyaW1lbnRzU3RvcmUuZ2V0RXhwZXJpbWVudHMoKS5tYXAoKHtuYW1lOmZ9KT0+ZikpfSkoWmx8fChabD17fSkpOwo8L3NjcmlwdD4KPC9kb20tbW9kdWxlPgoKCgoKPGlyb24taWNvbnNldC1zdmcgbmFtZT0iaWNvbnMiIHNpemU9IjI0Ij4KPHN2Zz48ZGVmcz4KPGcgaWQ9IjNkLXJvdGF0aW9uIj48cGF0aCBkPSJNNy41MiAyMS40OEM0LjI1IDE5Ljk0IDEuOTEgMTYuNzYgMS41NSAxM0guMDVDLjU2IDE5LjE2IDUuNzEgMjQgMTIgMjRsLjY2LS4wMy0zLjgxLTMuODEtMS4zMyAxLjMyem0uODktNi41MmMtLjE5IDAtLjM3LS4wMy0uNTItLjA4LS4xNi0uMDYtLjI5LS4xMy0uNC0uMjQtLjExLS4xLS4yLS4yMi0uMjYtLjM3LS4wNi0uMTQtLjA5LS4zLS4wOS0uNDdoLTEuM2MwIC4zNi4wNy42OC4yMS45NS4xNC4yNy4zMy41LjU2LjY5LjI0LjE4LjUxLjMyLjgyLjQxLjMuMS42Mi4xNS45Ni4xNS4zNyAwIC43Mi0uMDUgMS4wMy0uMTUuMzItLjEuNi0uMjUuODMtLjQ0cy40Mi0uNDMuNTUtLjcyYy4xMy0uMjkuMi0uNjEuMi0uOTcgMC0uMTktLjAyLS4zOC0uMDctLjU2LS4wNS0uMTgtLjEyLS4zNS0uMjMtLjUxLS4xLS4xNi0uMjQtLjMtLjQtLjQzLS4xNy0uMTMtLjM3LS4yMy0uNjEtLjMxLjItLjA5LjM3LS4yLjUyLS4zMy4xNS0uMTMuMjctLjI3LjM3LS40Mi4xLS4xNS4xNy0uMy4yMi0uNDYuMDUtLjE2LjA3LS4zMi4wNy0uNDggMC0uMzYtLjA2LS42OC0uMTgtLjk2LS4xMi0uMjgtLjI5LS41MS0uNTEtLjY5LS4yLS4xOS0uNDctLjMzLS43Ny0uNDNDOS4xIDguMDUgOC43NiA4IDguMzkgOGMtLjM2IDAtLjY5LjA1LTEgLjE2LS4zLjExLS41Ny4yNi0uNzkuNDUtLjIxLjE5LS4zOC40MS0uNTEuNjctLjEyLjI2LS4xOC41NC0uMTguODVoMS4zYzAtLjE3LjAzLS4zMi4wOS0uNDVzLjE0LS4yNS4yNS0uMzRjLjExLS4wOS4yMy0uMTcuMzgtLjIyLjE1LS4wNS4zLS4wOC40OC0uMDguNCAwIC43LjEuODkuMzEuMTkuMi4yOS40OS4yOS44NiAwIC4xOC0uMDMuMzQtLjA4LjQ5LS4wNS4xNS0uMTQuMjctLjI1LjM3LS4xMS4xLS4yNS4xOC0uNDEuMjQtLjE2LjA2LS4zNi4wOS0uNTguMDlINy41djEuMDNoLjc3Yy4yMiAwIC40Mi4wMi42LjA3cy4zMy4xMy40NS4yM2MuMTIuMTEuMjIuMjQuMjkuNC4wNy4xNi4xLjM1LjEuNTcgMCAuNDEtLjEyLjcyLS4zNS45My0uMjMuMjMtLjU1LjMzLS45NS4zM3ptOC41NS01LjkyYy0uMzItLjMzLS43LS41OS0xLjE0LS43Ny0uNDMtLjE4LS45Mi0uMjctMS40Ni0uMjdIMTJ2OGgyLjNjLjU1IDAgMS4wNi0uMDkgMS41MS0uMjcuNDUtLjE4Ljg0LS40MyAxLjE2LS43Ni4zMi0uMzMuNTctLjczLjc0LTEuMTkuMTctLjQ3LjI2LS45OS4yNi0xLjU3di0uNGMwLS41OC0uMDktMS4xLS4yNi0xLjU3LS4xOC0uNDctLjQzLS44Ny0uNzUtMS4yem0tLjM5IDMuMTZjMCAuNDItLjA1Ljc5LS4xNCAxLjEzLS4xLjMzLS4yNC42Mi0uNDMuODUtLjE5LjIzLS40My40MS0uNzEuNTMtLjI5LjEyLS42Mi4xOC0uOTkuMThoLS45MVY5LjEyaC45N2MuNzIgMCAxLjI3LjIzIDEuNjQuNjkuMzguNDYuNTcgMS4xMi41NyAxLjk5di40ek0xMiAwbC0uNjYuMDMgMy44MSAzLjgxIDEuMzMtMS4zM2MzLjI3IDEuNTUgNS42MSA0LjcyIDUuOTYgOC40OGgxLjVDMjMuNDQgNC44NCAxOC4yOSAwIDEyIDB6IiAvPjwvZz4KPGcgaWQ9ImFjY2Vzc2liaWxpdHkiPjxwYXRoIGQ9Ik0xMiAyYzEuMSAwIDIgLjkgMiAycy0uOSAyLTIgMi0yLS45LTItMiAuOS0yIDItMnptOSA3aC02djEzaC0ydi02aC0ydjZIOVY5SDNWN2gxOHYyeiIgLz48L2c+CjxnIGlkPSJhY2Nlc3NpYmxlIj48Y2lyY2xlIGN4PSIxMiIgY3k9IjQiIHI9IjIiIC8+PHBhdGggZD0iTTE5IDEzdi0yYy0xLjU0LjAyLTMuMDktLjc1LTQuMDctMS44M2wtMS4yOS0xLjQzYy0uMTctLjE5LS4zOC0uMzQtLjYxLS40NS0uMDEgMC0uMDEtLjAxLS4wMi0uMDFIMTNjLS4zNS0uMi0uNzUtLjMtMS4xOS0uMjZDMTAuNzYgNy4xMSAxMCA4LjA0IDEwIDkuMDlWMTVjMCAxLjEuOSAyIDIgMmg1djVoMnYtNS41YzAtMS4xLS45LTItMi0yaC0zdi0zLjQ1YzEuMjkgMS4wNyAzLjI1IDEuOTQgNSAxLjk1em0tNi4xNyA1Yy0uNDEgMS4xNi0xLjUyIDItMi44MyAyLTEuNjYgMC0zLTEuMzQtMy0zIDAtMS4zMS44NC0yLjQxIDItMi44M1YxMi4xYy0yLjI4LjQ2LTQgMi40OC00IDQuOSAwIDIuNzYgMi4yNCA1IDUgNSAyLjQyIDAgNC40NC0xLjcyIDQuOS00aC0yLjA3eiIgLz48L2c+CjxnIGlkPSJhY2NvdW50LWJhbGFuY2UiPjxwYXRoIGQ9Ik00IDEwdjdoM3YtN0g0em02IDB2N2gzdi03aC0zek0yIDIyaDE5di0zSDJ2M3ptMTQtMTJ2N2gzdi03aC0zem0tNC41LTlMMiA2djJoMTlWNmwtOS41LTV6IiAvPjwvZz4KPGcgaWQ9ImFjY291bnQtYmFsYW5jZS13YWxsZXQiPjxwYXRoIGQ9Ik0yMSAxOHYxYzAgMS4xLS45IDItMiAySDVjLTEuMTEgMC0yLS45LTItMlY1YzAtMS4xLjg5LTIgMi0yaDE0YzEuMSAwIDIgLjkgMiAydjFoLTljLTEuMTEgMC0yIC45LTIgMnY4YzAgMS4xLjg5IDIgMiAyaDl6bS05LTJoMTBWOEgxMnY4em00LTIuNWMtLjgzIDAtMS41LS42Ny0xLjUtMS41cy42Ny0xLjUgMS41LTEuNSAxLjUuNjcgMS41IDEuNS0uNjcgMS41LTEuNSAxLjV6IiAvPjwvZz4KPGcgaWQ9ImFjY291bnQtYm94Ij48cGF0aCBkPSJNMyA1djE0YzAgMS4xLjg5IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJINWMtMS4xMSAwLTIgLjktMiAyem0xMiA0YzAgMS42Ni0xLjM0IDMtMyAzcy0zLTEuMzQtMy0zIDEuMzQtMyAzLTMgMyAxLjM0IDMgM3ptLTkgOGMwLTIgNC0zLjEgNi0zLjFzNiAxLjEgNiAzLjF2MUg2di0xeiIgLz48L2c+CjxnIGlkPSJhY2NvdW50LWNpcmNsZSI+PHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTAgM2MxLjY2IDAgMyAxLjM0IDMgM3MtMS4zNCAzLTMgMy0zLTEuMzQtMy0zIDEuMzQtMyAzLTN6bTAgMTQuMmMtMi41IDAtNC43MS0xLjI4LTYtMy4yMi4wMy0xLjk5IDQtMy4wOCA2LTMuMDggMS45OSAwIDUuOTcgMS4wOSA2IDMuMDgtMS4yOSAxLjk0LTMuNSAzLjIyLTYgMy4yMnoiIC8+PC9nPgo8ZyBpZD0iYWRkIj48cGF0aCBkPSJNMTkgMTNoLTZ2NmgtMnYtNkg1di0yaDZWNWgydjZoNnYyeiIgLz48L2c+CjxnIGlkPSJhZGQtYWxlcnQiPjxwYXRoIGQ9Ik0xMC4wMSAyMS4wMWMwIDEuMS44OSAxLjk5IDEuOTkgMS45OXMxLjk5LS44OSAxLjk5LTEuOTloLTMuOTh6bTguODctNC4xOVYxMWMwLTMuMjUtMi4yNS01Ljk3LTUuMjktNi42OXYtLjcyQzEzLjU5IDIuNzEgMTIuODggMiAxMiAycy0xLjU5LjcxLTEuNTkgMS41OXYuNzJDNy4zNyA1LjAzIDUuMTIgNy43NSA1LjEyIDExdjUuODJMMyAxOC45NFYyMGgxOHYtMS4wNmwtMi4xMi0yLjEyek0xNiAxMy4wMWgtM3YzaC0ydi0zSDhWMTFoM1Y4aDJ2M2gzdjIuMDF6IiAvPjwvZz4KPGcgaWQ9ImFkZC1ib3giPjxwYXRoIGQ9Ik0xOSAzSDVjLTEuMTEgMC0yIC45LTIgMnYxNGMwIDEuMS44OSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tMiAxMGgtNHY0aC0ydi00SDd2LTJoNFY3aDJ2NGg0djJ6IiAvPjwvZz4KPGcgaWQ9ImFkZC1jaXJjbGUiPjxwYXRoIGQ9Ik0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem01IDExaC00djRoLTJ2LTRIN3YtMmg0VjdoMnY0aDR2MnoiIC8+PC9nPgo8ZyBpZD0iYWRkLWNpcmNsZS1vdXRsaW5lIj48cGF0aCBkPSJNMTMgN2gtMnY0SDd2Mmg0djRoMnYtNGg0di0yaC00Vjd6bS0xLTVDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTAgMThjLTQuNDEgMC04LTMuNTktOC04czMuNTktOCA4LTggOCAzLjU5IDggOC0zLjU5IDgtOCA4eiIgLz48L2c+CjxnIGlkPSJhZGQtc2hvcHBpbmctY2FydCI+PHBhdGggZD0iTTExIDloMlY2aDNWNGgtM1YxaC0ydjNIOHYyaDN2M3ptLTQgOWMtMS4xIDAtMS45OS45LTEuOTkgMlM1LjkgMjIgNyAyMnMyLS45IDItMi0uOS0yLTItMnptMTAgMGMtMS4xIDAtMS45OS45LTEuOTkgMnMuODkgMiAxLjk5IDIgMi0uOSAyLTItLjktMi0yLTJ6bS05LjgzLTMuMjVsLjAzLS4xMi45LTEuNjNoNy40NWMuNzUgMCAxLjQxLS40MSAxLjc1LTEuMDNsMy44Ni03LjAxTDE5LjQyIDRoLS4wMWwtMS4xIDItMi43NiA1SDguNTNsLS4xMy0uMjdMNi4xNiA2bC0uOTUtMi0uOTQtMkgxdjJoMmwzLjYgNy41OS0xLjM1IDIuNDVjLS4xNi4yOC0uMjUuNjEtLjI1Ljk2IDAgMS4xLjkgMiAyIDJoMTJ2LTJINy40MmMtLjEzIDAtLjI1LS4xMS0uMjUtLjI1eiIgLz48L2c+CjxnIGlkPSJhbGFybSI+PHBhdGggZD0iTTIyIDUuNzJsLTQuNi0zLjg2LTEuMjkgMS41MyA0LjYgMy44NkwyMiA1Ljcyek03Ljg4IDMuMzlMNi42IDEuODYgMiA1LjcxbDEuMjkgMS41MyA0LjU5LTMuODV6TTEyLjUgOEgxMXY2bDQuNzUgMi44NS43NS0xLjIzLTQtMi4zN1Y4ek0xMiA0Yy00Ljk3IDAtOSA0LjAzLTkgOXM0LjAyIDkgOSA5YzQuOTcgMCA5LTQuMDMgOS05cy00LjAzLTktOS05em0wIDE2Yy0zLjg3IDAtNy0zLjEzLTctN3MzLjEzLTcgNy03IDcgMy4xMyA3IDctMy4xMyA3LTcgN3oiIC8+PC9nPgo8ZyBpZD0iYWxhcm0tYWRkIj48cGF0aCBkPSJNNy44OCAzLjM5TDYuNiAxLjg2IDIgNS43MWwxLjI5IDEuNTMgNC41OS0zLjg1ek0yMiA1LjcybC00LjYtMy44Ni0xLjI5IDEuNTMgNC42IDMuODZMMjIgNS43MnpNMTIgNGMtNC45NyAwLTkgNC4wMy05IDlzNC4wMiA5IDkgOWM0Ljk3IDAgOS00LjAzIDktOXMtNC4wMy05LTktOXptMCAxNmMtMy44NyAwLTctMy4xMy03LTdzMy4xMy03IDctNyA3IDMuMTMgNyA3LTMuMTMgNy03IDd6bTEtMTFoLTJ2M0g4djJoM3YzaDJ2LTNoM3YtMmgtM1Y5eiIgLz48L2c+CjxnIGlkPSJhbGFybS1vZmYiPjxwYXRoIGQ9Ik0xMiA2YzMuODcgMCA3IDMuMTMgNyA3IDAgLjg0LS4xNiAxLjY1LS40MyAyLjRsMS41MiAxLjUyYy41OC0xLjE5LjkxLTIuNTEuOTEtMy45MiAwLTQuOTctNC4wMy05LTktOS0xLjQxIDAtMi43My4zMy0zLjkyLjkxTDkuNiA2LjQzQzEwLjM1IDYuMTYgMTEuMTYgNiAxMiA2em0xMC0uMjhsLTQuNi0zLjg2LTEuMjkgMS41MyA0LjYgMy44NkwyMiA1Ljcyek0yLjkyIDIuMjlMMS42NSAzLjU3IDIuOTggNC45bC0xLjExLjkzIDEuNDIgMS40MiAxLjExLS45NC44LjhDMy44MyA4LjY5IDMgMTAuNzUgMyAxM2MwIDQuOTcgNC4wMiA5IDkgOSAyLjI1IDAgNC4zMS0uODMgNS44OS0yLjJsMi4yIDIuMiAxLjI3LTEuMjdMMy44OSAzLjI3bC0uOTctLjk4em0xMy41NSAxNi4xQzE1LjI2IDE5LjM5IDEzLjcgMjAgMTIgMjBjLTMuODcgMC03LTMuMTMtNy03IDAtMS43LjYxLTMuMjYgMS42MS00LjQ3bDkuODYgOS44NnpNOC4wMiAzLjI4TDYuNiAxLjg2bC0uODYuNzEgMS40MiAxLjQyLjg2LS43MXoiIC8+PC9nPgo8ZyBpZD0iYWxhcm0tb24iPjxwYXRoIGQ9Ik0yMiA1LjcybC00LjYtMy44Ni0xLjI5IDEuNTMgNC42IDMuODZMMjIgNS43MnpNNy44OCAzLjM5TDYuNiAxLjg2IDIgNS43MWwxLjI5IDEuNTMgNC41OS0zLjg1ek0xMiA0Yy00Ljk3IDAtOSA0LjAzLTkgOXM0LjAyIDkgOSA5YzQuOTcgMCA5LTQuMDMgOS05cy00LjAzLTktOS05em0wIDE2Yy0zLjg3IDAtNy0zLjEzLTctN3MzLjEzLTcgNy03IDcgMy4xMyA3IDctMy4xMyA3LTcgN3ptLTEuNDYtNS40N0w4LjQxIDEyLjRsLTEuMDYgMS4wNiAzLjE4IDMuMTggNi02LTEuMDYtMS4wNi00LjkzIDQuOTV6IiAvPjwvZz4KPGcgaWQ9ImFsbC1vdXQiPjxwYXRoIGQ9Ik0xNi4yMSA0LjE2bDQgNHYtNHptNCAxMmwtNCA0aDR6bS0xMiA0bC00LTR2NHptLTQtMTJsNC00aC00em0xMi45NS0uOTVjLTIuNzMtMi43My03LjE3LTIuNzMtOS45IDBzLTIuNzMgNy4xNyAwIDkuOSA3LjE3IDIuNzMgOS45IDAgMi43My03LjE2IDAtOS45em0tMS4xIDguOGMtMi4xMyAyLjEzLTUuNTcgMi4xMy03LjcgMHMtMi4xMy01LjU3IDAtNy43IDUuNTctMi4xMyA3LjcgMCAyLjEzIDUuNTcgMCA3Ljd6IiAvPjwvZz4KPGcgaWQ9ImFuZHJvaWQiPjxwYXRoIGQ9Ik02IDE4YzAgLjU1LjQ1IDEgMSAxaDF2My41YzAgLjgzLjY3IDEuNSAxLjUgMS41czEuNS0uNjcgMS41LTEuNVYxOWgydjMuNWMwIC44My42NyAxLjUgMS41IDEuNXMxLjUtLjY3IDEuNS0xLjVWMTloMWMuNTUgMCAxLS40NSAxLTFWOEg2djEwek0zLjUgOEMyLjY3IDggMiA4LjY3IDIgOS41djdjMCAuODMuNjcgMS41IDEuNSAxLjVTNSAxNy4zMyA1IDE2LjV2LTdDNSA4LjY3IDQuMzMgOCAzLjUgOHptMTcgMGMtLjgzIDAtMS41LjY3LTEuNSAxLjV2N2MwIC44My42NyAxLjUgMS41IDEuNXMxLjUtLjY3IDEuNS0xLjV2LTdjMC0uODMtLjY3LTEuNS0xLjUtMS41em0tNC45Ny01Ljg0bDEuMy0xLjNjLjItLjIuMi0uNTEgMC0uNzEtLjItLjItLjUxLS4yLS43MSAwbC0xLjQ4IDEuNDhDMTMuODUgMS4yMyAxMi45NSAxIDEyIDFjLS45NiAwLTEuODYuMjMtMi42Ni42M0w3Ljg1LjE1Yy0uMi0uMi0uNTEtLjItLjcxIDAtLjIuMi0uMi41MSAwIC43MWwxLjMxIDEuMzFDNi45NyAzLjI2IDYgNS4wMSA2IDdoMTJjMC0xLjk5LS45Ny0zLjc1LTIuNDctNC44NHpNMTAgNUg5VjRoMXYxem01IDBoLTFWNGgxdjF6IiAvPjwvZz4KPGcgaWQ9ImFubm91bmNlbWVudCI+PHBhdGggZD0iTTIwIDJINGMtMS4xIDAtMS45OS45LTEuOTkgMkwyIDIybDQtNGgxNGMxLjEgMCAyLS45IDItMlY0YzAtMS4xLS45LTItMi0yem0tNyA5aC0yVjVoMnY2em0wIDRoLTJ2LTJoMnYyeiIgLz48L2c+CjxnIGlkPSJhcHBzIj48cGF0aCBkPSJNNCA4aDRWNEg0djR6bTYgMTJoNHYtNGgtNHY0em0tNiAwaDR2LTRINHY0em0wLTZoNHYtNEg0djR6bTYgMGg0di00aC00djR6bTYtMTB2NGg0VjRoLTR6bS02IDRoNFY0aC00djR6bTYgNmg0di00aC00djR6bTAgNmg0di00aC00djR6IiAvPjwvZz4KPGcgaWQ9ImFyY2hpdmUiPjxwYXRoIGQ9Ik0yMC41NCA1LjIzbC0xLjM5LTEuNjhDMTguODggMy4yMSAxOC40NyAzIDE4IDNINmMtLjQ3IDAtLjg4LjIxLTEuMTYuNTVMMy40NiA1LjIzQzMuMTcgNS41NyAzIDYuMDIgMyA2LjVWMTljMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY2LjVjMC0uNDgtLjE3LS45My0uNDYtMS4yN3pNMTIgMTcuNUw2LjUgMTJIMTB2LTJoNHYyaDMuNUwxMiAxNy41ek01LjEyIDVsLjgxLTFoMTJsLjk0IDFINS4xMnoiIC8+PC9nPgo8ZyBpZD0iYXJyb3ctYmFjayI+PHBhdGggZD0iTTIwIDExSDcuODNsNS41OS01LjU5TDEyIDRsLTggOCA4IDggMS40MS0xLjQxTDcuODMgMTNIMjB2LTJ6IiAvPjwvZz4KPGcgaWQ9ImFycm93LWRvd253YXJkIj48cGF0aCBkPSJNMjAgMTJsLTEuNDEtMS40MUwxMyAxNi4xN1Y0aC0ydjEyLjE3bC01LjU4LTUuNTlMNCAxMmw4IDggOC04eiIgLz48L2c+CjxnIGlkPSJhcnJvdy1kcm9wLWRvd24iPjxwYXRoIGQ9Ik03IDEwbDUgNSA1LTV6IiAvPjwvZz4KPGcgaWQ9ImFycm93LWRyb3AtZG93bi1jaXJjbGUiPjxwYXRoIGQ9Ik0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0wIDEybC00LTRoOGwtNCA0eiIgLz48L2c+CjxnIGlkPSJhcnJvdy1kcm9wLXVwIj48cGF0aCBkPSJNNyAxNGw1LTUgNSA1eiIgLz48L2c+CjxnIGlkPSJhcnJvdy1mb3J3YXJkIj48cGF0aCBkPSJNMTIgNGwtMS40MSAxLjQxTDE2LjE3IDExSDR2MmgxMi4xN2wtNS41OCA1LjU5TDEyIDIwbDgtOHoiIC8+PC9nPgo8ZyBpZD0iYXJyb3ctdXB3YXJkIj48cGF0aCBkPSJNNCAxMmwxLjQxIDEuNDFMMTEgNy44M1YyMGgyVjcuODNsNS41OCA1LjU5TDIwIDEybC04LTgtOCA4eiIgLz48L2c+CjxnIGlkPSJhc3BlY3QtcmF0aW8iPjxwYXRoIGQ9Ik0xOSAxMmgtMnYzaC0zdjJoNXYtNXpNNyA5aDNWN0g1djVoMlY5em0xNC02SDNjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMThjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptMCAxNi4wMUgzVjQuOTloMTh2MTQuMDJ6IiAvPjwvZz4KPGcgaWQ9ImFzc2Vzc21lbnQiPjxwYXRoIGQ9Ik0xOSAzSDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnpNOSAxN0g3di03aDJ2N3ptNCAwaC0yVjdoMnYxMHptNCAwaC0ydi00aDJ2NHoiIC8+PC9nPgo8ZyBpZD0iYXNzaWdubWVudCI+PHBhdGggZD0iTTE5IDNoLTQuMThDMTQuNCAxLjg0IDEzLjMgMSAxMiAxYy0xLjMgMC0yLjQuODQtMi44MiAySDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptLTcgMGMuNTUgMCAxIC40NSAxIDFzLS40NSAxLTEgMS0xLS40NS0xLTEgLjQ1LTEgMS0xem0yIDE0SDd2LTJoN3Yyem0zLTRIN3YtMmgxMHYyem0wLTRIN1Y3aDEwdjJ6IiAvPjwvZz4KPGcgaWQ9ImFzc2lnbm1lbnQtaW5kIj48cGF0aCBkPSJNMTkgM2gtNC4xOEMxNC40IDEuODQgMTMuMyAxIDEyIDFjLTEuMyAwLTIuNC44NC0yLjgyIDJINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tNyAwYy41NSAwIDEgLjQ1IDEgMXMtLjQ1IDEtMSAxLTEtLjQ1LTEtMSAuNDUtMSAxLTF6bTAgNGMxLjY2IDAgMyAxLjM0IDMgM3MtMS4zNCAzLTMgMy0zLTEuMzQtMy0zIDEuMzQtMyAzLTN6bTYgMTJINnYtMS40YzAtMiA0LTMuMSA2LTMuMXM2IDEuMSA2IDMuMVYxOXoiIC8+PC9nPgo8ZyBpZD0iYXNzaWdubWVudC1sYXRlIj48cGF0aCBkPSJNMTkgM2gtNC4xOEMxNC40IDEuODQgMTMuMyAxIDEyIDFjLTEuMyAwLTIuNC44NC0yLjgyIDJINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tNiAxNWgtMnYtMmgydjJ6bTAtNGgtMlY4aDJ2NnptLTEtOWMtLjU1IDAtMS0uNDUtMS0xcy40NS0xIDEtMSAxIC40NSAxIDEtLjQ1IDEtMSAxeiIgLz48L2c+CjxnIGlkPSJhc3NpZ25tZW50LXJldHVybiI+PHBhdGggZD0iTTE5IDNoLTQuMThDMTQuNCAxLjg0IDEzLjMgMSAxMiAxYy0xLjMgMC0yLjQuODQtMi44MiAySDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptLTcgMGMuNTUgMCAxIC40NSAxIDFzLS40NSAxLTEgMS0xLS40NS0xLTEgLjQ1LTEgMS0xem00IDEyaC00djNsLTUtNSA1LTV2M2g0djR6IiAvPjwvZz4KPGcgaWQ9ImFzc2lnbm1lbnQtcmV0dXJuZWQiPjxwYXRoIGQ9Ik0xOSAzaC00LjE4QzE0LjQgMS44NCAxMy4zIDEgMTIgMWMtMS4zIDAtMi40Ljg0LTIuODIgMkg1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bS03IDBjLjU1IDAgMSAuNDUgMSAxcy0uNDUgMS0xIDEtMS0uNDUtMS0xIC40NS0xIDEtMXptMCAxNWwtNS01aDNWOWg0djRoM2wtNSA1eiIgLz48L2c+CjxnIGlkPSJhc3NpZ25tZW50LXR1cm5lZC1pbiI+PHBhdGggZD0iTTE5IDNoLTQuMThDMTQuNCAxLjg0IDEzLjMgMSAxMiAxYy0xLjMgMC0yLjQuODQtMi44MiAySDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptLTcgMGMuNTUgMCAxIC40NSAxIDFzLS40NSAxLTEgMS0xLS40NS0xLTEgLjQ1LTEgMS0xem0tMiAxNGwtNC00IDEuNDEtMS40MUwxMCAxNC4xN2w2LjU5LTYuNTlMMTggOWwtOCA4eiIgLz48L2c+CjxnIGlkPSJhdHRhY2htZW50Ij48cGF0aCBkPSJNMiAxMi41QzIgOS40NiA0LjQ2IDcgNy41IDdIMThjMi4yMSAwIDQgMS43OSA0IDRzLTEuNzkgNC00IDRIOS41QzguMTIgMTUgNyAxMy44OCA3IDEyLjVTOC4xMiAxMCA5LjUgMTBIMTd2Mkg5LjQxYy0uNTUgMC0uNTUgMSAwIDFIMThjMS4xIDAgMi0uOSAyLTJzLS45LTItMi0ySDcuNUM1LjU3IDkgNCAxMC41NyA0IDEyLjVTNS41NyAxNiA3LjUgMTZIMTd2Mkg3LjVDNC40NiAxOCAyIDE1LjU0IDIgMTIuNXoiIC8+PC9nPgo8ZyBpZD0iYXV0b3JlbmV3Ij48cGF0aCBkPSJNMTIgNnYzbDQtNC00LTR2M2MtNC40MiAwLTggMy41OC04IDggMCAxLjU3LjQ2IDMuMDMgMS4yNCA0LjI2TDYuNyAxNC44Yy0uNDUtLjgzLS43LTEuNzktLjctMi44IDAtMy4zMSAyLjY5LTYgNi02em02Ljc2IDEuNzRMMTcuMyA5LjJjLjQ0Ljg0LjcgMS43OS43IDIuOCAwIDMuMzEtMi42OSA2LTYgNnYtM2wtNCA0IDQgNHYtM2M0LjQyIDAgOC0zLjU4IDgtOCAwLTEuNTctLjQ2LTMuMDMtMS4yNC00LjI2eiIgLz48L2c+CjxnIGlkPSJiYWNrc3BhY2UiPjxwYXRoIGQ9Ik0yMiAzSDdjLS42OSAwLTEuMjMuMzUtMS41OS44OEwwIDEybDUuNDEgOC4xMWMuMzYuNTMuOS44OSAxLjU5Ljg5aDE1YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bS0zIDEyLjU5TDE3LjU5IDE3IDE0IDEzLjQxIDEwLjQxIDE3IDkgMTUuNTkgMTIuNTkgMTIgOSA4LjQxIDEwLjQxIDcgMTQgMTAuNTkgMTcuNTkgNyAxOSA4LjQxIDE1LjQxIDEyIDE5IDE1LjU5eiIgLz48L2c+CjxnIGlkPSJiYWNrdXAiPjxwYXRoIGQ9Ik0xOS4zNSAxMC4wNEMxOC42NyA2LjU5IDE1LjY0IDQgMTIgNCA5LjExIDQgNi42IDUuNjQgNS4zNSA4LjA0IDIuMzQgOC4zNiAwIDEwLjkxIDAgMTRjMCAzLjMxIDIuNjkgNiA2IDZoMTNjMi43NiAwIDUtMi4yNCA1LTUgMC0yLjY0LTIuMDUtNC43OC00LjY1LTQuOTZ6TTE0IDEzdjRoLTR2LTRIN2w1LTUgNSA1aC0zeiIgLz48L2c+CjxnIGlkPSJibG9jayI+PHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6TTQgMTJjMC00LjQyIDMuNTgtOCA4LTggMS44NSAwIDMuNTUuNjMgNC45IDEuNjlMNS42OSAxNi45QzQuNjMgMTUuNTUgNCAxMy44NSA0IDEyem04IDhjLTEuODUgMC0zLjU1LS42My00LjktMS42OUwxOC4zMSA3LjFDMTkuMzcgOC40NSAyMCAxMC4xNSAyMCAxMmMwIDQuNDItMy41OCA4LTggOHoiIC8+PC9nPgo8ZyBpZD0iYm9vayI+PHBhdGggZD0iTTE4IDJINmMtMS4xIDAtMiAuOS0yIDJ2MTZjMCAxLjEuOSAyIDIgMmgxMmMxLjEgMCAyLS45IDItMlY0YzAtMS4xLS45LTItMi0yek02IDRoNXY4bC0yLjUtMS41TDYgMTJWNHoiIC8+PC9nPgo8ZyBpZD0iYm9va21hcmsiPjxwYXRoIGQ9Ik0xNyAzSDdjLTEuMSAwLTEuOTkuOS0xLjk5IDJMNSAyMWw3LTMgNyAzVjVjMC0xLjEtLjktMi0yLTJ6IiAvPjwvZz4KPGcgaWQ9ImJvb2ttYXJrLWJvcmRlciI+PHBhdGggZD0iTTE3IDNIN2MtMS4xIDAtMS45OS45LTEuOTkgMkw1IDIxbDctMyA3IDNWNWMwLTEuMS0uOS0yLTItMnptMCAxNWwtNS0yLjE4TDcgMThWNWgxMHYxM3oiIC8+PC9nPgo8ZyBpZD0iYnVnLXJlcG9ydCI+PHBhdGggZD0iTTIwIDhoLTIuODFjLS40NS0uNzgtMS4wNy0xLjQ1LTEuODItMS45NkwxNyA0LjQxIDE1LjU5IDNsLTIuMTcgMi4xN0MxMi45NiA1LjA2IDEyLjQ5IDUgMTIgNWMtLjQ5IDAtLjk2LjA2LTEuNDEuMTdMOC40MSAzIDcgNC40MWwxLjYyIDEuNjNDNy44OCA2LjU1IDcuMjYgNy4yMiA2LjgxIDhINHYyaDIuMDljLS4wNS4zMy0uMDkuNjYtLjA5IDF2MUg0djJoMnYxYzAgLjM0LjA0LjY3LjA5IDFINHYyaDIuODFjMS4wNCAxLjc5IDIuOTcgMyA1LjE5IDNzNC4xNS0xLjIxIDUuMTktM0gyMHYtMmgtMi4wOWMuMDUtLjMzLjA5LS42Ni4wOS0xdi0xaDJ2LTJoLTJ2LTFjMC0uMzQtLjA0LS42Ny0uMDktMUgyMFY4em0tNiA4aC00di0yaDR2MnptMC00aC00di0yaDR2MnoiIC8+PC9nPgo8ZyBpZD0iYnVpbGQiPjxwYXRoIGQ9Ik0yMi43IDE5bC05LjEtOS4xYy45LTIuMy40LTUtMS41LTYuOS0yLTItNS0yLjQtNy40LTEuM0w5IDYgNiA5IDEuNiA0LjdDLjQgNy4xLjkgMTAuMSAyLjkgMTIuMWMxLjkgMS45IDQuNiAyLjQgNi45IDEuNWw5LjEgOS4xYy40LjQgMSAuNCAxLjQgMGwyLjMtMi4zYy41LS40LjUtMS4xLjEtMS40eiIgLz48L2c+CjxnIGlkPSJjYWNoZWQiPjxwYXRoIGQ9Ik0xOSA4bC00IDRoM2MwIDMuMzEtMi42OSA2LTYgNi0xLjAxIDAtMS45Ny0uMjUtMi44LS43bC0xLjQ2IDEuNDZDOC45NyAxOS41NCAxMC40MyAyMCAxMiAyMGM0LjQyIDAgOC0zLjU4IDgtOGgzbC00LTR6TTYgMTJjMC0zLjMxIDIuNjktNiA2LTYgMS4wMSAwIDEuOTcuMjUgMi44LjdsMS40Ni0xLjQ2QzE1LjAzIDQuNDYgMTMuNTcgNCAxMiA0Yy00LjQyIDAtOCAzLjU4LTggOEgxbDQgNCA0LTRINnoiIC8+PC9nPgo8ZyBpZD0iY2FtZXJhLWVuaGFuY2UiPjxwYXRoIGQ9Ik05IDNMNy4xNyA1SDRjLTEuMSAwLTIgLjktMiAydjEyYzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJWN2MwLTEuMS0uOS0yLTItMmgtMy4xN0wxNSAzSDl6bTMgMTVjLTIuNzYgMC01LTIuMjQtNS01czIuMjQtNSA1LTUgNSAyLjI0IDUgNS0yLjI0IDUtNSA1em0wLTFsMS4yNS0yLjc1TDE2IDEzbC0yLjc1LTEuMjVMMTIgOWwtMS4yNSAyLjc1TDggMTNsMi43NSAxLjI1eiIgLz48L2c+CjxnIGlkPSJjYW5jZWwiPjxwYXRoIGQ9Ik0xMiAyQzYuNDcgMiAyIDYuNDcgMiAxMnM0LjQ3IDEwIDEwIDEwIDEwLTQuNDcgMTAtMTBTMTcuNTMgMiAxMiAyem01IDEzLjU5TDE1LjU5IDE3IDEyIDEzLjQxIDguNDEgMTcgNyAxNS41OSAxMC41OSAxMiA3IDguNDEgOC40MSA3IDEyIDEwLjU5IDE1LjU5IDcgMTcgOC40MSAxMy40MSAxMiAxNyAxNS41OXoiIC8+PC9nPgo8ZyBpZD0iY2FyZC1naWZ0Y2FyZCI+PHBhdGggZD0iTTIwIDZoLTIuMThjLjExLS4zMS4xOC0uNjUuMTgtMSAwLTEuNjYtMS4zNC0zLTMtMy0xLjA1IDAtMS45Ni41NC0yLjUgMS4zNWwtLjUuNjctLjUtLjY4QzEwLjk2IDIuNTQgMTAuMDUgMiA5IDIgNy4zNCAyIDYgMy4zNCA2IDVjMCAuMzUuMDcuNjkuMTggMUg0Yy0xLjExIDAtMS45OS44OS0xLjk5IDJMMiAxOWMwIDEuMTEuODkgMiAyIDJoMTZjMS4xMSAwIDItLjg5IDItMlY4YzAtMS4xMS0uODktMi0yLTJ6bS01LTJjLjU1IDAgMSAuNDUgMSAxcy0uNDUgMS0xIDEtMS0uNDUtMS0xIC40NS0xIDEtMXpNOSA0Yy41NSAwIDEgLjQ1IDEgMXMtLjQ1IDEtMSAxLTEtLjQ1LTEtMSAuNDUtMSAxLTF6bTExIDE1SDR2LTJoMTZ2MnptMC01SDRWOGg1LjA4TDcgMTAuODMgOC42MiAxMiAxMSA4Ljc2bDEtMS4zNiAxIDEuMzZMMTUuMzggMTIgMTcgMTAuODMgMTQuOTIgOEgyMHY2eiIgLz48L2c+CjxnIGlkPSJjYXJkLW1lbWJlcnNoaXAiPjxwYXRoIGQ9Ik0yMCAySDRjLTEuMTEgMC0yIC44OS0yIDJ2MTFjMCAxLjExLjg5IDIgMiAyaDR2NWw0LTIgNCAydi01aDRjMS4xMSAwIDItLjg5IDItMlY0YzAtMS4xMS0uODktMi0yLTJ6bTAgMTNINHYtMmgxNnYyem0wLTVINFY0aDE2djZ6IiAvPjwvZz4KPGcgaWQ9ImNhcmQtdHJhdmVsIj48cGF0aCBkPSJNMjAgNmgtM1Y0YzAtMS4xMS0uODktMi0yLTJIOWMtMS4xMSAwLTIgLjg5LTIgMnYySDRjLTEuMTEgMC0yIC44OS0yIDJ2MTFjMCAxLjExLjg5IDIgMiAyaDE2YzEuMTEgMCAyLS44OSAyLTJWOGMwLTEuMTEtLjg5LTItMi0yek05IDRoNnYySDlWNHptMTEgMTVINHYtMmgxNnYyem0wLTVINFY4aDN2MmgyVjhoNnYyaDJWOGgzdjZ6IiAvPjwvZz4KPGcgaWQ9ImNoYW5nZS1oaXN0b3J5Ij48cGF0aCBkPSJNMTIgNy43N0wxOC4zOSAxOEg1LjYxTDEyIDcuNzdNMTIgNEwyIDIwaDIwTDEyIDR6IiAvPjwvZz4KPGcgaWQ9ImNoZWNrIj48cGF0aCBkPSJNOSAxNi4xN0w0LjgzIDEybC0xLjQyIDEuNDFMOSAxOSAyMSA3bC0xLjQxLTEuNDF6IiAvPjwvZz4KPGcgaWQ9ImNoZWNrLWJveCI+PHBhdGggZD0iTTE5IDNINWMtMS4xMSAwLTIgLjktMiAydjE0YzAgMS4xLjg5IDIgMiAyaDE0YzEuMTEgMCAyLS45IDItMlY1YzAtMS4xLS44OS0yLTItMnptLTkgMTRsLTUtNSAxLjQxLTEuNDFMMTAgMTQuMTdsNy41OS03LjU5TDE5IDhsLTkgOXoiIC8+PC9nPgo8ZyBpZD0iY2hlY2stYm94LW91dGxpbmUtYmxhbmsiPjxwYXRoIGQ9Ik0xOSA1djE0SDVWNWgxNG0wLTJINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yeiIgLz48L2c+CjxnIGlkPSJjaGVjay1jaXJjbGUiPjxwYXRoIGQ9Ik0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0tMiAxNWwtNS01IDEuNDEtMS40MUwxMCAxNC4xN2w3LjU5LTcuNTlMMTkgOGwtOSA5eiIgLz48L2c+CjxnIGlkPSJjaGV2cm9uLWxlZnQiPjxwYXRoIGQ9Ik0xNS40MSA3LjQxTDE0IDZsLTYgNiA2IDYgMS40MS0xLjQxTDEwLjgzIDEyeiIgLz48L2c+CjxnIGlkPSJjaGV2cm9uLXJpZ2h0Ij48cGF0aCBkPSJNMTAgNkw4LjU5IDcuNDEgMTMuMTcgMTJsLTQuNTggNC41OUwxMCAxOGw2LTZ6IiAvPjwvZz4KPGcgaWQ9ImNocm9tZS1yZWFkZXItbW9kZSI+PHBhdGggZD0iTTEzIDEyaDd2MS41aC03em0wLTIuNWg3VjExaC03em0wIDVoN1YxNmgtN3pNMjEgNEgzYy0xLjEgMC0yIC45LTIgMnYxM2MwIDEuMS45IDIgMiAyaDE4YzEuMSAwIDItLjkgMi0yVjZjMC0xLjEtLjktMi0yLTJ6bTAgMTVoLTlWNmg5djEzeiIgLz48L2c+CjxnIGlkPSJjbGFzcyI+PHBhdGggZD0iTTE4IDJINmMtMS4xIDAtMiAuOS0yIDJ2MTZjMCAxLjEuOSAyIDIgMmgxMmMxLjEgMCAyLS45IDItMlY0YzAtMS4xLS45LTItMi0yek02IDRoNXY4bC0yLjUtMS41TDYgMTJWNHoiIC8+PC9nPgo8ZyBpZD0iY2xlYXIiPjxwYXRoIGQ9Ik0xOSA2LjQxTDE3LjU5IDUgMTIgMTAuNTkgNi40MSA1IDUgNi40MSAxMC41OSAxMiA1IDE3LjU5IDYuNDEgMTkgMTIgMTMuNDEgMTcuNTkgMTkgMTkgMTcuNTkgMTMuNDEgMTJ6IiAvPjwvZz4KPGcgaWQ9ImNsb3NlIj48cGF0aCBkPSJNMTkgNi40MUwxNy41OSA1IDEyIDEwLjU5IDYuNDEgNSA1IDYuNDEgMTAuNTkgMTIgNSAxNy41OSA2LjQxIDE5IDEyIDEzLjQxIDE3LjU5IDE5IDE5IDE3LjU5IDEzLjQxIDEyeiIgLz48L2c+CjxnIGlkPSJjbG91ZCI+PHBhdGggZD0iTTE5LjM1IDEwLjA0QzE4LjY3IDYuNTkgMTUuNjQgNCAxMiA0IDkuMTEgNCA2LjYgNS42NCA1LjM1IDguMDQgMi4zNCA4LjM2IDAgMTAuOTEgMCAxNGMwIDMuMzEgMi42OSA2IDYgNmgxM2MyLjc2IDAgNS0yLjI0IDUtNSAwLTIuNjQtMi4wNS00Ljc4LTQuNjUtNC45NnoiIC8+PC9nPgo8ZyBpZD0iY2xvdWQtY2lyY2xlIj48cGF0aCBkPSJNMTIgMkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptNC41IDE0SDhjLTEuNjYgMC0zLTEuMzQtMy0zczEuMzQtMyAzLTNsLjE0LjAxQzguNTggOC4yOCAxMC4xMyA3IDEyIDdjMi4yMSAwIDQgMS43OSA0IDRoLjVjMS4zOCAwIDIuNSAxLjEyIDIuNSAyLjVTMTcuODggMTYgMTYuNSAxNnoiIC8+PC9nPgo8ZyBpZD0iY2xvdWQtZG9uZSI+PHBhdGggZD0iTTE5LjM1IDEwLjA0QzE4LjY3IDYuNTkgMTUuNjQgNCAxMiA0IDkuMTEgNCA2LjYgNS42NCA1LjM1IDguMDQgMi4zNCA4LjM2IDAgMTAuOTEgMCAxNGMwIDMuMzEgMi42OSA2IDYgNmgxM2MyLjc2IDAgNS0yLjI0IDUtNSAwLTIuNjQtMi4wNS00Ljc4LTQuNjUtNC45NnpNMTAgMTdsLTMuNS0zLjUgMS40MS0xLjQxTDEwIDE0LjE3IDE1LjE4IDlsMS40MSAxLjQxTDEwIDE3eiIgLz48L2c+CjxnIGlkPSJjbG91ZC1kb3dubG9hZCI+PHBhdGggZD0iTTE5LjM1IDEwLjA0QzE4LjY3IDYuNTkgMTUuNjQgNCAxMiA0IDkuMTEgNCA2LjYgNS42NCA1LjM1IDguMDQgMi4zNCA4LjM2IDAgMTAuOTEgMCAxNGMwIDMuMzEgMi42OSA2IDYgNmgxM2MyLjc2IDAgNS0yLjI0IDUtNSAwLTIuNjQtMi4wNS00Ljc4LTQuNjUtNC45NnpNMTcgMTNsLTUgNS01LTVoM1Y5aDR2NGgzeiIgLz48L2c+CjxnIGlkPSJjbG91ZC1vZmYiPjxwYXRoIGQ9Ik0xOS4zNSAxMC4wNEMxOC42NyA2LjU5IDE1LjY0IDQgMTIgNGMtMS40OCAwLTIuODUuNDMtNC4wMSAxLjE3bDEuNDYgMS40NkMxMC4yMSA2LjIzIDExLjA4IDYgMTIgNmMzLjA0IDAgNS41IDIuNDYgNS41IDUuNXYuNUgxOWMxLjY2IDAgMyAxLjM0IDMgMyAwIDEuMTMtLjY0IDIuMTEtMS41NiAyLjYybDEuNDUgMS40NUMyMy4xNiAxOC4xNiAyNCAxNi42OCAyNCAxNWMwLTIuNjQtMi4wNS00Ljc4LTQuNjUtNC45NnpNMyA1LjI3bDIuNzUgMi43NEMyLjU2IDguMTUgMCAxMC43NyAwIDE0YzAgMy4zMSAyLjY5IDYgNiA2aDExLjczbDIgMkwyMSAyMC43MyA0LjI3IDQgMyA1LjI3ek03LjczIDEwbDggOEg2Yy0yLjIxIDAtNC0xLjc5LTQtNHMxLjc5LTQgNC00aDEuNzN6IiAvPjwvZz4KPGcgaWQ9ImNsb3VkLXF1ZXVlIj48cGF0aCBkPSJNMTkuMzUgMTAuMDRDMTguNjcgNi41OSAxNS42NCA0IDEyIDQgOS4xMSA0IDYuNiA1LjY0IDUuMzUgOC4wNCAyLjM0IDguMzYgMCAxMC45MSAwIDE0YzAgMy4zMSAyLjY5IDYgNiA2aDEzYzIuNzYgMCA1LTIuMjQgNS01IDAtMi42NC0yLjA1LTQuNzgtNC42NS00Ljk2ek0xOSAxOEg2Yy0yLjIxIDAtNC0xLjc5LTQtNHMxLjc5LTQgNC00aC43MUM3LjM3IDcuNjkgOS40OCA2IDEyIDZjMy4wNCAwIDUuNSAyLjQ2IDUuNSA1LjV2LjVIMTljMS42NiAwIDMgMS4zNCAzIDNzLTEuMzQgMy0zIDN6IiAvPjwvZz4KPGcgaWQ9ImNsb3VkLXVwbG9hZCI+PHBhdGggZD0iTTE5LjM1IDEwLjA0QzE4LjY3IDYuNTkgMTUuNjQgNCAxMiA0IDkuMTEgNCA2LjYgNS42NCA1LjM1IDguMDQgMi4zNCA4LjM2IDAgMTAuOTEgMCAxNGMwIDMuMzEgMi42OSA2IDYgNmgxM2MyLjc2IDAgNS0yLjI0IDUtNSAwLTIuNjQtMi4wNS00Ljc4LTQuNjUtNC45NnpNMTQgMTN2NGgtNHYtNEg3bDUtNSA1IDVoLTN6IiAvPjwvZz4KPGcgaWQ9ImNvZGUiPjxwYXRoIGQ9Ik05LjQgMTYuNkw0LjggMTJsNC42LTQuNkw4IDZsLTYgNiA2IDYgMS40LTEuNHptNS4yIDBsNC42LTQuNi00LjYtNC42TDE2IDZsNiA2LTYgNi0xLjQtMS40eiIgLz48L2c+CjxnIGlkPSJjb21wYXJlLWFycm93cyI+PHBhdGggZD0iTTkuMDEgMTRIMnYyaDcuMDF2M0wxMyAxNWwtMy45OS00djN6bTUuOTgtMXYtM0gyMlY4aC03LjAxVjVMMTEgOWwzLjk5IDR6IiAvPjwvZz4KPGcgaWQ9ImNvbnRlbnQtY29weSI+PHBhdGggZD0iTTE2IDFINGMtMS4xIDAtMiAuOS0yIDJ2MTRoMlYzaDEyVjF6bTMgNEg4Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDExYzEuMSAwIDItLjkgMi0yVjdjMC0xLjEtLjktMi0yLTJ6bTAgMTZIOFY3aDExdjE0eiIgLz48L2c+CjxnIGlkPSJjb250ZW50LWN1dCI+PHBhdGggZD0iTTkuNjQgNy42NGMuMjMtLjUuMzYtMS4wNS4zNi0xLjY0IDAtMi4yMS0xLjc5LTQtNC00UzIgMy43OSAyIDZzMS43OSA0IDQgNGMuNTkgMCAxLjE0LS4xMyAxLjY0LS4zNkwxMCAxMmwtMi4zNiAyLjM2QzcuMTQgMTQuMTMgNi41OSAxNCA2IDE0Yy0yLjIxIDAtNCAxLjc5LTQgNHMxLjc5IDQgNCA0IDQtMS43OSA0LTRjMC0uNTktLjEzLTEuMTQtLjM2LTEuNjRMMTIgMTRsNyA3aDN2LTFMOS42NCA3LjY0ek02IDhjLTEuMSAwLTItLjg5LTItMnMuOS0yIDItMiAyIC44OSAyIDItLjkgMi0yIDJ6bTAgMTJjLTEuMSAwLTItLjg5LTItMnMuOS0yIDItMiAyIC44OSAyIDItLjkgMi0yIDJ6bTYtNy41Yy0uMjggMC0uNS0uMjItLjUtLjVzLjIyLS41LjUtLjUuNS4yMi41LjUtLjIyLjUtLjUuNXpNMTkgM2wtNiA2IDIgMiA3LTdWM3oiIC8+PC9nPgo8ZyBpZD0iY29udGVudC1wYXN0ZSI+PHBhdGggZD0iTTE5IDJoLTQuMThDMTQuNC44NCAxMy4zIDAgMTIgMGMtMS4zIDAtMi40Ljg0LTIuODIgMkg1Yy0xLjEgMC0yIC45LTIgMnYxNmMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6bS03IDBjLjU1IDAgMSAuNDUgMSAxcy0uNDUgMS0xIDEtMS0uNDUtMS0xIC40NS0xIDEtMXptNyAxOEg1VjRoMnYzaDEwVjRoMnYxNnoiIC8+PC9nPgo8ZyBpZD0iY29weXJpZ2h0Ij48cGF0aCBkPSJNMTAuMDggMTAuODZjLjA1LS4zMy4xNi0uNjIuMy0uODdzLjM0LS40Ni41OS0uNjJjLjI0LS4xNS41NC0uMjIuOTEtLjIzLjIzLjAxLjQ0LjA1LjYzLjEzLjIuMDkuMzguMjEuNTIuMzZzLjI1LjMzLjM0LjUzLjEzLjQyLjE0LjY0aDEuNzljLS4wMi0uNDctLjExLS45LS4yOC0xLjI5cy0uNC0uNzMtLjctMS4wMS0uNjYtLjUtMS4wOC0uNjYtLjg4LS4yMy0xLjM5LS4yM2MtLjY1IDAtMS4yMi4xMS0xLjcuMzRzLS44OC41My0xLjIuOTItLjU2Ljg0LS43MSAxLjM2UzggMTEuMjkgOCAxMS44N3YuMjdjMCAuNTguMDggMS4xMi4yMyAxLjY0cy4zOS45Ny43MSAxLjM1LjcyLjY5IDEuMi45MSAxLjA1LjM0IDEuNy4zNGMuNDcgMCAuOTEtLjA4IDEuMzItLjIzcy43Ny0uMzYgMS4wOC0uNjMuNTYtLjU4Ljc0LS45NC4yOS0uNzQuMy0xLjE1aC0xLjc5Yy0uMDEuMjEtLjA2LjQtLjE1LjU4cy0uMjEuMzMtLjM2LjQ2LS4zMi4yMy0uNTIuM2MtLjE5LjA3LS4zOS4wOS0uNi4xLS4zNi0uMDEtLjY2LS4wOC0uODktLjIzLS4yNS0uMTYtLjQ1LS4zNy0uNTktLjYycy0uMjUtLjU1LS4zLS44OC0uMDgtLjY3LS4wOC0xdi0uMjdjMC0uMzUuMDMtLjY4LjA4LTEuMDF6TTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTAgMThjLTQuNDEgMC04LTMuNTktOC04czMuNTktOCA4LTggOCAzLjU5IDggOC0zLjU5IDgtOCA4eiIgLz48L2c+CjxnIGlkPSJjcmVhdGUiPjxwYXRoIGQ9Ik0zIDE3LjI1VjIxaDMuNzVMMTcuODEgOS45NGwtMy43NS0zLjc1TDMgMTcuMjV6TTIwLjcxIDcuMDRjLjM5LS4zOS4zOS0xLjAyIDAtMS40MWwtMi4zNC0yLjM0Yy0uMzktLjM5LTEuMDItLjM5LTEuNDEgMGwtMS44MyAxLjgzIDMuNzUgMy43NSAxLjgzLTEuODN6IiAvPjwvZz4KPGcgaWQ9ImNyZWF0ZS1uZXctZm9sZGVyIj48cGF0aCBkPSJNMjAgNmgtOGwtMi0ySDRjLTEuMTEgMC0xLjk5Ljg5LTEuOTkgMkwyIDE4YzAgMS4xMS44OSAyIDIgMmgxNmMxLjExIDAgMi0uODkgMi0yVjhjMC0xLjExLS44OS0yLTItMnptLTEgOGgtM3YzaC0ydi0zaC0zdi0yaDNWOWgydjNoM3YyeiIgLz48L2c+CjxnIGlkPSJjcmVkaXQtY2FyZCI+PHBhdGggZD0iTTIwIDRINGMtMS4xMSAwLTEuOTkuODktMS45OSAyTDIgMThjMCAxLjExLjg5IDIgMiAyaDE2YzEuMTEgMCAyLS44OSAyLTJWNmMwLTEuMTEtLjg5LTItMi0yem0wIDE0SDR2LTZoMTZ2NnptMC0xMEg0VjZoMTZ2MnoiIC8+PC9nPgo8ZyBpZD0iZGFzaGJvYXJkIj48cGF0aCBkPSJNMyAxM2g4VjNIM3YxMHptMCA4aDh2LTZIM3Y2em0xMCAwaDhWMTFoLTh2MTB6bTAtMTh2Nmg4VjNoLTh6IiAvPjwvZz4KPGcgaWQ9ImRhdGUtcmFuZ2UiPjxwYXRoIGQ9Ik05IDExSDd2Mmgydi0yem00IDBoLTJ2Mmgydi0yem00IDBoLTJ2Mmgydi0yem0yLTdoLTFWMmgtMnYySDhWMkg2djJINWMtMS4xMSAwLTEuOTkuOS0xLjk5IDJMMyAyMGMwIDEuMS44OSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0yem0wIDE2SDVWOWgxNHYxMXoiIC8+PC9nPgo8ZyBpZD0iZGVsZXRlIj48cGF0aCBkPSJNNiAxOWMwIDEuMS45IDIgMiAyaDhjMS4xIDAgMi0uOSAyLTJWN0g2djEyek0xOSA0aC0zLjVsLTEtMWgtNWwtMSAxSDV2MmgxNFY0eiIgLz48L2c+CjxnIGlkPSJkZWxldGUtZm9yZXZlciI+PHBhdGggZD0iTTYgMTljMCAxLjEuOSAyIDIgMmg4YzEuMSAwIDItLjkgMi0yVjdINnYxMnptMi40Ni03LjEybDEuNDEtMS40MUwxMiAxMi41OWwyLjEyLTIuMTIgMS40MSAxLjQxTDEzLjQxIDE0bDIuMTIgMi4xMi0xLjQxIDEuNDFMMTIgMTUuNDFsLTIuMTIgMi4xMi0xLjQxLTEuNDFMMTAuNTkgMTRsLTIuMTMtMi4xMnpNMTUuNSA0bC0xLTFoLTVsLTEgMUg1djJoMTRWNHoiIC8+PC9nPgo8ZyBpZD0iZGVsZXRlLXN3ZWVwIj48cGF0aCBkPSJNMTUgMTZoNHYyaC00em0wLThoN3YyaC03em0wIDRoNnYyaC02ek0zIDE4YzAgMS4xLjkgMiAyIDJoNmMxLjEgMCAyLS45IDItMlY4SDN2MTB6TTE0IDVoLTNsLTEtMUg2TDUgNUgydjJoMTJ6IiAvPjwvZz4KPGcgaWQ9ImRlc2NyaXB0aW9uIj48cGF0aCBkPSJNMTQgMkg2Yy0xLjEgMC0xLjk5LjktMS45OSAyTDQgMjBjMCAxLjEuODkgMiAxLjk5IDJIMThjMS4xIDAgMi0uOSAyLTJWOGwtNi02em0yIDE2SDh2LTJoOHYyem0wLTRIOHYtMmg4djJ6bS0zLTVWMy41TDE4LjUgOUgxM3oiIC8+PC9nPgo8ZyBpZD0iZG5zIj48cGF0aCBkPSJNMjAgMTNINGMtLjU1IDAtMSAuNDUtMSAxdjZjMCAuNTUuNDUgMSAxIDFoMTZjLjU1IDAgMS0uNDUgMS0xdi02YzAtLjU1LS40NS0xLTEtMXpNNyAxOWMtMS4xIDAtMi0uOS0yLTJzLjktMiAyLTIgMiAuOSAyIDItLjkgMi0yIDJ6TTIwIDNINGMtLjU1IDAtMSAuNDUtMSAxdjZjMCAuNTUuNDUgMSAxIDFoMTZjLjU1IDAgMS0uNDUgMS0xVjRjMC0uNTUtLjQ1LTEtMS0xek03IDljLTEuMSAwLTItLjktMi0ycy45LTIgMi0yIDIgLjkgMiAyLS45IDItMiAyeiIgLz48L2c+CjxnIGlkPSJkb25lIj48cGF0aCBkPSJNOSAxNi4yTDQuOCAxMmwtMS40IDEuNEw5IDE5IDIxIDdsLTEuNC0xLjRMOSAxNi4yeiIgLz48L2c+CjxnIGlkPSJkb25lLWFsbCI+PHBhdGggZD0iTTE4IDdsLTEuNDEtMS40MS02LjM0IDYuMzQgMS40MSAxLjQxTDE4IDd6bTQuMjQtMS40MUwxMS42NiAxNi4xNyA3LjQ4IDEybC0xLjQxIDEuNDFMMTEuNjYgMTlsMTItMTItMS40Mi0xLjQxek0uNDEgMTMuNDFMNiAxOWwxLjQxLTEuNDFMMS44MyAxMiAuNDEgMTMuNDF6IiAvPjwvZz4KPGcgaWQ9ImRvbnV0LWxhcmdlIj48cGF0aCBkPSJNMTEgNS4wOFYyYy01IC41LTkgNC44MS05IDEwczQgOS41IDkgMTB2LTMuMDhjLTMtLjQ4LTYtMy40LTYtNi45MnMzLTYuNDQgNi02Ljkyek0xOC45NyAxMUgyMmMtLjQ3LTUtNC04LjUzLTktOXYzLjA4QzE2IDUuNTEgMTguNTQgOCAxOC45NyAxMXpNMTMgMTguOTJWMjJjNS0uNDcgOC41My00IDktOWgtMy4wM2MtLjQzIDMtMi45NyA1LjQ5LTUuOTcgNS45MnoiIC8+PC9nPgo8ZyBpZD0iZG9udXQtc21hbGwiPjxwYXRoIGQ9Ik0xMSA5LjE2VjJjLTUgLjUtOSA0Ljc5LTkgMTBzNCA5LjUgOSAxMHYtNy4xNmMtMS0uNDEtMi0xLjUyLTItMi44NHMxLTIuNDMgMi0yLjg0ek0xNC44NiAxMUgyMmMtLjQ4LTQuNzUtNC04LjUzLTktOXY3LjE2YzEgLjMgMS41Mi45OCAxLjg2IDEuODR6TTEzIDE0Ljg0VjIyYzUtLjQ3IDguNTItNC4yNSA5LTloLTcuMTRjLS4zNC44Ni0uODYgMS41NC0xLjg2IDEuODR6IiAvPjwvZz4KPGcgaWQ9ImRyYWZ0cyI+PHBhdGggZD0iTTIxLjk5IDhjMC0uNzItLjM3LTEuMzUtLjk0LTEuN0wxMiAxIDIuOTUgNi4zQzIuMzggNi42NSAyIDcuMjggMiA4djEwYzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJsLS4wMS0xMHpNMTIgMTNMMy43NCA3Ljg0IDEyIDNsOC4yNiA0Ljg0TDEyIDEzeiIgLz48L2c+CjxnIGlkPSJlamVjdCI+PHBhdGggZD0iTTUgMTdoMTR2Mkg1em03LTEyTDUuMzMgMTVoMTMuMzR6IiAvPjwvZz4KPGcgaWQ9ImVycm9yIj48cGF0aCBkPSJNMTIgMkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptMSAxNWgtMnYtMmgydjJ6bTAtNGgtMlY3aDJ2NnoiIC8+PC9nPgo8ZyBpZD0iZXJyb3Itb3V0bGluZSI+PHBhdGggZD0iTTExIDE1aDJ2MmgtMnptMC04aDJ2NmgtMnptLjk5LTVDNi40NyAyIDIgNi40OCAyIDEyczQuNDcgMTAgOS45OSAxMEMxNy41MiAyMiAyMiAxNy41MiAyMiAxMlMxNy41MiAyIDExLjk5IDJ6TTEyIDIwYy00LjQyIDAtOC0zLjU4LTgtOHMzLjU4LTggOC04IDggMy41OCA4IDgtMy41OCA4LTggOHoiIC8+PC9nPgo8ZyBpZD0iZXVyby1zeW1ib2wiPjxwYXRoIGQ9Ik0xNSAxOC41Yy0yLjUxIDAtNC42OC0xLjQyLTUuNzYtMy41SDE1di0ySDguNThjLS4wNS0uMzMtLjA4LS42Ni0uMDgtMXMuMDMtLjY3LjA4LTFIMTVWOUg5LjI0QzEwLjMyIDYuOTIgMTIuNSA1LjUgMTUgNS41YzEuNjEgMCAzLjA5LjU5IDQuMjMgMS41N0wyMSA1LjNDMTkuNDEgMy44NyAxNy4zIDMgMTUgM2MtMy45MiAwLTcuMjQgMi41MS04LjQ4IDZIM3YyaDMuMDZjLS4wNC4zMy0uMDYuNjYtLjA2IDEgMCAuMzQuMDIuNjcuMDYgMUgzdjJoMy41MmMxLjI0IDMuNDkgNC41NiA2IDguNDggNiAyLjMxIDAgNC40MS0uODcgNi0yLjNsLTEuNzgtMS43N2MtMS4xMy45OC0yLjYgMS41Ny00LjIyIDEuNTd6IiAvPjwvZz4KPGcgaWQ9ImV2ZW50Ij48cGF0aCBkPSJNMTcgMTJoLTV2NWg1di01ek0xNiAxdjJIOFYxSDZ2Mkg1Yy0xLjExIDAtMS45OS45LTEuOTkgMkwzIDE5YzAgMS4xLjg5IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJoLTFWMWgtMnptMyAxOEg1VjhoMTR2MTF6IiAvPjwvZz4KPGcgaWQ9ImV2ZW50LXNlYXQiPjxwYXRoIGQ9Ik00IDE4djNoM3YtM2gxMHYzaDN2LTZINHptMTUtOGgzdjNoLTN6TTIgMTBoM3YzSDJ6bTE1IDNIN1Y1YzAtMS4xLjktMiAyLTJoNmMxLjEgMCAyIC45IDIgMnY4eiIgLz48L2c+CjxnIGlkPSJleGl0LXRvLWFwcCI+PHBhdGggZD0iTTEwLjA5IDE1LjU5TDExLjUgMTdsNS01LTUtNS0xLjQxIDEuNDFMMTIuNjcgMTFIM3YyaDkuNjdsLTIuNTggMi41OXpNMTkgM0g1Yy0xLjExIDAtMiAuOS0yIDJ2NGgyVjVoMTR2MTRINXYtNEgzdjRjMCAxLjEuODkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnoiIC8+PC9nPgo8ZyBpZD0iZXhwYW5kLWxlc3MiPjxwYXRoIGQ9Ik0xMiA4bC02IDYgMS40MSAxLjQxTDEyIDEwLjgzbDQuNTkgNC41OEwxOCAxNHoiIC8+PC9nPgo8ZyBpZD0iZXhwYW5kLW1vcmUiPjxwYXRoIGQ9Ik0xNi41OSA4LjU5TDEyIDEzLjE3IDcuNDEgOC41OSA2IDEwbDYgNiA2LTZ6IiAvPjwvZz4KPGcgaWQ9ImV4cGxvcmUiPjxwYXRoIGQ9Ik0xMiAxMC45Yy0uNjEgMC0xLjEuNDktMS4xIDEuMXMuNDkgMS4xIDEuMSAxLjFjLjYxIDAgMS4xLS40OSAxLjEtMS4xcy0uNDktMS4xLTEuMS0xLjF6TTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTIuMTkgMTIuMTlMNiAxOGwzLjgxLTguMTlMMTggNmwtMy44MSA4LjE5eiIgLz48L2c+CjxnIGlkPSJleHRlbnNpb24iPjxwYXRoIGQ9Ik0yMC41IDExSDE5VjdjMC0xLjEtLjktMi0yLTJoLTRWMy41QzEzIDIuMTIgMTEuODggMSAxMC41IDFTOCAyLjEyIDggMy41VjVINGMtMS4xIDAtMS45OS45LTEuOTkgMnYzLjhIMy41YzEuNDkgMCAyLjcgMS4yMSAyLjcgMi43cy0xLjIxIDIuNy0yLjcgMi43SDJWMjBjMCAxLjEuOSAyIDIgMmgzLjh2LTEuNWMwLTEuNDkgMS4yMS0yLjcgMi43LTIuNyAxLjQ5IDAgMi43IDEuMjEgMi43IDIuN1YyMkgxN2MxLjEgMCAyLS45IDItMnYtNGgxLjVjMS4zOCAwIDIuNS0xLjEyIDIuNS0yLjVTMjEuODggMTEgMjAuNSAxMXoiIC8+PC9nPgo8ZyBpZD0iZmFjZSI+PHBhdGggZD0iTTkgMTEuNzVjLS42OSAwLTEuMjUuNTYtMS4yNSAxLjI1cy41NiAxLjI1IDEuMjUgMS4yNSAxLjI1LS41NiAxLjI1LTEuMjUtLjU2LTEuMjUtMS4yNS0xLjI1em02IDBjLS42OSAwLTEuMjUuNTYtMS4yNSAxLjI1cy41NiAxLjI1IDEuMjUgMS4yNSAxLjI1LS41NiAxLjI1LTEuMjUtLjU2LTEuMjUtMS4yNS0xLjI1ek0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0wIDE4Yy00LjQxIDAtOC0zLjU5LTgtOCAwLS4yOS4wMi0uNTguMDUtLjg2IDIuMzYtMS4wNSA0LjIzLTIuOTggNS4yMS01LjM3QzExLjA3IDguMzMgMTQuMDUgMTAgMTcuNDIgMTBjLjc4IDAgMS41My0uMDkgMi4yNS0uMjYuMjEuNzEuMzMgMS40Ny4zMyAyLjI2IDAgNC40MS0zLjU5IDgtOCA4eiIgLz48L2c+CjxnIGlkPSJmYXZvcml0ZSI+PHBhdGggZD0iTTEyIDIxLjM1bC0xLjQ1LTEuMzJDNS40IDE1LjM2IDIgMTIuMjggMiA4LjUgMiA1LjQyIDQuNDIgMyA3LjUgM2MxLjc0IDAgMy40MS44MSA0LjUgMi4wOUMxMy4wOSAzLjgxIDE0Ljc2IDMgMTYuNSAzIDE5LjU4IDMgMjIgNS40MiAyMiA4LjVjMCAzLjc4LTMuNCA2Ljg2LTguNTUgMTEuNTRMMTIgMjEuMzV6IiAvPjwvZz4KPGcgaWQ9ImZhdm9yaXRlLWJvcmRlciI+PHBhdGggZD0iTTE2LjUgM2MtMS43NCAwLTMuNDEuODEtNC41IDIuMDlDMTAuOTEgMy44MSA5LjI0IDMgNy41IDMgNC40MiAzIDIgNS40MiAyIDguNWMwIDMuNzggMy40IDYuODYgOC41NSAxMS41NEwxMiAyMS4zNWwxLjQ1LTEuMzJDMTguNiAxNS4zNiAyMiAxMi4yOCAyMiA4LjUgMjIgNS40MiAxOS41OCAzIDE2LjUgM3ptLTQuNCAxNS41NWwtLjEuMS0uMS0uMUM3LjE0IDE0LjI0IDQgMTEuMzkgNCA4LjUgNCA2LjUgNS41IDUgNy41IDVjMS41NCAwIDMuMDQuOTkgMy41NyAyLjM2aDEuODdDMTMuNDYgNS45OSAxNC45NiA1IDE2LjUgNWMyIDAgMy41IDEuNSAzLjUgMy41IDAgMi44OS0zLjE0IDUuNzQtNy45IDEwLjA1eiIgLz48L2c+CjxnIGlkPSJmZWVkYmFjayI+PHBhdGggZD0iTTIwIDJINGMtMS4xIDAtMS45OS45LTEuOTkgMkwyIDIybDQtNGgxNGMxLjEgMCAyLS45IDItMlY0YzAtMS4xLS45LTItMi0yem0tNyAxMmgtMnYtMmgydjJ6bTAtNGgtMlY2aDJ2NHoiIC8+PC9nPgo8ZyBpZD0iZmlsZS1kb3dubG9hZCI+PHBhdGggZD0iTTE5IDloLTRWM0g5djZINWw3IDcgNy03ek01IDE4djJoMTR2LTJINXoiIC8+PC9nPgo8ZyBpZD0iZmlsZS11cGxvYWQiPjxwYXRoIGQ9Ik05IDE2aDZ2LTZoNGwtNy03LTcgN2g0em0tNCAyaDE0djJINXoiIC8+PC9nPgo8ZyBpZD0iZmlsdGVyLWxpc3QiPjxwYXRoIGQ9Ik0xMCAxOGg0di0yaC00djJ6TTMgNnYyaDE4VjZIM3ptMyA3aDEydi0ySDZ2MnoiIC8+PC9nPgo8ZyBpZD0iZmluZC1pbi1wYWdlIj48cGF0aCBkPSJNMjAgMTkuNTlWOGwtNi02SDZjLTEuMSAwLTEuOTkuOS0xLjk5IDJMNCAyMGMwIDEuMS44OSAyIDEuOTkgMkgxOGMuNDUgMCAuODUtLjE1IDEuMTktLjRsLTQuNDMtNC40M2MtLjguNTItMS43NC44My0yLjc2LjgzLTIuNzYgMC01LTIuMjQtNS01czIuMjQtNSA1LTUgNSAyLjI0IDUgNWMwIDEuMDItLjMxIDEuOTYtLjgzIDIuNzVMMjAgMTkuNTl6TTkgMTNjMCAxLjY2IDEuMzQgMyAzIDNzMy0xLjM0IDMtMy0xLjM0LTMtMy0zLTMgMS4zNC0zIDN6IiAvPjwvZz4KPGcgaWQ9ImZpbmQtcmVwbGFjZSI+PHBhdGggZD0iTTExIDZjMS4zOCAwIDIuNjMuNTYgMy41NCAxLjQ2TDEyIDEwaDZWNGwtMi4wNSAyLjA1QzE0LjY4IDQuNzggMTIuOTMgNCAxMSA0Yy0zLjUzIDAtNi40MyAyLjYxLTYuOTIgNkg2LjFjLjQ2LTIuMjggMi40OC00IDQuOS00em01LjY0IDkuMTRjLjY2LS45IDEuMTItMS45NyAxLjI4LTMuMTRIMTUuOWMtLjQ2IDIuMjgtMi40OCA0LTQuOSA0LTEuMzggMC0yLjYzLS41Ni0zLjU0LTEuNDZMMTAgMTJINHY2bDIuMDUtMi4wNUM3LjMyIDE3LjIyIDkuMDcgMTggMTEgMThjMS41NSAwIDIuOTgtLjUxIDQuMTQtMS4zNkwyMCAyMS40OSAyMS40OSAyMGwtNC44NS00Ljg2eiIgLz48L2c+CjxnIGlkPSJmaW5nZXJwcmludCI+PHBhdGggZD0iTTE3LjgxIDQuNDdjLS4wOCAwLS4xNi0uMDItLjIzLS4wNkMxNS42NiAzLjQyIDE0IDMgMTIuMDEgM2MtMS45OCAwLTMuODYuNDctNS41NyAxLjQxLS4yNC4xMy0uNTQuMDQtLjY4LS4yLS4xMy0uMjQtLjA0LS41NS4yLS42OEM3LjgyIDIuNTIgOS44NiAyIDEyLjAxIDJjMi4xMyAwIDMuOTkuNDcgNi4wMyAxLjUyLjI1LjEzLjM0LjQzLjIxLjY3LS4wOS4xOC0uMjYuMjgtLjQ0LjI4ek0zLjUgOS43MmMtLjEgMC0uMi0uMDMtLjI5LS4wOS0uMjMtLjE2LS4yOC0uNDctLjEyLS43Ljk5LTEuNCAyLjI1LTIuNSAzLjc1LTMuMjdDOS45OCA0LjA0IDE0IDQuMDMgMTcuMTUgNS42NWMxLjUuNzcgMi43NiAxLjg2IDMuNzUgMy4yNS4xNi4yMi4xMS41NC0uMTIuNy0uMjMuMTYtLjU0LjExLS43LS4xMi0uOS0xLjI2LTIuMDQtMi4yNS0zLjM5LTIuOTQtMi44Ny0xLjQ3LTYuNTQtMS40Ny05LjQuMDEtMS4zNi43LTIuNSAxLjctMy40IDIuOTYtLjA4LjE0LS4yMy4yMS0uMzkuMjF6bTYuMjUgMTIuMDdjLS4xMyAwLS4yNi0uMDUtLjM1LS4xNS0uODctLjg3LTEuMzQtMS40My0yLjAxLTIuNjQtLjY5LTEuMjMtMS4wNS0yLjczLTEuMDUtNC4zNCAwLTIuOTcgMi41NC01LjM5IDUuNjYtNS4zOXM1LjY2IDIuNDIgNS42NiA1LjM5YzAgLjI4LS4yMi41LS41LjVzLS41LS4yMi0uNS0uNWMwLTIuNDItMi4wOS00LjM5LTQuNjYtNC4zOS0yLjU3IDAtNC42NiAxLjk3LTQuNjYgNC4zOSAwIDEuNDQuMzIgMi43Ny45MyAzLjg1LjY0IDEuMTUgMS4wOCAxLjY0IDEuODUgMi40Mi4xOS4yLjE5LjUxIDAgLjcxLS4xMS4xLS4yNC4xNS0uMzcuMTV6bTcuMTctMS44NWMtMS4xOSAwLTIuMjQtLjMtMy4xLS44OS0xLjQ5LTEuMDEtMi4zOC0yLjY1LTIuMzgtNC4zOSAwLS4yOC4yMi0uNS41LS41cy41LjIyLjUuNWMwIDEuNDEuNzIgMi43NCAxLjk0IDMuNTYuNzEuNDggMS41NC43MSAyLjU0LjcxLjI0IDAgLjY0LS4wMyAxLjA0LS4xLjI3LS4wNS41My4xMy41OC40MS4wNS4yNy0uMTMuNTMtLjQxLjU4LS41Ny4xMS0xLjA3LjEyLTEuMjEuMTJ6TTE0LjkxIDIyYy0uMDQgMC0uMDktLjAxLS4xMy0uMDItMS41OS0uNDQtMi42My0xLjAzLTMuNzItMi4xLTEuNC0xLjM5LTIuMTctMy4yNC0yLjE3LTUuMjIgMC0xLjYyIDEuMzgtMi45NCAzLjA4LTIuOTQgMS43IDAgMy4wOCAxLjMyIDMuMDggMi45NCAwIDEuMDcuOTMgMS45NCAyLjA4IDEuOTRzMi4wOC0uODcgMi4wOC0xLjk0YzAtMy43Ny0zLjI1LTYuODMtNy4yNS02LjgzLTIuODQgMC01LjQ0IDEuNTgtNi42MSA0LjAzLS4zOS44MS0uNTkgMS43Ni0uNTkgMi44IDAgLjc4LjA3IDIuMDEuNjcgMy42MS4xLjI2LS4wMy41NS0uMjkuNjQtLjI2LjEtLjU1LS4wNC0uNjQtLjI5LS40OS0xLjMxLS43My0yLjYxLS43My0zLjk2IDAtMS4yLjIzLTIuMjkuNjgtMy4yNCAxLjMzLTIuNzkgNC4yOC00LjYgNy41MS00LjYgNC41NSAwIDguMjUgMy41MSA4LjI1IDcuODMgMCAxLjYyLTEuMzggMi45NC0zLjA4IDIuOTRzLTMuMDgtMS4zMi0zLjA4LTIuOTRjMC0xLjA3LS45My0xLjk0LTIuMDgtMS45NHMtMi4wOC44Ny0yLjA4IDEuOTRjMCAxLjcxLjY2IDMuMzEgMS44NyA0LjUxLjk1Ljk0IDEuODYgMS40NiAzLjI3IDEuODUuMjcuMDcuNDIuMzUuMzUuNjEtLjA1LjIzLS4yNi4zOC0uNDcuMzh6IiAvPjwvZz4KPGcgaWQ9ImZpcnN0LXBhZ2UiPjxwYXRoIGQ9Ik0xOC40MSAxNi41OUwxMy44MiAxMmw0LjU5LTQuNTlMMTcgNmwtNiA2IDYgNnpNNiA2aDJ2MTJINnoiIC8+PC9nPgo8ZyBpZD0iZmxhZyI+PHBhdGggZD0iTTE0LjQgNkwxNCA0SDV2MTdoMnYtN2g1LjZsLjQgMmg3VjZ6IiAvPjwvZz4KPGcgaWQ9ImZsaWdodC1sYW5kIj48cGF0aCBkPSJNMi41IDE5aDE5djJoLTE5em03LjE4LTUuNzNsNC4zNSAxLjE2IDUuMzEgMS40MmMuOC4yMSAxLjYyLS4yNiAxLjg0LTEuMDYuMjEtLjgtLjI2LTEuNjItMS4wNi0xLjg0bC01LjMxLTEuNDItMi43Ni05LjAyTDEwLjEyIDJ2OC4yOEw1LjE1IDguOTVsLS45My0yLjMyLTEuNDUtLjM5djUuMTdsMS42LjQzIDUuMzEgMS40M3oiIC8+PC9nPgo8ZyBpZD0iZmxpZ2h0LXRha2VvZmYiPjxwYXRoIGQ9Ik0yLjUgMTloMTl2MmgtMTl6bTE5LjU3LTkuMzZjLS4yMS0uOC0xLjA0LTEuMjgtMS44NC0xLjA2TDE0LjkyIDEwbC02LjktNi40My0xLjkzLjUxIDQuMTQgNy4xNy00Ljk3IDEuMzMtMS45Ny0xLjU0LTEuNDUuMzkgMS44MiAzLjE2Ljc3IDEuMzMgMS42LS40MyA1LjMxLTEuNDIgNC4zNS0xLjE2TDIxIDExLjQ5Yy44MS0uMjMgMS4yOC0xLjA1IDEuMDctMS44NXoiIC8+PC9nPgo8ZyBpZD0iZmxpcC10by1iYWNrIj48cGF0aCBkPSJNOSA3SDd2MmgyVjd6bTAgNEg3djJoMnYtMnptMC04Yy0xLjExIDAtMiAuOS0yIDJoMlYzem00IDEyaC0ydjJoMnYtMnptNi0xMnYyaDJjMC0xLjEtLjktMi0yLTJ6bS02IDBoLTJ2MmgyVjN6TTkgMTd2LTJIN2MwIDEuMS44OSAyIDIgMnptMTAtNGgydi0yaC0ydjJ6bTAtNGgyVjdoLTJ2MnptMCA4YzEuMSAwIDItLjkgMi0yaC0ydjJ6TTUgN0gzdjEyYzAgMS4xLjg5IDIgMiAyaDEydi0ySDVWN3ptMTAtMmgyVjNoLTJ2MnptMCAxMmgydi0yaC0ydjJ6IiAvPjwvZz4KPGcgaWQ9ImZsaXAtdG8tZnJvbnQiPjxwYXRoIGQ9Ik0zIDEzaDJ2LTJIM3Yyem0wIDRoMnYtMkgzdjJ6bTIgNHYtMkgzYzAgMS4xLjg5IDIgMiAyek0zIDloMlY3SDN2MnptMTIgMTJoMnYtMmgtMnYyem00LTE4SDljLTEuMTEgMC0yIC45LTIgMnYxMGMwIDEuMS44OSAyIDIgMmgxMGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0wIDEySDlWNWgxMHYxMHptLTggNmgydi0yaC0ydjJ6bS00IDBoMnYtMkg3djJ6IiAvPjwvZz4KPGcgaWQ9ImZvbGRlciI+PHBhdGggZD0iTTEwIDRINGMtMS4xIDAtMS45OS45LTEuOTkgMkwyIDE4YzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJWOGMwLTEuMS0uOS0yLTItMmgtOGwtMi0yeiIgLz48L2c+CjxnIGlkPSJmb2xkZXItb3BlbiI+PHBhdGggZD0iTTIwIDZoLThsLTItMkg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY4YzAtMS4xLS45LTItMi0yem0wIDEySDRWOGgxNnYxMHoiIC8+PC9nPgo8ZyBpZD0iZm9sZGVyLXNoYXJlZCI+PHBhdGggZD0iTTIwIDZoLThsLTItMkg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY4YzAtMS4xLS45LTItMi0yem0tNSAzYzEuMSAwIDIgLjkgMiAycy0uOSAyLTIgMi0yLS45LTItMiAuOS0yIDItMnptNCA4aC04di0xYzAtMS4zMyAyLjY3LTIgNC0yczQgLjY3IDQgMnYxeiIgLz48L2c+CjxnIGlkPSJmb250LWRvd25sb2FkIj48cGF0aCBkPSJNOS45MyAxMy41aDQuMTRMMTIgNy45OHpNMjAgMkg0Yy0xLjEgMC0yIC45LTIgMnYxNmMwIDEuMS45IDIgMiAyaDE2YzEuMSAwIDItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6bS00LjA1IDE2LjVsLTEuMTQtM0g5LjE3bC0xLjEyIDNINS45Nmw1LjExLTEzaDEuODZsNS4xMSAxM2gtMi4wOXoiIC8+PC9nPgo8ZyBpZD0iZm9yd2FyZCI+PHBhdGggZD0iTTEyIDhWNGw4IDgtOCA4di00SDRWOHoiIC8+PC9nPgo8ZyBpZD0iZnVsbHNjcmVlbiI+PHBhdGggZD0iTTcgMTRINXY1aDV2LTJIN3YtM3ptLTItNGgyVjdoM1Y1SDV2NXptMTIgN2gtM3YyaDV2LTVoLTJ2M3pNMTQgNXYyaDN2M2gyVjVoLTV6IiAvPjwvZz4KPGcgaWQ9ImZ1bGxzY3JlZW4tZXhpdCI+PHBhdGggZD0iTTUgMTZoM3YzaDJ2LTVINXYyem0zLThINXYyaDVWNUg4djN6bTYgMTFoMnYtM2gzdi0yaC01djV6bTItMTFWNWgtMnY1aDVWOGgtM3oiIC8+PC9nPgo8ZyBpZD0iZy10cmFuc2xhdGUiPjxwYXRoIGQ9Ik0yMCA1aC05LjEyTDEwIDJINGMtMS4xIDAtMiAuOS0yIDJ2MTNjMCAxLjEuOSAyIDIgMmg3bDEgM2g4YzEuMSAwIDItLjkgMi0yVjdjMC0xLjEtLjktMi0yLTJ6TTcuMTcgMTQuNTljLTIuMjUgMC00LjA5LTEuODMtNC4wOS00LjA5czEuODMtNC4wOSA0LjA5LTQuMDljMS4wNCAwIDEuOTkuMzcgMi43NCAxLjA3bC4wNy4wNi0xLjIzIDEuMTgtLjA2LS4wNWMtLjI5LS4yNy0uNzgtLjU5LTEuNTItLjU5LTEuMzEgMC0yLjM4IDEuMDktMi4zOCAyLjQyczEuMDcgMi40MiAyLjM4IDIuNDJjMS4zNyAwIDEuOTYtLjg3IDIuMTItMS40Nkg3LjA4VjkuOTFoMy45NWwuMDEuMDdjLjA0LjIxLjA1LjQuMDUuNjEgMCAyLjM1LTEuNjEgNC0zLjkyIDR6bTYuMDMtMS43MWMuMzMuNi43NCAxLjE4IDEuMTkgMS43bC0uNTQuNTMtLjY1LTIuMjN6bS43Ny0uNzZoLS45OWwtLjMxLTEuMDRoMy45OXMtLjM0IDEuMzEtMS41NiAyLjc0Yy0uNTItLjYyLS44OS0xLjIzLTEuMTMtMS43ek0yMSAyMGMwIC41NS0uNDUgMS0xIDFoLTdsMi0yLS44MS0yLjc3LjkyLS45MkwxNy43OSAxOGwuNzMtLjczLTIuNzEtMi42OGMuOS0xLjAzIDEuNi0yLjI1IDEuOTItMy41MUgxOXYtMS4wNGgtMy42NFY5aC0xLjA0djEuMDRoLTEuOTZMMTEuMTggNkgyMGMuNTUgMCAxIC40NSAxIDF2MTN6IiAvPjwvZz4KPGcgaWQ9ImdhdmVsIj48cGF0aCBkPSJNMSAyMWgxMnYySDF6TTUuMjQ1IDguMDdsMi44My0yLjgyNyAxNC4xNCAxNC4xNDItMi44MjggMi44Mjh6TTEyLjMxNyAxbDUuNjU3IDUuNjU2LTIuODMgMi44My01LjY1NC01LjY2ek0zLjgyNSA5LjQ4NWw1LjY1NyA1LjY1Ny0yLjgyOCAyLjgyOC01LjY1Ny01LjY1N3oiIC8+PC9nPgo8ZyBpZD0iZ2VzdHVyZSI+PHBhdGggZD0iTTQuNTkgNi44OWMuNy0uNzEgMS40LTEuMzUgMS43MS0xLjIyLjUuMiAwIDEuMDMtLjMgMS41Mi0uMjUuNDItMi44NiAzLjg5LTIuODYgNi4zMSAwIDEuMjguNDggMi4zNCAxLjM0IDIuOTguNzUuNTYgMS43NC43MyAyLjY0LjQ2IDEuMDctLjMxIDEuOTUtMS40IDMuMDYtMi43NyAxLjIxLTEuNDkgMi44My0zLjQ0IDQuMDgtMy40NCAxLjYzIDAgMS42NSAxLjAxIDEuNzYgMS43OS0zLjc4LjY0LTUuMzggMy42Ny01LjM4IDUuMzcgMCAxLjcgMS40NCAzLjA5IDMuMjEgMy4wOSAxLjYzIDAgNC4yOS0xLjMzIDQuNjktNi4xSDIxdi0yLjVoLTIuNDdjLS4xNS0xLjY1LTEuMDktNC4yLTQuMDMtNC4yLTIuMjUgMC00LjE4IDEuOTEtNC45NCAyLjg0LS41OC43My0yLjA2IDIuNDgtMi4yOSAyLjcyLS4yNS4zLS42OC44NC0xLjExLjg0LS40NSAwLS43Mi0uODMtLjM2LTEuOTIuMzUtMS4wOSAxLjQtMi44NiAxLjg1LTMuNTIuNzgtMS4xNCAxLjMtMS45MiAxLjMtMy4yOEM4Ljk1IDMuNjkgNy4zMSAzIDYuNDQgMyA1LjEyIDMgMy45NyA0IDMuNzIgNC4yNWMtLjM2LjM2LS42Ni42Ni0uODguOTNsMS43NSAxLjcxem05LjI5IDExLjY2Yy0uMzEgMC0uNzQtLjI2LS43NC0uNzIgMC0uNi43My0yLjIgMi44Ny0yLjc2LS4zIDIuNjktMS40MyAzLjQ4LTIuMTMgMy40OHoiIC8+PC9nPgo8ZyBpZD0iZ2V0LWFwcCI+PHBhdGggZD0iTTE5IDloLTRWM0g5djZINWw3IDcgNy03ek01IDE4djJoMTR2LTJINXoiIC8+PC9nPgo8ZyBpZD0iZ2lmIj48cGF0aCBkPSJNMTEuNSA5SDEzdjZoLTEuNXpNOSA5SDZjLS42IDAtMSAuNS0xIDF2NGMwIC41LjQgMSAxIDFoM2MuNiAwIDEtLjUgMS0xdi0ySDguNXYxLjVoLTJ2LTNIMTBWMTBjMC0uNS0uNC0xLTEtMXptMTAgMS41VjloLTQuNXY2SDE2di0yaDJ2LTEuNWgtMnYtMXoiIC8+PC9nPgo8ZyBpZD0iZ3JhZGUiPjxwYXRoIGQ9Ik0xMiAxNy4yN0wxOC4xOCAyMWwtMS42NC03LjAzTDIyIDkuMjRsLTcuMTktLjYxTDEyIDIgOS4xOSA4LjYzIDIgOS4yNGw1LjQ2IDQuNzNMNS44MiAyMXoiIC8+PC9nPgo8ZyBpZD0iZ3JvdXAtd29yayI+PHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6TTggMTcuNWMtMS4zOCAwLTIuNS0xLjEyLTIuNS0yLjVzMS4xMi0yLjUgMi41LTIuNSAyLjUgMS4xMiAyLjUgMi41LTEuMTIgMi41LTIuNSAyLjV6TTkuNSA4YzAtMS4zOCAxLjEyLTIuNSAyLjUtMi41czIuNSAxLjEyIDIuNSAyLjUtMS4xMiAyLjUtMi41IDIuNVM5LjUgOS4zOCA5LjUgOHptNi41IDkuNWMtMS4zOCAwLTIuNS0xLjEyLTIuNS0yLjVzMS4xMi0yLjUgMi41LTIuNSAyLjUgMS4xMiAyLjUgMi41LTEuMTIgMi41LTIuNSAyLjV6IiAvPjwvZz4KPGcgaWQ9ImhlbHAiPjxwYXRoIGQ9Ik0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0xIDE3aC0ydi0yaDJ2MnptMi4wNy03Ljc1bC0uOS45MkMxMy40NSAxMi45IDEzIDEzLjUgMTMgMTVoLTJ2LS41YzAtMS4xLjQ1LTIuMSAxLjE3LTIuODNsMS4yNC0xLjI2Yy4zNy0uMzYuNTktLjg2LjU5LTEuNDEgMC0xLjEtLjktMi0yLTJzLTIgLjktMiAySDhjMC0yLjIxIDEuNzktNCA0LTRzNCAxLjc5IDQgNGMwIC44OC0uMzYgMS42OC0uOTMgMi4yNXoiIC8+PC9nPgo8ZyBpZD0iaGVscC1vdXRsaW5lIj48cGF0aCBkPSJNMTEgMThoMnYtMmgtMnYyem0xLTE2QzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0wIDE4Yy00LjQxIDAtOC0zLjU5LTgtOHMzLjU5LTggOC04IDggMy41OSA4IDgtMy41OSA4LTggOHptMC0xNGMtMi4yMSAwLTQgMS43OS00IDRoMmMwLTEuMS45LTIgMi0yczIgLjkgMiAyYzAgMi0zIDEuNzUtMyA1aDJjMC0yLjI1IDMtMi41IDMtNSAwLTIuMjEtMS43OS00LTQtNHoiIC8+PC9nPgo8ZyBpZD0iaGlnaGxpZ2h0LW9mZiI+PHBhdGggZD0iTTE0LjU5IDhMMTIgMTAuNTkgOS40MSA4IDggOS40MSAxMC41OSAxMiA4IDE0LjU5IDkuNDEgMTYgMTIgMTMuNDEgMTQuNTkgMTYgMTYgMTQuNTkgMTMuNDEgMTIgMTYgOS40MSAxNC41OSA4ek0xMiAyQzYuNDcgMiAyIDYuNDcgMiAxMnM0LjQ3IDEwIDEwIDEwIDEwLTQuNDcgMTAtMTBTMTcuNTMgMiAxMiAyem0wIDE4Yy00LjQxIDAtOC0zLjU5LTgtOHMzLjU5LTggOC04IDggMy41OSA4IDgtMy41OSA4LTggOHoiIC8+PC9nPgo8ZyBpZD0iaGlzdG9yeSI+PHBhdGggZD0iTTEzIDNjLTQuOTcgMC05IDQuMDMtOSA5SDFsMy44OSAzLjg5LjA3LjE0TDkgMTJINmMwLTMuODcgMy4xMy03IDctN3M3IDMuMTMgNyA3LTMuMTMgNy03IDdjLTEuOTMgMC0zLjY4LS43OS00Ljk0LTIuMDZsLTEuNDIgMS40MkM4LjI3IDE5Ljk5IDEwLjUxIDIxIDEzIDIxYzQuOTcgMCA5LTQuMDMgOS05cy00LjAzLTktOS05em0tMSA1djVsNC4yOCAyLjU0LjcyLTEuMjEtMy41LTIuMDhWOEgxMnoiIC8+PC9nPgo8ZyBpZD0iaG9tZSI+PHBhdGggZD0iTTEwIDIwdi02aDR2Nmg1di04aDNMMTIgMyAyIDEyaDN2OHoiIC8+PC9nPgo8ZyBpZD0iaG91cmdsYXNzLWVtcHR5Ij48cGF0aCBkPSJNNiAydjZoLjAxTDYgOC4wMSAxMCAxMmwtNCA0IC4wMS4wMUg2VjIyaDEydi01Ljk5aC0uMDFMMTggMTZsLTQtNCA0LTMuOTktLjAxLS4wMUgxOFYySDZ6bTEwIDE0LjVWMjBIOHYtMy41bDQtNCA0IDR6bS00LTVsLTQtNFY0aDh2My41bC00IDR6IiAvPjwvZz4KPGcgaWQ9ImhvdXJnbGFzcy1mdWxsIj48cGF0aCBkPSJNNiAydjZoLjAxTDYgOC4wMSAxMCAxMmwtNCA0IC4wMS4wMUg2VjIyaDEydi01Ljk5aC0uMDFMMTggMTZsLTQtNCA0LTMuOTktLjAxLS4wMUgxOFYySDZ6IiAvPjwvZz4KPGcgaWQ9Imh0dHAiPjxwYXRoIGQ9Ik00LjUgMTFoLTJWOUgxdjZoMS41di0yLjVoMlYxNUg2VjlINC41djJ6bTIuNS0uNWgxLjVWMTVIMTB2LTQuNWgxLjVWOUg3djEuNXptNS41IDBIMTRWMTVoMS41di00LjVIMTdWOWgtNC41djEuNXptOS0xLjVIMTh2NmgxLjV2LTJoMmMuOCAwIDEuNS0uNyAxLjUtMS41di0xYzAtLjgtLjctMS41LTEuNS0xLjV6bTAgMi41aC0ydi0xaDJ2MXoiIC8+PC9nPgo8ZyBpZD0iaHR0cHMiPjxwYXRoIGQ9Ik0xOCA4aC0xVjZjMC0yLjc2LTIuMjQtNS01LTVTNyAzLjI0IDcgNnYySDZjLTEuMSAwLTIgLjktMiAydjEwYzAgMS4xLjkgMiAyIDJoMTJjMS4xIDAgMi0uOSAyLTJWMTBjMC0xLjEtLjktMi0yLTJ6bS02IDljLTEuMSAwLTItLjktMi0ycy45LTIgMi0yIDIgLjkgMiAyLS45IDItMiAyem0zLjEtOUg4LjlWNmMwLTEuNzEgMS4zOS0zLjEgMy4xLTMuMSAxLjcxIDAgMy4xIDEuMzkgMy4xIDMuMXYyeiIgLz48L2c+CjxnIGlkPSJpbXBvcnRhbnQtZGV2aWNlcyI+PHBhdGggZD0iTTIzIDExLjAxTDE4IDExYy0uNTUgMC0xIC40NS0xIDF2OWMwIC41NS40NSAxIDEgMWg1Yy41NSAwIDEtLjQ1IDEtMXYtOWMwLS41NS0uNDUtLjk5LTEtLjk5ek0yMyAyMGgtNXYtN2g1djd6TTIwIDJIMkMuODkgMiAwIDIuODkgMCA0djEyYzAgMS4xLjg5IDIgMiAyaDd2Mkg3djJoOHYtMmgtMnYtMmgydi0ySDJWNGgxOHY1aDJWNGMwLTEuMTEtLjktMi0yLTJ6bS04LjAzIDdMMTEgNmwtLjk3IDNIN2wyLjQ3IDEuNzYtLjk0IDIuOTEgMi40Ny0xLjggMi40NyAxLjgtLjk0LTIuOTFMMTUgOWgtMy4wM3oiIC8+PC9nPgo8ZyBpZD0iaW5ib3giPjxwYXRoIGQ9Ik0xOSAzSDQuOTljLTEuMTEgMC0xLjk4Ljg5LTEuOTggMkwzIDE5YzAgMS4xLjg4IDIgMS45OSAySDE5YzEuMSAwIDItLjkgMi0yVjVjMC0xLjExLS45LTItMi0yem0wIDEyaC00YzAgMS42Ni0xLjM1IDMtMyAzcy0zLTEuMzQtMy0zSDQuOTlWNUgxOXYxMHoiIC8+PC9nPgo8ZyBpZD0iaW5kZXRlcm1pbmF0ZS1jaGVjay1ib3giPjxwYXRoIGQ9Ik0xOSAzSDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptLTIgMTBIN3YtMmgxMHYyeiIgLz48L2c+CjxnIGlkPSJpbmZvIj48cGF0aCBkPSJNMTIgMkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptMSAxNWgtMnYtNmgydjZ6bTAtOGgtMlY3aDJ2MnoiIC8+PC9nPgo8ZyBpZD0iaW5mby1vdXRsaW5lIj48cGF0aCBkPSJNMTEgMTdoMnYtNmgtMnY2em0xLTE1QzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0wIDE4Yy00LjQxIDAtOC0zLjU5LTgtOHMzLjU5LTggOC04IDggMy41OSA4IDgtMy41OSA4LTggOHpNMTEgOWgyVjdoLTJ2MnoiIC8+PC9nPgo8ZyBpZD0iaW5wdXQiPjxwYXRoIGQ9Ik0yMSAzLjAxSDNjLTEuMSAwLTIgLjktMiAyVjloMlY0Ljk5aDE4djE0LjAzSDNWMTVIMXY0LjAxYzAgMS4xLjkgMS45OCAyIDEuOThoMThjMS4xIDAgMi0uODggMi0xLjk4di0xNGMwLTEuMTEtLjktMi0yLTJ6TTExIDE2bDQtNC00LTR2M0gxdjJoMTB2M3oiIC8+PC9nPgo8ZyBpZD0iaW52ZXJ0LWNvbG9ycyI+PHBhdGggZD0iTTE3LjY2IDcuOTNMMTIgMi4yNyA2LjM0IDcuOTNjLTMuMTIgMy4xMi0zLjEyIDguMTkgMCAxMS4zMUM3LjkgMjAuOCA5Ljk1IDIxLjU4IDEyIDIxLjU4YzIuMDUgMCA0LjEtLjc4IDUuNjYtMi4zNCAzLjEyLTMuMTIgMy4xMi04LjE5IDAtMTEuMzF6TTEyIDE5LjU5Yy0xLjYgMC0zLjExLS42Mi00LjI0LTEuNzZDNi42MiAxNi42OSA2IDE1LjE5IDYgMTMuNTlzLjYyLTMuMTEgMS43Ni00LjI0TDEyIDUuMXYxNC40OXoiIC8+PC9nPgo8ZyBpZD0ibGFiZWwiPjxwYXRoIGQ9Ik0xNy42MyA1Ljg0QzE3LjI3IDUuMzMgMTYuNjcgNSAxNiA1TDUgNS4wMUMzLjkgNS4wMSAzIDUuOSAzIDd2MTBjMCAxLjEuOSAxLjk5IDIgMS45OUwxNiAxOWMuNjcgMCAxLjI3LS4zMyAxLjYzLS44NEwyMiAxMmwtNC4zNy02LjE2eiIgLz48L2c+CjxnIGlkPSJsYWJlbC1vdXRsaW5lIj48cGF0aCBkPSJNMTcuNjMgNS44NEMxNy4yNyA1LjMzIDE2LjY3IDUgMTYgNUw1IDUuMDFDMy45IDUuMDEgMyA1LjkgMyA3djEwYzAgMS4xLjkgMS45OSAyIDEuOTlMMTYgMTljLjY3IDAgMS4yNy0uMzMgMS42My0uODRMMjIgMTJsLTQuMzctNi4xNnpNMTYgMTdINVY3aDExbDMuNTUgNUwxNiAxN3oiIC8+PC9nPgo8ZyBpZD0ibGFuZ3VhZ2UiPjxwYXRoIGQ9Ik0xMS45OSAyQzYuNDcgMiAyIDYuNDggMiAxMnM0LjQ3IDEwIDkuOTkgMTBDMTcuNTIgMjIgMjIgMTcuNTIgMjIgMTJTMTcuNTIgMiAxMS45OSAyem02LjkzIDZoLTIuOTVjLS4zMi0xLjI1LS43OC0yLjQ1LTEuMzgtMy41NiAxLjg0LjYzIDMuMzcgMS45MSA0LjMzIDMuNTZ6TTEyIDQuMDRjLjgzIDEuMiAxLjQ4IDIuNTMgMS45MSAzLjk2aC0zLjgyYy40My0xLjQzIDEuMDgtMi43NiAxLjkxLTMuOTZ6TTQuMjYgMTRDNC4xIDEzLjM2IDQgMTIuNjkgNCAxMnMuMS0xLjM2LjI2LTJoMy4zOGMtLjA4LjY2LS4xNCAxLjMyLS4xNCAyIDAgLjY4LjA2IDEuMzQuMTQgMkg0LjI2em0uODIgMmgyLjk1Yy4zMiAxLjI1Ljc4IDIuNDUgMS4zOCAzLjU2LTEuODQtLjYzLTMuMzctMS45LTQuMzMtMy41NnptMi45NS04SDUuMDhjLjk2LTEuNjYgMi40OS0yLjkzIDQuMzMtMy41NkM4LjgxIDUuNTUgOC4zNSA2Ljc1IDguMDMgOHpNMTIgMTkuOTZjLS44My0xLjItMS40OC0yLjUzLTEuOTEtMy45NmgzLjgyYy0uNDMgMS40My0xLjA4IDIuNzYtMS45MSAzLjk2ek0xNC4zNCAxNEg5LjY2Yy0uMDktLjY2LS4xNi0xLjMyLS4xNi0yIDAtLjY4LjA3LTEuMzUuMTYtMmg0LjY4Yy4wOS42NS4xNiAxLjMyLjE2IDIgMCAuNjgtLjA3IDEuMzQtLjE2IDJ6bS4yNSA1LjU2Yy42LTEuMTEgMS4wNi0yLjMxIDEuMzgtMy41NmgyLjk1Yy0uOTYgMS42NS0yLjQ5IDIuOTMtNC4zMyAzLjU2ek0xNi4zNiAxNGMuMDgtLjY2LjE0LTEuMzIuMTQtMiAwLS42OC0uMDYtMS4zNC0uMTQtMmgzLjM4Yy4xNi42NC4yNiAxLjMxLjI2IDJzLS4xIDEuMzYtLjI2IDJoLTMuMzh6IiAvPjwvZz4KPGcgaWQ9Imxhc3QtcGFnZSI+PHBhdGggZD0iTTUuNTkgNy40MUwxMC4xOCAxMmwtNC41OSA0LjU5TDcgMThsNi02LTYtNnpNMTYgNmgydjEyaC0yeiIgLz48L2c+CjxnIGlkPSJsYXVuY2giPjxwYXRoIGQ9Ik0xOSAxOUg1VjVoN1YzSDVjLTEuMTEgMC0yIC45LTIgMnYxNGMwIDEuMS44OSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMnYtN2gtMnY3ek0xNCAzdjJoMy41OWwtOS44MyA5LjgzIDEuNDEgMS40MUwxOSA2LjQxVjEwaDJWM2gtN3oiIC8+PC9nPgo8ZyBpZD0ibGlnaHRidWxiLW91dGxpbmUiPjxwYXRoIGQ9Ik05IDIxYzAgLjU1LjQ1IDEgMSAxaDRjLjU1IDAgMS0uNDUgMS0xdi0xSDl2MXptMy0xOUM4LjE0IDIgNSA1LjE0IDUgOWMwIDIuMzggMS4xOSA0LjQ3IDMgNS43NFYxN2MwIC41NS40NSAxIDEgMWg2Yy41NSAwIDEtLjQ1IDEtMXYtMi4yNmMxLjgxLTEuMjcgMy0zLjM2IDMtNS43NCAwLTMuODYtMy4xNC03LTctN3ptMi44NSAxMS4xbC0uODUuNlYxNmgtNHYtMi4zbC0uODUtLjZDNy44IDEyLjE2IDcgMTAuNjMgNyA5YzAtMi43NiAyLjI0LTUgNS01czUgMi4yNCA1IDVjMCAxLjYzLS44IDMuMTYtMi4xNSA0LjF6IiAvPjwvZz4KPGcgaWQ9ImxpbmUtc3R5bGUiPjxwYXRoIGQ9Ik0zIDE2aDV2LTJIM3Yyem02LjUgMGg1di0yaC01djJ6bTYuNSAwaDV2LTJoLTV2MnpNMyAyMGgydi0ySDN2MnptNCAwaDJ2LTJIN3Yyem00IDBoMnYtMmgtMnYyem00IDBoMnYtMmgtMnYyem00IDBoMnYtMmgtMnYyek0zIDEyaDh2LTJIM3Yyem0xMCAwaDh2LTJoLTh2MnpNMyA0djRoMThWNEgzeiIgLz48L2c+CjxnIGlkPSJsaW5lLXdlaWdodCI+PHBhdGggZD0iTTMgMTdoMTh2LTJIM3Yyem0wIDNoMTh2LTFIM3Yxem0wLTdoMTh2LTNIM3Yzem0wLTl2NGgxOFY0SDN6IiAvPjwvZz4KPGcgaWQ9ImxpbmsiPjxwYXRoIGQ9Ik0zLjkgMTJjMC0xLjcxIDEuMzktMy4xIDMuMS0zLjFoNFY3SDdjLTIuNzYgMC01IDIuMjQtNSA1czIuMjQgNSA1IDVoNHYtMS45SDdjLTEuNzEgMC0zLjEtMS4zOS0zLjEtMy4xek04IDEzaDh2LTJIOHYyem05LTZoLTR2MS45aDRjMS43MSAwIDMuMSAxLjM5IDMuMSAzLjFzLTEuMzkgMy4xLTMuMSAzLjFoLTRWMTdoNGMyLjc2IDAgNS0yLjI0IDUtNXMtMi4yNC01LTUtNXoiIC8+PC9nPgo8ZyBpZD0ibGlzdCI+PHBhdGggZD0iTTMgMTNoMnYtMkgzdjJ6bTAgNGgydi0ySDN2MnptMC04aDJWN0gzdjJ6bTQgNGgxNHYtMkg3djJ6bTAgNGgxNHYtMkg3djJ6TTcgN3YyaDE0VjdIN3oiIC8+PC9nPgo8ZyBpZD0ibG9jayI+PHBhdGggZD0iTTE4IDhoLTFWNmMwLTIuNzYtMi4yNC01LTUtNVM3IDMuMjQgNyA2djJINmMtMS4xIDAtMiAuOS0yIDJ2MTBjMCAxLjEuOSAyIDIgMmgxMmMxLjEgMCAyLS45IDItMlYxMGMwLTEuMS0uOS0yLTItMnptLTYgOWMtMS4xIDAtMi0uOS0yLTJzLjktMiAyLTIgMiAuOSAyIDItLjkgMi0yIDJ6bTMuMS05SDguOVY2YzAtMS43MSAxLjM5LTMuMSAzLjEtMy4xIDEuNzEgMCAzLjEgMS4zOSAzLjEgMy4xdjJ6IiAvPjwvZz4KPGcgaWQ9ImxvY2stb3BlbiI+PHBhdGggZD0iTTEyIDE3YzEuMSAwIDItLjkgMi0ycy0uOS0yLTItMi0yIC45LTIgMiAuOSAyIDIgMnptNi05aC0xVjZjMC0yLjc2LTIuMjQtNS01LTVTNyAzLjI0IDcgNmgxLjljMC0xLjcxIDEuMzktMy4xIDMuMS0zLjEgMS43MSAwIDMuMSAxLjM5IDMuMSAzLjF2Mkg2Yy0xLjEgMC0yIC45LTIgMnYxMGMwIDEuMS45IDIgMiAyaDEyYzEuMSAwIDItLjkgMi0yVjEwYzAtMS4xLS45LTItMi0yem0wIDEySDZWMTBoMTJ2MTB6IiAvPjwvZz4KPGcgaWQ9ImxvY2stb3V0bGluZSI+PHBhdGggZD0iTTEyIDE3YzEuMSAwIDItLjkgMi0ycy0uOS0yLTItMi0yIC45LTIgMiAuOSAyIDIgMnptNi05aC0xVjZjMC0yLjc2LTIuMjQtNS01LTVTNyAzLjI0IDcgNnYySDZjLTEuMSAwLTIgLjktMiAydjEwYzAgMS4xLjkgMiAyIDJoMTJjMS4xIDAgMi0uOSAyLTJWMTBjMC0xLjEtLjktMi0yLTJ6TTguOSA2YzAtMS43MSAxLjM5LTMuMSAzLjEtMy4xczMuMSAxLjM5IDMuMSAzLjF2Mkg4LjlWNnpNMTggMjBINlYxMGgxMnYxMHoiIC8+PC9nPgo8ZyBpZD0ibG93LXByaW9yaXR5Ij48cGF0aCBkPSJNMTQgNWg4djJoLTh6bTAgNS41aDh2MmgtOHptMCA1LjVoOHYyaC04ek0yIDExLjVDMiAxNS4wOCA0LjkyIDE4IDguNSAxOEg5djJsMy0zLTMtM3YyaC0uNUM2LjAyIDE2IDQgMTMuOTggNCAxMS41UzYuMDIgNyA4LjUgN0gxMlY1SDguNUM0LjkyIDUgMiA3LjkyIDIgMTEuNXoiIC8+PC9nPgo8ZyBpZD0ibG95YWx0eSI+PHBhdGggZD0iTTIxLjQxIDExLjU4bC05LTlDMTIuMDUgMi4yMiAxMS41NSAyIDExIDJINGMtMS4xIDAtMiAuOS0yIDJ2N2MwIC41NS4yMiAxLjA1LjU5IDEuNDJsOSA5Yy4zNi4zNi44Ni41OCAxLjQxLjU4LjU1IDAgMS4wNS0uMjIgMS40MS0uNTlsNy03Yy4zNy0uMzYuNTktLjg2LjU5LTEuNDEgMC0uNTUtLjIzLTEuMDYtLjU5LTEuNDJ6TTUuNSA3QzQuNjcgNyA0IDYuMzMgNCA1LjVTNC42NyA0IDUuNSA0IDcgNC42NyA3IDUuNSA2LjMzIDcgNS41IDd6bTExLjc3IDguMjdMMTMgMTkuNTRsLTQuMjctNC4yN0M4LjI4IDE0LjgxIDggMTQuMTkgOCAxMy41YzAtMS4zOCAxLjEyLTIuNSAyLjUtMi41LjY5IDAgMS4zMi4yOCAxLjc3Ljc0bC43My43Mi43My0uNzNjLjQ1LS40NSAxLjA4LS43MyAxLjc3LS43MyAxLjM4IDAgMi41IDEuMTIgMi41IDIuNSAwIC42OS0uMjggMS4zMi0uNzMgMS43N3oiIC8+PC9nPgo8ZyBpZD0ibWFpbCI+PHBhdGggZD0iTTIwIDRINGMtMS4xIDAtMS45OS45LTEuOTkgMkwyIDE4YzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJWNmMwLTEuMS0uOS0yLTItMnptMCA0bC04IDUtOC01VjZsOCA1IDgtNXYyeiIgLz48L2c+CjxnIGlkPSJtYXJrdW5yZWFkIj48cGF0aCBkPSJNMjAgNEg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0yem0wIDRsLTggNS04LTVWNmw4IDUgOC01djJ6IiAvPjwvZz4KPGcgaWQ9Im1hcmt1bnJlYWQtbWFpbGJveCI+PHBhdGggZD0iTTIwIDZIMTB2Nkg4VjRoNlYwSDZ2Nkg0Yy0xLjEgMC0yIC45LTIgMnYxMmMwIDEuMS45IDIgMiAyaDE2YzEuMSAwIDItLjkgMi0yVjhjMC0xLjEtLjktMi0yLTJ6IiAvPjwvZz4KPGcgaWQ9Im1lbnUiPjxwYXRoIGQ9Ik0zIDE4aDE4di0ySDN2MnptMC01aDE4di0ySDN2MnptMC03djJoMThWNkgzeiIgLz48L2c+CjxnIGlkPSJtb3JlLWhvcml6Ij48cGF0aCBkPSJNNiAxMGMtMS4xIDAtMiAuOS0yIDJzLjkgMiAyIDIgMi0uOSAyLTItLjktMi0yLTJ6bTEyIDBjLTEuMSAwLTIgLjktMiAycy45IDIgMiAyIDItLjkgMi0yLS45LTItMi0yem0tNiAwYy0xLjEgMC0yIC45LTIgMnMuOSAyIDIgMiAyLS45IDItMi0uOS0yLTItMnoiIC8+PC9nPgo8ZyBpZD0ibW9yZS12ZXJ0Ij48cGF0aCBkPSJNMTIgOGMxLjEgMCAyLS45IDItMnMtLjktMi0yLTItMiAuOS0yIDIgLjkgMiAyIDJ6bTAgMmMtMS4xIDAtMiAuOS0yIDJzLjkgMiAyIDIgMi0uOSAyLTItLjktMi0yLTJ6bTAgNmMtMS4xIDAtMiAuOS0yIDJzLjkgMiAyIDIgMi0uOSAyLTItLjktMi0yLTJ6IiAvPjwvZz4KPGcgaWQ9Im1vdG9yY3ljbGUiPjxwYXRoIGQ9Ik0xOS40NCA5LjAzTDE1LjQxIDVIMTF2MmgzLjU5bDIgMkg1Yy0yLjggMC01IDIuMi01IDVzMi4yIDUgNSA1YzIuNDYgMCA0LjQ1LTEuNjkgNC45LTRoMS42NWwyLjc3LTIuNzdjLS4yMS41NC0uMzIgMS4xNC0uMzIgMS43NyAwIDIuOCAyLjIgNSA1IDVzNS0yLjIgNS01YzAtMi42NS0xLjk3LTQuNzctNC41Ni00Ljk3ek03LjgyIDE1QzcuNCAxNi4xNSA2LjI4IDE3IDUgMTdjLTEuNjMgMC0zLTEuMzctMy0zczEuMzctMyAzLTNjMS4yOCAwIDIuNC44NSAyLjgyIDJINXYyaDIuODJ6TTE5IDE3Yy0xLjY2IDAtMy0xLjM0LTMtM3MxLjM0LTMgMy0zIDMgMS4zNCAzIDMtMS4zNCAzLTMgM3oiIC8+PC9nPgo8ZyBpZD0ibW92ZS10by1pbmJveCI+PHBhdGggZD0iTTE5IDNINC45OWMtMS4xMSAwLTEuOTguOS0xLjk4IDJMMyAxOWMwIDEuMS44OCAyIDEuOTkgMkgxOWMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0wIDEyaC00YzAgMS42Ni0xLjM1IDMtMyAzcy0zLTEuMzQtMy0zSDQuOTlWNUgxOXYxMHptLTMtNWgtMlY3aC00djNIOGw0IDQgNC00eiIgLz48L2c+CjxnIGlkPSJuZXh0LXdlZWsiPjxwYXRoIGQ9Ik0yMCA3aC00VjVjMC0uNTUtLjIyLTEuMDUtLjU5LTEuNDFDMTUuMDUgMy4yMiAxNC41NSAzIDE0IDNoLTRjLTEuMSAwLTIgLjktMiAydjJINGMtMS4xIDAtMiAuOS0yIDJ2MTFjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY5YzAtMS4xLS45LTItMi0yek0xMCA1aDR2MmgtNFY1em0xIDEzLjVsLTEtMSAzLTMtMy0zIDEtMSA0IDQtNCA0eiIgLz48L2c+CjxnIGlkPSJub3RlLWFkZCI+PHBhdGggZD0iTTE0IDJINmMtMS4xIDAtMS45OS45LTEuOTkgMkw0IDIwYzAgMS4xLjg5IDIgMS45OSAySDE4YzEuMSAwIDItLjkgMi0yVjhsLTYtNnptMiAxNGgtM3YzaC0ydi0zSDh2LTJoM3YtM2gydjNoM3Yyem0tMy03VjMuNUwxOC41IDlIMTN6IiAvPjwvZz4KPGcgaWQ9Im9mZmxpbmUtcGluIj48cGF0aCBkPSJNMTIgMkM2LjUgMiAyIDYuNSAyIDEyczQuNSAxMCAxMCAxMCAxMC00LjUgMTAtMTBTMTcuNSAyIDEyIDJ6bTUgMTZIN3YtMmgxMHYyem0tNi43LTRMNyAxMC43bDEuNC0xLjQgMS45IDEuOSA1LjMtNS4zTDE3IDcuMyAxMC4zIDE0eiIgLz48L2c+CjxnIGlkPSJvcGFjaXR5Ij48cGF0aCBkPSJNMTcuNjYgOEwxMiAyLjM1IDYuMzQgOEM0Ljc4IDkuNTYgNCAxMS42NCA0IDEzLjY0cy43OCA0LjExIDIuMzQgNS42NyAzLjYxIDIuMzUgNS42NiAyLjM1IDQuMS0uNzkgNS42Ni0yLjM1UzIwIDE1LjY0IDIwIDEzLjY0IDE5LjIyIDkuNTYgMTcuNjYgOHpNNiAxNGMuMDEtMiAuNjItMy4yNyAxLjc2LTQuNEwxMiA1LjI3bDQuMjQgNC4zOEMxNy4zOCAxMC43NyAxNy45OSAxMiAxOCAxNEg2eiIgLz48L2c+CjxnIGlkPSJvcGVuLWluLWJyb3dzZXIiPjxwYXRoIGQ9Ik0xOSA0SDVjLTEuMTEgMC0yIC45LTIgMnYxMmMwIDEuMS44OSAyIDIgMmg0di0ySDVWOGgxNHYxMGgtNHYyaDRjMS4xIDAgMi0uOSAyLTJWNmMwLTEuMS0uODktMi0yLTJ6bS03IDZsLTQgNGgzdjZoMnYtNmgzbC00LTR6IiAvPjwvZz4KPGcgaWQ9Im9wZW4taW4tbmV3Ij48cGF0aCBkPSJNMTkgMTlINVY1aDdWM0g1Yy0xLjExIDAtMiAuOS0yIDJ2MTRjMCAxLjEuODkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJ2LTdoLTJ2N3pNMTQgM3YyaDMuNTlsLTkuODMgOS44MyAxLjQxIDEuNDFMMTkgNi40MVYxMGgyVjNoLTd6IiAvPjwvZz4KPGcgaWQ9Im9wZW4td2l0aCI+PHBhdGggZD0iTTEwIDloNFY2aDNsLTUtNS01IDVoM3Yzem0tMSAxSDZWN2wtNSA1IDUgNXYtM2gzdi00em0xNCAybC01LTV2M2gtM3Y0aDN2M2w1LTV6bS05IDNoLTR2M0g3bDUgNSA1LTVoLTN2LTN6IiAvPjwvZz4KPGcgaWQ9InBhZ2V2aWV3Ij48cGF0aCBkPSJNMTEuNSA5QzEwLjEyIDkgOSAxMC4xMiA5IDExLjVzMS4xMiAyLjUgMi41IDIuNSAyLjUtMS4xMiAyLjUtMi41UzEyLjg4IDkgMTEuNSA5ek0yMCA0SDRjLTEuMSAwLTIgLjktMiAydjEyYzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJWNmMwLTEuMS0uOS0yLTItMnptLTMuMjEgMTQuMjFsLTIuOTEtMi45MWMtLjY5LjQ0LTEuNTEuNy0yLjM5LjdDOS4wMSAxNiA3IDEzLjk5IDcgMTEuNVM5LjAxIDcgMTEuNSA3IDE2IDkuMDEgMTYgMTEuNWMwIC44OC0uMjYgMS42OS0uNyAyLjM5bDIuOTEgMi45LTEuNDIgMS40MnoiIC8+PC9nPgo8ZyBpZD0icGFuLXRvb2wiPjxwYXRoIGQ9Ik0yMyA1LjVWMjBjMCAyLjItMS44IDQtNCA0aC03LjNjLTEuMDggMC0yLjEtLjQzLTIuODUtMS4xOUwxIDE0LjgzczEuMjYtMS4yMyAxLjMtMS4yNWMuMjItLjE5LjQ5LS4yOS43OS0uMjkuMjIgMCAuNDIuMDYuNi4xNi4wNC4wMSA0LjMxIDIuNDYgNC4zMSAyLjQ2VjRjMC0uODMuNjctMS41IDEuNS0xLjVTMTEgMy4xNyAxMSA0djdoMVYxLjVjMC0uODMuNjctMS41IDEuNS0xLjVTMTUgLjY3IDE1IDEuNVYxMWgxVjIuNWMwLS44My42Ny0xLjUgMS41LTEuNXMxLjUuNjcgMS41IDEuNVYxMWgxVjUuNWMwLS44My42Ny0xLjUgMS41LTEuNXMxLjUuNjcgMS41IDEuNXoiIC8+PC9nPgo8ZyBpZD0icGF5bWVudCI+PHBhdGggZD0iTTIwIDRINGMtMS4xMSAwLTEuOTkuODktMS45OSAyTDIgMThjMCAxLjExLjg5IDIgMiAyaDE2YzEuMTEgMCAyLS44OSAyLTJWNmMwLTEuMTEtLjg5LTItMi0yem0wIDE0SDR2LTZoMTZ2NnptMC0xMEg0VjZoMTZ2MnoiIC8+PC9nPgo8ZyBpZD0icGVybS1jYW1lcmEtbWljIj48cGF0aCBkPSJNMjAgNWgtMy4xN0wxNSAzSDlMNy4xNyA1SDRjLTEuMSAwLTIgLjktMiAydjEyYzAgMS4xLjkgMiAyIDJoN3YtMi4wOWMtMi44My0uNDgtNS0yLjk0LTUtNS45MWgyYzAgMi4yMSAxLjc5IDQgNCA0czQtMS43OSA0LTRoMmMwIDIuOTctMi4xNyA1LjQzLTUgNS45MVYyMWg3YzEuMSAwIDItLjkgMi0yVjdjMC0xLjEtLjktMi0yLTJ6bS02IDhjMCAxLjEtLjkgMi0yIDJzLTItLjktMi0yVjljMC0xLjEuOS0yIDItMnMyIC45IDIgMnY0eiIgLz48L2c+CjxnIGlkPSJwZXJtLWNvbnRhY3QtY2FsZW5kYXIiPjxwYXRoIGQ9Ik0xOSAzaC0xVjFoLTJ2Mkg4VjFINnYySDVjLTEuMTEgMC0yIC45LTIgMnYxNGMwIDEuMS44OSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tNyAzYzEuNjYgMCAzIDEuMzQgMyAzcy0xLjM0IDMtMyAzLTMtMS4zNC0zLTMgMS4zNC0zIDMtM3ptNiAxMkg2di0xYzAtMiA0LTMuMSA2LTMuMXM2IDEuMSA2IDMuMXYxeiIgLz48L2c+CjxnIGlkPSJwZXJtLWRhdGEtc2V0dGluZyI+PHBhdGggZD0iTTE4Ljk5IDExLjVjLjM0IDAgLjY3LjAzIDEgLjA3TDIwIDAgMCAyMGgxMS41NmMtLjA0LS4zMy0uMDctLjY2LS4wNy0xIDAtNC4xNCAzLjM2LTcuNSA3LjUtNy41em0zLjcxIDcuOTljLjAyLS4xNi4wNC0uMzIuMDQtLjQ5IDAtLjE3LS4wMS0uMzMtLjA0LS40OWwxLjA2LS44M2MuMDktLjA4LjEyLS4yMS4wNi0uMzJsLTEtMS43M2MtLjA2LS4xMS0uMTktLjE1LS4zMS0uMTFsLTEuMjQuNWMtLjI2LS4yLS41NC0uMzctLjg1LS40OWwtLjE5LTEuMzJjLS4wMS0uMTItLjEyLS4yMS0uMjQtLjIxaC0yYy0uMTIgMC0uMjMuMDktLjI1LjIxbC0uMTkgMS4zMmMtLjMuMTMtLjU5LjI5LS44NS40OWwtMS4yNC0uNWMtLjExLS4wNC0uMjQgMC0uMzEuMTFsLTEgMS43M2MtLjA2LjExLS4wNC4yNC4wNi4zMmwxLjA2LjgzYy0uMDIuMTYtLjAzLjMyLS4wMy40OSAwIC4xNy4wMS4zMy4wMy40OWwtMS4wNi44M2MtLjA5LjA4LS4xMi4yMS0uMDYuMzJsMSAxLjczYy4wNi4xMS4xOS4xNS4zMS4xMWwxLjI0LS41Yy4yNi4yLjU0LjM3Ljg1LjQ5bC4xOSAxLjMyYy4wMi4xMi4xMi4yMS4yNS4yMWgyYy4xMiAwIC4yMy0uMDkuMjUtLjIxbC4xOS0xLjMyYy4zLS4xMy41OS0uMjkuODQtLjQ5bDEuMjUuNWMuMTEuMDQuMjQgMCAuMzEtLjExbDEtMS43M2MuMDYtLjExLjAzLS4yNC0uMDYtLjMybC0xLjA3LS44M3ptLTMuNzEgMS4wMWMtLjgzIDAtMS41LS42Ny0xLjUtMS41cy42Ny0xLjUgMS41LTEuNSAxLjUuNjcgMS41IDEuNS0uNjcgMS41LTEuNSAxLjV6IiAvPjwvZz4KPGcgaWQ9InBlcm0tZGV2aWNlLWluZm9ybWF0aW9uIj48cGF0aCBkPSJNMTMgN2gtMnYyaDJWN3ptMCA0aC0ydjZoMnYtNnptNC05Ljk5TDcgMWMtMS4xIDAtMiAuOS0yIDJ2MThjMCAxLjEuOSAyIDIgMmgxMGMxLjEgMCAyLS45IDItMlYzYzAtMS4xLS45LTEuOTktMi0xLjk5ek0xNyAxOUg3VjVoMTB2MTR6IiAvPjwvZz4KPGcgaWQ9InBlcm0taWRlbnRpdHkiPjxwYXRoIGQ9Ik0xMiA1LjljMS4xNiAwIDIuMS45NCAyLjEgMi4xcy0uOTQgMi4xLTIuMSAyLjFTOS45IDkuMTYgOS45IDhzLjk0LTIuMSAyLjEtMi4xbTAgOWMyLjk3IDAgNi4xIDEuNDYgNi4xIDIuMXYxLjFINS45VjE3YzAtLjY0IDMuMTMtMi4xIDYuMS0yLjFNMTIgNEM5Ljc5IDQgOCA1Ljc5IDggOHMxLjc5IDQgNCA0IDQtMS43OSA0LTQtMS43OS00LTQtNHptMCA5Yy0yLjY3IDAtOCAxLjM0LTggNHYzaDE2di0zYzAtMi42Ni01LjMzLTQtOC00eiIgLz48L2c+CjxnIGlkPSJwZXJtLW1lZGlhIj48cGF0aCBkPSJNMiA2SDB2NWguMDFMMCAyMGMwIDEuMS45IDIgMiAyaDE4di0ySDJWNnptMjAtMmgtOGwtMi0ySDZjLTEuMSAwLTEuOTkuOS0xLjk5IDJMNCAxNmMwIDEuMS45IDIgMiAyaDE2YzEuMSAwIDItLjkgMi0yVjZjMC0xLjEtLjktMi0yLTJ6TTcgMTVsNC41LTYgMy41IDQuNTEgMi41LTMuMDFMMjEgMTVIN3oiIC8+PC9nPgo8ZyBpZD0icGVybS1waG9uZS1tc2ciPjxwYXRoIGQ9Ik0yMCAxNS41Yy0xLjI1IDAtMi40NS0uMi0zLjU3LS41Ny0uMzUtLjExLS43NC0uMDMtMS4wMi4yNGwtMi4yIDIuMmMtMi44My0xLjQ0LTUuMTUtMy43NS02LjU5LTYuNThsMi4yLTIuMjFjLjI4LS4yNy4zNi0uNjYuMjUtMS4wMUM4LjcgNi40NSA4LjUgNS4yNSA4LjUgNGMwLS41NS0uNDUtMS0xLTFINGMtLjU1IDAtMSAuNDUtMSAxIDAgOS4zOSA3LjYxIDE3IDE3IDE3IC41NSAwIDEtLjQ1IDEtMXYtMy41YzAtLjU1LS40NS0xLTEtMXpNMTIgM3YxMGwzLTNoNlYzaC05eiIgLz48L2c+CjxnIGlkPSJwZXJtLXNjYW4td2lmaSI+PHBhdGggZD0iTTEyIDNDNi45NSAzIDMuMTUgNC44NSAwIDcuMjNMMTIgMjIgMjQgNy4yNUMyMC44NSA0Ljg3IDE3LjA1IDMgMTIgM3ptMSAxM2gtMnYtNmgydjZ6bS0yLThWNmgydjJoLTJ6IiAvPjwvZz4KPGcgaWQ9InBldHMiPjxjaXJjbGUgY3g9IjQuNSIgY3k9IjkuNSIgcj0iMi41IiAvPjxjaXJjbGUgY3g9IjkiIGN5PSI1LjUiIHI9IjIuNSIgLz48Y2lyY2xlIGN4PSIxNSIgY3k9IjUuNSIgcj0iMi41IiAvPjxjaXJjbGUgY3g9IjE5LjUiIGN5PSI5LjUiIHI9IjIuNSIgLz48cGF0aCBkPSJNMTcuMzQgMTQuODZjLS44Ny0xLjAyLTEuNi0xLjg5LTIuNDgtMi45MS0uNDYtLjU0LTEuMDUtMS4wOC0xLjc1LTEuMzItLjExLS4wNC0uMjItLjA3LS4zMy0uMDktLjI1LS4wNC0uNTItLjA0LS43OC0uMDRzLS41MyAwLS43OS4wNWMtLjExLjAyLS4yMi4wNS0uMzMuMDktLjcuMjQtMS4yOC43OC0xLjc1IDEuMzItLjg3IDEuMDItMS42IDEuODktMi40OCAyLjkxLTEuMzEgMS4zMS0yLjkyIDIuNzYtMi42MiA0Ljc5LjI5IDEuMDIgMS4wMiAyLjAzIDIuMzMgMi4zMi43My4xNSAzLjA2LS40NCA1LjU0LS40NGguMThjMi40OCAwIDQuODEuNTggNS41NC40NCAxLjMxLS4yOSAyLjA0LTEuMzEgMi4zMy0yLjMyLjMxLTIuMDQtMS4zLTMuNDktMi42MS00Ljh6IiAvPjwvZz4KPGcgaWQ9InBpY3R1cmUtaW4tcGljdHVyZSI+PHBhdGggZD0iTTE5IDdoLTh2Nmg4Vjd6bTItNEgzYy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDEuOTggMiAxLjk4aDE4YzEuMSAwIDItLjg4IDItMS45OFY1YzAtMS4xLS45LTItMi0yem0wIDE2LjAxSDNWNC45OGgxOHYxNC4wM3oiIC8+PC9nPgo8ZyBpZD0icGljdHVyZS1pbi1waWN0dXJlLWFsdCI+PHBhdGggZD0iTTE5IDExaC04djZoOHYtNnptNCA4VjQuOThDMjMgMy44OCAyMi4xIDMgMjEgM0gzYy0xLjEgMC0yIC44OC0yIDEuOThWMTljMCAxLjEuOSAyIDIgMmgxOGMxLjEgMCAyLS45IDItMnptLTIgLjAySDNWNC45N2gxOHYxNC4wNXoiIC8+PC9nPgo8ZyBpZD0icGxheS1mb3Itd29yayI+PHBhdGggZD0iTTExIDV2NS41OUg3LjVsNC41IDQuNSA0LjUtNC41SDEzVjVoLTJ6bS01IDljMCAzLjMxIDIuNjkgNiA2IDZzNi0yLjY5IDYtNmgtMmMwIDIuMjEtMS43OSA0LTQgNHMtNC0xLjc5LTQtNEg2eiIgLz48L2c+CjxnIGlkPSJwb2x5bWVyIj48cGF0aCBkPSJNMTkgNGgtNEw3LjExIDE2LjYzIDQuNSAxMiA5IDRINUwuNSAxMiA1IDIwaDRsNy44OS0xMi42M0wxOS41IDEyIDE1IDIwaDRsNC41LTh6IiAvPjwvZz4KPGcgaWQ9InBvd2VyLXNldHRpbmdzLW5ldyI+PHBhdGggZD0iTTEzIDNoLTJ2MTBoMlYzem00LjgzIDIuMTdsLTEuNDIgMS40MkMxNy45OSA3Ljg2IDE5IDkuODEgMTkgMTJjMCAzLjg3LTMuMTMgNy03IDdzLTctMy4xMy03LTdjMC0yLjE5IDEuMDEtNC4xNCAyLjU4LTUuNDJMNi4xNyA1LjE3QzQuMjMgNi44MiAzIDkuMjYgMyAxMmMwIDQuOTcgNC4wMyA5IDkgOXM5LTQuMDMgOS05YzAtMi43NC0xLjIzLTUuMTgtMy4xNy02LjgzeiIgLz48L2c+CjxnIGlkPSJwcmVnbmFudC13b21hbiI+PHBhdGggZD0iTTkgNGMwLTEuMTEuODktMiAyLTJzMiAuODkgMiAyLS44OSAyLTIgMi0yLS44OS0yLTJ6bTcgOWMtLjAxLTEuMzQtLjgzLTIuNTEtMi0zIDAtMS42Ni0xLjM0LTMtMy0zcy0zIDEuMzQtMyAzdjdoMnY1aDN2LTVoM3YtNHoiIC8+PC9nPgo8ZyBpZD0icHJpbnQiPjxwYXRoIGQ9Ik0xOSA4SDVjLTEuNjYgMC0zIDEuMzQtMyAzdjZoNHY0aDEydi00aDR2LTZjMC0xLjY2LTEuMzQtMy0zLTN6bS0zIDExSDh2LTVoOHY1em0zLTdjLS41NSAwLTEtLjQ1LTEtMXMuNDUtMSAxLTEgMSAuNDUgMSAxLS40NSAxLTEgMXptLTEtOUg2djRoMTJWM3oiIC8+PC9nPgo8ZyBpZD0icXVlcnktYnVpbGRlciI+PHBhdGggZD0iTTExLjk5IDJDNi40NyAyIDIgNi40OCAyIDEyczQuNDcgMTAgOS45OSAxMEMxNy41MiAyMiAyMiAxNy41MiAyMiAxMlMxNy41MiAyIDExLjk5IDJ6TTEyIDIwYy00LjQyIDAtOC0zLjU4LTgtOHMzLjU4LTggOC04IDggMy41OCA4IDgtMy41OCA4LTggOHptLjUtMTNIMTF2Nmw1LjI1IDMuMTUuNzUtMS4yMy00LjUtMi42N3oiIC8+PC9nPgo8ZyBpZD0icXVlc3Rpb24tYW5zd2VyIj48cGF0aCBkPSJNMjEgNmgtMnY5SDZ2MmMwIC41NS40NSAxIDEgMWgxMWw0IDRWN2MwLS41NS0uNDUtMS0xLTF6bS00IDZWM2MwLS41NS0uNDUtMS0xLTFIM2MtLjU1IDAtMSAuNDUtMSAxdjE0bDQtNGgxMGMuNTUgMCAxLS40NSAxLTF6IiAvPjwvZz4KPGcgaWQ9InJhZGlvLWJ1dHRvbi1jaGVja2VkIj48cGF0aCBkPSJNMTIgN2MtMi43NiAwLTUgMi4yNC01IDVzMi4yNCA1IDUgNSA1LTIuMjQgNS01LTIuMjQtNS01LTV6bTAtNUM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptMCAxOGMtNC40MiAwLTgtMy41OC04LThzMy41OC04IDgtOCA4IDMuNTggOCA4LTMuNTggOC04IDh6IiAvPjwvZz4KPGcgaWQ9InJhZGlvLWJ1dHRvbi11bmNoZWNrZWQiPjxwYXRoIGQ9Ik0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0wIDE4Yy00LjQyIDAtOC0zLjU4LTgtOHMzLjU4LTggOC04IDggMy41OCA4IDgtMy41OCA4LTggOHoiIC8+PC9nPgo8ZyBpZD0icmVjZWlwdCI+PHBhdGggZD0iTTE4IDE3SDZ2LTJoMTJ2MnptMC00SDZ2LTJoMTJ2MnptMC00SDZWN2gxMnYyek0zIDIybDEuNS0xLjVMNiAyMmwxLjUtMS41TDkgMjJsMS41LTEuNUwxMiAyMmwxLjUtMS41TDE1IDIybDEuNS0xLjVMMTggMjJsMS41LTEuNUwyMSAyMlYybC0xLjUgMS41TDE4IDJsLTEuNSAxLjVMMTUgMmwtMS41IDEuNUwxMiAybC0xLjUgMS41TDkgMiA3LjUgMy41IDYgMiA0LjUgMy41IDMgMnYyMHoiIC8+PC9nPgo8ZyBpZD0icmVjb3JkLXZvaWNlLW92ZXIiPjxjaXJjbGUgY3g9IjkiIGN5PSI5IiByPSI0IiAvPjxwYXRoIGQ9Ik05IDE1Yy0yLjY3IDAtOCAxLjM0LTggNHYyaDE2di0yYzAtMi42Ni01LjMzLTQtOC00em03Ljc2LTkuNjRsLTEuNjggMS42OWMuODQgMS4xOC44NCAyLjcxIDAgMy44OWwxLjY4IDEuNjljMi4wMi0yLjAyIDIuMDItNS4wNyAwLTcuMjd6TTIwLjA3IDJsLTEuNjMgMS42M2MyLjc3IDMuMDIgMi43NyA3LjU2IDAgMTAuNzRMMjAuMDcgMTZjMy45LTMuODkgMy45MS05Ljk1IDAtMTR6IiAvPjwvZz4KPGcgaWQ9InJlZGVlbSI+PHBhdGggZD0iTTIwIDZoLTIuMThjLjExLS4zMS4xOC0uNjUuMTgtMSAwLTEuNjYtMS4zNC0zLTMtMy0xLjA1IDAtMS45Ni41NC0yLjUgMS4zNWwtLjUuNjctLjUtLjY4QzEwLjk2IDIuNTQgMTAuMDUgMiA5IDIgNy4zNCAyIDYgMy4zNCA2IDVjMCAuMzUuMDcuNjkuMTggMUg0Yy0xLjExIDAtMS45OS44OS0xLjk5IDJMMiAxOWMwIDEuMTEuODkgMiAyIDJoMTZjMS4xMSAwIDItLjg5IDItMlY4YzAtMS4xMS0uODktMi0yLTJ6bS01LTJjLjU1IDAgMSAuNDUgMSAxcy0uNDUgMS0xIDEtMS0uNDUtMS0xIC40NS0xIDEtMXpNOSA0Yy41NSAwIDEgLjQ1IDEgMXMtLjQ1IDEtMSAxLTEtLjQ1LTEtMSAuNDUtMSAxLTF6bTExIDE1SDR2LTJoMTZ2MnptMC01SDRWOGg1LjA4TDcgMTAuODMgOC42MiAxMiAxMSA4Ljc2bDEtMS4zNiAxIDEuMzZMMTUuMzggMTIgMTcgMTAuODMgMTQuOTIgOEgyMHY2eiIgLz48L2c+CjxnIGlkPSJyZWRvIj48cGF0aCBkPSJNMTguNCAxMC42QzE2LjU1IDguOTkgMTQuMTUgOCAxMS41IDhjLTQuNjUgMC04LjU4IDMuMDMtOS45NiA3LjIyTDMuOSAxNmMxLjA1LTMuMTkgNC4wNS01LjUgNy42LTUuNSAxLjk1IDAgMy43My43MiA1LjEyIDEuODhMMTMgMTZoOVY3bC0zLjYgMy42eiIgLz48L2c+CjxnIGlkPSJyZWZyZXNoIj48cGF0aCBkPSJNMTcuNjUgNi4zNUMxNi4yIDQuOSAxNC4yMSA0IDEyIDRjLTQuNDIgMC03Ljk5IDMuNTgtNy45OSA4czMuNTcgOCA3Ljk5IDhjMy43MyAwIDYuODQtMi41NSA3LjczLTZoLTIuMDhjLS44MiAyLjMzLTMuMDQgNC01LjY1IDQtMy4zMSAwLTYtMi42OS02LTZzMi42OS02IDYtNmMxLjY2IDAgMy4xNC42OSA0LjIyIDEuNzhMMTMgMTFoN1Y0bC0yLjM1IDIuMzV6IiAvPjwvZz4KPGcgaWQ9InJlbW92ZSI+PHBhdGggZD0iTTE5IDEzSDV2LTJoMTR2MnoiIC8+PC9nPgo8ZyBpZD0icmVtb3ZlLWNpcmNsZSI+PHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTUgMTFIN3YtMmgxMHYyeiIgLz48L2c+CjxnIGlkPSJyZW1vdmUtY2lyY2xlLW91dGxpbmUiPjxwYXRoIGQ9Ik03IDExdjJoMTB2LTJIN3ptNS05QzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0wIDE4Yy00LjQxIDAtOC0zLjU5LTgtOHMzLjU5LTggOC04IDggMy41OSA4IDgtMy41OSA4LTggOHoiIC8+PC9nPgo8ZyBpZD0icmVtb3ZlLXNob3BwaW5nLWNhcnQiPjxwYXRoIGQ9Ik0yMi43MyAyMi43M0wyLjc3IDIuNzcgMiAybC0uNzMtLjczTDAgMi41NGw0LjM5IDQuMzkgMi4yMSA0LjY2LTEuMzUgMi40NWMtLjE2LjI4LS4yNS42MS0uMjUuOTYgMCAxLjEuOSAyIDIgMmg3LjQ2bDEuMzggMS4zOGMtLjUuMzYtLjgzLjk1LS44MyAxLjYyIDAgMS4xLjg5IDIgMS45OSAyIC42NyAwIDEuMjYtLjMzIDEuNjItLjg0TDIxLjQ2IDI0bDEuMjctMS4yN3pNNy40MiAxNWMtLjE0IDAtLjI1LS4xMS0uMjUtLjI1bC4wMy0uMTIuOS0xLjYzaDIuMzZsMiAySDcuNDJ6bTguMTMtMmMuNzUgMCAxLjQxLS40MSAxLjc1LTEuMDNsMy41OC02LjQ5Yy4wOC0uMTQuMTItLjMxLjEyLS40OCAwLS41NS0uNDUtMS0xLTFINi41NGw5LjAxIDl6TTcgMThjLTEuMSAwLTEuOTkuOS0xLjk5IDJTNS45IDIyIDcgMjJzMi0uOSAyLTItLjktMi0yLTJ6IiAvPjwvZz4KPGcgaWQ9InJlb3JkZXIiPjxwYXRoIGQ9Ik0zIDE1aDE4di0ySDN2MnptMCA0aDE4di0ySDN2MnptMC04aDE4VjlIM3Yyem0wLTZ2MmgxOFY1SDN6IiAvPjwvZz4KPGcgaWQ9InJlcGx5Ij48cGF0aCBkPSJNMTAgOVY1bC03IDcgNyA3di00LjFjNSAwIDguNSAxLjYgMTEgNS4xLTEtNS00LTEwLTExLTExeiIgLz48L2c+CjxnIGlkPSJyZXBseS1hbGwiPjxwYXRoIGQ9Ik03IDhWNWwtNyA3IDcgN3YtM2wtNC00IDQtNHptNiAxVjVsLTcgNyA3IDd2LTQuMWM1IDAgOC41IDEuNiAxMSA1LjEtMS01LTQtMTAtMTEtMTF6IiAvPjwvZz4KPGcgaWQ9InJlcG9ydCI+PHBhdGggZD0iTTE1LjczIDNIOC4yN0wzIDguMjd2Ny40Nkw4LjI3IDIxaDcuNDZMMjEgMTUuNzNWOC4yN0wxNS43MyAzek0xMiAxNy4zYy0uNzIgMC0xLjMtLjU4LTEuMy0xLjMgMC0uNzIuNTgtMS4zIDEuMy0xLjMuNzIgMCAxLjMuNTggMS4zIDEuMyAwIC43Mi0uNTggMS4zLTEuMyAxLjN6bTEtNC4zaC0yVjdoMnY2eiIgLz48L2c+CjxnIGlkPSJyZXBvcnQtcHJvYmxlbSI+PHBhdGggZD0iTTEgMjFoMjJMMTIgMiAxIDIxem0xMi0zaC0ydi0yaDJ2MnptMC00aC0ydi00aDJ2NHoiIC8+PC9nPgo8ZyBpZD0icmVzdG9yZSI+PHBhdGggZD0iTTEzIDNjLTQuOTcgMC05IDQuMDMtOSA5SDFsMy44OSAzLjg5LjA3LjE0TDkgMTJINmMwLTMuODcgMy4xMy03IDctN3M3IDMuMTMgNyA3LTMuMTMgNy03IDdjLTEuOTMgMC0zLjY4LS43OS00Ljk0LTIuMDZsLTEuNDIgMS40MkM4LjI3IDE5Ljk5IDEwLjUxIDIxIDEzIDIxYzQuOTcgMCA5LTQuMDMgOS05cy00LjAzLTktOS05em0tMSA1djVsNC4yOCAyLjU0LjcyLTEuMjEtMy41LTIuMDhWOEgxMnoiIC8+PC9nPgo8ZyBpZD0icmVzdG9yZS1wYWdlIj48cGF0aCBkPSJNMTQgMkg2Yy0xLjEgMC0xLjk5LjktMS45OSAyTDQgMjBjMCAxLjEuODkgMiAxLjk5IDJIMThjMS4xIDAgMi0uOSAyLTJWOGwtNi02em0tMiAxNmMtMi4wNSAwLTMuODEtMS4yNC00LjU4LTNoMS43MWMuNjMuOSAxLjY4IDEuNSAyLjg3IDEuNSAxLjkzIDAgMy41LTEuNTcgMy41LTMuNVMxMy45MyA5LjUgMTIgOS41Yy0xLjM1IDAtMi41Mi43OC0zLjEgMS45bDEuNiAxLjZoLTRWOWwxLjMgMS4zQzguNjkgOC45MiAxMC4yMyA4IDEyIDhjMi43NiAwIDUgMi4yNCA1IDVzLTIuMjQgNS01IDV6IiAvPjwvZz4KPGcgaWQ9InJvb20iPjxwYXRoIGQ9Ik0xMiAyQzguMTMgMiA1IDUuMTMgNSA5YzAgNS4yNSA3IDEzIDcgMTNzNy03Ljc1IDctMTNjMC0zLjg3LTMuMTMtNy03LTd6bTAgOS41Yy0xLjM4IDAtMi41LTEuMTItMi41LTIuNXMxLjEyLTIuNSAyLjUtMi41IDIuNSAxLjEyIDIuNSAyLjUtMS4xMiAyLjUtMi41IDIuNXoiIC8+PC9nPgo8ZyBpZD0icm91bmRlZC1jb3JuZXIiPjxwYXRoIGQ9Ik0xOSAxOWgydjJoLTJ2LTJ6bTAtMmgydi0yaC0ydjJ6TTMgMTNoMnYtMkgzdjJ6bTAgNGgydi0ySDN2MnptMC04aDJWN0gzdjJ6bTAtNGgyVjNIM3Yyem00IDBoMlYzSDd2MnptOCAxNmgydi0yaC0ydjJ6bS00IDBoMnYtMmgtMnYyem00IDBoMnYtMmgtMnYyem0tOCAwaDJ2LTJIN3Yyem0tNCAwaDJ2LTJIM3Yyek0yMSA4YzAtMi43Ni0yLjI0LTUtNS01aC01djJoNWMxLjY1IDAgMyAxLjM1IDMgM3Y1aDJWOHoiIC8+PC9nPgo8ZyBpZD0icm93aW5nIj48cGF0aCBkPSJNOC41IDE0LjVMNCAxOWwxLjUgMS41TDkgMTdoMmwtMi41LTIuNXpNMTUgMWMtMS4xIDAtMiAuOS0yIDJzLjkgMiAyIDIgMi0uOSAyLTItLjktMi0yLTJ6bTYgMjAuMDFMMTggMjRsLTIuOTktMy4wMVYxOS41bC03LjEtNy4wOWMtLjMxLjA1LS42MS4wNy0uOTEuMDd2LTIuMTZjMS42Ni4wMyAzLjYxLS44NyA0LjY3LTIuMDRsMS40LTEuNTVjLjE5LS4yMS40My0uMzguNjktLjUuMjktLjE0LjYyLS4yMy45Ni0uMjNoLjAzQzE1Ljk5IDYuMDEgMTcgNy4wMiAxNyA4LjI2djUuNzVjMCAuODQtLjM1IDEuNjEtLjkyIDIuMTZsLTMuNTgtMy41OHYtMi4yN2MtLjYzLjUyLTEuNDMgMS4wMi0yLjI5IDEuMzlMMTYuNSAxOEgxOGwzIDMuMDF6IiAvPjwvZz4KPGcgaWQ9InNhdmUiPjxwYXRoIGQ9Ik0xNyAzSDVjLTEuMTEgMC0yIC45LTIgMnYxNGMwIDEuMS44OSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY3bC00LTR6bS01IDE2Yy0xLjY2IDAtMy0xLjM0LTMtM3MxLjM0LTMgMy0zIDMgMS4zNCAzIDMtMS4zNCAzLTMgM3ptMy0xMEg1VjVoMTB2NHoiIC8+PC9nPgo8ZyBpZD0ic2NoZWR1bGUiPjxwYXRoIGQ9Ik0xMS45OSAyQzYuNDcgMiAyIDYuNDggMiAxMnM0LjQ3IDEwIDkuOTkgMTBDMTcuNTIgMjIgMjIgMTcuNTIgMjIgMTJTMTcuNTIgMiAxMS45OSAyek0xMiAyMGMtNC40MiAwLTgtMy41OC04LThzMy41OC04IDgtOCA4IDMuNTggOCA4LTMuNTggOC04IDh6bS41LTEzSDExdjZsNS4yNSAzLjE1Ljc1LTEuMjMtNC41LTIuNjd6IiAvPjwvZz4KPGcgaWQ9InNlYXJjaCI+PHBhdGggZD0iTTE1LjUgMTRoLS43OWwtLjI4LS4yN0MxNS40MSAxMi41OSAxNiAxMS4xMSAxNiA5LjUgMTYgNS45MSAxMy4wOSAzIDkuNSAzUzMgNS45MSAzIDkuNSA1LjkxIDE2IDkuNSAxNmMxLjYxIDAgMy4wOS0uNTkgNC4yMy0xLjU3bC4yNy4yOHYuNzlsNSA0Ljk5TDIwLjQ5IDE5bC00Ljk5LTV6bS02IDBDNy4wMSAxNCA1IDExLjk5IDUgOS41UzcuMDEgNSA5LjUgNSAxNCA3LjAxIDE0IDkuNSAxMS45OSAxNCA5LjUgMTR6IiAvPjwvZz4KPGcgaWQ9InNlbGVjdC1hbGwiPjxwYXRoIGQ9Ik0zIDVoMlYzYy0xLjEgMC0yIC45LTIgMnptMCA4aDJ2LTJIM3Yyem00IDhoMnYtMkg3djJ6TTMgOWgyVjdIM3Yyem0xMC02aC0ydjJoMlYzem02IDB2MmgyYzAtMS4xLS45LTItMi0yek01IDIxdi0ySDNjMCAxLjEuOSAyIDIgMnptLTItNGgydi0ySDN2MnpNOSAzSDd2MmgyVjN6bTIgMThoMnYtMmgtMnYyem04LThoMnYtMmgtMnYyem0wIDhjMS4xIDAgMi0uOSAyLTJoLTJ2MnptMC0xMmgyVjdoLTJ2MnptMCA4aDJ2LTJoLTJ2MnptLTQgNGgydi0yaC0ydjJ6bTAtMTZoMlYzaC0ydjJ6TTcgMTdoMTBWN0g3djEwem0yLThoNnY2SDlWOXoiIC8+PC9nPgo8ZyBpZD0ic2VuZCI+PHBhdGggZD0iTTIuMDEgMjFMMjMgMTIgMi4wMSAzIDIgMTBsMTUgMi0xNSAyeiIgLz48L2c+CjxnIGlkPSJzZXR0aW5ncyI+PHBhdGggZD0iTTE5LjQzIDEyLjk4Yy4wNC0uMzIuMDctLjY0LjA3LS45OHMtLjAzLS42Ni0uMDctLjk4bDIuMTEtMS42NWMuMTktLjE1LjI0LS40Mi4xMi0uNjRsLTItMy40NmMtLjEyLS4yMi0uMzktLjMtLjYxLS4yMmwtMi40OSAxYy0uNTItLjQtMS4wOC0uNzMtMS42OS0uOThsLS4zOC0yLjY1QzE0LjQ2IDIuMTggMTQuMjUgMiAxNCAyaC00Yy0uMjUgMC0uNDYuMTgtLjQ5LjQybC0uMzggMi42NWMtLjYxLjI1LTEuMTcuNTktMS42OS45OGwtMi40OS0xYy0uMjMtLjA5LS40OSAwLS42MS4yMmwtMiAzLjQ2Yy0uMTMuMjItLjA3LjQ5LjEyLjY0bDIuMTEgMS42NWMtLjA0LjMyLS4wNy42NS0uMDcuOThzLjAzLjY2LjA3Ljk4bC0yLjExIDEuNjVjLS4xOS4xNS0uMjQuNDItLjEyLjY0bDIgMy40NmMuMTIuMjIuMzkuMy42MS4yMmwyLjQ5LTFjLjUyLjQgMS4wOC43MyAxLjY5Ljk4bC4zOCAyLjY1Yy4wMy4yNC4yNC40Mi40OS40Mmg0Yy4yNSAwIC40Ni0uMTguNDktLjQybC4zOC0yLjY1Yy42MS0uMjUgMS4xNy0uNTkgMS42OS0uOThsMi40OSAxYy4yMy4wOS40OSAwIC42MS0uMjJsMi0zLjQ2Yy4xMi0uMjIuMDctLjQ5LS4xMi0uNjRsLTIuMTEtMS42NXpNMTIgMTUuNWMtMS45MyAwLTMuNS0xLjU3LTMuNS0zLjVzMS41Ny0zLjUgMy41LTMuNSAzLjUgMS41NyAzLjUgMy41LTEuNTcgMy41LTMuNSAzLjV6IiAvPjwvZz4KPGcgaWQ9InNldHRpbmdzLWFwcGxpY2F0aW9ucyI+PHBhdGggZD0iTTEyIDEwYy0xLjEgMC0yIC45LTIgMnMuOSAyIDIgMiAyLS45IDItMi0uOS0yLTItMnptNy03SDVjLTEuMTEgMC0yIC45LTIgMnYxNGMwIDEuMS44OSAyIDIgMmgxNGMxLjExIDAgMi0uOSAyLTJWNWMwLTEuMS0uODktMi0yLTJ6bS0xLjc1IDljMCAuMjMtLjAyLjQ2LS4wNS42OGwxLjQ4IDEuMTZjLjEzLjExLjE3LjMuMDguNDVsLTEuNCAyLjQyYy0uMDkuMTUtLjI3LjIxLS40My4xNWwtMS43NC0uN2MtLjM2LjI4LS43Ni41MS0xLjE4LjY5bC0uMjYgMS44NWMtLjAzLjE3LS4xOC4zLS4zNS4zaC0yLjhjLS4xNyAwLS4zMi0uMTMtLjM1LS4yOWwtLjI2LTEuODVjLS40My0uMTgtLjgyLS40MS0xLjE4LS42OWwtMS43NC43Yy0uMTYuMDYtLjM0IDAtLjQzLS4xNWwtMS40LTIuNDJjLS4wOS0uMTUtLjA1LS4zNC4wOC0uNDVsMS40OC0xLjE2Yy0uMDMtLjIzLS4wNS0uNDYtLjA1LS42OSAwLS4yMy4wMi0uNDYuMDUtLjY4bC0xLjQ4LTEuMTZjLS4xMy0uMTEtLjE3LS4zLS4wOC0uNDVsMS40LTIuNDJjLjA5LS4xNS4yNy0uMjEuNDMtLjE1bDEuNzQuN2MuMzYtLjI4Ljc2LS41MSAxLjE4LS42OWwuMjYtMS44NWMuMDMtLjE3LjE4LS4zLjM1LS4zaDIuOGMuMTcgMCAuMzIuMTMuMzUuMjlsLjI2IDEuODVjLjQzLjE4LjgyLjQxIDEuMTguNjlsMS43NC0uN2MuMTYtLjA2LjM0IDAgLjQzLjE1bDEuNCAyLjQyYy4wOS4xNS4wNS4zNC0uMDguNDVsLTEuNDggMS4xNmMuMDMuMjMuMDUuNDYuMDUuNjl6IiAvPjwvZz4KPGcgaWQ9InNldHRpbmdzLWJhY2t1cC1yZXN0b3JlIj48cGF0aCBkPSJNMTQgMTJjMC0xLjEtLjktMi0yLTJzLTIgLjktMiAyIC45IDIgMiAyIDItLjkgMi0yem0tMi05Yy00Ljk3IDAtOSA0LjAzLTkgOUgwbDQgNCA0LTRINWMwLTMuODcgMy4xMy03IDctN3M3IDMuMTMgNyA3LTMuMTMgNy03IDdjLTEuNTEgMC0yLjkxLS40OS00LjA2LTEuM2wtMS40MiAxLjQ0QzguMDQgMjAuMyA5Ljk0IDIxIDEyIDIxYzQuOTcgMCA5LTQuMDMgOS05cy00LjAzLTktOS05eiIgLz48L2c+CjxnIGlkPSJzZXR0aW5ncy1ibHVldG9vdGgiPjxwYXRoIGQ9Ik0xMSAyNGgydi0yaC0ydjJ6bS00IDBoMnYtMkg3djJ6bTggMGgydi0yaC0ydjJ6bTIuNzEtMTguMjlMMTIgMGgtMXY3LjU5TDYuNDEgMyA1IDQuNDEgMTAuNTkgMTAgNSAxNS41OSA2LjQxIDE3IDExIDEyLjQxVjIwaDFsNS43MS01LjcxLTQuMy00LjI5IDQuMy00LjI5ek0xMyAzLjgzbDEuODggMS44OEwxMyA3LjU5VjMuODN6bTEuODggMTAuNDZMMTMgMTYuMTd2LTMuNzZsMS44OCAxLjg4eiIgLz48L2c+CjxnIGlkPSJzZXR0aW5ncy1icmlnaHRuZXNzIj48cGF0aCBkPSJNMjEgM0gzYy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE4YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bTAgMTYuMDFIM1Y0Ljk5aDE4djE0LjAyek04IDE2aDIuNWwxLjUgMS41IDEuNS0xLjVIMTZ2LTIuNWwxLjUtMS41LTEuNS0xLjVWOGgtMi41TDEyIDYuNSAxMC41IDhIOHYyLjVMNi41IDEyIDggMTMuNVYxNnptNC03YzEuNjYgMCAzIDEuMzQgMyAzcy0xLjM0IDMtMyAzVjl6IiAvPjwvZz4KPGcgaWQ9InNldHRpbmdzLWNlbGwiPjxwYXRoIGQ9Ik03IDI0aDJ2LTJIN3Yyem00IDBoMnYtMmgtMnYyem00IDBoMnYtMmgtMnYyek0xNiAuMDFMOCAwQzYuOSAwIDYgLjkgNiAydjE2YzAgMS4xLjkgMiAyIDJoOGMxLjEgMCAyLS45IDItMlYyYzAtMS4xLS45LTEuOTktMi0xLjk5ek0xNiAxNkg4VjRoOHYxMnoiIC8+PC9nPgo8ZyBpZD0ic2V0dGluZ3MtZXRoZXJuZXQiPjxwYXRoIGQ9Ik03Ljc3IDYuNzZMNi4yMyA1LjQ4LjgyIDEybDUuNDEgNi41MiAxLjU0LTEuMjhMMy40MiAxMmw0LjM1LTUuMjR6TTcgMTNoMnYtMkg3djJ6bTEwLTJoLTJ2Mmgydi0yem0tNiAyaDJ2LTJoLTJ2MnptNi43Ny03LjUybC0xLjU0IDEuMjhMMjAuNTggMTJsLTQuMzUgNS4yNCAxLjU0IDEuMjhMMjMuMTggMTJsLTUuNDEtNi41MnoiIC8+PC9nPgo8ZyBpZD0ic2V0dGluZ3MtaW5wdXQtYW50ZW5uYSI+PHBhdGggZD0iTTEyIDVjLTMuODcgMC03IDMuMTMtNyA3aDJjMC0yLjc2IDIuMjQtNSA1LTVzNSAyLjI0IDUgNWgyYzAtMy44Ny0zLjEzLTctNy03em0xIDkuMjljLjg4LS4zOSAxLjUtMS4yNiAxLjUtMi4yOSAwLTEuMzgtMS4xMi0yLjUtMi41LTIuNVM5LjUgMTAuNjIgOS41IDEyYzAgMS4wMi42MiAxLjkgMS41IDIuMjl2My4zTDcuNTkgMjEgOSAyMi40MWwzLTMgMyAzTDE2LjQxIDIxIDEzIDE3LjU5di0zLjN6TTEyIDFDNS45MyAxIDEgNS45MyAxIDEyaDJjMC00Ljk3IDQuMDMtOSA5LTlzOSA0LjAzIDkgOWgyYzAtNi4wNy00LjkzLTExLTExLTExeiIgLz48L2c+CjxnIGlkPSJzZXR0aW5ncy1pbnB1dC1jb21wb25lbnQiPjxwYXRoIGQ9Ik01IDJjMC0uNTUtLjQ1LTEtMS0xcy0xIC40NS0xIDF2NEgxdjZoNlY2SDVWMnptNCAxNGMwIDEuMy44NCAyLjQgMiAyLjgyVjIzaDJ2LTQuMThjMS4xNi0uNDEgMi0xLjUxIDItMi44MnYtMkg5djJ6bS04IDBjMCAxLjMuODQgMi40IDIgMi44MlYyM2gydi00LjE4QzYuMTYgMTguNCA3IDE3LjMgNyAxNnYtMkgxdjJ6TTIxIDZWMmMwLS41NS0uNDUtMS0xLTFzLTEgLjQ1LTEgMXY0aC0ydjZoNlY2aC0yem0tOC00YzAtLjU1LS40NS0xLTEtMXMtMSAuNDUtMSAxdjRIOXY2aDZWNmgtMlYyem00IDE0YzAgMS4zLjg0IDIuNCAyIDIuODJWMjNoMnYtNC4xOGMxLjE2LS40MSAyLTEuNTEgMi0yLjgydi0yaC02djJ6IiAvPjwvZz4KPGcgaWQ9InNldHRpbmdzLWlucHV0LWNvbXBvc2l0ZSI+PHBhdGggZD0iTTUgMmMwLS41NS0uNDUtMS0xLTFzLTEgLjQ1LTEgMXY0SDF2Nmg2VjZINVYyem00IDE0YzAgMS4zLjg0IDIuNCAyIDIuODJWMjNoMnYtNC4xOGMxLjE2LS40MSAyLTEuNTEgMi0yLjgydi0ySDl2MnptLTggMGMwIDEuMy44NCAyLjQgMiAyLjgyVjIzaDJ2LTQuMThDNi4xNiAxOC40IDcgMTcuMyA3IDE2di0ySDF2MnpNMjEgNlYyYzAtLjU1LS40NS0xLTEtMXMtMSAuNDUtMSAxdjRoLTJ2Nmg2VjZoLTJ6bS04LTRjMC0uNTUtLjQ1LTEtMS0xcy0xIC40NS0xIDF2NEg5djZoNlY2aC0yVjJ6bTQgMTRjMCAxLjMuODQgMi40IDIgMi44MlYyM2gydi00LjE4YzEuMTYtLjQxIDItMS41MSAyLTIuODJ2LTJoLTZ2MnoiIC8+PC9nPgo8ZyBpZD0ic2V0dGluZ3MtaW5wdXQtaGRtaSI+PHBhdGggZD0iTTE4IDdWNGMwLTEuMS0uOS0yLTItMkg4Yy0xLjEgMC0yIC45LTIgMnYzSDV2NmwzIDZ2M2g4di0zbDMtNlY3aC0xek04IDRoOHYzaC0yVjVoLTF2MmgtMlY1aC0xdjJIOFY0eiIgLz48L2c+CjxnIGlkPSJzZXR0aW5ncy1pbnB1dC1zdmlkZW8iPjxwYXRoIGQ9Ik04IDExLjVjMC0uODMtLjY3LTEuNS0xLjUtMS41UzUgMTAuNjcgNSAxMS41IDUuNjcgMTMgNi41IDEzIDggMTIuMzMgOCAxMS41em03LTVjMC0uODMtLjY3LTEuNS0xLjUtMS41aC0zQzkuNjcgNSA5IDUuNjcgOSA2LjVTOS42NyA4IDEwLjUgOGgzYy44MyAwIDEuNS0uNjcgMS41LTEuNXpNOC41IDE1Yy0uODMgMC0xLjUuNjctMS41IDEuNVM3LjY3IDE4IDguNSAxOHMxLjUtLjY3IDEuNS0xLjVTOS4zMyAxNSA4LjUgMTV6TTEyIDFDNS45MyAxIDEgNS45MyAxIDEyczQuOTMgMTEgMTEgMTEgMTEtNC45MyAxMS0xMVMxOC4wNyAxIDEyIDF6bTAgMjBjLTQuOTYgMC05LTQuMDQtOS05czQuMDQtOSA5LTkgOSA0LjA0IDkgOS00LjA0IDktOSA5em01LjUtMTFjLS44MyAwLTEuNS42Ny0xLjUgMS41cy42NyAxLjUgMS41IDEuNSAxLjUtLjY3IDEuNS0xLjUtLjY3LTEuNS0xLjUtMS41em0tMiA1Yy0uODMgMC0xLjUuNjctMS41IDEuNXMuNjcgMS41IDEuNSAxLjUgMS41LS42NyAxLjUtMS41LS42Ny0xLjUtMS41LTEuNXoiIC8+PC9nPgo8ZyBpZD0ic2V0dGluZ3Mtb3ZlcnNjYW4iPjxwYXRoIGQ9Ik0xMi4wMSA1LjVMMTAgOGg0bC0xLjk5LTIuNXpNMTggMTB2NGwyLjUtMS45OUwxOCAxMHpNNiAxMGwtMi41IDIuMDFMNiAxNHYtNHptOCA2aC00bDIuMDEgMi41TDE0IDE2em03LTEzSDNjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMThjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptMCAxNi4wMUgzVjQuOTloMTh2MTQuMDJ6IiAvPjwvZz4KPGcgaWQ9InNldHRpbmdzLXBob25lIj48cGF0aCBkPSJNMTMgOWgtMnYyaDJWOXptNCAwaC0ydjJoMlY5em0zIDYuNWMtMS4yNSAwLTIuNDUtLjItMy41Ny0uNTctLjM1LS4xMS0uNzQtLjAzLTEuMDIuMjRsLTIuMiAyLjJjLTIuODMtMS40NC01LjE1LTMuNzUtNi41OS02LjU4bDIuMi0yLjIxYy4yOC0uMjcuMzYtLjY2LjI1LTEuMDFDOC43IDYuNDUgOC41IDUuMjUgOC41IDRjMC0uNTUtLjQ1LTEtMS0xSDRjLS41NSAwLTEgLjQ1LTEgMSAwIDkuMzkgNy42MSAxNyAxNyAxNyAuNTUgMCAxLS40NSAxLTF2LTMuNWMwLS41NS0uNDUtMS0xLTF6TTE5IDl2MmgyVjloLTJ6IiAvPjwvZz4KPGcgaWQ9InNldHRpbmdzLXBvd2VyIj48cGF0aCBkPSJNNyAyNGgydi0ySDd2MnptNCAwaDJ2LTJoLTJ2MnptMi0yMmgtMnYxMGgyVjJ6bTMuNTYgMi40NGwtMS40NSAxLjQ1QzE2Ljg0IDYuOTQgMTggOC44MyAxOCAxMWMwIDMuMzEtMi42OSA2LTYgNnMtNi0yLjY5LTYtNmMwLTIuMTcgMS4xNi00LjA2IDIuODgtNS4xMkw3LjQ0IDQuNDRDNS4zNiA1Ljg4IDQgOC4yOCA0IDExYzAgNC40MiAzLjU4IDggOCA4czgtMy41OCA4LThjMC0yLjcyLTEuMzYtNS4xMi0zLjQ0LTYuNTZ6TTE1IDI0aDJ2LTJoLTJ2MnoiIC8+PC9nPgo8ZyBpZD0ic2V0dGluZ3MtcmVtb3RlIj48cGF0aCBkPSJNMTUgOUg5Yy0uNTUgMC0xIC40NS0xIDF2MTJjMCAuNTUuNDUgMSAxIDFoNmMuNTUgMCAxLS40NSAxLTFWMTBjMC0uNTUtLjQ1LTEtMS0xem0tMyA2Yy0xLjEgMC0yLS45LTItMnMuOS0yIDItMiAyIC45IDIgMi0uOSAyLTIgMnpNNy4wNSA2LjA1bDEuNDEgMS40MUM5LjM3IDYuNTYgMTAuNjIgNiAxMiA2czIuNjMuNTYgMy41NCAxLjQ2bDEuNDEtMS40MUMxNS42OCA0Ljc4IDEzLjkzIDQgMTIgNHMtMy42OC43OC00Ljk1IDIuMDV6TTEyIDBDOC45NiAwIDYuMjEgMS4yMyA0LjIyIDMuMjJsMS40MSAxLjQxQzcuMjYgMy4wMSA5LjUxIDIgMTIgMnM0Ljc0IDEuMDEgNi4zNiAyLjY0bDEuNDEtMS40MUMxNy43OSAxLjIzIDE1LjA0IDAgMTIgMHoiIC8+PC9nPgo8ZyBpZD0ic2V0dGluZ3Mtdm9pY2UiPjxwYXRoIGQ9Ik03IDI0aDJ2LTJIN3Yyem01LTExYzEuNjYgMCAyLjk5LTEuMzQgMi45OS0zTDE1IDRjMC0xLjY2LTEuMzQtMy0zLTNTOSAyLjM0IDkgNHY2YzAgMS42NiAxLjM0IDMgMyAzem0tMSAxMWgydi0yaC0ydjJ6bTQgMGgydi0yaC0ydjJ6bTQtMTRoLTEuN2MwIDMtMi41NCA1LjEtNS4zIDUuMVM2LjcgMTMgNi43IDEwSDVjMCAzLjQxIDIuNzIgNi4yMyA2IDYuNzJWMjBoMnYtMy4yOGMzLjI4LS40OSA2LTMuMzEgNi02LjcyeiIgLz48L2c+CjxnIGlkPSJzaG9wIj48cGF0aCBkPSJNMTYgNlY0YzAtMS4xMS0uODktMi0yLTJoLTRjLTEuMTEgMC0yIC44OS0yIDJ2MkgydjEzYzAgMS4xMS44OSAyIDIgMmgxNmMxLjExIDAgMi0uODkgMi0yVjZoLTZ6bS02LTJoNHYyaC00VjR6TTkgMThWOWw3LjUgNEw5IDE4eiIgLz48L2c+CjxnIGlkPSJzaG9wLXR3byI+PHBhdGggZD0iTTMgOUgxdjExYzAgMS4xMS44OSAyIDIgMmgxNGMxLjExIDAgMi0uODkgMi0ySDNWOXptMTUtNFYzYzAtMS4xMS0uODktMi0yLTJoLTRjLTEuMTEgMC0yIC44OS0yIDJ2Mkg1djExYzAgMS4xMS44OSAyIDIgMmgxNGMxLjExIDAgMi0uODkgMi0yVjVoLTV6bS02LTJoNHYyaC00VjN6bTAgMTJWOGw1LjUgMy01LjUgNHoiIC8+PC9nPgo8ZyBpZD0ic2hvcHBpbmctYmFza2V0Ij48cGF0aCBkPSJNMTcuMjEgOWwtNC4zOC02LjU2Yy0uMTktLjI4LS41MS0uNDItLjgzLS40Mi0uMzIgMC0uNjQuMTQtLjgzLjQzTDYuNzkgOUgyYy0uNTUgMC0xIC40NS0xIDEgMCAuMDkuMDEuMTguMDQuMjdsMi41NCA5LjI3Yy4yMy44NCAxIDEuNDYgMS45MiAxLjQ2aDEzYy45MiAwIDEuNjktLjYyIDEuOTMtMS40NmwyLjU0LTkuMjdMMjMgMTBjMC0uNTUtLjQ1LTEtMS0xaC00Ljc5ek05IDlsMy00LjRMMTUgOUg5em0zIDhjLTEuMSAwLTItLjktMi0ycy45LTIgMi0yIDIgLjkgMiAyLS45IDItMiAyeiIgLz48L2c+CjxnIGlkPSJzaG9wcGluZy1jYXJ0Ij48cGF0aCBkPSJNNyAxOGMtMS4xIDAtMS45OS45LTEuOTkgMlM1LjkgMjIgNyAyMnMyLS45IDItMi0uOS0yLTItMnpNMSAydjJoMmwzLjYgNy41OS0xLjM1IDIuNDVjLS4xNi4yOC0uMjUuNjEtLjI1Ljk2IDAgMS4xLjkgMiAyIDJoMTJ2LTJINy40MmMtLjE0IDAtLjI1LS4xMS0uMjUtLjI1bC4wMy0uMTIuOS0xLjYzaDcuNDVjLjc1IDAgMS40MS0uNDEgMS43NS0xLjAzbDMuNTgtNi40OWMuMDgtLjE0LjEyLS4zMS4xMi0uNDggMC0uNTUtLjQ1LTEtMS0xSDUuMjFsLS45NC0ySDF6bTE2IDE2Yy0xLjEgMC0xLjk5LjktMS45OSAycy44OSAyIDEuOTkgMiAyLS45IDItMi0uOS0yLTItMnoiIC8+PC9nPgo8ZyBpZD0ic29ydCI+PHBhdGggZD0iTTMgMThoNnYtMkgzdjJ6TTMgNnYyaDE4VjZIM3ptMCA3aDEydi0ySDN2MnoiIC8+PC9nPgo8ZyBpZD0ic3BlYWtlci1ub3RlcyI+PHBhdGggZD0iTTIwIDJINGMtMS4xIDAtMS45OS45LTEuOTkgMkwyIDIybDQtNGgxNGMxLjEgMCAyLS45IDItMlY0YzAtMS4xLS45LTItMi0yek04IDE0SDZ2LTJoMnYyem0wLTNINlY5aDJ2MnptMC0zSDZWNmgydjJ6bTcgNmgtNXYtMmg1djJ6bTMtM2gtOFY5aDh2MnptMC0zaC04VjZoOHYyeiIgLz48L2c+CjxnIGlkPSJzcGVha2VyLW5vdGVzLW9mZiI+PHBhdGggZD0iTTEwLjU0IDExbC0uNTQtLjU0TDcuNTQgOCA2IDYuNDYgMi4zOCAyLjg0IDEuMjcgMS43MyAwIDNsMi4wMSAyLjAxTDIgMjJsNC00aDlsNS43MyA1LjczTDIyIDIyLjQ2IDE3LjU0IDE4bC03LTd6TTggMTRINnYtMmgydjJ6bS0yLTNWOWwyIDJINnptMTQtOUg0LjA4TDEwIDcuOTJWNmg4djJoLTcuOTJsMSAxSDE4djJoLTQuOTJsNi45OSA2Ljk5QzIxLjE0IDE3Ljk1IDIyIDE3LjA4IDIyIDE2VjRjMC0xLjEtLjktMi0yLTJ6IiAvPjwvZz4KPGcgaWQ9InNwZWxsY2hlY2siPjxwYXRoIGQ9Ik0xMi40NSAxNmgyLjA5TDkuNDMgM0g3LjU3TDIuNDYgMTZoMi4wOWwxLjEyLTNoNS42NGwxLjE0IDN6bS02LjAyLTVMOC41IDUuNDggMTAuNTcgMTFINi40M3ptMTUuMTYuNTlsLTguMDkgOC4wOUw5LjgzIDE2bC0xLjQxIDEuNDEgNS4wOSA1LjA5TDIzIDEzbC0xLjQxLTEuNDF6IiAvPjwvZz4KPGcgaWQ9InN0YXIiPjxwYXRoIGQ9Ik0xMiAxNy4yN0wxOC4xOCAyMWwtMS42NC03LjAzTDIyIDkuMjRsLTcuMTktLjYxTDEyIDIgOS4xOSA4LjYzIDIgOS4yNGw1LjQ2IDQuNzNMNS44MiAyMXoiIC8+PC9nPgo8ZyBpZD0ic3Rhci1ib3JkZXIiPjxwYXRoIGQ9Ik0yMiA5LjI0bC03LjE5LS42MkwxMiAyIDkuMTkgOC42MyAyIDkuMjRsNS40NiA0LjczTDUuODIgMjEgMTIgMTcuMjcgMTguMTggMjFsLTEuNjMtNy4wM0wyMiA5LjI0ek0xMiAxNS40bC0zLjc2IDIuMjcgMS00LjI4LTMuMzItMi44OCA0LjM4LS4zOEwxMiA2LjFsMS43MSA0LjA0IDQuMzguMzgtMy4zMiAyLjg4IDEgNC4yOEwxMiAxNS40eiIgLz48L2c+CjxnIGlkPSJzdGFyLWhhbGYiPjxwYXRoIGQ9Ik0yMiA5LjI0bC03LjE5LS42MkwxMiAyIDkuMTkgOC42MyAyIDkuMjRsNS40NiA0LjczTDUuODIgMjEgMTIgMTcuMjcgMTguMTggMjFsLTEuNjMtNy4wM0wyMiA5LjI0ek0xMiAxNS40VjYuMWwxLjcxIDQuMDQgNC4zOC4zOC0zLjMyIDIuODggMSA0LjI4TDEyIDE1LjR6IiAvPjwvZz4KPGcgaWQ9InN0YXJzIj48cGF0aCBkPSJNMTEuOTkgMkM2LjQ3IDIgMiA2LjQ4IDIgMTJzNC40NyAxMCA5Ljk5IDEwQzE3LjUyIDIyIDIyIDE3LjUyIDIyIDEyUzE3LjUyIDIgMTEuOTkgMnptNC4yNCAxNkwxMiAxNS40NSA3Ljc3IDE4bDEuMTItNC44MS0zLjczLTMuMjMgNC45Mi0uNDJMMTIgNWwxLjkyIDQuNTMgNC45Mi40Mi0zLjczIDMuMjNMMTYuMjMgMTh6IiAvPjwvZz4KPGcgaWQ9InN0b3JlIj48cGF0aCBkPSJNMjAgNEg0djJoMTZWNHptMSAxMHYtMmwtMS01SDRsLTEgNXYyaDF2NmgxMHYtNmg0djZoMnYtNmgxem0tOSA0SDZ2LTRoNnY0eiIgLz48L2c+CjxnIGlkPSJzdWJkaXJlY3RvcnktYXJyb3ctbGVmdCI+PHBhdGggZD0iTTExIDlsMS40MiAxLjQyTDguODMgMTRIMThWNGgydjEySDguODNsMy41OSAzLjU4TDExIDIxbC02LTYgNi02eiIgLz48L2c+CjxnIGlkPSJzdWJkaXJlY3RvcnktYXJyb3ctcmlnaHQiPjxwYXRoIGQ9Ik0xOSAxNWwtNiA2LTEuNDItMS40MkwxNS4xNyAxNkg0VjRoMnYxMGg5LjE3bC0zLjU5LTMuNThMMTMgOWw2IDZ6IiAvPjwvZz4KPGcgaWQ9InN1YmplY3QiPjxwYXRoIGQ9Ik0xNCAxN0g0djJoMTB2LTJ6bTYtOEg0djJoMTZWOXpNNCAxNWgxNnYtMkg0djJ6TTQgNXYyaDE2VjVINHoiIC8+PC9nPgo8ZyBpZD0ic3VwZXJ2aXNvci1hY2NvdW50Ij48cGF0aCBkPSJNMTYuNSAxMmMxLjM4IDAgMi40OS0xLjEyIDIuNDktMi41UzE3Ljg4IDcgMTYuNSA3QzE1LjEyIDcgMTQgOC4xMiAxNCA5LjVzMS4xMiAyLjUgMi41IDIuNXpNOSAxMWMxLjY2IDAgMi45OS0xLjM0IDIuOTktM1MxMC42NiA1IDkgNUM3LjM0IDUgNiA2LjM0IDYgOHMxLjM0IDMgMyAzem03LjUgM2MtMS44MyAwLTUuNS45Mi01LjUgMi43NVYxOWgxMXYtMi4yNWMwLTEuODMtMy42Ny0yLjc1LTUuNS0yLjc1ek05IDEzYy0yLjMzIDAtNyAxLjE3LTcgMy41VjE5aDd2LTIuMjVjMC0uODUuMzMtMi4zNCAyLjM3LTMuNDdDMTAuNSAxMy4xIDkuNjYgMTMgOSAxM3oiIC8+PC9nPgo8ZyBpZD0ic3dhcC1ob3JpeiI+PHBhdGggZD0iTTYuOTkgMTFMMyAxNWwzLjk5IDR2LTNIMTR2LTJINi45OXYtM3pNMjEgOWwtMy45OS00djNIMTB2Mmg3LjAxdjNMMjEgOXoiIC8+PC9nPgo8ZyBpZD0ic3dhcC12ZXJ0Ij48cGF0aCBkPSJNMTYgMTcuMDFWMTBoLTJ2Ny4wMWgtM0wxNSAyMWw0LTMuOTloLTN6TTkgM0w1IDYuOTloM1YxNGgyVjYuOTloM0w5IDN6IiAvPjwvZz4KPGcgaWQ9InN3YXAtdmVydGljYWwtY2lyY2xlIj48cGF0aCBkPSJNMTIgMkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnpNNi41IDlMMTAgNS41IDEzLjUgOUgxMXY0SDlWOUg2LjV6bTExIDZMMTQgMTguNSAxMC41IDE1SDEzdi00aDJ2NGgyLjV6IiAvPjwvZz4KPGcgaWQ9InN5c3RlbS11cGRhdGUtYWx0Ij48cGF0aCBkPSJNMTIgMTYuNWw0LTRoLTN2LTloLTJ2OUg4bDQgNHptOS0xM2gtNnYxLjk5aDZ2MTQuMDNIM1Y1LjQ5aDZWMy41SDNjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMThjMS4xIDAgMi0uOSAyLTJ2LTE0YzAtMS4xLS45LTItMi0yeiIgLz48L2c+CjxnIGlkPSJ0YWIiPjxwYXRoIGQ9Ik0yMSAzSDNjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMThjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptMCAxNkgzVjVoMTB2NGg4djEweiIgLz48L2c+CjxnIGlkPSJ0YWItdW5zZWxlY3RlZCI+PHBhdGggZD0iTTEgOWgyVjdIMXYyem0wIDRoMnYtMkgxdjJ6bTAtOGgyVjNjLTEuMSAwLTIgLjktMiAyem04IDE2aDJ2LTJIOXYyem0tOC00aDJ2LTJIMXYyem0yIDR2LTJIMWMwIDEuMS45IDIgMiAyek0yMSAzaC04djZoMTBWNWMwLTEuMS0uOS0yLTItMnptMCAxNGgydi0yaC0ydjJ6TTkgNWgyVjNIOXYyek01IDIxaDJ2LTJINXYyek01IDVoMlYzSDV2MnptMTYgMTZjMS4xIDAgMi0uOSAyLTJoLTJ2MnptMC04aDJ2LTJoLTJ2MnptLTggOGgydi0yaC0ydjJ6bTQgMGgydi0yaC0ydjJ6IiAvPjwvZz4KPGcgaWQ9InRleHQtZm9ybWF0Ij48cGF0aCBkPSJNNSAxN3YyaDE0di0ySDV6bTQuNS00LjJoNWwuOSAyLjJoMi4xTDEyLjc1IDRoLTEuNUw2LjUgMTVoMi4xbC45LTIuMnpNMTIgNS45OEwxMy44NyAxMWgtMy43NEwxMiA1Ljk4eiIgLz48L2c+CjxnIGlkPSJ0aGVhdGVycyI+PHBhdGggZD0iTTE4IDN2MmgtMlYzSDh2Mkg2VjNINHYxOGgydi0yaDJ2Mmg4di0yaDJ2MmgyVjNoLTJ6TTggMTdINnYtMmgydjJ6bTAtNEg2di0yaDJ2MnptMC00SDZWN2gydjJ6bTEwIDhoLTJ2LTJoMnYyem0wLTRoLTJ2LTJoMnYyem0wLTRoLTJWN2gydjJ6IiAvPjwvZz4KPGcgaWQ9InRodW1iLWRvd24iPjxwYXRoIGQ9Ik0xNSAzSDZjLS44MyAwLTEuNTQuNS0xLjg0IDEuMjJsLTMuMDIgNy4wNWMtLjA5LjIzLS4xNC40Ny0uMTQuNzN2MS45MWwuMDEuMDFMMSAxNGMwIDEuMS45IDIgMiAyaDYuMzFsLS45NSA0LjU3LS4wMy4zMmMwIC40MS4xNy43OS40NCAxLjA2TDkuODMgMjNsNi41OS02LjU5Yy4zNi0uMzYuNTgtLjg2LjU4LTEuNDFWNWMwLTEuMS0uOS0yLTItMnptNCAwdjEyaDRWM2gtNHoiIC8+PC9nPgo8ZyBpZD0idGh1bWItdXAiPjxwYXRoIGQ9Ik0xIDIxaDRWOUgxdjEyem0yMi0xMWMwLTEuMS0uOS0yLTItMmgtNi4zMWwuOTUtNC41Ny4wMy0uMzJjMC0uNDEtLjE3LS43OS0uNDQtMS4wNkwxNC4xNyAxIDcuNTkgNy41OUM3LjIyIDcuOTUgNyA4LjQ1IDcgOXYxMGMwIDEuMS45IDIgMiAyaDljLjgzIDAgMS41NC0uNSAxLjg0LTEuMjJsMy4wMi03LjA1Yy4wOS0uMjMuMTQtLjQ3LjE0LS43M3YtMS45MWwtLjAxLS4wMUwyMyAxMHoiIC8+PC9nPgo8ZyBpZD0idGh1bWJzLXVwLWRvd24iPjxwYXRoIGQ9Ik0xMiA2YzAtLjU1LS40NS0xLTEtMUg1LjgybC42Ni0zLjE4LjAyLS4yM2MwLS4zMS0uMTMtLjU5LS4zMy0uOEw1LjM4IDAgLjQ0IDQuOTRDLjE3IDUuMjEgMCA1LjU5IDAgNnY2LjVjMCAuODMuNjcgMS41IDEuNSAxLjVoNi43NWMuNjIgMCAxLjE1LS4zOCAxLjM4LS45MWwyLjI2LTUuMjljLjA3LS4xNy4xMS0uMzYuMTEtLjU1VjZ6bTEwLjUgNGgtNi43NWMtLjYyIDAtMS4xNS4zOC0xLjM4LjkxbC0yLjI2IDUuMjljLS4wNy4xNy0uMTEuMzYtLjExLjU1VjE4YzAgLjU1LjQ1IDEgMSAxaDUuMThsLS42NiAzLjE4LS4wMi4yNGMwIC4zMS4xMy41OS4zMy44bC43OS43OCA0Ljk0LTQuOTRjLjI3LS4yNy40NC0uNjUuNDQtMS4wNnYtNi41YzAtLjgzLS42Ny0xLjUtMS41LTEuNXoiIC8+PC9nPgo8ZyBpZD0idGltZWxpbmUiPjxwYXRoIGQ9Ik0yMyA4YzAgMS4xLS45IDItMiAyLS4xOCAwLS4zNS0uMDItLjUxLS4wN2wtMy41NiAzLjU1Yy4wNS4xNi4wNy4zNC4wNy41MiAwIDEuMS0uOSAyLTIgMnMtMi0uOS0yLTJjMC0uMTguMDItLjM2LjA3LS41MmwtMi41NS0yLjU1Yy0uMTYuMDUtLjM0LjA3LS41Mi4wN3MtLjM2LS4wMi0uNTItLjA3bC00LjU1IDQuNTZjLjA1LjE2LjA3LjMzLjA3LjUxIDAgMS4xLS45IDItMiAycy0yLS45LTItMiAuOS0yIDItMmMuMTggMCAuMzUuMDIuNTEuMDdsNC41Ni00LjU1QzguMDIgOS4zNiA4IDkuMTggOCA5YzAtMS4xLjktMiAyLTJzMiAuOSAyIDJjMCAuMTgtLjAyLjM2LS4wNy41MmwyLjU1IDIuNTVjLjE2LS4wNS4zNC0uMDcuNTItLjA3cy4zNi4wMi41Mi4wN2wzLjU1LTMuNTZDMTkuMDIgOC4zNSAxOSA4LjE4IDE5IDhjMC0xLjEuOS0yIDItMnMyIC45IDIgMnoiIC8+PC9nPgo8ZyBpZD0idG9jIj48cGF0aCBkPSJNMyA5aDE0VjdIM3Yyem0wIDRoMTR2LTJIM3Yyem0wIDRoMTR2LTJIM3Yyem0xNiAwaDJ2LTJoLTJ2MnptMC0xMHYyaDJWN2gtMnptMCA2aDJ2LTJoLTJ2MnoiIC8+PC9nPgo8ZyBpZD0idG9kYXkiPjxwYXRoIGQ9Ik0xOSAzaC0xVjFoLTJ2Mkg4VjFINnYySDVjLTEuMTEgMC0xLjk5LjktMS45OSAyTDMgMTljMCAxLjEuODkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptMCAxNkg1VjhoMTR2MTF6TTcgMTBoNXY1SDd6IiAvPjwvZz4KPGcgaWQ9InRvbGwiPjxwYXRoIGQ9Ik0xNSA0Yy00LjQyIDAtOCAzLjU4LTggOHMzLjU4IDggOCA4IDgtMy41OCA4LTgtMy41OC04LTgtOHptMCAxNGMtMy4zMSAwLTYtMi42OS02LTZzMi42OS02IDYtNiA2IDIuNjkgNiA2LTIuNjkgNi02IDZ6TTMgMTJjMC0yLjYxIDEuNjctNC44MyA0LTUuNjVWNC4yNkMzLjU1IDUuMTUgMSA4LjI3IDEgMTJzMi41NSA2Ljg1IDYgNy43NHYtMi4wOWMtMi4zMy0uODItNC0zLjA0LTQtNS42NXoiIC8+PC9nPgo8ZyBpZD0idG91Y2gtYXBwIj48cGF0aCBkPSJNOSAxMS4yNFY3LjVDOSA2LjEyIDEwLjEyIDUgMTEuNSA1UzE0IDYuMTIgMTQgNy41djMuNzRjMS4yMS0uODEgMi0yLjE4IDItMy43NEMxNiA1LjAxIDEzLjk5IDMgMTEuNSAzUzcgNS4wMSA3IDcuNWMwIDEuNTYuNzkgMi45MyAyIDMuNzR6bTkuODQgNC42M2wtNC41NC0yLjI2Yy0uMTctLjA3LS4zNS0uMTEtLjU0LS4xMUgxM3YtNmMwLS44My0uNjctMS41LTEuNS0xLjVTMTAgNi42NyAxMCA3LjV2MTAuNzRsLTMuNDMtLjcyYy0uMDgtLjAxLS4xNS0uMDMtLjI0LS4wMy0uMzEgMC0uNTkuMTMtLjc5LjMzbC0uNzkuOCA0Ljk0IDQuOTRjLjI3LjI3LjY1LjQ0IDEuMDYuNDRoNi43OWMuNzUgMCAxLjMzLS41NSAxLjQ0LTEuMjhsLjc1LTUuMjdjLjAxLS4wNy4wMi0uMTQuMDItLjIgMC0uNjItLjM4LTEuMTYtLjkxLTEuMzh6IiAvPjwvZz4KPGcgaWQ9InRyYWNrLWNoYW5nZXMiPjxwYXRoIGQ9Ik0xOS4wNyA0LjkzbC0xLjQxIDEuNDFDMTkuMSA3Ljc5IDIwIDkuNzkgMjAgMTJjMCA0LjQyLTMuNTggOC04IDhzLTgtMy41OC04LThjMC00LjA4IDMuMDUtNy40NCA3LTcuOTN2Mi4wMkM4LjE2IDYuNTcgNiA5LjAzIDYgMTJjMCAzLjMxIDIuNjkgNiA2IDZzNi0yLjY5IDYtNmMwLTEuNjYtLjY3LTMuMTYtMS43Ni00LjI0bC0xLjQxIDEuNDFDMTUuNTUgOS45IDE2IDEwLjkgMTYgMTJjMCAyLjIxLTEuNzkgNC00IDRzLTQtMS43OS00LTRjMC0xLjg2IDEuMjgtMy40MSAzLTMuODZ2Mi4xNGMtLjYuMzUtMSAuOTgtMSAxLjcyIDAgMS4xLjkgMiAyIDJzMi0uOSAyLTJjMC0uNzQtLjQtMS4zOC0xLTEuNzJWMmgtMUM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwYzAtMi43Ni0xLjEyLTUuMjYtMi45My03LjA3eiIgLz48L2c+CjxnIGlkPSJ0cmFuc2xhdGUiPjxwYXRoIGQ9Ik0xMi44NyAxNS4wN2wtMi41NC0yLjUxLjAzLS4wM2MxLjc0LTEuOTQgMi45OC00LjE3IDMuNzEtNi41M0gxN1Y0aC03VjJIOHYySDF2MS45OWgxMS4xN0MxMS41IDcuOTIgMTAuNDQgOS43NSA5IDExLjM1IDguMDcgMTAuMzIgNy4zIDkuMTkgNi42OSA4aC0yYy43MyAxLjYzIDEuNzMgMy4xNyAyLjk4IDQuNTZsLTUuMDkgNS4wMkw0IDE5bDUtNSAzLjExIDMuMTEuNzYtMi4wNHpNMTguNSAxMGgtMkwxMiAyMmgybDEuMTItM2g0Ljc1TDIxIDIyaDJsLTQuNS0xMnptLTIuNjIgN2wxLjYyLTQuMzNMMTkuMTIgMTdoLTMuMjR6IiAvPjwvZz4KPGcgaWQ9InRyZW5kaW5nLWRvd24iPjxwYXRoIGQ9Ik0xNiAxOGwyLjI5LTIuMjktNC44OC00Ljg4LTQgNEwyIDcuNDEgMy40MSA2bDYgNiA0LTQgNi4zIDYuMjlMMjIgMTJ2NnoiIC8+PC9nPgo8ZyBpZD0idHJlbmRpbmctZmxhdCI+PHBhdGggZD0iTTIyIDEybC00LTR2M0gzdjJoMTV2M3oiIC8+PC9nPgo8ZyBpZD0idHJlbmRpbmctdXAiPjxwYXRoIGQ9Ik0xNiA2bDIuMjkgMi4yOS00Ljg4IDQuODgtNC00TDIgMTYuNTkgMy40MSAxOGw2LTYgNCA0IDYuMy02LjI5TDIyIDEyVjZ6IiAvPjwvZz4KPGcgaWQ9InR1cm5lZC1pbiI+PHBhdGggZD0iTTE3IDNIN2MtMS4xIDAtMS45OS45LTEuOTkgMkw1IDIxbDctMyA3IDNWNWMwLTEuMS0uOS0yLTItMnoiIC8+PC9nPgo8ZyBpZD0idHVybmVkLWluLW5vdCI+PHBhdGggZD0iTTE3IDNIN2MtMS4xIDAtMS45OS45LTEuOTkgMkw1IDIxbDctMyA3IDNWNWMwLTEuMS0uOS0yLTItMnptMCAxNWwtNS0yLjE4TDcgMThWNWgxMHYxM3oiIC8+PC9nPgo8ZyBpZD0idW5hcmNoaXZlIj48cGF0aCBkPSJNMjAuNTUgNS4yMmwtMS4zOS0xLjY4QzE4Ljg4IDMuMjEgMTguNDcgMyAxOCAzSDZjLS40NyAwLS44OC4yMS0xLjE1LjU1TDMuNDYgNS4yMkMzLjE3IDUuNTcgMyA2LjAxIDMgNi41VjE5YzAgMS4xLjg5IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjYuNWMwLS40OS0uMTctLjkzLS40NS0xLjI4ek0xMiA5LjVsNS41IDUuNUgxNHYyaC00di0ySDYuNUwxMiA5LjV6TTUuMTIgNWwuODItMWgxMmwuOTMgMUg1LjEyeiIgLz48L2c+CjxnIGlkPSJ1bmRvIj48cGF0aCBkPSJNMTIuNSA4Yy0yLjY1IDAtNS4wNS45OS02LjkgMi42TDIgN3Y5aDlsLTMuNjItMy42MmMxLjM5LTEuMTYgMy4xNi0xLjg4IDUuMTItMS44OCAzLjU0IDAgNi41NSAyLjMxIDcuNiA1LjVsMi4zNy0uNzhDMjEuMDggMTEuMDMgMTcuMTUgOCAxMi41IDh6IiAvPjwvZz4KPGcgaWQ9InVuZm9sZC1sZXNzIj48cGF0aCBkPSJNNy40MSAxOC41OUw4LjgzIDIwIDEyIDE2LjgzIDE1LjE3IDIwbDEuNDEtMS40MUwxMiAxNGwtNC41OSA0LjU5em05LjE4LTEzLjE4TDE1LjE3IDQgMTIgNy4xNyA4LjgzIDQgNy40MSA1LjQxIDEyIDEwbDQuNTktNC41OXoiIC8+PC9nPgo8ZyBpZD0idW5mb2xkLW1vcmUiPjxwYXRoIGQ9Ik0xMiA1LjgzTDE1LjE3IDlsMS40MS0xLjQxTDEyIDMgNy40MSA3LjU5IDguODMgOSAxMiA1Ljgzem0wIDEyLjM0TDguODMgMTVsLTEuNDEgMS40MUwxMiAyMWw0LjU5LTQuNTlMMTUuMTcgMTUgMTIgMTguMTd6IiAvPjwvZz4KPGcgaWQ9InVwZGF0ZSI+PHBhdGggZD0iTTIxIDEwLjEyaC02Ljc4bDIuNzQtMi44MmMtMi43My0yLjctNy4xNS0yLjgtOS44OC0uMS0yLjczIDIuNzEtMi43MyA3LjA4IDAgOS43OSAyLjczIDIuNzEgNy4xNSAyLjcxIDkuODggMEMxOC4zMiAxNS42NSAxOSAxNC4wOCAxOSAxMi4xaDJjMCAxLjk4LS44OCA0LjU1LTIuNjQgNi4yOS0zLjUxIDMuNDgtOS4yMSAzLjQ4LTEyLjcyIDAtMy41LTMuNDctMy41My05LjExLS4wMi0xMi41OCAzLjUxLTMuNDcgOS4xNC0zLjQ3IDEyLjY1IDBMMjEgM3Y3LjEyek0xMi41IDh2NC4yNWwzLjUgMi4wOC0uNzIgMS4yMUwxMSAxM1Y4aDEuNXoiIC8+PC9nPgo8ZyBpZD0idmVyaWZpZWQtdXNlciI+PHBhdGggZD0iTTEyIDFMMyA1djZjMCA1LjU1IDMuODQgMTAuNzQgOSAxMiA1LjE2LTEuMjYgOS02LjQ1IDktMTJWNWwtOS00em0tMiAxNmwtNC00IDEuNDEtMS40MUwxMCAxNC4xN2w2LjU5LTYuNTlMMTggOWwtOCA4eiIgLz48L2c+CjxnIGlkPSJ2aWV3LWFnZW5kYSI+PHBhdGggZD0iTTIwIDEzSDNjLS41NSAwLTEgLjQ1LTEgMXY2YzAgLjU1LjQ1IDEgMSAxaDE3Yy41NSAwIDEtLjQ1IDEtMXYtNmMwLS41NS0uNDUtMS0xLTF6bTAtMTBIM2MtLjU1IDAtMSAuNDUtMSAxdjZjMCAuNTUuNDUgMSAxIDFoMTdjLjU1IDAgMS0uNDUgMS0xVjRjMC0uNTUtLjQ1LTEtMS0xeiIgLz48L2c+CjxnIGlkPSJ2aWV3LWFycmF5Ij48cGF0aCBkPSJNNCAxOGgzVjVINHYxM3pNMTggNXYxM2gzVjVoLTN6TTggMThoOVY1SDh2MTN6IiAvPjwvZz4KPGcgaWQ9InZpZXctY2Fyb3VzZWwiPjxwYXRoIGQ9Ik03IDE5aDEwVjRIN3YxNXptLTUtMmg0VjZIMnYxMXpNMTggNnYxMWg0VjZoLTR6IiAvPjwvZz4KPGcgaWQ9InZpZXctY29sdW1uIj48cGF0aCBkPSJNMTAgMThoNVY1aC01djEzem0tNiAwaDVWNUg0djEzek0xNiA1djEzaDVWNWgtNXoiIC8+PC9nPgo8ZyBpZD0idmlldy1kYXkiPjxwYXRoIGQ9Ik0yIDIxaDE5di0zSDJ2M3pNMjAgOEgzYy0uNTUgMC0xIC40NS0xIDF2NmMwIC41NS40NSAxIDEgMWgxN2MuNTUgMCAxLS40NSAxLTFWOWMwLS41NS0uNDUtMS0xLTF6TTIgM3YzaDE5VjNIMnoiIC8+PC9nPgo8ZyBpZD0idmlldy1oZWFkbGluZSI+PHBhdGggZD0iTTQgMTVoMTZ2LTJINHYyem0wIDRoMTZ2LTJINHYyem0wLThoMTZWOUg0djJ6bTAtNnYyaDE2VjVINHoiIC8+PC9nPgo8ZyBpZD0idmlldy1saXN0Ij48cGF0aCBkPSJNNCAxNGg0di00SDR2NHptMCA1aDR2LTRINHY0ek00IDloNFY1SDR2NHptNSA1aDEydi00SDl2NHptMCA1aDEydi00SDl2NHpNOSA1djRoMTJWNUg5eiIgLz48L2c+CjxnIGlkPSJ2aWV3LW1vZHVsZSI+PHBhdGggZD0iTTQgMTFoNVY1SDR2NnptMCA3aDV2LTZINHY2em02IDBoNXYtNmgtNXY2em02IDBoNXYtNmgtNXY2em0tNi03aDVWNWgtNXY2em02LTZ2Nmg1VjVoLTV6IiAvPjwvZz4KPGcgaWQ9InZpZXctcXVpbHQiPjxwYXRoIGQ9Ik0xMCAxOGg1di02aC01djZ6bS02IDBoNVY1SDR2MTN6bTEyIDBoNXYtNmgtNXY2ek0xMCA1djZoMTFWNUgxMHoiIC8+PC9nPgo8ZyBpZD0idmlldy1zdHJlYW0iPjxwYXRoIGQ9Ik00IDE4aDE3di02SDR2NnpNNCA1djZoMTdWNUg0eiIgLz48L2c+CjxnIGlkPSJ2aWV3LXdlZWsiPjxwYXRoIGQ9Ik02IDVIM2MtLjU1IDAtMSAuNDUtMSAxdjEyYzAgLjU1LjQ1IDEgMSAxaDNjLjU1IDAgMS0uNDUgMS0xVjZjMC0uNTUtLjQ1LTEtMS0xem0xNCAwaC0zYy0uNTUgMC0xIC40NS0xIDF2MTJjMCAuNTUuNDUgMSAxIDFoM2MuNTUgMCAxLS40NSAxLTFWNmMwLS41NS0uNDUtMS0xLTF6bS03IDBoLTNjLS41NSAwLTEgLjQ1LTEgMXYxMmMwIC41NS40NSAxIDEgMWgzYy41NSAwIDEtLjQ1IDEtMVY2YzAtLjU1LS40NS0xLTEtMXoiIC8+PC9nPgo8ZyBpZD0idmlzaWJpbGl0eSI+PHBhdGggZD0iTTEyIDQuNUM3IDQuNSAyLjczIDcuNjEgMSAxMmMxLjczIDQuMzkgNiA3LjUgMTEgNy41czkuMjctMy4xMSAxMS03LjVjLTEuNzMtNC4zOS02LTcuNS0xMS03LjV6TTEyIDE3Yy0yLjc2IDAtNS0yLjI0LTUtNXMyLjI0LTUgNS01IDUgMi4yNCA1IDUtMi4yNCA1LTUgNXptMC04Yy0xLjY2IDAtMyAxLjM0LTMgM3MxLjM0IDMgMyAzIDMtMS4zNCAzLTMtMS4zNC0zLTMtM3oiIC8+PC9nPgo8ZyBpZD0idmlzaWJpbGl0eS1vZmYiPjxwYXRoIGQ9Ik0xMiA3YzIuNzYgMCA1IDIuMjQgNSA1IDAgLjY1LS4xMyAxLjI2LS4zNiAxLjgzbDIuOTIgMi45MmMxLjUxLTEuMjYgMi43LTIuODkgMy40My00Ljc1LTEuNzMtNC4zOS02LTcuNS0xMS03LjUtMS40IDAtMi43NC4yNS0zLjk4LjdsMi4xNiAyLjE2QzEwLjc0IDcuMTMgMTEuMzUgNyAxMiA3ek0yIDQuMjdsMi4yOCAyLjI4LjQ2LjQ2QzMuMDggOC4zIDEuNzggMTAuMDIgMSAxMmMxLjczIDQuMzkgNiA3LjUgMTEgNy41IDEuNTUgMCAzLjAzLS4zIDQuMzgtLjg0bC40Mi40MkwxOS43MyAyMiAyMSAyMC43MyAzLjI3IDMgMiA0LjI3ek03LjUzIDkuOGwxLjU1IDEuNTVjLS4wNS4yMS0uMDguNDMtLjA4LjY1IDAgMS42NiAxLjM0IDMgMyAzIC4yMiAwIC40NC0uMDMuNjUtLjA4bDEuNTUgMS41NWMtLjY3LjMzLTEuNDEuNTMtMi4yLjUzLTIuNzYgMC01LTIuMjQtNS01IDAtLjc5LjItMS41My41My0yLjJ6bTQuMzEtLjc4bDMuMTUgMy4xNS4wMi0uMTZjMC0xLjY2LTEuMzQtMy0zLTNsLS4xNy4wMXoiIC8+PC9nPgo8ZyBpZD0id2FybmluZyI+PHBhdGggZD0iTTEgMjFoMjJMMTIgMiAxIDIxem0xMi0zaC0ydi0yaDJ2MnptMC00aC0ydi00aDJ2NHoiIC8+PC9nPgo8ZyBpZD0id2F0Y2gtbGF0ZXIiPjxwYXRoIGQ9Ik0xMiAyQzYuNSAyIDIgNi41IDIgMTJzNC41IDEwIDEwIDEwIDEwLTQuNSAxMC0xMFMxNy41IDIgMTIgMnptNC4yIDE0LjJMMTEgMTNWN2gxLjV2NS4ybDQuNSAyLjctLjggMS4zeiIgLz48L2c+CjxnIGlkPSJ3ZWVrZW5kIj48cGF0aCBkPSJNMjEgMTBjLTEuMSAwLTIgLjktMiAydjNINXYtM2MwLTEuMS0uOS0yLTItMnMtMiAuOS0yIDJ2NWMwIDEuMS45IDIgMiAyaDE4YzEuMSAwIDItLjkgMi0ydi01YzAtMS4xLS45LTItMi0yem0tMy01SDZjLTEuMSAwLTIgLjktMiAydjIuMTVjMS4xNi40MSAyIDEuNTEgMiAyLjgyVjE0aDEydi0yLjAzYzAtMS4zLjg0LTIuNCAyLTIuODJWN2MwLTEuMS0uOS0yLTItMnoiIC8+PC9nPgo8ZyBpZD0id29yayI+PHBhdGggZD0iTTIwIDZoLTRWNGMwLTEuMTEtLjg5LTItMi0yaC00Yy0xLjExIDAtMiAuODktMiAydjJINGMtMS4xMSAwLTEuOTkuODktMS45OSAyTDIgMTljMCAxLjExLjg5IDIgMiAyaDE2YzEuMTEgMCAyLS44OSAyLTJWOGMwLTEuMTEtLjg5LTItMi0yem0tNiAwaC00VjRoNHYyeiIgLz48L2c+CjxnIGlkPSJ5b3V0dWJlLXNlYXJjaGVkLWZvciI+PHBhdGggZD0iTTE3LjAxIDE0aC0uOGwtLjI3LS4yN2MuOTgtMS4xNCAxLjU3LTIuNjEgMS41Ny00LjIzIDAtMy41OS0yLjkxLTYuNS02LjUtNi41cy02LjUgMy02LjUgNi41SDJsMy44NCA0IDQuMTYtNEg2LjUxQzYuNTEgNyA4LjUzIDUgMTEuMDEgNXM0LjUgMi4wMSA0LjUgNC41YzAgMi40OC0yLjAyIDQuNS00LjUgNC41LS42NSAwLTEuMjYtLjE0LTEuODItLjM4TDcuNzEgMTUuMWMuOTcuNTcgMi4wOS45IDMuMy45IDEuNjEgMCAzLjA4LS41OSA0LjIyLTEuNTdsLjI3LjI3di43OWw1LjAxIDQuOTlMMjIgMTlsLTQuOTktNXoiIC8+PC9nPgo8ZyBpZD0iem9vbS1pbiI+PHBhdGggZD0iTTE1LjUgMTRoLS43OWwtLjI4LS4yN0MxNS40MSAxMi41OSAxNiAxMS4xMSAxNiA5LjUgMTYgNS45MSAxMy4wOSAzIDkuNSAzUzMgNS45MSAzIDkuNSA1LjkxIDE2IDkuNSAxNmMxLjYxIDAgMy4wOS0uNTkgNC4yMy0xLjU3bC4yNy4yOHYuNzlsNSA0Ljk5TDIwLjQ5IDE5bC00Ljk5LTV6bS02IDBDNy4wMSAxNCA1IDExLjk5IDUgOS41UzcuMDEgNSA5LjUgNSAxNCA3LjAxIDE0IDkuNSAxMS45OSAxNCA5LjUgMTR6bTIuNS00aC0ydjJIOXYtMkg3VjloMlY3aDF2MmgydjF6IiAvPjwvZz4KPGcgaWQ9Inpvb20tb3V0Ij48cGF0aCBkPSJNMTUuNSAxNGgtLjc5bC0uMjgtLjI3QzE1LjQxIDEyLjU5IDE2IDExLjExIDE2IDkuNSAxNiA1LjkxIDEzLjA5IDMgOS41IDNTMyA1LjkxIDMgOS41IDUuOTEgMTYgOS41IDE2YzEuNjEgMCAzLjA5LS41OSA0LjIzLTEuNTdsLjI3LjI4di43OWw1IDQuOTlMMjAuNDkgMTlsLTQuOTktNXptLTYgMEM3LjAxIDE0IDUgMTEuOTkgNSA5LjVTNy4wMSA1IDkuNSA1IDE0IDcuMDEgMTQgOS41IDExLjk5IDE0IDkuNSAxNHpNNyA5aDV2MUg3eiIgLz48L2c+CjwvZGVmcz48L3N2Zz4KPC9pcm9uLWljb25zZXQtc3ZnPgoKCgoKCgoKCgo8ZG9tLW1vZHVsZSBpZD0icGFwZXItaWNvbi1idXR0b24iPgogIDx0ZW1wbGF0ZSBzdHJpcC13aGl0ZXNwYWNlPgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBwYWRkaW5nOiA4cHg7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgLW1zLXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB6LWluZGV4OiAwOwogICAgICAgIGxpbmUtaGVpZ2h0OiAxOwoKICAgICAgICB3aWR0aDogNDBweDsKICAgICAgICBoZWlnaHQ6IDQwcHg7CgogICAgICAgIC8qIE5PVEU6IEJvdGggdmFsdWVzIGFyZSBuZWVkZWQsIHNpbmNlIHNvbWUgcGhvbmVzIHJlcXVpcmUgdGhlIHZhbHVlIHRvIGJlIGB0cmFuc3BhcmVudGAuICovCiAgICAgICAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiByZ2JhKDAsIDAsIDAsIDApOwogICAgICAgIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogdHJhbnNwYXJlbnQ7CgogICAgICAgIC8qIEJlY2F1c2Ugb2YgcG9seW1lci8yNTU4LCB0aGlzIHN0eWxlIGhhcyBsb3dlciBzcGVjaWZpY2l0eSB0aGFuICogKi8KICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94ICFpbXBvcnRhbnQ7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWljb24tYnV0dG9uOwogICAgICB9CgogICAgICA6aG9zdCAjaW5rIHsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItaWNvbi1idXR0b24taW5rLWNvbG9yLCB2YXIoLS1wcmltYXJ5LXRleHQtY29sb3IpKTsKICAgICAgICBvcGFjaXR5OiAwLjY7CiAgICAgIH0KCiAgICAgIDpob3N0KFtkaXNhYmxlZF0pIHsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItaWNvbi1idXR0b24tZGlzYWJsZWQtdGV4dCwgdmFyKC0tZGlzYWJsZWQtdGV4dC1jb2xvcikpOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIGN1cnNvcjogYXV0bzsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItaWNvbi1idXR0b24tZGlzYWJsZWQ7CiAgICAgIH0KCiAgICAgIDpob3N0KFtoaWRkZW5dKSB7CiAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgICB9CgogICAgICA6aG9zdCg6aG92ZXIpIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1pY29uLWJ1dHRvbi1ob3ZlcjsKICAgICAgfQoKICAgICAgaXJvbi1pY29uIHsKICAgICAgICAtLWlyb24taWNvbi13aWR0aDogMTAwJTsKICAgICAgICAtLWlyb24taWNvbi1oZWlnaHQ6IDEwMCU7CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPGlyb24taWNvbiBpZD0iaWNvbiIgc3JjPSJbW3NyY11dIiBpY29uPSJbW2ljb25dXSIgYWx0JD0iW1thbHRdXSI+PC9pcm9uLWljb24+CiAgPC90ZW1wbGF0ZT4KCiAgPHNjcmlwdD4vL35+V0VCUEFUSH5+L3BhcGVyLWljb24tYnV0dG9uL3BhcGVyLWljb24tYnV0dG9uLmh0bWwuanMKUG9seW1lcih7aXM6InBhcGVyLWljb24tYnV0dG9uIixob3N0QXR0cmlidXRlczp7cm9sZToiYnV0dG9uIix0YWJpbmRleDoiMCJ9LGJlaGF2aW9yczpbUG9seW1lci5QYXBlcklua3lGb2N1c0JlaGF2aW9yXSxwcm9wZXJ0aWVzOntzcmM6e3R5cGU6U3RyaW5nfSxpY29uOnt0eXBlOlN0cmluZ30sYWx0Ont0eXBlOlN0cmluZyxvYnNlcnZlcjoiX2FsdENoYW5nZWQifX0sX2FsdENoYW5nZWQ6ZnVuY3Rpb24oYSxjKXt2YXIgZD10aGlzLmdldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbCIpO2QmJmMhPWR8fHRoaXMuc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsIixhKX19KTsKPC9zY3JpcHQ+CjwvZG9tLW1vZHVsZT4KCgoKCgoKCgo8ZG9tLW1vZHVsZSBpZD0icnVuLWNvbG9yLXN0eWxlIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIFtjb2xvci1jbGFzcz0nbGlnaHQtYmx1ZSddIHBhcGVyLWNoZWNrYm94IHsKICAgICAgICAtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtY29sb3I6IHZhcigtLXBhcGVyLWxpZ2h0LWJsdWUtNTAwKTsKICAgICAgICAtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtaW5rLWNvbG9yOiB2YXIoLS1wYXBlci1saWdodC1ibHVlLTUwMCk7CiAgICAgICAgLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtY29sb3I6IHZhcigtLXBhcGVyLWxpZ2h0LWJsdWUtOTAwKTsKICAgICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1pbmstY29sb3I6IHZhcigtLXBhcGVyLWxpZ2h0LWJsdWUtOTAwKTsKICAgICAgfQogICAgICBbY29sb3ItY2xhc3M9J3JlZCddIHBhcGVyLWNoZWNrYm94IHsKICAgICAgICAtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtY29sb3I6IHZhcigtLXBhcGVyLXJlZC01MDApOwogICAgICAgIC0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1pbmstY29sb3I6IHZhcigtLXBhcGVyLXJlZC01MDApOwogICAgICAgIC0tcGFwZXItY2hlY2tib3gtdW5jaGVja2VkLWNvbG9yOiB2YXIoLS1wYXBlci1yZWQtOTAwKTsKICAgICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1pbmstY29sb3I6IHZhcigtLXBhcGVyLXJlZC05MDApOwogICAgICB9CiAgICAgIFtjb2xvci1jbGFzcz0nZ3JlZW4nXSBwYXBlci1jaGVja2JveCB7CiAgICAgICAgLS1wYXBlci1jaGVja2JveC1jaGVja2VkLWNvbG9yOiB2YXIoLS1wYXBlci1ncmVlbi01MDApOwogICAgICAgIC0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1pbmstY29sb3I6IHZhcigtLXBhcGVyLWdyZWVuLTUwMCk7CiAgICAgICAgLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtY29sb3I6IHZhcigtLXBhcGVyLWdyZWVuLTkwMCk7CiAgICAgICAgLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtaW5rLWNvbG9yOiB2YXIoLS1wYXBlci1ncmVlbi05MDApOwogICAgICB9CiAgICAgIFtjb2xvci1jbGFzcz0ncHVycGxlJ10gcGFwZXItY2hlY2tib3ggewogICAgICAgIC0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1jb2xvcjogdmFyKC0tcGFwZXItcHVycGxlLTUwMCk7CiAgICAgICAgLS1wYXBlci1jaGVja2JveC1jaGVja2VkLWluay1jb2xvcjogdmFyKC0tcGFwZXItcHVycGxlLTUwMCk7CiAgICAgICAgLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtY29sb3I6IHZhcigtLXBhcGVyLXB1cnBsZS05MDApOwogICAgICAgIC0tcGFwZXItY2hlY2tib3gtdW5jaGVja2VkLWluay1jb2xvcjogdmFyKC0tcGFwZXItcHVycGxlLTkwMCk7CiAgICAgIH0KICAgICAgW2NvbG9yLWNsYXNzPSd0ZWFsJ10gcGFwZXItY2hlY2tib3ggewogICAgICAgIC0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1jb2xvcjogdmFyKC0tcGFwZXItdGVhbC01MDApOwogICAgICAgIC0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1pbmstY29sb3I6IHZhcigtLXBhcGVyLXRlYWwtNTAwKTsKICAgICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1jb2xvcjogdmFyKC0tcGFwZXItdGVhbC05MDApOwogICAgICAgIC0tcGFwZXItY2hlY2tib3gtdW5jaGVja2VkLWluay1jb2xvcjogdmFyKC0tcGFwZXItdGVhbC05MDApOwogICAgICB9CiAgICAgIFtjb2xvci1jbGFzcz0ncGluayddIHBhcGVyLWNoZWNrYm94IHsKICAgICAgICAtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtY29sb3I6IHZhcigtLXBhcGVyLXBpbmstNTAwKTsKICAgICAgICAtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtaW5rLWNvbG9yOiB2YXIoLS1wYXBlci1waW5rLTUwMCk7CiAgICAgICAgLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtY29sb3I6IHZhcigtLXBhcGVyLXBpbmstOTAwKTsKICAgICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1pbmstY29sb3I6IHZhcigtLXBhcGVyLXBpbmstOTAwKTsKICAgICAgfQogICAgICBbY29sb3ItY2xhc3M9J29yYW5nZSddIHBhcGVyLWNoZWNrYm94IHsKICAgICAgICAtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtY29sb3I6IHZhcigtLXBhcGVyLW9yYW5nZS01MDApOwogICAgICAgIC0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1pbmstY29sb3I6IHZhcigtLXBhcGVyLW9yYW5nZS01MDApOwogICAgICAgIC0tcGFwZXItY2hlY2tib3gtdW5jaGVja2VkLWNvbG9yOiB2YXIoLS1wYXBlci1vcmFuZ2UtOTAwKTsKICAgICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1pbmstY29sb3I6IHZhcigtLXBhcGVyLW9yYW5nZS05MDApOwogICAgICB9CiAgICAgIFtjb2xvci1jbGFzcz0nYnJvd24nXSBwYXBlci1jaGVja2JveCB7CiAgICAgICAgLS1wYXBlci1jaGVja2JveC1jaGVja2VkLWNvbG9yOiB2YXIoLS1wYXBlci1icm93bi01MDApOwogICAgICAgIC0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1pbmstY29sb3I6IHZhcigtLXBhcGVyLWJyb3duLTUwMCk7CiAgICAgICAgLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtY29sb3I6IHZhcigtLXBhcGVyLWJyb3duLTkwMCk7CiAgICAgICAgLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtaW5rLWNvbG9yOiB2YXIoLS1wYXBlci1icm93bi05MDApOwogICAgICB9CiAgICAgIFtjb2xvci1jbGFzcz0naW5kaWdvJ10gcGFwZXItY2hlY2tib3ggewogICAgICAgIC0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1jb2xvcjogdmFyKC0tcGFwZXItaW5kaWdvLTUwMCk7CiAgICAgICAgLS1wYXBlci1jaGVja2JveC1jaGVja2VkLWluay1jb2xvcjogdmFyKC0tcGFwZXItaW5kaWdvLTUwMCk7CiAgICAgICAgLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtY29sb3I6IHZhcigtLXBhcGVyLWluZGlnby05MDApOwogICAgICAgIC0tcGFwZXItY2hlY2tib3gtdW5jaGVja2VkLWluay1jb2xvcjogdmFyKC0tcGFwZXItaW5kaWdvLTkwMCk7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPgoKCgoKPGRvbS1tb2R1bGUgaWQ9InRmLW11bHRpLWNoZWNrYm94Ij4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGUgaW5jbHVkZT0ic2Nyb2xsYmFyLXN0eWxlIj48L3N0eWxlPgogICAgPHN0eWxlIGluY2x1ZGU9InJ1bi1jb2xvci1zdHlsZSI+PC9zdHlsZT4KCiAgICA8cGFwZXItaW5wdXQgaWQ9Im5hbWVzLXJlZ2V4IiBuby1sYWJlbC1mbG9hdCBsYWJlbD0iV3JpdGUgYSByZWdleCB0byBmaWx0ZXIgcnVucyIgdmFsdWU9IltbcmVnZXhdXSIgb24tYmluZC12YWx1ZS1jaGFuZ2VkPSJfZGVib3VuY2VkUmVnZXhDaGFuZ2UiPjwvcGFwZXItaW5wdXQ+CiAgICA8ZGl2IGlkPSJvdXRlci1jb250YWluZXIiIGNsYXNzPSJzY3JvbGxiYXIiPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW25hbWVzTWF0Y2hpbmdSZWdleF1dIj4KICAgICAgICA8ZGl2IGNsYXNzPSJuYW1lLXJvdyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJpY29uLWNvbnRhaW5lciBjaGVja2JveC1jb250YWluZXIgdmVydGljYWwtYWxpZ24tY29udGFpbmVyIj4KICAgICAgICAgICAgPHBhcGVyLWNoZWNrYm94IGNsYXNzPSJjaGVja2JveCB2ZXJ0aWNhbC1hbGlnbi1jZW50ZXIiIGlkJD0iY2hlY2tib3gtW1tpdGVtXV0iIG5hbWU9IltbaXRlbV1dIiBjaGVja2VkJD0iW1tfaXNDaGVja2VkKGl0ZW0sIHNlbGVjdGlvblN0YXRlLiopXV0iIG9uLWNoYW5nZT0iX2NoZWNrYm94Q2hhbmdlIj48L3BhcGVyLWNoZWNrYm94PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJpY29uLWNvbnRhaW5lciBpc29sYXRvci1jb250YWluZXIgdmVydGljYWwtYWxpZ24tY29udGFpbmVyIj4KICAgICAgICAgICAgPHBhcGVyLWljb24tYnV0dG9uIGljb249InJhZGlvLWJ1dHRvbi11bmNoZWNrZWQiIGNsYXNzPSJpc29sYXRvciB2ZXJ0aWNhbC1hbGlnbi1jZW50ZXIiIG9uLXRhcD0iX2lzb2xhdGVOYW1lIiBuYW1lPSJbW2l0ZW1dXSI+PC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iaXRlbS1sYWJlbC1jb250YWluZXIiPgogICAgICAgICAgICA8c3Bhbj5bW2l0ZW1dXTwvc3Bhbj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L3RlbXBsYXRlPgogICAgPC9kaXY+CiAgICA8c3R5bGU+CiAgICAgIHBhcGVyLWlucHV0IHsKICAgICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1mb2N1cy1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItaW5wdXQ6IHsKICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICB9CiAgICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItbGFiZWw6IHsKICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICB9CiAgICAgIH0KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQogICAgICAjb3V0ZXItY29udGFpbmVyIHsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIG92ZXJmbG93LXg6IGhpZGRlbjsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgZmxleC1zaHJpbms6IDE7CiAgICAgICAgd29yZC13cmFwOiBicmVhay13b3JkOwogICAgICB9CiAgICAgIC5uYW1lLXJvdyB7CiAgICAgICAgcGFkZGluZy10b3A6IDVweDsKICAgICAgICBwYWRkaW5nLWJvdHRvbTogNXB4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgd29yZC1icmVhazogYnJlYWstYWxsOyAvKiBtYWtlcyB3cmFwcGluZyBvZiBoeXBlcnBhcmFtIHN0cmluZ3MgYmV0dGVyICovCiAgICAgIH0KICAgICAgLmljb24tY29udGFpbmVyIHsKICAgICAgICBmbGV4LWdyb3c6IDA7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgcGFkZGluZy1sZWZ0OiAycHg7CiAgICAgIH0KICAgICAgLmNoZWNrYm94IHsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDJweDsKICAgICAgICB3aWR0aDogMThweDsKICAgICAgICBoZWlnaHQ6IDE4cHg7CiAgICAgIH0KICAgICAgLmlzb2xhdG9yIHsKICAgICAgICB3aWR0aDogMThweDsKICAgICAgICBoZWlnaHQ6IDE4cHg7CiAgICAgICAgcGFkZGluZzogMHB4OwogICAgICB9CiAgICAgIC5pc29sYXRvci1jb250YWluZXIgewogICAgICAgIHBhZGRpbmctbGVmdDogNnB4OwogICAgICAgIHBhZGRpbmctcmlnaHQ6IDNweDsKICAgICAgfQogICAgICAuY2hlY2tib3gtY29udGFpbmVyIHsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDJweDsKICAgICAgfQogICAgICAuaXRlbS1sYWJlbC1jb250YWluZXIgewogICAgICAgIHBhZGRpbmctbGVmdDogNXB4OwogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgICBmbGV4LXNocmluazogMTsKICAgICAgICB3aWR0aDogMHB4OyAvKiBoYWNrIHRvIGdldCB0aGUgZmxleC1ncm93IHRvIHdvcmsgcHJvcGVybHkgKi8KICAgICAgfQogICAgICAudG9vbHRpcC12YWx1ZS1jb250YWluZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgZmxleC1ncm93OiAwOwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OwogICAgICAgIHBhZGRpbmctbGVmdDogMnB4OwogICAgICB9CiAgICAgIC52ZXJ0aWNhbC1hbGlnbi1jb250YWluZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgIH0KICAgICAgLnZlcnRpY2FsLWFsaWduLWNvbnRhaW5lciAudmVydGljYWwtYWxpZ24tY2VudGVyIHsKICAgICAgICBhbGlnbi1zZWxmOiBjZW50ZXI7CiAgICAgIH0KICAgICAgLnZlcnRpY2FsLWFsaWduLWNvbnRhaW5lciAudmVydGljYWwtYWxpZ24tdG9wIHsKICAgICAgICBhbGlnbi1zZWxmOiBzdGFydDsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgogIDxzY3JpcHQ+Ly9+fldFQlBBVEh+fi90Zi1kYXNoYm9hcmQtY29tbW9uL3RmLW11bHRpLWNoZWNrYm94LmpzCihmdW5jdGlvbigpe1BvbHltZXIoe2lzOiJ0Zi1tdWx0aS1jaGVja2JveCIscHJvcGVydGllczp7bmFtZXM6e3R5cGU6QXJyYXksdmFsdWU6KCk9PltdfSxjb2xvcmluZzp7dHlwZTpPYmplY3QsdmFsdWU6e2dldENvbG9yOigpPT4iIn19LHJlZ2V4Ont0eXBlOlN0cmluZyxub3RpZnk6ITAsdmFsdWU6IiJ9LF9yZWdleDp7dHlwZTpPYmplY3QsY29tcHV0ZWQ6Il9tYWtlUmVnZXgocmVnZXgpIn0sbmFtZXNNYXRjaGluZ1JlZ2V4Ont0eXBlOkFycmF5LGNvbXB1dGVkOiJjb21wdXRlTmFtZXNNYXRjaGluZ1JlZ2V4KG5hbWVzLiosIF9yZWdleCkifSxzZWxlY3Rpb25TdGF0ZTp7dHlwZTpPYmplY3Qsbm90aWZ5OiEwLHZhbHVlOigpPT4oe30pfSxvdXRTZWxlY3RlZDp7dHlwZTpBcnJheSxub3RpZnk6ITAsY29tcHV0ZWQ6ImNvbXB1dGVPdXRTZWxlY3RlZChuYW1lc01hdGNoaW5nUmVnZXguKiwgc2VsZWN0aW9uU3RhdGUuKikifSxtYXhOYW1lc1RvRW5hYmxlQnlEZWZhdWx0Ont0eXBlOk51bWJlciwKdmFsdWU6NDB9LF9kZWJvdW5jZWRSZWdleENoYW5nZTp7dHlwZTpPYmplY3QsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgYT1fLmRlYm91bmNlKGM9Pnt0aGlzLnJlZ2V4PWN9LDE1MCx7bGVhZGluZzohMX0pO3JldHVybiBmdW5jdGlvbigpe3ZhciBjPXRoaXMuJCQoIiNuYW1lcy1yZWdleCIpLnZhbHVlOyIiPT1jP3RoaXMuYXN5bmMoKCk9Pnt0aGlzLnJlZ2V4PWN9LDMwKTphKGMpfX19fSxsaXN0ZW5lcnM6eyJkb20tY2hhbmdlIjoic3luY2hyb25pemVDb2xvcnMifSxvYnNlcnZlcnM6WyJfc2V0SXNvbGF0b3JJY29uKHNlbGVjdGlvblN0YXRlLCBuYW1lcykiXSxfbWFrZVJlZ2V4OmZ1bmN0aW9uKGEpe3RyeXtyZXR1cm4gbmV3IFJlZ0V4cChhKX1jYXRjaChjKXtyZXR1cm4gbnVsbH19LF9zZXRJc29sYXRvckljb246ZnVuY3Rpb24oKXt2YXIgYT10aGlzLnNlbGVjdGlvblN0YXRlLGM9Xy5maWx0ZXIoXy52YWx1ZXMoYSkpLmxlbmd0aDtBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzLnJvb3QucXVlcnlTZWxlY3RvckFsbCgiLmlzb2xhdG9yIikpLmZvckVhY2goZnVuY3Rpb24oZCl7ZC5pY29uPQoxPT09YyYmYVtkLm5hbWVdPyJyYWRpby1idXR0b24tY2hlY2tlZCI6InJhZGlvLWJ1dHRvbi11bmNoZWNrZWQifSl9LGNvbXB1dGVOYW1lc01hdGNoaW5nUmVnZXg6ZnVuY3Rpb24oKXtjb25zdCBhPXRoaXMuX3JlZ2V4O3JldHVybiBhP3RoaXMubmFtZXMuZmlsdGVyKGM9PmEudGVzdChjKSk6dGhpcy5uYW1lc30sY29tcHV0ZU91dFNlbGVjdGVkOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5zZWxlY3Rpb25TdGF0ZSxjPXRoaXMubmFtZXNNYXRjaGluZ1JlZ2V4Lmxlbmd0aDw9dGhpcy5tYXhOYW1lc1RvRW5hYmxlQnlEZWZhdWx0O3JldHVybiB0aGlzLm5hbWVzTWF0Y2hpbmdSZWdleC5maWx0ZXIoZD0+bnVsbD09YVtkXT9jOmFbZF0pfSxzeW5jaHJvbml6ZUNvbG9yczpmdW5jdGlvbigpe3RoaXMuX3NldElzb2xhdG9ySWNvbigpO3RoaXMucm9vdC5xdWVyeVNlbGVjdG9yQWxsKCJwYXBlci1jaGVja2JveCIpLmZvckVhY2goYT0+e2NvbnN0IGM9dGhpcy5jb2xvcmluZy5nZXRDb2xvcihhLm5hbWUpOwphLnVwZGF0ZVN0eWxlcyh7Ii0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1jb2xvciI6YywiLS1wYXBlci1jaGVja2JveC1jaGVja2VkLWluay1jb2xvciI6YywiLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtY29sb3IiOmMsIi0tcGFwZXItY2hlY2tib3gtdW5jaGVja2VkLWluay1jb2xvciI6Y30pfSk7dGhpcy5yb290LnF1ZXJ5U2VsZWN0b3JBbGwoIi5pc29sYXRvciIpLmZvckVhY2goYT0+e2NvbnN0IGM9dGhpcy5jb2xvcmluZy5nZXRDb2xvcihhLm5hbWUpO2Euc3R5bGUuY29sb3I9Y30pO3dpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9Pnt0aGlzLnVwZGF0ZVN0eWxlcygpfSl9LF9pc29sYXRlTmFtZTpmdW5jdGlvbihhKXt2YXIgYz1Qb2x5bWVyLmRvbShhKS5sb2NhbFRhcmdldC5uYW1lLGQ9e307dGhpcy5uYW1lcy5mb3JFYWNoKGZ1bmN0aW9uKGYpe2RbZl09Zj09Y30pO3RoaXMuc2VsZWN0aW9uU3RhdGU9ZH0sX2NoZWNrYm94Q2hhbmdlOmZ1bmN0aW9uKGEpe2E9ClBvbHltZXIuZG9tKGEpLmxvY2FsVGFyZ2V0O2NvbnN0IGM9Xy5jbG9uZSh0aGlzLnNlbGVjdGlvblN0YXRlKTtjW2EubmFtZV09YS5jaGVja2VkO3RoaXMuc2VsZWN0aW9uU3RhdGU9Y30sX2lzQ2hlY2tlZDpmdW5jdGlvbihhKXtyZXR1cm4tMSE9dGhpcy5vdXRTZWxlY3RlZC5pbmRleE9mKGEpfSx0b2dnbGVBbGw6ZnVuY3Rpb24oKXtjb25zdCBhPXRoaXMubmFtZXNNYXRjaGluZ1JlZ2V4LnNvbWUoZD0+dGhpcy5vdXRTZWxlY3RlZC5pbmNsdWRlcyhkKSksYz17fTt0aGlzLm5hbWVzLmZvckVhY2goZD0+e2NbZF09IWF9KTt0aGlzLnNlbGVjdGlvblN0YXRlPWN9fSl9KShXbHx8KFdsPXt9KSk7Cjwvc2NyaXB0Pgo8L2RvbS1tb2R1bGU+CgoKCgo8ZG9tLW1vZHVsZSBpZD0idGYtd2JyLXN0cmluZyI+CiAgPHRlbXBsYXRlPgogICAgCiAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19wYXJ0c11dIiBhcz0icGFydCI+W1twYXJ0XV08d2JyPjwvdGVtcGxhdGU+CiAgPC90ZW1wbGF0ZT4KICA8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdGYtcnVucy1zZWxlY3Rvci90Zi13YnItc3RyaW5nLmh0bWwuanMKUG9seW1lcih7aXM6InRmLXdici1zdHJpbmciLHByb3BlcnRpZXM6e3ZhbHVlOlN0cmluZyxfcGFydHM6e3R5cGU6QXJyYXksY29tcHV0ZWQ6Il9jb21wdXRlUGFydHModmFsdWUpIn19LF9jb21wdXRlUGFydHMoYSl7Y29uc3QgYz1bXSxkPS9bLz1fLC1dLztmb3IobnVsbD09YSYmKGE9IiIpOzspe2NvbnN0IGY9YS5zZWFyY2goZCk7aWYoLTE9PT1mKXtjLnB1c2goYSk7YnJlYWt9ZWxzZSBjLnB1c2goYS5zbGljZSgwLGYrMSkpLGE9YS5zbGljZShmKzEpfXJldHVybiBjfX0pOwo8L3NjcmlwdD4KPC9kb20tbW9kdWxlPgoKCgo8ZG9tLW1vZHVsZSBpZD0idGYtcnVucy1zZWxlY3RvciI+CiAgPHRlbXBsYXRlPgogICAgPHBhcGVyLWRpYWxvZyB3aXRoLWJhY2tkcm9wIGlkPSJkYXRhLWxvY2F0aW9uLWRpYWxvZyI+CiAgICAgIDxoMj5EYXRhIExvY2F0aW9uPC9oMj4KICAgICAgPHRmLXdici1zdHJpbmcgdmFsdWU9IltbZGF0YUxvY2F0aW9uXV0iIC8+CiAgICA8L3BhcGVyLWRpYWxvZz4KICAgIDxkaXYgaWQ9InRvcC10ZXh0Ij4KICAgICAgPGgzIGlkPSJ0b29sdGlwLWhlbHAiIGNsYXNzPSJ0b29sdGlwLWNvbnRhaW5lciI+UnVuczwvaDM+CiAgICA8L2Rpdj4KICAgIDx0Zi1tdWx0aS1jaGVja2JveCBpZD0ibXVsdGlDaGVja2JveCIgbmFtZXM9IltbcnVuc11dIiBzZWxlY3Rpb24tc3RhdGU9Int7cnVuU2VsZWN0aW9uU3RhdGV9fSIgb3V0LXNlbGVjdGVkPSJ7e3NlbGVjdGVkUnVuc319IiByZWdleD0ie3tyZWdleElucHV0fX0iIGNvbG9yaW5nPSJbW2NvbG9yaW5nXV0iPjwvdGYtbXVsdGktY2hlY2tib3g+CiAgICA8cGFwZXItYnV0dG9uIGNsYXNzPSJ4LWJ1dHRvbiIgaWQ9InRvZ2dsZS1hbGwiIG9uLXRhcD0iX3RvZ2dsZUFsbCI+CiAgICAgIFRvZ2dsZSBBbGwgUnVucwogICAgPC9wYXBlci1idXR0b24+CiAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbZGF0YUxvY2F0aW9uXV0iPgogICAgICA8ZGl2IGlkPSJkYXRhLWxvY2F0aW9uIj4KICAgICAgICA8dGYtd2JyLXN0cmluZyB2YWx1ZT0iW1tfY2xpcHBlZERhdGFMb2NhdGlvbl1dIiAvPjx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfc2hvdWxkU2hvd0V4cGFuZERhdGFMb2NhdGlvbkJ1dHRvbihkYXRhTG9jYXRpb24sIF9kYXRhTG9jYXRpb25DbGlwTGVuZ3RoKV1dIj48YSBocmVmPSIiIG9uLWNsaWNrPSJfb3BlbkRhdGFMb2NhdGlvbkRpYWxvZyI+4oCmPC9hPgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDwvZGl2PgogICAgPC90ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIHBhZGRpbmctYm90dG9tOiAxMHB4OwogICAgICB9CiAgICAgICN0b3AtdGV4dCB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgZmxleC1ncm93OiAwOwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICAgIHBhZGRpbmctcmlnaHQ6IDE2cHg7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItZ3JleS04MDApOwogICAgICB9CiAgICAgIHRmLW11bHRpLWNoZWNrYm94IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgICBmbGV4LXNocmluazogMTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB9CiAgICAgIC54LWJ1dHRvbiB7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXRiLXVpLWxpZ2h0LWFjY2VudCk7CiAgICAgICAgY29sb3I6IHZhcigtLXRiLXVpLWRhcmstYWNjZW50KTsKICAgICAgfQogICAgICAjdG9vbHRpcC1oZWxwIHsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItZ3JleS04MDApOwogICAgICAgIG1hcmdpbjogMDsKICAgICAgICBmb250LXdlaWdodDogbm9ybWFsOwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBtYXJnaW4tYm90dG9tOiA1cHg7CiAgICAgIH0KICAgICAgcGFwZXItYnV0dG9uIHsKICAgICAgICBtYXJnaW4tbGVmdDogMDsKICAgICAgfQogICAgICAjZGF0YS1sb2NhdGlvbiB7CiAgICAgICAgY29sb3I6IHZhcigtLXRiLXVpLWRhcmstYWNjZW50KTsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgbWFyZ2luOiA1cHggMCAwIDA7CiAgICAgICAgbWF4LXdpZHRoOiAyODhweDsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgogIDxzY3JpcHQ+Ly9+fldFQlBBVEh+fi90Zi1ydW5zLXNlbGVjdG9yL3RmLXJ1bnMtc2VsZWN0b3IuaHRtbC5qcwpQb2x5bWVyKHtpczoidGYtcnVucy1zZWxlY3RvciIscHJvcGVydGllczp7cnVuU2VsZWN0aW9uU3RhdGU6e3R5cGU6T2JqZWN0LG9ic2VydmVyOiJfc3RvcmVSdW5TZWxlY3Rpb25TdGF0ZSIsdmFsdWU6VmwuZ2V0T2JqZWN0SW5pdGlhbGl6ZXIoInJ1blNlbGVjdGlvblN0YXRlIix7ZGVmYXVsdFZhbHVlOnt9fSl9LHJlZ2V4SW5wdXQ6e3R5cGU6U3RyaW5nLHZhbHVlOlZsLmdldFN0cmluZ0luaXRpYWxpemVyKCJyZWdleElucHV0Iix7ZGVmYXVsdFZhbHVlOiIifSksb2JzZXJ2ZXI6Il9yZWdleE9ic2VydmVyIn0sc2VsZWN0ZWRSdW5zOnt0eXBlOkFycmF5LG5vdGlmeTohMH0scnVuczpBcnJheSxkYXRhTG9jYXRpb246e3R5cGU6U3RyaW5nLG5vdGlmeTohMH0sX2NsaXBwZWREYXRhTG9jYXRpb246e3R5cGU6U3RyaW5nLGNvbXB1dGVkOiJfZ2V0Q2xpcHBlZERhdGFMb2NhdGlvbihkYXRhTG9jYXRpb24sIF9kYXRhTG9jYXRpb25DbGlwTGVuZ3RoKSJ9LF9kYXRhTG9jYXRpb25DbGlwTGVuZ3RoOnt0eXBlOk51bWJlciwKdmFsdWU6MjUwLHJlYWRPbmx5OiEwfSxjb2xvcmluZzp7dHlwZTpPYmplY3QsdmFsdWU6e2dldENvbG9yOlpsLnJ1bnNDb2xvclNjYWxlfX19LGF0dGFjaGVkKCl7dGhpcy5fcnVuU3RvcmVMaXN0ZW5lcj1Qay5ydW5zU3RvcmUuYWRkTGlzdGVuZXIoKCk9Pnt0aGlzLnNldCgicnVucyIsUGsucnVuc1N0b3JlLmdldFJ1bnMoKSl9KTt0aGlzLnNldCgicnVucyIsUGsucnVuc1N0b3JlLmdldFJ1bnMoKSk7dGhpcy5fZW52U3RvcmVMaXN0ZW5lcj1Qay5lbnZpcm9ubWVudFN0b3JlLmFkZExpc3RlbmVyKCgpPT57dGhpcy5zZXQoImRhdGFMb2NhdGlvbiIsUGsuZW52aXJvbm1lbnRTdG9yZS5nZXREYXRhTG9jYXRpb24oKSl9KTt0aGlzLnNldCgiZGF0YUxvY2F0aW9uIixQay5lbnZpcm9ubWVudFN0b3JlLmdldERhdGFMb2NhdGlvbigpKX0sZGV0YWNoZWQoKXtQay5ydW5zU3RvcmUucmVtb3ZlTGlzdGVuZXJCeUtleSh0aGlzLl9ydW5TdG9yZUxpc3RlbmVyKTtQay5lbnZpcm9ubWVudFN0b3JlLnJlbW92ZUxpc3RlbmVyQnlLZXkodGhpcy5fZW52U3RvcmVMaXN0ZW5lcil9LApfdG9nZ2xlQWxsOmZ1bmN0aW9uKCl7dGhpcy4kLm11bHRpQ2hlY2tib3gudG9nZ2xlQWxsKCl9LF9nZXRDbGlwcGVkRGF0YUxvY2F0aW9uOmZ1bmN0aW9uKGEsYyl7aWYodm9pZCAwIT09YSYmIShhLmxlbmd0aD5jKSlyZXR1cm4gYX0sX29wZW5EYXRhTG9jYXRpb25EaWFsb2c6ZnVuY3Rpb24oYSl7YS5wcmV2ZW50RGVmYXVsdCgpO3RoaXMuJCQoIiNkYXRhLWxvY2F0aW9uLWRpYWxvZyIpLm9wZW4oKX0sX3Nob3VsZFNob3dFeHBhbmREYXRhTG9jYXRpb25CdXR0b24oYSxjKXtyZXR1cm4gYSYmYS5sZW5ndGg+Y30sX3N0b3JlUnVuU2VsZWN0aW9uU3RhdGU6VmwuZ2V0T2JqZWN0T2JzZXJ2ZXIoInJ1blNlbGVjdGlvblN0YXRlIix7ZGVmYXVsdFZhbHVlOnt9fSksX3JlZ2V4T2JzZXJ2ZXI6VmwuZ2V0U3RyaW5nT2JzZXJ2ZXIoInJlZ2V4SW5wdXQiLHtkZWZhdWx0VmFsdWU6IiJ9KX0pOwo8L3NjcmlwdD4KPC9kb20tbW9kdWxlPgoKCjxzY3JpcHQ+Ly9+fldFQlBBVEh+fi90Zi10ZW5zb3Jib2FyZC9yZWdpc3RyeS5qcwp2YXIgJGw7CihmdW5jdGlvbihhKXsoZnVuY3Rpb24oYyl7Yy5OT1RfTE9BREVEPSJOT1RfTE9BREVEIjtjLkxPQURFRD0iTE9BREVEIjtjLkZBSUxFRD0iRkFJTEVEIn0pKGEuQWN0aXZlRGFzaGJvYXJkc0xvYWRTdGF0ZXx8KGEuQWN0aXZlRGFzaGJvYXJkc0xvYWRTdGF0ZT17fSkpO2EuZGFzaGJvYXJkUmVnaXN0cnk9e307YS5yZWdpc3RlckRhc2hib2FyZD1mdW5jdGlvbihjKXtpZighYy5wbHVnaW4pdGhyb3cgRXJyb3IoIkRhc2hib2FyZC5wbHVnaW4gbXVzdCBiZSBwcmVzZW50Iik7aWYoIWMuZWxlbWVudE5hbWUpdGhyb3cgRXJyb3IoIkRhc2hib2FyZC5lbGVtZW50TmFtZSBtdXN0IGJlIHByZXNlbnQiKTtpZihjLnBsdWdpbiBpbiBhLmRhc2hib2FyZFJlZ2lzdHJ5KXRocm93IEVycm9yKGBQbHVnaW4gYWxyZWFkeSByZWdpc3RlcmVkOiAke2MucGx1Z2lufWApO2MudGFiTmFtZXx8KGMudGFiTmFtZT1jLnBsdWdpbik7YS5kYXNoYm9hcmRSZWdpc3RyeVtjLnBsdWdpbl09Y319KSgkbHx8KCRsPQp7fSkpOwo8L3NjcmlwdD4KCjxzY3JpcHQ+Ly9+fldFQlBBVEh+fi90Zi11dGlscy91dGlscy5qcwp2YXIgYW07CihmdW5jdGlvbihhKXtmdW5jdGlvbiBjKGQsZixnKXtyZXR1cm4gMT09PWQ/ZjpnfWEuYWdncmVnYXRlVGFnSW5mbz1mdW5jdGlvbihkLGYpe2xldCBnPXZvaWQgMDtjb25zdCBsPXt9O09iamVjdC5rZXlzKGQpLmZvckVhY2gobT0+e2NvbnN0IHA9ZFttXTt2b2lkIDA9PT1nJiYoZz1wLmRpc3BsYXlOYW1lKTtnIT09cC5kaXNwbGF5TmFtZSYmKGc9bnVsbCk7dm9pZCAwPT09bFtwLmRlc2NyaXB0aW9uXSYmKGxbcC5kZXNjcmlwdGlvbl09W10pO2xbcC5kZXNjcmlwdGlvbl0ucHVzaChtKX0pO2Y9bnVsbCE9Zz9nOmY7Y29uc3Qgaz0oKCk9Pntjb25zdCBtPU9iamVjdC5rZXlzKGwpO3JldHVybiAwPT09bS5sZW5ndGg/IiI6MT09PW0ubGVuZ3RoP21bMF06YCR7Ilx4M2NwXHgzZVx4M2NzdHJvbmdceDNlTXVsdGlwbGUgZGVzY3JpcHRpb25zOlx4M2Mvc3Ryb25nXHgzZVx4M2MvcFx4M2UifTx1bD4ke20ubWFwKHA9Pntjb25zdCBxPWxbcF0ubWFwKHQ9PmA8Y29kZT4ke3QucmVwbGFjZSgvPC9nLCJceDI2bHQ7IikucmVwbGFjZSgvPi9nLAoiXHgyNmd0OyIpLnJlcGxhY2UoLyYvZywiXHgyNmFtcDsiKX08L2NvZGU+YCkscj0yPHEubGVuZ3RoP3Euc2xpY2UoMCxxLmxlbmd0aC0xKS5qb2luKCIsICIpKyIsIGFuZCAiK3FbcS5sZW5ndGgtMV06cS5qb2luKCIgYW5kICIpO3JldHVybmA8bGk+PHA+Rm9yICR7YyhxLmxlbmd0aCwicnVuIiwicnVucyIpfSAke3J9OjwvcD4ke3B9PC9saT5gfSkuam9pbigiIil9PC91bD5gfSkoKTtyZXR1cm57ZGlzcGxheU5hbWU6ZixkZXNjcmlwdGlvbjprfX19KShhbXx8KGFtPXt9KSk7Cjwvc2NyaXB0PgoKCgoKCgoKCgoKCgoKPHNjcmlwdD4vL35+V0VCUEFUSH5+L3BhcGVyLXNwaW5uZXIvcGFwZXItc3Bpbm5lci1iZWhhdmlvci5odG1sLmpzClBvbHltZXIuUGFwZXJTcGlubmVyQmVoYXZpb3I9e3Byb3BlcnRpZXM6e2FjdGl2ZTp7dHlwZTpCb29sZWFuLHZhbHVlOiExLHJlZmxlY3RUb0F0dHJpYnV0ZTohMCxvYnNlcnZlcjoiX19hY3RpdmVDaGFuZ2VkIn0sYWx0Ont0eXBlOlN0cmluZyx2YWx1ZToibG9hZGluZyIsb2JzZXJ2ZXI6Il9fYWx0Q2hhbmdlZCJ9LF9fY29vbGluZ0Rvd246e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX19LF9fY29tcHV0ZUNvbnRhaW5lckNsYXNzZXM6ZnVuY3Rpb24oYSxjKXtyZXR1cm5bYXx8Yz8iYWN0aXZlIjoiIixjPyJjb29sZG93biI6IiJdLmpvaW4oIiAiKX0sX19hY3RpdmVDaGFuZ2VkOmZ1bmN0aW9uKGEsYyl7dGhpcy5fX3NldEFyaWFIaWRkZW4oIWEpO3RoaXMuX19jb29saW5nRG93bj0hYSYmY30sX19hbHRDaGFuZ2VkOmZ1bmN0aW9uKGEpeyJsb2FkaW5nIj09PWE/dGhpcy5hbHQ9dGhpcy5nZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiKXx8YToodGhpcy5fX3NldEFyaWFIaWRkZW4oIiI9PT0KYSksdGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiLGEpKX0sX19zZXRBcmlhSGlkZGVuOmZ1bmN0aW9uKGEpe2E/dGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtaGlkZGVuIiwidHJ1ZSIpOnRoaXMucmVtb3ZlQXR0cmlidXRlKCJhcmlhLWhpZGRlbiIpfSxfX3Jlc2V0OmZ1bmN0aW9uKCl7dGhpcy5fX2Nvb2xpbmdEb3duPXRoaXMuYWN0aXZlPSExfX07Cjwvc2NyaXB0PgoKPGRvbS1tb2R1bGUgaWQ9InBhcGVyLXNwaW5uZXItc3R5bGVzIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIC8qCiAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KICAgICAgLyogU1RZTEVTIEZPUiBUSEUgU1BJTk5FUiAqLwogICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCgogICAgICAvKgogICAgICAgKiBDb25zdGFudHM6CiAgICAgICAqICAgICAgQVJDU0laRSAgICAgPSAyNzAgZGVncmVlcyAoYW1vdW50IG9mIGNpcmNsZSB0aGUgYXJjIHRha2VzIHVwKQogICAgICAgKiAgICAgIEFSQ1RJTUUgICAgID0gMTMzM21zICh0aW1lIGl0IHRha2VzIHRvIGV4cGFuZCBhbmQgY29udHJhY3QgYXJjKQogICAgICAgKiAgICAgIEFSQ1NUQVJUUk9UID0gMjE2IGRlZ3JlZXMgKGhvdyBtdWNoIHRoZSBzdGFydCBsb2NhdGlvbiBvZiB0aGUgYXJjCiAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG91bGQgcm90YXRlIGVhY2ggdGltZSwgMjE2IGdpdmVzIHVzIGEKICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUgcG9pbnRlZCBzdGFyIHNoYXBlIChpdCdzIDM2MC81ICogMykuCiAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgYSA3IHBvaW50ZWQgc3Rhciwgd2UgbWlnaHQgZG8KICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM2MC83ICogMyA9IDE1NC4yODYpCiAgICAgICAqICAgICAgU0hSSU5LX1RJTUUgPSA0MDBtcwogICAgICAgKi8KCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHdpZHRoOiAyOHB4OwogICAgICAgIGhlaWdodDogMjhweDsKCiAgICAgICAgLyogMzYwICogQVJDVElNRSAvIChBUkNTVEFSVFJPVCArICgzNjAtQVJDU0laRSkpICovCiAgICAgICAgLS1wYXBlci1zcGlubmVyLWNvbnRhaW5lci1yb3RhdGlvbi1kdXJhdGlvbjogMTU2OG1zOwoKICAgICAgICAvKiBBUkNUSU1FICovCiAgICAgICAgLS1wYXBlci1zcGlubmVyLWV4cGFuZC1jb250cmFjdC1kdXJhdGlvbjogMTMzM21zOwoKICAgICAgICAvKiA0ICogQVJDVElNRSAqLwogICAgICAgIC0tcGFwZXItc3Bpbm5lci1mdWxsLWN5Y2xlLWR1cmF0aW9uOiA1MzMybXM7CgogICAgICAgIC8qIFNIUklOS19USU1FICovCiAgICAgICAgLS1wYXBlci1zcGlubmVyLWNvb2xkb3duLWR1cmF0aW9uOiA0MDBtczsKICAgICAgfQoKICAgICAgI3NwaW5uZXJDb250YWluZXIgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKCiAgICAgICAgLyogVGhlIHNwaW5uZXIgZG9lcyBub3QgaGF2ZSBhbnkgY29udGVudHMgdGhhdCB3b3VsZCBoYXZlIHRvIGJlCiAgICAgICAgICogZmxpcHBlZCBpZiB0aGUgZGlyZWN0aW9uIGNoYW5nZXMuIEFsd2F5cyB1c2UgbHRyIHNvIHRoYXQgdGhlCiAgICAgICAgICogc3R5bGUgd29ya3Mgb3V0IGNvcnJlY3RseSBpbiBib3RoIGNhc2VzLiAqLwogICAgICAgIGRpcmVjdGlvbjogbHRyOwogICAgICB9CgogICAgICAjc3Bpbm5lckNvbnRhaW5lci5hY3RpdmUgewogICAgICAgIC13ZWJraXQtYW5pbWF0aW9uOiBjb250YWluZXItcm90YXRlIHZhcigtLXBhcGVyLXNwaW5uZXItY29udGFpbmVyLXJvdGF0aW9uLWR1cmF0aW9uKSBsaW5lYXIgaW5maW5pdGU7CiAgICAgICAgYW5pbWF0aW9uOiBjb250YWluZXItcm90YXRlIHZhcigtLXBhcGVyLXNwaW5uZXItY29udGFpbmVyLXJvdGF0aW9uLWR1cmF0aW9uKSBsaW5lYXIgaW5maW5pdGU7CiAgICAgIH0KCiAgICAgIEAtd2Via2l0LWtleWZyYW1lcyBjb250YWluZXItcm90YXRlIHsKICAgICAgICB0byB7IC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKSB9CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMgY29udGFpbmVyLXJvdGF0ZSB7CiAgICAgICAgdG8geyB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpIH0KICAgICAgfQoKICAgICAgLnNwaW5uZXItbGF5ZXIgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1zcGlubmVyLWNvbG9yLCB2YXIoLS1nb29nbGUtYmx1ZS01MDApKTsKICAgICAgfQoKICAgICAgLmxheWVyLTEgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1zcGlubmVyLWxheWVyLTEtY29sb3IsIHZhcigtLWdvb2dsZS1ibHVlLTUwMCkpOwogICAgICB9CgogICAgICAubGF5ZXItMiB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLXNwaW5uZXItbGF5ZXItMi1jb2xvciwgdmFyKC0tZ29vZ2xlLXJlZC01MDApKTsKICAgICAgfQoKICAgICAgLmxheWVyLTMgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1zcGlubmVyLWxheWVyLTMtY29sb3IsIHZhcigtLWdvb2dsZS15ZWxsb3ctNTAwKSk7CiAgICAgIH0KCiAgICAgIC5sYXllci00IHsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItc3Bpbm5lci1sYXllci00LWNvbG9yLCB2YXIoLS1nb29nbGUtZ3JlZW4tNTAwKSk7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBJTVBPUlRBTlQgTk9URSBBQk9VVCBDU1MgQU5JTUFUSU9OIFBST1BFUlRJRVMgKGtlYW51bGVlKToKICAgICAgICoKICAgICAgICogaU9TIFNhZmFyaSAodGVzdGVkIG9uIGlPUyA4LjEpIGRvZXMgbm90IGhhbmRsZSBhbmltYXRpb24tZGVsYXkgdmVyeSB3ZWxsIC0gaXQgZG9lc24ndAogICAgICAgKiBndWFyYW50ZWUgdGhhdCB0aGUgYW5pbWF0aW9uIHdpbGwgc3RhcnQgX2V4YWN0bHlfIGFmdGVyIHRoYXQgdmFsdWUuIFNvIHdlIGF2b2lkIHVzaW5nCiAgICAgICAqIGFuaW1hdGlvbi1kZWxheSBhbmQgaW5zdGVhZCBzZXQgY3VzdG9tIGtleWZyYW1lcyBmb3IgZWFjaCBjb2xvciAoYXMgbGF5ZXItMnVuZGFudCBhcyBpdAogICAgICAgKiBzZWVtcykuCiAgICAgICAqLwogICAgICAuYWN0aXZlIC5zcGlubmVyLWxheWVyIHsKICAgICAgICAtd2Via2l0LWFuaW1hdGlvbi1uYW1lOiBmaWxsLXVuZmlsbC1yb3RhdGU7CiAgICAgICAgLXdlYmtpdC1hbmltYXRpb24tZHVyYXRpb246IHZhcigtLXBhcGVyLXNwaW5uZXItZnVsbC1jeWNsZS1kdXJhdGlvbik7CiAgICAgICAgLXdlYmtpdC1hbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC40LCAwLjAsIDAuMiwgMSk7CiAgICAgICAgLXdlYmtpdC1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiBpbmZpbml0ZTsKICAgICAgICBhbmltYXRpb24tbmFtZTogZmlsbC11bmZpbGwtcm90YXRlOwogICAgICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tcGFwZXItc3Bpbm5lci1mdWxsLWN5Y2xlLWR1cmF0aW9uKTsKICAgICAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC40LCAwLjAsIDAuMiwgMSk7CiAgICAgICAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogaW5maW5pdGU7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgfQoKICAgICAgLmFjdGl2ZSAuc3Bpbm5lci1sYXllci5sYXllci0xIHsKICAgICAgICAtd2Via2l0LWFuaW1hdGlvbi1uYW1lOiBmaWxsLXVuZmlsbC1yb3RhdGUsIGxheWVyLTEtZmFkZS1pbi1vdXQ7CiAgICAgICAgYW5pbWF0aW9uLW5hbWU6IGZpbGwtdW5maWxsLXJvdGF0ZSwgbGF5ZXItMS1mYWRlLWluLW91dDsKICAgICAgfQoKICAgICAgLmFjdGl2ZSAuc3Bpbm5lci1sYXllci5sYXllci0yIHsKICAgICAgICAtd2Via2l0LWFuaW1hdGlvbi1uYW1lOiBmaWxsLXVuZmlsbC1yb3RhdGUsIGxheWVyLTItZmFkZS1pbi1vdXQ7CiAgICAgICAgYW5pbWF0aW9uLW5hbWU6IGZpbGwtdW5maWxsLXJvdGF0ZSwgbGF5ZXItMi1mYWRlLWluLW91dDsKICAgICAgfQoKICAgICAgLmFjdGl2ZSAuc3Bpbm5lci1sYXllci5sYXllci0zIHsKICAgICAgICAtd2Via2l0LWFuaW1hdGlvbi1uYW1lOiBmaWxsLXVuZmlsbC1yb3RhdGUsIGxheWVyLTMtZmFkZS1pbi1vdXQ7CiAgICAgICAgYW5pbWF0aW9uLW5hbWU6IGZpbGwtdW5maWxsLXJvdGF0ZSwgbGF5ZXItMy1mYWRlLWluLW91dDsKICAgICAgfQoKICAgICAgLmFjdGl2ZSAuc3Bpbm5lci1sYXllci5sYXllci00IHsKICAgICAgICAtd2Via2l0LWFuaW1hdGlvbi1uYW1lOiBmaWxsLXVuZmlsbC1yb3RhdGUsIGxheWVyLTQtZmFkZS1pbi1vdXQ7CiAgICAgICAgYW5pbWF0aW9uLW5hbWU6IGZpbGwtdW5maWxsLXJvdGF0ZSwgbGF5ZXItNC1mYWRlLWluLW91dDsKICAgICAgfQoKICAgICAgQC13ZWJraXQta2V5ZnJhbWVzIGZpbGwtdW5maWxsLXJvdGF0ZSB7CiAgICAgICAgMTIuNSUgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDEzNWRlZykgfSAvKiAwLjUgKiBBUkNTSVpFICovCiAgICAgICAgMjUlICAgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDI3MGRlZykgfSAvKiAxICAgKiBBUkNTSVpFICovCiAgICAgICAgMzcuNSUgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDQwNWRlZykgfSAvKiAxLjUgKiBBUkNTSVpFICovCiAgICAgICAgNTAlICAgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDU0MGRlZykgfSAvKiAyICAgKiBBUkNTSVpFICovCiAgICAgICAgNjIuNSUgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDY3NWRlZykgfSAvKiAyLjUgKiBBUkNTSVpFICovCiAgICAgICAgNzUlICAgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDgxMGRlZykgfSAvKiAzICAgKiBBUkNTSVpFICovCiAgICAgICAgODcuNSUgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDk0NWRlZykgfSAvKiAzLjUgKiBBUkNTSVpFICovCiAgICAgICAgdG8gICAgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDEwODBkZWcpIH0gLyogNCAgICogQVJDU0laRSAqLwogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIGZpbGwtdW5maWxsLXJvdGF0ZSB7CiAgICAgICAgMTIuNSUgeyB0cmFuc2Zvcm06IHJvdGF0ZSgxMzVkZWcpIH0gLyogMC41ICogQVJDU0laRSAqLwogICAgICAgIDI1JSAgIHsgdHJhbnNmb3JtOiByb3RhdGUoMjcwZGVnKSB9IC8qIDEgICAqIEFSQ1NJWkUgKi8KICAgICAgICAzNy41JSB7IHRyYW5zZm9ybTogcm90YXRlKDQwNWRlZykgfSAvKiAxLjUgKiBBUkNTSVpFICovCiAgICAgICAgNTAlICAgeyB0cmFuc2Zvcm06IHJvdGF0ZSg1NDBkZWcpIH0gLyogMiAgICogQVJDU0laRSAqLwogICAgICAgIDYyLjUlIHsgdHJhbnNmb3JtOiByb3RhdGUoNjc1ZGVnKSB9IC8qIDIuNSAqIEFSQ1NJWkUgKi8KICAgICAgICA3NSUgICB7IHRyYW5zZm9ybTogcm90YXRlKDgxMGRlZykgfSAvKiAzICAgKiBBUkNTSVpFICovCiAgICAgICAgODcuNSUgeyB0cmFuc2Zvcm06IHJvdGF0ZSg5NDVkZWcpIH0gLyogMy41ICogQVJDU0laRSAqLwogICAgICAgIHRvICAgIHsgdHJhbnNmb3JtOiByb3RhdGUoMTA4MGRlZykgfSAvKiA0ICAgKiBBUkNTSVpFICovCiAgICAgIH0KCiAgICAgIEAtd2Via2l0LWtleWZyYW1lcyBsYXllci0xLWZhZGUtaW4tb3V0IHsKICAgICAgICAwJSB7IG9wYWNpdHk6IDEgfQogICAgICAgIDI1JSB7IG9wYWNpdHk6IDEgfQogICAgICAgIDI2JSB7IG9wYWNpdHk6IDAgfQogICAgICAgIDg5JSB7IG9wYWNpdHk6IDAgfQogICAgICAgIDkwJSB7IG9wYWNpdHk6IDEgfQogICAgICAgIHRvIHsgb3BhY2l0eTogMSB9CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMgbGF5ZXItMS1mYWRlLWluLW91dCB7CiAgICAgICAgMCUgeyBvcGFjaXR5OiAxIH0KICAgICAgICAyNSUgeyBvcGFjaXR5OiAxIH0KICAgICAgICAyNiUgeyBvcGFjaXR5OiAwIH0KICAgICAgICA4OSUgeyBvcGFjaXR5OiAwIH0KICAgICAgICA5MCUgeyBvcGFjaXR5OiAxIH0KICAgICAgICB0byB7IG9wYWNpdHk6IDEgfQogICAgICB9CgogICAgICBALXdlYmtpdC1rZXlmcmFtZXMgbGF5ZXItMi1mYWRlLWluLW91dCB7CiAgICAgICAgMCUgeyBvcGFjaXR5OiAwIH0KICAgICAgICAxNSUgeyBvcGFjaXR5OiAwIH0KICAgICAgICAyNSUgeyBvcGFjaXR5OiAxIH0KICAgICAgICA1MCUgeyBvcGFjaXR5OiAxIH0KICAgICAgICA1MSUgeyBvcGFjaXR5OiAwIH0KICAgICAgICB0byB7IG9wYWNpdHk6IDAgfQogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIGxheWVyLTItZmFkZS1pbi1vdXQgewogICAgICAgIDAlIHsgb3BhY2l0eTogMCB9CiAgICAgICAgMTUlIHsgb3BhY2l0eTogMCB9CiAgICAgICAgMjUlIHsgb3BhY2l0eTogMSB9CiAgICAgICAgNTAlIHsgb3BhY2l0eTogMSB9CiAgICAgICAgNTElIHsgb3BhY2l0eTogMCB9CiAgICAgICAgdG8geyBvcGFjaXR5OiAwIH0KICAgICAgfQoKICAgICAgQC13ZWJraXQta2V5ZnJhbWVzIGxheWVyLTMtZmFkZS1pbi1vdXQgewogICAgICAgIDAlIHsgb3BhY2l0eTogMCB9CiAgICAgICAgNDAlIHsgb3BhY2l0eTogMCB9CiAgICAgICAgNTAlIHsgb3BhY2l0eTogMSB9CiAgICAgICAgNzUlIHsgb3BhY2l0eTogMSB9CiAgICAgICAgNzYlIHsgb3BhY2l0eTogMCB9CiAgICAgICAgdG8geyBvcGFjaXR5OiAwIH0KICAgICAgfQoKICAgICAgQGtleWZyYW1lcyBsYXllci0zLWZhZGUtaW4tb3V0IHsKICAgICAgICAwJSB7IG9wYWNpdHk6IDAgfQogICAgICAgIDQwJSB7IG9wYWNpdHk6IDAgfQogICAgICAgIDUwJSB7IG9wYWNpdHk6IDEgfQogICAgICAgIDc1JSB7IG9wYWNpdHk6IDEgfQogICAgICAgIDc2JSB7IG9wYWNpdHk6IDAgfQogICAgICAgIHRvIHsgb3BhY2l0eTogMCB9CiAgICAgIH0KCiAgICAgIEAtd2Via2l0LWtleWZyYW1lcyBsYXllci00LWZhZGUtaW4tb3V0IHsKICAgICAgICAwJSB7IG9wYWNpdHk6IDAgfQogICAgICAgIDY1JSB7IG9wYWNpdHk6IDAgfQogICAgICAgIDc1JSB7IG9wYWNpdHk6IDEgfQogICAgICAgIDkwJSB7IG9wYWNpdHk6IDEgfQogICAgICAgIHRvIHsgb3BhY2l0eTogMCB9CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMgbGF5ZXItNC1mYWRlLWluLW91dCB7CiAgICAgICAgMCUgeyBvcGFjaXR5OiAwIH0KICAgICAgICA2NSUgeyBvcGFjaXR5OiAwIH0KICAgICAgICA3NSUgeyBvcGFjaXR5OiAxIH0KICAgICAgICA5MCUgeyBvcGFjaXR5OiAxIH0KICAgICAgICB0byB7IG9wYWNpdHk6IDAgfQogICAgICB9CgogICAgICAuY2lyY2xlLWNsaXBwZXIgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDUwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIFBhdGNoIHRoZSBnYXAgdGhhdCBhcHBlYXIgYmV0d2VlbiB0aGUgdHdvIGFkamFjZW50IGRpdi5jaXJjbGUtY2xpcHBlciB3aGlsZSB0aGUKICAgICAgICogc3Bpbm5lciBpcyByb3RhdGluZyAoYXBwZWFycyBvbiBDaHJvbWUgNTAsIFNhZmFyaSA5LjEuMSwgYW5kIEVkZ2UpLgogICAgICAgKi8KICAgICAgLnNwaW5uZXItbGF5ZXI6OmFmdGVyIHsKICAgICAgICBsZWZ0OiA0NSU7CiAgICAgICAgd2lkdGg6IDEwJTsKICAgICAgICBib3JkZXItdG9wLXN0eWxlOiBzb2xpZDsKICAgICAgfQoKICAgICAgLnNwaW5uZXItbGF5ZXI6OmFmdGVyLAogICAgICAuY2lyY2xlLWNsaXBwZXI6OmFmdGVyIHsKICAgICAgICBjb250ZW50OiAnJzsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgYm9yZGVyLXdpZHRoOiB2YXIoLS1wYXBlci1zcGlubmVyLXN0cm9rZS13aWR0aCwgM3B4KTsKICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICAgIH0KCiAgICAgIC5jaXJjbGUtY2xpcHBlcjo6YWZ0ZXIgewogICAgICAgIGJvdHRvbTogMDsKICAgICAgICB3aWR0aDogMjAwJTsKICAgICAgICBib3JkZXItc3R5bGU6IHNvbGlkOwogICAgICAgIGJvcmRlci1ib3R0b20tY29sb3I6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7CiAgICAgIH0KCiAgICAgIC5jaXJjbGUtY2xpcHBlci5sZWZ0OjphZnRlciB7CiAgICAgICAgbGVmdDogMDsKICAgICAgICBib3JkZXItcmlnaHQtY29sb3I6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7CiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgxMjlkZWcpOwogICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDEyOWRlZyk7CiAgICAgIH0KCiAgICAgIC5jaXJjbGUtY2xpcHBlci5yaWdodDo6YWZ0ZXIgewogICAgICAgIGxlZnQ6IC0xMDAlOwogICAgICAgIGJvcmRlci1sZWZ0LWNvbG9yOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50OwogICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoLTEyOWRlZyk7CiAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoLTEyOWRlZyk7CiAgICAgIH0KCiAgICAgIC5hY3RpdmUgLmdhcC1wYXRjaDo6YWZ0ZXIsCiAgICAgIC5hY3RpdmUgLmNpcmNsZS1jbGlwcGVyOjphZnRlciB7CiAgICAgICAgLXdlYmtpdC1hbmltYXRpb24tZHVyYXRpb246IHZhcigtLXBhcGVyLXNwaW5uZXItZXhwYW5kLWNvbnRyYWN0LWR1cmF0aW9uKTsKICAgICAgICAtd2Via2l0LWFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjQsIDAuMCwgMC4yLCAxKTsKICAgICAgICAtd2Via2l0LWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IGluZmluaXRlOwogICAgICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tcGFwZXItc3Bpbm5lci1leHBhbmQtY29udHJhY3QtZHVyYXRpb24pOwogICAgICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjQsIDAuMCwgMC4yLCAxKTsKICAgICAgICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiBpbmZpbml0ZTsKICAgICAgfQoKICAgICAgLmFjdGl2ZSAuY2lyY2xlLWNsaXBwZXIubGVmdDo6YWZ0ZXIgewogICAgICAgIC13ZWJraXQtYW5pbWF0aW9uLW5hbWU6IGxlZnQtc3BpbjsKICAgICAgICBhbmltYXRpb24tbmFtZTogbGVmdC1zcGluOwogICAgICB9CgogICAgICAuYWN0aXZlIC5jaXJjbGUtY2xpcHBlci5yaWdodDo6YWZ0ZXIgewogICAgICAgIC13ZWJraXQtYW5pbWF0aW9uLW5hbWU6IHJpZ2h0LXNwaW47CiAgICAgICAgYW5pbWF0aW9uLW5hbWU6IHJpZ2h0LXNwaW47CiAgICAgIH0KCiAgICAgIEAtd2Via2l0LWtleWZyYW1lcyBsZWZ0LXNwaW4gewogICAgICAgIDAlIHsgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgxMzBkZWcpIH0KICAgICAgICA1MCUgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKC01ZGVnKSB9CiAgICAgICAgdG8geyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDEzMGRlZykgfQogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIGxlZnQtc3BpbiB7CiAgICAgICAgMCUgeyB0cmFuc2Zvcm06IHJvdGF0ZSgxMzBkZWcpIH0KICAgICAgICA1MCUgeyB0cmFuc2Zvcm06IHJvdGF0ZSgtNWRlZykgfQogICAgICAgIHRvIHsgdHJhbnNmb3JtOiByb3RhdGUoMTMwZGVnKSB9CiAgICAgIH0KCiAgICAgIEAtd2Via2l0LWtleWZyYW1lcyByaWdodC1zcGluIHsKICAgICAgICAwJSB7IC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoLTEzMGRlZykgfQogICAgICAgIDUwJSB7IC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoNWRlZykgfQogICAgICAgIHRvIHsgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgtMTMwZGVnKSB9CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMgcmlnaHQtc3BpbiB7CiAgICAgICAgMCUgeyB0cmFuc2Zvcm06IHJvdGF0ZSgtMTMwZGVnKSB9CiAgICAgICAgNTAlIHsgdHJhbnNmb3JtOiByb3RhdGUoNWRlZykgfQogICAgICAgIHRvIHsgdHJhbnNmb3JtOiByb3RhdGUoLTEzMGRlZykgfQogICAgICB9CgogICAgICAjc3Bpbm5lckNvbnRhaW5lci5jb29sZG93biB7CiAgICAgICAgLXdlYmtpdC1hbmltYXRpb246IGNvbnRhaW5lci1yb3RhdGUgdmFyKC0tcGFwZXItc3Bpbm5lci1jb250YWluZXItcm90YXRpb24tZHVyYXRpb24pIGxpbmVhciBpbmZpbml0ZSwgZmFkZS1vdXQgdmFyKC0tcGFwZXItc3Bpbm5lci1jb29sZG93bi1kdXJhdGlvbikgY3ViaWMtYmV6aWVyKDAuNCwgMC4wLCAwLjIsIDEpOwogICAgICAgIGFuaW1hdGlvbjogY29udGFpbmVyLXJvdGF0ZSB2YXIoLS1wYXBlci1zcGlubmVyLWNvbnRhaW5lci1yb3RhdGlvbi1kdXJhdGlvbikgbGluZWFyIGluZmluaXRlLCBmYWRlLW91dCB2YXIoLS1wYXBlci1zcGlubmVyLWNvb2xkb3duLWR1cmF0aW9uKSBjdWJpYy1iZXppZXIoMC40LCAwLjAsIDAuMiwgMSk7CiAgICAgIH0KCiAgICAgIEAtd2Via2l0LWtleWZyYW1lcyBmYWRlLW91dCB7CiAgICAgICAgMCUgeyBvcGFjaXR5OiAxIH0KICAgICAgICB0byB7IG9wYWNpdHk6IDAgfQogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIGZhZGUtb3V0IHsKICAgICAgICAwJSB7IG9wYWNpdHk6IDEgfQogICAgICAgIHRvIHsgb3BhY2l0eTogMCB9CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPgoKCgoKPGRvbS1tb2R1bGUgaWQ9InBhcGVyLXNwaW5uZXItbGl0ZSI+CiAgPHRlbXBsYXRlIHN0cmlwLXdoaXRlc3BhY2U+CiAgICA8c3R5bGUgaW5jbHVkZT0icGFwZXItc3Bpbm5lci1zdHlsZXMiPjwvc3R5bGU+CgogICAgPGRpdiBpZD0ic3Bpbm5lckNvbnRhaW5lciIgY2xhc3MtbmFtZT0iW1tfX2NvbXB1dGVDb250YWluZXJDbGFzc2VzKGFjdGl2ZSwgX19jb29saW5nRG93bildXSIgb24tYW5pbWF0aW9uZW5kPSJfX3Jlc2V0IiBvbi13ZWJraXQtYW5pbWF0aW9uLWVuZD0iX19yZXNldCI+CiAgICAgIDxkaXYgY2xhc3M9InNwaW5uZXItbGF5ZXIiPgogICAgICAgIDxkaXYgY2xhc3M9ImNpcmNsZS1jbGlwcGVyIGxlZnQiPjwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImNpcmNsZS1jbGlwcGVyIHJpZ2h0Ij48L2Rpdj4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICA8L3RlbXBsYXRlPgoKICA8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vcGFwZXItc3Bpbm5lci9wYXBlci1zcGlubmVyLWxpdGUuaHRtbC5qcwpQb2x5bWVyKHtpczoicGFwZXItc3Bpbm5lci1saXRlIixiZWhhdmlvcnM6W1BvbHltZXIuUGFwZXJTcGlubmVyQmVoYXZpb3JdfSk7Cjwvc2NyaXB0Pgo8L2RvbS1tb2R1bGU+CgoKCgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdGYtZGFzaGJvYXJkLWNvbW1vbi9kYXRhLWxvYWRlci1iZWhhdmlvci5qcwooZnVuY3Rpb24oYSl7YS5EYXRhTG9hZGVyQmVoYXZpb3I9e3Byb3BlcnRpZXM6e2FjdGl2ZTp7dHlwZTpCb29sZWFuLG9ic2VydmVyOiJfbG9hZERhdGFJZkFjdGl2ZSJ9LGxvYWRLZXk6e3R5cGU6U3RyaW5nLHZhbHVlOiIifSxkYXRhVG9Mb2FkOnt0eXBlOkFycmF5LHZhbHVlOigpPT5bXX0sZ2V0RGF0YUxvYWROYW1lOnt0eXBlOkZ1bmN0aW9uLHZhbHVlOigpPT5jPT5TdHJpbmcoYyl9LGxvYWREYXRhQ2FsbGJhY2s6RnVuY3Rpb24scmVxdWVzdERhdGE6e3R5cGU6RnVuY3Rpb24sdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gYz0+dGhpcy5yZXF1ZXN0TWFuYWdlci5yZXF1ZXN0KHRoaXMuZ2V0RGF0YUxvYWRVcmwoYykpfX0sZ2V0RGF0YUxvYWRVcmw6RnVuY3Rpb24sZGF0YUxvYWRpbmc6e3R5cGU6Qm9vbGVhbixyZWFkT25seTohMCxyZWZsZWN0VG9BdHRyaWJ1dGU6ITAsdmFsdWU6ITF9LF9sb2FkZWREYXRhOnt0eXBlOk9iamVjdCx2YWx1ZTooKT0+bmV3IFNldH0sX2NhbmNlbGxlcjp7dHlwZTpPYmplY3QsCnZhbHVlOigpPT5uZXcgUGsuQ2FuY2VsbGVyfX0sb2JzZXJ2ZXJzOlsiX2RhdGFUb0xvYWRDaGFuZ2VkKGlzQXR0YWNoZWQsIGRhdGFUb0xvYWQuKikiXSxvbkxvYWRGaW5pc2goKXt9LHJlbG9hZCgpe3RoaXMuX2xvYWRlZERhdGEuY2xlYXIoKTt0aGlzLl9sb2FkRGF0YSgpfSxyZXNldCgpe3RoaXMuX2NhbmNlbGxlciYmdGhpcy5fY2FuY2VsbGVyLmNhbmNlbEFsbCgpO3RoaXMuX2xvYWRlZERhdGEmJnRoaXMuX2xvYWRlZERhdGEuY2xlYXIoKTt0aGlzLmlzQXR0YWNoZWQmJnRoaXMuX2xvYWREYXRhKCl9LF9kYXRhVG9Mb2FkQ2hhbmdlZCgpe3RoaXMuaXNBdHRhY2hlZCYmdGhpcy5fbG9hZERhdGEoKX0sY3JlYXRlZCgpe3RoaXMuX2xvYWREYXRhPV8uZGVib3VuY2UodGhpcy5fbG9hZERhdGFJbXBsLDEwMCx7bGVhZGluZzohMCx0cmFpbGluZzohMH0pfSxkZXRhY2hlZCgpe3RoaXMuX2NhbmNlbGxlci5jYW5jZWxBbGwoKTt0aGlzLmNhbmNlbEFzeW5jKHRoaXMuX2xvYWREYXRhQXN5bmMpfSwKX2xvYWREYXRhSWZBY3RpdmUoKXt0aGlzLmFjdGl2ZSYmdGhpcy5fbG9hZERhdGEoKX0sX2xvYWREYXRhSW1wbCgpe3RoaXMuYWN0aXZlJiYodGhpcy5jYW5jZWxBc3luYyh0aGlzLl9sb2FkRGF0YUFzeW5jKSx0aGlzLl9sb2FkRGF0YUFzeW5jPXRoaXMuYXN5bmMoKCk9Pnt0aGlzLl9zZXREYXRhTG9hZGluZyghMCk7dGhpcy5fY2FuY2VsbGVyLmNhbmNlbEFsbCgpO2NvbnN0IGM9dGhpcy5kYXRhVG9Mb2FkLmZpbHRlcihkPT57ZD10aGlzLmdldERhdGFMb2FkTmFtZShkKTtyZXR1cm4hdGhpcy5fbG9hZGVkRGF0YS5oYXMoZCl9KS5tYXAoZD0+e2NvbnN0IGY9dGhpcy5nZXREYXRhTG9hZE5hbWUoZCksZz10aGlzLl9jYW5jZWxsZXIuY2FuY2VsbGFibGUobD0+e2wuY2FuY2VsbGVkfHwodGhpcy5fbG9hZGVkRGF0YS5hZGQoZiksdGhpcy5sb2FkRGF0YUNhbGxiYWNrKHRoaXMsZCxsLnZhbHVlKSl9KTtyZXR1cm4gdGhpcy5yZXF1ZXN0RGF0YShkKS50aGVuKGcpfSk7cmV0dXJuIFByb21pc2UuYWxsKGMpLnRoZW4odGhpcy5fY2FuY2VsbGVyLmNhbmNlbGxhYmxlKGQ9Pgp7dGhpcy5fc2V0RGF0YUxvYWRpbmcoITEpO2lmKCFkLmNhbmNlbGxlZCl0aGlzLm9uTG9hZEZpbmlzaCgpfSkpfSkpfX19KShXbHx8KFdsPXt9KSk7Cjwvc2NyaXB0PgoKCgoKCjxzY3JpcHQ+Ly9+fldFQlBBVEh+fi90Zi1pbXBvcnRzL3Bsb3R0YWJsZS5qcwovKgogTUlUCiBNSVQKIEBmaWxlb3ZlcnZpZXcgSW1wbGVtZW50cyB0aGUgU2lnbmF0dXJlIEFQSSB0byBoZWxwIGluIGNvbXBhcmluZyB3aGVuIHR3bwogUGxvdHRhYmxlIG9iamVjdHMgaGF2ZSAiY2hhbmdlZCIuCgogTWVtb2l6YXRpb24gaW4gUGxvdHRhYmxlIGlzIGNvbXBsaWNhdGVkIGJ5IG11dGFibGUgc2NhbGVzIGFuZCBkYXRhc2V0cy4gV2UgY2Fubm90IHNpbXBseQogcmVmZXJlbmNlIGNvbXBhcmUgdHdvIGUuZy4gc2NhbGVzIHNpbmNlIGl0IG1heSBoYXZlIGludGVybmFsbHkgbXV0YXRlZC4gVG8gcmVzb2x2ZSB0aGlzLAogd2Ugd3JpdGUgYSByZWN1cnNpdmUgU2lnbmF0dXJlIGludGVyZmFjZSB0aGF0IGhvbGRzIGFuIGltbXV0YWJsZSBzbmFwc2hvdCBvZiB3aGF0ZXZlcgogc3RhdGUgdGhlIHNjYWxlL2RhdGEgd2FzIGluIGF0IHRoZSB0aW1lLiBUaGVuIG9uIG1lbW9pemVkIGZ1bmN0aW9uIGludm9jYXRpb24gd2Ugc2lnbiB0aGUKIG5ldyBpbnB1dHMgYW5kIGNvbXBhcmUgdGhlIHNpZ25hdHVyZXMgdG8gZGVjaWRlIGlmIHdlIHNob3VsZCByZWNvbXB1dGUuCgogV2UgbXVzdCBoYW5kLXdyaXRlIGEgc2lnbmF0dXJlIGZvciBlYWNoIGN1c3RvbSBjbGFzcyB3ZSB3aXNoIHRvIHN1cHBvcnQuCiBNSVQKCiBAZmlsZW92ZXJ2aWV3IG1hbnVhbGx5IGFkZCBkMy1zZWxlY3Rpb24tbXVsdGkgdG8gZDMgZGVmYXVsdCBidW5kbGUuIE1vc3Qgb2YgdGhpcyBjb2RlIGlzCiBjb3BpZWQgZnJvbSBkMy1zZWxlY3Rpb24tbXVsdGlAMS4wLjAuCiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2QzL2QzLXNlbGVjdGlvbi1tdWx0aS9pc3N1ZXMvMTEgZm9yIHdoeSB3ZSBoYXZlIHRvIGRvIHRoaXMKIE1JVAogQGZpbGVvdmVydmlldyBJbXBsZW1lbnRzIGEgY29udmVuaWVudCB0aHVuayBmdW5jdGlvbiB0byBoYW5kbGUgdGhlIGNvbW1vbiBjYXNlCiBvZiBjcmVhdGluZyBhIG1lbW9pemVkIGZ1bmN0aW9uIHRoYXQgdGFrZXMgaXRzIGlucHV0cyBmcm9tIG11dGFibGUgY2xhc3MgcHJvcGVydGllcy4KIE1JVAogQGZpbGVvdmVydmlldyBJbXBsZW1lbnRzIGEgZnVuY3Rpb24gbWVtb2l6ZXIgdXNpbmcgdGhlIFNpZ25hdHVyZSBBUEkuCiBQbG90dGFibGUgMy43LjAgKGh0dHBzOi8vZ2l0aHViLmNvbS9wYWxhbnRpci9wbG90dGFibGUpCiBDb3B5cmlnaHQgMjAxNC0yMDE3IFBhbGFudGlyIFRlY2hub2xvZ2llcwogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vcGFsYW50aXIvcGxvdHRhYmxlL2Jsb2IvbWFzdGVyL0xJQ0VOU0UpCiBpcy1wbGFpbi1vYmplY3QgPGh0dHBzOi8vZ2l0aHViLmNvbS9qb25zY2hsaW5rZXJ0L2lzLXBsYWluLW9iamVjdD4KCiBDb3B5cmlnaHQgKGMpIDIwMTQtMjAxNywgSm9uIFNjaGxpbmtlcnQuCiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuCiBpc29iamVjdCA8aHR0cHM6Ly9naXRodWIuY29tL2pvbnNjaGxpbmtlcnQvaXNvYmplY3Q+CgogQ29weXJpZ2h0IChjKSAyMDE0LTIwMTcsIEpvbiBTY2hsaW5rZXJ0LgogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLgoqLwooZnVuY3Rpb24oYSxjKXsib2JqZWN0Ij09PXR5cGVvZiBleHBvcnRzJiYib2JqZWN0Ij09PXR5cGVvZiBtb2R1bGU/bW9kdWxlLmV4cG9ydHM9YyhyZXF1aXJlKCJkMyIpKToiZnVuY3Rpb24iPT09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoWyJkMyJdLGMpOiJvYmplY3QiPT09dHlwZW9mIGV4cG9ydHM/ZXhwb3J0cy5QbG90dGFibGU9YyhyZXF1aXJlKCJkMyIpKTphLlBsb3R0YWJsZT1jKGEuZDMpfSkodGhpcyxmdW5jdGlvbihhKXtyZXR1cm4gZnVuY3Rpb24oYyl7ZnVuY3Rpb24gZChnKXtpZihmW2ddKXJldHVybiBmW2ddLmV4cG9ydHM7dmFyIGw9ZltnXT17aTpnLGw6ITEsZXhwb3J0czp7fX07Y1tnXS5jYWxsKGwuZXhwb3J0cyxsLGwuZXhwb3J0cyxkKTtsLmw9ITA7cmV0dXJuIGwuZXhwb3J0c312YXIgZj17fTtkLm09YztkLmM9ZjtkLmk9ZnVuY3Rpb24oZyl7cmV0dXJuIGd9O2QuZD1mdW5jdGlvbihnLGwsayl7ZC5vKGcsbCl8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShnLApsLHtjb25maWd1cmFibGU6ITEsZW51bWVyYWJsZTohMCxnZXQ6a30pfTtkLm49ZnVuY3Rpb24oZyl7dmFyIGw9ZyYmZy5fX2VzTW9kdWxlP2Z1bmN0aW9uKCl7cmV0dXJuIGdbImRlZmF1bHQiXX06ZnVuY3Rpb24oKXtyZXR1cm4gZ307ZC5kKGwsImEiLGwpO3JldHVybiBsfTtkLm89ZnVuY3Rpb24oZyxsKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGcsbCl9O2QucD0iIjtyZXR1cm4gZChkLnM9MTQwKX0oW2Z1bmN0aW9uKGMsZCxmKXtmdW5jdGlvbiBnKGwpe2Zvcih2YXIgayBpbiBsKWQuaGFzT3duUHJvcGVydHkoayl8fChkW2tdPWxba10pfWM9ZigxMDcpO2QuQXJyYXk9YztjPWYoMTEwKTtkLkNvbG9yPWM7Yz1mKDU1KTtkLkRPTT1jO2M9Zig1Nik7ZC5NYXRoPWM7Yz1mKDExMyk7ZC5PYmplY3Q9YztjPWYoNTcpO2QuUlRyZWU9YztjPWYoMTE1KTtkLlN0YWNraW5nPWM7Yz1mKDM1KTtkLldpbmRvdz1jO2coZigxMDgpKTtnKGYoMTA5KSk7ZyhmKDEyKSk7CmcoZigxMTEpKTtnKGYoMTEyKSk7ZyhmKDU4KSk7ZyhmKDExNikpfSxmdW5jdGlvbihjKXtjLmV4cG9ydHM9YX0sZnVuY3Rpb24oYyxkLGYpe2Z1bmN0aW9uIGcoRixELEIpe3ZhciBHPUQuYWNjZXNzb3I7RD1ELnNjYWxlO2lmKG51bGw9PUQpcmV0dXJuW107dmFyIEs9Ri5kYXRhKCk7bnVsbCE9QiYmKEs9Sy5maWx0ZXIoZnVuY3Rpb24oTCxKKXtyZXR1cm4gQihMLEosRil9KSk7Sz1LLm1hcChmdW5jdGlvbihMLEope3JldHVybiBHKEwsSixGKX0pO3JldHVybiBELmV4dGVudE9mVmFsdWVzKEspfXZhciBsPXRoaXMmJnRoaXMuX19leHRlbmRzfHxmdW5jdGlvbihGLEQpe2Z1bmN0aW9uIEIoKXt0aGlzLmNvbnN0cnVjdG9yPUZ9Zm9yKHZhciBHIGluIEQpRC5oYXNPd25Qcm9wZXJ0eShHKSYmKEZbR109RFtHXSk7Ri5wcm90b3R5cGU9bnVsbD09PUQ/T2JqZWN0LmNyZWF0ZShEKTooQi5wcm90b3R5cGU9RC5wcm90b3R5cGUsbmV3IEIpfSxrPWYoMSksbT1mKDcpO2M9Zig0KTt2YXIgcD0KZigxOCkscT1mKDYpLHI9Zig5KSx0PWYoMjApLHY9ZigwKSxBPWYoMTIpLHk9ZigxMCkseD1mKDUxKSxDPWYoNTIpO2QuUmVuZGVyZXI9eS5tYWtlRW51bShbInN2ZyIsImNhbnZhcyJdKTtmPWZ1bmN0aW9uKEYpe2Z1bmN0aW9uIEQoKXt2YXIgQj1GLmNhbGwodGhpcyl8fHRoaXM7Qi5fZGF0YUNoYW5nZWQ9ITE7Qi5fYXR0ckV4dGVudHM9e307Qi5fYW5pbWF0ZT0hMTtCLl9hbmltYXRvcnM9e307Qi5fcHJvcGVydHlFeHRlbnRzPXt9O0IuX3Jlc2V0RW50aXR5U3RvcmU9ZnVuY3Rpb24oKXtCLl9jYWNoZWRFbnRpdHlTdG9yZT12b2lkIDB9O0IuX292ZXJmbG93SGlkZGVuPSEwO0IuYWRkQ2xhc3MoInBsb3QiKTtCLl9kYXRhc2V0VG9EcmF3ZXI9bmV3IHYuTWFwO0IuX2F0dHJCaW5kaW5ncz1rLm1hcCgpO0IuX2luY2x1ZGVkVmFsdWVzUHJvdmlkZXI9ZnVuY3Rpb24oSyxMKXtyZXR1cm4gQi5faW5jbHVkZWRWYWx1ZXNGb3JTY2FsZShLLEwpfTtCLl9yZW5kZXJDYWxsYmFjaz1mdW5jdGlvbigpe3JldHVybiBCLnJlbmRlcigpfTsKQi5fb25EYXRhc2V0VXBkYXRlQ2FsbGJhY2s9ZnVuY3Rpb24oKXtyZXR1cm4gQi5fb25EYXRhc2V0VXBkYXRlKCl9O0IuX3Byb3BlcnR5QmluZGluZ3M9ay5tYXAoKTt2YXIgRz0obmV3IG0uRWFzaW5nKS5tYXhUb3RhbER1cmF0aW9uKEQuX0FOSU1BVElPTl9NQVhfRFVSQVRJT04pO0IuYW5pbWF0b3IoeC5BbmltYXRvci5NQUlOLEcpO0IuYW5pbWF0b3IoeC5BbmltYXRvci5SRVNFVCxuZXcgbS5OdWxsKTtCLl9kZWZlcnJlZFJlc2V0RW50aXR5U3RvcmU9di5XaW5kb3cuZGVib3VuY2UoQy5EZWZlcnJlZFJlbmRlcmVyLkRFRkVSUkVEX1JFTkRFUklOR19ERUxBWSxCLl9yZXNldEVudGl0eVN0b3JlKTtyZXR1cm4gQn1sKEQsRik7RC5nZXRUb3RhbERyYXdUaW1lPWZ1bmN0aW9uKEIsRyl7cmV0dXJuIEcucmVkdWNlKGZ1bmN0aW9uKEssTCl7cmV0dXJuIEsrTC5hbmltYXRvci50b3RhbFRpbWUoQi5sZW5ndGgpfSwwKX07RC5hcHBseURyYXdTdGVwcz1mdW5jdGlvbihCLEcpe3JldHVybiBCLm1hcChmdW5jdGlvbihLKXt2YXIgTD0KSy5hdHRyVG9Qcm9qZWN0b3IsSj17fTtPYmplY3Qua2V5cyhMKS5mb3JFYWNoKGZ1bmN0aW9uKFApe0pbUF09ZnVuY3Rpb24oUyxOKXtyZXR1cm4gTFtQXShTLE4sRyl9fSk7cmV0dXJue2F0dHJUb0FwcGxpZWRQcm9qZWN0b3I6SixhbmltYXRvcjpLLmFuaW1hdG9yfX0pfTtELnByb3RvdHlwZS5hbmNob3I9ZnVuY3Rpb24oQil7Qj1BLmNvZXJjZUV4dGVybmFsRDMoQik7Ri5wcm90b3R5cGUuYW5jaG9yLmNhbGwodGhpcyxCKTt0aGlzLl9kYXRhQ2hhbmdlZD0hMDt0aGlzLl9yZXNldEVudGl0eVN0b3JlKCk7dGhpcy5fdXBkYXRlRXh0ZW50cygpO3JldHVybiB0aGlzfTtELnByb3RvdHlwZS5fc2V0dXA9ZnVuY3Rpb24oKXt2YXIgQj10aGlzO3RoaXMuX2lzU2V0dXB8fChGLnByb3RvdHlwZS5fc2V0dXAuY2FsbCh0aGlzKSxudWxsIT10aGlzLl9jYW52YXMmJnRoaXMuX2FwcGVuZENhbnZhc05vZGUoKSx0aGlzLl9yZW5kZXJBcmVhPXRoaXMuY29udGVudCgpLmFwcGVuZCgiZyIpLmNsYXNzZWQoInJlbmRlci1hcmVhIiwKITApLHRoaXMuZGF0YXNldHMoKS5mb3JFYWNoKGZ1bmN0aW9uKEcpe3JldHVybiBCLl9jcmVhdGVOb2Rlc0ZvckRhdGFzZXQoRyl9KSl9O0QucHJvdG90eXBlLl9hcHBlbmRDYW52YXNOb2RlPWZ1bmN0aW9uKCl7dmFyIEI9dGhpcy5lbGVtZW50KCkuc2VsZWN0KCIucGxvdC1jYW52YXMtY29udGFpbmVyIik7Qi5lbXB0eSgpJiYoQj10aGlzLmVsZW1lbnQoKS5hcHBlbmQoImRpdiIpLmNsYXNzZWQoInBsb3QtY2FudmFzLWNvbnRhaW5lciIsITApLEIubm9kZSgpLmFwcGVuZENoaWxkKHRoaXMuX2NhbnZhcy5ub2RlKCkpKX07RC5wcm90b3R5cGUuc2V0Qm91bmRzPWZ1bmN0aW9uKEIsRyxLLEwpe0YucHJvdG90eXBlLnNldEJvdW5kcy5jYWxsKHRoaXMsQixHLEssTCk7dGhpcy5fcmVzZXRFbnRpdHlTdG9yZSgpO251bGwhPXRoaXMuX2NhbnZhcyYmKHRoaXMuX2J1ZmZlckNhbnZhcyYmIXRoaXMuX2J1ZmZlckNhbnZhc1ZhbGlkJiYodGhpcy5fYnVmZmVyQ2FudmFzLmF0dHIoIndpZHRoIiwKdGhpcy5fY2FudmFzLmF0dHIoIndpZHRoIikpLHRoaXMuX2J1ZmZlckNhbnZhcy5hdHRyKCJoZWlnaHQiLHRoaXMuX2NhbnZhcy5hdHRyKCJoZWlnaHQiKSksKEs9dGhpcy5fYnVmZmVyQ2FudmFzLm5vZGUoKS5nZXRDb250ZXh0KCIyZCIpKSYmSy5kcmF3SW1hZ2UodGhpcy5fY2FudmFzLm5vZGUoKSwwLDApLHRoaXMuX2J1ZmZlckNhbnZhc1ZhbGlkPSEwKSxLPW51bGwhPXdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvP3dpbmRvdy5kZXZpY2VQaXhlbFJhdGlvOjEsdGhpcy5fY2FudmFzLmF0dHIoIndpZHRoIixCKkspLHRoaXMuX2NhbnZhcy5hdHRyKCJoZWlnaHQiLEcqSyksTD10aGlzLl9jYW52YXMubm9kZSgpLmdldENvbnRleHQoIjJkIikpJiYoTC5zZXRUcmFuc2Zvcm0oSywwLDAsSywwLDApLHRoaXMuX2J1ZmZlckNhbnZhcyYmTC5kcmF3SW1hZ2UodGhpcy5fYnVmZmVyQ2FudmFzLm5vZGUoKSwwLDAsQixHKSl9O0QucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt2YXIgQj10aGlzOwpGLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7dGhpcy5fc2NhbGVzKCkuZm9yRWFjaChmdW5jdGlvbihHKXtyZXR1cm4gRy5vZmZVcGRhdGUoQi5fcmVuZGVyQ2FsbGJhY2spfSk7dGhpcy5kYXRhc2V0cyhbXSl9O0QucHJvdG90eXBlLl9jcmVhdGVOb2Rlc0ZvckRhdGFzZXQ9ZnVuY3Rpb24oQil7Qj10aGlzLl9kYXRhc2V0VG9EcmF3ZXIuZ2V0KEIpOyJzdmciPT09dGhpcy5yZW5kZXJlcigpP0IudXNlU1ZHKHRoaXMuX3JlbmRlckFyZWEpOkIudXNlQ2FudmFzKHRoaXMuX2NhbnZhcyk7cmV0dXJuIEJ9O0QucHJvdG90eXBlLl9jcmVhdGVEcmF3ZXI9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHEuUHJveHlEcmF3ZXIoZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHIuU1ZHRHJhd2VyKCJwYXRoIiwiIil9LGZ1bmN0aW9uKEIpe3JldHVybiBuZXcgcC5DYW52YXNEcmF3ZXIoQixmdW5jdGlvbigpe30pfSl9O0QucHJvdG90eXBlLl9nZXRBbmltYXRvcj1mdW5jdGlvbihCKXtyZXR1cm4gdGhpcy5fYW5pbWF0ZU9uTmV4dFJlbmRlcigpPwp0aGlzLl9hbmltYXRvcnNbQl18fG5ldyBtLk51bGw6bmV3IG0uTnVsbH07RC5wcm90b3R5cGUuX29uRGF0YXNldFVwZGF0ZT1mdW5jdGlvbigpe3RoaXMuX3VwZGF0ZUV4dGVudHMoKTt0aGlzLl9kYXRhQ2hhbmdlZD0hMDt0aGlzLl9yZXNldEVudGl0eVN0b3JlKCk7dGhpcy5yZW5kZXJMb3dQcmlvcml0eSgpfTtELnByb3RvdHlwZS5hdHRyPWZ1bmN0aW9uKEIsRyxLKXtpZihudWxsPT1HKXJldHVybiB0aGlzLl9hdHRyQmluZGluZ3MuZ2V0KEIpO3RoaXMuX2JpbmRBdHRyKEIsRyxLKTt0aGlzLnJlbmRlcigpO3JldHVybiB0aGlzfTtELnByb3RvdHlwZS5fYmluZFByb3BlcnR5PWZ1bmN0aW9uKEIsRyxLLEwpe3ZhciBKPXRoaXMuX3Byb3BlcnR5QmluZGluZ3MuZ2V0KEIpO0o9bnVsbCE9Sj9KLnNjYWxlOm51bGw7dGhpcy5fcHJvcGVydHlCaW5kaW5ncy5zZXQoQix7YWNjZXNzb3I6ImZ1bmN0aW9uIj09PXR5cGVvZiBHP0c6ZnVuY3Rpb24oKXtyZXR1cm4gR30sc2NhbGU6Syxwb3N0U2NhbGU6TH0pOwpudWxsIT1KJiZ0aGlzLl91bmluc3RhbGxTY2FsZUZvcktleShKLEIpO251bGwhPUsmJnRoaXMuX2luc3RhbGxTY2FsZUZvcktleShLLEIpO3RoaXMuX2NsZWFyQXR0clRvUHJvamVjdG9yQ2FjaGUoKX07RC5wcm90b3R5cGUuX2JpbmRBdHRyPWZ1bmN0aW9uKEIsRyxLKXt2YXIgTD10aGlzLl9hdHRyQmluZGluZ3MuZ2V0KEIpO0w9bnVsbCE9TD9MLnNjYWxlOm51bGw7dGhpcy5fYXR0ckJpbmRpbmdzLnNldChCLHthY2Nlc3NvcjoiZnVuY3Rpb24iPT09dHlwZW9mIEc/RzpmdW5jdGlvbigpe3JldHVybiBHfSxzY2FsZTpLfSk7bnVsbCE9TCYmdGhpcy5fdW5pbnN0YWxsU2NhbGVGb3JLZXkoTCxCKTtudWxsIT1LJiZ0aGlzLl9pbnN0YWxsU2NhbGVGb3JLZXkoSyxCKTt0aGlzLl9jbGVhckF0dHJUb1Byb2plY3RvckNhY2hlKCl9O0QucHJvdG90eXBlLl9jbGVhckF0dHJUb1Byb2plY3RvckNhY2hlPWZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXMuX2NhY2hlZEF0dHJUb1Byb2plY3Rvcn07RC5wcm90b3R5cGUuX2dldEF0dHJUb1Byb2plY3Rvcj0KZnVuY3Rpb24oKXtudWxsPT10aGlzLl9jYWNoZWRBdHRyVG9Qcm9qZWN0b3ImJih0aGlzLl9jYWNoZWRBdHRyVG9Qcm9qZWN0b3I9dGhpcy5fZ2VuZXJhdGVBdHRyVG9Qcm9qZWN0b3IoKSk7cmV0dXJuIHYuT2JqZWN0LmFzc2lnbih7fSx0aGlzLl9jYWNoZWRBdHRyVG9Qcm9qZWN0b3IpfTtELnByb3RvdHlwZS5fZ2VuZXJhdGVBdHRyVG9Qcm9qZWN0b3I9ZnVuY3Rpb24oKXt2YXIgQj17fTt0aGlzLl9hdHRyQmluZGluZ3MuZWFjaChmdW5jdGlvbihLLEwpe0JbTF09RC5fc2NhbGVkQWNjZXNzb3IoSyl9KTt2YXIgRz10aGlzLl9wcm9wZXJ0eVByb2plY3RvcnMoKTtPYmplY3Qua2V5cyhHKS5mb3JFYWNoKGZ1bmN0aW9uKEspe251bGw9PUJbS10mJihCW0tdPUdbS10pfSk7cmV0dXJuIEJ9O0QucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5PWZ1bmN0aW9uKCl7Ri5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHkuY2FsbCh0aGlzKTt0aGlzLl9pc0FuY2hvcmVkJiYodGhpcy5fcGFpbnQoKSwKdGhpcy5fZGF0YUNoYW5nZWQ9ITEpO3JldHVybiB0aGlzfTtELnByb3RvdHlwZS5yZW5kZXJMb3dQcmlvcml0eT1mdW5jdGlvbigpe3RoaXMuX3JlbmRlckNhbGxiYWNrKCl9O0QucHJvdG90eXBlLmFuaW1hdGVkPWZ1bmN0aW9uKEIpe2lmKG51bGw9PUIpcmV0dXJuIHRoaXMuX2FuaW1hdGU7dGhpcy5fYW5pbWF0ZT1CO3JldHVybiB0aGlzfTtELnByb3RvdHlwZS5kZXRhY2g9ZnVuY3Rpb24oKXtGLnByb3RvdHlwZS5kZXRhY2guY2FsbCh0aGlzKTt0aGlzLl91cGRhdGVFeHRlbnRzKCk7cmV0dXJuIHRoaXN9O0QucHJvdG90eXBlLl9zY2FsZXM9ZnVuY3Rpb24oKXt2YXIgQj1bXTt0aGlzLl9hdHRyQmluZGluZ3MuZWFjaChmdW5jdGlvbihHKXtHPUcuc2NhbGU7bnVsbCE9RyYmLTE9PT1CLmluZGV4T2YoRykmJkIucHVzaChHKX0pO3RoaXMuX3Byb3BlcnR5QmluZGluZ3MuZWFjaChmdW5jdGlvbihHKXtHPUcuc2NhbGU7bnVsbCE9RyYmLTE9PT1CLmluZGV4T2YoRykmJkIucHVzaChHKX0pOwpyZXR1cm4gQn07RC5wcm90b3R5cGUuX3VwZGF0ZUV4dGVudHM9ZnVuY3Rpb24oKXt2YXIgQj10aGlzO3RoaXMuX3Jlc2V0RW50aXR5U3RvcmUoKTt0aGlzLl9zY2FsZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKEcpe3JldHVybiBHLmFkZEluY2x1ZGVkVmFsdWVzUHJvdmlkZXIoQi5faW5jbHVkZWRWYWx1ZXNQcm92aWRlcil9KX07RC5wcm90b3R5cGUuX2ZpbHRlckZvclByb3BlcnR5PWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9O0QucHJvdG90eXBlLmdldEV4dGVudHNGb3JBdHRyPWZ1bmN0aW9uKEIpe3ZhciBHPXRoaXM7bnVsbD09dGhpcy5fYXR0ckV4dGVudHNbQl0mJih0aGlzLl9hdHRyRXh0ZW50c1tCXT10Lm1lbVRodW5rKGZ1bmN0aW9uKCl7cmV0dXJuIEcuZGF0YXNldHMoKX0sZnVuY3Rpb24oKXtyZXR1cm4gRy5fYXR0ckJpbmRpbmdzLmdldChCKX0sZnVuY3Rpb24oSyxMKXtyZXR1cm4gbnVsbD09THx8bnVsbD09TC5hY2Nlc3Nvcj9udWxsOksubWFwKGZ1bmN0aW9uKEope3JldHVybiBnKEosCkwsbnVsbCl9KX0pKTtyZXR1cm4gdGhpcy5fYXR0ckV4dGVudHNbQl0oKX07RC5wcm90b3R5cGUuZ2V0RXh0ZW50c0ZvclByb3BlcnR5PWZ1bmN0aW9uKEIpe3ZhciBHPXRoaXM7bnVsbD09dGhpcy5fcHJvcGVydHlFeHRlbnRzW0JdJiYodGhpcy5fcHJvcGVydHlFeHRlbnRzW0JdPXQubWVtVGh1bmsoZnVuY3Rpb24oKXtyZXR1cm4gRy5kYXRhc2V0cygpfSxmdW5jdGlvbigpe3JldHVybiBHLl9wcm9wZXJ0eUJpbmRpbmdzLmdldChCKX0sZnVuY3Rpb24oKXtyZXR1cm4gRy5fZmlsdGVyRm9yUHJvcGVydHkoQil9LGZ1bmN0aW9uKEssTCxKKXtyZXR1cm4gbnVsbD09THx8bnVsbD09TC5hY2Nlc3Nvcj9udWxsOksubWFwKGZ1bmN0aW9uKFApe3JldHVybiBnKFAsTCxKKX0pfSkpO3JldHVybiB0aGlzLl9wcm9wZXJ0eUV4dGVudHNbQl0oKX07RC5wcm90b3R5cGUuX2luY2x1ZGVkVmFsdWVzRm9yU2NhbGU9ZnVuY3Rpb24oQixHKXt2YXIgSz10aGlzO2lmKCF0aGlzLl9pc0FuY2hvcmVkJiYKIUcpcmV0dXJuW107dmFyIEw9W107dGhpcy5fYXR0ckJpbmRpbmdzLmVhY2goZnVuY3Rpb24oSixQKXtKLnNjYWxlPT09QiYmKEo9Sy5nZXRFeHRlbnRzRm9yQXR0cihQKSxudWxsIT1KJiYoTD1MLmNvbmNhdChrLm1lcmdlKEopKSkpfSk7dGhpcy5fcHJvcGVydHlCaW5kaW5ncy5lYWNoKGZ1bmN0aW9uKEosUCl7Si5zY2FsZT09PUImJihKPUsuZ2V0RXh0ZW50c0ZvclByb3BlcnR5KFApLG51bGwhPUomJihMPUwuY29uY2F0KGsubWVyZ2UoSikpKSl9KTtyZXR1cm4gTH07RC5wcm90b3R5cGUuYW5pbWF0b3I9ZnVuY3Rpb24oQixHKXtpZih2b2lkIDA9PT1HKXJldHVybiB0aGlzLl9hbmltYXRvcnNbQl07dGhpcy5fYW5pbWF0b3JzW0JdPUc7cmV0dXJuIHRoaXN9O0QucHJvdG90eXBlLnJlbmRlcmVyPWZ1bmN0aW9uKEIpe3ZhciBHPXRoaXM7aWYodm9pZCAwPT09QilyZXR1cm4gbnVsbD09dGhpcy5fY2FudmFzPyJzdmciOiJjYW52YXMiO251bGw9PXRoaXMuX2NhbnZhcyYmImNhbnZhcyI9PT0KQj8odGhpcy5fY2FudmFzPWsuc2VsZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpKS5jbGFzc2VkKCJwbG90LWNhbnZhcyIsITApLHRoaXMuX2J1ZmZlckNhbnZhcz1rLnNlbGVjdChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKSksbnVsbCE9dGhpcy5lbGVtZW50KCkmJnRoaXMuX2FwcGVuZENhbnZhc05vZGUoKSx0aGlzLl9kYXRhc2V0VG9EcmF3ZXIuZm9yRWFjaChmdW5jdGlvbihLKXtLLnVzZUNhbnZhcyhHLl9jYW52YXMpfSksdGhpcy5yZW5kZXIoKSk6bnVsbCE9dGhpcy5fY2FudmFzJiYic3ZnIj09QiYmKHRoaXMuX2NhbnZhcy5yZW1vdmUoKSx0aGlzLl9idWZmZXJDYW52YXM9dGhpcy5fY2FudmFzPW51bGwsdGhpcy5fZGF0YXNldFRvRHJhd2VyLmZvckVhY2goZnVuY3Rpb24oSyl7Sy51c2VTVkcoRy5fcmVuZGVyQXJlYSl9KSx0aGlzLnJlbmRlcigpKTtyZXR1cm4gdGhpc307RC5wcm90b3R5cGUuYWRkRGF0YXNldD1mdW5jdGlvbihCKXt0aGlzLl9hZGREYXRhc2V0KEIpOwp0aGlzLl9vbkRhdGFzZXRVcGRhdGUoKTtyZXR1cm4gdGhpc307RC5wcm90b3R5cGUuX2FkZERhdGFzZXQ9ZnVuY3Rpb24oQil7dGhpcy5fcmVtb3ZlRGF0YXNldChCKTt2YXIgRz10aGlzLl9jcmVhdGVEcmF3ZXIoQik7dGhpcy5fZGF0YXNldFRvRHJhd2VyLnNldChCLEcpO3RoaXMuX2lzU2V0dXAmJnRoaXMuX2NyZWF0ZU5vZGVzRm9yRGF0YXNldChCKTtCLm9uVXBkYXRlKHRoaXMuX29uRGF0YXNldFVwZGF0ZUNhbGxiYWNrKTtyZXR1cm4gdGhpc307RC5wcm90b3R5cGUucmVtb3ZlRGF0YXNldD1mdW5jdGlvbihCKXt0aGlzLl9yZW1vdmVEYXRhc2V0KEIpO3RoaXMuX29uRGF0YXNldFVwZGF0ZSgpfTtELnByb3RvdHlwZS5fcmVtb3ZlRGF0YXNldD1mdW5jdGlvbihCKXtpZigtMT09PXRoaXMuZGF0YXNldHMoKS5pbmRleE9mKEIpKXJldHVybiB0aGlzO3RoaXMuX3JlbW92ZURhdGFzZXROb2RlcyhCKTtCLm9mZlVwZGF0ZSh0aGlzLl9vbkRhdGFzZXRVcGRhdGVDYWxsYmFjayk7dGhpcy5fZGF0YXNldFRvRHJhd2VyLmRlbGV0ZShCKTsKcmV0dXJuIHRoaXN9O0QucHJvdG90eXBlLl9yZW1vdmVEYXRhc2V0Tm9kZXM9ZnVuY3Rpb24oQil7dGhpcy5fZGF0YXNldFRvRHJhd2VyLmdldChCKS5yZW1vdmUoKX07RC5wcm90b3R5cGUuZGF0YXNldHM9ZnVuY3Rpb24oQil7dmFyIEc9dGhpcyxLPVtdO3RoaXMuX2RhdGFzZXRUb0RyYXdlci5mb3JFYWNoKGZ1bmN0aW9uKEwsSil7cmV0dXJuIEsucHVzaChKKX0pO2lmKG51bGw9PUIpcmV0dXJuIEs7Sy5mb3JFYWNoKGZ1bmN0aW9uKEwpe3JldHVybiBHLl9yZW1vdmVEYXRhc2V0KEwpfSk7Qi5mb3JFYWNoKGZ1bmN0aW9uKEwpe3JldHVybiBHLl9hZGREYXRhc2V0KEwpfSk7dGhpcy5fb25EYXRhc2V0VXBkYXRlKCk7cmV0dXJuIHRoaXN9O0QucHJvdG90eXBlLl9nZW5lcmF0ZURyYXdTdGVwcz1mdW5jdGlvbigpe3JldHVyblt7YXR0clRvUHJvamVjdG9yOnRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpLGFuaW1hdG9yOm5ldyBtLk51bGx9XX07RC5wcm90b3R5cGUuX2FkZGl0aW9uYWxQYWludD0KZnVuY3Rpb24oKXt9O0QucHJvdG90eXBlLl9idWlsZExpZ2h0d2VpZ2h0UGxvdEVudGl0aWVzPWZ1bmN0aW9uKEIpe3ZhciBHPXRoaXMsSz1bXTtCLmZvckVhY2goZnVuY3Rpb24oTCxKKXt2YXIgUD1HLl9kYXRhc2V0VG9EcmF3ZXIuZ2V0KEwpLFM9MDtMLmRhdGEoKS5mb3JFYWNoKGZ1bmN0aW9uKE4sVCl7dmFyIFk9Ry5fcGl4ZWxQb2ludChOLFQsTCk7di5NYXRoLmlzTmFOKFkueCl8fHYuTWF0aC5pc05hTihZLnkpfHwoSy5wdXNoKHtkYXR1bTpOLGdldCBwb3NpdGlvbigpe3JldHVybiBHLl9waXhlbFBvaW50LmNhbGwoRyxOLFQsTCl9LGluZGV4OlQsZGF0YXNldDpMLGRhdGFzZXRJbmRleDpKLGNvbXBvbmVudDpHLGRyYXdlcjpQLHZhbGlkRGF0dW1JbmRleDpTfSksUysrKX0pfSk7cmV0dXJuIEt9O0QucHJvdG90eXBlLl9nZXREYXRhVG9EcmF3PWZ1bmN0aW9uKCl7dmFyIEI9bmV3IHYuTWFwO3RoaXMuZGF0YXNldHMoKS5mb3JFYWNoKGZ1bmN0aW9uKEcpe3JldHVybiBCLnNldChHLApHLmRhdGEoKSl9KTtyZXR1cm4gQn07RC5wcm90b3R5cGUuX3BhaW50PWZ1bmN0aW9uKCl7dmFyIEI9dGhpcztkZWxldGUgdGhpcy5fY2FjaGVkQXR0clRvUHJvamVjdG9yO3ZhciBHPXRoaXMuX2dlbmVyYXRlRHJhd1N0ZXBzKCksSz10aGlzLl9nZXREYXRhVG9EcmF3KCksTD10aGlzLmRhdGFzZXRzKCkubWFwKGZ1bmN0aW9uKFApe3JldHVybiBCLl9kYXRhc2V0VG9EcmF3ZXIuZ2V0KFApfSk7aWYoImNhbnZhcyI9PT10aGlzLnJlbmRlcmVyKCkpe3ZhciBKPXRoaXMuX2NhbnZhcy5ub2RlKCk7Si5nZXRDb250ZXh0KCIyZCIpLmNsZWFyUmVjdCgwLDAsSi5jbGllbnRXaWR0aCxKLmNsaWVudEhlaWdodCk7dGhpcy5fYnVmZmVyQ2FudmFzVmFsaWQ9ITF9dGhpcy5kYXRhc2V0cygpLmZvckVhY2goZnVuY3Rpb24oUCxTKXt2YXIgTj1ELmFwcGx5RHJhd1N0ZXBzKEcsUCk7TFtTXS5kcmF3KEsuZ2V0KFApLE4pfSk7Sj10aGlzLmRhdGFzZXRzKCkubWFwKGZ1bmN0aW9uKFApe3JldHVybiBELmdldFRvdGFsRHJhd1RpbWUoSy5nZXQoUCksCkcpfSk7Sj12Lk1hdGgubWF4KEosMCk7dGhpcy5fYWRkaXRpb25hbFBhaW50KEopfTtELnByb3RvdHlwZS5zZWxlY3Rpb25zPWZ1bmN0aW9uKEIpe3ZhciBHPXRoaXM7dm9pZCAwPT09QiYmKEI9dGhpcy5kYXRhc2V0cygpKTtpZigiY2FudmFzIj09PXRoaXMucmVuZGVyZXIoKSlyZXR1cm4gay5zZWxlY3RBbGwoKTt2YXIgSz1bXTtCLmZvckVhY2goZnVuY3Rpb24oTCl7TD1HLl9kYXRhc2V0VG9EcmF3ZXIuZ2V0KEwpO251bGwhPUwmJihMPUwuZ2V0VmlzdWFsUHJpbWl0aXZlcygpLEsucHVzaC5hcHBseShLLEwpKX0pO3JldHVybiBrLnNlbGVjdEFsbChLKX07RC5wcm90b3R5cGUuZW50aXRpZXM9ZnVuY3Rpb24oQil7dmFyIEc9dGhpcztyZXR1cm4gdGhpcy5fZ2V0RW50aXR5U3RvcmUoQikuZW50aXRpZXMoKS5tYXAoZnVuY3Rpb24oSyl7cmV0dXJuIEcuX2xpZ2h0d2VpZ2h0UGxvdEVudGl0eVRvUGxvdEVudGl0eShLKX0pfTtELnByb3RvdHlwZS5fZ2V0RW50aXR5U3RvcmU9ZnVuY3Rpb24oQil7ZnVuY3Rpb24gRyhKKXtyZXR1cm4gSy5fZW50aXR5Qm91bmRzKEopfQp2YXIgSz10aGlzO2lmKHZvaWQgMCE9PUIpe3ZhciBMPW5ldyB2LkVudGl0eVN0b3JlO0wuYWRkQWxsKHRoaXMuX2J1aWxkTGlnaHR3ZWlnaHRQbG90RW50aXRpZXMoQiksRyx0aGlzLl9sb2NhbE9yaWdpbkJvdW5kcygpKTtyZXR1cm4gTH12b2lkIDA9PT10aGlzLl9jYWNoZWRFbnRpdHlTdG9yZSYmKEw9bmV3IHYuRW50aXR5U3RvcmUsTC5hZGRBbGwodGhpcy5fYnVpbGRMaWdodHdlaWdodFBsb3RFbnRpdGllcyh0aGlzLmRhdGFzZXRzKCkpLEcsdGhpcy5fbG9jYWxPcmlnaW5Cb3VuZHMoKSksdGhpcy5fY2FjaGVkRW50aXR5U3RvcmU9TCk7cmV0dXJuIHRoaXMuX2NhY2hlZEVudGl0eVN0b3JlfTtELnByb3RvdHlwZS5fbG9jYWxPcmlnaW5Cb3VuZHM9ZnVuY3Rpb24oKXtyZXR1cm57dG9wTGVmdDp7eDowLHk6MH0sYm90dG9tUmlnaHQ6e3g6dGhpcy53aWR0aCgpLHk6dGhpcy5oZWlnaHQoKX19fTtELnByb3RvdHlwZS5fZW50aXR5Qm91bmRzPWZ1bmN0aW9uKEIpe0I9dGhpcy5fcGl4ZWxQb2ludChCLmRhdHVtLApCLmluZGV4LEIuZGF0YXNldCk7cmV0dXJue3g6Qi54LHk6Qi55LHdpZHRoOjAsaGVpZ2h0OjB9fTtELnByb3RvdHlwZS5fbGlnaHR3ZWlnaHRQbG90RW50aXR5VG9QbG90RW50aXR5PWZ1bmN0aW9uKEIpe3JldHVybntib3VuZHM6dGhpcy5fZW50aXR5Qm91bmRzKEIpLGNvbXBvbmVudDpCLmNvbXBvbmVudCxkYXRhc2V0OkIuZGF0YXNldCxkYXRhc2V0SW5kZXg6Qi5kYXRhc2V0SW5kZXgsZGF0dW06Qi5kYXR1bSxpbmRleDpCLmluZGV4LHBvc2l0aW9uOkIucG9zaXRpb24sc2VsZWN0aW9uOmsuc2VsZWN0KEIuZHJhd2VyLmdldFZpc3VhbFByaW1pdGl2ZXMoKVtCLnZhbGlkRGF0dW1JbmRleF0pfX07RC5wcm90b3R5cGUuZW50aXRpZXNBdD1mdW5jdGlvbigpe3Rocm93IEVycm9yKCJwbG90cyBtdXN0IGltcGxlbWVudCBlbnRpdGllc0F0Iik7fTtELnByb3RvdHlwZS5lbnRpdHlOZWFyZXN0PWZ1bmN0aW9uKEIpe0I9dGhpcy5fZ2V0RW50aXR5U3RvcmUoKS5lbnRpdHlOZWFyZXN0KEIpOwpyZXR1cm4gdm9pZCAwPT09Qj92b2lkIDA6dGhpcy5fbGlnaHR3ZWlnaHRQbG90RW50aXR5VG9QbG90RW50aXR5KEIpfTtELnByb3RvdHlwZS5lbnRpdGllc0luPWZ1bmN0aW9uKEIsRyl7cmV0dXJuIHRoaXMuZW50aXRpZXNJbkJvdW5kcyhudWxsPT1HP3t4OkIudG9wTGVmdC54LHk6Qi50b3BMZWZ0Lnksd2lkdGg6Qi5ib3R0b21SaWdodC54LUIudG9wTGVmdC54LGhlaWdodDpCLmJvdHRvbVJpZ2h0LnktQi50b3BMZWZ0Lnl9Ont4OkIubWluLHk6Ry5taW4sd2lkdGg6Qi5tYXgtQi5taW4saGVpZ2h0OkcubWF4LUcubWlufSl9O0QucHJvdG90eXBlLmVudGl0aWVzSW5Cb3VuZHM9ZnVuY3Rpb24oQil7dmFyIEc9dGhpcztpZihCPXRoaXMuX2dldEVudGl0eVN0b3JlKCkuZW50aXRpZXNJbkJvdW5kcyhCKSlyZXR1cm4gQi5tYXAoZnVuY3Rpb24oSyl7cmV0dXJuIEcuX2xpZ2h0d2VpZ2h0UGxvdEVudGl0eVRvUGxvdEVudGl0eShLKX0pfTtELnByb3RvdHlwZS5lbnRpdGllc0luWEJvdW5kcz0KZnVuY3Rpb24oQil7dmFyIEc9dGhpcztpZihCPXRoaXMuX2dldEVudGl0eVN0b3JlKCkuZW50aXRpZXNJblhCb3VuZHMoQikpcmV0dXJuIEIubWFwKGZ1bmN0aW9uKEspe3JldHVybiBHLl9saWdodHdlaWdodFBsb3RFbnRpdHlUb1Bsb3RFbnRpdHkoSyl9KX07RC5wcm90b3R5cGUuZW50aXRpZXNJbllCb3VuZHM9ZnVuY3Rpb24oQil7dmFyIEc9dGhpcztpZihCPXRoaXMuX2dldEVudGl0eVN0b3JlKCkuZW50aXRpZXNJbllCb3VuZHMoQikpcmV0dXJuIEIubWFwKGZ1bmN0aW9uKEspe3JldHVybiBHLl9saWdodHdlaWdodFBsb3RFbnRpdHlUb1Bsb3RFbnRpdHkoSyl9KX07RC5wcm90b3R5cGUuX3VuaW5zdGFsbFNjYWxlRm9yS2V5PWZ1bmN0aW9uKEIpe0Iub2ZmVXBkYXRlKHRoaXMuX3JlbmRlckNhbGxiYWNrKTtCLm9mZlVwZGF0ZSh0aGlzLl9kZWZlcnJlZFJlc2V0RW50aXR5U3RvcmUpO0IucmVtb3ZlSW5jbHVkZWRWYWx1ZXNQcm92aWRlcih0aGlzLl9pbmNsdWRlZFZhbHVlc1Byb3ZpZGVyKX07CkQucHJvdG90eXBlLl9pbnN0YWxsU2NhbGVGb3JLZXk9ZnVuY3Rpb24oQil7Qi5vblVwZGF0ZSh0aGlzLl9yZW5kZXJDYWxsYmFjayk7Qi5vblVwZGF0ZSh0aGlzLl9kZWZlcnJlZFJlc2V0RW50aXR5U3RvcmUpO0IuYWRkSW5jbHVkZWRWYWx1ZXNQcm92aWRlcih0aGlzLl9pbmNsdWRlZFZhbHVlc1Byb3ZpZGVyKX07RC5wcm90b3R5cGUuX3Byb3BlcnR5UHJvamVjdG9ycz1mdW5jdGlvbigpe3JldHVybnt9fTtELl9zY2FsZWRBY2Nlc3Nvcj1mdW5jdGlvbihCKXt2YXIgRz1CLnNjYWxlLEs9Qi5hY2Nlc3NvcixMPUIucG9zdFNjYWxlLEo9bnVsbD09Rz9LOmZ1bmN0aW9uKFAsUyxOKXtyZXR1cm4gRy5zY2FsZShLKFAsUyxOKSl9O3JldHVybiBudWxsPT1MP0o6ZnVuY3Rpb24oUCxTLE4pe3JldHVybiBMKEooUCxTLE4pLFAsUyxOKX19O0QucHJvdG90eXBlLl9waXhlbFBvaW50PWZ1bmN0aW9uKCl7cmV0dXJue3g6MCx5OjB9fTtELnByb3RvdHlwZS5fYW5pbWF0ZU9uTmV4dFJlbmRlcj0KZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYW5pbWF0ZSYmdGhpcy5fZGF0YUNoYW5nZWR9O3JldHVybiBEfShjLkNvbXBvbmVudCk7Zi5fQU5JTUFUSU9OX01BWF9EVVJBVElPTj02MDA7ZC5QbG90PWZ9LGZ1bmN0aW9uKGMsZCxmKXtmdW5jdGlvbiBnKG0pe2Zvcih2YXIgcCBpbiBtKWQuaGFzT3duUHJvcGVydHkocCl8fChkW3BdPW1bcF0pfWM9ZigxMDUpO2QuVGlja0dlbmVyYXRvcnM9YztnKGYoNTQpKTtnKGYoMTAxKSk7ZyhmKDEwMikpO2coZigxMDMpKTtnKGYoMTA0KSk7ZyhmKDEwNikpO3ZhciBsPWYoNTQpLGs9ZigxMSk7ZC5pc1RyYW5zZm9ybWFibGU9ZnVuY3Rpb24obSl7cmV0dXJuIG0gaW5zdGFuY2VvZiBrLlF1YW50aXRhdGl2ZVNjYWxlfHxtIGluc3RhbmNlb2YgbC5DYXRlZ29yeX19LGZ1bmN0aW9uKGMsZCxmKXt2YXIgZz1mKDEpLGw9ZigzMCksaz1mKDApLG09ZigxMik7Yz1mKDEwKTtkLlhBbGlnbm1lbnQ9Yy5tYWtlRW51bShbImxlZnQiLCJjZW50ZXIiLCJyaWdodCJdKTsKZC5ZQWxpZ25tZW50PWMubWFrZUVudW0oWyJ0b3AiLCJjZW50ZXIiLCJib3R0b20iXSk7Yz1mdW5jdGlvbigpe2Z1bmN0aW9uIHAoKXt0aGlzLl9vdmVyZmxvd0hpZGRlbj0hMTt0aGlzLl9vcmlnaW49e3g6MCx5OjB9O3RoaXMuX3hBbGlnbm1lbnQ9ImxlZnQiO3RoaXMuX3lBbGlnbm1lbnQ9InRvcCI7dGhpcy5faXNBbmNob3JlZD10aGlzLl9pc1NldHVwPSExO3RoaXMuX2Nzc0NsYXNzZXM9bmV3IGsuU2V0O3RoaXMuX2Rlc3Ryb3llZD0hMTt0aGlzLl9vbkFuY2hvckNhbGxiYWNrcz1uZXcgay5DYWxsYmFja1NldDt0aGlzLl9vbkRldGFjaENhbGxiYWNrcz1uZXcgay5DYWxsYmFja1NldDt0aGlzLl9jc3NDbGFzc2VzLmFkZCgiY29tcG9uZW50Iil9cC5wcm90b3R5cGUuYW5jaG9yPWZ1bmN0aW9uKHEpe3E9bS5jb2VyY2VFeHRlcm5hbEQzKHEpO2lmKHRoaXMuX2Rlc3Ryb3llZCl0aHJvdyBFcnJvcigiQ2FuJ3QgcmV1c2UgZGVzdHJveSgpLWVkIENvbXBvbmVudHMhIik7dGhpcy5pc1Jvb3QoKSYmCih0aGlzLl9yb290RWxlbWVudD1xLHRoaXMuX3Jvb3RFbGVtZW50LmNsYXNzZWQoInBsb3R0YWJsZSIsITApKTtudWxsIT10aGlzLl9lbGVtZW50P3Eubm9kZSgpLmFwcGVuZENoaWxkKHRoaXMuX2VsZW1lbnQubm9kZSgpKToodGhpcy5fZWxlbWVudD1xLmFwcGVuZCgiZGl2IiksdGhpcy5fc2V0dXAoKSk7dGhpcy5faXNBbmNob3JlZD0hMDt0aGlzLl9vbkFuY2hvckNhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKHRoaXMpO3JldHVybiB0aGlzfTtwLnByb3RvdHlwZS5vbkFuY2hvcj1mdW5jdGlvbihxKXt0aGlzLl9pc0FuY2hvcmVkJiZxKHRoaXMpO3RoaXMuX29uQW5jaG9yQ2FsbGJhY2tzLmFkZChxKX07cC5wcm90b3R5cGUub2ZmQW5jaG9yPWZ1bmN0aW9uKHEpe3RoaXMuX29uQW5jaG9yQ2FsbGJhY2tzLmRlbGV0ZShxKX07cC5wcm90b3R5cGUuX3NldHVwPWZ1bmN0aW9uKCl7dmFyIHE9dGhpczt0aGlzLl9pc1NldHVwfHwodGhpcy5fY3NzQ2xhc3Nlcy5mb3JFYWNoKGZ1bmN0aW9uKHIpe3EuX2VsZW1lbnQuY2xhc3NlZChyLAohMCl9KSx0aGlzLl9jc3NDbGFzc2VzPW5ldyBrLlNldCx0aGlzLl9iYWNrZ3JvdW5kQ29udGFpbmVyPXRoaXMuX2VsZW1lbnQuYXBwZW5kKCJzdmciKS5jbGFzc2VkKCJiYWNrZ3JvdW5kLWNvbnRhaW5lciIsITApLHRoaXMuX2NvbnRlbnQ9dGhpcy5fZWxlbWVudC5hcHBlbmQoInN2ZyIpLmNsYXNzZWQoImNvbnRlbnQiLCEwKSx0aGlzLl9mb3JlZ3JvdW5kQ29udGFpbmVyPXRoaXMuX2VsZW1lbnQuYXBwZW5kKCJzdmciKS5jbGFzc2VkKCJmb3JlZ3JvdW5kLWNvbnRhaW5lciIsITApLHRoaXMuX292ZXJmbG93SGlkZGVuP3RoaXMuX2NvbnRlbnQuY2xhc3NlZCgiY29tcG9uZW50LW92ZXJmbG93LWhpZGRlbiIsITApOnRoaXMuX2NvbnRlbnQuY2xhc3NlZCgiY29tcG9uZW50LW92ZXJmbG93LXZpc2libGUiLCEwKSx0aGlzLl9pc1NldHVwPSEwKX07cC5wcm90b3R5cGUucmVxdWVzdGVkU3BhY2U9ZnVuY3Rpb24oKXtyZXR1cm57bWluV2lkdGg6MCxtaW5IZWlnaHQ6MH19O3AucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQ9CmZ1bmN0aW9uKHEscix0KXtpZihudWxsPT1xfHxudWxsPT1yfHxudWxsPT10KXtpZihudWxsPT10aGlzLl9lbGVtZW50KXRocm93IEVycm9yKCJhbmNob3IoKSBtdXN0IGJlIGNhbGxlZCBiZWZvcmUgY29tcHV0ZUxheW91dCgpIik7aWYobnVsbCE9dGhpcy5fcm9vdEVsZW1lbnQpcT17eDowLHk6MH0sdD10aGlzLl9yb290RWxlbWVudC5ub2RlKCkscj1rLkRPTS5lbGVtZW50V2lkdGgodCksdD1rLkRPTS5lbGVtZW50SGVpZ2h0KHQpO2Vsc2UgdGhyb3cgRXJyb3IoIm51bGwgYXJndW1lbnRzIGNhbm5vdCBiZSBwYXNzZWQgdG8gY29tcHV0ZUxheW91dCgpIG9uIGEgbm9uLXJvb3QsIHVuYW5jaG9yZWQgbm9kZSIpO312YXIgdj10aGlzLl9zaXplRnJvbU9mZmVyKHIsdCksQT12LmhlaWdodDt2PXYud2lkdGg7dGhpcy5zZXRCb3VuZHModixBLHEueCsoci12KSpwLl94QWxpZ25Ub1Byb3BvcnRpb25bdGhpcy5feEFsaWdubWVudF0scS55Kyh0LUEpKnAuX3lBbGlnblRvUHJvcG9ydGlvblt0aGlzLl95QWxpZ25tZW50XSk7CnJldHVybiB0aGlzfTtwLnByb3RvdHlwZS5zZXRCb3VuZHM9ZnVuY3Rpb24ocSxyLHQsdil7dm9pZCAwPT09dCYmKHQ9MCk7dm9pZCAwPT09diYmKHY9MCk7dGhpcy5fd2lkdGg9cTt0aGlzLl9oZWlnaHQ9cjt0aGlzLl9vcmlnaW49e3g6dCx5OnZ9O251bGwhPXRoaXMuX2VsZW1lbnQmJnRoaXMuX2VsZW1lbnQuc3R5bGVzKHtsZWZ0OnQrInB4IixoZWlnaHQ6cisicHgiLHRvcDp2KyJweCIsd2lkdGg6cSsicHgifSk7bnVsbCE9dGhpcy5fcmVzaXplSGFuZGxlciYmdGhpcy5fcmVzaXplSGFuZGxlcih7d2lkdGg6cSxoZWlnaHQ6cn0pfTtwLnByb3RvdHlwZS5fc2l6ZUZyb21PZmZlcj1mdW5jdGlvbihxLHIpe3ZhciB0PXRoaXMucmVxdWVzdGVkU3BhY2UocSxyKTtyZXR1cm57d2lkdGg6dGhpcy5maXhlZFdpZHRoKCk/TWF0aC5taW4ocSx0Lm1pbldpZHRoKTpxLGhlaWdodDp0aGlzLmZpeGVkSGVpZ2h0KCk/TWF0aC5taW4ocix0Lm1pbkhlaWdodCk6cn19O3AucHJvdG90eXBlLnJlbmRlcj0KZnVuY3Rpb24oKXt0aGlzLl9pc0FuY2hvcmVkJiZ0aGlzLl9pc1NldHVwJiYwPD10aGlzLndpZHRoKCkmJjA8PXRoaXMuaGVpZ2h0KCkmJmwucmVnaXN0ZXJUb1JlbmRlcih0aGlzKTtyZXR1cm4gdGhpc307cC5wcm90b3R5cGUucmVuZGVyTG93UHJpb3JpdHk9ZnVuY3Rpb24oKXt0aGlzLnJlbmRlcigpfTtwLnByb3RvdHlwZS5fc2NoZWR1bGVDb21wdXRlTGF5b3V0PWZ1bmN0aW9uKCl7dGhpcy5faXNBbmNob3JlZCYmdGhpcy5faXNTZXR1cCYmbC5yZWdpc3RlclRvQ29tcHV0ZUxheW91dEFuZFJlbmRlcih0aGlzKX07cC5wcm90b3R5cGUub25SZXNpemU9ZnVuY3Rpb24ocSl7dGhpcy5fcmVzaXplSGFuZGxlcj1xO3JldHVybiB0aGlzfTtwLnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseT1mdW5jdGlvbigpe3JldHVybiB0aGlzfTtwLnByb3RvdHlwZS5yZWRyYXc9ZnVuY3Rpb24oKXt0aGlzLl9pc0FuY2hvcmVkJiZ0aGlzLl9pc1NldHVwJiYodGhpcy5pc1Jvb3QoKT90aGlzLl9zY2hlZHVsZUNvbXB1dGVMYXlvdXQoKToKdGhpcy5wYXJlbnQoKS5yZWRyYXcoKSk7cmV0dXJuIHRoaXN9O3AucHJvdG90eXBlLmludmFsaWRhdGVDYWNoZT1mdW5jdGlvbigpe307cC5wcm90b3R5cGUucmVuZGVyVG89ZnVuY3Rpb24ocSl7dGhpcy5kZXRhY2goKTtpZihudWxsIT1xKXtxPSJzdHJpbmciPT09dHlwZW9mIHE/Zy5zZWxlY3QocSk6cSBpbnN0YW5jZW9mIEVsZW1lbnQ/Zy5zZWxlY3QocSk6bS5jb2VyY2VFeHRlcm5hbEQzKHEpO2lmKCFxLm5vZGUoKXx8bnVsbD09cS5ub2RlKCkubm9kZU5hbWUpdGhyb3cgRXJyb3IoIlBsb3R0YWJsZSByZXF1aXJlcyBhIHZhbGlkIEVsZW1lbnQgdG8gcmVuZGVyVG8iKTtpZigic3ZnIj09PXEubm9kZSgpLm5vZGVOYW1lKXRocm93IEVycm9yKCJQbG90dGFibGUgMy54IGFuZCBsYXRlciBjYW4gb25seSByZW5kZXJUbyBhbiBIVE1MIGNvbXBvbmVudDsgcGFzcyBhIGRpdiBpbnN0ZWFkISIpO3RoaXMuYW5jaG9yKHEpfWlmKG51bGw9PXRoaXMuX2VsZW1lbnQpdGhyb3cgRXJyb3IoIklmIGEgQ29tcG9uZW50IGhhcyBuZXZlciBiZWVuIHJlbmRlcmVkIGJlZm9yZSwgdGhlbiByZW5kZXJUbyBtdXN0IGJlIGdpdmVuIGEgbm9kZSB0byByZW5kZXIgdG8sIG9yIGEgZDMuU2VsZWN0aW9uLCBvciBhIHNlbGVjdG9yIHN0cmluZyIpOwpsLnJlZ2lzdGVyVG9Db21wdXRlTGF5b3V0QW5kUmVuZGVyKHRoaXMpO2wuZmx1c2goKX07cC5wcm90b3R5cGUueEFsaWdubWVudD1mdW5jdGlvbihxKXtpZihudWxsPT1xKXJldHVybiB0aGlzLl94QWxpZ25tZW50O3E9cS50b0xvd2VyQ2FzZSgpO2lmKG51bGw9PXAuX3hBbGlnblRvUHJvcG9ydGlvbltxXSl0aHJvdyBFcnJvcigiVW5zdXBwb3J0ZWQgYWxpZ25tZW50OiAiK3EpO3RoaXMuX3hBbGlnbm1lbnQ9cTt0aGlzLnJlZHJhdygpO3JldHVybiB0aGlzfTtwLnByb3RvdHlwZS55QWxpZ25tZW50PWZ1bmN0aW9uKHEpe2lmKG51bGw9PXEpcmV0dXJuIHRoaXMuX3lBbGlnbm1lbnQ7cT1xLnRvTG93ZXJDYXNlKCk7aWYobnVsbD09cC5feUFsaWduVG9Qcm9wb3J0aW9uW3FdKXRocm93IEVycm9yKCJVbnN1cHBvcnRlZCBhbGlnbm1lbnQ6ICIrcSk7dGhpcy5feUFsaWdubWVudD1xO3RoaXMucmVkcmF3KCk7cmV0dXJuIHRoaXN9O3AucHJvdG90eXBlLmhhc0NsYXNzPWZ1bmN0aW9uKHEpe3JldHVybiBudWxsPT0KcT8hMTpudWxsPT10aGlzLl9lbGVtZW50P3RoaXMuX2Nzc0NsYXNzZXMuaGFzKHEpOnRoaXMuX2VsZW1lbnQuY2xhc3NlZChxKX07cC5wcm90b3R5cGUuYWRkQ2xhc3M9ZnVuY3Rpb24ocSl7bnVsbCE9cSYmKG51bGw9PXRoaXMuX2VsZW1lbnQ/dGhpcy5fY3NzQ2xhc3Nlcy5hZGQocSk6dGhpcy5fZWxlbWVudC5jbGFzc2VkKHEsITApKX07cC5wcm90b3R5cGUucmVtb3ZlQ2xhc3M9ZnVuY3Rpb24ocSl7bnVsbCE9cSYmKG51bGw9PXRoaXMuX2VsZW1lbnQ/dGhpcy5fY3NzQ2xhc3Nlcy5kZWxldGUocSk6dGhpcy5fZWxlbWVudC5jbGFzc2VkKHEsITEpKX07cC5wcm90b3R5cGUuZml4ZWRXaWR0aD1mdW5jdGlvbigpe3JldHVybiExfTtwLnByb3RvdHlwZS5maXhlZEhlaWdodD1mdW5jdGlvbigpe3JldHVybiExfTtwLnByb3RvdHlwZS5kZXRhY2g9ZnVuY3Rpb24oKXt0aGlzLnBhcmVudChudWxsKTt0aGlzLl9pc0FuY2hvcmVkJiZ0aGlzLl9lbGVtZW50LnJlbW92ZSgpO3RoaXMuX2lzQW5jaG9yZWQ9CiExO3RoaXMuX29uRGV0YWNoQ2FsbGJhY2tzLmNhbGxDYWxsYmFja3ModGhpcyk7cmV0dXJuIHRoaXN9O3AucHJvdG90eXBlLm9uRGV0YWNoPWZ1bmN0aW9uKHEpe3RoaXMuX29uRGV0YWNoQ2FsbGJhY2tzLmFkZChxKX07cC5wcm90b3R5cGUub2ZmRGV0YWNoPWZ1bmN0aW9uKHEpe3RoaXMuX29uRGV0YWNoQ2FsbGJhY2tzLmRlbGV0ZShxKX07cC5wcm90b3R5cGUucGFyZW50PWZ1bmN0aW9uKHEpe2lmKHZvaWQgMD09PXEpcmV0dXJuIHRoaXMuX3BhcmVudDtpZihudWxsIT09cSYmIXEuaGFzKHRoaXMpKXRocm93IEVycm9yKCJQYXNzZWQgaW52YWxpZCBwYXJlbnQiKTt0aGlzLl9wYXJlbnQ9cTtyZXR1cm4gdGhpc307cC5wcm90b3R5cGUuYm91bmRzPWZ1bmN0aW9uKCl7dmFyIHE9dGhpcy5vcmlnaW4oKTtyZXR1cm57dG9wTGVmdDpxLGJvdHRvbVJpZ2h0Ont4OnEueCt0aGlzLndpZHRoKCkseTpxLnkrdGhpcy5oZWlnaHQoKX19fTtwLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5fZGVzdHJveWVkPQohMDt0aGlzLmRldGFjaCgpfTtwLnByb3RvdHlwZS53aWR0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl93aWR0aH07cC5wcm90b3R5cGUuaGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2hlaWdodH07cC5wcm90b3R5cGUub3JpZ2luPWZ1bmN0aW9uKCl7cmV0dXJue3g6dGhpcy5fb3JpZ2luLngseTp0aGlzLl9vcmlnaW4ueX19O3AucHJvdG90eXBlLm9yaWdpblRvUm9vdD1mdW5jdGlvbigpe2Zvcih2YXIgcT10aGlzLm9yaWdpbigpLHI9dGhpcy5wYXJlbnQoKTtudWxsIT1yOyl7dmFyIHQ9ci5vcmlnaW4oKTtxLngrPXQueDtxLnkrPXQueTtyPXIucGFyZW50KCl9cmV0dXJuIHF9O3AucHJvdG90eXBlLnJvb3Q9ZnVuY3Rpb24oKXtmb3IodmFyIHE9dGhpczshcS5pc1Jvb3QoKTspcT1xLnBhcmVudCgpO3JldHVybiBxfTtwLnByb3RvdHlwZS5pc1Jvb3Q9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbD09dGhpcy5wYXJlbnQoKX07cC5wcm90b3R5cGUuZm9yZWdyb3VuZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9mb3JlZ3JvdW5kQ29udGFpbmVyfTsKcC5wcm90b3R5cGUuY29udGVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb250ZW50fTtwLnByb3RvdHlwZS5lbGVtZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VsZW1lbnR9O3AucHJvdG90eXBlLnJvb3RFbGVtZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucm9vdCgpLl9yb290RWxlbWVudH07cC5wcm90b3R5cGUuYmFja2dyb3VuZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9iYWNrZ3JvdW5kQ29udGFpbmVyfTtyZXR1cm4gcH0oKTtjLl94QWxpZ25Ub1Byb3BvcnRpb249e2xlZnQ6MCxjZW50ZXI6LjUscmlnaHQ6MX07Yy5feUFsaWduVG9Qcm9wb3J0aW9uPXt0b3A6MCxjZW50ZXI6LjUsYm90dG9tOjF9O2QuQ29tcG9uZW50PWN9LGZ1bmN0aW9uKGMsZCxmKXtmdW5jdGlvbiBnKGwpe2Zvcih2YXIgayBpbiBsKWQuaGFzT3duUHJvcGVydHkoayl8fChkW2tdPWxba10pfWcoZig1OSkpO2coZig2MikpO2coZigxMzMpKTtnKGYoMjEpKTtnKGYoNjQpKTtnKGYoNjYpKX0sCmZ1bmN0aW9uKGMsZCl7Yz1mdW5jdGlvbigpe2Z1bmN0aW9uIGYoZyxsKXt0aGlzLl9zdmdEcmF3ZXJGYWN0b3J5PWc7dGhpcy5fY2FudmFzRHJhd2VyRmFjdG9yeT1sfWYucHJvdG90eXBlLnVzZVNWRz1mdW5jdGlvbihnKXtudWxsIT10aGlzLl9jdXJyZW50RHJhd2VyJiZ0aGlzLl9jdXJyZW50RHJhd2VyLnJlbW92ZSgpO3ZhciBsPXRoaXMuX3N2Z0RyYXdlckZhY3RvcnkoKTtsLmF0dGFjaFRvKGcpO3RoaXMuX2N1cnJlbnREcmF3ZXI9bH07Zi5wcm90b3R5cGUudXNlQ2FudmFzPWZ1bmN0aW9uKGcpe251bGwhPXRoaXMuX2N1cnJlbnREcmF3ZXImJnRoaXMuX2N1cnJlbnREcmF3ZXIucmVtb3ZlKCk7dGhpcy5fY3VycmVudERyYXdlcj10aGlzLl9jYW52YXNEcmF3ZXJGYWN0b3J5KGcubm9kZSgpLmdldENvbnRleHQoIjJkIikpfTtmLnByb3RvdHlwZS5nZXREcmF3ZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY3VycmVudERyYXdlcn07Zi5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKCl7bnVsbCE9CnRoaXMuX2N1cnJlbnREcmF3ZXImJnRoaXMuX2N1cnJlbnREcmF3ZXIucmVtb3ZlKCl9O2YucHJvdG90eXBlLmRyYXc9ZnVuY3Rpb24oZyxsKXt0aGlzLl9jdXJyZW50RHJhd2VyLmRyYXcoZyxsKX07Zi5wcm90b3R5cGUuZ2V0VmlzdWFsUHJpbWl0aXZlcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jdXJyZW50RHJhd2VyLmdldFZpc3VhbFByaW1pdGl2ZXMoKX07Zi5wcm90b3R5cGUuZ2V0VmlzdWFsUHJpbWl0aXZlQXRJbmRleD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5fY3VycmVudERyYXdlci5nZXRWaXN1YWxQcmltaXRpdmVBdEluZGV4KGcpfTtyZXR1cm4gZn0oKTtkLlByb3h5RHJhd2VyPWN9LGZ1bmN0aW9uKGMsZCxmKXtmdW5jdGlvbiBnKGwpe2Zvcih2YXIgayBpbiBsKWQuaGFzT3duUHJvcGVydHkoayl8fChkW2tdPWxba10pfWcoZig3MCkpO2coZig3MSkpfSxmdW5jdGlvbihjLGQsZil7ZnVuY3Rpb24gZyhtKXt2b2lkIDA9PT1tJiYobT0zKTtsKG0pO3JldHVybiBmdW5jdGlvbihwKXtyZXR1cm4gcC50b0ZpeGVkKG0pfX0KZnVuY3Rpb24gbChtKXtpZigwPm18fDIwPG0pdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkZvcm1hdHRlciBwcmVjaXNpb24gbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDIwIik7aWYobSE9PU1hdGguZmxvb3IobSkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkZvcm1hdHRlciBwcmVjaXNpb24gbXVzdCBiZSBhbiBpbnRlZ2VyIik7fXZhciBrPWYoMSk7ZC5jdXJyZW5jeT1mdW5jdGlvbihtLHAscSl7dm9pZCAwPT09bSYmKG09Mik7dm9pZCAwPT09cCYmKHA9IiQiKTt2b2lkIDA9PT1xJiYocT0hMCk7dmFyIHI9ZyhtKTtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIHY9cihNYXRoLmFicyh0KSk7IiIhPT12JiYodj1xP3Ardjp2K3AsMD50JiYodj0iLSIrdikpO3JldHVybiB2fX07ZC5maXhlZD1nO2QuZ2VuZXJhbD1mdW5jdGlvbihtKXt2b2lkIDA9PT1tJiYobT0zKTtsKG0pO3JldHVybiBmdW5jdGlvbihwKXtpZigibnVtYmVyIj09PXR5cGVvZiBwKXt2YXIgcT1NYXRoLnBvdygxMCxtKTtyZXR1cm4gU3RyaW5nKE1hdGgucm91bmQocCoKcSkvcSl9cmV0dXJuIFN0cmluZyhwKX19O2QuaWRlbnRpdHk9ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24obSl7cmV0dXJuIFN0cmluZyhtKX19O2QucGVyY2VudGFnZT1mdW5jdGlvbihtKXt2b2lkIDA9PT1tJiYobT0wKTt2YXIgcD1nKG0pO3JldHVybiBmdW5jdGlvbihxKXt2YXIgcj1xLnRvU3RyaW5nKCk7cj1NYXRoLnBvdygxMCxyLmxlbmd0aC0oci5pbmRleE9mKCIuIikrMSkpO3JldHVybiBwKHBhcnNlSW50KCgxMDAqcSpyKS50b1N0cmluZygpLDEwKS9yKSsiJSJ9fTtkLnNpU3VmZml4PWZ1bmN0aW9uKG0pe3ZvaWQgMD09PW0mJihtPTMpO2wobSk7cmV0dXJuIGZ1bmN0aW9uKHApe3JldHVybiBrLmZvcm1hdCgiLiIrbSsicyIpKHApfX07ZC5zaG9ydFNjYWxlPWZ1bmN0aW9uKCl7dmFyIG09MDt2b2lkIDA9PT1tJiYobT0zKTtsKG0pO3ZhciBwPWsuZm9ybWF0KCIuIittKyJlIikscT1rLmZvcm1hdCgiLiIrbSsiZiIpLHI9TWF0aC5wb3coMTAsMTgpLHQ9TWF0aC5wb3coMTAsCi1tKTtyZXR1cm4gZnVuY3Rpb24odil7dmFyIEE9TWF0aC5hYnModik7aWYoKEE8dHx8QT49cikmJjAhPT1BKXJldHVybiBwKHYpO2Zvcih2YXIgeT0tMTtBPj1NYXRoLnBvdygxRTMseSsyKSYmND55Oyl5Kys7QT0tMT09PXk/cSh2KTpxKHYvTWF0aC5wb3coMUUzLHkrMSkpKyJLTUJUUSJbeV07aWYoMDx2JiYiMTAwMCI9PT1BLnN1YnN0cigwLDQpfHwwPnYmJiItMTAwMCI9PT1BLnN1YnN0cigwLDUpKTQ+eT8oeSsrLEE9cSh2L01hdGgucG93KDFFMyx5KzEpKSsiS01CVFEiW3ldKTpBPXAodik7cmV0dXJuIEF9fTtkLm11bHRpVGltZT1mdW5jdGlvbigpe3ZhciBtPVt7c3BlY2lmaWVyOiIuJUwiLHByZWRpY2F0ZTpmdW5jdGlvbihwKXtyZXR1cm4gMCE9PXAuZ2V0TWlsbGlzZWNvbmRzKCl9fSx7c3BlY2lmaWVyOiI6JVMiLHByZWRpY2F0ZTpmdW5jdGlvbihwKXtyZXR1cm4gMCE9PXAuZ2V0U2Vjb25kcygpfX0se3NwZWNpZmllcjoiJUk6JU0iLHByZWRpY2F0ZTpmdW5jdGlvbihwKXtyZXR1cm4gMCE9PQpwLmdldE1pbnV0ZXMoKX19LHtzcGVjaWZpZXI6IiVJICVwIixwcmVkaWNhdGU6ZnVuY3Rpb24ocCl7cmV0dXJuIDAhPT1wLmdldEhvdXJzKCl9fSx7c3BlY2lmaWVyOiIlYSAlZCIscHJlZGljYXRlOmZ1bmN0aW9uKHApe3JldHVybiAwIT09cC5nZXREYXkoKSYmMSE9PXAuZ2V0RGF0ZSgpfX0se3NwZWNpZmllcjoiJWIgJWQiLHByZWRpY2F0ZTpmdW5jdGlvbihwKXtyZXR1cm4gMSE9PXAuZ2V0RGF0ZSgpfX0se3NwZWNpZmllcjoiJWIiLHByZWRpY2F0ZTpmdW5jdGlvbihwKXtyZXR1cm4gMCE9PXAuZ2V0TW9udGgoKX19XTtyZXR1cm4gZnVuY3Rpb24ocCl7dmFyIHE9bS5maWx0ZXIoZnVuY3Rpb24ocil7cmV0dXJuIHIucHJlZGljYXRlKHApfSk7cmV0dXJuIGsudGltZUZvcm1hdCgwPHEubGVuZ3RoP3FbMF0uc3BlY2lmaWVyOiIlWSIpKHApfX07ZC50aW1lPWZ1bmN0aW9uKG0pe3JldHVybiBrLnRpbWVGb3JtYXQobSl9fSxmdW5jdGlvbihjLGQsZil7dmFyIGc9ZigxKSxsPWYoMCk7CmM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBrKG0scCl7dGhpcy5fcm9vdD1nLnNlbGVjdChkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZyIpKTt0aGlzLl9jbGFzc05hbWU9cDt0aGlzLl9zdmdFbGVtZW50TmFtZT1tfWsucHJvdG90eXBlLmRyYXc9ZnVuY3Rpb24obSxwKXt2YXIgcT10aGlzO3RoaXMuX2NyZWF0ZUFuZERlc3Ryb3lET01FbGVtZW50cyhtKTt2YXIgcj0wO3AuZm9yRWFjaChmdW5jdGlvbih0KXtsLldpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cmV0dXJuIHEuX2RyYXdTdGVwKHQpfSxyKTtyKz10LmFuaW1hdG9yLnRvdGFsVGltZShtLmxlbmd0aCl9KX07ay5wcm90b3R5cGUuZ2V0VmlzdWFsUHJpbWl0aXZlcz1mdW5jdGlvbigpe251bGw9PXRoaXMuX2NhY2hlZFZpc3VhbFByaW1pdGl2ZXNOb2RlcyYmKHRoaXMuX2NhY2hlZFZpc3VhbFByaW1pdGl2ZXNOb2Rlcz10aGlzLl9zZWxlY3Rpb24ubm9kZXMoKSk7cmV0dXJuIHRoaXMuX2NhY2hlZFZpc3VhbFByaW1pdGl2ZXNOb2Rlc307CmsucHJvdG90eXBlLmdldFZpc3VhbFByaW1pdGl2ZUF0SW5kZXg9ZnVuY3Rpb24obSl7cmV0dXJuIHRoaXMuZ2V0VmlzdWFsUHJpbWl0aXZlcygpW21dfTtrLnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24oKXt0aGlzLl9yb290LnJlbW92ZSgpfTtrLnByb3RvdHlwZS5hdHRhY2hUbz1mdW5jdGlvbihtKXttLm5vZGUoKS5hcHBlbmRDaGlsZCh0aGlzLl9yb290Lm5vZGUoKSl9O2sucHJvdG90eXBlLmdldFJvb3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcm9vdH07ay5wcm90b3R5cGUuc2VsZWN0b3I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3ZnRWxlbWVudE5hbWV9O2sucHJvdG90eXBlLl9hcHBseURlZmF1bHRBdHRyaWJ1dGVzPWZ1bmN0aW9uKCl7fTtrLnByb3RvdHlwZS5fY3JlYXRlQW5kRGVzdHJveURPTUVsZW1lbnRzPWZ1bmN0aW9uKG0pe209bS5maWx0ZXIoZnVuY3Rpb24ocCl7cmV0dXJuIG51bGwhPXB9KTttPXRoaXMuX3Jvb3Quc2VsZWN0QWxsKHRoaXMuc2VsZWN0b3IoKSkuZGF0YShtKTsKdGhpcy5fc2VsZWN0aW9uPW0uZW50ZXIoKS5hcHBlbmQodGhpcy5fc3ZnRWxlbWVudE5hbWUpLm1lcmdlKG0pO20uZXhpdCgpLnJlbW92ZSgpO3RoaXMuX2NhY2hlZFZpc3VhbFByaW1pdGl2ZXNOb2Rlcz1udWxsO251bGwhPXRoaXMuX2NsYXNzTmFtZSYmdGhpcy5fc2VsZWN0aW9uLmNsYXNzZWQodGhpcy5fY2xhc3NOYW1lLCEwKTt0aGlzLl9hcHBseURlZmF1bHRBdHRyaWJ1dGVzKHRoaXMuX3NlbGVjdGlvbil9O2sucHJvdG90eXBlLl9kcmF3U3RlcD1mdW5jdGlvbihtKXt2YXIgcD10aGlzO1siZmlsbCIsInN0cm9rZSJdLmZvckVhY2goZnVuY3Rpb24ocSl7bnVsbCE9bS5hdHRyVG9BcHBsaWVkUHJvamVjdG9yW3FdJiZwLl9zZWxlY3Rpb24uYXR0cihxLG0uYXR0clRvQXBwbGllZFByb2plY3RvcltxXSl9KTttLmFuaW1hdG9yLmFuaW1hdGUodGhpcy5fc2VsZWN0aW9uLG0uYXR0clRvQXBwbGllZFByb2plY3Rvcik7bnVsbCE9dGhpcy5fY2xhc3NOYW1lJiZ0aGlzLl9zZWxlY3Rpb24uY2xhc3NlZCh0aGlzLl9jbGFzc05hbWUsCiEwKX07cmV0dXJuIGt9KCk7ZC5TVkdEcmF3ZXI9Y30sZnVuY3Rpb24oYyxkKXtkLm1ha2VFbnVtPWZ1bmN0aW9uKGYpe3JldHVybiBmLnJlZHVjZShmdW5jdGlvbihnLGwpe2dbbF09bDtyZXR1cm4gZ30se30pfX0sZnVuY3Rpb24oYyxkLGYpe3ZhciBnPXRoaXMmJnRoaXMuX19leHRlbmRzfHxmdW5jdGlvbihwLHEpe2Z1bmN0aW9uIHIoKXt0aGlzLmNvbnN0cnVjdG9yPXB9Zm9yKHZhciB0IGluIHEpcS5oYXNPd25Qcm9wZXJ0eSh0KSYmKHBbdF09cVt0XSk7cC5wcm90b3R5cGU9bnVsbD09PXE/T2JqZWN0LmNyZWF0ZShxKTooci5wcm90b3R5cGU9cS5wcm90b3R5cGUsbmV3IHIpfSxsPWYoMSksaz1mKDI2KSxtPWYoMCk7Yz1mdW5jdGlvbihwKXtmdW5jdGlvbiBxKCl7dmFyIHI9cC5jYWxsKHRoaXMpfHx0aGlzO3IuX3RpY2tHZW5lcmF0b3I9ZnVuY3Rpb24odCl7cmV0dXJuIHQuZGVmYXVsdFRpY2tzKCl9O3IuX3BhZFByb3BvcnRpb249LjA1O3IuX3NuYXBwaW5nRG9tYWluRW5hYmxlZD0KITA7ci5fcGFkZGluZ0V4Y2VwdGlvbnNQcm92aWRlcnM9bmV3IG0uU2V0O3JldHVybiByfWcocSxwKTtxLnByb3RvdHlwZS5hdXRvRG9tYWluPWZ1bmN0aW9uKCl7dGhpcy5fZG9tYWluTWF4PXRoaXMuX2RvbWFpbk1pbj1udWxsO3AucHJvdG90eXBlLmF1dG9Eb21haW4uY2FsbCh0aGlzKX07cS5wcm90b3R5cGUuX2F1dG9Eb21haW5JZkF1dG9tYXRpY01vZGU9ZnVuY3Rpb24oKXtpZihudWxsIT10aGlzLl9kb21haW5NaW4mJm51bGwhPXRoaXMuX2RvbWFpbk1heCl0aGlzLl9zZXREb21haW4oW3RoaXMuX2RvbWFpbk1pbix0aGlzLl9kb21haW5NYXhdKTtlbHNle3ZhciByPXRoaXMuX2dldEV4dGVudCgpO251bGwhPXRoaXMuX2RvbWFpbk1pbj8ocj1yWzFdLHRoaXMuX2RvbWFpbk1pbj49ciYmKHI9dGhpcy5fZXhwYW5kU2luZ2xlVmFsdWVEb21haW4oW3RoaXMuX2RvbWFpbk1pbix0aGlzLl9kb21haW5NaW5dKVsxXSksdGhpcy5fc2V0RG9tYWluKFt0aGlzLl9kb21haW5NaW4scl0pKToKbnVsbCE9dGhpcy5fZG9tYWluTWF4PyhyPXJbMF0sdGhpcy5fZG9tYWluTWF4PD1yJiYocj10aGlzLl9leHBhbmRTaW5nbGVWYWx1ZURvbWFpbihbdGhpcy5fZG9tYWluTWF4LHRoaXMuX2RvbWFpbk1heF0pWzBdKSx0aGlzLl9zZXREb21haW4oW3IsdGhpcy5fZG9tYWluTWF4XSkpOnAucHJvdG90eXBlLl9hdXRvRG9tYWluSWZBdXRvbWF0aWNNb2RlLmNhbGwodGhpcyl9fTtxLnByb3RvdHlwZS5fZ2V0VW5ib3VuZGVkRXh0ZW50PWZ1bmN0aW9uKHIpe3ZvaWQgMD09PXImJihyPSExKTtyPXRoaXMuX2dldEFsbEluY2x1ZGVkVmFsdWVzKHIpO3ZhciB0PXRoaXMuX2RlZmF1bHRFeHRlbnQoKTswIT09ci5sZW5ndGgmJihyPVttLk1hdGgubWluKHIsdFswXSksbS5NYXRoLm1heChyLHRbMV0pXSx0PXRoaXMuX3BhZERvbWFpbihyKSk7cmV0dXJuIHR9O3EucHJvdG90eXBlLl9nZXRFeHRlbnQ9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLl9nZXRVbmJvdW5kZWRFeHRlbnQoKTtudWxsIT10aGlzLl9kb21haW5NaW4mJgooclswXT10aGlzLl9kb21haW5NaW4pO251bGwhPXRoaXMuX2RvbWFpbk1heCYmKHJbMV09dGhpcy5fZG9tYWluTWF4KTtyZXR1cm4gcn07cS5wcm90b3R5cGUuYWRkUGFkZGluZ0V4Y2VwdGlvbnNQcm92aWRlcj1mdW5jdGlvbihyKXt0aGlzLl9wYWRkaW5nRXhjZXB0aW9uc1Byb3ZpZGVycy5hZGQocik7dGhpcy5fYXV0b0RvbWFpbklmQXV0b21hdGljTW9kZSgpfTtxLnByb3RvdHlwZS5yZW1vdmVQYWRkaW5nRXhjZXB0aW9uc1Byb3ZpZGVyPWZ1bmN0aW9uKHIpe3RoaXMuX3BhZGRpbmdFeGNlcHRpb25zUHJvdmlkZXJzLmRlbGV0ZShyKTt0aGlzLl9hdXRvRG9tYWluSWZBdXRvbWF0aWNNb2RlKCl9O3EucHJvdG90eXBlLnBhZFByb3BvcnRpb249ZnVuY3Rpb24ocil7aWYobnVsbD09cilyZXR1cm4gdGhpcy5fcGFkUHJvcG9ydGlvbjtpZigwPnIpdGhyb3cgRXJyb3IoInBhZFByb3BvcnRpb24gbXVzdCBiZSBub24tbmVnYXRpdmUiKTt0aGlzLl9wYWRQcm9wb3J0aW9uPXI7dGhpcy5fYXV0b0RvbWFpbklmQXV0b21hdGljTW9kZSgpOwpyZXR1cm4gdGhpc307cS5wcm90b3R5cGUuX3BhZERvbWFpbj1mdW5jdGlvbihyKXt2YXIgdD10aGlzO2lmKHJbMF0udmFsdWVPZigpPT09clsxXS52YWx1ZU9mKCkpcmV0dXJuIHRoaXMuX2V4cGFuZFNpbmdsZVZhbHVlRG9tYWluKHIpO2lmKDA9PT10aGlzLl9wYWRQcm9wb3J0aW9uKXJldHVybiByO3ZhciB2PXRoaXMuX3BhZFByb3BvcnRpb24vMixBPXJbMF0seT1yWzFdLHg9ITEsQz0hMTt0aGlzLl9wYWRkaW5nRXhjZXB0aW9uc1Byb3ZpZGVycy5mb3JFYWNoKGZ1bmN0aW9uKEQpe0QodCkuZm9yRWFjaChmdW5jdGlvbihCKXtCLnZhbHVlT2YoKT09PUEudmFsdWVPZigpJiYoeD0hMCk7Qi52YWx1ZU9mKCk9PT15LnZhbHVlT2YoKSYmKEM9ITApfSl9KTt2YXIgRj10aGlzLl9iYWNraW5nU2NhbGVEb21haW4oKTt0aGlzLl9iYWNraW5nU2NhbGVEb21haW4ocik7cj14P0E6dGhpcy5pbnZlcnQodGhpcy5zY2FsZShBKS0odGhpcy5zY2FsZSh5KS10aGlzLnNjYWxlKEEpKSp2KTt2PUM/Cnk6dGhpcy5pbnZlcnQodGhpcy5zY2FsZSh5KSsodGhpcy5zY2FsZSh5KS10aGlzLnNjYWxlKEEpKSp2KTt0aGlzLl9iYWNraW5nU2NhbGVEb21haW4oRik7cmV0dXJuIHRoaXMuX3NuYXBwaW5nRG9tYWluRW5hYmxlZD90aGlzLl9uaWNlRG9tYWluKFtyLHZdKTpbcix2XX07cS5wcm90b3R5cGUuc25hcHBpbmdEb21haW5FbmFibGVkPWZ1bmN0aW9uKHIpe251bGwhPXImJih0aGlzLl9zbmFwcGluZ0RvbWFpbkVuYWJsZWQ9cix0aGlzLl9hdXRvRG9tYWluSWZBdXRvbWF0aWNNb2RlKCkpfTtxLnByb3RvdHlwZS5fZXhwYW5kU2luZ2xlVmFsdWVEb21haW49ZnVuY3Rpb24ocil7cmV0dXJuIHJ9O3EucHJvdG90eXBlLmludmVydD1mdW5jdGlvbigpe3Rocm93IEVycm9yKCJTdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZSBpbnZlcnQiKTt9O3EucHJvdG90eXBlLmRvbWFpbj1mdW5jdGlvbihyKXtudWxsIT1yJiYodGhpcy5fZG9tYWluTWluPXJbMF0sdGhpcy5fZG9tYWluTWF4PXJbMV0pOwpyZXR1cm4gcC5wcm90b3R5cGUuZG9tYWluLmNhbGwodGhpcyxyKX07cS5wcm90b3R5cGUuZG9tYWluTWluPWZ1bmN0aW9uKHIpe2lmKG51bGw9PXIpcmV0dXJuIHRoaXMuZG9tYWluKClbMF07dGhpcy5fZG9tYWluTWluPXI7dGhpcy5fYXV0b0RvbWFpbklmQXV0b21hdGljTW9kZSgpO3JldHVybiB0aGlzfTtxLnByb3RvdHlwZS5kb21haW5NYXg9ZnVuY3Rpb24ocil7aWYobnVsbD09cilyZXR1cm4gdGhpcy5kb21haW4oKVsxXTt0aGlzLl9kb21haW5NYXg9cjt0aGlzLl9hdXRvRG9tYWluSWZBdXRvbWF0aWNNb2RlKCk7cmV0dXJuIHRoaXN9O3EucHJvdG90eXBlLmV4dGVudE9mVmFsdWVzPWZ1bmN0aW9uKHIpe3I9bC5leHRlbnQoci5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIG0uTWF0aC5pc1ZhbGlkTnVtYmVyKCt0KX0pKTtyZXR1cm4gbnVsbD09clswXXx8bnVsbD09clsxXT9bXTpyfTtxLnByb3RvdHlwZS56b29tPWZ1bmN0aW9uKHIsdCl7dmFyIHY9dGhpczt0aGlzLmRvbWFpbih0aGlzLnJhbmdlKCkubWFwKGZ1bmN0aW9uKEEpe3JldHVybiB2LmludmVydChrLnpvb21PdXQoQSwKcix0KSl9KSl9O3EucHJvdG90eXBlLnBhbj1mdW5jdGlvbihyKXt2YXIgdD10aGlzO3RoaXMuZG9tYWluKHRoaXMucmFuZ2UoKS5tYXAoZnVuY3Rpb24odil7cmV0dXJuIHQuaW52ZXJ0KHYrcil9KSl9O3EucHJvdG90eXBlLnNjYWxlVHJhbnNmb3JtYXRpb249ZnVuY3Rpb24oKXt0aHJvdyBFcnJvcigiU3ViY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUgc2NhbGVUcmFuc2Zvcm1hdGlvbiIpO307cS5wcm90b3R5cGUuaW52ZXJ0ZWRUcmFuc2Zvcm1hdGlvbj1mdW5jdGlvbigpe3Rocm93IEVycm9yKCJTdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZSBpbnZlcnRlZFRyYW5zZm9ybWF0aW9uIik7fTtxLnByb3RvdHlwZS5nZXRUcmFuc2Zvcm1hdGlvbkV4dGVudD1mdW5jdGlvbigpe3Rocm93IEVycm9yKCJTdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZSBnZXRUcmFuc2Zvcm1hdGlvbkV4dGVudCIpO307cS5wcm90b3R5cGUuZ2V0VHJhbnNmb3JtYXRpb25Eb21haW49ZnVuY3Rpb24oKXt0aHJvdyBFcnJvcigiU3ViY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUgZ2V0VHJhbnNmb3JtYXRpb25Eb21haW4iKTsKfTtxLnByb3RvdHlwZS5zZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbj1mdW5jdGlvbigpe3Rocm93IEVycm9yKCJTdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZSBzZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbiIpO307cS5wcm90b3R5cGUuX3NldERvbWFpbj1mdW5jdGlvbihyKXtmdW5jdGlvbiB0KHYpe3JldHVybiBtLk1hdGguaXNOYU4odil8fEluZmluaXR5PT09dnx8LUluZmluaXR5PT09dn10KHJbMF0pfHx0KHJbMV0pP20uV2luZG93Lndhcm4oIldhcm5pbmc6IFF1YW50aXRhdGl2ZVNjYWxlcyBjYW5ub3QgdGFrZSBOYU4gb3IgSW5maW5pdHkgYXMgYSBkb21haW4gdmFsdWUuIElnbm9yaW5nLiIpOnAucHJvdG90eXBlLl9zZXREb21haW4uY2FsbCh0aGlzLHIpfTtxLnByb3RvdHlwZS5kZWZhdWx0VGlja3M9ZnVuY3Rpb24oKXt0aHJvdyBFcnJvcigiU3ViY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUgX2dldERlZmF1bHRUaWNrcyIpO307cS5wcm90b3R5cGUudGlja3M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdGlja0dlbmVyYXRvcih0aGlzKX07CnEucHJvdG90eXBlLl9uaWNlRG9tYWluPWZ1bmN0aW9uKCl7dGhyb3cgRXJyb3IoIlN1YmNsYXNzZXMgc2hvdWxkIG92ZXJyaWRlIF9uaWNlRG9tYWluIik7fTtxLnByb3RvdHlwZS5fZGVmYXVsdEV4dGVudD1mdW5jdGlvbigpe3Rocm93IEVycm9yKCJTdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZSBfZGVmYXVsdEV4dGVudCIpO307cS5wcm90b3R5cGUudGlja0dlbmVyYXRvcj1mdW5jdGlvbigpe3ZhciByPVBsb3R0YWJsZS5TY2FsZXMuVGlja0dlbmVyYXRvcnMuaW50ZWdlclRpY2tHZW5lcmF0b3IoKTtudWxsIT1yJiYodGhpcy5fdGlja0dlbmVyYXRvcj1yKX07cmV0dXJuIHF9KGYoMTcpLlNjYWxlKTtjLl9ERUZBVUxUX05VTV9USUNLUz0xMDtkLlF1YW50aXRhdGl2ZVNjYWxlPWN9LGZ1bmN0aW9uKGMsZCxmKXt2YXIgZz1mKDEpO2QuY29lcmNlRXh0ZXJuYWxEMz1mdW5jdGlvbihsKXtpZihudWxsPT1sLmF0dHJzKXtpZihudWxsPT1sLm5vZGVzKXt2YXIgaz1bXTtsLmVhY2goZnVuY3Rpb24oKXtrLnB1c2godGhpcyl9KTsKcmV0dXJuIGcuc2VsZWN0QWxsKGspfXJldHVybiBnLnNlbGVjdEFsbChsLm5vZGVzKCkpfXJldHVybiBsfX0sZnVuY3Rpb24oYyxkLGYpe2Z1bmN0aW9uIGcobCl7Zm9yKHZhciBrIGluIGwpZC5oYXNPd25Qcm9wZXJ0eShrKXx8KGRba109bFtrXSl9ZyhmKDgzKSk7ZyhmKDg0KSk7ZyhmKDg1KSl9LGZ1bmN0aW9uKGMsZCxmKXtmdW5jdGlvbiBnKGwpe2Zvcih2YXIgayBpbiBsKWQuaGFzT3duUHJvcGVydHkoayl8fChkW2tdPWxba10pfWcoZig0NCkpO2coZig0NSkpO2coZig0NikpO2coZigxOCkpO2coZig2KSk7ZyhmKDMzKSk7ZyhmKDM0KSk7ZyhmKDQ3KSk7ZyhmKDkpKTtnKGYoNDgpKX0sZnVuY3Rpb24oYyxkKXtjPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZigpe3ZhciBnPXRoaXM7dGhpcy5fYW5jaG9yQ2FsbGJhY2s9ZnVuY3Rpb24obCl7cmV0dXJuIGcuX2FuY2hvcihsKX07dGhpcy5fZW5hYmxlZD0hMH1mLnByb3RvdHlwZS5hdHRhY2hUbz1mdW5jdGlvbihnKXt0aGlzLl9kaXNjb25uZWN0KCk7CnRoaXMuX2NvbXBvbmVudEF0dGFjaGVkVG89Zzt0aGlzLl9jb25uZWN0KCk7cmV0dXJuIHRoaXN9O2YucHJvdG90eXBlLmRldGFjaEZyb209ZnVuY3Rpb24oKXt0aGlzLmRldGFjaCgpfTtmLnByb3RvdHlwZS5kZXRhY2g9ZnVuY3Rpb24oKXt0aGlzLl9kaXNjb25uZWN0KCk7dGhpcy5fY29tcG9uZW50QXR0YWNoZWRUbz1udWxsO3JldHVybiB0aGlzfTtmLnByb3RvdHlwZS5lbmFibGVkPWZ1bmN0aW9uKGcpe2lmKG51bGw9PWcpcmV0dXJuIHRoaXMuX2VuYWJsZWQ7KHRoaXMuX2VuYWJsZWQ9Zyk/dGhpcy5fY29ubmVjdCgpOnRoaXMuX2Rpc2Nvbm5lY3QoKTtyZXR1cm4gdGhpc307Zi5wcm90b3R5cGUuX2FuY2hvcj1mdW5jdGlvbigpe3RoaXMuX2lzQW5jaG9yZWQ9ITB9O2YucHJvdG90eXBlLl91bmFuY2hvcj1mdW5jdGlvbigpe3RoaXMuX2lzQW5jaG9yZWQ9ITF9O2YucHJvdG90eXBlLl90cmFuc2xhdGVUb0NvbXBvbmVudFNwYWNlPWZ1bmN0aW9uKGcpe3ZhciBsPXRoaXMuX2NvbXBvbmVudEF0dGFjaGVkVG8ub3JpZ2luVG9Sb290KCk7CnJldHVybnt4OmcueC1sLngseTpnLnktbC55fX07Zi5wcm90b3R5cGUuX2lzSW5zaWRlQ29tcG9uZW50PWZ1bmN0aW9uKGcpe3JldHVybiAwPD1nLngmJjA8PWcueSYmZy54PD10aGlzLl9jb21wb25lbnRBdHRhY2hlZFRvLndpZHRoKCkmJmcueTw9dGhpcy5fY29tcG9uZW50QXR0YWNoZWRUby5oZWlnaHQoKX07Zi5wcm90b3R5cGUuX2Nvbm5lY3Q9ZnVuY3Rpb24oKXtpZih0aGlzLmVuYWJsZWQoKSYmbnVsbCE9dGhpcy5fY29tcG9uZW50QXR0YWNoZWRUbyYmIXRoaXMuX2lzQW5jaG9yZWQpdGhpcy5fY29tcG9uZW50QXR0YWNoZWRUby5vbkFuY2hvcih0aGlzLl9hbmNob3JDYWxsYmFjayl9O2YucHJvdG90eXBlLl9kaXNjb25uZWN0PWZ1bmN0aW9uKCl7dGhpcy5faXNBbmNob3JlZCYmdGhpcy5fdW5hbmNob3IoKTtudWxsIT10aGlzLl9jb21wb25lbnRBdHRhY2hlZFRvJiZ0aGlzLl9jb21wb25lbnRBdHRhY2hlZFRvLm9mZkFuY2hvcih0aGlzLl9hbmNob3JDYWxsYmFjayl9O3JldHVybiBmfSgpOwpkLkludGVyYWN0aW9uPWN9LGZ1bmN0aW9uKGMsZCxmKXt2YXIgZz10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8ZnVuY3Rpb24ocSxyKXtmdW5jdGlvbiB0KCl7dGhpcy5jb25zdHJ1Y3Rvcj1xfWZvcih2YXIgdiBpbiByKXIuaGFzT3duUHJvcGVydHkodikmJihxW3ZdPXJbdl0pO3EucHJvdG90eXBlPW51bGw9PT1yP09iamVjdC5jcmVhdGUocik6KHQucHJvdG90eXBlPXIucHJvdG90eXBlLG5ldyB0KX0sbD1mKDMpLGs9ZigwKSxtPWYoNTIpLHA9ZigyKTtjPWZ1bmN0aW9uKHEpe2Z1bmN0aW9uIHIoKXt2YXIgdD1xLmNhbGwodGhpcyl8fHRoaXM7dC5fYXV0b0FkanVzdFhTY2FsZURvbWFpbj0hMTt0Ll9hdXRvQWRqdXN0WVNjYWxlRG9tYWluPSExO3QuX2RlZmVycmVkUmVuZGVyaW5nPSExO3QuX2FwcGx5RGVmZXJyZWRSZW5kZXJpbmdUcmFuc2Zvcm09ZnVuY3Rpb24odixBLHkseCl7dC5faXNBbmNob3JlZCYmKG51bGwhPXQuX3JlbmRlckFyZWEmJnQuX3JlbmRlckFyZWEuYXR0cigidHJhbnNmb3JtIiwKInRyYW5zbGF0ZSgiK3YrIiwgIitBKyIpIHNjYWxlKCIreSsiLCAiK3grIikiKSxudWxsIT10Ll9jYW52YXMmJnQuX2NhbnZhcy5zdHlsZSgidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrdisicHgsICIrQSsicHgpIHNjYWxlKCIreSsiLCAiK3grIikiKSl9O3QuYWRkQ2xhc3MoInh5LXBsb3QiKTt0Ll9hZGp1c3RZRG9tYWluT25DaGFuZ2VGcm9tWENhbGxiYWNrPWZ1bmN0aW9uKCl7cmV0dXJuIHQuX2FkanVzdFlEb21haW5PbkNoYW5nZUZyb21YKCl9O3QuX2FkanVzdFhEb21haW5PbkNoYW5nZUZyb21ZQ2FsbGJhY2s9ZnVuY3Rpb24oKXtyZXR1cm4gdC5fYWRqdXN0WERvbWFpbk9uQ2hhbmdlRnJvbVkoKX07dC5fcmVuZGVyQ2FsbGJhY2s9ZnVuY3Rpb24oKXtpZih0LmRlZmVycmVkUmVuZGVyaW5nKCkpe3ZhciB2PXQueCgpJiZ0LngoKS5zY2FsZSxBPXQueSgpJiZ0LnkoKS5zY2FsZTt0Ll9kZWZlcnJlZFJlbmRlcmVyLnVwZGF0ZURvbWFpbnModixBKX1lbHNlIHQucmVuZGVyKCl9Owp0Ll9kZWZlcnJlZFJlbmRlcmVyPW5ldyBtLkRlZmVycmVkUmVuZGVyZXIoZnVuY3Rpb24oKXtyZXR1cm4gdC5yZW5kZXIoKX0sdC5fYXBwbHlEZWZlcnJlZFJlbmRlcmluZ1RyYW5zZm9ybSk7cmV0dXJuIHR9ZyhyLHEpO3IucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3RoaXMuZGVmZXJyZWRSZW5kZXJpbmcoKSYmdGhpcy5fZGVmZXJyZWRSZW5kZXJlci5yZXNldFRyYW5zZm9ybXMoKTtyZXR1cm4gcS5wcm90b3R5cGUucmVuZGVyLmNhbGwodGhpcyl9O3IucHJvdG90eXBlLmRlZmVycmVkUmVuZGVyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RlZmVycmVkUmVuZGVyaW5nfTtyLnByb3RvdHlwZS54PWZ1bmN0aW9uKHQsdixBKXtpZihudWxsPT10KXJldHVybiB0aGlzLl9wcm9wZXJ0eUJpbmRpbmdzLmdldChyLl9YX0tFWSk7dGhpcy5fYmluZFByb3BlcnR5KHIuX1hfS0VZLHQsdixBKTt0PXRoaXMud2lkdGgoKTtudWxsIT12JiZudWxsIT10JiZ2LnJhbmdlKFswLHRdKTsKdGhpcy5fYXV0b0FkanVzdFlTY2FsZURvbWFpbiYmdGhpcy5fdXBkYXRlWUV4dGVudHNBbmRBdXRvZG9tYWluKCk7dGhpcy5yZW5kZXIoKTtyZXR1cm4gdGhpc307ci5wcm90b3R5cGUueT1mdW5jdGlvbih0LHYsQSl7aWYobnVsbD09dClyZXR1cm4gdGhpcy5fcHJvcGVydHlCaW5kaW5ncy5nZXQoci5fWV9LRVkpO3RoaXMuX2JpbmRQcm9wZXJ0eShyLl9ZX0tFWSx0LHYsQSk7dD10aGlzLmhlaWdodCgpO251bGwhPXYmJm51bGwhPXQmJih2IGluc3RhbmNlb2YgbC5DYXRlZ29yeT92LnJhbmdlKFswLHRdKTp2LnJhbmdlKFt0LDBdKSk7dGhpcy5fYXV0b0FkanVzdFhTY2FsZURvbWFpbiYmdGhpcy5fdXBkYXRlWEV4dGVudHNBbmRBdXRvZG9tYWluKCk7dGhpcy5yZW5kZXIoKTtyZXR1cm4gdGhpc307ci5wcm90b3R5cGUuX2ZpbHRlckZvclByb3BlcnR5PWZ1bmN0aW9uKHQpe3JldHVybiJ4Ij09PXQmJnRoaXMuX2F1dG9BZGp1c3RYU2NhbGVEb21haW4/dGhpcy5fbWFrZUZpbHRlckJ5UHJvcGVydHkoInkiKToKInkiPT09dCYmdGhpcy5fYXV0b0FkanVzdFlTY2FsZURvbWFpbj90aGlzLl9tYWtlRmlsdGVyQnlQcm9wZXJ0eSgieCIpOm51bGx9O3IucHJvdG90eXBlLl9tYWtlRmlsdGVyQnlQcm9wZXJ0eT1mdW5jdGlvbih0KXt0PXRoaXMuX3Byb3BlcnR5QmluZGluZ3MuZ2V0KHQpO2lmKG51bGwhPXQpe3ZhciB2PXQuYWNjZXNzb3IsQT10LnNjYWxlO2lmKG51bGwhPUEpcmV0dXJuIGZ1bmN0aW9uKHkseCxDKXt2YXIgRj1BLnJhbmdlKCk7cmV0dXJuIGsuTWF0aC5pblJhbmdlKEEuc2NhbGUodih5LHgsQykpLEZbMF0sRlsxXSl9fXJldHVybiBudWxsfTtyLnByb3RvdHlwZS5fdW5pbnN0YWxsU2NhbGVGb3JLZXk9ZnVuY3Rpb24odCx2KXtxLnByb3RvdHlwZS5fdW5pbnN0YWxsU2NhbGVGb3JLZXkuY2FsbCh0aGlzLHQsdik7dC5vZmZVcGRhdGUodj09PXIuX1hfS0VZP3RoaXMuX2FkanVzdFlEb21haW5PbkNoYW5nZUZyb21YQ2FsbGJhY2s6dGhpcy5fYWRqdXN0WERvbWFpbk9uQ2hhbmdlRnJvbVlDYWxsYmFjayl9OwpyLnByb3RvdHlwZS5faW5zdGFsbFNjYWxlRm9yS2V5PWZ1bmN0aW9uKHQsdil7cS5wcm90b3R5cGUuX2luc3RhbGxTY2FsZUZvcktleS5jYWxsKHRoaXMsdCx2KTt0Lm9uVXBkYXRlKHY9PT1yLl9YX0tFWT90aGlzLl9hZGp1c3RZRG9tYWluT25DaGFuZ2VGcm9tWENhbGxiYWNrOnRoaXMuX2FkanVzdFhEb21haW5PbkNoYW5nZUZyb21ZQ2FsbGJhY2spfTtyLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7cS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO3RoaXMueCgpLnNjYWxlJiZ0aGlzLngoKS5zY2FsZS5vZmZVcGRhdGUodGhpcy5fYWRqdXN0WURvbWFpbk9uQ2hhbmdlRnJvbVhDYWxsYmFjayk7dGhpcy55KCkuc2NhbGUmJnRoaXMueSgpLnNjYWxlLm9mZlVwZGF0ZSh0aGlzLl9hZGp1c3RYRG9tYWluT25DaGFuZ2VGcm9tWUNhbGxiYWNrKTtyZXR1cm4gdGhpc307ci5wcm90b3R5cGUuYXV0b3JhbmdlTW9kZT1mdW5jdGlvbih0KXtpZihudWxsPT10KXJldHVybiB0aGlzLl9hdXRvQWRqdXN0WFNjYWxlRG9tYWluPwoieCI6dGhpcy5fYXV0b0FkanVzdFlTY2FsZURvbWFpbj8ieSI6Im5vbmUiO3N3aXRjaCh0KXtjYXNlICJ4Ijp0aGlzLl9hdXRvQWRqdXN0WFNjYWxlRG9tYWluPSEwO3RoaXMuX2F1dG9BZGp1c3RZU2NhbGVEb21haW49ITE7dGhpcy5fYWRqdXN0WERvbWFpbk9uQ2hhbmdlRnJvbVkoKTticmVhaztjYXNlICJ5Ijp0aGlzLl9hdXRvQWRqdXN0WFNjYWxlRG9tYWluPSExO3RoaXMuX2F1dG9BZGp1c3RZU2NhbGVEb21haW49ITA7dGhpcy5fYWRqdXN0WURvbWFpbk9uQ2hhbmdlRnJvbVgoKTticmVhaztjYXNlICJub25lIjp0aGlzLl9hdXRvQWRqdXN0WVNjYWxlRG9tYWluPXRoaXMuX2F1dG9BZGp1c3RYU2NhbGVEb21haW49ITE7YnJlYWs7ZGVmYXVsdDp0aHJvdyBFcnJvcigiSW52YWxpZCBzY2FsZSBuYW1lICciK3QrIicsIG11c3QgYmUgJ3gnLCAneScgb3IgJ25vbmUnIik7fXJldHVybiB0aGlzfTtyLnByb3RvdHlwZS5jb21wdXRlTGF5b3V0PWZ1bmN0aW9uKHQsdixBKXtxLnByb3RvdHlwZS5jb21wdXRlTGF5b3V0LmNhbGwodGhpcywKdCx2LEEpO3Q9KHQ9dGhpcy54KCkpJiZ0LnNjYWxlO251bGwhPXQmJnQucmFuZ2UoWzAsdGhpcy53aWR0aCgpXSk7dD0odD10aGlzLnkoKSkmJnQuc2NhbGU7bnVsbCE9dCYmKHQgaW5zdGFuY2VvZiBsLkNhdGVnb3J5P3QucmFuZ2UoWzAsdGhpcy5oZWlnaHQoKV0pOnQucmFuZ2UoW3RoaXMuaGVpZ2h0KCksMF0pKTtyZXR1cm4gdGhpc307ci5wcm90b3R5cGUuX3VwZGF0ZVhFeHRlbnRzQW5kQXV0b2RvbWFpbj1mdW5jdGlvbigpe3ZhciB0PXRoaXMueCgpLnNjYWxlO251bGwhPXQmJnQuYXV0b0RvbWFpbigpfTtyLnByb3RvdHlwZS5fdXBkYXRlWUV4dGVudHNBbmRBdXRvZG9tYWluPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy55KCkuc2NhbGU7bnVsbCE9dCYmdC5hdXRvRG9tYWluKCl9O3IucHJvdG90eXBlLnNob3dBbGxEYXRhPWZ1bmN0aW9uKCl7dGhpcy5fdXBkYXRlWEV4dGVudHNBbmRBdXRvZG9tYWluKCk7dGhpcy5fdXBkYXRlWUV4dGVudHNBbmRBdXRvZG9tYWluKCk7cmV0dXJuIHRoaXN9OwpyLnByb3RvdHlwZS5fYWRqdXN0WURvbWFpbk9uQ2hhbmdlRnJvbVg9ZnVuY3Rpb24oKXt0aGlzLl9wcm9qZWN0b3JzUmVhZHkoKSYmdGhpcy5fYXV0b0FkanVzdFlTY2FsZURvbWFpbiYmdGhpcy5fdXBkYXRlWUV4dGVudHNBbmRBdXRvZG9tYWluKCl9O3IucHJvdG90eXBlLl9hZGp1c3RYRG9tYWluT25DaGFuZ2VGcm9tWT1mdW5jdGlvbigpe3RoaXMuX3Byb2plY3RvcnNSZWFkeSgpJiZ0aGlzLl9hdXRvQWRqdXN0WFNjYWxlRG9tYWluJiZ0aGlzLl91cGRhdGVYRXh0ZW50c0FuZEF1dG9kb21haW4oKX07ci5wcm90b3R5cGUuX3Byb2plY3RvcnNSZWFkeT1mdW5jdGlvbigpe3ZhciB0PXRoaXMueCgpLHY9dGhpcy55KCk7cmV0dXJuIG51bGwhPXQmJm51bGwhPXQuYWNjZXNzb3ImJm51bGwhPXYmJm51bGwhPXYuYWNjZXNzb3J9O3IucHJvdG90eXBlLl9waXhlbFBvaW50PWZ1bmN0aW9uKHQsdixBKXt2YXIgeT1wLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueCgpKSx4PXAuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy55KCkpOwpyZXR1cm57eDp5KHQsdixBKSx5OngodCx2LEEpfX07ci5wcm90b3R5cGUuX2dldERhdGFUb0RyYXc9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHkseCxDKXt2YXIgRj1wLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHYueCgpKSh5LHgsQyk7eT1wLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHYueSgpKSh5LHgsQyk7cmV0dXJuIGsuTWF0aC5pc1ZhbGlkTnVtYmVyKEYpJiZrLk1hdGguaXNWYWxpZE51bWJlcih5KX12YXIgdj10aGlzLEE9cS5wcm90b3R5cGUuX2dldERhdGFUb0RyYXcuY2FsbCh0aGlzKTt0aGlzLmRhdGFzZXRzKCkuZm9yRWFjaChmdW5jdGlvbih5KXtBLnNldCh5LEEuZ2V0KHkpLmZpbHRlcihmdW5jdGlvbih4LEMpe3JldHVybiB0KHgsQyx5KX0pKX0pO3JldHVybiBBfTtyZXR1cm4gcn0ocC5QbG90KTtjLl9YX0tFWT0ieCI7Yy5fWV9LRVk9InkiO2QuWFlQbG90PWN9LGZ1bmN0aW9uKGMsZCxmKXt2YXIgZz1mKDApO2M9ZnVuY3Rpb24oKXtmdW5jdGlvbiBsKCl7dGhpcy5fYXV0b0RvbWFpbkF1dG9tYXRpY2FsbHk9CiEwO3RoaXMuX2RvbWFpbk1vZGlmaWNhdGlvbkluUHJvZ3Jlc3M9ITE7dGhpcy5fdXBkYXRlSWQ9MDt0aGlzLl9jYWxsYmFja3M9bmV3IGcuQ2FsbGJhY2tTZXQ7dGhpcy5faW5jbHVkZWRWYWx1ZXNQcm92aWRlcnM9bmV3IGcuU2V0fWwucHJvdG90eXBlLmV4dGVudE9mVmFsdWVzPWZ1bmN0aW9uKCl7cmV0dXJuW119O2wucHJvdG90eXBlLl9nZXRBbGxJbmNsdWRlZFZhbHVlcz1mdW5jdGlvbihrKXt2YXIgbT10aGlzO3ZvaWQgMD09PWsmJihrPSExKTt2YXIgcD1bXTt0aGlzLl9pbmNsdWRlZFZhbHVlc1Byb3ZpZGVycy5mb3JFYWNoKGZ1bmN0aW9uKHEpe3E9cShtLGspO3A9cC5jb25jYXQocSl9KTtyZXR1cm4gcH07bC5wcm90b3R5cGUuX2dldEV4dGVudD1mdW5jdGlvbigpe3JldHVybltdfTtsLnByb3RvdHlwZS5vblVwZGF0ZT1mdW5jdGlvbihrKXt0aGlzLl9jYWxsYmFja3MuYWRkKGspO3JldHVybiB0aGlzfTtsLnByb3RvdHlwZS5vZmZVcGRhdGU9ZnVuY3Rpb24oayl7dGhpcy5fY2FsbGJhY2tzLmRlbGV0ZShrKTsKcmV0dXJuIHRoaXN9O2wucHJvdG90eXBlLl9kaXNwYXRjaFVwZGF0ZT1mdW5jdGlvbigpe3RoaXMuX3VwZGF0ZUlkKys7dGhpcy5fY2FsbGJhY2tzLmNhbGxDYWxsYmFja3ModGhpcyl9O2wucHJvdG90eXBlLmF1dG9Eb21haW49ZnVuY3Rpb24oKXt0aGlzLl9hdXRvRG9tYWluQXV0b21hdGljYWxseT0hMDt0aGlzLl9zZXREb21haW4odGhpcy5fZ2V0RXh0ZW50KCkpfTtsLnByb3RvdHlwZS5fYXV0b0RvbWFpbklmQXV0b21hdGljTW9kZT1mdW5jdGlvbigpe3RoaXMuX2F1dG9Eb21haW5BdXRvbWF0aWNhbGx5JiZ0aGlzLmF1dG9Eb21haW4oKX07bC5wcm90b3R5cGUuc2NhbGU9ZnVuY3Rpb24oKXt0aHJvdyBFcnJvcigiU3ViY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUgc2NhbGUiKTt9O2wucHJvdG90eXBlLnRpY2tzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tYWluKCl9O2wucHJvdG90eXBlLmRvbWFpbj1mdW5jdGlvbihrKXtpZihudWxsPT1rKXJldHVybiB0aGlzLl9nZXREb21haW4oKTsKdGhpcy5fYXV0b0RvbWFpbkF1dG9tYXRpY2FsbHk9ITE7dGhpcy5fc2V0RG9tYWluKGspO3JldHVybiB0aGlzfTtsLnByb3RvdHlwZS5fZ2V0RG9tYWluPWZ1bmN0aW9uKCl7dGhyb3cgRXJyb3IoIlN1YmNsYXNzZXMgc2hvdWxkIG92ZXJyaWRlIF9nZXREb21haW4iKTt9O2wucHJvdG90eXBlLl9zZXREb21haW49ZnVuY3Rpb24oayl7dGhpcy5fZG9tYWluTW9kaWZpY2F0aW9uSW5Qcm9ncmVzc3x8KHRoaXMuX2RvbWFpbk1vZGlmaWNhdGlvbkluUHJvZ3Jlc3M9ITAsdGhpcy5fYmFja2luZ1NjYWxlRG9tYWluKGspLHRoaXMuX2Rpc3BhdGNoVXBkYXRlKCksdGhpcy5fZG9tYWluTW9kaWZpY2F0aW9uSW5Qcm9ncmVzcz0hMSl9O2wucHJvdG90eXBlLl9iYWNraW5nU2NhbGVEb21haW49ZnVuY3Rpb24oKXt0aHJvdyBFcnJvcigiU3ViY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUgX2JhY2tpbmdEb21haW4iKTt9O2wucHJvdG90eXBlLnJhbmdlPWZ1bmN0aW9uKGspe2lmKG51bGw9PWspcmV0dXJuIHRoaXMuX2dldFJhbmdlKCk7CnRoaXMuX3NldFJhbmdlKGspO3JldHVybiB0aGlzfTtsLnByb3RvdHlwZS5fZ2V0UmFuZ2U9ZnVuY3Rpb24oKXt0aHJvdyBFcnJvcigiU3ViY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUgX2dldFJhbmdlIik7fTtsLnByb3RvdHlwZS5fc2V0UmFuZ2U9ZnVuY3Rpb24oKXt0aHJvdyBFcnJvcigiU3ViY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUgX3NldFJhbmdlIik7fTtsLnByb3RvdHlwZS5hZGRJbmNsdWRlZFZhbHVlc1Byb3ZpZGVyPWZ1bmN0aW9uKGspe3RoaXMuX2luY2x1ZGVkVmFsdWVzUHJvdmlkZXJzLmFkZChrKTt0aGlzLl9hdXRvRG9tYWluSWZBdXRvbWF0aWNNb2RlKCk7cmV0dXJuIHRoaXN9O2wucHJvdG90eXBlLnJlbW92ZUluY2x1ZGVkVmFsdWVzUHJvdmlkZXI9ZnVuY3Rpb24oayl7dGhpcy5faW5jbHVkZWRWYWx1ZXNQcm92aWRlcnMuZGVsZXRlKGspO3RoaXMuX2F1dG9Eb21haW5JZkF1dG9tYXRpY01vZGUoKX07bC5wcm90b3R5cGUudXBkYXRlSWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdXBkYXRlSWR9OwpyZXR1cm4gbH0oKTtkLlNjYWxlPWN9LGZ1bmN0aW9uKGMsZCxmKXtmdW5jdGlvbiBnKHIsdCx2LEEpe2Zvcih2YXIgeT17fSx4PTA7eDx0Lmxlbmd0aDt4Kyspe3ZhciBDPXRbeF07ci5oYXNPd25Qcm9wZXJ0eShDKSYmKHlbQ109cltDXSh2LEEpKX1yZXR1cm4geX1mdW5jdGlvbiBsKHIpe3JldHVybihudWxsIT1yWyJzdHJva2Utb3BhY2l0eSJdP3BhcnNlRmxvYXQoclsic3Ryb2tlLW9wYWNpdHkiXSk6MSkqKG51bGwhPXIub3BhY2l0eT9wYXJzZUZsb2F0KHIub3BhY2l0eSk6MSl9ZnVuY3Rpb24gayhyKXtyZXR1cm4obnVsbCE9clsiZmlsbC1vcGFjaXR5Il0/cGFyc2VGbG9hdChyWyJmaWxsLW9wYWNpdHkiXSk6MSkqKG51bGwhPXIub3BhY2l0eT9wYXJzZUZsb2F0KHIub3BhY2l0eSk6MSl9ZnVuY3Rpb24gbShyKXtyZXR1cm4gbnVsbCE9clsic3Ryb2tlLXdpZHRoIl0/cGFyc2VGbG9hdChyWyJzdHJva2Utd2lkdGgiXSk6MX1mdW5jdGlvbiBwKHIsdCl7aWYodC5zdHJva2Upe3IubGluZVdpZHRoPQptKHQpO3ZhciB2PXEuY29sb3IodC5zdHJva2UpO3Yub3BhY2l0eSo9bCh0KTtyLnN0cm9rZVN0eWxlPXYudG9TdHJpbmcoKTtyLnN0cm9rZSgpfXQuZmlsbCYmKHY9cS5jb2xvcih0LmZpbGwpLHYub3BhY2l0eSo9ayh0KSxyLmZpbGxTdHlsZT12LnRvU3RyaW5nKCksci5maWxsKCkpfXZhciBxPWYoMSk7Yz1mdW5jdGlvbigpe2Z1bmN0aW9uIHIodCx2KXt0aGlzLl9jb250ZXh0PXQ7dGhpcy5fZHJhd1N0ZXA9dn1yLnByb3RvdHlwZS5nZXREcmF3U3RlcD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kcmF3U3RlcH07ci5wcm90b3R5cGUuZHJhdz1mdW5jdGlvbih0LHYpe3Y9dlt2Lmxlbmd0aC0xXS5hdHRyVG9BcHBsaWVkUHJvamVjdG9yO3RoaXMuX2NvbnRleHQuc2F2ZSgpO3RoaXMuX2RyYXdTdGVwKHRoaXMuX2NvbnRleHQsdCx2KTt0aGlzLl9jb250ZXh0LnJlc3RvcmUoKX07ci5wcm90b3R5cGUuZ2V0VmlzdWFsUHJpbWl0aXZlcz1mdW5jdGlvbigpe3JldHVybltdfTtyLnByb3RvdHlwZS5nZXRWaXN1YWxQcmltaXRpdmVBdEluZGV4PQpmdW5jdGlvbigpe3JldHVybiBudWxsfTtyLnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24oKXt9O3JldHVybiByfSgpO2QuQ2FudmFzRHJhd2VyPWM7ZC5Db250ZXh0U3R5bGVBdHRycz0iZmlsbC1vcGFjaXR5IGZpbGwgb3BhY2l0eSBzdHJva2Utb3BhY2l0eSBzdHJva2Utd2lkdGggc3Ryb2tlIi5zcGxpdCgiICIpO2QucmVzb2x2ZUF0dHJpYnV0ZXNTdWJzZXRXaXRoU3R5bGVzPWZ1bmN0aW9uKHIsdCx2LEEpe3JldHVybiBnKHIsZC5Db250ZXh0U3R5bGVBdHRycy5jb25jYXQodCksdixBKX07ZC5yZXNvbHZlQXR0cmlidXRlcz1nO2QuZ2V0U3Ryb2tlV2lkdGg9bTtkLnJlbmRlckFyZWE9ZnVuY3Rpb24ocix0LHYsQSl7ci5zYXZlKCk7ci5iZWdpblBhdGgoKTt0LmNvbnRleHQocik7dCh2KTtyLmxpbmVKb2luPSJyb3VuZCI7cChyLEEpO3IucmVzdG9yZSgpfTtkLnJlbmRlckxpbmU9ZnVuY3Rpb24ocix0LHYsQSl7ci5zYXZlKCk7ci5iZWdpblBhdGgoKTt0LmNvbnRleHQocik7dCh2KTsKci5saW5lSm9pbj0icm91bmQiO3AocixBKTtyLnJlc3RvcmUoKX07ZC5yZW5kZXJQYXRoV2l0aFN0eWxlPXB9LGZ1bmN0aW9uKGMsZCxmKXtmdW5jdGlvbiBnKGwpe2Zvcih2YXIgayBpbiBsKWQuaGFzT3duUHJvcGVydHkoayl8fChkW2tdPWxba10pfWcoZig1MCkpO2coZigyNykpO2coZig1MSkpO2coZig5MykpO2coZig1MykpO2coZig5NCkpO2coZig5NSkpO2coZig5NikpO2coZig5NykpO2coZig5OCkpO2coZig5OSkpO2coZigxMDApKX0sZnVuY3Rpb24oYyxkLGYpe2Z1bmN0aW9uIGcobCl7Zm9yKHZhciBrIGluIGwpZC5oYXNPd25Qcm9wZXJ0eShrKXx8KGRba109bFtrXSl9ZyhmKDkyKSk7ZyhmKDkxKSk7Yz1mKDQ5KTtkLnNpZ249Yy5zaWdufSxmdW5jdGlvbihjLGQsZil7ZnVuY3Rpb24gZyhsKXtmb3IodmFyIGsgaW4gbClkLmhhc093blByb3BlcnR5KGspfHwoZFtrXT1sW2tdKX1nKGYoMTM0KSk7ZyhmKDEzNSkpO2coZigxMzYpKTtnKGYoMTM3KSl9LGZ1bmN0aW9uKGMsCmQsZil7dmFyIGc9dGhpcyYmdGhpcy5fX2V4dGVuZHN8fGZ1bmN0aW9uKHEscil7ZnVuY3Rpb24gdCgpe3RoaXMuY29uc3RydWN0b3I9cX1mb3IodmFyIHYgaW4gcilyLmhhc093blByb3BlcnR5KHYpJiYocVt2XT1yW3ZdKTtxLnByb3RvdHlwZT1udWxsPT09cj9PYmplY3QuY3JlYXRlKHIpOih0LnByb3RvdHlwZT1yLnByb3RvdHlwZSxuZXcgdCl9LGw9ZigxKSxrPWYoNSk7Yz1mKDQpO3ZhciBtPWYoOCkscD1mKDApO2Y9ZigxMCk7ZC5BeGlzT3JpZW50YXRpb249Zi5tYWtlRW51bShbImJvdHRvbSIsImxlZnQiLCJyaWdodCIsInRvcCJdKTtmPWZ1bmN0aW9uKHEpe2Z1bmN0aW9uIHIodCx2KXt2YXIgQT1xLmNhbGwodGhpcyl8fHRoaXM7QS5fZW5kVGlja0xlbmd0aD01O0EuX2lubmVyVGlja0xlbmd0aD01O0EuX3RpY2tMYWJlbFBhZGRpbmc9MTA7QS5fbWFyZ2luPTE1O0EuX3Nob3dFbmRUaWNrTGFiZWxzPSExO0EuX2Fubm90YXRpb25zRW5hYmxlZD0hMTtBLl9hbm5vdGF0aW9uVGllckNvdW50PQoxO2lmKG51bGw9PXR8fG51bGw9PXYpdGhyb3cgRXJyb3IoIkF4aXMgcmVxdWlyZXMgYSBzY2FsZSBhbmQgb3JpZW50YXRpb24iKTtBLl9zY2FsZT10O0Eub3JpZW50YXRpb24odik7QS5fc2V0RGVmYXVsdEFsaWdubWVudCgpO0EuYWRkQ2xhc3MoImF4aXMiKTtBLmlzSG9yaXpvbnRhbCgpP0EuYWRkQ2xhc3MoIngtYXhpcyIpOkEuYWRkQ2xhc3MoInktYXhpcyIpO0EuZm9ybWF0dGVyKG0uaWRlbnRpdHkoKSk7QS5fcmVzY2FsZUNhbGxiYWNrPWZ1bmN0aW9uKCl7cmV0dXJuIEEuX3Jlc2NhbGUoKX07QS5fc2NhbGUub25VcGRhdGUoQS5fcmVzY2FsZUNhbGxiYWNrKTtBLl9hbm5vdGF0ZWRUaWNrcz1bXTtBLl9hbm5vdGF0aW9uRm9ybWF0dGVyPW0uaWRlbnRpdHkoKTtyZXR1cm4gQX1nKHIscSk7ci5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3EucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTt0aGlzLl9zY2FsZS5vZmZVcGRhdGUodGhpcy5fcmVzY2FsZUNhbGxiYWNrKX07CnIucHJvdG90eXBlLnRpY2tMYWJlbERhdGFPbkVsZW1lbnQ9ZnVuY3Rpb24odCl7aWYobnVsbCE9dCl7Zm9yKHZhciB2O251bGwhPXQmJnQuY2xhc3NMaXN0JiZ2b2lkIDA9PT12Oyl0LmNsYXNzTGlzdC5jb250YWlucyhyLlRJQ0tfTEFCRUxfQ0xBU1MpP3Y9dDp0PXQucGFyZW50Tm9kZTtyZXR1cm4gdm9pZCAwPT09dD92b2lkIDA6bC5zZWxlY3QodCkuZGF0dW0oKX19O3IucHJvdG90eXBlLl9jb21wdXRlV2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWF4TGFiZWxUaWNrTGVuZ3RoKCl9O3IucHJvdG90eXBlLl9jb21wdXRlSGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21heExhYmVsVGlja0xlbmd0aCgpfTtyLnByb3RvdHlwZS5yZXF1ZXN0ZWRTcGFjZT1mdW5jdGlvbigpe3ZhciB0PTAsdj0wO2lmKHRoaXMuaXNIb3Jpem9udGFsKCkpe2lmKHY9dGhpcy5fY29tcHV0ZUhlaWdodCgpK3RoaXMuX21hcmdpbix0aGlzLmFubm90YXRpb25zRW5hYmxlZCgpKXt2YXIgQT0KdGhpcy5fYW5ub3RhdGlvbk1lYXN1cmVyLm1lYXN1cmUoKS5oZWlnaHQrMipyLl9BTk5PVEFUSU9OX0xBQkVMX1BBRERJTkc7dis9QSp0aGlzLmFubm90YXRpb25UaWVyQ291bnQoKX19ZWxzZSB0PXRoaXMuX2NvbXB1dGVXaWR0aCgpK3RoaXMuX21hcmdpbix0aGlzLmFubm90YXRpb25zRW5hYmxlZCgpJiYoQT10aGlzLl9hbm5vdGF0aW9uTWVhc3VyZXIubWVhc3VyZSgpLmhlaWdodCsyKnIuX0FOTk9UQVRJT05fTEFCRUxfUEFERElORyx0Kz1BKnRoaXMuYW5ub3RhdGlvblRpZXJDb3VudCgpKTtyZXR1cm57bWluV2lkdGg6dCxtaW5IZWlnaHQ6dn19O3IucHJvdG90eXBlLmZpeGVkSGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNIb3Jpem9udGFsKCl9O3IucHJvdG90eXBlLmZpeGVkV2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5pc0hvcml6b250YWwoKX07ci5wcm90b3R5cGUuX3Jlc2NhbGU9ZnVuY3Rpb24oKXt0aGlzLnJlbmRlcigpfTtyLnByb3RvdHlwZS5jb21wdXRlTGF5b3V0PQpmdW5jdGlvbih0LHYsQSl7cS5wcm90b3R5cGUuY29tcHV0ZUxheW91dC5jYWxsKHRoaXMsdCx2LEEpO3RoaXMuaXNIb3Jpem9udGFsKCk/dGhpcy5fc2NhbGUucmFuZ2UoWzAsdGhpcy53aWR0aCgpXSk6dGhpcy5fc2NhbGUucmFuZ2UoW3RoaXMuaGVpZ2h0KCksMF0pO3JldHVybiB0aGlzfTtyLnByb3RvdHlwZS5fc2l6ZUZyb21PZmZlcj1mdW5jdGlvbih0LHYpe3ZhciBBPXRoaXMucmVxdWVzdGVkU3BhY2UodCx2KTtyZXR1cm4gdGhpcy5pc0hvcml6b250YWwoKT97d2lkdGg6dCxoZWlnaHQ6QS5taW5IZWlnaHR9OntoZWlnaHQ6dix3aWR0aDpBLm1pbldpZHRofX07ci5wcm90b3R5cGUuX3NldHVwPWZ1bmN0aW9uKCl7cS5wcm90b3R5cGUuX3NldHVwLmNhbGwodGhpcyk7dGhpcy5fdGlja01hcmtDb250YWluZXI9dGhpcy5jb250ZW50KCkuYXBwZW5kKCJnIikuY2xhc3NlZChyLlRJQ0tfTUFSS19DTEFTUysiLWNvbnRhaW5lciIsITApO3RoaXMuX3RpY2tMYWJlbENvbnRhaW5lcj0KdGhpcy5jb250ZW50KCkuYXBwZW5kKCJnIikuY2xhc3NlZChyLlRJQ0tfTEFCRUxfQ0xBU1MrIi1jb250YWluZXIiLCEwKTt0aGlzLl9iYXNlbGluZT10aGlzLmNvbnRlbnQoKS5hcHBlbmQoImxpbmUiKS5jbGFzc2VkKCJiYXNlbGluZSIsITApO3RoaXMuX2Fubm90YXRpb25Db250YWluZXI9dGhpcy5jb250ZW50KCkuYXBwZW5kKCJnIikuY2xhc3NlZCgiYW5ub3RhdGlvbi1jb250YWluZXIiLCEwKTt0aGlzLl9hbm5vdGF0aW9uQ29udGFpbmVyLmFwcGVuZCgiZyIpLmNsYXNzZWQoImFubm90YXRpb24tbGluZS1jb250YWluZXIiLCEwKTt0aGlzLl9hbm5vdGF0aW9uQ29udGFpbmVyLmFwcGVuZCgiZyIpLmNsYXNzZWQoImFubm90YXRpb24tY2lyY2xlLWNvbnRhaW5lciIsITApO3RoaXMuX2Fubm90YXRpb25Db250YWluZXIuYXBwZW5kKCJnIikuY2xhc3NlZCgiYW5ub3RhdGlvbi1yZWN0LWNvbnRhaW5lciIsITApO3ZhciB0PXRoaXMuX2Fubm90YXRpb25Db250YWluZXIuYXBwZW5kKCJnIikuY2xhc3NlZCgiYW5ub3RhdGlvbi1sYWJlbC1jb250YWluZXIiLAohMCk7dD1uZXcgay5TdmdDb250ZXh0KHQubm9kZSgpKTt0aGlzLl9hbm5vdGF0aW9uTWVhc3VyZXI9bmV3IGsuQ2FjaGVNZWFzdXJlcih0KTt0aGlzLl9hbm5vdGF0aW9uV3JpdGVyPW5ldyBrLldyaXRlcih0aGlzLl9hbm5vdGF0aW9uTWVhc3VyZXIsdCl9O3IucHJvdG90eXBlLl9nZXRUaWNrVmFsdWVzPWZ1bmN0aW9uKCl7cmV0dXJuW119O3IucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fZ2V0VGlja1ZhbHVlcygpLHY9dGhpcy5fdGlja01hcmtDb250YWluZXIuc2VsZWN0QWxsKCIuIityLlRJQ0tfTUFSS19DTEFTUykuZGF0YSh0KSxBPXYuZW50ZXIoKS5hcHBlbmQoImxpbmUiKS5jbGFzc2VkKHIuVElDS19NQVJLX0NMQVNTLCEwKS5tZXJnZSh2KTtBLmF0dHJzKHRoaXMuX2dlbmVyYXRlVGlja01hcmtBdHRySGFzaCgpKTtsLnNlbGVjdChBLm5vZGVzKClbMF0pLmNsYXNzZWQoci5FTkRfVElDS19NQVJLX0NMQVNTLCEwKS5hdHRycyh0aGlzLl9nZW5lcmF0ZVRpY2tNYXJrQXR0ckhhc2goITApKTsKbC5zZWxlY3QoQS5ub2RlcygpW3QubGVuZ3RoLTFdKS5jbGFzc2VkKHIuRU5EX1RJQ0tfTUFSS19DTEFTUywhMCkuYXR0cnModGhpcy5fZ2VuZXJhdGVUaWNrTWFya0F0dHJIYXNoKCEwKSk7di5leGl0KCkucmVtb3ZlKCk7dGhpcy5fYmFzZWxpbmUuYXR0cnModGhpcy5fZ2VuZXJhdGVCYXNlbGluZUF0dHJIYXNoKCkpO3RoaXMuYW5ub3RhdGlvbnNFbmFibGVkKCk/dGhpcy5fZHJhd0Fubm90YXRpb25zKCk6dGhpcy5fcmVtb3ZlQW5ub3RhdGlvbnMoKTtyZXR1cm4gdGhpc307ci5wcm90b3R5cGUuYW5ub3RhdGVkVGlja3M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYW5ub3RhdGVkVGlja3N9O3IucHJvdG90eXBlLmFubm90YXRpb25Gb3JtYXR0ZXI9ZnVuY3Rpb24odCl7aWYobnVsbD09dClyZXR1cm4gdGhpcy5fYW5ub3RhdGlvbkZvcm1hdHRlcjt0aGlzLl9hbm5vdGF0aW9uRm9ybWF0dGVyPXQ7dGhpcy5yZW5kZXIoKTtyZXR1cm4gdGhpc307ci5wcm90b3R5cGUuYW5ub3RhdGlvbnNFbmFibGVkPQpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hbm5vdGF0aW9uc0VuYWJsZWR9O3IucHJvdG90eXBlLmFubm90YXRpb25UaWVyQ291bnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYW5ub3RhdGlvblRpZXJDb3VudH07ci5wcm90b3R5cGUuX2RyYXdBbm5vdGF0aW9ucz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoaGEpe3N3aXRjaChDLm9yaWVudGF0aW9uKCkpe2Nhc2UgImJvdHRvbSI6Y2FzZSAicmlnaHQiOnJldHVybiB5KGhhKTtjYXNlICJ0b3AiOmNhc2UgImxlZnQiOnJldHVybiB5KGhhKS1ELmdldChoYSkuaGVpZ2h0fX1mdW5jdGlvbiB2KGhhKXtyZXR1cm4gTC5oYXMoaGEpPyJoaWRkZW4iOiJ2aXNpYmxlIn1mdW5jdGlvbiBBKGhhKXtyZXR1cm4gQy5fc2NhbGUuc2NhbGUoaGEpfWZ1bmN0aW9uIHkoaGEpe3N3aXRjaChDLm9yaWVudGF0aW9uKCkpe2Nhc2UgImJvdHRvbSI6Y2FzZSAicmlnaHQiOnJldHVybiBLLmdldChoYSkqRytQO2Nhc2UgInRvcCI6Y2FzZSAibGVmdCI6cmV0dXJuIEotClAtSy5nZXQoaGEpKkd9fWZ1bmN0aW9uIHgoaGEsWCxjYSl7aGE9aGEuc2VsZWN0QWxsKCIuIitjYSkuZGF0YShCKTtYPWhhLmVudGVyKCkuYXBwZW5kKFgpLmNsYXNzZWQoY2EsITApLm1lcmdlKGhhKTtoYS5leGl0KCkucmVtb3ZlKCk7cmV0dXJuIFh9dmFyIEM9dGhpcyxGPXIuX0FOTk9UQVRJT05fTEFCRUxfUEFERElORyxEPW5ldyBwLk1hcCxCPXRoaXMuX2Fubm90YXRlZFRpY2tzVG9SZW5kZXIoKTtCLmZvckVhY2goZnVuY3Rpb24oaGEpe3ZhciBYPUMuX2Fubm90YXRpb25NZWFzdXJlci5tZWFzdXJlKEMuYW5ub3RhdGlvbkZvcm1hdHRlcigpKGhhKSk7RC5zZXQoaGEse3dpZHRoOlgud2lkdGgrMipGLGhlaWdodDpYLmhlaWdodCsyKkZ9KX0pO3ZhciBHPXRoaXMuX2Fubm90YXRpb25NZWFzdXJlci5tZWFzdXJlKCkuaGVpZ2h0KzIqRixLPXRoaXMuX2Fubm90YXRpb25Ub1RpZXIoRCksTD1uZXcgcC5TZXQsSj10aGlzLmlzSG9yaXpvbnRhbCgpP3RoaXMuaGVpZ2h0KCk6dGhpcy53aWR0aCgpLApQPXRoaXMuX2NvcmVTaXplKCksUz1NYXRoLm1pbih0aGlzLmFubm90YXRpb25UaWVyQ291bnQoKSxNYXRoLmZsb29yKChKLVApL0cpKTtLLmZvckVhY2goZnVuY3Rpb24oaGEsWCl7KC0xPT09aGF8fGhhPj1TKSYmTC5hZGQoWCl9KTtzd2l0Y2godGhpcy5vcmllbnRhdGlvbigpKXtjYXNlICJib3R0b20iOmNhc2UgInJpZ2h0Ijp2YXIgTj0wO2JyZWFrO2Nhc2UgInRvcCI6Tj10aGlzLmhlaWdodCgpO2JyZWFrO2Nhc2UgImxlZnQiOk49dGhpcy53aWR0aCgpfXZhciBUPXRoaXMuaXNIb3Jpem9udGFsKCk7eCh0aGlzLl9hbm5vdGF0aW9uQ29udGFpbmVyLnNlbGVjdCgiLmFubm90YXRpb24tbGluZS1jb250YWluZXIiKSwibGluZSIsci5BTk5PVEFUSU9OX0xJTkVfQ0xBU1MpLmF0dHJzKHt4MTpUP0E6Tix4MjpUP0E6eSx5MTpUP046QSx5MjpUP3k6QSx2aXNpYmlsaXR5OnZ9KTt4KHRoaXMuX2Fubm90YXRpb25Db250YWluZXIuc2VsZWN0KCIuYW5ub3RhdGlvbi1jaXJjbGUtY29udGFpbmVyIiksCiJjaXJjbGUiLHIuQU5OT1RBVElPTl9DSVJDTEVfQ0xBU1MpLmF0dHJzKHtjeDpUP0E6TixjeTpUP046QSxyOjN9KTt4KHRoaXMuX2Fubm90YXRpb25Db250YWluZXIuc2VsZWN0KCIuYW5ub3RhdGlvbi1yZWN0LWNvbnRhaW5lciIpLCJyZWN0IixyLkFOTk9UQVRJT05fUkVDVF9DTEFTUykuYXR0cnMoe3g6VD9BOnQseTpUP3Q6QSx3aWR0aDpUP2Z1bmN0aW9uKGhhKXtyZXR1cm4gRC5nZXQoaGEpLndpZHRofTpmdW5jdGlvbihoYSl7cmV0dXJuIEQuZ2V0KGhhKS5oZWlnaHR9LGhlaWdodDpUP2Z1bmN0aW9uKGhhKXtyZXR1cm4gRC5nZXQoaGEpLmhlaWdodH06ZnVuY3Rpb24oaGEpe3JldHVybiBELmdldChoYSkud2lkdGh9LHZpc2liaWxpdHk6dn0pO3ZhciBZPXRoaXMuX2Fubm90YXRpb25Xcml0ZXIsYWE9dGhpcy5hbm5vdGF0aW9uRm9ybWF0dGVyKCk7Tj14KHRoaXMuX2Fubm90YXRpb25Db250YWluZXIuc2VsZWN0KCIuYW5ub3RhdGlvbi1sYWJlbC1jb250YWluZXIiKSwiZyIsci5BTk5PVEFUSU9OX0xBQkVMX0NMQVNTKTsKTi5zZWxlY3RBbGwoIi50ZXh0LWNvbnRhaW5lciIpLnJlbW92ZSgpO04uYXR0cnMoe3RyYW5zZm9ybTpmdW5jdGlvbihoYSl7dmFyIFg9VD9BKGhhKTp0KGhhKTtoYT1UP3QoaGEpOkEoaGEpO3JldHVybiJ0cmFuc2xhdGUoIitYKyIsIitoYSsiKSJ9LHZpc2liaWxpdHk6dn0pLmVhY2goZnVuY3Rpb24oaGEpe1kud3JpdGUoYWEoaGEpLFQ/RC5nZXQoaGEpLndpZHRoOkQuZ2V0KGhhKS5oZWlnaHQsVD9ELmdldChoYSkuaGVpZ2h0OkQuZ2V0KGhhKS53aWR0aCx7eEFsaWduOiJjZW50ZXIiLHlBbGlnbjoiY2VudGVyIix0ZXh0Um90YXRpb246VD8wOjkwfSxsLnNlbGVjdCh0aGlzKS5ub2RlKCkpfSl9O3IucHJvdG90eXBlLl9hbm5vdGF0ZWRUaWNrc1RvUmVuZGVyPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyx2PXRoaXMuX3NjYWxlLnJhbmdlKCk7cmV0dXJuIHAuQXJyYXkudW5pcSh0aGlzLmFubm90YXRlZFRpY2tzKCkuZmlsdGVyKGZ1bmN0aW9uKEEpe3JldHVybiBudWxsPT1BPyExOnAuTWF0aC5pblJhbmdlKHQuX3NjYWxlLnNjYWxlKEEpLAp2WzBdLHZbMV0pfSkpfTtyLnByb3RvdHlwZS5fY29yZVNpemU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmlzSG9yaXpvbnRhbCgpP3RoaXMuaGVpZ2h0KCk6dGhpcy53aWR0aCgpLHY9dGhpcy5pc0hvcml6b250YWwoKT90aGlzLl9jb21wdXRlSGVpZ2h0KCk6dGhpcy5fY29tcHV0ZVdpZHRoKCk7cmV0dXJuIE1hdGgubWluKHYsdCl9O3IucHJvdG90eXBlLl9hbm5vdGF0aW9uVGllckhlaWdodD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hbm5vdGF0aW9uTWVhc3VyZXIubWVhc3VyZSgpLmhlaWdodCsyKnIuX0FOTk9UQVRJT05fTEFCRUxfUEFERElOR307ci5wcm90b3R5cGUuX2Fubm90YXRpb25Ub1RpZXI9ZnVuY3Rpb24odCl7dmFyIHY9dGhpcyxBPVtbXV0seT1uZXcgcC5NYXAseD10aGlzLmlzSG9yaXpvbnRhbCgpP3RoaXMud2lkdGgoKTp0aGlzLmhlaWdodCgpO3RoaXMuX2Fubm90YXRlZFRpY2tzVG9SZW5kZXIoKS5mb3JFYWNoKGZ1bmN0aW9uKEMpe3ZhciBGPXYuX3NjYWxlLnNjYWxlKEMpLApEPXQuZ2V0KEMpLndpZHRoO2lmKDA+Rnx8RitEPngpeS5zZXQoQywtMSk7ZWxzZXtmb3IodmFyIEI9ZnVuY3Rpb24oSyl7cmV0dXJuIEFbS10uc29tZShmdW5jdGlvbihMKXt2YXIgSj12Ll9zY2FsZS5zY2FsZShMKTtMPXQuZ2V0KEwpLndpZHRoO3JldHVybiBGK0Q+PUomJkY8PUorTH0pfSxHPTA7QihHKTspRysrLEEubGVuZ3RoPT09RyYmQS5wdXNoKFtdKTtBW0ddLnB1c2goQyk7eS5zZXQoQyxHKX19KTtyZXR1cm4geX07ci5wcm90b3R5cGUuX3JlbW92ZUFubm90YXRpb25zPWZ1bmN0aW9uKCl7dGhpcy5fYW5ub3RhdGlvbkNvbnRhaW5lci5zZWxlY3RBbGwoIi5hbm5vdGF0aW9uLWxpbmUiKS5yZW1vdmUoKTt0aGlzLl9hbm5vdGF0aW9uQ29udGFpbmVyLnNlbGVjdEFsbCgiLmFubm90YXRpb24tY2lyY2xlIikucmVtb3ZlKCk7dGhpcy5fYW5ub3RhdGlvbkNvbnRhaW5lci5zZWxlY3RBbGwoIi5hbm5vdGF0aW9uLXJlY3QiKS5yZW1vdmUoKTt0aGlzLl9hbm5vdGF0aW9uQ29udGFpbmVyLnNlbGVjdEFsbCgiLmFubm90YXRpb24tbGFiZWwiKS5yZW1vdmUoKX07CnIucHJvdG90eXBlLl9nZW5lcmF0ZUJhc2VsaW5lQXR0ckhhc2g9ZnVuY3Rpb24oKXt2YXIgdD17eDE6MCx5MTowLHgyOjAseTI6MH07c3dpdGNoKHRoaXMuX29yaWVudGF0aW9uKXtjYXNlICJib3R0b20iOnQueDI9dGhpcy53aWR0aCgpO2JyZWFrO2Nhc2UgInRvcCI6dC54Mj10aGlzLndpZHRoKCk7dC55MT10aGlzLmhlaWdodCgpO3QueTI9dGhpcy5oZWlnaHQoKTticmVhaztjYXNlICJsZWZ0Ijp0LngxPXRoaXMud2lkdGgoKTt0LngyPXRoaXMud2lkdGgoKTt0LnkyPXRoaXMuaGVpZ2h0KCk7YnJlYWs7Y2FzZSAicmlnaHQiOnQueTI9dGhpcy5oZWlnaHQoKX1yZXR1cm4gdH07ci5wcm90b3R5cGUuX2dlbmVyYXRlVGlja01hcmtBdHRySGFzaD1mdW5jdGlvbih0KXtmdW5jdGlvbiB2KHgpe3JldHVybiBBLl9zY2FsZS5zY2FsZSh4KX12YXIgQT10aGlzO3ZvaWQgMD09PXQmJih0PSExKTt2YXIgeT17eDE6MCx5MTowLHgyOjAseTI6MH07dGhpcy5pc0hvcml6b250YWwoKT8oeS54MT0Kdix5LngyPXYpOih5LnkxPXYseS55Mj12KTt0PXQ/dGhpcy5fZW5kVGlja0xlbmd0aDp0aGlzLl9pbm5lclRpY2tMZW5ndGg7c3dpdGNoKHRoaXMuX29yaWVudGF0aW9uKXtjYXNlICJib3R0b20iOnkueTI9dDticmVhaztjYXNlICJ0b3AiOnkueTE9dGhpcy5oZWlnaHQoKTt5LnkyPXRoaXMuaGVpZ2h0KCktdDticmVhaztjYXNlICJsZWZ0Ijp5LngxPXRoaXMud2lkdGgoKTt5LngyPXRoaXMud2lkdGgoKS10O2JyZWFrO2Nhc2UgInJpZ2h0Ijp5LngyPXR9cmV0dXJuIHl9O3IucHJvdG90eXBlLl9zZXREZWZhdWx0QWxpZ25tZW50PWZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX29yaWVudGF0aW9uKXtjYXNlICJib3R0b20iOnRoaXMueUFsaWdubWVudCgidG9wIik7YnJlYWs7Y2FzZSAidG9wIjp0aGlzLnlBbGlnbm1lbnQoImJvdHRvbSIpO2JyZWFrO2Nhc2UgImxlZnQiOnRoaXMueEFsaWdubWVudCgicmlnaHQiKTticmVhaztjYXNlICJyaWdodCI6dGhpcy54QWxpZ25tZW50KCJsZWZ0Iil9fTsKci5wcm90b3R5cGUuaXNIb3Jpem9udGFsPWZ1bmN0aW9uKCl7cmV0dXJuInRvcCI9PT10aGlzLl9vcmllbnRhdGlvbnx8ImJvdHRvbSI9PT10aGlzLl9vcmllbnRhdGlvbn07ci5wcm90b3R5cGUuZ2V0U2NhbGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2NhbGV9O3IucHJvdG90eXBlLmZvcm1hdHRlcj1mdW5jdGlvbih0KXtpZihudWxsPT10KXJldHVybiB0aGlzLl9mb3JtYXR0ZXI7dGhpcy5fZm9ybWF0dGVyPXQ7dGhpcy5yZWRyYXcoKTtyZXR1cm4gdGhpc307ci5wcm90b3R5cGUuaW5uZXJUaWNrTGVuZ3RoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lubmVyVGlja0xlbmd0aH07ci5wcm90b3R5cGUuZW5kVGlja0xlbmd0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbmRUaWNrTGVuZ3RofTtyLnByb3RvdHlwZS5fbWF4TGFiZWxUaWNrTGVuZ3RoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2hvd0VuZFRpY2tMYWJlbHMoKT9NYXRoLm1heCh0aGlzLmlubmVyVGlja0xlbmd0aCgpLAp0aGlzLmVuZFRpY2tMZW5ndGgoKSk6dGhpcy5pbm5lclRpY2tMZW5ndGgoKX07ci5wcm90b3R5cGUudGlja0xhYmVsUGFkZGluZz1mdW5jdGlvbih0KXtpZihudWxsPT10KXJldHVybiB0aGlzLl90aWNrTGFiZWxQYWRkaW5nO2lmKDA+dCl0aHJvdyBFcnJvcigidGljayBsYWJlbCBwYWRkaW5nIG11c3QgYmUgcG9zaXRpdmUiKTt0aGlzLl90aWNrTGFiZWxQYWRkaW5nPXQ7dGhpcy5yZWRyYXcoKTtyZXR1cm4gdGhpc307ci5wcm90b3R5cGUubWFyZ2luPWZ1bmN0aW9uKHQpe2lmKG51bGw9PXQpcmV0dXJuIHRoaXMuX21hcmdpbjtpZigwPnQpdGhyb3cgRXJyb3IoIm1hcmdpbiBzaXplIG11c3QgYmUgcG9zaXRpdmUiKTt0aGlzLl9tYXJnaW49dDt0aGlzLnJlZHJhdygpO3JldHVybiB0aGlzfTtyLnByb3RvdHlwZS5vcmllbnRhdGlvbj1mdW5jdGlvbih0KXtpZihudWxsPT10KXJldHVybiB0aGlzLl9vcmllbnRhdGlvbjt0PXQudG9Mb3dlckNhc2UoKTtpZigidG9wIiE9PXQmJiJib3R0b20iIT09CnQmJiJsZWZ0IiE9PXQmJiJyaWdodCIhPT10KXRocm93IEVycm9yKCJ1bnN1cHBvcnRlZCBvcmllbnRhdGlvbiIpO3RoaXMuX29yaWVudGF0aW9uPXQ7dGhpcy5yZWRyYXcoKTtyZXR1cm4gdGhpc307ci5wcm90b3R5cGUuc2hvd0VuZFRpY2tMYWJlbHM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2hvd0VuZFRpY2tMYWJlbHN9O3IucHJvdG90eXBlLl9zaG93QWxsVGlja01hcmtzPWZ1bmN0aW9uKCl7dGhpcy5fdGlja01hcmtDb250YWluZXIuc2VsZWN0QWxsKCIuIityLlRJQ0tfTUFSS19DTEFTUykuZWFjaChmdW5jdGlvbigpe2wuc2VsZWN0KHRoaXMpLnN0eWxlKCJ2aXNpYmlsaXR5IiwiaW5oZXJpdCIpfSl9O3IucHJvdG90eXBlLl9zaG93QWxsVGlja0xhYmVscz1mdW5jdGlvbigpe3RoaXMuX3RpY2tMYWJlbENvbnRhaW5lci5zZWxlY3RBbGwoIi4iK3IuVElDS19MQUJFTF9DTEFTUykuZWFjaChmdW5jdGlvbigpe2wuc2VsZWN0KHRoaXMpLnN0eWxlKCJ2aXNpYmlsaXR5IiwiaW5oZXJpdCIpfSl9OwpyLnByb3RvdHlwZS5faGlkZU92ZXJmbG93aW5nVGlja0xhYmVscz1mdW5jdGlvbigpe3ZhciB0PXRoaXMuZWxlbWVudCgpLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx2PXRoaXMuX3RpY2tMYWJlbENvbnRhaW5lci5zZWxlY3RBbGwoIi4iK3IuVElDS19MQUJFTF9DTEFTUyk7di5lbXB0eSgpfHx2LmVhY2goZnVuY3Rpb24oKXtwLkRPTS5jbGllbnRSZWN0SW5zaWRlKHRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksdCl8fGwuc2VsZWN0KHRoaXMpLnN0eWxlKCJ2aXNpYmlsaXR5IiwiaGlkZGVuIil9KX07ci5wcm90b3R5cGUuX2hpZGVUaWNrTWFya3NXaXRob3V0TGFiZWw9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl90aWNrTWFya0NvbnRhaW5lci5zZWxlY3RBbGwoIi4iK3IuVElDS19NQVJLX0NMQVNTKSx2PXRoaXMuX3RpY2tMYWJlbENvbnRhaW5lci5zZWxlY3RBbGwoIi4iK3IuVElDS19MQUJFTF9DTEFTUykuZmlsdGVyKGZ1bmN0aW9uKCl7dmFyIEE9bC5zZWxlY3QodGhpcykuc3R5bGUoInZpc2liaWxpdHkiKTsKcmV0dXJuImluaGVyaXQiPT09QXx8InZpc2libGUiPT09QX0pLmRhdGEoKTt0LmVhY2goZnVuY3Rpb24oQSl7LTE9PT12LmluZGV4T2YoQSkmJmwuc2VsZWN0KHRoaXMpLnN0eWxlKCJ2aXNpYmlsaXR5IiwiaGlkZGVuIil9KX07ci5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlPWZ1bmN0aW9uKCl7cS5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlLmNhbGwodGhpcyk7dGhpcy5fYW5ub3RhdGlvbk1lYXN1cmVyLnJlc2V0KCl9O3JldHVybiByfShjLkNvbXBvbmVudCk7Zi5FTkRfVElDS19NQVJLX0NMQVNTPSJlbmQtdGljay1tYXJrIjtmLlRJQ0tfTUFSS19DTEFTUz0idGljay1tYXJrIjtmLlRJQ0tfTEFCRUxfQ0xBU1M9InRpY2stbGFiZWwiO2YuQU5OT1RBVElPTl9MSU5FX0NMQVNTPSJhbm5vdGF0aW9uLWxpbmUiO2YuQU5OT1RBVElPTl9SRUNUX0NMQVNTPSJhbm5vdGF0aW9uLXJlY3QiO2YuQU5OT1RBVElPTl9DSVJDTEVfQ0xBU1M9ImFubm90YXRpb24tY2lyY2xlIjtmLkFOTk9UQVRJT05fTEFCRUxfQ0xBU1M9CiJhbm5vdGF0aW9uLWxhYmVsIjtmLl9BTk5PVEFUSU9OX0xBQkVMX1BBRERJTkc9NDtkLkF4aXM9Zn0sZnVuY3Rpb24oYyxkKXtkLlNIT1dfV0FSTklOR1M9ITA7ZC5BRERfVElUTEVfRUxFTUVOVFM9ITB9LGZ1bmN0aW9uKGMsZCxmKXt2YXIgZz1mKDApO2M9ZnVuY3Rpb24oKXtmdW5jdGlvbiBsKCl7dGhpcy5fZXZlbnRUb1Byb2Nlc3NpbmdGdW5jdGlvbj17fTt0aGlzLl9ldmVudFRhcmdldD1kb2N1bWVudDt0aGlzLl9ldmVudE5hbWVUb0NhbGxiYWNrU2V0PXt9O3RoaXMuX2Nvbm5lY3RlZD0hMX1sLnByb3RvdHlwZS5faGFzTm9DYWxsYmFja3M9ZnVuY3Rpb24oKXtmb3IodmFyIGs9T2JqZWN0LmtleXModGhpcy5fZXZlbnROYW1lVG9DYWxsYmFja1NldCksbT0wO208ay5sZW5ndGg7bSsrKWlmKDAhPT10aGlzLl9ldmVudE5hbWVUb0NhbGxiYWNrU2V0W2tbbV1dLnNpemUpcmV0dXJuITE7cmV0dXJuITB9O2wucHJvdG90eXBlLl9jb25uZWN0PWZ1bmN0aW9uKCl7dmFyIGs9dGhpczsKdGhpcy5fY29ubmVjdGVkfHwoT2JqZWN0LmtleXModGhpcy5fZXZlbnRUb1Byb2Nlc3NpbmdGdW5jdGlvbikuZm9yRWFjaChmdW5jdGlvbihtKXtrLl9ldmVudFRhcmdldC5hZGRFdmVudExpc3RlbmVyKG0say5fZXZlbnRUb1Byb2Nlc3NpbmdGdW5jdGlvblttXSl9KSx0aGlzLl9jb25uZWN0ZWQ9ITApfTtsLnByb3RvdHlwZS5fZGlzY29ubmVjdD1mdW5jdGlvbigpe3ZhciBrPXRoaXM7dGhpcy5fY29ubmVjdGVkJiZ0aGlzLl9oYXNOb0NhbGxiYWNrcygpJiYoT2JqZWN0LmtleXModGhpcy5fZXZlbnRUb1Byb2Nlc3NpbmdGdW5jdGlvbikuZm9yRWFjaChmdW5jdGlvbihtKXtrLl9ldmVudFRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKG0say5fZXZlbnRUb1Byb2Nlc3NpbmdGdW5jdGlvblttXSl9KSx0aGlzLl9jb25uZWN0ZWQ9ITEpfTtsLnByb3RvdHlwZS5fYWRkQ2FsbGJhY2tGb3JFdmVudD1mdW5jdGlvbihrLG0pe251bGw9PXRoaXMuX2V2ZW50TmFtZVRvQ2FsbGJhY2tTZXRba10mJgoodGhpcy5fZXZlbnROYW1lVG9DYWxsYmFja1NldFtrXT1uZXcgZy5DYWxsYmFja1NldCk7dGhpcy5fZXZlbnROYW1lVG9DYWxsYmFja1NldFtrXS5hZGQobSk7dGhpcy5fY29ubmVjdCgpfTtsLnByb3RvdHlwZS5fcmVtb3ZlQ2FsbGJhY2tGb3JFdmVudD1mdW5jdGlvbihrLG0pe251bGwhPXRoaXMuX2V2ZW50TmFtZVRvQ2FsbGJhY2tTZXRba10mJnRoaXMuX2V2ZW50TmFtZVRvQ2FsbGJhY2tTZXRba10uZGVsZXRlKG0pO3RoaXMuX2Rpc2Nvbm5lY3QoKX07bC5wcm90b3R5cGUuX2NhbGxDYWxsYmFja3NGb3JFdmVudD1mdW5jdGlvbihrKXtmb3IodmFyIG09W10scD0xO3A8YXJndW1lbnRzLmxlbmd0aDtwKyspbVtwLTFdPWFyZ3VtZW50c1twXTtwPXRoaXMuX2V2ZW50TmFtZVRvQ2FsbGJhY2tTZXRba107bnVsbCE9cCYmcC5jYWxsQ2FsbGJhY2tzLmFwcGx5KHAsbSl9O3JldHVybiBsfSgpO2QuRGlzcGF0Y2hlcj1jfSxmdW5jdGlvbihjLGQsZil7ZnVuY3Rpb24gZyhsKXtmb3IodmFyIGsgaW4gbClkLmhhc093blByb3BlcnR5KGspfHwKKGRba109bFtrXSl9ZyhmKDg3KSk7ZyhmKDg4KSk7ZyhmKDQwKSk7ZyhmKDg5KSk7ZyhmKDkwKSk7Yz1mKDI2KTtkLnpvb21PdXQ9Yy56b29tT3V0fSxmdW5jdGlvbihjLGQpe2Z1bmN0aW9uIGYocSxyLHQpe3JldHVybiB0LSh0LXEpKnJ9ZnVuY3Rpb24gZyhxLHIsdCl7cmV0dXJuKHEqci10KS8oci0xKX1mdW5jdGlvbiBsKHEscix0LHYpe3ZhciBBPTE8cjt0PUE/djp0O2lmKG51bGw9PXQpcmV0dXJuIHI7cT1xLmdldFRyYW5zZm9ybWF0aW9uRG9tYWluKCk7cmV0dXJuKEE/TWF0aC5taW46TWF0aC5tYXgpKHIsdC9NYXRoLmFicyhxWzFdLXFbMF0pKX1mdW5jdGlvbiBrKHEscix0LHYsQSl7aWYoMT49cilyZXR1cm57Y2VudGVyUG9pbnQ6dCx6b29tQW1vdW50OnJ9O2lmKG51bGw9PXYmJm51bGw9PUEpcmV0dXJue2NlbnRlclBvaW50OnQsem9vbUFtb3VudDpyfTt2YXIgeT1tKHEpLHg9cChxKSxDPXg/SW5maW5pdHk6LUluZmluaXR5O3g9eD8tSW5maW5pdHk6SW5maW5pdHk7dj1udWxsPT0Kdj9DOnY7QT1udWxsPT1BP3g6QTt4PXEuZ2V0VHJhbnNmb3JtYXRpb25Eb21haW4oKTtDPXhbMF07eD14WzFdO0E9cS5zY2FsZVRyYW5zZm9ybWF0aW9uKEEpO3g9cS5zY2FsZVRyYW5zZm9ybWF0aW9uKHgpO3ZhciBGPWYoeCxyLHQpO3Y9cS5zY2FsZVRyYW5zZm9ybWF0aW9uKHYpO3E9cS5zY2FsZVRyYW5zZm9ybWF0aW9uKEMpO0M9ZihxLHIsdCk7cmV0dXJuIE1hdGguYWJzKEYtQyk+TWF0aC5hYnMoQS12KT8ocj0oQS12KS8oeC1xKSwxIT09cj97Y2VudGVyUG9pbnQ6Zyh4LHIsQSksem9vbUFtb3VudDpyfTp7Y2VudGVyUG9pbnQ6dCx6b29tQW1vdW50OnJ9KTpGPkEhPXk/e2NlbnRlclBvaW50OmcoeCxyLEEpLHpvb21BbW91bnQ6cn06Qzx2IT15P3tjZW50ZXJQb2ludDpnKHEscix2KSx6b29tQW1vdW50OnJ9OntjZW50ZXJQb2ludDp0LHpvb21BbW91bnQ6cn19ZnVuY3Rpb24gbShxKXtxPXEucmFuZ2UoKTtyZXR1cm4gcVsxXTxxWzBdfWZ1bmN0aW9uIHAocSl7cT1xLmdldFRyYW5zZm9ybWF0aW9uRG9tYWluKCk7CnJldHVybiBxWzFdPHFbMF19ZC56b29tT3V0PWY7ZC5jb25zdHJhaW5lZFpvb209ZnVuY3Rpb24ocSxyLHQsdixBLHkseCl7cj1sKHEscix2LEEpO3JldHVybiBrKHEscix0LHkseCl9O2QuY29uc3RyYWluWm9vbUV4dGVudHM9bDtkLmNvbnN0cmFpblpvb21WYWx1ZXM9aztkLmNvbnN0cmFpbmVkVHJhbnNsYXRpb249ZnVuY3Rpb24ocSxyLHQsdil7dmFyIEE9cS5nZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbigpLHk9QVswXSx4PUFbMV07QT1tKHEpOzA8ciE9PUE/KHQ9dixudWxsIT10JiYoeT1xLnNjYWxlVHJhbnNmb3JtYXRpb24oeCkscT1xLnNjYWxlVHJhbnNmb3JtYXRpb24odCkscj0oQT9NYXRoLm1heDpNYXRoLm1pbikoeStyLHEpLXkpKTpudWxsIT10JiYoeT1xLnNjYWxlVHJhbnNmb3JtYXRpb24oeSkscT1xLnNjYWxlVHJhbnNmb3JtYXRpb24odCkscj0oQT9NYXRoLm1pbjpNYXRoLm1heCkoeStyLHEpLXkpO3JldHVybiByfX0sZnVuY3Rpb24oYyxkLGYpe2Z1bmN0aW9uIGcoRywKSyxMKXt2YXIgSj1HLnNjYWxlO2lmKEogaW5zdGFuY2VvZiB5LkNhdGVnb3J5KUw9Si5yYW5nZUJhbmQoKTtlbHNle3ZhciBQPUcuYWNjZXNzb3I7Rz1rLnNldChDLkFycmF5LmZsYXR0ZW4oSy5tYXAoZnVuY3Rpb24oUyl7cmV0dXJuIFMuZGF0YSgpLm1hcChmdW5jdGlvbihOLFQpe3JldHVybiBQKE4sVCxTKX0pLmZpbHRlcihmdW5jdGlvbihOKXtyZXR1cm4gbnVsbCE9Tn0pLm1hcChmdW5jdGlvbihOKXtyZXR1cm4gTi52YWx1ZU9mKCl9KX0pKSkudmFsdWVzKCkubWFwKGZ1bmN0aW9uKFMpe3JldHVybitTfSk7Ry5zb3J0KGZ1bmN0aW9uKFMsTil7cmV0dXJuIFMtTn0pO0c9Ry5tYXAoZnVuY3Rpb24oUyl7cmV0dXJuIEouc2NhbGUoUyl9KTtHPWsucGFpcnMoRyk7TD1DLk1hdGgubWluKEcsZnVuY3Rpb24oUyl7cmV0dXJuIE1hdGguYWJzKFNbMV0tU1swXSl9LEwqQi5fU0lOR0xFX0JBUl9ESU1FTlNJT05fUkFUSU8pO0wqPUIuX0JBUl9USElDS05FU1NfUkFUSU99cmV0dXJuIEx9CnZhciBsPXRoaXMmJnRoaXMuX19leHRlbmRzfHxmdW5jdGlvbihHLEspe2Z1bmN0aW9uIEwoKXt0aGlzLmNvbnN0cnVjdG9yPUd9Zm9yKHZhciBKIGluIEspSy5oYXNPd25Qcm9wZXJ0eShKKSYmKEdbSl09S1tKXSk7Ry5wcm90b3R5cGU9bnVsbD09PUs/T2JqZWN0LmNyZWF0ZShLKTooTC5wcm90b3R5cGU9Sy5wcm90b3R5cGUsbmV3IEwpfSxrPWYoMSksbT1mKDUpLHA9Zig3KSxxPWYoOCkscj1mKDE0KSx0PWYoNiksdj1mKDM0KSxBPWYoMjApLHk9ZigzKSx4PWYoMTEpLEM9ZigwKTtjPWYoMTApO3ZhciBGPWYoMTkpLEQ9ZigyKTtmPWYoMTYpO2QuQmFyT3JpZW50YXRpb249Yy5tYWtlRW51bShbInZlcnRpY2FsIiwiaG9yaXpvbnRhbCJdKTtkLkxhYmVsc1Bvc2l0aW9uPWMubWFrZUVudW0oWyJzdGFydCIsIm1pZGRsZSIsImVuZCIsIm91dHNpZGUiXSk7ZC5CYXJBbGlnbm1lbnQ9Yy5tYWtlRW51bShbInN0YXJ0IiwibWlkZGxlIiwiZW5kIl0pO3ZhciBCPWZ1bmN0aW9uKEcpe2Z1bmN0aW9uIEsoTCl7dm9pZCAwPT09CkwmJihMPSJ2ZXJ0aWNhbCIpO3ZhciBKPUcuY2FsbCh0aGlzKXx8dGhpcztKLl9sYWJlbEZvcm1hdHRlcj1xLmlkZW50aXR5KCk7Si5fbGFiZWxzRW5hYmxlZD0hMTtKLl9sYWJlbHNQb3NpdGlvbj1kLkxhYmVsc1Bvc2l0aW9uLmVuZDtKLl9oaWRlQmFyc0lmQW55QXJlVG9vV2lkZT0hMDtKLl9iYXJBbGlnbm1lbnQ9Im1pZGRsZSI7Si5fY29tcHV0ZUJhclBpeGVsVGhpY2tuZXNzPUEubWVtb2l6ZShnKTtKLl9maXhlZEJhclBpeGVsVGhpY2tuZXNzPSEwO0ouYWRkQ2xhc3MoImJhci1wbG90Iik7aWYoInZlcnRpY2FsIiE9PUwmJiJob3Jpem9udGFsIiE9PUwpdGhyb3cgRXJyb3IoTCsiIGlzIG5vdCBhIHZhbGlkIG9yaWVudGF0aW9uIGZvciBQbG90cy5CYXIiKTtKLl9pc1ZlcnRpY2FsPSJ2ZXJ0aWNhbCI9PT1MO0ouYW5pbWF0b3IoImJhc2VsaW5lIixuZXcgcC5OdWxsKTtKLmF0dHIoImZpbGwiLChuZXcgeS5Db2xvcikucmFuZ2UoKVswXSk7Si5hdHRyKEsuX0JBUl9USElDS05FU1NfS0VZLApmdW5jdGlvbigpe3JldHVybiBKLl9iYXJQaXhlbFRoaWNrbmVzcygpfSk7Si5fbGFiZWxDb25maWc9bmV3IEMuTWFwO0ouX2Jhc2VsaW5lVmFsdWVQcm92aWRlcj1mdW5jdGlvbigpe3JldHVybltKLmJhc2VsaW5lVmFsdWUoKV19O3JldHVybiBKfWwoSyxHKTtLLnByb3RvdHlwZS5jb21wdXRlTGF5b3V0PWZ1bmN0aW9uKEwsSixQKXtHLnByb3RvdHlwZS5jb21wdXRlTGF5b3V0LmNhbGwodGhpcyxMLEosUCk7dGhpcy5fdXBkYXRlRXh0ZW50cygpO3JldHVybiB0aGlzfTtLLnByb3RvdHlwZS54PWZ1bmN0aW9uKEwsSil7aWYobnVsbD09TClyZXR1cm4gRy5wcm90b3R5cGUueC5jYWxsKHRoaXMpO251bGw9PUo/Ry5wcm90b3R5cGUueC5jYWxsKHRoaXMsTCk6Ry5wcm90b3R5cGUueC5jYWxsKHRoaXMsTCxKKTt0aGlzLl91cGRhdGVUaGlja25lc3NBdHRyKCk7dGhpcy5fdXBkYXRlTGVuZ3RoU2NhbGUoKTtyZXR1cm4gdGhpc307Sy5wcm90b3R5cGUueT1mdW5jdGlvbihMLEope2lmKG51bGw9PQpMKXJldHVybiBHLnByb3RvdHlwZS55LmNhbGwodGhpcyk7bnVsbD09Sj9HLnByb3RvdHlwZS55LmNhbGwodGhpcyxMKTpHLnByb3RvdHlwZS55LmNhbGwodGhpcyxMLEopO3RoaXMuX3VwZGF0ZUxlbmd0aFNjYWxlKCk7cmV0dXJuIHRoaXN9O0sucHJvdG90eXBlLmxlbmd0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9pc1ZlcnRpY2FsP3RoaXMueSgpOnRoaXMueCgpfTtLLnByb3RvdHlwZS5wb3NpdGlvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9pc1ZlcnRpY2FsP3RoaXMueCgpOnRoaXMueSgpfTtLLnByb3RvdHlwZS5iYXJFbmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJvcGVydHlCaW5kaW5ncy5nZXQoSy5fQkFSX0VORF9LRVkpfTtLLnByb3RvdHlwZS5iYXJBbGlnbm1lbnQ9ZnVuY3Rpb24oTCl7aWYobnVsbD09TClyZXR1cm4gdGhpcy5fYmFyQWxpZ25tZW50O3RoaXMuX2JhckFsaWdubWVudD1MO3RoaXMuX2NsZWFyQXR0clRvUHJvamVjdG9yQ2FjaGUoKTt0aGlzLnJlbmRlcigpOwpyZXR1cm4gdGhpc307Sy5wcm90b3R5cGUub3JpZW50YXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faXNWZXJ0aWNhbD8idmVydGljYWwiOiJob3Jpem9udGFsIn07Sy5wcm90b3R5cGUuX2NyZWF0ZURyYXdlcj1mdW5jdGlvbigpe3JldHVybiBuZXcgdC5Qcm94eURyYXdlcihmdW5jdGlvbigpe3JldHVybiBuZXcgdi5SZWN0YW5nbGVTVkdEcmF3ZXIoSy5fQkFSX0FSRUFfQ0xBU1MpfSxmdW5jdGlvbihMKXtyZXR1cm4gbmV3IHIuUmVjdGFuZ2xlQ2FudmFzRHJhd2VyKEwpfSl9O0sucHJvdG90eXBlLl9zZXR1cD1mdW5jdGlvbigpe0cucHJvdG90eXBlLl9zZXR1cC5jYWxsKHRoaXMpO3RoaXMuX2Jhc2VsaW5lPXRoaXMuX3JlbmRlckFyZWEuYXBwZW5kKCJsaW5lIikuY2xhc3NlZCgiYmFzZWxpbmUiLCEwKX07Sy5wcm90b3R5cGUuYmFzZWxpbmVWYWx1ZT1mdW5jdGlvbigpe2lmKG51bGwhPXRoaXMuX2Jhc2VsaW5lVmFsdWUpcmV0dXJuIHRoaXMuX2Jhc2VsaW5lVmFsdWU7aWYoIXRoaXMuX3Byb2plY3RvcnNSZWFkeSgpKXJldHVybiAwOwp2YXIgTD10aGlzLmxlbmd0aCgpLnNjYWxlO3JldHVybiBMP0wgaW5zdGFuY2VvZiB5LlRpbWU/bmV3IERhdGUoMCk6MDowfTtLLnByb3RvdHlwZS5hZGREYXRhc2V0PWZ1bmN0aW9uKEwpe0cucHJvdG90eXBlLmFkZERhdGFzZXQuY2FsbCh0aGlzLEwpO3JldHVybiB0aGlzfTtLLnByb3RvdHlwZS5fYWRkRGF0YXNldD1mdW5jdGlvbihMKXtHLnByb3RvdHlwZS5fYWRkRGF0YXNldC5jYWxsKHRoaXMsTCk7cmV0dXJuIHRoaXN9O0sucHJvdG90eXBlLnJlbW92ZURhdGFzZXQ9ZnVuY3Rpb24oTCl7Ry5wcm90b3R5cGUucmVtb3ZlRGF0YXNldC5jYWxsKHRoaXMsTCl9O0sucHJvdG90eXBlLl9yZW1vdmVEYXRhc2V0PWZ1bmN0aW9uKEwpe0cucHJvdG90eXBlLl9yZW1vdmVEYXRhc2V0LmNhbGwodGhpcyxMKTtyZXR1cm4gdGhpc307Sy5wcm90b3R5cGUuZGF0YXNldHM9ZnVuY3Rpb24oTCl7aWYobnVsbD09TClyZXR1cm4gRy5wcm90b3R5cGUuZGF0YXNldHMuY2FsbCh0aGlzKTtHLnByb3RvdHlwZS5kYXRhc2V0cy5jYWxsKHRoaXMsCkwpO3JldHVybiB0aGlzfTtLLnByb3RvdHlwZS5sYWJlbHNFbmFibGVkPWZ1bmN0aW9uKEwpe2lmKG51bGw9PUwpcmV0dXJuIHRoaXMuX2xhYmVsc0VuYWJsZWQ7dGhpcy5fbGFiZWxzRW5hYmxlZD1MO3RoaXMuX2NsZWFyQXR0clRvUHJvamVjdG9yQ2FjaGUoKTt0aGlzLnJlbmRlcigpO3JldHVybiB0aGlzfTtLLnByb3RvdHlwZS5sYWJlbEZvcm1hdHRlcj1mdW5jdGlvbihMKXtpZihudWxsPT1MKXJldHVybiB0aGlzLl9sYWJlbEZvcm1hdHRlcjt0aGlzLl9sYWJlbEZvcm1hdHRlcj1MO3RoaXMuX2NsZWFyQXR0clRvUHJvamVjdG9yQ2FjaGUoKTt0aGlzLnJlbmRlcigpO3JldHVybiB0aGlzfTtLLnByb3RvdHlwZS5fY3JlYXRlTm9kZXNGb3JEYXRhc2V0PWZ1bmN0aW9uKEwpe3ZhciBKPUcucHJvdG90eXBlLl9jcmVhdGVOb2Rlc0ZvckRhdGFzZXQuY2FsbCh0aGlzLEwpLFA9dGhpcy5fcmVuZGVyQXJlYS5hcHBlbmQoImciKS5jbGFzc2VkKEsuX0xBQkVMX0FSRUFfQ0xBU1MsITApLApTPW5ldyBtLlN2Z0NvbnRleHQoUC5ub2RlKCkpLE49bmV3IG0uQ2FjaGVNZWFzdXJlcihTKTtTPW5ldyBtLldyaXRlcihOLFMpO3RoaXMuX2xhYmVsQ29uZmlnLnNldChMLHtsYWJlbEFyZWE6UCxtZWFzdXJlcjpOLHdyaXRlcjpTfSk7cmV0dXJuIEp9O0sucHJvdG90eXBlLl9yZW1vdmVEYXRhc2V0Tm9kZXM9ZnVuY3Rpb24oTCl7Ry5wcm90b3R5cGUuX3JlbW92ZURhdGFzZXROb2Rlcy5jYWxsKHRoaXMsTCk7dmFyIEo9dGhpcy5fbGFiZWxDb25maWcuZ2V0KEwpO251bGwhPUomJihKLmxhYmVsQXJlYS5yZW1vdmUoKSx0aGlzLl9sYWJlbENvbmZpZy5kZWxldGUoTCkpfTtLLnByb3RvdHlwZS5lbnRpdHlOZWFyZXN0PWZ1bmN0aW9uKEwpe3ZhciBKPXRoaXM7cmV0dXJuIHRoaXMuX2NvbXB1dGVCYXJQaXhlbFRoaWNrbmVzcy5kb0xvY2tlZChmdW5jdGlvbigpe2Z1bmN0aW9uIFAoYmEsbGEsd2EsQ2Epe3JldHVybiBKLl9waXhlbFBvaW50QmFyKGhhKGJhLGxhLHdhKSxYLENhKX12YXIgUz0KSi5faXNWZXJ0aWNhbD9MLng6TC55LE49Si5faXNWZXJ0aWNhbD9MLnk6TC54LFQ9Si5ib3VuZHMoKSxZPXttaW46MCxtYXg6VC5ib3R0b21SaWdodC54LVQudG9wTGVmdC54fSxhYT17bWluOjAsbWF4OlQuYm90dG9tUmlnaHQueS1ULnRvcExlZnQueX0saGE9RC5QbG90Ll9zY2FsZWRBY2Nlc3NvcihKLmxlbmd0aCgpKSxYPUoubGVuZ3RoKCkuc2NhbGUuc2NhbGUoSi5iYXNlbGluZVZhbHVlKCkpLGNhPUluZmluaXR5LGVhPUluZmluaXR5LGthO0ouX2dldEVudGl0eVN0b3JlKCkuZW50aXRpZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKGJhKXt2YXIgbGE9Si5fZW50aXR5Qm91bmRzKGJhKTtpZihDLkRPTS5pbnRlcnNlY3RzQkJveChZLGFhLGxhKSl7dmFyIHdhPTAsQ2E9MDtpZighQy5ET00uaW50ZXJzZWN0c0JCb3goTC54LEwueSxsYSwuNSkpe0NhPVAoYmEuZGF0dW0sYmEuaW5kZXgsYmEuZGF0YXNldCxsYSk7d2E9TWF0aC5hYnMoUy0oSi5faXNWZXJ0aWNhbD9DYS54OkNhLnkpKTt2YXIgeGE9CkouX2lzVmVydGljYWw/bGEueTpsYS54O2xhPXhhKyhKLl9pc1ZlcnRpY2FsP2xhLmhlaWdodDpsYS53aWR0aCk7Q2E9Tj49eGEtLjUmJk48PWxhKy41PzA6TWF0aC5hYnMoTi0oSi5faXNWZXJ0aWNhbD9DYS55OkNhLngpKX1pZih3YTxjYXx8d2E9PT1jYSYmQ2E8ZWEpa2E9YmEsY2E9d2EsZWE9Q2F9fSk7aWYodm9pZCAwIT09a2EpcmV0dXJuIEouX2xpZ2h0d2VpZ2h0UGxvdEVudGl0eVRvUGxvdEVudGl0eShrYSl9KX07Sy5wcm90b3R5cGUuZW50aXRpZXNBdD1mdW5jdGlvbihMKXtyZXR1cm4gdGhpcy5fZW50aXRpZXNJbnRlcnNlY3RpbmcoTC54LEwueSl9O0sucHJvdG90eXBlLl9lbnRpdGllc0ludGVyc2VjdGluZz1mdW5jdGlvbihMLEope3ZhciBQPXRoaXMsUz1bXTt0aGlzLl9nZXRFbnRpdHlTdG9yZSgpLmVudGl0aWVzKCkuZm9yRWFjaChmdW5jdGlvbihOKXtDLkRPTS5pbnRlcnNlY3RzQkJveChMLEosUC5fZW50aXR5Qm91bmRzKE4pKSYmUy5wdXNoKFAuX2xpZ2h0d2VpZ2h0UGxvdEVudGl0eVRvUGxvdEVudGl0eShOKSl9KTsKcmV0dXJuIFN9O0sucHJvdG90eXBlLl91cGRhdGVMZW5ndGhTY2FsZT1mdW5jdGlvbigpe2lmKHRoaXMuX3Byb2plY3RvcnNSZWFkeSgpKXt2YXIgTD10aGlzLmxlbmd0aCgpLnNjYWxlO0wgaW5zdGFuY2VvZiB4LlF1YW50aXRhdGl2ZVNjYWxlJiYoTC5hZGRQYWRkaW5nRXhjZXB0aW9uc1Byb3ZpZGVyKHRoaXMuX2Jhc2VsaW5lVmFsdWVQcm92aWRlciksTC5hZGRJbmNsdWRlZFZhbHVlc1Byb3ZpZGVyKHRoaXMuX2Jhc2VsaW5lVmFsdWVQcm92aWRlcikpfX07Sy5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHk9ZnVuY3Rpb24oKXt2YXIgTD10aGlzO3RoaXMuX2JhclBpeGVsVGhpY2tuZXNzKCk7cmV0dXJuIHRoaXMuX2NvbXB1dGVCYXJQaXhlbFRoaWNrbmVzcy5kb0xvY2tlZChmdW5jdGlvbigpe3JldHVybiBHLnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseS5jYWxsKEwpfSl9O0sucHJvdG90eXBlLl9hZGRpdGlvbmFsUGFpbnQ9ZnVuY3Rpb24oTCl7dmFyIEo9dGhpcyxQPXRoaXMubGVuZ3RoKCkuc2NhbGUuc2NhbGUodGhpcy5iYXNlbGluZVZhbHVlKCkpOwpQPXt4MTp0aGlzLl9pc1ZlcnRpY2FsPzA6UCx5MTp0aGlzLl9pc1ZlcnRpY2FsP1A6MCx4Mjp0aGlzLl9pc1ZlcnRpY2FsP3RoaXMud2lkdGgoKTpQLHkyOnRoaXMuX2lzVmVydGljYWw/UDp0aGlzLmhlaWdodCgpfTt0aGlzLl9nZXRBbmltYXRvcigiYmFzZWxpbmUiKS5hbmltYXRlKHRoaXMuX2Jhc2VsaW5lLFApO3RoaXMuZGF0YXNldHMoKS5mb3JFYWNoKGZ1bmN0aW9uKFMpe3JldHVybiBKLl9sYWJlbENvbmZpZy5nZXQoUykubGFiZWxBcmVhLnNlbGVjdEFsbCgiZyIpLnJlbW92ZSgpfSk7dGhpcy5fbGFiZWxzRW5hYmxlZCYmQy5XaW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3JldHVybiBKLl9kcmF3TGFiZWxzKCl9LEwpfTtLLnByb3RvdHlwZS5nZXRFeHRlbnRzRm9yUHJvcGVydHk9ZnVuY3Rpb24oTCl7dmFyIEo9dGhpcyxQPUcucHJvdG90eXBlLmdldEV4dGVudHNGb3JQcm9wZXJ0eS5jYWxsKHRoaXMsTCk7aWYoIngiPT09TCYmdGhpcy5faXNWZXJ0aWNhbClMPXRoaXMueCgpOwplbHNle2lmKCJ5IiE9PUx8fHRoaXMuX2lzVmVydGljYWwpcmV0dXJuIFA7TD10aGlzLnkoKX1pZighKEwmJkwuc2NhbGUmJkwuc2NhbGUgaW5zdGFuY2VvZiB4LlF1YW50aXRhdGl2ZVNjYWxlKSlyZXR1cm4gUDt2YXIgUz1MLnNjYWxlLE49dGhpcy5fYmFyUGl4ZWxUaGlja25lc3MoKTtyZXR1cm4gUD1QLm1hcChmdW5jdGlvbihUKXtyZXR1cm4gay5leHRlbnQoW1MuaW52ZXJ0KEouX2dldFBvc2l0aW9uQXR0cihTLnNjYWxlKFRbMF0pLE4pKSxTLmludmVydChKLl9nZXRQb3NpdGlvbkF0dHIoUy5zY2FsZShUWzBdKSxOKStOKSxTLmludmVydChKLl9nZXRQb3NpdGlvbkF0dHIoUy5zY2FsZShUWzFdKSxOKSksUy5pbnZlcnQoSi5fZ2V0UG9zaXRpb25BdHRyKFMuc2NhbGUoVFsxXSksTikrTildKX0pfTtLLnByb3RvdHlwZS5fZ2V0UG9zaXRpb25BdHRyPWZ1bmN0aW9uKEwsSil7dGhpcy5faXNWZXJ0aWNhbHx8KEwtPUosSio9LTEpO3N3aXRjaCh0aGlzLl9iYXJBbGlnbm1lbnQpe2Nhc2UgInN0YXJ0IjpyZXR1cm4gTDsKY2FzZSAiZW5kIjpyZXR1cm4gTC1KO2RlZmF1bHQ6cmV0dXJuIEwtSi8yfX07Sy5wcm90b3R5cGUuX2RyYXdMYWJlbHM9ZnVuY3Rpb24oKXt2YXIgTD10aGlzLEo9dGhpcy5fZ2V0RGF0YVRvRHJhdygpLFA9dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCksUz10aGlzLmRhdGFzZXRzKCkuc29tZShmdW5jdGlvbihOKXtyZXR1cm4gSi5nZXQoTikuc29tZShmdW5jdGlvbihULFkpe3JldHVybiBudWxsPT1UPyExOkwuX2RyYXdMYWJlbChULFksTixQKX0pfSk7dGhpcy5faGlkZUJhcnNJZkFueUFyZVRvb1dpZGUmJlMmJnRoaXMuZGF0YXNldHMoKS5mb3JFYWNoKGZ1bmN0aW9uKE4pe3JldHVybiBMLl9sYWJlbENvbmZpZy5nZXQoTikubGFiZWxBcmVhLnNlbGVjdEFsbCgiZyIpLnJlbW92ZSgpfSl9O0sucHJvdG90eXBlLl9kcmF3TGFiZWw9ZnVuY3Rpb24oTCxKLFAsUyl7dmFyIE49dGhpcy5fbGFiZWxDb25maWcuZ2V0KFApLFQ9Ti5sYWJlbEFyZWEsWT1OLm1lYXN1cmVyO049Ti53cml0ZXI7CnZhciBhYT10aGlzLmxlbmd0aCgpLmFjY2Vzc29yLGhhPWFhKEwsSixQKTthYT10aGlzLmxlbmd0aCgpLnNjYWxlO3ZhciBYPW51bGwhPWFhP2FhLnNjYWxlKGhhKTpoYSxjYT1udWxsIT1hYT9hYS5zY2FsZSh0aGlzLmJhc2VsaW5lVmFsdWUoKSk6dGhpcy5iYXNlbGluZVZhbHVlKCksZWE9e3g6Uy54KEwsSixQKSx5OlMueShMLEosUCl9O2FhPXt3aWR0aDpTLndpZHRoKEwsSixQKSxoZWlnaHQ6Uy5oZWlnaHQoTCxKLFApfTtoYT10aGlzLl9sYWJlbEZvcm1hdHRlcihoYSxMLEosUCk7WT1ZLm1lYXN1cmUoaGEpO3ZhciBrYT10aGlzLl9zaG91bGRTaG93TGFiZWxPbkJhcihlYSxhYSxZKTtlYT10aGlzLl9jYWxjdWxhdGVMYWJlbFByb3BlcnRpZXMoZWEsYWEsWSxrYSx0aGlzLl9pc1ZlcnRpY2FsP1g8PWNhOlg8Y2EpO1g9ZWEuY29udGFpbmVyRGltZW5zaW9ucztjYT1lYS5sYWJlbENvbnRhaW5lck9yaWdpbjtlYT1lYS5hbGlnbm1lbnQ7TD1TLmZpbGwoTCxKLFApO1Q9dGhpcy5fY3JlYXRlTGFiZWxDb250YWluZXIoVCwKY2Esa2EsTCk7Ti53cml0ZShoYSxYLndpZHRoLFguaGVpZ2h0LHt4QWxpZ246ZWEueCx5QWxpZ246ZWEueX0sVC5ub2RlKCkpO3JldHVybiB0aGlzLl9pc1ZlcnRpY2FsP2FhLndpZHRoPFkud2lkdGg6YWEuaGVpZ2h0PFkuaGVpZ2h0fTtLLnByb3RvdHlwZS5fc2hvdWxkU2hvd0xhYmVsT25CYXI9ZnVuY3Rpb24oTCxKLFApe2lmKHRoaXMuX2xhYmVsc1Bvc2l0aW9uPT09ZC5MYWJlbHNQb3NpdGlvbi5vdXRzaWRlKXJldHVybiExO0w9dGhpcy5faXNWZXJ0aWNhbD9MLnk6TC54O3ZhciBTPXRoaXMuX2lzVmVydGljYWw/Si5oZWlnaHQ6Si53aWR0aDtKPXRoaXMuX2lzVmVydGljYWw/dGhpcy5oZWlnaHQoKTp0aGlzLndpZHRoKCk7UD10aGlzLl9pc1ZlcnRpY2FsP1AuaGVpZ2h0OlAud2lkdGg7dmFyIE49TCtTO04+Sj9TPUotTDowPkwmJihTPU4pO3JldHVybiBQK0suX0xBQkVMX01BUkdJTl9JTlNJREVfQkFSPD1TfTtLLnByb3RvdHlwZS5fY2FsY3VsYXRlTGFiZWxQcm9wZXJ0aWVzPQpmdW5jdGlvbihMLEosUCxTLE4pe2Z1bmN0aW9uIFQobGEpe3N3aXRjaChsYSl7Y2FzZSAidG9wTGVmdCI6Y2E9WS5faXNWZXJ0aWNhbD8idG9wIjoibGVmdCI7a2ErPUsuX0xBQkVMX01BUkdJTl9JTlNJREVfQkFSO2JhKz1LLl9MQUJFTF9NQVJHSU5fSU5TSURFX0JBUjticmVhaztjYXNlICJjZW50ZXIiOmJhKz0oaGErWCkvMjticmVhaztjYXNlICJib3R0b21SaWdodCI6Y2E9WS5faXNWZXJ0aWNhbD8iYm90dG9tIjoicmlnaHQiLGthLT1LLl9MQUJFTF9NQVJHSU5fSU5TSURFX0JBUixiYSs9ZWEtSy5fTEFCRUxfTUFSR0lOX0lOU0lERV9CQVItWH19dmFyIFk9dGhpcyxhYT10aGlzLl9pc1ZlcnRpY2FsP0wueTpMLngsaGE9dGhpcy5faXNWZXJ0aWNhbD9KLmhlaWdodDpKLndpZHRoLFg9dGhpcy5faXNWZXJ0aWNhbD9QLmhlaWdodDpQLndpZHRoLGNhPSJjZW50ZXIiLGVhPWhhLGthPWFhLGJhPWFhO2lmKFMpc3dpdGNoKHRoaXMuX2xhYmVsc1Bvc2l0aW9uKXtjYXNlIGQuTGFiZWxzUG9zaXRpb24uc3RhcnQ6Tj8KVCgiYm90dG9tUmlnaHQiKTpUKCJ0b3BMZWZ0Iik7YnJlYWs7Y2FzZSBkLkxhYmVsc1Bvc2l0aW9uLm1pZGRsZTpUKCJjZW50ZXIiKTticmVhaztjYXNlIGQuTGFiZWxzUG9zaXRpb24uZW5kOk4/VCgidG9wTGVmdCIpOlQoImJvdHRvbVJpZ2h0Iil9ZWxzZSBOPyhjYT10aGlzLl9pc1ZlcnRpY2FsPyJ0b3AiOiJsZWZ0IixlYT1oYStLLl9MQUJFTF9NQVJHSU5fSU5TSURFX0JBUitYLGthLT1LLl9MQUJFTF9NQVJHSU5fSU5TSURFX0JBUitYLGJhLT1LLl9MQUJFTF9NQVJHSU5fSU5TSURFX0JBUitYKTooY2E9dGhpcy5faXNWZXJ0aWNhbD8iYm90dG9tIjoicmlnaHQiLGVhPWhhK0suX0xBQkVMX01BUkdJTl9JTlNJREVfQkFSK1gsYmErPWhhK0suX0xBQkVMX01BUkdJTl9JTlNJREVfQkFSKTtyZXR1cm57Y29udGFpbmVyRGltZW5zaW9uczp7d2lkdGg6dGhpcy5faXNWZXJ0aWNhbD9KLndpZHRoOmVhLGhlaWdodDp0aGlzLl9pc1ZlcnRpY2FsP2VhOkouaGVpZ2h0fSxsYWJlbENvbnRhaW5lck9yaWdpbjp7eDp0aGlzLl9pc1ZlcnRpY2FsPwpMLng6a2EseTp0aGlzLl9pc1ZlcnRpY2FsP2thOkwueX0sbGFiZWxPcmlnaW46e3g6dGhpcy5faXNWZXJ0aWNhbD9MLngrSi53aWR0aC8yLVAud2lkdGgvMjpiYSx5OnRoaXMuX2lzVmVydGljYWw/YmE6TC55K0ouaGVpZ2h0LzItUC5oZWlnaHQvMn0sYWxpZ25tZW50Ont4OnRoaXMuX2lzVmVydGljYWw/ImNlbnRlciI6Y2EseTp0aGlzLl9pc1ZlcnRpY2FsP2NhOiJjZW50ZXIifX19O0sucHJvdG90eXBlLl9jcmVhdGVMYWJlbENvbnRhaW5lcj1mdW5jdGlvbihMLEosUCxTKXtMPUwuYXBwZW5kKCJnIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrSi54KyIsICIrSi55KyIpIik7UD8oTC5jbGFzc2VkKCJvbi1iYXItbGFiZWwiLCEwKSxQPTEuNipDLkNvbG9yLmNvbnRyYXN0KCJ3aGl0ZSIsUyk8Qy5Db2xvci5jb250cmFzdCgiYmxhY2siLFMpLEwuY2xhc3NlZChQPyJkYXJrLWxhYmVsIjoibGlnaHQtbGFiZWwiLCEwKSk6TC5jbGFzc2VkKCJvZmYtYmFyLWxhYmVsIiwhMCk7CnJldHVybiBMfTtLLnByb3RvdHlwZS5fZ2VuZXJhdGVEcmF3U3RlcHM9ZnVuY3Rpb24oKXt2YXIgTD1bXTtpZih0aGlzLl9hbmltYXRlT25OZXh0UmVuZGVyKCkpe3ZhciBKPXRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpLFA9dGhpcy5sZW5ndGgoKS5zY2FsZS5zY2FsZSh0aGlzLmJhc2VsaW5lVmFsdWUoKSksUz10aGlzLl9pc1ZlcnRpY2FsPyJoZWlnaHQiOiJ3aWR0aCI7Slt0aGlzLl9pc1ZlcnRpY2FsPyJ5IjoieCJdPWZ1bmN0aW9uKCl7cmV0dXJuIFB9O0pbU109ZnVuY3Rpb24oKXtyZXR1cm4gMH07TC5wdXNoKHthdHRyVG9Qcm9qZWN0b3I6SixhbmltYXRvcjp0aGlzLl9nZXRBbmltYXRvcihGLkFuaW1hdG9yLlJFU0VUKX0pfUwucHVzaCh7YXR0clRvUHJvamVjdG9yOnRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpLGFuaW1hdG9yOnRoaXMuX2dldEFuaW1hdG9yKEYuQW5pbWF0b3IuTUFJTil9KTtyZXR1cm4gTH07Sy5wcm90b3R5cGUuX2dlbmVyYXRlQXR0clRvUHJvamVjdG9yPQpmdW5jdGlvbigpe2Z1bmN0aW9uIEwoZWEsa2EsYmEpe3JldHVybiBNYXRoLmFicyhTLWFhKGVhLGthLGJhKSl9dmFyIEo9dGhpcyxQPUcucHJvdG90eXBlLl9nZW5lcmF0ZUF0dHJUb1Byb2plY3Rvci5jYWxsKHRoaXMpLFM9dGhpcy5sZW5ndGgoKS5zY2FsZS5zY2FsZSh0aGlzLmJhc2VsaW5lVmFsdWUoKSksTj10aGlzLl9pc1ZlcnRpY2FsPyJ5IjoieCIsVD10aGlzLl9pc1ZlcnRpY2FsPyJ4IjoieSIsWT1ELlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMucG9zaXRpb24oKSksYWE9RC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLmxlbmd0aCgpKSxoYT1QW0suX0JBUl9USElDS05FU1NfS0VZXSxYPVAuZ2FwLGNhPW51bGw9PVg/aGE6ZnVuY3Rpb24oZWEsa2EsYmEpe3JldHVybiBoYShlYSxrYSxiYSktWChlYSxrYSxiYSl9O1Aud2lkdGg9dGhpcy5faXNWZXJ0aWNhbD9jYTpMO1AuaGVpZ2h0PXRoaXMuX2lzVmVydGljYWw/TDpjYTtQW05dPWZ1bmN0aW9uKGVhLGthLGJhKXtlYT0KYWEoZWEsa2EsYmEpO3JldHVybiBlYT5TP1M6ZWF9O1BbVF09ZnVuY3Rpb24oZWEsa2EsYmEpe3JldHVybiBKLl9nZXRQb3NpdGlvbkF0dHIoWShlYSxrYSxiYSksaGEoZWEsa2EsYmEpKX07cmV0dXJuIFB9O0sucHJvdG90eXBlLl91cGRhdGVUaGlja25lc3NBdHRyPWZ1bmN0aW9uKCl7dmFyIEw9dGhpcyxKPXRoaXMucG9zaXRpb24oKSxQPXRoaXMuYmFyRW5kKCk7bnVsbCE9SiYmbnVsbCE9UD8odGhpcy5fZml4ZWRCYXJQaXhlbFRoaWNrbmVzcz0hMSx0aGlzLmF0dHIoSy5fQkFSX1RISUNLTkVTU19LRVksZnVuY3Rpb24oUyxOLFQpe3ZhciBZPUouYWNjZXNzb3IoUyxOLFQpO1M9UC5hY2Nlc3NvcihTLE4sVCk7WT1KLnNjYWxlP0ouc2NhbGUuc2NhbGUoWSk6WTtTPVAuc2NhbGU/UC5zY2FsZS5zY2FsZShTKTpTO3JldHVybiBNYXRoLmFicyhTLVkpfSkpOih0aGlzLl9maXhlZEJhclBpeGVsVGhpY2tuZXNzPSEwLHRoaXMuYXR0cihLLl9CQVJfVEhJQ0tORVNTX0tFWSxmdW5jdGlvbigpe3JldHVybiBMLl9iYXJQaXhlbFRoaWNrbmVzcygpfSkpfTsKSy5wcm90b3R5cGUuX2JhclBpeGVsVGhpY2tuZXNzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2ZpeGVkQmFyUGl4ZWxUaGlja25lc3M/dGhpcy5fcHJvamVjdG9yc1JlYWR5KCk/dGhpcy5fY29tcHV0ZUJhclBpeGVsVGhpY2tuZXNzKHRoaXMucG9zaXRpb24oKSx0aGlzLmRhdGFzZXRzKCksdGhpcy5faXNWZXJ0aWNhbD90aGlzLndpZHRoKCk6dGhpcy5oZWlnaHQoKSk6MDowfTtLLnByb3RvdHlwZS5lbnRpdGllcz1mdW5jdGlvbihMKXt2b2lkIDA9PT1MJiYoTD10aGlzLmRhdGFzZXRzKCkpO3JldHVybiB0aGlzLl9wcm9qZWN0b3JzUmVhZHkoKT9HLnByb3RvdHlwZS5lbnRpdGllcy5jYWxsKHRoaXMsTCk6W119O0sucHJvdG90eXBlLl9lbnRpdHlCb3VuZHM9ZnVuY3Rpb24oTCl7cmV0dXJuIHRoaXMuX3BpeGVsQm91bmRzKEwuZGF0dW0sTC5pbmRleCxMLmRhdGFzZXQpfTtLLnByb3RvdHlwZS5fcGl4ZWxCb3VuZHM9ZnVuY3Rpb24oTCxKLFApe3ZhciBTPXRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpOwpyZXR1cm57eDpTLngoTCxKLFApLHk6Uy55KEwsSixQKSx3aWR0aDpTLndpZHRoKEwsSixQKSxoZWlnaHQ6Uy5oZWlnaHQoTCxKLFApfX07Sy5wcm90b3R5cGUuX3BpeGVsUG9pbnQ9ZnVuY3Rpb24oTCxKLFApe3ZhciBTPXRoaXMuX3BpeGVsQm91bmRzKEwsSixQKTtMPSh0aGlzLl9pc1ZlcnRpY2FsP0QuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy55KCkpOkQuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy54KCkpKShMLEosUCk7Sj0odGhpcy5faXNWZXJ0aWNhbD90aGlzLnkoKS5zY2FsZTp0aGlzLngoKS5zY2FsZSkuc2NhbGUodGhpcy5iYXNlbGluZVZhbHVlKCkpO3JldHVybiB0aGlzLl9waXhlbFBvaW50QmFyKEwsSixTKX07Sy5wcm90b3R5cGUuX3BpeGVsUG9pbnRCYXI9ZnVuY3Rpb24oTCxKLFApe2lmKHRoaXMuX2lzVmVydGljYWwpe3ZhciBTPVAueCtQLndpZHRoLzI7TD1MPD1KP1AueTpQLnkrUC5oZWlnaHR9ZWxzZSBTPUw+PUo/UC54K1Aud2lkdGg6UC54LEw9UC55K1AuaGVpZ2h0LwoyO3JldHVybnt4OlMseTpMfX07Sy5wcm90b3R5cGUuX3VuaW5zdGFsbFNjYWxlRm9yS2V5PWZ1bmN0aW9uKEwsSil7Ry5wcm90b3R5cGUuX3VuaW5zdGFsbFNjYWxlRm9yS2V5LmNhbGwodGhpcyxMLEopfTtLLnByb3RvdHlwZS5fZ2V0RGF0YVRvRHJhdz1mdW5jdGlvbigpe3ZhciBMPXRoaXMsSj1uZXcgQy5NYXAsUD10aGlzLl9nZXRBdHRyVG9Qcm9qZWN0b3IoKSxTPXRoaXMud2lkdGgoKSxOPXRoaXMuaGVpZ2h0KCk7dGhpcy5kYXRhc2V0cygpLmZvckVhY2goZnVuY3Rpb24oVCl7dmFyIFk9VC5kYXRhKCkubWFwKGZ1bmN0aW9uKGFhLGhhKXtyZXR1cm4gTC5faXNEYXR1bU9uU2NyZWVuKFAsUyxOLGFhLGhhLFQpP2FhOm51bGx9KTtKLnNldChULFkpfSk7cmV0dXJuIEp9O0sucHJvdG90eXBlLl9pc0RhdHVtT25TY3JlZW49ZnVuY3Rpb24oTCxKLFAsUyxOLFQpe3ZhciBZPUwueChTLE4sVCksYWE9TC55KFMsTixUKSxoYT1MLndpZHRoKFMsTixUKTtMPUwuaGVpZ2h0KFMsTixUKTsKcmV0dXJuIEMuTWF0aC5pc1ZhbGlkTnVtYmVyKFkpJiZDLk1hdGguaXNWYWxpZE51bWJlcihhYSkmJkMuTWF0aC5pc1ZhbGlkTnVtYmVyKGhhKSYmQy5NYXRoLmlzVmFsaWROdW1iZXIoTCk/Qy5NYXRoLmJvdW5kc0ludGVyc2VjdHMoWSxhYSxoYSxMLEosUCk6ITF9O3JldHVybiBLfShmLlhZUGxvdCk7Qi5fQkFSX1RISUNLTkVTU19SQVRJTz0uOTU7Qi5fU0lOR0xFX0JBUl9ESU1FTlNJT05fUkFUSU89LjQ7Qi5fQkFSX0FSRUFfQ0xBU1M9ImJhci1hcmVhIjtCLl9CQVJfRU5EX0tFWT0iYmFyRW5kIjtCLl9CQVJfVEhJQ0tORVNTX0tFWT0id2lkdGgiO0IuX0xBQkVMX0FSRUFfQ0xBU1M9ImJhci1sYWJlbC10ZXh0LWFyZWEiO0IuX0xBQkVMX01BUkdJTl9JTlNJREVfQkFSPTEwO2QuQmFyPUJ9LGZ1bmN0aW9uKGMsZCxmKXt2YXIgZz10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8ZnVuY3Rpb24odixBKXtmdW5jdGlvbiB5KCl7dGhpcy5jb25zdHJ1Y3Rvcj12fWZvcih2YXIgeCBpbiBBKUEuaGFzT3duUHJvcGVydHkoeCkmJgoodlt4XT1BW3hdKTt2LnByb3RvdHlwZT1udWxsPT09QT9PYmplY3QuY3JlYXRlKEEpOih5LnByb3RvdHlwZT1BLnByb3RvdHlwZSxuZXcgeSl9LGw9ZigxKSxrPWYoNSksbT1mKDgpLHA9ZigzKSxxPWYoMCk7Yz1mKDEwKTt2YXIgcj1mKDIyKTtkLlRpbWVJbnRlcnZhbD1jLm1ha2VFbnVtKCJzZWNvbmQgbWludXRlIGhvdXIgZGF5IHdlZWsgbW9udGggeWVhciIuc3BsaXQoIiAiKSk7ZC5UaW1lQXhpc09yaWVudGF0aW9uPWMubWFrZUVudW0oWyJ0b3AiLCJib3R0b20iXSk7ZC5UaWVyTGFiZWxQb3NpdGlvbj1jLm1ha2VFbnVtKFsiYmV0d2VlbiIsImNlbnRlciJdKTtmPWZ1bmN0aW9uKHYpe2Z1bmN0aW9uIEEoeSx4KXt5PXYuY2FsbCh0aGlzLHkseCl8fHRoaXM7eS5fbWF4VGltZUludGVydmFsUHJlY2lzaW9uPW51bGw7eS5fdGllckxhYmVsUG9zaXRpb25zPVtdO3kuYWRkQ2xhc3MoInRpbWUtYXhpcyIpO3kudGlja0xhYmVsUGFkZGluZyg1KTt5LmF4aXNDb25maWd1cmF0aW9ucyhBLl9ERUZBVUxUX1RJTUVfQVhJU19DT05GSUdVUkFUSU9OUyk7CnkuYW5ub3RhdGlvbkZvcm1hdHRlcihtLnRpbWUoIiVhICViICVkLCAlWSIpKTtyZXR1cm4geX1nKEEsdik7QS5wcm90b3R5cGUudGllckxhYmVsUG9zaXRpb25zPWZ1bmN0aW9uKHkpe2lmKG51bGw9PXkpcmV0dXJuIHRoaXMuX3RpZXJMYWJlbFBvc2l0aW9ucztpZigheS5ldmVyeShmdW5jdGlvbih4KXtyZXR1cm4iYmV0d2VlbiI9PT14LnRvTG93ZXJDYXNlKCl8fCJjZW50ZXIiPT09eC50b0xvd2VyQ2FzZSgpfSkpdGhyb3cgRXJyb3IoIlVuc3VwcG9ydGVkIHBvc2l0aW9uIGZvciB0aWVyIGxhYmVscyIpO3RoaXMuX3RpZXJMYWJlbFBvc2l0aW9ucz15O3RoaXMucmVkcmF3KCk7cmV0dXJuIHRoaXN9O0EucHJvdG90eXBlLm1heFRpbWVJbnRlcnZhbFByZWNpc2lvbj1mdW5jdGlvbih5KXtpZihudWxsPT15KXJldHVybiB0aGlzLl9tYXhUaW1lSW50ZXJ2YWxQcmVjaXNpb247dGhpcy5fbWF4VGltZUludGVydmFsUHJlY2lzaW9uPXk7dGhpcy5yZWRyYXcoKTtyZXR1cm4gdGhpc307QS5wcm90b3R5cGUuY3VycmVudEF4aXNDb25maWd1cmF0aW9uPQpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wb3NzaWJsZVRpbWVBeGlzQ29uZmlndXJhdGlvbnNbdGhpcy5fbW9zdFByZWNpc2VDb25maWdJbmRleF19O0EucHJvdG90eXBlLmF4aXNDb25maWd1cmF0aW9ucz1mdW5jdGlvbih5KXtpZihudWxsIT15KXt0aGlzLl9wb3NzaWJsZVRpbWVBeGlzQ29uZmlndXJhdGlvbnM9eTt0aGlzLl9udW1UaWVycz1xLk1hdGgubWF4KHRoaXMuX3Bvc3NpYmxlVGltZUF4aXNDb25maWd1cmF0aW9ucy5tYXAoZnVuY3Rpb24oRil7cmV0dXJuIEYubGVuZ3RofSksMCk7dGhpcy5faXNBbmNob3JlZCYmdGhpcy5fc2V0dXBEb21FbGVtZW50cygpO3k9dGhpcy50aWVyTGFiZWxQb3NpdGlvbnMoKTtmb3IodmFyIHg9W10sQz0wO0M8dGhpcy5fbnVtVGllcnM7QysrKXgucHVzaCh5W0NdfHwiYmV0d2VlbiIpO3RoaXMudGllckxhYmVsUG9zaXRpb25zKHgpO3RoaXMucmVkcmF3KCl9fTtBLnByb3RvdHlwZS5fZ2V0TW9zdFByZWNpc2VDb25maWd1cmF0aW9uSW5kZXg9CmZ1bmN0aW9uKCl7dmFyIHk9dGhpcyx4PXRoaXMuX3Bvc3NpYmxlVGltZUF4aXNDb25maWd1cmF0aW9ucy5sZW5ndGg7dGhpcy5fcG9zc2libGVUaW1lQXhpc0NvbmZpZ3VyYXRpb25zLmZvckVhY2goZnVuY3Rpb24oQyxGKXtGPHgmJkMuZXZlcnkoZnVuY3Rpb24oRCl7cmV0dXJuIHkuX2NoZWNrVGltZUF4aXNUaWVyQ29uZmlndXJhdGlvbihEKX0pJiYoeD1GKX0pO3g9PT10aGlzLl9wb3NzaWJsZVRpbWVBeGlzQ29uZmlndXJhdGlvbnMubGVuZ3RoJiYocS5XaW5kb3cud2Fybigiem9vbWVkIG91dCB0b28gZmFyOiBjb3VsZCBub3QgZmluZCBzdWl0YWJsZSBpbnRlcnZhbCB0byBkaXNwbGF5IGxhYmVscyIpLC0teCk7cmV0dXJuIHh9O0EucHJvdG90eXBlLm9yaWVudGF0aW9uPWZ1bmN0aW9uKHkpe2lmKHkmJigicmlnaHQiPT09eS50b0xvd2VyQ2FzZSgpfHwibGVmdCI9PT15LnRvTG93ZXJDYXNlKCkpKXRocm93IEVycm9yKHkrIiBpcyBub3QgYSBzdXBwb3J0ZWQgb3JpZW50YXRpb24gZm9yIFRpbWVBeGlzIC0gb25seSBob3Jpem9udGFsIG9yaWVudGF0aW9ucyBhcmUgc3VwcG9ydGVkIik7CnJldHVybiB2LnByb3RvdHlwZS5vcmllbnRhdGlvbi5jYWxsKHRoaXMseSl9O0EucHJvdG90eXBlLl9jb21wdXRlSGVpZ2h0PWZ1bmN0aW9uKCl7dmFyIHk9dGhpcy5fbWVhc3VyZXIubWVhc3VyZSgpLmhlaWdodDt0aGlzLl90aWVySGVpZ2h0cz1bXTtmb3IodmFyIHg9MDt4PHRoaXMuX251bVRpZXJzO3grKyl0aGlzLl90aWVySGVpZ2h0cy5wdXNoKHkrdGhpcy50aWNrTGFiZWxQYWRkaW5nKCkrKCJiZXR3ZWVuIj09PXRoaXMuX3RpZXJMYWJlbFBvc2l0aW9uc1t4XT8wOnRoaXMuX21heExhYmVsVGlja0xlbmd0aCgpKSk7cmV0dXJuIGwuc3VtKHRoaXMuX3RpZXJIZWlnaHRzKX07QS5wcm90b3R5cGUuX2dldEludGVydmFsTGVuZ3RoPWZ1bmN0aW9uKHkpe3ZhciB4PXRoaXMuX3NjYWxlLmRvbWFpbigpWzBdO3k9cC5UaW1lLnRpbWVJbnRlcnZhbFRvRDNUaW1lKHkuaW50ZXJ2YWwpLm9mZnNldCh4LHkuc3RlcCk7cmV0dXJuIHk+dGhpcy5fc2NhbGUuZG9tYWluKClbMV0/dGhpcy53aWR0aCgpOgpNYXRoLmFicyh0aGlzLl9zY2FsZS5zY2FsZSh5KS10aGlzLl9zY2FsZS5zY2FsZSh4KSl9O0EucHJvdG90eXBlLl9tYXhXaWR0aEZvckludGVydmFsPWZ1bmN0aW9uKHkpe3JldHVybiB0aGlzLl9tZWFzdXJlci5tZWFzdXJlKHkuZm9ybWF0dGVyKEEuX0xPTkdfREFURSkpLndpZHRofTtBLnByb3RvdHlwZS5fY2hlY2tUaW1lQXhpc1RpZXJDb25maWd1cmF0aW9uPWZ1bmN0aW9uKHkpe2lmKG51bGwhPXRoaXMuX21heFRpbWVJbnRlcnZhbFByZWNpc2lvbil7dmFyIHg9QS5fU09SVEVEX1RJTUVfSU5URVJWQUxfSU5ERVhbdGhpcy5fbWF4VGltZUludGVydmFsUHJlY2lzaW9uXSxDPUEuX1NPUlRFRF9USU1FX0lOVEVSVkFMX0lOREVYW3kuaW50ZXJ2YWxdO2lmKG51bGwhPXgmJm51bGwhPUMmJkM8eClyZXR1cm4hMX14PXRoaXMuX21heFdpZHRoRm9ySW50ZXJ2YWwoeSkrMip0aGlzLnRpY2tMYWJlbFBhZGRpbmcoKTtyZXR1cm4gTWF0aC5taW4odGhpcy5fZ2V0SW50ZXJ2YWxMZW5ndGgoeSksCnRoaXMud2lkdGgoKSk+PXh9O0EucHJvdG90eXBlLl9zaXplRnJvbU9mZmVyPWZ1bmN0aW9uKHkseCl7dmFyIEM9di5wcm90b3R5cGUuX3NpemVGcm9tT2ZmZXIuY2FsbCh0aGlzLHkseCk7eT10aGlzLl90aWVySGVpZ2h0cy5yZWR1Y2UoZnVuY3Rpb24oRixEKXtyZXR1cm4gRitEPkMuaGVpZ2h0P0Y6RitEfSk7eD10aGlzLm1hcmdpbigpKyh0aGlzLmFubm90YXRpb25zRW5hYmxlZCgpP3RoaXMuYW5ub3RhdGlvblRpZXJDb3VudCgpKnRoaXMuX2Fubm90YXRpb25UaWVySGVpZ2h0KCk6MCk7Qy5oZWlnaHQ9TWF0aC5taW4oQy5oZWlnaHQseSt4KTtyZXR1cm4gQ307QS5wcm90b3R5cGUuX3NldHVwPWZ1bmN0aW9uKCl7di5wcm90b3R5cGUuX3NldHVwLmNhbGwodGhpcyk7dGhpcy5fc2V0dXBEb21FbGVtZW50cygpfTtBLnByb3RvdHlwZS5fc2V0dXBEb21FbGVtZW50cz1mdW5jdGlvbigpe3RoaXMuY29udGVudCgpLnNlbGVjdEFsbCgiLiIrQS5USU1FX0FYSVNfVElFUl9DTEFTUykucmVtb3ZlKCk7CnRoaXMuX3RpZXJMYWJlbENvbnRhaW5lcnM9W107dGhpcy5fdGllck1hcmtDb250YWluZXJzPVtdO3RoaXMuX3RpZXJCYXNlbGluZXM9W107dGhpcy5fdGlja0xhYmVsQ29udGFpbmVyLnJlbW92ZSgpO3RoaXMuX2Jhc2VsaW5lLnJlbW92ZSgpO2Zvcih2YXIgeT0wO3k8dGhpcy5fbnVtVGllcnM7Kyt5KXt2YXIgeD10aGlzLmNvbnRlbnQoKS5hcHBlbmQoImciKS5jbGFzc2VkKEEuVElNRV9BWElTX1RJRVJfQ0xBU1MsITApO3RoaXMuX3RpZXJMYWJlbENvbnRhaW5lcnMucHVzaCh4LmFwcGVuZCgiZyIpLmNsYXNzZWQoci5BeGlzLlRJQ0tfTEFCRUxfQ0xBU1MrIi1jb250YWluZXIiLCEwKSk7dGhpcy5fdGllck1hcmtDb250YWluZXJzLnB1c2goeC5hcHBlbmQoImciKS5jbGFzc2VkKHIuQXhpcy5USUNLX01BUktfQ0xBU1MrIi1jb250YWluZXIiLCEwKSk7dGhpcy5fdGllckJhc2VsaW5lcy5wdXNoKHguYXBwZW5kKCJsaW5lIikuY2xhc3NlZCgiYmFzZWxpbmUiLCEwKSl9eT1uZXcgay5TdmdDb250ZXh0KHRoaXMuX3RpZXJMYWJlbENvbnRhaW5lcnNbMF0ubm9kZSgpKTsKdGhpcy5fbWVhc3VyZXI9bmV3IGsuQ2FjaGVNZWFzdXJlcih5KX07QS5wcm90b3R5cGUuX2dldFRpY2tJbnRlcnZhbFZhbHVlcz1mdW5jdGlvbih5KXtyZXR1cm4gdGhpcy5fc2NhbGUudGlja0ludGVydmFsKHkuaW50ZXJ2YWwseS5zdGVwKX07QS5wcm90b3R5cGUuX2dldFRpY2tWYWx1ZXM9ZnVuY3Rpb24oKXt2YXIgeT10aGlzO3JldHVybiB0aGlzLl9wb3NzaWJsZVRpbWVBeGlzQ29uZmlndXJhdGlvbnNbdGhpcy5fbW9zdFByZWNpc2VDb25maWdJbmRleF0ucmVkdWNlKGZ1bmN0aW9uKHgsQyl7cmV0dXJuIHguY29uY2F0KHkuX2dldFRpY2tJbnRlcnZhbFZhbHVlcyhDKSl9LFtdKX07QS5wcm90b3R5cGUuX2NsZWFuVGllcnM9ZnVuY3Rpb24oKXtmb3IodmFyIHk9MDt5PHRoaXMuX3RpZXJMYWJlbENvbnRhaW5lcnMubGVuZ3RoO3krKyl0aGlzLl90aWVyTGFiZWxDb250YWluZXJzW3ldLnNlbGVjdEFsbCgiLiIrci5BeGlzLlRJQ0tfTEFCRUxfQ0xBU1MpLnJlbW92ZSgpLHRoaXMuX3RpZXJNYXJrQ29udGFpbmVyc1t5XS5zZWxlY3RBbGwoIi4iKwpyLkF4aXMuVElDS19NQVJLX0NMQVNTKS5yZW1vdmUoKSx0aGlzLl90aWVyQmFzZWxpbmVzW3ldLnN0eWxlKCJ2aXNpYmlsaXR5IiwiaGlkZGVuIil9O0EucHJvdG90eXBlLl9nZXRUaWNrVmFsdWVzRm9yQ29uZmlndXJhdGlvbj1mdW5jdGlvbih5KXt5PXRoaXMuX3NjYWxlLnRpY2tJbnRlcnZhbCh5LmludGVydmFsLHkuc3RlcCk7dmFyIHg9dGhpcy5fc2NhbGUuZG9tYWluKCksQz15Lm1hcChmdW5jdGlvbihGKXtyZXR1cm4gRi52YWx1ZU9mKCl9KTstMT09PUMuaW5kZXhPZih4WzBdLnZhbHVlT2YoKSkmJnkudW5zaGlmdCh4WzBdKTstMT09PUMuaW5kZXhPZih4WzFdLnZhbHVlT2YoKSkmJnkucHVzaCh4WzFdKTtyZXR1cm4geX07QS5wcm90b3R5cGUuX3JlbmRlclRpZXJMYWJlbHM9ZnVuY3Rpb24oeSx4LEMpe3ZhciBGPXRoaXMsRD10aGlzLl9nZXRUaWNrVmFsdWVzRm9yQ29uZmlndXJhdGlvbih4KSxCPVtdOyJiZXR3ZWVuIj09PXRoaXMuX3RpZXJMYWJlbFBvc2l0aW9uc1tDXSYmCjE9PT14LnN0ZXA/RC5tYXAoZnVuY3Rpb24oUCxTKXtTKzE+PUQubGVuZ3RofHxCLnB1c2gobmV3IERhdGUoKERbUysxXS52YWx1ZU9mKCktRFtTXS52YWx1ZU9mKCkpLzIrRFtTXS52YWx1ZU9mKCkpKX0pOkI9RDt5PXkuc2VsZWN0QWxsKCIuIityLkF4aXMuVElDS19MQUJFTF9DTEFTUykuZGF0YShCLGZ1bmN0aW9uKFApe3JldHVybiBTdHJpbmcoUC52YWx1ZU9mKCkpfSk7dmFyIEc9eS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoci5BeGlzLlRJQ0tfTEFCRUxfQ0xBU1MsITApO0cuYXBwZW5kKCJ0ZXh0Iik7dmFyIEs9ImNlbnRlciI9PT10aGlzLl90aWVyTGFiZWxQb3NpdGlvbnNbQ118fDE9PT14LnN0ZXA/MDp0aGlzLnRpY2tMYWJlbFBhZGRpbmcoKTt2YXIgTD0iYm90dG9tIj09PXRoaXMub3JpZW50YXRpb24oKT9sLnN1bSh0aGlzLl90aWVySGVpZ2h0cy5zbGljZSgwLEMrMSkpLXRoaXMudGlja0xhYmVsUGFkZGluZygpOiJjZW50ZXIiPT09dGhpcy5fdGllckxhYmVsUG9zaXRpb25zW0NdPwp0aGlzLmhlaWdodCgpLWwuc3VtKHRoaXMuX3RpZXJIZWlnaHRzLnNsaWNlKDAsQykpLXRoaXMudGlja0xhYmVsUGFkZGluZygpLXRoaXMuX21heExhYmVsVGlja0xlbmd0aCgpOnRoaXMuaGVpZ2h0KCktbC5zdW0odGhpcy5fdGllckhlaWdodHMuc2xpY2UoMCxDKSktdGhpcy50aWNrTGFiZWxQYWRkaW5nKCk7Rz15Lm1lcmdlKEcpO3ZhciBKPUcuc2VsZWN0QWxsKCJ0ZXh0Iik7MDxKLnNpemUoKSYmSi5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitLKyIsIitMKyIpIik7eS5leGl0KCkucmVtb3ZlKCk7Ry5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKFApe3JldHVybiJ0cmFuc2xhdGUoIitGLl9zY2FsZS5zY2FsZShQKSsiLDApIn0pO0M9ImNlbnRlciI9PT10aGlzLl90aWVyTGFiZWxQb3NpdGlvbnNbQ118fDE9PT14LnN0ZXA/Im1pZGRsZSI6InN0YXJ0IjtHLnNlbGVjdEFsbCgidGV4dCIpLnRleHQoeC5mb3JtYXR0ZXIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsQyl9O0EucHJvdG90eXBlLl9yZW5kZXJUaWNrTWFya3M9CmZ1bmN0aW9uKHkseCl7eT10aGlzLl90aWVyTWFya0NvbnRhaW5lcnNbeF0uc2VsZWN0QWxsKCIuIityLkF4aXMuVElDS19NQVJLX0NMQVNTKS5kYXRhKHkpO3ZhciBDPXkuZW50ZXIoKS5hcHBlbmQoImxpbmUiKS5jbGFzc2VkKHIuQXhpcy5USUNLX01BUktfQ0xBU1MsITApLm1lcmdlKHkpLEY9dGhpcy5fZ2VuZXJhdGVUaWNrTWFya0F0dHJIYXNoKCksRD10aGlzLl90aWVySGVpZ2h0cy5zbGljZSgwLHgpLnJlZHVjZShmdW5jdGlvbihCLEcpe3JldHVybiBCK0d9LDApOyJib3R0b20iPT09dGhpcy5vcmllbnRhdGlvbigpPyhGLnkxPUQsRi55Mj1EKygiY2VudGVyIj09PXRoaXMuX3RpZXJMYWJlbFBvc2l0aW9uc1t4XT90aGlzLmlubmVyVGlja0xlbmd0aCgpOnRoaXMuX3RpZXJIZWlnaHRzW3hdKSk6KEYueTE9dGhpcy5oZWlnaHQoKS1ELEYueTI9dGhpcy5oZWlnaHQoKS0oRCsoImNlbnRlciI9PT10aGlzLl90aWVyTGFiZWxQb3NpdGlvbnNbeF0/dGhpcy5pbm5lclRpY2tMZW5ndGgoKToKdGhpcy5fdGllckhlaWdodHNbeF0pKSk7Qy5hdHRycyhGKTsiYm90dG9tIj09PXRoaXMub3JpZW50YXRpb24oKT8oRi55MT1ELEYueTI9RCsoImNlbnRlciI9PT10aGlzLl90aWVyTGFiZWxQb3NpdGlvbnNbeF0/dGhpcy5lbmRUaWNrTGVuZ3RoKCk6dGhpcy5fdGllckhlaWdodHNbeF0pKTooRi55MT10aGlzLmhlaWdodCgpLUQsRi55Mj10aGlzLmhlaWdodCgpLShEKygiY2VudGVyIj09PXRoaXMuX3RpZXJMYWJlbFBvc2l0aW9uc1t4XT90aGlzLmVuZFRpY2tMZW5ndGgoKTp0aGlzLl90aWVySGVpZ2h0c1t4XSkpKTtsLnNlbGVjdChDLm5vZGVzKClbMF0pLmF0dHJzKEYpO2wuc2VsZWN0KEMubm9kZXMoKVtDLnNpemUoKS0xXSkuYXR0cnMoRik7bC5zZWxlY3QoQy5ub2RlcygpWzBdKS5jbGFzc2VkKHIuQXhpcy5FTkRfVElDS19NQVJLX0NMQVNTLCEwKTtsLnNlbGVjdChDLm5vZGVzKClbQy5zaXplKCktMV0pLmNsYXNzZWQoci5BeGlzLkVORF9USUNLX01BUktfQ0xBU1MsITApO3kuZXhpdCgpLnJlbW92ZSgpfTsKQS5wcm90b3R5cGUuX3JlbmRlckxhYmVsbGVzc1RpY2tNYXJrcz1mdW5jdGlvbih5KXt5PXRoaXMuX3RpY2tNYXJrQ29udGFpbmVyLnNlbGVjdEFsbCgiLiIrci5BeGlzLlRJQ0tfTUFSS19DTEFTUykuZGF0YSh5KTt2YXIgeD15LmVudGVyKCkuYXBwZW5kKCJsaW5lIikuY2xhc3NlZChyLkF4aXMuVElDS19NQVJLX0NMQVNTLCEwKS5tZXJnZSh5KSxDPXRoaXMuX2dlbmVyYXRlVGlja01hcmtBdHRySGFzaCgpO0MueTI9ImJvdHRvbSI9PT10aGlzLm9yaWVudGF0aW9uKCk/dGhpcy50aWNrTGFiZWxQYWRkaW5nKCk6dGhpcy5oZWlnaHQoKS10aGlzLnRpY2tMYWJlbFBhZGRpbmcoKTt4LmF0dHJzKEMpO3kuZXhpdCgpLnJlbW92ZSgpfTtBLnByb3RvdHlwZS5fZ2VuZXJhdGVMYWJlbGxlc3NUaWNrcz1mdW5jdGlvbigpe3JldHVybiAxPnRoaXMuX21vc3RQcmVjaXNlQ29uZmlnSW5kZXg/W106dGhpcy5fZ2V0VGlja0ludGVydmFsVmFsdWVzKHRoaXMuX3Bvc3NpYmxlVGltZUF4aXNDb25maWd1cmF0aW9uc1t0aGlzLl9tb3N0UHJlY2lzZUNvbmZpZ0luZGV4LQoxXVswXSl9O0EucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5PWZ1bmN0aW9uKCl7dmFyIHk9dGhpczt0aGlzLl9tb3N0UHJlY2lzZUNvbmZpZ0luZGV4PXRoaXMuX2dldE1vc3RQcmVjaXNlQ29uZmlndXJhdGlvbkluZGV4KCk7dmFyIHg9dGhpcy5fcG9zc2libGVUaW1lQXhpc0NvbmZpZ3VyYXRpb25zW3RoaXMuX21vc3RQcmVjaXNlQ29uZmlnSW5kZXhdO3RoaXMuX2NsZWFuVGllcnMoKTt4LmZvckVhY2goZnVuY3Rpb24oRyxLKXtyZXR1cm4geS5fcmVuZGVyVGllckxhYmVscyh5Ll90aWVyTGFiZWxDb250YWluZXJzW0tdLEcsSyl9KTtmb3IodmFyIEM9eC5tYXAoZnVuY3Rpb24oRyl7cmV0dXJuIHkuX2dldFRpY2tWYWx1ZXNGb3JDb25maWd1cmF0aW9uKEcpfSksRj0wLEQ9MDtEPE1hdGgubWF4KHgubGVuZ3RoLDEpOysrRCl7dmFyIEI9dGhpcy5fZ2VuZXJhdGVCYXNlbGluZUF0dHJIYXNoKCk7Qi55MSs9ImJvdHRvbSI9PT10aGlzLm9yaWVudGF0aW9uKCk/RjotRjtCLnkyPUIueTE7CnRoaXMuX3RpZXJCYXNlbGluZXNbRF0uYXR0cnMoQikuc3R5bGUoInZpc2liaWxpdHkiLCJpbmhlcml0Iik7Ris9dGhpcy5fdGllckhlaWdodHNbRF19Rj1bXTtEPXRoaXMuX3NjYWxlLmRvbWFpbigpO0Q9dGhpcy5fc2NhbGUuc2NhbGUoRFsxXSktdGhpcy5fc2NhbGUuc2NhbGUoRFswXSk7MS41KnRoaXMuX2dldEludGVydmFsTGVuZ3RoKHhbMF0pPj1EJiYoRj10aGlzLl9nZW5lcmF0ZUxhYmVsbGVzc1RpY2tzKCkpO3RoaXMuX3JlbmRlckxhYmVsbGVzc1RpY2tNYXJrcyhGKTt0aGlzLl9oaWRlT3ZlcmZsb3dpbmdUaWVycygpO2ZvcihEPTA7RDx4Lmxlbmd0aDsrK0QpdGhpcy5fcmVuZGVyVGlja01hcmtzKENbRF0sRCksdGhpcy5faGlkZU92ZXJsYXBwaW5nQW5kQ3V0T2ZmTGFiZWxzKEQpO3RoaXMuYW5ub3RhdGlvbnNFbmFibGVkKCk/dGhpcy5fZHJhd0Fubm90YXRpb25zKCk6dGhpcy5fcmVtb3ZlQW5ub3RhdGlvbnMoKTtyZXR1cm4gdGhpc307QS5wcm90b3R5cGUuX2hpZGVPdmVyZmxvd2luZ1RpZXJzPQpmdW5jdGlvbigpe3ZhciB5PXRoaXMseD10aGlzLmhlaWdodCgpLEM9MDt0aGlzLmNvbnRlbnQoKS5zZWxlY3RBbGwoIi4iK0EuVElNRV9BWElTX1RJRVJfQ0xBU1MpLmF0dHIoInZpc2liaWxpdHkiLGZ1bmN0aW9uKEYsRCl7Qys9eS5fdGllckhlaWdodHNbRF07cmV0dXJuIEM8PXg/ImluaGVyaXQiOiJoaWRkZW4ifSl9O0EucHJvdG90eXBlLl9oaWRlT3ZlcmxhcHBpbmdBbmRDdXRPZmZMYWJlbHM9ZnVuY3Rpb24oeSl7ZnVuY3Rpb24geChHKXtyZXR1cm4gTWF0aC5mbG9vcihGLmxlZnQpPD1NYXRoLmNlaWwoRy5sZWZ0KSYmTWF0aC5mbG9vcihGLnRvcCk8PU1hdGguY2VpbChHLnRvcCkmJk1hdGguZmxvb3IoRy5yaWdodCk8PU1hdGguY2VpbChGLmxlZnQrQy53aWR0aCgpKSYmTWF0aC5mbG9vcihHLmJvdHRvbSk8PU1hdGguY2VpbChGLnRvcCtDLmhlaWdodCgpKX12YXIgQz10aGlzLEY9dGhpcy5lbGVtZW50KCkubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLEQ9dGhpcy5fdGllck1hcmtDb250YWluZXJzW3ldLnNlbGVjdEFsbCgiLiIrCnIuQXhpcy5USUNLX01BUktfQ0xBU1MpLmZpbHRlcihmdW5jdGlvbigpe3ZhciBHPWwuc2VsZWN0KHRoaXMpLnN0eWxlKCJ2aXNpYmlsaXR5Iik7cmV0dXJuInZpc2libGUiPT09R3x8ImluaGVyaXQiPT09R30pLm5vZGVzKCkubWFwKGZ1bmN0aW9uKEcpe3JldHVybiBHLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpfSksQjt0aGlzLl90aWVyTGFiZWxDb250YWluZXJzW3ldLnNlbGVjdEFsbCgiLiIrci5BeGlzLlRJQ0tfTEFCRUxfQ0xBU1MpLmZpbHRlcihmdW5jdGlvbigpe3ZhciBHPWwuc2VsZWN0KHRoaXMpLnN0eWxlKCJ2aXNpYmlsaXR5Iik7cmV0dXJuInZpc2libGUiPT09R3x8ImluaGVyaXQiPT09R30pLmVhY2goZnVuY3Rpb24oRyxLKXtHPXRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dmFyIEw9bC5zZWxlY3QodGhpcyksSj1EW0tdLFA9RFtLKzFdO0s9bnVsbCE9QiYmcS5ET00uY2xpZW50UmVjdHNPdmVybGFwKEcsQik7Sj1udWxsIT1KJiZxLkRPTS5jbGllbnRSZWN0c092ZXJsYXAoRywKSik7UD1udWxsIT1QJiZxLkRPTS5jbGllbnRSZWN0c092ZXJsYXAoRyxQKTsheChHKXx8S3x8Snx8UD9MLnN0eWxlKCJ2aXNpYmlsaXR5IiwiaGlkZGVuIik6KEI9RyxMLnN0eWxlKCJ2aXNpYmlsaXR5IiwiaW5oZXJpdCIpKX0pfTtBLnByb3RvdHlwZS5pbnZhbGlkYXRlQ2FjaGU9ZnVuY3Rpb24oKXt2LnByb3RvdHlwZS5pbnZhbGlkYXRlQ2FjaGUuY2FsbCh0aGlzKTt0aGlzLl9tZWFzdXJlci5yZXNldCgpfTtyZXR1cm4gQX0oci5BeGlzKTtmLlRJTUVfQVhJU19USUVSX0NMQVNTPSJ0aW1lLWF4aXMtdGllciI7Zi5fU09SVEVEX1RJTUVfSU5URVJWQUxfSU5ERVg9KHQ9e30sdFtkLlRpbWVJbnRlcnZhbC5zZWNvbmRdPTAsdFtkLlRpbWVJbnRlcnZhbC5taW51dGVdPTEsdFtkLlRpbWVJbnRlcnZhbC5ob3VyXT0yLHRbZC5UaW1lSW50ZXJ2YWwuZGF5XT0zLHRbZC5UaW1lSW50ZXJ2YWwud2Vla109NCx0W2QuVGltZUludGVydmFsLm1vbnRoXT01LHRbZC5UaW1lSW50ZXJ2YWwueWVhcl09CjYsdCk7Zi5fREVGQVVMVF9USU1FX0FYSVNfQ09ORklHVVJBVElPTlM9W1t7aW50ZXJ2YWw6ZC5UaW1lSW50ZXJ2YWwuc2Vjb25kLHN0ZXA6MSxmb3JtYXR0ZXI6bS50aW1lKCIlSTolTTolUyAlcCIpfSx7aW50ZXJ2YWw6ZC5UaW1lSW50ZXJ2YWwuZGF5LHN0ZXA6MSxmb3JtYXR0ZXI6bS50aW1lKCIlQiAlZSwgJVkiKX1dLFt7aW50ZXJ2YWw6ZC5UaW1lSW50ZXJ2YWwuc2Vjb25kLHN0ZXA6NSxmb3JtYXR0ZXI6bS50aW1lKCIlSTolTTolUyAlcCIpfSx7aW50ZXJ2YWw6ZC5UaW1lSW50ZXJ2YWwuZGF5LHN0ZXA6MSxmb3JtYXR0ZXI6bS50aW1lKCIlQiAlZSwgJVkiKX1dLFt7aW50ZXJ2YWw6ZC5UaW1lSW50ZXJ2YWwuc2Vjb25kLHN0ZXA6MTAsZm9ybWF0dGVyOm0udGltZSgiJUk6JU06JVMgJXAiKX0se2ludGVydmFsOmQuVGltZUludGVydmFsLmRheSxzdGVwOjEsZm9ybWF0dGVyOm0udGltZSgiJUIgJWUsICVZIil9XSxbe2ludGVydmFsOmQuVGltZUludGVydmFsLnNlY29uZCxzdGVwOjE1LApmb3JtYXR0ZXI6bS50aW1lKCIlSTolTTolUyAlcCIpfSx7aW50ZXJ2YWw6ZC5UaW1lSW50ZXJ2YWwuZGF5LHN0ZXA6MSxmb3JtYXR0ZXI6bS50aW1lKCIlQiAlZSwgJVkiKX1dLFt7aW50ZXJ2YWw6ZC5UaW1lSW50ZXJ2YWwuc2Vjb25kLHN0ZXA6MzAsZm9ybWF0dGVyOm0udGltZSgiJUk6JU06JVMgJXAiKX0se2ludGVydmFsOmQuVGltZUludGVydmFsLmRheSxzdGVwOjEsZm9ybWF0dGVyOm0udGltZSgiJUIgJWUsICVZIil9XSxbe2ludGVydmFsOmQuVGltZUludGVydmFsLm1pbnV0ZSxzdGVwOjEsZm9ybWF0dGVyOm0udGltZSgiJUk6JU0gJXAiKX0se2ludGVydmFsOmQuVGltZUludGVydmFsLmRheSxzdGVwOjEsZm9ybWF0dGVyOm0udGltZSgiJUIgJWUsICVZIil9XSxbe2ludGVydmFsOmQuVGltZUludGVydmFsLm1pbnV0ZSxzdGVwOjUsZm9ybWF0dGVyOm0udGltZSgiJUk6JU0gJXAiKX0se2ludGVydmFsOmQuVGltZUludGVydmFsLmRheSxzdGVwOjEsZm9ybWF0dGVyOm0udGltZSgiJUIgJWUsICVZIil9XSwKW3tpbnRlcnZhbDpkLlRpbWVJbnRlcnZhbC5taW51dGUsc3RlcDoxMCxmb3JtYXR0ZXI6bS50aW1lKCIlSTolTSAlcCIpfSx7aW50ZXJ2YWw6ZC5UaW1lSW50ZXJ2YWwuZGF5LHN0ZXA6MSxmb3JtYXR0ZXI6bS50aW1lKCIlQiAlZSwgJVkiKX1dLFt7aW50ZXJ2YWw6ZC5UaW1lSW50ZXJ2YWwubWludXRlLHN0ZXA6MTUsZm9ybWF0dGVyOm0udGltZSgiJUk6JU0gJXAiKX0se2ludGVydmFsOmQuVGltZUludGVydmFsLmRheSxzdGVwOjEsZm9ybWF0dGVyOm0udGltZSgiJUIgJWUsICVZIil9XSxbe2ludGVydmFsOmQuVGltZUludGVydmFsLm1pbnV0ZSxzdGVwOjMwLGZvcm1hdHRlcjptLnRpbWUoIiVJOiVNICVwIil9LHtpbnRlcnZhbDpkLlRpbWVJbnRlcnZhbC5kYXksc3RlcDoxLGZvcm1hdHRlcjptLnRpbWUoIiVCICVlLCAlWSIpfV0sW3tpbnRlcnZhbDpkLlRpbWVJbnRlcnZhbC5ob3VyLHN0ZXA6MSxmb3JtYXR0ZXI6bS50aW1lKCIlSSAlcCIpfSx7aW50ZXJ2YWw6ZC5UaW1lSW50ZXJ2YWwuZGF5LApzdGVwOjEsZm9ybWF0dGVyOm0udGltZSgiJUIgJWUsICVZIil9XSxbe2ludGVydmFsOmQuVGltZUludGVydmFsLmhvdXIsc3RlcDozLGZvcm1hdHRlcjptLnRpbWUoIiVJICVwIil9LHtpbnRlcnZhbDpkLlRpbWVJbnRlcnZhbC5kYXksc3RlcDoxLGZvcm1hdHRlcjptLnRpbWUoIiVCICVlLCAlWSIpfV0sW3tpbnRlcnZhbDpkLlRpbWVJbnRlcnZhbC5ob3VyLHN0ZXA6Nixmb3JtYXR0ZXI6bS50aW1lKCIlSSAlcCIpfSx7aW50ZXJ2YWw6ZC5UaW1lSW50ZXJ2YWwuZGF5LHN0ZXA6MSxmb3JtYXR0ZXI6bS50aW1lKCIlQiAlZSwgJVkiKX1dLFt7aW50ZXJ2YWw6ZC5UaW1lSW50ZXJ2YWwuaG91cixzdGVwOjEyLGZvcm1hdHRlcjptLnRpbWUoIiVJICVwIil9LHtpbnRlcnZhbDpkLlRpbWVJbnRlcnZhbC5kYXksc3RlcDoxLGZvcm1hdHRlcjptLnRpbWUoIiVCICVlLCAlWSIpfV0sW3tpbnRlcnZhbDpkLlRpbWVJbnRlcnZhbC5kYXksc3RlcDoxLGZvcm1hdHRlcjptLnRpbWUoIiVhICVlIil9LAp7aW50ZXJ2YWw6ZC5UaW1lSW50ZXJ2YWwubW9udGgsc3RlcDoxLGZvcm1hdHRlcjptLnRpbWUoIiVCICVZIil9XSxbe2ludGVydmFsOmQuVGltZUludGVydmFsLmRheSxzdGVwOjEsZm9ybWF0dGVyOm0udGltZSgiJWUiKX0se2ludGVydmFsOmQuVGltZUludGVydmFsLm1vbnRoLHN0ZXA6MSxmb3JtYXR0ZXI6bS50aW1lKCIlQiAlWSIpfV0sW3tpbnRlcnZhbDpkLlRpbWVJbnRlcnZhbC5tb250aCxzdGVwOjEsZm9ybWF0dGVyOm0udGltZSgiJUIiKX0se2ludGVydmFsOmQuVGltZUludGVydmFsLnllYXIsc3RlcDoxLGZvcm1hdHRlcjptLnRpbWUoIiVZIil9XSxbe2ludGVydmFsOmQuVGltZUludGVydmFsLm1vbnRoLHN0ZXA6MSxmb3JtYXR0ZXI6bS50aW1lKCIlYiIpfSx7aW50ZXJ2YWw6ZC5UaW1lSW50ZXJ2YWwueWVhcixzdGVwOjEsZm9ybWF0dGVyOm0udGltZSgiJVkiKX1dLFt7aW50ZXJ2YWw6ZC5UaW1lSW50ZXJ2YWwubW9udGgsc3RlcDozLGZvcm1hdHRlcjptLnRpbWUoIiViIil9LAp7aW50ZXJ2YWw6ZC5UaW1lSW50ZXJ2YWwueWVhcixzdGVwOjEsZm9ybWF0dGVyOm0udGltZSgiJVkiKX1dLFt7aW50ZXJ2YWw6ZC5UaW1lSW50ZXJ2YWwubW9udGgsc3RlcDo2LGZvcm1hdHRlcjptLnRpbWUoIiViIil9LHtpbnRlcnZhbDpkLlRpbWVJbnRlcnZhbC55ZWFyLHN0ZXA6MSxmb3JtYXR0ZXI6bS50aW1lKCIlWSIpfV0sW3tpbnRlcnZhbDpkLlRpbWVJbnRlcnZhbC55ZWFyLHN0ZXA6MSxmb3JtYXR0ZXI6bS50aW1lKCIlWSIpfV0sW3tpbnRlcnZhbDpkLlRpbWVJbnRlcnZhbC55ZWFyLHN0ZXA6MSxmb3JtYXR0ZXI6bS50aW1lKCIleSIpfV0sW3tpbnRlcnZhbDpkLlRpbWVJbnRlcnZhbC55ZWFyLHN0ZXA6NSxmb3JtYXR0ZXI6bS50aW1lKCIlWSIpfV0sW3tpbnRlcnZhbDpkLlRpbWVJbnRlcnZhbC55ZWFyLHN0ZXA6MjUsZm9ybWF0dGVyOm0udGltZSgiJVkiKX1dLFt7aW50ZXJ2YWw6ZC5UaW1lSW50ZXJ2YWwueWVhcixzdGVwOjUwLGZvcm1hdHRlcjptLnRpbWUoIiVZIil9XSwKW3tpbnRlcnZhbDpkLlRpbWVJbnRlcnZhbC55ZWFyLHN0ZXA6MTAwLGZvcm1hdHRlcjptLnRpbWUoIiVZIil9XSxbe2ludGVydmFsOmQuVGltZUludGVydmFsLnllYXIsc3RlcDoyMDAsZm9ybWF0dGVyOm0udGltZSgiJVkiKX1dLFt7aW50ZXJ2YWw6ZC5UaW1lSW50ZXJ2YWwueWVhcixzdGVwOjUwMCxmb3JtYXR0ZXI6bS50aW1lKCIlWSIpfV0sW3tpbnRlcnZhbDpkLlRpbWVJbnRlcnZhbC55ZWFyLHN0ZXA6MUUzLGZvcm1hdHRlcjptLnRpbWUoIiVZIil9XV07Zi5fTE9OR19EQVRFPW5ldyBEYXRlKDk5OTksOCwyOSwxMiw1OSw5OTk5KTtkLlRpbWU9Zjt2YXIgdH0sZnVuY3Rpb24oYyxkLGYpe3ZhciBnPXRoaXMmJnRoaXMuX19leHRlbmRzfHxmdW5jdGlvbihrLG0pe2Z1bmN0aW9uIHAoKXt0aGlzLmNvbnN0cnVjdG9yPWt9Zm9yKHZhciBxIGluIG0pbS5oYXNPd25Qcm9wZXJ0eShxKSYmKGtbcV09bVtxXSk7ay5wcm90b3R5cGU9bnVsbD09PW0/T2JqZWN0LmNyZWF0ZShtKToocC5wcm90b3R5cGU9Cm0ucHJvdG90eXBlLG5ldyBwKX0sbD1mKDEyKTtjPWZ1bmN0aW9uKGspe2Z1bmN0aW9uIG0oKXt2YXIgcD1rLmNhbGwodGhpcyl8fHRoaXM7cC5fZGV0YWNoQ2FsbGJhY2s9ZnVuY3Rpb24ocSl7cmV0dXJuIHAucmVtb3ZlKHEpfTtyZXR1cm4gcH1nKG0sayk7bS5wcm90b3R5cGUuYW5jaG9yPWZ1bmN0aW9uKHApe3ZhciBxPXRoaXM7cD1sLmNvZXJjZUV4dGVybmFsRDMocCk7ay5wcm90b3R5cGUuYW5jaG9yLmNhbGwodGhpcyxwKTt0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uKHIpe3JldHVybiByLmFuY2hvcihxLmVsZW1lbnQoKSl9KTtyZXR1cm4gdGhpc307bS5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCl7dGhpcy5fZm9yRWFjaChmdW5jdGlvbihwKXtyZXR1cm4gcC5yZW5kZXIoKX0pO3JldHVybiB0aGlzfTttLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24oKXt0aHJvdyBFcnJvcigiaGFzKCkgaXMgbm90IGltcGxlbWVudGVkIG9uIENvbXBvbmVudENvbnRhaW5lciIpO307bS5wcm90b3R5cGUuX2Fkb3B0QW5kQW5jaG9yPQpmdW5jdGlvbihwKXtwLnBhcmVudCh0aGlzKTtwLm9uRGV0YWNoKHRoaXMuX2RldGFjaENhbGxiYWNrKTt0aGlzLl9pc0FuY2hvcmVkJiZwLmFuY2hvcih0aGlzLmVsZW1lbnQoKSl9O20ucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbihwKXt0aGlzLmhhcyhwKSYmKHAub2ZmRGV0YWNoKHRoaXMuX2RldGFjaENhbGxiYWNrKSx0aGlzLl9yZW1vdmUocCkscC5kZXRhY2goKSx0aGlzLnJlZHJhdygpKTtyZXR1cm4gdGhpc307bS5wcm90b3R5cGUuX3JlbW92ZT1mdW5jdGlvbigpe307bS5wcm90b3R5cGUuX2ZvckVhY2g9ZnVuY3Rpb24oKXt0aHJvdyBFcnJvcigiX2ZvckVhY2goKSBpcyBub3QgaW1wbGVtZW50ZWQgb24gQ29tcG9uZW50Q29udGFpbmVyIik7fTttLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7ay5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO3RoaXMuX2ZvckVhY2goZnVuY3Rpb24ocCl7cmV0dXJuIHAuZGVzdHJveSgpfSl9O20ucHJvdG90eXBlLmludmFsaWRhdGVDYWNoZT0KZnVuY3Rpb24oKXt0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uKHApe3JldHVybiBwLmludmFsaWRhdGVDYWNoZSgpfSl9O3JldHVybiBtfShmKDQpLkNvbXBvbmVudCk7ZC5Db21wb25lbnRDb250YWluZXI9Y30sZnVuY3Rpb24oYyxkLGYpe2Z1bmN0aW9uIGcoQSl7cS5hZGQoQSk7cC5hZGQoQSk7bCgpfWZ1bmN0aW9uIGwoKXtyfHwocj0hMCx2LnJlbmRlcigpKX12YXIgaz1mKDApO2M9ZigxMCk7dmFyIG09ZigzOSkscD1uZXcgay5TZXQscT1uZXcgay5TZXQscj0hMSx0PSExO2QuUG9saWN5PWMubWFrZUVudW0oWyJpbW1lZGlhdGUiLCJhbmltYXRpb25GcmFtZSIsInRpbWVvdXQiXSk7dmFyIHY9bmV3IG0uQW5pbWF0aW9uRnJhbWU7ZC5yZW5kZXJQb2xpY3k9ZnVuY3Rpb24oKXt2YXIgQT1QbG90dGFibGUuUmVuZGVyQ29udHJvbGxlci5Qb2xpY3kuaW1tZWRpYXRlO2lmKG51bGwhPUEpc3dpdGNoKEEpe2Nhc2UgZC5Qb2xpY3kuaW1tZWRpYXRlOnY9bmV3IG0uSW1tZWRpYXRlO2JyZWFrOwpjYXNlIGQuUG9saWN5LmFuaW1hdGlvbkZyYW1lOnY9bmV3IG0uQW5pbWF0aW9uRnJhbWU7YnJlYWs7Y2FzZSBkLlBvbGljeS50aW1lb3V0OnY9bmV3IG0uVGltZW91dDticmVhaztkZWZhdWx0OmsuV2luZG93Lndhcm4oIlVucmVjb2duaXplZCByZW5kZXJQb2xpY3k6ICIrQSl9fTtkLnJlZ2lzdGVyVG9SZW5kZXI9ZnVuY3Rpb24oQSl7dCYmay5XaW5kb3cud2FybigiUmVnaXN0ZXJlZCB0byByZW5kZXIgd2hpbGUgb3RoZXIgY29tcG9uZW50cyBhcmUgZmx1c2hpbmc6IHJlcXVlc3QgbWF5IGJlIGlnbm9yZWQiKTtwLmFkZChBKTtsKCl9O2QucmVnaXN0ZXJUb0NvbXB1dGVMYXlvdXRBbmRSZW5kZXI9ZztkLnJlZ2lzdGVyVG9Db21wdXRlTGF5b3V0PWZ1bmN0aW9uKEEpe2coQSl9O2QuZmx1c2g9ZnVuY3Rpb24oKXtpZihyKXtxLmZvckVhY2goZnVuY3Rpb24oeSl7cmV0dXJuIHkuY29tcHV0ZUxheW91dCgpfSk7cC5mb3JFYWNoKGZ1bmN0aW9uKHkpe3JldHVybiB5LnJlbmRlcigpfSk7CnQ9ITA7dmFyIEE9bmV3IGsuU2V0O3AuZm9yRWFjaChmdW5jdGlvbih5KXt0cnl7eS5yZW5kZXJJbW1lZGlhdGVseSgpfWNhdGNoKHgpe3dpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhyb3cgeDt9LDApLEEuYWRkKHkpfX0pO3E9bmV3IGsuU2V0O3A9QTt0PXI9ITF9fX0sZnVuY3Rpb24oYyxkLGYpe3ZhciBnPWYoMSk7ZC5jaXJjbGU9ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oayl7cmV0dXJuIGcuc3ltYm9sKCkudHlwZShnLnN5bWJvbENpcmNsZSkuc2l6ZShNYXRoLlBJKk1hdGgucG93KGsvMiwyKSl9fTtkLnNxdWFyZT1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihrKXtyZXR1cm4gZy5zeW1ib2woKS50eXBlKGcuc3ltYm9sU3F1YXJlKS5zaXplKE1hdGgucG93KGssMikpfX07ZC5jcm9zcz1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihrKXtyZXR1cm4gZy5zeW1ib2woKS50eXBlKGcuc3ltYm9sQ3Jvc3MpLnNpemUoNS85Kk1hdGgucG93KGssMikpfX07ZC5kaWFtb25kPQpmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihrKXtyZXR1cm4gZy5zeW1ib2woKS50eXBlKGcuc3ltYm9sRGlhbW9uZCkuc2l6ZShNYXRoLnRhbihNYXRoLlBJLzYpKk1hdGgucG93KGssMikvMil9fTtkLnRyaWFuZ2xlPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKGspe3JldHVybiBnLnN5bWJvbCgpLnR5cGUoZy5zeW1ib2xUcmlhbmdsZSkuc2l6ZShNYXRoLnNxcnQoMykqTWF0aC5wb3coay8yLDIpKX19O2Quc3Rhcj1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihrKXtyZXR1cm4gZy5zeW1ib2woKS50eXBlKGcuc3ltYm9sU3Rhcikuc2l6ZSguODkwODEzMDkxNTI5Mjg1MipNYXRoLnBvdyhrLzIsMikpfX07dmFyIGw9MyooMS9NYXRoLnNxcnQoMTIpLzIrMSk7ZC53eWU9ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oayl7cmV0dXJuIGcuc3ltYm9sKCkudHlwZShnLnN5bWJvbFd5ZSkuc2l6ZShsKk1hdGgucG93KGsvMi40LDIpKX19fSxmdW5jdGlvbihjLGQsZil7dmFyIGc9CnRoaXMmJnRoaXMuX19leHRlbmRzfHxmdW5jdGlvbihxLHIpe2Z1bmN0aW9uIHQoKXt0aGlzLmNvbnN0cnVjdG9yPXF9Zm9yKHZhciB2IGluIHIpci5oYXNPd25Qcm9wZXJ0eSh2KSYmKHFbdl09clt2XSk7cS5wcm90b3R5cGU9bnVsbD09PXI/T2JqZWN0LmNyZWF0ZShyKToodC5wcm90b3R5cGU9ci5wcm90b3R5cGUsbmV3IHQpfSxsPWYoMjUpLGs9ZigwKSxtPWYoMTIpLHA9ZigzNyk7Yz1mdW5jdGlvbihxKXtmdW5jdGlvbiByKCl7dmFyIHQ9cS5jYWxsKHRoaXMpfHx0aGlzO3QuX2RldGVjdGlvblJhZGl1cz0zO3QuX3Jlc2l6YWJsZT0hMTt0Ll9tb3ZhYmxlPSExO3QuX2hhc0Nvcm5lcnM9ITA7dC5hZGRDbGFzcygiZHJhZy1ib3gtbGF5ZXIiKTt0Ll9kcmFnSW50ZXJhY3Rpb249bmV3IGwuRHJhZzt0Ll9zZXRVcENhbGxiYWNrcygpO3QuX2RyYWdJbnRlcmFjdGlvbi5hdHRhY2hUbyh0KTt0Ll9kcmFnU3RhcnRDYWxsYmFja3M9bmV3IGsuQ2FsbGJhY2tTZXQ7dC5fZHJhZ0NhbGxiYWNrcz0KbmV3IGsuQ2FsbGJhY2tTZXQ7dC5fZHJhZ0VuZENhbGxiYWNrcz1uZXcgay5DYWxsYmFja1NldDtyZXR1cm4gdH1nKHIscSk7ci5wcm90b3R5cGUuX3NldFVwQ2FsbGJhY2tzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChHLEspezA9PT1CJiZHLng9PT1LLngmJkcueT09PUsueSYmeS5ib3hWaXNpYmxlKCExKTt5Ll9kcmFnRW5kQ2FsbGJhY2tzLmNhbGxDYWxsYmFja3MoeS5ib3VuZHMoKSl9ZnVuY3Rpb24gdihHLEspe3N3aXRjaChCKXtjYXNlIDA6Ri54PUsueDtGLnk9Sy55O2JyZWFrO2Nhc2UgMTp4LmJvdHRvbT9GLnk9Sy55OngudG9wJiYoQy55PUsueSk7eC5yaWdodD9GLng9Sy54OngubGVmdCYmKEMueD1LLngpO2JyZWFrO2Nhc2UgMjpHPUsueC1ELng7dmFyIEw9Sy55LUQueTtDLngrPUc7Qy55Kz1MO0YueCs9RztGLnkrPUw7RD1LfXkuX3NldEJvdW5kcyh7dG9wTGVmdDpDLGJvdHRvbVJpZ2h0OkZ9KTt5Ll94Qm91bmRzTW9kZT09PXAuUHJvcGVydHlNb2RlLlZBTFVFJiZudWxsIT0KeS54U2NhbGUoKSYmeS5fc2V0WEV4dGVudChbeS54U2NhbGUoKS5pbnZlcnQoQy54KSx5LnhTY2FsZSgpLmludmVydChGLngpXSk7eS5feUJvdW5kc01vZGU9PT1wLlByb3BlcnR5TW9kZS5WQUxVRSYmbnVsbCE9eS55U2NhbGUoKSYmeS5fc2V0WUV4dGVudChbeS55U2NhbGUoKS5pbnZlcnQoQy55KSx5LnlTY2FsZSgpLmludmVydChGLnkpXSk7eS5yZW5kZXIoKTt5Ll9kcmFnQ2FsbGJhY2tzLmNhbGxDYWxsYmFja3MoeS5ib3VuZHMoKSl9ZnVuY3Rpb24gQShHKXt4PXkuX2dldFJlc2l6aW5nRWRnZXMoRyk7dmFyIEs9eS5ib3VuZHMoKTtLPUsudG9wTGVmdC54PD1HLngmJkcueDw9Sy5ib3R0b21SaWdodC54JiZLLnRvcExlZnQueTw9Ry55JiZHLnk8PUsuYm90dG9tUmlnaHQueTt5LmJveFZpc2libGUoKSYmKHgudG9wfHx4LmJvdHRvbXx8eC5sZWZ0fHx4LnJpZ2h0KT9CPTE6eS5ib3hWaXNpYmxlKCkmJnkubW92YWJsZSgpJiZLP0I9MjooQj0wLHkuX3NldEJvdW5kcyh7dG9wTGVmdDpHLApib3R0b21SaWdodDpHfSkseS5feEJvdW5kc01vZGU9PT1wLlByb3BlcnR5TW9kZS5WQUxVRSYmbnVsbCE9eS54U2NhbGUoKSYmeS5fc2V0WEV4dGVudChbeS54U2NhbGUoKS5pbnZlcnQoRy54KSx5LnhTY2FsZSgpLmludmVydChHLngpXSkseS5feUJvdW5kc01vZGU9PT1wLlByb3BlcnR5TW9kZS5WQUxVRSYmbnVsbCE9eS55U2NhbGUoKSYmeS5fc2V0WUV4dGVudChbeS55U2NhbGUoKS5pbnZlcnQoRy55KSx5LnlTY2FsZSgpLmludmVydChHLnkpXSkseS5yZW5kZXIoKSk7eS5ib3hWaXNpYmxlKCEwKTtLPXkuYm91bmRzKCk7Qz17eDpLLnRvcExlZnQueCx5OksudG9wTGVmdC55fTtGPXt4OksuYm90dG9tUmlnaHQueCx5OksuYm90dG9tUmlnaHQueX07RD1HO3kuX2RyYWdTdGFydENhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKEspfXZhciB5PXRoaXMseCxDLEYsRCxCPTA7dGhpcy5fZHJhZ0ludGVyYWN0aW9uLm9uRHJhZ1N0YXJ0KEEpO3RoaXMuX2RyYWdJbnRlcmFjdGlvbi5vbkRyYWcodik7CnRoaXMuX2RyYWdJbnRlcmFjdGlvbi5vbkRyYWdFbmQodCk7dGhpcy5fZGlzY29ubmVjdEludGVyYWN0aW9uPWZ1bmN0aW9uKCl7eS5fZHJhZ0ludGVyYWN0aW9uLm9mZkRyYWdTdGFydChBKTt5Ll9kcmFnSW50ZXJhY3Rpb24ub2ZmRHJhZyh2KTt5Ll9kcmFnSW50ZXJhY3Rpb24ub2ZmRHJhZ0VuZCh0KTt5Ll9kcmFnSW50ZXJhY3Rpb24uZGV0YWNoKCl9fTtyLnByb3RvdHlwZS5fc2V0dXA9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7cmV0dXJuIHYuX2JveC5hcHBlbmQoImxpbmUiKS5zdHlsZXMoe29wYWNpdHk6MCxzdHJva2U6InBpbmsiLCJwb2ludGVyLWV2ZW50cyI6InZpc2libGVTdHJva2UifSl9dmFyIHY9dGhpcztxLnByb3RvdHlwZS5fc2V0dXAuY2FsbCh0aGlzKTt0aGlzLl9kZXRlY3Rpb25FZGdlVD10KCkuY2xhc3NlZCgiZHJhZy1lZGdlLXRiIiwhMCk7dGhpcy5fZGV0ZWN0aW9uRWRnZUI9dCgpLmNsYXNzZWQoImRyYWctZWRnZS10YiIsITApO3RoaXMuX2RldGVjdGlvbkVkZ2VMPQp0KCkuY2xhc3NlZCgiZHJhZy1lZGdlLWxyIiwhMCk7dGhpcy5fZGV0ZWN0aW9uRWRnZVI9dCgpLmNsYXNzZWQoImRyYWctZWRnZS1sciIsITApO2lmKHRoaXMuX2hhc0Nvcm5lcnMpe3ZhciBBPWZ1bmN0aW9uKCl7cmV0dXJuIHYuX2JveC5hcHBlbmQoImNpcmNsZSIpLnN0eWxlcyh7b3BhY2l0eTowLGZpbGw6InBpbmsiLCJwb2ludGVyLWV2ZW50cyI6InZpc2libGVGaWxsIn0pfTt0aGlzLl9kZXRlY3Rpb25Db3JuZXJUTD1BKCkuY2xhc3NlZCgiZHJhZy1jb3JuZXItdGwiLCEwKTt0aGlzLl9kZXRlY3Rpb25Db3JuZXJUUj1BKCkuY2xhc3NlZCgiZHJhZy1jb3JuZXItdHIiLCEwKTt0aGlzLl9kZXRlY3Rpb25Db3JuZXJCTD1BKCkuY2xhc3NlZCgiZHJhZy1jb3JuZXItYmwiLCEwKTt0aGlzLl9kZXRlY3Rpb25Db3JuZXJCUj1BKCkuY2xhc3NlZCgiZHJhZy1jb3JuZXItYnIiLCEwKX19O3IucHJvdG90eXBlLl9nZXRSZXNpemluZ0VkZ2VzPWZ1bmN0aW9uKHQpe3ZhciB2PXt0b3A6ITEsCmJvdHRvbTohMSxsZWZ0OiExLHJpZ2h0OiExfTtpZighdGhpcy5yZXNpemFibGUoKSlyZXR1cm4gdjt2YXIgQT10aGlzLmJvdW5kcygpLHk9QS50b3BMZWZ0LnkseD1BLmJvdHRvbVJpZ2h0LnksQz1BLnRvcExlZnQueDtBPUEuYm90dG9tUmlnaHQueDt2YXIgRj10aGlzLl9kZXRlY3Rpb25SYWRpdXM7Qy1GPD10LngmJnQueDw9QStGJiYodi50b3A9eS1GPD10LnkmJnQueTw9eStGLHYuYm90dG9tPXgtRjw9dC55JiZ0Lnk8PXgrRik7eS1GPD10LnkmJnQueTw9eCtGJiYodi5sZWZ0PUMtRjw9dC54JiZ0Lng8PUMrRix2LnJpZ2h0PUEtRjw9dC54JiZ0Lng8PUErRik7cmV0dXJuIHZ9O3IucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5PWZ1bmN0aW9uKCl7cS5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHkuY2FsbCh0aGlzKTtpZih0aGlzLmJveFZpc2libGUoKSl7dmFyIHQ9dGhpcy5ib3VuZHMoKSx2PXQudG9wTGVmdC55LEE9dC5ib3R0b21SaWdodC55LHk9dC50b3BMZWZ0Lng7dD0KdC5ib3R0b21SaWdodC54O3RoaXMuX2RldGVjdGlvbkVkZ2VULmF0dHJzKHt4MTp5LHkxOnYseDI6dCx5Mjp2LCJzdHJva2Utd2lkdGgiOjIqdGhpcy5fZGV0ZWN0aW9uUmFkaXVzfSk7dGhpcy5fZGV0ZWN0aW9uRWRnZUIuYXR0cnMoe3gxOnkseTE6QSx4Mjp0LHkyOkEsInN0cm9rZS13aWR0aCI6Mip0aGlzLl9kZXRlY3Rpb25SYWRpdXN9KTt0aGlzLl9kZXRlY3Rpb25FZGdlTC5hdHRycyh7eDE6eSx5MTp2LHgyOnkseTI6QSwic3Ryb2tlLXdpZHRoIjoyKnRoaXMuX2RldGVjdGlvblJhZGl1c30pO3RoaXMuX2RldGVjdGlvbkVkZ2VSLmF0dHJzKHt4MTp0LHkxOnYseDI6dCx5MjpBLCJzdHJva2Utd2lkdGgiOjIqdGhpcy5fZGV0ZWN0aW9uUmFkaXVzfSk7dGhpcy5faGFzQ29ybmVycyYmKHRoaXMuX2RldGVjdGlvbkNvcm5lclRMLmF0dHJzKHtjeDp5LGN5OnYscjp0aGlzLl9kZXRlY3Rpb25SYWRpdXN9KSx0aGlzLl9kZXRlY3Rpb25Db3JuZXJUUi5hdHRycyh7Y3g6dCxjeTp2LHI6dGhpcy5fZGV0ZWN0aW9uUmFkaXVzfSksCnRoaXMuX2RldGVjdGlvbkNvcm5lckJMLmF0dHJzKHtjeDp5LGN5OkEscjp0aGlzLl9kZXRlY3Rpb25SYWRpdXN9KSx0aGlzLl9kZXRlY3Rpb25Db3JuZXJCUi5hdHRycyh7Y3g6dCxjeTpBLHI6dGhpcy5fZGV0ZWN0aW9uUmFkaXVzfSkpfXJldHVybiB0aGlzfTtyLnByb3RvdHlwZS5kZXRlY3Rpb25SYWRpdXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGV0ZWN0aW9uUmFkaXVzfTtyLnByb3RvdHlwZS5yZXNpemFibGU9ZnVuY3Rpb24odCl7aWYobnVsbD09dClyZXR1cm4gdGhpcy5fcmVzaXphYmxlO3RoaXMuX3Jlc2l6YWJsZT10O3RoaXMuX3NldFJlc2l6YWJsZUNsYXNzZXModCk7cmV0dXJuIHRoaXN9O3IucHJvdG90eXBlLl9zZXRSZXNpemFibGVDbGFzc2VzPWZ1bmN0aW9uKHQpe3QmJnRoaXMuZW5hYmxlZCgpPyh0aGlzLmFkZENsYXNzKCJ4LXJlc2l6YWJsZSIpLHRoaXMuYWRkQ2xhc3MoInktcmVzaXphYmxlIikpOih0aGlzLnJlbW92ZUNsYXNzKCJ4LXJlc2l6YWJsZSIpLAp0aGlzLnJlbW92ZUNsYXNzKCJ5LXJlc2l6YWJsZSIpKX07ci5wcm90b3R5cGUubW92YWJsZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3ZhYmxlfTtyLnByb3RvdHlwZS5fc2V0TW92YWJsZUNsYXNzPWZ1bmN0aW9uKCl7dGhpcy5tb3ZhYmxlKCkmJnRoaXMuZW5hYmxlZCgpP3RoaXMuYWRkQ2xhc3MoIm1vdmFibGUiKTp0aGlzLnJlbW92ZUNsYXNzKCJtb3ZhYmxlIil9O3IucHJvdG90eXBlLm9uRHJhZ1N0YXJ0PWZ1bmN0aW9uKHQpe3RoaXMuX2RyYWdTdGFydENhbGxiYWNrcy5hZGQodCl9O3IucHJvdG90eXBlLm9mZkRyYWdTdGFydD1mdW5jdGlvbih0KXt0aGlzLl9kcmFnU3RhcnRDYWxsYmFja3MuZGVsZXRlKHQpfTtyLnByb3RvdHlwZS5vbkRyYWc9ZnVuY3Rpb24odCl7dGhpcy5fZHJhZ0NhbGxiYWNrcy5hZGQodCk7cmV0dXJuIHRoaXN9O3IucHJvdG90eXBlLm9mZkRyYWc9ZnVuY3Rpb24odCl7dGhpcy5fZHJhZ0NhbGxiYWNrcy5kZWxldGUodCl9O3IucHJvdG90eXBlLm9uRHJhZ0VuZD0KZnVuY3Rpb24odCl7dGhpcy5fZHJhZ0VuZENhbGxiYWNrcy5hZGQodCl9O3IucHJvdG90eXBlLm9mZkRyYWdFbmQ9ZnVuY3Rpb24odCl7dGhpcy5fZHJhZ0VuZENhbGxiYWNrcy5kZWxldGUodCl9O3IucHJvdG90eXBlLmRyYWdJbnRlcmFjdGlvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kcmFnSW50ZXJhY3Rpb259O3IucHJvdG90eXBlLmVuYWJsZWQ9ZnVuY3Rpb24odCl7aWYobnVsbD09dClyZXR1cm4gdGhpcy5fZHJhZ0ludGVyYWN0aW9uLmVuYWJsZWQoKTt0aGlzLl9kcmFnSW50ZXJhY3Rpb24uZW5hYmxlZCh0KTt0aGlzLl9zZXRSZXNpemFibGVDbGFzc2VzKHRoaXMucmVzaXphYmxlKCkpO3RoaXMuX3NldE1vdmFibGVDbGFzcygpO3JldHVybiB0aGlzfTtyLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztxLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7dGhpcy5fZHJhZ1N0YXJ0Q2FsbGJhY2tzLmZvckVhY2goZnVuY3Rpb24odil7cmV0dXJuIHQuX2RyYWdDYWxsYmFja3MuZGVsZXRlKHYpfSk7CnRoaXMuX2RyYWdDYWxsYmFja3MuZm9yRWFjaChmdW5jdGlvbih2KXtyZXR1cm4gdC5fZHJhZ0NhbGxiYWNrcy5kZWxldGUodil9KTt0aGlzLl9kcmFnRW5kQ2FsbGJhY2tzLmZvckVhY2goZnVuY3Rpb24odil7cmV0dXJuIHQuX2RyYWdFbmRDYWxsYmFja3MuZGVsZXRlKHYpfSk7dGhpcy5fZGlzY29ubmVjdEludGVyYWN0aW9uKCl9O3IucHJvdG90eXBlLmRldGFjaD1mdW5jdGlvbigpe3RoaXMuX3Jlc2V0U3RhdGUoKTt0aGlzLl9kcmFnSW50ZXJhY3Rpb24uZGV0YWNoKCk7cS5wcm90b3R5cGUuZGV0YWNoLmNhbGwodGhpcyk7cmV0dXJuIHRoaXN9O3IucHJvdG90eXBlLmFuY2hvcj1mdW5jdGlvbih0KXt0PW0uY29lcmNlRXh0ZXJuYWxEMyh0KTt0aGlzLl9kcmFnSW50ZXJhY3Rpb24uYXR0YWNoVG8odGhpcyk7cS5wcm90b3R5cGUuYW5jaG9yLmNhbGwodGhpcyx0KTtyZXR1cm4gdGhpc307ci5wcm90b3R5cGUuX3Jlc2V0U3RhdGU9ZnVuY3Rpb24oKXt0aGlzLmJvdW5kcyh7dG9wTGVmdDp7eDowLAp5OjB9LGJvdHRvbVJpZ2h0Ont4OjAseTowfX0pfTtyZXR1cm4gcn0oZig0MykuU2VsZWN0aW9uQm94TGF5ZXIpO2QuRHJhZ0JveExheWVyPWN9LGZ1bmN0aW9uKGMsZCxmKXt2YXIgZz10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8ZnVuY3Rpb24obSxwKXtmdW5jdGlvbiBxKCl7dGhpcy5jb25zdHJ1Y3Rvcj1tfWZvcih2YXIgciBpbiBwKXAuaGFzT3duUHJvcGVydHkocikmJihtW3JdPXBbcl0pO20ucHJvdG90eXBlPW51bGw9PT1wP09iamVjdC5jcmVhdGUocCk6KHEucHJvdG90eXBlPXAucHJvdG90eXBlLG5ldyBxKX0sbD1mKDE4KTtjPWZ1bmN0aW9uKG0pe2Z1bmN0aW9uIHAoKXtyZXR1cm4gbS5jYWxsKHRoaXMsInBhdGgiLCJsaW5lIil8fHRoaXN9ZyhwLG0pO3AucHJvdG90eXBlLl9hcHBseURlZmF1bHRBdHRyaWJ1dGVzPWZ1bmN0aW9uKHEpe3Euc3R5bGUoImZpbGwiLCJub25lIil9O3AucHJvdG90eXBlLmdldFZpc3VhbFByaW1pdGl2ZUF0SW5kZXg9ZnVuY3Rpb24oKXtyZXR1cm4gbS5wcm90b3R5cGUuZ2V0VmlzdWFsUHJpbWl0aXZlQXRJbmRleC5jYWxsKHRoaXMsCjApfTtyZXR1cm4gcH0oZig5KS5TVkdEcmF3ZXIpO2QuTGluZVNWR0RyYXdlcj1jO3ZhciBrPVsib3BhY2l0eSIsInN0cm9rZS1vcGFjaXR5Iiwic3Ryb2tlLXdpZHRoIiwic3Ryb2tlIl07ZC5tYWtlTGluZUNhbnZhc0RyYXdTdGVwPWZ1bmN0aW9uKG0pe3JldHVybiBmdW5jdGlvbihwLHEscil7cj1sLnJlc29sdmVBdHRyaWJ1dGVzKHIsayxxWzBdLDApO2wucmVuZGVyTGluZShwLG0oKSxxWzBdLHIpfX19LGZ1bmN0aW9uKGMsZCxmKXt2YXIgZz10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8ZnVuY3Rpb24obSxwKXtmdW5jdGlvbiBxKCl7dGhpcy5jb25zdHJ1Y3Rvcj1tfWZvcih2YXIgciBpbiBwKXAuaGFzT3duUHJvcGVydHkocikmJihtW3JdPXBbcl0pO20ucHJvdG90eXBlPW51bGw9PT1wP09iamVjdC5jcmVhdGUocCk6KHEucHJvdG90eXBlPXAucHJvdG90eXBlLG5ldyBxKX0sbD1mKDE4KTtjPWZ1bmN0aW9uKG0pe2Z1bmN0aW9uIHAocSl7dm9pZCAwPT09cSYmKHE9IiIpO3ZhciByPQptLmNhbGwodGhpcywicmVjdCIsIiIpfHx0aGlzO3IuX3Jvb3RDbGFzc05hbWU9cTtyLl9yb290LmNsYXNzZWQoci5fcm9vdENsYXNzTmFtZSwhMCk7cmV0dXJuIHJ9ZyhwLG0pO3JldHVybiBwfShmKDkpLlNWR0RyYXdlcik7ZC5SZWN0YW5nbGVTVkdEcmF3ZXI9Yzt2YXIgaz1bIngiLCJ5Iiwid2lkdGgiLCJoZWlnaHQiXTtkLlJlY3RhbmdsZUNhbnZhc0RyYXdTdGVwPWZ1bmN0aW9uKG0scCxxKXttLnNhdmUoKTtwLmZvckVhY2goZnVuY3Rpb24ocix0KXtudWxsIT1yJiYocj1sLnJlc29sdmVBdHRyaWJ1dGVzU3Vic2V0V2l0aFN0eWxlcyhxLGsscix0KSxtLmJlZ2luUGF0aCgpLG0ucmVjdChyLngsci55LHIud2lkdGgsci5oZWlnaHQpLGwucmVuZGVyUGF0aFdpdGhTdHlsZShtLHIpKX0pO20ucmVzdG9yZSgpfTtjPWZ1bmN0aW9uKG0pe2Z1bmN0aW9uIHAocSl7cmV0dXJuIG0uY2FsbCh0aGlzLHEsZC5SZWN0YW5nbGVDYW52YXNEcmF3U3RlcCl8fHRoaXN9ZyhwLG0pO3JldHVybiBwfShsLkNhbnZhc0RyYXdlcik7CmQuUmVjdGFuZ2xlQ2FudmFzRHJhd2VyPWN9LGZ1bmN0aW9uKGMsZCxmKXtmdW5jdGlvbiBnKG0pe2suU0hPV19XQVJOSU5HUyYmY29uc29sZS53YXJuKG0pfWZ1bmN0aW9uIGwobSxwKXtmb3IodmFyIHE9W10scj0yO3I8YXJndW1lbnRzLmxlbmd0aDtyKyspcVtyLTJdPWFyZ3VtZW50c1tyXTtyZXR1cm4gMD09PXA/KG0ocSksLTEpOndpbmRvdy5zZXRUaW1lb3V0KG0scCxxKX12YXIgaz1mKDIzKTtkLndhcm49ZztkLnNldFRpbWVvdXQ9bDtkLmRlYm91bmNlPWZ1bmN0aW9uKG0scCxxKXtmdW5jdGlvbiByKCl7cC5hcHBseShxLHYpfXZhciB0PW51bGwsdj1bXTtyZXR1cm4gZnVuY3Rpb24oKXt2PUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7Y2xlYXJUaW1lb3V0KHQpO3Q9bChyLG0pfX07ZC5kZXByZWNhdGVkPWZ1bmN0aW9uKG0scCxxKXt2b2lkIDA9PT1xJiYocT0iIik7ZygiTWV0aG9kICIrbSsiIGhhcyBiZWVuIGRlcHJlY2F0ZWQgaW4gdmVyc2lvbiAiKwpwKyIuIFBsZWFzZSByZWZlciB0byB0aGUgcmVsZWFzZSBub3Rlcy4gIitxKX19LGZ1bmN0aW9uKGMsZCl7Yz1mdW5jdGlvbigpe2Z1bmN0aW9uIGYoZyl7dGhpcy5ydWxlcj1udWxsIT1nLmNyZWF0ZVJ1bGVyP2cuY3JlYXRlUnVsZXIoKTpnfWYucHJvdG90eXBlLm1lYXN1cmU9ZnVuY3Rpb24oZyl7dm9pZCAwPT09ZyYmKGc9Zi5IRUlHSFRfVEVYVCk7cmV0dXJuIHRoaXMucnVsZXIoZyl9O3JldHVybiBmfSgpO2MuSEVJR0hUX1RFWFQ9ImJkcHFsIjtkLkFic3RyYWN0TWVhc3VyZXI9Y30sZnVuY3Rpb24oYyxkLGYpe2Z1bmN0aW9uIGcobCl7Zm9yKHZhciBrIGluIGwpZC5oYXNPd25Qcm9wZXJ0eShrKXx8KGRba109bFtrXSl9ZyhmKDMyKSk7ZyhmKDc0KSk7ZyhmKDc1KSk7ZyhmKDQxKSk7ZyhmKDQyKSk7ZyhmKDc2KSk7ZyhmKDc3KSk7ZyhmKDc4KSk7ZyhmKDc5KSk7ZyhmKDQzKSk7ZyhmKDgwKSk7ZyhmKDgxKSk7ZyhmKDgyKSl9LGZ1bmN0aW9uKGMsZCxmKXt2YXIgZz1mKDApO2M9CmZ1bmN0aW9uKCl7ZnVuY3Rpb24gbChrLG0pe3ZvaWQgMD09PWsmJihrPVtdKTt2b2lkIDA9PT1tJiYobT17fSk7dGhpcy5fdXBkYXRlSWQ9MDt0aGlzLl9kYXRhPWs7dGhpcy5fbWV0YWRhdGE9bTt0aGlzLl9jYWxsYmFja3M9bmV3IGcuQ2FsbGJhY2tTZXR9bC5wcm90b3R5cGUub25VcGRhdGU9ZnVuY3Rpb24oayl7dGhpcy5fY2FsbGJhY2tzLmFkZChrKTtyZXR1cm4gdGhpc307bC5wcm90b3R5cGUub2ZmVXBkYXRlPWZ1bmN0aW9uKGspe3RoaXMuX2NhbGxiYWNrcy5kZWxldGUoayk7cmV0dXJuIHRoaXN9O2wucHJvdG90eXBlLmRhdGE9ZnVuY3Rpb24oayl7aWYobnVsbD09aylyZXR1cm4gdGhpcy5fZGF0YTt0aGlzLl9kYXRhPWs7dGhpcy5fZGlzcGF0Y2hVcGRhdGUoKTtyZXR1cm4gdGhpc307bC5wcm90b3R5cGUubWV0YWRhdGE9ZnVuY3Rpb24oayl7aWYobnVsbD09aylyZXR1cm4gdGhpcy5fbWV0YWRhdGE7dGhpcy5fbWV0YWRhdGE9azt0aGlzLl9kaXNwYXRjaFVwZGF0ZSgpOwpyZXR1cm4gdGhpc307bC5wcm90b3R5cGUudXBkYXRlSWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdXBkYXRlSWR9O2wucHJvdG90eXBlLl9kaXNwYXRjaFVwZGF0ZT1mdW5jdGlvbigpe3RoaXMuX3VwZGF0ZUlkKys7dGhpcy5fY2FsbGJhY2tzLmNhbGxDYWxsYmFja3ModGhpcyl9O3JldHVybiBsfSgpO2QuRGF0YXNldD1jfSxmdW5jdGlvbihjLGQsZil7dmFyIGc9ZigwKSxsPWYoMzApO2M9ZnVuY3Rpb24oKXtmdW5jdGlvbiBrKCl7fWsucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe2wuZmx1c2goKX07cmV0dXJuIGt9KCk7ZC5JbW1lZGlhdGU9YztjPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gaygpe31rLnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXtnLkRPTS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWVQb2x5ZmlsbChsLmZsdXNoKX07cmV0dXJuIGt9KCk7ZC5BbmltYXRpb25GcmFtZT1jO2M9ZnVuY3Rpb24oKXtmdW5jdGlvbiBrKCl7dGhpcy5fdGltZW91dE1zZWM9Zy5ET00uU0NSRUVOX1JFRlJFU0hfUkFURV9NSUxMSVNFQ09ORFN9CmsucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3NldFRpbWVvdXQobC5mbHVzaCx0aGlzLl90aW1lb3V0TXNlYyl9O3JldHVybiBrfSgpO2QuVGltZW91dD1jfSxmdW5jdGlvbihjLGQsZil7dmFyIGc9dGhpcyYmdGhpcy5fX2V4dGVuZHN8fGZ1bmN0aW9uKG0scCl7ZnVuY3Rpb24gcSgpe3RoaXMuY29uc3RydWN0b3I9bX1mb3IodmFyIHIgaW4gcClwLmhhc093blByb3BlcnR5KHIpJiYobVtyXT1wW3JdKTttLnByb3RvdHlwZT1udWxsPT09cD9PYmplY3QuY3JlYXRlKHApOihxLnByb3RvdHlwZT1wLnByb3RvdHlwZSxuZXcgcSl9LGw9ZigxMyksaz1mKDApO2M9ZnVuY3Rpb24obSl7ZnVuY3Rpb24gcCgpe3ZhciBxPW51bGwhPT1tJiZtLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpcztxLl9rZXlQcmVzc0NhbGxiYWNrcz17fTtxLl9rZXlSZWxlYXNlQ2FsbGJhY2tzPXt9O3EuX21vdXNlTW92ZUNhbGxiYWNrPWZ1bmN0aW9uKCl7cmV0dXJuITF9O3EuX2Rvd25lZEtleXM9bmV3IGsuU2V0OwpxLl9rZXlEb3duQ2FsbGJhY2s9ZnVuY3Rpb24ocix0KXtyZXR1cm4gcS5faGFuZGxlS2V5RG93bkV2ZW50KHIsdCl9O3EuX2tleVVwQ2FsbGJhY2s9ZnVuY3Rpb24ocil7cmV0dXJuIHEuX2hhbmRsZUtleVVwRXZlbnQocil9O3JldHVybiBxfWcocCxtKTtwLnByb3RvdHlwZS5fYW5jaG9yPWZ1bmN0aW9uKHEpe20ucHJvdG90eXBlLl9hbmNob3IuY2FsbCh0aGlzLHEpO3RoaXMuX3Bvc2l0aW9uRGlzcGF0Y2hlcj1sLk1vdXNlLmdldERpc3BhdGNoZXIodGhpcy5fY29tcG9uZW50QXR0YWNoZWRUbyk7dGhpcy5fcG9zaXRpb25EaXNwYXRjaGVyLm9uTW91c2VNb3ZlKHRoaXMuX21vdXNlTW92ZUNhbGxiYWNrKTt0aGlzLl9rZXlEaXNwYXRjaGVyPWwuS2V5LmdldERpc3BhdGNoZXIoKTt0aGlzLl9rZXlEaXNwYXRjaGVyLm9uS2V5RG93bih0aGlzLl9rZXlEb3duQ2FsbGJhY2spO3RoaXMuX2tleURpc3BhdGNoZXIub25LZXlVcCh0aGlzLl9rZXlVcENhbGxiYWNrKX07cC5wcm90b3R5cGUuX3VuYW5jaG9yPQpmdW5jdGlvbigpe20ucHJvdG90eXBlLl91bmFuY2hvci5jYWxsKHRoaXMpO3RoaXMuX3Bvc2l0aW9uRGlzcGF0Y2hlci5vZmZNb3VzZU1vdmUodGhpcy5fbW91c2VNb3ZlQ2FsbGJhY2spO3RoaXMuX3Bvc2l0aW9uRGlzcGF0Y2hlcj1udWxsO3RoaXMuX2tleURpc3BhdGNoZXIub2ZmS2V5RG93bih0aGlzLl9rZXlEb3duQ2FsbGJhY2spO3RoaXMuX2tleURpc3BhdGNoZXIub2ZmS2V5VXAodGhpcy5fa2V5VXBDYWxsYmFjayk7dGhpcy5fa2V5RGlzcGF0Y2hlcj1udWxsfTtwLnByb3RvdHlwZS5faGFuZGxlS2V5RG93bkV2ZW50PWZ1bmN0aW9uKHEscil7dmFyIHQ9dGhpcy5fdHJhbnNsYXRlVG9Db21wb25lbnRTcGFjZSh0aGlzLl9wb3NpdGlvbkRpc3BhdGNoZXIubGFzdE1vdXNlUG9zaXRpb24oKSk7dGhpcy5faXNJbnNpZGVDb21wb25lbnQodCkmJiFyLnJlcGVhdCYmKHRoaXMuX2tleVByZXNzQ2FsbGJhY2tzW3FdJiZ0aGlzLl9rZXlQcmVzc0NhbGxiYWNrc1txXS5jYWxsQ2FsbGJhY2tzKHEpLAp0aGlzLl9kb3duZWRLZXlzLmFkZChxKSl9O3AucHJvdG90eXBlLl9oYW5kbGVLZXlVcEV2ZW50PWZ1bmN0aW9uKHEpe3RoaXMuX2Rvd25lZEtleXMuaGFzKHEpJiZ0aGlzLl9rZXlSZWxlYXNlQ2FsbGJhY2tzW3FdJiZ0aGlzLl9rZXlSZWxlYXNlQ2FsbGJhY2tzW3FdLmNhbGxDYWxsYmFja3MocSk7dGhpcy5fZG93bmVkS2V5cy5kZWxldGUocSl9O3AucHJvdG90eXBlLm9uS2V5UHJlc3M9ZnVuY3Rpb24ocSxyKXt0aGlzLl9rZXlQcmVzc0NhbGxiYWNrc1txXXx8KHRoaXMuX2tleVByZXNzQ2FsbGJhY2tzW3FdPW5ldyBrLkNhbGxiYWNrU2V0KTt0aGlzLl9rZXlQcmVzc0NhbGxiYWNrc1txXS5hZGQocik7cmV0dXJuIHRoaXN9O3AucHJvdG90eXBlLm9mZktleVByZXNzPWZ1bmN0aW9uKHEscil7dGhpcy5fa2V5UHJlc3NDYWxsYmFja3NbcV0uZGVsZXRlKHIpOzA9PT10aGlzLl9rZXlQcmVzc0NhbGxiYWNrc1txXS5zaXplJiZkZWxldGUgdGhpcy5fa2V5UHJlc3NDYWxsYmFja3NbcV07CnJldHVybiB0aGlzfTtwLnByb3RvdHlwZS5vbktleVJlbGVhc2U9ZnVuY3Rpb24ocSxyKXt0aGlzLl9rZXlSZWxlYXNlQ2FsbGJhY2tzW3FdfHwodGhpcy5fa2V5UmVsZWFzZUNhbGxiYWNrc1txXT1uZXcgay5DYWxsYmFja1NldCk7dGhpcy5fa2V5UmVsZWFzZUNhbGxiYWNrc1txXS5hZGQocik7cmV0dXJuIHRoaXN9O3AucHJvdG90eXBlLm9mZktleVJlbGVhc2U9ZnVuY3Rpb24ocSxyKXt0aGlzLl9rZXlSZWxlYXNlQ2FsbGJhY2tzW3FdLmRlbGV0ZShyKTswPT09dGhpcy5fa2V5UmVsZWFzZUNhbGxiYWNrc1txXS5zaXplJiZkZWxldGUgdGhpcy5fa2V5UmVsZWFzZUNhbGxiYWNrc1txXTtyZXR1cm4gdGhpc307cmV0dXJuIHB9KGYoMTUpLkludGVyYWN0aW9uKTtkLktleT1jfSxmdW5jdGlvbihjLGQsZil7dmFyIGc9dGhpcyYmdGhpcy5fX2V4dGVuZHN8fGZ1bmN0aW9uKGssbSl7ZnVuY3Rpb24gcCgpe3RoaXMuY29uc3RydWN0b3I9a31mb3IodmFyIHEgaW4gbSltLmhhc093blByb3BlcnR5KHEpJiYKKGtbcV09bVtxXSk7ay5wcm90b3R5cGU9bnVsbD09PW0/T2JqZWN0LmNyZWF0ZShtKToocC5wcm90b3R5cGU9bS5wcm90b3R5cGUsbmV3IHApfSxsPWYoMCk7Yz1mdW5jdGlvbihrKXtmdW5jdGlvbiBtKHApe3ZvaWQgMD09PXAmJihwPVtdKTt2YXIgcT1rLmNhbGwodGhpcyl8fHRoaXM7cS5fY29tcG9uZW50cz1bXTtxLmFkZENsYXNzKCJjb21wb25lbnQtZ3JvdXAiKTtwLmZvckVhY2goZnVuY3Rpb24ocil7cmV0dXJuIHEuYXBwZW5kKHIpfSk7cmV0dXJuIHF9ZyhtLGspO20ucHJvdG90eXBlLl9mb3JFYWNoPWZ1bmN0aW9uKHApe3RoaXMuY29tcG9uZW50cygpLmZvckVhY2gocCl9O20ucHJvdG90eXBlLmhhcz1mdW5jdGlvbihwKXtyZXR1cm4gMDw9dGhpcy5fY29tcG9uZW50cy5pbmRleE9mKHApfTttLnByb3RvdHlwZS5yZXF1ZXN0ZWRTcGFjZT1mdW5jdGlvbihwLHEpe3ZhciByPXRoaXMuX2NvbXBvbmVudHMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LnJlcXVlc3RlZFNwYWNlKHAsCnEpfSk7cmV0dXJue21pbldpZHRoOmwuTWF0aC5tYXgocixmdW5jdGlvbih0KXtyZXR1cm4gdC5taW5XaWR0aH0sMCksbWluSGVpZ2h0OmwuTWF0aC5tYXgocixmdW5jdGlvbih0KXtyZXR1cm4gdC5taW5IZWlnaHR9LDApfX07bS5wcm90b3R5cGUuY29tcHV0ZUxheW91dD1mdW5jdGlvbihwLHEscil7dmFyIHQ9dGhpcztrLnByb3RvdHlwZS5jb21wdXRlTGF5b3V0LmNhbGwodGhpcyxwLHEscik7dGhpcy5fZm9yRWFjaChmdW5jdGlvbih2KXt2LmNvbXB1dGVMYXlvdXQoe3g6MCx5OjB9LHQud2lkdGgoKSx0LmhlaWdodCgpKX0pO3JldHVybiB0aGlzfTttLnByb3RvdHlwZS5fc2l6ZUZyb21PZmZlcj1mdW5jdGlvbihwLHEpe3JldHVybnt3aWR0aDpwLGhlaWdodDpxfX07bS5wcm90b3R5cGUuZml4ZWRXaWR0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb21wb25lbnRzLmV2ZXJ5KGZ1bmN0aW9uKHApe3JldHVybiBwLmZpeGVkV2lkdGgoKX0pfTttLnByb3RvdHlwZS5maXhlZEhlaWdodD0KZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY29tcG9uZW50cy5ldmVyeShmdW5jdGlvbihwKXtyZXR1cm4gcC5maXhlZEhlaWdodCgpfSl9O20ucHJvdG90eXBlLmNvbXBvbmVudHM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY29tcG9uZW50cy5zbGljZSgpfTttLnByb3RvdHlwZS5hcHBlbmQ9ZnVuY3Rpb24ocCl7bnVsbD09cHx8dGhpcy5oYXMocCl8fChwLmRldGFjaCgpLHRoaXMuX2NvbXBvbmVudHMucHVzaChwKSx0aGlzLl9hZG9wdEFuZEFuY2hvcihwKSx0aGlzLnJlZHJhdygpKTtyZXR1cm4gdGhpc307bS5wcm90b3R5cGUuX3JlbW92ZT1mdW5jdGlvbihwKXtwPXRoaXMuX2NvbXBvbmVudHMuaW5kZXhPZihwKTswPD1wJiZ0aGlzLl9jb21wb25lbnRzLnNwbGljZShwLDEpfTtyZXR1cm4gbX0oZigyOSkuQ29tcG9uZW50Q29udGFpbmVyKTtkLkdyb3VwPWN9LGZ1bmN0aW9uKGMsZCxmKXt2YXIgZz10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8ZnVuY3Rpb24oayxtKXtmdW5jdGlvbiBwKCl7dGhpcy5jb25zdHJ1Y3Rvcj0Ka31mb3IodmFyIHEgaW4gbSltLmhhc093blByb3BlcnR5KHEpJiYoa1txXT1tW3FdKTtrLnByb3RvdHlwZT1udWxsPT09bT9PYmplY3QuY3JlYXRlKG0pOihwLnByb3RvdHlwZT1tLnByb3RvdHlwZSxuZXcgcCl9O2YoMCk7Yz1mKDQpO3ZhciBsOyhmdW5jdGlvbihrKXtrW2suVkFMVUU9MF09IlZBTFVFIjtrW2suUElYRUw9MV09IlBJWEVMIn0pKGx8fChsPXt9KSk7Yz1mdW5jdGlvbihrKXtmdW5jdGlvbiBtKHApe3ZhciBxPWsuY2FsbCh0aGlzKXx8dGhpcztxLl9tb2RlPWwuVkFMVUU7aWYocCE9PW0uT1JJRU5UQVRJT05fVkVSVElDQUwmJnAhPT1tLk9SSUVOVEFUSU9OX0hPUklaT05UQUwpdGhyb3cgRXJyb3IocCsiIGlzIG5vdCBhIHZhbGlkIG9yaWVudGF0aW9uIGZvciBHdWlkZUxpbmVMYXllciIpO3EuX29yaWVudGF0aW9uPXA7cS5fb3ZlcmZsb3dIaWRkZW49ITA7cS5hZGRDbGFzcygiZ3VpZGUtbGluZS1sYXllciIpO3EuX2lzVmVydGljYWwoKT9xLmFkZENsYXNzKCJ2ZXJ0aWNhbCIpOgpxLmFkZENsYXNzKCJob3Jpem9udGFsIik7cS5fc2NhbGVVcGRhdGVDYWxsYmFjaz1mdW5jdGlvbigpe3EuX3N5bmNQaXhlbFBvc2l0aW9uQW5kVmFsdWUoKTtxLnJlbmRlcigpfTtyZXR1cm4gcX1nKG0sayk7bS5wcm90b3R5cGUuX3NldHVwPWZ1bmN0aW9uKCl7ay5wcm90b3R5cGUuX3NldHVwLmNhbGwodGhpcyk7dGhpcy5fZ3VpZGVMaW5lPXRoaXMuY29udGVudCgpLmFwcGVuZCgibGluZSIpLmNsYXNzZWQoImd1aWRlLWxpbmUiLCEwKX07bS5wcm90b3R5cGUuX3NpemVGcm9tT2ZmZXI9ZnVuY3Rpb24ocCxxKXtyZXR1cm57d2lkdGg6cCxoZWlnaHQ6cX19O20ucHJvdG90eXBlLl9pc1ZlcnRpY2FsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX29yaWVudGF0aW9uPT09bS5PUklFTlRBVElPTl9WRVJUSUNBTH07bS5wcm90b3R5cGUuZml4ZWRXaWR0aD1mdW5jdGlvbigpe3JldHVybiEwfTttLnByb3RvdHlwZS5maXhlZEhlaWdodD1mdW5jdGlvbigpe3JldHVybiEwfTttLnByb3RvdHlwZS5jb21wdXRlTGF5b3V0PQpmdW5jdGlvbihwLHEscil7ay5wcm90b3R5cGUuY29tcHV0ZUxheW91dC5jYWxsKHRoaXMscCxxLHIpO251bGwhPXRoaXMuc2NhbGUoKSYmKHRoaXMuX2lzVmVydGljYWwoKT90aGlzLnNjYWxlKCkucmFuZ2UoWzAsdGhpcy53aWR0aCgpXSk6dGhpcy5zY2FsZSgpLnJhbmdlKFt0aGlzLmhlaWdodCgpLDBdKSk7cmV0dXJuIHRoaXN9O20ucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5PWZ1bmN0aW9uKCl7ay5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHkuY2FsbCh0aGlzKTt0aGlzLl9zeW5jUGl4ZWxQb3NpdGlvbkFuZFZhbHVlKCk7dGhpcy5fZ3VpZGVMaW5lLmF0dHJzKHt4MTp0aGlzLl9pc1ZlcnRpY2FsKCk/dGhpcy5waXhlbFBvc2l0aW9uKCk6MCx5MTp0aGlzLl9pc1ZlcnRpY2FsKCk/MDp0aGlzLnBpeGVsUG9zaXRpb24oKSx4Mjp0aGlzLl9pc1ZlcnRpY2FsKCk/dGhpcy5waXhlbFBvc2l0aW9uKCk6dGhpcy53aWR0aCgpLHkyOnRoaXMuX2lzVmVydGljYWwoKT90aGlzLmhlaWdodCgpOgp0aGlzLnBpeGVsUG9zaXRpb24oKX0pO3JldHVybiB0aGlzfTttLnByb3RvdHlwZS5fc3luY1BpeGVsUG9zaXRpb25BbmRWYWx1ZT1mdW5jdGlvbigpe251bGwhPXRoaXMuc2NhbGUoKSYmKHRoaXMuX21vZGU9PT1sLlZBTFVFJiZudWxsIT10aGlzLnZhbHVlKCk/dGhpcy5fcGl4ZWxQb3NpdGlvbj10aGlzLnNjYWxlKCkuc2NhbGUodGhpcy52YWx1ZSgpKTp0aGlzLl9tb2RlPT09bC5QSVhFTCYmbnVsbCE9dGhpcy5waXhlbFBvc2l0aW9uKCkmJih0aGlzLl92YWx1ZT10aGlzLnNjYWxlKCkuaW52ZXJ0KHRoaXMucGl4ZWxQb3NpdGlvbigpKSkpfTttLnByb3RvdHlwZS5fc2V0UGl4ZWxQb3NpdGlvbldpdGhvdXRDaGFuZ2luZ01vZGU9ZnVuY3Rpb24ocCl7dGhpcy5fcGl4ZWxQb3NpdGlvbj1wO251bGwhPXRoaXMuc2NhbGUoKSYmKHRoaXMuX3ZhbHVlPXRoaXMuc2NhbGUoKS5pbnZlcnQodGhpcy5waXhlbFBvc2l0aW9uKCkpKTt0aGlzLnJlbmRlcigpfTttLnByb3RvdHlwZS5zY2FsZT0KZnVuY3Rpb24ocCl7aWYobnVsbD09cClyZXR1cm4gdGhpcy5fc2NhbGU7dmFyIHE9dGhpcy5fc2NhbGU7bnVsbCE9cSYmcS5vZmZVcGRhdGUodGhpcy5fc2NhbGVVcGRhdGVDYWxsYmFjayk7dGhpcy5fc2NhbGU9cDt0aGlzLl9zY2FsZS5vblVwZGF0ZSh0aGlzLl9zY2FsZVVwZGF0ZUNhbGxiYWNrKTt0aGlzLl9zeW5jUGl4ZWxQb3NpdGlvbkFuZFZhbHVlKCk7dGhpcy5yZWRyYXcoKTtyZXR1cm4gdGhpc307bS5wcm90b3R5cGUudmFsdWU9ZnVuY3Rpb24ocCl7aWYobnVsbD09cClyZXR1cm4gdGhpcy5fdmFsdWU7dGhpcy5fdmFsdWU9cDt0aGlzLl9tb2RlPWwuVkFMVUU7dGhpcy5fc3luY1BpeGVsUG9zaXRpb25BbmRWYWx1ZSgpO3RoaXMucmVuZGVyKCk7cmV0dXJuIHRoaXN9O20ucHJvdG90eXBlLnBpeGVsUG9zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcGl4ZWxQb3NpdGlvbn07bS5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe2sucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTsKbnVsbCE9dGhpcy5zY2FsZSgpJiZ0aGlzLnNjYWxlKCkub2ZmVXBkYXRlKHRoaXMuX3NjYWxlVXBkYXRlQ2FsbGJhY2spfTtyZXR1cm4gbX0oYy5Db21wb25lbnQpO2MuT1JJRU5UQVRJT05fVkVSVElDQUw9InZlcnRpY2FsIjtjLk9SSUVOVEFUSU9OX0hPUklaT05UQUw9Imhvcml6b250YWwiO2QuR3VpZGVMaW5lTGF5ZXI9Y30sZnVuY3Rpb24oYyxkLGYpe3ZhciBnPXRoaXMmJnRoaXMuX19leHRlbmRzfHxmdW5jdGlvbihtLHApe2Z1bmN0aW9uIHEoKXt0aGlzLmNvbnN0cnVjdG9yPW19Zm9yKHZhciByIGluIHApcC5oYXNPd25Qcm9wZXJ0eShyKSYmKG1bcl09cFtyXSk7bS5wcm90b3R5cGU9bnVsbD09PXA/T2JqZWN0LmNyZWF0ZShwKToocS5wcm90b3R5cGU9cC5wcm90b3R5cGUsbmV3IHEpfSxsPWYoMCk7Yz1mKDQpO3ZhciBrOyhmdW5jdGlvbihtKXttW20uVkFMVUU9MF09IlZBTFVFIjttW20uUElYRUw9MV09IlBJWEVMIn0pKGs9ZC5Qcm9wZXJ0eU1vZGV8fChkLlByb3BlcnR5TW9kZT0Ke30pKTtjPWZ1bmN0aW9uKG0pe2Z1bmN0aW9uIHAoKXt2YXIgcT1tLmNhbGwodGhpcyl8fHRoaXM7cS5fYm94VmlzaWJsZT0hMTtxLl9ib3hCb3VuZHM9e3RvcExlZnQ6e3g6MCx5OjB9LGJvdHRvbVJpZ2h0Ont4OjAseTowfX07cS5feEJvdW5kc01vZGU9ay5QSVhFTDtxLl95Qm91bmRzTW9kZT1rLlBJWEVMO3EuYWRkQ2xhc3MoInNlbGVjdGlvbi1ib3gtbGF5ZXIiKTtxLl9hZGp1c3RCb3VuZHNDYWxsYmFjaz1mdW5jdGlvbigpe3EucmVuZGVyKCl9O3EuX292ZXJmbG93SGlkZGVuPSEwO3EuX3hFeHRlbnQ9W3ZvaWQgMCx2b2lkIDBdO3EuX3lFeHRlbnQ9W3ZvaWQgMCx2b2lkIDBdO3JldHVybiBxfWcocCxtKTtwLnByb3RvdHlwZS5fc2V0dXA9ZnVuY3Rpb24oKXttLnByb3RvdHlwZS5fc2V0dXAuY2FsbCh0aGlzKTt0aGlzLl9ib3g9dGhpcy5jb250ZW50KCkuYXBwZW5kKCJnIikuY2xhc3NlZCgic2VsZWN0aW9uLWJveCIsITApLnJlbW92ZSgpO3RoaXMuX2JveEFyZWE9dGhpcy5fYm94LmFwcGVuZCgicmVjdCIpLmNsYXNzZWQoInNlbGVjdGlvbi1hcmVhIiwKITApfTtwLnByb3RvdHlwZS5fc2l6ZUZyb21PZmZlcj1mdW5jdGlvbihxLHIpe3JldHVybnt3aWR0aDpxLGhlaWdodDpyfX07cC5wcm90b3R5cGUuYm91bmRzPWZ1bmN0aW9uKHEpe2lmKG51bGw9PXEpcmV0dXJuIHRoaXMuX2dldEJvdW5kcygpO3RoaXMuX3NldEJvdW5kcyhxKTt0aGlzLl95Qm91bmRzTW9kZT10aGlzLl94Qm91bmRzTW9kZT1rLlBJWEVMO3RoaXMucmVuZGVyKCk7cmV0dXJuIHRoaXN9O3AucHJvdG90eXBlLl9zZXRCb3VuZHM9ZnVuY3Rpb24ocSl7dGhpcy5fYm94Qm91bmRzPXt0b3BMZWZ0Ont4Ok1hdGgubWluKHEudG9wTGVmdC54LHEuYm90dG9tUmlnaHQueCkseTpNYXRoLm1pbihxLnRvcExlZnQueSxxLmJvdHRvbVJpZ2h0LnkpfSxib3R0b21SaWdodDp7eDpNYXRoLm1heChxLnRvcExlZnQueCxxLmJvdHRvbVJpZ2h0LngpLHk6TWF0aC5tYXgocS50b3BMZWZ0LnkscS5ib3R0b21SaWdodC55KX19fTtwLnByb3RvdHlwZS5fZ2V0Qm91bmRzPWZ1bmN0aW9uKCl7cmV0dXJue3RvcExlZnQ6e3g6dGhpcy5feEJvdW5kc01vZGU9PT0Kay5QSVhFTD90aGlzLl9ib3hCb3VuZHMudG9wTGVmdC54Om51bGw9PXRoaXMuX3hTY2FsZT8wOk1hdGgubWluKHRoaXMueFNjYWxlKCkuc2NhbGUodGhpcy54RXh0ZW50KClbMF0pLHRoaXMueFNjYWxlKCkuc2NhbGUodGhpcy54RXh0ZW50KClbMV0pKSx5OnRoaXMuX3lCb3VuZHNNb2RlPT09ay5QSVhFTD90aGlzLl9ib3hCb3VuZHMudG9wTGVmdC55Om51bGw9PXRoaXMuX3lTY2FsZT8wOk1hdGgubWluKHRoaXMueVNjYWxlKCkuc2NhbGUodGhpcy55RXh0ZW50KClbMF0pLHRoaXMueVNjYWxlKCkuc2NhbGUodGhpcy55RXh0ZW50KClbMV0pKX0sYm90dG9tUmlnaHQ6e3g6dGhpcy5feEJvdW5kc01vZGU9PT1rLlBJWEVMP3RoaXMuX2JveEJvdW5kcy5ib3R0b21SaWdodC54Om51bGw9PXRoaXMuX3hTY2FsZT8wOk1hdGgubWF4KHRoaXMueFNjYWxlKCkuc2NhbGUodGhpcy54RXh0ZW50KClbMF0pLHRoaXMueFNjYWxlKCkuc2NhbGUodGhpcy54RXh0ZW50KClbMV0pKSx5OnRoaXMuX3lCb3VuZHNNb2RlPT09CmsuUElYRUw/dGhpcy5fYm94Qm91bmRzLmJvdHRvbVJpZ2h0Lnk6bnVsbD09dGhpcy5feVNjYWxlPzA6TWF0aC5tYXgodGhpcy55U2NhbGUoKS5zY2FsZSh0aGlzLnlFeHRlbnQoKVswXSksdGhpcy55U2NhbGUoKS5zY2FsZSh0aGlzLnlFeHRlbnQoKVsxXSkpfX19O3AucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5PWZ1bmN0aW9uKCl7bS5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHkuY2FsbCh0aGlzKTtpZih0aGlzLl9ib3hWaXNpYmxlKXt2YXIgcT10aGlzLmJvdW5kcygpLHI9cS50b3BMZWZ0LnksdD1xLmJvdHRvbVJpZ2h0Lnksdj1xLnRvcExlZnQueDtxPXEuYm90dG9tUmlnaHQueDtpZighKGwuTWF0aC5pc1ZhbGlkTnVtYmVyKHIpJiZsLk1hdGguaXNWYWxpZE51bWJlcih0KSYmbC5NYXRoLmlzVmFsaWROdW1iZXIodikmJmwuTWF0aC5pc1ZhbGlkTnVtYmVyKHEpKSl0aHJvdyBFcnJvcigiYm91bmRzIGhhdmUgbm90IGJlZW4gcHJvcGVybHkgc2V0Iik7dGhpcy5fYm94QXJlYS5hdHRycyh7eDp2LAp5OnIsd2lkdGg6cS12LGhlaWdodDp0LXJ9KTt0aGlzLmNvbnRlbnQoKS5ub2RlKCkuYXBwZW5kQ2hpbGQodGhpcy5fYm94Lm5vZGUoKSl9ZWxzZSB0aGlzLl9ib3gucmVtb3ZlKCk7cmV0dXJuIHRoaXN9O3AucHJvdG90eXBlLmJveFZpc2libGU9ZnVuY3Rpb24ocSl7aWYobnVsbD09cSlyZXR1cm4gdGhpcy5fYm94VmlzaWJsZTt0aGlzLl9ib3hWaXNpYmxlPXE7dGhpcy5yZW5kZXIoKTtyZXR1cm4gdGhpc307cC5wcm90b3R5cGUuZml4ZWRXaWR0aD1mdW5jdGlvbigpe3JldHVybiEwfTtwLnByb3RvdHlwZS5maXhlZEhlaWdodD1mdW5jdGlvbigpe3JldHVybiEwfTtwLnByb3RvdHlwZS54U2NhbGU9ZnVuY3Rpb24ocSl7aWYobnVsbD09cSlyZXR1cm4gdGhpcy5feFNjYWxlO251bGwhPXRoaXMuX3hTY2FsZSYmdGhpcy5feFNjYWxlLm9mZlVwZGF0ZSh0aGlzLl9hZGp1c3RCb3VuZHNDYWxsYmFjayk7dGhpcy5feFNjYWxlPXE7dGhpcy5feEJvdW5kc01vZGU9ay5WQUxVRTt0aGlzLl94U2NhbGUub25VcGRhdGUodGhpcy5fYWRqdXN0Qm91bmRzQ2FsbGJhY2spOwp0aGlzLnJlbmRlcigpO3JldHVybiB0aGlzfTtwLnByb3RvdHlwZS55U2NhbGU9ZnVuY3Rpb24ocSl7aWYobnVsbD09cSlyZXR1cm4gdGhpcy5feVNjYWxlO251bGwhPXRoaXMuX3lTY2FsZSYmdGhpcy5feVNjYWxlLm9mZlVwZGF0ZSh0aGlzLl9hZGp1c3RCb3VuZHNDYWxsYmFjayk7dGhpcy5feVNjYWxlPXE7dGhpcy5feUJvdW5kc01vZGU9ay5WQUxVRTt0aGlzLl95U2NhbGUub25VcGRhdGUodGhpcy5fYWRqdXN0Qm91bmRzQ2FsbGJhY2spO3RoaXMucmVuZGVyKCk7cmV0dXJuIHRoaXN9O3AucHJvdG90eXBlLnhFeHRlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZ2V0WEV4dGVudCgpfTtwLnByb3RvdHlwZS5fZ2V0WEV4dGVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl94Qm91bmRzTW9kZT09PWsuVkFMVUU/dGhpcy5feEV4dGVudDpudWxsPT10aGlzLl94U2NhbGU/W3ZvaWQgMCx2b2lkIDBdOlt0aGlzLl94U2NhbGUuaW52ZXJ0KHRoaXMuX2JveEJvdW5kcy50b3BMZWZ0LngpLAp0aGlzLl94U2NhbGUuaW52ZXJ0KHRoaXMuX2JveEJvdW5kcy5ib3R0b21SaWdodC54KV19O3AucHJvdG90eXBlLl9zZXRYRXh0ZW50PWZ1bmN0aW9uKHEpe3RoaXMuX3hFeHRlbnQ9cX07cC5wcm90b3R5cGUueUV4dGVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9nZXRZRXh0ZW50KCl9O3AucHJvdG90eXBlLl9nZXRZRXh0ZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3lCb3VuZHNNb2RlPT09ay5WQUxVRT90aGlzLl95RXh0ZW50Om51bGw9PXRoaXMuX3lTY2FsZT9bdm9pZCAwLHZvaWQgMF06W3RoaXMuX3lTY2FsZS5pbnZlcnQodGhpcy5fYm94Qm91bmRzLnRvcExlZnQueSksdGhpcy5feVNjYWxlLmludmVydCh0aGlzLl9ib3hCb3VuZHMuYm90dG9tUmlnaHQueSldfTtwLnByb3RvdHlwZS5fc2V0WUV4dGVudD1mdW5jdGlvbihxKXt0aGlzLl95RXh0ZW50PXF9O3AucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXttLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7bnVsbCE9CnRoaXMuX3hTY2FsZSYmdGhpcy54U2NhbGUoKS5vZmZVcGRhdGUodGhpcy5fYWRqdXN0Qm91bmRzQ2FsbGJhY2spO251bGwhPXRoaXMuX3lTY2FsZSYmdGhpcy55U2NhbGUoKS5vZmZVcGRhdGUodGhpcy5fYWRqdXN0Qm91bmRzQ2FsbGJhY2spfTtyZXR1cm4gcH0oYy5Db21wb25lbnQpO2QuU2VsZWN0aW9uQm94TGF5ZXI9Y30sZnVuY3Rpb24oYyxkLGYpe3ZhciBnPXRoaXMmJnRoaXMuX19leHRlbmRzfHxmdW5jdGlvbihsLGspe2Z1bmN0aW9uIG0oKXt0aGlzLmNvbnN0cnVjdG9yPWx9Zm9yKHZhciBwIGluIGspay5oYXNPd25Qcm9wZXJ0eShwKSYmKGxbcF09a1twXSk7bC5wcm90b3R5cGU9bnVsbD09PWs/T2JqZWN0LmNyZWF0ZShrKToobS5wcm90b3R5cGU9ay5wcm90b3R5cGUsbmV3IG0pfTtjPWZ1bmN0aW9uKGwpe2Z1bmN0aW9uIGsoKXtyZXR1cm4gbC5jYWxsKHRoaXMsInBhdGgiLCJhcmMgZmlsbCIpfHx0aGlzfWcoayxsKTtrLnByb3RvdHlwZS5fYXBwbHlEZWZhdWx0QXR0cmlidXRlcz0KZnVuY3Rpb24obSl7bS5zdHlsZSgic3Ryb2tlIiwibm9uZSIpfTtyZXR1cm4ga30oZig5KS5TVkdEcmF3ZXIpO2QuQXJjU1ZHRHJhd2VyPWN9LGZ1bmN0aW9uKGMsZCxmKXt2YXIgZz10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8ZnVuY3Rpb24obCxrKXtmdW5jdGlvbiBtKCl7dGhpcy5jb25zdHJ1Y3Rvcj1sfWZvcih2YXIgcCBpbiBrKWsuaGFzT3duUHJvcGVydHkocCkmJihsW3BdPWtbcF0pO2wucHJvdG90eXBlPW51bGw9PT1rP09iamVjdC5jcmVhdGUoayk6KG0ucHJvdG90eXBlPWsucHJvdG90eXBlLG5ldyBtKX07Yz1mdW5jdGlvbihsKXtmdW5jdGlvbiBrKCl7cmV0dXJuIGwuY2FsbCh0aGlzLCJwYXRoIiwiYXJjIG91dGxpbmUiKXx8dGhpc31nKGssbCk7ay5wcm90b3R5cGUuX2FwcGx5RGVmYXVsdEF0dHJpYnV0ZXM9ZnVuY3Rpb24obSl7bS5zdHlsZSgiZmlsbCIsIm5vbmUiKX07cmV0dXJuIGt9KGYoOSkuU1ZHRHJhd2VyKTtkLkFyY091dGxpbmVTVkdEcmF3ZXI9Y30sZnVuY3Rpb24oYywKZCxmKXt2YXIgZz10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8ZnVuY3Rpb24obSxwKXtmdW5jdGlvbiBxKCl7dGhpcy5jb25zdHJ1Y3Rvcj1tfWZvcih2YXIgciBpbiBwKXAuaGFzT3duUHJvcGVydHkocikmJihtW3JdPXBbcl0pO20ucHJvdG90eXBlPW51bGw9PT1wP09iamVjdC5jcmVhdGUocCk6KHEucHJvdG90eXBlPXAucHJvdG90eXBlLG5ldyBxKX0sbD1mKDE4KTtjPWZ1bmN0aW9uKG0pe2Z1bmN0aW9uIHAoKXtyZXR1cm4gbS5jYWxsKHRoaXMsInBhdGgiLCJhcmVhIil8fHRoaXN9ZyhwLG0pO3AucHJvdG90eXBlLl9hcHBseURlZmF1bHRBdHRyaWJ1dGVzPWZ1bmN0aW9uKHEpe3Euc3R5bGUoInN0cm9rZSIsIm5vbmUiKX07cC5wcm90b3R5cGUuZ2V0VmlzdWFsUHJpbWl0aXZlQXRJbmRleD1mdW5jdGlvbigpe3JldHVybiBtLnByb3RvdHlwZS5nZXRWaXN1YWxQcmltaXRpdmVBdEluZGV4LmNhbGwodGhpcywwKX07cmV0dXJuIHB9KGYoOSkuU1ZHRHJhd2VyKTtkLkFyZWFTVkdEcmF3ZXI9CmM7dmFyIGs9WyJmaWxsIiwib3BhY2l0eSIsImZpbGwtb3BhY2l0eSJdO2QubWFrZUFyZWFDYW52YXNEcmF3U3RlcD1mdW5jdGlvbihtKXtyZXR1cm4gZnVuY3Rpb24ocCxxLHIpe3I9bC5yZXNvbHZlQXR0cmlidXRlcyhyLGsscVswXSwwKTtsLnJlbmRlckFyZWEocCxtKCkscVswXSxyKX19fSxmdW5jdGlvbihjLGQsZil7dmFyIGc9dGhpcyYmdGhpcy5fX2V4dGVuZHN8fGZ1bmN0aW9uKGwsayl7ZnVuY3Rpb24gbSgpe3RoaXMuY29uc3RydWN0b3I9bH1mb3IodmFyIHAgaW4gaylrLmhhc093blByb3BlcnR5KHApJiYobFtwXT1rW3BdKTtsLnByb3RvdHlwZT1udWxsPT09az9PYmplY3QuY3JlYXRlKGspOihtLnByb3RvdHlwZT1rLnByb3RvdHlwZSxuZXcgbSl9O2M9ZnVuY3Rpb24obCl7ZnVuY3Rpb24gaygpe3JldHVybiBsLmNhbGwodGhpcywibGluZSIsIiIpfHx0aGlzfWcoayxsKTtyZXR1cm4ga30oZig5KS5TVkdEcmF3ZXIpO2QuU2VnbWVudFNWR0RyYXdlcj1jfSxmdW5jdGlvbihjLApkLGYpe2Z1bmN0aW9uIGcocSxyLHQsdixBKXtyZXR1cm4gMDw9dCtBJiZ0LUE8PXEmJjA8PXYrQSYmdi1BPD1yfWZ1bmN0aW9uIGwocSxyLHQpe2lmKG51bGw9PXEpcmV0dXJuITE7Zm9yKHZhciB2PTA7djx0Lmxlbmd0aDt2Kyspe3ZhciBBPXRbdl07aWYocVtBXSE9cltBXSlyZXR1cm4hMX1yZXR1cm4hMH12YXIgaz10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8ZnVuY3Rpb24ocSxyKXtmdW5jdGlvbiB0KCl7dGhpcy5jb25zdHJ1Y3Rvcj1xfWZvcih2YXIgdiBpbiByKXIuaGFzT3duUHJvcGVydHkodikmJihxW3ZdPXJbdl0pO3EucHJvdG90eXBlPW51bGw9PT1yP09iamVjdC5jcmVhdGUocik6KHQucHJvdG90eXBlPXIucHJvdG90eXBlLG5ldyB0KX0sbT1mKDg2KSxwPWYoMTgpO2M9ZnVuY3Rpb24ocSl7ZnVuY3Rpb24gcigpe3JldHVybiBxLmNhbGwodGhpcywicGF0aCIsInN5bWJvbCIpfHx0aGlzfWsocixxKTtyZXR1cm4gcn0oZig5KS5TVkdEcmF3ZXIpO2QuU3ltYm9sU1ZHRHJhd2VyPQpjO2QubWFrZVN5bWJvbENhbnZhc0RyYXdTdGVwPWZ1bmN0aW9uKHEscix0KXt2YXIgdj10aGlzO3JldHVybiBmdW5jdGlvbihBLHkseCl7dmFyIEM9QS5jYW52YXMsRj1DLmNsaWVudFdpZHRoO0M9Qy5jbGllbnRIZWlnaHQ7Zm9yKHZhciBEPW5ldyBtLkNhbnZhc0J1ZmZlcigwLDApLEI9cigpLEc9dCgpLEs9bnVsbCxMPW51bGwsSj1udWxsLFA9MDtQPHkubGVuZ3RoO1ArKyl7dmFyIFM9eVtQXTtpZihudWxsIT1TKXt2YXIgTj1wLnJlc29sdmVBdHRyaWJ1dGVzU3Vic2V0V2l0aFN0eWxlcyh4LFsieCIsInkiXSxTLFApLFQ9RyhTLFAscSk7aWYoZyhGLEMsTi54LE4ueSxUKSl7dmFyIFk9bChLLE4scC5Db250ZXh0U3R5bGVBdHRycyk7Uz1CKFMsUCx2Ll9kYXRhc2V0KTtZJiZKPT1UJiZMPT1TfHwoSz1wLmdldFN0cm9rZVdpZHRoKE4pLEs9VCtLKzEsKEs+RC5zY3JlZW5XaWR0aHx8Sz5ELnNjcmVlbkhlaWdodCkmJkQucmVzaXplKEssSywhMCksRC5jbGVhcigpLEs9RC5jdHgsSy5iZWdpblBhdGgoKSwKUyhUKS5jb250ZXh0KEspKG51bGwpLEsuY2xvc2VQYXRoKCkscC5yZW5kZXJQYXRoV2l0aFN0eWxlKEssTiksTD1TLEo9VCxLPU4pO0QuYmxpdENlbnRlcihBLE4ueCxOLnkpfX19fX19LGZ1bmN0aW9uKGMsZCxmKXtmdW5jdGlvbiBnKEQpe3JldHVybiBEIGluc3RhbmNlb2YgeT9EOkQgaW5zdGFuY2VvZiBEYXRlP20oRC52YWx1ZU9mKCkpOkQgaW5zdGFuY2VvZiBBLlNjYWxlP2woRCk6RCBpbnN0YW5jZW9mIHYuRGF0YXNldD9rKEQpOnQoRCk/cShEKTpBcnJheS5pc0FycmF5KEQpP3AoRCk6bShEKX1mdW5jdGlvbiBsKEQpe0Q9e2RvbWFpbjpELmRvbWFpbigpLHJhbmdlOkQucmFuZ2UoKSx1cGRhdGVJZDpELnVwZGF0ZUlkKCkscmVmOm0oRCl9O3JldHVybiBxKEQpfWZ1bmN0aW9uIGsoRCl7RD17cmVmOm0oRCksdXBkYXRlSWQ6RC51cGRhdGVJZCgpfTtyZXR1cm4gcShEKX1mdW5jdGlvbiBtKEQpe3JldHVybiBuZXcgQyhEKX1mdW5jdGlvbiBwKEQpe3JldHVybiBuZXcgeChELm1hcChmdW5jdGlvbihCKXtyZXR1cm4gZyhCKX0pKX0KZnVuY3Rpb24gcShEKXt2YXIgQj17fSxHO2ZvcihHIGluIEQpRC5oYXNPd25Qcm9wZXJ0eShHKSYmKEJbR109ZyhEW0ddKSk7cmV0dXJuIG5ldyBGKEIpfXZhciByPXRoaXMmJnRoaXMuX19leHRlbmRzfHxmdW5jdGlvbihELEIpe2Z1bmN0aW9uIEcoKXt0aGlzLmNvbnN0cnVjdG9yPUR9Zm9yKHZhciBLIGluIEIpQi5oYXNPd25Qcm9wZXJ0eShLKSYmKERbS109QltLXSk7RC5wcm90b3R5cGU9bnVsbD09PUI/T2JqZWN0LmNyZWF0ZShCKTooRy5wcm90b3R5cGU9Qi5wcm90b3R5cGUsbmV3IEcpfSx0PWYoMTI4KSx2PWYoMzgpLEE9ZigxNyk7ZC5zaWduPWc7ZC5zaWduU2NhbGU9bDtkLnNpZ25EYXRhc2V0PWs7ZC5zaWduUmVmPW07ZC5zaWduQXJyYXk9cDtkLnNpZ25PYmo9cTt2YXIgeT1mdW5jdGlvbigpe2Z1bmN0aW9uIEQoKXt9RC5wcm90b3R5cGUuaXNEaWZmZXJlbnQ9ZnVuY3Rpb24oQil7cmV0dXJuIEIgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yP3RoaXMuaXNTaWduYXR1cmVEaWZmZXJlbnQoQik6CiEwfTtyZXR1cm4gRH0oKTtkLlNpZ25hdHVyZT15O3ZhciB4PWZ1bmN0aW9uKEQpe2Z1bmN0aW9uIEIoRyl7dmFyIEs9RC5jYWxsKHRoaXMpfHx0aGlzO0suYXJyYXk9RztyZXR1cm4gS31yKEIsRCk7Qi5wcm90b3R5cGUuaXNTaWduYXR1cmVEaWZmZXJlbnQ9ZnVuY3Rpb24oRyl7aWYoRy5hcnJheS5sZW5ndGghPT10aGlzLmFycmF5Lmxlbmd0aClyZXR1cm4hMDtmb3IodmFyIEs9MDtLPHRoaXMuYXJyYXkubGVuZ3RoO0srKylpZih0aGlzLmFycmF5W0tdLmlzRGlmZmVyZW50KEcuYXJyYXlbS10pKXJldHVybiEwO3JldHVybiExfTtyZXR1cm4gQn0oeSk7ZC5BcnJheVNpZ25hdHVyZT14O3ZhciBDPWZ1bmN0aW9uKEQpe2Z1bmN0aW9uIEIoRyl7dmFyIEs9RC5jYWxsKHRoaXMpfHx0aGlzO0sucmVmPUc7cmV0dXJuIEt9cihCLEQpO0IucHJvdG90eXBlLmlzU2lnbmF0dXJlRGlmZmVyZW50PWZ1bmN0aW9uKEcpe3JldHVybiB0aGlzLnJlZiE9PUcucmVmfTtyZXR1cm4gQn0oeSk7ZC5SZWZlcmVuY2VTaWduYXR1cmU9CkM7dmFyIEY9ZnVuY3Rpb24oRCl7ZnVuY3Rpb24gQihHKXt2YXIgSz1ELmNhbGwodGhpcyl8fHRoaXM7Sy5vYmo9RztyZXR1cm4gS31yKEIsRCk7Qi5wcm90b3R5cGUuaXNTaWduYXR1cmVEaWZmZXJlbnQ9ZnVuY3Rpb24oRyl7dmFyIEs9T2JqZWN0LmtleXModGhpcy5vYmopLEw9T2JqZWN0LmtleXMoRy5vYmopO2lmKEsubGVuZ3RoIT09TC5sZW5ndGgpcmV0dXJuITA7Zm9yKEw9MDtMPEsubGVuZ3RoO0wrKyl7dmFyIEo9S1tMXTtpZighRy5vYmouaGFzT3duUHJvcGVydHkoSil8fHRoaXMub2JqW0pdLmlzRGlmZmVyZW50KEcub2JqW0pdKSlyZXR1cm4hMH1yZXR1cm4hMX07cmV0dXJuIEJ9KHkpO2QuT2JqZWN0U2lnbmF0dXJlPUZ9LGZ1bmN0aW9uKGMsZCxmKXt2YXIgZz10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8ZnVuY3Rpb24oeSx4KXtmdW5jdGlvbiBDKCl7dGhpcy5jb25zdHJ1Y3Rvcj15fWZvcih2YXIgRiBpbiB4KXguaGFzT3duUHJvcGVydHkoRikmJih5W0ZdPXhbRl0pO3kucHJvdG90eXBlPQpudWxsPT09eD9PYmplY3QuY3JlYXRlKHgpOihDLnByb3RvdHlwZT14LnByb3RvdHlwZSxuZXcgQyl9LGw9ZigxKSxrPWYoMyksbT1mKDApLHA9ZigxNCkscT1mKDQ2KSxyPWYoNiksdD1mKDMzKSx2PWYoMTkpO2M9Zig1Myk7dmFyIEE9ZigyKTtmPWZ1bmN0aW9uKHkpe2Z1bmN0aW9uIHgoKXt2YXIgQz15LmNhbGwodGhpcyl8fHRoaXM7Qy5hZGRDbGFzcygiYXJlYS1wbG90Iik7Qy55MCgwKTtDLmF0dHIoImZpbGwtb3BhY2l0eSIsLjI1KTtDLmF0dHIoImZpbGwiLChuZXcgay5Db2xvcikucmFuZ2UoKVswXSk7Qy5fbGluZURyYXdlcnM9bmV3IG0uTWFwO3JldHVybiBDfWcoeCx5KTt4LnByb3RvdHlwZS55PWZ1bmN0aW9uKEMsRil7aWYobnVsbD09QylyZXR1cm4geS5wcm90b3R5cGUueS5jYWxsKHRoaXMpO251bGw9PUY/eS5wcm90b3R5cGUueS5jYWxsKHRoaXMsQyk6eS5wcm90b3R5cGUueS5jYWxsKHRoaXMsQyxGKTtudWxsIT1GJiYoQz10aGlzLnkwKCkuYWNjZXNzb3IsbnVsbCE9CkMmJnRoaXMuX2JpbmRQcm9wZXJ0eSh4Ll9ZMF9LRVksQyxGKSx0aGlzLl91cGRhdGVZU2NhbGUoKSk7cmV0dXJuIHRoaXN9O3gucHJvdG90eXBlLnkwPWZ1bmN0aW9uKEMpe2lmKG51bGw9PUMpcmV0dXJuIHRoaXMuX3Byb3BlcnR5QmluZGluZ3MuZ2V0KHguX1kwX0tFWSk7dmFyIEY9dGhpcy55KCk7dGhpcy5fYmluZFByb3BlcnR5KHguX1kwX0tFWSxDLEYmJkYuc2NhbGUpO3RoaXMuX3VwZGF0ZVlTY2FsZSgpO3RoaXMucmVuZGVyKCk7cmV0dXJuIHRoaXN9O3gucHJvdG90eXBlLl9vbkRhdGFzZXRVcGRhdGU9ZnVuY3Rpb24oKXt5LnByb3RvdHlwZS5fb25EYXRhc2V0VXBkYXRlLmNhbGwodGhpcyk7dGhpcy5fdXBkYXRlWVNjYWxlKCl9O3gucHJvdG90eXBlLl9hZGREYXRhc2V0PWZ1bmN0aW9uKEMpe3ZhciBGPXRoaXM7dGhpcy5fbGluZURyYXdlcnMuc2V0KEMsbmV3IHAuUHJveHlEcmF3ZXIoZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHQuTGluZVNWR0RyYXdlcn0sZnVuY3Rpb24oRCl7cmV0dXJuIG5ldyBwLkNhbnZhc0RyYXdlcihELAp0Lm1ha2VMaW5lQ2FudmFzRHJhd1N0ZXAoZnVuY3Rpb24oKXt2YXIgQj1BLlBsb3QuX3NjYWxlZEFjY2Vzc29yKEYueCgpKSxHPUEuUGxvdC5fc2NhbGVkQWNjZXNzb3IoRi55KCkpO3JldHVybiBGLl9kM0xpbmVGYWN0b3J5KEMsQixHKX0pKX0pKTt5LnByb3RvdHlwZS5fYWRkRGF0YXNldC5jYWxsKHRoaXMsQyk7cmV0dXJuIHRoaXN9O3gucHJvdG90eXBlLl9jcmVhdGVOb2Rlc0ZvckRhdGFzZXQ9ZnVuY3Rpb24oQyl7eS5wcm90b3R5cGUuX2NyZWF0ZU5vZGVzRm9yRGF0YXNldC5jYWxsKHRoaXMsQyk7Qz10aGlzLl9saW5lRHJhd2Vycy5nZXQoQyk7InN2ZyI9PT10aGlzLnJlbmRlcmVyKCk/Qy51c2VTVkcodGhpcy5fcmVuZGVyQXJlYSk6Qy51c2VDYW52YXModGhpcy5fY2FudmFzKTtyZXR1cm4gQ307eC5wcm90b3R5cGUuX3JlbW92ZURhdGFzZXROb2Rlcz1mdW5jdGlvbihDKXt5LnByb3RvdHlwZS5fcmVtb3ZlRGF0YXNldE5vZGVzLmNhbGwodGhpcyxDKTt0aGlzLl9saW5lRHJhd2Vycy5nZXQoQykucmVtb3ZlKCl9Owp4LnByb3RvdHlwZS5fYWRkaXRpb25hbFBhaW50PWZ1bmN0aW9uKCl7dmFyIEM9dGhpcyxGPXRoaXMuX2dlbmVyYXRlTGluZURyYXdTdGVwcygpLEQ9dGhpcy5fZ2V0RGF0YVRvRHJhdygpO3RoaXMuZGF0YXNldHMoKS5mb3JFYWNoKGZ1bmN0aW9uKEIpe3ZhciBHPUEuUGxvdC5hcHBseURyYXdTdGVwcyhGLEIpO0MuX2xpbmVEcmF3ZXJzLmdldChCKS5kcmF3KEQuZ2V0KEIpLEcpfSl9O3gucHJvdG90eXBlLl9nZW5lcmF0ZUxpbmVEcmF3U3RlcHM9ZnVuY3Rpb24oKXt2YXIgQz1bXTtpZih0aGlzLl9hbmltYXRlT25OZXh0UmVuZGVyKCkpe3ZhciBGPXRoaXMuX2dlbmVyYXRlTGluZUF0dHJUb1Byb2plY3RvcigpO0YuZD10aGlzLl9jb25zdHJ1Y3RMaW5lUHJvamVjdG9yKEEuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy54KCkpLHRoaXMuX2dldFJlc2V0WUZ1bmN0aW9uKCkpO0MucHVzaCh7YXR0clRvUHJvamVjdG9yOkYsYW5pbWF0b3I6dGhpcy5fZ2V0QW5pbWF0b3Iodi5BbmltYXRvci5SRVNFVCl9KX1DLnB1c2goe2F0dHJUb1Byb2plY3Rvcjp0aGlzLl9nZW5lcmF0ZUxpbmVBdHRyVG9Qcm9qZWN0b3IoKSwKYW5pbWF0b3I6dGhpcy5fZ2V0QW5pbWF0b3Iodi5BbmltYXRvci5NQUlOKX0pO3JldHVybiBDfTt4LnByb3RvdHlwZS5fZ2VuZXJhdGVMaW5lQXR0clRvUHJvamVjdG9yPWZ1bmN0aW9uKCl7dmFyIEM9dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCk7Qy5kPXRoaXMuX2NvbnN0cnVjdExpbmVQcm9qZWN0b3IoQS5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSksQS5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkoKSkpO3JldHVybiBDfTt4LnByb3RvdHlwZS5fY3JlYXRlRHJhd2VyPWZ1bmN0aW9uKEMpe3ZhciBGPXRoaXM7cmV0dXJuIG5ldyByLlByb3h5RHJhd2VyKGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBxLkFyZWFTVkdEcmF3ZXJ9LGZ1bmN0aW9uKEQpe3JldHVybiBuZXcgcC5DYW52YXNEcmF3ZXIoRCxxLm1ha2VBcmVhQ2FudmFzRHJhd1N0ZXAoZnVuY3Rpb24oKXt2YXIgQj1BLlBsb3QuX3NjYWxlZEFjY2Vzc29yKEYueCgpKSxHPUEuUGxvdC5fc2NhbGVkQWNjZXNzb3IoRi55KCkpLApLPUEuUGxvdC5fc2NhbGVkQWNjZXNzb3IoRi55MCgpKTtyZXR1cm4gRi5fY3JlYXRlQXJlYUdlbmVyYXRvcihCLEcsSyxGLl9jcmVhdGVEZWZpbmVkUHJvamVjdG9yKEIsRyksQyl9KSl9KX07eC5wcm90b3R5cGUuX2dlbmVyYXRlRHJhd1N0ZXBzPWZ1bmN0aW9uKCl7dmFyIEM9W107aWYodGhpcy5fYW5pbWF0ZU9uTmV4dFJlbmRlcigpKXt2YXIgRj10aGlzLl9nZXRBdHRyVG9Qcm9qZWN0b3IoKTtGLmQ9dGhpcy5fY29uc3RydWN0QXJlYVByb2plY3RvcihBLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueCgpKSx0aGlzLl9nZXRSZXNldFlGdW5jdGlvbigpLEEuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy55MCgpKSk7Qy5wdXNoKHthdHRyVG9Qcm9qZWN0b3I6RixhbmltYXRvcjp0aGlzLl9nZXRBbmltYXRvcih2LkFuaW1hdG9yLlJFU0VUKX0pfUMucHVzaCh7YXR0clRvUHJvamVjdG9yOnRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpLGFuaW1hdG9yOnRoaXMuX2dldEFuaW1hdG9yKHYuQW5pbWF0b3IuTUFJTil9KTsKcmV0dXJuIEN9O3gucHJvdG90eXBlLl91cGRhdGVZU2NhbGU9ZnVuY3Rpb24oKXt2YXIgQz10aGlzLmdldEV4dGVudHNGb3JQcm9wZXJ0eSgieTAiKTtDPW0uQXJyYXkudW5pcShtLkFycmF5LmZsYXR0ZW4oQykpO3ZhciBGPTE9PT1DLmxlbmd0aD9DWzBdOm51bGw7Qz0oQz10aGlzLnkoKSkmJkMuc2NhbGU7bnVsbCE9QyYmKG51bGwhPXRoaXMuX2NvbnN0YW50QmFzZWxpbmVWYWx1ZVByb3ZpZGVyJiYoQy5yZW1vdmVQYWRkaW5nRXhjZXB0aW9uc1Byb3ZpZGVyKHRoaXMuX2NvbnN0YW50QmFzZWxpbmVWYWx1ZVByb3ZpZGVyKSx0aGlzLl9jb25zdGFudEJhc2VsaW5lVmFsdWVQcm92aWRlcj1udWxsKSxudWxsIT1GJiYodGhpcy5fY29uc3RhbnRCYXNlbGluZVZhbHVlUHJvdmlkZXI9ZnVuY3Rpb24oKXtyZXR1cm5bRl19LEMuYWRkUGFkZGluZ0V4Y2VwdGlvbnNQcm92aWRlcih0aGlzLl9jb25zdGFudEJhc2VsaW5lVmFsdWVQcm92aWRlcikpKX07eC5wcm90b3R5cGUuX2dldFJlc2V0WUZ1bmN0aW9uPQpmdW5jdGlvbigpe3JldHVybiBBLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueTAoKSl9O3gucHJvdG90eXBlLl9wcm9wZXJ0eVByb2plY3RvcnM9ZnVuY3Rpb24oKXt2YXIgQz15LnByb3RvdHlwZS5fcHJvcGVydHlQcm9qZWN0b3JzLmNhbGwodGhpcyk7Qy5kPXRoaXMuX2NvbnN0cnVjdEFyZWFQcm9qZWN0b3IoQS5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSksQS5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkoKSksQS5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkwKCkpKTtyZXR1cm4gQ307eC5wcm90b3R5cGUuc2VsZWN0aW9ucz1mdW5jdGlvbihDKXt2YXIgRj10aGlzO3ZvaWQgMD09PUMmJihDPXRoaXMuZGF0YXNldHMoKSk7aWYoImNhbnZhcyI9PT10aGlzLnJlbmRlcmVyKCkpcmV0dXJuIGwuc2VsZWN0QWxsKCk7dmFyIEQ9eS5wcm90b3R5cGUuc2VsZWN0aW9ucy5jYWxsKHRoaXMsQykubm9kZXMoKTtDLm1hcChmdW5jdGlvbihCKXtyZXR1cm4gRi5fbGluZURyYXdlcnMuZ2V0KEIpfSkuZmlsdGVyKGZ1bmN0aW9uKEIpe3JldHVybiBudWxsIT0KQn0pLmZvckVhY2goZnVuY3Rpb24oQil7cmV0dXJuIEQucHVzaC5hcHBseShELEIuZ2V0VmlzdWFsUHJpbWl0aXZlcygpKX0pO3JldHVybiBsLnNlbGVjdEFsbChEKX07eC5wcm90b3R5cGUuX2NvbnN0cnVjdEFyZWFQcm9qZWN0b3I9ZnVuY3Rpb24oQyxGLEQpe3ZhciBCPXRoaXMsRz10aGlzLl9jcmVhdGVEZWZpbmVkUHJvamVjdG9yKEEuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy54KCkpLEEuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy55KCkpKTtyZXR1cm4gZnVuY3Rpb24oSyxMLEope3JldHVybiBCLl9jcmVhdGVBcmVhR2VuZXJhdG9yKEMsRixELEcsSikoSyl9fTt4LnByb3RvdHlwZS5fY3JlYXRlRGVmaW5lZFByb2plY3Rvcj1mdW5jdGlvbihDLEYpe3JldHVybiBmdW5jdGlvbihELEIsRyl7dmFyIEs9QyhELEIsRyk7RD1GKEQsQixHKTtyZXR1cm4gbS5NYXRoLmlzVmFsaWROdW1iZXIoSykmJm0uTWF0aC5pc1ZhbGlkTnVtYmVyKEQpfX07eC5wcm90b3R5cGUuX2NyZWF0ZUFyZWFHZW5lcmF0b3I9CmZ1bmN0aW9uKEMsRixELEIsRyl7dmFyIEs9dGhpcy5fZ2V0Q3VydmVGYWN0b3J5KCk7cmV0dXJuIGwuYXJlYSgpLngoZnVuY3Rpb24oTCxKKXtyZXR1cm4gQyhMLEosRyl9KS55MShmdW5jdGlvbihMLEope3JldHVybiBGKEwsSixHKX0pLnkwKGZ1bmN0aW9uKEwsSil7cmV0dXJuIEQoTCxKLEcpfSkuY3VydmUoSykuZGVmaW5lZChmdW5jdGlvbihMLEope3JldHVybiBCKEwsSixHKX0pfTtyZXR1cm4geH0oYy5MaW5lKTtmLl9ZMF9LRVk9InkwIjtkLkFyZWE9Zn0sZnVuY3Rpb24oYyxkKXsoZnVuY3Rpb24oZil7Zi5NQUlOPSJtYWluIjtmLlJFU0VUPSJyZXNldCJ9KShkLkFuaW1hdG9yfHwoZC5BbmltYXRvcj17fSkpfSxmdW5jdGlvbihjLGQpe3ZhciBmPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZygpe3ZhciBsPXRoaXM7dGhpcy50cmFuc2xhdGU9dGhpcy5zY2FsZT0wO3RoaXMuY2FjaGVkRG9tYWluPVtudWxsLG51bGxdO3RoaXMubGFzdFNlZW5Eb21haW49W251bGwsbnVsbF07dGhpcy51cGRhdGVEb21haW49CmZ1bmN0aW9uKGspe2wubGFzdFNlZW5Eb21haW49ay5nZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbigpO3ZhciBtPWsuc2NhbGVUcmFuc2Zvcm1hdGlvbihsLmNhY2hlZERvbWFpblsxXSktay5zY2FsZVRyYW5zZm9ybWF0aW9uKGwuY2FjaGVkRG9tYWluWzBdKSxwPWsuc2NhbGVUcmFuc2Zvcm1hdGlvbihsLmxhc3RTZWVuRG9tYWluWzFdKS1rLnNjYWxlVHJhbnNmb3JtYXRpb24obC5sYXN0U2VlbkRvbWFpblswXSk7bC5zY2FsZT1tL3B8fDE7bC50cmFuc2xhdGU9ay5zY2FsZVRyYW5zZm9ybWF0aW9uKGwuY2FjaGVkRG9tYWluWzBdKS1rLnNjYWxlVHJhbnNmb3JtYXRpb24obC5sYXN0U2VlbkRvbWFpblswXSkqbC5zY2FsZXx8MH19Zy5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXt0aGlzLnNjYWxlPTE7dGhpcy50cmFuc2xhdGU9MDt0aGlzLmNhY2hlZERvbWFpbj10aGlzLmxhc3RTZWVuRG9tYWlufTtnLnByb3RvdHlwZS5zZXREb21haW49ZnVuY3Rpb24obCl7dGhpcy5jYWNoZWREb21haW49CmwuZ2V0VHJhbnNmb3JtYXRpb25Eb21haW4oKX07cmV0dXJuIGd9KCk7Yz1mdW5jdGlvbigpe2Z1bmN0aW9uIGcobCxrKXt2YXIgbT10aGlzO3RoaXMucmVuZGVyQ2FsbGJhY2s9bDt0aGlzLmFwcGx5VHJhbnNmb3JtQ2FsbGJhY2s9azt0aGlzLmRvbWFpblRyYW5zZm9ybVg9bmV3IGY7dGhpcy5kb21haW5UcmFuc2Zvcm1ZPW5ldyBmO3RoaXMucmVuZGVyRGVmZXJyZWQ9ZnVuY3Rpb24oKXttLmFwcGx5VHJhbnNmb3JtKCk7Y2xlYXJUaW1lb3V0KG0udGltZW91dFRva2VuKTttLnRpbWVvdXRUb2tlbj1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7bS5yZW5kZXJDYWxsYmFjaygpfSxnLkRFRkVSUkVEX1JFTkRFUklOR19ERUxBWSl9fWcucHJvdG90eXBlLnNldERvbWFpbnM9ZnVuY3Rpb24obCxrKXtsJiZ0aGlzLmRvbWFpblRyYW5zZm9ybVguc2V0RG9tYWluKGwpO2smJnRoaXMuZG9tYWluVHJhbnNmb3JtWS5zZXREb21haW4oayk7dGhpcy5yZW5kZXJEZWZlcnJlZCgpfTtnLnByb3RvdHlwZS51cGRhdGVEb21haW5zPQpmdW5jdGlvbihsLGspe2wmJnRoaXMuZG9tYWluVHJhbnNmb3JtWC51cGRhdGVEb21haW4obCk7ayYmdGhpcy5kb21haW5UcmFuc2Zvcm1ZLnVwZGF0ZURvbWFpbihrKTt0aGlzLnJlbmRlckRlZmVycmVkKCl9O2cucHJvdG90eXBlLnJlc2V0VHJhbnNmb3Jtcz1mdW5jdGlvbigpe3RoaXMuZG9tYWluVHJhbnNmb3JtWC5yZXNldCgpO3RoaXMuZG9tYWluVHJhbnNmb3JtWS5yZXNldCgpO3RoaXMuYXBwbHlUcmFuc2Zvcm0oKX07Zy5wcm90b3R5cGUuYXBwbHlUcmFuc2Zvcm09ZnVuY3Rpb24oKXt0aGlzLmFwcGx5VHJhbnNmb3JtQ2FsbGJhY2sodGhpcy5kb21haW5UcmFuc2Zvcm1YLnRyYW5zbGF0ZSx0aGlzLmRvbWFpblRyYW5zZm9ybVkudHJhbnNsYXRlLHRoaXMuZG9tYWluVHJhbnNmb3JtWC5zY2FsZSx0aGlzLmRvbWFpblRyYW5zZm9ybVkuc2NhbGUpfTtyZXR1cm4gZ30oKTtjLkRFRkVSUkVEX1JFTkRFUklOR19ERUxBWT0yMDA7ZC5EZWZlcnJlZFJlbmRlcmVyPWN9LGZ1bmN0aW9uKGMsCmQsZil7dmFyIGc9dGhpcyYmdGhpcy5fX2V4dGVuZHN8fGZ1bmN0aW9uKEMsRil7ZnVuY3Rpb24gRCgpe3RoaXMuY29uc3RydWN0b3I9Q31mb3IodmFyIEIgaW4gRilGLmhhc093blByb3BlcnR5KEIpJiYoQ1tCXT1GW0JdKTtDLnByb3RvdHlwZT1udWxsPT09Rj9PYmplY3QuY3JlYXRlKEYpOihELnByb3RvdHlwZT1GLnByb3RvdHlwZSxuZXcgRCl9LGw9ZigxKSxrPWYoNyksbT1mKDE0KSxwPWYoNikscT1mKDMzKSxyPWYoMyksdD1mKDExKSx2PWYoMCk7Yz1mKDEwKTt2YXIgQT1mKDE5KSx5PWYoMik7Zj1mKDE2KTt2YXIgeD17bGluZWFyOmwuY3VydmVMaW5lYXIsbGluZWFyQ2xvc2VkOmwuY3VydmVMaW5lYXJDbG9zZWQsc3RlcDpsLmN1cnZlU3RlcCxzdGVwQmVmb3JlOmwuY3VydmVTdGVwQmVmb3JlLHN0ZXBBZnRlcjpsLmN1cnZlU3RlcEFmdGVyLGJhc2lzOmwuY3VydmVCYXNpcyxiYXNpc09wZW46bC5jdXJ2ZUJhc2lzT3BlbixiYXNpc0Nsb3NlZDpsLmN1cnZlQmFzaXNDbG9zZWQsCmJ1bmRsZTpsLmN1cnZlQnVuZGxlLGNhcmRpbmFsOmwuY3VydmVDYXJkaW5hbCxjYXJkaW5hbE9wZW46bC5jdXJ2ZUNhcmRpbmFsT3BlbixjYXJkaW5hbENsb3NlZDpsLmN1cnZlQ2FyZGluYWxDbG9zZWQsbW9ub3RvbmU6bC5jdXJ2ZU1vbm90b25lWH07ZC5DdXJ2ZU5hbWU9Yy5tYWtlRW51bSgibGluZWFyIGxpbmVhckNsb3NlZCBzdGVwIHN0ZXBCZWZvcmUgc3RlcEFmdGVyIGJhc2lzIGJhc2lzT3BlbiBiYXNpc0Nsb3NlZCBidW5kbGUgY2FyZGluYWwgY2FyZGluYWxPcGVuIGNhcmRpbmFsQ2xvc2VkIG1vbm90b25lIi5zcGxpdCgiICIpKTtmPWZ1bmN0aW9uKEMpe2Z1bmN0aW9uIEYoKXt2YXIgRD1DLmNhbGwodGhpcyl8fHRoaXM7RC5fY3VydmU9ImxpbmVhciI7RC5fYXV0b3JhbmdlU21vb3RoPSExO0QuX2Nyb3BwZWRSZW5kZXJpbmdFbmFibGVkPSEwO0QuX2NvbGxhcHNlRGVuc2VWZXJ0aWNhbExpbmVzRW5hYmxlZD0hMTtELl9kb3duc2FtcGxpbmdFbmFibGVkPSExO0QuYWRkQ2xhc3MoImxpbmUtcGxvdCIpOwp2YXIgQj1uZXcgay5FYXNpbmc7Qi5zdGVwRHVyYXRpb24oeS5QbG90Ll9BTklNQVRJT05fTUFYX0RVUkFUSU9OKTtCLmVhc2luZ01vZGUoImV4cEluT3V0Iik7Qi5tYXhUb3RhbER1cmF0aW9uKHkuUGxvdC5fQU5JTUFUSU9OX01BWF9EVVJBVElPTik7RC5hbmltYXRvcihBLkFuaW1hdG9yLk1BSU4sQik7RC5hdHRyKCJzdHJva2UiLChuZXcgci5Db2xvcikucmFuZ2UoKVswXSk7RC5hdHRyKCJzdHJva2Utd2lkdGgiLCIycHgiKTtyZXR1cm4gRH1nKEYsQyk7Ri5wcm90b3R5cGUueD1mdW5jdGlvbihELEIsRyl7aWYobnVsbD09RClyZXR1cm4gQy5wcm90b3R5cGUueC5jYWxsKHRoaXMpO0MucHJvdG90eXBlLnguY2FsbCh0aGlzLEQsQixHKTt0aGlzLl9zZXRTY2FsZVNuYXBwaW5nKCk7cmV0dXJuIHRoaXN9O0YucHJvdG90eXBlLnk9ZnVuY3Rpb24oRCxCLEcpe2lmKG51bGw9PUQpcmV0dXJuIEMucHJvdG90eXBlLnkuY2FsbCh0aGlzKTtDLnByb3RvdHlwZS55LmNhbGwodGhpcyxELEIsCkcpO3RoaXMuX3NldFNjYWxlU25hcHBpbmcoKTtyZXR1cm4gdGhpc307Ri5wcm90b3R5cGUuYXV0b3JhbmdlTW9kZT1mdW5jdGlvbihEKXtpZihudWxsPT1EKXJldHVybiBDLnByb3RvdHlwZS5hdXRvcmFuZ2VNb2RlLmNhbGwodGhpcyk7Qy5wcm90b3R5cGUuYXV0b3JhbmdlTW9kZS5jYWxsKHRoaXMsRCk7dGhpcy5fc2V0U2NhbGVTbmFwcGluZygpO3JldHVybiB0aGlzfTtGLnByb3RvdHlwZS5hdXRvcmFuZ2VTbW9vdGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXV0b3JhbmdlU21vb3RofTtGLnByb3RvdHlwZS5fc2V0U2NhbGVTbmFwcGluZz1mdW5jdGlvbigpeyJ4Ij09PXRoaXMuYXV0b3JhbmdlTW9kZSgpJiZ0aGlzLngoKSYmdGhpcy54KCkuc2NhbGUmJnRoaXMueCgpLnNjYWxlIGluc3RhbmNlb2YgdC5RdWFudGl0YXRpdmVTY2FsZSYmdGhpcy54KCkuc2NhbGUuc25hcHBpbmdEb21haW5FbmFibGVkKCF0aGlzLmF1dG9yYW5nZVNtb290aCgpKTsieSI9PT10aGlzLmF1dG9yYW5nZU1vZGUoKSYmCnRoaXMueSgpJiZ0aGlzLnkoKS5zY2FsZSYmdGhpcy55KCkuc2NhbGUgaW5zdGFuY2VvZiB0LlF1YW50aXRhdGl2ZVNjYWxlJiZ0aGlzLnkoKS5zY2FsZS5zbmFwcGluZ0RvbWFpbkVuYWJsZWQoIXRoaXMuYXV0b3JhbmdlU21vb3RoKCkpfTtGLnByb3RvdHlwZS5jdXJ2ZT1mdW5jdGlvbihEKXtpZihudWxsPT1EKXJldHVybiB0aGlzLl9jdXJ2ZTt0aGlzLl9jdXJ2ZT1EO3RoaXMucmVuZGVyKCk7cmV0dXJuIHRoaXN9O0YucHJvdG90eXBlLmRvd25zYW1wbGluZ0VuYWJsZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZG93bnNhbXBsaW5nRW5hYmxlZH07Ri5wcm90b3R5cGUuY3JvcHBlZFJlbmRlcmluZ0VuYWJsZWQ9ZnVuY3Rpb24oRCl7aWYobnVsbD09RClyZXR1cm4gdGhpcy5fY3JvcHBlZFJlbmRlcmluZ0VuYWJsZWQ7dGhpcy5fY3JvcHBlZFJlbmRlcmluZ0VuYWJsZWQ9RDt0aGlzLnJlbmRlcigpO3JldHVybiB0aGlzfTtGLnByb3RvdHlwZS5jb2xsYXBzZURlbnNlTGluZXNFbmFibGVkPQpmdW5jdGlvbihEKXtpZihudWxsPT1EKXJldHVybiB0aGlzLl9jb2xsYXBzZURlbnNlVmVydGljYWxMaW5lc0VuYWJsZWQ7dGhpcy5fY29sbGFwc2VEZW5zZVZlcnRpY2FsTGluZXNFbmFibGVkPUQ7dGhpcy5yZW5kZXIoKTtyZXR1cm4gdGhpc307Ri5wcm90b3R5cGUuX2NyZWF0ZURyYXdlcj1mdW5jdGlvbihEKXt2YXIgQj10aGlzO3JldHVybiBuZXcgcC5Qcm94eURyYXdlcihmdW5jdGlvbigpe3JldHVybiBuZXcgcS5MaW5lU1ZHRHJhd2VyfSxmdW5jdGlvbihHKXtyZXR1cm4gbmV3IG0uQ2FudmFzRHJhd2VyKEcscS5tYWtlTGluZUNhbnZhc0RyYXdTdGVwKGZ1bmN0aW9uKCl7cmV0dXJuIEIuX2QzTGluZUZhY3RvcnkoRCl9KSl9KX07Ri5wcm90b3R5cGUuZ2V0RXh0ZW50c0ZvclByb3BlcnR5PWZ1bmN0aW9uKEQpe3ZhciBCPUMucHJvdG90eXBlLmdldEV4dGVudHNGb3JQcm9wZXJ0eS5jYWxsKHRoaXMsRCk7aWYoIXRoaXMuX2F1dG9yYW5nZVNtb290aHx8dGhpcy5hdXRvcmFuZ2VNb2RlKCkhPT0KRHx8IngiIT09dGhpcy5hdXRvcmFuZ2VNb2RlKCkmJiJ5IiE9PXRoaXMuYXV0b3JhbmdlTW9kZSgpKXJldHVybiBCO0Q9dGhpcy5fZ2V0RWRnZUludGVyc2VjdGlvblBvaW50cygpO3ZhciBHPSJ5Ij09PXRoaXMuYXV0b3JhbmdlTW9kZSgpP0QubGVmdC5jb25jYXQoRC5yaWdodCkubWFwKGZ1bmN0aW9uKEspe3JldHVybiBLLnl9KTpELnRvcC5jb25jYXQoRC5ib3R0b20pLm1hcChmdW5jdGlvbihLKXtyZXR1cm4gSy54fSk7cmV0dXJuIEIubWFwKGZ1bmN0aW9uKEspe3JldHVybiBsLmV4dGVudChsLm1lcmdlKFtLLEddKSl9KX07Ri5wcm90b3R5cGUuX2dldEVkZ2VJbnRlcnNlY3Rpb25Qb2ludHM9ZnVuY3Rpb24oKXt2YXIgRD10aGlzO2lmKCEodGhpcy55KCkuc2NhbGUgaW5zdGFuY2VvZiB0LlF1YW50aXRhdGl2ZVNjYWxlJiZ0aGlzLngoKS5zY2FsZSBpbnN0YW5jZW9mIHQuUXVhbnRpdGF0aXZlU2NhbGUpKXJldHVybntsZWZ0OltdLHJpZ2h0OltdLHRvcDpbXSxib3R0b206W119Owp2YXIgQj10aGlzLnkoKS5zY2FsZSxHPXRoaXMueCgpLnNjYWxlLEs9e2xlZnQ6W10scmlnaHQ6W10sdG9wOltdLGJvdHRvbTpbXX0sTD1HLnNjYWxlKEcuZG9tYWluKClbMF0pLEo9Ry5zY2FsZShHLmRvbWFpbigpWzFdKSxQPUIuc2NhbGUoQi5kb21haW4oKVswXSksUz1CLnNjYWxlKEIuZG9tYWluKClbMV0pO3RoaXMuZGF0YXNldHMoKS5mb3JFYWNoKGZ1bmN0aW9uKE4pe2Zvcih2YXIgVD1OLmRhdGEoKSxZLGFhLGhhLFgsY2EsZWEsa2EsYmE9MTtiYTxULmxlbmd0aDtiYSsrKVg9ZWF8fEcuc2NhbGUoRC54KCkuYWNjZXNzb3IoVFtiYS0xXSxiYS0xLE4pKSxjYT1rYXx8Qi5zY2FsZShELnkoKS5hY2Nlc3NvcihUW2JhLTFdLGJhLTEsTikpLGVhPUcuc2NhbGUoRC54KCkuYWNjZXNzb3IoVFtiYV0sYmEsTikpLGthPUIuc2NhbGUoRC55KCkuYWNjZXNzb3IoVFtiYV0sYmEsTikpLFg8TD09PUw8PWVhJiYoWT1MLVgsYWE9ZWEtWCxoYT1rYS1jYSxZPVkqaGEvYWEsSy5sZWZ0LnB1c2goe3g6TCwKeTpCLmludmVydChjYStZKX0pKSxYPEo9PT1KPD1lYSYmKFk9Si1YLGFhPWVhLVgsaGE9a2EtY2EsWT1ZKmhhL2FhLEsucmlnaHQucHVzaCh7eDpKLHk6Qi5pbnZlcnQoY2ErWSl9KSksY2E8Uz09PVM8PWthJiYoYWE9ZWEtWCxZPVMtY2EsaGE9a2EtY2EsWT1ZKmFhL2hhLEsudG9wLnB1c2goe3g6Ry5pbnZlcnQoWCtZKSx5OlN9KSksY2E8UD09PVA8PWthJiYoYWE9ZWEtWCxZPVAtY2EsaGE9a2EtY2EsWT1ZKmFhL2hhLEsuYm90dG9tLnB1c2goe3g6Ry5pbnZlcnQoWCtZKSx5OlB9KSl9KTtyZXR1cm4gS307Ri5wcm90b3R5cGUuX2dldFJlc2V0WUZ1bmN0aW9uPWZ1bmN0aW9uKCl7dmFyIEQ9dGhpcy55KCkuc2NhbGUuZG9tYWluKCksQj1NYXRoLm1heChEWzBdLERbMV0pO0Q9TWF0aC5taW4oRFswXSxEWzFdKTtCPTA+QiYmQnx8MDxEJiZEfHwwO3ZhciBHPXRoaXMueSgpLnNjYWxlLnNjYWxlKEIpO3JldHVybiBmdW5jdGlvbigpe3JldHVybiBHfX07Ri5wcm90b3R5cGUuX2dlbmVyYXRlRHJhd1N0ZXBzPQpmdW5jdGlvbigpe3ZhciBEPVtdO2lmKHRoaXMuX2FuaW1hdGVPbk5leHRSZW5kZXIoKSl7dmFyIEI9dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCk7Qi5kPXRoaXMuX2NvbnN0cnVjdExpbmVQcm9qZWN0b3IoeS5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSksdGhpcy5fZ2V0UmVzZXRZRnVuY3Rpb24oKSk7RC5wdXNoKHthdHRyVG9Qcm9qZWN0b3I6QixhbmltYXRvcjp0aGlzLl9nZXRBbmltYXRvcihBLkFuaW1hdG9yLlJFU0VUKX0pfUQucHVzaCh7YXR0clRvUHJvamVjdG9yOnRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpLGFuaW1hdG9yOnRoaXMuX2dldEFuaW1hdG9yKEEuQW5pbWF0b3IuTUFJTil9KTtyZXR1cm4gRH07Ri5wcm90b3R5cGUuX2dlbmVyYXRlQXR0clRvUHJvamVjdG9yPWZ1bmN0aW9uKCl7dmFyIEQ9Qy5wcm90b3R5cGUuX2dlbmVyYXRlQXR0clRvUHJvamVjdG9yLmNhbGwodGhpcyk7T2JqZWN0LmtleXMoRCkuZm9yRWFjaChmdW5jdGlvbihCKXtpZigiZCIhPT0KQil7dmFyIEc9RFtCXTtEW0JdPWZ1bmN0aW9uKEssTCxKKXtyZXR1cm4gMDxLLmxlbmd0aD9HKEtbMF0sTCxKKTpudWxsfX19KTtyZXR1cm4gRH07Ri5wcm90b3R5cGUuZW50aXRpZXNBdD1mdW5jdGlvbihEKXtEPXRoaXMuZW50aXR5TmVhcmVzdEJ5WFRoZW5ZKEQpO3JldHVybiBudWxsIT1EP1tEXTpbXX07Ri5wcm90b3R5cGUuZW50aXR5TmVhcmVzdEJ5WFRoZW5ZPWZ1bmN0aW9uKEQpe3ZhciBCPUluZmluaXR5LEc9SW5maW5pdHksSyxMPXRoaXMuYm91bmRzKCk7dGhpcy5lbnRpdGllcygpLmZvckVhY2goZnVuY3Rpb24oSil7aWYodi5NYXRoLndpdGhpbihKLnBvc2l0aW9uLEwpKXt2YXIgUD1NYXRoLmFicyhELngtSi5wb3NpdGlvbi54KSxTPU1hdGguYWJzKEQueS1KLnBvc2l0aW9uLnkpO2lmKFA8Qnx8UD09PUImJlM8RylLPUosQj1QLEc9U319KTtyZXR1cm4gS307Ri5wcm90b3R5cGUuX3Byb3BlcnR5UHJvamVjdG9ycz1mdW5jdGlvbigpe3ZhciBEPUMucHJvdG90eXBlLl9wcm9wZXJ0eVByb2plY3RvcnMuY2FsbCh0aGlzKTsKRC5kPXRoaXMuX2NvbnN0cnVjdExpbmVQcm9qZWN0b3IoeS5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSkseS5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkoKSkpO3JldHVybiBEfTtGLnByb3RvdHlwZS5fY29uc3RydWN0TGluZVByb2plY3Rvcj1mdW5jdGlvbihELEIpe3ZhciBHPXRoaXM7cmV0dXJuIGZ1bmN0aW9uKEssTCxKKXtyZXR1cm4gRy5fZDNMaW5lRmFjdG9yeShKLEQsQikoSyl9fTtGLnByb3RvdHlwZS5fZDNMaW5lRmFjdG9yeT1mdW5jdGlvbihELEIsRyl7ZnVuY3Rpb24gSyhMLEosUCl7dmFyIFM9QihMLEosUCk7TD1HKEwsSixQKTtyZXR1cm4gdi5NYXRoLmlzVmFsaWROdW1iZXIoUykmJnYuTWF0aC5pc1ZhbGlkTnVtYmVyKEwpfXZvaWQgMD09PUImJihCPXkuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy54KCkpKTt2b2lkIDA9PT1HJiYoRz15LlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueSgpKSk7cmV0dXJuIGwubGluZSgpLngoZnVuY3Rpb24oTCxKKXtyZXR1cm4gQihMLApKLEQpfSkueShmdW5jdGlvbihMLEope3JldHVybiBHKEwsSixEKX0pLmN1cnZlKHRoaXMuX2dldEN1cnZlRmFjdG9yeSgpKS5kZWZpbmVkKGZ1bmN0aW9uKEwsSil7cmV0dXJuIEsoTCxKLEQpfSl9O0YucHJvdG90eXBlLl9nZXRDdXJ2ZUZhY3Rvcnk9ZnVuY3Rpb24oKXt2YXIgRD10aGlzLmN1cnZlKCk7cmV0dXJuInN0cmluZyI9PT10eXBlb2YgRD8oRD14W0RdLG51bGw9PUQ/eC5saW5lYXI6RCk6RH07Ri5wcm90b3R5cGUuX2dldERhdGFUb0RyYXc9ZnVuY3Rpb24oKXt2YXIgRD10aGlzLEI9bmV3IHYuTWFwO3RoaXMuZGF0YXNldHMoKS5mb3JFYWNoKGZ1bmN0aW9uKEcpe3ZhciBLPUcuZGF0YSgpO2lmKEQuX2Nyb3BwZWRSZW5kZXJpbmdFbmFibGVkfHxELl9kb3duc2FtcGxpbmdFbmFibGVkKXt2YXIgTD1LLm1hcChmdW5jdGlvbihKLFApe3JldHVybiBQfSk7RC5fY3JvcHBlZFJlbmRlcmluZ0VuYWJsZWQmJihMPUQuX2ZpbHRlckNyb3BwZWRSZW5kZXJpbmcoRyxMKSk7RC5fZG93bnNhbXBsaW5nRW5hYmxlZCYmCihMPUQuX2ZpbHRlckRvd25zYW1wbGluZyhHLEwpKTtELl9jb2xsYXBzZURlbnNlVmVydGljYWxMaW5lc0VuYWJsZWQmJihMPUQuX2ZpbHRlckRlbnNlTGluZXMoRyxMKSk7Qi5zZXQoRyxbTC5tYXAoZnVuY3Rpb24oSil7cmV0dXJuIEtbSl19KV0pfWVsc2UgQi5zZXQoRyxbS10pfSk7cmV0dXJuIEJ9O0YucHJvdG90eXBlLl9maWx0ZXJDcm9wcGVkUmVuZGVyaW5nPWZ1bmN0aW9uKEQsQil7ZnVuY3Rpb24gRyhoYSxYKXtyZXR1cm4gdi5NYXRoLmluUmFuZ2UoaGEsMCxLLndpZHRoKCkpJiZ2Lk1hdGguaW5SYW5nZShYLDAsSy5oZWlnaHQoKSl9Zm9yKHZhciBLPXRoaXMsTD15LlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueCgpKSxKPXkuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy55KCkpLFA9RC5kYXRhKCksUz1bXSxOPTA7TjxCLmxlbmd0aDtOKyspe3ZhciBUPUwoUFtCW05dXSxCW05dLEQpLFk9SihQW0JbTl1dLEJbTl0sRCk7VD1HKFQsWSk7aWYoIVQmJm51bGwhPUJbTi0xXSYmCm51bGwhPVBbQltOLTFdXSl7WT1MKFBbQltOLTFdXSxCW04tMV0sRCk7dmFyIGFhPUooUFtCW04tMV1dLEJbTi0xXSxEKTtUPVR8fEcoWSxhYSl9VHx8bnVsbD09QltOKzFdfHxudWxsPT1QW0JbTisxXV18fChZPUwoUFtCW04rMV1dLEJbTisxXSxEKSxhYT1KKFBbQltOKzFdXSxCW04rMV0sRCksVD1UfHxHKFksYWEpKTtUJiZTLnB1c2goQltOXSl9cmV0dXJuIFN9O0YucHJvdG90eXBlLl9maWx0ZXJEb3duc2FtcGxpbmc9ZnVuY3Rpb24oRCxCKXtmdW5jdGlvbiBHKGthLGJhKXt2YXIgbGE9TChLW0Jba2FdXSxCW2thXSxEKSx3YT1KKEtbQltrYV1dLEJba2FdLEQpLENhPUwoS1tCW2thKzFdXSxCW2thKzFdLEQpO2thPUooS1tCW2thKzFdXSxCW2thKzFdLEQpO3JldHVybiBJbmZpbml0eT09PWJhP01hdGguZmxvb3IobGEpPT09TWF0aC5mbG9vcihDYSk6TWF0aC5mbG9vcihrYSk9PT1NYXRoLmZsb29yKHdhKyhDYS1sYSkqYmEpfWlmKDA9PT1CLmxlbmd0aClyZXR1cm5bXTtmb3IodmFyIEs9CkQuZGF0YSgpLEw9eS5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSksSj15LlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueSgpKSxQPVtCWzBdXSxTPTA7UzxCLmxlbmd0aC0xOyl7dmFyIE49QltTXSxUPUwoS1tCW1NdXSxCW1NdLEQpLFk9SihLW0JbU11dLEJbU10sRCksYWE9TChLW0JbUysxXV0sQltTKzFdLEQpLGhhPUooS1tCW1MrMV1dLEJbUysxXSxEKTtoYT1NYXRoLmZsb29yKFQpPT09TWF0aC5mbG9vcihhYSk/SW5maW5pdHk6KGhhLVkpLyhhYS1UKTthYT1CW1NdO1k9SW5maW5pdHk9PT1oYT9ZOlQ7VD1hYTtmb3IodmFyIFg9WSxjYT0hMDtTPEIubGVuZ3RoLTEmJihjYXx8RyhTLGhhKSk7KXtTKys7Y2E9ITE7dmFyIGVhPUluZmluaXR5PT09aGE/SihLW0JbU11dLEJbU10sRCk6TChLW0JbU11dLEJbU10sRCk7ZWE+WCYmKFg9ZWEsVD1CW1NdKTtlYTxZJiYoWT1lYSxhYT1CW1NdKX1oYT1CW1NdO2FhIT09TiYmUC5wdXNoKGFhKTtUIT09YWEmJlQhPT1OJiZQLnB1c2goVCk7CmhhIT09TiYmaGEhPT1hYSYmaGEhPT1UJiZQLnB1c2goaGEpfXJldHVybiBQfTtGLnByb3RvdHlwZS5fZmlsdGVyRGVuc2VMaW5lcz1mdW5jdGlvbihELEIpe2lmKDA9PT1CLmxlbmd0aClyZXR1cm5bXTt2YXIgRz1ELmRhdGEoKSxLPXkuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy54KCkpLEw9eS5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkoKSk7cmV0dXJuIHRoaXMuX2J1Y2tldEJ5WChELEIsZnVuY3Rpb24oSil7cmV0dXJuIEsoR1tKXSxKLEQpfSxmdW5jdGlvbihKKXtyZXR1cm4gTChHW0pdLEosRCl9KX07Ri5wcm90b3R5cGUuX2J1Y2tldEJ5WD1mdW5jdGlvbihELEIsRyxLKXt2YXIgTD1bXTtEPUQuZGF0YSgpO2Zvcih2YXIgSj1udWxsLFA9MDtQPD1CLmxlbmd0aDsrK1Ape3ZhciBTPUJbUF07aWYobnVsbCE9RFtTXSl7dmFyIE49TWF0aC5mbG9vcihHKFMpKSxUPUsoUyk7bnVsbD09Sj9KPW5ldyB2LkJ1Y2tldChTLE4sVCk6Si5pc0luQnVja2V0KE4pP0ouYWRkVG9CdWNrZXQoVCwKUyk6KEwucHVzaC5hcHBseShMLEouZ2V0VW5pcXVlSW5kaWNlcygpKSxKPW5ldyB2LkJ1Y2tldChTLE4sVCkpfX1udWxsIT1KJiZMLnB1c2guYXBwbHkoTCxKLmdldFVuaXF1ZUluZGljZXMoKSk7cmV0dXJuIEx9O3JldHVybiBGfShmLlhZUGxvdCk7ZC5MaW5lPWZ9LGZ1bmN0aW9uKGMsZCxmKXt2YXIgZz10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8ZnVuY3Rpb24ocSxyKXtmdW5jdGlvbiB0KCl7dGhpcy5jb25zdHJ1Y3Rvcj1xfWZvcih2YXIgdiBpbiByKXIuaGFzT3duUHJvcGVydHkodikmJihxW3ZdPXJbdl0pO3EucHJvdG90eXBlPW51bGw9PT1yP09iamVjdC5jcmVhdGUocik6KHQucHJvdG90eXBlPXIucHJvdG90eXBlLG5ldyB0KX0sbD1mKDEpLGs9ZigyNiksbT1mKDApLHA9WzAsMV07Yz1mdW5jdGlvbihxKXtmdW5jdGlvbiByKCl7dmFyIHQ9cS5jYWxsKHRoaXMpfHx0aGlzO3QuX3JhbmdlPVswLDFdO3QuX2QzU2NhbGU9bC5zY2FsZUJhbmQoKTt0Ll9kM1NjYWxlLnJhbmdlKHApOwp0Ll9kM1RyYW5zZm9ybWF0aW9uU2NhbGU9bC5zY2FsZUxpbmVhcigpO3QuX2QzVHJhbnNmb3JtYXRpb25TY2FsZS5kb21haW4ocCk7dC5faW5uZXJQYWRkaW5nPXIuX2NvbnZlcnRUb1Bsb3R0YWJsZUlubmVyUGFkZGluZygpO3QuX291dGVyUGFkZGluZz1yLl9jb252ZXJ0VG9QbG90dGFibGVPdXRlclBhZGRpbmcoKTtyZXR1cm4gdH1nKHIscSk7ci5wcm90b3R5cGUuY2xvbmVXaXRob3V0UHJvdmlkZXJzPWZ1bmN0aW9uKCl7dmFyIHQ9KG5ldyByKS5kb21haW4odGhpcy5kb21haW4oKSkucmFuZ2UodGhpcy5yYW5nZSgpKS5pbm5lclBhZGRpbmcodGhpcy5pbm5lclBhZGRpbmcoKSkub3V0ZXJQYWRkaW5nKHRoaXMub3V0ZXJQYWRkaW5nKCkpO3QuX2QzVHJhbnNmb3JtYXRpb25TY2FsZS5kb21haW4odGhpcy5fZDNUcmFuc2Zvcm1hdGlvblNjYWxlLmRvbWFpbigpKTtyZXR1cm4gdH07ci5wcm90b3R5cGUuZXh0ZW50T2ZWYWx1ZXM9ZnVuY3Rpb24odCl7cmV0dXJuIG0uQXJyYXkudW5pcSh0KX07CnIucHJvdG90eXBlLl9nZXRFeHRlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gbS5BcnJheS51bmlxKHRoaXMuX2dldEFsbEluY2x1ZGVkVmFsdWVzKCkpfTtyLnByb3RvdHlwZS5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIHEucHJvdG90eXBlLmRvbWFpbi5jYWxsKHRoaXMsdCl9O3IucHJvdG90eXBlLmludmVydFJhbmdlPWZ1bmN0aW9uKCl7dmFyIHQsdj10aGlzO3ZvaWQgMD09PXQmJih0PXRoaXMucmFuZ2UoKSk7dmFyIEE9dGhpcy5fZDNTY2FsZS5iYW5kd2lkdGgoKSx5PXRoaXMuaW52ZXJ0ZWRUcmFuc2Zvcm1hdGlvbih0WzBdKSx4PXRoaXMuaW52ZXJ0ZWRUcmFuc2Zvcm1hdGlvbih0WzFdKTt0PXRoaXMuX2QzU2NhbGUuZG9tYWluKCk7dmFyIEM9dC5tYXAoZnVuY3Rpb24oRil7cmV0dXJuIHYuX2QzU2NhbGUoRikrQS8yfSk7eT1sLmJpc2VjdChDLHkpO3g9bC5iaXNlY3QoQyx4KTtyZXR1cm4gdC5zbGljZSh5LHgpfTtyLnByb3RvdHlwZS5yYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gcS5wcm90b3R5cGUucmFuZ2UuY2FsbCh0aGlzLAp0KX07ci5fY29udmVydFRvUGxvdHRhYmxlSW5uZXJQYWRkaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIDEvLjctMX07ci5fY29udmVydFRvUGxvdHRhYmxlT3V0ZXJQYWRkaW5nPWZ1bmN0aW9uKCl7cmV0dXJuLjUvLjd9O3IucHJvdG90eXBlLl9zZXRCYW5kcz1mdW5jdGlvbigpe3ZhciB0PTEtMS8oMSt0aGlzLmlubmVyUGFkZGluZygpKSx2PXRoaXMub3V0ZXJQYWRkaW5nKCkvKDErdGhpcy5pbm5lclBhZGRpbmcoKSk7dGhpcy5fZDNTY2FsZS5wYWRkaW5nSW5uZXIodCk7dGhpcy5fZDNTY2FsZS5wYWRkaW5nT3V0ZXIodil9O3IucHJvdG90eXBlLnJhbmdlQmFuZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZXNjYWxlQmFuZCh0aGlzLl9kM1NjYWxlLmJhbmR3aWR0aCgpKX07ci5wcm90b3R5cGUuc3RlcFdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Jlc2NhbGVCYW5kKHRoaXMuX2QzU2NhbGUuYmFuZHdpZHRoKCkqKDErdGhpcy5pbm5lclBhZGRpbmcoKSkpfTtyLnByb3RvdHlwZS50aWNrcz0KZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb21haW4oKX07ci5wcm90b3R5cGUuaW5uZXJQYWRkaW5nPWZ1bmN0aW9uKHQpe2lmKG51bGw9PXQpcmV0dXJuIHRoaXMuX2lubmVyUGFkZGluZzt0aGlzLl9pbm5lclBhZGRpbmc9dDt0aGlzLnJhbmdlKHRoaXMucmFuZ2UoKSk7dGhpcy5fZGlzcGF0Y2hVcGRhdGUoKTtyZXR1cm4gdGhpc307ci5wcm90b3R5cGUub3V0ZXJQYWRkaW5nPWZ1bmN0aW9uKHQpe2lmKG51bGw9PXQpcmV0dXJuIHRoaXMuX291dGVyUGFkZGluZzt0aGlzLl9vdXRlclBhZGRpbmc9dDt0aGlzLnJhbmdlKHRoaXMucmFuZ2UoKSk7dGhpcy5fZGlzcGF0Y2hVcGRhdGUoKTtyZXR1cm4gdGhpc307ci5wcm90b3R5cGUuc2NhbGU9ZnVuY3Rpb24odCl7dD10aGlzLl9kM1NjYWxlKHQpK3RoaXMuX2QzU2NhbGUuYmFuZHdpZHRoKCkvMjtyZXR1cm4gdGhpcy5fZDNUcmFuc2Zvcm1hdGlvblNjYWxlKHQpfTtyLnByb3RvdHlwZS56b29tPWZ1bmN0aW9uKHQsdil7dmFyIEE9dGhpczsKdGhpcy5fZDNUcmFuc2Zvcm1hdGlvblNjYWxlLmRvbWFpbih0aGlzLl9kM1RyYW5zZm9ybWF0aW9uU2NhbGUucmFuZ2UoKS5tYXAoZnVuY3Rpb24oeSl7cmV0dXJuIEEuX2QzVHJhbnNmb3JtYXRpb25TY2FsZS5pbnZlcnQoay56b29tT3V0KHksdCx2KSl9KSk7dGhpcy5fZGlzcGF0Y2hVcGRhdGUoKX07ci5wcm90b3R5cGUucGFuPWZ1bmN0aW9uKHQpe3ZhciB2PXRoaXM7dGhpcy5fZDNUcmFuc2Zvcm1hdGlvblNjYWxlLmRvbWFpbih0aGlzLl9kM1RyYW5zZm9ybWF0aW9uU2NhbGUucmFuZ2UoKS5tYXAoZnVuY3Rpb24oQSl7cmV0dXJuIHYuX2QzVHJhbnNmb3JtYXRpb25TY2FsZS5pbnZlcnQoQSt0KX0pKTt0aGlzLl9kaXNwYXRjaFVwZGF0ZSgpfTtyLnByb3RvdHlwZS5zY2FsZVRyYW5zZm9ybWF0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9kM1RyYW5zZm9ybWF0aW9uU2NhbGUodCl9O3IucHJvdG90eXBlLmludmVydGVkVHJhbnNmb3JtYXRpb249ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2QzVHJhbnNmb3JtYXRpb25TY2FsZS5pbnZlcnQodCl9OwpyLnByb3RvdHlwZS5nZXRUcmFuc2Zvcm1hdGlvbkV4dGVudD1mdW5jdGlvbigpe3JldHVybiBwfTtyLnByb3RvdHlwZS5nZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kM1RyYW5zZm9ybWF0aW9uU2NhbGUuZG9tYWluKCl9O3IucHJvdG90eXBlLnNldFRyYW5zZm9ybWF0aW9uRG9tYWluPWZ1bmN0aW9uKHQpe3RoaXMuX2QzVHJhbnNmb3JtYXRpb25TY2FsZS5kb21haW4odCk7dGhpcy5fZGlzcGF0Y2hVcGRhdGUoKX07ci5wcm90b3R5cGUuX2dldERvbWFpbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9iYWNraW5nU2NhbGVEb21haW4oKX07ci5wcm90b3R5cGUuX2JhY2tpbmdTY2FsZURvbWFpbj1mdW5jdGlvbih0KXtpZihudWxsPT10KXJldHVybiB0aGlzLl9kM1NjYWxlLmRvbWFpbigpO3RoaXMuX2QzU2NhbGUuZG9tYWluKHQpO3RoaXMuX3NldEJhbmRzKCk7cmV0dXJuIHRoaXN9O3IucHJvdG90eXBlLl9nZXRSYW5nZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yYW5nZX07CnIucHJvdG90eXBlLl9zZXRSYW5nZT1mdW5jdGlvbih0KXt0aGlzLl9yYW5nZT10O3RoaXMuX2QzVHJhbnNmb3JtYXRpb25TY2FsZS5yYW5nZSh0KTt0aGlzLl9zZXRCYW5kcygpfTtyLnByb3RvdHlwZS5fcmVzY2FsZUJhbmQ9ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguYWJzKHRoaXMuX2QzVHJhbnNmb3JtYXRpb25TY2FsZSh0KS10aGlzLl9kM1RyYW5zZm9ybWF0aW9uU2NhbGUoMCkpfTtyZXR1cm4gcn0oZigxNykuU2NhbGUpO2QuQ2F0ZWdvcnk9Y30sZnVuY3Rpb24oYyxkLGYpe2Z1bmN0aW9uIGcoeCl7dHJ5e3ZhciBDPXgubm9kZSgpLmdldEJCb3goKX1jYXRjaChGKXtDPXt4OjAseTowLHdpZHRoOjAsaGVpZ2h0OjB9fXJldHVybiBDfWZ1bmN0aW9uIGwoeCl7aWYoIm51bWJlciI9PT10eXBlb2YgeClyZXR1cm57bWluOngsbWF4Onh9O2lmKHggaW5zdGFuY2VvZiBPYmplY3QmJiJtaW4iaW4geCYmIm1heCJpbiB4KXJldHVybiB4O3Rocm93IEVycm9yKCJpbnB1dCAnIit4KyInIGNhbid0IGJlIHBhcnNlZCBhcyBhbiBSYW5nZSIpOwp9ZnVuY3Rpb24gayh4LEMpe3g9eC5nZXRQcm9wZXJ0eVZhbHVlKEMpO3JldHVybiBwYXJzZUZsb2F0KHgpfHwwfWZ1bmN0aW9uIG0oeCl7aWYobnVsbD09eHx8Im5vbmUiPT09eClyZXR1cm4gbnVsbDt4PXgubWF0Y2goQSk7aWYobnVsbD09eHx8Mj54Lmxlbmd0aClyZXR1cm4gbnVsbDt4PXhbMV0uc3BsaXQoeSkubWFwKGZ1bmN0aW9uKEMpe3JldHVybiBwYXJzZUZsb2F0KEMpfSk7cmV0dXJuIDYhPXgubGVuZ3RoP251bGw6eH12YXIgcD1mKDEpLHE9TWF0aDtkLmNvbnRhaW5zPWZ1bmN0aW9uKHgsQyl7Zm9yKDtudWxsIT1DJiZDIT09eDspQz1DLnBhcmVudE5vZGU7cmV0dXJuIEM9PT14fTtkLmVsZW1lbnRCQm94PWc7ZC5lbnRpdHlCb3VuZHM9ZnVuY3Rpb24oeCl7cmV0dXJuIHggaW5zdGFuY2VvZiBTVkdFbGVtZW50P2cocC5zZWxlY3QoeCkpOnggaW5zdGFuY2VvZiBIVE1MRWxlbWVudD8oeD14LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHt4OngubGVmdCx5OngudG9wLHdpZHRoOngud2lkdGgsCmhlaWdodDp4LmhlaWdodH0pOnt4OjAseTowLHdpZHRoOjAsaGVpZ2h0OjB9fTtkLlNDUkVFTl9SRUZSRVNIX1JBVEVfTUlMTElTRUNPTkRTPTFFMy82MDtkLnJlcXVlc3RBbmltYXRpb25GcmFtZVBvbHlmaWxsPWZ1bmN0aW9uKHgpe251bGwhPXdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU/d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSh4KTpzZXRUaW1lb3V0KHgsZC5TQ1JFRU5fUkVGUkVTSF9SQVRFX01JTExJU0VDT05EUyl9O2QuZWxlbWVudFdpZHRoPWZ1bmN0aW9uKHgpe3g9eCBpbnN0YW5jZW9mIHAuc2VsZWN0aW9uP3gubm9kZSgpOng7eD13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh4KTtyZXR1cm4gayh4LCJ3aWR0aCIpK2soeCwicGFkZGluZy1sZWZ0Iikrayh4LCJwYWRkaW5nLXJpZ2h0Iikrayh4LCJib3JkZXItbGVmdC13aWR0aCIpK2soeCwiYm9yZGVyLXJpZ2h0LXdpZHRoIil9O2QuZWxlbWVudEhlaWdodD1mdW5jdGlvbih4KXt4PXggaW5zdGFuY2VvZiBwLnNlbGVjdGlvbj8KeC5ub2RlKCk6eDt4PXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHgpO3JldHVybiBrKHgsImhlaWdodCIpK2soeCwicGFkZGluZy10b3AiKStrKHgsInBhZGRpbmctYm90dG9tIikrayh4LCJib3JkZXItdG9wLXdpZHRoIikrayh4LCJib3JkZXItYm90dG9tLXdpZHRoIil9O3ZhciByPS90cmFuc2xhdGVccypcKFxzKigoPzpbLStdP1swLTldKlwuP1swLTldKykpKD86KD86KD86XHMrLD9ccyopfCg/OixccyopKSgoPzpbLStdP1swLTldKlwuP1swLTldKykpKT9ccypcKS8sdD0vcm90YXRlXHMqXChccyooKD86Wy0rXT9bMC05XSpcLj9bMC05XSspKVxzKlwpLyx2PS9zY2FsZVxzKlwoXHMqKCg/OlstK10/WzAtOV0qXC4/WzAtOV0rKSkoPzooPzooPzpccyssP1xzKil8KD86LFxzKikpKCg/OlstK10/WzAtOV0qXC4/WzAtOV0rKSkpP1xzKlwpLztkLmdldFRyYW5zbGF0ZVZhbHVlcz1mdW5jdGlvbih4KXt4PXIuZXhlYyh4LmF0dHIoInRyYW5zZm9ybSIpKTtpZihudWxsIT14KXt2YXIgQz0KeFsyXTtyZXR1cm5bK3hbMV0sKyh2b2lkIDA9PT1DPzA6QyldfXJldHVyblswLDBdfTtkLmdldFJvdGF0ZT1mdW5jdGlvbih4KXt4PXQuZXhlYyh4LmF0dHIoInRyYW5zZm9ybSIpKTtyZXR1cm4gbnVsbCE9eD8reFsxXTowfTtkLmdldFNjYWxlVmFsdWVzPWZ1bmN0aW9uKHgpe3ZhciBDPXYuZXhlYyh4LmF0dHIoInRyYW5zZm9ybSIpKTtyZXR1cm4gbnVsbCE9Qz8oeD1DWzFdLEM9Q1syXSxbK3gsbnVsbD09Qz8reDorQ10pOlswLDBdfTtkLmNsaWVudFJlY3RzT3ZlcmxhcD1mdW5jdGlvbih4LEMpe3JldHVybiBxLmZsb29yKHgucmlnaHQpPD1xLmNlaWwoQy5sZWZ0KXx8cS5jZWlsKHgubGVmdCk+PXEuZmxvb3IoQy5yaWdodCl8fHEuZmxvb3IoeC5ib3R0b20pPD1xLmNlaWwoQy50b3ApfHxxLmNlaWwoeC50b3ApPj1xLmZsb29yKEMuYm90dG9tKT8hMTohMH07ZC5leHBhbmRSZWN0PWZ1bmN0aW9uKHgsQyl7cmV0dXJue2xlZnQ6eC5sZWZ0LUMsdG9wOngudG9wLUMscmlnaHQ6eC5yaWdodCsKQyxib3R0b206eC5ib3R0b20rQyx3aWR0aDp4LndpZHRoKzIqQyxoZWlnaHQ6eC5oZWlnaHQrMipDfX07ZC5jbGllbnRSZWN0SW5zaWRlPWZ1bmN0aW9uKHgsQyl7cmV0dXJuIHEuZmxvb3IoQy5sZWZ0KTw9cS5jZWlsKHgubGVmdCkmJnEuZmxvb3IoQy50b3ApPD1xLmNlaWwoeC50b3ApJiZxLmZsb29yKHgucmlnaHQpPD1xLmNlaWwoQy5yaWdodCkmJnEuZmxvb3IoeC5ib3R0b20pPD1xLmNlaWwoQy5ib3R0b20pfTtkLmludGVyc2VjdHNCQm94PWZ1bmN0aW9uKHgsQyxGLEQpe3ZvaWQgMD09PUQmJihEPS41KTt4PWwoeCk7Qz1sKEMpO3JldHVybiBGLngrRi53aWR0aD49eC5taW4tRCYmRi54PD14Lm1heCtEJiZGLnkrRi5oZWlnaHQ+PUMubWluLUQmJkYueTw9Qy5tYXgrRH07ZC5nZXRIdG1sRWxlbWVudEFuY2VzdG9ycz1mdW5jdGlvbih4KXtmb3IodmFyIEM9W107eCYmeCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50OylDLnB1c2goeCkseD14LnBhcmVudEVsZW1lbnQ7cmV0dXJuIEN9OwpkLmdldEVsZW1lbnRUcmFuc2Zvcm09ZnVuY3Rpb24oeCl7eD13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh4LG51bGwpO3g9eC5nZXRQcm9wZXJ0eVZhbHVlKCItd2Via2l0LXRyYW5zZm9ybSIpfHx4LmdldFByb3BlcnR5VmFsdWUoIi1tb3otdHJhbnNmb3JtIil8fHguZ2V0UHJvcGVydHlWYWx1ZSgiLW1zLXRyYW5zZm9ybSIpfHx4LmdldFByb3BlcnR5VmFsdWUoIi1vLXRyYW5zZm9ybSIpfHx4LmdldFByb3BlcnR5VmFsdWUoInRyYW5zZm9ybSIpO3JldHVybiBtKHgpfTt2YXIgQT0vXm1hdHJpeFwoKFteKV0rKVwpJC8seT0vWywgXSsvfSxmdW5jdGlvbihjLGQsZil7ZnVuY3Rpb24gZyh0LHYpe3JldHVyblt0WzBdKnZbMF0rdFsyXSp2WzFdLHRbMV0qdlswXSt0WzNdKnZbMV0sdFswXSp2WzJdK3RbMl0qdlszXSx0WzFdKnZbMl0rdFszXSp2WzNdLHRbMF0qdls0XSt0WzJdKnZbNV0rdFs0XSx0WzFdKnZbNF0rdFszXSp2WzVdK3RbNV1dfWZ1bmN0aW9uIGwodCx2KXtyZXR1cm5bdFswXSwKdFsxXSx0WzJdLHRbM10sdFswXSp2WzBdK3RbMl0qdlsxXSt0WzRdLHRbMV0qdlswXSt0WzNdKnZbMV0rdFs1XV19ZnVuY3Rpb24gayh0KXt2YXIgdj10WzBdKnRbM10tdFsxXSp0WzJdO2lmKDA9PT12KXRocm93IEVycm9yKCJzaW5ndWxhciBtYXRyaXgiKTt2PTEvdjtyZXR1cm5bdip0WzNdLHYqLXRbMV0sdiotdFsyXSx2KnRbMF0sdiooLXRbM10qdFs0XSt0WzJdKnRbNV0pLHYqKHRbMV0qdFs0XSstdFswXSp0WzVdKV19dmFyIG09ZigxKSxwPWYoNTUpLHE9TWF0aCxyPVsxLDAsMCwxLDAsMF07ZC5pblJhbmdlPWZ1bmN0aW9uKHQsdixBKXtyZXR1cm4gcS5taW4odixBKTw9dCYmdDw9cS5tYXgodixBKX07ZC5jbGFtcD1mdW5jdGlvbih0LHYsQSl7cmV0dXJuIHEubWluKHEubWF4KHYsdCksQSl9O2QubWF4PWZ1bmN0aW9uKHQsdixBKXt2YXIgeT0iZnVuY3Rpb24iPT09dHlwZW9mIHY/djpudWxsO3Y9bnVsbD09eT92OkE7dD1udWxsPT15P20ubWF4KHQpOm0ubWF4KHQseSk7cmV0dXJuIHZvaWQgMCE9PQp0P3Q6dn07ZC5taW49ZnVuY3Rpb24odCx2LEEpe3ZhciB5PSJmdW5jdGlvbiI9PT10eXBlb2Ygdj92Om51bGw7dj1udWxsPT15P3Y6QTt0PW51bGw9PXk/bS5taW4odCk6bS5taW4odCx5KTtyZXR1cm4gdm9pZCAwIT09dD90OnZ9O2QuaXNOYU49ZnVuY3Rpb24odCl7cmV0dXJuIHQhPT10fTtkLmlzVmFsaWROdW1iZXI9ZnVuY3Rpb24odCl7cmV0dXJuIm51bWJlciI9PT10eXBlb2YgdCYmMT50LXR9O2QucmFuZ2U9ZnVuY3Rpb24odCx2LEEpe3ZvaWQgMD09PUEmJihBPTEpO2lmKDA9PT1BKXRocm93IEVycm9yKCJzdGVwIGNhbm5vdCBiZSAwIik7dj1xLm1heChxLmNlaWwoKHYtdCkvQSksMCk7Zm9yKHZhciB5PVtdLHg9MDt4PHY7Kyt4KXlbeF09dCtBKng7cmV0dXJuIHl9O2QuZGlzdGFuY2VTcXVhcmVkPWZ1bmN0aW9uKHQsdil7cmV0dXJuIHEucG93KHYueS10LnksMikrcS5wb3codi54LXQueCwyKX07ZC5kZWdyZWVzVG9SYWRpYW5zPWZ1bmN0aW9uKHQpe3JldHVybiB0LzM2MCoKcS5QSSoyfTtkLndpdGhpbj1mdW5jdGlvbih0LHYpe3JldHVybiB2LnRvcExlZnQueDw9dC54JiZ2LmJvdHRvbVJpZ2h0Lng+PXQueCYmdi50b3BMZWZ0Lnk8PXQueSYmdi5ib3R0b21SaWdodC55Pj10Lnl9O2QuYm91bmRzSW50ZXJzZWN0cz1mdW5jdGlvbih0LHYsQSx5LHgsQyl7cmV0dXJuIHQ8PTAreCYmMDw9dCtBJiZ2PD0wK0MmJjA8PXYreX07ZC5nZXRDdW11bGF0aXZlVHJhbnNmb3JtPWZ1bmN0aW9uKHQpe3Q9cC5nZXRIdG1sRWxlbWVudEFuY2VzdG9ycyh0KTtmb3IodmFyIHY9cixBPW51bGwseT0wO3k8dC5sZW5ndGg7eSsrKXt2YXIgeD10W3ldLEM9cC5nZXRFbGVtZW50VHJhbnNmb3JtKHgpO2lmKG51bGwhPUMpe3ZhciBGPXguY2xpZW50V2lkdGgvMixEPXguY2xpZW50SGVpZ2h0LzI7dj1sKHYsW0YsRF0pO3Y9Zyh2LGsoQykpO3Y9bCh2LFstRiwtRF0pfUM9eC5zY3JvbGxMZWZ0O0Y9eC5zY3JvbGxUb3A7aWYobnVsbD09PUF8fHg9PT1BKUMtPXgub2Zmc2V0TGVmdCt4LmNsaWVudExlZnQsCkYtPXgub2Zmc2V0VG9wK3guY2xpZW50VG9wLEE9eC5vZmZzZXRQYXJlbnQ7dj1sKHYsW0MsRl0pfXJldHVybiB2fTtkLm11bHRpcGx5TWF0cml4PWc7ZC5wcmVtdWx0aXBseVRyYW5zbGF0ZT1mdW5jdGlvbih0LHYpe3JldHVyblt2WzBdLHZbMV0sdlsyXSx2WzNdLHZbNF0rdFswXSx2WzVdK3RbMV1dfTtkLm11bHRpcGx5VHJhbnNsYXRlPWw7ZC5pbnZlcnRNYXRyaXg9aztkLmFwcGx5VHJhbnNmb3JtPWZ1bmN0aW9uKHQsdil7cmV0dXJue3g6dFswXSp2LngrdFsyXSp2LnkrdFs0XSx5OnRbMV0qdi54K3RbM10qdi55K3RbNV19fX0sZnVuY3Rpb24oYyxkLGYpe3ZhciBnPW5ldyAoZigxMTQpLlNwbGl0U3RyYXRlZ3lMaW5lYXIpO2M9ZnVuY3Rpb24oKXtmdW5jdGlvbiBtKHAscSl7dm9pZCAwPT09cCYmKHA9NSk7dm9pZCAwPT09cSYmKHE9Zyk7dGhpcy5tYXhOb2RlQ2hpbGRyZW49cDt0aGlzLnNwbGl0U3RyYXRlZ3k9cTt0aGlzLnJvb3Q9bmV3IGwoITApO3RoaXMuc2l6ZT0wfW0ucHJvdG90eXBlLmdldFJvb3Q9CmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucm9vdH07bS5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLnJvb3Q9bmV3IGwoITApO3RoaXMuc2l6ZT0wfTttLnByb3RvdHlwZS5pbnNlcnQ9ZnVuY3Rpb24ocCxxKXtmb3IodmFyIHI9dGhpcy5yb290OyFyLmxlYWY7KXI9ci5zdWJ0cmVlKHApO3A9bC52YWx1ZU5vZGUocCxxKTtyLmluc2VydChwKTtmb3IodGhpcy5zaXplKz0xO3Iub3ZlcmZsb3codGhpcy5tYXhOb2RlQ2hpbGRyZW4pOylyPXIuc3BsaXQodGhpcy5zcGxpdFN0cmF0ZWd5KSxudWxsPT1yLnBhcmVudCYmKHRoaXMucm9vdD1yKX07bS5wcm90b3R5cGUubG9jYXRlPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLnF1ZXJ5KGZ1bmN0aW9uKHEpe3JldHVybiBxLmNvbnRhaW5zKHApfSl9O20ucHJvdG90eXBlLmludGVyc2VjdD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5xdWVyeShmdW5jdGlvbihxKXtyZXR1cm4gay5pc0JvdW5kc092ZXJsYXBCb3VuZHMocSxwKX0pfTttLnByb3RvdHlwZS5pbnRlcnNlY3RYPQpmdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5xdWVyeShmdW5jdGlvbihxKXtyZXR1cm4gay5pc0JvdW5kc092ZXJsYXBYKHEscCl9KX07bS5wcm90b3R5cGUuaW50ZXJzZWN0WT1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5xdWVyeShmdW5jdGlvbihxKXtyZXR1cm4gay5pc0JvdW5kc092ZXJsYXBZKHEscCl9KX07bS5wcm90b3R5cGUucXVlcnk9ZnVuY3Rpb24ocCl7dmFyIHE9W107aWYobnVsbCE9dGhpcy5yb290LmJvdW5kcyYmIXAodGhpcy5yb290LmJvdW5kcykpcmV0dXJuIHE7Zm9yKHZhciByPVt0aGlzLnJvb3RdOzA8ci5sZW5ndGg7KWZvcih2YXIgdD1yLnNoaWZ0KCksdj0wO3Y8dC5lbnRyaWVzLmxlbmd0aDt2Kyspe3ZhciBBPXQuZW50cmllc1t2XTtwKEEuYm91bmRzKSYmKHQubGVhZj9xLnB1c2goQS52YWx1ZSk6ci5wdXNoKEEpKX1yZXR1cm4gcX07cmV0dXJuIG19KCk7ZC5SVHJlZT1jO3ZhciBsPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbShwKXt0aGlzLmxlYWY9cDt0aGlzLmJvdW5kcz0KbnVsbDt0aGlzLmVudHJpZXM9W107dGhpcy52YWx1ZT10aGlzLnBhcmVudD1udWxsfW0udmFsdWVOb2RlPWZ1bmN0aW9uKHAscSl7dmFyIHI9bmV3IG0oITApO3IuYm91bmRzPXA7ci52YWx1ZT1xO3JldHVybiByfTttLnByb3RvdHlwZS5vdmVyZmxvdz1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5lbnRyaWVzLmxlbmd0aD5wfTttLnByb3RvdHlwZS5pbnNlcnQ9ZnVuY3Rpb24ocCl7dGhpcy5lbnRyaWVzLnB1c2gocCk7cC5wYXJlbnQ9dGhpcztmb3IodmFyIHE9dGhpcztudWxsIT1xOylxLmJvdW5kcz1rLnVuaW9uQWxsKFtxLmJvdW5kcyxwLmJvdW5kc10pLHE9cS5wYXJlbnR9O20ucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbihwKXtwPXRoaXMuZW50cmllcy5pbmRleE9mKHApO2lmKDA8PXApZm9yKHRoaXMuZW50cmllcy5zcGxpY2UocCwxKSxwPXRoaXM7bnVsbCE9cDspcC5ib3VuZHM9ay51bmlvbkFsbChwLmVudHJpZXMubWFwKGZ1bmN0aW9uKHEpe3JldHVybiBxLmJvdW5kc30pKSwKcD1wLnBhcmVudDtyZXR1cm4gdGhpc307bS5wcm90b3R5cGUuc3VidHJlZT1mdW5jdGlvbihwKXtmb3IodmFyIHE9bnVsbCxyPTA7cjx0aGlzLmVudHJpZXMubGVuZ3RoO3IrKyl7dmFyIHQ9dGhpcy5lbnRyaWVzW3JdLHY9dC51bmlvbkFyZWFEaWZmZXJlbmNlKHApO2lmKEluZmluaXR5PnZ8fEluZmluaXR5PT09diYmbnVsbCE9cSYmdC5lbnRyaWVzLmxlbmd0aDxxLmVudHJpZXMubGVuZ3RoKXE9dH1yZXR1cm4gcX07bS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24ocCl7bnVsbCE9dGhpcy5wYXJlbnQmJnRoaXMucGFyZW50LnJlbW92ZSh0aGlzKTt2YXIgcT1bbmV3IG0odGhpcy5sZWFmKSxuZXcgbSh0aGlzLmxlYWYpXTtwLnNwbGl0KHRoaXMuZW50cmllcyxxKTtwPW51bGwhPXRoaXMucGFyZW50P3RoaXMucGFyZW50Om5ldyBtKCExKTtwLmluc2VydChxWzBdKTtwLmluc2VydChxWzFdKTtyZXR1cm4gcH07bS5wcm90b3R5cGUudW5pb25BcmVhRGlmZmVyZW5jZT1mdW5jdGlvbihwKXtyZXR1cm4gTWF0aC5hYnMoay51bmlvbih0aGlzLmJvdW5kcywKcCkuYXJlYSgpLXRoaXMuYm91bmRzLmFyZWEoKSl9O20ucHJvdG90eXBlLm1heERlcHRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGVhZj8xOjErdGhpcy5lbnRyaWVzLm1hcChmdW5jdGlvbihwKXtyZXR1cm4gcC5tYXhEZXB0aCgpfSkucmVkdWNlKGZ1bmN0aW9uKHAscSl7cmV0dXJuIE1hdGgubWF4KHAscSl9KX07cmV0dXJuIG19KCk7ZC5SVHJlZU5vZGU9bDt2YXIgaz1mdW5jdGlvbigpe2Z1bmN0aW9uIG0ocCxxLHIsdCl7dGhpcy54bD1wO3RoaXMueWw9cTt0aGlzLnhoPXI7dGhpcy55aD10O3RoaXMud2lkdGg9dGhpcy54aC10aGlzLnhsO3RoaXMuaGVpZ2h0PXRoaXMueWgtdGhpcy55bH1tLnh5d2g9ZnVuY3Rpb24ocCxxLHIsdCl7cmV0dXJuIG5ldyBtKHAscSxwK3IscSt0KX07bS5lbnRpdHlCb3VuZHM9ZnVuY3Rpb24ocCl7cmV0dXJuIG5ldyBtKHAueCxwLnkscC54K3Aud2lkdGgscC55K3AuaGVpZ2h0KX07bS5ib3VuZHM9ZnVuY3Rpb24ocCl7cmV0dXJuIG0ucG9pbnRQYWlyKHAudG9wTGVmdCwKcC5ib3R0b21SaWdodCl9O20ucG9pbnRQYWlyPWZ1bmN0aW9uKHAscSl7cmV0dXJuIG5ldyBtKE1hdGgubWluKHAueCxxLngpLE1hdGgubWluKHAueSxxLnkpLE1hdGgubWF4KHAueCxxLngpLE1hdGgubWF4KHAueSxxLnkpKX07bS5wb2ludHM9ZnVuY3Rpb24ocCl7aWYoMj5wLmxlbmd0aCl0aHJvdyBFcnJvcigibmVlZCBhdCBsZWFzdCAyIHBvaW50cyB0byBjcmVhdGUgYm91bmRzIik7dmFyIHE9cC5tYXAoZnVuY3Rpb24ocil7cmV0dXJuIHIueH0pO3A9cC5tYXAoZnVuY3Rpb24ocil7cmV0dXJuIHIueX0pO3JldHVybiBuZXcgbShxLnJlZHVjZShmdW5jdGlvbihyLHQpe3JldHVybiBNYXRoLm1pbihyLHQpfSkscC5yZWR1Y2UoZnVuY3Rpb24ocix0KXtyZXR1cm4gTWF0aC5taW4ocix0KX0pLHEucmVkdWNlKGZ1bmN0aW9uKHIsdCl7cmV0dXJuIE1hdGgubWF4KHIsdCl9KSxwLnJlZHVjZShmdW5jdGlvbihyLHQpe3JldHVybiBNYXRoLm1heChyLHQpfSkpfTttLnVuaW9uPWZ1bmN0aW9uKHAsCnEpe3JldHVybiBuZXcgbShNYXRoLm1pbihwLnhsLHEueGwpLE1hdGgubWluKHAueWwscS55bCksTWF0aC5tYXgocC54aCxxLnhoKSxNYXRoLm1heChwLnloLHEueWgpKX07bS51bmlvbkFsbD1mdW5jdGlvbihwKXtwPXAuZmlsdGVyKGZ1bmN0aW9uKHEpe3JldHVybiBudWxsIT1xfSk7cmV0dXJuIDA9PT1wLmxlbmd0aD9udWxsOnAucmVkdWNlKGZ1bmN0aW9uKHEscil7cmV0dXJuIG0udW5pb24ocSxyKX0pfTttLmlzQm91bmRzT3ZlcmxhcEJvdW5kcz1mdW5jdGlvbihwLHEpe3JldHVybiBtLmlzQm91bmRzT3ZlcmxhcFgocCxxKSYmbS5pc0JvdW5kc092ZXJsYXBZKHAscSl9O20uaXNCb3VuZHNPdmVybGFwWD1mdW5jdGlvbihwLHEpe3JldHVybiEocC54aDxxLnhsKSYmIShwLnhsPnEueGgpfTttLmlzQm91bmRzT3ZlcmxhcFk9ZnVuY3Rpb24ocCxxKXtyZXR1cm4hKHAueWg8cS55bCkmJiEocC55bD5xLnloKX07bS5wcm90b3R5cGUuYXJlYT1mdW5jdGlvbigpe251bGw9PXRoaXMuYXJlYUNhY2hlZCYmCih0aGlzLmFyZWFDYWNoZWQ9KHRoaXMueGgtdGhpcy54bCkqKHRoaXMueWgtdGhpcy55bCkpO3JldHVybiB0aGlzLmFyZWFDYWNoZWR9O20ucHJvdG90eXBlLmNvbnRhaW5zPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLnhsPD1wLngmJnRoaXMueGg+PXAueCYmdGhpcy55bDw9cC55JiZ0aGlzLnloPj1wLnl9O3JldHVybiBtfSgpO2QuUlRyZWVCb3VuZHM9a30sZnVuY3Rpb24oYyxkKXtjPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZigpeyJmdW5jdGlvbiI9PT10eXBlb2Ygd2luZG93LlNldD90aGlzLl9lczZTZXQ9bmV3IHdpbmRvdy5TZXQ6dGhpcy5fdmFsdWVzPVtdO3RoaXMuc2l6ZT0wfWYucHJvdG90eXBlLmFkZD1mdW5jdGlvbihnKXtpZihudWxsIT10aGlzLl9lczZTZXQpcmV0dXJuIHRoaXMuX2VzNlNldC5hZGQoZyksdGhpcy5zaXplPXRoaXMuX2VzNlNldC5zaXplLHRoaXM7dGhpcy5oYXMoZyl8fCh0aGlzLl92YWx1ZXMucHVzaChnKSx0aGlzLnNpemU9dGhpcy5fdmFsdWVzLmxlbmd0aCk7CnJldHVybiB0aGlzfTtmLnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24oZyl7aWYobnVsbCE9dGhpcy5fZXM2U2V0KXJldHVybiBnPXRoaXMuX2VzNlNldC5kZWxldGUoZyksdGhpcy5zaXplPXRoaXMuX2VzNlNldC5zaXplLGc7Zz10aGlzLl92YWx1ZXMuaW5kZXhPZihnKTtyZXR1cm4tMSE9PWc/KHRoaXMuX3ZhbHVlcy5zcGxpY2UoZywxKSx0aGlzLnNpemU9dGhpcy5fdmFsdWVzLmxlbmd0aCwhMCk6ITF9O2YucHJvdG90eXBlLmhhcz1mdW5jdGlvbihnKXtyZXR1cm4gbnVsbCE9dGhpcy5fZXM2U2V0P3RoaXMuX2VzNlNldC5oYXMoZyk6LTEhPT10aGlzLl92YWx1ZXMuaW5kZXhPZihnKX07Zi5wcm90b3R5cGUuZm9yRWFjaD1mdW5jdGlvbihnLGwpe3ZhciBrPXRoaXM7bnVsbCE9dGhpcy5fZXM2U2V0P3RoaXMuX2VzNlNldC5mb3JFYWNoKGZ1bmN0aW9uKG0scCl7cmV0dXJuIGcuY2FsbChsLG0scCxrKX0sbCk6dGhpcy5fdmFsdWVzLmZvckVhY2goZnVuY3Rpb24obSl7Zy5jYWxsKGwsCm0sbSxrKX0pfTtyZXR1cm4gZn0oKTtkLlNldD1jfSxmdW5jdGlvbihjLGQsZil7ZnVuY3Rpb24gZyhsKXtmb3IodmFyIGsgaW4gbClkLmhhc093blByb3BlcnR5KGspfHwoZFtrXT1sW2tdKX1nKGYoMTMxKSk7ZyhmKDEzMCkpfSxmdW5jdGlvbihjLGQsZil7dmFyIGc9dGhpcyYmdGhpcy5fX2V4dGVuZHN8fGZ1bmN0aW9uKGssbSl7ZnVuY3Rpb24gcCgpe3RoaXMuY29uc3RydWN0b3I9a31mb3IodmFyIHEgaW4gbSltLmhhc093blByb3BlcnR5KHEpJiYoa1txXT1tW3FdKTtrLnByb3RvdHlwZT1udWxsPT09bT9PYmplY3QuY3JlYXRlKG0pOihwLnByb3RvdHlwZT1tLnByb3RvdHlwZSxuZXcgcCl9LGw9ZigyMSk7Yz1mdW5jdGlvbihrKXtmdW5jdGlvbiBtKHAscSl7dmFyIHI9ay5jYWxsKHRoaXMscCxxKXx8dGhpcztyLmNhY2hlPW5ldyBsLkNhY2hlKGZ1bmN0aW9uKHQpe3JldHVybiByLl9tZWFzdXJlQ2hhcmFjdGVyTm90RnJvbUNhY2hlKHQpfSk7cmV0dXJuIHJ9ZyhtLGspO20ucHJvdG90eXBlLl9tZWFzdXJlQ2hhcmFjdGVyTm90RnJvbUNhY2hlPQpmdW5jdGlvbihwKXtyZXR1cm4gay5wcm90b3R5cGUuX21lYXN1cmVDaGFyYWN0ZXIuY2FsbCh0aGlzLHApfTttLnByb3RvdHlwZS5fbWVhc3VyZUNoYXJhY3Rlcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jYWNoZS5nZXQocCl9O20ucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7dGhpcy5jYWNoZS5jbGVhcigpfTtyZXR1cm4gbX0oZig2MSkuQ2hhcmFjdGVyTWVhc3VyZXIpO2QuQ2FjaGVDaGFyYWN0ZXJNZWFzdXJlcj1jfSxmdW5jdGlvbihjLGQsZil7dmFyIGc9dGhpcyYmdGhpcy5fX2V4dGVuZHN8fGZ1bmN0aW9uKGwsayl7ZnVuY3Rpb24gbSgpe3RoaXMuY29uc3RydWN0b3I9bH1mb3IodmFyIHAgaW4gaylrLmhhc093blByb3BlcnR5KHApJiYobFtwXT1rW3BdKTtsLnByb3RvdHlwZT1udWxsPT09az9PYmplY3QuY3JlYXRlKGspOihtLnByb3RvdHlwZT1rLnByb3RvdHlwZSxuZXcgbSl9O2M9ZnVuY3Rpb24obCl7ZnVuY3Rpb24gaygpe3JldHVybiBsLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8CnRoaXN9ZyhrLGwpO2sucHJvdG90eXBlLl9tZWFzdXJlQ2hhcmFjdGVyPWZ1bmN0aW9uKG0pe3JldHVybiBsLnByb3RvdHlwZS5fbWVhc3VyZUxpbmUuY2FsbCh0aGlzLG0pfTtrLnByb3RvdHlwZS5fbWVhc3VyZUxpbmU9ZnVuY3Rpb24obSl7dmFyIHA9dGhpczttPW0uc3BsaXQoIiIpLm1hcChmdW5jdGlvbihxKXtyZXR1cm4gcC5fbWVhc3VyZUNoYXJhY3RlcihxKX0pO3JldHVybntoZWlnaHQ6bS5yZWR1Y2UoZnVuY3Rpb24ocSxyKXtyZXR1cm4gTWF0aC5tYXgocSxyLmhlaWdodCl9LDApLHdpZHRoOm0ucmVkdWNlKGZ1bmN0aW9uKHEscil7cmV0dXJuIHErci53aWR0aH0sMCl9fTtyZXR1cm4ga30oZig2MykuTWVhc3VyZXIpO2QuQ2hhcmFjdGVyTWVhc3VyZXI9Y30sZnVuY3Rpb24oYyxkLGYpe2Z1bmN0aW9uIGcobCl7Zm9yKHZhciBrIGluIGwpZC5oYXNPd25Qcm9wZXJ0eShrKXx8KGRba109bFtrXSl9ZyhmKDM2KSk7ZyhmKDYwKSk7ZyhmKDEzMikpO2coZig2MSkpO2coZig2MykpfSwKZnVuY3Rpb24oYyxkLGYpe3ZhciBnPXRoaXMmJnRoaXMuX19leHRlbmRzfHxmdW5jdGlvbihrLG0pe2Z1bmN0aW9uIHAoKXt0aGlzLmNvbnN0cnVjdG9yPWt9Zm9yKHZhciBxIGluIG0pbS5oYXNPd25Qcm9wZXJ0eShxKSYmKGtbcV09bVtxXSk7ay5wcm90b3R5cGU9bnVsbD09PW0/T2JqZWN0LmNyZWF0ZShtKToocC5wcm90b3R5cGU9bS5wcm90b3R5cGUsbmV3IHApfSxsPWYoMzYpO2M9ZnVuY3Rpb24oayl7ZnVuY3Rpb24gbShwLHEpe3ZvaWQgMD09PXEmJihxPSExKTtwPWsuY2FsbCh0aGlzLHApfHx0aGlzO3AudXNlR3VhcmRzPXE7cmV0dXJuIHB9ZyhtLGspO20ucHJvdG90eXBlLl9hZGRHdWFyZHM9ZnVuY3Rpb24ocCl7cmV0dXJuIGwuQWJzdHJhY3RNZWFzdXJlci5IRUlHSFRfVEVYVCtwK2wuQWJzdHJhY3RNZWFzdXJlci5IRUlHSFRfVEVYVH07bS5wcm90b3R5cGUuX21lYXN1cmVMaW5lPWZ1bmN0aW9uKHApe3ZhciBxO3ZvaWQgMD09PXEmJihxPSExKTtxPXRoaXMudXNlR3VhcmRzfHwKcXx8L15bXHQgXSQvLnRlc3QocCk7cD1rLnByb3RvdHlwZS5tZWFzdXJlLmNhbGwodGhpcyxxP3RoaXMuX2FkZEd1YXJkcyhwKTpwKTtwLndpZHRoLT1xPzIqdGhpcy5nZXRHdWFyZFdpZHRoKCk6MDtyZXR1cm4gcH07bS5wcm90b3R5cGUubWVhc3VyZT1mdW5jdGlvbihwKXt2YXIgcT10aGlzO3ZvaWQgMD09PXAmJihwPWwuQWJzdHJhY3RNZWFzdXJlci5IRUlHSFRfVEVYVCk7aWYoIiI9PT1wLnRyaW0oKSlyZXR1cm57d2lkdGg6MCxoZWlnaHQ6MH07cD1wLnRyaW0oKS5zcGxpdCgiXG4iKS5tYXAoZnVuY3Rpb24ocil7cmV0dXJuIHEuX21lYXN1cmVMaW5lKHIpfSk7cmV0dXJue2hlaWdodDpwLnJlZHVjZShmdW5jdGlvbihyLHQpe3JldHVybiByK3QuaGVpZ2h0fSwwKSx3aWR0aDpwLnJlZHVjZShmdW5jdGlvbihyLHQpe3JldHVybiBNYXRoLm1heChyLHQud2lkdGgpfSwwKX19O20ucHJvdG90eXBlLmdldEd1YXJkV2lkdGg9ZnVuY3Rpb24oKXtudWxsPT10aGlzLmd1YXJkV2lkdGgmJgoodGhpcy5ndWFyZFdpZHRoPWsucHJvdG90eXBlLm1lYXN1cmUuY2FsbCh0aGlzKS53aWR0aCk7cmV0dXJuIHRoaXMuZ3VhcmRXaWR0aH07cmV0dXJuIG19KGwuQWJzdHJhY3RNZWFzdXJlcik7ZC5NZWFzdXJlcj1jfSxmdW5jdGlvbihjLGQsZil7ZnVuY3Rpb24gZyhsKXtmb3IodmFyIGsgaW4gbClkLmhhc093blByb3BlcnR5KGspfHwoZFtrXT1sW2tdKX1nKGYoMTM4KSk7ZyhmKDY1KSl9LGZ1bmN0aW9uKGMsZCxmKXt2YXIgZz1mKDIxKTtjPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbCgpe3RoaXMubWF4TGluZXMoSW5maW5pdHkpO3RoaXMudGV4dFRyaW1taW5nKCk7dGhpcy5hbGxvd0JyZWFraW5nV29yZHMoKTt0aGlzLl90b2tlbml6ZXI9bmV3IGcuVG9rZW5pemVyO3RoaXMuX2JyZWFraW5nQ2hhcmFjdGVyPSItIn1sLnByb3RvdHlwZS5tYXhMaW5lcz1mdW5jdGlvbihrKXtpZihudWxsPT1rKXJldHVybiB0aGlzLl9tYXhMaW5lczt0aGlzLl9tYXhMaW5lcz1rO3JldHVybiB0aGlzfTsKbC5wcm90b3R5cGUudGV4dFRyaW1taW5nPWZ1bmN0aW9uKCl7dGhpcy5fdGV4dFRyaW1taW5nPSJlbGxpcHNpcyJ9O2wucHJvdG90eXBlLmFsbG93QnJlYWtpbmdXb3Jkcz1mdW5jdGlvbigpe3RoaXMuX2FsbG93QnJlYWtpbmdXb3Jkcz0hMH07bC5wcm90b3R5cGUud3JhcD1mdW5jdGlvbihrLG0scCxxKXt2YXIgcj10aGlzO3ZvaWQgMD09PXEmJihxPUluZmluaXR5KTt2YXIgdD17bm9Ccm9rZVdvcmRzOjAsbm9MaW5lczowLG9yaWdpbmFsVGV4dDprLHRydW5jYXRlZFRleHQ6IiIsd3JhcHBlZFRleHQ6IiJ9O3A9e2F2YWlsYWJsZUxpbmVzOk1hdGgubWluKE1hdGguZmxvb3IocS9tLm1lYXN1cmUoKS5oZWlnaHQpLHRoaXMuX21heExpbmVzKSxhdmFpbGFibGVXaWR0aDpwLGNhbkZpdFRleHQ6ITAsY3VycmVudExpbmU6IiIsd3JhcHBpbmc6dH07dmFyIHY9ay5zcGxpdCgiXG4iKTtyZXR1cm4gdi5yZWR1Y2UoZnVuY3Rpb24oQSx5LHgpe3JldHVybiByLmJyZWFrTGluZVRvRml0V2lkdGgoQSwKeSx4IT09di5sZW5ndGgtMSxtKX0scCkud3JhcHBpbmd9O2wucHJvdG90eXBlLmJyZWFrTGluZVRvRml0V2lkdGg9ZnVuY3Rpb24oayxtLHAscSl7dmFyIHI9dGhpcztrLmNhbkZpdFRleHR8fCIiPT09ay53cmFwcGluZy50cnVuY2F0ZWRUZXh0fHwoay53cmFwcGluZy50cnVuY2F0ZWRUZXh0Kz0iXG4iKTtrPXRoaXMuX3Rva2VuaXplci50b2tlbml6ZShtKS5yZWR1Y2UoZnVuY3Rpb24odCx2KXtyZXR1cm4gci53cmFwTmV4dFRva2VuKHYsdCxxKX0sayk7bT1nLlN0cmluZ01ldGhvZHMudHJpbUVuZChrLmN1cnJlbnRMaW5lKTtrLndyYXBwaW5nLm5vTGluZXMrPSsoIiIhPT1tKTtrLndyYXBwaW5nLm5vTGluZXM9PT1rLmF2YWlsYWJsZUxpbmVzJiYibm9uZSIhPT10aGlzLl90ZXh0VHJpbW1pbmcmJnA/ay5jYW5GaXRUZXh0PSExOmsud3JhcHBpbmcud3JhcHBlZFRleHQrPW07ay5jdXJyZW50TGluZT0iXG4iO3JldHVybiBrfTtsLnByb3RvdHlwZS5jYW5GaXRUb2tlbj1mdW5jdGlvbihrLAptLHApe3ZhciBxPXRoaXMscj10aGlzLl9hbGxvd0JyZWFraW5nV29yZHM/ay5zcGxpdCgiIikubWFwKGZ1bmN0aW9uKHQsdil7cmV0dXJuIHYhPT1rLmxlbmd0aC0xP3QrcS5fYnJlYWtpbmdDaGFyYWN0ZXI6dH0pOltrXTtyZXR1cm4gcC5tZWFzdXJlKGspLndpZHRoPD1tfHxyLmV2ZXJ5KGZ1bmN0aW9uKHQpe3JldHVybiBwLm1lYXN1cmUodCkud2lkdGg8PW19KX07bC5wcm90b3R5cGUuYWRkRWxsaXBzaXM9ZnVuY3Rpb24oayxtLHApe2lmKCJub25lIj09PXRoaXMuX3RleHRUcmltbWluZylyZXR1cm57cmVtYWluaW5nVG9rZW46IiIsd3JhcHBlZFRva2VuOmt9O3ZhciBxPWsuc3Vic3RyaW5nKDApLnRyaW0oKSxyPXAubWVhc3VyZShxKS53aWR0aCx0PXAubWVhc3VyZSgiLi4uIikud2lkdGgsdj0wPGsubGVuZ3RoJiYiXG4iPT09a1swXT8iXG4iOiIiO2lmKG08PXQpcmV0dXJue3JlbWFpbmluZ1Rva2VuOmssd3JhcHBlZFRva2VuOnYrIi4uLiIuc3Vic3RyKDAsTWF0aC5mbG9vcihtLwoodC8zKSkpfTtmb3IoO3IrdD5tOylxPWcuU3RyaW5nTWV0aG9kcy50cmltRW5kKHEuc3Vic3RyKDAscS5sZW5ndGgtMSkpLHI9cC5tZWFzdXJlKHEpLndpZHRoO3JldHVybntyZW1haW5pbmdUb2tlbjpnLlN0cmluZ01ldGhvZHMudHJpbUVuZChrLnN1YnN0cmluZyhxLmxlbmd0aCksIi0iKS50cmltKCksd3JhcHBlZFRva2VuOnYrcSsiLi4uIn19O2wucHJvdG90eXBlLndyYXBOZXh0VG9rZW49ZnVuY3Rpb24oayxtLHApe2lmKCFtLmNhbkZpdFRleHR8fG0uYXZhaWxhYmxlTGluZXM9PT1tLndyYXBwaW5nLm5vTGluZXN8fCF0aGlzLmNhbkZpdFRva2VuKGssbS5hdmFpbGFibGVXaWR0aCxwKSlyZXR1cm4gdGhpcy5maW5pc2hXcmFwcGluZyhrLG0scCk7Zm9yKDtrOyl7dmFyIHE9dGhpcy5icmVha1Rva2VuVG9GaXRJbldpZHRoKGssbS5jdXJyZW50TGluZSxtLmF2YWlsYWJsZVdpZHRoLHApO20uY3VycmVudExpbmU9cS5saW5lO2s9cS5yZW1haW5pbmdUb2tlbjtpZihudWxsIT1rKWlmKG0ud3JhcHBpbmcubm9Ccm9rZVdvcmRzKz0KK3EuYnJlYWtXb3JkLCsrbS53cmFwcGluZy5ub0xpbmVzLG0uYXZhaWxhYmxlTGluZXM9PT1tLndyYXBwaW5nLm5vTGluZXMpe3A9dGhpcy5hZGRFbGxpcHNpcyhtLmN1cnJlbnRMaW5lLG0uYXZhaWxhYmxlV2lkdGgscCk7bS53cmFwcGluZy53cmFwcGVkVGV4dCs9cC53cmFwcGVkVG9rZW47bS53cmFwcGluZy50cnVuY2F0ZWRUZXh0Kz1wLnJlbWFpbmluZ1Rva2VuK2s7bS5jdXJyZW50TGluZT0iXG4iO2JyZWFrfWVsc2UgbS53cmFwcGluZy53cmFwcGVkVGV4dCs9Zy5TdHJpbmdNZXRob2RzLnRyaW1FbmQobS5jdXJyZW50TGluZSksbS5jdXJyZW50TGluZT0iXG4ifXJldHVybiBtfTtsLnByb3RvdHlwZS5maW5pc2hXcmFwcGluZz1mdW5jdGlvbihrLG0scCl7bS5jYW5GaXRUZXh0JiZtLmF2YWlsYWJsZUxpbmVzIT09bS53cmFwcGluZy5ub0xpbmVzJiZ0aGlzLl9hbGxvd0JyZWFraW5nV29yZHMmJiJub25lIiE9PXRoaXMuX3RleHRUcmltbWluZz8ocD10aGlzLmFkZEVsbGlwc2lzKG0uY3VycmVudExpbmUrCmssbS5hdmFpbGFibGVXaWR0aCxwKSxtLndyYXBwaW5nLndyYXBwZWRUZXh0Kz1wLndyYXBwZWRUb2tlbixtLndyYXBwaW5nLnRydW5jYXRlZFRleHQrPXAucmVtYWluaW5nVG9rZW4sbS53cmFwcGluZy5ub0Jyb2tlV29yZHMrPSsocC5yZW1haW5pbmdUb2tlbi5sZW5ndGg8ay5sZW5ndGgpLG0ud3JhcHBpbmcubm9MaW5lcys9KygwPHAud3JhcHBlZFRva2VuLmxlbmd0aCksbS5jdXJyZW50TGluZT0iIik6bS53cmFwcGluZy50cnVuY2F0ZWRUZXh0Kz1rO20uY2FuRml0VGV4dD0hMTtyZXR1cm4gbX07bC5wcm90b3R5cGUuYnJlYWtUb2tlblRvRml0SW5XaWR0aD1mdW5jdGlvbihrLG0scCxxKXtpZih2b2lkIDA9PT1yKXZhciByPXRoaXMuX2JyZWFraW5nQ2hhcmFjdGVyO2lmKHEubWVhc3VyZShtK2spLndpZHRoPD1wKXJldHVybnticmVha1dvcmQ6ITEsbGluZTptK2sscmVtYWluaW5nVG9rZW46bnVsbH07aWYoIiI9PT1rLnRyaW0oKSlyZXR1cm57YnJlYWtXb3JkOiExLGxpbmU6bSwKcmVtYWluaW5nVG9rZW46IiJ9O2lmKCF0aGlzLl9hbGxvd0JyZWFraW5nV29yZHMpcmV0dXJue2JyZWFrV29yZDohMSxsaW5lOm0scmVtYWluaW5nVG9rZW46a307Zm9yKHZhciB0PTA7dDxrLmxlbmd0aDspaWYocS5tZWFzdXJlKG0ray5zdWJzdHJpbmcoMCx0KzEpK3IpLndpZHRoPD1wKSsrdDtlbHNlIGJyZWFrO3A9IiI7MDx0JiYocD1yKTtyZXR1cm57YnJlYWtXb3JkOjA8dCxsaW5lOm0ray5zdWJzdHJpbmcoMCx0KStwLHJlbWFpbmluZ1Rva2VuOmsuc3Vic3RyaW5nKHQpfX07cmV0dXJuIGx9KCk7ZC5XcmFwcGVyPWN9LGZ1bmN0aW9uKGMsZCxmKXsoZnVuY3Rpb24oZyl7Zm9yKHZhciBsIGluIGcpZC5oYXNPd25Qcm9wZXJ0eShsKXx8KGRbbF09Z1tsXSl9KShmKDEzOSkpfSxmdW5jdGlvbihjLGQsZil7ZnVuY3Rpb24gZyhsKXtmb3IodmFyIGsgaW4gbClkLmhhc093blByb3BlcnR5KGspfHwoZFtrXT1sW2tdKX1nKGYoNzIpKTtnKGYoNzMpKTtnKGYoMjgpKX0sZnVuY3Rpb24oYywKZCl7ZC52ZXJzaW9uPSIzLjcuMCJ9LGZ1bmN0aW9uKGMsZCxmKXtmdW5jdGlvbiBnKHgsQyl7cmV0dXJuIHguZWFjaChmdW5jdGlvbigpe3ZhciBGPUMuYXBwbHkodGhpcyxhcmd1bWVudHMpLEQ9eS5zZWxlY3QodGhpcyksQjtmb3IoQiBpbiBGKUQuYXR0cihCLEZbQl0pfSl9ZnVuY3Rpb24gbCh4LEMpe2Zvcih2YXIgRiBpbiBDKXguYXR0cihGLENbRl0pO3JldHVybiB4fWZ1bmN0aW9uIGsoeCxDLEYpe3JldHVybiB4LmVhY2goZnVuY3Rpb24oKXt2YXIgRD1DLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxCPXkuc2VsZWN0KHRoaXMpLEc7Zm9yKEcgaW4gRClCLnN0eWxlKEcsRFtHXSxGKX0pfWZ1bmN0aW9uIG0oeCxDLEYpe2Zvcih2YXIgRCBpbiBDKXguc3R5bGUoRCxDW0RdLEYpO3JldHVybiB4fWZ1bmN0aW9uIHAoeCxDKXtyZXR1cm4geC5lYWNoKGZ1bmN0aW9uKCl7dmFyIEY9Qy5hcHBseSh0aGlzLGFyZ3VtZW50cyksRD15LnNlbGVjdCh0aGlzKSxCO2ZvcihCIGluIEYpRC5wcm9wZXJ0eShCLApGW0JdKX0pfWZ1bmN0aW9uIHEoeCxDKXtmb3IodmFyIEYgaW4gQyl4LnByb3BlcnR5KEYsQ1tGXSk7cmV0dXJuIHh9ZnVuY3Rpb24gcih4LEMpe3JldHVybiB4LmVhY2goZnVuY3Rpb24oKXt2YXIgRj1DLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxEPXkuc2VsZWN0KHRoaXMpLnRyYW5zaXRpb24oeCksQjtmb3IoQiBpbiBGKUQuYXR0cihCLEZbQl0pfSl9ZnVuY3Rpb24gdCh4LEMpe2Zvcih2YXIgRiBpbiBDKXguYXR0cihGLENbRl0pO3JldHVybiB4fWZ1bmN0aW9uIHYoeCxDLEYpe3JldHVybiB4LmVhY2goZnVuY3Rpb24oKXt2YXIgRD1DLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxCPXkuc2VsZWN0KHRoaXMpLnRyYW5zaXRpb24oeCksRztmb3IoRyBpbiBEKUIuc3R5bGUoRyxEW0ddLEYpfSl9ZnVuY3Rpb24gQSh4LEMsRil7Zm9yKHZhciBEIGluIEMpeC5zdHlsZShELENbRF0sRik7cmV0dXJuIHh9dmFyIHk9Yz1mKDEpO3kuc2VsZWN0aW9uLnByb3RvdHlwZS5hdHRycz1mdW5jdGlvbih4KXtyZXR1cm4oImZ1bmN0aW9uIj09PQp0eXBlb2YgeD9nOmwpKHRoaXMseCl9O3kuc2VsZWN0aW9uLnByb3RvdHlwZS5zdHlsZXM9ZnVuY3Rpb24oeCl7cmV0dXJuKCJmdW5jdGlvbiI9PT10eXBlb2YgeD9rOm0pKHRoaXMseCwiIil9O3kuc2VsZWN0aW9uLnByb3RvdHlwZS5wcm9wZXJ0aWVzPWZ1bmN0aW9uKHgpe3JldHVybigiZnVuY3Rpb24iPT09dHlwZW9mIHg/cDpxKSh0aGlzLHgpfTtjLnRyYW5zaXRpb24ucHJvdG90eXBlLmF0dHJzPWZ1bmN0aW9uKHgpe3JldHVybigiZnVuY3Rpb24iPT09dHlwZW9mIHg/cjp0KSh0aGlzLHgpfTtjLnRyYW5zaXRpb24ucHJvdG90eXBlLnN0eWxlcz1mdW5jdGlvbih4KXtyZXR1cm4oImZ1bmN0aW9uIj09PXR5cGVvZiB4P3Y6QSkodGhpcyx4LCIiKX19LGZ1bmN0aW9uKGMsZCxmKXtjPWYoMTE3KTt2YXIgZz1mKDEyKTtmPWYoMTApO3ZhciBsPXtsaW5lYXI6Yy5lYXNlTGluZWFyLHF1YWQ6Yy5lYXNlUXVhZCxxdWFkSW46Yy5lYXNlUXVhZEluLHF1YWRPdXQ6Yy5lYXNlUXVhZE91dCwKcXVhZEluT3V0OmMuZWFzZVF1YWRJbk91dCxjdWJpYzpjLmVhc2VDdWJpYyxjdWJpY0luOmMuZWFzZUN1YmljSW4sY3ViaWNPdXQ6Yy5lYXNlQ3ViaWNPdXQsY3ViaWNJbk91dDpjLmVhc2VDdWJpY0luT3V0LHBvbHk6Yy5lYXNlUG9seSxwb2x5SW46Yy5lYXNlUG9seUluLHBvbHlPdXQ6Yy5lYXNlUG9seU91dCxwb2x5SW5PdXQ6Yy5lYXNlUG9seUluT3V0LHNpbjpjLmVhc2VTaW4sc2luSW46Yy5lYXNlU2luSW4sc2luT3V0OmMuZWFzZVNpbk91dCxzaW5Jbk91dDpjLmVhc2VTaW5Jbk91dCxleHA6Yy5lYXNlRXhwLGV4cEluOmMuZWFzZUV4cEluLGV4cE91dDpjLmVhc2VFeHBPdXQsZXhwSW5PdXQ6Yy5lYXNlRXhwSW5PdXQsY2lyY2xlOmMuZWFzZUNpcmNsZSxjaXJjbGVJbjpjLmVhc2VDaXJjbGVJbixjaXJjbGVPdXQ6Yy5lYXNlQ2lyY2xlT3V0LGNpcmNsZUluT3V0OmMuZWFzZUNpcmNsZUluT3V0LGJvdW5jZTpjLmVhc2VCb3VuY2UsYm91bmNlSW46Yy5lYXNlQm91bmNlSW4sYm91bmNlT3V0OmMuZWFzZUJvdW5jZU91dCwKYm91bmNlSW5PdXQ6Yy5lYXNlQm91bmNlSW5PdXQsYmFjazpjLmVhc2VCYWNrLGJhY2tJbjpjLmVhc2VCYWNrSW4sYmFja091dDpjLmVhc2VCYWNrT3V0LGJhY2tJbk91dDpjLmVhc2VCYWNrSW5PdXQsZWxhc3RpYzpjLmVhc2VFbGFzdGljLGVsYXN0aWNJbjpjLmVhc2VFbGFzdGljSW4sZWxhc3RpY091dDpjLmVhc2VFbGFzdGljT3V0LGVsYXN0aWNJbk91dDpjLmVhc2VFbGFzdGljSW5PdXR9O2QuRWFzZU5hbWU9Zi5tYWtlRW51bSgibGluZWFyIHF1YWQgcXVhZEluIHF1YWRPdXQgcXVhZEluT3V0IGN1YmljIGN1YmljSW4gY3ViaWNPdXQgY3ViaWNJbk91dCBwb2x5IHBvbHlJbiBwb2x5T3V0IHBvbHlJbk91dCBzaW4gc2luSW4gc2luT3V0IHNpbkluT3V0IGV4cCBleHBJbiBleHBPdXQgZXhwSW5PdXQgY2lyY2xlIGNpcmNsZUluIGNpcmNsZU91dCBjaXJjbGVJbk91dCBib3VuY2UgYm91bmNlSW4gYm91bmNlT3V0IGJvdW5jZUluT3V0IGJhY2sgYmFja0luIGJhY2tPdXQgYmFja0luT3V0IGVsYXN0aWMgZWxhc3RpY0luIGVsYXN0aWNPdXQgZWxhc3RpY0luT3V0Ii5zcGxpdCgiICIpKTsKZj1mdW5jdGlvbigpe2Z1bmN0aW9uIGsoKXt0aGlzLl9zdGFydERlbGF5PWsuX0RFRkFVTFRfU1RBUlRfREVMQVlfTUlMTElTRUNPTkRTO3RoaXMuX3N0ZXBEdXJhdGlvbj1rLl9ERUZBVUxUX1NURVBfRFVSQVRJT05fTUlMTElTRUNPTkRTO3RoaXMuX3N0ZXBEZWxheT1rLl9ERUZBVUxUX0lURVJBVElWRV9ERUxBWV9NSUxMSVNFQ09ORFM7dGhpcy5fbWF4VG90YWxEdXJhdGlvbj1rLl9ERUZBVUxUX01BWF9UT1RBTF9EVVJBVElPTl9NSUxMSVNFQ09ORFM7dGhpcy5fZWFzaW5nTW9kZT1rLl9ERUZBVUxUX0VBU0lOR19NT0RFfWsucHJvdG90eXBlLnRvdGFsVGltZT1mdW5jdGlvbihtKXt2YXIgcD10aGlzLl9nZXRBZGp1c3RlZEl0ZXJhdGl2ZURlbGF5KG0pO3JldHVybiB0aGlzLnN0YXJ0RGVsYXkoKStwKk1hdGgubWF4KG0tMSwwKSt0aGlzLnN0ZXBEdXJhdGlvbigpfTtrLnByb3RvdHlwZS5hbmltYXRlPWZ1bmN0aW9uKG0scCl7dmFyIHE9dGhpczttPWcuY29lcmNlRXh0ZXJuYWxEMyhtKTsKdmFyIHI9bS5zaXplKCksdD10aGlzLl9nZXRBZGp1c3RlZEl0ZXJhdGl2ZURlbGF5KHIpO3JldHVybiBtLnRyYW5zaXRpb24oKS5lYXNlKHRoaXMuX2dldEVhc2VGYWN0b3J5KCkpLmR1cmF0aW9uKHRoaXMuc3RlcER1cmF0aW9uKCkpLmRlbGF5KGZ1bmN0aW9uKHYsQSl7cmV0dXJuIHEuc3RhcnREZWxheSgpK3QqQX0pLmF0dHJzKHApfTtrLnByb3RvdHlwZS5zdGFydERlbGF5PWZ1bmN0aW9uKG0pe2lmKG51bGw9PW0pcmV0dXJuIHRoaXMuX3N0YXJ0RGVsYXk7dGhpcy5fc3RhcnREZWxheT1tO3JldHVybiB0aGlzfTtrLnByb3RvdHlwZS5zdGVwRHVyYXRpb249ZnVuY3Rpb24obSl7aWYobnVsbD09bSlyZXR1cm4gTWF0aC5taW4odGhpcy5fc3RlcER1cmF0aW9uLHRoaXMuX21heFRvdGFsRHVyYXRpb24pO3RoaXMuX3N0ZXBEdXJhdGlvbj1tO3JldHVybiB0aGlzfTtrLnByb3RvdHlwZS5zdGVwRGVsYXk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RlcERlbGF5fTtrLnByb3RvdHlwZS5tYXhUb3RhbER1cmF0aW9uPQpmdW5jdGlvbihtKXtpZihudWxsPT1tKXJldHVybiB0aGlzLl9tYXhUb3RhbER1cmF0aW9uO3RoaXMuX21heFRvdGFsRHVyYXRpb249bTtyZXR1cm4gdGhpc307ay5wcm90b3R5cGUuZWFzaW5nTW9kZT1mdW5jdGlvbihtKXtpZihudWxsPT1tKXJldHVybiB0aGlzLl9lYXNpbmdNb2RlO3RoaXMuX2Vhc2luZ01vZGU9bTtyZXR1cm4gdGhpc307ay5wcm90b3R5cGUuX2dldEVhc2VGYWN0b3J5PWZ1bmN0aW9uKCl7dmFyIG09dGhpcy5lYXNpbmdNb2RlKCk7cmV0dXJuInN0cmluZyI9PT10eXBlb2YgbT8obT1sW21dLG51bGw9PW0/bC5saW5lYXI6bSk6bX07ay5wcm90b3R5cGUuX2dldEFkanVzdGVkSXRlcmF0aXZlRGVsYXk9ZnVuY3Rpb24obSl7dmFyIHA9dGhpcy5tYXhUb3RhbER1cmF0aW9uKCktdGhpcy5zdGVwRHVyYXRpb24oKTtwPU1hdGgubWF4KHAsMCk7bT1wL01hdGgubWF4KG0tMSwxKTtyZXR1cm4gTWF0aC5taW4odGhpcy5zdGVwRGVsYXkoKSxtKX07cmV0dXJuIGt9KCk7Zi5fREVGQVVMVF9TVEFSVF9ERUxBWV9NSUxMSVNFQ09ORFM9CjA7Zi5fREVGQVVMVF9TVEVQX0RVUkFUSU9OX01JTExJU0VDT05EUz0zMDA7Zi5fREVGQVVMVF9JVEVSQVRJVkVfREVMQVlfTUlMTElTRUNPTkRTPTE1O2YuX0RFRkFVTFRfTUFYX1RPVEFMX0RVUkFUSU9OX01JTExJU0VDT05EUz1JbmZpbml0eTtmLl9ERUZBVUxUX0VBU0lOR19NT0RFPSJleHBPdXQiO2QuRWFzaW5nPWZ9LGZ1bmN0aW9uKGMsZCxmKXt2YXIgZz1mKDEyKTtjPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbCgpe31sLnByb3RvdHlwZS50b3RhbFRpbWU9ZnVuY3Rpb24oKXtyZXR1cm4gMH07bC5wcm90b3R5cGUuYW5pbWF0ZT1mdW5jdGlvbihrLG0pe2s9Zy5jb2VyY2VFeHRlcm5hbEQzKGspO3JldHVybiBrLmF0dHJzKG0pfTtyZXR1cm4gbH0oKTtkLk51bGw9Y30sZnVuY3Rpb24oYyxkLGYpe3ZhciBnPXRoaXMmJnRoaXMuX19leHRlbmRzfHxmdW5jdGlvbihyLHQpe2Z1bmN0aW9uIHYoKXt0aGlzLmNvbnN0cnVjdG9yPXJ9Zm9yKHZhciBBIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShBKSYmCihyW0FdPXRbQV0pO3IucHJvdG90eXBlPW51bGw9PT10P09iamVjdC5jcmVhdGUodCk6KHYucHJvdG90eXBlPXQucHJvdG90eXBlLG5ldyB2KX0sbD1mKDEpLGs9Zig1KSxtPWYoNCkscD1mKDApLHE9ZigyMik7Yz1mdW5jdGlvbihyKXtmdW5jdGlvbiB0KHYsQSl7dm9pZCAwPT09QSYmKEE9ImJvdHRvbSIpO3Y9ci5jYWxsKHRoaXMsdixBKXx8dGhpczt2Ll90aWNrTGFiZWxBbmdsZT0wO3YuX3RpY2tMYWJlbFNoZWFyQW5nbGU9MDt2LmFkZENsYXNzKCJjYXRlZ29yeS1heGlzIik7cmV0dXJuIHZ9Zyh0LHIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiX3dyYXBwZXIiLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgdj1uZXcgay5XcmFwcGVyO251bGwhPXRoaXMuX3RpY2tMYWJlbE1heExpbmVzJiZ2Lm1heExpbmVzKHRoaXMuX3RpY2tMYWJlbE1heExpbmVzKTtyZXR1cm4gdn0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsCiJfd3JpdGVyIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBrLldyaXRlcih0aGlzLl9tZWFzdXJlcix0aGlzLl90eXBlc2V0dGVyQ29udGV4dCx0aGlzLl93cmFwcGVyKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KTt0LnByb3RvdHlwZS5fc2V0dXA9ZnVuY3Rpb24oKXtyLnByb3RvdHlwZS5fc2V0dXAuY2FsbCh0aGlzKTt0aGlzLl90eXBlc2V0dGVyQ29udGV4dD1uZXcgay5TdmdDb250ZXh0KHRoaXMuX3RpY2tMYWJlbENvbnRhaW5lci5ub2RlKCkpO3RoaXMuX21lYXN1cmVyPW5ldyBrLkNhY2hlTWVhc3VyZXIodGhpcy5fdHlwZXNldHRlckNvbnRleHQpfTt0LnByb3RvdHlwZS5fcmVzY2FsZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlZHJhdygpfTt0LnByb3RvdHlwZS5yZXF1ZXN0ZWRTcGFjZT1mdW5jdGlvbih2LEEpe3ZhciB5PXRoaXMuaXNIb3Jpem9udGFsKCk/MDp0aGlzLl90aWNrU3BhY2VSZXF1aXJlZCgpK3RoaXMubWFyZ2luKCkseD10aGlzLmlzSG9yaXpvbnRhbCgpPwp0aGlzLl90aWNrU3BhY2VSZXF1aXJlZCgpK3RoaXMubWFyZ2luKCk6MDtpZigwPT09dGhpcy5fc2NhbGUuZG9tYWluKCkubGVuZ3RoKXJldHVybnttaW5XaWR0aDowLG1pbkhlaWdodDowfTtpZih0aGlzLmFubm90YXRpb25zRW5hYmxlZCgpKXt2YXIgQz10aGlzLl9hbm5vdGF0aW9uVGllckhlaWdodCgpKnRoaXMuYW5ub3RhdGlvblRpZXJDb3VudCgpO3RoaXMuaXNIb3Jpem9udGFsKCk/eCs9Qzp5Kz1DfXY9dGhpcy5fbWVhc3VyZVRpY2tMYWJlbHModixBKTtyZXR1cm57bWluV2lkdGg6di51c2VkV2lkdGgreSxtaW5IZWlnaHQ6di51c2VkSGVpZ2h0K3h9fTt0LnByb3RvdHlwZS5fY29yZVNpemU9ZnVuY3Rpb24oKXt2YXIgdj10aGlzLmlzSG9yaXpvbnRhbCgpP3RoaXMuaGVpZ2h0KCk6dGhpcy53aWR0aCgpLEE9dGhpcy5pc0hvcml6b250YWwoKT90aGlzLnJlcXVlc3RlZFNwYWNlKHRoaXMud2lkdGgoKSx0aGlzLmhlaWdodCgpKS5taW5IZWlnaHQ6dGhpcy5yZXF1ZXN0ZWRTcGFjZSh0aGlzLndpZHRoKCksCnRoaXMuaGVpZ2h0KCkpLm1pbldpZHRoLHk9dGhpcy5tYXJnaW4oKSt0aGlzLl9hbm5vdGF0aW9uVGllckhlaWdodCgpO3JldHVybiBNYXRoLm1pbihBLXksdil9O3QucHJvdG90eXBlLl9nZXRUaWNrVmFsdWVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0RG93bnNhbXBsZUluZm8oKS5kb21haW59O3QucHJvdG90eXBlLl9zaXplRnJvbU9mZmVyPWZ1bmN0aW9uKHYsQSl7cmV0dXJuIG0uQ29tcG9uZW50LnByb3RvdHlwZS5fc2l6ZUZyb21PZmZlci5jYWxsKHRoaXMsdixBKX07dC5wcm90b3R5cGUuZ2V0RG93bnNhbXBsZUluZm89ZnVuY3Rpb24odil7dmFyIEE7dm9pZCAwPT09diYmKHY9dGhpcy5fc2NhbGUpO3ZvaWQgMD09PUEmJihBPXYuaW52ZXJ0UmFuZ2UoKSk7dmFyIHk9TWF0aC5jZWlsKHQuX01JTklNVU1fV0lEVEhfUEVSX0xBQkVMX1BYKigwPT09dGhpcy5fdGlja0xhYmVsQW5nbGU/MToxL01hdGguY29zKHRoaXMuX3RpY2tMYWJlbFNoZWFyQW5nbGUvMTgwKk1hdGguUEkpKS8Kdi5zdGVwV2lkdGgoKSk7cmV0dXJue2RvbWFpbjpBLmZpbHRlcihmdW5jdGlvbih4LEMpe3JldHVybiAwPT09QyV5fSksc3RlcFdpZHRoOnkqdi5zdGVwV2lkdGgoKX19O3QucHJvdG90eXBlLnRpY2tMYWJlbEFuZ2xlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RpY2tMYWJlbEFuZ2xlO3Rocm93IEVycm9yKCJBbmdsZSB1bmRlZmluZWQgbm90IHN1cHBvcnRlZDsgb25seSAwLCA5MCwgYW5kIC05MCBhcmUgdmFsaWQgdmFsdWVzIik7fTt0LnByb3RvdHlwZS50aWNrTGFiZWxTaGVhckFuZ2xlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RpY2tMYWJlbFNoZWFyQW5nbGV9O3QucHJvdG90eXBlLnRpY2tMYWJlbE1heFdpZHRoPWZ1bmN0aW9uKHYpe2lmKDA9PT1hcmd1bWVudHMubGVuZ3RoKXJldHVybiB0aGlzLl90aWNrTGFiZWxNYXhXaWR0aDt0aGlzLl90aWNrTGFiZWxNYXhXaWR0aD12O3RoaXMucmVkcmF3KCk7cmV0dXJuIHRoaXN9O3QucHJvdG90eXBlLnRpY2tMYWJlbE1heExpbmVzPQpmdW5jdGlvbih2KXtpZigwPT09YXJndW1lbnRzLmxlbmd0aClyZXR1cm4gdGhpcy5fdGlja0xhYmVsTWF4TGluZXM7dGhpcy5fdGlja0xhYmVsTWF4TGluZXM9djt0aGlzLnJlZHJhdygpO3JldHVybiB0aGlzfTt0LnByb3RvdHlwZS5fdGlja1NwYWNlUmVxdWlyZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWF4TGFiZWxUaWNrTGVuZ3RoKCkrdGhpcy50aWNrTGFiZWxQYWRkaW5nKCl9O3QucHJvdG90eXBlLl9kcmF3VGlja3M9ZnVuY3Rpb24odixBKXt2YXIgeT10aGlzO3N3aXRjaCh0aGlzLnRpY2tMYWJlbEFuZ2xlKCkpe2Nhc2UgMDp2YXIgeD17bGVmdDoicmlnaHQiLHJpZ2h0OiJsZWZ0Iix0b3A6ImNlbnRlciIsYm90dG9tOiJjZW50ZXIifTt2YXIgQz17bGVmdDoiY2VudGVyIixyaWdodDoiY2VudGVyIix0b3A6ImJvdHRvbSIsYm90dG9tOiJ0b3AifTticmVhaztjYXNlIDkwOng9e2xlZnQ6ImNlbnRlciIscmlnaHQ6ImNlbnRlciIsdG9wOiJyaWdodCIsYm90dG9tOiJsZWZ0In07CkM9e2xlZnQ6InRvcCIscmlnaHQ6ImJvdHRvbSIsdG9wOiJjZW50ZXIiLGJvdHRvbToiY2VudGVyIn07YnJlYWs7Y2FzZSAtOTA6eD17bGVmdDoiY2VudGVyIixyaWdodDoiY2VudGVyIix0b3A6ImxlZnQiLGJvdHRvbToicmlnaHQifSxDPXtsZWZ0OiJib3R0b20iLHJpZ2h0OiJ0b3AiLHRvcDoiY2VudGVyIixib3R0b206ImNlbnRlciJ9fUEuZWFjaChmdW5jdGlvbihGKXt2YXIgRD1sLnNlbGVjdCh0aGlzKSxCPXkuaXNIb3Jpem9udGFsKCk/djp5LndpZHRoKCkteS5fdGlja1NwYWNlUmVxdWlyZWQoKSxHPXkuaXNIb3Jpem9udGFsKCk/eS5oZWlnaHQoKS15Ll90aWNrU3BhY2VSZXF1aXJlZCgpOnYsSz17eEFsaWduOnhbeS5vcmllbnRhdGlvbigpXSx5QWxpZ246Q1t5Lm9yaWVudGF0aW9uKCldLHRleHRSb3RhdGlvbjp5LnRpY2tMYWJlbEFuZ2xlKCksdGV4dFNoZWFyOnkudGlja0xhYmVsU2hlYXJBbmdsZSgpfTtpZihudWxsIT15Ll90aWNrTGFiZWxNYXhXaWR0aCl7aWYoImxlZnQiPT09Cnkub3JpZW50YXRpb24oKSYmQj55Ll90aWNrTGFiZWxNYXhXaWR0aCl7dmFyIEw9Qi15Ll90aWNrTGFiZWxNYXhXaWR0aDtMPUQuYXR0cigidHJhbnNmb3JtIikrIiB0cmFuc2xhdGUoIitMKyIsIDApIjtELmF0dHIoInRyYW5zZm9ybSIsTCl9Qj1NYXRoLm1pbihCLHkuX3RpY2tMYWJlbE1heFdpZHRoKX15Ll93cml0ZXIud3JpdGUoeS5mb3JtYXR0ZXIoKShGKSxCLEcsSyxELm5vZGUoKSl9KX07dC5wcm90b3R5cGUuX21lYXN1cmVUaWNrTGFiZWxzPWZ1bmN0aW9uKHYsQSl7dmFyIHk9dGhpcyx4PXRoaXMuX3NjYWxlLmNsb25lV2l0aG91dFByb3ZpZGVycygpLnJhbmdlKFswLHRoaXMuaXNIb3Jpem9udGFsKCk/djpBXSksQz10aGlzLmdldERvd25zYW1wbGVJbmZvKHgpO3g9Qy5kb21haW47Qz1DLnN0ZXBXaWR0aDt2YXIgRj12LXRoaXMuX3RpY2tTcGFjZVJlcXVpcmVkKCk7dGhpcy5pc0hvcml6b250YWwoKSYmKEY9QywwIT09dGhpcy5fdGlja0xhYmVsQW5nbGUmJihGPUEtdGhpcy5fdGlja1NwYWNlUmVxdWlyZWQoKSksCkY9TWF0aC5tYXgoRiwwKSk7dmFyIEQ9Qzt0aGlzLmlzSG9yaXpvbnRhbCgpJiYoRD1BLXRoaXMuX3RpY2tTcGFjZVJlcXVpcmVkKCksMCE9PXRoaXMuX3RpY2tMYWJlbEFuZ2xlJiYoRD12LXRoaXMuX3RpY2tTcGFjZVJlcXVpcmVkKCkpLEQ9TWF0aC5tYXgoRCwwKSk7bnVsbCE9dGhpcy5fdGlja0xhYmVsTWF4V2lkdGgmJihGPU1hdGgubWluKEYsdGhpcy5fdGlja0xhYmVsTWF4V2lkdGgpKTtBPXgubWFwKGZ1bmN0aW9uKEIpe3JldHVybiB5Ll93cmFwcGVyLndyYXAoeS5mb3JtYXR0ZXIoKShCKSx5Ll9tZWFzdXJlcixGLEQpfSk7dj10aGlzLmlzSG9yaXpvbnRhbCgpJiYwPT09dGhpcy5fdGlja0xhYmVsQW5nbGU/bC5zdW06cC5NYXRoLm1heDt4PXRoaXMuaXNIb3Jpem9udGFsKCkmJjA9PT10aGlzLl90aWNrTGFiZWxBbmdsZT9wLk1hdGgubWF4Omwuc3VtO3Y9dihBLGZ1bmN0aW9uKEIpe3JldHVybiB5Ll9tZWFzdXJlci5tZWFzdXJlKEIud3JhcHBlZFRleHQpLndpZHRofSwwKTsKQT14KEEsZnVuY3Rpb24oQil7cmV0dXJuIHkuX21lYXN1cmVyLm1lYXN1cmUoQi53cmFwcGVkVGV4dCkuaGVpZ2h0fSwwKTswIT09dGhpcy5fdGlja0xhYmVsQW5nbGUmJihBPVtBLHZdLHY9QVswXSxBPUFbMV0pO3JldHVybnt1c2VkV2lkdGg6dix1c2VkSGVpZ2h0OkF9fTt0LnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseT1mdW5jdGlvbigpe3ZhciB2PXRoaXM7ci5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHkuY2FsbCh0aGlzKTt2YXIgQT10aGlzLl9zY2FsZSx5PXRoaXMuZ2V0RG93bnNhbXBsZUluZm8oQSkseD15LmRvbWFpbixDPXk9eS5zdGVwV2lkdGg7dGhpcy5pc0hvcml6b250YWwoKSYmbnVsbCE9dGhpcy5fdGlja0xhYmVsTWF4V2lkdGgmJihDPU1hdGgubWluKEMsdGhpcy5fdGlja0xhYmVsTWF4V2lkdGgpKTt4PXRoaXMuX3RpY2tMYWJlbENvbnRhaW5lci5zZWxlY3RBbGwoIi4iK3EuQXhpcy5USUNLX0xBQkVMX0NMQVNTKS5kYXRhKHgpO3ZhciBGPXguZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKHEuQXhpcy5USUNLX0xBQkVMX0NMQVNTLAohMCkubWVyZ2UoeCk7eC5leGl0KCkucmVtb3ZlKCk7Ri5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKEQpe3ZhciBCPUEuc2NhbGUoRCktQy8yO0Q9di5pc0hvcml6b250YWwoKT9COjA7Qj12LmlzSG9yaXpvbnRhbCgpPzA6QjtyZXR1cm4idHJhbnNsYXRlKCIrRCsiLCIrQisiKSJ9KTtGLnRleHQoIiIpO3RoaXMuX2RyYXdUaWNrcyh5LEYpO3k9InJpZ2h0Ij09PXRoaXMub3JpZW50YXRpb24oKT90aGlzLl90aWNrU3BhY2VSZXF1aXJlZCgpOjA7eD0iYm90dG9tIj09PXRoaXMub3JpZW50YXRpb24oKT90aGlzLl90aWNrU3BhY2VSZXF1aXJlZCgpOjA7dGhpcy5fdGlja0xhYmVsQ29udGFpbmVyLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3krIiwiK3grIikiKTt0aGlzLl9zaG93QWxsVGlja01hcmtzKCk7dGhpcy5fc2hvd0FsbFRpY2tMYWJlbHMoKTt0aGlzLl9oaWRlVGlja01hcmtzV2l0aG91dExhYmVsKCk7cmV0dXJuIHRoaXN9O3QucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQ9CmZ1bmN0aW9uKHYsQSx5KXtyLnByb3RvdHlwZS5jb21wdXRlTGF5b3V0LmNhbGwodGhpcyx2LEEseSk7dGhpcy5pc0hvcml6b250YWwoKXx8dGhpcy5fc2NhbGUucmFuZ2UoWzAsdGhpcy5oZWlnaHQoKV0pO3JldHVybiB0aGlzfTt0LnByb3RvdHlwZS5pbnZhbGlkYXRlQ2FjaGU9ZnVuY3Rpb24oKXtyLnByb3RvdHlwZS5pbnZhbGlkYXRlQ2FjaGUuY2FsbCh0aGlzKTt0aGlzLl9tZWFzdXJlci5yZXNldCgpfTtyZXR1cm4gdH0ocS5BeGlzKTtjLl9NSU5JTVVNX1dJRFRIX1BFUl9MQUJFTF9QWD0xNTtkLkNhdGVnb3J5PWN9LGZ1bmN0aW9uKGMsZCxmKXt2YXIgZz10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8ZnVuY3Rpb24ocix0KXtmdW5jdGlvbiB2KCl7dGhpcy5jb25zdHJ1Y3Rvcj1yfWZvcih2YXIgQSBpbiB0KXQuaGFzT3duUHJvcGVydHkoQSkmJihyW0FdPXRbQV0pO3IucHJvdG90eXBlPW51bGw9PT10P09iamVjdC5jcmVhdGUodCk6KHYucHJvdG90eXBlPXQucHJvdG90eXBlLG5ldyB2KX0sCmw9ZigxKSxrPWYoNSksbT1mKDgpLHA9ZigwKSxxPWYoMjIpO2M9ZnVuY3Rpb24ocil7ZnVuY3Rpb24gdCh2LEEpe3Y9ci5jYWxsKHRoaXMsdixBKXx8dGhpczt2Ll90aWNrTGFiZWxQb3NpdGlvbmluZz0iY2VudGVyIjt2Ll91c2VzVGV4dFdpZHRoQXBwcm94aW1hdGlvbj0hMTt2LmZvcm1hdHRlcihtLmdlbmVyYWwoKSk7cmV0dXJuIHZ9Zyh0LHIpO3QucHJvdG90eXBlLl9zZXR1cD1mdW5jdGlvbigpe3IucHJvdG90eXBlLl9zZXR1cC5jYWxsKHRoaXMpO3ZhciB2PW5ldyBrLlN2Z0NvbnRleHQodGhpcy5fdGlja0xhYmVsQ29udGFpbmVyLm5vZGUoKSxxLkF4aXMuVElDS19MQUJFTF9DTEFTUyk7dGhpcy5fbWVhc3VyZXI9bmV3IGsuQ2FjaGVNZWFzdXJlcih2KTt0aGlzLl93cmFwcGVyPShuZXcgay5XcmFwcGVyKS5tYXhMaW5lcygxKX07dC5wcm90b3R5cGUuX2NvbXB1dGVXaWR0aD1mdW5jdGlvbigpe3ZhciB2PXRoaXMuX3VzZXNUZXh0V2lkdGhBcHByb3hpbWF0aW9uP3RoaXMuX2NvbXB1dGVBcHByb3hpbWF0ZVRleHRXaWR0aCgpOgp0aGlzLl9jb21wdXRlRXhhY3RUZXh0V2lkdGgoKTtyZXR1cm4iY2VudGVyIj09PXRoaXMuX3RpY2tMYWJlbFBvc2l0aW9uaW5nP3RoaXMuX21heExhYmVsVGlja0xlbmd0aCgpK3RoaXMudGlja0xhYmVsUGFkZGluZygpK3Y6TWF0aC5tYXgodGhpcy5fbWF4TGFiZWxUaWNrTGVuZ3RoKCksdGhpcy50aWNrTGFiZWxQYWRkaW5nKCkrdil9O3QucHJvdG90eXBlLl9jb21wdXRlRXhhY3RUZXh0V2lkdGg9ZnVuY3Rpb24oKXt2YXIgdj10aGlzLEE9dGhpcy5fZ2V0VGlja1ZhbHVlcygpLm1hcChmdW5jdGlvbih5KXt5PXYuZm9ybWF0dGVyKCkoeSk7cmV0dXJuIHYuX21lYXN1cmVyLm1lYXN1cmUoeSkud2lkdGh9KTtyZXR1cm4gcC5NYXRoLm1heChBLDApfTt0LnByb3RvdHlwZS5fY29tcHV0ZUFwcHJveGltYXRlVGV4dFdpZHRoPWZ1bmN0aW9uKCl7dmFyIHY9dGhpcyxBPXRoaXMuX2dldFRpY2tWYWx1ZXMoKSx5PXRoaXMuX21lYXN1cmVyLm1lYXN1cmUoIk0iKS53aWR0aDtBPUEubWFwKGZ1bmN0aW9uKHgpe3JldHVybiB2LmZvcm1hdHRlcigpKHgpLmxlbmd0aCoKeX0pO3JldHVybiBwLk1hdGgubWF4KEEsMCl9O3QucHJvdG90eXBlLl9jb21wdXRlSGVpZ2h0PWZ1bmN0aW9uKCl7dmFyIHY9dGhpcy5fbWVhc3VyZXIubWVhc3VyZSgpLmhlaWdodDtyZXR1cm4iY2VudGVyIj09PXRoaXMuX3RpY2tMYWJlbFBvc2l0aW9uaW5nP3RoaXMuX21heExhYmVsVGlja0xlbmd0aCgpK3RoaXMudGlja0xhYmVsUGFkZGluZygpK3Y6TWF0aC5tYXgodGhpcy5fbWF4TGFiZWxUaWNrTGVuZ3RoKCksdGhpcy50aWNrTGFiZWxQYWRkaW5nKCkrdil9O3QucHJvdG90eXBlLl9nZXRUaWNrVmFsdWVzPWZ1bmN0aW9uKCl7dmFyIHY9dGhpcy5fc2NhbGUsQT12LmRvbWFpbigpLHk9QVswXTw9QVsxXT9BWzBdOkFbMV0seD1BWzBdPj1BWzFdP0FbMF06QVsxXTtyZXR1cm4gdi50aWNrcygpLmZpbHRlcihmdW5jdGlvbihDKXtyZXR1cm4gQz49eSYmQzw9eH0pfTt0LnByb3RvdHlwZS5fcmVzY2FsZT1mdW5jdGlvbigpe2lmKHRoaXMuX2lzU2V0dXApe2lmKCF0aGlzLmlzSG9yaXpvbnRhbCgpKXt2YXIgdj0KdGhpcy5fY29tcHV0ZVdpZHRoKCk7aWYodj50aGlzLndpZHRoKCl8fHY8dGhpcy53aWR0aCgpLXRoaXMubWFyZ2luKCkpe3RoaXMucmVkcmF3KCk7cmV0dXJufX10aGlzLnJlbmRlcigpfX07dC5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHk9ZnVuY3Rpb24oKXt2YXIgdj10aGlzO3IucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5LmNhbGwodGhpcyk7dmFyIEE9e3g6MCx5OjAsZHg6IjBlbSIsZHk6IjAuM2VtIn0seT10aGlzLl9tYXhMYWJlbFRpY2tMZW5ndGgoKSx4PXRoaXMudGlja0xhYmVsUGFkZGluZygpLEM9Im1pZGRsZSIsRj0wLEQ9MCxCPTAsRz0wO2lmKHRoaXMuaXNIb3Jpem9udGFsKCkpc3dpdGNoKHRoaXMuX3RpY2tMYWJlbFBvc2l0aW9uaW5nKXtjYXNlICJsZWZ0IjpDPSJlbmQiO0Y9LXg7Rz14O2JyZWFrO2Nhc2UgImNlbnRlciI6Rz15K3g7YnJlYWs7Y2FzZSAicmlnaHQiOkM9InN0YXJ0IixHPUY9eH1lbHNlIHN3aXRjaCh0aGlzLl90aWNrTGFiZWxQb3NpdGlvbmluZyl7Y2FzZSAidG9wIjpBLmR5PQoiLTAuM2VtIjtCPXg7RD0teDticmVhaztjYXNlICJjZW50ZXIiOkI9eSt4O2JyZWFrO2Nhc2UgImJvdHRvbSI6QS5keT0iMWVtIixEPUI9eH15PXRoaXMuX2dlbmVyYXRlVGlja01hcmtBdHRySGFzaCgpO3N3aXRjaCh0aGlzLm9yaWVudGF0aW9uKCkpe2Nhc2UgImJvdHRvbSI6QS54PXkueDE7QS5keT0iMC45NWVtIjtEPXkueTErRzticmVhaztjYXNlICJ0b3AiOkEueD15LngxO0EuZHk9Ii0uMjVlbSI7RD15LnkxLUc7YnJlYWs7Y2FzZSAibGVmdCI6Qz0iZW5kIjtGPXkueDEtQjtBLnk9eS55MTticmVhaztjYXNlICJyaWdodCI6Qz0ic3RhcnQiLEY9eS54MStCLEEueT15LnkxfUI9dGhpcy5fZ2V0VGlja1ZhbHVlcygpO0I9dGhpcy5fdGlja0xhYmVsQ29udGFpbmVyLnNlbGVjdEFsbCgiLiIrcS5BeGlzLlRJQ0tfTEFCRUxfQ0xBU1MpLmRhdGEoQik7Qi5leGl0KCkucmVtb3ZlKCk7Qi5lbnRlcigpLmFwcGVuZCgidGV4dCIpLmNsYXNzZWQocS5BeGlzLlRJQ0tfTEFCRUxfQ0xBU1MsCiEwKS5tZXJnZShCKS5zdHlsZSgidGV4dC1hbmNob3IiLEMpLnN0eWxlKCJ2aXNpYmlsaXR5IiwiaW5oZXJpdCIpLmF0dHJzKEEpLnRleHQoZnVuY3Rpb24oSyl7cmV0dXJuIHYuZm9ybWF0dGVyKCkoSyl9KTt0aGlzLl90aWNrTGFiZWxDb250YWluZXIuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrRisiLCAiK0QrIikiKTt0aGlzLl9zaG93QWxsVGlja01hcmtzKCk7dGhpcy5zaG93RW5kVGlja0xhYmVscygpfHx0aGlzLl9oaWRlRW5kVGlja0xhYmVscygpO3RoaXMuX2hpZGVPdmVyZmxvd2luZ1RpY2tMYWJlbHMoKTt0aGlzLl9oaWRlT3ZlcmxhcHBpbmdUaWNrTGFiZWxzKCk7ImNlbnRlciIhPT10aGlzLl90aWNrTGFiZWxQb3NpdGlvbmluZyYmdGhpcy5faGlkZVRpY2tNYXJrc1dpdGhvdXRMYWJlbCgpO3JldHVybiB0aGlzfTt0LnByb3RvdHlwZS50aWNrTGFiZWxQb3NpdGlvbj1mdW5jdGlvbih2KXtpZihudWxsPT12KXJldHVybiB0aGlzLl90aWNrTGFiZWxQb3NpdGlvbmluZzsKdj12LnRvTG93ZXJDYXNlKCk7aWYodGhpcy5pc0hvcml6b250YWwoKSl7aWYoImxlZnQiIT09diYmImNlbnRlciIhPT12JiYicmlnaHQiIT09dil0aHJvdyBFcnJvcih2KyIgaXMgbm90IGEgdmFsaWQgdGljayBsYWJlbCBwb3NpdGlvbiBmb3IgYSBob3Jpem9udGFsIE51bWVyaWNBeGlzIik7fWVsc2UgaWYoInRvcCIhPT12JiYiY2VudGVyIiE9PXYmJiJib3R0b20iIT09dil0aHJvdyBFcnJvcih2KyIgaXMgbm90IGEgdmFsaWQgdGljayBsYWJlbCBwb3NpdGlvbiBmb3IgYSB2ZXJ0aWNhbCBOdW1lcmljQXhpcyIpO3RoaXMuX3RpY2tMYWJlbFBvc2l0aW9uaW5nPXY7dGhpcy5yZWRyYXcoKTtyZXR1cm4gdGhpc307dC5wcm90b3R5cGUudXNlc1RleHRXaWR0aEFwcHJveGltYXRpb249ZnVuY3Rpb24oKXt0aGlzLl91c2VzVGV4dFdpZHRoQXBwcm94aW1hdGlvbj0hMH07dC5wcm90b3R5cGUuX2hpZGVFbmRUaWNrTGFiZWxzPWZ1bmN0aW9uKCl7dmFyIHY9dGhpcy5lbGVtZW50KCkubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLApBPXRoaXMuX3RpY2tMYWJlbENvbnRhaW5lci5zZWxlY3RBbGwoIi4iK3EuQXhpcy5USUNLX0xBQkVMX0NMQVNTKTtpZigwIT09QS5zaXplKCkpe3ZhciB5PUEubm9kZXMoKVswXTtwLkRPTS5jbGllbnRSZWN0SW5zaWRlKHkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksdil8fGwuc2VsZWN0KHkpLnN0eWxlKCJ2aXNpYmlsaXR5IiwiaGlkZGVuIik7QT1BLm5vZGVzKClbQS5zaXplKCktMV07cC5ET00uY2xpZW50UmVjdEluc2lkZShBLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHYpfHxsLnNlbGVjdChBKS5zdHlsZSgidmlzaWJpbGl0eSIsImhpZGRlbiIpfX07dC5wcm90b3R5cGUuX2hpZGVPdmVybGFwcGluZ1RpY2tMYWJlbHM9ZnVuY3Rpb24oKXtmb3IodmFyIHY9dGhpcy5fdGlja0xhYmVsQ29udGFpbmVyLnNlbGVjdEFsbCgiLiIrcS5BeGlzLlRJQ0tfTEFCRUxfQ0xBU1MpLmZpbHRlcihmdW5jdGlvbigpe3ZhciB4PWwuc2VsZWN0KHRoaXMpLnN0eWxlKCJ2aXNpYmlsaXR5Iik7cmV0dXJuImluaGVyaXQiPT09Cnh8fCJ2aXNpYmxlIj09PXh9KSxBPXYubm9kZXMoKS5tYXAoZnVuY3Rpb24oeCl7cmV0dXJuIHguZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCl9KSx5PTE7IXRoaXMuX2hhc092ZXJsYXBXaXRoSW50ZXJ2YWwoeSxBKSYmeTxBLmxlbmd0aDspeSs9MTt2LmVhY2goZnVuY3Rpb24oeCxDKXt4PWwuc2VsZWN0KHRoaXMpOzAhPT1DJXkmJnguc3R5bGUoInZpc2liaWxpdHkiLCJoaWRkZW4iKX0pfTt0LnByb3RvdHlwZS5faGFzT3ZlcmxhcFdpdGhJbnRlcnZhbD1mdW5jdGlvbih2LEEpe3ZhciB5PSJjZW50ZXIiPT09dGhpcy5fdGlja0xhYmVsUG9zaXRpb25pbmc/dGhpcy50aWNrTGFiZWxQYWRkaW5nKCk6Myp0aGlzLnRpY2tMYWJlbFBhZGRpbmcoKTtBPUEubWFwKGZ1bmN0aW9uKEMpe3JldHVybiBwLkRPTS5leHBhbmRSZWN0KEMseSl9KTtmb3IodmFyIHg9MDt4PEEubGVuZ3RoLXY7eCs9dilpZihwLkRPTS5jbGllbnRSZWN0c092ZXJsYXAoQVt4XSxBW3grdl0pKXJldHVybiExO3JldHVybiEwfTsKdC5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlPWZ1bmN0aW9uKCl7ci5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlLmNhbGwodGhpcyk7dGhpcy5fbWVhc3VyZXIucmVzZXQoKX07cmV0dXJuIHR9KHEuQXhpcyk7ZC5OdW1lcmljPWN9LGZ1bmN0aW9uKGMsZCxmKXt2YXIgZz10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8ZnVuY3Rpb24obSxwKXtmdW5jdGlvbiBxKCl7dGhpcy5jb25zdHJ1Y3Rvcj1tfWZvcih2YXIgciBpbiBwKXAuaGFzT3duUHJvcGVydHkocikmJihtW3JdPXBbcl0pO20ucHJvdG90eXBlPW51bGw9PT1wP09iamVjdC5jcmVhdGUocCk6KHEucHJvdG90eXBlPXAucHJvdG90eXBlLG5ldyBxKX07Yz1mKDQyKTt2YXIgbD1mKDI1KSxrPWYoMCk7Zj1mdW5jdGlvbihtKXtmdW5jdGlvbiBwKHEpe2Z1bmN0aW9uIHIoKXt4JiYoeD0hMSx5Ll9kcmFnRW5kQ2FsbGJhY2tzLmNhbGxDYWxsYmFja3MoeSkpfWZ1bmN0aW9uIHQoQyxGKXt4JiYoeS5fc2V0UGl4ZWxQb3NpdGlvbldpdGhvdXRDaGFuZ2luZ01vZGUoeS5faXNWZXJ0aWNhbCgpPwpGLng6Ri55KSx5Ll9kcmFnQ2FsbGJhY2tzLmNhbGxDYWxsYmFja3MoeSkpfWZ1bmN0aW9uIHYoQyl7QShDKSYmKHg9ITAseS5fZHJhZ1N0YXJ0Q2FsbGJhY2tzLmNhbGxDYWxsYmFja3MoeSkpfWZ1bmN0aW9uIEEoQyl7cmV0dXJuIHkuX2lzVmVydGljYWwoKSYmeS5waXhlbFBvc2l0aW9uKCkteS5kZXRlY3Rpb25SYWRpdXMoKTw9Qy54JiZDLng8PXkucGl4ZWxQb3NpdGlvbigpK3kuZGV0ZWN0aW9uUmFkaXVzKCl8fCF5Ll9pc1ZlcnRpY2FsKCkmJnkucGl4ZWxQb3NpdGlvbigpLXkuZGV0ZWN0aW9uUmFkaXVzKCk8PUMueSYmQy55PD15LnBpeGVsUG9zaXRpb24oKSt5LmRldGVjdGlvblJhZGl1cygpfXZhciB5PW0uY2FsbCh0aGlzLHEpfHx0aGlzO3kuX2RldGVjdGlvblJhZGl1cz0zO3kuX2VuYWJsZWQ9ITA7eS5hZGRDbGFzcygiZHJhZy1saW5lLWxheWVyIik7eS5hZGRDbGFzcygiZW5hYmxlZCIpO3kuX2RyYWdJbnRlcmFjdGlvbj1uZXcgbC5EcmFnO3kuX2RyYWdJbnRlcmFjdGlvbi5hdHRhY2hUbyh5KTsKdmFyIHg9ITE7eS5fZHJhZ0ludGVyYWN0aW9uLm9uRHJhZ1N0YXJ0KHYpO3kuX2RyYWdJbnRlcmFjdGlvbi5vbkRyYWcodCk7eS5fZHJhZ0ludGVyYWN0aW9uLm9uRHJhZ0VuZChyKTt5Ll9kaXNjb25uZWN0SW50ZXJhY3Rpb249ZnVuY3Rpb24oKXt5Ll9kcmFnSW50ZXJhY3Rpb24ub2ZmRHJhZ1N0YXJ0KHYpO3kuX2RyYWdJbnRlcmFjdGlvbi5vZmZEcmFnKHQpO3kuX2RyYWdJbnRlcmFjdGlvbi5vZmZEcmFnRW5kKHIpO3kuX2RyYWdJbnRlcmFjdGlvbi5kZXRhY2goKX07eS5fZHJhZ1N0YXJ0Q2FsbGJhY2tzPW5ldyBrLkNhbGxiYWNrU2V0O3kuX2RyYWdDYWxsYmFja3M9bmV3IGsuQ2FsbGJhY2tTZXQ7eS5fZHJhZ0VuZENhbGxiYWNrcz1uZXcgay5DYWxsYmFja1NldDtyZXR1cm4geX1nKHAsbSk7cC5wcm90b3R5cGUuX3NldHVwPWZ1bmN0aW9uKCl7bS5wcm90b3R5cGUuX3NldHVwLmNhbGwodGhpcyk7dGhpcy5fZGV0ZWN0aW9uRWRnZT10aGlzLmNvbnRlbnQoKS5hcHBlbmQoImxpbmUiKS5zdHlsZXMoe29wYWNpdHk6MCwKc3Ryb2tlOiJwaW5rIiwicG9pbnRlci1ldmVudHMiOiJ2aXNpYmxlU3Ryb2tlIn0pLmNsYXNzZWQoImRyYWctZWRnZSIsITApfTtwLnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseT1mdW5jdGlvbigpe20ucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5LmNhbGwodGhpcyk7dGhpcy5fZGV0ZWN0aW9uRWRnZS5hdHRycyh7eDE6dGhpcy5faXNWZXJ0aWNhbCgpP3RoaXMucGl4ZWxQb3NpdGlvbigpOjAseTE6dGhpcy5faXNWZXJ0aWNhbCgpPzA6dGhpcy5waXhlbFBvc2l0aW9uKCkseDI6dGhpcy5faXNWZXJ0aWNhbCgpP3RoaXMucGl4ZWxQb3NpdGlvbigpOnRoaXMud2lkdGgoKSx5Mjp0aGlzLl9pc1ZlcnRpY2FsKCk/dGhpcy5oZWlnaHQoKTp0aGlzLnBpeGVsUG9zaXRpb24oKSwic3Ryb2tlLXdpZHRoIjoyKnRoaXMuX2RldGVjdGlvblJhZGl1c30pO3JldHVybiB0aGlzfTtwLnByb3RvdHlwZS5kZXRlY3Rpb25SYWRpdXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGV0ZWN0aW9uUmFkaXVzfTsKcC5wcm90b3R5cGUuZW5hYmxlZD1mdW5jdGlvbihxKXtpZihudWxsPT1xKXJldHVybiB0aGlzLl9lbmFibGVkOyh0aGlzLl9lbmFibGVkPXEpP3RoaXMuYWRkQ2xhc3MoImVuYWJsZWQiKTp0aGlzLnJlbW92ZUNsYXNzKCJlbmFibGVkIik7dGhpcy5fZHJhZ0ludGVyYWN0aW9uLmVuYWJsZWQocSk7cmV0dXJuIHRoaXN9O3AucHJvdG90eXBlLm9uRHJhZ1N0YXJ0PWZ1bmN0aW9uKHEpe3RoaXMuX2RyYWdTdGFydENhbGxiYWNrcy5hZGQocSl9O3AucHJvdG90eXBlLm9mZkRyYWdTdGFydD1mdW5jdGlvbihxKXt0aGlzLl9kcmFnU3RhcnRDYWxsYmFja3MuZGVsZXRlKHEpfTtwLnByb3RvdHlwZS5vbkRyYWc9ZnVuY3Rpb24ocSl7dGhpcy5fZHJhZ0NhbGxiYWNrcy5hZGQocSk7cmV0dXJuIHRoaXN9O3AucHJvdG90eXBlLm9mZkRyYWc9ZnVuY3Rpb24ocSl7dGhpcy5fZHJhZ0NhbGxiYWNrcy5kZWxldGUocSl9O3AucHJvdG90eXBlLm9uRHJhZ0VuZD1mdW5jdGlvbihxKXt0aGlzLl9kcmFnRW5kQ2FsbGJhY2tzLmFkZChxKX07CnAucHJvdG90eXBlLm9mZkRyYWdFbmQ9ZnVuY3Rpb24ocSl7dGhpcy5fZHJhZ0VuZENhbGxiYWNrcy5kZWxldGUocSl9O3AucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt2YXIgcT10aGlzO20ucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTt0aGlzLl9kcmFnU3RhcnRDYWxsYmFja3MuZm9yRWFjaChmdW5jdGlvbihyKXtyZXR1cm4gcS5fZHJhZ1N0YXJ0Q2FsbGJhY2tzLmRlbGV0ZShyKX0pO3RoaXMuX2RyYWdDYWxsYmFja3MuZm9yRWFjaChmdW5jdGlvbihyKXtyZXR1cm4gcS5fZHJhZ0NhbGxiYWNrcy5kZWxldGUocil9KTt0aGlzLl9kcmFnRW5kQ2FsbGJhY2tzLmZvckVhY2goZnVuY3Rpb24ocil7cmV0dXJuIHEuX2RyYWdFbmRDYWxsYmFja3MuZGVsZXRlKHIpfSk7dGhpcy5fZGlzY29ubmVjdEludGVyYWN0aW9uKCl9O3JldHVybiBwfShjLkd1aWRlTGluZUxheWVyKTtkLkRyYWdMaW5lTGF5ZXI9Zn0sZnVuY3Rpb24oYyxkLGYpe2Z1bmN0aW9uIGcoayxtLHApe3ZhciBxPQp7fTtpZih2b2lkIDAhPT1wKWZvcih2YXIgcj0wO3I8cC5sZW5ndGg7cisrKXFbcFtyXV09cFtyLTFdO3JldHVybiBmdW5jdGlvbih0KXt2YXIgdj1rLnNjYWxlKHQpO2lmKCFtKXJldHVybiB2O3ZhciBBO3Q9dm9pZCAwPT09cVt0XT92b2lkIDA6ay5zY2FsZShxW3RdKTt2b2lkIDAhPT10JiYoQT10Kyh2LXQpLzIpO3JldHVybiBBfX12YXIgbD10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8ZnVuY3Rpb24oayxtKXtmdW5jdGlvbiBwKCl7dGhpcy5jb25zdHJ1Y3Rvcj1rfWZvcih2YXIgcSBpbiBtKW0uaGFzT3duUHJvcGVydHkocSkmJihrW3FdPW1bcV0pO2sucHJvdG90eXBlPW51bGw9PT1tP09iamVjdC5jcmVhdGUobSk6KHAucHJvdG90eXBlPW0ucHJvdG90eXBlLG5ldyBwKX07Yz1mdW5jdGlvbihrKXtmdW5jdGlvbiBtKHAscSl7dmFyIHI9ay5jYWxsKHRoaXMpfHx0aGlzO3IuYWRkQ2xhc3MoImdyaWRsaW5lcyIpO3IuX3hTY2FsZT1wO3IuX3lTY2FsZT1xO3IuX3JlbmRlckNhbGxiYWNrPQpmdW5jdGlvbigpe3JldHVybiByLnJlbmRlcigpfTtpZihyLl94U2NhbGUpci5feFNjYWxlLm9uVXBkYXRlKHIuX3JlbmRlckNhbGxiYWNrKTtpZihyLl95U2NhbGUpci5feVNjYWxlLm9uVXBkYXRlKHIuX3JlbmRlckNhbGxiYWNrKTtyZXR1cm4gcn1sKG0sayk7bS5wcm90b3R5cGUuYmV0d2Vlblg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYmV0d2Vlblh9O20ucHJvdG90eXBlLmJldHdlZW5ZPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2JldHdlZW5ZfTttLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7ay5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO3RoaXMuX3hTY2FsZSYmdGhpcy5feFNjYWxlLm9mZlVwZGF0ZSh0aGlzLl9yZW5kZXJDYWxsYmFjayk7dGhpcy5feVNjYWxlJiZ0aGlzLl95U2NhbGUub2ZmVXBkYXRlKHRoaXMuX3JlbmRlckNhbGxiYWNrKTtyZXR1cm4gdGhpc307bS5wcm90b3R5cGUuX3NldHVwPWZ1bmN0aW9uKCl7ay5wcm90b3R5cGUuX3NldHVwLmNhbGwodGhpcyk7CnRoaXMuX3hMaW5lc0NvbnRhaW5lcj10aGlzLmNvbnRlbnQoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJ4LWdyaWRsaW5lcyIsITApO3RoaXMuX3lMaW5lc0NvbnRhaW5lcj10aGlzLmNvbnRlbnQoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJ5LWdyaWRsaW5lcyIsITApfTttLnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseT1mdW5jdGlvbigpe2sucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5LmNhbGwodGhpcyk7dGhpcy5fcmVkcmF3WExpbmVzKCk7dGhpcy5fcmVkcmF3WUxpbmVzKCk7cmV0dXJuIHRoaXN9O20ucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQ9ZnVuY3Rpb24ocCxxLHIpe2sucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQuY2FsbCh0aGlzLHAscSxyKTtudWxsIT10aGlzLl94U2NhbGUmJnRoaXMuX3hTY2FsZS5yYW5nZShbMCx0aGlzLndpZHRoKCldKTtudWxsIT10aGlzLl95U2NhbGUmJnRoaXMuX3lTY2FsZS5yYW5nZShbdGhpcy5oZWlnaHQoKSwwXSk7cmV0dXJuIHRoaXN9OwptLnByb3RvdHlwZS5fcmVkcmF3WExpbmVzPWZ1bmN0aW9uKCl7aWYodGhpcy5feFNjYWxlKXt2YXIgcD10aGlzLmJldHdlZW5YKCkscT10aGlzLl94U2NhbGUudGlja3MoKS5zbGljZShwPzE6MCk7cT10aGlzLl94TGluZXNDb250YWluZXIuc2VsZWN0QWxsKCJsaW5lIikuZGF0YShxKTtxLmVudGVyKCkuYXBwZW5kKCJsaW5lIikubWVyZ2UocSkuYXR0cigieDEiLGcodGhpcy5feFNjYWxlLHAsdGhpcy5feFNjYWxlLnRpY2tzKCkpKS5hdHRyKCJ5MSIsMCkuYXR0cigieDIiLGcodGhpcy5feFNjYWxlLHAsdGhpcy5feFNjYWxlLnRpY2tzKCkpKS5hdHRyKCJ5MiIsdGhpcy5oZWlnaHQoKSkuY2xhc3NlZCgiYmV0d2VlbmxpbmUiLHApLmNsYXNzZWQoInplcm9saW5lIixmdW5jdGlvbihyKXtyZXR1cm4gMD09PXJ9KTtxLmV4aXQoKS5yZW1vdmUoKX19O20ucHJvdG90eXBlLl9yZWRyYXdZTGluZXM9ZnVuY3Rpb24oKXtpZih0aGlzLl95U2NhbGUpe3ZhciBwPXRoaXMuYmV0d2VlblkoKSwKcT10aGlzLl95U2NhbGUudGlja3MoKS5zbGljZShwPzE6MCk7cT10aGlzLl95TGluZXNDb250YWluZXIuc2VsZWN0QWxsKCJsaW5lIikuZGF0YShxKTtxLmVudGVyKCkuYXBwZW5kKCJsaW5lIikubWVyZ2UocSkuYXR0cigieDEiLDApLmF0dHIoInkxIixnKHRoaXMuX3lTY2FsZSxwLHRoaXMuX3lTY2FsZS50aWNrcygpKSkuYXR0cigieDIiLHRoaXMud2lkdGgoKSkuYXR0cigieTIiLGcodGhpcy5feVNjYWxlLHAsdGhpcy5feVNjYWxlLnRpY2tzKCkpKS5jbGFzc2VkKCJiZXR3ZWVubGluZSIscCkuY2xhc3NlZCgiemVyb2xpbmUiLGZ1bmN0aW9uKHIpe3JldHVybiAwPT09cn0pO3EuZXhpdCgpLnJlbW92ZSgpfX07cmV0dXJuIG19KGYoNCkuQ29tcG9uZW50KTtkLkdyaWRsaW5lcz1jfSxmdW5jdGlvbihjLGQsZil7dmFyIGc9dGhpcyYmdGhpcy5fX2V4dGVuZHN8fGZ1bmN0aW9uKHEscil7ZnVuY3Rpb24gdCgpe3RoaXMuY29uc3RydWN0b3I9cX1mb3IodmFyIHYgaW4gcilyLmhhc093blByb3BlcnR5KHYpJiYKKHFbdl09clt2XSk7cS5wcm90b3R5cGU9bnVsbD09PXI/T2JqZWN0LmNyZWF0ZShyKToodC5wcm90b3R5cGU9ci5wcm90b3R5cGUsbmV3IHQpfSxsPWYoNSksaz1mKDIzKSxtPWYoOCkscD1mKDApO2M9ZnVuY3Rpb24ocSl7ZnVuY3Rpb24gcih0KXt2YXIgdj1xLmNhbGwodGhpcyl8fHRoaXM7di5fdGV4dFBhZGRpbmc9NTtpZihudWxsPT10KXRocm93IEVycm9yKCJJbnRlcnBvbGF0ZWRDb2xvckxlZ2VuZCByZXF1aXJlcyBhIGludGVycG9sYXRlZENvbG9yU2NhbGUiKTt2Ll9zY2FsZT10O3YuX3JlZHJhd0NhbGxiYWNrPWZ1bmN0aW9uKCl7cmV0dXJuIHYucmVkcmF3KCl9O3YuX3NjYWxlLm9uVXBkYXRlKHYuX3JlZHJhd0NhbGxiYWNrKTt2Ll9mb3JtYXR0ZXI9bS5nZW5lcmFsKCk7di5fb3JpZW50YXRpb249Imhvcml6b250YWwiO3YuX2V4cGFuZHM9ITE7di5hZGRDbGFzcygibGVnZW5kIik7di5hZGRDbGFzcygiaW50ZXJwb2xhdGVkLWNvbG9yLWxlZ2VuZCIpO3JldHVybiB2fWcociwKcSk7ci5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3EucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTt0aGlzLl9zY2FsZS5vZmZVcGRhdGUodGhpcy5fcmVkcmF3Q2FsbGJhY2spfTtyLnByb3RvdHlwZS5mb3JtYXR0ZXI9ZnVuY3Rpb24odCl7aWYodm9pZCAwPT09dClyZXR1cm4gdGhpcy5fZm9ybWF0dGVyO3RoaXMuX2Zvcm1hdHRlcj10O3RoaXMucmVkcmF3KCk7cmV0dXJuIHRoaXN9O3IucHJvdG90eXBlLmV4cGFuZHM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZXhwYW5kc307ci5fZW5zdXJlT3JpZW50YXRpb249ZnVuY3Rpb24odCl7dD10LnRvTG93ZXJDYXNlKCk7aWYoImhvcml6b250YWwiPT09dHx8ImxlZnQiPT09dHx8InJpZ2h0Ij09PXQpcmV0dXJuIHQ7dGhyb3cgRXJyb3IoJyInK3QrJyIgaXMgbm90IGEgdmFsaWQgb3JpZW50YXRpb24gZm9yIEludGVycG9sYXRlZENvbG9yTGVnZW5kJyk7fTtyLnByb3RvdHlwZS5vcmllbnRhdGlvbj1mdW5jdGlvbih0KXtpZihudWxsPT0KdClyZXR1cm4gdGhpcy5fb3JpZW50YXRpb247dGhpcy5fb3JpZW50YXRpb249ci5fZW5zdXJlT3JpZW50YXRpb24odCk7dGhpcy5yZWRyYXcoKTtyZXR1cm4gdGhpc307ci5wcm90b3R5cGUuZml4ZWRXaWR0aD1mdW5jdGlvbigpe3JldHVybiF0aGlzLmV4cGFuZHMoKXx8dGhpcy5faXNWZXJ0aWNhbCgpfTtyLnByb3RvdHlwZS5maXhlZEhlaWdodD1mdW5jdGlvbigpe3JldHVybiF0aGlzLmV4cGFuZHMoKXx8IXRoaXMuX2lzVmVydGljYWwoKX07ci5wcm90b3R5cGUuX2dlbmVyYXRlVGlja3M9ZnVuY3Rpb24odCl7dm9pZCAwPT09dCYmKHQ9ci5fREVGQVVMVF9OVU1fU1dBVENIRVMpO3ZhciB2PXRoaXMuX3NjYWxlLmRvbWFpbigpO2lmKDE9PT10KXJldHVyblt2WzBdXTtmb3IodmFyIEE9KHZbMV0tdlswXSkvKHQtMSkseT1bXSx4PTA7eDx0O3grKyl5LnB1c2godlswXStBKngpO3JldHVybiB5fTtyLnByb3RvdHlwZS5fc2V0dXA9ZnVuY3Rpb24oKXtxLnByb3RvdHlwZS5fc2V0dXAuY2FsbCh0aGlzKTsKdGhpcy5fc3dhdGNoQ29udGFpbmVyPXRoaXMuY29udGVudCgpLmFwcGVuZCgiZyIpLmNsYXNzZWQoInN3YXRjaC1jb250YWluZXIiLCEwKTt0aGlzLl9zd2F0Y2hCb3VuZGluZ0JveD10aGlzLmNvbnRlbnQoKS5hcHBlbmQoInJlY3QiKS5jbGFzc2VkKCJzd2F0Y2gtYm91bmRpbmctYm94IiwhMCk7dGhpcy5fbG93ZXJMYWJlbD10aGlzLmNvbnRlbnQoKS5hcHBlbmQoImciKS5jbGFzc2VkKHIuTEVHRU5EX0xBQkVMX0NMQVNTLCEwKTt0aGlzLl91cHBlckxhYmVsPXRoaXMuY29udGVudCgpLmFwcGVuZCgiZyIpLmNsYXNzZWQoci5MRUdFTkRfTEFCRUxfQ0xBU1MsITApO3ZhciB0PW5ldyBsLlN2Z0NvbnRleHQodGhpcy5jb250ZW50KCkubm9kZSgpKTt0aGlzLl9tZWFzdXJlcj1uZXcgbC5NZWFzdXJlcih0KTt0aGlzLl93cmFwcGVyPW5ldyBsLldyYXBwZXI7dGhpcy5fd3JpdGVyPW5ldyBsLldyaXRlcih0aGlzLl9tZWFzdXJlcix0LHRoaXMuX3dyYXBwZXIpfTtyLnByb3RvdHlwZS5yZXF1ZXN0ZWRTcGFjZT0KZnVuY3Rpb24oKXt2YXIgdD10aGlzLHY9dGhpcy5fbWVhc3VyZXIubWVhc3VyZSgpLmhlaWdodCxBPXRoaXMuX3NjYWxlLmRvbWFpbigpLm1hcChmdW5jdGlvbihDKXtyZXR1cm4gdC5fbWVhc3VyZXIubWVhc3VyZSh0Ll9mb3JtYXR0ZXIoQykpLndpZHRofSkseT1yLl9ERUZBVUxUX05VTV9TV0FUQ0hFUztpZih0aGlzLl9pc1ZlcnRpY2FsKCkpe3ZhciB4PXAuTWF0aC5tYXgoQSwwKTtBPXYrdit0aGlzLl90ZXh0UGFkZGluZyt4K3RoaXMuX3RleHRQYWRkaW5nO3g9eSp2fWVsc2UgeD12K3YrdixBPXRoaXMuX3RleHRQYWRkaW5nK0FbMF0reSp2K0FbMV0rdGhpcy5fdGV4dFBhZGRpbmc7cmV0dXJue21pbldpZHRoOkEsbWluSGVpZ2h0Onh9fTtyLnByb3RvdHlwZS5faXNWZXJ0aWNhbD1mdW5jdGlvbigpe3JldHVybiJob3Jpem9udGFsIiE9PXRoaXMuX29yaWVudGF0aW9ufTtyLnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseT1mdW5jdGlvbigpe3ZhciB0PXRoaXM7cS5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHkuY2FsbCh0aGlzKTsKdmFyIHY9dGhpcy5fc2NhbGUuZG9tYWluKCksQT10aGlzLl9mb3JtYXR0ZXIodlswXSkseT10aGlzLl9tZWFzdXJlci5tZWFzdXJlKEEpLndpZHRoLHg9dGhpcy5fZm9ybWF0dGVyKHZbMV0pO3Y9dGhpcy5fbWVhc3VyZXIubWVhc3VyZSh4KS53aWR0aDt2YXIgQz10aGlzLl9tZWFzdXJlci5tZWFzdXJlKCkuaGVpZ2h0LEY9dGhpcy5fdGV4dFBhZGRpbmcsRD0wLEI9MCxHPTAsSz0wLEw9e3hBbGlnbjoiY2VudGVyIix5QWxpZ246ImNlbnRlciIsdGV4dFJvdGF0aW9uOjB9LEo9e3hBbGlnbjoiY2VudGVyIix5QWxpZ246ImNlbnRlciIsdGV4dFJvdGF0aW9uOjB9LFA9e3g6MCx5OjAsd2lkdGg6MCxoZWlnaHQ6MH07aWYodGhpcy5faXNWZXJ0aWNhbCgpKXt2YXIgUz1NYXRoLmZsb29yKHRoaXMuaGVpZ2h0KCkpO3ZhciBOPU1hdGgubWF4KHksdik7dmFyIFQ9KHRoaXMud2lkdGgoKS1OLTIqdGhpcy5fdGV4dFBhZGRpbmcpLzI7dj1NYXRoLm1heCh0aGlzLndpZHRoKCktVC0yKkYtTiwwKTsKQz0xO3ZhciBZPWZ1bmN0aW9uKGhhLFgpe3JldHVybiB0LmhlaWdodCgpLShYKzEpfTtKLnlBbGlnbj0idG9wIjtCPTA7TC55QWxpZ249ImJvdHRvbSI7Sz0wO2lmKCJsZWZ0Ij09PXRoaXMuX29yaWVudGF0aW9uKXt2YXIgYWE9ZnVuY3Rpb24oKXtyZXR1cm4gRitOK0Z9O0oueEFsaWduPSJyaWdodCI7RD0tKFQrditGKTtMLnhBbGlnbj0icmlnaHQiO0c9LShUK3YrRil9ZWxzZSBhYT1mdW5jdGlvbigpe3JldHVybiBUfSxKLnhBbGlnbj0ibGVmdCIsRD1UK3YrRixMLnhBbGlnbj0ibGVmdCIsRz1UK3YrRjtQLndpZHRoPXY7UC5oZWlnaHQ9UypDfWVsc2UgVD1NYXRoLm1heChGLCh0aGlzLmhlaWdodCgpLUMpLzIpLFM9TWF0aC5tYXgoTWF0aC5mbG9vcih0aGlzLndpZHRoKCktNCpGLXktdiksMCksdj0xLEM9TWF0aC5tYXgodGhpcy5oZWlnaHQoKS0yKlQsMCksYWE9ZnVuY3Rpb24oaGEsWCl7cmV0dXJuIE1hdGguZmxvb3IoeSsyKkYpK1h9LFk9ZnVuY3Rpb24oKXtyZXR1cm4gVH0sCkoueEFsaWduPSJyaWdodCIsRD0tRixMLnhBbGlnbj0ibGVmdCIsRz1GLFAueT1ULFAud2lkdGg9Uyp2LFAuaGVpZ2h0PUM7UC54PWFhKG51bGwsMCk7dGhpcy5fdXBwZXJMYWJlbC50ZXh0KCIiKTt0aGlzLl93cml0ZXIud3JpdGUoeCx0aGlzLndpZHRoKCksdGhpcy5oZWlnaHQoKSxKLHRoaXMuX3VwcGVyTGFiZWwubm9kZSgpKTt0aGlzLl91cHBlckxhYmVsLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK0QrIiwgIitCKyIpIik7dGhpcy5fbG93ZXJMYWJlbC50ZXh0KCIiKTt0aGlzLl93cml0ZXIud3JpdGUoQSx0aGlzLndpZHRoKCksdGhpcy5oZWlnaHQoKSxMLHRoaXMuX2xvd2VyTGFiZWwubm9kZSgpKTt0aGlzLl9sb3dlckxhYmVsLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK0crIiwgIitLKyIpIik7dGhpcy5fc3dhdGNoQm91bmRpbmdCb3guYXR0cnMoUCk7QT10aGlzLl9nZW5lcmF0ZVRpY2tzKFMpO0E9dGhpcy5fc3dhdGNoQ29udGFpbmVyLnNlbGVjdEFsbCgicmVjdC5zd2F0Y2giKS5kYXRhKEEpOwp4PUEuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5jbGFzc2VkKCJzd2F0Y2giLCEwKTtEPUEubWVyZ2UoeCk7QS5leGl0KCkucmVtb3ZlKCk7RC5hdHRycyh7ZmlsbDpmdW5jdGlvbihoYSl7cmV0dXJuIHQuX3NjYWxlLnNjYWxlKGhhKX0sd2lkdGg6dixoZWlnaHQ6Qyx4OmFhLHk6WSwic2hhcGUtcmVuZGVyaW5nIjoiY3Jpc3BFZGdlcyJ9KTtrLkFERF9USVRMRV9FTEVNRU5UUyYmeC5hcHBlbmQoInRpdGxlIikudGV4dChmdW5jdGlvbihoYSl7cmV0dXJuIHQuX2Zvcm1hdHRlcihoYSl9KTtyZXR1cm4gdGhpc307cmV0dXJuIHJ9KGYoNCkuQ29tcG9uZW50KTtjLl9ERUZBVUxUX05VTV9TV0FUQ0hFUz0xMTtjLkxFR0VORF9MQUJFTF9DTEFTUz0ibGVnZW5kLWxhYmVsIjtkLkludGVycG9sYXRlZENvbG9yTGVnZW5kPWN9LGZ1bmN0aW9uKGMsZCxmKXt2YXIgZz10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8ZnVuY3Rpb24oayxtKXtmdW5jdGlvbiBwKCl7dGhpcy5jb25zdHJ1Y3Rvcj1rfWZvcih2YXIgcSBpbiBtKW0uaGFzT3duUHJvcGVydHkocSkmJgooa1txXT1tW3FdKTtrLnByb3RvdHlwZT1udWxsPT09bT9PYmplY3QuY3JlYXRlKG0pOihwLnByb3RvdHlwZT1tLnByb3RvdHlwZSxuZXcgcCl9LGw9Zig1KTtjPWZ1bmN0aW9uKGspe2Z1bmN0aW9uIG0ocCxxKXt2b2lkIDA9PT1wJiYocD0iIik7dm9pZCAwPT09cSYmKHE9MCk7dmFyIHI9ay5jYWxsKHRoaXMpfHx0aGlzO3IuYWRkQ2xhc3MoImxhYmVsIik7ci50ZXh0KHApO3IuYW5nbGUocSk7ci54QWxpZ25tZW50KCJjZW50ZXIiKS55QWxpZ25tZW50KCJjZW50ZXIiKTtyLl9wYWRkaW5nPTA7cmV0dXJuIHJ9ZyhtLGspO20ucHJvdG90eXBlLnJlcXVlc3RlZFNwYWNlPWZ1bmN0aW9uKCl7dmFyIHA9dGhpcy5fbWVhc3VyZXIubWVhc3VyZSh0aGlzLl90ZXh0KSxxPSgwPT09dGhpcy5hbmdsZSgpP3Aud2lkdGg6cC5oZWlnaHQpKzIqdGhpcy5wYWRkaW5nKCk7cD0oMD09PXRoaXMuYW5nbGUoKT9wLmhlaWdodDpwLndpZHRoKSsyKnRoaXMucGFkZGluZygpO3JldHVybnttaW5XaWR0aDpxLAptaW5IZWlnaHQ6cH19O20ucHJvdG90eXBlLl9zZXR1cD1mdW5jdGlvbigpe2sucHJvdG90eXBlLl9zZXR1cC5jYWxsKHRoaXMpO3RoaXMuX3RleHRDb250YWluZXI9dGhpcy5jb250ZW50KCkuYXBwZW5kKCJnIik7dmFyIHA9bmV3IGwuU3ZnQ29udGV4dCh0aGlzLl90ZXh0Q29udGFpbmVyLm5vZGUoKSk7dGhpcy5fbWVhc3VyZXI9bmV3IGwuQ2FjaGVNZWFzdXJlcihwKTt0aGlzLl93cmFwcGVyPW5ldyBsLldyYXBwZXI7dGhpcy5fd3JpdGVyPW5ldyBsLldyaXRlcih0aGlzLl9tZWFzdXJlcixwLHRoaXMuX3dyYXBwZXIpO3RoaXMudGV4dCh0aGlzLl90ZXh0KX07bS5wcm90b3R5cGUudGV4dD1mdW5jdGlvbihwKXtpZihudWxsPT1wKXJldHVybiB0aGlzLl90ZXh0O2lmKCJzdHJpbmciIT09dHlwZW9mIHApdGhyb3cgRXJyb3IoIkxhYmVsLnRleHQoKSBvbmx5IHRha2VzIHN0cmluZ3MgYXMgaW5wdXQiKTt0aGlzLl90ZXh0PXA7dGhpcy5yZWRyYXcoKTtyZXR1cm4gdGhpc307bS5wcm90b3R5cGUuYW5nbGU9CmZ1bmN0aW9uKHApe2lmKG51bGw9PXApcmV0dXJuIHRoaXMuX2FuZ2xlO3AlPTM2MDsxODA8cD9wLT0zNjA6LTE4MD5wJiYocCs9MzYwKTtpZigtOTA9PT1wfHwwPT09cHx8OTA9PT1wKXRoaXMuX2FuZ2xlPXA7ZWxzZSB0aHJvdyBFcnJvcihwKyIgaXMgbm90IGEgdmFsaWQgYW5nbGUgZm9yIExhYmVsIik7dGhpcy5yZWRyYXcoKTtyZXR1cm4gdGhpc307bS5wcm90b3R5cGUucGFkZGluZz1mdW5jdGlvbihwKXtpZihudWxsPT1wKXJldHVybiB0aGlzLl9wYWRkaW5nO3A9K3A7aWYoMD5wKXRocm93IEVycm9yKHArIiBpcyBub3QgYSB2YWxpZCBwYWRkaW5nIHZhbHVlLiBDYW5ub3QgYmUgbGVzcyB0aGFuIDAuIik7dGhpcy5fcGFkZGluZz1wO3RoaXMucmVkcmF3KCk7cmV0dXJuIHRoaXN9O20ucHJvdG90eXBlLmZpeGVkV2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4hMH07bS5wcm90b3R5cGUuZml4ZWRIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4hMH07bS5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHk9CmZ1bmN0aW9uKCl7ay5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHkuY2FsbCh0aGlzKTt0aGlzLl90ZXh0Q29udGFpbmVyLnNlbGVjdEFsbCgiZyIpLnJlbW92ZSgpO3ZhciBwPXRoaXMuX21lYXN1cmVyLm1lYXN1cmUodGhpcy5fdGV4dCkscT1NYXRoLm1heChNYXRoLm1pbigodGhpcy5oZWlnaHQoKS1wLmhlaWdodCkvMix0aGlzLnBhZGRpbmcoKSksMCk7cD1NYXRoLm1heChNYXRoLm1pbigodGhpcy53aWR0aCgpLXAud2lkdGgpLzIsdGhpcy5wYWRkaW5nKCkpLDApO3RoaXMuX3RleHRDb250YWluZXIuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrcCsiLCIrcSsiKSIpO3A9dGhpcy53aWR0aCgpLTIqcDtxPXRoaXMuaGVpZ2h0KCktMipxO3ZhciByPXt4QWxpZ246dGhpcy54QWxpZ25tZW50KCkseUFsaWduOnRoaXMueUFsaWdubWVudCgpLHRleHRSb3RhdGlvbjp0aGlzLmFuZ2xlKCl9O3RoaXMuX3dyaXRlci53cml0ZSh0aGlzLl90ZXh0LHAscSxyKTtyZXR1cm4gdGhpc307Cm0ucHJvdG90eXBlLmludmFsaWRhdGVDYWNoZT1mdW5jdGlvbigpe2sucHJvdG90eXBlLmludmFsaWRhdGVDYWNoZS5jYWxsKHRoaXMpO3RoaXMuX21lYXN1cmVyLnJlc2V0KCl9O3JldHVybiBtfShmKDQpLkNvbXBvbmVudCk7ZC5MYWJlbD1jO2Y9ZnVuY3Rpb24oayl7ZnVuY3Rpb24gbShwLHEpe3A9ay5jYWxsKHRoaXMscCxxKXx8dGhpcztwLmFkZENsYXNzKG0uVElUTEVfTEFCRUxfQ0xBU1MpO3JldHVybiBwfWcobSxrKTtyZXR1cm4gbX0oYyk7Zi5USVRMRV9MQUJFTF9DTEFTUz0idGl0bGUtbGFiZWwiO2QuVGl0bGVMYWJlbD1mO2M9ZnVuY3Rpb24oayl7ZnVuY3Rpb24gbShwLHEpe3A9ay5jYWxsKHRoaXMscCxxKXx8dGhpcztwLmFkZENsYXNzKG0uQVhJU19MQUJFTF9DTEFTUyk7cmV0dXJuIHB9ZyhtLGspO3JldHVybiBtfShjKTtjLkFYSVNfTEFCRUxfQ0xBU1M9ImF4aXMtbGFiZWwiO2QuQXhpc0xhYmVsPWN9LGZ1bmN0aW9uKGMsZCxmKXt2YXIgZz10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8CmZ1bmN0aW9uKEEseSl7ZnVuY3Rpb24geCgpe3RoaXMuY29uc3RydWN0b3I9QX1mb3IodmFyIEMgaW4geSl5Lmhhc093blByb3BlcnR5KEMpJiYoQVtDXT15W0NdKTtBLnByb3RvdHlwZT1udWxsPT09eT9PYmplY3QuY3JlYXRlKHkpOih4LnByb3RvdHlwZT15LnByb3RvdHlwZSxuZXcgeCl9LGw9ZigxKSxrPWYoNSksbT1mKDIzKSxwPWYoOCkscT1mKDMxKSxyPWYoMCk7Yz1mKDQpO3ZhciB0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gQSh5LHgsQyl7dm9pZCAwPT09eSYmKHk9W10pO3ZvaWQgMD09PXgmJih4PTApO3ZvaWQgMD09PUMmJihDPUluZmluaXR5KTt0aGlzLmNvbHVtbnM9eTt0aGlzLmJvdHRvbVBhZGRpbmc9eDt0aGlzLm1heFdpZHRoPUN9QS5wcm90b3R5cGUuYWRkQ29sdW1uPWZ1bmN0aW9uKHkpe3ZhciB4PXkud2lkdGgsQz10aGlzLmdldFdpZHRoQXZhaWxhYmxlKCk7eS53aWR0aD1NYXRoLm1pbihDLHgpO3RoaXMuY29sdW1ucy5wdXNoKHkpfTtBLnByb3RvdHlwZS5nZXRCb3VuZHM9CmZ1bmN0aW9uKHkpe2Zvcih2YXIgeD10aGlzLmNvbHVtbnNbeV0sQz0wLEY9MDtGPHk7RisrKUMrPXRoaXMuY29sdW1uc1tGXS53aWR0aDtyZXR1cm57dG9wTGVmdDp7eDpDLHk6MH0sYm90dG9tUmlnaHQ6e3g6Qyt4LndpZHRoLHk6eC5oZWlnaHR9fX07QS5wcm90b3R5cGUuZ2V0SGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIHIuTWF0aC5tYXgodGhpcy5jb2x1bW5zLm1hcChmdW5jdGlvbih5KXtyZXR1cm4geS5oZWlnaHR9KSwwKSt0aGlzLmJvdHRvbVBhZGRpbmd9O0EucHJvdG90eXBlLmdldFdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGgubWluKHRoaXMuY29sdW1ucy5yZWR1Y2UoZnVuY3Rpb24oeSx4KXtyZXR1cm4geSt4LndpZHRofSwwKSx0aGlzLm1heFdpZHRoKX07QS5wcm90b3R5cGUuZ2V0V2lkdGhBdmFpbGFibGU9ZnVuY3Rpb24oKXt2YXIgeT10aGlzLmdldFdpZHRoKCk7cmV0dXJuIE1hdGgubWF4KHRoaXMubWF4V2lkdGgteSwwKX07cmV0dXJuIEF9KCksdj1mdW5jdGlvbigpe2Z1bmN0aW9uIEEoeSwKeCxDLEYpe3ZvaWQgMD09PXkmJih5PUluZmluaXR5KTt2b2lkIDA9PT14JiYoeD1JbmZpbml0eSk7dm9pZCAwPT09QyYmKEM9MCk7dm9pZCAwPT09RiYmKEY9W10pO3RoaXMubWF4V2lkdGg9eTt0aGlzLm1heEhlaWdodD14O3RoaXMucGFkZGluZz1DO3RoaXMucm93cz1GfUEucHJvdG90eXBlLmFkZFJvdz1mdW5jdGlvbih5KXt5Lm1heFdpZHRoPXRoaXMubWF4V2lkdGgtMip0aGlzLnBhZGRpbmc7dGhpcy5yb3dzLnB1c2goeSl9O0EucHJvdG90eXBlLmdldENvbHVtbkJvdW5kcz1mdW5jdGlvbih5LHgpe3ZhciBDPXRoaXMuZ2V0Um93Qm91bmRzKHkpO3k9dGhpcy5yb3dzW3ldLmdldEJvdW5kcyh4KTt5LnRvcExlZnQueCs9Qy50b3BMZWZ0Lng7eS5ib3R0b21SaWdodC54Kz1DLnRvcExlZnQueDt5LnRvcExlZnQueSs9Qy50b3BMZWZ0Lnk7eS5ib3R0b21SaWdodC55Kz1DLnRvcExlZnQueTtyZXR1cm4geX07QS5wcm90b3R5cGUuZ2V0Um93Qm91bmRzPWZ1bmN0aW9uKHkpe2Zvcih2YXIgeD0KdGhpcy5wYWRkaW5nLEM9dGhpcy5wYWRkaW5nLEY9MDtGPHk7RisrKUMrPXRoaXMucm93c1tGXS5nZXRIZWlnaHQoKTtyZXR1cm57dG9wTGVmdDp7eCx5OkN9LGJvdHRvbVJpZ2h0Ont4OngrdGhpcy5yb3dzW3ldLmdldFdpZHRoKCkseTpDK3RoaXMucm93c1t5XS5nZXRIZWlnaHQoKX19fTtBLnByb3RvdHlwZS5nZXRIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5taW4odGhpcy5yb3dzLnJlZHVjZShmdW5jdGlvbih5LHgpe3JldHVybiB5K3guZ2V0SGVpZ2h0KCl9LDApKzIqdGhpcy5wYWRkaW5nLHRoaXMubWF4SGVpZ2h0KX07QS5wcm90b3R5cGUuZ2V0V2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5taW4oci5NYXRoLm1heCh0aGlzLnJvd3MubWFwKGZ1bmN0aW9uKHkpe3JldHVybiB5LmdldFdpZHRoKCl9KSwwKSsyKnRoaXMucGFkZGluZyx0aGlzLm1heFdpZHRoKX07cmV0dXJuIEF9KCk7Yz1mdW5jdGlvbihBKXtmdW5jdGlvbiB5KHgpe3ZhciBDPUEuY2FsbCh0aGlzKXx8CnRoaXM7Qy5fcGFkZGluZz01O0MuX3Jvd0JvdHRvbVBhZGRpbmc9MztDLmFkZENsYXNzKCJsZWdlbmQiKTtDLm1heEVudHJpZXNQZXJSb3coMSk7aWYobnVsbD09eCl0aHJvdyBFcnJvcigiTGVnZW5kIHJlcXVpcmVzIGEgY29sb3JTY2FsZSIpO0MuX2NvbG9yU2NhbGU9eDtDLl9yZWRyYXdDYWxsYmFjaz1mdW5jdGlvbigpe3JldHVybiBDLnJlZHJhdygpfTtDLl9jb2xvclNjYWxlLm9uVXBkYXRlKEMuX3JlZHJhd0NhbGxiYWNrKTtDLl9mb3JtYXR0ZXI9cC5pZGVudGl0eSgpO0MubWF4TGluZXNQZXJFbnRyeSgxKTtDLnhBbGlnbm1lbnQoInJpZ2h0IikueUFsaWdubWVudCgidG9wIik7Qy5jb21wYXJhdG9yKGZ1bmN0aW9uKEYsRCl7dmFyIEI9Qy5fY29sb3JTY2FsZS5kb21haW4oKS5zbGljZSgpLm1hcChmdW5jdGlvbihHKXtyZXR1cm4gQy5fZm9ybWF0dGVyKEcpfSk7cmV0dXJuIEIuaW5kZXhPZihGKS1CLmluZGV4T2YoRCl9KTtDLl9zeW1ib2xGYWN0b3J5QWNjZXNzb3I9ZnVuY3Rpb24oKXtyZXR1cm4gcS5jaXJjbGUoKX07CkMuX3N5bWJvbE9wYWNpdHlBY2Nlc3Nvcj1mdW5jdGlvbigpe3JldHVybiAxfTtyZXR1cm4gQ31nKHksQSk7eS5wcm90b3R5cGUuX3NldHVwPWZ1bmN0aW9uKCl7QS5wcm90b3R5cGUuX3NldHVwLmNhbGwodGhpcyk7dmFyIHg9dGhpcy5jb250ZW50KCkuYXBwZW5kKCJnIikuY2xhc3NlZCh5LkxFR0VORF9ST1dfQ0xBU1MsITApO3guYXBwZW5kKCJnIikuY2xhc3NlZCh5LkxFR0VORF9FTlRSWV9DTEFTUywhMCkuYXBwZW5kKCJ0ZXh0Iik7eD1uZXcgay5TdmdDb250ZXh0KHgubm9kZSgpLG51bGwsbS5BRERfVElUTEVfRUxFTUVOVFMpO3RoaXMuX21lYXN1cmVyPW5ldyBrLkNhY2hlTWVhc3VyZXIoeCk7dGhpcy5fd3JhcHBlcj0obmV3IGsuV3JhcHBlcikubWF4TGluZXModGhpcy5tYXhMaW5lc1BlckVudHJ5KCkpO3RoaXMuX3dyaXRlcj1uZXcgay5Xcml0ZXIodGhpcy5fbWVhc3VyZXIseCx0aGlzLl93cmFwcGVyKX07eS5wcm90b3R5cGUuZm9ybWF0dGVyPWZ1bmN0aW9uKHgpe2lmKG51bGw9PQp4KXJldHVybiB0aGlzLl9mb3JtYXR0ZXI7dGhpcy5fZm9ybWF0dGVyPXg7dGhpcy5yZWRyYXcoKTtyZXR1cm4gdGhpc307eS5wcm90b3R5cGUubWF4RW50cmllc1BlclJvdz1mdW5jdGlvbih4KXtpZihudWxsPT14KXJldHVybiB0aGlzLl9tYXhFbnRyaWVzUGVyUm93O3RoaXMuX21heEVudHJpZXNQZXJSb3c9eDt0aGlzLnJlZHJhdygpO3JldHVybiB0aGlzfTt5LnByb3RvdHlwZS5tYXhMaW5lc1BlckVudHJ5PWZ1bmN0aW9uKHgpe2lmKG51bGw9PXgpcmV0dXJuIHRoaXMuX21heExpbmVzUGVyRW50cnk7dGhpcy5fbWF4TGluZXNQZXJFbnRyeT14O3RoaXMucmVkcmF3KCk7cmV0dXJuIHRoaXN9O3kucHJvdG90eXBlLm1heFdpZHRoPWZ1bmN0aW9uKHgpe2lmKG51bGw9PXgpcmV0dXJuIHRoaXMuX21heFdpZHRoO3RoaXMuX21heFdpZHRoPXg7dGhpcy5yZWRyYXcoKTtyZXR1cm4gdGhpc307eS5wcm90b3R5cGUuY29tcGFyYXRvcj1mdW5jdGlvbih4KXtudWxsIT14JiYodGhpcy5fY29tcGFyYXRvcj0KeCx0aGlzLnJlZHJhdygpKX07eS5wcm90b3R5cGUuY29sb3JTY2FsZT1mdW5jdGlvbih4KXtyZXR1cm4gbnVsbCE9eD8odGhpcy5fY29sb3JTY2FsZS5vZmZVcGRhdGUodGhpcy5fcmVkcmF3Q2FsbGJhY2spLHRoaXMuX2NvbG9yU2NhbGU9eCx0aGlzLl9jb2xvclNjYWxlLm9uVXBkYXRlKHRoaXMuX3JlZHJhd0NhbGxiYWNrKSx0aGlzLnJlZHJhdygpLHRoaXMpOnRoaXMuX2NvbG9yU2NhbGV9O3kucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXtBLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7dGhpcy5fY29sb3JTY2FsZS5vZmZVcGRhdGUodGhpcy5fcmVkcmF3Q2FsbGJhY2spfTt5LnByb3RvdHlwZS5fYnVpbGRMZWdlbmRUYWJsZT1mdW5jdGlvbih4LEMpe3ZhciBGPXRoaXMsRD10aGlzLl9tZWFzdXJlci5tZWFzdXJlKCkuaGVpZ2h0LEI9bmV3IHYoeCxDLHRoaXMuX3BhZGRpbmcpO3g9dGhpcy5fY29sb3JTY2FsZS5kb21haW4oKS5zbGljZSgpLnNvcnQoZnVuY3Rpb24oSywKTCl7cmV0dXJuIEYuX2NvbXBhcmF0b3IoRi5fZm9ybWF0dGVyKEspLEYuX2Zvcm1hdHRlcihMKSl9KTt2YXIgRz1uZXcgdDtCLmFkZFJvdyhHKTtHLmJvdHRvbVBhZGRpbmc9dGhpcy5fcm93Qm90dG9tUGFkZGluZzt4LmZvckVhY2goZnVuY3Rpb24oSyl7Ry5jb2x1bW5zLmxlbmd0aC8yPT09Ri5tYXhFbnRyaWVzUGVyUm93KCkmJihHPW5ldyB0LEcuYm90dG9tUGFkZGluZz1GLl9yb3dCb3R0b21QYWRkaW5nLEIuYWRkUm93KEcpKTt2YXIgTD1HLmdldFdpZHRoQXZhaWxhYmxlKCksSj1GLl9mb3JtYXR0ZXIoSyksUD1GLl9tZWFzdXJlci5tZWFzdXJlKEopLndpZHRoOzA+TC1ELVAmJjE8Ry5jb2x1bW5zLmxlbmd0aCYmKEc9bmV3IHQsRy5ib3R0b21QYWRkaW5nPUYuX3Jvd0JvdHRvbVBhZGRpbmcsQi5hZGRSb3coRykpO0cuYWRkQ29sdW1uKHt3aWR0aDpELGhlaWdodDpELGRhdGE6e25hbWU6Syx0eXBlOiJzeW1ib2wifX0pO0w9Ry5nZXRXaWR0aEF2YWlsYWJsZSgpO0w9TWF0aC5taW4oTCwKUCk7Ri5fd3JhcHBlci5tYXhMaW5lcyhGLm1heExpbmVzUGVyRW50cnkoKSk7Sj1GLl93cmFwcGVyLndyYXAoSixGLl9tZWFzdXJlcixMKS5ub0xpbmVzKkQ7Ry5hZGRDb2x1bW4oe3dpZHRoOkwsaGVpZ2h0OkosZGF0YTp7bmFtZTpLLHR5cGU6InRleHQifX0pfSk7cmV0dXJuIEJ9O3kucHJvdG90eXBlLnJlcXVlc3RlZFNwYWNlPWZ1bmN0aW9uKHgsQyl7eD10aGlzLl9idWlsZExlZ2VuZFRhYmxlKHIuTWF0aC5taW4oW3RoaXMubWF4V2lkdGgoKSx4XSx4KSxDKTtyZXR1cm57bWluSGVpZ2h0OnguZ2V0SGVpZ2h0KCksbWluV2lkdGg6eC5nZXRXaWR0aCgpfX07eS5wcm90b3R5cGUuZW50aXRpZXNBdD1mdW5jdGlvbih4KXt2YXIgQz10aGlzO2lmKCF0aGlzLl9pc1NldHVwKXJldHVybltdO3ZhciBGPXRoaXMuX2J1aWxkTGVnZW5kVGFibGUodGhpcy53aWR0aCgpLHRoaXMuaGVpZ2h0KCkpO3JldHVybiBGLnJvd3MucmVkdWNlKGZ1bmN0aW9uKEQsQixHKXtpZigwIT09RC5sZW5ndGgpcmV0dXJuIEQ7CnZhciBLPUYuZ2V0Um93Qm91bmRzKEcpO3JldHVybiByLk1hdGgud2l0aGluKHgsSyk/Qi5jb2x1bW5zLnJlZHVjZShmdW5jdGlvbihMLEosUCl7dmFyIFM9Ri5nZXRDb2x1bW5Cb3VuZHMoRyxQKTtpZihyLk1hdGgud2l0aGluKHgsUykpe0w9Qy5jb250ZW50KCkuc2VsZWN0QWxsKCIuIit5LkxFR0VORF9ST1dfQ0xBU1MpLm5vZGVzKClbR107UD1sLnNlbGVjdChMKS5zZWxlY3RBbGwoIi4iK3kuTEVHRU5EX0VOVFJZX0NMQVNTKS5ub2RlcygpW01hdGguZmxvb3IoUC8yKV07dmFyIE49bC5zZWxlY3QoUCkuc2VsZWN0KCIuIit5LkxFR0VORF9TWU1CT0xfQ0xBU1MpO1M9ci5ET00uZ2V0VHJhbnNsYXRlVmFsdWVzKGwuc2VsZWN0KEwpKTtOPXIuRE9NLmdldFRyYW5zbGF0ZVZhbHVlcyhOKTtyZXR1cm5be2JvdW5kczpyLkRPTS5lbGVtZW50QkJveChsLnNlbGVjdChMKSksZGF0dW06Si5kYXRhLm5hbWUscG9zaXRpb246e3g6U1swXStOWzBdLHk6U1sxXStOWzFdfSxzZWxlY3Rpb246bC5zZWxlY3QoUCksCmNvbXBvbmVudDpDfV19cmV0dXJuIEx9LEQpOkR9LFtdKX07eS5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHk9ZnVuY3Rpb24oKXtBLnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseS5jYWxsKHRoaXMpO3ZhciB4PXRoaXMuX2J1aWxkTGVnZW5kVGFibGUodGhpcy53aWR0aCgpLHRoaXMuaGVpZ2h0KCkpO3RoaXMuY29udGVudCgpLnNlbGVjdEFsbCgiKiIpLnJlbW92ZSgpO3ZhciBDPXRoaXMuY29udGVudCgpLnNlbGVjdEFsbCgiZy4iK3kuTEVHRU5EX1JPV19DTEFTUykuZGF0YSh4LnJvd3MpLEY9Qy5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoeS5MRUdFTkRfUk9XX0NMQVNTLCEwKS5tZXJnZShDKTtDLmV4aXQoKS5yZW1vdmUoKTtGLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oQixHKXtCPXguZ2V0Um93Qm91bmRzKEcpO3JldHVybiJ0cmFuc2xhdGUoIitCLnRvcExlZnQueCsiLCAiK0IudG9wTGVmdC55KyIpIn0pO3ZhciBEPXRoaXM7Ri5lYWNoKGZ1bmN0aW9uKEIsRyl7Zm9yKHZhciBLPQpbXSxMPTA7TDxCLmNvbHVtbnMubGVuZ3RoO0wrPTIpSy5wdXNoKFtCLmNvbHVtbnNbTF0sQi5jb2x1bW5zW0wrMV1dKTtCPWwuc2VsZWN0KHRoaXMpLnNlbGVjdEFsbCgiZy4iK3kuTEVHRU5EX0VOVFJZX0NMQVNTKS5kYXRhKEspO0s9Qi5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoeS5MRUdFTkRfRU5UUllfQ0xBU1MsITApLm1lcmdlKEIpO0suYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsZnVuY3Rpb24oSil7Sj1KWzBdO3JldHVybiBELnN5bWJvbCgpKEouZGF0YS5uYW1lLEcpKC42KkouaGVpZ2h0KShudWxsKX0pLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oSil7Sj1KWzBdO3JldHVybiJ0cmFuc2xhdGUoIisoeC5nZXRDb2x1bW5Cb3VuZHMoRyx4LnJvd3NbR10uY29sdW1ucy5pbmRleE9mKEopKS50b3BMZWZ0LngrSi53aWR0aC8yKSsiLCAiK0ouaGVpZ2h0LzIrIikifSkuYXR0cigiZmlsbCIsZnVuY3Rpb24oSil7cmV0dXJuIEQuX2NvbG9yU2NhbGUuc2NhbGUoSlswXS5kYXRhLm5hbWUpfSkuYXR0cigib3BhY2l0eSIsCmZ1bmN0aW9uKEope3JldHVybiBELnN5bWJvbE9wYWNpdHkoKShKWzBdLmRhdGEubmFtZSxHKX0pLmNsYXNzZWQoeS5MRUdFTkRfU1lNQk9MX0NMQVNTLCEwKTtLLmFwcGVuZCgiZyIpLmNsYXNzZWQoInRleHQtY29udGFpbmVyIiwhMCkuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihKKXtyZXR1cm4idHJhbnNsYXRlKCIreC5nZXRDb2x1bW5Cb3VuZHMoRyx4LnJvd3NbR10uY29sdW1ucy5pbmRleE9mKEpbMV0pKS50b3BMZWZ0LngrIiwgMCkifSkuZWFjaChmdW5jdGlvbihKKXt2YXIgUD1sLnNlbGVjdCh0aGlzKTtKPUpbMV07RC5fd3JpdGVyLndyaXRlKEQuX2Zvcm1hdHRlcihKLmRhdGEubmFtZSksSi53aWR0aCxELmhlaWdodCgpLHt4QWxpZ246ImxlZnQiLHlBbGlnbjoidG9wIix0ZXh0Um90YXRpb246MH0sUC5ub2RlKCkpfSk7Qi5leGl0KCkucmVtb3ZlKCl9KTtyZXR1cm4gdGhpc307eS5wcm90b3R5cGUuc3ltYm9sPWZ1bmN0aW9uKHgpe2lmKG51bGw9PXgpcmV0dXJuIHRoaXMuX3N5bWJvbEZhY3RvcnlBY2Nlc3NvcjsKdGhpcy5fc3ltYm9sRmFjdG9yeUFjY2Vzc29yPXg7dGhpcy5yZW5kZXIoKTtyZXR1cm4gdGhpc307eS5wcm90b3R5cGUuc3ltYm9sT3BhY2l0eT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zeW1ib2xPcGFjaXR5QWNjZXNzb3J9O3kucHJvdG90eXBlLmZpeGVkV2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4hMH07eS5wcm90b3R5cGUuZml4ZWRIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4hMH07eS5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlPWZ1bmN0aW9uKCl7dGhpcy5fbWVhc3VyZXIucmVzZXQoKX07cmV0dXJuIHl9KGMuQ29tcG9uZW50KTtjLkxFR0VORF9ST1dfQ0xBU1M9ImxlZ2VuZC1yb3ciO2MuTEVHRU5EX0VOVFJZX0NMQVNTPSJsZWdlbmQtZW50cnkiO2MuTEVHRU5EX1NZTUJPTF9DTEFTUz0ibGVnZW5kLXN5bWJvbCI7ZC5MZWdlbmQ9Y30sZnVuY3Rpb24oYyxkLGYpe3ZhciBnPXRoaXMmJnRoaXMuX19leHRlbmRzfHxmdW5jdGlvbihtLHApe2Z1bmN0aW9uIHEoKXt0aGlzLmNvbnN0cnVjdG9yPQptfWZvcih2YXIgciBpbiBwKXAuaGFzT3duUHJvcGVydHkocikmJihtW3JdPXBbcl0pO20ucHJvdG90eXBlPW51bGw9PT1wP09iamVjdC5jcmVhdGUocCk6KHEucHJvdG90eXBlPXAucHJvdG90eXBlLG5ldyBxKX0sbD1mKDIpLGs9ZigwKTtjPWZ1bmN0aW9uKG0pe2Z1bmN0aW9uIHAoKXtyZXR1cm4gbnVsbCE9PW0mJm0uYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfWcocCxtKTtwLnByb3RvdHlwZS5lbnRpdHlOZWFyZXN0PWZ1bmN0aW9uKHEpe3ZhciByLHQ9SW5maW5pdHk7dGhpcy5jb21wb25lbnRzKCkuZm9yRWFjaChmdW5jdGlvbih2KXt2PXYuZW50aXR5TmVhcmVzdChxKTtpZihudWxsIT12KXt2YXIgQT1rLk1hdGguZGlzdGFuY2VTcXVhcmVkKHYucG9zaXRpb24scSk7QTw9dCYmKHQ9QSxyPXYpfX0pO3JldHVybiByfTtwLnByb3RvdHlwZS5hcHBlbmQ9ZnVuY3Rpb24ocSl7aWYobnVsbCE9cSYmIShxIGluc3RhbmNlb2YgbC5QbG90KSl0aHJvdyBFcnJvcigiUGxvdCBHcm91cCBvbmx5IGFjY2VwdHMgcGxvdHMiKTsKbS5wcm90b3R5cGUuYXBwZW5kLmNhbGwodGhpcyxxKTtyZXR1cm4gdGhpc307cmV0dXJuIHB9KGYoNDEpLkdyb3VwKTtkLlBsb3RHcm91cD1jfSxmdW5jdGlvbihjLGQsZil7dmFyIGc9dGhpcyYmdGhpcy5fX2V4dGVuZHN8fGZ1bmN0aW9uKG0scCl7ZnVuY3Rpb24gcSgpe3RoaXMuY29uc3RydWN0b3I9bX1mb3IodmFyIHIgaW4gcClwLmhhc093blByb3BlcnR5KHIpJiYobVtyXT1wW3JdKTttLnByb3RvdHlwZT1udWxsPT09cD9PYmplY3QuY3JlYXRlKHApOihxLnByb3RvdHlwZT1wLnByb3RvdHlwZSxuZXcgcSl9LGw9ZigxKSxrPWYoMCk7Yz1mdW5jdGlvbihtKXtmdW5jdGlvbiBwKHEpe3ZvaWQgMD09PXEmJihxPVtdKTt2YXIgcj1tLmNhbGwodGhpcyl8fHRoaXM7ci5fcm93UGFkZGluZz0wO3IuX2NvbHVtblBhZGRpbmc9MDtyLl9yb3dzPVtdO3IuX3Jvd1dlaWdodHM9W107ci5fY29sdW1uV2VpZ2h0cz1bXTtyLl9uUm93cz0wO3IuX25Db2xzPTA7ci5fY2FsY3VsYXRlZExheW91dD0KbnVsbDtyLmFkZENsYXNzKCJ0YWJsZSIpO3EuZm9yRWFjaChmdW5jdGlvbih0LHYpe3QuZm9yRWFjaChmdW5jdGlvbihBLHkpe251bGwhPUEmJnIuYWRkKEEsdix5KX0pfSk7cmV0dXJuIHJ9ZyhwLG0pO3AucHJvdG90eXBlLl9mb3JFYWNoPWZ1bmN0aW9uKHEpe2Zvcih2YXIgcj0wO3I8dGhpcy5fblJvd3M7cisrKWZvcih2YXIgdD0wO3Q8dGhpcy5fbkNvbHM7dCsrKW51bGwhPXRoaXMuX3Jvd3Nbcl1bdF0mJnEodGhpcy5fcm93c1tyXVt0XSl9O3AucHJvdG90eXBlLmhhcz1mdW5jdGlvbihxKXtmb3IodmFyIHI9MDtyPHRoaXMuX25Sb3dzO3IrKylmb3IodmFyIHQ9MDt0PHRoaXMuX25Db2xzO3QrKylpZih0aGlzLl9yb3dzW3JdW3RdPT09cSlyZXR1cm4hMDtyZXR1cm4hMX07cC5wcm90b3R5cGUuY29tcG9uZW50QXQ9ZnVuY3Rpb24ocSl7cmV0dXJuIDA+PXRoaXMuX25Sb3dzfHwwPnF8fHE+PXRoaXMuX25Db2xzP251bGw6dGhpcy5fcm93c1swXVtxXX07cC5wcm90b3R5cGUuYWRkPQpmdW5jdGlvbihxLHIsdCl7aWYobnVsbD09cSl0aHJvdyBFcnJvcigiQ2Fubm90IGFkZCBudWxsIHRvIGEgdGFibGUgY2VsbCIpO2lmKCF0aGlzLmhhcyhxKSl7aWYobnVsbCE9KHRoaXMuX3Jvd3Nbcl0mJnRoaXMuX3Jvd3Nbcl1bdF0pKXRocm93IEVycm9yKCJjZWxsIGlzIG9jY3VwaWVkIik7cS5kZXRhY2goKTt0aGlzLl9uUm93cz1NYXRoLm1heChyKzEsdGhpcy5fblJvd3MpO3RoaXMuX25Db2xzPU1hdGgubWF4KHQrMSx0aGlzLl9uQ29scyk7dGhpcy5fcGFkVGFibGVUb1NpemUodGhpcy5fblJvd3MsdGhpcy5fbkNvbHMpO3RoaXMuX3Jvd3Nbcl1bdF09cTt0aGlzLl9hZG9wdEFuZEFuY2hvcihxKTt0aGlzLnJlZHJhdygpfXJldHVybiB0aGlzfTtwLnByb3RvdHlwZS5fcmVtb3ZlPWZ1bmN0aW9uKHEpe2Zvcih2YXIgcj0wO3I8dGhpcy5fblJvd3M7cisrKWZvcih2YXIgdD0wO3Q8dGhpcy5fbkNvbHM7dCsrKWlmKHRoaXMuX3Jvd3Nbcl1bdF09PT1xKXt0aGlzLl9yb3dzW3JdW3RdPQpudWxsO3JldHVybn19O3AucHJvdG90eXBlLl9pdGVyYXRlTGF5b3V0PWZ1bmN0aW9uKHEscix0KXt2b2lkIDA9PT10JiYodD0hMSk7dmFyIHY9dGhpcy5fcm93cyxBPWwudHJhbnNwb3NlKHRoaXMuX3Jvd3MpO3EtPXRoaXMuX2NvbHVtblBhZGRpbmcqKHRoaXMuX25Db2xzLTEpO3ItPXRoaXMuX3Jvd1BhZGRpbmcqKHRoaXMuX25Sb3dzLTEpO3Y9cC5fY2FsY0NvbXBvbmVudFdlaWdodHModGhpcy5fcm93V2VpZ2h0cyx2LGZ1bmN0aW9uKE4pe3JldHVybiBudWxsPT1OfHxOLmZpeGVkSGVpZ2h0KCl9KTtBPXAuX2NhbGNDb21wb25lbnRXZWlnaHRzKHRoaXMuX2NvbHVtbldlaWdodHMsQSxmdW5jdGlvbihOKXtyZXR1cm4gbnVsbD09Tnx8Ti5maXhlZFdpZHRoKCl9KTt2YXIgeT1BLm1hcChmdW5jdGlvbihOKXtyZXR1cm4gMD09PU4/LjU6Tn0pLHg9di5tYXAoZnVuY3Rpb24oTil7cmV0dXJuIDA9PT1OPy41Ok59KTt5PXAuX2NhbGNQcm9wb3J0aW9uYWxTcGFjZSh5LHEpO3ZhciBDPXAuX2NhbGNQcm9wb3J0aW9uYWxTcGFjZSh4LApyKSxGPWsuQXJyYXkuY3JlYXRlRmlsbGVkQXJyYXkoMCx0aGlzLl9uQ29scyksRD1rLkFycmF5LmNyZWF0ZUZpbGxlZEFycmF5KDAsdGhpcy5fblJvd3MpO3g9MDtmb3IodmFyIEIsRyxLOzspe0Q9ay5BcnJheS5hZGQoRCxDKTt5PWsuQXJyYXkuYWRkKEYseSk7Qj10aGlzLl9kZXRlcm1pbmVHdWFyYW50ZWVzKHksRCx0KTtGPUIuZ3VhcmFudGVlZFdpZHRocztEPUIuZ3VhcmFudGVlZEhlaWdodHM7Rz1CLndhbnRzV2lkdGhBcnIuc29tZShmdW5jdGlvbihOKXtyZXR1cm4gTn0pO0s9Qi53YW50c0hlaWdodEFyci5zb21lKGZ1bmN0aW9uKE4pe3JldHVybiBOfSk7dmFyIEw9UCxKPVM7dmFyIFA9cS1sLnN1bShCLmd1YXJhbnRlZWRXaWR0aHMpO3ZhciBTPXItbC5zdW0oQi5ndWFyYW50ZWVkSGVpZ2h0cyk7eT12b2lkIDA7Rz8oeT1CLndhbnRzV2lkdGhBcnIubWFwKGZ1bmN0aW9uKE4pe3JldHVybiBOPy4xOjB9KSx5PWsuQXJyYXkuYWRkKHksQSkpOnk9QTtDPXZvaWQgMDtLPyhDPUIud2FudHNIZWlnaHRBcnIubWFwKGZ1bmN0aW9uKE4pe3JldHVybiBOPwouMTowfSksQz1rLkFycmF5LmFkZChDLHYpKTpDPXY7eT1wLl9jYWxjUHJvcG9ydGlvbmFsU3BhY2UoeSxQKTtDPXAuX2NhbGNQcm9wb3J0aW9uYWxTcGFjZShDLFMpO3grKztKPTA8UyYmUyE9PUo7aWYoISgwPFAmJlAhPT1MfHxKKSlicmVhaztpZig1PHgpYnJlYWt9UD1xLWwuc3VtKEIuZ3VhcmFudGVlZFdpZHRocyk7Uz1yLWwuc3VtKEIuZ3VhcmFudGVlZEhlaWdodHMpO3k9cC5fY2FsY1Byb3BvcnRpb25hbFNwYWNlKEEsUCk7Qz1wLl9jYWxjUHJvcG9ydGlvbmFsU3BhY2UodixTKTtyZXR1cm57Y29sUHJvcG9ydGlvbmFsU3BhY2U6eSxyb3dQcm9wb3J0aW9uYWxTcGFjZTpDLGd1YXJhbnRlZWRXaWR0aHM6Qi5ndWFyYW50ZWVkV2lkdGhzLGd1YXJhbnRlZWRIZWlnaHRzOkIuZ3VhcmFudGVlZEhlaWdodHMsd2FudHNXaWR0aDpHLHdhbnRzSGVpZ2h0Okt9fTtwLnByb3RvdHlwZS5fZGV0ZXJtaW5lR3VhcmFudGVlcz1mdW5jdGlvbihxLHIsdCl7dm9pZCAwPT09dCYmKHQ9ITEpO3ZhciB2PQprLkFycmF5LmNyZWF0ZUZpbGxlZEFycmF5KDAsdGhpcy5fbkNvbHMpLEE9ay5BcnJheS5jcmVhdGVGaWxsZWRBcnJheSgwLHRoaXMuX25Sb3dzKSx5PWsuQXJyYXkuY3JlYXRlRmlsbGVkQXJyYXkoITEsdGhpcy5fbkNvbHMpLHg9ay5BcnJheS5jcmVhdGVGaWxsZWRBcnJheSghMSx0aGlzLl9uUm93cyk7dGhpcy5fcm93cy5mb3JFYWNoKGZ1bmN0aW9uKEMsRil7Qy5mb3JFYWNoKGZ1bmN0aW9uKEQsQil7RD1udWxsIT1EP0QucmVxdWVzdGVkU3BhY2UocVtCXSxyW0ZdKTp7bWluV2lkdGg6MCxtaW5IZWlnaHQ6MH07dltCXT1NYXRoLm1heCh2W0JdLHQ/TWF0aC5taW4oRC5taW5XaWR0aCxxW0JdKTpELm1pbldpZHRoKTtBW0ZdPU1hdGgubWF4KEFbRl0sdD9NYXRoLm1pbihELm1pbkhlaWdodCxyW0ZdKTpELm1pbkhlaWdodCk7dmFyIEc9RC5taW5XaWR0aD5xW0JdO3lbQl09eVtCXXx8RztCPUQubWluSGVpZ2h0PnJbRl07eFtGXT14W0ZdfHxCfSl9KTtyZXR1cm57Z3VhcmFudGVlZFdpZHRoczp2LApndWFyYW50ZWVkSGVpZ2h0czpBLHdhbnRzV2lkdGhBcnI6eSx3YW50c0hlaWdodEFycjp4fX07cC5wcm90b3R5cGUucmVxdWVzdGVkU3BhY2U9ZnVuY3Rpb24ocSxyKXt0aGlzLl9jYWxjdWxhdGVkTGF5b3V0PXRoaXMuX2l0ZXJhdGVMYXlvdXQocSxyKTtyZXR1cm57bWluV2lkdGg6bC5zdW0odGhpcy5fY2FsY3VsYXRlZExheW91dC5ndWFyYW50ZWVkV2lkdGhzKSxtaW5IZWlnaHQ6bC5zdW0odGhpcy5fY2FsY3VsYXRlZExheW91dC5ndWFyYW50ZWVkSGVpZ2h0cyl9fTtwLnByb3RvdHlwZS5jb21wdXRlTGF5b3V0PWZ1bmN0aW9uKHEscix0KXt2YXIgdj10aGlzO20ucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQuY2FsbCh0aGlzLHEscix0KTtxPWwuc3VtKHRoaXMuX2NhbGN1bGF0ZWRMYXlvdXQuZ3VhcmFudGVlZFdpZHRocyk7cj1sLnN1bSh0aGlzLl9jYWxjdWxhdGVkTGF5b3V0Lmd1YXJhbnRlZWRIZWlnaHRzKTt0PXRoaXMuX2NhbGN1bGF0ZWRMYXlvdXQ7aWYocT50aGlzLndpZHRoKCl8fApyPnRoaXMuaGVpZ2h0KCkpdD10aGlzLl9pdGVyYXRlTGF5b3V0KHRoaXMud2lkdGgoKSx0aGlzLmhlaWdodCgpLCEwKTt2YXIgQT0wLHk9ay5BcnJheS5hZGQodC5yb3dQcm9wb3J0aW9uYWxTcGFjZSx0Lmd1YXJhbnRlZWRIZWlnaHRzKSx4PWsuQXJyYXkuYWRkKHQuY29sUHJvcG9ydGlvbmFsU3BhY2UsdC5ndWFyYW50ZWVkV2lkdGhzKTt0aGlzLl9yb3dzLmZvckVhY2goZnVuY3Rpb24oQyxGKXt2YXIgRD0wO0MuZm9yRWFjaChmdW5jdGlvbihCLEcpe251bGwhPUImJkIuY29tcHV0ZUxheW91dCh7eDpELHk6QX0seFtHXSx5W0ZdKTtEKz14W0ddK3YuX2NvbHVtblBhZGRpbmd9KTtBKz15W0ZdK3YuX3Jvd1BhZGRpbmd9KTtyZXR1cm4gdGhpc307cC5wcm90b3R5cGUucm93UGFkZGluZz1mdW5jdGlvbihxKXtpZihudWxsPT1xKXJldHVybiB0aGlzLl9yb3dQYWRkaW5nO2lmKCFrLk1hdGguaXNWYWxpZE51bWJlcihxKXx8MD5xKXRocm93IEVycm9yKCJyb3dQYWRkaW5nIG11c3QgYmUgYSBub24tbmVnYXRpdmUgZmluaXRlIHZhbHVlIik7CnRoaXMuX3Jvd1BhZGRpbmc9cTt0aGlzLnJlZHJhdygpO3JldHVybiB0aGlzfTtwLnByb3RvdHlwZS5jb2x1bW5QYWRkaW5nPWZ1bmN0aW9uKHEpe2lmKG51bGwhPXEpe2lmKCFrLk1hdGguaXNWYWxpZE51bWJlcihxKXx8MD5xKXRocm93IEVycm9yKCJjb2x1bW5QYWRkaW5nIG11c3QgYmUgYSBub24tbmVnYXRpdmUgZmluaXRlIHZhbHVlIik7dGhpcy5fY29sdW1uUGFkZGluZz1xO3RoaXMucmVkcmF3KCl9fTtwLnByb3RvdHlwZS5yb3dXZWlnaHQ9ZnVuY3Rpb24ocSxyKXtpZihudWxsPT1yKXJldHVybiB0aGlzLl9yb3dXZWlnaHRzW3FdO2lmKCFrLk1hdGguaXNWYWxpZE51bWJlcihyKXx8MD5yKXRocm93IEVycm9yKCJyb3dXZWlnaHQgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBmaW5pdGUgdmFsdWUiKTt0aGlzLl9yb3dXZWlnaHRzW3FdPXI7dGhpcy5yZWRyYXcoKTtyZXR1cm4gdGhpc307cC5wcm90b3R5cGUuY29sdW1uV2VpZ2h0PWZ1bmN0aW9uKHEscil7aWYobnVsbD09cilyZXR1cm4gdGhpcy5fY29sdW1uV2VpZ2h0c1txXTsKaWYoIWsuTWF0aC5pc1ZhbGlkTnVtYmVyKHIpfHwwPnIpdGhyb3cgRXJyb3IoImNvbHVtbldlaWdodCBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIGZpbml0ZSB2YWx1ZSIpO3RoaXMuX2NvbHVtbldlaWdodHNbcV09cjt0aGlzLnJlZHJhdygpO3JldHVybiB0aGlzfTtwLnByb3RvdHlwZS5maXhlZFdpZHRoPWZ1bmN0aW9uKCl7dmFyIHE9bC50cmFuc3Bvc2UodGhpcy5fcm93cyk7cmV0dXJuIHAuX2ZpeGVkU3BhY2UocSxmdW5jdGlvbihyKXtyZXR1cm4gbnVsbD09cnx8ci5maXhlZFdpZHRoKCl9KX07cC5wcm90b3R5cGUuZml4ZWRIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gcC5fZml4ZWRTcGFjZSh0aGlzLl9yb3dzLGZ1bmN0aW9uKHEpe3JldHVybiBudWxsPT1xfHxxLmZpeGVkSGVpZ2h0KCl9KX07cC5wcm90b3R5cGUuX3BhZFRhYmxlVG9TaXplPWZ1bmN0aW9uKHEscil7Zm9yKHZhciB0PTA7dDxxO3QrKyl7dm9pZCAwPT09dGhpcy5fcm93c1t0XSYmKHRoaXMuX3Jvd3NbdF09W10sCnRoaXMuX3Jvd1dlaWdodHNbdF09bnVsbCk7Zm9yKHZhciB2PTA7djxyO3YrKyl2b2lkIDA9PT10aGlzLl9yb3dzW3RdW3ZdJiYodGhpcy5fcm93c1t0XVt2XT1udWxsKX1mb3Iodj0wO3Y8cjt2Kyspdm9pZCAwPT09dGhpcy5fY29sdW1uV2VpZ2h0c1t2XSYmKHRoaXMuX2NvbHVtbldlaWdodHNbdl09bnVsbCl9O3AuX2NhbGNDb21wb25lbnRXZWlnaHRzPWZ1bmN0aW9uKHEscix0KXtyZXR1cm4gcS5tYXAoZnVuY3Rpb24odixBKXtyZXR1cm4gbnVsbCE9dj92OnJbQV0ubWFwKHQpLnJlZHVjZShmdW5jdGlvbih5LHgpe3JldHVybiB5JiZ4fSwhMCk/MDoxfSl9O3AuX2NhbGNQcm9wb3J0aW9uYWxTcGFjZT1mdW5jdGlvbihxLHIpe3ZhciB0PWwuc3VtKHEpO3JldHVybiAwPT09dD9rLkFycmF5LmNyZWF0ZUZpbGxlZEFycmF5KDAscS5sZW5ndGgpOnEubWFwKGZ1bmN0aW9uKHYpe3JldHVybiByKnYvdH0pfTtwLl9maXhlZFNwYWNlPWZ1bmN0aW9uKHEscil7ZnVuY3Rpb24gdCh2KXtyZXR1cm4gdi5yZWR1Y2UoZnVuY3Rpb24oQSwKeSl7cmV0dXJuIEEmJnl9LCEwKX1yZXR1cm4gdChxLm1hcChmdW5jdGlvbih2KXtyZXR1cm4gdCh2Lm1hcChyKSl9KSl9O3JldHVybiBwfShmKDI5KS5Db21wb25lbnRDb250YWluZXIpO2QuVGFibGU9Y30sZnVuY3Rpb24oYyxkLGYpe3ZhciBnPXRoaXMmJnRoaXMuX19leHRlbmRzfHxmdW5jdGlvbihsLGspe2Z1bmN0aW9uIG0oKXt0aGlzLmNvbnN0cnVjdG9yPWx9Zm9yKHZhciBwIGluIGspay5oYXNPd25Qcm9wZXJ0eShwKSYmKGxbcF09a1twXSk7bC5wcm90b3R5cGU9bnVsbD09PWs/T2JqZWN0LmNyZWF0ZShrKToobS5wcm90b3R5cGU9ay5wcm90b3R5cGUsbmV3IG0pfTtjPWZ1bmN0aW9uKGwpe2Z1bmN0aW9uIGsoKXt2YXIgbT1sLmNhbGwodGhpcyl8fHRoaXM7bS5hZGRDbGFzcygieC1kcmFnLWJveC1sYXllciIpO20uX2hhc0Nvcm5lcnM9ITE7cmV0dXJuIG19ZyhrLGwpO2sucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQ9ZnVuY3Rpb24obSxwLHEpe2wucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQuY2FsbCh0aGlzLAptLHAscSk7dGhpcy5fc2V0Qm91bmRzKHRoaXMuYm91bmRzKCkpO3JldHVybiB0aGlzfTtrLnByb3RvdHlwZS5fc2V0Qm91bmRzPWZ1bmN0aW9uKG0pe2wucHJvdG90eXBlLl9zZXRCb3VuZHMuY2FsbCh0aGlzLHt0b3BMZWZ0Ont4Om0udG9wTGVmdC54LHk6MH0sYm90dG9tUmlnaHQ6e3g6bS5ib3R0b21SaWdodC54LHk6dGhpcy5oZWlnaHQoKX19KX07ay5wcm90b3R5cGUuX3NldFJlc2l6YWJsZUNsYXNzZXM9ZnVuY3Rpb24obSl7bSYmdGhpcy5lbmFibGVkKCk/dGhpcy5hZGRDbGFzcygieC1yZXNpemFibGUiKTp0aGlzLnJlbW92ZUNsYXNzKCJ4LXJlc2l6YWJsZSIpfTtrLnByb3RvdHlwZS55U2NhbGU9ZnVuY3Rpb24obSl7aWYobnVsbD09bSlyZXR1cm4gbC5wcm90b3R5cGUueVNjYWxlLmNhbGwodGhpcyk7dGhyb3cgRXJyb3IoInlTY2FsZXMgY2Fubm90IGJlIHNldCBvbiBhbiBYRHJhZ0JveExheWVyIik7fTtrLnByb3RvdHlwZS55RXh0ZW50PWZ1bmN0aW9uKCl7cmV0dXJuIGwucHJvdG90eXBlLnlFeHRlbnQuY2FsbCh0aGlzKTsKdGhyb3cgRXJyb3IoIlhEcmFnQm94TGF5ZXIgaGFzIG5vIHlFeHRlbnQiKTt9O3JldHVybiBrfShmKDMyKS5EcmFnQm94TGF5ZXIpO2QuWERyYWdCb3hMYXllcj1jfSxmdW5jdGlvbihjLGQsZil7dmFyIGc9dGhpcyYmdGhpcy5fX2V4dGVuZHN8fGZ1bmN0aW9uKGwsayl7ZnVuY3Rpb24gbSgpe3RoaXMuY29uc3RydWN0b3I9bH1mb3IodmFyIHAgaW4gaylrLmhhc093blByb3BlcnR5KHApJiYobFtwXT1rW3BdKTtsLnByb3RvdHlwZT1udWxsPT09az9PYmplY3QuY3JlYXRlKGspOihtLnByb3RvdHlwZT1rLnByb3RvdHlwZSxuZXcgbSl9O2M9ZnVuY3Rpb24obCl7ZnVuY3Rpb24gaygpe3ZhciBtPWwuY2FsbCh0aGlzKXx8dGhpczttLmFkZENsYXNzKCJ5LWRyYWctYm94LWxheWVyIik7bS5faGFzQ29ybmVycz0hMTtyZXR1cm4gbX1nKGssbCk7ay5wcm90b3R5cGUuY29tcHV0ZUxheW91dD1mdW5jdGlvbihtLHAscSl7bC5wcm90b3R5cGUuY29tcHV0ZUxheW91dC5jYWxsKHRoaXMsbSxwLApxKTt0aGlzLl9zZXRCb3VuZHModGhpcy5ib3VuZHMoKSk7cmV0dXJuIHRoaXN9O2sucHJvdG90eXBlLl9zZXRCb3VuZHM9ZnVuY3Rpb24obSl7bC5wcm90b3R5cGUuX3NldEJvdW5kcy5jYWxsKHRoaXMse3RvcExlZnQ6e3g6MCx5Om0udG9wTGVmdC55fSxib3R0b21SaWdodDp7eDp0aGlzLndpZHRoKCkseTptLmJvdHRvbVJpZ2h0Lnl9fSl9O2sucHJvdG90eXBlLl9zZXRSZXNpemFibGVDbGFzc2VzPWZ1bmN0aW9uKG0pe20mJnRoaXMuZW5hYmxlZCgpP3RoaXMuYWRkQ2xhc3MoInktcmVzaXphYmxlIik6dGhpcy5yZW1vdmVDbGFzcygieS1yZXNpemFibGUiKX07ay5wcm90b3R5cGUueFNjYWxlPWZ1bmN0aW9uKG0pe2lmKG51bGw9PW0pcmV0dXJuIGwucHJvdG90eXBlLnhTY2FsZS5jYWxsKHRoaXMpO3Rocm93IEVycm9yKCJ4U2NhbGVzIGNhbm5vdCBiZSBzZXQgb24gYW4gWURyYWdCb3hMYXllciIpO307ay5wcm90b3R5cGUueEV4dGVudD1mdW5jdGlvbigpe3JldHVybiBsLnByb3RvdHlwZS54RXh0ZW50LmNhbGwodGhpcyk7CnRocm93IEVycm9yKCJZRHJhZ0JveExheWVyIGhhcyBubyB4RXh0ZW50Iik7fTtyZXR1cm4ga30oZigzMikuRHJhZ0JveExheWVyKTtkLllEcmFnQm94TGF5ZXI9Y30sZnVuY3Rpb24oYyxkLGYpe3ZhciBnPXRoaXMmJnRoaXMuX19leHRlbmRzfHxmdW5jdGlvbihsLGspe2Z1bmN0aW9uIG0oKXt0aGlzLmNvbnN0cnVjdG9yPWx9Zm9yKHZhciBwIGluIGspay5oYXNPd25Qcm9wZXJ0eShwKSYmKGxbcF09a1twXSk7bC5wcm90b3R5cGU9bnVsbD09PWs/T2JqZWN0LmNyZWF0ZShrKToobS5wcm90b3R5cGU9ay5wcm90b3R5cGUsbmV3IG0pfTtjPWZ1bmN0aW9uKGwpe2Z1bmN0aW9uIGsoKXt2YXIgbT1sLmNhbGwodGhpcyl8fHRoaXM7bS5fZXZlbnRUb1Byb2Nlc3NpbmdGdW5jdGlvbltrLl9LRVlET1dOX0VWRU5UX05BTUVdPWZ1bmN0aW9uKHApe3JldHVybiBtLl9wcm9jZXNzS2V5ZG93bihwKX07bS5fZXZlbnRUb1Byb2Nlc3NpbmdGdW5jdGlvbltrLl9LRVlVUF9FVkVOVF9OQU1FXT1mdW5jdGlvbihwKXtyZXR1cm4gbS5fcHJvY2Vzc0tleXVwKHApfTsKcmV0dXJuIG19ZyhrLGwpO2suZ2V0RGlzcGF0Y2hlcj1mdW5jdGlvbigpe3ZhciBtPWRvY3VtZW50W2suX0RJU1BBVENIRVJfS0VZXTtudWxsPT1tJiYobT1uZXcgayxkb2N1bWVudFtrLl9ESVNQQVRDSEVSX0tFWV09bSk7cmV0dXJuIG19O2sucHJvdG90eXBlLl9wcm9jZXNzS2V5ZG93bj1mdW5jdGlvbihtKXt0aGlzLl9jYWxsQ2FsbGJhY2tzRm9yRXZlbnQoay5fS0VZRE9XTl9FVkVOVF9OQU1FLG0ua2V5Q29kZSxtKX07ay5wcm90b3R5cGUuX3Byb2Nlc3NLZXl1cD1mdW5jdGlvbihtKXt0aGlzLl9jYWxsQ2FsbGJhY2tzRm9yRXZlbnQoay5fS0VZVVBfRVZFTlRfTkFNRSxtLmtleUNvZGUsbSl9O2sucHJvdG90eXBlLm9uS2V5RG93bj1mdW5jdGlvbihtKXt0aGlzLl9hZGRDYWxsYmFja0ZvckV2ZW50KGsuX0tFWURPV05fRVZFTlRfTkFNRSxtKX07ay5wcm90b3R5cGUub2ZmS2V5RG93bj1mdW5jdGlvbihtKXt0aGlzLl9yZW1vdmVDYWxsYmFja0ZvckV2ZW50KGsuX0tFWURPV05fRVZFTlRfTkFNRSwKbSl9O2sucHJvdG90eXBlLm9uS2V5VXA9ZnVuY3Rpb24obSl7dGhpcy5fYWRkQ2FsbGJhY2tGb3JFdmVudChrLl9LRVlVUF9FVkVOVF9OQU1FLG0pfTtrLnByb3RvdHlwZS5vZmZLZXlVcD1mdW5jdGlvbihtKXt0aGlzLl9yZW1vdmVDYWxsYmFja0ZvckV2ZW50KGsuX0tFWVVQX0VWRU5UX05BTUUsbSl9O3JldHVybiBrfShmKDI0KS5EaXNwYXRjaGVyKTtjLl9ESVNQQVRDSEVSX0tFWT0iX19QbG90dGFibGVfRGlzcGF0Y2hlcl9LZXkiO2MuX0tFWURPV05fRVZFTlRfTkFNRT0ia2V5ZG93biI7Yy5fS0VZVVBfRVZFTlRfTkFNRT0ia2V5dXAiO2QuS2V5PWN9LGZ1bmN0aW9uKGMsZCxmKXt2YXIgZz10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8ZnVuY3Rpb24oayxtKXtmdW5jdGlvbiBwKCl7dGhpcy5jb25zdHJ1Y3Rvcj1rfWZvcih2YXIgcSBpbiBtKW0uaGFzT3duUHJvcGVydHkocSkmJihrW3FdPW1bcV0pO2sucHJvdG90eXBlPW51bGw9PT1tP09iamVjdC5jcmVhdGUobSk6KHAucHJvdG90eXBlPQptLnByb3RvdHlwZSxuZXcgcCl9LGw9ZigwKTtjPWZ1bmN0aW9uKGspe2Z1bmN0aW9uIG0ocCl7ZnVuY3Rpb24gcSh0KXtyZXR1cm4gci5fbWVhc3VyZUFuZERpc3BhdGNoKHAsdCxtLl9NT1VTRU1PVkVfRVZFTlRfTkFNRSwicGFnZSIpfXZhciByPWsuY2FsbCh0aGlzKXx8dGhpcztyLl9sYXN0TW91c2VQb3NpdGlvbj17eDotMSx5Oi0xfTtyLl90cmFuc2xhdG9yPWwuZ2V0VHJhbnNsYXRvcihwKTtyLl9ldmVudFRvUHJvY2Vzc2luZ0Z1bmN0aW9uW20uX01PVVNFT1ZFUl9FVkVOVF9OQU1FXT1xO3IuX2V2ZW50VG9Qcm9jZXNzaW5nRnVuY3Rpb25bbS5fTU9VU0VNT1ZFX0VWRU5UX05BTUVdPXE7ci5fZXZlbnRUb1Byb2Nlc3NpbmdGdW5jdGlvblttLl9NT1VTRU9VVF9FVkVOVF9OQU1FXT1xO3IuX2V2ZW50VG9Qcm9jZXNzaW5nRnVuY3Rpb25bbS5fTU9VU0VET1dOX0VWRU5UX05BTUVdPWZ1bmN0aW9uKHQpe3JldHVybiByLl9tZWFzdXJlQW5kRGlzcGF0Y2gocCx0LG0uX01PVVNFRE9XTl9FVkVOVF9OQU1FKX07CnIuX2V2ZW50VG9Qcm9jZXNzaW5nRnVuY3Rpb25bbS5fTU9VU0VVUF9FVkVOVF9OQU1FXT1mdW5jdGlvbih0KXtyZXR1cm4gci5fbWVhc3VyZUFuZERpc3BhdGNoKHAsdCxtLl9NT1VTRVVQX0VWRU5UX05BTUUsInBhZ2UiKX07ci5fZXZlbnRUb1Byb2Nlc3NpbmdGdW5jdGlvblttLl9XSEVFTF9FVkVOVF9OQU1FXT1mdW5jdGlvbih0KXtyZXR1cm4gci5fbWVhc3VyZUFuZERpc3BhdGNoKHAsdCxtLl9XSEVFTF9FVkVOVF9OQU1FKX07ci5fZXZlbnRUb1Byb2Nlc3NpbmdGdW5jdGlvblttLl9EQkxDTElDS19FVkVOVF9OQU1FXT1mdW5jdGlvbih0KXtyZXR1cm4gci5fbWVhc3VyZUFuZERpc3BhdGNoKHAsdCxtLl9EQkxDTElDS19FVkVOVF9OQU1FKX07cmV0dXJuIHJ9ZyhtLGspO20uZ2V0RGlzcGF0Y2hlcj1mdW5jdGlvbihwKXt2YXIgcT1wLnJvb3QoKS5yb290RWxlbWVudCgpLHI9cVttLl9ESVNQQVRDSEVSX0tFWV07bnVsbD09ciYmKHI9bmV3IG0ocCkscVttLl9ESVNQQVRDSEVSX0tFWV09CnIpO3JldHVybiByfTttLnByb3RvdHlwZS5vbk1vdXNlTW92ZT1mdW5jdGlvbihwKXt0aGlzLl9hZGRDYWxsYmFja0ZvckV2ZW50KG0uX01PVVNFTU9WRV9FVkVOVF9OQU1FLHApfTttLnByb3RvdHlwZS5vZmZNb3VzZU1vdmU9ZnVuY3Rpb24ocCl7dGhpcy5fcmVtb3ZlQ2FsbGJhY2tGb3JFdmVudChtLl9NT1VTRU1PVkVfRVZFTlRfTkFNRSxwKX07bS5wcm90b3R5cGUub25Nb3VzZURvd249ZnVuY3Rpb24ocCl7dGhpcy5fYWRkQ2FsbGJhY2tGb3JFdmVudChtLl9NT1VTRURPV05fRVZFTlRfTkFNRSxwKX07bS5wcm90b3R5cGUub2ZmTW91c2VEb3duPWZ1bmN0aW9uKHApe3RoaXMuX3JlbW92ZUNhbGxiYWNrRm9yRXZlbnQobS5fTU9VU0VET1dOX0VWRU5UX05BTUUscCl9O20ucHJvdG90eXBlLm9uTW91c2VVcD1mdW5jdGlvbihwKXt0aGlzLl9hZGRDYWxsYmFja0ZvckV2ZW50KG0uX01PVVNFVVBfRVZFTlRfTkFNRSxwKX07bS5wcm90b3R5cGUub2ZmTW91c2VVcD1mdW5jdGlvbihwKXt0aGlzLl9yZW1vdmVDYWxsYmFja0ZvckV2ZW50KG0uX01PVVNFVVBfRVZFTlRfTkFNRSwKcCl9O20ucHJvdG90eXBlLm9uV2hlZWw9ZnVuY3Rpb24ocCl7dGhpcy5fYWRkQ2FsbGJhY2tGb3JFdmVudChtLl9XSEVFTF9FVkVOVF9OQU1FLHApO3JldHVybiB0aGlzfTttLnByb3RvdHlwZS5vZmZXaGVlbD1mdW5jdGlvbihwKXt0aGlzLl9yZW1vdmVDYWxsYmFja0ZvckV2ZW50KG0uX1dIRUVMX0VWRU5UX05BTUUscCl9O20ucHJvdG90eXBlLm9uRGJsQ2xpY2s9ZnVuY3Rpb24ocCl7dGhpcy5fYWRkQ2FsbGJhY2tGb3JFdmVudChtLl9EQkxDTElDS19FVkVOVF9OQU1FLHApfTttLnByb3RvdHlwZS5vZmZEYmxDbGljaz1mdW5jdGlvbihwKXt0aGlzLl9yZW1vdmVDYWxsYmFja0ZvckV2ZW50KG0uX0RCTENMSUNLX0VWRU5UX05BTUUscCl9O20ucHJvdG90eXBlLl9tZWFzdXJlQW5kRGlzcGF0Y2g9ZnVuY3Rpb24ocCxxLHIsdCl7dm9pZCAwPT09dCYmKHQ9ImVsZW1lbnQiKTtpZigicGFnZSIhPT10JiYiZWxlbWVudCIhPT10KXRocm93IEVycm9yKCJJbnZhbGlkIHNjb3BlICciK3QrCiInLCBtdXN0IGJlICdlbGVtZW50JyBvciAncGFnZSciKTtpZigicGFnZSI9PT10fHx0aGlzLmV2ZW50SW5zaWRlKHAscSkpdGhpcy5fbGFzdE1vdXNlUG9zaXRpb249dGhpcy5fdHJhbnNsYXRvci5jb21wdXRlUG9zaXRpb24ocS5jbGllbnRYLHEuY2xpZW50WSksdGhpcy5fY2FsbENhbGxiYWNrc0ZvckV2ZW50KHIsdGhpcy5sYXN0TW91c2VQb3NpdGlvbigpLHEpfTttLnByb3RvdHlwZS5ldmVudEluc2lkZT1mdW5jdGlvbihwLHEpe3JldHVybiBsLlRyYW5zbGF0b3IuaXNFdmVudEluc2lkZShwLHEpfTttLnByb3RvdHlwZS5sYXN0TW91c2VQb3NpdGlvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9sYXN0TW91c2VQb3NpdGlvbn07cmV0dXJuIG19KGYoMjQpLkRpc3BhdGNoZXIpO2MuX0RJU1BBVENIRVJfS0VZPSJfX1Bsb3R0YWJsZV9EaXNwYXRjaGVyX01vdXNlIjtjLl9NT1VTRU9WRVJfRVZFTlRfTkFNRT0ibW91c2VvdmVyIjtjLl9NT1VTRU1PVkVfRVZFTlRfTkFNRT0ibW91c2Vtb3ZlIjsKYy5fTU9VU0VPVVRfRVZFTlRfTkFNRT0ibW91c2VvdXQiO2MuX01PVVNFRE9XTl9FVkVOVF9OQU1FPSJtb3VzZWRvd24iO2MuX01PVVNFVVBfRVZFTlRfTkFNRT0ibW91c2V1cCI7Yy5fV0hFRUxfRVZFTlRfTkFNRT0id2hlZWwiO2MuX0RCTENMSUNLX0VWRU5UX05BTUU9ImRibGNsaWNrIjtkLk1vdXNlPWN9LGZ1bmN0aW9uKGMsZCxmKXt2YXIgZz10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8ZnVuY3Rpb24oayxtKXtmdW5jdGlvbiBwKCl7dGhpcy5jb25zdHJ1Y3Rvcj1rfWZvcih2YXIgcSBpbiBtKW0uaGFzT3duUHJvcGVydHkocSkmJihrW3FdPW1bcV0pO2sucHJvdG90eXBlPW51bGw9PT1tP09iamVjdC5jcmVhdGUobSk6KHAucHJvdG90eXBlPW0ucHJvdG90eXBlLG5ldyBwKX0sbD1mKDApO2M9ZnVuY3Rpb24oayl7ZnVuY3Rpb24gbShwKXt2YXIgcT1rLmNhbGwodGhpcyl8fHRoaXM7cS5fdHJhbnNsYXRvcj1sLmdldFRyYW5zbGF0b3IocCk7cS5fZXZlbnRUb1Byb2Nlc3NpbmdGdW5jdGlvblttLl9UT1VDSFNUQVJUX0VWRU5UX05BTUVdPQpmdW5jdGlvbihyKXtyZXR1cm4gcS5fbWVhc3VyZUFuZERpc3BhdGNoKHAscixtLl9UT1VDSFNUQVJUX0VWRU5UX05BTUUsInBhZ2UiKX07cS5fZXZlbnRUb1Byb2Nlc3NpbmdGdW5jdGlvblttLl9UT1VDSE1PVkVfRVZFTlRfTkFNRV09ZnVuY3Rpb24ocil7cmV0dXJuIHEuX21lYXN1cmVBbmREaXNwYXRjaChwLHIsbS5fVE9VQ0hNT1ZFX0VWRU5UX05BTUUsInBhZ2UiKX07cS5fZXZlbnRUb1Byb2Nlc3NpbmdGdW5jdGlvblttLl9UT1VDSEVORF9FVkVOVF9OQU1FXT1mdW5jdGlvbihyKXtyZXR1cm4gcS5fbWVhc3VyZUFuZERpc3BhdGNoKHAscixtLl9UT1VDSEVORF9FVkVOVF9OQU1FLCJwYWdlIil9O3EuX2V2ZW50VG9Qcm9jZXNzaW5nRnVuY3Rpb25bbS5fVE9VQ0hDQU5DRUxfRVZFTlRfTkFNRV09ZnVuY3Rpb24ocil7cmV0dXJuIHEuX21lYXN1cmVBbmREaXNwYXRjaChwLHIsbS5fVE9VQ0hDQU5DRUxfRVZFTlRfTkFNRSwicGFnZSIpfTtyZXR1cm4gcX1nKG0sayk7bS5nZXREaXNwYXRjaGVyPQpmdW5jdGlvbihwKXt2YXIgcT1wLnJvb3QoKS5yb290RWxlbWVudCgpLHI9cVttLl9ESVNQQVRDSEVSX0tFWV07bnVsbD09ciYmKHI9bmV3IG0ocCkscVttLl9ESVNQQVRDSEVSX0tFWV09cik7cmV0dXJuIHJ9O20ucHJvdG90eXBlLm9uVG91Y2hTdGFydD1mdW5jdGlvbihwKXt0aGlzLl9hZGRDYWxsYmFja0ZvckV2ZW50KG0uX1RPVUNIU1RBUlRfRVZFTlRfTkFNRSxwKX07bS5wcm90b3R5cGUub2ZmVG91Y2hTdGFydD1mdW5jdGlvbihwKXt0aGlzLl9yZW1vdmVDYWxsYmFja0ZvckV2ZW50KG0uX1RPVUNIU1RBUlRfRVZFTlRfTkFNRSxwKX07bS5wcm90b3R5cGUub25Ub3VjaE1vdmU9ZnVuY3Rpb24ocCl7dGhpcy5fYWRkQ2FsbGJhY2tGb3JFdmVudChtLl9UT1VDSE1PVkVfRVZFTlRfTkFNRSxwKX07bS5wcm90b3R5cGUub2ZmVG91Y2hNb3ZlPWZ1bmN0aW9uKHApe3RoaXMuX3JlbW92ZUNhbGxiYWNrRm9yRXZlbnQobS5fVE9VQ0hNT1ZFX0VWRU5UX05BTUUscCl9O20ucHJvdG90eXBlLm9uVG91Y2hFbmQ9CmZ1bmN0aW9uKHApe3RoaXMuX2FkZENhbGxiYWNrRm9yRXZlbnQobS5fVE9VQ0hFTkRfRVZFTlRfTkFNRSxwKX07bS5wcm90b3R5cGUub2ZmVG91Y2hFbmQ9ZnVuY3Rpb24ocCl7dGhpcy5fcmVtb3ZlQ2FsbGJhY2tGb3JFdmVudChtLl9UT1VDSEVORF9FVkVOVF9OQU1FLHApfTttLnByb3RvdHlwZS5vblRvdWNoQ2FuY2VsPWZ1bmN0aW9uKHApe3RoaXMuX2FkZENhbGxiYWNrRm9yRXZlbnQobS5fVE9VQ0hDQU5DRUxfRVZFTlRfTkFNRSxwKX07bS5wcm90b3R5cGUub2ZmVG91Y2hDYW5jZWw9ZnVuY3Rpb24ocCl7dGhpcy5fcmVtb3ZlQ2FsbGJhY2tGb3JFdmVudChtLl9UT1VDSENBTkNFTF9FVkVOVF9OQU1FLHApfTttLnByb3RvdHlwZS5fbWVhc3VyZUFuZERpc3BhdGNoPWZ1bmN0aW9uKHAscSxyLHQpe3ZvaWQgMD09PXQmJih0PSJlbGVtZW50Iik7aWYoInBhZ2UiIT09dCYmImVsZW1lbnQiIT09dCl0aHJvdyBFcnJvcigiSW52YWxpZCBzY29wZSAnIit0KyInLCBtdXN0IGJlICdlbGVtZW50JyBvciAncGFnZSciKTsKaWYoImVsZW1lbnQiIT09dHx8dGhpcy5ldmVudEluc2lkZShwLHEpKXtwPXEuY2hhbmdlZFRvdWNoZXM7dD17fTtmb3IodmFyIHY9W10sQT0wO0E8cC5sZW5ndGg7QSsrKXt2YXIgeT1wW0FdLHg9eS5pZGVudGlmaWVyO3k9dGhpcy5fdHJhbnNsYXRvci5jb21wdXRlUG9zaXRpb24oeS5jbGllbnRYLHkuY2xpZW50WSk7bnVsbCE9eSYmKHRbeF09eSx2LnB1c2goeCkpfTA8di5sZW5ndGgmJnRoaXMuX2NhbGxDYWxsYmFja3NGb3JFdmVudChyLHYsdCxxKX19O20ucHJvdG90eXBlLmV2ZW50SW5zaWRlPWZ1bmN0aW9uKHAscSl7cmV0dXJuIGwuVHJhbnNsYXRvci5pc0V2ZW50SW5zaWRlKHAscSl9O3JldHVybiBtfShmKDI0KS5EaXNwYXRjaGVyKTtjLl9ESVNQQVRDSEVSX0tFWT0iX19QbG90dGFibGVfRGlzcGF0Y2hlcl9Ub3VjaCI7Yy5fVE9VQ0hTVEFSVF9FVkVOVF9OQU1FPSJ0b3VjaHN0YXJ0IjtjLl9UT1VDSE1PVkVfRVZFTlRfTkFNRT0idG91Y2htb3ZlIjtjLl9UT1VDSEVORF9FVkVOVF9OQU1FPQoidG91Y2hlbmQiO2MuX1RPVUNIQ0FOQ0VMX0VWRU5UX05BTUU9InRvdWNoY2FuY2VsIjtkLlRvdWNoPWN9LGZ1bmN0aW9uKGMsZCl7Yz1mdW5jdGlvbigpe2Z1bmN0aW9uIGYoZyxsLGspe3ZvaWQgMD09PWsmJihrPXdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvKTt0aGlzLnNjcmVlbldpZHRoPWc7dGhpcy5zY3JlZW5IZWlnaHQ9bDt0aGlzLmRldmljZVBpeGVsUmF0aW89azt0aGlzLnBpeGVsV2lkdGg9ZyprO3RoaXMucGl4ZWxIZWlnaHQ9bCprO3RoaXMuY2FudmFzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpO3RoaXMuY3R4PXRoaXMuY2FudmFzLmdldENvbnRleHQoIjJkIik7Zi5zaXplUGl4ZWxzKHRoaXMuY3R4LGcsbCxrKX1mLnNpemVQaXhlbHM9ZnVuY3Rpb24oZyxsLGssbSl7dmFyIHA9Zy5jYW52YXM7cC53aWR0aD1sKm07cC5oZWlnaHQ9ayptO3Auc3R5bGUud2lkdGg9bCsicHgiO3Auc3R5bGUuaGVpZ2h0PWsrInB4IjtnLnNldFRyYW5zZm9ybSgxLDAsMCwxLDAsCjApO2cuc2NhbGUobSxtKX07Zi5wcm90b3R5cGUuYmxpdD1mdW5jdGlvbihnLGwsayl7dm9pZCAwPT09bCYmKGw9MCk7dm9pZCAwPT09ayYmKGs9MCk7Zy5kcmF3SW1hZ2UodGhpcy5jYW52YXMsbCxrLHRoaXMuc2NyZWVuV2lkdGgsdGhpcy5zY3JlZW5IZWlnaHQpfTtmLnByb3RvdHlwZS5ibGl0Q2VudGVyPWZ1bmN0aW9uKGcsbCxrKXt2b2lkIDA9PT1sJiYobD0wKTt2b2lkIDA9PT1rJiYoaz0wKTt0aGlzLmJsaXQoZyxNYXRoLmZsb29yKGwtdGhpcy5zY3JlZW5XaWR0aC8yKSxNYXRoLmZsb29yKGstdGhpcy5zY3JlZW5IZWlnaHQvMikpfTtmLnByb3RvdHlwZS5yZXNpemU9ZnVuY3Rpb24oZyxsLGspe3ZvaWQgMD09PWsmJihrPSExKTt2YXIgbT10aGlzLmRldmljZVBpeGVsUmF0aW87dGhpcy5zY3JlZW5XaWR0aD1nO3RoaXMuc2NyZWVuSGVpZ2h0PWw7dGhpcy5waXhlbFdpZHRoPWcqbTt0aGlzLnBpeGVsSGVpZ2h0PWwqbTtmLnNpemVQaXhlbHModGhpcy5jdHgsZyxsLG0pO2smJgp0aGlzLmN0eC50cmFuc2xhdGUoZy8yLGcvMik7cmV0dXJuIHRoaXN9O2YucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKGcpe3ZhciBsPXRoaXMucGl4ZWxXaWR0aCxrPXRoaXMucGl4ZWxIZWlnaHQsbT10aGlzLmN0eDttLnNhdmUoKTttLnNldFRyYW5zZm9ybSgxLDAsMCwxLDAsMCk7bnVsbD09Zz9tLmNsZWFyUmVjdCgwLDAsbCxrKToobS5maWxsU3R5bGU9ZyxtLmZpbGxSZWN0KDAsMCxsLGspKTttLnJlc3RvcmUoKTtyZXR1cm4gdGhpc307Zi5wcm90b3R5cGUuZ2V0SW1hZ2VEYXRhPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3R4LmdldEltYWdlRGF0YSgwLDAsdGhpcy5waXhlbFdpZHRoLHRoaXMucGl4ZWxIZWlnaHQpfTtyZXR1cm4gZn0oKTtkLkNhbnZhc0J1ZmZlcj1jfSxmdW5jdGlvbihjLGQsZil7dmFyIGc9dGhpcyYmdGhpcy5fX2V4dGVuZHN8fGZ1bmN0aW9uKG0scCl7ZnVuY3Rpb24gcSgpe3RoaXMuY29uc3RydWN0b3I9bX1mb3IodmFyIHIgaW4gcClwLmhhc093blByb3BlcnR5KHIpJiYKKG1bcl09cFtyXSk7bS5wcm90b3R5cGU9bnVsbD09PXA/T2JqZWN0LmNyZWF0ZShwKToocS5wcm90b3R5cGU9cC5wcm90b3R5cGUsbmV3IHEpfSxsPWYoMTMpLGs9ZigwKTtjPWZ1bmN0aW9uKG0pe2Z1bmN0aW9uIHAoKXt2YXIgcT1udWxsIT09bSYmbS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXM7cS5fY2xpY2tlZERvd249ITE7cS5fZG91YmxlQ2xpY2tpbmc9ITE7cS5fb25DbGlja0NhbGxiYWNrcz1uZXcgay5DYWxsYmFja1NldDtxLl9vbkRvdWJsZUNsaWNrQ2FsbGJhY2tzPW5ldyBrLkNhbGxiYWNrU2V0O3EuX21vdXNlRG93bkNhbGxiYWNrPWZ1bmN0aW9uKHIpe3JldHVybiBxLl9oYW5kbGVDbGlja0Rvd24ocil9O3EuX21vdXNlVXBDYWxsYmFjaz1mdW5jdGlvbihyLHQpe3JldHVybiBxLl9oYW5kbGVDbGlja1VwKHIsdCl9O3EuX2RibENsaWNrQ2FsbGJhY2s9ZnVuY3Rpb24ocix0KXtyZXR1cm4gcS5faGFuZGxlRGJsQ2xpY2socix0KX07cS5fdG91Y2hTdGFydENhbGxiYWNrPQpmdW5jdGlvbihyLHQpe3JldHVybiBxLl9oYW5kbGVDbGlja0Rvd24odFtyWzBdXSl9O3EuX3RvdWNoRW5kQ2FsbGJhY2s9ZnVuY3Rpb24ocix0LHYpe3JldHVybiBxLl9oYW5kbGVDbGlja1VwKHRbclswXV0sdil9O3EuX3RvdWNoQ2FuY2VsQ2FsbGJhY2s9ZnVuY3Rpb24oKXtyZXR1cm4gcS5fY2xpY2tlZERvd249ITF9O3JldHVybiBxfWcocCxtKTtwLnByb3RvdHlwZS5fYW5jaG9yPWZ1bmN0aW9uKHEpe20ucHJvdG90eXBlLl9hbmNob3IuY2FsbCh0aGlzLHEpO3RoaXMuX21vdXNlRGlzcGF0Y2hlcj1sLk1vdXNlLmdldERpc3BhdGNoZXIocSk7dGhpcy5fbW91c2VEaXNwYXRjaGVyLm9uTW91c2VEb3duKHRoaXMuX21vdXNlRG93bkNhbGxiYWNrKTt0aGlzLl9tb3VzZURpc3BhdGNoZXIub25Nb3VzZVVwKHRoaXMuX21vdXNlVXBDYWxsYmFjayk7dGhpcy5fbW91c2VEaXNwYXRjaGVyLm9uRGJsQ2xpY2sodGhpcy5fZGJsQ2xpY2tDYWxsYmFjayk7dGhpcy5fdG91Y2hEaXNwYXRjaGVyPQpsLlRvdWNoLmdldERpc3BhdGNoZXIocSk7dGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9uVG91Y2hTdGFydCh0aGlzLl90b3VjaFN0YXJ0Q2FsbGJhY2spO3RoaXMuX3RvdWNoRGlzcGF0Y2hlci5vblRvdWNoRW5kKHRoaXMuX3RvdWNoRW5kQ2FsbGJhY2spO3RoaXMuX3RvdWNoRGlzcGF0Y2hlci5vblRvdWNoQ2FuY2VsKHRoaXMuX3RvdWNoQ2FuY2VsQ2FsbGJhY2spfTtwLnByb3RvdHlwZS5fdW5hbmNob3I9ZnVuY3Rpb24oKXttLnByb3RvdHlwZS5fdW5hbmNob3IuY2FsbCh0aGlzKTt0aGlzLl9tb3VzZURpc3BhdGNoZXIub2ZmTW91c2VEb3duKHRoaXMuX21vdXNlRG93bkNhbGxiYWNrKTt0aGlzLl9tb3VzZURpc3BhdGNoZXIub2ZmTW91c2VVcCh0aGlzLl9tb3VzZVVwQ2FsbGJhY2spO3RoaXMuX21vdXNlRGlzcGF0Y2hlci5vZmZEYmxDbGljayh0aGlzLl9kYmxDbGlja0NhbGxiYWNrKTt0aGlzLl9tb3VzZURpc3BhdGNoZXI9bnVsbDt0aGlzLl90b3VjaERpc3BhdGNoZXIub2ZmVG91Y2hTdGFydCh0aGlzLl90b3VjaFN0YXJ0Q2FsbGJhY2spOwp0aGlzLl90b3VjaERpc3BhdGNoZXIub2ZmVG91Y2hFbmQodGhpcy5fdG91Y2hFbmRDYWxsYmFjayk7dGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9mZlRvdWNoQ2FuY2VsKHRoaXMuX3RvdWNoQ2FuY2VsQ2FsbGJhY2spO3RoaXMuX3RvdWNoRGlzcGF0Y2hlcj1udWxsfTtwLnByb3RvdHlwZS5faGFuZGxlQ2xpY2tEb3duPWZ1bmN0aW9uKHEpe3E9dGhpcy5fdHJhbnNsYXRlVG9Db21wb25lbnRTcGFjZShxKTt0aGlzLl9pc0luc2lkZUNvbXBvbmVudChxKSYmKHRoaXMuX2NsaWNrZWREb3duPSEwLHRoaXMuX2NsaWNrZWRQb2ludD1xKX07cC5wcm90b3R5cGUuX2hhbmRsZUNsaWNrVXA9ZnVuY3Rpb24ocSxyKXt2YXIgdD10aGlzLHY9dGhpcy5fdHJhbnNsYXRlVG9Db21wb25lbnRTcGFjZShxKTt0aGlzLl9jbGlja2VkRG93biYmcC5fcG9pbnRzRXF1YWwodix0aGlzLl9jbGlja2VkUG9pbnQpJiZzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dC5fZG91YmxlQ2xpY2tpbmd8fHQuX29uQ2xpY2tDYWxsYmFja3MuY2FsbENhbGxiYWNrcyh2LApyKX0sMCk7dGhpcy5fY2xpY2tlZERvd249ITF9O3AucHJvdG90eXBlLl9oYW5kbGVEYmxDbGljaz1mdW5jdGlvbihxLHIpe3ZhciB0PXRoaXM7cT10aGlzLl90cmFuc2xhdGVUb0NvbXBvbmVudFNwYWNlKHEpO3RoaXMuX2RvdWJsZUNsaWNraW5nPSEwO3RoaXMuX29uRG91YmxlQ2xpY2tDYWxsYmFja3MuY2FsbENhbGxiYWNrcyhxLHIpO3NldFRpbWVvdXQoZnVuY3Rpb24oKXtyZXR1cm4gdC5fZG91YmxlQ2xpY2tpbmc9ITF9LDApfTtwLl9wb2ludHNFcXVhbD1mdW5jdGlvbihxLHIpe3JldHVybiBxLng9PT1yLngmJnEueT09PXIueX07cC5wcm90b3R5cGUub25DbGljaz1mdW5jdGlvbihxKXt0aGlzLl9vbkNsaWNrQ2FsbGJhY2tzLmFkZChxKTtyZXR1cm4gdGhpc307cC5wcm90b3R5cGUub2ZmQ2xpY2s9ZnVuY3Rpb24ocSl7dGhpcy5fb25DbGlja0NhbGxiYWNrcy5kZWxldGUocSl9O3AucHJvdG90eXBlLm9uRG91YmxlQ2xpY2s9ZnVuY3Rpb24ocSl7dGhpcy5fb25Eb3VibGVDbGlja0NhbGxiYWNrcy5hZGQocSl9OwpwLnByb3RvdHlwZS5vZmZEb3VibGVDbGljaz1mdW5jdGlvbihxKXt0aGlzLl9vbkRvdWJsZUNsaWNrQ2FsbGJhY2tzLmRlbGV0ZShxKTtyZXR1cm4gdGhpc307cmV0dXJuIHB9KGYoMTUpLkludGVyYWN0aW9uKTtkLkNsaWNrPWN9LGZ1bmN0aW9uKGMsZCxmKXt2YXIgZz10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8ZnVuY3Rpb24obSxwKXtmdW5jdGlvbiBxKCl7dGhpcy5jb25zdHJ1Y3Rvcj1tfWZvcih2YXIgciBpbiBwKXAuaGFzT3duUHJvcGVydHkocikmJihtW3JdPXBbcl0pO20ucHJvdG90eXBlPW51bGw9PT1wP09iamVjdC5jcmVhdGUocCk6KHEucHJvdG90eXBlPXAucHJvdG90eXBlLG5ldyBxKX0sbD1mKDEzKSxrPWYoMCk7Yz1mdW5jdGlvbihtKXtmdW5jdGlvbiBwKCl7dmFyIHE9bnVsbCE9PW0mJm0uYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzO3EuX2RyYWdnaW5nPSExO3EuX2NvbnN0cmFpbmVkVG9Db21wb25lbnQ9ITA7cS5fbW91c2VGaWx0ZXI9cC5fREVGQVVMVF9NT1VTRV9GSUxURVI7CnEuX2RyYWdTdGFydENhbGxiYWNrcz1uZXcgay5DYWxsYmFja1NldDtxLl9kcmFnQ2FsbGJhY2tzPW5ldyBrLkNhbGxiYWNrU2V0O3EuX2RyYWdFbmRDYWxsYmFja3M9bmV3IGsuQ2FsbGJhY2tTZXQ7cS5fbW91c2VEb3duQ2FsbGJhY2s9ZnVuY3Rpb24ocix0KXtyZXR1cm4gcS5fc3RhcnREcmFnKHIsdCl9O3EuX21vdXNlTW92ZUNhbGxiYWNrPWZ1bmN0aW9uKHIpe3JldHVybiBxLl9kb0RyYWcocil9O3EuX21vdXNlVXBDYWxsYmFjaz1mdW5jdGlvbihyLHQpe3JldHVybiBxLl9lbmREcmFnKHIsdCl9O3EuX3RvdWNoU3RhcnRDYWxsYmFjaz1mdW5jdGlvbihyLHQsdil7cmV0dXJuIHEuX3N0YXJ0RHJhZyh0W3JbMF1dLHYpfTtxLl90b3VjaE1vdmVDYWxsYmFjaz1mdW5jdGlvbihyLHQpe3JldHVybiBxLl9kb0RyYWcodFtyWzBdXSl9O3EuX3RvdWNoRW5kQ2FsbGJhY2s9ZnVuY3Rpb24ocix0LHYpe3JldHVybiBxLl9lbmREcmFnKHRbclswXV0sdil9O3JldHVybiBxfWcocCxtKTtwLnByb3RvdHlwZS5fYW5jaG9yPQpmdW5jdGlvbihxKXttLnByb3RvdHlwZS5fYW5jaG9yLmNhbGwodGhpcyxxKTt0aGlzLl9tb3VzZURpc3BhdGNoZXI9bC5Nb3VzZS5nZXREaXNwYXRjaGVyKHRoaXMuX2NvbXBvbmVudEF0dGFjaGVkVG8pO3RoaXMuX21vdXNlRGlzcGF0Y2hlci5vbk1vdXNlRG93bih0aGlzLl9tb3VzZURvd25DYWxsYmFjayk7dGhpcy5fbW91c2VEaXNwYXRjaGVyLm9uTW91c2VNb3ZlKHRoaXMuX21vdXNlTW92ZUNhbGxiYWNrKTt0aGlzLl9tb3VzZURpc3BhdGNoZXIub25Nb3VzZVVwKHRoaXMuX21vdXNlVXBDYWxsYmFjayk7dGhpcy5fdG91Y2hEaXNwYXRjaGVyPWwuVG91Y2guZ2V0RGlzcGF0Y2hlcih0aGlzLl9jb21wb25lbnRBdHRhY2hlZFRvKTt0aGlzLl90b3VjaERpc3BhdGNoZXIub25Ub3VjaFN0YXJ0KHRoaXMuX3RvdWNoU3RhcnRDYWxsYmFjayk7dGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9uVG91Y2hNb3ZlKHRoaXMuX3RvdWNoTW92ZUNhbGxiYWNrKTt0aGlzLl90b3VjaERpc3BhdGNoZXIub25Ub3VjaEVuZCh0aGlzLl90b3VjaEVuZENhbGxiYWNrKX07CnAucHJvdG90eXBlLl91bmFuY2hvcj1mdW5jdGlvbigpe20ucHJvdG90eXBlLl91bmFuY2hvci5jYWxsKHRoaXMpO3RoaXMuX21vdXNlRGlzcGF0Y2hlci5vZmZNb3VzZURvd24odGhpcy5fbW91c2VEb3duQ2FsbGJhY2spO3RoaXMuX21vdXNlRGlzcGF0Y2hlci5vZmZNb3VzZU1vdmUodGhpcy5fbW91c2VNb3ZlQ2FsbGJhY2spO3RoaXMuX21vdXNlRGlzcGF0Y2hlci5vZmZNb3VzZVVwKHRoaXMuX21vdXNlVXBDYWxsYmFjayk7dGhpcy5fbW91c2VEaXNwYXRjaGVyPW51bGw7dGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9mZlRvdWNoU3RhcnQodGhpcy5fdG91Y2hTdGFydENhbGxiYWNrKTt0aGlzLl90b3VjaERpc3BhdGNoZXIub2ZmVG91Y2hNb3ZlKHRoaXMuX3RvdWNoTW92ZUNhbGxiYWNrKTt0aGlzLl90b3VjaERpc3BhdGNoZXIub2ZmVG91Y2hFbmQodGhpcy5fdG91Y2hFbmRDYWxsYmFjayk7dGhpcy5fdG91Y2hEaXNwYXRjaGVyPW51bGx9O3AucHJvdG90eXBlLl90cmFuc2xhdGVBbmRDb25zdHJhaW49CmZ1bmN0aW9uKHEpe3E9dGhpcy5fdHJhbnNsYXRlVG9Db21wb25lbnRTcGFjZShxKTtyZXR1cm4gdGhpcy5fY29uc3RyYWluZWRUb0NvbXBvbmVudD97eDprLk1hdGguY2xhbXAocS54LDAsdGhpcy5fY29tcG9uZW50QXR0YWNoZWRUby53aWR0aCgpKSx5OmsuTWF0aC5jbGFtcChxLnksMCx0aGlzLl9jb21wb25lbnRBdHRhY2hlZFRvLmhlaWdodCgpKX06cX07cC5wcm90b3R5cGUuX3N0YXJ0RHJhZz1mdW5jdGlvbihxLHIpe3IgaW5zdGFuY2VvZiBNb3VzZUV2ZW50JiYhdGhpcy5fbW91c2VGaWx0ZXIocil8fChxPXRoaXMuX3RyYW5zbGF0ZVRvQ29tcG9uZW50U3BhY2UocSksdGhpcy5faXNJbnNpZGVDb21wb25lbnQocSkmJihyLnByZXZlbnREZWZhdWx0KCksdGhpcy5fZHJhZ2dpbmc9ITAsdGhpcy5fZHJhZ09yaWdpbj1xLHRoaXMuX2RyYWdTdGFydENhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKHRoaXMuX2RyYWdPcmlnaW4pKSl9O3AucHJvdG90eXBlLl9kb0RyYWc9ZnVuY3Rpb24ocSl7dGhpcy5fZHJhZ2dpbmcmJgp0aGlzLl9kcmFnQ2FsbGJhY2tzLmNhbGxDYWxsYmFja3ModGhpcy5fZHJhZ09yaWdpbix0aGlzLl90cmFuc2xhdGVBbmRDb25zdHJhaW4ocSkpfTtwLnByb3RvdHlwZS5fZW5kRHJhZz1mdW5jdGlvbihxLHIpe3IgaW5zdGFuY2VvZiBNb3VzZUV2ZW50JiYwIT09ci5idXR0b258fCF0aGlzLl9kcmFnZ2luZ3x8KHRoaXMuX2RyYWdnaW5nPSExLHRoaXMuX2RyYWdFbmRDYWxsYmFja3MuY2FsbENhbGxiYWNrcyh0aGlzLl9kcmFnT3JpZ2luLHRoaXMuX3RyYW5zbGF0ZUFuZENvbnN0cmFpbihxKSkpfTtwLnByb3RvdHlwZS5jb25zdHJhaW5lZFRvQ29tcG9uZW50PWZ1bmN0aW9uKCl7dGhpcy5fY29uc3RyYWluZWRUb0NvbXBvbmVudD0hMX07cC5wcm90b3R5cGUubW91c2VGaWx0ZXI9ZnVuY3Rpb24ocSl7MCE9PWFyZ3VtZW50cy5sZW5ndGgmJih0aGlzLl9tb3VzZUZpbHRlcj1xKX07cC5wcm90b3R5cGUub25EcmFnU3RhcnQ9ZnVuY3Rpb24ocSl7dGhpcy5fZHJhZ1N0YXJ0Q2FsbGJhY2tzLmFkZChxKX07CnAucHJvdG90eXBlLm9mZkRyYWdTdGFydD1mdW5jdGlvbihxKXt0aGlzLl9kcmFnU3RhcnRDYWxsYmFja3MuZGVsZXRlKHEpfTtwLnByb3RvdHlwZS5vbkRyYWc9ZnVuY3Rpb24ocSl7dGhpcy5fZHJhZ0NhbGxiYWNrcy5hZGQocSk7cmV0dXJuIHRoaXN9O3AucHJvdG90eXBlLm9mZkRyYWc9ZnVuY3Rpb24ocSl7dGhpcy5fZHJhZ0NhbGxiYWNrcy5kZWxldGUocSl9O3AucHJvdG90eXBlLm9uRHJhZ0VuZD1mdW5jdGlvbihxKXt0aGlzLl9kcmFnRW5kQ2FsbGJhY2tzLmFkZChxKX07cC5wcm90b3R5cGUub2ZmRHJhZ0VuZD1mdW5jdGlvbihxKXt0aGlzLl9kcmFnRW5kQ2FsbGJhY2tzLmRlbGV0ZShxKX07cmV0dXJuIHB9KGYoMTUpLkludGVyYWN0aW9uKTtjLl9ERUZBVUxUX01PVVNFX0ZJTFRFUj1mdW5jdGlvbihtKXtyZXR1cm4gMD09PW0uYnV0dG9ufTtkLkRyYWc9Y30sZnVuY3Rpb24oYyxkLGYpe3ZhciBnPXRoaXMmJnRoaXMuX19leHRlbmRzfHxmdW5jdGlvbih0LHYpe2Z1bmN0aW9uIEEoKXt0aGlzLmNvbnN0cnVjdG9yPQp0fWZvcih2YXIgeSBpbiB2KXYuaGFzT3duUHJvcGVydHkoeSkmJih0W3ldPXZbeV0pO3QucHJvdG90eXBlPW51bGw9PT12P09iamVjdC5jcmVhdGUodik6KEEucHJvdG90eXBlPXYucHJvdG90eXBlLG5ldyBBKX0sbD1mKDEpLGs9ZigxMyksbT1mKDMpLHA9ZigwKSxxPWYoMjUpO2M9ZigxNSk7dmFyIHI9ZigyNik7Zj1mdW5jdGlvbih0KXtmdW5jdGlvbiB2KEEseSl7dmFyIHg9dC5jYWxsKHRoaXMpfHx0aGlzO3guX3doZWVsRmlsdGVyPWZ1bmN0aW9uKCl7cmV0dXJuITB9O3guX3doZWVsQ2FsbGJhY2s9ZnVuY3Rpb24oQyxGKXtyZXR1cm4geC5faGFuZGxlV2hlZWxFdmVudChDLEYpfTt4Ll90b3VjaFN0YXJ0Q2FsbGJhY2s9ZnVuY3Rpb24oQyxGKXtyZXR1cm4geC5faGFuZGxlVG91Y2hTdGFydChDLEYpfTt4Ll90b3VjaE1vdmVDYWxsYmFjaz1mdW5jdGlvbihDLEYpe3JldHVybiB4Ll9oYW5kbGVQaW5jaChDLEYpfTt4Ll90b3VjaEVuZENhbGxiYWNrPWZ1bmN0aW9uKEMpe3JldHVybiB4Ll9oYW5kbGVUb3VjaEVuZChDKX07CnguX3RvdWNoQ2FuY2VsQ2FsbGJhY2s9ZnVuY3Rpb24oQyl7cmV0dXJuIHguX2hhbmRsZVRvdWNoRW5kKEMpfTt4Ll9wYW5FbmRDYWxsYmFja3M9bmV3IHAuQ2FsbGJhY2tTZXQ7eC5fem9vbUVuZENhbGxiYWNrcz1uZXcgcC5DYWxsYmFja1NldDt4Ll9wYW5ab29tVXBkYXRlQ2FsbGJhY2tzPW5ldyBwLkNhbGxiYWNrU2V0O3guX3hTY2FsZXM9bmV3IHAuU2V0O3guX3lTY2FsZXM9bmV3IHAuU2V0O3guX2RyYWdJbnRlcmFjdGlvbj1uZXcgcS5EcmFnO3guX3NldHVwRHJhZ0ludGVyYWN0aW9uKCk7eC5fdG91Y2hJZHM9bC5tYXAoKTt4Ll9taW5Eb21haW5FeHRlbnRzPW5ldyBwLk1hcDt4Ll9tYXhEb21haW5FeHRlbnRzPW5ldyBwLk1hcDt4Ll9taW5Eb21haW5WYWx1ZXM9bmV3IHAuTWFwO3guX21heERvbWFpblZhbHVlcz1uZXcgcC5NYXA7bnVsbCE9QSYmeC5hZGRYU2NhbGUoQSk7bnVsbCE9eSYmeC5hZGRZU2NhbGUoeSk7cmV0dXJuIHh9Zyh2LHQpO3YucHJvdG90eXBlLmRyYWdJbnRlcmFjdGlvbj0KZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZHJhZ0ludGVyYWN0aW9ufTt2LnByb3RvdHlwZS53aGVlbEZpbHRlcj1mdW5jdGlvbihBKXswIT09YXJndW1lbnRzLmxlbmd0aCYmKHRoaXMuX3doZWVsRmlsdGVyPUEpfTt2LnByb3RvdHlwZS5wYW49ZnVuY3Rpb24oQSl7dmFyIHk9dGhpczt0aGlzLnhTY2FsZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKHgpe3gucGFuKHkuX2NvbnN0cmFpbmVkVHJhbnNsYXRpb24oeCxBLngpKX0pO3RoaXMueVNjYWxlcygpLmZvckVhY2goZnVuY3Rpb24oeCl7eC5wYW4oeS5fY29uc3RyYWluZWRUcmFuc2xhdGlvbih4LEEueSkpfSk7dGhpcy5fcGFuWm9vbVVwZGF0ZUNhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKCl9O3YucHJvdG90eXBlLnpvb209ZnVuY3Rpb24oQSx5LHgpe3ZhciBDPXRoaXM7dm9pZCAwPT09eCYmKHg9ITApO2lmKG51bGwhPXkpe3ZhciBGPXkueDt2YXIgRD15Lnk7eCYmKHRoaXMueFNjYWxlcygpLmZvckVhY2goZnVuY3Rpb24oQil7Qj1DLl9jb25zdHJhaW5lZFpvb20oQiwKQSxGKTtGPUIuY2VudGVyUG9pbnQ7QT1CLnpvb21BbW91bnR9KSx0aGlzLnlTY2FsZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKEIpe0I9Qy5fY29uc3RyYWluZWRab29tKEIsQSxEKTtEPUIuY2VudGVyUG9pbnQ7QT1CLnpvb21BbW91bnR9KSl9dGhpcy54U2NhbGVzKCkuZm9yRWFjaChmdW5jdGlvbihCKXt2YXIgRz1CLnJhbmdlKCk7Qi56b29tKEEsbnVsbD09Rj8oR1sxXStHWzBdKS8yOkYpfSk7dGhpcy55U2NhbGVzKCkuZm9yRWFjaChmdW5jdGlvbihCKXt2YXIgRz1CLnJhbmdlKCk7Qi56b29tKEEsbnVsbD09RD8oR1sxXStHWzBdKS8yOkQpfSk7dGhpcy5fcGFuWm9vbVVwZGF0ZUNhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKCk7cmV0dXJue3pvb21BbW91bnQ6QSxjZW50ZXJWYWx1ZTp7Y2VudGVyWDpGLGNlbnRlclk6RH19fTt2LnByb3RvdHlwZS5fYW5jaG9yPWZ1bmN0aW9uKEEpe3QucHJvdG90eXBlLl9hbmNob3IuY2FsbCh0aGlzLEEpO3RoaXMuX2RyYWdJbnRlcmFjdGlvbi5hdHRhY2hUbyhBKTsKdGhpcy5fbW91c2VEaXNwYXRjaGVyPWsuTW91c2UuZ2V0RGlzcGF0Y2hlcih0aGlzLl9jb21wb25lbnRBdHRhY2hlZFRvKTt0aGlzLl9tb3VzZURpc3BhdGNoZXIub25XaGVlbCh0aGlzLl93aGVlbENhbGxiYWNrKTt0aGlzLl90b3VjaERpc3BhdGNoZXI9ay5Ub3VjaC5nZXREaXNwYXRjaGVyKHRoaXMuX2NvbXBvbmVudEF0dGFjaGVkVG8pO3RoaXMuX3RvdWNoRGlzcGF0Y2hlci5vblRvdWNoU3RhcnQodGhpcy5fdG91Y2hTdGFydENhbGxiYWNrKTt0aGlzLl90b3VjaERpc3BhdGNoZXIub25Ub3VjaE1vdmUodGhpcy5fdG91Y2hNb3ZlQ2FsbGJhY2spO3RoaXMuX3RvdWNoRGlzcGF0Y2hlci5vblRvdWNoRW5kKHRoaXMuX3RvdWNoRW5kQ2FsbGJhY2spO3RoaXMuX3RvdWNoRGlzcGF0Y2hlci5vblRvdWNoQ2FuY2VsKHRoaXMuX3RvdWNoQ2FuY2VsQ2FsbGJhY2spfTt2LnByb3RvdHlwZS5fdW5hbmNob3I9ZnVuY3Rpb24oKXt0LnByb3RvdHlwZS5fdW5hbmNob3IuY2FsbCh0aGlzKTt0aGlzLl9tb3VzZURpc3BhdGNoZXIub2ZmV2hlZWwodGhpcy5fd2hlZWxDYWxsYmFjayk7CnRoaXMuX21vdXNlRGlzcGF0Y2hlcj1udWxsO3RoaXMuX3RvdWNoRGlzcGF0Y2hlci5vZmZUb3VjaFN0YXJ0KHRoaXMuX3RvdWNoU3RhcnRDYWxsYmFjayk7dGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9mZlRvdWNoTW92ZSh0aGlzLl90b3VjaE1vdmVDYWxsYmFjayk7dGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9mZlRvdWNoRW5kKHRoaXMuX3RvdWNoRW5kQ2FsbGJhY2spO3RoaXMuX3RvdWNoRGlzcGF0Y2hlci5vZmZUb3VjaENhbmNlbCh0aGlzLl90b3VjaENhbmNlbENhbGxiYWNrKTt0aGlzLl90b3VjaERpc3BhdGNoZXI9bnVsbDt0aGlzLl9kcmFnSW50ZXJhY3Rpb24uZGV0YWNoKCl9O3YucHJvdG90eXBlLl9oYW5kbGVUb3VjaFN0YXJ0PWZ1bmN0aW9uKEEseSl7Zm9yKHZhciB4PTA7eDxBLmxlbmd0aCYmMj50aGlzLl90b3VjaElkcy5zaXplKCk7eCsrKXt2YXIgQz1BW3hdO3RoaXMuX3RvdWNoSWRzLnNldChDLnRvU3RyaW5nKCksdGhpcy5fdHJhbnNsYXRlVG9Db21wb25lbnRTcGFjZSh5W0NdKSl9fTsKdi5wcm90b3R5cGUuX2hhbmRsZVBpbmNoPWZ1bmN0aW9uKEEseSl7dmFyIHg9dGhpcztpZighKDI+dGhpcy5fdG91Y2hJZHMuc2l6ZSgpKSl7dmFyIEM9dGhpcy5fdG91Y2hJZHMudmFsdWVzKCk7aWYodGhpcy5faXNJbnNpZGVDb21wb25lbnQodGhpcy5fdHJhbnNsYXRlVG9Db21wb25lbnRTcGFjZShDWzBdKSkmJnRoaXMuX2lzSW5zaWRlQ29tcG9uZW50KHRoaXMuX3RyYW5zbGF0ZVRvQ29tcG9uZW50U3BhY2UoQ1sxXSkpKXt2YXIgRj12Ll9wb2ludERpc3RhbmNlKENbMF0sQ1sxXSk7aWYoMCE9PUYpe0EuZm9yRWFjaChmdW5jdGlvbihMKXt4Ll90b3VjaElkcy5oYXMoTC50b1N0cmluZygpKSYmeC5fdG91Y2hJZHMuc2V0KEwudG9TdHJpbmcoKSx4Ll90cmFuc2xhdGVUb0NvbXBvbmVudFNwYWNlKHlbTF0pKX0pO0E9dGhpcy5fdG91Y2hJZHMudmFsdWVzKCk7dmFyIEQ9di5fcG9pbnREaXN0YW5jZShBWzBdLEFbMV0pO2lmKDAhPT1EKXt2YXIgQj1GL0QsRz1BLm1hcChmdW5jdGlvbihMLApKKXtyZXR1cm57eDooTC54LUNbSl0ueCkvQix5OihMLnktQ1tKXS55KS9CfX0pO0Y9di5jZW50ZXJQb2ludChDWzBdLENbMV0pO0Y9dGhpcy56b29tKEIsRik7QT1GLmNlbnRlclZhbHVlO3ZhciBLPUYuem9vbUFtb3VudDtGPUEuY2VudGVyWDtBPUEuY2VudGVyWTtEPUMubWFwKGZ1bmN0aW9uKEwsSil7cmV0dXJue3g6R1tKXS54KksrTC54LHk6R1tKXS55KksrTC55fX0pO3RoaXMucGFuKHt4OkYtKERbMF0ueCtEWzFdLngpLzIseTpBLShEWzBdLnkrRFsxXS55KS8yfSl9fX19fTt2LmNlbnRlclBvaW50PWZ1bmN0aW9uKEEseSl7cmV0dXJue3g6KE1hdGgubWluKEEueCx5LngpK01hdGgubWF4KEEueCx5LngpKS8yLHk6KE1hdGgubWF4KEEueSx5LnkpK01hdGgubWluKEEueSx5LnkpKS8yfX07di5fcG9pbnREaXN0YW5jZT1mdW5jdGlvbihBLHkpe3JldHVybiBNYXRoLnNxcnQoTWF0aC5wb3coTWF0aC5tYXgoQS54LHkueCktTWF0aC5taW4oQS54LHkueCksMikrTWF0aC5wb3coTWF0aC5tYXgoQS55LAp5LnkpLU1hdGgubWluKEEueSx5LnkpLDIpKX07di5wcm90b3R5cGUuX2hhbmRsZVRvdWNoRW5kPWZ1bmN0aW9uKEEpe3ZhciB5PXRoaXM7QS5mb3JFYWNoKGZ1bmN0aW9uKHgpe3kuX3RvdWNoSWRzLnJlbW92ZSh4LnRvU3RyaW5nKCkpfSk7MDx0aGlzLl90b3VjaElkcy5zaXplKCkmJnRoaXMuX3pvb21FbmRDYWxsYmFja3MuY2FsbENhbGxiYWNrcygpfTt2LnByb3RvdHlwZS5faGFuZGxlV2hlZWxFdmVudD1mdW5jdGlvbihBLHkpe3RoaXMuX3doZWVsRmlsdGVyKHkpJiYoQT10aGlzLl90cmFuc2xhdGVUb0NvbXBvbmVudFNwYWNlKEEpLHRoaXMuX2lzSW5zaWRlQ29tcG9uZW50KEEpJiYoeS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuem9vbShNYXRoLnBvdygyLCgwIT09eS5kZWx0YVk/eS5kZWx0YVk6eS5kZWx0YVgpKih5LmRlbHRhTW9kZT92Ll9QSVhFTFNfUEVSX0xJTkU6MSkqLjAwMiksQSksdGhpcy5fem9vbUVuZENhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKCkpKX07di5wcm90b3R5cGUuX2NvbnN0cmFpbmVkWm9vbT0KZnVuY3Rpb24oQSx5LHgpe3JldHVybiByLmNvbnN0cmFpbmVkWm9vbShBLHkseCx0aGlzLm1pbkRvbWFpbkV4dGVudChBKSx0aGlzLm1heERvbWFpbkV4dGVudChBKSx0aGlzLm1pbkRvbWFpblZhbHVlKEEpLHRoaXMubWF4RG9tYWluVmFsdWUoQSkpfTt2LnByb3RvdHlwZS5fY29uc3RyYWluZWRUcmFuc2xhdGlvbj1mdW5jdGlvbihBLHkpe3JldHVybiByLmNvbnN0cmFpbmVkVHJhbnNsYXRpb24oQSx5LHRoaXMubWluRG9tYWluVmFsdWUoQSksdGhpcy5tYXhEb21haW5WYWx1ZShBKSl9O3YucHJvdG90eXBlLl9zZXR1cERyYWdJbnRlcmFjdGlvbj1mdW5jdGlvbigpe3ZhciBBPXRoaXM7dGhpcy5fZHJhZ0ludGVyYWN0aW9uLmNvbnN0cmFpbmVkVG9Db21wb25lbnQoKTt2YXIgeTt0aGlzLl9kcmFnSW50ZXJhY3Rpb24ub25EcmFnU3RhcnQoZnVuY3Rpb24oKXtyZXR1cm4geT1udWxsfSk7dGhpcy5fZHJhZ0ludGVyYWN0aW9uLm9uRHJhZyhmdW5jdGlvbih4LEMpezI8PUEuX3RvdWNoSWRzLnNpemUoKXx8CihBLnBhbih7eDoobnVsbD09eT94Lng6eS54KS1DLngseToobnVsbD09eT94Lnk6eS55KS1DLnl9KSx5PUMpfSk7dGhpcy5fZHJhZ0ludGVyYWN0aW9uLm9uRHJhZ0VuZChmdW5jdGlvbigpe3JldHVybiBBLl9wYW5FbmRDYWxsYmFja3MuY2FsbENhbGxiYWNrcygpfSl9O3YucHJvdG90eXBlLl9ub25MaW5lYXJTY2FsZVdpdGhFeHRlbnRzPWZ1bmN0aW9uKEEpe3JldHVybiBudWxsIT10aGlzLm1pbkRvbWFpbkV4dGVudChBKSYmbnVsbCE9dGhpcy5tYXhEb21haW5FeHRlbnQoQSkmJiEoQSBpbnN0YW5jZW9mIG0uTGluZWFyKSYmIShBIGluc3RhbmNlb2YgbS5UaW1lKX07di5wcm90b3R5cGUueFNjYWxlcz1mdW5jdGlvbigpe3ZhciBBPVtdO3RoaXMuX3hTY2FsZXMuZm9yRWFjaChmdW5jdGlvbih5KXtBLnB1c2goeSl9KTtyZXR1cm4gQX07di5wcm90b3R5cGUueVNjYWxlcz1mdW5jdGlvbigpe3ZhciBBPVtdO3RoaXMuX3lTY2FsZXMuZm9yRWFjaChmdW5jdGlvbih5KXtBLnB1c2goeSl9KTsKcmV0dXJuIEF9O3YucHJvdG90eXBlLmFkZFhTY2FsZT1mdW5jdGlvbihBKXt0aGlzLl94U2NhbGVzLmFkZChBKX07di5wcm90b3R5cGUucmVtb3ZlWFNjYWxlPWZ1bmN0aW9uKEEpe3RoaXMuX3hTY2FsZXMuZGVsZXRlKEEpO3RoaXMuX21pbkRvbWFpbkV4dGVudHMuZGVsZXRlKEEpO3RoaXMuX21heERvbWFpbkV4dGVudHMuZGVsZXRlKEEpO3RoaXMuX21pbkRvbWFpblZhbHVlcy5kZWxldGUoQSk7dGhpcy5fbWF4RG9tYWluVmFsdWVzLmRlbGV0ZShBKTtyZXR1cm4gdGhpc307di5wcm90b3R5cGUuYWRkWVNjYWxlPWZ1bmN0aW9uKEEpe3RoaXMuX3lTY2FsZXMuYWRkKEEpfTt2LnByb3RvdHlwZS5yZW1vdmVZU2NhbGU9ZnVuY3Rpb24oQSl7dGhpcy5feVNjYWxlcy5kZWxldGUoQSk7dGhpcy5fbWluRG9tYWluRXh0ZW50cy5kZWxldGUoQSk7dGhpcy5fbWF4RG9tYWluRXh0ZW50cy5kZWxldGUoQSk7dGhpcy5fbWluRG9tYWluVmFsdWVzLmRlbGV0ZShBKTt0aGlzLl9tYXhEb21haW5WYWx1ZXMuZGVsZXRlKEEpOwpyZXR1cm4gdGhpc307di5wcm90b3R5cGUubWluRG9tYWluRXh0ZW50PWZ1bmN0aW9uKEEpe3JldHVybiB0aGlzLl9taW5Eb21haW5FeHRlbnRzLmdldChBKX07di5wcm90b3R5cGUubWF4RG9tYWluRXh0ZW50PWZ1bmN0aW9uKEEpe3JldHVybiB0aGlzLl9tYXhEb21haW5FeHRlbnRzLmdldChBKX07di5wcm90b3R5cGUubWluRG9tYWluVmFsdWU9ZnVuY3Rpb24oQSx5KXtpZihudWxsPT15KXJldHVybiB0aGlzLl9taW5Eb21haW5WYWx1ZXMuZ2V0KEEpO3RoaXMuX21pbkRvbWFpblZhbHVlcy5zZXQoQSx5KTtyZXR1cm4gdGhpc307di5wcm90b3R5cGUubWF4RG9tYWluVmFsdWU9ZnVuY3Rpb24oQSx5KXtpZihudWxsPT15KXJldHVybiB0aGlzLl9tYXhEb21haW5WYWx1ZXMuZ2V0KEEpO3RoaXMuX21heERvbWFpblZhbHVlcy5zZXQoQSx5KTtyZXR1cm4gdGhpc307di5wcm90b3R5cGUuc2V0TWluTWF4RG9tYWluVmFsdWVzVG89ZnVuY3Rpb24oQSl7dGhpcy5fbWluRG9tYWluVmFsdWVzLmRlbGV0ZShBKTsKdGhpcy5fbWF4RG9tYWluVmFsdWVzLmRlbGV0ZShBKTt2YXIgeT1BLmdldFRyYW5zZm9ybWF0aW9uRG9tYWluKCkseD15WzFdO3RoaXMubWluRG9tYWluVmFsdWUoQSx5WzBdKTt0aGlzLm1heERvbWFpblZhbHVlKEEseCk7cmV0dXJuIHRoaXN9O3YucHJvdG90eXBlLm9uUGFuRW5kPWZ1bmN0aW9uKEEpe3RoaXMuX3BhbkVuZENhbGxiYWNrcy5hZGQoQSl9O3YucHJvdG90eXBlLm9mZlBhbkVuZD1mdW5jdGlvbihBKXt0aGlzLl9wYW5FbmRDYWxsYmFja3MuZGVsZXRlKEEpO3JldHVybiB0aGlzfTt2LnByb3RvdHlwZS5vblpvb21FbmQ9ZnVuY3Rpb24oQSl7dGhpcy5fem9vbUVuZENhbGxiYWNrcy5hZGQoQSl9O3YucHJvdG90eXBlLm9mZlpvb21FbmQ9ZnVuY3Rpb24oQSl7dGhpcy5fem9vbUVuZENhbGxiYWNrcy5kZWxldGUoQSk7cmV0dXJuIHRoaXN9O3YucHJvdG90eXBlLm9uUGFuWm9vbVVwZGF0ZT1mdW5jdGlvbihBKXt0aGlzLl9wYW5ab29tVXBkYXRlQ2FsbGJhY2tzLmFkZChBKTsKcmV0dXJuIHRoaXN9O3YucHJvdG90eXBlLm9mZlBhblpvb21VcGRhdGU9ZnVuY3Rpb24oQSl7dGhpcy5fcGFuWm9vbVVwZGF0ZUNhbGxiYWNrcy5kZWxldGUoQSk7cmV0dXJuIHRoaXN9O3JldHVybiB2fShjLkludGVyYWN0aW9uKTtmLl9QSVhFTFNfUEVSX0xJTkU9MTIwO2QuUGFuWm9vbT1mfSxmdW5jdGlvbihjLGQsZil7dmFyIGc9dGhpcyYmdGhpcy5fX2V4dGVuZHN8fGZ1bmN0aW9uKG0scCl7ZnVuY3Rpb24gcSgpe3RoaXMuY29uc3RydWN0b3I9bX1mb3IodmFyIHIgaW4gcClwLmhhc093blByb3BlcnR5KHIpJiYobVtyXT1wW3JdKTttLnByb3RvdHlwZT1udWxsPT09cD9PYmplY3QuY3JlYXRlKHApOihxLnByb3RvdHlwZT1wLnByb3RvdHlwZSxuZXcgcSl9LGw9ZigxMyksaz1mKDApO2M9ZnVuY3Rpb24obSl7ZnVuY3Rpb24gcCgpe3ZhciBxPW51bGwhPT1tJiZtLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpcztxLl9vdmVyQ29tcG9uZW50PSExO3EuX3BvaW50ZXJFbnRlckNhbGxiYWNrcz0KbmV3IGsuQ2FsbGJhY2tTZXQ7cS5fcG9pbnRlck1vdmVDYWxsYmFja3M9bmV3IGsuQ2FsbGJhY2tTZXQ7cS5fcG9pbnRlckV4aXRDYWxsYmFja3M9bmV3IGsuQ2FsbGJhY2tTZXQ7cS5fbW91c2VNb3ZlQ2FsbGJhY2s9ZnVuY3Rpb24ocix0KXtyZXR1cm4gcS5faGFuZGxlTW91c2VFdmVudChyLHQpfTtxLl90b3VjaFN0YXJ0Q2FsbGJhY2s9ZnVuY3Rpb24ocix0LHYpe3JldHVybiBxLl9oYW5kbGVUb3VjaEV2ZW50KHRbclswXV0sdil9O3JldHVybiBxfWcocCxtKTtwLnByb3RvdHlwZS5fYW5jaG9yPWZ1bmN0aW9uKHEpe20ucHJvdG90eXBlLl9hbmNob3IuY2FsbCh0aGlzLHEpO3RoaXMuX21vdXNlRGlzcGF0Y2hlcj1sLk1vdXNlLmdldERpc3BhdGNoZXIodGhpcy5fY29tcG9uZW50QXR0YWNoZWRUbyk7dGhpcy5fbW91c2VEaXNwYXRjaGVyLm9uTW91c2VNb3ZlKHRoaXMuX21vdXNlTW92ZUNhbGxiYWNrKTt0aGlzLl90b3VjaERpc3BhdGNoZXI9bC5Ub3VjaC5nZXREaXNwYXRjaGVyKHRoaXMuX2NvbXBvbmVudEF0dGFjaGVkVG8pOwp0aGlzLl90b3VjaERpc3BhdGNoZXIub25Ub3VjaFN0YXJ0KHRoaXMuX3RvdWNoU3RhcnRDYWxsYmFjayl9O3AucHJvdG90eXBlLl91bmFuY2hvcj1mdW5jdGlvbigpe20ucHJvdG90eXBlLl91bmFuY2hvci5jYWxsKHRoaXMpO3RoaXMuX21vdXNlRGlzcGF0Y2hlci5vZmZNb3VzZU1vdmUodGhpcy5fbW91c2VNb3ZlQ2FsbGJhY2spO3RoaXMuX21vdXNlRGlzcGF0Y2hlcj1udWxsO3RoaXMuX3RvdWNoRGlzcGF0Y2hlci5vZmZUb3VjaFN0YXJ0KHRoaXMuX3RvdWNoU3RhcnRDYWxsYmFjayk7dGhpcy5fdG91Y2hEaXNwYXRjaGVyPW51bGx9O3AucHJvdG90eXBlLl9oYW5kbGVNb3VzZUV2ZW50PWZ1bmN0aW9uKHEscil7cj10aGlzLl9tb3VzZURpc3BhdGNoZXIuZXZlbnRJbnNpZGUodGhpcy5fY29tcG9uZW50QXR0YWNoZWRUbyxyKTt0aGlzLl9oYW5kbGVQb2ludGVyRXZlbnQocSxyKX07cC5wcm90b3R5cGUuX2hhbmRsZVRvdWNoRXZlbnQ9ZnVuY3Rpb24ocSxyKXtyPXRoaXMuX3RvdWNoRGlzcGF0Y2hlci5ldmVudEluc2lkZSh0aGlzLl9jb21wb25lbnRBdHRhY2hlZFRvLApyKTt0aGlzLl9oYW5kbGVQb2ludGVyRXZlbnQocSxyKX07cC5wcm90b3R5cGUuX2hhbmRsZVBvaW50ZXJFdmVudD1mdW5jdGlvbihxLHIpe3E9dGhpcy5fdHJhbnNsYXRlVG9Db21wb25lbnRTcGFjZShxKTt2YXIgdD10aGlzLl9pc0luc2lkZUNvbXBvbmVudChxKTt0JiZyPyh0aGlzLl9vdmVyQ29tcG9uZW50fHx0aGlzLl9wb2ludGVyRW50ZXJDYWxsYmFja3MuY2FsbENhbGxiYWNrcyhxKSx0aGlzLl9wb2ludGVyTW92ZUNhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKHEpKTp0aGlzLl9vdmVyQ29tcG9uZW50JiZ0aGlzLl9wb2ludGVyRXhpdENhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKHEpO3RoaXMuX292ZXJDb21wb25lbnQ9dCYmcn07cC5wcm90b3R5cGUub25Qb2ludGVyRW50ZXI9ZnVuY3Rpb24ocSl7dGhpcy5fcG9pbnRlckVudGVyQ2FsbGJhY2tzLmFkZChxKTtyZXR1cm4gdGhpc307cC5wcm90b3R5cGUub2ZmUG9pbnRlckVudGVyPWZ1bmN0aW9uKHEpe3RoaXMuX3BvaW50ZXJFbnRlckNhbGxiYWNrcy5kZWxldGUocSk7CnJldHVybiB0aGlzfTtwLnByb3RvdHlwZS5vblBvaW50ZXJNb3ZlPWZ1bmN0aW9uKHEpe3RoaXMuX3BvaW50ZXJNb3ZlQ2FsbGJhY2tzLmFkZChxKX07cC5wcm90b3R5cGUub2ZmUG9pbnRlck1vdmU9ZnVuY3Rpb24ocSl7dGhpcy5fcG9pbnRlck1vdmVDYWxsYmFja3MuZGVsZXRlKHEpfTtwLnByb3RvdHlwZS5vblBvaW50ZXJFeGl0PWZ1bmN0aW9uKHEpe3RoaXMuX3BvaW50ZXJFeGl0Q2FsbGJhY2tzLmFkZChxKX07cC5wcm90b3R5cGUub2ZmUG9pbnRlckV4aXQ9ZnVuY3Rpb24ocSl7dGhpcy5fcG9pbnRlckV4aXRDYWxsYmFja3MuZGVsZXRlKHEpO3JldHVybiB0aGlzfTtyZXR1cm4gcH0oZigxNSkuSW50ZXJhY3Rpb24pO2QuUG9pbnRlcj1jfSxmdW5jdGlvbihjLGQsZil7dmFyIGc9ZigyMCk7ZC5tZW1UaHVuaz1mdW5jdGlvbigpe2Zvcih2YXIgbD1bXSxrPTA7azxhcmd1bWVudHMubGVuZ3RoO2srKylsW2tdPWFyZ3VtZW50c1trXTt2YXIgbT1sLnNsaWNlKDAsLTEpLHA9Zy5tZW1vaXplKGxbbC5sZW5ndGgtCjFdKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcT10aGlzLHI9bS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuYXBwbHkocSl9KTtyZXR1cm4gcC5hcHBseSh2b2lkIDAscil9fX0sZnVuY3Rpb24oYyxkLGYpe3ZhciBnPWYoNDkpO2QubWVtb2l6ZT1mdW5jdGlvbihsKXtmdW5jdGlvbiBrKCl7Zm9yKHZhciB0PVtdLHY9MDt2PGFyZ3VtZW50cy5sZW5ndGg7disrKXRbdl09YXJndW1lbnRzW3ZdO2lmKHEpcmV0dXJuIHA7dj1nLnNpZ25BcnJheSh0KTt2b2lkIDA9PT1tfHxtLmlzRGlmZmVyZW50KHYpPyhyJiZjb25zb2xlLmxvZygiY2FjaGUgbWlzcyEgY29tcHV0aW5nIiksbT12LHA9bC5hcHBseSh0aGlzLHQpKTpyJiZjb25zb2xlLmxvZygiY2FjaGUgaGl0ISIpO3JldHVybiBwfXZhciBtPXZvaWQgMCxwLHE9ITEscj0hMTtrLmRvTG9ja2VkPWZ1bmN0aW9uKHQpe2lmKHEpdGhyb3cgRXJyb3IoIkxvY2tpbmcgYW4gYWxyZWFkeSBsb2NrZWQgbWVtb2l6ZSBmdW5jdGlvbiEiKTtxPSEwOwp0PXQuYXBwbHkodGhpcyk7cT0hMTtyZXR1cm4gdH07ay5sb2dQZXJmb3JtYW5jZT1mdW5jdGlvbih0KXt2b2lkIDA9PT10JiYodD0hMCk7cj10O3JldHVybiB0aGlzfTtyZXR1cm4ga319LGZ1bmN0aW9uKGMsZCxmKXt2YXIgZz10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8ZnVuY3Rpb24ocSxyKXtmdW5jdGlvbiB0KCl7dGhpcy5jb25zdHJ1Y3Rvcj1xfWZvcih2YXIgdiBpbiByKXIuaGFzT3duUHJvcGVydHkodikmJihxW3ZdPXJbdl0pO3EucHJvdG90eXBlPW51bGw9PT1yP09iamVjdC5jcmVhdGUocik6KHQucHJvdG90eXBlPXIucHJvdG90eXBlLG5ldyB0KX0sbD1mKDMpLGs9ZigwKSxtPWYoMjcpLHA9ZigyKTtjPWZ1bmN0aW9uKHEpe2Z1bmN0aW9uIHIodCl7dm9pZCAwPT09dCYmKHQ9InZlcnRpY2FsIik7dD1xLmNhbGwodGhpcyx0KXx8dGhpczt0Ll9jbHVzdGVyT2Zmc2V0cz1uZXcgay5NYXA7cmV0dXJuIHR9ZyhyLHEpO3IucHJvdG90eXBlLl9nZW5lcmF0ZUF0dHJUb1Byb2plY3Rvcj0KZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7cmV0dXJuIHkucmFuZ2VCYW5kKCl9dmFyIHY9dGhpcyxBPXEucHJvdG90eXBlLl9nZW5lcmF0ZUF0dHJUb1Byb2plY3Rvci5jYWxsKHRoaXMpLHk9dGhpcy5fbWFrZUlubmVyU2NhbGUoKTtBLndpZHRoPXRoaXMuX2lzVmVydGljYWw/dDpBLndpZHRoO0EuaGVpZ2h0PXRoaXMuX2lzVmVydGljYWw/QS5oZWlnaHQ6dDt2YXIgeD1BLngsQz1BLnk7QS54PXRoaXMuX2lzVmVydGljYWw/ZnVuY3Rpb24oRixELEIpe3JldHVybiB4KEYsRCxCKSt2Ll9jbHVzdGVyT2Zmc2V0cy5nZXQoQil9OmZ1bmN0aW9uKEYsRCxCKXtyZXR1cm4geChGLEQsQil9O0EueT10aGlzLl9pc1ZlcnRpY2FsP2Z1bmN0aW9uKEYsRCxCKXtyZXR1cm4gQyhGLEQsQil9OmZ1bmN0aW9uKEYsRCxCKXtyZXR1cm4gQyhGLEQsQikrdi5fY2x1c3Rlck9mZnNldHMuZ2V0KEIpfTtyZXR1cm4gQX07ci5wcm90b3R5cGUuX3VwZGF0ZUNsdXN0ZXJQb3NpdGlvbj1mdW5jdGlvbigpe3ZhciB0PQp0aGlzLHY9dGhpcy5fbWFrZUlubmVyU2NhbGUoKTt0aGlzLmRhdGFzZXRzKCkuZm9yRWFjaChmdW5jdGlvbihBLHkpe3JldHVybiB0Ll9jbHVzdGVyT2Zmc2V0cy5zZXQoQSx2LnNjYWxlKFN0cmluZyh5KSktdi5yYW5nZUJhbmQoKS8yKX0pfTtyLnByb3RvdHlwZS5fbWFrZUlubmVyU2NhbGU9ZnVuY3Rpb24oKXt2YXIgdD1uZXcgbC5DYXRlZ29yeTt0LmRvbWFpbih0aGlzLmRhdGFzZXRzKCkubWFwKGZ1bmN0aW9uKEEseSl7cmV0dXJuIFN0cmluZyh5KX0pKTt2YXIgdj1wLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMuYXR0cihtLkJhci5fQkFSX1RISUNLTkVTU19LRVkpKTt0LnJhbmdlKFswLHYobnVsbCwwLG51bGwpXSk7cmV0dXJuIHR9O3IucHJvdG90eXBlLl9nZXREYXRhVG9EcmF3PWZ1bmN0aW9uKCl7dGhpcy5fdXBkYXRlQ2x1c3RlclBvc2l0aW9uKCk7cmV0dXJuIHEucHJvdG90eXBlLl9nZXREYXRhVG9EcmF3LmNhbGwodGhpcyl9O3JldHVybiByfShtLkJhcik7ZC5DbHVzdGVyZWRCYXI9CmN9LGZ1bmN0aW9uKGMsZCxmKXt2YXIgZz10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8ZnVuY3Rpb24oQyxGKXtmdW5jdGlvbiBEKCl7dGhpcy5jb25zdHJ1Y3Rvcj1DfWZvcih2YXIgQiBpbiBGKUYuaGFzT3duUHJvcGVydHkoQikmJihDW0JdPUZbQl0pO0MucHJvdG90eXBlPW51bGw9PT1GP09iamVjdC5jcmVhdGUoRik6KEQucHJvdG90eXBlPUYucHJvdG90eXBlLG5ldyBEKX0sbD1mKDEpLGs9Zig1KSxtPWYoNykscD1mKDgpLHE9ZigzKSxyPWYoMCksdD1mKDQ0KSx2PWYoNDUpLEE9Zig2KSx5PWYoMzUpLHg9ZigyKTtjPWZ1bmN0aW9uKEMpe2Z1bmN0aW9uIEYoKXt2YXIgRD1DLmNhbGwodGhpcyl8fHRoaXM7RC5fc3RhcnRBbmdsZT0wO0QuX2VuZEFuZ2xlPTIqTWF0aC5QSTtELl9sYWJlbEZvcm1hdHRlcj1wLmlkZW50aXR5KCk7RC5fbGFiZWxzRW5hYmxlZD0hMTtELmlubmVyUmFkaXVzKDApO0Qub3V0ZXJSYWRpdXMoZnVuY3Rpb24oKXt2YXIgQj1ELl9waWVDZW50ZXIoKTtyZXR1cm4gTWF0aC5taW4oTWF0aC5tYXgoRC53aWR0aCgpLQpCLngsQi54KSxNYXRoLm1heChELmhlaWdodCgpLUIueSxCLnkpKX0pO0QuYWRkQ2xhc3MoInBpZS1wbG90Iik7RC5hdHRyKCJmaWxsIixmdW5jdGlvbihCLEcpe3JldHVybiBTdHJpbmcoRyl9LG5ldyBxLkNvbG9yKTtELl9zdHJva2VEcmF3ZXJzPW5ldyByLk1hcDtyZXR1cm4gRH1nKEYsQyk7Ri5wcm90b3R5cGUuX3NldHVwPWZ1bmN0aW9uKCl7dmFyIEQ9dGhpcztDLnByb3RvdHlwZS5fc2V0dXAuY2FsbCh0aGlzKTt0aGlzLl9zdHJva2VEcmF3ZXJzLmZvckVhY2goZnVuY3Rpb24oQil7cmV0dXJuIEIuYXR0YWNoVG8oRC5fcmVuZGVyQXJlYSl9KX07Ri5wcm90b3R5cGUuY29tcHV0ZUxheW91dD1mdW5jdGlvbihELEIsRyl7Qy5wcm90b3R5cGUuY29tcHV0ZUxheW91dC5jYWxsKHRoaXMsRCxCLEcpO0Q9dGhpcy5fcGllQ2VudGVyKCk7dGhpcy5fcmVuZGVyQXJlYS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitELngrIiwiK0QueSsiKSIpO0Q9TWF0aC5taW4oTWF0aC5tYXgodGhpcy53aWR0aCgpLQpELngsRC54KSxNYXRoLm1heCh0aGlzLmhlaWdodCgpLUQueSxELnkpKTtudWxsIT10aGlzLmlubmVyUmFkaXVzKCkuc2NhbGUmJnRoaXMuaW5uZXJSYWRpdXMoKS5zY2FsZS5yYW5nZShbMCxEXSk7bnVsbCE9dGhpcy5vdXRlclJhZGl1cygpLnNjYWxlJiZ0aGlzLm91dGVyUmFkaXVzKCkuc2NhbGUucmFuZ2UoWzAsRF0pO3JldHVybiB0aGlzfTtGLnByb3RvdHlwZS5hZGREYXRhc2V0PWZ1bmN0aW9uKEQpe0MucHJvdG90eXBlLmFkZERhdGFzZXQuY2FsbCh0aGlzLEQpO3JldHVybiB0aGlzfTtGLnByb3RvdHlwZS5fYWRkRGF0YXNldD1mdW5jdGlvbihEKXtpZigxPT09dGhpcy5kYXRhc2V0cygpLmxlbmd0aClyZXR1cm4gci5XaW5kb3cud2FybigiT25seSBvbmUgZGF0YXNldCBpcyBzdXBwb3J0ZWQgaW4gUGllIHBsb3RzIiksdGhpczt0aGlzLl91cGRhdGVQaWVBbmdsZXMoKTt2YXIgQj1uZXcgdi5BcmNPdXRsaW5lU1ZHRHJhd2VyO3RoaXMuX2lzU2V0dXAmJkIuYXR0YWNoVG8odGhpcy5fcmVuZGVyQXJlYSk7CnRoaXMuX3N0cm9rZURyYXdlcnMuc2V0KEQsQik7Qy5wcm90b3R5cGUuX2FkZERhdGFzZXQuY2FsbCh0aGlzLEQpO3JldHVybiB0aGlzfTtGLnByb3RvdHlwZS5yZW1vdmVEYXRhc2V0PWZ1bmN0aW9uKEQpe0MucHJvdG90eXBlLnJlbW92ZURhdGFzZXQuY2FsbCh0aGlzLEQpfTtGLnByb3RvdHlwZS5fcmVtb3ZlRGF0YXNldE5vZGVzPWZ1bmN0aW9uKEQpe0MucHJvdG90eXBlLl9yZW1vdmVEYXRhc2V0Tm9kZXMuY2FsbCh0aGlzLEQpO3RoaXMuX3N0cm9rZURyYXdlcnMuZ2V0KEQpLnJlbW92ZSgpfTtGLnByb3RvdHlwZS5fcmVtb3ZlRGF0YXNldD1mdW5jdGlvbihEKXtDLnByb3RvdHlwZS5fcmVtb3ZlRGF0YXNldC5jYWxsKHRoaXMsRCk7dGhpcy5fc3RhcnRBbmdsZXM9W107dGhpcy5fZW5kQW5nbGVzPVtdO3JldHVybiB0aGlzfTtGLnByb3RvdHlwZS5zZWxlY3Rpb25zPWZ1bmN0aW9uKEQpe3ZhciBCPXRoaXM7dm9pZCAwPT09RCYmKEQ9dGhpcy5kYXRhc2V0cygpKTt2YXIgRz1DLnByb3RvdHlwZS5zZWxlY3Rpb25zLmNhbGwodGhpcywKRCkubm9kZXMoKTtELmZvckVhY2goZnVuY3Rpb24oSyl7Sz1CLl9zdHJva2VEcmF3ZXJzLmdldChLKTtudWxsIT1LJiZHLnB1c2guYXBwbHkoRyxLLmdldFZpc3VhbFByaW1pdGl2ZXMoKSl9KTtyZXR1cm4gbC5zZWxlY3RBbGwoRyl9O0YucHJvdG90eXBlLl9vbkRhdGFzZXRVcGRhdGU9ZnVuY3Rpb24oKXtDLnByb3RvdHlwZS5fb25EYXRhc2V0VXBkYXRlLmNhbGwodGhpcyk7dGhpcy5fdXBkYXRlUGllQW5nbGVzKCk7dGhpcy5yZW5kZXIoKX07Ri5wcm90b3R5cGUuX2NyZWF0ZURyYXdlcj1mdW5jdGlvbigpe3JldHVybiBuZXcgQS5Qcm94eURyYXdlcihmdW5jdGlvbigpe3JldHVybiBuZXcgdC5BcmNTVkdEcmF3ZXJ9LGZ1bmN0aW9uKCl7eS53YXJuKCJjYW52YXMgcmVuZGVyZXIgaXMgbm90IHN1cHBvcnRlZCBvbiBQaWUgUGxvdCEiKTtyZXR1cm4gbnVsbH0pfTtGLnByb3RvdHlwZS5lbnRpdGllcz1mdW5jdGlvbihEKXt2YXIgQj10aGlzO3ZvaWQgMD09PUQmJihEPXRoaXMuZGF0YXNldHMoKSk7CnJldHVybiBDLnByb3RvdHlwZS5lbnRpdGllcy5jYWxsKHRoaXMsRCkubWFwKGZ1bmN0aW9uKEcpe0cucG9zaXRpb24ueCs9Qi53aWR0aCgpLzI7Ry5wb3NpdGlvbi55Kz1CLmhlaWdodCgpLzI7dmFyIEs9bC5zZWxlY3QoQi5fc3Ryb2tlRHJhd2Vycy5nZXQoRy5kYXRhc2V0KS5nZXRWaXN1YWxQcmltaXRpdmVBdEluZGV4KEcuaW5kZXgpKTtHLnN0cm9rZVNlbGVjdGlvbj1LO3JldHVybiBHfSl9O0YucHJvdG90eXBlLnNlY3RvclZhbHVlPWZ1bmN0aW9uKEQpe2lmKG51bGw9PUQpcmV0dXJuIHRoaXMuX3Byb3BlcnR5QmluZGluZ3MuZ2V0KEYuX1NFQ1RPUl9WQUxVRV9LRVkpO3RoaXMuX2JpbmRQcm9wZXJ0eShGLl9TRUNUT1JfVkFMVUVfS0VZLEQsdm9pZCAwKTt0aGlzLl91cGRhdGVQaWVBbmdsZXMoKTt0aGlzLnJlbmRlcigpO3JldHVybiB0aGlzfTtGLnByb3RvdHlwZS5pbm5lclJhZGl1cz1mdW5jdGlvbihELEIpe2lmKG51bGw9PUQpcmV0dXJuIHRoaXMuX3Byb3BlcnR5QmluZGluZ3MuZ2V0KEYuX0lOTkVSX1JBRElVU19LRVkpOwp0aGlzLl9iaW5kUHJvcGVydHkoRi5fSU5ORVJfUkFESVVTX0tFWSxELEIpO3RoaXMucmVuZGVyKCk7cmV0dXJuIHRoaXN9O0YucHJvdG90eXBlLm91dGVyUmFkaXVzPWZ1bmN0aW9uKEQsQil7aWYobnVsbD09RClyZXR1cm4gdGhpcy5fcHJvcGVydHlCaW5kaW5ncy5nZXQoRi5fT1VURVJfUkFESVVTX0tFWSk7dGhpcy5fYmluZFByb3BlcnR5KEYuX09VVEVSX1JBRElVU19LRVksRCxCKTt0aGlzLnJlbmRlcigpO3JldHVybiB0aGlzfTtGLnByb3RvdHlwZS5zdGFydEFuZ2xlPWZ1bmN0aW9uKEQpe2lmKG51bGw9PUQpcmV0dXJuIHRoaXMuX3N0YXJ0QW5nbGU7dGhpcy5fc3RhcnRBbmdsZT1EO3RoaXMuX3VwZGF0ZVBpZUFuZ2xlcygpO3RoaXMucmVuZGVyKCk7cmV0dXJuIHRoaXN9O0YucHJvdG90eXBlLmVuZEFuZ2xlPWZ1bmN0aW9uKEQpe2lmKG51bGw9PUQpcmV0dXJuIHRoaXMuX2VuZEFuZ2xlO3RoaXMuX2VuZEFuZ2xlPUQ7dGhpcy5fdXBkYXRlUGllQW5nbGVzKCk7dGhpcy5yZW5kZXIoKTsKcmV0dXJuIHRoaXN9O0YucHJvdG90eXBlLmxhYmVsc0VuYWJsZWQ9ZnVuY3Rpb24oRCl7aWYobnVsbD09RClyZXR1cm4gdGhpcy5fbGFiZWxzRW5hYmxlZDt0aGlzLl9sYWJlbHNFbmFibGVkPUQ7dGhpcy5yZW5kZXIoKTtyZXR1cm4gdGhpc307Ri5wcm90b3R5cGUubGFiZWxGb3JtYXR0ZXI9ZnVuY3Rpb24oRCl7aWYobnVsbD09RClyZXR1cm4gdGhpcy5fbGFiZWxGb3JtYXR0ZXI7dGhpcy5fbGFiZWxGb3JtYXR0ZXI9RDt0aGlzLnJlbmRlcigpO3JldHVybiB0aGlzfTtGLnByb3RvdHlwZS5lbnRpdGllc0F0PWZ1bmN0aW9uKEQpe3ZhciBCPXRoaXMud2lkdGgoKS8yLEc9dGhpcy5oZWlnaHQoKS8yO0Q9dGhpcy5fc2xpY2VJbmRleEZvclBvaW50KHt4OkQueC1CLHk6RC55LUd9KTtyZXR1cm4gbnVsbD09RD9bXTpbdGhpcy5lbnRpdGllcygpW0RdXX07Ri5wcm90b3R5cGUuX3Byb3BlcnR5UHJvamVjdG9ycz1mdW5jdGlvbigpe3ZhciBEPXRoaXMsQj1DLnByb3RvdHlwZS5fcHJvcGVydHlQcm9qZWN0b3JzLmNhbGwodGhpcyksCkc9eC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLmlubmVyUmFkaXVzKCkpLEs9eC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLm91dGVyUmFkaXVzKCkpO0IuZD1mdW5jdGlvbihMLEosUCl7cmV0dXJuIGwuYXJjKCkuaW5uZXJSYWRpdXMoRyhMLEosUCkpLm91dGVyUmFkaXVzKEsoTCxKLFApKS5zdGFydEFuZ2xlKEQuX3N0YXJ0QW5nbGVzW0pdKS5lbmRBbmdsZShELl9lbmRBbmdsZXNbSl0pKEwsSil9O3JldHVybiBCfTtGLnByb3RvdHlwZS5fdXBkYXRlUGllQW5nbGVzPWZ1bmN0aW9uKCl7aWYobnVsbCE9dGhpcy5zZWN0b3JWYWx1ZSgpJiYwIT09dGhpcy5kYXRhc2V0cygpLmxlbmd0aCl7dmFyIEQ9eC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnNlY3RvclZhbHVlKCkpLEI9dGhpcy5kYXRhc2V0cygpWzBdLEc9dGhpcy5fZ2V0RGF0YVRvRHJhdygpLmdldChCKTtHPWwucGllKCkuc29ydChudWxsKS5zdGFydEFuZ2xlKHRoaXMuX3N0YXJ0QW5nbGUpLmVuZEFuZ2xlKHRoaXMuX2VuZEFuZ2xlKS52YWx1ZShmdW5jdGlvbihLLApMKXtyZXR1cm4gRChLLEwsQil9KShHKTt0aGlzLl9zdGFydEFuZ2xlcz1HLm1hcChmdW5jdGlvbihLKXtyZXR1cm4gSy5zdGFydEFuZ2xlfSk7dGhpcy5fZW5kQW5nbGVzPUcubWFwKGZ1bmN0aW9uKEspe3JldHVybiBLLmVuZEFuZ2xlfSl9fTtGLnByb3RvdHlwZS5fcGllQ2VudGVyPWZ1bmN0aW9uKCl7dmFyIEQ9dGhpcy5fc3RhcnRBbmdsZTx0aGlzLl9lbmRBbmdsZT90aGlzLl9zdGFydEFuZ2xlOnRoaXMuX2VuZEFuZ2xlLEI9dGhpcy5fc3RhcnRBbmdsZTx0aGlzLl9lbmRBbmdsZT90aGlzLl9lbmRBbmdsZTp0aGlzLl9zdGFydEFuZ2xlLEc9TWF0aC5zaW4oRCk7RD1NYXRoLmNvcyhEKTt2YXIgSz1NYXRoLnNpbihCKTtCPU1hdGguY29zKEIpO3ZhciBMO2lmKDA8PUcmJjA8PUspaWYoMDw9RCYmMDw9Qil7dmFyIEo9RDt2YXIgUD1MPTA7dmFyIFM9S31lbHNlIDA+RCYmMD5CPyhKPTAsTD0tQixQPTAsUz1HKTowPD1EJiYwPkI/KEo9RCxMPS1CLFA9MCxTPUcpOjA+RCYmMDw9QiYmCihQPUw9Sj0xLFM9TWF0aC5tYXgoRyxLKSk7ZWxzZSAwPD1HJiYwPks/MDw9RCYmMDw9Qj8oSj1NYXRoLm1heChELEIpLFM9UD1MPTEpOjA+RCYmMD5CPyhKPTAsTD0xLFA9LUssUz1HKTowPD1EJiYwPkI/KEo9RCxMPTEsUD0tSyxTPTEpOjA+RCYmMDw9QiYmKEo9QixQPUw9MSxTPUcpOjA+RyYmMDw9Sz8wPD1EJiYwPD1CPyhKPTEsTD0wLFA9LUcsUz1LKTowPkQmJjA+Qj8oSj0xLEw9TWF0aC5tYXgoLUQsLUIpLFM9UD0xKTowPD1EJiYwPkI/KEo9MSxMPS1CLFA9LUcsUz0xKTowPkQmJjA8PUImJihKPTEsTD0tRCxQPTEsUz1LKTowPkcmJjA+SyYmKDA8PUQmJjA8PUI/KEo9QixMPTAsUD0tRyxTPTApOjA+RCYmMD5CPyhKPTAsTD0tRCxQPS1LLFM9MCk6MDw9RCYmMD5CPyhMPUo9MSxQPU1hdGgubWF4KEQsLUIpLFM9MSk6MD5EJiYwPD1CJiYoSj1CLEw9LUQsUD0xLFM9MCkpO3JldHVybnt4OjA9PVArUz8wOlAvKFArUykqdGhpcy53aWR0aCgpLHk6MD09SitMPzA6Si8oSitMKSp0aGlzLmhlaWdodCgpfX07CkYucHJvdG90eXBlLl9nZXREYXRhVG9EcmF3PWZ1bmN0aW9uKCl7dmFyIEQ9Qy5wcm90b3R5cGUuX2dldERhdGFUb0RyYXcuY2FsbCh0aGlzKTtpZigwPT09dGhpcy5kYXRhc2V0cygpLmxlbmd0aClyZXR1cm4gRDt2YXIgQj14LlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMuc2VjdG9yVmFsdWUoKSksRz10aGlzLmRhdGFzZXRzKClbMF0sSz1ELmdldChHKS5maWx0ZXIoZnVuY3Rpb24oTCxKKXtyZXR1cm4gRi5faXNWYWxpZERhdGEoQihMLEosRykpfSk7RC5zZXQoRyxLKTtyZXR1cm4gRH07Ri5faXNWYWxpZERhdGE9ZnVuY3Rpb24oRCl7cmV0dXJuIHIuTWF0aC5pc1ZhbGlkTnVtYmVyKEQpJiYwPD1EfTtGLnByb3RvdHlwZS5fcGl4ZWxQb2ludD1mdW5jdGlvbihELEIsRyl7dmFyIEs9eC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnNlY3RvclZhbHVlKCkpO2lmKCFGLl9pc1ZhbGlkRGF0YShLKEQsQixHKSkpcmV0dXJue3g6TmFOLHk6TmFOfTt2YXIgTD14LlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMuaW5uZXJSYWRpdXMoKSkoRCwKQixHKTtEPXguUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy5vdXRlclJhZGl1cygpKShELEIsRyk7TD0oTCtEKS8yO0Q9bC5waWUoKS5zb3J0KG51bGwpLnZhbHVlKGZ1bmN0aW9uKEosUCl7Sj1LKEosUCxHKTtyZXR1cm4gRi5faXNWYWxpZERhdGEoSik/SjowfSkuc3RhcnRBbmdsZSh0aGlzLl9zdGFydEFuZ2xlKS5lbmRBbmdsZSh0aGlzLl9lbmRBbmdsZSkoRy5kYXRhKCkpO0I9KERbQl0uc3RhcnRBbmdsZStEW0JdLmVuZEFuZ2xlKS8yO3JldHVybnt4OkwqTWF0aC5zaW4oQikseTotTCpNYXRoLmNvcyhCKX19O0YucHJvdG90eXBlLl9hZGRpdGlvbmFsUGFpbnQ9ZnVuY3Rpb24oRCl7dmFyIEI9dGhpczt0aGlzLl9yZW5kZXJBcmVhLnNlbGVjdCgiLmxhYmVsLWFyZWEiKS5yZW1vdmUoKTt0aGlzLl9sYWJlbHNFbmFibGVkJiZyLldpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cmV0dXJuIEIuX2RyYXdMYWJlbHMoKX0sRCk7dmFyIEc9dGhpcy5fZ2VuZXJhdGVTdHJva2VEcmF3U3RlcHMoKSwKSz10aGlzLl9nZXREYXRhVG9EcmF3KCk7dGhpcy5kYXRhc2V0cygpLmZvckVhY2goZnVuY3Rpb24oTCl7dmFyIEo9eC5QbG90LmFwcGx5RHJhd1N0ZXBzKEcsTCk7Qi5fc3Ryb2tlRHJhd2Vycy5nZXQoTCkuZHJhdyhLLmdldChMKSxKKX0pfTtGLnByb3RvdHlwZS5fZ2VuZXJhdGVTdHJva2VEcmF3U3RlcHM9ZnVuY3Rpb24oKXtyZXR1cm5be2F0dHJUb1Byb2plY3Rvcjp0aGlzLl9nZXRBdHRyVG9Qcm9qZWN0b3IoKSxhbmltYXRvcjpuZXcgbS5OdWxsfV19O0YucHJvdG90eXBlLl9zbGljZUluZGV4Rm9yUG9pbnQ9ZnVuY3Rpb24oRCl7dmFyIEI9TWF0aC5zcXJ0KE1hdGgucG93KEQueCwyKStNYXRoLnBvdyhELnksMikpLEc9TWF0aC5hY29zKC1ELnkvQik7MD5ELngmJihHPTIqTWF0aC5QSS1HKTtmb3IoRD0wO0Q8dGhpcy5fc3RhcnRBbmdsZXMubGVuZ3RoO0QrKylpZih0aGlzLl9zdGFydEFuZ2xlc1tEXTxHJiZ0aGlzLl9lbmRBbmdsZXNbRF0+Ryl7dmFyIEs9RDticmVha31pZih2b2lkIDAhPT0KSyl7RD10aGlzLmRhdGFzZXRzKClbMF07dmFyIEw9RC5kYXRhKClbS107Rz10aGlzLmlubmVyUmFkaXVzKCkuYWNjZXNzb3IoTCxLLEQpO0Q9dGhpcy5vdXRlclJhZGl1cygpLmFjY2Vzc29yKEwsSyxEKTtpZihCPkcmJkI8RClyZXR1cm4gS31yZXR1cm4gbnVsbH07Ri5wcm90b3R5cGUuX2RyYXdMYWJlbHM9ZnVuY3Rpb24oKXt2YXIgRD10aGlzLEI9dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCksRz10aGlzLl9yZW5kZXJBcmVhLmFwcGVuZCgiZyIpLmNsYXNzZWQoImxhYmVsLWFyZWEiLCEwKSxLPW5ldyBrLlN2Z0NvbnRleHQoRy5ub2RlKCkpLEw9bmV3IGsuQ2FjaGVNZWFzdXJlcihLKSxKPW5ldyBrLldyaXRlcihMLEspLFA9dGhpcy5kYXRhc2V0cygpWzBdO3RoaXMuX2dldERhdGFUb0RyYXcoKS5nZXQoUCkuZm9yRWFjaChmdW5jdGlvbihTLE4pe3ZhciBUPUQuc2VjdG9yVmFsdWUoKS5hY2Nlc3NvcihTLE4sUCk7aWYoci5NYXRoLmlzVmFsaWROdW1iZXIoVCkpe1Q9RC5fbGFiZWxGb3JtYXR0ZXIoVCwKUyxOLFApO3ZhciBZPUwubWVhc3VyZShUKSxhYT0oRC5fZW5kQW5nbGVzW05dK0QuX3N0YXJ0QW5nbGVzW05dKS8yLGhhPUQub3V0ZXJSYWRpdXMoKS5hY2Nlc3NvcihTLE4sUCk7RC5vdXRlclJhZGl1cygpLnNjYWxlJiYoaGE9RC5vdXRlclJhZGl1cygpLnNjYWxlLnNjYWxlKGhhKSk7dmFyIFg9RC5pbm5lclJhZGl1cygpLmFjY2Vzc29yKFMsTixQKTtELmlubmVyUmFkaXVzKCkuc2NhbGUmJihYPUQuaW5uZXJSYWRpdXMoKS5zY2FsZS5zY2FsZShYKSk7WD0oaGErWCkvMjtoYT1NYXRoLnNpbihhYSkqWC1ZLndpZHRoLzI7WD0tTWF0aC5jb3MoYWEpKlgtWS5oZWlnaHQvMjt2YXIgY2E9W3t4OmhhLHk6WH0se3g6aGEseTpYK1kuaGVpZ2h0fSx7eDpoYStZLndpZHRoLHk6WH0se3g6aGErWS53aWR0aCx5OlgrWS5oZWlnaHR9XTsoYWE9Y2EuZXZlcnkoZnVuY3Rpb24oZWEpe3JldHVybiBNYXRoLmFicyhlYS54KTw9RC53aWR0aCgpLzImJk1hdGguYWJzKGVhLnkpPD1ELmhlaWdodCgpLwoyfSkpJiYoYWE9Y2EubWFwKGZ1bmN0aW9uKGVhKXtyZXR1cm4gRC5fc2xpY2VJbmRleEZvclBvaW50KGVhKX0pLmV2ZXJ5KGZ1bmN0aW9uKGVhKXtyZXR1cm4gZWE9PT1OfSkpO1M9Qi5maWxsKFMsTixQKTtTPTEuNipyLkNvbG9yLmNvbnRyYXN0KCJ3aGl0ZSIsUyk8ci5Db2xvci5jb250cmFzdCgiYmxhY2siLFMpO2hhPUcuYXBwZW5kKCJnIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIraGErIiwiK1grIikiKTtoYS5jbGFzc2VkKFM/ImRhcmstbGFiZWwiOiJsaWdodC1sYWJlbCIsITApO2hhLnN0eWxlKCJ2aXNpYmlsaXR5IixhYT8iaW5oZXJpdCI6ImhpZGRlbiIpO0oud3JpdGUoVCxZLndpZHRoLFkuaGVpZ2h0LHt4QWxpZ246ImNlbnRlciIseUFsaWduOiJjZW50ZXIifSxoYS5ub2RlKCkpfX0pfTtyZXR1cm4gRn0oeC5QbG90KTtjLl9JTk5FUl9SQURJVVNfS0VZPSJpbm5lci1yYWRpdXMiO2MuX09VVEVSX1JBRElVU19LRVk9Im91dGVyLXJhZGl1cyI7Yy5fU0VDVE9SX1ZBTFVFX0tFWT0KInNlY3Rvci12YWx1ZSI7ZC5QaWU9Y30sZnVuY3Rpb24oYyxkLGYpe3ZhciBnPXRoaXMmJnRoaXMuX19leHRlbmRzfHxmdW5jdGlvbih5LHgpe2Z1bmN0aW9uIEMoKXt0aGlzLmNvbnN0cnVjdG9yPXl9Zm9yKHZhciBGIGluIHgpeC5oYXNPd25Qcm9wZXJ0eShGKSYmKHlbRl09eFtGXSk7eS5wcm90b3R5cGU9bnVsbD09PXg/T2JqZWN0LmNyZWF0ZSh4KTooQy5wcm90b3R5cGU9eC5wcm90b3R5cGUsbmV3IEMpfSxsPWYoMSksaz1mKDUpLG09Zig3KSxwPWYoMTQpLHE9Zig2KSxyPWYoMzQpLHQ9ZigzKSx2PWYoMCksQT1mKDIpO2M9ZnVuY3Rpb24oeSl7ZnVuY3Rpb24geCgpe3ZhciBDPXkuY2FsbCh0aGlzKXx8dGhpcztDLl9sYWJlbHNFbmFibGVkPSExO0MuX2xhYmVsPW51bGw7Qy5hbmltYXRvcigicmVjdGFuZ2xlcyIsbmV3IG0uTnVsbCk7Qy5hZGRDbGFzcygicmVjdGFuZ2xlLXBsb3QiKTtDLmF0dHIoImZpbGwiLChuZXcgdC5Db2xvcikucmFuZ2UoKVswXSk7cmV0dXJuIEN9Zyh4LAp5KTt4LnByb3RvdHlwZS5fY3JlYXRlRHJhd2VyPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBxLlByb3h5RHJhd2VyKGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyByLlJlY3RhbmdsZVNWR0RyYXdlcn0sZnVuY3Rpb24oQyl7cmV0dXJuIG5ldyBwLlJlY3RhbmdsZUNhbnZhc0RyYXdlcihDKX0pfTt4LnByb3RvdHlwZS5fZ2VuZXJhdGVBdHRyVG9Qcm9qZWN0b3I9ZnVuY3Rpb24oKXt2YXIgQz10aGlzLEY9eS5wcm90b3R5cGUuX2dlbmVyYXRlQXR0clRvUHJvamVjdG9yLmNhbGwodGhpcyksRD1BLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueCgpKSxCPUZbeC5fWDJfS0VZXSxHPUEuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy55KCkpLEs9Rlt4Ll9ZMl9LRVldLEw9dGhpcy54KCkuc2NhbGUsSj10aGlzLnkoKS5zY2FsZTtudWxsIT1CPyhGLndpZHRoPWZ1bmN0aW9uKFAsUyxOKXtyZXR1cm4gTWF0aC5hYnMoQihQLFMsTiktRChQLFMsTikpfSxGLng9ZnVuY3Rpb24oUCxTLE4pe3JldHVybiBNYXRoLm1pbihCKFAsClMsTiksRChQLFMsTikpfSk6KEYud2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4gQy5fcmVjdGFuZ2xlV2lkdGgoTCl9LEYueD1mdW5jdGlvbihQLFMsTil7cmV0dXJuIEQoUCxTLE4pLS41KkYud2lkdGgoUCxTLE4pfSk7bnVsbCE9Sz8oRi5oZWlnaHQ9ZnVuY3Rpb24oUCxTLE4pe3JldHVybiBNYXRoLmFicyhLKFAsUyxOKS1HKFAsUyxOKSl9LEYueT1mdW5jdGlvbihQLFMsTil7cmV0dXJuIE1hdGgubWF4KEsoUCxTLE4pLEcoUCxTLE4pKS1GLmhlaWdodChQLFMsTil9KTooRi5oZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gQy5fcmVjdGFuZ2xlV2lkdGgoSil9LEYueT1mdW5jdGlvbihQLFMsTil7cmV0dXJuIEcoUCxTLE4pLS41KkYuaGVpZ2h0KFAsUyxOKX0pO2RlbGV0ZSBGW3guX1gyX0tFWV07ZGVsZXRlIEZbeC5fWTJfS0VZXTtyZXR1cm4gRn07eC5wcm90b3R5cGUuX2dlbmVyYXRlRHJhd1N0ZXBzPWZ1bmN0aW9uKCl7cmV0dXJuW3thdHRyVG9Qcm9qZWN0b3I6dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCksCmFuaW1hdG9yOnRoaXMuX2dldEFuaW1hdG9yKCJyZWN0YW5nbGVzIil9XX07eC5wcm90b3R5cGUuX2ZpbHRlckZvclByb3BlcnR5PWZ1bmN0aW9uKEMpe3JldHVybiJ4MiI9PT1DP3kucHJvdG90eXBlLl9maWx0ZXJGb3JQcm9wZXJ0eS5jYWxsKHRoaXMsIngiKToieTIiPT09Qz95LnByb3RvdHlwZS5fZmlsdGVyRm9yUHJvcGVydHkuY2FsbCh0aGlzLCJ5Iik6eS5wcm90b3R5cGUuX2ZpbHRlckZvclByb3BlcnR5LmNhbGwodGhpcyxDKX07eC5wcm90b3R5cGUueD1mdW5jdGlvbihDLEYsRCl7aWYobnVsbD09QylyZXR1cm4geS5wcm90b3R5cGUueC5jYWxsKHRoaXMpO251bGw9PUY/eS5wcm90b3R5cGUueC5jYWxsKHRoaXMsQyk6eS5wcm90b3R5cGUueC5jYWxsKHRoaXMsQyxGLEQpO251bGwhPUYmJihEPShDPXRoaXMueDIoKSkmJkMuYWNjZXNzb3IsbnVsbCE9RCYmdGhpcy5fYmluZFByb3BlcnR5KHguX1gyX0tFWSxELEYsQy5wb3N0U2NhbGUpKTtGIGluc3RhbmNlb2YgdC5DYXRlZ29yeSYmCkYuaW5uZXJQYWRkaW5nKDApLm91dGVyUGFkZGluZygwKTtyZXR1cm4gdGhpc307eC5wcm90b3R5cGUueDI9ZnVuY3Rpb24oQyl7aWYobnVsbD09QylyZXR1cm4gdGhpcy5fcHJvcGVydHlCaW5kaW5ncy5nZXQoeC5fWDJfS0VZKTt2YXIgRj10aGlzLngoKTt0aGlzLl9iaW5kUHJvcGVydHkoeC5fWDJfS0VZLEMsRiYmRi5zY2FsZSx2b2lkIDApO3RoaXMucmVuZGVyKCk7cmV0dXJuIHRoaXN9O3gucHJvdG90eXBlLnk9ZnVuY3Rpb24oQyxGLEQpe2lmKG51bGw9PUMpcmV0dXJuIHkucHJvdG90eXBlLnkuY2FsbCh0aGlzKTtudWxsPT1GP3kucHJvdG90eXBlLnkuY2FsbCh0aGlzLEMpOnkucHJvdG90eXBlLnkuY2FsbCh0aGlzLEMsRixEKTtudWxsIT1GJiYoRD0oQz10aGlzLnkyKCkpJiZDLmFjY2Vzc29yLG51bGwhPUQmJnRoaXMuX2JpbmRQcm9wZXJ0eSh4Ll9ZMl9LRVksRCxGLEMucG9zdFNjYWxlKSk7RiBpbnN0YW5jZW9mIHQuQ2F0ZWdvcnkmJkYuaW5uZXJQYWRkaW5nKDApLm91dGVyUGFkZGluZygwKTsKcmV0dXJuIHRoaXN9O3gucHJvdG90eXBlLnkyPWZ1bmN0aW9uKEMpe2lmKG51bGw9PUMpcmV0dXJuIHRoaXMuX3Byb3BlcnR5QmluZGluZ3MuZ2V0KHguX1kyX0tFWSk7dmFyIEY9dGhpcy55KCk7dGhpcy5fYmluZFByb3BlcnR5KHguX1kyX0tFWSxDLEYmJkYuc2NhbGUsdm9pZCAwKTt0aGlzLnJlbmRlcigpO3JldHVybiB0aGlzfTt4LnByb3RvdHlwZS5lbnRpdGllc0F0PWZ1bmN0aW9uKEMpe3ZhciBGPXRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpO3JldHVybiB0aGlzLmVudGl0aWVzKCkuZmlsdGVyKGZ1bmN0aW9uKEQpe3ZhciBCPUQuZGF0dW0sRz1ELmluZGV4LEs9RC5kYXRhc2V0O0Q9Ri54KEIsRyxLKTt2YXIgTD1GLnkoQixHLEspLEo9Ri53aWR0aChCLEcsSyk7Qj1GLmhlaWdodChCLEcsSyk7cmV0dXJuIEQ8PUMueCYmQy54PD1EK0omJkw8PUMueSYmQy55PD1MK0J9KX07eC5wcm90b3R5cGUuX2VudGl0eUJvdW5kcz1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5fZW50aXR5QkJveChDLmRhdHVtLApDLmluZGV4LEMuZGF0YXNldCx0aGlzLl9nZXRBdHRyVG9Qcm9qZWN0b3IoKSl9O3gucHJvdG90eXBlLl9lbnRpdHlCQm94PWZ1bmN0aW9uKEMsRixELEIpe3JldHVybnt4OkIueChDLEYsRCkseTpCLnkoQyxGLEQpLHdpZHRoOkIud2lkdGgoQyxGLEQpLGhlaWdodDpCLmhlaWdodChDLEYsRCl9fTt4LnByb3RvdHlwZS5sYWJlbD1mdW5jdGlvbihDKXtpZihudWxsPT1DKXJldHVybiB0aGlzLl9sYWJlbDt0aGlzLl9sYWJlbD1DO3RoaXMucmVuZGVyKCk7cmV0dXJuIHRoaXN9O3gucHJvdG90eXBlLmxhYmVsc0VuYWJsZWQ9ZnVuY3Rpb24oQyl7aWYobnVsbD09QylyZXR1cm4gdGhpcy5fbGFiZWxzRW5hYmxlZDt0aGlzLl9sYWJlbHNFbmFibGVkPUM7dGhpcy5yZW5kZXIoKTtyZXR1cm4gdGhpc307eC5wcm90b3R5cGUuX3Byb3BlcnR5UHJvamVjdG9ycz1mdW5jdGlvbigpe3ZhciBDPXkucHJvdG90eXBlLl9wcm9wZXJ0eVByb2plY3RvcnMuY2FsbCh0aGlzKTtudWxsIT10aGlzLngyKCkmJgooQy54Mj1BLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueDIoKSkpO251bGwhPXRoaXMueTIoKSYmKEMueTI9QS5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkyKCkpKTtyZXR1cm4gQ307eC5wcm90b3R5cGUuX3BpeGVsUG9pbnQ9ZnVuY3Rpb24oQyxGLEQpe3ZhciBCPXRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpLEc9Qi54KEMsRixEKSxLPUIueShDLEYsRCksTD1CLndpZHRoKEMsRixEKTtDPUIuaGVpZ2h0KEMsRixEKTtyZXR1cm57eDpHK0wvMix5OksrQy8yfX07eC5wcm90b3R5cGUuX3JlY3RhbmdsZVdpZHRoPWZ1bmN0aW9uKEMpe2lmKEMgaW5zdGFuY2VvZiB0LkNhdGVnb3J5KXJldHVybiBDLnJhbmdlQmFuZCgpO3ZhciBGPUM9PT10aGlzLngoKS5zY2FsZT90aGlzLngoKS5hY2Nlc3Nvcjp0aGlzLnkoKS5hY2Nlc3NvcixEPWwuc2V0KHYuQXJyYXkuZmxhdHRlbih0aGlzLmRhdGFzZXRzKCkubWFwKGZ1bmN0aW9uKEspe3JldHVybiBLLmRhdGEoKS5tYXAoZnVuY3Rpb24oTCwKSil7cmV0dXJuIEYoTCxKLEspLnZhbHVlT2YoKX0pfSkpKS52YWx1ZXMoKS5tYXAoZnVuY3Rpb24oSyl7cmV0dXJuK0t9KSxCPXYuTWF0aC5taW4oRCwwKTtEPXYuTWF0aC5tYXgoRCwwKTt2YXIgRz1DLnNjYWxlKEIpO3JldHVybihDLnNjYWxlKEQpLUcpL01hdGguYWJzKEQtQil9O3gucHJvdG90eXBlLl9nZXREYXRhVG9EcmF3PWZ1bmN0aW9uKCl7dmFyIEM9bmV3IHYuTWFwLEY9dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCk7dGhpcy5kYXRhc2V0cygpLmZvckVhY2goZnVuY3Rpb24oRCl7dmFyIEI9RC5kYXRhKCkubWFwKGZ1bmN0aW9uKEcsSyl7cmV0dXJuIHYuTWF0aC5pc1ZhbGlkTnVtYmVyKEYueChHLEssRCkpJiZ2Lk1hdGguaXNWYWxpZE51bWJlcihGLnkoRyxLLEQpKSYmdi5NYXRoLmlzVmFsaWROdW1iZXIoRi53aWR0aChHLEssRCkpJiZ2Lk1hdGguaXNWYWxpZE51bWJlcihGLmhlaWdodChHLEssRCkpP0c6bnVsbH0pO0Muc2V0KEQsQil9KTtyZXR1cm4gQ307eC5wcm90b3R5cGUuX2FkZGl0aW9uYWxQYWludD0KZnVuY3Rpb24oQyl7dmFyIEY9dGhpczt0aGlzLl9yZW5kZXJBcmVhLnNlbGVjdEFsbCgiLmxhYmVsLWFyZWEiKS5yZW1vdmUoKTt0aGlzLl9sYWJlbHNFbmFibGVkJiZudWxsIT10aGlzLmxhYmVsKCkmJnYuV2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXtyZXR1cm4gRi5fZHJhd0xhYmVscygpfSxDKX07eC5wcm90b3R5cGUuX2RyYXdMYWJlbHM9ZnVuY3Rpb24oKXt2YXIgQz10aGlzLEY9dGhpcy5fZ2V0RGF0YVRvRHJhdygpO3RoaXMuZGF0YXNldHMoKS5mb3JFYWNoKGZ1bmN0aW9uKEQsQil7cmV0dXJuIEMuX2RyYXdMYWJlbChGLEQsQil9KX07eC5wcm90b3R5cGUuX2RyYXdMYWJlbD1mdW5jdGlvbihDLEYsRCl7dmFyIEI9dGhpcyxHPXRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpLEs9dGhpcy5fcmVuZGVyQXJlYS5hcHBlbmQoImciKS5jbGFzc2VkKCJsYWJlbC1hcmVhIiwhMCksTD1uZXcgay5TdmdDb250ZXh0KEsubm9kZSgpKSxKPW5ldyBrLkNhY2hlTWVhc3VyZXIoTCksClA9bmV3IGsuV3JpdGVyKEosTCk7TD10aGlzLngoKS5zY2FsZS5yYW5nZSgpO3ZhciBTPXRoaXMueSgpLnNjYWxlLnJhbmdlKCksTj1NYXRoLm1pbi5hcHBseShudWxsLEwpLFQ9TWF0aC5tYXguYXBwbHkobnVsbCxMKSxZPU1hdGgubWluLmFwcGx5KG51bGwsUyksYWE9TWF0aC5tYXguYXBwbHkobnVsbCxTKTtDLmdldChGKS5mb3JFYWNoKGZ1bmN0aW9uKGhhLFgpe2lmKG51bGwhPWhhKXt2YXIgY2E9IiIrQi5sYWJlbCgpKGhhLFgsRiksZWE9Si5tZWFzdXJlKGNhKSxrYT1HLngoaGEsWCxGKSxiYT1HLnkoaGEsWCxGKSxsYT1HLndpZHRoKGhhLFgsRiksd2E9Ry5oZWlnaHQoaGEsWCxGKTtlYS5oZWlnaHQ8PXdhJiZlYS53aWR0aDw9bGEmJih3YT0od2EtZWEuaGVpZ2h0KS8yLGthKz0obGEtZWEud2lkdGgpLzIsYmErPXdhLGxhPXttaW46a2EsbWF4OmthK2VhLndpZHRofSx3YT17bWluOmJhLG1heDpiYStlYS5oZWlnaHR9LGxhLm1pbjxOfHxsYS5tYXg+VHx8d2EubWluPFl8fHdhLm1heD4KYWF8fEIuX292ZXJsYXlMYWJlbChsYSx3YSxYLEQsQyl8fChoYT1HLmZpbGwoaGEsWCxGKSxoYT0xLjYqdi5Db2xvci5jb250cmFzdCgid2hpdGUiLGhhKTx2LkNvbG9yLmNvbnRyYXN0KCJibGFjayIsaGEpLGthPUsuYXBwZW5kKCJnIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIra2ErIiwiK2JhKyIpIiksa2EuY2xhc3NlZChoYT8iZGFyay1sYWJlbCI6ImxpZ2h0LWxhYmVsIiwhMCksUC53cml0ZShjYSxlYS53aWR0aCxlYS5oZWlnaHQse3hBbGlnbjoiY2VudGVyIix5QWxpZ246ImNlbnRlciJ9LGthLm5vZGUoKSkpKX19KX07eC5wcm90b3R5cGUuX292ZXJsYXlMYWJlbD1mdW5jdGlvbihDLEYsRCxCLEcpe2Zvcih2YXIgSz10aGlzLl9nZXRBdHRyVG9Qcm9qZWN0b3IoKSxMPXRoaXMuZGF0YXNldHMoKSxKPUI7SjxMLmxlbmd0aDtKKyspZm9yKHZhciBQPUxbSl0sUz1HLmdldChQKSxOPUo9PT1CP0QrMTowO048Uy5sZW5ndGg7TisrKWlmKHYuRE9NLmludGVyc2VjdHNCQm94KEMsCkYsdGhpcy5fZW50aXR5QkJveChTW05dLE4sUCxLKSkpcmV0dXJuITA7cmV0dXJuITF9O3JldHVybiB4fShmKDE2KS5YWVBsb3QpO2MuX1gyX0tFWT0ieDIiO2MuX1kyX0tFWT0ieTIiO2QuUmVjdGFuZ2xlPWN9LGZ1bmN0aW9uKGMsZCxmKXt2YXIgZz10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8ZnVuY3Rpb24oeSx4KXtmdW5jdGlvbiBDKCl7dGhpcy5jb25zdHJ1Y3Rvcj15fWZvcih2YXIgRiBpbiB4KXguaGFzT3duUHJvcGVydHkoRikmJih5W0ZdPXhbRl0pO3kucHJvdG90eXBlPW51bGw9PT14P09iamVjdC5jcmVhdGUoeCk6KEMucHJvdG90eXBlPXgucHJvdG90eXBlLG5ldyBDKX0sbD1mKDMxKSxrPWYoNiksbT1mKDQ4KSxwPWYoNykscT1mKDE0KSxyPWYoMyksdD1mKDApLHY9ZigxOSksQT1mKDIpO2M9ZnVuY3Rpb24oeSl7ZnVuY3Rpb24geCgpe3ZhciBDPXkuY2FsbCh0aGlzKXx8dGhpcztDLmFkZENsYXNzKCJzY2F0dGVyLXBsb3QiKTt2YXIgRj1uZXcgcC5FYXNpbmc7Ri5zdGFydERlbGF5KDUpOwpGLnN0ZXBEdXJhdGlvbigyNTApO0YubWF4VG90YWxEdXJhdGlvbihBLlBsb3QuX0FOSU1BVElPTl9NQVhfRFVSQVRJT04pO0MuYW5pbWF0b3Iodi5BbmltYXRvci5NQUlOLEYpO0MuYXR0cigib3BhY2l0eSIsLjYpO0MuYXR0cigiZmlsbCIsKG5ldyByLkNvbG9yKS5yYW5nZSgpWzBdKTtDLnNpemUoNik7dmFyIEQ9bC5jaXJjbGUoKTtDLnN5bWJvbChmdW5jdGlvbigpe3JldHVybiBEfSk7cmV0dXJuIEN9Zyh4LHkpO3gucHJvdG90eXBlLl9idWlsZExpZ2h0d2VpZ2h0UGxvdEVudGl0aWVzPWZ1bmN0aW9uKEMpe3ZhciBGPXRoaXM7cmV0dXJuIHkucHJvdG90eXBlLl9idWlsZExpZ2h0d2VpZ2h0UGxvdEVudGl0aWVzLmNhbGwodGhpcyxDKS5tYXAoZnVuY3Rpb24oRCl7dmFyIEI9QS5QbG90Ll9zY2FsZWRBY2Nlc3NvcihGLnNpemUoKSkoRC5kYXR1bSxELmluZGV4LEQuZGF0YXNldCk7RC5kaWFtZXRlcj1CO3JldHVybiBEfSl9O3gucHJvdG90eXBlLl9jcmVhdGVEcmF3ZXI9ZnVuY3Rpb24oQyl7dmFyIEY9CnRoaXM7cmV0dXJuIG5ldyBrLlByb3h5RHJhd2VyKGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBtLlN5bWJvbFNWR0RyYXdlcn0sZnVuY3Rpb24oRCl7cmV0dXJuIG5ldyBxLkNhbnZhc0RyYXdlcihELG0ubWFrZVN5bWJvbENhbnZhc0RyYXdTdGVwKEMsZnVuY3Rpb24oKXtyZXR1cm4gQS5QbG90Ll9zY2FsZWRBY2Nlc3NvcihGLnN5bWJvbCgpKX0sZnVuY3Rpb24oKXtyZXR1cm4gQS5QbG90Ll9zY2FsZWRBY2Nlc3NvcihGLnNpemUoKSl9KSl9KX07eC5wcm90b3R5cGUuc2l6ZT1mdW5jdGlvbihDLEYpe2lmKG51bGw9PUMpcmV0dXJuIHRoaXMuX3Byb3BlcnR5QmluZGluZ3MuZ2V0KHguX1NJWkVfS0VZKTt0aGlzLl9iaW5kUHJvcGVydHkoeC5fU0laRV9LRVksQyxGKTt0aGlzLnJlbmRlcigpO3JldHVybiB0aGlzfTt4LnByb3RvdHlwZS5zeW1ib2w9ZnVuY3Rpb24oQyl7aWYobnVsbD09QylyZXR1cm4gdGhpcy5fcHJvcGVydHlCaW5kaW5ncy5nZXQoeC5fU1lNQk9MX0tFWSk7dGhpcy5fcHJvcGVydHlCaW5kaW5ncy5zZXQoeC5fU1lNQk9MX0tFWSwKe2FjY2Vzc29yOkN9KTt0aGlzLnJlbmRlcigpO3JldHVybiB0aGlzfTt4LnByb3RvdHlwZS5fZ2VuZXJhdGVEcmF3U3RlcHM9ZnVuY3Rpb24oKXt2YXIgQz1bXTtpZih0aGlzLl9hbmltYXRlT25OZXh0UmVuZGVyKCkpe3ZhciBGPXRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpLEQ9QS5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnN5bWJvbCgpKTtGLmQ9ZnVuY3Rpb24oQixHLEspe3JldHVybiBEKEIsRyxLKSgwKShudWxsKX07Qy5wdXNoKHthdHRyVG9Qcm9qZWN0b3I6RixhbmltYXRvcjp0aGlzLl9nZXRBbmltYXRvcih2LkFuaW1hdG9yLlJFU0VUKX0pfUMucHVzaCh7YXR0clRvUHJvamVjdG9yOnRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpLGFuaW1hdG9yOnRoaXMuX2dldEFuaW1hdG9yKHYuQW5pbWF0b3IuTUFJTil9KTtyZXR1cm4gQ307eC5wcm90b3R5cGUuX3Byb3BlcnR5UHJvamVjdG9ycz1mdW5jdGlvbigpe3ZhciBDPXkucHJvdG90eXBlLl9wcm9wZXJ0eVByb2plY3RvcnMuY2FsbCh0aGlzKSwKRj1BLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueCgpKSxEPUEuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy55KCkpO0MueD1GO0MueT1EO0MudHJhbnNmb3JtPWZ1bmN0aW9uKEIsRyxLKXtyZXR1cm4idHJhbnNsYXRlKCIrRihCLEcsSykrIiwiK0QoQixHLEspKyIpIn07Qy5kPXRoaXMuX2NvbnN0cnVjdFN5bWJvbEdlbmVyYXRvcigpO3JldHVybiBDfTt4LnByb3RvdHlwZS5fY29uc3RydWN0U3ltYm9sR2VuZXJhdG9yPWZ1bmN0aW9uKCl7dmFyIEM9QS5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnN5bWJvbCgpKSxGPUEuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy5zaXplKCkpO3JldHVybiBmdW5jdGlvbihELEIsRyl7cmV0dXJuIEMoRCxCLEcpKEYoRCxCLEcpKShudWxsKX19O3gucHJvdG90eXBlLl9lbnRpdHlCb3VuZHM9ZnVuY3Rpb24oQyl7cmV0dXJue3g6Qy5wb3NpdGlvbi54LUMuZGlhbWV0ZXIvMix5OkMucG9zaXRpb24ueS1DLmRpYW1ldGVyLzIsd2lkdGg6Qy5kaWFtZXRlciwKaGVpZ2h0OkMuZGlhbWV0ZXJ9fTt4LnByb3RvdHlwZS5fZW50aXR5VmlzaWJsZU9uUGxvdD1mdW5jdGlvbihDLEYpe3ZhciBEPXttaW46Ri50b3BMZWZ0LngsbWF4OkYuYm90dG9tUmlnaHQueH07Rj17bWluOkYudG9wTGVmdC55LG1heDpGLmJvdHRvbVJpZ2h0Lnl9O0M9dGhpcy5fZW50aXR5Qm91bmRzKEMpO3JldHVybiB0LkRPTS5pbnRlcnNlY3RzQkJveChELEYsQyl9O3gucHJvdG90eXBlLmVudGl0aWVzQXQ9ZnVuY3Rpb24oQyl7dmFyIEY9QS5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSksRD1BLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueSgpKSxCPUEuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy5zaXplKCkpO3JldHVybiB0aGlzLmVudGl0aWVzKCkuZmlsdGVyKGZ1bmN0aW9uKEcpe3ZhciBLPUcuZGF0dW0sTD1HLmluZGV4LEo9Ry5kYXRhc2V0O0c9RihLLEwsSik7dmFyIFA9RChLLEwsSik7Sz1CKEssTCxKKTtyZXR1cm4gRy1LLzI8PUMueCYmQy54PD1HK0svCjImJlAtSy8yPD1DLnkmJkMueTw9UCtLLzJ9KX07cmV0dXJuIHh9KGYoMTYpLlhZUGxvdCk7Yy5fU0laRV9LRVk9InNpemUiO2MuX1NZTUJPTF9LRVk9InN5bWJvbCI7ZC5TY2F0dGVyPWN9LGZ1bmN0aW9uKGMsZCxmKXt2YXIgZz10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8ZnVuY3Rpb24odCx2KXtmdW5jdGlvbiBBKCl7dGhpcy5jb25zdHJ1Y3Rvcj10fWZvcih2YXIgeSBpbiB2KXYuaGFzT3duUHJvcGVydHkoeSkmJih0W3ldPXZbeV0pO3QucHJvdG90eXBlPW51bGw9PT12P09iamVjdC5jcmVhdGUodik6KEEucHJvdG90eXBlPXYucHJvdG90eXBlLG5ldyBBKX0sbD1mKDcpLGs9Zig2KSxtPWYoNDcpLHA9ZigzKSxxPWYoMzUpLHI9ZigyKTtjPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIHYoKXt2YXIgQT10LmNhbGwodGhpcyl8fHRoaXM7QS5hZGRDbGFzcygic2VnbWVudC1wbG90Iik7QS5hdHRyKCJzdHJva2UiLChuZXcgcC5Db2xvcikucmFuZ2UoKVswXSk7QS5hdHRyKCJzdHJva2Utd2lkdGgiLAoiMnB4Iik7cmV0dXJuIEF9Zyh2LHQpO3YucHJvdG90eXBlLl9jcmVhdGVEcmF3ZXI9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGsuUHJveHlEcmF3ZXIoZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG0uU2VnbWVudFNWR0RyYXdlcn0sZnVuY3Rpb24oKXtxLndhcm4oImNhbnZhcyByZW5kZXJlciBpcyBub3Qgc3VwcG9ydGVkIG9uIFNlZ21lbnQgUGxvdCEiKTtyZXR1cm4gbnVsbH0pfTt2LnByb3RvdHlwZS5fZ2VuZXJhdGVEcmF3U3RlcHM9ZnVuY3Rpb24oKXtyZXR1cm5be2F0dHJUb1Byb2plY3Rvcjp0aGlzLl9nZXRBdHRyVG9Qcm9qZWN0b3IoKSxhbmltYXRvcjpuZXcgbC5OdWxsfV19O3YucHJvdG90eXBlLl9maWx0ZXJGb3JQcm9wZXJ0eT1mdW5jdGlvbihBKXtyZXR1cm4ieDIiPT09QT90LnByb3RvdHlwZS5fZmlsdGVyRm9yUHJvcGVydHkuY2FsbCh0aGlzLCJ4Iik6InkyIj09PUE/dC5wcm90b3R5cGUuX2ZpbHRlckZvclByb3BlcnR5LmNhbGwodGhpcywieSIpOnQucHJvdG90eXBlLl9maWx0ZXJGb3JQcm9wZXJ0eS5jYWxsKHRoaXMsCkEpfTt2LnByb3RvdHlwZS54PWZ1bmN0aW9uKEEseSl7aWYobnVsbD09QSlyZXR1cm4gdC5wcm90b3R5cGUueC5jYWxsKHRoaXMpO251bGw9PXk/dC5wcm90b3R5cGUueC5jYWxsKHRoaXMsQSk6KHQucHJvdG90eXBlLnguY2FsbCh0aGlzLEEseSksQT0oQT10aGlzLngyKCkpJiZBLmFjY2Vzc29yLG51bGwhPUEmJnRoaXMuX2JpbmRQcm9wZXJ0eSh2Ll9YMl9LRVksQSx5KSk7cmV0dXJuIHRoaXN9O3YucHJvdG90eXBlLngyPWZ1bmN0aW9uKEEpe2lmKG51bGw9PUEpcmV0dXJuIHRoaXMuX3Byb3BlcnR5QmluZGluZ3MuZ2V0KHYuX1gyX0tFWSk7dmFyIHk9dGhpcy54KCk7dGhpcy5fYmluZFByb3BlcnR5KHYuX1gyX0tFWSxBLHkmJnkuc2NhbGUpO3RoaXMucmVuZGVyKCk7cmV0dXJuIHRoaXN9O3YucHJvdG90eXBlLnk9ZnVuY3Rpb24oQSx5KXtpZihudWxsPT1BKXJldHVybiB0LnByb3RvdHlwZS55LmNhbGwodGhpcyk7bnVsbD09eT90LnByb3RvdHlwZS55LmNhbGwodGhpcyxBKToodC5wcm90b3R5cGUueS5jYWxsKHRoaXMsCkEseSksQT0oQT10aGlzLnkyKCkpJiZBLmFjY2Vzc29yLG51bGwhPUEmJnRoaXMuX2JpbmRQcm9wZXJ0eSh2Ll9ZMl9LRVksQSx5KSk7cmV0dXJuIHRoaXN9O3YucHJvdG90eXBlLnkyPWZ1bmN0aW9uKEEpe2lmKG51bGw9PUEpcmV0dXJuIHRoaXMuX3Byb3BlcnR5QmluZGluZ3MuZ2V0KHYuX1kyX0tFWSk7dmFyIHk9dGhpcy55KCk7dGhpcy5fYmluZFByb3BlcnR5KHYuX1kyX0tFWSxBLHkmJnkuc2NhbGUpO3RoaXMucmVuZGVyKCk7cmV0dXJuIHRoaXN9O3YucHJvdG90eXBlLl9wcm9wZXJ0eVByb2plY3RvcnM9ZnVuY3Rpb24oKXt2YXIgQT10LnByb3RvdHlwZS5fcHJvcGVydHlQcm9qZWN0b3JzLmNhbGwodGhpcyk7QS54MT1yLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueCgpKTtBLngyPW51bGw9PXRoaXMueDIoKT9yLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueCgpKTpyLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueDIoKSk7QS55MT1yLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueSgpKTsKQS55Mj1udWxsPT10aGlzLnkyKCk/ci5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkoKSk6ci5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkyKCkpO3JldHVybiBBfTt2LnByb3RvdHlwZS5lbnRpdGllc0F0PWZ1bmN0aW9uKEEpe0E9dGhpcy5lbnRpdHlOZWFyZXN0KEEpO3JldHVybiBudWxsIT1BP1tBXTpbXX07di5wcm90b3R5cGUuZW50aXRpZXNJbj1mdW5jdGlvbihBLHkpe2lmKG51bGw9PXkpe3ZhciB4PXttaW46QS50b3BMZWZ0LngsbWF4OkEuYm90dG9tUmlnaHQueH07QT17bWluOkEudG9wTGVmdC55LG1heDpBLmJvdHRvbVJpZ2h0Lnl9fWVsc2UgeD1BLEE9eTtyZXR1cm4gdGhpcy5fZW50aXRpZXNJbnRlcnNlY3RpbmcoeCxBKX07di5wcm90b3R5cGUuX2VudGl0aWVzSW50ZXJzZWN0aW5nPWZ1bmN0aW9uKEEseSl7dmFyIHg9dGhpcyxDPVtdLEY9dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCk7dGhpcy5lbnRpdGllcygpLmZvckVhY2goZnVuY3Rpb24oRCl7eC5fbGluZUludGVyc2VjdHNCb3goRCwKQSx5LEYpJiZDLnB1c2goRCl9KTtyZXR1cm4gQ307di5wcm90b3R5cGUuX2xpbmVJbnRlcnNlY3RzQm94PWZ1bmN0aW9uKEEseSx4LEMpe3ZhciBGPXRoaXMsRD1DLngxKEEuZGF0dW0sQS5pbmRleCxBLmRhdGFzZXQpLEI9Qy54MihBLmRhdHVtLEEuaW5kZXgsQS5kYXRhc2V0KSxHPUMueTEoQS5kYXR1bSxBLmluZGV4LEEuZGF0YXNldCk7QT1DLnkyKEEuZGF0dW0sQS5pbmRleCxBLmRhdGFzZXQpO2lmKHkubWluPD1EJiZEPD15Lm1heCYmeC5taW48PUcmJkc8PXgubWF4fHx5Lm1pbjw9QiYmQjw9eS5tYXgmJngubWluPD1BJiZBPD14Lm1heClyZXR1cm4hMDt2YXIgSz17eDpELHk6R30sTD17eDpCLHk6QX0sSj1be3g6eS5taW4seTp4Lm1pbn0se3g6eS5taW4seTp4Lm1heH0se3g6eS5tYXgseTp4Lm1heH0se3g6eS5tYXgseTp4Lm1pbn1dO3JldHVybiAwPEouZmlsdGVyKGZ1bmN0aW9uKFAsUyl7cmV0dXJuIDAhPT1TP0YuX2xpbmVJbnRlcnNlY3RzU2VnbWVudChLLEwsUCxKW1MtCjFdKSYmRi5fbGluZUludGVyc2VjdHNTZWdtZW50KFAsSltTLTFdLEssTCk6ITF9KS5sZW5ndGh9O3YucHJvdG90eXBlLl9saW5lSW50ZXJzZWN0c1NlZ21lbnQ9ZnVuY3Rpb24oQSx5LHgsQyl7ZnVuY3Rpb24gRihELEIsRyl7cmV0dXJuKEIueC1ELngpKihHLnktQi55KS0oQi55LUQueSkqKEcueC1CLngpfXJldHVybiAwPkYoQSx5LHgpKkYoQSx5LEMpfTtyZXR1cm4gdn0oZigxNikuWFlQbG90KTtjLl9YMl9LRVk9IngyIjtjLl9ZMl9LRVk9InkyIjtkLlNlZ21lbnQ9Y30sZnVuY3Rpb24oYyxkLGYpe3ZhciBnPXRoaXMmJnRoaXMuX19leHRlbmRzfHxmdW5jdGlvbihyLHQpe2Z1bmN0aW9uIHYoKXt0aGlzLmNvbnN0cnVjdG9yPXJ9Zm9yKHZhciBBIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShBKSYmKHJbQV09dFtBXSk7ci5wcm90b3R5cGU9bnVsbD09PXQ/T2JqZWN0LmNyZWF0ZSh0KToodi5wcm90b3R5cGU9dC5wcm90b3R5cGUsbmV3IHYpfSxsPWYoMSksaz1mKDcpLG09ZigyMCkscD0KZigwKTtjPWYoNTApO3ZhciBxPWYoMik7Zj1mdW5jdGlvbihyKXtmdW5jdGlvbiB0KCl7dmFyIHY9ci5jYWxsKHRoaXMpfHx0aGlzO3YuX3N0YWNraW5nUmVzdWx0PW0ubWVtVGh1bmsoZnVuY3Rpb24oKXtyZXR1cm4gdi5kYXRhc2V0cygpfSxmdW5jdGlvbigpe3JldHVybiB2LngoKS5hY2Nlc3Nvcn0sZnVuY3Rpb24oKXtyZXR1cm4gdi55KCkuYWNjZXNzb3J9LGZ1bmN0aW9uKCl7cmV0dXJuIHYuX3N0YWNraW5nT3JkZXJ9LGZ1bmN0aW9uKEEseSx4LEMpe3JldHVybiBwLlN0YWNraW5nLnN0YWNrKEEseSx4LEMpfSk7di5fc3RhY2tlZEV4dGVudD1tLm1lbVRodW5rKHYuX3N0YWNraW5nUmVzdWx0LGZ1bmN0aW9uKCl7cmV0dXJuIHYueCgpLmFjY2Vzc29yfSxmdW5jdGlvbigpe3JldHVybiB2Ll9maWx0ZXJGb3JQcm9wZXJ0eSgieSIpfSxmdW5jdGlvbihBLHkseCl7cmV0dXJuIHAuU3RhY2tpbmcuc3RhY2tlZEV4dGVudChBLHkseCl9KTt2Ll9iYXNlbGluZVZhbHVlPTA7di5fc3RhY2tpbmdPcmRlcj0KImJvdHRvbXVwIjt2LmFkZENsYXNzKCJzdGFja2VkLWFyZWEtcGxvdCIpO3YuYXR0cigiZmlsbC1vcGFjaXR5IiwxKTt2Ll9iYXNlbGluZVZhbHVlUHJvdmlkZXI9ZnVuY3Rpb24oKXtyZXR1cm5bdi5fYmFzZWxpbmVWYWx1ZV19O3YuY3JvcHBlZFJlbmRlcmluZ0VuYWJsZWQoITEpO3JldHVybiB2fWcodCxyKTt0LnByb3RvdHlwZS5jcm9wcGVkUmVuZGVyaW5nRW5hYmxlZD1mdW5jdGlvbih2KXtyZXR1cm4gbnVsbD09dj9yLnByb3RvdHlwZS5jcm9wcGVkUmVuZGVyaW5nRW5hYmxlZC5jYWxsKHRoaXMpOnY/KHAuV2luZG93Lndhcm4oIldhcm5pbmc6IFN0YWNrZWQgQXJlYSBQbG90IGRvZXMgbm90IHN1cHBvcnQgY3JvcHBlZCByZW5kZXJpbmcuIiksdGhpcyk6ci5wcm90b3R5cGUuY3JvcHBlZFJlbmRlcmluZ0VuYWJsZWQuY2FsbCh0aGlzLHYpfTt0LnByb3RvdHlwZS5fZ2V0QW5pbWF0b3I9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGsuTnVsbH07dC5wcm90b3R5cGUuX3NldHVwPWZ1bmN0aW9uKCl7ci5wcm90b3R5cGUuX3NldHVwLmNhbGwodGhpcyk7CnRoaXMuX2Jhc2VsaW5lPXRoaXMuX3JlbmRlckFyZWEuYXBwZW5kKCJsaW5lIikuY2xhc3NlZCgiYmFzZWxpbmUiLCEwKX07dC5wcm90b3R5cGUueD1mdW5jdGlvbih2LEEpe2lmKG51bGw9PXYpcmV0dXJuIHIucHJvdG90eXBlLnguY2FsbCh0aGlzKTtudWxsPT1BP3IucHJvdG90eXBlLnguY2FsbCh0aGlzLHYpOnIucHJvdG90eXBlLnguY2FsbCh0aGlzLHYsQSk7dGhpcy5fY2hlY2tTYW1lRG9tYWluKCk7cmV0dXJuIHRoaXN9O3QucHJvdG90eXBlLnk9ZnVuY3Rpb24odixBKXtpZihudWxsPT12KXJldHVybiByLnByb3RvdHlwZS55LmNhbGwodGhpcyk7bnVsbD09QT9yLnByb3RvdHlwZS55LmNhbGwodGhpcyx2KTpyLnByb3RvdHlwZS55LmNhbGwodGhpcyx2LEEpO3RoaXMuX2NoZWNrU2FtZURvbWFpbigpO3JldHVybiB0aGlzfTt0LnByb3RvdHlwZS5zdGFja2luZ09yZGVyPWZ1bmN0aW9uKHYpe2lmKG51bGw9PXYpcmV0dXJuIHRoaXMuX3N0YWNraW5nT3JkZXI7dGhpcy5fc3RhY2tpbmdPcmRlcj0Kdjt0aGlzLl9vbkRhdGFzZXRVcGRhdGUoKTtyZXR1cm4gdGhpc307dC5wcm90b3R5cGUuZG93bnNhbXBsaW5nRW5hYmxlZD1mdW5jdGlvbigpe3JldHVybiByLnByb3RvdHlwZS5kb3duc2FtcGxpbmdFbmFibGVkLmNhbGwodGhpcyl9O3QucHJvdG90eXBlLl9hZGRpdGlvbmFsUGFpbnQ9ZnVuY3Rpb24oKXt2YXIgdj10aGlzLnkoKS5zY2FsZS5zY2FsZSh0aGlzLl9iYXNlbGluZVZhbHVlKTt2PXt4MTowLHkxOnYseDI6dGhpcy53aWR0aCgpLHkyOnZ9O3RoaXMuX2dldEFuaW1hdG9yKCJiYXNlbGluZSIpLmFuaW1hdGUodGhpcy5fYmFzZWxpbmUsdil9O3QucHJvdG90eXBlLl91cGRhdGVZU2NhbGU9ZnVuY3Rpb24oKXt2YXIgdj10aGlzLnkoKTt2PXYmJnYuc2NhbGU7bnVsbCE9diYmKHYuYWRkUGFkZGluZ0V4Y2VwdGlvbnNQcm92aWRlcih0aGlzLl9iYXNlbGluZVZhbHVlUHJvdmlkZXIpLHYuYWRkSW5jbHVkZWRWYWx1ZXNQcm92aWRlcih0aGlzLl9iYXNlbGluZVZhbHVlUHJvdmlkZXIpKX07CnQucHJvdG90eXBlLl9vbkRhdGFzZXRVcGRhdGU9ZnVuY3Rpb24oKXt0aGlzLl9jaGVja1NhbWVEb21haW4oKTtyLnByb3RvdHlwZS5fb25EYXRhc2V0VXBkYXRlLmNhbGwodGhpcyk7cmV0dXJuIHRoaXN9O3QucHJvdG90eXBlLmdldEV4dGVudHNGb3JQcm9wZXJ0eT1mdW5jdGlvbih2KXtyZXR1cm4ieSI9PT12P1t0aGlzLl9zdGFja2VkRXh0ZW50KCldOnIucHJvdG90eXBlLmdldEV4dGVudHNGb3JQcm9wZXJ0eS5jYWxsKHRoaXMsdil9O3QucHJvdG90eXBlLl9jaGVja1NhbWVEb21haW49ZnVuY3Rpb24oKXtpZih0aGlzLl9wcm9qZWN0b3JzUmVhZHkoKSl7dmFyIHY9dGhpcy5kYXRhc2V0cygpLEE9dGhpcy54KCkuYWNjZXNzb3IseT12Lm1hcChmdW5jdGlvbihDKXtyZXR1cm4gbC5zZXQoQy5kYXRhKCkubWFwKGZ1bmN0aW9uKEYsRCl7cmV0dXJuIEEoRixELEMpLnRvU3RyaW5nKCl9KSkudmFsdWVzKCl9KSx4PXQuX2RvbWFpbktleXModixBKTt5LnNvbWUoZnVuY3Rpb24oQyl7cmV0dXJuIEMubGVuZ3RoIT09CngubGVuZ3RofSkmJnAuV2luZG93Lndhcm4oInRoZSBkb21haW5zIGFjcm9zcyB0aGUgZGF0YXNldHMgYXJlIG5vdCB0aGUgc2FtZS4gUGxvdCBtYXkgcHJvZHVjZSB1bmludGVuZGVkIGJlaGF2aW9yLiIpfX07dC5fZG9tYWluS2V5cz1mdW5jdGlvbih2LEEpe3ZhciB5PWwuc2V0KCk7di5mb3JFYWNoKGZ1bmN0aW9uKHgpe3guZGF0YSgpLmZvckVhY2goZnVuY3Rpb24oQyxGKXt5LmFkZChBKEMsRix4KSl9KX0pO3JldHVybiB5LnZhbHVlcygpfTt0LnByb3RvdHlwZS5fcHJvcGVydHlQcm9qZWN0b3JzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdihELEIsRyl7cmV0dXJuIHAuU3RhY2tpbmcubm9ybWFsaXplS2V5KEMoRCxCLEcpKX12YXIgQT10aGlzLHk9ci5wcm90b3R5cGUuX3Byb3BlcnR5UHJvamVjdG9ycy5jYWxsKHRoaXMpLHg9dGhpcy55KCkuYWNjZXNzb3IsQz10aGlzLngoKS5hY2Nlc3NvcixGPXRoaXMuX3N0YWNraW5nUmVzdWx0KCk7eS5kPXRoaXMuX2NvbnN0cnVjdEFyZWFQcm9qZWN0b3IocS5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSksCmZ1bmN0aW9uKEQsQixHKXtyZXR1cm4gQS55KCkuc2NhbGUuc2NhbGUoK3goRCxCLEcpK0YuZ2V0KEcpLmdldCh2KEQsQixHKSkub2Zmc2V0KX0sZnVuY3Rpb24oRCxCLEcpe3JldHVybiBBLnkoKS5zY2FsZS5zY2FsZShGLmdldChHKS5nZXQodihELEIsRykpLm9mZnNldCl9KTtyZXR1cm4geX07dC5wcm90b3R5cGUuX3BpeGVsUG9pbnQ9ZnVuY3Rpb24odixBLHkpe3ZhciB4PXIucHJvdG90eXBlLl9waXhlbFBvaW50LmNhbGwodGhpcyx2LEEseSksQz10aGlzLngoKS5hY2Nlc3Nvcih2LEEseSk7dj10aGlzLnkoKS5hY2Nlc3Nvcih2LEEseSk7eT10aGlzLnkoKS5zY2FsZS5zY2FsZSgrdit0aGlzLl9zdGFja2luZ1Jlc3VsdCgpLmdldCh5KS5nZXQocC5TdGFja2luZy5ub3JtYWxpemVLZXkoQykpLm9mZnNldCk7cmV0dXJue3g6eC54LHl9fTtyZXR1cm4gdH0oYy5BcmVhKTtkLlN0YWNrZWRBcmVhPWZ9LGZ1bmN0aW9uKGMsZCxmKXt2YXIgZz10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8ZnVuY3Rpb24odCwKdil7ZnVuY3Rpb24gQSgpe3RoaXMuY29uc3RydWN0b3I9dH1mb3IodmFyIHkgaW4gdil2Lmhhc093blByb3BlcnR5KHkpJiYodFt5XT12W3ldKTt0LnByb3RvdHlwZT1udWxsPT09dj9PYmplY3QuY3JlYXRlKHYpOihBLnByb3RvdHlwZT12LnByb3RvdHlwZSxuZXcgQSl9LGw9Zig1KSxrPWYoOCksbT1mKDIwKSxwPWYoMCkscT1mKDI3KSxyPWYoMik7Yz1mdW5jdGlvbih0KXtmdW5jdGlvbiB2KEEpe3ZvaWQgMD09PUEmJihBPSJ2ZXJ0aWNhbCIpO3ZhciB5PXQuY2FsbCh0aGlzLEEpfHx0aGlzO3kuX2V4dHJlbWFGb3JtYXR0ZXI9ay5pZGVudGl0eSgpO3kuX3N0YWNraW5nUmVzdWx0PW0ubWVtVGh1bmsoZnVuY3Rpb24oKXtyZXR1cm4geS5kYXRhc2V0cygpfSxmdW5jdGlvbigpe3JldHVybiB5LnBvc2l0aW9uKCkuYWNjZXNzb3J9LGZ1bmN0aW9uKCl7cmV0dXJuIHkubGVuZ3RoKCkuYWNjZXNzb3J9LGZ1bmN0aW9uKCl7cmV0dXJuIHkuX3N0YWNraW5nT3JkZXJ9LGZ1bmN0aW9uKHgsCkMsRixEKXtyZXR1cm4gcC5TdGFja2luZy5zdGFjayh4LEMsRixEKX0pO3kuX3N0YWNrZWRFeHRlbnQ9bS5tZW1UaHVuayh5Ll9zdGFja2luZ1Jlc3VsdCxmdW5jdGlvbigpe3JldHVybiB5LnBvc2l0aW9uKCkuYWNjZXNzb3J9LGZ1bmN0aW9uKCl7cmV0dXJuIHkuX2ZpbHRlckZvclByb3BlcnR5KHkuX2lzVmVydGljYWw/InkiOiJ4Iil9LGZ1bmN0aW9uKHgsQyxGKXtyZXR1cm4gcC5TdGFja2luZy5zdGFja2VkRXh0ZW50KHgsQyxGKX0pO3kuYWRkQ2xhc3MoInN0YWNrZWQtYmFyLXBsb3QiKTt5Ll9zdGFja2luZ09yZGVyPSJib3R0b211cCI7cmV0dXJuIHl9Zyh2LHQpO3YucHJvdG90eXBlLnN0YWNraW5nT3JkZXI9ZnVuY3Rpb24oQSl7aWYobnVsbD09QSlyZXR1cm4gdGhpcy5fc3RhY2tpbmdPcmRlcjt0aGlzLl9zdGFja2luZ09yZGVyPUE7dGhpcy5fb25EYXRhc2V0VXBkYXRlKCk7cmV0dXJuIHRoaXN9O3YucHJvdG90eXBlLmV4dHJlbWFGb3JtYXR0ZXI9ZnVuY3Rpb24oQSl7aWYoMD09PQphcmd1bWVudHMubGVuZ3RoKXJldHVybiB0aGlzLl9leHRyZW1hRm9ybWF0dGVyO3RoaXMuX2V4dHJlbWFGb3JtYXR0ZXI9QTt0aGlzLnJlbmRlcigpO3JldHVybiB0aGlzfTt2LnByb3RvdHlwZS5fc2V0dXA9ZnVuY3Rpb24oKXt0LnByb3RvdHlwZS5fc2V0dXAuY2FsbCh0aGlzKTt0aGlzLl9sYWJlbEFyZWE9dGhpcy5fcmVuZGVyQXJlYS5hcHBlbmQoImciKS5jbGFzc2VkKHEuQmFyLl9MQUJFTF9BUkVBX0NMQVNTLCEwKTt2YXIgQT1uZXcgbC5TdmdDb250ZXh0KHRoaXMuX2xhYmVsQXJlYS5ub2RlKCkpO3RoaXMuX21lYXN1cmVyPW5ldyBsLkNhY2hlTWVhc3VyZXIoQSk7dGhpcy5fd3JpdGVyPW5ldyBsLldyaXRlcih0aGlzLl9tZWFzdXJlcixBKX07di5wcm90b3R5cGUuX2RyYXdMYWJlbHM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBBKEwsSil7dmFyIFA9eC5fZ2VuZXJhdGVBdHRyVG9Qcm9qZWN0b3IoKSxTPXgud2lkdGgoKSxOPXguaGVpZ2h0KCk7TC5mb3JFYWNoKGZ1bmN0aW9uKFQpe2lmKFQuZXh0ZW50IT09CkMpe3ZhciBZPXguZXh0cmVtYUZvcm1hdHRlcigpKFQuZXh0ZW50KSxhYT14Ll9tZWFzdXJlci5tZWFzdXJlKFkpLGhhPVQuc3RhY2tlZERhdHVtLFg9aGEub3JpZ2luYWxEYXR1bSxjYT1oYS5vcmlnaW5hbEluZGV4O2hhPWhhLm9yaWdpbmFsRGF0YXNldDt4Ll9pc0RhdHVtT25TY3JlZW4oUCxTLE4sWCxjYSxoYSkmJihYPXIuUGxvdC5fc2NhbGVkQWNjZXNzb3IoeC5hdHRyKHEuQmFyLl9CQVJfVEhJQ0tORVNTX0tFWSkpKFgsY2EsaGEpLGNhPUQuc2NhbGUoVC5leHRlbnQpLFQ9eC5fZ2V0UG9zaXRpb25BdHRyKEYuc2NhbGUoVC5heGlzVmFsdWUpLFgpK1gvMixUPUooeC5faXNWZXJ0aWNhbD97eDpULHk6Y2F9Ont4OmNhLHk6VH0sYWEsWCksWT15KFkse3RvcExlZnQ6VCxib3R0b21SaWdodDp7eDpULngrYWEud2lkdGgseTpULnkrYWEuaGVpZ2h0fX0sWCksSy5wdXNoKFkpKX19KX1mdW5jdGlvbiB5KEwsSixQKXt2YXIgUz1KLnRvcExlZnQsTj1TLngsVD1TLnk7Uz1KLmJvdHRvbVJpZ2h0LngtCkoudG9wTGVmdC54O0o9Si5ib3R0b21SaWdodC55LUoudG9wTGVmdC55O1A9eC5faXNWZXJ0aWNhbD9TPlA6Sj5QO1B8fChOPXguX2xhYmVsQXJlYS5hcHBlbmQoImciKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitOKyIsICIrVCsiKSIpLE4uY2xhc3NlZCgic3RhY2tlZC1iYXItbGFiZWwiLCEwKSx4Ll93cml0ZXIud3JpdGUoTCxTLEose3hBbGlnbjoiY2VudGVyIix5QWxpZ246ImNlbnRlciJ9LE4ubm9kZSgpKSk7cmV0dXJuIFB9dmFyIHg9dGhpczt0LnByb3RvdHlwZS5fZHJhd0xhYmVscy5jYWxsKHRoaXMpO3RoaXMuX2xhYmVsQXJlYS5zZWxlY3RBbGwoImciKS5yZW1vdmUoKTt2YXIgQz0rdGhpcy5iYXNlbGluZVZhbHVlKCksRj10aGlzLnBvc2l0aW9uKCkuc2NhbGUsRD10aGlzLmxlbmd0aCgpLnNjYWxlLEI9cC5TdGFja2luZy5zdGFja2VkRXh0ZW50cyh0aGlzLl9zdGFja2luZ1Jlc3VsdCgpKSxHPUIubWluaW11bUV4dGVudHMsSz1bXTtBKEIubWF4aW11bUV4dGVudHMsCmZ1bmN0aW9uKEwsSil7dmFyIFA9eC5faXNWZXJ0aWNhbD9KLndpZHRoOkouaGVpZ2h0O0o9eC5faXNWZXJ0aWNhbD9KLmhlaWdodDpKLndpZHRoO3JldHVybnt4OnguX2lzVmVydGljYWw/TC54LVAvMjpMLngrdi5fRVhUUkVNQV9MQUJFTF9NQVJHSU5fRlJPTV9CQVIseTp4Ll9pc1ZlcnRpY2FsP0wueS1KOkwueS1QLzJ9fSk7QShHLGZ1bmN0aW9uKEwsSil7dmFyIFA9eC5faXNWZXJ0aWNhbD9KLndpZHRoOkouaGVpZ2h0O0o9eC5faXNWZXJ0aWNhbD9KLmhlaWdodDpKLndpZHRoO3JldHVybnt4OnguX2lzVmVydGljYWw/TC54LVAvMjpMLngtSix5OnguX2lzVmVydGljYWw/TC55K3YuX0VYVFJFTUFfTEFCRUxfTUFSR0lOX0ZST01fQkFSOkwueS1QLzJ9fSk7Sy5zb21lKGZ1bmN0aW9uKEwpe3JldHVybiBMfSkmJnRoaXMuX2xhYmVsQXJlYS5zZWxlY3RBbGwoImciKS5yZW1vdmUoKX07di5wcm90b3R5cGUuX2dlbmVyYXRlQXR0clRvUHJvamVjdG9yPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gQShTLApOLFQpe3JldHVybiAwPitMKFMsTixUKT9DKFMsTixUKTp4KFMsTixUKX1mdW5jdGlvbiB5KFMsTixUKXtyZXR1cm4gTWF0aC5hYnMoeChTLE4sVCktQyhTLE4sVCkpfWZ1bmN0aW9uIHgoUyxOLFQpe3JldHVybiBLLnNjYWxlKCtMKFMsTixUKStQLmdldChUKS5nZXQoRihTLE4sVCkpLm9mZnNldCl9ZnVuY3Rpb24gQyhTLE4sVCl7cmV0dXJuIEsuc2NhbGUoUC5nZXQoVCkuZ2V0KEYoUyxOLFQpKS5vZmZzZXQpfWZ1bmN0aW9uIEYoUyxOLFQpe3JldHVybiBwLlN0YWNraW5nLm5vcm1hbGl6ZUtleShKKFMsTixUKSl9dmFyIEQ9dGhpcyxCPXQucHJvdG90eXBlLl9nZW5lcmF0ZUF0dHJUb1Byb2plY3Rvci5jYWxsKHRoaXMpLEc9dGhpcy5faXNWZXJ0aWNhbD8ieSI6IngiLEs9dGhpcy5sZW5ndGgoKS5zY2FsZSxMPXRoaXMubGVuZ3RoKCkuYWNjZXNzb3IsSj10aGlzLnBvc2l0aW9uKCkuYWNjZXNzb3IsUD10aGlzLl9zdGFja2luZ1Jlc3VsdCgpO0JbdGhpcy5faXNWZXJ0aWNhbD8iaGVpZ2h0IjoKIndpZHRoIl09eTtCW0ddPWZ1bmN0aW9uKFMsTixUKXtyZXR1cm4gRC5faXNWZXJ0aWNhbD9BKFMsTixUKTpBKFMsTixUKS15KFMsTixUKX07cmV0dXJuIEJ9O3YucHJvdG90eXBlLmdldEV4dGVudHNGb3JQcm9wZXJ0eT1mdW5jdGlvbihBKXtyZXR1cm4gQT09PSh0aGlzLl9pc1ZlcnRpY2FsPyJ5IjoieCIpP1t0aGlzLl9zdGFja2VkRXh0ZW50KCldOnQucHJvdG90eXBlLmdldEV4dGVudHNGb3JQcm9wZXJ0eS5jYWxsKHRoaXMsQSl9O3YucHJvdG90eXBlLmludmFsaWRhdGVDYWNoZT1mdW5jdGlvbigpe3QucHJvdG90eXBlLmludmFsaWRhdGVDYWNoZS5jYWxsKHRoaXMpO3RoaXMuX21lYXN1cmVyLnJlc2V0KCl9O3JldHVybiB2fShxLkJhcik7Yy5fRVhUUkVNQV9MQUJFTF9NQVJHSU5fRlJPTV9CQVI9NTtkLlN0YWNrZWRCYXI9Y30sZnVuY3Rpb24oYyxkLGYpe3ZhciBnPXRoaXMmJnRoaXMuX19leHRlbmRzfHxmdW5jdGlvbihtLHApe2Z1bmN0aW9uIHEoKXt0aGlzLmNvbnN0cnVjdG9yPQptfWZvcih2YXIgciBpbiBwKXAuaGFzT3duUHJvcGVydHkocikmJihtW3JdPXBbcl0pO20ucHJvdG90eXBlPW51bGw9PT1wP09iamVjdC5jcmVhdGUocCk6KHEucHJvdG90eXBlPXAucHJvdG90eXBlLG5ldyBxKX0sbD1mKDApO2M9ZigyNyk7dmFyIGs9ZigyKTtmPWZ1bmN0aW9uKG0pe2Z1bmN0aW9uIHAoKXt2YXIgcT1tLmNhbGwodGhpcyl8fHRoaXM7cS5fY29ubmVjdG9yc0VuYWJsZWQ9ITE7cS5hZGRDbGFzcygid2F0ZXJmYWxsLXBsb3QiKTtyZXR1cm4gcX1nKHAsbSk7cC5wcm90b3R5cGUuY29ubmVjdG9yc0VuYWJsZWQ9ZnVuY3Rpb24ocSl7aWYobnVsbD09cSlyZXR1cm4gdGhpcy5fY29ubmVjdG9yc0VuYWJsZWQ7dGhpcy5fY29ubmVjdG9yc0VuYWJsZWQ9cTtyZXR1cm4gdGhpc307cC5wcm90b3R5cGUudG90YWw9ZnVuY3Rpb24ocSl7aWYobnVsbD09cSlyZXR1cm4gdGhpcy5fcHJvcGVydHlCaW5kaW5ncy5nZXQocC5fVE9UQUxfS0VZKTt0aGlzLl9iaW5kUHJvcGVydHkocC5fVE9UQUxfS0VZLApxLG51bGwpO3JldHVybiB0aGlzfTtwLnByb3RvdHlwZS5fYWRkaXRpb25hbFBhaW50PWZ1bmN0aW9uKHEpe3ZhciByPXRoaXM7dGhpcy5fY29ubmVjdG9yQXJlYS5zZWxlY3RBbGwoImxpbmUiKS5yZW1vdmUoKTt0aGlzLl9jb25uZWN0b3JzRW5hYmxlZCYmbC5XaW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3JldHVybiByLl9kcmF3Q29ubmVjdG9ycygpfSxxKX07cC5wcm90b3R5cGUuX2NyZWF0ZU5vZGVzRm9yRGF0YXNldD1mdW5jdGlvbihxKXtxPW0ucHJvdG90eXBlLl9jcmVhdGVOb2Rlc0ZvckRhdGFzZXQuY2FsbCh0aGlzLHEpO3RoaXMuX2Nvbm5lY3RvckFyZWE9dGhpcy5fcmVuZGVyQXJlYS5hcHBlbmQoImciKS5jbGFzc2VkKHAuX0NPTk5FQ1RPUl9BUkVBX0NMQVNTLCEwKTtyZXR1cm4gcX07cC5wcm90b3R5cGUuZ2V0RXh0ZW50c0ZvclByb3BlcnR5PWZ1bmN0aW9uKHEpe3JldHVybiJ5Ij09PXE/W3RoaXMuX2V4dGVudF06bS5wcm90b3R5cGUuZ2V0RXh0ZW50c0ZvclByb3BlcnR5LmNhbGwodGhpcywKcSl9O3AucHJvdG90eXBlLl9nZW5lcmF0ZUF0dHJUb1Byb2plY3Rvcj1mdW5jdGlvbigpe3ZhciBxPXRoaXMscj1tLnByb3RvdHlwZS5fZ2VuZXJhdGVBdHRyVG9Qcm9qZWN0b3IuY2FsbCh0aGlzKSx0PXRoaXMueSgpLnNjYWxlLHY9ay5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnRvdGFsKCkpO251bGw9PXRoaXMuYXR0cigieSIpJiYoci55PWZ1bmN0aW9uKEEseSx4KXt2YXIgQz1xLnkoKS5hY2Nlc3NvcihBLHkseCk7aWYodihBLHkseCkpcmV0dXJuIE1hdGgubWluKHQuc2NhbGUoQyksdC5zY2FsZSgwKSk7QT1xLl9zdWJ0b3RhbHNbeV07aWYoMD09PXkpcmV0dXJuIDA+Qz90LnNjYWxlKEEtQyk6dC5zY2FsZShBKTt5PXEuX3N1YnRvdGFsc1t5LTFdO3JldHVybiBBPnk/dC5zY2FsZShBKTp0LnNjYWxlKHkpfSk7bnVsbD09dGhpcy5hdHRyKCJoZWlnaHQiKSYmKHIuaGVpZ2h0PWZ1bmN0aW9uKEEseSx4KXt2YXIgQz12KEEseSx4KTtBPXEueSgpLmFjY2Vzc29yKEEseSx4KTtpZihDKXJldHVybiBNYXRoLmFicyh0LnNjYWxlKEEpLQp0LnNjYWxlKDApKTtDPXEuX3N1YnRvdGFsc1t5XTtpZigwPT09eSlyZXR1cm4gTWF0aC5hYnModC5zY2FsZShDKS10LnNjYWxlKEMtQSkpO3k9cS5fc3VidG90YWxzW3ktMV07cmV0dXJuIE1hdGguYWJzKHQuc2NhbGUoQyktdC5zY2FsZSh5KSl9KTtyWyJjbGFzcyJdPWZ1bmN0aW9uKEEseSx4KXt2YXIgQz0iIjtudWxsIT1xLmF0dHIoImNsYXNzIikmJihDPXEuYXR0cigiY2xhc3MiKS5hY2Nlc3NvcihBLHkseCkrIiAiKTtpZih2KEEseSx4KSlyZXR1cm4gQytwLl9CQVJfVE9UQUxfQ0xBU1M7QT1xLnkoKS5hY2Nlc3NvcihBLHkseCk7cmV0dXJuIEMrKDA8QT9wLl9CQVJfR1JPV1RIX0NMQVNTOnAuX0JBUl9ERUNMSU5FX0NMQVNTKX07cmV0dXJuIHJ9O3AucHJvdG90eXBlLl9vbkRhdGFzZXRVcGRhdGU9ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVTdWJ0b3RhbHMoKTttLnByb3RvdHlwZS5fb25EYXRhc2V0VXBkYXRlLmNhbGwodGhpcyk7cmV0dXJuIHRoaXN9O3AucHJvdG90eXBlLl9jYWxjdWxhdGVTdWJ0b3RhbHNBbmRFeHRlbnQ9CmZ1bmN0aW9uKHEpe3ZhciByPXRoaXMsdD1OdW1iZXIuTUFYX1ZBTFVFLHY9TnVtYmVyLk1JTl9WQUxVRSxBPTAseT0hMTtxLmRhdGEoKS5mb3JFYWNoKGZ1bmN0aW9uKHgsQyl7dmFyIEY9ci55KCkuYWNjZXNzb3IoeCxDLHEpOyh4PXIudG90YWwoKS5hY2Nlc3Nvcih4LEMscSkpJiYwIT09Q3x8KEErPUYpO3IuX3N1YnRvdGFscy5wdXNoKEEpO0E8dCYmKHQ9QSk7QT52JiYodj1BKTt4JiYoRjx0JiYodD1GKSxGPnYmJih2PUYpKTtpZigheSYmeCl7Qz1GLUE7Zm9yKEY9MDtGPHIuX3N1YnRvdGFscy5sZW5ndGg7RisrKXIuX3N1YnRvdGFsc1tGXSs9Qzt5PSEwO0ErPUM7dCs9Qzt2Kz1DfX0pO3RoaXMuX2V4dGVudD1bdCx2XX07cC5wcm90b3R5cGUuX2RyYXdDb25uZWN0b3JzPWZ1bmN0aW9uKCl7Zm9yKHZhciBxPXRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpLHI9dGhpcy5kYXRhc2V0cygpWzBdLHQ9MTt0PHIuZGF0YSgpLmxlbmd0aDt0Kyspe3ZhciB2PXQtMSxBPXIuZGF0YSgpW3RdLAp5PXIuZGF0YSgpW3ZdO3k9cS54KHksdixyKTt2YXIgeD1xLngoQSx0LHIpK3Eud2lkdGgoQSx0LHIpLEM9cS55KEEsdCxyKTtpZigwPHRoaXMuX3N1YnRvdGFsc1t0XSYmdGhpcy5fc3VidG90YWxzW3RdPnRoaXMuX3N1YnRvdGFsc1t2XXx8MD50aGlzLl9zdWJ0b3RhbHNbdF0mJnRoaXMuX3N1YnRvdGFsc1t0XT49dGhpcy5fc3VidG90YWxzW3ZdKUM9cS55KEEsdCxyKStxLmhlaWdodChBLHQscik7dGhpcy5fY29ubmVjdG9yQXJlYS5hcHBlbmQoImxpbmUiKS5jbGFzc2VkKHAuX0NPTk5FQ1RPUl9DTEFTUywhMCkuYXR0cigieDEiLHkpLmF0dHIoIngyIix4KS5hdHRyKCJ5MSIsQykuYXR0cigieTIiLEMpfX07cC5wcm90b3R5cGUuX3VwZGF0ZVN1YnRvdGFscz1mdW5jdGlvbigpe3ZhciBxPXRoaXMuZGF0YXNldHMoKTswPHEubGVuZ3RoJiYocT1xW3EubGVuZ3RoLTFdLHRoaXMuX3N1YnRvdGFscz1bXSx0aGlzLl9jYWxjdWxhdGVTdWJ0b3RhbHNBbmRFeHRlbnQocSkpfTtyZXR1cm4gcH0oYy5CYXIpOwpmLl9CQVJfREVDTElORV9DTEFTUz0id2F0ZXJmYWxsLWRlY2xpbmUiO2YuX0JBUl9HUk9XVEhfQ0xBU1M9IndhdGVyZmFsbC1ncm93dGgiO2YuX0JBUl9UT1RBTF9DTEFTUz0id2F0ZXJmYWxsLXRvdGFsIjtmLl9DT05ORUNUT1JfQ0xBU1M9ImNvbm5lY3RvciI7Zi5fQ09OTkVDVE9SX0FSRUFfQ0xBU1M9ImNvbm5lY3Rvci1hcmVhIjtmLl9UT1RBTF9LRVk9InRvdGFsIjtkLldhdGVyZmFsbD1mfSxmdW5jdGlvbihjLGQsZil7dmFyIGc9dGhpcyYmdGhpcy5fX2V4dGVuZHN8fGZ1bmN0aW9uKG0scCl7ZnVuY3Rpb24gcSgpe3RoaXMuY29uc3RydWN0b3I9bX1mb3IodmFyIHIgaW4gcClwLmhhc093blByb3BlcnR5KHIpJiYobVtyXT1wW3JdKTttLnByb3RvdHlwZT1udWxsPT09cD9PYmplY3QuY3JlYXRlKHApOihxLnByb3RvdHlwZT1wLnByb3RvdHlwZSxuZXcgcSl9LGw9ZigxKSxrPWYoMCk7Yz1mdW5jdGlvbihtKXtmdW5jdGlvbiBwKHEpe3ZhciByPW0uY2FsbCh0aGlzKXx8dGhpczsKc3dpdGNoKHEpe2Nhc2UgbnVsbDpjYXNlIHZvaWQgMDpudWxsPT1wLl9wbG90dGFibGVDb2xvckNhY2hlJiYocC5fcGxvdHRhYmxlQ29sb3JDYWNoZT1wLl9nZXRQbG90dGFibGVDb2xvcnMoKSk7cT1sLnNjYWxlT3JkaW5hbCgpLnJhbmdlKHAuX3Bsb3R0YWJsZUNvbG9yQ2FjaGUpO2JyZWFrO2Nhc2UgIkNhdGVnb3J5MTAiOmNhc2UgImNhdGVnb3J5MTAiOmNhc2UgIjEwIjpxPWwuc2NhbGVPcmRpbmFsKGwuc2NoZW1lQ2F0ZWdvcnkxMCk7YnJlYWs7Y2FzZSAiQ2F0ZWdvcnkyMCI6Y2FzZSAiY2F0ZWdvcnkyMCI6Y2FzZSAiMjAiOnE9bC5zY2FsZU9yZGluYWwobC5zY2hlbWVDYXRlZ29yeTIwKTticmVhaztjYXNlICJDYXRlZ29yeTIwYiI6Y2FzZSAiY2F0ZWdvcnkyMGIiOmNhc2UgIjIwYiI6cT1sLnNjYWxlT3JkaW5hbChsLnNjaGVtZUNhdGVnb3J5MjBiKTticmVhaztjYXNlICJDYXRlZ29yeTIwYyI6Y2FzZSAiY2F0ZWdvcnkyMGMiOmNhc2UgIjIwYyI6cT1sLnNjYWxlT3JkaW5hbChsLnNjaGVtZUNhdGVnb3J5MjBjKTsKYnJlYWs7ZGVmYXVsdDp0aHJvdyBFcnJvcigiVW5zdXBwb3J0ZWQgQ29sb3JTY2FsZSB0eXBlIik7fXIuX2QzU2NhbGU9cTtyZXR1cm4gcn1nKHAsbSk7cC5wcm90b3R5cGUuZXh0ZW50T2ZWYWx1ZXM9ZnVuY3Rpb24ocSl7cmV0dXJuIGsuQXJyYXkudW5pcShxKX07cC5wcm90b3R5cGUuX2dldEV4dGVudD1mdW5jdGlvbigpe3JldHVybiBrLkFycmF5LnVuaXEodGhpcy5fZ2V0QWxsSW5jbHVkZWRWYWx1ZXMoKSl9O3AuaW52YWxpZGF0ZUNvbG9yQ2FjaGU9ZnVuY3Rpb24oKXtwLl9wbG90dGFibGVDb2xvckNhY2hlPW51bGx9O3AuX2dldFBsb3R0YWJsZUNvbG9ycz1mdW5jdGlvbigpe2Zvcih2YXIgcT1bXSxyPWwuc2VsZWN0KCJib2R5IikuYXBwZW5kKCJwbG90dGFibGUtY29sb3ItdGVzdGVyIiksdD1rLkNvbG9yLmNvbG9yVGVzdChyLCIiKSx2PTAsQT1rLkNvbG9yLmNvbG9yVGVzdChyLCJwbG90dGFibGUtY29sb3JzLTAiKTtudWxsIT1BJiZ2PHRoaXMuX01BWElNVU1fQ09MT1JTX0ZST01fQ1NTJiYKKEEhPT10fHxBIT09cVtxLmxlbmd0aC0xXSk7KXEucHVzaChBKSx2KyssQT1rLkNvbG9yLmNvbG9yVGVzdChyLCJwbG90dGFibGUtY29sb3JzLSIrdik7ci5yZW1vdmUoKTtyZXR1cm4gcX07cC5wcm90b3R5cGUuc2NhbGU9ZnVuY3Rpb24ocSl7dmFyIHI9dGhpcy5fZDNTY2FsZShxKTtxPXRoaXMuZG9tYWluKCkuaW5kZXhPZihxKTtxPU1hdGguZmxvb3IocS90aGlzLnJhbmdlKCkubGVuZ3RoKTtyZXR1cm4gay5Db2xvci5saWdodGVuQ29sb3IocixNYXRoLmxvZyhxKnAuX0xPT1BfTElHSFRFTl9GQUNUT1IrMSkpfTtwLnByb3RvdHlwZS5fZ2V0RG9tYWluPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2JhY2tpbmdTY2FsZURvbWFpbigpfTtwLnByb3RvdHlwZS5fYmFja2luZ1NjYWxlRG9tYWluPWZ1bmN0aW9uKHEpe2lmKG51bGw9PXEpcmV0dXJuIHRoaXMuX2QzU2NhbGUuZG9tYWluKCk7dGhpcy5fZDNTY2FsZS5kb21haW4ocSk7cmV0dXJuIHRoaXN9O3AucHJvdG90eXBlLl9nZXRSYW5nZT0KZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZDNTY2FsZS5yYW5nZSgpfTtwLnByb3RvdHlwZS5fc2V0UmFuZ2U9ZnVuY3Rpb24ocSl7dGhpcy5fZDNTY2FsZS5yYW5nZShxKX07cmV0dXJuIHB9KGYoMTcpLlNjYWxlKTtjLl9MT09QX0xJR0hURU5fRkFDVE9SPTEuNjtjLl9NQVhJTVVNX0NPTE9SU19GUk9NX0NTUz0yNTY7ZC5Db2xvcj1jfSxmdW5jdGlvbihjLGQsZil7dmFyIGc9dGhpcyYmdGhpcy5fX2V4dGVuZHN8fGZ1bmN0aW9uKG0scCl7ZnVuY3Rpb24gcSgpe3RoaXMuY29uc3RydWN0b3I9bX1mb3IodmFyIHIgaW4gcClwLmhhc093blByb3BlcnR5KHIpJiYobVtyXT1wW3JdKTttLnByb3RvdHlwZT1udWxsPT09cD9PYmplY3QuY3JlYXRlKHApOihxLnByb3RvdHlwZT1wLnByb3RvdHlwZSxuZXcgcSl9LGw9ZigxKSxrPWYoMCk7Yz1mdW5jdGlvbihtKXtmdW5jdGlvbiBwKHEpe3ZvaWQgMD09PXEmJihxPSJsaW5lYXIiKTt2YXIgcj1tLmNhbGwodGhpcyl8fHRoaXM7c3dpdGNoKHEpe2Nhc2UgImxpbmVhciI6ci5fY29sb3JTY2FsZT0KbC5zY2FsZUxpbmVhcigpO2JyZWFrO2Nhc2UgImxvZyI6ci5fY29sb3JTY2FsZT1sLnNjYWxlTG9nKCk7YnJlYWs7Y2FzZSAic3FydCI6ci5fY29sb3JTY2FsZT1sLnNjYWxlU3FydCgpO2JyZWFrO2Nhc2UgInBvdyI6ci5fY29sb3JTY2FsZT1sLnNjYWxlUG93KCl9aWYobnVsbD09ci5fY29sb3JTY2FsZSl0aHJvdyBFcnJvcigidW5rbm93biBRdWFudGl0YXRpdmVTY2FsZSBzY2FsZSB0eXBlICIrcSk7ci5yYW5nZShwLlJFRFMpO3JldHVybiByfWcocCxtKTtwLnByb3RvdHlwZS5leHRlbnRPZlZhbHVlcz1mdW5jdGlvbihxKXtxPWwuZXh0ZW50KHEpO3JldHVybiBudWxsPT1xWzBdfHxudWxsPT1xWzFdP1tdOnF9O3AucHJvdG90eXBlLl9kM0ludGVycG9sYXRlZFNjYWxlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NvbG9yU2NhbGUucmFuZ2UoWzAsMV0pLmludGVycG9sYXRlKHRoaXMuX2ludGVycG9sYXRlQ29sb3JzKCkpfTtwLnByb3RvdHlwZS5faW50ZXJwb2xhdGVDb2xvcnM9CmZ1bmN0aW9uKCl7dmFyIHE9dGhpcy5fY29sb3JSYW5nZTtpZigyPnEubGVuZ3RoKXRocm93IEVycm9yKCJDb2xvciBzY2FsZSBhcnJheXMgbXVzdCBoYXZlIGF0IGxlYXN0IHR3byBlbGVtZW50cy4iKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24ocil7cj1NYXRoLm1heCgwLE1hdGgubWluKDEscikpO3IqPXEubGVuZ3RoLTE7dmFyIHQ9TWF0aC5mbG9vcihyKSx2PXItdDtyZXR1cm4gbC5pbnRlcnBvbGF0ZUxhYihxW3RdLHFbTWF0aC5jZWlsKHIpXSkodil9fX07cC5wcm90b3R5cGUuX3Jlc2V0U2NhbGU9ZnVuY3Rpb24oKXt0aGlzLl9kM1NjYWxlPXRoaXMuX2QzSW50ZXJwb2xhdGVkU2NhbGUoKTt0aGlzLl9hdXRvRG9tYWluSWZBdXRvbWF0aWNNb2RlKCk7dGhpcy5fZGlzcGF0Y2hVcGRhdGUoKX07cC5wcm90b3R5cGUuYXV0b0RvbWFpbj1mdW5jdGlvbigpe3ZhciBxPXRoaXMuX2dldEFsbEluY2x1ZGVkVmFsdWVzKCk7MDxxLmxlbmd0aCYmdGhpcy5fc2V0RG9tYWluKFtrLk1hdGgubWluKHEsCjApLGsuTWF0aC5tYXgocSwwKV0pfTtwLnByb3RvdHlwZS5zY2FsZT1mdW5jdGlvbihxKXtyZXR1cm4gdGhpcy5fZDNTY2FsZShxKX07cC5wcm90b3R5cGUuX2dldERvbWFpbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9iYWNraW5nU2NhbGVEb21haW4oKX07cC5wcm90b3R5cGUuX2JhY2tpbmdTY2FsZURvbWFpbj1mdW5jdGlvbihxKXtpZihudWxsPT1xKXJldHVybiB0aGlzLl9kM1NjYWxlLmRvbWFpbigpO3RoaXMuX2QzU2NhbGUuZG9tYWluKHEpO3JldHVybiB0aGlzfTtwLnByb3RvdHlwZS5fZ2V0UmFuZ2U9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY29sb3JSYW5nZX07cC5wcm90b3R5cGUuX3NldFJhbmdlPWZ1bmN0aW9uKHEpe3RoaXMuX2NvbG9yUmFuZ2U9cTt0aGlzLl9yZXNldFNjYWxlKCl9O3JldHVybiBwfShmKDE3KS5TY2FsZSk7Yy5SRURTPSIjRkZGRkZGICNGRkY2RTEgI0ZFRjRDMCAjRkVEOTc2ICNGRUIyNEMgI0ZEOEQzQyAjRkM0RTJBICNFMzFBMUMgI0IxMDAyNiIuc3BsaXQoIiAiKTsKYy5CTFVFUz0iI0ZGRkZGRiAjQ0NGRkZGICNBNUZGRkQgIzg1RjdGQiAjNkVEM0VGICM1NUE3RTAgIzQxN0ZEMCAjMjU0NUQzICMwQjAyRTEiLnNwbGl0KCIgIik7Yy5QT1NORUc9IiMwQjAyRTEgIzI1NDVEMyAjNDE3RkQwICM1NUE3RTAgIzZFRDNFRiAjODVGN0ZCICNBNUZGRkQgI0NDRkZGRiAjRkZGRkZGICNGRkY2RTEgI0ZFRjRDMCAjRkVEOTc2ICNGRUIyNEMgI0ZEOEQzQyAjRkM0RTJBICNFMzFBMUMgI0IxMDAyNiIuc3BsaXQoIiAiKTtkLkludGVycG9sYXRlZENvbG9yPWN9LGZ1bmN0aW9uKGMsZCxmKXt2YXIgZz10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8ZnVuY3Rpb24oayxtKXtmdW5jdGlvbiBwKCl7dGhpcy5jb25zdHJ1Y3Rvcj1rfWZvcih2YXIgcSBpbiBtKW0uaGFzT3duUHJvcGVydHkocSkmJihrW3FdPW1bcV0pO2sucHJvdG90eXBlPW51bGw9PT1tP09iamVjdC5jcmVhdGUobSk6KHAucHJvdG90eXBlPW0ucHJvdG90eXBlLG5ldyBwKX0sbD1mKDEpO2M9ZnVuY3Rpb24oayl7ZnVuY3Rpb24gbSgpe3ZhciBwPQprLmNhbGwodGhpcyl8fHRoaXM7cC5fZDNTY2FsZT1sLnNjYWxlTGluZWFyKCk7cmV0dXJuIHB9ZyhtLGspO20ucHJvdG90eXBlLl9kZWZhdWx0RXh0ZW50PWZ1bmN0aW9uKCl7cmV0dXJuWzAsMV19O20ucHJvdG90eXBlLl9leHBhbmRTaW5nbGVWYWx1ZURvbWFpbj1mdW5jdGlvbihwKXtyZXR1cm4gcFswXT09PXBbMV0/W3BbMF0tMSxwWzFdKzFdOnB9O20ucHJvdG90eXBlLnNjYWxlPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLl9kM1NjYWxlKHApfTttLnByb3RvdHlwZS5zY2FsZVRyYW5zZm9ybWF0aW9uPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLnNjYWxlKHApfTttLnByb3RvdHlwZS5pbnZlcnRlZFRyYW5zZm9ybWF0aW9uPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmludmVydChwKX07bS5wcm90b3R5cGUuZ2V0VHJhbnNmb3JtYXRpb25FeHRlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZ2V0VW5ib3VuZGVkRXh0ZW50KCEwKX07bS5wcm90b3R5cGUuZ2V0VHJhbnNmb3JtYXRpb25Eb21haW49CmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tYWluKCl9O20ucHJvdG90eXBlLnNldFRyYW5zZm9ybWF0aW9uRG9tYWluPWZ1bmN0aW9uKHApe3RoaXMuZG9tYWluKHApfTttLnByb3RvdHlwZS5fZ2V0RG9tYWluPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2JhY2tpbmdTY2FsZURvbWFpbigpfTttLnByb3RvdHlwZS5fYmFja2luZ1NjYWxlRG9tYWluPWZ1bmN0aW9uKHApe2lmKG51bGw9PXApcmV0dXJuIHRoaXMuX2QzU2NhbGUuZG9tYWluKCk7dGhpcy5fZDNTY2FsZS5kb21haW4ocCk7cmV0dXJuIHRoaXN9O20ucHJvdG90eXBlLl9nZXRSYW5nZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kM1NjYWxlLnJhbmdlKCl9O20ucHJvdG90eXBlLl9zZXRSYW5nZT1mdW5jdGlvbihwKXt0aGlzLl9kM1NjYWxlLnJhbmdlKHApfTttLnByb3RvdHlwZS5pbnZlcnQ9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuX2QzU2NhbGUuaW52ZXJ0KHApfTttLnByb3RvdHlwZS5kZWZhdWx0VGlja3M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZDNTY2FsZS50aWNrcygpfTsKbS5wcm90b3R5cGUuX25pY2VEb21haW49ZnVuY3Rpb24ocCxxKXtyZXR1cm4gdGhpcy5fZDNTY2FsZS5jb3B5KCkuZG9tYWluKHApLm5pY2UocSkuZG9tYWluKCl9O3JldHVybiBtfShmKDExKS5RdWFudGl0YXRpdmVTY2FsZSk7ZC5MaW5lYXI9Y30sZnVuY3Rpb24oYyxkLGYpe3ZhciBnPXRoaXMmJnRoaXMuX19leHRlbmRzfHxmdW5jdGlvbihwLHEpe2Z1bmN0aW9uIHIoKXt0aGlzLmNvbnN0cnVjdG9yPXB9Zm9yKHZhciB0IGluIHEpcS5oYXNPd25Qcm9wZXJ0eSh0KSYmKHBbdF09cVt0XSk7cC5wcm90b3R5cGU9bnVsbD09PXE/T2JqZWN0LmNyZWF0ZShxKTooci5wcm90b3R5cGU9cS5wcm90b3R5cGUsbmV3IHIpfSxsPWYoMSksaz1mKDApLG09ZigzKTtjPWZ1bmN0aW9uKHApe2Z1bmN0aW9uIHEocil7dm9pZCAwPT09ciYmKHI9MTApO3ZhciB0PXAuY2FsbCh0aGlzKXx8dGhpczt0Ll9kM1NjYWxlPWwuc2NhbGVMaW5lYXIoKTt0Ll9iYXNlPXI7dC5fcGl2b3Q9dC5fYmFzZTt0Ll9zZXREb21haW4odC5fZGVmYXVsdEV4dGVudCgpKTsKaWYoMT49cil0aHJvdyBFcnJvcigiTW9kaWZpZWRMb2dTY2FsZTogVGhlIGJhc2UgbXVzdCBiZSBceDNlIDEiKTtyZXR1cm4gdH1nKHEscCk7cS5wcm90b3R5cGUuX2FkanVzdGVkTG9nPWZ1bmN0aW9uKHIpe3ZhciB0PTA+cj8tMToxO3IqPXQ7cjx0aGlzLl9waXZvdCYmKHIrPSh0aGlzLl9waXZvdC1yKS90aGlzLl9waXZvdCk7cj1NYXRoLmxvZyhyKS9NYXRoLmxvZyh0aGlzLl9iYXNlKTtyZXR1cm4gcip0fTtxLnByb3RvdHlwZS5faW52ZXJ0ZWRBZGp1c3RlZExvZz1mdW5jdGlvbihyKXt2YXIgdD0wPnI/LTE6MTtyPU1hdGgucG93KHRoaXMuX2Jhc2Uscip0KTtyPHRoaXMuX3Bpdm90JiYocj10aGlzLl9waXZvdCooci0xKS8odGhpcy5fcGl2b3QtMSkpO3JldHVybiByKnR9O3EucHJvdG90eXBlLnNjYWxlPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9kM1NjYWxlKHRoaXMuX2FkanVzdGVkTG9nKHIpKX07cS5wcm90b3R5cGUuaW52ZXJ0PWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9pbnZlcnRlZEFkanVzdGVkTG9nKHRoaXMuX2QzU2NhbGUuaW52ZXJ0KHIpKX07CnEucHJvdG90eXBlLnNjYWxlVHJhbnNmb3JtYXRpb249ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuc2NhbGUocil9O3EucHJvdG90eXBlLmludmVydGVkVHJhbnNmb3JtYXRpb249ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuaW52ZXJ0KHIpfTtxLnByb3RvdHlwZS5nZXRUcmFuc2Zvcm1hdGlvbkV4dGVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9nZXRVbmJvdW5kZWRFeHRlbnQoITApfTtxLnByb3RvdHlwZS5nZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRvbWFpbigpfTtxLnByb3RvdHlwZS5zZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbj1mdW5jdGlvbihyKXt0aGlzLmRvbWFpbihyKX07cS5wcm90b3R5cGUuX2dldERvbWFpbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl91bnRyYW5zZm9ybWVkRG9tYWlufTtxLnByb3RvdHlwZS5fc2V0RG9tYWluPWZ1bmN0aW9uKHIpe3RoaXMuX3VudHJhbnNmb3JtZWREb21haW49cjtwLnByb3RvdHlwZS5fc2V0RG9tYWluLmNhbGwodGhpcywKW3RoaXMuX2FkanVzdGVkTG9nKHJbMF0pLHRoaXMuX2FkanVzdGVkTG9nKHJbMV0pXSl9O3EucHJvdG90eXBlLl9iYWNraW5nU2NhbGVEb21haW49ZnVuY3Rpb24ocil7aWYobnVsbD09cilyZXR1cm4gdGhpcy5fZDNTY2FsZS5kb21haW4oKTt0aGlzLl9kM1NjYWxlLmRvbWFpbihyKTtyZXR1cm4gdGhpc307cS5wcm90b3R5cGUudGlja3M9ZnVuY3Rpb24oKXtmdW5jdGlvbiByKEYsRCxCKXtyZXR1cm5bRixELEJdLnNvcnQoZnVuY3Rpb24oRyxLKXtyZXR1cm4gRy1LfSlbMV19dmFyIHQ9ay5NYXRoLm1pbih0aGlzLl91bnRyYW5zZm9ybWVkRG9tYWluLDApLHY9ay5NYXRoLm1heCh0aGlzLl91bnRyYW5zZm9ybWVkRG9tYWluLDApLEE9cih0LHYsLXRoaXMuX3Bpdm90KSx5PXIodCx2LHRoaXMuX3Bpdm90KTtBPXRoaXMuX2xvZ1RpY2tzKC1BLC10KS5tYXAoZnVuY3Rpb24oRil7cmV0dXJuLUZ9KS5yZXZlcnNlKCk7eT10aGlzLl9sb2dUaWNrcyh5LHYpO3ZhciB4PU1hdGgubWF4KHQsCi10aGlzLl9waXZvdCksQz1NYXRoLm1pbih2LHRoaXMuX3Bpdm90KTt4PWwuc2NhbGVMaW5lYXIoKS5kb21haW4oW3gsQ10pLnRpY2tzKHRoaXMuX2hvd01hbnlUaWNrcyh4LEMpKTtBPUEuY29uY2F0KHgpLmNvbmNhdCh5KTsxPj1BLmxlbmd0aCYmKEE9bC5zY2FsZUxpbmVhcigpLmRvbWFpbihbdCx2XSkudGlja3MoKSk7cmV0dXJuIEF9O3EucHJvdG90eXBlLl9sb2dUaWNrcz1mdW5jdGlvbihyLHQpe3ZhciB2PXRoaXMsQT10aGlzLl9ob3dNYW55VGlja3Mocix0KTtpZigwPT09QSlyZXR1cm5bXTt2YXIgeT1NYXRoLmZsb29yKE1hdGgubG9nKHIpL01hdGgubG9nKHRoaXMuX2Jhc2UpKSx4PU1hdGguY2VpbChNYXRoLmxvZyh0KS9NYXRoLmxvZyh0aGlzLl9iYXNlKSk7QT1sLnJhbmdlKHgseSwtTWF0aC5jZWlsKCh4LXkpL0EpKTt5PWwucmFuZ2UodGhpcy5fYmFzZSwxLC0odGhpcy5fYmFzZS0xKSkubWFwKE1hdGguZmxvb3IpO3ZhciBDPWsuQXJyYXkudW5pcSh5KTtBPUEubWFwKGZ1bmN0aW9uKEYpe3JldHVybiBDLm1hcChmdW5jdGlvbihEKXtyZXR1cm4gTWF0aC5wb3codi5fYmFzZSwKRi0xKSpEfSl9KTtyZXR1cm4gay5BcnJheS5mbGF0dGVuKEEpLmZpbHRlcihmdW5jdGlvbihGKXtyZXR1cm4gcjw9RiYmRjw9dH0pLnNvcnQoZnVuY3Rpb24oRixEKXtyZXR1cm4gRi1EfSl9O3EucHJvdG90eXBlLl9ob3dNYW55VGlja3M9ZnVuY3Rpb24ocix0KXt2YXIgdj10aGlzLl9hZGp1c3RlZExvZyhrLk1hdGgubWluKHRoaXMuX3VudHJhbnNmb3JtZWREb21haW4sMCkpLEE9dGhpcy5fYWRqdXN0ZWRMb2coay5NYXRoLm1heCh0aGlzLl91bnRyYW5zZm9ybWVkRG9tYWluLDApKTtyZXR1cm4gTWF0aC5jZWlsKCh0aGlzLl9hZGp1c3RlZExvZyh0KS10aGlzLl9hZGp1c3RlZExvZyhyKSkvKEEtdikqbS5Nb2RpZmllZExvZy5fREVGQVVMVF9OVU1fVElDS1MpfTtxLnByb3RvdHlwZS5fbmljZURvbWFpbj1mdW5jdGlvbihyKXtyZXR1cm4gcn07cS5wcm90b3R5cGUuX2RlZmF1bHRFeHRlbnQ9ZnVuY3Rpb24oKXtyZXR1cm5bMCx0aGlzLl9iYXNlXX07cS5wcm90b3R5cGUuX2V4cGFuZFNpbmdsZVZhbHVlRG9tYWluPQpmdW5jdGlvbihyKXtyZXR1cm4gclswXT09PXJbMV0/KHI9clswXSwwPHI/W3IvdGhpcy5fYmFzZSxyKnRoaXMuX2Jhc2VdOjA9PT1yP1stdGhpcy5fYmFzZSx0aGlzLl9iYXNlXTpbcip0aGlzLl9iYXNlLHIvdGhpcy5fYmFzZV0pOnJ9O3EucHJvdG90eXBlLl9nZXRSYW5nZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kM1NjYWxlLnJhbmdlKCl9O3EucHJvdG90eXBlLl9zZXRSYW5nZT1mdW5jdGlvbihyKXt0aGlzLl9kM1NjYWxlLnJhbmdlKHIpfTtxLnByb3RvdHlwZS5kZWZhdWx0VGlja3M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZDNTY2FsZS50aWNrcygpfTtyZXR1cm4gcX0oZigxMSkuUXVhbnRpdGF0aXZlU2NhbGUpO2QuTW9kaWZpZWRMb2c9Y30sZnVuY3Rpb24oYyxkLGYpe3ZhciBnPWYoMCk7ZC5pbnRlcnZhbFRpY2tHZW5lcmF0b3I9ZnVuY3Rpb24obCl7aWYoMD49bCl0aHJvdyBFcnJvcigiaW50ZXJ2YWwgbXVzdCBiZSBwb3NpdGl2ZSBudW1iZXIiKTtyZXR1cm4gZnVuY3Rpb24oayl7az0Kay5kb21haW4oKTt2YXIgbT1NYXRoLm1pbihrWzBdLGtbMV0pO2s9TWF0aC5tYXgoa1swXSxrWzFdKTt2YXIgcD1NYXRoLmNlaWwobS9sKSpsO209MD09PW0lbD9bXTpbbV07dmFyIHE9Zy5NYXRoLnJhbmdlKDAsTWF0aC5mbG9vcigoay1wKS9sKSsxKS5tYXAoZnVuY3Rpb24ocil7cmV0dXJuIHArcipsfSk7cmV0dXJuIG0uY29uY2F0KHEpLmNvbmNhdCgwPT09ayVsP1tdOltrXSl9fTtkLmludGVnZXJUaWNrR2VuZXJhdG9yPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKGwpe3ZhciBrPWwuZGVmYXVsdFRpY2tzKCk7cmV0dXJuIGsuZmlsdGVyKGZ1bmN0aW9uKG0scCl7cmV0dXJuIDA9PT1tJTF8fDA9PT1wfHxwPT09ay5sZW5ndGgtMX0pfX19LGZ1bmN0aW9uKGMsZCxmKXt2YXIgZz10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8ZnVuY3Rpb24obSxwKXtmdW5jdGlvbiBxKCl7dGhpcy5jb25zdHJ1Y3Rvcj1tfWZvcih2YXIgciBpbiBwKXAuaGFzT3duUHJvcGVydHkocikmJihtW3JdPXBbcl0pOwptLnByb3RvdHlwZT1udWxsPT09cD9PYmplY3QuY3JlYXRlKHApOihxLnByb3RvdHlwZT1wLnByb3RvdHlwZSxuZXcgcSl9LGw9ZigxKSxrPWYoMjgpO2M9ZnVuY3Rpb24obSl7ZnVuY3Rpb24gcCgpe3ZhciBxPW0uY2FsbCh0aGlzKXx8dGhpcztxLl9kM1NjYWxlPWwuc2NhbGVUaW1lKCk7cS5hdXRvRG9tYWluKCk7cmV0dXJuIHF9ZyhwLG0pO3AucHJvdG90eXBlLnRpY2tJbnRlcnZhbD1mdW5jdGlvbihxLHIpe3ZvaWQgMD09PXImJihyPTEpO3ZhciB0PWwuc2NhbGVUaW1lKCk7cC50aW1lSW50ZXJ2YWxUb0QzVGltZShxKS5ldmVyeShyKTt0LmRvbWFpbih0aGlzLmRvbWFpbigpKTt0LnJhbmdlKHRoaXMucmFuZ2UoKSk7cmV0dXJuIHQudGlja3MoKX07cC5wcm90b3R5cGUuX3NldERvbWFpbj1mdW5jdGlvbihxKXtpZihxWzFdPHFbMF0pdGhyb3cgRXJyb3IoIlNjYWxlLlRpbWUgZG9tYWluIHZhbHVlcyBtdXN0IGJlIGluIGNocm9ub2xvZ2ljYWwgb3JkZXIiKTtyZXR1cm4gbS5wcm90b3R5cGUuX3NldERvbWFpbi5jYWxsKHRoaXMsCnEpfTtwLnByb3RvdHlwZS5fZGVmYXVsdEV4dGVudD1mdW5jdGlvbigpe3JldHVybltuZXcgRGF0ZSgiMTk3MC0wMS0wMSIpLG5ldyBEYXRlKCIxOTcwLTAxLTAyIildfTtwLnByb3RvdHlwZS5fZXhwYW5kU2luZ2xlVmFsdWVEb21haW49ZnVuY3Rpb24ocSl7dmFyIHI9cVswXS5nZXRUaW1lKCksdD1xWzFdLmdldFRpbWUoKTtyZXR1cm4gcj09PXQ/KHE9bmV3IERhdGUocikscS5zZXREYXRlKHEuZ2V0RGF0ZSgpLTEpLHQ9bmV3IERhdGUodCksdC5zZXREYXRlKHQuZ2V0RGF0ZSgpKzEpLFtxLHRdKTpxfTtwLnByb3RvdHlwZS5zY2FsZT1mdW5jdGlvbihxKXtyZXR1cm4gdGhpcy5fZDNTY2FsZShxKX07cC5wcm90b3R5cGUuc2NhbGVUcmFuc2Zvcm1hdGlvbj1mdW5jdGlvbihxKXtyZXR1cm4gdGhpcy5zY2FsZShuZXcgRGF0ZShxKSl9O3AucHJvdG90eXBlLmludmVydGVkVHJhbnNmb3JtYXRpb249ZnVuY3Rpb24ocSl7cmV0dXJuIHRoaXMuaW52ZXJ0KHEpLmdldFRpbWUoKX07cC5wcm90b3R5cGUuZ2V0VHJhbnNmb3JtYXRpb25FeHRlbnQ9CmZ1bmN0aW9uKCl7dmFyIHE9dGhpcy5fZ2V0VW5ib3VuZGVkRXh0ZW50KCEwKTtyZXR1cm5bcVswXS52YWx1ZU9mKCkscVsxXS52YWx1ZU9mKCldfTtwLnByb3RvdHlwZS5nZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbj1mdW5jdGlvbigpe3ZhciBxPXRoaXMuZG9tYWluKCk7cmV0dXJuW3FbMF0udmFsdWVPZigpLHFbMV0udmFsdWVPZigpXX07cC5wcm90b3R5cGUuc2V0VHJhbnNmb3JtYXRpb25Eb21haW49ZnVuY3Rpb24ocSl7dGhpcy5kb21haW4oW25ldyBEYXRlKHFbMF0pLG5ldyBEYXRlKHFbMV0pXSl9O3AucHJvdG90eXBlLl9nZXREb21haW49ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYmFja2luZ1NjYWxlRG9tYWluKCl9O3AucHJvdG90eXBlLl9iYWNraW5nU2NhbGVEb21haW49ZnVuY3Rpb24ocSl7aWYobnVsbD09cSlyZXR1cm4gdGhpcy5fZDNTY2FsZS5kb21haW4oKTt0aGlzLl9kM1NjYWxlLmRvbWFpbihxKTtyZXR1cm4gdGhpc307cC5wcm90b3R5cGUuX2dldFJhbmdlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2QzU2NhbGUucmFuZ2UoKX07CnAucHJvdG90eXBlLl9zZXRSYW5nZT1mdW5jdGlvbihxKXt0aGlzLl9kM1NjYWxlLnJhbmdlKHEpfTtwLnByb3RvdHlwZS5pbnZlcnQ9ZnVuY3Rpb24ocSl7cmV0dXJuIHRoaXMuX2QzU2NhbGUuaW52ZXJ0KHEpfTtwLnByb3RvdHlwZS5kZWZhdWx0VGlja3M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZDNTY2FsZS50aWNrcygpfTtwLnByb3RvdHlwZS5fbmljZURvbWFpbj1mdW5jdGlvbihxKXtyZXR1cm4gdGhpcy5fZDNTY2FsZS5jb3B5KCkuZG9tYWluKHEpLm5pY2UoKS5kb21haW4oKX07cC50aW1lSW50ZXJ2YWxUb0QzVGltZT1mdW5jdGlvbihxKXtzd2l0Y2gocSl7Y2FzZSBrLlRpbWVJbnRlcnZhbC5zZWNvbmQ6cmV0dXJuIGwudGltZVNlY29uZDtjYXNlIGsuVGltZUludGVydmFsLm1pbnV0ZTpyZXR1cm4gbC50aW1lTWludXRlO2Nhc2Ugay5UaW1lSW50ZXJ2YWwuaG91cjpyZXR1cm4gbC50aW1lSG91cjtjYXNlIGsuVGltZUludGVydmFsLmRheTpyZXR1cm4gbC50aW1lRGF5OwpjYXNlIGsuVGltZUludGVydmFsLndlZWs6cmV0dXJuIGwudGltZVdlZWs7Y2FzZSBrLlRpbWVJbnRlcnZhbC5tb250aDpyZXR1cm4gbC50aW1lTW9udGg7Y2FzZSBrLlRpbWVJbnRlcnZhbC55ZWFyOnJldHVybiBsLnRpbWVZZWFyO2RlZmF1bHQ6dGhyb3cgRXJyb3IoIlRpbWVJbnRlcnZhbCBzcGVjaWZpZWQgZG9lcyBub3QgZXhpc3Q6ICIrcSk7fX07cmV0dXJuIHB9KGYoMTEpLlF1YW50aXRhdGl2ZVNjYWxlKTtkLlRpbWU9Y30sZnVuY3Rpb24oYyxkLGYpe3ZhciBnPWYoMSksbD1BcnJheTtkLmFkZD1mdW5jdGlvbihrLG0pe2lmKGsubGVuZ3RoIT09bS5sZW5ndGgpdGhyb3cgRXJyb3IoImF0dGVtcHRlZCB0byBhZGQgYXJyYXlzIG9mIHVuZXF1YWwgbGVuZ3RoIik7cmV0dXJuIGsubWFwKGZ1bmN0aW9uKHAscSl7cmV0dXJuIGtbcV0rbVtxXX0pfTtkLnVuaXE9ZnVuY3Rpb24oayl7dmFyIG09Zy5zZXQoKSxwPVtdO2suZm9yRWFjaChmdW5jdGlvbihxKXttLmhhcyhTdHJpbmcocSkpfHwKKG0uYWRkKFN0cmluZyhxKSkscC5wdXNoKHEpKX0pO3JldHVybiBwfTtkLmZsYXR0ZW49ZnVuY3Rpb24oayl7cmV0dXJuIGwucHJvdG90eXBlLmNvbmNhdC5hcHBseShbXSxrKX07ZC5jcmVhdGVGaWxsZWRBcnJheT1mdW5jdGlvbihrLG0pe2Zvcih2YXIgcD1bXSxxPTA7cTxtO3ErKylwW3FdPSJmdW5jdGlvbiI9PT10eXBlb2Ygaz9rKHEpOms7cmV0dXJuIHB9fSxmdW5jdGlvbihjLGQpe2M9ZnVuY3Rpb24oKXtmdW5jdGlvbiBmKGcsbCxrKXt0aGlzLm1heEluZGV4PXRoaXMubWluSW5kZXg9dGhpcy5leGl0SW5kZXg9dGhpcy5lbnRyeUluZGV4PWc7dGhpcy5idWNrZXRWYWx1ZT1sO3RoaXMubWF4VmFsdWU9dGhpcy5taW5WYWx1ZT1rfWYucHJvdG90eXBlLmlzSW5CdWNrZXQ9ZnVuY3Rpb24oZyl7cmV0dXJuIGc9PXRoaXMuYnVja2V0VmFsdWV9O2YucHJvdG90eXBlLmFkZFRvQnVja2V0PWZ1bmN0aW9uKGcsbCl7Zzx0aGlzLm1pblZhbHVlJiYodGhpcy5taW5WYWx1ZT1nLHRoaXMubWluSW5kZXg9CmwpO2c+dGhpcy5tYXhWYWx1ZSYmKHRoaXMubWF4VmFsdWU9Zyx0aGlzLm1heEluZGV4PWwpO3RoaXMuZXhpdEluZGV4PWx9O2YucHJvdG90eXBlLmdldFVuaXF1ZUluZGljZXM9ZnVuY3Rpb24oKXt2YXIgZz1bdGhpcy5lbnRyeUluZGV4LHRoaXMubWF4SW5kZXgsdGhpcy5taW5JbmRleCx0aGlzLmV4aXRJbmRleF07cmV0dXJuIGcuZmlsdGVyKGZ1bmN0aW9uKGwsayl7cmV0dXJuIDA9PWt8fGwhPWdbay0xXX0pfTtyZXR1cm4gZn0oKTtkLkJ1Y2tldD1jfSxmdW5jdGlvbihjLGQsZil7dmFyIGc9dGhpcyYmdGhpcy5fX2V4dGVuZHN8fGZ1bmN0aW9uKGwsayl7ZnVuY3Rpb24gbSgpe3RoaXMuY29uc3RydWN0b3I9bH1mb3IodmFyIHAgaW4gaylrLmhhc093blByb3BlcnR5KHApJiYobFtwXT1rW3BdKTtsLnByb3RvdHlwZT1udWxsPT09az9PYmplY3QuY3JlYXRlKGspOihtLnByb3RvdHlwZT1rLnByb3RvdHlwZSxuZXcgbSl9O2M9ZnVuY3Rpb24obCl7ZnVuY3Rpb24gaygpe3JldHVybiBudWxsIT09CmwmJmwuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfWcoayxsKTtrLnByb3RvdHlwZS5jYWxsQ2FsbGJhY2tzPWZ1bmN0aW9uKCl7Zm9yKHZhciBtPXRoaXMscD1bXSxxPTA7cTxhcmd1bWVudHMubGVuZ3RoO3ErKylwW3FdPWFyZ3VtZW50c1txXTt0aGlzLmZvckVhY2goZnVuY3Rpb24ocil7ci5hcHBseShtLHApfSk7cmV0dXJuIHRoaXN9O3JldHVybiBrfShmKDU4KS5TZXQpO2QuQ2FsbGJhY2tTZXQ9Y30sZnVuY3Rpb24oYyxkLGYpe2Z1bmN0aW9uIGcobSl7ZnVuY3Rpb24gcCh0KXt0Lz0yNTU7cmV0dXJuLjAzOTI4Pj10P3QvMTIuOTI6ay5wb3coKHQrLjA1NSkvMS4wNTUsMi40KX12YXIgcT1sLnJnYihtKTttPXAocS5yKTt2YXIgcj1wKHEuZyk7cT1wKHEuYik7cmV0dXJuLjIxMjYqbSsuNzE1MipyKy4wNzIyKnF9dmFyIGw9ZigxKSxrPU1hdGg7ZC5jb250cmFzdD1mdW5jdGlvbihtLHApe209ZyhtKSsuMDU7cD1nKHApKy4wNTtyZXR1cm4gbT5wP20vcDpwL219O2QubGlnaHRlbkNvbG9yPQpmdW5jdGlvbihtLHApe3JldHVybiBsLmNvbG9yKG0pLmJyaWdodGVyKHApLnJnYigpLnRvU3RyaW5nKCl9O2QuY29sb3JUZXN0PWZ1bmN0aW9uKG0scCl7bS5jbGFzc2VkKHAsITApO3ZhciBxPW0uc3R5bGUoImJhY2tncm91bmQtY29sb3IiKTtpZigidHJhbnNwYXJlbnQiPT09cSlyZXR1cm4gbnVsbDtxPS9cKCguKylcKS8uZXhlYyhxKTtpZighcSlyZXR1cm4gbnVsbDtxPXFbMV0uc3BsaXQoIiwiKS5tYXAoZnVuY3Rpb24ocil7cj0rcjt2YXIgdD1yLnRvU3RyaW5nKDE2KTtyZXR1cm4gMTY+cj8iMCIrdDp0fSk7aWYoND09PXEubGVuZ3RoJiYiMDAiPT09cVszXSlyZXR1cm4gbnVsbDtxPSIjIitxLmpvaW4oIiIpO20uY2xhc3NlZChwLCExKTtyZXR1cm4gcX19LGZ1bmN0aW9uKGMsZCxmKXt2YXIgZz1mKDEpLGw9Zig1Nyk7Yz1mdW5jdGlvbigpe2Z1bmN0aW9uIGsoKXt0aGlzLl9lbnRpdGllcz1bXTt0aGlzLl9ydHJlZT1uZXcgbC5SVHJlZTt0aGlzLl90cmVlPWcucXVhZHRyZWUoKS54KGZ1bmN0aW9uKG0pe3JldHVybiBNYXRoLmZsb29yKG0ucG9zaXRpb24ueCl9KS55KGZ1bmN0aW9uKG0pe3JldHVybiBNYXRoLmZsb29yKG0ucG9zaXRpb24ueSl9KX0Kay5wcm90b3R5cGUuYWRkQWxsPWZ1bmN0aW9uKG0scCxxKXsodj10aGlzLl9lbnRpdGllcykucHVzaC5hcHBseSh2LG0pO2lmKHZvaWQgMCE9PXEpZm9yKHE9bC5SVHJlZUJvdW5kcy5ib3VuZHMocSksdj0wO3Y8bS5sZW5ndGg7disrKXt2YXIgcj1tW3ZdLHQ9bC5SVHJlZUJvdW5kcy5lbnRpdHlCb3VuZHMocChyKSk7bC5SVHJlZUJvdW5kcy5pc0JvdW5kc092ZXJsYXBCb3VuZHMocSx0KSYmKHRoaXMuX3RyZWUuYWRkKHIpLHRoaXMuX3J0cmVlLmluc2VydCh0LHIpKX1lbHNlIGZvcih0aGlzLl90cmVlLmFkZEFsbChtKSx2PTA7djxtLmxlbmd0aDt2Kyspcj1tW3ZdLHQ9bC5SVHJlZUJvdW5kcy5lbnRpdHlCb3VuZHMocChyKSksdGhpcy5fcnRyZWUuaW5zZXJ0KHQscik7dmFyIHZ9O2sucHJvdG90eXBlLmVudGl0eU5lYXJlc3Q9ZnVuY3Rpb24obSl7cmV0dXJuIHRoaXMuX3RyZWUuZmluZChtLngsbS55KX07ay5wcm90b3R5cGUuZW50aXRpZXNJbkJvdW5kcz1mdW5jdGlvbihtKXtyZXR1cm4gdGhpcy5fcnRyZWUuaW50ZXJzZWN0KGwuUlRyZWVCb3VuZHMuZW50aXR5Qm91bmRzKG0pKX07CmsucHJvdG90eXBlLmVudGl0aWVzSW5YQm91bmRzPWZ1bmN0aW9uKG0pe3JldHVybiB0aGlzLl9ydHJlZS5pbnRlcnNlY3RYKGwuUlRyZWVCb3VuZHMuZW50aXR5Qm91bmRzKG0pKX07ay5wcm90b3R5cGUuZW50aXRpZXNJbllCb3VuZHM9ZnVuY3Rpb24obSl7cmV0dXJuIHRoaXMuX3J0cmVlLmludGVyc2VjdFkobC5SVHJlZUJvdW5kcy5lbnRpdHlCb3VuZHMobSkpfTtrLnByb3RvdHlwZS5lbnRpdGllcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbnRpdGllc307cmV0dXJuIGt9KCk7ZC5FbnRpdHlTdG9yZT1jfSxmdW5jdGlvbihjLGQsZil7dmFyIGc9Zig1Nik7Yz1mdW5jdGlvbigpe2Z1bmN0aW9uIGwoKXsiZnVuY3Rpb24iPT09dHlwZW9mIHdpbmRvdy5NYXA/dGhpcy5fZXM2TWFwPW5ldyB3aW5kb3cuTWFwOnRoaXMuX2tleVZhbHVlUGFpcnM9W119bC5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGssbSl7aWYoZy5pc05hTihrKSl0aHJvdyBFcnJvcigiTmFOIG1heSBub3QgYmUgdXNlZCBhcyBhIGtleSB0byB0aGUgTWFwIik7CmlmKG51bGwhPXRoaXMuX2VzNk1hcClyZXR1cm4gdGhpcy5fZXM2TWFwLnNldChrLG0pLHRoaXM7Zm9yKHZhciBwPTA7cDx0aGlzLl9rZXlWYWx1ZVBhaXJzLmxlbmd0aDtwKyspaWYodGhpcy5fa2V5VmFsdWVQYWlyc1twXS5rZXk9PT1rKXJldHVybiB0aGlzLl9rZXlWYWx1ZVBhaXJzW3BdLnZhbHVlPW0sdGhpczt0aGlzLl9rZXlWYWx1ZVBhaXJzLnB1c2goe2tleTprLHZhbHVlOm19KTtyZXR1cm4gdGhpc307bC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGspe2lmKG51bGwhPXRoaXMuX2VzNk1hcClyZXR1cm4gdGhpcy5fZXM2TWFwLmdldChrKTtmb3IodmFyIG09MDttPHRoaXMuX2tleVZhbHVlUGFpcnMubGVuZ3RoO20rKylpZih0aGlzLl9rZXlWYWx1ZVBhaXJzW21dLmtleT09PWspcmV0dXJuIHRoaXMuX2tleVZhbHVlUGFpcnNbbV0udmFsdWV9O2wucHJvdG90eXBlLmhhcz1mdW5jdGlvbihrKXtpZihudWxsIT10aGlzLl9lczZNYXApcmV0dXJuIHRoaXMuX2VzNk1hcC5oYXMoayk7CmZvcih2YXIgbT0wO208dGhpcy5fa2V5VmFsdWVQYWlycy5sZW5ndGg7bSsrKWlmKHRoaXMuX2tleVZhbHVlUGFpcnNbbV0ua2V5PT09aylyZXR1cm4hMDtyZXR1cm4hMX07bC5wcm90b3R5cGUuZm9yRWFjaD1mdW5jdGlvbihrLG0pe3ZhciBwPXRoaXM7bnVsbCE9dGhpcy5fZXM2TWFwP3RoaXMuX2VzNk1hcC5mb3JFYWNoKGZ1bmN0aW9uKHEscil7cmV0dXJuIGsuY2FsbChtLHEscixwKX0sbSk6dGhpcy5fa2V5VmFsdWVQYWlycy5mb3JFYWNoKGZ1bmN0aW9uKHEpe2suY2FsbChtLHEudmFsdWUscS5rZXkscCl9KX07bC5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKGspe2lmKG51bGwhPXRoaXMuX2VzNk1hcClyZXR1cm4gdGhpcy5fZXM2TWFwLmRlbGV0ZShrKTtmb3IodmFyIG09MDttPHRoaXMuX2tleVZhbHVlUGFpcnMubGVuZ3RoO20rKylpZih0aGlzLl9rZXlWYWx1ZVBhaXJzW21dLmtleT09PWspcmV0dXJuIHRoaXMuX2tleVZhbHVlUGFpcnMuc3BsaWNlKG0sMSksITA7cmV0dXJuITF9OwpyZXR1cm4gbH0oKTtkLk1hcD1jfSxmdW5jdGlvbihjLGQpe2QuYXNzaWduPWZ1bmN0aW9uKCl7Zm9yKHZhciBmPVtdLGc9MDtnPGFyZ3VtZW50cy5sZW5ndGg7ZysrKWZbZ109YXJndW1lbnRzW2ddO2c9e307Zm9yKHZhciBsPTA7bDxmLmxlbmd0aDtsKyspZm9yKHZhciBrPWZbbF0sbT0wLHA9T2JqZWN0LmtleXMoayk7bTxwLmxlbmd0aDttKyspe3ZhciBxPXBbbV07Z1txXT1rW3FdfXJldHVybiBnfX0sZnVuY3Rpb24oYyxkKXtjPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZigpe31mLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihnLGwpe2Zvcih2YXIgaz1NYXRoLmNlaWwoZy5sZW5ndGgvMiksbT0wO208azttKyspbFswXS5pbnNlcnQoZ1ttXSk7Zm9yKG09azttPGcubGVuZ3RoO20rKylsWzFdLmluc2VydChnW21dKX07cmV0dXJuIGZ9KCk7ZC5TcGxpdFN0cmF0ZWd5VHJpdmlhbD1jO2M9ZnVuY3Rpb24oKXtmdW5jdGlvbiBmKCl7fWYucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKGcsbCl7Zz0KZy5zbGljZSgpO2Zvcih0aGlzLmNob29zZUZpcnN0U3BsaXQoZyxsKTswPGcubGVuZ3RoOyl0aGlzLmFkZE5leHQoZyxsKX07Zi5wcm90b3R5cGUuY2hvb3NlRmlyc3RTcGxpdD1mdW5jdGlvbihnLGwpe2Zvcih2YXIgaz0wLG09MCxwPWcubGVuZ3RoLTEscT1nLmxlbmd0aC0xLHI9MTtyPGcubGVuZ3RoLTE7cisrKXt2YXIgdD1nW3JdO3QuYm91bmRzLnhsPmdbcF0uYm91bmRzLnhsP3A9cjp0LmJvdW5kcy54aDxnW2tdLmJvdW5kcy54aCYmKGs9cik7dC5ib3VuZHMueWw+Z1txXS5ib3VuZHMueWw/cT1yOnQuYm91bmRzLnloPGdbbV0uYm91bmRzLnloJiYobT1yKX1tPU1hdGguYWJzKGdba10uYm91bmRzLnhoLWdbcF0uYm91bmRzLnhsKT5NYXRoLmFicyhnW21dLmJvdW5kcy55aC1nW3FdLmJvdW5kcy55bCk/W2sscF06W20scV07az1tWzBdO209bVsxXTtrPT09bSYmKGs9MCxtPWcubGVuZ3RoLTEpO2xbMF0uaW5zZXJ0KGcuc3BsaWNlKE1hdGgubWF4KGssbSksMSlbMF0pO2xbMV0uaW5zZXJ0KGcuc3BsaWNlKE1hdGgubWluKGssCm0pLDEpWzBdKX07Zi5wcm90b3R5cGUuYWRkTmV4dD1mdW5jdGlvbihnLGwpe2Zvcih2YXIgaz1udWxsLG09bnVsbCxwPW51bGwscT0wO3E8Zy5sZW5ndGg7cSsrKXt2YXIgcj1nW3FdLHQ9bFswXS51bmlvbkFyZWFEaWZmZXJlbmNlKHIuYm91bmRzKTtyPWxbMV0udW5pb25BcmVhRGlmZmVyZW5jZShyLmJvdW5kcyk7aWYodDxtfHxudWxsPT1rKWs9cSxtPXQscD1sWzBdO3I8bSYmKGs9cSxtPXIscD1sWzFdKX1wLmluc2VydChnLnNwbGljZShrLDEpWzBdKX07cmV0dXJuIGZ9KCk7ZC5TcGxpdFN0cmF0ZWd5TGluZWFyPWN9LGZ1bmN0aW9uKGMsZCxmKXtmdW5jdGlvbiBnKHApe3JldHVybiBTdHJpbmcocCl9dmFyIGw9ZigxKSxrPWYoMCk7Yz1mKDEwKTtkLklTdGFja2luZ09yZGVyPWMubWFrZUVudW0oWyJ0b3Bkb3duIiwiYm90dG9tdXAiXSk7dmFyIG09TWF0aDtkLnN0YWNrPWZ1bmN0aW9uKHAscSxyLHQpe3ZvaWQgMD09PXQmJih0PSJib3R0b211cCIpO3ZhciB2PWwubWFwKCksQT0KbC5tYXAoKSx5PW5ldyBrLk1hcDsidG9wZG93biI9PT10JiYocD1wLnNsaWNlKCkscC5yZXZlcnNlKCkpO3AuZm9yRWFjaChmdW5jdGlvbih4KXt2YXIgQz1uZXcgay5NYXA7eC5kYXRhKCkuZm9yRWFjaChmdW5jdGlvbihGLEQpe3ZhciBCPWcocShGLEQseCkpLEc9K3IoRixELHgpLEs9MDw9Rz92OkE7aWYoSy5oYXMoQikpe3ZhciBMPUsuZ2V0KEIpO0suc2V0KEIsTCtHKX1lbHNlIEw9MCxLLnNldChCLEcpO0Muc2V0KEIse29mZnNldDpMLHZhbHVlOkcsYXhpc1ZhbHVlOnEoRixELHgpLG9yaWdpbmFsRGF0dW06RixvcmlnaW5hbERhdGFzZXQ6eCxvcmlnaW5hbEluZGV4OkR9KX0pO3kuc2V0KHgsQyl9KTtyZXR1cm4geX07ZC5zdGFja2VkRXh0ZW50cz1mdW5jdGlvbihwKXt2YXIgcT1uZXcgay5NYXAscj1uZXcgay5NYXA7cC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QuZm9yRWFjaChmdW5jdGlvbih2LEEpe3ZhciB5PWsuTWF0aC5tYXgoW3Yub2Zmc2V0K3YudmFsdWUsdi5vZmZzZXRdLAp2Lm9mZnNldCkseD1rLk1hdGgubWluKFt2Lm9mZnNldCt2LnZhbHVlLHYub2Zmc2V0XSx2Lm9mZnNldCksQz12LmF4aXNWYWx1ZTtxLmhhcyhBKT9xLmdldChBKS5leHRlbnQ8eSYmcS5zZXQoQSx7ZXh0ZW50OnksYXhpc1ZhbHVlOkMsc3RhY2tlZERhdHVtOnZ9KTpxLnNldChBLHtleHRlbnQ6eSxheGlzVmFsdWU6QyxzdGFja2VkRGF0dW06dn0pO3IuaGFzKEEpP3IuZ2V0KEEpLmV4dGVudD54JiZyLnNldChBLHtleHRlbnQ6eCxheGlzVmFsdWU6QyxzdGFja2VkRGF0dW06dn0pOnIuc2V0KEEse2V4dGVudDp4LGF4aXNWYWx1ZTpDLHN0YWNrZWREYXR1bTp2fSl9KX0pO3JldHVybnttYXhpbXVtRXh0ZW50czpxLG1pbmltdW1FeHRlbnRzOnJ9fTtkLnN0YWNrZWRFeHRlbnQ9ZnVuY3Rpb24ocCxxLHIpe3ZhciB0PVtdO3AuZm9yRWFjaChmdW5jdGlvbihBLHkpe3kuZGF0YSgpLmZvckVhY2goZnVuY3Rpb24oeCxDKXtpZihudWxsPT1yfHxyKHgsQyx5KSl4PUEuZ2V0KGcocSh4LEMseSkpKSwKdC5wdXNoKHgudmFsdWUreC5vZmZzZXQpfSl9KTtwPWsuTWF0aC5tYXgodCwwKTt2YXIgdj1rLk1hdGgubWluKHQsMCk7cmV0dXJuW20ubWluKHYsMCksbS5tYXgoMCxwKV19O2Qubm9ybWFsaXplS2V5PWd9LGZ1bmN0aW9uKGMsZCxmKXt2YXIgZz1mKDApO2QuZ2V0VHJhbnNsYXRvcj1mdW5jdGlvbihrKXtrPWsucm9vdCgpLnJvb3RFbGVtZW50KCkubm9kZSgpO3ZhciBtPWsuX19QbG90dGFibGVfQ2xpZW50VHJhbnNsYXRvcjtudWxsPT1tJiYobT1uZXcgbChrKSxrLl9fUGxvdHRhYmxlX0NsaWVudFRyYW5zbGF0b3I9bSk7cmV0dXJuIG19O3ZhciBsPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gayhtKXt0aGlzLl9yb290RWxlbWVudD1tfWsucHJvdG90eXBlLmNvbXB1dGVQb3NpdGlvbj1mdW5jdGlvbihtLHApe209e3g6bSx5OnB9O3A9Zy5NYXRoLmdldEN1bXVsYXRpdmVUcmFuc2Zvcm0odGhpcy5fcm9vdEVsZW1lbnQpO3JldHVybiBudWxsPT1wP206Zy5NYXRoLmFwcGx5VHJhbnNmb3JtKHAsCm0pfTtrLmlzRXZlbnRJbnNpZGU9ZnVuY3Rpb24obSxwKXtyZXR1cm4gZy5ET00uY29udGFpbnMobS5yb290KCkucm9vdEVsZW1lbnQoKS5ub2RlKCkscC50YXJnZXQpfTtyZXR1cm4ga30oKTtkLlRyYW5zbGF0b3I9bH0sZnVuY3Rpb24oYyxkLGYpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShkLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgZz1mKDEyNCk7Zi5kKGQsImVhc2VMaW5lYXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGcuYX0pO3ZhciBsPWYoMTI2KTtmLmQoZCwiZWFzZVF1YWQiLGZ1bmN0aW9uKCl7cmV0dXJuIGwuYX0pO2YuZChkLCJlYXNlUXVhZEluIixmdW5jdGlvbigpe3JldHVybiBsLmJ9KTtmLmQoZCwiZWFzZVF1YWRPdXQiLGZ1bmN0aW9uKCl7cmV0dXJuIGwuY30pO2YuZChkLCJlYXNlUXVhZEluT3V0IixmdW5jdGlvbigpe3JldHVybiBsLmF9KTt2YXIgaz1mKDEyMSk7Zi5kKGQsImVhc2VDdWJpYyIsZnVuY3Rpb24oKXtyZXR1cm4gay5hfSk7Zi5kKGQsImVhc2VDdWJpY0luIiwKZnVuY3Rpb24oKXtyZXR1cm4gay5ifSk7Zi5kKGQsImVhc2VDdWJpY091dCIsZnVuY3Rpb24oKXtyZXR1cm4gay5jfSk7Zi5kKGQsImVhc2VDdWJpY0luT3V0IixmdW5jdGlvbigpe3JldHVybiBrLmF9KTt2YXIgbT1mKDEyNSk7Zi5kKGQsImVhc2VQb2x5IixmdW5jdGlvbigpe3JldHVybiBtLmF9KTtmLmQoZCwiZWFzZVBvbHlJbiIsZnVuY3Rpb24oKXtyZXR1cm4gbS5ifSk7Zi5kKGQsImVhc2VQb2x5T3V0IixmdW5jdGlvbigpe3JldHVybiBtLmN9KTtmLmQoZCwiZWFzZVBvbHlJbk91dCIsZnVuY3Rpb24oKXtyZXR1cm4gbS5hfSk7dmFyIHA9ZigxMjcpO2YuZChkLCJlYXNlU2luIixmdW5jdGlvbigpe3JldHVybiBwLmF9KTtmLmQoZCwiZWFzZVNpbkluIixmdW5jdGlvbigpe3JldHVybiBwLmJ9KTtmLmQoZCwiZWFzZVNpbk91dCIsZnVuY3Rpb24oKXtyZXR1cm4gcC5jfSk7Zi5kKGQsImVhc2VTaW5Jbk91dCIsZnVuY3Rpb24oKXtyZXR1cm4gcC5hfSk7dmFyIHE9ZigxMjMpO2YuZChkLAoiZWFzZUV4cCIsZnVuY3Rpb24oKXtyZXR1cm4gcS5hfSk7Zi5kKGQsImVhc2VFeHBJbiIsZnVuY3Rpb24oKXtyZXR1cm4gcS5ifSk7Zi5kKGQsImVhc2VFeHBPdXQiLGZ1bmN0aW9uKCl7cmV0dXJuIHEuY30pO2YuZChkLCJlYXNlRXhwSW5PdXQiLGZ1bmN0aW9uKCl7cmV0dXJuIHEuYX0pO3ZhciByPWYoMTIwKTtmLmQoZCwiZWFzZUNpcmNsZSIsZnVuY3Rpb24oKXtyZXR1cm4gci5hfSk7Zi5kKGQsImVhc2VDaXJjbGVJbiIsZnVuY3Rpb24oKXtyZXR1cm4gci5ifSk7Zi5kKGQsImVhc2VDaXJjbGVPdXQiLGZ1bmN0aW9uKCl7cmV0dXJuIHIuY30pO2YuZChkLCJlYXNlQ2lyY2xlSW5PdXQiLGZ1bmN0aW9uKCl7cmV0dXJuIHIuYX0pO3ZhciB0PWYoMTE5KTtmLmQoZCwiZWFzZUJvdW5jZSIsZnVuY3Rpb24oKXtyZXR1cm4gdC5hfSk7Zi5kKGQsImVhc2VCb3VuY2VJbiIsZnVuY3Rpb24oKXtyZXR1cm4gdC5ifSk7Zi5kKGQsImVhc2VCb3VuY2VPdXQiLGZ1bmN0aW9uKCl7cmV0dXJuIHQuYX0pOwpmLmQoZCwiZWFzZUJvdW5jZUluT3V0IixmdW5jdGlvbigpe3JldHVybiB0LmN9KTt2YXIgdj1mKDExOCk7Zi5kKGQsImVhc2VCYWNrIixmdW5jdGlvbigpe3JldHVybiB2LmF9KTtmLmQoZCwiZWFzZUJhY2tJbiIsZnVuY3Rpb24oKXtyZXR1cm4gdi5ifSk7Zi5kKGQsImVhc2VCYWNrT3V0IixmdW5jdGlvbigpe3JldHVybiB2LmN9KTtmLmQoZCwiZWFzZUJhY2tJbk91dCIsZnVuY3Rpb24oKXtyZXR1cm4gdi5hfSk7dmFyIEE9ZigxMjIpO2YuZChkLCJlYXNlRWxhc3RpYyIsZnVuY3Rpb24oKXtyZXR1cm4gQS5hfSk7Zi5kKGQsImVhc2VFbGFzdGljSW4iLGZ1bmN0aW9uKCl7cmV0dXJuIEEuYn0pO2YuZChkLCJlYXNlRWxhc3RpY091dCIsZnVuY3Rpb24oKXtyZXR1cm4gQS5hfSk7Zi5kKGQsImVhc2VFbGFzdGljSW5PdXQiLGZ1bmN0aW9uKCl7cmV0dXJuIEEuY30pfSxmdW5jdGlvbihjLGQsZil7Zi5kKGQsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIGd9KTtmLmQoZCwiYyIsZnVuY3Rpb24oKXtyZXR1cm4gbH0pOwpmLmQoZCwiYSIsZnVuY3Rpb24oKXtyZXR1cm4ga30pO3ZhciBnPWZ1bmN0aW9uIHEocCl7ZnVuY3Rpb24gcih0KXtyZXR1cm4gdCp0KigocCsxKSp0LXApfXA9K3A7ci5vdmVyc2hvb3Q9cTtyZXR1cm4gcn0oMS43MDE1OCksbD1mdW5jdGlvbiByKHEpe2Z1bmN0aW9uIHQodil7cmV0dXJuLS12KnYqKChxKzEpKnYrcSkrMX1xPStxO3Qub3ZlcnNob290PXI7cmV0dXJuIHR9KDEuNzAxNTgpLGs9ZnVuY3Rpb24gdChyKXtmdW5jdGlvbiB2KEEpe3JldHVybigxPihBKj0yKT9BKkEqKChyKzEpKkEtcik6KEEtPTIpKkEqKChyKzEpKkErcikrMikvMn1yPStyO3Yub3ZlcnNob290PXQ7cmV0dXJuIHZ9KDEuNzAxNTgpfSxmdW5jdGlvbihjLGQpe2Z1bmN0aW9uIGYoeSl7cmV0dXJuKHk9K3kpPGc/QSp5Knk6eTxrP0EqKHktPWwpKnkrbTp5PHE/QSooeS09cCkqeStyOkEqKHktPXQpKnkrdn1kLmI9ZnVuY3Rpb24oeSl7cmV0dXJuIDEtZigxLXkpfTtkLmE9ZjtkLmM9ZnVuY3Rpb24oeSl7cmV0dXJuKDE+PQooeSo9Mik/MS1mKDEteSk6Zih5LTEpKzEpLzJ9O3ZhciBnPTQvMTEsbD02LzExLGs9OC8xMSxtPS43NSxwPTkvMTEscT0xMC8xMSxyPS45Mzc1LHQ9MjEvMjIsdj0uOTg0Mzc1LEE9MS9nL2d9LGZ1bmN0aW9uKGMsZCl7ZC5iPWZ1bmN0aW9uKGYpe3JldHVybiAxLU1hdGguc3FydCgxLWYqZil9O2QuYz1mdW5jdGlvbihmKXtyZXR1cm4gTWF0aC5zcXJ0KDEtIC0tZipmKX07ZC5hPWZ1bmN0aW9uKGYpe3JldHVybigxPj0oZio9Mik/MS1NYXRoLnNxcnQoMS1mKmYpOk1hdGguc3FydCgxLShmLT0yKSpmKSsxKS8yfX0sZnVuY3Rpb24oYyxkKXtkLmI9ZnVuY3Rpb24oZil7cmV0dXJuIGYqZipmfTtkLmM9ZnVuY3Rpb24oZil7cmV0dXJuLS1mKmYqZisxfTtkLmE9ZnVuY3Rpb24oZil7cmV0dXJuKDE+PShmKj0yKT9mKmYqZjooZi09MikqZipmKzIpLzJ9fSxmdW5jdGlvbihjLGQsZil7Zi5kKGQsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIGx9KTtmLmQoZCwiYSIsZnVuY3Rpb24oKXtyZXR1cm4ga30pOwpmLmQoZCwiYyIsZnVuY3Rpb24oKXtyZXR1cm4gbX0pO3ZhciBnPTIqTWF0aC5QSSxsPWZ1bmN0aW9uIHQocSxyKXtmdW5jdGlvbiB2KHkpe3JldHVybiBxKk1hdGgucG93KDIsMTAqLS15KSpNYXRoLnNpbigoQS15KS9yKX12YXIgQT1NYXRoLmFzaW4oMS8ocT1NYXRoLm1heCgxLHEpKSkqKHIvPWcpO3YuYW1wbGl0dWRlPWZ1bmN0aW9uKHkpe3JldHVybiB0KHkscipnKX07di5wZXJpb2Q9ZnVuY3Rpb24oeSl7cmV0dXJuIHQocSx5KX07cmV0dXJuIHZ9KDEsLjMpLGs9ZnVuY3Rpb24gdihyLHQpe2Z1bmN0aW9uIEEoeCl7cmV0dXJuIDEtcipNYXRoLnBvdygyLC0xMCooeD0reCkpKk1hdGguc2luKCh4K3kpL3QpfXZhciB5PU1hdGguYXNpbigxLyhyPU1hdGgubWF4KDEscikpKSoodC89Zyk7QS5hbXBsaXR1ZGU9ZnVuY3Rpb24oeCl7cmV0dXJuIHYoeCx0KmcpfTtBLnBlcmlvZD1mdW5jdGlvbih4KXtyZXR1cm4gdihyLHgpfTtyZXR1cm4gQX0oMSwuMyksbT1mdW5jdGlvbiBBKHQsdil7ZnVuY3Rpb24geShDKXtyZXR1cm4oMD4KKEM9MipDLTEpP3QqTWF0aC5wb3coMiwxMCpDKSpNYXRoLnNpbigoeC1DKS92KToyLXQqTWF0aC5wb3coMiwtMTAqQykqTWF0aC5zaW4oKHgrQykvdikpLzJ9dmFyIHg9TWF0aC5hc2luKDEvKHQ9TWF0aC5tYXgoMSx0KSkpKih2Lz1nKTt5LmFtcGxpdHVkZT1mdW5jdGlvbihDKXtyZXR1cm4gQShDLHYqZyl9O3kucGVyaW9kPWZ1bmN0aW9uKEMpe3JldHVybiBBKHQsQyl9O3JldHVybiB5fSgxLC4zKX0sZnVuY3Rpb24oYyxkKXtkLmI9ZnVuY3Rpb24oZil7cmV0dXJuIE1hdGgucG93KDIsMTAqZi0xMCl9O2QuYz1mdW5jdGlvbihmKXtyZXR1cm4gMS1NYXRoLnBvdygyLC0xMCpmKX07ZC5hPWZ1bmN0aW9uKGYpe3JldHVybigxPj0oZio9Mik/TWF0aC5wb3coMiwxMCpmLTEwKToyLU1hdGgucG93KDIsMTAtMTAqZikpLzJ9fSxmdW5jdGlvbihjLGQpe2QuYT1mdW5jdGlvbihmKXtyZXR1cm4rZn19LGZ1bmN0aW9uKGMsZCxmKXtmLmQoZCwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gZ30pO2YuZChkLAoiYyIsZnVuY3Rpb24oKXtyZXR1cm4gbH0pO2YuZChkLCJhIixmdW5jdGlvbigpe3JldHVybiBrfSk7dmFyIGc9ZnVuY3Rpb24gcShwKXtmdW5jdGlvbiByKHQpe3JldHVybiBNYXRoLnBvdyh0LHApfXA9K3A7ci5leHBvbmVudD1xO3JldHVybiByfSgzKSxsPWZ1bmN0aW9uIHIocSl7ZnVuY3Rpb24gdCh2KXtyZXR1cm4gMS1NYXRoLnBvdygxLXYscSl9cT0rcTt0LmV4cG9uZW50PXI7cmV0dXJuIHR9KDMpLGs9ZnVuY3Rpb24gdChyKXtmdW5jdGlvbiB2KEEpe3JldHVybigxPj0oQSo9Mik/TWF0aC5wb3coQSxyKToyLU1hdGgucG93KDItQSxyKSkvMn1yPStyO3YuZXhwb25lbnQ9dDtyZXR1cm4gdn0oMyl9LGZ1bmN0aW9uKGMsZCl7ZC5iPWZ1bmN0aW9uKGYpe3JldHVybiBmKmZ9O2QuYz1mdW5jdGlvbihmKXtyZXR1cm4gZiooMi1mKX07ZC5hPWZ1bmN0aW9uKGYpe3JldHVybigxPj0oZio9Mik/ZipmOi0tZiooMi1mKSsxKS8yfX0sZnVuY3Rpb24oYyxkKXtkLmI9ZnVuY3Rpb24obCl7cmV0dXJuIDEtCk1hdGguY29zKGwqZyl9O2QuYz1mdW5jdGlvbihsKXtyZXR1cm4gTWF0aC5zaW4obCpnKX07ZC5hPWZ1bmN0aW9uKGwpe3JldHVybigxLU1hdGguY29zKGYqbCkpLzJ9O3ZhciBmPU1hdGguUEksZz1mLzJ9LGZ1bmN0aW9uKGMsZCxmKXtmdW5jdGlvbiBnKGspe3JldHVybiEwPT09bChrKSYmIltvYmplY3QgT2JqZWN0XSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoayl9dmFyIGw9ZigxMjkpO2MuZXhwb3J0cz1mdW5jdGlvbihrKXtpZighMT09PWcoaykpcmV0dXJuITE7az1rLmNvbnN0cnVjdG9yO2lmKCJmdW5jdGlvbiIhPT10eXBlb2YgaylyZXR1cm4hMTtrPWsucHJvdG90eXBlO3JldHVybiExPT09ZyhrKXx8ITE9PT1rLmhhc093blByb3BlcnR5KCJpc1Byb3RvdHlwZU9mIik/ITE6ITB9fSxmdW5jdGlvbihjKXtjLmV4cG9ydHM9ZnVuY3Rpb24oZCl7cmV0dXJuIG51bGwhPWQmJiJvYmplY3QiPT09dHlwZW9mIGQmJiExPT09QXJyYXkuaXNBcnJheShkKX19LGZ1bmN0aW9uKGMsCmQpe2M9ZnVuY3Rpb24oKXtmdW5jdGlvbiBmKGcsbCxrKXt2b2lkIDA9PT1sJiYobD0xMCk7dm9pZCAwPT09ayYmKGs9e30pO3ZhciBtPXRoaXM7dGhpcy5jdHg9Zzt0aGlzLmxpbmVIZWlnaHQ9bDt0aGlzLnN0eWxlPWs7dGhpcy5jcmVhdGVSdWxlcj1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihwKXttLmN0eC5mb250PW0uc3R5bGUuZm9udDtyZXR1cm57d2lkdGg6bS5jdHgubWVhc3VyZVRleHQocCkud2lkdGgsaGVpZ2h0Om0ubGluZUhlaWdodH19fTt0aGlzLmNyZWF0ZVBlbj1mdW5jdGlvbihwLHEscil7bnVsbD09ciYmKHI9bS5jdHgpO3Iuc2F2ZSgpO3IudHJhbnNsYXRlKHEudHJhbnNsYXRlWzBdLHEudHJhbnNsYXRlWzFdKTtyLnJvdGF0ZShxLnJvdGF0ZSpNYXRoLlBJLzE4MCk7cmV0dXJuIG0uY3JlYXRlQ2FudmFzUGVuKHIpfTt2b2lkIDA9PT10aGlzLnN0eWxlLmZpbGwmJih0aGlzLnN0eWxlLmZpbGw9IiM0NDQiKX1mLnByb3RvdHlwZS5jcmVhdGVDYW52YXNQZW49ZnVuY3Rpb24oZyl7dmFyIGw9CnRoaXM7cmV0dXJue2Rlc3Ryb3k6ZnVuY3Rpb24oKXtnLnJlc3RvcmUoKX0sd3JpdGU6ZnVuY3Rpb24oayxtLHAscSl7Zy50ZXh0QWxpZ249bTtudWxsIT1sLnN0eWxlLmZvbnQmJihnLmZvbnQ9bC5zdHlsZS5mb250KTtudWxsIT1sLnN0eWxlLmZpbGwmJihnLmZpbGxTdHlsZT1sLnN0eWxlLmZpbGwsZy5maWxsVGV4dChrLHAscSkpO251bGwhPWwuc3R5bGUuc3Ryb2tlJiYoZy5zdHJva2VTdHlsZT1sLnN0eWxlLmZpbGwsZy5zdHJva2VUZXh0KGsscCxxKSl9fX07cmV0dXJuIGZ9KCk7ZC5DYW52YXNDb250ZXh0PWN9LGZ1bmN0aW9uKGMsZCl7dmFyIGY9ZnVuY3Rpb24oKXtmdW5jdGlvbiBnKCl7fWcuYXBwZW5kPWZ1bmN0aW9uKGwsayl7Zm9yKHZhciBtPVtdLHA9MjtwPGFyZ3VtZW50cy5sZW5ndGg7cCsrKW1bcC0yXT1hcmd1bWVudHNbcF07bT1nLmNyZWF0ZS5hcHBseShnLFtrXS5jb25jYXQobSkpO2wuYXBwZW5kQ2hpbGQobSk7cmV0dXJuIG19O2cuY3JlYXRlPWZ1bmN0aW9uKGwpe2Zvcih2YXIgaz0KW10sbT0xO208YXJndW1lbnRzLmxlbmd0aDttKyspa1ttLTFdPWFyZ3VtZW50c1ttXTttPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhnLlNWR19OUyxsKTtnLmFkZENsYXNzZXMuYXBwbHkoZyxbbV0uY29uY2F0KGspKTtyZXR1cm4gbX07Zy5hZGRDbGFzc2VzPWZ1bmN0aW9uKGwpe2Zvcih2YXIgaz1bXSxtPTE7bTxhcmd1bWVudHMubGVuZ3RoO20rKylrW20tMV09YXJndW1lbnRzW21dO2s9ay5maWx0ZXIoZnVuY3Rpb24ocCl7cmV0dXJuIG51bGwhPXB9KTtudWxsIT1sLmNsYXNzTGlzdD9rLmZvckVhY2goZnVuY3Rpb24ocCl7bC5jbGFzc0xpc3QuYWRkKHApfSk6bC5zZXRBdHRyaWJ1dGUoImNsYXNzIixrLmpvaW4oIiAiKSl9O2cuZ2V0RGltZW5zaW9ucz1mdW5jdGlvbihsKXtpZihsLmdldEJCb3gpdHJ5e3ZhciBrPWwuZ2V0QkJveCgpO3JldHVybnt3aWR0aDprLndpZHRoLGhlaWdodDprLmhlaWdodH19Y2F0Y2gobSl7fXJldHVybntoZWlnaHQ6MCx3aWR0aDowfX07cmV0dXJuIGd9KCk7CmYuU1ZHX05TPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI7ZC5TdmdVdGlscz1mO2M9ZnVuY3Rpb24oKXtmdW5jdGlvbiBnKGwsayxtKXt2b2lkIDA9PT1tJiYobT0hMSk7dmFyIHA9dGhpczt0aGlzLmVsZW1lbnQ9bDt0aGlzLmNsYXNzTmFtZT1rO3RoaXMuYWRkVGl0bGVFbGVtZW50PW07dGhpcy5jcmVhdGVSdWxlcj1mdW5jdGlvbigpe3ZhciBxPXAuZ2V0VGV4dEVsZW1lbnRzKHAuZWxlbWVudCkscj1xLnBhcmVudEVsZW1lbnQsdD1xLmNvbnRhaW5lckVsZW1lbnQsdj1xLnRleHRFbGVtZW50O3JldHVybiBmdW5jdGlvbihBKXtyLmFwcGVuZENoaWxkKHQpO3YudGV4dENvbnRlbnQ9QTtBPWYuZ2V0RGltZW5zaW9ucyh2KTtyLnJlbW92ZUNoaWxkKHQpO3JldHVybiBBfX07dGhpcy5jcmVhdGVQZW49ZnVuY3Rpb24ocSxyLHQpe251bGw9PXQmJih0PXAuZWxlbWVudCk7dD1mLmFwcGVuZCh0LCJnIiwidGV4dC1jb250YWluZXIiLHAuY2xhc3NOYW1lKTtwLmFkZFRpdGxlRWxlbWVudCYmCihmLmFwcGVuZCh0LCJ0aXRsZSIpLnRleHRDb250ZW50PXEsdC5zZXRBdHRyaWJ1dGUoInRpdGxlIixxKSk7cT1mLmFwcGVuZCh0LCJnIiwidGV4dC1hcmVhIik7cS5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3IudHJhbnNsYXRlWzBdKyIsIityLnRyYW5zbGF0ZVsxXSsiKSIrKCJyb3RhdGUoIityLnJvdGF0ZSsiKSIpKTtyZXR1cm4gcC5jcmVhdGVTdmdMaW5lUGVuKHEpfX1nLnByb3RvdHlwZS5zZXRBZGRUaXRsZUVsZW1lbnQ9ZnVuY3Rpb24obCl7dGhpcy5hZGRUaXRsZUVsZW1lbnQ9bH07Zy5wcm90b3R5cGUuY3JlYXRlU3ZnTGluZVBlbj1mdW5jdGlvbihsKXtyZXR1cm57d3JpdGU6ZnVuY3Rpb24oayxtLHAscSl7dmFyIHI9Zi5hcHBlbmQobCwidGV4dCIsInRleHQtbGluZSIpO3IudGV4dENvbnRlbnQ9aztyLnNldEF0dHJpYnV0ZSgidGV4dC1hbmNob3IiLG0pO3Iuc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitwKyIsIitxKyIpIik7CnIuc2V0QXR0cmlidXRlKCJ5IiwiLTAuMjVlbSIpfX19O2cucHJvdG90eXBlLmdldFRleHRFbGVtZW50cz1mdW5jdGlvbihsKXtpZigidGV4dCI9PT1sLnRhZ05hbWUpe3ZhciBrPWwucGFyZW50RWxlbWVudDtudWxsPT1rJiYoaz1sLnBhcmVudE5vZGUpO2sucmVtb3ZlQ2hpbGQobCk7cmV0dXJue2NvbnRhaW5lckVsZW1lbnQ6bCxwYXJlbnRFbGVtZW50OmssdGV4dEVsZW1lbnQ6bH19dmFyIG09bC5xdWVyeVNlbGVjdG9yKCJ0ZXh0Iik7aWYobnVsbCE9bSlyZXR1cm4gaz1sLnBhcmVudEVsZW1lbnQsbnVsbD09ayYmKGs9bC5wYXJlbnROb2RlKSxrLnJlbW92ZUNoaWxkKGwpLHtjb250YWluZXJFbGVtZW50OmwscGFyZW50RWxlbWVudDprLHRleHRFbGVtZW50Om19O2s9Zi5jcmVhdGUoInRleHQiLHRoaXMuY2xhc3NOYW1lKTtyZXR1cm57Y29udGFpbmVyRWxlbWVudDprLHBhcmVudEVsZW1lbnQ6bCx0ZXh0RWxlbWVudDprfX07cmV0dXJuIGd9KCk7ZC5TdmdDb250ZXh0PWN9LGZ1bmN0aW9uKGMsCmQsZil7dmFyIGc9dGhpcyYmdGhpcy5fX2V4dGVuZHN8fGZ1bmN0aW9uKG0scCl7ZnVuY3Rpb24gcSgpe3RoaXMuY29uc3RydWN0b3I9bX1mb3IodmFyIHIgaW4gcClwLmhhc093blByb3BlcnR5KHIpJiYobVtyXT1wW3JdKTttLnByb3RvdHlwZT1udWxsPT09cD9PYmplY3QuY3JlYXRlKHApOihxLnByb3RvdHlwZT1wLnByb3RvdHlwZSxuZXcgcSl9LGw9ZigyMSksaz1mKDM2KTtjPWZ1bmN0aW9uKG0pe2Z1bmN0aW9uIHAocSl7dmFyIHI9bS5jYWxsKHRoaXMscSl8fHRoaXM7ci5kaW1DYWNoZT1uZXcgbC5DYWNoZShmdW5jdGlvbih0KXtyZXR1cm4gci5fbWVhc3VyZU5vdEZyb21DYWNoZSh0KX0pO3JldHVybiByfWcocCxtKTtwLnByb3RvdHlwZS5fbWVhc3VyZU5vdEZyb21DYWNoZT1mdW5jdGlvbihxKXtyZXR1cm4gbS5wcm90b3R5cGUubWVhc3VyZS5jYWxsKHRoaXMscSl9O3AucHJvdG90eXBlLm1lYXN1cmU9ZnVuY3Rpb24ocSl7dm9pZCAwPT09cSYmKHE9ay5BYnN0cmFjdE1lYXN1cmVyLkhFSUdIVF9URVhUKTsKcmV0dXJuIHRoaXMuZGltQ2FjaGUuZ2V0KHEpfTtwLnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3RoaXMuZGltQ2FjaGUuY2xlYXIoKTttLnByb3RvdHlwZS5yZXNldC5jYWxsKHRoaXMpfTtyZXR1cm4gcH0oZig2MCkuQ2FjaGVDaGFyYWN0ZXJNZWFzdXJlcik7ZC5DYWNoZU1lYXN1cmVyPWN9LGZ1bmN0aW9uKGMsZCxmKXt2YXIgZz1mKDU5KSxsPWYoNjIpLGs9Zig2NCksbT1mKDY2KTtjPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gcChxKXt0aGlzLmNvbnRleHQ9cTt0aGlzLm1lYXN1cmVyPW5ldyBsLkNhY2hlTWVhc3VyZXIodGhpcy5jb250ZXh0KTt0aGlzLndyYXBwZXI9bmV3IGsuV3JhcHBlcjt0aGlzLndyaXRlcj1uZXcgbS5Xcml0ZXIodGhpcy5tZWFzdXJlcix0aGlzLmNvbnRleHQsdGhpcy53cmFwcGVyKX1wLnN2Zz1mdW5jdGlvbihxLHIsdCl7cmV0dXJuIG5ldyBwKG5ldyBnLlN2Z0NvbnRleHQocSxyLHQpKX07cC5jYW52YXM9ZnVuY3Rpb24ocSxyLHQpe3JldHVybiBuZXcgcChuZXcgZy5DYW52YXNDb250ZXh0KHEsCnIsdCkpfTtwLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihxLHIsdCx2LEEpe3RoaXMud3JpdGVyLndyaXRlKHEscix0LHYsQSl9O3AucHJvdG90eXBlLmNsZWFyTWVhc3VyZXJDYWNoZT1mdW5jdGlvbigpe3RoaXMubWVhc3VyZXIucmVzZXQoKX07cmV0dXJuIHB9KCk7ZC5UeXBlc2V0dGVyPWN9LGZ1bmN0aW9uKGMsZCl7Yz1mdW5jdGlvbigpe2Z1bmN0aW9uIGYoZyl7dGhpcy5jYWNoZT17fTt0aGlzLmNvbXB1dGU9Z31mLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oZyl7dGhpcy5jYWNoZS5oYXNPd25Qcm9wZXJ0eShnKXx8KHRoaXMuY2FjaGVbZ109dGhpcy5jb21wdXRlKGcpKTtyZXR1cm4gdGhpcy5jYWNoZVtnXX07Zi5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLmNhY2hlPXt9O3JldHVybiB0aGlzfTtyZXR1cm4gZn0oKTtkLkNhY2hlPWN9LGZ1bmN0aW9uKGMsZCl7ZC5NZXRob2RzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZigpe31mLmFycmF5RXE9ZnVuY3Rpb24oZyxsKXtpZihudWxsPT0KZ3x8bnVsbD09bClyZXR1cm4gZz09PWw7aWYoZy5sZW5ndGghPT1sLmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIGs9MDtrPGcubGVuZ3RoO2srKylpZihnW2tdIT09bFtrXSlyZXR1cm4hMTtyZXR1cm4hMH07Zi5vYmpFcT1mdW5jdGlvbihnLGwpe2lmKG51bGw9PWd8fG51bGw9PWwpcmV0dXJuIGc9PT1sO3ZhciBrPU9iamVjdC5rZXlzKGcpLnNvcnQoKSxtPU9iamVjdC5rZXlzKGwpLnNvcnQoKSxwPWsubWFwKGZ1bmN0aW9uKHIpe3JldHVybiBnW3JdfSkscT1tLm1hcChmdW5jdGlvbihyKXtyZXR1cm4gbFtyXX0pO3JldHVybiBmLmFycmF5RXEoayxtKSYmZi5hcnJheUVxKHAscSl9O2Yuc3RyaWN0RXE9ZnVuY3Rpb24oZyxsKXtyZXR1cm4gZz09PWx9O2YuZGVmYXVsdHM9ZnVuY3Rpb24oZyl7Zm9yKHZhciBsPVtdLGs9MTtrPGFyZ3VtZW50cy5sZW5ndGg7aysrKWxbay0xXT1hcmd1bWVudHNba107aWYobnVsbD09Zyl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY29udmVydCB1bmRlZmluZWQgb3IgbnVsbCB0byBvYmplY3QiKTsKdmFyIG09T2JqZWN0KGcpO2wuZm9yRWFjaChmdW5jdGlvbihwKXtpZihudWxsIT1wKWZvcih2YXIgcSBpbiBwKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwLHEpJiYobVtxXT1wW3FdKX0pO3JldHVybiBtfTtyZXR1cm4gZn0oKX0sZnVuY3Rpb24oYyxkKXtkLlN0cmluZ01ldGhvZHM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBmKCl7fWYuY29tYmluZVdoaXRlc3BhY2U9ZnVuY3Rpb24oZyl7cmV0dXJuIGcucmVwbGFjZSgvWyBcdF0rL2csIiAiKX07Zi5pc05vdEVtcHR5U3RyaW5nPWZ1bmN0aW9uKGcpe3JldHVybiBnJiYiIiE9PWcudHJpbSgpfTtmLnRyaW1TdGFydD1mdW5jdGlvbihnLGwpe2lmKCFnKXJldHVybiBnO2c9Zy5zcGxpdCgiIik7dmFyIGs9bD9mdW5jdGlvbihtKXtyZXR1cm4gbS5zcGxpdChsKS5zb21lKGYuaXNOb3RFbXB0eVN0cmluZyl9OmYuaXNOb3RFbXB0eVN0cmluZztyZXR1cm4gZy5yZWR1Y2UoZnVuY3Rpb24obSxwKXtyZXR1cm4gayhtK3ApPwptK3A6bX0sIiIpfTtmLnRyaW1FbmQ9ZnVuY3Rpb24oZyxsKXtpZighZylyZXR1cm4gZztnPWcuc3BsaXQoIiIpO2cucmV2ZXJzZSgpO2c9Zi50cmltU3RhcnQoZy5qb2luKCIiKSxsKS5zcGxpdCgiIik7Zy5yZXZlcnNlKCk7cmV0dXJuIGcuam9pbigiIil9O3JldHVybiBmfSgpfSxmdW5jdGlvbihjLGQpe2M9ZnVuY3Rpb24oKXtmdW5jdGlvbiBmKCl7dGhpcy5Xb3JkRGl2aWRlclJlZ0V4cD0vXFcvO3RoaXMuV2hpdGVzcGFjZVJlZ0V4cD0vXHMvfWYucHJvdG90eXBlLnRva2VuaXplPWZ1bmN0aW9uKGcpe3ZhciBsPXRoaXM7cmV0dXJuIGcuc3BsaXQoIiIpLnJlZHVjZShmdW5jdGlvbihrLG0pe3JldHVybiBrLnNsaWNlKDAsLTEpLmNvbmNhdChsLnNob3VsZENyZWF0ZU5ld1Rva2VuKGtbay5sZW5ndGgtMV0sbSkpfSxbIiJdKX07Zi5wcm90b3R5cGUuc2hvdWxkQ3JlYXRlTmV3VG9rZW49ZnVuY3Rpb24oZyxsKXtpZighZylyZXR1cm5bbF07dmFyIGs9Z1tnLmxlbmd0aC0xXTtyZXR1cm4gdGhpcy5XaGl0ZXNwYWNlUmVnRXhwLnRlc3QoaykmJgp0aGlzLldoaXRlc3BhY2VSZWdFeHAudGVzdChsKT9bZytsXTp0aGlzLldoaXRlc3BhY2VSZWdFeHAudGVzdChrKXx8dGhpcy5XaGl0ZXNwYWNlUmVnRXhwLnRlc3QobCk/W2csbF06dGhpcy5Xb3JkRGl2aWRlclJlZ0V4cC50ZXN0KGspfHx0aGlzLldvcmREaXZpZGVyUmVnRXhwLnRlc3QobCk/az09PWw/W2crbF06W2csbF06W2crbF19O3JldHVybiBmfSgpO2QuVG9rZW5pemVyPWN9LGZ1bmN0aW9uKGMsZCxmKXt2YXIgZz10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8ZnVuY3Rpb24obCxrKXtmdW5jdGlvbiBtKCl7dGhpcy5jb25zdHJ1Y3Rvcj1sfWZvcih2YXIgcCBpbiBrKWsuaGFzT3duUHJvcGVydHkocCkmJihsW3BdPWtbcF0pO2wucHJvdG90eXBlPW51bGw9PT1rP09iamVjdC5jcmVhdGUoayk6KG0ucHJvdG90eXBlPWsucHJvdG90eXBlLG5ldyBtKX07Yz1mdW5jdGlvbihsKXtmdW5jdGlvbiBrKCl7cmV0dXJuIGwuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfWcoayxsKTtrLnByb3RvdHlwZS53cmFwPQpmdW5jdGlvbihtLHAscSxyKXtmdW5jdGlvbiB0KEQpe3JldHVybiBsLnByb3RvdHlwZS53cmFwLmNhbGwodixtLHAsRCxyKX12YXIgdj10aGlzO3ZvaWQgMD09PXImJihyPUluZmluaXR5KTtpZigxPG0uc3BsaXQoIlxuIikubGVuZ3RoKXRocm93IEVycm9yKCJTaW5nbGVMaW5lV3JhcHBlciBpcyBkZXNpZ25lZCB0byB3b3JrIG9ubHkgb24gc2luZ2xlIGxpbmUiKTt2YXIgQT10KHEpO2lmKDI+QS5ub0xpbmVzKXJldHVybiBBO2Zvcih2YXIgeT0wLHg9MDt4PGsuTk9fV1JBUF9JVEVSQVRJT05TJiZxPnk7Kyt4KXt2YXIgQz0ocSt5KS8yLEY9dChDKTt0aGlzLmFyZVNhbWVSZXN1bHRzKEEsRik/KHE9QyxBPUYpOnk9Q31yZXR1cm4gQX07ay5wcm90b3R5cGUuYXJlU2FtZVJlc3VsdHM9ZnVuY3Rpb24obSxwKXtyZXR1cm4gbS5ub0xpbmVzPT09cC5ub0xpbmVzJiZtLnRydW5jYXRlZFRleHQ9PT1wLnRydW5jYXRlZFRleHR9O3JldHVybiBrfShmKDY1KS5XcmFwcGVyKTtjLk5PX1dSQVBfSVRFUkFUSU9OUz0KNTtkLlNpbmdsZUxpbmVXcmFwcGVyPWN9LGZ1bmN0aW9uKGMsZCxmKXt2YXIgZz1mKDIxKSxsPXt0ZXh0Um90YXRpb246MCx0ZXh0U2hlYXI6MCx4QWxpZ246ImxlZnQiLHlBbGlnbjoidG9wIn07Yz1mdW5jdGlvbigpe2Z1bmN0aW9uIGsobSxwLHEpe3RoaXMuX21lYXN1cmVyPW07dGhpcy5fcGVuRmFjdG9yeT1wO3RoaXMuX3dyYXBwZXI9cX1rLnByb3RvdHlwZS5tZWFzdXJlcj1mdW5jdGlvbihtKXt0aGlzLl9tZWFzdXJlcj1tO3JldHVybiB0aGlzfTtrLnByb3RvdHlwZS53cmFwcGVyPWZ1bmN0aW9uKG0pe3RoaXMuX3dyYXBwZXI9bTtyZXR1cm4gdGhpc307ay5wcm90b3R5cGUucGVuRmFjdG9yeT1mdW5jdGlvbihtKXt0aGlzLl9wZW5GYWN0b3J5PW07cmV0dXJuIHRoaXN9O2sucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKG0scCxxLHIsdCl7dm9pZCAwPT09ciYmKHI9e30pO3I9Zy5NZXRob2RzLmRlZmF1bHRzKHt9LGwscik7aWYoLTE9PT1rLlN1cHBvcnRlZFJvdGF0aW9uLmluZGV4T2Yoci50ZXh0Um90YXRpb24pKXRocm93IEVycm9yKCJ1bnN1cHBvcnRlZCByb3RhdGlvbiAtICIrCnIudGV4dFJvdGF0aW9uKyIuIFN1cHBvcnRlZCByb3RhdGlvbnMgYXJlICIray5TdXBwb3J0ZWRSb3RhdGlvbi5qb2luKCIsICIpKTtpZihudWxsIT1yLnRleHRTaGVhciYmLTgwPnIudGV4dFNoZWFyfHw4MDxyLnRleHRTaGVhcil0aHJvdyBFcnJvcigidW5zdXBwb3J0ZWQgc2hlYXIgYW5nbGUgLSAiK3IudGV4dFNoZWFyKyIuIE11c3QgYmUgYmV0d2VlbiAtODAgYW5kIDgwIik7dmFyIHY9NDU8TWF0aC5hYnMoTWF0aC5hYnMoci50ZXh0Um90YXRpb24pLTkwKSxBPXY/cDpxLHk9dj9xOnAseD1yLnRleHRTaGVhcixDPXgqTWF0aC5QSS8xODA7dj10aGlzLl9tZWFzdXJlci5tZWFzdXJlKCkuaGVpZ2h0O3ZhciBGPXYqTWF0aC50YW4oQyk7QT1BL01hdGguY29zKEMpLU1hdGguYWJzKEYpO3ZhciBEPXkqTWF0aC5jb3MoQyk7eT1nLlN0cmluZ01ldGhvZHMuY29tYmluZVdoaXRlc3BhY2UobSk7eT0odGhpcy5fd3JhcHBlcj90aGlzLl93cmFwcGVyLndyYXAoeSx0aGlzLl9tZWFzdXJlciwKQSxEKS53cmFwcGVkVGV4dDp5KS5zcGxpdCgiXG4iKTtDPWsuWE9mZnNldEZhY3RvcltyLnhBbGlnbl0qQSpNYXRoLnNpbihDKS1rLllPZmZzZXRGYWN0b3Jbci55QWxpZ25dKihELXkubGVuZ3RoKnYpO3g9ci50ZXh0Um90YXRpb24reDtzd2l0Y2goci50ZXh0Um90YXRpb24pe2Nhc2UgOTA6cD1bcCtDLDBdO2JyZWFrO2Nhc2UgLTkwOnA9Wy1DLHFdO2JyZWFrO2Nhc2UgMTgwOnA9W3AscStDXTticmVhaztkZWZhdWx0OnA9WzAsLUNdfW09dGhpcy5fcGVuRmFjdG9yeS5jcmVhdGVQZW4obSx7dHJhbnNsYXRlOnAscm90YXRlOnh9LHQpO3RoaXMud3JpdGVMaW5lcyh5LG0sQSx2LEYsci54QWxpZ24pO251bGwhPW0uZGVzdHJveSYmbS5kZXN0cm95KCl9O2sucHJvdG90eXBlLndyaXRlTGluZXM9ZnVuY3Rpb24obSxwLHEscix0LHYpe20uZm9yRWFjaChmdW5jdGlvbihBLHkpe3Aud3JpdGUoQSxrLkFuY2hvckNvbnZlcnRlclt2XSwoMDx0Pyh5KzEpKnQ6eSp0KStxKmsuWE9mZnNldEZhY3Rvclt2XSwKKHkrMSkqcil9KX07cmV0dXJuIGt9KCk7Yy5TdXBwb3J0ZWRSb3RhdGlvbj1bLTkwLDAsMTgwLDkwXTtjLkFuY2hvckNvbnZlcnRlcj17Y2VudGVyOiJtaWRkbGUiLGxlZnQ6InN0YXJ0IixyaWdodDoiZW5kIn07Yy5YT2Zmc2V0RmFjdG9yPXtjZW50ZXI6LjUsbGVmdDowLHJpZ2h0OjF9O2MuWU9mZnNldEZhY3Rvcj17Ym90dG9tOjEsY2VudGVyOi41LHRvcDowfTtkLldyaXRlcj1jfSxmdW5jdGlvbihjLGQsZil7ZnVuY3Rpb24gZyhsKXtmb3IodmFyIGsgaW4gbClkLmhhc093blByb3BlcnR5KGspfHwoZFtrXT1sW2tdKX1mKDY5KTtjPWYoNyk7ZC5BbmltYXRvcnM9YztjPWYoNjcpO2QuQXhlcz1jO2M9ZigzNyk7ZC5Db21wb25lbnRzPWM7Yz1mKDIzKTtkLkNvbmZpZ3M9YztjPWYoOCk7ZC5Gb3JtYXR0ZXJzPWM7Yz1mKDMwKTtkLlJlbmRlckNvbnRyb2xsZXI9YztjPWYoMzkpO2QuUmVuZGVyUG9saWNpZXM9YztjPWYoMzEpO2QuU3ltYm9sRmFjdG9yaWVzPWM7Yz1mKDEzKTtkLkRpc3BhdGNoZXJzPQpjO2M9ZigxNCk7ZC5EcmF3ZXJzPWM7Yz1mKDI1KTtkLkludGVyYWN0aW9ucz1jO2M9ZigxOSk7ZC5QbG90cz1jO2M9ZigzKTtkLlNjYWxlcz1jO2M9ZigwKTtkLlV0aWxzPWM7ZyhmKDIyKSk7Yz1mKDI4KTtkLlRpbWVJbnRlcnZhbD1jLlRpbWVJbnRlcnZhbDtnKGYoNCkpO2coZigyOSkpO2coZigzOCkpO2M9Zig2OCk7ZC52ZXJzaW9uPWMudmVyc2lvbjtnKGYoMjQpKTtnKGYoNikpO2coZigxNSkpO2coZig0MCkpO2coZigxNikpO2coZigyKSk7ZyhmKDExKSk7ZyhmKDE3KSl9XSl9KTsKPC9zY3JpcHQ+CjxzdHlsZT4KLnBsb3R0YWJsZS1jb2xvcnMtMCB7CiAgYmFja2dyb3VuZC1jb2xvcjogIzUyNzljNzsgLyogSU5ESUdPICovCn0KCi5wbG90dGFibGUtY29sb3JzLTEgewogIGJhY2tncm91bmQtY29sb3I6ICNmZDM3M2U7IC8qIENPUkFMX1JFRCAqLwp9CgoucGxvdHRhYmxlLWNvbG9ycy0yIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjNjNjMjYxOyAvKiBGRVJOICovCn0KCi5wbG90dGFibGUtY29sb3JzLTMgewogIGJhY2tncm91bmQtY29sb3I6ICNmYWQ0MTk7IC8qIEJSSUdIVF9TVU4gKi8KfQoKLnBsb3R0YWJsZS1jb2xvcnMtNCB7CiAgYmFja2dyb3VuZC1jb2xvcjogIzJjMmI2ZjsgLyogSkFDQVJUQSAqLwp9CgoucGxvdHRhYmxlLWNvbG9ycy01IHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmY3OTM5OyAvKiBCVVJOSU5HX09SQU5HRSAqLwp9CgoucGxvdHRhYmxlLWNvbG9ycy02IHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGIyZTY1OyAvKiBDRVJJU0VfUkVEICovCn0KCi5wbG90dGFibGUtY29sb3JzLTcgewogIGJhY2tncm91bmQtY29sb3I6ICM5OWNlNTA7IC8qIENPTklGRVIgKi8KfQoKLnBsb3R0YWJsZS1jb2xvcnMtOCB7CiAgYmFja2dyb3VuZC1jb2xvcjogIzk2MjU2NTsgLyogUk9ZQUxfSEVBVEggKi8KfQoKLnBsb3R0YWJsZS1jb2xvcnMtOSB7CiAgYmFja2dyb3VuZC1jb2xvcjogIzA2Y2NjYzsgLyogUk9CSU5TX0VHR19CTFVFICovCn0KCi8qKgogKiBVc2VyLXN1cHBsaWVkIHJlbmRlclRvIGVsZW1lbnQuCiAqLwoucGxvdHRhYmxlIHsKICBkaXNwbGF5OiBibG9jazsgLyogbXVzdCBiZSBibG9jayBlbGVtZW50cyBmb3Igd2lkdGgvaGVpZ2h0IGNhbGN1bGF0aW9ucyB0byB3b3JrIGluIEZpcmVmb3guICovCiAgcG9pbnRlci1ldmVudHM6IHZpc2libGVGaWxsOwogIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAvKioKICAgKiBQcmUgMy4wLCB1c2VycyBjb3VsZCBzZXQgdGhlIGRpbWVuc2lvbiBvZiB0aGUgcm9vdCBlbGVtZW50IGluIHR3byB3YXlzOiBlaXRoZXIgdXNpbmcgQ1NTCiAgICogKGlubGluZSBvciB0aHJvdWdoIGEgc3R5bGVzaGVldCksIG9yIHVzaW5nIHRoZSBTVkcgd2lkdGgvaGVpZ2h0IGF0dHJpYnV0ZXMuIEJ5IGRlZmF1bHQsIHdlCiAgICogc2V0IHRoZSBTVkcgd2lkdGgvaGVpZ2h0IGF0dHJpYnV0ZXMgdG8gMTAwJS4KICAgKgogICAqIFBvc3QgMy4wIHRoZSByb290IGVsZW1lbnQgaXMgYWx3YXlzIGEgbm9ybWFsIGRpdiBhbmQgdGhlIG9ubHkgd2F5IHRvIHNldCB0aGUgZGltZW5zaW9ucyBpcwogICAqIHRvIHVzZSBDU1MuIFRvIHJlcGxpY2F0ZSB0aGUgIjEwMCUtYnktZGVmYXVsdCIgYmVoYXZpb3IsIHdlIGFwcGx5IHdpZHRoL2hlaWdodCAxMDAlLgogICAqLwogIHdpZHRoOiAxMDAlOwogIGhlaWdodDogMTAwJTsKfQoKLyoqCiAqIFRoZSBfZWxlbWVudCB0aGF0IHJvb3RzIGVhY2ggQ29tcG9uZW50J3MgRE9NLgogKi8KLnBsb3R0YWJsZSAuY29tcG9uZW50IHsKICAvKiBBbGxvdyBjb21wb25lbnRzIHRvIGJlIHBvc2l0aW9uZWQgd2l0aCBleHBsaWNpdCBsZWZ0L3RvcC93aWR0aC9oZWlnaHQgc3R5bGVzICovCiAgcG9zaXRpb246IGFic29sdXRlOwp9CgoucGxvdHRhYmxlIC5iYWNrZ3JvdW5kLWNvbnRhaW5lciwKLnBsb3R0YWJsZSAuY29udGVudCwKLnBsb3R0YWJsZSAuZm9yZWdyb3VuZC1jb250YWluZXIgewogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICB3aWR0aDogMTAwJTsKICBoZWlnaHQ6IDEwMCU7Cn0KCi8qKgogKiBEb24ndCBhbGxvdyBzdmcgZWxlbWVudHMgYWJvdmUgdGhlIGNvbnRlbnQgdG8gc3RlYWwgZXZlbnRzCiAqLwoucGxvdHRhYmxlIC5mb3JlZ3JvdW5kLWNvbnRhaW5lciB7CiAgcG9pbnRlci1ldmVudHM6IG5vbmU7Cn0KCi5wbG90dGFibGUgLmNvbXBvbmVudC1vdmVyZmxvdy1oaWRkZW4gewogIG92ZXJmbG93OiBoaWRkZW47Cn0KCi5wbG90dGFibGUgLmNvbXBvbmVudC1vdmVyZmxvdy12aXNpYmxlIHsKICBvdmVyZmxvdzogdmlzaWJsZTsKfQoKLnBsb3R0YWJsZSAucGxvdC1jYW52YXMtY29udGFpbmVyIHsKICB3aWR0aDogMTAwJTsKICBoZWlnaHQ6IDEwMCU7CiAgb3ZlcmZsb3c6IGhpZGRlbjsKfQoKLnBsb3R0YWJsZSAucGxvdC1jYW52YXMgewogIHdpZHRoOiAxMDAlOwogIGhlaWdodDogMTAwJTsKICAvKioKICAgKiBQbGF5IHdlbGwgd2l0aCBkZWZlcnJlZCByZW5kZXJpbmcuCiAgICovCiAgdHJhbnNmb3JtLW9yaWdpbjogMHB4IDBweCAwcHg7Cn0KCi5wbG90dGFibGUgdGV4dCB7CiAgdGV4dC1yZW5kZXJpbmc6IGdlb21ldHJpY1ByZWNpc2lvbjsKfQoKLnBsb3R0YWJsZSAubGFiZWwgdGV4dCB7CiAgZm9udC1mYW1pbHk6ICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7CiAgZmlsbDogIzMyMzEzRjsKfQoKLnBsb3R0YWJsZSAuYmFyLWxhYmVsLXRleHQtYXJlYSB0ZXh0IHsKICBmb250LWZhbWlseTogIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjsKICBmb250LXNpemU6IDEycHg7Cn0KCi5wbG90dGFibGUgLmxhYmVsLWFyZWEgdGV4dCB7CiAgZmlsbDogIzMyMzEzRjsKICBmb250LWZhbWlseTogIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjsKICBmb250LXNpemU6IDE0cHg7Cn0KCi5wbG90dGFibGUgLmxpZ2h0LWxhYmVsIHRleHQgewogIGZpbGw6IHdoaXRlOwp9CgoucGxvdHRhYmxlIC5kYXJrLWxhYmVsIHRleHQgewogIGZpbGw6ICMzMjMxM0Y7Cn0KCi5wbG90dGFibGUgLm9mZi1iYXItbGFiZWwgdGV4dCB7CiAgZmlsbDogIzMyMzEzRjsKfQoKLnBsb3R0YWJsZSAuc3RhY2tlZC1iYXItbGFiZWwgdGV4dCB7CiAgZmlsbDogIzMyMzEzRjsKICBmb250LXN0eWxlOiBub3JtYWw7Cn0KCi5wbG90dGFibGUgLnN0YWNrZWQtYmFyLXBsb3QgLm9mZi1iYXItbGFiZWwgewogIC8qIEhBQ0tIQUNLICMyNzk1OiBjb3JyZWN0IG9mZi1iYXIgbGFiZWwgbG9naWMgdG8gYmUgaW1wbGVtZW50ZWQgb24gU3RhY2tlZEJhciAqLwogIHZpc2liaWxpdHk6IGhpZGRlbiAhaW1wb3J0YW50Owp9CgoucGxvdHRhYmxlIC5heGlzLWxhYmVsIHRleHQgewogIGZvbnQtc2l6ZTogMTBweDsKICBmb250LXdlaWdodDogYm9sZDsKICBsZXR0ZXItc3BhY2luZzogMXB4OwogIGxpbmUtaGVpZ2h0OiBub3JtYWw7CiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKfQoKLnBsb3R0YWJsZSAudGl0bGUtbGFiZWwgdGV4dCB7CiAgZm9udC1zaXplOiAyMHB4OwogIGZvbnQtd2VpZ2h0OiBib2xkOwp9CgoucGxvdHRhYmxlIC5heGlzIGxpbmUuYmFzZWxpbmUgewogIHN0cm9rZTogI0NDQzsKICBzdHJva2Utd2lkdGg6IDFweDsKfQoKLnBsb3R0YWJsZSAuYXhpcyBsaW5lLnRpY2stbWFyayB7CiAgc3Ryb2tlOiAjQ0NDOwogIHN0cm9rZS13aWR0aDogMXB4Owp9CgoucGxvdHRhYmxlIC5heGlzIHRleHQgewogIGZpbGw6ICMzMjMxM0Y7CiAgZm9udC1mYW1pbHk6ICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7CiAgZm9udC1zaXplOiAxMnB4OwogIGZvbnQtd2VpZ2h0OiAyMDA7CiAgbGluZS1oZWlnaHQ6IG5vcm1hbDsKfQoKLnBsb3R0YWJsZSAuYXhpcyAuYW5ub3RhdGlvbi1jaXJjbGUgewogIGZpbGw6IHdoaXRlOwogIHN0cm9rZS13aWR0aDogMXB4OwogIHN0cm9rZTogI0NDQzsKfQoKLnBsb3R0YWJsZSAuYXhpcyAuYW5ub3RhdGlvbi1saW5lIHsKICBzdHJva2U6ICNDQ0M7CiAgc3Ryb2tlLXdpZHRoOiAxcHg7Cn0KCi5wbG90dGFibGUgLmF4aXMgLmFubm90YXRpb24tcmVjdCB7CiAgc3Ryb2tlOiAjQ0NDOwogIHN0cm9rZS13aWR0aDogMXB4OwogIGZpbGw6IHdoaXRlOwp9CgoucGxvdHRhYmxlIC5iYXItcGxvdCAuYmFzZWxpbmUgewogIHN0cm9rZTogIzk5OTsKfQoKLnBsb3R0YWJsZSAuZ3JpZGxpbmVzIGxpbmUgewogIHN0cm9rZTogIzNDM0MzQzsgLyogaGFja2hhY2s6IGdyaWRsaW5lcyBzaG91bGQgYmUgc29saWQ7IHNlZSAjODIwICovCiAgb3BhY2l0eTogMC4yNTsKICBzdHJva2Utd2lkdGg6IDFweDsKfQoKLnBsb3R0YWJsZSAuc2VsZWN0aW9uLWJveC1sYXllciAuc2VsZWN0aW9uLWFyZWEgewogIGZpbGw6IGJsYWNrOwogIGZpbGwtb3BhY2l0eTogMC4wMzsKICBzdHJva2U6ICNDQ0M7Cn0KLyogRHJhZ0JveExheWVyICovCi5wbG90dGFibGUgLmRyYWctYm94LWxheWVyLngtcmVzaXphYmxlIC5kcmFnLWVkZ2UtbHIgewogIGN1cnNvcjogZXctcmVzaXplOwp9Ci5wbG90dGFibGUgLmRyYWctYm94LWxheWVyLnktcmVzaXphYmxlIC5kcmFnLWVkZ2UtdGIgewogIGN1cnNvcjogbnMtcmVzaXplOwp9CgoucGxvdHRhYmxlIC5kcmFnLWJveC1sYXllci54LXJlc2l6YWJsZS55LXJlc2l6YWJsZSAuZHJhZy1jb3JuZXItdGwgewogIGN1cnNvcjogbndzZS1yZXNpemU7Cn0KLnBsb3R0YWJsZSAuZHJhZy1ib3gtbGF5ZXIueC1yZXNpemFibGUueS1yZXNpemFibGUgLmRyYWctY29ybmVyLXRyIHsKICBjdXJzb3I6IG5lc3ctcmVzaXplOwp9Ci5wbG90dGFibGUgLmRyYWctYm94LWxheWVyLngtcmVzaXphYmxlLnktcmVzaXphYmxlIC5kcmFnLWNvcm5lci1ibCB7CiAgY3Vyc29yOiBuZXN3LXJlc2l6ZTsKfQoucGxvdHRhYmxlIC5kcmFnLWJveC1sYXllci54LXJlc2l6YWJsZS55LXJlc2l6YWJsZSAuZHJhZy1jb3JuZXItYnIgewogIGN1cnNvcjogbndzZS1yZXNpemU7Cn0KCi5wbG90dGFibGUgLmRyYWctYm94LWxheWVyLm1vdmFibGUgLnNlbGVjdGlvbi1hcmVhIHsKICBjdXJzb3I6IG1vdmU7IC8qIElFIGZhbGxiYWNrICovCiAgY3Vyc29yOiAtbW96LWdyYWI7CiAgY3Vyc29yOiAtd2Via2l0LWdyYWI7CiAgY3Vyc29yOiBncmFiOwp9CgoucGxvdHRhYmxlIC5kcmFnLWJveC1sYXllci5tb3ZhYmxlIC5zZWxlY3Rpb24tYXJlYTphY3RpdmUgewogIGN1cnNvcjogLW1vei1ncmFiYmluZzsKICBjdXJzb3I6IC13ZWJraXQtZ3JhYmJpbmc7CiAgY3Vyc29yOiBncmFiYmluZzsKfQovKiAvRHJhZ0JveExheWVyICovCgoucGxvdHRhYmxlIC5ndWlkZS1saW5lLWxheWVyIGxpbmUuZ3VpZGUtbGluZSB7CiAgc3Ryb2tlOiAjQ0NDOwogIHN0cm9rZS13aWR0aDogMXB4Owp9CgoucGxvdHRhYmxlIC5kcmFnLWxpbmUtbGF5ZXIuZW5hYmxlZC52ZXJ0aWNhbCBsaW5lLmRyYWctZWRnZSB7CiAgY3Vyc29yOiBldy1yZXNpemU7Cn0KCi5wbG90dGFibGUgLmRyYWctbGluZS1sYXllci5lbmFibGVkLmhvcml6b250YWwgbGluZS5kcmFnLWVkZ2UgewogIGN1cnNvcjogbnMtcmVzaXplOwp9CgoucGxvdHRhYmxlIC5sZWdlbmQgdGV4dCB7CiAgZmlsbDogIzMyMzEzRjsKICBmb250LWZhbWlseTogIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjsKICBmb250LXNpemU6IDEycHg7CiAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgbGluZS1oZWlnaHQ6IG5vcm1hbDsKfQoKLnBsb3R0YWJsZSAuaW50ZXJwb2xhdGVkLWNvbG9yLWxlZ2VuZCByZWN0LnN3YXRjaC1ib3VuZGluZy1ib3ggewogIGZpbGw6IG5vbmU7CiAgc3Ryb2tlOiAjQ0NDOwogIHN0cm9rZS13aWR0aDogMXB4OwogIHBvaW50ZXItZXZlbnRzOiBub25lOwp9CgoucGxvdHRhYmxlIC53YXRlcmZhbGwtcGxvdCBsaW5lLmNvbm5lY3RvciB7CiAgc3Ryb2tlOiAjQ0NDOwogIHN0cm9rZS13aWR0aDogMXB4Owp9CgoucGxvdHRhYmxlIC5waWUtcGxvdCAuYXJjLm91dGxpbmUgewogIHN0cm9rZS1saW5lam9pbjogcm91bmQ7Cn0KPC9zdHlsZT4KCjxkb20tbW9kdWxlIGlkPSJwbG90dGFibGUtc3R5bGUiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KLnBsb3R0YWJsZS1jb2xvcnMtMCB7CiAgYmFja2dyb3VuZC1jb2xvcjogIzUyNzljNzsgLyogSU5ESUdPICovCn0KCi5wbG90dGFibGUtY29sb3JzLTEgewogIGJhY2tncm91bmQtY29sb3I6ICNmZDM3M2U7IC8qIENPUkFMX1JFRCAqLwp9CgoucGxvdHRhYmxlLWNvbG9ycy0yIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjNjNjMjYxOyAvKiBGRVJOICovCn0KCi5wbG90dGFibGUtY29sb3JzLTMgewogIGJhY2tncm91bmQtY29sb3I6ICNmYWQ0MTk7IC8qIEJSSUdIVF9TVU4gKi8KfQoKLnBsb3R0YWJsZS1jb2xvcnMtNCB7CiAgYmFja2dyb3VuZC1jb2xvcjogIzJjMmI2ZjsgLyogSkFDQVJUQSAqLwp9CgoucGxvdHRhYmxlLWNvbG9ycy01IHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmY3OTM5OyAvKiBCVVJOSU5HX09SQU5HRSAqLwp9CgoucGxvdHRhYmxlLWNvbG9ycy02IHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGIyZTY1OyAvKiBDRVJJU0VfUkVEICovCn0KCi5wbG90dGFibGUtY29sb3JzLTcgewogIGJhY2tncm91bmQtY29sb3I6ICM5OWNlNTA7IC8qIENPTklGRVIgKi8KfQoKLnBsb3R0YWJsZS1jb2xvcnMtOCB7CiAgYmFja2dyb3VuZC1jb2xvcjogIzk2MjU2NTsgLyogUk9ZQUxfSEVBVEggKi8KfQoKLnBsb3R0YWJsZS1jb2xvcnMtOSB7CiAgYmFja2dyb3VuZC1jb2xvcjogIzA2Y2NjYzsgLyogUk9CSU5TX0VHR19CTFVFICovCn0KCi8qKgogKiBVc2VyLXN1cHBsaWVkIHJlbmRlclRvIGVsZW1lbnQuCiAqLwoucGxvdHRhYmxlIHsKICBkaXNwbGF5OiBibG9jazsgLyogbXVzdCBiZSBibG9jayBlbGVtZW50cyBmb3Igd2lkdGgvaGVpZ2h0IGNhbGN1bGF0aW9ucyB0byB3b3JrIGluIEZpcmVmb3guICovCiAgcG9pbnRlci1ldmVudHM6IHZpc2libGVGaWxsOwogIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAvKioKICAgKiBQcmUgMy4wLCB1c2VycyBjb3VsZCBzZXQgdGhlIGRpbWVuc2lvbiBvZiB0aGUgcm9vdCBlbGVtZW50IGluIHR3byB3YXlzOiBlaXRoZXIgdXNpbmcgQ1NTCiAgICogKGlubGluZSBvciB0aHJvdWdoIGEgc3R5bGVzaGVldCksIG9yIHVzaW5nIHRoZSBTVkcgd2lkdGgvaGVpZ2h0IGF0dHJpYnV0ZXMuIEJ5IGRlZmF1bHQsIHdlCiAgICogc2V0IHRoZSBTVkcgd2lkdGgvaGVpZ2h0IGF0dHJpYnV0ZXMgdG8gMTAwJS4KICAgKgogICAqIFBvc3QgMy4wIHRoZSByb290IGVsZW1lbnQgaXMgYWx3YXlzIGEgbm9ybWFsIGRpdiBhbmQgdGhlIG9ubHkgd2F5IHRvIHNldCB0aGUgZGltZW5zaW9ucyBpcwogICAqIHRvIHVzZSBDU1MuIFRvIHJlcGxpY2F0ZSB0aGUgIjEwMCUtYnktZGVmYXVsdCIgYmVoYXZpb3IsIHdlIGFwcGx5IHdpZHRoL2hlaWdodCAxMDAlLgogICAqLwogIHdpZHRoOiAxMDAlOwogIGhlaWdodDogMTAwJTsKfQoKLyoqCiAqIFRoZSBfZWxlbWVudCB0aGF0IHJvb3RzIGVhY2ggQ29tcG9uZW50J3MgRE9NLgogKi8KLnBsb3R0YWJsZSAuY29tcG9uZW50IHsKICAvKiBBbGxvdyBjb21wb25lbnRzIHRvIGJlIHBvc2l0aW9uZWQgd2l0aCBleHBsaWNpdCBsZWZ0L3RvcC93aWR0aC9oZWlnaHQgc3R5bGVzICovCiAgcG9zaXRpb246IGFic29sdXRlOwp9CgoucGxvdHRhYmxlIC5iYWNrZ3JvdW5kLWNvbnRhaW5lciwKLnBsb3R0YWJsZSAuY29udGVudCwKLnBsb3R0YWJsZSAuZm9yZWdyb3VuZC1jb250YWluZXIgewogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICB3aWR0aDogMTAwJTsKICBoZWlnaHQ6IDEwMCU7Cn0KCi8qKgogKiBEb24ndCBhbGxvdyBzdmcgZWxlbWVudHMgYWJvdmUgdGhlIGNvbnRlbnQgdG8gc3RlYWwgZXZlbnRzCiAqLwoucGxvdHRhYmxlIC5mb3JlZ3JvdW5kLWNvbnRhaW5lciB7CiAgcG9pbnRlci1ldmVudHM6IG5vbmU7Cn0KCi5wbG90dGFibGUgLmNvbXBvbmVudC1vdmVyZmxvdy1oaWRkZW4gewogIG92ZXJmbG93OiBoaWRkZW47Cn0KCi5wbG90dGFibGUgLmNvbXBvbmVudC1vdmVyZmxvdy12aXNpYmxlIHsKICBvdmVyZmxvdzogdmlzaWJsZTsKfQoKLnBsb3R0YWJsZSAucGxvdC1jYW52YXMtY29udGFpbmVyIHsKICB3aWR0aDogMTAwJTsKICBoZWlnaHQ6IDEwMCU7CiAgb3ZlcmZsb3c6IGhpZGRlbjsKfQoKLnBsb3R0YWJsZSAucGxvdC1jYW52YXMgewogIHdpZHRoOiAxMDAlOwogIGhlaWdodDogMTAwJTsKICAvKioKICAgKiBQbGF5IHdlbGwgd2l0aCBkZWZlcnJlZCByZW5kZXJpbmcuCiAgICovCiAgdHJhbnNmb3JtLW9yaWdpbjogMHB4IDBweCAwcHg7Cn0KCi5wbG90dGFibGUgdGV4dCB7CiAgdGV4dC1yZW5kZXJpbmc6IGdlb21ldHJpY1ByZWNpc2lvbjsKfQoKLnBsb3R0YWJsZSAubGFiZWwgdGV4dCB7CiAgZm9udC1mYW1pbHk6ICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7CiAgZmlsbDogIzMyMzEzRjsKfQoKLnBsb3R0YWJsZSAuYmFyLWxhYmVsLXRleHQtYXJlYSB0ZXh0IHsKICBmb250LWZhbWlseTogIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjsKICBmb250LXNpemU6IDEycHg7Cn0KCi5wbG90dGFibGUgLmxhYmVsLWFyZWEgdGV4dCB7CiAgZmlsbDogIzMyMzEzRjsKICBmb250LWZhbWlseTogIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjsKICBmb250LXNpemU6IDE0cHg7Cn0KCi5wbG90dGFibGUgLmxpZ2h0LWxhYmVsIHRleHQgewogIGZpbGw6IHdoaXRlOwp9CgoucGxvdHRhYmxlIC5kYXJrLWxhYmVsIHRleHQgewogIGZpbGw6ICMzMjMxM0Y7Cn0KCi5wbG90dGFibGUgLm9mZi1iYXItbGFiZWwgdGV4dCB7CiAgZmlsbDogIzMyMzEzRjsKfQoKLnBsb3R0YWJsZSAuc3RhY2tlZC1iYXItbGFiZWwgdGV4dCB7CiAgZmlsbDogIzMyMzEzRjsKICBmb250LXN0eWxlOiBub3JtYWw7Cn0KCi5wbG90dGFibGUgLnN0YWNrZWQtYmFyLXBsb3QgLm9mZi1iYXItbGFiZWwgewogIC8qIEhBQ0tIQUNLICMyNzk1OiBjb3JyZWN0IG9mZi1iYXIgbGFiZWwgbG9naWMgdG8gYmUgaW1wbGVtZW50ZWQgb24gU3RhY2tlZEJhciAqLwogIHZpc2liaWxpdHk6IGhpZGRlbiAhaW1wb3J0YW50Owp9CgoucGxvdHRhYmxlIC5heGlzLWxhYmVsIHRleHQgewogIGZvbnQtc2l6ZTogMTBweDsKICBmb250LXdlaWdodDogYm9sZDsKICBsZXR0ZXItc3BhY2luZzogMXB4OwogIGxpbmUtaGVpZ2h0OiBub3JtYWw7CiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKfQoKLnBsb3R0YWJsZSAudGl0bGUtbGFiZWwgdGV4dCB7CiAgZm9udC1zaXplOiAyMHB4OwogIGZvbnQtd2VpZ2h0OiBib2xkOwp9CgoucGxvdHRhYmxlIC5heGlzIGxpbmUuYmFzZWxpbmUgewogIHN0cm9rZTogI0NDQzsKICBzdHJva2Utd2lkdGg6IDFweDsKfQoKLnBsb3R0YWJsZSAuYXhpcyBsaW5lLnRpY2stbWFyayB7CiAgc3Ryb2tlOiAjQ0NDOwogIHN0cm9rZS13aWR0aDogMXB4Owp9CgoucGxvdHRhYmxlIC5heGlzIHRleHQgewogIGZpbGw6ICMzMjMxM0Y7CiAgZm9udC1mYW1pbHk6ICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7CiAgZm9udC1zaXplOiAxMnB4OwogIGZvbnQtd2VpZ2h0OiAyMDA7CiAgbGluZS1oZWlnaHQ6IG5vcm1hbDsKfQoKLnBsb3R0YWJsZSAuYXhpcyAuYW5ub3RhdGlvbi1jaXJjbGUgewogIGZpbGw6IHdoaXRlOwogIHN0cm9rZS13aWR0aDogMXB4OwogIHN0cm9rZTogI0NDQzsKfQoKLnBsb3R0YWJsZSAuYXhpcyAuYW5ub3RhdGlvbi1saW5lIHsKICBzdHJva2U6ICNDQ0M7CiAgc3Ryb2tlLXdpZHRoOiAxcHg7Cn0KCi5wbG90dGFibGUgLmF4aXMgLmFubm90YXRpb24tcmVjdCB7CiAgc3Ryb2tlOiAjQ0NDOwogIHN0cm9rZS13aWR0aDogMXB4OwogIGZpbGw6IHdoaXRlOwp9CgoucGxvdHRhYmxlIC5iYXItcGxvdCAuYmFzZWxpbmUgewogIHN0cm9rZTogIzk5OTsKfQoKLnBsb3R0YWJsZSAuZ3JpZGxpbmVzIGxpbmUgewogIHN0cm9rZTogIzNDM0MzQzsgLyogaGFja2hhY2s6IGdyaWRsaW5lcyBzaG91bGQgYmUgc29saWQ7IHNlZSAjODIwICovCiAgb3BhY2l0eTogMC4yNTsKICBzdHJva2Utd2lkdGg6IDFweDsKfQoKLnBsb3R0YWJsZSAuc2VsZWN0aW9uLWJveC1sYXllciAuc2VsZWN0aW9uLWFyZWEgewogIGZpbGw6IGJsYWNrOwogIGZpbGwtb3BhY2l0eTogMC4wMzsKICBzdHJva2U6ICNDQ0M7Cn0KLyogRHJhZ0JveExheWVyICovCi5wbG90dGFibGUgLmRyYWctYm94LWxheWVyLngtcmVzaXphYmxlIC5kcmFnLWVkZ2UtbHIgewogIGN1cnNvcjogZXctcmVzaXplOwp9Ci5wbG90dGFibGUgLmRyYWctYm94LWxheWVyLnktcmVzaXphYmxlIC5kcmFnLWVkZ2UtdGIgewogIGN1cnNvcjogbnMtcmVzaXplOwp9CgoucGxvdHRhYmxlIC5kcmFnLWJveC1sYXllci54LXJlc2l6YWJsZS55LXJlc2l6YWJsZSAuZHJhZy1jb3JuZXItdGwgewogIGN1cnNvcjogbndzZS1yZXNpemU7Cn0KLnBsb3R0YWJsZSAuZHJhZy1ib3gtbGF5ZXIueC1yZXNpemFibGUueS1yZXNpemFibGUgLmRyYWctY29ybmVyLXRyIHsKICBjdXJzb3I6IG5lc3ctcmVzaXplOwp9Ci5wbG90dGFibGUgLmRyYWctYm94LWxheWVyLngtcmVzaXphYmxlLnktcmVzaXphYmxlIC5kcmFnLWNvcm5lci1ibCB7CiAgY3Vyc29yOiBuZXN3LXJlc2l6ZTsKfQoucGxvdHRhYmxlIC5kcmFnLWJveC1sYXllci54LXJlc2l6YWJsZS55LXJlc2l6YWJsZSAuZHJhZy1jb3JuZXItYnIgewogIGN1cnNvcjogbndzZS1yZXNpemU7Cn0KCi5wbG90dGFibGUgLmRyYWctYm94LWxheWVyLm1vdmFibGUgLnNlbGVjdGlvbi1hcmVhIHsKICBjdXJzb3I6IG1vdmU7IC8qIElFIGZhbGxiYWNrICovCiAgY3Vyc29yOiAtbW96LWdyYWI7CiAgY3Vyc29yOiAtd2Via2l0LWdyYWI7CiAgY3Vyc29yOiBncmFiOwp9CgoucGxvdHRhYmxlIC5kcmFnLWJveC1sYXllci5tb3ZhYmxlIC5zZWxlY3Rpb24tYXJlYTphY3RpdmUgewogIGN1cnNvcjogLW1vei1ncmFiYmluZzsKICBjdXJzb3I6IC13ZWJraXQtZ3JhYmJpbmc7CiAgY3Vyc29yOiBncmFiYmluZzsKfQovKiAvRHJhZ0JveExheWVyICovCgoucGxvdHRhYmxlIC5ndWlkZS1saW5lLWxheWVyIGxpbmUuZ3VpZGUtbGluZSB7CiAgc3Ryb2tlOiAjQ0NDOwogIHN0cm9rZS13aWR0aDogMXB4Owp9CgoucGxvdHRhYmxlIC5kcmFnLWxpbmUtbGF5ZXIuZW5hYmxlZC52ZXJ0aWNhbCBsaW5lLmRyYWctZWRnZSB7CiAgY3Vyc29yOiBldy1yZXNpemU7Cn0KCi5wbG90dGFibGUgLmRyYWctbGluZS1sYXllci5lbmFibGVkLmhvcml6b250YWwgbGluZS5kcmFnLWVkZ2UgewogIGN1cnNvcjogbnMtcmVzaXplOwp9CgoucGxvdHRhYmxlIC5sZWdlbmQgdGV4dCB7CiAgZmlsbDogIzMyMzEzRjsKICBmb250LWZhbWlseTogIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjsKICBmb250LXNpemU6IDEycHg7CiAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgbGluZS1oZWlnaHQ6IG5vcm1hbDsKfQoKLnBsb3R0YWJsZSAuaW50ZXJwb2xhdGVkLWNvbG9yLWxlZ2VuZCByZWN0LnN3YXRjaC1ib3VuZGluZy1ib3ggewogIGZpbGw6IG5vbmU7CiAgc3Ryb2tlOiAjQ0NDOwogIHN0cm9rZS13aWR0aDogMXB4OwogIHBvaW50ZXItZXZlbnRzOiBub25lOwp9CgoucGxvdHRhYmxlIC53YXRlcmZhbGwtcGxvdCBsaW5lLmNvbm5lY3RvciB7CiAgc3Ryb2tlOiAjQ0NDOwogIHN0cm9rZS13aWR0aDogMXB4Owp9CgoucGxvdHRhYmxlIC5waWUtcGxvdCAuYXJjLm91dGxpbmUgewogIHN0cm9rZS1saW5lam9pbjogcm91bmQ7Cn0KPC9zdHlsZT4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+CgoKCgoKCjxzY3JpcHQ+Ly9+fldFQlBBVEh+fi92ei1jaGFydC1oZWxwZXJzL3Bsb3R0YWJsZS1pbnRlcmFjdGlvbnMuanMKdmFyIGJtOwooZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYyhwKXtjb25zdCBxPVtdO2Zvcig7cCYmcCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50OylpZihxLnB1c2gocCkscC5hc3NpZ25lZFNsb3QpcD1wLmFzc2lnbmVkU2xvdDtlbHNlIGlmKHAucGFyZW50RWxlbWVudClwPXAucGFyZW50RWxlbWVudDtlbHNle2NvbnN0IHI9cC5wYXJlbnROb2RlO3A9ciBpbnN0YW5jZW9mIERvY3VtZW50RnJhZ21lbnQ/ci5ob3N0OnIhPT1wP3I6bnVsbH1yZXR1cm4gcX1mdW5jdGlvbiBkKHApe3ZhciBxPWMocCk7cD1mO2xldCByPW51bGw7Zm9yKGNvbnN0IHYgb2YgcSl7cT1QbG90dGFibGUuVXRpbHMuRE9NLmdldEVsZW1lbnRUcmFuc2Zvcm0odik7aWYobnVsbCE9cSl7dmFyIHQ9di5jbGllbnRXaWR0aC8yO2NvbnN0IEE9di5jbGllbnRIZWlnaHQvMjtwPVBsb3R0YWJsZS5VdGlscy5NYXRoLm11bHRpcGx5VHJhbnNsYXRlKHAsW3QsQV0pO3A9UGxvdHRhYmxlLlV0aWxzLk1hdGgubXVsdGlwbHlNYXRyaXgocCxQbG90dGFibGUuVXRpbHMuTWF0aC5pbnZlcnRNYXRyaXgocSkpOwpwPVBsb3R0YWJsZS5VdGlscy5NYXRoLm11bHRpcGx5VHJhbnNsYXRlKHAsWy10LC1BXSl9cT12LnNjcm9sbExlZnQ7dD12LnNjcm9sbFRvcDtpZihudWxsPT09cnx8dj09PXIpcS09di5vZmZzZXRMZWZ0K3YuY2xpZW50TGVmdCx0LT12Lm9mZnNldFRvcCt2LmNsaWVudFRvcCxyPXYub2Zmc2V0UGFyZW50O3A9UGxvdHRhYmxlLlV0aWxzLk1hdGgubXVsdGlwbHlUcmFuc2xhdGUocCxbcSx0XSl9cmV0dXJuIHB9Y29uc3QgZj1bMSwwLDAsMSwwLDBdO2NsYXNzIGcgZXh0ZW5kcyBQbG90dGFibGUuVXRpbHMuVHJhbnNsYXRvcntjb21wdXRlUG9zaXRpb24ocCxxKXtwPXt4OnAseTpxfTtxPWQodGhpcy5fcm9vdEVsZW1lbnQpO3JldHVybiBudWxsPT1xP3A6UGxvdHRhYmxlLlV0aWxzLk1hdGguYXBwbHlUcmFuc2Zvcm0ocSxwKX19Y2xhc3MgbCBleHRlbmRzIFBsb3R0YWJsZS5EaXNwYXRjaGVycy5Nb3VzZXtjb25zdHJ1Y3RvcihwKXtzdXBlcihwKTt0aGlzLl9ldmVudFRhcmdldD1wLnJvb3QoKS5yb290RWxlbWVudCgpLm5vZGUoKTsKdGhpcy5fdHJhbnNsYXRvcj1uZXcgZyhwLnJvb3QoKS5yb290RWxlbWVudCgpLm5vZGUoKSl9c3RhdGljIGdldERpc3BhdGNoZXIocCl7Y29uc3QgcT1wLnJvb3QoKS5yb290RWxlbWVudCgpO2xldCByPXFbbC5fRElTUEFUQ0hFUl9LRVldO3J8fChyPW5ldyBsKHApLHFbbC5fRElTUEFUQ0hFUl9LRVldPXIpO3JldHVybiByfX1jbGFzcyBrIGV4dGVuZHMgUGxvdHRhYmxlLkRpc3BhdGNoZXJzLlRvdWNoe2NvbnN0cnVjdG9yKHApe3N1cGVyKHApO3RoaXMuX2V2ZW50VGFyZ2V0PXAucm9vdCgpLnJvb3RFbGVtZW50KCkubm9kZSgpO3RoaXMuX3RyYW5zbGF0b3I9bmV3IGcocC5yb290KCkucm9vdEVsZW1lbnQoKS5ub2RlKCkpfXN0YXRpYyBnZXREaXNwYXRjaGVyKHApe2NvbnN0IHE9cC5yb290KCkucm9vdEVsZW1lbnQoKTtsZXQgcj1xW2suX0RJU1BBVENIRVJfS0VZXTtyfHwocj1uZXcgayhwKSxxW2suX0RJU1BBVENIRVJfS0VZXT1yKTtyZXR1cm4gcn19Y2xhc3MgbSBleHRlbmRzIFBsb3R0YWJsZS5JbnRlcmFjdGlvbnMuUG9pbnRlcntfYW5jaG9yKCl7dGhpcy5faXNBbmNob3JlZD0KITA7dGhpcy5fbW91c2VEaXNwYXRjaGVyPWwuZ2V0RGlzcGF0Y2hlcih0aGlzLl9jb21wb25lbnRBdHRhY2hlZFRvKTt0aGlzLl9tb3VzZURpc3BhdGNoZXIub25Nb3VzZU1vdmUodGhpcy5fbW91c2VNb3ZlQ2FsbGJhY2spO3RoaXMuX3RvdWNoRGlzcGF0Y2hlcj1rLmdldERpc3BhdGNoZXIodGhpcy5fY29tcG9uZW50QXR0YWNoZWRUbyk7dGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9uVG91Y2hTdGFydCh0aGlzLl90b3VjaFN0YXJ0Q2FsbGJhY2spfX1hLlBvaW50ZXJJbnRlcmFjdGlvbj1tfSkoYm18fChibT17fSkpOwo8L3NjcmlwdD4KPHNjcmlwdD4vL35+V0VCUEFUSH5+L3Z6LWNoYXJ0LWhlbHBlcnMvdnotY2hhcnQtaGVscGVycy5qcwooZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYygpe2xldCBsPW5ldyBQbG90dGFibGUuU2NhbGVzLkxpbmVhcjtsLnRpY2tHZW5lcmF0b3IoKTtsZXQgaz1uZXcgUGxvdHRhYmxlLkF4ZXMuTnVtZXJpYyhsLCJib3R0b20iKTtrLmZvcm1hdHRlcihhLnN0ZXBGb3JtYXR0ZXIpO3JldHVybntzY2FsZTpsLGF4aXM6ayxhY2Nlc3NvcjptPT5tLnN0ZXB9fWZ1bmN0aW9uIGQoKXtsZXQgbD1uZXcgUGxvdHRhYmxlLlNjYWxlcy5UaW1lO3JldHVybntzY2FsZTpsLGF4aXM6bmV3IFBsb3R0YWJsZS5BeGVzLlRpbWUobCwiYm90dG9tIiksYWNjZXNzb3I6az0+ay53YWxsX3RpbWV9fWZ1bmN0aW9uIGYoKXtsZXQgbD1uZXcgUGxvdHRhYmxlLlNjYWxlcy5MaW5lYXI7cmV0dXJue3NjYWxlOmwsYXhpczpuZXcgUGxvdHRhYmxlLkF4ZXMuTnVtZXJpYyhsLCJib3R0b20iKSxhY2Nlc3NvcjphLnJlbGF0aXZlQWNjZXNzb3J9fWEuU1lNQk9MU19MSVNUPVt7Y2hhcmFjdGVyOiJcdTI1ZmMiLG1ldGhvZDpQbG90dGFibGUuU3ltYm9sRmFjdG9yaWVzLnNxdWFyZX0sCntjaGFyYWN0ZXI6Ilx1MjVjNiIsbWV0aG9kOlBsb3R0YWJsZS5TeW1ib2xGYWN0b3JpZXMuZGlhbW9uZH0se2NoYXJhY3RlcjoiXHUyNWIyIixtZXRob2Q6UGxvdHRhYmxlLlN5bWJvbEZhY3Rvcmllcy50cmlhbmdsZX0se2NoYXJhY3RlcjoiXHUyNjA1IixtZXRob2Q6UGxvdHRhYmxlLlN5bWJvbEZhY3Rvcmllcy5zdGFyfSx7Y2hhcmFjdGVyOiJcdTI3MWEiLG1ldGhvZDpQbG90dGFibGUuU3ltYm9sRmFjdG9yaWVzLmNyb3NzfV07bGV0IGc7KGZ1bmN0aW9uKGwpe2wuU1RFUD0ic3RlcCI7bC5SRUxBVElWRT0icmVsYXRpdmUiO2wuV0FMTF9USU1FPSJ3YWxsX3RpbWUifSkoZz1hLlhUeXBlfHwoYS5YVHlwZT17fSkpO2EuWV9UT09MVElQX0ZPUk1BVFRFUl9QUkVDSVNJT049NDthLlNURVBfRk9STUFUVEVSX1BSRUNJU0lPTj00O2EuWV9BWElTX0ZPUk1BVFRFUl9QUkVDSVNJT049MzthLlRPT0xUSVBfWV9QSVhFTF9PRkZTRVQ9MjA7YS5UT09MVElQX0NJUkNMRV9TSVpFPTQ7YS5OQU5fU1lNQk9MX1NJWkU9CjY7YS5tdWx0aXNjYWxlRm9ybWF0dGVyPWZ1bmN0aW9uKGwpe3JldHVybiBrPT57bGV0IG09TWF0aC5hYnMoayk7MUUtMTU+bSYmKG09MCk7cmV0dXJuKDFFNDw9bT9kMy5mb3JtYXQoIi4iK2wrIn5lIik6MDxtJiYuMDE+bT9kMy5mb3JtYXQoIi4iK2wrIn5lIik6ZDMuZm9ybWF0KCIuIitsKyJ+ZyIpKShrKX19O2EuY29tcHV0ZURvbWFpbj1mdW5jdGlvbihsLGspe2w9bC5maWx0ZXIocT0+aXNGaW5pdGUocSkpO2lmKDA9PT1sLmxlbmd0aClyZXR1cm5bLS4xLDEuMV07az8obD1fLnNvcnRCeShsKSxrPWQzLnF1YW50aWxlKGwsLjA1KSxsPWQzLnF1YW50aWxlKGwsLjk1KSk6KGs9ZDMubWluKGwpLGw9ZDMubWF4KGwpKTtsZXQgbSxwPWwtazttPTA9PT1wPzEuMSpNYXRoLmFicyhrKSsxLjE6LjIqcDtrPVswPD1rJiZrPHA/LS4xKmw6ay1tLGwrbV07cmV0dXJuIGs9ZDMuc2NhbGVMaW5lYXIoKS5kb21haW4oaykubmljZSgpLmRvbWFpbigpfTthLmFjY2Vzc29yaXplPWZ1bmN0aW9uKGwpe3JldHVybiBrPT4Ka1tsXX07YS5zdGVwRm9ybWF0dGVyPWQzLmZvcm1hdChgLiR7YS5TVEVQX0ZPUk1BVFRFUl9QUkVDSVNJT059fnNgKTthLnN0ZXBYPWM7YS50aW1lRm9ybWF0dGVyPVBsb3R0YWJsZS5Gb3JtYXR0ZXJzLnRpbWUoIiVhICViICVlLCAlSDolTTolUyIpO2Eud2FsbFg9ZDthLnJlbGF0aXZlQWNjZXNzb3I9KGwsayxtKT0+e2lmKG51bGwhPWwucmVsYXRpdmUpcmV0dXJuIGwucmVsYXRpdmU7az1tLmRhdGEoKTtyZXR1cm4oK2wud2FsbF90aW1lLSgwPGsubGVuZ3RoPytrWzBdLndhbGxfdGltZTowKSkvMzZFNX07YS5yZWxhdGl2ZUZvcm1hdHRlcj1sPT57bGV0IGs9IiIsbT1NYXRoLmZsb29yKGwvMjQpO2wtPTI0Km07bSYmKGsrPW0rImQgIik7bGV0IHA9TWF0aC5mbG9vcihsKTtsPTYwKihsLXApO2lmKHB8fG0pays9cCsiaCAiO2xldCBxPU1hdGguZmxvb3IobCk7bD02MCoobC1xKTtpZihxfHxwfHxtKWsrPXErIm0gIjtyZXR1cm4gaytNYXRoLmZsb29yKGwpKyJzIn07YS5yZWxhdGl2ZVg9CmY7YS5nZXRYQ29tcG9uZW50cz1mdW5jdGlvbihsKXtzd2l0Y2gobCl7Y2FzZSBnLlNURVA6cmV0dXJuIGMoKTtjYXNlIGcuV0FMTF9USU1FOnJldHVybiBkKCk7Y2FzZSBnLlJFTEFUSVZFOnJldHVybiBmKCk7ZGVmYXVsdDp0aHJvdyBFcnJvcigiaW52YWxpZCB4VHlwZTogIitsKTt9fX0pKGJtfHwoYm09e30pKTsKPC9zY3JpcHQ+CgoKCgoKPGRvbS1tb2R1bGUgaWQ9InZ6LWNoYXJ0LXRvb2x0aXAiPgogIDxzY3JpcHQ+Ly9+fldFQlBBVEh+fi92ei1jaGFydC1oZWxwZXJzL3Z6LWNoYXJ0LXRvb2x0aXAuanMKdmFyIGNtOwooZnVuY3Rpb24oYSl7bGV0IGM7KGZ1bmN0aW9uKGYpe2YuQVVUTz0iYXV0byI7Zi5CT1RUT009ImJvdHRvbSI7Zi5SSUdIVD0icmlnaHQifSkoYz1hLlRvb2x0aXBQb3NpdGlvbnx8KGEuVG9vbHRpcFBvc2l0aW9uPXt9KSk7Y29uc3QgZD17Ym94U2hhZG93OiIwIDFweCA0cHggcmdiYSgwLCAwLCAwLCAuMykiLG9wYWNpdHk6MCxwb3NpdGlvbjoiZml4ZWQiLHdpbGxDaGFuZ2U6InRyYW5zZm9ybSIsekluZGV4OjV9O1BvbHltZXIoe2lzOiJ2ei1jaGFydC10b29sdGlwIixwcm9wZXJ0aWVzOntjb250ZW50Q29tcG9uZW50TmFtZTpTdHJpbmcscG9zaXRpb246e3R5cGU6U3RyaW5nLHZhbHVlOmMuQVVUT30sbWluRGlzdEZyb21FZGdlOnt0eXBlOk51bWJlcix2YWx1ZToxNX19LHJlYWR5KCl7dGhpcy5fdHVubmVsPXRoaXMuX3JhZj10aGlzLl9zdHlsZUNhY2hlPW51bGx9LGF0dGFjaGVkKCl7dGhpcy5fdHVubmVsPXRoaXMuX2NyZWF0ZVR1bm5lbCgpO3RoaXMuX2hpZGVPbkJsdXI9KCk9Pgp7ZG9jdW1lbnQuaGlkZGVuJiZ0aGlzLmhpZGUoKX07d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLHRoaXMuX2hpZGVPbkJsdXIpfSxkZXRhY2hlZCgpe3RoaXMuaGlkZSgpO3RoaXMuX3JlbW92ZVR1bm5lbCh0aGlzLl90dW5uZWwpO3RoaXMuX3R1bm5lbD1udWxsO3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJ2aXNpYmlsaXR5Y2hhbmdlIix0aGlzLl9oaWRlT25CbHVyKX0sY29udGVudCgpe3JldHVybiB0aGlzLl90dW5uZWwuc2hhZG93Um9vdH0saGlkZSgpe3dpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9yYWYpO3RoaXMuX3N0eWxlQ2FjaGU9bnVsbDt0aGlzLl90dW5uZWwuc3R5bGUub3BhY2l0eT0wfSx1cGRhdGVBbmRQb3NpdGlvbihmKXt3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5fcmFmKTt0aGlzLl9yYWY9d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e3RoaXMuaXNBdHRhY2hlZCYmdGhpcy5fcmVwb3NpdGlvbkltcGwoZil9KX0sCl9yZXBvc2l0aW9uSW1wbChmKXtjb25zdCBnPXRoaXMuX3R1bm5lbDtmPWYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7Y29uc3QgbD1nLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGs9d2luZG93LmlubmVySGVpZ2h0LG09ZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0aCxwPWYudG9wLHE9cCtmLmhlaWdodCxyPWwuaGVpZ2h0K2JtLlRPT0xUSVBfWV9QSVhFTF9PRkZTRVQ7bGV0IHQ9bnVsbCx2PU1hdGgubWF4KHRoaXMubWluRGlzdEZyb21FZGdlLGYubGVmdCksQT1udWxsLHk9cDt0aGlzLnBvc2l0aW9uPT1jLlJJR0hUP3Y9Zi5yaWdodDooeT1xK2JtLlRPT0xUSVBfWV9QSVhFTF9PRkZTRVQsbTx2K2wud2lkdGgrdGhpcy5taW5EaXN0RnJvbUVkZ2UmJih2PW51bGwsQT10aGlzLm1pbkRpc3RGcm9tRWRnZSkpO3RoaXMucG9zaXRpb249PWMuQVVUTyYmMDxmLnRvcC1yJiZrPGYudG9wK2YuaGVpZ2h0K3ImJih5PW51bGwsdD1rLXArYm0uVE9PTFRJUF9ZX1BJWEVMX09GRlNFVCk7Zj17b3BhY2l0eToxLApsZWZ0OnY/YCR7dn1weGA6bnVsbCxyaWdodDpBP2Ake0F9cHhgOm51bGwsdG9wOnk/YCR7eX1weGA6bnVsbCxib3R0b206dD9gJHt0fXB4YDpudWxsfTtfLmlzRXF1YWwodGhpcy5fc3R5bGVDYWNoZSxmKXx8KE9iamVjdC5hc3NpZ24oZy5zdHlsZSxmKSx0aGlzLl9zdHlsZUNhY2hlPWYpfSxfY3JlYXRlVHVubmVsKCl7aWYoIXRoaXMuY29udGVudENvbXBvbmVudE5hbWUpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIlJlcXVpcmUgYGNvbnRlbnRDb21wb25lbnROYW1lYCB0byBiZSBhIG5hbWUgb2YgYSBQb2x5bWVyIGNvbXBvbmVudCIpO2NvbnN0IGY9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0aGlzLmNvbnRlbnRDb21wb25lbnROYW1lKTtPYmplY3QuYXNzaWduKGYuc3R5bGUsZCk7ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChmKTtyZXR1cm4gZn0sX3JlbW92ZVR1bm5lbChmKXtkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGYpfX0pfSkoY218fChjbT17fSkpOwo8L3NjcmlwdD4KPC9kb20tbW9kdWxlPgoKCgoKCgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdnotbGluZS1jaGFydC9kcmFnWm9vbUludGVyYWN0aW9uLmpzCnZhciBkbTsKKGZ1bmN0aW9uKGEpe2NsYXNzIGMgZXh0ZW5kcyBQbG90dGFibGUuQ29tcG9uZW50cy5TZWxlY3Rpb25Cb3hMYXllcntjb25zdHJ1Y3RvcihkLGYsZyl7c3VwZXIoKTt0aGlzLmVhc2VGbj1kMy5lYXNlQ3ViaWNJbk91dDt0aGlzLl9hbmltYXRpb25UaW1lPTc1MDt0aGlzLnhTY2FsZShkKTt0aGlzLnlTY2FsZShmKTt0aGlzLl9kcmFnSW50ZXJhY3Rpb249bmV3IFBsb3R0YWJsZS5JbnRlcmFjdGlvbnMuRHJhZzt0aGlzLl9kb3VibGVDbGlja0ludGVyYWN0aW9uPW5ldyBQbG90dGFibGUuSW50ZXJhY3Rpb25zLkNsaWNrO3RoaXMuc2V0dXBDYWxsYmFja3MoKTt0aGlzLnVuem9vbU1ldGhvZD1nO3RoaXMub25EZXRhY2goKCk9Pnt0aGlzLl9kb3VibGVDbGlja0ludGVyYWN0aW9uLmRldGFjaEZyb20oKTt0aGlzLl9kcmFnSW50ZXJhY3Rpb24uZGV0YWNoRnJvbSgpfSk7dGhpcy5vbkFuY2hvcigoKT0+e3RoaXMuX2RvdWJsZUNsaWNrSW50ZXJhY3Rpb24uYXR0YWNoVG8odGhpcyk7dGhpcy5fZHJhZ0ludGVyYWN0aW9uLmF0dGFjaFRvKHRoaXMpfSl9aW50ZXJhY3Rpb25TdGFydChkKXt0aGlzLm9uU3RhcnQ9CmR9aW50ZXJhY3Rpb25FbmQoZCl7dGhpcy5vbkVuZD1kfWRyYWdJbnRlcmFjdGlvbigpe3JldHVybiB0aGlzLl9kcmFnSW50ZXJhY3Rpb259c2V0dXBDYWxsYmFja3MoKXtsZXQgZD0hMTt0aGlzLl9kcmFnSW50ZXJhY3Rpb24ub25EcmFnU3RhcnQoZj0+e3RoaXMuYm91bmRzKHt0b3BMZWZ0OmYsYm90dG9tUmlnaHQ6Zn0pO3RoaXMub25TdGFydCgpfSk7dGhpcy5fZHJhZ0ludGVyYWN0aW9uLm9uRHJhZygoZixnKT0+e3RoaXMuYm91bmRzKHt0b3BMZWZ0OmYsYm90dG9tUmlnaHQ6Z30pO3RoaXMuYm94VmlzaWJsZSghMCk7ZD0hMH0pO3RoaXMuX2RyYWdJbnRlcmFjdGlvbi5vbkRyYWdFbmQoKGYsZyk9Pnt0aGlzLmJveFZpc2libGUoITEpO3RoaXMuYm91bmRzKHt0b3BMZWZ0OmYsYm90dG9tUmlnaHQ6Z30pO2lmKGQpdGhpcy56b29tKCk7ZWxzZSB0aGlzLm9uRW5kKCk7ZD0hMX0pO3RoaXMuX2RvdWJsZUNsaWNrSW50ZXJhY3Rpb24ub25Eb3VibGVDbGljayh0aGlzLnVuem9vbS5iaW5kKHRoaXMpKX1hbmltYXRpb25UaW1lKGQpe2lmKG51bGw9PQpkKXJldHVybiB0aGlzLl9hbmltYXRpb25UaW1lO2lmKDA+ZCl0aHJvdyBFcnJvcigiYW5pbWF0aW9uVGltZSBjYW5ub3QgYmUgbmVnYXRpdmUiKTt0aGlzLl9hbmltYXRpb25UaW1lPWQ7cmV0dXJuIHRoaXN9ZWFzZShkKXtpZigiZnVuY3Rpb24iIT09dHlwZW9mIGQpdGhyb3cgRXJyb3IoImVhc2UgZnVuY3Rpb24gbXVzdCBiZSBhIGZ1bmN0aW9uIik7MD09PWQoMCkmJjE9PT1kKDEpfHxQbG90dGFibGUuVXRpbHMuV2luZG93Lndhcm4oIkVhc2luZyBmdW5jdGlvbiBkb2VzIG5vdCBtYWludGFpbiBpbnZhcmlhbnQgZigwKVx4M2RceDNkMCBceDI2XHgyNiBmKDEpXHgzZFx4M2QxLiBCYWQgYmVoYXZpb3IgbWF5IHJlc3VsdC4iKTt0aGlzLmVhc2VGbj1kO3JldHVybiB0aGlzfXpvb20oKXtsZXQgZD10aGlzLnhFeHRlbnQoKVswXS52YWx1ZU9mKCksZj10aGlzLnhFeHRlbnQoKVsxXS52YWx1ZU9mKCksZz10aGlzLnlFeHRlbnQoKVsxXS52YWx1ZU9mKCksbD10aGlzLnlFeHRlbnQoKVswXS52YWx1ZU9mKCk7CmQhPT1mJiZnIT09bCYmdGhpcy5pbnRlcnBvbGF0ZVpvb20oZCxmLGcsbCl9dW56b29tKCl7dmFyIGQ9dGhpcy54U2NhbGUoKTtkLl9kb21haW5NaW49bnVsbDtkLl9kb21haW5NYXg9bnVsbDtkPWQuX2dldEV4dGVudCgpO3RoaXMueFNjYWxlKCkuZG9tYWluKGQpO3RoaXMudW56b29tTWV0aG9kKCl9aXNab29taW5nKGQpe3RoaXMuX2RyYWdJbnRlcmFjdGlvbi5lbmFibGVkKCFkKTt0aGlzLl9kb3VibGVDbGlja0ludGVyYWN0aW9uLmVuYWJsZWQoIWQpfWludGVycG9sYXRlWm9vbShkLGYsZyxsKXtsZXQgaz10aGlzLnhTY2FsZSgpLmRvbWFpbigpWzBdLnZhbHVlT2YoKSxtPXRoaXMueFNjYWxlKCkuZG9tYWluKClbMV0udmFsdWVPZigpLHA9dGhpcy55U2NhbGUoKS5kb21haW4oKVswXS52YWx1ZU9mKCkscT10aGlzLnlTY2FsZSgpLmRvbWFpbigpWzFdLnZhbHVlT2YoKSxyPXRoaXMuZWFzZUZuLHQ9KHkseCxDKT0+ZDMuaW50ZXJwb2xhdGVOdW1iZXIoeSx4KShyKEMpKTt0aGlzLmlzWm9vbWluZyghMCk7CmxldCB2PURhdGUubm93KCksQT0oKT0+e3ZhciB5PURhdGUubm93KCktdjt5PTA9PT10aGlzLl9hbmltYXRpb25UaW1lPzE6TWF0aC5taW4oMSx5L3RoaXMuX2FuaW1hdGlvblRpbWUpO2xldCB4PXQoayxkLHkpLEM9dChtLGYseSksRj10KHAsZyx5KSxEPXQocSxsLHkpO3RoaXMueFNjYWxlKCkuZG9tYWluKFt4LENdKTt0aGlzLnlTY2FsZSgpLmRvbWFpbihbRixEXSk7MT55P1Bsb3R0YWJsZS5VdGlscy5ET00ucmVxdWVzdEFuaW1hdGlvbkZyYW1lUG9seWZpbGwoQSk6KHRoaXMub25FbmQoKSx0aGlzLmlzWm9vbWluZyghMSkpfTtBKCl9fWEuRHJhZ1pvb21MYXllcj1jfSkoZG18fChkbT17fSkpOwo8L3NjcmlwdD4KCgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdnotbGluZS1jaGFydDIvcGFuWm9vbURyYWdMYXllci5qcwp2YXIgZW07CihmdW5jdGlvbihhKXtsZXQgYzsoZnVuY3Rpb24oZil7ZltmLk5PTkU9MF09Ik5PTkUiO2ZbZi5EUkFHX1pPT01JTkc9MV09IkRSQUdfWk9PTUlORyI7ZltmLlBBTk5JTkc9Ml09IlBBTk5JTkcifSkoY3x8KGM9e30pKTtjbGFzcyBkIGV4dGVuZHMgUGxvdHRhYmxlLkNvbXBvbmVudHMuR3JvdXB7Y29uc3RydWN0b3IoZixnLGwpe3N1cGVyKCk7dGhpcy5zdGF0ZT1jLk5PTkU7dGhpcy5wYW5TdGFydENhbGxiYWNrPW5ldyBQbG90dGFibGUuVXRpbHMuQ2FsbGJhY2tTZXQ7dGhpcy5wYW5FbmRDYWxsYmFjaz1uZXcgUGxvdHRhYmxlLlV0aWxzLkNhbGxiYWNrU2V0O3RoaXMucGFuWm9vbT1uZXcgUGxvdHRhYmxlLkludGVyYWN0aW9ucy5QYW5ab29tKGYsZyk7dGhpcy5wYW5ab29tLmRyYWdJbnRlcmFjdGlvbigpLm1vdXNlRmlsdGVyKG09PmQuaXNQYW5LZXkobSkmJjA9PT1tLmJ1dHRvbik7dGhpcy5wYW5ab29tLndoZWVsRmlsdGVyKHRoaXMuY2FuU2Nyb2xsWm9vbSk7dGhpcy5kcmFnWm9vbUxheWVyPW5ldyBkbS5EcmFnWm9vbUxheWVyKGYsCmcsbCk7dGhpcy5kcmFnWm9vbUxheWVyLmRyYWdJbnRlcmFjdGlvbigpLm1vdXNlRmlsdGVyKG09PiFkLmlzUGFuS2V5KG0pJiYwPT09bS5idXR0b24pO3RoaXMuYXBwZW5kKHRoaXMuZHJhZ1pvb21MYXllcik7Y29uc3Qgaz10aGlzLm9uV2hlZWwuYmluZCh0aGlzKTt0aGlzLm9uQW5jaG9yKCgpPT57dGhpcy5fbW91c2VEaXNwYXRjaGVyPVBsb3R0YWJsZS5EaXNwYXRjaGVycy5Nb3VzZS5nZXREaXNwYXRjaGVyKHRoaXMpO3RoaXMuX21vdXNlRGlzcGF0Y2hlci5vbldoZWVsKGspO3RoaXMucGFuWm9vbS5hdHRhY2hUbyh0aGlzKX0pO3RoaXMub25EZXRhY2goKCk9Pnt0aGlzLnBhblpvb20uZGV0YWNoRnJvbSgpO3RoaXMuX21vdXNlRGlzcGF0Y2hlciYmKHRoaXMuX21vdXNlRGlzcGF0Y2hlci5vZmZXaGVlbChrKSx0aGlzLl9tb3VzZURpc3BhdGNoZXI9bnVsbCl9KTt0aGlzLnBhblpvb20uZHJhZ0ludGVyYWN0aW9uKCkub25EcmFnU3RhcnQoKCk9Pnt0aGlzLnN0YXRlPT1jLk5PTkUmJgp0aGlzLnNldFN0YXRlKGMuUEFOTklORyl9KTt0aGlzLnBhblpvb20uZHJhZ0ludGVyYWN0aW9uKCkub25EcmFnRW5kKCgpPT57dGhpcy5zdGF0ZT09Yy5QQU5OSU5HJiZ0aGlzLnNldFN0YXRlKGMuTk9ORSl9KTt0aGlzLmRyYWdab29tTGF5ZXIuZHJhZ0ludGVyYWN0aW9uKCkub25EcmFnU3RhcnQoKCk9Pnt0aGlzLnN0YXRlPT1jLk5PTkUmJnRoaXMuc2V0U3RhdGUoYy5EUkFHX1pPT01JTkcpfSk7dGhpcy5kcmFnWm9vbUxheWVyLmRyYWdJbnRlcmFjdGlvbigpLm9uRHJhZ0VuZCgoKT0+e3RoaXMuc3RhdGU9PWMuRFJBR19aT09NSU5HJiZ0aGlzLnNldFN0YXRlKGMuTk9ORSl9KX1vbldoZWVsKGYsZyl7aWYoIXRoaXMuY2FuU2Nyb2xsWm9vbShnKSYmKGY9dGhpcy5lbGVtZW50KCksZi5zZWxlY3QoIi5oZWxwIikuZW1wdHkoKSkpe3ZhciBsPWYuYXBwZW5kKCJkaXYiKS5jbGFzc2VkKCJoZWxwIiwhMCk7bC5hcHBlbmQoInNwYW4iKS50ZXh0KCJBbHQgKyBTY3JvbGwgdG8gWm9vbSIpOwpsLm9uKCJhbmltYXRpb25lbmQiLCgpPT52b2lkIGwucmVtb3ZlKCkpfX1zdGF0aWMgaXNQYW5LZXkoZil7cmV0dXJuISFmLmFsdEtleXx8ISFmLnNoaWZ0S2V5fWNhblNjcm9sbFpvb20oZil7cmV0dXJuIGYuYWx0S2V5fXNldFN0YXRlKGYpe2lmKHRoaXMuc3RhdGUhPWYpe3ZhciBnPXRoaXMuc3RhdGU7dGhpcy5zdGF0ZT1mO3RoaXMucm9vdCgpLnJlbW92ZUNsYXNzKHRoaXMuc3RhdGVDbGFzc05hbWUoZykpO3RoaXMucm9vdCgpLmFkZENsYXNzKHRoaXMuc3RhdGVDbGFzc05hbWUoZikpO2c9PWMuUEFOTklORyYmdGhpcy5wYW5FbmRDYWxsYmFjay5jYWxsQ2FsbGJhY2tzKCk7Zj09Yy5QQU5OSU5HJiZ0aGlzLnBhblN0YXJ0Q2FsbGJhY2suY2FsbENhbGxiYWNrcygpfX1zdGF0ZUNsYXNzTmFtZShmKXtzd2l0Y2goZil7Y2FzZSBjLlBBTk5JTkc6cmV0dXJuInBhbm5pbmciO2Nhc2UgYy5EUkFHX1pPT01JTkc6cmV0dXJuImRyYWctem9vbWluZyI7ZGVmYXVsdDpyZXR1cm4iIn19b25QYW5TdGFydChmKXt0aGlzLnBhblN0YXJ0Q2FsbGJhY2suYWRkKGYpfW9uUGFuRW5kKGYpe3RoaXMucGFuRW5kQ2FsbGJhY2suYWRkKGYpfW9uU2Nyb2xsWm9vbShmKXt0aGlzLnBhblpvb20ub25ab29tRW5kKGYpfW9uRHJhZ1pvb21TdGFydChmKXt0aGlzLmRyYWdab29tTGF5ZXIuaW50ZXJhY3Rpb25TdGFydChmKX1vbkRyYWdab29tRW5kKGYpe3RoaXMuZHJhZ1pvb21MYXllci5pbnRlcmFjdGlvbkVuZChmKX19CmEuUGFuWm9vbURyYWdMYXllcj1kfSkoZW18fChlbT17fSkpOwo8L3NjcmlwdD4KCjxkb20tbW9kdWxlIGlkPSJ2ei1wYW4tem9vbS1zdHlsZSI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICAuaGVscCB7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBhbmltYXRpb24tZGVsYXk6IDFzOwogICAgICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogMXM7CiAgICAgICAgYW5pbWF0aW9uLW5hbWU6IGZhZGUtb3V0OwogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMzAsIDMwLCAzMCwgMC42KTsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgY29sb3I6ICNmZmY7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgcGFkZGluZzogMjBweDsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgdG9wOiAwOwogICAgICB9CgogICAgICAuaGVscCA+IHNwYW4gewogICAgICAgIHdoaXRlLXNwYWNlOiBub3JtYWw7CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMgZmFkZS1vdXQgewogICAgICAgIDAlIHsKICAgICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgfQoKICAgICAgICAxMDAlIHsKICAgICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgfQogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT4KCgoKPGRvbS1tb2R1bGUgaWQ9InZ6LWxpbmUtY2hhcnQyIj4KICA8dGVtcGxhdGU+CiAgICA8ZGl2IGlkPSJjaGFydGRpdiI+PC9kaXY+CiAgICA8dnotY2hhcnQtdG9vbHRpcCBpZD0idG9vbHRpcCIgcG9zaXRpb249IltbdG9vbHRpcFBvc2l0aW9uXV0iIGNvbnRlbnQtY29tcG9uZW50LW5hbWU9InZ6LWxpbmUtY2hhcnQtdG9vbHRpcCI+PC92ei1jaGFydC10b29sdGlwPgogICAgPHN0eWxlIGluY2x1ZGU9InBsb3R0YWJsZS1zdHlsZSI+PC9zdHlsZT4KICAgIDxzdHlsZSBpbmNsdWRlPSJ2ei1wYW4tem9vbS1zdHlsZSI+PC9zdHlsZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICAgIGZsZXgtc2hyaW5rOiAxOwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgIH0KICAgICAgZGl2IHsKICAgICAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICAgIGZsZXgtc2hyaW5rOiAxOwogICAgICB9CgogICAgICAjY2hhcnRkaXYgLm1haW4gewogICAgICAgIGN1cnNvcjogY3Jvc3NoYWlyOwogICAgICB9CgogICAgICA6aG9zdCgucGFua2V5KSAjY2hhcnRkaXYgOm5vdCguZHJhZy16b29taW5nKSAubWFpbiB7CiAgICAgICAgY3Vyc29yOiAtd2Via2l0LWdyYWI7CiAgICAgICAgY3Vyc29yOiBncmFiOwogICAgICB9CgogICAgICA6aG9zdCgubW91c2Vkb3duKSAjY2hhcnRkaXYgLnBhbm5pbmcgLm1haW4gewogICAgICAgIGN1cnNvcjogLXdlYmtpdC1ncmFiYmluZzsKICAgICAgICBjdXJzb3I6IGdyYWJiaW5nOwogICAgICB9CgogICAgICAjY2hhcnRkaXYgbGluZS5ndWlkZS1saW5lIHsKICAgICAgICBzdHJva2U6ICM5OTk7CiAgICAgICAgc3Ryb2tlLXdpZHRoOiAxLjVweDsKICAgICAgfQogICAgICAjY2hhcnRkaXY6aG92ZXIgewogICAgICAgIHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm07CiAgICAgIH0KCiAgICAgIC5naG9zdCB7CiAgICAgICAgb3BhY2l0eTogMC4yOwogICAgICAgIHN0cm9rZS13aWR0aDogMXB4OwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CiAgPHNjcmlwdD4vL35+V0VCUEFUSH5+L3Z6LWxpbmUtY2hhcnQyL3RmLXNjYWxlLmpzCihmdW5jdGlvbihhKXtjbGFzcyBjIGV4dGVuZHMgUGxvdHRhYmxlLlF1YW50aXRhdGl2ZVNjYWxle2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKTt0aGlzLl9pZ25vcmVPdXRsaWVyPSExfXNldFZhbHVlUHJvdmlkZXJGb3JEb21haW4oZCl7dGhpcy5fdmFsdWVQcm92aWRlckZvckRvbWFpbj1kfWlnbm9yZU91dGxpZXIoZCl7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgZD8odGhpcy5faWdub3JlT3V0bGllcj1kLHRoaXMpOnRoaXMuX2lnbm9yZU91dGxpZXJ9X2dldEFsbEluY2x1ZGVkVmFsdWVzKCl7Y29uc3QgZD10aGlzLl92YWx1ZVByb3ZpZGVyRm9yRG9tYWluP3RoaXMuX3ZhbHVlUHJvdmlkZXJGb3JEb21haW4oKTpbXTtyZXR1cm4gdGhpcy5leHRlbnRPZlZhbHVlcyhkKX19YS5UZlNjYWxlPWN9KShlbXx8KGVtPXt9KSk7Cjwvc2NyaXB0PgogIDxzY3JpcHQ+Ly9+fldFQlBBVEh+fi92ei1saW5lLWNoYXJ0Mi9saW5lYXItc2NhbGUuanMKKGZ1bmN0aW9uKGEpe2NsYXNzIGMgZXh0ZW5kcyBQbG90dGFibGUuU2NhbGVzLkxpbmVhcntjb25zdHJ1Y3Rvcigpe3N1cGVyKCk7dGhpcy5faWdub3JlT3V0bGllcj0hMTt0aGlzLnBhZFByb3BvcnRpb24oLjIpfXNldFZhbHVlUHJvdmlkZXJGb3JEb21haW4oZCl7dGhpcy5fdmFsdWVQcm92aWRlckZvckRvbWFpbj1kfV9uaWNlRG9tYWluKGQsZil7Y29uc3QgW2csbF09ZCxrPWwtZztkPTA9PT1rPzEuMSpNYXRoLmFicyhnKSsxLjE6ayp0aGlzLnBhZFByb3BvcnRpb24oKTtyZXR1cm4gc3VwZXIuX25pY2VEb21haW4oWzA8PWcmJmc8az8tLjEqbDpnLWQsbCtkXSxmKX1fZ2V0VW5ib3VuZGVkRXh0ZW50KGQpe2Q9dGhpcy5fZ2V0QWxsSW5jbHVkZWRWYWx1ZXMoZCk7bGV0IGY9dGhpcy5fZGVmYXVsdEV4dGVudCgpOzAhPT1kLmxlbmd0aCYmKGQ9W1Bsb3R0YWJsZS5VdGlscy5NYXRoLm1pbihkLGZbMF0pLFBsb3R0YWJsZS5VdGlscy5NYXRoLm1heChkLGZbMV0pXSxmPXRoaXMuX25pY2VEb21haW4oZCkpOwpyZXR1cm4gZn1fZ2V0QWxsSW5jbHVkZWRWYWx1ZXMoKXtjb25zdCBkPXRoaXMuX3ZhbHVlUHJvdmlkZXJGb3JEb21haW4/dGhpcy5fdmFsdWVQcm92aWRlckZvckRvbWFpbigpOltdO3JldHVybiB0aGlzLmV4dGVudE9mVmFsdWVzKGQpfWV4dGVudE9mVmFsdWVzKGQpe3ZhciBmPWQ9ZC5maWx0ZXIoZz0+UGxvdHRhYmxlLlV0aWxzLk1hdGguaXNWYWxpZE51bWJlcihnKSk7aWYodGhpcy5pZ25vcmVPdXRsaWVyKCkpe2Y9ZC5zb3J0KChrLG0pPT5rLW0pO2NvbnN0IGc9ZDMucXVhbnRpbGUoZiwuMDUpLGw9ZDMucXVhbnRpbGUoZiwuOTUpO2Y9ZC5maWx0ZXIoaz0+az49ZyYmazw9bCl9ZD1kMy5leHRlbnQoZik7cmV0dXJuIG51bGw9PWRbMF18fG51bGw9PWRbMV0/W106ZH1pZ25vcmVPdXRsaWVyKGQpe3JldHVybiJib29sZWFuIj09dHlwZW9mIGQ/KHRoaXMuX2lnbm9yZU91dGxpZXI9ZCx0aGlzKTp0aGlzLl9pZ25vcmVPdXRsaWVyfX1hLkxpbmVhclNjYWxlPWN9KShlbXx8KGVtPXt9KSk7Cjwvc2NyaXB0PgogIDxzY3JpcHQ+Ly9+fldFQlBBVEh+fi92ei1saW5lLWNoYXJ0Mi9sb2ctc2NhbGUuanMKKGZ1bmN0aW9uKGEpe2Z1bmN0aW9uIGMoZyl7cmV0dXJuIE1hdGgubG9nMTAoZyl9ZnVuY3Rpb24gZChnKXtyZXR1cm4gTWF0aC5wb3coMTAsZyl9YS5NSU5fUE9TSVRJVkVfVkFMVUU9TWF0aC5wb3coMiwtMTA3NCk7Y2xhc3MgZiBleHRlbmRzIGEuVGZTY2FsZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKCk7dGhpcy5fZDNMb2dTY2FsZT1kMy5zY2FsZUxvZygpO3RoaXMucGFkUHJvcG9ydGlvbiguMil9c2NhbGUoZyl7cmV0dXJuIDA+PWc/TmFOOnRoaXMuX2QzTG9nU2NhbGUoZyl9aW52ZXJ0KGcpe3JldHVybiB0aGlzLl9kM0xvZ1NjYWxlLmludmVydChnKX1zY2FsZVRyYW5zZm9ybWF0aW9uKGcpe3JldHVybiB0aGlzLnNjYWxlKGcpfWludmVydGVkVHJhbnNmb3JtYXRpb24oZyl7cmV0dXJuIHRoaXMuaW52ZXJ0KGcpfWdldFRyYW5zZm9ybWF0aW9uRG9tYWluKCl7cmV0dXJuIHRoaXMuZG9tYWluKCl9X2dldERvbWFpbigpe3JldHVybiB0aGlzLl91bnRyYW5zZm9ybWVkRG9tYWlufV9zZXREb21haW4oZyl7dGhpcy5fdW50cmFuc2Zvcm1lZERvbWFpbj0KZztjb25zdCBbbCxrXT1nO3N1cGVyLl9zZXREb21haW4oW01hdGgubWF4KGEuTUlOX1BPU0lUSVZFX1ZBTFVFLGwpLGtdKX1fbmljZURvbWFpbihnKXtjb25zdCBbbCxrXT1nO2c9TWF0aC5tYXgoYyhhLk1JTl9QT1NJVElWRV9WQUxVRSksYyhsKSk7Y29uc3QgbT1jKGspO3ZhciBwPW0tZztwPXA/cCp0aGlzLnBhZFByb3BvcnRpb24oKToxO3JldHVybltkKE1hdGgubWF4KGMoYS5NSU5fUE9TSVRJVkVfVkFMVUUpLGctcCkpLGQobStwKV19X2dldFVuYm91bmRlZEV4dGVudChnKXtnPXRoaXMuX2dldEFsbEluY2x1ZGVkVmFsdWVzKGcpO2xldCBsPXRoaXMuX2RlZmF1bHRFeHRlbnQoKTswIT09Zy5sZW5ndGgmJihnPVtQbG90dGFibGUuVXRpbHMuTWF0aC5taW4oZyxsWzBdKSxQbG90dGFibGUuVXRpbHMuTWF0aC5tYXgoZyxsWzFdKV0sbD10aGlzLl9uaWNlRG9tYWluKGcpKTtyZXR1cm4gbH1fZ2V0QWxsSW5jbHVkZWRWYWx1ZXMoKXtyZXR1cm4gc3VwZXIuX2dldEFsbEluY2x1ZGVkVmFsdWVzKCkubWFwKGc9PgowPGc/ZzphLk1JTl9QT1NJVElWRV9WQUxVRSl9X2RlZmF1bHRFeHRlbnQoKXtyZXR1cm5bMSwxMF19X2JhY2tpbmdTY2FsZURvbWFpbihnKXtpZihudWxsPT1nKXJldHVybiB0aGlzLl9kM0xvZ1NjYWxlLmRvbWFpbigpO3RoaXMuX2QzTG9nU2NhbGUuZG9tYWluKGcpO3JldHVybiB0aGlzfV9nZXRSYW5nZSgpe3JldHVybiB0aGlzLl9kM0xvZ1NjYWxlLnJhbmdlKCl9X3NldFJhbmdlKGcpe3RoaXMuX2QzTG9nU2NhbGUucmFuZ2UoZyl9ZGVmYXVsdFRpY2tzKCl7cmV0dXJuIHRoaXMuX2QzTG9nU2NhbGUudGlja3MoKX10aWNrcygpe3JldHVybiB0aGlzLl9kM0xvZ1NjYWxlLnRpY2tzKCl9ZXh0ZW50T2ZWYWx1ZXMoZyl7bGV0IGw9Zz1nLmZpbHRlcihrPT5QbG90dGFibGUuVXRpbHMuTWF0aC5pc1ZhbGlkTnVtYmVyKGspJiYwPGspO2lmKHRoaXMuaWdub3JlT3V0bGllcigpKXtnPWcubWFwKGMpLnNvcnQoKHAscSk9PnAtcSk7Y29uc3Qgaz1kMy5xdWFudGlsZShnLC4wNSksbT1kMy5xdWFudGlsZShnLAouOTUpO2w9Zy5maWx0ZXIocD0+cD49ayYmcDw9bSkubWFwKGQpfWc9ZDMuZXh0ZW50KGwpO3JldHVybiBudWxsPT1nWzBdfHxudWxsPT1nWzFdP1tdOmd9fWEuTG9nU2NhbGU9Zn0pKGVtfHwoZW09e30pKTsKPC9zY3JpcHQ+CiAgPHNjcmlwdD4vL35+V0VCUEFUSH5+L3Z6LWxpbmUtY2hhcnQyL2xpbmUtY2hhcnQuanMKKGZ1bmN0aW9uKGEpe2xldCBjOyhmdW5jdGlvbihnKXtnW2cuVEVYVD0wXT0iVEVYVCI7Z1tnLkRPTT0xXT0iRE9NIn0pKGN8fChjPXt9KSk7bGV0IGQ7KGZ1bmN0aW9uKGcpe2cuTE9HPSJsb2ciO2cuTElORUFSPSJsaW5lYXIifSkoZHx8KGQ9e30pKTtjbGFzcyBme2NvbnN0cnVjdG9yKGcsbCxrLG0scCxxLHIsdCx2LEEseSl7dGhpcy5zZXJpZXNOYW1lcz1bXTt0aGlzLm5hbWUyZGF0YXNldHM9e307dGhpcy5jb2xvclNjYWxlPW07dGhpcy50b29sdGlwPXA7dGhpcy5kYXRhc2V0cz1bXTt0aGlzLl9pZ25vcmVZT3V0bGllcnM9ITE7dGhpcy5sYXN0UG9pbnRzRGF0YXNldD1uZXcgUGxvdHRhYmxlLkRhdGFzZXQ7dGhpcy5uYW5EYXRhc2V0PW5ldyBQbG90dGFibGUuRGF0YXNldDt0aGlzLnlWYWx1ZUFjY2Vzc29yPWw7dGhpcy5zeW1ib2xGdW5jdGlvbj1BO3RoaXMub25EYXRhc2V0Q2hhbmdlZD10aGlzLl9vbkRhdGFzZXRDaGFuZ2VkLmJpbmQodGhpcyk7dGhpcy5fZGVmYXVsdFhSYW5nZT0KdDt0aGlzLl9kZWZhdWx0WVJhbmdlPXY7dGhpcy50b29sdGlwQ29sdW1ucz1xO3RoaXMuYnVpbGRDaGFydChnLGwsayxyLHkpfWJ1aWxkQ2hhcnQoZyxsLGssbSxwKXt0aGlzLmRlc3Ryb3koKTtnPWcoKTt0aGlzLnhBY2Nlc3Nvcj1nLmFjY2Vzc29yO3RoaXMueFNjYWxlPWcuc2NhbGU7dGhpcy54QXhpcz1nLmF4aXM7dGhpcy54QXhpcy5tYXJnaW4oMCkudGlja0xhYmVsUGFkZGluZygzKTtwJiZ0aGlzLnhBeGlzLmZvcm1hdHRlcihwKTt0aGlzLnlTY2FsZT1mLmdldFlTY2FsZUZyb21UeXBlKGspO3RoaXMueVNjYWxlLnNldFZhbHVlUHJvdmlkZXJGb3JEb21haW4oKCk9PnRoaXMuZ2V0VmFsdWVzRm9yWUF4aXNEb21haW5Db21wdXRlKCkpO3RoaXMueUF4aXM9bmV3IFBsb3R0YWJsZS5BeGVzLk51bWVyaWModGhpcy55U2NhbGUsImxlZnQiKTtwPWJtLm11bHRpc2NhbGVGb3JtYXR0ZXIoYm0uWV9BWElTX0ZPUk1BVFRFUl9QUkVDSVNJT04pO3RoaXMueUF4aXMubWFyZ2luKDApLnRpY2tMYWJlbFBhZGRpbmcoNSkuZm9ybWF0dGVyKHApOwp0aGlzLnlBeGlzLnVzZXNUZXh0V2lkdGhBcHByb3hpbWF0aW9uKCk7dGhpcy5maWxsQXJlYT1tO3A9bmV3IGEuUGFuWm9vbURyYWdMYXllcih0aGlzLnhTY2FsZSx0aGlzLnlTY2FsZSwoKT0+dGhpcy5yZXNldERvbWFpbigpKTt0aGlzLnRvb2x0aXBJbnRlcmFjdGlvbj10aGlzLmNyZWF0ZVRvb2x0aXBJbnRlcmFjdGlvbihwKTt0aGlzLnRvb2x0aXBQb2ludHNDb21wb25lbnQ9bmV3IFBsb3R0YWJsZS5Db21wb25lbnQ7bT10aGlzLmJ1aWxkUGxvdCh0aGlzLnhTY2FsZSx0aGlzLnlTY2FsZSxtKTt0aGlzLmdyaWRsaW5lcz1uZXcgUGxvdHRhYmxlLkNvbXBvbmVudHMuR3JpZGxpbmVzKHRoaXMueFNjYWxlLHRoaXMueVNjYWxlKTtnPW51bGw7ayE9PWQuTE9HJiYoZz1uZXcgUGxvdHRhYmxlLkNvbXBvbmVudHMuR3VpZGVMaW5lTGF5ZXIoImhvcml6b250YWwiKSxnLnNjYWxlKHRoaXMueVNjYWxlKS52YWx1ZSgwKSk7az1uZXcgUGxvdHRhYmxlLkNvbXBvbmVudHMuR3VpZGVMaW5lTGF5ZXIoInZlcnRpY2FsIik7Cmsuc2NhbGUodGhpcy54U2NhbGUpLnZhbHVlKDApO3RoaXMuY2VudGVyPW5ldyBQbG90dGFibGUuQ29tcG9uZW50cy5Hcm91cChbdGhpcy5ncmlkbGluZXMsZyxrLG0sdGhpcy50b29sdGlwUG9pbnRzQ29tcG9uZW50LHBdKTt0aGlzLmNlbnRlci5hZGRDbGFzcygibWFpbiIpO3RoaXMub3V0ZXI9bmV3IFBsb3R0YWJsZS5Db21wb25lbnRzLlRhYmxlKFtbdGhpcy55QXhpcyx0aGlzLmNlbnRlcl0sW251bGwsdGhpcy54QXhpc11dKX1idWlsZFBsb3QoZyxsLGspe2smJih0aGlzLm1hcmdpbkFyZWFQbG90PW5ldyBQbG90dGFibGUuUGxvdHMuQXJlYSx0aGlzLm1hcmdpbkFyZWFQbG90LngodGhpcy54QWNjZXNzb3IsZyksdGhpcy5tYXJnaW5BcmVhUGxvdC55KGsuaGlnaGVyQWNjZXNzb3IsbCksdGhpcy5tYXJnaW5BcmVhUGxvdC55MChrLmxvd2VyQWNjZXNzb3IpLHRoaXMubWFyZ2luQXJlYVBsb3QuYXR0cigiZmlsbCIsKHIsdCx2KT0+dGhpcy5jb2xvclNjYWxlLnNjYWxlKHYubWV0YWRhdGEoKS5uYW1lKSksCnRoaXMubWFyZ2luQXJlYVBsb3QuYXR0cigiZmlsbC1vcGFjaXR5IiwuMyksdGhpcy5tYXJnaW5BcmVhUGxvdC5hdHRyKCJzdHJva2Utd2lkdGgiLDApKTt0aGlzLnNtb290aGVkQWNjZXNzb3I9cj0+ci5zbW9vdGhlZDtrPW5ldyBQbG90dGFibGUuUGxvdHMuTGluZTtrLngodGhpcy54QWNjZXNzb3IsZyk7ay55KHRoaXMueVZhbHVlQWNjZXNzb3IsbCk7ay5hdHRyKCJzdHJva2UiLChyLHQsdik9PnRoaXMuY29sb3JTY2FsZS5zY2FsZSh2Lm1ldGFkYXRhKCkubmFtZSkpO3RoaXMubGluZVBsb3Q9azt0aGlzLnNldHVwVG9vbHRpcHMoayk7bGV0IG09bmV3IFBsb3R0YWJsZS5QbG90cy5MaW5lO20ueCh0aGlzLnhBY2Nlc3NvcixnKTttLnkodGhpcy5zbW9vdGhlZEFjY2Vzc29yLGwpO20uYXR0cigic3Ryb2tlIiwocix0LHYpPT50aGlzLmNvbG9yU2NhbGUuc2NhbGUodi5tZXRhZGF0YSgpLm5hbWUpKTt0aGlzLnNtb290aExpbmVQbG90PW07aWYodGhpcy5zeW1ib2xGdW5jdGlvbil7dmFyIHA9Cm5ldyBQbG90dGFibGUuUGxvdHMuU2NhdHRlcjtwLngodGhpcy54QWNjZXNzb3IsZyk7cC55KHRoaXMueVZhbHVlQWNjZXNzb3IsbCk7cC5hdHRyKCJmaWxsIiwocix0LHYpPT50aGlzLmNvbG9yU2NhbGUuc2NhbGUodi5tZXRhZGF0YSgpLm5hbWUpKTtwLmF0dHIoIm9wYWNpdHkiLDEpO3Auc2l6ZSgyKmJtLlRPT0xUSVBfQ0lSQ0xFX1NJWkUpO3Auc3ltYm9sKChyLHQsdik9PnRoaXMuc3ltYm9sRnVuY3Rpb24odi5tZXRhZGF0YSgpLm5hbWUpKTt0aGlzLm1hcmtlcnNTY2F0dGVyUGxvdD1wfXA9bmV3IFBsb3R0YWJsZS5QbG90cy5TY2F0dGVyO3AueCh0aGlzLnhBY2Nlc3NvcixnKTtwLnkodGhpcy55VmFsdWVBY2Nlc3NvcixsKTtwLmF0dHIoImZpbGwiLHI9PnRoaXMuY29sb3JTY2FsZS5zY2FsZShyLm5hbWUpKTtwLmF0dHIoIm9wYWNpdHkiLDEpO3Auc2l6ZSgyKmJtLlRPT0xUSVBfQ0lSQ0xFX1NJWkUpO3AuZGF0YXNldHMoW3RoaXMubGFzdFBvaW50c0RhdGFzZXRdKTt0aGlzLnNjYXR0ZXJQbG90PQpwO2xldCBxPW5ldyBQbG90dGFibGUuUGxvdHMuU2NhdHRlcjtxLngodGhpcy54QWNjZXNzb3IsZyk7cS55KHI9PnIuZGlzcGxheVksbCk7cS5hdHRyKCJmaWxsIixyPT50aGlzLmNvbG9yU2NhbGUuc2NhbGUoci5uYW1lKSk7cS5hdHRyKCJvcGFjaXR5IiwxKTtxLnNpemUoMipibS5OQU5fU1lNQk9MX1NJWkUpO3EuZGF0YXNldHMoW3RoaXMubmFuRGF0YXNldF0pO3Euc3ltYm9sKFBsb3R0YWJsZS5TeW1ib2xGYWN0b3JpZXMudHJpYW5nbGUpO3RoaXMubmFuRGlzcGxheT1xO2c9W3EscCxtLGtdO3RoaXMubWFyZ2luQXJlYVBsb3QmJmcucHVzaCh0aGlzLm1hcmdpbkFyZWFQbG90KTt0aGlzLm1hcmtlcnNTY2F0dGVyUGxvdCYmZy5wdXNoKHRoaXMubWFya2Vyc1NjYXR0ZXJQbG90KTtyZXR1cm4gbmV3IFBsb3R0YWJsZS5Db21wb25lbnRzLkdyb3VwKGcpfV9vbkRhdGFzZXRDaGFuZ2VkKGcpe3RoaXMuc21vb3RoaW5nRW5hYmxlZCYmdGhpcy5yZXNtb290aERhdGFzZXQoZyk7dGhpcy51cGRhdGVTcGVjaWFsRGF0YXNldHMoKX1pZ25vcmVZT3V0bGllcnMoZyl7ZyE9PQp0aGlzLl9pZ25vcmVZT3V0bGllcnMmJih0aGlzLl9pZ25vcmVZT3V0bGllcnM9Zyx0aGlzLnVwZGF0ZVNwZWNpYWxEYXRhc2V0cygpLHRoaXMueVNjYWxlLmlnbm9yZU91dGxpZXIoZyksdGhpcy5yZXNldFlEb21haW4oKSl9Z2V0VmFsdWVzRm9yWUF4aXNEb21haW5Db21wdXRlKCl7Y29uc3QgZz10aGlzLmdldEFjY2Vzc29yc0ZvckNvbXB1dGluZ1lSYW5nZSgpO3JldHVybiBfLmZsYXR0ZW5EZWVwKHRoaXMuZGF0YXNldHMubWFwKGw9PmcubWFwKGs9PmwuZGF0YSgpLm1hcChtPT5rKG0sLTEsbCkpKSkpLmZpbHRlcihpc0Zpbml0ZSl9dXBkYXRlU3BlY2lhbERhdGFzZXRzKCl7Y29uc3QgZz10aGlzLmdldFlBeGlzQWNjZXNzb3IoKTt2YXIgbD10aGlzLmRhdGFzZXRzLm1hcChrPT57bGV0IG09bnVsbCxwPWsuZGF0YSgpLmZpbHRlcihxPT4haXNOYU4oZyhxLC0xLGspKSk7MDxwLmxlbmd0aCYmKG09cFtwLmxlbmd0aC0xXSxtLm5hbWU9ay5tZXRhZGF0YSgpLm5hbWUsbS5yZWxhdGl2ZT0KYm0ucmVsYXRpdmVBY2Nlc3NvcihtLC0xLGspKTtyZXR1cm4gbX0pLmZpbHRlcihrPT5udWxsIT1rKTt0aGlzLmxhc3RQb2ludHNEYXRhc2V0LmRhdGEobCk7dGhpcy5tYXJrZXJzU2NhdHRlclBsb3QmJnRoaXMubWFya2Vyc1NjYXR0ZXJQbG90LmRhdGFzZXRzKHRoaXMuZGF0YXNldHMubWFwKHRoaXMuY3JlYXRlU2FtcGxlZERhdGFzZXRGb3JNYXJrZXJzKSk7bD1fLmZsYXR0ZW4odGhpcy5kYXRhc2V0cy5tYXAoaz0+e2xldCBtPW51bGwscD1rLmRhdGEoKSxxPTA7Zm9yKDtxPHAubGVuZ3RoJiZudWxsPT1tOylpc05hTihnKHBbcV0sLTEsaykpfHwobT1nKHBbcV0sLTEsaykpLHErKztudWxsPT1tJiYobT0wKTtsZXQgcj1bXTtmb3IocT0wO3E8cC5sZW5ndGg7cSsrKWlzTmFOKGcocFtxXSwtMSxrKSk/KHBbcV0ubmFtZT1rLm1ldGFkYXRhKCkubmFtZSxwW3FdLmRpc3BsYXlZPW0scFtxXS5yZWxhdGl2ZT1ibS5yZWxhdGl2ZUFjY2Vzc29yKHBbcV0sLTEsayksci5wdXNoKHBbcV0pKToKbT1nKHBbcV0sLTEsayk7cmV0dXJuIHJ9KSk7dGhpcy5uYW5EYXRhc2V0LmRhdGEobCl9cmVzZXREb21haW4oKXt0aGlzLnJlc2V0WERvbWFpbigpO3RoaXMucmVzZXRZRG9tYWluKCl9cmVzZXRYRG9tYWluKCl7aWYobnVsbCE9dGhpcy5fZGVmYXVsdFhSYW5nZSl2YXIgZz10aGlzLl9kZWZhdWx0WFJhbmdlO2Vsc2UgZz10aGlzLnhTY2FsZSxnLl9kb21haW5NaW49bnVsbCxnLl9kb21haW5NYXg9bnVsbCxnPWcuX2dldEV4dGVudCgpO3RoaXMueFNjYWxlLmRvbWFpbihnKX1yZXNldFlEb21haW4oKXtudWxsIT10aGlzLl9kZWZhdWx0WVJhbmdlP3RoaXMueVNjYWxlLmRvbWFpbih0aGlzLl9kZWZhdWx0WVJhbmdlKToodGhpcy55U2NhbGUuYXV0b0RvbWFpbigpLHRoaXMueVNjYWxlLmRvbWFpbih0aGlzLnlTY2FsZS5kb21haW4oKSkpfWdldEFjY2Vzc29yc0ZvckNvbXB1dGluZ1lSYW5nZSgpe2NvbnN0IGc9W3RoaXMuZ2V0WUF4aXNBY2Nlc3NvcigpXTt0aGlzLmZpbGxBcmVhJiZnLnB1c2godGhpcy5maWxsQXJlYS5sb3dlckFjY2Vzc29yLAp0aGlzLmZpbGxBcmVhLmhpZ2hlckFjY2Vzc29yKTtyZXR1cm4gZ31nZXRZQXhpc0FjY2Vzc29yKCl7cmV0dXJuIHRoaXMuc21vb3RoaW5nRW5hYmxlZD90aGlzLnNtb290aGVkQWNjZXNzb3I6dGhpcy55VmFsdWVBY2Nlc3Nvcn1jcmVhdGVUb29sdGlwSW50ZXJhY3Rpb24oZyl7Y29uc3QgbD1uZXcgYm0uUG9pbnRlckludGVyYWN0aW9uLGs9KCk9PntsLmVuYWJsZWQoITEpO3RoaXMuaGlkZVRvb2x0aXBzKCl9LG09KCk9PmwuZW5hYmxlZCghMCk7Zy5vblBhblN0YXJ0KGspO2cub25EcmFnWm9vbVN0YXJ0KGspO2cub25QYW5FbmQobSk7Zy5vbkRyYWdab29tRW5kKG0pO2cub25TY3JvbGxab29tKCgpPT50aGlzLnVwZGF0ZVRvb2x0aXBDb250ZW50KHRoaXMuX2xhc3RNb3VzZVBvc2l0aW9uKSk7bC5vblBvaW50ZXJNb3ZlKHA9Pnt0aGlzLl9sYXN0TW91c2VQb3NpdGlvbj1wO3RoaXMudXBkYXRlVG9vbHRpcENvbnRlbnQocCl9KTtsLm9uUG9pbnRlckV4aXQoKCk9PnRoaXMuaGlkZVRvb2x0aXBzKCkpOwpyZXR1cm4gbH11cGRhdGVUb29sdGlwQ29udGVudChnKXt0aGlzLmxpbmVQbG90JiYod2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuX3Rvb2x0aXBVcGRhdGVBbmltYXRpb25GcmFtZSksdGhpcy5fdG9vbHRpcFVwZGF0ZUFuaW1hdGlvbkZyYW1lPXdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PntsZXQgbD17eDpnLngseTpnLnksZGF0dW06bnVsbCxkYXRhc2V0Om51bGx9LGs9dGhpcy5ncmlkbGluZXMuY29udGVudCgpLm5vZGUoKS5nZXRCQm94KCk7dmFyIG09dGhpcy5saW5lUGxvdC5kYXRhc2V0cygpLm1hcCh0PT50aGlzLmZpbmRDbG9zZXN0UG9pbnQobCx0KSkuZmlsdGVyKEJvb2xlYW4pO2xldCBwPVBsb3R0YWJsZS5VdGlscy5ET00uaW50ZXJzZWN0c0JCb3gscT1tLmZpbHRlcih0PT5wKHQueCx0Lnksayl8fGlzTmFOKHRoaXMueVZhbHVlQWNjZXNzb3IodC5kYXR1bSwwLHQuZGF0YXNldCkpKSxyPXEuZmlsdGVyKHQ9PiFpc05hTih0aGlzLnlWYWx1ZUFjY2Vzc29yKHQuZGF0dW0sCjAsdC5kYXRhc2V0KSkpOzAhPT1tLmxlbmd0aD8odGhpcy5zY2F0dGVyUGxvdC5hdHRyKCJkaXNwbGF5Iiwibm9uZSIpLG09dGhpcy50b29sdGlwUG9pbnRzQ29tcG9uZW50LmNvbnRlbnQoKS5zZWxlY3RBbGwoIi5wb2ludCIpLmRhdGEocix0PT50LmRhdGFzZXQubWV0YWRhdGEoKS5uYW1lKSxtLmVudGVyKCkuYXBwZW5kKCJjaXJjbGUiKS5jbGFzc2VkKCJwb2ludCIsITApLG0uYXR0cigiciIsYm0uVE9PTFRJUF9DSVJDTEVfU0laRSkuYXR0cigiY3giLHQ9PnQueCkuYXR0cigiY3kiLHQ9PnQueSkuc3R5bGUoInN0cm9rZSIsIm5vbmUiKS5hdHRyKCJmaWxsIix0PT50aGlzLmNvbG9yU2NhbGUuc2NhbGUodC5kYXRhc2V0Lm1ldGFkYXRhKCkubmFtZSkpLG0uZXhpdCgpLnJlbW92ZSgpLHRoaXMuZHJhd1Rvb2x0aXBzKHEsbCx0aGlzLnRvb2x0aXBDb2x1bW5zKSk6dGhpcy5oaWRlVG9vbHRpcHMoKX0pKX1oaWRlVG9vbHRpcHMoKXt3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5fdG9vbHRpcFVwZGF0ZUFuaW1hdGlvbkZyYW1lKTsKdGhpcy50b29sdGlwLmhpZGUoKTt0aGlzLnNjYXR0ZXJQbG90LmF0dHIoImRpc3BsYXkiLCJibG9jayIpO3RoaXMudG9vbHRpcFBvaW50c0NvbXBvbmVudC5jb250ZW50KCkuc2VsZWN0QWxsKCIucG9pbnQiKS5yZW1vdmUoKX1zZXR1cFRvb2x0aXBzKGcpe2cub25EZXRhY2goKCk9Pnt0aGlzLnRvb2x0aXBJbnRlcmFjdGlvbi5kZXRhY2hGcm9tKCk7dGhpcy50b29sdGlwSW50ZXJhY3Rpb24uZW5hYmxlZCghMSl9KTtnLm9uQW5jaG9yKCgpPT57dGhpcy50b29sdGlwSW50ZXJhY3Rpb24uYXR0YWNoVG8oZyk7dGhpcy50b29sdGlwSW50ZXJhY3Rpb24uZW5hYmxlZCghMCl9KX1kcmF3VG9vbHRpcHMoZyxsLGspe2lmKGcubGVuZ3RoKXt2YXIge2NvbG9yU2NhbGU6bX09dGhpcztrPVt7dGl0bGU6IiIsc3RhdGljOiExLGV2YWxUeXBlOmMuRE9NLGV2YWx1YXRlKHkpe2QzLnNlbGVjdCh0aGlzKS5zZWxlY3QoInNwYW4iKS5zdHlsZSgiYmFja2dyb3VuZC1jb2xvciIsKCk9Pm0uc2NhbGUoeS5kYXRhc2V0Lm1ldGFkYXRhKCkubmFtZSkpOwpyZXR1cm4iIn0sZW50ZXIoeSl7ZDMuc2VsZWN0KHRoaXMpLmFwcGVuZCgic3BhbiIpLmNsYXNzZWQoInN3YXRjaCIsITApLnN0eWxlKCJiYWNrZ3JvdW5kLWNvbG9yIiwoKT0+bS5zY2FsZSh5LmRhdGFzZXQubWV0YWRhdGEoKS5uYW1lKSl9fSwuLi5rXTt2YXIgcD15PT5NYXRoLnBvdyh5LngtbC54LDIpK01hdGgucG93KHkueS1sLnksMikscT1fLm1pbihnLm1hcChwKSkscj10aGlzLnNtb290aGluZ0VuYWJsZWQ/dGhpcy5zbW9vdGhlZEFjY2Vzc29yOnRoaXMueVZhbHVlQWNjZXNzb3I7Zz0iYXNjZW5kaW5nIj09PXRoaXMudG9vbHRpcFNvcnRpbmdNZXRob2Q/Xy5zb3J0QnkoZyx5PT5yKHkuZGF0dW0sLTEseS5kYXRhc2V0KSk6ImRlc2NlbmRpbmciPT09dGhpcy50b29sdGlwU29ydGluZ01ldGhvZD9fLnNvcnRCeShnLHk9PnIoeS5kYXR1bSwtMSx5LmRhdGFzZXQpKS5yZXZlcnNlKCk6Im5lYXJlc3QiPT09dGhpcy50b29sdGlwU29ydGluZ01ldGhvZD9fLnNvcnRCeShnLHApOmcuc2xpY2UoMCkucmV2ZXJzZSgpOwp2YXIgdD10aGlzLHY9ZDMuc2VsZWN0KHRoaXMudG9vbHRpcC5jb250ZW50KCkpLnNlbGVjdCgidGFibGUiKSxBPXYuc2VsZWN0KCJ0aGVhZCIpLnNlbGVjdEFsbCgidGgiKS5kYXRhKGsseT0+eS50aXRsZSk7QS5lbnRlcigpLmFwcGVuZCgidGgiKS50ZXh0KHk9PnkudGl0bGUpLm5vZGVzKCk7QS5leGl0KCkucmVtb3ZlKCk7Zz12LnNlbGVjdCgidGJvZHkiKS5zZWxlY3RBbGwoInRyIikuZGF0YShnLHk9PnkuZGF0YXNldC5tZXRhZGF0YSgpLm5hbWUpO2cuY2xhc3NlZCgiZGlzdGFudCIseT0+e3ZhciB4PXkuZGF0YXNldC5kYXRhKClbMF0sQz1fLmxhc3QoeS5kYXRhc2V0LmRhdGEoKSk7eD10aGlzLnhTY2FsZS5zY2FsZSh0aGlzLnhBY2Nlc3Nvcih4LDAseS5kYXRhc2V0KSk7Qz10aGlzLnhTY2FsZS5zY2FsZSh0aGlzLnhBY2Nlc3NvcihDLDAseS5kYXRhc2V0KSk7eT10aGlzLnNtb290aGluZ0VuYWJsZWQ/eS5kYXR1bS5zbW9vdGhlZDp0aGlzLnlWYWx1ZUFjY2Vzc29yKHkuZGF0dW0sCjAseS5kYXRhc2V0KTtyZXR1cm4gbC54PHh8fGwueD5DfHxpc05hTih5KX0pLmNsYXNzZWQoImNsb3Nlc3QiLHk9PnAoeSk9PT1xKS5lYWNoKGZ1bmN0aW9uKHkpe3QuZHJhd1Rvb2x0aXBSb3codGhpcyxrLHkpfSkub3JkZXIoKTtnLmV4aXQoKS5yZW1vdmUoKTtnLmVudGVyKCkuYXBwZW5kKCJ0ciIpLmVhY2goZnVuY3Rpb24oeSl7dC5kcmF3VG9vbHRpcFJvdyh0aGlzLGsseSl9KS5ub2RlcygpO3RoaXMudG9vbHRpcC51cGRhdGVBbmRQb3NpdGlvbih0aGlzLnRhcmdldFNWRy5ub2RlKCkpfWVsc2UgdGhpcy50b29sdGlwLmhpZGUoKX1kcmF3VG9vbHRpcFJvdyhnLGwsayl7Y29uc3QgbT10aGlzO2c9ZDMuc2VsZWN0KGcpLnNlbGVjdEFsbCgidGQiKS5kYXRhKGwpO2cuZWFjaChmdW5jdGlvbihwKXtwLnN0YXRpY3x8bS5kcmF3VG9vbHRpcENvbHVtbi5jYWxsKG0sdGhpcyxwLGspfSk7Zy5lbnRlcigpLmFwcGVuZCgidGQiKS5lYWNoKGZ1bmN0aW9uKHApe3AuZW50ZXImJnAuZW50ZXIuY2FsbCh0aGlzLAprKTttLmRyYXdUb29sdGlwQ29sdW1uLmNhbGwobSx0aGlzLHAsayl9KX1kcmF3VG9vbHRpcENvbHVtbihnLGwsayl7Y29uc3Qge3Ntb290aGluZ0VuYWJsZWQ6bX09dGhpcztsLmV2YWxUeXBlPT1jLkRPTT9sLmV2YWx1YXRlLmNhbGwoZyxrLHtzbW9vdGhpbmdFbmFibGVkOm19KTpkMy5zZWxlY3QoZykudGV4dChsLmV2YWx1YXRlLmNhbGwoZyxrLHtzbW9vdGhpbmdFbmFibGVkOm19KSl9ZmluZENsb3Nlc3RQb2ludChnLGwpe2NvbnN0IGs9bC5kYXRhKCkubWFwKChxLHIpPT50aGlzLnhTY2FsZS5zY2FsZSh0aGlzLnhBY2Nlc3NvcihxLHIsbCkpKTtsZXQgbT1fLnNvcnRlZEluZGV4KGssZy54KTtpZigwPT1rLmxlbmd0aClyZXR1cm4gbnVsbDttPT09ay5sZW5ndGg/LS1tOjAhPT1tJiYobT1NYXRoLmFicyhrW20tMV0tZy54KTxNYXRoLmFicyhrW21dLWcueCk/bS0xOm0pO2c9bC5kYXRhKClbbV07Y29uc3QgcD10aGlzLnNtb290aGluZ0VuYWJsZWQ/dGhpcy5zbW9vdGhlZEFjY2Vzc29yKGcsCm0sbCk6dGhpcy55VmFsdWVBY2Nlc3NvcihnLG0sbCk7cmV0dXJue3g6a1ttXSx5OnRoaXMueVNjYWxlLnNjYWxlKHApLGRhdHVtOmcsZGF0YXNldDpsfX1yZXNtb290aERhdGFzZXQoZyl7bGV0IGw9Zy5kYXRhKCk7Y29uc3Qgaz10aGlzLnNtb290aGluZ1dlaWdodDtsZXQgbT0wPGwubGVuZ3RoPzA6TmFOLHA9MDtjb25zdCBxPWwubWFwKCh0LHYpPT50aGlzLnlWYWx1ZUFjY2Vzc29yKHQsdixnKSkscj1xLmV2ZXJ5KHQ9PnQ9PXFbMF0pO2wuZm9yRWFjaCgodCx2KT0+e3Y9cVt2XTtyfHwhTnVtYmVyLmlzRmluaXRlKHYpP3Quc21vb3RoZWQ9djoobT1tKmsrKDEtaykqdixwKyssdj0xLDEhPT1rJiYodj0xLU1hdGgucG93KGsscCkpLHQuc21vb3RoZWQ9bS92KX0pfWdldERhdGFzZXQoZyl7dm9pZCAwPT09dGhpcy5uYW1lMmRhdGFzZXRzW2ddJiYodGhpcy5uYW1lMmRhdGFzZXRzW2ddPW5ldyBQbG90dGFibGUuRGF0YXNldChbXSx7bmFtZTpnLG1ldGE6bnVsbH0pKTtyZXR1cm4gdGhpcy5uYW1lMmRhdGFzZXRzW2ddfXN0YXRpYyBnZXRZU2NhbGVGcm9tVHlwZShnKXtpZihnPT09CmQuTE9HKXJldHVybiBuZXcgYS5Mb2dTY2FsZTtpZihnPT09ZC5MSU5FQVIpcmV0dXJuIG5ldyBhLkxpbmVhclNjYWxlO3Rocm93IEVycm9yKCJVbnJlY29nbml6ZWQgeVNjYWxlIHR5cGUgIitnKTt9c2V0VmlzaWJsZVNlcmllcyhnKXt0aGlzLnNlcmllc05hbWVzPWc9Zy5zb3J0KCk7Zy5yZXZlcnNlKCk7dGhpcy5kYXRhc2V0cy5mb3JFYWNoKGw9Pmwub2ZmVXBkYXRlKHRoaXMub25EYXRhc2V0Q2hhbmdlZCkpO3RoaXMuZGF0YXNldHM9Zy5tYXAobD0+dGhpcy5nZXREYXRhc2V0KGwpKTt0aGlzLmRhdGFzZXRzLmZvckVhY2gobD0+bC5vblVwZGF0ZSh0aGlzLm9uRGF0YXNldENoYW5nZWQpKTt0aGlzLmxpbmVQbG90LmRhdGFzZXRzKHRoaXMuZGF0YXNldHMpO3RoaXMuc21vb3RoaW5nRW5hYmxlZCYmdGhpcy5zbW9vdGhMaW5lUGxvdC5kYXRhc2V0cyh0aGlzLmRhdGFzZXRzKTt0aGlzLm1hcmdpbkFyZWFQbG90JiZ0aGlzLm1hcmdpbkFyZWFQbG90LmRhdGFzZXRzKHRoaXMuZGF0YXNldHMpOwp0aGlzLnVwZGF0ZVNwZWNpYWxEYXRhc2V0cygpfWNyZWF0ZVNhbXBsZWREYXRhc2V0Rm9yTWFya2VycyhnKXtjb25zdCBsPWcuZGF0YSgpO2lmKDIwPj1sLmxlbmd0aClyZXR1cm4gZztjb25zdCBrPU1hdGguY2VpbChsLmxlbmd0aC8yMCksbT1BcnJheShNYXRoLmZsb29yKGwubGVuZ3RoL2spKTtmb3IobGV0IHA9MCxxPTA7cDxtLmxlbmd0aDtwKysscSs9ayltW3BdPWxbcV07cmV0dXJuIG5ldyBQbG90dGFibGUuRGF0YXNldChtLGcubWV0YWRhdGEoKSl9c2V0U2VyaWVzRGF0YShnLGwpe3RoaXMuZ2V0RGF0YXNldChnKS5kYXRhKGwpO3RoaXMubWVhc3VyZUJCb3hBbmRNYXliZUludmFsaWRhdGVMYXlvdXRJblJhZigpfXNldFNlcmllc01ldGFkYXRhKGcsbCl7bD1PYmplY3QuYXNzaWduKHt9LHRoaXMuZ2V0RGF0YXNldChnKS5tZXRhZGF0YSgpLHttZXRhOmx9KTt0aGlzLmdldERhdGFzZXQoZykubWV0YWRhdGEobCl9c21vb3RoaW5nVXBkYXRlKGcpe3RoaXMuc21vb3RoaW5nV2VpZ2h0PQpnO3RoaXMuZGF0YXNldHMuZm9yRWFjaChsPT50aGlzLnJlc21vb3RoRGF0YXNldChsKSk7dGhpcy5zbW9vdGhpbmdFbmFibGVkfHwodGhpcy5saW5lUGxvdC5hZGRDbGFzcygiZ2hvc3QiKSx0aGlzLnNjYXR0ZXJQbG90LnkodGhpcy5zbW9vdGhlZEFjY2Vzc29yLHRoaXMueVNjYWxlKSx0aGlzLnNtb290aGluZ0VuYWJsZWQ9ITAsdGhpcy5zbW9vdGhMaW5lUGxvdC5kYXRhc2V0cyh0aGlzLmRhdGFzZXRzKSk7dGhpcy5tYXJrZXJzU2NhdHRlclBsb3QmJnRoaXMubWFya2Vyc1NjYXR0ZXJQbG90LnkodGhpcy5nZXRZQXhpc0FjY2Vzc29yKCksdGhpcy55U2NhbGUpO3RoaXMudXBkYXRlU3BlY2lhbERhdGFzZXRzKCl9c21vb3RoaW5nRGlzYWJsZSgpe3RoaXMuc21vb3RoaW5nRW5hYmxlZCYmKHRoaXMubGluZVBsb3QucmVtb3ZlQ2xhc3MoImdob3N0IiksdGhpcy5zY2F0dGVyUGxvdC55KHRoaXMueVZhbHVlQWNjZXNzb3IsdGhpcy55U2NhbGUpLHRoaXMuc21vb3RoTGluZVBsb3QuZGF0YXNldHMoW10pLAp0aGlzLnNtb290aGluZ0VuYWJsZWQ9ITEsdGhpcy51cGRhdGVTcGVjaWFsRGF0YXNldHMoKSk7dGhpcy5tYXJrZXJzU2NhdHRlclBsb3QmJnRoaXMubWFya2Vyc1NjYXR0ZXJQbG90LnkodGhpcy5nZXRZQXhpc0FjY2Vzc29yKCksdGhpcy55U2NhbGUpfXNldFRvb2x0aXBTb3J0aW5nTWV0aG9kKGcpe3RoaXMudG9vbHRpcFNvcnRpbmdNZXRob2Q9Z31yZW5kZXJUbyhnKXt0aGlzLnRhcmdldFNWRz1nO3RoaXMub3V0ZXIucmVuZGVyVG8oZyk7bnVsbCE9dGhpcy5fZGVmYXVsdFhSYW5nZSYmdGhpcy5yZXNldFhEb21haW4oKTtudWxsIT10aGlzLl9kZWZhdWx0WVJhbmdlJiZ0aGlzLnJlc2V0WURvbWFpbigpO3RoaXMubWVhc3VyZUJCb3hBbmRNYXliZUludmFsaWRhdGVMYXlvdXRJblJhZigpfXJlZHJhdygpe3dpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9yZWRyYXdSYWYpO3RoaXMuX3JlZHJhd1JhZj13aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57dGhpcy5tZWFzdXJlQkJveEFuZE1heWJlSW52YWxpZGF0ZUxheW91dCgpOwp0aGlzLm91dGVyLnJlZHJhdygpfSl9bWVhc3VyZUJCb3hBbmRNYXliZUludmFsaWRhdGVMYXlvdXRJblJhZigpe3dpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9pbnZhbGlkYXRlTGF5b3V0UmFmKTt0aGlzLl9pbnZhbGlkYXRlTGF5b3V0UmFmPXdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9Pnt0aGlzLm1lYXN1cmVCQm94QW5kTWF5YmVJbnZhbGlkYXRlTGF5b3V0KCl9KX1tZWFzdXJlQkJveEFuZE1heWJlSW52YWxpZGF0ZUxheW91dCgpe2lmKHRoaXMuX2xhc3REcmF3QkJveCl7Y29uc3Qge3dpZHRoOmd9PXRoaXMuX2xhc3REcmF3QkJveCx7d2lkdGg6bH09dGhpcy50YXJnZXRTVkcubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOzA9PWcmJmc8bCYmdGhpcy5vdXRlci5pbnZhbGlkYXRlQ2FjaGUoKX10aGlzLl9sYXN0RHJhd0JCb3g9dGhpcy50YXJnZXRTVkcubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpfWRlc3Ryb3koKXt3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5fcmVkcmF3UmFmKTsKd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuX2ludmFsaWRhdGVMYXlvdXRSYWYpO3RoaXMub3V0ZXImJnRoaXMub3V0ZXIuZGVzdHJveSgpfW9uQW5jaG9yKGcpe2lmKHRoaXMub3V0ZXIpdGhpcy5vdXRlci5vbkFuY2hvcihnKX19YS5MaW5lQ2hhcnQ9Zn0pKGVtfHwoZW09e30pKTsKPC9zY3JpcHQ+CiAgPHNjcmlwdD4vL35+V0VCUEFUSH5+L3Z6LWxpbmUtY2hhcnQyL3Z6LWxpbmUtY2hhcnQyLmpzCihmdW5jdGlvbihhKXtjb25zdCBjPWJtLm11bHRpc2NhbGVGb3JtYXR0ZXIoYm0uWV9UT09MVElQX0ZPUk1BVFRFUl9QUkVDSVNJT04pLGQ9Zj0+aXNOYU4oZik/Ik5hTiI6YyhmKTthLkRFRkFVTFRfVE9PTFRJUF9DT0xVTU5TPVt7dGl0bGU6Ik5hbWUiLGV2YWx1YXRlOmY9PmYuZGF0YXNldC5tZXRhZGF0YSgpLm5hbWV9LHt0aXRsZToiU21vb3RoZWQiLGV2YWx1YXRlKGYsZyl7KHtzbW9vdGhpbmdFbmFibGVkOmd9PWcpO3JldHVybiBkKGc/Zi5kYXR1bS5zbW9vdGhlZDpmLmRhdHVtLnNjYWxhcil9fSx7dGl0bGU6IlZhbHVlIixldmFsdWF0ZTpmPT5kKGYuZGF0dW0uc2NhbGFyKX0se3RpdGxlOiJTdGVwIixldmFsdWF0ZTpmPT5ibS5zdGVwRm9ybWF0dGVyKGYuZGF0dW0uc3RlcCl9LHt0aXRsZToiVGltZSIsZXZhbHVhdGU6Zj0+Ym0udGltZUZvcm1hdHRlcihmLmRhdHVtLndhbGxfdGltZSl9LHt0aXRsZToiUmVsYXRpdmUiLGV2YWx1YXRlOmY9PmJtLnJlbGF0aXZlRm9ybWF0dGVyKGJtLnJlbGF0aXZlQWNjZXNzb3IoZi5kYXR1bSwKLTEsZi5kYXRhc2V0KSl9XTtQb2x5bWVyKHtpczoidnotbGluZS1jaGFydDIiLHByb3BlcnRpZXM6e2NvbG9yU2NhbGU6e3R5cGU6T2JqZWN0LHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuKG5ldyBQbG90dGFibGUuU2NhbGVzLkNvbG9yKS5yYW5nZShkMy5zY2hlbWVDYXRlZ29yeTEwKX19LHN5bWJvbEZ1bmN0aW9uOk9iamVjdCxzbW9vdGhpbmdFbmFibGVkOnt0eXBlOkJvb2xlYW4sbm90aWZ5OiEwLHZhbHVlOiExfSxzbW9vdGhpbmdXZWlnaHQ6e3R5cGU6TnVtYmVyLHZhbHVlOi42fSx4VHlwZTp7dHlwZTpTdHJpbmcsdmFsdWU6IiJ9LHhDb21wb25lbnRzQ3JlYXRpb25NZXRob2Q6e3R5cGU6T2JqZWN0LHZhbHVlOiIifSx4QXhpc0Zvcm1hdHRlcjpPYmplY3QseVZhbHVlQWNjZXNzb3I6e3R5cGU6T2JqZWN0LHZhbHVlOigpPT5mPT5mLnNjYWxhcn0sdG9vbHRpcENvbHVtbnM6e3R5cGU6QXJyYXksdmFsdWU6KCk9PmEuREVGQVVMVF9UT09MVElQX0NPTFVNTlN9LGZpbGxBcmVhOk9iamVjdCwKZGVmYXVsdFhSYW5nZTpBcnJheSxkZWZhdWx0WVJhbmdlOkFycmF5LHlTY2FsZVR5cGU6e3R5cGU6U3RyaW5nLHZhbHVlOiJsaW5lYXIifSxpZ25vcmVZT3V0bGllcnM6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sdG9vbHRpcFNvcnRpbmdNZXRob2Q6e3R5cGU6U3RyaW5nLHZhbHVlOiJkZWZhdWx0In0sdG9vbHRpcFBvc2l0aW9uOnt0eXBlOlN0cmluZyx2YWx1ZTpjbS5Ub29sdGlwUG9zaXRpb24uQk9UVE9NfSxfY2hhcnQ6T2JqZWN0LF92aXNpYmxlU2VyaWVzQ2FjaGU6e3R5cGU6QXJyYXksdmFsdWU6KCk9PltdfSxfc2VyaWVzRGF0YUNhY2hlOnt0eXBlOk9iamVjdCx2YWx1ZTooKT0+KHt9KX0sX3Nlcmllc01ldGFkYXRhQ2FjaGU6e3R5cGU6T2JqZWN0LHZhbHVlOigpPT4oe30pfSxfbWFrZUNoYXJ0QXN5bmNDYWxsYmFja0lkOnt0eXBlOk51bWJlcix2YWx1ZTpudWxsfX0sb2JzZXJ2ZXJzOlsiX21ha2VDaGFydCh4Q29tcG9uZW50c0NyZWF0aW9uTWV0aG9kLCB4VHlwZSwgeVZhbHVlQWNjZXNzb3IsIHlTY2FsZVR5cGUsIHRvb2x0aXBDb2x1bW5zLCBjb2xvclNjYWxlLCBpc0F0dGFjaGVkKSIsCiJfcmVsb2FkRnJvbUNhY2hlKF9jaGFydCwgX3Zpc2libGVTZXJpZXNDYWNoZSkiLCJfc21vb3RoaW5nQ2hhbmdlZChzbW9vdGhpbmdFbmFibGVkLCBzbW9vdGhpbmdXZWlnaHQsIF9jaGFydCkiLCJfdG9vbHRpcFNvcnRpbmdNZXRob2RDaGFuZ2VkKHRvb2x0aXBTb3J0aW5nTWV0aG9kLCBfY2hhcnQpIiwiX291dGxpZXJzQ2hhbmdlZChpZ25vcmVZT3V0bGllcnMsIF9jaGFydCkiXSxyZWFkeSgpe3RoaXMuc2NvcGVTdWJ0cmVlKHRoaXMuJC5jaGFydGRpdiwhMCl9LGF0dGFjaGVkKCl7Y29uc3QgZj17Y2FwdHVyZTohMCxwYXNzaXZlOiEwfTt0aGlzLl9saXN0ZW4odGhpcywibW91c2Vkb3duIix0aGlzLl9vbk1vdXNlRG93bi5iaW5kKHRoaXMpLGYpO3RoaXMuX2xpc3Rlbih0aGlzLCJtb3VzZXVwIix0aGlzLl9vbk1vdXNlVXAuYmluZCh0aGlzKSxmKTt0aGlzLl9saXN0ZW4od2luZG93LCJrZXlkb3duIix0aGlzLl9vbktleURvd24uYmluZCh0aGlzKSxmKTt0aGlzLl9saXN0ZW4od2luZG93LAoia2V5dXAiLHRoaXMuX29uS2V5VXAuYmluZCh0aGlzKSxmKX0sZGV0YWNoZWQoKXt0aGlzLmNhbmNlbEFzeW5jKHRoaXMuX21ha2VDaGFydEFzeW5jQ2FsbGJhY2tJZCk7dGhpcy5fY2hhcnQmJnRoaXMuX2NoYXJ0LmRlc3Ryb3koKTt0aGlzLl9saXN0ZW5lcnMmJih0aGlzLl9saXN0ZW5lcnMuZm9yRWFjaCgoe25vZGU6ZixldmVudE5hbWU6ZyxmdW5jOmwsb3B0aW9uOmt9KT0+e2YucmVtb3ZlRXZlbnRMaXN0ZW5lcihnLGwsayl9KSx0aGlzLl9saXN0ZW5lcnMuY2xlYXIoKSl9LF9saXN0ZW4oZixnLGwsaz17fSl7dGhpcy5fbGlzdGVuZXJzfHwodGhpcy5fbGlzdGVuZXJzPW5ldyBTZXQpO3RoaXMuX2xpc3RlbmVycy5hZGQoe25vZGU6ZixldmVudE5hbWU6ZyxmdW5jOmwsb3B0aW9uOmt9KTtmLmFkZEV2ZW50TGlzdGVuZXIoZyxsLGspfSxfb25LZXlEb3duKGYpe3RoaXMudG9nZ2xlQ2xhc3MoInBhbmtleSIsYS5QYW5ab29tRHJhZ0xheWVyLmlzUGFuS2V5KGYpKX0sX29uS2V5VXAoZil7dGhpcy50b2dnbGVDbGFzcygicGFua2V5IiwKYS5QYW5ab29tRHJhZ0xheWVyLmlzUGFuS2V5KGYpKX0sX29uTW91c2VEb3duKCl7dGhpcy50b2dnbGVDbGFzcygibW91c2Vkb3duIiwhMCl9LF9vbk1vdXNlVXAoKXt0aGlzLnRvZ2dsZUNsYXNzKCJtb3VzZWRvd24iLCExKX0sc2V0VmlzaWJsZVNlcmllczpmdW5jdGlvbihmKXtfLmlzRXF1YWwodGhpcy5fdmlzaWJsZVNlcmllc0NhY2hlLGYpfHwodGhpcy5fdmlzaWJsZVNlcmllc0NhY2hlPWYpfSxzZXRTZXJpZXNEYXRhOmZ1bmN0aW9uKGYsZyl7dGhpcy5fc2VyaWVzRGF0YUNhY2hlW2ZdPWc7dGhpcy5fY2hhcnQmJnRoaXMuX2NoYXJ0LnNldFNlcmllc0RhdGEoZixnKX0sc2V0U2VyaWVzTWV0YWRhdGEoZixnKXt0aGlzLl9zZXJpZXNNZXRhZGF0YUNhY2hlW2ZdPWc7dGhpcy5fY2hhcnQmJnRoaXMuX2NoYXJ0LnNldFNlcmllc01ldGFkYXRhKGYsZyl9LHJlc2V0RG9tYWluOmZ1bmN0aW9uKCl7dGhpcy5fY2hhcnQmJnRoaXMuX2NoYXJ0LnJlc2V0RG9tYWluKCl9LHJlZHJhdzpmdW5jdGlvbigpe3RoaXMuX2NoYXJ0JiYKdGhpcy5fY2hhcnQucmVkcmF3KCl9LF9tYWtlQ2hhcnQ6ZnVuY3Rpb24oZixnLGwsayxtLHApe2d8fGY/ZyYmKGY9KCk9PmJtLmdldFhDb21wb25lbnRzKGcpKTpmPWJtLnN0ZXBYO251bGwhPT10aGlzLl9tYWtlQ2hhcnRBc3luY0NhbGxiYWNrSWQmJih0aGlzLmNhbmNlbEFzeW5jKHRoaXMuX21ha2VDaGFydEFzeW5jQ2FsbGJhY2tJZCksdGhpcy5fbWFrZUNoYXJ0QXN5bmNDYWxsYmFja0lkPW51bGwpO3RoaXMuX21ha2VDaGFydEFzeW5jQ2FsbGJhY2tJZD10aGlzLmFzeW5jKGZ1bmN0aW9uKCl7dGhpcy5fbWFrZUNoYXJ0QXN5bmNDYWxsYmFja0lkPW51bGw7aWYoZiYmdGhpcy55VmFsdWVBY2Nlc3NvciYmdGhpcy50b29sdGlwQ29sdW1ucyl7dmFyIHE9bmV3IGEuTGluZUNoYXJ0KGYsdGhpcy55VmFsdWVBY2Nlc3NvcixrLHAsdGhpcy4kLnRvb2x0aXAsdGhpcy50b29sdGlwQ29sdW1ucyx0aGlzLmZpbGxBcmVhLHRoaXMuZGVmYXVsdFhSYW5nZSx0aGlzLmRlZmF1bHRZUmFuZ2UsCnRoaXMuc3ltYm9sRnVuY3Rpb24sdGhpcy54QXhpc0Zvcm1hdHRlcikscj1kMy5zZWxlY3QodGhpcy4kLmNoYXJ0ZGl2KTtxLnJlbmRlclRvKHIpO3RoaXMuX2NoYXJ0JiZ0aGlzLl9jaGFydC5kZXN0cm95KCk7dGhpcy5fY2hhcnQ9cTt0aGlzLl9jaGFydC5vbkFuY2hvcigoKT0+dGhpcy5maXJlKCJjaGFydC1hdHRhY2hlZCIpKX19LDM1MCl9LF9yZWxvYWRGcm9tQ2FjaGU6ZnVuY3Rpb24oKXt0aGlzLl9jaGFydCYmKHRoaXMuX3Zpc2libGVTZXJpZXNDYWNoZS5mb3JFYWNoKGY9Pnt0aGlzLl9jaGFydC5zZXRTZXJpZXNEYXRhKGYsdGhpcy5fc2VyaWVzRGF0YUNhY2hlW2ZdfHxbXSl9KSx0aGlzLl92aXNpYmxlU2VyaWVzQ2FjaGUuZmlsdGVyKGY9PnRoaXMuX3Nlcmllc01ldGFkYXRhQ2FjaGVbZl0pLmZvckVhY2goZj0+e3RoaXMuX2NoYXJ0LnNldFNlcmllc01ldGFkYXRhKGYsdGhpcy5fc2VyaWVzTWV0YWRhdGFDYWNoZVtmXSl9KSx0aGlzLl9jaGFydC5zZXRWaXNpYmxlU2VyaWVzKHRoaXMuX3Zpc2libGVTZXJpZXNDYWNoZSkpfSwKX3Ntb290aGluZ0NoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLl9jaGFydCYmKHRoaXMuc21vb3RoaW5nRW5hYmxlZD90aGlzLl9jaGFydC5zbW9vdGhpbmdVcGRhdGUodGhpcy5zbW9vdGhpbmdXZWlnaHQpOnRoaXMuX2NoYXJ0LnNtb290aGluZ0Rpc2FibGUoKSl9LF9vdXRsaWVyc0NoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLl9jaGFydCYmdGhpcy5fY2hhcnQuaWdub3JlWU91dGxpZXJzKHRoaXMuaWdub3JlWU91dGxpZXJzKX0sX3Rvb2x0aXBTb3J0aW5nTWV0aG9kQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMuX2NoYXJ0JiZ0aGlzLl9jaGFydC5zZXRUb29sdGlwU29ydGluZ01ldGhvZCh0aGlzLnRvb2x0aXBTb3J0aW5nTWV0aG9kKX0sZ2V0RXhwb3J0ZXIoKXtyZXR1cm4gbmV3IGEuTGluZUNoYXJ0RXhwb3J0ZXIodGhpcy4kLmNoYXJ0ZGl2KX19KX0pKGVtfHwoZW09e30pKTsKPC9zY3JpcHQ+CjwvZG9tLW1vZHVsZT4KCjxkb20tbW9kdWxlIGlkPSJ2ei1saW5lLWNoYXJ0LXRvb2x0aXAiPgogIDx0ZW1wbGF0ZT4KICAgIDxkaXYgY2xhc3M9ImNvbnRlbnQiPgogICAgICA8dGFibGU+CiAgICAgICAgPHRoZWFkPjwvdGhlYWQ+CiAgICAgICAgPHRib2R5PjwvdGJvZHk+CiAgICAgIDwvdGFibGU+CiAgICA8L2Rpdj4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CgogICAgICAuY29udGVudCB7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjgpOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBjb2xvcjogI2ZmZjsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CgogICAgICB0YWJsZSB7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjRlbTsKICAgICAgICBtYXJnaW4tdG9wOiAxMHB4OwogICAgICAgIHBhZGRpbmc6IDhweDsKICAgICAgfQoKICAgICAgdGhlYWQgewogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgfQoKICAgICAgdGJvZHkgewogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBsaW5lLWhlaWdodDogMjFweDsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICB9CgogICAgICB0ZCB7CiAgICAgICAgcGFkZGluZzogMCA1cHg7CiAgICAgIH0KCiAgICAgIC5zd2F0Y2ggewogICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBoZWlnaHQ6IDE4cHg7CiAgICAgICAgd2lkdGg6IDE4cHg7CiAgICAgIH0KCiAgICAgIC5jbG9zZXN0IC5zd2F0Y2ggewogICAgICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMCAwIDJweCAjZmZmOwogICAgICB9CgogICAgICB0aCB7CiAgICAgICAgcGFkZGluZzogMCA1cHg7CiAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsKICAgICAgfQoKICAgICAgLmRpc3RhbnQgdGQ6bm90KC5zd2F0Y2gpIHsKICAgICAgICBvcGFjaXR5OiAwLjg7CiAgICAgIH0KCiAgICAgIC5naG9zdCB7CiAgICAgICAgb3BhY2l0eTogMC4yOwogICAgICAgIHN0cm9rZS13aWR0aDogMXB4OwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CiAgPHNjcmlwdD4vL35+V0VCUEFUSH5+L3Z6LWxpbmUtY2hhcnQyL3Z6LWxpbmUtY2hhcnQyLmh0bWwuanMKUG9seW1lcih7aXM6InZ6LWxpbmUtY2hhcnQtdG9vbHRpcCJ9KTsKPC9zY3JpcHQ+CjwvZG9tLW1vZHVsZT4KCgoKPGRvbS1tb2R1bGUgaWQ9InRmLWxpbmUtY2hhcnQtZGF0YS1sb2FkZXIiPgogIDx0ZW1wbGF0ZT4KICAgIDxkaXYgaWQ9ImNoYXJ0LWFuZC1zcGlubmVyLWNvbnRhaW5lciI+CiAgICAgIDx2ei1saW5lLWNoYXJ0MiBpZD0iY2hhcnQiIGNvbG9yLXNjYWxlPSJbW2NvbG9yU2NhbGVdXSIgZGVmYXVsdC14LXJhbmdlPSJbW2RlZmF1bHRYUmFuZ2VdXSIgZGVmYXVsdC15LXJhbmdlPSJbW2RlZmF1bHRZUmFuZ2VdXSIgZmlsbC1hcmVhPSJbW2ZpbGxBcmVhXV0iIGlnbm9yZS15LW91dGxpZXJzPSJbW2lnbm9yZVlPdXRsaWVyc11dIiBvbi1jaGFydC1hdHRhY2hlZD0iX29uQ2hhcnRBdHRhY2hlZCIgc21vb3RoaW5nLWVuYWJsZWQ9Iltbc21vb3RoaW5nRW5hYmxlZF1dIiBzbW9vdGhpbmctd2VpZ2h0PSJbW3Ntb290aGluZ1dlaWdodF1dIiBzdHlsZT0iW1tfY29tcHV0ZUxpbmVDaGFydFN0eWxlKGRhdGFMb2FkaW5nKV1dIiBzeW1ib2wtZnVuY3Rpb249Iltbc3ltYm9sRnVuY3Rpb25dXSIgdG9vbHRpcC1jb2x1bW5zPSJbW3Rvb2x0aXBDb2x1bW5zXV0iIHRvb2x0aXAtcG9zaXRpb249IltbdG9vbHRpcFBvc2l0aW9uXV0iIHRvb2x0aXAtc29ydGluZy1tZXRob2Q9IltbdG9vbHRpcFNvcnRpbmdNZXRob2RdXSIgeC1jb21wb25lbnRzLWNyZWF0aW9uLW1ldGhvZD0iW1t4Q29tcG9uZW50c0NyZWF0aW9uTWV0aG9kXV0iIHgtdHlwZT0iW1t4VHlwZV1dIiB5LXZhbHVlLWFjY2Vzc29yPSJbW3lWYWx1ZUFjY2Vzc29yXV0iPjwvdnotbGluZS1jaGFydDI+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tkYXRhTG9hZGluZ11dIj4KICAgICAgICA8ZGl2IGlkPSJsb2FkaW5nLXNwaW5uZXItY29udGFpbmVyIj4KICAgICAgICAgIDxwYXBlci1zcGlubmVyLWxpdGUgYWN0aXZlPjwvcGFwZXItc3Bpbm5lci1saXRlPgogICAgICAgIDwvZGl2PgogICAgICA8L3RlbXBsYXRlPgogICAgPC9kaXY+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICB9CgogICAgICA6aG9zdChbX21heWJlLXJlbmRlcmVkLWluLWJhZC1zdGF0ZV0pIHZ6LWxpbmUtY2hhcnQgewogICAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjsKICAgICAgfQoKICAgICAgI2NoYXJ0LWFuZC1zcGlubmVyLWNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICAjbG9hZGluZy1zcGlubmVyLWNvbnRhaW5lciB7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIHRvcDogMDsKICAgICAgfQoKICAgICAgdnotbGluZS1jaGFydCB7CiAgICAgICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CiAgPHNjcmlwdD4vL35+V0VCUEFUSH5+L3Z6LWxpbmUtY2hhcnQyL2xpbmUtY2hhcnQtZXhwb3J0ZXIuanMKKGZ1bmN0aW9uKGEpe2xldCBjOyhmdW5jdGlvbihnKXtnLkdST1VQPSJHIjtnLkRJVj0iRElWIjtnLlNWRz0iU1ZHIjtnLlRFWFQ9IlRFWFQifSkoY3x8KGM9e30pKTtjbGFzcyBke2NvbnN0cnVjdG9yKGcpe3RoaXMudW5pcXVlSWQ9MDt0aGlzLnJvb3Q9Z31leHBvcnRBc1N0cmluZygpe2NvbnN0IGc9dGhpcy5jb252ZXJ0KHRoaXMucm9vdCk7aWYoIWcpcmV0dXJuIiI7Y29uc3QgbD10aGlzLmNyZWF0ZVJvb3RTdmcoKTtsLmFwcGVuZENoaWxkKGcpO3JldHVybiBsLm91dGVySFRNTH1jcmVhdGVVbmlxdWVJZCgpe3JldHVybmAkeyJjbGlwIn1fJHt0aGlzLnVuaXF1ZUlkKyt9YH1nZXRTaXplKCl7cmV0dXJuIHRoaXMucm9vdC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKX1jcmVhdGVSb290U3ZnKCl7Y29uc3QgZz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdmciKSxsPXRoaXMuZ2V0U2l6ZSgpO2cuc2V0QXR0cmlidXRlTlMoInN2ZyIsInZpZXdCb3giLGAwIDAgJHtsLndpZHRofSAke2wuaGVpZ2h0fWApOwpnLnNldEF0dHJpYnV0ZSgieG1sbnMiLCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIpO3JldHVybiBnfWNvbnZlcnQoZyl7bGV0IGw9bnVsbDt2YXIgaz1nLm5vZGVOYW1lLnRvVXBwZXJDYXNlKCk7aWYoZy5ub2RlVHlwZSE9Tm9kZS5FTEVNRU5UX05PREV8fGshPWMuRElWJiZrIT1jLlNWRylsPWcuY2xvbmVOb2RlKCk7ZWxzZXtsPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoYy5HUk9VUCk7dmFyIG09d2luZG93LmdldENvbXB1dGVkU3R5bGUoZykscD1wYXJzZUludChtLmxlZnQsMTApLHE9cGFyc2VJbnQobS50b3AsMTApO2lmKHB8fHEpaz10aGlzLmNyZWF0ZVVuaXF1ZUlkKCksbC5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgke3B9LCAke3F9KWApLGwuc2V0QXR0cmlidXRlKCJjbGlwLXBhdGgiLGB1cmwoIyR7a30pYCkscT1wYXJzZUludChtLmhlaWdodCwxMCkscD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJyZWN0IikscC5zZXRBdHRyaWJ1dGUoIndpZHRoIiwKU3RyaW5nKHBhcnNlSW50KG0ud2lkdGgsMTApKSkscC5zZXRBdHRyaWJ1dGUoImhlaWdodCIsU3RyaW5nKHEpKSxtPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygic3ZnIiwiY2xpcFBhdGgiKSxtLmlkPWssbS5hcHBlbmRDaGlsZChwKSxsLmFwcGVuZENoaWxkKG0pfUFycmF5LmZyb20oZy5jaGlsZE5vZGVzKS5tYXAocj0+dGhpcy5jb252ZXJ0KHIpKS5maWx0ZXIoQm9vbGVhbikuZm9yRWFjaChyPT5sLmFwcGVuZENoaWxkKHIpKTtyZXR1cm4gbC5ub2RlTmFtZS50b1VwcGVyQ2FzZSgpPT1jLkdST1VQJiYhbC5oYXNDaGlsZE5vZGVzKCl8fHRoaXMuc2hvdWxkT21pdE5vZGUoZyk/bnVsbDp0aGlzLnN0cmlwQ2xhc3ModGhpcy50cmFuc2ZlclN0eWxlKGcsbCkpfXN0cmlwQ2xhc3MoZyl7Zy5ub2RlVHlwZT09Tm9kZS5FTEVNRU5UX05PREUmJmcucmVtb3ZlQXR0cmlidXRlKCJjbGFzcyIpO3JldHVybiBnfXRyYW5zZmVyU3R5bGUoZyxsKXtpZihsLm5vZGVUeXBlIT1Ob2RlLkVMRU1FTlRfTk9ERSlyZXR1cm4gbDsKY29uc3Qgaz1sLm5vZGVOYW1lLnRvVXBwZXJDYXNlKCk7Zz13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShnKTtrPT1jLlRFWFQmJk9iamVjdC5hc3NpZ24obC5zdHlsZSx7Zm9udEZhbWlseTpnLmZvbnRGYW1pbHksZm9udFNpemU6Zy5mb250U2l6ZSxmb250V2VpZ2h0OmcuZm9udFdlaWdodH0pO2shPWMuR1JPVVAmJihsLnNldEF0dHJpYnV0ZSgiZmlsbCIsZy5maWxsKSxsLnNldEF0dHJpYnV0ZSgic3Ryb2tlIixnLnN0cm9rZSksbC5zZXRBdHRyaWJ1dGUoInN0cm9rZS13aWR0aCIsZy5zdHJva2VXaWR0aCkpOyIxIiE9Zy5vcGFjaXR5JiZsLnNldEF0dHJpYnV0ZSgib3BhY2l0eSIsZy5vcGFjaXR5KTtyZXR1cm4gbH1zaG91bGRPbWl0Tm9kZSgpe3JldHVybiExfX1hLlBsb3R0YWJsZUV4cG9ydGVyPWQ7Y2xhc3MgZiBleHRlbmRzIGR7c2hvdWxkT21pdE5vZGUoZyl7cmV0dXJuIGcubm9kZVR5cGU9PU5vZGUuRUxFTUVOVF9OT0RFP2cuY2xhc3NMaXN0LmNvbnRhaW5zKCJzY2F0dGVyLXBsb3QiKToKITF9fWEuTGluZUNoYXJ0RXhwb3J0ZXI9Zn0pKGVtfHwoZW09e30pKTsKPC9zY3JpcHQ+CiAgPHNjcmlwdD4vL35+V0VCUEFUSH5+L3RmLWxpbmUtY2hhcnQtZGF0YS1sb2FkZXIvdGYtbGluZS1jaGFydC1kYXRhLWxvYWRlci5odG1sLmpzCihmdW5jdGlvbigpe2NvbnN0IGE9W10sYz1mdW5jdGlvbigpe3JldHVybiBfLnRocm90dGxlKGZ1bmN0aW9uIGYoKXtpZigwIT1hLmxlbmd0aCl7dmFyIGc9YS5zaGlmdCgpO2cuYWN0aXZlJiYoZy5yZWRyYXcoKSxnLl9tYXliZVJlbmRlcmVkSW5CYWRTdGF0ZT0hMSk7d2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKDApO3dpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZil9fSwxMDApfSgpO1BvbHltZXIoe2lzOiJ0Zi1saW5lLWNoYXJ0LWRhdGEtbG9hZGVyIixwcm9wZXJ0aWVzOnthY3RpdmU6e3R5cGU6Qm9vbGVhbixvYnNlcnZlcjoiX2ZpeEJhZFN0YXRlV2hlbkFjdGl2ZSJ9LGRhdGFTZXJpZXM6QXJyYXkscmVxdWVzdE1hbmFnZXI6T2JqZWN0LGxvZ1NjYWxlQWN0aXZlOnt0eXBlOkJvb2xlYW4sb2JzZXJ2ZXI6Il9sb2dTY2FsZUNoYW5nZWQifSx4Q29tcG9uZW50c0NyZWF0aW9uTWV0aG9kOk9iamVjdCx4VHlwZTpTdHJpbmcseVZhbHVlQWNjZXNzb3I6T2JqZWN0LGZpbGxBcmVhOk9iamVjdCwKc21vb3RoaW5nRW5hYmxlZDpCb29sZWFuLHNtb290aGluZ1dlaWdodDpOdW1iZXIsdG9vbHRpcENvbHVtbnM6QXJyYXksdG9vbHRpcFNvcnRpbmdNZXRob2Q6U3RyaW5nLHRvb2x0aXBQb3NpdGlvbjpTdHJpbmcsaWdub3JlWU91dGxpZXJzOkJvb2xlYW4sZGVmYXVsdFhSYW5nZTpBcnJheSxkZWZhdWx0WVJhbmdlOkFycmF5LHN5bWJvbEZ1bmN0aW9uOk9iamVjdCxjb2xvclNjYWxlOnt0eXBlOk9iamVjdCx2YWx1ZTooKT0+KHtzY2FsZTpabC5ydW5zQ29sb3JTY2FsZX0pfSxfcmVzZXREb21haW5Pbk5leHRMb2FkOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITB9LF9tYXliZVJlbmRlcmVkSW5CYWRTdGF0ZTp7dHlwZTpCb29sZWFuLHZhbHVlOiExLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH19LGJlaGF2aW9yczpbV2wuRGF0YUxvYWRlckJlaGF2aW9yXSxvYnNlcnZlcnM6WyJfZGF0YVNlcmllc0NoYW5nZWQoZGF0YVNlcmllcy4qKSIsIl9sb2FkS2V5Q2hhbmdlZChsb2FkS2V5KSJdLG9uTG9hZEZpbmlzaCgpezA8CnRoaXMuZGF0YVRvTG9hZC5sZW5ndGgmJnRoaXMuX3Jlc2V0RG9tYWluT25OZXh0TG9hZCYmKHRoaXMuX3Jlc2V0RG9tYWluT25OZXh0TG9hZD0hMSx0aGlzLiQuY2hhcnQucmVzZXREb21haW4oKSk7dGhpcy5yZWRyYXcoKX0sZGV0YWNoZWQoKXtjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9yZWRyYXdSYWYpfSxleHBvcnRBc1N2Z1N0cmluZygpe3JldHVybiB0aGlzLiQuY2hhcnQuZ2V0RXhwb3J0ZXIoKS5leHBvcnRBc1N0cmluZygpfSxyZXNldERvbWFpbigpe3RoaXMuJC5jaGFydC5yZXNldERvbWFpbigpfSxzZXRTZXJpZXNEYXRhKGQsZil7dGhpcy4kLmNoYXJ0LnNldFNlcmllc0RhdGEoZCxmKX0sc2V0U2VyaWVzTWV0YWRhdGEoZCxmKXt0aGlzLiQuY2hhcnQuc2V0U2VyaWVzTWV0YWRhdGEoZCxmKX0scmVkcmF3KCl7Y2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5fcmVkcmF3UmFmKTt0aGlzLl9yZWRyYXdSYWY9d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e3RoaXMuYWN0aXZlPwp0aGlzLiQuY2hhcnQucmVkcmF3KCk6dGhpcy5fbWF5YmVSZW5kZXJlZEluQmFkU3RhdGU9ITB9KX0sX2xvYWRLZXlDaGFuZ2VkKCl7dGhpcy5yZXNldCgpO3RoaXMuX3Jlc2V0RG9tYWluT25OZXh0TG9hZD0hMH0sX2RhdGFTZXJpZXNDaGFuZ2VkKCl7dGhpcy4kLmNoYXJ0LnNldFZpc2libGVTZXJpZXModGhpcy5kYXRhU2VyaWVzKX0sX2xvZ1NjYWxlQ2hhbmdlZChkKXt0aGlzLiQuY2hhcnQueVNjYWxlVHlwZT1kPyJsb2ciOiJsaW5lYXIiO3RoaXMucmVkcmF3KCl9LF9jb21wdXRlTGluZUNoYXJ0U3R5bGUoZCl7cmV0dXJuIGQ/Im9wYWNpdHk6IDAuMzsiOiIifSxfZml4QmFkU3RhdGVXaGVuQWN0aXZlKCl7dGhpcy5hY3RpdmUmJnRoaXMuX21heWJlUmVuZGVyZWRJbkJhZFN0YXRlJiYoYS5wdXNoKHRoaXMpLGMoKSl9LF9vbkNoYXJ0QXR0YWNoZWQoKXt0aGlzLmFjdGl2ZXx8KHRoaXMuX21heWJlUmVuZGVyZWRJbkJhZFN0YXRlPSEwKX19KX0pKCk7Cjwvc2NyaXB0Pgo8L2RvbS1tb2R1bGU+CgoKCgoKCgoKCgo8ZG9tLW1vZHVsZSBpZD0icGFwZXItZGlhbG9nLXNjcm9sbGFibGUiPgoKICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LXJlbGF0aXZlOwogICAgICB9CgogICAgICA6aG9zdCguaXMtc2Nyb2xsZWQ6bm90KDpmaXJzdC1jaGlsZCkpOjpiZWZvcmUgewogICAgICAgIGNvbnRlbnQ6ICcnOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgICBoZWlnaHQ6IDFweDsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1kaXZpZGVyLWNvbG9yKTsKICAgICAgfQoKICAgICAgOmhvc3QoLmNhbi1zY3JvbGw6bm90KC5zY3JvbGxlZC10by1ib3R0b20pOm5vdCg6bGFzdC1jaGlsZCkpOjphZnRlciB7CiAgICAgICAgY29udGVudDogJyc7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGhlaWdodDogMXB4OwogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWRpdmlkZXItY29sb3IpOwogICAgICB9CgogICAgICAuc2Nyb2xsYWJsZSB7CiAgICAgICAgcGFkZGluZzogMCAyNHB4OwoKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtc2Nyb2xsOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWRpYWxvZy1zY3JvbGxhYmxlOwogICAgICB9CgogICAgICAuZml0IHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtZml0OwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxkaXYgaWQ9InNjcm9sbGFibGUiIGNsYXNzPSJzY3JvbGxhYmxlIiBvbi1zY3JvbGw9InVwZGF0ZVNjcm9sbFN0YXRlIj4KICAgICAgPHNsb3Q+PC9zbG90PgogICAgPC9kaXY+CiAgPC90ZW1wbGF0ZT4KCjwvZG9tLW1vZHVsZT4KCjxzY3JpcHQ+Ly9+fldFQlBBVEh+fi9wYXBlci1kaWFsb2ctc2Nyb2xsYWJsZS9wYXBlci1kaWFsb2ctc2Nyb2xsYWJsZS5odG1sLmpzClBvbHltZXIoe2lzOiJwYXBlci1kaWFsb2ctc2Nyb2xsYWJsZSIscHJvcGVydGllczp7ZGlhbG9nRWxlbWVudDp7dHlwZTpPYmplY3R9fSxnZXQgc2Nyb2xsVGFyZ2V0KCl7cmV0dXJuIHRoaXMuJC5zY3JvbGxhYmxlfSxyZWFkeTpmdW5jdGlvbigpe3RoaXMuX2Vuc3VyZVRhcmdldCgpO3RoaXMuY2xhc3NMaXN0LmFkZCgibm8tcGFkZGluZyIpfSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX2Vuc3VyZVRhcmdldCgpO3JlcXVlc3RBbmltYXRpb25GcmFtZSh0aGlzLnVwZGF0ZVNjcm9sbFN0YXRlLmJpbmQodGhpcykpfSx1cGRhdGVTY3JvbGxTdGF0ZTpmdW5jdGlvbigpe3RoaXMudG9nZ2xlQ2xhc3MoImlzLXNjcm9sbGVkIiwwPHRoaXMuc2Nyb2xsVGFyZ2V0LnNjcm9sbFRvcCk7dGhpcy50b2dnbGVDbGFzcygiY2FuLXNjcm9sbCIsdGhpcy5zY3JvbGxUYXJnZXQub2Zmc2V0SGVpZ2h0PHRoaXMuc2Nyb2xsVGFyZ2V0LnNjcm9sbEhlaWdodCk7dGhpcy50b2dnbGVDbGFzcygic2Nyb2xsZWQtdG8tYm90dG9tIiwKdGhpcy5zY3JvbGxUYXJnZXQuc2Nyb2xsVG9wK3RoaXMuc2Nyb2xsVGFyZ2V0Lm9mZnNldEhlaWdodD49dGhpcy5zY3JvbGxUYXJnZXQuc2Nyb2xsSGVpZ2h0KX0sX2Vuc3VyZVRhcmdldDpmdW5jdGlvbigpeyh0aGlzLmRpYWxvZ0VsZW1lbnQ9dGhpcy5kaWFsb2dFbGVtZW50fHx0aGlzLnBhcmVudEVsZW1lbnQpJiZ0aGlzLmRpYWxvZ0VsZW1lbnQuYmVoYXZpb3JzJiYwPD10aGlzLmRpYWxvZ0VsZW1lbnQuYmVoYXZpb3JzLmluZGV4T2YoUG9seW1lci5QYXBlckRpYWxvZ0JlaGF2aW9ySW1wbCk/KHRoaXMuZGlhbG9nRWxlbWVudC5zaXppbmdUYXJnZXQ9dGhpcy5zY3JvbGxUYXJnZXQsdGhpcy5zY3JvbGxUYXJnZXQuY2xhc3NMaXN0LnJlbW92ZSgiZml0IikpOnRoaXMuZGlhbG9nRWxlbWVudCYmdGhpcy5zY3JvbGxUYXJnZXQuY2xhc3NMaXN0LmFkZCgiZml0Iil9fSk7Cjwvc2NyaXB0PgoKCgoKCjxkb20tbW9kdWxlIGlkPSJ0Zi1tYXJrZG93bi12aWV3Ij4KICA8dGVtcGxhdGU+CiAgICA8ZGl2IGlkPSJtYXJrZG93biIgaW5uZXItaC10LW0tbD0iW1todG1sXV0iPjwvZGl2PgogICAgPHN0eWxlPgogICAgICAvKgogICAgICAgKiBSZWR1Y2UgdG9wbW9zdCBhbmQgYm90dG9tbW9zdCBtYXJnaW5zIGZyb20gMTZweCB0byAwLjNlbSAocmVuZGVycwogICAgICAgKiBhdCBhYm91dCA0LjhweCkgdG8ga2VlcCB0aGUgbGF5b3V0IGNvbXBhY3QuIFRoaXMgaW1wcm92ZXMgdGhlCiAgICAgICAqIGFwcGVhcmFuY2Ugd2hlbiB0aGVyZSBpcyBvbmx5IG9uZSBsaW5lIG9mIHRleHQ7IHN0YW5kYXJkIE1hcmtkb3duCiAgICAgICAqIHJlbmRlcmVycyB3aWxsIHN0aWxsIGluY2x1ZGUgYSBgPHA+YCBlbGVtZW50LgogICAgICAgKgogICAgICAgKiBCeSB0YXJnZXRpbmcgb25seSB0aGUgdG9wLWxldmVsLCBleHRyZW1hbCBlbGVtZW50cywgd2UgcHJlc2VydmUgYW55CiAgICAgICAqIGFjdHVhbCBwYXJhZ3JhcGggYnJlYWtzIGFuZCBvbmx5IGNoYW5nZSB0aGUgcGFkZGluZyBhZ2FpbnN0IHRoZQogICAgICAgKiBjb21wb25lbnQgZWRnZXMuCiAgICAgICAqLwogICAgICAjbWFya2Rvd24gPiBwOmZpcnN0LWNoaWxkIHsKICAgICAgICBtYXJnaW4tdG9wOiAwLjNlbTsKICAgICAgfQogICAgICAjbWFya2Rvd24gPiBwOmxhc3QtY2hpbGQgewogICAgICAgIG1hcmdpbi1ib3R0b206IDAuM2VtOwogICAgICB9CgogICAgICAvKiBQbGVhc2FudCBzdHlsZXMgZm9yIE1hcmtkb3duIHRhYmxlcy4gKi8KICAgICAgI21hcmtkb3duIHRhYmxlIHsKICAgICAgICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwogICAgICB9CiAgICAgICNtYXJrZG93biB0YWJsZSB0aCB7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgfQogICAgICAjbWFya2Rvd24gdGFibGUgdGgsCiAgICAgICNtYXJrZG93biB0YWJsZSB0ZCB7CiAgICAgICAgcGFkZGluZzogNnB4IDEzcHg7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2RmZTJlNTsKICAgICAgfQogICAgICAjbWFya2Rvd24gdGFibGUgdHIgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7CiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNjNmNiZDE7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KICA8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdGYtbWFya2Rvd24tdmlldy90Zi1tYXJrZG93bi12aWV3Lmh0bWwuanMKUG9seW1lcih7aXM6InRmLW1hcmtkb3duLXZpZXciLHByb3BlcnRpZXM6e2h0bWw6e3R5cGU6U3RyaW5nLHZhbHVlOiIifX0sYXR0YWNoZWQoKXt3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57dGhpcy5zY29wZVN1YnRyZWUodGhpcy4kLm1hcmtkb3duLCEwKX0pfX0pOwo8L3NjcmlwdD4KPC9kb20tbW9kdWxlPgoKPGRvbS1tb2R1bGUgaWQ9InRmLWNhcmQtaGVhZGluZy1zdHlsZSI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICBmaWdjYXB0aW9uIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgLyoqIEhvcml6b250YWwgbGluZSBvZiBsYWJlbHMuICovCiAgICAgIC5oZWFkaW5nLXJvdyB7CiAgICAgICAgbWFyZ2luLXRvcDogLTRweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICB9CgogICAgICAvKiogUGllY2Ugb2YgdGV4dCBpbiB0aGUgZmlndXJlIGNhcHRpb24uICovCiAgICAgIC5oZWFkaW5nLWxhYmVsIHsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgbWFyZ2luLXRvcDogNHB4OwogICAgICAgIG1heC13aWR0aDogMTAwJTsKICAgICAgICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7CiAgICAgIH0KCiAgICAgIC8qKiBNYWtlcyBsYWJlbCBzaG93IG9uIHRoZSByaWdodC4gKi8KICAgICAgLmhlYWRpbmctcmlnaHQgewogICAgICAgIGZsZXgtZ3JvdzogMDsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+Cgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdGYtY2FyZC1oZWFkaW5nL3V0aWwuanMKdmFyIGZtOyhmdW5jdGlvbihhKXtmdW5jdGlvbiBjKGQpe2lmKCFkKXJldHVybiBudWxsO2xldCBmPWQubWF0Y2goL14jKFswLTlhLWZdezEsMn0pKFswLTlhLWZdezEsMn0pKFswLTlhLWZdezEsMn0pJC8pO2lmKCFmKXJldHVybiBudWxsO2lmKDQ9PWQubGVuZ3RoKWZvcihkPTE7Mz49ZDtkKyspZltkXSs9ZltkXTtyZXR1cm5bcGFyc2VJbnQoZlsxXSwxNikscGFyc2VJbnQoZlsyXSwxNikscGFyc2VJbnQoZlszXSwxNildfWEuZm9ybWF0RGF0ZT1mdW5jdGlvbihkKXtyZXR1cm4gZD9kLnRvU3RyaW5nKCkucmVwbGFjZSgvR01ULVxkKyBcKChbXildKylcKS8sIiQxIik6IiJ9O2EucGlja1RleHRDb2xvcj1mdW5jdGlvbihkKXtyZXR1cm4oZD1jKGQpKT8xMjU8TWF0aC5yb3VuZCgoMjk5KmRbMF0rNTg3KmRbMV0rMTE0KmRbMl0pLzFFMyk/ImluaGVyaXQiOiIjZWVlIjoiaW5oZXJpdCJ9fSkoZm18fChmbT17fSkpOwo8L3NjcmlwdD4KCgoKPGRvbS1tb2R1bGUgaWQ9InRmLWNhcmQtaGVhZGluZyI+CiAgPHRlbXBsYXRlPgogICAgPGRpdiBjbGFzcz0iY29udGFpbmVyIj4KICAgICAgPGZpZ2NhcHRpb24gY2xhc3M9ImNvbnRlbnQiPgogICAgICAgIDxkaXYgY2xhc3M9ImhlYWRpbmctcm93Ij4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfbmFtZUxhYmVsXV0iPgogICAgICAgICAgICA8ZGl2IGl0ZW1wcm9wPSJuYW1lIiBjbGFzcz0iaGVhZGluZy1sYWJlbCBuYW1lIj4KICAgICAgICAgICAgICBbW19uYW1lTGFiZWxdXQogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbcnVuXV0iPgogICAgICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIDxzcGFuPgogICAgICAgICAgICAgIDxzcGFuIGl0ZW1wcm9wPSJydW4iIGNsYXNzPSJoZWFkaW5nLWxhYmVsIGhlYWRpbmctcmlnaHQgcnVuIiBzdHlsZT0iYmFja2dyb3VuZDogW1tfcnVuQmFja2dyb3VuZF1dOyBjb2xvcjogW1tfcnVuQ29sb3JdXSI+W1tydW5dXTwvc3Bhbj4KICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L2Rpdj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX3RhZ0xhYmVsXV0iPgogICAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGluZy1yb3ciPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nLWxhYmVsIj4KICAgICAgICAgICAgICB0YWc6IDxzcGFuIGl0ZW1wcm9wPSJ0YWciPltbX3RhZ0xhYmVsXV08L3NwYW4+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8c2xvdD48L3Nsb3Q+CiAgICAgIDwvZmlnY2FwdGlvbj4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2Rlc2NyaXB0aW9uXV0iPgogICAgICAgIDxwYXBlci1pY29uLWJ1dHRvbiBpY29uPSJpbmZvIiBvbi10YXA9Il90b2dnbGVEZXNjcmlwdGlvbkRpYWxvZyIgdGl0bGU9IlNob3cgc3VtbWFyeSBkZXNjcmlwdGlvbiI+PC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPHBhcGVyLWRpYWxvZyBpZD0iZGVzY3JpcHRpb25EaWFsb2ciIG5vLW92ZXJsYXAgaG9yaXpvbnRhbC1hbGlnbj0iYXV0byIgdmVydGljYWwtYWxpZ249ImF1dG8iPgogICAgICAgIDxwYXBlci1kaWFsb2ctc2Nyb2xsYWJsZT4KICAgICAgICAgIDx0Zi1tYXJrZG93bi12aWV3IGh0bWw9IltbZGVzY3JpcHRpb25dXSI+PC90Zi1tYXJrZG93bi12aWV3PgogICAgICAgIDwvcGFwZXItZGlhbG9nLXNjcm9sbGFibGU+CiAgICAgIDwvcGFwZXItZGlhbG9nPgogICAgPC9kaXY+CiAgICA8c3R5bGUgaW5jbHVkZT0idGYtY2FyZC1oZWFkaW5nLXN0eWxlIj4KICAgICAgLmNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgfQogICAgICAuY29udGVudCB7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgfQogICAgICAubmFtZSB7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICB9CiAgICAgIC5ydW4gewogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgICB3aWR0aDogYXV0bzsKICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICAgICAgcGFkZGluZzogMXB4IDRweCAycHg7CiAgICAgIH0KICAgICAgcGFwZXItaWNvbi1idXR0b24gewogICAgICAgIGZsZXgtZ3JvdzogMDsKICAgICAgfQogICAgICBwYXBlci1kaWFsb2ctc2Nyb2xsYWJsZSB7CiAgICAgICAgbWF4LXdpZHRoOiA2NDBweDsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgogIDxzY3JpcHQ+Ly9+fldFQlBBVEh+fi90Zi1jYXJkLWhlYWRpbmcvdGYtY2FyZC1oZWFkaW5nLmh0bWwuanMKUG9seW1lcih7aXM6InRmLWNhcmQtaGVhZGluZyIscHJvcGVydGllczp7ZGlzcGxheU5hbWU6e3R5cGU6U3RyaW5nLHZhbHVlOm51bGx9LHRhZzp7dHlwZTpTdHJpbmcsdmFsdWU6bnVsbH0scnVuOnt0eXBlOlN0cmluZyx2YWx1ZTpudWxsfSxkZXNjcmlwdGlvbjp7dHlwZTpTdHJpbmcsdmFsdWU6bnVsbH0sY29sb3I6e3R5cGU6U3RyaW5nLHZhbHVlOm51bGx9LF9ydW5CYWNrZ3JvdW5kOnt0eXBlOlN0cmluZyxjb21wdXRlZDoiX2NvbXB1dGVSdW5CYWNrZ3JvdW5kKGNvbG9yKSIscmVhZE9ubHk6ITB9LF9ydW5Db2xvcjp7dHlwZTpTdHJpbmcsY29tcHV0ZWQ6Il9jb21wdXRlUnVuQ29sb3IoY29sb3IpIixyZWFkT25seTohMH0sX25hbWVMYWJlbDp7dHlwZTpTdHJpbmcsY29tcHV0ZWQ6Il9jb21wdXRlTmFtZUxhYmVsKGRpc3BsYXlOYW1lLCB0YWcpIn0sX3RhZ0xhYmVsOnt0eXBlOlN0cmluZyxjb21wdXRlZDoiX2NvbXB1dGVUYWdMYWJlbChkaXNwbGF5TmFtZSwgdGFnKSJ9fSxfY29tcHV0ZVJ1bkJhY2tncm91bmQoYSl7cmV0dXJuIGF8fAoibm9uZSJ9LF9jb21wdXRlUnVuQ29sb3IoYSl7cmV0dXJuIGZtLnBpY2tUZXh0Q29sb3IoYSl9LF9jb21wdXRlTmFtZUxhYmVsKGEsYyl7cmV0dXJuIGF8fGN8fCIifSxfY29tcHV0ZVRhZ0xhYmVsKGEsYyl7cmV0dXJuIGMmJmMhPT1hP2M6IiJ9LF90b2dnbGVEZXNjcmlwdGlvbkRpYWxvZyhhKXt0aGlzLiQuZGVzY3JpcHRpb25EaWFsb2cucG9zaXRpb25UYXJnZXQ9YS50YXJnZXQ7dGhpcy4kLmRlc2NyaXB0aW9uRGlhbG9nLnRvZ2dsZSgpfX0pOwo8L3NjcmlwdD4KPC9kb20tbW9kdWxlPgoKCgoKCgo8ZG9tLW1vZHVsZSBpZD0idGYtZG93bmxvYWRlciI+CiAgPHRlbXBsYXRlPgogICAgPHBhcGVyLWRyb3Bkb3duLW1lbnUgbm8tbGFiZWwtZmxvYXQ9InRydWUiIGxhYmVsPSJydW4gdG8gZG93bmxvYWQiIHNlbGVjdGVkLWl0ZW0tbGFiZWw9Int7X3J1bn19Ij4KICAgICAgPHBhcGVyLWxpc3Rib3ggc2xvdD0iZHJvcGRvd24tY29udGVudCI+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tydW5zXV0iPgogICAgICAgICAgPHBhcGVyLWl0ZW0gbm8tbGFiZWwtZmxvYXQ9InRydWUiPltbaXRlbV1dPC9wYXBlci1pdGVtPgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDwvcGFwZXItbGlzdGJveD4KICAgIDwvcGFwZXItZHJvcGRvd24tbWVudT4KICAgIDxhIGRvd25sb2FkPSJbW19jc3ZOYW1lKHRhZywgX3J1bildXSIgaHJlZj0iW1tfY3N2VXJsKHRhZywgX3J1biwgdXJsRm4pXV0iPkNTVjwvYT48YSBkb3dubG9hZD0iW1tfanNvbk5hbWUodGFnLCBfcnVuKV1dIiBocmVmPSJbW19qc29uVXJsKHRhZywgX3J1biwgdXJsRm4pXV0iPkpTT048L2E+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgaGVpZ2h0OiAzMnB4OwogICAgICB9CiAgICAgIHBhcGVyLWRyb3Bkb3duLW1lbnUgewogICAgICAgIHdpZHRoOiAxMDBweDsKICAgICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1sYWJlbDogewogICAgICAgICAgZm9udC1zaXplOiAxMHB4OwogICAgICAgIH0KICAgICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnB1dDogewogICAgICAgICAgZm9udC1zaXplOiAxMHB4OwogICAgICAgIH0KICAgICAgfQogICAgICBhIHsKICAgICAgICBmb250LXNpemU6IDEwcHg7CiAgICAgICAgbWFyZ2luOiAwIDAuMmVtOwogICAgICB9CiAgICAgIHBhcGVyLWlucHV0IHsKICAgICAgICBmb250LXNpemU6IDIycHg7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KICA8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdGYtZGFzaGJvYXJkLWNvbW1vbi90Zi1kb3dubG9hZGVyLmh0bWwuanMKUG9seW1lcih7aXM6InRmLWRvd25sb2FkZXIiLHByb3BlcnRpZXM6e19ydW46U3RyaW5nLHJ1bnM6QXJyYXksdGFnOlN0cmluZyx1cmxGbjpGdW5jdGlvbn0sX2NzdlVybChhLGMsZCl7cmV0dXJuIFBrLmFkZFBhcmFtcyhkKGEsYykse2Zvcm1hdDoiY3N2In0pfSxfanNvblVybChhLGMsZCl7cmV0dXJuIGQoYSxjKX0sX2Nzdk5hbWUoYSxjKXtyZXR1cm5gcnVuLSR7Y30tdGFnLSR7YX0uY3N2YH0sX2pzb25OYW1lKGEsYyl7cmV0dXJuYHJ1bi0ke2N9LXRhZy0ke2F9Lmpzb25gfX0pOwo8L3NjcmlwdD4KPC9kb20tbW9kdWxlPgoKCgo8ZG9tLW1vZHVsZSBpZD0idGYtc2NhbGFyLWNhcmQiPgogIDx0ZW1wbGF0ZT4KICAgIDx0Zi1jYXJkLWhlYWRpbmcgdGFnPSJbW3RhZ11dIiBkaXNwbGF5LW5hbWU9IltbdGFnTWV0YWRhdGEuZGlzcGxheU5hbWVdXSIgZGVzY3JpcHRpb249IltbdGFnTWV0YWRhdGEuZGVzY3JpcHRpb25dXSI+PC90Zi1jYXJkLWhlYWRpbmc+CiAgICA8ZGl2IGlkPSJ0Zi1saW5lLWNoYXJ0LWRhdGEtbG9hZGVyLWNvbnRhaW5lciI+CiAgICAgIDx0Zi1saW5lLWNoYXJ0LWRhdGEtbG9hZGVyIGFjdGl2ZT0iW1thY3RpdmVdXSIgY29sb3Itc2NhbGU9IltbX2dldENvbG9yU2NhbGUoY29sb3JTY2FsZSldXSIgZGF0YS1zZXJpZXM9IltbX2dldERhdGFTZXJpZXMoZGF0YVRvTG9hZC4qKV1dIiBkYXRhLXRvLWxvYWQ9IltbZGF0YVRvTG9hZF1dIiBnZXQtZGF0YS1sb2FkLW5hbWU9IltbX2dldERhdGFMb2FkTmFtZV1dIiBnZXQtZGF0YS1sb2FkLXVybD0iW1tnZXREYXRhTG9hZFVybF1dIiByZXF1ZXN0LWRhdGE9IltbcmVxdWVzdERhdGFdXSIgaWdub3JlLXktb3V0bGllcnM9IltbaWdub3JlWU91dGxpZXJzXV0iIGxvYWQtZGF0YS1jYWxsYmFjaz0iW1tfbG9hZERhdGFDYWxsYmFja11dIiBsb2FkLWtleT0iW1t0YWddXSIgbG9nLXNjYWxlLWFjdGl2ZT0iW1tfbG9nU2NhbGVBY3RpdmVdXSIgcmVxdWVzdC1tYW5hZ2VyPSJbW3JlcXVlc3RNYW5hZ2VyXV0iIHNtb290aGluZy1lbmFibGVkPSJbW3Ntb290aGluZ0VuYWJsZWRdXSIgc21vb3RoaW5nLXdlaWdodD0iW1tzbW9vdGhpbmdXZWlnaHRdXSIgdGFnLW1ldGFkYXRhPSJbW3RhZ01ldGFkYXRhXV0iIHRvb2x0aXAtY29sdW1ucz0iW1tfdG9vbHRpcENvbHVtbnNdXSIgdG9vbHRpcC1wb3NpdGlvbj0iYXV0byIgdG9vbHRpcC1zb3J0aW5nLW1ldGhvZD0iW1t0b29sdGlwU29ydGluZ01ldGhvZF1dIiB4LXR5cGU9IltbeFR5cGVdXSI+CiAgICAgIDwvdGYtbGluZS1jaGFydC1kYXRhLWxvYWRlcj4KICAgIDwvZGl2PgogICAgPGRpdiBpZD0iYnV0dG9ucyI+CiAgICAgIDxwYXBlci1pY29uLWJ1dHRvbiBzZWxlY3RlZCQ9IltbX2V4cGFuZGVkXV0iIGljb249ImZ1bGxzY3JlZW4iIG9uLXRhcD0iX3RvZ2dsZUV4cGFuZGVkIj48L3BhcGVyLWljb24tYnV0dG9uPgogICAgICA8cGFwZXItaWNvbi1idXR0b24gc2VsZWN0ZWQkPSJbW19sb2dTY2FsZUFjdGl2ZV1dIiBpY29uPSJsaW5lLXdlaWdodCIgb24tdGFwPSJfdG9nZ2xlTG9nU2NhbGUiIHRpdGxlPSJUb2dnbGUgeS1heGlzIGxvZyBzY2FsZSI+PC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgPHBhcGVyLWljb24tYnV0dG9uIGljb249InNldHRpbmdzLW92ZXJzY2FuIiBvbi10YXA9Il9yZXNldERvbWFpbiIgdGl0bGU9IkZpdCBkb21haW4gdG8gZGF0YSI+PC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW3Nob3dEb3dubG9hZExpbmtzXV0iPgogICAgICAgIDxwYXBlci1tZW51LWJ1dHRvbiBvbi1wYXBlci1kcm9wZG93bi1vcGVuPSJfdXBkYXRlRG93bmxvYWRMaW5rIj4KICAgICAgICAgIDxwYXBlci1pY29uLWJ1dHRvbiBjbGFzcz0iZHJvcGRvd24tdHJpZ2dlciIgc2xvdD0iZHJvcGRvd24tdHJpZ2dlciIgaWNvbj0iZmlsZS1kb3dubG9hZCI+PC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgICAgIDxwYXBlci1saXN0Ym94IGNsYXNzPSJkcm9wZG93bi1jb250ZW50IiBzbG90PSJkcm9wZG93bi1jb250ZW50Ij4KICAgICAgICAgICAgPHBhcGVyLWl0ZW0+CiAgICAgICAgICAgICAgPGEgaWQ9InN2Z0xpbmsiIGRvd25sb2FkPSJbW3RhZ11dLnN2ZyI+CiAgICAgICAgICAgICAgICBEb3dubG9hZCBDdXJyZW50IENoYXJ0IGFzIFNWRwogICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgPC9wYXBlci1pdGVtPgogICAgICAgICAgPC9wYXBlci1saXN0Ym94PgogICAgICAgIDwvcGFwZXItbWVudS1idXR0b24+CiAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDxzcGFuIHN0eWxlPSJmbGV4LWdyb3c6IDEiPjwvc3Bhbj4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW3Nob3dEb3dubG9hZExpbmtzXV0iPgogICAgICAgIDxkaXYgY2xhc3M9ImRvd25sb2FkLWxpbmtzIj4KICAgICAgICAgIDx0Zi1kb3dubG9hZGVyIHJ1bnM9IltbX3J1bnNGcm9tRGF0YShkYXRhVG9Mb2FkKV1dIiB0YWc9IltbdGFnXV0iIHVybC1mbj0iW1tfZG93bmxvYWRVcmxGbl1dIj48L3RmLWRvd25sb2FkZXI+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICA8L2Rpdj4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIG1hcmdpbjogNXB4OwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHdpZHRoOiAzMzBweDsKICAgICAgfQoKICAgICAgOmhvc3QoW19leHBhbmRlZF0pIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgOmhvc3QoW19leHBhbmRlZF0pICN0Zi1saW5lLWNoYXJ0LWRhdGEtbG9hZGVyLWNvbnRhaW5lciB7CiAgICAgICAgaGVpZ2h0OiA0MDBweDsKICAgICAgfQoKICAgICAgI3RmLWxpbmUtY2hhcnQtZGF0YS1sb2FkZXItY29udGFpbmVyIHsKICAgICAgICBoZWlnaHQ6IDIwMHB4OwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICB0Zi1jYXJkLWhlYWRpbmcgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIG1hcmdpbi1ib3R0b206IDEwcHg7CiAgICAgIH0KCiAgICAgICNidXR0b25zIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICAgIH0KCiAgICAgIHBhcGVyLWljb24tYnV0dG9uIHsKICAgICAgICBjb2xvcjogIzIxOTZmMzsKICAgICAgICBib3JkZXItcmFkaXVzOiAxMDAlOwogICAgICAgIHdpZHRoOiAzMnB4OwogICAgICAgIGhlaWdodDogMzJweDsKICAgICAgICBwYWRkaW5nOiA0cHg7CiAgICAgIH0KCiAgICAgIHBhcGVyLWljb24tYnV0dG9uW3NlbGVjdGVkXSB7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tdGItdWktbGlnaHQtYWNjZW50KTsKICAgICAgfQoKICAgICAgLmRvd25sb2FkLWxpbmtzIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGhlaWdodDogMzJweDsKICAgICAgfQoKICAgICAgLmRvd25sb2FkLWxpbmtzIGEgewogICAgICAgIGFsaWduLXNlbGY6IGNlbnRlcjsKICAgICAgICBmb250LXNpemU6IDEwcHg7CiAgICAgICAgbWFyZ2luOiAycHg7CiAgICAgIH0KCiAgICAgIC5kb3dubG9hZC1saW5rcyBwYXBlci1kcm9wZG93bi1tZW51IHsKICAgICAgICB3aWR0aDogMTAwcHg7CiAgICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItbGFiZWw6IHsKICAgICAgICAgIGZvbnQtc2l6ZTogMTBweDsKICAgICAgICB9CiAgICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItaW5wdXQ6IHsKICAgICAgICAgIGZvbnQtc2l6ZTogMTBweDsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIHBhcGVyLW1lbnUtYnV0dG9uIHsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICB9CiAgICAgIHBhcGVyLWl0ZW0gYSB7CiAgICAgICAgY29sb3I6IGluaGVyaXQ7CiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KICA8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdGYtc2NhbGFyLWRhc2hib2FyZC90Zi1zY2FsYXItY2FyZC5odG1sLmpzClBvbHltZXIoe2lzOiJ0Zi1zY2FsYXItY2FyZCIscHJvcGVydGllczp7dGFnOlN0cmluZyxkYXRhVG9Mb2FkOkFycmF5LHhUeXBlOlN0cmluZyxhY3RpdmU6Qm9vbGVhbixpZ25vcmVZT3V0bGllcnM6Qm9vbGVhbixyZXF1ZXN0TWFuYWdlcjpPYmplY3Qsc2hvd0Rvd25MaW5rczpCb29sZWFuLHNtb290aGluZ0VuYWJsZWQ6Qm9vbGVhbixzbW9vdGhpbmdXZWlnaHQ6TnVtYmVyLHRhZ01ldGFkYXRhOk9iamVjdCxjb2xvclNjYWxlOnt0eXBlOk9iamVjdCx2YWx1ZTpudWxsfSx0b29sdGlwU29ydGluZ01ldGhvZDpTdHJpbmcsX2xvYWREYXRhQ2FsbGJhY2s6e3R5cGU6T2JqZWN0LHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuKGEsYyxkKT0+e2Q9ZC5tYXAoZz0+KHt3YWxsX3RpbWU6bmV3IERhdGUoMUUzKmdbMF0pLHN0ZXA6Z1sxXSxzY2FsYXI6Z1syXX0pKTtjb25zdCBmPXRoaXMuX2dldFNlcmllc05hbWVGcm9tRGF0dW0oYyk7YS5zZXRTZXJpZXNNZXRhZGF0YShmLGMpO2Euc2V0U2VyaWVzRGF0YShmLApkKX19LHJlYWRPbmx5OiEwfSxnZXREYXRhTG9hZFVybDp7dHlwZTpGdW5jdGlvbix2YWx1ZTpmdW5jdGlvbigpe3JldHVybih7dGFnOmEscnVuOmMsZXhwZXJpbWVudDpkfSk9PlBrLmdldFJvdXRlcigpLnBsdWdpblJvdXRlKCJzY2FsYXJzIiwiL3NjYWxhcnMiLG5ldyBVUkxTZWFyY2hQYXJhbXMoe3RhZzphLHJ1bjpjLGV4cGVyaW1lbnQ6ZHx8IiJ9KSl9fSxfZG93bmxvYWRVcmxGbjp7dHlwZTpGdW5jdGlvbix2YWx1ZTpmdW5jdGlvbigpe3JldHVybihhLGMpPT50aGlzLmdldERhdGFMb2FkVXJsKHt0YWc6YSxydW46YyxleHBlcmltZW50OlBrLmdldEV4cGVyaW1lbnRJZCgpfSl9fSxyZXF1ZXN0RGF0YTpGdW5jdGlvbixfZ2V0RGF0YUxvYWROYW1lOnt0eXBlOkZ1bmN0aW9uLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIGE9PnRoaXMuX2dldFNlcmllc05hbWVGcm9tRGF0dW0oYSl9fSxfZXhwYW5kZWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9LApfbG9nU2NhbGVBY3RpdmU6Qm9vbGVhbixfdG9vbHRpcENvbHVtbnM6e3R5cGU6QXJyYXksdmFsdWU6ZnVuY3Rpb24oKXtjb25zdCBhPWVtLkRFRkFVTFRfVE9PTFRJUF9DT0xVTU5TLnNsaWNlKCksYz1hLmZpbmRJbmRleChkPT4iTmFtZSI9PWQudGl0bGUpO2Euc3BsaWNlKGMsMSx7dGl0bGU6Ik5hbWUiLGV2YWx1YXRlOmQ9PntkPWQuZGF0YXNldC5tZXRhZGF0YSgpLm1ldGE7cmV0dXJuIHRoaXMuX2dldFNlcmllc0Rpc3BsYXlOYW1lRnJvbURhdHVtKGQpfX0pO3JldHVybiBhfX19LHJlbG9hZCgpe3RoaXMuJCQoInRmLWxpbmUtY2hhcnQtZGF0YS1sb2FkZXIiKS5yZWxvYWQoKX0scmVkcmF3KCl7dGhpcy4kJCgidGYtbGluZS1jaGFydC1kYXRhLWxvYWRlciIpLnJlZHJhdygpfSxfdG9nZ2xlRXhwYW5kZWQoKXt0aGlzLnNldCgiX2V4cGFuZGVkIiwhdGhpcy5fZXhwYW5kZWQpO3RoaXMucmVkcmF3KCl9LF90b2dnbGVMb2dTY2FsZSgpe3RoaXMuc2V0KCJfbG9nU2NhbGVBY3RpdmUiLAohdGhpcy5fbG9nU2NhbGVBY3RpdmUpfSxfcmVzZXREb21haW4oKXtjb25zdCBhPXRoaXMuJCQoInRmLWxpbmUtY2hhcnQtZGF0YS1sb2FkZXIiKTthJiZhLnJlc2V0RG9tYWluKCl9LF91cGRhdGVEb3dubG9hZExpbmsoKXtjb25zdCBhPXRoaXMuJCQoInRmLWxpbmUtY2hhcnQtZGF0YS1sb2FkZXIiKS5leHBvcnRBc1N2Z1N0cmluZygpO3RoaXMuJCQoIiNzdmdMaW5rIikuaHJlZj1gZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCwke2J0b2EoYSl9YH0sX3J1bnNGcm9tRGF0YShhKXtyZXR1cm4gYS5tYXAoYz0+Yy5ydW4pfSxfZ2V0RGF0YVNlcmllcygpe3JldHVybiB0aGlzLmRhdGFUb0xvYWQubWFwKGE9PnRoaXMuX2dldFNlcmllc05hbWVGcm9tRGF0dW0oYSkpfSxfZ2V0U2VyaWVzTmFtZUZyb21EYXR1bSh7cnVuOmEsZXhwZXJpbWVudDpjPXtuYW1lOiJfZGVmYXVsdCJ9fSl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KFtjLm5hbWUsYV0pfSxfZ2V0U2VyaWVzRGlzcGxheU5hbWVGcm9tRGF0dW0oYSl7cmV0dXJuIGEucnVufSwKX2dldENvbG9yU2NhbGUoKXtyZXR1cm4gbnVsbCE9PXRoaXMuY29sb3JTY2FsZT90aGlzLmNvbG9yU2NhbGU6e3NjYWxlOmE9PntbLGFdPUpTT04ucGFyc2UoYSk7cmV0dXJuIFpsLnJ1bnNDb2xvclNjYWxlKGEpfX19fSk7Cjwvc2NyaXB0Pgo8L2RvbS1tb2R1bGU+CgoKCgoKCgoKCjxzY3JpcHQ+Ly9+fldFQlBBVEh+fi9pcm9uLXJhbmdlLWJlaGF2aW9yL2lyb24tcmFuZ2UtYmVoYXZpb3IuaHRtbC5qcwpQb2x5bWVyLklyb25SYW5nZUJlaGF2aW9yPXtwcm9wZXJ0aWVzOnt2YWx1ZTp7dHlwZTpOdW1iZXIsdmFsdWU6MCxub3RpZnk6ITAscmVmbGVjdFRvQXR0cmlidXRlOiEwfSxtaW46e3R5cGU6TnVtYmVyLHZhbHVlOjAsbm90aWZ5OiEwfSxtYXg6e3R5cGU6TnVtYmVyLHZhbHVlOjEwMCxub3RpZnk6ITB9LHN0ZXA6e3R5cGU6TnVtYmVyLHZhbHVlOjEsbm90aWZ5OiEwfSxyYXRpbzp7dHlwZTpOdW1iZXIsdmFsdWU6MCxyZWFkT25seTohMCxub3RpZnk6ITB9fSxvYnNlcnZlcnM6WyJfdXBkYXRlKHZhbHVlLCBtaW4sIG1heCwgc3RlcCkiXSxfY2FsY1JhdGlvOmZ1bmN0aW9uKGEpe3JldHVybih0aGlzLl9jbGFtcFZhbHVlKGEpLXRoaXMubWluKS8odGhpcy5tYXgtdGhpcy5taW4pfSxfY2xhbXBWYWx1ZTpmdW5jdGlvbihhKXtyZXR1cm4gTWF0aC5taW4odGhpcy5tYXgsTWF0aC5tYXgodGhpcy5taW4sdGhpcy5fY2FsY1N0ZXAoYSkpKX0sX2NhbGNTdGVwOmZ1bmN0aW9uKGEpe2E9cGFyc2VGbG9hdChhKTsKaWYoIXRoaXMuc3RlcClyZXR1cm4gYTthPU1hdGgucm91bmQoKGEtdGhpcy5taW4pL3RoaXMuc3RlcCk7cmV0dXJuIDE+dGhpcy5zdGVwP2EvKDEvdGhpcy5zdGVwKSt0aGlzLm1pbjphKnRoaXMuc3RlcCt0aGlzLm1pbn0sX3ZhbGlkYXRlVmFsdWU6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLl9jbGFtcFZhbHVlKHRoaXMudmFsdWUpO3RoaXMudmFsdWU9dGhpcy5vbGRWYWx1ZT1pc05hTihhKT90aGlzLm9sZFZhbHVlOmE7cmV0dXJuIHRoaXMudmFsdWUhPT1hfSxfdXBkYXRlOmZ1bmN0aW9uKCl7dGhpcy5fdmFsaWRhdGVWYWx1ZSgpO3RoaXMuX3NldFJhdGlvKDEwMCp0aGlzLl9jYWxjUmF0aW8odGhpcy52YWx1ZSkpfX07Cjwvc2NyaXB0PgoKCgoKCgoKCgoKPGRvbS1tb2R1bGUgaWQ9InBhcGVyLXByb2dyZXNzIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICB3aWR0aDogMjAwcHg7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIDpob3N0KFtoaWRkZW5dKSwgW2hpZGRlbl0gewogICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgI3Byb2dyZXNzQ29udGFpbmVyIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1wcm9ncmVzcy1jb250YWluZXI7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICAjcHJvZ3Jlc3NDb250YWluZXIsCiAgICAgIC8qIHRoZSBzdHJpcGUgZm9yIHRoZSBpbmRldGVybWluYXRlIGFuaW1hdGlvbiovCiAgICAgIC5pbmRldGVybWluYXRlOjphZnRlciB7CiAgICAgICAgaGVpZ2h0OiB2YXIoLS1wYXBlci1wcm9ncmVzcy1oZWlnaHQsIDRweCk7CiAgICAgIH0KCiAgICAgICNwcmltYXJ5UHJvZ3Jlc3MsCiAgICAgICNzZWNvbmRhcnlQcm9ncmVzcywKICAgICAgLmluZGV0ZXJtaW5hdGU6OmFmdGVyIHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtZml0OwogICAgICB9CgogICAgICAjcHJvZ3Jlc3NDb250YWluZXIsCiAgICAgIC5pbmRldGVybWluYXRlOjphZnRlciB7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tcGFwZXItcHJvZ3Jlc3MtY29udGFpbmVyLWNvbG9yLCB2YXIoLS1nb29nbGUtZ3JleS0zMDApKTsKICAgICAgfQoKICAgICAgOmhvc3QoLnRyYW5zaXRpbmcpICNwcmltYXJ5UHJvZ3Jlc3MsCiAgICAgIDpob3N0KC50cmFuc2l0aW5nKSAjc2Vjb25kYXJ5UHJvZ3Jlc3MgewogICAgICAgIC13ZWJraXQtdHJhbnNpdGlvbi1wcm9wZXJ0eTogLXdlYmtpdC10cmFuc2Zvcm07CiAgICAgICAgdHJhbnNpdGlvbi1wcm9wZXJ0eTogdHJhbnNmb3JtOwoKICAgICAgICAvKiBEdXJhdGlvbiAqLwogICAgICAgIC13ZWJraXQtdHJhbnNpdGlvbi1kdXJhdGlvbjogdmFyKC0tcGFwZXItcHJvZ3Jlc3MtdHJhbnNpdGlvbi1kdXJhdGlvbiwgMC4wOHMpOwogICAgICAgIHRyYW5zaXRpb24tZHVyYXRpb246IHZhcigtLXBhcGVyLXByb2dyZXNzLXRyYW5zaXRpb24tZHVyYXRpb24sIDAuMDhzKTsKCiAgICAgICAgLyogVGltaW5nIGZ1bmN0aW9uICovCiAgICAgICAgLXdlYmtpdC10cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjogdmFyKC0tcGFwZXItcHJvZ3Jlc3MtdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24sIGVhc2UpOwogICAgICAgIHRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOiB2YXIoLS1wYXBlci1wcm9ncmVzcy10cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbiwgZWFzZSk7CgogICAgICAgIC8qIERlbGF5ICovCiAgICAgICAgLXdlYmtpdC10cmFuc2l0aW9uLWRlbGF5OiB2YXIoLS1wYXBlci1wcm9ncmVzcy10cmFuc2l0aW9uLWRlbGF5LCAwcyk7CiAgICAgICAgdHJhbnNpdGlvbi1kZWxheTogdmFyKC0tcGFwZXItcHJvZ3Jlc3MtdHJhbnNpdGlvbi1kZWxheSwgMHMpOwogICAgICB9CgogICAgICAjcHJpbWFyeVByb2dyZXNzLAogICAgICAjc2Vjb25kYXJ5UHJvZ3Jlc3MgewogICAgICAgIEBhcHBseSAtLWxheW91dC1maXQ7CiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOiBsZWZ0IGNlbnRlcjsKICAgICAgICB0cmFuc2Zvcm0tb3JpZ2luOiBsZWZ0IGNlbnRlcjsKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGVYKDApOwogICAgICAgIHRyYW5zZm9ybTogc2NhbGVYKDApOwogICAgICAgIHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm07CiAgICAgIH0KCiAgICAgICNwcmltYXJ5UHJvZ3Jlc3MgewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXBhcGVyLXByb2dyZXNzLWFjdGl2ZS1jb2xvciwgdmFyKC0tZ29vZ2xlLWdyZWVuLTUwMCkpOwogICAgICB9CgogICAgICAjc2Vjb25kYXJ5UHJvZ3Jlc3MgewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXBhcGVyLXByb2dyZXNzLXNlY29uZGFyeS1jb2xvciwgdmFyKC0tZ29vZ2xlLWdyZWVuLTEwMCkpOwogICAgICB9CgogICAgICA6aG9zdChbZGlzYWJsZWRdKSAjcHJpbWFyeVByb2dyZXNzIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1wYXBlci1wcm9ncmVzcy1kaXNhYmxlZC1hY3RpdmUtY29sb3IsIHZhcigtLWdvb2dsZS1ncmV5LTUwMCkpOwogICAgICB9CgogICAgICA6aG9zdChbZGlzYWJsZWRdKSAjc2Vjb25kYXJ5UHJvZ3Jlc3MgewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXBhcGVyLXByb2dyZXNzLWRpc2FibGVkLXNlY29uZGFyeS1jb2xvciwgdmFyKC0tZ29vZ2xlLWdyZXktMzAwKSk7CiAgICAgIH0KCiAgICAgIDpob3N0KDpub3QoW2Rpc2FibGVkXSkpICNwcmltYXJ5UHJvZ3Jlc3MuaW5kZXRlcm1pbmF0ZSB7CiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOiByaWdodCBjZW50ZXI7CiAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogcmlnaHQgY2VudGVyOwogICAgICAgIC13ZWJraXQtYW5pbWF0aW9uOiBpbmRldGVybWluYXRlLWJhciB2YXIoLS1wYXBlci1wcm9ncmVzcy1pbmRldGVybWluYXRlLWN5Y2xlLWR1cmF0aW9uLCAycykgbGluZWFyIGluZmluaXRlOwogICAgICAgIGFuaW1hdGlvbjogaW5kZXRlcm1pbmF0ZS1iYXIgdmFyKC0tcGFwZXItcHJvZ3Jlc3MtaW5kZXRlcm1pbmF0ZS1jeWNsZS1kdXJhdGlvbiwgMnMpIGxpbmVhciBpbmZpbml0ZTsKICAgICAgfQoKICAgICAgOmhvc3QoOm5vdChbZGlzYWJsZWRdKSkgI3ByaW1hcnlQcm9ncmVzcy5pbmRldGVybWluYXRlOjphZnRlciB7CiAgICAgICAgY29udGVudDogIiI7CiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOiBjZW50ZXIgY2VudGVyOwogICAgICAgIHRyYW5zZm9ybS1vcmlnaW46IGNlbnRlciBjZW50ZXI7CgogICAgICAgIC13ZWJraXQtYW5pbWF0aW9uOiBpbmRldGVybWluYXRlLXNwbGl0dGVyIHZhcigtLXBhcGVyLXByb2dyZXNzLWluZGV0ZXJtaW5hdGUtY3ljbGUtZHVyYXRpb24sIDJzKSBsaW5lYXIgaW5maW5pdGU7CiAgICAgICAgYW5pbWF0aW9uOiBpbmRldGVybWluYXRlLXNwbGl0dGVyIHZhcigtLXBhcGVyLXByb2dyZXNzLWluZGV0ZXJtaW5hdGUtY3ljbGUtZHVyYXRpb24sIDJzKSBsaW5lYXIgaW5maW5pdGU7CiAgICAgIH0KCiAgICAgIEAtd2Via2l0LWtleWZyYW1lcyBpbmRldGVybWluYXRlLWJhciB7CiAgICAgICAgMCUgewogICAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlWCgxKSB0cmFuc2xhdGVYKC0xMDAlKTsKICAgICAgICB9CiAgICAgICAgNTAlIHsKICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZVgoMSkgdHJhbnNsYXRlWCgwJSk7CiAgICAgICAgfQogICAgICAgIDc1JSB7CiAgICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGVYKDEpIHRyYW5zbGF0ZVgoMCUpOwogICAgICAgICAgLXdlYmtpdC1hbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoLjI4LC42MiwuMzcsLjkxKTsKICAgICAgICB9CiAgICAgICAgMTAwJSB7CiAgICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGVYKDApIHRyYW5zbGF0ZVgoMCUpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgQC13ZWJraXQta2V5ZnJhbWVzIGluZGV0ZXJtaW5hdGUtc3BsaXR0ZXIgewogICAgICAgIDAlIHsKICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZVgoLjc1KSB0cmFuc2xhdGVYKC0xMjUlKTsKICAgICAgICB9CiAgICAgICAgMzAlIHsKICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZVgoLjc1KSB0cmFuc2xhdGVYKC0xMjUlKTsKICAgICAgICAgIC13ZWJraXQtYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKC40MiwwLC42LC44KTsKICAgICAgICB9CiAgICAgICAgOTAlIHsKICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZVgoLjc1KSB0cmFuc2xhdGVYKDEyNSUpOwogICAgICAgIH0KICAgICAgICAxMDAlIHsKICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZVgoLjc1KSB0cmFuc2xhdGVYKDEyNSUpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgQGtleWZyYW1lcyBpbmRldGVybWluYXRlLWJhciB7CiAgICAgICAgMCUgewogICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZVgoMSkgdHJhbnNsYXRlWCgtMTAwJSk7CiAgICAgICAgfQogICAgICAgIDUwJSB7CiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlWCgxKSB0cmFuc2xhdGVYKDAlKTsKICAgICAgICB9CiAgICAgICAgNzUlIHsKICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGVYKDEpIHRyYW5zbGF0ZVgoMCUpOwogICAgICAgICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKC4yOCwuNjIsLjM3LC45MSk7CiAgICAgICAgfQogICAgICAgIDEwMCUgewogICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZVgoMCkgdHJhbnNsYXRlWCgwJSk7CiAgICAgICAgfQogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIGluZGV0ZXJtaW5hdGUtc3BsaXR0ZXIgewogICAgICAgIDAlIHsKICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGVYKC43NSkgdHJhbnNsYXRlWCgtMTI1JSk7CiAgICAgICAgfQogICAgICAgIDMwJSB7CiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlWCguNzUpIHRyYW5zbGF0ZVgoLTEyNSUpOwogICAgICAgICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKC40MiwwLC42LC44KTsKICAgICAgICB9CiAgICAgICAgOTAlIHsKICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGVYKC43NSkgdHJhbnNsYXRlWCgxMjUlKTsKICAgICAgICB9CiAgICAgICAgMTAwJSB7CiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlWCguNzUpIHRyYW5zbGF0ZVgoMTI1JSk7CiAgICAgICAgfQogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxkaXYgaWQ9InByb2dyZXNzQ29udGFpbmVyIj4KICAgICAgPGRpdiBpZD0ic2Vjb25kYXJ5UHJvZ3Jlc3MiIGhpZGRlbiQ9IltbX2hpZGVTZWNvbmRhcnlQcm9ncmVzcyhzZWNvbmRhcnlSYXRpbyldXSI+PC9kaXY+CiAgICAgIDxkaXYgaWQ9InByaW1hcnlQcm9ncmVzcyI+PC9kaXY+CiAgICA8L2Rpdj4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+Cgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vcGFwZXItcHJvZ3Jlc3MvcGFwZXItcHJvZ3Jlc3MuaHRtbC5qcwpQb2x5bWVyKHtpczoicGFwZXItcHJvZ3Jlc3MiLGJlaGF2aW9yczpbUG9seW1lci5Jcm9uUmFuZ2VCZWhhdmlvcl0scHJvcGVydGllczp7c2Vjb25kYXJ5UHJvZ3Jlc3M6e3R5cGU6TnVtYmVyLHZhbHVlOjB9LHNlY29uZGFyeVJhdGlvOnt0eXBlOk51bWJlcix2YWx1ZTowLHJlYWRPbmx5OiEwfSxpbmRldGVybWluYXRlOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEsb2JzZXJ2ZXI6Il90b2dnbGVJbmRldGVybWluYXRlIn0sZGlzYWJsZWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxyZWZsZWN0VG9BdHRyaWJ1dGU6ITAsb2JzZXJ2ZXI6Il9kaXNhYmxlZENoYW5nZWQifX0sb2JzZXJ2ZXJzOlsiX3Byb2dyZXNzQ2hhbmdlZChzZWNvbmRhcnlQcm9ncmVzcywgdmFsdWUsIG1pbiwgbWF4LCBpbmRldGVybWluYXRlKSJdLGhvc3RBdHRyaWJ1dGVzOntyb2xlOiJwcm9ncmVzc2JhciJ9LF90b2dnbGVJbmRldGVybWluYXRlOmZ1bmN0aW9uKGEpe3RoaXMudG9nZ2xlQ2xhc3MoImluZGV0ZXJtaW5hdGUiLAphLHRoaXMuJC5wcmltYXJ5UHJvZ3Jlc3MpfSxfdHJhbnNmb3JtUHJvZ3Jlc3M6ZnVuY3Rpb24oYSxjKXthLnN0eWxlLnRyYW5zZm9ybT1hLnN0eWxlLndlYmtpdFRyYW5zZm9ybT0ic2NhbGVYKCIrYy8xMDArIikifSxfbWFpblJhdGlvQ2hhbmdlZDpmdW5jdGlvbihhKXt0aGlzLl90cmFuc2Zvcm1Qcm9ncmVzcyh0aGlzLiQucHJpbWFyeVByb2dyZXNzLGEpfSxfcHJvZ3Jlc3NDaGFuZ2VkOmZ1bmN0aW9uKGEsYyxkLGYsZyl7YT10aGlzLl9jbGFtcFZhbHVlKGEpO2M9dGhpcy5fY2xhbXBWYWx1ZShjKTt2YXIgbD0xMDAqdGhpcy5fY2FsY1JhdGlvKGEpLGs9MTAwKnRoaXMuX2NhbGNSYXRpbyhjKTt0aGlzLl9zZXRTZWNvbmRhcnlSYXRpbyhsKTt0aGlzLl90cmFuc2Zvcm1Qcm9ncmVzcyh0aGlzLiQuc2Vjb25kYXJ5UHJvZ3Jlc3MsbCk7dGhpcy5fdHJhbnNmb3JtUHJvZ3Jlc3ModGhpcy4kLnByaW1hcnlQcm9ncmVzcyxrKTt0aGlzLnNlY29uZGFyeVByb2dyZXNzPWE7Zz90aGlzLnJlbW92ZUF0dHJpYnV0ZSgiYXJpYS12YWx1ZW5vdyIpOgp0aGlzLnNldEF0dHJpYnV0ZSgiYXJpYS12YWx1ZW5vdyIsYyk7dGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtdmFsdWVtaW4iLGQpO3RoaXMuc2V0QXR0cmlidXRlKCJhcmlhLXZhbHVlbWF4IixmKX0sX2Rpc2FibGVkQ2hhbmdlZDpmdW5jdGlvbihhKXt0aGlzLnNldEF0dHJpYnV0ZSgiYXJpYS1kaXNhYmxlZCIsYT8idHJ1ZSI6ImZhbHNlIil9LF9oaWRlU2Vjb25kYXJ5UHJvZ3Jlc3M6ZnVuY3Rpb24oYSl7cmV0dXJuIDA9PT1hfX0pOwo8L3NjcmlwdD4KCgoKCgo8ZG9tLW1vZHVsZSBpZD0icGFwZXItc2xpZGVyIj4KICA8dGVtcGxhdGUgc3RyaXAtd2hpdGVzcGFjZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIEBhcHBseSAtLWxheW91dDsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtanVzdGlmaWVkOwogICAgICAgIEBhcHBseSAtLWxheW91dC1jZW50ZXI7CiAgICAgICAgd2lkdGg6IDIwMHB4OwogICAgICAgIGN1cnNvcjogZGVmYXVsdDsKICAgICAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgLW1zLXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICAgIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwKTsKICAgICAgICAtLXBhcGVyLXByb2dyZXNzLWFjdGl2ZS1jb2xvcjogdmFyKC0tcGFwZXItc2xpZGVyLWFjdGl2ZS1jb2xvciwgdmFyKC0tZ29vZ2xlLWJsdWUtNzAwKSk7CiAgICAgICAgLS1wYXBlci1wcm9ncmVzcy1zZWNvbmRhcnktY29sb3I6IHZhcigtLXBhcGVyLXNsaWRlci1zZWNvbmRhcnktY29sb3IsIHZhcigtLWdvb2dsZS1ibHVlLTMwMCkpOwogICAgICAgIC0tcGFwZXItcHJvZ3Jlc3MtZGlzYWJsZWQtYWN0aXZlLWNvbG9yOiB2YXIoLS1wYXBlci1zbGlkZXItZGlzYWJsZWQtYWN0aXZlLWNvbG9yLCB2YXIoLS1wYXBlci1ncmV5LTQwMCkpOwogICAgICAgIC0tcGFwZXItcHJvZ3Jlc3MtZGlzYWJsZWQtc2Vjb25kYXJ5LWNvbG9yOiB2YXIoLS1wYXBlci1zbGlkZXItZGlzYWJsZWQtc2Vjb25kYXJ5LWNvbG9yLCB2YXIoLS1wYXBlci1ncmV5LTQwMCkpOwogICAgICAgIC0tY2FsY3VsYXRlZC1wYXBlci1zbGlkZXItaGVpZ2h0OiB2YXIoLS1wYXBlci1zbGlkZXItaGVpZ2h0LCAycHgpOwogICAgICB9CgogICAgICAvKiBmb2N1cyBzaG93cyB0aGUgcmlwcGxlICovCiAgICAgIDpob3N0KDpmb2N1cykgewogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBOT1RFKGtlYW51bGVlKTogVGhvdWdoIDpob3N0LWNvbnRleHQgaXMgbm90IHVuaXZlcnNhbGx5IHN1cHBvcnRlZCwgc29tZSBwYWdlcwogICAgICAgKiBzdGlsbCByZWx5IG9uIHBhcGVyLXNsaWRlciBiZWluZyBmbGlwcGVkIHdoZW4gZGlyPSJydGwiIGlzIHNldCBvbiBib2R5LiBGb3IgZnVsbAogICAgICAgKiBjb21wYXRhYmlsaXR5LCBkaXI9InJ0bCIgbXVzdCBiZSBleHBsaWNpdGx5IHNldCBvbiBwYXBlci1zbGlkZXIuCiAgICAgICAqLwogICAgICA6ZGlyKHJ0bCkgI3NsaWRlckNvbnRhaW5lciB7CiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlWCgtMSk7CiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZVgoLTEpOwogICAgICB9CgogICAgICAvKioKICAgICAgICogTk9URShrZWFudWxlZSk6IFRoaXMgaXMgc2VwYXJhdGUgZnJvbSB0aGUgcnVsZSBhYm92ZSBiZWNhdXNlIDpob3N0LWNvbnRleHQgbWF5CiAgICAgICAqIG5vdCBiZSByZWNvZ25pemVkLgogICAgICAgKi8KICAgICAgOmhvc3QoW2Rpcj0icnRsIl0pICNzbGlkZXJDb250YWluZXIgewogICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZVgoLTEpOwogICAgICAgIHRyYW5zZm9ybTogc2NhbGVYKC0xKTsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIE5PVEUoa2VhbnVsZWUpOiBOZWVkZWQgdG8gb3ZlcnJpZGUgdGhlIDpob3N0LWNvbnRleHQgcnVsZSAod2hlcmUgc3VwcG9ydGVkKQogICAgICAgKiB0byBzdXBwb3J0IExUUiBzbGlkZXJzIGluIFJUTCBwYWdlcy4KICAgICAgICovCiAgICAgIDpob3N0KFtkaXI9Imx0ciJdKSAjc2xpZGVyQ29udGFpbmVyIHsKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGVYKDEpOwogICAgICAgIHRyYW5zZm9ybTogc2NhbGVYKDEpOwogICAgICB9CgogICAgICAjc2xpZGVyQ29udGFpbmVyIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiBjYWxjKDMwcHggKyB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXNsaWRlci1oZWlnaHQpKTsKICAgICAgICBtYXJnaW4tbGVmdDogY2FsYygxNXB4ICsgdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1zbGlkZXItaGVpZ2h0KS8yKTsKICAgICAgICBtYXJnaW4tcmlnaHQ6IGNhbGMoMTVweCArIHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItc2xpZGVyLWhlaWdodCkvMik7CiAgICAgIH0KCiAgICAgICNzbGlkZXJDb250YWluZXI6Zm9jdXMgewogICAgICAgIG91dGxpbmU6IDA7CiAgICAgIH0KCiAgICAgICNzbGlkZXJDb250YWluZXIuZWRpdGFibGUgewogICAgICAgIG1hcmdpbi10b3A6IDEycHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTJweDsKICAgICAgfQoKICAgICAgLmJhci1jb250YWluZXIgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQoKICAgICAgLnJpbmcgPiAuYmFyLWNvbnRhaW5lciB7CiAgICAgICAgbGVmdDogY2FsYyg1cHggKyB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXNsaWRlci1oZWlnaHQpLzIpOwogICAgICAgIHRyYW5zaXRpb246IGxlZnQgMC4xOHMgZWFzZTsKICAgICAgfQoKICAgICAgLnJpbmcuZXhwYW5kLmRyYWdnaW5nID4gLmJhci1jb250YWluZXIgewogICAgICAgIHRyYW5zaXRpb246IG5vbmU7CiAgICAgIH0KCiAgICAgIC5yaW5nLmV4cGFuZDpub3QoLnBpbikgPiAuYmFyLWNvbnRhaW5lciB7CiAgICAgICAgbGVmdDogY2FsYyg4cHggKyB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXNsaWRlci1oZWlnaHQpLzIpOwogICAgICB9CgogICAgICAjc2xpZGVyQmFyIHsKICAgICAgICBwYWRkaW5nOiAxNXB4IDA7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItc2xpZGVyLWJhci1jb2xvciwgdHJhbnNwYXJlbnQpOwogICAgICAgIC0tcGFwZXItcHJvZ3Jlc3MtY29udGFpbmVyLWNvbG9yOiB2YXIoLS1wYXBlci1zbGlkZXItY29udGFpbmVyLWNvbG9yLCB2YXIoLS1wYXBlci1ncmV5LTQwMCkpOwogICAgICAgIC0tcGFwZXItcHJvZ3Jlc3MtaGVpZ2h0OiB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXNsaWRlci1oZWlnaHQpOwogICAgICB9CgogICAgICAuc2xpZGVyLW1hcmtlcnMgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IGNhbGMoMTRweCArIHZhcigtLXBhcGVyLXNsaWRlci1oZWlnaHQsMnB4KS8yKTsKICAgICAgICBoZWlnaHQ6IHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItc2xpZGVyLWhlaWdodCk7CiAgICAgICAgbGVmdDogMDsKICAgICAgICByaWdodDogLTFweDsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIEBhcHBseSAtLWxheW91dC1ob3Jpem9udGFsOwogICAgICB9CgogICAgICAuc2xpZGVyLW1hcmtlciB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWZsZXg7CiAgICAgIH0KICAgICAgLnNsaWRlci1tYXJrZXJzOjphZnRlciwKICAgICAgLnNsaWRlci1tYXJrZXI6OmFmdGVyIHsKICAgICAgICBjb250ZW50OiAiIjsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBtYXJnaW4tbGVmdDogLTFweDsKICAgICAgICB3aWR0aDogMnB4OwogICAgICAgIGhlaWdodDogdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1zbGlkZXItaGVpZ2h0KTsKICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItc2xpZGVyLW1hcmtlcnMtY29sb3IsICMwMDApOwogICAgICB9CgogICAgICAuc2xpZGVyLWtub2IgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHRvcDogMDsKICAgICAgICBtYXJnaW4tbGVmdDogY2FsYygtMTVweCAtIHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItc2xpZGVyLWhlaWdodCkvMik7CiAgICAgICAgd2lkdGg6IGNhbGMoMzBweCArIHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItc2xpZGVyLWhlaWdodCkpOwogICAgICAgIGhlaWdodDogY2FsYygzMHB4ICsgdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1zbGlkZXItaGVpZ2h0KSk7CiAgICAgIH0KCiAgICAgIC50cmFuc2l0aW5nID4gLnNsaWRlci1rbm9iIHsKICAgICAgICB0cmFuc2l0aW9uOiBsZWZ0IDAuMDhzIGVhc2U7CiAgICAgIH0KCiAgICAgIC5zbGlkZXIta25vYjpmb2N1cyB7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgfQoKICAgICAgLnNsaWRlci1rbm9iLmRyYWdnaW5nIHsKICAgICAgICB0cmFuc2l0aW9uOiBub25lOwogICAgICB9CgogICAgICAuc25hcHMgPiAuc2xpZGVyLWtub2IuZHJhZ2dpbmcgewogICAgICAgIHRyYW5zaXRpb246IC13ZWJraXQtdHJhbnNmb3JtIDAuMDhzIGVhc2U7CiAgICAgICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuMDhzIGVhc2U7CiAgICAgIH0KCiAgICAgIC5zbGlkZXIta25vYi1pbm5lciB7CiAgICAgICAgbWFyZ2luOiAxMHB4OwogICAgICAgIHdpZHRoOiBjYWxjKDEwMCUgLSAyMHB4KTsKICAgICAgICBoZWlnaHQ6IGNhbGMoMTAwJSAtIDIwcHgpOwogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLXNsaWRlci1rbm9iLWNvbG9yLCB2YXIoLS1nb29nbGUtYmx1ZS03MDApKTsKICAgICAgICBib3JkZXI6IDJweCBzb2xpZCB2YXIoLS1wYXBlci1zbGlkZXIta25vYi1jb2xvciwgdmFyKC0tZ29vZ2xlLWJsdWUtNzAwKSk7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwoKICAgICAgICAtbW96LWJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKCiAgICAgICAgdHJhbnNpdGlvbi1wcm9wZXJ0eTogLXdlYmtpdC10cmFuc2Zvcm0sIGJhY2tncm91bmQtY29sb3IsIGJvcmRlcjsKICAgICAgICB0cmFuc2l0aW9uLXByb3BlcnR5OiB0cmFuc2Zvcm0sIGJhY2tncm91bmQtY29sb3IsIGJvcmRlcjsKICAgICAgICB0cmFuc2l0aW9uLWR1cmF0aW9uOiAwLjE4czsKICAgICAgICB0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjogZWFzZTsKICAgICAgfQoKICAgICAgLmV4cGFuZDpub3QoLnBpbikgPiAuc2xpZGVyLWtub2IgPiAuc2xpZGVyLWtub2ItaW5uZXIgewogICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgxLjUpOwogICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMS41KTsKICAgICAgfQoKICAgICAgLnJpbmcgPiAuc2xpZGVyLWtub2IgPiAuc2xpZGVyLWtub2ItaW5uZXIgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLXNsaWRlci1rbm9iLXN0YXJ0LWNvbG9yLCB0cmFuc3BhcmVudCk7CiAgICAgICAgYm9yZGVyOiAycHggc29saWQgdmFyKC0tcGFwZXItc2xpZGVyLWtub2Itc3RhcnQtYm9yZGVyLWNvbG9yLCB2YXIoLS1wYXBlci1ncmV5LTQwMCkpOwogICAgICB9CgogICAgICAuc2xpZGVyLWtub2ItaW5uZXI6OmJlZm9yZSB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItc2xpZGVyLXBpbi1jb2xvciwgdmFyKC0tZ29vZ2xlLWJsdWUtNzAwKSk7CiAgICAgIH0KCiAgICAgIC5waW4gPiAuc2xpZGVyLWtub2IgPiAuc2xpZGVyLWtub2ItaW5uZXI6OmJlZm9yZSB7CiAgICAgICAgY29udGVudDogIiI7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMDsKICAgICAgICBsZWZ0OiA1MCU7CiAgICAgICAgbWFyZ2luLWxlZnQ6IC0xM3B4OwogICAgICAgIHdpZHRoOiAyNnB4OwogICAgICAgIGhlaWdodDogMjZweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA1MCUgNTAlIDUwJSAwOwoKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKC00NWRlZykgc2NhbGUoMCkgdHJhbnNsYXRlKDApOwogICAgICAgIHRyYW5zZm9ybTogcm90YXRlKC00NWRlZykgc2NhbGUoMCkgdHJhbnNsYXRlKDApOwogICAgICB9CgogICAgICAuc2xpZGVyLWtub2ItaW5uZXI6OmJlZm9yZSwKICAgICAgLnNsaWRlci1rbm9iLWlubmVyOjphZnRlciB7CiAgICAgICAgdHJhbnNpdGlvbjogLXdlYmtpdC10cmFuc2Zvcm0gLjE4cyBlYXNlLCBiYWNrZ3JvdW5kLWNvbG9yIC4xOHMgZWFzZTsKICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gLjE4cyBlYXNlLCBiYWNrZ3JvdW5kLWNvbG9yIC4xOHMgZWFzZTsKICAgICAgfQoKICAgICAgLnBpbi5yaW5nID4gLnNsaWRlci1rbm9iID4gLnNsaWRlci1rbm9iLWlubmVyOjpiZWZvcmUgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLXNsaWRlci1waW4tc3RhcnQtY29sb3IsIHZhcigtLXBhcGVyLWdyZXktNDAwKSk7CiAgICAgIH0KCiAgICAgIC5waW4uZXhwYW5kID4gLnNsaWRlci1rbm9iID4gLnNsaWRlci1rbm9iLWlubmVyOjpiZWZvcmUgewogICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoLTQ1ZGVnKSBzY2FsZSgxKSB0cmFuc2xhdGUoMTdweCwgLTE3cHgpOwogICAgICAgIHRyYW5zZm9ybTogcm90YXRlKC00NWRlZykgc2NhbGUoMSkgdHJhbnNsYXRlKDE3cHgsIC0xN3B4KTsKICAgICAgfQoKICAgICAgLnBpbiA+IC5zbGlkZXIta25vYiA+IC5zbGlkZXIta25vYi1pbm5lcjo6YWZ0ZXIgewogICAgICAgIGNvbnRlbnQ6IGF0dHIodmFsdWUpOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgbGVmdDogNTAlOwogICAgICAgIG1hcmdpbi1sZWZ0OiAtMTZweDsKICAgICAgICB3aWR0aDogMzJweDsKICAgICAgICBoZWlnaHQ6IDI2cHg7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1zbGlkZXItZm9udC1jb2xvciwgI2ZmZik7CiAgICAgICAgZm9udC1zaXplOiAxMHB4OwoKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMCkgdHJhbnNsYXRlKDApOwogICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMCkgdHJhbnNsYXRlKDApOwogICAgICB9CgogICAgICAucGluLmV4cGFuZCA+IC5zbGlkZXIta25vYiA+IC5zbGlkZXIta25vYi1pbm5lcjo6YWZ0ZXIgewogICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgxKSB0cmFuc2xhdGUoMCwgLTE3cHgpOwogICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSkgdHJhbnNsYXRlKDAsIC0xN3B4KTsKICAgICAgfQoKICAgICAgLyogcGFwZXItaW5wdXQgKi8KICAgICAgLnNsaWRlci1pbnB1dCB7CiAgICAgICAgd2lkdGg6IDUwcHg7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnB1dDogewogICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgICAgQGFwcGx5IC0tcGFwZXItc2xpZGVyLWlucHV0LWNvbnRhaW5lci1pbnB1dDsKICAgICAgICB9OwogICAgICAgIEBhcHBseSAtLXBhcGVyLXNsaWRlci1pbnB1dDsKICAgICAgfQoKICAgICAgLyogZGlzYWJsZWQgc3RhdGUgKi8KICAgICAgI3NsaWRlckNvbnRhaW5lci5kaXNhYmxlZCB7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5kaXNhYmxlZCA+IC5zbGlkZXIta25vYiA+IC5zbGlkZXIta25vYi1pbm5lciB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItc2xpZGVyLWRpc2FibGVkLWtub2ItY29sb3IsIHZhcigtLXBhcGVyLWdyZXktNDAwKSk7CiAgICAgICAgYm9yZGVyOiAycHggc29saWQgdmFyKC0tcGFwZXItc2xpZGVyLWRpc2FibGVkLWtub2ItY29sb3IsIHZhcigtLXBhcGVyLWdyZXktNDAwKSk7CiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlM2QoMC43NSwgMC43NSwgMSk7CiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZTNkKDAuNzUsIDAuNzUsIDEpOwogICAgICB9CgogICAgICAuZGlzYWJsZWQucmluZyA+IC5zbGlkZXIta25vYiA+IC5zbGlkZXIta25vYi1pbm5lciB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItc2xpZGVyLWtub2Itc3RhcnQtY29sb3IsIHRyYW5zcGFyZW50KTsKICAgICAgICBib3JkZXI6IDJweCBzb2xpZCB2YXIoLS1wYXBlci1zbGlkZXIta25vYi1zdGFydC1ib3JkZXItY29sb3IsIHZhcigtLXBhcGVyLWdyZXktNDAwKSk7CiAgICAgIH0KCiAgICAgIHBhcGVyLXJpcHBsZSB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLXNsaWRlci1rbm9iLWNvbG9yLCB2YXIoLS1nb29nbGUtYmx1ZS03MDApKTsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8ZGl2IGlkPSJzbGlkZXJDb250YWluZXIiIGNsYXNzJD0iW1tfZ2V0Q2xhc3NOYW1lcyhkaXNhYmxlZCwgcGluLCBzbmFwcywgaW1tZWRpYXRlVmFsdWUsIG1pbiwgZXhwYW5kLCBkcmFnZ2luZywgdHJhbnNpdGluZywgZWRpdGFibGUpXV0iPgogICAgICA8ZGl2IGNsYXNzPSJiYXItY29udGFpbmVyIj4KICAgICAgICA8cGFwZXItcHJvZ3Jlc3MgZGlzYWJsZWQkPSJbW2Rpc2FibGVkXV0iIGlkPSJzbGlkZXJCYXIiIGFyaWEtaGlkZGVuPSJ0cnVlIiBtaW49IltbbWluXV0iIG1heD0iW1ttYXhdXSIgc3RlcD0iW1tzdGVwXV0iIHZhbHVlPSJbW2ltbWVkaWF0ZVZhbHVlXV0iIHNlY29uZGFyeS1wcm9ncmVzcz0iW1tzZWNvbmRhcnlQcm9ncmVzc11dIiBvbi1kb3duPSJfYmFyZG93biIgb24tdXA9Il9yZXNldEtub2IiIG9uLXRyYWNrPSJfYmFydHJhY2siIG9uLXRhcD0iX2JhcmNsaWNrIj4KICAgICAgICA8L3BhcGVyLXByb2dyZXNzPgogICAgICA8L2Rpdj4KCiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tzbmFwc11dIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzbGlkZXItbWFya2VycyI+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW21hcmtlcnNdXSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InNsaWRlci1tYXJrZXIiPjwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KCiAgICAgIDxkaXYgaWQ9InNsaWRlcktub2IiIGNsYXNzPSJzbGlkZXIta25vYiIgb24tZG93bj0iX2tub2Jkb3duIiBvbi11cD0iX3Jlc2V0S25vYiIgb24tdHJhY2s9Il9vblRyYWNrIiBvbi10cmFuc2l0aW9uZW5kPSJfa25vYlRyYW5zaXRpb25FbmQiPgogICAgICAgICAgPGRpdiBjbGFzcz0ic2xpZGVyLWtub2ItaW5uZXIiIHZhbHVlJD0iW1tpbW1lZGlhdGVWYWx1ZV1dIj48L2Rpdj4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KCiAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbZWRpdGFibGVdXSI+CiAgICAgIDxwYXBlci1pbnB1dCBpZD0iaW5wdXQiIHR5cGU9Im51bWJlciIgc3RlcD0iW1tzdGVwXV0iIG1pbj0iW1ttaW5dXSIgbWF4PSJbW21heF1dIiBjbGFzcz0ic2xpZGVyLWlucHV0IiBkaXNhYmxlZCQ9IltbZGlzYWJsZWRdXSIgdmFsdWU9IltbaW1tZWRpYXRlVmFsdWVdXSIgb24tY2hhbmdlPSJfY2hhbmdlVmFsdWUiIG9uLWtleWRvd249Il9pbnB1dEtleURvd24iIG5vLWxhYmVsLWZsb2F0PgogICAgICA8L3BhcGVyLWlucHV0PgogICAgPC90ZW1wbGF0ZT4KICA8L3RlbXBsYXRlPgoKICA8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vcGFwZXItc2xpZGVyL3BhcGVyLXNsaWRlci5odG1sLmpzClBvbHltZXIoe2lzOiJwYXBlci1zbGlkZXIiLGJlaGF2aW9yczpbUG9seW1lci5Jcm9uQTExeUtleXNCZWhhdmlvcixQb2x5bWVyLklyb25Gb3JtRWxlbWVudEJlaGF2aW9yLFBvbHltZXIuUGFwZXJJbmt5Rm9jdXNCZWhhdmlvcixQb2x5bWVyLklyb25SYW5nZUJlaGF2aW9yXSxwcm9wZXJ0aWVzOntzbmFwczp7dHlwZTpCb29sZWFuLHZhbHVlOiExLG5vdGlmeTohMH0scGluOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEsbm90aWZ5OiEwfSxzZWNvbmRhcnlQcm9ncmVzczp7dHlwZTpOdW1iZXIsdmFsdWU6MCxub3RpZnk6ITAsb2JzZXJ2ZXI6Il9zZWNvbmRhcnlQcm9ncmVzc0NoYW5nZWQifSxlZGl0YWJsZTp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxpbW1lZGlhdGVWYWx1ZTp7dHlwZTpOdW1iZXIsdmFsdWU6MCxyZWFkT25seTohMCxub3RpZnk6ITB9LG1heE1hcmtlcnM6e3R5cGU6TnVtYmVyLHZhbHVlOjAsbm90aWZ5OiEwfSxleHBhbmQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxyZWFkT25seTohMH0sCmlnbm9yZUJhclRvdWNoOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGRyYWdnaW5nOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEscmVhZE9ubHk6ITAsbm90aWZ5OiEwfSx0cmFuc2l0aW5nOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEscmVhZE9ubHk6ITB9LG1hcmtlcnM6e3R5cGU6QXJyYXkscmVhZE9ubHk6ITAsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm5bXX19fSxvYnNlcnZlcnM6WyJfdXBkYXRlS25vYih2YWx1ZSwgbWluLCBtYXgsIHNuYXBzLCBzdGVwKSIsIl92YWx1ZUNoYW5nZWQodmFsdWUpIiwiX2ltbWVkaWF0ZVZhbHVlQ2hhbmdlZChpbW1lZGlhdGVWYWx1ZSkiLCJfdXBkYXRlTWFya2VycyhtYXhNYXJrZXJzLCBtaW4sIG1heCwgc25hcHMpIl0saG9zdEF0dHJpYnV0ZXM6e3JvbGU6InNsaWRlciIsdGFiaW5kZXg6MH0sa2V5QmluZGluZ3M6e2xlZnQ6Il9sZWZ0S2V5IixyaWdodDoiX3JpZ2h0S2V5IiwiZG93biBwYWdlZG93biBob21lIjoiX2RlY3JlbWVudEtleSIsInVwIHBhZ2V1cCBlbmQiOiJfaW5jcmVtZW50S2V5In0sCnJlYWR5OmZ1bmN0aW9uKCl7dGhpcy5pZ25vcmVCYXJUb3VjaCYmUG9seW1lci5HZXN0dXJlcy5zZXRUb3VjaEFjdGlvbih0aGlzLiQuc2xpZGVyQmFyLCJhdXRvIil9LGluY3JlbWVudDpmdW5jdGlvbigpe3RoaXMudmFsdWU9dGhpcy5fY2xhbXBWYWx1ZSh0aGlzLnZhbHVlK3RoaXMuc3RlcCl9LGRlY3JlbWVudDpmdW5jdGlvbigpe3RoaXMudmFsdWU9dGhpcy5fY2xhbXBWYWx1ZSh0aGlzLnZhbHVlLXRoaXMuc3RlcCl9LF91cGRhdGVLbm9iOmZ1bmN0aW9uKGEsYyxkKXt0aGlzLnNldEF0dHJpYnV0ZSgiYXJpYS12YWx1ZW1pbiIsYyk7dGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtdmFsdWVtYXgiLGQpO3RoaXMuc2V0QXR0cmlidXRlKCJhcmlhLXZhbHVlbm93IixhKTt0aGlzLl9wb3NpdGlvbktub2IoMTAwKnRoaXMuX2NhbGNSYXRpbyhhKSl9LF92YWx1ZUNoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLmZpcmUoInZhbHVlLWNoYW5nZSIse2NvbXBvc2VkOiEwfSl9LF9pbW1lZGlhdGVWYWx1ZUNoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLmRyYWdnaW5nPwp0aGlzLmZpcmUoImltbWVkaWF0ZS12YWx1ZS1jaGFuZ2UiLHtjb21wb3NlZDohMH0pOnRoaXMudmFsdWU9dGhpcy5pbW1lZGlhdGVWYWx1ZX0sX3NlY29uZGFyeVByb2dyZXNzQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMuc2Vjb25kYXJ5UHJvZ3Jlc3M9dGhpcy5fY2xhbXBWYWx1ZSh0aGlzLnNlY29uZGFyeVByb2dyZXNzKX0sX2V4cGFuZEtub2I6ZnVuY3Rpb24oKXt0aGlzLl9zZXRFeHBhbmQoITApfSxfcmVzZXRLbm9iOmZ1bmN0aW9uKCl7dGhpcy5jYW5jZWxEZWJvdW5jZXIoImV4cGFuZEtub2IiKTt0aGlzLl9zZXRFeHBhbmQoITEpfSxfcG9zaXRpb25Lbm9iOmZ1bmN0aW9uKGEpe3RoaXMuX3NldEltbWVkaWF0ZVZhbHVlKHRoaXMuX2NhbGNTdGVwKHRoaXMuX2NhbGNLbm9iUG9zaXRpb24oYSkpKTt0aGlzLl9zZXRSYXRpbygxMDAqdGhpcy5fY2FsY1JhdGlvKHRoaXMuaW1tZWRpYXRlVmFsdWUpKTt0aGlzLiQuc2xpZGVyS25vYi5zdHlsZS5sZWZ0PXRoaXMucmF0aW8rIiUiO3RoaXMuZHJhZ2dpbmcmJgoodGhpcy5fa25vYnN0YXJ0eD10aGlzLnJhdGlvKnRoaXMuX3cvMTAwLHRoaXMudHJhbnNsYXRlM2QoMCwwLDAsdGhpcy4kLnNsaWRlcktub2IpKX0sX2NhbGNLbm9iUG9zaXRpb246ZnVuY3Rpb24oYSl7cmV0dXJuKHRoaXMubWF4LXRoaXMubWluKSphLzEwMCt0aGlzLm1pbn0sX29uVHJhY2s6ZnVuY3Rpb24oYSl7YS5zdG9wUHJvcGFnYXRpb24oKTtzd2l0Y2goYS5kZXRhaWwuc3RhdGUpe2Nhc2UgInN0YXJ0Ijp0aGlzLl90cmFja1N0YXJ0KGEpO2JyZWFrO2Nhc2UgInRyYWNrIjp0aGlzLl90cmFja1goYSk7YnJlYWs7Y2FzZSAiZW5kIjp0aGlzLl90cmFja0VuZCgpfX0sX3RyYWNrU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9zZXRUcmFuc2l0aW5nKCExKTt0aGlzLl93PXRoaXMuJC5zbGlkZXJCYXIub2Zmc2V0V2lkdGg7dGhpcy5fa25vYnN0YXJ0eD10aGlzLl9zdGFydHg9dGhpcy5feD10aGlzLnJhdGlvKnRoaXMuX3cvMTAwO3RoaXMuX21pbng9LXRoaXMuX3N0YXJ0eDt0aGlzLl9tYXh4PQp0aGlzLl93LXRoaXMuX3N0YXJ0eDt0aGlzLiQuc2xpZGVyS25vYi5jbGFzc0xpc3QuYWRkKCJkcmFnZ2luZyIpO3RoaXMuX3NldERyYWdnaW5nKCEwKX0sX3RyYWNrWDpmdW5jdGlvbihhKXt0aGlzLmRyYWdnaW5nfHx0aGlzLl90cmFja1N0YXJ0KGEpO3RoaXMuX3g9dGhpcy5fc3RhcnR4K01hdGgubWluKHRoaXMuX21heHgsTWF0aC5tYXgodGhpcy5fbWlueCxhLmRldGFpbC5keCoodGhpcy5faXNSVEw/LTE6MSkpKTt0aGlzLl9zZXRJbW1lZGlhdGVWYWx1ZSh0aGlzLl9jYWxjU3RlcCh0aGlzLl9jYWxjS25vYlBvc2l0aW9uKHRoaXMuX3gvdGhpcy5fdyoxMDApKSk7dGhpcy50cmFuc2xhdGUzZCh0aGlzLl9jYWxjUmF0aW8odGhpcy5pbW1lZGlhdGVWYWx1ZSkqdGhpcy5fdy10aGlzLl9rbm9ic3RhcnR4KyJweCIsMCwwLHRoaXMuJC5zbGlkZXJLbm9iKX0sX3RyYWNrRW5kOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy4kLnNsaWRlcktub2Iuc3R5bGU7dGhpcy4kLnNsaWRlcktub2IuY2xhc3NMaXN0LnJlbW92ZSgiZHJhZ2dpbmciKTsKdGhpcy5fc2V0RHJhZ2dpbmcoITEpO3RoaXMuX3Jlc2V0S25vYigpO3RoaXMudmFsdWU9dGhpcy5pbW1lZGlhdGVWYWx1ZTthLnRyYW5zZm9ybT1hLndlYmtpdFRyYW5zZm9ybT0iIjt0aGlzLmZpcmUoImNoYW5nZSIse2NvbXBvc2VkOiEwfSl9LF9rbm9iZG93bjpmdW5jdGlvbihhKXt0aGlzLl9leHBhbmRLbm9iKCk7YS5wcmV2ZW50RGVmYXVsdCgpO3RoaXMuZm9jdXMoKX0sX2JhcnRyYWNrOmZ1bmN0aW9uKGEpe3RoaXMuX2FsbG93QmFyRXZlbnQoYSkmJnRoaXMuX29uVHJhY2soYSl9LF9iYXJjbGljazpmdW5jdGlvbihhKXt0aGlzLl93PXRoaXMuJC5zbGlkZXJCYXIub2Zmc2V0V2lkdGg7dmFyIGM9dGhpcy4kLnNsaWRlckJhci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtjPShhLmRldGFpbC54LWMubGVmdCkvdGhpcy5fdyoxMDA7dGhpcy5faXNSVEwmJihjPTEwMC1jKTt2YXIgZD10aGlzLnJhdGlvO3RoaXMuX3NldFRyYW5zaXRpbmcoITApO3RoaXMuX3Bvc2l0aW9uS25vYihjKTsKZD09PXRoaXMucmF0aW8mJnRoaXMuX3NldFRyYW5zaXRpbmcoITEpO3RoaXMuYXN5bmMoZnVuY3Rpb24oKXt0aGlzLmZpcmUoImNoYW5nZSIse2NvbXBvc2VkOiEwfSl9KTthLnByZXZlbnREZWZhdWx0KCk7dGhpcy5mb2N1cygpfSxfYmFyZG93bjpmdW5jdGlvbihhKXt0aGlzLl9hbGxvd0JhckV2ZW50KGEpJiYodGhpcy5kZWJvdW5jZSgiZXhwYW5kS25vYiIsdGhpcy5fZXhwYW5kS25vYiw2MCksdGhpcy5fYmFyY2xpY2soYSkpfSxfa25vYlRyYW5zaXRpb25FbmQ6ZnVuY3Rpb24oYSl7YS50YXJnZXQ9PT10aGlzLiQuc2xpZGVyS25vYiYmdGhpcy5fc2V0VHJhbnNpdGluZyghMSl9LF91cGRhdGVNYXJrZXJzOmZ1bmN0aW9uKGEsYyxkLGYpe2Z8fHRoaXMuX3NldE1hcmtlcnMoW10pO2M9TWF0aC5yb3VuZCgoZC1jKS90aGlzLnN0ZXApO2M+YSYmKGM9YSk7aWYoMD5jfHwhaXNGaW5pdGUoYykpYz0wO3RoaXMuX3NldE1hcmtlcnMoQXJyYXkoYykpfSxfbWVyZ2VDbGFzc2VzOmZ1bmN0aW9uKGEpe3JldHVybiBPYmplY3Qua2V5cyhhKS5maWx0ZXIoZnVuY3Rpb24oYyl7cmV0dXJuIGFbY119KS5qb2luKCIgIil9LApfZ2V0Q2xhc3NOYW1lczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tZXJnZUNsYXNzZXMoe2Rpc2FibGVkOnRoaXMuZGlzYWJsZWQscGluOnRoaXMucGluLHNuYXBzOnRoaXMuc25hcHMscmluZzp0aGlzLmltbWVkaWF0ZVZhbHVlPD10aGlzLm1pbixleHBhbmQ6dGhpcy5leHBhbmQsZHJhZ2dpbmc6dGhpcy5kcmFnZ2luZyx0cmFuc2l0aW5nOnRoaXMudHJhbnNpdGluZyxlZGl0YWJsZTp0aGlzLmVkaXRhYmxlfSl9LF9hbGxvd0JhckV2ZW50OmZ1bmN0aW9uKGEpe3JldHVybiF0aGlzLmlnbm9yZUJhclRvdWNofHxhLmRldGFpbC5zb3VyY2VFdmVudCBpbnN0YW5jZW9mIE1vdXNlRXZlbnR9LGdldCBfaXNSVEwoKXt2b2lkIDA9PT10aGlzLl9faXNSVEwmJih0aGlzLl9faXNSVEw9InJ0bCI9PT13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzKS5kaXJlY3Rpb24pO3JldHVybiB0aGlzLl9faXNSVEx9LF9sZWZ0S2V5OmZ1bmN0aW9uKGEpe3RoaXMuX2lzUlRMP3RoaXMuX2luY3JlbWVudEtleShhKToKdGhpcy5fZGVjcmVtZW50S2V5KGEpfSxfcmlnaHRLZXk6ZnVuY3Rpb24oYSl7dGhpcy5faXNSVEw/dGhpcy5fZGVjcmVtZW50S2V5KGEpOnRoaXMuX2luY3JlbWVudEtleShhKX0sX2luY3JlbWVudEtleTpmdW5jdGlvbihhKXt0aGlzLmRpc2FibGVkfHwoImVuZCI9PT1hLmRldGFpbC5rZXk/dGhpcy52YWx1ZT10aGlzLm1heDp0aGlzLmluY3JlbWVudCgpLHRoaXMuZmlyZSgiY2hhbmdlIiksYS5wcmV2ZW50RGVmYXVsdCgpKX0sX2RlY3JlbWVudEtleTpmdW5jdGlvbihhKXt0aGlzLmRpc2FibGVkfHwoImhvbWUiPT09YS5kZXRhaWwua2V5P3RoaXMudmFsdWU9dGhpcy5taW46dGhpcy5kZWNyZW1lbnQoKSx0aGlzLmZpcmUoImNoYW5nZSIpLGEucHJldmVudERlZmF1bHQoKSl9LF9jaGFuZ2VWYWx1ZTpmdW5jdGlvbihhKXt0aGlzLnZhbHVlPWEudGFyZ2V0LnZhbHVlO3RoaXMuZmlyZSgiY2hhbmdlIix7Y29tcG9zZWQ6ITB9KX0sX2lucHV0S2V5RG93bjpmdW5jdGlvbihhKXthLnN0b3BQcm9wYWdhdGlvbigpfSwKX2NyZWF0ZVJpcHBsZTpmdW5jdGlvbigpe3RoaXMuX3JpcHBsZUNvbnRhaW5lcj10aGlzLiQuc2xpZGVyS25vYjtyZXR1cm4gUG9seW1lci5QYXBlcklua3lGb2N1c0JlaGF2aW9ySW1wbC5fY3JlYXRlUmlwcGxlLmNhbGwodGhpcyl9LF9mb2N1c2VkQ2hhbmdlZDpmdW5jdGlvbihhKXthJiZ0aGlzLmVuc3VyZVJpcHBsZSgpO3RoaXMuaGFzUmlwcGxlKCkmJih0aGlzLl9yaXBwbGUuc3R5bGUuZGlzcGxheT1hPyIiOiJub25lIix0aGlzLl9yaXBwbGUuaG9sZERvd249YSl9fSk7Cjwvc2NyaXB0Pgo8L2RvbS1tb2R1bGU+CgoKCgoKPGRvbS1tb2R1bGUgaWQ9InRmLXNtb290aGluZy1pbnB1dCI+CiAgPHRlbXBsYXRlPgogICAgPGgzIGNsYXNzPSJ0aXRsZSI+U21vb3RoaW5nPC9oMz4KICAgIDxkaXYgY2xhc3M9InNtb290aGluZy1ibG9jayI+CiAgICAgIDxwYXBlci1zbGlkZXIgaWQ9InNsaWRlciIgaW1tZWRpYXRlLXZhbHVlPSJ7e19pbW1lZGlhdGVXZWlnaHROdW1iZXJGb3JQYXBlclNsaWRlcn19IiBtYXg9IltbbWF4XV0iIG1pbj0iW1ttaW5dXSIgcGluIHN0ZXA9Iltbc3RlcF1dIiB0eXBlPSJudW1iZXIiIHZhbHVlPSJ7e3dlaWdodH19Ij48L3BhcGVyLXNsaWRlcj4KICAgICAgPHBhcGVyLWlucHV0IGlkPSJpbnB1dCIgbGFiZWw9IndlaWdodCIgbm8tbGFiZWwtZmxvYXQgdmFsdWU9Int7X2lucHV0V2VpZ2h0U3RyaW5nRm9yUGFwZXJJbnB1dH19IiB0eXBlPSJudW1iZXIiIHN0ZXA9Iltbc3RlcF1dIiBtaW49IltbbWluXV0iIG1heD0iW1ttYXhdXSI+PC9wYXBlci1pbnB1dD4KICAgIDwvZGl2PgogICAgPHN0eWxlPgogICAgICAudGl0bGUgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1ncmV5LTgwMCk7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDVweDsKICAgICAgfQoKICAgICAgLnNtb290aGluZy1ibG9jayB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgfQoKICAgICAgcGFwZXItc2xpZGVyIHsKICAgICAgICAtLXBhcGVyLXNsaWRlci1hY3RpdmUtY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLWtub2ItY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLWtub2Itc3RhcnQtYm9yZGVyLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1rbm9iLXN0YXJ0LWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1tYXJrZXJzLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1waW4tY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLXBpbi1zdGFydC1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgZmxleC1ncm93OiAyOwogICAgICB9CgogICAgICBwYXBlci1pbnB1dCB7CiAgICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItZm9jdXMtY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWlucHV0OiB7CiAgICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgfQogICAgICAgIC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWxhYmVsOiB7CiAgICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgfQogICAgICAgIHdpZHRoOiA2MHB4OwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CiAgPHNjcmlwdD4vL35+V0VCUEFUSH5+L3RmLXNjYWxhci1kYXNoYm9hcmQvdGYtc21vb3RoaW5nLWlucHV0Lmh0bWwuanMKUG9seW1lcih7aXM6InRmLXNtb290aGluZy1pbnB1dCIscHJvcGVydGllczp7c3RlcDpOdW1iZXIsbWF4Ok51bWJlcixtaW46TnVtYmVyLHdlaWdodDp7dHlwZTpOdW1iZXIsdmFsdWU6LjYsbm90aWZ5OiEwfSxfaW1tZWRpYXRlV2VpZ2h0TnVtYmVyRm9yUGFwZXJTbGlkZXI6e3R5cGU6TnVtYmVyLG5vdGlmeTohMCxvYnNlcnZlcjoiX2ltbWVkaWF0ZVdlaWdodE51bWJlckZvclBhcGVyU2xpZGVyQ2hhbmdlZCJ9LF9pbnB1dFdlaWdodFN0cmluZ0ZvclBhcGVySW5wdXQ6e3R5cGU6U3RyaW5nLG5vdGlmeTohMCxvYnNlcnZlcjoiX2lucHV0V2VpZ2h0U3RyaW5nRm9yUGFwZXJJbnB1dENoYW5nZWQifX0sX3VwZGF0ZVdlaWdodDpfLmRlYm91bmNlKGZ1bmN0aW9uKGEpe3RoaXMud2VpZ2h0PWF9LDI1MCksX2ltbWVkaWF0ZVdlaWdodE51bWJlckZvclBhcGVyU2xpZGVyQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMuX2lucHV0V2VpZ2h0U3RyaW5nRm9yUGFwZXJJbnB1dD10aGlzLl9pbW1lZGlhdGVXZWlnaHROdW1iZXJGb3JQYXBlclNsaWRlci50b1N0cmluZygpOwp0aGlzLl91cGRhdGVXZWlnaHQuY2FsbCh0aGlzLHRoaXMuX2ltbWVkaWF0ZVdlaWdodE51bWJlckZvclBhcGVyU2xpZGVyKX0sX2lucHV0V2VpZ2h0U3RyaW5nRm9yUGFwZXJJbnB1dENoYW5nZWQ6ZnVuY3Rpb24oKXswPit0aGlzLl9pbnB1dFdlaWdodFN0cmluZ0ZvclBhcGVySW5wdXQ/dGhpcy5faW5wdXRXZWlnaHRTdHJpbmdGb3JQYXBlcklucHV0PSIwIjoxPCt0aGlzLl9pbnB1dFdlaWdodFN0cmluZ0ZvclBhcGVySW5wdXQmJih0aGlzLl9pbnB1dFdlaWdodFN0cmluZ0ZvclBhcGVySW5wdXQ9IjEiKTt2YXIgYT0rdGhpcy5faW5wdXRXZWlnaHRTdHJpbmdGb3JQYXBlcklucHV0O2lzTmFOKGEpfHx0aGlzLl91cGRhdGVXZWlnaHQuY2FsbCh0aGlzLGEpfX0pOwo8L3NjcmlwdD4KPC9kb20tbW9kdWxlPgoKCgo8ZG9tLW1vZHVsZSBpZD0idGYtc2NhbGFyLWRhc2hib2FyZCI+CiAgPHRlbXBsYXRlPgogICAgPHRmLWRhc2hib2FyZC1sYXlvdXQ+CiAgICAgIDxkaXYgY2xhc3M9InNpZGViYXIiIHNsb3Q9InNpZGViYXIiPgogICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJsaW5lLWl0ZW0iPgogICAgICAgICAgICA8cGFwZXItY2hlY2tib3ggaWQ9InNob3ctZG93bmxvYWQtbGlua3MiIGNoZWNrZWQ9Int7X3Nob3dEb3dubG9hZExpbmtzfX0iPlNob3cgZGF0YSBkb3dubG9hZCBsaW5rczwvcGFwZXItY2hlY2tib3g+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImxpbmUtaXRlbSI+CiAgICAgICAgICAgIDxwYXBlci1jaGVja2JveCBpZD0iaWdub3JlLXktb3V0bGllciIgY2hlY2tlZD0ie3tfaWdub3JlWU91dGxpZXJzfX0iPklnbm9yZSBvdXRsaWVycyBpbiBjaGFydCBzY2FsaW5nPC9wYXBlci1jaGVja2JveD4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBpZD0idG9vbHRpcC1zb3J0aW5nIj4KICAgICAgICAgICAgPGRpdj5Ub29sdGlwIHNvcnRpbmcgbWV0aG9kOjwvZGl2PgogICAgICAgICAgICA8cGFwZXItZHJvcGRvd24tbWVudSBuby1sYWJlbC1mbG9hdCBzZWxlY3RlZC1pdGVtLWxhYmVsPSJ7e190b29sdGlwU29ydGluZ01ldGhvZH19Ij4KICAgICAgICAgICAgICA8cGFwZXItbGlzdGJveCBjbGFzcz0iZHJvcGRvd24tY29udGVudCIgc2VsZWN0ZWQ9IjAiIHNsb3Q9ImRyb3Bkb3duLWNvbnRlbnQiPgogICAgICAgICAgICAgICAgPHBhcGVyLWl0ZW0+ZGVmYXVsdDwvcGFwZXItaXRlbT4KICAgICAgICAgICAgICAgIDxwYXBlci1pdGVtPmRlc2NlbmRpbmc8L3BhcGVyLWl0ZW0+CiAgICAgICAgICAgICAgICA8cGFwZXItaXRlbT5hc2NlbmRpbmc8L3BhcGVyLWl0ZW0+CiAgICAgICAgICAgICAgICA8cGFwZXItaXRlbT5uZWFyZXN0PC9wYXBlci1pdGVtPgogICAgICAgICAgICAgIDwvcGFwZXItbGlzdGJveD4KICAgICAgICAgICAgPC9wYXBlci1kcm9wZG93bi1tZW51PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIj4KICAgICAgICAgIDx0Zi1zbW9vdGhpbmctaW5wdXQgd2VpZ2h0PSJ7e19zbW9vdGhpbmdXZWlnaHR9fSIgc3RlcD0iMC4wMDEiIG1pbj0iMCIgbWF4PSIwLjk5OSI+PC90Zi1zbW9vdGhpbmctaW5wdXQ+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIj4KICAgICAgICAgIDx0Zi1vcHRpb24tc2VsZWN0b3IgaWQ9IngtdHlwZS1zZWxlY3RvciIgbmFtZT0iSG9yaXpvbnRhbCBBeGlzIiBzZWxlY3RlZC1pZD0ie3tfeFR5cGV9fSI+CiAgICAgICAgICAgIDxwYXBlci1idXR0b24gaWQ9InN0ZXAiPnN0ZXA8L3BhcGVyLWJ1dHRvbj48cGFwZXItYnV0dG9uIGlkPSJyZWxhdGl2ZSI+cmVsYXRpdmU8L3BhcGVyLWJ1dHRvbj48cGFwZXItYnV0dG9uIGlkPSJ3YWxsX3RpbWUiPndhbGw8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgIDwvdGYtb3B0aW9uLXNlbGVjdG9yPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiI+CiAgICAgICAgICA8dGYtcnVucy1zZWxlY3RvciBzZWxlY3RlZC1ydW5zPSJ7e19zZWxlY3RlZFJ1bnN9fSI+CiAgICAgICAgICA8L3RmLXJ1bnMtc2VsZWN0b3I+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjZW50ZXIiIHNsb3Q9ImNlbnRlciI+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJuby1kYXRhLXdhcm5pbmciPgogICAgICAgICAgICA8aDM+Tm8gc2NhbGFyIGRhdGEgd2FzIGZvdW5kLjwvaDM+CiAgICAgICAgICAgIDxwPlByb2JhYmxlIGNhdXNlczoKICAgICAgICAgICAgPHVsPgogICAgICAgICAgICAgIDxsaT5Zb3UgaGF2ZW7igJl0IHdyaXR0ZW4gYW55IHNjYWxhciBkYXRhIHRvIHlvdXIgZXZlbnQgZmlsZXMuPC9saT4KICAgICAgICAgICAgICA8bGk+VGVuc29yQm9hcmQgY2Fu4oCZdCBmaW5kIHlvdXIgZXZlbnQgZmlsZXMuPC9saT4KICAgICAgICAgICAgPC91bD4KCiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdeKAmXJlIG5ldyB0byB1c2luZyBUZW5zb3JCb2FyZCwgYW5kIHdhbnQgdG8gZmluZCBvdXQgaG93IHRvCiAgICAgICAgICAgICAgYWRkIGRhdGEgYW5kIHNldCB1cCB5b3VyIGV2ZW50IGZpbGVzLCBjaGVjayBvdXQgdGhlCiAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kIj5SRUFETUU8L2E+CiAgICAgICAgICAgICAgYW5kIHBlcmhhcHMgdGhlCiAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvZ2V0X3N0YXJ0ZWQvc3VtbWFyaWVzX2FuZF90ZW5zb3Jib2FyZCI+VGVuc29yQm9hcmQgdHV0b3JpYWw8L2E+LgogICAgICAgICAgICAKCiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdSB0aGluayBUZW5zb3JCb2FyZCBpcyBjb25maWd1cmVkIHByb3Blcmx5LCBwbGVhc2Ugc2VlCiAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kI215LXRlbnNvcmJvYXJkLWlzbnQtc2hvd2luZy1hbnktZGF0YS13aGF0cy13cm9uZyI+dGhlIHNlY3Rpb24gb2YgdGhlIFJFQURNRSBkZXZvdGVkIHRvIG1pc3NpbmcgZGF0YSBwcm9ibGVtczwvYT4KICAgICAgICAgICAgICBhbmQgY29uc2lkZXIgZmlsaW5nIGFuIGlzc3VlIG9uIEdpdEh1Yi4KICAgICAgICAgICAgCiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shX2RhdGFOb3RGb3VuZF1dIj4KICAgICAgICAgIDx0Zi10YWctZmlsdGVyZXIgdGFnLWZpbHRlcj0ie3tfdGFnRmlsdGVyfX0iPjwvdGYtdGFnLWZpbHRlcmVyPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tfY2F0ZWdvcmllc11dIiBhcz0iY2F0ZWdvcnkiPgogICAgICAgICAgICA8dGYtY2F0ZWdvcnktcGFnaW5hdGVkLXZpZXcgY2F0ZWdvcnk9IltbY2F0ZWdvcnldXSIgaW5pdGlhbC1vcGVuZWQ9IltbX3Nob3VsZE9wZW4oaW5kZXgpXV0iPgogICAgICAgICAgICAgIDx0ZW1wbGF0ZT4KICAgICAgICAgICAgICAgIDx0Zi1zY2FsYXItY2FyZCBhY3RpdmU9IltbYWN0aXZlXV0iIGRhdGEtdG8tbG9hZD0iW1tpdGVtLnNlcmllc11dIiBpZ25vcmUteS1vdXRsaWVycz0iW1tfaWdub3JlWU91dGxpZXJzXV0iIG11bHRpLWV4cGVyaW1lbnRzPSJbW19nZXRNdWx0aUV4cGVyaW1lbnRzKGRhdGFTZWxlY3Rpb24pXV0iIHJlcXVlc3QtbWFuYWdlcj0iW1tfcmVxdWVzdE1hbmFnZXJdXSIgc2hvdy1kb3dubG9hZC1saW5rcz0iW1tfc2hvd0Rvd25sb2FkTGlua3NdXSIgc21vb3RoaW5nLWVuYWJsZWQ9IltbX3Ntb290aGluZ0VuYWJsZWRdXSIgc21vb3RoaW5nLXdlaWdodD0iW1tfc21vb3RoaW5nV2VpZ2h0XV0iIHRhZy1tZXRhZGF0YT0iW1tfdGFnTWV0YWRhdGEoY2F0ZWdvcnksIF9ydW5Ub1RhZ0luZm8sIGl0ZW0pXV0iIHRhZz0iW1tpdGVtLnRhZ11dIiB0b29sdGlwLXNvcnRpbmctbWV0aG9kPSJbW190b29sdGlwU29ydGluZ01ldGhvZF1dIiB4LXR5cGU9IltbX3hUeXBlXV0iPjwvdGYtc2NhbGFyLWNhcmQ+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPC90Zi1jYXRlZ29yeS1wYWdpbmF0ZWQtdmlldz4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPC9kaXY+CiAgICA8L3RmLWRhc2hib2FyZC1sYXlvdXQ+CgogICAgPHN0eWxlIGluY2x1ZGU9ImRhc2hib2FyZC1zdHlsZSI+PC9zdHlsZT4KICAgIDxzdHlsZT4KICAgICAgI3Rvb2x0aXAtc29ydGluZyB7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBtYXJnaW4tdG9wOiAxNXB4OwogICAgICB9CiAgICAgICN0b29sdGlwLXNvcnRpbmcgcGFwZXItZHJvcGRvd24tbWVudSB7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDEwcHg7CiAgICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItZm9jdXMtY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIHdpZHRoOiAxMDVweDsKICAgICAgfQogICAgICAubGluZS1pdGVtIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwYWRkaW5nLXRvcDogNXB4OwogICAgICB9CiAgICAgIC5uby1kYXRhLXdhcm5pbmcgewogICAgICAgIG1heC13aWR0aDogNTQwcHg7CiAgICAgICAgbWFyZ2luOiA4MHB4IGF1dG8gMCBhdXRvOwogICAgICB9CiAgICAgIC5jZW50ZXIgewogICAgICAgIG92ZXJmbG93LXg6IGhpZGRlbjsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgoKICA8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdGYtc2NhbGFyLWRhc2hib2FyZC90Zi1zY2FsYXItZGFzaGJvYXJkLmh0bWwuanMKUG9seW1lcih7aXM6InRmLXNjYWxhci1kYXNoYm9hcmQiLHByb3BlcnRpZXM6e19zaG93RG93bmxvYWRMaW5rczp7dHlwZTpCb29sZWFuLG5vdGlmeTohMCx2YWx1ZTpWbC5nZXRCb29sZWFuSW5pdGlhbGl6ZXIoIl9zaG93RG93bmxvYWRMaW5rcyIse2RlZmF1bHRWYWx1ZTohMSx1c2VMb2NhbFN0b3JhZ2U6ITB9KSxvYnNlcnZlcjoiX3Nob3dEb3dubG9hZExpbmtzT2JzZXJ2ZXIifSxfc21vb3RoaW5nV2VpZ2h0Ont0eXBlOk51bWJlcixub3RpZnk6ITAsdmFsdWU6VmwuZ2V0TnVtYmVySW5pdGlhbGl6ZXIoIl9zbW9vdGhpbmdXZWlnaHQiLHtkZWZhdWx0VmFsdWU6LjZ9KSxvYnNlcnZlcjoiX3Ntb290aGluZ1dlaWdodE9ic2VydmVyIn0sX3Ntb290aGluZ0VuYWJsZWQ6e3R5cGU6Qm9vbGVhbixjb21wdXRlZDoiX2NvbXB1dGVTbW9vdGhpbmdFbmFibGVkKF9zbW9vdGhpbmdXZWlnaHQpIn0sX2lnbm9yZVlPdXRsaWVyczp7dHlwZTpCb29sZWFuLHZhbHVlOlZsLmdldEJvb2xlYW5Jbml0aWFsaXplcigiX2lnbm9yZVlPdXRsaWVycyIsCntkZWZhdWx0VmFsdWU6ITAsdXNlTG9jYWxTdG9yYWdlOiEwfSksb2JzZXJ2ZXI6Il9pZ25vcmVZT3V0bGllcnNPYnNlcnZlciJ9LF94VHlwZTp7dHlwZTpTdHJpbmcsdmFsdWU6Ym0uWFR5cGUuU1RFUH0sX3NlbGVjdGVkUnVuczp7dHlwZTpBcnJheSx2YWx1ZTooKT0+W119LF9ydW5Ub1RhZ0luZm86T2JqZWN0LF9kYXRhTm90Rm91bmQ6Qm9vbGVhbixfdGFnRmlsdGVyOnt0eXBlOlN0cmluZyx2YWx1ZToiIn0sX2NhdGVnb3JpZXNEb21SZWFkeTpCb29sZWFuLF9jYXRlZ29yaWVzOnt0eXBlOkFycmF5LHZhbHVlOigpPT5bXX0sX3JlcXVlc3RNYW5hZ2VyOnt0eXBlOk9iamVjdCx2YWx1ZTooKT0+bmV3IFBrLlJlcXVlc3RNYW5hZ2VyKDUwKX19LGJlaGF2aW9yczpbV2wuQXJyYXlVcGRhdGVIZWxwZXJdLG9ic2VydmVyczpbIl91cGRhdGVDYXRlZ29yaWVzKF9ydW5Ub1RhZ0luZm8sIF9zZWxlY3RlZFJ1bnMsIF90YWdGaWx0ZXIsIF9jYXRlZ29yaWVzRG9tUmVhZHkpIl0sX3Nob3dEb3dubG9hZExpbmtzT2JzZXJ2ZXI6VmwuZ2V0Qm9vbGVhbk9ic2VydmVyKCJfc2hvd0Rvd25sb2FkTGlua3MiLAp7ZGVmYXVsdFZhbHVlOiExLHVzZUxvY2FsU3RvcmFnZTohMH0pLF9zbW9vdGhpbmdXZWlnaHRPYnNlcnZlcjpWbC5nZXROdW1iZXJPYnNlcnZlcigiX3Ntb290aGluZ1dlaWdodCIse2RlZmF1bHRWYWx1ZTouNn0pLF9pZ25vcmVZT3V0bGllcnNPYnNlcnZlcjpWbC5nZXRCb29sZWFuT2JzZXJ2ZXIoIl9pZ25vcmVZT3V0bGllcnMiLHtkZWZhdWx0VmFsdWU6ITAsdXNlTG9jYWxTdG9yYWdlOiEwfSksX2NvbXB1dGVTbW9vdGhpbmdFbmFibGVkKGEpe3JldHVybiAwPGF9LF9nZXRDYXRlZ29yeUtleShhKXtyZXR1cm4gYS5tZXRhZGF0YS50eXBlPT1Ray5DYXRlZ29yeVR5cGUuU0VBUkNIX1JFU1VMVFM/IiI6YS5uYW1lfSxfc2hvdWxkT3BlbihhKXtyZXR1cm4gMj49YX0scmVhZHkoKXt0aGlzLnJlbG9hZCgpfSxyZWxvYWQoKXt0aGlzLl9mZXRjaFRhZ3MoKS50aGVuKCgpPT57dGhpcy5fcmVsb2FkQ2hhcnRzKCl9KX0sX2ZldGNoVGFncygpe2NvbnN0IGE9UGsuZ2V0Um91dGVyKCkucGx1Z2luUm91dGUoInNjYWxhcnMiLAoiL3RhZ3MiLG5ldyBVUkxTZWFyY2hQYXJhbXMoe2V4cGVyaW1lbnQ6UGsuZ2V0RXhwZXJpbWVudElkKCl9KSk7cmV0dXJuIHRoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3QoYSkudGhlbihjPT57aWYoIV8uaXNFcXVhbChjLHRoaXMuX3J1blRvVGFnSW5mbykpe3ZhciBkPV8ubWFwVmFsdWVzKGMsZj0+T2JqZWN0LmtleXMoZikpO2Q9UGsuZ2V0VGFncyhkKTt0aGlzLnNldCgiX2RhdGFOb3RGb3VuZCIsMD09PWQubGVuZ3RoKTt0aGlzLnNldCgiX3J1blRvVGFnSW5mbyIsYyk7dGhpcy5hc3luYygoKT0+e3RoaXMuc2V0KCJfY2F0ZWdvcmllc0RvbVJlYWR5IiwhMCl9KX19KX0sX3JlbG9hZENoYXJ0cygpe3RoaXMucm9vdC5xdWVyeVNlbGVjdG9yQWxsKCJ0Zi1zY2FsYXItY2FyZCIpLmZvckVhY2goYT0+e2EucmVsb2FkKCl9KX0sX3VwZGF0ZUNhdGVnb3JpZXMoYSxjLGQpe2E9Xy5tYXBWYWx1ZXMoYSxnPT5PYmplY3Qua2V5cyhnKSk7Yz1Ray5jYXRlZ29yaXplVGFncyhhLGMsZCk7CmNvbnN0IGY9UGsuZ2V0RXhwZXJpbWVudElkKCk7Yy5mb3JFYWNoKGc9PntnLml0ZW1zPWcuaXRlbXMubWFwKGw9Pih7dGFnOmwudGFnLHNlcmllczpsLnJ1bnMubWFwKGs9Pih7cnVuOmssdGFnOmwudGFnLGV4cGVyaW1lbnQ6Zn0pKX0pKX0pO3RoaXMudXBkYXRlQXJyYXlQcm9wKCJfY2F0ZWdvcmllcyIsYyx0aGlzLl9nZXRDYXRlZ29yeUtleSl9LF90YWdNZXRhZGF0YShhLGMsZCl7Y29uc3QgZj1kLnRhZyxnPXt9O2Quc2VyaWVzLmZvckVhY2goKHtydW46bX0pPT57Z1ttXT1jW21dW2ZdfSk7ZD1mLnJlcGxhY2UoL1wvc2NhbGFyX3N1bW1hcnkkLywiIik7bGV0IHtkZXNjcmlwdGlvbjpsLGRpc3BsYXlOYW1lOmt9PWFtLmFnZ3JlZ2F0ZVRhZ0luZm8oZyxkKTthLm1ldGFkYXRhLnR5cGU9PVFrLkNhdGVnb3J5VHlwZS5QUkVGSVhfR1JPVVAmJmsuc3RhcnRzV2l0aChhLm5hbWUrIi8iKSYmKGs9ay5zbGljZShhLm5hbWUubGVuZ3RoKzEpKTtyZXR1cm57ZGVzY3JpcHRpb246bCxkaXNwbGF5TmFtZTprfX19KTsKPC9zY3JpcHQ+CjwvZG9tLW1vZHVsZT4KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgo8ZG9tLW1vZHVsZSBpZD0idGYtY3VzdG9tLXNjYWxhci1jYXJkLXN0eWxlIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBtYXJnaW46IDVweCAxMHB4OwogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICB3aWR0aDogMzMwcHg7CiAgICAgICAgdmVydGljYWwtYWxpZ246IHRleHQtdG9wOwogICAgICB9CgogICAgICA6aG9zdChbX2V4cGFuZGVkXSkgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICA6aG9zdChbX2V4cGFuZGVkXSkgI3RmLWxpbmUtY2hhcnQtZGF0YS1sb2FkZXItY29udGFpbmVyIHsKICAgICAgICBoZWlnaHQ6IDQwMHB4OwogICAgICB9CgogICAgICBoMSB7CiAgICAgICAgZm9udC1zaXplOiAxOXB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CiAgICAgIH0KCiAgICAgICN0Zi1saW5lLWNoYXJ0LWRhdGEtbG9hZGVyLWNvbnRhaW5lciB7CiAgICAgICAgaGVpZ2h0OiAyMDBweDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgI2J1dHRvbnMgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgfQoKICAgICAgcGFwZXItaWNvbi1idXR0b24gewogICAgICAgIGNvbG9yOiAjMjE5NmYzOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDEwMCU7CiAgICAgICAgd2lkdGg6IDMycHg7CiAgICAgICAgaGVpZ2h0OiAzMnB4OwogICAgICAgIHBhZGRpbmc6IDRweDsKICAgICAgfQoKICAgICAgcGFwZXItaWNvbi1idXR0b25bc2VsZWN0ZWRdIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS10Yi11aS1saWdodC1hY2NlbnQpOwogICAgICB9CgogICAgICAuZG93bmxvYWQtbGlua3MgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgaGVpZ2h0OiAzMnB4OwogICAgICB9CgogICAgICAuZG93bmxvYWQtbGlua3MgYSB7CiAgICAgICAgZm9udC1zaXplOiAxMHB4OwogICAgICAgIGFsaWduLXNlbGY6IGNlbnRlcjsKICAgICAgICBtYXJnaW46IDJweDsKICAgICAgfQoKICAgICAgLmRvd25sb2FkLWxpbmtzIHBhcGVyLWRyb3Bkb3duLW1lbnUgewogICAgICAgIHdpZHRoOiAxMDBweDsKICAgICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1sYWJlbDogewogICAgICAgICAgZm9udC1zaXplOiAxMHB4OwogICAgICAgIH0KICAgICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnB1dDogewogICAgICAgICAgZm9udC1zaXplOiAxMHB4OwogICAgICAgIH0KICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+Cgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdGYtY3VzdG9tLXNjYWxhci1kYXNoYm9hcmQvdGYtY3VzdG9tLXNjYWxhci1oZWxwZXJzLmpzCnZhciBnbTsKKGZ1bmN0aW9uKGEpe2NsYXNzIGN7Y29uc3RydWN0b3IoZixnLGwsayxtKXt0aGlzLnJ1bj1mO3RoaXMudGFnPWc7dGhpcy5uYW1lPWw7dGhpcy5zY2FsYXJEYXRhPWs7dGhpcy5zeW1ib2w9bX1nZXROYW1lKCl7cmV0dXJuIHRoaXMubmFtZX1zZXREYXRhKGYpe3RoaXMuc2NhbGFyRGF0YT1mfWdldERhdGEoKXtyZXR1cm4gdGhpcy5zY2FsYXJEYXRhfWdldFJ1bigpe3JldHVybiB0aGlzLnJ1bn1nZXRUYWcoKXtyZXR1cm4gdGhpcy50YWd9Z2V0U3ltYm9sKCl7cmV0dXJuIHRoaXMuc3ltYm9sfX1hLkRhdGFTZXJpZXM9YzthLmdlbmVyYXRlRGF0YVNlcmllc05hbWU9ZnVuY3Rpb24oZixnKXtyZXR1cm5gJHtnfSAoJHtmfSlgfTtjbGFzcyBke2NvbnN0cnVjdG9yKGYpe3RoaXMucnVuQmFzZWRDb2xvclNjYWxlPWZ9c2NhbGUoZil7cmV0dXJuIHRoaXMucnVuQmFzZWRDb2xvclNjYWxlLnNjYWxlKHRoaXMucGFyc2VSdW5OYW1lKGYpKX1wYXJzZVJ1bk5hbWUoZil7cmV0dXJuKGY9Zi5tYXRjaCgvXCgoLiopXCkkLykpPwpmWzFdOiIifX1hLkRhdGFTZXJpZXNDb2xvclNjYWxlPWR9KShnbXx8KGdtPXt9KSk7Cjwvc2NyaXB0PgoKCgo8ZG9tLW1vZHVsZSBpZD0idGYtY3VzdG9tLXNjYWxhci1tYXJnaW4tY2hhcnQtY2FyZCI+CiAgPHRlbXBsYXRlPgogICAgPHRmLWNhcmQtaGVhZGluZyBkaXNwbGF5LW5hbWU9IltbX3RpdGxlRGlzcGxheVN0cmluZ11dIj48L3RmLWNhcmQtaGVhZGluZz4KICAgIDxkaXYgaWQ9InRmLWxpbmUtY2hhcnQtZGF0YS1sb2FkZXItY29udGFpbmVyIj4KICAgICAgPHRmLWxpbmUtY2hhcnQtZGF0YS1sb2FkZXIgaWQ9ImxvYWRlciIgYWN0aXZlPSJbW2FjdGl2ZV1dIiBjb2xvci1zY2FsZT0iW1tfY29sb3JTY2FsZV1dIiBkYXRhLXNlcmllcz0iW1tfc2VyaWVzTmFtZXNdXSIgZ2V0LWRhdGEtbG9hZC11cmw9IltbX2RhdGFVcmxdXSIgZmlsbC1hcmVhPSJbW19maWxsQXJlYV1dIiBpZ25vcmUteS1vdXRsaWVycz0iW1tpZ25vcmVZT3V0bGllcnNdXSIgbG9hZC1rZXk9IltbX3RhZ0ZpbHRlcl1dIiBkYXRhLXRvLWxvYWQ9IltbcnVuc11dIiBsb2ctc2NhbGUtYWN0aXZlPSJbW19sb2dTY2FsZUFjdGl2ZV1dIiBsb2FkLWRhdGEtY2FsbGJhY2s9IltbX2NyZWF0ZVByb2Nlc3NEYXRhRnVuY3Rpb24obWFyZ2luQ2hhcnRTZXJpZXMpXV0iIHJlcXVlc3QtbWFuYWdlcj0iW1tyZXF1ZXN0TWFuYWdlcl1dIiBzeW1ib2wtZnVuY3Rpb249IltbX2NyZWF0ZVN5bWJvbEZ1bmN0aW9uKCldXSIgdG9vbHRpcC1jb2x1bW5zPSJbW190b29sdGlwQ29sdW1uc11dIiB0b29sdGlwLXNvcnRpbmctbWV0aG9kPSJbW3Rvb2x0aXBTb3J0aW5nTWV0aG9kXV0iIHgtdHlwZT0iW1t4VHlwZV1dIj4KICAgICAgPC90Zi1saW5lLWNoYXJ0LWRhdGEtbG9hZGVyPgogICAgPC9kaXY+CiAgICA8ZGl2IGlkPSJidXR0b25zIj4KICAgICAgPHBhcGVyLWljb24tYnV0dG9uIHNlbGVjdGVkJD0iW1tfZXhwYW5kZWRdXSIgaWNvbj0iZnVsbHNjcmVlbiIgb24tdGFwPSJfdG9nZ2xlRXhwYW5kZWQiPjwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgIDxwYXBlci1pY29uLWJ1dHRvbiBzZWxlY3RlZCQ9IltbX2xvZ1NjYWxlQWN0aXZlXV0iIGljb249ImxpbmUtd2VpZ2h0IiBvbi10YXA9Il90b2dnbGVMb2dTY2FsZSIgdGl0bGU9IlRvZ2dsZSB5LWF4aXMgbG9nIHNjYWxlIj48L3BhcGVyLWljb24tYnV0dG9uPgogICAgICA8cGFwZXItaWNvbi1idXR0b24gaWNvbj0ic2V0dGluZ3Mtb3ZlcnNjYW4iIG9uLXRhcD0iX3Jlc2V0RG9tYWluIiB0aXRsZT0iRml0IGRvbWFpbiB0byBkYXRhIj48L3BhcGVyLWljb24tYnV0dG9uPgogICAgICA8c3BhbiBzdHlsZT0iZmxleC1ncm93OiAxIj48L3NwYW4+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tzaG93RG93bmxvYWRMaW5rc11dIj4KICAgICAgICA8ZGl2IGNsYXNzPSJkb3dubG9hZC1saW5rcyI+CiAgICAgICAgICA8cGFwZXItZHJvcGRvd24tbWVudSBuby1sYWJlbC1mbG9hdD0idHJ1ZSIgbGFiZWw9InNlcmllcyB0byBkb3dubG9hZCIgc2VsZWN0ZWQtaXRlbS1sYWJlbD0ie3tfZGF0YVNlcmllc05hbWVUb0Rvd25sb2FkfX0iPgogICAgICAgICAgICA8cGFwZXItbGlzdGJveCBjbGFzcz0iZHJvcGRvd24tY29udGVudCIgc2xvdD0iZHJvcGRvd24tY29udGVudCI+CiAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tfc2VyaWVzTmFtZXNdXSIgYXM9ImRhdGFTZXJpZXNOYW1lIj4KICAgICAgICAgICAgICAgIDxwYXBlci1pdGVtIG5vLWxhYmVsLWZsb2F0PSJ0cnVlIj5bW2RhdGFTZXJpZXNOYW1lXV08L3BhcGVyLWl0ZW0+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPC9wYXBlci1saXN0Ym94PgogICAgICAgICAgPC9wYXBlci1kcm9wZG93bi1tZW51PgogICAgICAgICAgPGEgZG93bmxvYWQ9IltbX2RhdGFTZXJpZXNOYW1lVG9Eb3dubG9hZF1dLmNzdiIgaHJlZj0iW1tfY3N2VXJsKF9uYW1lVG9EYXRhU2VyaWVzLCBfZGF0YVNlcmllc05hbWVUb0Rvd25sb2FkKV1dIj5DU1Y8L2E+CiAgICAgICAgICA8YSBkb3dubG9hZD0iW1tfZGF0YVNlcmllc05hbWVUb0Rvd25sb2FkXV0uanNvbiIgaHJlZj0iW1tfanNvblVybChfbmFtZVRvRGF0YVNlcmllcywgX2RhdGFTZXJpZXNOYW1lVG9Eb3dubG9hZCldXSI+SlNPTjwvYT4KICAgICAgICA8L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgIDwvZGl2PgoKICAgIAogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19taXNzaW5nVGFncy5sZW5ndGhdXSI+CiAgICAgIDxkaXYgY2xhc3M9ImNvbGxhcHNpYmxlLWxpc3QtdGl0bGUiPgogICAgICAgIDxwYXBlci1pY29uLWJ1dHRvbiBpY29uPSJbW19nZXRUb2dnbGVDb2xsYXBzaWJsZUljb24oX21pc3NpbmdUYWdzQ29sbGFwc2libGVPcGVuZWQpXV0iIG9uLWNsaWNrPSJfdG9nZ2xlTWlzc2luZ1RhZ3NDb2xsYXBzaWJsZU9wZW4iIGNsYXNzPSJ0b2dnbGUtY29sbGFwc2libGUtYnV0dG9uIj4KICAgICAgICA8L3BhcGVyLWljb24tYnV0dG9uPgogICAgICAgIDxzcGFuIGNsYXNzPSJjb2xsYXBzaWJsZS10aXRsZS10ZXh0Ij4KICAgICAgICAgIDxpcm9uLWljb24gaWNvbj0iaWNvbnM6ZXJyb3IiPjwvaXJvbi1pY29uPiBNaXNzaW5nIFRhZ3MKICAgICAgICA8L3NwYW4+CiAgICAgIDwvZGl2PgogICAgICA8aXJvbi1jb2xsYXBzZSBvcGVuZWQ9IltbX21pc3NpbmdUYWdzQ29sbGFwc2libGVPcGVuZWRdXSI+CiAgICAgICAgPGRpdiBjbGFzcz0iZXJyb3ItY29udGVudCI+CiAgICAgICAgICA8aXJvbi1pY29uIGNsYXNzPSJlcnJvci1pY29uIiBpY29uPSJpY29uczplcnJvciI+PC9pcm9uLWljb24+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19taXNzaW5nVGFnc11dIiBhcz0ibWlzc2luZ0VudHJ5Ij4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibWlzc2luZy10YWdzLWZvci1ydW4tY29udGFpbmVyIj4KICAgICAgICAgICAgICBSdW4gIltbbWlzc2luZ0VudHJ5LnJ1bl1dIiBsYWNrcyBkYXRhIGZvciB0YWdzCiAgICAgICAgICAgICAgPHVsPgogICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1ttaXNzaW5nRW50cnkudGFnc11dIiBhcz0idGFnIj4KICAgICAgICAgICAgICAgICAgPGxpPltbdGFnXV08L2xpPgogICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICA8L3VsPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvaXJvbi1jb2xsYXBzZT4KICAgIDwvdGVtcGxhdGU+CgogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW190YWdGaWx0ZXJJbnZhbGlkXV0iPgogICAgICA8ZGl2IGNsYXNzPSJlcnJvci1jb250ZW50Ij4KICAgICAgICA8aXJvbi1pY29uIGNsYXNzPSJlcnJvci1pY29uIiBpY29uPSJpY29uczplcnJvciI+PC9pcm9uLWljb24+CiAgICAgICAgVGhpcyByZWd1bGFyIGV4cHJlc2lvbiBpcyBpbnZhbGlkOjxicj4KICAgICAgICA8c3BhbiBjbGFzcz0iaW52YWxpZC1yZWdleCI+W1tfdGFnRmlsdGVyXV08L3NwYW4+CiAgICAgIDwvZGl2PgogICAgPC90ZW1wbGF0ZT4KCiAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX3N0ZXBzTWlzbWF0Y2hdXSI+CiAgICAgIDxkaXYgY2xhc3M9ImVycm9yLWNvbnRlbnQiPgogICAgICAgIDxpcm9uLWljb24gY2xhc3M9ImVycm9yLWljb24iIGljb249Imljb25zOmVycm9yIj48L2lyb24taWNvbj4KICAgICAgICBUaGUgc3RlcHMgZm9yIHZhbHVlLCBsb3dlciwgYW5kIHVwcGVyIHRhZ3MgZG8gbm90IG1hdGNoOgogICAgICAgIDx1bD4KICAgICAgICAgIDxsaT4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRhZy1uYW1lIj5bW19zdGVwc01pc21hdGNoLnNlcmllc09iamVjdC52YWx1ZV1dPC9zcGFuPjoKICAgICAgICAgICAgW1tfc2VwYXJhdGVXaXRoQ29tbWFzKF9zdGVwc01pc21hdGNoLnZhbHVlU3RlcHMpXV0KICAgICAgICAgIDwvbGk+CiAgICAgICAgICA8bGk+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0YWctbmFtZSI+W1tfc3RlcHNNaXNtYXRjaC5zZXJpZXNPYmplY3QubG93ZXJdXTwvc3Bhbj46CiAgICAgICAgICAgIFtbX3NlcGFyYXRlV2l0aENvbW1hcyhfc3RlcHNNaXNtYXRjaC5sb3dlclN0ZXBzKV1dCiAgICAgICAgICA8L2xpPgogICAgICAgICAgPGxpPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0idGFnLW5hbWUiPltbX3N0ZXBzTWlzbWF0Y2guc2VyaWVzT2JqZWN0LnVwcGVyXV08L3NwYW4+OgogICAgICAgICAgICBbW19zZXBhcmF0ZVdpdGhDb21tYXMoX3N0ZXBzTWlzbWF0Y2gudXBwZXJTdGVwcyldXQogICAgICAgICAgPC9saT4KICAgICAgICA8L3VsPgogICAgICA8L2Rpdj4KICAgIDwvdGVtcGxhdGU+CgogICAgPGRpdiBpZD0ibWF0Y2hlcy1jb250YWluZXIiPgogICAgICA8ZGl2IGNsYXNzPSJjb2xsYXBzaWJsZS1saXN0LXRpdGxlIj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX3Nlcmllc05hbWVzLmxlbmd0aF1dIj4KICAgICAgICAgIDxwYXBlci1pY29uLWJ1dHRvbiBpY29uPSJbW19nZXRUb2dnbGVDb2xsYXBzaWJsZUljb24oX21hdGNoZXNMaXN0T3BlbmVkKV1dIiBvbi1jbGljaz0iX3RvZ2dsZU1hdGNoZXNPcGVuIiBjbGFzcz0idG9nZ2xlLW1hdGNoZXMtYnV0dG9uIj4KICAgICAgICAgIDwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgICAgPC90ZW1wbGF0ZT4KCiAgICAgICAgPHNwYW4gY2xhc3M9ImNvbGxhcHNpYmxlLXRpdGxlLXRleHQiPgogICAgICAgICAgTWF0Y2hlcyAoW1tfc2VyaWVzTmFtZXMubGVuZ3RoXV0pCiAgICAgICAgPC9zcGFuPgogICAgICA8L2Rpdj4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19zZXJpZXNOYW1lcy5sZW5ndGhdXSI+CiAgICAgICAgPGlyb24tY29sbGFwc2Ugb3BlbmVkPSJbW19tYXRjaGVzTGlzdE9wZW5lZF1dIj4KICAgICAgICAgIDxkaXYgaWQ9Im1hdGNoZXMtbGlzdCI+CiAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX3Nlcmllc05hbWVzXV0iIGFzPSJzZXJpZXNOYW1lIj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtYXRjaC1saXN0LWVudHJ5IiBzdHlsZT0iY29sb3I6IFtbX2RldGVybWluZUNvbG9yKF9jb2xvclNjYWxlLCBzZXJpZXNOYW1lKV1dOyI+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibWF0Y2gtZW50cnktc3ltYm9sIj4KICAgICAgICAgICAgICAgICAgW1tfZGV0ZXJtaW5lU3ltYm9sKF9uYW1lVG9EYXRhU2VyaWVzLCBzZXJpZXNOYW1lKV1dCiAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICBbW3Nlcmllc05hbWVdXQogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9pcm9uLWNvbGxhcHNlPgogICAgICA8L3RlbXBsYXRlPgogICAgPC9kaXY+CgogICAgPHN0eWxlIGluY2x1ZGU9InRmLWN1c3RvbS1zY2FsYXItY2FyZC1zdHlsZSI+PC9zdHlsZT4KICAgIDxzdHlsZT4KICAgICAgLmVycm9yLWNvbnRlbnQgewogICAgICAgIGJhY2tncm91bmQ6ICNmMDA7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNXB4OwogICAgICAgIGNvbG9yOiAjZmZmOwogICAgICAgIG1hcmdpbjogMTBweCAwIDAgMDsKICAgICAgICBwYWRkaW5nOiAxMHB4OwogICAgICB9CgogICAgICAuZXJyb3ItaWNvbiB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgZmlsbDogI2ZmZjsKICAgICAgICBtYXJnaW46IDAgYXV0byA1cHggYXV0bzsKICAgICAgfQoKICAgICAgLmludmFsaWQtcmVnZXggewogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICB9CgogICAgICAuZXJyb3ItY29udGVudCB1bCB7CiAgICAgICAgbWFyZ2luOiAxcHggMCAwIDA7CiAgICAgICAgcGFkZGluZzogMCAwIDAgMTlweDsKICAgICAgfQoKICAgICAgLnRhZy1uYW1lIHsKICAgICAgICBmb250LXdlaWdodDogYm9sZDsKICAgICAgfQoKICAgICAgLmNvbGxhcHNpYmxlLWxpc3QtdGl0bGUgewogICAgICAgIG1hcmdpbjogMTBweCAwIDVweCAwOwogICAgICB9CgogICAgICAuY29sbGFwc2libGUtdGl0bGUtdGV4dCB7CiAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKICAgICAgfQoKICAgICAgI21hdGNoZXMtbGlzdCB7CiAgICAgICAgbWF4LWhlaWdodDogMjAwcHg7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgfQoKICAgICAgLm1hdGNoLWxpc3QtZW50cnkgewogICAgICAgIG1hcmdpbjogMCAwIDVweCAwOwogICAgICB9CgogICAgICAubWF0Y2gtZW50cnktc3ltYm9sIHsKICAgICAgICBmb250LWZhbWlseTogYXJpYWwsIHNhbnMtc2VyaWY7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIHdpZHRoOiAxMHB4OwogICAgICB9CgogICAgICAubWlzc2luZy10YWdzLWZvci1ydW4tY29udGFpbmVyIHsKICAgICAgICBtYXJnaW46IDhweCAwIDAgMDsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgogIDxzY3JpcHQ+Ly9+fldFQlBBVEh+fi90Zi1jdXN0b20tc2NhbGFyLWRhc2hib2FyZC90Zi1jdXN0b20tc2NhbGFyLW1hcmdpbi1jaGFydC1jYXJkLmh0bWwuanMKUG9seW1lcih7aXM6InRmLWN1c3RvbS1zY2FsYXItbWFyZ2luLWNoYXJ0LWNhcmQiLHByb3BlcnRpZXM6e3J1bnM6QXJyYXkseFR5cGU6U3RyaW5nLGFjdGl2ZTp7dHlwZTpCb29sZWFuLHZhbHVlOiEwLHJlYWRPbmx5OiEwfSx0aXRsZTpTdHJpbmcsbWFyZ2luQ2hhcnRTZXJpZXM6QXJyYXksaWdub3JlWU91dGxpZXJzOkJvb2xlYW4scmVxdWVzdE1hbmFnZXI6T2JqZWN0LHNob3dEb3dubG9hZExpbmtzOkJvb2xlYW4sdGFnTWV0YWRhdGE6T2JqZWN0LHRvb2x0aXBTb3J0aW5nTWV0aG9kOlN0cmluZyxfY29sb3JTY2FsZTp7dHlwZTpPYmplY3QsdmFsdWU6bmV3IGdtLkRhdGFTZXJpZXNDb2xvclNjYWxlKHtzY2FsZTpabC5ydW5zQ29sb3JTY2FsZX0pLHJlYWRPbmx5OiEwfSxfdGFnRmlsdGVyOnt0eXBlOlN0cmluZyxjb21wdXRlZDoiX2NvbXB1dGVUYWdGaWx0ZXIobWFyZ2luQ2hhcnRTZXJpZXMpIn0sX3RhZ0ZpbHRlckludmFsaWQ6Qm9vbGVhbixfbmFtZVRvRGF0YVNlcmllczp7dHlwZTpPYmplY3QsCnZhbHVlOigpPT4oe30pfSxfc2VyaWVzTmFtZXM6e3R5cGU6T2JqZWN0LGNvbXB1dGVkOiJfY29tcHV0ZVNlcmllc05hbWVzKF9uYW1lVG9EYXRhU2VyaWVzLCBydW5zKSJ9LF9leHBhbmRlZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH0sX2xvZ1NjYWxlQWN0aXZlOkJvb2xlYW4sX2RhdGFVcmw6e3R5cGU6RnVuY3Rpb24sdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gYT0+e2NvbnN0IGM9dGhpcy5fdGFnRmlsdGVyO3JldHVybiBQay5hZGRQYXJhbXMoUGsuZ2V0Um91dGVyKCkucGx1Z2luUm91dGUoImN1c3RvbV9zY2FsYXJzIiwiL3NjYWxhcnMiKSx7dGFnOmMscnVuOmF9KX19fSxfcnVuVG9OZXh0QXZhaWxhYmxlU3ltYm9sSW5kZXg6e3R5cGU6T2JqZWN0LHZhbHVlOnt9fSxfbWF0Y2hlc0xpc3RPcGVuZWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sX3RpdGxlRGlzcGxheVN0cmluZzp7dHlwZTpTdHJpbmcsY29tcHV0ZWQ6Il9jb21wdXRlVGl0bGVEaXNwbGF5U3RyaW5nKHRpdGxlKSJ9LApfZmlsbEFyZWE6e3R5cGU6T2JqZWN0LHJlYWRPbmx5OiEwLHZhbHVlOntsb3dlckFjY2Vzc29yOmE9PmEubG93ZXIsaGlnaGVyQWNjZXNzb3I6YT0+YS51cHBlcn19LF90b29sdGlwQ29sdW1uczp7dHlwZTpBcnJheSx2YWx1ZTpmdW5jdGlvbigpe2NvbnN0IGE9Ym0ubXVsdGlzY2FsZUZvcm1hdHRlcihibS5ZX1RPT0xUSVBfRk9STUFUVEVSX1BSRUNJU0lPTiksYz1kPT5pc05hTihkKT8iTmFOIjphKGQpO3JldHVyblt7dGl0bGU6Ik5hbWUiLGV2YWx1YXRlOmQ9PmQuZGF0YXNldC5tZXRhZGF0YSgpLm5hbWV9LHt0aXRsZToiVmFsdWUiLGV2YWx1YXRlOmQ9PmMoZC5kYXR1bS5zY2FsYXIpfSx7dGl0bGU6Ikxvd2VyIE1hcmdpbiIsZXZhbHVhdGU6ZD0+YyhkLmRhdHVtLmxvd2VyKX0se3RpdGxlOiJVcHBlciBNYXJnaW4iLGV2YWx1YXRlOmQ9PmMoZC5kYXR1bS51cHBlcil9LHt0aXRsZToiU3RlcCIsZXZhbHVhdGU6ZD0+Ym0uc3RlcEZvcm1hdHRlcihkLmRhdHVtLnN0ZXApfSx7dGl0bGU6IlRpbWUiLApldmFsdWF0ZTpkPT5ibS50aW1lRm9ybWF0dGVyKGQuZGF0dW0ud2FsbF90aW1lKX0se3RpdGxlOiJSZWxhdGl2ZSIsZXZhbHVhdGU6ZD0+Ym0ucmVsYXRpdmVGb3JtYXR0ZXIoYm0ucmVsYXRpdmVBY2Nlc3NvcihkLmRhdHVtLC0xLGQuZGF0YXNldCkpfV19fSxfbWlzc2luZ1RhZ3M6e3R5cGU6QXJyYXksdmFsdWU6W119LF9taXNzaW5nVGFnc0NvbGxhcHNpYmxlT3BlbmVkOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LF9zdGVwc01pc21hdGNoOk9iamVjdH0sb2JzZXJ2ZXJzOlsiX3VwZGF0ZUNoYXJ0KF9uYW1lVG9EYXRhU2VyaWVzKSIsIl9yZWZyZXNoRGF0YVNlcmllcyhfdGFnRmlsdGVyKSJdLHJlbG9hZCgpe3RoaXMuJC5sb2FkZXIucmVsb2FkKCl9LHJlZHJhdygpe3RoaXMuJC5sb2FkZXIucmVkcmF3KCl9LF90b2dnbGVFeHBhbmRlZCgpe3RoaXMuc2V0KCJfZXhwYW5kZWQiLCF0aGlzLl9leHBhbmRlZCk7dGhpcy5yZWRyYXcoKX0sX3RvZ2dsZUxvZ1NjYWxlKCl7dGhpcy5zZXQoIl9sb2dTY2FsZUFjdGl2ZSIsCiF0aGlzLl9sb2dTY2FsZUFjdGl2ZSl9LF9yZXNldERvbWFpbigpe2NvbnN0IGE9dGhpcy4kLmxvYWRlcjthJiZhLnJlc2V0RG9tYWluKCl9LF9jc3ZVcmwoYSxjKXtpZighYylyZXR1cm4iIjthPXRoaXMuX2Rvd25sb2FkRGF0YVVybChhLGMpO3JldHVybiBQay5hZGRQYXJhbXMoYSx7Zm9ybWF0OiJjc3YifSl9LF9qc29uVXJsKGEsYyl7aWYoIWMpcmV0dXJuIiI7YT10aGlzLl9kb3dubG9hZERhdGFVcmwoYSxjKTtyZXR1cm4gUGsuYWRkUGFyYW1zKGEse2Zvcm1hdDoianNvbiJ9KX0sX2Rvd25sb2FkRGF0YVVybChhLGMpe2E9YVtjXTthPXt0YWc6YS5nZXRUYWcoKSxydW46YS5nZXRSdW4oKX07cmV0dXJuIFBrLmFkZFBhcmFtcyhQay5nZXRSb3V0ZXIoKS5wbHVnaW5Sb3V0ZSgiY3VzdG9tX3NjYWxhcnMiLCIvZG93bmxvYWRfZGF0YSIpLGEpfSxfY3JlYXRlUHJvY2Vzc0RhdGFGdW5jdGlvbihhKXtyZXR1cm4oYyxkLGYpPT57aWYoZi5yZWdleF92YWxpZCl7dmFyIGc9Xy5jbG9uZSh0aGlzLl9uYW1lVG9EYXRhU2VyaWVzKSwKbD1bXTtfLmZvckVhY2goYSxrPT57dmFyIG09ITEscD1mLnRhZ190b19ldmVudHNbay52YWx1ZV07Y29uc3QgcT1mLnRhZ190b19ldmVudHNbay5sb3dlcl0scj1mLnRhZ190b19ldmVudHNbay51cHBlcl07Xy5pc1VuZGVmaW5lZChwKSYmKGwucHVzaChrLnZhbHVlKSxtPSEwKTtfLmlzVW5kZWZpbmVkKHEpJiYobC5wdXNoKGsubG93ZXIpLG09ITApO18uaXNVbmRlZmluZWQocikmJihsLnB1c2goay51cHBlciksbT0hMCk7aWYoIW0pe3ZhciB0PXk9PnlbMV07aWYobT10aGlzLl9maW5kU3RlcE1pc21hdGNoKGsscC5tYXAodCkscS5tYXAodCksci5tYXAodCkpKXRoaXMuc2V0KCJfc3RlcHNNaXNtYXRjaCIsbSk7ZWxzZXt2YXIgdj15PT55WzJdO209cC5tYXAoKHkseCk9Pih7d2FsbF90aW1lOm5ldyBEYXRlKDFFMyp5WzBdKSxzdGVwOnQoeSksc2NhbGFyOnYoeSksbG93ZXI6dihxW3hdKSx1cHBlcjp2KHJbeF0pfSkpO3A9Z20uZ2VuZXJhdGVEYXRhU2VyaWVzTmFtZShkLGsudmFsdWUpOwp2YXIgQT1nW3BdO0E/QS5zZXREYXRhKG0pOihrPXRoaXMuX2NyZWF0ZU5ld0RhdGFTZXJpZXMoZCxrLnZhbHVlLHAsbSksZ1twXT1rKX19fSk7dGhpcy5zZXQoIl9uYW1lVG9EYXRhU2VyaWVzIixnKTtjPV8uZmluZEluZGV4KHRoaXMuX21pc3NpbmdUYWdzLGs9PmsucnVuPT09ZCk7aWYobC5sZW5ndGgmJjMhPWwubGVuZ3RoKXtjb25zdCBrPXtydW46ZCx0YWdzOmx9OzA8PWM/dGhpcy5zcGxpY2UoIl9taXNzaW5nVGFncyIsYywxLGspOnRoaXMucHVzaCgiX21pc3NpbmdUYWdzIixrKX1lbHNlIDA8PWMmJnRoaXMuc3BsaWNlKCJfbWlzc2luZ1RhZ3MiLGMsMSl9ZWxzZSB0aGlzLnNldCgiX3RhZ0ZpbHRlckludmFsaWQiLCEwKX19LF9maW5kU3RlcE1pc21hdGNoKGEsYyxkLGYpe3JldHVybiBfLmlzRXF1YWwoZCxjKSYmXy5pc0VxdWFsKGYsYyk/bnVsbDp7c2VyaWVzT2JqZWN0OmEsdmFsdWVTdGVwczpjLGxvd2VyU3RlcHM6ZCx1cHBlclN0ZXBzOmZ9fSxfY3JlYXRlTmV3RGF0YVNlcmllcyhhLApjLGQsZil7dGhpcy5fcnVuVG9OZXh0QXZhaWxhYmxlU3ltYm9sSW5kZXhbYV18PTA7Yz1uZXcgZ20uRGF0YVNlcmllcyhhLGMsZCxmLGJtLlNZTUJPTFNfTElTVFt0aGlzLl9ydW5Ub05leHRBdmFpbGFibGVTeW1ib2xJbmRleFthXV0pO3RoaXMuX3J1blRvTmV4dEF2YWlsYWJsZVN5bWJvbEluZGV4W2FdPSh0aGlzLl9ydW5Ub05leHRBdmFpbGFibGVTeW1ib2xJbmRleFthXSsxKSVibS5TWU1CT0xTX0xJU1QubGVuZ3RoO3JldHVybiBjfSxfdXBkYXRlQ2hhcnQoYSl7Xy5mb3JPd24oYSxjPT57dGhpcy4kLmxvYWRlci5zZXRTZXJpZXNEYXRhKGMuZ2V0TmFtZSgpLGMuZ2V0RGF0YSgpKX0pfSxfY29tcHV0ZVNlcmllc05hbWVzKCl7Y29uc3QgYT1uZXcgU2V0KHRoaXMucnVucyk7cmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMuX25hbWVUb0RhdGFTZXJpZXMpLmZpbHRlcigoWyxjXSk9PmEuaGFzKGMucnVuKSkubWFwKChbY10pPT5jKX0sX2RldGVybWluZUNvbG9yKGEsYyl7cmV0dXJuIGEuc2NhbGUoYyl9LApfcmVmcmVzaERhdGFTZXJpZXMoKXt0aGlzLnNldCgiX25hbWVUb0RhdGFTZXJpZXMiLHt9KX0sX2NyZWF0ZVN5bWJvbEZ1bmN0aW9uKCl7cmV0dXJuIGE9PnRoaXMuX25hbWVUb0RhdGFTZXJpZXNbYV0uZ2V0U3ltYm9sKCkubWV0aG9kKCl9LF9kZXRlcm1pbmVTeW1ib2woYSxjKXtyZXR1cm4gYVtjXS5nZXRTeW1ib2woKS5jaGFyYWN0ZXJ9LF9jb21wdXRlVGFnRmlsdGVyKGEpe3JldHVybiBfLmZsYXR0ZW4oYS5tYXAoYz0+W2MudmFsdWUsYy5sb3dlcixjLnVwcGVyXSkpLm1hcChjPT4iKCIrdGhpcy5fZXNjYXBlUmVnZXhDaGFyYWN0ZXJzKGMpKyIpIikuam9pbigifCIpfSxfZXNjYXBlUmVnZXhDaGFyYWN0ZXJzKGEpe3JldHVybiBhLnJlcGxhY2UoL1suKis/XiR7fSgpfFtcXVxcXS9nLCJcXCRceDI2Iil9LF9nZXRUb2dnbGVDb2xsYXBzaWJsZUljb24oYSl7cmV0dXJuIGE/ImV4cGFuZC1sZXNzIjoiZXhwYW5kLW1vcmUifSxfdG9nZ2xlTWF0Y2hlc09wZW4oKXt0aGlzLnNldCgiX21hdGNoZXNMaXN0T3BlbmVkIiwKIXRoaXMuX21hdGNoZXNMaXN0T3BlbmVkKX0sX2NvbXB1dGVUaXRsZURpc3BsYXlTdHJpbmcoYSl7cmV0dXJuIGF8fCJ1bnRpdGxlZCJ9LF9zZXBhcmF0ZVdpdGhDb21tYXMoYSl7cmV0dXJuIGEuam9pbigiLCAiKX0sX3RvZ2dsZU1pc3NpbmdUYWdzQ29sbGFwc2libGVPcGVuKCl7dGhpcy5zZXQoIl9taXNzaW5nVGFnc0NvbGxhcHNpYmxlT3BlbmVkIiwhdGhpcy5fbWlzc2luZ1RhZ3NDb2xsYXBzaWJsZU9wZW5lZCl9fSk7Cjwvc2NyaXB0Pgo8L2RvbS1tb2R1bGU+CgoKCgoKCgoKCgoKCgoKCgoKCjxkb20tbW9kdWxlIGlkPSJ0Zi1jdXN0b20tc2NhbGFyLW11bHRpLWxpbmUtY2hhcnQtY2FyZCI+CiAgPHRlbXBsYXRlPgogICAgPHRmLWNhcmQtaGVhZGluZyBkaXNwbGF5LW5hbWU9IltbX3RpdGxlRGlzcGxheVN0cmluZ11dIj48L3RmLWNhcmQtaGVhZGluZz4KICAgIDxkaXYgaWQ9InRmLWxpbmUtY2hhcnQtZGF0YS1sb2FkZXItY29udGFpbmVyIj4KICAgICAgPHRmLWxpbmUtY2hhcnQtZGF0YS1sb2FkZXIgaWQ9ImxvYWRlciIgYWN0aXZlPSJbW2FjdGl2ZV1dIiBjb2xvci1zY2FsZT0iW1tfY29sb3JTY2FsZV1dIiBkYXRhLXNlcmllcz0iW1tfc2VyaWVzTmFtZXNdXSIgZ2V0LWRhdGEtbG9hZC11cmw9IltbX2RhdGFVcmxdXSIgaWdub3JlLXktb3V0bGllcnM9IltbaWdub3JlWU91dGxpZXJzXV0iIGxvYWQta2V5PSJbW190YWdGaWx0ZXJdXSIgZGF0YS10by1sb2FkPSJbW3J1bnNdXSIgbG9nLXNjYWxlLWFjdGl2ZT0iW1tfbG9nU2NhbGVBY3RpdmVdXSIgbG9hZC1kYXRhLWNhbGxiYWNrPSJbW19jcmVhdGVQcm9jZXNzRGF0YUZ1bmN0aW9uKCldXSIgcmVxdWVzdC1tYW5hZ2VyPSJbW3JlcXVlc3RNYW5hZ2VyXV0iIHNtb290aGluZy1lbmFibGVkPSJbW3Ntb290aGluZ0VuYWJsZWRdXSIgc21vb3RoaW5nLXdlaWdodD0iW1tzbW9vdGhpbmdXZWlnaHRdXSIgc3ltYm9sLWZ1bmN0aW9uPSJbW19jcmVhdGVTeW1ib2xGdW5jdGlvbigpXV0iIHRvb2x0aXAtc29ydGluZy1tZXRob2Q9IltbdG9vbHRpcFNvcnRpbmdNZXRob2RdXSIgeC10eXBlPSJbW3hUeXBlXV0iPgogICAgICA8L3RmLWxpbmUtY2hhcnQtZGF0YS1sb2FkZXI+CiAgICA8L2Rpdj4KICAgIDxkaXYgaWQ9ImJ1dHRvbnMiPgogICAgICA8cGFwZXItaWNvbi1idXR0b24gc2VsZWN0ZWQkPSJbW19leHBhbmRlZF1dIiBpY29uPSJmdWxsc2NyZWVuIiBvbi10YXA9Il90b2dnbGVFeHBhbmRlZCI+PC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgPHBhcGVyLWljb24tYnV0dG9uIHNlbGVjdGVkJD0iW1tfbG9nU2NhbGVBY3RpdmVdXSIgaWNvbj0ibGluZS13ZWlnaHQiIG9uLXRhcD0iX3RvZ2dsZUxvZ1NjYWxlIiB0aXRsZT0iVG9nZ2xlIHktYXhpcyBsb2cgc2NhbGUiPjwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgIDxwYXBlci1pY29uLWJ1dHRvbiBpY29uPSJzZXR0aW5ncy1vdmVyc2NhbiIgb24tdGFwPSJfcmVzZXREb21haW4iIHRpdGxlPSJGaXQgZG9tYWluIHRvIGRhdGEiPjwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgIDxzcGFuIHN0eWxlPSJmbGV4LWdyb3c6IDEiPjwvc3Bhbj4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW3Nob3dEb3dubG9hZExpbmtzXV0iPgogICAgICAgIDxkaXYgY2xhc3M9ImRvd25sb2FkLWxpbmtzIj4KICAgICAgICAgIDxwYXBlci1kcm9wZG93bi1tZW51IG5vLWxhYmVsLWZsb2F0PSJ0cnVlIiBsYWJlbD0ic2VyaWVzIHRvIGRvd25sb2FkIiBzZWxlY3RlZC1pdGVtLWxhYmVsPSJ7e19kYXRhU2VyaWVzTmFtZVRvRG93bmxvYWR9fSI+CiAgICAgICAgICAgIDxwYXBlci1saXN0Ym94IGNsYXNzPSJkcm9wZG93bi1jb250ZW50IiBzbG90PSJkcm9wZG93bi1jb250ZW50Ij4KICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19zZXJpZXNOYW1lc11dIiBhcz0iZGF0YVNlcmllc05hbWUiPgogICAgICAgICAgICAgICAgPHBhcGVyLWl0ZW0gbm8tbGFiZWwtZmxvYXQ9InRydWUiPltbZGF0YVNlcmllc05hbWVdXTwvcGFwZXItaXRlbT4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8L3BhcGVyLWxpc3Rib3g+CiAgICAgICAgICA8L3BhcGVyLWRyb3Bkb3duLW1lbnU+CiAgICAgICAgICA8YSBkb3dubG9hZD0iW1tfZGF0YVNlcmllc05hbWVUb0Rvd25sb2FkXV0uY3N2IiBocmVmPSJbW19jc3ZVcmwoX25hbWVUb0RhdGFTZXJpZXMsIF9kYXRhU2VyaWVzTmFtZVRvRG93bmxvYWQpXV0iPkNTVjwvYT4KICAgICAgICAgIDxhIGRvd25sb2FkPSJbW19kYXRhU2VyaWVzTmFtZVRvRG93bmxvYWRdXS5qc29uIiBocmVmPSJbW19qc29uVXJsKF9uYW1lVG9EYXRhU2VyaWVzLCBfZGF0YVNlcmllc05hbWVUb0Rvd25sb2FkKV1dIj5KU09OPC9hPgogICAgICAgIDwvZGl2PgogICAgICA8L3RlbXBsYXRlPgogICAgPC9kaXY+CiAgICA8ZGl2IGlkPSJtYXRjaGVzLWNvbnRhaW5lciI+CiAgICAgIDxkaXYgaWQ9Im1hdGNoZXMtbGlzdC10aXRsZSI+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19zZXJpZXNOYW1lcy5sZW5ndGhdXSI+CiAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24gaWNvbj0iW1tfZ2V0VG9nZ2xlTWF0Y2hlc0ljb24oX21hdGNoZXNMaXN0T3BlbmVkKV1dIiBvbi1jbGljaz0iX3RvZ2dsZU1hdGNoZXNPcGVuIiBjbGFzcz0idG9nZ2xlLW1hdGNoZXMtYnV0dG9uIj4KICAgICAgICAgIDwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgICAgPC90ZW1wbGF0ZT4KCiAgICAgICAgPHNwYW4gY2xhc3M9Im1hdGNoZXMtdGV4dCI+CiAgICAgICAgICBNYXRjaGVzIChbW19zZXJpZXNOYW1lcy5sZW5ndGhdXSkKICAgICAgICA8L3NwYW4+CiAgICAgIDwvZGl2PgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX3Nlcmllc05hbWVzLmxlbmd0aF1dIj4KICAgICAgICA8aXJvbi1jb2xsYXBzZSBvcGVuZWQ9IltbX21hdGNoZXNMaXN0T3BlbmVkXV0iPgogICAgICAgICAgPGRpdiBpZD0ibWF0Y2hlcy1saXN0Ij4KICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tfc2VyaWVzTmFtZXNdXSIgYXM9InNlcmllc05hbWUiPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1hdGNoLWxpc3QtZW50cnkiIHN0eWxlPSJjb2xvcjogW1tfZGV0ZXJtaW5lQ29sb3IoX2NvbG9yU2NhbGUsIHNlcmllc05hbWUpXV07Ij4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJtYXRjaC1lbnRyeS1zeW1ib2wiPgogICAgICAgICAgICAgICAgICBbW19kZXRlcm1pbmVTeW1ib2woX25hbWVUb0RhdGFTZXJpZXMsIHNlcmllc05hbWUpXV0KICAgICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgICAgIFtbc2VyaWVzTmFtZV1dCiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2lyb24tY29sbGFwc2U+CiAgICAgIDwvdGVtcGxhdGU+CiAgICA8L2Rpdj4KCiAgICA8c3R5bGUgaW5jbHVkZT0idGYtY3VzdG9tLXNjYWxhci1jYXJkLXN0eWxlIj48L3N0eWxlPgogICAgPHN0eWxlPgogICAgICAjbWF0Y2hlcy1saXN0LXRpdGxlIHsKICAgICAgICBtYXJnaW46IDEwcHggMCA1cHggMDsKICAgICAgfQoKICAgICAgI21hdGNoZXMtbGlzdCB7CiAgICAgICAgbWF4LWhlaWdodDogMjAwcHg7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgfQoKICAgICAgLm1hdGNoLWxpc3QtZW50cnkgewogICAgICAgIG1hcmdpbjogMCAwIDVweCAwOwogICAgICB9CgogICAgICAubWF0Y2gtZW50cnktc3ltYm9sIHsKICAgICAgICBmb250LWZhbWlseTogYXJpYWwsIHNhbnMtc2VyaWY7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIHdpZHRoOiAxMHB4OwogICAgICB9CgogICAgICAubWF0Y2hlcy10ZXh0IHsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CiAgPHNjcmlwdD4vL35+V0VCUEFUSH5+L3RmLWN1c3RvbS1zY2FsYXItZGFzaGJvYXJkL3RmLWN1c3RvbS1zY2FsYXItbXVsdGktbGluZS1jaGFydC1jYXJkLmh0bWwuanMKUG9seW1lcih7aXM6InRmLWN1c3RvbS1zY2FsYXItbXVsdGktbGluZS1jaGFydC1jYXJkIixwcm9wZXJ0aWVzOntydW5zOkFycmF5LHhUeXBlOlN0cmluZyxhY3RpdmU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMCxyZWFkT25seTohMH0sdGl0bGU6U3RyaW5nLHRhZ1JlZ2V4ZXM6QXJyYXksaWdub3JlWU91dGxpZXJzOkJvb2xlYW4scmVxdWVzdE1hbmFnZXI6T2JqZWN0LHNob3dEb3dubG9hZExpbmtzOkJvb2xlYW4sc21vb3RoaW5nRW5hYmxlZDpCb29sZWFuLHNtb290aGluZ1dlaWdodDpOdW1iZXIsdGFnTWV0YWRhdGE6T2JqZWN0LHRvb2x0aXBTb3J0aW5nTWV0aG9kOlN0cmluZyxfY29sb3JTY2FsZTp7dHlwZTpPYmplY3QsdmFsdWU6bmV3IGdtLkRhdGFTZXJpZXNDb2xvclNjYWxlKHtzY2FsZTpabC5ydW5zQ29sb3JTY2FsZX0pLHJlYWRPbmx5OiEwfSxfdGFnRmlsdGVyOnt0eXBlOlN0cmluZyxjb21wdXRlZDoiX2NvbXB1dGVUYWdGaWx0ZXIodGFnUmVnZXhlcykifSxfbmFtZVRvRGF0YVNlcmllczp7dHlwZTpPYmplY3QsCnZhbHVlOigpPT4oe30pfSxfc2VyaWVzTmFtZXM6e3R5cGU6T2JqZWN0LGNvbXB1dGVkOiJfY29tcHV0ZVNlcmllc05hbWVzKF9uYW1lVG9EYXRhU2VyaWVzLCBydW5zKSJ9LF9leHBhbmRlZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH0sX2xvZ1NjYWxlQWN0aXZlOkJvb2xlYW4sX2RhdGFVcmw6e3R5cGU6RnVuY3Rpb24sdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gYT0+e2NvbnN0IGM9dGhpcy5fdGFnRmlsdGVyO3JldHVybiBQay5hZGRQYXJhbXMoUGsuZ2V0Um91dGVyKCkucGx1Z2luUm91dGUoImN1c3RvbV9zY2FsYXJzIiwiL3NjYWxhcnMiKSx7dGFnOmMscnVuOmF9KX19fSxfcnVuVG9OZXh0QXZhaWxhYmxlU3ltYm9sSW5kZXg6e3R5cGU6T2JqZWN0LHZhbHVlOnt9fSxfbWF0Y2hlc0xpc3RPcGVuZWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sX3RpdGxlRGlzcGxheVN0cmluZzp7dHlwZTpTdHJpbmcsY29tcHV0ZWQ6Il9jb21wdXRlVGl0bGVEaXNwbGF5U3RyaW5nKHRpdGxlKSJ9fSwKb2JzZXJ2ZXJzOlsiX3VwZGF0ZUNoYXJ0KF9uYW1lVG9EYXRhU2VyaWVzKSIsIl9yZWZyZXNoRGF0YVNlcmllcyhfdGFnRmlsdGVyKSJdLHJlbG9hZCgpe3RoaXMuJC5sb2FkZXIucmVsb2FkKCl9LHJlZHJhdygpe3RoaXMuJC5sb2FkZXIucmVkcmF3KCl9LF90b2dnbGVFeHBhbmRlZCgpe3RoaXMuc2V0KCJfZXhwYW5kZWQiLCF0aGlzLl9leHBhbmRlZCk7dGhpcy5yZWRyYXcoKX0sX3RvZ2dsZUxvZ1NjYWxlKCl7dGhpcy5zZXQoIl9sb2dTY2FsZUFjdGl2ZSIsIXRoaXMuX2xvZ1NjYWxlQWN0aXZlKX0sX3Jlc2V0RG9tYWluKCl7Y29uc3QgYT10aGlzLiQubG9hZGVyO2EmJmEucmVzZXREb21haW4oKX0sX2NzdlVybChhLGMpe2lmKCFjKXJldHVybiIiO2E9dGhpcy5fZG93bmxvYWREYXRhVXJsKGEsYyk7cmV0dXJuIFBrLmFkZFBhcmFtcyhhLHtmb3JtYXQ6ImNzdiJ9KX0sX2pzb25VcmwoYSxjKXtpZighYylyZXR1cm4iIjthPXRoaXMuX2Rvd25sb2FkRGF0YVVybChhLGMpO3JldHVybiBQay5hZGRQYXJhbXMoYSwKe2Zvcm1hdDoianNvbiJ9KX0sX2Rvd25sb2FkRGF0YVVybChhLGMpe2E9YVtjXTthPXt0YWc6YS5nZXRUYWcoKSxydW46YS5nZXRSdW4oKX07cmV0dXJuIFBrLmFkZFBhcmFtcyhQay5nZXRSb3V0ZXIoKS5wbHVnaW5Sb3V0ZSgiY3VzdG9tX3NjYWxhcnMiLCIvZG93bmxvYWRfZGF0YSIpLGEpfSxfY3JlYXRlUHJvY2Vzc0RhdGFGdW5jdGlvbigpe3JldHVybihhLGMsZCk9PntpZihkLnJlZ2V4X3ZhbGlkKXtjb25zdCBmPV8uY2xvbmUodGhpcy5fbmFtZVRvRGF0YVNlcmllcyk7Xy5mb3JPd24oZC50YWdfdG9fZXZlbnRzLChnLGwpPT57Y29uc3Qgaz1nLm1hcChwPT4oe3dhbGxfdGltZTpuZXcgRGF0ZSgxRTMqcFswXSksc3RlcDpwWzFdLHNjYWxhcjpwWzJdfSkpO2c9Z20uZ2VuZXJhdGVEYXRhU2VyaWVzTmFtZShjLGwpO2NvbnN0IG09ZltnXTttP20uc2V0RGF0YShrKTooXy5pc1VuZGVmaW5lZCh0aGlzLl9ydW5Ub05leHRBdmFpbGFibGVTeW1ib2xJbmRleFtjXSkmJih0aGlzLl9ydW5Ub05leHRBdmFpbGFibGVTeW1ib2xJbmRleFtjXT0KMCksbD1uZXcgZ20uRGF0YVNlcmllcyhjLGwsZyxrLGJtLlNZTUJPTFNfTElTVFt0aGlzLl9ydW5Ub05leHRBdmFpbGFibGVTeW1ib2xJbmRleFtjXV0pLGZbZ109bCx0aGlzLl9ydW5Ub05leHRBdmFpbGFibGVTeW1ib2xJbmRleFtjXT0odGhpcy5fcnVuVG9OZXh0QXZhaWxhYmxlU3ltYm9sSW5kZXhbY10rMSklYm0uU1lNQk9MU19MSVNULmxlbmd0aCl9KTt0aGlzLnNldCgiX25hbWVUb0RhdGFTZXJpZXMiLGYpfX19LF91cGRhdGVDaGFydChhKXtPYmplY3QuZW50cmllcyhhKS5mb3JFYWNoKChbYyxkXSk9Pnt0aGlzLiQubG9hZGVyLnNldFNlcmllc0RhdGEoYyxkLmdldERhdGEoKSl9KX0sX2NvbXB1dGVTZWxlY3RlZFJ1bnNTZXQoYSl7Y29uc3QgYz17fTtfLmZvckVhY2goYSxkPT57Y1tkXT0xfSk7cmV0dXJuIGN9LF9jb21wdXRlU2VyaWVzTmFtZXMoKXtjb25zdCBhPW5ldyBTZXQodGhpcy5ydW5zKTtyZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy5fbmFtZVRvRGF0YVNlcmllcykuZmlsdGVyKChbLApjXSk9PmEuaGFzKGMucnVuKSkubWFwKChbY10pPT5jKX0sX2RldGVybWluZUNvbG9yKGEsYyl7cmV0dXJuIGEuc2NhbGUoYyl9LF9yZWZyZXNoRGF0YVNlcmllcygpe3RoaXMuc2V0KCJfbmFtZVRvRGF0YVNlcmllcyIse30pfSxfY3JlYXRlU3ltYm9sRnVuY3Rpb24oKXtyZXR1cm4gYT0+dGhpcy5fbmFtZVRvRGF0YVNlcmllc1thXS5nZXRTeW1ib2woKS5tZXRob2QoKX0sX2RldGVybWluZVN5bWJvbChhLGMpe3JldHVybiBhW2NdLmdldFN5bWJvbCgpLmNoYXJhY3Rlcn0sX2NvbXB1dGVUYWdGaWx0ZXIoYSl7cmV0dXJuIDE9PT1hLmxlbmd0aD9hWzBdOmEubWFwKGM9PiIoIitjKyIpIikuam9pbigifCIpfSxfZ2V0VG9nZ2xlTWF0Y2hlc0ljb24oYSl7cmV0dXJuIGE/ImV4cGFuZC1sZXNzIjoiZXhwYW5kLW1vcmUifSxfdG9nZ2xlTWF0Y2hlc09wZW4oKXt0aGlzLnNldCgiX21hdGNoZXNMaXN0T3BlbmVkIiwhdGhpcy5fbWF0Y2hlc0xpc3RPcGVuZWQpfSxfY29tcHV0ZVRpdGxlRGlzcGxheVN0cmluZyhhKXtyZXR1cm4gYXx8CiJ1bnRpdGxlZCJ9fSk7Cjwvc2NyaXB0Pgo8L2RvbS1tb2R1bGU+CgoKCjxkb20tbW9kdWxlIGlkPSJ0Zi1jdXN0b20tc2NhbGFyLWRhc2hib2FyZCI+CiAgPHRlbXBsYXRlPgogICAgPHRmLWRhc2hib2FyZC1sYXlvdXQ+CiAgICAgIDxkaXYgY2xhc3M9InNpZGViYXIiIHNsb3Q9InNpZGViYXIiPgogICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJsaW5lLWl0ZW0iPgogICAgICAgICAgICA8cGFwZXItY2hlY2tib3ggY2hlY2tlZD0ie3tfc2hvd0Rvd25sb2FkTGlua3N9fSI+U2hvdyBkYXRhIGRvd25sb2FkIGxpbmtzPC9wYXBlci1jaGVja2JveD4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0ibGluZS1pdGVtIj4KICAgICAgICAgICAgPHBhcGVyLWNoZWNrYm94IGNoZWNrZWQ9Int7X2lnbm9yZVlPdXRsaWVyc319Ij5JZ25vcmUgb3V0bGllcnMgaW4gY2hhcnQgc2NhbGluZzwvcGFwZXItY2hlY2tib3g+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgaWQ9InRvb2x0aXAtc29ydGluZyI+CiAgICAgICAgICAgIDxkaXYgaWQ9InRvb2x0aXAtc29ydGluZy1sYWJlbCI+VG9vbHRpcCBzb3J0aW5nIG1ldGhvZDo8L2Rpdj4KICAgICAgICAgICAgPHBhcGVyLWRyb3Bkb3duLW1lbnUgbm8tbGFiZWwtZmxvYXQgc2VsZWN0ZWQtaXRlbS1sYWJlbD0ie3tfdG9vbHRpcFNvcnRpbmdNZXRob2R9fSI+CiAgICAgICAgICAgICAgPHBhcGVyLWxpc3Rib3ggY2xhc3M9ImRyb3Bkb3duLWNvbnRlbnQiIHNlbGVjdGVkPSIwIiBzbG90PSJkcm9wZG93bi1jb250ZW50Ij4KICAgICAgICAgICAgICAgIDxwYXBlci1pdGVtPmRlZmF1bHQ8L3BhcGVyLWl0ZW0+CiAgICAgICAgICAgICAgICA8cGFwZXItaXRlbT5kZXNjZW5kaW5nPC9wYXBlci1pdGVtPgogICAgICAgICAgICAgICAgPHBhcGVyLWl0ZW0+YXNjZW5kaW5nPC9wYXBlci1pdGVtPgogICAgICAgICAgICAgICAgPHBhcGVyLWl0ZW0+bmVhcmVzdDwvcGFwZXItaXRlbT4KICAgICAgICAgICAgICA8L3BhcGVyLWxpc3Rib3g+CiAgICAgICAgICAgIDwvcGFwZXItZHJvcGRvd24tbWVudT4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiI+CiAgICAgICAgICA8dGYtc21vb3RoaW5nLWlucHV0IHdlaWdodD0ie3tfc21vb3RoaW5nV2VpZ2h0fX0iIHN0ZXA9IjAuMDAxIiBtaW49IjAiIG1heD0iMSI+PC90Zi1zbW9vdGhpbmctaW5wdXQ+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIj4KICAgICAgICAgIDx0Zi1vcHRpb24tc2VsZWN0b3IgaWQ9IngtdHlwZS1zZWxlY3RvciIgbmFtZT0iSG9yaXpvbnRhbCBBeGlzIiBzZWxlY3RlZC1pZD0ie3tfeFR5cGV9fSI+CiAgICAgICAgICAgIDxwYXBlci1idXR0b24gaWQ9InN0ZXAiPnN0ZXA8L3BhcGVyLWJ1dHRvbj48cGFwZXItYnV0dG9uIGlkPSJyZWxhdGl2ZSI+cmVsYXRpdmU8L3BhcGVyLWJ1dHRvbj48cGFwZXItYnV0dG9uIGlkPSJ3YWxsX3RpbWUiPndhbGw8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgIDwvdGYtb3B0aW9uLXNlbGVjdG9yPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiI+CiAgICAgICAgICA8dGYtcnVucy1zZWxlY3RvciBzZWxlY3RlZC1ydW5zPSJ7e19zZWxlY3RlZFJ1bnN9fSI+CiAgICAgICAgICA8L3RmLXJ1bnMtc2VsZWN0b3I+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjZW50ZXIiIHNsb3Q9ImNlbnRlciIgaWQ9ImNhdGVnb3JpZXMtY29udGFpbmVyIj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2RhdGFOb3RGb3VuZF1dIj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im5vLWRhdGEtd2FybmluZyI+CiAgICAgICAgICAgIDxoMz5UaGUgY3VzdG9tIHNjYWxhcnMgZGFzaGJvYXJkIGlzIGluYWN0aXZlLjwvaDM+CiAgICAgICAgICAgIDxwPlByb2JhYmxlIGNhdXNlczoKICAgICAgICAgICAgPG9sPgogICAgICAgICAgICAgIDxsaT5Zb3UgaGF2ZW4ndCBsYWlkIG91dCB0aGUgZGFzaGJvYXJkLjwvbGk+CiAgICAgICAgICAgICAgPGxpPllvdSBoYXZlbuKAmXQgd3JpdHRlbiBhbnkgc2NhbGFyIGRhdGEgdG8geW91ciBldmVudCBmaWxlcy48L2xpPgogICAgICAgICAgICA8L29sPgoKICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgVG8gbGF5IG91dCB0aGUgZGFzaGJvYXJkLCBwYXNzIGEgPGNvZGU+TGF5b3V0PC9jb2RlPiBwcm90b2J1ZmZlcgogICAgICAgICAgICAgIHRvIHRoZSA8Y29kZT5zZXRfbGF5b3V0PC9jb2RlPiBtZXRob2QuIEZvciBleGFtcGxlLAogICAgICAgICAgICAKICAgICAgICAgICAgPHByZT5mcm9tIHRlbnNvcmJvYXJkIGltcG9ydCBzdW1tYXJ5CmZyb20gdGVuc29yYm9hcmQucGx1Z2lucy5jdXN0b21fc2NhbGFyIGltcG9ydCBsYXlvdXRfcGIyCi4uLgojIFRoaXMgYWN0aW9uIGRvZXMgbm90IGhhdmUgdG8gYmUgcGVyZm9ybWVkIGF0IGV2ZXJ5IHN0ZXAsIHNvIHRoZSBhY3Rpb24gaXMgbm90CiMgdGFrZW4gY2FyZSBvZiBieSBhbiBvcCBpbiB0aGUgZ3JhcGguIFdlIG9ubHkgbmVlZCB0byBzcGVjaWZ5IHRoZSBsYXlvdXQgb25jZS4KIyBXZSBvbmx5IG5lZWQgdG8gc3BlY2lmeSB0aGUgbGF5b3V0IG9uY2UgKGluc3RlYWQgb2YgcGVyIHN0ZXApLgpsYXlvdXRfc3VtbWFyeSA9IHN1bW1hcnlfbGliLmN1c3RvbV9zY2FsYXJfcGIobGF5b3V0X3BiMi5MYXlvdXQoCiAgY2F0ZWdvcnk9WwogICAgbGF5b3V0X3BiMi5DYXRlZ29yeSgKICAgICAgdGl0bGU9J2xvc3NlcycsCiAgICAgIGNoYXJ0PVsKICAgICAgICAgIGxheW91dF9wYjIuQ2hhcnQoCiAgICAgICAgICAgICAgdGl0bGU9J2xvc3NlcycsCiAgICAgICAgICAgICAgbXVsdGlsaW5lPWxheW91dF9wYjIuTXVsdGlsaW5lQ2hhcnRDb250ZW50KAogICAgICAgICAgICAgICAgdGFnPVtyJ2xvc3MuKiddLAogICAgICAgICAgICAgICkpLAogICAgICAgICAgbGF5b3V0X3BiMi5DaGFydCgKICAgICAgICAgICAgICB0aXRsZT0nYmF6JywKICAgICAgICAgICAgICBtYXJnaW49bGF5b3V0X3BiMi5NYXJnaW5DaGFydENvbnRlbnQoCiAgICAgICAgICAgICAgICBzZXJpZXM9WwogICAgICAgICAgICAgICAgICBsYXlvdXRfcGIyLk1hcmdpbkNoYXJ0Q29udGVudC5TZXJpZXMoCiAgICAgICAgICAgICAgICAgICAgdmFsdWU9J2xvc3MvYmF6L3NjYWxhcl9zdW1tYXJ5JywKICAgICAgICAgICAgICAgICAgICBsb3dlcj0nYmF6X2xvd2VyL2Jhei9zY2FsYXJfc3VtbWFyeScsCiAgICAgICAgICAgICAgICAgICAgdXBwZXI9J2Jhel91cHBlci9iYXovc2NhbGFyX3N1bW1hcnknKSwKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgKSksCiAgICAgIF0pLAogICAgbGF5b3V0X3BiMi5DYXRlZ29yeSgKICAgICAgdGl0bGU9J3RyaWcgZnVuY3Rpb25zJywKICAgICAgY2hhcnQ9WwogICAgICAgICAgbGF5b3V0X3BiMi5DaGFydCgKICAgICAgICAgICAgICB0aXRsZT0nd2F2ZSB0cmlnIGZ1bmN0aW9ucycsCiAgICAgICAgICAgICAgbXVsdGlsaW5lPWxheW91dF9wYjIuTXVsdGlsaW5lQ2hhcnRDb250ZW50KAogICAgICAgICAgICAgICAgdGFnPVtyJ3RyaWdGdW5jdGlvbnMvY29zaW5lJywgcid0cmlnRnVuY3Rpb25zL3NpbmUnXSwKICAgICAgICAgICAgICApKSwKICAgICAgICAgICMgVGhlIHJhbmdlIG9mIHRhbmdlbnQgaXMgZGlmZmVyZW50LiBMZXQncyBnaXZlIGl0IGl0cyBvd24gY2hhcnQuCiAgICAgICAgICBsYXlvdXRfcGIyLkNoYXJ0KAogICAgICAgICAgICAgIHRpdGxlPSd0YW4nLAogICAgICAgICAgICAgIG11bHRpbGluZT1sYXlvdXRfcGIyLk11bHRpbGluZUNoYXJ0Q29udGVudCgKICAgICAgICAgICAgICAgIHRhZz1bcid0cmlnRnVuY3Rpb25zL3RhbmdlbnQnXSwKICAgICAgICAgICAgICApKSwKICAgICAgXSwKICAgICAgIyBUaGlzIGNhdGVnb3J5IHdlIGNhcmUgbGVzcyBhYm91dC4gTGV0J3MgbWFrZSBpdCBpbml0aWFsbHkgY2xvc2VkLgogICAgICBjbG9zZWQ9VHJ1ZSksCiAgXSkpCndyaXRlci5hZGRfc3VtbWFyeShsYXlvdXRfc3VtbWFyeSkKPC9wcmU+CiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdeKAmXJlIG5ldyB0byB1c2luZyBUZW5zb3JCb2FyZCwgYW5kIHdhbnQgdG8gZmluZCBvdXQgaG93IHRvCiAgICAgICAgICAgICAgYWRkIGRhdGEgYW5kIHNldCB1cCB5b3VyIGV2ZW50IGZpbGVzLCBjaGVjayBvdXQgdGhlCiAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kIj5SRUFETUU8L2E+CiAgICAgICAgICAgICAgYW5kIHBlcmhhcHMgdGhlCiAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvZ2V0X3N0YXJ0ZWQvc3VtbWFyaWVzX2FuZF90ZW5zb3Jib2FyZCI+VGVuc29yQm9hcmQgdHV0b3JpYWw8L2E+LgogICAgICAgICAgICAKICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbWyFfZGF0YU5vdEZvdW5kXV0iPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tfY2F0ZWdvcmllc11dIiBhcz0iY2F0ZWdvcnkiPgogICAgICAgICAgICA8dGYtY2F0ZWdvcnktcGFnaW5hdGVkLXZpZXcgYXM9ImNoYXJ0IiBjYXRlZ29yeT0iW1tjYXRlZ29yeV1dIiBkaXNhYmxlLXBhZ2luYXRpb24gaW5pdGlhbC1vcGVuZWQ9IltbY2F0ZWdvcnkubWV0YWRhdGEub3BlbmVkXV0iPgogICAgICAgICAgICAgIDx0ZW1wbGF0ZT4KICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tjaGFydC5tdWx0aWxpbmVdXSI+CiAgICAgICAgICAgICAgICAgICAgPHRmLWN1c3RvbS1zY2FsYXItbXVsdGktbGluZS1jaGFydC1jYXJkIGFjdGl2ZT0iW1thY3RpdmVdXSIgcmVxdWVzdC1tYW5hZ2VyPSJbW19yZXF1ZXN0TWFuYWdlcl1dIiBydW5zPSJbW19zZWxlY3RlZFJ1bnNdXSIgdGl0bGU9IltbY2hhcnQudGl0bGVdXSIgeC10eXBlPSJbW194VHlwZV1dIiBzbW9vdGhpbmctZW5hYmxlZD0iW1tfc21vb3RoaW5nRW5hYmxlZF1dIiBzbW9vdGhpbmctd2VpZ2h0PSJbW19zbW9vdGhpbmdXZWlnaHRdXSIgdG9vbHRpcC1zb3J0aW5nLW1ldGhvZD0iW1t0b29sdGlwU29ydGluZ01ldGhvZF1dIiBpZ25vcmUteS1vdXRsaWVycz0iW1tfaWdub3JlWU91dGxpZXJzXV0iIHNob3ctZG93bmxvYWQtbGlua3M9IltbX3Nob3dEb3dubG9hZExpbmtzXV0iIHRhZy1yZWdleGVzPSJbW2NoYXJ0Lm11bHRpbGluZS50YWddXSI+PC90Zi1jdXN0b20tc2NhbGFyLW11bHRpLWxpbmUtY2hhcnQtY2FyZD4KICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2NoYXJ0Lm1hcmdpbl1dIj4KICAgICAgICAgICAgICAgICAgICA8dGYtY3VzdG9tLXNjYWxhci1tYXJnaW4tY2hhcnQtY2FyZCBhY3RpdmU9IltbYWN0aXZlXV0iIHJlcXVlc3QtbWFuYWdlcj0iW1tfcmVxdWVzdE1hbmFnZXJdXSIgcnVucz0iW1tfc2VsZWN0ZWRSdW5zXV0iIHRpdGxlPSJbW2NoYXJ0LnRpdGxlXV0iIHgtdHlwZT0iW1tfeFR5cGVdXSIgdG9vbHRpcC1zb3J0aW5nLW1ldGhvZD0iW1t0b29sdGlwU29ydGluZ01ldGhvZF1dIiBpZ25vcmUteS1vdXRsaWVycz0iW1tfaWdub3JlWU91dGxpZXJzXV0iIHNob3ctZG93bmxvYWQtbGlua3M9IltbX3Nob3dEb3dubG9hZExpbmtzXV0iIG1hcmdpbi1jaGFydC1zZXJpZXM9IltbY2hhcnQubWFyZ2luLnNlcmllc11dIj48L3RmLWN1c3RvbS1zY2FsYXItbWFyZ2luLWNoYXJ0LWNhcmQ+CiAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8L3RmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L2Rpdj4KICAgIDwvdGYtZGFzaGJvYXJkLWxheW91dD4KCiAgICA8c3R5bGUgaW5jbHVkZT0iZGFzaGJvYXJkLXN0eWxlIj48L3N0eWxlPgogICAgPHN0eWxlPgogICAgICAjdG9vbHRpcC1zb3J0aW5nIHsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIG1hcmdpbi10b3A6IDE1cHg7CiAgICAgIH0KICAgICAgI3Rvb2x0aXAtc29ydGluZyBwYXBlci1kcm9wZG93bi1tZW51IHsKICAgICAgICBtYXJnaW4tbGVmdDogMTBweDsKICAgICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1mb2N1cy1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgd2lkdGg6IDEwNXB4OwogICAgICB9CiAgICAgIC5saW5lLWl0ZW0gewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBhZGRpbmctdG9wOiA1cHg7CiAgICAgIH0KICAgICAgLm5vLWRhdGEtd2FybmluZyB7CiAgICAgICAgbWF4LXdpZHRoOiA1NDBweDsKICAgICAgICBtYXJnaW46IDgwcHggYXV0byAwIGF1dG87CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KCiAgPHNjcmlwdD4vL35+V0VCUEFUSH5+L3RmLWN1c3RvbS1zY2FsYXItZGFzaGJvYXJkL3RmLWN1c3RvbS1zY2FsYXItZGFzaGJvYXJkLmh0bWwuanMKUG9seW1lcih7aXM6InRmLWN1c3RvbS1zY2FsYXItZGFzaGJvYXJkIixwcm9wZXJ0aWVzOntfcmVxdWVzdE1hbmFnZXI6e3R5cGU6T2JqZWN0LHZhbHVlOigpPT5uZXcgUGsuUmVxdWVzdE1hbmFnZXIoNTApfSxfY2FuY2VsbGVyOnt0eXBlOk9iamVjdCx2YWx1ZTooKT0+bmV3IFBrLkNhbmNlbGxlcn0sX3NlbGVjdGVkUnVuczpBcnJheSxfc2hvd0Rvd25sb2FkTGlua3M6e3R5cGU6Qm9vbGVhbixub3RpZnk6ITAsdmFsdWU6VmwuZ2V0Qm9vbGVhbkluaXRpYWxpemVyKCJfc2hvd0Rvd25sb2FkTGlua3MiLHtkZWZhdWx0VmFsdWU6ITEsdXNlTG9jYWxTdG9yYWdlOiEwfSksb2JzZXJ2ZXI6Il9zaG93RG93bmxvYWRMaW5rc09ic2VydmVyIn0sX3Ntb290aGluZ0VuYWJsZWQ6e3R5cGU6Qm9vbGVhbixjb21wdXRlZDoiX2NvbXB1dGVTbW9vdGhpbmdFbmFibGVkKF9zbW9vdGhpbmdXZWlnaHQpIn0sX3Ntb290aGluZ1dlaWdodDp7dHlwZTpOdW1iZXIsbm90aWZ5OiEwLHZhbHVlOlZsLmdldE51bWJlckluaXRpYWxpemVyKCJfc21vb3RoaW5nV2VpZ2h0IiwKe2RlZmF1bHRWYWx1ZTouNn0pLG9ic2VydmVyOiJfc21vb3RoaW5nV2VpZ2h0T2JzZXJ2ZXIifSxfaWdub3JlWU91dGxpZXJzOnt0eXBlOkJvb2xlYW4sdmFsdWU6VmwuZ2V0Qm9vbGVhbkluaXRpYWxpemVyKCJfaWdub3JlWU91dGxpZXJzIix7ZGVmYXVsdFZhbHVlOiEwLHVzZUxvY2FsU3RvcmFnZTohMH0pLG9ic2VydmVyOiJfaWdub3JlWU91dGxpZXJzT2JzZXJ2ZXIifSxfeFR5cGU6e3R5cGU6U3RyaW5nLHZhbHVlOiJzdGVwIn0sX2xheW91dDpPYmplY3QsX2RhdGFOb3RGb3VuZDpCb29sZWFuLF9jYXRlZ29yaWVzOnt0eXBlOkFycmF5LGNvbXB1dGVkOiJfbWFrZUNhdGVnb3JpZXMoX2xheW91dCkifSxfb3BlbmVkQ2F0ZWdvcmllczp7dHlwZTpPYmplY3R9LF9hY3RpdmU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMCxyZWFkT25seTohMH19LHJlYWR5KCl7dGhpcy5yZWxvYWQoKX0scmVsb2FkKCl7Y29uc3QgYT1Qay5nZXRSb3V0ZXIoKS5wbHVnaW5zTGlzdGluZygpLGM9dGhpcy5fY2FuY2VsbGVyLmNhbmNlbGxhYmxlKGQ9Pgp7ZC5jYW5jZWxsZWR8fCh0aGlzLnNldCgiX2RhdGFOb3RGb3VuZCIsIWQudmFsdWUuY3VzdG9tX3NjYWxhcnMpLHRoaXMuX2RhdGFOb3RGb3VuZHx8dGhpcy5fcmV0cmlldmVMYXlvdXRBbmREYXRhKCkpfSk7dGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdChhKS50aGVuKGMpfSxfcmVsb2FkQ2hhcnRzKCl7dGhpcy5yb290LnF1ZXJ5U2VsZWN0b3JBbGwoInRmLWN1c3RvbS1zY2FsYXItbWFyZ2luLWNoYXJ0LWNhcmQsIHRmLWN1c3RvbS1zY2FsYXItbXVsdGktbGluZS1jaGFydC1jYXJkIikuZm9yRWFjaChhPT57YS5yZWxvYWQoKX0pfSxfcmV0cmlldmVMYXlvdXRBbmREYXRhKCl7Y29uc3QgYT1Qay5nZXRSb3V0ZXIoKS5wbHVnaW5Sb3V0ZSgiY3VzdG9tX3NjYWxhcnMiLCIvbGF5b3V0IiksYz10aGlzLl9jYW5jZWxsZXIuY2FuY2VsbGFibGUoZD0+e2QuY2FuY2VsbGVkfHwodGhpcy5zZXQoIl9sYXlvdXQiLGQudmFsdWUpLHRoaXMuX2RhdGFOb3RGb3VuZHx8dGhpcy5fcmVsb2FkQ2hhcnRzKCkpfSk7CnRoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3QoYSkudGhlbihjKX0sX3Nob3dEb3dubG9hZExpbmtzT2JzZXJ2ZXI6VmwuZ2V0Qm9vbGVhbk9ic2VydmVyKCJfc2hvd0Rvd25sb2FkTGlua3MiLHtkZWZhdWx0VmFsdWU6ITEsdXNlTG9jYWxTdG9yYWdlOiEwfSksX3Ntb290aGluZ1dlaWdodE9ic2VydmVyOlZsLmdldE51bWJlck9ic2VydmVyKCJfc21vb3RoaW5nV2VpZ2h0Iix7ZGVmYXVsdFZhbHVlOi42fSksX2lnbm9yZVlPdXRsaWVyc09ic2VydmVyOlZsLmdldEJvb2xlYW5PYnNlcnZlcigiX2lnbm9yZVlPdXRsaWVycyIse2RlZmF1bHRWYWx1ZTohMCx1c2VMb2NhbFN0b3JhZ2U6ITB9KSxfY29tcHV0ZVNtb290aGluZ0VuYWJsZWQoYSl7cmV0dXJuIDA8YX0sX21ha2VDYXRlZ29yaWVzKGEpe2lmKCFhLmNhdGVnb3J5KXJldHVybltdO2xldCBjPSExO3RoaXMuX29wZW5lZENhdGVnb3JpZXN8fChjPSEwLHRoaXMuX29wZW5lZENhdGVnb3JpZXM9e30pO3JldHVybiBhLmNhdGVnb3J5Lm1hcChkPT4Ke2MmJiFkLmNsb3NlZCYmKHRoaXMuX29wZW5lZENhdGVnb3JpZXNbZC50aXRsZV09ITApO3JldHVybntuYW1lOmQudGl0bGUsaXRlbXM6ZC5jaGFydCxtZXRhZGF0YTp7b3BlbmVkOiEhdGhpcy5fb3BlbmVkQ2F0ZWdvcmllc1tkLnRpdGxlXX19fSl9LF9jYXRlZ29yeU9wZW5lZFRvZ2dsZWQoYSl7YT1hLnRhcmdldDthLm9wZW5lZD90aGlzLl9vcGVuZWRDYXRlZ29yaWVzW2EuY2F0ZWdvcnkubmFtZV09ITA6ZGVsZXRlIHRoaXMuX29wZW5lZENhdGVnb3JpZXNbYS5jYXRlZ29yeS5uYW1lXX19KTsKPC9zY3JpcHQ+CjwvZG9tLW1vZHVsZT4KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgo8ZG9tLW1vZHVsZSBpZD0idGYtaW1hZ2UtbG9hZGVyIj4KICA8dGVtcGxhdGU+CiAgICA8dGYtY2FyZC1oZWFkaW5nIHRhZz0iW1t0YWddXSIgcnVuPSJbW3J1bl1dIiBkaXNwbGF5LW5hbWU9IltbdGFnTWV0YWRhdGEuZGlzcGxheU5hbWVdXSIgZGVzY3JpcHRpb249IltbdGFnTWV0YWRhdGEuZGVzY3JpcHRpb25dXSIgY29sb3I9IltbX3J1bkNvbG9yXV0iPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2hhc011bHRpcGxlU2FtcGxlc11dIj4KICAgICAgICA8ZGl2PnNhbXBsZTogW1tfc2FtcGxlVGV4dF1dIG9mIFtbb2ZTYW1wbGVzXV08L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19oYXNBdExlYXN0T25lU3RlcF1dIj4KICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nLXJvdyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nLWxhYmVsIj4KICAgICAgICAgICAgc3RlcAogICAgICAgICAgICA8c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6IGJvbGQiPltbX3RvTG9jYWxlU3RyaW5nKF9zdGVwVmFsdWUpXV08L3NwYW4+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImhlYWRpbmctbGFiZWwgaGVhZGluZy1yaWdodCBkYXRldGltZSI+CiAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfY3VycmVudFdhbGxUaW1lXV0iPgogICAgICAgICAgICAgIFtbX2N1cnJlbnRXYWxsVGltZV1dCiAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImxhYmVsIHJpZ2h0Ij4KICAgICAgICAgICAgPHBhcGVyLXNwaW5uZXItbGl0ZSBhY3RpdmUgaGlkZGVuJD0iW1shX2lzSW1hZ2VMb2FkaW5nXV0iPgogICAgICAgICAgICA8L3BhcGVyLXNwaW5uZXItbGl0ZT4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L3RlbXBsYXRlPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2hhc011bHRpcGxlU3RlcHNdXSI+CiAgICAgICAgPGRpdj4KICAgICAgICAgIDxwYXBlci1zbGlkZXIgaWQ9InN0ZXBzIiBpbW1lZGlhdGUtdmFsdWU9Int7X3N0ZXBJbmRleH19IiBtYXg9IltbX21heFN0ZXBJbmRleF1dIiBtYXgtbWFya2Vycz0iW1tfbWF4U3RlcEluZGV4XV0iIHNuYXBzIHN0ZXA9IjEiIHZhbHVlPSJ7e19zdGVwSW5kZXh9fSI+PC9wYXBlci1zbGlkZXI+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICA8L3RmLWNhcmQtaGVhZGluZz4KCiAgICAKICAgIDxhIGlkPSJtYWluLWltYWdlLWNvbnRhaW5lciIgcm9sZT0iYnV0dG9uIiBhcmlhLWxhYmVsPSJUb2dnbGUgYWN0dWFsIHNpemUiIGFyaWEtZXhwYW5kZWQkPSJbW19nZXRBcmlhRXhwYW5kZWQoYWN0dWFsU2l6ZSldXSIgb24tdGFwPSJfaGFuZGxlVGFwIj48L2E+CgogICAgPHN0eWxlIGluY2x1ZGU9InRmLWNhcmQtaGVhZGluZy1zdHlsZSI+CiAgICAgIC8qKiBNYWtlIGJ1dHRvbiBhIGRpdi4gKi8KICAgICAgYnV0dG9uIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBiYWNrZ3JvdW5kOiBub25lOwogICAgICAgIGJvcmRlcjogMDsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICB9CgogICAgICAvKiogRmlyZWZveDogR2V0IHJpZCBvZiBkb3R0ZWQgbGluZSBpbnNpZGUgYnV0dG9uLiAqLwogICAgICBidXR0b246Oi1tb3otZm9jdXMtaW5uZXIgewogICAgICAgIGJvcmRlcjogMDsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICB9CgogICAgICAvKiogRmlyZWZveDogU2ltdWxhdGUgQ2hyb21lJ3Mgb3V0ZXIgZ2xvdyBvbiBidXR0b24gd2hlbiBmb2N1c2VkLiAqLwogICAgICBidXR0b246LW1vei1mb2N1c3JpbmcgewogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgYm94LXNoYWRvdzogMHB4IDBweCAxcHggMnB4IEhpZ2hsaWdodDsKICAgICAgfQoKICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHdpZHRoOiAzNTBweDsKICAgICAgICBoZWlnaHQ6IGF1dG87CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIG1hcmdpbjogMCAxNXB4IDQwcHggMDsKICAgICAgICBvdmVyZmxvdy14OiBhdXRvOwogICAgICB9CgogICAgICAvKiogV2hlbiBhY3R1YWwgc2l6ZSBzaG93biBpcyBvbiwgdXNlIHRoZSBhY3R1YWwgaW1hZ2Ugd2lkdGguICovCiAgICAgIDpob3N0KFthY3R1YWwtc2l6ZV0pIHsKICAgICAgICBtYXgtd2lkdGg6IDEwMCU7CiAgICAgICAgd2lkdGg6IGF1dG87CiAgICAgIH0KCiAgICAgIDpob3N0KFthY3R1YWwtc2l6ZV0pICNtYWluLWltYWdlLWNvbnRhaW5lciB7CiAgICAgICAgbWF4LWhlaWdodDogbm9uZTsKICAgICAgICB3aWR0aDogYXV0bzsKICAgICAgfQoKICAgICAgOmhvc3QoW2FjdHVhbC1zaXplXSkgI21haW4taW1hZ2UtY29udGFpbmVyIGltZyB7CiAgICAgICAgd2lkdGg6IGF1dG87CiAgICAgIH0KCiAgICAgIHBhcGVyLXNwaW5uZXItbGl0ZSB7CiAgICAgICAgd2lkdGg6IDE0cHg7CiAgICAgICAgaGVpZ2h0OiAxNHB4OwogICAgICAgIHZlcnRpY2FsLWFsaWduOiB0ZXh0LWJvdHRvbTsKICAgICAgICAtLXBhcGVyLXNwaW5uZXItY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICB9CgogICAgICAjc3RlcHMgewogICAgICAgIGhlaWdodDogMTVweDsKICAgICAgICBtYXJnaW46IDAgMCAwIC0xNXB4OwogICAgICAgIC8qCiAgICAgICAgICogMzEgY29tZXMgZnJvbSBhZGRpbmcgYSBwYWRkaW5nIG9mIDE1cHggZnJvbSBib3RoIHNpZGVzIG9mIHRoZQogICAgICAgICAqIHBhcGVyLXNsaWRlciwgc3VidHJhY3RpbmcgMXB4IHNvIHRoYXQgdGhlIHNsaWRlciB3aWR0aCBhbGlnbnMKICAgICAgICAgKiB3aXRoIHRoZSBpbWFnZSAodGhlIGxhc3Qgc2xpZGVyIG1hcmtlciB0YWtlcyB1cCAxcHgpLCBhbmQKICAgICAgICAgKiBhZGRpbmcgMnB4IHRvIGFjY291bnQgZm9yIGEgYm9yZGVyIG9mIDFweCBvbiBib3RoIHNpZGVzIG9mCiAgICAgICAgICogdGhlIGltYWdlLiAzMCAtIDEgKyAyLgogICAgICAgICAqLwogICAgICAgIHdpZHRoOiBjYWxjKDEwMCUgKyAzMXB4KTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1hY3RpdmUtY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLWtub2ItY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLWtub2Itc3RhcnQtYm9yZGVyLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1rbm9iLXN0YXJ0LWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1tYXJrZXJzLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1waW4tY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLXBpbi1zdGFydC1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgIH0KCiAgICAgICNtYWluLWltYWdlLWNvbnRhaW5lciB7CiAgICAgICAgbWF4LWhlaWdodDogMTAyNHB4OwogICAgICAgIG92ZXJmbG93OiBhdXRvOwogICAgICB9CgogICAgICAjbWFpbi1pbWFnZS1jb250YWluZXIgaW1nIHsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgaW1hZ2UtcmVuZGVyaW5nOiAtbW96LWNyaXNwLWVkZ2VzOwogICAgICAgIGltYWdlLXJlbmRlcmluZzogcGl4ZWxhdGVkOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogYXV0bzsKICAgICAgfQoKICAgICAgcGFwZXItaWNvbi1idXR0b24gewogICAgICAgIGNvbG9yOiAjMjE5NmYzOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDEwMCU7CiAgICAgICAgd2lkdGg6IDMycHg7CiAgICAgICAgaGVpZ2h0OiAzMnB4OwogICAgICAgIHBhZGRpbmc6IDRweDsKICAgICAgfQogICAgICBwYXBlci1pY29uLWJ1dHRvbltzZWxlY3RlZF0gewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXRiLXVpLWxpZ2h0LWFjY2VudCk7CiAgICAgIH0KICAgICAgW2hpZGRlbl0gewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KICA8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdGYtaW1hZ2UtZGFzaGJvYXJkL3RmLWltYWdlLWxvYWRlci5odG1sLmpzClBvbHltZXIoe2lzOiJ0Zi1pbWFnZS1sb2FkZXIiLHByb3BlcnRpZXM6e3J1bjpTdHJpbmcsdGFnOlN0cmluZyxzYW1wbGU6TnVtYmVyLG9mU2FtcGxlczpOdW1iZXIsdGFnTWV0YWRhdGE6T2JqZWN0LF9ydW5Db2xvcjp7dHlwZTpTdHJpbmcsY29tcHV0ZWQ6Il9jb21wdXRlUnVuQ29sb3IocnVuKSJ9LGFjdHVhbFNpemU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9LGJyaWdodG5lc3NBZGp1c3RtZW50Ont0eXBlOk51bWJlcix2YWx1ZTouNX0sY29udHJhc3RQZXJjZW50YWdlOnt0eXBlOk51bWJlcix2YWx1ZTowfSxyZXF1ZXN0TWFuYWdlcjpPYmplY3QsX21ldGFkYXRhQ2FuY2VsbGVyOnt0eXBlOk9iamVjdCx2YWx1ZTooKT0+bmV3IFBrLkNhbmNlbGxlcn0sX2ltYWdlQ2FuY2VsbGVyOnt0eXBlOk9iamVjdCx2YWx1ZTooKT0+bmV3IFBrLkNhbmNlbGxlcn0sX3N0ZXBzOnt0eXBlOkFycmF5LHZhbHVlOltdLG5vdGlmeTohMH0sX3N0ZXBJbmRleDp7dHlwZTpOdW1iZXIsCm5vdGlmeTohMH0sX2N1cnJlbnRTdGVwOnt0eXBlOk9iamVjdCxjb21wdXRlZDoiX2NvbXB1dGVDdXJyZW50U3RlcChfc3RlcHMsIF9zdGVwSW5kZXgpIn0sX2hhc0F0TGVhc3RPbmVTdGVwOnt0eXBlOkJvb2xlYW4sY29tcHV0ZWQ6Il9jb21wdXRlSGFzQXRMZWFzdE9uZVN0ZXAoX3N0ZXBzKSJ9LF9oYXNNdWx0aXBsZVN0ZXBzOnt0eXBlOkJvb2xlYW4sY29tcHV0ZWQ6Il9jb21wdXRlSGFzTXVsdGlwbGVTdGVwcyhfc3RlcHMpIn0sX3N0ZXBWYWx1ZTp7dHlwZTpOdW1iZXIsY29tcHV0ZWQ6Il9jb21wdXRlU3RlcFZhbHVlKF9jdXJyZW50U3RlcCkifSxfY3VycmVudFdhbGxUaW1lOnt0eXBlOlN0cmluZyxjb21wdXRlZDoiX2NvbXB1dGVDdXJyZW50V2FsbFRpbWUoX2N1cnJlbnRTdGVwKSJ9LF9tYXhTdGVwSW5kZXg6e3R5cGU6TnVtYmVyLGNvbXB1dGVkOiJfY29tcHV0ZU1heFN0ZXBJbmRleChfc3RlcHMpIn0sX3NhbXBsZVRleHQ6e3R5cGU6U3RyaW5nLGNvbXB1dGVkOiJfY29tcHV0ZVNhbXBsZVRleHQoc2FtcGxlKSJ9LApfaGFzTXVsdGlwbGVTYW1wbGVzOnt0eXBlOkJvb2xlYW4sY29tcHV0ZWQ6Il9jb21wdXRlSGFzTXVsdGlwbGVTYW1wbGVzKG9mU2FtcGxlcykifSxfaXNJbWFnZUxvYWRpbmc6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX19LG9ic2VydmVyczpbInJlbG9hZChydW4sIHRhZykiLCJfdXBkYXRlSW1hZ2VVcmwoX2N1cnJlbnRTdGVwLCBicmlnaHRuZXNzQWRqdXN0bWVudCwgY29udHJhc3RQZXJjZW50YWdlKSJdLF9jb21wdXRlUnVuQ29sb3IoYSl7cmV0dXJuIFpsLnJ1bnNDb2xvclNjYWxlKGEpfSxfY29tcHV0ZUhhc0F0TGVhc3RPbmVTdGVwKGEpe3JldHVybiEhYSYmMDxhLmxlbmd0aH0sX2NvbXB1dGVIYXNNdWx0aXBsZVN0ZXBzKGEpe3JldHVybiEhYSYmMTxhLmxlbmd0aH0sX2NvbXB1dGVDdXJyZW50U3RlcChhLGMpe3JldHVybiBhW2NdfHxudWxsfSxfY29tcHV0ZVN0ZXBWYWx1ZShhKXtyZXR1cm4gYT9hLnN0ZXA6MH0sX2NvbXB1dGVDdXJyZW50V2FsbFRpbWUoYSl7cmV0dXJuIGE/CmZtLmZvcm1hdERhdGUoYS53YWxsX3RpbWUpOiIifSxfY29tcHV0ZU1heFN0ZXBJbmRleChhKXtyZXR1cm4gYS5sZW5ndGgtMX0sX2NvbXB1dGVTYW1wbGVUZXh0KGEpe3JldHVybmAke2ErMX1gfSxfY29tcHV0ZUhhc011bHRpcGxlU2FtcGxlcyhhKXtyZXR1cm4gMTxhfSxfZ2V0QXJpYUV4cGFuZGVkKCl7cmV0dXJuIHRoaXMuYWN0dWFsU2l6ZT8idHJ1ZSI6ImZhbHNlIn0sYXR0YWNoZWQoKXt0aGlzLl9hdHRhY2hlZD0hMDt0aGlzLnJlbG9hZCgpfSxyZWxvYWQoKXtpZih0aGlzLl9hdHRhY2hlZCl7dGhpcy5fbWV0YWRhdGFDYW5jZWxsZXIuY2FuY2VsQWxsKCk7dmFyIGE9UGsuYWRkUGFyYW1zKFBrLmdldFJvdXRlcigpLnBsdWdpblJvdXRlKCJpbWFnZXMiLCIvaW1hZ2VzIikse3RhZzp0aGlzLnRhZyxydW46dGhpcy5ydW4sc2FtcGxlOnRoaXMuc2FtcGxlfSksYz10aGlzLl9tZXRhZGF0YUNhbmNlbGxlci5jYW5jZWxsYWJsZShkPT57ZC5jYW5jZWxsZWR8fChkPWQudmFsdWUubWFwKHRoaXMuX2NyZWF0ZVN0ZXBEYXR1bS5iaW5kKHRoaXMpKSwKdGhpcy5zZXQoIl9zdGVwcyIsZCksdGhpcy5zZXQoIl9zdGVwSW5kZXgiLGQubGVuZ3RoLTEpKX0pO3RoaXMucmVxdWVzdE1hbmFnZXIucmVxdWVzdChhKS50aGVuKGMpfX0sX2NyZWF0ZVN0ZXBEYXR1bShhKXtsZXQgYz1Qay5nZXRSb3V0ZXIoKS5wbHVnaW5Sb3V0ZSgiaW1hZ2VzIiwiL2luZGl2aWR1YWxJbWFnZSIpO2M9UGsuYWRkUGFyYW1zKGMse3RzOmEud2FsbF90aW1lfSk7Yys9Ilx4MjYiK2EucXVlcnk7cmV0dXJue3dpZHRoOmEud2lkdGgsaGVpZ2h0OmEuaGVpZ2h0LHdhbGxfdGltZTpuZXcgRGF0ZSgxRTMqYS53YWxsX3RpbWUpLHN0ZXA6YS5zdGVwLHVybDpjfX0sX3VwZGF0ZUltYWdlVXJsKGEsYyxkKXtpZihhKXt2YXIgZj1uZXcgSW1hZ2U7dGhpcy5faW1hZ2VDYW5jZWxsZXIuY2FuY2VsQWxsKCk7Zi5vbmxvYWQ9Zi5vbmVycm9yPXRoaXMuX2ltYWdlQ2FuY2VsbGVyLmNhbmNlbGxhYmxlKGc9PntnLmNhbmNlbGxlZHx8KGc9dGhpcy4kJCgiI21haW4taW1hZ2UtY29udGFpbmVyIiksCmcuaW5uZXJIVE1MPSIiLFBvbHltZXIuZG9tKGcpLmFwcGVuZENoaWxkKGYpLHRoaXMuc2V0KCJfaXNJbWFnZUxvYWRpbmciLCExKSl9KS5iaW5kKHRoaXMpO2Yuc3R5bGUuZmlsdGVyPWBjb250cmFzdCgke2R9JSkgYDtmLnN0eWxlLmZpbHRlcis9YGJyaWdodG5lc3MoJHtjfSlgO3RoaXMuc2V0KCJfaXNJbWFnZUxvYWRpbmciLCEwKTtmLnNyYz1hLnVybH19LF9oYW5kbGVUYXAoKXt0aGlzLnNldCgiYWN0dWFsU2l6ZSIsIXRoaXMuYWN0dWFsU2l6ZSl9LF90b0xvY2FsZVN0cmluZyhhKXtyZXR1cm4gYS50b0xvY2FsZVN0cmluZygpfX0pOwo8L3NjcmlwdD4KPC9kb20tbW9kdWxlPgoKCgo8ZG9tLW1vZHVsZSBpZD0idGYtaW1hZ2UtZGFzaGJvYXJkIj4KICA8dGVtcGxhdGU+CiAgICA8dGYtZGFzaGJvYXJkLWxheW91dD4KICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhciIgc2xvdD0ic2lkZWJhciI+CiAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImxpbmUtaXRlbSI+CiAgICAgICAgICAgIDxwYXBlci1jaGVja2JveCBjaGVja2VkPSJ7e19hY3R1YWxTaXplfX0iPlNob3cgYWN0dWFsIGltYWdlIHNpemU8L3BhcGVyLWNoZWNrYm94PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIj4KICAgICAgICAgIDxoMyBjbGFzcz0idG9vbHRpcC1jb250YWluZXIiPkJyaWdodG5lc3MgYWRqdXN0bWVudDwvaDM+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJyZXNldHRhYmxlLXNsaWRlci1jb250YWluZXIiPgogICAgICAgICAgICA8cGFwZXItc2xpZGVyIG1pbj0iMCIgbWF4PSIyIiBzbmFwcyBwaW4gc3RlcD0iMC4wMSIgdmFsdWU9Int7X2JyaWdodG5lc3NBZGp1c3RtZW50fX0iIGltbWVkaWF0ZS12YWx1ZT0ie3tfYnJpZ2h0bmVzc0FkanVzdG1lbnR9fSI+PC9wYXBlci1zbGlkZXI+CiAgICAgICAgICAgIDxwYXBlci1idXR0b24gY2xhc3M9IngtYnV0dG9uIiBvbi10YXA9Il9yZXNldEJyaWdodG5lc3MiIGRpc2FibGVkPSJbW19icmlnaHRuZXNzSXNEZWZhdWx0XV0iPlJlc2V0PC9wYXBlci1idXR0b24+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24iPgogICAgICAgICAgPGgzIGNsYXNzPSJ0b29sdGlwLWNvbnRhaW5lciI+Q29udHJhc3QgYWRqdXN0bWVudDwvaDM+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJyZXNldHRhYmxlLXNsaWRlci1jb250YWluZXIiPgogICAgICAgICAgICA8cGFwZXItc2xpZGVyIG1pbj0iMCIgbWF4PSI1MDAiIHNuYXBzIHBpbiBzdGVwPSIxIiB2YWx1ZT0ie3tfY29udHJhc3RQZXJjZW50YWdlfX0iIGltbWVkaWF0ZS12YWx1ZT0ie3tfY29udHJhc3RQZXJjZW50YWdlfX0iPjwvcGFwZXItc2xpZGVyPgogICAgICAgICAgICA8cGFwZXItYnV0dG9uIGNsYXNzPSJ4LWJ1dHRvbiIgb24tdGFwPSJfcmVzZXRDb250cmFzdCIgZGlzYWJsZWQ9IltbX2NvbnRyYXN0SXNEZWZhdWx0XV0iPlJlc2V0PC9wYXBlci1idXR0b24+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24iPgogICAgICAgICAgPHRmLXJ1bnMtc2VsZWN0b3IgaWQ9InJ1bnMtc2VsZWN0b3IiIHNlbGVjdGVkLXJ1bnM9Int7X3NlbGVjdGVkUnVuc319Ij48L3RmLXJ1bnMtc2VsZWN0b3I+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjZW50ZXIiIHNsb3Q9ImNlbnRlciI+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJuby1kYXRhLXdhcm5pbmciPgogICAgICAgICAgICA8aDM+Tm8gaW1hZ2UgZGF0YSB3YXMgZm91bmQuPC9oMz4KICAgICAgICAgICAgPHA+UHJvYmFibGUgY2F1c2VzOgogICAgICAgICAgICA8dWw+CiAgICAgICAgICAgICAgPGxpPllvdSBoYXZlbuKAmXQgd3JpdHRlbiBhbnkgaW1hZ2UgZGF0YSB0byB5b3VyIGV2ZW50IGZpbGVzLjwvbGk+CiAgICAgICAgICAgICAgPGxpPlRlbnNvckJvYXJkIGNhbuKAmXQgZmluZCB5b3VyIGV2ZW50IGZpbGVzLjwvbGk+CiAgICAgICAgICAgIDwvdWw+CgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICBJZiB5b3XigJlyZSBuZXcgdG8gdXNpbmcgVGVuc29yQm9hcmQsIGFuZCB3YW50IHRvIGZpbmQgb3V0IGhvdyB0bwogICAgICAgICAgICAgIGFkZCBkYXRhIGFuZCBzZXQgdXAgeW91ciBldmVudCBmaWxlcywgY2hlY2sgb3V0IHRoZQogICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCI+UkVBRE1FPC9hPgogICAgICAgICAgICAgIGFuZCBwZXJoYXBzIHRoZQogICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL2dldF9zdGFydGVkL3N1bW1hcmllc19hbmRfdGVuc29yYm9hcmQiPlRlbnNvckJvYXJkIHR1dG9yaWFsPC9hPi4KICAgICAgICAgICAgCgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICBJZiB5b3UgdGhpbmsgVGVuc29yQm9hcmQgaXMgY29uZmlndXJlZCBwcm9wZXJseSwgcGxlYXNlIHNlZQogICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCNteS10ZW5zb3Jib2FyZC1pc250LXNob3dpbmctYW55LWRhdGEtd2hhdHMtd3JvbmciPnRoZSBzZWN0aW9uIG9mIHRoZSBSRUFETUUgZGV2b3RlZCB0byBtaXNzaW5nIGRhdGEgcHJvYmxlbXM8L2E+CiAgICAgICAgICAgICAgYW5kIGNvbnNpZGVyIGZpbGluZyBhbiBpc3N1ZSBvbiBHaXRIdWIuCiAgICAgICAgICAgIAogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIV9kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8dGYtdGFnLWZpbHRlcmVyIHRhZy1maWx0ZXI9Int7X3RhZ0ZpbHRlcn19Ij48L3RmLXRhZy1maWx0ZXJlcj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX2NhdGVnb3JpZXNdXSIgYXM9ImNhdGVnb3J5Ij4KICAgICAgICAgICAgPHRmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3IGNhdGVnb3J5PSJbW2NhdGVnb3J5XV0iIGluaXRpYWwtb3BlbmVkPSJbW19zaG91bGRPcGVuKGluZGV4KV1dIj4KICAgICAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8dGYtaW1hZ2UtbG9hZGVyIGFjdGl2ZT0iW1thY3RpdmVdXSIgcnVuPSJbW2l0ZW0ucnVuXV0iIHRhZz0iW1tpdGVtLnRhZ11dIiBzYW1wbGU9IltbaXRlbS5zYW1wbGVdXSIgb2Ytc2FtcGxlcz0iW1tpdGVtLm9mU2FtcGxlc11dIiB0YWctbWV0YWRhdGE9IltbX3RhZ01ldGFkYXRhKF9ydW5Ub1RhZ0luZm8sIGl0ZW0ucnVuLCBpdGVtLnRhZyldXSIgcmVxdWVzdC1tYW5hZ2VyPSJbW19yZXF1ZXN0TWFuYWdlcl1dIiBhY3R1YWwtc2l6ZT0iW1tfYWN0dWFsU2l6ZV1dIiBicmlnaHRuZXNzLWFkanVzdG1lbnQ9IltbX2JyaWdodG5lc3NBZGp1c3RtZW50XV0iIGNvbnRyYXN0LXBlcmNlbnRhZ2U9IltbX2NvbnRyYXN0UGVyY2VudGFnZV1dIj48L3RmLWltYWdlLWxvYWRlcj4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8L3RmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L2Rpdj4KICAgIDwvdGYtZGFzaGJvYXJkLWxheW91dD4KICAgIDxzdHlsZSBpbmNsdWRlPSJkYXNoYm9hcmQtc3R5bGUiPjwvc3R5bGU+CiAgICA8c3R5bGU+CiAgICAgIC5yZXNldHRhYmxlLXNsaWRlci1jb250YWluZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIH0KICAgICAgLnJlc2V0dGFibGUtc2xpZGVyLWNvbnRhaW5lciBwYXBlci1zbGlkZXIgewogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgfQogICAgICAucmVzZXR0YWJsZS1zbGlkZXItY29udGFpbmVyIHBhcGVyLWJ1dHRvbiB7CiAgICAgICAgZmxleC1ncm93OiAwOwogICAgICB9CiAgICAgIC5yZXNldHRhYmxlLXNsaWRlci1jb250YWluZXIgcGFwZXItYnV0dG9uW2Rpc2FibGVkXSB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdW5zZXQ7CiAgICAgIH0KICAgICAgLngtYnV0dG9uIHsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tdGItdWktbGlnaHQtYWNjZW50KTsKICAgICAgICBjb2xvcjogdmFyKC0tdGItdWktZGFyay1hY2NlbnQpOwogICAgICB9CiAgICAgIGgzIHsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItZ3JleS04MDApOwogICAgICAgIG1hcmdpbjogMDsKICAgICAgICBmb250LXdlaWdodDogbm9ybWFsOwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBtYXJnaW4tYm90dG9tOiA1cHg7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIH0KICAgICAgLm5vLWRhdGEtd2FybmluZyB7CiAgICAgICAgbWF4LXdpZHRoOiA1NDBweDsKICAgICAgICBtYXJnaW46IDgwcHggYXV0byAwIGF1dG87CiAgICAgIH0KICAgICAgcGFwZXItc2xpZGVyIHsKICAgICAgICAtLXBhcGVyLXNsaWRlci1hY3RpdmUtY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLWtub2ItY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLWtub2Itc3RhcnQtYm9yZGVyLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1rbm9iLXN0YXJ0LWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1tYXJrZXJzLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1waW4tY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLXBpbi1zdGFydC1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KICA8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdGYtaW1hZ2UtZGFzaGJvYXJkL3RmLWltYWdlLWRhc2hib2FyZC5odG1sLmpzClBvbHltZXIoe2lzOiJ0Zi1pbWFnZS1kYXNoYm9hcmQiLHByb3BlcnRpZXM6e19zZWxlY3RlZFJ1bnM6QXJyYXksX3J1blRvVGFnSW5mbzpPYmplY3QsX2RhdGFOb3RGb3VuZDpCb29sZWFuLF9hY3R1YWxTaXplOkJvb2xlYW4sX2RlZmF1bHRCcmlnaHRuZXNzQWRqdXN0bWVudDp7dHlwZTpOdW1iZXIsdmFsdWU6MSxyZWFkT25seTohMH0sX2RlZmF1bHRDb250cmFzdFBlcmNlbnRhZ2U6e3R5cGU6TnVtYmVyLHZhbHVlOjEwMCxyZWFkT25seTohMH0sX2JyaWdodG5lc3NBZGp1c3RtZW50Ont0eXBlOk51bWJlcix2YWx1ZToxfSxfY29udHJhc3RQZXJjZW50YWdlOnt0eXBlOk51bWJlcix2YWx1ZToxMDB9LF90YWdGaWx0ZXI6U3RyaW5nLF9icmlnaHRuZXNzSXNEZWZhdWx0Ont0eXBlOkJvb2xlYW4sY29tcHV0ZWQ6Il9jb21wdXRlQnJpZ2h0bmVzc0lzRGVmYXVsdChfYnJpZ2h0bmVzc0FkanVzdG1lbnQpIn0sX2NvbnRyYXN0SXNEZWZhdWx0Ont0eXBlOkJvb2xlYW4sY29tcHV0ZWQ6Il9jb21wdXRlQ29udHJhc3RJc0RlZmF1bHQoX2NvbnRyYXN0UGVyY2VudGFnZSkifSwKX2NhdGVnb3JpZXNEb21SZWFkeTpCb29sZWFuLF9jYXRlZ29yaWVzOnt0eXBlOkFycmF5LGNvbXB1dGVkOiJfbWFrZUNhdGVnb3JpZXMoX3J1blRvVGFnSW5mbywgX3NlbGVjdGVkUnVucywgX3RhZ0ZpbHRlciwgX2NhdGVnb3JpZXNEb21SZWFkeSkifSxfcmVxdWVzdE1hbmFnZXI6e3R5cGU6T2JqZWN0LHZhbHVlOigpPT5uZXcgUGsuUmVxdWVzdE1hbmFnZXJ9fSxyZWFkeSgpe3RoaXMucmVsb2FkKCl9LHJlbG9hZCgpe3RoaXMuX2ZldGNoVGFncygpLnRoZW4oKCk9Pnt0aGlzLl9yZWxvYWRJbWFnZXMoKX0pfSxfZmV0Y2hUYWdzKCl7Y29uc3QgYT1Qay5nZXRSb3V0ZXIoKS5wbHVnaW5Sb3V0ZSgiaW1hZ2VzIiwiL3RhZ3MiKTtyZXR1cm4gdGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdChhKS50aGVuKGM9PntpZighXy5pc0VxdWFsKGMsdGhpcy5fcnVuVG9UYWdJbmZvKSl7dmFyIGQ9Xy5tYXBWYWx1ZXMoYyxmPT5PYmplY3Qua2V5cyhmKSk7ZD1Qay5nZXRUYWdzKGQpO3RoaXMuc2V0KCJfZGF0YU5vdEZvdW5kIiwKMD09PWQubGVuZ3RoKTt0aGlzLnNldCgiX3J1blRvVGFnSW5mbyIsYyk7dGhpcy5hc3luYygoKT0+e3RoaXMuc2V0KCJfY2F0ZWdvcmllc0RvbVJlYWR5IiwhMCl9KX19KX0sX3JlbG9hZEltYWdlcygpe3RoaXMucm9vdC5xdWVyeVNlbGVjdG9yQWxsKCJ0Zi1pbWFnZS1sb2FkZXIiKS5mb3JFYWNoKGE9PnthLnJlbG9hZCgpfSl9LF9zaG91bGRPcGVuKGEpe3JldHVybiAyPj1hfSxfcmVzZXRCcmlnaHRuZXNzKCl7dGhpcy5fYnJpZ2h0bmVzc0FkanVzdG1lbnQ9dGhpcy5fZGVmYXVsdEJyaWdodG5lc3NBZGp1c3RtZW50fSxfcmVzZXRDb250cmFzdCgpe3RoaXMuX2NvbnRyYXN0UGVyY2VudGFnZT10aGlzLl9kZWZhdWx0Q29udHJhc3RQZXJjZW50YWdlfSxfY29tcHV0ZUJyaWdodG5lc3NJc0RlZmF1bHQoYSl7cmV0dXJuIGE9PT10aGlzLl9kZWZhdWx0QnJpZ2h0bmVzc0FkanVzdG1lbnR9LF9jb21wdXRlQ29udHJhc3RJc0RlZmF1bHQoYSl7cmV0dXJuIGE9PT10aGlzLl9kZWZhdWx0Q29udHJhc3RQZXJjZW50YWdlfSwKX21ha2VDYXRlZ29yaWVzKGEsYyxkKXtmdW5jdGlvbiBmKGwpe2NvbnN0IGs9YVtsLnJ1bl1bbC50YWddLnNhbXBsZXM7cmV0dXJuIF8ucmFuZ2UoaykubWFwKG09Pk9iamVjdC5hc3NpZ24oe30sbCx7c2FtcGxlOm0sb2ZTYW1wbGVzOmt9KSl9Y29uc3QgZz1fLm1hcFZhbHVlcyhhLGw9Pk9iamVjdC5rZXlzKGwpKTtyZXR1cm4gUWsuY2F0ZWdvcml6ZVJ1blRhZ0NvbWJpbmF0aW9ucyhnLGMsZCkubWFwKGw9Pk9iamVjdC5hc3NpZ24oe30sbCx7aXRlbXM6W10uY29uY2F0LmFwcGx5KFtdLGwuaXRlbXMubWFwKGYpKX0pKX0sX3RhZ01ldGFkYXRhKGEsYyxkKXtyZXR1cm4gYVtjXVtkXX19KTsKPC9zY3JpcHQ+CjwvZG9tLW1vZHVsZT4KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgo8ZG9tLW1vZHVsZSBpZD0idGYtYXVkaW8tbG9hZGVyIj4KICA8dGVtcGxhdGU+CiAgICA8dGYtY2FyZC1oZWFkaW5nIHRhZz0iW1t0YWddXSIgcnVuPSJbW3J1bl1dIiBkaXNwbGF5LW5hbWU9IltbdGFnTWV0YWRhdGEuZGlzcGxheU5hbWVdXSIgZGVzY3JpcHRpb249IltbdGFnTWV0YWRhdGEuZGVzY3JpcHRpb25dXSIgY29sb3I9IltbX3J1bkNvbG9yXV0iPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2hhc011bHRpcGxlU2FtcGxlc11dIj4KICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nLXJvdyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nLWxhYmVsIj4KICAgICAgICAgICAgc2FtcGxlOiBbW19zYW1wbGVUZXh0XV0gb2YgW1t0b3RhbFNhbXBsZXNdXQogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaGFzQXRMZWFzdE9uZVN0ZXBdXSI+CiAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGluZy1yb3ciPgogICAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGluZy1sYWJlbCI+CiAgICAgICAgICAgIHN0ZXAgPHN0cm9uZz5bW19jdXJyZW50RGF0dW0uc3RlcF1dPC9zdHJvbmc+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfY3VycmVudERhdHVtLndhbGxfdGltZV1dIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGluZy1sYWJlbCBoZWFkaW5nLXJpZ2h0Ij4KICAgICAgICAgICAgICBbW19jdXJyZW50RGF0dW0ud2FsbF90aW1lXV0KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvZGl2PgogICAgICA8L3RlbXBsYXRlPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2hhc011bHRpcGxlU3RlcHNdXSI+CiAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGluZy1yb3ciPgogICAgICAgICAgPHBhcGVyLXNsaWRlciBpZD0ic3RlcHMiIGltbWVkaWF0ZS12YWx1ZT0ie3tfc3RlcEluZGV4fX0iIG1heD0iW1tfbWF4U3RlcEluZGV4XV0iIG1heC1tYXJrZXJzPSJbW19tYXhTdGVwSW5kZXhdXSIgc25hcHMgc3RlcD0iMSIgdmFsdWU9Int7X3N0ZXBJbmRleH19Ij48L3BhcGVyLXNsaWRlcj4KICAgICAgICA8L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgIDwvdGYtY2FyZC1oZWFkaW5nPgogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19oYXNBdExlYXN0T25lU3RlcF1dIj4KICAgICAgPGF1ZGlvIGNvbnRyb2xzIHNyYyQ9IltbX2N1cnJlbnREYXR1bS51cmxdXSIgdHlwZSQ9IltbX2N1cnJlbnREYXR1bS5jb250ZW50VHlwZV1dIj48L2F1ZGlvPgogICAgICA8dGYtbWFya2Rvd24tdmlldyBodG1sPSJbW19jdXJyZW50RGF0dW0ubGFiZWxdXSI+PC90Zi1tYXJrZG93bi12aWV3PgogICAgPC90ZW1wbGF0ZT4KICAgIDxkaXYgaWQ9Im1haW4tYXVkaW8tY29udGFpbmVyIj48L2Rpdj4KCiAgICA8c3R5bGUgaW5jbHVkZT0idGYtY2FyZC1oZWFkaW5nLXN0eWxlIj4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHdpZHRoOiAzNTBweDsKICAgICAgICBoZWlnaHQ6IGF1dG87CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIC0tc3RlcC1zbGlkZXIta25vYi1jb2xvcjogIzQyNDI0MjsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDE1cHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTVweDsKICAgICAgfQoKICAgICAgI3N0ZXBzIHsKICAgICAgICBoZWlnaHQ6IDE1cHg7CiAgICAgICAgbWFyZ2luOiAwIDAgMCAtMTVweDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgIHBhZGRpbmc6IDAgNXB4OyAvKiBzbyB0aGUgc2xpZGVyIGtub2IgZG9lc24ndCBidXR0IG91dCAqLwogICAgICAgIG1hcmdpbi10b3A6IDVweDsKICAgICAgICAtLXBhcGVyLXNsaWRlci1hY3RpdmUtY29sb3I6IHZhcigtLXN0ZXAtc2xpZGVyLWtub2ItY29sb3IpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLWtub2ItY29sb3I6IHZhcigtLXN0ZXAtc2xpZGVyLWtub2ItY29sb3IpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLXBpbi1jb2xvcjogdmFyKC0tc3RlcC1zbGlkZXIta25vYi1jb2xvcik7CiAgICAgICAgLS1wYXBlci1zbGlkZXIta25vYi1zdGFydC1jb2xvcjogdmFyKC0tc3RlcC1zbGlkZXIta25vYi1jb2xvcik7CiAgICAgICAgLS1wYXBlci1zbGlkZXIta25vYi1zdGFydC1ib3JkZXItY29sb3I6IHZhcigtLXN0ZXAtc2xpZGVyLWtub2ItY29sb3IpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLXBpbi1zdGFydC1jb2xvcjogdmFyKC0tc3RlcC1zbGlkZXIta25vYi1jb2xvcik7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KICA8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdGYtYXVkaW8tZGFzaGJvYXJkL3RmLWF1ZGlvLWxvYWRlci5odG1sLmpzClBvbHltZXIoe2lzOiJ0Zi1hdWRpby1sb2FkZXIiLHByb3BlcnRpZXM6e3J1bjpTdHJpbmcsdGFnOlN0cmluZyxzYW1wbGU6TnVtYmVyLHRvdGFsU2FtcGxlczpOdW1iZXIsdGFnTWV0YWRhdGE6T2JqZWN0LF9ydW5Db2xvcjp7dHlwZTpTdHJpbmcsY29tcHV0ZWQ6Il9jb21wdXRlUnVuQ29sb3IocnVuKSJ9LHJlcXVlc3RNYW5hZ2VyOk9iamVjdCxfbWV0YWRhdGFDYW5jZWxsZXI6e3R5cGU6T2JqZWN0LHZhbHVlOigpPT5uZXcgUGsuQ2FuY2VsbGVyfSxfc3RlcHM6e3R5cGU6QXJyYXksdmFsdWU6KCk9PltdfSxfc3RlcEluZGV4Ok51bWJlcixfaGFzQXRMZWFzdE9uZVN0ZXA6e3R5cGU6Qm9vbGVhbixjb21wdXRlZDoiX2NvbXB1dGVIYXNBdExlYXN0T25lU3RlcChfc3RlcHMpIn0sX2hhc011bHRpcGxlU3RlcHM6e3R5cGU6Qm9vbGVhbixjb21wdXRlZDoiX2NvbXB1dGVIYXNNdWx0aXBsZVN0ZXBzKF9zdGVwcykifSxfY3VycmVudERhdHVtOnt0eXBlOk9iamVjdCxjb21wdXRlZDoiX2NvbXB1dGVDdXJyZW50RGF0dW0oX3N0ZXBzLCBfc3RlcEluZGV4KSJ9LApfbWF4U3RlcEluZGV4Ont0eXBlOk51bWJlcixjb21wdXRlZDoiX2NvbXB1dGVNYXhTdGVwSW5kZXgoX3N0ZXBzKSJ9LF9zYW1wbGVUZXh0Ont0eXBlOlN0cmluZyxjb21wdXRlZDoiX2NvbXB1dGVTYW1wbGVUZXh0KHNhbXBsZSkifSxfaGFzTXVsdGlwbGVTYW1wbGVzOnt0eXBlOkJvb2xlYW4sY29tcHV0ZWQ6Il9jb21wdXRlSGFzTXVsdGlwbGVTYW1wbGVzKHRvdGFsU2FtcGxlcykifX0sb2JzZXJ2ZXJzOlsicmVsb2FkKHJ1biwgdGFnKSJdLF9jb21wdXRlUnVuQ29sb3IoYSl7cmV0dXJuIFpsLnJ1bnNDb2xvclNjYWxlKGEpfSxfY29tcHV0ZUhhc0F0TGVhc3RPbmVTdGVwKGEpe3JldHVybiEhYSYmMDxhLmxlbmd0aH0sX2NvbXB1dGVIYXNNdWx0aXBsZVN0ZXBzKGEpe3JldHVybiEhYSYmMTxhLmxlbmd0aH0sX2NvbXB1dGVNYXhTdGVwSW5kZXgoYSl7cmV0dXJuIGEubGVuZ3RoLTF9LF9jb21wdXRlQ3VycmVudERhdHVtKGEsYyl7cmV0dXJuIGFbY119LF9jb21wdXRlU2FtcGxlVGV4dChhKXtyZXR1cm5gJHthKwoxfWB9LF9jb21wdXRlSGFzTXVsdGlwbGVTYW1wbGVzKGEpe3JldHVybiAxPGF9LGF0dGFjaGVkKCl7dGhpcy5fYXR0YWNoZWQ9ITA7dGhpcy5yZWxvYWQoKX0scmVsb2FkKCl7aWYodGhpcy5fYXR0YWNoZWQpe3RoaXMuX21ldGFkYXRhQ2FuY2VsbGVyLmNhbmNlbEFsbCgpO3ZhciBhPVBrLmdldFJvdXRlcigpLnBsdWdpblJvdXRlKCJhdWRpbyIsIi9hdWRpbyIsbmV3IFVSTFNlYXJjaFBhcmFtcyh7dGFnOnRoaXMudGFnLHJ1bjp0aGlzLnJ1bixzYW1wbGU6dGhpcy5zYW1wbGV9KSksYz10aGlzLl9tZXRhZGF0YUNhbmNlbGxlci5jYW5jZWxsYWJsZShkPT57ZC5jYW5jZWxsZWR8fChkPWQudmFsdWUubWFwKHRoaXMuX2NyZWF0ZVN0ZXBEYXR1bS5iaW5kKHRoaXMpKSx0aGlzLnNldCgiX3N0ZXBzIixkKSx0aGlzLnNldCgiX3N0ZXBJbmRleCIsZC5sZW5ndGgtMSkpfSk7dGhpcy5yZXF1ZXN0TWFuYWdlci5yZXF1ZXN0KGEpLnRoZW4oYyl9fSxfY3JlYXRlU3RlcERhdHVtKGEpe3ZhciBjPQpuZXcgVVJMU2VhcmNoUGFyYW1zKGEucXVlcnkpO2MuYXBwZW5kKCJ0cyIsYS53YWxsX3RpbWUpO2M9UGsuZ2V0Um91dGVyKCkucGx1Z2luUm91dGUoImF1ZGlvIiwiL2luZGl2aWR1YWxBdWRpbyIsYyk7cmV0dXJue3dhbGxfdGltZTpmbS5mb3JtYXREYXRlKG5ldyBEYXRlKDFFMyphLndhbGxfdGltZSkpLHN0ZXA6YS5zdGVwLGxhYmVsOmEubGFiZWwsY29udGVudFR5cGU6YS5jb250ZW50VHlwZSx1cmw6Y319fSk7Cjwvc2NyaXB0Pgo8L2RvbS1tb2R1bGU+CgoKCjxkb20tbW9kdWxlIGlkPSJ0Zi1hdWRpby1kYXNoYm9hcmQiPgogIDx0ZW1wbGF0ZT4KICAgIDx0Zi1kYXNoYm9hcmQtbGF5b3V0PgogICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyIiBzbG90PSJzaWRlYmFyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24iPgogICAgICAgICAgPHRmLXJ1bnMtc2VsZWN0b3IgaWQ9InJ1bnMtc2VsZWN0b3IiIHNlbGVjdGVkLXJ1bnM9Int7X3NlbGVjdGVkUnVuc319Ij48L3RmLXJ1bnMtc2VsZWN0b3I+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjZW50ZXIiIHNsb3Q9ImNlbnRlciI+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJuby1kYXRhLXdhcm5pbmciPgogICAgICAgICAgICA8aDM+Tm8gYXVkaW8gZGF0YSB3YXMgZm91bmQuPC9oMz4KICAgICAgICAgICAgPHA+UHJvYmFibGUgY2F1c2VzOgogICAgICAgICAgICA8dWw+CiAgICAgICAgICAgICAgPGxpPllvdSBoYXZlbuKAmXQgd3JpdHRlbiBhbnkgYXVkaW8gZGF0YSB0byB5b3VyIGV2ZW50IGZpbGVzLjwvbGk+CiAgICAgICAgICAgICAgPGxpPlRlbnNvckJvYXJkIGNhbuKAmXQgZmluZCB5b3VyIGV2ZW50IGZpbGVzLjwvbGk+CiAgICAgICAgICAgIDwvdWw+CgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICBJZiB5b3XigJlyZSBuZXcgdG8gdXNpbmcgVGVuc29yQm9hcmQsIGFuZCB3YW50IHRvIGZpbmQgb3V0IGhvdyB0bwogICAgICAgICAgICAgIGFkZCBkYXRhIGFuZCBzZXQgdXAgeW91ciBldmVudCBmaWxlcywgY2hlY2sgb3V0IHRoZQogICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCI+UkVBRE1FPC9hPgogICAgICAgICAgICAgIGFuZCBwZXJoYXBzIHRoZQogICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL2dldF9zdGFydGVkL3N1bW1hcmllc19hbmRfdGVuc29yYm9hcmQiPlRlbnNvckJvYXJkIHR1dG9yaWFsPC9hPi4KICAgICAgICAgICAgCgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICBJZiB5b3UgdGhpbmsgVGVuc29yQm9hcmQgaXMgY29uZmlndXJlZCBwcm9wZXJseSwgcGxlYXNlIHNlZQogICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCNteS10ZW5zb3Jib2FyZC1pc250LXNob3dpbmctYW55LWRhdGEtd2hhdHMtd3JvbmciPnRoZSBzZWN0aW9uIG9mIHRoZSBSRUFETUUgZGV2b3RlZCB0byBtaXNzaW5nIGRhdGEgcHJvYmxlbXM8L2E+CiAgICAgICAgICAgICAgYW5kIGNvbnNpZGVyIGZpbGluZyBhbiBpc3N1ZSBvbiBHaXRIdWIuCiAgICAgICAgICAgIAogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIV9kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8dGYtdGFnLWZpbHRlcmVyIHRhZy1maWx0ZXI9Int7X3RhZ0ZpbHRlcn19Ij48L3RmLXRhZy1maWx0ZXJlcj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX2NhdGVnb3JpZXNdXSIgYXM9ImNhdGVnb3J5Ij4KICAgICAgICAgICAgPHRmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3IGNhdGVnb3J5PSJbW2NhdGVnb3J5XV0iIGluaXRpYWwtb3BlbmVkPSJbW19zaG91bGRPcGVuKGluZGV4KV1dIj4KICAgICAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8dGYtYXVkaW8tbG9hZGVyIGFjdGl2ZT0iW1thY3RpdmVdXSIgcnVuPSJbW2l0ZW0ucnVuXV0iIHRhZz0iW1tpdGVtLnRhZ11dIiBzYW1wbGU9IltbaXRlbS5zYW1wbGVdXSIgdG90YWwtc2FtcGxlcz0iW1tpdGVtLnRvdGFsU2FtcGxlc11dIiB0YWctbWV0YWRhdGE9IltbX3RhZ01ldGFkYXRhKF9ydW5Ub1RhZ0luZm8sIGl0ZW0ucnVuLCBpdGVtLnRhZyldXSIgcmVxdWVzdC1tYW5hZ2VyPSJbW19yZXF1ZXN0TWFuYWdlcl1dIj48L3RmLWF1ZGlvLWxvYWRlcj4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8L3RmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L2Rpdj4KICAgIDwvdGYtZGFzaGJvYXJkLWxheW91dD4KICAgIDxzdHlsZSBpbmNsdWRlPSJkYXNoYm9hcmQtc3R5bGUiPjwvc3R5bGU+CiAgICA8c3R5bGU+CiAgICAgIC5uby1kYXRhLXdhcm5pbmcgewogICAgICAgIG1heC13aWR0aDogNTQwcHg7CiAgICAgICAgbWFyZ2luOiA4MHB4IGF1dG8gMCBhdXRvOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CiAgPHNjcmlwdD4vL35+V0VCUEFUSH5+L3RmLWF1ZGlvLWRhc2hib2FyZC90Zi1hdWRpby1kYXNoYm9hcmQuaHRtbC5qcwpQb2x5bWVyKHtpczoidGYtYXVkaW8tZGFzaGJvYXJkIixwcm9wZXJ0aWVzOntfc2VsZWN0ZWRSdW5zOkFycmF5LF9ydW5Ub1RhZ0luZm86T2JqZWN0LF9kYXRhTm90Rm91bmQ6Qm9vbGVhbixfdGFnRmlsdGVyOnt0eXBlOlN0cmluZyx2YWx1ZToiIn0sX2NhdGVnb3JpZXM6e3R5cGU6QXJyYXksY29tcHV0ZWQ6Il9tYWtlQ2F0ZWdvcmllcyhfcnVuVG9UYWdJbmZvLCBfc2VsZWN0ZWRSdW5zLCBfdGFnRmlsdGVyKSJ9LF9yZXF1ZXN0TWFuYWdlcjp7dHlwZTpPYmplY3QsdmFsdWU6KCk9Pm5ldyBQay5SZXF1ZXN0TWFuYWdlcn19LHJlYWR5KCl7dGhpcy5yZWxvYWQoKX0scmVsb2FkKCl7dGhpcy5fZmV0Y2hUYWdzKCkudGhlbigoKT0+e3RoaXMuX3JlbG9hZEF1ZGlvKCl9KX0sX2ZldGNoVGFncygpe2NvbnN0IGE9UGsuZ2V0Um91dGVyKCkucGx1Z2luUm91dGUoImF1ZGlvIiwiL3RhZ3MiKTtyZXR1cm4gdGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdChhKS50aGVuKGM9PntpZighXy5pc0VxdWFsKGMsCnRoaXMuX3J1blRvVGFnSW5mbykpe3ZhciBkPV8ubWFwVmFsdWVzKGMsZj0+T2JqZWN0LmtleXMoZikpO2Q9UGsuZ2V0VGFncyhkKTt0aGlzLnNldCgiX2RhdGFOb3RGb3VuZCIsMD09PWQubGVuZ3RoKTt0aGlzLnNldCgiX3J1blRvVGFnSW5mbyIsYyl9fSl9LF9yZWxvYWRBdWRpbygpe3RoaXMucm9vdC5xdWVyeVNlbGVjdG9yQWxsKCJ0Zi1hdWRpby1sb2FkZXIiKS5mb3JFYWNoKGE9PnthLnJlbG9hZCgpfSl9LF9zaG91bGRPcGVuKGEpe3JldHVybiAyPj1hfSxfbWFrZUNhdGVnb3JpZXMoYSxjLGQpe2Z1bmN0aW9uIGYobCl7Y29uc3Qgaz1hW2wucnVuXVtsLnRhZ10uc2FtcGxlcztyZXR1cm4gXy5yYW5nZShrKS5tYXAobT0+T2JqZWN0LmFzc2lnbih7fSxsLHtzYW1wbGU6bSx0b3RhbFNhbXBsZXM6a30pKX1jb25zdCBnPV8ubWFwVmFsdWVzKGEsbD0+T2JqZWN0LmtleXMobCkpO3JldHVybiBRay5jYXRlZ29yaXplUnVuVGFnQ29tYmluYXRpb25zKGcsYyxkKS5tYXAobD0+T2JqZWN0LmFzc2lnbih7fSwKbCx7aXRlbXM6W10uY29uY2F0LmFwcGx5KFtdLGwuaXRlbXMubWFwKGYpKX0pKX0sX3RhZ01ldGFkYXRhKGEsYyxkKXtyZXR1cm4gYVtjXVtkXX19KTsKPC9zY3JpcHQ+CjwvZG9tLW1vZHVsZT4KCgoKCgoKCgoKCgoKCjxkb20tbW9kdWxlIGlkPSJpcm9uLWF1dG9ncm93LXRleHRhcmVhIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHdpZHRoOiA0MDBweDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZDsKICAgICAgICBwYWRkaW5nOiAycHg7CiAgICAgICAgLW1vei1hcHBlYXJhbmNlOiB0ZXh0YXJlYTsKICAgICAgICAtd2Via2l0LWFwcGVhcmFuY2U6IHRleHRhcmVhOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC5taXJyb3ItdGV4dCB7CiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuOwogICAgICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDsKICAgICAgICBAYXBwbHkgLS1pcm9uLWF1dG9ncm93LXRleHRhcmVhOwogICAgICB9CgogICAgICAuZml0IHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtZml0OwogICAgICB9CgogICAgICB0ZXh0YXJlYSB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgYm9yZGVyOiBub25lOwogICAgICAgIHJlc2l6ZTogbm9uZTsKICAgICAgICBiYWNrZ3JvdW5kOiBpbmhlcml0OwogICAgICAgIGNvbG9yOiBpbmhlcml0OwogICAgICAgIC8qIHNlZSBjb21tZW50cyBpbiB0ZW1wbGF0ZSAqLwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBmb250LXNpemU6IGluaGVyaXQ7CiAgICAgICAgZm9udC1mYW1pbHk6IGluaGVyaXQ7CiAgICAgICAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7CiAgICAgICAgdGV4dC1hbGlnbjogaW5oZXJpdDsKICAgICAgICBAYXBwbHkgLS1pcm9uLWF1dG9ncm93LXRleHRhcmVhOwogICAgICB9CgogICAgICB0ZXh0YXJlYTo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlciB7CiAgICAgICAgQGFwcGx5IC0taXJvbi1hdXRvZ3Jvdy10ZXh0YXJlYS1wbGFjZWhvbGRlcjsKICAgICAgfQoKICAgICAgdGV4dGFyZWE6LW1vei1wbGFjZWhvbGRlciB7CiAgICAgICAgQGFwcGx5IC0taXJvbi1hdXRvZ3Jvdy10ZXh0YXJlYS1wbGFjZWhvbGRlcjsKICAgICAgfQoKICAgICAgdGV4dGFyZWE6Oi1tb3otcGxhY2Vob2xkZXIgewogICAgICAgIEBhcHBseSAtLWlyb24tYXV0b2dyb3ctdGV4dGFyZWEtcGxhY2Vob2xkZXI7CiAgICAgIH0KCiAgICAgIHRleHRhcmVhOi1tcy1pbnB1dC1wbGFjZWhvbGRlciB7CiAgICAgICAgQGFwcGx5IC0taXJvbi1hdXRvZ3Jvdy10ZXh0YXJlYS1wbGFjZWhvbGRlcjsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICAKICAgIAogICAgPGRpdiBpZD0ibWlycm9yIiBjbGFzcz0ibWlycm9yLXRleHQiIGFyaWEtaGlkZGVuPSJ0cnVlIj4mbmJzcDs8L2Rpdj4KCiAgICAKICAgIDxkaXYgY2xhc3M9InRleHRhcmVhLWNvbnRhaW5lciBmaXQiPgogICAgICA8dGV4dGFyZWEgaWQ9InRleHRhcmVhIiBuYW1lJD0iW1tuYW1lXV0iIGFyaWEtbGFiZWwkPSJbW2xhYmVsXV0iIGF1dG9jb21wbGV0ZSQ9IltbYXV0b2NvbXBsZXRlXV0iIGF1dG9mb2N1cyQ9IltbYXV0b2ZvY3VzXV0iIGlucHV0bW9kZSQ9IltbaW5wdXRtb2RlXV0iIHBsYWNlaG9sZGVyJD0iW1twbGFjZWhvbGRlcl1dIiByZWFkb25seSQ9IltbcmVhZG9ubHldXSIgcmVxdWlyZWQkPSJbW3JlcXVpcmVkXV0iIGRpc2FibGVkJD0iW1tkaXNhYmxlZF1dIiByb3dzJD0iW1tyb3dzXV0iIG1pbmxlbmd0aCQ9IltbbWlubGVuZ3RoXV0iIG1heGxlbmd0aCQ9IltbbWF4bGVuZ3RoXV0iPjwvdGV4dGFyZWE+CiAgICA8L2Rpdj4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+Cgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vaXJvbi1hdXRvZ3Jvdy10ZXh0YXJlYS9pcm9uLWF1dG9ncm93LXRleHRhcmVhLmh0bWwuanMKUG9seW1lcih7aXM6Imlyb24tYXV0b2dyb3ctdGV4dGFyZWEiLGJlaGF2aW9yczpbUG9seW1lci5Jcm9uVmFsaWRhdGFibGVCZWhhdmlvcixQb2x5bWVyLklyb25Db250cm9sU3RhdGVdLHByb3BlcnRpZXM6e3ZhbHVlOntvYnNlcnZlcjoiX3ZhbHVlQ2hhbmdlZCIsdHlwZTpTdHJpbmcsbm90aWZ5OiEwfSxiaW5kVmFsdWU6e29ic2VydmVyOiJfYmluZFZhbHVlQ2hhbmdlZCIsdHlwZTpTdHJpbmcsbm90aWZ5OiEwfSxyb3dzOnt0eXBlOk51bWJlcix2YWx1ZToxLG9ic2VydmVyOiJfdXBkYXRlQ2FjaGVkIn0sbWF4Um93czp7dHlwZTpOdW1iZXIsdmFsdWU6MCxvYnNlcnZlcjoiX3VwZGF0ZUNhY2hlZCJ9LGF1dG9jb21wbGV0ZTp7dHlwZTpTdHJpbmcsdmFsdWU6Im9mZiJ9LGF1dG9mb2N1czp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxpbnB1dG1vZGU6e3R5cGU6U3RyaW5nfSxwbGFjZWhvbGRlcjp7dHlwZTpTdHJpbmd9LHJlYWRvbmx5Ont0eXBlOlN0cmluZ30scmVxdWlyZWQ6e3R5cGU6Qm9vbGVhbn0sCm1pbmxlbmd0aDp7dHlwZTpOdW1iZXJ9LG1heGxlbmd0aDp7dHlwZTpOdW1iZXJ9LGxhYmVsOnt0eXBlOlN0cmluZ319LGxpc3RlbmVyczp7aW5wdXQ6Il9vbklucHV0In0sZ2V0IHRleHRhcmVhKCl7cmV0dXJuIHRoaXMuJC50ZXh0YXJlYX0sZ2V0IHNlbGVjdGlvblN0YXJ0KCl7cmV0dXJuIHRoaXMuJC50ZXh0YXJlYS5zZWxlY3Rpb25TdGFydH0sZ2V0IHNlbGVjdGlvbkVuZCgpe3JldHVybiB0aGlzLiQudGV4dGFyZWEuc2VsZWN0aW9uRW5kfSxzZXQgc2VsZWN0aW9uU3RhcnQoYSl7dGhpcy4kLnRleHRhcmVhLnNlbGVjdGlvblN0YXJ0PWF9LHNldCBzZWxlY3Rpb25FbmQoYSl7dGhpcy4kLnRleHRhcmVhLnNlbGVjdGlvbkVuZD1hfSxhdHRhY2hlZDpmdW5jdGlvbigpe25hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL2lQKD86W29hXWR8aG9uZSkvKSYmKHRoaXMuJC50ZXh0YXJlYS5zdHlsZS5tYXJnaW5MZWZ0PSItM3B4Iil9LHZhbGlkYXRlOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy4kLnRleHRhcmVhLnZhbGlkaXR5LnZhbGlkOwphJiYodGhpcy5yZXF1aXJlZCYmIiI9PT10aGlzLnZhbHVlP2E9ITE6dGhpcy5oYXNWYWxpZGF0b3IoKSYmKGE9UG9seW1lci5Jcm9uVmFsaWRhdGFibGVCZWhhdmlvci52YWxpZGF0ZS5jYWxsKHRoaXMsdGhpcy52YWx1ZSkpKTt0aGlzLmludmFsaWQ9IWE7dGhpcy5maXJlKCJpcm9uLWlucHV0LXZhbGlkYXRlIik7cmV0dXJuIGF9LF9iaW5kVmFsdWVDaGFuZ2VkOmZ1bmN0aW9uKGEpe3RoaXMudmFsdWU9YX0sX3ZhbHVlQ2hhbmdlZDpmdW5jdGlvbihhKXt2YXIgYz10aGlzLnRleHRhcmVhO2MmJihjLnZhbHVlIT09YSYmKGMudmFsdWU9YXx8MD09PWE/YToiIiksdGhpcy5iaW5kVmFsdWU9YSx0aGlzLiQubWlycm9yLmlubmVySFRNTD10aGlzLl92YWx1ZUZvck1pcnJvcigpLHRoaXMuZmlyZSgiYmluZC12YWx1ZS1jaGFuZ2VkIix7dmFsdWU6dGhpcy5iaW5kVmFsdWV9KSl9LF9vbklucHV0OmZ1bmN0aW9uKGEpe3ZhciBjPVBvbHltZXIuZG9tKGEpLnBhdGg7dGhpcy52YWx1ZT1jP2NbMF0udmFsdWU6CmEudGFyZ2V0LnZhbHVlfSxfY29uc3RyYWluOmZ1bmN0aW9uKGEpe2E9YXx8WyIiXTtmb3IoYT0wPHRoaXMubWF4Um93cyYmYS5sZW5ndGg+dGhpcy5tYXhSb3dzP2Euc2xpY2UoMCx0aGlzLm1heFJvd3MpOmEuc2xpY2UoMCk7MDx0aGlzLnJvd3MmJmEubGVuZ3RoPHRoaXMucm93czspYS5wdXNoKCIiKTtyZXR1cm4gYS5qb2luKCJceDNjYnIvXHgzZSIpKyJceDI2IzE2MDsifSxfdmFsdWVGb3JNaXJyb3I6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLnRleHRhcmVhO2lmKGEpcmV0dXJuIHRoaXMudG9rZW5zPWEmJmEudmFsdWU/YS52YWx1ZS5yZXBsYWNlKC8mL2dtLCJceDI2YW1wOyIpLnJlcGxhY2UoLyIvZ20sIlx4MjZxdW90OyIpLnJlcGxhY2UoLycvZ20sIlx4MjYjMzk7IikucmVwbGFjZSgvPC9nbSwiXHgyNmx0OyIpLnJlcGxhY2UoLz4vZ20sIlx4MjZndDsiKS5zcGxpdCgiXG4iKTpbIiJdLHRoaXMuX2NvbnN0cmFpbih0aGlzLnRva2Vucyl9LF91cGRhdGVDYWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLiQubWlycm9yLmlubmVySFRNTD0KdGhpcy5fY29uc3RyYWluKHRoaXMudG9rZW5zKX19KTsKPC9zY3JpcHQ+CgoKCgoKCgoKCjxkb20tbW9kdWxlIGlkPSJwYXBlci10ZXh0YXJlYSI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH0KCiAgICAgIDpob3N0KFtoaWRkZW5dKSB7CiAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgICB9CgogICAgICBsYWJlbCB7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPHBhcGVyLWlucHV0LWNvbnRhaW5lciBuby1sYWJlbC1mbG9hdCQ9Iltbbm9MYWJlbEZsb2F0XV0iIGFsd2F5cy1mbG9hdC1sYWJlbD0iW1tfY29tcHV0ZUFsd2F5c0Zsb2F0TGFiZWwoYWx3YXlzRmxvYXRMYWJlbCxwbGFjZWhvbGRlcildXSIgYXV0by12YWxpZGF0ZSQ9IltbYXV0b1ZhbGlkYXRlXV0iIGRpc2FibGVkJD0iW1tkaXNhYmxlZF1dIiBpbnZhbGlkPSJbW2ludmFsaWRdXSI+CgogICAgICA8bGFiZWwgaGlkZGVuJD0iW1shbGFiZWxdXSIgYXJpYS1oaWRkZW49InRydWUiIGZvciQ9IltbX2lucHV0SWRdXSIgc2xvdD0ibGFiZWwiPltbbGFiZWxdXTwvbGFiZWw+CgogICAgICA8aXJvbi1hdXRvZ3Jvdy10ZXh0YXJlYSBjbGFzcz0icGFwZXItaW5wdXQtaW5wdXQiIHNsb3Q9ImlucHV0IiBpZCQ9IltbX2lucHV0SWRdXSIgYXJpYS1sYWJlbGxlZGJ5JD0iW1tfYXJpYUxhYmVsbGVkQnldXSIgYXJpYS1kZXNjcmliZWRieSQ9IltbX2FyaWFEZXNjcmliZWRCeV1dIiBiaW5kLXZhbHVlPSJ7e3ZhbHVlfX0iIGludmFsaWQ9Int7aW52YWxpZH19IiB2YWxpZGF0b3IkPSJbW3ZhbGlkYXRvcl1dIiBkaXNhYmxlZCQ9IltbZGlzYWJsZWRdXSIgYXV0b2NvbXBsZXRlJD0iW1thdXRvY29tcGxldGVdXSIgYXV0b2ZvY3VzJD0iW1thdXRvZm9jdXNdXSIgaW5wdXRtb2RlJD0iW1tpbnB1dG1vZGVdXSIgbmFtZSQ9IltbbmFtZV1dIiBwbGFjZWhvbGRlciQ9IltbcGxhY2Vob2xkZXJdXSIgcmVhZG9ubHkkPSJbW3JlYWRvbmx5XV0iIHJlcXVpcmVkJD0iW1tyZXF1aXJlZF1dIiBtaW5sZW5ndGgkPSJbW21pbmxlbmd0aF1dIiBtYXhsZW5ndGgkPSJbW21heGxlbmd0aF1dIiBhdXRvY2FwaXRhbGl6ZSQ9IltbYXV0b2NhcGl0YWxpemVdXSIgcm93cyQ9Iltbcm93c11dIiBtYXgtcm93cyQ9IltbbWF4Um93c11dIiBvbi1jaGFuZ2U9Il9vbkNoYW5nZSI+PC9pcm9uLWF1dG9ncm93LXRleHRhcmVhPgoKICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2Vycm9yTWVzc2FnZV1dIj4KICAgICAgICA8cGFwZXItaW5wdXQtZXJyb3IgYXJpYS1saXZlPSJhc3NlcnRpdmUiIHNsb3Q9ImFkZC1vbiI+W1tlcnJvck1lc3NhZ2VdXTwvcGFwZXItaW5wdXQtZXJyb3I+CiAgICAgIDwvdGVtcGxhdGU+CgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbY2hhckNvdW50ZXJdXSI+CiAgICAgICAgPHBhcGVyLWlucHV0LWNoYXItY291bnRlciBzbG90PSJhZGQtb24iPjwvcGFwZXItaW5wdXQtY2hhci1jb3VudGVyPgogICAgICA8L3RlbXBsYXRlPgoKICAgIDwvcGFwZXItaW5wdXQtY29udGFpbmVyPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT4KCjxzY3JpcHQ+Ly9+fldFQlBBVEh+fi9wYXBlci1pbnB1dC9wYXBlci10ZXh0YXJlYS5odG1sLmpzClBvbHltZXIoe2lzOiJwYXBlci10ZXh0YXJlYSIsYmVoYXZpb3JzOltQb2x5bWVyLlBhcGVySW5wdXRCZWhhdmlvcixQb2x5bWVyLklyb25Gb3JtRWxlbWVudEJlaGF2aW9yXSxwcm9wZXJ0aWVzOntfYXJpYUxhYmVsbGVkQnk6e29ic2VydmVyOiJfYXJpYUxhYmVsbGVkQnlDaGFuZ2VkIix0eXBlOlN0cmluZ30sX2FyaWFEZXNjcmliZWRCeTp7b2JzZXJ2ZXI6Il9hcmlhRGVzY3JpYmVkQnlDaGFuZ2VkIix0eXBlOlN0cmluZ30sdmFsdWU6e3R5cGU6U3RyaW5nfSxyb3dzOnt0eXBlOk51bWJlcix2YWx1ZToxfSxtYXhSb3dzOnt0eXBlOk51bWJlcix2YWx1ZTowfX0sZ2V0IHNlbGVjdGlvblN0YXJ0KCl7cmV0dXJuIHRoaXMuJC5pbnB1dC50ZXh0YXJlYS5zZWxlY3Rpb25TdGFydH0sc2V0IHNlbGVjdGlvblN0YXJ0KGEpe3RoaXMuJC5pbnB1dC50ZXh0YXJlYS5zZWxlY3Rpb25TdGFydD1hfSxnZXQgc2VsZWN0aW9uRW5kKCl7cmV0dXJuIHRoaXMuJC5pbnB1dC50ZXh0YXJlYS5zZWxlY3Rpb25FbmR9LApzZXQgc2VsZWN0aW9uRW5kKGEpe3RoaXMuJC5pbnB1dC50ZXh0YXJlYS5zZWxlY3Rpb25FbmQ9YX0sX2FyaWFMYWJlbGxlZEJ5Q2hhbmdlZDpmdW5jdGlvbihhKXt0aGlzLl9mb2N1c2FibGVFbGVtZW50LnNldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbGxlZGJ5IixhKX0sX2FyaWFEZXNjcmliZWRCeUNoYW5nZWQ6ZnVuY3Rpb24oYSl7dGhpcy5fZm9jdXNhYmxlRWxlbWVudC5zZXRBdHRyaWJ1dGUoImFyaWEtZGVzY3JpYmVkYnkiLGEpfSxnZXQgX2ZvY3VzYWJsZUVsZW1lbnQoKXtyZXR1cm4gdGhpcy5pbnB1dEVsZW1lbnQudGV4dGFyZWF9fSk7Cjwvc2NyaXB0PgoKCgoKCgoKCgoKCjxkb20tbW9kdWxlIGlkPSJwYXBlci10b2FzdCI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcG9zaXRpb246IGZpeGVkOwogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLXRvYXN0LWJhY2tncm91bmQtY29sb3IsICMzMjMyMzIpOwogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci10b2FzdC1jb2xvciwgI2YxZjFmMSk7CiAgICAgICAgbWluLWhlaWdodDogNDhweDsKICAgICAgICBtaW4td2lkdGg6IDI4OHB4OwogICAgICAgIHBhZGRpbmc6IDE2cHggMjRweDsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgIGJveC1zaGFkb3c6IDAgMnB4IDVweCAwIHJnYmEoMCwgMCwgMCwgMC4yNik7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMnB4OwogICAgICAgIG1hcmdpbjogMTJweDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICAgIC13ZWJraXQtdHJhbnNpdGlvbjogLXdlYmtpdC10cmFuc2Zvcm0gMC4zcywgb3BhY2l0eSAwLjNzOwogICAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjNzLCBvcGFjaXR5IDAuM3M7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWSgxMDBweCk7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDEwMHB4KTsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1iYXNlOwogICAgICB9CgogICAgICA6aG9zdCguY2Fwc3VsZSkgewogICAgICAgIGJvcmRlci1yYWRpdXM6IDI0cHg7CiAgICAgIH0KCiAgICAgIDpob3N0KC5maXQtYm90dG9tKSB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgbWluLXdpZHRoOiAwOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDA7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICB9CgogICAgICA6aG9zdCgucGFwZXItdG9hc3Qtb3BlbikgewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMHB4KTsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMHB4KTsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8c3BhbiBpZD0ibGFiZWwiPnt7dGV4dH19PC9zcGFuPgogICAgPHNsb3Q+PC9zbG90PgogIDwvdGVtcGxhdGU+CgogIDxzY3JpcHQ+Ly9+fldFQlBBVEh+fi9wYXBlci10b2FzdC9wYXBlci10b2FzdC5odG1sLmpzCihmdW5jdGlvbigpe3ZhciBhPW51bGw7UG9seW1lcih7aXM6InBhcGVyLXRvYXN0IixiZWhhdmlvcnM6W1BvbHltZXIuSXJvbk92ZXJsYXlCZWhhdmlvcl0scHJvcGVydGllczp7Zml0SW50bzp7dHlwZTpPYmplY3QsdmFsdWU6d2luZG93LG9ic2VydmVyOiJfb25GaXRJbnRvQ2hhbmdlZCJ9LGhvcml6b250YWxBbGlnbjp7dHlwZTpTdHJpbmcsdmFsdWU6ImxlZnQifSx2ZXJ0aWNhbEFsaWduOnt0eXBlOlN0cmluZyx2YWx1ZToiYm90dG9tIn0sZHVyYXRpb246e3R5cGU6TnVtYmVyLHZhbHVlOjNFM30sdGV4dDp7dHlwZTpTdHJpbmcsdmFsdWU6IiJ9LG5vQ2FuY2VsT25PdXRzaWRlQ2xpY2s6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMH0sbm9BdXRvRm9jdXM6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMH19LGxpc3RlbmVyczp7dHJhbnNpdGlvbmVuZDoiX19vblRyYW5zaXRpb25FbmQifSxnZXQgdmlzaWJsZSgpe1BvbHltZXIuQmFzZS5fd2FybigiYHZpc2libGVgIGlzIGRlcHJlY2F0ZWQsIHVzZSBgb3BlbmVkYCBpbnN0ZWFkIik7CnJldHVybiB0aGlzLm9wZW5lZH0sZ2V0IF9jYW5BdXRvQ2xvc2UoKXtyZXR1cm4gMDx0aGlzLmR1cmF0aW9uJiZJbmZpbml0eSE9PXRoaXMuZHVyYXRpb259LGNyZWF0ZWQ6ZnVuY3Rpb24oKXt0aGlzLl9hdXRvQ2xvc2U9bnVsbDtQb2x5bWVyLklyb25BMTF5QW5ub3VuY2VyLnJlcXVlc3RBdmFpbGFiaWxpdHkoKX0sc2hvdzpmdW5jdGlvbihjKXsic3RyaW5nIj09dHlwZW9mIGMmJihjPXt0ZXh0OmN9KTtmb3IodmFyIGQgaW4gYykwPT09ZC5pbmRleE9mKCJfIik/UG9seW1lci5CYXNlLl93YXJuKCdUaGUgcHJvcGVydHkgIicrZCsnIiBpcyBwcml2YXRlIGFuZCB3YXMgbm90IHNldC4nKTpkIGluIHRoaXM/dGhpc1tkXT1jW2RdOlBvbHltZXIuQmFzZS5fd2FybignVGhlIHByb3BlcnR5ICInK2QrJyIgaXMgbm90IHZhbGlkLicpO3RoaXMub3BlbigpfSxoaWRlOmZ1bmN0aW9uKCl7dGhpcy5jbG9zZSgpfSxfX29uVHJhbnNpdGlvbkVuZDpmdW5jdGlvbihjKXtjJiZjLnRhcmdldD09PQp0aGlzJiYib3BhY2l0eSI9PT1jLnByb3BlcnR5TmFtZSYmKHRoaXMub3BlbmVkP3RoaXMuX2ZpbmlzaFJlbmRlck9wZW5lZCgpOnRoaXMuX2ZpbmlzaFJlbmRlckNsb3NlZCgpKX0sX29wZW5lZENoYW5nZWQ6ZnVuY3Rpb24oKXtudWxsIT09dGhpcy5fYXV0b0Nsb3NlJiYodGhpcy5jYW5jZWxBc3luYyh0aGlzLl9hdXRvQ2xvc2UpLHRoaXMuX2F1dG9DbG9zZT1udWxsKTt0aGlzLm9wZW5lZD8oYSYmYSE9PXRoaXMmJmEuY2xvc2UoKSxhPXRoaXMsdGhpcy5maXJlKCJpcm9uLWFubm91bmNlIix7dGV4dDp0aGlzLnRleHR9KSx0aGlzLl9jYW5BdXRvQ2xvc2UmJih0aGlzLl9hdXRvQ2xvc2U9dGhpcy5hc3luYyh0aGlzLmNsb3NlLHRoaXMuZHVyYXRpb24pKSk6YT09PXRoaXMmJihhPW51bGwpO1BvbHltZXIuSXJvbk92ZXJsYXlCZWhhdmlvckltcGwuX29wZW5lZENoYW5nZWQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxfcmVuZGVyT3BlbmVkOmZ1bmN0aW9uKCl7dGhpcy5jbGFzc0xpc3QuYWRkKCJwYXBlci10b2FzdC1vcGVuIil9LApfcmVuZGVyQ2xvc2VkOmZ1bmN0aW9uKCl7dGhpcy5jbGFzc0xpc3QucmVtb3ZlKCJwYXBlci10b2FzdC1vcGVuIil9LF9vbkZpdEludG9DaGFuZ2VkOmZ1bmN0aW9uKGMpe3RoaXMucG9zaXRpb25UYXJnZXQ9Y319KX0pKCk7Cjwvc2NyaXB0Pgo8L2RvbS1tb2R1bGU+CgoKCgoKCgoKCgoKCgoKCgoKPGRvbS1tb2R1bGUgaWQ9InBhcGVyLXRvZ2dsZS1idXR0b24iPgogIDx0ZW1wbGF0ZSBzdHJpcC13aGl0ZXNwYWNlPgoKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtaG9yaXpvbnRhbDsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtY2VudGVyOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLWJhc2U7CiAgICAgIH0KCiAgICAgIDpob3N0KFtkaXNhYmxlZF0pIHsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQoKICAgICAgOmhvc3QoOmZvY3VzKSB7CiAgICAgICAgb3V0bGluZTpub25lOwogICAgICB9CgogICAgICAudG9nZ2xlLWJhciB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgb3BhY2l0eTogMC40OwogICAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgbGluZWFyIC4wOHM7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItdG9nZ2xlLWJ1dHRvbi11bmNoZWNrZWQtYmFyLWNvbG9yLCAjMDAwMDAwKTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItdG9nZ2xlLWJ1dHRvbi11bmNoZWNrZWQtYmFyOwogICAgICB9CgogICAgICAudG9nZ2xlLWJ1dHRvbiB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogLTNweDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIGhlaWdodDogMjBweDsKICAgICAgICB3aWR0aDogMjBweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICAgICAgYm94LXNoYWRvdzogMCAxcHggNXB4IDAgcmdiYSgwLCAwLCAwLCAwLjYpOwogICAgICAgIHRyYW5zaXRpb246IC13ZWJraXQtdHJhbnNmb3JtIGxpbmVhciAuMDhzLCBiYWNrZ3JvdW5kLWNvbG9yIGxpbmVhciAuMDhzOwogICAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSBsaW5lYXIgLjA4cywgYmFja2dyb3VuZC1jb2xvciBsaW5lYXIgLjA4czsKICAgICAgICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtOwogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLXRvZ2dsZS1idXR0b24tdW5jaGVja2VkLWJ1dHRvbi1jb2xvciwgdmFyKC0tcGFwZXItZ3JleS01MCkpOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci10b2dnbGUtYnV0dG9uLXVuY2hlY2tlZC1idXR0b247CiAgICAgIH0KCiAgICAgIC50b2dnbGUtYnV0dG9uLmRyYWdnaW5nIHsKICAgICAgICAtd2Via2l0LXRyYW5zaXRpb246IG5vbmU7CiAgICAgICAgdHJhbnNpdGlvbjogbm9uZTsKICAgICAgfQoKICAgICAgOmhvc3QoW2NoZWNrZWRdOm5vdChbZGlzYWJsZWRdKSkgLnRvZ2dsZS1iYXIgewogICAgICAgIG9wYWNpdHk6IDAuNTsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci10b2dnbGUtYnV0dG9uLWNoZWNrZWQtYmFyLWNvbG9yLCB2YXIoLS1wcmltYXJ5LWNvbG9yKSk7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLXRvZ2dsZS1idXR0b24tY2hlY2tlZC1iYXI7CiAgICAgIH0KCiAgICAgIDpob3N0KFtkaXNhYmxlZF0pIC50b2dnbGUtYmFyIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwOwogICAgICAgIG9wYWNpdHk6IDAuMTI7CiAgICAgIH0KCiAgICAgIDpob3N0KFtjaGVja2VkXSkgLnRvZ2dsZS1idXR0b24gewogICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUoMTZweCwgMCk7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMTZweCwgMCk7CiAgICAgIH0KCiAgICAgIDpob3N0KFtjaGVja2VkXTpub3QoW2Rpc2FibGVkXSkpIC50b2dnbGUtYnV0dG9uIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci10b2dnbGUtYnV0dG9uLWNoZWNrZWQtYnV0dG9uLWNvbG9yLCB2YXIoLS1wcmltYXJ5LWNvbG9yKSk7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLXRvZ2dsZS1idXR0b24tY2hlY2tlZC1idXR0b247CiAgICAgIH0KCiAgICAgIDpob3N0KFtkaXNhYmxlZF0pIC50b2dnbGUtYnV0dG9uIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjYmRiZGJkOwogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgIH0KCiAgICAgIC50b2dnbGUtaW5rIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAtMTRweDsKICAgICAgICBsZWZ0OiAtMTRweDsKICAgICAgICByaWdodDogYXV0bzsKICAgICAgICBib3R0b206IGF1dG87CiAgICAgICAgd2lkdGg6IDQ4cHg7CiAgICAgICAgaGVpZ2h0OiA0OHB4OwogICAgICAgIG9wYWNpdHk6IDAuNTsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItdG9nZ2xlLWJ1dHRvbi11bmNoZWNrZWQtaW5rLWNvbG9yLCB2YXIoLS1wcmltYXJ5LXRleHQtY29sb3IpKTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItdG9nZ2xlLWJ1dHRvbi11bmNoZWNrZWQtaW5rOwogICAgICB9CgogICAgICA6aG9zdChbY2hlY2tlZF0pIC50b2dnbGUtaW5rIHsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItdG9nZ2xlLWJ1dHRvbi1jaGVja2VkLWluay1jb2xvciwgdmFyKC0tcHJpbWFyeS1jb2xvcikpOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci10b2dnbGUtYnV0dG9uLWNoZWNrZWQtaW5rOwogICAgICB9CgogICAgICAudG9nZ2xlLWNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB3aWR0aDogMzZweDsKICAgICAgICBoZWlnaHQ6IDE0cHg7CiAgICAgICAgLyogVGhlIHRvZ2dsZSBidXR0b24gaGFzIGFuIGFic29sdXRlIHBvc2l0aW9uIG9mIC0zcHg7IFRoZSBleHRyYSAxcHgKICAgICAgICAvKiBhY2NvdW50cyBmb3IgdGhlIHRvZ2dsZSBidXR0b24gc2hhZG93IGJveC4gKi8KICAgICAgICBtYXJnaW46IDRweCAxcHg7CiAgICAgIH0KCiAgICAgIC50b2dnbGUtbGFiZWwgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKICAgICAgICBwYWRkaW5nLWxlZnQ6IHZhcigtLXBhcGVyLXRvZ2dsZS1idXR0b24tbGFiZWwtc3BhY2luZywgOHB4KTsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItdG9nZ2xlLWJ1dHRvbi1sYWJlbC1jb2xvciwgdmFyKC0tcHJpbWFyeS10ZXh0LWNvbG9yKSk7CiAgICAgIH0KCiAgICAgIC8qIGludmFsaWQgc3RhdGUgKi8KICAgICAgOmhvc3QoW2ludmFsaWRdKSAudG9nZ2xlLWJhciB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItdG9nZ2xlLWJ1dHRvbi1pbnZhbGlkLWJhci1jb2xvciwgdmFyKC0tZXJyb3ItY29sb3IpKTsKICAgICAgfQoKICAgICAgOmhvc3QoW2ludmFsaWRdKSAudG9nZ2xlLWJ1dHRvbiB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItdG9nZ2xlLWJ1dHRvbi1pbnZhbGlkLWJ1dHRvbi1jb2xvciwgdmFyKC0tZXJyb3ItY29sb3IpKTsKICAgICAgfQoKICAgICAgOmhvc3QoW2ludmFsaWRdKSAudG9nZ2xlLWluayB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLXRvZ2dsZS1idXR0b24taW52YWxpZC1pbmstY29sb3IsIHZhcigtLWVycm9yLWNvbG9yKSk7CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPGRpdiBjbGFzcz0idG9nZ2xlLWNvbnRhaW5lciI+CiAgICAgIDxkaXYgaWQ9InRvZ2dsZUJhciIgY2xhc3M9InRvZ2dsZS1iYXIiPjwvZGl2PgogICAgICA8ZGl2IGlkPSJ0b2dnbGVCdXR0b24iIGNsYXNzPSJ0b2dnbGUtYnV0dG9uIj48L2Rpdj4KICAgIDwvZGl2PgoKICAgIDxkaXYgY2xhc3M9InRvZ2dsZS1sYWJlbCI+PHNsb3Q+PC9zbG90PjwvZGl2PgoKICA8L3RlbXBsYXRlPgoKICA8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vcGFwZXItdG9nZ2xlLWJ1dHRvbi9wYXBlci10b2dnbGUtYnV0dG9uLmh0bWwuanMKUG9seW1lcih7aXM6InBhcGVyLXRvZ2dsZS1idXR0b24iLGJlaGF2aW9yczpbUG9seW1lci5QYXBlckNoZWNrZWRFbGVtZW50QmVoYXZpb3JdLGhvc3RBdHRyaWJ1dGVzOntyb2xlOiJidXR0b24iLCJhcmlhLXByZXNzZWQiOiJmYWxzZSIsdGFiaW5kZXg6MH0scHJvcGVydGllczp7fSxsaXN0ZW5lcnM6e3RyYWNrOiJfb250cmFjayJ9LGF0dGFjaGVkOmZ1bmN0aW9uKCl7UG9seW1lci5SZW5kZXJTdGF0dXMuYWZ0ZXJOZXh0UmVuZGVyKHRoaXMsZnVuY3Rpb24oKXtQb2x5bWVyLkdlc3R1cmVzLnNldFRvdWNoQWN0aW9uKHRoaXMsInBhbi15Iil9KX0sX29udHJhY2s6ZnVuY3Rpb24oYSl7YT1hLmRldGFpbDsic3RhcnQiPT09YS5zdGF0ZT90aGlzLl90cmFja1N0YXJ0KGEpOiJ0cmFjayI9PT1hLnN0YXRlP3RoaXMuX3RyYWNrTW92ZShhKToiZW5kIj09PWEuc3RhdGUmJnRoaXMuX3RyYWNrRW5kKGEpfSxfdHJhY2tTdGFydDpmdW5jdGlvbigpe3RoaXMuX3dpZHRoPXRoaXMuJC50b2dnbGVCYXIub2Zmc2V0V2lkdGgvCjI7dGhpcy5fdHJhY2tDaGVja2VkPXRoaXMuY2hlY2tlZDt0aGlzLiQudG9nZ2xlQnV0dG9uLmNsYXNzTGlzdC5hZGQoImRyYWdnaW5nIil9LF90cmFja01vdmU6ZnVuY3Rpb24oYSl7YT1hLmR4O3RoaXMuX3g9TWF0aC5taW4odGhpcy5fd2lkdGgsTWF0aC5tYXgoMCx0aGlzLl90cmFja0NoZWNrZWQ/dGhpcy5fd2lkdGgrYTphKSk7dGhpcy50cmFuc2xhdGUzZCh0aGlzLl94KyJweCIsMCwwLHRoaXMuJC50b2dnbGVCdXR0b24pO3RoaXMuX3VzZXJBY3RpdmF0ZSh0aGlzLl94PnRoaXMuX3dpZHRoLzIpfSxfdHJhY2tFbmQ6ZnVuY3Rpb24oKXt0aGlzLiQudG9nZ2xlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoImRyYWdnaW5nIik7dGhpcy50cmFuc2Zvcm0oIiIsdGhpcy4kLnRvZ2dsZUJ1dHRvbil9LF9jcmVhdGVSaXBwbGU6ZnVuY3Rpb24oKXt0aGlzLl9yaXBwbGVDb250YWluZXI9dGhpcy4kLnRvZ2dsZUJ1dHRvbjt2YXIgYT1Qb2x5bWVyLlBhcGVyUmlwcGxlQmVoYXZpb3IuX2NyZWF0ZVJpcHBsZSgpOwphLmlkPSJpbmsiO2Euc2V0QXR0cmlidXRlKCJyZWNlbnRlcnMiLCIiKTthLmNsYXNzTGlzdC5hZGQoImNpcmNsZSIsInRvZ2dsZS1pbmsiKTtyZXR1cm4gYX19KTsKPC9zY3JpcHQ+CjwvZG9tLW1vZHVsZT4KCgoKCgoKCgoKCgoKCgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdGYtZ3JhcGgtY29tbW9uL2Fubm90YXRpb24uanMKdmFyIHRmOwooZnVuY3Rpb24oYSl7KGZ1bmN0aW9uKGMpeyhmdW5jdGlvbihkKXsoZnVuY3Rpb24oZil7ZnVuY3Rpb24gZyhyKXtyZXR1cm4oYy5yZW5kZXIuQW5ub3RhdGlvblR5cGVbcl18fCIiKS50b0xvd2VyQ2FzZSgpfHxudWxsfWZ1bmN0aW9uIGwocix0KXt0LmFubm90YXRpb25UeXBlPT09Yy5yZW5kZXIuQW5ub3RhdGlvblR5cGUuU1VNTUFSWT9kLnNlbGVjdE9yQ3JlYXRlQ2hpbGQociwidXNlIikuYXR0cigiY2xhc3MiLCJzdW1tYXJ5IikuYXR0cigieGxpbms6aHJlZiIsIiNzdW1tYXJ5LWljb24iKS5hdHRyKCJjdXJzb3IiLCJwb2ludGVyIik6KHI9ZC5ub2RlLmJ1aWxkU2hhcGUocix0LGQuQ2xhc3MuQW5ub3RhdGlvbi5OT0RFKSxkLnNlbGVjdE9yQ3JlYXRlQ2hpbGQociwidGl0bGUiKS50ZXh0KHQubm9kZS5uYW1lKSl9ZnVuY3Rpb24gayhyLHQpe2xldCB2PXQubm9kZS5uYW1lLnNwbGl0KCIvIik7cmV0dXJuIG0ocix2W3YubGVuZ3RoLTFdLHQsbnVsbCl9ZnVuY3Rpb24gbShyLHQsCnYsQSl7bGV0IHk9ZC5DbGFzcy5Bbm5vdGF0aW9uLkxBQkVMO0EmJih5Kz0iICIrQSk7cj1yLmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIix5KS5hdHRyKCJkeSIsIi4zNWVtIikuYXR0cigidGV4dC1hbmNob3IiLHYuaXNJbj8iZW5kIjoic3RhcnQiKS50ZXh0KHQpO3JldHVybiBhLmdyYXBoLnNjZW5lLm5vZGUuZW5mb3JjZUxhYmVsV2lkdGgociwtMSl9ZnVuY3Rpb24gcChyLHQsdixBKXtyLm9uKCJtb3VzZW92ZXIiLHk9PntBLmZpcmUoImFubm90YXRpb24taGlnaGxpZ2h0Iix7bmFtZTp5Lm5vZGUubmFtZSxob3N0TmFtZTp0Lm5vZGUubmFtZX0pfSkub24oIm1vdXNlb3V0Iix5PT57QS5maXJlKCJhbm5vdGF0aW9uLXVuaGlnaGxpZ2h0Iix7bmFtZTp5Lm5vZGUubmFtZSxob3N0TmFtZTp0Lm5vZGUubmFtZX0pfSkub24oImNsaWNrIix5PT57ZDMuZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7QS5maXJlKCJhbm5vdGF0aW9uLXNlbGVjdCIse25hbWU6eS5ub2RlLm5hbWUsaG9zdE5hbWU6dC5ub2RlLm5hbWV9KX0pOwppZih2LmFubm90YXRpb25UeXBlIT09Yy5yZW5kZXIuQW5ub3RhdGlvblR5cGUuU1VNTUFSWSYmdi5hbm5vdGF0aW9uVHlwZSE9PWMucmVuZGVyLkFubm90YXRpb25UeXBlLkNPTlNUQU5UKXIub24oImNvbnRleHRtZW51IixkLmNvbnRleHRtZW51LmdldE1lbnUoQSxkLm5vZGUuZ2V0Q29udGV4dE1lbnUodi5ub2RlLEEpKSl9ZnVuY3Rpb24gcShyLHQsdixBKXtsZXQgeT1jLmxheW91dC5jb21wdXRlQ1hQb3NpdGlvbk9mTm9kZVNoYXBlKHQpO3YucmVuZGVyTm9kZUluZm8mJnYuYW5ub3RhdGlvblR5cGUhPT1jLnJlbmRlci5Bbm5vdGF0aW9uVHlwZS5FTExJUFNJUyYmZC5ub2RlLnN0eWxpemUocix2LnJlbmRlck5vZGVJbmZvLEEsZC5DbGFzcy5Bbm5vdGF0aW9uLk5PREUpO3YuYW5ub3RhdGlvblR5cGU9PT1jLnJlbmRlci5Bbm5vdGF0aW9uVHlwZS5TVU1NQVJZJiYodi53aWR0aCs9MTApO3Iuc2VsZWN0KCJ0ZXh0LiIrZC5DbGFzcy5Bbm5vdGF0aW9uLkxBQkVMKS50cmFuc2l0aW9uKCkuYXR0cigieCIsCnkrdi5keCsodi5pc0luPy0xOjEpKih2LndpZHRoLzIrdi5sYWJlbE9mZnNldCkpLmF0dHIoInkiLHQueSt2LmR5KTtyLnNlbGVjdCgidXNlLnN1bW1hcnkiKS50cmFuc2l0aW9uKCkuYXR0cigieCIseSt2LmR4LTMpLmF0dHIoInkiLHQueSt2LmR5LTYpO2QucG9zaXRpb25FbGxpcHNlKHIuc2VsZWN0KCIuIitkLkNsYXNzLkFubm90YXRpb24uTk9ERSsiIGVsbGlwc2UiKSx5K3YuZHgsdC55K3YuZHksdi53aWR0aCx2LmhlaWdodCk7ZC5wb3NpdGlvblJlY3Qoci5zZWxlY3QoIi4iK2QuQ2xhc3MuQW5ub3RhdGlvbi5OT0RFKyIgcmVjdCIpLHkrdi5keCx0Lnkrdi5keSx2LndpZHRoLHYuaGVpZ2h0KTtkLnBvc2l0aW9uUmVjdChyLnNlbGVjdCgiLiIrZC5DbGFzcy5Bbm5vdGF0aW9uLk5PREUrIiB1c2UiKSx5K3YuZHgsdC55K3YuZHksdi53aWR0aCx2LmhlaWdodCk7ci5zZWxlY3QoInBhdGguIitkLkNsYXNzLkFubm90YXRpb24uRURHRSkudHJhbnNpdGlvbigpLmF0dHIoImQiLHg9Pgp7eD14LnBvaW50cy5tYXAoQz0+KHt4OkMuZHgreSx5OkMuZHkrdC55fSkpO3JldHVybiBkLmVkZ2UuaW50ZXJwb2xhdGUoeCl9KX1mLmJ1aWxkR3JvdXA9ZnVuY3Rpb24ocix0LHYsQSl7cj1yLnNlbGVjdEFsbChmdW5jdGlvbigpe3JldHVybiB0aGlzLmNoaWxkTm9kZXN9KS5kYXRhKHQubGlzdCx5PT55Lm5vZGUubmFtZSk7ci5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImRhdGEtbmFtZSIseT0+eS5ub2RlLm5hbWUpLmVhY2goZnVuY3Rpb24oeSl7bGV0IHg9ZDMuc2VsZWN0KHRoaXMpO0EuYWRkQW5ub3RhdGlvbkdyb3VwKHksdix4KTtsZXQgQz1kLkNsYXNzLkFubm90YXRpb24uRURHRSxGPXkucmVuZGVyTWV0YWVkZ2VJbmZvJiZ5LnJlbmRlck1ldGFlZGdlSW5mby5tZXRhZWRnZTtGJiYhRi5udW1SZWd1bGFyRWRnZXMmJihDKz0iICIrZC5DbGFzcy5Bbm5vdGF0aW9uLkNPTlRST0xfRURHRSk7RiYmRi5udW1SZWZFZGdlcyYmKEMrPSIgIitkLkNsYXNzLkVkZ2UuUkVGX0xJTkUpOwpkLmVkZ2UuYXBwZW5kRWRnZSh4LHksQSxDKTt5LmFubm90YXRpb25UeXBlIT09Yy5yZW5kZXIuQW5ub3RhdGlvblR5cGUuRUxMSVBTSVM/KGsoeCx5KSxsKHgseSkpOm0oeCx5Lm5vZGUubmFtZSx5LGQuQ2xhc3MuQW5ub3RhdGlvbi5FTExJUFNJUyl9KS5tZXJnZShyKS5hdHRyKCJjbGFzcyIseT0+ZC5DbGFzcy5Bbm5vdGF0aW9uLkdST1VQKyIgIitnKHkuYW5ub3RhdGlvblR5cGUpKyIgIitkLm5vZGUubm9kZUNsYXNzKHkpKS5lYWNoKGZ1bmN0aW9uKHkpe2xldCB4PWQzLnNlbGVjdCh0aGlzKTtxKHgsdix5LEEpO3kuYW5ub3RhdGlvblR5cGUhPT1jLnJlbmRlci5Bbm5vdGF0aW9uVHlwZS5FTExJUFNJUyYmcCh4LHYseSxBKX0pO3IuZXhpdCgpLmVhY2goZnVuY3Rpb24oeSl7bGV0IHg9ZDMuc2VsZWN0KHRoaXMpO0EucmVtb3ZlQW5ub3RhdGlvbkdyb3VwKHksdix4KX0pLnJlbW92ZSgpO3JldHVybiByfX0pKGQuYW5ub3RhdGlvbnx8KGQuYW5ub3RhdGlvbj17fSkpfSkoYy5zY2VuZXx8CihjLnNjZW5lPXt9KSl9KShhLmdyYXBofHwoYS5ncmFwaD17fSkpfSkodGZ8fCh0Zj17fSkpOwo8L3NjcmlwdD4KPHNjcmlwdD4vL35+V0VCUEFUSH5+L3RmLWdyYXBoLWNvbW1vbi9jb2xvcnMuanMKKGZ1bmN0aW9uKGEpe2EuQ09MT1JTPVt7bmFtZToiR29vZ2xlIEJsdWUiLGNvbG9yOiIjNDE4NGYzIixhY3RpdmU6IiMzYTUzYzUiLGRpc2FibGVkOiIjY2FkOGZjIn0se25hbWU6Ikdvb2dsZSBSZWQiLGNvbG9yOiIjZGI0NDM3IixhY3RpdmU6IiM4ZjJhMGMiLGRpc2FibGVkOiIjZThjNmMxIn0se25hbWU6Ikdvb2dsZSBZZWxsb3ciLGNvbG9yOiIjZjRiNDAwIixhY3RpdmU6IiNkYjkyMDAiLGRpc2FibGVkOiIjZjdlOGIwIn0se25hbWU6Ikdvb2dsZSBHcmVlbiIsY29sb3I6IiMwZjlkNTgiLGFjdGl2ZToiIzQ4ODA0NiIsZGlzYWJsZWQ6IiNjMmUxY2MifSx7bmFtZToiUHVycGxlIixjb2xvcjoiI2FhNDZiYiIsYWN0aXZlOiIjNWMxMzk4IixkaXNhYmxlZDoiI2Q3YmNlNiJ9LHtuYW1lOiJUZWFsIixjb2xvcjoiIzAwYWJjMCIsYWN0aXZlOiIjNDc4MjhlIixkaXNhYmxlZDoiI2MyZWFmMiJ9LHtuYW1lOiJEZWVwIE9yYW5nZSIsY29sb3I6IiNmZjZmNDIiLGFjdGl2ZToiI2NhNGEwNiIsCmRpc2FibGVkOiIjZjJjYmJhIn0se25hbWU6IkxpbWUiLGNvbG9yOiIjOWQ5YzIzIixhY3RpdmU6IiM3Zjc3MWQiLGRpc2FibGVkOiIjZjFmNGMyIn0se25hbWU6IkluZGlnbyIsY29sb3I6IiM1YjZhYmYiLGFjdGl2ZToiIzNlNDdhOSIsZGlzYWJsZWQ6IiNjNWM4ZTgifSx7bmFtZToiUGluayIsY29sb3I6IiNlZjYxOTEiLGFjdGl2ZToiI2NhMWM2MCIsZGlzYWJsZWQ6IiNlOWI5Y2UifSx7bmFtZToiRGVlcCBUZWFsIixjb2xvcjoiIzAwNzg2YSIsYWN0aXZlOiIjMmI0ZjQzIixkaXNhYmxlZDoiI2JlZGVkYSJ9LHtuYW1lOiJEZWVwIFBpbmsiLGNvbG9yOiIjYzExNzVhIixhY3RpdmU6IiM3NTA4NGYiLGRpc2FibGVkOiIjZGU4Y2FlIn0se25hbWU6IkdyYXkiLGNvbG9yOiIjOUU5RTlFIixhY3RpdmU6IiM0MjQyNDIiLGRpc2FibGVkOiJGNUY1RjUifV0ucmVkdWNlKChjLGQpPT57Y1tkLm5hbWVdPWQ7cmV0dXJuIGN9LHt9KTthLk9QX0dST1VQX0NPTE9SUz1be2NvbG9yOiJHb29nbGUgUmVkIiwKZ3JvdXBzOiJnZW5fbGVnYWN5X29wcyBsZWdhY3lfb3BzIGxlZ2FjeV9mbG9nc19pbnB1dCBsZWdhY3lfaW1hZ2VfaW5wdXQgbGVnYWN5X2lucHV0X2V4YW1wbGVfaW5wdXQgbGVnYWN5X3NlcXVlbmNlX2lucHV0IGxlZ2FjeV9zZXRpX2lucHV0X2lucHV0Ii5zcGxpdCgiICIpfSx7Y29sb3I6IkRlZXAgT3JhbmdlIixncm91cHM6WyJjb25zdGFudF9vcHMiXX0se2NvbG9yOiJJbmRpZ28iLGdyb3VwczpbInN0YXRlX29wcyJdfSx7Y29sb3I6IlB1cnBsZSIsZ3JvdXBzOlsibm5fb3BzIiwibm4iXX0se2NvbG9yOiJHb29nbGUgR3JlZW4iLGdyb3VwczpbIm1hdGhfb3BzIl19LHtjb2xvcjoiTGltZSIsZ3JvdXBzOlsiYXJyYXlfb3BzIl19LHtjb2xvcjoiVGVhbCIsZ3JvdXBzOlsiY29udHJvbF9mbG93X29wcyIsImRhdGFfZmxvd19vcHMiXX0se2NvbG9yOiJQaW5rIixncm91cHM6WyJzdW1tYXJ5X29wcyJdfSx7Y29sb3I6IkRlZXAgUGluayIsZ3JvdXBzOlsiaW9fb3BzIl19XS5yZWR1Y2UoKGMsCmQpPT57ZC5ncm91cHMuZm9yRWFjaChmdW5jdGlvbihmKXtjW2ZdPWQuY29sb3J9KTtyZXR1cm4gY30se30pfSkodGZ8fCh0Zj17fSkpOwo8L3NjcmlwdD4KPHNjcmlwdD4vL35+V0VCUEFUSH5+L3RmLWdyYXBoLWNvbW1vbi9jb21tb24uanMKKGZ1bmN0aW9uKGEpeyhmdW5jdGlvbihjKXsoZnVuY3Rpb24oZCl7ZC5PUF9HUkFQSD0ib3BfZ3JhcGgiO2QuQ09OQ0VQVFVBTF9HUkFQSD0iY29uY2VwdHVhbF9ncmFwaCI7ZC5QUk9GSUxFPSJwcm9maWxlIn0pKGMuU2VsZWN0aW9uVHlwZXx8KGMuU2VsZWN0aW9uVHlwZT17fSkpfSkoYS5ncmFwaHx8KGEuZ3JhcGg9e30pKX0pKHRmfHwodGY9e30pKTsKPC9zY3JpcHQ+CjxzY3JpcHQ+Ly9+fldFQlBBVEh+fi90Zi1ncmFwaC1jb21tb24vY29udGV4dG1lbnUuanMKKGZ1bmN0aW9uKGEpeyhmdW5jdGlvbihjKXsoZnVuY3Rpb24oZCl7KGZ1bmN0aW9uKGYpe2Z1bmN0aW9uIGcobCl7bGV0IGs9MCxtPTA7Zm9yKDtsJiYwPD1sLm9mZnNldExlZnQmJjA8PWwub2Zmc2V0VG9wOylrKz1sLm9mZnNldExlZnQtbC5zY3JvbGxMZWZ0LG0rPWwub2Zmc2V0VG9wLWwuc2Nyb2xsVG9wLGw9bC5vZmZzZXRQYXJlbnQ7cmV0dXJue2xlZnQ6ayx0b3A6bX19Zi5nZXRNZW51PWZ1bmN0aW9uKGwsayl7Y29uc3QgbT1sLmdldENvbnRleHRNZW51KCkscD1kMy5zZWxlY3QobC5nZXRDb250ZXh0TWVudSgpKTtyZXR1cm4gZnVuY3Rpb24ocSxyKXtmdW5jdGlvbiB0KHkpe3kmJnkuY29tcG9zZWRQYXRoKCkuaW5jbHVkZXMobSl8fChwLnN0eWxlKCJkaXNwbGF5Iiwibm9uZSIpLGRvY3VtZW50LmJvZHkucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIix0LHtjYXB0dXJlOiEwfSkpfWxldCB2PWQzLmV2ZW50O2NvbnN0IEE9ZyhsKTtwLnN0eWxlKCJkaXNwbGF5IiwiYmxvY2siKS5zdHlsZSgibGVmdCIsCnYuY2xpZW50WC1BLmxlZnQrMSsicHgiKS5zdHlsZSgidG9wIix2LmNsaWVudFktQS50b3ArMSsicHgiKTt2LnByZXZlbnREZWZhdWx0KCk7di5zdG9wUHJvcGFnYXRpb24oKTtkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsdCx7Y2FwdHVyZTohMH0pO3AuaHRtbCgiIik7cC5hcHBlbmQoInVsIikuc2VsZWN0QWxsKCJsaSIpLmRhdGEoaykuZW50ZXIoKS5hcHBlbmQoImxpIikub24oImNsaWNrIix5PT57eS5hY3Rpb24odGhpcyxxLHIpO3QoKX0pLmh0bWwoZnVuY3Rpb24oeSl7cmV0dXJuIHkudGl0bGUocSl9KX19fSkoZC5jb250ZXh0bWVudXx8KGQuY29udGV4dG1lbnU9e30pKX0pKGMuc2NlbmV8fChjLnNjZW5lPXt9KSl9KShhLmdyYXBofHwoYS5ncmFwaD17fSkpfSkodGZ8fCh0Zj17fSkpOwo8L3NjcmlwdD4KPHNjcmlwdD4vL35+V0VCUEFUSH5+L3RmLWdyYXBoLWNvbW1vbi9lZGdlLmpzCihmdW5jdGlvbihhKXsoZnVuY3Rpb24oYyl7KGZ1bmN0aW9uKGQpeyhmdW5jdGlvbihmKXtmdW5jdGlvbiBnKHkpe3JldHVybiB5LnYrYy5FREdFX0tFWV9ERUxJTSt5Lnd9ZnVuY3Rpb24gbCh5LHgpe3g9eC5nZXROb2RlQnlOYW1lKHkudik7aWYobnVsbD09eC5vdXRwdXRTaGFwZXN8fF8uaXNFbXB0eSh4Lm91dHB1dFNoYXBlcykpcmV0dXJuIG51bGw7eT14Lm91dHB1dFNoYXBlc1t5Lm91dHB1dFRlbnNvcktleV07cmV0dXJuIG51bGw9PXk/bnVsbDowPT09eS5sZW5ndGg/InNjYWxhciI6eS5tYXAoQz0+LTE9PT1DPyI/IjpDKS5qb2luKCJcdTAwZDciKX1mdW5jdGlvbiBrKHkseCl7cmV0dXJuIHguZWRnZUxhYmVsRnVuY3Rpb24/eC5lZGdlTGFiZWxGdW5jdGlvbih5LHgpOjE8eS5iYXNlRWRnZUxpc3QubGVuZ3RoP3kuYmFzZUVkZ2VMaXN0Lmxlbmd0aCsiIHRlbnNvcnMiOmwoeS5iYXNlRWRnZUxpc3RbMF0seCl9ZnVuY3Rpb24gbSh5LHgsQyl7Y29uc3QgRj1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoYS5ncmFwaC5zY2VuZS5TVkdfTkFNRVNQQUNFLAoicGF0aCIpO2ZvcihsZXQgRD0xO0Q8eS5sZW5ndGg7RCsrKWlmKEYuc2V0QXR0cmlidXRlKCJkIixDKHkuc2xpY2UoMCxEKSkpLEYuZ2V0VG90YWxMZW5ndGgoKT54KXJldHVybiBELTE7cmV0dXJuIHkubGVuZ3RoLTF9ZnVuY3Rpb24gcCh5LHgsQyl7dmFyIEY9ZDMubGluZSgpLngoSz0+Sy54KS55KEs9PksueSksRD1kMy5zZWxlY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInBhdGgiKSkuYXR0cigiZCIsRih5KSksQj0reC5hdHRyKCJtYXJrZXJXaWR0aCIpLEc9eC5hdHRyKCJ2aWV3Qm94Iikuc3BsaXQoIiAiKS5tYXAoTnVtYmVyKTtHPUdbMl0tR1swXTt4PSt4LmF0dHIoInJlZlgiKTtEPUQubm9kZSgpO2lmKEMpcmV0dXJuIEIqPTEteC9HLEM9RC5nZXRQb2ludEF0TGVuZ3RoKEIpLEY9bSh5LEIsRikseVtGLTFdPXt4OkMueCx5OkMueX0seS5zbGljZShGLTEpO0M9MS14L0c7Qj1ELmdldFRvdGFsTGVuZ3RoKCktQipDO0M9CkQuZ2V0UG9pbnRBdExlbmd0aChCKTtGPW0oeSxCLEYpO3lbRl09e3g6Qy54LHk6Qy55fTtyZXR1cm4geS5zbGljZSgwLEYrMSl9ZnVuY3Rpb24gcSh5LHgsQyxGKXtGPUZ8fGQuQ2xhc3MuRWRnZS5MSU5FO3gubGFiZWwmJngubGFiZWwuc3RydWN0dXJhbCYmKEYrPSIgIitkLkNsYXNzLkVkZ2UuU1RSVUNUVVJBTCk7eC5sYWJlbCYmeC5sYWJlbC5tZXRhZWRnZSYmeC5sYWJlbC5tZXRhZWRnZS5udW1SZWZFZGdlcyYmKEYrPSIgIitkLkNsYXNzLkVkZ2UuUkVGRVJFTkNFX0VER0UpO0MuaGFuZGxlRWRnZVNlbGVjdGVkJiYoRis9IiAiK2QuQ2xhc3MuRWRnZS5TRUxFQ1RBQkxFKTtsZXQgRD0icGF0aF8iK2coeCk7aWYoQy5yZW5kZXJIaWVyYXJjaHkuZWRnZVdpZHRoRnVuY3Rpb24pdmFyIEI9Qy5yZW5kZXJIaWVyYXJjaHkuZWRnZVdpZHRoRnVuY3Rpb24oeCxGKTtlbHNlIEI9MSxudWxsIT14LmxhYmVsJiZudWxsIT14LmxhYmVsLm1ldGFlZGdlJiYoQj14LmxhYmVsLm1ldGFlZGdlLnRvdGFsU2l6ZSksCkI9Qy5yZW5kZXJIaWVyYXJjaHkuZWRnZVdpZHRoU2l6ZWRCYXNlZFNjYWxlKEIpO0Y9eS5hcHBlbmQoInBhdGgiKS5hdHRyKCJpZCIsRCkuYXR0cigiY2xhc3MiLEYpLnN0eWxlKCJzdHJva2Utd2lkdGgiLEIrInB4Iik7eC5sYWJlbCYmeC5sYWJlbC5tZXRhZWRnZSYmKHgubGFiZWwubWV0YWVkZ2UubnVtUmVmRWRnZXM/KEI9YHJlZmVyZW5jZS1hcnJvd2hlYWQtJHtBKEIpfWAsRi5zdHlsZSgibWFya2VyLXN0YXJ0IixgdXJsKCMke0J9KWApLHgubGFiZWwuc3RhcnRNYXJrZXJJZD1CKTooQj1gZGF0YWZsb3ctYXJyb3doZWFkLSR7QShCKX1gLEYuc3R5bGUoIm1hcmtlci1lbmQiLGB1cmwoIyR7Qn0pYCkseC5sYWJlbC5lbmRNYXJrZXJJZD1CKSk7bnVsbCE9eC5sYWJlbCYmbnVsbCE9eC5sYWJlbC5tZXRhZWRnZSYmKHg9ayh4LmxhYmVsLm1ldGFlZGdlLEMucmVuZGVySGllcmFyY2h5KSxudWxsIT14JiZ5LmFwcGVuZCgidGV4dCIpLmFwcGVuZCgidGV4dFBhdGgiKS5hdHRyKCJ4bGluazpocmVmIiwKIiMiK0QpLmF0dHIoInN0YXJ0T2Zmc2V0IiwiNTAlIikuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsImNlbnRyYWwiKS50ZXh0KHgpKX1mdW5jdGlvbiByKHkseCxDLEYsRCl7Rj1DLmxhYmVsO2xldCBCPUYuYWRqb2luaW5nTWV0YWVkZ2UsRz1GLnBvaW50czsoe3NoYWRvd1Jvb3Q6eX09eSk7Qy5sYWJlbC5zdGFydE1hcmtlcklkJiYoRz1wKEcsZDMuc2VsZWN0KHkucXVlcnlTZWxlY3RvcigiIyIrQy5sYWJlbC5zdGFydE1hcmtlcklkKSksITApKTtDLmxhYmVsLmVuZE1hcmtlcklkJiYoRz1wKEcsZDMuc2VsZWN0KHkucXVlcnlTZWxlY3RvcigiIyIrQy5sYWJlbC5lbmRNYXJrZXJJZCkpLCExKSk7aWYoIUIpcmV0dXJuIGQzLmludGVycG9sYXRlKEQsZi5pbnRlcnBvbGF0ZShHKSk7bGV0IEs9Qi5lZGdlR3JvdXAubm9kZSgpLmZpcnN0Q2hpbGQsTD1GLm1ldGFlZGdlLmluYm91bmQ7cmV0dXJuIGZ1bmN0aW9uKCl7bGV0IEo9Sy5nZXRQb2ludEF0TGVuZ3RoKEw/CksuZ2V0VG90YWxMZW5ndGgoKTowKS5tYXRyaXhUcmFuc2Zvcm0oSy5nZXRDVE0oKSkubWF0cml4VHJhbnNmb3JtKHguZ2V0Q1RNKCkuaW52ZXJzZSgpKSxQPUw/MDpHLmxlbmd0aC0xO0dbUF0ueD1KLng7R1tQXS55PUoueTtyZXR1cm4gZi5pbnRlcnBvbGF0ZShHKX19ZnVuY3Rpb24gdCh5LHgpe2QzLnNlbGVjdCh4KS5zZWxlY3QoInBhdGguIitkLkNsYXNzLkVkZ2UuTElORSkudHJhbnNpdGlvbigpLmF0dHJUd2VlbigiZCIsZnVuY3Rpb24oQyxGLEQpe3JldHVybiByKHksdGhpcyxDLEYsRCl9KX1mdW5jdGlvbiB2KHkseCl7eS5jbGFzc2VkKCJmYWRlZCIseC5sYWJlbC5pc0ZhZGVkT3V0KTt4PXgubGFiZWwubWV0YWVkZ2U7eS5zZWxlY3QoInBhdGguIitkLkNsYXNzLkVkZ2UuTElORSkuY2xhc3NlZCgiY29udHJvbC1kZXAiLHgmJiF4Lm51bVJlZ3VsYXJFZGdlcyl9Zi5NSU5fRURHRV9XSURUSD0uNzU7Zi5NQVhfRURHRV9XSURUSD0xMjtmLkVER0VfV0lEVEhfU0laRV9CQVNFRF9TQ0FMRT0KZDMuc2NhbGVQb3coKS5leHBvbmVudCguMykuZG9tYWluKFsxLDVFNl0pLnJhbmdlKFtmLk1JTl9FREdFX1dJRFRILGYuTUFYX0VER0VfV0lEVEhdKS5jbGFtcCghMCk7bGV0IEE9ZDMuc2NhbGVRdWFudGl6ZSgpLmRvbWFpbihbZi5NSU5fRURHRV9XSURUSCxmLk1BWF9FREdFX1dJRFRIXSkucmFuZ2UoWyJzbWFsbCIsIm1lZGl1bSIsImxhcmdlIiwieGxhcmdlIl0pO2YuZ2V0RWRnZUtleT1nO2YuYnVpbGRHcm91cD1mdW5jdGlvbih5LHgsQyl7bGV0IEY9W107Rj1fLnJlZHVjZSh4LmVkZ2VzKCksKEQsQik9PntsZXQgRz14LmVkZ2UoQik7RC5wdXNoKHt2OkIudix3OkIudyxsYWJlbDpHfSk7cmV0dXJuIER9LEYpO3k9ZC5zZWxlY3RPckNyZWF0ZUNoaWxkKHksImciLGQuQ2xhc3MuRWRnZS5DT05UQUlORVIpLnNlbGVjdEFsbChmdW5jdGlvbigpe3JldHVybiB0aGlzLmNoaWxkTm9kZXN9KS5kYXRhKEYsZyk7eS5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIixkLkNsYXNzLkVkZ2UuR1JPVVApLmF0dHIoImRhdGEtZWRnZSIsCmcpLmVhY2goZnVuY3Rpb24oRCl7bGV0IEI9ZDMuc2VsZWN0KHRoaXMpO0QubGFiZWwuZWRnZUdyb3VwPUI7Qy5fZWRnZUdyb3VwSW5kZXhbZyhEKV09QjtpZihDLmhhbmRsZUVkZ2VTZWxlY3RlZClCLm9uKCJjbGljayIsRz0+e2QzLmV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO0MuZmlyZSgiZWRnZS1zZWxlY3QiLHtlZGdlRGF0YTpHLGVkZ2VHcm91cDpCfSl9KTtxKEIsRCxDKX0pLm1lcmdlKHkpLmVhY2goZnVuY3Rpb24oKXt0KEMsdGhpcyl9KS5lYWNoKGZ1bmN0aW9uKEQpe3YoZDMuc2VsZWN0KHRoaXMpLEQsQyl9KTt5LmV4aXQoKS5lYWNoKEQ9PntkZWxldGUgQy5fZWRnZUdyb3VwSW5kZXhbZyhEKV19KS5yZW1vdmUoKTtyZXR1cm4geX07Zi5nZXRMYWJlbEZvckJhc2VFZGdlPWw7Zi5nZXRMYWJlbEZvckVkZ2U9aztmLmFwcGVuZEVkZ2U9cTtmLmludGVycG9sYXRlPWQzLmxpbmUoKS5jdXJ2ZShkMy5jdXJ2ZUJhc2lzKS54KHk9PnkueCkueSh5PT55LnkpfSkoZC5lZGdlfHwoZC5lZGdlPQp7fSkpfSkoYy5zY2VuZXx8KGMuc2NlbmU9e30pKX0pKGEuZ3JhcGh8fChhLmdyYXBoPXt9KSl9KSh0Znx8KHRmPXt9KSk7Cjwvc2NyaXB0Pgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdGYtZ3JhcGgtY29tbW9uL2V4dGVybnMuanMKPC9zY3JpcHQ+CjxzY3JpcHQ+Ly9+fldFQlBBVEh+fi90Zi1ncmFwaC1jb21tb24vZ3JhcGguanMKKGZ1bmN0aW9uKGEpeyhmdW5jdGlvbihjKXtmdW5jdGlvbiBkKEosUCxTLE4sVCl7cmV0dXJuKFM/UysiLyI6IiIpKyhKKygidW5kZWZpbmVkIiE9PXR5cGVvZiBOJiYidW5kZWZpbmVkIiE9PXR5cGVvZiBUPyJbIitOKyItIitUKyJdIjoiIyIpK1ApfWZ1bmN0aW9uIGYoSil7aWYoIUopcmV0dXJuIG51bGw7Zm9yKGxldCBQPTA7UDxKLmxlbmd0aDtQKyspe2xldCB7a2V5OlMsdmFsdWU6Tn09SltQXTtpZigiX291dHB1dF9zaGFwZXMiPT09Uyl7aWYoIU4ubGlzdC5zaGFwZSlicmVhaztsZXQgVD1OLmxpc3Quc2hhcGUubWFwKFk9PlkudW5rbm93bl9yYW5rP251bGw6bnVsbD09WS5kaW18fDE9PT1ZLmRpbS5sZW5ndGgmJm51bGw9PVkuZGltWzBdLnNpemU/W106WS5kaW0ubWFwKGFhPT5hYS5zaXplKSk7Si5zcGxpY2UoUCwxKTtyZXR1cm4gVH19cmV0dXJuIG51bGx9ZnVuY3Rpb24gZyhKKXtpZighSilyZXR1cm4gbnVsbDtmb3IobGV0IFA9MDtQPEoubGVuZ3RoO1ArKylpZigiX1hsYUNsdXN0ZXIiPT09CkpbUF0ua2V5KXJldHVybiBKW1BdLnZhbHVlLnN8fG51bGw7cmV0dXJuIG51bGx9ZnVuY3Rpb24gbChKKXtsZXQgUD1bXTtfLmVhY2goSixTPT57bGV0IE49Il4iPT09U1swXTtOJiYoUz1TLnN1YnN0cmluZygxKSk7bGV0IFQ9UyxZPSIwIixhYT1TLm1hdGNoKC8oLiopOihcdys6XGQrKSQvKTtpZihhYSlUPWFhWzFdLFk9YWFbMl07ZWxzZSBpZihhYT1TLm1hdGNoKC8oLiopOihcZCspJC8pKVQ9YWFbMV0sWT1hYVsyXTswIT09UC5sZW5ndGgmJlQ9PT1QW1AubGVuZ3RoLTFdLm5hbWV8fFAucHVzaCh7bmFtZTpULG91dHB1dFRlbnNvcktleTpZLGlzQ29udHJvbERlcGVuZGVuY3k6Tn0pfSk7cmV0dXJuIFB9ZnVuY3Rpb24gayhKLFAsUyxOLFQsWSl7UCE9PVMubmFtZSYmSi5lZGdlcy5wdXNoKHt2OlAsdzpTLm5hbWUsb3V0cHV0VGVuc29yS2V5Ok4ub3V0cHV0VGVuc29yS2V5LGlzQ29udHJvbERlcGVuZGVuY3k6Ti5pc0NvbnRyb2xEZXBlbmRlbmN5LGlzUmVmZXJlbmNlRWRnZTohMD09PQpULnJlZkVkZ2VzW1Mub3ArIiAiK1ldfSl9ZnVuY3Rpb24gbShKLFAsUyl7Uz1TfHx7fTtsZXQgTj1uZXcgZ3JhcGhsaWIuR3JhcGgoUyk7Ti5zZXRHcmFwaCh7bmFtZTpKLHJhbmtkaXI6Uy5yYW5rZGlyfHwiQlQiLHR5cGU6UH0pO3JldHVybiBOfWZ1bmN0aW9uIHAoSil7cmV0dXJuIGZ1bmN0aW9uKFApe2ZvcihsZXQgUz0wO1M8Si5sZW5ndGg7UysrKXtsZXQgTj1uZXcgUmVnRXhwKEpbU10pO2lmKCJzdHJpbmciPT09dHlwZW9mIFAub3AmJlAub3AubWF0Y2goTikpcmV0dXJuITB9cmV0dXJuITF9fWZ1bmN0aW9uIHEoSil7bGV0IFA9Si5zcGxpdChjLk5BTUVTUEFDRV9ERUxJTSk7cmV0dXJuIEorYy5OQU1FU1BBQ0VfREVMSU0rIigiK1BbUC5sZW5ndGgtMV0rIikifWZ1bmN0aW9uIHIoSixQKXtsZXQgUz17fSxOPXt9O0ouc29ydCgpO2ZvcihsZXQgVD0wO1Q8Si5sZW5ndGgtMTsrK1Qpe2xldCBZPUpbVF07Xy5lYWNoKHYoWSkuc2xpY2UoMCwtMSksYWE9PntOW2FhXT0hMH0pO2ZvcihsZXQgYWE9ClQrMTthYTxKLmxlbmd0aDsrK2FhKXtsZXQgaGE9SlthYV07aWYoXy5zdGFydHNXaXRoKGhhLFkpKXtpZihoYS5sZW5ndGg+WS5sZW5ndGgmJmhhLmNoYXJBdChZLmxlbmd0aCk9PT1jLk5BTUVTUEFDRV9ERUxJTSl7U1tZXT1xKFkpO2JyZWFrfX1lbHNlIGJyZWFrfX1fLmVhY2goUCxUPT57VCBpbiBOJiYoU1tUXT1xKFQpKX0pO3JldHVybiBTfWZ1bmN0aW9uIHQoSil7bGV0IFA9Si5ub2RlcygpLm1hcChmdW5jdGlvbihTKXtyZXR1cm4gSi5uZWlnaGJvcnMoUykubGVuZ3RofSk7UC5zb3J0KCk7cmV0dXJuIFB9ZnVuY3Rpb24gdihKLFApe2xldCBTPVtdLE49Si5pbmRleE9mKGMuTkFNRVNQQUNFX0RFTElNKTtmb3IoOzA8PU47KVMucHVzaChKLnN1YnN0cmluZygwLE4pKSxOPUouaW5kZXhPZihjLk5BTUVTUEFDRV9ERUxJTSxOKzEpO1AmJihQPVBbSl0pJiZTLnB1c2goUCk7Uy5wdXNoKEopO3JldHVybiBTfWMuTkFNRVNQQUNFX0RFTElNPSIvIjtjLlJPT1RfTkFNRT0iX19yb290X18iOwpjLkZVTkNUSU9OX0xJQlJBUllfTk9ERV9QUkVGSVg9Il9fZnVuY3Rpb25fbGlicmFyeV9fIjtjLkxBUkdFX0FUVFJTX0tFWT0iX3Rvb19sYXJnZV9hdHRycyI7Yy5MSU1JVF9BVFRSX1NJWkU9MTAyNDtjLkVER0VfS0VZX0RFTElNPSItLSI7bGV0IEE7KGZ1bmN0aW9uKEope0pbSi5GVUxMPTBdPSJGVUxMIjtKW0ouRU1CRURERUQ9MV09IkVNQkVEREVEIjtKW0ouTUVUQT0yXT0iTUVUQSI7SltKLlNFUklFUz0zXT0iU0VSSUVTIjtKW0ouQ09SRT00XT0iQ09SRSI7SltKLlNIQURPVz01XT0iU0hBRE9XIjtKW0ouQlJJREdFPTZdPSJCUklER0UiO0pbSi5FREdFPTddPSJFREdFIn0pKEE9Yy5HcmFwaFR5cGV8fChjLkdyYXBoVHlwZT17fSkpO2xldCB5OyhmdW5jdGlvbihKKXtKW0ouTUVUQT0wXT0iTUVUQSI7SltKLk9QPTFdPSJPUCI7SltKLlNFUklFUz0yXT0iU0VSSUVTIjtKW0ouQlJJREdFPTNdPSJCUklER0UiO0pbSi5FTExJUFNJUz00XT0iRUxMSVBTSVMifSkoeT1jLk5vZGVUeXBlfHwKKGMuTm9kZVR5cGU9e30pKTtsZXQgeDsoZnVuY3Rpb24oSil7SltKLklOQ0xVREU9MF09IklOQ0xVREUiO0pbSi5FWENMVURFPTFdPSJFWENMVURFIjtKW0ouVU5TUEVDSUZJRUQ9Ml09IlVOU1BFQ0lGSUVEIn0pKHg9Yy5JbmNsdXNpb25UeXBlfHwoYy5JbmNsdXNpb25UeXBlPXt9KSk7KGZ1bmN0aW9uKEope0pbSi5HUk9VUD0wXT0iR1JPVVAiO0pbSi5VTkdST1VQPTFdPSJVTkdST1VQIn0pKGMuU2VyaWVzR3JvdXBpbmdUeXBlfHwoYy5TZXJpZXNHcm91cGluZ1R5cGU9e30pKTtjbGFzcyBDe2NvbnN0cnVjdG9yKCl7dGhpcy5ub2Rlcz17fTt0aGlzLmVkZ2VzPVtdfX1jLlNsaW1HcmFwaD1DO2NsYXNzIEZ7Y29uc3RydWN0b3IoSil7dGhpcy50eXBlPXkuRUxMSVBTSVM7dGhpcy5pc0dyb3VwTm9kZT0hMTt0aGlzLmNhcmRpbmFsaXR5PTE7dGhpcy5zdGF0cz10aGlzLnBhcmVudE5vZGU9bnVsbDt0aGlzLnNldE51bU1vcmVOb2RlcyhKKTt0aGlzLmluY2x1ZGU9eC5VTlNQRUNJRklFRH1zZXROdW1Nb3JlTm9kZXMoSil7dGhpcy5udW1Nb3JlTm9kZXM9Cko7dGhpcy5uYW1lPSIuLi4gIitKKyIgbW9yZSJ9fWMuRWxsaXBzaXNOb2RlSW1wbD1GO2NsYXNzIER7Y29uc3RydWN0b3IoSil7dGhpcy5vcD1KLm9wO3RoaXMubmFtZT1KLm5hbWU7dGhpcy5kZXZpY2U9Si5kZXZpY2U7dGhpcy5hdHRyPUouYXR0cjt0aGlzLmlucHV0cz1sKEouaW5wdXQpO3RoaXMub3V0cHV0U2hhcGVzPWYoSi5hdHRyKTt0aGlzLnhsYUNsdXN0ZXI9ZyhKLmF0dHIpO3RoaXMuY29tcGF0aWJsZT0hMTt0aGlzLnR5cGU9eS5PUDt0aGlzLmlzR3JvdXBOb2RlPSExO3RoaXMuY2FyZGluYWxpdHk9MTt0aGlzLmluRW1iZWRkaW5ncz1bXTt0aGlzLm91dEVtYmVkZGluZ3M9W107dGhpcy5wYXJlbnROb2RlPW51bGw7dGhpcy5pbmNsdWRlPXguVU5TUEVDSUZJRUQ7dGhpcy5vd25pbmdTZXJpZXM9bnVsbH19Yy5PcE5vZGVJbXBsPUQ7Yy5jcmVhdGVNZXRhbm9kZT1mdW5jdGlvbihKLFA9e30pe3JldHVybiBuZXcgRyhKLFApfTtjLmpvaW5TdGF0c0luZm9XaXRoR3JhcGg9ZnVuY3Rpb24oSiwKUCxTKXtfLmVhY2goSi5ub2RlcyxOPT57Ti5zdGF0cz1udWxsfSk7Xy5lYWNoKFAuZGV2X3N0YXRzLE49PntTJiYhU1tOLmRldmljZV18fF8uZWFjaChOLm5vZGVfc3RhdHMsVD0+e2xldCBZPVQubm9kZV9uYW1lIGluIEoubm9kZXM/VC5ub2RlX25hbWU6cShULm5vZGVfbmFtZSk7aWYoWSBpbiBKLm5vZGVzKXt2YXIgYWE9MDtULm1lbW9yeSYmXy5lYWNoKFQubWVtb3J5LFg9PntYLnRvdGFsX2J5dGVzJiYoMDxYLnRvdGFsX2J5dGVzP2FhKz1OdW1iZXIoWC50b3RhbF9ieXRlcyk6Y29uc29sZS5sb2coImlnbm9yaW5nIG5lZ2F0aXZlIG1lbW9yeSBhbGxvY2F0aW9uIGZvciAiK1kpKX0pO3ZhciBoYT1udWxsO1Qub3V0cHV0JiYoaGE9Xy5tYXAoVC5vdXRwdXQsWD0+Xy5tYXAoWC50ZW5zb3JfZGVzY3JpcHRpb24uc2hhcGUuZGltLGNhPT5OdW1iZXIoY2Euc2l6ZSkpKSk7Si5ub2Rlc1tZXS5kZXZpY2U9Ti5kZXZpY2U7bnVsbD09Si5ub2Rlc1tZXS5zdGF0cyYmKEoubm9kZXNbWV0uc3RhdHM9Cm5ldyBCKGhhKSk7Si5ub2Rlc1tZXS5zdGF0cy5hZGRCeXRlc0FsbG9jYXRpb24oYWEpO1QuYWxsX2VuZF9yZWxfbWljcm9zJiYoMDxULmFsbF9lbmRfcmVsX21pY3Jvcz9KLm5vZGVzW1ldLnN0YXRzLmFkZEV4ZWN1dGlvblRpbWUoVC5hbGxfc3RhcnRfbWljcm9zLFQuYWxsX3N0YXJ0X21pY3JvcytULmFsbF9lbmRfcmVsX21pY3Jvcyk6Y29uc29sZS5sb2coImlnbm9yaW5nIG5lZ2F0aXZlIHJ1bnRpbWUgZm9yICIrWSkpfX0pfSl9O2NsYXNzIEJ7Y29uc3RydWN0b3IoSil7dGhpcy50b3RhbEJ5dGVzPTA7dGhpcy5vdXRwdXRTaXplPUp9YWRkRXhlY3V0aW9uVGltZShKLFApe3RoaXMuc3RhcnRUaW1lPW51bGwhPXRoaXMuc3RhcnRUaW1lP01hdGgubWluKHRoaXMuc3RhcnRUaW1lLEopOko7dGhpcy5lbmRUaW1lPW51bGwhPXRoaXMuZW5kVGltZT9NYXRoLm1heCh0aGlzLmVuZFRpbWUsUCk6UH1hZGRCeXRlc0FsbG9jYXRpb24oSil7dGhpcy50b3RhbEJ5dGVzPW51bGwhPXRoaXMudG90YWxCeXRlcz8KTWF0aC5tYXgodGhpcy50b3RhbEJ5dGVzLEopOkp9Y29tYmluZShKKXtudWxsIT1KLnRvdGFsQnl0ZXMmJih0aGlzLnRvdGFsQnl0ZXMrPUoudG90YWxCeXRlcyk7bnVsbCE9Si5nZXRUb3RhbE1pY3JvcygpJiZ0aGlzLmFkZEV4ZWN1dGlvblRpbWUoSi5zdGFydFRpbWUsSi5lbmRUaW1lKX1nZXRUb3RhbE1pY3Jvcygpe3JldHVybiBudWxsPT10aGlzLnN0YXJ0VGltZXx8bnVsbD09dGhpcy5lbmRUaW1lP251bGw6dGhpcy5lbmRUaW1lLXRoaXMuc3RhcnRUaW1lfX1jLk5vZGVTdGF0cz1CO2NsYXNzIEd7Y29uc3RydWN0b3IoSixQPXt9KXt0aGlzLm5hbWU9Sjt0aGlzLnR5cGU9eS5NRVRBO3RoaXMuZGVwdGg9MTt0aGlzLmlzR3JvdXBOb2RlPSEwO3RoaXMuY2FyZGluYWxpdHk9MDt0aGlzLm1ldGFncmFwaD1tKEosQS5NRVRBLFApO3RoaXMuYnJpZGdlZ3JhcGg9bnVsbDt0aGlzLm9wSGlzdG9ncmFtPXt9O3RoaXMuZGV2aWNlSGlzdG9ncmFtPXt9O3RoaXMueGxhQ2x1c3Rlckhpc3RvZ3JhbT0Ke307dGhpcy5jb21wYXRpYmlsaXR5SGlzdG9ncmFtPXtjb21wYXRpYmxlOjAsaW5jb21wYXRpYmxlOjB9O3RoaXMucGFyZW50Tm9kZT10aGlzLnRlbXBsYXRlSWQ9bnVsbDt0aGlzLmhhc05vbkNvbnRyb2xFZGdlcz0hMTt0aGlzLmluY2x1ZGU9eC5VTlNQRUNJRklFRDt0aGlzLmFzc29jaWF0ZWRGdW5jdGlvbj0iIn1nZXRGaXJzdENoaWxkKCl7cmV0dXJuIHRoaXMubWV0YWdyYXBoLm5vZGUodGhpcy5tZXRhZ3JhcGgubm9kZXMoKVswXSl9Z2V0Um9vdE9wKCl7bGV0IEo9dGhpcy5uYW1lLnNwbGl0KCIvIik7cmV0dXJuIHRoaXMubWV0YWdyYXBoLm5vZGUodGhpcy5uYW1lKyIvKCIrSltKLmxlbmd0aC0xXSsiKSIpfWxlYXZlcygpe2xldCBKPVtdLFA9W3RoaXNdLFM7Zm9yKDtQLmxlbmd0aDspe2xldCBOPVAuc2hpZnQoKTtOLmlzR3JvdXBOb2RlPyhTPU4ubWV0YWdyYXBoLF8uZWFjaChTLm5vZGVzKCksVD0+UC5wdXNoKFMubm9kZShUKSkpKTpKLnB1c2goTi5uYW1lKX1yZXR1cm4gSn19CmMuTWV0YW5vZGVJbXBsPUc7Yy5jcmVhdGVNZXRhZWRnZT1mdW5jdGlvbihKLFApe3JldHVybiBuZXcgSyhKLFApfTtjbGFzcyBLe2NvbnN0cnVjdG9yKEosUCl7dGhpcy52PUo7dGhpcy53PVA7dGhpcy5iYXNlRWRnZUxpc3Q9W107dGhpcy5pbmJvdW5kPW51bGw7dGhpcy50b3RhbFNpemU9dGhpcy5udW1SZWZFZGdlcz10aGlzLm51bUNvbnRyb2xFZGdlcz10aGlzLm51bVJlZ3VsYXJFZGdlcz0wfWFkZEJhc2VFZGdlKEosUCl7dGhpcy5iYXNlRWRnZUxpc3QucHVzaChKKTtKLmlzQ29udHJvbERlcGVuZGVuY3k/dGhpcy5udW1Db250cm9sRWRnZXMrPTE6dGhpcy5udW1SZWd1bGFyRWRnZXMrPTE7Si5pc1JlZmVyZW5jZUVkZ2UmJih0aGlzLm51bVJlZkVkZ2VzKz0xKTt0aGlzLnRvdGFsU2l6ZSs9Sy5jb21wdXRlU2l6ZU9mRWRnZShKLFApO1AubWF4TWV0YUVkZ2VTaXplPU1hdGgubWF4KFAubWF4TWV0YUVkZ2VTaXplLHRoaXMudG90YWxTaXplKX1zdGF0aWMgY29tcHV0ZVNpemVPZkVkZ2UoSiwKUCl7bGV0IFM9UC5ub2RlKEoudik7aWYoIVMub3V0cHV0U2hhcGVzKXJldHVybiAxO1AuaGFzU2hhcGVJbmZvPSEwO0o9T2JqZWN0LmtleXMoUy5vdXRwdXRTaGFwZXMpLm1hcChOPT5TLm91dHB1dFNoYXBlc1tOXSkubWFwKE49Pm51bGw9PU4/MTpOLnJlZHVjZSgoVCxZKT0+ey0xPT09WSYmKFk9MSk7cmV0dXJuIFQqWX0sMSkpO3JldHVybiBfLnN1bShKKX19Yy5NZXRhZWRnZUltcGw9SztjLmNyZWF0ZVNlcmllc05vZGU9ZnVuY3Rpb24oSixQLFMsTixULFkpe3JldHVybiBuZXcgTChKLFAsUyxOLFQsWSl9O2MuZ2V0U2VyaWVzTm9kZU5hbWU9ZDtjbGFzcyBMe2NvbnN0cnVjdG9yKEosUCxTLE4sVCxZKXt0aGlzLm5hbWU9VHx8ZChKLFAsUyk7dGhpcy50eXBlPXkuU0VSSUVTO3RoaXMuaGFzTG9vcD0hMTt0aGlzLnByZWZpeD1KO3RoaXMuc3VmZml4PVA7dGhpcy5jbHVzdGVySWQ9Tjt0aGlzLmlkcz1bXTt0aGlzLnBhcmVudD1TO3RoaXMuaXNHcm91cE5vZGU9ITA7dGhpcy5jYXJkaW5hbGl0eT0KMDt0aGlzLm1ldGFncmFwaD1tKFQsQS5TRVJJRVMsWSk7dGhpcy5wYXJlbnROb2RlPXRoaXMuYnJpZGdlZ3JhcGg9bnVsbDt0aGlzLmRldmljZUhpc3RvZ3JhbT17fTt0aGlzLnhsYUNsdXN0ZXJIaXN0b2dyYW09e307dGhpcy5jb21wYXRpYmlsaXR5SGlzdG9ncmFtPXtjb21wYXRpYmxlOjAsaW5jb21wYXRpYmxlOjB9O3RoaXMuaGFzTm9uQ29udHJvbEVkZ2VzPSExO3RoaXMuaW5jbHVkZT14LlVOU1BFQ0lGSUVEfX1jLkRlZmF1bHRCdWlsZFBhcmFtcz17ZW5hYmxlRW1iZWRkaW5nOiEwLGluRW1iZWRkaW5nVHlwZXM6WyJDb25zdCJdLG91dEVtYmVkZGluZ1R5cGVzOlsiXlthLXpBLVpdK1N1bW1hcnkkIl0scmVmRWRnZXM6eyJBc3NpZ24gMCI6ITAsIkFzc2lnbkFkZCAwIjohMCwiQXNzaWduU3ViIDAiOiEwLCJhc3NpZ24gMCI6ITAsImFzc2lnbl9hZGQgMCI6ITAsImFzc2lnbl9zdWIgMCI6ITAsImNvdW50X3VwX3RvIDAiOiEwLCJTY2F0dGVyQWRkIDAiOiEwLCJTY2F0dGVyU3ViIDAiOiEwLAoiU2NhdHRlclVwZGF0ZSAwIjohMCwic2NhdHRlcl9hZGQgMCI6ITAsInNjYXR0ZXJfc3ViIDAiOiEwLCJzY2F0dGVyX3VwZGF0ZSAwIjohMH19O2MuYnVpbGQ9ZnVuY3Rpb24oSixQLFMpe2xldCBOPXt9LFQ9e30sWT17fSxhYT1wKFAuaW5FbWJlZGRpbmdUeXBlcyksaGE9cChQLm91dEVtYmVkZGluZ1R5cGVzKSxYPVtdLGNhPUoubm9kZSxlYT1BcnJheShjYS5sZW5ndGgpO3JldHVybiBhLmdyYXBoLnV0aWwucnVuQXN5bmNUYXNrKCJOb3JtYWxpemluZyBuYW1lcyIsMzAsKCk9PntsZXQga2E9QXJyYXkoY2EubGVuZ3RoKSxiYT0wO2NvbnN0IGxhPUNhPT57bGV0IHhhPW5ldyBEKENhKTtpZihhYSh4YSkpcmV0dXJuIFgucHVzaCh4YS5uYW1lKSxOW3hhLm5hbWVdPXhhO2lmKGhhKHhhKSlyZXR1cm4gWC5wdXNoKHhhLm5hbWUpLFRbeGEubmFtZV09eGEsXy5lYWNoKHhhLmlucHV0cyx6YT0+e3phPXphLm5hbWU7WVt6YV09WVt6YV18fFtdO1lbemFdLnB1c2goeGEpfSkseGE7a2FbYmFdPQp4YTtlYVtiYV09eGEubmFtZTtiYSsrO3JldHVybiB4YX07Xy5lYWNoKGNhLGxhKTtjb25zdCB3YT1DYT0+e2NvbnN0IHhhPWMuRlVOQ1RJT05fTElCUkFSWV9OT0RFX1BSRUZJWCtDYS5zaWduYXR1cmUubmFtZTtsYSh7bmFtZTp4YSxpbnB1dDpbXSxkZXZpY2U6IiIsb3A6IiIsYXR0cjpbXX0pO2lmKENhLnNpZ25hdHVyZS5pbnB1dF9hcmcpe2xldCBFYT0wO3ZhciB6YT1HYT0+e2xhKHtuYW1lOnhhK2MuTkFNRVNQQUNFX0RFTElNK0dhLm5hbWUsaW5wdXQ6W10sZGV2aWNlOiIiLG9wOiJpbnB1dF9hcmciLGF0dHI6W3trZXk6IlQiLHZhbHVlOnt0eXBlOkdhLnR5cGV9fV19KS5mdW5jdGlvbklucHV0SW5kZXg9RWE7RWErK307Q2Euc2lnbmF0dXJlLmlucHV0X2FyZy5uYW1lP3phKENhLnNpZ25hdHVyZS5pbnB1dF9hcmcpOl8uZWFjaChDYS5zaWduYXR1cmUuaW5wdXRfYXJnLHphKX1sZXQgRmE9MDtjb25zdCBTYT17fTtDYS5zaWduYXR1cmUub3V0cHV0X2FyZyYmKHphPUVhPT57U2FbeGErCmMuTkFNRVNQQUNFX0RFTElNK0VhLm5hbWVdPUZhO0ZhKyt9LENhLnNpZ25hdHVyZS5vdXRwdXRfYXJnLm5hbWU/emEoQ2Euc2lnbmF0dXJlLm91dHB1dF9hcmcpOl8uZWFjaChDYS5zaWduYXR1cmUub3V0cHV0X2FyZyx6YSkpO18uZWFjaChDYS5ub2RlX2RlZixFYT0+e0VhLm5hbWU9eGErIi8iK0VhLm5hbWU7InN0cmluZyI9PT10eXBlb2YgRWEuaW5wdXQmJihFYS5pbnB1dD1bRWEuaW5wdXRdKTtjb25zdCBHYT1sYShFYSk7Xy5pc051bWJlcihTYVtFYS5uYW1lXSkmJihHYS5mdW5jdGlvbk91dHB1dEluZGV4PVNhW0VhLm5hbWVdKTtfLmVhY2goR2EuaW5wdXRzLGRiPT57ZGIubmFtZT14YStjLk5BTUVTUEFDRV9ERUxJTStkYi5uYW1lfSl9KX07Si5saWJyYXJ5JiZKLmxpYnJhcnkuZnVuY3Rpb24mJl8uZWFjaChKLmxpYnJhcnkuZnVuY3Rpb24sd2EpO2thLnNwbGljZShiYSk7ZWEuc3BsaWNlKGJhKTtyZXR1cm4ga2F9LFMpLnRoZW4oa2E9PmEuZ3JhcGgudXRpbC5ydW5Bc3luY1Rhc2soIkJ1aWxkaW5nIHRoZSBkYXRhIHN0cnVjdHVyZSIsCjcwLCgpPT57bGV0IGJhPXIoZWEsWCksbGE9bmV3IEM7Xy5lYWNoKGthLHdhPT57bGV0IENhPWJhW3dhLm5hbWVdfHx3YS5uYW1lO2xhLm5vZGVzW0NhXT13YTt3YS5uYW1lIGluIFkmJih3YS5vdXRFbWJlZGRpbmdzPVlbd2EubmFtZV0sXy5lYWNoKHdhLm91dEVtYmVkZGluZ3MseGE9Pnt4YS5uYW1lPWJhW3hhLm5hbWVdfHx4YS5uYW1lfSkpO3dhLm5hbWU9Q2F9KTtfLmVhY2goa2Esd2E9PntfLmVhY2god2EuaW5wdXRzLChDYSx4YSk9PntsZXQgemE9Q2EubmFtZTtpZih6YSBpbiBOKXtDYT1OW3phXTt3YS5pbkVtYmVkZGluZ3MucHVzaChDYSk7Zm9yKHZhciBGYSBvZiBDYS5pbnB1dHMpayhsYSxiYVtGYS5uYW1lXXx8RmEubmFtZSx3YSxGYSxQLHhhKX1lbHNlIGlmKHphIGluIFQpe0ZhPVRbemFdO2ZvcihsZXQgU2Egb2YgRmEuaW5wdXRzKWsobGEsYmFbU2EubmFtZV18fFNhLm5hbWUsd2EsQ2EsUCx4YSl9ZWxzZSBrKGxhLGJhW3phXXx8emEsd2EsQ2EsUCx4YSl9KX0pO18uZWFjaChOLAp3YT0+e3dhLm5hbWU9YmFbd2EubmFtZV18fHdhLm5hbWV9KTtyZXR1cm4gbGF9LFMpKX07Yy5jcmVhdGVHcmFwaD1tO2MuZ2V0U3RyaWN0TmFtZT1xO2MuaGFzU2ltaWxhckRlZ3JlZVNlcXVlbmNlPWZ1bmN0aW9uKEosUCl7Sj10KEopO1A9dChQKTtmb3IobGV0IFM9MDtTPEoubGVuZ3RoO1MrKylpZihKW1NdIT09UFtTXSlyZXR1cm4hMTtyZXR1cm4hMH07Yy5nZXRIaWVyYXJjaGljYWxQYXRoPXY7Yy5nZXRJbmNsdWRlTm9kZUJ1dHRvblN0cmluZz1mdW5jdGlvbihKKXtyZXR1cm4gSj09PWEuZ3JhcGguSW5jbHVzaW9uVHlwZS5FWENMVURFPyJBZGQgdG8gbWFpbiBncmFwaCI6IlJlbW92ZSBmcm9tIG1haW4gZ3JhcGgifTtjLmdldEdyb3VwU2VyaWVzTm9kZUJ1dHRvblN0cmluZz1mdW5jdGlvbihKKXtyZXR1cm4gSj09PWEuZ3JhcGguU2VyaWVzR3JvdXBpbmdUeXBlLkdST1VQPyJVbmdyb3VwIHRoaXMgc2VyaWVzIG9mIG5vZGVzIjoiR3JvdXAgdGhpcyBzZXJpZXMgb2Ygbm9kZXMifTsKYy50b2dnbGVOb2RlU2VyaWVzR3JvdXA9ZnVuY3Rpb24oSixQKXtKW1BdPVAgaW4gSiYmSltQXSE9PWEuZ3JhcGguU2VyaWVzR3JvdXBpbmdUeXBlLkdST1VQP2EuZ3JhcGguU2VyaWVzR3JvdXBpbmdUeXBlLkdST1VQOmEuZ3JhcGguU2VyaWVzR3JvdXBpbmdUeXBlLlVOR1JPVVB9fSkoYS5ncmFwaHx8KGEuZ3JhcGg9e30pKX0pKHRmfHwodGY9e30pKTsKPC9zY3JpcHQ+CjxzY3JpcHQ+Ly9+fldFQlBBVEh+fi90Zi1ncmFwaC1jb21tb24vaGllcmFyY2h5LmpzCihmdW5jdGlvbihhKXsoZnVuY3Rpb24oYyl7KGZ1bmN0aW9uKGQpe2Z1bmN0aW9uIGYodixBLHkseCl7QT15P3YuaW5FZGdlcyhBLm5hbWUpOnYub3V0RWRnZXMoQS5uYW1lKTtfLmVhY2goQSxDPT57Qz12LmVkZ2UoQyk7KEMubnVtUmVndWxhckVkZ2VzP3gucmVndWxhcjp4LmNvbnRyb2wpLnB1c2goQyl9KX1mdW5jdGlvbiBnKHYsQSl7Y29uc3QgeT17fTtfLmVhY2goQS5ub2Rlcyx4PT57bGV0IEM9Yy5nZXRIaWVyYXJjaGljYWxQYXRoKHgubmFtZSksRj12LnJvb3Q7Ri5kZXB0aD1NYXRoLm1heChDLmxlbmd0aCxGLmRlcHRoKTt5W3gub3BdfHwoeVt4Lm9wXT1bXSk7eVt4Lm9wXS5wdXNoKHgpO2ZvcihsZXQgQj0wO0I8Qy5sZW5ndGg7QisrKXtGLmRlcHRoPU1hdGgubWF4KEYuZGVwdGgsQy5sZW5ndGgtQik7Ri5jYXJkaW5hbGl0eSs9eC5jYXJkaW5hbGl0eTtGLm9wSGlzdG9ncmFtW3gub3BdPShGLm9wSGlzdG9ncmFtW3gub3BdfHwwKSsxO251bGwhPXguZGV2aWNlJiYoRi5kZXZpY2VIaXN0b2dyYW1beC5kZXZpY2VdPQooRi5kZXZpY2VIaXN0b2dyYW1beC5kZXZpY2VdfHwwKSsxKTtudWxsIT14LnhsYUNsdXN0ZXImJihGLnhsYUNsdXN0ZXJIaXN0b2dyYW1beC54bGFDbHVzdGVyXT0oRi54bGFDbHVzdGVySGlzdG9ncmFtW3gueGxhQ2x1c3Rlcl18fDApKzEpO3guY29tcGF0aWJsZT9GLmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uY29tcGF0aWJsZT0oRi5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmNvbXBhdGlibGV8fDApKzE6Ri5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmluY29tcGF0aWJsZT0oRi5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmluY29tcGF0aWJsZXx8MCkrMTtfLmVhY2goeC5pbkVtYmVkZGluZ3MsSz0+e0suY29tcGF0aWJsZT9GLmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uY29tcGF0aWJsZT0oRi5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmNvbXBhdGlibGV8fDApKzE6Ri5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmluY29tcGF0aWJsZT0oRi5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmluY29tcGF0aWJsZXx8CjApKzF9KTtfLmVhY2goeC5vdXRFbWJlZGRpbmdzLEs9PntLLmNvbXBhdGlibGU/Ri5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmNvbXBhdGlibGU9KEYuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5jb21wYXRpYmxlfHwwKSsxOkYuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5pbmNvbXBhdGlibGU9KEYuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5pbmNvbXBhdGlibGV8fDApKzF9KTtpZihCPT09Qy5sZW5ndGgtMSlicmVhazt2YXIgRD1DW0JdO2xldCBHPXYubm9kZShEKTtHfHwoRz1jLmNyZWF0ZU1ldGFub2RlKEQsdi5ncmFwaE9wdGlvbnMpLEcucGFyZW50Tm9kZT1GLHYuc2V0Tm9kZShELEcpLEYubWV0YWdyYXBoLnNldE5vZGUoRCxHKSwwPT09RC5pbmRleE9mKGEuZ3JhcGguRlVOQ1RJT05fTElCUkFSWV9OT0RFX1BSRUZJWCkmJkYubmFtZT09PWEuZ3JhcGguUk9PVF9OQU1FJiYoRD1ELnN1YnN0cmluZyhhLmdyYXBoLkZVTkNUSU9OX0xJQlJBUllfTk9ERV9QUkVGSVgubGVuZ3RoKSx5W0RdfHwKKHlbRF09W10pLHYubGlicmFyeUZ1bmN0aW9uc1tEXT17bm9kZTpHLHVzYWdlczp5W0RdfSxHLmFzc29jaWF0ZWRGdW5jdGlvbj1EKSk7Rj1HfXYuc2V0Tm9kZSh4Lm5hbWUseCk7eC5wYXJlbnROb2RlPUY7Ri5tZXRhZ3JhcGguc2V0Tm9kZSh4Lm5hbWUseCk7Xy5lYWNoKHguaW5FbWJlZGRpbmdzLGZ1bmN0aW9uKEIpe3Yuc2V0Tm9kZShCLm5hbWUsQik7Qi5wYXJlbnROb2RlPXh9KTtfLmVhY2goeC5vdXRFbWJlZGRpbmdzLGZ1bmN0aW9uKEIpe3Yuc2V0Tm9kZShCLm5hbWUsQik7Qi5wYXJlbnROb2RlPXh9KX0pfWZ1bmN0aW9uIGwodixBKXtsZXQgeT12LmdldE5vZGVNYXAoKSx4PVtdLEM9W10sRj0oRCxCKT0+e2xldCBHPTA7Zm9yKDtEOylCW0crK109RC5uYW1lLEQ9RC5wYXJlbnROb2RlO3JldHVybiBHLTF9O18uZWFjaChBLmVkZ2VzLEQ9Pnt2YXIgQj1GKEEubm9kZXNbRC52XSx4KSxHPUYoQS5ub2Rlc1tELnddLEMpO2lmKC0xIT09QiYmLTEhPT1HKXtmb3IoO3hbQl09PT1DW0ddOylpZihCLS0sCkctLSwwPkJ8fDA+Ryl0aHJvdyBFcnJvcigiTm8gZGlmZmVyZW5jZSBmb3VuZCBiZXR3ZWVuIGFuY2VzdG9yIHBhdGhzLiIpO3ZhciBLPXlbeFtCKzFdXTtCPXhbQl07Rz1DW0ddO3ZhciBMPUsubWV0YWdyYXBoLmVkZ2UoQixHKTtMfHwoTD1jLmNyZWF0ZU1ldGFlZGdlKEIsRyksSy5tZXRhZ3JhcGguc2V0RWRnZShCLEcsTCkpO0suaGFzTm9uQ29udHJvbEVkZ2VzfHxELmlzQ29udHJvbERlcGVuZGVuY3l8fChLLmhhc05vbkNvbnRyb2xFZGdlcz0hMCk7TC5hZGRCYXNlRWRnZShELHYpfX0pfWZ1bmN0aW9uIGsodixBLHkseCxDLEYpe2xldCBEPXYubWV0YWdyYXBoO18uZWFjaChELm5vZGVzKCksQj0+e0I9RC5ub2RlKEIpO0IudHlwZT09PWEuZ3JhcGguTm9kZVR5cGUuTUVUQSYmayhCLEEseSx4LEMsRil9KTt2PW0oRCk7dj0oRj9xOnApKHYsRCxBLmdyYXBoT3B0aW9ucyk7Xy5lYWNoKHYsZnVuY3Rpb24oQixHKXtsZXQgSz1CLm1ldGFncmFwaC5ub2RlcygpO18uZWFjaChLLEw9Pgp7TD1ELm5vZGUoTCk7TC5vd25pbmdTZXJpZXN8fChMLm93bmluZ1Nlcmllcz1HKX0pO0subGVuZ3RoPHgmJiEoQi5uYW1lIGluIEMpJiYoQ1tCLm5hbWVdPWEuZ3JhcGguU2VyaWVzR3JvdXBpbmdUeXBlLlVOR1JPVVApO0IubmFtZSBpbiBDJiZDW0IubmFtZV09PT1hLmdyYXBoLlNlcmllc0dyb3VwaW5nVHlwZS5VTkdST1VQfHwoQS5zZXROb2RlKEcsQiksRC5zZXROb2RlKEcsQiksXy5lYWNoKEssTD0+e2xldCBKPUQubm9kZShMKTtCLm1ldGFncmFwaC5zZXROb2RlKEwsSik7Qi5wYXJlbnROb2RlPUoucGFyZW50Tm9kZTtCLmNhcmRpbmFsaXR5Kys7bnVsbCE9Si5kZXZpY2UmJihCLmRldmljZUhpc3RvZ3JhbVtKLmRldmljZV09KEIuZGV2aWNlSGlzdG9ncmFtW0ouZGV2aWNlXXx8MCkrMSk7bnVsbCE9Si54bGFDbHVzdGVyJiYoQi54bGFDbHVzdGVySGlzdG9ncmFtW0oueGxhQ2x1c3Rlcl09KEIueGxhQ2x1c3Rlckhpc3RvZ3JhbVtKLnhsYUNsdXN0ZXJdfHwwKSsxKTtKLmNvbXBhdGlibGU/CkIuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5jb21wYXRpYmxlPShCLmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uY29tcGF0aWJsZXx8MCkrMTpCLmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uaW5jb21wYXRpYmxlPShCLmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uaW5jb21wYXRpYmxlfHwwKSsxO18uZWFjaChKLmluRW1iZWRkaW5ncyxQPT57UC5jb21wYXRpYmxlP0IuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5jb21wYXRpYmxlPShCLmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uY29tcGF0aWJsZXx8MCkrMTpCLmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uaW5jb21wYXRpYmxlPShCLmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uaW5jb21wYXRpYmxlfHwwKSsxfSk7Xy5lYWNoKEoub3V0RW1iZWRkaW5ncyxQPT57UC5jb21wYXRpYmxlP0IuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5jb21wYXRpYmxlPShCLmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uY29tcGF0aWJsZXx8MCkrMTpCLmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uaW5jb21wYXRpYmxlPQooQi5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmluY29tcGF0aWJsZXx8MCkrMX0pO0oucGFyZW50Tm9kZT1CO3lbTF09RztELnJlbW92ZU5vZGUoTCl9KSl9KX1mdW5jdGlvbiBtKHYpe3JldHVybiBfLnJlZHVjZSh2Lm5vZGVzKCksKEEseSk9Pnt5PXYubm9kZSh5KTtpZih5LnR5cGU9PT1jLk5vZGVUeXBlLk1FVEEpcmV0dXJuIEE7bGV0IHg9eS5vcDt4JiYoQVt4XT1BW3hdfHxbXSxBW3hdLnB1c2goeS5uYW1lKSk7cmV0dXJuIEF9LHt9KX1mdW5jdGlvbiBwKHYsQSx5KXtsZXQgeD17fTtfLmVhY2godixmdW5jdGlvbihDLEYpe2lmKCEoMT49Qy5sZW5ndGgpKXt2YXIgRD17fTtfLmVhY2goQyxmdW5jdGlvbihCKXt2YXIgRz0iKiI9PT1CLmNoYXJBdChCLmxlbmd0aC0xKSxLPUIuc3BsaXQoIi8iKSxMPUtbSy5sZW5ndGgtMV07Sz1LLnNsaWNlKDAsSy5sZW5ndGgtMSkuam9pbigiLyIpO3ZhciBKPUwubWF0Y2goL14oXEQqKV8oXGQrKSQvKTtsZXQgUD0iIjtKPyhMPUpbMV0sSj1KWzJdKToKKEw9Rz9MLnN1YnN0cigwLEwubGVuZ3RoLTEpOkwsSj0wLFA9Rz8iKiI6IiIpO0c9Yy5nZXRTZXJpZXNOb2RlTmFtZShMLFAsSyk7RFtHXT1EW0ddfHxbXTtCPWMuY3JlYXRlU2VyaWVzTm9kZShMLFAsSywrSixCLHkpO0RbR10ucHVzaChCKX0pO18uZWFjaChELGZ1bmN0aW9uKEIpe2lmKCEoMj5CLmxlbmd0aCkpe0Iuc29ydChmdW5jdGlvbihLLEwpe3JldHVybitLLmNsdXN0ZXJJZC0rTC5jbHVzdGVySWR9KTt2YXIgRz1bQlswXV07Zm9yKGxldCBLPTE7SzxCLmxlbmd0aDtLKyspe2xldCBMPUJbS107TC5jbHVzdGVySWQ9PT1HW0cubGVuZ3RoLTFdLmNsdXN0ZXJJZCsxP0cucHVzaChMKToocihHLHgsK0YsQSx5KSxHPVtMXSl9cihHLHgsK0YsQSx5KX19KX19KTtyZXR1cm4geH1mdW5jdGlvbiBxKHYsQSx5KXtsZXQgeD17fTtfLmVhY2godixmdW5jdGlvbihDLEYpe2lmKCEoMT49Qy5sZW5ndGgpKXt2YXIgRD17fSxCPXt9O18uZWFjaChDLGZ1bmN0aW9uKEspe2xldCBMPSIqIj09PQpLLmNoYXJBdChLLmxlbmd0aC0xKTt2YXIgSj1LLnNwbGl0KCIvIik7bGV0IFA9SltKLmxlbmd0aC0xXTtKPUouc2xpY2UoMCxKLmxlbmd0aC0xKS5qb2luKCIvIik7Y29uc3QgUz0vKFxkKykvZzt2YXIgTjtsZXQgVCxZLGFhLGhhPTA7Zm9yKDtOPVMuZXhlYyhQKTspKytoYSxUPVAuc2xpY2UoMCxOLmluZGV4KSxZPU5bMF0sTj1QLnNsaWNlKE4uaW5kZXgrTlswXS5sZW5ndGgpLGFhPWMuZ2V0U2VyaWVzTm9kZU5hbWUoVCxOLEopLERbYWFdPURbYWFdLERbYWFdfHwoRFthYV09Yy5jcmVhdGVTZXJpZXNOb2RlKFQsTixKLCtZLEsseSkpLERbYWFdLmlkcy5wdXNoKFkpLEJbS109QltLXXx8W10sQltLXS5wdXNoKFthYSxZXSk7MT5oYSYmKFQ9TD9QLnN1YnN0cigwLFAubGVuZ3RoLTEpOlAsWT0wLE49TD8iKiI6IiIsYWE9Yy5nZXRTZXJpZXNOb2RlTmFtZShULE4sSiksRFthYV09RFthYV0sRFthYV18fChEW2FhXT1jLmNyZWF0ZVNlcmllc05vZGUoVCxOLEosK1ksSyx5KSksRFthYV0uaWRzLnB1c2goWSksCkJbS109QltLXXx8W10sQltLXS5wdXNoKFthYSxZXSkpfSk7dmFyIEc9e307Xy5lYWNoKEIsZnVuY3Rpb24oSyxMKXtLLnNvcnQoZnVuY3Rpb24oUyxOKXtyZXR1cm4gRFtOWzBdXS5pZHMubGVuZ3RoLURbU1swXV0uaWRzLmxlbmd0aH0pO3ZhciBKPUtbMF1bMF07Sz1LWzBdWzFdO0dbSl09R1tKXXx8W107Y29uc3QgUD1MLnNwbGl0KCIvIik7TD1jLmNyZWF0ZVNlcmllc05vZGUoRFtKXS5wcmVmaXgsRFtKXS5zdWZmaXgsUC5zbGljZSgwLFAubGVuZ3RoLTEpLmpvaW4oIi8iKSwrSyxMLHkpO0dbSl0ucHVzaChMKX0pO18uZWFjaChHLGZ1bmN0aW9uKEspe2lmKCEoMj5LLmxlbmd0aCkpe0suc29ydChmdW5jdGlvbihKLFApe3JldHVybitKLmNsdXN0ZXJJZC0rUC5jbHVzdGVySWR9KTt2YXIgTD1bS1swXV07Zm9yKGxldCBKPTE7SjxLLmxlbmd0aDtKKyspe2xldCBQPUtbSl07UC5jbHVzdGVySWQ9PT1MW0wubGVuZ3RoLTFdLmNsdXN0ZXJJZCsxP0wucHVzaChQKToocihMLHgsK0YsQSwKeSksTD1bUF0pfXIoTCx4LCtGLEEseSl9fSl9fSk7cmV0dXJuIHh9ZnVuY3Rpb24gcih2LEEseSx4LEMpe2lmKDE8di5sZW5ndGgpe2xldCBGPWMuZ2V0U2VyaWVzTm9kZU5hbWUodlswXS5wcmVmaXgsdlswXS5zdWZmaXgsdlswXS5wYXJlbnQsdlswXS5jbHVzdGVySWQsdlt2Lmxlbmd0aC0xXS5jbHVzdGVySWQpLEQ9Yy5jcmVhdGVTZXJpZXNOb2RlKHZbMF0ucHJlZml4LHZbMF0uc3VmZml4LHZbMF0ucGFyZW50LHksRixDKTtfLmVhY2godixmdW5jdGlvbihCKXtELmlkcy5wdXNoKEIuY2x1c3RlcklkKTtELm1ldGFncmFwaC5zZXROb2RlKEIubmFtZSx4Lm5vZGUoQi5uYW1lKSl9KTtBW0ZdPUR9fWNsYXNzIHR7Y29uc3RydWN0b3Iodil7dGhpcy5oYXNTaGFwZUluZm89ITE7dGhpcy5tYXhNZXRhRWRnZVNpemU9MTt0aGlzLmdyYXBoT3B0aW9ucz12fHx7fTt0aGlzLmdyYXBoT3B0aW9ucy5jb21wb3VuZD0hMDt0aGlzLnJvb3Q9Yy5jcmVhdGVNZXRhbm9kZShjLlJPT1RfTkFNRSx0aGlzLmdyYXBoT3B0aW9ucyk7CnRoaXMubGlicmFyeUZ1bmN0aW9ucz17fTt0aGlzLnhsYUNsdXN0ZXJzPXRoaXMuZGV2aWNlcz10aGlzLnRlbXBsYXRlcz1udWxsO3RoaXMuaW5kZXg9e307dGhpcy5pbmRleFtjLlJPT1RfTkFNRV09dGhpcy5yb290O3RoaXMub3JkZXJpbmdzPXt9fWdldE5vZGVNYXAoKXtyZXR1cm4gdGhpcy5pbmRleH1ub2RlKHYpe3JldHVybiB0aGlzLmluZGV4W3ZdfXNldE5vZGUodixBKXt0aGlzLmluZGV4W3ZdPUF9Z2V0QnJpZGdlZ3JhcGgodil7dmFyIEE9dGhpcy5pbmRleFt2XTtpZighQSl0aHJvdyBFcnJvcigiQ291bGQgbm90IGZpbmQgbm9kZSBpbiBoaWVyYXJjaHk6ICIrdik7aWYoISgibWV0YWdyYXBoImluIEEpKXJldHVybiBudWxsO2lmKEEuYnJpZGdlZ3JhcGgpcmV0dXJuIEEuYnJpZGdlZ3JhcGg7bGV0IHk9QS5icmlkZ2VncmFwaD1jLmNyZWF0ZUdyYXBoKCJCUklER0VHUkFQSCIsYy5HcmFwaFR5cGUuQlJJREdFLHRoaXMuZ3JhcGhPcHRpb25zKTtpZighKEEucGFyZW50Tm9kZSYmCiJtZXRhZ3JhcGgiaW4gQS5wYXJlbnROb2RlKSlyZXR1cm4geTt2YXIgeD1BLnBhcmVudE5vZGU7QT14Lm1ldGFncmFwaDt4PXRoaXMuZ2V0QnJpZGdlZ3JhcGgoeC5uYW1lKTtfLmVhY2goW0EseF0sQz0+e0MuZWRnZXMoKS5maWx0ZXIoRj0+Ri52PT09dnx8Ri53PT09dikuZm9yRWFjaChGPT57bGV0IEQ9Ri53PT09dixCPUMuZWRnZShGKTtfLmVhY2goQi5iYXNlRWRnZUxpc3QsRz0+e2xldCBbSyxMXT1EP1tHLncsRi52XTpbRy52LEYud107dmFyIEo9dGhpcy5nZXRDaGlsZE5hbWUodixLKTtKPXt2OkQ/TDpKLHc6RD9KOkx9O2xldCBQPXkuZWRnZShKKTtQfHwoUD1jLmNyZWF0ZU1ldGFlZGdlKEoudixKLncpLFAuaW5ib3VuZD1ELHkuc2V0RWRnZShKLnYsSi53LFApKTtQLmFkZEJhc2VFZGdlKEcsdGhpcyl9KX0pfSk7cmV0dXJuIHl9Z2V0Q2hpbGROYW1lKHYsQSl7bGV0IHk9dGhpcy5pbmRleFtBXTtmb3IoO3k7KXtpZih5LnBhcmVudE5vZGUmJnkucGFyZW50Tm9kZS5uYW1lPT09CnYpcmV0dXJuIHkubmFtZTt5PXkucGFyZW50Tm9kZX10aHJvdyBFcnJvcigiQ291bGQgbm90IGZpbmQgaW1tZWRpYXRlIGNoaWxkIGZvciBkZXNjZW5kYW50OiAiK0EpO31nZXRQcmVkZWNlc3NvcnModil7bGV0IEE9dGhpcy5pbmRleFt2XTtpZighQSl0aHJvdyBFcnJvcigiQ291bGQgbm90IGZpbmQgbm9kZSB3aXRoIG5hbWU6ICIrdik7bGV0IHk9dGhpcy5nZXRPbmVXYXlFZGdlcyhBLCEwKTtBLmlzR3JvdXBOb2RlfHxfLmVhY2goQS5pbkVtYmVkZGluZ3MseD0+e18uZWFjaChBLmlucHV0cyxDPT57aWYoQy5uYW1lPT09eC5uYW1lKXtsZXQgRj1uZXcgYy5NZXRhZWRnZUltcGwoeC5uYW1lLHYpO0YuYWRkQmFzZUVkZ2Uoe2lzQ29udHJvbERlcGVuZGVuY3k6Qy5pc0NvbnRyb2xEZXBlbmRlbmN5LG91dHB1dFRlbnNvcktleTpDLm91dHB1dFRlbnNvcktleSxpc1JlZmVyZW5jZUVkZ2U6ITEsdjp4Lm5hbWUsdzp2fSx0aGlzKTt5LnJlZ3VsYXIucHVzaChGKX19KX0pO3JldHVybiB5fWdldFN1Y2Nlc3NvcnModil7bGV0IEE9CnRoaXMuaW5kZXhbdl07aWYoIUEpdGhyb3cgRXJyb3IoIkNvdWxkIG5vdCBmaW5kIG5vZGUgd2l0aCBuYW1lOiAiK3YpO2xldCB5PXRoaXMuZ2V0T25lV2F5RWRnZXMoQSwhMSk7QS5pc0dyb3VwTm9kZXx8Xy5lYWNoKEEub3V0RW1iZWRkaW5ncyx4PT57Xy5lYWNoKHguaW5wdXRzLEM9PntpZihDLm5hbWU9PT12KXtsZXQgRj1uZXcgYy5NZXRhZWRnZUltcGwodix4Lm5hbWUpO0YuYWRkQmFzZUVkZ2Uoe2lzQ29udHJvbERlcGVuZGVuY3k6Qy5pc0NvbnRyb2xEZXBlbmRlbmN5LG91dHB1dFRlbnNvcktleTpDLm91dHB1dFRlbnNvcktleSxpc1JlZmVyZW5jZUVkZ2U6ITEsdix3OngubmFtZX0sdGhpcyk7eS5yZWd1bGFyLnB1c2goRil9fSl9KTtyZXR1cm4geX1nZXRPbmVXYXlFZGdlcyh2LEEpe2xldCB5PXtjb250cm9sOltdLHJlZ3VsYXI6W119O2lmKCF2LnBhcmVudE5vZGV8fCF2LnBhcmVudE5vZGUuaXNHcm91cE5vZGUpcmV0dXJuIHk7dmFyIHg9di5wYXJlbnROb2RlO2xldCBDPQp4Lm1ldGFncmFwaDt4PXRoaXMuZ2V0QnJpZGdlZ3JhcGgoeC5uYW1lKTtmKEMsdixBLHkpO2YoeCx2LEEseSk7cmV0dXJuIHl9Z2V0VG9wb2xvZ2ljYWxPcmRlcmluZyh2KXt2YXIgQT10aGlzLmluZGV4W3ZdO2lmKCFBKXRocm93IEVycm9yKCJDb3VsZCBub3QgZmluZCBub2RlIHdpdGggbmFtZTogIit2KTtpZighQS5pc0dyb3VwTm9kZSlyZXR1cm4gbnVsbDtpZih2IGluIHRoaXMub3JkZXJpbmdzKXJldHVybiB0aGlzLm9yZGVyaW5nc1t2XTtsZXQgeT17fSx4PXt9LEM9QS5tZXRhZ3JhcGg7Xy5lYWNoKEMuZWRnZXMoKSxEPT57Qy5lZGdlKEQpLm51bVJlZ3VsYXJFZGdlcyYmKEQudiBpbiB5fHwoeVtELnZdPVtdKSx5W0Qudl0ucHVzaChELncpLHhbRC53XT0hMCl9KTtsZXQgRj1fLmRpZmZlcmVuY2UoXy5rZXlzKHkpLF8ua2V5cyh4KSk7dj10aGlzLm9yZGVyaW5nc1t2XT17fTtmb3IoQT0wO0YubGVuZ3RoOyl7bGV0IEQ9Ri5zaGlmdCgpO3ZbRF09QSsrO18uZWFjaCh5W0RdLEI9PgpGLnB1c2goQikpO2RlbGV0ZSB5W0RdfXJldHVybiB2fWdldFRlbXBsYXRlSW5kZXgoKXtsZXQgdj1kMy5rZXlzKHRoaXMudGVtcGxhdGVzKSxBPWQzLnNjYWxlT3JkaW5hbCgpLmRvbWFpbih2KS5yYW5nZShkMy5yYW5nZSgwLHYubGVuZ3RoKSk7cmV0dXJuIHk9PkEoeSl9fWQuRGVmYXVsdEhpZXJhcmNoeVBhcmFtcz17dmVyaWZ5VGVtcGxhdGU6ITAsc2VyaWVzTm9kZU1pblNpemU6NSxzZXJpZXNNYXA6e30scmFua0RpcmVjdGlvbjoiQlQiLHVzZUdlbmVyYWxpemVkU2VyaWVzUGF0dGVybnM6ITF9O2QuYnVpbGQ9ZnVuY3Rpb24odixBLHkpe2xldCB4PW5ldyB0KHtyYW5rZGlyOkEucmFua0RpcmVjdGlvbn0pLEM9e307cmV0dXJuIGEuZ3JhcGgudXRpbC5ydW5Bc3luY1Rhc2soIkFkZGluZyBub2RlcyIsMjAsKCk9PntsZXQgRj17fSxEPXt9O18uZWFjaCh2Lm5vZGVzLEI9PntCLmRldmljZSYmKEZbQi5kZXZpY2VdPSEwKTtCLnhsYUNsdXN0ZXImJihEW0IueGxhQ2x1c3Rlcl09ITApfSk7CnguZGV2aWNlcz1fLmtleXMoRik7eC54bGFDbHVzdGVycz1fLmtleXMoRCk7Zyh4LHYpfSx5KS50aGVuKCgpPT5hLmdyYXBoLnV0aWwucnVuQXN5bmNUYXNrKCJEZXRlY3Qgc2VyaWVzIiwyMCwoKT0+ezA8QS5zZXJpZXNOb2RlTWluU2l6ZSYmayh4LnJvb3QseCxDLEEuc2VyaWVzTm9kZU1pblNpemUsQS5zZXJpZXNNYXAsQS51c2VHZW5lcmFsaXplZFNlcmllc1BhdHRlcm5zKX0seSkpLnRoZW4oKCk9PmEuZ3JhcGgudXRpbC5ydW5Bc3luY1Rhc2soIkFkZGluZyBlZGdlcyIsMzAsKCk9PntsKHgsdixDKX0seSkpLnRoZW4oKCk9PmEuZ3JhcGgudXRpbC5ydW5Bc3luY1Rhc2soIkZpbmRpbmcgc2ltaWxhciBzdWJncmFwaHMiLDMwLCgpPT57eC50ZW1wbGF0ZXM9Yy50ZW1wbGF0ZS5kZXRlY3QoeCxBLnZlcmlmeVRlbXBsYXRlKX0seSkpLnRoZW4oKCk9PngpfTtkLmpvaW5BbmRBZ2dyZWdhdGVTdGF0cz1mdW5jdGlvbih2KXtsZXQgQT17fSx5PXt9O18uZWFjaCh2LnJvb3QubGVhdmVzKCksCng9Pnt4PXYubm9kZSh4KTtudWxsIT14LmRldmljZSYmKEFbeC5kZXZpY2VdPSEwKTtudWxsIT14LnhsYUNsdXN0ZXImJih5W3gueGxhQ2x1c3Rlcl09ITApfSk7di5kZXZpY2VzPV8ua2V5cyhBKTt2LnhsYUNsdXN0ZXJzPV8ua2V5cyh5KTtfLmVhY2godi5nZXROb2RlTWFwKCkseD0+e3guaXNHcm91cE5vZGUmJih4LnN0YXRzPW5ldyBjLk5vZGVTdGF0cyhudWxsKSx4LmRldmljZUhpc3RvZ3JhbT17fSl9KTtfLmVhY2godi5yb290LmxlYXZlcygpLHg9PntsZXQgQz14PXYubm9kZSh4KTtmb3IoO251bGwhPUMucGFyZW50Tm9kZTspe2lmKG51bGwhPXguZGV2aWNlKXt2YXIgRj1DLnBhcmVudE5vZGUuZGV2aWNlSGlzdG9ncmFtO0ZbeC5kZXZpY2VdPShGW3guZGV2aWNlXXx8MCkrMX1udWxsIT14LnhsYUNsdXN0ZXImJihGPUMucGFyZW50Tm9kZS54bGFDbHVzdGVySGlzdG9ncmFtLEZbeC54bGFDbHVzdGVyXT0oRlt4LnhsYUNsdXN0ZXJdfHwwKSsxKTtudWxsIT14LnN0YXRzJiZDLnBhcmVudE5vZGUuc3RhdHMuY29tYmluZSh4LnN0YXRzKTsKQz1DLnBhcmVudE5vZGV9fSl9O2QuZ2V0SW5jb21wYXRpYmxlT3BzPWZ1bmN0aW9uKHYsQSl7bGV0IHk9W10seD17fTtfLmVhY2godi5yb290LmxlYXZlcygpLEM9PntDPXYubm9kZShDKTtpZihDLnR5cGU9PWMuTm9kZVR5cGUuT1Ape2lmKCFDLmNvbXBhdGlibGUpaWYoQy5vd25pbmdTZXJpZXMpaWYoQSYmQS5zZXJpZXNNYXBbQy5vd25pbmdTZXJpZXNdPT09YS5ncmFwaC5TZXJpZXNHcm91cGluZ1R5cGUuVU5HUk9VUCl5LnB1c2goQyk7ZWxzZXtpZigheFtDLm93bmluZ1Nlcmllc10pe2xldCBGPXYubm9kZShDLm93bmluZ1Nlcmllcyk7RiYmKHhbQy5vd25pbmdTZXJpZXNdPUYseS5wdXNoKEYpKX19ZWxzZSB5LnB1c2goQyk7Xy5lYWNoKEMuaW5FbWJlZGRpbmdzLEY9PntGLmNvbXBhdGlibGV8fHkucHVzaChGKX0pO18uZWFjaChDLm91dEVtYmVkZGluZ3MsRj0+e0YuY29tcGF0aWJsZXx8eS5wdXNoKEYpfSl9fSk7cmV0dXJuIHl9fSkoYy5oaWVyYXJjaHl8fChjLmhpZXJhcmNoeT0Ke30pKX0pKGEuZ3JhcGh8fChhLmdyYXBoPXt9KSl9KSh0Znx8KHRmPXt9KSk7Cjwvc2NyaXB0Pgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdGYtZ3JhcGgtY29tbW9uL2xheW91dC5qcwooZnVuY3Rpb24oYSl7KGZ1bmN0aW9uKGMpeyhmdW5jdGlvbihkKXtmdW5jdGlvbiBmKHgpe3gubm9kZS5pc0dyb3VwTm9kZSYmbCh4KTt4Lm5vZGUudHlwZT09PWMuTm9kZVR5cGUuTUVUQT9tKHgpOngubm9kZS50eXBlPT09Yy5Ob2RlVHlwZS5TRVJJRVMmJnAoeCl9ZnVuY3Rpb24gZyh4KXt4LmluYm94V2lkdGg9MDx4LmluQW5ub3RhdGlvbnMubGlzdC5sZW5ndGg/ZC5QQVJBTVMuYW5ub3RhdGlvbnMuaW5ib3hXaWR0aDowO3gub3V0Ym94V2lkdGg9MDx4Lm91dEFubm90YXRpb25zLmxpc3QubGVuZ3RoP2QuUEFSQU1TLmFubm90YXRpb25zLm91dGJveFdpZHRoOjA7eC5jb3JlQm94LndpZHRoPXgud2lkdGg7eC5jb3JlQm94LmhlaWdodD14LmhlaWdodDt4LndpZHRoPU1hdGgubWF4KHguY29yZUJveC53aWR0aCt4LmluYm94V2lkdGgreC5vdXRib3hXaWR0aCwzKnguZGlzcGxheU5hbWUubGVuZ3RoKX1mdW5jdGlvbiBsKHgpe2xldCBDPXguY29yZUdyYXBoLm5vZGVzKCkubWFwKEY9Pgp4LmNvcmVHcmFwaC5ub2RlKEYpKS5jb25jYXQoeC5pc29sYXRlZEluRXh0cmFjdCx4Lmlzb2xhdGVkT3V0RXh0cmFjdCx4LmxpYnJhcnlGdW5jdGlvbnNFeHRyYWN0KTtfLmVhY2goQyxGPT57c3dpdGNoKEYubm9kZS50eXBlKXtjYXNlIGMuTm9kZVR5cGUuT1A6Xy5leHRlbmQoRixkLlBBUkFNUy5ub2RlU2l6ZS5vcCk7YnJlYWs7Y2FzZSBjLk5vZGVUeXBlLkJSSURHRTpfLmV4dGVuZChGLGQuUEFSQU1TLm5vZGVTaXplLmJyaWRnZSk7YnJlYWs7Y2FzZSBjLk5vZGVUeXBlLk1FVEE6Ri5leHBhbmRlZD9mKEYpOihfLmV4dGVuZChGLGQuUEFSQU1TLm5vZGVTaXplLm1ldGEpLEYuaGVpZ2h0PWQuUEFSQU1TLm5vZGVTaXplLm1ldGEuaGVpZ2h0KEYubm9kZS5jYXJkaW5hbGl0eSkpO2JyZWFrO2Nhc2UgYy5Ob2RlVHlwZS5TRVJJRVM6Ri5leHBhbmRlZD8oXy5leHRlbmQoRixkLlBBUkFNUy5ub2RlU2l6ZS5zZXJpZXMuZXhwYW5kZWQpLGYoRikpOl8uZXh0ZW5kKEYsRi5ub2RlLmhhc05vbkNvbnRyb2xFZGdlcz8KZC5QQVJBTVMubm9kZVNpemUuc2VyaWVzLnZlcnRpY2FsOmQuUEFSQU1TLm5vZGVTaXplLnNlcmllcy5ob3Jpem9udGFsKTticmVhaztkZWZhdWx0OnRocm93IEVycm9yKCJVbnJlY29nbml6ZWQgbm9kZSB0eXBlOiAiK0Yubm9kZS50eXBlKTt9Ri5leHBhbmRlZHx8ZyhGKTtxKEYpfSl9ZnVuY3Rpb24gayh4LEMpe18uZXh0ZW5kKHguZ3JhcGgoKSx7bm9kZXNlcDpDLm5vZGVTZXAscmFua3NlcDpDLnJhbmtTZXAsZWRnZXNlcDpDLmVkZ2VTZXB9KTtsZXQgRj1bXSxEPVtdO18uZWFjaCh4Lm5vZGVzKCksSj0+e3gubm9kZShKKS5ub2RlLnR5cGU9PT1jLk5vZGVUeXBlLkJSSURHRT9GLnB1c2goSik6RC5wdXNoKEopfSk7aWYoIUQubGVuZ3RoKXJldHVybnt3aWR0aDowLGhlaWdodDowfTtkYWdyZS5sYXlvdXQoeCk7bGV0IEI9SW5maW5pdHksRz1JbmZpbml0eSxLPS1JbmZpbml0eSxMPS1JbmZpbml0eTtfLmVhY2goRCxKPT57Sj14Lm5vZGUoSik7dmFyIFA9LjUqSi53aWR0aCxTPUoueC0KUDtQPUoueCtQO0I9UzxCP1M6QjtLPVA+Sz9QOks7UD0uNSpKLmhlaWdodDtTPUoueS1QO0o9Si55K1A7Rz1TPEc/UzpHO0w9Sj5MP0o6TH0pO18uZWFjaCh4LmVkZ2VzKCksSj0+e0o9eC5lZGdlKEopO2lmKCFKLnN0cnVjdHVyYWwpe3ZhciBQPXgubm9kZShKLm1ldGFlZGdlLnYpLFM9eC5ub2RlKEoubWV0YWVkZ2Uudyk7aWYoMz09PUoucG9pbnRzLmxlbmd0aCYmQShKLnBvaW50cykpe2lmKG51bGwhPVApe3ZhciBOPVAuZXhwYW5kZWQ/UC54OnQoUCk7Si5wb2ludHNbMF0ueD1OfW51bGwhPVMmJihOPVMuZXhwYW5kZWQ/Uy54OnQoUyksSi5wb2ludHNbMl0ueD1OKTtKLnBvaW50cz1bSi5wb2ludHNbMF0sSi5wb2ludHNbMV1dfU49Si5wb2ludHNbSi5wb2ludHMubGVuZ3RoLTJdO251bGwhPVMmJihKLnBvaW50c1tKLnBvaW50cy5sZW5ndGgtMV09eShOLFMpKTtTPUoucG9pbnRzWzFdO251bGwhPVAmJihKLnBvaW50c1swXT15KFMsUCkpO18uZWFjaChKLnBvaW50cyxUPT57Qj1ULng8CkI/VC54OkI7Sz1ULng+Sz9ULng6SztHPVQueTxHP1QueTpHO0w9VC55Pkw/VC55Okx9KX19KTtfLmVhY2goeC5ub2RlcygpLEo9PntKPXgubm9kZShKKTtKLngtPUI7Si55LT1HfSk7Xy5lYWNoKHguZWRnZXMoKSxKPT57Xy5lYWNoKHguZWRnZShKKS5wb2ludHMsUD0+e1AueC09QjtQLnktPUd9KX0pO3JldHVybnt3aWR0aDpLLUIsaGVpZ2h0OkwtR319ZnVuY3Rpb24gbSh4KXtsZXQgQz1kLlBBUkFNUy5zdWJzY2VuZS5tZXRhO18uZXh0ZW5kKHgsQyk7Xy5leHRlbmQoeC5jb3JlQm94LGsoeC5jb3JlR3JhcGgsZC5QQVJBTVMuZ3JhcGgubWV0YSkpO3ZhciBGPXguaXNvbGF0ZWRJbkV4dHJhY3QubGVuZ3RoP18ubWF4KHguaXNvbGF0ZWRJbkV4dHJhY3QsQj0+Qi53aWR0aCkud2lkdGg6bnVsbDt4LmluRXh0cmFjdEJveC53aWR0aD1udWxsIT1GP0Y6MDt4LmluRXh0cmFjdEJveC5oZWlnaHQ9Xy5yZWR1Y2UoeC5pc29sYXRlZEluRXh0cmFjdCwoQixHLEspPT57Sz0wPEs/Qy5leHRyYWN0WU9mZnNldDoKMDtHLng9MDtHLnk9QitLK0cuaGVpZ2h0LzI7cmV0dXJuIEIrSytHLmhlaWdodH0sMCk7Rj14Lmlzb2xhdGVkT3V0RXh0cmFjdC5sZW5ndGg/Xy5tYXgoeC5pc29sYXRlZE91dEV4dHJhY3QsQj0+Qi53aWR0aCkud2lkdGg6bnVsbDt4Lm91dEV4dHJhY3RCb3gud2lkdGg9bnVsbCE9Rj9GOjA7eC5vdXRFeHRyYWN0Qm94LmhlaWdodD1fLnJlZHVjZSh4Lmlzb2xhdGVkT3V0RXh0cmFjdCwoQixHLEspPT57Sz0wPEs/Qy5leHRyYWN0WU9mZnNldDowO0cueD0wO0cueT1CK0srRy5oZWlnaHQvMjtyZXR1cm4gQitLK0cuaGVpZ2h0fSwwKTtGPXgubGlicmFyeUZ1bmN0aW9uc0V4dHJhY3QubGVuZ3RoP18ubWF4KHgubGlicmFyeUZ1bmN0aW9uc0V4dHJhY3QsQj0+Qi53aWR0aCkud2lkdGg6bnVsbDt4LmxpYnJhcnlGdW5jdGlvbnNCb3gud2lkdGg9bnVsbCE9Rj9GOjA7eC5saWJyYXJ5RnVuY3Rpb25zQm94LmhlaWdodD1fLnJlZHVjZSh4LmxpYnJhcnlGdW5jdGlvbnNFeHRyYWN0LChCLEcsCkspPT57Sz0wPEs/Qy5leHRyYWN0WU9mZnNldDowO0cueD0wO0cueT1CK0srRy5oZWlnaHQvMjtyZXR1cm4gQitLK0cuaGVpZ2h0fSwwKTtGPTA7MDx4Lmlzb2xhdGVkSW5FeHRyYWN0Lmxlbmd0aCYmRisrOzA8eC5pc29sYXRlZE91dEV4dHJhY3QubGVuZ3RoJiZGKys7MDx4LmxpYnJhcnlGdW5jdGlvbnNFeHRyYWN0Lmxlbmd0aCYmRisrOzA8eC5jb3JlR3JhcGgubm9kZUNvdW50KCkmJkYrKztsZXQgRD1kLlBBUkFNUy5zdWJzY2VuZS5tZXRhLmV4dHJhY3RYT2Zmc2V0O0Y9MT49Rj8wOkYqRDt4LmNvcmVCb3gud2lkdGgrPU1hdGgubWF4KGQuTUlOX0FVWF9XSURUSCx4LmluRXh0cmFjdEJveC53aWR0aCt4Lm91dEV4dHJhY3RCb3gud2lkdGgpK0YreC5saWJyYXJ5RnVuY3Rpb25zQm94LndpZHRoK0Y7eC5jb3JlQm94LmhlaWdodD1DLmxhYmVsSGVpZ2h0K01hdGgubWF4KHguaW5FeHRyYWN0Qm94LmhlaWdodCx4LmNvcmVCb3guaGVpZ2h0LHgubGlicmFyeUZ1bmN0aW9uc0JveC5oZWlnaHQsCngub3V0RXh0cmFjdEJveC5oZWlnaHQpO3gud2lkdGg9eC5jb3JlQm94LndpZHRoK0MucGFkZGluZ0xlZnQrQy5wYWRkaW5nUmlnaHQ7eC5oZWlnaHQ9eC5wYWRkaW5nVG9wK3guY29yZUJveC5oZWlnaHQreC5wYWRkaW5nQm90dG9tfWZ1bmN0aW9uIHAoeCl7bGV0IEM9eC5jb3JlR3JhcGgsRj1kLlBBUkFNUy5zdWJzY2VuZS5zZXJpZXM7Xy5leHRlbmQoeCxGKTtfLmV4dGVuZCh4LmNvcmVCb3gsayh4LmNvcmVHcmFwaCxkLlBBUkFNUy5ncmFwaC5zZXJpZXMpKTtfLmVhY2goQy5ub2RlcygpLEQ9PntDLm5vZGUoRCkuZXhjbHVkZWQ9ITF9KTt4LndpZHRoPXguY29yZUJveC53aWR0aCtGLnBhZGRpbmdMZWZ0K0YucGFkZGluZ1JpZ2h0O3guaGVpZ2h0PXguY29yZUJveC5oZWlnaHQrRi5wYWRkaW5nVG9wK0YucGFkZGluZ0JvdHRvbX1mdW5jdGlvbiBxKHgpe2lmKCF4LmV4cGFuZGVkKXt2YXIgQz14LmluQW5ub3RhdGlvbnMubGlzdCxGPXgub3V0QW5ub3RhdGlvbnMubGlzdDtfLmVhY2goQywKUD0+cihQKSk7Xy5lYWNoKEYsUD0+cihQKSk7dmFyIEQ9ZC5QQVJBTVMuYW5ub3RhdGlvbnMsQj1fLnJlZHVjZShDLChQLFMsTik9PntOPTA8Tj9ELnlPZmZzZXQ6MDtTLmR4PS0oeC5jb3JlQm94LndpZHRoK1Mud2lkdGgpLzItRC54T2Zmc2V0O1MuZHk9UCtOK1MuaGVpZ2h0LzI7cmV0dXJuIFArTitTLmhlaWdodH0sMCk7Xy5lYWNoKEMsUD0+e1AuZHktPUIvMjtQLmxhYmVsT2Zmc2V0PUQubGFiZWxPZmZzZXR9KTt2YXIgRz1fLnJlZHVjZShGLChQLFMsTik9PntOPTA8Tj9ELnlPZmZzZXQ6MDtTLmR4PSh4LmNvcmVCb3gud2lkdGgrUy53aWR0aCkvMitELnhPZmZzZXQ7Uy5keT1QK04rUy5oZWlnaHQvMjtyZXR1cm4gUCtOK1MuaGVpZ2h0fSwwKTtfLmVhY2goRixQPT57UC5keS09Ry8yO1AubGFiZWxPZmZzZXQ9RC5sYWJlbE9mZnNldH0pO3ZhciBLPU1hdGgubWluKHguaGVpZ2h0LzIteC5yYWRpdXMsQi8yKTtLPTA+Sz8wOks7dmFyIEw9ZDMuc2NhbGVMaW5lYXIoKS5kb21haW4oWzAsCkMubGVuZ3RoLTFdKS5yYW5nZShbLUssS10pO18uZWFjaChDLChQLFMpPT57UC5wb2ludHM9W3tkeDpQLmR4K1Aud2lkdGgvMixkeTpQLmR5fSx7ZHg6LXguY29yZUJveC53aWR0aC8yLGR5OjE8Qy5sZW5ndGg/TChTKTowfV19KTtLPU1hdGgubWluKHguaGVpZ2h0LzIteC5yYWRpdXMsRy8yKTtLPTA+Sz8wOks7dmFyIEo9ZDMuc2NhbGVMaW5lYXIoKS5kb21haW4oWzAsRi5sZW5ndGgtMV0pLnJhbmdlKFstSyxLXSk7Xy5lYWNoKEYsKFAsUyk9PntQLnBvaW50cz1be2R4OnguY29yZUJveC53aWR0aC8yLGR5OjE8Ri5sZW5ndGg/SihTKTowfSx7ZHg6UC5keC1QLndpZHRoLzIsZHk6UC5keX1dfSk7eC5oZWlnaHQ9TWF0aC5tYXgoeC5oZWlnaHQsQixHKX19ZnVuY3Rpb24gcih4KXtzd2l0Y2goeC5hbm5vdGF0aW9uVHlwZSl7Y2FzZSBjLnJlbmRlci5Bbm5vdGF0aW9uVHlwZS5DT05TVEFOVDpfLmV4dGVuZCh4LGQuUEFSQU1TLmNvbnN0YW50LnNpemUpO2JyZWFrO2Nhc2UgYy5yZW5kZXIuQW5ub3RhdGlvblR5cGUuU0hPUlRDVVQ6aWYoeC5ub2RlLnR5cGU9PT0KYy5Ob2RlVHlwZS5PUClfLmV4dGVuZCh4LGQuUEFSQU1TLnNob3J0Y3V0U2l6ZS5vcCk7ZWxzZSBpZih4Lm5vZGUudHlwZT09PWMuTm9kZVR5cGUuTUVUQSlfLmV4dGVuZCh4LGQuUEFSQU1TLnNob3J0Y3V0U2l6ZS5tZXRhKTtlbHNlIGlmKHgubm9kZS50eXBlPT09Yy5Ob2RlVHlwZS5TRVJJRVMpXy5leHRlbmQoeCxkLlBBUkFNUy5zaG9ydGN1dFNpemUuc2VyaWVzKTtlbHNlIHRocm93IEVycm9yKCJJbnZhbGlkIG5vZGUgdHlwZTogIit4Lm5vZGUudHlwZSk7YnJlYWs7Y2FzZSBjLnJlbmRlci5Bbm5vdGF0aW9uVHlwZS5TVU1NQVJZOl8uZXh0ZW5kKHgsZC5QQVJBTVMuY29uc3RhbnQuc2l6ZSl9fWZ1bmN0aW9uIHQoeCl7cmV0dXJuIHguZXhwYW5kZWQ/eC54OngueC14LndpZHRoLzIrKHguaW5Bbm5vdGF0aW9ucy5saXN0Lmxlbmd0aD94LmluYm94V2lkdGg6MCkreC5jb3JlQm94LndpZHRoLzJ9ZnVuY3Rpb24gdih4LEMpe3JldHVybiAxODAqTWF0aC5hdGFuKChDLnkteC55KS8oQy54LQp4LngpKS9NYXRoLlBJfWZ1bmN0aW9uIEEoeCl7bGV0IEM9dih4WzBdLHhbMV0pO2ZvcihsZXQgRj0xO0Y8eC5sZW5ndGgtMTtGKyspe2xldCBEPXYoeFtGXSx4W0YrMV0pO2lmKDE8TWF0aC5hYnMoRC1DKSlyZXR1cm4hMTtDPUR9cmV0dXJuITB9ZnVuY3Rpb24geSh4LEMpe2xldCBGPUMuZXhwYW5kZWQ/Qy54OnQoQyksRD1DLnk7dmFyIEI9eC54LUY7eD14LnktRDtsZXQgRz1DLmV4cGFuZGVkP0Mud2lkdGg6Qy5jb3JlQm94LndpZHRoLEs9Qy5leHBhbmRlZD9DLmhlaWdodDpDLmNvcmVCb3guaGVpZ2h0O01hdGguYWJzKHgpKkcvMj5NYXRoLmFicyhCKSpLLzI/KDA+eCYmKEs9LUspLEM9MD09PXg/MDpLLzIqQi94LEI9Sy8yKTooMD5CJiYoRz0tRyksQz1HLzIsQj0wPT09Qj8wOkcvMip4L0IpO3JldHVybnt4OkYrQyx5OkQrQn19ZC5QQVJBTVM9e2FuaW1hdGlvbjp7ZHVyYXRpb246MjUwfSxncmFwaDp7bWV0YTp7bm9kZVNlcDo1LHJhbmtTZXA6MjUsZWRnZVNlcDo1fSxzZXJpZXM6e25vZGVTZXA6NSwKcmFua1NlcDoyNSxlZGdlU2VwOjV9LHBhZGRpbmc6e3BhZGRpbmdUb3A6NDAscGFkZGluZ0xlZnQ6MjB9fSxzdWJzY2VuZTp7bWV0YTp7cGFkZGluZ1RvcDoxMCxwYWRkaW5nQm90dG9tOjEwLHBhZGRpbmdMZWZ0OjEwLHBhZGRpbmdSaWdodDoxMCxsYWJlbEhlaWdodDoyMCxleHRyYWN0WE9mZnNldDoxNSxleHRyYWN0WU9mZnNldDoyMH0sc2VyaWVzOntwYWRkaW5nVG9wOjEwLHBhZGRpbmdCb3R0b206MTAscGFkZGluZ0xlZnQ6MTAscGFkZGluZ1JpZ2h0OjEwLGxhYmVsSGVpZ2h0OjEwfX0sbm9kZVNpemU6e21ldGE6e3JhZGl1czo1LHdpZHRoOjYwLG1heExhYmVsV2lkdGg6NTIsaGVpZ2h0OmQzLnNjYWxlTGluZWFyKCkuZG9tYWluKFsxLDIwMF0pLnJhbmdlKFsxNSw2MF0pLmNsYW1wKCEwKSxleHBhbmRCdXR0b25SYWRpdXM6M30sb3A6e3dpZHRoOjE1LGhlaWdodDo2LHJhZGl1czozLGxhYmVsT2Zmc2V0Oi04LG1heExhYmVsV2lkdGg6MzB9LHNlcmllczp7ZXhwYW5kZWQ6e3JhZGl1czoxMCwKbGFiZWxPZmZzZXQ6MH0sdmVydGljYWw6e3dpZHRoOjE2LGhlaWdodDoxMyxsYWJlbE9mZnNldDotMTN9LGhvcml6b250YWw6e3dpZHRoOjI0LGhlaWdodDo4LHJhZGl1czoxMCxsYWJlbE9mZnNldDotMTB9fSxicmlkZ2U6e3dpZHRoOjIwLGhlaWdodDoyMCxyYWRpdXM6MixsYWJlbE9mZnNldDowfX0sc2hvcnRjdXRTaXplOntvcDp7d2lkdGg6MTAsaGVpZ2h0OjR9LG1ldGE6e3dpZHRoOjEyLGhlaWdodDo0LHJhZGl1czoxfSxzZXJpZXM6e3dpZHRoOjE0LGhlaWdodDo0fX0sYW5ub3RhdGlvbnM6e2luYm94V2lkdGg6NTAsb3V0Ym94V2lkdGg6NTAseE9mZnNldDoxMCx5T2Zmc2V0OjMsbGFiZWxPZmZzZXQ6MixtYXhMYWJlbFdpZHRoOjEyMH0sY29uc3RhbnQ6e3NpemU6e3dpZHRoOjQsaGVpZ2h0OjR9fSxzZXJpZXM6e21heFN0YWNrQ291bnQ6MyxwYXJhbGxlbFN0YWNrT2Zmc2V0UmF0aW86LjIsdG93ZXJTdGFja09mZnNldFJhdGlvOi41fSxtaW5pbWFwOntzaXplOjE1MH19O2QuTUlOX0FVWF9XSURUSD0KMTQwO2QubGF5b3V0U2NlbmU9ZjtkLmNvbXB1dGVDWFBvc2l0aW9uT2ZOb2RlU2hhcGU9dH0pKGMubGF5b3V0fHwoYy5sYXlvdXQ9e30pKX0pKGEuZ3JhcGh8fChhLmdyYXBoPXt9KSl9KSh0Znx8KHRmPXt9KSk7Cjwvc2NyaXB0Pgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdGYtZ3JhcGgtY29tbW9uL2xvYWRlci5qcwp2YXIgaG09dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKGEsYyxkLGYpe3JldHVybiBuZXcgKGR8fChkPVByb21pc2UpKShmdW5jdGlvbihnLGwpe2Z1bmN0aW9uIGsocSl7dHJ5e3AoZi5uZXh0KHEpKX1jYXRjaChyKXtsKHIpfX1mdW5jdGlvbiBtKHEpe3RyeXtwKGZbInRocm93Il0ocSkpfWNhdGNoKHIpe2wocil9fWZ1bmN0aW9uIHAocSl7cS5kb25lP2cocS52YWx1ZSk6KG5ldyBkKGZ1bmN0aW9uKHIpe3IocS52YWx1ZSl9KSkudGhlbihrLG0pfXAoKGY9Zi5hcHBseShhLGN8fFtdKSkubmV4dCgpKX0pfTsKKGZ1bmN0aW9uKGEpeyhmdW5jdGlvbihjKXsoZnVuY3Rpb24oZCl7ZC5mZXRjaEFuZENvbnN0cnVjdEhpZXJhcmNoaWNhbEdyYXBoPWZ1bmN0aW9uKGYsZyxsLGs9bmV3IGMub3AuVHB1Q29tcGF0aWJpbGl0eVByb3ZpZGVyLG09Yy5oaWVyYXJjaHkuRGVmYXVsdEhpZXJhcmNoeVBhcmFtcyl7Y29uc3QgcD1jLnV0aWwuZ2V0U3VidGFza1RyYWNrZXIoZiwyMCwiR3JhcGgiKSxxPWMudXRpbC5nZXRTdWJ0YXNrVHJhY2tlcihmLDUwLCJOYW1lc3BhY2UgaGllcmFyY2h5Iik7cmV0dXJuIGMucGFyc2VyLmZldGNoQW5kUGFyc2VHcmFwaERhdGEoZyxsLGMudXRpbC5nZXRTdWJ0YXNrVHJhY2tlcihmLDMwLCJEYXRhIikpLnRoZW4oZnVuY3Rpb24ocil7aWYoIXIubm9kZSl0aHJvdyBFcnJvcigiVGhlIGdyYXBoIGlzIGVtcHR5LiBUaGlzIGNhbiBoYXBwZW4gd2hlbiBUZW5zb3JGbG93IGNvdWxkIG5vdCB0cmFjZSBhbnkgZ3JhcGguIFBsZWFzZSByZWZlciB0byBodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9pc3N1ZXMvMTk2MSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iKTsKcmV0dXJuIGMuYnVpbGQocixjLkRlZmF1bHRCdWlsZFBhcmFtcyxwKX0sKCk9Pnt0aHJvdyBFcnJvcigiTWFsZm9ybWVkIEdyYXBoRGVmLiBUaGlzIGNhbiBzb21ldGltZXMgYmUgY2F1c2VkIGJ5IGEgYmFkIG5ldHdvcmsgY29ubmVjdGlvbiBvciBkaWZmaWN1bHR5IHJlY29uY2lsaW5nIG11bHRpcGxlIEdyYXBoRGVmczsgZm9yIHRoZSBsYXR0ZXIgY2FzZSwgcGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2lzc3Vlcy8xOTI5LiIpO30pLnRoZW4ocj0+aG0odGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2Mub3AuY2hlY2tPcHNGb3JDb21wYXRpYmlsaXR5KHIsayk7Y29uc3QgdD15aWVsZCBjLmhpZXJhcmNoeS5idWlsZChyLG0scSk7cmV0dXJue2dyYXBoOnIsZ3JhcGhIaWVyYXJjaHk6dH19KSkuY2F0Y2gocj0+e2YucmVwb3J0RXJyb3IoYEdyYXBoIHZpc3VhbGl6YXRpb24gZmFpbGVkLlxuXG4ke3J9YCxyKTt0aHJvdyByOwp9KX19KShjLmxvYWRlcnx8KGMubG9hZGVyPXt9KSl9KShhLmdyYXBofHwoYS5ncmFwaD17fSkpfSkodGZ8fCh0Zj17fSkpOwo8L3NjcmlwdD4KPHNjcmlwdD4vL35+V0VCUEFUSH5+L3RmLWdyYXBoLWNvbW1vbi9ub2RlLmpzCihmdW5jdGlvbihhKXsoZnVuY3Rpb24oYyl7KGZ1bmN0aW9uKGQpeyhmdW5jdGlvbihmKXtmdW5jdGlvbiBnKGNhLGVhLGthKXtpZihlYS5ub2RlLmlzR3JvdXBOb2RlKXtpZihlYS5leHBhbmRlZClyZXR1cm4gZC5idWlsZEdyb3VwKGNhLGVhLGthLGQuQ2xhc3MuU3Vic2NlbmUuR1JPVVApO2Quc2VsZWN0Q2hpbGQoY2EsImciLGQuQ2xhc3MuU3Vic2NlbmUuR1JPVVApLnJlbW92ZSgpfXJldHVybiBudWxsfWZ1bmN0aW9uIGwoY2EsZWEpe2xldCBrYT1lYS54LWVhLndpZHRoLzIrZWEucGFkZGluZ0xlZnQ7ZWE9ZWEueS1lYS5oZWlnaHQvMitlYS5wYWRkaW5nVG9wO2NhPWQuc2VsZWN0Q2hpbGQoY2EsImciLGQuQ2xhc3MuU3Vic2NlbmUuR1JPVVApO2QudHJhbnNsYXRlKGNhLGthLGVhKX1mdW5jdGlvbiBrKGNhLGVhLGthKXtjYT1kLnNlbGVjdE9yQ3JlYXRlQ2hpbGQoY2EsImciLGQuQ2xhc3MuTm9kZS5CVVRUT05fQ09OVEFJTkVSKTtkLnNlbGVjdE9yQ3JlYXRlQ2hpbGQoY2EsImNpcmNsZSIsCmQuQ2xhc3MuTm9kZS5CVVRUT05fQ0lSQ0xFKTtkLnNlbGVjdE9yQ3JlYXRlQ2hpbGQoY2EsInBhdGgiLGQuQ2xhc3MuTm9kZS5FWFBBTkRfQlVUVE9OKS5hdHRyKCJkIiwiTTAsLTIuMiBWMi4yIE0tMi4yLDAgSDIuMiIpO2Quc2VsZWN0T3JDcmVhdGVDaGlsZChjYSwicGF0aCIsZC5DbGFzcy5Ob2RlLkNPTExBUFNFX0JVVFRPTikuYXR0cigiZCIsIk0tMi4yLDAgSDIuMiIpO2NhLm9uKCJjbGljayIsYmE9PntkMy5ldmVudC5zdG9wUHJvcGFnYXRpb24oKTtrYS5maXJlKCJub2RlLXRvZ2dsZS1leHBhbmQiLHtuYW1lOmJhLm5vZGUubmFtZX0pfSk7ZC5wb3NpdGlvbkJ1dHRvbihjYSxlYSl9ZnVuY3Rpb24gbShjYSxlYSxrYSxiYSl7aWYoYmEpY2EuYXR0cigicG9pbnRlci1ldmVudHMiLCJub25lIik7ZWxzZXt2YXIgbGE9ZC5jb250ZXh0bWVudS5nZXRNZW51KGthLHAoZWEubm9kZSxrYSkpO2NhLm9uKCJkYmxjbGljayIsd2E9PntrYS5maXJlKCJub2RlLXRvZ2dsZS1leHBhbmQiLAp7bmFtZTp3YS5ub2RlLm5hbWV9KX0pLm9uKCJtb3VzZW92ZXIiLHdhPT57a2EuaXNOb2RlRXhwYW5kZWQod2EpfHxrYS5maXJlKCJub2RlLWhpZ2hsaWdodCIse25hbWU6d2Eubm9kZS5uYW1lfSl9KS5vbigibW91c2VvdXQiLHdhPT57a2EuaXNOb2RlRXhwYW5kZWQod2EpfHxrYS5maXJlKCJub2RlLXVuaGlnaGxpZ2h0Iix7bmFtZTp3YS5ub2RlLm5hbWV9KX0pLm9uKCJjbGljayIsd2E9PntkMy5ldmVudC5zdG9wUHJvcGFnYXRpb24oKTtrYS5maXJlKCJub2RlLXNlbGVjdCIse25hbWU6d2Eubm9kZS5uYW1lfSl9KS5vbigiY29udGV4dG1lbnUiLCh3YSxDYSk9PntrYS5maXJlKCJub2RlLXNlbGVjdCIse25hbWU6d2Eubm9kZS5uYW1lfSk7bGEuY2FsbCh3YSxDYSl9KX19ZnVuY3Rpb24gcChjYSxlYSl7bGV0IGthPVt7dGl0bGU6KCk9PmMuZ2V0SW5jbHVkZU5vZGVCdXR0b25TdHJpbmcoY2EuaW5jbHVkZSksYWN0aW9uOigpPT57ZWEuZmlyZSgibm9kZS10b2dnbGUtZXh0cmFjdCIsCntuYW1lOmNhLm5hbWV9KX19XTtlYS5ub2RlQ29udGV4dE1lbnVJdGVtcyYmKGthPWthLmNvbmNhdChlYS5ub2RlQ29udGV4dE1lbnVJdGVtcykpO3EoY2EpJiZrYS5wdXNoKHt0aXRsZTooKT0+dihjYSksYWN0aW9uOigpPT57ZWEuZmlyZSgibm9kZS10b2dnbGUtc2VyaWVzZ3JvdXAiLHtuYW1lOnIoY2EpfSl9fSk7cmV0dXJuIGthfWZ1bmN0aW9uIHEoY2Epe3JldHVybiBudWxsIT09cihjYSl9ZnVuY3Rpb24gcihjYSl7cmV0dXJuIGNhP2NhLnR5cGU9PT1jLk5vZGVUeXBlLlNFUklFUz9jYS5uYW1lOmNhLnR5cGU9PT1jLk5vZGVUeXBlLk9QP2NhLm93bmluZ1NlcmllczpudWxsOm51bGx9ZnVuY3Rpb24gdChjYSl7bGV0IGVhPW51bGw7aWYoIWNhKXJldHVybiBudWxsO2NhLnR5cGU9PT1jLk5vZGVUeXBlLlNFUklFUz9lYT1jYTpjYS5wYXJlbnROb2RlJiZjYS5wYXJlbnROb2RlLnR5cGU9PT1jLk5vZGVUeXBlLlNFUklFUyYmKGVhPWNhLnBhcmVudE5vZGUpO3JldHVybiBlYX1mdW5jdGlvbiB2KGNhKXtyZXR1cm4gYS5ncmFwaC5nZXRHcm91cFNlcmllc05vZGVCdXR0b25TdHJpbmcobnVsbCE9PQp0KGNhKT9hLmdyYXBoLlNlcmllc0dyb3VwaW5nVHlwZS5HUk9VUDphLmdyYXBoLlNlcmllc0dyb3VwaW5nVHlwZS5VTkdST1VQKX1mdW5jdGlvbiBBKGNhLGVhLGthKXt2YXIgYmE9ZWEuZGlzcGxheU5hbWU7bGV0IGxhPWVhLm5vZGUudHlwZT09PWMuTm9kZVR5cGUuTUVUQSYmIWVhLmV4cGFuZGVkO2NhPWQuc2VsZWN0T3JDcmVhdGVDaGlsZChjYSwidGV4dCIsZC5DbGFzcy5Ob2RlLkxBQkVMKTtsZXQgd2E9Y2Eubm9kZSgpO3dhLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQod2EpO2NhLmF0dHIoImR5IiwiLjM1ZW0iKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpO2xhJiYoYmEubGVuZ3RoPmthLm1heE1ldGFub2RlTGFiZWxMZW5ndGgmJihiYT1iYS5zdWJzdHIoMCxrYS5tYXhNZXRhbm9kZUxhYmVsTGVuZ3RoLTIpKyIuLi4iKSxrYT14KGthKSxjYS5hdHRyKCJmb250LXNpemUiLGthKGJhLmxlbmd0aCkrInB4IikpO2JhPWNhLnRleHQoYmEpO3koYmEsZWEubm9kZS50eXBlLGVhKTsKcmV0dXJuIGNhfWZ1bmN0aW9uIHkoY2EsZWEsa2Epe2xldCBiYT1jYS5ub2RlKCk7dmFyIGxhPWJhLmdldENvbXB1dGVkVGV4dExlbmd0aCgpO2xldCB3YT1iYS50ZXh0Q29udGVudCxDYT1udWxsO3N3aXRjaChlYSl7Y2FzZSBjLk5vZGVUeXBlLk1FVEE6a2EmJiFrYS5leHBhbmRlZCYmKENhPWMubGF5b3V0LlBBUkFNUy5ub2RlU2l6ZS5tZXRhLm1heExhYmVsV2lkdGgpO2JyZWFrO2Nhc2UgYy5Ob2RlVHlwZS5PUDpDYT1jLmxheW91dC5QQVJBTVMubm9kZVNpemUub3AubWF4TGFiZWxXaWR0aDticmVhaztjYXNlIC0xOkNhPWMubGF5b3V0LlBBUkFNUy5hbm5vdGF0aW9ucy5tYXhMYWJlbFdpZHRofWlmKCEobnVsbD09PUNhfHxsYTw9Q2EpKXtmb3IobGE9MTtiYS5nZXRTdWJTdHJpbmdMZW5ndGgoMCxsYSk8Q2E7KWxhKys7ZWE9YmEudGV4dENvbnRlbnQuc3Vic3RyKDAsbGEpO2RvIGVhPWVhLnN1YnN0cigwLGVhLmxlbmd0aC0xKSxiYS50ZXh0Q29udGVudD1lYSsiLi4uIixsYT1iYS5nZXRDb21wdXRlZFRleHRMZW5ndGgoKTsKd2hpbGUobGE+Q2EmJjA8ZWEubGVuZ3RoKTtyZXR1cm4gY2EuYXBwZW5kKCJ0aXRsZSIpLnRleHQod2EpfX1mdW5jdGlvbiB4KGNhKXtoYXx8KGhhPWQzLnNjYWxlTGluZWFyKCkuZG9tYWluKFtjYS5tYXhNZXRhbm9kZUxhYmVsTGVuZ3RoTGFyZ2VGb250LGNhLm1heE1ldGFub2RlTGFiZWxMZW5ndGhdKS5yYW5nZShbY2EubWF4TWV0YW5vZGVMYWJlbExlbmd0aEZvbnRTaXplLGNhLm1pbk1ldGFub2RlTGFiZWxMZW5ndGhGb250U2l6ZV0pLmNsYW1wKCEwKSk7cmV0dXJuIGhhfWZ1bmN0aW9uIEMoY2EsZWEsa2EsYmEpe2Quc2VsZWN0Q2hpbGQoY2EsInRleHQiLGQuQ2xhc3MuTm9kZS5MQUJFTCkudHJhbnNpdGlvbigpLmF0dHIoIngiLGVhKS5hdHRyKCJ5IixrYStiYSl9ZnVuY3Rpb24gRihjYSxlYSxrYSl7Y2E9ZC5zZWxlY3RPckNyZWF0ZUNoaWxkKGNhLCJnIixrYSk7c3dpdGNoKGVhLm5vZGUudHlwZSl7Y2FzZSBjLk5vZGVUeXBlLk9QOmVhPWVhLm5vZGU7aWYoXy5pc051bWJlcihlYS5mdW5jdGlvbklucHV0SW5kZXgpfHwKXy5pc051bWJlcihlYS5mdW5jdGlvbk91dHB1dEluZGV4KSl7ZC5zZWxlY3RPckNyZWF0ZUNoaWxkKGNhLCJwb2x5Z29uIixkLkNsYXNzLk5vZGUuQ09MT1JfVEFSR0VUKTticmVha31kLnNlbGVjdE9yQ3JlYXRlQ2hpbGQoY2EsImVsbGlwc2UiLGQuQ2xhc3MuTm9kZS5DT0xPUl9UQVJHRVQpO2JyZWFrO2Nhc2UgYy5Ob2RlVHlwZS5TRVJJRVM6a2E9ImFubm90YXRpb24iO2VhLmNvcmVHcmFwaCYmKGthPWVhLm5vZGUuaGFzTm9uQ29udHJvbEVkZ2VzPyJ2ZXJ0aWNhbCI6Imhvcml6b250YWwiKTtsZXQgYmE9W2QuQ2xhc3MuTm9kZS5DT0xPUl9UQVJHRVRdO2VhLmlzRmFkZWRPdXQmJmJhLnB1c2goImZhZGVkLWVsbGlwc2UiKTtkLnNlbGVjdE9yQ3JlYXRlQ2hpbGQoY2EsInVzZSIsYmEpLmF0dHIoInhsaW5rOmhyZWYiLCIjb3Atc2VyaWVzLSIra2ErIi1zdGFtcCIpO2Quc2VsZWN0T3JDcmVhdGVDaGlsZChjYSwicmVjdCIsZC5DbGFzcy5Ob2RlLkNPTE9SX1RBUkdFVCkuYXR0cigicngiLAplYS5yYWRpdXMpLmF0dHIoInJ5IixlYS5yYWRpdXMpO2JyZWFrO2Nhc2UgYy5Ob2RlVHlwZS5CUklER0U6ZC5zZWxlY3RPckNyZWF0ZUNoaWxkKGNhLCJyZWN0IixkLkNsYXNzLk5vZGUuQ09MT1JfVEFSR0VUKS5hdHRyKCJyeCIsZWEucmFkaXVzKS5hdHRyKCJyeSIsZWEucmFkaXVzKTticmVhaztjYXNlIGMuTm9kZVR5cGUuTUVUQTpkLnNlbGVjdE9yQ3JlYXRlQ2hpbGQoY2EsInJlY3QiLGQuQ2xhc3MuTm9kZS5DT0xPUl9UQVJHRVQpLmF0dHIoInJ4IixlYS5yYWRpdXMpLmF0dHIoInJ5IixlYS5yYWRpdXMpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgRXJyb3IoIlVucmVjb2duaXplZCBub2RlIHR5cGU6ICIrZWEubm9kZS50eXBlKTt9cmV0dXJuIGNhfWZ1bmN0aW9uIEQoY2Epe3N3aXRjaChjYS5ub2RlLnR5cGUpe2Nhc2UgYy5Ob2RlVHlwZS5PUDpyZXR1cm4gZC5DbGFzcy5PUE5PREU7Y2FzZSBjLk5vZGVUeXBlLk1FVEE6cmV0dXJuIGQuQ2xhc3MuTUVUQU5PREU7Y2FzZSBjLk5vZGVUeXBlLlNFUklFUzpyZXR1cm4gZC5DbGFzcy5TRVJJRVNOT0RFOwpjYXNlIGMuTm9kZVR5cGUuQlJJREdFOnJldHVybiBkLkNsYXNzLkJSSURHRU5PREU7Y2FzZSBjLk5vZGVUeXBlLkVMTElQU0lTOnJldHVybiBkLkNsYXNzLkVMTElQU0lTTk9ERX10aHJvdyBFcnJvcigiVW5yZWNvZ25pemVkIG5vZGUgdHlwZTogIitjYS5ub2RlLnR5cGUpO31mdW5jdGlvbiBCKGNhLGVhKXt2YXIga2E9ZC5zZWxlY3RDaGlsZChjYSwiZyIsZC5DbGFzcy5Ob2RlLlNIQVBFKTtsZXQgYmE9Yy5sYXlvdXQuY29tcHV0ZUNYUG9zaXRpb25PZk5vZGVTaGFwZShlYSk7c3dpdGNoKGVhLm5vZGUudHlwZSl7Y2FzZSBjLk5vZGVUeXBlLk9QOntjb25zdCBsYT1lYS5ub2RlO18uaXNOdW1iZXIobGEuZnVuY3Rpb25JbnB1dEluZGV4KXx8Xy5pc051bWJlcihsYS5mdW5jdGlvbk91dHB1dEluZGV4KT8oa2E9ZC5zZWxlY3RDaGlsZChrYSwicG9seWdvbiIpLGQucG9zaXRpb25UcmlhbmdsZShrYSxlYS54LGVhLnksZWEuY29yZUJveC53aWR0aCxlYS5jb3JlQm94LmhlaWdodCkpOihrYT0KZC5zZWxlY3RDaGlsZChrYSwiZWxsaXBzZSIpLGQucG9zaXRpb25FbGxpcHNlKGthLGJhLGVhLnksZWEuY29yZUJveC53aWR0aCxlYS5jb3JlQm94LmhlaWdodCkpO0MoY2EsYmEsZWEueSxlYS5sYWJlbE9mZnNldCk7YnJlYWt9Y2FzZSBjLk5vZGVUeXBlLk1FVEE6a2E9a2Euc2VsZWN0QWxsKCJyZWN0Iik7ZWEuZXhwYW5kZWQ/KGQucG9zaXRpb25SZWN0KGthLGVhLngsZWEueSxlYS53aWR0aCxlYS5oZWlnaHQpLGwoY2EsZWEpLEMoY2EsYmEsZWEueSwtZWEuaGVpZ2h0LzIrZWEubGFiZWxIZWlnaHQvMikpOihkLnBvc2l0aW9uUmVjdChrYSxiYSxlYS55LGVhLmNvcmVCb3gud2lkdGgsZWEuY29yZUJveC5oZWlnaHQpLEMoY2EsYmEsZWEueSwwKSk7YnJlYWs7Y2FzZSBjLk5vZGVUeXBlLlNFUklFUzprYT1kLnNlbGVjdENoaWxkKGthLCJ1c2UiKTtlYS5leHBhbmRlZD8oZC5wb3NpdGlvblJlY3Qoa2EsZWEueCxlYS55LGVhLndpZHRoLGVhLmhlaWdodCksbChjYSxlYSksQyhjYSxiYSwKZWEueSwtZWEuaGVpZ2h0LzIrZWEubGFiZWxIZWlnaHQvMikpOihkLnBvc2l0aW9uUmVjdChrYSxiYSxlYS55LGVhLmNvcmVCb3gud2lkdGgsZWEuY29yZUJveC5oZWlnaHQpLEMoY2EsYmEsZWEueSxlYS5sYWJlbE9mZnNldCkpO2JyZWFrO2Nhc2UgYy5Ob2RlVHlwZS5CUklER0U6Y2E9ZC5zZWxlY3RDaGlsZChrYSwicmVjdCIpO2QucG9zaXRpb25SZWN0KGNhLGVhLngsZWEueSxlYS53aWR0aCxlYS5oZWlnaHQpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgRXJyb3IoIlVucmVjb2duaXplZCBub2RlIHR5cGU6ICIrZWEubm9kZS50eXBlKTt9fWZ1bmN0aW9uIEcoY2EsZWEsa2Epe2xldCBiYT1hLmdyYXBoLnV0aWwuZXNjYXBlUXVlcnlTZWxlY3RvcihjYSk7aWYoIWthKXJldHVybmB1cmwoIyR7YmF9KWA7a2E9ZDMuc2VsZWN0KGthKTtsZXQgbGE9a2Euc2VsZWN0KCJkZWZzI19ncmFwaC1ncmFkaWVudHMiKTtsYS5lbXB0eSgpJiYobGE9a2EuYXBwZW5kKCJkZWZzIikuYXR0cigiaWQiLCJfZ3JhcGgtZ3JhZGllbnRzIikpOwpsZXQgd2E9bGEuc2VsZWN0KCJsaW5lYXJHcmFkaWVudCMiK2JhKTtpZih3YS5lbXB0eSgpKXt3YT1sYS5hcHBlbmQoImxpbmVhckdyYWRpZW50IikuYXR0cigiaWQiLGNhKTt3YS5zZWxlY3RBbGwoIioiKS5yZW1vdmUoKTtsZXQgQ2E9MDtfLmVhY2goZWEseGE9PntsZXQgemE9eGEuY29sb3I7d2EuYXBwZW5kKCJzdG9wIikuYXR0cigib2Zmc2V0IixDYSkuYXR0cigic3RvcC1jb2xvciIsemEpO3dhLmFwcGVuZCgic3RvcCIpLmF0dHIoIm9mZnNldCIsQ2EreGEucHJvcG9ydGlvbikuYXR0cigic3RvcC1jb2xvciIsemEpO0NhKz14YS5wcm9wb3J0aW9ufSl9fWZ1bmN0aW9uIEsoY2EsZWEsa2EsYmEsbGEpe2xldCB3YT1jLnJlbmRlci5NZXRhbm9kZUNvbG9ycztzd2l0Y2goZWEpe2Nhc2UgWC5TVFJVQ1RVUkU6cmV0dXJuIGthLm5vZGUudHlwZT09PWMuTm9kZVR5cGUuTUVUQT8oZWE9a2Eubm9kZS50ZW1wbGF0ZUlkLG51bGw9PT1lYT93YS5VTktOT1dOOndhLlNUUlVDVFVSRV9QQUxFVFRFKGNhKGVhKSwKYmEpKTprYS5ub2RlLnR5cGU9PT1jLk5vZGVUeXBlLlNFUklFUz9iYT93YS5FWFBBTkRFRF9DT0xPUjoid2hpdGUiOmthLm5vZGUudHlwZT09PWMuTm9kZVR5cGUuQlJJREdFP2thLnN0cnVjdHVyYWw/IiNmMGUiOmthLm5vZGUuaW5ib3VuZD8iIzBlZiI6IiNmZTAiOl8uaXNOdW1iZXIoa2Eubm9kZS5mdW5jdGlvbklucHV0SW5kZXgpPyIjNzk1NTQ4IjpfLmlzTnVtYmVyKGthLm5vZGUuZnVuY3Rpb25PdXRwdXRJbmRleCk/IiMwMDk2ODgiOiJ3aGl0ZSI7Y2FzZSBYLkRFVklDRTpyZXR1cm4gbnVsbD09a2EuZGV2aWNlQ29sb3JzP3dhLlVOS05PV046YmE/d2EuRVhQQU5ERURfQ09MT1I6RygiZGV2aWNlLSIra2Eubm9kZS5uYW1lLGthLmRldmljZUNvbG9ycyxsYSk7Y2FzZSBYLlhMQV9DTFVTVEVSOnJldHVybiBudWxsPT1rYS54bGFDbHVzdGVyQ29sb3JzP3dhLlVOS05PV046YmE/d2EuRVhQQU5ERURfQ09MT1I6RygieGxhLSIra2Eubm9kZS5uYW1lLGthLnhsYUNsdXN0ZXJDb2xvcnMsCmxhKTtjYXNlIFguQ09NUFVURV9USU1FOnJldHVybiBiYT93YS5FWFBBTkRFRF9DT0xPUjprYS5jb21wdXRlVGltZUNvbG9yfHx3YS5VTktOT1dOO2Nhc2UgWC5NRU1PUlk6cmV0dXJuIGJhP3dhLkVYUEFOREVEX0NPTE9SOmthLm1lbW9yeUNvbG9yfHx3YS5VTktOT1dOO2Nhc2UgWC5PUF9DT01QQVRJQklMSVRZOnJldHVybiBudWxsPT1rYS5jb21wYXRpYmlsaXR5Q29sb3JzP3dhLlVOS05PV046YmE/d2EuRVhQQU5ERURfQ09MT1I6Rygib3AtY29tcGF0LSIra2Eubm9kZS5uYW1lLGthLmNvbXBhdGliaWxpdHlDb2xvcnMsbGEpO2RlZmF1bHQ6dGhyb3cgRXJyb3IoIlVua25vd24gY2FzZSB0byBjb2xvciBub2RlcyBieSIpO319ZnVuY3Rpb24gTChjYSxlYSxrYSxiYSl7YmE9YmF8fGQuQ2xhc3MuTm9kZS5TSEFQRTtsZXQgbGE9a2EuaXNOb2RlU2VsZWN0ZWQoZWEubm9kZS5uYW1lKSx3YT1lYS5pc0luRXh0cmFjdHx8ZWEuaXNPdXRFeHRyYWN0fHxlYS5pc0xpYnJhcnlGdW5jdGlvbiwKQ2E9ZWEuZXhwYW5kZWQmJmJhIT09ZC5DbGFzcy5Bbm5vdGF0aW9uLk5PREUseGE9ZWEuaXNGYWRlZE91dDtjYS5jbGFzc2VkKCJoaWdobGlnaHRlZCIsa2EuaXNOb2RlSGlnaGxpZ2h0ZWQoZWEubm9kZS5uYW1lKSk7Y2EuY2xhc3NlZCgic2VsZWN0ZWQiLGxhKTtjYS5jbGFzc2VkKCJleHRyYWN0Iix3YSk7Y2EuY2xhc3NlZCgiZXhwYW5kZWQiLENhKTtjYS5jbGFzc2VkKCJmYWRlZCIseGEpO2NhPWNhLnNlbGVjdCgiLiIrYmErIiAuIitkLkNsYXNzLk5vZGUuQ09MT1JfVEFSR0VUKTtlYT1LKGthLnRlbXBsYXRlSW5kZXgsWFtrYS5jb2xvckJ5LnRvVXBwZXJDYXNlKCldLGVhLENhLGthLmdldEdyYXBoU3ZnUm9vdCgpKTtjYS5zdHlsZSgiZmlsbCIsZWEpO2NhLnN0eWxlKCJzdHJva2UiLGxhP251bGw6SihlYSkpfWZ1bmN0aW9uIEooY2Epe3JldHVybiJ1cmwiPT09Y2Euc3Vic3RyaW5nKDAsMyk/Yy5yZW5kZXIuTWV0YW5vZGVDb2xvcnMuR1JBRElFTlRfT1VUTElORTpkMy5yZ2IoY2EpLmRhcmtlcigpLnRvU3RyaW5nKCl9CmZ1bmN0aW9uIFAoY2EsZWEpe2xldCBrYT1bXTtjYT1lYS5nZXROb2RlQnlOYW1lKGNhKTtpZihjYSBpbnN0YW5jZW9mIGEuZ3JhcGguT3BOb2RlSW1wbClyZXR1cm5bY2FdLmNvbmNhdChjYS5pbkVtYmVkZGluZ3MpO2NhPWNhLm1ldGFncmFwaC5ub2RlcygpO18uZWFjaChjYSxmdW5jdGlvbihiYSl7a2E9a2EuY29uY2F0KFAoYmEsZWEpKX0pO3JldHVybiBrYX1mdW5jdGlvbiBTKGNhLGVhLGthLGJhKXtpZihiYVtrYS5uYW1lXSlyZXR1cm4gYmE7YmFba2EubmFtZV09ITA7dmFyIGxhPWthLmlucHV0cztsZXQgd2E9YWEoZWEsa2EpO2QzLnNlbGVjdChjYSkuc2VsZWN0KGAubm9kZVtkYXRhLW5hbWU9IiR7d2EubmFtZX0iXWApLmNsYXNzZWQoImlucHV0LWhpZ2hsaWdodCIsITApO2xldCBDYT17fTtfLmVhY2gobGEsZnVuY3Rpb24oRmEpe0ZhPWVhLmdldE5vZGVCeU5hbWUoRmEubmFtZSk7aWYodm9pZCAwIT09RmEpe0ZhIGluc3RhbmNlb2YgYy5NZXRhbm9kZUltcGwmJihGYT1hLmdyYXBoLmdldFN0cmljdE5hbWUoRmEubmFtZSksCkZhPWVhLmdldE5vZGVCeU5hbWUoRmEpKTt2YXIgU2E9YWEoZWEsRmEpLEVhPUNhW1NhLm5hbWVdO0VhP0VhLm9wTm9kZXMucHVzaChGYSk6Q2FbU2EubmFtZV09e3Zpc2libGVQYXJlbnQ6U2Esb3BOb2RlczpbRmFdfX19KTtsZXQgeGE9e30semE9W3dhXTt4YVt3YS5uYW1lXT17dHJhY2VkOiExLGluZGV4OjAsY29ubmVjdGlvbkVuZHBvaW50czpbXX07a2E9d2E7Zm9yKGxhPTE7a2EubmFtZSE9PWEuZ3JhcGguUk9PVF9OQU1FO2xhKyspa2E9a2EucGFyZW50Tm9kZSx4YVtrYS5uYW1lXT17dHJhY2VkOiExLGluZGV4OmxhLGNvbm5lY3Rpb25FbmRwb2ludHM6W119LHphW2xhXT1rYTtfLmZvck93bihDYSxmdW5jdGlvbihGYSl7bGV0IFNhPUZhLnZpc2libGVQYXJlbnQ7Xy5lYWNoKEZhLm9wTm9kZXMsZnVuY3Rpb24oRWEpe2JhPVMoY2EsZWEsRWEsYmEpfSk7U2EubmFtZSE9PXdhLm5hbWUmJk4oY2EsU2EseGEsemEpfSk7cmV0dXJuIGJhfWZ1bmN0aW9uIE4oY2EsZWEsa2EsYmEpe3ZhciBsYT0KZWEsd2E9ZWE7Zm9yKGVhPVtdOyFrYVtsYS5uYW1lXTspd2EubmFtZSE9PWxhLm5hbWUmJmVhLnB1c2goW3dhLGxhXSksd2E9bGEsbGE9bGEucGFyZW50Tm9kZTtrYT1rYVtsYS5uYW1lXS5pbmRleDtsZXQgQ2E9YmFbTWF0aC5tYXgoa2EtMSwwKV0ubmFtZTt3YT1sYT13YS5uYW1lO2NvbnN0IHhhPWQzLnNlbGVjdChjYSk7eGEuc2VsZWN0QWxsKGBbZGF0YS1lZGdlPSIke3dhfS0tJHtDYX0iXWApLmNsYXNzZWQoImlucHV0LWVkZ2UtaGlnaGxpZ2h0IiwhMCk7Xy5lYWNoKGVhLGZ1bmN0aW9uKHphKXt4YS5zZWxlY3RBbGwoYFtkYXRhLWVkZ2U9IiR7emFbMF0ubmFtZX0tLSR7Q2F9YCtgfn4ke3phWzFdLm5hbWV9fn5PVVQiXWApLmNsYXNzZWQoImlucHV0LWVkZ2UtaGlnaGxpZ2h0IiwhMCl9KTtmb3IoY2E9MTtjYTxrYTtjYSsrKXhhLnNlbGVjdEFsbChgW2RhdGEtZWRnZT0iJHtsYX1+fiR7YmFbY2FdLm5hbWV9YCtgfn5JTi0tJHtiYVtjYS0xXS5uYW1lfSJdYCkuY2xhc3NlZCgiaW5wdXQtZWRnZS1oaWdobGlnaHQiLAohMCl9ZnVuY3Rpb24gVChjYSxlYSl7bGV0IGthPXt9O18uZWFjaChlYSxmdW5jdGlvbihiYSl7YmE9Y2EuZ2V0Tm9kZUJ5TmFtZShiYSk7YmE9YWEoY2EsYmEpO2thW2JhLm5hbWVdPWJhfSk7cmV0dXJuIGthfWZ1bmN0aW9uIFkoY2EsZWEpe18uZm9yT3duKGVhLGZ1bmN0aW9uKGthKXtmb3IoO2thLm5hbWUhPT1hLmdyYXBoLlJPT1RfTkFNRTspe2NvbnN0IGJhPWQzLnNlbGVjdChjYSkuc2VsZWN0KGAubm9kZVtkYXRhLW5hbWU9IiR7a2EubmFtZX0iXWApOyFiYS5ub2RlcygpLmxlbmd0aHx8YmEuY2xhc3NlZCgiaW5wdXQtaGlnaGxpZ2h0Iil8fGJhLmNsYXNzZWQoInNlbGVjdGVkIil8fGJhLmNsYXNzZWQoIm9wIil8fGJhLmNsYXNzZWQoImlucHV0LXBhcmVudCIsITApO2thPWthLnBhcmVudE5vZGV9fSl9ZnVuY3Rpb24gYWEoY2EsZWEpe2xldCBrYT0hMSxiYT1lYTtmb3IoOyFrYTspaWYoZWE9YmEsYmE9ZWEucGFyZW50Tm9kZSx2b2lkIDA9PT1iYSlrYT0hMDtlbHNle2xldCBsYT0KY2EuZ2V0UmVuZGVyTm9kZUJ5TmFtZShiYS5uYW1lKTtsYSYmKGxhLmV4cGFuZGVkfHxiYSBpbnN0YW5jZW9mIGMuT3BOb2RlSW1wbCkmJihrYT0hMCl9cmV0dXJuIGVhfWYuYnVpbGRHcm91cD1mdW5jdGlvbihjYSxlYSxrYSl7Y2E9ZC5zZWxlY3RPckNyZWF0ZUNoaWxkKGNhLCJnIixkLkNsYXNzLk5vZGUuQ09OVEFJTkVSKS5zZWxlY3RBbGwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jaGlsZE5vZGVzfSkuZGF0YShlYSxiYT0+YmEubm9kZS5uYW1lKyI6IitiYS5ub2RlLnR5cGUpO2NhLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiZGF0YS1uYW1lIixiYT0+YmEubm9kZS5uYW1lKS5lYWNoKGZ1bmN0aW9uKGJhKXtsZXQgbGE9ZDMuc2VsZWN0KHRoaXMpO2thLmFkZE5vZGVHcm91cChiYS5ub2RlLm5hbWUsbGEpfSkubWVyZ2UoY2EpLmF0dHIoImNsYXNzIixiYT0+ZC5DbGFzcy5Ob2RlLkdST1VQKyIgIitEKGJhKSkuZWFjaChmdW5jdGlvbihiYSl7bGV0IGxhPWQzLnNlbGVjdCh0aGlzKTsKdmFyIHdhPWQuc2VsZWN0T3JDcmVhdGVDaGlsZChsYSwiZyIsZC5DbGFzcy5Bbm5vdGF0aW9uLklOQk9YKTtkLmFubm90YXRpb24uYnVpbGRHcm91cCh3YSxiYS5pbkFubm90YXRpb25zLGJhLGthKTt3YT1kLnNlbGVjdE9yQ3JlYXRlQ2hpbGQobGEsImciLGQuQ2xhc3MuQW5ub3RhdGlvbi5PVVRCT1gpO2QuYW5ub3RhdGlvbi5idWlsZEdyb3VwKHdhLGJhLm91dEFubm90YXRpb25zLGJhLGthKTt3YT1GKGxhLGJhLGQuQ2xhc3MuTm9kZS5TSEFQRSk7YmEubm9kZS5pc0dyb3VwTm9kZSYmayh3YSxiYSxrYSk7bSh3YSxiYSxrYSk7ZyhsYSxiYSxrYSk7d2E9QShsYSxiYSxrYSk7bSh3YSxiYSxrYSxiYS5ub2RlLnR5cGU9PT1jLk5vZGVUeXBlLk1FVEEpO0wobGEsYmEsa2EpO0IobGEsYmEpfSk7Y2EuZXhpdCgpLmVhY2goZnVuY3Rpb24oYmEpe2thLnJlbW92ZU5vZGVHcm91cChiYS5ub2RlLm5hbWUpO2xldCBsYT1kMy5zZWxlY3QodGhpcyk7MDxiYS5pbkFubm90YXRpb25zLmxpc3QubGVuZ3RoJiYKbGEuc2VsZWN0KCIuIitkLkNsYXNzLkFubm90YXRpb24uSU5CT1gpLnNlbGVjdEFsbCgiLiIrZC5DbGFzcy5Bbm5vdGF0aW9uLkdST1VQKS5lYWNoKHdhPT57a2EucmVtb3ZlQW5ub3RhdGlvbkdyb3VwKHdhLGJhKX0pOzA8YmEub3V0QW5ub3RhdGlvbnMubGlzdC5sZW5ndGgmJmxhLnNlbGVjdCgiLiIrZC5DbGFzcy5Bbm5vdGF0aW9uLk9VVEJPWCkuc2VsZWN0QWxsKCIuIitkLkNsYXNzLkFubm90YXRpb24uR1JPVVApLmVhY2god2E9PntrYS5yZW1vdmVBbm5vdGF0aW9uR3JvdXAod2EsYmEpfSl9KS5yZW1vdmUoKTtyZXR1cm4gY2F9O2YuZ2V0Q29udGV4dE1lbnU9cDtmLmNhbkJlSW5TZXJpZXM9cTtmLmdldFNlcmllc05hbWU9cjtmLmdldEdyb3VwU2V0dGluZ0xhYmVsPXY7Zi5lbmZvcmNlTGFiZWxXaWR0aD15O2xldCBoYT1udWxsO2YuYnVpbGRTaGFwZT1GO2Yubm9kZUNsYXNzPUQ7bGV0IFg7KGZ1bmN0aW9uKGNhKXtjYVtjYS5TVFJVQ1RVUkU9MF09IlNUUlVDVFVSRSI7Y2FbY2EuREVWSUNFPQoxXT0iREVWSUNFIjtjYVtjYS5YTEFfQ0xVU1RFUj0yXT0iWExBX0NMVVNURVIiO2NhW2NhLkNPTVBVVEVfVElNRT0zXT0iQ09NUFVURV9USU1FIjtjYVtjYS5NRU1PUlk9NF09Ik1FTU9SWSI7Y2FbY2EuT1BfQ09NUEFUSUJJTElUWT01XT0iT1BfQ09NUEFUSUJJTElUWSJ9KShYPWYuQ29sb3JCeXx8KGYuQ29sb3JCeT17fSkpO2YucmVtb3ZlR3JhZGllbnREZWZpbml0aW9ucz1mdW5jdGlvbihjYSl7ZDMuc2VsZWN0KGNhKS5zZWxlY3QoImRlZnMjX2dyYXBoLWdyYWRpZW50cyIpLnJlbW92ZSgpfTtmLmdldEZpbGxGb3JOb2RlPUs7Zi5zdHlsaXplPUw7Zi5nZXRTdHJva2VGb3JGaWxsPUo7Zi51cGRhdGVJbnB1dFRyYWNlPWZ1bmN0aW9uKGNhLGVhLGthLGJhKXtjb25zdCBsYT1kMy5zZWxlY3QoY2EpO2xhLnNlbGVjdEFsbCgiLmlucHV0LWhpZ2hsaWdodCIpLmNsYXNzZWQoImlucHV0LWhpZ2hsaWdodCIsITEpO2xhLnNlbGVjdEFsbCgiLm5vbi1pbnB1dCIpLmNsYXNzZWQoIm5vbi1pbnB1dCIsCiExKTtsYS5zZWxlY3RBbGwoIi5pbnB1dC1wYXJlbnQiKS5jbGFzc2VkKCJpbnB1dC1wYXJlbnQiLCExKTtsYS5zZWxlY3RBbGwoIi5pbnB1dC1jaGlsZCIpLmNsYXNzZWQoImlucHV0LWNoaWxkIiwhMSk7bGEuc2VsZWN0QWxsKCIuaW5wdXQtZWRnZS1oaWdobGlnaHQiKS5jbGFzc2VkKCJpbnB1dC1lZGdlLWhpZ2hsaWdodCIsITEpO2xhLnNlbGVjdEFsbCgiLm5vbi1pbnB1dC1lZGdlLWhpZ2hsaWdodCIpLmNsYXNzZWQoIm5vbi1pbnB1dC1lZGdlLWhpZ2hsaWdodCIsITEpO2xhLnNlbGVjdEFsbCgiLmlucHV0LWhpZ2hsaWdodC1zZWxlY3RlZCIpLmNsYXNzZWQoImlucHV0LWhpZ2hsaWdodC1zZWxlY3RlZCIsITEpO2lmKGVhJiZiYSYma2Epe2thPVAoa2EsZWEpO3ZhciB3YT17fTtfLmVhY2goa2EsZnVuY3Rpb24oQ2Epe3dhPVMoY2EsZWEsQ2Esd2EpfSk7a2E9T2JqZWN0LmtleXMod2EpO2thPVQoZWEsa2EpO1koY2Esa2EpO2xhLnNlbGVjdEFsbCgiZy5ub2RlOm5vdCguc2VsZWN0ZWQpOm5vdCguaW5wdXQtaGlnaGxpZ2h0KTpub3QoLmlucHV0LXBhcmVudCk6bm90KC5pbnB1dC1jaGlsZHJlbikiKS5jbGFzc2VkKCJub24taW5wdXQiLAohMCkuZWFjaChmdW5jdGlvbihDYSl7bGEuc2VsZWN0QWxsKGBbZGF0YS1uYW1lPSIke0NhLm5vZGUubmFtZX0iXWApLmNsYXNzZWQoIm5vbi1pbnB1dCIsITApfSk7bGEuc2VsZWN0QWxsKCJnLmVkZ2U6bm90KC5pbnB1dC1lZGdlLWhpZ2hsaWdodCkiKS5jbGFzc2VkKCJub24taW5wdXQtZWRnZS1oaWdobGlnaHQiLCEwKX19O2YuZ2V0VmlzaWJsZVBhcmVudD1hYX0pKGQubm9kZXx8KGQubm9kZT17fSkpfSkoYy5zY2VuZXx8KGMuc2NlbmU9e30pKX0pKGEuZ3JhcGh8fChhLmdyYXBoPXt9KSl9KSh0Znx8KHRmPXt9KSk7Cjwvc2NyaXB0Pgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdGYtZ3JhcGgtY29tbW9uL29wLmpzCihmdW5jdGlvbihhKXsoZnVuY3Rpb24oYyl7KGZ1bmN0aW9uKGQpe2NsYXNzIGZ7aXNOb3RUcHVPcChnKXtyZXR1cm4tMSE9Zy50b0xvd2VyQ2FzZSgpLnNlYXJjaCgiY3B1OiIpfHwtMSE9Zy50b0xvd2VyQ2FzZSgpLnNlYXJjaCgiZ3B1OiIpPyEwOi0xPT1nLnRvTG93ZXJDYXNlKCkuc2VhcmNoKCJ0cHUiKX1vcFZhbGlkKGcpe3JldHVybiAwPT1nLm5hbWUuc2VhcmNoKGMuRlVOQ1RJT05fTElCUkFSWV9OT0RFX1BSRUZJWCl8fCFnLm9wfHxnLmRldmljZSYmdGhpcy5pc05vdFRwdU9wKGcuZGV2aWNlKXx8Zy5kZXZpY2UmJi0xIT1nLmRldmljZS5zZWFyY2goIlRQVV9TWVNURU0iKT8hMDpfLmluY2x1ZGVzKGYuV0hJVEVMSVNULGcub3ApfX1mLldISVRFTElTVD0iQWJzIEFjb3MgQWNvc2ggQWRkIEFkZE4gQWRqdXN0Q29udHJhc3R2MiBBZGp1c3RIdWUgQWRqdXN0U2F0dXJhdGlvbiBBbGwgQW5nbGUgQW55IEFwcHJveGltYXRlRXF1YWwgQXJnTWF4IEFyZ01pbiBBc2luIEFzaW5oIEFzc2VydCBBc3NpZ25BZGRWYXJpYWJsZU9wIEFzc2lnblN1YlZhcmlhYmxlT3AgQXNzaWduVmFyaWFibGVPcCBBdGFuIEF0YW4yIEF0YW5oIEF2Z1Bvb2wgQXZnUG9vbDNEIEF2Z1Bvb2wzREdyYWQgQXZnUG9vbEdyYWQgQmF0Y2hNYXRNdWwgQmF0Y2hUb1NwYWNlIEJhdGNoVG9TcGFjZU5EIEJpYXNBZGQgQmlhc0FkZEdyYWQgQmlhc0FkZFYxIEJpdGNhc3QgQml0d2lzZUFuZCBCaXR3aXNlT3IgQml0d2lzZVhvciBCcm9hZGNhc3RBcmdzIEJyb2FkY2FzdEdyYWRpZW50QXJncyBCdWNrZXRpemUgQ2FzdCBDZWlsIENoZWNrTnVtZXJpY3MgQ2hvbGVza3kgQ2xpcEJ5VmFsdWUgQ29tcGxleCBDb21wbGV4QWJzIENvbmNhdCBDb25jYXRPZmZzZXQgQ29uY2F0VjIgQ29uaiBDb25qdWdhdGVUcmFuc3Bvc2UgQ29uc3QgQ29udHJvbFRyaWdnZXIgQ29udjJEIENvbnYyREJhY2twcm9wRmlsdGVyIENvbnYyREJhY2twcm9wSW5wdXQgQ29udjNEIENvbnYzREJhY2twcm9wRmlsdGVyVjIgQ29udjNEQmFja3Byb3BJbnB1dFYyIENvcyBDb3NoIENyb3NzIENyb3NzUmVwbGljYVN1bSBDdW1wcm9kIEN1bXN1bSBEZXB0aFRvU3BhY2UgRGVwdGh3aXNlQ29udjJkTmF0aXZlIERlcHRod2lzZUNvbnYyZE5hdGl2ZUJhY2twcm9wRmlsdGVyIERlcHRod2lzZUNvbnYyZE5hdGl2ZUJhY2twcm9wSW5wdXQgRGlhZyBEaWFnUGFydCBEaWdhbW1hIERpdiBEeW5hbWljU3RpdGNoIEVsdSBFbHVHcmFkIEVtcHR5IEVxdWFsIEVyZiBFcmZjIEV4cCBFeHBhbmREaW1zIEV4cG0xIEV4dHJhY3RJbWFnZVBhdGNoZXMgRkZUIEZGVDJEIEZGVDNEIEZha2VRdWFudFdpdGhNaW5NYXhBcmdzIEZha2VRdWFudFdpdGhNaW5NYXhBcmdzR3JhZGllbnQgRmFrZVF1YW50V2l0aE1pbk1heFZhcnMgRmFrZVF1YW50V2l0aE1pbk1heFZhcnNHcmFkaWVudCBGaWxsIEZsb29yIEZsb29yRGl2IEZsb29yTW9kIEZ1c2VkQmF0Y2hOb3JtIEZ1c2VkQmF0Y2hOb3JtR3JhZCBGdXNlZEJhdGNoTm9ybUdyYWRWMiBGdXNlZEJhdGNoTm9ybVYyIEdhdGhlciBHYXRoZXJOZCBHYXRoZXJWMiBHZXRJdGVtIEdyZWF0ZXIgR3JlYXRlckVxdWFsIEhTVlRvUkdCIElGRlQgSUZGVDJEIElGRlQzRCBJUkZGVCBJUkZGVDJEIElSRkZUM0QgSWRlbnRpdHkgSWRlbnRpdHlOIElmIEltYWcgSW5mZWVkRGVxdWV1ZSBJbmZlZWREZXF1ZXVlVHVwbGUgSW5wbGFjZUFkZCBJbnBsYWNlVXBkYXRlIEludiBJbnZlcnQgSW52ZXJ0UGVybXV0YXRpb24gSXNGaW5pdGUgSXNJbmYgSXNOYW4gTDJMb3NzIExSTiBMUk5HcmFkIExlZnRTaGlmdCBMZXNzIExlc3NFcXVhbCBMZ2FtbWEgTGluU3BhY2UgTGlzdERpZmYgTG9nIExvZzFwIExvZ1NvZnRtYXggTG9naWNhbEFuZCBMb2dpY2FsTm90IExvZ2ljYWxPciBNYXRNdWwgTWF0cml4QmFuZFBhcnQgTWF0cml4RGlhZyBNYXRyaXhEaWFnUGFydCBNYXRyaXhTZXREaWFnIE1hdHJpeFRyaWFuZ3VsYXJTb2x2ZSBNYXggTWF4UG9vbCBNYXhQb29sM0QgTWF4UG9vbDNER3JhZCBNYXhQb29sM0RHcmFkR3JhZCBNYXhQb29sR3JhZCBNYXhQb29sR3JhZEdyYWQgTWF4UG9vbEdyYWRHcmFkVjIgTWF4UG9vbEdyYWRWMiBNYXhQb29sVjIgTWF4aW11bSBNZWFuIE1pbiBNaW5pbXVtIE1pcnJvclBhZCBNb2QgTXVsIE11bHRpbm9taWFsIE5lZyBOb09wIE5vbk1heFN1cHByZXNzaW9uVjQgTm90RXF1YWwgT25lSG90IE9uZXNMaWtlIE91dGZlZWRFbnF1ZXVlIE91dGZlZWRFbnF1ZXVlVHVwbGUgUGFjayBQYWQgUGFkVjIgUGFyYWxsZWxEeW5hbWljU3RpdGNoIFBsYWNlaG9sZGVyV2l0aERlZmF1bHQgUG93IFByZXZlbnRHcmFkaWVudCBQcm9kIFFyIFF1YW50aXplQW5kRGVxdWFudGl6ZVYyIFF1YW50aXplQW5kRGVxdWFudGl6ZVYzIFJGRlQgUkZGVDJEIFJGRlQzRCBSR0JUb0hTViBSYW5kb21TaHVmZmxlIFJhbmRvbVN0YW5kYXJkTm9ybWFsIFJhbmRvbVVuaWZvcm0gUmFuZG9tVW5pZm9ybUludCBSYW5nZSBSYW5rIFJlYWRWYXJpYWJsZU9wIFJlYWwgUmVhbERpdiBSZWNpcHJvY2FsIFJlY2lwcm9jYWxHcmFkIFJlY3ZUUFVFbWJlZGRpbmdBY3RpdmF0aW9ucyBSZWx1IFJlbHU2IFJlbHU2R3JhZCBSZWx1R3JhZCBSZXNoYXBlIFJlc2l6ZUJpbGluZWFyIFJlc2l6ZUJpbGluZWFyR3JhZCBSZXNvdXJjZUFwcGx5QWRhTWF4IFJlc291cmNlQXBwbHlBZGFkZWx0YSBSZXNvdXJjZUFwcGx5QWRhZ3JhZCBSZXNvdXJjZUFwcGx5QWRhZ3JhZERBIFJlc291cmNlQXBwbHlBZGFtIFJlc291cmNlQXBwbHlBZGRTaWduIFJlc291cmNlQXBwbHlDZW50ZXJlZFJNU1Byb3AgUmVzb3VyY2VBcHBseUZ0cmwgUmVzb3VyY2VBcHBseUZ0cmxWMiBSZXNvdXJjZUFwcGx5R3JhZGllbnREZXNjZW50IFJlc291cmNlQXBwbHlNb21lbnR1bSBSZXNvdXJjZUFwcGx5UG93ZXJTaWduIFJlc291cmNlQXBwbHlQcm94aW1hbEFkYWdyYWQgUmVzb3VyY2VBcHBseVByb3hpbWFsR3JhZGllbnREZXNjZW50IFJlc291cmNlQXBwbHlSTVNQcm9wIFJlc291cmNlR2F0aGVyIFJlc291cmNlU2NhdHRlckFkZCBSZXNvdXJjZVNjYXR0ZXJEaXYgUmVzb3VyY2VTY2F0dGVyTWF4IFJlc291cmNlU2NhdHRlck1pbiBSZXNvdXJjZVNjYXR0ZXJNdWwgUmVzb3VyY2VTY2F0dGVyTmRBZGQgUmVzb3VyY2VTY2F0dGVyTmRVcGRhdGUgUmVzb3VyY2VTY2F0dGVyU3ViIFJlc291cmNlU2NhdHRlclVwZGF0ZSBSZXNvdXJjZVN0cmlkZWRTbGljZUFzc2lnbiBSZXZlcnNlIFJldmVyc2VTZXF1ZW5jZSBSZXZlcnNlVjIgUmlnaHRTaGlmdCBSaW50IFJvdW5kIFJzcXJ0IFJzcXJ0R3JhZCBTY2F0dGVyTmQgU2VsZWN0IFNlbHUgU2VsdUdyYWQgU2VuZFRQVUVtYmVkZGluZ0dyYWRpZW50cyBTaGFwZSBTaGFwZU4gU2lnbW9pZCBTaWdtb2lkR3JhZCBTaWduIFNpbiBTaW5oIFNpemUgU2xpY2UgU25hcHNob3QgU29mdG1heCBTb2Z0bWF4Q3Jvc3NFbnRyb3B5V2l0aExvZ2l0cyBTb2Z0cGx1cyBTb2Z0cGx1c0dyYWQgU29mdHNpZ24gU29mdHNpZ25HcmFkIFNwYWNlVG9CYXRjaCBTcGFjZVRvQmF0Y2hORCBTcGFjZVRvRGVwdGggU3BhcnNlTWF0TXVsIFNwYXJzZVNvZnRtYXhDcm9zc0VudHJvcHlXaXRoTG9naXRzIFNwYXJzZVRvRGVuc2UgU3BsaXQgU3BsaXRWIFNxcnQgU3FydEdyYWQgU3F1YXJlIFNxdWFyZWREaWZmZXJlbmNlIFNxdWVlemUgU3RhY2tDbG9zZVYyIFN0YWNrUG9wVjIgU3RhY2tQdXNoVjIgU3RhY2tWMiBTdGF0ZWxlc3NJZiBTdGF0ZWxlc3NSYW5kb21Ob3JtYWwgU3RhdGVsZXNzUmFuZG9tVW5pZm9ybSBTdGF0ZWxlc3NUcnVuY2F0ZWROb3JtYWwgU3RhdGVsZXNzV2hpbGUgU3RvcEdyYWRpZW50IFN0cmlkZWRTbGljZSBTdHJpZGVkU2xpY2VHcmFkIFN1YiBTdW0gU3ltYm9saWNHcmFkaWVudCBUUFVFbWJlZGRpbmdBY3RpdmF0aW9ucyBUYW4gVGFuaCBUYW5oR3JhZCBUZW5zb3JBcnJheUNsb3NlVjMgVGVuc29yQXJyYXlDb25jYXRWMyBUZW5zb3JBcnJheUdhdGhlclYzIFRlbnNvckFycmF5R3JhZFYzIFRlbnNvckFycmF5UmVhZFYzIFRlbnNvckFycmF5U2NhdHRlclYzIFRlbnNvckFycmF5U2l6ZVYzIFRlbnNvckFycmF5U3BsaXRWMyBUZW5zb3JBcnJheVYzIFRlbnNvckFycmF5V3JpdGVWMyBUaWxlIFRvcEtWMiBUcmFuc3Bvc2UgVHJ1bmNhdGVEaXYgVHJ1bmNhdGVNb2QgVHJ1bmNhdGVkTm9ybWFsIFVucGFjayBVbnNvcnRlZFNlZ21lbnRNYXggVW5zb3J0ZWRTZWdtZW50TWluIFVuc29ydGVkU2VnbWVudFByb2QgVW5zb3J0ZWRTZWdtZW50U3VtIFZhcklzSW5pdGlhbGl6ZWRPcCBWYXJpYWJsZVNoYXBlIFdoaWxlIFhsYUR5bmFtaWNVcGRhdGVTbGljZSBYbGFIb3N0Q29tcHV0ZSBYbGFJZiBYbGFSZWN2IFhsYVJlZHVjZVdpbmRvdyBYbGFTZW5kIFhsYVNvcnQgWGxhV2hpbGUgWmVyb3NMaWtlIEVudGVyIEV4aXQgTG9vcENvbmQgTWVyZ2UgTmV4dEl0ZXJhdGlvbiBTd2l0Y2ggX0FyZyBfUGFyYWxsZWxDb25jYXRVcGRhdGUgX1JldHZhbCBfVFBVQ29tcGlsZSBfVFBVRXhlY3V0ZSBUUFVDb21waWxhdGlvblJlc3VsdCBUUFVSZXBsaWNhdGVkSW5wdXQgVFBVUmVwbGljYXRlZE91dHB1dCBUUFVSZXBsaWNhdGVNZXRhZGF0YSBNZXJnZVYyQ2hlY2twb2ludHMgUmVzdG9yZVYyIFNhdmVWMiBBYm9ydCBBc3NlcnQgQXNzaWduIFBsYWNlaG9sZGVyIFBsYWNlaG9sZGVyVjIgU2hhcmRlZEZpbGVuYW1lIFN0cmluZ0pvaW4gVmFyaWFibGUgVmFyaWFibGVWMiBWYXJIYW5kbGVPcCBBdWRpb1N1bW1hcnkgQXVkaW9TdW1tYXJ5VjIgRGVidWdOdW1lcmljU3VtbWFyeSBIaXN0b2dyYW1TdW1tYXJ5IEltYWdlU3VtbWFyeSBNZXJnZVN1bW1hcnkgU2NhbGFyU3VtbWFyeSBTdGF0c0FnZ3JlZ2F0b3JTdW1tYXJ5Ii5zcGxpdCgiICIpOwpkLlRwdUNvbXBhdGliaWxpdHlQcm92aWRlcj1mO2QuY2hlY2tPcHNGb3JDb21wYXRpYmlsaXR5PWZ1bmN0aW9uKGcsbCl7aWYobnVsbD09PWwpdGhyb3cgRXJyb3IoIkNvbXBhdGliaWxpdHkgcHJvdmlkZXIgcmVxdWlyZWQsIGJ1dCBnb3Q6ICIrbCk7Xy5lYWNoKGcubm9kZXMsaz0+e2suY29tcGF0aWJsZT1sLm9wVmFsaWQoayk7Xy5lYWNoKGsuaW5FbWJlZGRpbmdzLG09PnttLmNvbXBhdGlibGU9bC5vcFZhbGlkKG0pfSk7Xy5lYWNoKGsub3V0RW1iZWRkaW5ncyxtPT57bS5jb21wYXRpYmxlPWwub3BWYWxpZChtKX0pfSl9fSkoYy5vcHx8KGMub3A9e30pKX0pKGEuZ3JhcGh8fChhLmdyYXBoPXt9KSl9KSh0Znx8KHRmPXt9KSk7Cjwvc2NyaXB0Pgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdGYtZ3JhcGgtY29tbW9uL3BhcnNlci5qcwooZnVuY3Rpb24oYSl7KGZ1bmN0aW9uKGMpeyhmdW5jdGlvbihkKXtmdW5jdGlvbiBmKHQpe2lmKCJ0cnVlIj09PXQpcmV0dXJuITA7aWYoImZhbHNlIj09PXQpcmV0dXJuITE7aWYoJyInPT09dFswXSlyZXR1cm4gdC5zdWJzdHJpbmcoMSx0Lmxlbmd0aC0xKTtsZXQgdj1wYXJzZUZsb2F0KHQpO3JldHVybiBpc05hTih2KT90OnZ9ZnVuY3Rpb24gZyh0KXtyZXR1cm4gbmV3IFByb21pc2UoKHYsQSk9PntmZXRjaCh0KS50aGVuKHk9Pnt5Lm9rP3kuYXJyYXlCdWZmZXIoKS50aGVuKHYsQSk6eS50ZXh0KCkudGhlbihBLEEpfSl9KX1mdW5jdGlvbiBsKHQsdixBPTFFNix5PSJcbiIpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbih4LEMpe2Z1bmN0aW9uIEYoRCxCLEcpe3ZhciBLPUc+PXQuYnl0ZUxlbmd0aDtCPUIuc3BsaXQoeSk7QlswXT1EK0JbMF07Y29uc3QgTD1LPyIiOkIucG9wKCk7Zm9yKGxldCBKIG9mIEIpdHJ5e3YoSil9Y2F0Y2goUCl7QyhQKTtyZXR1cm59Sz94KCEwKToKKEQ9bmV3IEJsb2IoW3Quc2xpY2UoRyxHK0EpXSksSz1uZXcgRmlsZVJlYWRlcixLLm9ubG9hZD1mdW5jdGlvbihKKXtGKEwsSi50YXJnZXQucmVzdWx0LEcrQSl9LEsucmVhZEFzVGV4dChEKSl9RigiIiwiIiwwKX0pfWZ1bmN0aW9uIGsodCl7cmV0dXJuIHAodCxxKX1mdW5jdGlvbiBtKHQpe3JldHVybiBwKHQscikudGhlbih2PT52LnN0ZXBfc3RhdHMpfWZ1bmN0aW9uIHAodCx2KXtmdW5jdGlvbiBBKEIpe2xldCBHPUIuaW5kZXhPZigiOiIpLEs9Qi5zdWJzdHJpbmcoMCxHKS50cmltKCk7Qj1mKEIuc3Vic3RyaW5nKEcrMikudHJpbSgpKTtyZXR1cm57bmFtZTpLLHZhbHVlOkJ9fWZ1bmN0aW9uIHkoQixHLEssTCl7bGV0IEo9QltHXTtudWxsPT1KP0JbR109TC5qb2luKCIuIilpbiB2P1tLXTpLOkFycmF5LmlzQXJyYXkoSik/Si5wdXNoKEspOkJbR109W0osS119bGV0IHg9e30sQz1bXSxGPVtdLEQ9eDtyZXR1cm4gbCh0LGZ1bmN0aW9uKEIpe2lmKEIpc3dpdGNoKEI9Qi50cmltKCksCkJbQi5sZW5ndGgtMV0pe2Nhc2UgInsiOkI9Qi5zdWJzdHJpbmcoMCxCLmxlbmd0aC0yKS50cmltKCk7bGV0IEc9e307Qy5wdXNoKEQpO0YucHVzaChCKTt5KEQsQixHLEYpO0Q9RzticmVhaztjYXNlICJ9IjpEPUMucG9wKCk7Ri5wb3AoKTticmVhaztkZWZhdWx0OkI9QShCKSx5KEQsQi5uYW1lLEIudmFsdWUsRi5jb25jYXQoQi5uYW1lKSl9fSkudGhlbihmdW5jdGlvbigpe3JldHVybiB4fSl9ZC5mZXRjaFBiVHh0PWc7ZC5mZXRjaEFuZFBhcnNlTWV0YWRhdGE9ZnVuY3Rpb24odCx2KXtyZXR1cm4gYS5ncmFwaC51dGlsLnJ1blRhc2soIlJlYWRpbmcgbWV0YWRhdGEgcGJ0eHQiLDQwLCgpPT5udWxsPT10P1Byb21pc2UucmVzb2x2ZShudWxsKTpnKHQpLHYpLnRoZW4oQT0+YS5ncmFwaC51dGlsLnJ1bkFzeW5jUHJvbWlzZVRhc2soIlBhcnNpbmcgbWV0YWRhdGEucGJ0eHQiLDYwLCgpPT5udWxsIT1BP20oQSk6UHJvbWlzZS5yZXNvbHZlKG51bGwpLHYpKX07ZC5mZXRjaEFuZFBhcnNlR3JhcGhEYXRhPQpmdW5jdGlvbih0LHYsQSl7cmV0dXJuIGEuZ3JhcGgudXRpbC5ydW5Bc3luY1Byb21pc2VUYXNrKCJSZWFkaW5nIGdyYXBoIHBidHh0Iiw0MCwoKT0+dj9uZXcgUHJvbWlzZShmdW5jdGlvbih5LHgpe2xldCBDPW5ldyBGaWxlUmVhZGVyO0Mub25sb2FkPSgpPT55KEMucmVzdWx0KTtDLm9uZXJyb3I9KCk9PngoQy5lcnJvcik7Qy5yZWFkQXNBcnJheUJ1ZmZlcih2KX0pOmcodCksQSkudGhlbih5PT5hLmdyYXBoLnV0aWwucnVuQXN5bmNQcm9taXNlVGFzaygiUGFyc2luZyBncmFwaC5wYnR4dCIsNjAsKCk9PmsoeSksQSkpfTtkLnN0cmVhbVBhcnNlPWw7Y29uc3QgcT17ImxpYnJhcnkuZnVuY3Rpb24iOiEwLCJsaWJyYXJ5LmZ1bmN0aW9uLm5vZGVfZGVmIjohMCwibGlicmFyeS5mdW5jdGlvbi5ub2RlX2RlZi5pbnB1dCI6ITAsImxpYnJhcnkuZnVuY3Rpb24ubm9kZV9kZWYuYXR0ciI6ITAsImxpYnJhcnkuZnVuY3Rpb24ubm9kZV9kZWYuYXR0ci52YWx1ZS5saXN0LmIiOiEwLCJsaWJyYXJ5LmZ1bmN0aW9uLm5vZGVfZGVmLmF0dHIudmFsdWUubGlzdC5mIjohMCwKImxpYnJhcnkuZnVuY3Rpb24ubm9kZV9kZWYuYXR0ci52YWx1ZS5saXN0LmZ1bmMiOiEwLCJsaWJyYXJ5LmZ1bmN0aW9uLm5vZGVfZGVmLmF0dHIudmFsdWUubGlzdC5pIjohMCwibGlicmFyeS5mdW5jdGlvbi5ub2RlX2RlZi5hdHRyLnZhbHVlLmxpc3QucyI6ITAsImxpYnJhcnkuZnVuY3Rpb24ubm9kZV9kZWYuYXR0ci52YWx1ZS5saXN0LnNoYXBlIjohMCwibGlicmFyeS5mdW5jdGlvbi5ub2RlX2RlZi5hdHRyLnZhbHVlLmxpc3Quc2hhcGUuZGltIjohMCwibGlicmFyeS5mdW5jdGlvbi5ub2RlX2RlZi5hdHRyLnZhbHVlLmxpc3QudGVuc29yIjohMCwibGlicmFyeS5mdW5jdGlvbi5ub2RlX2RlZi5hdHRyLnZhbHVlLmxpc3QudHlwZSI6ITAsImxpYnJhcnkuZnVuY3Rpb24ubm9kZV9kZWYuYXR0ci52YWx1ZS5zaGFwZS5kaW0iOiEwLCJsaWJyYXJ5LmZ1bmN0aW9uLm5vZGVfZGVmLmF0dHIudmFsdWUudGVuc29yLnN0cmluZ192YWwiOiEwLCJsaWJyYXJ5LmZ1bmN0aW9uLm5vZGVfZGVmLmF0dHIudmFsdWUudGVuc29yLnRlbnNvcl9zaGFwZS5kaW0iOiEwLAoibGlicmFyeS5mdW5jdGlvbi5zaWduYXR1cmUuaW5wdXRfYXJnIjohMCwibGlicmFyeS5mdW5jdGlvbi5zaWduYXR1cmUub3V0cHV0X2FyZyI6ITAsImxpYnJhcnkudmVyc2lvbnMiOiEwLG5vZGU6ITAsIm5vZGUuaW5wdXQiOiEwLCJub2RlLmF0dHIiOiEwLCJub2RlLmF0dHIudmFsdWUubGlzdC5iIjohMCwibm9kZS5hdHRyLnZhbHVlLmxpc3QuZiI6ITAsIm5vZGUuYXR0ci52YWx1ZS5saXN0LmZ1bmMiOiEwLCJub2RlLmF0dHIudmFsdWUubGlzdC5pIjohMCwibm9kZS5hdHRyLnZhbHVlLmxpc3QucyI6ITAsIm5vZGUuYXR0ci52YWx1ZS5saXN0LnNoYXBlIjohMCwibm9kZS5hdHRyLnZhbHVlLmxpc3Quc2hhcGUuZGltIjohMCwibm9kZS5hdHRyLnZhbHVlLmxpc3QudGVuc29yIjohMCwibm9kZS5hdHRyLnZhbHVlLmxpc3QudHlwZSI6ITAsIm5vZGUuYXR0ci52YWx1ZS5zaGFwZS5kaW0iOiEwLCJub2RlLmF0dHIudmFsdWUudGVuc29yLnN0cmluZ192YWwiOiEwLCJub2RlLmF0dHIudmFsdWUudGVuc29yLnRlbnNvcl9zaGFwZS5kaW0iOiEwfSwKcj17InN0ZXBfc3RhdHMuZGV2X3N0YXRzIjohMCwic3RlcF9zdGF0cy5kZXZfc3RhdHMubm9kZV9zdGF0cyI6ITAsInN0ZXBfc3RhdHMuZGV2X3N0YXRzLm5vZGVfc3RhdHMub3V0cHV0IjohMCwic3RlcF9zdGF0cy5kZXZfc3RhdHMubm9kZV9zdGF0cy5tZW1vcnkiOiEwLCJzdGVwX3N0YXRzLmRldl9zdGF0cy5ub2RlX3N0YXRzLm91dHB1dC50ZW5zb3JfZGVzY3JpcHRpb24uc2hhcGUuZGltIjohMH07ZC5wYXJzZUdyYXBoUGJUeHQ9aztkLnBhcnNlU3RhdHNQYlR4dD1tfSkoYy5wYXJzZXJ8fChjLnBhcnNlcj17fSkpfSkoYS5ncmFwaHx8KGEuZ3JhcGg9e30pKX0pKHRmfHwodGY9e30pKTsKPC9zY3JpcHQ+CjxzY3JpcHQ+Ly9+fldFQlBBVEh+fi90Zi1ncmFwaC1jb21tb24vcHJvdG8uanMKPC9zY3JpcHQ+CjxzY3JpcHQ+Ly9+fldFQlBBVEh+fi90Zi1ncmFwaC1jb21tb24vcmVuZGVyLmpzCihmdW5jdGlvbihhKXsoZnVuY3Rpb24oYyl7KGZ1bmN0aW9uKGQpe2Z1bmN0aW9uIGYoTixULFksYWEsaGEpe1Q9bmV3IEcoVCxZLGFhLGhhLCEwKTtOLmluQW5ub3RhdGlvbnMucHVzaChUKX1mdW5jdGlvbiBnKE4sVCxZLGFhLGhhKXtUPW5ldyBHKFQsWSxhYSxoYSwhMSk7Ti5vdXRBbm5vdGF0aW9ucy5wdXNoKFQpfWZ1bmN0aW9uIGwoTixUKXtfLmVhY2goTi5ub2RlcygpLFk9PntZPU4ubm9kZShZKTtZLmV4cGFuZGVkPTE8VDtpZigwPFQpc3dpdGNoKFkubm9kZS50eXBlKXtjYXNlIGMuTm9kZVR5cGUuTUVUQTpjYXNlIGMuTm9kZVR5cGUuU0VSSUVTOmsoWSxULTEpfX0pfWZ1bmN0aW9uIGsoTixUKXtOLmNvcmVHcmFwaCYmbChOLmNvcmVHcmFwaCxUKX1mdW5jdGlvbiBtKE4sVCxZKXtsZXQgYWE9Ti5ub2RlKFQpLGhhPU4ubm9kZShZKSxYPU4uZWRnZShULFkpO2lmKGFhLm5vZGUuaW5jbHVkZSE9PWMuSW5jbHVzaW9uVHlwZS5JTkNMVURFJiZoYS5ub2RlLmluY2x1ZGUhPT1jLkluY2x1c2lvblR5cGUuSU5DTFVERXx8CmFhLm5vZGUuaW5jbHVkZT09PWMuSW5jbHVzaW9uVHlwZS5FWENMVURFfHxoYS5ub2RlLmluY2x1ZGU9PT1jLkluY2x1c2lvblR5cGUuRVhDTFVERSlnKGFhLGhhLm5vZGUsaGEsWCxLLlNIT1JUQ1VUKSxmKGhhLGFhLm5vZGUsYWEsWCxLLlNIT1JUQ1VUKSxOLnJlbW92ZUVkZ2UoVCxZKX1mdW5jdGlvbiBwKE4sVCxZKXtsZXQgYWE9Ti5jb3JlR3JhcGgsaGE9YWEubm9kZShUKTtoYS5pc091dEV4dHJhY3Q9ITA7Xy5lYWNoKGFhLnByZWRlY2Vzc29ycyhUKSxYPT57bShhYSxYLFQpfSk7KEYuZGV0YWNoQWxsRWRnZXNGb3JIaWdoRGVncmVlfHxZKSYmXy5lYWNoKGFhLnN1Y2Nlc3NvcnMoVCksWD0+e20oYWEsVCxYKX0pOzA9PT1hYS5uZWlnaGJvcnMoVCkubGVuZ3RoJiYoaGEubm9kZS5pbmNsdWRlPWMuSW5jbHVzaW9uVHlwZS5FWENMVURFLE4uaXNvbGF0ZWRPdXRFeHRyYWN0LnB1c2goaGEpLGFhLnJlbW92ZU5vZGUoVCkpfWZ1bmN0aW9uIHEoTixULFkpe2xldCBhYT1OLmNvcmVHcmFwaCwKaGE9YWEubm9kZShUKTtoYS5pc0luRXh0cmFjdD0hMDtfLmVhY2goYWEuc3VjY2Vzc29ycyhUKSxYPT57bShhYSxULFgpfSk7KEYuZGV0YWNoQWxsRWRnZXNGb3JIaWdoRGVncmVlfHxZKSYmXy5lYWNoKGFhLnByZWRlY2Vzc29ycyhUKSxYPT57bShhYSxYLFQpfSk7MD09PWFhLm5laWdoYm9ycyhUKS5sZW5ndGgmJihoYS5ub2RlLmluY2x1ZGU9Yy5JbmNsdXNpb25UeXBlLkVYQ0xVREUsTi5pc29sYXRlZEluRXh0cmFjdC5wdXNoKGhhKSxhYS5yZW1vdmVOb2RlKFQpKX1mdW5jdGlvbiByKE4sVCl7aWYoTi50eXBlPT09Yy5Ob2RlVHlwZS5PUClmb3IodmFyIFk9MDtZPFQubGVuZ3RoO1krKyl7aWYoTi5vcD09PVRbWV0pcmV0dXJuITB9ZWxzZSBpZihOLnR5cGU9PT1jLk5vZGVUeXBlLk1FVEEmJihOPU4uZ2V0Um9vdE9wKCkpKWZvcihZPTA7WTxULmxlbmd0aDtZKyspaWYoTi5vcD09PVRbWV0pcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gdChOKXtsZXQgVD1OLmNvcmVHcmFwaDtfLmVhY2goVC5ub2RlcygpLApZPT57VC5ub2RlKFkpLm5vZGUuaW5jbHVkZSE9PWMuSW5jbHVzaW9uVHlwZS5FWENMVURFfHxZLnN0YXJ0c1dpdGgoYS5ncmFwaC5GVU5DVElPTl9MSUJSQVJZX05PREVfUFJFRklYKXx8KE4uY29yZUdyYXBoLm91dEVkZ2VzKFkpLmxlbmd0aD5OLmNvcmVHcmFwaC5pbkVkZ2VzKFkpLmxlbmd0aD9wKE4sWSwhMCk6cShOLFksITApKX0pfWZ1bmN0aW9uIHYoTil7bGV0IFQ9Ti5jb3JlR3JhcGg7Xy5lYWNoKFQubm9kZXMoKSxZPT57bGV0IGFhPVQubm9kZShZKTthYS5ub2RlLmluY2x1ZGU9PT1jLkluY2x1c2lvblR5cGUuVU5TUEVDSUZJRUQmJnIoYWEubm9kZSxGLm91dEV4dHJhY3RUeXBlcykmJnAoTixZKX0pfWZ1bmN0aW9uIEEoTil7bGV0IFQ9Ti5jb3JlR3JhcGg7Xy5lYWNoKFQubm9kZXMoKSxZPT57bGV0IGFhPVQubm9kZShZKTthYS5ub2RlLmluY2x1ZGU9PT1jLkluY2x1c2lvblR5cGUuVU5TUEVDSUZJRUQmJnIoYWEubm9kZSxGLmluRXh0cmFjdFR5cGVzKSYmcShOLFkpfSl9CmZ1bmN0aW9uIHkoTil7bGV0IFQ9Ti5jb3JlR3JhcGgsWT17fSxhYT17fSxoYT0wO18uZWFjaChULm5vZGVzKCksbGE9PntpZihULm5vZGUobGEpLm5vZGUuaW5jbHVkZT09PWMuSW5jbHVzaW9uVHlwZS5VTlNQRUNJRklFRCl7dmFyIHdhPV8ucmVkdWNlKFQucHJlZGVjZXNzb3JzKGxhKSwoeGEsemEpPT57emE9VC5lZGdlKHphLGxhKS5tZXRhZWRnZTtyZXR1cm4geGErKHphLm51bVJlZ3VsYXJFZGdlcz8xOjApfSwwKTswPT09d2EmJjA8VC5wcmVkZWNlc3NvcnMobGEpLmxlbmd0aCYmKHdhPVQucHJlZGVjZXNzb3JzKGxhKS5sZW5ndGgpO3ZhciBDYT1fLnJlZHVjZShULnN1Y2Nlc3NvcnMobGEpLCh4YSx6YSk9Pnt6YT1ULmVkZ2UobGEsemEpLm1ldGFlZGdlO3JldHVybiB4YSsoemEubnVtUmVndWxhckVkZ2VzPzE6MCl9LDApOzA9PT1DYSYmMDxULnN1Y2Nlc3NvcnMobGEpLmxlbmd0aCYmKENhPVQuc3VjY2Vzc29ycyhsYSkubGVuZ3RoKTtZW2xhXT13YTthYVtsYV09Q2E7aGErK319KTsKaWYoIShoYTxGLm1pbk5vZGVDb3VudEZvckV4dHJhY3Rpb24pKXt2YXIgWD1GLm1pbkRlZ3JlZUZvckV4dHJhY3Rpb24tMSxjYT1NYXRoLnJvdW5kKC43NSpoYSksZWE9TWF0aC5yb3VuZCguMjUqaGEpLGthPU9iamVjdC5rZXlzKFkpLnNvcnQoKGxhLHdhKT0+WVtsYV0tWVt3YV0pLGJhPVlba2FbY2FdXTtiYT1iYStiYS1ZW2thW2VhXV07YmE9TWF0aC5tYXgoYmEsWCk7Zm9yKGxldCBsYT1oYS0xO1lba2FbbGFdXT5iYTtsYS0tKXEoTixrYVtsYV0pO2thPU9iamVjdC5rZXlzKGFhKS5zb3J0KChsYSx3YSk9PmFhW2xhXS1hYVt3YV0pO2NhPWFhW2thW2NhXV07ZWE9Y2ErNCooY2EtYWFba2FbZWFdXSk7ZWE9TWF0aC5tYXgoZWEsWCk7Zm9yKFg9aGEtMTthYVtrYVtYXV0+ZWE7WC0tKShjYT1ULm5vZGUoa2FbWF0pKSYmIWNhLmlzSW5FeHRyYWN0JiZwKE4sa2FbWF0pfX1mdW5jdGlvbiB4KE4pe2xldCBUPU4uY29yZUdyYXBoLFk9e307Xy5lYWNoKFQuZWRnZXMoKSxhYT0+e1QuZWRnZShhYSkubWV0YWVkZ2UubnVtUmVndWxhckVkZ2VzfHwKKChZW2FhLnZdPVlbYWEudl18fFtdKS5wdXNoKGFhKSwoWVthYS53XT1ZW2FhLnddfHxbXSkucHVzaChhYSkpfSk7Xy5lYWNoKFksYWE9PnthYS5sZW5ndGg+Ri5tYXhDb250cm9sRGVncmVlJiZfLmVhY2goYWEsaGE9Pm0oVCxoYS52LGhhLncpKX0pfWZ1bmN0aW9uIEMoTil7dChOKTtGLm91dEV4dHJhY3RUeXBlcyYmdihOKTtGLmluRXh0cmFjdFR5cGVzJiZBKE4pO3koTik7Ri5tYXhDb250cm9sRGVncmVlJiZ4KE4pO2xldCBUPU4uY29yZUdyYXBoO18uZWFjaChULm5vZGVzKCksWT0+e2xldCBhYT1ULm5vZGUoWSk7dmFyIGhhPVQubmVpZ2hib3JzKFkpLmxlbmd0aDtpZihhYS5ub2RlLmluY2x1ZGU9PT1jLkluY2x1c2lvblR5cGUuVU5TUEVDSUZJRUQmJjA9PT1oYSl7aGE9MDxhYS5vdXRBbm5vdGF0aW9ucy5saXN0Lmxlbmd0aDtsZXQgWD0wPGFhLmluQW5ub3RhdGlvbnMubGlzdC5sZW5ndGg7YWEuaXNJbkV4dHJhY3Q/KE4uaXNvbGF0ZWRJbkV4dHJhY3QucHVzaChhYSksYWEubm9kZS5pbmNsdWRlPQpjLkluY2x1c2lvblR5cGUuRVhDTFVERSxULnJlbW92ZU5vZGUoWSkpOmFhLmlzT3V0RXh0cmFjdD8oTi5pc29sYXRlZE91dEV4dHJhY3QucHVzaChhYSksYWEubm9kZS5pbmNsdWRlPWMuSW5jbHVzaW9uVHlwZS5FWENMVURFLFQucmVtb3ZlTm9kZShZKSk6Ri5leHRyYWN0SXNvbGF0ZWROb2Rlc1dpdGhBbm5vdGF0aW9uc09uT25lU2lkZSYmKGhhJiYhWD8oYWEuaXNJbkV4dHJhY3Q9ITAsTi5pc29sYXRlZEluRXh0cmFjdC5wdXNoKGFhKSxhYS5ub2RlLmluY2x1ZGU9Yy5JbmNsdXNpb25UeXBlLkVYQ0xVREUsVC5yZW1vdmVOb2RlKFkpKTpYJiYhaGEmJihhYS5pc091dEV4dHJhY3Q9ITAsTi5pc29sYXRlZE91dEV4dHJhY3QucHVzaChhYSksYWEubm9kZS5pbmNsdWRlPWMuSW5jbHVzaW9uVHlwZS5FWENMVURFLFQucmVtb3ZlTm9kZShZKSkpfX0pfWQuT3BOb2RlQ29sb3JzPXtERUZBVUxUX0ZJTEw6IiNmZmZmZmYiLERFRkFVTFRfU1RST0tFOiIjYjJiMmIyIixDT01QQVRJQkxFOiIjMGY5ZDU4IiwKSU5DT01QQVRJQkxFOiIjZGI0NDM3In07ZC5NZXRhbm9kZUNvbG9ycz17REVGQVVMVF9GSUxMOiIjZDlkOWQ5IixERUZBVUxUX1NUUk9LRToiI2E2YTZhNiIsU0FUVVJBVElPTjouNixMSUdIVE5FU1M6Ljg1LEVYUEFOREVEX0NPTE9SOiIjZjBmMGYwIixIVUVTOlsyMjAsMTAwLDE4MCw0MCwyMCwzNDAsMjYwLDMwMCwxNDAsNjBdLFNUUlVDVFVSRV9QQUxFVFRFKE4sVCl7dmFyIFk9ZC5NZXRhbm9kZUNvbG9ycy5IVUVTO049WVtOJVkubGVuZ3RoXTtZPU1hdGguc2luKE4qTWF0aC5QSS8zNjApO3JldHVybiBkMy5oc2woTiwuMDEqKFQ/MzA6OTAtNjAqWSksLjAxKihUPzk1OjgwKSkudG9TdHJpbmcoKX0sREVWSUNFX1BBTEVUVEUoTil7cmV0dXJuIGQuTWV0YW5vZGVDb2xvcnMuU1RSVUNUVVJFX1BBTEVUVEUoTil9LFhMQV9DTFVTVEVSX1BBTEVUVEUoTil7cmV0dXJuIGQuTWV0YW5vZGVDb2xvcnMuU1RSVUNUVVJFX1BBTEVUVEUoTil9LFVOS05PV046IiNlZWUiLEdSQURJRU5UX09VVExJTkU6IiM4ODgifTsKZC5TZXJpZXNOb2RlQ29sb3JzPXtERUZBVUxUX0ZJTEw6IndoaXRlIixERUZBVUxUX1NUUk9LRToiI2IyYjJiMiJ9O2NvbnN0IEY9e2VuYWJsZUV4dHJhY3Rpb246ITAsbWluTm9kZUNvdW50Rm9yRXh0cmFjdGlvbjoxNSxtaW5EZWdyZWVGb3JFeHRyYWN0aW9uOjUsbWF4Q29udHJvbERlZ3JlZTo0LG1heEJyaWRnZVBhdGhEZWdyZWU6NCxvdXRFeHRyYWN0VHlwZXM6WyJOb09wIl0saW5FeHRyYWN0VHlwZXM6W10sZGV0YWNoQWxsRWRnZXNGb3JIaWdoRGVncmVlOiEwLGV4dHJhY3RJc29sYXRlZE5vZGVzV2l0aEFubm90YXRpb25zT25PbmVTaWRlOiEwLGVuYWJsZUJyaWRnZWdyYXBoOiEwLG1pbk1heENvbG9yczpbIiNmZmY1ZjAiLCIjZmI2YTRhIl0sbWF4QW5ub3RhdGlvbnM6NX0sRD1uZXcgUmVnRXhwKCJeKD86IithLmdyYXBoLkZVTkNUSU9OX0xJQlJBUllfTk9ERV9QUkVGSVgrIik/KFxcdyspX1thLXowLTldezh9KD86X1xcZCspPyQiKTtjbGFzcyBCe2NvbnN0cnVjdG9yKE4sClQpe3RoaXMuaGllcmFyY2h5PU47dGhpcy5kaXNwbGF5aW5nU3RhdHM9VDt0aGlzLmluZGV4PXt9O3RoaXMucmVuZGVyZWRPcE5hbWVzPVtdO3RoaXMuY29tcHV0ZVNjYWxlcygpO3RoaXMuaGFzU3ViaGllcmFyY2h5PXt9O3RoaXMucm9vdD1uZXcgUyhOLnJvb3QsTi5ncmFwaE9wdGlvbnMpO3RoaXMuaW5kZXhbTi5yb290Lm5hbWVdPXRoaXMucm9vdDt0aGlzLnJlbmRlcmVkT3BOYW1lcy5wdXNoKE4ucm9vdC5uYW1lKTt0aGlzLmJ1aWxkU3ViaGllcmFyY2h5KE4ucm9vdC5uYW1lKTt0aGlzLnJvb3QuZXhwYW5kZWQ9ITA7dGhpcy50cmFjZUlucHV0cz0hMX1jb21wdXRlU2NhbGVzKCl7dGhpcy5kZXZpY2VDb2xvck1hcD1kMy5zY2FsZU9yZGluYWwoKS5kb21haW4odGhpcy5oaWVyYXJjaHkuZGV2aWNlcykucmFuZ2UoXy5tYXAoZDMucmFuZ2UodGhpcy5oaWVyYXJjaHkuZGV2aWNlcy5sZW5ndGgpLGQuTWV0YW5vZGVDb2xvcnMuREVWSUNFX1BBTEVUVEUpKTt0aGlzLnhsYUNsdXN0ZXJDb2xvck1hcD0KZDMuc2NhbGVPcmRpbmFsKCkuZG9tYWluKHRoaXMuaGllcmFyY2h5LnhsYUNsdXN0ZXJzKS5yYW5nZShfLm1hcChkMy5yYW5nZSh0aGlzLmhpZXJhcmNoeS54bGFDbHVzdGVycy5sZW5ndGgpLGQuTWV0YW5vZGVDb2xvcnMuWExBX0NMVVNURVJfUEFMRVRURSkpO2xldCBOPXRoaXMuaGllcmFyY2h5LnJvb3QubWV0YWdyYXBoO3ZhciBUPWQzLm1heChOLm5vZGVzKCksWT0+e1k9Ti5ub2RlKFkpO2lmKG51bGwhPVkuc3RhdHMpcmV0dXJuIFkuc3RhdHMudG90YWxCeXRlc30pO3RoaXMubWVtb3J5VXNhZ2VTY2FsZT1kMy5zY2FsZUxpbmVhcigpLmRvbWFpbihbMCxUXSkucmFuZ2UoRi5taW5NYXhDb2xvcnMpO1Q9ZDMubWF4KE4ubm9kZXMoKSxZPT57WT1OLm5vZGUoWSk7aWYobnVsbCE9WS5zdGF0cylyZXR1cm4gWS5zdGF0cy5nZXRUb3RhbE1pY3JvcygpfSk7dGhpcy5jb21wdXRlVGltZVNjYWxlPWQzLnNjYWxlTGluZWFyKCkuZG9tYWluKFswLFRdKS5yYW5nZShGLm1pbk1heENvbG9ycyk7CnRoaXMuZWRnZVdpZHRoU2l6ZWRCYXNlZFNjYWxlPXRoaXMuaGllcmFyY2h5Lmhhc1NoYXBlSW5mbz9jLnNjZW5lLmVkZ2UuRURHRV9XSURUSF9TSVpFX0JBU0VEX1NDQUxFOmQzLnNjYWxlTGluZWFyKCkuZG9tYWluKFsxLHRoaXMuaGllcmFyY2h5Lm1heE1ldGFFZGdlU2l6ZV0pLnJhbmdlKFtjLnNjZW5lLmVkZ2UuTUlOX0VER0VfV0lEVEgsYy5zY2VuZS5lZGdlLk1BWF9FREdFX1dJRFRIXSl9Z2V0UmVuZGVyTm9kZUJ5TmFtZShOKXtyZXR1cm4gdGhpcy5pbmRleFtOXX1nZXROb2RlQnlOYW1lKE4pe3JldHVybiB0aGlzLmhpZXJhcmNoeS5ub2RlKE4pfWNvbG9ySGlzdG9ncmFtKE4sVCl7aWYoMDxPYmplY3Qua2V5cyhOKS5sZW5ndGgpe2NvbnN0IFk9Xy5zdW0oT2JqZWN0LmtleXMoTikubWFwKGFhPT5OW2FhXSkpO3JldHVybiBPYmplY3Qua2V5cyhOKS5tYXAoYWE9Pih7Y29sb3I6VChhYSkscHJvcG9ydGlvbjpOW2FhXS9ZfSkpfWNvbnNvbGUuaW5mbygibm8gcGFpcnMgZm91bmQhIik7CnJldHVybiBudWxsfWdldE9yQ3JlYXRlUmVuZGVyTm9kZUJ5TmFtZShOKXtpZighTilyZXR1cm4gbnVsbDtpZihOIGluIHRoaXMuaW5kZXgpcmV0dXJuIHRoaXMuaW5kZXhbTl07dmFyIFQ9dGhpcy5oaWVyYXJjaHkubm9kZShOKTtpZighVClyZXR1cm4gbnVsbDtsZXQgWT1ULmlzR3JvdXBOb2RlP25ldyBTKFQsdGhpcy5oaWVyYXJjaHkuZ3JhcGhPcHRpb25zKTpuZXcgSihUKTt0aGlzLmluZGV4W05dPVk7dGhpcy5yZW5kZXJlZE9wTmFtZXMucHVzaChOKTtULnN0YXRzJiYoWS5tZW1vcnlDb2xvcj10aGlzLm1lbW9yeVVzYWdlU2NhbGUoVC5zdGF0cy50b3RhbEJ5dGVzKSxZLmNvbXB1dGVUaW1lQ29sb3I9dGhpcy5jb21wdXRlVGltZVNjYWxlKFQuc3RhdHMuZ2V0VG90YWxNaWNyb3MoKSkpO1kuaXNGYWRlZE91dD10aGlzLmRpc3BsYXlpbmdTdGF0cyYmIWEuZ3JhcGgudXRpbC5oYXNEaXNwbGF5YWJsZU5vZGVTdGF0cyhULnN0YXRzKTt2YXIgYWE9bnVsbCxoYT1udWxsLFg9bnVsbDsKaWYoVC5pc0dyb3VwTm9kZSl7YWE9VC5kZXZpY2VIaXN0b2dyYW07aGE9VC54bGFDbHVzdGVySGlzdG9ncmFtO3ZhciBjYT1ULmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uY29tcGF0aWJsZTtUPVQuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5pbmNvbXBhdGlibGU7aWYoMCE9Y2F8fDAhPVQpWD1jYS8oY2ErVCl9ZWxzZShjYT1ZLm5vZGUuZGV2aWNlKSYmKGFhPXtbY2FdOjF9KSwoY2E9WS5ub2RlLnhsYUNsdXN0ZXIpJiYoaGE9e1tjYV06MX0pLFkubm9kZS50eXBlPT09Yy5Ob2RlVHlwZS5PUCYmKFg9WS5ub2RlLmNvbXBhdGlibGU/MTowKTthYSYmKFkuZGV2aWNlQ29sb3JzPXRoaXMuY29sb3JIaXN0b2dyYW0oYWEsdGhpcy5kZXZpY2VDb2xvck1hcCkpO2hhJiYoWS54bGFDbHVzdGVyQ29sb3JzPXRoaXMuY29sb3JIaXN0b2dyYW0oaGEsdGhpcy54bGFDbHVzdGVyQ29sb3JNYXApKTtudWxsIT1YJiYoWS5jb21wYXRpYmlsaXR5Q29sb3JzPVt7Y29sb3I6YS5ncmFwaC5yZW5kZXIuT3BOb2RlQ29sb3JzLkNPTVBBVElCTEUsCnByb3BvcnRpb246WH0se2NvbG9yOmEuZ3JhcGgucmVuZGVyLk9wTm9kZUNvbG9ycy5JTkNPTVBBVElCTEUscHJvcG9ydGlvbjoxLVh9XSk7cmV0dXJuIHRoaXMuaW5kZXhbTl19Z2V0TmVhcmVzdFZpc2libGVBbmNlc3RvcihOKXt2YXIgVD1jLmdldEhpZXJhcmNoaWNhbFBhdGgoTik7bGV0IFk9MCxhYT1udWxsO2Zvcig7WTxULmxlbmd0aCYmKE49VFtZXSxhYT10aGlzLmdldFJlbmRlck5vZGVCeU5hbWUoTiksYWEuZXhwYW5kZWQpO1krKyk7cmV0dXJuIFk9PVQubGVuZ3RoLTImJihUPVRbWSsxXSxhYS5pbkFubm90YXRpb25zLm5vZGVOYW1lc1tUXXx8YWEub3V0QW5ub3RhdGlvbnMubm9kZU5hbWVzW1RdKT9UOk59c2V0RGVwdGgoTil7ayh0aGlzLnJvb3QsK04pfWlzTm9kZUF1eGlsaWFyeShOKXtsZXQgVD10aGlzLmdldFJlbmRlck5vZGVCeU5hbWUoTi5ub2RlLnBhcmVudE5vZGUubmFtZSksWT1fLmZpbmQoVC5pc29sYXRlZEluRXh0cmFjdCxhYT0+YWEubm9kZS5uYW1lPT09Ti5ub2RlLm5hbWUpOwppZihZKXJldHVybiEwO1k9Xy5maW5kKFQuaXNvbGF0ZWRPdXRFeHRyYWN0LGFhPT5hYS5ub2RlLm5hbWU9PT1OLm5vZGUubmFtZSk7cmV0dXJuISFZfWdldE5hbWVzT2ZSZW5kZXJlZE9wcygpe3JldHVybiB0aGlzLnJlbmRlcmVkT3BOYW1lc31jbG9uZUFuZEFkZEZ1bmN0aW9uT3BOb2RlKE4sVCxZLGFhKXt2YXIgaGE9WS5uYW1lLnJlcGxhY2UoVCxhYSk7bGV0IFg9Ti5tZXRhZ3JhcGgubm9kZShoYSk7aWYoWClyZXR1cm4gWDtYPW5ldyBjLk9wTm9kZUltcGwoe25hbWU6aGEsaW5wdXQ6W10sZGV2aWNlOlkuZGV2aWNlLG9wOlkub3AsYXR0cjpfLmNsb25lRGVlcChZLmF0dHIpfSk7WC5jYXJkaW5hbGl0eT1ZLmNhcmRpbmFsaXR5O1guaW5jbHVkZT1ZLmluY2x1ZGU7WC5vdXRwdXRTaGFwZXM9Xy5jbG9uZURlZXAoWS5vdXRwdXRTaGFwZXMpO1gueGxhQ2x1c3Rlcj1ZLnhsYUNsdXN0ZXI7WC5mdW5jdGlvbklucHV0SW5kZXg9WS5mdW5jdGlvbklucHV0SW5kZXg7WC5mdW5jdGlvbk91dHB1dEluZGV4PQpZLmZ1bmN0aW9uT3V0cHV0SW5kZXg7WC5pbnB1dHM9WS5pbnB1dHMubWFwKGNhPT57Y29uc3QgZWE9Xy5jbG9uZShjYSk7ZWEubmFtZT1jYS5uYW1lLnJlcGxhY2UoVCxhYSk7cmV0dXJuIGVhfSk7WC5wYXJlbnROb2RlPU47Ti5tZXRhZ3JhcGguc2V0Tm9kZShYLm5hbWUsWCk7dGhpcy5oaWVyYXJjaHkuc2V0Tm9kZShYLm5hbWUsWCk7aGE9Y2E9PnRoaXMuY2xvbmVBbmRBZGRGdW5jdGlvbk9wTm9kZShOLFQsY2EsYWEpO1guaW5FbWJlZGRpbmdzPVkuaW5FbWJlZGRpbmdzLm1hcChoYSk7WC5vdXRFbWJlZGRpbmdzPVkub3V0RW1iZWRkaW5ncy5tYXAoaGEpO3JldHVybiBYfWNsb25lRnVuY3Rpb25MaWJyYXJ5TWV0YW5vZGUoTixULFksYWEsaGEpe2NvbnN0IFg9e307Tj10aGlzLmNsb25lRnVuY3Rpb25MaWJyYXJ5TWV0YW5vZGVIZWxwZXIoTixULFksYWEsaGEsWCk7Xy5pc0VtcHR5KFgpfHx0aGlzLnBhdGNoRWRnZXNGcm9tRnVuY3Rpb25PdXRwdXRzKFQsWCk7cmV0dXJuIE59Y2xvbmVGdW5jdGlvbkxpYnJhcnlNZXRhbm9kZUhlbHBlcihOLApULFksYWEsaGEsWCl7Y29uc3QgY2E9YS5ncmFwaC5jcmVhdGVNZXRhbm9kZShZLm5hbWUucmVwbGFjZShhYSxoYSkpO2NhLmRlcHRoPVkuZGVwdGg7Y2EuY2FyZGluYWxpdHk9WS5jYXJkaW5hbGl0eTtjYS50ZW1wbGF0ZUlkPVkudGVtcGxhdGVJZDtjYS5vcEhpc3RvZ3JhbT1fLmNsb25lKFkub3BIaXN0b2dyYW0pO2NhLmRldmljZUhpc3RvZ3JhbT1fLmNsb25lKFkuZGV2aWNlSGlzdG9ncmFtKTtjYS54bGFDbHVzdGVySGlzdG9ncmFtPV8uY2xvbmUoWS54bGFDbHVzdGVySGlzdG9ncmFtKTtjYS5oYXNOb25Db250cm9sRWRnZXM9WS5oYXNOb25Db250cm9sRWRnZXM7Y2EuaW5jbHVkZT1ZLmluY2x1ZGU7Y2Eubm9kZUF0dHJpYnV0ZXM9Xy5jbG9uZShZLm5vZGVBdHRyaWJ1dGVzKTtjYS5hc3NvY2lhdGVkRnVuY3Rpb249WS5hc3NvY2lhdGVkRnVuY3Rpb247Xy5lYWNoKFkubWV0YWdyYXBoLm5vZGVzKCksZWE9PntlYT1ZLm1ldGFncmFwaC5ub2RlKGVhKTtzd2l0Y2goZWEudHlwZSl7Y2FzZSBjLk5vZGVUeXBlLk1FVEE6ZWE9CnRoaXMuY2xvbmVGdW5jdGlvbkxpYnJhcnlNZXRhbm9kZUhlbHBlcihOLFQsZWEsYWEsaGEsWCk7ZWEucGFyZW50Tm9kZT1jYTtjYS5tZXRhZ3JhcGguc2V0Tm9kZShlYS5uYW1lLGVhKTt0aGlzLmhpZXJhcmNoeS5zZXROb2RlKGVhLm5hbWUsZWEpO2JyZWFrO2Nhc2UgYy5Ob2RlVHlwZS5PUDplYT10aGlzLmNsb25lQW5kQWRkRnVuY3Rpb25PcE5vZGUoY2EsYWEsZWEsaGEpO18uaXNOdW1iZXIoZWEuZnVuY3Rpb25JbnB1dEluZGV4KSYmdGhpcy5wYXRjaEVkZ2VzSW50b0Z1bmN0aW9uSW5wdXRzKFQsZWEpO18uaXNOdW1iZXIoZWEuZnVuY3Rpb25PdXRwdXRJbmRleCkmJihYW2VhLmZ1bmN0aW9uT3V0cHV0SW5kZXhdPWVhKTticmVhaztkZWZhdWx0OmNvbnNvbGUud2FybihlYS5uYW1lKyIgaXMgb2RkbHkgbmVpdGhlciBhIG1ldGFub2RlIG5vciBhbiBvcG5vZGUuIil9fSk7dGhpcy5jbG9uZUxpYnJhcnlNZXRhbm9kZUVkZ2VzKFksY2EsYWEsaGEpO3JldHVybiBjYX1jbG9uZUxpYnJhcnlNZXRhbm9kZUVkZ2VzKE4sClQsWSxhYSl7Xy5lYWNoKE4ubWV0YWdyYXBoLmVkZ2VzKCksaGE9PntoYT1OLm1ldGFncmFwaC5lZGdlKGhhKTtjb25zdCBYPWhhLnYucmVwbGFjZShZLGFhKSxjYT1oYS53LnJlcGxhY2UoWSxhYSksZWE9bmV3IGMuTWV0YWVkZ2VJbXBsKFgsY2EpO2VhLmluYm91bmQ9aGEuaW5ib3VuZDtlYS5udW1SZWd1bGFyRWRnZXM9aGEubnVtUmVndWxhckVkZ2VzO2VhLm51bUNvbnRyb2xFZGdlcz1oYS5udW1Db250cm9sRWRnZXM7ZWEubnVtUmVmRWRnZXM9aGEubnVtUmVmRWRnZXM7ZWEudG90YWxTaXplPWhhLnRvdGFsU2l6ZTtoYS5iYXNlRWRnZUxpc3QmJihlYS5iYXNlRWRnZUxpc3Q9aGEuYmFzZUVkZ2VMaXN0Lm1hcChrYT0+e2NvbnN0IGJhPV8uY2xvbmUoa2EpO2JhLnY9a2Eudi5yZXBsYWNlKFksYWEpO2JhLnc9a2Eudy5yZXBsYWNlKFksYWEpO3JldHVybiBiYX0pKTtULm1ldGFncmFwaC5ub2RlKGNhKT9ULm1ldGFncmFwaC5zZXRFZGdlKFgsY2EsZWEpOlQubWV0YWdyYXBoLnNldEVkZ2UoY2EsClgsZWEpfSl9cGF0Y2hFZGdlc0ludG9GdW5jdGlvbklucHV0cyhOLFQpe2xldCBZPU1hdGgubWluKFQuZnVuY3Rpb25JbnB1dEluZGV4LE4uaW5wdXRzLmxlbmd0aC0xKTtmb3IodmFyIGFhPV8uY2xvbmUoTi5pbnB1dHNbWV0pO2FhLmlzQ29udHJvbERlcGVuZGVuY3k7KVkrKyxhYT1OLmlucHV0c1tZXTtULmlucHV0cy5wdXNoKGFhKTthYT10aGlzLmhpZXJhcmNoeS5nZXRQcmVkZWNlc3NvcnMoTi5uYW1lKTtsZXQgaGEsWD0wO18uZWFjaChhYS5yZWd1bGFyLGNhPT57WCs9Y2EubnVtUmVndWxhckVkZ2VzO2lmKFg+WSlyZXR1cm4gaGE9Y2EsITF9KTtfLmVhY2goaGEuYmFzZUVkZ2VMaXN0LGNhPT57Y2Eudz09PU4ubmFtZSYmKGNhLnc9VC5uYW1lKTtjYS52PT09Ti5uYW1lJiYoY2Eudj1ULm5hbWUpfSl9cGF0Y2hFZGdlc0Zyb21GdW5jdGlvbk91dHB1dHMoTixUKXtjb25zdCBZPXRoaXMuaGllcmFyY2h5LmdldFN1Y2Nlc3NvcnMoTi5uYW1lKTtfLmVhY2goWS5yZWd1bGFyLGFhPT4Ke18uZWFjaChhYS5iYXNlRWRnZUxpc3QsaGE9Pntjb25zdCBYPXRoaXMuaGllcmFyY2h5Lm5vZGUoaGEudyk7Xy5lYWNoKFguaW5wdXRzLGNhPT57Y2EubmFtZT09PU4ubmFtZSYmKGNhLm5hbWU9VFtjYS5vdXRwdXRUZW5zb3JLZXldLm5hbWUsY2Eub3V0cHV0VGVuc29yS2V5PWhhLm91dHB1dFRlbnNvcktleSl9KX0pO18uZWFjaChhYS5iYXNlRWRnZUxpc3QsaGE9PntoYS52PVRbaGEub3V0cHV0VGVuc29yS2V5XS5uYW1lO2hhLm91dHB1dFRlbnNvcktleT0iMCJ9KX0pfWJ1aWxkU3ViaGllcmFyY2h5KE4pe2lmKCEoTiBpbiB0aGlzLmhhc1N1YmhpZXJhcmNoeSkpe3RoaXMuaGFzU3ViaGllcmFyY2h5W05dPSEwO3ZhciBUPXRoaXMuaW5kZXhbTl07aWYoVC5ub2RlLnR5cGU9PT1jLk5vZGVUeXBlLk1FVEF8fFQubm9kZS50eXBlPT09Yy5Ob2RlVHlwZS5TRVJJRVMpe3ZhciBZPVQubm9kZS5tZXRhZ3JhcGgsYWE9VC5jb3JlR3JhcGgsaGE9W10sWD1bXTtfLmlzRW1wdHkodGhpcy5oaWVyYXJjaHkubGlicmFyeUZ1bmN0aW9ucyl8fAooXy5lYWNoKFkubm9kZXMoKSx6YT0+e2NvbnN0IEZhPVkubm9kZSh6YSksU2E9dGhpcy5oaWVyYXJjaHkubGlicmFyeUZ1bmN0aW9uc1tGYS5vcF07U2EmJjAhPT16YS5pbmRleE9mKGEuZ3JhcGguRlVOQ1RJT05fTElCUkFSWV9OT0RFX1BSRUZJWCkmJih6YT10aGlzLmNsb25lRnVuY3Rpb25MaWJyYXJ5TWV0YW5vZGUoWSxGYSxTYS5ub2RlLFNhLm5vZGUubmFtZSxGYS5uYW1lKSxoYS5wdXNoKEZhKSxYLnB1c2goemEpKX0pLF8uZWFjaChYLCh6YSxGYSk9PntGYT1oYVtGYV07emEucGFyZW50Tm9kZT1GYS5wYXJlbnROb2RlO1kuc2V0Tm9kZShGYS5uYW1lLHphKTt0aGlzLmhpZXJhcmNoeS5zZXROb2RlKEZhLm5hbWUsemEpfSkpO18uZWFjaChZLm5vZGVzKCksemE9PntsZXQgRmE9dGhpcy5nZXRPckNyZWF0ZVJlbmRlck5vZGVCeU5hbWUoemEpLFNhPUZhLm5vZGU7YWEuc2V0Tm9kZSh6YSxGYSk7U2EuaXNHcm91cE5vZGV8fChfLmVhY2goU2EuaW5FbWJlZGRpbmdzLEVhPT57bGV0IEdhPQpuZXcgUChudWxsKSxkYj1uZXcgSihFYSk7ZihGYSxFYSxkYixHYSxLLkNPTlNUQU5UKTt0aGlzLmluZGV4W0VhLm5hbWVdPWRifSksXy5lYWNoKFNhLm91dEVtYmVkZGluZ3MsRWE9PntsZXQgR2E9bmV3IFAobnVsbCksZGI9bmV3IEooRWEpO2coRmEsRWEsZGIsR2EsSy5TVU1NQVJZKTt0aGlzLmluZGV4W0VhLm5hbWVdPWRifSkpfSk7Xy5lYWNoKFkuZWRnZXMoKSx6YT0+e3ZhciBGYT1ZLmVkZ2UoemEpO0ZhPW5ldyBQKEZhKTtGYS5pc0ZhZGVkT3V0PXRoaXMuaW5kZXhbemEudl0uaXNGYWRlZE91dHx8dGhpcy5pbmRleFt6YS53XS5pc0ZhZGVkT3V0O2FhLnNldEVkZ2UoemEudix6YS53LEZhKX0pO0YuZW5hYmxlRXh0cmFjdGlvbiYmVC5ub2RlLnR5cGU9PT1jLk5vZGVUeXBlLk1FVEEmJkMoVCk7Xy5pc0VtcHR5KHRoaXMuaGllcmFyY2h5LmxpYnJhcnlGdW5jdGlvbnMpfHx0aGlzLmJ1aWxkU3ViaGllcmFyY2hpZXNGb3JOZWVkZWRGdW5jdGlvbnMoWSk7Tj09PWEuZ3JhcGguUk9PVF9OQU1FJiYKXy5mb3JPd24odGhpcy5oaWVyYXJjaHkubGlicmFyeUZ1bmN0aW9ucyx6YT0+e3phPXphLm5vZGU7Y29uc3QgRmE9dGhpcy5nZXRPckNyZWF0ZVJlbmRlck5vZGVCeU5hbWUoemEubmFtZSk7VC5saWJyYXJ5RnVuY3Rpb25zRXh0cmFjdC5wdXNoKEZhKTtGYS5ub2RlLmluY2x1ZGU9Yy5JbmNsdXNpb25UeXBlLkVYQ0xVREU7YWEucmVtb3ZlTm9kZSh6YS5uYW1lKX0pO3ZhciBjYT1ULm5vZGUucGFyZW50Tm9kZTtpZihjYSl7dmFyIGVhPXRoaXMuaW5kZXhbY2EubmFtZV0sa2E9KHphLC4uLkZhKT0+RmEuY29uY2F0KFt6YT8iSU4iOiJPVVQiXSkuam9pbigifn4iKSxiYT10aGlzLmhpZXJhcmNoeS5nZXRCcmlkZ2VncmFwaChOKSxsYT17fSx3YT17fSxDYT17fTtfLmVhY2goYmEuZWRnZXMoKSx6YT0+e2xldCBGYT0hIVkubm9kZSh6YS53KSxTYT1GYT96YS52OnphLnc7YmEuZWRnZSh6YSkubnVtUmVndWxhckVkZ2VzP0ZhP3dhW1NhXT0od2FbU2FdfHwwKSsxOmxhW1NhXT0obGFbU2FdfHwKMCkrMTpDYVtTYV09KENhW1NhXXx8MCkrMX0pO3ZhciB4YT10aGlzLmhpZXJhcmNoeS5nZXROb2RlTWFwKCk7Xy5lYWNoKGJhLmVkZ2VzKCksemE9Pnt2YXIgRmE9YmEuZWRnZSh6YSk7bGV0IFNhPSEhWS5ub2RlKHphLncpLFtFYSxHYV09U2E/W3phLncsemEudl06W3phLnYsemEud107dmFyIGRiPXRoaXMuaW5kZXhbRWFdLHhiPXRoaXMuaW5kZXhbR2FdLENiPXhiP3hiLm5vZGU6eGFbR2FdLHliPSFGYS5udW1SZWd1bGFyRWRnZXMmJkNhW0dhXT5GLm1heENvbnRyb2xEZWdyZWUsWyx0Yl09U2E/W1QuaW5Bbm5vdGF0aW9ucyxkYi5pbkFubm90YXRpb25zXTpbVC5vdXRBbm5vdGF0aW9ucyxkYi5vdXRBbm5vdGF0aW9uc107bGV0IENjPShTYT93YTpsYSlbR2FdPkYubWF4QnJpZGdlUGF0aERlZ3JlZTt6YT1udWxsO3ZhciBaYj0hMTtGLmVuYWJsZUJyaWRnZWdyYXBoJiYhQ2MmJiF5YiYmZGIuaXNJbkNvcmUoKSYmKFpiPWhkPT5lYS5jb3JlR3JhcGguZWRnZShTYT97djpoZCx3Ok59Ogp7djpOLHc6aGR9KSwoemE9WmIoR2EpKXx8KHphPVpiKGthKFNhLEdhLGNhLm5hbWUpKSksWmI9ISF6YSk7ZGI9ITE7aWYoemEmJiFGYS5udW1SZWd1bGFyRWRnZXMpe2RiPXphO2Zvcih5Yj1lYS5ub2RlO2RiLmFkam9pbmluZ01ldGFlZGdlOylkYj1kYi5hZGpvaW5pbmdNZXRhZWRnZSx5Yj15Yi5wYXJlbnROb2RlO3liPXRoaXMuaGllcmFyY2h5LmdldFRvcG9sb2dpY2FsT3JkZXJpbmcoeWIubmFtZSk7ZGI9ZGIubWV0YWVkZ2U7ZGI9eWJbZGIudl0+eWJbZGIud119WmImJiFkYj8oQ2I9a2EoU2EsTikseGI9a2EoU2EsR2EsTiksdGI9YWEubm9kZSh4YiksdGJ8fChaYj1hYS5ub2RlKENiKSxaYnx8KFpiPW5ldyBKKHtuYW1lOkNiLHR5cGU6Yy5Ob2RlVHlwZS5CUklER0UsaXNHcm91cE5vZGU6ITEsY2FyZGluYWxpdHk6MCxwYXJlbnROb2RlOm51bGwsc3RhdHM6bnVsbCxpbmNsdWRlOmMuSW5jbHVzaW9uVHlwZS5VTlNQRUNJRklFRCxpbmJvdW5kOlNhLG5vZGVBdHRyaWJ1dGVzOnt9fSksCnRoaXMuaW5kZXhbQ2JdPVpiLGFhLnNldE5vZGUoQ2IsWmIpKSx0Yj1uZXcgSih7bmFtZTp4Yix0eXBlOmMuTm9kZVR5cGUuQlJJREdFLGlzR3JvdXBOb2RlOiExLGNhcmRpbmFsaXR5OjEscGFyZW50Tm9kZTpudWxsLHN0YXRzOm51bGwsaW5jbHVkZTpjLkluY2x1c2lvblR5cGUuVU5TUEVDSUZJRUQsaW5ib3VuZDpTYSxub2RlQXR0cmlidXRlczp7fX0pLHRoaXMuaW5kZXhbeGJdPXRiLGFhLnNldE5vZGUoeGIsdGIpLGFhLnNldFBhcmVudCh4YixDYiksWmIubm9kZS5jYXJkaW5hbGl0eSsrKSxGYT1uZXcgUChGYSksRmEuYWRqb2luaW5nTWV0YWVkZ2U9emEsU2E/YWEuc2V0RWRnZSh4YixFYSxGYSk6YWEuc2V0RWRnZShFYSx4YixGYSkpOnRiLnB1c2gobmV3IEcoQ2IseGIsbmV3IFAoRmEpLEsuU0hPUlRDVVQsU2EpKX0pO18uZWFjaChbITAsITFdLHphPT57bGV0IEZhPWthKHphLE4pLFNhPWFhLm5vZGUoRmEpO1NhJiZfLmVhY2goYWEubm9kZXMoKSxFYT0+e2lmKGFhLm5vZGUoRWEpLm5vZGUudHlwZSE9PQpjLk5vZGVUeXBlLkJSSURHRSYmKHphPyFhYS5wcmVkZWNlc3NvcnMoRWEpLmxlbmd0aDohYWEuc3VjY2Vzc29ycyhFYSkubGVuZ3RoKSl7dmFyIEdhPWthKHphLE4sIlNUUlVDVFVSQUxfVEFSR0VUIiksZGI9YWEubm9kZShHYSk7ZGJ8fChkYj1uZXcgSih7bmFtZTpHYSx0eXBlOmMuTm9kZVR5cGUuQlJJREdFLGlzR3JvdXBOb2RlOiExLGNhcmRpbmFsaXR5OjEscGFyZW50Tm9kZTpudWxsLHN0YXRzOm51bGwsaW5jbHVkZTpjLkluY2x1c2lvblR5cGUuVU5TUEVDSUZJRUQsaW5ib3VuZDp6YSxub2RlQXR0cmlidXRlczp7fX0pLGRiLnN0cnVjdHVyYWw9ITAsdGhpcy5pbmRleFtHYV09ZGIsYWEuc2V0Tm9kZShHYSxkYiksU2Eubm9kZS5jYXJkaW5hbGl0eSsrLGFhLnNldFBhcmVudChHYSxGYSkpO2RiPW5ldyBQKG51bGwpO2RiLnN0cnVjdHVyYWw9ITA7ZGIud2VpZ2h0LS07emE/YWEuc2V0RWRnZShHYSxFYSxkYik6YWEuc2V0RWRnZShFYSxHYSxkYil9fSl9KX19fX1idWlsZFN1YmhpZXJhcmNoaWVzRm9yTmVlZGVkRnVuY3Rpb25zKE4pe18uZWFjaChOLmVkZ2VzKCksClQ9PntUPU4uZWRnZShUKTtUPW5ldyBQKFQpO18uZm9yRWFjaChULm1ldGFlZGdlLmJhc2VFZGdlTGlzdCxZPT57dmFyIGFhPVkudi5zcGxpdChhLmdyYXBoLk5BTUVTUEFDRV9ERUxJTSk7Zm9yKHZhciBoYT1hYS5sZW5ndGg7MDw9aGE7aGEtLSl7WT1hYS5zbGljZSgwLGhhKTtjb25zdCBYPXRoaXMuaGllcmFyY2h5Lm5vZGUoWS5qb2luKGEuZ3JhcGguTkFNRVNQQUNFX0RFTElNKSk7aWYoWCl7aWYoWC50eXBlPT09Yy5Ob2RlVHlwZS5PUCYmdGhpcy5oaWVyYXJjaHkubGlicmFyeUZ1bmN0aW9uc1tYLm9wXSlmb3IoYWE9MTthYTxZLmxlbmd0aDthYSsrKShoYT1ZLnNsaWNlKDAsYWEpLmpvaW4oYS5ncmFwaC5OQU1FU1BBQ0VfREVMSU0pKSYmdGhpcy5idWlsZFN1YmhpZXJhcmNoeShoYSk7YnJlYWt9fX0pfSl9fWQuUmVuZGVyR3JhcGhJbmZvPUI7Y2xhc3MgR3tjb25zdHJ1Y3RvcihOLFQsWSxhYSxoYSl7dGhpcy5ub2RlPU47dGhpcy5yZW5kZXJOb2RlSW5mbz1UO3RoaXMucmVuZGVyTWV0YWVkZ2VJbmZvPQpZO3RoaXMuYW5ub3RhdGlvblR5cGU9YWE7dGhpcy5oZWlnaHQ9dGhpcy53aWR0aD10aGlzLmR5PXRoaXMuZHg9MDtZJiZZLm1ldGFlZGdlJiYodGhpcy52PVkubWV0YWVkZ2Uudix0aGlzLnc9WS5tZXRhZWRnZS53KTt0aGlzLmlzSW49aGE7dGhpcy5wb2ludHM9W119fWQuQW5ub3RhdGlvbj1HO2xldCBLOyhmdW5jdGlvbihOKXtOW04uU0hPUlRDVVQ9MF09IlNIT1JUQ1VUIjtOW04uQ09OU1RBTlQ9MV09IkNPTlNUQU5UIjtOW04uU1VNTUFSWT0yXT0iU1VNTUFSWSI7TltOLkVMTElQU0lTPTNdPSJFTExJUFNJUyJ9KShLPWQuQW5ub3RhdGlvblR5cGV8fChkLkFubm90YXRpb25UeXBlPXt9KSk7Y2xhc3MgTHtjb25zdHJ1Y3Rvcigpe3RoaXMubGlzdD1bXTt0aGlzLm5vZGVOYW1lcz17fX1wdXNoKE4pe2lmKCEoTi5ub2RlLm5hbWUgaW4gdGhpcy5ub2RlTmFtZXMpKWlmKHRoaXMubm9kZU5hbWVzW04ubm9kZS5uYW1lXT0hMCx0aGlzLmxpc3QubGVuZ3RoPEYubWF4QW5ub3RhdGlvbnMpdGhpcy5saXN0LnB1c2goTik7CmVsc2V7dmFyIFQ9dGhpcy5saXN0W3RoaXMubGlzdC5sZW5ndGgtMV07VC5hbm5vdGF0aW9uVHlwZT09PUsuRUxMSVBTSVM/KE49VC5ub2RlLE4uc2V0TnVtTW9yZU5vZGVzKCsrTi5udW1Nb3JlTm9kZXMpKTooVD1uZXcgYS5ncmFwaC5FbGxpcHNpc05vZGVJbXBsKDEpLHRoaXMubGlzdC5wdXNoKG5ldyBHKFQsbmV3IEooVCksbnVsbCxLLkVMTElQU0lTLE4uaXNJbikpKX19fWQuQW5ub3RhdGlvbkxpc3Q9TDtjbGFzcyBKe2NvbnN0cnVjdG9yKE4pe3RoaXMubm9kZT1OO3RoaXMuZXhwYW5kZWQ9ITE7dGhpcy5pbkFubm90YXRpb25zPW5ldyBMO3RoaXMub3V0QW5ub3RhdGlvbnM9bmV3IEw7dGhpcy5vdXRib3hXaWR0aD10aGlzLmluYm94V2lkdGg9dGhpcy5oZWlnaHQ9dGhpcy53aWR0aD10aGlzLnk9dGhpcy54PTA7dGhpcy5zdHJ1Y3R1cmFsPXRoaXMuZXhjbHVkZWQ9ITE7dGhpcy5wYWRkaW5nQm90dG9tPXRoaXMucGFkZGluZ1JpZ2h0PXRoaXMucGFkZGluZ0xlZnQ9dGhpcy5wYWRkaW5nVG9wPQp0aGlzLmxhYmVsSGVpZ2h0PXRoaXMucmFkaXVzPXRoaXMubGFiZWxPZmZzZXQ9MDt0aGlzLmlzT3V0RXh0cmFjdD10aGlzLmlzSW5FeHRyYWN0PSExO3RoaXMuY29yZUJveD17d2lkdGg6MCxoZWlnaHQ6MH07dGhpcy5pc0ZhZGVkT3V0PSExO3RoaXMuZGlzcGxheU5hbWU9Ti5uYW1lLnN1YnN0cmluZyhOLm5hbWUubGFzdEluZGV4T2YoYS5ncmFwaC5OQU1FU1BBQ0VfREVMSU0pKzEpO04udHlwZT09PWMuTm9kZVR5cGUuTUVUQSYmTi5hc3NvY2lhdGVkRnVuY3Rpb24mJigoTj10aGlzLmRpc3BsYXlOYW1lLm1hdGNoKEQpKT90aGlzLmRpc3BsYXlOYW1lPU5bMV06Xy5zdGFydHNXaXRoKHRoaXMuZGlzcGxheU5hbWUsYS5ncmFwaC5GVU5DVElPTl9MSUJSQVJZX05PREVfUFJFRklYKSYmKHRoaXMuZGlzcGxheU5hbWU9dGhpcy5kaXNwbGF5TmFtZS5zdWJzdHJpbmcoYS5ncmFwaC5GVU5DVElPTl9MSUJSQVJZX05PREVfUFJFRklYLmxlbmd0aCkpKX1pc0luQ29yZSgpe3JldHVybiF0aGlzLmlzSW5FeHRyYWN0JiYKIXRoaXMuaXNPdXRFeHRyYWN0JiYhdGhpcy5pc0xpYnJhcnlGdW5jdGlvbn19ZC5SZW5kZXJOb2RlSW5mbz1KO2NsYXNzIFB7Y29uc3RydWN0b3IoTil7dGhpcy5tZXRhZWRnZT1OO3RoaXMuYWRqb2luaW5nTWV0YWVkZ2U9bnVsbDt0aGlzLnN0cnVjdHVyYWw9ITE7dGhpcy53ZWlnaHQ9MTt0aGlzLmlzRmFkZWRPdXQ9ITF9fWQuUmVuZGVyTWV0YWVkZ2VJbmZvPVA7Y2xhc3MgUyBleHRlbmRzIEp7Y29uc3RydWN0b3IoTixUKXtzdXBlcihOKTtOPU4ubWV0YWdyYXBoLmdyYXBoKCk7VC5jb21wb3VuZD0hMDt0aGlzLmNvcmVHcmFwaD1jLmNyZWF0ZUdyYXBoKE4ubmFtZSxjLkdyYXBoVHlwZS5DT1JFLFQpO3RoaXMuaW5FeHRyYWN0Qm94PXt3aWR0aDowLGhlaWdodDowfTt0aGlzLm91dEV4dHJhY3RCb3g9e3dpZHRoOjAsaGVpZ2h0OjB9O3RoaXMubGlicmFyeUZ1bmN0aW9uc0JveD17d2lkdGg6MCxoZWlnaHQ6MH07dGhpcy5pc29sYXRlZEluRXh0cmFjdD1bXTt0aGlzLmlzb2xhdGVkT3V0RXh0cmFjdD0KW107dGhpcy5saWJyYXJ5RnVuY3Rpb25zRXh0cmFjdD1bXX19ZC5SZW5kZXJHcm91cE5vZGVJbmZvPVM7ZC5tYWtlSW5FeHRyYWN0PXE7ZC5tYXBJbmRleFRvSHVlPWZ1bmN0aW9uKE4pe3JldHVybiAxKzU3OS4yNTYxNjc5NzI1Kk4lMzU4fTtkLmV4cGFuZFVudGlsTm9kZUlzU2hvd249ZnVuY3Rpb24oTixUKXt2YXIgWT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic2NlbmUiKTtUPVQuc3BsaXQoIi8iKTt2YXIgYWE9VFtULmxlbmd0aC0xXS5tYXRjaCgvKC4qKTpcdysvKTsyPT09YWEubGVuZ3RoJiYoVFtULmxlbmd0aC0xXT1hYVsxXSk7YWE9VFswXTtsZXQgaGE9Ti5nZXRSZW5kZXJOb2RlQnlOYW1lKGFhKTtmb3IobGV0IFg9MTtYPFQubGVuZ3RoJiZoYS5ub2RlLnR5cGUhPT1hLmdyYXBoLk5vZGVUeXBlLk9QO1grKylOLmJ1aWxkU3ViaGllcmFyY2h5KGFhKSxoYS5leHBhbmRlZD0hMCxZLnNldE5vZGVFeHBhbmRlZChoYSksYWErPSIvIitUW1hdLGhhPU4uZ2V0UmVuZGVyTm9kZUJ5TmFtZShhYSk7CnJldHVybiBoYS5ub2RlLm5hbWV9fSkoYy5yZW5kZXJ8fChjLnJlbmRlcj17fSkpfSkoYS5ncmFwaHx8KGEuZ3JhcGg9e30pKX0pKHRmfHwodGY9e30pKTsKPC9zY3JpcHQ+CjxzY3JpcHQ+Ly9+fldFQlBBVEh+fi90Zi1ncmFwaC1jb21tb24vc2NlbmUuanMKKGZ1bmN0aW9uKGEpeyhmdW5jdGlvbihjKXsoZnVuY3Rpb24oZCl7ZnVuY3Rpb24gZihyLHQsdixBKXt2YXIgeT1nKHIsdCx2KTtpZigheS5lbXB0eSgpKXJldHVybiB5O3Q9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsdCk7aWYodiBpbnN0YW5jZW9mIEFycmF5KWZvcih5PTA7eTx2Lmxlbmd0aDt5KyspdC5jbGFzc0xpc3QuYWRkKHZbeV0pO2Vsc2UgdC5jbGFzc0xpc3QuYWRkKHYpO0E/ci5ub2RlKCkuaW5zZXJ0QmVmb3JlKHQsQSk6ci5ub2RlKCkuYXBwZW5kQ2hpbGQodCk7cmV0dXJuIGQzLnNlbGVjdCh0KS5kYXR1bShyLmRhdHVtKCkpfWZ1bmN0aW9uIGcocix0LHYpe3I9ci5ub2RlKCkuY2hpbGROb2Rlcztmb3IobGV0IEE9MDtBPHIubGVuZ3RoO0ErKyl7bGV0IHk9cltBXTtpZih5LnRhZ05hbWU9PT10KWlmKHYgaW5zdGFuY2VvZiBBcnJheSl7bGV0IHg9ITA7Zm9yKGxldCBDPTA7Qzx2Lmxlbmd0aDtDKyspeD14JiZ5LmNsYXNzTGlzdC5jb250YWlucyh2W0NdKTsKaWYoeClyZXR1cm4gZDMuc2VsZWN0KHkpfWVsc2UgaWYoIXZ8fHkuY2xhc3NMaXN0LmNvbnRhaW5zKHYpKXJldHVybiBkMy5zZWxlY3QoeSl9cmV0dXJuIGQzLnNlbGVjdChudWxsKX1mdW5jdGlvbiBsKHIsdCl7bGV0IHY9dC5ub2RlLnR5cGU9PT1jLk5vZGVUeXBlLlNFUklFUz8wOmMubGF5b3V0LlBBUkFNUy5zdWJzY2VuZS5tZXRhLmxhYmVsSGVpZ2h0O2soZyhyLCJnIixkLkNsYXNzLlNjZW5lLkNPUkUpLDAsdik7dmFyIEE9MDx0Lmlzb2xhdGVkSW5FeHRyYWN0Lmxlbmd0aCx5PTA8dC5pc29sYXRlZE91dEV4dHJhY3QubGVuZ3RoO2xldCB4PTA8dC5saWJyYXJ5RnVuY3Rpb25zRXh0cmFjdC5sZW5ndGgsQz1jLmxheW91dC5QQVJBTVMuc3Vic2NlbmUubWV0YS5leHRyYWN0WE9mZnNldCxGPTA7QSYmKEYrPXQub3V0RXh0cmFjdEJveC53aWR0aCk7eSYmKEYrPXQub3V0RXh0cmFjdEJveC53aWR0aCk7QSYmKEE9dC5jb3JlQm94LndpZHRoLEE9RjxjLmxheW91dC5NSU5fQVVYX1dJRFRIPwpBLWMubGF5b3V0Lk1JTl9BVVhfV0lEVEgrdC5pbkV4dHJhY3RCb3gud2lkdGgvMjpBLXQuaW5FeHRyYWN0Qm94LndpZHRoLzItdC5vdXRFeHRyYWN0Qm94LndpZHRoLSh5P0M6MCksQT1BLXQubGlicmFyeUZ1bmN0aW9uc0JveC53aWR0aC0oeD9DOjApLGsoZyhyLCJnIixkLkNsYXNzLlNjZW5lLklORVhUUkFDVCksQSx2KSk7eSYmKHk9dC5jb3JlQm94LndpZHRoLHk9RjxjLmxheW91dC5NSU5fQVVYX1dJRFRIP3ktYy5sYXlvdXQuTUlOX0FVWF9XSURUSCt0Lm91dEV4dHJhY3RCb3gud2lkdGgvMjp5LXQub3V0RXh0cmFjdEJveC53aWR0aC8yLHk9eS10LmxpYnJhcnlGdW5jdGlvbnNCb3gud2lkdGgtKHg/QzowKSxrKGcociwiZyIsZC5DbGFzcy5TY2VuZS5PVVRFWFRSQUNUKSx5LHYpKTt4JiYodD10LmNvcmVCb3gud2lkdGgtdC5saWJyYXJ5RnVuY3Rpb25zQm94LndpZHRoLzIsayhnKHIsImciLGQuQ2xhc3MuU2NlbmUuRlVOQ1RJT05fTElCUkFSWSksdCx2KSl9ZnVuY3Rpb24gayhyLAp0LHYpe251bGwhPXIuYXR0cigidHJhbnNmb3JtIikmJihyPXIudHJhbnNpdGlvbigicG9zaXRpb24iKSk7ci5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIit0KyIsIit2KyIpIil9ZnVuY3Rpb24gbShyLHQpe3JldHVybiB0P3IudG9GaXhlZCgwKToxPD1NYXRoLmFicyhyKT9yLnRvRml4ZWQoMSk6ci50b0V4cG9uZW50aWFsKDEpfWZ1bmN0aW9uIHAocix0LHYsQSl7bGV0IHk9IkRldmljZTogIityLmRldmljZV9uYW1lKyJcbiI7eSs9ImR0eXBlOiAiK3IuZHR5cGUrIlxuIjtsZXQgeD0iKHNjYWxhcikiOzA8ci5zaGFwZS5sZW5ndGgmJih4PSIoIityLnNoYXBlLmpvaW4oIiwiKSsiKSIpO3k9eSsoIlxuc2hhcGU6ICIreCsiXG5cbiIpKygiIyhlbGVtZW50cyk6ICIrdCsiXG4iKTtyPVtdO2Zvcih0PTA7dDx2Lmxlbmd0aDt0KyspMDx2W3RdJiZyLnB1c2goIiMoIitkLmhlYWx0aFBpbGxFbnRyaWVzW3RdLmxhYmVsKyIpOiAiK3ZbdF0pO3krPXIuam9pbigiLCAiKSsiXG5cbiI7CkEubWF4Pj1BLm1pbiYmKHkrPSJtaW46ICIrQS5taW4rIiwgbWF4OiAiK0EubWF4KyJcbiIseSs9Im1lYW46ICIrQS5tZWFuKyIsIHN0ZGRldjogIitBLnN0ZGRldik7cmV0dXJuIHl9ZnVuY3Rpb24gcShyLHQsdixBLHk9NjAseD0xMCxDPTAsRil7ZDMuc2VsZWN0KHIucGFyZW50Tm9kZSkuc2VsZWN0QWxsKCIuaGVhbHRoLXBpbGwiKS5yZW1vdmUoKTtpZih0KXt2YXIgRD10LnZhbHVlLEI9RC5zbGljZSgyLDgpLEc9QlswXSxLPUJbMV0sTD1CWzVdLEo9RFsxXSxQPXttaW46RFs4XSxtYXg6RFs5XSxtZWFuOkRbMTBdLHN0ZGRldjpNYXRoLnNxcnQoRFsxMV0pfTtudWxsPT15JiYoeT02MCk7bnVsbD09eCYmKHg9MTApO251bGw9PUMmJihDPTApO251bGwhPXYmJnYubm9kZS50eXBlPT09YS5ncmFwaC5Ob2RlVHlwZS5PUCYmKHkvPTIseC89Mik7RD1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoZC5TVkdfTkFNRVNQQUNFLCJnIik7RC5jbGFzc0xpc3QuYWRkKCJoZWFsdGgtcGlsbCIpOwp2YXIgUz1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoZC5TVkdfTkFNRVNQQUNFLCJkZWZzIik7RC5hcHBlbmRDaGlsZChTKTt2YXIgTj1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoZC5TVkdfTkFNRVNQQUNFLCJsaW5lYXJHcmFkaWVudCIpO0E9ImhlYWx0aC1waWxsLWdyYWRpZW50LSIrQTtOLnNldEF0dHJpYnV0ZSgiaWQiLEEpO3ZhciBUPTAsWT0iMCUiO2ZvcihsZXQgaGE9MDtoYTxCLmxlbmd0aDtoYSsrKWlmKEJbaGFdKXtUKz1CW2hhXTt2YXIgYWE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGQuU1ZHX05BTUVTUEFDRSwic3RvcCIpO2FhLnNldEF0dHJpYnV0ZSgib2Zmc2V0IixZKTthYS5zZXRBdHRyaWJ1dGUoInN0b3AtY29sb3IiLGQuaGVhbHRoUGlsbEVudHJpZXNbaGFdLmJhY2tncm91bmRfY29sb3IpO04uYXBwZW5kQ2hpbGQoYWEpO1k9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGQuU1ZHX05BTUVTUEFDRSwic3RvcCIpO2FhPTEwMCpUL0orIiUiO1kuc2V0QXR0cmlidXRlKCJvZmZzZXQiLAphYSk7WS5zZXRBdHRyaWJ1dGUoInN0b3AtY29sb3IiLGQuaGVhbHRoUGlsbEVudHJpZXNbaGFdLmJhY2tncm91bmRfY29sb3IpO04uYXBwZW5kQ2hpbGQoWSk7WT1hYX1TLmFwcGVuZENoaWxkKE4pO1M9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGQuU1ZHX05BTUVTUEFDRSwicmVjdCIpO1Muc2V0QXR0cmlidXRlKCJmaWxsIiwidXJsKCMiK0ErIikiKTtTLnNldEF0dHJpYnV0ZSgid2lkdGgiLFN0cmluZyh5KSk7Uy5zZXRBdHRyaWJ1dGUoImhlaWdodCIsU3RyaW5nKHgpKTtTLnNldEF0dHJpYnV0ZSgieSIsU3RyaW5nKEMpKTtELmFwcGVuZENoaWxkKFMpO1M9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGQuU1ZHX05BTUVTUEFDRSwidGl0bGUiKTtTLnRleHRDb250ZW50PXAodCxKLEIsUCk7RC5hcHBlbmRDaGlsZChTKTt0PSExO2lmKG51bGwhPXYmJihTPXYueC15LzIseD12LnkteC12LmhlaWdodC8yLTIsMD52LmxhYmVsT2Zmc2V0JiYoeCs9di5sYWJlbE9mZnNldCksRC5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsCiJ0cmFuc2xhdGUoIitTKyIsICIreCsiKSIpLChCWzJdfHxCWzNdfHxCWzRdKSYmKHY9di5ub2RlLmF0dHIpJiZ2Lmxlbmd0aCkpZm9yKEI9MDtCPHYubGVuZ3RoO0IrKylpZigiVCI9PT12W0JdLmtleSl7dD0odj12W0JdLnZhbHVlLnR5cGUpJiYvXkRUXyhCT09MfElOVHxVSU5UKS8udGVzdCh2KTticmVha312PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhkLlNWR19OQU1FU1BBQ0UsInRleHQiKTtpZihOdW1iZXIuaXNGaW5pdGUoUC5taW4pJiZOdW1iZXIuaXNGaW5pdGUoUC5tYXgpKXtpZihCPW0oUC5taW4sdCksUD1tKFAubWF4LHQpLHYudGV4dENvbnRlbnQ9MTxKP0IrIiB+ICIrUDpCLDA8R3x8MDxLfHwwPEwpdi50ZXh0Q29udGVudCs9IiAoIixKPVtdLDA8RyYmSi5wdXNoKGBOYU5cdTAwZDcke0d9YCksMDxLJiZKLnB1c2goYC1cdTIyMWVcdTAwZDcke0t9YCksMDxMJiZKLnB1c2goYCtcdTIyMWVcdTAwZDcke0x9YCksdi50ZXh0Q29udGVudCs9Si5qb2luKCI7ICIpKyIpIn1lbHNlIHYudGV4dENvbnRlbnQ9CiIoTm8gZmluaXRlIGVsZW1lbnRzKSI7di5jbGFzc0xpc3QuYWRkKCJoZWFsdGgtcGlsbC1zdGF0cyIpO251bGw9PUYmJihGPXkvMik7di5zZXRBdHRyaWJ1dGUoIngiLFN0cmluZyhGKSk7di5zZXRBdHRyaWJ1dGUoInkiLFN0cmluZyhDLTIpKTtELmFwcGVuZENoaWxkKHYpO1BvbHltZXIuZG9tKHIucGFyZW50Tm9kZSkuYXBwZW5kQ2hpbGQoRCl9fWQuU1ZHX05BTUVTUEFDRT0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciO2QuQ2xhc3M9e05vZGU6e0NPTlRBSU5FUjoibm9kZXMiLEdST1VQOiJub2RlIixTSEFQRToibm9kZXNoYXBlIixDT0xPUl9UQVJHRVQ6Im5vZGVjb2xvcnRhcmdldCIsTEFCRUw6Im5vZGVsYWJlbCIsQlVUVE9OX0NPTlRBSU5FUjoiYnV0dG9uY29udGFpbmVyIixCVVRUT05fQ0lSQ0xFOiJidXR0b25jaXJjbGUiLEVYUEFORF9CVVRUT046ImV4cGFuZGJ1dHRvbiIsQ09MTEFQU0VfQlVUVE9OOiJjb2xsYXBzZWJ1dHRvbiJ9LEVkZ2U6e0NPTlRBSU5FUjoiZWRnZXMiLApHUk9VUDoiZWRnZSIsTElORToiZWRnZWxpbmUiLFJFRkVSRU5DRV9FREdFOiJyZWZlcmVuY2VlZGdlIixSRUZfTElORToicmVmbGluZSIsU0VMRUNUQUJMRToic2VsZWN0YWJsZWVkZ2UiLFNFTEVDVEVEOiJzZWxlY3RlZGVkZ2UiLFNUUlVDVFVSQUw6InN0cnVjdHVyYWwifSxBbm5vdGF0aW9uOntPVVRCT1g6Im91dC1hbm5vdGF0aW9ucyIsSU5CT1g6ImluLWFubm90YXRpb25zIixHUk9VUDoiYW5ub3RhdGlvbiIsTk9ERToiYW5ub3RhdGlvbi1ub2RlIixFREdFOiJhbm5vdGF0aW9uLWVkZ2UiLENPTlRST0xfRURHRToiYW5ub3RhdGlvbi1jb250cm9sLWVkZ2UiLExBQkVMOiJhbm5vdGF0aW9uLWxhYmVsIixFTExJUFNJUzoiYW5ub3RhdGlvbi1lbGxpcHNpcyJ9LFNjZW5lOntHUk9VUDoic2NlbmUiLENPUkU6ImNvcmUiLEZVTkNUSU9OX0xJQlJBUlk6ImZ1bmN0aW9uLWxpYnJhcnkiLElORVhUUkFDVDoiaW4tZXh0cmFjdCIsT1VURVhUUkFDVDoib3V0LWV4dHJhY3QifSxTdWJzY2VuZTp7R1JPVVA6InN1YnNjZW5lIn0sCk9QTk9ERToib3AiLE1FVEFOT0RFOiJtZXRhIixTRVJJRVNOT0RFOiJzZXJpZXMiLEJSSURHRU5PREU6ImJyaWRnZSIsRUxMSVBTSVNOT0RFOiJlbGxpcHNpcyJ9O2QuaGVhbHRoUGlsbEVudHJpZXM9W3tiYWNrZ3JvdW5kX2NvbG9yOiIjQ0MyRjJDIixsYWJlbDoiTmFOIn0se2JhY2tncm91bmRfY29sb3I6IiNGRjhEMDAiLGxhYmVsOiItXHUyMjFlIn0se2JhY2tncm91bmRfY29sb3I6IiNFQUVBRUEiLGxhYmVsOiItIn0se2JhY2tncm91bmRfY29sb3I6IiNBNUE1QTUiLGxhYmVsOiIwIn0se2JhY2tncm91bmRfY29sb3I6IiMyNjI2MjYiLGxhYmVsOiIrIn0se2JhY2tncm91bmRfY29sb3I6IiMwMDNFRDQiLGxhYmVsOiIrXHUyMjFlIn1dO2QuZml0PWZ1bmN0aW9uKHIsdCx2LEEpe3ZhciB5PXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7bGV0IHg9bnVsbDt0cnl7aWYoeD10LmdldEJCb3goKSwwPT09eC53aWR0aClyZXR1cm59Y2F0Y2goQyl7cmV0dXJufXQ9Yy5sYXlvdXQuUEFSQU1TLmdyYXBoOwp5PWQzLnpvb21JZGVudGl0eS5zY2FsZSguOSpNYXRoLm1pbih5LndpZHRoL3gud2lkdGgseS5oZWlnaHQveC5oZWlnaHQsMikpLnRyYW5zbGF0ZSh0LnBhZGRpbmcucGFkZGluZ0xlZnQsdC5wYWRkaW5nLnBhZGRpbmdUb3ApO2QzLnNlbGVjdChyKS50cmFuc2l0aW9uKCkuZHVyYXRpb24oNTAwKS5jYWxsKHYudHJhbnNmb3JtLHkpLm9uKCJlbmQuZml0dGVkIiwoKT0+e3Yub24oImVuZC5maXR0ZWQiLG51bGwpO0EoKX0pfTtkLnBhblRvTm9kZT1mdW5jdGlvbihyLHQsdixBKXt2PWQzLnNlbGVjdCh0KS5zZWxlY3QoYFtkYXRhLW5hbWU9IiR7cn0iXWApLm5vZGUoKTtpZighdilyZXR1cm4gY29uc29sZS53YXJuKGBwYW5Ub05vZGUoKSBmYWlsZWQgZm9yIG5vZGUgbmFtZSAiJHtyfSJgKSwhMTt2YXIgeT12LmdldEJCb3goKSx4PXYuZ2V0U2NyZWVuQ1RNKCk7cj10LmNyZWF0ZVNWR1BvaW50KCk7dj10LmNyZWF0ZVNWR1BvaW50KCk7ci54PXkueDtyLnk9eS55O3YueD15LngreS53aWR0aDsKdi55PXkueSt5LmhlaWdodDtyPXIubWF0cml4VHJhbnNmb3JtKHgpO3Y9di5tYXRyaXhUcmFuc2Zvcm0oeCk7eD0oRixELEIsRyk9PiEoRj5CJiZEPEcpO3k9dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtjb25zdCBDPXkudG9wK3kuaGVpZ2h0LTE1MDtyZXR1cm4geChyLngsdi54LHkubGVmdCx5LmxlZnQreS53aWR0aC0zMjApfHx4KHIueSx2LnkseS50b3AsQyk/KHg9eS5sZWZ0K3kud2lkdGgvMi0oci54K3YueCkvMixyPXkudG9wK3kuaGVpZ2h0LzItKHIueSt2LnkpLzIsdj1kMy56b29tVHJhbnNmb3JtKHQpLGQzLnNlbGVjdCh0KS50cmFuc2l0aW9uKCkuZHVyYXRpb24oNTAwKS5jYWxsKEEudHJhbnNsYXRlQnkseC92Lmssci92LmspLCEwKTohMX07ZC5zZWxlY3RPckNyZWF0ZUNoaWxkPWY7ZC5zZWxlY3RDaGlsZD1nO2QuYnVpbGRHcm91cD1mdW5jdGlvbihyLHQsdixBKXtBPUF8fGQuQ2xhc3MuU2NlbmUuR1JPVVA7bGV0IHk9ZyhyLCJnIixBKS5lbXB0eSgpO3I9ZihyLCJnIiwKQSk7QT1mKHIsImciLGQuQ2xhc3MuU2NlbmUuQ09SRSk7bGV0IHg9Xy5yZWR1Y2UodC5jb3JlR3JhcGgubm9kZXMoKSwoQyxGKT0+e0Y9dC5jb3JlR3JhcGgubm9kZShGKTtGLmV4Y2x1ZGVkfHxDLnB1c2goRik7cmV0dXJuIEN9LFtdKTt0Lm5vZGUudHlwZT09PWMuTm9kZVR5cGUuU0VSSUVTJiZ4LnJldmVyc2UoKTtkLmVkZ2UuYnVpbGRHcm91cChBLHQuY29yZUdyYXBoLHYpO2Qubm9kZS5idWlsZEdyb3VwKEEseCx2KTswPHQuaXNvbGF0ZWRJbkV4dHJhY3QubGVuZ3RoPyhBPWYociwiZyIsZC5DbGFzcy5TY2VuZS5JTkVYVFJBQ1QpLGQubm9kZS5idWlsZEdyb3VwKEEsdC5pc29sYXRlZEluRXh0cmFjdCx2KSk6ZyhyLCJnIixkLkNsYXNzLlNjZW5lLklORVhUUkFDVCkucmVtb3ZlKCk7MDx0Lmlzb2xhdGVkT3V0RXh0cmFjdC5sZW5ndGg/KEE9ZihyLCJnIixkLkNsYXNzLlNjZW5lLk9VVEVYVFJBQ1QpLGQubm9kZS5idWlsZEdyb3VwKEEsdC5pc29sYXRlZE91dEV4dHJhY3QsdikpOgpnKHIsImciLGQuQ2xhc3MuU2NlbmUuT1VURVhUUkFDVCkucmVtb3ZlKCk7MDx0LmxpYnJhcnlGdW5jdGlvbnNFeHRyYWN0Lmxlbmd0aD8oQT1mKHIsImciLGQuQ2xhc3MuU2NlbmUuRlVOQ1RJT05fTElCUkFSWSksZC5ub2RlLmJ1aWxkR3JvdXAoQSx0LmxpYnJhcnlGdW5jdGlvbnNFeHRyYWN0LHYpKTpnKHIsImciLGQuQ2xhc3MuU2NlbmUuRlVOQ1RJT05fTElCUkFSWSkucmVtb3ZlKCk7bChyLHQpO3kmJnIuYXR0cigib3BhY2l0eSIsMCkudHJhbnNpdGlvbigpLmF0dHIoIm9wYWNpdHkiLDEpO3JldHVybiByfTtkLmFkZEdyYXBoQ2xpY2tMaXN0ZW5lcj1mdW5jdGlvbihyLHQpe2QzLnNlbGVjdChyKS5vbigiY2xpY2siLCgpPT57dC5maXJlKCJncmFwaC1zZWxlY3QiKX0pfTtkLnRyYW5zbGF0ZT1rO2QucG9zaXRpb25SZWN0PWZ1bmN0aW9uKHIsdCx2LEEseSl7ci50cmFuc2l0aW9uKCkuYXR0cigieCIsdC1BLzIpLmF0dHIoInkiLHYteS8yKS5hdHRyKCJ3aWR0aCIsQSkuYXR0cigiaGVpZ2h0IiwKeSl9O2QucG9zaXRpb25UcmlhbmdsZT1mdW5jdGlvbihyLHQsdixBLHkpe3kvPTI7QS89Mjt0PVtbdCx2LXldLFt0K0Esdit5XSxbdC1BLHYreV1dO3IudHJhbnNpdGlvbigpLmF0dHIoInBvaW50cyIsdC5tYXAoeD0+eC5qb2luKCIsIikpLmpvaW4oIiAiKSl9O2QucG9zaXRpb25CdXR0b249ZnVuY3Rpb24ocix0KXtsZXQgdj1jLmxheW91dC5jb21wdXRlQ1hQb3NpdGlvbk9mTm9kZVNoYXBlKHQpKyh0LmV4cGFuZGVkP3Qud2lkdGg6dC5jb3JlQm94LndpZHRoKS8yLTYsQT10LnktKHQuZXhwYW5kZWQ/dC5oZWlnaHQ6dC5jb3JlQm94LmhlaWdodCkvMis2O3Qubm9kZS50eXBlIT09Yy5Ob2RlVHlwZS5TRVJJRVN8fHQuZXhwYW5kZWR8fCh2Kz0xMCxBLT0yKTt0PSJ0cmFuc2xhdGUoIit2KyIsIitBKyIpIjtyLnNlbGVjdEFsbCgicGF0aCIpLnRyYW5zaXRpb24oKS5hdHRyKCJ0cmFuc2Zvcm0iLHQpO3Iuc2VsZWN0KCJjaXJjbGUiKS50cmFuc2l0aW9uKCkuYXR0cih7Y3g6dixjeTpBLApyOmMubGF5b3V0LlBBUkFNUy5ub2RlU2l6ZS5tZXRhLmV4cGFuZEJ1dHRvblJhZGl1c30pfTtkLnBvc2l0aW9uRWxsaXBzZT1mdW5jdGlvbihyLHQsdixBLHkpe3IudHJhbnNpdGlvbigpLmF0dHIoImN4Iix0KS5hdHRyKCJjeSIsdikuYXR0cigicngiLEEvMikuYXR0cigicnkiLHkvMil9O2QuaHVtYW5pemVIZWFsdGhQaWxsU3RhdD1tO2QuYWRkSGVhbHRoUGlsbD1xO2QuYWRkSGVhbHRoUGlsbHM9ZnVuY3Rpb24ocix0LHYpe2lmKHQpe3ZhciBBPTE7ZDMuc2VsZWN0KHIpLnNlbGVjdEFsbCgiZy5ub2Rlc2hhcGUiKS5lYWNoKGZ1bmN0aW9uKHkpe2NvbnN0IHg9dFt5Lm5vZGUubmFtZV07cSh0aGlzLHg/eFt2XTpudWxsLHksQSsrKX0pfX19KShjLnNjZW5lfHwoYy5zY2VuZT17fSkpfSkoYS5ncmFwaHx8KGEuZ3JhcGg9e30pKX0pKHRmfHwodGY9e30pKTsKPC9zY3JpcHQ+CjxzY3JpcHQ+Ly9+fldFQlBBVEh+fi90Zi1ncmFwaC1jb21tb24vdGVtcGxhdGUuanMKKGZ1bmN0aW9uKGEpeyhmdW5jdGlvbihjKXsoZnVuY3Rpb24oZCl7ZnVuY3Rpb24gZihxKXtsZXQgcj1fLm1hcCh7ZGVwdGg6cS5kZXB0aCwifFZ8IjpxLm1ldGFncmFwaC5ub2RlcygpLmxlbmd0aCwifEV8IjpxLm1ldGFncmFwaC5lZGdlcygpLmxlbmd0aH0sZnVuY3Rpb24odCx2KXtyZXR1cm4gdisiXHgzZCIrdH0pLmpvaW4oIiAiKTtxPV8ubWFwKHEub3BIaXN0b2dyYW0sZnVuY3Rpb24odCx2KXtyZXR1cm4gdisiXHgzZCIrdH0pLmpvaW4oIiwiKTtyZXR1cm4gcisiIFtvcHNdICIrcX1mdW5jdGlvbiBnKHEpe2NvbnN0IHI9cS5nZXROb2RlTWFwKCk7bGV0IHQ9T2JqZWN0LmtleXMocikucmVkdWNlKCh2LEEpPT57Y29uc3QgeT1yW0FdO2lmKHkudHlwZSE9PWMuTm9kZVR5cGUuTUVUQSlyZXR1cm4gdjtBPUEuc3BsaXQoIi8iKS5sZW5ndGgtMTtsZXQgeD1mKHkpLEM9dlt4XXx8e25vZGVzOltdLGxldmVsOkF9O3ZbeF09QztDLm5vZGVzLnB1c2goeSk7Qy5sZXZlbD5BJiYoQy5sZXZlbD0KQSk7cmV0dXJuIHZ9LHt9KTtyZXR1cm4gT2JqZWN0LmtleXModCkubWFwKHY9Plt2LHRbdl1dKS5maWx0ZXIoKFssdl0pPT57KHtub2Rlczp2fT12KTtpZigxPHYubGVuZ3RoKXJldHVybiEwO3Y9dlswXTtyZXR1cm4gdi50eXBlPT09Yy5Ob2RlVHlwZS5NRVRBJiZ2LmFzc29jaWF0ZWRGdW5jdGlvbn0pLnNvcnQoKFssdl0pPT52Lm5vZGVzWzBdLmRlcHRoKX1mdW5jdGlvbiBsKHEscil7cmV0dXJuIF8ucmVkdWNlKHEsZnVuY3Rpb24odCx2KXtsZXQgQT12WzBdLHk9W107dlsxXS5ub2Rlcy5mb3JFYWNoKGZ1bmN0aW9uKHgpe2ZvcihsZXQgQz0wO0M8eS5sZW5ndGg7QysrKWlmKCFyfHxtKHlbQ10ubWV0YW5vZGUubWV0YWdyYXBoLHgubWV0YWdyYXBoKSl7eC50ZW1wbGF0ZUlkPXlbQ10ubWV0YW5vZGUudGVtcGxhdGVJZDt5W0NdLm1lbWJlcnMucHVzaCh4Lm5hbWUpO3JldHVybn14LnRlbXBsYXRlSWQ9QSsiWyIreS5sZW5ndGgrIl0iO3kucHVzaCh7bWV0YW5vZGU6eCxtZW1iZXJzOlt4Lm5hbWVdfSl9KTsKeS5mb3JFYWNoKGZ1bmN0aW9uKHgpe3RbeC5tZXRhbm9kZS50ZW1wbGF0ZUlkXT17bGV2ZWw6dlsxXS5sZXZlbCxub2Rlczp4Lm1lbWJlcnN9fSk7cmV0dXJuIHR9LHt9KX1mdW5jdGlvbiBrKHEscix0KXtyZXR1cm4gXy5zb3J0QnkocSxbdj0+ci5ub2RlKHYpLm9wLHY9PnIubm9kZSh2KS50ZW1wbGF0ZUlkLHY9PnIubmVpZ2hib3JzKHYpLmxlbmd0aCx2PT5yLnByZWRlY2Vzc29ycyh2KS5sZW5ndGgsdj0+ci5zdWNjZXNzb3JzKHYpLmxlbmd0aCx2PT52LnN1YnN0cih0Lmxlbmd0aCldKX1mdW5jdGlvbiBtKHEscil7ZnVuY3Rpb24gdChHLEspe2xldCBMPUcuc3Vic3RyKHYubGVuZ3RoKSxKPUsuc3Vic3RyKEEubGVuZ3RoKTtpZih5W0xdXnhbSl0pcmV0dXJuIGNvbnNvbGUud2FybigiZGlmZmVyZW50IHZpc2l0IHBhdHRlcm4iLCJbIit2KyJdIixMLCJbIitBKyJdIixKKSwhMDt5W0xdfHwoeVtMXT14W0pdPSEwLEMucHVzaCh7bjE6RyxuMjpLfSkpO3JldHVybiExfWlmKCFhLmdyYXBoLmhhc1NpbWlsYXJEZWdyZWVTZXF1ZW5jZShxLApyKSlyZXR1cm4hMTtsZXQgdj1xLmdyYXBoKCkubmFtZSxBPXIuZ3JhcGgoKS5uYW1lLHk9e30seD17fSxDPVtdO3ZhciBGPXEuc291cmNlcygpLEQ9ci5zb3VyY2VzKCk7aWYoRi5sZW5ndGghPT1ELmxlbmd0aClyZXR1cm4gY29uc29sZS5sb2coImRpZmZlcmVudCBzb3VyY2UgbGVuZ3RoIiksITE7Rj1rKEYscSx2KTtEPWsoRCxyLEEpO2Zvcih2YXIgQj0wO0I8Ri5sZW5ndGg7QisrKWlmKHQoRltCXSxEW0JdKSlyZXR1cm4hMTtmb3IoOzA8Qy5sZW5ndGg7KXtEPUMucG9wKCk7aWYoIXAocS5ub2RlKEQubjEpLHIubm9kZShELm4yKSkpcmV0dXJuITE7Rj1xLnN1Y2Nlc3NvcnMoRC5uMSk7RD1yLnN1Y2Nlc3NvcnMoRC5uMik7aWYoRi5sZW5ndGghPT1ELmxlbmd0aClyZXR1cm4gY29uc29sZS5sb2coIiMgb2Ygc3VjY2Vzc29ycyBtaXNtYXRjaCIsRixEKSwhMTtGPWsoRixxLHYpO0Q9ayhELHIsQSk7Zm9yKEI9MDtCPEYubGVuZ3RoO0IrKylpZih0KEZbQl0sRFtCXSkpcmV0dXJuITF9cmV0dXJuITB9CmZ1bmN0aW9uIHAocSxyKXtpZihxLnR5cGU9PT1jLk5vZGVUeXBlLk1FVEEpcmV0dXJuIHEudGVtcGxhdGVJZCYmci50ZW1wbGF0ZUlkJiZxLnRlbXBsYXRlSWQ9PT1yLnRlbXBsYXRlSWQ7aWYocS50eXBlPT09Yy5Ob2RlVHlwZS5PUCYmci50eXBlPT09Yy5Ob2RlVHlwZS5PUClyZXR1cm4gcS5vcD09PXIub3A7aWYocS50eXBlPT09Yy5Ob2RlVHlwZS5TRVJJRVMmJnIudHlwZT09PWMuTm9kZVR5cGUuU0VSSUVTKXtsZXQgdD1xLm1ldGFncmFwaC5ub2RlQ291bnQoKTtyZXR1cm4gdD09PXIubWV0YWdyYXBoLm5vZGVDb3VudCgpJiYoMD09PXR8fHEubWV0YWdyYXBoLm5vZGUocS5tZXRhZ3JhcGgubm9kZXMoKVswXSkub3A9PT1yLm1ldGFncmFwaC5ub2RlKHIubWV0YWdyYXBoLm5vZGVzKClbMF0pLm9wKX1yZXR1cm4hMX1kLmRldGVjdD1mdW5jdGlvbihxLHIpe3E9ZyhxKTtsZXQgdD1sKHEscik7cmV0dXJuIE9iamVjdC5rZXlzKHQpLnNvcnQodj0+dFt2XS5sZXZlbCkucmVkdWNlKCh2LApBKT0+e3ZbQV09dFtBXTtyZXR1cm4gdn0se30pfX0pKGMudGVtcGxhdGV8fChjLnRlbXBsYXRlPXt9KSl9KShhLmdyYXBofHwoYS5ncmFwaD17fSkpfSkodGZ8fCh0Zj17fSkpOwo8L3NjcmlwdD4KPHNjcmlwdD4vL35+V0VCUEFUSH5+L3RmLWdyYXBoLWNvbW1vbi91dGlsLmpzCihmdW5jdGlvbihhKXsoZnVuY3Rpb24oYyl7KGZ1bmN0aW9uKGQpe2QudGltZT1mdW5jdGlvbihmLGcpe2xldCBsPURhdGUubm93KCk7Zz1nKCk7Y29uc29sZS5sb2coZiwiOiIsRGF0ZS5ub3coKS1sLCJtcyIpO3JldHVybiBnfTtkLmdldFRyYWNrZXI9ZnVuY3Rpb24oZil7cmV0dXJue3NldE1lc3NhZ2U6ZnVuY3Rpb24oZyl7Zi5zZXQoInByb2dyZXNzIix7dmFsdWU6Zi5wcm9ncmVzcy52YWx1ZSxtc2c6Z30pfSx1cGRhdGVQcm9ncmVzczpmdW5jdGlvbihnKXtmLnNldCgicHJvZ3Jlc3MiLHt2YWx1ZTpmLnByb2dyZXNzLnZhbHVlK2csbXNnOmYucHJvZ3Jlc3MubXNnfSl9LHJlcG9ydEVycm9yOmZ1bmN0aW9uKGcsbCl7Y29uc29sZS5lcnJvcihsLnN0YWNrKTtmLnNldCgicHJvZ3Jlc3MiLHt2YWx1ZTpmLnByb2dyZXNzLnZhbHVlLG1zZzpnLGVycm9yOiEwfSl9fX07ZC5nZXRTdWJ0YXNrVHJhY2tlcj1mdW5jdGlvbihmLGcsbCl7cmV0dXJue3NldE1lc3NhZ2U6ZnVuY3Rpb24oayl7Zi5zZXRNZXNzYWdlKGwrCiI6ICIrayl9LHVwZGF0ZVByb2dyZXNzOmZ1bmN0aW9uKGspe2YudXBkYXRlUHJvZ3Jlc3MoaypnLzEwMCl9LHJlcG9ydEVycm9yOmZ1bmN0aW9uKGssbSl7Zi5yZXBvcnRFcnJvcihsKyI6ICIrayxtKX19fTtkLnJ1blRhc2s9ZnVuY3Rpb24oZixnLGwsayl7ay5zZXRNZXNzYWdlKGYpO3RyeXtsZXQgbT1hLmdyYXBoLnV0aWwudGltZShmLGwpO2sudXBkYXRlUHJvZ3Jlc3MoZyk7cmV0dXJuIG19Y2F0Y2gobSl7ay5yZXBvcnRFcnJvcigiRmFpbGVkICIrZixtKX19O2QucnVuQXN5bmNUYXNrPWZ1bmN0aW9uKGYsZyxsLGspe3JldHVybiBuZXcgUHJvbWlzZShtPT57ay5zZXRNZXNzYWdlKGYpO3NldFRpbWVvdXQoZnVuY3Rpb24oKXt0cnl7bGV0IHA9YS5ncmFwaC51dGlsLnRpbWUoZixsKTtrLnVwZGF0ZVByb2dyZXNzKGcpO20ocCl9Y2F0Y2gocCl7ay5yZXBvcnRFcnJvcigiRmFpbGVkICIrZixwKX19LDIwKX0pfTtkLnJ1bkFzeW5jUHJvbWlzZVRhc2s9ZnVuY3Rpb24oZixnLGwsayl7cmV0dXJuIG5ldyBQcm9taXNlKChtLApwKT0+e2Z1bmN0aW9uIHEocil7ay5yZXBvcnRFcnJvcigiRmFpbGVkICIrZixyKTtwKHIpfWsuc2V0TWVzc2FnZShmKTtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dHJ5e2xldCByPURhdGUubm93KCk7bCgpLnRoZW4oZnVuY3Rpb24odCl7Y29uc29sZS5sb2coZiwiOiIsRGF0ZS5ub3coKS1yLCJtcyIpO2sudXBkYXRlUHJvZ3Jlc3MoZyk7bSh0KX0pLmNhdGNoKHEpfWNhdGNoKHIpe3Eocil9fSwyMCl9KX07ZC5lc2NhcGVRdWVyeVNlbGVjdG9yPWZ1bmN0aW9uKGYpe3JldHVybiBmLnJlcGxhY2UoLyhbOi5cW1xdLC9cXFwoXCldKS9nLCJcXCQxIil9O2QuTUVNT1JZX1VOSVRTPVt7c3ltYm9sOiJCIn0se3N5bWJvbDoiS0IiLG51bVVuaXRzOjEwMjR9LHtzeW1ib2w6Ik1CIixudW1Vbml0czoxMDI0fSx7c3ltYm9sOiJHQiIsbnVtVW5pdHM6MTAyNH0se3N5bWJvbDoiVEIiLG51bVVuaXRzOjEwMjR9LHtzeW1ib2w6IlBCIixudW1Vbml0czoxMDI0fV07ZC5USU1FX1VOSVRTPVt7c3ltYm9sOiJcdTAwYjVzIn0sCntzeW1ib2w6Im1zIixudW1Vbml0czoxRTN9LHtzeW1ib2w6InMiLG51bVVuaXRzOjFFM30se3N5bWJvbDoibWluIixudW1Vbml0czo2MH0se3N5bWJvbDoiaHIiLG51bVVuaXRzOjYwfSx7c3ltYm9sOiJkYXlzIixudW1Vbml0czoyNH1dO2QuY29udmVydFVuaXRzVG9IdW1hblJlYWRhYmxlPWZ1bmN0aW9uKGYsZyxsPTApe3JldHVybiBsKzE8Zy5sZW5ndGgmJmY+PWdbbCsxXS5udW1Vbml0cz9hLmdyYXBoLnV0aWwuY29udmVydFVuaXRzVG9IdW1hblJlYWRhYmxlKGYvZ1tsKzFdLm51bVVuaXRzLGcsbCsxKTpOdW1iZXIoZi50b1ByZWNpc2lvbigzKSkrIiAiK2dbbF0uc3ltYm9sfTtkLmhhc0Rpc3BsYXlhYmxlTm9kZVN0YXRzPWZ1bmN0aW9uKGYpe3JldHVybiBmJiYoMDxmLnRvdGFsQnl0ZXN8fDA8Zi5nZXRUb3RhbE1pY3JvcygpfHxmLm91dHB1dFNpemUpPyEwOiExfTtkLnJlbW92ZUNvbW1vblByZWZpeD1mdW5jdGlvbihmKXtpZigyPmYubGVuZ3RoKXJldHVybiBmO2xldCBnPQowLGw9MCxrPV8ubWluKF8ubWFwKGYsbT0+bS5sZW5ndGgpKTtmb3IoOzspe2crKztsZXQgbT1fLm1hcChmLHA9PnAuc3Vic3RyaW5nKDAsZykpO2lmKG0uZXZlcnkoKHAscSk9PjA9PT1xPyEwOnA9PT1tW3EtMV0pKXtpZihnPj1rKXJldHVybiBmO2w9Z31lbHNlIGJyZWFrfXJldHVybiBfLm1hcChmLG09Pm0uc3Vic3RyaW5nKGwpKX07ZC5jb21wdXRlSHVtYW5GcmllbmRseVRpbWU9ZnVuY3Rpb24oZil7Zj0rbmV3IERhdGUtK25ldyBEYXRlKGYvMUUzKTtyZXR1cm4gM0U0PmY/Imp1c3Qgbm93Ijo2RTQ+Zj9NYXRoLmZsb29yKGYvMUUzKSsiIHNlY29uZHMgYWdvIjoxMkU0PmY/ImEgbWludXRlIGFnbyI6MzZFNT5mP01hdGguZmxvb3IoZi82RTQpKyIgbWludXRlcyBhZ28iOjE9PU1hdGguZmxvb3IoZi8zNkU1KT8iYW4gaG91ciBhZ28iOjg2NEU1PmY/TWF0aC5mbG9vcihmLzM2RTUpKyIgaG91cnMgYWdvIjoxNzI4RTU+Zj8ieWVzdGVyZGF5IjpNYXRoLmZsb29yKGYvODY0RTUpKyIgZGF5cyBhZ28ifX0pKGMudXRpbHx8CihjLnV0aWw9e30pKX0pKGEuZ3JhcGh8fChhLmdyYXBoPXt9KSl9KSh0Znx8KHRmPXt9KSk7Cjwvc2NyaXB0PgoKCgoKCgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdGYtZ3JhcGgtY29tbW9uL21pbmltYXAuanMKKGZ1bmN0aW9uKGEpeyhmdW5jdGlvbihjKXtjbGFzcyBke2NvbnN0cnVjdG9yKGYsZyxsLGssbSxwKXt0aGlzLnN2Zz1mO3RoaXMubGFiZWxQYWRkaW5nPXA7dGhpcy56b29tRz1nO3RoaXMubWFpblpvb209bDt0aGlzLm1heFdhbmRIPW07Zj1kMy5zZWxlY3Qoay5zaGFkb3dSb290KTtsZXQgcT1mLnNlbGVjdCgic3ZnIikscj1xLnNlbGVjdCgicmVjdCIpO3RoaXMudmlld3BvaW50Q29vcmQ9e3g6MCx5OjB9O2c9ZDMuZHJhZygpLnN1YmplY3QoT2JqZWN0KS5vbigiZHJhZyIsKCk9Pnt0aGlzLnZpZXdwb2ludENvb3JkLng9ZDMuZXZlbnQueDt0aGlzLnZpZXdwb2ludENvb3JkLnk9ZDMuZXZlbnQueTt0aGlzLnVwZGF0ZVZpZXdwb2ludCgpfSk7ci5kYXR1bSh0aGlzLnZpZXdwb2ludENvb3JkKS5jYWxsKGcpO3Eub24oImNsaWNrIiwoKT0+e2lmKCFkMy5ldmVudC5kZWZhdWx0UHJldmVudGVkKXt2YXIgdD1OdW1iZXIoci5hdHRyKCJ3aWR0aCIpKSx2PU51bWJlcihyLmF0dHIoImhlaWdodCIpKSwKQT1kMy5tb3VzZShxLm5vZGUoKSk7dGhpcy52aWV3cG9pbnRDb29yZC54PUFbMF0tdC8yO3RoaXMudmlld3BvaW50Q29vcmQueT1BWzFdLXYvMjt0aGlzLnVwZGF0ZVZpZXdwb2ludCgpfX0pO3RoaXMudmlld3BvaW50PXIubm9kZSgpO3RoaXMubWluaW1hcFN2Zz1xLm5vZGUoKTt0aGlzLm1pbmltYXA9azt0aGlzLmNhbnZhcz1mLnNlbGVjdCgiY2FudmFzLmZpcnN0Iikubm9kZSgpO3RoaXMuY2FudmFzQnVmZmVyPWYuc2VsZWN0KCJjYW52YXMuc2Vjb25kIikubm9kZSgpO3RoaXMuZG93bmxvYWRDYW52YXM9Zi5zZWxlY3QoImNhbnZhcy5kb3dubG9hZCIpLm5vZGUoKTtkMy5zZWxlY3QodGhpcy5kb3dubG9hZENhbnZhcykuc3R5bGUoImRpc3BsYXkiLCJub25lIik7dGhpcy51cGRhdGUoKX11cGRhdGVWaWV3cG9pbnQoKXtkMy5zZWxlY3QodGhpcy52aWV3cG9pbnQpLmF0dHIoIngiLHRoaXMudmlld3BvaW50Q29vcmQueCkuYXR0cigieSIsdGhpcy52aWV3cG9pbnRDb29yZC55KTtsZXQgZj0KLXRoaXMudmlld3BvaW50Q29vcmQueCp0aGlzLnNjYWxlTWFpbi90aGlzLnNjYWxlTWluaW1hcCxnPS10aGlzLnZpZXdwb2ludENvb3JkLnkqdGhpcy5zY2FsZU1haW4vdGhpcy5zY2FsZU1pbmltYXA7ZDMuc2VsZWN0KHRoaXMuc3ZnKS5jYWxsKHRoaXMubWFpblpvb20udHJhbnNmb3JtLGQzLnpvb21JZGVudGl0eS50cmFuc2xhdGUoZixnKS5zY2FsZSh0aGlzLnNjYWxlTWFpbikpfXVwZGF0ZSgpe2xldCBmPW51bGw7dHJ5e2lmKGY9dGhpcy56b29tRy5nZXRCQm94KCksMD09PWYud2lkdGgpcmV0dXJufWNhdGNoKHQpe3JldHVybn12YXIgZz1kMy5zZWxlY3QoIiNncmFwaGRvd25sb2FkIik7dGhpcy5kb3dubG9hZD1nLm5vZGUoKTtnLm9uKCJjbGljayIsKCk9PntVUkwucmV2b2tlT2JqZWN0VVJMKHRoaXMuZG93bmxvYWQuaHJlZik7dmFyIHQ9dGhpcy5kb3dubG9hZENhbnZhcy50b0RhdGFVUkwoImltYWdlL3BuZyIpO2NvbnN0IHY9dC5zbGljZSgwLHQuaW5kZXhPZigiLCIpKTtpZih2LmVuZHNXaXRoKCI7YmFzZTY0Iikpe3ZhciBBPQphdG9iKHQuc2xpY2UodC5pbmRleE9mKCIsIikrMSkpO3Q9KG5ldyBVaW50OEFycmF5KEEubGVuZ3RoKSkubWFwKCh5LHgpPT5BLmNoYXJDb2RlQXQoeCkpO3RoaXMuZG93bmxvYWQuaHJlZj1VUkwuY3JlYXRlT2JqZWN0VVJMKG5ldyBCbG9iKFt0XSx7dHlwZToiaW1hZ2UvcG5nIn0pKX1lbHNlIGNvbnNvbGUud2Fybihgbm9uLWJhc2U2NCBkYXRhIFVSTCAoJHt2fSk7IGNhbm5vdCB1c2UgYmxvYiBkb3dubG9hZGApLHRoaXMuZG93bmxvYWQuaHJlZj10fSk7Zz1kMy5zZWxlY3QodGhpcy5zdmcpO3ZhciBsPSIiLGs9dGhpcy5zdmc7az0oay5nZXRSb290Tm9kZT9rLmdldFJvb3ROb2RlKCk6dGhpcy5zdmcucGFyZW50Tm9kZSkuc3R5bGVTaGVldHM7Zm9yKHZhciBtPTA7bTxrLmxlbmd0aDttKyspdHJ5e3ZhciBwPWtbbV0uY3NzUnVsZXN8fGtbbV0ucnVsZXM7aWYobnVsbCE9cClmb3IobGV0IHQ9MDt0PHAubGVuZ3RoO3QrKylsKz1wW3RdLmNzc1RleHQucmVwbGFjZSgvID90Zi1bXHctXSsgPy9nLAoiIikrIlxuIn1jYXRjaCh0KXtpZigiU2VjdXJpdHlFcnJvciIhPT10Lm5hbWUpdGhyb3cgdDt9cD1nLmFwcGVuZCgic3R5bGUiKTtwLnRleHQobCk7bD1kMy5zZWxlY3QodGhpcy56b29tRyk7az1sLmF0dHIoInRyYW5zZm9ybSIpO2wuYXR0cigidHJhbnNmb3JtIixudWxsKTtmLmhlaWdodCs9Zi55O2Yud2lkdGgrPWYueDtmLmhlaWdodCs9Mip0aGlzLmxhYmVsUGFkZGluZztmLndpZHRoKz0yKnRoaXMubGFiZWxQYWRkaW5nO2cuYXR0cigid2lkdGgiLGYud2lkdGgpLmF0dHIoImhlaWdodCIsZi5oZWlnaHQpO3RoaXMuc2NhbGVNaW5pbWFwPXRoaXMubWF4V2FuZEgvTWF0aC5tYXgoZi53aWR0aCxmLmhlaWdodCk7dGhpcy5taW5pbWFwU2l6ZT17d2lkdGg6Zi53aWR0aCp0aGlzLnNjYWxlTWluaW1hcCxoZWlnaHQ6Zi5oZWlnaHQqdGhpcy5zY2FsZU1pbmltYXB9O2QzLnNlbGVjdCh0aGlzLm1pbmltYXBTdmcpLmF0dHIodGhpcy5taW5pbWFwU2l6ZSk7ZDMuc2VsZWN0KHRoaXMuY2FudmFzQnVmZmVyKS5hdHRyKHRoaXMubWluaW1hcFNpemUpOwptPWQzLnNlbGVjdCh0aGlzLmRvd25sb2FkQ2FudmFzKTttLnN0eWxlKCJ3aWR0aCIsZi53aWR0aCk7bS5zdHlsZSgiaGVpZ2h0IixmLmhlaWdodCk7bS5hdHRyKCJ3aWR0aCIsMypmLndpZHRoKTttLmF0dHIoImhlaWdodCIsMypmLmhlaWdodCk7bnVsbCE9dGhpcy50cmFuc2xhdGUmJm51bGwhPXRoaXMuem9vbSYmcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT50aGlzLnpvb20oKSk7bGV0IHE9KG5ldyBYTUxTZXJpYWxpemVyKS5zZXJpYWxpemVUb1N0cmluZyh0aGlzLnN2Zyk7cC5yZW1vdmUoKTtnLmF0dHIoIndpZHRoIixudWxsKS5hdHRyKCJoZWlnaHQiLG51bGwpO2wuYXR0cigidHJhbnNmb3JtIixrKTtsZXQgcj1uZXcgSW1hZ2U7ci5vbmxvYWQ9KCk9Pnt2YXIgdD10aGlzLmNhbnZhc0J1ZmZlci5nZXRDb250ZXh0KCIyZCIpO3QuY2xlYXJSZWN0KDAsMCx0aGlzLmNhbnZhc0J1ZmZlci53aWR0aCx0aGlzLmNhbnZhc0J1ZmZlci5oZWlnaHQpO3QuZHJhd0ltYWdlKHIsMCwwLHRoaXMubWluaW1hcFNpemUud2lkdGgsCnRoaXMubWluaW1hcFNpemUuaGVpZ2h0KTtyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PntkMy5zZWxlY3QodGhpcy5jYW52YXNCdWZmZXIpLnN0eWxlKCJkaXNwbGF5IixudWxsKTtkMy5zZWxlY3QodGhpcy5jYW52YXMpLnN0eWxlKCJkaXNwbGF5Iiwibm9uZSIpO1t0aGlzLmNhbnZhcyx0aGlzLmNhbnZhc0J1ZmZlcl09W3RoaXMuY2FudmFzQnVmZmVyLHRoaXMuY2FudmFzXX0pO3Q9dGhpcy5kb3dubG9hZENhbnZhcy5nZXRDb250ZXh0KCIyZCIpO3QuY2xlYXJSZWN0KDAsMCx0aGlzLmRvd25sb2FkQ2FudmFzLndpZHRoLHRoaXMuZG93bmxvYWRDYW52YXMuaGVpZ2h0KTt0LmRyYXdJbWFnZShyLDAsMCx0aGlzLmRvd25sb2FkQ2FudmFzLndpZHRoLHRoaXMuZG93bmxvYWRDYW52YXMuaGVpZ2h0KX07ci5vbmVycm9yPSgpPT57ci5zcmM9VVJMLmNyZWF0ZU9iamVjdFVSTChuZXcgQmxvYihbcV0se3R5cGU6ImltYWdlL3N2Zyt4bWw7Y2hhcnNldFx4M2R1dGYtOCJ9KSl9O3Iuc3JjPQoiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXRceDNkdXRmLTgsIitlbmNvZGVVUklDb21wb25lbnQocSl9em9vbShmKXtpZihudWxsIT10aGlzLnNjYWxlTWluaW1hcCl7ZiYmKHRoaXMudHJhbnNsYXRlPVtmLngsZi55XSx0aGlzLnNjYWxlTWFpbj1mLmspO3ZhciBnPXRoaXMuc3ZnLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGw9ZDMuc2VsZWN0KHRoaXMudmlld3BvaW50KTt0aGlzLnZpZXdwb2ludENvb3JkLng9LXRoaXMudHJhbnNsYXRlWzBdKnRoaXMuc2NhbGVNaW5pbWFwL3RoaXMuc2NhbGVNYWluO3RoaXMudmlld3BvaW50Q29vcmQueT0tdGhpcy50cmFuc2xhdGVbMV0qdGhpcy5zY2FsZU1pbmltYXAvdGhpcy5zY2FsZU1haW47Zj1nLndpZHRoKnRoaXMuc2NhbGVNaW5pbWFwL3RoaXMuc2NhbGVNYWluO2c9Zy5oZWlnaHQqdGhpcy5zY2FsZU1pbmltYXAvdGhpcy5zY2FsZU1haW47bC5hdHRyKCJ4Iix0aGlzLnZpZXdwb2ludENvb3JkLngpLmF0dHIoInkiLHRoaXMudmlld3BvaW50Q29vcmQueSkuYXR0cigid2lkdGgiLApmKS5hdHRyKCJoZWlnaHQiLGcpO2w9dGhpcy5taW5pbWFwU2l6ZS53aWR0aDt2YXIgaz10aGlzLm1pbmltYXBTaXplLmhlaWdodCxtPXRoaXMudmlld3BvaW50Q29vcmQueCxwPXRoaXMudmlld3BvaW50Q29vcmQueTsuOD4oTWF0aC5taW4oTWF0aC5tYXgoMCxtK2YpLGwpLU1hdGgubWluKE1hdGgubWF4KDAsbSksbCkpKihNYXRoLm1pbihNYXRoLm1heCgwLHArZyksayktTWF0aC5taW4oTWF0aC5tYXgoMCxwKSxrKSkvKGwqayk/dGhpcy5taW5pbWFwLmNsYXNzTGlzdC5yZW1vdmUoImhpZGRlbiIpOnRoaXMubWluaW1hcC5jbGFzc0xpc3QuYWRkKCJoaWRkZW4iKX19fWMuTWluaW1hcD1kfSkoYS5zY2VuZXx8KGEuc2NlbmU9e30pKX0pKHRmfHwodGY9e30pKTsKPC9zY3JpcHQ+Cgo8ZG9tLW1vZHVsZSBpZD0idGYtZ3JhcGgtbWluaW1hcCI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7CiAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjNzIGxpbmVhcjsKICAgICAgICBwb2ludGVyLWV2ZW50czogYXV0bzsKICAgICAgfQoKICAgICAgOmhvc3QoLmhpZGRlbikgewogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIH0KCiAgICAgIGNhbnZhcyB7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgIzk5OTsKICAgICAgfQoKICAgICAgcmVjdCB7CiAgICAgICAgZmlsbDogd2hpdGU7CiAgICAgICAgc3Ryb2tlOiAjMTExMTExOwogICAgICAgIHN0cm9rZS13aWR0aDogMXB4OwogICAgICAgIGZpbGwtb3BhY2l0eTogMDsKICAgICAgICBmaWx0ZXI6IHVybCgjbWluaW1hcERyb3BTaGFkb3cpOwogICAgICAgIGN1cnNvcjogbW92ZTsKICAgICAgfQoKICAgICAgc3ZnIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8c3ZnPgogICAgICA8ZGVmcz4KICAgICAgICA8ZmlsdGVyIGlkPSJtaW5pbWFwRHJvcFNoYWRvdyIgeD0iLTIwJSIgeT0iLTIwJSIgd2lkdGg9IjE1MCUiIGhlaWdodD0iMTUwJSI+CiAgICAgICAgICA8ZmVvZmZzZXQgcmVzdWx0PSJvZmZPdXQiIGluPSJTb3VyY2VHcmFwaGljIiBkeD0iMSIgZHk9IjEiPjwvZmVvZmZzZXQ+CiAgICAgICAgICA8ZmVjb2xvcm1hdHJpeCByZXN1bHQ9Im1hdHJpeE91dCIgaW49Im9mZk91dCIgdHlwZT0ibWF0cml4IiB2YWx1ZXM9IjAuMSAwIDAgMCAwIDAgMC4xIDAgMCAwIDAgMCAwLjEgMCAwIDAgMCAwIDAuNSAwIj48L2ZlY29sb3JtYXRyaXg+CiAgICAgICAgICA8ZmVnYXVzc2lhbmJsdXIgcmVzdWx0PSJibHVyT3V0IiBpbj0ibWF0cml4T3V0IiBzdGRkZXZpYXRpb249IjIiPjwvZmVnYXVzc2lhbmJsdXI+CiAgICAgICAgICA8ZmVibGVuZCBpbj0iU291cmNlR3JhcGhpYyIgaW4yPSJibHVyT3V0IiBtb2RlPSJub3JtYWwiPjwvZmVibGVuZD4KICAgICAgICA8L2ZpbHRlcj4KICAgICAgPC9kZWZzPgogICAgICA8cmVjdD48L3JlY3Q+CiAgICA8L3N2Zz4KICAgIDxjYW52YXMgY2xhc3M9ImZpcnN0Ij48L2NhbnZhcz4KICAgIAogICAgPGNhbnZhcyBjbGFzcz0ic2Vjb25kIj48L2NhbnZhcz4KICAgIDxjYW52YXMgY2xhc3M9ImRvd25sb2FkIj48L2NhbnZhcz4KICA8L3RlbXBsYXRlPgogIDxzY3JpcHQ+Ly9+fldFQlBBVEh+fi90Zi1ncmFwaC90Zi1ncmFwaC1taW5pbWFwLmh0bWwuanMKUG9seW1lcih7aXM6InRmLWdyYXBoLW1pbmltYXAiLGluaXQ6ZnVuY3Rpb24oYSxjLGQsZixnKXtyZXR1cm4gbmV3IHRmLnNjZW5lLk1pbmltYXAoYSxjLGQsdGhpcyxmLGcpfX0pOwo8L3NjcmlwdD4KPC9kb20tbW9kdWxlPgoKCgo8ZG9tLW1vZHVsZSBpZD0idGYtZ3JhcGgtc2NlbmUiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZm9udC1zaXplOiAyMHB4OwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgI3N2ZyB7CiAgICAgICAgZmxleDogMTsKICAgICAgICBmb250LWZhbWlseTogUm9ib3RvLCBzYW5zLXNlcmlmOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAjaGlkZGVuIHsKICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgICAgdG9wOiAwcHg7CiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuOwogICAgICB9CgogICAgICAvKiAtLS0gTm9kZSBhbmQgYW5ub3RhdGlvbi1ub2RlIGZvciBNZXRhbm9kZSAtLS0gKi8KCiAgICAgIC5tZXRhID4gLm5vZGVzaGFwZSA+IHJlY3QsCiAgICAgIC5tZXRhID4gLmFubm90YXRpb24tbm9kZSA+IHJlY3QgewogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBmaWxsOiBoc2woMCwgMCUsIDcwJSk7CiAgICAgIH0KICAgICAgLm5vZGUubWV0YS5oaWdobGlnaHRlZCA+IC5ub2Rlc2hhcGUgPiByZWN0LAogICAgICAubm9kZS5tZXRhLmhpZ2hsaWdodGVkID4gLmFubm90YXRpb24tbm9kZSA+IHJlY3QgewogICAgICAgIHN0cm9rZS13aWR0aDogMjsKICAgICAgfQogICAgICAuYW5ub3RhdGlvbi5tZXRhLmhpZ2hsaWdodGVkID4gLm5vZGVzaGFwZSA+IHJlY3QsCiAgICAgIC5hbm5vdGF0aW9uLm1ldGEuaGlnaGxpZ2h0ZWQgPiAuYW5ub3RhdGlvbi1ub2RlID4gcmVjdCB7CiAgICAgICAgc3Ryb2tlLXdpZHRoOiAxOwogICAgICB9CiAgICAgIC5tZXRhLnNlbGVjdGVkID4gLm5vZGVzaGFwZSA+IHJlY3QsCiAgICAgIC5tZXRhLnNlbGVjdGVkID4gLmFubm90YXRpb24tbm9kZSA+IHJlY3QgewogICAgICAgIHN0cm9rZTogcmVkOwogICAgICAgIHN0cm9rZS13aWR0aDogMjsKICAgICAgfQogICAgICAubm9kZS5tZXRhLnNlbGVjdGVkLmV4cGFuZGVkID4gLm5vZGVzaGFwZSA+IHJlY3QsCiAgICAgIC5ub2RlLm1ldGEuc2VsZWN0ZWQuZXhwYW5kZWQgPiAuYW5ub3RhdGlvbi1ub2RlID4gcmVjdCB7CiAgICAgICAgc3Ryb2tlOiByZWQ7CiAgICAgICAgc3Ryb2tlLXdpZHRoOiAzOwogICAgICB9CiAgICAgIC5hbm5vdGF0aW9uLm1ldGEuc2VsZWN0ZWQgPiAubm9kZXNoYXBlID4gcmVjdCwKICAgICAgLmFubm90YXRpb24ubWV0YS5zZWxlY3RlZCA+IC5hbm5vdGF0aW9uLW5vZGUgPiByZWN0IHsKICAgICAgICBzdHJva2U6IHJlZDsKICAgICAgICBzdHJva2Utd2lkdGg6IDI7CiAgICAgIH0KICAgICAgLm5vZGUubWV0YS5zZWxlY3RlZC5leHBhbmRlZC5oaWdobGlnaHRlZCA+IC5ub2Rlc2hhcGUgPiByZWN0LAogICAgICAubm9kZS5tZXRhLnNlbGVjdGVkLmV4cGFuZGVkLmhpZ2hsaWdodGVkID4gLmFubm90YXRpb24tbm9kZSA+IHJlY3QgewogICAgICAgIHN0cm9rZTogcmVkOwogICAgICAgIHN0cm9rZS13aWR0aDogNDsKICAgICAgfQoKICAgICAgLmZhZGVkLAogICAgICAuZmFkZWQgcmVjdCwKICAgICAgLmZhZGVkIGVsbGlwc2UsCiAgICAgIC5mYWRlZCBwYXRoLAogICAgICAuZmFkZWQgdXNlLAogICAgICAjcmVjdEhhdGNoIGxpbmUsCiAgICAgICNlbGxpcHNlSGF0Y2ggbGluZSB7CiAgICAgICAgY29sb3I6ICNlMGQ0YjMgIWltcG9ydGFudDsKICAgICAgICBmaWxsOiB3aGl0ZTsKICAgICAgICBzdHJva2U6ICNlMGQ0YjMgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgLmZhZGVkIHBhdGggewogICAgICAgIHN0cm9rZS13aWR0aDogMXB4ICFpbXBvcnRhbnQ7CiAgICAgIH0KCiAgICAgIC5mYWRlZCByZWN0IHsKICAgICAgICBmaWxsOiB1cmwoI3JlY3RIYXRjaCkgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgLmZhZGVkIGVsbGlwc2UsCiAgICAgIC5mYWRlZCB1c2UgewogICAgICAgIGZpbGw6IHVybCgjZWxsaXBzZUhhdGNoKSAhaW1wb3J0YW50OwogICAgICB9CgogICAgICAuZmFkZWQgdGV4dCB7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgfQoKICAgICAgLyogUnVsZXMgdXNlZCBmb3IgaW5wdXQtdHJhY2luZy4gKi8KICAgICAgLmlucHV0LWhpZ2hsaWdodCA+ICogPiByZWN0LAogICAgICAuaW5wdXQtaGlnaGxpZ2h0ID4gKiA+IGVsbGlwc2UsCiAgICAgIC5pbnB1dC1oaWdobGlnaHQgPiAqID4gdXNlIHsKICAgICAgICBmaWxsOiB3aGl0ZTsKICAgICAgICBzdHJva2U6ICNmZjk4MDAgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgLyogIC0gRmFkZWQgbm9uLWlucHV0IHN0eWxpbmcgKi8KICAgICAgLm5vbi1pbnB1dCA+ICogPiByZWN0LAoubm9uLWlucHV0ID4gKiA+IGVsbGlwc2UsCi5ub24taW5wdXQgPiAqID4gdXNlLAovKiBGb3IgQ29uc3Qgbm9kZXMuICovCi5ub24taW5wdXQgPiAqID4gLmNvbnN0YW50Om5vdChbY2xhc3MqPSJpbnB1dC1oaWdobGlnaHQiXSkgPgogIC5hbm5vdGF0aW9uLW5vZGUgPiBlbGxpcHNlLAovKiBGb3Igc3R5bGluZyBvZiBhbm5vdGF0aW9uIG5vZGVzIG9mIG5vbi1pbnB1dCBub2Rlcy4gKi8KLm5vbi1pbnB1dCA+IGcgPiAuYW5ub3RhdGlvbiA+IC5hbm5vdGF0aW9uLW5vZGUgPiByZWN0IHsKICAgICAgICBzdHJva2U6ICNlMGQ0YjMgIWltcG9ydGFudDsKICAgICAgICBzdHJva2Utd2lkdGg6IGluaGVyaXQ7CiAgICAgICAgc3Ryb2tlLWRhc2hhcnJheTogaW5oZXJpdDsKICAgICAgfQoKICAgICAgLm5vbi1pbnB1dCBwYXRoIHsKICAgICAgICB2aXNpYmlsaXR5OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC5ub24taW5wdXQgPiAubm9kZXNoYXBlID4gcmVjdCwKLm5vbi1pbnB1dCA+IC5hbm5vdGF0aW9uLW5vZGUgPiByZWN0LAovKiBGb3Igc3R5bGluZyBvZiBhbm5vdGF0aW9uIG5vZGVzIG9mIG5vbi1pbnB1dCBub2Rlcy4gKi8KLm5vbi1pbnB1dCA+IGcgPiAuYW5ub3RhdGlvbiA+IC5hbm5vdGF0aW9uLW5vZGUgPiByZWN0IHsKICAgICAgICBmaWxsOiB1cmwoI3JlY3RIYXRjaCkgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgLm5vbi1pbnB1dCBlbGxpcHNlLAogICAgICAubm9uLWlucHV0IHVzZSB7CiAgICAgICAgZmlsbDogdXJsKCNlbGxpcHNlSGF0Y2gpICFpbXBvcnRhbnQ7CiAgICAgIH0KCiAgICAgIC5ub24taW5wdXQgPiB0ZXh0IHsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICB9CgogICAgICAubm9uLWlucHV0IC5hbm5vdGF0aW9uID4gLmFubm90YXRpb24tZWRnZSB7CiAgICAgICAgbWFya2VyLWVuZDogdXJsKCNhbm5vdGF0aW9uLWFycm93aGVhZC1mYWRlZCk7CiAgICAgIH0KCiAgICAgIC5ub24taW5wdXQgLmFubm90YXRpb24gPiAuYW5ub3RhdGlvbi1lZGdlLnJlZmxpbmUgewogICAgICAgIG1hcmtlci1zdGFydDogdXJsKCNyZWYtYW5ub3RhdGlvbi1hcnJvd2hlYWQtZmFkZWQpOwogICAgICB9CgogICAgICAvKiBJbnB1dCBlZGdlcy4gKi8KICAgICAgLmlucHV0LWVkZ2UtaGlnaGxpZ2h0ID4gdGV4dCB7CiAgICAgICAgZmlsbDogYmxhY2sgIWltcG9ydGFudDsKICAgICAgfQogICAgICAuaW5wdXQtaGlnaGxpZ2h0ID4gLmluLWFubm90YXRpb25zID4gLmFubm90YXRpb24gPiAuYW5ub3RhdGlvbi1lZGdlLAogICAgICAuaW5wdXQtaGlnaGxpZ2h0LXNlbGVjdGVkCiAgICAgICAgPiAuaW4tYW5ub3RhdGlvbnMKICAgICAgICA+IC5hbm5vdGF0aW9uCiAgICAgICAgPiAuYW5ub3RhdGlvbi1lZGdlIHsKICAgICAgICBzdHJva2U6ICM5OTkgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgLyogTm9uLWlucHV0IGVkZ2VzLiAqLwogICAgICAubm9uLWlucHV0LWVkZ2UtaGlnaGxpZ2h0LAoubm9uLWlucHV0ID4gZyA+IC5hbm5vdGF0aW9uID4gcGF0aCwKLyogQW5ub3RhdGlvbiBzdHlsZXMgKGxhYmVsIGFuZCBlZGdlcyByZXNwZWN0aXZlbHkpLiAqLwoubm9uLWlucHV0ID4gZyA+Ci5hbm5vdGF0aW9uOm5vdCguaW5wdXQtaGlnaGxpZ2h0KTpub3QoLmlucHV0LWhpZ2hsaWdodC1zZWxlY3RlZCkgPgouYW5ub3RhdGlvbi1sYWJlbAovKi5hbm5vdGF0aW9uLWVkZ2UqLwogewogICAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjsKICAgICAgfQoKICAgICAgLyogLS0tIE9wIE5vZGUgLS0tICovCgogICAgICAub3AgPiAubm9kZXNoYXBlID4gLm5vZGVjb2xvcnRhcmdldCwKICAgICAgLm9wID4gLmFubm90YXRpb24tbm9kZSA+IC5ub2RlY29sb3J0YXJnZXQgewogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBmaWxsOiAjZmZmOwogICAgICAgIHN0cm9rZTogI2NjYzsKICAgICAgfQoKICAgICAgLm9wLnNlbGVjdGVkID4gLm5vZGVzaGFwZSA+IC5ub2RlY29sb3J0YXJnZXQsCiAgICAgIC5vcC5zZWxlY3RlZCA+IC5hbm5vdGF0aW9uLW5vZGUgPiAubm9kZWNvbG9ydGFyZ2V0IHsKICAgICAgICBzdHJva2U6IHJlZDsKICAgICAgICBzdHJva2Utd2lkdGg6IDI7CiAgICAgIH0KCiAgICAgIC5vcC5oaWdobGlnaHRlZCA+IC5ub2Rlc2hhcGUgPiAubm9kZWNvbG9ydGFyZ2V0LAogICAgICAub3AuaGlnaGxpZ2h0ZWQgPiAuYW5ub3RhdGlvbi1ub2RlID4gLm5vZGVjb2xvcnRhcmdldCB7CiAgICAgICAgc3Ryb2tlLXdpZHRoOiAyOwogICAgICB9CgogICAgICAvKiAtLS0gU2VyaWVzIE5vZGUgLS0tICovCgogICAgICAvKiBCeSBkZWZhdWx0LCBkb24ndCBzaG93IHRoZSBzZXJpZXMgYmFja2dyb3VuZCA8cmVjdD4uICovCiAgICAgIC5zZXJpZXMgPiAubm9kZXNoYXBlID4gcmVjdCB7CiAgICAgICAgZmlsbDogaHNsKDAsIDAlLCA3MCUpOwogICAgICAgIGZpbGwtb3BhY2l0eTogMDsKICAgICAgICBzdHJva2UtZGFzaGFycmF5OiA1LCA1OwogICAgICAgIHN0cm9rZS1vcGFjaXR5OiAwOwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgfQoKICAgICAgLyogT25jZSBleHBhbmRlZCwgc2hvdyB0aGUgc2VyaWVzIGJhY2tncm91bmQgPHJlY3Q+IGFuZCBoaWRlIHRoZSA8dXNlPi4gKi8KICAgICAgLnNlcmllcy5leHBhbmRlZCA+IC5ub2Rlc2hhcGUgPiByZWN0IHsKICAgICAgICBmaWxsLW9wYWNpdHk6IDAuMTU7CiAgICAgICAgc3Ryb2tlOiBoc2woMCwgMCUsIDcwJSk7CiAgICAgICAgc3Ryb2tlLW9wYWNpdHk6IDE7CiAgICAgIH0KICAgICAgLnNlcmllcy5leHBhbmRlZCA+IC5ub2Rlc2hhcGUgPiB1c2UgewogICAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjsKICAgICAgfQoKICAgICAgLyoqCiAqIFRPRE86IFNpbXBsaWZ5IHRoaXMgYnkgYXBwbHlpbmcgYSBzdGFibGUgY2xhc3MgbmFtZSB0byBhbGwgPGc+CiAqIGVsZW1lbnRzIHRoYXQgY3VycmVudGx5IGhhdmUgZWl0aGVyIHRoZSBub2Rlc2hhcGUgb3IgYW5ub3RhdGlvbi1ub2RlIGNsYXNzZXMuCiAqLwogICAgICAuc2VyaWVzID4gLm5vZGVzaGFwZSA+IHVzZSwKICAgICAgLnNlcmllcyA+IC5hbm5vdGF0aW9uLW5vZGUgPiB1c2UgewogICAgICAgIHN0cm9rZTogI2NjYzsKICAgICAgfQogICAgICAuc2VyaWVzLmhpZ2hsaWdodGVkID4gLm5vZGVzaGFwZSA+IHVzZSwKICAgICAgLnNlcmllcy5oaWdobGlnaHRlZCA+IC5hbm5vdGF0aW9uLW5vZGUgPiB1c2UgewogICAgICAgIHN0cm9rZS13aWR0aDogMjsKICAgICAgfQogICAgICAuc2VyaWVzLnNlbGVjdGVkID4gLm5vZGVzaGFwZSA+IHVzZSwKICAgICAgLnNlcmllcy5zZWxlY3RlZCA+IC5hbm5vdGF0aW9uLW5vZGUgPiB1c2UgewogICAgICAgIHN0cm9rZTogcmVkOwogICAgICAgIHN0cm9rZS13aWR0aDogMjsKICAgICAgfQoKICAgICAgLnNlcmllcy5zZWxlY3RlZCA+IC5ub2Rlc2hhcGUgPiByZWN0IHsKICAgICAgICBzdHJva2U6IHJlZDsKICAgICAgICBzdHJva2Utd2lkdGg6IDI7CiAgICAgIH0KCiAgICAgIC5hbm5vdGF0aW9uLnNlcmllcy5zZWxlY3RlZCA+IC5hbm5vdGF0aW9uLW5vZGUgPiB1c2UgewogICAgICAgIHN0cm9rZTogcmVkOwogICAgICAgIHN0cm9rZS13aWR0aDogMjsKICAgICAgfQoKICAgICAgLyogLS0tIEJyaWRnZSBOb2RlIC0tLSAqLwogICAgICAuYnJpZGdlID4gLm5vZGVzaGFwZSA+IHJlY3QgewogICAgICAgIHN0cm9rZTogI2YwZjsKICAgICAgICBvcGFjaXR5OiAwLjI7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQoKICAgICAgLyogLS0tIFN0cnVjdHVyYWwgRWxlbWVudHMgLS0tICovCiAgICAgIC5lZGdlID4gcGF0aC5lZGdlbGluZS5zdHJ1Y3R1cmFsIHsKICAgICAgICBzdHJva2U6ICNmMGY7CiAgICAgICAgb3BhY2l0eTogMC4yOwogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KCiAgICAgIC8qIFJlZmVyZW5jZSBFZGdlICovCiAgICAgIC5lZGdlID4gcGF0aC5lZGdlbGluZS5yZWZlcmVuY2VlZGdlIHsKICAgICAgICBzdHJva2U6ICNmZmI3NGQ7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgfQoKICAgICAgLyogLS0tIFNlcmllcyBOb2RlcyAtLS0gKi8KCiAgICAgIC8qIEhpZGUgdGhlIHJlY3QgZm9yIGEgc2VyaWVzJyBhbm5vdGF0aW9uLiAqLwogICAgICAuc2VyaWVzID4gLmFubm90YXRpb24tbm9kZSA+IHJlY3QgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KCiAgICAgIC8qIC0tLSBOb2RlIGxhYmVsIC0tLSAqLwoKICAgICAgLm5vZGUgPiB0ZXh0Lm5vZGVsYWJlbCB7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIGZpbGw6ICM0NDQ7CiAgICAgIH0KCiAgICAgIC5tZXRhLmV4cGFuZGVkID4gdGV4dC5ub2RlbGFiZWwgewogICAgICAgIGZvbnQtc2l6ZTogOXB4OwogICAgICB9CgogICAgICAuc2VyaWVzID4gdGV4dC5ub2RlbGFiZWwgewogICAgICAgIGZvbnQtc2l6ZTogOHB4OwogICAgICB9CgogICAgICAub3AgPiB0ZXh0Lm5vZGVsYWJlbCB7CiAgICAgICAgZm9udC1zaXplOiA2cHg7CiAgICAgIH0KCiAgICAgIC5icmlkZ2UgPiB0ZXh0Lm5vZGVsYWJlbCB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQoKICAgICAgLm5vZGUubWV0YS5leHBhbmRlZCA+IHRleHQubm9kZWxhYmVsIHsKICAgICAgICBjdXJzb3I6IG5vcm1hbDsKICAgICAgfQoKICAgICAgLmFubm90YXRpb24ubWV0YS5oaWdobGlnaHRlZCA+IHRleHQuYW5ub3RhdGlvbi1sYWJlbCB7CiAgICAgICAgZmlsbDogIzUwYTNmNzsKICAgICAgfQoKICAgICAgLmFubm90YXRpb24ubWV0YS5zZWxlY3RlZCA+IHRleHQuYW5ub3RhdGlvbi1sYWJlbCB7CiAgICAgICAgZmlsbDogIzQyODVmNDsKICAgICAgfQoKICAgICAgLyogLS0tIEFubm90YXRpb24gLS0tICovCgogICAgICAvKiBvbmx5IGFwcGxpZWQgZm9yIGFubm90YXRpb25zIHRoYXQgYXJlIG5vdCBzdW1tYXJ5IG9yIGNvbnN0YW50LgooLnN1bW1hcnksIC5jb25zdGFudCBnZXRzIG92ZXJyaWRkZW4gYmVsb3cpICovCiAgICAgIC5hbm5vdGF0aW9uID4gLmFubm90YXRpb24tbm9kZSA+ICogewogICAgICAgIHN0cm9rZS13aWR0aDogMC41OwogICAgICAgIHN0cm9rZS1kYXNoYXJyYXk6IDEsIDE7CiAgICAgIH0KCiAgICAgIC5hbm5vdGF0aW9uLnN1bW1hcnkgPiAuYW5ub3RhdGlvbi1ub2RlID4gKiwKICAgICAgLmFubm90YXRpb24uY29uc3RhbnQgPiAuYW5ub3RhdGlvbi1ub2RlID4gKiB7CiAgICAgICAgc3Ryb2tlLXdpZHRoOiAxOwogICAgICAgIHN0cm9rZS1kYXNoYXJyYXk6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5hbm5vdGF0aW9uID4gLmFubm90YXRpb24tZWRnZSB7CiAgICAgICAgZmlsbDogbm9uZTsKICAgICAgICBzdHJva2U6ICNhYWE7CiAgICAgICAgc3Ryb2tlLXdpZHRoOiAwLjU7CiAgICAgICAgbWFya2VyLWVuZDogdXJsKCNhbm5vdGF0aW9uLWFycm93aGVhZCk7CiAgICAgIH0KCiAgICAgIC5mYWRlZCAuYW5ub3RhdGlvbiA+IC5hbm5vdGF0aW9uLWVkZ2UgewogICAgICAgIG1hcmtlci1lbmQ6IHVybCgjYW5ub3RhdGlvbi1hcnJvd2hlYWQtZmFkZWQpOwogICAgICB9CgogICAgICAuYW5ub3RhdGlvbiA+IC5hbm5vdGF0aW9uLWVkZ2UucmVmbGluZSB7CiAgICAgICAgbWFya2VyLXN0YXJ0OiB1cmwoI3JlZi1hbm5vdGF0aW9uLWFycm93aGVhZCk7CiAgICAgIH0KCiAgICAgIC5mYWRlZCAuYW5ub3RhdGlvbiA+IC5hbm5vdGF0aW9uLWVkZ2UucmVmbGluZSB7CiAgICAgICAgbWFya2VyLXN0YXJ0OiB1cmwoI3JlZi1hbm5vdGF0aW9uLWFycm93aGVhZC1mYWRlZCk7CiAgICAgIH0KCiAgICAgIC5hbm5vdGF0aW9uID4gLmFubm90YXRpb24tY29udHJvbC1lZGdlIHsKICAgICAgICBzdHJva2UtZGFzaGFycmF5OiAxLCAxOwogICAgICB9CgogICAgICAjYW5ub3RhdGlvbi1hcnJvd2hlYWQgewogICAgICAgIGZpbGw6ICNhYWE7CiAgICAgIH0KCiAgICAgICNhbm5vdGF0aW9uLWFycm93aGVhZC1mYWRlZCB7CiAgICAgICAgZmlsbDogI2UwZDRiMzsKICAgICAgfQoKICAgICAgI3JlZi1hbm5vdGF0aW9uLWFycm93aGVhZCB7CiAgICAgICAgZmlsbDogI2FhYTsKICAgICAgfQoKICAgICAgI3JlZi1hbm5vdGF0aW9uLWFycm93aGVhZC1mYWRlZCB7CiAgICAgICAgZmlsbDogI2UwZDRiMzsKICAgICAgfQoKICAgICAgLmFubm90YXRpb24gPiAuYW5ub3RhdGlvbi1sYWJlbCB7CiAgICAgICAgZm9udC1zaXplOiA1cHg7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICB9CiAgICAgIC5hbm5vdGF0aW9uID4gLmFubm90YXRpb24tbGFiZWwuYW5ub3RhdGlvbi1lbGxpcHNpcyB7CiAgICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICB9CgogICAgICAvKiBIaWRlIGFubm90YXRpb25zIG9uIGV4cGFuZGVkIG1ldGEgbm9kZXMgc2luY2UgdGhleSdyZSByZWR1bmRhbnQuICovCiAgICAgIC5leHBhbmRlZCA+IC5pbi1hbm5vdGF0aW9ucywKICAgICAgLmV4cGFuZGVkID4gLm91dC1hbm5vdGF0aW9ucyB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQoKICAgICAgLyogLS0tIEFubm90YXRpb246IENvbnN0YW50IC0tLSAqLwoKICAgICAgLmNvbnN0YW50ID4gLmFubm90YXRpb24tbm9kZSA+IGVsbGlwc2UgewogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBmaWxsOiB3aGl0ZTsKICAgICAgICBzdHJva2U6ICM4NDg0ODQ7CiAgICAgIH0KCiAgICAgIC5jb25zdGFudC5zZWxlY3RlZCA+IC5hbm5vdGF0aW9uLW5vZGUgPiBlbGxpcHNlIHsKICAgICAgICBmaWxsOiB3aGl0ZTsKICAgICAgICBzdHJva2U6IHJlZDsKICAgICAgfQoKICAgICAgLmNvbnN0YW50LmhpZ2hsaWdodGVkID4gLmFubm90YXRpb24tbm9kZSA+IGVsbGlwc2UgewogICAgICAgIHN0cm9rZS13aWR0aDogMS41OwogICAgICB9CgogICAgICAvKiAtLS0gQW5ub3RhdGlvbjogU3VtbWFyeSAtLS0gKi8KCiAgICAgIC5zdW1tYXJ5ID4gLmFubm90YXRpb24tbm9kZSA+IGVsbGlwc2UgewogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBmaWxsOiAjZGI0NDM3OwogICAgICAgIHN0cm9rZTogI2RiNDQzNzsKICAgICAgfQoKICAgICAgLnN1bW1hcnkuc2VsZWN0ZWQgPiAuYW5ub3RhdGlvbi1ub2RlID4gZWxsaXBzZSB7CiAgICAgICAgZmlsbDogI2E1MjcxNDsKICAgICAgICBzdHJva2U6ICNhNTI3MTQ7CiAgICAgIH0KCiAgICAgIC5zdW1tYXJ5LmhpZ2hsaWdodGVkID4gLmFubm90YXRpb24tbm9kZSA+IGVsbGlwc2UgewogICAgICAgIHN0cm9rZS13aWR0aDogMS41OwogICAgICB9CgogICAgICAvKiAtLS0gRWRnZSAtLS0gKi8KCiAgICAgIC5lZGdlID4gcGF0aC5lZGdlbGluZSB7CiAgICAgICAgZmlsbDogbm9uZTsKICAgICAgICBzdHJva2U6ICNiYmI7CiAgICAgICAgc3Ryb2tlLWxpbmVjYXA6IHJvdW5kOwogICAgICAgIHN0cm9rZS13aWR0aDogMC43NTsKICAgICAgfQoKICAgICAgLmVkZ2UgLnNlbGVjdGFibGVlZGdlIHsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgIH0KCiAgICAgIC5zZWxlY3RlZGVkZ2UgPiBwYXRoLmVkZ2VsaW5lIHsKICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICAgICAgc3Ryb2tlOiAjZjAwOwogICAgICB9CgogICAgICAuZWRnZS5zZWxlY3RlZGVkZ2UgdGV4dCB7CiAgICAgICAgZmlsbDogIzAwMDsKICAgICAgfQoKICAgICAgLyogTGFiZWxzIHNob3dpbmcgdGVuc29yIHNoYXBlcyBvbiBlZGdlcyAqLwogICAgICAuZWRnZSA+IHRleHQgewogICAgICAgIGZvbnQtc2l6ZTogMy41cHg7CiAgICAgICAgZmlsbDogIzY2NjsKICAgICAgfQoKICAgICAgLmRhdGFmbG93LWFycm93aGVhZCB7CiAgICAgICAgZmlsbDogI2JiYjsKICAgICAgfQoKICAgICAgLnJlZmVyZW5jZS1hcnJvd2hlYWQgewogICAgICAgIGZpbGw6ICNmZmI3NGQ7CiAgICAgIH0KCiAgICAgIC5zZWxlY3RlZC1hcnJvd2hlYWQgewogICAgICAgIGZpbGw6ICNmMDA7CiAgICAgIH0KCiAgICAgIC5lZGdlIC5jb250cm9sLWRlcCB7CiAgICAgICAgc3Ryb2tlLWRhc2hhcnJheTogMiwgMjsKICAgICAgfQoKICAgICAgLyogLS0tIEdyb3VwIG5vZGUgZXhwYW5kL2NvbGxhcHNlIGJ1dHRvbiAtLS0gKi8KCiAgICAgIC8qIEhpZGVzIGV4cGFuZC9jb2xsYXBzZSBidXR0b25zIHdoZW4gYSBub2RlIGlzbid0IGV4cGFuZGVkIG9yIGhpZ2hsaWdodGVkLiBVc2luZwogICBpbmNyZWRpYmx5IHNtYWxsIG9wYWNpdHkgc28gdGhhdCB0aGUgYm91bmRpbmcgYm94IG9mIHRoZSA8Zz4gcGFyZW50IHN0aWxsIHRha2VzCiAgIHRoaXMgY29udGFpbmVyIGludG8gYWNjb3VudCBldmVuIHdoZW4gaXQgaXNuJ3QgdmlzaWJsZSAqLwogICAgICAubm9kZTpub3QoLmhpZ2hsaWdodGVkKTpub3QoLmV4cGFuZGVkKSA+IC5ub2Rlc2hhcGUgPiAuYnV0dG9uY29udGFpbmVyIHsKICAgICAgICBvcGFjaXR5OiAwLjAxOwogICAgICB9CiAgICAgIC5ub2RlLmhpZ2hsaWdodGVkID4gLm5vZGVzaGFwZSA+IC5idXR0b25jb250YWluZXIgewogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgfQogICAgICAuYnV0dG9uY2lyY2xlIHsKICAgICAgICBmaWxsOiAjZTc4MTFkOwogICAgICB9CiAgICAgIC5idXR0b25jaXJjbGU6aG92ZXIgewogICAgICAgIGZpbGw6ICNiOTY3MTc7CiAgICAgIH0KICAgICAgLmV4cGFuZGJ1dHRvbiwKICAgICAgLmNvbGxhcHNlYnV0dG9uIHsKICAgICAgICBzdHJva2U6IHdoaXRlOwogICAgICB9CiAgICAgIC8qIERvIG5vdCBsZXQgdGhlIHBhdGggZWxlbWVudHMgaW4gdGhlIGJ1dHRvbiB0YWtlIHBvaW50ZXIgZm9jdXMgKi8KICAgICAgLm5vZGUgPiAubm9kZXNoYXBlID4gLmJ1dHRvbmNvbnRhaW5lciA+IC5leHBhbmRidXR0b24sCiAgICAgIC5ub2RlID4gLm5vZGVzaGFwZSA+IC5idXR0b25jb250YWluZXIgPiAuY29sbGFwc2VidXR0b24gewogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CiAgICAgIC8qIE9ubHkgc2hvdyB0aGUgZXhwYW5kIGJ1dHRvbiB3aGVuIGEgbm9kZSBpcyBjb2xsYXBzZWQgYW5kIG9ubHkgc2hvdyB0aGUKICAgY29sbGFwc2UgYnV0dG9uIHdoZW4gYSBub2RlIGlzIGV4cGFuZGVkLiAqLwogICAgICAubm9kZS5leHBhbmRlZCA+IC5ub2Rlc2hhcGUgPiAuYnV0dG9uY29udGFpbmVyID4gLmV4cGFuZGJ1dHRvbiB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQogICAgICAubm9kZTpub3QoLmV4cGFuZGVkKSA+IC5ub2Rlc2hhcGUgPiAuYnV0dG9uY29udGFpbmVyID4gLmNvbGxhcHNlYnV0dG9uIHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICB9CgogICAgICAuaGVhbHRoLXBpbGwtc3RhdHMgewogICAgICAgIGZvbnQtc2l6ZTogNHB4OwogICAgICAgIHRleHQtYW5jaG9yOiBtaWRkbGU7CiAgICAgIH0KCiAgICAgIC5oZWFsdGgtcGlsbCByZWN0IHsKICAgICAgICBmaWx0ZXI6IHVybCgjaGVhbHRoLXBpbGwtc2hhZG93KTsKICAgICAgICByeDogMzsKICAgICAgICByeTogMzsKICAgICAgfQoKICAgICAgLnRpdGxlQ29udGFpbmVyIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgdG9wOiAyMHB4OwogICAgICB9CgogICAgICAudGl0bGUsCiAgICAgIC5hdXhUaXRsZSwKICAgICAgLmZ1bmN0aW9uTGlicmFyeVRpdGxlIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgIH0KCiAgICAgICNtaW5pbWFwIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgcmlnaHQ6IDIwcHg7CiAgICAgICAgYm90dG9tOiAyMHB4OwogICAgICB9CgogICAgICAuY29udGV4dC1tZW51IHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTJlMmUyOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDJweDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgbWluLXdpZHRoOiAxNTBweDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjZDRkNGQ0OwogICAgICB9CgogICAgICAuY29udGV4dC1tZW51IHVsIHsKICAgICAgICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICB9CgogICAgICAuY29udGV4dC1tZW51IHVsIGxpIHsKICAgICAgICBwYWRkaW5nOiA0cHggMTZweDsKICAgICAgfQoKICAgICAgLmNvbnRleHQtbWVudSB1bCBsaTpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2YzOTEzZTsKICAgICAgICBjb2xvcjogd2hpdGU7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8ZGl2IGNsYXNzPSJ0aXRsZUNvbnRhaW5lciI+CiAgICAgIDxkaXYgaWQ9InRpdGxlIiBjbGFzcz0idGl0bGUiPk1haW4gR3JhcGg8L2Rpdj4KICAgICAgPGRpdiBpZD0iYXV4VGl0bGUiIGNsYXNzPSJhdXhUaXRsZSI+QXV4aWxpYXJ5IE5vZGVzPC9kaXY+CiAgICAgIDxkaXYgaWQ9ImZ1bmN0aW9uTGlicmFyeVRpdGxlIiBjbGFzcz0iZnVuY3Rpb25MaWJyYXJ5VGl0bGUiPgogICAgICAgIEZ1bmN0aW9ucwogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogICAgPHN2ZyBpZD0ic3ZnIj4KICAgICAgPGRlZnM+CiAgICAgICAgCiAgICAgICAgPHBhdGggaWQ9InJlZmVyZW5jZS1hcnJvd2hlYWQtcGF0aCIgZD0iTSAwLDAgTCAxMCw1IEwgMCwxMCBDIDMsNyAzLDMgMCwwIiAvPgogICAgICAgIDxtYXJrZXIgY2xhc3M9InJlZmVyZW5jZS1hcnJvd2hlYWQiIGlkPSJyZWZlcmVuY2UtYXJyb3doZWFkLXNtYWxsIiB2aWV3Ym94PSIwIDAgMTAgMTAiIG1hcmtlcndpZHRoPSI1IiBtYXJrZXJoZWlnaHQ9IjUiIHJlZng9IjIiIHJlZnk9IjUiIG9yaWVudD0iYXV0by1zdGFydC1yZXZlcnNlIiBtYXJrZXJ1bml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgICAgICAgPHVzZSB4bGluazpocmVmPSIjcmVmZXJlbmNlLWFycm93aGVhZC1wYXRoIiAvPgogICAgICAgIDwvbWFya2VyPgogICAgICAgIDxtYXJrZXIgY2xhc3M9InJlZmVyZW5jZS1hcnJvd2hlYWQiIGlkPSJyZWZlcmVuY2UtYXJyb3doZWFkLW1lZGl1bSIgdmlld2JveD0iMCAwIDEwIDEwIiBtYXJrZXJ3aWR0aD0iMTMiIG1hcmtlcmhlaWdodD0iMTMiIHJlZng9IjIiIHJlZnk9IjUiIG9yaWVudD0iYXV0by1zdGFydC1yZXZlcnNlIiBtYXJrZXJ1bml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgICAgICAgPHVzZSB4bGluazpocmVmPSIjcmVmZXJlbmNlLWFycm93aGVhZC1wYXRoIiAvPgogICAgICAgIDwvbWFya2VyPgogICAgICAgIDxtYXJrZXIgY2xhc3M9InJlZmVyZW5jZS1hcnJvd2hlYWQiIGlkPSJyZWZlcmVuY2UtYXJyb3doZWFkLWxhcmdlIiB2aWV3Ym94PSIwIDAgMTAgMTAiIG1hcmtlcndpZHRoPSIxNiIgbWFya2VyaGVpZ2h0PSIxNiIgcmVmeD0iMiIgcmVmeT0iNSIgb3JpZW50PSJhdXRvLXN0YXJ0LXJldmVyc2UiIG1hcmtlcnVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNyZWZlcmVuY2UtYXJyb3doZWFkLXBhdGgiIC8+CiAgICAgICAgPC9tYXJrZXI+CiAgICAgICAgPG1hcmtlciBjbGFzcz0icmVmZXJlbmNlLWFycm93aGVhZCIgaWQ9InJlZmVyZW5jZS1hcnJvd2hlYWQteGxhcmdlIiB2aWV3Ym94PSIwIDAgMTAgMTAiIG1hcmtlcndpZHRoPSIyMCIgbWFya2VyaGVpZ2h0PSIyMCIgcmVmeD0iMiIgcmVmeT0iNSIgb3JpZW50PSJhdXRvLXN0YXJ0LXJldmVyc2UiIG1hcmtlcnVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNyZWZlcmVuY2UtYXJyb3doZWFkLXBhdGgiIC8+CiAgICAgICAgPC9tYXJrZXI+CgogICAgICAgIAogICAgICAgIDxwYXRoIGlkPSJkYXRhZmxvdy1hcnJvd2hlYWQtcGF0aCIgZD0iTSAwLDAgTCAxMCw1IEwgMCwxMCBDIDMsNyAzLDMgMCwwIiAvPgogICAgICAgIDxtYXJrZXIgY2xhc3M9ImRhdGFmbG93LWFycm93aGVhZCIgaWQ9ImRhdGFmbG93LWFycm93aGVhZC1zbWFsbCIgdmlld2JveD0iMCAwIDEwIDEwIiBtYXJrZXJ3aWR0aD0iNSIgbWFya2VyaGVpZ2h0PSI1IiByZWZ4PSIyIiByZWZ5PSI1IiBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSIgbWFya2VydW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI2RhdGFmbG93LWFycm93aGVhZC1wYXRoIiAvPgogICAgICAgIDwvbWFya2VyPgogICAgICAgIDxtYXJrZXIgY2xhc3M9ImRhdGFmbG93LWFycm93aGVhZCIgaWQ9ImRhdGFmbG93LWFycm93aGVhZC1tZWRpdW0iIHZpZXdib3g9IjAgMCAxMCAxMCIgbWFya2Vyd2lkdGg9IjEzIiBtYXJrZXJoZWlnaHQ9IjEzIiByZWZ4PSIyIiByZWZ5PSI1IiBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSIgbWFya2VydW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI2RhdGFmbG93LWFycm93aGVhZC1wYXRoIiAvPgogICAgICAgIDwvbWFya2VyPgogICAgICAgIDxtYXJrZXIgY2xhc3M9ImRhdGFmbG93LWFycm93aGVhZCIgaWQ9ImRhdGFmbG93LWFycm93aGVhZC1sYXJnZSIgdmlld2JveD0iMCAwIDEwIDEwIiBtYXJrZXJ3aWR0aD0iMTYiIG1hcmtlcmhlaWdodD0iMTYiIHJlZng9IjIiIHJlZnk9IjUiIG9yaWVudD0iYXV0by1zdGFydC1yZXZlcnNlIiBtYXJrZXJ1bml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgICAgICAgPHVzZSB4bGluazpocmVmPSIjZGF0YWZsb3ctYXJyb3doZWFkLXBhdGgiIC8+CiAgICAgICAgPC9tYXJrZXI+CiAgICAgICAgPG1hcmtlciBjbGFzcz0iZGF0YWZsb3ctYXJyb3doZWFkIiBpZD0iZGF0YWZsb3ctYXJyb3doZWFkLXhsYXJnZSIgdmlld2JveD0iMCAwIDEwIDEwIiBtYXJrZXJ3aWR0aD0iMjAiIG1hcmtlcmhlaWdodD0iMjAiIHJlZng9IjIiIHJlZnk9IjUiIG9yaWVudD0iYXV0by1zdGFydC1yZXZlcnNlIiBtYXJrZXJ1bml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgICAgICAgPHVzZSB4bGluazpocmVmPSIjZGF0YWZsb3ctYXJyb3doZWFkLXBhdGgiIC8+CiAgICAgICAgPC9tYXJrZXI+CgogICAgICAgIAogICAgICAgIDxtYXJrZXIgaWQ9ImFubm90YXRpb24tYXJyb3doZWFkIiBtYXJrZXJ3aWR0aD0iNSIgbWFya2VyaGVpZ2h0PSI1IiByZWZ4PSI1IiByZWZ5PSIyLjUiIG9yaWVudD0iYXV0byI+CiAgICAgICAgICA8cGF0aCBkPSJNIDAsMCBMIDUsMi41IEwgMCw1IEwgMCwwIiAvPgogICAgICAgIDwvbWFya2VyPgogICAgICAgIDxtYXJrZXIgaWQ9ImFubm90YXRpb24tYXJyb3doZWFkLWZhZGVkIiBtYXJrZXJ3aWR0aD0iNSIgbWFya2VyaGVpZ2h0PSI1IiByZWZ4PSI1IiByZWZ5PSIyLjUiIG9yaWVudD0iYXV0byI+CiAgICAgICAgICA8cGF0aCBkPSJNIDAsMCBMIDUsMi41IEwgMCw1IEwgMCwwIiAvPgogICAgICAgIDwvbWFya2VyPgogICAgICAgIDxtYXJrZXIgaWQ9InJlZi1hbm5vdGF0aW9uLWFycm93aGVhZCIgbWFya2Vyd2lkdGg9IjUiIG1hcmtlcmhlaWdodD0iNSIgcmVmeD0iMCIgcmVmeT0iMi41IiBvcmllbnQ9ImF1dG8iPgogICAgICAgICAgPHBhdGggZD0iTSA1LDAgTCAwLDIuNSBMIDUsNSBMIDUsMCIgLz4KICAgICAgICA8L21hcmtlcj4KICAgICAgICA8bWFya2VyIGlkPSJyZWYtYW5ub3RhdGlvbi1hcnJvd2hlYWQtZmFkZWQiIG1hcmtlcndpZHRoPSI1IiBtYXJrZXJoZWlnaHQ9IjUiIHJlZng9IjAiIHJlZnk9IjIuNSIgb3JpZW50PSJhdXRvIj4KICAgICAgICAgIDxwYXRoIGQ9Ik0gNSwwIEwgMCwyLjUgTCA1LDUgTCA1LDAiIC8+CiAgICAgICAgPC9tYXJrZXI+CiAgICAgICAgCiAgICAgICAgPGVsbGlwc2UgaWQ9Im9wLW5vZGUtc3RhbXAiIHJ4PSI3LjUiIHJ5PSIzIiBzdHJva2U9ImluaGVyaXQiIGZpbGw9ImluaGVyaXQiIC8+CiAgICAgICAgCiAgICAgICAgPGVsbGlwc2UgaWQ9Im9wLW5vZGUtYW5ub3RhdGlvbi1zdGFtcCIgcng9IjUiIHJ5PSIyIiBzdHJva2U9ImluaGVyaXQiIGZpbGw9ImluaGVyaXQiIC8+CiAgICAgICAgCiAgICAgICAgPGcgaWQ9Im9wLXNlcmllcy12ZXJ0aWNhbC1zdGFtcCI+CiAgICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNvcC1ub2RlLXN0YW1wIiB4PSI4IiB5PSI5IiAvPgogICAgICAgICAgPHVzZSB4bGluazpocmVmPSIjb3Atbm9kZS1zdGFtcCIgeD0iOCIgeT0iNiIgLz4KICAgICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI29wLW5vZGUtc3RhbXAiIHg9IjgiIHk9IjMiIC8+CiAgICAgICAgPC9nPgogICAgICAgIAogICAgICAgIDxnIGlkPSJvcC1zZXJpZXMtaG9yaXpvbnRhbC1zdGFtcCI+CiAgICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNvcC1ub2RlLXN0YW1wIiB4PSIxNiIgeT0iNCIgLz4KICAgICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI29wLW5vZGUtc3RhbXAiIHg9IjEyIiB5PSI0IiAvPgogICAgICAgICAgPHVzZSB4bGluazpocmVmPSIjb3Atbm9kZS1zdGFtcCIgeD0iOCIgeT0iNCIgLz4KICAgICAgICA8L2c+CiAgICAgICAgCiAgICAgICAgPGcgaWQ9Im9wLXNlcmllcy1hbm5vdGF0aW9uLXN0YW1wIj4KICAgICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI29wLW5vZGUtYW5ub3RhdGlvbi1zdGFtcCIgeD0iOSIgeT0iMiIgLz4KICAgICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI29wLW5vZGUtYW5ub3RhdGlvbi1zdGFtcCIgeD0iNyIgeT0iMiIgLz4KICAgICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI29wLW5vZGUtYW5ub3RhdGlvbi1zdGFtcCIgeD0iNSIgeT0iMiIgLz4KICAgICAgICA8L2c+CiAgICAgICAgPHN2ZyBpZD0ic3VtbWFyeS1pY29uIiBmaWxsPSIjODQ4NDg0IiBoZWlnaHQ9IjEyIiB2aWV3Ym94PSIwIDAgMjQgMjQiIHdpZHRoPSIxMiI+CiAgICAgICAgICA8cGF0aCBkPSJNMTkgM0g1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6TTkgMTdIN3YtN2gydjd6bTQgMGgtMlY3aDJ2MTB6bTQgMGgtMnYtNGgydjR6IiAvPgogICAgICAgIDwvc3ZnPgoKICAgICAgICAKICAgICAgICA8cGF0dGVybiBpZD0icmVjdEhhdGNoIiBwYXR0ZXJudHJhbnNmb3JtPSJyb3RhdGUoNDUgMCAwKSIgd2lkdGg9IjUiIGhlaWdodD0iNSIgcGF0dGVybnVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICAgICAgICA8bGluZSB4MT0iMCIgeTE9IjAiIHgyPSIwIiB5Mj0iNSIgc3R5bGU9InN0cm9rZS13aWR0aDogMSIgLz4KICAgICAgICA8L3BhdHRlcm4+CiAgICAgICAgPHBhdHRlcm4gaWQ9ImVsbGlwc2VIYXRjaCIgcGF0dGVybnRyYW5zZm9ybT0icm90YXRlKDQ1IDAgMCkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIHBhdHRlcm51bml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgICAgICAgPGxpbmUgeDE9IjAiIHkxPSIwIiB4Mj0iMCIgeTI9IjIiIHN0eWxlPSJzdHJva2Utd2lkdGg6IDEiIC8+CiAgICAgICAgPC9wYXR0ZXJuPgoKICAgICAgICAKICAgICAgICA8ZmlsdGVyIGlkPSJoZWFsdGgtcGlsbC1zaGFkb3ciIHg9Ii00MCUiIHk9Ii00MCUiIHdpZHRoPSIxODAlIiBoZWlnaHQ9IjE4MCUiPgogICAgICAgICAgPGZlZ2F1c3NpYW5ibHVyIGluPSJTb3VyY2VBbHBoYSIgc3RkRGV2aWF0aW9uPSIwLjgiIC8+CiAgICAgICAgICA8ZmVvZmZzZXQgZHg9IjAiIGR5PSIwIiByZXN1bHQ9Im9mZnNldGJsdXIiIC8+CiAgICAgICAgICA8ZmVmbG9vZCBmbG9vZC1jb2xvcj0iIzAwMDAwMCIgLz4KICAgICAgICAgIDxmZWNvbXBvc2l0ZSBpbjI9Im9mZnNldGJsdXIiIG9wZXJhdG9yPSJpbiIgLz4KICAgICAgICAgIDxmZW1lcmdlPgogICAgICAgICAgICA8ZmVtZXJnZW5vZGUgLz4KICAgICAgICAgICAgPGZlbWVyZ2Vub2RlIGluPSJTb3VyY2VHcmFwaGljIiAvPgogICAgICAgICAgPC9mZW1lcmdlPgogICAgICAgIDwvZmlsdGVyPgogICAgICA8L2RlZnM+CiAgICAgIAogICAgICA8cmVjdCBmaWxsPSJ3aGl0ZSIgd2lkdGg9IjEwMDAwIiBoZWlnaHQ9IjEwMDAwIj48L3JlY3Q+CiAgICAgIDxnIGlkPSJyb290Ij48L2c+CiAgICA8L3N2Zz4KICAgIDx0Zi1ncmFwaC1taW5pbWFwIGlkPSJtaW5pbWFwIj48L3RmLWdyYXBoLW1pbmltYXA+CiAgICA8ZGl2IGlkPSJjb250ZXh0TWVudSIgY2xhc3M9ImNvbnRleHQtbWVudSI+PC9kaXY+CiAgPC90ZW1wbGF0ZT4KICA8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdGYtZ3JhcGgvdGYtZ3JhcGgtc2NlbmUuaHRtbC5qcwpQb2x5bWVyKHtpczoidGYtZ3JhcGgtc2NlbmUiLHByb3BlcnRpZXM6e3JlbmRlckhpZXJhcmNoeTpPYmplY3QsbmFtZTpTdHJpbmcsY29sb3JCeTpTdHJpbmcsdHJhY2VJbnB1dHM6Qm9vbGVhbixfaGFzUmVuZGVySGllcmFyY2h5QmVlbkZpdE9uY2U6Qm9vbGVhbixfaXNBdHRhY2hlZDpCb29sZWFuLF96b29tOk9iamVjdCxoaWdobGlnaHRlZE5vZGU6e3R5cGU6U3RyaW5nLG9ic2VydmVyOiJfaGlnaGxpZ2h0ZWROb2RlQ2hhbmdlZCJ9LHNlbGVjdGVkTm9kZTp7dHlwZTpTdHJpbmcsb2JzZXJ2ZXI6Il9zZWxlY3RlZE5vZGVDaGFuZ2VkIn0saGFuZGxlRWRnZVNlbGVjdGVkOk9iamVjdCxfem9vbWVkOnt0eXBlOkJvb2xlYW4sb2JzZXJ2ZXI6Il9vblpvb21DaGFuZ2VkIix2YWx1ZTohMX0sX3pvb21TdGFydENvb3Jkczp7dHlwZTpPYmplY3QsdmFsdWU6bnVsbH0sX3pvb21UcmFuc2Zvcm06e3R5cGU6T2JqZWN0LHZhbHVlOm51bGx9LF9tYXhab29tRGlzdGFuY2VGb3JDbGljazp7dHlwZTpOdW1iZXIsCnZhbHVlOjIwfSx0ZW1wbGF0ZUluZGV4OkZ1bmN0aW9uLG1pbmltYXA6T2JqZWN0LF9ub2RlR3JvdXBJbmRleDp7dHlwZTpPYmplY3QsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm57fX19LF9hbm5vdGF0aW9uR3JvdXBJbmRleDp7dHlwZTpPYmplY3QsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm57fX19LF9lZGdlR3JvdXBJbmRleDp7dHlwZTpPYmplY3QsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm57fX19LG1heE1ldGFub2RlTGFiZWxMZW5ndGhGb250U2l6ZTp7dHlwZTpOdW1iZXIsdmFsdWU6OX0sbWluTWV0YW5vZGVMYWJlbExlbmd0aEZvbnRTaXplOnt0eXBlOk51bWJlcix2YWx1ZTo2fSxtYXhNZXRhbm9kZUxhYmVsTGVuZ3RoTGFyZ2VGb250Ont0eXBlOk51bWJlcix2YWx1ZToxMX0sbWF4TWV0YW5vZGVMYWJlbExlbmd0aDp7dHlwZTpOdW1iZXIsdmFsdWU6MTh9LHByb2dyZXNzOk9iamVjdCxub2RlQ29udGV4dE1lbnVJdGVtczpBcnJheSxub2RlTmFtZXNUb0hlYWx0aFBpbGxzOk9iamVjdCwKaGVhbHRoUGlsbFN0ZXBJbmRleDpOdW1iZXJ9LG9ic2VydmVyczpbIl9jb2xvckJ5Q2hhbmdlZChjb2xvckJ5KSIsIl9yZW5kZXJIaWVyYXJjaHlDaGFuZ2VkKHJlbmRlckhpZXJhcmNoeSkiLCJfYW5pbWF0ZUFuZEZpdChfaXNBdHRhY2hlZCwgcmVuZGVySGllcmFyY2h5KSIsIl91cGRhdGVIZWFsdGhQaWxscyhub2RlTmFtZXNUb0hlYWx0aFBpbGxzLCBoZWFsdGhQaWxsU3RlcEluZGV4KSIsIl91cGRhdGVJbnB1dFRyYWNlKHRyYWNlSW5wdXRzLCBzZWxlY3RlZE5vZGUpIl0sZ2V0Tm9kZTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5yZW5kZXJIaWVyYXJjaHkuZ2V0UmVuZGVyTm9kZUJ5TmFtZShhKX0saXNOb2RlRXhwYW5kZWQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuZXhwYW5kZWR9LHNldE5vZGVFeHBhbmRlZDpmdW5jdGlvbigpe3RoaXMuX2J1aWxkKHRoaXMucmVuZGVySGllcmFyY2h5KTt0aGlzLl91cGRhdGVMYWJlbHMoIXRoaXMuX3pvb21lZCl9LHBhblRvTm9kZShhKXt0Zi5ncmFwaC5zY2VuZS5wYW5Ub05vZGUoYSwKdGhpcy4kLnN2Zyx0aGlzLiQucm9vdCx0aGlzLl96b29tKSYmKHRoaXMuX3pvb21lZD0hMCl9LGdldEdyYXBoU3ZnUm9vdCgpe3JldHVybiB0aGlzLiQuc3ZnfSxnZXRDb250ZXh0TWVudSgpe3JldHVybiB0aGlzLiQuY29udGV4dE1lbnV9LF9yZXNldFN0YXRlOmZ1bmN0aW9uKCl7dGhpcy5fbm9kZUdyb3VwSW5kZXg9e307dGhpcy5fYW5ub3RhdGlvbkdyb3VwSW5kZXg9e307dGhpcy5fZWRnZUdyb3VwSW5kZXg9e307dGhpcy5fdXBkYXRlTGFiZWxzKCExKTtkMy5zZWxlY3QodGhpcy4kLnN2Zykuc2VsZWN0KCIjcm9vdCIpLnNlbGVjdEFsbCgiKiIpLnJlbW92ZSgpO3RmLmdyYXBoLnNjZW5lLm5vZGUucmVtb3ZlR3JhZGllbnREZWZpbml0aW9ucyh0aGlzLiQuc3ZnKX0sX2J1aWxkOmZ1bmN0aW9uKGEpe3RoaXMudGVtcGxhdGVJbmRleD1hLmhpZXJhcmNoeS5nZXRUZW1wbGF0ZUluZGV4KCk7dGYuZ3JhcGgudXRpbC50aW1lKCJ0Zi1ncmFwaC1zY2VuZSAobGF5b3V0KToiLGZ1bmN0aW9uKCl7dGYuZ3JhcGgubGF5b3V0LmxheW91dFNjZW5lKGEucm9vdCwKdGhpcyl9LmJpbmQodGhpcykpO3RmLmdyYXBoLnV0aWwudGltZSgidGYtZ3JhcGgtc2NlbmUgKGJ1aWxkIHNjZW5lKToiLGZ1bmN0aW9uKCl7dGYuZ3JhcGguc2NlbmUuYnVpbGRHcm91cChkMy5zZWxlY3QodGhpcy4kLnJvb3QpLGEucm9vdCx0aGlzKTt0Zi5ncmFwaC5zY2VuZS5hZGRHcmFwaENsaWNrTGlzdGVuZXIodGhpcy4kLnN2Zyx0aGlzKTt0aGlzLl91cGRhdGVJbnB1dFRyYWNlKCl9LmJpbmQodGhpcykpO3NldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVIZWFsdGhQaWxscyh0aGlzLm5vZGVOYW1lc1RvSGVhbHRoUGlsbHMsdGhpcy5oZWFsdGhQaWxsU3RlcEluZGV4KTt0aGlzLm1pbmltYXAudXBkYXRlKCl9LmJpbmQodGhpcyksdGYuZ3JhcGgubGF5b3V0LlBBUkFNUy5hbmltYXRpb24uZHVyYXRpb24pfSxyZWFkeTpmdW5jdGlvbigpe3RoaXMuX3pvb209ZDMuem9vbSgpLm9uKCJlbmQiLGZ1bmN0aW9uKCl7dGhpcy5fem9vbVN0YXJ0Q29vcmRzJiYoTWF0aC5zcXJ0KE1hdGgucG93KHRoaXMuX3pvb21TdGFydENvb3Jkcy54LQp0aGlzLl96b29tVHJhbnNmb3JtLngsMikrTWF0aC5wb3codGhpcy5fem9vbVN0YXJ0Q29vcmRzLnktdGhpcy5fem9vbVRyYW5zZm9ybS55LDIpKTx0aGlzLl9tYXhab29tRGlzdGFuY2VGb3JDbGljaz90aGlzLl9maXJlRW5hYmxlQ2xpY2soKTpzZXRUaW1lb3V0KHRoaXMuX2ZpcmVFbmFibGVDbGljay5iaW5kKHRoaXMpLDUwKSk7dGhpcy5fem9vbVN0YXJ0Q29vcmRzPW51bGx9LmJpbmQodGhpcykpLm9uKCJ6b29tIixmdW5jdGlvbigpe3RoaXMuX3pvb21UcmFuc2Zvcm09ZDMuZXZlbnQudHJhbnNmb3JtO3RoaXMuX3pvb21TdGFydENvb3Jkc3x8KHRoaXMuX3pvb21TdGFydENvb3Jkcz10aGlzLl96b29tVHJhbnNmb3JtLHRoaXMuZmlyZSgiZGlzYWJsZS1jbGljayIpKTt0aGlzLl96b29tZWQ9ITA7ZDMuc2VsZWN0KHRoaXMuJC5yb290KS5hdHRyKCJ0cmFuc2Zvcm0iLGQzLmV2ZW50LnRyYW5zZm9ybSk7dGhpcy5taW5pbWFwLnpvb20oZDMuZXZlbnQudHJhbnNmb3JtKX0uYmluZCh0aGlzKSk7CmQzLnNlbGVjdCh0aGlzLiQuc3ZnKS5jYWxsKHRoaXMuX3pvb20pLm9uKCJkYmxjbGljay56b29tIixudWxsKTtkMy5zZWxlY3Qod2luZG93KS5vbigicmVzaXplIixmdW5jdGlvbigpe3RoaXMubWluaW1hcC56b29tKCl9LmJpbmQodGhpcykpO3RoaXMubWluaW1hcD10aGlzLiQubWluaW1hcC5pbml0KHRoaXMuJC5zdmcsdGhpcy4kLnJvb3QsdGhpcy5fem9vbSx0Zi5ncmFwaC5sYXlvdXQuUEFSQU1TLm1pbmltYXAuc2l6ZSx0Zi5ncmFwaC5sYXlvdXQuUEFSQU1TLnN1YnNjZW5lLm1ldGEubGFiZWxIZWlnaHQpfSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuc2V0KCJfaXNBdHRhY2hlZCIsITApfSxkZXRhY2hlZDpmdW5jdGlvbigpe3RoaXMuc2V0KCJfaXNBdHRhY2hlZCIsITEpfSxfcmVuZGVySGllcmFyY2h5Q2hhbmdlZDpmdW5jdGlvbihhKXt0aGlzLl9oYXNSZW5kZXJIaWVyYXJjaHlCZWVuRml0T25jZT0hMTt0aGlzLl9yZXNldFN0YXRlKCk7dGhpcy5fYnVpbGQoYSl9LF9hbmltYXRlQW5kRml0OmZ1bmN0aW9uKGEpeyF0aGlzLl9oYXNSZW5kZXJIaWVyYXJjaHlCZWVuRml0T25jZSYmCmEmJnNldFRpbWVvdXQodGhpcy5maXQuYmluZCh0aGlzKSx0Zi5ncmFwaC5sYXlvdXQuUEFSQU1TLmFuaW1hdGlvbi5kdXJhdGlvbil9LF91cGRhdGVMYWJlbHM6ZnVuY3Rpb24oYSl7dmFyIGM9dGhpcy4kJCgiLnRpdGxlIiksZD1jLnN0eWxlLGY9dGhpcy4kJCgiLmF1eFRpdGxlIiksZz1mLnN0eWxlLGw9dGhpcy4kJCgiLmZ1bmN0aW9uTGlicmFyeVRpdGxlIikuc3R5bGU7Y29uc3Qgaz1kMy5zZWxlY3QodGhpcy4kLnN2Zyk7dmFyIG09ay5zZWxlY3QoIi4iK3RmLmdyYXBoLnNjZW5lLkNsYXNzLlNjZW5lLkdST1VQKyJceDNlLiIrdGYuZ3JhcGguc2NlbmUuQ2xhc3MuU2NlbmUuQ09SRSkubm9kZSgpO2lmKGEmJm0mJnRoaXMucHJvZ3Jlc3MmJjEwMD09PXRoaXMucHJvZ3Jlc3MudmFsdWUpe2E9ay5zZWxlY3QoIi4iK3RmLmdyYXBoLnNjZW5lLkNsYXNzLlNjZW5lLkdST1VQKyJceDNlLiIrdGYuZ3JhcGguc2NlbmUuQ2xhc3MuU2NlbmUuSU5FWFRSQUNUKS5ub2RlKCl8fGsuc2VsZWN0KCIuIisKdGYuZ3JhcGguc2NlbmUuQ2xhc3MuU2NlbmUuR1JPVVArIlx4M2UuIit0Zi5ncmFwaC5zY2VuZS5DbGFzcy5TY2VuZS5PVVRFWFRSQUNUKS5ub2RlKCk7dmFyIHA9bS5nZXRDVE0oKS5lO209YT9hLmdldENUTSgpLmU6bnVsbDtkLmRpc3BsYXk9ImlubGluZSI7ZC5sZWZ0PXArInB4IjtudWxsIT09bSYmbSE9PXA/KGcuZGlzcGxheT0iaW5saW5lIixtPU1hdGgubWF4KHArYy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCxtKSxnLmxlZnQ9bSsicHgiKTpnLmRpc3BsYXk9Im5vbmUiO2M9KGM9ay5zZWxlY3QoIi4iK3RmLmdyYXBoLnNjZW5lLkNsYXNzLlNjZW5lLkdST1VQKyJceDNlLiIrdGYuZ3JhcGguc2NlbmUuQ2xhc3MuU2NlbmUuRlVOQ1RJT05fTElCUkFSWSkubm9kZSgpKT9jLmdldENUTSgpLmU6bnVsbDtudWxsIT09YyYmYyE9PW0/KGwuZGlzcGxheT0iaW5saW5lIixjPU1hdGgubWF4KG0rZi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCxjKSxsLmxlZnQ9YysicHgiKToKbC5kaXNwbGF5PSJub25lIn1lbHNlIGQuZGlzcGxheT0ibm9uZSIsZy5kaXNwbGF5PSJub25lIixsLmRpc3BsYXk9Im5vbmUifSxfY29sb3JCeUNoYW5nZWQ6ZnVuY3Rpb24oKXtudWxsIT10aGlzLnJlbmRlckhpZXJhcmNoeSYmKF8uZWFjaCh0aGlzLl9ub2RlR3JvdXBJbmRleCwoYSxjKT0+e3RoaXMuX3VwZGF0ZU5vZGVTdGF0ZShjKX0pLHRoaXMubWluaW1hcC51cGRhdGUoKSl9LGZpdDpmdW5jdGlvbigpe3RoaXMuX2hhc1JlbmRlckhpZXJhcmNoeUJlZW5GaXRPbmNlPSEwO3RmLmdyYXBoLnNjZW5lLmZpdCh0aGlzLiQuc3ZnLHRoaXMuJC5yb290LHRoaXMuX3pvb20sZnVuY3Rpb24oKXt0aGlzLl96b29tZWQ9ITF9LmJpbmQodGhpcykpfSxpc05vZGVTZWxlY3RlZDpmdW5jdGlvbihhKXtyZXR1cm4gYT09PXRoaXMuc2VsZWN0ZWROb2RlfSxpc05vZGVIaWdobGlnaHRlZDpmdW5jdGlvbihhKXtyZXR1cm4gYT09PXRoaXMuaGlnaGxpZ2h0ZWROb2RlfSxhZGRBbm5vdGF0aW9uR3JvdXA6ZnVuY3Rpb24oYSwKYyxkKXthPWEubm9kZS5uYW1lO3RoaXMuX2Fubm90YXRpb25Hcm91cEluZGV4W2FdPXRoaXMuX2Fubm90YXRpb25Hcm91cEluZGV4W2FdfHx7fTt0aGlzLl9hbm5vdGF0aW9uR3JvdXBJbmRleFthXVtjLm5vZGUubmFtZV09ZH0sZ2V0QW5ub3RhdGlvbkdyb3Vwc0luZGV4OmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLl9hbm5vdGF0aW9uR3JvdXBJbmRleFthXX0scmVtb3ZlQW5ub3RhdGlvbkdyb3VwOmZ1bmN0aW9uKGEsYyl7ZGVsZXRlIHRoaXMuX2Fubm90YXRpb25Hcm91cEluZGV4W2Eubm9kZS5uYW1lXVtjLm5vZGUubmFtZV19LGFkZE5vZGVHcm91cDpmdW5jdGlvbihhLGMpe3RoaXMuX25vZGVHcm91cEluZGV4W2FdPWN9LGdldE5vZGVHcm91cDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5fbm9kZUdyb3VwSW5kZXhbYV19LHJlbW92ZU5vZGVHcm91cDpmdW5jdGlvbihhKXtkZWxldGUgdGhpcy5fbm9kZUdyb3VwSW5kZXhbYV19LGFkZEVkZ2VHcm91cDpmdW5jdGlvbihhLGMpe3RoaXMuX2VkZ2VHcm91cEluZGV4W2FdPQpjfSxnZXRFZGdlR3JvdXA6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuX2VkZ2VHcm91cEluZGV4W2FdfSxfdXBkYXRlSGVhbHRoUGlsbHM6ZnVuY3Rpb24oYSxjKXt0Zi5ncmFwaC5zY2VuZS5hZGRIZWFsdGhQaWxscyh0aGlzLiQuc3ZnLGEsYyl9LF91cGRhdGVOb2RlU3RhdGU6ZnVuY3Rpb24oYSl7dmFyIGM9dGhpcy5nZXROb2RlKGEpLGQ9dGhpcy5nZXROb2RlR3JvdXAoYSk7ZCYmdGYuZ3JhcGguc2NlbmUubm9kZS5zdHlsaXplKGQsYyx0aGlzKTtjLm5vZGUudHlwZT09PXRmLmdyYXBoLk5vZGVUeXBlLk1FVEEmJmMubm9kZS5hc3NvY2lhdGVkRnVuY3Rpb24mJiFjLmlzTGlicmFyeUZ1bmN0aW9uJiYoZD1kMy5zZWxlY3QoIi4iK3RmLmdyYXBoLnNjZW5lLkNsYXNzLlNjZW5lLkdST1VQKyJceDNlLiIrdGYuZ3JhcGguc2NlbmUuQ2xhc3MuU2NlbmUuRlVOQ1RJT05fTElCUkFSWSsnIGdbZGF0YS1uYW1lXHgzZCInKyh0Zi5ncmFwaC5GVU5DVElPTl9MSUJSQVJZX05PREVfUFJFRklYKwpjLm5vZGUuYXNzb2NpYXRlZEZ1bmN0aW9uKSsnIl0nKSx0Zi5ncmFwaC5zY2VuZS5ub2RlLnN0eWxpemUoZCxjLHRoaXMpKTtfLmVhY2godGhpcy5nZXRBbm5vdGF0aW9uR3JvdXBzSW5kZXgoYSksZj0+e3RmLmdyYXBoLnNjZW5lLm5vZGUuc3R5bGl6ZShmLGMsdGhpcyx0Zi5ncmFwaC5zY2VuZS5DbGFzcy5Bbm5vdGF0aW9uLk5PREUpfSl9LF9zZWxlY3RlZE5vZGVDaGFuZ2VkOmZ1bmN0aW9uKGEsYyl7aWYoYSE9PWMmJihjJiZ0aGlzLl91cGRhdGVOb2RlU3RhdGUoYyksYSkpe3RoaXMubWluaW1hcC51cGRhdGUoKTtjPXRoaXMucmVuZGVySGllcmFyY2h5LmhpZXJhcmNoeS5ub2RlKGEpO2Zvcih2YXIgZD1bXTtudWxsIT1jLnBhcmVudE5vZGUmJmMucGFyZW50Tm9kZS5uYW1lIT10Zi5ncmFwaC5ST09UX05BTUU7KWM9Yy5wYXJlbnROb2RlLGQucHVzaChjLm5hbWUpO3ZhciBmO18uZm9yRWFjaFJpZ2h0KGQsZz0+e3RoaXMucmVuZGVySGllcmFyY2h5LmJ1aWxkU3ViaGllcmFyY2h5KGcpOwpnPXRoaXMucmVuZGVySGllcmFyY2h5LmdldFJlbmRlck5vZGVCeU5hbWUoZyk7Zy5ub2RlLmlzR3JvdXBOb2RlJiYhZy5leHBhbmRlZCYmKGcuZXhwYW5kZWQ9ITAsZnx8KGY9ZykpfSk7ZiYmKHRoaXMuc2V0Tm9kZUV4cGFuZGVkKGYpLHRoaXMuX3pvb21lZD0hMCk7YSYmdGhpcy5fdXBkYXRlTm9kZVN0YXRlKGEpO3NldFRpbWVvdXQoKCk9Pnt0aGlzLnBhblRvTm9kZShhKX0sdGYuZ3JhcGgubGF5b3V0LlBBUkFNUy5hbmltYXRpb24uZHVyYXRpb24pfX0sX2hpZ2hsaWdodGVkTm9kZUNoYW5nZWQ6ZnVuY3Rpb24oYSxjKXthIT09YyYmKGEmJnRoaXMuX3VwZGF0ZU5vZGVTdGF0ZShhKSxjJiZ0aGlzLl91cGRhdGVOb2RlU3RhdGUoYykpfSxfb25ab29tQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMuX3VwZGF0ZUxhYmVscyghdGhpcy5fem9vbWVkKX0sX2ZpcmVFbmFibGVDbGljazpmdW5jdGlvbigpe3RoaXMuZmlyZSgiZW5hYmxlLWNsaWNrIil9LF91cGRhdGVJbnB1dFRyYWNlOmZ1bmN0aW9uKCl7dGYuZ3JhcGguc2NlbmUubm9kZS51cGRhdGVJbnB1dFRyYWNlKHRoaXMuZ2V0R3JhcGhTdmdSb290KCksCnRoaXMucmVuZGVySGllcmFyY2h5LHRoaXMuc2VsZWN0ZWROb2RlLHRoaXMudHJhY2VJbnB1dHMpfX0pOwo8L3NjcmlwdD4KPC9kb20tbW9kdWxlPgoKCjxkb20tbW9kdWxlIGlkPSJ0Zi1ncmFwaCI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICAuY29udGFpbmVyIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgYmFja2dyb3VuZDogd2hpdGU7CiAgICAgICAgYm94LXNoYWRvdzogMCAxcHggNXB4IHJnYmEoMCwgMCwgMCwgMC4yKTsKICAgICAgfQoKICAgICAgLnZlcnRpY2FsIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LXZlcnRpY2FsOwogICAgICB9CgogICAgICAuYXV0byB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWZsZXgtYXV0bzsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtdmVydGljYWw7CiAgICAgIH0KCiAgICAgIGgyIHsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgIH0KCiAgICAgIHBhcGVyLWJ1dHRvbiB7CiAgICAgICAgdGV4dC10cmFuc2Zvcm06IG5vbmU7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8ZGl2IGNsYXNzPSJjb250YWluZXIiPgogICAgICA8ZGl2IGNsYXNzPSJ2ZXJ0aWNhbCI+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW3RpdGxlXV0iPgogICAgICAgICAgPGgyPltbdGl0bGVdXTwvaDI+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8dGYtZ3JhcGgtc2NlbmUgaWQ9InNjZW5lIiBjbGFzcz0iYXV0byIgcmVuZGVyLWhpZXJhcmNoeT0iW1tyZW5kZXJIaWVyYXJjaHldXSIgaGlnaGxpZ2h0ZWQtbm9kZT0iW1tfZ2V0VmlzaWJsZShoaWdobGlnaHRlZE5vZGUpXV0iIHNlbGVjdGVkLW5vZGU9Int7c2VsZWN0ZWROb2RlfX0iIHNlbGVjdGVkLWVkZ2U9Int7c2VsZWN0ZWRFZGdlfX0iIGNvbG9yLWJ5PSJbW2NvbG9yQnldXSIgcHJvZ3Jlc3M9IltbcHJvZ3Jlc3NdXSIgbm9kZS1jb250ZXh0LW1lbnUtaXRlbXM9Iltbbm9kZUNvbnRleHRNZW51SXRlbXNdXSIgbm9kZS1uYW1lcy10by1oZWFsdGgtcGlsbHM9Iltbbm9kZU5hbWVzVG9IZWFsdGhQaWxsc11dIiBoZWFsdGgtcGlsbC1zdGVwLWluZGV4PSJ7e2hlYWx0aFBpbGxTdGVwSW5kZXh9fSIgaGFuZGxlLWVkZ2Utc2VsZWN0ZWQ9IltbaGFuZGxlRWRnZVNlbGVjdGVkXV0iIHRyYWNlLWlucHV0cz0iW1t0cmFjZUlucHV0c11dIj48L3RmLWdyYXBoLXNjZW5lPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT4KCjxzY3JpcHQ+Ly9+fldFQlBBVEh+fi90Zi1ncmFwaC90Zi1ncmFwaC5odG1sLmpzClBvbHltZXIoe2lzOiJ0Zi1ncmFwaCIscHJvcGVydGllczp7Z3JhcGhIaWVyYXJjaHk6e3R5cGU6T2JqZWN0LG5vdGlmeTohMCxvYnNlcnZlcjoiX2dyYXBoQ2hhbmdlZCJ9LGJhc2ljR3JhcGg6T2JqZWN0LHN0YXRzOk9iamVjdCxkZXZpY2VzRm9yU3RhdHM6T2JqZWN0LGhpZXJhcmNoeVBhcmFtczpPYmplY3QscHJvZ3Jlc3M6e3R5cGU6T2JqZWN0LG5vdGlmeTohMH0sdGl0bGU6U3RyaW5nLHNlbGVjdGVkTm9kZTp7dHlwZTpTdHJpbmcsbm90aWZ5OiEwfSxzZWxlY3RlZEVkZ2U6e3R5cGU6T2JqZWN0LG5vdGlmeTohMH0sX2xhc3RTZWxlY3RlZEVkZ2VHcm91cDpPYmplY3QsaGlnaGxpZ2h0ZWROb2RlOnt0eXBlOlN0cmluZyxub3RpZnk6ITB9LGNvbG9yQnk6U3RyaW5nLGNvbG9yQnlQYXJhbXM6e3R5cGU6T2JqZWN0LG5vdGlmeTohMCxyZWFkT25seTohMH0scmVuZGVySGllcmFyY2h5Ont0eXBlOk9iamVjdCxyZWFkT25seTohMCxub3RpZnk6ITB9LHRyYWNlSW5wdXRzOkJvb2xlYW4sCm5vZGVDb250ZXh0TWVudUl0ZW1zOkFycmF5LF9yZW5kZXJEZXB0aDp7dHlwZTpOdW1iZXIsdmFsdWU6MX0sX2FsbG93R3JhcGhTZWxlY3Q6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMH0sbm9kZU5hbWVzVG9IZWFsdGhQaWxsczpPYmplY3QsaGVhbHRoUGlsbFN0ZXBJbmRleDpOdW1iZXIsZWRnZVdpZHRoRnVuY3Rpb246e3R5cGU6T2JqZWN0LHZhbHVlOiIifSxoYW5kbGVOb2RlU2VsZWN0ZWQ6e3R5cGU6T2JqZWN0LHZhbHVlOiIifSxlZGdlTGFiZWxGdW5jdGlvbjp7dHlwZTpPYmplY3QsdmFsdWU6IiJ9LGhhbmRsZUVkZ2VTZWxlY3RlZDp7dHlwZTpPYmplY3QsdmFsdWU6IiJ9fSxvYnNlcnZlcnM6WyJfc3RhdHNDaGFuZ2VkKHN0YXRzLCBkZXZpY2VzRm9yU3RhdHMpIiwiX2J1aWxkTmV3UmVuZGVySGllcmFyY2h5KGdyYXBoSGllcmFyY2h5LCBlZGdlV2lkdGhGdW5jdGlvbiwgaGFuZGxlTm9kZVNlbGVjdGVkLCBlZGdlTGFiZWxGdW5jdGlvbiwgaGFuZGxlRWRnZVNlbGVjdGVkKSIsIl9zZWxlY3RlZE5vZGVDaGFuZ2VkKHNlbGVjdGVkTm9kZSkiLAoiX3NlbGVjdGVkRWRnZUNoYW5nZWQoc2VsZWN0ZWRFZGdlKSJdLHBhblRvTm9kZShhKXt0aGlzLiQkKCJ0Zi1ncmFwaC1zY2VuZSIpLnBhblRvTm9kZShhKX0sX2J1aWxkTmV3UmVuZGVySGllcmFyY2h5KGEpe2EmJnRoaXMuX2J1aWxkUmVuZGVySGllcmFyY2h5KGEpfSxfc3RhdHNDaGFuZ2VkOmZ1bmN0aW9uKGEsYyl7dGhpcy5ncmFwaEhpZXJhcmNoeSYmKGEmJmMmJih0Zi5ncmFwaC5qb2luU3RhdHNJbmZvV2l0aEdyYXBoKHRoaXMuYmFzaWNHcmFwaCxhLGMpLHRmLmdyYXBoLmhpZXJhcmNoeS5qb2luQW5kQWdncmVnYXRlU3RhdHModGhpcy5ncmFwaEhpZXJhcmNoeSkpLHRoaXMuX2J1aWxkUmVuZGVySGllcmFyY2h5KHRoaXMuZ3JhcGhIaWVyYXJjaHkpKX0sX2J1aWxkUmVuZGVySGllcmFyY2h5OmZ1bmN0aW9uKGEpe3RmLmdyYXBoLnV0aWwudGltZSgibmV3IHRmLmdyYXBoLnJlbmRlci5IaWVyYXJjaHkiLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gYyhmKXtyZXR1cm57bWluVmFsdWU6Zi5kb21haW4oKVswXSwKbWF4VmFsdWU6Zi5kb21haW4oKVsxXSxzdGFydENvbG9yOmYucmFuZ2UoKVswXSxlbmRDb2xvcjpmLnJhbmdlKClbMV19fWlmKGEucm9vdC50eXBlPT09dGYuZ3JhcGguTm9kZVR5cGUuTUVUQSl7dmFyIGQ9bmV3IHRmLmdyYXBoLnJlbmRlci5SZW5kZXJHcmFwaEluZm8oYSwhIXRoaXMuc3RhdHMpO2QuZWRnZUxhYmVsRnVuY3Rpb249dGhpcy5lZGdlTGFiZWxGdW5jdGlvbjtkLmVkZ2VXaWR0aEZ1bmN0aW9uPXRoaXMuZWRnZVdpZHRoRnVuY3Rpb247dGhpcy5fc2V0Q29sb3JCeVBhcmFtcyh7Y29tcHV0ZV90aW1lOmMoZC5jb21wdXRlVGltZVNjYWxlKSxtZW1vcnk6YyhkLm1lbW9yeVVzYWdlU2NhbGUpLGRldmljZTpfLm1hcChkLmRldmljZUNvbG9yTWFwLmRvbWFpbigpLGZ1bmN0aW9uKGYpe3JldHVybntkZXZpY2U6Zixjb2xvcjpkLmRldmljZUNvbG9yTWFwKGYpfX0pLHhsYV9jbHVzdGVyOl8ubWFwKGQueGxhQ2x1c3RlckNvbG9yTWFwLmRvbWFpbigpLGZ1bmN0aW9uKGYpe3JldHVybnt4bGFfY2x1c3RlcjpmLApjb2xvcjpkLnhsYUNsdXN0ZXJDb2xvck1hcChmKX19KX0pO3RoaXMuX3NldFJlbmRlckhpZXJhcmNoeShkKTt0aGlzLmFzeW5jKGZ1bmN0aW9uKCl7dGhpcy5maXJlKCJyZW5kZXJlZCIpfSl9fS5iaW5kKHRoaXMpKX0sX2dldFZpc2libGU6ZnVuY3Rpb24oYSl7cmV0dXJuIGE/dGhpcy5yZW5kZXJIaWVyYXJjaHkuZ2V0TmVhcmVzdFZpc2libGVBbmNlc3RvcihhKTphfSxsaXN0ZW5lcnM6eyJncmFwaC1zZWxlY3QiOiJfZ3JhcGhTZWxlY3RlZCIsImRpc2FibGUtY2xpY2siOiJfZGlzYWJsZUNsaWNrIiwiZW5hYmxlLWNsaWNrIjoiX2VuYWJsZUNsaWNrIiwibm9kZS10b2dnbGUtZXhwYW5kIjoiX25vZGVUb2dnbGVFeHBhbmQiLCJub2RlLXNlbGVjdCI6Il9ub2RlU2VsZWN0ZWQiLCJub2RlLWhpZ2hsaWdodCI6Il9ub2RlSGlnaGxpZ2h0ZWQiLCJub2RlLXVuaGlnaGxpZ2h0IjoiX25vZGVVbmhpZ2hsaWdodGVkIiwibm9kZS10b2dnbGUtZXh0cmFjdCI6Il9ub2RlVG9nZ2xlRXh0cmFjdCIsCiJub2RlLXRvZ2dsZS1zZXJpZXNncm91cCI6Il9ub2RlVG9nZ2xlU2VyaWVzR3JvdXAiLCJlZGdlLXNlbGVjdCI6Il9lZGdlU2VsZWN0ZWQiLCJhbm5vdGF0aW9uLXNlbGVjdCI6Il9ub2RlU2VsZWN0ZWQiLCJhbm5vdGF0aW9uLWhpZ2hsaWdodCI6Il9ub2RlSGlnaGxpZ2h0ZWQiLCJhbm5vdGF0aW9uLXVuaGlnaGxpZ2h0IjoiX25vZGVVbmhpZ2hsaWdodGVkIn0sZml0OmZ1bmN0aW9uKCl7dGhpcy4kLnNjZW5lLmZpdCgpfSxfZ3JhcGhDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5maXJlKCJncmFwaC1zZWxlY3QiKX0sX2dyYXBoU2VsZWN0ZWQ6ZnVuY3Rpb24oKXt0aGlzLl9hbGxvd0dyYXBoU2VsZWN0JiYodGhpcy5zZXQoInNlbGVjdGVkTm9kZSIsbnVsbCksdGhpcy5zZXQoInNlbGVjdGVkRWRnZSIsbnVsbCkpO3RoaXMuX2FsbG93R3JhcGhTZWxlY3Q9ITB9LF9kaXNhYmxlQ2xpY2s6ZnVuY3Rpb24oKXt0aGlzLl9hbGxvd0dyYXBoU2VsZWN0PSExfSxfZW5hYmxlQ2xpY2s6ZnVuY3Rpb24oKXt0aGlzLl9hbGxvd0dyYXBoU2VsZWN0PQohMH0sX3NlbGVjdGVkTm9kZUNoYW5nZWQoYSl7dGhpcy5oYW5kbGVOb2RlU2VsZWN0ZWQmJnRoaXMuaGFuZGxlTm9kZVNlbGVjdGVkKGEpfSxfc2VsZWN0ZWRFZGdlQ2hhbmdlZChhKXt0aGlzLl9kZXNlbGVjdFByZXZpb3VzRWRnZSgpO2EmJih0aGlzLl9sYXN0U2VsZWN0ZWRFZGdlR3JvdXAuY2xhc3NlZCh0Zi5ncmFwaC5zY2VuZS5DbGFzcy5FZGdlLlNFTEVDVEVELCEwKSx0aGlzLl91cGRhdGVNYXJrZXJPZlNlbGVjdGVkRWRnZShhKSk7dGhpcy5oYW5kbGVFZGdlU2VsZWN0ZWQmJnRoaXMuaGFuZGxlRWRnZVNlbGVjdGVkKGEpfSxfbm9kZVNlbGVjdGVkOmZ1bmN0aW9uKGEpe3RoaXMuX2FsbG93R3JhcGhTZWxlY3QmJnRoaXMuc2V0KCJzZWxlY3RlZE5vZGUiLGEuZGV0YWlsLm5hbWUpO3RoaXMuX2FsbG93R3JhcGhTZWxlY3Q9ITB9LF9lZGdlU2VsZWN0ZWQoYSl7dGhpcy5fYWxsb3dHcmFwaFNlbGVjdCYmKHRoaXMuc2V0KCJfbGFzdFNlbGVjdGVkRWRnZUdyb3VwIixhLmRldGFpbC5lZGdlR3JvdXApLAp0aGlzLnNldCgic2VsZWN0ZWRFZGdlIixhLmRldGFpbC5lZGdlRGF0YSkpO3RoaXMuX2FsbG93R3JhcGhTZWxlY3Q9ITB9LF9ub2RlSGlnaGxpZ2h0ZWQ6ZnVuY3Rpb24oYSl7dGhpcy5zZXQoImhpZ2hsaWdodGVkTm9kZSIsYS5kZXRhaWwubmFtZSl9LF9ub2RlVW5oaWdobGlnaHRlZDpmdW5jdGlvbigpe3RoaXMuc2V0KCJoaWdobGlnaHRlZE5vZGUiLG51bGwpfSxfbm9kZVRvZ2dsZUV4cGFuZDpmdW5jdGlvbihhKXt0aGlzLl9ub2RlU2VsZWN0ZWQoYSk7YT1hLmRldGFpbC5uYW1lO3ZhciBjPXRoaXMucmVuZGVySGllcmFyY2h5LmdldFJlbmRlck5vZGVCeU5hbWUoYSk7Yy5ub2RlLnR5cGUhPT10Zi5ncmFwaC5Ob2RlVHlwZS5PUCYmKHRoaXMucmVuZGVySGllcmFyY2h5LmJ1aWxkU3ViaGllcmFyY2h5KGEpLGMuZXhwYW5kZWQ9IWMuZXhwYW5kZWQsdGhpcy5hc3luYyhmdW5jdGlvbigpe3RoaXMuJC5zY2VuZS5zZXROb2RlRXhwYW5kZWQoYyl9LDc1KSl9LF9ub2RlVG9nZ2xlRXh0cmFjdDpmdW5jdGlvbihhKXt0aGlzLm5vZGVUb2dnbGVFeHRyYWN0KGEuZGV0YWlsLm5hbWUpfSwKbm9kZVRvZ2dsZUV4dHJhY3Q6ZnVuY3Rpb24oYSl7YT10aGlzLnJlbmRlckhpZXJhcmNoeS5nZXRSZW5kZXJOb2RlQnlOYW1lKGEpO2Eubm9kZS5pbmNsdWRlPWEubm9kZS5pbmNsdWRlPT10Zi5ncmFwaC5JbmNsdXNpb25UeXBlLklOQ0xVREU/dGYuZ3JhcGguSW5jbHVzaW9uVHlwZS5FWENMVURFOmEubm9kZS5pbmNsdWRlPT10Zi5ncmFwaC5JbmNsdXNpb25UeXBlLkVYQ0xVREU/dGYuZ3JhcGguSW5jbHVzaW9uVHlwZS5JTkNMVURFOnRoaXMucmVuZGVySGllcmFyY2h5LmlzTm9kZUF1eGlsaWFyeShhKT90Zi5ncmFwaC5JbmNsdXNpb25UeXBlLklOQ0xVREU6dGYuZ3JhcGguSW5jbHVzaW9uVHlwZS5FWENMVURFO3RoaXMuX2J1aWxkUmVuZGVySGllcmFyY2h5KHRoaXMuZ3JhcGhIaWVyYXJjaHkpfSxfbm9kZVRvZ2dsZVNlcmllc0dyb3VwOmZ1bmN0aW9uKGEpe3RoaXMubm9kZVRvZ2dsZVNlcmllc0dyb3VwKGEuZGV0YWlsLm5hbWUpfSxub2RlVG9nZ2xlU2VyaWVzR3JvdXA6ZnVuY3Rpb24oYSl7dGYuZ3JhcGgudG9nZ2xlTm9kZVNlcmllc0dyb3VwKHRoaXMuaGllcmFyY2h5UGFyYW1zLnNlcmllc01hcCwKYSk7dGhpcy5zZXQoInByb2dyZXNzIix7dmFsdWU6MCxtc2c6IiJ9KTt0Zi5ncmFwaC5oaWVyYXJjaHkuYnVpbGQodGhpcy5iYXNpY0dyYXBoLHRoaXMuaGllcmFyY2h5UGFyYW1zLHRmLmdyYXBoLnV0aWwuZ2V0U3VidGFza1RyYWNrZXIodGYuZ3JhcGgudXRpbC5nZXRUcmFja2VyKHRoaXMpLDEwMCwiTmFtZXNwYWNlIGhpZXJhcmNoeSIpKS50aGVuKGZ1bmN0aW9uKGMpe3RoaXMuc2V0KCJncmFwaEhpZXJhcmNoeSIsYyk7dGhpcy5fYnVpbGRSZW5kZXJIaWVyYXJjaHkodGhpcy5ncmFwaEhpZXJhcmNoeSl9LmJpbmQodGhpcykpfSxfZGVzZWxlY3RQcmV2aW91c0VkZ2UoKXtkMy5zZWxlY3QoIi4iK3RmLmdyYXBoLnNjZW5lLkNsYXNzLkVkZ2UuU0VMRUNURUQpLmNsYXNzZWQodGYuZ3JhcGguc2NlbmUuQ2xhc3MuRWRnZS5TRUxFQ1RFRCwhMSkuZWFjaChhPT57aWYoYS5sYWJlbCl7Y29uc3QgYz1kMy5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJwYXRoLmVkZ2VsaW5lIik7YS5sYWJlbC5zdGFydE1hcmtlcklkJiYKYy5zdHlsZSgibWFya2VyLXN0YXJ0IixgdXJsKCMke2EubGFiZWwuc3RhcnRNYXJrZXJJZH0pYCk7YS5sYWJlbC5lbmRNYXJrZXJJZCYmYy5zdHlsZSgibWFya2VyLWVuZCIsYHVybCgjJHthLmxhYmVsLmVuZE1hcmtlcklkfSlgKX19KX0sX3VwZGF0ZU1hcmtlck9mU2VsZWN0ZWRFZGdlKGEpe2lmKGEubGFiZWwpe3ZhciBjPWEubGFiZWwuc3RhcnRNYXJrZXJJZHx8YS5sYWJlbC5lbmRNYXJrZXJJZDtpZihjKXtjb25zdCBkPWMucmVwbGFjZSgiZGF0YWZsb3ctIiwic2VsZWN0ZWQtIik7bGV0IGY9dGhpcy4kJCgiIyIrZCk7Znx8KGM9dGhpcy4kLnNjZW5lLnF1ZXJ5U2VsZWN0b3IoIiMiK2MpLGY9Yy5jbG9uZU5vZGUoITApLGYuc2V0QXR0cmlidXRlKCJpZCIsZCksZi5jbGFzc0xpc3QuYWRkKCJzZWxlY3RlZC1hcnJvd2hlYWQiKSxjLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQoZikpO2E9YS5sYWJlbC5zdGFydE1hcmtlcklkPyJtYXJrZXItc3RhcnQiOiJtYXJrZXItZW5kIjt0aGlzLl9sYXN0U2VsZWN0ZWRFZGdlR3JvdXAuc2VsZWN0QWxsKCJwYXRoLmVkZ2VsaW5lIikuc3R5bGUoYSwKYHVybCgjJHtkfSlgKX19fSxub3Q6ZnVuY3Rpb24oYSl7cmV0dXJuIWF9fSk7Cjwvc2NyaXB0PgoKCgoKPGRvbS1tb2R1bGUgaWQ9InRmLWdyYXBoLWxvYWRlciI+IDwvZG9tLW1vZHVsZT4KCjxzY3JpcHQ+Ly9+fldFQlBBVEh+fi90Zi1ncmFwaC1sb2FkZXIvdGYtZ3JhcGgtbG9hZGVyLmpzCihmdW5jdGlvbihhKXsoZnVuY3Rpb24oYyl7KGZ1bmN0aW9uKCl7UG9seW1lcih7aXM6InRmLWdyYXBoLWxvYWRlciIscHJvcGVydGllczp7ZGF0YXNldHM6QXJyYXksc2VsZWN0ZWREYXRhOnt0eXBlOk51bWJlcix2YWx1ZTowfSxzZWxlY3RlZEZpbGU6T2JqZWN0LGNvbXBhdGliaWxpdHlQcm92aWRlcjp7dHlwZTpPYmplY3QsdmFsdWU6KCk9Pm5ldyBhLmdyYXBoLm9wLlRwdUNvbXBhdGliaWxpdHlQcm92aWRlcn0sb3ZlcnJpZGluZ0hpZXJhcmNoeVBhcmFtczp7dHlwZTpPYmplY3QsdmFsdWU6KCk9Pih7fSl9LHByb2dyZXNzOnt0eXBlOk9iamVjdCxub3RpZnk6ITB9LG91dEdyYXBoSGllcmFyY2h5Ont0eXBlOk9iamVjdCxyZWFkT25seTohMCxub3RpZnk6ITB9LG91dEdyYXBoOnt0eXBlOk9iamVjdCxyZWFkT25seTohMCxub3RpZnk6ITB9LG91dEhpZXJhcmNoeVBhcmFtczp7dHlwZTpPYmplY3QscmVhZE9ubHk6ITAsbm90aWZ5OiEwfX0sb2JzZXJ2ZXJzOlsiX2xvYWREYXRhKGRhdGFzZXRzLCBzZWxlY3RlZERhdGEsIG92ZXJyaWRpbmdIaWVyYXJjaHlQYXJhbXMsIGNvbXBhdGliaWxpdHlQcm92aWRlcikiLAoiX2xvYWRGaWxlKHNlbGVjdGVkRmlsZSwgb3ZlcnJpZGluZ0hpZXJhcmNoeVBhcmFtcywgY29tcGF0aWJpbGl0eVByb3ZpZGVyKSJdLF9sb2FkRGF0YSgpe3RoaXMuZGVib3VuY2UoImxvYWQiLCgpPT57Y29uc3QgZD10aGlzLmRhdGFzZXRzW3RoaXMuc2VsZWN0ZWREYXRhXTtkJiZ0aGlzLl9wYXJzZUFuZENvbnN0cnVjdEhpZXJhcmNoaWNhbEdyYXBoKGQucGF0aCl9KX0sX3BhcnNlQW5kQ29uc3RydWN0SGllcmFyY2hpY2FsR3JhcGgoZCxmKXtjb25zdCB7b3ZlcnJpZGluZ0hpZXJhcmNoeVBhcmFtczpnLGNvbXBhdGliaWxpdHlQcm92aWRlcjpsfT10aGlzO3RoaXMucHJvZ3Jlc3M9e3ZhbHVlOjAsbXNnOiIifTtjb25zdCBrPWEuZ3JhcGgudXRpbC5nZXRUcmFja2VyKHRoaXMpLG09T2JqZWN0LmFzc2lnbih7fSxhLmdyYXBoLmhpZXJhcmNoeS5EZWZhdWx0SGllcmFyY2h5UGFyYW1zLGcpO2EuZ3JhcGgubG9hZGVyLmZldGNoQW5kQ29uc3RydWN0SGllcmFyY2hpY2FsR3JhcGgoaywKZCxmLGwsbSkudGhlbigoe2dyYXBoOnAsZ3JhcGhIaWVyYXJjaHk6cX0pPT57dGhpcy5fc2V0T3V0SGllcmFyY2h5UGFyYW1zKG0pO3RoaXMuX3NldE91dEdyYXBoKHApO3RoaXMuX3NldE91dEdyYXBoSGllcmFyY2h5KHEpfSl9LF9sb2FkRmlsZShkKXtpZihkKXtkPWQudGFyZ2V0O3ZhciBmPWQuZmlsZXNbMF07ZiYmKGQudmFsdWU9IiIsdGhpcy5fcGFyc2VBbmRDb25zdHJ1Y3RIaWVyYXJjaGljYWxHcmFwaChudWxsLGYpKX19fSl9KShjLmxvYWRlcnx8KGMubG9hZGVyPXt9KSl9KShhLmdyYXBofHwoYS5ncmFwaD17fSkpfSkodGZ8fCh0Zj17fSkpOwo8L3NjcmlwdD4KCgoKCjxzY3JpcHQ+Ly9+fldFQlBBVEh+fi90Zi1kZWJ1Z2dlci1kYXNoYm9hcmQvaGVhbHRoLXBpbGxzLmpzCnZhciBpbTsKKGZ1bmN0aW9uKGEpe2Z1bmN0aW9uIGMoZyxsKXtpZihudWxsPT1nKXRocm93IEVycm9yKGBNaXNzaW5nIHJlZlZhbHVlIGZvciBjb25kaXRpb24gKCR7bH0pLmApO31mdW5jdGlvbiBkKGcpe3JldHVybiBudWxsPT1nfHwwPT1nLmxlbmd0aHx8MSE9PWdbMF19Y29uc3QgZj17SU5GX09SX05BTjp7ZGVzY3JpcHRpb246IkNvbnRhaW5zICsvLVx1MjIxZSBvciBOYU4iLHByZWRpY2F0ZTpnPT4wPGdbMl18fDA8Z1szXXx8MDxnWzddfSxJTkY6e2Rlc2NyaXB0aW9uOiJDb250YWlucyArLy1cdTIyMWUiLHByZWRpY2F0ZTpnPT4wPGdbM118fDA8Z1s3XX0sTkFOOntkZXNjcmlwdGlvbjoiQ29udGFpbnMgTmFOIixwcmVkaWNhdGU6Zz0+MDxnWzJdfSxNQVhfR1Q6e2Rlc2NyaXB0aW9uOiJNYXggXHgzZSIscHJlZGljYXRlOihnLGwpPT57YyhsLCJNQVhfR1QiKTtyZXR1cm4gZ1s5XT5sfX0sTUFYX0xUOntkZXNjcmlwdGlvbjoiTWF4IFx4M2MiLHByZWRpY2F0ZTooZyxsKT0+e2MobCwiTUFYX0xUIik7CnJldHVybiBnWzldPGx9fSxNSU5fR1Q6e2Rlc2NyaXB0aW9uOiJNaW4gXHgzZSIscHJlZGljYXRlOihnLGwpPT57YyhsLCJNSU5fR1QiKTtyZXR1cm4gZ1s4XT5sfX0sTUlOX0xUOntkZXNjcmlwdGlvbjoiTWluIFx4M2MiLHByZWRpY2F0ZTooZyxsKT0+e2MobCwiTUlOX0xUIik7cmV0dXJuIGdbOF08bH19LE1FQU5fR1Q6e2Rlc2NyaXB0aW9uOiJNZWFuIFx4M2UiLHByZWRpY2F0ZTooZyxsKT0+e2MobCwiTUVBTl9HVCIpO3JldHVybiBnWzEwXT5sfX0sTUVBTl9MVDp7ZGVzY3JpcHRpb246Ik1lYW4gXHgzYyIscHJlZGljYXRlOihnLGwpPT57YyhsLCJNRUFOX0xUIik7cmV0dXJuIGdbMTBdPGx9fSxSQU5HRV9HVDp7ZGVzY3JpcHRpb246Ik1heCAtIE1pbiBceDNlIixwcmVkaWNhdGU6KGcsbCk9PntjKGwsIlJBTkdFX0dUIik7cmV0dXJuIGdbOV0tZ1s4XT5sfX0sUkFOR0VfTFQ6e2Rlc2NyaXB0aW9uOiJNYXggLSBNaW4gXHgzYyIscHJlZGljYXRlOihnLGwpPT57YyhsLCJSQU5HRV9MVCIpOwpyZXR1cm4gZ1s5XS1nWzhdPGx9fSxTVERERVZfR1Q6e2Rlc2NyaXB0aW9uOiJTdGFuZGFyZCBkZXZpYXRpb24gXHgzZSIscHJlZGljYXRlOihnLGwpPT57YyhsLCJTVERERVZfR1QiKTtyZXR1cm4gTWF0aC5zcXJ0KGdbMTFdKT5sfX0sU1REREVWX0xUOntkZXNjcmlwdGlvbjoiU3RhbmRhcmQgZGV2aWF0aW9uIFx4M2MiLHByZWRpY2F0ZTooZyxsKT0+e2MobCwiU1REREVWX0xUIik7cmV0dXJuIE1hdGguc3FydChnWzExXSk8bH19fTthLnRlbnNvckNvbmRpdGlvbkRlc2NyaXB0aW9uMktleT1mdW5jdGlvbihnKXtmb3IoY29uc3QgbCBpbiBmKWlmKGYuaGFzT3duUHJvcGVydHkobCkmJmZbbF0uZGVzY3JpcHRpb249PT1nKXJldHVybiBsO3JldHVybiBudWxsfTthLmNoZWNrSGVhbHRoUGlsbEFnYWluc3RUZW5zb3JDb25kaXRpb25LZXk9ZnVuY3Rpb24oZyxsLGspe2lmKGQobCkpcmV0dXJuITE7Zz1mW2ddLnByZWRpY2F0ZTtyZXR1cm4gZyhsLGspfX0pKGltfHwoaW09e30pKTsKPC9zY3JpcHQ+CgoKCgoKCgoKPGRvbS1tb2R1bGUgaWQ9InRmLWRlYnVnZ2VyLWNvbnRpbnVlLWRpYWxvZyI+CiAgPHRlbXBsYXRlPgogICAgPHBhcGVyLWJ1dHRvbiByYWlzZWQgY2xhc3M9ImNvbnRpbnVlLWJ1dHRvbiIgb24tY2xpY2s9Il9jb250aW51ZUJ1dHRvbkNhbGxiYWNrIj4KICAgICAgPHNwYW4+W1tfY29udGludWVCdXR0b25UZXh0XV08L3NwYW4+CiAgICA8L3BhcGVyLWJ1dHRvbj4KICAgIDxwYXBlci1kaWFsb2cgd2l0aC1iYWNrZHJvcCBpZD0iY29udGludWVEaWFsb2ciPgogICAgICA8aDI+Q29udGludWUuLi48L2gyPgogICAgICA8ZGl2IGNsYXNzPSJjb250aW51ZS10by10eXBlIj4KICAgICAgICA8ZGl2IGNsYXNzPSJjb250aW51ZS10by10eXBlLW5hbWUiPgogICAgICAgICAgT3ZlciBTZXNzaW9uIFJ1bnM6CiAgICAgICAgPC9kaXY+CiAgICAgICAgPHBhcGVyLWlucHV0IGlkPSJjb250aW51ZU51bSIgY2xhc3M9ImlucHV0LWJveCIgbGFiZWw9Ik51bWJlciBvZiBTZXNzaW9uIFJ1bnMgKGluY2x1ZGluZyB0aGUgY3VycmVudCBvbmUpOiIgYWx3YXlzLWZsb2F0LWxhYmVsIHR5cGU9Im51bWJlciIgbWluPSIxIiBzdGVwPSIxIiB2YWx1ZT0ie3tjb250aW51ZU51bX19Ij48L3BhcGVyLWlucHV0PgogICAgICAgIDxwYXBlci1pY29uLWJ1dHRvbiBjbGFzcz0iZ28tYnV0dG9uIiBpY29uPSJhcnJvdy1mb3J3YXJkIiB0aXRsZT0iU2Vzc2lvbiBSdW5zIEdvIiBvbi10YXA9Il9zZXNzaW9uUnVuR29CdXR0b25DYWxsYmFjayI+CiAgICAgICAgPC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNvbnRpbnVlLXRvLXR5cGUiPgogICAgICAgIDxkaXYgY2xhc3M9ImNvbnRpbnVlLXRvLXR5cGUtbmFtZSI+CiAgICAgICAgICBUaWxsIENvbmRpdGlvbiBNZXQgYnkgV2F0Y2hlZCBUZW5zb3IKICAgICAgICA8L2Rpdj4KICAgICAgICA8cGFwZXItZHJvcGRvd24tbWVudSBpZD0idGVuc29yQ29uZGl0aW9uRHJvcGRvd24iIGNsYXNzPSJpbnB1dC1ib3giIG5vLWxhYmVsLWZsb2F0PSJ0cnVlIiBsYWJlbD0iVGVuc29yIENvbmRpdGlvbiIgc2VsZWN0ZWQtaXRlbS1sYWJlbD0ie3tfc2VsZWN0ZWRUZW5zb3JDb25kaXRpb259fSI+CiAgICAgICAgICAKICAgICAgICAgIDxwYXBlci1saXN0Ym94IGlkPSJ0ZW5zb3JDb25kaXRpb25NZW51IiBjbGFzcz0iZHJvcGRvd24tY29udGVudCIgc2xvdD0iZHJvcGRvd24tY29udGVudCI+CiAgICAgICAgICAgIDxwYXBlci1pdGVtIG5vLWxhYmVsLWZsb2F0PSJ0cnVlIj5Db250YWlucyArLy3iiJ4gb3IgTmFOPC9wYXBlci1pdGVtPgogICAgICAgICAgICA8cGFwZXItaXRlbSBuby1sYWJlbC1mbG9hdD0idHJ1ZSI+Q29udGFpbnMgKy8t4oiePC9wYXBlci1pdGVtPgogICAgICAgICAgICA8cGFwZXItaXRlbSBuby1sYWJlbC1mbG9hdD0idHJ1ZSI+Q29udGFpbnMgTmFOPC9wYXBlci1pdGVtPgogICAgICAgICAgICA8cGFwZXItaXRlbSBuby1sYWJlbC1mbG9hdD0idHJ1ZSI+TWF4ICZndDs8L3BhcGVyLWl0ZW0+CiAgICAgICAgICAgIDxwYXBlci1pdGVtIG5vLWxhYmVsLWZsb2F0PSJ0cnVlIj5NYXggJmx0OzwvcGFwZXItaXRlbT4KICAgICAgICAgICAgPHBhcGVyLWl0ZW0gbm8tbGFiZWwtZmxvYXQ9InRydWUiPk1pbiAmZ3Q7PC9wYXBlci1pdGVtPgogICAgICAgICAgICA8cGFwZXItaXRlbSBuby1sYWJlbC1mbG9hdD0idHJ1ZSI+TWluICZsdDs8L3BhcGVyLWl0ZW0+CiAgICAgICAgICAgIDxwYXBlci1pdGVtIG5vLWxhYmVsLWZsb2F0PSJ0cnVlIj5NYXggLSBNaW4gJmd0OzwvcGFwZXItaXRlbT4KICAgICAgICAgICAgPHBhcGVyLWl0ZW0gbm8tbGFiZWwtZmxvYXQ9InRydWUiPk1heCAtIE1pbiAmbHQ7PC9wYXBlci1pdGVtPgogICAgICAgICAgICA8cGFwZXItaXRlbSBuby1sYWJlbC1mbG9hdD0idHJ1ZSI+TWVhbiAmZ3Q7PC9wYXBlci1pdGVtPgogICAgICAgICAgICA8cGFwZXItaXRlbSBuby1sYWJlbC1mbG9hdD0idHJ1ZSI+TWVhbiAmbHQ7PC9wYXBlci1pdGVtPgogICAgICAgICAgICA8cGFwZXItaXRlbSBuby1sYWJlbC1mbG9hdD0idHJ1ZSI+U3RhbmRhcmQgZGV2aWF0aW9uICZndDs8L3BhcGVyLWl0ZW0+CiAgICAgICAgICAgIDxwYXBlci1pdGVtIG5vLWxhYmVsLWZsb2F0PSJ0cnVlIj5TdGFuZGFyZCBkZXZpYXRpb24gJmx0OzwvcGFwZXItaXRlbT4KICAgICAgICAgIDwvcGFwZXItbGlzdGJveD4KICAgICAgICA8L3BhcGVyLWRyb3Bkb3duLW1lbnU+CiAgICAgICAgPHBhcGVyLWljb24tYnV0dG9uIGNsYXNzPSJnby1idXR0b24iIGljb249ImFycm93LWZvcndhcmQiIHRpdGxlPSJUZW5zb3IgQ29uZGl0aW9uIEdvIiBvbi10YXA9Il90ZW5zb3JDb250aW51ZUdvQnV0dG9uQ2FsbGJhY2siPgogICAgICAgIDwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgICAgPHBhcGVyLWlucHV0IGlkPSJyZWYtdmFsdWUiIGNsYXNzPSJpbnB1dC1ib3giIGxhYmVsPSJSZWZlcmVuY2UgdmFsdWUgdG8gY29tcGFyZSB0byIgdHlwZT0ibnVtYmVyIiB2YWx1ZT0ie3tfdGVuc29yQ29uZGl0aW9uUmVmVmFsdWV9fSIgaGlkZGVuPSJbW19pc1JlZlZhbHVlSW5wdXRIaWRkZW5dXSI+CiAgICAgICAgPC9wYXBlci1pbnB1dD4KICAgICAgPC9kaXY+CiAgICA8L3BhcGVyLWRpYWxvZz4KICAgIDxzdHlsZSBpbmNsdWRlPSJkYXNoYm9hcmQtc3R5bGUiPjwvc3R5bGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IC5jb250aW51ZS10by10eXBlLW5hbWUgewogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICB9CiAgICAgIDpob3N0IHBhcGVyLWRpYWxvZyB7CiAgICAgICAgd2lkdGg6IDM2dnc7CiAgICAgIH0KICAgICAgOmhvc3QgLmlucHV0LWJveCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB3aWR0aDogODAlOwogICAgICAgIGZvbnQtc2l6ZTogMTEwJTsKICAgICAgfQogICAgICA6aG9zdCAuZ28tYnV0dG9uIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDE1JTsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KICA8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdGYtZGVidWdnZXItZGFzaGJvYXJkL3RmLWRlYnVnZ2VyLWNvbnRpbnVlLWRpYWxvZy5odG1sLmpzClBvbHltZXIoe2lzOiJ0Zi1kZWJ1Z2dlci1jb250aW51ZS1kaWFsb2ciLHByb3BlcnRpZXM6e2NvbnRpbnVlTnVtOnt0eXBlOk51bWJlcix2YWx1ZTo1fSxzZXNzaW9uUnVuR286RnVuY3Rpb24sdGVuc29yQ29uZGl0aW9uR286RnVuY3Rpb24sZm9yY2VDb250aW51YXRpb25TdG9wOkZ1bmN0aW9uLF9jb250aW51ZUJ1dHRvblRleHQ6e3R5cGU6U3RyaW5nLHZhbHVlOiJDb250aW51ZS4uLiJ9LF9jb250aW51ZUJ1dHRvbkNvbnRpbnVlVGV4dDp7dHlwZTpTdHJpbmcsdmFsdWU6IkNvbnRpbnVlLi4uIixyZWFkb25seTohMH0sX2NvbnRpbnVlQnV0dG9uU3RvcFRleHQ6e3R5cGU6U3RyaW5nLHZhbHVlOiJTdG9wIENvbnRpbnVhdGlvbiIscmVhZG9ubHk6ITB9LF9zZWxlY3RlZFRlbnNvckNvbmRpdGlvbjpTdHJpbmcsX3RlbnNvckNvbmRpdGlvblJlZlZhbHVlOnt0eXBlOk51bWJlcix2YWx1ZTowLG5vdGlmeTohMH0sX2lzUmVmVmFsdWVJbnB1dEhpZGRlbjp7dHlwZTpCb29sZWFuLHZhbHVlOiEwLApub3RpZnk6ITB9fSxvYnNlcnZlcnM6WyJfb25TZWxlY3RlZFRlbnNvckNvbmRpdGlvbkNoYW5nZWQoX3NlbGVjdGVkVGVuc29yQ29uZGl0aW9uKSJdLG5vdGlmeUNvbnRpbnVhdGlvblN0b3AoKXt0aGlzLnVwZGF0ZUNvbnRpbnVlQnV0dG9uVGV4dCghMSl9LF9vcGVuRGlhbG9nKCl7dGhpcy4kLmNvbnRpbnVlRGlhbG9nLm9wZW4oKX0sX2Nsb3NlRGlhbG9nKCl7dGhpcy4kLmNvbnRpbnVlRGlhbG9nLmNsb3NlKCl9LF9jb250aW51ZUJ1dHRvbkNhbGxiYWNrKCl7dGhpcy5fY29udGludWVCdXR0b25UZXh0PT09dGhpcy5fY29udGludWVCdXR0b25TdG9wVGV4dD90aGlzLmZvcmNlQ29udGludWF0aW9uU3RvcCgpOnRoaXMuX29wZW5EaWFsb2coKX0sdXBkYXRlQ29udGludWVCdXR0b25UZXh0KGEpe3RoaXMuc2V0KCJfY29udGludWVCdXR0b25UZXh0IixhP3RoaXMuX2NvbnRpbnVlQnV0dG9uU3RvcFRleHQ6dGhpcy5fY29udGludWVCdXR0b25Db250aW51ZVRleHQpfSxfc2Vzc2lvblJ1bkdvQnV0dG9uQ2FsbGJhY2soKXswPAp0aGlzLmNvbnRpbnVlTnVtPyh0aGlzLnNlc3Npb25SdW5Hbyh0aGlzLmNvbnRpbnVlTnVtKSx0aGlzLnVwZGF0ZUNvbnRpbnVlQnV0dG9uVGV4dCghMCksdGhpcy5fY2xvc2VEaWFsb2coKSk6dGhpcy5zZXQoImNvbnRpbnVlTnVtIiwxKX0sX3RlbnNvckNvbnRpbnVlR29CdXR0b25DYWxsYmFjaygpe2lmKG51bGwhPXRoaXMuX3NlbGVjdGVkVGVuc29yQ29uZGl0aW9uKXt2YXIgYT1pbS50ZW5zb3JDb25kaXRpb25EZXNjcmlwdGlvbjJLZXkodGhpcy5fc2VsZWN0ZWRUZW5zb3JDb25kaXRpb24pO251bGw9PWEmJmNvbnNvbGUuZXJyb3IoIkludmFsaWQgVGVuc29yIENvbmRpdGlvbiBuYW1lOiIrdGhpcy5fc2VsZWN0ZWRUZW5zb3JDb25kaXRpb24pO3ZhciBjPU51bWJlcih0aGlzLl90ZW5zb3JDb25kaXRpb25SZWZWYWx1ZSk7TnVtYmVyLmlzRmluaXRlKGMpPyh0aGlzLnRlbnNvckNvbmRpdGlvbkdvKGEsYyksdGhpcy51cGRhdGVDb250aW51ZUJ1dHRvblRleHQoITApLHRoaXMuX2Nsb3NlRGlhbG9nKCkpOgp0aGlzLnNldCgiX3RlbnNvckNvbmRpdGlvblJlZlZhbHVlIiwwKX19LF9vblNlbGVjdGVkVGVuc29yQ29uZGl0aW9uQ2hhbmdlZChhKXthPWltLnRlbnNvckNvbmRpdGlvbkRlc2NyaXB0aW9uMktleShhKTt0aGlzLnNldCgiX2lzUmVmVmFsdWVJbnB1dEhpZGRlbiIsLTEhPT1bIklORl9PUl9OQU4iLCJJTkYiLCJOQU4iXS5pbmRleE9mKGEpKX19KTsKPC9zY3JpcHQ+CjwvZG9tLW1vZHVsZT4KCgoKCjxkb20tbW9kdWxlIGlkPSJ0Zi1kZWJ1Z2dlci1pbml0aWFsLWRpYWxvZyI+CiAgPHRlbXBsYXRlPgogICAgCiAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX29wZW5dXSI+CiAgICAgIDxkaXYgaWQ9ImRhc2hib2FyZC1iYWNrZHJvcCI+PC9kaXY+CiAgICA8L3RlbXBsYXRlPgogICAgPHBhcGVyLWRpYWxvZyBpZD0iZGlhbG9nIiBuby1jYW5jZWwtb24tb3V0c2lkZS1jbGljayBuby1jYW5jZWwtb24tZXNjLWtleSBvcGVuZWQ9Int7X29wZW59fSI+CiAgICAgIDxoMiBpZD0iZGlhbG9nLXRpdGxlIj5bW190aXRsZV1dPC9oMj4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19oYXNDdXN0b21NZXNzYWdlXV0iPgogICAgICAgIDxkaXYgY2xhc3M9ImN1c3RvbS1tZXNzYWdlIj5bW19jdXN0b21NZXNzYWdlXV08L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbWyFfaGFzQ3VzdG9tTWVzc2FnZV1dIj4KICAgICAgICA8ZGl2IGNsYXNzPSJjb2RlLWV4YW1wbGUiPgogICAgICAgICAgPGRpdiBjbGFzcz0iY29kZS1leGFtcGxlLXNlY3Rpb24iPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2RlLWV4YW1wbGUtc2VjdGlvbi10aXRsZSI+CiAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvYXBpX2RvY3MvcHl0aG9uL3RmL1Nlc3Npb24iIHRhcmdldD0iX2JsYW5rIiByZWw9Im5vb3BlbmVyIG5vcmVmZXJyZXIiPnRmLlNlc3Npb248L2E+OgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPHByZSBjbGFzcz0iY29kZS1zbmlwcGV0Ij5pbXBvcnQgdGVuc29yZmxvdyBhcyB0Zgpmcm9tIHRlbnNvcmZsb3cucHl0aG9uIGltcG9ydCBkZWJ1ZyBhcyB0Zl9kZWJ1ZwoKc2VzcyA9IHRmLlNlc3Npb24oKQpzZXNzID0gdGZfZGVidWcuVGVuc29yQm9hcmREZWJ1Z1dyYXBwZXJTZXNzaW9uKHNlc3MsICJbW19ob3N0XV06W1tfcG9ydF1dIikKc2Vzcy5ydW4obXlfZmV0Y2hlcykKICAgICAgICAgIDwvcHJlPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2RlLWV4YW1wbGUtc2VjdGlvbiI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvZGUtZXhhbXBsZS1zZWN0aW9uLXRpdGxlIj4KICAgICAgICAgICAgICA8YSBocmVmPSJodHRwczovL3d3dy50ZW5zb3JmbG93Lm9yZy9wcm9ncmFtbWVyc19ndWlkZS9lc3RpbWF0b3JzIiB0YXJnZXQ9Il9ibGFuayIgcmVsPSJub29wZW5lciBub3JlZmVycmVyIj5Fc3RpbWF0b3I8L2E+CiAgICAgICAgICAgICAgfAogICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL2FwaV9kb2NzL3B5dGhvbi90Zi90cmFpbi9Nb25pdG9yZWRTZXNzaW9uIiB0YXJnZXQ9Il9ibGFuayIgcmVsPSJub29wZW5lciBub3JlZmVycmVyIj5Nb25pdG9yZWRTZXNzaW9uPC9hPjoKICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxwcmUgY2xhc3M9ImNvZGUtc25pcHBldCI+aW1wb3J0IHRlbnNvcmZsb3cgYXMgdGYKZnJvbSB0ZW5zb3JmbG93LnB5dGhvbiBpbXBvcnQgZGVidWcgYXMgdGZfZGVidWcKCmhvb2sgPSB0Zl9kZWJ1Zy5UZW5zb3JCb2FyZERlYnVnSG9vaygiW1tfaG9zdF1dOltbX3BvcnRdXSIpCm15X2VzdGltYXRvci5maXQoeD14X2RhdGEsIHk9eV9kYXRhLCBzdGVwcz0xMDAwLCBtb25pdG9ycz1baG9va10pCiAgICAgICAgICAgIDwvcHJlPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2RlLWV4YW1wbGUtc2VjdGlvbiI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvZGUtZXhhbXBsZS1zZWN0aW9uLXRpdGxlIj4KICAgICAgICAgICAgICA8YSBocmVmPSJodHRwczovL2tlcmFzLmlvL21vZGVscy9tb2RlbC8iIHRhcmdldD0iX2JsYW5rIiByZWw9Im5vb3BlbmVyIG5vcmVmZXJyZXIiPktlcmFzIE1vZGVsPC9hPjoKICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxwcmUgY2xhc3M9ImNvZGUtc25pcHBldCI+aW1wb3J0IHRlbnNvcmZsb3cgYXMgdGYKZnJvbSB0ZW5zb3JmbG93LnB5dGhvbiBpbXBvcnQgZGVidWcgYXMgdGZfZGVidWcKaW1wb3J0IGtlcmFzCgprZXJhcy5iYWNrZW5kLnNldF9zZXNzaW9uKAogICAgdGZfZGVidWcuVGVuc29yQm9hcmREZWJ1Z1dyYXBwZXJTZXNzaW9uKHRmLlNlc3Npb24oKSwgIltbX2hvc3RdXTpbW19wb3J0XV0iKSkKIyBEZWZpbmUgeW91ciBrZXJhcyBtb2RlbCwgY2FsbGVkICJtb2RlbCIuCm1vZGVsLmZpdCguLi4pCiAgICAgICAgICAgIDwvcHJlPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICA8L3BhcGVyLWRpYWxvZz4KICAgIDxzdHlsZT4KICAgICAgLyoqIFdlIHJlbHkgb24gYSBzZXBhcmF0ZSBgX2hpZGRlbmAgcHJvcGVydHkgaW5zdGVhZCBvZiBkaXJlY3RseSBtYWtpbmcgdXNlCiAgICAgICAgICBvZiB0aGUgYF9vcGVuYCBhdHRyaWJ1dGUgYmVjYXVzZSB0aGlzIENTUyBzcGVjaWZpY2F0aW9uIG1heSBzdHJhbmdlbHkKICAgICAgICAgIGFmZmVjdCBvdGhlciBlbGVtZW50cyB0aHJvdWdob3V0IFRlbnNvckJvYXJkLiBTZWUgIzg5OS4gKi8KICAgICAgOmhvc3QoW19oaWRkZW5dKSB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQogICAgICA6aG9zdCwKICAgICAgI2Rhc2hib2FyZC1iYWNrZHJvcCB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMDsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgfQoKICAgICAgI2Rhc2hib2FyZC1iYWNrZHJvcCB7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjYpOwogICAgICB9CgogICAgICAuY29kZS1leGFtcGxlIHsKICAgICAgICBtYXJnaW46IDEwcHg7CiAgICAgICAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKICAgICAgfQogICAgICAuY29kZS1leGFtcGxlLXNlY3Rpb24gewogICAgICAgIHBhZGRpbmctYm90dG9tOiAxNXB4OwogICAgICB9CiAgICAgIC5jb2RlLWV4YW1wbGUtc2VjdGlvbi10aXRsZSB7CiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICAgIH0KICAgICAgLmNvZGUtc25pcHBldCB7CiAgICAgICAgcGFkZGluZy1sZWZ0OiAxZW07CiAgICAgIH0KCiAgICAgICNkaWFsb2ctdGl0bGUgewogICAgICAgIHBhZGRpbmctYm90dG9tOiAxNXB4OwogICAgICB9CgogICAgICAuY3VzdG9tLW1lc3NhZ2UgewogICAgICAgIG1hcmdpbi10b3A6IDA7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTVweDsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgogIDxzY3JpcHQ+Ly9+fldFQlBBVEh+fi90Zi1kZWJ1Z2dlci1kYXNoYm9hcmQvdGYtZGVidWdnZXItaW5pdGlhbC1kaWFsb2cuaHRtbC5qcwpQb2x5bWVyKHtpczoidGYtZGVidWdnZXItaW5pdGlhbC1kaWFsb2ciLHByb3BlcnRpZXM6e190aXRsZTp7dHlwZTpTdHJpbmcsdmFsdWU6bnVsbH0sX2N1c3RvbU1lc3NhZ2U6e3R5cGU6U3RyaW5nLHZhbHVlOm51bGx9LF9oYXNDdXN0b21NZXNzYWdlOnt0eXBlOkJvb2xlYW4sY29tcHV0ZWQ6Il9jb21wdXRlSGFzQ3VzdG9tTWVzc2FnZShfY3VzdG9tTWVzc2FnZSkifSxfaG9zdDp7dHlwZTpTdHJpbmcsdmFsdWU6bnVsbH0sX3BvcnQ6e3R5cGU6U3RyaW5nLHZhbHVlOm51bGx9LF9vcGVuOnt0eXBlOkJvb2xlYW59LF9oaWRkZW46e3R5cGU6Qm9vbGVhbixjb21wdXRlZDoiX2NvbXB1dGVIaWRkZW4oX29wZW4pIixyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9fSxvcGVuRGlhbG9nKGEsYyl7dGhpcy5zZXQoIl90aXRsZSIsIkRlYnVnZ2VyIGlzIHdhaXRpbmcgZm9yIFNlc3Npb24ucnVuKCkgY29ubmVjdGlvbnMuLi4iKTt0aGlzLnNldCgiX2N1c3RvbU1lc3NhZ2UiLG51bGwpO3RoaXMuJC5kaWFsb2cub3BlbigpOwpudWxsIT1hJiZudWxsIT1jJiYodGhpcy5zZXQoIl9ob3N0IixhKSx0aGlzLnNldCgiX3BvcnQiLGMpKX0sY2xvc2VEaWFsb2coKXt0aGlzLiQuZGlhbG9nLmNsb3NlKCl9LG9wZW5EaXNhYmxlZERpYWxvZygpe3RoaXMuc2V0KCJfdGl0bGUiLCJEZWJ1Z2dlciBpcyBub3QgZW5hYmxlZCBpbiB0aGlzIFRlbnNvckJvYXJkIGluc3RhbmNlIik7dGhpcy5zZXQoIl9jdXN0b21NZXNzYWdlIiwiVG8gZW5hYmxlIHRoZSBkZWJ1Z2dlciBpbiBUZW5zb3JCb2FyZCwgdXNlIHRoZSBmbGFnOiAtLWRlYnVnZ2VyX3BvcnQgXHgzY3BvcnRfbnVtYmVyXHgzZSIpO3RoaXMuJC5kaWFsb2cub3BlbigpfSxfY29tcHV0ZUhpZGRlbihhKXtyZXR1cm4hYX0sX2NvbXB1dGVIYXNDdXN0b21NZXNzYWdlKGEpe3JldHVybiFfLmlzRW1wdHkoYSl9fSk7Cjwvc2NyaXB0Pgo8L2RvbS1tb2R1bGU+CgoKCgoKPGRvbS1tb2R1bGUgaWQ9InRmLWRlYnVnZ2VyLXJlc2l6ZXIiPgogIDx0ZW1wbGF0ZT4KICAgIDxkaXYgY2xhc3M9ImJhcnMiPgogICAgICA8ZGl2IGNsYXNzPSJiYXJzLXJvdGF0b3IiPgogICAgICAgIDxzcGFuIGNsYXNzPSJiYXJzLXRleHQiPnwgfDwvc3Bhbj4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QoW19yZXNpemVyLWlkZW50aWZpZXJdKSB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGJhY2tncm91bmQ6ICNjY2M7CiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIH0KCiAgICAgIDpob3N0KFtpcy1ob3Jpem9udGFsXSkgewogICAgICAgIGN1cnNvcjogcm93LXJlc2l6ZTsKICAgICAgICBoZWlnaHQ6IDEwcHg7CiAgICAgICAgbGVmdDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgfQoKICAgICAgOmhvc3QoW19pcy12ZXJ0aWNhbF0pIHsKICAgICAgICBjdXJzb3I6IGNvbC1yZXNpemU7CiAgICAgICAgcmlnaHQ6IC0xNXB4OwogICAgICAgIHRvcDogMDsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgd2lkdGg6IDEwcHg7CiAgICAgIH0KCiAgICAgIC5iYXJzIHsKICAgICAgICB3aWR0aDogODAlOwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiA1MCU7CiAgICAgICAgbGVmdDogNTAlOwogICAgICAgIGZvbnQtc2l6ZTogNXB4OwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpOwogICAgICB9CgogICAgICAvKiogVGhpcyBibG9jayBwcmV2ZW50cyB0aGUgYmFycyByb3RhdG9yIGZyb20gaGF2aW5nIGEgaGVpZ2h0IHRoYXQgaXMKICAgICAgICAgIHRoZSBlbnRpcmUgdmlld3BvcnQsIHRodXMgb2NjbHVkaW5nIGl0IGFuZCBnaXZpbmcgaXQgYW4gdW5kZXNpcmVkIGN1cnNvcgogICAgICAgICAgdmFsdWUuICovCiAgICAgIC5iYXJzLXJvdGF0b3IgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgfQoKICAgICAgOmhvc3QoW2lzLWhvcml6b250YWxdKSAuYmFycy1yb3RhdG9yIHsKICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSg5MGRlZyk7CiAgICAgIH0KCiAgICAgIC5iYXJzLXRleHQgewogICAgICAgIHRyYW5zZm9ybTogc2NhbGVZKDE1KTsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KICA8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdGYtZGVidWdnZXItZGFzaGJvYXJkL3RmLWRlYnVnZ2VyLXJlc2l6ZXIuaHRtbC5qcwpQb2x5bWVyKHtpczoidGYtZGVidWdnZXItcmVzaXplciIscHJvcGVydGllczp7Y3VycmVudExlbmd0aDp7dHlwZTpOdW1iZXIsbm90aWZ5OiEwfSxtaW5MZW5ndGg6TnVtYmVyLG1heExlbmd0aDpOdW1iZXIsaXNIb3Jpem9udGFsOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEscmVmbGVjdFRvQXR0cmlidXRlOiEwfSxfcmVzaXplcklkZW50aWZpZXI6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMCxyZWFkT25seTohMCxyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9LF9pc1ZlcnRpY2FsOnt0eXBlOkJvb2xlYW4sY29tcHV0ZWQ6Il9jb21wdXRlSXNWZXJ0aWNhbChpc0hvcml6b250YWwpIixyZWZsZWN0VG9BdHRyaWJ1dGU6ITAscmVhZE9ubHk6ITB9LF9kcmFnU3RhcnRQb3NpdGlvbjpOdW1iZXIsX2RyYWdTdGFydExlbmd0aDpOdW1iZXIsX3ByZXZpb3VzTW91c2VNb3ZlQ2FsbGJhY2s6T2JqZWN0LF9wcmV2aW91c01vdXNlVXBDYWxsYmFjazpPYmplY3R9LGxpc3RlbmVyczp7bW91c2Vkb3duOiJfaGFuZGxlTW91c2VEb3duIn0sCl9oYW5kbGVNb3VzZURvd24oYSl7YS5wcmV2ZW50RGVmYXVsdCgpO3RoaXMuX2VuZERyYWcoKTt0aGlzLl9wcmV2aW91c01vdXNlTW92ZUNhbGxiYWNrPWM9PntjLnByZXZlbnREZWZhdWx0KCk7Yz10aGlzLl9kcmFnU3RhcnRMZW5ndGgrKHRoaXMuX2dldFBvc2l0aW9uUmVsYXRpdmVUb1ZpZXdwb3J0KGMpLXRoaXMuX2RyYWdTdGFydFBvc2l0aW9uKTtjPU1hdGgubWF4KGMsdGhpcy5taW5MZW5ndGgpO2M9TWF0aC5taW4oYyx0aGlzLm1heExlbmd0aCk7dGhpcy5zZXQoImN1cnJlbnRMZW5ndGgiLGMpfTt0aGlzLl9wcmV2aW91c01vdXNlVXBDYWxsYmFjaz1jPT57Yy5wcmV2ZW50RGVmYXVsdCgpO3RoaXMuX2VuZERyYWcoKX07dGhpcy5zZXQoIl9kcmFnU3RhcnRQb3NpdGlvbiIsdGhpcy5fZ2V0UG9zaXRpb25SZWxhdGl2ZVRvVmlld3BvcnQoYSkpO3RoaXMuc2V0KCJfZHJhZ1N0YXJ0TGVuZ3RoIix0aGlzLmN1cnJlbnRMZW5ndGgpO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXVwIiwKdGhpcy5fcHJldmlvdXNNb3VzZVVwQ2FsbGJhY2ssITEpO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLHRoaXMuX3ByZXZpb3VzTW91c2VNb3ZlQ2FsbGJhY2ssITEpfSxfZ2V0UG9zaXRpb25SZWxhdGl2ZVRvVmlld3BvcnQoYSl7cmV0dXJuIHRoaXMuaXNIb3Jpem9udGFsP2EuY2xpZW50WTphLmNsaWVudFh9LF9lbmREcmFnKCl7d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsdGhpcy5fcHJldmlvdXNNb3VzZU1vdmVDYWxsYmFjaywhMSk7dGhpcy5fcHJldmlvdXNNb3VzZU1vdmVDYWxsYmFjaz1udWxsO3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZXVwIix0aGlzLl9wcmV2aW91c01vdXNlVXBDYWxsYmFjaywhMSk7dGhpcy5fcHJldmlvdXNNb3VzZVVwQ2FsbGJhY2s9bnVsbH0sX2NvbXB1dGVJc1ZlcnRpY2FsKGEpe3JldHVybiFhfX0pOwo8L3NjcmlwdD4KPC9kb20tbW9kdWxlPgoKCgoKCgoKCgoKCgo8ZG9tLW1vZHVsZSBpZD0idGYtb3Atc2VsZWN0b3IiPgogIDx0ZW1wbGF0ZT4KICAgIDxkaXY+CiAgICAgIDxwYXBlci1kcm9wZG93bi1tZW51IGlkPSJmaWx0ZXItbW9kZSIgbm8tbGFiZWwtZmxvYXQ9InRydWUiIGxhYmVsPSJGaWx0ZXIgTW9kZSIgc2VsZWN0ZWQtaXRlbS1sYWJlbD0ie3tfZmlsdGVyTW9kZX19Ij4KICAgICAgICA8cGFwZXItbGlzdGJveCBjbGFzcz0iZHJvcGRvd24tY29udGVudCIgc2xvdD0iZHJvcGRvd24tY29udGVudCI+CiAgICAgICAgICA8cGFwZXItaXRlbSBuby1sYWJlbC1mbG9hdD0idHJ1ZSI+Tm9kZSBOYW1lPC9wYXBlci1pdGVtPgogICAgICAgICAgPHBhcGVyLWl0ZW0gbm8tbGFiZWwtZmxvYXQ9InRydWUiPk9wIFR5cGU8L3BhcGVyLWl0ZW0+CiAgICAgICAgPC9wYXBlci1saXN0Ym94PgogICAgICA8L3BhcGVyLWRyb3Bkb3duLW1lbnU+CiAgICAgIDxwYXBlci1pbnB1dCBpZD0iZmlsdGVyLWlucHV0IiBsYWJlbD0iRmlsdGVyIFJlZ2V4IiBhbHdheXMtZmxvYXQtbGFiZWwgdmFsdWU9Int7X2ZpbHRlcklucHV0fX0iPjwvcGFwZXItaW5wdXQ+CiAgICA8L2Rpdj4KICAgIDxwYXBlci1zcGlubmVyLWxpdGUgYWN0aXZlIGNsYXNzPSJzcGlubmVyIiBpZD0ibG9hZGluZy1zcGlubmVyIiBoaWRkZW49IltbIV9pc0xvYWRpbmddXSI+CiAgICA8L3BhcGVyLXNwaW5uZXItbGl0ZT4KICAgIDxkaXYgaWQ9InNlbGVjdG9yLWhpZXJhcmNoeSI+PC9kaXY+CiAgICA8c3R5bGU+CiAgICAgIC5pbmRlbnRlZC1sZXZlbC1jb250YWluZXIgLmNvbnRlbnQtY29udGFpbmVyIHsKICAgICAgICBtYXJnaW46IDAgMCAwIDIwcHg7CiAgICAgIH0KCiAgICAgIC5sZXZlbC1jb250YWluZXIgaXJvbi1jb2xsYXBzZSB7CiAgICAgICAgcGFkZGluZzogMCAwIDAgMjBweDsKICAgICAgfQoKICAgICAgcGFwZXItY2hlY2tib3ggewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICB3aWR0aDogMThweDsKICAgICAgICBoZWlnaHQ6IDE4cHg7CiAgICAgICAgbWFyZ2luOiAwIDhweCAwIDA7CiAgICAgIH0KCiAgICAgIC5vcC10eXBlIHsKICAgICAgICBwYWRkaW5nLXJpZ2h0OiAxMHB4OwogICAgICAgIGNvbG9yOiAjNDQ0OwogICAgICB9CgogICAgICAub3AtdGl0bGUtbGVhZiB7CiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICB9CgogICAgICAub3AtdGl0bGUtbGVhZjpob3ZlciB7CiAgICAgICAgY29sb3I6IGJsdWU7CiAgICAgIH0KCiAgICAgIC5wYXJ0aWFsLWNoZWNrYm94IHsKICAgICAgICBiYWNrZ3JvdW5kOiAjZjU3YzAwOwogICAgICB9CgogICAgICAubm9kZS1leHBhbmQtYnV0dG9uIHsKICAgICAgICBtYXJnaW46IDAgMCAwIC0xM3B4OwogICAgICB9CgogICAgICAubGV2ZWwtdGl0bGUtdGV4dCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIGZvbnQtd2VpZ2h0OiA4MDA7CiAgICAgICAgbWFyZ2luOiAwIDAgMCAtMXB4OwogICAgICB9CgogICAgICAub3AtZGVzY3JpcHRpb24gewogICAgICAgIGZvbnQtd2VpZ2h0OiAzMDA7CiAgICAgICAgbWFyZ2luOiAwIDAgMCAyN3B4OwogICAgICAgIHBhZGRpbmc6IDEwcHggMDsKICAgICAgfQoKICAgICAgLnNwaW5uZXIgewogICAgICAgIHdpZHRoOiAyMHB4OwogICAgICAgIGhlaWdodDogMjBweDsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwogICAgICB9CgogICAgICAjZmlsdGVyLW1vZGUgewogICAgICAgIHdpZHRoOiAxNTBweDsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgIH0KCiAgICAgICNmaWx0ZXItaW5wdXQgewogICAgICAgIHdpZHRoOiAyNTBweDsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgIH0KCiAgICAgIC5oaWdobGlnaHRlZCB7CiAgICAgICAgY29sb3I6IHJlZDsKICAgICAgfQogICAgICAuaGlnaGxpZ2h0ZWQgPiAub3AtdHlwZSB7CiAgICAgICAgY29sb3I6IHJlZDsKICAgICAgfQoKICAgICAgI3NlbGVjdG9yLWhpZXJhcmNoeSB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgIFtoaWRkZW5dIHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CiAgPHNjcmlwdD4vL35+V0VCUEFUSH5+L3RmLWRlYnVnZ2VyLWRhc2hib2FyZC9zZWxlY3Rpb24tdHJlZS1ub2RlLmpzCihmdW5jdGlvbihhKXthLk5PREVfTkFNRV9TRVBBUkFUT1I9Ii8iO2EuREVWSUNFX05BTUVfUEFUVEVSTj0vXlwvam9iOltBLVphLXowLTlfXStcL3JlcGxpY2E6WzAtOV9dK1wvdGFzazpbMC05XStcL2RldmljZTpbQS1aYS16MC05X10rOlswLTldKy87bGV0IGM7KGZ1bmN0aW9uKGcpe2dbZy5FTVBUWT0wXT0iRU1QVFkiO2dbZy5DSEVDS0VEPTFdPSJDSEVDS0VEIjtnW2cuUEFSVElBTD0yXT0iUEFSVElBTCJ9KShjPWEuQ2hlY2tib3hTdGF0ZXx8KGEuQ2hlY2tib3hTdGF0ZT17fSkpO2Euc3BsaXROb2RlTmFtZT1mdW5jdGlvbihnKXtsZXQgbD1bXTtjb25zdCBrPWcubWF0Y2goYS5ERVZJQ0VfTkFNRV9QQVRURVJOKTtudWxsIT1rJiYobC5wdXNoKGtbMF0pLCIvIiE9PWdba1swXS5sZW5ndGhdJiZjb25zb2xlLmVycm9yKCdObyBzbGFzaCAoIi8iKSBhZnRlciBkZXZpY2UgbmFtZSBpbiBub2RlIG5hbWU6JyxnKSxnPWcuc2xpY2Uoa1swXS5sZW5ndGgrMSkpO3JldHVybiBsLmNvbmNhdChnLnNwbGl0KGEuTk9ERV9OQU1FX1NFUEFSQVRPUikpfTsKYS5nZXRDbGVhbk5vZGVOYW1lPWZ1bmN0aW9uKGcpe2xldCBsPWc7Y29uc3Qgaz1nLm1hdGNoKGEuREVWSUNFX05BTUVfUEFUVEVSTik7bnVsbCE9az8obC5sZW5ndGg+a1swXS5sZW5ndGgmJiIvIiE9bFtrWzBdLmxlbmd0aF0mJmNvbnNvbGUuZXJyb3IoJ05vIHNsYXNoICgiLyIpIGFmdGVyIGRldmljZSBuYW1lIGluIG5vZGUgbmFtZTonLGcpLGw9bC5zbGljZShrWzBdLmxlbmd0aCsxKSk6Ii8iPT09bFswXSYmKGw9bC5zbGljZSgxKSk7bC5pbmRleE9mKCIpIik9PT1sLmxlbmd0aC0xJiYobD1sLnNsaWNlKDAsbC5pbmRleE9mKCIvKCIpKSk7cmV0dXJuIGx9O2Euc29ydEFuZEJhc2VFeHBhbmREZWJ1Z1dhdGNoZXM9ZnVuY3Rpb24oZyl7Zy5zb3J0KChrLG0pPT5rLm5vZGVfbmFtZTxtLm5vZGVfbmFtZT8tMTprLm5vZGVfbmFtZT5tLm5vZGVfbmFtZT8xOmsub3V0cHV0X3Nsb3QtbS5vdXRwdXRfc2xvdCk7Zm9yKGxldCBrPTA7azxnLmxlbmd0aDsrK2spe3ZhciBsPWdba10ubm9kZV9uYW1lKwoiLyI7bGV0IG09ITE7Zm9yKGxldCBwPWsrMTtwPGcubGVuZ3RoOysrcClpZigwPT09Z1twXS5ub2RlX25hbWUuaW5kZXhPZihsKSl7bT0hMDticmVha31tJiYobD1nW2tdLm5vZGVfbmFtZS5zcGxpdCgiLyIpLGdba10ubm9kZV9uYW1lKz0iLygiK2xbbC5sZW5ndGgtMV0rIikiKX19O2EucmVtb3ZlTm9kZU5hbWVCYXNlRXhwYW5zaW9uPWZ1bmN0aW9uKGcpe3JldHVybiBnLmVuZHNXaXRoKCIpIik/Zy5zbGljZSgwLGcubGFzdEluZGV4T2YoIi8oIikpOmd9O2EuYXNzZW1ibGVEZXZpY2VBbmROb2RlTmFtZXM9ZnVuY3Rpb24oZyl7Y29uc3QgbD1bbnVsbCxudWxsXTtpZihnWzBdLm1hdGNoKGEuREVWSUNFX05BTUVfUEFUVEVSTikpe2xldCBrPWdbMF07Ii8iPT09a1trLmxlbmd0aC0xXSYmKGs9ay5zbGljZSgwLGsubGVuZ3RoLTEpKTtsWzBdPWs7bFsxXT1nLnNsaWNlKDEpLmpvaW4oIi8iKX1lbHNlIGxbMV09Zy5qb2luKCIvIik7cmV0dXJuIGx9O2xldCBkOyhmdW5jdGlvbihnKXtnW2cuTm9kZU5hbWU9CjBdPSJOb2RlTmFtZSI7Z1tnLk9wVHlwZT0xXT0iT3BUeXBlIn0pKGQ9YS5EZWJ1Z1dhdGNoRmlsdGVyTW9kZXx8KGEuRGVidWdXYXRjaEZpbHRlck1vZGU9e30pKTthLmZpbHRlckRlYnVnV2F0Y2hlcz1mdW5jdGlvbihnLGwsayl7aWYobD09PWQuTm9kZU5hbWUpcmV0dXJuIGcuZmlsdGVyKG09Pm0ubm9kZV9uYW1lLm1hdGNoKGspKTtpZihsPT09ZC5PcFR5cGUpcmV0dXJuIGcuZmlsdGVyKG09Pm0ub3BfdHlwZS5tYXRjaChrKSl9O2NsYXNzIGZ7Y29uc3RydWN0b3IoZyxsLGssbSl7dGhpcy5kZWJ1Z1dhdGNoQ2hhbmdlPWw7dGhpcy5kZWJ1Z1dhdGNoPW07dGhpcy5uYW1lPWc7dGhpcy5kZWJ1Z1dhdGNoPW07dGhpcy5jaGVja2JveFN0YXRlPWMuRU1QVFk7dGhpcy5wYXJlbnQ9azt0aGlzLmNoaWxkcmVuPXt9O3RoaXMuY2hlY2tib3g9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgicGFwZXItY2hlY2tib3giKTt0aGlzLmNoZWNrYm94LmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsKCk9Pgp7dGhpcy5faGFuZGxlQ2hhbmdlKCl9LCExKX1faGFuZGxlQ2hhbmdlKCl7aWYodGhpcy5hdm9pZFByb3BhZ2F0aW9uKXRoaXMuZGVidWdXYXRjaCYmdGhpcy5kZWJ1Z1dhdGNoQ2hhbmdlKHRoaXMuZGVidWdXYXRjaCx0aGlzLmlzQ2hlY2tib3hDaGVja2VkKCkpO2Vsc2UgaWYodGhpcy5kZWJ1Z1dhdGNoKXRoaXMuc2V0Q2hlY2tib3hTdGF0ZSh0aGlzLmlzQ2hlY2tib3hDaGVja2VkKCk/Yy5DSEVDS0VEOmMuRU1QVFksITApLHRoaXMuaXNDaGVja2JveENoZWNrZWQoKT90aGlzLnNldE5vZGVzQWJvdmVUb0NoZWNrZWQoKTp0aGlzLnNldE5vZGVzQWJvdmVUb0VtcHR5KCksdGhpcy5kZWJ1Z1dhdGNoQ2hhbmdlKHRoaXMuZGVidWdXYXRjaCx0aGlzLmlzQ2hlY2tib3hDaGVja2VkKCkpO2Vsc2UgaWYodGhpcy5zZXRDaGVja2JveFN0YXRlKHRoaXMuaXNDaGVja2JveENoZWNrZWQoKT9jLkNIRUNLRUQ6Yy5FTVBUWSwhMCksdGhpcy5pc0NoZWNrYm94Q2hlY2tlZCgpKXtjb25zdCBsPV8udmFsdWVzKHRoaXMuY2hpbGRyZW4pOwpmb3IoO2wubGVuZ3RoOyl7dmFyIGc9bC5wb3AoKTtfLmZvckVhY2goZy5jaGlsZHJlbixrPT5sLnB1c2goaykpO2cuc2V0Q2hlY2tib3hTdGF0ZShjLkNIRUNLRUQsITApfXRoaXMuc2V0Tm9kZXNBYm92ZVRvQ2hlY2tlZCgpfWVsc2V7Y29uc3QgbD1fLnZhbHVlcyh0aGlzLmNoaWxkcmVuKTtmb3IoO2wubGVuZ3RoOylnPWwucG9wKCksXy5mb3JFYWNoKGcuY2hpbGRyZW4saz0+bC5wdXNoKGspKSxnLnNldENoZWNrYm94U3RhdGUoYy5FTVBUWSwhMCk7dGhpcy5zZXROb2Rlc0Fib3ZlVG9FbXB0eSgpfX1pc0xlYWYoKXtyZXR1cm4hIXRoaXMuZGVidWdXYXRjaH1zZXRUb0FsbENoZWNrZWRFeHRlcm5hbGx5KCl7dGhpcy5zZXRDaGVja2JveFN0YXRlKGMuQ0hFQ0tFRCk7dGhpcy5faGFuZGxlQ2hhbmdlKCl9c2V0Q2hlY2tib3hTdGF0ZShnLGwpe3RoaXMuYXZvaWRQcm9wYWdhdGlvbj1sO3RoaXMuY2hlY2tib3hTdGF0ZT1nO3RoaXMuY2hlY2tib3guY2xhc3NMaXN0LnRvZ2dsZSgicGFydGlhbC1jaGVja2JveCIsCmc9PT1jLlBBUlRJQUwpO2c9PT1jLkNIRUNLRUQ/dGhpcy5jaGVja2JveC5zZXRBdHRyaWJ1dGUoImNoZWNrZWQiLCJjaGVja2VkIik6dGhpcy5jaGVja2JveC5yZW1vdmVBdHRyaWJ1dGUoImNoZWNrZWQiKTt0aGlzLmF2b2lkUHJvcGFnYXRpb249ITF9aXNDaGVja2JveENoZWNrZWQoKXtyZXR1cm4gdGhpcy5jaGVja2JveC5oYXNBdHRyaWJ1dGUoImNoZWNrZWQiKX1zZXROb2Rlc0Fib3ZlVG9DaGVja2VkKCl7bGV0IGc9dGhpcy5wYXJlbnQsbD0hMTtmb3IoO2c7KWw/Zy5zZXRDaGVja2JveFN0YXRlKGMuUEFSVElBTCwhMCk6KGw9LTEhPT1fLmZpbmRJbmRleChfLnZhbHVlcyhnLmNoaWxkcmVuKSxrPT5rLmNoZWNrYm94U3RhdGUhPT1jLkNIRUNLRUQpLGcuc2V0Q2hlY2tib3hTdGF0ZShsP2MuUEFSVElBTDpjLkNIRUNLRUQsITApKSxnPWcucGFyZW50fXNldE5vZGVzQWJvdmVUb0VtcHR5KCl7bGV0IGc9dGhpcy5wYXJlbnQsbD0hMTtmb3IoO2c7KWw/Zy5zZXRDaGVja2JveFN0YXRlKGMuUEFSVElBTCwKITApOihsPS0xIT09Xy5maW5kSW5kZXgoXy52YWx1ZXMoZy5jaGlsZHJlbiksaz0+ay5jaGVja2JveFN0YXRlIT09Yy5FTVBUWSksZy5zZXRDaGVja2JveFN0YXRlKGw/Yy5QQVJUSUFMOmMuRU1QVFksITApKSxnPWcucGFyZW50fXNldExldmVsRG9tKGcpe3RoaXMubGV2ZWxEb209Z319YS5TZWxlY3Rpb25UcmVlTm9kZT1mfSkoaW18fChpbT17fSkpOwo8L3NjcmlwdD4KICA8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdGYtZGVidWdnZXItZGFzaGJvYXJkL3RmLW9wLXNlbGVjdG9yLmh0bWwuanMKUG9seW1lcih7aXM6InRmLW9wLXNlbGVjdG9yIixwcm9wZXJ0aWVzOntkZWJ1Z1dhdGNoZXM6QXJyYXksZGVidWdXYXRjaENoYW5nZTpPYmplY3Qsbm9kZUNsaWNrZWQ6RnVuY3Rpb24sZm9yY2VFeHBhbmRBbmRDaGVja05vZGVOYW1lOnt0eXBlOlN0cmluZyx2YWx1ZTpudWxsfSxmb3JjZUV4cGFuZE5vZGVOYW1lOnt0eXBlOlN0cmluZyx2YWx1ZTpudWxsfSxfc2VsZWN0ZWREZWJ1Z1dhdGNoTWFwcGluZzp7dHlwZTpPYmplY3QsdmFsdWU6KCk9Pih7fSl9LF9sZXZlbE5hbWUyQ29udGFpbmVyOnt0eXBlOk9iamVjdCx2YWx1ZTpudWxsfSxfbGV2ZWxOYW1lMk5vZGU6e3R5cGU6T2JqZWN0LHZhbHVlOm51bGx9LF93YXRjaEhpZXJhcmNoeTp7dHlwZTpPYmplY3QsY29tcHV0ZWQ6Il9jb21wdXRlV2F0Y2hIaWVyYXJjaHkoZGVidWdXYXRjaGVzLCBkZWJ1Z1dhdGNoQ2hhbmdlLCBfZmlsdGVyTW9kZSwgX2ZpbHRlcklucHV0KSJ9LF9maWx0ZXJNb2RlOnt0eXBlOlN0cmluZyx2YWx1ZToiTm9kZSBOYW1lIiwKbm90aWZ5OiEwfSxfZmlsdGVySW5wdXQ6e3R5cGU6U3RyaW5nLHZhbHVlOiIiLG5vdGlmeTohMH0sX2lzTG9hZGluZzp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxfaGlnaGxpZ2h0ZWRMZXZlbERvbTp7dHlwZTpPYmplY3QsdmFsdWU6bnVsbH19LG9ic2VydmVyczpbIl9yZW5kZXJIaWVyYXJjaHlXaXRoVGltZW91dChfd2F0Y2hIaWVyYXJjaHksIGRlYnVnV2F0Y2hDaGFuZ2UpIiwiX2hhbmRsZUZvcmNlTm9kZUV4cGFuZEFuZENoZWNrKGZvcmNlRXhwYW5kQW5kQ2hlY2tOb2RlTmFtZSkiLCJfaGFuZGxlRm9yY2VOb2RlRXhwYW5kKGZvcmNlRXhwYW5kTm9kZU5hbWUpIl0sX2NvbXB1dGVXYXRjaEhpZXJhcmNoeShhLGMsZCxmKXtmPWYudHJpbSgpO2xldCBnPWE7bnVsbCE9ZCYmMDxmLmxlbmd0aCYmKGc9aW0uZmlsdGVyRGVidWdXYXRjaGVzKGEsaW0uRGVidWdXYXRjaEZpbHRlck1vZGVbZC5yZXBsYWNlKC9ccy9nLCIiKV0sbmV3IFJlZ0V4cChmKSkpO2NvbnN0IGw9bmV3IGltLlNlbGVjdGlvblRyZWVOb2RlKCIiLApjKTtsLmlzUm9vdD0hMDtfLmZvckVhY2goZyxrPT57Y29uc3QgbT1pbS5zcGxpdE5vZGVOYW1lKGsuZGV2aWNlX25hbWUrIi8iK2subm9kZV9uYW1lKTtsZXQgcD1sO18uZm9yRWFjaChtLChxLHIpPT57cj09PW0ubGVuZ3RoLTE/KHI9bmV3IGltLlNlbGVjdGlvblRyZWVOb2RlKHEsYyxwLGspLHAuY2hpbGRyZW5bcV09cik6KHAuY2hpbGRyZW5bcV18fChwLmNoaWxkcmVuW3FdPW5ldyBpbS5TZWxlY3Rpb25UcmVlTm9kZShxLGMscCkpLHA9cC5jaGlsZHJlbltxXSl9KX0pO3JldHVybiBsfSxfY2xlYXJTZWxlY3RvckhpZXJhcmNoeSgpe2NvbnN0IGE9dGhpcy4kJCgiI3NlbGVjdG9yLWhpZXJhcmNoeSIpO2Zvcig7YS5maXJzdENoaWxkOylhLnJlbW92ZUNoaWxkKGEuZmlyc3RDaGlsZCl9LF9yZW5kZXJIaWVyYXJjaHlXaXRoVGltZW91dChhLGMsZCxmKXt0aGlzLl9pc0xvYWRpbmd8fCh0aGlzLnNldCgiX2lzTG9hZGluZyIsITApLHRoaXMuX2NsZWFyU2VsZWN0b3JIaWVyYXJjaHkoKSwKc2V0VGltZW91dCgoKT0+e3RoaXMuX3JlbmRlckhpZXJhcmNoeShhLGMsZCxmKX0sMTApKX0sX3JlbmRlckhpZXJhcmNoeShhLGMpe3RoaXMuc2V0KCJfbGV2ZWxOYW1lMkNvbnRhaW5lciIse30pO3RoaXMuc2V0KCJfbGV2ZWxOYW1lMk5vZGUiLHt9KTthPXRoaXMuX3JlbmRlckxldmVsKG51bGwsbnVsbCxhLGMpO1BvbHltZXIuZG9tKHRoaXMuJCQoIiNzZWxlY3Rvci1oaWVyYXJjaHkiKSkuYXBwZW5kQ2hpbGQoYSk7dGhpcy5zZXQoIl9pc0xvYWRpbmciLCExKX0sX3JlbmRlckxldmVsKGEsYyxkLGYpe2NvbnN0IGc9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7bnVsbCE9YSYmZy5zZXRBdHRyaWJ1dGUoImxldmVsLW5hbWUiLGEpO2xldCBsO2w9bnVsbD09Yz9hOmMrIi8iK2E7UG9seW1lci5kb20oZykuY2xhc3NMaXN0LmFkZCgibGV2ZWwtY29udGFpbmVyIik7Y29uc3Qgaz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpcm9uLWNvbGxhcHNlIik7aWYoYSl7dGhpcy5fbGV2ZWxOYW1lMkNvbnRhaW5lcltsXT0KaztrLnJlbW92ZUF0dHJpYnV0ZSgib3BlbmVkIik7UG9seW1lci5kb20oZykuY2xhc3NMaXN0LmFkZCgiaW5kZW50ZWQtbGV2ZWwtY29udGFpbmVyIik7Yz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtQb2x5bWVyLmRvbShjKS5jbGFzc0xpc3QuYWRkKCJsZXZlbC10aXRsZSIpO2NvbnN0IHE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgicGFwZXItaWNvbi1idXR0b24iKTtQb2x5bWVyLmRvbShxKS5jbGFzc0xpc3QuYWRkKCJub2RlLWV4cGFuZC1idXR0b24iKTtjb25zdCByPSgpPT57cS5zZXRBdHRyaWJ1dGUoImljb24iLGsuaGFzQXR0cmlidXRlKCJvcGVuZWQiKT8iZXhwYW5kLWxlc3MiOiJleHBhbmQtbW9yZSIpfTtxLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwoKT0+e2suaGFzQXR0cmlidXRlKCJvcGVuZWQiKT9rLnJlbW92ZUF0dHJpYnV0ZSgib3BlbmVkIik6ay5zZXRBdHRyaWJ1dGUoIm9wZW5lZCIsITApO3IoKX0sITEpO3IoKTtQb2x5bWVyLmRvbShjKS5hcHBlbmRDaGlsZChxKTsKUG9seW1lci5kb20oYykuYXBwZW5kQ2hpbGQoZC5jaGVja2JveCk7ZC5zZXRMZXZlbERvbShjKTtjb25zdCB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTtQb2x5bWVyLmRvbSh0KS5jbGFzc0xpc3QuYWRkKCJsZXZlbC10aXRsZS10ZXh0Iik7dC50ZXh0Q29udGVudD1hO1BvbHltZXIuZG9tKGMpLmFwcGVuZENoaWxkKHQpO1BvbHltZXIuZG9tKGcpLmFwcGVuZENoaWxkKGMpOyhhLm1hdGNoKGltLkRFVklDRV9OQU1FX1BBVFRFUk4pfHwxPT09T2JqZWN0LmtleXMoZC5jaGlsZHJlbikubGVuZ3RoKSYmay5zZXRBdHRyaWJ1dGUoIm9wZW5lZCIsITApfWVsc2Ugay5zZXRBdHRyaWJ1dGUoIm9wZW5lZCIsITApO2NvbnN0IG09W10scD1bXTtQb2x5bWVyLmRvbShrKS5jbGFzc0xpc3QuYWRkKCJjb250ZW50LWNvbnRhaW5lciIpO18uZm9yRWFjaChkLmNoaWxkcmVuLChxLHIpPT57Y29uc3QgdD1xLmRlYnVnV2F0Y2g7dmFyIHY9bDtudWxsPT1sJiYodj0iIik7dis9Ii8iK3I7CnRoaXMuX2xldmVsTmFtZTJOb2RlW3ZdPXE7bnVsbCE9dGhpcy5fc2VsZWN0ZWREZWJ1Z1dhdGNoTWFwcGluZ1t2XSYmKHEuc2V0Q2hlY2tib3hTdGF0ZShpbS5DaGVja2JveFN0YXRlLkNIRUNLRUQpLHEuc2V0Tm9kZXNBYm92ZVRvQ2hlY2tlZCgpKTtpZih0KXt2PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO1BvbHltZXIuZG9tKHYpLmNsYXNzTGlzdC5hZGQoIm9wLWRlc2NyaXB0aW9uIik7cS5jaGVja2JveC5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLHk9Pnt0aGlzLl9oYW5kbGVMZWFmTm9kZVNlbGVjdGVkKGYsdCx5LnRhcmdldC5jaGVja2VkKX0sITEpO1BvbHltZXIuZG9tKHYpLmFwcGVuZENoaWxkKHEuY2hlY2tib3gpO3Euc2V0TGV2ZWxEb20odik7dmFyIEE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpO0EudGV4dENvbnRlbnQ9IlsiK3Qub3BfdHlwZSsiXSI7QS5zZXRBdHRyaWJ1dGUoImNsYXNzIiwib3AtdHlwZSIpO1BvbHltZXIuZG9tKHYpLmFwcGVuZENoaWxkKEEpOwpBPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTtBLnRleHRDb250ZW50PXI7QS5zZXRBdHRyaWJ1dGUoImNsYXNzIiwib3AtdGl0bGUtbGVhZiIpO0EuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCgpPT57Y29uc3QgeT10aGlzLl9nZXREZXZpY2VBbmROb2RlTmFtZXMocixnKTt0aGlzLm5vZGVDbGlja2VkKHlbMF0seVsxXSl9LCExKTtQb2x5bWVyLmRvbSh2KS5hcHBlbmRDaGlsZChBKTtwLnB1c2godil9ZWxzZSBxLmNoZWNrYm94LmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIseT0+e3RoaXMuX2hhbmRsZU1ldGFOb2RlQ2hhbmdlKHEsZix5LnRhcmdldC5jaGVja2VkKX0pLG0ucHVzaCh0aGlzLl9yZW5kZXJMZXZlbChyLGwscSxmKSl9KTthPXE9PntQb2x5bWVyLmRvbShrKS5hcHBlbmRDaGlsZChxKX07Xy5mb3JFYWNoKHAsYSk7Xy5mb3JFYWNoKG0sYSk7UG9seW1lci5kb20oZykuYXBwZW5kQ2hpbGQoayk7cmV0dXJuIGd9LF9nZXRMZWFmRGVidWdXYXRjaGVzKGEsYyl7YS5kZWJ1Z1dhdGNoPwpjLnB1c2goYS5kZWJ1Z1dhdGNoKTpfLmZvckVhY2goYS5jaGlsZHJlbixkPT57dGhpcy5fZ2V0TGVhZkRlYnVnV2F0Y2hlcyhkLGMpfSl9LF9nZXREZXZpY2VBbmROb2RlTmFtZXMoYSxjKXtmb3IoYT1bYV07Oyl7Y29uc3QgZD1jLmdldEF0dHJpYnV0ZSgibGV2ZWwtbmFtZSIpO2lmKG51bGw9PWQpYnJlYWs7ZWxzZSBhLnB1c2goZCk7Yz1Qb2x5bWVyLmRvbShjKS5wYXJlbnROb2RlLnBhcmVudE5vZGV9YS5yZXZlcnNlKCk7cmV0dXJuIGltLmFzc2VtYmxlRGV2aWNlQW5kTm9kZU5hbWVzKGEpfSxfaGFuZGxlTWV0YU5vZGVDaGFuZ2UoYSxjLGQpe2xldCBmPVtdO3RoaXMuX2dldExlYWZEZWJ1Z1dhdGNoZXMoYSxmKTtfLmZvckVhY2goZixnPT57dGhpcy5faGFuZGxlTGVhZk5vZGVTZWxlY3RlZChjLGcsZCl9KX0sX2hhbmRsZUxlYWZOb2RlU2VsZWN0ZWQoYSxjLGQpe2NvbnN0IGY9Yy5kZXZpY2VfbmFtZSsiLyIrYy5ub2RlX25hbWU7ZD90aGlzLl9zZWxlY3RlZERlYnVnV2F0Y2hNYXBwaW5nW2ZdPQpjOmRlbGV0ZSB0aGlzLl9zZWxlY3RlZERlYnVnV2F0Y2hNYXBwaW5nW2ZdO2EoYyxkKX0sX2hhbmRsZUZvcmNlTm9kZShhLGMpe3RoaXMuc2V0KCJfZmlsdGVySW5wdXQiLCIiKTtzZXRUaW1lb3V0KCgpPT57aWYobnVsbCE9YSYmbnVsbCE9dGhpcy5fbGV2ZWxOYW1lMkNvbnRhaW5lcil7dmFyIGQ9aW0uc3BsaXROb2RlTmFtZShhKTtmb3IobGV0IGc9MTtnPD1kLmxlbmd0aDsrK2cpe3ZhciBmPWQuc2xpY2UoMCxnKS5qb2luKCIvIik7Y29uc3QgbD10aGlzLl9sZXZlbE5hbWUyTm9kZVtmXTtudWxsIT1sJiZudWxsIT1sLmxldmVsRG9tJiZsLmxldmVsRG9tLnNjcm9sbEludG9WaWV3KHtibG9jazoiY2VudGVyIixiZWhhdmlvdXI6InNtb290aCJ9KTtnPGQubGVuZ3RoP251bGwhPXRoaXMuX2xldmVsTmFtZTJDb250YWluZXJbZl0mJnRoaXMuX2xldmVsTmFtZTJDb250YWluZXJbZl0uc2V0QXR0cmlidXRlKCJvcGVuZWQiLCEwKToobC5kZWJ1Z1dhdGNofHx0aGlzLl9oYW5kbGVNZXRhTm9kZUNoYW5nZShsLApsLmRlYnVnV2F0Y2hDaGFuZ2UsITApLGMmJihsLnNldFRvQWxsQ2hlY2tlZEV4dGVybmFsbHkoKSwoZj1sLmRlYnVnV2F0Y2gpJiZudWxsPT10aGlzLl9zZWxlY3RlZERlYnVnV2F0Y2hNYXBwaW5nW2Yubm9kZV9uYW1lXSYmKHRoaXMuX3NlbGVjdGVkRGVidWdXYXRjaE1hcHBpbmdbYV09ZikpLG51bGwhPXRoaXMuX2hpZ2hsaWdodGVkTGV2ZWxEb20mJnRoaXMuX2hpZ2hsaWdodGVkTGV2ZWxEb20uY2xhc3NMaXN0LnJlbW92ZSgiaGlnaGxpZ2h0ZWQiKSxsLmxldmVsRG9tLmNsYXNzTGlzdC5hZGQoImhpZ2hsaWdodGVkIiksdGhpcy5zZXQoIl9oaWdobGlnaHRlZExldmVsRG9tIixsLmxldmVsRG9tKSl9fX0sMjApfSxfaGFuZGxlRm9yY2VOb2RlRXhwYW5kQW5kQ2hlY2soYSl7dGhpcy5faGFuZGxlRm9yY2VOb2RlKGEsITApfSxfaGFuZGxlRm9yY2VOb2RlRXhwYW5kKGEpe3RoaXMuX2hhbmRsZUZvcmNlTm9kZShhLCExKX19KTsKPC9zY3JpcHQ+CjwvZG9tLW1vZHVsZT4KCgoKCgo8ZG9tLW1vZHVsZSBpZD0idGYtc2Vzc2lvbi1ydW5zLXZpZXciPgogIDx0ZW1wbGF0ZT4KICAgIDxkaXYgY2xhc3M9InNlc3Npb24tcnVucy1kaXYiPgogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5TZXNzaW9uIFJ1bnM8L2Rpdj4KICAgICAgPHRhYmxlIGlkPSJzZXNzaW9uLXJ1bnMtdGFibGUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2Vzc2lvbi1ydW5zLXRhYmxlIj4KICAgICAgICA8dHIgYWxpZ249ImxlZnQiPgogICAgICAgICAgPHRoPkZlZWRzPC90aD4KICAgICAgICAgIDx0aD5GZXRjaGVzPC90aD4KICAgICAgICAgIDx0aD5UYXJnZXRzPC90aD4KICAgICAgICAgIDx0aD4jKERldmljZXMpPC90aD4KICAgICAgICAgIDx0aD5Db3VudDwvdGg+CiAgICAgICAgPC90cj4KICAgICAgPC90YWJsZT4KICAgIDwvZGl2PgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcGFkZGluZzogMjBweCAwOwogICAgICB9CgogICAgICAuc2VjdGlvbi10aXRsZSB7CiAgICAgICAgZm9udC1zaXplOiAxMTAlOwogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICB9CiAgICAgIDpob3N0IC5pbmRlbnRlZC1sZXZlbC1jb250YWluZXIgLmNvbnRlbnQtY29udGFpbmVyIHsKICAgICAgICBtYXJnaW46IDAgMCAwIDEwcHg7CiAgICAgIH0KCiAgICAgIC8qIFRPRE8oY2Fpcyk6IFRoaXMgbmVlZHMgd29yazogdGhlIHRhYmxlIHNob3VsZG4ndCBnZXQgdG9vIHdpZGUgd2hlbgogICAgICAgICB0aGVyZSBhcmUgbWFueSBmZWVkcy9mZXRjaGVzL3Rhcmd0ZSBuYW1lcy4gKi8KICAgICAgLnNlc3Npb24tcnVucy10YWJsZSB7CiAgICAgICAgYWxpZ24tY29udGVudDogbGVmdDsKICAgICAgICBhbGlnbi1pdGVtczogbGVmdDsKICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OwogICAgICAgIGZvbnQtc2l6ZTogOTAlOwogICAgICAgIGJvcmRlci1zdHlsZTogc29saWQgMXB4IGJsYWNrOwogICAgICAgIHRhYmxlLWxheW91dDogZml4ZWQ7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgd29yZC1icmVhazogYnJlYWstYWxsOwogICAgICAgIHBhZGRpbmctdG9wOiAzcHg7CiAgICAgICAgcGFkZGluZy1sZWZ0OiAzcHg7CiAgICAgICAgcGFkZGluZy1yaWdodDogM3B4OwogICAgICAgIGJveC1zaGFkb3c6IDNweCAzcHggI2RkZDsKICAgICAgfQogICAgICAuYWN0aXZlLXNlc3Npb24tcnVuIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmUwOwogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICB9CiAgICAgIC5zb2xlLWFjdGl2ZS1zZXNzaW9uLXJ1biB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDE3MiwgMjMyLCAxODgpOwogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICB9CgogICAgICAubm9kZS1vci10ZW5zb3ItZWxlbWVudCB7CiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICB9CgogICAgICAubm9kZS1vci10ZW5zb3ItZWxlbWVudDpob3ZlciB7CiAgICAgICAgY29sb3I6IGJsdWU7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KICA8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdGYtZGVidWdnZXItZGFzaGJvYXJkL3RmLXNlc3Npb24tcnVucy12aWV3Lmh0bWwuanMKUG9seW1lcih7aXM6InRmLXNlc3Npb24tcnVucy12aWV3Iixwcm9wZXJ0aWVzOntsYXRlc3RTZXNzaW9uUnVuOk9iamVjdCxzZXNzaW9uUnVuS2V5VG9EZXZpY2VOYW1lczpPYmplY3Qsc29sZUFjdGl2ZTpCb29sZWFuLG5vZGVPclRlbnNvckNsaWNrZWQ6RnVuY3Rpb24sX3J1bktleTJDb3VudDp7dHlwZTpPYmplY3QsdmFsdWU6e319LF9ydW5LZXkyTnVtRGV2aWNlczp7dHlwZTpPYmplY3QsdmFsdWU6e319LF9hY3RpdmVSdW5LZXk6U3RyaW5nfSxvYnNlcnZlcnM6WyJyZW5kZXJMYXRlc3QobGF0ZXN0U2Vzc2lvblJ1bikiLCJzZXRTb2xlQWN0aXZlU3RhdHVzKHNvbGVBY3RpdmUpIl0scmVuZGVyTGF0ZXN0KGEpe2E9SlNPTi5zdHJpbmdpZnkoYSk7dGhpcy5fcnVuS2V5MkNvdW50W2FdPXZvaWQgMD09PXRoaXMuX3J1bktleTJDb3VudFthXT8xOnRoaXMuX3J1bktleTJDb3VudFthXSsxO3ZvaWQgMD09PXRoaXMuX3J1bktleTJOdW1EZXZpY2VzW2FdJiYodGhpcy5fcnVuS2V5Mk51bURldmljZXNbYV09CjApO3RoaXMuX2FjdGl2ZVJ1bktleT1hO3RoaXMuX3JlbmRlclNlc3Npb25SdW5UYWJsZSgpfSx1cGRhdGVOdW1EZXZpY2VzKGEpe251bGwhPXRoaXMuX2FjdGl2ZVJ1bktleSYmKHRoaXMuX3J1bktleTJOdW1EZXZpY2VzW3RoaXMuX2FjdGl2ZVJ1bktleV09YSx0aGlzLl9yZW5kZXJTZXNzaW9uUnVuVGFibGUoKSl9LHNldFNvbGVBY3RpdmVTdGF0dXMoKXt0aGlzLl9yZW5kZXJTZXNzaW9uUnVuVGFibGUoKX0sX3JlbmRlclNlc3Npb25SdW5UYWJsZSgpe3RoaXMuX2NsZWFyVGFibGUoKTt0aGlzLl9yZW5kZXJIZWFkZXIoKTtsZXQgYTtmb3IoY29uc3QgZCBpbiB0aGlzLl9ydW5LZXkyQ291bnQpaWYodGhpcy5fcnVuS2V5MkNvdW50Lmhhc093blByb3BlcnR5KGQpKXt2YXIgYz1KU09OLnBhcnNlKGQpOyhjPXRoaXMuX3JlbmRlclJvdyhjLHRoaXMuX3J1bktleTJOdW1EZXZpY2VzW2RdLHRoaXMuX3J1bktleTJDb3VudFtkXSx0aGlzLl9hY3RpdmVSdW5LZXk9PT1kLHRoaXMuc29sZUFjdGl2ZSkpJiYKKGE9Yyl9YSYmKFBvbHltZXIuZG9tKHRoaXMuJCQoIiNzZXNzaW9uLXJ1bnMtdGFibGUiKSkucGFyZW50Tm9kZS5wYXJlbnROb2RlLnNjcm9sbFRvcD1hLm9mZnNldFRvcCl9LF9jbGVhclRhYmxlKCl7Y29uc3QgYT10aGlzLiQkKCIjc2Vzc2lvbi1ydW5zLXRhYmxlIik7Zm9yKDthLmZpcnN0Q2hpbGQ7KWEucmVtb3ZlQ2hpbGQoYS5maXJzdENoaWxkKX0sX3JlbmRlckhlYWRlcigpe2NvbnN0IGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidHIiKSxjPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRoIik7Yy50ZXh0Q29udGVudD0iRmVlZHMiO2NvbnN0IGQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGgiKTtkLnRleHRDb250ZW50PSJGZXRjaGVzIjtjb25zdCBmPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRoIik7Zi50ZXh0Q29udGVudD0iVGFyZ2V0cyI7Y29uc3QgZz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0aCIpO2cudGV4dENvbnRlbnQ9IiMoRGV2aWNlcykiO2NvbnN0IGw9CmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRoIik7bC50ZXh0Q29udGVudD0iQ291bnQiO2EuYXBwZW5kQ2hpbGQoYyk7YS5hcHBlbmRDaGlsZChkKTthLmFwcGVuZENoaWxkKGYpO2EuYXBwZW5kQ2hpbGQoZyk7YS5hcHBlbmRDaGlsZChsKTtQb2x5bWVyLmRvbSh0aGlzLiQkKCIjc2Vzc2lvbi1ydW5zLXRhYmxlIikpLmFwcGVuZENoaWxkKGEpfSxfcmVuZGVyUm93KGEsYyxkLGYsZyl7Y29uc3QgbD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ciIpLGs9dGhpcy5fcmVuZGVyR3JhcGhFbGVtZW50cyhhLmZlZWRzKSxtPXRoaXMuX3JlbmRlckdyYXBoRWxlbWVudHMoYS5mZXRjaGVzKTthPXRoaXMuX3JlbmRlckdyYXBoRWxlbWVudHMoYS50YXJnZXRzKTtjb25zdCBwPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7cC50ZXh0Q29udGVudD1jO2M9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTtjLnRleHRDb250ZW50PWQ7bC5hcHBlbmRDaGlsZChrKTtsLmFwcGVuZENoaWxkKG0pOwpsLmFwcGVuZENoaWxkKGEpO2wuYXBwZW5kQ2hpbGQocCk7bC5hcHBlbmRDaGlsZChjKTtmJiYoZz9sLnNldEF0dHJpYnV0ZSgiY2xhc3MiLCJzb2xlLWFjdGl2ZS1zZXNzaW9uLXJ1biIpOmwuc2V0QXR0cmlidXRlKCJjbGFzcyIsImFjdGl2ZS1zZXNzaW9uLXJ1biIpKTtQb2x5bWVyLmRvbSh0aGlzLiQkKCIjc2Vzc2lvbi1ydW5zLXRhYmxlIikpLmFwcGVuZENoaWxkKGwpO2lmKGYpcmV0dXJuIGx9LF9yZW5kZXJHcmFwaEVsZW1lbnRzKGEpe2NvbnN0IGM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTtfLmZvckVhY2goYSxkPT57Y29uc3QgZj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtmLnRleHRDb250ZW50PWQ7Zi5zZXRBdHRyaWJ1dGUoImNsYXNzIiwibm9kZS1vci10ZW5zb3ItZWxlbWVudCIpO2YuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCgpPT57dGhpcy5ub2RlT3JUZW5zb3JDbGlja2VkKGQpfSk7Yy5hcHBlbmRDaGlsZChmKX0pO3JldHVybiBjfX0pOwo8L3NjcmlwdD4KPC9kb20tbW9kdWxlPgoKCgoKCjxkb20tbW9kdWxlIGlkPSJ0Zi1zb3VyY2UtY29kZS12aWV3Ij4KICA8dGVtcGxhdGU+CiAgICA8ZGl2IGlkPSJmdWxsU3RhY2tEaWFsb2ciIGhpZGRlbiQ9IltbIV9mdWxsU3RhY2tTaG93bl1dIj4KICAgICAgPGRpdiBpZD0iZnVsbC1zdGFjay10aXRsZSI+CiAgICAgICAgPHBhcGVyLWljb24tYnV0dG9uIGljb249ImZpbHRlci1saXN0IiBkaXNhYmxlZD0idHJ1ZSI+CiAgICAgICAgPC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgICBGdWxsIFN0YWNrIFRyYWNlIG9mIE5vZGU6CiAgICAgICAgPGRpdiBpZD0iZnVsbC1zdGFjay1ub2RlLW5hbWUiPiJbW19mdWxsU3RhY2tOb2RlTmFtZV1dIjwvZGl2PgogICAgICAgIDxwYXBlci1pY29uLWJ1dHRvbiBpY29uPSJjbG9zZSIgaWQ9ImNsb3NlLWZ1bGwtc3RhY2stYnV0dG9uIiB0aXRsZT0iQ2xvc2UgRnVsbCBTdGFjayIgb24tdGFwPSJfY2xvc2VGdWxsU3RhY2tEaWFsb2ciPgogICAgICAgIDwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgIDwvZGl2PgogICAgICA8dWwgaWQ9ImZ1bGwtc3RhY2stY29udGVudCI+PC91bD4KICAgIDwvZGl2PgogICAgPHBhcGVyLXRhYnMgaWQ9InNvdXJjZS1maWxlcy10YWJzIiBzZWxlY3RlZD0ie3tfZmlsZVBhdGhTZWxlY3RlZH19Ij4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tfc2hvcnRGaWxlUGF0aHNdXSI+CiAgICAgICAgPHBhcGVyLXRhYiBpZD0iW1tpdGVtLmlkXV0iPltbaXRlbS5uYW1lXV08L3BhcGVyLXRhYj4KICAgICAgPC90ZW1wbGF0ZT4KICAgIDwvcGFwZXItdGFicz4KICAgIDxkaXYgaWQ9InNvdXJjZS1maWxlLWNvbnRlbnQiIGNsYXNzPSJzb3VyY2UtY29udGVudCI+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX2ZpbGVMaW5lc11dIj4KICAgICAgICA8ZGl2IGNsYXNzJD0ie3tpdGVtLnNvdXJjZUNsYXNzfX0iIGlkPSJzb3VyY2UtbGluZS1bW2l0ZW0ubGluZW5vXV0iPgogICAgICAgICAgPHNwYW4gY2xhc3M9InNvdXJjZS1saW5lLW51bWJlciIgaWQ9InNvdXJjZS1saW5lbm8tW1tpdGVtLmxpbmVub11dIj4KICAgICAgICAgICAgW1tpdGVtLmxpbmVub11dCiAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICA8c3BhbiBjbGFzcz0ic291cmNlLWxpbmUtbm9kZS10b2dnbGUiIGlkPSJzb3VyY2UtbGluZS1ub2RlLXRvZ2dsZS1bW2l0ZW0ubGluZW5vXV0iPgogICAgICAgICAgICBbW2l0ZW0ubnVtTm9kZXNdXQogICAgICAgICAgPC9zcGFuPgogICAgICAgICAgPHNwYW4gY2xhc3M9InNvdXJjZS1saW5lLXRleHQiIGlkPSJzb3VyY2UtbGluZS10ZXh0LVtbaXRlbS5saW5lbm9dXSI+CiAgICAgICAgICAgIFtbaXRlbS50ZXh0XV0KICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgIDxkaXYgY2xhc3M9InNvdXJjZS1saW5lLW5vZGVzIiBpZD0ic291cmNlLWxpbmUtbm9kZXMtW1tpdGVtLmxpbmVub11dIj48L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgIDwvZGl2PgogICAgPHN0eWxlPgogICAgICAjc291cmNlLWZpbGVzLXRhYnMgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBoZWlnaHQ6IDglOwogICAgICB9CiAgICAgIC5zb3VyY2UtY29udGVudCB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGhlaWdodDogOTAlOwogICAgICAgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7CiAgICAgICAgZm9udC1zaXplOiA5MCU7CiAgICAgICAgb3ZlcmZsb3cteDogc2Nyb2xsOwogICAgICAgIG92ZXJmbG93LXk6IHNjcm9sbDsKICAgICAgfQogICAgICAuc291cmNlLWNvbnRlbnQgOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZjAwOwogICAgICB9CiAgICAgIC5oaWdobGlnaHRlZC1zb3VyY2UtbGluZSB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZmZlMDsKICAgICAgfQogICAgICAuc291cmNlLWxpbmUtbnVtYmVyIHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgY29sb3I6IGxpZ2h0Ymx1ZTsKICAgICAgICB3aWR0aDogMmVtOwogICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OwogICAgICAgIHBhZGRpbmctcmlnaHQ6IDFlbTsKICAgICAgfQogICAgICAuc291cmNlLWxpbmUtbm9kZS10b2dnbGUgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBjb2xvcjogYmx1ZTsKICAgICAgICB3aWR0aDogNWVtOwogICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OwogICAgICAgIHBhZGRpbmctcmlnaHQ6IDFlbTsKICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgIH0KICAgICAgLnNvdXJjZS1saW5lLW5vZGVzIHsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDRlbTsKICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgY29sb3I6IGJsdWU7CiAgICAgICAgbWFyZ2luLXRvcDogMGVtOwogICAgICAgIG1hcmdpbi1ib3R0b206IDBlbTsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDFlbTsKICAgICAgfQogICAgICAuc291cmNlLWxpbmUtbm9kZS1lbnRyeSB7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiAxZW07CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogeWVsbG93OwogICAgICB9CiAgICAgIC5zb3VyY2UtbGluZS1ub2RlcyBzcGFuIHsKICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogeWVsbG93OwogICAgICB9CiAgICAgIC5zb3VyY2UtbGluZS10ZXh0IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmU7CiAgICAgICAgd29yZC13cmFwOiBicmVhay13b3JkOwogICAgICB9CiAgICAgICNmdWxsU3RhY2tEaWFsb2cgewogICAgICAgIHotaW5kZXg6IDEwMDA7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMTAlOwogICAgICAgIGxlZnQ6IDUwJTsKICAgICAgICB3aWR0aDogNDUlOwogICAgICAgIGhlaWdodDogODUlOwogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlOwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIGdyYXk7CiAgICAgICAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKICAgICAgICBib3gtc2hhZG93OiAzcHggM3B4ICNkZGQ7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgfQogICAgICAjZnVsbC1zdGFjay10aXRsZSB7CiAgICAgICAgZm9udC1zaXplOiAxMTAlOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlOwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICBmb250LXdlaWdodDogYm9sZDsKICAgICAgfQogICAgICAjZnVsbC1zdGFjay1ub2RlLW5hbWUgewogICAgICAgIGNvbG9yOiBibHVlOwogICAgICB9CiAgICAgIDpob3N0ICNmdWxsLXN0YWNrLWNvbnRlbnQgewogICAgICAgIHBhZGRpbmctdG9wOiAxZW07CiAgICAgICAgcGFkZGluZy1yaWdodDogMC41ZW07CiAgICAgICAgbWFyZ2luLXRvcDogMC41ZW07CiAgICAgICAgZm9udC1zaXplOiA5MCU7CiAgICAgICAgd29yZC13cmFwOiBicmVhay13b3JkOwogICAgICAgIG92ZXJmbG93OiBhdXRvOwogICAgICB9CiAgICAgIC5zdGFjay1mcmFtZS1jbGlja2FibGUgewogICAgICAgIGNvbG9yOiBibHVlOwogICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgfQogICAgICAuc3RhY2stZnJhbWUtbm9uY2xpY2thYmxlIHsKICAgICAgICBjb2xvcjogIzU1NTsKICAgICAgfQogICAgICAjY2xvc2UtZnVsbC1zdGFjay1idXR0b24gewogICAgICAgIGZsb2F0OiByaWdodDsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgogIDxzY3JpcHQ+Ly9+fldFQlBBVEh+fi90Zi1kZWJ1Z2dlci1kYXNoYm9hcmQvdGYtc291cmNlLWNvZGUtdmlldy5odG1sLmpzClBvbHltZXIoe2lzOiJ0Zi1zb3VyY2UtY29kZS12aWV3Iixwcm9wZXJ0aWVzOntyZXF1ZXN0TWFuYWdlcjp7dHlwZTpPYmplY3QsdmFsdWU6bnVsbH0sZm9jdXNOb2RlTmFtZTp7dHlwZTpTdHJpbmcsdmFsdWU6bnVsbH0sX29sZEZvY3VzTm9kZU5hbWU6e3R5cGU6U3RyaW5nLHZhbHVlOm51bGx9LGRlYnVnV2F0Y2hlczp7dHlwZTpBcnJheSx2YWx1ZTpbXX0sbm9kZUNsaWNrZWQ6e3R5cGU6RnVuY3Rpb24sdmFsdWU6bnVsbH0sY29udGludWVUb05vZGU6e3R5cGU6RnVuY3Rpb24sdmFsdWU6bnVsbH0sX2hpZ2hsaWdodGVkRWxlbWVudHM6e3R5cGU6QXJyYXksdmFsdWU6W119LF9maWxlUGF0aFNlbGVjdGVkOk51bWJlcixfZnVsbEZpbGVQYXRoczp7dHlwZTpBcnJheSx2YWx1ZTpudWxsfSxfc2hvcnRGaWxlUGF0aHM6e3R5cGU6QXJyYXksdmFsdWU6bnVsbH0sX2ZpbGVMaW5lczp7dHlwZTpBcnJheSx2YWx1ZTpudWxsfSxfbm9kZU5hbWUyRGV2aWNlTmFtZTp7dHlwZTpPYmplY3QsdmFsdWU6bnVsbH0sCl9ub2RlTmFtZTJCYXNlRXhwYW5kZWROb2RlTmFtZTp7dHlwZTpPYmplY3QsdmFsdWU6bnVsbH0sX25vZGVOYW1lMk5vZGVFbGVtZW50czp7dHlwZTpPYmplY3QsdmFsdWU6bnVsbH0sX25vZGVOYW1lMlN0YWNrVG9wTm9kZUVsZW1lbnQ6e3R5cGU6T2JqZWN0LHZhbHVlOm51bGx9LF9zZXRIaWdodGxpZ2h0T3JpZ2luTm9kZUVsZW1lbnQ6e3R5cGU6T2JqZWN0LHZhbHVlOm51bGx9LF9mdWxsU3RhY2tTaG93bjp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxfZnVsbFN0YWNrTm9kZU5hbWU6e3R5cGU6U3RyaW5nLHZhbHVlOm51bGx9LF9yZW5kZXJEZWxheU1pbGxpczp7dHlwZTpOdW1iZXIsdmFsdWU6NTAscmVhZG9ubHk6ITB9fSxvYnNlcnZlcnM6WyJfcmVuZGVyRmlsZShfZmlsZVBhdGhTZWxlY3RlZCkiLCJfZm9jdXNPbk5vZGUoZm9jdXNOb2RlTmFtZSkiXSxyZW5kZXIoYSl7bnVsbCE9YSYmdGhpcy5zZXQoIl9kZWJ1Z1dhdGNoZXMiLGEpO3RoaXMuX3F1ZXJ5U291cmNlQ29kZUVuZFBvaW50KHttb2RlOiJwYXRocyJ9KS50aGVuKGM9Pgp7dGhpcy5zZXQoIl9mdWxsRmlsZVBhdGhzIixjLnBhdGhzKTtjb25zdCBkPWMucGF0aHMubWFwKGY9Pih7aWQ6ZixuYW1lOnRoaXMuX3Nob3J0ZW5QYXRoKGYsYy5wYXRocyl9KSk7dGhpcy5zZXQoIl9zaG9ydEZpbGVQYXRocyIsZCk7MDxkLmxlbmd0aCYmdGhpcy5zZXQoIl9maWxlUGF0aFNlbGVjdGVkIiwwKX0pfSxfc2hvcnRlblBhdGgoYSl7YT1hLnJlcGxhY2UoL1xcL2csIi8iKTthPWEuc3BsaXQoIi8iKTtyZXR1cm4gYVthLmxlbmd0aC0xXX0sX3JlbmRlckZpbGUoYSl7aWYobnVsbCE9YSl7dmFyIGM9dGhpcy5fc2hvcnRGaWxlUGF0aHNbYV0uaWQ7dGhpcy5fcXVlcnlTb3VyY2VDb2RlRW5kUG9pbnQoe21vZGU6ImNvbnRlbnQiLGZpbGVfcGF0aDpjfSkudGhlbihkPT57Y29uc3QgZj1bXSxnPWQuY29udGVudFtjXSxsPWQubGluZW5vX3RvX29wX25hbWVfYW5kX3N0YWNrX3BvcztkPXt9O2Zvcih2YXIgayBpbiBsKWwuaGFzT3duUHJvcGVydHkoaykmJihkW2tdPWxba10ubGVuZ3RoKTsKdGhpcy5fZmlsdGVyRmlsZVRyYWNlYmFja3NCeURlYnVnV2F0Y2hlcyhsKTtmb3Ioaz0wO2s8Zy5sZW5ndGg7KytrKXtjb25zdCBwPWsrMTtmLnB1c2goe2xpbmVubzpwLG51bU5vZGVzOm51bGwhPWxbcF0/U3RyaW5nKGxbcF0ubGVuZ3RoKSsiLyIrU3RyaW5nKGRbcF0pKyIgXHUyNWJjIjoiIix0ZXh0OnRoaXMuX2h0bWxFc2NhcGUoZ1trXSl9KX10aGlzLnNldCgiX2ZpbGVMaW5lcyIsZik7Y29uc3QgbT10aGlzO3NldFRpbWVvdXQoKCk9Pntjb25zdCBwPXt9LHE9e307Zm9yKGNvbnN0IHQgaW4gbCl7aWYoIWwuaGFzT3duUHJvcGVydHkodCkpY29udGludWU7Zm9yKHZhciByPW0uJCQoIiNzb3VyY2UtbGluZS1ub2Rlcy0iK3QpO3IuZmlyc3RDaGlsZDspci5yZW1vdmVDaGlsZChyLmZpcnN0Q2hpbGQpO2NvbnN0IHY9bFt0XTt2LnNvcnQoZnVuY3Rpb24oQSx5KXtyZXR1cm4gQVswXTx5WzBdPy0xOkFbMF0+eVswXT8xOjB9KTtmb3IobGV0IEE9MDtBPHYubGVuZ3RoOysrQSl7Y29uc3QgeT0KdltBXVswXSx4PXZbQV1bMV0sQz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxGPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTtGLnNldEF0dHJpYnV0ZSgiY2xhc3MiLCJzb3VyY2UtbGluZS1ub2RlLWVudHRyeSIpO0Yuc2V0QXR0cmlidXRlKCJzb3VyY2VMaW5lbm8iLHQpO0YudGV4dENvbnRlbnQ9eTtGLmFkZEV2ZW50TGlzdGVuZXIoInRhcCIsKCk9Pnt0aGlzLm5vZGVDbGlja2VkKHRoaXMuX25vZGVOYW1lMkRldmljZU5hbWVbeV0sdGhpcy5fbm9kZU5hbWUyQmFzZUV4cGFuZGVkTm9kZU5hbWVbeV0sITApfSk7Y29uc3QgRD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJwYXBlci1pY29uLWJ1dHRvbiIpO0Quc2V0QXR0cmlidXRlKCJpY29uIiwiZmlsdGVyLWxpc3QiKTtELnNldEF0dHJpYnV0ZSgidGl0bGUiLCJTaG93IHN0YWNrIik7RC5hZGRFdmVudExpc3RlbmVyKCJ0YXAiLCgpPT57dGhpcy5faGlnaGxpZ2h0Tm9kZUVsZW1lbnRzKHkpO3RoaXMuc2V0KCJfZnVsbFN0YWNrTm9kZU5hbWUiLAp5KTt0aGlzLnNldCgiX2Z1bGxTdGFja1Nob3duIiwhMCk7dGhpcy5fcG9wdWxhdGVGdWxsU3RhY2soeSx0aGlzLl9mdWxsRmlsZVBhdGhzW3RoaXMuX2ZpbGVQYXRoU2VsZWN0ZWRdLE51bWJlcih0KSl9KTtjb25zdCBCPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInBhcGVyLWljb24tYnV0dG9uIik7Qi5zZXRBdHRyaWJ1dGUoImljb24iLCJmb3J3YXJkIik7Qi5zZXRBdHRyaWJ1dGUoInRpdGxlIiwiQ29udGludWUgdG8iKTtCLmFkZEV2ZW50TGlzdGVuZXIoInRhcCIsKCk9Pnt0aGlzLm5vZGVDbGlja2VkKHRoaXMuX25vZGVOYW1lMkRldmljZU5hbWVbeV0sdGhpcy5fbm9kZU5hbWUyQmFzZUV4cGFuZGVkTm9kZU5hbWVbeV0sITApO2NvbnN0IEc9dGhpcy5fbm9kZU5hbWUyRGV2aWNlTmFtZVt5XSxLPXRoaXMuX25vZGVOYW1lMkJhc2VFeHBhbmRlZE5vZGVOYW1lW3ldO3RoaXMuc2V0KCJfc2V0SGlnaHRsaWdodE9yaWdpbk5vZGVFbGVtZW50IixGKTt0aGlzLmNvbnRpbnVlVG9Ob2RlKEcsCkspfSk7Qy5hcHBlbmRDaGlsZChEKTtDLmFwcGVuZENoaWxkKEIpO0MuYXBwZW5kQ2hpbGQoRik7ci5hcHBlbmRDaGlsZChDKTtwLmhhc093blByb3BlcnR5KHkpfHwocFt5XT1bXSk7cFt5XS5wdXNoKEYpO3EuaGFzT3duUHJvcGVydHkoeSl8fChxW3ldPVtGLHhdKTt4PnFbeV1bMV0mJihxW3ldPVtGLHhdKX1yLnNldEF0dHJpYnV0ZSgiaGlkZGVuIiwhMCk7cj1tLiQkKCIjc291cmNlLWxpbmUtbm9kZS10b2dnbGUtIit0KTtudWxsPT1yLmdldEF0dHJpYnV0ZSgidGFwQ2FsbGJhY2tTZXQiKSYmKHIuYWRkRXZlbnRMaXN0ZW5lcigidGFwIiwoKT0+e20uX3RvZ2dsZUxpbmVOb2RlcyhOdW1iZXIodCkpfSksci5zZXRBdHRyaWJ1dGUoInRhcENhbGxiYWNrU2V0IiwhMCkpfW0uc2V0KCJfbm9kZU5hbWUyTm9kZUVsZW1lbnRzIixwKTtmb3IoY29uc3QgdCBpbiBxKXEuaGFzT3duUHJvcGVydHkodCkmJihxW3RdPXFbdF1bMF0pO20uc2V0KCJfbm9kZU5hbWUyU3RhY2tUb3BOb2RlRWxlbWVudCIsCnEpfSx0aGlzLl9yZW5kZXJEZWxheU1pbGxpcyl9KX19LF90b2dnbGVMaW5lTm9kZXMoYSxjPSExKXthPXRoaXMuJCQoIiNzb3VyY2UtbGluZS1ub2Rlcy0iK2EpO251bGw9PWEuZ2V0QXR0cmlidXRlKCJoaWRkZW4iKSYmITAhPT1jP2Euc2V0QXR0cmlidXRlKCJoaWRkZW4iLCEwKTphLnJlbW92ZUF0dHJpYnV0ZSgiaGlkZGVuIil9LF9maWx0ZXJGaWxlVHJhY2ViYWNrc0J5RGVidWdXYXRjaGVzKGEpe2NvbnN0IGM9dGhpcy5kZWJ1Z1dhdGNoZXMubWFwKGc9PmltLnJlbW92ZU5vZGVOYW1lQmFzZUV4cGFuc2lvbihnLm5vZGVfbmFtZSkpLGQ9e30sZj17fTtmb3IoY29uc3QgZyBvZiB0aGlzLmRlYnVnV2F0Y2hlcyl7Y29uc3QgbD1pbS5yZW1vdmVOb2RlTmFtZUJhc2VFeHBhbnNpb24oZy5ub2RlX25hbWUpO2RbbF09Zy5kZXZpY2VfbmFtZTtmW2xdPWcubm9kZV9uYW1lfXRoaXMuc2V0KCJfbm9kZU5hbWUyRGV2aWNlTmFtZSIsZCk7dGhpcy5zZXQoIl9ub2RlTmFtZTJCYXNlRXhwYW5kZWROb2RlTmFtZSIsCmYpO2Zvcihjb25zdCBnIGluIGEpYS5oYXNPd25Qcm9wZXJ0eShnKSYmKGFbZ109YVtnXS5maWx0ZXIobD0+Xy5pbmNsdWRlcyhjLGxbMF0pKSl9LF9xdWVyeVNvdXJjZUNvZGVFbmRQb2ludChhKXtjb25zdCBjPVBrLmdldFJvdXRlcigpLnBsdWdpblJvdXRlKCJkZWJ1Z2dlciIsIi9zb3VyY2VfY29kZSIpO2E9UGsuYWRkUGFyYW1zKGMsYSk7cmV0dXJuIHRoaXMucmVxdWVzdE1hbmFnZXIucmVxdWVzdChhKX0sX2h0bWxFc2NhcGUoYSl7cmV0dXJuIGEucmVwbGFjZSgvIC9nLCJcdTAwYTAiKX0sX2ZvY3VzT25Ob2RlKGEpe2lmKG51bGwhPWEpe3ZhciBjPXRoaXMuX3Nob3J0RmlsZVBhdGhzW3RoaXMuX2ZpbGVQYXRoU2VsZWN0ZWRdLmlkLGQ9dGhpczt0aGlzLl9xdWVyeVNvdXJjZUNvZGVFbmRQb2ludCh7bW9kZToib3BfdHJhY2ViYWNrIixvcF9uYW1lOmF9KS50aGVuKGY9Pntjb25zdCBnPWYub3BfdHJhY2ViYWNrW2FdO2Y9W107Zm9yKGxldCBrPTA7azxnLmxlbmd0aDsrK2spe2NvbnN0IG09Cmdba11bMV07Z1trXVswXT09PWMmJmYucHVzaChtKX1mb3IodmFyIGwgb2YgZC5faGlnaGxpZ2h0ZWRFbGVtZW50cylsLmNsYXNzTGlzdC5yZW1vdmUoImhpZ2hsaWdodGVkLXNvdXJjZS1saW5lIik7bD1bXTtmb3IoY29uc3QgayBvZiBmKWY9dGhpcy4kJCgiI3NvdXJjZS1saW5lLSIrayksbC5wdXNoKGYpLGYuY2xhc3NMaXN0LmFkZCgiaGlnaGxpZ2h0ZWQtc291cmNlLWxpbmUiKSxkLl90b2dnbGVMaW5lTm9kZXMoaywhMCk7ZC5zZXQoIl9oaWdobGlnaHRlZEVsZW1lbnRzIixsKTt0aGlzLl9oaWdobGlnaHROb2RlRWxlbWVudHMoYSl9KX19LF9oaWdobGlnaHROb2RlRWxlbWVudHMoYSl7aWYobnVsbCE9dGhpcy5fb2xkRm9jdXNOb2RlTmFtZSlmb3IoY29uc3QgYyBvZiB0aGlzLl9ub2RlTmFtZTJOb2RlRWxlbWVudHNbdGhpcy5fb2xkRm9jdXNOb2RlTmFtZV0pYy5zdHlsZVsiZm9udC13ZWlnaHQiXT0ibm9ybWFsIjtmb3IoY29uc3QgYyBvZiB0aGlzLl9ub2RlTmFtZTJOb2RlRWxlbWVudHNbYV0pYy5zdHlsZVsiZm9udC13ZWlnaHQiXT0KImJvbGQiO251bGw9PXRoaXMuX3NldEhpZ2h0bGlnaHRPcmlnaW5Ob2RlRWxlbWVudD90aGlzLl9ub2RlTmFtZTJTdGFja1RvcE5vZGVFbGVtZW50W2FdLnNjcm9sbEludG9WaWV3KHtibG9jazoiY2VudGVyIixiZWhhdmlvdXI6InNtb290aCJ9KTp0aGlzLnNldCgiX3NldEhpZ2h0bGlnaHRPcmlnaW5Ob2RlRWxlbWVudCIsbnVsbCk7dGhpcy5zZXQoIl9vbGRGb2N1c05vZGVOYW1lIixhKX0sX3BvcHVsYXRlRnVsbFN0YWNrKGEsYyxkKXt0aGlzLl9xdWVyeVNvdXJjZUNvZGVFbmRQb2ludCh7bW9kZToib3BfdHJhY2ViYWNrIixvcF9uYW1lOmF9KS50aGVuKGY9Pntjb25zdCBnPXRoaXMuJCQoIiNmdWxsLXN0YWNrLWNvbnRlbnQiKTtmb3IoO2cuZmlyc3RDaGlsZDspZy5yZW1vdmVDaGlsZChnLmZpcnN0Q2hpbGQpO2Zvcihjb25zdCBsIG9mIGYub3BfdHJhY2ViYWNrW2FdKXtjb25zdCBrPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImxpIiksbT1sWzBdLHA9TnVtYmVyKGxbMV0pO2sudGV4dENvbnRlbnQ9Cm0rIjogIitTdHJpbmcocCk7Xy5pbmNsdWRlcyh0aGlzLl9mdWxsRmlsZVBhdGhzLG0pPyhrLmNsYXNzTGlzdC5hZGQoInN0YWNrLWZyYW1lLWNsaWNrYWJsZSIpLGsuc3R5bGUuY29sb3I9ImJsdWUiLGsuc3R5bGVbInRleHQtZGVjb3JhdGlvbiJdPSJ1bmRlcmxpbmUiLGsuc3R5bGUuY3Vyc29yPSJwb2ludGVyIixtPT09YyYmcD09PWQmJihrLnN0eWxlWyJmb250LXdlaWdodCJdPSJib2xkIiksay5hZGRFdmVudExpc3RlbmVyKCJ0YXAiLCgpPT57dGhpcy5zZXQoIl9maWxlUGF0aFNlbGVjdGVkIix0aGlzLl9mdWxsRmlsZVBhdGhzLmluZGV4T2YobSkpO3NldFRpbWVvdXQoKCk9Pnt0aGlzLl90b2dnbGVMaW5lTm9kZXMocCwhMCk7Zm9yKGNvbnN0IHEgb2YgdGhpcy5fbm9kZU5hbWUyTm9kZUVsZW1lbnRzW2FdKU51bWJlcihxLmdldEF0dHJpYnV0ZSgic291cmNlTGluZW5vIikpPT09TnVtYmVyKHApJiYocS5zY3JvbGxJbnRvVmlldyh7YmxvY2s6ImNlbnRlciIsYmVoYXZpb3VyOiJzbW9vdGgifSksCnRoaXMuc2V0KCJfc2V0SGlnaHRsaWdodE9yaWdpbk5vZGVFbGVtZW50IixrKSx0aGlzLl9oaWdobGlnaHROb2RlRWxlbWVudHMoYSksYz09PW0mJmQ9PT1wfHx0aGlzLl9wb3B1bGF0ZUZ1bGxTdGFjayhhLG0scCkpfSwyKnRoaXMuX3JlbmRlckRlbGF5TWlsbGlzKX0pKTooay5jbGFzc0xpc3QuYWRkKCJzdGFjay1mcmFtZS1ub25jbGlja2FibGUiKSxrLnN0eWxlLmNvbG9yPSIjNTU1Iik7Zy5hcHBlbmRDaGlsZChrKX19KX0sX2Nsb3NlRnVsbFN0YWNrRGlhbG9nKCl7dGhpcy5zZXQoIl9mdWxsU3RhY2tTaG93biIsITEpfX0pOwo8L3NjcmlwdD4KPC9kb20tbW9kdWxlPgoKCgoKCjxkb20tbW9kdWxlIGlkPSJ0Zi10ZW5zb3ItZGF0YS1zdW1tYXJ5Ij4KICA8dGVtcGxhdGU+CiAgICA8c3BhbiBjbGFzcz0ic2VjdGlvbi10aXRsZSI+VGVuc29yIFZhbHVlIE92ZXJ2aWV3PC9zcGFuPgogICAgPGRpdiBpZD0idGVuc29yLWRhdGEtZGl2IiBjbGFzcz0idGVuc29yLWRhdGEtZGl2Ij4KICAgICAgPHRhYmxlIGlkPSJ0ZW5zb3ItZGF0YS10YWJsZSIgYWxpZ249ImxlZnQiIGNsYXNzPSJ0ZW5zb3ItZGF0YS10YWJsZSI+CiAgICAgICAgPHRoZWFkPgogICAgICAgICAgPHRyIGFsaWduPSJsZWZ0Ij4KICAgICAgICAgICAgPHRoPlRlbnNvcjwvdGg+CiAgICAgICAgICAgIDx0aD5Db3VudDwvdGg+CiAgICAgICAgICAgIDx0aD5EVHlwZTwvdGg+CiAgICAgICAgICAgIDx0aD5TaGFwZTwvdGg+CiAgICAgICAgICAgIDx0aCB3aWR0aD0iMjUlIj5WYWx1ZTwvdGg+CiAgICAgICAgICAgIDx0aCB3aWR0aD0iMjUlIj4KICAgICAgICAgICAgICBIZWFsdGggUGlsbAogICAgICAgICAgICAgIDxwYXBlci10b2dnbGUtYnV0dG9uIGlkPSJzaG93LWhlYWx0aC1waWxscyIgY2hlY2tlZD0ie3tfaGVhbHRoUGlsbHNFbmFibGVkfX0iPgogICAgICAgICAgICAgIDwvcGFwZXItdG9nZ2xlLWJ1dHRvbj4KICAgICAgICAgICAgICA8cGFwZXItY2FyZD4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImhlYWx0aC1waWxsLWxlZ2VuZCIgaWQ9ImhlYWx0aC1waWxsLWxlZ2VuZCI+PC9kaXY+CiAgICAgICAgICAgICAgPC9wYXBlci1jYXJkPgogICAgICAgICAgICA8L3RoPgogICAgICAgICAgICA8dGggd2lkdGg9IjUlIj48L3RoPgogICAgICAgICAgPC90cj4KICAgICAgICA8L3RoZWFkPgogICAgICAgIDx0Ym9keT48L3Rib2R5PgogICAgICA8L3RhYmxlPgogICAgPC9kaXY+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0ICN0ZW5zb3ItZGF0YS1kaXYgewogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICB9CiAgICAgIC5zZWN0aW9uLXRpdGxlIHsKICAgICAgICBmb250LXNpemU6IDExMCU7CiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICAgIH0KICAgICAgOmhvc3QgLmluZGVudGVkLWxldmVsLWNvbnRhaW5lciAuY29udGVudC1jb250YWluZXIgewogICAgICAgIG1hcmdpbjogMCAwIDAgMTBweDsKICAgICAgfQogICAgICA6aG9zdCAudGVuc29yLWRhdGEtdGFibGUgewogICAgICAgIGFsaWduLWNvbnRlbnQ6IGxlZnQ7CiAgICAgICAgYWxpZ24taXRlbXM6IGxlZnQ7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIHBhZGRpbmctdG9wOiAzcHg7CiAgICAgICAgcGFkZGluZy1sZWZ0OiAzcHg7CiAgICAgICAgcGFkZGluZy1yaWdodDogM3B4OwogICAgICAgIGJveC1zaGFkb3c6IDNweCAzcHggI2RkZDsKICAgICAgfQogICAgICA6aG9zdCAjdGVuc29yLWRhdGEtdGFibGUgdGggewogICAgICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7CiAgICAgIH0KICAgICAgOmhvc3QgLmFjdGl2ZS10ZW5zb3IgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmZmZTA7CiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICAgICAgYm9yZGVyOiBzb2xpZCAxcHggIzg4ODsKICAgICAgfQogICAgICA6aG9zdCAuaGlnaGxpZ2h0ZWQgewogICAgICAgIGNvbG9yOiByZWQ7CiAgICAgIH0KICAgICAgOmhvc3QgLmhlYWx0aC1waWxsLWxlZ2VuZCB7CiAgICAgICAgZmxvYXQ6IHJpZ2h0OwogICAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CiAgICAgIH0KICAgICAgOmhvc3QgI3Nob3ctaGVhbHRoLXBpbGxzIHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgIH0KICAgICAgLnZhbHVlLWV4cGFuc2lvbi1saW5rIHsKICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgIH0KICAgICAgLnZhbHVlLWV4cGFuc2lvbi1saW5rIDpob3ZlciB7CiAgICAgICAgY29sb3I6IGJsdWU7CiAgICAgIH0KICAgICAgLmhlYWx0aC1waWxsIDpob3ZlciB7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICB9CiAgICAgIC50ZW5zb3ItbmFtZSB7CiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICB9CiAgICAgIC50ZW5zb3ItbmFtZSA6aG92ZXIgewogICAgICAgIGNvbG9yOiBibHVlOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CiAgPHNjcmlwdD4vL35+V0VCUEFUSH5+L3RmLWRlYnVnZ2VyLWRhc2hib2FyZC90Zi10ZW5zb3ItZGF0YS1zdW1tYXJ5Lmh0bWwuanMKUG9seW1lcih7aXM6InRmLXRlbnNvci1kYXRhLXN1bW1hcnkiLHByb3BlcnRpZXM6e2xhdGVzdFRlbnNvckRhdGE6T2JqZWN0LGV4cGFuZEhhbmRsZXI6T2JqZWN0LGNvbnRpbnVlVG9DYWxsYmFjazpGdW5jdGlvbixoaWdobGlnaHRlZE5vZGVOYW1lOnt0eXBlOlN0cmluZyx2YWx1ZTpudWxsfSx0ZW5zb3JOYW1lQ2xpY2tlZDp7dHlwZTpGdW5jdGlvbix2YWx1ZTpudWxsfSxnZXRIZWFsdGhQaWxsOkZ1bmN0aW9uLF9oZWFsdGhQaWxsc0VuYWJsZWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMCxub3RpZnk6ITB9LF93YXRjaEtleXM6e3R5cGU6QXJyYXksdmFsdWU6W119LF93YXRjaEtleTJEYXRhOnt0eXBlOk9iamVjdCx2YWx1ZTp7fX0sX3dhdGNoS2V5MkNvdW50Ont0eXBlOk9iamVjdCx2YWx1ZTp7fX0sX3dhdGNoS2V5MkV4cGFuZEhhbmRsZXI6e3R5cGU6T2JqZWN0LHZhbHVlOnt9fSxfd2F0Y2hLZXkyVmFsdWVTaG9ydDp7dHlwZTpPYmplY3QsdmFsdWU6e319LF93YXRjaEtleTJSb3c6e3R5cGU6T2JqZWN0LAp2YWx1ZTp7fX0sX2FjdGl2ZVdhdGNoS2V5OlN0cmluZyxfaGVhbHRoUGlsbFdpZHRoOnt0eXBlOk51bWJlcix2YWx1ZToyMDAscmVhZG9ubHk6ITB9LF9oZWFsdGhQaWxsSGVpZ2h0Ont0eXBlOk51bWJlcix2YWx1ZTozMixyZWFkb25seTohMH19LG9ic2VydmVyczpbIl9yZW5kZXJMYXRlc3QobGF0ZXN0VGVuc29yRGF0YSwgZXhwYW5kSGFuZGxlcikiLCJfaGlnaGxpZ2h0KGhpZ2hsaWdodGVkTm9kZU5hbWUpIl0sbGlzdGVuZXJzOnsic2hvdy1oZWFsdGgtcGlsbHMuY2hhbmdlIjoiX3Nob3dIZWFsdGhQaWxsc0NoYW5nZWQifSxyZWFkeSgpe3RoaXMuX3JlbmRlckhlYWx0aFBpbGxMZWdlbmQoKX0sZW5hYmxlSGVhbHRoUGlsbHMoKXt0aGlzLnNldCgiX2hlYWx0aFBpbGxzRW5hYmxlZCIsITApO3RoaXMuX3JlbmRlckhlYWx0aFBpbGxMZWdlbmQoKX0sX3Nob3dIZWFsdGhQaWxsc0NoYW5nZWQoKXt0aGlzLl9oZWFsdGhQaWxsc0VuYWJsZWQ/dGhpcy5fcmVuZGVySGVhbHRoUGlsbExlZ2VuZCgpOgp0aGlzLl9jbGVhckhlYWx0aFBpbGxMZWdlbmQoKTt0aGlzLl9yZW5kZXJBbGwoKX0sX3JlbmRlckFsbCgpe3RoaXMuX2NsZWFyVGVuc29yRGF0YVRhYmxlKCk7Zm9yKGNvbnN0IGEgb2YgdGhpcy5fd2F0Y2hLZXlzKXRoaXMuX3JlbmRlckxhdGVzdCh0aGlzLl93YXRjaEtleTJEYXRhW2FdLHRoaXMuX3dhdGNoS2V5MkV4cGFuZEhhbmRsZXJbYV0pfSxfdGVuc29yRGF0YTJXYXRjaEtleShhKXtyZXR1cm4gYS5kZXZpY2VOYW1lKyIvIithLnRlbnNvck5hbWUrIjoiK2EuZGVidWdPcH0sX3JlbmRlckxhdGVzdChhLGMpe2lmKGEpe3ZhciBkPXRoaXMuX3RlbnNvckRhdGEyV2F0Y2hLZXkoYSksZj1udWxsOyJVbmluaXRpYWxpemVkIiE9PWEuZHR5cGUmJiJVbnN1cHBvcnRlZCIhPT1hLmR0eXBlJiYoZj0oKT0+YyhhKSk7dmFyIGc9bnVsbCE9YS52YWx1ZT9KU09OLnN0cmluZ2lmeShhLnZhbHVlLChsLGspPT5rLnRvRml4ZWQ/TnVtYmVyKGsudG9GaXhlZCgzKSk6ayk6IihDbGljayB0byB2aWV3KSI7CnRoaXMuX3dhdGNoS2V5MkRhdGFbZF09YTstMT09PXRoaXMuX3dhdGNoS2V5cy5pbmRleE9mKGQpPyh0aGlzLl93YXRjaEtleXMucHVzaChkKSx0aGlzLl93YXRjaEtleTJDb3VudFtkXT0xKTp0aGlzLl93YXRjaEtleTJDb3VudFtkXSs9MTt0aGlzLl93YXRjaEtleTJFeHBhbmRIYW5kbGVyW2RdPWY7dGhpcy5fd2F0Y2hLZXkyVmFsdWVTaG9ydFtkXT1nO3RoaXMuX2FjdGl2ZVdhdGNoS2V5PWQ7dGhpcy5fcmVtb3ZlQWN0aXZlU3RhdHVzRnJvbUFsbFJvd3MoKTt0aGlzLl9yZW5kZXJSb3coZCl9fSxfY2xlYXJUZW5zb3JEYXRhVGFibGUoKXtmb3IoY29uc3QgYSBpbiB0aGlzLl93YXRjaEtleTJSb3cpdGhpcy5fd2F0Y2hLZXkyUm93Lmhhc093blByb3BlcnR5KGEpJiYodGhpcy5fd2F0Y2hLZXkyUm93W2FdLnJlbW92ZSgpLGRlbGV0ZSB0aGlzLl93YXRjaEtleTJSb3dbYV0pfSxfY2xlYXJUZW5zb3JEYXRhUm93KGEpe2Zvcig7YS5maXJzdENoaWxkOylhLnJlbW92ZUNoaWxkKGEuZmlyc3RDaGlsZCl9LApfY2xlYXJIZWFsdGhQaWxsTGVnZW5kKCl7Y29uc3QgYT10aGlzLiQkKCIjaGVhbHRoLXBpbGwtbGVnZW5kIik7Zm9yKDthLmZpcnN0Q2hpbGQ7KWEucmVtb3ZlQ2hpbGQoYS5maXJzdENoaWxkKX0sX3JlbmRlckhlYWx0aFBpbGxMZWdlbmQoKXt0aGlzLl9jbGVhckhlYWx0aFBpbGxMZWdlbmQoKTtjb25zdCBhPXRoaXMuJCQoIiNoZWFsdGgtcGlsbC1sZWdlbmQiKTt2YXIgYz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtjLnRleHRDb250ZW50PSJMZWdlbmQ6IjthLmFwcGVuZENoaWxkKGMpO2Muc3R5bGVbIm1hcmdpbi1yaWdodCJdPSIwLjVlbSI7Yy5zdHlsZS5kaXNwbGF5PSJpbmxpbmUtYmxvY2siO2ZvcihjPTA7Yzx0Zi5ncmFwaC5zY2VuZS5oZWFsdGhQaWxsRW50cmllcy5sZW5ndGg7KytjKXtjb25zdCBkPXRmLmdyYXBoLnNjZW5lLmhlYWx0aFBpbGxFbnRyaWVzW2NdLGY9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Zi5zdHlsZS5kaXNwbGF5PSJpbmxpbmUtYmxvY2siOwpmLnN0eWxlWyJtYXJnaW4tcmlnaHQiXT0iMC4yNWVtIjtjb25zdCBnPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTtnLnRleHRDb250ZW50PSJcdTI1YTAiO2cuc3R5bGUuY29sb3I9ZC5iYWNrZ3JvdW5kX2NvbG9yO2NvbnN0IGw9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpO2wudGV4dENvbnRlbnQ9ZC5sYWJlbDtsLnN0eWxlLmNvbG9yPWQuYmFja2dyb3VuZF9jb2xvcjtmLmFwcGVuZENoaWxkKGcpO2YuYXBwZW5kQ2hpbGQobCk7YS5hcHBlbmRDaGlsZChmKX19LF9yZW1vdmVBY3RpdmVTdGF0dXNGcm9tQWxsUm93cygpe2Zvcihjb25zdCBhIGluIHRoaXMuX3dhdGNoS2V5MlJvdyl7aWYoIXRoaXMuX3dhdGNoS2V5MlJvdy5oYXNPd25Qcm9wZXJ0eShhKSljb250aW51ZTtjb25zdCBjPXRoaXMuX3dhdGNoS2V5MlJvd1thXTtQb2x5bWVyLmRvbShjKS5jbGFzc0xpc3QucmVtb3ZlKCJhY3RpdmUtdGVuc29yIik7UG9seW1lci5kb20oYykuY2xhc3NMaXN0LnJlbW92ZSgiaGlnaGxpZ2h0ZWQiKX19LApfcmVuZGVyUm93KGEpe2xldCBjLGQ9ITE7bnVsbCE9dGhpcy5fd2F0Y2hLZXkyUm93W2FdPyhjPXRoaXMuX3dhdGNoS2V5MlJvd1thXSx0aGlzLl9jbGVhclRlbnNvckRhdGFSb3coYyksZD0hMSk6KGM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidHIiKSxkPSEwKTtjb25zdCBmPXRoaXMuX3dhdGNoS2V5MkRhdGFbYV0uZGV2aWNlTmFtZSxnPXRoaXMuX3dhdGNoS2V5MkRhdGFbYV0ubWF5YmVCYXNlRXhwYW5kZWROb2RlTmFtZSxsPWYrIi8iK2c7dmFyIGs9dGhpcy5fd2F0Y2hLZXkyQ291bnRbYV0sbT10aGlzLl93YXRjaEtleTJEYXRhW2FdLnRlbnNvck5hbWUscD10aGlzLl93YXRjaEtleTJEYXRhW2FdLmRlYnVnT3AscT10aGlzLl93YXRjaEtleTJWYWx1ZVNob3J0W2FdO2NvbnN0IHI9dGhpcy5fd2F0Y2hLZXkyRXhwYW5kSGFuZGxlclthXSx0PWE9PT10aGlzLl9hY3RpdmVXYXRjaEtleSx2PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7UG9seW1lci5kb20odikuY2xhc3NMaXN0LmFkZCgidGVuc29yLW5hbWUiKTsKdi5zdHlsZVsidGV4dC1kZWNvcmF0aW9uIl09InVuZGVybGluZSI7di5zdHlsZS5jdXJzb3I9InBvaW50ZXIiO3YudGV4dENvbnRlbnQ9bTt2LmFkZEV2ZW50TGlzdGVuZXIoInRhcCIsKCk9PntudWxsIT10aGlzLnRlbnNvck5hbWVDbGlja2VkJiZ0aGlzLnRlbnNvck5hbWVDbGlja2VkKGYsZyl9KTtjb25zdCBBPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7QS50ZXh0Q29udGVudD1rO2NvbnN0IHk9dGhpcy5fd2F0Y2hLZXkyRGF0YVthXS5kdHlwZTtrPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7Y29uc3QgeD10aGlzLl93YXRjaEtleTJEYXRhW2FdLnNoYXBlO2sudGV4dENvbnRlbnQ9eTtjb25zdCBDPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7Qy50ZXh0Q29udGVudD1KU09OLnN0cmluZ2lmeSh4KTtjb25zdCBGPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7Ri50ZXh0Q29udGVudD1xO1BvbHltZXIuZG9tKEYpLmNsYXNzTGlzdC5hZGQoInZhbHVlLWV4cGFuc2lvbi1saW5rIik7Cm51bGwhPXImJihGLmFkZEV2ZW50TGlzdGVuZXIoInRhcCIsciwhMSksRi5zdHlsZVsidGV4dC1kZWNvcmF0aW9uIl09InVuZGVybGluZSIsRi5zdHlsZS5jdXJzb3I9InBvaW50ZXIiKTtxPW51bGw7cT10aGlzLl9oZWFsdGhQaWxsc0VuYWJsZWQ/dGhpcy5fcmVuZGVySGVhbHRoUGlsbChtKyI6IitwLHtkZXZpY2VfbmFtZTpmLG5vZGVfbmFtZTpnLGR0eXBlOnksc2hhcGU6eCx2YWx1ZTpudWxsfSxyKTpkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpO209ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTtwPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInBhcGVyLWljb24tYnV0dG9uIik7cC5zZXRBdHRyaWJ1dGUoImljb24iLCJmb3J3YXJkIik7cC5zZXRBdHRyaWJ1dGUoInRpdGxlIiwiQ29udGludWUgdG8iKTtwLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwoKT0+e3RoaXMuY29udGludWVUb0NhbGxiYWNrKGYsZyl9KTttLmFwcGVuZENoaWxkKHApO2MuYXBwZW5kQ2hpbGQodik7CmMuYXBwZW5kQ2hpbGQoQSk7Yy5hcHBlbmRDaGlsZChrKTtjLmFwcGVuZENoaWxkKEMpO2MuYXBwZW5kQ2hpbGQoRik7Yy5hcHBlbmRDaGlsZChxKTtjLmFwcGVuZENoaWxkKG0pO2Muc2V0QXR0cmlidXRlKCJub2RlTmFtZVdpdGhEZXZpY2UiLGwpO3QmJihQb2x5bWVyLmRvbShjKS5jbGFzc0xpc3QuYWRkKCJhY3RpdmUtdGVuc29yIiksUG9seW1lci5kb20oYykuY2xhc3NMaXN0LmFkZCgiaGlnaGxpZ2h0ZWQiKSk7dGhpcy5fd2F0Y2hLZXkyUm93W2FdPWM7ZCYmUG9seW1lci5kb20odGhpcy4kJCgiI3RlbnNvci1kYXRhLXRhYmxlIHRib2R5IikpLmFwcGVuZENoaWxkKGMpO2Muc2Nyb2xsSW50b1ZpZXcoe2Jsb2NrOiJlbmQiLGlubGluZToibmVhcmVzdCIsYmVoYXZpb3VyOiJzbW9vdGgifSl9LF9yZW5kZXJIZWFsdGhQaWxsKGEsYyxkKXtjb25zdCBmPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7UG9seW1lci5kb20oZikuY2xhc3NMaXN0LmFkZCgiaGVhbHRoLXBpbGwiKTsKbnVsbCE9ZCYmZi5hZGRFdmVudExpc3RlbmVyKCJ0YXAiLGQsITEpO2Q9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKHRmLmdyYXBoLnNjZW5lLlNWR19OQU1FU1BBQ0UsInN2ZyIpO2Quc2V0QXR0cmlidXRlKCJ3aWR0aCIsdGhpcy5faGVhbHRoUGlsbFdpZHRoKTtkLnNldEF0dHJpYnV0ZSgiaGVpZ2h0Iix0aGlzLl9oZWFsdGhQaWxsSGVpZ2h0KTtjb25zdCBnPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyh0Zi5ncmFwaC5zY2VuZS5TVkdfTkFNRVNQQUNFLCJnIik7ZC5hcHBlbmRDaGlsZChnKTtmLmFwcGVuZENoaWxkKGQpO2NvbnN0IGw9InRkcC8iK2E7dGhpcy5nZXRIZWFsdGhQaWxsKGEsYy5kZXZpY2VfbmFtZSxjLm5vZGVfbmFtZSxrPT57bnVsbD09az8oZi50ZXh0Q29udGVudD0iTi9BIixmLnN0eWxlLmNvbG9yPSJncmF5Iik6KGMudmFsdWU9ayx0Zi5ncmFwaC5zY2VuZS5hZGRIZWFsdGhQaWxsKGcsYyxudWxsLGwsdGhpcy5faGVhbHRoUGlsbFdpZHRoLHRoaXMuX2hlYWx0aFBpbGxIZWlnaHQvCjIsdGhpcy5faGVhbHRoUGlsbEhlaWdodC8yLDApKX0pO3JldHVybiBmfSxfaGlnaGxpZ2h0KGEpe1BvbHltZXIuZG9tKHRoaXMuJCQoIiN0ZW5zb3ItZGF0YS10YWJsZSIpKTtjb25zdCBjPVtdO2Zvcihjb25zdCBkIGluIHRoaXMuX3dhdGNoS2V5MlJvdyl7aWYoIXRoaXMuX3dhdGNoS2V5MlJvdy5oYXNPd25Qcm9wZXJ0eShkKSljb250aW51ZTtjb25zdCBmPXRoaXMuX3dhdGNoS2V5MlJvd1tkXTtudWxsIT1mLmdldEF0dHJpYnV0ZSYmKGYuZ2V0QXR0cmlidXRlKCJub2RlTmFtZVdpdGhEZXZpY2UiKT09PWE/Yy5wdXNoKGYpOlBvbHltZXIuZG9tKGYpLmNsYXNzTGlzdC5yZW1vdmUoImhpZ2hsaWdodGVkIikpfWlmKG51bGwhPWEpZm9yKGE9MDthPGMubGVuZ3RoOysrYSlQb2x5bWVyLmRvbShjW2FdKS5jbGFzc0xpc3QuYWRkKCJoaWdobGlnaHRlZCIpLGNbYV0uc2Nyb2xsSW50b1ZpZXcoe2Jsb2NrOiJlbmQiLGlubGluZToibmVhcmVzdCIsYmVoYXZpb3VyOiJzbW9vdGgifSl9fSk7Cjwvc2NyaXB0Pgo8L2RvbS1tb2R1bGU+CgoKPHNjcmlwdD4vL35+V0VCUEFUSH5+L3RlbnNvci13aWRnZXQvdGVuc29yX3dpZGdldF9iaW5hcnkuanMKdmFyIGptPXRoaXMmJnRoaXMuX19nZW5lcmF0b3J8fGZ1bmN0aW9uKGEsYyl7ZnVuY3Rpb24gZChxKXtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIGYoW3Escl0pfX1mdW5jdGlvbiBmKHEpe2lmKGwpdGhyb3cgbmV3IFR5cGVFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLiIpO2Zvcig7ZzspdHJ5e2lmKGw9MSxrJiYobT1xWzBdJjI/a1sicmV0dXJuIl06cVswXT9rWyJ0aHJvdyJdfHwoKG09a1sicmV0dXJuIl0pJiZtLmNhbGwoayksMCk6ay5uZXh0KSYmIShtPW0uY2FsbChrLHFbMV0pKS5kb25lKXJldHVybiBtO2lmKGs9MCxtKXE9W3FbMF0mMixtLnZhbHVlXTtzd2l0Y2gocVswXSl7Y2FzZSAwOmNhc2UgMTptPXE7YnJlYWs7Y2FzZSA0OnJldHVybiBnLmxhYmVsKysse3ZhbHVlOnFbMV0sZG9uZTohMX07Y2FzZSA1OmcubGFiZWwrKztrPXFbMV07cT1bMF07Y29udGludWU7Y2FzZSA3OnE9Zy5vcHMucG9wKCk7Zy50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYoIShtPQpnLnRyeXMsbT0wPG0ubGVuZ3RoJiZtW20ubGVuZ3RoLTFdKSYmKDY9PT1xWzBdfHwyPT09cVswXSkpe2c9MDtjb250aW51ZX1pZigzPT09cVswXSYmKCFtfHxxWzFdPm1bMF0mJnFbMV08bVszXSkpZy5sYWJlbD1xWzFdO2Vsc2UgaWYoNj09PXFbMF0mJmcubGFiZWw8bVsxXSlnLmxhYmVsPW1bMV0sbT1xO2Vsc2UgaWYobSYmZy5sYWJlbDxtWzJdKWcubGFiZWw9bVsyXSxnLm9wcy5wdXNoKHEpO2Vsc2V7bVsyXSYmZy5vcHMucG9wKCk7Zy50cnlzLnBvcCgpO2NvbnRpbnVlfX1xPWMuY2FsbChhLGcpfWNhdGNoKHIpe3E9WzYscl0saz0wfWZpbmFsbHl7bD1tPTB9aWYocVswXSY1KXRocm93IHFbMV07cmV0dXJue3ZhbHVlOnFbMF0/cVsxXTp2b2lkIDAsZG9uZTohMH19dmFyIGc9e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKG1bMF0mMSl0aHJvdyBtWzFdO3JldHVybiBtWzFdfSx0cnlzOltdLG9wczpbXX0sbCxrLG0scDtyZXR1cm4gcD17bmV4dDpkKDApLCJ0aHJvdyI6ZCgxKSwKInJldHVybiI6ZCgyKX0sImZ1bmN0aW9uIj09PXR5cGVvZiBTeW1ib2wmJihwW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLHB9LGttPWZ1bmN0aW9uKGEpe2Z1bmN0aW9uIGMoRCxCLEcsSyl7cmV0dXJuIG5ldyAoR3x8KEc9UHJvbWlzZSkpKGZ1bmN0aW9uKEwsSil7ZnVuY3Rpb24gUChUKXt0cnl7TihLLm5leHQoVCkpfWNhdGNoKFkpe0ooWSl9fWZ1bmN0aW9uIFMoVCl7dHJ5e04oS1sidGhyb3ciXShUKSl9Y2F0Y2goWSl7SihZKX19ZnVuY3Rpb24gTihUKXtULmRvbmU/TChULnZhbHVlKToobmV3IEcoZnVuY3Rpb24oWSl7WShULnZhbHVlKX0pKS50aGVuKFAsUyl9TigoSz1LLmFwcGx5KEQsQnx8W10pKS5uZXh0KCkpfSl9ZnVuY3Rpb24gZChEKXtyZXR1cm4gbnVsbCE9PUQubWF0Y2goL15pbnRbMC05XSskLyl8fG51bGwhPT1ELm1hdGNoKC9edWludFswLTldKyQvKX1mdW5jdGlvbiBmKEQpe3JldHVybiBudWxsIT09RC5tYXRjaCgvXmZsb2F0WzAtOV0rJC8pfHwKbnVsbCE9PUQubWF0Y2goL15iZmxvYXRbMC05XSskLyl9ZnVuY3Rpb24gZyhEKXtyZXR1cm4iYm9vbCI9PT1ELnRvTG93ZXJDYXNlKCl8fCJib29sZWFuIj09PUQudG9Mb3dlckNhc2UoKX1mdW5jdGlvbiBsKEQpe3JldHVybiJzdHIiPT09RC50b0xvd2VyQ2FzZSgpfHwic3RyaW5nIj09PUQudG9Mb3dlckNhc2UoKX1mdW5jdGlvbiBrKEQpe3ZhciBCPTE7RC5mb3JFYWNoKGZ1bmN0aW9uKEcpe0IqPUd9KTtyZXR1cm4gQn1mdW5jdGlvbiBtKEQpe3JldHVybiAwPT09RC5sZW5ndGg/InNjYWxhciI6IlsiK0QrIl0ifWZ1bmN0aW9uIHAoRCl7dmFyIEI9e3NsaWNpbmdEaW1zQW5kSW5kaWNlczpbXSx2aWV3aW5nRGltczpbXSx2ZXJ0aWNhbFJhbmdlOm51bGwsaG9yaXpvbnRhbFJhbmdlOm51bGx9LEc9RC5sZW5ndGg7aWYoMT09PUcpQi52aWV3aW5nRGltcz1bMF07ZWxzZSBpZigxPEcpe2lmKDI8Rylmb3IodmFyIEs9MDtLPEctMjsrK0spQi5zbGljaW5nRGltc0FuZEluZGljZXMucHVzaCh7ZGltOkssCmluZGV4OjA9PT1EW0tdP251bGw6MH0pO2ZvcihLPUQubGVuZ3RoLTI7SzxELmxlbmd0aDsrK0spQi52aWV3aW5nRGltcy5wdXNoKEspfXJldHVybiBCfWZ1bmN0aW9uIHEoRCxCKXtpZihELnZpZXdpbmdEaW1zWzBdIT09Qi52aWV3aW5nRGltc1swXXx8RC52aWV3aW5nRGltc1sxXSE9PUIudmlld2luZ0RpbXNbMV0pcmV0dXJuITE7Qj1ELnNsaWNpbmdEaW1zQW5kSW5kaWNlcy5tYXAoZnVuY3Rpb24oRyl7cmV0dXJuIEcuZGltfSk7Qi5zb3J0KCk7RD1ELnNsaWNpbmdEaW1zQW5kSW5kaWNlcy5tYXAoZnVuY3Rpb24oRyl7cmV0dXJuIEcuZGltfSk7RC5zb3J0KCk7cmV0dXJuIEpTT04uc3RyaW5naWZ5KEIpPT09SlNPTi5zdHJpbmdpZnkoRCl9ZnVuY3Rpb24gcihEKXtyZXR1cm4gMjA+PUQubGVuZ3RoP0Q6RC5zbGljZSgwLDEwKSsiLi4uIitELnNsaWNlKEQubGVuZ3RoLTcsRC5sZW5ndGgpfWZ1bmN0aW9uIHQoRCxCLEcsSyl7dm9pZCAwPT09RyYmKEc9Mik7aWYoaXNOYU4oRCkpcmV0dXJuIk5hTiI7CmlmKC1JbmZpbml0eT09PUQpcmV0dXJuIi1cdTIyMWUiO2lmKEluZmluaXR5PT09RClyZXR1cm4iK1x1MjIxZSI7bnVsbD09SyYmKEs9TWF0aC5hYnMoRCksSz0xRTM+SyYmLjAxPD1LfHwwPT09Sz8iZml4ZWQiOiJleHBvbmVudGlhbCIpO3JldHVybiBudWxsPT1LfHwiZml4ZWQiPT09Sz9CPyIiK0Q6RC50b0ZpeGVkKEcpOkQudG9FeHBvbmVudGlhbChHKX1mdW5jdGlvbiB2KEQsQil7dm9pZCAwPT09QiYmKEI9ITApO3JldHVybiBEP0I/IlQiOiJUcnVlIjpCPyJGIjoiRmFsc2UifWZ1bmN0aW9uIEEoRCxCKXt2b2lkIDA9PT1CJiYoQj00KTtyZXR1cm4gbnVsbD09PUJ8fEQubGVuZ3RoPD1CP0Q6RC5zbGljZSgwLEItMSkrIlx1MjAyNiJ9dmFyIHk7KGZ1bmN0aW9uKEQpe0RbRC5VUD0xXT0iVVAiO0RbRC5ET1dOPTJdPSJET1dOIjtEW0QuTEVGVD0zXT0iTEVGVCI7RFtELlJJR0hUPTRdPSJSSUdIVCJ9KSh5fHwoeT17fSkpO3ZhciB4PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gRChCLEcsSywKTCxKLFApe3RoaXMuc2hhcGU9Qjt0aGlzLnNsaWNlRGltcz1bXTt0aGlzLnNsaWNlSW5kaWNlcz1bXTtpZigwPT09ayh0aGlzLnNoYXBlKSl0aHJvdyBFcnJvcigiVGVuc29yRWxlbWVudFNlbGVjdGlvbiBkb2Vzbid0IHN1cHBvcnQgdGVuc29yIHdpdGggemVybyBlbGVtZW50cy4iKTtmb3IoQj0wO0I8Ry5zbGljaW5nRGltc0FuZEluZGljZXMubGVuZ3RoOysrQil7dGhpcy5zbGljZURpbXMucHVzaChHLnNsaWNpbmdEaW1zQW5kSW5kaWNlc1tCXS5kaW0pO3ZhciBTPUcuc2xpY2luZ0RpbXNBbmRJbmRpY2VzW0JdLmluZGV4O2lmKG51bGw9PT1TKXRocm93IEVycm9yKCJGYWlsZWQgdG8gY3JlYXRlIFRlbnNvckVsZW1lbnRTZWxlY3Rpb24gZHVlIHRvIHVuZGV0ZXJtaW5lZCBzbGljaW5nIGluZGV4IGF0IGRpbWVuc2lvbiAiK0IpO3RoaXMuc2xpY2VJbmRpY2VzLnB1c2goUyl9dGhpcy5yYW5rPXRoaXMuc2hhcGUubGVuZ3RoO2lmKDA8dGhpcy5yYW5rJiZ0aGlzLnNsaWNlRGltcy5sZW5ndGg+PQp0aGlzLnJhbmspdGhyb3cgRXJyb3IoIkV4cGVjdGVkIHNsaWNlRGltcyB0byBoYXZlIGEgbGVuZ3RoIGxlc3MgdGhhbiByYW5rICIrdGhpcy5yYW5rKyIsICIrKCJidXQgZ290IGxlbmd0aCAiK3RoaXMuc2xpY2VEaW1zLmxlbmd0aCkpO3RoaXMudmlld0RpbXM9W107Zm9yKEI9MDtCPHRoaXMucmFuazsrK0IpLTE9PT10aGlzLnNsaWNlRGltcy5pbmRleE9mKEIpJiZ0aGlzLnZpZXdEaW1zLnB1c2goQik7aWYoMjx0aGlzLnZpZXdEaW1zLmxlbmd0aCl0aHJvdyBFcnJvcigiT25seSBzZWxlY3Rpb25zIGluIDFEIGFuZCAyRCBhcmUgc3VwcG9ydGVkLiIpO3RoaXMucm93U3RhcnQ9bnVsbD09Sz8wOks7dGhpcy5jb2xTdGFydD1udWxsPT1MPzA6TDt0aGlzLnJvd0NvdW50PW51bGw9PUo/MTpKO3RoaXMuY29sQ291bnQ9bnVsbD09UD8xOlB9RC5wcm90b3R5cGUuZ2V0RWxlbWVudFN0YXR1cz1mdW5jdGlvbihCKXtpZihCLmxlbmd0aCE9PXRoaXMucmFuayl0aHJvdyBFcnJvcigiRXhwZWN0ZWQgaW5kaWNlcyB0byBoYXZlIGEgcmFuayBvZiAiKwp0aGlzLnJhbmsrIiwgIisoImJ1dCBnb3QgIitCLmxlbmd0aCsiIChbIitCKyJdKSIpKTtmb3IodmFyIEc9MDtHPEIubGVuZ3RoOysrRylpZigtMSE9PXRoaXMuc2xpY2VEaW1zLmluZGV4T2YoRykmJkJbR10hPT10aGlzLnNsaWNlSW5kaWNlc1t0aGlzLnNsaWNlRGltcy5pbmRleE9mKEcpXSlyZXR1cm4gbnVsbDtHPW51bGw7dmFyIEs9dGhpcy5yb3dTdGFydCt0aGlzLnJvd0NvdW50LEw9dGhpcy5jb2xTdGFydCt0aGlzLmNvbENvdW50O2lmKDA9PT10aGlzLnZpZXdEaW1zLmxlbmd0aCkwPT09Qi5sZW5ndGgmJihHPXt0b3BFZGdlOiEwLGJvdHRvbUVkZ2U6ITAsbGVmdEVkZ2U6ITAscmlnaHRFZGdlOiEwfSk7ZWxzZSBpZigxPT09dGhpcy52aWV3RGltcy5sZW5ndGgpe3ZhciBKPXRoaXMudmlld0RpbXNbMF07QltKXT49dGhpcy5yb3dTdGFydCYmQltKXTxLJiYoRz17dG9wRWRnZTpCW0pdPT09dGhpcy5yb3dTdGFydCxib3R0b21FZGdlOkJbSl09PT1LLTEsbGVmdEVkZ2U6ITAscmlnaHRFZGdlOiEwfSl9ZWxzZSBpZigyPT09CnRoaXMudmlld0RpbXMubGVuZ3RoKXtKPXRoaXMudmlld0RpbXNbMF07dmFyIFA9dGhpcy52aWV3RGltc1sxXTtCW0pdPj10aGlzLnJvd1N0YXJ0JiZCW0pdPEsmJkJbUF0+PXRoaXMuY29sU3RhcnQmJkJbUF08TCYmKEc9e3RvcEVkZ2U6QltKXT09PXRoaXMucm93U3RhcnQsYm90dG9tRWRnZTpCW0pdPT09Sy0xLGxlZnRFZGdlOkJbUF09PT10aGlzLmNvbFN0YXJ0LHJpZ2h0RWRnZTpCW1BdPT09TC0xfSl9ZWxzZSB0aHJvdyBFcnJvcigiVW5leHBlY3RlZCBsZW5ndGggb2Ygdmlld0RpbXM6ICIrdGhpcy52aWV3RGltcyk7cmV0dXJuIEd9O0QucHJvdG90eXBlLm1vdmU9ZnVuY3Rpb24oQixHKXt2YXIgSz1udWxsO2lmKDA9PT10aGlzLnJhbmt8fDE9PT10aGlzLnJhbmsmJihCPT09eS5MRUZUfHxCPT09eS5SSUdIVCkpcmV0dXJuIG51bGw7aWYobnVsbD09PUcudmVydGljYWxSYW5nZXx8bnVsbD09PUcudmVydGljYWxSYW5nZVsxXSl0aHJvdyBFcnJvcigiRmFpbGVkIHRvIG1vdmUgZHVlIHRvIHVuZGV0ZXJtaW5lZCB2ZXJ0aWNhbCByYW5nZS4iKTsKQj09PXkuVVA/MDx0aGlzLnJvd1N0YXJ0JiYodGhpcy5yb3dTdGFydC0tLG51bGwhPUcudmVydGljYWxSYW5nZSYmdGhpcy5yb3dTdGFydDxHLnZlcnRpY2FsUmFuZ2VbMF0mJihLPXkuVVApKTpCPT09eS5ET1dOP251bGwhPUcudmlld2luZ0RpbXMmJm51bGwhPUcudmlld2luZ0RpbXNbMF0mJnRoaXMucm93U3RhcnQ8dGhpcy5zaGFwZVtHLnZpZXdpbmdEaW1zWzBdXS0xJiYodGhpcy5yb3dTdGFydCsrLG51bGwhPUcudmVydGljYWxSYW5nZSYmdGhpcy5yb3dTdGFydD49Ry52ZXJ0aWNhbFJhbmdlWzFdJiYoSz15LkRPV04pKTpCPT09eS5MRUZUPzA8dGhpcy5jb2xTdGFydCYmKHRoaXMuY29sU3RhcnQtLSxudWxsIT1HLmhvcml6b250YWxSYW5nZSYmdGhpcy5jb2xTdGFydDxHLmhvcml6b250YWxSYW5nZVswXSYmKEs9eS5MRUZUKSk6Qj09PXkuUklHSFQmJm51bGwhPUcudmlld2luZ0RpbXMmJm51bGwhPUcudmlld2luZ0RpbXNbMV0mJnRoaXMuY29sU3RhcnQ8dGhpcy5zaGFwZVtHLnZpZXdpbmdEaW1zWzFdXS0KMSYmKHRoaXMuY29sU3RhcnQrKyxudWxsIT1HLmhvcml6b250YWxSYW5nZSYmdGhpcy5jb2xTdGFydD49Ry5ob3Jpem9udGFsUmFuZ2VbMV0mJihLPXkuUklHSFQpKTt0aGlzLmNvbENvdW50PXRoaXMucm93Q291bnQ9MTtyZXR1cm4gS307RC5wcm90b3R5cGUuZ2V0Um93U3RhcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yb3dTdGFydH07RC5wcm90b3R5cGUuZ2V0Um93Q291bnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yb3dDb3VudH07RC5wcm90b3R5cGUuZ2V0Q29sU3RhcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb2xTdGFydH07RC5wcm90b3R5cGUuZ2V0Q29sQ291bnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb2xDb3VudH07cmV0dXJuIER9KCksQz1mdW5jdGlvbigpe2Z1bmN0aW9uIEQoQixHLEspe3ZvaWQgMD09PUsmJihLPWZ1bmN0aW9uKCl7fSk7dGhpcy5yb290RGl2PUI7dGhpcy5zaGFwZT1HO3RoaXMub25TbGljaW5nU3BlY0NoYW5nZT1LO3RoaXMuZGltQ29udHJvbHM9CltdO3RoaXMuZGltSW5wdXRzPVtdO3RoaXMuY29tbWFzPVtdO3RoaXMuZHJvcGRvd25zPVtdO3RoaXMuYnJhY2tldERpdnM9W251bGwsbnVsbF07dGhpcy5kaW1Db250cm9sc0xpc3RlbmVyQXR0YWNoZWQ9W107dGhpcy5yYW5rPXRoaXMuc2hhcGUubGVuZ3RoO2lmKDM+dGhpcy5yYW5rKXRocm93IEVycm9yKCJEaW1lbnNpb24gY29udHJvbCBpcyBub3QgYXBwbGljYWJsZSB0byB0ZW5zb3Igc2hhcGVzIGxlc3MgdGhhbiAiKygiM0Q6IHJlY2VpdmVkICIrdGhpcy5yYW5rKyJEIHRlbnNvciBzaGFwZTogIikrKEpTT04uc3RyaW5naWZ5KHRoaXMuc2hhcGUpKyIuIikpO3RoaXMuY3JlYXRlQ29tcG9uZW50cygpO3RoaXMuc2xpY2luZ1NwZWM9cChHKX1ELnByb3RvdHlwZS5jcmVhdGVDb21wb25lbnRzPWZ1bmN0aW9uKCl7Zm9yKHZhciBCPXRoaXM7dGhpcy5yb290RGl2LmZpcnN0Q2hpbGQ7KXRoaXMucm9vdERpdi5yZW1vdmVDaGlsZCh0aGlzLnJvb3REaXYuZmlyc3RDaGlsZCk7dGhpcy5kaW1Db250cm9scz0KW107dGhpcy5kaW1JbnB1dHM9W107dGhpcy5jb21tYXM9W107dGhpcy5kcm9wZG93bnM9W107dGhpcy5kaW1Db250cm9sc0xpc3RlbmVyQXR0YWNoZWQ9W107dGhpcy5icmFja2V0RGl2c1swXT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTt0aGlzLmJyYWNrZXREaXZzWzBdLnRleHRDb250ZW50PSJTbGljaW5nOiBbIjt0aGlzLmJyYWNrZXREaXZzWzBdLmNsYXNzTGlzdC5hZGQoInRlbnNvci13aWRnZXQtZGltLWJyYWNrZXRzIik7dGhpcy5yb290RGl2LmFwcGVuZENoaWxkKHRoaXMuYnJhY2tldERpdnNbMF0pO2Zvcih2YXIgRz0wO0c8dGhpcy5yYW5rOysrRyl7dmFyIEs9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Sy5jbGFzc0xpc3QuYWRkKCJ0ZW5zb3Itd2lkZ2V0LWRpbSIpO0sudGl0bGU9IkRpbWVuc2lvbiAiK0crIjogc2l6ZVx4M2QiK3RoaXMuc2hhcGVbR107dGhpcy5yb290RGl2LmFwcGVuZENoaWxkKEspO3RoaXMuZGltQ29udHJvbHMucHVzaChLKTt0aGlzLmRpbUNvbnRyb2xzTGlzdGVuZXJBdHRhY2hlZC5wdXNoKCExKTsKSz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpO0suY2xhc3NMaXN0LmFkZCgidGVuc29yLXdpZGdldC1kaW0iKTtLLnN0eWxlLmRpc3BsYXk9Im5vbmUiO3RoaXMucm9vdERpdi5hcHBlbmRDaGlsZChLKTt0aGlzLmRpbUlucHV0cy5wdXNoKEspO0c8dGhpcy5yYW5rLTEmJihLPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLEsuY2xhc3NMaXN0LmFkZCgidGVuc29yLXdpZGdldC1kaW0tY29tbWEiKSxLLnRleHRDb250ZW50PSIsIix0aGlzLnJvb3REaXYuYXBwZW5kQ2hpbGQoSyksdGhpcy5jb21tYXMucHVzaChLKSk7Sz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtLLmNsYXNzTGlzdC5hZGQoInRlbnNvci13aWRnZXQtZGltLWRyb3Bkb3duIik7Sy5zdHlsZS5kaXNwbGF5PSJub25lIjt0aGlzLnJvb3REaXYuYXBwZW5kQ2hpbGQoSyk7dGhpcy5kcm9wZG93bnMucHVzaChLKX10aGlzLmJyYWNrZXREaXZzWzFdPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwp0aGlzLmJyYWNrZXREaXZzWzFdLnRleHRDb250ZW50PSJdIjt0aGlzLmJyYWNrZXREaXZzWzFdLmNsYXNzTGlzdC5hZGQoInRlbnNvci13aWRnZXQtZGltLWJyYWNrZXRzIik7dGhpcy5yb290RGl2LmFwcGVuZENoaWxkKHRoaXMuYnJhY2tldERpdnNbMV0pO3RoaXMucm9vdERpdi5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWxlYXZlIixmdW5jdGlvbigpe0IuY2xlYXJBbGxEcm9wZG93bnMoKX0pfTtELnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oQil7ZnVuY3Rpb24gRyhTKXt2YXIgTj1QLmRpbUNvbnRyb2xzW1NdLFQ9UC5kaW1JbnB1dHNbU10sWT1QLmRyb3Bkb3duc1tTXTtpZigibm9uZSIhPT1ULnN0eWxlLmRpc3BsYXkpcmV0dXJuImNvbnRpbnVlIjt2YXIgYWE9UC5zaGFwZVtTXTtpZigtMSE9PUwuaW5kZXhPZihTKSl7dmFyIGhhPUpbTC5pbmRleE9mKFMpXTtOLnRleHRDb250ZW50PVN0cmluZyhoYSk7VC5jbGFzc0xpc3QuYWRkKCJ0ZW5zb3Itd2lkZ2V0LWRpbSIpO1QudHlwZT0KIm51bWJlciI7VC5taW49IjAiO1QubWF4PVN0cmluZyhhYS0xKTtULnZhbHVlPVN0cmluZyhoYSk7UC5kaW1Db250cm9sc0xpc3RlbmVyQXR0YWNoZWRbU118fChOLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixmdW5jdGlvbigpe0suY2xlYXJBbGxEcm9wZG93bnMoKTtOLnN0eWxlLmRpc3BsYXk9Im5vbmUiO1Quc3R5bGUuZGlzcGxheT0iaW5saW5lLWJsb2NrIn0pLFQuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIixmdW5jdGlvbigpe2lmKG51bGw9PT1LLnNsaWNpbmdTcGVjKXRocm93IEVycm9yKCJTbGljaW5nIGNvbnRyb2wgY2hhbmdlIGNhbGxiYWNrIGZhaWxlZCBkdWUgdG8gbWlzc2luZyBzcGVjLiIpO3ZhciBYPXBhcnNlSW50KFQudmFsdWUsMTApOyFpc0Zpbml0ZShYKXx8MD5YfHxYPj1hYXx8TWF0aC5mbG9vcihhYSkhPWFhP1QudmFsdWU9U3RyaW5nKEsuc2xpY2luZ1NwZWMuc2xpY2luZ0RpbXNBbmRJbmRpY2VzW0wuaW5kZXhPZihTKV0uaW5kZXgpOihLLnNsaWNpbmdTcGVjLnNsaWNpbmdEaW1zQW5kSW5kaWNlc1tMLmluZGV4T2YoUyldLmluZGV4PQpYLE4udGV4dENvbnRlbnQ9U3RyaW5nKFgpLEsub25TbGljaW5nU3BlY0NoYW5nZShLLnNsaWNpbmdTcGVjKSl9KSxULmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLGZ1bmN0aW9uKCl7VC5zdHlsZS5kaXNwbGF5PSJub25lIjtOLnN0eWxlLmRpc3BsYXk9ImlubGluZS1ibG9jayJ9KSxQLmRpbUNvbnRyb2xzTGlzdGVuZXJBdHRhY2hlZFtTXT0hMCl9ZWxzZXtpZihQLnNsaWNpbmdTcGVjLnZpZXdpbmdEaW1zWzBdPT09Uyl7aWYobnVsbD09PVAuc2xpY2luZ1NwZWMudmVydGljYWxSYW5nZSl0aHJvdyBFcnJvcigiTWlzc2luZyB2ZXJ0aWNhbCByYW5nZS4iKTtOLnRleHRDb250ZW50PSJcdTIxOTUgIitQLnNsaWNpbmdTcGVjLnZlcnRpY2FsUmFuZ2VbMF0rIjoiKygiIitQLnNsaWNpbmdTcGVjLnZlcnRpY2FsUmFuZ2VbMV0pfWVsc2V7aWYobnVsbD09PVAuc2xpY2luZ1NwZWMuaG9yaXpvbnRhbFJhbmdlKXRocm93IEVycm9yKCJNaXNzaW5nIGhvcml6b250YWwgcmFuZ2UuIik7Ti50ZXh0Q29udGVudD0KIlx1MjE5NCAiK1Auc2xpY2luZ1NwZWMuaG9yaXpvbnRhbFJhbmdlWzBdKyI6IisoIiIrUC5zbGljaW5nU3BlYy5ob3Jpem9udGFsUmFuZ2VbMV0pfU4uY2xhc3NMaXN0LmFkZCgidGVuc29yLXdpZGdldC1kaW0iKTtQLmRpbUNvbnRyb2xzTGlzdGVuZXJBdHRhY2hlZFtTXXx8KE4uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGZ1bmN0aW9uKCl7dmFyIFg9Ti5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtLLnJlbmRlckRyb3Bkb3duTWVudUl0ZW1zKFksWC5ib3R0b20sWC5sZWZ0LFMpfSksUC5kaW1Db250cm9sc0xpc3RlbmVyQXR0YWNoZWRbU109ITApfX12YXIgSz10aGlzO251bGwhPUImJih0aGlzLnNsaWNpbmdTcGVjPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoQikpKTtpZihudWxsPT09dGhpcy5zbGljaW5nU3BlYyl0aHJvdyBFcnJvcigiU2xpY2luZyBjb250cm9sIHJlbmRlcmluZyBmYWlsZWQgZHVlIHRvIG1pc3Npbmcgc2xpY2luZyBzcGVjLiIpO3ZhciBMPXRoaXMuc2xpY2luZ1NwZWMuc2xpY2luZ0RpbXNBbmRJbmRpY2VzLm1hcChmdW5jdGlvbihTKXtyZXR1cm4gUy5kaW19KSwKSj10aGlzLnNsaWNpbmdTcGVjLnNsaWNpbmdEaW1zQW5kSW5kaWNlcy5tYXAoZnVuY3Rpb24oUyl7cmV0dXJuIFMuaW5kZXh9KSxQPXRoaXM7Zm9yKEI9MDtCPHRoaXMucmFuazsrK0IpRyhCKX07RC5wcm90b3R5cGUucmVuZGVyRHJvcGRvd25NZW51SXRlbXM9ZnVuY3Rpb24oQixHLEssTCl7ZnVuY3Rpb24gSihhYSl7aWYoLTE9PT1TLmluZGV4T2YoYWEpfHxMPT09Ti5zbGljaW5nU3BlYy52aWV3aW5nRGltc1sxXSYmYWE8PU4uc2xpY2luZ1NwZWMudmlld2luZ0RpbXNbMF18fEw9PU4uc2xpY2luZ1NwZWMudmlld2luZ0RpbXNbMF0mJmFhPj1OLnNsaWNpbmdTcGVjLnZpZXdpbmdEaW1zWzFdKXJldHVybiJjb250aW51ZSI7dmFyIGhhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2hhLmNsYXNzTGlzdC5hZGQoInRlbnNvci13aWRnZXQtZGltLWRyb3Bkb3duLW1lbnUtaXRlbSIpO2hhLnRleHRDb250ZW50PSJTd2FwIHdpdGggZGltZW5zaW9uICIrYWE7Qi5hcHBlbmRDaGlsZChoYSk7CmhhLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZW50ZXIiLGZ1bmN0aW9uKCl7aGEuY2xhc3NMaXN0LmFkZCgidGVuc29yLXdpZGdldC1kaW0tZHJvcGRvd24tbWVudS1pdGVtLWFjdGl2ZSIpO1AuZGltQ29udHJvbHNbYWFdLmNsYXNzTGlzdC5hZGQoInRlbnNvci13aWRnZXQtZGltLWhpZ2hsaWdodGVkIil9KTtoYS5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWxlYXZlIixmdW5jdGlvbigpe2hhLmNsYXNzTGlzdC5yZW1vdmUoInRlbnNvci13aWRnZXQtZGltLWRyb3Bkb3duLW1lbnUtaXRlbS1hY3RpdmUiKTtQLmRpbUNvbnRyb2xzW2FhXS5jbGFzc0xpc3QucmVtb3ZlKCJ0ZW5zb3Itd2lkZ2V0LWRpbS1oaWdobGlnaHRlZCIpfSk7dmFyIFg9Ti5zbGljaW5nU3BlYy52aWV3aW5nRGltc1swXT09PUw7aGEuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGZ1bmN0aW9uKCl7aWYobnVsbD09PVAuc2xpY2luZ1NwZWMpdGhyb3cgRXJyb3IoIkRpbWVuc2lvbiBzd2FwcGluZyBmYWlsZWQgZHVlIHRvIG1pc3Npbmcgc2xpY2luZyBzcGVjIik7CnZhciBjYT1TLmluZGV4T2YoYWEpO1Auc2xpY2luZ1NwZWMudmlld2luZ0RpbXNbWD8wOjFdPWFhO1Auc2xpY2luZ1NwZWMuc2xpY2luZ0RpbXNBbmRJbmRpY2VzW2NhXT17ZGltOkwsaW5kZXg6MH07UC5zbGljaW5nU3BlYy52ZXJ0aWNhbFJhbmdlPW51bGw7UC5zbGljaW5nU3BlYy5ob3Jpem9udGFsUmFuZ2U9bnVsbDtpZihQLm9uU2xpY2luZ1NwZWNDaGFuZ2UpUC5vblNsaWNpbmdTcGVjQ2hhbmdlKFAuc2xpY2luZ1NwZWMpfSl9dmFyIFA9dGhpcztpZihudWxsPT09dGhpcy5zbGljaW5nU3BlYyl0aHJvdyBFcnJvcigiU2xpY2luZyBjb250cm9sIGNhbm5vdCByZW5kZXIgZHJvcGRvd24gbWVudSBpdGVtcyBkdWUgdG8gbWlzc2luZyBzbGljaW5nIHNwZWMuIik7dGhpcy5jbGVhckFsbERyb3Bkb3ducygpO2Zvcih2YXIgUz10aGlzLnNsaWNpbmdTcGVjLnNsaWNpbmdEaW1zQW5kSW5kaWNlcy5tYXAoZnVuY3Rpb24oYWEpe3JldHVybiBhYS5kaW19KSxOPXRoaXMsVD0wO1Q8dGhpcy5yYW5rOysrVClKKFQpOwpCLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlbGVhdmUiLGZ1bmN0aW9uKCl7Qi5zdHlsZS5kaXNwbGF5PSJub25lIn0pO2lmKEIuZmlyc3RDaGlsZCl7Qi5zdHlsZS5wb3NpdGlvbj0iZml4ZWQiO0Iuc3R5bGUudG9wPUcrInB4IjtCLnN0eWxlLmxlZnQ9SysicHgiO0Iuc3R5bGUuZGlzcGxheT0iYmxvY2siO1Q9Qi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTt2YXIgWT1ULmxlZnQtSztCLnN0eWxlLnRvcD0oRy0oVC50b3AtRykpLnRvRml4ZWQoMSkrInB4IjtCLnN0eWxlLmxlZnQ9KEstWSkudG9GaXhlZCgxKSsicHgifX07RC5wcm90b3R5cGUuc2V0U2xpY2luZ1NwZWM9ZnVuY3Rpb24oQil7dGhpcy5zbGljaW5nU3BlYz1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KEIpKTtpZihudWxsPT09dGhpcy5zbGljaW5nU3BlYyl0aHJvdyBFcnJvcigiQ2Fubm90IHNldCBzbGljaW5nIHNwZWMgdG8gbnVsbC4iKTt0aGlzLnJlbmRlcih0aGlzLnNsaWNpbmdTcGVjKX07RC5wcm90b3R5cGUuY2xlYXJBbGxEcm9wZG93bnM9CmZ1bmN0aW9uKCl7dGhpcy5kcm9wZG93bnMuZm9yRWFjaChmdW5jdGlvbihCKXtpZihudWxsIT1CKXtmb3IoO0IuZmlyc3RDaGlsZDspQi5yZW1vdmVDaGlsZChCLmZpcnN0Q2hpbGQpO0Iuc3R5bGUuZGlzcGxheT0ibm9uZSJ9fSl9O3JldHVybiBEfSgpLEY9ZnVuY3Rpb24oKXtmdW5jdGlvbiBEKEIsRyxLKXt0aGlzLnJvb3RFbGVtZW50PUI7dGhpcy50ZW5zb3JWaWV3PUc7dGhpcy5iYXNlUnVsZXJUaWNrPXRoaXMudG9wUnVsZXI9dGhpcy52YWx1ZVNlY3Rpb249dGhpcy5zbGljaW5nU3BlY1Jvb3Q9dGhpcy5pbmZvU3Vic2VjdGlvbj10aGlzLmhlYWRlclNlY3Rpb249bnVsbDt0aGlzLnRvcFJ1bGVyVGlja3M9W107dGhpcy5sZWZ0UnVsZXJUaWNrcz1bXTt0aGlzLnZhbHVlUm93cz1bXTt0aGlzLnZhbHVlRGl2cz1bXTt0aGlzLnNsaWNpbmdDb250cm9sPXRoaXMudmFsdWVUb29sdGlwPW51bGw7dGhpcy5jb2xzQ3V0b2ZmPXRoaXMucm93c0N1dG9mZj0hMTt0aGlzLnNlbGVjdGlvbj0KbnVsbDt0aGlzLm9wdGlvbnM9S3x8e307dGhpcy5zbGljaW5nU3BlYz1wKHRoaXMudGVuc29yVmlldy5zcGVjLnNoYXBlKTt0aGlzLnJhbms9dGhpcy50ZW5zb3JWaWV3LnNwZWMuc2hhcGUubGVuZ3RofUQucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3JldHVybiBjKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBqbSh0aGlzLGZ1bmN0aW9uKEIpe3N3aXRjaChCLmxhYmVsKXtjYXNlIDA6dGhpcy5yb290RWxlbWVudC5jbGFzc0xpc3QuYWRkKCJ0ZW5zb3Itd2lkZ2V0Iik7dGhpcy5yZW5kZXJIZWFkZXIoKTtpZighKGQodGhpcy50ZW5zb3JWaWV3LnNwZWMuZHR5cGUpfHxmKHRoaXMudGVuc29yVmlldy5zcGVjLmR0eXBlKXx8Zyh0aGlzLnRlbnNvclZpZXcuc3BlYy5kdHlwZSl8fGwodGhpcy50ZW5zb3JWaWV3LnNwZWMuZHR5cGUpKSl0aHJvdyBFcnJvcigiUmVuZGVyaW5nIGR0eXBlICIrdGhpcy50ZW5zb3JWaWV3LnNwZWMuZHR5cGUrIiBpcyBub3Qgc3VwcG9ydGVkIHlldC4iKTsKcmV0dXJuWzQsdGhpcy5yZW5kZXJWYWx1ZXMoKV07Y2FzZSAxOnJldHVybiBCLnNlbnQoKSxbMl19fSl9KX07RC5wcm90b3R5cGUucmVuZGVySGVhZGVyPWZ1bmN0aW9uKCl7bnVsbD09dGhpcy5oZWFkZXJTZWN0aW9uJiYodGhpcy5oZWFkZXJTZWN0aW9uPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMuaGVhZGVyU2VjdGlvbi5jbGFzc0xpc3QuYWRkKCJ0ZW5zb3Itd2lkZ2V0LWhlYWRlciIpLHRoaXMucm9vdEVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5oZWFkZXJTZWN0aW9uKSk7dGhpcy5yZW5kZXJJbmZvKCl9O0QucHJvdG90eXBlLnJlbmRlckluZm89ZnVuY3Rpb24oKXtpZihudWxsPT09dGhpcy5oZWFkZXJTZWN0aW9uKXRocm93IEVycm9yKCJSZW5kZXJpbmcgdGVuc29yIGluZm8gZmFpbGVkIGR1ZSB0byBtaXNpbmcgaGVhZGVyIHNlY3Rpb24iKTtudWxsPT10aGlzLmluZm9TdWJzZWN0aW9uJiYodGhpcy5pbmZvU3Vic2VjdGlvbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSwKdGhpcy5pbmZvU3Vic2VjdGlvbi5jbGFzc0xpc3QuYWRkKCJ0ZW5zb3Itd2lkZ2V0LWluZm8iKSx0aGlzLmhlYWRlclNlY3Rpb24uYXBwZW5kQ2hpbGQodGhpcy5pbmZvU3Vic2VjdGlvbikpO2Zvcig7dGhpcy5pbmZvU3Vic2VjdGlvbi5maXJzdENoaWxkOyl0aGlzLmluZm9TdWJzZWN0aW9uLnJlbW92ZUNoaWxkKHRoaXMuaW5mb1N1YnNlY3Rpb24uZmlyc3RDaGlsZCk7dGhpcy5yZW5kZXJOYW1lKCk7dGhpcy5yZW5kZXJEVHlwZSgpO3RoaXMucmVuZGVyU2hhcGUoKX07RC5wcm90b3R5cGUucmVuZGVyTmFtZT1mdW5jdGlvbigpe2lmKG51bGw9PXRoaXMuaW5mb1N1YnNlY3Rpb24pdGhyb3cgRXJyb3IoIlJlbmRlcmluZyB0ZW5zb3IgbmFtZSBmYWlsZWQgZHVlIHRvIG1pc3NpbmcgaW5mbyBzdWJzZWN0aW9uLiIpO2lmKG51bGwhPXRoaXMub3B0aW9ucy5uYW1lJiYwIT09dGhpcy5vcHRpb25zLm5hbWUubGVuZ3RoKXt2YXIgQj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtCLmNsYXNzTGlzdC5hZGQoInRlbnNvci13aWRnZXQtdGVuc29yLW5hbWUiKTsKQi50ZXh0Q29udGVudD1yKHRoaXMub3B0aW9ucy5uYW1lKTtCLnRpdGxlPXRoaXMub3B0aW9ucy5uYW1lO3RoaXMuaW5mb1N1YnNlY3Rpb24uYXBwZW5kQ2hpbGQoQil9fTtELnByb3RvdHlwZS5yZW5kZXJEVHlwZT1mdW5jdGlvbigpe2lmKG51bGw9PXRoaXMuaW5mb1N1YnNlY3Rpb24pdGhyb3cgRXJyb3IoIlJlbmRlcmluZyB0ZW5zb3IgZHR5cGUgZmFpbGVkIGR1ZSB0byBtaXNzaW5nIGluZm8gc3Vic2VjdGlvbi4iKTt2YXIgQj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtCLmNsYXNzTGlzdC5hZGQoInRlbnNvci13aWRnZXQtZHR5cGUiKTt2YXIgRz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7Ry5jbGFzc0xpc3QuYWRkKCJ0ZW5zb3Itd2lkZ2V0LWR0eXBlLWxhYmVsIik7Ry50ZXh0Q29udGVudD0iZHR5cGU6IjtCLmFwcGVuZENoaWxkKEcpO0c9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpO0cudGV4dENvbnRlbnQ9dGhpcy50ZW5zb3JWaWV3LnNwZWMuZHR5cGU7CkIuYXBwZW5kQ2hpbGQoRyk7dGhpcy5pbmZvU3Vic2VjdGlvbi5hcHBlbmRDaGlsZChCKX07RC5wcm90b3R5cGUucmVuZGVyU2hhcGU9ZnVuY3Rpb24oKXtpZihudWxsPT10aGlzLmluZm9TdWJzZWN0aW9uKXRocm93IEVycm9yKCJSZW5kZXJpbmcgdGVuc29yIHNoYXBlIGZhaWxlZCBkdWUgdG8gbWlzc2luZyBpbmZvIHN1YnNlY3Rpb24uIik7dmFyIEI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Qi5jbGFzc0xpc3QuYWRkKCJ0ZW5zb3Itd2lkZ2V0LXNoYXBlIik7dmFyIEc9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Ry5jbGFzc0xpc3QuYWRkKCJ0ZW5zb3Itd2lkZ2V0LXNoYXBlLWxhYmVsIik7Ry50ZXh0Q29udGVudD0ic2hhcGU6IjtCLmFwcGVuZENoaWxkKEcpO0c9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Ry5jbGFzc0xpc3QuYWRkKCJ0ZW5zb3Itd2lkZ2V0LXNoYXBlLXZhbHVlIik7Ry50ZXh0Q29udGVudD1tKHRoaXMudGVuc29yVmlldy5zcGVjLnNoYXBlKTsKQi5hcHBlbmRDaGlsZChHKTt0aGlzLmluZm9TdWJzZWN0aW9uLmFwcGVuZENoaWxkKEIpfTtELnByb3RvdHlwZS5yZW5kZXJWYWx1ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gYyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgQj10aGlzO3JldHVybiBqbSh0aGlzLGZ1bmN0aW9uKEcpe3N3aXRjaChHLmxhYmVsKXtjYXNlIDA6cmV0dXJuIDI8dGhpcy5yYW5rJiZudWxsPT09dGhpcy5zbGljaW5nU3BlY1Jvb3QmJih0aGlzLnNsaWNpbmdTcGVjUm9vdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLnNsaWNpbmdTcGVjUm9vdC5jbGFzc0xpc3QuYWRkKCJ0ZW5zb3Itd2lkZ2V0LXNsaWNpbmctZ3JvdXAiKSx0aGlzLnJvb3RFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuc2xpY2luZ1NwZWNSb290KSksbnVsbD09dGhpcy52YWx1ZVNlY3Rpb24mJih0aGlzLnZhbHVlU2VjdGlvbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLnZhbHVlU2VjdGlvbi5jbGFzc0xpc3QuYWRkKCJ0ZW5zb3Itd2lkZ2V0LXZhbHVlLXNlY3Rpb24iKSwKdGhpcy5yb290RWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLnZhbHVlU2VjdGlvbiksdGhpcy52YWx1ZVNlY3Rpb24uYWRkRXZlbnRMaXN0ZW5lcigid2hlZWwiLGZ1bmN0aW9uKEspe3JldHVybiBjKEIsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBqbSh0aGlzLGZ1bmN0aW9uKEwpe3N3aXRjaChMLmxhYmVsKXtjYXNlIDA6aWYobnVsbD09dGhpcy5zZWxlY3Rpb24pcmV0dXJuWzJdO0suc3RvcFByb3BhZ2F0aW9uKCk7Sy5wcmV2ZW50RGVmYXVsdCgpO3RoaXMuaGlkZVZhbHVlVG9vbHRpcCgpO3JldHVybls0LHRoaXMuc2Nyb2xsVXBPckRvd24oMDxLLmRlbHRhWT95LkRPV046eS5VUCldO2Nhc2UgMTpyZXR1cm4gTC5zZW50KCksWzJdfX0pfSl9KSx0aGlzLnZhbHVlU2VjdGlvbi50YWJJbmRleD0xMDI0LHRoaXMudmFsdWVTZWN0aW9uLmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLGZ1bmN0aW9uKEspe3ZhciBMPVszOCw0MCwzNywzOV07aWYobnVsbCE9Qi5zZWxlY3Rpb24mJgotMSE9PUwuaW5kZXhPZihLLmtleUNvZGUpKXtLLnN0b3BQcm9wYWdhdGlvbigpO0sucHJldmVudERlZmF1bHQoKTtCLmhpZGVWYWx1ZVRvb2x0aXAoKTt2YXIgSj1MPW51bGw7Mzg9PT1LLmtleUNvZGU/Sj15LlVQOjQwPT09Sy5rZXlDb2RlP0o9eS5ET1dOOjM3PT09Sy5rZXlDb2RlP0o9eS5MRUZUOjM5PT09Sy5rZXlDb2RlJiYoSj15LlJJR0hUKTtudWxsIT09SiYmKEw9Qi5zZWxlY3Rpb24ubW92ZShKLEIuc2xpY2luZ1NwZWMpKTtudWxsPT09TD9CLnJlbmRlclNlbGVjdGlvbigpOkw9PT15LlVQfHxMPT09eS5ET1dOP0Iuc2Nyb2xsVXBPckRvd24oTCk6KEw9PT15LkxFRlR8fEw9PT15LlJJR0hUKSYmQi5zY3JvbGxMZWZ0T3JSaWdodChMKX19KSksdGhpcy5jbGVhclZhbHVlU2VjdGlvbigpLHRoaXMuY3JlYXRlVG9wUnVsZXIoKSx0aGlzLmNyZWF0ZUxlZnRSdWxlcigpLHRoaXMuY3JlYXRlVmFsdWVEaXZzKCksWzQsdGhpcy5yZW5kZXJSdWxlcnNBbmRWYWx1ZURpdnMoKV07Y2FzZSAxOnJldHVybiBHLnNlbnQoKSwKMjx0aGlzLnJhbmsmJih0aGlzLnNsaWNpbmdDb250cm9sPW5ldyBDKHRoaXMuc2xpY2luZ1NwZWNSb290LHRoaXMudGVuc29yVmlldy5zcGVjLnNoYXBlLGZ1bmN0aW9uKEspe3JldHVybiBjKEIsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBqbSh0aGlzLGZ1bmN0aW9uKEwpe3N3aXRjaChMLmxhYmVsKXtjYXNlIDA6aWYocSh0aGlzLnNsaWNpbmdTcGVjLEspKXJldHVyblszLDJdO3RoaXMuc2xpY2luZ1NwZWM9SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShLKSk7cmV0dXJuWzQsdGhpcy5yZW5kZXIoKV07Y2FzZSAxOnJldHVybiBMLnNlbnQoKSxbMyw0XTtjYXNlIDI6cmV0dXJuIHRoaXMuc2xpY2luZ1NwZWM9SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShLKSksWzQsdGhpcy5yZW5kZXJSdWxlcnNBbmRWYWx1ZURpdnMoKV07Y2FzZSAzOkwuc2VudCgpLEwubGFiZWw9NDtjYXNlIDQ6cmV0dXJuWzJdfX0pfSl9KSx0aGlzLnNsaWNpbmdDb250cm9sLnJlbmRlcih0aGlzLnNsaWNpbmdTcGVjKSksClsyXX19KX0pfTtELnByb3RvdHlwZS5jbGVhclZhbHVlU2VjdGlvbj1mdW5jdGlvbigpe2lmKG51bGwhPT10aGlzLnZhbHVlU2VjdGlvbil7Zm9yKDt0aGlzLnZhbHVlU2VjdGlvbi5maXJzdENoaWxkOyl0aGlzLnZhbHVlU2VjdGlvbi5yZW1vdmVDaGlsZCh0aGlzLnZhbHVlU2VjdGlvbi5maXJzdENoaWxkKTt0aGlzLnRvcFJ1bGVyPW51bGw7dGhpcy52YWx1ZVJvd3M9W119fTtELnByb3RvdHlwZS5jcmVhdGVUb3BSdWxlcj1mdW5jdGlvbigpe3ZhciBCPXRoaXM7aWYobnVsbD09PXRoaXMudmFsdWVTZWN0aW9uKXRocm93IEVycm9yKCJGYWlsZWQgdG8gY3JlYXRlIHRvcCBydWxlciBkdWUgdG8gbWlzc2luZyB2YWx1ZSBzZWN0aW9uLiIpO251bGw9PXRoaXMudG9wUnVsZXImJih0aGlzLnRvcFJ1bGVyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMudG9wUnVsZXIuY2xhc3NMaXN0LmFkZCgidGVuZXNvci13aWRnZXQtdG9wLXJ1bGVyIiksdGhpcy50b3BSdWxlci5zdHlsZS53aGl0ZVNwYWNlPQoibm93cmFwIix0aGlzLnZhbHVlU2VjdGlvbi5hcHBlbmRDaGlsZCh0aGlzLnRvcFJ1bGVyKSx0aGlzLnRvcFJ1bGVyVGlja3M9W10sdGhpcy50b3BSdWxlci5hZGRFdmVudExpc3RlbmVyKCJ3aGVlbCIsZnVuY3Rpb24oUCl7cmV0dXJuIGMoQix2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIGptKHRoaXMsZnVuY3Rpb24oUyl7c3dpdGNoKFMubGFiZWwpe2Nhc2UgMDppZihudWxsPT10aGlzLnNlbGVjdGlvbilyZXR1cm5bMl07UC5zdG9wUHJvcGFnYXRpb24oKTtQLnByZXZlbnREZWZhdWx0KCk7dGhpcy5oaWRlVmFsdWVUb29sdGlwKCk7cmV0dXJuWzQsdGhpcy5zY3JvbGxMZWZ0T3JSaWdodCgwPFAuZGVsdGFZP3kuUklHSFQ6eS5MRUZUKV07Y2FzZSAxOnJldHVybiBTLnNlbnQoKSxbMl19fSl9KX0pKTtmb3IoO3RoaXMudG9wUnVsZXIuZmlyc3RDaGlsZDspdGhpcy50b3BSdWxlci5yZW1vdmVDaGlsZCh0aGlzLnRvcFJ1bGVyLmZpcnN0Q2hpbGQpO3RoaXMuYmFzZVJ1bGVyVGljaz0KZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7dGhpcy5iYXNlUnVsZXJUaWNrLmNsYXNzTGlzdC5hZGQoInRlbnNvci13aWRnZXQtdG9wLXJ1bGVyLXRpY2siKTt0aGlzLnRvcFJ1bGVyLmFwcGVuZENoaWxkKHRoaXMuYmFzZVJ1bGVyVGljayk7Mjw9dGhpcy5yYW5rJiYodGhpcy5zbGljaW5nU3BlYy5ob3Jpem9udGFsUmFuZ2U9WzAsbnVsbF0pO3ZhciBHPTE+PXRoaXMucmFuaz8xOnRoaXMudGVuc29yVmlldy5zcGVjLnNoYXBlW3RoaXMuc2xpY2luZ1NwZWMudmlld2luZ0RpbXNbMV1dO3ZhciBLPXRoaXMucm9vdEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkucmlnaHQ7dGhpcy5jb2xzQ3V0b2ZmPSExO2Zvcih2YXIgTD0wO0w8RzsrK0wpe3ZhciBKPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO0ouY2xhc3NMaXN0LmFkZCgidGVuc29yLXdpZGdldC10b3AtcnVsZXItdGljayIpO3RoaXMudG9wUnVsZXIuYXBwZW5kQ2hpbGQoSik7dGhpcy50b3BSdWxlclRpY2tzLnB1c2goSik7CmlmKEouZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkucmlnaHQ+PUspe2lmKDI8PXRoaXMucmFuayl7aWYobnVsbD09PXRoaXMuc2xpY2luZ1NwZWMuaG9yaXpvbnRhbFJhbmdlKXRocm93IEVycm9yKCJNaXNzaW5nIGhvcml6b250YWwgcmFuZ2UgZm9yICIrdGhpcy5yYW5rKyJEIHRlbnNvci4iKTt0aGlzLnNsaWNpbmdTcGVjLmhvcml6b250YWxSYW5nZVsxXT1MKzE7dGhpcy5jb2xzQ3V0b2ZmPSEwfWJyZWFrfX1pZighdGhpcy5jb2xzQ3V0b2ZmJiYyPD10aGlzLnJhbmspe2lmKG51bGw9PT10aGlzLnNsaWNpbmdTcGVjLmhvcml6b250YWxSYW5nZSl0aHJvdyBFcnJvcigiTWlzc2luZyBob3Jpem9udGFsIHJhbmdlIGZvciAiK3RoaXMucmFuaysiRCB0ZW5zb3IuIik7dGhpcy5zbGljaW5nU3BlYy5ob3Jpem9udGFsUmFuZ2VbMV09R319O0QucHJvdG90eXBlLmNyZWF0ZUxlZnRSdWxlcj1mdW5jdGlvbigpe2lmKG51bGw9PT10aGlzLnZhbHVlU2VjdGlvbil0aHJvdyBFcnJvcigiRmFpbGVkIHRvIGNyZWF0ZSBsZWZ0IHJ1bGVyIGR1ZSB0byBtaXNzaW5nIHZhbHVlIHNlY3Rpb24uIik7CnRoaXMudmFsdWVSb3dzPVtdO3RoaXMubGVmdFJ1bGVyVGlja3M9W107MTw9dGhpcy5yYW5rJiYodGhpcy5zbGljaW5nU3BlYy52ZXJ0aWNhbFJhbmdlPVswLG51bGxdKTt2YXIgQj0wPT09dGhpcy5yYW5rPzE6dGhpcy50ZW5zb3JWaWV3LnNwZWMuc2hhcGVbdGhpcy5zbGljaW5nU3BlYy52aWV3aW5nRGltc1swXV07dGhpcy5yb3dzQ3V0b2ZmPSExO2Zvcih2YXIgRz10aGlzLnJvb3RFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmJvdHRvbSxLPTA7SzxCOysrSyl7dmFyIEw9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7TC5jbGFzc0xpc3QuYWRkKCJ0ZW5zb3Itd2lkZ2V0LXZhbHVlLXJvdyIpO3RoaXMudmFsdWVTZWN0aW9uLmFwcGVuZENoaWxkKEwpO3RoaXMudmFsdWVSb3dzLnB1c2goTCk7dmFyIEo9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Si5jbGFzc0xpc3QuYWRkKCJ0ZW5zb3Itd2lkZ2V0LXRvcC1ydWxlci10aWNrIik7TC5hcHBlbmRDaGlsZChKKTsKdGhpcy5sZWZ0UnVsZXJUaWNrcy5wdXNoKEopO2lmKEouZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuYm90dG9tPj1HKXtpZigxPD10aGlzLnJhbmspe2lmKG51bGw9PT10aGlzLnNsaWNpbmdTcGVjLnZlcnRpY2FsUmFuZ2UpdGhyb3cgRXJyb3IoIk1pc3NpbmcgdmVydGljYWwgcmFuZ2UgZm9yICIrdGhpcy5yYW5rKyJEIHRlbnNvci4iKTt0aGlzLnNsaWNpbmdTcGVjLnZlcnRpY2FsUmFuZ2VbMV09SysxO3RoaXMucm93c0N1dG9mZj0hMH1icmVha319aWYoIXRoaXMucm93c0N1dG9mZiYmMTw9dGhpcy5yYW5rKXtpZihudWxsPT09dGhpcy5zbGljaW5nU3BlYy52ZXJ0aWNhbFJhbmdlKXRocm93IEVycm9yKCJNaXNzaW5nIHZlcnRpY2FsIHJhbmdlIGZvciAiK3RoaXMucmFuaysiRCB0ZW5zb3IuIik7dGhpcy5zbGljaW5nU3BlYy52ZXJ0aWNhbFJhbmdlWzFdPUJ9fTtELnByb3RvdHlwZS5jcmVhdGVWYWx1ZURpdnM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBCKFMpe2Z1bmN0aW9uIE4oWSl7dmFyIGFhPQpkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTthYS5jbGFzc0xpc3QuYWRkKCJ0ZW5zb3Itd2lkZ2V0LXZhbHVlLWRpdiIpO0oudmFsdWVSb3dzW1NdLmFwcGVuZENoaWxkKGFhKTtKLnZhbHVlRGl2c1tTXS5wdXNoKGFhKTthYS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsZnVuY3Rpb24oKXtHLnNlbGVjdGlvbj1uZXcgeChHLnRlbnNvclZpZXcuc3BlYy5zaGFwZSxHLnNsaWNpbmdTcGVjLG51bGw9PUcuc2xpY2luZ1NwZWMudmVydGljYWxSYW5nZXx8bnVsbD09Ry5zbGljaW5nU3BlYy52ZXJ0aWNhbFJhbmdlWzBdPzA6Ry5zbGljaW5nU3BlYy52ZXJ0aWNhbFJhbmdlWzBdK1MsbnVsbD09Ry5zbGljaW5nU3BlYy5ob3Jpem9udGFsUmFuZ2V8fG51bGw9PUcuc2xpY2luZ1NwZWMuaG9yaXpvbnRhbFJhbmdlWzBdPzA6Ry5zbGljaW5nU3BlYy5ob3Jpem9udGFsUmFuZ2VbMF0rWSwxLDEpO0cucmVuZGVyU2VsZWN0aW9uKCl9KTthYS5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWVudGVyIiwKZnVuY3Rpb24oKXt2YXIgaGE9YWEuZ2V0QXR0cmlidXRlKCJkZXRhaWxlZC12YWx1ZSIpO2lmKG51bGwhPT1oYSl7dmFyIFg9Ry5yb290RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxjYT1hYS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxlYT1jYS5ib3R0b20tY2EudG9wLGthPWNhLnJpZ2h0LWNhLmxlZnQsYmE9Ry5jYWxjdWxhdGVJbmRpY2VzKFMsWSk7Ry5kcmF3VmFsdWVUb29sdGlwKGJhLGhhLGNhLnRvcC1YLnRvcCsuOCplYSxjYS5sZWZ0LVgubGVmdCsuNzUqa2EpfX0pO2FhLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlbGVhdmUiLGZ1bmN0aW9uKCl7Ry5oaWRlVmFsdWVUb29sdGlwKCl9KX1KLnZhbHVlRGl2c1tTXT1bXTtmb3IodmFyIFQ9MDtUPEs7KytUKU4oVCl9dmFyIEc9dGhpcztpZihudWxsPT09dGhpcy52YWx1ZVJvd3MpdGhyb3cgRXJyb3IoIlZhbHVlIHJvd3MgYXJlIHVuZXhwZWN0ZWRseSB1bmluaXRpYWxpemVkLiIpO3RoaXMudmFsdWVEaXZzPVtdO2Zvcih2YXIgSz0KdGhpcy50b3BSdWxlclRpY2tzLmxlbmd0aCxMPXRoaXMudmFsdWVSb3dzLmxlbmd0aCxKPXRoaXMsUD0wO1A8TDsrK1ApQihQKX07RC5wcm90b3R5cGUucmVuZGVyVG9wUnVsZXI9ZnVuY3Rpb24oKXtpZigyPD10aGlzLnJhbmspZm9yKHZhciBCPXRoaXMudGVuc29yVmlldy5zcGVjLnNoYXBlW3RoaXMuc2xpY2luZ1NwZWMudmlld2luZ0RpbXNbMV1dLEc9MDtHPHRoaXMudG9wUnVsZXJUaWNrcy5sZW5ndGg7KytHKXtpZihudWxsPT09dGhpcy5zbGljaW5nU3BlYy5ob3Jpem9udGFsUmFuZ2UpdGhyb3cgRXJyb3IoIk1pc3NpbmcgaG9yaXpvbnRhbCByYW5nZSBmb3IgIit0aGlzLnJhbmsrIkQgdGVuc29yLiIpO3ZhciBLPXRoaXMuc2xpY2luZ1NwZWMuaG9yaXpvbnRhbFJhbmdlWzBdK0c7dGhpcy50b3BSdWxlclRpY2tzW0ddLnRleHRDb250ZW50PUs8Qj8iIitLOiIifX07RC5wcm90b3R5cGUucmVuZGVyTGVmdFJ1bGVyPWZ1bmN0aW9uKCl7aWYoMTw9dGhpcy5yYW5rKWZvcih2YXIgQj0KdGhpcy50ZW5zb3JWaWV3LnNwZWMuc2hhcGVbdGhpcy5zbGljaW5nU3BlYy52aWV3aW5nRGltc1swXV0sRz0wO0c8dGhpcy5sZWZ0UnVsZXJUaWNrcy5sZW5ndGg7KytHKXtpZihudWxsPT09dGhpcy5zbGljaW5nU3BlYy52ZXJ0aWNhbFJhbmdlKXRocm93IEVycm9yKCJNaXNzaW5nIHZlcnRjaWFsIHJhbmdlIGZvciAiK3RoaXMucmFuaysiRCB0ZW5zb3IuIik7dmFyIEs9dGhpcy5zbGljaW5nU3BlYy52ZXJ0aWNhbFJhbmdlWzBdK0c7dGhpcy5sZWZ0UnVsZXJUaWNrc1tHXS50ZXh0Q29udGVudD1LPEI/IiIrSzoiIn19O0QucHJvdG90eXBlLnJlbmRlclZhbHVlRGl2cz1mdW5jdGlvbigpe3JldHVybiBjKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBCLEcsSyxMLEosUCxTLE47cmV0dXJuIGptKHRoaXMsZnVuY3Rpb24oVCl7c3dpdGNoKFQubGFiZWwpe2Nhc2UgMDpyZXR1cm4gQj10aGlzLnZhbHVlRGl2cy5sZW5ndGgsRz10aGlzLnZhbHVlRGl2c1swXS5sZW5ndGgsCls0LHRoaXMudGVuc29yVmlldy52aWV3KHRoaXMuc2xpY2luZ1NwZWMpXTtjYXNlIDE6Sz1ULnNlbnQoKTswPT09dGhpcy5yYW5rP0s9W1tLXV06MT09PXRoaXMucmFuayYmKEs9Sy5tYXAoZnVuY3Rpb24oWSl7cmV0dXJuW1ldfSkpO0w9dGhpcy5nZXRWYWx1ZUNsYXNzKCk7Zm9yKEo9MDtKPEI7KytKKWZvcihQPTA7UDxHOysrUClTPXRoaXMudmFsdWVEaXZzW0pdW1BdLEo8Sy5sZW5ndGgmJlA8S1tKXS5sZW5ndGg/KE49S1tKXVtQXSwibnVtZXJpYyI9PT1MP1MudGV4dENvbnRlbnQ9dChOLGQodGhpcy50ZW5zb3JWaWV3LnNwZWMuZHR5cGUpKToiYm9vbGVhbiI9PT1MP1MudGV4dENvbnRlbnQ9dihOKToic3RyaW5nIj09PUwmJihTLnRleHRDb250ZW50PUEoTikpLFMuc2V0QXR0cmlidXRlKCJkZXRhaWxlZC12YWx1ZSIsdGhpcy5nZXREZXRhaWxlZFZhbHVlVG9vbHRpcFN0cmluZyhOKSkpOihTLnRleHRDb250ZW50PSIiLFMuc2V0QXR0cmlidXRlKCJkZXRhaWxlZC12YWx1ZSIsIiIpKTsKdGhpcy5yZW5kZXJTZWxlY3Rpb24oKTtyZXR1cm5bMl19fSl9KX07RC5wcm90b3R5cGUuZ2V0RGV0YWlsZWRWYWx1ZVRvb2x0aXBTdHJpbmc9ZnVuY3Rpb24oQil7cmV0dXJuImJvb2xlYW4iPT09dGhpcy5nZXRWYWx1ZUNsYXNzKCk/dihCLCExKToic3RyaW5nIj09PXRoaXMuZ2V0VmFsdWVDbGFzcygpPyJMZW5ndGgtIitCLmxlbmd0aCsnIHN0cmluZzogIicrQShCLDUwMCkrJyInOlN0cmluZyhCKX07RC5wcm90b3R5cGUucmVuZGVyU2VsZWN0aW9uPWZ1bmN0aW9uKCl7aWYobnVsbCE9dGhpcy5zZWxlY3Rpb24pZm9yKHZhciBCPXRoaXMudmFsdWVEaXZzLmxlbmd0aCxHPXRoaXMudmFsdWVEaXZzWzBdLmxlbmd0aCxLPTA7SzxCOysrSylmb3IodmFyIEw9MDtMPEc7KytMKXt2YXIgSj10aGlzLnZhbHVlRGl2c1tLXVtMXTtKLmNsYXNzTGlzdC5yZW1vdmUoInRlbnNvci13aWRnZXQtdmFsdWUtZGl2LXNlbGVjdGlvbiIpO0ouY2xhc3NMaXN0LnJlbW92ZSgidGVuc29yLXdpZGdldC12YWx1ZS1kaXYtc2VsZWN0aW9uLXRvcCIpOwpKLmNsYXNzTGlzdC5yZW1vdmUoInRlbnNvci13aWRnZXQtdmFsdWUtZGl2LXNlbGVjdGlvbi1ib3R0b20iKTtKLmNsYXNzTGlzdC5yZW1vdmUoInRlbnNvci13aWRnZXQtdmFsdWUtZGl2LXNlbGVjdGlvbi1sZWZ0Iik7Si5jbGFzc0xpc3QucmVtb3ZlKCJ0ZW5zb3Itd2lkZ2V0LXZhbHVlLWRpdi1zZWxlY3Rpb24tcmlnaHQiKTt2YXIgUD10aGlzLmNhbGN1bGF0ZUluZGljZXMoSyxMKTtQPXRoaXMuc2VsZWN0aW9uLmdldEVsZW1lbnRTdGF0dXMoUCk7bnVsbCE9PVAmJihKLmNsYXNzTGlzdC5hZGQoInRlbnNvci13aWRnZXQtdmFsdWUtZGl2LXNlbGVjdGlvbiIpLFAudG9wRWRnZSYmSi5jbGFzc0xpc3QuYWRkKCJ0ZW5zb3Itd2lkZ2V0LXZhbHVlLWRpdi1zZWxlY3Rpb24tdG9wIiksUC5ib3R0b21FZGdlJiZKLmNsYXNzTGlzdC5hZGQoInRlbnNvci13aWRnZXQtdmFsdWUtZGl2LXNlbGVjdGlvbi1ib3R0b20iKSxQLmxlZnRFZGdlJiZKLmNsYXNzTGlzdC5hZGQoInRlbnNvci13aWRnZXQtdmFsdWUtZGl2LXNlbGVjdGlvbi1sZWZ0IiksClAucmlnaHRFZGdlJiZKLmNsYXNzTGlzdC5hZGQoInRlbnNvci13aWRnZXQtdmFsdWUtZGl2LXNlbGVjdGlvbi1yaWdodCIpKX19O0QucHJvdG90eXBlLmNhbGN1bGF0ZUluZGljZXM9ZnVuY3Rpb24oQixHKXtmb3IodmFyIEs9W10sTD10aGlzLnNsaWNpbmdTcGVjLnNsaWNpbmdEaW1zQW5kSW5kaWNlcy5tYXAoZnVuY3Rpb24oTil7cmV0dXJuIE4uZGltfSksSj10aGlzLnNsaWNpbmdTcGVjLnNsaWNpbmdEaW1zQW5kSW5kaWNlcy5tYXAoZnVuY3Rpb24oTil7cmV0dXJuIE4uaW5kZXh9KSxQPTA7UDx0aGlzLnJhbms7KytQKWlmKC0xIT09TC5pbmRleE9mKFApKXt2YXIgUz1KW0wuaW5kZXhPZihQKV07aWYobnVsbD09PVMpdGhyb3cgRXJyb3IoIkZhaWxlZCB0byBjYWxjdWxhdGUgaW5kaWNlczogVW5kZXRlcm1pbmVkIGluZGV4IGF0IGRpbWVuc2lvbiAiK1ApO0sucHVzaChTKX1lbHNlIGlmKFA9PT10aGlzLnNsaWNpbmdTcGVjLnZpZXdpbmdEaW1zWzBdKXtpZihudWxsPT09dGhpcy5zbGljaW5nU3BlYy52ZXJ0aWNhbFJhbmdlfHwKbnVsbD09PXRoaXMuc2xpY2luZ1NwZWMudmVydGljYWxSYW5nZVswXSl0aHJvdyBFcnJvcigiRmFpbGVkIHRvIGNhbGN1bGF0ZSBpbmRpY2VzIGR1ZSB0byB1bmRlcnRlcm1pbmVkIHZlcnRpY2FsIHJhbmdlLiIpO0sucHVzaCh0aGlzLnNsaWNpbmdTcGVjLnZlcnRpY2FsUmFuZ2VbMF0rQil9ZWxzZSBpZihQPT09dGhpcy5zbGljaW5nU3BlYy52aWV3aW5nRGltc1sxXSl7aWYobnVsbD09PXRoaXMuc2xpY2luZ1NwZWMuaG9yaXpvbnRhbFJhbmdlfHxudWxsPT09dGhpcy5zbGljaW5nU3BlYy5ob3Jpem9udGFsUmFuZ2VbMF0pdGhyb3cgRXJyb3IoIkZhaWxlZCB0byBjYWxjdWxhdGUgaW5kaWNlcyBkdWUgdG8gdW5kZXJ0ZXJtaW5lZCB2ZXJ0aWNhbCByYW5nZS4iKTtLLnB1c2godGhpcy5zbGljaW5nU3BlYy5ob3Jpem9udGFsUmFuZ2VbMF0rRyl9cmV0dXJuIEt9O0QucHJvdG90eXBlLmRyYXdWYWx1ZVRvb2x0aXA9ZnVuY3Rpb24oQixHLEssTCl7bnVsbD09PXRoaXMudmFsdWVUb29sdGlwJiYKKHRoaXMudmFsdWVUb29sdGlwPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMudmFsdWVUb29sdGlwLmNsYXNzTGlzdC5hZGQoInRlbnNvci13aWRnZXQtdmFsdWUtdG9vbHRpcCIpLHRoaXMucm9vdEVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy52YWx1ZVRvb2x0aXApKTtmb3IoO3RoaXMudmFsdWVUb29sdGlwLmZpcnN0Q2hpbGQ7KXRoaXMudmFsdWVUb29sdGlwLnJlbW92ZUNoaWxkKHRoaXMudmFsdWVUb29sdGlwLmZpcnN0Q2hpbGQpO3ZhciBKPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO0ouY2xhc3NMaXN0LmFkZCgidGVuc29yLXdpZGdldC12YWx1ZS10b29sdGlwLWluZGljZXMiKTtKLnRleHRDb250ZW50PSJJbmRpY2VzOiAiK0pTT04uc3RyaW5naWZ5KEIpO3RoaXMudmFsdWVUb29sdGlwLmFwcGVuZENoaWxkKEopO0I9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Qi5jbGFzc0xpc3QuYWRkKCJ0ZW5zb3Itd2lkZ2V0LXZhbHVlLXRvb2x0aXAtdmFsdWUiKTsKQi50ZXh0Q29udGVudD1HO3RoaXMudmFsdWVUb29sdGlwLmFwcGVuZENoaWxkKEIpO3RoaXMudmFsdWVUb29sdGlwLnN0eWxlLnRvcD1LKyJweCI7dGhpcy52YWx1ZVRvb2x0aXAuc3R5bGUubGVmdD1MKyJweCI7dGhpcy52YWx1ZVRvb2x0aXAuc3R5bGUuZGlzcGxheT0iYmxvY2sifTtELnByb3RvdHlwZS5oaWRlVmFsdWVUb29sdGlwPWZ1bmN0aW9uKCl7bnVsbCE9dGhpcy52YWx1ZVRvb2x0aXAmJih0aGlzLnZhbHVlVG9vbHRpcC5zdHlsZS5kaXNwbGF5PSJub25lIil9O0QucHJvdG90eXBlLnJlbmRlclJ1bGVyc0FuZFZhbHVlRGl2cz1mdW5jdGlvbigpe3JldHVybiBjKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBqbSh0aGlzLGZ1bmN0aW9uKEIpe3N3aXRjaChCLmxhYmVsKXtjYXNlIDA6cmV0dXJuIG51bGwhPXRoaXMuc2xpY2luZ0NvbnRyb2wmJnRoaXMuc2xpY2luZ0NvbnRyb2wuc2V0U2xpY2luZ1NwZWModGhpcy5zbGljaW5nU3BlYyksdGhpcy5yZW5kZXJUb3BSdWxlcigpLAp0aGlzLnJlbmRlckxlZnRSdWxlcigpLFs0LHRoaXMucmVuZGVyVmFsdWVEaXZzKCldO2Nhc2UgMTpyZXR1cm4gQi5zZW50KCksWzJdfX0pfSl9O0QucHJvdG90eXBlLnNjcm9sbEhvcml6b250YWxseT1mdW5jdGlvbihCKXtyZXR1cm4gYyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgRyxLO3JldHVybiBqbSh0aGlzLGZ1bmN0aW9uKEwpe3N3aXRjaChMLmxhYmVsKXtjYXNlIDA6aWYoMT49dGhpcy5yYW5rKXJldHVyblsyXTtpZihudWxsPT09dGhpcy5zbGljaW5nU3BlYy5ob3Jpem9udGFsUmFuZ2UpdGhyb3cgRXJyb3IoIk1pc3NpbmcgaG9yaXpvbnRhbCByYW5nZSBmb3IgIit0aGlzLnJhbmsrIkQgdGVuc29yLiIpO0c9dGhpcy50ZW5zb3JWaWV3LnNwZWMuc2hhcGVbdGhpcy5zbGljaW5nU3BlYy52aWV3aW5nRGltc1sxXV07aWYoMD5CfHxCPj1HKXRocm93IEVycm9yKCJJbmRleCBvdXQgb2YgYm91bmQ6ICIrQisiIGlzIG91dHNpZGUgWzAsICIrRysiXSkiKTt0aGlzLnNsaWNpbmdTcGVjLmhvcml6b250YWxSYW5nZVswXT0KQjt0aGlzLnNsaWNpbmdTcGVjLmhvcml6b250YWxSYW5nZVsxXT1CK3RoaXMudG9wUnVsZXJUaWNrcy5sZW5ndGg7Sz10aGlzLnRlbnNvclZpZXcuc3BlYy5zaGFwZVt0aGlzLnNsaWNpbmdTcGVjLnZpZXdpbmdEaW1zWzFdXTt0aGlzLnNsaWNpbmdTcGVjLmhvcml6b250YWxSYW5nZVsxXT5LJiYodGhpcy5zbGljaW5nU3BlYy5ob3Jpem9udGFsUmFuZ2VbMV09Syk7cmV0dXJuWzQsdGhpcy5yZW5kZXJSdWxlcnNBbmRWYWx1ZURpdnMoKV07Y2FzZSAxOnJldHVybiBMLnNlbnQoKSxbMl19fSl9KX07RC5wcm90b3R5cGUuc2Nyb2xsVmVydGljYWxseT1mdW5jdGlvbihCKXtyZXR1cm4gYyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgRyxLO3JldHVybiBqbSh0aGlzLGZ1bmN0aW9uKEwpe3N3aXRjaChMLmxhYmVsKXtjYXNlIDA6aWYoMD09PXRoaXMucmFuaylyZXR1cm5bMl07aWYobnVsbD09PXRoaXMuc2xpY2luZ1NwZWMudmVydGljYWxSYW5nZSl0aHJvdyBFcnJvcigiTWlzc2luZyB2ZXJ0aWNhbCByYW5nZSBmb3IgIisKdGhpcy5yYW5rKyJEIHRlbnNvci4iKTtpZihudWxsPT09dGhpcy52YWx1ZVJvd3MpdGhyb3cgRXJyb3IoIlZlcnRpY2FsIHNjcm9sbGluZyBmYWlsZWQgZHVlIHRvIG1pc3NpbmcgdmFsdWUgcm93cy4iKTtHPXRoaXMudGVuc29yVmlldy5zcGVjLnNoYXBlW3RoaXMuc2xpY2luZ1NwZWMudmlld2luZ0RpbXNbMF1dO2lmKDA+Qnx8Qj49Ryl0aHJvdyBFcnJvcigiSW5kZXggb3V0IG9mIGJvdW5kOiAiK0IrIiBpcyBvdXRzaWRlIFswLCAiK0crIl0pIik7dGhpcy5zbGljaW5nU3BlYy52ZXJ0aWNhbFJhbmdlWzBdPUI7dGhpcy5zbGljaW5nU3BlYy52ZXJ0aWNhbFJhbmdlWzFdPUIrdGhpcy52YWx1ZVJvd3MubGVuZ3RoO0s9dGhpcy50ZW5zb3JWaWV3LnNwZWMuc2hhcGVbdGhpcy5zbGljaW5nU3BlYy52aWV3aW5nRGltc1swXV07dGhpcy5zbGljaW5nU3BlYy52ZXJ0aWNhbFJhbmdlWzFdPksmJih0aGlzLnNsaWNpbmdTcGVjLnZlcnRpY2FsUmFuZ2VbMV09Syk7cmV0dXJuWzQsdGhpcy5yZW5kZXJSdWxlcnNBbmRWYWx1ZURpdnMoKV07CmNhc2UgMTpyZXR1cm4gTC5zZW50KCksWzJdfX0pfSl9O0QucHJvdG90eXBlLnNjcm9sbFVwT3JEb3duPWZ1bmN0aW9uKEIpe3JldHVybiBjKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBHLEssTDtyZXR1cm4gam0odGhpcyxmdW5jdGlvbihKKXtzd2l0Y2goSi5sYWJlbCl7Y2FzZSAwOmlmKDA9PT10aGlzLnJhbmt8fCF0aGlzLnJvd3NDdXRvZmYpcmV0dXJuWzJdO2lmKG51bGw9PT10aGlzLnNsaWNpbmdTcGVjLnZlcnRpY2FsUmFuZ2UpdGhyb3cgRXJyb3IoIk1pc3NpbmcgdmVydGljYWwgcmFuZ2UgZm9yICIrdGhpcy5yYW5rKyJEIHRlbnNvci4iKTtpZihudWxsPT09dGhpcy52YWx1ZVJvd3MpdGhyb3cgRXJyb3IoIlZlcnRpY2FsIHNjcm9sbGluZyBmYWlsZWQgZHVlIHRvIG1pc3NpbmcgdmFsdWUgcm93cy4iKTtHPXRoaXMuc2xpY2luZ1NwZWMudmVydGljYWxSYW5nZVswXTtpZihCIT09eS5ET1dOKXJldHVyblszLDNdO0s9dGhpcy52YWx1ZVJvd3MubGVuZ3RoLQoxO0w9dGhpcy50ZW5zb3JWaWV3LnNwZWMuc2hhcGVbdGhpcy5zbGljaW5nU3BlYy52aWV3aW5nRGltc1swXV0tSztyZXR1cm4gRzxMP1s0LHRoaXMuc2Nyb2xsVmVydGljYWxseShHKzEpXTpbMywyXTtjYXNlIDE6Si5zZW50KCksSi5sYWJlbD0yO2Nhc2UgMjpyZXR1cm5bMyw1XTtjYXNlIDM6cmV0dXJuIDA8PUctMT9bNCx0aGlzLnNjcm9sbFZlcnRpY2FsbHkoRy0xKV06WzMsNV07Y2FzZSA0Okouc2VudCgpLEoubGFiZWw9NTtjYXNlIDU6cmV0dXJuWzJdfX0pfSl9O0QucHJvdG90eXBlLnNjcm9sbExlZnRPclJpZ2h0PWZ1bmN0aW9uKEIpe3JldHVybiBjKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBHLEssTDtyZXR1cm4gam0odGhpcyxmdW5jdGlvbihKKXtzd2l0Y2goSi5sYWJlbCl7Y2FzZSAwOmlmKDE+PXRoaXMucmFua3x8IXRoaXMuY29sc0N1dG9mZilyZXR1cm5bMl07aWYobnVsbD09PXRoaXMuc2xpY2luZ1NwZWMuaG9yaXpvbnRhbFJhbmdlKXRocm93IEVycm9yKCJIb3Jpem9udGFsIHNjcm9sbGluZyBmYWlsZWQgZHVlIHRvIG1pc3NpbmcgaG9yaXpvbnRhbCByYW5nZS4iKTsKRz10aGlzLnNsaWNpbmdTcGVjLmhvcml6b250YWxSYW5nZVswXTtpZihCIT09eS5SSUdIVClyZXR1cm5bMywzXTtLPXRoaXMudG9wUnVsZXJUaWNrcy5sZW5ndGgtMTtMPXRoaXMudGVuc29yVmlldy5zcGVjLnNoYXBlW3RoaXMuc2xpY2luZ1NwZWMudmlld2luZ0RpbXNbMV1dLUs7cmV0dXJuIEc8TD9bNCx0aGlzLnNjcm9sbEhvcml6b250YWxseShHKzEpXTpbMywyXTtjYXNlIDE6Si5zZW50KCksSi5sYWJlbD0yO2Nhc2UgMjpyZXR1cm5bMyw1XTtjYXNlIDM6cmV0dXJuIDA8PUctMT9bNCx0aGlzLnNjcm9sbEhvcml6b250YWxseShHLTEpXTpbMyw1XTtjYXNlIDQ6Si5zZW50KCksSi5sYWJlbD01O2Nhc2UgNTpyZXR1cm5bMl19fSl9KX07RC5wcm90b3R5cGUubmF2aWdhdGVUb0luZGljZXM9ZnVuY3Rpb24oKXtyZXR1cm4gYyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gam0odGhpcyxmdW5jdGlvbigpe3Rocm93IEVycm9yKCJuYXZpZ2F0ZVRvSW5kaWNlcygpIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQuIik7Cn0pfSl9O0QucHJvdG90eXBlLmdldFZhbHVlQ2xhc3M9ZnVuY3Rpb24oKXt2YXIgQj10aGlzLnRlbnNvclZpZXcuc3BlYy5kdHlwZTtyZXR1cm4gZChCKXx8ZihCKT8ibnVtZXJpYyI6ZyhCKT8iYm9vbGVhbiI6InN0cmluZyJ9O3JldHVybiBEfSgpO2EudGVuc29yV2lkZ2V0PWZ1bmN0aW9uKEQsQixHKXtyZXR1cm4gbmV3IEYoRCxCLEcpfTthLlZFUlNJT049IjAuMC4wIjtyZXR1cm4gYX0oe30pOwo8L3NjcmlwdD4KPHN0eWxlPi8qIENvcHlyaWdodCAyMDE5IFRoZSBUZW5zb3JGbG93IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgpZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuClNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCgoudGVuc29yLXdpZGdldCB7CiAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKICBmb250LXNpemU6IDE0cHg7CiAgb3ZlcmZsb3cteDogaGlkZGVuOwogIG92ZXJmbG93LXk6IGhpZGRlbjsKICBwb3NpdGlvbjogcmVsYXRpdmU7Cn0KCi50ZW5zb3Itd2lkZ2V0LWRpbSB7CiAgYm9yZGVyOiAxcHggc29saWQgcmdiKDE2MCwgMTYwLCAxNjApOwogIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICBmb250LXNpemU6IDEycHg7CiAgaGVpZ2h0OiAxNHB4OwogIGxpbmUtaGVpZ2h0OiAxNHB4OwogIG1hcmdpbi1sZWZ0OiAxNXB4OwogIG1hcmdpbi1yaWdodDogMTVweDsKICBwYWRkaW5nOiAycHg7Cn0KCi50ZW5zb3Itd2lkZ2V0LWRpbS1jb21tYSB7CiAgY29sb3I6IHJnYigxMjgsIDEyOCwgMTI4KTsKICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgZm9udC1zaXplOiAxMnB4OwogIGhlaWdodDogMTRweDsKICBsaW5lLWhlaWdodDogMTRweDsKfQoKLnRlbnNvci13aWRnZXQtZGltLWhpZ2hsaWdodGVkIHsKICBib3JkZXI6IDFweCBzb2xpZCByZ2IoMTAwLCAxODAsIDI1NSk7CiAgZm9udC13ZWlnaHQ6IGJvbGQ7Cn0KCi50ZW5zb3Itd2lkZ2V0LWRpbS1icmFja2V0cyB7CiAgY29sb3I6IHJnYigxMjgsIDEyOCwgMTI4KTsKICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgZm9udC1zaXplOiA4cHQ7Cn0KCi50ZW5zb3Itd2lkZ2V0LWRpbS1kcm9wZG93biB7CiAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDI1NSwgMjU1LCAyNTUpOwogIGJvcmRlcjogMXB4IHNvbGlkIHJnYigxMjgsIDEyOCwgMTI4KTsKICBib3gtc2hhZG93OiAycHggMnB4IDJweCAjYjBiMGIwOwogIGN1cnNvcjogcG9pbnRlcjsKICB3aWR0aDogMTgwcHg7CiAgei1pbmRleDogMTAwMDsKfQoKLnRlbnNvci13aWRnZXQtZGltLWRyb3Bkb3duLW1lbnUtaXRlbSB7CiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHJnYigxODAsIDE4MCwgMTgwKTsKICBmb250LXNpemU6IDEycHg7CiAgcGFkZGluZzogM3B4Owp9CgoudGVuc29yLXdpZGdldC1kaW0tZHJvcGRvd24tbWVudS1pdGVtLWFjdGl2ZSB7CiAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDEwMCwgMTgwLCAyNTUpOwogIGNvbG9yOiByZ2IoMjU1LCAyNTUsIDI1NSk7Cn0KCi50ZW5zb3Itd2lkZ2V0LWR0eXBlIHsKICBhbGlnbi1jb250ZW50OiBjZW50ZXI7CiAgY29sb3I6IHJnYig2MCwgNjAsIDYwKTsKICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgZm9udC1zaXplOiA4cHQ7CiAgaGVpZ2h0OiA0OHB4OwogIGxpbmUtaGVpZ2h0OiAyMnB4OwogIG1heC1oZWlnaHQ6IDIycHg7CiAgcGFkZGluZy1sZWZ0OiAxNHB4OwogIHBhZGRpbmctcmlnaHQ6IDEwcHg7CiAgcG9zaXRpb246IHJlbGF0aXZlOwogIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7Cn0KCi50ZW5zb3Itd2lkZ2V0LWR0eXBlLWxhYmVsIHsKICBjb2xvcjogcmdiKDEyOCwgMTI4LCAxMjgpOwp9CgoudGVuc29yLXdpZGdldC1oZWFkZXIgewogIGJhY2tncm91bmQtY29sb3I6IHJnYigyNTIsIDI1MiwgMjUyKTsKICBib3gtc2hhZG93OiAycHggMnB4IDJweCAjYjBiMGIwOwogIGhlaWdodDogNDBweDsKICBsaW5lLWhlaWdodDogNDBweDsKICBtYXgtaGVpZ2h0OiA0MHB4OwogIHBvc2l0aW9uOiByZWxhdGl2ZTsKICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwogIHdpZHRoOiAxMDAlOwp9CgoudGVuc29yLXdpZGdldC1pbmZvIHsKICBhbGlnbi1jb250ZW50OiBjZW50ZXI7CiAgY29sb3I6IHJnYigwLCAwLCAyNTUpOwogIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICBmb250LXNpemU6IDhwdDsKICBoZWlnaHQ6IDIycHg7CiAgbGluZS1oZWlnaHQ6IDIycHg7CiAgbWFyZ2luLWxlZnQ6IDhweDsKICBtYXgtaGVpZ2h0OiAyMnB4OwogIHBvc2l0aW9uOiByZWxhdGl2ZTsKICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwp9CgoudGVuc29yLXdpZGdldC1zaGFwZSB7CiAgY29sb3I6IHJnYig2MCwgNjAsIDYwKTsKICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgbWFyZ2luLWxlZnQ6IDEycHg7Cn0KCi50ZW5zb3Itd2lkZ2V0LXNoYXBlLWxhYmVsIHsKICBjb2xvcjogcmdiKDEyOCwgMTI4LCAxMjgpOwogIGRpc3BsYXk6IGlubGluZS1ibG9jazsKfQoKLnRlbnNvci13aWRnZXQtc2hhcGUtdmFsdWUgewogIGRpc3BsYXk6IGlubGluZS1ibG9jazsKfQoKLnRlbnNvci13aWRnZXQtc2xpY2luZy1ncm91cCB7CiAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDI1MCwgMjUwLCAyNTApOwogIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCByZ2IoMTkwLCAxOTAsIDE5MCk7CiAgZGlzcGxheTogYmxvY2s7CiAgaGVpZ2h0OiAxOHB4OwogIHRleHQtYWxpZ246IGNlbnRlcjsKICBwYWRkaW5nLWJvdHRvbTogNXB4OwogIHBhZGRpbmctdG9wOiA1cHg7Cn0KCi50ZW5zb3Itd2lkZ2V0LXRlbnNvci1uYW1lIHsKICBjb2xvcjogYmxhY2s7CiAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogIGZvbnQtd2VpZ2h0OiBib2xkOwp9CgoudGVuc29yLXdpZGdldC1sZWZ0LXJ1bGVyLXRpY2sgewogIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXJ1bGVyLWJhY2tncm91bmQtY29sb3IpOwogIGJvcmRlci1ib3R0b206IHZhcigtLWJvcmRlci1zdHlsZSk7CiAgYm9yZGVyLXRvcDogdmFyKC0tYm9yZGVyLXN0eWxlKTsKICBib3gtc2hhZG93OiB2YXIoLS1ib3JkZXItc3R5bGUpOwogIGNvbG9yOiByZ2IoMTEwLCAxMTAsIDExMCk7CiAgY3Vyc29yOiBwb2ludGVyOwogIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICBmb250LXNpemU6IDEycHg7CiAgaGVpZ2h0OiAyOXB4OwogIGxpbmUtaGVpZ2h0OiAyOXB4OwogIG1hcmdpbi1sZWZ0OiAwcHg7CiAgbWF4LXdpZHRoOiA0NXB4OwogIHRleHQtYWxpZ246IGNlbnRlcjsKICB1c2VyLXNlbGVjdDogbm9uZTsKICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwogIHdpZHRoOiA0NXB4Owp9CgoudGVuc29yLXdpZGdldC10b3AtcnVsZXIgewogIGhlaWdodDogMjRweDsKICB3aGl0ZS1zcGFjZTogbm93cmFwOwp9CgoudGVuc29yLXdpZGdldC12YWx1ZS10b29sdGlwIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMjQwLCAyNDAsIDI0MCk7CiAgYm9yZGVyOiAxcHggc29saWQgcmdiKDE2MCwgMTYwLCAxNjApOwogIGJveC1zaGFkb3c6IDFweCAxcHggMXB4ICNiMGIwYjA7CiAgZGlzcGxheTogbm9uZTsKICBmb250LXNpemU6IDEzcHg7CiAgcGFkZGluZzogNXB4OwogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKfQoKLnRlbnNvci13aWRnZXQtdmFsdWUtdG9vbHRpcC1pbmRpY2VzIHsKICBmb250LXdlaWdodDogYm9sZDsKfQoKLnRlbnNvci13aWRnZXQtdmFsdWUtdG9vbHRpcC12YWx1ZSB7CiAgbWFyZ2luLXRvcDogMjBweDsKfQoKLnRlbnNvci13aWRnZXQtdG9wLXJ1bGVyLXRpY2sgewogIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXJ1bGVyLWJhY2tncm91bmQtY29sb3IpOwogIGJvcmRlci1ib3R0b206IHZhcigtLWJvcmRlci1zdHlsZSk7CiAgYm9yZGVyLXJpZ2h0OiB2YXIoLS1ib3JkZXItc3R5bGUpOwogIGNvbG9yOiByZ2IoMTEwLCAxMTAsIDExMCk7CiAgY3Vyc29yOiBwb2ludGVyOwogIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICBmb250LXNpemU6IDEycHg7CiAgaGVpZ2h0OiAyNHB4OwogIGxpbmUtaGVpZ2h0OiAyNHB4OwogIHBhZGRpbmctcmlnaHQ6IDJweDsKICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKICB3aWR0aDogNDVweDsKfQoKLnRlbnNvci13aWRnZXQtdmFsdWUtZGl2IHsKICBib3JkZXItYm90dG9tOiB2YXIoLS1ib3JkZXItc3R5bGUpOwogIGJvcmRlci1yaWdodDogdmFyKC0tYm9yZGVyLXN0eWxlKTsKICBjdXJzb3I6IHBvaW50ZXI7CiAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogIGZvbnQtc2l6ZTogODAlOwogIGhlaWdodDogMjRweDsKICBsaW5lLWhlaWdodDogMjRweDsKICBtYXgtd2lkdGg6IDQ1cHg7CiAgcGFkZGluZy1yaWdodDogMnB4OwogIHRleHQtYWxpZ246IHJpZ2h0OwogIHVzZXItc2VsZWN0OiBub25lOwogIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CiAgd2lkdGg6IDQ1cHg7Cn0KCi50ZW5zb3Itd2lkZ2V0LXZhbHVlLWRpdi1zZWxlY3Rpb24gewogIGZvbnQtd2VpZ2h0OiBib2xkOwp9CgoudGVuc29yLXdpZGdldC12YWx1ZS1kaXYtc2VsZWN0aW9uLWJvdHRvbSB7CiAgYm9yZGVyLWJvdHRvbTogMC41cHggc29saWQgYmx1ZTsKfQoKLnRlbnNvci13aWRnZXQtdmFsdWUtZGl2LXNlbGVjdGlvbi1sZWZ0IHsKICBib3JkZXItbGVmdDogMC41cHggc29saWQgYmx1ZTsKfQoKLnRlbnNvci13aWRnZXQtdmFsdWUtZGl2LXNlbGVjdGlvbi1yaWdodCB7CiAgYm9yZGVyLXJpZ2h0OiAwLjVweCBzb2xpZCBibHVlOwp9CgoudGVuc29yLXdpZGdldC12YWx1ZS1kaXYtc2VsZWN0aW9uLXRvcCB7CiAgYm9yZGVyLXRvcDogMC41cHggc29saWQgYmx1ZTsKfQoKLnRlbnNvci13aWRnZXQtdmFsdWUtc2VjdGlvbiB7CiAgLS1ib3JkZXItc3R5bGU6IDFweCBzb2xpZCByZ2IoMTQwLCAxNDAsIDE0MCk7CiAgLS1ydWxlci1iYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMjEwLCAyMTAsIDIxMCk7CiAgLW1vei11c2VyLXNlbGVjdDogbm9uZTsKICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7CiAgLWtodG1sLXVzZXItc2VsZWN0OiBub25lOwogIC13ZWJraXQtdG91Y2gtY2FsbG91dDogbm9uZTsKICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOwp9CgoudGVuc29yLXdpZGdldC12YWx1ZS1yb3cgewogIGhlaWdodDogMjVweDsKICBsaW5lLWhlaWdodDogMjVweDsKICB3aGl0ZS1zcGFjZTogbm93cmFwOwp9Cjwvc3R5bGU+Cgo8ZG9tLW1vZHVsZSBpZD0idGVuc29yLXdpZGdldC1zdHlsZSI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPi8qIENvcHlyaWdodCAyMDE5IFRoZSBUZW5zb3JGbG93IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgpZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuClNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCgoudGVuc29yLXdpZGdldCB7CiAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKICBmb250LXNpemU6IDE0cHg7CiAgb3ZlcmZsb3cteDogaGlkZGVuOwogIG92ZXJmbG93LXk6IGhpZGRlbjsKICBwb3NpdGlvbjogcmVsYXRpdmU7Cn0KCi50ZW5zb3Itd2lkZ2V0LWRpbSB7CiAgYm9yZGVyOiAxcHggc29saWQgcmdiKDE2MCwgMTYwLCAxNjApOwogIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICBmb250LXNpemU6IDEycHg7CiAgaGVpZ2h0OiAxNHB4OwogIGxpbmUtaGVpZ2h0OiAxNHB4OwogIG1hcmdpbi1sZWZ0OiAxNXB4OwogIG1hcmdpbi1yaWdodDogMTVweDsKICBwYWRkaW5nOiAycHg7Cn0KCi50ZW5zb3Itd2lkZ2V0LWRpbS1jb21tYSB7CiAgY29sb3I6IHJnYigxMjgsIDEyOCwgMTI4KTsKICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgZm9udC1zaXplOiAxMnB4OwogIGhlaWdodDogMTRweDsKICBsaW5lLWhlaWdodDogMTRweDsKfQoKLnRlbnNvci13aWRnZXQtZGltLWhpZ2hsaWdodGVkIHsKICBib3JkZXI6IDFweCBzb2xpZCByZ2IoMTAwLCAxODAsIDI1NSk7CiAgZm9udC13ZWlnaHQ6IGJvbGQ7Cn0KCi50ZW5zb3Itd2lkZ2V0LWRpbS1icmFja2V0cyB7CiAgY29sb3I6IHJnYigxMjgsIDEyOCwgMTI4KTsKICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgZm9udC1zaXplOiA4cHQ7Cn0KCi50ZW5zb3Itd2lkZ2V0LWRpbS1kcm9wZG93biB7CiAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDI1NSwgMjU1LCAyNTUpOwogIGJvcmRlcjogMXB4IHNvbGlkIHJnYigxMjgsIDEyOCwgMTI4KTsKICBib3gtc2hhZG93OiAycHggMnB4IDJweCAjYjBiMGIwOwogIGN1cnNvcjogcG9pbnRlcjsKICB3aWR0aDogMTgwcHg7CiAgei1pbmRleDogMTAwMDsKfQoKLnRlbnNvci13aWRnZXQtZGltLWRyb3Bkb3duLW1lbnUtaXRlbSB7CiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHJnYigxODAsIDE4MCwgMTgwKTsKICBmb250LXNpemU6IDEycHg7CiAgcGFkZGluZzogM3B4Owp9CgoudGVuc29yLXdpZGdldC1kaW0tZHJvcGRvd24tbWVudS1pdGVtLWFjdGl2ZSB7CiAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDEwMCwgMTgwLCAyNTUpOwogIGNvbG9yOiByZ2IoMjU1LCAyNTUsIDI1NSk7Cn0KCi50ZW5zb3Itd2lkZ2V0LWR0eXBlIHsKICBhbGlnbi1jb250ZW50OiBjZW50ZXI7CiAgY29sb3I6IHJnYig2MCwgNjAsIDYwKTsKICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgZm9udC1zaXplOiA4cHQ7CiAgaGVpZ2h0OiA0OHB4OwogIGxpbmUtaGVpZ2h0OiAyMnB4OwogIG1heC1oZWlnaHQ6IDIycHg7CiAgcGFkZGluZy1sZWZ0OiAxNHB4OwogIHBhZGRpbmctcmlnaHQ6IDEwcHg7CiAgcG9zaXRpb246IHJlbGF0aXZlOwogIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7Cn0KCi50ZW5zb3Itd2lkZ2V0LWR0eXBlLWxhYmVsIHsKICBjb2xvcjogcmdiKDEyOCwgMTI4LCAxMjgpOwp9CgoudGVuc29yLXdpZGdldC1oZWFkZXIgewogIGJhY2tncm91bmQtY29sb3I6IHJnYigyNTIsIDI1MiwgMjUyKTsKICBib3gtc2hhZG93OiAycHggMnB4IDJweCAjYjBiMGIwOwogIGhlaWdodDogNDBweDsKICBsaW5lLWhlaWdodDogNDBweDsKICBtYXgtaGVpZ2h0OiA0MHB4OwogIHBvc2l0aW9uOiByZWxhdGl2ZTsKICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwogIHdpZHRoOiAxMDAlOwp9CgoudGVuc29yLXdpZGdldC1pbmZvIHsKICBhbGlnbi1jb250ZW50OiBjZW50ZXI7CiAgY29sb3I6IHJnYigwLCAwLCAyNTUpOwogIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICBmb250LXNpemU6IDhwdDsKICBoZWlnaHQ6IDIycHg7CiAgbGluZS1oZWlnaHQ6IDIycHg7CiAgbWFyZ2luLWxlZnQ6IDhweDsKICBtYXgtaGVpZ2h0OiAyMnB4OwogIHBvc2l0aW9uOiByZWxhdGl2ZTsKICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwp9CgoudGVuc29yLXdpZGdldC1zaGFwZSB7CiAgY29sb3I6IHJnYig2MCwgNjAsIDYwKTsKICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgbWFyZ2luLWxlZnQ6IDEycHg7Cn0KCi50ZW5zb3Itd2lkZ2V0LXNoYXBlLWxhYmVsIHsKICBjb2xvcjogcmdiKDEyOCwgMTI4LCAxMjgpOwogIGRpc3BsYXk6IGlubGluZS1ibG9jazsKfQoKLnRlbnNvci13aWRnZXQtc2hhcGUtdmFsdWUgewogIGRpc3BsYXk6IGlubGluZS1ibG9jazsKfQoKLnRlbnNvci13aWRnZXQtc2xpY2luZy1ncm91cCB7CiAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDI1MCwgMjUwLCAyNTApOwogIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCByZ2IoMTkwLCAxOTAsIDE5MCk7CiAgZGlzcGxheTogYmxvY2s7CiAgaGVpZ2h0OiAxOHB4OwogIHRleHQtYWxpZ246IGNlbnRlcjsKICBwYWRkaW5nLWJvdHRvbTogNXB4OwogIHBhZGRpbmctdG9wOiA1cHg7Cn0KCi50ZW5zb3Itd2lkZ2V0LXRlbnNvci1uYW1lIHsKICBjb2xvcjogYmxhY2s7CiAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogIGZvbnQtd2VpZ2h0OiBib2xkOwp9CgoudGVuc29yLXdpZGdldC1sZWZ0LXJ1bGVyLXRpY2sgewogIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXJ1bGVyLWJhY2tncm91bmQtY29sb3IpOwogIGJvcmRlci1ib3R0b206IHZhcigtLWJvcmRlci1zdHlsZSk7CiAgYm9yZGVyLXRvcDogdmFyKC0tYm9yZGVyLXN0eWxlKTsKICBib3gtc2hhZG93OiB2YXIoLS1ib3JkZXItc3R5bGUpOwogIGNvbG9yOiByZ2IoMTEwLCAxMTAsIDExMCk7CiAgY3Vyc29yOiBwb2ludGVyOwogIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICBmb250LXNpemU6IDEycHg7CiAgaGVpZ2h0OiAyOXB4OwogIGxpbmUtaGVpZ2h0OiAyOXB4OwogIG1hcmdpbi1sZWZ0OiAwcHg7CiAgbWF4LXdpZHRoOiA0NXB4OwogIHRleHQtYWxpZ246IGNlbnRlcjsKICB1c2VyLXNlbGVjdDogbm9uZTsKICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwogIHdpZHRoOiA0NXB4Owp9CgoudGVuc29yLXdpZGdldC10b3AtcnVsZXIgewogIGhlaWdodDogMjRweDsKICB3aGl0ZS1zcGFjZTogbm93cmFwOwp9CgoudGVuc29yLXdpZGdldC12YWx1ZS10b29sdGlwIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMjQwLCAyNDAsIDI0MCk7CiAgYm9yZGVyOiAxcHggc29saWQgcmdiKDE2MCwgMTYwLCAxNjApOwogIGJveC1zaGFkb3c6IDFweCAxcHggMXB4ICNiMGIwYjA7CiAgZGlzcGxheTogbm9uZTsKICBmb250LXNpemU6IDEzcHg7CiAgcGFkZGluZzogNXB4OwogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKfQoKLnRlbnNvci13aWRnZXQtdmFsdWUtdG9vbHRpcC1pbmRpY2VzIHsKICBmb250LXdlaWdodDogYm9sZDsKfQoKLnRlbnNvci13aWRnZXQtdmFsdWUtdG9vbHRpcC12YWx1ZSB7CiAgbWFyZ2luLXRvcDogMjBweDsKfQoKLnRlbnNvci13aWRnZXQtdG9wLXJ1bGVyLXRpY2sgewogIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXJ1bGVyLWJhY2tncm91bmQtY29sb3IpOwogIGJvcmRlci1ib3R0b206IHZhcigtLWJvcmRlci1zdHlsZSk7CiAgYm9yZGVyLXJpZ2h0OiB2YXIoLS1ib3JkZXItc3R5bGUpOwogIGNvbG9yOiByZ2IoMTEwLCAxMTAsIDExMCk7CiAgY3Vyc29yOiBwb2ludGVyOwogIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICBmb250LXNpemU6IDEycHg7CiAgaGVpZ2h0OiAyNHB4OwogIGxpbmUtaGVpZ2h0OiAyNHB4OwogIHBhZGRpbmctcmlnaHQ6IDJweDsKICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKICB3aWR0aDogNDVweDsKfQoKLnRlbnNvci13aWRnZXQtdmFsdWUtZGl2IHsKICBib3JkZXItYm90dG9tOiB2YXIoLS1ib3JkZXItc3R5bGUpOwogIGJvcmRlci1yaWdodDogdmFyKC0tYm9yZGVyLXN0eWxlKTsKICBjdXJzb3I6IHBvaW50ZXI7CiAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogIGZvbnQtc2l6ZTogODAlOwogIGhlaWdodDogMjRweDsKICBsaW5lLWhlaWdodDogMjRweDsKICBtYXgtd2lkdGg6IDQ1cHg7CiAgcGFkZGluZy1yaWdodDogMnB4OwogIHRleHQtYWxpZ246IHJpZ2h0OwogIHVzZXItc2VsZWN0OiBub25lOwogIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CiAgd2lkdGg6IDQ1cHg7Cn0KCi50ZW5zb3Itd2lkZ2V0LXZhbHVlLWRpdi1zZWxlY3Rpb24gewogIGZvbnQtd2VpZ2h0OiBib2xkOwp9CgoudGVuc29yLXdpZGdldC12YWx1ZS1kaXYtc2VsZWN0aW9uLWJvdHRvbSB7CiAgYm9yZGVyLWJvdHRvbTogMC41cHggc29saWQgYmx1ZTsKfQoKLnRlbnNvci13aWRnZXQtdmFsdWUtZGl2LXNlbGVjdGlvbi1sZWZ0IHsKICBib3JkZXItbGVmdDogMC41cHggc29saWQgYmx1ZTsKfQoKLnRlbnNvci13aWRnZXQtdmFsdWUtZGl2LXNlbGVjdGlvbi1yaWdodCB7CiAgYm9yZGVyLXJpZ2h0OiAwLjVweCBzb2xpZCBibHVlOwp9CgoudGVuc29yLXdpZGdldC12YWx1ZS1kaXYtc2VsZWN0aW9uLXRvcCB7CiAgYm9yZGVyLXRvcDogMC41cHggc29saWQgYmx1ZTsKfQoKLnRlbnNvci13aWRnZXQtdmFsdWUtc2VjdGlvbiB7CiAgLS1ib3JkZXItc3R5bGU6IDFweCBzb2xpZCByZ2IoMTQwLCAxNDAsIDE0MCk7CiAgLS1ydWxlci1iYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMjEwLCAyMTAsIDIxMCk7CiAgLW1vei11c2VyLXNlbGVjdDogbm9uZTsKICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7CiAgLWtodG1sLXVzZXItc2VsZWN0OiBub25lOwogIC13ZWJraXQtdG91Y2gtY2FsbG91dDogbm9uZTsKICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOwp9CgoudGVuc29yLXdpZGdldC12YWx1ZS1yb3cgewogIGhlaWdodDogMjVweDsKICBsaW5lLWhlaWdodDogMjVweDsKICB3aGl0ZS1zcGFjZTogbm93cmFwOwp9Cjwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPgoKCgoKCgoKCjxkb20tbW9kdWxlIGlkPSJ0Zi1kZWJ1Z2dlci1saW5lLWNoYXJ0Ij4KICA8dGVtcGxhdGU+CiAgICA8dnotbGluZS1jaGFydDIgeC1jb21wb25lbnRzLWNyZWF0aW9uLW1ldGhvZD0iW1tfbGluZUNoYXJ0WENvbXBvbmVudHNDcmVhdGlvbk1ldGhvZF1dIiB5LXZhbHVlLWFjY2Vzc29yPSJbW19saW5lQ2hhcnRZVmFsdWVBY2Nlc3Nvcl1dIiB0b29sdGlwLWNvbHVtbnM9IltbX2xpbmVDaGFydFRvb2x0aXBDb2x1bW5zXV0iIHNtb290aGluZy1lbmFibGVkPSJbW19saW5lQ2hhcnRTbW9vdGhpbmdFbmFibGVkXV0iPjwvdnotbGluZS1jaGFydDI+CiAgICA8c3R5bGU+CiAgICAgIHZ6LWxpbmUtY2hhcnQyIHsKICAgICAgICBoZWlnaHQ6IDMwMHB4OwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgoKICA8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdGYtZGVidWdnZXItZGFzaGJvYXJkL3RmLWRlYnVnZ2VyLWxpbmUtY2hhcnQuaHRtbC5qcwpQb2x5bWVyKHtpczoidGYtZGVidWdnZXItbGluZS1jaGFydCIscHJvcGVydGllczp7ZGF0YTp7dHlwZTpPYmplY3QsdmFsdWU6bnVsbH0sX2RlZmF1bHRTZXJpZXNOYW1lOnt0eXBlOlN0cmluZyx2YWx1ZToiX19kZWJ1Z2dlcl9kYXRhX18iLHJlYWRvbmx5OiEwfSxfbGluZUNoYXJ0WENvbXBvbmVudHNDcmVhdGlvbk1ldGhvZDp7dHlwZTpPYmplY3QscmVhZE9ubHk6ITAsdmFsdWU6KCk9PigpPT57Y29uc3QgYT1uZXcgUGxvdHRhYmxlLlNjYWxlcy5MaW5lYXI7cmV0dXJue3NjYWxlOmEsYXhpczpuZXcgUGxvdHRhYmxlLkF4ZXMuTnVtZXJpYyhhLCJib3R0b20iKSxhY2Nlc3NvcjpjPT5jLnN0ZXB9fX0sX2xpbmVDaGFydFlWYWx1ZUFjY2Vzc29yOnt0eXBlOk9iamVjdCxyZWFkT25seTohMCx2YWx1ZTooKT0+YT0+YS5zY2FsYXJ9LF9saW5lQ2hhcnRUb29sdGlwQ29sdW1uczp7dHlwZTpBcnJheSxyZWFkT25seTohMCx2YWx1ZTooKT0+W3t0aXRsZToiTmFtZSIsZXZhbHVhdGU6YT0+CiJzdGVwXHgzZCIrYS5kYXR1bS5zdGVwKyI7IHNjYWxhclx4M2QgIithLmRhdHVtLnNjYWxhcn1dfSxfbGluZUNoYXJ0U21vb3RoaW5nRW5hYmxlZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExLHJlYWRPbmx5OiEwfX0sb2JzZXJ2ZXJzOlsicmVuZGVyKGRhdGEpIl0scmVuZGVyKGEpe2lmKG51bGwhPWEpe3ZhciBjPXRoaXMuJCQoInZ6LWxpbmUtY2hhcnQyIik7Yy5zZXRWaXNpYmxlU2VyaWVzKFt0aGlzLl9kZWZhdWx0U2VyaWVzTmFtZV0pO3ZhciBkPVtdLGY9YS54O2E9YS55O2ZvcihsZXQgZz0wO2c8Zi5sZW5ndGg7KytnKWQucHVzaCh7c3RlcDpmW2ddLHNjYWxhcjphW2ddfSk7Yy5zZXRTZXJpZXNEYXRhKHRoaXMuX2RlZmF1bHRTZXJpZXNOYW1lLGQpfX19KTsKPC9zY3JpcHQ+CjwvZG9tLW1vZHVsZT4KCgoKPGRvbS1tb2R1bGUgaWQ9InRmLXRlbnNvci12YWx1ZS12aWV3Ij4KICA8dGVtcGxhdGU+CiAgICA8cGFwZXItdG9hc3QgaWQ9InRlbnNvclZhbHVlVG9hc3QiIHRleHQ9IiIgYWx3YXlzLW9uLXRvcD48L3BhcGVyLXRvYXN0PgogICAgPHRhYmxlIGNsYXNzPSJ0ZW5zb3ItdmFsdWUtdmlldy10YWJsZSI+CiAgICAgIDx0cj4KICAgICAgICA8dGQgY29sc3Bhbj0iMiI+CiAgICAgICAgICA8ZGl2PgogICAgICAgICAgICA8cGFwZXItaXRlbSBpZD0idGVuc29yLW5hbWUiIG9uLXRhcD0idGVuc29yTmFtZUNhbGxiYWNrIj4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGVuc29yLW5hbWUtdGV4dCI+W1t0ZW5zb3JOYW1lXV08L3NwYW4+CiAgICAgICAgICAgIDwvcGFwZXItaXRlbT4KICAgICAgICAgICAgPHBhcGVyLWljb24tYnV0dG9uIGljb249ImNsb3NlIiBjbGFzcz0idmFsdWUtdmlldy1pY29uLWJ1dHRvbiIgaWQ9InZhbHVlLXZpZXctaWNvbi1idXR0b24iIHRpdGxlPSJDbG9zZSIgb24tdGFwPSJjbG9zZUJ1dHRvbkNhbGxiYWNrIj48L3BhcGVyLWljb24tYnV0dG9uPgogICAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24gaWNvbj0iZm9yd2FyZCIgY2xhc3M9InZhbHVlLXZpZXctaWNvbi1idXR0b24iIGlkPSJ2YWx1ZS12aWV3LWljb24tYnV0dG9uIiB0aXRsZT0iQ29udGludWUgdG8iIG9uLXRhcD0iY29udGludWVUb0J1dHRvbkNhbGxiYWNrIj48L3BhcGVyLWljb24tYnV0dG9uPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC90ZD4KICAgICAgPC90cj4KICAgICAgPHRyIGNsYXNzPSJ0ZW5zb3ItdmFsdWUtdmFsdWUtdHIiPgogICAgICAgIDx0ZD4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfdXNlVGVuc29yV2lkZ2V0XV0iPgogICAgICAgICAgICA8ZGl2IGlkPSJ0ZW5zb3Itd2lkZ2V0Ij48L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbWyFfdXNlVGVuc29yV2lkZ2V0XV0iPgogICAgICAgICAgICA8cGFwZXItaXRlbSBpZD0iZGVidWctb3AiPjwvcGFwZXItaXRlbT4KICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICA8cGFwZXItaW5wdXQgY2xhc3M9ImlubGluZSB2YWx1ZS1jYXJkLWlucHV0IiBsYWJlbD0iU2xpY2luZyIgaWQ9InNsaWNpbmciIHZhbHVlPSJ7e3NsaWNpbmd9fSIgb24tY2hhbmdlPSJyZWZyZXNoIj4KICAgICAgICAgICAgICA8L3BhcGVyLWlucHV0PgogICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICA8cGFwZXItaW5wdXQgY2xhc3M9ImlubGluZSB2YWx1ZS1jYXJkLWlucHV0IiBsYWJlbD0iVGltZSBJbmRpY2VzIiBpZD0idGltZS1pbmRpY2VzIiB2YWx1ZT0ie3t0aW1lSW5kaWNlc319IiBvbi1jaGFuZ2U9InJlZnJlc2giPgogICAgICAgICAgICAgICAgPC9wYXBlci1pbnB1dD4KICAgICAgICAgICAgICAgIDxwYXBlci1idXR0b24gcmFpc2VkIGlkPSJ0aW1lLWluZGljZXMtdG9nZ2xlLWJ1dHRvbiIgY2xhc3M9InRlbnNvci12YWx1ZS1idXR0b25zIiBvbi1jbGljaz0iX3RpbWVJbmRpY2VzVG9nZ2xlQnV0dG9uQ2FsbGJhY2siPkZ1bGwgSGlzdG9yeTwvcGFwZXItYnV0dG9uPgogICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICA8L2Rpdj48L3RlbXBsYXRlPjwvdGQ+PHRkIGNsYXNzPSJ0ZW5zb3ItdmFsdWUtdmlldy10ZCI+CiAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2lzVmFsdWVTY2FsYXJdXSI+CiAgICAgICAgICAgICAgICAgIDxwYXBlci1pbnB1dCBjbGFzcz0iaW5saW5lIiBsYWJlbD0iU2NhbGFyIFZhbHVlIiBpZD0idmFsdWUtc2NhbGFyIiB2YWx1ZT0iW1tfZGF0YVNjYWxhcl1dIj4KICAgICAgICAgICAgICAgICAgPC9wYXBlci1pbnB1dD4KICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2lzVmFsdWVMaW5lQ2hhcnRdXSI+CiAgICAgICAgICAgICAgICAgIDx0Zi1kZWJ1Z2dlci1saW5lLWNoYXJ0IGRhdGE9IltbX2xpbmVDaGFydERhdGFdXSI+PC90Zi1kZWJ1Z2dlci1saW5lLWNoYXJ0PgogICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaXNWYWx1ZUltYWdlXV0iPgogICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPSJ2YWx1ZS1pbWFnZSIgaGVpZ2h0PSIyNTBweCIgd2lkdGg9IjI1MHB4IiBzcmMkPSJbW19kYXRhSW1hZ2VTcmNdXSI+CiAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgIAogICAgICAgICAgCiAgICAgICAgCiAgICAgIDwvdHI+CiAgICA8L3RhYmxlPgoKICAgIDxzdHlsZSBpbmNsdWRlPSJ0ZW5zb3Itd2lkZ2V0LXN0eWxlIj48L3N0eWxlPgogICAgPHN0eWxlPgogICAgICAudGVuc29yLXZhbHVlLWJ1dHRvbnMgewogICAgICAgIGhlaWdodDogNzUlOwogICAgICAgIGZvbnQtc2l6ZTogMTBweDsKICAgICAgfQogICAgICAudGVuc29yLXZhbHVlLXZpZXctdGFibGUgewogICAgICAgIHdpZHRoOiA1MDBweDsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtdGFibGU7CiAgICAgICAgYm9yZGVyLXNwYWNpbmc6IDVweDsKICAgICAgICBwYWRkaW5nLXRvcDogM3B4OwogICAgICAgIHBhZGRpbmctYm90dG9tOiAzcHg7CiAgICAgICAgcGFkZGluZy1sZWZ0OiAzcHg7CiAgICAgICAgcGFkZGluZy1yaWdodDogM3B4OwogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmOGY4Zjg7CiAgICAgICAgYm94LXNoYWRvdzogM3B4IDNweCAxcHggMXB4ICNkOGQ4ZDg7CiAgICAgIH0KICAgICAgLnRlbnNvci12YWx1ZS12aWV3LXRkIHsKICAgICAgICB3aWR0aDogMzUwcHg7CiAgICAgIH0KICAgICAgLnZhbHVlLWNhcmQtaW5wdXQgewogICAgICAgIHdpZHRoOiAxNTBweDsKICAgICAgfQogICAgICAjdGVuc29yLW5hbWUgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDUwJTsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgIH0KICAgICAgLnRlbnNvci1uYW1lLXRleHQgewogICAgICAgIGNvbG9yOiBibHVlOwogICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwogICAgICB9CiAgICAgICNkZWJ1Zy1vcCB7CiAgICAgICAgZm9udC1zaXplOiA5MCU7CiAgICAgIH0KICAgICAgLnZhbHVlLWltYWdlIHsKICAgICAgICBpbWFnZS1yZW5kZXJpbmc6IHBpeGVsYXRlZDsKICAgICAgfQogICAgICAudmFsdWUtdmlldy1pY29uLWJ1dHRvbiB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIGZsb2F0OiByaWdodDsKICAgICAgICB0ZXh0LWFsaWduOiByaWdodDsKICAgICAgICB3aWR0aDogMjAlOwogICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBmb250LXNpemU6IDkwJTsKICAgICAgICBjb2xvcjogYmx1ZTsKICAgICAgfQogICAgICAjdGVuc29yLXdpZGdldCB7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgcmdiKDE2MCwgMTYwLCAxNjApOwogICAgICAgIC8qIGJveC1zaXppbmc6IGNvbnRlbnQtYm94OwogICAgICAgIC1tb3otYm94LXNpemluZzogY29udGVudC1ib3g7CiAgICAgICAgLXdlYmtpdC1ib3gtc2l6aW5nOiBjb250ZW50LWJveDsgKi8KICAgICAgICBoZWlnaHQ6IDI4MHB4OwogICAgICAgIHdpZHRoOiA0ODRweDsKICAgICAgfQogICAgICAjc2xpY2luZywKICAgICAgI3RpbWUtaW5kaWNlcyB7CiAgICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItaW5wdXQ6IHsKICAgICAgICAgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7CiAgICAgICAgfQogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CiAgPHNjcmlwdD4vL35+V0VCUEFUSH5+L3RmLWRlYnVnZ2VyLWRhc2hib2FyZC90Zi10ZW5zb3ItdmFsdWUtdmlldy5odG1sLmpzClBvbHltZXIoe2lzOiJ0Zi10ZW5zb3ItdmFsdWUtdmlldyIscHJvcGVydGllczp7dmlld0lkOlN0cmluZyx0ZW5zb3JOYW1lOlN0cmluZyxkZWJ1Z09wOlN0cmluZyxzbGljaW5nOlN0cmluZyx0aW1lSW5kaWNlczpTdHJpbmcsZHR5cGU6U3RyaW5nLHNoYXBlOkFycmF5LGNvbnRpbnVlVG9CdXR0b25DYWxsYmFjazpPYmplY3QsY2xvc2VCdXR0b25DYWxsYmFjazpPYmplY3QsdGVuc29yTmFtZUNhbGxiYWNrOk9iamVjdCx0ZW5zb3JXaWRnZXQ6T2JqZWN0LF9pc1RlbnNvclZhbHVlU2NhbGFyOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LF9pc1RlbnNvclZhbHVlTGluZUNoYXJ0Ont0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LF9pc1RlbnNvclZhbHVlSW1hZ2U6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sX2RhdGFTY2FsYXI6e3R5cGU6TnVtYmVyLHZhbHVlOm51bGx9LF9saW5lQ2hhcnREYXRhOnt0eXBlOkFycmF5LHZhbHVlOm51bGx9LF9kYXRhSW1hZ2VTcmM6e3R5cGU6U3RyaW5nLHZhbHVlOm51bGx9LApfcmVxdWVzdE1hbmFnZXI6e3R5cGU6T2JqZWN0LHZhbHVlOigpPT5uZXcgUGsuUmVxdWVzdE1hbmFnZXIoMTApfX0sb2JzZXJ2ZXJzOlsiX3VwZGF0ZVRpbWVJbmRpY2VzVG9nZ2xlKHRpbWVJbmRpY2VzKSJdLHJlbmRlclRlbnNvclZhbHVlKCl7aWYodGhpcy50ZW5zb3JOYW1lKWlmKG51bGw9PXRoaXMuc2xpY2luZyl7dGhpcy5zZXQoIl91c2VUZW5zb3JXaWRnZXQiLCEwKTtjb25zdCBjPXtzcGVjOntkdHlwZTp0aGlzLmR0eXBlLHNoYXBlOnRoaXMuc2hhcGV9LGdldDooKT0+e3Rocm93IEVycm9yKCJ0ZW5zb3JWaWV3LmdldCgpIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQuIik7fSx2aWV3OmQ9Pntjb25zdCBmPXRoaXM7cmV0dXJuIERiKGZ1bmN0aW9uKigpe2NvbnN0IGc9Zi5zaGFwZS5sZW5ndGgsbD1kLnNsaWNpbmdEaW1zQW5kSW5kaWNlcy5tYXAocD0+cC5kaW0pLGs9ZC5zbGljaW5nRGltc0FuZEluZGljZXMubWFwKHA9PnAuaW5kZXgpO2xldCBtPSJbIjtmb3IobGV0IHA9MDtwPApnOysrcCktMSE9PWwuaW5kZXhPZihwKT9tKz1gJHtrW2wuaW5kZXhPZihwKV19YDpkLnZpZXdpbmdEaW1zWzBdPT09cD9tKz1gJHtkLnZlcnRpY2FsUmFuZ2VbMF19OiR7ZC52ZXJ0aWNhbFJhbmdlWzFdfWA6ZC52aWV3aW5nRGltc1sxXT09PXAmJihtKz1gJHtkLmhvcml6b250YWxSYW5nZVswXX06JHtkLmhvcml6b250YWxSYW5nZVsxXX1gKSxwPGctMSYmKG0rPSIsIik7bSs9Il0iO3JldHVybiBuZXcgUHJvbWlzZSgocCxxKT0+e2NvbnN0IHI9Zi5fZ2V0VGVuc29yRGF0YVVSTCh7d2F0Y2hfa2V5OmYudGVuc29yTmFtZSsiOiIrZi5kZWJ1Z09wLHNsaWNpbmc6bSx0aW1lX2luZGljZXM6Zi50aW1lSW5kaWNlcyxtYXBwaW5nOiJub25lIn0pO2YuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3QocikudGhlbih0PT57bnVsbD09dC5lcnJvcj9wKHQudGVuc29yX2RhdGFbdC50ZW5zb3JfZGF0YS5sZW5ndGgtMV0pOnEodC5lcnJvcil9KS5jYXRjaCh0PT5xKHQpKX0pfSl9fTtzZXRUaW1lb3V0KCgpPT4Ke251bGw9PXRoaXMudGVuc29yV2lkZ2V0JiYodGhpcy50ZW5zb3JXaWRnZXQ9a20udGVuc29yV2lkZ2V0KHRoaXMuJCQoIiN0ZW5zb3Itd2lkZ2V0IiksYykpO3RoaXMudGVuc29yV2lkZ2V0LnJlbmRlcigpfSwxMCl9ZWxzZXt0aGlzLnNldCgiX3VzZVRlbnNvcldpZGdldCIsITEpO3ZhciBhPXRoaXMuX3JhbmtGcm9tU2xpY2luZyh0aGlzLnNsaWNpbmcudHJpbSgpKTtjb25zdCBjPXRoaXMuX2lzVGltZUluZGljZXNTaW5nbGVTdGVwKHRoaXMudGltZUluZGljZXMpO2xldCBkPWE7aWYoIWMpe2lmKDE8YSl7dGhpcy5fc2hvd1RvYXN0KCJIaXN0b3J5IGZvciB0ZW5zb3JzIFx4M2UgMUQgaXMgbm90IHlldCBzdXBwb3J0ZWQuIik7cmV0dXJufWQrPTF9YT10aGlzLl9nZXRUZW5zb3JEYXRhVVJMKHt3YXRjaF9rZXk6dGhpcy50ZW5zb3JOYW1lKyI6Iit0aGlzLmRlYnVnT3Asc2xpY2luZzp0aGlzLnNsaWNpbmcsdGltZV9pbmRpY2VzOnRoaXMudGltZUluZGljZXMsbWFwcGluZzoyPD1kPwoiaW1hZ2UvcG5nIjoibm9uZSJ9KTt0aGlzLl9yZXF1ZXN0TWFuYWdlci5yZXF1ZXN0KGEpLnRoZW4oZj0+e3RoaXMuJCQoIiNkZWJ1Zy1vcCIpLnRleHRDb250ZW50PXRoaXMuX2NhbGN1bGF0ZURlYnVnT3BUb0Rpc3BsYXkoKTtpZihudWxsIT1mLmVycm9yKXRoaXMuX3Nob3dUb2FzdChmLmVycm9yLnR5cGUrIjogIitmLmVycm9yLm1lc3NhZ2UpO2Vsc2UgaWYoZj1jP2YudGVuc29yX2RhdGFbMF06Zi50ZW5zb3JfZGF0YSwwPT09ZCl0aGlzLl9zZXRWaXN1YWxpemF0aW9uVHlwZSgic2NhbGFyIiksdGhpcy5zZXQoIl9kYXRhU2NhbGFyIixmKTtlbHNlIGlmKDE9PT1kKXt0aGlzLl9zZXRWaXN1YWxpemF0aW9uVHlwZSgibGluZUNoYXJ0Iik7bGV0IGc9e3g6W10seTpmfTtmb3IobGV0IGw9MDtsPGYubGVuZ3RoOysrbClnLngucHVzaChsKzEpO3RoaXMuc2V0KCJfbGluZUNoYXJ0RGF0YSIsZyl9ZWxzZSAyPD1kPyh0aGlzLl9zZXRWaXN1YWxpemF0aW9uVHlwZSgiaW1hZ2UiKSx0aGlzLnNldCgiX2RhdGFJbWFnZVNyYyIsCiJkYXRhOmltYWdlL3BuZztiYXNlNjQsIitmKSk6dGhpcy5fc2hvd1RvYXN0KCJWaXN1YWxpemF0aW9uIG9mIHJhbmstIitkKyIgdGVuc29ycyBpcyBub3QgeWV0IHN1cHBvcnRlZC4iKX0pfX0scmVmcmVzaCgpe3RoaXMudGVuc29yTmFtZS50cmltKCkmJnRoaXMucmVuZGVyVGVuc29yVmFsdWUoKX0sX2dldFRlbnNvckRhdGFVUkwoYSl7Y29uc3QgYz1Qay5nZXRSb3V0ZXIoKS5wbHVnaW5Sb3V0ZSgiZGVidWdnZXIiLCIvdGVuc29yX2RhdGEiKTtyZXR1cm4gUGsuYWRkUGFyYW1zKGMsYSl9LF9yYW5rRnJvbVNsaWNpbmcoYSl7YS5zdGFydHNXaXRoKCJbIikmJihhPWEuc2xpY2UoMSxhLmxlbmd0aC0xKSk7aWYoMD09PWEubGVuZ3RoKXJldHVybiAwO3thPWEuc3BsaXQoIiwiKTtsZXQgYz1hLmxlbmd0aDtmb3IoY29uc3QgZCBvZiBhKWlzTmFOKE51bWJlcihkKSl8fGMtLTtyZXR1cm4gY319LF9zZXRWaXN1YWxpemF0aW9uVHlwZShhKXsic2NhbGFyIj09PWE/KHRoaXMuc2V0KCJfaXNWYWx1ZVNjYWxhciIsCiEwKSx0aGlzLnNldCgiX2lzVmFsdWVMaW5lQ2hhcnQiLCExKSx0aGlzLnNldCgiX2lzVmFsdWVJbWFnZSIsITEpKToibGluZUNoYXJ0Ij09PWE/KHRoaXMuc2V0KCJfaXNWYWx1ZVNjYWxhciIsITEpLHRoaXMuc2V0KCJfaXNWYWx1ZUxpbmVDaGFydCIsITApLHRoaXMuc2V0KCJfaXNWYWx1ZUltYWdlIiwhMSkpOiJpbWFnZSI9PT1hPyh0aGlzLnNldCgiX2lzVmFsdWVTY2FsYXIiLCExKSx0aGlzLnNldCgiX2lzVmFsdWVMaW5lQ2hhcnQiLCExKSx0aGlzLnNldCgiX2lzVmFsdWVJbWFnZSIsITApKTpjb25zb2xlLmVycm9yKCJJbnZhbGlkIHZpc3VhbGl6YXRpb25UeXBlOiIsYSl9LF90aW1lSW5kaWNlc1RvZ2dsZUJ1dHRvbkNhbGxiYWNrKCl7ImZ1bGwgaGlzdG9yeSI9PT1Qb2x5bWVyLmRvbSh0aGlzLiQkKCIjdGltZS1pbmRpY2VzLXRvZ2dsZS1idXR0b24iKSkudGV4dENvbnRlbnQudG9Mb3dlckNhc2UoKT90aGlzLnNldCgidGltZUluZGljZXMiLCI6Iik6dGhpcy5zZXQoInRpbWVJbmRpY2VzIiwKIi0xIik7dGhpcy5yZW5kZXJUZW5zb3JWYWx1ZSgpfSxfdXBkYXRlVGltZUluZGljZXNUb2dnbGUoYSl7dGhpcy5faXNUaW1lSW5kaWNlc1NpbmdsZVN0ZXAoYSk/UG9seW1lci5kb20odGhpcy4kJCgiI3RpbWUtaW5kaWNlcy10b2dnbGUtYnV0dG9uIikpLnRleHRDb250ZW50PSJGdWxsIEhpc3RvcnkiOlBvbHltZXIuZG9tKHRoaXMuJCQoIiN0aW1lLWluZGljZXMtdG9nZ2xlLWJ1dHRvbiIpKS50ZXh0Q29udGVudD0iTGF0ZXN0IFRpbWUgUG9pbnQifSxfaXNUaW1lSW5kaWNlc1NpbmdsZVN0ZXAoYSl7YS5zdGFydHNXaXRoKCJbIikmJihhPWEuc2xpY2UoMSxhLmxlbmd0aC0xKSk7cmV0dXJuIWlzTmFOKE51bWJlcihhKSl9LF9jYWxjdWxhdGVEZWJ1Z09wVG9EaXNwbGF5KCl7cmV0dXJuIkRlYnVnSWRlbnRpdHkiPT09dGhpcy5kZWJ1Z09wPyIiOnRoaXMuZGVidWdPcH0sX3Nob3dUb2FzdChhKXt0aGlzLiQudGVuc29yVmFsdWVUb2FzdC5zZXRBdHRyaWJ1dGUoInRleHQiLGEpO3RoaXMuJC50ZW5zb3JWYWx1ZVRvYXN0Lm9wZW4oKX19KTsKPC9zY3JpcHQ+CjwvZG9tLW1vZHVsZT4KCgo8ZG9tLW1vZHVsZSBpZD0idGYtdGVuc29yLXZhbHVlLW11bHRpLXZpZXciPgogIDx0ZW1wbGF0ZT4KICAgIDxkaXYgaWQ9Im11bHRpVmlldyI+CiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tdGl0bGUiPlRlbnNvciBWYWx1ZXM8L2Rpdj4KICAgICAgPGRpdiBpZD0ibXVsdGktdGVuc29yLXZpZXctY29udGFpbmVyIj48L2Rpdj4KICAgIDwvZGl2PgogICAgPHN0eWxlPgogICAgICAuc2VjdGlvbi10aXRsZSB7CiAgICAgICAgZm9udC1zaXplOiAxMTAlOwogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICB9CiAgICAgICNtdWx0aVZpZXcgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7CiAgICAgICAgcGFkZGluZy10b3A6IDNweDsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDNweDsKICAgICAgICBwYWRkaW5nLXJpZ2h0OiAzcHg7CiAgICAgICAgYm94LXNoYWRvdzogM3B4IDNweCAjZWVlOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CiAgPHNjcmlwdD4vL35+V0VCUEFUSH5+L3RmLWRlYnVnZ2VyLWRhc2hib2FyZC90Zi10ZW5zb3ItdmFsdWUtbXVsdGktdmlldy5odG1sLmpzClBvbHltZXIoe2lzOiJ0Zi10ZW5zb3ItdmFsdWUtbXVsdGktdmlldyIscHJvcGVydGllczp7Y29udGludWVUb0NhbGxiYWNrOkZ1bmN0aW9uLHRlbnNvck5hbWVDbGlja2VkOkZ1bmN0aW9uLF90ZW5zb3JWaWV3Q291bnRlcjp7dHlwZTpOdW1iZXIsdmFsdWU6MH19LGFkZFZpZXcoYSl7Y29uc3QgYz10aGlzLiQkKCIjbXVsdGktdGVuc29yLXZpZXctY29udGFpbmVyIiksZD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0Zi10ZW5zb3ItdmFsdWUtdmlldyIpO2Quc2V0QXR0cmlidXRlKCJjbGFzcyIsImRlYnVnZ2VyLXRlbnNvci12aWV3Iik7ZC52aWV3SWQ9YS52aWV3SWQ7ZC50ZW5zb3JOYW1lPWEudGVuc29yTmFtZTtkLmRlYnVnT3A9YS5kZWJ1Z09wO2QuZHR5cGU9YS5kdHlwZTtkLnNoYXBlPWEuc2hhcGU7ZC5zbGljaW5nPWEuc2xpY2luZztkLnRpbWVJbmRpY2VzPWEudGltZUluZGljZXM7ZC5jbG9zZUJ1dHRvbkNhbGxiYWNrPXRoaXMuX2NyZWF0ZUNsb3NlQnV0dG9uQ2FsbGJhY2soYS52aWV3SWQpOwpkLmNvbnRpbnVlVG9CdXR0b25DYWxsYmFjaz0oKT0+e3RoaXMuY29udGludWVUb0NhbGxiYWNrKGEuZGV2aWNlTmFtZSxhLm1heWJlQmFzZUV4cGFuZGVkTm9kZU5hbWUpfTtkLnRlbnNvck5hbWVDYWxsYmFjaz0oKT0+e3RoaXMudGVuc29yTmFtZUNsaWNrZWQoYS5kZXZpY2VOYW1lLGEubWF5YmVCYXNlRXhwYW5kZWROb2RlTmFtZSl9O2MuYXBwZW5kQ2hpbGQoZCk7ZC5yZWZyZXNoKCl9LGdldFZpZXdzKCl7Y29uc3QgYT1bXTtfLmZvckVhY2godGhpcy5yb290LnF1ZXJ5U2VsZWN0b3JBbGwoIi5kZWJ1Z2dlci10ZW5zb3ItdmlldyIpLGM9PnthLnB1c2goe3ZpZXdJZDpjLnZpZXdJZCx0ZW5zb3JOYW1lOmMudGVuc29yTmFtZSxkZWJ1Z09wOmMuZGVidWdPcCxzbGljaW5nOmMuc2xpY2luZyx0aW1lSW5kaWNlczpjLnRpbWVJbmRpY2VzfSl9KTtyZXR1cm4gYX0scmVuZGVyVGVuc29yVmFsdWVzKCl7Xy5mb3JFYWNoKHRoaXMucm9vdC5xdWVyeVNlbGVjdG9yQWxsKCIuZGVidWdnZXItdGVuc29yLXZpZXciKSwKYT0+e2EucmVuZGVyVGVuc29yVmFsdWUoKX0pfSxfcmVkcmF3Vmlld3MoYSl7Y29uc3QgYz10aGlzLiQkKCIjbXVsdGktdGVuc29yLXZpZXctY29udGFpbmVyIik7Xy5mb3JFYWNoKHRoaXMucm9vdC5xdWVyeVNlbGVjdG9yQWxsKCIuZGVidWdnZXItdGVuc29yLXZpZXciKSxkPT57Yy5yZW1vdmVDaGlsZChkKX0pO18uZm9yRWFjaChhLGQ9Pnt0aGlzLmFkZFZpZXcoZCl9KX0sX2NyZWF0ZUNsb3NlQnV0dG9uQ2FsbGJhY2soYSl7cmV0dXJuKCk9Pntjb25zdCBjPVtdLGQ9dGhpcy5yb290LnF1ZXJ5U2VsZWN0b3JBbGwoIi5kZWJ1Z2dlci10ZW5zb3ItdmlldyIpO2ZvcihsZXQgZj0wO2Y8ZC5sZW5ndGg7KytmKXtjb25zdCBnPWRbZl07Zy52aWV3SWQhPT1hJiZjLnB1c2goe3ZpZXdJZDpnLnZpZXdJZCx0ZW5zb3JOYW1lOmcudGVuc29yTmFtZSxkZWJ1Z09wOmcuZGVidWdPcCxkdHlwZTpnLmR0eXBlLHNoYXBlOmcuc2hhcGUsc2xpY2luZzpnLnNsaWNpbmcsdGltZUluZGljZXM6Zy50aW1lSW5kaWNlc30pfXRoaXMuX3JlZHJhd1ZpZXdzKGMpfX19KTsKPC9zY3JpcHQ+CjwvZG9tLW1vZHVsZT4KCgo8ZG9tLW1vZHVsZSBpZD0idGYtZGVidWdnZXItZGFzaGJvYXJkIj4KICA8dGVtcGxhdGU+CiAgICA8cGFwZXItdG9hc3QgaWQ9InRvYXN0IiB0ZXh0PSIiIGFsd2F5cy1vbi10b3A+PC9wYXBlci10b2FzdD4KICAgIDx0Zi1kZWJ1Z2dlci1pbml0aWFsLWRpYWxvZyBpZD0iaW5pdGlhbERpYWxvZyI+PC90Zi1kZWJ1Z2dlci1pbml0aWFsLWRpYWxvZz4KICAgIAogICAgPHRmLWRhc2hib2FyZC1sYXlvdXQ+CiAgICAgIDxkaXYgY2xhc3M9InNpZGViYXIiIHNsb3Q9InNpZGViYXIiIGlkPSJsZWZ0LXBhbmUiPgogICAgICAgIDxkaXYgaWQ9Im5vZGUtZW50cmllcyIgY2xhc3M9Im5vZGUtZW50cmllcyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJkZWJ1Z2dlci1zZWN0aW9uLXRpdGxlIj5SdW50aW1lIE5vZGUgTGlzdDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0idG9nZ2xlLXNvdXJjZS1jb2RlIj4KICAgICAgICAgICAgU2hvdyBDb2RlOgogICAgICAgICAgICA8cGFwZXItdG9nZ2xlLWJ1dHRvbiBjbGFzcz0idG9nZ2xlLXNvdXJjZS1jb2RlIiBpZD0ic2hvdy1zb3VyY2UtY29kZSIgY2hlY2tlZD0ie3tfc291cmNlQ29kZVNob3dufX0iPjwvcGFwZXItdG9nZ2xlLWJ1dHRvbj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPHRmLW9wLXNlbGVjdG9yIGRlYnVnLXdhdGNoZXM9IltbX2RlYnVnV2F0Y2hlc11dIiBkZWJ1Zy13YXRjaC1jaGFuZ2U9IltbX2NyZWF0ZURlYnVnV2F0Y2hDaGFuZ2VIYW5kbGVyKCldXSIgbm9kZS1jbGlja2VkPSJbW19jcmVhdGVOb2RlQ2xpY2tlZEhhbmRsZXIoKV1dIiBmb3JjZS1leHBhbmQtYW5kLWNoZWNrLW5vZGUtbmFtZT0iW1tfZm9yY2VFeHBhbmRBbmRDaGVja05vZGVOYW1lXV0iIGZvcmNlLWV4cGFuZC1ub2RlLW5hbWU9IltbX2ZvcmNlRXhwYW5kTm9kZU5hbWVdXSI+CiAgICAgICAgICA8L3RmLW9wLXNlbGVjdG9yPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgaWQ9InNvdXJjZS1jb2RlLXZpZXctZGl2IiBjbGFzcz0ic291cmNlLWNvZGUtdmlldy1kaXYiIGhpZGRlbiQ9Int7IV9zb3VyY2VDb2RlU2hvd259fSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJkZWJ1Z2dlci1zZWN0aW9uLXRpdGxlIj5Tb3VyY2UgQ29kZTwvZGl2PgogICAgICAgICAgPHRmLXNvdXJjZS1jb2RlLXZpZXcgaWQ9InNvdXJjZUNvZGVWaWV3IiByZXF1ZXN0LW1hbmFnZXI9IltbX3JlcXVlc3RNYW5hZ2VyXV0iIGRlYnVnLXdhdGNoZXM9IltbX2RlYnVnV2F0Y2hlc11dIiBmb2N1cy1ub2RlLW5hbWU9IltbX3NvdXJjZUZvY3VzTm9kZU5hbWVdXSIgbm9kZS1jbGlja2VkPSJbW19jcmVhdGVOb2RlQ2xpY2tlZEhhbmRsZXIoKV1dIiBjb250aW51ZS10by1ub2RlPSJbW19jcmVhdGVDb250aW51ZVRvTm9kZUhhbmRsZXIoKV1dIj48L3RmLXNvdXJjZS1jb2RlLXZpZXc+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPHRmLWRlYnVnZ2VyLXJlc2l6ZXIgY3VycmVudC1sZW5ndGg9Int7X2xlZnRQYW5lV2lkdGh9fSIgbWluLWxlbmd0aD0iW1tfbWlubGVmdFBhbmVXaWR0aF1dIiBtYXgtbGVuZ3RoPSJbW19tYXhsZWZ0UGFuZVdpZHRoXV0iPgogICAgICAgIDwvdGYtZGVidWdnZXItcmVzaXplcj4KICAgICAgICA8ZGl2PgogICAgICAgICAgPHRmLXNlc3Npb24tcnVucy12aWV3IGlkPSJzZXNzaW9uUnVuc1ZpZXciIGxhdGVzdC1zZXNzaW9uLXJ1bj0iW1tfbGF0ZXN0U2Vzc2lvblJ1bl1dIiBzZXNzaW9uLXJ1bi1rZXktdG8tZGV2aWNlLW5hbWVzPSJbW19zZXNzaW9uUnVuS2V5MkRldmljZU5hbWVzXV0iIHNvbGUtYWN0aXZlPSJbW19zZXNzaW9uUnVuU29sZUFjdGl2ZV1dIiBub2RlLW9yLXRlbnNvci1jbGlja2VkPSJbW19jcmVhdGVGZWVkRmV0Y2hUYXJnZXRDbGlja2VkSGFuZGxlcigpXV0iPgogICAgICAgICAgPC90Zi1zZXNzaW9uLXJ1bnMtdmlldz4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJidXR0b25zLWNvbnRhaW5lciI+CiAgICAgICAgICA8cGFwZXItYnV0dG9uIHJhaXNlZCBjbGFzcz0iY29udGludWUtYnV0dG9uIiBvbi1jbGljaz0iX3N0ZXAiPgogICAgICAgICAgICA8c3Bhbj5bW19zdGVwQnV0dG9uVGV4dF1dPC9zcGFuPgogICAgICAgICAgPC9wYXBlci1idXR0b24+CiAgICAgICAgICA8dGYtZGVidWdnZXItY29udGludWUtZGlhbG9nIGlkPSJjb250aW51ZURpYWxvZyIgc2Vzc2lvbi1ydW4tZ289IltbX2NyZWF0ZVNlc3Npb25SdW5HbygpXV0iIHRlbnNvci1jb25kaXRpb24tZ289IltbX2NyZWF0ZVRlbnNvckNvbmRpdGlvbkdvKCldXSIgZm9yY2UtY29udGludWF0aW9uLXN0b3A9IltbX2NyZWF0ZUZvcmNlQ29udGludWF0aW9uU3RvcCgpXV0iPgogICAgICAgICAgPC90Zi1kZWJ1Z2dlci1jb250aW51ZS1kaWFsb2c+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iY29udGFpbmVyIj4KICAgICAgICAgIDx0Zi1ncmFwaC1sb2FkZXIgaWQ9ImxvYWRlciIgb3V0LWdyYXBoLWhpZXJhcmNoeT0ie3tncmFwaEhpZXJhcmNoeX19IiBvdXQtZ3JhcGg9Int7Z3JhcGh9fSIgb3V0LXN0YXRzPSJ7e3N0YXRzfX0iIHByb2dyZXNzPSJ7e19ncmFwaFByb2dyZXNzfX0iPjwvdGYtZ3JhcGgtbG9hZGVyPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY2VudGVyIiBzbG90PSJjZW50ZXIiIGlkPSJjZW50ZXItY29udGVudCI+CiAgICAgICAgPGRpdiBpZD0idG9wLXJpZ2h0LXF1YWRyYW50Ij4KICAgICAgICAgIDxwYXBlci10YWJzIHNlbGVjdGVkPSJ7e190b3BSaWdodFNlbGVjdGVkfX0iPgogICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW190b3BSaWdodFRhYnNdXSI+CiAgICAgICAgICAgICAgPHBhcGVyLXRhYiBpZD0iW1tpdGVtLmlkXV0iPltbaXRlbS5uYW1lXV08L3BhcGVyLXRhYj4KICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDwvcGFwZXItdGFicz4KICAgICAgICAgIDxkaXYgY2xhc3M9InJ1bnRpbWUtZ3JhcGgtZGV2aWNlIj4KICAgICAgICAgICAgPHNwYW4gaWQ9InJ1bnRpbWUtZ3JhcGgtZGV2aWNlLW5hbWUiPiA8L3NwYW4+CiAgICAgICAgICAgIDxwYXBlci1kcm9wZG93bi1tZW51IGlkPSJhY3RpdmUtcnVudGltZS1ncmFwaC1kZXZpY2UtbmFtZSIgbm8tbGFiZWwtZmxvYXQ9InRydWUiIGxhYmVsPSJEZXZpY2UgbmFtZSIgc2VsZWN0ZWQtaXRlbS1sYWJlbD0ie3tfYWN0aXZlUnVudGltZUdyYXBoRGV2aWNlTmFtZX19Ij4KICAgICAgICAgICAgICA8cGFwZXItbGlzdGJveCBjbGFzcz0iZHJvcGRvd24tY29udGVudCIgc2xvdD0iZHJvcGRvd24tY29udGVudCI+CiAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19hY3RpdmVTZXNzaW9uUnVuRGV2aWNlc11dIj4KICAgICAgICAgICAgICAgICAgPHBhcGVyLWl0ZW0gbm8tbGFiZWwtZmxvYXQ9InRydWUiPltbaXRlbV1dPC9wYXBlci1pdGVtPgogICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICA8L3BhcGVyLWxpc3Rib3g+CiAgICAgICAgICAgIDwvcGFwZXItZHJvcGRvd24tbWVudT4KICAgICAgICAgICAgPHBhcGVyLXNwaW5uZXItbGl0ZSBjbGFzcz0ic3Bpbm5lciIgaWQ9InRvcC1yaWdodC1zcGlubmVyIiBoaWRkZW49IltbIV9idXN5XV0iIGFjdGl2ZT0iW1tfYnVzeV1dIj4KICAgICAgICAgICAgPC9wYXBlci1zcGlubmVyLWxpdGU+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxwYXBlci1wcm9ncmVzcyBpZD0idG9wLXJpZ2h0LXByb2dyZXNzLWJhciIgdmFsdWU9IjAiPjwvcGFwZXItcHJvZ3Jlc3M+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2lzVG9wUmlnaHRSdW50aW1lR3JhcGhzQWN0aXZlXV0iPgogICAgICAgICAgICA8ZGl2IGlkPSJncmFwaC1jb250YWluZXIiPgogICAgICAgICAgICAgIDx0Zi1ncmFwaCBpZD0iZ3JhcGgiIGdyYXBoLWhpZXJhcmNoeT0iW1tncmFwaEhpZXJhcmNoeV1dIiBiYXNpYy1ncmFwaD0iW1tncmFwaF1dIiBzdGF0cz0iW1tzdGF0c11dIiBwcm9ncmVzcz0ie3tfZ3JhcGhQcm9ncmVzc319IiBjb2xvci1ieT0ic3RydWN0dXJlIiBjb2xvci1ieS1wYXJhbXM9Int7Y29sb3JCeVBhcmFtc319IiByZW5kZXItaGllcmFyY2h5PSJ7e19yZW5kZXJIaWVyYXJjaHl9fSIgbm9kZS1jb250ZXh0LW1lbnUtaXRlbXM9IltbX2NyZWF0ZU5vZGVDb250ZXh0TWVudUl0ZW1zKCldXSI+PC90Zi1ncmFwaD4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb250ZXh0LW1lbnUiPjwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2lzVG9wUmlnaHRUZW5zb3JWYWx1ZXNBY3RpdmVdXSI+CiAgICAgICAgICAgIDx0Zi10ZW5zb3ItdmFsdWUtbXVsdGktdmlldyBpZD0idGVuc29yVmFsdWVNdWx0aVZpZXciIGNvbnRpbnVlLXRvLWNhbGxiYWNrPSJbW19jcmVhdGVDb250aW51ZVRvQ2FsbGJhY2soKV1dIiB0ZW5zb3ItbmFtZS1jbGlja2VkPSJbW19jcmVhdGVOb2RlQ2xpY2tlZEhhbmRsZXIoKV1dIj4KICAgICAgICAgICAgPC90Zi10ZW5zb3ItdmFsdWUtbXVsdGktdmlldz4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDx0Zi1kZWJ1Z2dlci1yZXNpemVyIGlzLWhvcml6b250YWw9InRydWUiIGN1cnJlbnQtbGVuZ3RoPSJ7e190b3BSaWdodFF1YWRyYW50SGVpZ2h0fX0iIG1pbi1sZW5ndGg9IltbX21pblRvcFJpZ2h0UXVhZHJhbnRIZWlnaHRdXSIgbWF4LWxlbmd0aD0iW1tfbWF4VG9wUmlnaHRRdWFkcmFudEhlaWdodF1dIj4KICAgICAgICA8L3RmLWRlYnVnZ2VyLXJlc2l6ZXI+CgogICAgICAgIDxkaXYgaWQ9InRlbnNvci1kYXRhIiBjbGFzcz0idGVuc29yLWRhdGEiPgogICAgICAgICAgPHRmLXRlbnNvci1kYXRhLXN1bW1hcnkgaWQ9InRlbnNvckRhdGFTdW1tYXJ5IiBsYXRlc3QtdGVuc29yLWRhdGE9IltbX2xhdGVzdFRlbnNvckRhdGFdXSIgZXhwYW5kLWhhbmRsZXI9IltbX2NyZWF0ZVRlbnNvckRhdGFFeHBhbmRIYW5kbGVyKCldXSIgY29udGludWUtdG8tY2FsbGJhY2s9IltbX2NyZWF0ZUNvbnRpbnVlVG9DYWxsYmFjaygpXV0iIGhpZ2hsaWdodGVkLW5vZGUtbmFtZT0iW1tfaGlnaGxpZ2h0Tm9kZU5hbWVdXSIgdGVuc29yLW5hbWUtY2xpY2tlZD0iW1tfY3JlYXRlTm9kZUNsaWNrZWRIYW5kbGVyKCldXSIgZ2V0LWhlYWx0aC1waWxsPSJbW19jcmVhdGVHZXRIZWFsdGhQaWxsKCldXSI+CiAgICAgICAgICA8L3RmLXRlbnNvci1kYXRhLXN1bW1hcnk+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgPC90Zi1kYXNoYm9hcmQtbGF5b3V0PgoKICAgIDxzdHlsZSBpbmNsdWRlPSJkYXNoYm9hcmQtc3R5bGUiPjwvc3R5bGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgbGVmdDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgICB0b3A6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KICAgICAgcGFwZXItdG9hc3QgewogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICBmb250LXNpemU6IDExMCU7CiAgICAgICAgd2lkdGg6IDQwdnc7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDMwdnc7CiAgICAgIH0KICAgICAgdGYtZGFzaGJvYXJkLWxheW91dCB7CiAgICAgICAgLS10Zi1kYXNoYm9hcmQtbGF5b3V0LXNpZGViYXItYmFzaXM6IGF1dG87CiAgICAgICAgLS10Zi1kYXNoYm9hcmQtbGF5b3V0LXNpZGViYXItbWF4LXdpZHRoOiBub25lOwogICAgICAgIC0tdGYtZGFzaGJvYXJkLWxheW91dC1zaWRlYmFyLW1pbi13aWR0aDogbm9uZTsKICAgICAgfQogICAgICAuZGVidWdnZXItc2VjdGlvbi10aXRsZSB7CiAgICAgICAgZm9udC1zaXplOiAxMTAlOwogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICB9CiAgICAgIHBhcGVyLXRhYnMgewogICAgICAgIGNvbG9yOiAjNTU1OwogICAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CiAgICAgIH0KICAgICAgcGFwZXItdGFiLmlyb24tc2VsZWN0ZWQgewogICAgICAgIGNvbG9yOiBibGFjazsKICAgICAgICBmb250LXdlaWdodDogYm9sZDsKICAgICAgfQogICAgICAjaW5pdGlhbERpYWxvZyB7CiAgICAgICAgLyoqIFRoaXMgbWF0Y2hlcyB0aGUgZGVmYXVsdCB6LWluZGV4IG9mIHBhcGVyLWRpYWxvZyBiYWNrZHJvcHMuICovCiAgICAgICAgei1pbmRleDogMTAyOwogICAgICB9CiAgICAgIC8qKiBSZXNpemUgdGhlIHJlZ2lvbiBmb3IgdGhlIGdyYXBoIGFzIHRoZSB1c2VyIHJlc2l6ZXMgdGhlIHJlZ2lvbi4gKi8KICAgICAgI2dyYXBoLWNvbnRhaW5lciB7CiAgICAgICAgaGVpZ2h0OiBjYWxjKDEwMCUgLSAxMjBweCk7CiAgICAgICAgLyoqIENsaXAgdGhlIG1pbmltYXAgaWYgdGhlIGhlaWdodCBvZiB0aGUgZ3JhcGggY29udGFpbmVyIGlzIHNtYWxsLiAqLwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CiAgICAgICNncmFwaCB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgfQogICAgICAjdG9vbHRpcC1zb3J0aW5nIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBtYXJnaW4tdG9wOiA1cHg7CiAgICAgIH0KICAgICAgI3Rvb2x0aXAtc29ydGluZy1sYWJlbCB7CiAgICAgICAgbWFyZ2luLXRvcDogMTNweDsKICAgICAgfQogICAgICAjdG9vbHRpcC1zb3J0aW5nIHBhcGVyLWRyb3Bkb3duLW1lbnUgewogICAgICAgIG1hcmdpbi1sZWZ0OiAxMHB4OwogICAgICAgIC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWZvY3VzLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICB3aWR0aDogMTA1cHg7CiAgICAgIH0KICAgICAgI3gtdHlwZS1zZWxlY3RvciBwYXBlci1idXR0b24gewogICAgICAgIG1hcmdpbjogNXB4IDNweDsKICAgICAgfQogICAgICAucnVudGltZS1ncmFwaC1kZXZpY2UgewogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgIH0KICAgICAgI3J1bnRpbWUtZ3JhcGgtZGV2aWNlLW5hbWUgewogICAgICAgIGZvbnQtc2l6ZTogODUlOwogICAgICAgIHdvcmQtYnJlYWs6IGJyZWFrLWFsbDsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgIH0KICAgICAgI2FjdGl2ZS1ydW50aW1lLWdyYXBoLWRldmljZS1uYW1lIHsKICAgICAgICBmb250LXNpemU6IDg1JTsKICAgICAgICB3aWR0aDogMzUwcHg7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICB9CiAgICAgICN0b3AtcmlnaHQtcHJvZ3Jlc3MtYmFyIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKICAgICAgfQogICAgICAubGluZS1pdGVtIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwYWRkaW5nLXRvcDogNXB4OwogICAgICB9CiAgICAgIC5uby1kYXRhLXdhcm5pbmcgewogICAgICAgIG1heC13aWR0aDogNTQwcHg7CiAgICAgICAgbWFyZ2luOiA4MHB4IGF1dG8gMCBhdXRvOwogICAgICB9CiAgICAgIC5zaWRlYmFyIHsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgb3ZlcmZsb3cteDogdmlzaWJsZTsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KICAgICAgLmNlbnRlciB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgfQogICAgICB0Zi1kZWJ1Z2dlci1yZXNpemVyIHsKICAgICAgICByaWdodDogLTEwcHg7CiAgICAgIH0KICAgICAgI2NlbnRlci1jb250ZW50IHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgIH0KICAgICAgLyoqIFRoZSByZXNpemVyIHNob3VsZCBoYXZlIG5vIHNwYWNlIHRvIHRoZSBsZWZ0IG9mIGl0LiAqLwogICAgICAjY2VudGVyLWNvbnRlbnQgdGYtZGVidWdnZXItcmVzaXplcltpcy1ob3Jpem9udGFsXSB7CiAgICAgICAgbWFyZ2luLWxlZnQ6IC0yM3B4OwogICAgICB9CiAgICAgIC5jb250ZXh0LW1lbnUgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNlMmUyZTI7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMnB4OwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBtaW4td2lkdGg6IDE1MHB4OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNkNGQ0ZDQ7CiAgICAgIH0KICAgICAgLnNwaW5uZXIgewogICAgICAgIHdpZHRoOiAyMHB4OwogICAgICAgIGhlaWdodDogMjBweDsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwogICAgICB9CiAgICAgIC5ub2RlLWVudHJpZXMgewogICAgICAgIGJveC1zaGFkb3c6IDNweCAzcHggI2RkZDsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgIGhlaWdodDogODAlOwogICAgICAgIG92ZXJmbG93OiBhdXRvOwogICAgICAgIHBhZGRpbmctbGVmdDogM3B4OwogICAgICAgIHBhZGRpbmctcmlnaHQ6IDNweDsKICAgICAgICBwYWRkaW5nLXRvcDogM3B4OwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CiAgICAgIC5zb3VyY2UtY29kZS12aWV3LWRpdiB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGhlaWdodDogNDAlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICBwYWRkaW5nLXRvcDogM3B4OwogICAgICAgIHBhZGRpbmctbGVmdDogM3B4OwogICAgICAgIHBhZGRpbmctcmlnaHQ6IDNweDsKICAgICAgICBib3gtc2hhZG93OiAzcHggM3B4ICNkZGQ7CiAgICAgIH0KICAgICAgI3Nlc3Npb25SdW5zVmlldyB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIG92ZXJmbG93OiBhdXRvOwogICAgICAgIG1heC1oZWlnaHQ6IDI1dmg7CiAgICAgIH0KICAgICAgLmJ1dHRvbnMtY29udGFpbmVyIHsKICAgICAgICBwYWRkaW5nOiAyMHB4IDA7CiAgICAgIH0KICAgICAgI3RlbnNvci1kYXRhIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgcGFkZGluZzogMjBweCAwOwogICAgICAgIG1hcmdpbjogMCAwIDIwcHggMDsKICAgICAgfQogICAgICAjdGVuc29yRGF0YVN1bW1hcnkgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgICB0b3A6IDA7CiAgICAgIH0KICAgICAgI3RvcC1yaWdodC1xdWFkcmFudCB7CiAgICAgICAgaGVpZ2h0OiA2NiU7CiAgICAgICAgb3ZlcmZsb3c6IGF1dG87CiAgICAgIH0KICAgICAgLnRvZ2dsZS1zb3VyY2UtY29kZSB7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiAxZW07CiAgICAgICAgZm9udC1zaXplOiA4MCU7CiAgICAgICAgZmxvYXQ6IHJpZ2h0OwogICAgICB9CiAgICAgIC5jb250ZXh0LW1lbnUgdWwgewogICAgICAgIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICAgIH0KICAgICAgLmNvbnRleHQtbWVudSB1bCBsaSB7CiAgICAgICAgcGFkZGluZzogNHB4IDE2cHg7CiAgICAgIH0KICAgICAgLmNvbnRleHQtbWVudSB1bCBsaTpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2YzOTEzZTsKICAgICAgICBjb2xvcjogd2hpdGU7CiAgICAgIH0KCiAgICAgIHBhcGVyLWlucHV0IHsKICAgICAgICB3aWR0aDogMjAwcHg7CiAgICAgIH0KICAgICAgLmlubGluZSwKICAgICAgcGFwZXItaXRlbSB7CiAgICAgICAgZGlzcGxheTogaW5saW5lOwogICAgICB9CgogICAgICB2ei1saW5lLWNoYXJ0IHsKICAgICAgICBoZWlnaHQ6IDMwMHB4OwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfQogICAgICBbaGlkZGVuXSB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgogIDxzY3JpcHQ+Ly9+fldFQlBBVEh+fi90Zi1kZWJ1Z2dlci1kYXNoYm9hcmQvdGVuc29yLXNoYXBlLWhlbHBlci5qcwooZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYyhkLGYpe3JldHVybiBkPD1mPyI6OiI6Ijo6IitNYXRoLmNlaWwoZC9mKX1hLmdldERlZmF1bHRTbGljaW5nPWZ1bmN0aW9uKGQpe3JldHVybiAwPT09ZC5sZW5ndGg/IiI6MT09PWQubGVuZ3RoPyJbIitjKGRbMF0sMUUzKSsiXSI6Mj09PWQubGVuZ3RoPyJbIitjKGRbMF0sMjUwKSsiLCAiK2MoZFsxXSwyNTApKyJdIjpudWxsfTthLnJhbmtGcm9tU2xpY2luZz1mdW5jdGlvbihkKXtkLnN0YXJ0c1dpdGgoIlsiKSYmKGQ9ZC5zbGljZSgxLGQubGVuZ3RoLTEpKTtpZigwPT09ZC5sZW5ndGgpcmV0dXJuIDA7e2Q9ZC5zcGxpdCgiLCIpO2xldCBmPWQubGVuZ3RoO2Zvcihjb25zdCBnIG9mIGQpaXNOYU4oTnVtYmVyKGcpKXx8Zi0tO3JldHVybiBmfX19KShpbXx8KGltPXt9KSk7Cjwvc2NyaXB0PgogIDxzY3JpcHQ+Ly9+fldFQlBBVEh+fi90Zi1kZWJ1Z2dlci1kYXNoYm9hcmQvdGYtZGVidWdnZXItZGFzaGJvYXJkLmh0bWwuanMKY29uc3QgbG09KCk9PndpbmRvdy5pbm5lckhlaWdodHx8ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodHx8ZG9jdW1lbnQuYm9keS5jbGllbnRIZWlnaHQsbW09KCk9PndpbmRvdy5pbm5lcldpZHRofHxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGh8fGRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGgsbm09KGxtKCktNzApLzI7ClBvbHltZXIoe2lzOiJ0Zi1kZWJ1Z2dlci1kYXNoYm9hcmQiLHByb3BlcnRpZXM6e190b3BSaWdodFRhYnM6e3R5cGU6QXJyYXksdmFsdWU6W3tpZDoidGFiLXJ1bnRpbWUtZ3JhcGhzIixuYW1lOiJSdW50aW1lIEdyYXBocyJ9LHtpZDoidGFiLXRlbnNvci12YWx1ZXMiLG5hbWU6IlRlbnNvciBWYWx1ZXMifV0scmVhZG9ubHk6ITB9LF9pc1RvcFJpZ2h0UnVudGltZUdyYXBoc0FjdGl2ZTp7dHlwZTpCb29sZWFuLHZhbHVlOiEwfSxfaXNUb3BSaWdodFRlbnNvclZhbHVlc0FjdGl2ZTp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxfdG9wUmlnaHRTZWxlY3RlZDp7dHlwZTpTdHJpbmcsdmFsdWU6IjAiLG9ic2VydmVyOiJfdG9wUmlnaHRTZWxlY3RlZENoYW5nZWQifSxfbG9uZ1BvbGxDb3VudDp7dHlwZTpOdW1iZXIsdmFsdWU6MH0sX3N0ZXBCdXR0b25UZXh0Ont0eXBlOlN0cmluZyx2YWx1ZToiU3RlcCJ9LF9jb250aW51ZUJ1dHRvblRleHQ6e3R5cGU6U3RyaW5nLHZhbHVlOiJDb250aW51ZS4uLiJ9LApfdGVuc29yVmlld0lkQ291bnRlcjp7dHlwZTpOdW1iZXIsdmFsdWU6MH0saXNSZWxvYWREaXNhYmxlZDp7dHlwZTpCb29sZWFuLHZhbHVlOiEwLHJlYWRPbmx5OiEwfSxhbHJlYWR5U3RhcnRlZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxfY3VycmVudFNlc3Npb25SdW5JbmZvOnt0eXBlOlN0cmluZyx2YWx1ZTpudWxsfSxfc2Vzc2lvblJ1blRvdGFsQ291bnRlcjp7dHlwZTpOdW1iZXIsdmFsdWU6MH0sX3Nlc3Npb25SdW5Db3VudGVyczp7dHlwZTpPYmplY3QsdmFsdWU6e319LF9zZXNzaW9uUnVuS2V5MkRldmljZU5hbWVzOnt0eXBlOk9iamVjdCx2YWx1ZTp7fX0sX2FjdGl2ZVNlc3Npb25SdW5LZXk6e3R5cGU6U3RyaW5nLHZhbHVlOm51bGx9LF9hY3RpdmVTZXNzaW9uUnVuRGV2aWNlczp7dHlwZTpBcnJheSx2YWx1ZTpbXX0sX2FjdGl2ZVNlc3Npb25SdW5OdW1EZXZpY2VzOnt0eXBlOk51bWJlcix2YWx1ZTotMX0sX2FjdGl2ZVJ1bnRpbWVHcmFwaERldmljZU5hbWU6e3R5cGU6U3RyaW5nLAp2YWx1ZTpudWxsLG5vdGlmeTohMH0sX2hpZ2hsaWdodE5vZGVOYW1lOnt0eXBlOlN0cmluZyx2YWx1ZTpudWxsfSxfY29udGludWVUb1R5cGU6e3R5cGU6U3RyaW5nLHZhbHVlOiIifSxfY29udGludWVUb0NvdW50ZXI6e3R5cGU6TnVtYmVyLHZhbHVlOjB9LF9jb250aW51ZVN0b3A6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sX2NvbnRpbnVlVG9UYXJnZXQ6e3R5cGU6U3RyaW5nLHZhbHVlOiIifSxfY29udGludWVUb0NvdW50ZXJUYXJnZXQ6e3R5cGU6TnVtYmVyLHZhbHVlOi0xfSxfZm9yY2VFeHBhbmRBbmRDaGVja05vZGVOYW1lOlN0cmluZyxfZm9yY2VFeHBhbmROb2RlTmFtZTpTdHJpbmcsX3NvdXJjZUZvY3VzTm9kZU5hbWU6U3RyaW5nLF9zb3VyY2VDb2RlU2hvd246e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxvYnNlcnZlcjoiX3Nob3dTb3VyY2VDb2RlQ2hhbmdlZCJ9LF9ncmFwaFByb2dyZXNzOnt0eXBlOk9iamVjdH0sX3JlcXVlc3RNYW5hZ2VyOnt0eXBlOk9iamVjdCx2YWx1ZTooKT0+Cm5ldyBQay5SZXF1ZXN0TWFuYWdlcig1MCl9LF9idXN5Ont0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LF9sZWZ0UGFuZVdpZHRoOnt0eXBlOk51bWJlcix2YWx1ZTpWbC5nZXROdW1iZXJJbml0aWFsaXplcigiX2xlZnRQYW5lV2lkdGgiLHtkZWZhdWx0VmFsdWU6NDUwfSksb2JzZXJ2ZXI6Il9sZWZ0UGFuZVdpZHRoT2JzZXJ2ZXIifSxfbWlubGVmdFBhbmVXaWR0aDp7dHlwZTpOdW1iZXIsdmFsdWU6NDUwLHJlYWRPbmx5OiEwfSxfbWF4bGVmdFBhbmVXaWR0aDp7dHlwZTpOdW1iZXIsY29tcHV0ZWQ6Il9jb21wdXRlTWF4bGVmdFBhbmVXaWR0aChfd2luZG93V2lkdGgsIF9tYXhNYWluQ29udGVudFdpZHRoLCBfcmVzaXplcldpZHRoKSJ9LF9tYXhNYWluQ29udGVudFdpZHRoOnt0eXBlOk51bWJlcix2YWx1ZTozNTAscmVhZE9ubHk6ITB9LF90b3BSaWdodFF1YWRyYW50SGVpZ2h0Ont0eXBlOk51bWJlcix2YWx1ZTpWbC5nZXROdW1iZXJJbml0aWFsaXplcigiX3RvcFJpZ2h0UXVhZHJhbnRIZWlnaHQiLAp7ZGVmYXVsdFZhbHVlOm5tfSksb2JzZXJ2ZXI6Il90b3BSaWdodFF1YWRyYW50SGVpZ2h0T2JzZXJ2ZXIifSxfbWluVG9wUmlnaHRRdWFkcmFudEhlaWdodDp7dHlwZTpOdW1iZXIsdmFsdWU6MjAwLHJlYWRPbmx5OiEwfSxfbWF4VG9wUmlnaHRRdWFkcmFudEhlaWdodDp7dHlwZTpOdW1iZXIsY29tcHV0ZWQ6Il9jb21wdXRlTWF4VG9wUmlnaHRRdWFkcmFudEhlaWdodChfd2luZG93SGVpZ2h0LCBfcmVzaXplcldpZHRoKSJ9LF9yZXNpemVyV2lkdGg6e3R5cGU6TnVtYmVyLHZhbHVlOjMwLHJlYWRPbmx5OiEwfSxfd2luZG93V2lkdGg6TnVtYmVyLF93aW5kb3dIZWlnaHQ6TnVtYmVyLF9kZWJ1Z1dhdGNoZXM6QXJyYXksX2xhdGVzdFNlc3Npb25SdW46T2JqZWN0fSxvYnNlcnZlcnM6WyJfb25BY3RpdmVSdW50aW1lR3JhcGhEZXZpY2VOYW1lQ2hhbmdlKF9hY3RpdmVSdW50aW1lR3JhcGhEZXZpY2VOYW1lKSIsIl9zaXplRGFzaGJvYXJkUmVnaW9ucyhfbGVmdFBhbmVXaWR0aCwgX3RvcFJpZ2h0UXVhZHJhbnRIZWlnaHQsIF93aW5kb3dXaWR0aCkiLAoiX2dyYXBoUHJvZ3Jlc3NVcGRhdGVkKF9ncmFwaFByb2dyZXNzKSJdLHJlYWR5KCl7dGhpcy5faGFuZGxlV2luZG93UmVzaXplKCk7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsKCk9Pnt0aGlzLl9oYW5kbGVXaW5kb3dSZXNpemUoKX0sITEpO3RoaXMucmVsb2FkKCl9LGxvbmdfcG9sbCgpe2NvbnN0IGE9e3BvczorK3RoaXMuX2xvbmdQb2xsQ291bnR9O2xldCBjPVBrLmdldFJvdXRlcigpLnBsdWdpblJvdXRlKCJkZWJ1Z2dlciIsIi9jb21tIik7Yz1Qay5hZGRQYXJhbXMoYyxhKTt0aGlzLl9yZXF1ZXN0TWFuYWdlci5yZXF1ZXN0KGMpLnRoZW4oZD0+e2NvbnN0IGY9ZC50eXBlO2Q9ZC5kYXRhO2lmKCJtZXRhIj09PWYpe3ZhciBnPWQucnVuX2tleSxsPWdbMF0uc3BsaXQoIiwiKSxrPWdbMV0uc3BsaXQoIiwiKTtjb25zdCBwPWdbMl0uc3BsaXQoIiwiKTt2YXIgbT10aGlzLl9hY3RpdmVTZXNzaW9uUnVuS2V5O3RoaXMuc2V0KCJfYWN0aXZlU2Vzc2lvblJ1bktleSIsCmcpO3RoaXMuc2V0KCJfbGF0ZXN0U2Vzc2lvblJ1biIse2ZlZWRzOmwsZmV0Y2hlczprLHRhcmdldHM6cH0pO3RoaXMuc2V0KCJfc2Vzc2lvblJ1blNvbGVBY3RpdmUiLCEwKTt2b2lkIDA9PT10aGlzLl9zZXNzaW9uUnVuS2V5MkRldmljZU5hbWVzW2ddPyh0aGlzLl9zZXNzaW9uUnVuS2V5MkRldmljZU5hbWVzW2ddPVtdLHRoaXMuc2V0KCJfYWN0aXZlU2Vzc2lvblJ1bkRldmljZXMiLFtdKSk6dGhpcy5zZXQoIl9hY3RpdmVTZXNzaW9uUnVuRGV2aWNlcyIsdGhpcy5fc2Vzc2lvblJ1bktleTJEZXZpY2VOYW1lc1tnXSk7dGhpcy5fY3VycmVudFNlc3Npb25SdW5JbmZvPWw9IkZlZWRzOiAiK2wrIjsgRmV0Y2hlczogIitrKyI7IFRhcmdldHM6ICIrcDt0aGlzLl9zZXNzaW9uUnVuQ291bnRlcnMuaGFzT3duUHJvcGVydHkobCk/dGhpcy5fc2Vzc2lvblJ1bkNvdW50ZXJzW2xdKz0xOnRoaXMuX3Nlc3Npb25SdW5Db3VudGVyc1tsXT0xO3RoaXMuX3Nlc3Npb25SdW5Ub3RhbENvdW50ZXIrKzsKdGhpcy4kLmluaXRpYWxEaWFsb2cuY2xvc2VEaWFsb2coKTt0aGlzLl9jb250aW51ZVRvVHlwZSYmXy5pc0VxdWFsKG0sZyl8fCh0aGlzLl9wcm9jZXNzR2F0ZWRHcnBjRGVidWdPcHMoZywhMSksdGhpcy5fYW5ub3VuY2VOZXdTZXNzaW9uUnVuKCkpfWVsc2UidGVuc29yIj09PWY/KGc9ZC5kZXZpY2VfbmFtZSxtPWQubm9kZV9uYW1lLGw9ZC5tYXliZV9iYXNlX2V4cGFuZGVkX25vZGVfbmFtZSx0aGlzLl9hY3RpdmVSdW50aW1lR3JhcGhEZXZpY2VOYW1lIT1nP3RoaXMuc2V0KCJfYWN0aXZlUnVudGltZUdyYXBoRGV2aWNlTmFtZSIsZyk6IXRoaXMuX2NvbnRpbnVlVG9UeXBlJiZ0aGlzLl9pc1RvcFJpZ2h0UnVudGltZUdyYXBoc0FjdGl2ZSYmKHRoaXMuX2ZvY3VzT25HcmFwaE5vZGUoZyxsKSx0aGlzLnNldCgiX2ZvcmNlRXhwYW5kTm9kZU5hbWUiLGcrIi8iK2wpKSx0aGlzLnNldCgiX3Nlc3Npb25SdW5Tb2xlQWN0aXZlIiwhMSksaz1tKyI6IitkLm91dHB1dF9zbG90LHRoaXMuc2V0KCJfbGF0ZXN0VGVuc29yRGF0YSIsCntkZXZpY2VOYW1lOmcsdGVuc29yTmFtZTprLG5vZGVOYW1lOm0sbWF5YmVCYXNlRXhwYW5kZWROb2RlTmFtZTpsLGRlYnVnT3A6ZC5kZWJ1Z19vcCxkdHlwZTpkLmR0eXBlLHNoYXBlOmQuc2hhcGUsdmFsdWU6ZC52YWx1ZXN9KSx0aGlzLl9tYXliZVVwZGF0ZVRlbnNvclZhbHVlVmlld3MoayxkLmRlYnVnX29wKSx0aGlzLnNldCgiX2J1c3kiLCExKSk6Y29uc29sZS5lcnJvcigiSW52YWxpZCBsb25nLXBvbGxpbmcgcmVzcG9uc2UgdHlwZTogIixmKTtudWxsIT10aGlzLl9jb250aW51ZVRvVHlwZSYmdGhpcy5fcHJvY2Vzc0NvbnRpbnVlVG8oZixkKTt0aGlzLmxvbmdfcG9sbCgpfSl9LF9wcm9jZXNzQ29udGludWVUbyhhLGMpe3RoaXMuX2NvbnRpbnVlU3RvcD90aGlzLl9jbGVhckNvbnRpbnVlVG8oKToiU2Vzc2lvblJ1biI9PT10aGlzLl9jb250aW51ZVRvVHlwZT90aGlzLl9wcm9jZXNzQ29udGludWVUb1Nlc3Npb25SdW4oIm1ldGEiPT09YSk6IlRlbnNvckNvbmRpdGlvbiI9PT0KdGhpcy5fY29udGludWVUb1R5cGU/dGhpcy5fc3RlcCgpOiJvcCI9PT10aGlzLl9jb250aW51ZVRvVHlwZT90aGlzLl9wcm9jZXNzQ29udGludWVUb09wKCJtZXRhIj09PWEsYyk6bnVsbCE9dGhpcy5fY29udGludWVUb1R5cGUmJiIiIT09dGhpcy5fY29udGludWVUb1R5cGUmJmNvbnNvbGUuZXJyb3IoIkludmFsaWQgX2NvbnRpbnVlVG9UeXBlOiIsdGhpcy5fY29udGludWVUb1R5cGUpfSxfcHJvY2Vzc0NvbnRpbnVlVG9TZXNzaW9uUnVuKGEpe2EmJnRoaXMuc2V0KCJfY29udGludWVUb0NvdW50ZXIiLHRoaXMuX2NvbnRpbnVlVG9Db3VudGVyKzEpO3RoaXMuX2NvbnRpbnVlVG9Db3VudGVyPHRoaXMuX2NvbnRpbnVlVG9Db3VudGVyVGFyZ2V0P3RoaXMuX3N0ZXAoKTp0aGlzLl9jbGVhckNvbnRpbnVlVG8oKX0sX3Byb2Nlc3NDb250aW51ZVRvT3AoYSxjKXthJiZ0aGlzLl9hbm5vdW5jZU5ld1Nlc3Npb25SdW4oKTthPWMuZGV2aWNlX25hbWU7Yz1jLm1heWJlX2Jhc2VfZXhwYW5kZWRfbm9kZV9uYW1lOwpjb25zdCBkPW51bGw9PWM/bnVsbDppbS5yZW1vdmVOb2RlTmFtZUJhc2VFeHBhbnNpb24oYyk7YSsiLyIrYz09PXRoaXMuX2NvbnRpbnVlVG9UYXJnZXR8fGErIi8iK2Q9PT10aGlzLl9jb250aW51ZVRvVGFyZ2V0Pyh0aGlzLl9jbGVhckNvbnRpbnVlVG8oKSx0aGlzLl9zb3VyY2VDb2RlU2hvd24mJnRoaXMuc2V0KCJfc291cmNlRm9jdXNOb2RlTmFtZSIsZCkpOnRoaXMuX3N0ZXAoKX0sX21heWJlVXBkYXRlVGVuc29yVmFsdWVWaWV3cyhhLGMpe2NvbnN0IGQ9dGhpcy4kJCgiI3RlbnNvclZhbHVlTXVsdGlWaWV3Iik7aWYobnVsbCE9ZCl7dmFyIGY9ITE7Xy5mb3JFYWNoKGQuZ2V0Vmlld3MoKSxnPT57aWYoZy50ZW5zb3JOYW1lPT09YSYmZy5kZWJ1Z09wPT09YylyZXR1cm4gZj0hMCwhMX0pO2YmJmQucmVuZGVyVGVuc29yVmFsdWVzKCl9fSxyZWxvYWQoKXtpZighdGhpcy5hbHJlYWR5U3RhcnRlZCl7dGhpcy5zZXQoImFscmVhZHlTdGFydGVkIiwhMCk7dmFyIGE9UGsuZ2V0Um91dGVyKCkucGx1Z2luUm91dGUoImRlYnVnZ2VyIiwKIi9kZWJ1Z2dlcl9ncnBjX2hvc3RfcG9ydCIpO3RoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3QoYSkudGhlbihjPT57MDxjLnBvcnQ/KHRoaXMuJC5pbml0aWFsRGlhbG9nLm9wZW5EaWFsb2coYy5ob3N0LGMucG9ydCksdGhpcy5sb25nX3BvbGwoKSk6dGhpcy4kLmluaXRpYWxEaWFsb2cub3BlbkRpc2FibGVkRGlhbG9nKCl9KX19LF9zaG93U291cmNlQ29kZUNoYW5nZWQoKXt0aGlzLl9zb3VyY2VDb2RlU2hvd24/KHRoaXMuJCQoIiNub2RlLWVudHJpZXMiKS5zdHlsZS5oZWlnaHQ9IjQwJSIsdGhpcy4kLnNvdXJjZUNvZGVWaWV3LnJlbmRlcigpKTp0aGlzLiQkKCIjbm9kZS1lbnRyaWVzIikuc3R5bGUuaGVpZ2h0PSI4MCUifSxfc2hvd1RvYXN0KGEpe3RoaXMuJC50b2FzdC5zZXRBdHRyaWJ1dGUoInRleHQiLGEpO3RoaXMuJC50b2FzdC5vcGVuKCl9LF9hbm5vdW5jZU5ld1Nlc3Npb25SdW4oKXt0aGlzLl9zaG93VG9hc3QoIlNlc3Npb24ucnVuKCkgIyIrdGhpcy5fc2Vzc2lvblJ1blRvdGFsQ291bnRlcisKIiBpcyBzdGFydGluZy4iKX0sX2Rpc3BsYXlHcmFwaChhLGMpe2E9e3J1bl9rZXk6SlNPTi5zdHJpbmdpZnkoYSksZGV2aWNlX25hbWU6Y307YT1Qay5hZGRQYXJhbXMoIi9kYXRhL3BsdWdpbi9kZWJ1Z2dlci9kZWJ1Z2dlcl9ncmFwaCIsYSk7dGhpcy4kLmxvYWRlci5kYXRhc2V0cz1be25hbWU6Ii9kZWJ1Z2dlcl9ncmFwaCIscGF0aDphfV07dGhpcy4kLmxvYWRlci5zZXQoInNlbGVjdGVkRGF0YXNldCIsMCl9LF9wcm9jZXNzR2F0ZWRHcnBjRGVidWdPcHMoYSxjKXtjP2NvbnNvbGUubG9nKCJQb2xsaW5nIGZvciBmaXJzdCBHcmFwaERlZiBmb3IgcnVuIGtleToiLGEpOnRoaXMuc2V0KCJfYWN0aXZlUnVudGltZUdyYXBoRGV2aWNlTmFtZSIsbnVsbCk7dmFyIGQ9e21vZGU6InJldHJpZXZlX2FsbCIscnVuX2tleTpKU09OLnN0cmluZ2lmeShhKX07Y29uc3QgZj1Qay5nZXRSb3V0ZXIoKS5wbHVnaW5Sb3V0ZSgiZGVidWdnZXIiLCIvZ2F0ZWRfZ3JwYyIpO2Q9UGsuYWRkUGFyYW1zKGYsCmQpO2xldCBnPVtdO3RoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3QoZCkudGhlbihsPT57aWYoMD09bC5kZXZpY2VfbmFtZXMubGVuZ3RoKWN8fHRoaXMuX3N0ZXAoKSx0aGlzLl9wcm9jZXNzR2F0ZWRHcnBjRGVidWdPcHMoYSwhMCk7ZWxzZXt2YXIgaz1udWxsO2Zvcihjb25zdCBtIGluIGwuZ2F0ZWRfZ3JwY190ZW5zb3JzKWlmKGwuZ2F0ZWRfZ3JwY190ZW5zb3JzLmhhc093blByb3BlcnR5KG0pKXstMT09PXRoaXMuX3Nlc3Npb25SdW5LZXkyRGV2aWNlTmFtZXNbYV0uaW5kZXhPZihtKSYmKHRoaXMuX3Nlc3Npb25SdW5LZXkyRGV2aWNlTmFtZXNbYV0ucHVzaChtKSx0aGlzLiQuc2Vzc2lvblJ1bnNWaWV3LnVwZGF0ZU51bURldmljZXModGhpcy5fc2Vzc2lvblJ1bktleTJEZXZpY2VOYW1lc1thXS5sZW5ndGgpKTt0aGlzLnNldCgiX2FjdGl2ZVNlc3Npb25SdW5EZXZpY2VzIix0aGlzLl9zZXNzaW9uUnVuS2V5MkRldmljZU5hbWVzW2FdLnNsaWNlKCkpO2s9dGhpcy5fYWN0aXZlU2Vzc2lvblJ1bkRldmljZXNbdGhpcy5fYWN0aXZlU2Vzc2lvblJ1bkRldmljZXMubGVuZ3RoLQoxXTtjb25zdCBwPWwuZ2F0ZWRfZ3JwY190ZW5zb3JzW21dO2ZvcihsZXQgcT0wO3E8cC5sZW5ndGg7KytxKWcucHVzaCh7ZGV2aWNlX25hbWU6bSxub2RlX25hbWU6cFtxXVswXSxvcF90eXBlOnBbcV1bMV0sb3V0cHV0X3Nsb3Q6cFtxXVsyXSxkZWJ1Z19vcDpwW3FdWzNdfSl9bnVsbCE9ayYmKHRoaXMuc2V0KCJfYWN0aXZlUnVudGltZUdyYXBoRGV2aWNlTmFtZSIsayksbD1Qb2x5bWVyLmRvbSh0aGlzLiQkKCIjYWN0aXZlLXJ1bnRpbWUtZ3JhcGgtZGV2aWNlLW5hbWUiKSksbnVsbCE9bCYmbC5zZXRBdHRyaWJ1dGUoInNlbGVjdGVkIixrKSk7aW0uc29ydEFuZEJhc2VFeHBhbmREZWJ1Z1dhdGNoZXMoZyk7dGhpcy5zZXQoIl9kZWJ1Z1dhdGNoZXMiLGcpO3RoaXMuJC5zb3VyY2VDb2RlVmlldy5yZW5kZXIoZyl9fSl9LF9jcmVhdGVEZWJ1Z1dhdGNoQ2hhbmdlSGFuZGxlcigpe3JldHVybihhLGMpPT57Yz1jPyJicmVhayI6ImRpc2FibGUiO3RoaXMuX3JlcXVlc3RCcmVha3BvaW50U3RhdGVDaGFuZ2UoaW0uZ2V0Q2xlYW5Ob2RlTmFtZShhLmRldmljZV9uYW1lKwoiLyIrYS5ub2RlX25hbWUpLGEub3V0cHV0X3Nsb3QsYS5kZWJ1Z19vcCxjKX19LF9mb2N1c09uR3JhcGhOb2RlKGEsYyl7bnVsbCE9YSYmdGhpcy5fYWN0aXZlUnVudGltZUdyYXBoRGV2aWNlTmFtZSE9PWEmJnRoaXMuc2V0KCJfYWN0aXZlUnVudGltZUdyYXBoRGV2aWNlTmFtZSIsYSk7dGhpcy5fc2V0VG9wUmlnaHRSdW50aW1lR3JhcGhzVG9BY3RpdmUoKTtjb25zdCBkPXRoaXMuJCQoIiNncmFwaCIpO2lmKGQuc2VsZWN0ZWROb2RlPT09YylkLnBhblRvTm9kZShjKTtlbHNle2NvbnN0IGY9ZC5nZXQoInJlbmRlckhpZXJhcmNoeSIpLmhpZXJhcmNoeS5nZXROb2RlTWFwKCk7bnVsbD09ZltjXSYmKGM9aW0ucmVtb3ZlTm9kZU5hbWVCYXNlRXhwYW5zaW9uKGMpKTtudWxsIT1mW2NdJiZkLnNldCgic2VsZWN0ZWROb2RlIixjKX10aGlzLnNldCgiX2hpZ2hsaWdodE5vZGVOYW1lIixhKyIvIitjKX0sX2NyZWF0ZU5vZGVDbGlja2VkSGFuZGxlcigpe3JldHVybihhLGMsZCk9Pnt0aGlzLl9zb3VyY2VDb2RlU2hvd24mJgohMCE9PWQmJnRoaXMuc2V0KCJfc291cmNlRm9jdXNOb2RlTmFtZSIsaW0ucmVtb3ZlTm9kZU5hbWVCYXNlRXhwYW5zaW9uKGMpKTt0aGlzLl9mb2N1c09uR3JhcGhOb2RlKGEsYyk7dGhpcy5zZXQoIl9mb3JjZUV4cGFuZE5vZGVOYW1lIixhKyIvIitjKX19LF9jcmVhdGVGZWVkRmV0Y2hUYXJnZXRDbGlja2VkSGFuZGxlcigpe3JldHVybiBhPT57bGV0IGM9YTstMSE9PWMuaW5kZXhPZigiOiIpJiYoYz1jLnNsaWNlKDAsYy5pbmRleE9mKCI6IikpKTthPV8uZmluZCh0aGlzLl9kZWJ1Z1dhdGNoZXMsZD0+ZC5ub2RlX25hbWU9PT1jfHwwPT09ZC5ub2RlX25hbWUuaW5kZXhPZihjKSYmIigiPT09ZC5ub2RlX25hbWVbYy5sZW5ndGhdKTtudWxsPT1hP3RoaXMuX3Nob3dUb2FzdCgiTm9kZSAnIitjKyInIGlzIG5vdCBpbiB0aGUgcnVudGltZSBncmFwaCBvZiB0aGUgY3VycmVudCBTZXNzaW9uLnJ1biBvciBkb2VzIG5vdCBoYXZlIGEgZGVidWcgb3AgYXR0YWNoZWQuIik6dGhpcy5fZm9jdXNPbkdyYXBoTm9kZShhLmRldmljZV9uYW1lLApjKX19LF9jcmVhdGVUZW5zb3JEYXRhRXhwYW5kSGFuZGxlcigpe3JldHVybiBhPT57dGhpcy5fc2V0VG9wUmlnaHRUZW5zb3JWYWx1ZXNUb0FjdGl2ZSgpO3NldFRpbWVvdXQoKCk9Pnt0aGlzLiQkKCIjdGVuc29yVmFsdWVNdWx0aVZpZXciKS5hZGRWaWV3KHt2aWV3SWQ6dGhpcy5fY3JlYXRlVGVuc29yVmlld0lkKCksZGV2aWNlTmFtZTphLmRldmljZU5hbWUsdGVuc29yTmFtZTphLnRlbnNvck5hbWUsbm9kZU5hbWU6YS5ub2RlTmFtZSxtYXliZUJhc2VFeHBhbmRlZE5vZGVOYW1lOmEubWF5YmVCYXNlRXhwYW5kZWROb2RlTmFtZSxkZWJ1Z09wOmEuZGVidWdPcCxkdHlwZTphLmR0eXBlLHNoYXBlOmEuc2hhcGUsc2xpY2luZzppbS5nZXREZWZhdWx0U2xpY2luZyhhLnNoYXBlKSx0aW1lSW5kaWNlczoiLTEifSl9LDEwKX19LF9jcmVhdGVUZW5zb3JWaWV3SWQoKXtjb25zdCBhPSJkZWJ1Z2dlci10ZW5zb3Itdmlldy0iK3RoaXMuX3RlbnNvclZpZXdJZENvdW50ZXI7dGhpcy5fdGVuc29yVmlld0lkQ291bnRlcisrOwpyZXR1cm4gYX0sX2NyZWF0ZU5vZGVDb250ZXh0TWVudUl0ZW1zKCl7cmV0dXJuW3t0aXRsZTooKT0+IkV4cGFuZCBhbmQgaGlnaGxpZ2h0IixhY3Rpb246YT0+e2NvbnN0IGM9aW0uZ2V0Q2xlYW5Ob2RlTmFtZShhLm5vZGUubmFtZSk7YT10aGlzLl9hY3RpdmVSdW50aW1lR3JhcGhEZXZpY2VOYW1lKyIvIithLm5vZGUubmFtZTt0aGlzLnNldCgiX2ZvcmNlRXhwYW5kTm9kZU5hbWUiLGEpO3RoaXMuc2V0KCJfaGlnaGxpZ2h0Tm9kZU5hbWUiLGEpO3RoaXMuX3NvdXJjZUNvZGVTaG93biYmdGhpcy5zZXQoIl9zb3VyY2VGb2N1c05vZGVOYW1lIixpbS5yZW1vdmVOb2RlTmFtZUJhc2VFeHBhbnNpb24oYykpfX0se3RpdGxlOigpPT4iQWRkIGJyZWFrcG9pbnQiLGFjdGlvbjphPT57Y29uc3QgYz1pbS5nZXRDbGVhbk5vZGVOYW1lKGEubm9kZS5uYW1lKTt0aGlzLnNldCgiX2ZvcmNlRXhwYW5kQW5kQ2hlY2tOb2RlTmFtZSIsdGhpcy5fYWN0aXZlUnVudGltZUdyYXBoRGV2aWNlTmFtZSsKIi8iK2Eubm9kZS5uYW1lKTt0aGlzLl9zb3VyY2VDb2RlU2hvd24mJnRoaXMuc2V0KCJfc291cmNlRm9jdXNOb2RlTmFtZSIsaW0ucmVtb3ZlTm9kZU5hbWVCYXNlRXhwYW5zaW9uKGMpKX19LHt0aXRsZTooKT0+IkNvbnRpbnVlIHRvIixhY3Rpb246YT0+ey0xIT09WyJfQXJnIiwiX1JldHZhbCJdLmluZGV4T2YoYS5ub2RlLm9wKT90aGlzLl9zaG93VG9hc3QoJ0Nhbm5vdCBjb250aW51ZSB0byBub2RlICInK2Eubm9kZS5uYW1lKyciLCBkdWUgdG8gb3AgdHlwZSAiJythLm5vZGUub3ArJyIuJyk6dGhpcy5fY29udGludWVUb05vZGUodGhpcy5fYWN0aXZlUnVudGltZUdyYXBoRGV2aWNlTmFtZSxhLm5vZGUubmFtZSl9fV19LF9jcmVhdGVHZXRIZWFsdGhQaWxsKCl7cmV0dXJuKGEsYyxkLGYpPT57dmFyIGc9e3dhdGNoX2tleTphLHRpbWVfaW5kaWNlczoiLTEiLG1hcHBpbmc6ImhlYWx0aC1waWxsIn07Y29uc3QgbD1Qay5nZXRSb3V0ZXIoKS5wbHVnaW5Sb3V0ZSgiZGVidWdnZXIiLAoiL3RlbnNvcl9kYXRhIik7Zz1Qay5hZGRQYXJhbXMobCxnKTt0aGlzLl9yZXF1ZXN0TWFuYWdlci5yZXF1ZXN0KGcpLnRoZW4oaz0+e2s9ay50ZW5zb3JfZGF0YVswXTtmKGspO3RoaXMuX2NvbmRpdGlvbmFsSGVhbHRoUGlsbFN0b3AoYSxjLGQsayl9KX19LF9jb25kaXRpb25hbEhlYWx0aFBpbGxTdG9wKGEsYyxkLGYpe2lmKCJUZW5zb3JDb25kaXRpb24iPT09dGhpcy5fY29udGludWVUb1R5cGUmJmltLmNoZWNrSGVhbHRoUGlsbEFnYWluc3RUZW5zb3JDb25kaXRpb25LZXkodGhpcy5fY29udGludWVUb1RhcmdldCxmLHRoaXMuX2NvbnRpbnVlVG9Db3VudGVyVGFyZ2V0KSl7dGhpcy5zZXQoIl9jb250aW51ZVN0b3AiLCEwKTtmPWltLnJlbW92ZU5vZGVOYW1lQmFzZUV4cGFuc2lvbihkKTt0aGlzLl9zb3VyY2VDb2RlU2hvd24mJnRoaXMuc2V0KCJfc291cmNlRm9jdXNOb2RlTmFtZSIsZik7dGhpcy5fZm9jdXNPbkdyYXBoTm9kZShjLGQpO2NvbnN0IGc9YysiLyIrZDt0aGlzLnNldCgiX2ZvcmNlRXhwYW5kTm9kZU5hbWUiLApnKTtzZXRUaW1lb3V0KCgpPT57dGhpcy5zZXQoIl9oaWdobGlnaHROb2RlTmFtZSIsbnVsbCk7dGhpcy5zZXQoIl9oaWdobGlnaHROb2RlTmFtZSIsZyl9LDEwMCk7dGhpcy5fc2hvd1RvYXN0KCdUZW5zb3IgY29uZGl0aW9uICInK3RoaXMuX2NvbnRpbnVlVG9UYXJnZXQrJyIgaXMgbWV0IGJ5IHdhdGNoIGtleTogIicrYSsnIi5cblN0b3BwaW5nIGNvbnRpbnVhdGlvbi4nKX19LF9jb250aW51ZVRvTm9kZShhLGMpe2NvbnN0IGQ9aW0uZ2V0Q2xlYW5Ob2RlTmFtZShjKTthPWErIi8iK2M7dGhpcy5fcmVxdWVzdEJyZWFrcG9pbnRTdGF0ZUNoYW5nZShkLDAsIkRlYnVnSWRlbnRpdHkiLCJicmVhayIpO3RoaXMuc2V0KCJfZm9yY2VFeHBhbmRBbmRDaGVja05vZGVOYW1lIixhKTt0aGlzLl9zb3VyY2VDb2RlU2hvd24mJnRoaXMuc2V0KCJfc291cmNlRm9jdXNOb2RlTmFtZSIsaW0ucmVtb3ZlTm9kZU5hbWVCYXNlRXhwYW5zaW9uKGQpKTt0aGlzLl9zZXRDb250aW51ZVRvKCJvcCIsYSk7CnRoaXMuJC5jb250aW51ZURpYWxvZy51cGRhdGVDb250aW51ZUJ1dHRvblRleHQoITApO3RoaXMuX3N0ZXAoKX0sX2NyZWF0ZUNvbnRpbnVlVG9Ob2RlSGFuZGxlcigpe3JldHVybihhLGMpPT57dGhpcy5fY29udGludWVUb05vZGUoYSxjKX19LF9vbkFjdGl2ZVJ1bnRpbWVHcmFwaERldmljZU5hbWVDaGFuZ2UoYSl7Y29uc3QgYz1Qb2x5bWVyLmRvbSh0aGlzLiQkKCIjcnVudGltZS1ncmFwaC1kZXZpY2UtbmFtZSIpKTtpZigwPHRoaXMuX2FjdGl2ZVNlc3Npb25SdW5EZXZpY2VzLmxlbmd0aCl7bGV0IGQ7ZD1hKygiIChkZXZpY2UgIisodGhpcy5fYWN0aXZlU2Vzc2lvblJ1bkRldmljZXMuaW5kZXhPZihhKSsxKSsiIG9mICIrdGhpcy5fYWN0aXZlU2Vzc2lvblJ1bkRldmljZXMubGVuZ3RoKyIpIik7dGhpcy5faXNUb3BSaWdodFJ1bnRpbWVHcmFwaHNBY3RpdmUmJm51bGwhPWMmJihjLnRleHRDb250ZW50PWQpfWVsc2UgdGhpcy5faXNUb3BSaWdodFJ1bnRpbWVHcmFwaHNBY3RpdmUmJgpudWxsIT1jJiYoYy50ZXh0Q29udGVudD0iV2FpdGluZyBmb3IgZGV2aWNlLi4uIik7bnVsbCE9YSYmdGhpcy5fZGlzcGxheUdyYXBoKHRoaXMuX2FjdGl2ZVNlc3Npb25SdW5LZXksYSl9LF9zdGVwKCl7aWYobnVsbCE9dGhpcy5fYWN0aXZlU2Vzc2lvblJ1bktleSl7dGhpcy5zZXQoIl9idXN5IiwhMCk7dmFyIGE9e21vZGU6InJldHJpZXZlX2RldmljZV9uYW1lcyIscnVuX2tleTpKU09OLnN0cmluZ2lmeSh0aGlzLl9hY3RpdmVTZXNzaW9uUnVuS2V5KX0sYz1Qay5nZXRSb3V0ZXIoKS5wbHVnaW5Sb3V0ZSgiZGVidWdnZXIiLCIvZ2F0ZWRfZ3JwYyIpO2E9UGsuYWRkUGFyYW1zKGMsYSk7dGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdChhKS50aGVuKGQ9PntsZXQgZj0hMTtmb3IobGV0IGc9MDtnPGQuZGV2aWNlX25hbWVzLmxlbmd0aDsrK2cpaWYoLTE9PT10aGlzLl9hY3RpdmVTZXNzaW9uUnVuRGV2aWNlcy5pbmRleE9mKGQuZGV2aWNlX25hbWVzW2ddKSl7Zj0hMDticmVha31kPQpQay5nZXRSb3V0ZXIoKS5wbHVnaW5Sb3V0ZSgiZGVidWdnZXIiLCIvYWNrIik7dGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdChkKS50aGVuKCgpPT57ZiYmdGhpcy5fcHJvY2Vzc0dhdGVkR3JwY0RlYnVnT3BzKHRoaXMuX2FjdGl2ZVNlc3Npb25SdW5LZXksITEpfSl9KX19LF9jcmVhdGVTZXNzaW9uUnVuR28oKXtyZXR1cm4gYT0+e3RoaXMuX3NldENvbnRpbnVlVG8oIlNlc3Npb25SdW4iLHRoaXMuX2N1cnJlbnRTZXNzaW9uUnVuSW5mbyxhKTt0aGlzLl9zdGVwKCl9fSxfY3JlYXRlVGVuc29yQ29uZGl0aW9uR28oKXtyZXR1cm4oYSxjKT0+e3RoaXMuX3NldENvbnRpbnVlVG8oIlRlbnNvckNvbmRpdGlvbiIsYSxjKTt0aGlzLiQudGVuc29yRGF0YVN1bW1hcnkuZW5hYmxlSGVhbHRoUGlsbHMoKTt0aGlzLl9zdGVwKCl9fSxfY3JlYXRlRm9yY2VDb250aW51YXRpb25TdG9wKCl7cmV0dXJuKCk9Pnt0aGlzLl9zaG93VG9hc3QoJ0NvbnRpbnVhdGlvbiBvZiB0eXBlICInK3RoaXMuX2NvbnRpbnVlVG9UeXBlKwonIiB3YXMgaW50ZXJydXB0ZWQgYnkgdXNlci4nKTt0aGlzLnNldCgiX2NvbnRpbnVlU3RvcCIsITApfX0sX3NldENvbnRpbnVlVG8oYSxjLGQ9LTEpe3RoaXMuX2NvbnRpbnVlVG9UeXBlPWE7dGhpcy5fY29udGludWVUb1RhcmdldD1jO3RoaXMuX2NvbnRpbnVlVG9Db3VudGVyVGFyZ2V0PWQ7dGhpcy5fY29udGludWVUb0NvdW50ZXI9MDt0aGlzLl9jb250aW51ZVN0b3A9ITF9LF9jbGVhckNvbnRpbnVlVG8oKXt0aGlzLiQuY29udGludWVEaWFsb2cubm90aWZ5Q29udGludWF0aW9uU3RvcCgpO3RoaXMuX2NvbnRpbnVlVG9UYXJnZXQ9dGhpcy5fY29udGludWVUb1R5cGU9IiI7dGhpcy5fY29udGludWVUb0NvdW50ZXJUYXJnZXQ9LTE7dGhpcy5fY29udGludWVUb0NvdW50ZXI9MDt0aGlzLl9jb250aW51ZVN0b3A9ITE7dGhpcy5zZXQoIl9idXN5IiwhMSl9LF9jcmVhdGVDb250aW51ZVRvQ2FsbGJhY2soKXtyZXR1cm4oYSxjKT0+e3RoaXMuX3NldENvbnRpbnVlVG8oIm9wIixhKyIvIisKYyk7dGhpcy5fc3RlcCgpO3RoaXMuX2lzVG9wUmlnaHRSdW50aW1lR3JhcGhzQWN0aXZlJiZ0aGlzLl9mb2N1c09uR3JhcGhOb2RlKGEsYyk7dGhpcy5zZXQoIl9mb3JjZUV4cGFuZE5vZGVOYW1lIixhKyIvIitjKX19LF90b3BSaWdodFNlbGVjdGVkQ2hhbmdlZChhKXthPXRoaXMuX3RvcFJpZ2h0VGFic1thXS5pZDt0aGlzLnNldCgiX2lzVG9wUmlnaHRSdW50aW1lR3JhcGhzQWN0aXZlIiwidGFiLXJ1bnRpbWUtZ3JhcGhzIj09PWEpO3RoaXMuc2V0KCJfaXNUb3BSaWdodFRlbnNvclZhbHVlc0FjdGl2ZSIsInRhYi10ZW5zb3ItdmFsdWVzIj09PWEpfSxfc2V0VG9wUmlnaHRSdW50aW1lR3JhcGhzVG9BY3RpdmUoKXt0aGlzLnNldCgiX3RvcFJpZ2h0U2VsZWN0ZWQiLCIwIik7dGhpcy5zZXQoIl9pc1RvcFJpZ2h0UnVudGltZUdyYXBoc0FjdGl2ZSIsITApO3RoaXMuc2V0KCJfaXNUb3BSaWdodFRlbnNvclZhbHVlc0FjdGl2ZSIsITEpfSxfc2V0VG9wUmlnaHRUZW5zb3JWYWx1ZXNUb0FjdGl2ZSgpe3RoaXMuc2V0KCJfdG9wUmlnaHRTZWxlY3RlZCIsCiIxIik7dGhpcy5zZXQoIl9pc1RvcFJpZ2h0UnVudGltZUdyYXBoc0FjdGl2ZSIsITEpO3RoaXMuc2V0KCJfaXNUb3BSaWdodFRlbnNvclZhbHVlc0FjdGl2ZSIsITApfSxfcmVxdWVzdEJyZWFrcG9pbnRTdGF0ZUNoYW5nZShhLGMsZCxmKXthPXttb2RlOiJzZXRfc3RhdGUiLG5vZGVfbmFtZTphLG91dHB1dF9zbG90OmMsZGVidWdfb3A6ZCxzdGF0ZTpmfTtjPVBrLmdldFJvdXRlcigpLnBsdWdpblJvdXRlKCJkZWJ1Z2dlciIsIi9nYXRlZF9ncnBjIik7YT1Qay5hZGRQYXJhbXMoYyxhKTt0aGlzLnNldCgiX2J1c3kiLCEwKTt0aGlzLl9yZXF1ZXN0TWFuYWdlci5yZXF1ZXN0KGEpLnRoZW4oZz0+e3RoaXMuc2V0KCJfYnVzeSIsITEpO2NvbnNvbGUubG9nKCJCcmVha3BvaW50IHNldF9zdGF0ZSByZXNwb25zZTogIixnKX0pfSxfZ3JhcGhQcm9ncmVzc1VwZGF0ZWQoYSl7Y29uc3QgYz10aGlzLiQkKCIjdG9wLXJpZ2h0LXByb2dyZXNzLWJhciIpO251bGw9PXRoaXMuX2xhdGVzdFNlc3Npb25SdW4/CihjLnNldEF0dHJpYnV0ZSgidmFsdWUiLDApLHRoaXMuc2V0KCJfYnVzeSIsITEpKTooYy5zZXRBdHRyaWJ1dGUoInZhbHVlIixhLnZhbHVlKSx0aGlzLnNldCgiX2J1c3kiLDEwMD5hLnZhbHVlKSl9LF9oYW5kbGVXaW5kb3dSZXNpemUoKXt0aGlzLnNldCgiX3dpbmRvd1dpZHRoIixtbSgpKTt0aGlzLnNldCgiX3dpbmRvd0hlaWdodCIsbG0oKSk7dGhpcy5fc2l6ZURhc2hib2FyZFJlZ2lvbnModGhpcy5fbGVmdFBhbmVXaWR0aCx0aGlzLl90b3BSaWdodFF1YWRyYW50SGVpZ2h0LHRoaXMuX3dpbmRvd1dpZHRoKX0sX2NvbXB1dGVNYXhsZWZ0UGFuZVdpZHRoKGEsYyxkKXtyZXR1cm4gYS1jLWR9LF9jb21wdXRlTWF4VG9wUmlnaHRRdWFkcmFudEhlaWdodChhLGMpe3JldHVybiBhLWMtNzB9LF9zaXplRGFzaGJvYXJkUmVnaW9ucyhhLGMsZCl7dGhpcy4kJCgiI2xlZnQtcGFuZSIpLnN0eWxlLndpZHRoPWErInB4IjthPWQtYS10aGlzLl9yZXNpemVyV2lkdGgtODt0aGlzLiQkKCIjY2VudGVyLWNvbnRlbnQiKS5zdHlsZS53aWR0aD0KYSsicHgiO2E9Yy10aGlzLl9yZXNpemVyV2lkdGg7dGhpcy4kJCgiI3RvcC1yaWdodC1xdWFkcmFudCIpLnN0eWxlLmhlaWdodD1hKyJweCI7dGhpcy4kJCgiI3RlbnNvci1kYXRhIikuc3R5bGUudG9wPWMrInB4In0sX2xlZnRQYW5lV2lkdGhPYnNlcnZlcjpWbC5nZXROdW1iZXJPYnNlcnZlcigiX2xlZnRQYW5lV2lkdGgiLHtkZWZhdWx0VmFsdWU6NDUwfSksX3RvcFJpZ2h0UXVhZHJhbnRIZWlnaHRPYnNlcnZlcjpWbC5nZXROdW1iZXJPYnNlcnZlcigiX3RvcFJpZ2h0UXVhZHJhbnRIZWlnaHQiLHtkZWZhdWx0VmFsdWU6bm19KX0pOwo8L3NjcmlwdD4KPC9kb20tbW9kdWxlPgoKCgoKCgoKCgoKCjxkb20tbW9kdWxlIGlkPSJwYXBlci1tYXRlcmlhbC1zaGFyZWQtc3R5bGVzIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KCiAgICAgIDpob3N0KFtlbGV2YXRpb249IjEiXSkgewogICAgICAgIEBhcHBseSAtLXNoYWRvdy1lbGV2YXRpb24tMmRwOwogICAgICB9CgogICAgICA6aG9zdChbZWxldmF0aW9uPSIyIl0pIHsKICAgICAgICBAYXBwbHkgLS1zaGFkb3ctZWxldmF0aW9uLTRkcDsKICAgICAgfQoKICAgICAgOmhvc3QoW2VsZXZhdGlvbj0iMyJdKSB7CiAgICAgICAgQGFwcGx5IC0tc2hhZG93LWVsZXZhdGlvbi02ZHA7CiAgICAgIH0KCiAgICAgIDpob3N0KFtlbGV2YXRpb249IjQiXSkgewogICAgICAgIEBhcHBseSAtLXNoYWRvdy1lbGV2YXRpb24tOGRwOwogICAgICB9CgogICAgICA6aG9zdChbZWxldmF0aW9uPSI1Il0pIHsKICAgICAgICBAYXBwbHkgLS1zaGFkb3ctZWxldmF0aW9uLTE2ZHA7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPgoKCgoKPGRvbS1tb2R1bGUgaWQ9InBhcGVyLW1hdGVyaWFsIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGUgaW5jbHVkZT0icGFwZXItbWF0ZXJpYWwtc2hhcmVkLXN0eWxlcyI+PC9zdHlsZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QoW2FuaW1hdGVkXSkgewogICAgICAgIEBhcHBseSAtLXNoYWRvdy10cmFuc2l0aW9uOwogICAgICB9CiAgICAgIDpob3N0IHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1tYXRlcmlhbDsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8c2xvdD48L3Nsb3Q+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vcGFwZXItbWF0ZXJpYWwvcGFwZXItbWF0ZXJpYWwuaHRtbC5qcwpQb2x5bWVyKHtpczoicGFwZXItbWF0ZXJpYWwiLHByb3BlcnRpZXM6e2VsZXZhdGlvbjp7dHlwZTpOdW1iZXIscmVmbGVjdFRvQXR0cmlidXRlOiEwLHZhbHVlOjF9LGFuaW1hdGVkOnt0eXBlOkJvb2xlYW4scmVmbGVjdFRvQXR0cmlidXRlOiEwLHZhbHVlOiExfX19KTsKPC9zY3JpcHQ+CgoKCgoKCgoKCgoKCjxkb20tbW9kdWxlIGlkPSJ0Zi1ncmFwaC1kZWJ1Z2dlci1kYXRhLWNhcmQiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQoKICAgICAgaDIgewogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIG1hcmdpbjogMDsKICAgICAgfQoKICAgICAgLmhlYWx0aC1waWxsLWxlZ2VuZCB7CiAgICAgICAgcGFkZGluZzogMTVweDsKICAgICAgfQoKICAgICAgLmhlYWx0aC1waWxsLWxlZ2VuZCBoMiB7CiAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsKICAgICAgfQoKICAgICAgLmhlYWx0aC1waWxsLWVudHJ5IHsKICAgICAgICBtYXJnaW46IDEwcHggMTBweCAxMHB4IDA7CiAgICAgIH0KCiAgICAgIC5oZWFsdGgtcGlsbC1lbnRyeSAuY29sb3ItcHJldmlldyB7CiAgICAgICAgd2lkdGg6IDI2cHg7CiAgICAgICAgaGVpZ2h0OiAyNnB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDNweDsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgbWFyZ2luOiAwIDEwcHggMCAwOwogICAgICB9CgogICAgICAuaGVhbHRoLXBpbGwtZW50cnkgLmNvbG9yLWxhYmVsLAogICAgICAuaGVhbHRoLXBpbGwtZW50cnkgLnRlbnNvci1jb3VudCB7CiAgICAgICAgY29sb3I6ICM3Nzc7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIGhlaWdodDogMjZweDsKICAgICAgICBmb250LXNpemU6IDIycHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDI2cHg7CiAgICAgICAgdmVydGljYWwtYWxpZ246IHRvcDsKICAgICAgfQoKICAgICAgLmhlYWx0aC1waWxsLWVudHJ5IC50ZW5zb3ItY291bnQgewogICAgICAgIGZsb2F0OiByaWdodDsKICAgICAgfQoKICAgICAgI2hlYWx0aC1waWxsLXN0ZXAtc2xpZGVyIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBtYXJnaW46IDAgMCAwIC0xNXB4OwogICAgICAgIC8qIDMxIGNvbWVzIGZyb20gYWRkaW5nIGEgcGFkZGluZyBvZiAxNXB4IGZyb20gYm90aCBzaWRlcyBvZiB0aGUgcGFwZXItc2xpZGVyLCBzdWJ0cmFjdGluZwogICAqIDFweCBzbyB0aGF0IHRoZSBzbGlkZXIgd2lkdGggYWxpZ25zIHdpdGggdGhlIGltYWdlICh0aGUgbGFzdCBzbGlkZXIgbWFya2VyIHRha2VzIHVwIDFweCksCiAgICogYW5kIGFkZGluZyAycHggdG8gYWNjb3VudCBmb3IgYSBib3JkZXIgb2YgMXB4IG9uIGJvdGggc2lkZXMgb2YgdGhlIGltYWdlLiAzMCAtIDEgKyAyLgogICAqIEFwcGFyZW50bHksIHRoZSBwYXBlci1zbGlkZXIgbGFja3MgYSBtaXhpbiBmb3IgdGhvc2UgcGFkZGluZyB2YWx1ZXMuICovCiAgICAgICAgd2lkdGg6IGNhbGMoMTAwJSArIDMxcHgpOwogICAgICB9CgogICAgICAjaGVhbHRoLXBpbGxzLWxvYWRpbmctc3Bpbm5lciB7CiAgICAgICAgd2lkdGg6IDIwcHg7CiAgICAgICAgaGVpZ2h0OiAyMHB4OwogICAgICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7CiAgICAgIH0KCiAgICAgICNoZWFsdGgtcGlsbC1zdGVwLW51bWJlci1pbnB1dCB7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7CiAgICAgIH0KCiAgICAgICNudW1lcmljLWFsZXJ0cy10YWJsZS1jb250YWluZXIgewogICAgICAgIG1heC1oZWlnaHQ6IDQwMHB4OwogICAgICAgIG92ZXJmbG93LXg6IGhpZGRlbjsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICB9CgogICAgICAjbnVtZXJpYy1hbGVydHMtdGFibGUgewogICAgICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICAgIH0KCiAgICAgICNudW1lcmljLWFsZXJ0cy10YWJsZSB0ZCB7CiAgICAgICAgdmVydGljYWwtYWxpZ246IHRvcDsKICAgICAgfQoKICAgICAgI251bWVyaWMtYWxlcnRzLXRhYmxlIC5maXJzdC1vZmZlbnNlLXRkIHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgIH0KCiAgICAgIC5maXJzdC1vZmZlbnNlLXRkIHsKICAgICAgICB3aWR0aDogODBweDsKICAgICAgfQoKICAgICAgLnRlbnNvci1kZXZpY2UtdGQgewogICAgICAgIG1heC13aWR0aDogMTQwcHg7CiAgICAgICAgd29yZC13cmFwOiBicmVhay13b3JkOwogICAgICB9CgogICAgICAudGVuc29yLXNlY3Rpb24td2l0aGluLXRhYmxlIHsKICAgICAgICBjb2xvcjogIzI2NjIzNjsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgb3BhY2l0eTogMC44OwogICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwogICAgICB9CgogICAgICAudGVuc29yLXNlY3Rpb24td2l0aGluLXRhYmxlOmhvdmVyIHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CgogICAgICAuZGV2aWNlLXNlY3Rpb24td2l0aGluLXRhYmxlIHsKICAgICAgICBjb2xvcjogIzY2NjsKICAgICAgfQoKICAgICAgLm1pbmktaGVhbHRoLXBpbGwgewogICAgICAgIHdpZHRoOiAxMzBweDsKICAgICAgfQoKICAgICAgLm1pbmktaGVhbHRoLXBpbGwgPiBkaXYgewogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICB3aWR0aDogNjBweDsKICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgIH0KCiAgICAgICNldmVudC1jb3VudHMtdGggewogICAgICAgIHBhZGRpbmc6IDAgMCAwIDEwcHg7CiAgICAgIH0KCiAgICAgIC5uZWdhdGl2ZS1pbmYtbWluaS1oZWFsdGgtcGlsbC1zZWN0aW9uIHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2IoMjU1LCAxNDEsIDApOwogICAgICAgIHdpZHRoOiAyMHB4OwogICAgICB9CgogICAgICAucG9zaXRpdmUtaW5mLW1pbmktaGVhbHRoLXBpbGwtc2VjdGlvbiB7CiAgICAgICAgYmFja2dyb3VuZDogcmdiKDAsIDYyLCAyMTIpOwogICAgICAgIHdpZHRoOiAyMHB4OwogICAgICB9CgogICAgICAubmFuLW1pbmktaGVhbHRoLXBpbGwtc2VjdGlvbiB7CiAgICAgICAgYmFja2dyb3VuZDogcmdiKDIwNCwgNDcsIDQ0KTsKICAgICAgICB3aWR0aDogMjBweDsKICAgICAgfQoKICAgICAgLm5lZ2F0aXZlLWluZi1taW5pLWhlYWx0aC1waWxsLXNlY3Rpb24sCiAgICAgIC5wb3NpdGl2ZS1pbmYtbWluaS1oZWFsdGgtcGlsbC1zZWN0aW9uLAogICAgICAubmFuLW1pbmktaGVhbHRoLXBpbGwtc2VjdGlvbiB7CiAgICAgICAgY29sb3I6ICNmZmY7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBsaW5lLWhlaWdodDogMjBweDsKICAgICAgICBtYXJnaW46IDAgMCAwIDEwcHg7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICB9CgogICAgICAubm8tbnVtZXJpYy1hbGVydHMtbm90aWZpY2F0aW9uIHsKICAgICAgICBtYXJnaW46IDA7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8cGFwZXItbWF0ZXJpYWwgZWxldmF0aW9uPSIxIiBjbGFzcz0iY2FyZCBoZWFsdGgtcGlsbC1sZWdlbmQiPgogICAgICA8ZGl2IGNsYXNzPSJ0aXRsZSI+CiAgICAgICAgRW5hYmxlIGFsbCAobm90IGp1c3Qgc2FtcGxlZCkgc3RlcHMuIFJlcXVpcmVzIHNsb3cgZGlzayByZWFkLgogICAgICA8L2Rpdj4KICAgICAgPHBhcGVyLXRvZ2dsZS1idXR0b24gaWQ9ImVuYWJsZUFsbFN0ZXBzTW9kZVRvZ2dsZSIgY2hlY2tlZD0ie3thbGxTdGVwc01vZGVFbmFibGVkfX0iPgogICAgICA8L3BhcGVyLXRvZ2dsZS1idXR0b24+CiAgICAgIDxoMj4KICAgICAgICBTdGVwIG9mIEhlYWx0aCBQaWxsczoKICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbYWxsU3RlcHNNb2RlRW5hYmxlZF1dIj4KICAgICAgICAgIDxpbnB1dCB0eXBlPSJudW1iZXIiIGlkPSJoZWFsdGgtcGlsbC1zdGVwLW51bWJlci1pbnB1dCIgbWluPSIwIiBtYXg9IltbX2JpZ2dlc3RTdGVwRXZlclNlZW5dXSIgdmFsdWU9Int7c3BlY2lmaWNIZWFsdGhQaWxsU3RlcDo6aW5wdXR9fSI+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIWFsbFN0ZXBzTW9kZUVuYWJsZWRdXSI+CiAgICAgICAgICBbW19jdXJyZW50U3RlcERpc3BsYXlWYWx1ZV1dCiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8cGFwZXItc3Bpbm5lci1saXRlIGFjdGl2ZSBoaWRkZW4kPSJbWyFhcmVIZWFsdGhQaWxsc0xvYWRpbmddXSIgaWQ9ImhlYWx0aC1waWxscy1sb2FkaW5nLXNwaW5uZXIiPjwvcGFwZXItc3Bpbm5lci1saXRlPgogICAgICA8L2gyPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbYWxsU3RlcHNNb2RlRW5hYmxlZF1dIj4KICAgICAgICA8cGFwZXItc2xpZGVyIGlkPSJoZWFsdGgtcGlsbC1zdGVwLXNsaWRlciIgaW1tZWRpYXRlLXZhbHVlPSJ7e3NwZWNpZmljSGVhbHRoUGlsbFN0ZXB9fSIgbWF4PSJbW19iaWdnZXN0U3RlcEV2ZXJTZWVuXV0iIHNuYXBzIHN0ZXA9IjEiIHZhbHVlPSJ7e3NwZWNpZmljSGVhbHRoUGlsbFN0ZXB9fSI+PC9wYXBlci1zbGlkZXI+CiAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shYWxsU3RlcHNNb2RlRW5hYmxlZF1dIj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX21heFN0ZXBJbmRleF1dIj4KICAgICAgICAgIDxwYXBlci1zbGlkZXIgaWQ9ImhlYWx0aC1waWxsLXN0ZXAtc2xpZGVyIiBpbW1lZGlhdGUtdmFsdWU9Int7aGVhbHRoUGlsbFN0ZXBJbmRleH19IiBtYXg9IltbX21heFN0ZXBJbmRleF1dIiBzbmFwcyBzdGVwPSIxIiB2YWx1ZT0ie3toZWFsdGhQaWxsU3RlcEluZGV4fX0iPjwvcGFwZXItc2xpZGVyPgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDxoMj4KICAgICAgICBIZWFsdGggUGlsbAogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1toZWFsdGhQaWxsVmFsdWVzRm9yU2VsZWN0ZWROb2RlXV0iPgogICAgICAgICAgQ291bnRzIGZvciBTZWxlY3RlZCBOb2RlCiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIWhlYWx0aFBpbGxWYWx1ZXNGb3JTZWxlY3RlZE5vZGVdXSI+CiAgICAgICAgICBMZWdlbmQKICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L2gyPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW2hlYWx0aFBpbGxFbnRyaWVzXV0iPgogICAgICAgIDxkaXYgY2xhc3M9ImhlYWx0aC1waWxsLWVudHJ5Ij4KICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbG9yLXByZXZpZXciIHN0eWxlPSJiYWNrZ3JvdW5kOltbaXRlbS5iYWNrZ3JvdW5kX2NvbG9yXV0iPjwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iY29sb3ItbGFiZWwiPltbaXRlbS5sYWJlbF1dPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0ZW5zb3ItY291bnQiPgogICAgICAgICAgICBbW19jb21wdXRlVGVuc29yQ291bnRTdHJpbmcoaGVhbHRoUGlsbFZhbHVlc0ZvclNlbGVjdGVkTm9kZSwKICAgICAgICAgICAgaW5kZXgpXV0KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L3RlbXBsYXRlPgogICAgICA8ZGl2IGhpZGRlbiQ9IltbIV9oYXNEZWJ1Z2dlck51bWVyaWNBbGVydHMoZGVidWdnZXJOdW1lcmljQWxlcnRzKV1dIj4KICAgICAgICA8aDIgaWQ9Im51bWVyaWMtYWxlcnRzLWhlYWRlciI+TnVtZXJpYyBBbGVydHM8L2gyPgogICAgICAgIDxwPgogICAgICAgICAgQWxlcnRzIGFyZSBzb3J0ZWQgZnJvbSB0b3AgdG8gYm90dG9tIGJ5IGluY3JlYXNpbmcgdGltZXN0YW1wLgogICAgICAgIAogICAgICAgIDxkaXYgaWQ9Im51bWVyaWMtYWxlcnRzLXRhYmxlLWNvbnRhaW5lciI+CiAgICAgICAgICA8dGFibGUgaWQ9Im51bWVyaWMtYWxlcnRzLXRhYmxlIj4KICAgICAgICAgICAgPHRoZWFkPgogICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgIDx0aD5GaXJzdCBPZmZlbnNlPC90aD4KICAgICAgICAgICAgICAgIDx0aD5UZW5zb3IgKERldmljZSk8L3RoPgogICAgICAgICAgICAgICAgPHRoIGlkPSJldmVudC1jb3VudHMtdGgiPkV2ZW50IENvdW50czwvdGg+CiAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgPC90aGVhZD4KICAgICAgICAgICAgPHRib2R5IGlkPSJudW1lcmljLWFsZXJ0cy1ib2R5Ij48L3Rib2R5PgogICAgICAgICAgPC90YWJsZT4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shX2hhc0RlYnVnZ2VyTnVtZXJpY0FsZXJ0cyhkZWJ1Z2dlck51bWVyaWNBbGVydHMpXV0iPgogICAgICAgIDxwIGNsYXNzPSJuby1udW1lcmljLWFsZXJ0cy1ub3RpZmljYXRpb24iPgogICAgICAgICAgTm8gbnVtZXJpYyBhbGVydHMgc28gZmFyLiBUaGF0IGlzIGxpa2VseSBnb29kLiBBbGVydHMgaW5kaWNhdGUgdGhlCiAgICAgICAgICBwcmVzZW5jZSBvZiBOYU4gb3IgKCsvLSkgSW5maW5pdHkgdmFsdWVzLCB3aGljaCBtYXkgYmUgY29uY2VybmluZy4KICAgICAgICAKICAgICAgPC90ZW1wbGF0ZT4KICAgIDwvcGFwZXItbWF0ZXJpYWw+CiAgPC90ZW1wbGF0ZT4KICA8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdGYtZ3JhcGgtZGVidWdnZXItZGF0YS1jYXJkL3RmLWdyYXBoLWRlYnVnZ2VyLWRhdGEtY2FyZC5odG1sLmpzCihmdW5jdGlvbigpe1BvbHltZXIoe2lzOiJ0Zi1ncmFwaC1kZWJ1Z2dlci1kYXRhLWNhcmQiLHByb3BlcnRpZXM6e3JlbmRlckhpZXJhcmNoeTpPYmplY3QsZGVidWdnZXJOdW1lcmljQWxlcnRzOnt0eXBlOkFycmF5LG5vdGlmeTohMH0sbm9kZU5hbWVzVG9IZWFsdGhQaWxsczpPYmplY3QsaGVhbHRoUGlsbFN0ZXBJbmRleDp7dHlwZTpOdW1iZXIsbm90aWZ5OiEwfSxzcGVjaWZpY0hlYWx0aFBpbGxTdGVwOnt0eXBlOk51bWJlcix2YWx1ZTowLG5vdGlmeTohMH0sc2VsZWN0ZWROb2RlOnt0eXBlOlN0cmluZyxub3RpZnk6ITB9LGhpZ2hsaWdodGVkTm9kZTp7dHlwZTpTdHJpbmcsbm90aWZ5OiEwfSxzZWxlY3RlZE5vZGVJbmNsdWRlOnt0eXBlOk51bWJlcixub3RpZnk6ITB9LGFyZUhlYWx0aFBpbGxzTG9hZGluZzpCb29sZWFuLGhlYWx0aFBpbGxFbnRyaWVzOnt0eXBlOkFycmF5LHZhbHVlOnRmLmdyYXBoLnNjZW5lLmhlYWx0aFBpbGxFbnRyaWVzLHJlYWRPbmx5OiEwfSxoZWFsdGhQaWxsVmFsdWVzRm9yU2VsZWN0ZWROb2RlOnt0eXBlOkFycmF5LApjb21wdXRlZDoiX2NvbXB1dGVIZWFsdGhQaWxsRm9yTm9kZShub2RlTmFtZXNUb0hlYWx0aFBpbGxzLCBoZWFsdGhQaWxsU3RlcEluZGV4LCBzZWxlY3RlZE5vZGUsIGFsbFN0ZXBzTW9kZUVuYWJsZWQsIGFyZUhlYWx0aFBpbGxzTG9hZGluZykifSxhbGxTdGVwc01vZGVFbmFibGVkOnt0eXBlOkJvb2xlYW4sbm90aWZ5OiEwfSxfYmlnZ2VzdFN0ZXBFdmVyU2Vlbjp7dHlwZTpOdW1iZXIsY29tcHV0ZWQ6Il9jb21wdXRlQmlnZ2VzdFN0ZXBFdmVyU2Vlbihub2RlTmFtZXNUb0hlYWx0aFBpbGxzKSJ9LF9tYXhTdGVwSW5kZXg6e3R5cGU6TnVtYmVyLGNvbXB1dGVkOiJfY29tcHV0ZU1heFN0ZXBJbmRleChub2RlTmFtZXNUb0hlYWx0aFBpbGxzKSJ9LF9jdXJyZW50U3RlcERpc3BsYXlWYWx1ZTp7dHlwZTpTdHJpbmcsY29tcHV0ZWQ6Il9jb21wdXRlQ3VycmVudFN0ZXBEaXNwbGF5VmFsdWUobm9kZU5hbWVzVG9IZWFsdGhQaWxscywgaGVhbHRoUGlsbFN0ZXBJbmRleCwgYWxsU3RlcHNNb2RlRW5hYmxlZCwgc3BlY2lmaWNIZWFsdGhQaWxsU3RlcCwgYXJlSGVhbHRoUGlsbHNMb2FkaW5nKSJ9fSwKb2JzZXJ2ZXJzOlsiX3VwZGF0ZUFsZXJ0c0xpc3QoZGVidWdnZXJOdW1lcmljQWxlcnRzKSJdLHJlYWR5OmZ1bmN0aW9uKCl7dmFyIGE9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1haW5Db250YWluZXIiKSxjPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoInRmLWRhc2hib2FyZC1sYXlvdXQgLnNjcm9sbGJhciIpO2EmJmMmJihhLnN0eWxlLm92ZXJmbG93PSJoaWRkZW4iLGMuc3R5bGUub3ZlcmZsb3c9ImhpZGRlbiIpfSxfaGVhbHRoUGlsbHNBdmFpbGFibGU6ZnVuY3Rpb24oYSxjKXtyZXR1cm4gYSYmY30sX2NvbXB1dGVUZW5zb3JDb3VudFN0cmluZzpmdW5jdGlvbihhLGMpe3JldHVybiBhP2FbY10udG9GaXhlZCgwKToiIn0sX2NvbXB1dGVIZWFsdGhQaWxsRm9yTm9kZTpmdW5jdGlvbihhLGMsZCxmLGcpe2lmKGd8fCFkKXJldHVybiBudWxsO2E9YVtkXTtyZXR1cm4gYT8oYz1hW2Y/MDpjXSk/Yy52YWx1ZS5zbGljZSgyLDgpOm51bGw6bnVsbH0sX2NvbXB1dGVDdXJyZW50U3RlcERpc3BsYXlWYWx1ZTpmdW5jdGlvbihhLApjLGQsZixnKXtpZihkKXJldHVybiBmLnRvRml4ZWQoMCk7aWYoZylyZXR1cm4gMDtmb3IobGV0IGwgaW4gYSlyZXR1cm4gYVtsXVtjXS5zdGVwLnRvRml4ZWQoMCk7cmV0dXJuIDB9LF9jb21wdXRlQmlnZ2VzdFN0ZXBFdmVyU2VlbjpmdW5jdGlvbihhKXtmb3IobGV0IGMgaW4gYSlyZXR1cm4gYT1hW2NdLE1hdGgubWF4KHRoaXMuX2JpZ2dlc3RTdGVwRXZlclNlZW4sYVthLmxlbmd0aC0xXS5zdGVwKTtyZXR1cm4gdGhpcy5fYmlnZ2VzdFN0ZXBFdmVyU2Vlbnx8MH0sX2NvbXB1dGVNYXhTdGVwSW5kZXg6ZnVuY3Rpb24oYSl7Zm9yKGxldCBjIGluIGEpcmV0dXJuIGFbY10ubGVuZ3RoLTE7cmV0dXJuIDB9LF9oYXNEZWJ1Z2dlck51bWVyaWNBbGVydHM6ZnVuY3Rpb24oYSl7cmV0dXJuIGEmJmEubGVuZ3RofSxfdXBkYXRlQWxlcnRzTGlzdDpmdW5jdGlvbihhKXt2YXIgYz10aGlzLiQkKCIjbnVtZXJpYy1hbGVydHMtYm9keSIpO2lmKGMpe2MuaW5uZXJIVE1MPSIiO2Zvcih2YXIgZD0KMDtkPGEubGVuZ3RoO2QrKyl7dmFyIGY9YVtkXSxnPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRyIiksbD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpO2wuaW5uZXJIVE1MPXRmLmdyYXBoLnV0aWwuY29tcHV0ZUh1bWFuRnJpZW5kbHlUaW1lKGYuZmlyc3RfdGltZXN0YW1wKTtsLmNsYXNzTGlzdC5hZGQoImZpcnN0LW9mZmVuc2UtdGQiKTtnLmFwcGVuZENoaWxkKGwpO2w9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTtsLmNsYXNzTGlzdC5hZGQoInRlbnNvci1kZXZpY2UtdGQiKTt2YXIgaz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtrLmNsYXNzTGlzdC5hZGQoInRlbnNvci1zZWN0aW9uLXdpdGhpbi10YWJsZSIpO2suaW5uZXJIVE1MPWYudGVuc29yX25hbWU7dGhpcy5fYWRkT3BFeHBhbnNpb25MaXN0ZW5lcihrLGYudGVuc29yX25hbWUpO2wuYXBwZW5kQ2hpbGQoayk7az1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtrLmNsYXNzTGlzdC5hZGQoImRldmljZS1zZWN0aW9uLXdpdGhpbi10YWJsZSIpOwprLmlubmVySFRNTD0iKCIrZi5kZXZpY2VfbmFtZSsiKSI7bC5hcHBlbmRDaGlsZChrKTtnLmFwcGVuZENoaWxkKGwpO2w9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7bC5jbGFzc0xpc3QuYWRkKCJtaW5pLWhlYWx0aC1waWxsIik7az1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpO2suY2xhc3NMaXN0LmFkZCgibWluaS1oZWFsdGgtcGlsbC10ZCIpO2suYXBwZW5kQ2hpbGQobCk7Zy5hcHBlbmRDaGlsZChrKTtmLm5lZ19pbmZfZXZlbnRfY291bnQmJihrPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLGsuY2xhc3NMaXN0LmFkZCgibmVnYXRpdmUtaW5mLW1pbmktaGVhbHRoLXBpbGwtc2VjdGlvbiIpLGsuaW5uZXJIVE1MPWYubmVnX2luZl9ldmVudF9jb3VudCxrLnNldEF0dHJpYnV0ZSgidGl0bGUiLGYubmVnX2luZl9ldmVudF9jb3VudCsiIGV2ZW50cyB3aXRoIC1cdTIyMWUiKSxsLmFwcGVuZENoaWxkKGspKTtmLnBvc19pbmZfZXZlbnRfY291bnQmJihrPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLAprLmNsYXNzTGlzdC5hZGQoInBvc2l0aXZlLWluZi1taW5pLWhlYWx0aC1waWxsLXNlY3Rpb24iKSxrLmlubmVySFRNTD1mLnBvc19pbmZfZXZlbnRfY291bnQsay5zZXRBdHRyaWJ1dGUoInRpdGxlIixmLnBvc19pbmZfZXZlbnRfY291bnQrIiBldmVudHMgd2l0aCArXHUyMjFlIiksbC5hcHBlbmRDaGlsZChrKSk7Zi5uYW5fZXZlbnRfY291bnQmJihrPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLGsuY2xhc3NMaXN0LmFkZCgibmFuLW1pbmktaGVhbHRoLXBpbGwtc2VjdGlvbiIpLGsuaW5uZXJIVE1MPWYubmFuX2V2ZW50X2NvdW50LGsuc2V0QXR0cmlidXRlKCJ0aXRsZSIsZi5uYW5fZXZlbnRfY291bnQrIiBldmVudHMgd2l0aCBOYU4iKSxsLmFwcGVuZENoaWxkKGspKTtQb2x5bWVyLmRvbShjKS5hcHBlbmRDaGlsZChnKX19fSxfYWRkT3BFeHBhbnNpb25MaXN0ZW5lcjpmdW5jdGlvbihhLGMpe2EuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCgpPT57dmFyIGQ9dGYuZ3JhcGgucmVuZGVyLmV4cGFuZFVudGlsTm9kZUlzU2hvd24odGhpcy5yZW5kZXJIaWVyYXJjaHksCmMpLGYsZz1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJ0Zi1ncmFwaC1pbmZvI2dyYXBoLWluZm8iKTtnJiYoZj1nLnNjcm9sbEhlaWdodC1nLnNjcm9sbFRvcCk7dmFyIGw9dGhpcy5zZWxlY3RlZE5vZGU7dGhpcy5zZXQoInNlbGVjdGVkTm9kZSIsZCk7ZD0oKT0+e2cuc2Nyb2xsVG9wPWcuc2Nyb2xsSGVpZ2h0LWZ9O2cmJihsP2QoKTp3aW5kb3cuc2V0VGltZW91dChkLDIwKSl9KX19KX0pKCk7Cjwvc2NyaXB0Pgo8L2RvbS1tb2R1bGU+CgoKCgoKCgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vaXJvbi1zY3JvbGwtdGFyZ2V0LWJlaGF2aW9yL2lyb24tc2Nyb2xsLXRhcmdldC1iZWhhdmlvci5odG1sLmpzClBvbHltZXIuSXJvblNjcm9sbFRhcmdldEJlaGF2aW9yPXtwcm9wZXJ0aWVzOntzY3JvbGxUYXJnZXQ6e3R5cGU6SFRNTEVsZW1lbnQsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGVmYXVsdFNjcm9sbFRhcmdldH19fSxvYnNlcnZlcnM6WyJfc2Nyb2xsVGFyZ2V0Q2hhbmdlZChzY3JvbGxUYXJnZXQsIGlzQXR0YWNoZWQpIl0sX3Nob3VsZEhhdmVMaXN0ZW5lcjohMCxfc2Nyb2xsVGFyZ2V0Q2hhbmdlZDpmdW5jdGlvbihhLGMpe3RoaXMuX29sZFNjcm9sbFRhcmdldCYmKHRoaXMuX3RvZ2dsZVNjcm9sbExpc3RlbmVyKCExLHRoaXMuX29sZFNjcm9sbFRhcmdldCksdGhpcy5fb2xkU2Nyb2xsVGFyZ2V0PW51bGwpO2MmJigiZG9jdW1lbnQiPT09YT90aGlzLnNjcm9sbFRhcmdldD10aGlzLl9kb2M6InN0cmluZyI9PT10eXBlb2YgYT90aGlzLnNjcm9sbFRhcmdldD0oYz10aGlzLmRvbUhvc3QpJiZjLiQ/Yy4kW2FdOlBvbHltZXIuZG9tKHRoaXMub3duZXJEb2N1bWVudCkucXVlcnlTZWxlY3RvcigiIyIrCmEpOnRoaXMuX2lzVmFsaWRTY3JvbGxUYXJnZXQoKSYmKHRoaXMuX29sZFNjcm9sbFRhcmdldD1hLHRoaXMuX3RvZ2dsZVNjcm9sbExpc3RlbmVyKHRoaXMuX3Nob3VsZEhhdmVMaXN0ZW5lcixhKSkpfSxfc2Nyb2xsSGFuZGxlcjpmdW5jdGlvbigpe30sZ2V0IF9kZWZhdWx0U2Nyb2xsVGFyZ2V0KCl7cmV0dXJuIHRoaXMuX2RvY30sZ2V0IF9kb2MoKXtyZXR1cm4gdGhpcy5vd25lckRvY3VtZW50LmRvY3VtZW50RWxlbWVudH0sZ2V0IF9zY3JvbGxUb3AoKXtyZXR1cm4gdGhpcy5faXNWYWxpZFNjcm9sbFRhcmdldCgpP3RoaXMuc2Nyb2xsVGFyZ2V0PT09dGhpcy5fZG9jP3dpbmRvdy5wYWdlWU9mZnNldDp0aGlzLnNjcm9sbFRhcmdldC5zY3JvbGxUb3A6MH0sZ2V0IF9zY3JvbGxMZWZ0KCl7cmV0dXJuIHRoaXMuX2lzVmFsaWRTY3JvbGxUYXJnZXQoKT90aGlzLnNjcm9sbFRhcmdldD09PXRoaXMuX2RvYz93aW5kb3cucGFnZVhPZmZzZXQ6dGhpcy5zY3JvbGxUYXJnZXQuc2Nyb2xsTGVmdDoKMH0sc2V0IF9zY3JvbGxUb3AoYSl7dGhpcy5zY3JvbGxUYXJnZXQ9PT10aGlzLl9kb2M/d2luZG93LnNjcm9sbFRvKHdpbmRvdy5wYWdlWE9mZnNldCxhKTp0aGlzLl9pc1ZhbGlkU2Nyb2xsVGFyZ2V0KCkmJih0aGlzLnNjcm9sbFRhcmdldC5zY3JvbGxUb3A9YSl9LHNldCBfc2Nyb2xsTGVmdChhKXt0aGlzLnNjcm9sbFRhcmdldD09PXRoaXMuX2RvYz93aW5kb3cuc2Nyb2xsVG8oYSx3aW5kb3cucGFnZVlPZmZzZXQpOnRoaXMuX2lzVmFsaWRTY3JvbGxUYXJnZXQoKSYmKHRoaXMuc2Nyb2xsVGFyZ2V0LnNjcm9sbExlZnQ9YSl9LHNjcm9sbDpmdW5jdGlvbihhLGMpe3RoaXMuc2Nyb2xsVGFyZ2V0PT09dGhpcy5fZG9jP3dpbmRvdy5zY3JvbGxUbyhhLGMpOnRoaXMuX2lzVmFsaWRTY3JvbGxUYXJnZXQoKSYmKHRoaXMuc2Nyb2xsVGFyZ2V0LnNjcm9sbExlZnQ9YSx0aGlzLnNjcm9sbFRhcmdldC5zY3JvbGxUb3A9Yyl9LGdldCBfc2Nyb2xsVGFyZ2V0V2lkdGgoKXtyZXR1cm4gdGhpcy5faXNWYWxpZFNjcm9sbFRhcmdldCgpPwp0aGlzLnNjcm9sbFRhcmdldD09PXRoaXMuX2RvYz93aW5kb3cuaW5uZXJXaWR0aDp0aGlzLnNjcm9sbFRhcmdldC5vZmZzZXRXaWR0aDowfSxnZXQgX3Njcm9sbFRhcmdldEhlaWdodCgpe3JldHVybiB0aGlzLl9pc1ZhbGlkU2Nyb2xsVGFyZ2V0KCk/dGhpcy5zY3JvbGxUYXJnZXQ9PT10aGlzLl9kb2M/d2luZG93LmlubmVySGVpZ2h0OnRoaXMuc2Nyb2xsVGFyZ2V0Lm9mZnNldEhlaWdodDowfSxfaXNWYWxpZFNjcm9sbFRhcmdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNjcm9sbFRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50fSxfdG9nZ2xlU2Nyb2xsTGlzdGVuZXI6ZnVuY3Rpb24oYSxjKXtjPWM9PT10aGlzLl9kb2M/d2luZG93OmM7YT90aGlzLl9ib3VuZFNjcm9sbEhhbmRsZXJ8fCh0aGlzLl9ib3VuZFNjcm9sbEhhbmRsZXI9dGhpcy5fc2Nyb2xsSGFuZGxlci5iaW5kKHRoaXMpLGMuYWRkRXZlbnRMaXN0ZW5lcigic2Nyb2xsIix0aGlzLl9ib3VuZFNjcm9sbEhhbmRsZXIpKToKdGhpcy5fYm91bmRTY3JvbGxIYW5kbGVyJiYoYy5yZW1vdmVFdmVudExpc3RlbmVyKCJzY3JvbGwiLHRoaXMuX2JvdW5kU2Nyb2xsSGFuZGxlciksdGhpcy5fYm91bmRTY3JvbGxIYW5kbGVyPW51bGwpfSx0b2dnbGVTY3JvbGxMaXN0ZW5lcjpmdW5jdGlvbihhKXt0aGlzLl9zaG91bGRIYXZlTGlzdGVuZXI9YTt0aGlzLl90b2dnbGVTY3JvbGxMaXN0ZW5lcihhLHRoaXMuc2Nyb2xsVGFyZ2V0KX19Owo8L3NjcmlwdD4KCgoKCjxkb20tbW9kdWxlIGlkPSJpcm9uLWxpc3QiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CgogICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kICgtd2Via2l0LW1heC1kZXZpY2UtcGl4ZWwtcmF0aW86IDEpIHsKICAgICAgICA6aG9zdCB7CiAgICAgICAgICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtOwogICAgICAgIH0KICAgICAgfQoKICAgICAgI2l0ZW1zIHsKICAgICAgICBAYXBwbHkgLS1pcm9uLWxpc3QtaXRlbXMtY29udGFpbmVyOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfQoKICAgICAgOmhvc3QoOm5vdChbZ3JpZF0pKSAjaXRlbXMgPiA6OnNsb3R0ZWQoKikgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAjaXRlbXMgPiA6OnNsb3R0ZWQoKikgewogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgd2lsbC1jaGFuZ2U6IHRyYW5zZm9ybTsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8YXJyYXktc2VsZWN0b3IgaWQ9InNlbGVjdG9yIiBpdGVtcz0ie3tpdGVtc319IiBzZWxlY3RlZD0ie3tzZWxlY3RlZEl0ZW1zfX0iIHNlbGVjdGVkLWl0ZW09Int7c2VsZWN0ZWRJdGVtfX0iPjwvYXJyYXktc2VsZWN0b3I+CgogICAgPGRpdiBpZD0iaXRlbXMiPgogICAgICA8c2xvdD48L3Nsb3Q+CiAgICA8L2Rpdj4KCiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPgoKPHNjcmlwdD4vL35+V0VCUEFUSH5+L2lyb24tbGlzdC9pcm9uLWxpc3QuaHRtbC5qcwooZnVuY3Rpb24oKXt2YXIgYT1uYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9pUCg/OmhvbmV8YWQ7KD86IFU7KT8gQ1BVKSBPUyAoXGQrKS8pLGM9YSYmODw9YVsxXSxkPW51bGwhPVBvbHltZXIuZmx1c2gsZj1kP1BvbHltZXIuQXN5bmMuYW5pbWF0aW9uRnJhbWU6MCxnPWQ/UG9seW1lci5Bc3luYy5pZGxlUGVyaW9kOjEsbD1kP1BvbHltZXIuQXN5bmMubWljcm9UYXNrOjI7UG9seW1lci5PcHRpb25hbE11dGFibGVEYXRhQmVoYXZpb3J8fChQb2x5bWVyLk9wdGlvbmFsTXV0YWJsZURhdGFCZWhhdmlvcj17fSk7UG9seW1lcih7aXM6Imlyb24tbGlzdCIscHJvcGVydGllczp7aXRlbXM6e3R5cGU6QXJyYXl9LGFzOnt0eXBlOlN0cmluZyx2YWx1ZToiaXRlbSJ9LGluZGV4QXM6e3R5cGU6U3RyaW5nLHZhbHVlOiJpbmRleCJ9LHNlbGVjdGVkQXM6e3R5cGU6U3RyaW5nLHZhbHVlOiJzZWxlY3RlZCJ9LGdyaWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxyZWZsZWN0VG9BdHRyaWJ1dGU6ITAsCm9ic2VydmVyOiJfZ3JpZENoYW5nZWQifSxzZWxlY3Rpb25FbmFibGVkOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LHNlbGVjdGVkSXRlbTp7dHlwZTpPYmplY3Qsbm90aWZ5OiEwfSxzZWxlY3RlZEl0ZW1zOnt0eXBlOk9iamVjdCxub3RpZnk6ITB9LG11bHRpU2VsZWN0aW9uOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LHNjcm9sbE9mZnNldDp7dHlwZTpOdW1iZXIsdmFsdWU6MH19LG9ic2VydmVyczpbIl9pdGVtc0NoYW5nZWQoaXRlbXMuKikiLCJfc2VsZWN0aW9uRW5hYmxlZENoYW5nZWQoc2VsZWN0aW9uRW5hYmxlZCkiLCJfbXVsdGlTZWxlY3Rpb25DaGFuZ2VkKG11bHRpU2VsZWN0aW9uKSIsIl9zZXRPdmVyZmxvdyhzY3JvbGxUYXJnZXQsIHNjcm9sbE9mZnNldCkiXSxiZWhhdmlvcnM6W1BvbHltZXIuVGVtcGxhdGl6ZXIsUG9seW1lci5Jcm9uUmVzaXphYmxlQmVoYXZpb3IsUG9seW1lci5Jcm9uU2Nyb2xsVGFyZ2V0QmVoYXZpb3IsUG9seW1lci5PcHRpb25hbE11dGFibGVEYXRhQmVoYXZpb3JdLApfcmF0aW86LjUsX3Njcm9sbGVyUGFkZGluZ1RvcDowLF9zY3JvbGxQb3NpdGlvbjowLF9waHlzaWNhbFNpemU6MCxfcGh5c2ljYWxBdmVyYWdlOjAsX3BoeXNpY2FsQXZlcmFnZUNvdW50OjAsX3BoeXNpY2FsVG9wOjAsX3ZpcnR1YWxDb3VudDowLF9lc3RTY3JvbGxIZWlnaHQ6MCxfc2Nyb2xsSGVpZ2h0OjAsX3ZpZXdwb3J0SGVpZ2h0OjAsX3ZpZXdwb3J0V2lkdGg6MCxfcGh5c2ljYWxJdGVtczpudWxsLF9waHlzaWNhbFNpemVzOm51bGwsX2ZpcnN0VmlzaWJsZUluZGV4VmFsOm51bGwsX2NvbGxlY3Rpb246bnVsbCxfbGFzdFZpc2libGVJbmRleFZhbDpudWxsLF9tYXhQYWdlczoyLF9mb2N1c2VkSXRlbTpudWxsLF9mb2N1c2VkVmlydHVhbEluZGV4Oi0xLF9mb2N1c2VkUGh5c2ljYWxJbmRleDotMSxfb2Zmc2NyZWVuRm9jdXNlZEl0ZW06bnVsbCxfZm9jdXNCYWNrZmlsbEl0ZW06bnVsbCxfaXRlbXNQZXJSb3c6MSxfaXRlbVdpZHRoOjAsX3Jvd0hlaWdodDowLF90ZW1wbGF0ZUNvc3Q6MCwKX3BhcmVudE1vZGVsOiEwLGdldCBfcGh5c2ljYWxCb3R0b20oKXtyZXR1cm4gdGhpcy5fcGh5c2ljYWxUb3ArdGhpcy5fcGh5c2ljYWxTaXplfSxnZXQgX3Njcm9sbEJvdHRvbSgpe3JldHVybiB0aGlzLl9zY3JvbGxQb3NpdGlvbit0aGlzLl92aWV3cG9ydEhlaWdodH0sZ2V0IF92aXJ0dWFsRW5kKCl7cmV0dXJuIHRoaXMuX3ZpcnR1YWxTdGFydCt0aGlzLl9waHlzaWNhbENvdW50LTF9LGdldCBfaGlkZGVuQ29udGVudFNpemUoKXtyZXR1cm4odGhpcy5ncmlkP3RoaXMuX3BoeXNpY2FsUm93cyp0aGlzLl9yb3dIZWlnaHQ6dGhpcy5fcGh5c2ljYWxTaXplKS10aGlzLl92aWV3cG9ydEhlaWdodH0sZ2V0IF9pdGVtc1BhcmVudCgpe3JldHVybiBQb2x5bWVyLmRvbShQb2x5bWVyLmRvbSh0aGlzLl91c2VyVGVtcGxhdGUpLnBhcmVudE5vZGUpfSxnZXQgX21heFNjcm9sbFRvcCgpe3JldHVybiB0aGlzLl9lc3RTY3JvbGxIZWlnaHQtdGhpcy5fdmlld3BvcnRIZWlnaHQrdGhpcy5fc2Nyb2xsT2Zmc2V0fSwKZ2V0IF9tYXhWaXJ0dWFsU3RhcnQoKXt2YXIgaz10aGlzLl9jb252ZXJ0SW5kZXhUb0NvbXBsZXRlUm93KHRoaXMuX3ZpcnR1YWxDb3VudCk7cmV0dXJuIE1hdGgubWF4KDAsay10aGlzLl9waHlzaWNhbENvdW50KX0sc2V0IF92aXJ0dWFsU3RhcnQoayl7az10aGlzLl9jbGFtcChrLDAsdGhpcy5fbWF4VmlydHVhbFN0YXJ0KTt0aGlzLmdyaWQmJihrLT1rJXRoaXMuX2l0ZW1zUGVyUm93KTt0aGlzLl92aXJ0dWFsU3RhcnRWYWw9a30sZ2V0IF92aXJ0dWFsU3RhcnQoKXtyZXR1cm4gdGhpcy5fdmlydHVhbFN0YXJ0VmFsfHwwfSxzZXQgX3BoeXNpY2FsU3RhcnQoayl7ayU9dGhpcy5fcGh5c2ljYWxDb3VudDswPmsmJihrPXRoaXMuX3BoeXNpY2FsQ291bnQrayk7dGhpcy5ncmlkJiYoay09ayV0aGlzLl9pdGVtc1BlclJvdyk7dGhpcy5fcGh5c2ljYWxTdGFydFZhbD1rfSxnZXQgX3BoeXNpY2FsU3RhcnQoKXtyZXR1cm4gdGhpcy5fcGh5c2ljYWxTdGFydFZhbHx8MH0sZ2V0IF9waHlzaWNhbEVuZCgpe3JldHVybih0aGlzLl9waHlzaWNhbFN0YXJ0Kwp0aGlzLl9waHlzaWNhbENvdW50LTEpJXRoaXMuX3BoeXNpY2FsQ291bnR9LHNldCBfcGh5c2ljYWxDb3VudChrKXt0aGlzLl9waHlzaWNhbENvdW50VmFsPWt9LGdldCBfcGh5c2ljYWxDb3VudCgpe3JldHVybiB0aGlzLl9waHlzaWNhbENvdW50VmFsfHwwfSxnZXQgX29wdFBoeXNpY2FsU2l6ZSgpe3JldHVybiAwPT09dGhpcy5fdmlld3BvcnRIZWlnaHQ/SW5maW5pdHk6dGhpcy5fdmlld3BvcnRIZWlnaHQqdGhpcy5fbWF4UGFnZXN9LGdldCBfaXNWaXNpYmxlKCl7cmV0dXJuISghdGhpcy5vZmZzZXRXaWR0aCYmIXRoaXMub2Zmc2V0SGVpZ2h0KX0sZ2V0IGZpcnN0VmlzaWJsZUluZGV4KCl7dmFyIGs9dGhpcy5fZmlyc3RWaXNpYmxlSW5kZXhWYWw7aWYobnVsbD09ayl7dmFyIG09dGhpcy5fcGh5c2ljYWxUb3ArdGhpcy5fc2Nyb2xsT2Zmc2V0O3RoaXMuX2ZpcnN0VmlzaWJsZUluZGV4VmFsPWs9dGhpcy5faXRlcmF0ZUl0ZW1zKGZ1bmN0aW9uKHAscSl7bSs9dGhpcy5fZ2V0UGh5c2ljYWxTaXplSW5jcmVtZW50KHApOwppZihtPnRoaXMuX3Njcm9sbFBvc2l0aW9uKXJldHVybiB0aGlzLmdyaWQ/cS1xJXRoaXMuX2l0ZW1zUGVyUm93OnE7aWYodGhpcy5ncmlkJiZ0aGlzLl92aXJ0dWFsQ291bnQtMT09PXEpcmV0dXJuIHEtcSV0aGlzLl9pdGVtc1BlclJvd30pfHwwfXJldHVybiBrfSxnZXQgbGFzdFZpc2libGVJbmRleCgpe3ZhciBrPXRoaXMuX2xhc3RWaXNpYmxlSW5kZXhWYWw7aWYobnVsbD09ayl7aWYodGhpcy5ncmlkKWs9TWF0aC5taW4odGhpcy5fdmlydHVhbENvdW50LHRoaXMuZmlyc3RWaXNpYmxlSW5kZXgrdGhpcy5fZXN0Um93c0luVmlldyp0aGlzLl9pdGVtc1BlclJvdy0xKTtlbHNle3ZhciBtPXRoaXMuX3BoeXNpY2FsVG9wK3RoaXMuX3Njcm9sbE9mZnNldDt0aGlzLl9pdGVyYXRlSXRlbXMoZnVuY3Rpb24ocCxxKXttPHRoaXMuX3Njcm9sbEJvdHRvbSYmKGs9cSk7bSs9dGhpcy5fZ2V0UGh5c2ljYWxTaXplSW5jcmVtZW50KHApfSl9dGhpcy5fbGFzdFZpc2libGVJbmRleFZhbD1rfXJldHVybiBrfSwKZ2V0IF9kZWZhdWx0U2Nyb2xsVGFyZ2V0KCl7cmV0dXJuIHRoaXN9LGdldCBfdmlydHVhbFJvd0NvdW50KCl7cmV0dXJuIE1hdGguY2VpbCh0aGlzLl92aXJ0dWFsQ291bnQvdGhpcy5faXRlbXNQZXJSb3cpfSxnZXQgX2VzdFJvd3NJblZpZXcoKXtyZXR1cm4gTWF0aC5jZWlsKHRoaXMuX3ZpZXdwb3J0SGVpZ2h0L3RoaXMuX3Jvd0hlaWdodCl9LGdldCBfcGh5c2ljYWxSb3dzKCl7cmV0dXJuIE1hdGguY2VpbCh0aGlzLl9waHlzaWNhbENvdW50L3RoaXMuX2l0ZW1zUGVyUm93KX0sZ2V0IF9zY3JvbGxPZmZzZXQoKXtyZXR1cm4gdGhpcy5fc2Nyb2xsZXJQYWRkaW5nVG9wK3RoaXMuc2Nyb2xsT2Zmc2V0fSxyZWFkeTpmdW5jdGlvbigpe3RoaXMuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLHRoaXMuX2RpZEZvY3VzLmJpbmQodGhpcyksITApfSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX2RlYm91bmNlKCJfcmVuZGVyIix0aGlzLl9yZW5kZXIsZik7dGhpcy5saXN0ZW4odGhpcywiaXJvbi1yZXNpemUiLAoiX3Jlc2l6ZUhhbmRsZXIiKTt0aGlzLmxpc3Rlbih0aGlzLCJrZXlkb3duIiwiX2tleWRvd25IYW5kbGVyIil9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy51bmxpc3Rlbih0aGlzLCJpcm9uLXJlc2l6ZSIsIl9yZXNpemVIYW5kbGVyIik7dGhpcy51bmxpc3Rlbih0aGlzLCJrZXlkb3duIiwiX2tleWRvd25IYW5kbGVyIil9LF9zZXRPdmVyZmxvdzpmdW5jdGlvbihrKXt0aGlzLnN0eWxlLndlYmtpdE92ZXJmbG93U2Nyb2xsaW5nPWs9PT10aGlzPyJ0b3VjaCI6IiI7dGhpcy5zdHlsZS5vdmVyZmxvd1k9az09PXRoaXM/ImF1dG8iOiIiO3RoaXMuX2ZpcnN0VmlzaWJsZUluZGV4VmFsPXRoaXMuX2xhc3RWaXNpYmxlSW5kZXhWYWw9bnVsbDt0aGlzLl9kZWJvdW5jZSgiX3JlbmRlciIsdGhpcy5fcmVuZGVyLGYpfSx1cGRhdGVWaWV3cG9ydEJvdW5kYXJpZXM6ZnVuY3Rpb24oKXt2YXIgaz13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzKTt0aGlzLl9zY3JvbGxlclBhZGRpbmdUb3A9CnRoaXMuc2Nyb2xsVGFyZ2V0PT09dGhpcz8wOnBhcnNlSW50KGtbInBhZGRpbmctdG9wIl0sMTApO3RoaXMuX2lzUlRMPSJydGwiPT09ay5kaXJlY3Rpb247dGhpcy5fdmlld3BvcnRXaWR0aD10aGlzLiQuaXRlbXMub2Zmc2V0V2lkdGg7dGhpcy5fdmlld3BvcnRIZWlnaHQ9dGhpcy5fc2Nyb2xsVGFyZ2V0SGVpZ2h0O3RoaXMuZ3JpZCYmdGhpcy5fdXBkYXRlR3JpZE1ldHJpY3MoKX0sX3Njcm9sbEhhbmRsZXI6ZnVuY3Rpb24oKXt2YXIgaz1NYXRoLm1heCgwLE1hdGgubWluKHRoaXMuX21heFNjcm9sbFRvcCx0aGlzLl9zY3JvbGxUb3ApKSxtPWstdGhpcy5fc2Nyb2xsUG9zaXRpb24scD0wPD1tO3RoaXMuX3Njcm9sbFBvc2l0aW9uPWs7dGhpcy5fbGFzdFZpc2libGVJbmRleFZhbD10aGlzLl9maXJzdFZpc2libGVJbmRleFZhbD1udWxsO01hdGguYWJzKG0pPnRoaXMuX3BoeXNpY2FsU2l6ZSYmMDx0aGlzLl9waHlzaWNhbFNpemU/KG0tPXRoaXMuX3Njcm9sbE9mZnNldCxwPU1hdGgucm91bmQobS8KdGhpcy5fcGh5c2ljYWxBdmVyYWdlKSp0aGlzLl9pdGVtc1BlclJvdyx0aGlzLl92aXJ0dWFsU3RhcnQrPXAsdGhpcy5fcGh5c2ljYWxTdGFydCs9cCx0aGlzLl9waHlzaWNhbFRvcD1NYXRoLmZsb29yKHRoaXMuX3ZpcnR1YWxTdGFydC90aGlzLl9pdGVtc1BlclJvdykqdGhpcy5fcGh5c2ljYWxBdmVyYWdlLHRoaXMuX3VwZGF0ZSgpKTowPHRoaXMuX3BoeXNpY2FsQ291bnQmJihrPXRoaXMuX2dldFJldXNhYmxlcyhwKSxwPyh0aGlzLl9waHlzaWNhbFRvcD1rLnBoeXNpY2FsVG9wLHRoaXMuX3ZpcnR1YWxTdGFydCs9ay5pbmRleGVzLmxlbmd0aCx0aGlzLl9waHlzaWNhbFN0YXJ0Kz1rLmluZGV4ZXMubGVuZ3RoKToodGhpcy5fdmlydHVhbFN0YXJ0LT1rLmluZGV4ZXMubGVuZ3RoLHRoaXMuX3BoeXNpY2FsU3RhcnQtPWsuaW5kZXhlcy5sZW5ndGgpLHRoaXMuX3VwZGF0ZShrLmluZGV4ZXMscD9udWxsOmsuaW5kZXhlcyksdGhpcy5fZGVib3VuY2UoIl9pbmNyZWFzZVBvb2xJZk5lZWRlZCIsCnRoaXMuX2luY3JlYXNlUG9vbElmTmVlZGVkLmJpbmQodGhpcywwKSxsKSl9LF9nZXRSZXVzYWJsZXM6ZnVuY3Rpb24oayl7dmFyIG09W10scD10aGlzLl9oaWRkZW5Db250ZW50U2l6ZSp0aGlzLl9yYXRpbyxxPXRoaXMuX3ZpcnR1YWxTdGFydCxyPXRoaXMuX3ZpcnR1YWxFbmQsdD10aGlzLl9waHlzaWNhbENvdW50LHY9dGhpcy5fcGh5c2ljYWxUb3ArdGhpcy5fc2Nyb2xsT2Zmc2V0O3ZhciBBPXRoaXMuX3BoeXNpY2FsQm90dG9tK3RoaXMuX3Njcm9sbE9mZnNldDt2YXIgeT10aGlzLl9zY3JvbGxUb3AseD10aGlzLl9zY3JvbGxCb3R0b207aWYoayl7dmFyIEM9dGhpcy5fcGh5c2ljYWxTdGFydDtBPXktdn1lbHNlIEM9dGhpcy5fcGh5c2ljYWxFbmQsQS09eDtmb3IoOzspe3ZhciBGPXRoaXMuX2dldFBoeXNpY2FsU2l6ZUluY3JlbWVudChDKTtBLT1GO2lmKG0ubGVuZ3RoPj10fHxBPD1wKWJyZWFrO2lmKGspe2lmKHIrbS5sZW5ndGgrMT49dGhpcy5fdmlydHVhbENvdW50KWJyZWFrOwppZih2K0Y+PXktdGhpcy5fc2Nyb2xsT2Zmc2V0KWJyZWFrO20ucHVzaChDKTt2Kz1GO0M9KEMrMSkldH1lbHNle2lmKDA+PXEtbS5sZW5ndGgpYnJlYWs7aWYodit0aGlzLl9waHlzaWNhbFNpemUtRjw9eClicmVhazttLnB1c2goQyk7di09RjtDPTA9PT1DP3QtMTpDLTF9fXJldHVybntpbmRleGVzOm0scGh5c2ljYWxUb3A6di10aGlzLl9zY3JvbGxPZmZzZXR9fSxfdXBkYXRlOmZ1bmN0aW9uKGssbSl7aWYoIShrJiYwPT09ay5sZW5ndGh8fDA9PT10aGlzLl9waHlzaWNhbENvdW50KSl7dGhpcy5fbWFuYWdlRm9jdXMoKTt0aGlzLl9hc3NpZ25Nb2RlbHMoayk7dGhpcy5fdXBkYXRlTWV0cmljcyhrKTtpZihtKWZvcig7bS5sZW5ndGg7KWs9bS5wb3AoKSx0aGlzLl9waHlzaWNhbFRvcC09dGhpcy5fZ2V0UGh5c2ljYWxTaXplSW5jcmVtZW50KGspO3RoaXMuX3Bvc2l0aW9uSXRlbXMoKTt0aGlzLl91cGRhdGVTY3JvbGxlclNpemUoKX19LF9jcmVhdGVQb29sOmZ1bmN0aW9uKGspe3RoaXMuX2Vuc3VyZVRlbXBsYXRpemVkKCk7CnZhciBtLHA9QXJyYXkoayk7Zm9yKG09MDttPGs7bSsrKXt2YXIgcT10aGlzLnN0YW1wKG51bGwpO3BbbV09cS5yb290LnF1ZXJ5U2VsZWN0b3IoIioiKTt0aGlzLl9pdGVtc1BhcmVudC5hcHBlbmRDaGlsZChxLnJvb3QpfXJldHVybiBwfSxfaXNDbGllbnRGdWxsOmZ1bmN0aW9uKCl7cmV0dXJuIDAhPXRoaXMuX3Njcm9sbEJvdHRvbSYmdGhpcy5fcGh5c2ljYWxCb3R0b20tMT49dGhpcy5fc2Nyb2xsQm90dG9tJiZ0aGlzLl9waHlzaWNhbFRvcDw9dGhpcy5fc2Nyb2xsUG9zaXRpb259LF9pbmNyZWFzZVBvb2xJZk5lZWRlZDpmdW5jdGlvbihrKXtrPXRoaXMuX2NsYW1wKHRoaXMuX3BoeXNpY2FsQ291bnQraywzLHRoaXMuX3ZpcnR1YWxDb3VudC10aGlzLl92aXJ0dWFsU3RhcnQpO2s9dGhpcy5fY29udmVydEluZGV4VG9Db21wbGV0ZVJvdyhrKTtpZih0aGlzLmdyaWQpe3ZhciBtPWsldGhpcy5faXRlbXNQZXJSb3c7bSYmay1tPD10aGlzLl9waHlzaWNhbENvdW50JiYoays9dGhpcy5faXRlbXNQZXJSb3cpOwprLT1tfWstPXRoaXMuX3BoeXNpY2FsQ291bnQ7bT1NYXRoLnJvdW5kKC41KnRoaXMuX3BoeXNpY2FsQ291bnQpO2lmKCEoMD5rKSl7aWYoMDxrKXttPXdpbmRvdy5wZXJmb3JtYW5jZS5ub3coKTtbXS5wdXNoLmFwcGx5KHRoaXMuX3BoeXNpY2FsSXRlbXMsdGhpcy5fY3JlYXRlUG9vbChrKSk7Zm9yKHZhciBwPTA7cDxrO3ArKyl0aGlzLl9waHlzaWNhbFNpemVzLnB1c2goMCk7dGhpcy5fcGh5c2ljYWxDb3VudCs9azt0aGlzLl9waHlzaWNhbFN0YXJ0PnRoaXMuX3BoeXNpY2FsRW5kJiZ0aGlzLl9pc0luZGV4UmVuZGVyZWQodGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleCkmJnRoaXMuX2dldFBoeXNpY2FsSW5kZXgodGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleCk8dGhpcy5fcGh5c2ljYWxFbmQmJih0aGlzLl9waHlzaWNhbFN0YXJ0Kz1rKTt0aGlzLl91cGRhdGUoKTt0aGlzLl90ZW1wbGF0ZUNvc3Q9KHdpbmRvdy5wZXJmb3JtYW5jZS5ub3coKS1tKS9rO209TWF0aC5yb3VuZCguNSoKdGhpcy5fcGh5c2ljYWxDb3VudCl9dGhpcy5fdmlydHVhbEVuZD49dGhpcy5fdmlydHVhbENvdW50LTF8fDA9PT1tfHwodGhpcy5faXNDbGllbnRGdWxsKCk/dGhpcy5fcGh5c2ljYWxTaXplPHRoaXMuX29wdFBoeXNpY2FsU2l6ZSYmdGhpcy5fZGVib3VuY2UoIl9pbmNyZWFzZVBvb2xJZk5lZWRlZCIsdGhpcy5faW5jcmVhc2VQb29sSWZOZWVkZWQuYmluZCh0aGlzLHRoaXMuX2NsYW1wKE1hdGgucm91bmQoNTAvdGhpcy5fdGVtcGxhdGVDb3N0KSwxLG0pKSxnKTp0aGlzLl9kZWJvdW5jZSgiX2luY3JlYXNlUG9vbElmTmVlZGVkIix0aGlzLl9pbmNyZWFzZVBvb2xJZk5lZWRlZC5iaW5kKHRoaXMsbSksbCkpfX0sX3JlbmRlcjpmdW5jdGlvbigpe2lmKHRoaXMuaXNBdHRhY2hlZCYmdGhpcy5faXNWaXNpYmxlKWlmKDAhPT10aGlzLl9waHlzaWNhbENvdW50KXt2YXIgaz10aGlzLl9nZXRSZXVzYWJsZXMoITApO3RoaXMuX3BoeXNpY2FsVG9wPWsucGh5c2ljYWxUb3A7dGhpcy5fdmlydHVhbFN0YXJ0Kz0Kay5pbmRleGVzLmxlbmd0aDt0aGlzLl9waHlzaWNhbFN0YXJ0Kz1rLmluZGV4ZXMubGVuZ3RoO3RoaXMuX3VwZGF0ZShrLmluZGV4ZXMpO3RoaXMuX3VwZGF0ZSgpO3RoaXMuX2luY3JlYXNlUG9vbElmTmVlZGVkKDApfWVsc2UgMDx0aGlzLl92aXJ0dWFsQ291bnQmJih0aGlzLnVwZGF0ZVZpZXdwb3J0Qm91bmRhcmllcygpLHRoaXMuX2luY3JlYXNlUG9vbElmTmVlZGVkKDMpKX0sX2Vuc3VyZVRlbXBsYXRpemVkOmZ1bmN0aW9uKCl7aWYoIXRoaXMuY3Rvcil7KHRoaXMuX3VzZXJUZW1wbGF0ZT10aGlzLnF1ZXJ5RWZmZWN0aXZlQ2hpbGRyZW4oInRlbXBsYXRlIikpfHxjb25zb2xlLndhcm4oImlyb24tbGlzdCByZXF1aXJlcyBhIHRlbXBsYXRlIHRvIGJlIHByb3ZpZGVkIGluIGxpZ2h0LWRvbSIpO3ZhciBrPXtfX2tleV9fOiEwfTtrW3RoaXMuYXNdPSEwO2tbdGhpcy5pbmRleEFzXT0hMDtrW3RoaXMuc2VsZWN0ZWRBc109ITA7ay50YWJJbmRleD0hMDt0aGlzLl9pbnN0YW5jZVByb3BzPQprO3RoaXMudGVtcGxhdGl6ZSh0aGlzLl91c2VyVGVtcGxhdGUsdGhpcy5tdXRhYmxlRGF0YSl9fSxfZ3JpZENoYW5nZWQ6ZnVuY3Rpb24oayxtKXsidW5kZWZpbmVkIiE9PXR5cGVvZiBtJiYodGhpcy5ub3RpZnlSZXNpemUoKSxQb2x5bWVyLmZsdXNoP1BvbHltZXIuZmx1c2goKTpQb2x5bWVyLmRvbS5mbHVzaCgpLGsmJnRoaXMuX3VwZGF0ZUdyaWRNZXRyaWNzKCkpfSxfaXRlbXNDaGFuZ2VkOmZ1bmN0aW9uKGspe2lmKCJpdGVtcyI9PT1rLnBhdGgpdGhpcy5fcGh5c2ljYWxUb3A9dGhpcy5fdmlydHVhbFN0YXJ0PTAsdGhpcy5fdmlydHVhbENvdW50PXRoaXMuaXRlbXM/dGhpcy5pdGVtcy5sZW5ndGg6MCx0aGlzLl9jb2xsZWN0aW9uPXRoaXMuaXRlbXMmJlBvbHltZXIuQ29sbGVjdGlvbj9Qb2x5bWVyLkNvbGxlY3Rpb24uZ2V0KHRoaXMuaXRlbXMpOm51bGwsdGhpcy5fcGh5c2ljYWxJbmRleEZvcktleT17fSx0aGlzLl9sYXN0VmlzaWJsZUluZGV4VmFsPXRoaXMuX2ZpcnN0VmlzaWJsZUluZGV4VmFsPQpudWxsLHRoaXMuX3BoeXNpY2FsQ291bnQ9dGhpcy5fcGh5c2ljYWxDb3VudHx8MCx0aGlzLl9waHlzaWNhbEl0ZW1zPXRoaXMuX3BoeXNpY2FsSXRlbXN8fFtdLHRoaXMuX3BoeXNpY2FsU2l6ZXM9dGhpcy5fcGh5c2ljYWxTaXplc3x8W10sdGhpcy5fcGh5c2ljYWxTdGFydD0wLHRoaXMuX3Njcm9sbFRvcD50aGlzLl9zY3JvbGxPZmZzZXQmJnRoaXMuX3Jlc2V0U2Nyb2xsUG9zaXRpb24oMCksdGhpcy5fcmVtb3ZlRm9jdXNlZEl0ZW0oKSx0aGlzLl9kZWJvdW5jZSgiX3JlbmRlciIsdGhpcy5fcmVuZGVyLGYpO2Vsc2UgaWYoIml0ZW1zLnNwbGljZXMiPT09ay5wYXRoKXt0aGlzLl9hZGp1c3RWaXJ0dWFsSW5kZXgoay52YWx1ZS5pbmRleFNwbGljZXMpO3RoaXMuX3ZpcnR1YWxDb3VudD10aGlzLml0ZW1zP3RoaXMuaXRlbXMubGVuZ3RoOjA7aWYoay52YWx1ZS5pbmRleFNwbGljZXMuc29tZShmdW5jdGlvbihwKXtyZXR1cm4gMDxwLmFkZGVkQ291bnR8fDA8cC5yZW1vdmVkLmxlbmd0aH0pKXt2YXIgbT0KdGhpcy5fZ2V0QWN0aXZlRWxlbWVudCgpO3RoaXMuY29udGFpbnMobSkmJm0uYmx1cigpfWs9ay52YWx1ZS5pbmRleFNwbGljZXMuc29tZShmdW5jdGlvbihwKXtyZXR1cm4gcC5pbmRleCtwLmFkZGVkQ291bnQ+PXRoaXMuX3ZpcnR1YWxTdGFydCYmcC5pbmRleDw9dGhpcy5fdmlydHVhbEVuZH0sdGhpcyk7dGhpcy5faXNDbGllbnRGdWxsKCkmJiFrfHx0aGlzLl9kZWJvdW5jZSgiX3JlbmRlciIsdGhpcy5fcmVuZGVyLGYpfWVsc2UiaXRlbXMubGVuZ3RoIiE9PWsucGF0aCYmdGhpcy5fZm9yd2FyZEl0ZW1QYXRoKGsucGF0aCxrLnZhbHVlKX0sX2ZvcndhcmRJdGVtUGF0aDpmdW5jdGlvbihrLG0pe2s9ay5zbGljZSg2KTt2YXIgcD1rLmluZGV4T2YoIi4iKTstMT09PXAmJihwPWsubGVuZ3RoKTt2YXIgcSxyPXRoaXMubW9kZWxGb3JFbGVtZW50KHRoaXMuX29mZnNjcmVlbkZvY3VzZWRJdGVtKTtpZihkKXt2YXIgdD1wYXJzZUludChrLnN1YnN0cmluZygwLHApLDEwKTtpZihxPXRoaXMuX2lzSW5kZXhSZW5kZXJlZCh0KSl7dmFyIHY9CnRoaXMuX2dldFBoeXNpY2FsSW5kZXgodCk7dmFyIEE9dGhpcy5tb2RlbEZvckVsZW1lbnQodGhpcy5fcGh5c2ljYWxJdGVtc1t2XSl9ZWxzZSByJiYoQT1yKTtpZighQXx8QVt0aGlzLmluZGV4QXNdIT09dClyZXR1cm59ZWxzZSBpZih0PWsuc3Vic3RyaW5nKDAscCksciYmci5fX2tleV9fPT09dClBPXI7ZWxzZSBpZih2PXRoaXMuX3BoeXNpY2FsSW5kZXhGb3JLZXlbdF0sQT10aGlzLm1vZGVsRm9yRWxlbWVudCh0aGlzLl9waHlzaWNhbEl0ZW1zW3ZdKSwhQXx8QS5fX2tleV9fIT09dClyZXR1cm47az1rLnN1YnN0cmluZyhwKzEpO2s9dGhpcy5hcysoaz8iLiIrazoiIik7ZD9BLl9zZXRQZW5kaW5nUHJvcGVydHlPclBhdGgoayxtLCExLCEwKTpBLm5vdGlmeVBhdGgoayxtLCEwKTtBLl9mbHVzaFByb3BlcnRpZXMmJkEuX2ZsdXNoUHJvcGVydGllcyghMCk7cSYmKHRoaXMuX3VwZGF0ZU1ldHJpY3MoW3ZdKSx0aGlzLl9wb3NpdGlvbkl0ZW1zKCksdGhpcy5fdXBkYXRlU2Nyb2xsZXJTaXplKCkpfSwKX2FkanVzdFZpcnR1YWxJbmRleDpmdW5jdGlvbihrKXtrLmZvckVhY2goZnVuY3Rpb24obSl7bS5yZW1vdmVkLmZvckVhY2godGhpcy5fcmVtb3ZlSXRlbSx0aGlzKTttLmluZGV4PHRoaXMuX3ZpcnR1YWxTdGFydCYmKG09TWF0aC5tYXgobS5hZGRlZENvdW50LW0ucmVtb3ZlZC5sZW5ndGgsbS5pbmRleC10aGlzLl92aXJ0dWFsU3RhcnQpLHRoaXMuX3ZpcnR1YWxTdGFydCs9bSwwPD10aGlzLl9mb2N1c2VkVmlydHVhbEluZGV4JiYodGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleCs9bSkpfSx0aGlzKX0sX3JlbW92ZUl0ZW06ZnVuY3Rpb24oayl7dGhpcy4kLnNlbGVjdG9yLmRlc2VsZWN0KGspO3RoaXMuX2ZvY3VzZWRJdGVtJiZ0aGlzLm1vZGVsRm9yRWxlbWVudCh0aGlzLl9mb2N1c2VkSXRlbSlbdGhpcy5hc109PT1rJiZ0aGlzLl9yZW1vdmVGb2N1c2VkSXRlbSgpfSxfaXRlcmF0ZUl0ZW1zOmZ1bmN0aW9uKGssbSl7dmFyIHAscTtpZigyPT09YXJndW1lbnRzLmxlbmd0aCYmbSlmb3IocT0KMDtxPG0ubGVuZ3RoO3ErKyl7dmFyIHI9bVtxXTt2YXIgdD10aGlzLl9jb21wdXRlVmlkeChyKTtpZihudWxsIT0ocD1rLmNhbGwodGhpcyxyLHQpKSlyZXR1cm4gcH1lbHNle3I9dGhpcy5fcGh5c2ljYWxTdGFydDtmb3IodD10aGlzLl92aXJ0dWFsU3RhcnQ7cjx0aGlzLl9waHlzaWNhbENvdW50O3IrKyx0KyspaWYobnVsbCE9KHA9ay5jYWxsKHRoaXMscix0KSkpcmV0dXJuIHA7Zm9yKHI9MDtyPHRoaXMuX3BoeXNpY2FsU3RhcnQ7cisrLHQrKylpZihudWxsIT0ocD1rLmNhbGwodGhpcyxyLHQpKSlyZXR1cm4gcH19LF9jb21wdXRlVmlkeDpmdW5jdGlvbihrKXtyZXR1cm4gaz49dGhpcy5fcGh5c2ljYWxTdGFydD90aGlzLl92aXJ0dWFsU3RhcnQrKGstdGhpcy5fcGh5c2ljYWxTdGFydCk6dGhpcy5fdmlydHVhbFN0YXJ0Kyh0aGlzLl9waHlzaWNhbENvdW50LXRoaXMuX3BoeXNpY2FsU3RhcnQpK2t9LF9hc3NpZ25Nb2RlbHM6ZnVuY3Rpb24oayl7dGhpcy5faXRlcmF0ZUl0ZW1zKGZ1bmN0aW9uKG0sCnApe3ZhciBxPXRoaXMuX3BoeXNpY2FsSXRlbXNbbV0scj10aGlzLml0ZW1zJiZ0aGlzLml0ZW1zW3BdO2lmKG51bGwhPXIpe3ZhciB0PXRoaXMubW9kZWxGb3JFbGVtZW50KHEpO3QuX19rZXlfXz10aGlzLl9jb2xsZWN0aW9uP3RoaXMuX2NvbGxlY3Rpb24uZ2V0S2V5KHIpOm51bGw7dGhpcy5fZm9yd2FyZFByb3BlcnR5KHQsdGhpcy5hcyxyKTt0aGlzLl9mb3J3YXJkUHJvcGVydHkodCx0aGlzLnNlbGVjdGVkQXMsdGhpcy4kLnNlbGVjdG9yLmlzU2VsZWN0ZWQocikpO3RoaXMuX2ZvcndhcmRQcm9wZXJ0eSh0LHRoaXMuaW5kZXhBcyxwKTt0aGlzLl9mb3J3YXJkUHJvcGVydHkodCwidGFiSW5kZXgiLHRoaXMuX2ZvY3VzZWRWaXJ0dWFsSW5kZXg9PT1wPzA6LTEpO3RoaXMuX3BoeXNpY2FsSW5kZXhGb3JLZXlbdC5fX2tleV9fXT1tO3QuX2ZsdXNoUHJvcGVydGllcyYmdC5fZmx1c2hQcm9wZXJ0aWVzKCEwKTtxLnJlbW92ZUF0dHJpYnV0ZSgiaGlkZGVuIil9ZWxzZSBxLnNldEF0dHJpYnV0ZSgiaGlkZGVuIiwKIiIpfSxrKX0sX3VwZGF0ZU1ldHJpY3M6ZnVuY3Rpb24oayl7UG9seW1lci5mbHVzaD9Qb2x5bWVyLmZsdXNoKCk6UG9seW1lci5kb20uZmx1c2goKTt2YXIgbT0wLHA9MCxxPXRoaXMuX3BoeXNpY2FsQXZlcmFnZUNvdW50LHI9dGhpcy5fcGh5c2ljYWxBdmVyYWdlO3RoaXMuX2l0ZXJhdGVJdGVtcyhmdW5jdGlvbih0KXtwKz10aGlzLl9waHlzaWNhbFNpemVzW3RdO3RoaXMuX3BoeXNpY2FsU2l6ZXNbdF09dGhpcy5fcGh5c2ljYWxJdGVtc1t0XS5vZmZzZXRIZWlnaHQ7bSs9dGhpcy5fcGh5c2ljYWxTaXplc1t0XTt0aGlzLl9waHlzaWNhbEF2ZXJhZ2VDb3VudCs9dGhpcy5fcGh5c2ljYWxTaXplc1t0XT8xOjB9LGspO3RoaXMuZ3JpZD8odGhpcy5fdXBkYXRlR3JpZE1ldHJpY3MoKSx0aGlzLl9waHlzaWNhbFNpemU9TWF0aC5jZWlsKHRoaXMuX3BoeXNpY2FsQ291bnQvdGhpcy5faXRlbXNQZXJSb3cpKnRoaXMuX3Jvd0hlaWdodCk6KHA9MT09PXRoaXMuX2l0ZW1zUGVyUm93P3A6Ck1hdGguY2VpbCh0aGlzLl9waHlzaWNhbENvdW50L3RoaXMuX2l0ZW1zUGVyUm93KSp0aGlzLl9yb3dIZWlnaHQsdGhpcy5fcGh5c2ljYWxTaXplPXRoaXMuX3BoeXNpY2FsU2l6ZSttLXAsdGhpcy5faXRlbXNQZXJSb3c9MSk7dGhpcy5fcGh5c2ljYWxBdmVyYWdlQ291bnQhPT1xJiYodGhpcy5fcGh5c2ljYWxBdmVyYWdlPU1hdGgucm91bmQoKHIqcSttKS90aGlzLl9waHlzaWNhbEF2ZXJhZ2VDb3VudCkpfSxfdXBkYXRlR3JpZE1ldHJpY3M6ZnVuY3Rpb24oKXt0aGlzLl9pdGVtV2lkdGg9MDx0aGlzLl9waHlzaWNhbENvdW50P3RoaXMuX3BoeXNpY2FsSXRlbXNbMF0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg6MjAwO3RoaXMuX3Jvd0hlaWdodD0wPHRoaXMuX3BoeXNpY2FsQ291bnQ/dGhpcy5fcGh5c2ljYWxJdGVtc1swXS5vZmZzZXRIZWlnaHQ6MjAwO3RoaXMuX2l0ZW1zUGVyUm93PXRoaXMuX2l0ZW1XaWR0aD9NYXRoLmZsb29yKHRoaXMuX3ZpZXdwb3J0V2lkdGgvdGhpcy5faXRlbVdpZHRoKToKdGhpcy5faXRlbXNQZXJSb3d9LF9wb3NpdGlvbkl0ZW1zOmZ1bmN0aW9uKCl7dGhpcy5fYWRqdXN0U2Nyb2xsUG9zaXRpb24oKTt2YXIgaz10aGlzLl9waHlzaWNhbFRvcDtpZih0aGlzLmdyaWQpe3ZhciBtPSh0aGlzLl92aWV3cG9ydFdpZHRoLXRoaXMuX2l0ZW1zUGVyUm93KnRoaXMuX2l0ZW1XaWR0aCkvMjt0aGlzLl9pdGVyYXRlSXRlbXMoZnVuY3Rpb24ocCxxKXt2YXIgcj1NYXRoLmZsb29yKHEldGhpcy5faXRlbXNQZXJSb3cqdGhpcy5faXRlbVdpZHRoK20pO3RoaXMuX2lzUlRMJiYocio9LTEpO3RoaXMudHJhbnNsYXRlM2QocisicHgiLGsrInB4IiwwLHRoaXMuX3BoeXNpY2FsSXRlbXNbcF0pO3RoaXMuX3Nob3VsZFJlbmRlck5leHRSb3cocSkmJihrKz10aGlzLl9yb3dIZWlnaHQpfSl9ZWxzZSB0aGlzLl9pdGVyYXRlSXRlbXMoZnVuY3Rpb24ocCl7dGhpcy50cmFuc2xhdGUzZCgwLGsrInB4IiwwLHRoaXMuX3BoeXNpY2FsSXRlbXNbcF0pO2srPXRoaXMuX3BoeXNpY2FsU2l6ZXNbcF19KX0sCl9nZXRQaHlzaWNhbFNpemVJbmNyZW1lbnQ6ZnVuY3Rpb24oayl7cmV0dXJuIHRoaXMuZ3JpZD90aGlzLl9jb21wdXRlVmlkeChrKSV0aGlzLl9pdGVtc1BlclJvdyE9PXRoaXMuX2l0ZW1zUGVyUm93LTE/MDp0aGlzLl9yb3dIZWlnaHQ6dGhpcy5fcGh5c2ljYWxTaXplc1trXX0sX3Nob3VsZFJlbmRlck5leHRSb3c6ZnVuY3Rpb24oayl7cmV0dXJuIGsldGhpcy5faXRlbXNQZXJSb3c9PT10aGlzLl9pdGVtc1BlclJvdy0xfSxfYWRqdXN0U2Nyb2xsUG9zaXRpb246ZnVuY3Rpb24oKXt2YXIgaz0wPT09dGhpcy5fdmlydHVhbFN0YXJ0P3RoaXMuX3BoeXNpY2FsVG9wOk1hdGgubWluKHRoaXMuX3Njcm9sbFBvc2l0aW9uK3RoaXMuX3BoeXNpY2FsVG9wLDApO2lmKDAhPT1rKXt0aGlzLl9waHlzaWNhbFRvcC09azt2YXIgbT10aGlzLl9zY3JvbGxUb3A7IWMmJjA8bSYmdGhpcy5fcmVzZXRTY3JvbGxQb3NpdGlvbihtLWspfX0sX3Jlc2V0U2Nyb2xsUG9zaXRpb246ZnVuY3Rpb24oayl7dGhpcy5zY3JvbGxUYXJnZXQmJgowPD1rJiYodGhpcy5fc2Nyb2xsUG9zaXRpb249dGhpcy5fc2Nyb2xsVG9wPWspfSxfdXBkYXRlU2Nyb2xsZXJTaXplOmZ1bmN0aW9uKGspe3RoaXMuX2VzdFNjcm9sbEhlaWdodD10aGlzLmdyaWQ/dGhpcy5fdmlydHVhbFJvd0NvdW50KnRoaXMuX3Jvd0hlaWdodDp0aGlzLl9waHlzaWNhbEJvdHRvbStNYXRoLm1heCh0aGlzLl92aXJ0dWFsQ291bnQtdGhpcy5fcGh5c2ljYWxDb3VudC10aGlzLl92aXJ0dWFsU3RhcnQsMCkqdGhpcy5fcGh5c2ljYWxBdmVyYWdlO2lmKChrPShrPShrPWt8fDA9PT10aGlzLl9zY3JvbGxIZWlnaHQpfHx0aGlzLl9zY3JvbGxQb3NpdGlvbj49dGhpcy5fZXN0U2Nyb2xsSGVpZ2h0LXRoaXMuX3BoeXNpY2FsU2l6ZSl8fHRoaXMuZ3JpZCYmdGhpcy4kLml0ZW1zLnN0eWxlLmhlaWdodDx0aGlzLl9lc3RTY3JvbGxIZWlnaHQpfHxNYXRoLmFicyh0aGlzLl9lc3RTY3JvbGxIZWlnaHQtdGhpcy5fc2Nyb2xsSGVpZ2h0KT49dGhpcy5fdmlld3BvcnRIZWlnaHQpdGhpcy4kLml0ZW1zLnN0eWxlLmhlaWdodD0KdGhpcy5fZXN0U2Nyb2xsSGVpZ2h0KyJweCIsdGhpcy5fc2Nyb2xsSGVpZ2h0PXRoaXMuX2VzdFNjcm9sbEhlaWdodH0sc2Nyb2xsVG9JdGVtOmZ1bmN0aW9uKGspe3JldHVybiB0aGlzLnNjcm9sbFRvSW5kZXgodGhpcy5pdGVtcy5pbmRleE9mKGspKX0sc2Nyb2xsVG9JbmRleDpmdW5jdGlvbihrKXtpZighKCJudW1iZXIiIT09dHlwZW9mIGt8fDA+a3x8az50aGlzLml0ZW1zLmxlbmd0aC0xKSYmKFBvbHltZXIuZmx1c2g/UG9seW1lci5mbHVzaCgpOlBvbHltZXIuZG9tLmZsdXNoKCksMCE9PXRoaXMuX3BoeXNpY2FsQ291bnQpKXtrPXRoaXMuX2NsYW1wKGssMCx0aGlzLl92aXJ0dWFsQ291bnQtMSk7aWYoIXRoaXMuX2lzSW5kZXhSZW5kZXJlZChrKXx8az49dGhpcy5fbWF4VmlydHVhbFN0YXJ0KXRoaXMuX3ZpcnR1YWxTdGFydD10aGlzLmdyaWQ/ay0yKnRoaXMuX2l0ZW1zUGVyUm93OmstMTt0aGlzLl9tYW5hZ2VGb2N1cygpO3RoaXMuX2Fzc2lnbk1vZGVscygpO3RoaXMuX3VwZGF0ZU1ldHJpY3MoKTsKdGhpcy5fcGh5c2ljYWxUb3A9TWF0aC5mbG9vcih0aGlzLl92aXJ0dWFsU3RhcnQvdGhpcy5faXRlbXNQZXJSb3cpKnRoaXMuX3BoeXNpY2FsQXZlcmFnZTtmb3IodmFyIG09dGhpcy5fcGh5c2ljYWxTdGFydCxwPXRoaXMuX3ZpcnR1YWxTdGFydCxxPTAscj10aGlzLl9oaWRkZW5Db250ZW50U2l6ZTtwPGsmJnE8PXI7KXErPXRoaXMuX2dldFBoeXNpY2FsU2l6ZUluY3JlbWVudChtKSxtPShtKzEpJXRoaXMuX3BoeXNpY2FsQ291bnQscCsrO3RoaXMuX3VwZGF0ZVNjcm9sbGVyU2l6ZSghMCk7dGhpcy5fcG9zaXRpb25JdGVtcygpO3RoaXMuX3Jlc2V0U2Nyb2xsUG9zaXRpb24odGhpcy5fcGh5c2ljYWxUb3ArdGhpcy5fc2Nyb2xsT2Zmc2V0K3EpO3RoaXMuX2luY3JlYXNlUG9vbElmTmVlZGVkKDApO3RoaXMuX2xhc3RWaXNpYmxlSW5kZXhWYWw9dGhpcy5fZmlyc3RWaXNpYmxlSW5kZXhWYWw9bnVsbH19LF9yZXNldEF2ZXJhZ2U6ZnVuY3Rpb24oKXt0aGlzLl9waHlzaWNhbEF2ZXJhZ2VDb3VudD0KdGhpcy5fcGh5c2ljYWxBdmVyYWdlPTB9LF9yZXNpemVIYW5kbGVyOmZ1bmN0aW9uKCl7dGhpcy5fZGVib3VuY2UoIl9yZW5kZXIiLGZ1bmN0aW9uKCl7dGhpcy5fbGFzdFZpc2libGVJbmRleFZhbD10aGlzLl9maXJzdFZpc2libGVJbmRleFZhbD1udWxsO3RoaXMudXBkYXRlVmlld3BvcnRCb3VuZGFyaWVzKCk7dGhpcy5faXNWaXNpYmxlPyh0aGlzLnRvZ2dsZVNjcm9sbExpc3RlbmVyKCEwKSx0aGlzLl9yZXNldEF2ZXJhZ2UoKSx0aGlzLl9yZW5kZXIoKSk6dGhpcy50b2dnbGVTY3JvbGxMaXN0ZW5lcighMSl9LGYpfSxzZWxlY3RJdGVtOmZ1bmN0aW9uKGspe3JldHVybiB0aGlzLnNlbGVjdEluZGV4KHRoaXMuaXRlbXMuaW5kZXhPZihrKSl9LHNlbGVjdEluZGV4OmZ1bmN0aW9uKGspe2lmKCEoMD5rfHxrPj10aGlzLl92aXJ0dWFsQ291bnQpKXshdGhpcy5tdWx0aVNlbGVjdGlvbiYmdGhpcy5zZWxlY3RlZEl0ZW0mJnRoaXMuY2xlYXJTZWxlY3Rpb24oKTtpZih0aGlzLl9pc0luZGV4UmVuZGVyZWQoaykpe3ZhciBtPQp0aGlzLm1vZGVsRm9yRWxlbWVudCh0aGlzLl9waHlzaWNhbEl0ZW1zW3RoaXMuX2dldFBoeXNpY2FsSW5kZXgoayldKTttJiYobVt0aGlzLnNlbGVjdGVkQXNdPSEwKTt0aGlzLnVwZGF0ZVNpemVGb3JJbmRleChrKX10aGlzLiQuc2VsZWN0b3Iuc2VsZWN0SW5kZXg/dGhpcy4kLnNlbGVjdG9yLnNlbGVjdEluZGV4KGspOnRoaXMuJC5zZWxlY3Rvci5zZWxlY3QodGhpcy5pdGVtc1trXSl9fSxkZXNlbGVjdEl0ZW06ZnVuY3Rpb24oayl7cmV0dXJuIHRoaXMuZGVzZWxlY3RJbmRleCh0aGlzLml0ZW1zLmluZGV4T2YoaykpfSxkZXNlbGVjdEluZGV4OmZ1bmN0aW9uKGspezA+a3x8az49dGhpcy5fdmlydHVhbENvdW50fHwodGhpcy5faXNJbmRleFJlbmRlcmVkKGspJiYodGhpcy5tb2RlbEZvckVsZW1lbnQodGhpcy5fcGh5c2ljYWxJdGVtc1t0aGlzLl9nZXRQaHlzaWNhbEluZGV4KGspXSlbdGhpcy5zZWxlY3RlZEFzXT0hMSx0aGlzLnVwZGF0ZVNpemVGb3JJbmRleChrKSksdGhpcy4kLnNlbGVjdG9yLmRlc2VsZWN0SW5kZXg/CnRoaXMuJC5zZWxlY3Rvci5kZXNlbGVjdEluZGV4KGspOnRoaXMuJC5zZWxlY3Rvci5kZXNlbGVjdCh0aGlzLml0ZW1zW2tdKSl9LHRvZ2dsZVNlbGVjdGlvbkZvckl0ZW06ZnVuY3Rpb24oayl7cmV0dXJuIHRoaXMudG9nZ2xlU2VsZWN0aW9uRm9ySW5kZXgodGhpcy5pdGVtcy5pbmRleE9mKGspKX0sdG9nZ2xlU2VsZWN0aW9uRm9ySW5kZXg6ZnVuY3Rpb24oayl7KHRoaXMuJC5zZWxlY3Rvci5pc0luZGV4U2VsZWN0ZWQ/dGhpcy4kLnNlbGVjdG9yLmlzSW5kZXhTZWxlY3RlZChrKTp0aGlzLiQuc2VsZWN0b3IuaXNTZWxlY3RlZCh0aGlzLml0ZW1zW2tdKSk/dGhpcy5kZXNlbGVjdEluZGV4KGspOnRoaXMuc2VsZWN0SW5kZXgoayl9LGNsZWFyU2VsZWN0aW9uOmZ1bmN0aW9uKCl7dGhpcy5faXRlcmF0ZUl0ZW1zKGZ1bmN0aW9uKGspe3RoaXMubW9kZWxGb3JFbGVtZW50KHRoaXMuX3BoeXNpY2FsSXRlbXNba10pW3RoaXMuc2VsZWN0ZWRBc109ITF9KTt0aGlzLiQuc2VsZWN0b3IuY2xlYXJTZWxlY3Rpb24oKX0sCl9zZWxlY3Rpb25FbmFibGVkQ2hhbmdlZDpmdW5jdGlvbihrKXsoaz90aGlzLmxpc3Rlbjp0aGlzLnVubGlzdGVuKS5jYWxsKHRoaXMsdGhpcywidGFwIiwiX3NlbGVjdGlvbkhhbmRsZXIiKX0sX3NlbGVjdGlvbkhhbmRsZXI6ZnVuY3Rpb24oayl7dmFyIG09dGhpcy5tb2RlbEZvckVsZW1lbnQoay50YXJnZXQpO2lmKG0pe3ZhciBwPVBvbHltZXIuZG9tKGspLnBhdGhbMF07az10aGlzLl9nZXRBY3RpdmVFbGVtZW50KCk7dmFyIHE9dGhpcy5fcGh5c2ljYWxJdGVtc1t0aGlzLl9nZXRQaHlzaWNhbEluZGV4KG1bdGhpcy5pbmRleEFzXSldO2lmKCJpbnB1dCIhPT1wLmxvY2FsTmFtZSYmImJ1dHRvbiIhPT1wLmxvY2FsTmFtZSYmInNlbGVjdCIhPT1wLmxvY2FsTmFtZSl7cD1tLnRhYkluZGV4O20udGFiSW5kZXg9LTEwMDt2YXIgcj1rP2sudGFiSW5kZXg6LTE7bS50YWJJbmRleD1wO2smJnEhPT1rJiZxLmNvbnRhaW5zKGspJiYtMTAwIT09cnx8dGhpcy50b2dnbGVTZWxlY3Rpb25Gb3JJdGVtKG1bdGhpcy5hc10pfX19LApfbXVsdGlTZWxlY3Rpb25DaGFuZ2VkOmZ1bmN0aW9uKGspe3RoaXMuY2xlYXJTZWxlY3Rpb24oKTt0aGlzLiQuc2VsZWN0b3IubXVsdGk9a30sdXBkYXRlU2l6ZUZvckl0ZW06ZnVuY3Rpb24oayl7cmV0dXJuIHRoaXMudXBkYXRlU2l6ZUZvckluZGV4KHRoaXMuaXRlbXMuaW5kZXhPZihrKSl9LHVwZGF0ZVNpemVGb3JJbmRleDpmdW5jdGlvbihrKXtpZighdGhpcy5faXNJbmRleFJlbmRlcmVkKGspKXJldHVybiBudWxsO3RoaXMuX3VwZGF0ZU1ldHJpY3MoW3RoaXMuX2dldFBoeXNpY2FsSW5kZXgoayldKTt0aGlzLl9wb3NpdGlvbkl0ZW1zKCk7cmV0dXJuIG51bGx9LF9tYW5hZ2VGb2N1czpmdW5jdGlvbigpe3ZhciBrPXRoaXMuX2ZvY3VzZWRWaXJ0dWFsSW5kZXg7MDw9ayYmazx0aGlzLl92aXJ0dWFsQ291bnQ/dGhpcy5faXNJbmRleFJlbmRlcmVkKGspP3RoaXMuX3Jlc3RvcmVGb2N1c2VkSXRlbSgpOnRoaXMuX2NyZWF0ZUZvY3VzQmFja2ZpbGxJdGVtKCk6MDx0aGlzLl92aXJ0dWFsQ291bnQmJgowPHRoaXMuX3BoeXNpY2FsQ291bnQmJih0aGlzLl9mb2N1c2VkUGh5c2ljYWxJbmRleD10aGlzLl9waHlzaWNhbFN0YXJ0LHRoaXMuX2ZvY3VzZWRWaXJ0dWFsSW5kZXg9dGhpcy5fdmlydHVhbFN0YXJ0LHRoaXMuX2ZvY3VzZWRJdGVtPXRoaXMuX3BoeXNpY2FsSXRlbXNbdGhpcy5fcGh5c2ljYWxTdGFydF0pfSxfY29udmVydEluZGV4VG9Db21wbGV0ZVJvdzpmdW5jdGlvbihrKXt0aGlzLl9pdGVtc1BlclJvdz10aGlzLl9pdGVtc1BlclJvd3x8MTtyZXR1cm4gdGhpcy5ncmlkP01hdGguY2VpbChrL3RoaXMuX2l0ZW1zUGVyUm93KSp0aGlzLl9pdGVtc1BlclJvdzprfSxfaXNJbmRleFJlbmRlcmVkOmZ1bmN0aW9uKGspe3JldHVybiBrPj10aGlzLl92aXJ0dWFsU3RhcnQmJms8PXRoaXMuX3ZpcnR1YWxFbmR9LF9pc0luZGV4VmlzaWJsZTpmdW5jdGlvbihrKXtyZXR1cm4gaz49dGhpcy5maXJzdFZpc2libGVJbmRleCYmazw9dGhpcy5sYXN0VmlzaWJsZUluZGV4fSxfZ2V0UGh5c2ljYWxJbmRleDpmdW5jdGlvbihrKXtyZXR1cm4gZD8KKHRoaXMuX3BoeXNpY2FsU3RhcnQrKGstdGhpcy5fdmlydHVhbFN0YXJ0KSkldGhpcy5fcGh5c2ljYWxDb3VudDp0aGlzLl9waHlzaWNhbEluZGV4Rm9yS2V5W3RoaXMuX2NvbGxlY3Rpb24uZ2V0S2V5KHRoaXMuaXRlbXNba10pXX0sZm9jdXNJdGVtOmZ1bmN0aW9uKGspe3RoaXMuX2ZvY3VzUGh5c2ljYWxJdGVtKGspfSxfZm9jdXNQaHlzaWNhbEl0ZW06ZnVuY3Rpb24oayl7aWYoISgwPmt8fGs+PXRoaXMuX3ZpcnR1YWxDb3VudCkpe3RoaXMuX3Jlc3RvcmVGb2N1c2VkSXRlbSgpO3RoaXMuX2lzSW5kZXhSZW5kZXJlZChrKXx8dGhpcy5zY3JvbGxUb0luZGV4KGspO3ZhciBtPXRoaXMuX3BoeXNpY2FsSXRlbXNbdGhpcy5fZ2V0UGh5c2ljYWxJbmRleChrKV0scD10aGlzLm1vZGVsRm9yRWxlbWVudChtKSxxO3AudGFiSW5kZXg9LTEwMDstMTAwPT09bS50YWJJbmRleCYmKHE9bSk7cXx8KHE9UG9seW1lci5kb20obSkucXVlcnlTZWxlY3RvcignW3RhYmluZGV4XHgzZCItMTAwIl0nKSk7CnAudGFiSW5kZXg9MDt0aGlzLl9mb2N1c2VkVmlydHVhbEluZGV4PWs7cSYmcS5mb2N1cygpfX0sX3JlbW92ZUZvY3VzZWRJdGVtOmZ1bmN0aW9uKCl7dGhpcy5fb2Zmc2NyZWVuRm9jdXNlZEl0ZW0mJnRoaXMuX2l0ZW1zUGFyZW50LnJlbW92ZUNoaWxkKHRoaXMuX29mZnNjcmVlbkZvY3VzZWRJdGVtKTt0aGlzLl9mb2N1c2VkSXRlbT10aGlzLl9mb2N1c0JhY2tmaWxsSXRlbT10aGlzLl9vZmZzY3JlZW5Gb2N1c2VkSXRlbT1udWxsO3RoaXMuX2ZvY3VzZWRQaHlzaWNhbEluZGV4PXRoaXMuX2ZvY3VzZWRWaXJ0dWFsSW5kZXg9LTF9LF9jcmVhdGVGb2N1c0JhY2tmaWxsSXRlbTpmdW5jdGlvbigpe3ZhciBrPXRoaXMuX2ZvY3VzZWRQaHlzaWNhbEluZGV4O2lmKCEodGhpcy5fb2Zmc2NyZWVuRm9jdXNlZEl0ZW18fDA+dGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleCkpe2lmKCF0aGlzLl9mb2N1c0JhY2tmaWxsSXRlbSl7dmFyIG09dGhpcy5zdGFtcChudWxsKTt0aGlzLl9mb2N1c0JhY2tmaWxsSXRlbT0KbS5yb290LnF1ZXJ5U2VsZWN0b3IoIioiKTt0aGlzLl9pdGVtc1BhcmVudC5hcHBlbmRDaGlsZChtLnJvb3QpfXRoaXMuX29mZnNjcmVlbkZvY3VzZWRJdGVtPXRoaXMuX3BoeXNpY2FsSXRlbXNba107dGhpcy5tb2RlbEZvckVsZW1lbnQodGhpcy5fb2Zmc2NyZWVuRm9jdXNlZEl0ZW0pLnRhYkluZGV4PTA7dGhpcy5fcGh5c2ljYWxJdGVtc1trXT10aGlzLl9mb2N1c0JhY2tmaWxsSXRlbTt0aGlzLl9mb2N1c2VkUGh5c2ljYWxJbmRleD1rO3RoaXMudHJhbnNsYXRlM2QoMCwiLTEwMDAwcHgiLDAsdGhpcy5fb2Zmc2NyZWVuRm9jdXNlZEl0ZW0pfX0sX3Jlc3RvcmVGb2N1c2VkSXRlbTpmdW5jdGlvbigpe2lmKHRoaXMuX29mZnNjcmVlbkZvY3VzZWRJdGVtJiYhKDA+dGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleCkpe3RoaXMuX2Fzc2lnbk1vZGVscygpO3ZhciBrPXRoaXMuX2ZvY3VzZWRQaHlzaWNhbEluZGV4PXRoaXMuX2dldFBoeXNpY2FsSW5kZXgodGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleCksCm09dGhpcy5fcGh5c2ljYWxJdGVtc1trXTtpZihtKXt2YXIgcD10aGlzLm1vZGVsRm9yRWxlbWVudChtKSxxPXRoaXMubW9kZWxGb3JFbGVtZW50KHRoaXMuX29mZnNjcmVlbkZvY3VzZWRJdGVtKTtwW3RoaXMuYXNdPT09cVt0aGlzLmFzXT8odGhpcy5fZm9jdXNCYWNrZmlsbEl0ZW09bSxwLnRhYkluZGV4PS0xLHRoaXMuX3BoeXNpY2FsSXRlbXNba109dGhpcy5fb2Zmc2NyZWVuRm9jdXNlZEl0ZW0sdGhpcy50cmFuc2xhdGUzZCgwLCItMTAwMDBweCIsMCx0aGlzLl9mb2N1c0JhY2tmaWxsSXRlbSkpOih0aGlzLl9yZW1vdmVGb2N1c2VkSXRlbSgpLHRoaXMuX2ZvY3VzQmFja2ZpbGxJdGVtPW51bGwpO3RoaXMuX29mZnNjcmVlbkZvY3VzZWRJdGVtPW51bGx9fX0sX2RpZEZvY3VzOmZ1bmN0aW9uKGspe2s9dGhpcy5tb2RlbEZvckVsZW1lbnQoay50YXJnZXQpO3ZhciBtPXRoaXMubW9kZWxGb3JFbGVtZW50KHRoaXMuX2ZvY3VzZWRJdGVtKSxwPW51bGwhPT10aGlzLl9vZmZzY3JlZW5Gb2N1c2VkSXRlbSwKcT10aGlzLl9mb2N1c2VkVmlydHVhbEluZGV4O2smJihtPT09az90aGlzLl9pc0luZGV4VmlzaWJsZShxKXx8dGhpcy5zY3JvbGxUb0luZGV4KHEpOih0aGlzLl9yZXN0b3JlRm9jdXNlZEl0ZW0oKSxtJiYobS50YWJJbmRleD0tMSksay50YWJJbmRleD0wLHRoaXMuX2ZvY3VzZWRWaXJ0dWFsSW5kZXg9cT1rW3RoaXMuaW5kZXhBc10sdGhpcy5fZm9jdXNlZFBoeXNpY2FsSW5kZXg9dGhpcy5fZ2V0UGh5c2ljYWxJbmRleChxKSx0aGlzLl9mb2N1c2VkSXRlbT10aGlzLl9waHlzaWNhbEl0ZW1zW3RoaXMuX2ZvY3VzZWRQaHlzaWNhbEluZGV4XSxwJiYhdGhpcy5fb2Zmc2NyZWVuRm9jdXNlZEl0ZW0mJnRoaXMuX3VwZGF0ZSgpKSl9LF9rZXlkb3duSGFuZGxlcjpmdW5jdGlvbihrKXtzd2l0Y2goay5rZXlDb2RlKXtjYXNlIDQwOnRoaXMuX2ZvY3VzZWRWaXJ0dWFsSW5kZXg8dGhpcy5fdmlydHVhbENvdW50LTEmJmsucHJldmVudERlZmF1bHQoKTt0aGlzLl9mb2N1c1BoeXNpY2FsSXRlbSh0aGlzLl9mb2N1c2VkVmlydHVhbEluZGV4KwoodGhpcy5ncmlkP3RoaXMuX2l0ZW1zUGVyUm93OjEpKTticmVhaztjYXNlIDM5OnRoaXMuZ3JpZCYmdGhpcy5fZm9jdXNQaHlzaWNhbEl0ZW0odGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleCsodGhpcy5faXNSVEw/LTE6MSkpO2JyZWFrO2Nhc2UgMzg6MDx0aGlzLl9mb2N1c2VkVmlydHVhbEluZGV4JiZrLnByZXZlbnREZWZhdWx0KCk7dGhpcy5fZm9jdXNQaHlzaWNhbEl0ZW0odGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleC0odGhpcy5ncmlkP3RoaXMuX2l0ZW1zUGVyUm93OjEpKTticmVhaztjYXNlIDM3OnRoaXMuZ3JpZCYmdGhpcy5fZm9jdXNQaHlzaWNhbEl0ZW0odGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleCsodGhpcy5faXNSVEw/MTotMSkpO2JyZWFrO2Nhc2UgMTM6dGhpcy5fZm9jdXNQaHlzaWNhbEl0ZW0odGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleCksdGhpcy5zZWxlY3Rpb25FbmFibGVkJiZ0aGlzLl9zZWxlY3Rpb25IYW5kbGVyKGspfX0sX2NsYW1wOmZ1bmN0aW9uKGssCm0scCl7cmV0dXJuIE1hdGgubWluKHAsTWF0aC5tYXgobSxrKSl9LF9kZWJvdW5jZTpmdW5jdGlvbihrLG0scCl7ZD8odGhpcy5fZGVib3VuY2Vycz10aGlzLl9kZWJvdW5jZXJzfHx7fSx0aGlzLl9kZWJvdW5jZXJzW2tdPVBvbHltZXIuRGVib3VuY2VyLmRlYm91bmNlKHRoaXMuX2RlYm91bmNlcnNba10scCxtLmJpbmQodGhpcykpLFBvbHltZXIuZW5xdWV1ZURlYm91bmNlcih0aGlzLl9kZWJvdW5jZXJzW2tdKSk6UG9seW1lci5kb20uYWRkRGVib3VuY2VyKHRoaXMuZGVib3VuY2UoayxtKSl9LF9mb3J3YXJkUHJvcGVydHk6ZnVuY3Rpb24oayxtLHApe2Q/ay5fc2V0UGVuZGluZ1Byb3BlcnR5KG0scCk6a1ttXT1wfSxfZm9yd2FyZEhvc3RQcm9wVjI6ZnVuY3Rpb24oayxtKXsodGhpcy5fcGh5c2ljYWxJdGVtc3x8W10pLmNvbmNhdChbdGhpcy5fb2Zmc2NyZWVuRm9jdXNlZEl0ZW0sdGhpcy5fZm9jdXNCYWNrZmlsbEl0ZW1dKS5mb3JFYWNoKGZ1bmN0aW9uKHApe3AmJnRoaXMubW9kZWxGb3JFbGVtZW50KHApLmZvcndhcmRIb3N0UHJvcChrLAptKX0sdGhpcyl9LF9ub3RpZnlJbnN0YW5jZVByb3BWMjpmdW5jdGlvbihrLG0scCl7UG9seW1lci5QYXRoLm1hdGNoZXModGhpcy5hcyxtKSYmKGs9a1t0aGlzLmluZGV4QXNdLG09PXRoaXMuYXMmJih0aGlzLml0ZW1zW2tdPXApLHRoaXMubm90aWZ5UGF0aChQb2x5bWVyLlBhdGgudHJhbnNsYXRlKHRoaXMuYXMsIml0ZW1zLiIrayxtKSxwKSl9LF9nZXRTdGFtcGVkQ2hpbGRyZW46ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcGh5c2ljYWxJdGVtc30sX2ZvcndhcmRJbnN0YW5jZVBhdGg6ZnVuY3Rpb24oayxtLHApezA9PT1tLmluZGV4T2YodGhpcy5hcysiLiIpJiZ0aGlzLm5vdGlmeVBhdGgoIml0ZW1zLiIray5fX2tleV9fKyIuIittLnNsaWNlKHRoaXMuYXMubGVuZ3RoKzEpLHApfSxfZm9yd2FyZFBhcmVudFBhdGg6ZnVuY3Rpb24oayxtKXsodGhpcy5fcGh5c2ljYWxJdGVtc3x8W10pLmNvbmNhdChbdGhpcy5fb2Zmc2NyZWVuRm9jdXNlZEl0ZW0sdGhpcy5fZm9jdXNCYWNrZmlsbEl0ZW1dKS5mb3JFYWNoKGZ1bmN0aW9uKHApe3AmJgp0aGlzLm1vZGVsRm9yRWxlbWVudChwKS5ub3RpZnlQYXRoKGssbSwhMCl9LHRoaXMpfSxfZm9yd2FyZFBhcmVudFByb3A6ZnVuY3Rpb24oayxtKXsodGhpcy5fcGh5c2ljYWxJdGVtc3x8W10pLmNvbmNhdChbdGhpcy5fb2Zmc2NyZWVuRm9jdXNlZEl0ZW0sdGhpcy5fZm9jdXNCYWNrZmlsbEl0ZW1dKS5mb3JFYWNoKGZ1bmN0aW9uKHApe3AmJih0aGlzLm1vZGVsRm9yRWxlbWVudChwKVtrXT1tKX0sdGhpcyl9LF9nZXRBY3RpdmVFbGVtZW50OmZ1bmN0aW9uKCl7dmFyIGs9dGhpcy5faXRlbXNQYXJlbnQubm9kZS5kb21Ib3N0O3JldHVybiBQb2x5bWVyLmRvbShrP2sucm9vdDpkb2N1bWVudCkuYWN0aXZlRWxlbWVudH19KX0pKCk7Cjwvc2NyaXB0PgoKCgoKCgoKCgoKCjxkb20tbW9kdWxlIGlkPSJwYXBlci1pdGVtLWJvZHkiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIG92ZXJmbG93OiBoaWRkZW47IC8qIG5lZWRlZCBmb3IgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXMgdG8gd29yayBvbiBmZiAqLwogICAgICAgIEBhcHBseSAtLWxheW91dC12ZXJ0aWNhbDsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtY2VudGVyLWp1c3RpZmllZDsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtZmxleDsKICAgICAgfQoKICAgICAgOmhvc3QoW3R3by1saW5lXSkgewogICAgICAgIG1pbi1oZWlnaHQ6IHZhcigtLXBhcGVyLWl0ZW0tYm9keS10d28tbGluZS1taW4taGVpZ2h0LCA3MnB4KTsKICAgICAgfQoKICAgICAgOmhvc3QoW3RocmVlLWxpbmVdKSB7CiAgICAgICAgbWluLWhlaWdodDogdmFyKC0tcGFwZXItaXRlbS1ib2R5LXRocmVlLWxpbmUtbWluLWhlaWdodCwgODhweCk7CiAgICAgIH0KCiAgICAgIDpob3N0ID4gOjpzbG90dGVkKCopIHsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgIH0KCiAgICAgIDpob3N0ID4gOjpzbG90dGVkKFtzZWNvbmRhcnldKSB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1ib2R5MTsKCiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWl0ZW0tYm9keS1zZWNvbmRhcnktY29sb3IsIHZhcigtLXNlY29uZGFyeS10ZXh0LWNvbG9yKSk7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWl0ZW0tYm9keS1zZWNvbmRhcnk7CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPHNsb3Q+PC9zbG90PgogIDwvdGVtcGxhdGU+CgogIDxzY3JpcHQ+Ly9+fldFQlBBVEh+fi9wYXBlci1pdGVtL3BhcGVyLWl0ZW0tYm9keS5odG1sLmpzClBvbHltZXIoe2lzOiJwYXBlci1pdGVtLWJvZHkifSk7Cjwvc2NyaXB0Pgo8L2RvbS1tb2R1bGU+CgoKCgoKCgoKPGRvbS1tb2R1bGUgaWQ9InRmLWdyYXBoLWljb24iPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGZvbnQtc2l6ZTogMDsKICAgICAgfQoKICAgICAgLmZhZGVkLXJlY3QgewogICAgICAgIGZpbGw6IHVybCgjcmVjdEhhdGNoKTsKICAgICAgfQoKICAgICAgLmZhZGVkLWVsbGlwc2UgewogICAgICAgIGZpbGw6IHVybCgjZWxsaXBzZUhhdGNoKTsKICAgICAgfQoKICAgICAgLmZhZGVkLXJlY3QsCiAgICAgIC5mYWRlZC1lbGxpcHNlLAogICAgICAuZmFkZWQtc2VyaWVzIHsKICAgICAgICBzdHJva2U6IHZhcigtLXRiLWdyYXBoLWZhZGVkKSAhaW1wb3J0YW50OwogICAgICB9CiAgICAgICNyZWN0SGF0Y2ggbGluZSwKICAgICAgI2VsbGlwc2VIYXRjaCBsaW5lIHsKICAgICAgICBjb2xvcjogI2UwZDRiMyAhaW1wb3J0YW50OwogICAgICAgIGZpbGw6IHdoaXRlOwogICAgICAgIHN0cm9rZTogI2UwZDRiMyAhaW1wb3J0YW50OwogICAgICB9CiAgICA8L3N0eWxlPgogICAgCiAgICA8c3ZnIGhlaWdodD0iMCIgd2lkdGg9IjAiIGlkPSJzdmdEZWZzIj4KICAgICAgPGRlZnM+CiAgICAgICAgCiAgICAgICAgPHBhdHRlcm4gaWQ9InJlY3RIYXRjaCIgcGF0dGVybnRyYW5zZm9ybT0icm90YXRlKDQ1IDAgMCkiIHdpZHRoPSI1IiBoZWlnaHQ9IjUiIHBhdHRlcm51bml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgICAgICAgPGxpbmUgeDE9IjAiIHkxPSIwIiB4Mj0iMCIgeTI9IjUiIHN0eWxlPSJzdHJva2Utd2lkdGg6IDEiIC8+CiAgICAgICAgPC9wYXR0ZXJuPgogICAgICAgIDxwYXR0ZXJuIGlkPSJlbGxpcHNlSGF0Y2giIHBhdHRlcm50cmFuc2Zvcm09InJvdGF0ZSg0NSAwIDApIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBwYXR0ZXJudW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgICAgICAgIDxsaW5lIHgxPSIwIiB5MT0iMCIgeDI9IjAiIHkyPSIyIiBzdHlsZT0ic3Ryb2tlLXdpZHRoOiAxIiAvPgogICAgICAgIDwvcGF0dGVybj4KICAgICAgICAKICAgICAgICA8ZWxsaXBzZSBpZD0ib3Atbm9kZS1zdGFtcCIgcng9IjcuNSIgcnk9IjMiIHN0cm9rZT0iaW5oZXJpdCIgZmlsbD0iaW5oZXJpdCIgLz4KICAgICAgICAKICAgICAgICA8ZWxsaXBzZSBpZD0ib3Atbm9kZS1hbm5vdGF0aW9uLXN0YW1wIiByeD0iNSIgcnk9IjIiIHN0cm9rZT0iaW5oZXJpdCIgZmlsbD0iaW5oZXJpdCIgLz4KICAgICAgICAKICAgICAgICA8ZyBpZD0ib3Atc2VyaWVzLXZlcnRpY2FsLXN0YW1wIj4KICAgICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI29wLW5vZGUtc3RhbXAiIHg9IjgiIHk9IjkiIC8+CiAgICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNvcC1ub2RlLXN0YW1wIiB4PSI4IiB5PSI2IiAvPgogICAgICAgICAgPHVzZSB4bGluazpocmVmPSIjb3Atbm9kZS1zdGFtcCIgeD0iOCIgeT0iMyIgLz4KICAgICAgICA8L2c+CiAgICAgICAgPGcgaWQ9Im9wLXNlcmllcy1ob3Jpem9udGFsLXN0YW1wIj4KICAgICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI29wLW5vZGUtc3RhbXAiIHg9IjE2IiB5PSI0IiAvPgogICAgICAgICAgPHVzZSB4bGluazpocmVmPSIjb3Atbm9kZS1zdGFtcCIgeD0iMTIiIHk9IjQiIC8+CiAgICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNvcC1ub2RlLXN0YW1wIiB4PSI4IiB5PSI0IiAvPgogICAgICAgIDwvZz4KICAgICAgICA8ZyBpZD0ic3VtbWFyeS1pY29uIiBmaWxsPSIjODQ4NDg0IiBoZWlnaHQ9IjEyIiB2aWV3Ym94PSIwIDAgMjQgMjQiIHdpZHRoPSIxMiI+CiAgICAgICAgICA8cGF0aCBkPSJNMTkgM0g1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6TTkgMTdIN3YtN2gydjd6bTQgMGgtMlY3aDJ2MTB6bTQgMGgtMnYtNGgydjR6IiAvPgogICAgICAgIDwvZz4KICAgICAgPC9kZWZzPgogICAgPC9zdmc+CiAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2lzVHlwZSh0eXBlLCAnQ09OU1QnKV1dIj4KICAgICAgPHN2ZyBoZWlnaHQkPSJbW2hlaWdodF1dIiBwcmVzZXJ2ZWFzcGVjdHJhdGlvPSJ4TWluWU1pZCBtZWV0IiB2aWV3Ym94PSIwIDAgMTAgMTAiPgogICAgICAgIDxjaXJjbGUgY3g9IjUiIGN5PSI1IiByPSIzIiBmaWxsJD0iW1tfZmlsbF1dIiBzdHJva2UkPSJbW19zdHJva2VdXSIgLz4KICAgICAgPC9zdmc+CiAgICA8L3RlbXBsYXRlPgogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19pc1R5cGUodHlwZSwgJ1NVTU1BUlknKV1dIj4KICAgICAgPHN2ZyB3aWR0aCQ9IltbaGVpZ2h0XV0iIGhlaWdodCQ9IltbaGVpZ2h0XV0iIHZpZXdib3g9IjAgMCAyNCAyNCIgZmlsbD0iIzg0ODQ4NCI+CiAgICAgICAgPHBhdGggZD0iTTE5IDNINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yek05IDE3SDd2LTdoMnY3em00IDBoLTJWN2gydjEwem00IDBoLTJ2LTRoMnY0eiIgLz4KICAgICAgPC9zdmc+CiAgICA8L3RlbXBsYXRlPgogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19pc1R5cGUodHlwZSwgJ09QJyldXSI+CiAgICAgIDxzdmcgaGVpZ2h0JD0iW1toZWlnaHRdXSIgcHJlc2VydmVhc3BlY3RyYXRpbz0ieE1pbllNaWQgbWVldCIgdmlld2JveD0iMCAwIDE2IDgiPgogICAgICAgIDx1c2UgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHhsaW5rOmhyZWY9IiNvcC1ub2RlLXN0YW1wIiBmaWxsJD0iW1tfZmlsbF1dIiBzdHJva2UkPSJbW19zdHJva2VdXSIgY2xhc3MkPSJ7e19mYWRlZENsYXNzKGZhZGVkLCAnZWxsaXBzZScpfX0iIHg9IjgiIHk9IjQiIC8+CiAgICAgIDwvc3ZnPgogICAgPC90ZW1wbGF0ZT4KICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaXNUeXBlKHR5cGUsICdNRVRBJyldXSI+CiAgICAgIDxzdmcgaGVpZ2h0JD0iW1toZWlnaHRdXSIgcHJlc2VydmVhc3BlY3RyYXRpbz0ieE1pbllNaWQgbWVldCIgdmlld2JveD0iMCAwIDM3IDE2Ij4KICAgICAgICA8cmVjdCB4PSIxIiB5PSIxIiBmaWxsJD0iW1tfZmlsbF1dIiBzdHJva2UkPSJbW19zdHJva2VdXSIgY2xhc3MkPSJ7e19mYWRlZENsYXNzKGZhZGVkLCAncmVjdCcpfX0iIHN0cm9rZS13aWR0aD0iMnB4IiBoZWlnaHQ9IjE0IiB3aWR0aD0iMzUiIHJ4PSI1IiByeT0iNSIgLz4KICAgICAgPC9zdmc+CiAgICA8L3RlbXBsYXRlPgogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19pc1R5cGUodHlwZSwgJ1NFUklFUycpXV0iPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbdmVydGljYWxdXSI+CiAgICAgICAgPHN2ZyBoZWlnaHQkPSJbW2hlaWdodF1dIiBwcmVzZXJ2ZWFzcGVjdHJhdGlvPSJ4TWluWU1pZCBtZWV0IiB2aWV3Ym94PSIwIDAgMTYgMTUiPgogICAgICAgICAgPHVzZSB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeGxpbms6aHJlZj0iI29wLXNlcmllcy12ZXJ0aWNhbC1zdGFtcCIgZmlsbCQ9IltbX2ZpbGxdXSIgc3Ryb2tlJD0iW1tfc3Ryb2tlXV0iIGNsYXNzJD0ie3tfZmFkZWRDbGFzcyhmYWRlZCwgJ3NlcmllcycpfX0iIHg9IjAiIHk9IjIiIC8+CiAgICAgICAgPC9zdmc+CiAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shdmVydGljYWxdXSI+CiAgICAgICAgPHN2ZyBoZWlnaHQkPSJbW2hlaWdodF1dIiBwcmVzZXJ2ZWFzcGVjdHJhdGlvPSJ4TWluWU1pZCBtZWV0IiB2aWV3Ym94PSIwIDAgMjQgMTAiPgogICAgICAgICAgPHVzZSB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeGxpbms6aHJlZj0iI29wLXNlcmllcy1ob3Jpem9udGFsLXN0YW1wIiBmaWxsJD0iW1tfZmlsbF1dIiBzdHJva2UkPSJbW19zdHJva2VdXSIgY2xhc3MkPSJ7e19mYWRlZENsYXNzKGZhZGVkLCAnc2VyaWVzJyl9fSIgeD0iMCIgeT0iMSIgLz4KICAgICAgICA8L3N2Zz4KICAgICAgPC90ZW1wbGF0ZT4KICAgIDwvdGVtcGxhdGU+CiAgPC90ZW1wbGF0ZT4KCiAgPHNjcmlwdD4vL35+V0VCUEFUSH5+L3RmLWdyYXBoLWNvbW1vbi90Zi1ncmFwaC1pY29uLmpzCihmdW5jdGlvbihhKXsoZnVuY3Rpb24oYyl7KGZ1bmN0aW9uKGQpe2xldCBmOyhmdW5jdGlvbihnKXtnLkNPTlNUPSJDT05TVCI7Zy5NRVRBPSJNRVRBIjtnLk9QPSJPUCI7Zy5TRVJJRVM9IlNFUklFUyI7Zy5TVU1NQVJZPSJTVU1NQVJZIn0pKGY9ZC5HcmFwaEljb25UeXBlfHwoZC5HcmFwaEljb25UeXBlPXt9KSk7UG9seW1lcih7aXM6InRmLWdyYXBoLWljb24iLHByb3BlcnRpZXM6e3R5cGU6U3RyaW5nLHZlcnRpY2FsOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGZpbGxPdmVycmlkZTp7dHlwZTpTdHJpbmcsdmFsdWU6bnVsbH0sc3Ryb2tlT3ZlcnJpZGU6e3R5cGU6U3RyaW5nLHZhbHVlOm51bGx9LGhlaWdodDp7dHlwZTpOdW1iZXIsdmFsdWU6MjB9LGZhZGVkOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LF9maWxsOnt0eXBlOlN0cmluZyxjb21wdXRlZDoiX2NvbXB1dGVGaWxsKHR5cGUsIGZpbGxPdmVycmlkZSkifSxfc3Ryb2tlOnt0eXBlOlN0cmluZyxjb21wdXRlZDoiX2NvbXB1dGVTdHJva2UodHlwZSwgc3Ryb2tlT3ZlcnJpZGUpIn19LApnZXRTdmdEZWZpbmFibGVFbGVtZW50KCl7cmV0dXJuIHRoaXMuJC5zdmdEZWZzfSxfY29tcHV0ZUZpbGwoZyxsKXtpZihudWxsIT1sKXJldHVybiBsO3N3aXRjaChnKXtjYXNlIGYuTUVUQTpyZXR1cm4gYS5ncmFwaC5yZW5kZXIuTWV0YW5vZGVDb2xvcnMuREVGQVVMVF9GSUxMO2Nhc2UgZi5TRVJJRVM6cmV0dXJuIGEuZ3JhcGgucmVuZGVyLlNlcmllc05vZGVDb2xvcnMuREVGQVVMVF9GSUxMO2RlZmF1bHQ6cmV0dXJuIGEuZ3JhcGgucmVuZGVyLk9wTm9kZUNvbG9ycy5ERUZBVUxUX0ZJTEx9fSxfY29tcHV0ZVN0cm9rZShnLGwpe2lmKG51bGwhPWwpcmV0dXJuIGw7c3dpdGNoKGcpe2Nhc2UgZi5NRVRBOnJldHVybiBhLmdyYXBoLnJlbmRlci5NZXRhbm9kZUNvbG9ycy5ERUZBVUxUX1NUUk9LRTtjYXNlIGYuU0VSSUVTOnJldHVybiBhLmdyYXBoLnJlbmRlci5TZXJpZXNOb2RlQ29sb3JzLkRFRkFVTFRfU1RST0tFO2RlZmF1bHQ6cmV0dXJuIGEuZ3JhcGgucmVuZGVyLk9wTm9kZUNvbG9ycy5ERUZBVUxUX1NUUk9LRX19LApfaXNUeXBlKGcsbCl7cmV0dXJuIGc9PT1sfSxfZmFkZWRDbGFzczpmdW5jdGlvbihnLGwpe3JldHVybiBnPyJmYWRlZC0iK2w6IiJ9fSl9KShjLmljb258fChjLmljb249e30pKX0pKGEuZ3JhcGh8fChhLmdyYXBoPXt9KSl9KSh0Znx8KHRmPXt9KSk7Cjwvc2NyaXB0Pgo8L2RvbS1tb2R1bGU+CgoKPGRvbS1tb2R1bGUgaWQ9InRmLW5vZGUtaWNvbiI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICB0Zi1ncmFwaC1pY29uIHsKICAgICAgICAtLXRiLWdyYXBoLWZhZGVkOiB2YXIoLS10Yi1ncmFwaC1mYWRlZCk7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8dGYtZ3JhcGgtaWNvbiBpZD0iaWNvbiIgdHlwZT0iW1tfZ2V0VHlwZShub2RlLCBzdW1tYXJ5LCBjb25zdCwgdHlwZSldXSIgaGVpZ2h0PSJbW2hlaWdodF1dIiBmaWxsLW92ZXJyaWRlPSJbW19maWxsT3ZlcnJpZGVdXSIgc3Ryb2tlLW92ZXJyaWRlPSJbW19nZXRTdHJva2VPdmVycmlkZShfZmlsbE92ZXJyaWRlKV1dIiBmYWRlZD0iW1tfZ2V0RmFkZWQocmVuZGVySW5mbyldXSIgdmVydGljYWw9IltbX2lzVmVydGljYWwobm9kZSwgdmVydGljYWwpXV0iPjwvdGYtZ3JhcGgtaWNvbj4KICA8L3RlbXBsYXRlPgoKICA8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdGYtZ3JhcGgtY29tbW9uL3RmLW5vZGUtaWNvbi5odG1sLmpzCihmdW5jdGlvbigpe1BvbHltZXIoe2lzOiJ0Zi1ub2RlLWljb24iLHByb3BlcnRpZXM6e25vZGU6e3R5cGU6T2JqZWN0LHZhbHVlOm51bGx9LHJlbmRlckluZm86e3R5cGU6T2JqZWN0LHZhbHVlOm51bGx9LGNvbG9yQnk6e3R5cGU6T2JqZWN0LHZhbHVlOiJzdHJ1Y3R1cmFsIn0sdGVtcGxhdGVJbmRleDp7dHlwZTpGdW5jdGlvbix2YWx1ZTpudWxsfSx0eXBlOnt0eXBlOlN0cmluZyx2YWx1ZTpudWxsfSx2ZXJ0aWNhbDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxjb25zdDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxzdW1tYXJ5Ont0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGZpbGw6e3R5cGU6U3RyaW5nLHZhbHVlOm51bGx9LGhlaWdodDp7dHlwZTpOdW1iZXIsdmFsdWU6MjB9LF9maWxsT3ZlcnJpZGU6e3R5cGU6U3RyaW5nLGNvbXB1dGVkOiJfY29tcHV0ZUZpbGxPdmVycmlkZShub2RlLCByZW5kZXJJbmZvLCBjb2xvckJ5LCB0ZW1wbGF0ZUluZGV4LCBmaWxsKSIsb2JzZXJ2ZXI6Il9vbkZpbGxPdmVycmlkZUNoYW5nZWQifX0sCl9jb21wdXRlRmlsbE92ZXJyaWRlOmZ1bmN0aW9uKGEsYyxkLGYsZyl7cmV0dXJuIGEmJmMmJmQmJmY/KGE9dGYuZ3JhcGguc2NlbmUubm9kZSxhLmdldEZpbGxGb3JOb2RlKGYsYS5Db2xvckJ5W2QudG9VcHBlckNhc2UoKV0sYywhMSkpOmd9LF9nZXRTdHJva2VPdmVycmlkZTpmdW5jdGlvbihhKXtyZXR1cm4gYT90Zi5ncmFwaC5zY2VuZS5ub2RlLmdldFN0cm9rZUZvckZpbGwoYSk6bnVsbH0sX2dldFR5cGU6ZnVuY3Rpb24oYSxjLGQsZil7Y29uc3Qge0dyYXBoSWNvblR5cGU6Z309dGYuZ3JhcGguaWNvbjtpZihhKXN3aXRjaChhLnR5cGUpe2Nhc2UgdGYuZ3JhcGguTm9kZVR5cGUuT1A6cmV0dXJuIGE9YS5vcCwic3RyaW5nIiE9PXR5cGVvZiBhP2cuT1A6IkNvbnN0Ij09PWF8fGQ/Zy5DT05TVDphLmVuZHNXaXRoKCJTdW1tYXJ5Iil8fGM/Zy5TVU1NQVJZOmcuT1A7Y2FzZSB0Zi5ncmFwaC5Ob2RlVHlwZS5NRVRBOnJldHVybiBnLk1FVEE7Y2FzZSB0Zi5ncmFwaC5Ob2RlVHlwZS5TRVJJRVM6cmV0dXJuIGcuU0VSSUVTfXJldHVybiBmfSwKX2lzVmVydGljYWw6ZnVuY3Rpb24oYSxjKXtyZXR1cm4gYT9hLmhhc05vbkNvbnRyb2xFZGdlczohIWN9LF9nZXRGYWRlZDpmdW5jdGlvbihhKXtyZXR1cm4gYSYmYS5pc0ZhZGVkT3V0fSxfb25GaWxsT3ZlcnJpZGVDaGFuZ2VkKGEsYyl7Y29uc3Qge25vZGU6ZCxyZW5kZXJJbmZvOmYsY29sb3JCeTpnLHRlbXBsYXRlSW5kZXg6bH09dGhpcyxrPXRmLmdyYXBoLnNjZW5lLm5vZGU7YSE9PWMmJmsucmVtb3ZlR3JhZGllbnREZWZpbml0aW9ucyh0aGlzLiQuaWNvbi5nZXRTdmdEZWZpbmFibGVFbGVtZW50KCkpO2QmJmYmJmcmJmwmJmsuZ2V0RmlsbEZvck5vZGUobCxrLkNvbG9yQnlbZy50b1VwcGVyQ2FzZSgpXSxmLCExLHRoaXMuJC5pY29uLmdldFN2Z0RlZmluYWJsZUVsZW1lbnQoKSl9fSl9KSgpOwo8L3NjcmlwdD4KPC9kb20tbW9kdWxlPgoKCjxkb20tbW9kdWxlIGlkPSJ0Zi1ncmFwaC1vcC1jb21wYXQtbGlzdC1pdGVtIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgICNsaXN0LWl0ZW0gewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGNvbG9yOiAjNTY1NjU2OwogICAgICAgIGZvbnQtc2l6ZTogMTFwdDsKICAgICAgICBmb250LXdlaWdodDogNDAwOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgIH0KCiAgICAgICNsaXN0LWl0ZW06aG92ZXIgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWdvb2dsZS15ZWxsb3ctMTAwKTsKICAgICAgfQoKICAgICAgLmNsaWNrYWJsZSB7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICB9CgogICAgICAjbGlzdC1pdGVtIHNwYW4gewogICAgICAgIG1hcmdpbi1sZWZ0OiA0MHB4OwogICAgICB9CgogICAgICAjbGlzdC1pdGVtLmV4Y2x1ZGVkIHNwYW4gewogICAgICAgIGNvbG9yOiAjOTk5OwogICAgICB9CgogICAgICAjbGlzdC1pdGVtIHNwYW4uZWRnZS1sYWJlbCB7CiAgICAgICAgZmxvYXQ6IHJpZ2h0OwogICAgICAgIGZvbnQtc2l6ZTogMTBweDsKICAgICAgICBtYXJnaW4tbGVmdDogM3B4OwogICAgICAgIG1hcmdpbi1yaWdodDogNXB4OwogICAgICB9CgogICAgICAubm9kZS1pY29uIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAxcHg7CiAgICAgICAgbGVmdDogMnB4OwogICAgICB9CgogICAgICAuZmFkZWQgc3BhbiB7CiAgICAgICAgY29sb3I6IHZhcigtLXRiLWdyYXBoLWZhZGVkKTsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8ZGl2IGlkPSJsaXN0LWl0ZW0iIG9uLW1vdXNlb3Zlcj0iX25vZGVMaXN0ZW5lciIgb24tbW91c2VvdXQ9Il9ub2RlTGlzdGVuZXIiIG9uLWNsaWNrPSJfbm9kZUxpc3RlbmVyIj4KICAgICAgPGRpdiBjbGFzcyQ9Int7X2ZhZGVkQ2xhc3MoaXRlbVJlbmRlckluZm8pfX0iPgogICAgICAgIDx0Zi1ub2RlLWljb24gY2xhc3M9Im5vZGUtaWNvbiIgaGVpZ2h0PSIxMiIgY29sb3ItYnk9IltbY29sb3JCeV1dIiBjb2xvci1ieS1wYXJhbXM9IltbY29sb3JCeVBhcmFtc11dIiBub2RlPSJbW2l0ZW1Ob2RlXV0iIHJlbmRlci1pbmZvPSJbW2l0ZW1SZW5kZXJJbmZvXV0iIHRlbXBsYXRlLWluZGV4PSJbW3RlbXBsYXRlSW5kZXhdXSI+CiAgICAgICAgPC90Zi1ub2RlLWljb24+CiAgICAgICAgPHNwYW4gdGl0bGUkPSJbW25hbWVdXSI+W1tuYW1lXV08L3NwYW4+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgPC90ZW1wbGF0ZT4KCiAgPHNjcmlwdD4vL35+V0VCUEFUSH5+L3RmLWdyYXBoLW9wLWNvbXBhdC1jYXJkL3RmLWdyYXBoLW9wLWNvbXBhdC1saXN0LWl0ZW0uaHRtbC5qcwooZnVuY3Rpb24oKXtQb2x5bWVyKHtpczoidGYtZ3JhcGgtb3AtY29tcGF0LWxpc3QtaXRlbSIscHJvcGVydGllczp7Y2FyZE5vZGU6T2JqZWN0LGl0ZW1Ob2RlOk9iamVjdCxlZGdlTGFiZWw6U3RyaW5nLGl0ZW1SZW5kZXJJbmZvOk9iamVjdCxuYW1lOlN0cmluZyxpdGVtVHlwZTp7dHlwZTpTdHJpbmcsb2JzZXJ2ZXI6Il9pdGVtVHlwZUNoYW5nZWQifSxjb2xvckJ5OlN0cmluZyxjb2xvckJ5UGFyYW1zOk9iamVjdCx0ZW1wbGF0ZUluZGV4OkZ1bmN0aW9ufSxfaXRlbVR5cGVDaGFuZ2VkOmZ1bmN0aW9uKCl7InN1Ym5vZGUiIT09dGhpcy5pdGVtVHlwZT90aGlzLiRbImxpc3QtaXRlbSJdLmNsYXNzTGlzdC5hZGQoImNsaWNrYWJsZSIpOnRoaXMuJFsibGlzdC1pdGVtIl0uY2xhc3NMaXN0LnJlbW92ZSgiY2xpY2thYmxlIil9LF9ub2RlTGlzdGVuZXI6ZnVuY3Rpb24oYSl7dGhpcy5maXJlKCJub2RlLWxpc3QtaXRlbS0iK2EudHlwZSx7bm9kZU5hbWU6dGhpcy5uYW1lLHR5cGU6dGhpcy5pdGVtVHlwZX0pfSwKX2ZhZGVkQ2xhc3M6ZnVuY3Rpb24oYSl7cmV0dXJuIGEmJmEuaXNGYWRlZE91dD8iZmFkZWQiOiIifX0pfSkoKTsKPC9zY3JpcHQ+CjwvZG9tLW1vZHVsZT4KCgo8ZG9tLW1vZHVsZSBpZD0idGYtZ3JhcGgtb3AtY29tcGF0LWNhcmQiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIG1heC1oZWlnaHQ6IDUwMHB4OwogICAgICB9CgogICAgICAuaW5jb21wYXRpYmxlLW9wcy1saXN0IHsKICAgICAgICBoZWlnaHQ6IDM1MHB4OwogICAgICAgIG1heC1oZWlnaHQ6IDQwMHB4OwogICAgICAgIG92ZXJmbG93LXk6IHNjcm9sbDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgIH0KCiAgICAgIGlyb24tbGlzdCB7CiAgICAgICAgZmxleDogMSAxIGF1dG87CiAgICAgIH0KCiAgICAgIHBhcGVyLWl0ZW0gewogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgICAgYmFja2dyb3VuZDogI2U5ZTllOTsKICAgICAgfQoKICAgICAgcGFwZXItaXRlbS1ib2R5W3R3by1saW5lXSB7CiAgICAgICAgbWluLWhlaWdodDogMDsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweCA0cHg7CiAgICAgIH0KCiAgICAgIC5leHBhbmRlZEluZm8gewogICAgICAgIHBhZGRpbmc6IDhweCAxMnB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgZm9udC1zaXplOiAxMnB0OwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAubm9kZS1uYW1lIHsKICAgICAgICB3aGl0ZS1zcGFjZTogbm9ybWFsOwogICAgICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDsKICAgICAgICBmb250LXNpemU6IDE0cHQ7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgfQoKICAgICAgLnN1YnRpdGxlIHsKICAgICAgICBmb250LXNpemU6IDEycHQ7CiAgICAgICAgY29sb3I6ICM1ZTVlNWU7CiAgICAgIH0KCiAgICAgIC50b2dnbGUtYnV0dG9uIHsKICAgICAgICBmbG9hdDogcmlnaHQ7CiAgICAgICAgbWF4LWhlaWdodDogMjBweDsKICAgICAgICBtYXgtd2lkdGg6IDIwcHg7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgfQoKICAgICAgLm5vbi1jb250cm9sLWxpc3QtaXRlbSB7CiAgICAgICAgcGFkZGluZy1sZWZ0OiAxMHB4OwogICAgICB9CgogICAgICBkaXYub3AtY29tcGF0LWRpc3BsYXkgewogICAgICAgIG1hcmdpbi10b3A6IDEwcHg7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICB9CgogICAgICBzdmcub3AtY29tcGF0IHsKICAgICAgICB3aWR0aDogMjUwcHg7CiAgICAgICAgaGVpZ2h0OiAyNXB4OwogICAgICAgIGZsb2F0OiBsZWZ0OwogICAgICB9CgogICAgICBkaXYub3AtY29tcGF0LXZhbHVlIHsKICAgICAgICBmbG9hdDogcmlnaHQ7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBjb2xvcjogYmxhY2s7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDEwcHg7CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPHBhcGVyLWl0ZW0+CiAgICAgIDxwYXBlci1pdGVtLWJvZHkgdHdvLWxpbmU+CiAgICAgICAgPGRpdj4KICAgICAgICAgIDxwYXBlci1pY29uLWJ1dHRvbiBpY29uPSJ7e19nZXRUb2dnbGVJY29uKF9leHBhbmRlZCl9fSIgb24tY2xpY2s9Il90b2dnbGVFeHBhbmRlZCIgY2xhc3M9InRvZ2dsZS1idXR0b24iPgogICAgICAgICAgPC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im5vZGUtbmFtZSIgaWQ9Im5vZGV0aXRsZSI+W1tub2RlVGl0bGVdXTwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgc2Vjb25kYXJ5PgogICAgICAgICAgPGRpdiBjbGFzcz0ic3VidGl0bGUiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJvcC1jb21wYXQtZGlzcGxheSI+CiAgICAgICAgICAgICAgPHN2ZyBjbGFzcz0ib3AtY29tcGF0IiBwcmVzZXJ2ZWFzcGVjdHJhdGlvPSJ4TWluWU1pZCBtZWV0IiB2aWV3Ym94PSIwIDAgMjUwIDI1Ij4KICAgICAgICAgICAgICAgIDxkZWZzPgogICAgICAgICAgICAgICAgICA8bGluZWFyZ3JhZGllbnQgaWQ9Im9wLWNvbXBhdC1maWxsIj4KICAgICAgICAgICAgICAgICAgICA8c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3IkPSJbW19vcENvbXBhdENvbG9yXV0iPjwvc3RvcD4KICAgICAgICAgICAgICAgICAgICA8c3RvcCBvZmZzZXQkPSJbW19vcENvbXBhdFNjb3JlXV0iIHN0b3AtY29sb3IkPSJbW19vcENvbXBhdENvbG9yXV0iPjwvc3RvcD4KICAgICAgICAgICAgICAgICAgICA8c3RvcCBvZmZzZXQkPSJbW19vcENvbXBhdFNjb3JlXV0iIHN0b3AtY29sb3IkPSJbW19vcEluY29tcGF0Q29sb3JdXSI+PC9zdG9wPgogICAgICAgICAgICAgICAgICAgIDxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvciQ9IltbX29wSW5jb21wYXRDb2xvciBdXSI+PC9zdG9wPgogICAgICAgICAgICAgICAgICA8L2xpbmVhcmdyYWRpZW50PgogICAgICAgICAgICAgICAgPC9kZWZzPgogICAgICAgICAgICAgICAgPHJlY3QgaGVpZ2h0PSIyNSIgd2lkdGg9IjI1MCIgcng9IjUiIHJ5PSI1IiBzdHlsZT0iZmlsbDogdXJsKCcjb3AtY29tcGF0LWZpbGwnKTsiIC8+CiAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ib3AtY29tcGF0LXZhbHVlIj5bW19vcENvbXBhdFNjb3JlTGFiZWxdXTwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L3BhcGVyLWl0ZW0tYm9keT4KICAgIDwvcGFwZXItaXRlbT4KCiAgICA8aXJvbi1jb2xsYXBzZSBvcGVuZWQ9Int7X2V4cGFuZGVkfX0iPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Int7X2V4cGFuZGVkfX0iIHJlc3RhbXA9InRydWUiPgogICAgICAgIDxkaXYgY2xhc3M9ImV4cGFuZGVkSW5mbyI+CiAgICAgICAgICBJbmNvbXBhdGlibGUgT3BlcmF0aW9uczogKDxzcGFuPltbX3RvdGFsSW5jb21wYXRPcHNdXTwvc3Bhbj4pCiAgICAgICAgICA8aXJvbi1saXN0IGNsYXNzPSJpbmNvbXBhdGlibGUtb3BzLWxpc3QiIGlkPSJpbmNvbXBhdGlibGVPcHNMaXN0IiBpdGVtcz0iW1tfaW5jb21wYXRpYmxlT3BOb2Rlc11dIj4KICAgICAgICAgICAgPHRlbXBsYXRlPgogICAgICAgICAgICAgIDx0Zi1ncmFwaC1vcC1jb21wYXQtbGlzdC1pdGVtIGNsYXNzPSJub24tY29udHJvbC1saXN0LWl0ZW0iIGl0ZW0tbm9kZT0iW1tpdGVtXV0iIGl0ZW0tcmVuZGVyLWluZm89IltbX2dldFJlbmRlckluZm8oaXRlbS5uYW1lLCByZW5kZXJIaWVyYXJjaHkpXV0iIG5hbWU9IltbaXRlbS5uYW1lXV0iIHRlbXBsYXRlLWluZGV4PSJbW190ZW1wbGF0ZUluZGV4XV0iIGNvbG9yLWJ5PSJbW2NvbG9yQnldXSIgaXRlbS10eXBlPSJpbmNvbXBhdGlibGUtb3BzIj4KICAgICAgICAgICAgICA8L3RmLWdyYXBoLW9wLWNvbXBhdC1saXN0LWl0ZW0+CiAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8L2lyb24tbGlzdD4KICAgICAgICA8L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgIDwvaXJvbi1jb2xsYXBzZT4KICA8L3RlbXBsYXRlPgoKICA8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdGYtZ3JhcGgtb3AtY29tcGF0LWNhcmQvdGYtZ3JhcGgtb3AtY29tcGF0LWNhcmQuaHRtbC5qcwooZnVuY3Rpb24oKXtQb2x5bWVyKHtpczoidGYtZ3JhcGgtb3AtY29tcGF0LWNhcmQiLHByb3BlcnRpZXM6e2dyYXBoSGllcmFyY2h5Ok9iamVjdCxoaWVyYXJjaHlQYXJhbXM6T2JqZWN0LHJlbmRlckhpZXJhcmNoeTpPYmplY3Qsbm9kZVRpdGxlOlN0cmluZyxfdGVtcGxhdGVJbmRleDp7dHlwZTpGdW5jdGlvbixjb21wdXRlZDoiX2dldFRlbXBsYXRlSW5kZXgoZ3JhcGhIaWVyYXJjaHkpIn0sX2luY29tcGF0aWJsZU9wTm9kZXM6e3R5cGU6T2JqZWN0LGNvbXB1dGVkOiJfZ2V0SW5jb21wYXRpYmxlT3BOb2RlcyhncmFwaEhpZXJhcmNoeSwgaGllcmFyY2h5UGFyYW1zKSJ9LF9leHBhbmRlZDp7dHlwZTpCb29sZWFuLHZhbHVlOiEwfSxfb3BDb21wYXRTY29yZTp7dHlwZTpOdW1iZXIsY29tcHV0ZWQ6Il9jb21wdXRlT3BDb21wYXRTY29yZShncmFwaEhpZXJhcmNoeSkifSxfb3BDb21wYXRTY29yZUxhYmVsOnt0eXBlOlN0cmluZyxjb21wdXRlZDoiX2dldE9wQ29tcGF0U2NvcmVMYWJlbChfb3BDb21wYXRTY29yZSkifSwKX29wQ29tcGF0Q29sb3I6e3R5cGU6U3RyaW5nLHZhbHVlOnRmLmdyYXBoLnJlbmRlci5PcE5vZGVDb2xvcnMuQ09NUEFUSUJMRX0sX29wSW5jb21wYXRDb2xvcjp7dHlwZTpTdHJpbmcsdmFsdWU6dGYuZ3JhcGgucmVuZGVyLk9wTm9kZUNvbG9ycy5JTkNPTVBBVElCTEV9LF90b3RhbEluY29tcGF0T3BzOnt0eXBlOk51bWJlcixjb21wdXRlZDoiX2dldFRvdGFsSW5jb21wYXRpYmxlT3BzKGdyYXBoSGllcmFyY2h5KSJ9fSxfZ2V0VGVtcGxhdGVJbmRleDpmdW5jdGlvbihhKXtyZXR1cm4gYS5nZXRUZW1wbGF0ZUluZGV4KCl9LF9nZXROb2RlOmZ1bmN0aW9uKGEsYyl7cmV0dXJuIGMubm9kZShhKX0sX2dldFByaW50YWJsZUhUTUxOb2RlTmFtZTpmdW5jdGlvbihhKXtyZXR1cm4oYXx8IiIpLnJlcGxhY2UoL1wvL2csIlx4M2N3YnJceDNlLyIpfSxfZ2V0UmVuZGVySW5mbzpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5yZW5kZXJIaWVyYXJjaHkuZ2V0T3JDcmVhdGVSZW5kZXJOb2RlQnlOYW1lKGEpfSwKX3RvZ2dsZUV4cGFuZGVkOmZ1bmN0aW9uKCl7dGhpcy5fZXhwYW5kZWQ9IXRoaXMuX2V4cGFuZGVkfSxfZ2V0VG9nZ2xlSWNvbjpmdW5jdGlvbihhKXtyZXR1cm4gYT8iZXhwYW5kLWxlc3MiOiJleHBhbmQtbW9yZSJ9LF9yZXNpemVMaXN0OmZ1bmN0aW9uKGEpeyhhPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYSkpJiZhLmZpcmUoImlyb24tcmVzaXplIil9LF9nZXRJbmNvbXBhdGlibGVPcE5vZGVzOmZ1bmN0aW9uKGEsYyl7aWYoYSYmYS5yb290KXJldHVybiB0aGlzLmFzeW5jKHRoaXMuX3Jlc2l6ZUxpc3QuYmluZCh0aGlzLCIjaW5jb21wYXRpYmxlT3BzTGlzdCIpKSx0Zi5ncmFwaC5oaWVyYXJjaHkuZ2V0SW5jb21wYXRpYmxlT3BzKGEsYyl9LF9jb21wdXRlT3BDb21wYXRTY29yZTpmdW5jdGlvbihhKXtpZihhJiZhLnJvb3Qpe3ZhciBjPWEucm9vdDthPWMuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5jb21wYXRpYmxlO2M9Yy5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmluY29tcGF0aWJsZTsKcmV0dXJuIDA9PWEmJjA9PWM/MDpNYXRoLmZsb29yKDEwMCphLyhhK2MpKS8xMDB9cmV0dXJuIDB9LF9nZXRPcENvbXBhdFNjb3JlTGFiZWw6ZnVuY3Rpb24oYSl7cmV0dXJuIGQzLmZvcm1hdCgiLjAlIikoYSl9LF9nZXRUb3RhbEluY29tcGF0aWJsZU9wczpmdW5jdGlvbihhKXtyZXR1cm4gYSYmYS5yb290P2Eucm9vdC5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmluY29tcGF0aWJsZTowfX0pfSkoKTsKPC9zY3JpcHQ+CjwvZG9tLW1vZHVsZT4KCgoKCgoKCgoKCgoKCgo8ZG9tLW1vZHVsZSBpZD0idGYtbm9kZS1saXN0LWl0ZW0iPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgI2xpc3QtaXRlbSB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgY29sb3I6ICM1NjU2NTY7CiAgICAgICAgZm9udC1zaXplOiAxMXB0OwogICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgfQoKICAgICAgI2xpc3QtaXRlbTpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZ29vZ2xlLXllbGxvdy0xMDApOwogICAgICB9CgogICAgICAuY2xpY2thYmxlIHsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgIH0KCiAgICAgICNsaXN0LWl0ZW0gc3BhbiB7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDQwcHg7CiAgICAgIH0KCiAgICAgICNsaXN0LWl0ZW0uZXhjbHVkZWQgc3BhbiB7CiAgICAgICAgY29sb3I6ICM5OTk7CiAgICAgIH0KCiAgICAgICNsaXN0LWl0ZW0gc3Bhbi5lZGdlLWxhYmVsIHsKICAgICAgICBmbG9hdDogcmlnaHQ7CiAgICAgICAgZm9udC1zaXplOiAxMHB4OwogICAgICAgIG1hcmdpbi1sZWZ0OiAzcHg7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiA1cHg7CiAgICAgIH0KCiAgICAgIC5ub2RlLWljb24gewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDFweDsKICAgICAgICBsZWZ0OiAycHg7CiAgICAgIH0KCiAgICAgIC5mYWRlZCBzcGFuIHsKICAgICAgICBjb2xvcjogdmFyKC0tdGItZ3JhcGgtZmFkZWQpOwogICAgICB9CiAgICA8L3N0eWxlPgogICAgPGRpdiBpZD0ibGlzdC1pdGVtIiBvbi1tb3VzZW92ZXI9Il9ub2RlTGlzdGVuZXIiIG9uLW1vdXNlb3V0PSJfbm9kZUxpc3RlbmVyIiBvbi1jbGljaz0iX25vZGVMaXN0ZW5lciI+CiAgICAgIDxkaXYgY2xhc3MkPSJ7e19mYWRlZENsYXNzKGl0ZW1SZW5kZXJJbmZvKX19Ij4KICAgICAgICA8dGYtbm9kZS1pY29uIGNsYXNzPSJub2RlLWljb24iIGhlaWdodD0iMTIiIGNvbG9yLWJ5PSJbW2NvbG9yQnldXSIgY29sb3ItYnktcGFyYW1zPSJbW2NvbG9yQnlQYXJhbXNdXSIgbm9kZT0iW1tpdGVtTm9kZV1dIiByZW5kZXItaW5mbz0iW1tpdGVtUmVuZGVySW5mb11dIiB0ZW1wbGF0ZS1pbmRleD0iW1t0ZW1wbGF0ZUluZGV4XV0iPjwvdGYtbm9kZS1pY29uPgogICAgICAgIDxzcGFuIHRpdGxlJD0iW1tuYW1lXV0iPltbbmFtZV1dPC9zcGFuPgogICAgICAgIDxzcGFuIGNsYXNzPSJlZGdlLWxhYmVsIj5bW2VkZ2VMYWJlbF1dPC9zcGFuPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogIDwvdGVtcGxhdGU+CgogIDxzY3JpcHQ+Ly9+fldFQlBBVEh+fi90Zi1ncmFwaC1pbmZvL3RmLW5vZGUtbGlzdC1pdGVtLmh0bWwuanMKKGZ1bmN0aW9uKCl7UG9seW1lcih7aXM6InRmLW5vZGUtbGlzdC1pdGVtIixwcm9wZXJ0aWVzOntjYXJkTm9kZTpPYmplY3QsaXRlbU5vZGU6T2JqZWN0LGVkZ2VMYWJlbDpTdHJpbmcsaXRlbVJlbmRlckluZm86T2JqZWN0LG5hbWU6U3RyaW5nLGl0ZW1UeXBlOnt0eXBlOlN0cmluZyxvYnNlcnZlcjoiX2l0ZW1UeXBlQ2hhbmdlZCJ9LGNvbG9yQnk6U3RyaW5nLGNvbG9yQnlQYXJhbXM6T2JqZWN0LHRlbXBsYXRlSW5kZXg6RnVuY3Rpb259LF9pdGVtVHlwZUNoYW5nZWQ6ZnVuY3Rpb24oKXsic3Vibm9kZSIhPT10aGlzLml0ZW1UeXBlP3RoaXMuJFsibGlzdC1pdGVtIl0uY2xhc3NMaXN0LmFkZCgiY2xpY2thYmxlIik6dGhpcy4kWyJsaXN0LWl0ZW0iXS5jbGFzc0xpc3QucmVtb3ZlKCJjbGlja2FibGUiKX0sX25vZGVMaXN0ZW5lcjpmdW5jdGlvbihhKXt0aGlzLmZpcmUoIm5vZGUtbGlzdC1pdGVtLSIrYS50eXBlLHtjYXJkTm9kZTp0aGlzLmNhcmROb2RlLm5hbWUsbm9kZU5hbWU6dGhpcy5uYW1lLAp0eXBlOnRoaXMuaXRlbVR5cGV9KX0sX2ZhZGVkQ2xhc3M6ZnVuY3Rpb24oYSl7cmV0dXJuIGEmJmEuaXNGYWRlZE91dD8iZmFkZWQiOiIifX0pfSkoKTsKPC9zY3JpcHQ+CjwvZG9tLW1vZHVsZT4KCgo8ZG9tLW1vZHVsZSBpZD0idGYtbm9kZS1pbmZvIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIC5zdWItbGlzdC1ncm91cCB7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBmb250LXNpemU6IDEycHQ7CiAgICAgICAgcGFkZGluZy1ib3R0b206IDhweDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgLnN1Yi1saXN0IHsKICAgICAgICBtYXgtaGVpZ2h0OiAzMDBweDsKICAgICAgICBvdmVyZmxvdy15OiBzY3JvbGw7CiAgICAgIH0KCiAgICAgIC5hdHRyLWxlZnQgewogICAgICAgIGZsb2F0OiBsZWZ0OwogICAgICAgIHdpZHRoOiAzMCU7CiAgICAgICAgd29yZC13cmFwOiBicmVhay13b3JkOwogICAgICAgIGNvbG9yOiAjNTY1NjU2OwogICAgICAgIGZvbnQtc2l6ZTogMTFwdDsKICAgICAgICBmb250LXdlaWdodDogNDAwOwogICAgICB9CgogICAgICAuYXR0ci1yaWdodCB7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDMwJTsKICAgICAgICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7CiAgICAgICAgY29sb3I6ICM1NjU2NTY7CiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgICAgfQoKICAgICAgLnN1Yi1saXN0LXRhYmxlIHsKICAgICAgICBkaXNwbGF5OiB0YWJsZTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgLnN1Yi1saXN0LXRhYmxlLXJvdyB7CiAgICAgICAgZGlzcGxheTogdGFibGUtcm93OwogICAgICB9CgogICAgICAuc3ViLWxpc3QtdGFibGUtcm93IC5zdWItbGlzdC10YWJsZS1jZWxsOmxhc3QtY2hpbGQgewogICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OwogICAgICB9CgogICAgICAuc3ViLWxpc3QtdGFibGUtY2VsbCB7CiAgICAgICAgY29sb3I6ICM1NjU2NTY7CiAgICAgICAgZGlzcGxheTogdGFibGUtY2VsbDsKICAgICAgICBmb250LXNpemU6IDExcHQ7CiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgICAgICBtYXgtd2lkdGg6IDIwMHB4OwogICAgICAgIHBhZGRpbmc6IDAgNHB4OwogICAgICB9CgogICAgICBwYXBlci1pdGVtIHsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICAgIGJhY2tncm91bmQ6ICNlOWU5ZTk7CiAgICAgIH0KCiAgICAgIHBhcGVyLWl0ZW0tYm9keVt0d28tbGluZV0gewogICAgICAgIG1pbi1oZWlnaHQ6IDA7CiAgICAgICAgcGFkZGluZzogOHB4IDEycHggNHB4OwogICAgICB9CgogICAgICAuZXhwYW5kZWRJbmZvIHsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweDsKICAgICAgfQoKICAgICAgLmNvbnRyb2xEZXBzIHsKICAgICAgICBwYWRkaW5nOiAwIDAgMCA4cHg7CiAgICAgIH0KCiAgICAgIC5ub2RlLW5hbWUgewogICAgICAgIHdoaXRlLXNwYWNlOiBub3JtYWw7CiAgICAgICAgd29yZC13cmFwOiBicmVhay13b3JkOwogICAgICAgIGZvbnQtc2l6ZTogMTRwdDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICB9CgogICAgICAubm9kZS1pY29uIHsKICAgICAgICBmbG9hdDogcmlnaHQ7CiAgICAgIH0KCiAgICAgIC5zdWJ0aXRsZSB7CiAgICAgICAgZm9udC1zaXplOiAxMnB0OwogICAgICAgIGNvbG9yOiAjNWU1ZTVlOwogICAgICB9CgogICAgICAuY29udHJvbExpbmUgewogICAgICAgIGZvbnQtc2l6ZTogMTFwdDsKICAgICAgICBmb250LXdlaWdodDogNDAwOwogICAgICB9CgogICAgICAudG9nZ2xlLWJ1dHRvbiB7CiAgICAgICAgZmxvYXQ6IHJpZ2h0OwogICAgICAgIG1heC1oZWlnaHQ6IDIwcHg7CiAgICAgICAgbWF4LXdpZHRoOiAyMHB4OwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgIH0KCiAgICAgIC5jb250cm9sLXRvZ2dsZS1idXR0b24gewogICAgICAgIGZsb2F0OiBsZWZ0OwogICAgICAgIG1heC1oZWlnaHQ6IDIwcHg7CiAgICAgICAgbWF4LXdpZHRoOiAyMHB4OwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgIH0KCiAgICAgIC50b2dnbGUtaW5jbHVkZS1ncm91cCB7CiAgICAgICAgcGFkZGluZy10b3A6IDRweDsKICAgICAgfQoKICAgICAgLnRvZ2dsZS1pbmNsdWRlIHsKICAgICAgICBtYXJnaW46IDVweCA2cHg7CiAgICAgICAgdGV4dC10cmFuc2Zvcm06IG5vbmU7CiAgICAgICAgcGFkZGluZzogNHB4IDZweDsKICAgICAgICBmb250LXNpemU6IDEwcHQ7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2ZhZmFmYTsKICAgICAgICBjb2xvcjogIzY2NjsKICAgICAgfQoKICAgICAgLnRvZ2dsZS1pbmNsdWRlOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1nb29nbGUteWVsbG93LTEwMCk7CiAgICAgIH0KCiAgICAgIC5ub24tY29udHJvbC1saXN0LWl0ZW0gewogICAgICAgIHBhZGRpbmctbGVmdDogMTBweDsKICAgICAgfQogICAgPC9zdHlsZT4KICAgIDxwYXBlci1pdGVtPgogICAgICA8cGFwZXItaXRlbS1ib2R5IHR3by1saW5lPgogICAgICAgIDxkaXY+CiAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24gaWNvbj0ie3tfZ2V0VG9nZ2xlSWNvbihfZXhwYW5kZWQpfX0iIG9uLWNsaWNrPSJfdG9nZ2xlRXhwYW5kZWQiIGNsYXNzPSJ0b2dnbGUtYnV0dG9uIj4KICAgICAgICAgIDwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJub2RlLW5hbWUiIGlkPSJub2RldGl0bGUiPjwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgc2Vjb25kYXJ5PgogICAgICAgICAgPHRmLW5vZGUtaWNvbiBjbGFzcz0ibm9kZS1pY29uIiBub2RlPSJbW19ub2RlXV0iIHJlbmRlci1pbmZvPSJbW19nZXRSZW5kZXJJbmZvKG5vZGVOYW1lLCByZW5kZXJIaWVyYXJjaHkpXV0iIGNvbG9yLWJ5PSJbW2NvbG9yQnldXSIgdGVtcGxhdGUtaW5kZXg9IltbX3RlbXBsYXRlSW5kZXhdXSI+PC90Zi1ub2RlLWljb24+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Int7X25vZGUub3B9fSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InN1YnRpdGxlIj4KICAgICAgICAgICAgICBPcGVyYXRpb246CiAgICAgICAgICAgICAgPHNwYW4+W1tfbm9kZS5vcF1dPC9zcGFuPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Int7X25vZGUubWV0YWdyYXBofX0iPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdWJ0aXRsZSI+CiAgICAgICAgICAgICAgU3ViZ3JhcGg6CiAgICAgICAgICAgICAgPHNwYW4+W1tfbm9kZS5jYXJkaW5hbGl0eV1dPC9zcGFuPiBub2RlcwogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvcGFwZXItaXRlbS1ib2R5PgogICAgPC9wYXBlci1pdGVtPgogICAgPGlyb24tY29sbGFwc2Ugb3BlbmVkPSJ7e19leHBhbmRlZH19Ij4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJ7e19leHBhbmRlZH19IiByZXN0YW1wPSJ0cnVlIj4KICAgICAgICA8ZGl2IGNsYXNzPSJleHBhbmRlZEluZm8iPgogICAgICAgICAgPGRpdiBjbGFzcz0ic3ViLWxpc3QtZ3JvdXAgYXR0cmlidXRlcyI+CiAgICAgICAgICAgIEF0dHJpYnV0ZXMgKDxzcGFuPltbX2F0dHJpYnV0ZXMubGVuZ3RoXV08L3NwYW4+KQogICAgICAgICAgICA8aXJvbi1saXN0IGNsYXNzPSJzdWItbGlzdCIgaWQ9ImF0dHJpYnV0ZXNMaXN0IiBpdGVtcz0iW1tfYXR0cmlidXRlc11dIj4KICAgICAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhdHRyLWxlZnQiPltbaXRlbS5rZXldXTwvZGl2PgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhdHRyLXJpZ2h0Ij5bW2l0ZW0udmFsdWVdXTwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPC9pcm9uLWxpc3Q+CiAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Int7X2RldmljZX19Ij4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3ViLWxpc3QtZ3JvdXAgZGV2aWNlIj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhdHRyLWxlZnQiPkRldmljZTwvZGl2PgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImF0dHItcmlnaHQiPltbX2RldmljZV1dPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KCiAgICAgICAgICA8ZGl2IGNsYXNzPSJzdWItbGlzdC1ncm91cCBwcmVkZWNlc3NvcnMiPgogICAgICAgICAgICBJbnB1dHMgKDxzcGFuPltbX3RvdGFsUHJlZGVjZXNzb3JzXV08L3NwYW4+KQogICAgICAgICAgICA8aXJvbi1saXN0IGNsYXNzPSJzdWItbGlzdCIgaWQ9ImlucHV0c0xpc3QiIGl0ZW1zPSJbW19wcmVkZWNlc3NvcnMucmVndWxhcl1dIj4KICAgICAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8dGYtbm9kZS1saXN0LWl0ZW0gY2xhc3M9Im5vbi1jb250cm9sLWxpc3QtaXRlbSIgY2FyZC1ub2RlPSJbW19ub2RlXV0iIGl0ZW0tbm9kZT0iW1tpdGVtLm5vZGVdXSIgZWRnZS1sYWJlbD0iW1tpdGVtLmVkZ2VMYWJlbF1dIiBpdGVtLXJlbmRlci1pbmZvPSJbW2l0ZW0ucmVuZGVySW5mb11dIiBuYW1lPSJbW2l0ZW0ubmFtZV1dIiBpdGVtLXR5cGU9InByZWRlY2Vzc29ycyIgY29sb3ItYnk9IltbY29sb3JCeV1dIiB0ZW1wbGF0ZS1pbmRleD0iW1tfdGVtcGxhdGVJbmRleF1dIj4KICAgICAgICAgICAgICAgIDwvdGYtbm9kZS1saXN0LWl0ZW0+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPC9pcm9uLWxpc3Q+CiAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfcHJlZGVjZXNzb3JzLmNvbnRyb2wubGVuZ3RoXV0iPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2xEZXBzIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2xMaW5lIj4KICAgICAgICAgICAgICAgICAgPHBhcGVyLWljb24tYnV0dG9uIGljb249Int7X2dldFRvZ2dsZUljb24oX29wZW5lZENvbnRyb2xQcmVkKX19IiBvbi1jbGljaz0iX3RvZ2dsZUNvbnRyb2xQcmVkIiBjbGFzcz0iY29udHJvbC10b2dnbGUtYnV0dG9uIj4KICAgICAgICAgICAgICAgICAgPC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgICAgICAgICAgICAgQ29udHJvbCBkZXBlbmRlbmNpZXMKICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGlyb24tY29sbGFwc2Ugb3BlbmVkPSJ7e19vcGVuZWRDb250cm9sUHJlZH19IiBuby1hbmltYXRpb24+CiAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0ie3tfb3BlbmVkQ29udHJvbFByZWR9fSIgcmVzdGFtcD0idHJ1ZSI+CiAgICAgICAgICAgICAgICAgICAgPGlyb24tbGlzdCBjbGFzcz0ic3ViLWxpc3QiIGl0ZW1zPSJbW19wcmVkZWNlc3NvcnMuY29udHJvbF1dIj4KICAgICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZT4KICAgICAgICAgICAgICAgICAgICAgICAgPHRmLW5vZGUtbGlzdC1pdGVtIGNhcmQtbm9kZT0iW1tfbm9kZV1dIiBpdGVtLW5vZGU9IltbaXRlbS5ub2RlXV0iIGl0ZW0tcmVuZGVyLWluZm89IltbaXRlbS5yZW5kZXJJbmZvXV0iIG5hbWU9IltbaXRlbS5uYW1lXV0iIGl0ZW0tdHlwZT0icHJlZGVjZXNzb3JzIiBjb2xvci1ieT0iW1tjb2xvckJ5XV0iIHRlbXBsYXRlLWluZGV4PSJbW190ZW1wbGF0ZUluZGV4XV0iPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RmLW5vZGUtbGlzdC1pdGVtPgogICAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgICAgICA8L2lyb24tbGlzdD4KICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgIDwvaXJvbi1jb2xsYXBzZT4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgIDxkaXYgY2xhc3M9InN1Yi1saXN0LWdyb3VwIHN1Y2Nlc3NvcnMiPgogICAgICAgICAgICBPdXRwdXRzICg8c3Bhbj5bW190b3RhbFN1Y2Nlc3NvcnNdXTwvc3Bhbj4pCiAgICAgICAgICAgIDxpcm9uLWxpc3QgY2xhc3M9InN1Yi1saXN0IiBpZD0ib3V0cHV0c0xpc3QiIGl0ZW1zPSJbW19zdWNjZXNzb3JzLnJlZ3VsYXJdXSI+CiAgICAgICAgICAgICAgPHRlbXBsYXRlPgogICAgICAgICAgICAgICAgPHRmLW5vZGUtbGlzdC1pdGVtIGNsYXNzPSJub24tY29udHJvbC1saXN0LWl0ZW0iIGNhcmQtbm9kZT0iW1tfbm9kZV1dIiBpdGVtLW5vZGU9IltbaXRlbS5ub2RlXV0iIGVkZ2UtbGFiZWw9IltbaXRlbS5lZGdlTGFiZWxdXSIgaXRlbS1yZW5kZXItaW5mbz0iW1tpdGVtLnJlbmRlckluZm9dXSIgbmFtZT0iW1tpdGVtLm5hbWVdXSIgaXRlbS10eXBlPSJzdWNjZXNzb3IiIGNvbG9yLWJ5PSJbW2NvbG9yQnldXSIgdGVtcGxhdGUtaW5kZXg9IltbX3RlbXBsYXRlSW5kZXhdXSI+CiAgICAgICAgICAgICAgICA8L3RmLW5vZGUtbGlzdC1pdGVtPgogICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDwvaXJvbi1saXN0PgogICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX3N1Y2Nlc3NvcnMuY29udHJvbC5sZW5ndGhdXSI+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29udHJvbERlcHMiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29udHJvbExpbmUiPgogICAgICAgICAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24gaWNvbj0ie3tfZ2V0VG9nZ2xlSWNvbihfb3BlbmVkQ29udHJvbFN1Y2MpfX0iIG9uLWNsaWNrPSJfdG9nZ2xlQ29udHJvbFN1Y2MiIGNsYXNzPSJjb250cm9sLXRvZ2dsZS1idXR0b24iPgogICAgICAgICAgICAgICAgICA8L3BhcGVyLWljb24tYnV0dG9uPgogICAgICAgICAgICAgICAgICBDb250cm9sIGRlcGVuZGVuY2llcwogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8aXJvbi1jb2xsYXBzZSBvcGVuZWQ9Int7X29wZW5lZENvbnRyb2xTdWNjfX0iIG5vLWFuaW1hdGlvbj4KICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJ7e19vcGVuZWRDb250cm9sU3VjY319IiByZXN0YW1wPSJ0cnVlIj4KICAgICAgICAgICAgICAgICAgICA8aXJvbi1saXN0IGNsYXNzPSJzdWItbGlzdCIgaXRlbXM9IltbX3N1Y2Nlc3NvcnMuY29udHJvbF1dIj4KICAgICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZT4KICAgICAgICAgICAgICAgICAgICAgICAgPHRmLW5vZGUtbGlzdC1pdGVtIGNhcmQtbm9kZT0iW1tfbm9kZV1dIiBpdGVtLW5vZGU9IltbaXRlbS5ub2RlXV0iIGl0ZW0tcmVuZGVyLWluZm89IltbaXRlbS5yZW5kZXJJbmZvXV0iIG5hbWU9IltbaXRlbS5uYW1lXV0iIGl0ZW0tdHlwZT0ic3VjY2Vzc29ycyIgY29sb3ItYnk9IltbY29sb3JCeV1dIiB0ZW1wbGF0ZS1pbmRleD0iW1tfdGVtcGxhdGVJbmRleF1dIj4KICAgICAgICAgICAgICAgICAgICAgICAgPC90Zi1ub2RlLWxpc3QtaXRlbT4KICAgICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICAgICAgPC9pcm9uLWxpc3Q+CiAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8L2lyb24tY29sbGFwc2U+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0ie3tfaGFzRGlzcGxheWFibGVOb2RlU3RhdHN9fSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InN1Yi1saXN0LWdyb3VwIG5vZGUtc3RhdHMiPgogICAgICAgICAgICAgIE5vZGUgU3RhdHMKICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdWItbGlzdC10YWJsZSI+CiAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Int7X25vZGVTdGF0cy50b3RhbEJ5dGVzfX0iPgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdWItbGlzdC10YWJsZS1yb3ciPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN1Yi1saXN0LXRhYmxlLWNlbGwiPk1lbW9yeTwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN1Yi1saXN0LXRhYmxlLWNlbGwiPgogICAgICAgICAgICAgICAgICAgICAgW1tfbm9kZVN0YXRzRm9ybWF0dGVkQnl0ZXNdXQogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Int7X2dldFRvdGFsTWljcm9zKF9ub2RlU3RhdHMpfX0iPgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdWItbGlzdC10YWJsZS1yb3ciPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN1Yi1saXN0LXRhYmxlLWNlbGwiPkNvbXB1dGUgVGltZTwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN1Yi1saXN0LXRhYmxlLWNlbGwiPgogICAgICAgICAgICAgICAgICAgICAgW1tfbm9kZVN0YXRzRm9ybWF0dGVkQ29tcHV0ZVRpbWVdXQogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Int7X25vZGVTdGF0cy5vdXRwdXRTaXplfX0iPgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdWItbGlzdC10YWJsZS1yb3ciPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN1Yi1saXN0LXRhYmxlLWNlbGwiPlRlbnNvciBPdXRwdXQgU2l6ZXM8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdWItbGlzdC10YWJsZS1jZWxsIj4KICAgICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9Int7X25vZGVTdGF0c0Zvcm1hdHRlZE91dHB1dFNpemVzfX0iPgogICAgICAgICAgICAgICAgICAgICAgICBbW2l0ZW1dXSA8YnI+CiAgICAgICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KCiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2Z1bmN0aW9uVXNhZ2VzLmxlbmd0aF1dIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3ViLWxpc3QtZ3JvdXAgcHJlZGVjZXNzb3JzIj4KICAgICAgICAgICAgICBVc2FnZXMgb2YgdGhlIEZ1bmN0aW9uICg8c3Bhbj5bW19mdW5jdGlvblVzYWdlcy5sZW5ndGhdXTwvc3Bhbj4pCiAgICAgICAgICAgICAgPGlyb24tbGlzdCBjbGFzcz0ic3ViLWxpc3QiIGlkPSJmdW5jdGlvblVzYWdlc0xpc3QiIGl0ZW1zPSJbW19mdW5jdGlvblVzYWdlc11dIj4KICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZT4KICAgICAgICAgICAgICAgICAgPHRmLW5vZGUtbGlzdC1pdGVtIGNsYXNzPSJub24tY29udHJvbC1saXN0LWl0ZW0iIGNhcmQtbm9kZT0iW1tfbm9kZV1dIiBpdGVtLW5vZGU9IltbaXRlbV1dIiBuYW1lPSJbW2l0ZW0ubmFtZV1dIiBpdGVtLXR5cGU9ImZ1bmN0aW9uVXNhZ2VzIiBjb2xvci1ieT0iW1tjb2xvckJ5XV0iIHRlbXBsYXRlLWluZGV4PSJbW190ZW1wbGF0ZUluZGV4XV0iPgogICAgICAgICAgICAgICAgICA8L3RmLW5vZGUtbGlzdC1pdGVtPgogICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICA8L2lyb24tbGlzdD4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L3RlbXBsYXRlPgoKICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shX2lzTGlicmFyeUZ1bmN0aW9uKF9ub2RlKV1dIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9nZ2xlLWluY2x1ZGUtZ3JvdXAiPgogICAgICAgICAgICAgIDxwYXBlci1idXR0b24gcmFpc2VkIGNsYXNzPSJ0b2dnbGUtaW5jbHVkZSIgb24tY2xpY2s9Il90b2dnbGVJbmNsdWRlIj4KICAgICAgICAgICAgICAgIDxzcGFuPltbX2F1eEJ1dHRvblRleHRdXTwvc3Bhbj4KICAgICAgICAgICAgICA8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L3RlbXBsYXRlPgoKICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0ie3tfaXNJblNlcmllcyhfbm9kZSl9fSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRvZ2dsZS1pbmNsdWRlLWdyb3VwIj4KICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uIHJhaXNlZCBjbGFzcz0idG9nZ2xlLWluY2x1ZGUiIG9uLWNsaWNrPSJfdG9nZ2xlR3JvdXAiPgogICAgICAgICAgICAgICAgPHNwYW4+W1tfZ3JvdXBCdXR0b25UZXh0XV08L3NwYW4+CiAgICAgICAgICAgICAgPC9wYXBlci1idXR0b24+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgIDwvaXJvbi1jb2xsYXBzZT4KICA8L3RlbXBsYXRlPgoKICA8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdGYtZ3JhcGgtaW5mby90Zi1ub2RlLWluZm8uaHRtbC5qcwooZnVuY3Rpb24oKXtQb2x5bWVyKHtpczoidGYtbm9kZS1pbmZvIixwcm9wZXJ0aWVzOntub2RlTmFtZTpTdHJpbmcsZ3JhcGhIaWVyYXJjaHk6T2JqZWN0LHJlbmRlckhpZXJhcmNoeTpPYmplY3QsY29sb3JCeTpTdHJpbmcsX3RlbXBsYXRlSW5kZXg6e3R5cGU6RnVuY3Rpb24sY29tcHV0ZWQ6Il9nZXRUZW1wbGF0ZUluZGV4KGdyYXBoSGllcmFyY2h5KSJ9LF9ub2RlOnt0eXBlOk9iamVjdCxjb21wdXRlZDoiX2dldE5vZGUobm9kZU5hbWUsIGdyYXBoSGllcmFyY2h5KSIsb2JzZXJ2ZXI6Il9yZXNldFN0YXRlIn0sX25vZGVTdGF0czp7dHlwZTpPYmplY3QsY29tcHV0ZWQ6Il9nZXROb2RlU3RhdHMobm9kZU5hbWUsIGdyYXBoSGllcmFyY2h5KSIsb2JzZXJ2ZXI6Il9yZXNldFN0YXRlIn0sX2hhc0Rpc3BsYXlhYmxlTm9kZVN0YXRzOnt0eXBlOk9iamVjdCxjb21wdXRlZDoiX2dldEhhc0Rpc3BsYXlhYmxlTm9kZVN0YXRzKF9ub2RlU3RhdHMpIn0sX25vZGVTdGF0c0Zvcm1hdHRlZEJ5dGVzOnt0eXBlOlN0cmluZywKY29tcHV0ZWQ6Il9nZXROb2RlU3RhdHNGb3JtYXR0ZWRCeXRlcyhfbm9kZVN0YXRzKSJ9LF9ub2RlU3RhdHNGb3JtYXR0ZWRDb21wdXRlVGltZTp7dHlwZTpTdHJpbmcsY29tcHV0ZWQ6Il9nZXROb2RlU3RhdHNGb3JtYXR0ZWRDb21wdXRlVGltZShfbm9kZVN0YXRzKSJ9LF9ub2RlU3RhdHNGb3JtYXR0ZWRPdXRwdXRTaXplczp7dHlwZTpBcnJheSxjb21wdXRlZDoiX2dldE5vZGVTdGF0c0Zvcm1hdHRlZE91dHB1dFNpemVzKF9ub2RlU3RhdHMpIn0sbm9kZUluY2x1ZGU6e3R5cGU6TnVtYmVyLG9ic2VydmVyOiJfbm9kZUluY2x1ZGVTdGF0ZUNoYW5nZWQifSxfYXR0cmlidXRlczp7dHlwZTpBcnJheSxjb21wdXRlZDoiX2dldEF0dHJpYnV0ZXMoX25vZGUpIn0sX2RldmljZTp7dHlwZTpTdHJpbmcsY29tcHV0ZWQ6Il9nZXREZXZpY2UoX25vZGUpIn0sX3N1Y2Nlc3NvcnM6e3R5cGU6T2JqZWN0LGNvbXB1dGVkOiJfZ2V0U3VjY2Vzc29ycyhfbm9kZSwgZ3JhcGhIaWVyYXJjaHkpIn0sCl9wcmVkZWNlc3NvcnM6e3R5cGU6T2JqZWN0LGNvbXB1dGVkOiJfZ2V0UHJlZGVjZXNzb3JzKF9ub2RlLCBncmFwaEhpZXJhcmNoeSkifSxfZnVuY3Rpb25Vc2FnZXM6e3R5cGU6QXJyYXksY29tcHV0ZWQ6Il9nZXRGdW5jdGlvblVzYWdlcyhfbm9kZSwgZ3JhcGhIaWVyYXJjaHkpIn0sX3N1Ym5vZGVzOnt0eXBlOkFycmF5LGNvbXB1dGVkOiJfZ2V0U3Vibm9kZXMoX25vZGUpIn0sX2V4cGFuZGVkOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITB9LF90b3RhbFByZWRlY2Vzc29yczp7dHlwZTpOdW1iZXIsY29tcHV0ZWQ6Il9nZXRUb3RhbFByZWQoX3ByZWRlY2Vzc29ycykifSxfdG90YWxTdWNjZXNzb3JzOnt0eXBlOk51bWJlcixjb21wdXRlZDoiX2dldFRvdGFsU3VjYyhfc3VjY2Vzc29ycykifSxfb3BlbmVkQ29udHJvbFByZWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sX29wZW5lZENvbnRyb2xTdWNjOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LF9hdXhCdXR0b25UZXh0OlN0cmluZyxfZ3JvdXBCdXR0b25UZXh0OlN0cmluZ30sCmV4cGFuZE5vZGU6ZnVuY3Rpb24oKXt0aGlzLmZpcmUoIl9ub2RlLmV4cGFuZCIsdGhpcy5ub2RlKX0sX2dldFRlbXBsYXRlSW5kZXg6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuZ2V0VGVtcGxhdGVJbmRleCgpfSxfZ2V0Tm9kZTpmdW5jdGlvbihhLGMpe3JldHVybiBjLm5vZGUoYSl9LF9nZXROb2RlU3RhdHM6ZnVuY3Rpb24oYSxjKXtyZXR1cm4oYT10aGlzLl9nZXROb2RlKGEsYykpP2Euc3RhdHM6bnVsbH0sX2dldFRvdGFsTWljcm9zOmZ1bmN0aW9uKGEpe3JldHVybiBhP2EuZ2V0VG90YWxNaWNyb3MoKTowfSxfZ2V0SGFzRGlzcGxheWFibGVOb2RlU3RhdHM6ZnVuY3Rpb24oYSl7cmV0dXJuIHRmLmdyYXBoLnV0aWwuaGFzRGlzcGxheWFibGVOb2RlU3RhdHMoYSl9LF9nZXROb2RlU3RhdHNGb3JtYXR0ZWRCeXRlczpmdW5jdGlvbihhKXtpZihhJiZhLnRvdGFsQnl0ZXMpcmV0dXJuIHRmLmdyYXBoLnV0aWwuY29udmVydFVuaXRzVG9IdW1hblJlYWRhYmxlKGEudG90YWxCeXRlcyx0Zi5ncmFwaC51dGlsLk1FTU9SWV9VTklUUyl9LApfZ2V0Tm9kZVN0YXRzRm9ybWF0dGVkQ29tcHV0ZVRpbWU6ZnVuY3Rpb24oYSl7aWYoYSYmYS5nZXRUb3RhbE1pY3JvcygpKXJldHVybiB0Zi5ncmFwaC51dGlsLmNvbnZlcnRVbml0c1RvSHVtYW5SZWFkYWJsZShhLmdldFRvdGFsTWljcm9zKCksdGYuZ3JhcGgudXRpbC5USU1FX1VOSVRTKX0sX2dldE5vZGVTdGF0c0Zvcm1hdHRlZE91dHB1dFNpemVzOmZ1bmN0aW9uKGEpe2lmKGEmJmEub3V0cHV0U2l6ZSYmYS5vdXRwdXRTaXplLmxlbmd0aClyZXR1cm4gXy5tYXAoYS5vdXRwdXRTaXplLGZ1bmN0aW9uKGMpe3JldHVybiAwPT09Yy5sZW5ndGg/InNjYWxhciI6IlsiK2Muam9pbigiLCAiKSsiXSJ9KX0sX2dldFByaW50YWJsZUhUTUxOb2RlTmFtZTpmdW5jdGlvbihhKXtyZXR1cm4oYXx8IiIpLnJlcGxhY2UoL1wvL2csIlx4M2N3YnJceDNlLyIpfSxfZ2V0UmVuZGVySW5mbzpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5yZW5kZXJIaWVyYXJjaHkuZ2V0T3JDcmVhdGVSZW5kZXJOb2RlQnlOYW1lKGEpfSwKX2dldEF0dHJpYnV0ZXM6ZnVuY3Rpb24oYSl7dGhpcy5hc3luYyh0aGlzLl9yZXNpemVMaXN0LmJpbmQodGhpcywiI2F0dHJpYnV0ZXNMaXN0IikpO2lmKCFhfHwhYS5hdHRyKXJldHVybltdO3ZhciBjPVtdO18uZWFjaChhLmF0dHIsZnVuY3Rpb24oZCl7ZC5rZXk9PT10Zi5ncmFwaC5MQVJHRV9BVFRSU19LRVk/Yz1jLmNvbmNhdChkLnZhbHVlLmxpc3Qucy5tYXAoZnVuY3Rpb24oZil7cmV0dXJue2tleTpmLHZhbHVlOiJUb28gbGFyZ2UgdG8gc2hvdy4uLiJ9fSkpOmMucHVzaCh7a2V5OmQua2V5LHZhbHVlOkpTT04uc3RyaW5naWZ5KGQudmFsdWUpfSl9KTtyZXR1cm4gY30sX2dldERldmljZTpmdW5jdGlvbihhKXtyZXR1cm4gYT9hLmRldmljZTpudWxsfSxfZ2V0U3VjY2Vzc29ycyhhLGMpe3RoaXMuX3JlZnJlc2hOb2RlSXRlbUxpc3QoImlucHV0c0xpc3QiKTtyZXR1cm4gYT90aGlzLl9jb252ZXJ0RWRnZUxpc3RUb0VkZ2VJbmZvTGlzdChjLmdldFN1Y2Nlc3NvcnMoYS5uYW1lKSwKITEsYS5pc0dyb3VwTm9kZSk6e3JlZ3VsYXI6W10sY29udHJvbDpbXX19LF9nZXRQcmVkZWNlc3NvcnMoYSxjKXt0aGlzLl9yZWZyZXNoTm9kZUl0ZW1MaXN0KCJvdXRwdXRzTGlzdCIpO3JldHVybiBhP3RoaXMuX2NvbnZlcnRFZGdlTGlzdFRvRWRnZUluZm9MaXN0KGMuZ2V0UHJlZGVjZXNzb3JzKGEubmFtZSksITAsYS5pc0dyb3VwTm9kZSk6e3JlZ3VsYXI6W10sY29udHJvbDpbXX19LF9nZXRGdW5jdGlvblVzYWdlcyhhLGMpe3RoaXMuX3JlZnJlc2hOb2RlSXRlbUxpc3QoImZ1bmN0aW9uVXNhZ2VzTGlzdCIpO3JldHVybiBhJiZhLnR5cGU9PT10Zi5ncmFwaC5Ob2RlVHlwZS5NRVRBPyhhPWMubGlicmFyeUZ1bmN0aW9uc1thLmFzc29jaWF0ZWRGdW5jdGlvbl0pP2EudXNhZ2VzOltdOltdfSxfcmVmcmVzaE5vZGVJdGVtTGlzdChhKXt0aGlzLmFzeW5jKHRoaXMuX3Jlc2l6ZUxpc3QuYmluZCh0aGlzLGAjJHthfWApKX0sX2NvbnZlcnRFZGdlTGlzdFRvRWRnZUluZm9MaXN0OmZ1bmN0aW9uKGEsCmMsZCl7dmFyIGY9bD0+Xy5tYXAobC5iYXNlRWRnZUxpc3Qsaz0+e3ZhciBtPWM/ay52OmsudztyZXR1cm57bmFtZTptLG5vZGU6dGhpcy5fZ2V0Tm9kZShtLHRoaXMuZ3JhcGhIaWVyYXJjaHkpLGVkZ2VMYWJlbDp0Zi5ncmFwaC5zY2VuZS5lZGdlLmdldExhYmVsRm9yQmFzZUVkZ2Uoayx0aGlzLnJlbmRlckhpZXJhcmNoeSkscmVuZGVySW5mbzp0aGlzLl9nZXRSZW5kZXJJbmZvKG0sdGhpcy5yZW5kZXJIaWVyYXJjaHkpfX0pLGc9ZnVuY3Rpb24obCl7dmFyIGs9W107Xy5lYWNoKGwsbT0+e3ZhciBwPWM/bS52Om0udztkJiYxIT1tLmJhc2VFZGdlTGlzdC5sZW5ndGg/ay5wdXNoKHtuYW1lOnAsbm9kZTp0aGlzLl9nZXROb2RlKHAsdGhpcy5ncmFwaEhpZXJhcmNoeSksZWRnZUxhYmVsOnRmLmdyYXBoLnNjZW5lLmVkZ2UuZ2V0TGFiZWxGb3JFZGdlKG0sdGhpcy5yZW5kZXJIaWVyYXJjaHkpLHJlbmRlckluZm86dGhpcy5fZ2V0UmVuZGVySW5mbyhwLHRoaXMucmVuZGVySGllcmFyY2h5KX0pOgprPWsuY29uY2F0KGYobSkpfSk7cmV0dXJuIGt9LmJpbmQodGhpcyk7cmV0dXJue3JlZ3VsYXI6ZyhhLnJlZ3VsYXIpLGNvbnRyb2w6ZyhhLmNvbnRyb2wpfX0sX2dldFN1Ym5vZGVzOmZ1bmN0aW9uKGEpe3JldHVybiBhJiZhLm1ldGFncmFwaD9hLm1ldGFncmFwaC5ub2RlcygpOm51bGx9LF9nZXRUb3RhbFByZWQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEucmVndWxhci5sZW5ndGgrYS5jb250cm9sLmxlbmd0aH0sX2dldFRvdGFsU3VjYzpmdW5jdGlvbihhKXtyZXR1cm4gYS5yZWd1bGFyLmxlbmd0aCthLmNvbnRyb2wubGVuZ3RofSxfdG9nZ2xlQ29udHJvbFByZWQ6ZnVuY3Rpb24oKXt0aGlzLl9vcGVuZWRDb250cm9sUHJlZD0hdGhpcy5fb3BlbmVkQ29udHJvbFByZWR9LF90b2dnbGVDb250cm9sU3VjYzpmdW5jdGlvbigpe3RoaXMuX29wZW5lZENvbnRyb2xTdWNjPSF0aGlzLl9vcGVuZWRDb250cm9sU3VjY30sX3RvZ2dsZUV4cGFuZGVkOmZ1bmN0aW9uKCl7dGhpcy5fZXhwYW5kZWQ9CiF0aGlzLl9leHBhbmRlZH0sX2dldFRvZ2dsZUljb246ZnVuY3Rpb24oYSl7cmV0dXJuIGE/ImV4cGFuZC1sZXNzIjoiZXhwYW5kLW1vcmUifSxfcmVzZXRTdGF0ZTpmdW5jdGlvbigpe3RoaXMuX29wZW5lZENvbnRyb2xTdWNjPXRoaXMuX29wZW5lZENvbnRyb2xQcmVkPSExO3RoaXMuc2V0KCJfZ3JvdXBCdXR0b25UZXh0Iix0Zi5ncmFwaC5zY2VuZS5ub2RlLmdldEdyb3VwU2V0dGluZ0xhYmVsKHRoaXMuX25vZGUpKTt0aGlzLl9ub2RlJiYoUG9seW1lci5kb20odGhpcy4kLm5vZGV0aXRsZSkuaW5uZXJIVE1MPXRoaXMuX2dldFByaW50YWJsZUhUTUxOb2RlTmFtZSh0aGlzLl9ub2RlLm5hbWUpKX0sX3Jlc2l6ZUxpc3Q6ZnVuY3Rpb24oYSl7KGE9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihhKSkmJmEuZmlyZSgiaXJvbi1yZXNpemUiKX0sX3RvZ2dsZUluY2x1ZGU6ZnVuY3Rpb24oKXt0aGlzLmZpcmUoIm5vZGUtdG9nZ2xlLWluY2x1c2lvbiIse25hbWU6dGhpcy5ub2RlTmFtZX0pfSwKX25vZGVJbmNsdWRlU3RhdGVDaGFuZ2VkOmZ1bmN0aW9uKGEpe3RoaXMuc2V0KCJfYXV4QnV0dG9uVGV4dCIsdGYuZ3JhcGguZ2V0SW5jbHVkZU5vZGVCdXR0b25TdHJpbmcoYSkpfSxfdG9nZ2xlR3JvdXA6ZnVuY3Rpb24oKXt2YXIgYT10Zi5ncmFwaC5zY2VuZS5ub2RlLmdldFNlcmllc05hbWUodGhpcy5fbm9kZSk7dGhpcy5maXJlKCJub2RlLXRvZ2dsZS1zZXJpZXNncm91cCIse25hbWU6YX0pfSxfaXNMaWJyYXJ5RnVuY3Rpb24oYSl7cmV0dXJuIGEmJmEubmFtZS5zdGFydHNXaXRoKHRmLmdyYXBoLkZVTkNUSU9OX0xJQlJBUllfTk9ERV9QUkVGSVgpfSxfaXNJblNlcmllczpmdW5jdGlvbihhKXtyZXR1cm4gdGYuZ3JhcGguc2NlbmUubm9kZS5jYW5CZUluU2VyaWVzKGEpfX0pfSkoKTsKPC9zY3JpcHQ+CjwvZG9tLW1vZHVsZT4KCgo8ZG9tLW1vZHVsZSBpZD0idGYtZ3JhcGgtaW5mbyI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIG1hcmdpbjogMDsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIG1heC1oZWlnaHQ6IDY1MHB4OwogICAgICAgIG92ZXJmbG93LXg6IGhpZGRlbjsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICB9CgogICAgICBoMiB7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICB9CiAgICA8L3N0eWxlPgogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJ7e3NlbGVjdGVkTm9kZX19Ij4KICAgICAgPHBhcGVyLW1hdGVyaWFsIGVsZXZhdGlvbj0iMSIgY2xhc3M9ImNhcmQiPgogICAgICAgIDx0Zi1ub2RlLWluZm8gZ3JhcGgtaGllcmFyY2h5PSJbW2dyYXBoSGllcmFyY2h5XV0iIHJlbmRlci1oaWVyYXJjaHk9IltbcmVuZGVySGllcmFyY2h5XV0iIGZsYXQtZ3JhcGg9IltbZ3JhcGhdXSIgbm9kZS1uYW1lPSJbW3NlbGVjdGVkTm9kZV1dIiBub2RlLWluY2x1ZGU9Iltbc2VsZWN0ZWROb2RlSW5jbHVkZV1dIiBoaWdobGlnaHRlZC1ub2RlPSJ7e2hpZ2hsaWdodGVkTm9kZX19IiBjb2xvci1ieT0iW1tjb2xvckJ5XV0iPgogICAgICAgIDwvdGYtbm9kZS1pbmZvPgogICAgICA8L3BhcGVyLW1hdGVyaWFsPgogICAgPC90ZW1wbGF0ZT4KICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfZXF1YWxzKGNvbG9yQnksICdvcF9jb21wYXRpYmlsaXR5JyldXSI+CiAgICAgIDx0Zi1ncmFwaC1vcC1jb21wYXQtY2FyZCBncmFwaC1oaWVyYXJjaHk9IltbZ3JhcGhIaWVyYXJjaHldXSIgaGllcmFyY2h5LXBhcmFtcz0iW1toaWVyYXJjaHlQYXJhbXNdXSIgcmVuZGVyLWhpZXJhcmNoeT0iW1tyZW5kZXJIaWVyYXJjaHldXSIgY29sb3ItYnk9IltbY29sb3JCeV1dIiBub2RlLXRpdGxlPSJbW2NvbXBhdE5vZGVUaXRsZV1dIj4KICAgICAgPC90Zi1ncmFwaC1vcC1jb21wYXQtY2FyZD4KICAgIDwvdGVtcGxhdGU+CiAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2hlYWx0aFBpbGxzQXZhaWxhYmxlKGRlYnVnZ2VyRGF0YUVuYWJsZWQsIG5vZGVOYW1lc1RvSGVhbHRoUGlsbHMpXV0iPgogICAgICA8dGYtZ3JhcGgtZGVidWdnZXItZGF0YS1jYXJkIHJlbmRlci1oaWVyYXJjaHk9IltbcmVuZGVySGllcmFyY2h5XV0iIGRlYnVnZ2VyLW51bWVyaWMtYWxlcnRzPSJbW2RlYnVnZ2VyTnVtZXJpY0FsZXJ0c11dIiBub2RlLW5hbWVzLXRvLWhlYWx0aC1waWxscz0iW1tub2RlTmFtZXNUb0hlYWx0aFBpbGxzXV0iIHNlbGVjdGVkLW5vZGU9Int7c2VsZWN0ZWROb2RlfX0iIGhpZ2hsaWdodGVkLW5vZGU9Int7aGlnaGxpZ2h0ZWROb2RlfX0iIGFyZS1oZWFsdGgtcGlsbHMtbG9hZGluZz0iW1thcmVIZWFsdGhQaWxsc0xvYWRpbmddXSIgYWxsLXN0ZXBzLW1vZGUtZW5hYmxlZD0ie3thbGxTdGVwc01vZGVFbmFibGVkfX0iIHNwZWNpZmljLWhlYWx0aC1waWxsLXN0ZXA9Int7c3BlY2lmaWNIZWFsdGhQaWxsU3RlcH19IiBoZWFsdGgtcGlsbC1zdGVwLWluZGV4PSJ7e2hlYWx0aFBpbGxTdGVwSW5kZXh9fSI+CiAgICAgIDwvdGYtZ3JhcGgtZGVidWdnZXItZGF0YS1jYXJkPgogICAgPC90ZW1wbGF0ZT4KICA8L3RlbXBsYXRlPgogIDxzY3JpcHQ+Ly9+fldFQlBBVEh+fi90Zi1ncmFwaC1pbmZvL3RmLWdyYXBoLWluZm8uaHRtbC5qcwooZnVuY3Rpb24oKXtQb2x5bWVyKHtpczoidGYtZ3JhcGgtaW5mbyIscHJvcGVydGllczp7dGl0bGU6U3RyaW5nLGdyYXBoSGllcmFyY2h5Ok9iamVjdCxncmFwaDpPYmplY3QscmVuZGVySGllcmFyY2h5Ok9iamVjdCxub2RlTmFtZXNUb0hlYWx0aFBpbGxzOk9iamVjdCxoZWFsdGhQaWxsU3RlcEluZGV4Ont0eXBlOk51bWJlcixub3RpZnk6ITB9LGNvbG9yQnk6U3RyaW5nLGNvbXBhdE5vZGVUaXRsZTpTdHJpbmcsc2VsZWN0ZWROb2RlOnt0eXBlOlN0cmluZyxub3RpZnk6ITB9LGhpZ2hsaWdodGVkTm9kZTp7dHlwZTpTdHJpbmcsbm90aWZ5OiEwfSxzZWxlY3RlZE5vZGVJbmNsdWRlOnt0eXBlOk51bWJlcixub3RpZnk6ITB9LGRlYnVnZ2VyRGF0YUVuYWJsZWQ6Qm9vbGVhbn0sbGlzdGVuZXJzOnsibm9kZS1saXN0LWl0ZW0tY2xpY2siOiJfbm9kZUxpc3RJdGVtQ2xpY2tlZCIsIm5vZGUtbGlzdC1pdGVtLW1vdXNlb3ZlciI6Il9ub2RlTGlzdEl0ZW1Nb3VzZW92ZXIiLCJub2RlLWxpc3QtaXRlbS1tb3VzZW91dCI6Il9ub2RlTGlzdEl0ZW1Nb3VzZW91dCJ9LApfbm9kZUxpc3RJdGVtQ2xpY2tlZDpmdW5jdGlvbihhKXt0aGlzLnNlbGVjdGVkTm9kZT1hLmRldGFpbC5ub2RlTmFtZX0sX25vZGVMaXN0SXRlbU1vdXNlb3ZlcjpmdW5jdGlvbihhKXt0aGlzLmhpZ2hsaWdodGVkTm9kZT1hLmRldGFpbC5ub2RlTmFtZX0sX25vZGVMaXN0SXRlbU1vdXNlb3V0OmZ1bmN0aW9uKCl7dGhpcy5oaWdobGlnaHRlZE5vZGU9bnVsbH0sX2hlYWx0aFBpbGxzQXZhaWxhYmxlOmZ1bmN0aW9uKGEsYyl7cmV0dXJuIGEmJmMmJjA8T2JqZWN0LmtleXMoYykubGVuZ3RofSxfZXF1YWxzOmZ1bmN0aW9uKGEsYyl7cmV0dXJuIGE9PT1jfX0pfSkoKTsKPC9zY3JpcHQ+CjwvZG9tLW1vZHVsZT4KCgoKCjxkb20tbW9kdWxlIGlkPSJ0Zi1ncmFwaC1ib2FyZCI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICA6Omhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CgogICAgICAvZGVlcC8gLmNsb3NlIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIGxlZnQ6IDE1cHg7CiAgICAgICAgYm90dG9tOiAxNXB4OwogICAgICB9CgogICAgICAuY29udGFpbmVyIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgfQoKICAgICAgLmNvbnRhaW5lci5sb2FkaW5nIHsKICAgICAgICBjdXJzb3I6IHByb2dyZXNzOwogICAgICAgIG9wYWNpdHk6IDAuMTsKICAgICAgfQoKICAgICAgLmNvbnRhaW5lci5sb2FkaW5nLmVycm9yIHsKICAgICAgICBjdXJzb3I6IGF1dG87CiAgICAgIH0KCiAgICAgICNpbmZvIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgcmlnaHQ6IDVweDsKICAgICAgICB0b3A6IDVweDsKICAgICAgICBwYWRkaW5nOiAwcHg7CiAgICAgICAgbWF4LXdpZHRoOiAzODBweDsKICAgICAgICBtaW4td2lkdGg6IDMyMHB4OwogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45KTsKICAgICAgICBAYXBwbHkgLS1zaGFkb3ctZWxldmF0aW9uLTJkcDsKICAgICAgfQoKICAgICAgI21haW4gewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgfQoKICAgICAgI3Byb2dyZXNzLWJhciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogNDBweDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgfQoKICAgICAgI3Byb2dyZXNzLW1zZyB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogNXB4OwogICAgICAgIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKICAgICAgICB3aWR0aDogNDAwcHg7CiAgICAgIH0KCiAgICAgIHBhcGVyLXByb2dyZXNzIHsKICAgICAgICB3aWR0aDogNDAwcHg7CiAgICAgICAgLS1wYXBlci1wcm9ncmVzcy1oZWlnaHQ6IDZweDsKICAgICAgICAtLXBhcGVyLXByb2dyZXNzLWFjdGl2ZS1jb2xvcjogI2YzOTEzZTsKICAgICAgfQoKICAgICAgLmNvbnRleHQtbWVudSB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2UyZTJlMjsKICAgICAgICBib3JkZXItcmFkaXVzOiAycHg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIG1pbi13aWR0aDogMTUwcHg7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2Q0ZDRkNDsKICAgICAgfQoKICAgICAgL2RlZXAvIC5jb250ZXh0LW1lbnUgdWwgewogICAgICAgIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICAgIH0KCiAgICAgIC9kZWVwLyAuY29udGV4dC1tZW51IHVsIGxpIHsKICAgICAgICBwYWRkaW5nOiA0cHggMTZweDsKICAgICAgfQoKICAgICAgL2RlZXAvIC5jb250ZXh0LW1lbnUgdWwgbGk6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmMzkxM2U7CiAgICAgICAgY29sb3I6IHdoaXRlOwogICAgICB9CiAgICA8L3N0eWxlPgogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19pc05vdENvbXBsZXRlKHByb2dyZXNzKV1dIj4KICAgICAgPGRpdiBpZD0icHJvZ3Jlc3MtYmFyIj4KICAgICAgICA8ZGl2IGlkPSJwcm9ncmVzcy1tc2ciPltbcHJvZ3Jlc3MubXNnXV08L2Rpdj4KICAgICAgICA8cGFwZXItcHJvZ3Jlc3MgdmFsdWU9IltbcHJvZ3Jlc3MudmFsdWVdXSI+PC9wYXBlci1wcm9ncmVzcz4KICAgICAgPC9kaXY+CiAgICA8L3RlbXBsYXRlPgogICAgPGRpdiBjbGFzcyQ9IltbX2dldENvbnRhaW5lckNsYXNzKHByb2dyZXNzKV1dIj4KICAgICAgPGRpdiBpZD0ibWFpbiI+CiAgICAgICAgPHRmLWdyYXBoIGlkPSJncmFwaCIgZ3JhcGgtaGllcmFyY2h5PSJ7e2dyYXBoSGllcmFyY2h5fX0iIGJhc2ljLWdyYXBoPSJbW2dyYXBoXV0iIGhpZXJhcmNoeS1wYXJhbXM9IltbaGllcmFyY2h5UGFyYW1zXV0iIHJlbmRlci1oaWVyYXJjaHk9Int7cmVuZGVySGllcmFyY2h5fX0iIGRldmljZXMtZm9yLXN0YXRzPSJbW2RldmljZXNGb3JTdGF0c11dIiBzdGF0cz0iW1tzdGF0c11dIiBzZWxlY3RlZC1ub2RlPSJ7e3NlbGVjdGVkTm9kZX19IiBoaWdobGlnaHRlZC1ub2RlPSJ7e19oaWdobGlnaHRlZE5vZGV9fSIgY29sb3ItYnk9IltbY29sb3JCeV1dIiBjb2xvci1ieS1wYXJhbXM9Int7Y29sb3JCeVBhcmFtc319IiBwcm9ncmVzcz0ie3twcm9ncmVzc319IiBlZGdlLWxhYmVsLWZ1bmN0aW9uPSJbW2VkZ2VMYWJlbEZ1bmN0aW9uXV0iIGVkZ2Utd2lkdGgtZnVuY3Rpb249IltbZWRnZVdpZHRoRnVuY3Rpb25dXSIgbm9kZS1uYW1lcy10by1oZWFsdGgtcGlsbHM9Iltbbm9kZU5hbWVzVG9IZWFsdGhQaWxsc11dIiBoZWFsdGgtcGlsbC1zdGVwLWluZGV4PSJbW2hlYWx0aFBpbGxTdGVwSW5kZXhdXSIgaGFuZGxlLW5vZGUtc2VsZWN0ZWQ9IltbaGFuZGxlTm9kZVNlbGVjdGVkXV0iIGhhbmRsZS1lZGdlLXNlbGVjdGVkPSJbW2hhbmRsZUVkZ2VTZWxlY3RlZF1dIiB0cmFjZS1pbnB1dHM9IltbdHJhY2VJbnB1dHNdXSI+PC90Zi1ncmFwaD4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgaWQ9ImluZm8iPgogICAgICAgIDx0Zi1ncmFwaC1pbmZvIGlkPSJncmFwaC1pbmZvIiB0aXRsZT0ic2VsZWN0ZWQiIGdyYXBoLWhpZXJhcmNoeT0iW1tncmFwaEhpZXJhcmNoeV1dIiBoaWVyYXJjaHktcGFyYW1zPSJbW2hpZXJhcmNoeVBhcmFtc11dIiByZW5kZXItaGllcmFyY2h5PSJbW3JlbmRlckhpZXJhcmNoeV1dIiBncmFwaD0iW1tncmFwaF1dIiBzZWxlY3RlZC1ub2RlPSJ7e3NlbGVjdGVkTm9kZX19IiBzZWxlY3RlZC1ub2RlLWluY2x1ZGU9Int7X3NlbGVjdGVkTm9kZUluY2x1ZGV9fSIgaGlnaGxpZ2h0ZWQtbm9kZT0ie3tfaGlnaGxpZ2h0ZWROb2RlfX0iIGNvbG9yLWJ5PSJbW2NvbG9yQnldXSIgY29sb3ItYnktcGFyYW1zPSJbW2NvbG9yQnlQYXJhbXNdXSIgZGVidWdnZXItZGF0YS1lbmFibGVkPSJbW2RlYnVnZ2VyRGF0YUVuYWJsZWRdXSIgYXJlLWhlYWx0aC1waWxscy1sb2FkaW5nPSJbW2FyZUhlYWx0aFBpbGxzTG9hZGluZ11dIiBkZWJ1Z2dlci1udW1lcmljLWFsZXJ0cz0iW1tkZWJ1Z2dlck51bWVyaWNBbGVydHNdXSIgbm9kZS1uYW1lcy10by1oZWFsdGgtcGlsbHM9Iltbbm9kZU5hbWVzVG9IZWFsdGhQaWxsc11dIiBhbGwtc3RlcHMtbW9kZS1lbmFibGVkPSJ7e2FsbFN0ZXBzTW9kZUVuYWJsZWR9fSIgc3BlY2lmaWMtaGVhbHRoLXBpbGwtc3RlcD0ie3tzcGVjaWZpY0hlYWx0aFBpbGxTdGVwfX0iIGhlYWx0aC1waWxsLXN0ZXAtaW5kZXg9Int7aGVhbHRoUGlsbFN0ZXBJbmRleH19IiBjb21wYXQtbm9kZS10aXRsZT0iW1tjb21wYXROb2RlVGl0bGVdXSIgb24tbm9kZS10b2dnbGUtaW5jbHVzaW9uPSJfb25Ob2RlSW5jbHVzaW9uVG9nZ2xlZCIgb24tbm9kZS10b2dnbGUtc2VyaWVzZ3JvdXA9Il9vbk5vZGVTZXJpZXNHcm91cFRvZ2dsZWQiPjwvdGYtZ3JhcGgtaW5mbz4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+Cgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdGYtZ3JhcGgtYm9hcmQvdGYtZ3JhcGgtYm9hcmQuaHRtbC5qcwpQb2x5bWVyKHtpczoidGYtZ3JhcGgtYm9hcmQiLHByb3BlcnRpZXM6e2dyYXBoSGllcmFyY2h5Ok9iamVjdCxncmFwaDpPYmplY3Qsc3RhdHM6T2JqZWN0LHByb2dyZXNzOk9iamVjdCx0cmFjZUlucHV0czpCb29sZWFuLGNvbG9yQnk6U3RyaW5nLGNvbG9yQnlQYXJhbXM6e3R5cGU6T2JqZWN0LG5vdGlmeTohMH0scmVuZGVySGllcmFyY2h5Ont0eXBlOk9iamVjdCxub3RpZnk6ITB9LGRlYnVnZ2VyRGF0YUVuYWJsZWQ6Qm9vbGVhbixhcmVIZWFsdGhQaWxsc0xvYWRpbmc6Qm9vbGVhbixkZWJ1Z2dlck51bWVyaWNBbGVydHM6e3R5cGU6QXJyYXksbm90aWZ5OiEwfSxub2RlTmFtZXNUb0hlYWx0aFBpbGxzOk9iamVjdCxhbGxTdGVwc01vZGVFbmFibGVkOnt0eXBlOkJvb2xlYW4sbm90aWZ5OiEwLHZhbHVlOiExfSxzcGVjaWZpY0hlYWx0aFBpbGxTdGVwOnt0eXBlOk51bWJlcixub3RpZnk6ITAsdmFsdWU6MH0saGVhbHRoUGlsbFN0ZXBJbmRleDpOdW1iZXIsc2VsZWN0ZWROb2RlOnt0eXBlOlN0cmluZywKbm90aWZ5OiEwfSxjb21wYXROb2RlVGl0bGU6e3R5cGU6U3RyaW5nLHZhbHVlOiJUUFUgQ29tcGF0aWJpbGl0eSJ9LGVkZ2VXaWR0aEZ1bmN0aW9uOk9iamVjdCxfc2VsZWN0ZWROb2RlSW5jbHVkZTpOdW1iZXIsX2hpZ2hsaWdodGVkTm9kZTpTdHJpbmcsaGFuZGxlTm9kZVNlbGVjdGVkOk9iamVjdCxlZGdlTGFiZWxGdW5jdGlvbjpPYmplY3QsaGFuZGxlRWRnZVNlbGVjdGVkOk9iamVjdH0sb2JzZXJ2ZXJzOlsiX3VwZGF0ZU5vZGVJbmNsdWRlKHNlbGVjdGVkTm9kZSwgcmVuZGVySGllcmFyY2h5KSJdLGZpdDpmdW5jdGlvbigpe3RoaXMuJC5ncmFwaC5maXQoKX0sX2lzTm90Q29tcGxldGU6ZnVuY3Rpb24oYSl7cmV0dXJuIDEwMD5hLnZhbHVlfSxfZ2V0Q29udGFpbmVyQ2xhc3M6ZnVuY3Rpb24oYSl7dmFyIGM9ImNvbnRhaW5lciI7YS5lcnJvciYmKGMrPSIgZXJyb3IiKTt0aGlzLl9pc05vdENvbXBsZXRlKGEpJiYoYys9IiBsb2FkaW5nIik7cmV0dXJuIGN9LF9vbk5vZGVJbmNsdXNpb25Ub2dnbGVkKGEpe3RoaXMuJC5ncmFwaC5ub2RlVG9nZ2xlRXh0cmFjdChhLmRldGFpbC5uYW1lKX0sCl9vbk5vZGVTZXJpZXNHcm91cFRvZ2dsZWQoYSl7dGhpcy4kLmdyYXBoLm5vZGVUb2dnbGVTZXJpZXNHcm91cChhLmRldGFpbC5uYW1lKX0sX3VwZGF0ZU5vZGVJbmNsdWRlKCl7Y29uc3QgYT10aGlzLnJlbmRlckhpZXJhcmNoeT90aGlzLnJlbmRlckhpZXJhcmNoeS5nZXROb2RlQnlOYW1lKHRoaXMuc2VsZWN0ZWROb2RlKTpudWxsO3RoaXMuX3NlbGVjdGVkTm9kZUluY2x1ZGU9YT9hLmluY2x1ZGU6dGYuZ3JhcGguSW5jbHVzaW9uVHlwZS5VTlNQRUNJRklFRH19KTsKPC9zY3JpcHQ+CgoKCgoKCgoKCgoKCjxzY3JpcHQ+Ly9+fldFQlBBVEh+fi9pcm9uLW1lbnUtYmVoYXZpb3IvaXJvbi1tZW51YmFyLWJlaGF2aW9yLmh0bWwuanMKUG9seW1lci5Jcm9uTWVudWJhckJlaGF2aW9ySW1wbD17aG9zdEF0dHJpYnV0ZXM6e3JvbGU6Im1lbnViYXIifSxrZXlCaW5kaW5nczp7bGVmdDoiX29uTGVmdEtleSIscmlnaHQ6Il9vblJpZ2h0S2V5In0sX29uVXBLZXk6ZnVuY3Rpb24oYSl7dGhpcy5mb2N1c2VkSXRlbS5jbGljaygpO2EuZGV0YWlsLmtleWJvYXJkRXZlbnQucHJldmVudERlZmF1bHQoKX0sX29uRG93bktleTpmdW5jdGlvbihhKXt0aGlzLmZvY3VzZWRJdGVtLmNsaWNrKCk7YS5kZXRhaWwua2V5Ym9hcmRFdmVudC5wcmV2ZW50RGVmYXVsdCgpfSxnZXQgX2lzUlRMKCl7cmV0dXJuInJ0bCI9PT13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzKS5kaXJlY3Rpb259LF9vbkxlZnRLZXk6ZnVuY3Rpb24oYSl7dGhpcy5faXNSVEw/dGhpcy5fZm9jdXNOZXh0KCk6dGhpcy5fZm9jdXNQcmV2aW91cygpO2EuZGV0YWlsLmtleWJvYXJkRXZlbnQucHJldmVudERlZmF1bHQoKX0sX29uUmlnaHRLZXk6ZnVuY3Rpb24oYSl7dGhpcy5faXNSVEw/CnRoaXMuX2ZvY3VzUHJldmlvdXMoKTp0aGlzLl9mb2N1c05leHQoKTthLmRldGFpbC5rZXlib2FyZEV2ZW50LnByZXZlbnREZWZhdWx0KCl9LF9vbktleWRvd246ZnVuY3Rpb24oYSl7dGhpcy5rZXlib2FyZEV2ZW50TWF0Y2hlc0tleXMoYSwidXAgZG93biBsZWZ0IHJpZ2h0IGVzYyIpfHx0aGlzLl9mb2N1c1dpdGhLZXlib2FyZEV2ZW50KGEpfX07UG9seW1lci5Jcm9uTWVudWJhckJlaGF2aW9yPVtQb2x5bWVyLklyb25NZW51QmVoYXZpb3IsUG9seW1lci5Jcm9uTWVudWJhckJlaGF2aW9ySW1wbF07Cjwvc2NyaXB0PgoKCgoKCgoKCjxkb20tbW9kdWxlIGlkPSJwYXBlci1yYWRpby1idXR0b24iPgogIDx0ZW1wbGF0ZSBzdHJpcC13aGl0ZXNwYWNlPgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIGxpbmUtaGVpZ2h0OiAwOwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLWJhc2U7CiAgICAgICAgLS1jYWxjdWxhdGVkLXBhcGVyLXJhZGlvLWJ1dHRvbi1zaXplOiB2YXIoLS1wYXBlci1yYWRpby1idXR0b24tc2l6ZSwgMTZweCk7CiAgICAgICAgLyogLTFweCBpcyBhIHNlbnRpbmVsIGZvciB0aGUgZGVmYXVsdCBhbmQgaXMgcmVwbGFjZSBpbiBgYXR0YWNoZWRgLiAqLwogICAgICAgIC0tY2FsY3VsYXRlZC1wYXBlci1yYWRpby1idXR0b24taW5rLXNpemU6IHZhcigtLXBhcGVyLXJhZGlvLWJ1dHRvbi1pbmstc2l6ZSwgLTFweCk7CiAgICAgIH0KCiAgICAgIDpob3N0KDpmb2N1cykgewogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgIH0KCiAgICAgICNyYWRpb0NvbnRhaW5lciB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWlubGluZTsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtY2VudGVyLWNlbnRlcjsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItcmFkaW8tYnV0dG9uLXNpemUpOwogICAgICAgIGhlaWdodDogdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1yYWRpby1idXR0b24tc2l6ZSk7CiAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItcmFkaW8tYnV0dG9uLXJhZGlvLWNvbnRhaW5lcjsKICAgICAgfQoKICAgICAgI2luayB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogNTAlOwogICAgICAgIGxlZnQ6IDUwJTsKICAgICAgICByaWdodDogYXV0bzsKICAgICAgICB3aWR0aDogdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1yYWRpby1idXR0b24taW5rLXNpemUpOwogICAgICAgIGhlaWdodDogdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1yYWRpby1idXR0b24taW5rLXNpemUpOwogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1yYWRpby1idXR0b24tdW5jaGVja2VkLWluay1jb2xvciwgdmFyKC0tcHJpbWFyeS10ZXh0LWNvbG9yKSk7CiAgICAgICAgb3BhY2l0eTogMC42OwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7CiAgICAgIH0KCiAgICAgICNpbmtbY2hlY2tlZF0gewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1yYWRpby1idXR0b24tY2hlY2tlZC1pbmstY29sb3IsIHZhcigtLXByaW1hcnktY29sb3IpKTsKICAgICAgfQoKICAgICAgI29mZlJhZGlvLCAjb25SYWRpbyB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgfQoKICAgICAgI29mZlJhZGlvIHsKICAgICAgICBib3JkZXI6IDJweCBzb2xpZCB2YXIoLS1wYXBlci1yYWRpby1idXR0b24tdW5jaGVja2VkLWNvbG9yLCB2YXIoLS1wcmltYXJ5LXRleHQtY29sb3IpKTsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci1yYWRpby1idXR0b24tdW5jaGVja2VkLWJhY2tncm91bmQtY29sb3IsIHRyYW5zcGFyZW50KTsKICAgICAgICB0cmFuc2l0aW9uOiBib3JkZXItY29sb3IgMC4yOHM7CiAgICAgIH0KCiAgICAgICNvblJhZGlvIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci1yYWRpby1idXR0b24tY2hlY2tlZC1jb2xvciwgdmFyKC0tcHJpbWFyeS1jb2xvcikpOwogICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgwKTsKICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDApOwogICAgICAgIHRyYW5zaXRpb246IC13ZWJraXQtdHJhbnNmb3JtIGVhc2UgMC4yOHM7CiAgICAgICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIGVhc2UgMC4yOHM7CiAgICAgICAgd2lsbC1jaGFuZ2U6IHRyYW5zZm9ybTsKICAgICAgfQoKICAgICAgOmhvc3QoW2NoZWNrZWRdKSAjb2ZmUmFkaW8gewogICAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tcGFwZXItcmFkaW8tYnV0dG9uLWNoZWNrZWQtY29sb3IsIHZhcigtLXByaW1hcnktY29sb3IpKTsKICAgICAgfQoKICAgICAgOmhvc3QoW2NoZWNrZWRdKSAjb25SYWRpbyB7CiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDAuNSk7CiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwLjUpOwogICAgICB9CgogICAgICAjcmFkaW9MYWJlbCB7CiAgICAgICAgbGluZS1oZWlnaHQ6IG5vcm1hbDsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CiAgICAgICAgbWFyZ2luLWxlZnQ6IHZhcigtLXBhcGVyLXJhZGlvLWJ1dHRvbi1sYWJlbC1zcGFjaW5nLCAxMHB4KTsKICAgICAgICB3aGl0ZS1zcGFjZTogbm9ybWFsOwogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1yYWRpby1idXR0b24tbGFiZWwtY29sb3IsIHZhcigtLXByaW1hcnktdGV4dC1jb2xvcikpOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1yYWRpby1idXR0b24tbGFiZWw7CiAgICAgIH0KCiAgICAgIDpob3N0KFtjaGVja2VkXSkgI3JhZGlvTGFiZWwgewogICAgICAgIEBhcHBseSAtLXBhcGVyLXJhZGlvLWJ1dHRvbi1sYWJlbC1jaGVja2VkOwogICAgICB9CgogICAgICAjcmFkaW9MYWJlbDpkaXIocnRsKSB7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDA7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiB2YXIoLS1wYXBlci1yYWRpby1idXR0b24tbGFiZWwtc3BhY2luZywgMTBweCk7CiAgICAgIH0KCiAgICAgICNyYWRpb0xhYmVsW2hpZGRlbl0gewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KCiAgICAgIC8qIGRpc2FibGVkIHN0YXRlICovCgogICAgICA6aG9zdChbZGlzYWJsZWRdKSAjb2ZmUmFkaW8gewogICAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tcGFwZXItcmFkaW8tYnV0dG9uLXVuY2hlY2tlZC1jb2xvciwgdmFyKC0tcHJpbWFyeS10ZXh0LWNvbG9yKSk7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICB9CgogICAgICA6aG9zdChbZGlzYWJsZWRdW2NoZWNrZWRdKSAjb25SYWRpbyB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItcmFkaW8tYnV0dG9uLXVuY2hlY2tlZC1jb2xvciwgdmFyKC0tcHJpbWFyeS10ZXh0LWNvbG9yKSk7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICB9CgogICAgICA6aG9zdChbZGlzYWJsZWRdKSAjcmFkaW9MYWJlbCB7CiAgICAgICAgLyogc2xpZ2h0bHkgZGFya2VyIHRoYW4gdGhlIGJ1dHRvbiwgc28gdGhhdCBpdCdzIHJlYWRhYmxlICovCiAgICAgICAgb3BhY2l0eTogMC42NTsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8ZGl2IGlkPSJyYWRpb0NvbnRhaW5lciI+CiAgICAgIDxkaXYgaWQ9Im9mZlJhZGlvIj48L2Rpdj4KICAgICAgPGRpdiBpZD0ib25SYWRpbyI+PC9kaXY+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGlkPSJyYWRpb0xhYmVsIj48c2xvdD48L3Nsb3Q+PC9kaXY+CiAgPC90ZW1wbGF0ZT4KCiAgPHNjcmlwdD4vL35+V0VCUEFUSH5+L3BhcGVyLXJhZGlvLWJ1dHRvbi9wYXBlci1yYWRpby1idXR0b24uaHRtbC5qcwpQb2x5bWVyKHtpczoicGFwZXItcmFkaW8tYnV0dG9uIixiZWhhdmlvcnM6W1BvbHltZXIuUGFwZXJDaGVja2VkRWxlbWVudEJlaGF2aW9yXSxob3N0QXR0cmlidXRlczp7cm9sZToicmFkaW8iLCJhcmlhLWNoZWNrZWQiOiExLHRhYmluZGV4OjB9LHByb3BlcnRpZXM6e2FyaWFBY3RpdmVBdHRyaWJ1dGU6e3R5cGU6U3RyaW5nLHZhbHVlOiJhcmlhLWNoZWNrZWQifX0scmVhZHk6ZnVuY3Rpb24oKXt0aGlzLl9yaXBwbGVDb250YWluZXI9dGhpcy4kLnJhZGlvQ29udGFpbmVyfSxhdHRhY2hlZDpmdW5jdGlvbigpe1BvbHltZXIuUmVuZGVyU3RhdHVzLmFmdGVyTmV4dFJlbmRlcih0aGlzLGZ1bmN0aW9uKCl7aWYoIi0xcHgiPT09dGhpcy5nZXRDb21wdXRlZFN0eWxlVmFsdWUoIi0tY2FsY3VsYXRlZC1wYXBlci1yYWRpby1idXR0b24taW5rLXNpemUiKS50cmltKCkpe3ZhciBhPXBhcnNlRmxvYXQodGhpcy5nZXRDb21wdXRlZFN0eWxlVmFsdWUoIi0tY2FsY3VsYXRlZC1wYXBlci1yYWRpby1idXR0b24tc2l6ZSIpLnRyaW0oKSksCmM9TWF0aC5mbG9vcigzKmEpO2MlMiE9PWElMiYmYysrO3RoaXMudXBkYXRlU3R5bGVzKHsiLS1wYXBlci1yYWRpby1idXR0b24taW5rLXNpemUiOmMrInB4In0pfX0pfX0pOwo8L3NjcmlwdD4KPC9kb20tbW9kdWxlPgoKCgoKPGRvbS1tb2R1bGUgaWQ9InBhcGVyLXJhZGlvLWdyb3VwIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgIH0KCiAgICAgIDpob3N0IDo6c2xvdHRlZCgqKSB7CiAgICAgICAgcGFkZGluZzogdmFyKC0tcGFwZXItcmFkaW8tZ3JvdXAtaXRlbS1wYWRkaW5nLCAxMnB4KTsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8c2xvdD48L3Nsb3Q+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPgoKPHNjcmlwdD4vL35+V0VCUEFUSH5+L3BhcGVyLXJhZGlvLWdyb3VwL3BhcGVyLXJhZGlvLWdyb3VwLmh0bWwuanMKUG9seW1lcih7aXM6InBhcGVyLXJhZGlvLWdyb3VwIixiZWhhdmlvcnM6W1BvbHltZXIuSXJvbk1lbnViYXJCZWhhdmlvcl0saG9zdEF0dHJpYnV0ZXM6e3JvbGU6InJhZGlvZ3JvdXAifSxwcm9wZXJ0aWVzOnthdHRyRm9yU2VsZWN0ZWQ6e3R5cGU6U3RyaW5nLHZhbHVlOiJuYW1lIn0sc2VsZWN0ZWRBdHRyaWJ1dGU6e3R5cGU6U3RyaW5nLHZhbHVlOiJjaGVja2VkIn0sc2VsZWN0YWJsZTp7dHlwZTpTdHJpbmcsdmFsdWU6InBhcGVyLXJhZGlvLWJ1dHRvbiJ9LGFsbG93RW1wdHlTZWxlY3Rpb246e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX19LHNlbGVjdDpmdW5jdGlvbihhKXt2YXIgYz10aGlzLl92YWx1ZVRvSXRlbShhKTtpZighY3x8IWMuaGFzQXR0cmlidXRlKCJkaXNhYmxlZCIpKXtpZih0aGlzLnNlbGVjdGVkKXtjPXRoaXMuX3ZhbHVlVG9JdGVtKHRoaXMuc2VsZWN0ZWQpO2lmKHRoaXMuc2VsZWN0ZWQ9PWEpaWYodGhpcy5hbGxvd0VtcHR5U2VsZWN0aW9uKWE9IiI7ZWxzZXtjJiYKKGMuY2hlY2tlZD0hMCk7cmV0dXJufWMmJihjLmNoZWNrZWQ9ITEpfVBvbHltZXIuSXJvblNlbGVjdGFibGVCZWhhdmlvci5zZWxlY3QuYXBwbHkodGhpcyxbYV0pO3RoaXMuZmlyZSgicGFwZXItcmFkaW8tZ3JvdXAtY2hhbmdlZCIpfX0sX2FjdGl2YXRlRm9jdXNlZEl0ZW06ZnVuY3Rpb24oKXt0aGlzLl9pdGVtQWN0aXZhdGUodGhpcy5fdmFsdWVGb3JJdGVtKHRoaXMuZm9jdXNlZEl0ZW0pLHRoaXMuZm9jdXNlZEl0ZW0pfSxfb25VcEtleTpmdW5jdGlvbihhKXt0aGlzLl9mb2N1c1ByZXZpb3VzKCk7YS5wcmV2ZW50RGVmYXVsdCgpO3RoaXMuX2FjdGl2YXRlRm9jdXNlZEl0ZW0oKX0sX29uRG93bktleTpmdW5jdGlvbihhKXt0aGlzLl9mb2N1c05leHQoKTthLnByZXZlbnREZWZhdWx0KCk7dGhpcy5fYWN0aXZhdGVGb2N1c2VkSXRlbSgpfSxfb25MZWZ0S2V5OmZ1bmN0aW9uKGEpe1BvbHltZXIuSXJvbk1lbnViYXJCZWhhdmlvckltcGwuX29uTGVmdEtleS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7CnRoaXMuX2FjdGl2YXRlRm9jdXNlZEl0ZW0oKX0sX29uUmlnaHRLZXk6ZnVuY3Rpb24oYSl7UG9seW1lci5Jcm9uTWVudWJhckJlaGF2aW9ySW1wbC5fb25SaWdodEtleS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy5fYWN0aXZhdGVGb2N1c2VkSXRlbSgpfX0pOwo8L3NjcmlwdD4KCgoKCgoKCjxkb20tbW9kdWxlIGlkPSJwYXBlci10b29sdGlwIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICB6LWluZGV4OiAxMDAyOwogICAgICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgLW1zLXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICB9CgogICAgICAjdG9vbHRpcCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1iYXNlOwogICAgICAgIGZvbnQtc2l6ZTogMTBweDsKICAgICAgICBsaW5lLWhlaWdodDogMTsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci10b29sdGlwLWJhY2tncm91bmQsICM2MTYxNjEpOwogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci10b29sdGlwLXRleHQtY29sb3IsIHdoaXRlKTsKICAgICAgICBwYWRkaW5nOiA4cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMnB4OwogICAgICAgIEBhcHBseSAtLXBhcGVyLXRvb2x0aXA7CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMga2V5RnJhbWVTY2FsZVVwIHsKICAgICAgICAwJSB7CiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDAuMCk7CiAgICAgICAgfQogICAgICAgIDEwMCUgewogICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxLjApOwogICAgICAgIH0KICAgICAgfQoKICAgICAgQGtleWZyYW1lcyBrZXlGcmFtZVNjYWxlRG93biB7CiAgICAgICAgMCUgewogICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxLjApOwogICAgICAgIH0KICAgICAgICAxMDAlIHsKICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMC4wKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMga2V5RnJhbWVGYWRlSW5PcGFjaXR5IHsKICAgICAgICAwJSB7CiAgICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIH0KICAgICAgICAxMDAlIHsKICAgICAgICAgIG9wYWNpdHk6IHZhcigtLXBhcGVyLXRvb2x0aXAtb3BhY2l0eSwgMC45KTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMga2V5RnJhbWVGYWRlT3V0T3BhY2l0eSB7CiAgICAgICAgMCUgewogICAgICAgICAgb3BhY2l0eTogdmFyKC0tcGFwZXItdG9vbHRpcC1vcGFjaXR5LCAwLjkpOwogICAgICAgIH0KICAgICAgICAxMDAlIHsKICAgICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgfQogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIGtleUZyYW1lU2xpZGVEb3duSW4gewogICAgICAgIDAlIHsKICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMjAwMHB4KTsKICAgICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgfQogICAgICAgIDEwJSB7CiAgICAgICAgICBvcGFjaXR5OiAwLjI7CiAgICAgICAgfQogICAgICAgIDEwMCUgewogICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOwogICAgICAgICAgb3BhY2l0eTogdmFyKC0tcGFwZXItdG9vbHRpcC1vcGFjaXR5LCAwLjkpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgQGtleWZyYW1lcyBrZXlGcmFtZVNsaWRlRG93bk91dCB7CiAgICAgICAgMCUgewogICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOwogICAgICAgICAgb3BhY2l0eTogdmFyKC0tcGFwZXItdG9vbHRpcC1vcGFjaXR5LCAwLjkpOwogICAgICAgIH0KICAgICAgICAxMCUgewogICAgICAgICAgb3BhY2l0eTogMC4yOwogICAgICAgIH0KICAgICAgICAxMDAlIHsKICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMjAwMHB4KTsKICAgICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgfQogICAgICB9CgogICAgICAuZmFkZS1pbi1hbmltYXRpb24gewogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiB2YXIoLS1wYXBlci10b29sdGlwLWRlbGF5LWluLCA1MDBtcyk7CiAgICAgICAgYW5pbWF0aW9uLW5hbWU6IGtleUZyYW1lRmFkZUluT3BhY2l0eTsKICAgICAgICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiAxOwogICAgICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGVhc2UtaW47CiAgICAgICAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1wYXBlci10b29sdGlwLWR1cmF0aW9uLWluLCA1MDBtcyk7CiAgICAgICAgYW5pbWF0aW9uLWZpbGwtbW9kZTogZm9yd2FyZHM7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItdG9vbHRpcC1hbmltYXRpb247CiAgICAgIH0KCiAgICAgIC5mYWRlLW91dC1hbmltYXRpb24gewogICAgICAgIG9wYWNpdHk6IHZhcigtLXBhcGVyLXRvb2x0aXAtb3BhY2l0eSwgMC45KTsKICAgICAgICBhbmltYXRpb24tZGVsYXk6IHZhcigtLXBhcGVyLXRvb2x0aXAtZGVsYXktb3V0LCAwbXMpOwogICAgICAgIGFuaW1hdGlvbi1uYW1lOiBrZXlGcmFtZUZhZGVPdXRPcGFjaXR5OwogICAgICAgIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IDE7CiAgICAgICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogZWFzZS1pbjsKICAgICAgICBhbmltYXRpb24tZHVyYXRpb246IHZhcigtLXBhcGVyLXRvb2x0aXAtZHVyYXRpb24tb3V0LCA1MDBtcyk7CiAgICAgICAgYW5pbWF0aW9uLWZpbGwtbW9kZTogZm9yd2FyZHM7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItdG9vbHRpcC1hbmltYXRpb247CiAgICAgIH0KCiAgICAgIC5zY2FsZS11cC1hbmltYXRpb24gewogICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMCk7CiAgICAgICAgb3BhY2l0eTogdmFyKC0tcGFwZXItdG9vbHRpcC1vcGFjaXR5LCAwLjkpOwogICAgICAgIGFuaW1hdGlvbi1kZWxheTogdmFyKC0tcGFwZXItdG9vbHRpcC1kZWxheS1pbiwgNTAwbXMpOwogICAgICAgIGFuaW1hdGlvbi1uYW1lOiBrZXlGcmFtZVNjYWxlVXA7CiAgICAgICAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogMTsKICAgICAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBlYXNlLWluOwogICAgICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tcGFwZXItdG9vbHRpcC1kdXJhdGlvbi1pbiwgNTAwbXMpOwogICAgICAgIGFuaW1hdGlvbi1maWxsLW1vZGU6IGZvcndhcmRzOwogICAgICAgIEBhcHBseSAtLXBhcGVyLXRvb2x0aXAtYW5pbWF0aW9uOwogICAgICB9CgogICAgICAuc2NhbGUtZG93bi1hbmltYXRpb24gewogICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7CiAgICAgICAgb3BhY2l0eTogdmFyKC0tcGFwZXItdG9vbHRpcC1vcGFjaXR5LCAwLjkpOwogICAgICAgIGFuaW1hdGlvbi1kZWxheTogdmFyKC0tcGFwZXItdG9vbHRpcC1kZWxheS1vdXQsIDUwMG1zKTsKICAgICAgICBhbmltYXRpb24tbmFtZToga2V5RnJhbWVTY2FsZURvd247CiAgICAgICAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogMTsKICAgICAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBlYXNlLWluOwogICAgICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tcGFwZXItdG9vbHRpcC1kdXJhdGlvbi1vdXQsIDUwMG1zKTsKICAgICAgICBhbmltYXRpb24tZmlsbC1tb2RlOiBmb3J3YXJkczsKICAgICAgICBAYXBwbHkgLS1wYXBlci10b29sdGlwLWFuaW1hdGlvbjsKICAgICAgfQoKICAgICAgLnNsaWRlLWRvd24tYW5pbWF0aW9uIHsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTIwMDBweCk7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICBhbmltYXRpb24tZGVsYXk6IHZhcigtLXBhcGVyLXRvb2x0aXAtZGVsYXktb3V0LCA1MDBtcyk7CiAgICAgICAgYW5pbWF0aW9uLW5hbWU6IGtleUZyYW1lU2xpZGVEb3duSW47CiAgICAgICAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogMTsKICAgICAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4wLCAwLjAsIDAuMiwgMSk7CiAgICAgICAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1wYXBlci10b29sdGlwLWR1cmF0aW9uLW91dCwgNTAwbXMpOwogICAgICAgIGFuaW1hdGlvbi1maWxsLW1vZGU6IGZvcndhcmRzOwogICAgICAgIEBhcHBseSAtLXBhcGVyLXRvb2x0aXAtYW5pbWF0aW9uOwogICAgICB9CgogICAgICAuc2xpZGUtZG93bi1hbmltYXRpb24tb3V0IHsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7CiAgICAgICAgb3BhY2l0eTogdmFyKC0tcGFwZXItdG9vbHRpcC1vcGFjaXR5LCAwLjkpOwogICAgICAgIGFuaW1hdGlvbi1kZWxheTogdmFyKC0tcGFwZXItdG9vbHRpcC1kZWxheS1vdXQsIDUwMG1zKTsKICAgICAgICBhbmltYXRpb24tbmFtZToga2V5RnJhbWVTbGlkZURvd25PdXQ7CiAgICAgICAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogMTsKICAgICAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC40LCAwLjAsIDEsIDEpOwogICAgICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tcGFwZXItdG9vbHRpcC1kdXJhdGlvbi1vdXQsIDUwMG1zKTsKICAgICAgICBhbmltYXRpb24tZmlsbC1tb2RlOiBmb3J3YXJkczsKICAgICAgICBAYXBwbHkgLS1wYXBlci10b29sdGlwLWFuaW1hdGlvbjsKICAgICAgfQoKICAgICAgLmNhbmNlbC1hbmltYXRpb24gewogICAgICAgIGFuaW1hdGlvbi1kZWxheTogLTMwcyAhaW1wb3J0YW50OwogICAgICB9CgogICAgICAvKiBUaGFua3MgSUUgMTAuICovCgogICAgICAuaGlkZGVuIHsKICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPGRpdiBpZD0idG9vbHRpcCIgY2xhc3M9ImhpZGRlbiI+CiAgICAgIDxzbG90Pjwvc2xvdD4KICAgIDwvZGl2PgogIDwvdGVtcGxhdGU+CgogIDxzY3JpcHQ+Ly9+fldFQlBBVEh+fi9wYXBlci10b29sdGlwL3BhcGVyLXRvb2x0aXAuaHRtbC5qcwpQb2x5bWVyKHtpczoicGFwZXItdG9vbHRpcCIsaG9zdEF0dHJpYnV0ZXM6e3JvbGU6InRvb2x0aXAiLHRhYmluZGV4Oi0xfSxwcm9wZXJ0aWVzOntmb3I6e3R5cGU6U3RyaW5nLG9ic2VydmVyOiJfZmluZFRhcmdldCJ9LG1hbnVhbE1vZGU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxvYnNlcnZlcjoiX21hbnVhbE1vZGVDaGFuZ2VkIn0scG9zaXRpb246e3R5cGU6U3RyaW5nLHZhbHVlOiJib3R0b20ifSxmaXRUb1Zpc2libGVCb3VuZHM6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sb2Zmc2V0Ont0eXBlOk51bWJlcix2YWx1ZToxNH0sbWFyZ2luVG9wOnt0eXBlOk51bWJlcix2YWx1ZToxNH0sYW5pbWF0aW9uRGVsYXk6e3R5cGU6TnVtYmVyLHZhbHVlOjUwMCxvYnNlcnZlcjoiX2RlbGF5Q2hhbmdlIn0sYW5pbWF0aW9uRW50cnk6e3R5cGU6U3RyaW5nLHZhbHVlOiIifSxhbmltYXRpb25FeGl0Ont0eXBlOlN0cmluZyx2YWx1ZToiIn0sYW5pbWF0aW9uQ29uZmlnOnt0eXBlOk9iamVjdCwKdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm57ZW50cnk6W3tuYW1lOiJmYWRlLWluLWFuaW1hdGlvbiIsbm9kZTp0aGlzLHRpbWluZzp7ZGVsYXk6MH19XSxleGl0Olt7bmFtZToiZmFkZS1vdXQtYW5pbWF0aW9uIixub2RlOnRoaXN9XX19fSxfc2hvd2luZzp7dHlwZTpCb29sZWFuLHZhbHVlOiExfX0sbGlzdGVuZXJzOnt3ZWJraXRBbmltYXRpb25FbmQ6Il9vbkFuaW1hdGlvbkVuZCJ9LGdldCB0YXJnZXQoKXt2YXIgYT1Qb2x5bWVyLmRvbSh0aGlzKS5wYXJlbnROb2RlLGM9UG9seW1lci5kb20odGhpcykuZ2V0T3duZXJSb290KCk7cmV0dXJuIHRoaXMuZm9yP1BvbHltZXIuZG9tKGMpLnF1ZXJ5U2VsZWN0b3IoIiMiK3RoaXMuZm9yKTphLm5vZGVUeXBlPT1Ob2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREU/Yy5ob3N0OmF9LGF0dGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fZmluZFRhcmdldCgpfSxkZXRhY2hlZDpmdW5jdGlvbigpe3RoaXMubWFudWFsTW9kZXx8dGhpcy5fcmVtb3ZlTGlzdGVuZXJzKCl9LApwbGF5QW5pbWF0aW9uOmZ1bmN0aW9uKGEpeyJlbnRyeSI9PT1hP3RoaXMuc2hvdygpOiJleGl0Ij09PWEmJnRoaXMuaGlkZSgpfSxjYW5jZWxBbmltYXRpb246ZnVuY3Rpb24oKXt0aGlzLiQudG9vbHRpcC5jbGFzc0xpc3QuYWRkKCJjYW5jZWwtYW5pbWF0aW9uIil9LHNob3c6ZnVuY3Rpb24oKXtpZighdGhpcy5fc2hvd2luZyl7aWYoIiI9PT1Qb2x5bWVyLmRvbSh0aGlzKS50ZXh0Q29udGVudC50cmltKCkpe2Zvcih2YXIgYT0hMCxjPVBvbHltZXIuZG9tKHRoaXMpLmdldEVmZmVjdGl2ZUNoaWxkTm9kZXMoKSxkPTA7ZDxjLmxlbmd0aDtkKyspaWYoIiIhPT1jW2RdLnRleHRDb250ZW50LnRyaW0oKSl7YT0hMTticmVha31pZihhKXJldHVybn10aGlzLl9zaG93aW5nPSEwO3RoaXMuJC50b29sdGlwLmNsYXNzTGlzdC5yZW1vdmUoImhpZGRlbiIpO3RoaXMuJC50b29sdGlwLmNsYXNzTGlzdC5yZW1vdmUoImNhbmNlbC1hbmltYXRpb24iKTt0aGlzLiQudG9vbHRpcC5jbGFzc0xpc3QucmVtb3ZlKHRoaXMuX2dldEFuaW1hdGlvblR5cGUoImV4aXQiKSk7CnRoaXMudXBkYXRlUG9zaXRpb24oKTt0aGlzLl9hbmltYXRpb25QbGF5aW5nPSEwO3RoaXMuJC50b29sdGlwLmNsYXNzTGlzdC5hZGQodGhpcy5fZ2V0QW5pbWF0aW9uVHlwZSgiZW50cnkiKSl9fSxoaWRlOmZ1bmN0aW9uKCl7dGhpcy5fc2hvd2luZyYmKHRoaXMuX2FuaW1hdGlvblBsYXlpbmc/KHRoaXMuX3Nob3dpbmc9ITEsdGhpcy5fY2FuY2VsQW5pbWF0aW9uKCkpOih0aGlzLl9vbkFuaW1hdGlvbkZpbmlzaCgpLHRoaXMuX3Nob3dpbmc9ITEsdGhpcy5fYW5pbWF0aW9uUGxheWluZz0hMCkpfSx1cGRhdGVQb3NpdGlvbjpmdW5jdGlvbigpe2lmKHRoaXMuX3RhcmdldCYmdGhpcy5vZmZzZXRQYXJlbnQpe3ZhciBhPXRoaXMub2Zmc2V0OzE0IT10aGlzLm1hcmdpblRvcCYmMTQ9PXRoaXMub2Zmc2V0JiYoYT10aGlzLm1hcmdpblRvcCk7dmFyIGM9dGhpcy5vZmZzZXRQYXJlbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksZD10aGlzLl90YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksCmY9dGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxnPShkLndpZHRoLWYud2lkdGgpLzIsbD0oZC5oZWlnaHQtZi5oZWlnaHQpLzIsaz1kLmxlZnQtYy5sZWZ0LG09ZC50b3AtYy50b3A7c3dpdGNoKHRoaXMucG9zaXRpb24pe2Nhc2UgInRvcCI6dmFyIHA9aytnO3ZhciBxPW0tZi5oZWlnaHQtYTticmVhaztjYXNlICJib3R0b20iOnA9aytnO3E9bStkLmhlaWdodCthO2JyZWFrO2Nhc2UgImxlZnQiOnA9ay1mLndpZHRoLWE7cT1tK2w7YnJlYWs7Y2FzZSAicmlnaHQiOnA9aytkLndpZHRoK2EscT1tK2x9dGhpcy5maXRUb1Zpc2libGVCb3VuZHM/KGMubGVmdCtwK2Yud2lkdGg+d2luZG93LmlubmVyV2lkdGg/KHRoaXMuc3R5bGUucmlnaHQ9IjBweCIsdGhpcy5zdHlsZS5sZWZ0PSJhdXRvIik6KHRoaXMuc3R5bGUubGVmdD1NYXRoLm1heCgwLHApKyJweCIsdGhpcy5zdHlsZS5yaWdodD0iYXV0byIpLGMudG9wK3ErZi5oZWlnaHQ+d2luZG93LmlubmVySGVpZ2h0Pyh0aGlzLnN0eWxlLmJvdHRvbT0KYy5oZWlnaHQrInB4Iix0aGlzLnN0eWxlLnRvcD0iYXV0byIpOih0aGlzLnN0eWxlLnRvcD1NYXRoLm1heCgtYy50b3AscSkrInB4Iix0aGlzLnN0eWxlLmJvdHRvbT0iYXV0byIpKToodGhpcy5zdHlsZS5sZWZ0PXArInB4Iix0aGlzLnN0eWxlLnRvcD1xKyJweCIpfX0sX2FkZExpc3RlbmVyczpmdW5jdGlvbigpe3RoaXMuX3RhcmdldCYmKHRoaXMubGlzdGVuKHRoaXMuX3RhcmdldCwibW91c2VlbnRlciIsInNob3ciKSx0aGlzLmxpc3Rlbih0aGlzLl90YXJnZXQsImZvY3VzIiwic2hvdyIpLHRoaXMubGlzdGVuKHRoaXMuX3RhcmdldCwibW91c2VsZWF2ZSIsImhpZGUiKSx0aGlzLmxpc3Rlbih0aGlzLl90YXJnZXQsImJsdXIiLCJoaWRlIiksdGhpcy5saXN0ZW4odGhpcy5fdGFyZ2V0LCJ0YXAiLCJoaWRlIikpO3RoaXMubGlzdGVuKHRoaXMuJC50b29sdGlwLCJhbmltYXRpb25lbmQiLCJfb25BbmltYXRpb25FbmQiKTt0aGlzLmxpc3Rlbih0aGlzLCJtb3VzZWVudGVyIiwiaGlkZSIpfSwKX2ZpbmRUYXJnZXQ6ZnVuY3Rpb24oKXt0aGlzLm1hbnVhbE1vZGV8fHRoaXMuX3JlbW92ZUxpc3RlbmVycygpO3RoaXMuX3RhcmdldD10aGlzLnRhcmdldDt0aGlzLm1hbnVhbE1vZGV8fHRoaXMuX2FkZExpc3RlbmVycygpfSxfZGVsYXlDaGFuZ2U6ZnVuY3Rpb24oYSl7NTAwIT09YSYmdGhpcy51cGRhdGVTdHlsZXMoeyItLXBhcGVyLXRvb2x0aXAtZGVsYXktaW4iOmErIm1zIn0pfSxfbWFudWFsTW9kZUNoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLm1hbnVhbE1vZGU/dGhpcy5fcmVtb3ZlTGlzdGVuZXJzKCk6dGhpcy5fYWRkTGlzdGVuZXJzKCl9LF9jYW5jZWxBbmltYXRpb246ZnVuY3Rpb24oKXt0aGlzLiQudG9vbHRpcC5jbGFzc0xpc3QucmVtb3ZlKHRoaXMuX2dldEFuaW1hdGlvblR5cGUoImVudHJ5IikpO3RoaXMuJC50b29sdGlwLmNsYXNzTGlzdC5yZW1vdmUodGhpcy5fZ2V0QW5pbWF0aW9uVHlwZSgiZXhpdCIpKTt0aGlzLiQudG9vbHRpcC5jbGFzc0xpc3QucmVtb3ZlKCJjYW5jZWwtYW5pbWF0aW9uIik7CnRoaXMuJC50b29sdGlwLmNsYXNzTGlzdC5hZGQoImhpZGRlbiIpfSxfb25BbmltYXRpb25GaW5pc2g6ZnVuY3Rpb24oKXt0aGlzLl9zaG93aW5nJiYodGhpcy4kLnRvb2x0aXAuY2xhc3NMaXN0LnJlbW92ZSh0aGlzLl9nZXRBbmltYXRpb25UeXBlKCJlbnRyeSIpKSx0aGlzLiQudG9vbHRpcC5jbGFzc0xpc3QucmVtb3ZlKCJjYW5jZWwtYW5pbWF0aW9uIiksdGhpcy4kLnRvb2x0aXAuY2xhc3NMaXN0LmFkZCh0aGlzLl9nZXRBbmltYXRpb25UeXBlKCJleGl0IikpKX0sX29uQW5pbWF0aW9uRW5kOmZ1bmN0aW9uKCl7dGhpcy5fYW5pbWF0aW9uUGxheWluZz0hMTt0aGlzLl9zaG93aW5nfHwodGhpcy4kLnRvb2x0aXAuY2xhc3NMaXN0LnJlbW92ZSh0aGlzLl9nZXRBbmltYXRpb25UeXBlKCJleGl0IikpLHRoaXMuJC50b29sdGlwLmNsYXNzTGlzdC5hZGQoImhpZGRlbiIpKX0sX2dldEFuaW1hdGlvblR5cGU6ZnVuY3Rpb24oYSl7aWYoImVudHJ5Ij09PWEmJiIiIT09dGhpcy5hbmltYXRpb25FbnRyeSlyZXR1cm4gdGhpcy5hbmltYXRpb25FbnRyeTsKaWYoImV4aXQiPT09YSYmIiIhPT10aGlzLmFuaW1hdGlvbkV4aXQpcmV0dXJuIHRoaXMuYW5pbWF0aW9uRXhpdDtpZih0aGlzLmFuaW1hdGlvbkNvbmZpZ1thXSYmInN0cmluZyI9PT10eXBlb2YgdGhpcy5hbmltYXRpb25Db25maWdbYV1bMF0ubmFtZSl7aWYodGhpcy5hbmltYXRpb25Db25maWdbYV1bMF0udGltaW5nJiZ0aGlzLmFuaW1hdGlvbkNvbmZpZ1thXVswXS50aW1pbmcuZGVsYXkmJjAhPT10aGlzLmFuaW1hdGlvbkNvbmZpZ1thXVswXS50aW1pbmcuZGVsYXkpe3ZhciBjPXRoaXMuYW5pbWF0aW9uQ29uZmlnW2FdWzBdLnRpbWluZy5kZWxheTsiZW50cnkiPT09YT90aGlzLnVwZGF0ZVN0eWxlcyh7Ii0tcGFwZXItdG9vbHRpcC1kZWxheS1pbiI6YysibXMifSk6ImV4aXQiPT09YSYmdGhpcy51cGRhdGVTdHlsZXMoeyItLXBhcGVyLXRvb2x0aXAtZGVsYXktb3V0IjpjKyJtcyJ9KX1yZXR1cm4gdGhpcy5hbmltYXRpb25Db25maWdbYV1bMF0ubmFtZX19LF9yZW1vdmVMaXN0ZW5lcnM6ZnVuY3Rpb24oKXt0aGlzLl90YXJnZXQmJgoodGhpcy51bmxpc3Rlbih0aGlzLl90YXJnZXQsIm1vdXNlZW50ZXIiLCJzaG93IiksdGhpcy51bmxpc3Rlbih0aGlzLl90YXJnZXQsImZvY3VzIiwic2hvdyIpLHRoaXMudW5saXN0ZW4odGhpcy5fdGFyZ2V0LCJtb3VzZWxlYXZlIiwiaGlkZSIpLHRoaXMudW5saXN0ZW4odGhpcy5fdGFyZ2V0LCJibHVyIiwiaGlkZSIpLHRoaXMudW5saXN0ZW4odGhpcy5fdGFyZ2V0LCJ0YXAiLCJoaWRlIikpO3RoaXMudW5saXN0ZW4odGhpcy4kLnRvb2x0aXAsImFuaW1hdGlvbmVuZCIsIl9vbkFuaW1hdGlvbkVuZCIpO3RoaXMudW5saXN0ZW4odGhpcywibW91c2VlbnRlciIsImhpZGUiKX19KTsKPC9zY3JpcHQ+CjwvZG9tLW1vZHVsZT4KCgoKCgoKCgoKCjxkb20tbW9kdWxlIGlkPSJ0Zi1ncmFwaC1ub2RlLXNlYXJjaCI+CiAgPHRlbXBsYXRlPgogICAgPGRpdiBpZD0ic2VhcmNoLWNvbnRhaW5lciI+CiAgICAgIDxwYXBlci1pbnB1dCBpZD0icnVucy1yZWdleCIgbGFiZWw9IlNlYXJjaCBub2Rlcy4gUmVnZXhlcyBzdXBwb3J0ZWQuIiB2YWx1ZT0ie3tfcmF3UmVnZXhJbnB1dH19Ij4KICAgICAgPC9wYXBlci1pbnB1dD4KICAgICAgPGRpdiBpZD0ic2VhcmNoLXJlc3VsdHMtYW5jaG9yIj4KICAgICAgICA8ZGl2IGlkPSJzZWFyY2gtcmVzdWx0cyI+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19yZWdleE1hdGNoZXNdXSI+CiAgICAgICAgICAgIDxkaXYgaWQ9InNlYXJjaC1tYXRjaCIgb24tY2xpY2s9Il9tYXRjaENsaWNrZWQiPltbaXRlbV1dPC9kaXY+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogICAgPHN0eWxlPgogICAgICAjc2VhcmNoLWNvbnRhaW5lciB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgb3ZlcmZsb3c6IHZpc2libGU7CiAgICAgIH0KCiAgICAgICNydW5zLXJlZ2V4IHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgI3NlYXJjaC1yZXN1bHRzLWFuY2hvciB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICAjc2VhcmNoLXJlc3VsdHMgewogICAgICAgIGNvbG9yOiAjZmZmOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBtYXgtaGVpZ2h0OiAyMDBweDsKICAgICAgICBvdmVyZmxvdy14OiBoaWRkZW47CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICB0ZXh0LWFsaWduOiByaWdodDsKICAgICAgICBtYXgtd2lkdGg6IDEwMCU7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgfQoKICAgICAgI3NlYXJjaC1tYXRjaCB7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgcGFkZGluZzogM3B4OwogICAgICAgIGZsb2F0OiByaWdodDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgIGRpcmVjdGlvbjogcnRsOwogICAgICB9CgogICAgICAjc2VhcmNoLW1hdGNoOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS10Yi1vcmFuZ2Utd2Vhayk7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CiAgPHNjcmlwdD4vL35+V0VCUEFUSH5+L3RmLWdyYXBoLW5vZGUtc2VhcmNoL3RmLWdyYXBoLW5vZGUtc2VhcmNoLmh0bWwuanMKUG9seW1lcih7aXM6InRmLWdyYXBoLW5vZGUtc2VhcmNoIixwcm9wZXJ0aWVzOntyZW5kZXJIaWVyYXJjaHk6T2JqZWN0LHNlbGVjdGVkTm9kZTp7dHlwZTpTdHJpbmcsbm90aWZ5OiEwfSxfcmF3UmVnZXhJbnB1dDp7dHlwZTpTdHJpbmcsdmFsdWU6IiJ9LF9yZWdleElucHV0Ont0eXBlOlN0cmluZyxjb21wdXRlZDoiX2NvbXB1dGVSZWdleElucHV0KHJlbmRlckhpZXJhcmNoeSwgX3Jhd1JlZ2V4SW5wdXQpIn0sX3ByZXZpb3VzUmVnZXhJbnB1dDp7dHlwZTpTdHJpbmcsdmFsdWU6IiJ9LF9zZWFyY2hUaW1lb3V0RGVsYXk6e3R5cGU6TnVtYmVyLHZhbHVlOjE1MCxyZWFkT25seTohMH0sX3NlYXJjaFBlbmRpbmc6Qm9vbGVhbixfbWF4UmVnZXhSZXN1bHRzOnt0eXBlOk51bWJlcix2YWx1ZTo0Mn0sX3JlZ2V4TWF0Y2hlczpBcnJheX0sb2JzZXJ2ZXJzOlsiX3JlZ2V4SW5wdXRDaGFuZ2VkKF9yZWdleElucHV0KSJdLF9jb21wdXRlUmVnZXhJbnB1dChhLGMpe3JldHVybiBjLnRyaW0oKX0sCl9yZWdleElucHV0Q2hhbmdlZCgpe3RoaXMuX3JlcXVlc3RTZWFyY2goKX0sX2NsZWFyU2VhcmNoUmVzdWx0cygpe3RoaXMuc2V0KCJfcmVnZXhNYXRjaGVzIixbXSl9LF9yZXF1ZXN0U2VhcmNoKCl7dGhpcy5fc2VhcmNoUGVuZGluZ3x8KHRoaXMuX3JlZ2V4SW5wdXQ9PT10aGlzLl9wcmV2aW91c1JlZ2V4SW5wdXQ/dGhpcy5fc2VhcmNoUGVuZGluZz0hMToodGhpcy5fc2VhcmNoUGVuZGluZz0hMCx0aGlzLl9leGVjdXRlU2VhcmNoKCksdGhpcy5hc3luYygoKT0+e3RoaXMuX3NlYXJjaFBlbmRpbmc9ITE7dGhpcy5fcmVxdWVzdFNlYXJjaCgpfSx0aGlzLl9zZWFyY2hUaW1lb3V0RGVsYXkpKSl9LF9leGVjdXRlU2VhcmNoKCl7aWYodGhpcy5fcHJldmlvdXNSZWdleElucHV0PXRoaXMuX3JlZ2V4SW5wdXQpe3RyeXt2YXIgYT1uZXcgUmVnRXhwKHRoaXMuX3JlZ2V4SW5wdXQpfWNhdGNoKGQpe3RoaXMuX2NsZWFyU2VhcmNoUmVzdWx0cygpO3JldHVybn12YXIgYz1bXTtfLmVhY2godGhpcy5yZW5kZXJIaWVyYXJjaHkuaGllcmFyY2h5LmdldE5vZGVNYXAoKSwKKGQsZik9PntpZihjLmxlbmd0aD49dGhpcy5fbWF4UmVnZXhSZXN1bHRzKXJldHVybiExO2EudGVzdChmKSYmYy5wdXNoKGYpfSk7dGhpcy5zZXQoIl9yZWdleE1hdGNoZXMiLGMpfWVsc2UgdGhpcy5fY2xlYXJTZWFyY2hSZXN1bHRzKCl9LF9tYXRjaENsaWNrZWQoYSl7dGhpcy5zZXQoInNlbGVjdGVkTm9kZSIsYS5tb2RlbC5pdGVtKX19KTsKPC9zY3JpcHQ+CjwvZG9tLW1vZHVsZT4KCgo8ZG9tLW1vZHVsZSBpZD0idGYtZ3JhcGgtY29udHJvbHMiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGNvbG9yOiBncmF5OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgIHBhcGVyLWRyb3Bkb3duLW1lbnUgewogICAgICAgIC0tcGFwZXItZHJvcGRvd24tbWVudS1pbnB1dDogewogICAgICAgICAgcGFkZGluZzogMDsKICAgICAgICAgIGNvbG9yOiBncmF5OwogICAgICAgIH0KICAgICAgICAtLWlyb24taWNvbi13aWR0aDogMTVweDsKICAgICAgICAtLWlyb24taWNvbi1oZWlnaHQ6IDE1cHg7CiAgICAgICAgLS1wcmltYXJ5LXRleHQtY29sb3I6IGdyYXk7CiAgICAgICAgLS1wYXBlci1pdGVtLW1pbi1oZWlnaHQ6IDMwcHg7CiAgICAgIH0KCiAgICAgIHBhcGVyLWJ1dHRvbltyYWlzZWRdLmtleWJvYXJkLWZvY3VzIHsKICAgICAgICBmb250LXdlaWdodDogbm9ybWFsOwogICAgICB9CgogICAgICAucnVuLWRyb3Bkb3duIHsKICAgICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lcjogewogICAgICAgICAgcGFkZGluZzogOHB4IDAgOHB4IDEwcHg7CiAgICAgICAgfQogICAgICB9CgogICAgICAuY29sb3ItZHJvcGRvd24gewogICAgICAgIC0tcGFwZXItaW5wdXQtY29udGFpbmVyOiB7CiAgICAgICAgICBwYWRkaW5nOiA5cHggMCAwIDEzcHg7CiAgICAgICAgfQogICAgICB9CgogICAgICB0YWJsZSB7CiAgICAgICAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsKICAgICAgICBib3JkZXItc3BhY2luZzogMDsKICAgICAgfQoKICAgICAgdGFibGUgdGQgewogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICB9CgogICAgICAuYWxsY29udHJvbHMgewogICAgICAgIHBhZGRpbmc6IDAgMjBweCAyMHB4OwogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICB9CgogICAgICAubGVnZW5kLWhvbGRlciB7CiAgICAgICAgYmFja2dyb3VuZDogI2U5ZTllOTsKICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgI2NjYzsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgIGNvbG9yOiAjNTU1OwogICAgICAgIHBhZGRpbmc6IDE1cHggMjBweDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgLnRvZ2dsZS1sZWdlbmQtYnV0dG9uIHsKICAgICAgICBtYXgtaGVpZ2h0OiAyMHB4OwogICAgICAgIG1heC13aWR0aDogMjBweDsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICB9CgogICAgICAudG9nZ2xlLWxlZ2VuZC10ZXh0IHsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwogICAgICB9CgogICAgICBwYXBlci1yYWRpby1idXR0b24gewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBhZGRpbmc6IDVweDsKICAgICAgfQogICAgICBzdmcuaWNvbiwKICAgICAgdGYtZ3JhcGgtaWNvbiB7CiAgICAgICAgd2lkdGg6IDYwcHg7CiAgICAgICAgaGVpZ2h0OiAxOHB4OwogICAgICB9CiAgICAgIC5kb21haW5WYWx1ZXMgewogICAgICAgIG1hcmdpbi1ib3R0b206IDEwcHg7CiAgICAgICAgd2lkdGg6IDE2NXB4OwogICAgICB9CiAgICAgIC5kb21haW5TdGFydCB7CiAgICAgICAgZmxvYXQ6IGxlZnQ7CiAgICAgIH0KICAgICAgLmRvbWFpbkVuZCB7CiAgICAgICAgZmxvYXQ6IHJpZ2h0OwogICAgICB9CiAgICAgIC5jb2xvckJveCB7CiAgICAgICAgd2lkdGg6IDIwcHg7CiAgICAgIH0KCiAgICAgIC5pbWFnZS1pY29uIHsKICAgICAgICB3aWR0aDogMjRweDsKICAgICAgICBoZWlnaHQ6IDI0cHg7CiAgICAgIH0KCiAgICAgIC5oZWxwLWljb24gewogICAgICAgIGhlaWdodDogMTVweDsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgfQoKICAgICAgLmdyYXkgewogICAgICAgIGNvbG9yOiAjNjY2OwogICAgICB9CgogICAgICAudGl0bGUgewogICAgICAgIGZvbnQtc2l6ZTogMTZweDsKICAgICAgICBtYXJnaW46IDhweCA1cHggOHB4IDA7CiAgICAgICAgY29sb3I6IGJsYWNrOwogICAgICB9CiAgICAgIC50aXRsZSBzbWFsbCB7CiAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKICAgICAgfQogICAgICAuZGV2aWNlTGlzdCwKICAgICAgLnhsYUNsdXN0ZXJMaXN0IHsKICAgICAgICBtYXgtaGVpZ2h0OiAyMDBweDsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICB9CgogICAgICAjZmlsZSB7CiAgICAgICAgcGFkZGluZzogOHB4IDA7CiAgICAgIH0KCiAgICAgIC5jb2xvci1sZWdlbmQtcm93IHsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGNsZWFyOiBib3RoOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgaGVpZ2h0OiAyMHB4OwogICAgICAgIG1hcmdpbi10b3A6IDVweDsKICAgICAgfQoKICAgICAgLmNvbG9yLWxlZ2VuZC1yb3cgLmxhYmVsLAogICAgICAuY29sb3ItbGVnZW5kLXJvdyBzdmcsCiAgICAgIC5jb2xvci1sZWdlbmQtcm93IHRmLWdyYXBoLWljb24gewogICAgICAgIGZsZXg6IDAgMCA0MHB4OwogICAgICAgIG1hcmdpbi1yaWdodDogMjBweDsKICAgICAgfQoKICAgICAgLmRldmljZXMtY2hlY2tib3ggaW5wdXQgewogICAgICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKICAgICAgfQoKICAgICAgLmNvbnRyb2wtaG9sZGVyIC5pY29uLWJ1dHRvbiB7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIG1hcmdpbjogMCAtNXB4OwogICAgICAgIHBhZGRpbmc6IDVweDsKICAgICAgfQoKICAgICAgLmJ1dHRvbi10ZXh0IHsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDIwcHg7CiAgICAgICAgdGV4dC10cmFuc2Zvcm06IG5vbmU7CiAgICAgIH0KCiAgICAgIC51cGxvYWQtYnV0dG9uIHsKICAgICAgICB3aWR0aDogMTY1cHg7CiAgICAgICAgaGVpZ2h0OiAyNXB4OwogICAgICAgIHRleHQtdHJhbnNmb3JtOiBub25lOwogICAgICAgIG1hcmdpbi10b3A6IDRweDsKICAgICAgfQoKICAgICAgLmJ1dHRvbi1pY29uIHsKICAgICAgICB3aWR0aDogMjZweDsKICAgICAgICBoZWlnaHQ6IDI2cHg7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLW9yYW5nZS01MDApOwogICAgICB9CgogICAgICAuaGlkZGVuLWlucHV0IHsKICAgICAgICBoZWlnaHQ6IDBweDsKICAgICAgICB3aWR0aDogMHB4OwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC5hbGxjb250cm9scyAuY29udHJvbC1ob2xkZXIgewogICAgICAgIGNsZWFyOiBib3RoOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICB9CgogICAgICAuYWxsY29udHJvbHMgLmNvbnRyb2wtaG9sZGVyIHBhcGVyLXJhZGlvLWdyb3VwIHsKICAgICAgICBtYXJnaW4tdG9wOiA1cHg7CiAgICAgIH0KCiAgICAgIHNwYW4uY291bnRlciB7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGNvbG9yOiBncmF5OwogICAgICB9CgogICAgICAucnVucyBwYXBlci1pdGVtIHsKICAgICAgICAtLXBhcGVyLWl0ZW06IHsKICAgICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgfQogICAgICB9CgogICAgICB0YWJsZS5jb250cm9sLWhvbGRlciB7CiAgICAgICAgYm9yZGVyOiAwOwogICAgICAgIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7CiAgICAgIH0KCiAgICAgIHRhYmxlLnRmLWdyYXBoLWNvbnRyb2xzIHRkLmlucHV0LWVsZW1lbnQtdGFibGUtZGF0YSB7CiAgICAgICAgcGFkZGluZzogMCAwIDAgMjBweDsKICAgICAgfQoKICAgICAgLnNwYWNlciB7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICB9CgogICAgICAuY29sb3ItdGV4dCB7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQoKICAgICAgLyoqIE92ZXJyaWRlIGlubGluZSBzdHlsZXMgdGhhdCBzdXBwcmVzcyBwb2ludGVyIGV2ZW50cyBmb3IgZGlzYWJsZWQgYnV0dG9ucy4gT3RoZXJ3aXNlLCB0aGUgKi8KICAgICAgLyogIHRvb2x0aXBzIGRvIG5vdCBhcHBlYXIuICovCiAgICAgIHBhcGVyLXJhZGlvLWdyb3VwIHBhcGVyLXJhZGlvLWJ1dHRvbiB7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IGF1dG8gIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgLmxlZ2VuZC1jbGFyaWZpZXIgewogICAgICAgIGNvbG9yOiAjMjY2MjM2OwogICAgICAgIGN1cnNvcjogaGVscDsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CiAgICAgIH0KCiAgICAgIC5sZWdlbmQtY2xhcmlmaWVyIHBhcGVyLXRvb2x0aXAgewogICAgICAgIHdpZHRoOiAxNTBweDsKICAgICAgfQoKICAgICAgLyoqIE90aGVyd2lzZSwgcG9seW1lciBVSSBjb250cm9scyBhcHBlYXIgYXRvcCBub2RlIHNlYXJjaC4gKi8KICAgICAgdGYtZ3JhcGgtbm9kZS1zZWFyY2ggewogICAgICAgIHotaW5kZXg6IDE7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgIHBhcGVyLWRyb3Bkb3duLW1lbnUgewogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8ZGl2IGNsYXNzPSJhbGxjb250cm9scyI+CiAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2wtaG9sZGVyIj4KICAgICAgICA8dGYtZ3JhcGgtbm9kZS1zZWFyY2ggc2VsZWN0ZWQtbm9kZT0ie3tzZWxlY3RlZE5vZGV9fSIgcmVuZGVyLWhpZXJhcmNoeT0iW1tyZW5kZXJIaWVyYXJjaHldXSI+PC90Zi1ncmFwaC1ub2RlLXNlYXJjaD4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2wtaG9sZGVyIj4KICAgICAgICA8cGFwZXItYnV0dG9uIGNsYXNzPSJpY29uLWJ1dHRvbiIgb24tdGFwPSJfZml0IiBhbHQ9IkZpdCB0byBzY3JlZW4iPgogICAgICAgICAgPGlyb24taWNvbiBpY29uPSJhc3BlY3QtcmF0aW8iIGNsYXNzPSJidXR0b24taWNvbiI+PC9pcm9uLWljb24+CiAgICAgICAgICA8c3BhbiBjbGFzcz0iYnV0dG9uLXRleHQiPkZpdCB0byBTY3JlZW48L3NwYW4+CiAgICAgICAgPC9wYXBlci1idXR0b24+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjb250cm9sLWhvbGRlciI+CiAgICAgICAgPHBhcGVyLWJ1dHRvbiBjbGFzcz0iaWNvbi1idXR0b24iIG9uLWNsaWNrPSJkb3dubG9hZCIgYWx0PSJEb3dubG9hZCBQTkciPgogICAgICAgICAgPGlyb24taWNvbiBpY29uPSJmaWxlLWRvd25sb2FkIiBjbGFzcz0iYnV0dG9uLWljb24iPjwvaXJvbi1pY29uPgogICAgICAgICAgPHNwYW4gY2xhc3M9ImJ1dHRvbi10ZXh0Ij5Eb3dubG9hZCBQTkc8L3NwYW4+CiAgICAgICAgPC9wYXBlci1idXR0b24+CiAgICAgICAgPGEgaHJlZj0iIyIgaWQ9ImdyYXBoZG93bmxvYWQiIGNsYXNzPSJ0aXRsZSIgZG93bmxvYWQ9ImdyYXBoLnBuZyI+PC9hPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY29udHJvbC1ob2xkZXIgcnVucyI+CiAgICAgICAgPGRpdiBjbGFzcz0idGl0bGUiPgogICAgICAgICAgUnVuIDxzcGFuIGNsYXNzPSJjb3VudGVyIj4oW1tkYXRhc2V0cy5sZW5ndGhdXSk8L3NwYW4+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPHBhcGVyLWRyb3Bkb3duLW1lbnUgbm8tbGFiZWwtZmxvYXQgbm8tYW5pbWF0aW9ucyBub2luayBob3Jpem9udGFsLWFsaWduPSJsZWZ0IiBjbGFzcz0icnVuLWRyb3Bkb3duIj4KICAgICAgICAgIDxwYXBlci1saXN0Ym94IGNsYXNzPSJkcm9wZG93bi1jb250ZW50IiBzZWxlY3RlZD0ie3tfc2VsZWN0ZWRSdW5JbmRleH19IiBzbG90PSJkcm9wZG93bi1jb250ZW50Ij4KICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tkYXRhc2V0c11dIj4KICAgICAgICAgICAgICA8cGFwZXItaXRlbT5bW2l0ZW0ubmFtZV1dPC9wYXBlci1pdGVtPgogICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPC9wYXBlci1saXN0Ym94PgogICAgICAgIDwvcGFwZXItZHJvcGRvd24tbWVudT4KICAgICAgPC9kaXY+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tzaG93U2Vzc2lvblJ1bnNEcm9wZG93bl1dIj4KICAgICAgICA8ZGl2IGNsYXNzPSJjb250cm9sLWhvbGRlciI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZSI+CiAgICAgICAgICAgIFRhZwogICAgICAgICAgICA8c3BhbiBjbGFzcz0iY291bnRlciI+KFtbX251bVRhZ3MoZGF0YXNldHMsIF9zZWxlY3RlZFJ1bkluZGV4KV1dKTwvc3Bhbj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPHBhcGVyLWRyb3Bkb3duLW1lbnUgbm8tbGFiZWwtZmxvYXQgbm8tYW5pbWF0aW9ucyBob3Jpem9udGFsLWFsaWduPSJsZWZ0IiBub2luayBjbGFzcz0icnVuLWRyb3Bkb3duIj4KICAgICAgICAgICAgPHBhcGVyLWxpc3Rib3ggY2xhc3M9ImRyb3Bkb3duLWNvbnRlbnQiIHNlbGVjdGVkPSJ7e19zZWxlY3RlZFRhZ0luZGV4fX0iIHNsb3Q9ImRyb3Bkb3duLWNvbnRlbnQiPgogICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX2dldFRhZ3MoZGF0YXNldHMsIF9zZWxlY3RlZFJ1bkluZGV4KV1dIj4KICAgICAgICAgICAgICAgIDxwYXBlci1pdGVtPltbaXRlbS5kaXNwbGF5TmFtZV1dPC9wYXBlci1pdGVtPgogICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDwvcGFwZXItbGlzdGJveD4KICAgICAgICAgIDwvcGFwZXItZHJvcGRvd24tbWVudT4KICAgICAgICA8L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW3Nob3dVcGxvYWRCdXR0b25dXSI+CiAgICAgICAgPGRpdiBjbGFzcz0iY29udHJvbC1ob2xkZXIiPgogICAgICAgICAgPGRpdiBjbGFzcz0idGl0bGUiPlVwbG9hZDwvZGl2PgogICAgICAgICAgPHBhcGVyLWJ1dHRvbiByYWlzZWQgY2xhc3M9InVwbG9hZC1idXR0b24iIG9uLWNsaWNrPSJfZ2V0RmlsZSIgdGl0bGU9IlVwbG9hZCBhIGdyYXBoIHBidHh0IGZpbGUgdG8gdmlldyB0aGUgZ3JhcGgiPgogICAgICAgICAgICBDaG9vc2UgRmlsZQogICAgICAgICAgPC9wYXBlci1idXR0b24+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJoaWRkZW4taW5wdXQiPgogICAgICAgICAgICA8aW5wdXQgdHlwZT0iZmlsZSIgaWQ9ImZpbGUiIG5hbWU9ImZpbGUiIG9uLWNoYW5nZT0iX3VwZGF0ZUZpbGVJbnB1dCIgYWNjZXB0PSIucGJ0eHQiPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2wtaG9sZGVyIj4KICAgICAgICA8cGFwZXItcmFkaW8tZ3JvdXAgc2VsZWN0ZWQ9Int7X3NlbGVjdGVkR3JhcGhUeXBlfX0iPgogICAgICAgICAgCiAgICAgICAgICA8cGFwZXItcmFkaW8tYnV0dG9uIG5hbWU9Im9wX2dyYXBoIiBkaXNhYmxlZD0iW1tfZ2V0U2VsZWN0aW9uT3BHcmFwaERpc2FibGVkKGRhdGFzZXRzLCBfc2VsZWN0ZWRSdW5JbmRleCwgX3NlbGVjdGVkVGFnSW5kZXgpXV0iPkdyYXBoPC9wYXBlci1yYWRpby1idXR0b24+CiAgICAgICAgICA8cGFwZXItcmFkaW8tYnV0dG9uIG5hbWU9ImNvbmNlcHR1YWxfZ3JhcGgiIGRpc2FibGVkPSJbW19nZXRTZWxlY3Rpb25Db25jZXB0dWFsR3JhcGhEaXNhYmxlZChkYXRhc2V0cywgX3NlbGVjdGVkUnVuSW5kZXgsIF9zZWxlY3RlZFRhZ0luZGV4KV1dIj5Db25jZXB0dWFsIEdyYXBoPC9wYXBlci1yYWRpby1idXR0b24+CiAgICAgICAgICA8cGFwZXItcmFkaW8tYnV0dG9uIG5hbWU9InByb2ZpbGUiIGRpc2FibGVkPSJbW19nZXRTZWxlY3Rpb25Qcm9maWxlRGlzYWJsZWQoZGF0YXNldHMsIF9zZWxlY3RlZFJ1bkluZGV4LCBfc2VsZWN0ZWRUYWdJbmRleCldXSI+UHJvZmlsZTwvcGFwZXItcmFkaW8tYnV0dG9uPgogICAgICAgIDwvcGFwZXItcmFkaW8tZ3JvdXA+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjb250cm9sLWhvbGRlciI+CiAgICAgICAgPGRpdj4KICAgICAgICAgIDxwYXBlci10b2dnbGUtYnV0dG9uIGNoZWNrZWQ9Int7dHJhY2VJbnB1dHN9fSIgY2xhc3M9InRpdGxlIj4KICAgICAgICAgICAgVHJhY2UgaW5wdXRzCiAgICAgICAgICA8L3BhcGVyLXRvZ2dsZS1idXR0b24+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbaGVhbHRoUGlsbHNGZWF0dXJlRW5hYmxlZF1dIj4KICAgICAgICA8ZGl2IGNsYXNzPSJjb250cm9sLWhvbGRlciI+CiAgICAgICAgICA8cGFwZXItdG9nZ2xlLWJ1dHRvbiBjaGVja2VkPSJ7e2hlYWx0aFBpbGxzVG9nZ2xlZE9ufX0iIGNsYXNzPSJ0aXRsZSI+U2hvdyBoZWFsdGggcGlsbHM8L3BhcGVyLXRvZ2dsZS1idXR0b24+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2wtaG9sZGVyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZSI+Q29sb3I8L2Rpdj4KICAgICAgICA8cGFwZXItcmFkaW8tZ3JvdXAgc2VsZWN0ZWQ9Int7Y29sb3JCeX19Ij4KICAgICAgICAgIDxwYXBlci1yYWRpby1idXR0b24gbmFtZT0ic3RydWN0dXJlIj5TdHJ1Y3R1cmU8L3BhcGVyLXJhZGlvLWJ1dHRvbj4KCiAgICAgICAgICA8cGFwZXItcmFkaW8tYnV0dG9uIG5hbWU9ImRldmljZSI+RGV2aWNlPC9wYXBlci1yYWRpby1idXR0b24+CgogICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbiBpZD0ieGxhLWNsdXN0ZXItcmFkaW8tYnV0dG9uIiBuYW1lPSJ4bGFfY2x1c3RlciIgZGlzYWJsZWQ9IltbIV94bGFDbHVzdGVyc1Byb3ZpZGVkKHJlbmRlckhpZXJhcmNoeSldXSI+CiAgICAgICAgICAgIFhMQSBDbHVzdGVyCiAgICAgICAgICA8L3BhcGVyLXJhZGlvLWJ1dHRvbj4KICAgICAgICAgIDxwYXBlci10b29sdGlwIGFuaW1hdGlvbi1kZWxheT0iMCIgZm9yPSJ4bGEtY2x1c3Rlci1yYWRpby1idXR0b24iIHBvc2l0aW9uPSJyaWdodCIgb2Zmc2V0PSIwIj4KICAgICAgICAgICAgQ29sb3JpbmcgYnkgWExBIGNsdXN0ZXIgaXMgb25seSBlbmFibGVkIGlmIGF0IGxlYXN0IDEgb3Agc3BlY2lmaWVzCiAgICAgICAgICAgIGFuIFhMQSBjbHVzdGVyLgogICAgICAgICAgPC9wYXBlci10b29sdGlwPgoKICAgICAgICAgIDxwYXBlci1yYWRpby1idXR0b24gaWQ9ImNvbXB1dGUtdGltZS1yYWRpby1idXR0b24iIG5hbWU9ImNvbXB1dGVfdGltZSIgZGlzYWJsZWQ9IltbIXN0YXRzXV0iPgogICAgICAgICAgICBDb21wdXRlIHRpbWUKICAgICAgICAgIDwvcGFwZXItcmFkaW8tYnV0dG9uPgogICAgICAgICAgPHBhcGVyLXRvb2x0aXAgYW5pbWF0aW9uLWRlbGF5PSIwIiBmb3I9ImNvbXB1dGUtdGltZS1yYWRpby1idXR0b24iIHBvc2l0aW9uPSJyaWdodCIgb2Zmc2V0PSIwIj4KICAgICAgICAgICAgQ29sb3JpbmcgYnkgY29tcHV0ZSB0aW1lIGlzIG9ubHkgZW5hYmxlZCBpZiB0aGUgUnVuTWV0YWRhdGEgcHJvdG8gaXMKICAgICAgICAgICAgcGFzc2VkIHRvIHRoZSBGaWxlV3JpdGVyIHdoZW4gYSBzcGVjaWZpYyBzZXNzaW9uIGlzIHJ1bi4KICAgICAgICAgIDwvcGFwZXItdG9vbHRpcD4KCiAgICAgICAgICA8cGFwZXItcmFkaW8tYnV0dG9uIGlkPSJtZW1vcnktcmFkaW8tYnV0dG9uIiBuYW1lPSJtZW1vcnkiIGRpc2FibGVkPSJbWyFzdGF0c11dIj4KICAgICAgICAgICAgTWVtb3J5CiAgICAgICAgICA8L3BhcGVyLXJhZGlvLWJ1dHRvbj4KICAgICAgICAgIDxwYXBlci10b29sdGlwIGFuaW1hdGlvbi1kZWxheT0iMCIgZm9yPSJtZW1vcnktcmFkaW8tYnV0dG9uIiBwb3NpdGlvbj0icmlnaHQiIG9mZnNldD0iMCI+CiAgICAgICAgICAgIENvbG9yaW5nIGJ5IG1lbW9yeSBpcyBvbmx5IGVuYWJsZWQgaWYgdGhlIFJ1bk1ldGFkYXRhIHByb3RvIGlzCiAgICAgICAgICAgIHBhc3NlZCB0byB0aGUgRmlsZVdyaXRlciB3aGVuIGEgc3BlY2lmaWMgc2Vzc2lvbiBpcyBydW4uCiAgICAgICAgICA8L3BhcGVyLXRvb2x0aXA+CgogICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbiBpZD0idHB1LWNvbXBhdGliaWxpdHktcmFkaW8tYnV0dG9uIiBuYW1lPSJvcF9jb21wYXRpYmlsaXR5Ij4KICAgICAgICAgICAgVFBVIENvbXBhdGliaWxpdHkKICAgICAgICAgIDwvcGFwZXItcmFkaW8tYnV0dG9uPgogICAgICAgICAgPHBhcGVyLXRvb2x0aXAgYW5pbWF0aW9uLWRlbGF5PSIwIiBmb3I9InRwdS1jb21wYXRpYmlsaXR5LXJhZGlvLWJ1dHRvbiIgcG9zaXRpb249InJpZ2h0IiBvZmZzZXQ9IjAiPgogICAgICAgICAgICBDb2xvcmluZyBieSB3aGV0aGVyIGFuIG9wZXJhdGlvbiBpcyBjb21wYXRpYmxlIGZvciB0aGUgVFBVIGRldmljZS4KICAgICAgICAgIDwvcGFwZXItdG9vbHRpcD4KICAgICAgICA8L3BhcGVyLXJhZGlvLWdyb3VwPgogICAgICAgIDxzcGFuIGNsYXNzPSJzcGFjZXIiPjwvc3Bhbj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXY+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19pc0dyYWRpZW50Q29sb3Jpbmcoc3RhdHMsIGNvbG9yQnkpXV0iPgogICAgICAgICAgPHN2ZyB3aWR0aD0iMTQwIiBoZWlnaHQ9IjIwIiBzdHlsZT0ibWFyZ2luOiAwIDVweCIgY2xhc3M9ImNvbG9yLXRleHQiPgogICAgICAgICAgICA8ZGVmcz4KICAgICAgICAgICAgICA8bGluZWFyZ3JhZGllbnQgaWQ9ImxpbmVhckdyYWRpZW50IiB4MT0iMCUiIHkxPSIwJSIgeDI9IjEwMCUiIHkyPSIwJSI+CiAgICAgICAgICAgICAgICA8c3RvcCBjbGFzcz0ic3RhcnQiIG9mZnNldD0iMCUiIHN0b3AtY29sb3IkPSJbW19jdXJyZW50R3JhZGllbnRQYXJhbXMuc3RhcnRDb2xvcl1dIiAvPgogICAgICAgICAgICAgICAgPHN0b3AgY2xhc3M9ImVuZCIgb2Zmc2V0PSIxMDAlIiBzdG9wLWNvbG9yJD0iW1tfY3VycmVudEdyYWRpZW50UGFyYW1zLmVuZENvbG9yXV0iIC8+CiAgICAgICAgICAgICAgPC9saW5lYXJncmFkaWVudD4KICAgICAgICAgICAgPC9kZWZzPgogICAgICAgICAgICA8cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTM1IiBoZWlnaHQ9IjIwIiBmaWxsPSJ1cmwoI2xpbmVhckdyYWRpZW50KSIgc3Ryb2tlPSJibGFjayIgLz4KICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgPGRpdiBjbGFzcz0iZG9tYWluVmFsdWVzIGNvbG9yLXRleHQiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJkb21haW5TdGFydCI+W1tfY3VycmVudEdyYWRpZW50UGFyYW1zLm1pblZhbHVlXV08L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iZG9tYWluRW5kIj5bW19jdXJyZW50R3JhZGllbnRQYXJhbXMubWF4VmFsdWVdXTwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8YnIgc3R5bGU9ImNsZWFyOiBib3RoIj4KICAgICAgICAgIDxkaXY+RGV2aWNlcyBpbmNsdWRlZCBpbiBzdGF0czo8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImRldmljZUxpc3QiPgogICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19jdXJyZW50RGV2aWNlc11dIj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2xvci1sZWdlbmQtcm93IGRldmljZXMtY2hlY2tib3giPgogICAgICAgICAgICAgICAgPHNwYW4+PGlucHV0IHR5cGU9ImNoZWNrYm94IiB2YWx1ZSQ9IltbaXRlbS5kZXZpY2VdXSIgY2hlY2tlZCQ9IltbaXRlbS51c2VkXV0iIG9uLWNsaWNrPSJfZGV2aWNlQ2hlY2tib3hDbGlja2VkIj48L3NwYW4+CiAgICAgICAgICAgICAgICA8c3Bhbj5bW2l0ZW0uc3VmZml4XV08L3NwYW4+CiAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbaXRlbS5pZ25vcmVkTXNnXV0iPgogICAgICAgICAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24gaWNvbj0iaGVscCIgY2xhc3M9ImhlbHAtaWNvbiI+PC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgICAgICAgICAgICAgPHBhcGVyLXRvb2x0aXAgcG9zaXRpb249InJpZ2h0IiBvZmZzZXQ9IjAiIGFuaW1hdGlvbi1kZWxheT0iMCI+W1tpdGVtLmlnbm9yZWRNc2ddXTwvcGFwZXItdG9vbHRpcD4KICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfZXF1YWxzKGNvbG9yQnksICdzdHJ1Y3R1cmUnKV1dIj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbG9yLXRleHQiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2xvci1sZWdlbmQtcm93Ij4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGFiZWwiPgogICAgICAgICAgICAgICAgY29sb3JzCiAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjb2xvci1sZWdlbmQtdmFsdWUiPnNhbWUgc3Vic3RydWN0dXJlPC9zcGFuPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sb3ItbGVnZW5kLXJvdyI+CiAgICAgICAgICAgICAgPHRmLWdyYXBoLWljb24gdHlwZT0iTUVUQSIgaGVpZ2h0PSIxNiIgZmlsbC1vdmVycmlkZT0iI2VlZSIgc3Ryb2tlLW92ZXJyaWRlPSIjYTZhNmE2Ij48L3RmLWdyYXBoLWljb24+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNvbG9yLWxlZ2VuZC12YWx1ZSI+dW5pcXVlIHN1YnN0cnVjdHVyZTwvc3Bhbj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfZXF1YWxzKGNvbG9yQnksICdkZXZpY2UnKV1dIj4KICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX2N1cnJlbnREZXZpY2VQYXJhbXNdXSI+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sb3ItbGVnZW5kLXJvdyI+CiAgICAgICAgICAgICAgICA8dGYtZ3JhcGgtaWNvbiB0eXBlPSJNRVRBIiBoZWlnaHQ9IjE2IiBmaWxsLW92ZXJyaWRlPSJbW2l0ZW0uY29sb3JdXSIgc3Ryb2tlLW92ZXJyaWRlPSIjYTZhNmE2Ij48L3RmLWdyYXBoLWljb24+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iY29sb3ItbGVnZW5kLXZhbHVlIj5bW2l0ZW0uZGV2aWNlXV08L3NwYW4+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbG9yLWxlZ2VuZC1yb3ciPgogICAgICAgICAgICAgIDx0Zi1ncmFwaC1pY29uIHR5cGU9Ik1FVEEiIGhlaWdodD0iMTYiIGZpbGwtb3ZlcnJpZGU9IiNlZWUiIHN0cm9rZS1vdmVycmlkZT0iI2E2YTZhNiI+PC90Zi1ncmFwaC1pY29uPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjb2xvci1sZWdlbmQtdmFsdWUiPnVua25vd24gZGV2aWNlPC9zcGFuPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19lcXVhbHMoY29sb3JCeSwgJ3hsYV9jbHVzdGVyJyldXSI+CiAgICAgICAgICA8ZGl2PgogICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19jdXJyZW50WGxhQ2x1c3RlclBhcmFtc11dIj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2xvci1sZWdlbmQtcm93Ij4KICAgICAgICAgICAgICAgIDxzdmc+CiAgICAgICAgICAgICAgICAgIDx1c2UgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHhsaW5rOmhyZWY9IiN1bmZpbGxlZC1yZWN0IiB4PSIwIiB5PSIwIiBzdHlsZT0iZmlsbDpbW2l0ZW0uY29sb3JdXSIgLz4KICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNvbG9yLWxlZ2VuZC12YWx1ZSI+W1tpdGVtLnhsYV9jbHVzdGVyXV08L3NwYW4+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbG9yLWxlZ2VuZC1yb3ciPgogICAgICAgICAgICAgIDxzdmc+CiAgICAgICAgICAgICAgICA8dXNlIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bGluazpocmVmPSIjZ3JleS1yZWN0IiB4PSIwIiB5PSIwIiAvPgogICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjb2xvci1sZWdlbmQtdmFsdWUiPnVua25vd24gWExBIGNsdXN0ZXI8L3NwYW4+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2VxdWFscyhjb2xvckJ5LCAnb3BfY29tcGF0aWJpbGl0eScpXV0iPgogICAgICAgICAgPGRpdiBjbGFzcz0iY29sb3ItdGV4dCI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbG9yLWxlZ2VuZC1yb3ciPgogICAgICAgICAgICAgIDx0Zi1ncmFwaC1pY29uIHR5cGU9Ik9QIiBoZWlnaHQ9IjE2IiBmaWxsLW92ZXJyaWRlPSIjMGY5ZDU4IiBzdHJva2Utb3ZlcnJpZGU9IiNjY2MiPjwvdGYtZ3JhcGgtaWNvbj4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iY29sb3ItbGVnZW5kLXZhbHVlIj5WYWxpZCBPcDwvc3Bhbj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbG9yLWxlZ2VuZC1yb3ciPgogICAgICAgICAgICAgIDx0Zi1ncmFwaC1pY29uIHR5cGU9Ik9QIiBoZWlnaHQ9IjE2IiBmaWxsLW92ZXJyaWRlPSIjZGI0NDM3IiBzdHJva2Utb3ZlcnJpZGU9IiNjY2MiPjwvdGYtZ3JhcGgtaWNvbj4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iY29sb3ItbGVnZW5kLXZhbHVlIj5JbnZhbGlkIE9wPC9zcGFuPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19zdGF0c05vdE51bGwoc3RhdHMpXV0iPgogICAgICAgICAgPGRpdiBjbGFzcz0iY29sb3ItbGVnZW5kLXJvdyI+CiAgICAgICAgICAgIDx0Zi1ncmFwaC1pY29uIHR5cGU9Ik1FVEEiIGhlaWdodD0iMTYiIGZhZGVkPjwvdGYtZ3JhcGgtaWNvbj4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNvbG9yLWxlZ2VuZC12YWx1ZSI+dW51c2VkIHN1YnN0cnVjdHVyZTwvc3Bhbj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJsZWdlbmQtaG9sZGVyIj4KICAgICAgPHBhcGVyLWljb24tYnV0dG9uIGljb249IltbX2dldFRvZ2dsZUxlZ2VuZEljb24oX2xlZ2VuZE9wZW5lZCldXSIgb24tY2xpY2s9Il90b2dnbGVMZWdlbmRPcGVuIiBjbGFzcz0idG9nZ2xlLWxlZ2VuZC1idXR0b24iPgogICAgICA8L3BhcGVyLWljb24tYnV0dG9uPgogICAgICA8c3BhbiBjbGFzcz0idG9nZ2xlLWxlZ2VuZC10ZXh0Ij4KICAgICAgICBbW19nZXRUb2dnbGVUZXh0KF9sZWdlbmRPcGVuZWQpXV0KICAgICAgPC9zcGFuPgogICAgICA8aXJvbi1jb2xsYXBzZSBvcGVuZWQ9IltbX2xlZ2VuZE9wZW5lZF1dIj4KICAgICAgICA8ZGl2PgogICAgICAgICAgPHRhYmxlPgogICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgPHRkPjxkaXYgY2xhc3M9InRpdGxlIj5HcmFwaDwvZGl2PjwvdGQ+CiAgICAgICAgICAgICAgPHRkPigqID0gZXhwYW5kYWJsZSk8L3RkPgogICAgICAgICAgICA8L3RyPgogICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgPHRmLWdyYXBoLWljb24gdHlwZT0iTUVUQSIgaGVpZ2h0PSIxNiIgZmlsbC1vdmVycmlkZT0iI2Q5ZDlkOSIgc3Ryb2tlLW92ZXJyaWRlPSIjY2NjIj48L3RmLWdyYXBoLWljb24+CiAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICBOYW1lc3BhY2U8c3BhbiBjbGFzcz0iZ3JheSI+Kjwvc3Bhbj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxlZ2VuZC1jbGFyaWZpZXIiPgogICAgICAgICAgICAgICAgICA8c3Bhbj4/PC9zcGFuPgogICAgICAgICAgICAgICAgICA8cGFwZXItdG9vbHRpcCBhbmltYXRpb24tZGVsYXk9IjAiIHBvc2l0aW9uPSJyaWdodCIgb2Zmc2V0PSIwIj4KICAgICAgICAgICAgICAgICAgICBFbmNhcHN1bGF0ZXMgYSBzZXQgb2Ygbm9kZXMuIE5hbWVzcGFjZSBpcyBoaWVyYXJjaGljYWwgYW5kCiAgICAgICAgICAgICAgICAgICAgYmFzZWQgb24gc2NvcGUuCiAgICAgICAgICAgICAgICAgIDwvcGFwZXItdG9vbHRpcD4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICA8dGYtZ3JhcGgtaWNvbiB0eXBlPSJPUCIgaGVpZ2h0PSIxNiI+PC90Zi1ncmFwaC1pY29uPgogICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgT3BOb2RlCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsZWdlbmQtY2xhcmlmaWVyIj4KICAgICAgICAgICAgICAgICAgPHNwYW4+Pzwvc3Bhbj4KICAgICAgICAgICAgICAgICAgPHBhcGVyLXRvb2x0aXAgYW5pbWF0aW9uLWRlbGF5PSIwIiBwb3NpdGlvbj0icmlnaHQiIG9mZnNldD0iMCI+CiAgICAgICAgICAgICAgICAgICAgTm9kZSB0aGF0IHBlcmZvcm1zIGFuIG9wZXJhdGlvbi4gVGhlc2Ugbm9kZXMgY2Fubm90IGV4cGFuZC4KICAgICAgICAgICAgICAgICAgPC9wYXBlci10b29sdGlwPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgIDx0Zi1ncmFwaC1pY29uIHR5cGU9IlNFUklFUyIgaGVpZ2h0PSIxNiI+PC90Zi1ncmFwaC1pY29uPgogICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgVW5jb25uZWN0ZWQgc2VyaWVzPHNwYW4gY2xhc3M9ImdyYXkiPio8L3NwYW4+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsZWdlbmQtY2xhcmlmaWVyIj4KICAgICAgICAgICAgICAgICAgPHNwYW4+Pzwvc3Bhbj4KICAgICAgICAgICAgICAgICAgPHBhcGVyLXRvb2x0aXAgYW5pbWF0aW9uLWRlbGF5PSIwIiBwb3NpdGlvbj0icmlnaHQiIG9mZnNldD0iMCI+CiAgICAgICAgICAgICAgICAgICAgU2VxdWVuY2Ugb2YgbnVtYmVyZWQgbm9kZXMgdGhhdCBhcmUgbm90IGNvbm5lY3RlZCB0byBlYWNoCiAgICAgICAgICAgICAgICAgICAgb3RoZXIuCiAgICAgICAgICAgICAgICAgIDwvcGFwZXItdG9vbHRpcD4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICA8dGYtZ3JhcGgtaWNvbiB0eXBlPSJTRVJJRVMiIGhlaWdodD0iMTYiIHZlcnRpY2FsPjwvdGYtZ3JhcGgtaWNvbj4KICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgIENvbm5lY3RlZCBzZXJpZXM8c3BhbiBjbGFzcz0iZ3JheSI+Kjwvc3Bhbj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxlZ2VuZC1jbGFyaWZpZXIiPgogICAgICAgICAgICAgICAgICA8c3Bhbj4/PC9zcGFuPgogICAgICAgICAgICAgICAgICA8cGFwZXItdG9vbHRpcCBhbmltYXRpb24tZGVsYXk9IjAiIHBvc2l0aW9uPSJyaWdodCIgb2Zmc2V0PSIwIj4KICAgICAgICAgICAgICAgICAgICBTZXF1ZW5jZSBvZiBudW1iZXJlZCBub2RlcyB0aGF0IGFyZSBjb25uZWN0ZWQgdG8gZWFjaCBvdGhlci4KICAgICAgICAgICAgICAgICAgPC9wYXBlci10b29sdGlwPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9Imljb24iPgogICAgICAgICAgICAgICAgICA8Y2lyY2xlIGZpbGw9IndoaXRlIiBzdHJva2U9IiM4NDg0ODQiIGN4PSIxMCIgY3k9IjEwIiByPSI1IiAvPgogICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICBDb25zdGFudAogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGVnZW5kLWNsYXJpZmllciI+CiAgICAgICAgICAgICAgICAgIDxzcGFuPj88L3NwYW4+CiAgICAgICAgICAgICAgICAgIDxwYXBlci10b29sdGlwIGFuaW1hdGlvbi1kZWxheT0iMCIgcG9zaXRpb249InJpZ2h0IiBvZmZzZXQ9IjAiPgogICAgICAgICAgICAgICAgICAgIE5vZGUgdGhhdCBvdXRwdXRzIGEgY29uc3RhbnQgdmFsdWUuCiAgICAgICAgICAgICAgICAgIDwvcGFwZXItdG9vbHRpcD4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICA8dGYtZ3JhcGgtaWNvbiB0eXBlPSJTVU1NQVJZIiBoZWlnaHQ9IjIwIj48L3RmLWdyYXBoLWljb24+CiAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICBTdW1tYXJ5CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsZWdlbmQtY2xhcmlmaWVyIj4KICAgICAgICAgICAgICAgICAgPHNwYW4+Pzwvc3Bhbj4KICAgICAgICAgICAgICAgICAgPHBhcGVyLXRvb2x0aXAgYW5pbWF0aW9uLWRlbGF5PSIwIiBwb3NpdGlvbj0icmlnaHQiIG9mZnNldD0iMCI+CiAgICAgICAgICAgICAgICAgICAgTm9kZSB0aGF0IGNvbGxlY3RzIGRhdGEgZm9yIHZpc3VhbGl6YXRpb24gd2l0aGluCiAgICAgICAgICAgICAgICAgICAgVGVuc29yQm9hcmQuCiAgICAgICAgICAgICAgICAgIDwvcGFwZXItdG9vbHRpcD4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPSJpY29uIiBoZWlnaHQ9IjE1cHgiIHByZXNlcnZlYXNwZWN0cmF0aW89InhNaW5ZTWlkIG1lZXQiIHZpZXdib3g9IjAgMCAxNSAxNSI+CiAgICAgICAgICAgICAgICAgIDxkZWZzPgogICAgICAgICAgICAgICAgICAgIDxtYXJrZXIgaWQ9ImRhdGFmbG93LWFycm93aGVhZC1sZWdlbmQiIGZpbGw9IiNiYmIiIG1hcmtlcndpZHRoPSIxMCIgbWFya2VyaGVpZ2h0PSIxMCIgcmVmeD0iOSIgcmVmeT0iNSIgb3JpZW50PSJhdXRvLXN0YXJ0LXJldmVyc2UiPgogICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTSAwLDAgTCAxMCw1IEwgMCwxMCBDIDMsNyAzLDMgMCwwIiAvPgogICAgICAgICAgICAgICAgICAgIDwvbWFya2VyPgogICAgICAgICAgICAgICAgICA8L2RlZnM+CiAgICAgICAgICAgICAgICAgIDxwYXRoIG1hcmtlci1lbmQ9InVybCgjZGF0YWZsb3ctYXJyb3doZWFkLWxlZ2VuZCkiIHN0cm9rZT0iI2JiYiIgZD0iTTIgOSBsIDI5IDAiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgLz4KICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgRGF0YWZsb3cgZWRnZQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGVnZW5kLWNsYXJpZmllciI+CiAgICAgICAgICAgICAgICAgIDxzcGFuPj88L3NwYW4+CiAgICAgICAgICAgICAgICAgIDxwYXBlci10b29sdGlwIGFuaW1hdGlvbi1kZWxheT0iMCIgcG9zaXRpb249InJpZ2h0IiBvZmZzZXQ9IjAiPgogICAgICAgICAgICAgICAgICAgIEVkZ2Ugc2hvd2luZyB0aGUgZGF0YSBmbG93IGJldHdlZW4gb3BlcmF0aW9ucy4gRWRnZXMgZmxvdwogICAgICAgICAgICAgICAgICAgIHVwd2FyZHMgdW5sZXNzIGFycm93aGVhZHMgc3BlY2lmeSBvdGhlcndpc2UuCiAgICAgICAgICAgICAgICAgIDwvcGFwZXItdG9vbHRpcD4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPSJpY29uIiBoZWlnaHQ9IjE1cHgiIHByZXNlcnZlYXNwZWN0cmF0aW89InhNaW5ZTWlkIG1lZXQiIHZpZXdib3g9IjAgMCAxNSAxNSI+CiAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZT0iI2JiYiIgZD0iTTIgOSBsIDI5IDAiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWRhc2hhcnJheT0iMiwgMiIgLz4KICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgQ29udHJvbCBkZXBlbmRlbmN5IGVkZ2UKICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxlZ2VuZC1jbGFyaWZpZXIiPgogICAgICAgICAgICAgICAgICA8c3Bhbj4/PC9zcGFuPgogICAgICAgICAgICAgICAgICA8cGFwZXItdG9vbHRpcCBhbmltYXRpb24tZGVsYXk9IjAiIHBvc2l0aW9uPSJyaWdodCIgb2Zmc2V0PSIwIj4KICAgICAgICAgICAgICAgICAgICBFZGdlIHNob3dpbmcgdGhlIGNvbnRyb2wgZGVwZW5kZW5jeSBiZXR3ZWVuIG9wZXJhdGlvbnMuCiAgICAgICAgICAgICAgICAgIDwvcGFwZXItdG9vbHRpcD4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPSJpY29uIiBoZWlnaHQ9IjE1cHgiIHByZXNlcnZlYXNwZWN0cmF0aW89InhNaW5ZTWlkIG1lZXQiIHZpZXdib3g9IjAgMCAxNSAxNSI+CiAgICAgICAgICAgICAgICAgIDxkZWZzPgogICAgICAgICAgICAgICAgICAgIDxtYXJrZXIgaWQ9InJlZmVyZW5jZS1hcnJvd2hlYWQtbGVnZW5kIiBmaWxsPSIjRkZCNzREIiBtYXJrZXJ3aWR0aD0iMTAiIG1hcmtlcmhlaWdodD0iMTAiIHJlZng9IjkiIHJlZnk9IjUiIG9yaWVudD0iYXV0by1zdGFydC1yZXZlcnNlIj4KICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0gMCwwIEwgMTAsNSBMIDAsMTAgQyAzLDcgMywzIDAsMCIgLz4KICAgICAgICAgICAgICAgICAgICA8L21hcmtlcj4KICAgICAgICAgICAgICAgICAgPC9kZWZzPgogICAgICAgICAgICAgICAgICA8cGF0aCBtYXJrZXItZW5kPSJ1cmwoI3JlZmVyZW5jZS1hcnJvd2hlYWQtbGVnZW5kKSIgc3Ryb2tlPSIjRkZCNzREIiBkPSJNMiA5IGwgMjkgMCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiAvPgogICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICBSZWZlcmVuY2UgZWRnZQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGVnZW5kLWNsYXJpZmllciI+CiAgICAgICAgICAgICAgICAgIDxzcGFuPj88L3NwYW4+CiAgICAgICAgICAgICAgICAgIDxwYXBlci10b29sdGlwIGFuaW1hdGlvbi1kZWxheT0iMCIgcG9zaXRpb249InJpZ2h0IiBvZmZzZXQ9IjAiPgogICAgICAgICAgICAgICAgICAgIEVkZ2Ugc2hvd2luZyB0aGF0IHRoZSBvdXRnb2luZyBvcGVyYXRpb24gbm9kZSBjYW4gbXV0YXRlIHRoZQogICAgICAgICAgICAgICAgICAgIGluY29taW5nIHRlbnNvci4KICAgICAgICAgICAgICAgICAgPC9wYXBlci10b29sdGlwPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgPC90cj4KICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvaXJvbi1jb2xsYXBzZT4KICAgIDwvZGl2PgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT4KCjxzY3JpcHQ+Ly9+fldFQlBBVEh+fi90Zi1ncmFwaC1jb250cm9scy90Zi1ncmFwaC1jb250cm9scy5qcwooZnVuY3Rpb24oYSl7KGZ1bmN0aW9uKGMpeyhmdW5jdGlvbihkKXtjb25zdCBmPS9kZXZpY2U6KFteOl0rOlswLTldKykkLyxnPVt7cmVnZXg6Zn1dLGw9W107bGV0IGs7KGZ1bmN0aW9uKHApe3AuQ09NUFVURV9USU1FPSJjb21wdXRlX3RpbWUiO3AuTUVNT1JZPSJtZW1vcnkiO3AuU1RSVUNUVVJFPSJzdHJ1Y3R1cmUiO3AuWExBX0NMVVNURVI9InhsYV9jbHVzdGVyIjtwLk9QX0NPTVBBVElCSUxJVFk9Im9wX2NvbXBhdGliaWxpdHkifSkoaz1kLkNvbG9yQnl8fChkLkNvbG9yQnk9e30pKTtjb25zdCBtPW5ldyBTZXQoW2suQ09NUFVURV9USU1FLGsuTUVNT1JZXSk7UG9seW1lcih7aXM6InRmLWdyYXBoLWNvbnRyb2xzIixwcm9wZXJ0aWVzOntzdGF0czp7dmFsdWU6bnVsbCx0eXBlOk9iamVjdCxvYnNlcnZlcjoiX3N0YXRzQ2hhbmdlZCJ9LGRldmljZXNGb3JTdGF0czp7dmFsdWU6bnVsbCx0eXBlOk9iamVjdCxub3RpZnk6ITAscmVhZG9ubHk6ITB9LGNvbG9yQnk6e3R5cGU6U3RyaW5nLAp2YWx1ZTprLlNUUlVDVFVSRSxub3RpZnk6ITB9LGNvbG9yQnlQYXJhbXM6e3R5cGU6T2JqZWN0LG5vdGlmeTohMCxyZWFkb25seTohMH0sZGF0YXNldHM6e3R5cGU6QXJyYXksb2JzZXJ2ZXI6Il9kYXRhc2V0c0NoYW5nZWQiLHZhbHVlOigpPT5bXX0scmVuZGVySGllcmFyY2h5Ont0eXBlOk9iamVjdH0sc2VsZWN0aW9uOnt0eXBlOk9iamVjdCxub3RpZnk6ITAscmVhZE9ubHk6ITAsY29tcHV0ZWQ6Il9jb21wdXRlU2VsZWN0aW9uKGRhdGFzZXRzLCBfc2VsZWN0ZWRSdW5JbmRleCwgX3NlbGVjdGVkVGFnSW5kZXgsIF9zZWxlY3RlZEdyYXBoVHlwZSkifSxzZWxlY3RlZEZpbGU6e3R5cGU6T2JqZWN0LG5vdGlmeTohMH0sX3NlbGVjdGVkUnVuSW5kZXg6e3R5cGU6TnVtYmVyLHZhbHVlOjAsb2JzZXJ2ZXI6Il9zZWxlY3RlZFJ1bkluZGV4Q2hhbmdlZCJ9LHRyYWNlSW5wdXRzOnt0eXBlOkJvb2xlYW4sbm90aWZ5OiEwLHZhbHVlOiExfSxfc2VsZWN0ZWRUYWdJbmRleDp7dHlwZTpOdW1iZXIsCnZhbHVlOjAsb2JzZXJ2ZXI6Il9zZWxlY3RlZFRhZ0luZGV4Q2hhbmdlZCJ9LF9zZWxlY3RlZEdyYXBoVHlwZTp7dHlwZTpTdHJpbmcsdmFsdWU6YS5ncmFwaC5TZWxlY3Rpb25UeXBlLk9QX0dSQVBIfSxzZWxlY3RlZE5vZGU6e3R5cGU6U3RyaW5nLG5vdGlmeTohMH0sX2N1cnJlbnREZXZpY2VzOnt0eXBlOkFycmF5LGNvbXB1dGVkOiJfZ2V0Q3VycmVudERldmljZXMoZGV2aWNlc0ZvclN0YXRzKSJ9LF9jdXJyZW50RGV2aWNlUGFyYW1zOnt0eXBlOkFycmF5LGNvbXB1dGVkOiJfZ2V0Q3VycmVudERldmljZVBhcmFtcyhjb2xvckJ5UGFyYW1zKSJ9LF9jdXJyZW50WGxhQ2x1c3RlclBhcmFtczp7dHlwZTpBcnJheSxjb21wdXRlZDoiX2dldEN1cnJlbnRYbGFDbHVzdGVyUGFyYW1zKGNvbG9yQnlQYXJhbXMpIn0sX2N1cnJlbnRHcmFkaWVudFBhcmFtczp7dHlwZTpPYmplY3QsY29tcHV0ZWQ6Il9nZXRDdXJyZW50R3JhZGllbnRQYXJhbXMoY29sb3JCeVBhcmFtcywgY29sb3JCeSkifSwKc2hvd1Nlc3Npb25SdW5zRHJvcGRvd246e3R5cGU6Qm9vbGVhbix2YWx1ZTohMH0sc2hvd1VwbG9hZEJ1dHRvbjp7dHlwZTpCb29sZWFuLHZhbHVlOiEwfSxoZWFsdGhQaWxsc0ZlYXR1cmVFbmFibGVkOkJvb2xlYW4saGVhbHRoUGlsbHNUb2dnbGVkT246e3R5cGU6Qm9vbGVhbixub3RpZnk6ITB9LF9sZWdlbmRPcGVuZWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMH19LF94bGFDbHVzdGVyc1Byb3ZpZGVkOmZ1bmN0aW9uKHApe3JldHVybiBwJiZwLmhpZXJhcmNoeSYmMDxwLmhpZXJhcmNoeS54bGFDbHVzdGVycy5sZW5ndGh9LF9zdGF0c0NoYW5nZWQ6ZnVuY3Rpb24ocCl7aWYobnVsbCE9cCl7dmFyIHE9e307Xy5lYWNoKHAuZGV2X3N0YXRzLGZ1bmN0aW9uKHIpe3ZhciB0PV8uc29tZShnLGZ1bmN0aW9uKEEpe3JldHVybiBBLnJlZ2V4LnRlc3Qoci5kZXZpY2UpfSksdj1fLnNvbWUobCxmdW5jdGlvbihBKXtyZXR1cm4gQS5yZWdleC50ZXN0KHIuZGV2aWNlKX0pO3QmJiF2JiYocVtyLmRldmljZV09CiEwKX0pO3RoaXMuc2V0KCJkZXZpY2VzRm9yU3RhdHMiLHEpfX0sX2dldEN1cnJlbnREZXZpY2VzOmZ1bmN0aW9uKHApe3ZhciBxPXRoaXMuc3RhdHM7cT0ocT9xLmRldl9zdGF0czpbXSkubWFwKHQ9PnQuZGV2aWNlKS5maWx0ZXIodD0+Zy5zb21lKHY9PnYucmVnZXgudGVzdCh0KSkpO2NvbnN0IHI9YS5ncmFwaC51dGlsLnJlbW92ZUNvbW1vblByZWZpeChxKTtpZigxPT1yLmxlbmd0aCl7Y29uc3QgdD1yWzBdLm1hdGNoKGYpO3QmJihyWzBdPXRbMV0pfXJldHVybiBxLm1hcCgodCx2KT0+e2xldCBBPW51bGw7bC5mb3JFYWNoKHk9Pnt5LnJlZ2V4LnRlc3QodCkmJihBPXkubXNnKX0pO3JldHVybntkZXZpY2U6dCxzdWZmaXg6clt2XSx1c2VkOnBbdF0saWdub3JlZE1zZzpBfX0pfSxfZGV2aWNlQ2hlY2tib3hDbGlja2VkOmZ1bmN0aW9uKHApe3A9cC50YXJnZXQ7Y29uc3QgcT1PYmplY3QuYXNzaWduKHt9LHRoaXMuZGV2aWNlc0ZvclN0YXRzKSxyPXAudmFsdWU7cC5jaGVja2VkPwpxW3JdPSEwOmRlbGV0ZSBxW3JdO3RoaXMuc2V0KCJkZXZpY2VzRm9yU3RhdHMiLHEpfSxfbnVtVGFnczpmdW5jdGlvbihwLHEpe3JldHVybiB0aGlzLl9nZXRUYWdzKHAscSkubGVuZ3RofSxfZ2V0VGFnczpmdW5jdGlvbihwLHEpe3JldHVybiBwJiZwW3FdP3BbcV0udGFnczpbXX0sX2ZpdDpmdW5jdGlvbigpe3RoaXMuZmlyZSgiZml0LXRhcCIpfSxfaXNHcmFkaWVudENvbG9yaW5nOmZ1bmN0aW9uKHAscSl7cmV0dXJuIG0uaGFzKHEpJiZudWxsIT1wfSxfZXF1YWxzOmZ1bmN0aW9uKHAscSl7cmV0dXJuIHA9PT1xfSxfZ2V0Q3VycmVudERldmljZVBhcmFtczpmdW5jdGlvbihwKXtwPXAuZGV2aWNlLmZpbHRlcih0PT5nLnNvbWUodj0+di5yZWdleC50ZXN0KHQuZGV2aWNlKSkpO2NvbnN0IHE9YS5ncmFwaC51dGlsLnJlbW92ZUNvbW1vblByZWZpeChwLm1hcCh0PT50LmRldmljZSkpO2lmKDE9PXEubGVuZ3RoKXt2YXIgcj1xWzBdLm1hdGNoKGYpO3ImJihxWzBdPXJbMV0pfXJldHVybiBwLm1hcCgodCwKdik9Pih7ZGV2aWNlOnFbdl0sY29sb3I6dC5jb2xvcn0pKX0sX2dldEN1cnJlbnRYbGFDbHVzdGVyUGFyYW1zOmZ1bmN0aW9uKHApe3JldHVybiBwLnhsYV9jbHVzdGVyfSxfZ2V0Q3VycmVudEdyYWRpZW50UGFyYW1zOmZ1bmN0aW9uKHAscSl7aWYodGhpcy5faXNHcmFkaWVudENvbG9yaW5nKHRoaXMuc3RhdHMscSkpe3A9cFtxXTt2YXIgcj1wLm1pblZhbHVlLHQ9cC5tYXhWYWx1ZTtxPT09ay5NRU1PUlk/KHI9YS5ncmFwaC51dGlsLmNvbnZlcnRVbml0c1RvSHVtYW5SZWFkYWJsZShyLGEuZ3JhcGgudXRpbC5NRU1PUllfVU5JVFMpLHQ9YS5ncmFwaC51dGlsLmNvbnZlcnRVbml0c1RvSHVtYW5SZWFkYWJsZSh0LGEuZ3JhcGgudXRpbC5NRU1PUllfVU5JVFMpKTpxPT09ay5DT01QVVRFX1RJTUUmJihyPWEuZ3JhcGgudXRpbC5jb252ZXJ0VW5pdHNUb0h1bWFuUmVhZGFibGUocixhLmdyYXBoLnV0aWwuVElNRV9VTklUUyksdD1hLmdyYXBoLnV0aWwuY29udmVydFVuaXRzVG9IdW1hblJlYWRhYmxlKHQsCmEuZ3JhcGgudXRpbC5USU1FX1VOSVRTKSk7cmV0dXJue21pblZhbHVlOnIsbWF4VmFsdWU6dCxzdGFydENvbG9yOnAuc3RhcnRDb2xvcixlbmRDb2xvcjpwLmVuZENvbG9yfX19LGRvd25sb2FkOmZ1bmN0aW9uKCl7dGhpcy4kLmdyYXBoZG93bmxvYWQuY2xpY2soKX0sX3VwZGF0ZUZpbGVJbnB1dDpmdW5jdGlvbihwKXt2YXIgcT1wLnRhcmdldC5maWxlc1swXTtpZihxKXtxPXEubmFtZTt2YXIgcj1xLmxhc3RJbmRleE9mKCIuIik7MDw9ciYmKHE9cS5zdWJzdHJpbmcoMCxyKSk7cj1xLmxhc3RJbmRleE9mKCIvIik7MDw9ciYmKHE9cS5zdWJzdHJpbmcocisxKSk7dGhpcy5fc2V0RG93bmxvYWRGaWxlbmFtZShxKTt0aGlzLnNldCgic2VsZWN0ZWRGaWxlIixwKX19LF9kYXRhc2V0c0NoYW5nZWQ6ZnVuY3Rpb24ocCxxKXtudWxsIT1xJiYodGhpcy5fc2VsZWN0ZWRSdW5JbmRleD0wKX0sX2NvbXB1dGVTZWxlY3Rpb246ZnVuY3Rpb24ocCxxLHIsdCl7cmV0dXJuIHBbcV0mJnBbcV0udGFnc1tyXT8Ke3J1bjpwW3FdLm5hbWUsdGFnOnBbcV0udGFnc1tyXS50YWcsdHlwZTp0fTpudWxsfSxfc2VsZWN0ZWRSdW5JbmRleENoYW5nZWQ6ZnVuY3Rpb24ocCl7dGhpcy5kYXRhc2V0cyYmKHRoaXMuY29sb3JCeT1rLlNUUlVDVFVSRSx0aGlzLl9zZWxlY3RlZFRhZ0luZGV4PTAsdGhpcy5fc2VsZWN0ZWRHcmFwaFR5cGU9dGhpcy5fZ2V0RGVmYXVsdFNlbGVjdGlvblR5cGUoKSx0aGlzLnRyYWNlSW5wdXRzPSExLHRoaXMuX3NldERvd25sb2FkRmlsZW5hbWUodGhpcy5kYXRhc2V0c1twXT90aGlzLmRhdGFzZXRzW3BdLm5hbWU6IiIpKX0sX3NlbGVjdGVkVGFnSW5kZXhDaGFuZ2VkKCl7dGhpcy5fc2VsZWN0ZWRHcmFwaFR5cGU9dGhpcy5fZ2V0RGVmYXVsdFNlbGVjdGlvblR5cGUoKX0sX2dldERlZmF1bHRTZWxlY3Rpb25UeXBlKCl7Y29uc3Qge2RhdGFzZXRzOnAsX3NlbGVjdGVkUnVuSW5kZXg6cSxfc2VsZWN0ZWRUYWdJbmRleDpyfT10aGlzO3JldHVybiBwJiZwW3FdJiZwW3FdLnRhZ3Nbcl0mJgohcFtxXS50YWdzW3JdLm9wR3JhcGg/cFtxXS50YWdzW3JdLnByb2ZpbGU/YS5ncmFwaC5TZWxlY3Rpb25UeXBlLlBST0ZJTEU6cFtxXS50YWdzW3JdLmNvbmNlcHR1YWxHcmFwaD9hLmdyYXBoLlNlbGVjdGlvblR5cGUuQ09OQ0VQVFVBTF9HUkFQSDphLmdyYXBoLlNlbGVjdGlvblR5cGUuT1BfR1JBUEg6YS5ncmFwaC5TZWxlY3Rpb25UeXBlLk9QX0dSQVBIfSxfZ2V0RmlsZTpmdW5jdGlvbigpe3RoaXMuJCQoIiNmaWxlIikuY2xpY2soKX0sX3NldERvd25sb2FkRmlsZW5hbWU6ZnVuY3Rpb24ocCl7dGhpcy4kLmdyYXBoZG93bmxvYWQuc2V0QXR0cmlidXRlKCJkb3dubG9hZCIscCsiLnBuZyIpfSxfc3RhdHNOb3ROdWxsOmZ1bmN0aW9uKHApe3JldHVybiBudWxsIT09cH0sX3RvZ2dsZUxlZ2VuZE9wZW4oKXt0aGlzLnNldCgiX2xlZ2VuZE9wZW5lZCIsIXRoaXMuX2xlZ2VuZE9wZW5lZCl9LF9nZXRUb2dnbGVUZXh0KHApe3JldHVybiBwPyJDbG9zZSBsZWdlbmQuIjoiRXhwYW5kIGxlZ2VuZC4ifSwKX2dldFRvZ2dsZUxlZ2VuZEljb24ocCl7cmV0dXJuIHA/ImV4cGFuZC1tb3JlIjoiZXhwYW5kLWxlc3MifSxfZ2V0U2VsZWN0aW9uT3BHcmFwaERpc2FibGVkKHAscSxyKXtyZXR1cm4hcFtxXXx8IXBbcV0udGFnc1tyXXx8IXBbcV0udGFnc1tyXS5vcEdyYXBofSxfZ2V0U2VsZWN0aW9uUHJvZmlsZURpc2FibGVkKHAscSxyKXtyZXR1cm4hcFtxXXx8IXBbcV0udGFnc1tyXXx8IXBbcV0udGFnc1tyXS5wcm9maWxlfSxfZ2V0U2VsZWN0aW9uQ29uY2VwdHVhbEdyYXBoRGlzYWJsZWQocCxxLHIpe3JldHVybiFwW3FdfHwhcFtxXS50YWdzW3JdfHwhcFtxXS50YWdzW3JdLmNvbmNlcHR1YWxHcmFwaH19KX0pKGMuY29udHJvbHN8fChjLmNvbnRyb2xzPXt9KSl9KShhLmdyYXBofHwoYS5ncmFwaD17fSkpfSkodGZ8fCh0Zj17fSkpOwo8L3NjcmlwdD4KCgoKCgoKPGRvbS1tb2R1bGUgaWQ9InRmLWdyYXBoLWRhc2hib2FyZC1sb2FkZXIiPiA8L2RvbS1tb2R1bGU+Cgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdGYtZ3JhcGgtbG9hZGVyL3RmLWdyYXBoLWRhc2hib2FyZC1sb2FkZXIuanMKaG09dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKGEsYyxkLGYpe3JldHVybiBuZXcgKGR8fChkPVByb21pc2UpKShmdW5jdGlvbihnLGwpe2Z1bmN0aW9uIGsocSl7dHJ5e3AoZi5uZXh0KHEpKX1jYXRjaChyKXtsKHIpfX1mdW5jdGlvbiBtKHEpe3RyeXtwKGZbInRocm93Il0ocSkpfWNhdGNoKHIpe2wocil9fWZ1bmN0aW9uIHAocSl7cS5kb25lP2cocS52YWx1ZSk6KG5ldyBkKGZ1bmN0aW9uKHIpe3IocS52YWx1ZSl9KSkudGhlbihrLG0pfXAoKGY9Zi5hcHBseShhLGN8fFtdKSkubmV4dCgpKX0pfTsKKGZ1bmN0aW9uKGEpeyhmdW5jdGlvbihjKXsoZnVuY3Rpb24oKXtQb2x5bWVyKHtpczoidGYtZ3JhcGgtZGFzaGJvYXJkLWxvYWRlciIscHJvcGVydGllczp7ZGF0YXNldHM6QXJyYXkscHJvZ3Jlc3M6e3R5cGU6T2JqZWN0LG5vdGlmeTohMH0sc2VsZWN0aW9uOk9iamVjdCxzZWxlY3RlZEZpbGU6T2JqZWN0LGNvbXBhdGliaWxpdHlQcm92aWRlcjp7dHlwZTpPYmplY3QsdmFsdWU6KCk9Pm5ldyBhLmdyYXBoLm9wLlRwdUNvbXBhdGliaWxpdHlQcm92aWRlcn0saGllcmFyY2h5UGFyYW1zOnt0eXBlOk9iamVjdCx2YWx1ZTooKT0+YS5ncmFwaC5oaWVyYXJjaHkuRGVmYXVsdEhpZXJhcmNoeVBhcmFtc30sb3V0R3JhcGhIaWVyYXJjaHk6e3R5cGU6T2JqZWN0LHJlYWRPbmx5OiEwLG5vdGlmeTohMH0sb3V0R3JhcGg6e3R5cGU6T2JqZWN0LHJlYWRPbmx5OiEwLG5vdGlmeTohMH0sb3V0U3RhdHM6e3R5cGU6T2JqZWN0LHJlYWRPbmx5OiEwLG5vdGlmeTohMH0sX2dyYXBoUnVuVGFnOk9iamVjdH0sCm9ic2VydmVyczpbIl9zZWxlY3Rpb25DaGFuZ2VkKHNlbGVjdGlvbiwgY29tcGF0aWJpbGl0eVByb3ZpZGVyKSIsIl9zZWxlY3RlZEZpbGVDaGFuZ2VkKHNlbGVjdGVkRmlsZSwgY29tcGF0aWJpbGl0eVByb3ZpZGVyKSJdLF9zZWxlY3Rpb25DaGFuZ2VkKCl7dGhpcy5kZWJvdW5jZSgic2VsZWN0aW9uY2hhbmdlIiwoKT0+e3RoaXMuX2xvYWQodGhpcy5zZWxlY3Rpb24pfSl9LF9sb2FkOmZ1bmN0aW9uKGQpe2NvbnN0IHtydW46Zix0YWc6Zyx0eXBlOmx9PWQ7c3dpdGNoKGwpe2Nhc2UgYS5ncmFwaC5TZWxlY3Rpb25UeXBlLk9QX0dSQVBIOmNhc2UgYS5ncmFwaC5TZWxlY3Rpb25UeXBlLkNPTkNFUFRVQUxfR1JBUEg6cmV0dXJuIHRoaXMuX3NldE91dFN0YXRzKG51bGwpLGQ9bmV3IFVSTFNlYXJjaFBhcmFtcyxkLnNldCgicnVuIixmKSxkLnNldCgiY29uY2VwdHVhbCIsU3RyaW5nKGw9PT1hLmdyYXBoLlNlbGVjdGlvblR5cGUuQ09OQ0VQVFVBTF9HUkFQSCkpLGcmJmQuc2V0KCJ0YWciLApnKSxkPVBrLmdldFJvdXRlcigpLnBsdWdpblJvdXRlKCJncmFwaHMiLCIvZ3JhcGgiLGQpLHRoaXMuX2ZldGNoQW5kQ29uc3RydWN0SGllcmFyY2hpY2FsR3JhcGgoZCkudGhlbigoKT0+e3RoaXMuX2dyYXBoUnVuVGFnPXtydW46Zix0YWc6Z319KTtjYXNlIGEuZ3JhcGguU2VsZWN0aW9uVHlwZS5QUk9GSUxFOnsoe3RhZ3M6ZH09dGhpcy5kYXRhc2V0cy5maW5kKCh7bmFtZTpxfSk9PnE9PT1mKSk7Y29uc3Qgaz1kLmZpbmQocT0+cS50YWc9PT1nKS5vcEdyYXBoP2c6bnVsbDtjb25zb2xlLmFzc2VydChkLmZpbmQocT0+cS50YWc9PT1rKSxgUmVxdWlyZWQgdGFnICgke2t9KSBpcyBtaXNzaW5nLmApO2Q9dGhpcy5fZ3JhcGhSdW5UYWcmJnRoaXMuX2dyYXBoUnVuVGFnLnJ1bj09PWYmJnRoaXMuX2dyYXBoUnVuVGFnLnRhZz09PWs/UHJvbWlzZS5yZXNvbHZlKCk6dGhpcy5fbG9hZCh7cnVuOmYsdGFnOmssdHlwZTphLmdyYXBoLlNlbGVjdGlvblR5cGUuT1BfR1JBUEh9KTtjb25zdCBtPQpuZXcgVVJMU2VhcmNoUGFyYW1zO20uc2V0KCJ0YWciLGcpO20uc2V0KCJydW4iLGYpO2NvbnN0IHA9UGsuZ2V0Um91dGVyKCkucGx1Z2luUm91dGUoImdyYXBocyIsIi9ydW5fbWV0YWRhdGEiLG0pO3JldHVybiBkLnRoZW4oKCk9PnRoaXMuX3JlYWRBbmRQYXJzZU1ldGFkYXRhKHApKX1kZWZhdWx0OnJldHVybiBQcm9taXNlLnJlamVjdChFcnJvcihgVW5rbm93biBzZWxlY3Rpb24gdHlwZTogJHtsfWApKX19LF9yZWFkQW5kUGFyc2VNZXRhZGF0YTpmdW5jdGlvbihkKXt0aGlzLnNldCgicHJvZ3Jlc3MiLHt2YWx1ZTowLG1zZzoiIn0pO2EuZ3JhcGgucGFyc2VyLmZldGNoQW5kUGFyc2VNZXRhZGF0YShkLGEuZ3JhcGgudXRpbC5nZXRUcmFja2VyKHRoaXMpKS50aGVuKGY9Pnt0aGlzLl9zZXRPdXRTdGF0cyhmKX0pfSxfZmV0Y2hBbmRDb25zdHJ1Y3RIaWVyYXJjaGljYWxHcmFwaDpmdW5jdGlvbihkLGYpe3JldHVybiBobSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7dGhpcy5zZXQoInByb2dyZXNzIiwKe3ZhbHVlOjAsbXNnOiIifSk7cmV0dXJuIGEuZ3JhcGgubG9hZGVyLmZldGNoQW5kQ29uc3RydWN0SGllcmFyY2hpY2FsR3JhcGgoYS5ncmFwaC51dGlsLmdldFRyYWNrZXIodGhpcyksZCxmLHRoaXMuY29tcGF0aWJpbGl0eVByb3ZpZGVyLHRoaXMuaGllcmFyY2h5UGFyYW1zKS50aGVuKCh7Z3JhcGg6ZyxncmFwaEhpZXJhcmNoeTpsfSk9Pnt0aGlzLl9zZXRPdXRHcmFwaChnKTt0aGlzLl9zZXRPdXRHcmFwaEhpZXJhcmNoeShsKX0pfSl9LF9zZWxlY3RlZEZpbGVDaGFuZ2VkOmZ1bmN0aW9uKGQpe2lmKGQpe2Q9ZC50YXJnZXQ7dmFyIGY9ZC5maWxlc1swXTtmJiYoZC52YWx1ZT0iIix0aGlzLl9mZXRjaEFuZENvbnN0cnVjdEhpZXJhcmNoaWNhbEdyYXBoKG51bGwsZikpfX19KX0pKGMubG9hZGVyfHwoYy5sb2FkZXI9e30pKX0pKGEuZ3JhcGh8fChhLmdyYXBoPXt9KSl9KSh0Znx8KHRmPXt9KSk7Cjwvc2NyaXB0PgoKCgoKCgo8ZG9tLW1vZHVsZSBpZD0idGYtZ3JhcGgtZGFzaGJvYXJkIj4KICA8dGVtcGxhdGU+CiAgICA8cGFwZXItZGlhbG9nIGlkPSJlcnJvci1kaWFsb2ciIHdpdGgtYmFja2Ryb3A+PC9wYXBlci1kaWFsb2c+CiAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2RhdGFzZXRzU3RhdGUoX2RhdGFzZXRzRmV0Y2hlZCwgX2RhdGFzZXRzLCAnRU1QVFknKV1dIj4KICAgICAgPGRpdiBzdHlsZT0ibWF4LXdpZHRoOiA1NDBweDsgbWFyZ2luOiA4MHB4IGF1dG8gMCBhdXRvOyI+CiAgICAgICAgPGgzPk5vIGdyYXBoIGRlZmluaXRpb24gZmlsZXMgd2VyZSBmb3VuZC48L2gzPgogICAgICAgIDxwPgogICAgICAgICAgVG8gc3RvcmUgYSBncmFwaCwgY3JlYXRlIGEKICAgICAgICAgIDxjb2RlPnRmLnN1bW1hcnkuRmlsZVdyaXRlcjwvY29kZT4KICAgICAgICAgIGFuZCBwYXNzIHRoZSBncmFwaCBlaXRoZXIgdmlhIHRoZSBjb25zdHJ1Y3Rvciwgb3IgYnkgY2FsbGluZyBpdHMKICAgICAgICAgIDxjb2RlPmFkZF9ncmFwaCgpPC9jb2RlPiBtZXRob2QuIFlvdSBtYXkgd2FudCB0byBjaGVjayBvdXQgdGhlCiAgICAgICAgICA8YSBocmVmPSJodHRwczovL3d3dy50ZW5zb3JmbG93Lm9yZy9nZXRfc3RhcnRlZC9ncmFwaF92aXoiPmdyYXBoIHZpc3VhbGl6ZXIgdHV0b3JpYWw8L2E+LgogICAgICAgIAoKICAgICAgICA8cD4KICAgICAgICAgIElmIHlvdeKAmXJlIG5ldyB0byB1c2luZyBUZW5zb3JCb2FyZCwgYW5kIHdhbnQgdG8gZmluZCBvdXQgaG93IHRvIGFkZAogICAgICAgICAgZGF0YSBhbmQgc2V0IHVwIHlvdXIgZXZlbnQgZmlsZXMsIGNoZWNrIG91dCB0aGUKICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCI+UkVBRE1FPC9hPgogICAgICAgICAgYW5kIHBlcmhhcHMgdGhlCiAgICAgICAgICA8YSBocmVmPSJodHRwczovL3d3dy50ZW5zb3JmbG93Lm9yZy9nZXRfc3RhcnRlZC9zdW1tYXJpZXNfYW5kX3RlbnNvcmJvYXJkIj5UZW5zb3JCb2FyZCB0dXRvcmlhbDwvYT4uCiAgICAgICAgCgogICAgICAgIDxwPgogICAgICAgICAgSWYgeW91IHRoaW5rIFRlbnNvckJvYXJkIGlzIGNvbmZpZ3VyZWQgcHJvcGVybHksIHBsZWFzZSBzZWUKICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCNteS10ZW5zb3Jib2FyZC1pc250LXNob3dpbmctYW55LWRhdGEtd2hhdHMtd3JvbmciPnRoZSBzZWN0aW9uIG9mIHRoZSBSRUFETUUgZGV2b3RlZCB0byBtaXNzaW5nIGRhdGEgcHJvYmxlbXM8L2E+CiAgICAgICAgICBhbmQgY29uc2lkZXIgZmlsaW5nIGFuIGlzc3VlIG9uIEdpdEh1Yi4KICAgICAgICAKICAgICAgPC9kaXY+CiAgICA8L3RlbXBsYXRlPgogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbWyFfZGF0YXNldHNTdGF0ZShkYXRhc2V0c0ZldGNoZWQsIF9kYXRhc2V0cywgJ1BSRVNFTlQnKV1dIj4KICAgICAgPHRmLWRhc2hib2FyZC1sYXlvdXQ+CiAgICAgICAgPHRmLWdyYXBoLWNvbnRyb2xzIGlkPSJjb250cm9scyIgY2xhc3M9InNpZGViYXIiIHNsb3Q9InNpZGViYXIiIGRldmljZXMtZm9yLXN0YXRzPSJ7e19kZXZpY2VzRm9yU3RhdHN9fSIgY29sb3ItYnktcGFyYW1zPSJbW19jb2xvckJ5UGFyYW1zXV0iIHN0YXRzPSJbW19zdGF0c11dIiBjb2xvci1ieT0ie3tfY29sb3JCeX19IiBkYXRhc2V0cz0iW1tfZGF0YXNldHNdXSIgcmVuZGVyLWhpZXJhcmNoeT0iW1tfcmVuZGVySGllcmFyY2h5XV0iIHNlbGVjdGlvbj0ie3tfc2VsZWN0aW9ufX0iIHNlbGVjdGVkLWZpbGU9Int7X3NlbGVjdGVkRmlsZX19IiBzZWxlY3RlZC1ub2RlPSJ7e19zZWxlY3RlZE5vZGV9fSIgaGVhbHRoLXBpbGxzLWZlYXR1cmUtZW5hYmxlZD0iW1tfZGVidWdnZXJEYXRhRW5hYmxlZF1dIiBoZWFsdGgtcGlsbHMtdG9nZ2xlZC1vbj0ie3toZWFsdGhQaWxsc1RvZ2dsZWRPbn19IiBvbi1maXQtdGFwPSJfZml0IiB0cmFjZS1pbnB1dHM9Int7X3RyYWNlSW5wdXRzfX0iPjwvdGYtZ3JhcGgtY29udHJvbHM+CiAgICAgICAgPGRpdiBjbGFzcz0iY2VudGVyIiBzbG90PSJjZW50ZXIiPgogICAgICAgICAgPHRmLWdyYXBoLWRhc2hib2FyZC1sb2FkZXIgaWQ9ImxvYWRlciIgZGF0YXNldHM9IltbX2RhdGFzZXRzXV0iIHNlbGVjdGlvbj0iW1tfc2VsZWN0aW9uXV0iIHNlbGVjdGVkLWZpbGU9IltbX3NlbGVjdGVkRmlsZV1dIiBvdXQtZ3JhcGgtaGllcmFyY2h5PSJ7e19ncmFwaEhpZXJhcmNoeX19IiBvdXQtZ3JhcGg9Int7X2dyYXBofX0iIG91dC1zdGF0cz0ie3tfc3RhdHN9fSIgcHJvZ3Jlc3M9Int7X3Byb2dyZXNzfX0iIGhpZXJhcmNoeS1wYXJhbXM9IltbX2hpZXJhcmNoeVBhcmFtc11dIiBjb21wYXRpYmlsaXR5LXByb3ZpZGVyPSJbW19jb21wYXRpYmlsaXR5UHJvdmlkZXJdXSI+PC90Zi1ncmFwaC1kYXNoYm9hcmQtbG9hZGVyPgogICAgICAgICAgPHRmLWdyYXBoLWJvYXJkIGlkPSJncmFwaGJvYXJkIiBkZXZpY2VzLWZvci1zdGF0cz0iW1tfZGV2aWNlc0ZvclN0YXRzXV0iIGNvbG9yLWJ5PSJbW19jb2xvckJ5XV0iIGNvbG9yLWJ5LXBhcmFtcz0ie3tfY29sb3JCeVBhcmFtc319IiBncmFwaC1oaWVyYXJjaHk9IltbX2dyYXBoSGllcmFyY2h5XV0iIGdyYXBoPSJbW19ncmFwaF1dIiBoaWVyYXJjaHktcGFyYW1zPSJbW19oaWVyYXJjaHlQYXJhbXNdXSIgcHJvZ3Jlc3M9IltbX3Byb2dyZXNzXV0iIGRlYnVnZ2VyLWRhdGEtZW5hYmxlZD0iW1tfZGVidWdnZXJEYXRhRW5hYmxlZF1dIiBhcmUtaGVhbHRoLXBpbGxzLWxvYWRpbmc9IltbX2FyZUhlYWx0aFBpbGxzTG9hZGluZ11dIiBkZWJ1Z2dlci1udW1lcmljLWFsZXJ0cz0iW1tfZGVidWdnZXJOdW1lcmljQWxlcnRzXV0iIG5vZGUtbmFtZXMtdG8taGVhbHRoLXBpbGxzPSJbW19ub2RlTmFtZXNUb0hlYWx0aFBpbGxzXV0iIGFsbC1zdGVwcy1tb2RlLWVuYWJsZWQ9Int7YWxsU3RlcHNNb2RlRW5hYmxlZH19IiBzcGVjaWZpYy1oZWFsdGgtcGlsbC1zdGVwPSJ7e3NwZWNpZmljSGVhbHRoUGlsbFN0ZXB9fSIgaGVhbHRoLXBpbGwtc3RlcC1pbmRleD0iW1tfaGVhbHRoUGlsbFN0ZXBJbmRleF1dIiByZW5kZXItaGllcmFyY2h5PSJ7e19yZW5kZXJIaWVyYXJjaHl9fSIgc2VsZWN0ZWQtbm9kZT0ie3tfc2VsZWN0ZWROb2RlfX0iIHN0YXRzPSJbW19zdGF0c11dIiB0cmFjZS1pbnB1dHM9IltbX3RyYWNlSW5wdXRzXV0iPjwvdGYtZ3JhcGgtYm9hcmQ+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvdGYtZGFzaGJvYXJkLWxheW91dD4KICAgIDwvdGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IC9kZWVwLyB7CiAgICAgICAgZm9udC1mYW1pbHk6ICdSb2JvdG8nLCBzYW5zLXNlcmlmOwogICAgICB9CgogICAgICAuc2lkZWJhciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIH0KCiAgICAgIC5jZW50ZXIgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIH0KCiAgICAgIHBhcGVyLWRpYWxvZyB7CiAgICAgICAgcGFkZGluZzogMjBweDsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+Cgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdGYtZ3JhcGgtZGFzaGJvYXJkL3RmLWdyYXBoLWRhc2hib2FyZC5odG1sLmpzClBvbHltZXIoe2lzOiJ0Zi1ncmFwaC1kYXNoYm9hcmQiLHByb3BlcnRpZXM6e19kYXRhc2V0czp7dHlwZTpBcnJheSx2YWx1ZTooKT0+W119LF9kYXRhc2V0c0ZldGNoZWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sX3NlbGVjdGVkRGF0YXNldDp7dHlwZTpOdW1iZXIsdmFsdWU6MH0sX3JlbmRlckhpZXJhcmNoeTp7dHlwZTpPYmplY3Qsb2JzZXJ2ZXI6Il9yZW5kZXJIaWVyYXJjaHlDaGFuZ2VkIn0sX3JlcXVlc3RNYW5hZ2VyOnt0eXBlOk9iamVjdCx2YWx1ZTooKT0+bmV3IFBrLlJlcXVlc3RNYW5hZ2VyfSxfY2FuY2VsbGVyOnt0eXBlOk9iamVjdCx2YWx1ZTooKT0+bmV3IFBrLkNhbmNlbGxlcn0sX2RlYnVnZ2VyRGF0YUVuYWJsZWQ6Qm9vbGVhbixhbGxTdGVwc01vZGVFbmFibGVkOkJvb2xlYW4sc3BlY2lmaWNIZWFsdGhQaWxsU3RlcDp7dHlwZTpOdW1iZXIsdmFsdWU6MH0saGVhbHRoUGlsbHNUb2dnbGVkT246e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxvYnNlcnZlcjoiX2hlYWx0aFBpbGxzVG9nZ2xlZE9uQ2hhbmdlZCJ9LApzZWxlY3RlZE5vZGU6e3R5cGU6U3RyaW5nLG5vdGlmeTohMH0sX2lzQXR0YWNoZWQ6Qm9vbGVhbixfaW5pdGlhbGl6ZWQ6Qm9vbGVhbixfYXJlSGVhbHRoUGlsbHNMb2FkaW5nOkJvb2xlYW4sX2RlYnVnZ2VyTnVtZXJpY0FsZXJ0czp7dHlwZTpBcnJheSx2YWx1ZTpbXSxub3RpZnk6ITB9LF9ub2RlTmFtZXNUb0hlYWx0aFBpbGxzOnt0eXBlOk9iamVjdCx2YWx1ZTp7fX0sX2hlYWx0aFBpbGxTdGVwSW5kZXg6TnVtYmVyLF9oZWFsdGhQaWxsUmVxdWVzdElkOnt0eXBlOk51bWJlcix2YWx1ZToxfSxfaGVhbHRoUGlsbFN0ZXBSZXF1ZXN0VGltZXJJZDpOdW1iZXIsX2hlYWx0aFBpbGxTdGVwUmVxdWVzdFRpbWVyRGVsYXk6e3R5cGU6TnVtYmVyLHZhbHVlOjUwMCxyZWFkT25seTohMH0scnVuczpBcnJheSxydW46e3R5cGU6U3RyaW5nLG5vdGlmeTohMCx2YWx1ZTpWbC5nZXRTdHJpbmdJbml0aWFsaXplcigicnVuIix7ZGVmYXVsdFZhbHVlOiIiLHVzZUxvY2FsU3RvcmFnZTohMX0pLG9ic2VydmVyOiJfcnVuT2JzZXJ2ZXIifSwKX3NlbGVjdGlvbjp7dHlwZTpPYmplY3R9LF9jb21wYXRpYmlsaXR5UHJvdmlkZXI6T2JqZWN0LF90cmFjZUlucHV0czpCb29sZWFufSxsaXN0ZW5lcnM6eyJub2RlLXRvZ2dsZS1leHBhbmQiOiJfaGFuZGxlTm9kZVRvZ2dsZUV4cGFuZCJ9LG9ic2VydmVyczpbIl9tYXliZUZldGNoSGVhbHRoUGlsbHMoX2RlYnVnZ2VyRGF0YUVuYWJsZWQsIGFsbFN0ZXBzTW9kZUVuYWJsZWQsIHNwZWNpZmljSGVhbHRoUGlsbFN0ZXAsIF9zZWxlY3RlZE5vZGUpIiwiX21heWJlSW5pdGlhbGl6ZURhc2hib2FyZChfaXNBdHRhY2hlZCkiLCJfZGV0ZXJtaW5lU2VsZWN0ZWREYXRhc2V0KF9kYXRhc2V0c0ZldGNoZWQsIF9kYXRhc2V0cywgcnVuKSIsIl91cGRhdGVTZWxlY3RlZERhdGFzZXROYW1lKF9kYXRhc2V0c0ZldGNoZWQsIF9kYXRhc2V0cywgX3NlbGVjdGVkRGF0YXNldCkiXSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuc2V0KCJfaXNBdHRhY2hlZCIsITApfSxkZXRhY2hlZDpmdW5jdGlvbigpe3RoaXMuc2V0KCJfaXNBdHRhY2hlZCIsCiExKX0scmVsb2FkOmZ1bmN0aW9uKCl7dGhpcy5fZGVidWdnZXJEYXRhRW5hYmxlZHx8dGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdChQay5nZXRSb3V0ZXIoKS5wbHVnaW5zTGlzdGluZygpKS50aGVuKHRoaXMuX2NhbmNlbGxlci5jYW5jZWxsYWJsZShhPT57YS5jYW5jZWxsZWR8fGEudmFsdWVbImRlYnVnZ2VyIl0mJnRoaXMuc2V0KCJfZGVidWdnZXJEYXRhRW5hYmxlZCIsITApfSkpO3RoaXMuX21heWJlRmV0Y2hIZWFsdGhQaWxscygpfSxfZml0OmZ1bmN0aW9uKCl7dGhpcy4kJCgiI2dyYXBoYm9hcmQiKS5maXQoKX0sX3J1bk9ic2VydmVyOlZsLmdldFN0cmluZ09ic2VydmVyKCJydW4iLHtkZWZhdWx0VmFsdWU6IiIscG9seW1lclByb3BlcnR5OiJydW4iLHVzZUxvY2FsU3RvcmFnZTohMX0pLF9mZXRjaERhdGFzZXQoKXtyZXR1cm4gdGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdChQay5nZXRSb3V0ZXIoKS5wbHVnaW5Sb3V0ZSgiZ3JhcGhzIiwiL2luZm8iKSl9LF9mZXRjaEhlYWx0aFBpbGxzKGEsCmMpe2E9e25vZGVfbmFtZXM6SlNPTi5zdHJpbmdpZnkoYSkscnVuOiJfX2RlYnVnZ2VyX2RhdGFfXyJ9O3ZvaWQgMCE9PWMmJihhLnN0ZXA9Yyk7Yz1Qay5nZXRSb3V0ZXIoKS5wbHVnaW5Sb3V0ZSgiZGVidWdnZXIiLCIvaGVhbHRoX3BpbGxzIik7cmV0dXJuIHRoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3QoYyxhKX0sX2ZldGNoRGVidWdnZXJOdW1lcmljc0FsZXJ0cygpe3JldHVybiB0aGlzLl9yZXF1ZXN0TWFuYWdlci5yZXF1ZXN0KFBrLmdldFJvdXRlcigpLnBsdWdpblJvdXRlKCJkZWJ1Z2dlciIsIi9udW1lcmljc19hbGVydF9yZXBvcnQiKSl9LF9ncmFwaFVybChhLGMsZCl7cmV0dXJuIFBrLmdldFJvdXRlcigpLnBsdWdpblJvdXRlKCJncmFwaHMiLCIvZ3JhcGgiLG5ldyBVUkxTZWFyY2hQYXJhbXMoe3J1bjphLGxpbWl0X2F0dHJfc2l6ZTpjLGxhcmdlX2F0dHJzX2tleTpkfSkpfSxfc2hvdWxkUmVxdWVzdEhlYWx0aFBpbGxzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RlYnVnZ2VyRGF0YUVuYWJsZWQmJgp0aGlzLmhlYWx0aFBpbGxzVG9nZ2xlZE9uJiZ0aGlzLl9yZW5kZXJIaWVyYXJjaHkmJnRoaXMuX2RhdGFzZXRzU3RhdGUodGhpcy5fZGF0YXNldHNGZXRjaGVkLHRoaXMuX2RhdGFzZXRzLCJQUkVTRU5UIil9LF9tYXliZUluaXRpYWxpemVEYXNoYm9hcmQ6ZnVuY3Rpb24oYSl7IXRoaXMuX2luaXRpYWxpemVkJiZhJiYodGhpcy5zZXQoIl9jb21wYXRpYmlsaXR5UHJvdmlkZXIiLG5ldyB0Zi5ncmFwaC5vcC5UcHVDb21wYXRpYmlsaXR5UHJvdmlkZXIpLHRoaXMuX2luaXRpYWxpemVkPSEwLHRoaXMuX2ZldGNoRGF0YXNldCgpLnRoZW4oYz0+e3RoaXMuX2RhdGFzZXRzPU9iamVjdC5rZXlzKGMpLnNvcnQoT2suY29tcGFyZVRhZ05hbWVzKS5tYXAoZD0+e2NvbnN0IGY9Y1tkXTt2YXIgZz1PYmplY3Qua2V5cyhmLnRhZ3MpLnNvcnQoT2suY29tcGFyZVRhZ05hbWVzKS5tYXAobD0+Zi50YWdzW2xdKS5tYXAoKHt0YWc6bCxjb25jZXB0dWFsX2dyYXBoOmssb3BfZ3JhcGg6bSxwcm9maWxlOnB9KT0+Cih7dGFnOmwsZGlzcGxheU5hbWU6bCxjb25jZXB0dWFsR3JhcGg6ayxvcEdyYXBoOm0scHJvZmlsZTpwfSkpO2c9Zi5ydW5fZ3JhcGg/W3t0YWc6bnVsbCxkaXNwbGF5TmFtZToiRGVmYXVsdCIsY29uY2VwdHVhbEdyYXBoOiExLG9wR3JhcGg6ITAscHJvZmlsZTohMX0sLi4uZ106ZztyZXR1cm57bmFtZTpkLHRhZ3M6Z319KTt0aGlzLl9kYXRhc2V0c0ZldGNoZWQ9ITB9KSl9LF9kZXRlcm1pbmVTZWxlY3RlZERhdGFzZXQoYSxjLGQpe2Q/KGM9Yy5maW5kSW5kZXgoZj0+Zi5uYW1lPT09ZCksLTE9PT1jP2EmJihhPXRoaXMuJCQoIiNlcnJvci1kaWFsb2ciKSxhLnRleHRDb250ZW50PWBObyBkYXRhc2V0IG5hbWVkICIke2R9IiBjb3VsZCBiZSBmb3VuZC5gLGEub3BlbigpKTp0aGlzLnNldCgiX3NlbGVjdGVkRGF0YXNldCIsYykpOnRoaXMuc2V0KCJfc2VsZWN0ZWREYXRhc2V0IiwwKX0sX3VwZGF0ZVNlbGVjdGVkRGF0YXNldE5hbWUoYSxjLGQpe2EmJihjLmxlbmd0aDw9ZHx8dGhpcy5zZXQoInJ1biIsCmNbZF0ubmFtZSkpfSxfcmVxdWVzdEhlYWx0aFBpbGxzOmZ1bmN0aW9uKCl7dGhpcy5zZXQoIl9hcmVIZWFsdGhQaWxsc0xvYWRpbmciLCEwKTt2YXIgYT0rK3RoaXMuX2hlYWx0aFBpbGxSZXF1ZXN0SWQ7bnVsbCE9PXRoaXMuX2hlYWx0aFBpbGxTdGVwUmVxdWVzdFRpbWVySWQmJih3aW5kb3cuY2xlYXJUaW1lb3V0KHRoaXMuX2hlYWx0aFBpbGxTdGVwUmVxdWVzdFRpbWVySWQpLHRoaXMuX2hlYWx0aFBpbGxTdGVwUmVxdWVzdFRpbWVySWQ9bnVsbCk7dGhpcy5hbGxTdGVwc01vZGVFbmFibGVkP3RoaXMuX2hlYWx0aFBpbGxTdGVwUmVxdWVzdFRpbWVySWQ9c2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMuX2hlYWx0aFBpbGxTdGVwUmVxdWVzdFRpbWVySWQ9bnVsbDt0aGlzLl9pbml0aWF0ZU5ldHdvcmtSZXF1ZXN0Rm9ySGVhbHRoUGlsbHMoYSl9LmJpbmQodGhpcyksdGhpcy5faGVhbHRoUGlsbFN0ZXBSZXF1ZXN0VGltZXJEZWxheSk6dGhpcy5faW5pdGlhdGVOZXR3b3JrUmVxdWVzdEZvckhlYWx0aFBpbGxzKGEpfSwKX2luaXRpYXRlTmV0d29ya1JlcXVlc3RGb3JIZWFsdGhQaWxsczpmdW5jdGlvbihhKXtpZih0aGlzLl9oZWFsdGhQaWxsUmVxdWVzdElkPT09YSl7dmFyIGM9dGhpcy5fZmV0Y2hIZWFsdGhQaWxscyh0aGlzLl9yZW5kZXJIaWVyYXJjaHkuZ2V0TmFtZXNPZlJlbmRlcmVkT3BzKCksdGhpcy5hbGxTdGVwc01vZGVFbmFibGVkP3RoaXMuc3BlY2lmaWNIZWFsdGhQaWxsU3RlcDp2b2lkIDApLGQ9dGhpcy5fZmV0Y2hEZWJ1Z2dlck51bWVyaWNzQWxlcnRzKCk7UHJvbWlzZS5hbGwoW2MsZF0pLnRoZW4oZnVuY3Rpb24oZil7dmFyIGc9ZlswXTtmPWZbMV07aWYodGhpcy5oZWFsdGhQaWxsc1RvZ2dsZWRPbiYmYT09PXRoaXMuX2hlYWx0aFBpbGxSZXF1ZXN0SWQpe2Zvcih2YXIgbCBpbiBnKXt0aGlzLnNldCgiX2hlYWx0aFBpbGxTdGVwSW5kZXgiLGdbbF0ubGVuZ3RoLTEpO2JyZWFrfXRoaXMuc2V0KCJfZGVidWdnZXJOdW1lcmljQWxlcnRzIixmKTt0aGlzLnNldCgiX25vZGVOYW1lc1RvSGVhbHRoUGlsbHMiLApnKTt0aGlzLnNldCgiX2FyZUhlYWx0aFBpbGxzTG9hZGluZyIsITEpO3RoaXMuc2V0KCJfaGVhbHRoUGlsbFN0ZXBSZXF1ZXN0VGltZXJJZCIsbnVsbCl9fS5iaW5kKHRoaXMpKX19LF9kYXRhc2V0c1N0YXRlOmZ1bmN0aW9uKGEsYyxkKXtyZXR1cm4gYT9jJiZjLmxlbmd0aD8iUFJFU0VOVCI9PT1kOiJFTVBUWSI9PT1kOiJOT1RfTE9BREVEIj09PWR9LF9yZW5kZXJIaWVyYXJjaHlDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5yZWxvYWQoKX0sX2hhbmRsZU5vZGVUb2dnbGVFeHBhbmQ6ZnVuY3Rpb24oKXt0aGlzLl9tYXliZUZldGNoSGVhbHRoUGlsbHMoKX0sX2hlYWx0aFBpbGxzVG9nZ2xlZE9uQ2hhbmdlZDpmdW5jdGlvbihhKXthP3RoaXMucmVsb2FkKCk6dGhpcy5zZXQoIl9ub2RlTmFtZXNUb0hlYWx0aFBpbGxzIix7fSl9LF9tYXliZUZldGNoSGVhbHRoUGlsbHM6ZnVuY3Rpb24oKXt0aGlzLl9zaG91bGRSZXF1ZXN0SGVhbHRoUGlsbHMoKSYmdGhpcy5fcmVxdWVzdEhlYWx0aFBpbGxzKCl9fSk7Cjwvc2NyaXB0PgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKPGRvbS1tb2R1bGUgaWQ9InZ6LWRpc3RyaWJ1dGlvbi1jaGFydCI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlIGluY2x1ZGU9InBsb3R0YWJsZS1zdHlsZSI+PC9zdHlsZT4KICAgIDxkaXYgaWQ9ImNoYXJ0ZGl2Ij48L2Rpdj4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICAgIGZsZXgtc2hyaW5rOiAxOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfQogICAgICAjY2hhcnRkaXYgewogICAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgZmxleC1zaHJpbms6IDE7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KICA8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdnotZGlzdHJpYnV0aW9uLWNoYXJ0L3Z6LWRpc3RyaWJ1dGlvbi1jaGFydC5qcwp2YXIgb207CihmdW5jdGlvbihhKXtjbGFzcyBje2NvbnN0cnVjdG9yKGQsZil7dGhpcy5ydW4yZGF0YXNldHM9e307dGhpcy5jb2xvclNjYWxlPWY7dGhpcy5idWlsZENoYXJ0KGQpfWdldERhdGFzZXQoZCl7dm9pZCAwPT09dGhpcy5ydW4yZGF0YXNldHNbZF0mJih0aGlzLnJ1bjJkYXRhc2V0c1tkXT1uZXcgUGxvdHRhYmxlLkRhdGFzZXQoW10se3J1bjpkfSkpO3JldHVybiB0aGlzLnJ1bjJkYXRhc2V0c1tkXX1idWlsZENoYXJ0KGQpe3RoaXMub3V0ZXImJnRoaXMub3V0ZXIuZGVzdHJveSgpO2Q9Ym0uZ2V0WENvbXBvbmVudHMoZCk7dGhpcy54QWNjZXNzb3I9ZC5hY2Nlc3Nvcjt0aGlzLnhTY2FsZT1kLnNjYWxlO3RoaXMueEF4aXM9ZC5heGlzO3RoaXMueEF4aXMubWFyZ2luKDApLnRpY2tMYWJlbFBhZGRpbmcoMyk7dGhpcy55U2NhbGU9bmV3IFBsb3R0YWJsZS5TY2FsZXMuTGluZWFyO3RoaXMueUF4aXM9bmV3IFBsb3R0YWJsZS5BeGVzLk51bWVyaWModGhpcy55U2NhbGUsImxlZnQiKTtkPQpibS5tdWx0aXNjYWxlRm9ybWF0dGVyKGJtLllfQVhJU19GT1JNQVRURVJfUFJFQ0lTSU9OKTt0aGlzLnlBeGlzLm1hcmdpbigwKS50aWNrTGFiZWxQYWRkaW5nKDUpLmZvcm1hdHRlcihkKTt0aGlzLnlBeGlzLnVzZXNUZXh0V2lkdGhBcHByb3hpbWF0aW9uKCk7ZD10aGlzLmJ1aWxkUGxvdCh0aGlzLnhBY2Nlc3Nvcix0aGlzLnhTY2FsZSx0aGlzLnlTY2FsZSk7dGhpcy5ncmlkbGluZXM9bmV3IFBsb3R0YWJsZS5Db21wb25lbnRzLkdyaWRsaW5lcyh0aGlzLnhTY2FsZSx0aGlzLnlTY2FsZSk7dGhpcy5jZW50ZXI9bmV3IFBsb3R0YWJsZS5Db21wb25lbnRzLkdyb3VwKFt0aGlzLmdyaWRsaW5lcyxkXSk7dGhpcy5vdXRlcj1uZXcgUGxvdHRhYmxlLkNvbXBvbmVudHMuVGFibGUoW1t0aGlzLnlBeGlzLHRoaXMuY2VudGVyXSxbbnVsbCx0aGlzLnhBeGlzXV0pfWJ1aWxkUGxvdChkLGYsZyl7bGV0IGw9WzAsMjI4LDE1ODcsMzA4NSw1RTMsNjkxNSw4NDEzLDk3NzIsMUU0XSxrPV8ucmFuZ2UobC5sZW5ndGgtCjEpLm1hcCh0PT4obFt0KzFdLWxbdF0pLzI1MDApLG09bC5tYXAoKHQsdik9PkE9PkFbdl1bMV0pLHA9bVs0XSxxPV8ucmFuZ2UobS5sZW5ndGgtMSkubWFwKHQ9PntsZXQgdj1uZXcgUGxvdHRhYmxlLlBsb3RzLkFyZWE7di54KGQsZik7bGV0IEE9NDx0P21bdF06bVt0KzFdO3YueSg0PHQ/bVt0KzFdOm1bdF0sZyk7di55MChBKTt2LmF0dHIoImZpbGwiLCh5LHgsQyk9PnRoaXMuY29sb3JTY2FsZS5zY2FsZShDLm1ldGFkYXRhKCkucnVuKSk7di5hdHRyKCJzdHJva2UiLCh5LHgsQyk9PnRoaXMuY29sb3JTY2FsZS5zY2FsZShDLm1ldGFkYXRhKCkucnVuKSk7di5hdHRyKCJzdHJva2Utd2VpZ2h0IiwoKT0+IjAuNXB4Iik7di5hdHRyKCJzdHJva2Utb3BhY2l0eSIsKCk9PmtbdF0pO3YuYXR0cigiZmlsbC1vcGFjaXR5IiwoKT0+a1t0XSk7cmV0dXJuIHZ9KSxyPW5ldyBQbG90dGFibGUuUGxvdHMuTGluZTtyLngoZCxmKTtyLnkocCxnKTtyLmF0dHIoInN0cm9rZSIsKHQsdixBKT0+dGhpcy5jb2xvclNjYWxlLnNjYWxlKEEucnVuKSk7CnRoaXMucGxvdHM9cTtyZXR1cm4gbmV3IFBsb3R0YWJsZS5Db21wb25lbnRzLkdyb3VwKHEpfXNldFZpc2libGVTZXJpZXMoZCl7dGhpcy5ydW5zPWQ7bGV0IGY9ZC5tYXAoZz0+dGhpcy5nZXREYXRhc2V0KGcpKTt0aGlzLnBsb3RzLmZvckVhY2goZz0+Zy5kYXRhc2V0cyhmKSl9c2V0U2VyaWVzRGF0YShkLGYpe3RoaXMuZ2V0RGF0YXNldChkKS5kYXRhKGYpfXJlbmRlclRvKGQpe3RoaXMudGFyZ2V0U1ZHPWQ7dGhpcy5vdXRlci5yZW5kZXJUbyhkKX1yZWRyYXcoKXt0aGlzLm91dGVyLnJlZHJhdygpfWRlc3Ryb3koKXt0aGlzLm91dGVyLmRlc3Ryb3koKX19YS5EaXN0cmlidXRpb25DaGFydD1jO1BvbHltZXIoe2lzOiJ2ei1kaXN0cmlidXRpb24tY2hhcnQiLHByb3BlcnRpZXM6e2NvbG9yU2NhbGU6e3R5cGU6T2JqZWN0LHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuKG5ldyBQbG90dGFibGUuU2NhbGVzLkNvbG9yKS5yYW5nZShkMy5zY2hlbWVDYXRlZ29yeTEwKX19LHhUeXBlOnt0eXBlOlN0cmluZywKdmFsdWU6InN0ZXAifSxfYXR0YWNoZWQ6Qm9vbGVhbixfY2hhcnQ6T2JqZWN0LF92aXNpYmxlU2VyaWVzQ2FjaGU6e3R5cGU6QXJyYXksdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm5bXX19LF9zZXJpZXNEYXRhQ2FjaGU6e3R5cGU6T2JqZWN0LHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJue319fSxfbWFrZUNoYXJ0QXN5bmNDYWxsYmFja0lkOnt0eXBlOk51bWJlcix2YWx1ZTpudWxsfX0sb2JzZXJ2ZXJzOlsiX21ha2VDaGFydCh4VHlwZSwgY29sb3JTY2FsZSwgX2F0dGFjaGVkKSIsIl9yZWxvYWRGcm9tQ2FjaGUoX2NoYXJ0KSJdLHNldFZpc2libGVTZXJpZXM6ZnVuY3Rpb24oZCl7dGhpcy5fdmlzaWJsZVNlcmllc0NhY2hlPWQ7dGhpcy5fY2hhcnQmJih0aGlzLl9jaGFydC5zZXRWaXNpYmxlU2VyaWVzKGQpLHRoaXMucmVkcmF3KCkpfSxzZXRTZXJpZXNEYXRhOmZ1bmN0aW9uKGQsZil7dGhpcy5fc2VyaWVzRGF0YUNhY2hlW2RdPWY7dGhpcy5fY2hhcnQmJnRoaXMuX2NoYXJ0LnNldFNlcmllc0RhdGEoZCwKZil9LHJlZHJhdzpmdW5jdGlvbigpe3RoaXMuX2NoYXJ0LnJlZHJhdygpfSxyZWFkeTpmdW5jdGlvbigpe3RoaXMuc2NvcGVTdWJ0cmVlKHRoaXMuJC5jaGFydGRpdiwhMCl9LF9tYWtlQ2hhcnQ6ZnVuY3Rpb24oZCxmLGcpe251bGw9PT10aGlzLl9tYWtlQ2hhcnRBc3luY0NhbGxiYWNrSWQmJnRoaXMuY2FuY2VsQXN5bmModGhpcy5fbWFrZUNoYXJ0QXN5bmNDYWxsYmFja0lkKTt0aGlzLl9tYWtlQ2hhcnRBc3luY0NhbGxiYWNrSWQ9dGhpcy5hc3luYyhmdW5jdGlvbigpe3RoaXMuX21ha2VDaGFydEFzeW5jQ2FsbGJhY2tJZD1udWxsO2lmKGcpe3RoaXMuX2NoYXJ0JiZ0aGlzLl9jaGFydC5kZXN0cm95KCk7dmFyIGw9bmV3IGMoZCxmKSxrPWQzLnNlbGVjdCh0aGlzLiQuY2hhcnRkaXYpO2wucmVuZGVyVG8oayk7dGhpcy5fY2hhcnQ9bH19LDM1MCl9LF9yZWxvYWRGcm9tQ2FjaGU6ZnVuY3Rpb24oKXt0aGlzLl9jaGFydCYmKHRoaXMuX2NoYXJ0LnNldFZpc2libGVTZXJpZXModGhpcy5fdmlzaWJsZVNlcmllc0NhY2hlKSwKdGhpcy5fdmlzaWJsZVNlcmllc0NhY2hlLmZvckVhY2goZnVuY3Rpb24oZCl7dGhpcy5fY2hhcnQuc2V0U2VyaWVzRGF0YShkLHRoaXMuX3Nlcmllc0RhdGFDYWNoZVtkXXx8W10pfS5iaW5kKHRoaXMpKSl9LGF0dGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fYXR0YWNoZWQ9ITB9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fYXR0YWNoZWQ9ITF9fSl9KShvbXx8KG9tPXt9KSk7Cjwvc2NyaXB0Pgo8L2RvbS1tb2R1bGU+CgoKCjxkb20tbW9kdWxlIGlkPSJ0Zi1kaXN0cmlidXRpb24tbG9hZGVyIj4KICA8dGVtcGxhdGU+CiAgICA8dGYtY2FyZC1oZWFkaW5nIHRhZz0iW1t0YWddXSIgcnVuPSJbW3J1bl1dIiBkaXNwbGF5LW5hbWU9IltbdGFnTWV0YWRhdGEuZGlzcGxheU5hbWVdXSIgZGVzY3JpcHRpb249IltbdGFnTWV0YWRhdGEuZGVzY3JpcHRpb25dXSIgY29sb3I9IltbX3J1bkNvbG9yXV0iPjwvdGYtY2FyZC1oZWFkaW5nPgogICAgCiAgICA8dnotZGlzdHJpYnV0aW9uLWNoYXJ0IGlkPSJjaGFydCIgeC10eXBlPSJbW3hUeXBlXV0iIGNvbG9yLXNjYWxlPSJbW19jb2xvclNjYWxlXV0iPjwvdnotZGlzdHJpYnV0aW9uLWNoYXJ0PgogICAgPGRpdiBzdHlsZT0iZGlzcGxheTogZmxleDsgZmxleC1kaXJlY3Rpb246IHJvdzsiPgogICAgICA8cGFwZXItaWNvbi1idXR0b24gc2VsZWN0ZWQkPSJbW19leHBhbmRlZF1dIiBpY29uPSJmdWxsc2NyZWVuIiBvbi10YXA9Il90b2dnbGVFeHBhbmRlZCI+PC9wYXBlci1pY29uLWJ1dHRvbj4KICAgIDwvZGl2PgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIHdpZHRoOiAzMzBweDsKICAgICAgICBoZWlnaHQ6IDIzNXB4OwogICAgICAgIG1hcmdpbi1yaWdodDogMTBweDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxNXB4OwogICAgICB9CiAgICAgIDpob3N0KFtfZXhwYW5kZWRdKSB7CiAgICAgICAgd2lkdGg6IDcwMHB4OwogICAgICAgIGhlaWdodDogNTAwcHg7CiAgICAgIH0KCiAgICAgIHZ6LWhpc3RvZ3JhbS10aW1lc2VyaWVzIHsKICAgICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIH0KCiAgICAgIHBhcGVyLWljb24tYnV0dG9uIHsKICAgICAgICBjb2xvcjogIzIxOTZmMzsKICAgICAgICBib3JkZXItcmFkaXVzOiAxMDAlOwogICAgICAgIHdpZHRoOiAzMnB4OwogICAgICAgIGhlaWdodDogMzJweDsKICAgICAgICBwYWRkaW5nOiA0cHg7CiAgICAgIH0KICAgICAgcGFwZXItaWNvbi1idXR0b25bc2VsZWN0ZWRdIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS10Yi11aS1saWdodC1hY2NlbnQpOwogICAgICB9CgogICAgICB0Zi1jYXJkLWhlYWRpbmcgewogICAgICAgIG1hcmdpbi1ib3R0b206IDEwcHg7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KICA8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdGYtZGlzdHJpYnV0aW9uLWRhc2hib2FyZC90Zi1kaXN0cmlidXRpb24tbG9hZGVyLmh0bWwuanMKUG9seW1lcih7aXM6InRmLWRpc3RyaWJ1dGlvbi1sb2FkZXIiLHByb3BlcnRpZXM6e3J1bjpTdHJpbmcsdGFnOlN0cmluZyx0YWdNZXRhZGF0YTpPYmplY3QseFR5cGU6U3RyaW5nLGRhdGFUb0xvYWQ6e3R5cGU6QXJyYXksY29tcHV0ZWQ6Il9jb21wdXRlRGF0YVRvTG9hZChydW4sIHRhZykifSxnZXREYXRhTG9hZE5hbWU6e3R5cGU6RnVuY3Rpb24sdmFsdWU6KCk9Pih7cnVuOmF9KT0+YX0sZ2V0RGF0YUxvYWRVcmw6e3R5cGU6RnVuY3Rpb24sdmFsdWU6KCk9Pih7dGFnOmEscnVuOmN9KT0+UGsuYWRkUGFyYW1zKFBrLmdldFJvdXRlcigpLnBsdWdpblJvdXRlKCJkaXN0cmlidXRpb25zIiwiL2Rpc3RyaWJ1dGlvbnMiKSx7dGFnOmEscnVuOmN9KX0sbG9hZERhdGFDYWxsYmFjazp7dHlwZTpGdW5jdGlvbix2YWx1ZTpmdW5jdGlvbigpe3JldHVybihhLGMsZCk9PnthPWQubWFwKGY9Pntjb25zdCBbZyxsLGtdPWY7ay53YWxsX3RpbWU9bmV3IERhdGUoMUUzKmcpO2suc3RlcD1sO3JldHVybiBrfSk7CmM9dGhpcy5nZXREYXRhTG9hZE5hbWUoYyk7dGhpcy4kLmNoYXJ0LnNldFNlcmllc0RhdGEoYyxhKTt0aGlzLiQuY2hhcnQuc2V0VmlzaWJsZVNlcmllcyhbY10pfX19LF9jb2xvclNjYWxlOnt0eXBlOk9iamVjdCx2YWx1ZTooKT0+KHtzY2FsZTpabC5ydW5zQ29sb3JTY2FsZX0pLHJlYWRPbmx5OiEwfSxfcnVuQ29sb3I6e3R5cGU6U3RyaW5nLGNvbXB1dGVkOiJfY29tcHV0ZVJ1bkNvbG9yKHJ1bikifSxfZXhwYW5kZWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9LHJlcXVlc3RNYW5hZ2VyOk9iamVjdCxfY2FuY2VsbGVyOnt0eXBlOk9iamVjdCx2YWx1ZTooKT0+bmV3IFBrLkNhbmNlbGxlcn19LG9ic2VydmVyczpbInJlbG9hZChydW4sIHRhZykiXSxiZWhhdmlvcnM6W1dsLkRhdGFMb2FkZXJCZWhhdmlvcl0sX2NvbXB1dGVEYXRhVG9Mb2FkKGEsYyl7cmV0dXJuW3tydW46YSx0YWc6Y31dfSxfY29tcHV0ZVJ1bkNvbG9yKGEpe3JldHVybiB0aGlzLl9jb2xvclNjYWxlLnNjYWxlKGEpfSwKcmVkcmF3KCl7dGhpcy4kLmNoYXJ0LnJlZHJhdygpfSxfdG9nZ2xlRXhwYW5kZWQoKXt0aGlzLnNldCgiX2V4cGFuZGVkIiwhdGhpcy5fZXhwYW5kZWQpO3RoaXMucmVkcmF3KCl9fSk7Cjwvc2NyaXB0Pgo8L2RvbS1tb2R1bGU+CgoKCjxkb20tbW9kdWxlIGlkPSJ0Zi1kaXN0cmlidXRpb24tZGFzaGJvYXJkIj4KICA8dGVtcGxhdGU+CiAgICA8dGYtZGFzaGJvYXJkLWxheW91dD4KICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhciIgc2xvdD0ic2lkZWJhciI+CiAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIj4KICAgICAgICAgIDx0Zi1vcHRpb24tc2VsZWN0b3IgaWQ9InhUeXBlU2VsZWN0b3IiIG5hbWU9Ikhvcml6b250YWwgYXhpcyIgc2VsZWN0ZWQtaWQ9Int7X3hUeXBlfX0iPgogICAgICAgICAgICA8cGFwZXItYnV0dG9uIGlkPSJzdGVwIj5zdGVwPC9wYXBlci1idXR0b24+CiAgICAgICAgICAgIDxwYXBlci1idXR0b24gaWQ9InJlbGF0aXZlIj5yZWxhdGl2ZTwvcGFwZXItYnV0dG9uPgogICAgICAgICAgICA8cGFwZXItYnV0dG9uIGlkPSJ3YWxsX3RpbWUiPndhbGw8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgIDwvdGYtb3B0aW9uLXNlbGVjdG9yPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiI+CiAgICAgICAgICA8dGYtcnVucy1zZWxlY3RvciBzZWxlY3RlZC1ydW5zPSJ7e19zZWxlY3RlZFJ1bnN9fSI+CiAgICAgICAgICA8L3RmLXJ1bnMtc2VsZWN0b3I+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgoKICAgICAgPGRpdiBjbGFzcz0iY2VudGVyIiBzbG90PSJjZW50ZXIiPgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfZGF0YU5vdEZvdW5kXV0iPgogICAgICAgICAgPGRpdiBjbGFzcz0ibm8tZGF0YS13YXJuaW5nIj4KICAgICAgICAgICAgPGgzPk5vIGRpc3RyaWJ1dGlvbiBkYXRhIHdhcyBmb3VuZC48L2gzPgogICAgICAgICAgICA8cD5Qcm9iYWJsZSBjYXVzZXM6CiAgICAgICAgICAgIDx1bD4KICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICBZb3UgaGF2ZW7igJl0IHdyaXR0ZW4gYW55IGhpc3RvZ3JhbSBkYXRhIHRvIHlvdXIgZXZlbnQgZmlsZXMuCiAgICAgICAgICAgICAgICAoSGlzdG9ncmFtcyBhbmQgZGlzdHJpYnV0aW9ucyBib3RoIHVzZSB0aGUgaGlzdG9ncmFtIHN1bW1hcnkKICAgICAgICAgICAgICAgIG9wZXJhdGlvbi4pCiAgICAgICAgICAgICAgPC9saT4KCiAgICAgICAgICAgICAgPGxpPlRlbnNvckJvYXJkIGNhbuKAmXQgZmluZCB5b3VyIGV2ZW50IGZpbGVzLjwvbGk+CiAgICAgICAgICAgIDwvdWw+CgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICBJZiB5b3XigJlyZSBuZXcgdG8gdXNpbmcgVGVuc29yQm9hcmQsIGFuZCB3YW50IHRvIGZpbmQgb3V0IGhvdyB0bwogICAgICAgICAgICAgIGFkZCBkYXRhIGFuZCBzZXQgdXAgeW91ciBldmVudCBmaWxlcywgY2hlY2sgb3V0IHRoZQogICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCI+UkVBRE1FPC9hPgogICAgICAgICAgICAgIGFuZCBwZXJoYXBzIHRoZQogICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL2dldF9zdGFydGVkL3N1bW1hcmllc19hbmRfdGVuc29yYm9hcmQiPlRlbnNvckJvYXJkIHR1dG9yaWFsPC9hPi4KICAgICAgICAgICAgCgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICBJZiB5b3UgdGhpbmsgVGVuc29yQm9hcmQgaXMgY29uZmlndXJlZCBwcm9wZXJseSwgcGxlYXNlIHNlZQogICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCNteS10ZW5zb3Jib2FyZC1pc250LXNob3dpbmctYW55LWRhdGEtd2hhdHMtd3JvbmciPnRoZSBzZWN0aW9uIG9mIHRoZSBSRUFETUUgZGV2b3RlZCB0byBtaXNzaW5nIGRhdGEgcHJvYmxlbXM8L2E+CiAgICAgICAgICAgICAgYW5kIGNvbnNpZGVyIGZpbGluZyBhbiBpc3N1ZSBvbiBHaXRIdWIuCiAgICAgICAgICAgIAogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIV9kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8dGYtdGFnLWZpbHRlcmVyIHRhZy1maWx0ZXI9Int7X3RhZ0ZpbHRlcn19Ij48L3RmLXRhZy1maWx0ZXJlcj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX2NhdGVnb3JpZXNdXSIgYXM9ImNhdGVnb3J5Ij4KICAgICAgICAgICAgPHRmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3IGNhdGVnb3J5PSJbW2NhdGVnb3J5XV0iIGluaXRpYWwtb3BlbmVkPSJbW19zaG91bGRPcGVuKGluZGV4KV1dIj4KICAgICAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8dGYtZGlzdHJpYnV0aW9uLWxvYWRlciBhY3RpdmU9IltbYWN0aXZlXV0iIHJ1bj0iW1tpdGVtLnJ1bl1dIiB0YWc9IltbaXRlbS50YWddXSIgdGFnLW1ldGFkYXRhPSJbW190YWdNZXRhZGF0YShfcnVuVG9UYWdJbmZvLCBpdGVtLnJ1biwgaXRlbS50YWcpXV0iIHgtdHlwZT0iW1tfeFR5cGVdXSIgcmVxdWVzdC1tYW5hZ2VyPSJbW19yZXF1ZXN0TWFuYWdlcl1dIj48L3RmLWRpc3RyaWJ1dGlvbi1sb2FkZXI+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPC90Zi1jYXRlZ29yeS1wYWdpbmF0ZWQtdmlldz4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPC9kaXY+CiAgICA8L3RmLWRhc2hib2FyZC1sYXlvdXQ+CgogICAgPHN0eWxlIGluY2x1ZGU9ImRhc2hib2FyZC1zdHlsZSI+PC9zdHlsZT4KICAgIDxzdHlsZT4KICAgICAgLm5vLWRhdGEtd2FybmluZyB7CiAgICAgICAgbWF4LXdpZHRoOiA1NDBweDsKICAgICAgICBtYXJnaW46IDgwcHggYXV0byAwIGF1dG87CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KCiAgPHNjcmlwdD4vL35+V0VCUEFUSH5+L3RmLWRpc3RyaWJ1dGlvbi1kYXNoYm9hcmQvdGYtZGlzdHJpYnV0aW9uLWRhc2hib2FyZC5odG1sLmpzClBvbHltZXIoe2lzOiJ0Zi1kaXN0cmlidXRpb24tZGFzaGJvYXJkIixwcm9wZXJ0aWVzOntfeFR5cGU6e3R5cGU6U3RyaW5nLHZhbHVlOiJzdGVwIn0sX3NlbGVjdGVkUnVuczpBcnJheSxfcnVuVG9UYWc6T2JqZWN0LF9ydW5Ub1RhZ0luZm86T2JqZWN0LF9kYXRhTm90Rm91bmQ6Qm9vbGVhbixfdGFnRmlsdGVyOlN0cmluZyxfY2F0ZWdvcmllc0RvbVJlYWR5OkJvb2xlYW4sX2NhdGVnb3JpZXM6e3R5cGU6QXJyYXksY29tcHV0ZWQ6Il9tYWtlQ2F0ZWdvcmllcyhfcnVuVG9UYWcsIF9zZWxlY3RlZFJ1bnMsIF90YWdGaWx0ZXIsIF9jYXRlZ29yaWVzRG9tUmVhZHkpIn0sX3JlcXVlc3RNYW5hZ2VyOnt0eXBlOk9iamVjdCx2YWx1ZTooKT0+bmV3IFBrLlJlcXVlc3RNYW5hZ2VyfX0scmVhZHkoKXt0aGlzLnJlbG9hZCgpfSxyZWxvYWQoKXt0aGlzLl9mZXRjaFRhZ3MoKS50aGVuKCgpPT57dGhpcy5fcmVsb2FkRGlzdHJpYnV0aW9ucygpfSl9LF9mZXRjaFRhZ3MoKXtjb25zdCBhPVBrLmdldFJvdXRlcigpLnBsdWdpblJvdXRlKCJkaXN0cmlidXRpb25zIiwKIi90YWdzIik7cmV0dXJuIHRoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3QoYSkudGhlbihjPT57aWYoIV8uaXNFcXVhbChjLHRoaXMuX3J1blRvVGFnSW5mbykpe3ZhciBkPV8ubWFwVmFsdWVzKGMsZz0+T2JqZWN0LmtleXMoZykpLGY9UGsuZ2V0VGFncyhkKTt0aGlzLnNldCgiX2RhdGFOb3RGb3VuZCIsMD09PWYubGVuZ3RoKTt0aGlzLnNldCgiX3J1blRvVGFnIixkKTt0aGlzLnNldCgiX3J1blRvVGFnSW5mbyIsYyk7dGhpcy5hc3luYygoKT0+e3RoaXMuc2V0KCJfY2F0ZWdvcmllc0RvbVJlYWR5IiwhMCl9KX19KX0sX3JlbG9hZERpc3RyaWJ1dGlvbnMoKXt0aGlzLnJvb3QucXVlcnlTZWxlY3RvckFsbCgidGYtZGlzdHJpYnV0aW9uLWxvYWRlciIpLmZvckVhY2goYT0+e2EucmVsb2FkKCl9KX0sX3Nob3VsZE9wZW4oYSl7cmV0dXJuIDI+PWF9LF9tYWtlQ2F0ZWdvcmllcyhhLGMsZCl7cmV0dXJuIFFrLmNhdGVnb3JpemVSdW5UYWdDb21iaW5hdGlvbnMoYSxjLGQpfSxfdGFnTWV0YWRhdGEoYSwKYyxkKXtyZXR1cm4gYVtjXVtkXX19KTsKPC9zY3JpcHQ+CjwvZG9tLW1vZHVsZT4KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCjxkb20tbW9kdWxlIGlkPSJ2ei1oaXN0b2dyYW0tdGltZXNlcmllcyI+CiAgPHRlbXBsYXRlPgogICAgPGRpdiBpZD0idG9vbHRpcCI+PHNwYW4+PC9zcGFuPjwvZGl2PgogICAgPHN2ZyBpZD0ic3ZnIj4KICAgICAgPGc+CiAgICAgICAgPGcgY2xhc3M9ImF4aXMgeCI+PC9nPgogICAgICAgIDxnIGNsYXNzPSJheGlzIHkiPjwvZz4KICAgICAgICA8ZyBjbGFzcz0iYXhpcyB5IHNsaWNlIj48L2c+CiAgICAgICAgPGcgY2xhc3M9InN0YWdlIj4KICAgICAgICAgIDxyZWN0IGNsYXNzPSJiYWNrZ3JvdW5kIj48L3JlY3Q+CiAgICAgICAgPC9nPgogICAgICAgIDxnIGNsYXNzPSJ4LWF4aXMtaG92ZXIiPjwvZz4KICAgICAgICA8ZyBjbGFzcz0ieS1heGlzLWhvdmVyIj48L2c+CiAgICAgICAgPGcgY2xhc3M9Inktc2xpY2UtYXhpcy1ob3ZlciI+PC9nPgogICAgICA8L2c+CiAgICA8L3N2Zz4KCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICAgIGZsZXgtc2hyaW5rOiAxOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfQoKICAgICAgc3ZnIHsKICAgICAgICBmb250LWZhbWlseTogcm9ib3RvLCBzYW5zLXNlcmlmOwogICAgICAgIG92ZXJmbG93OiB2aXNpYmxlOwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgICBmbGV4LXNocmluazogMTsKICAgICAgfQoKICAgICAgI3Rvb2x0aXAgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgfQoKICAgICAgLmJhY2tncm91bmQgewogICAgICAgIGZpbGwtb3BhY2l0eTogMDsKICAgICAgICBmaWxsOiByZWQ7CiAgICAgIH0KCiAgICAgIC5oaXN0b2dyYW0gewogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CgogICAgICAuaG92ZXIgewogICAgICAgIGZvbnQtc2l6ZTogOXB4OwogICAgICAgIGRvbWluYW50LWJhc2VsaW5lOiBtaWRkbGU7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgfQoKICAgICAgLmhvdmVyIGNpcmNsZSB7CiAgICAgICAgc3Ryb2tlOiB3aGl0ZTsKICAgICAgICBzdHJva2Utb3BhY2l0eTogMC41OwogICAgICAgIHN0cm9rZS13aWR0aDogMXB4OwogICAgICB9CgogICAgICAuaG92ZXIgdGV4dCB7CiAgICAgICAgZmlsbDogYmxhY2s7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgfQoKICAgICAgLmhvdmVyLmhvdmVyLWNsb3Nlc3QgY2lyY2xlIHsKICAgICAgICBmaWxsOiBibGFjayAhaW1wb3J0YW50OwogICAgICB9CgogICAgICAuaG92ZXIuaG92ZXItY2xvc2VzdCB0ZXh0IHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CgogICAgICAuYmFzZWxpbmUgewogICAgICAgIHN0cm9rZTogYmxhY2s7CiAgICAgICAgc3Ryb2tlLW9wYWNpdHk6IDAuMTsKICAgICAgfQoKICAgICAgLm91dGxpbmUgewogICAgICAgIGZpbGw6IG5vbmU7CiAgICAgICAgc3Ryb2tlOiB3aGl0ZTsKICAgICAgICBzdHJva2Utb3BhY2l0eTogMC41OwogICAgICB9CgogICAgICAub3V0bGluZS5vdXRsaW5lLWhvdmVyIHsKICAgICAgICBzdHJva2U6IGJsYWNrICFpbXBvcnRhbnQ7CiAgICAgICAgc3Ryb2tlLW9wYWNpdHk6IDE7CiAgICAgIH0KCiAgICAgIC54LWF4aXMtaG92ZXIsCiAgICAgIC55LWF4aXMtaG92ZXIsCiAgICAgIC55LXNsaWNlLWF4aXMtaG92ZXIgewogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CgogICAgICAueC1heGlzLWhvdmVyIC5sYWJlbCwKICAgICAgLnktYXhpcy1ob3ZlciAubGFiZWwsCiAgICAgIC55LXNsaWNlLWF4aXMtaG92ZXIgLmxhYmVsIHsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgICB0ZXh0LWFuY2hvcjogZW5kOwogICAgICB9CgogICAgICAueC1heGlzLWhvdmVyIHRleHQgewogICAgICAgIHRleHQtYW5jaG9yOiBtaWRkbGU7CiAgICAgIH0KCiAgICAgIC55LWF4aXMtaG92ZXIgdGV4dCwKICAgICAgLnktc2xpY2UtYXhpcy1ob3ZlciB0ZXh0IHsKICAgICAgICB0ZXh0LWFuY2hvcjogc3RhcnQ7CiAgICAgIH0KCiAgICAgIC54LWF4aXMtaG92ZXIgbGluZSwKICAgICAgLnktYXhpcy1ob3ZlciBsaW5lLAogICAgICAueS1zbGljZS1heGlzLWhvdmVyIGxpbmUgewogICAgICAgIHN0cm9rZTogYmxhY2s7CiAgICAgIH0KCiAgICAgIC54LWF4aXMtaG92ZXIgcmVjdCwKICAgICAgLnktYXhpcy1ob3ZlciByZWN0LAogICAgICAueS1zbGljZS1heGlzLWhvdmVyIHJlY3QgewogICAgICAgIGZpbGw6IHdoaXRlOwogICAgICB9CgogICAgICAuYXhpcyB7CiAgICAgICAgZm9udC1zaXplOiAxMXB4OwogICAgICB9CgogICAgICAuYXhpcyBwYXRoLmRvbWFpbiB7CiAgICAgICAgZmlsbDogbm9uZTsKICAgICAgfQoKICAgICAgLmF4aXMgLnRpY2sgbGluZSB7CiAgICAgICAgc3Ryb2tlOiAjZGRkOwogICAgICB9CgogICAgICAuYXhpcy5zbGljZSB7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgfQoKICAgICAgLmF4aXMuc2xpY2UgLnRpY2sgbGluZSB7CiAgICAgICAgc3Ryb2tlLWRhc2hhcnJheTogMjsKICAgICAgfQoKICAgICAgLnNtYWxsIC5heGlzIHRleHQgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KICAgICAgLnNtYWxsIC5heGlzIC50aWNrOmZpcnN0LW9mLXR5cGUgdGV4dCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH0KICAgICAgLnNtYWxsIC5heGlzIC50aWNrOmxhc3Qtb2YtdHlwZSB0ZXh0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQogICAgICAubWVkaXVtIC5heGlzIHRleHQgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KICAgICAgLm1lZGl1bSAuYXhpcyAudGljazpudGgtY2hpbGQoMm4gKyAxKSB0ZXh0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQogICAgICAubGFyZ2UgLmF4aXMgdGV4dCB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQogICAgICAubGFyZ2UgLmF4aXMgLnRpY2s6bnRoLWNoaWxkKDJuICsgMSkgdGV4dCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KCiAgPHNjcmlwdD4vL35+V0VCUEFUSH5+L3Z6LWhpc3RvZ3JhbS10aW1lc2VyaWVzL3Z6LWhpc3RvZ3JhbS10aW1lc2VyaWVzLmh0bWwuanMKUG9seW1lcih7aXM6InZ6LWhpc3RvZ3JhbS10aW1lc2VyaWVzIixwcm9wZXJ0aWVzOnttb2RlOnt0eXBlOlN0cmluZyx2YWx1ZToib2Zmc2V0In0sdGltZVByb3BlcnR5Ont0eXBlOlN0cmluZyx2YWx1ZToic3RlcCJ9LGJpbnM6e3R5cGU6U3RyaW5nLHZhbHVlOiJiaW5zIn0seDp7dHlwZTpTdHJpbmcsdmFsdWU6IngifSxkeDp7dHlwZTpTdHJpbmcsdmFsdWU6ImR4In0seTp7dHlwZTpTdHJpbmcsdmFsdWU6InkifSxjb2xvclNjYWxlOnt0eXBlOk9iamVjdCx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBkMy5zY2FsZU9yZGluYWwoZDMuc2NoZW1lQ2F0ZWdvcnkxMCl9fSxtb2RlVHJhbnNpdGlvbkR1cmF0aW9uOnt0eXBlOk51bWJlcix2YWx1ZTo1MDB9LF9hdHRhY2hlZDpCb29sZWFuLF9uYW1lOnt0eXBlOlN0cmluZyx2YWx1ZTpudWxsfSxfZGF0YTp7dHlwZTpBcnJheSx2YWx1ZTpudWxsfX0sb2JzZXJ2ZXJzOlsicmVkcmF3KHRpbWVQcm9wZXJ0eSwgX2F0dGFjaGVkKSIsIl9tb2RlUmVkcmF3KG1vZGUpIl0sCnJlYWR5OmZ1bmN0aW9uKCl7dGhpcy5zY29wZVN1YnRyZWUodGhpcy4kLnN2ZywhMCl9LGF0dGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fYXR0YWNoZWQ9ITB9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fYXR0YWNoZWQ9ITF9LHNldFNlcmllc0RhdGE6ZnVuY3Rpb24oYSxjKXt0aGlzLl9uYW1lPWE7dGhpcy5fZGF0YT1jO3RoaXMucmVkcmF3KCl9LHJlZHJhdzpmdW5jdGlvbigpe3RoaXMuX2RyYXcoMCl9LF9tb2RlUmVkcmF3OmZ1bmN0aW9uKCl7dGhpcy5fZHJhdyh0aGlzLm1vZGVUcmFuc2l0aW9uRHVyYXRpb24pfSxfZHJhdzpmdW5jdGlvbihhKXtpZih0aGlzLl9hdHRhY2hlZCYmdGhpcy5fZGF0YSl7aWYodm9pZCAwPT09YSl0aHJvdyBFcnJvcigidnotaGlzdG9ncmFtLXRpbWVzZXJpZXMgX2RyYXcgbmVlZHMgZHVyYXRpb24iKTtpZigwPj10aGlzLl9kYXRhLmxlbmd0aCl0aHJvdyBFcnJvcigiTm90IGVub3VnaCBzdGVwcyBpbiB0aGUgZGF0YSIpO2lmKCF0aGlzLl9kYXRhWzBdLmhhc093blByb3BlcnR5KHRoaXMuYmlucykpdGhyb3cgRXJyb3IoIk5vIGJpbnMgcHJvcGVydHkgb2YgJyIrCnRoaXMuYmlucysiJyBpbiBkYXRhIik7aWYoMD49dGhpcy5fZGF0YVswXVt0aGlzLmJpbnNdLmxlbmd0aCl0aHJvdyBFcnJvcigiTXVzdCBoYXZlIGF0IGxlYXN0IG9uZSBiaW4gaW4gYmlucyBpbiBkYXRhIik7aWYoIXRoaXMuX2RhdGFbMF1bdGhpcy5iaW5zXVswXS5oYXNPd25Qcm9wZXJ0eSh0aGlzLngpKXRocm93IEVycm9yKCJObyB4IHByb3BlcnR5ICciK3RoaXMueCsiJyBvbiBiaW5zIGRhdGEiKTtpZighdGhpcy5fZGF0YVswXVt0aGlzLmJpbnNdWzBdLmhhc093blByb3BlcnR5KHRoaXMuZHgpKXRocm93IEVycm9yKCJObyBkeCBwcm9wZXJ0eSAnIit0aGlzLmR4KyInIG9uIGJpbnMgZGF0YSIpO2lmKCF0aGlzLl9kYXRhWzBdW3RoaXMuYmluc11bMF0uaGFzT3duUHJvcGVydHkodGhpcy55KSl0aHJvdyBFcnJvcigiTm8geSBwcm9wZXJ0eSAnIit0aGlzLnkrIicgb24gYmlucyBkYXRhIik7dmFyIGM9dGhpcy50aW1lUHJvcGVydHksZD10aGlzLngsZj10aGlzLmJpbnMsZz10aGlzLmR4LApsPXRoaXMueSxrPXRoaXMuX2RhdGEsbT10aGlzLm1vZGUscD1kMy5oY2wodGhpcy5jb2xvclNjYWxlKHRoaXMuX25hbWUpKSxxPWQzLnNlbGVjdCh0aGlzLiQudG9vbHRpcCkscj1mdW5jdGlvbihFYSl7cmV0dXJuIEVhW2RdfSx0PWZ1bmN0aW9uKEVhKXtyZXR1cm4gRWFbbF19LHY9ZnVuY3Rpb24oRWEpe3JldHVybiBFYVtkXStFYVtnXX0sQT1mdW5jdGlvbihFYSl7cmV0dXJuIEVhW2NdfTsicmVsYXRpdmUiPT09YyYmKEE9ZnVuY3Rpb24oRWEpe3JldHVybiBFYS53YWxsX3RpbWUta1swXS53YWxsX3RpbWV9KTt2YXIgeT10aGlzLiQuc3ZnLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHg9eS53aWR0aCxDPXkuaGVpZ2h0LEY9NTtpZigib2Zmc2V0Ij09PW0pe3ZhciBEPUMvMi41O0Y9RCs1fWVsc2UgRD1DLUYtMjA7dmFyIEI9eC0yNC02MCxHPUMtRi0yMDtkMy5taW4oayxyKTtkMy5tYXgoayx2KTt2YXIgSz1kMy5mb3JtYXQoIi4zbiIpO3k9ZDMuZm9ybWF0KCIuMGYiKTsid2FsbF90aW1lIj09PQpjP3k9ZDMudGltZUZvcm1hdCgiJW0vJWQgJVgiKToicmVsYXRpdmUiPT09YyYmKHk9ZnVuY3Rpb24oRWEpe3JldHVybiBkMy5mb3JtYXQoIi4xciIpKEVhLzM2RTUpKyJoIn0pO3ZhciBMPWsubWFwKGZ1bmN0aW9uKEVhKXtyZXR1cm5bZDMubWluKEVhW2ZdLHIpLGQzLm1heChFYVtmXSx2KV19KSxKPWsubWFwKGZ1bmN0aW9uKEVhKXtyZXR1cm4gZDMuZXh0ZW50KEVhW2ZdLHQpfSksUD1kMy5leHRlbnQoayxBKSxTPSgid2FsbF90aW1lIj09PWM/ZDMuc2NhbGVUaW1lKCk6ZDMuc2NhbGVMaW5lYXIoKSkuZG9tYWluKFApLnJhbmdlKFswLCJvZmZzZXQiPT09bT9HOjBdKSxOPWQzLnNjYWxlTGluZWFyKCkuZG9tYWluKFswLGQzLm1heChrLGZ1bmN0aW9uKEVhLEdhKXtyZXR1cm4gSltHYV1bMV19KV0pLnJhbmdlKFtELDBdKSxUPWQzLnNjYWxlTGluZWFyKCkuZG9tYWluKE4uZG9tYWluKCkpLnJhbmdlKFs1MDAsMF0pLFk9ZDMuc2NhbGVMaW5lYXIoKS5kb21haW4oW2QzLm1pbihrLGZ1bmN0aW9uKEVhLApHYSl7cmV0dXJuIExbR2FdWzBdfSksZDMubWF4KGssZnVuY3Rpb24oRWEsR2Epe3JldHVybiBMW0dhXVsxXX0pXSkubmljZSgpLnJhbmdlKFswLEJdKSxhYT1kMy5zY2FsZUxpbmVhcigpLmRvbWFpbihZLmRvbWFpbigpKS5yYW5nZShbMCw1MDBdKSxoYT1kMy5zY2FsZUxpbmVhcigpLmRvbWFpbihkMy5leHRlbnQoayxBKSkucmFuZ2UoW3AuZGFya2VyKCkscC5icmlnaHRlcigpXSkuaW50ZXJwb2xhdGUoZDMuaW50ZXJwb2xhdGVIY2wpO3A9ZDMuYXhpc0JvdHRvbShZKS50aWNrcygpO3ZhciBYPWQzLmF4aXNSaWdodChTKS50aWNrcygpLnRpY2tGb3JtYXQoeSksY2E9ZDMuYXhpc1JpZ2h0KE4pLnRpY2tzKCkudGlja1NpemUoQis1KS50aWNrRm9ybWF0KEspLGVhPWZ1bmN0aW9uKEVhKXtyZXR1cm4gRWFbZF0rRWFbZ10vMn0sa2E9ZDMubGluZSgpLngoZnVuY3Rpb24oRWEpe3JldHVybiBhYShlYShFYSkpfSkueShmdW5jdGlvbihFYSl7cmV0dXJuIFQoRWFbbF0pfSksYmE9ZnVuY3Rpb24oRWEpe3JldHVybiJNIisKYWEoZWEoRWFbMF0pKSsiLCIrVCgwKSsiTCIra2EoRWEpLnNsaWNlKDEpKyJMIithYShlYShFYVtFYS5sZW5ndGgtMV0pKSsiLCIrVCgwKX0sbGE9dGhpcy4kLnN2Zzt5PWQzLnNlbGVjdChsYSk7YT15LnRyYW5zaXRpb24oKS5kdXJhdGlvbihhKTt5PXkuc2VsZWN0KCJnIikuY2xhc3NlZCgic21hbGwiLGZ1bmN0aW9uKCl7cmV0dXJuIDA8QiYmMTUwPj1CfSkuY2xhc3NlZCgibWVkaXVtIixmdW5jdGlvbigpe3JldHVybiAxNTA8QiYmMzAwPj1CfSkuY2xhc3NlZCgibGFyZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIDMwMDxCfSk7YT1hLnNlbGVjdCgiZyIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgyNCwiK0YrIikiKTt2YXIgd2E9ZDMuYmlzZWN0b3IodikubGVmdDtQPXkuc2VsZWN0KCIuc3RhZ2UiKS5vbigibW91c2VvdmVyIixmdW5jdGlvbigpe3hhLnN0eWxlKCJvcGFjaXR5IiwxKTt6YS5zdHlsZSgib3BhY2l0eSIsMSk7RmEuc3R5bGUoIm9wYWNpdHkiLDEpO1NhLnN0eWxlKCJvcGFjaXR5IiwKMSk7cS5zdHlsZSgib3BhY2l0eSIsMSl9KS5vbigibW91c2VvdXQiLGZ1bmN0aW9uKCl7eGEuc3R5bGUoIm9wYWNpdHkiLDApO3phLnN0eWxlKCJvcGFjaXR5IiwwKTtGYS5zdHlsZSgib3BhY2l0eSIsMCk7U2Euc3R5bGUoIm9wYWNpdHkiLDApO3hhLmNsYXNzZWQoImhvdmVyLWNsb3Nlc3QiLCExKTtDYS5jbGFzc2VkKCJvdXRsaW5lLWhvdmVyIiwhMSk7cS5zdHlsZSgib3BhY2l0eSIsMCl9KS5vbigibW91c2Vtb3ZlIixmdW5jdGlvbigpe2Z1bmN0aW9uIEVhKCRiKXtyZXR1cm4gTWF0aC5taW4oJGJbZl0ubGVuZ3RoLTEsd2EoJGJbZl0sZGIpKX12YXIgR2E9ZDMubW91c2UodGhpcyksZGI9WS5pbnZlcnQoR2FbMF0pO1MuaW52ZXJ0KEdhWzFdKTt2YXIgeGIsQ2I9SW5maW5pdHkseWI7eGEuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbigkYil7dmFyIGZjPUVhKCRiKTt5Yj0kYjt2YXIgQWE9WSgkYltmXVtmY11bZF0rJGJbZl1bZmNdW2ddLzIpO2ZjPU4oJGJbZl1bZmNdW2xdKTt2YXIgTWI9CiJvZmZzZXQiPT09bT9TKEEoJGIpKS0oRC1mYyk6ZmM7TWI9TWF0aC5hYnMoR2FbMV0tTWIpO01iPENiJiYoQ2I9TWIseGI9JGIpO3JldHVybiJ0cmFuc2xhdGUoIitBYSsiLCIrZmMrIikifSk7eGEuc2VsZWN0KCJ0ZXh0IikudGV4dChmdW5jdGlvbigkYil7dmFyIGZjPUVhKCRiKTtyZXR1cm4gJGJbZl1bZmNdW2xdfSk7eGEuY2xhc3NlZCgiaG92ZXItY2xvc2VzdCIsZnVuY3Rpb24oJGIpe3JldHVybiAkYj09PXhifSk7Q2EuY2xhc3NlZCgib3V0bGluZS1ob3ZlciIsZnVuY3Rpb24oJGIpe3JldHVybiAkYj09PXhifSk7dmFyIHRiPUVhKHliKTt6YS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKCl7cmV0dXJuInRyYW5zbGF0ZSgiK1koeWJbZl1bdGJdW2RdK3liW2ZdW3RiXVtnXS8yKSsiLCAiK0crIikifSkuc2VsZWN0KCJ0ZXh0IikudGV4dChmdW5jdGlvbigpe3JldHVybiBLKHliW2ZdW3RiXVtkXSt5YltmXVt0Yl1bZ10vMil9KTt2YXIgQ2M9WC50aWNrRm9ybWF0KCk7RmEuYXR0cigidHJhbnNmb3JtIiwKZnVuY3Rpb24oKXtyZXR1cm4idHJhbnNsYXRlKCIrQisiLCAiKygib2Zmc2V0Ij09PW0/UyhBKHhiKSk6MCkrIikifSkuc3R5bGUoImRpc3BsYXkiLCJvZmZzZXQiPT09bT8iIjoibm9uZSIpLnNlbGVjdCgidGV4dCIpLnRleHQoZnVuY3Rpb24oKXtyZXR1cm4gQ2MoQSh4YikpfSk7dmFyIFpiPWNhLnRpY2tGb3JtYXQoKTtTYS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKCl7cmV0dXJuInRyYW5zbGF0ZSgiK0IrIiwgIisoIm9mZnNldCI9PT1tPzA6Tih4YltmXVt0Yl1bbF0pKSsiKSJ9KS5zdHlsZSgiZGlzcGxheSIsIm9mZnNldCI9PT1tPyJub25lIjoiIikuc2VsZWN0KCJ0ZXh0IikudGV4dChmdW5jdGlvbigpe3JldHVybiBaYih4YltmXVt0Yl1bbF0pfSk7dmFyIGhkPWQzLm1vdXNlKGxhKTtxLnN0eWxlKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisoaGRbMF0rMTUpKyJweCwiKyhoZFsxXS0xNSkrInB4KSIpLnNlbGVjdCgic3BhbiIpLnRleHQoIm9mZnNldCI9PT1tP1piKHhiW2ZdW3RiXVtsXSk6Cigic3RlcCI9PT1jPyJzdGVwICI6IiIpK0NjKEEoeGIpKSl9KTtQLnNlbGVjdCgiLmJhY2tncm91bmQiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoLTI0LCIrLUYrIikiKS5hdHRyKCJ3aWR0aCIseCkuYXR0cigiaGVpZ2h0IixDKTtDPVAuc2VsZWN0QWxsKCIuaGlzdG9ncmFtIikuZGF0YShrKTtDLmV4aXQoKS5yZW1vdmUoKTt4PUMuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImhpc3RvZ3JhbSIpO0M9eC5tZXJnZShDKS5zb3J0KGZ1bmN0aW9uKEVhLEdhKXtyZXR1cm4gQShFYSktQShHYSl9KTtGPWEuc2VsZWN0QWxsKCIuaGlzdG9ncmFtIikuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihFYSl7cmV0dXJuInRyYW5zbGF0ZSgwLCAiKygib2Zmc2V0Ij09PW0/UyhBKEVhKSktRDowKSsiKSJ9KTt4LmFwcGVuZCgibGluZSIpLmF0dHIoImNsYXNzIiwiYmFzZWxpbmUiKTtGLnNlbGVjdCgiLmJhc2VsaW5lIikuc3R5bGUoInN0cm9rZS1vcGFjaXR5IixmdW5jdGlvbigpe3JldHVybiJvZmZzZXQiPT09Cm0/LjE6MH0pLmF0dHIoInkxIixEKS5hdHRyKCJ5MiIsRCkuYXR0cigieDIiLEIpO3guYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJvdXRsaW5lIik7dmFyIENhPUMuc2VsZWN0KCIub3V0bGluZSIpLmF0dHIoInZlY3Rvci1lZmZlY3QiLCJub24tc2NhbGluZy1zdHJva2UiKS5hdHRyKCJkIixmdW5jdGlvbihFYSl7cmV0dXJuIGJhKEVhW2ZdKX0pLnN0eWxlKCJzdHJva2Utd2lkdGgiLDEpO0Yuc2VsZWN0KCIub3V0bGluZSIpLmF0dHIoInRyYW5zZm9ybSIsInNjYWxlKCIrQi81MDArIiwgIitELzUwMCsiKSIpLnN0eWxlKCJzdHJva2UiLGZ1bmN0aW9uKEVhKXtyZXR1cm4ib2Zmc2V0Ij09PW0/IndoaXRlIjpoYShBKEVhKSl9KS5zdHlsZSgiZmlsbC1vcGFjaXR5IixmdW5jdGlvbigpe3JldHVybiJvZmZzZXQiPT09bT8xOjB9KS5zdHlsZSgiZmlsbCIsZnVuY3Rpb24oRWEpe3JldHVybiBoYShBKEVhKSl9KTt4PXguYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJob3ZlciIpLnN0eWxlKCJmaWxsIiwKZnVuY3Rpb24oRWEpe3JldHVybiBoYShBKEVhKSl9KTt2YXIgeGE9Qy5zZWxlY3QoIi5ob3ZlciIpO3guYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJyIiwyKTt4LmFwcGVuZCgidGV4dCIpLnN0eWxlKCJkaXNwbGF5Iiwibm9uZSIpLmF0dHIoImR4Iiw0KTt4PXkuc2VsZWN0KCIueC1heGlzLWhvdmVyIikuc2VsZWN0QWxsKCIubGFiZWwiKS5kYXRhKFsieCJdKTtDPXguZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImxhYmVsIik7dmFyIHphPXgubWVyZ2UoQyk7Qy5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4IiwtMjApLmF0dHIoInkiLDYpLmF0dHIoIndpZHRoIiw0MCkuYXR0cigiaGVpZ2h0IiwxNCk7Qy5hcHBlbmQoImxpbmUiKS5hdHRyKCJ4MSIsMCkuYXR0cigieDIiLDApLmF0dHIoInkxIiwwKS5hdHRyKCJ5MiIsNik7Qy5hcHBlbmQoInRleHQiKS5hdHRyKCJkeSIsMTgpO3g9eS5zZWxlY3QoIi55LWF4aXMtaG92ZXIiKS5zZWxlY3RBbGwoIi5sYWJlbCIpLmRhdGEoWyJ5Il0pOwpDPXguZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImxhYmVsIik7dmFyIEZhPXgubWVyZ2UoQyk7Qy5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4Iiw4KS5hdHRyKCJ5IiwtNikuYXR0cigid2lkdGgiLDQwKS5hdHRyKCJoZWlnaHQiLDE0KTtDLmFwcGVuZCgibGluZSIpLmF0dHIoIngxIiwwKS5hdHRyKCJ4MiIsNikuYXR0cigieTEiLDApLmF0dHIoInkyIiwwKTtDLmFwcGVuZCgidGV4dCIpLmF0dHIoImR4Iiw4KS5hdHRyKCJkeSIsNCk7eT15LnNlbGVjdCgiLnktc2xpY2UtYXhpcy1ob3ZlciIpLnNlbGVjdEFsbCgiLmxhYmVsIikuZGF0YShbInkiXSk7eD15LmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJsYWJlbCIpO3ZhciBTYT15Lm1lcmdlKHgpO3guYXBwZW5kKCJyZWN0IikuYXR0cigieCIsOCkuYXR0cigieSIsLTYpLmF0dHIoIndpZHRoIiw0MCkuYXR0cigiaGVpZ2h0IiwxNCk7eC5hcHBlbmQoImxpbmUiKS5hdHRyKCJ4MSIsMCkuYXR0cigieDIiLDYpLmF0dHIoInkxIiwKMCkuYXR0cigieTIiLDApO3guYXBwZW5kKCJ0ZXh0IikuYXR0cigiZHgiLDgpLmF0dHIoImR5Iiw0KTthLnNlbGVjdCgiLnkuYXhpcy5zbGljZSIpLnN0eWxlKCJvcGFjaXR5Iiwib2Zmc2V0Ij09PW0/MDoxKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMCwgIisoIm9mZnNldCI9PT1tPy1EOjApKyIpIikuY2FsbChjYSk7YS5zZWxlY3QoIi54LmF4aXMiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMCwgIitHKyIpIikuY2FsbChwKTthLnNlbGVjdCgiLnkuYXhpcyIpLnN0eWxlKCJvcGFjaXR5Iiwib2Zmc2V0Ij09PW0/MTowKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitCKyIsICIrKCJvZmZzZXQiPT09bT8wOkcpKyIpIikuY2FsbChYKTthLnNlbGVjdEFsbCgiLnRpY2sgdGV4dCIpLmF0dHIoImZpbGwiLCIjYWFhIik7YS5zZWxlY3RBbGwoIi5heGlzIHBhdGguZG9tYWluIikuYXR0cigic3Ryb2tlIiwibm9uZSIpfX19KTsKPC9zY3JpcHQ+CjwvZG9tLW1vZHVsZT4KCgoKPHNjcmlwdD4vL35+V0VCUEFUSH5+L3RmLWhpc3RvZ3JhbS1kYXNoYm9hcmQvaGlzdG9ncmFtQ29yZS5qcwp2YXIgcG07CihmdW5jdGlvbihhKXtmdW5jdGlvbiBjKGYpe2NvbnN0IFtnLGwsa109ZjtyZXR1cm57d2FsbF90aW1lOmcsc3RlcDpsLG1pbjpkMy5taW4oay5tYXAoKFttXSk9Pm0pKSxtYXg6ZDMubWF4KGsubWFwKChbLG1dKT0+bSkpLGJ1Y2tldHM6ay5tYXAoKFttLHAscV0pPT4oe2xlZnQ6bSxyaWdodDpwLGNvdW50OnF9KSl9fWZ1bmN0aW9uIGQoZixnLGwsaz0zMCl7bD09PWcmJihsPTEuMSpnKzEsZz1nLzEuMS0xKTtjb25zdCBtPShsLWcpL2s7bGV0IHA9MDtyZXR1cm4gZDMucmFuZ2UoZyxsLG0pLm1hcChxPT57Y29uc3Qgcj1xK207bGV0IHQ9MDtmb3IoO3A8Zi5idWNrZXRzLmxlbmd0aDspe2NvbnN0IEE9TWF0aC5taW4obCxmLmJ1Y2tldHNbcF0ucmlnaHQpO3ZhciB2PU1hdGgubWF4KGcsZi5idWNrZXRzW3BdLmxlZnQpO2NvbnN0IHk9TWF0aC5taW4oQSxyKS1NYXRoLm1heCh2LHEpO3Y9eS8oQS12KSpmLmJ1Y2tldHNbcF0uY291bnQ7dCs9MDx5P3Y6MDtpZihBPnIpYnJlYWs7cCsrfXJldHVybnt4OnEsCmR4Om0seTp0fX0pfWEuYmFja2VuZFRvSW50ZXJtZWRpYXRlPWM7YS5pbnRlcm1lZGlhdGVUb0QzPWQ7YS5iYWNrZW5kVG9Wej1mdW5jdGlvbihmKXtmPWYubWFwKGMpO2NvbnN0IGc9ZDMubWluKGYsaz0+ay5taW4pLGw9ZDMubWF4KGYsaz0+ay5tYXgpO3JldHVybiBmLm1hcChrPT4oe3dhbGxfdGltZTprLndhbGxfdGltZSxzdGVwOmsuc3RlcCxiaW5zOmQoayxnLGwpfSkpfX0pKHBtfHwocG09e30pKTsKPC9zY3JpcHQ+CgoKCjxkb20tbW9kdWxlIGlkPSJ0Zi1oaXN0b2dyYW0tbG9hZGVyIj4KICA8dGVtcGxhdGU+CiAgICA8dGYtY2FyZC1oZWFkaW5nIHRhZz0iW1t0YWddXSIgcnVuPSJbW3J1bl1dIiBkaXNwbGF5LW5hbWU9IltbdGFnTWV0YWRhdGEuZGlzcGxheU5hbWVdXSIgZGVzY3JpcHRpb249IltbdGFnTWV0YWRhdGEuZGVzY3JpcHRpb25dXSIgY29sb3I9IltbX3J1bkNvbG9yXV0iPjwvdGYtY2FyZC1oZWFkaW5nPgogICAgCiAgICA8dnotaGlzdG9ncmFtLXRpbWVzZXJpZXMgaWQ9ImNoYXJ0IiB0aW1lLXByb3BlcnR5PSJbW3RpbWVQcm9wZXJ0eV1dIiBtb2RlPSJbW2hpc3RvZ3JhbU1vZGVdXSIgY29sb3Itc2NhbGU9IltbX2NvbG9yU2NhbGVGdW5jdGlvbl1dIj48L3Z6LWhpc3RvZ3JhbS10aW1lc2VyaWVzPgogICAgPGRpdiBzdHlsZT0iZGlzcGxheTogZmxleDsgZmxleC1kaXJlY3Rpb246IHJvdzsiPgogICAgICA8cGFwZXItaWNvbi1idXR0b24gc2VsZWN0ZWQkPSJbW19leHBhbmRlZF1dIiBpY29uPSJmdWxsc2NyZWVuIiBvbi10YXA9Il90b2dnbGVFeHBhbmRlZCI+PC9wYXBlci1pY29uLWJ1dHRvbj4KICAgIDwvZGl2PgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIHdpZHRoOiAzMzBweDsKICAgICAgICBoZWlnaHQ6IDIzNXB4OwogICAgICAgIG1hcmdpbi1yaWdodDogMTBweDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxNXB4OwogICAgICB9CiAgICAgIDpob3N0KFtfZXhwYW5kZWRdKSB7CiAgICAgICAgd2lkdGg6IDcwMHB4OwogICAgICAgIGhlaWdodDogNTAwcHg7CiAgICAgIH0KCiAgICAgIHZ6LWhpc3RvZ3JhbS10aW1lc2VyaWVzIHsKICAgICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgd2lsbC1jaGFuZ2U6IHRyYW5zZm9ybTsKICAgICAgfQoKICAgICAgcGFwZXItaWNvbi1idXR0b24gewogICAgICAgIGNvbG9yOiAjMjE5NmYzOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDEwMCU7CiAgICAgICAgd2lkdGg6IDMycHg7CiAgICAgICAgaGVpZ2h0OiAzMnB4OwogICAgICAgIHBhZGRpbmc6IDRweDsKICAgICAgfQoKICAgICAgcGFwZXItaWNvbi1idXR0b25bc2VsZWN0ZWRdIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS10Yi11aS1saWdodC1hY2NlbnQpOwogICAgICB9CgogICAgICB0Zi1jYXJkLWhlYWRpbmcgewogICAgICAgIG1hcmdpbi1ib3R0b206IDEwcHg7CiAgICAgICAgd2lkdGg6IDkwJTsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgogIDxzY3JpcHQ+Ly9+fldFQlBBVEh+fi90Zi1oaXN0b2dyYW0tZGFzaGJvYXJkL3RmLWhpc3RvZ3JhbS1sb2FkZXIuaHRtbC5qcwpQb2x5bWVyKHtpczoidGYtaGlzdG9ncmFtLWxvYWRlciIscHJvcGVydGllczp7cnVuOlN0cmluZyx0YWc6U3RyaW5nLGRhdGFUb0xvYWQ6e3R5cGU6QXJyYXksY29tcHV0ZWQ6Il9jb21wdXRlRGF0YVRvTG9hZChydW4sIHRhZykifSxnZXREYXRhTG9hZE5hbWU6e3R5cGU6RnVuY3Rpb24sdmFsdWU6KCk9Pih7cnVuOmF9KT0+YX0sZ2V0RGF0YUxvYWRVcmw6e3R5cGU6RnVuY3Rpb24sdmFsdWU6KCk9Pih7dGFnOmEscnVuOmN9KT0+UGsuYWRkUGFyYW1zKFBrLmdldFJvdXRlcigpLnBsdWdpblJvdXRlKCJoaXN0b2dyYW1zIiwiL2hpc3RvZ3JhbXMiKSx7dGFnOmEscnVuOmN9KX0sbG9hZERhdGFDYWxsYmFjazp7dHlwZTpGdW5jdGlvbix2YWx1ZTpmdW5jdGlvbigpe3JldHVybihhLGMsZCk9PnthPXBtLmJhY2tlbmRUb1Z6KGQpO2M9dGhpcy5nZXREYXRhTG9hZE5hbWUoYyk7dGhpcy4kLmNoYXJ0LnNldFNlcmllc0RhdGEoYyxhKX19fSx0YWdNZXRhZGF0YTpPYmplY3QsdGltZVByb3BlcnR5OlN0cmluZywKaGlzdG9ncmFtTW9kZTpTdHJpbmcsX2NvbG9yU2NhbGVGdW5jdGlvbjp7dHlwZTpPYmplY3QsdmFsdWU6KCk9PlpsLnJ1bnNDb2xvclNjYWxlfSxfcnVuQ29sb3I6e3R5cGU6U3RyaW5nLGNvbXB1dGVkOiJfY29tcHV0ZVJ1bkNvbG9yKHJ1bikifSxfZXhwYW5kZWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9fSxvYnNlcnZlcnM6WyJyZWxvYWQocnVuLCB0YWcsIHJlcXVlc3RNYW5hZ2VyKSJdLGJlaGF2aW9yczpbV2wuRGF0YUxvYWRlckJlaGF2aW9yXSxfY29tcHV0ZURhdGFUb0xvYWQoYSxjKXtyZXR1cm5be3J1bjphLHRhZzpjfV19LF9jb21wdXRlUnVuQ29sb3IoYSl7cmV0dXJuIHRoaXMuX2NvbG9yU2NhbGVGdW5jdGlvbihhKX0scmVkcmF3KCl7dGhpcy4kLmNoYXJ0LnJlZHJhdygpfSxfdG9nZ2xlRXhwYW5kZWQoKXt0aGlzLnNldCgiX2V4cGFuZGVkIiwhdGhpcy5fZXhwYW5kZWQpO3RoaXMucmVkcmF3KCl9fSk7Cjwvc2NyaXB0Pgo8L2RvbS1tb2R1bGU+CgoKCjxkb20tbW9kdWxlIGlkPSJ0Zi1oaXN0b2dyYW0tZGFzaGJvYXJkIj4KICA8dGVtcGxhdGU+CiAgICA8dGYtZGFzaGJvYXJkLWxheW91dD4KICAgICAgPGRpdiBzbG90PSJzaWRlYmFyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24iPgogICAgICAgICAgPHRmLW9wdGlvbi1zZWxlY3RvciBpZD0iaGlzdG9ncmFtTW9kZVNlbGVjdG9yIiBuYW1lPSJIaXN0b2dyYW0gbW9kZSIgc2VsZWN0ZWQtaWQ9Int7X2hpc3RvZ3JhbU1vZGV9fSI+CiAgICAgICAgICAgIDxwYXBlci1idXR0b24gaWQ9Im92ZXJsYXkiPm92ZXJsYXk8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbiBpZD0ib2Zmc2V0Ij5vZmZzZXQ8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgIDwvdGYtb3B0aW9uLXNlbGVjdG9yPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiI+CiAgICAgICAgICA8dGYtb3B0aW9uLXNlbGVjdG9yIGlkPSJ0aW1lUHJvcGVydHlTZWxlY3RvciIgbmFtZT0iT2Zmc2V0IHRpbWUgYXhpcyIgc2VsZWN0ZWQtaWQ9Int7X3RpbWVQcm9wZXJ0eX19Ij4KICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbiBpZD0ic3RlcCI+c3RlcDwvcGFwZXItYnV0dG9uPgogICAgICAgICAgICA8cGFwZXItYnV0dG9uIGlkPSJyZWxhdGl2ZSI+cmVsYXRpdmU8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbiBpZD0id2FsbF90aW1lIj53YWxsPC9wYXBlci1idXR0b24+CiAgICAgICAgICA8L3RmLW9wdGlvbi1zZWxlY3Rvcj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24iPgogICAgICAgICAgPHRmLXJ1bnMtc2VsZWN0b3Igc2VsZWN0ZWQtcnVucz0ie3tfc2VsZWN0ZWRSdW5zfX0iPgogICAgICAgICAgPC90Zi1ydW5zLXNlbGVjdG9yPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBzbG90PSJjZW50ZXIiPgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfZGF0YU5vdEZvdW5kXV0iPgogICAgICAgICAgPGRpdiBjbGFzcz0ibm8tZGF0YS13YXJuaW5nIj4KICAgICAgICAgICAgPGgzPk5vIGhpc3RvZ3JhbSBkYXRhIHdhcyBmb3VuZC48L2gzPgogICAgICAgICAgICA8cD5Qcm9iYWJsZSBjYXVzZXM6CiAgICAgICAgICAgIDx1bD4KICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICBZb3UgaGF2ZW7igJl0IHdyaXR0ZW4gYW55IGhpc3RvZ3JhbSBkYXRhIHRvIHlvdXIgZXZlbnQgZmlsZXMuCiAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICA8bGk+VGVuc29yQm9hcmQgY2Fu4oCZdCBmaW5kIHlvdXIgZXZlbnQgZmlsZXMuPC9saT4KICAgICAgICAgICAgPC91bD4KCiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdeKAmXJlIG5ldyB0byB1c2luZyBUZW5zb3JCb2FyZCwgYW5kIHdhbnQgdG8gZmluZCBvdXQgaG93IHRvCiAgICAgICAgICAgICAgYWRkIGRhdGEgYW5kIHNldCB1cCB5b3VyIGV2ZW50IGZpbGVzLCBjaGVjayBvdXQgdGhlCiAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kIj5SRUFETUU8L2E+CiAgICAgICAgICAgICAgYW5kIHBlcmhhcHMgdGhlCiAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvZ2V0X3N0YXJ0ZWQvc3VtbWFyaWVzX2FuZF90ZW5zb3Jib2FyZCI+VGVuc29yQm9hcmQgdHV0b3JpYWw8L2E+LgogICAgICAgICAgICAKCiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdSB0aGluayBUZW5zb3JCb2FyZCBpcyBjb25maWd1cmVkIHByb3Blcmx5LCBwbGVhc2Ugc2VlCiAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kI215LXRlbnNvcmJvYXJkLWlzbnQtc2hvd2luZy1hbnktZGF0YS13aGF0cy13cm9uZyI+dGhlIHNlY3Rpb24gb2YgdGhlIFJFQURNRSBkZXZvdGVkIHRvIG1pc3NpbmcgZGF0YSBwcm9ibGVtczwvYT4KICAgICAgICAgICAgICBhbmQgY29uc2lkZXIgZmlsaW5nIGFuIGlzc3VlIG9uIEdpdEh1Yi4KICAgICAgICAgICAgCiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shX2RhdGFOb3RGb3VuZF1dIj4KICAgICAgICAgIDx0Zi10YWctZmlsdGVyZXIgdGFnLWZpbHRlcj0ie3tfdGFnRmlsdGVyfX0iPjwvdGYtdGFnLWZpbHRlcmVyPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tfY2F0ZWdvcmllc11dIiBhcz0iY2F0ZWdvcnkiPgogICAgICAgICAgICA8dGYtY2F0ZWdvcnktcGFnaW5hdGVkLXZpZXcgY2F0ZWdvcnk9IltbY2F0ZWdvcnldXSIgaW5pdGlhbC1vcGVuZWQ9IltbX3Nob3VsZE9wZW4oaW5kZXgpXV0iPgogICAgICAgICAgICAgIDx0ZW1wbGF0ZT4KICAgICAgICAgICAgICAgIDx0Zi1oaXN0b2dyYW0tbG9hZGVyIHJ1bj0iW1tpdGVtLnJ1bl1dIiB0YWc9IltbaXRlbS50YWddXSIgYWN0aXZlPSJbW2FjdGl2ZV1dIiB0YWctbWV0YWRhdGE9IltbX3RhZ01ldGFkYXRhKF9ydW5Ub1RhZ0luZm8sIGl0ZW0ucnVuLCBpdGVtLnRhZyldXSIgdGltZS1wcm9wZXJ0eT0iW1tfdGltZVByb3BlcnR5XV0iIGhpc3RvZ3JhbS1tb2RlPSJbW19oaXN0b2dyYW1Nb2RlXV0iIHJlcXVlc3QtbWFuYWdlcj0iW1tfcmVxdWVzdE1hbmFnZXJdXSI+PC90Zi1oaXN0b2dyYW0tbG9hZGVyPgogICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDwvdGYtY2F0ZWdvcnktcGFnaW5hdGVkLXZpZXc+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDwvZGl2PgogICAgPC90Zi1kYXNoYm9hcmQtbGF5b3V0PgoKICAgIDxzdHlsZSBpbmNsdWRlPSJkYXNoYm9hcmQtc3R5bGUiPjwvc3R5bGU+CiAgICA8c3R5bGU+CiAgICAgIC5uby1kYXRhLXdhcm5pbmcgewogICAgICAgIG1heC13aWR0aDogNTQwcHg7CiAgICAgICAgbWFyZ2luOiA4MHB4IGF1dG8gMCBhdXRvOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CgogIDxzY3JpcHQ+Ly9+fldFQlBBVEh+fi90Zi1oaXN0b2dyYW0tZGFzaGJvYXJkL3RmLWhpc3RvZ3JhbS1kYXNoYm9hcmQuaHRtbC5qcwpQb2x5bWVyKHtpczoidGYtaGlzdG9ncmFtLWRhc2hib2FyZCIscHJvcGVydGllczp7X2hpc3RvZ3JhbU1vZGU6e3R5cGU6U3RyaW5nLHZhbHVlOiJvZmZzZXQifSxfdGltZVByb3BlcnR5Ont0eXBlOlN0cmluZyx2YWx1ZToic3RlcCJ9LF9zZWxlY3RlZFJ1bnM6QXJyYXksX3J1blRvVGFnOk9iamVjdCxfcnVuVG9UYWdJbmZvOk9iamVjdCxfZGF0YU5vdEZvdW5kOkJvb2xlYW4sX3RhZ0ZpbHRlcjpTdHJpbmcsX3Jlc3RhbXA6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sX2NhdGVnb3JpZXNEb21SZWFkeTpCb29sZWFuLF9jYXRlZ29yaWVzOnt0eXBlOkFycmF5LGNvbXB1dGVkOiJfbWFrZUNhdGVnb3JpZXMoX3J1blRvVGFnLCBfc2VsZWN0ZWRSdW5zLCBfdGFnRmlsdGVyLCBfY2F0ZWdvcmllc0RvbVJlYWR5KSJ9LF9yZXF1ZXN0TWFuYWdlcjp7dHlwZTpPYmplY3QsdmFsdWU6KCk9Pm5ldyBQay5SZXF1ZXN0TWFuYWdlcn19LGxpc3RlbmVyczp7ImNvbnRlbnQtdmlzaWJpbGl0eS1jaGFuZ2VkIjoiX3JlZHJhd0NhdGVnb3J5UGFuZSJ9LApfcmVkcmF3Q2F0ZWdvcnlQYW5lKGEsYyl7YyYmYS50YXJnZXQucXVlcnlTZWxlY3RvckFsbCgidGYtaGlzdG9ncmFtLWxvYWRlciIpLmZvckVhY2goZD0+ZC5yZWRyYXcoKSl9LHJlYWR5KCl7dGhpcy5yZWxvYWQoKX0scmVsb2FkKCl7dGhpcy5fZmV0Y2hUYWdzKCkudGhlbigoKT0+e3RoaXMuX3JlbG9hZEhpc3RvZ3JhbXMoKX0pfSxfZmV0Y2hUYWdzKCl7Y29uc3QgYT1Qay5nZXRSb3V0ZXIoKS5wbHVnaW5Sb3V0ZSgiaGlzdG9ncmFtcyIsIi90YWdzIik7cmV0dXJuIHRoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3QoYSkudGhlbihjPT57aWYoIV8uaXNFcXVhbChjLHRoaXMuX3J1blRvVGFnSW5mbykpe3ZhciBkPV8ubWFwVmFsdWVzKGMsZz0+T2JqZWN0LmtleXMoZykpLGY9UGsuZ2V0VGFncyhkKTt0aGlzLnNldCgiX2RhdGFOb3RGb3VuZCIsMD09PWYubGVuZ3RoKTt0aGlzLnNldCgiX3J1blRvVGFnIixkKTt0aGlzLnNldCgiX3J1blRvVGFnSW5mbyIsYyk7dGhpcy5hc3luYygoKT0+Cnt0aGlzLnNldCgiX2NhdGVnb3JpZXNEb21SZWFkeSIsITApfSl9fSl9LF9yZWxvYWRIaXN0b2dyYW1zKCl7dGhpcy5yb290LnF1ZXJ5U2VsZWN0b3JBbGwoInRmLWhpc3RvZ3JhbS1sb2FkZXIiKS5mb3JFYWNoKGE9PnthLnJlbG9hZCgpfSl9LF9zaG91bGRPcGVuKGEpe3JldHVybiAyPj1hfSxfbWFrZUNhdGVnb3JpZXMoYSxjLGQpe3JldHVybiBRay5jYXRlZ29yaXplUnVuVGFnQ29tYmluYXRpb25zKGEsYyxkKX0sX3RhZ01ldGFkYXRhKGEsYyxkKXtyZXR1cm4gYVtjXVtkXX19KTsKPC9zY3JpcHQ+CjwvZG9tLW1vZHVsZT4KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgo8ZG9tLW1vZHVsZSBpZD0idGYtdGV4dC1sb2FkZXIiPgogIDx0ZW1wbGF0ZT4KICAgIDx0Zi1jYXJkLWhlYWRpbmcgcnVuPSJbW3J1bl1dIiB0YWc9IltbdGFnXV0iIGNvbG9yPSJbW19ydW5Db2xvcl1dIj4KICAgIDwvdGYtY2FyZC1oZWFkaW5nPgogICAgPHBhcGVyLW1hdGVyaWFsIGVsZXZhdGlvbj0iMSIgaWQ9InN0ZXBzLWNvbnRhaW5lciIgY2xhc3M9ImNvbnRhaW5lciBzY3JvbGxiYXIiIHN0eWxlPSJib3JkZXItY29sb3I6IFtbX3J1bkNvbG9yXV0iPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW190ZXh0c11dIj4KICAgICAgICA8cGFwZXItbWF0ZXJpYWwgZWxldmF0aW9uPSIxIiBjbGFzcz0ic3RlcC1jb250YWluZXIiPgogICAgICAgICAgc3RlcCA8c3BhbiBjbGFzcz0ic3RlcC12YWx1ZSI+W1tfZm9ybWF0U3RlcChpdGVtLnN0ZXApXV08L3NwYW4+CiAgICAgICAgPC9wYXBlci1tYXRlcmlhbD4KICAgICAgICA8cGFwZXItbWF0ZXJpYWwgZWxldmF0aW9uPSIxIiBjbGFzcz0idGV4dCI+CiAgICAgICAgICA8dGYtbWFya2Rvd24tdmlldyBodG1sPSJbW2l0ZW0udGV4dF1dIj48L3RmLW1hcmtkb3duLXZpZXc+CiAgICAgICAgPC9wYXBlci1tYXRlcmlhbD4KICAgICAgPC90ZW1wbGF0ZT4KICAgIDwvcGFwZXItbWF0ZXJpYWw+CiAgICA8c3R5bGUgaW5jbHVkZT0ic2Nyb2xsYmFyLXN0eWxlIj48L3N0eWxlPgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogYXV0bzsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDEwcHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTVweDsKICAgICAgfQogICAgICAuc2Nyb2xsYmFyIHsKICAgICAgICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtOwogICAgICB9CiAgICAgICNzdGVwcy1jb250YWluZXIgewogICAgICAgIGJvcmRlci1yYWRpdXM6IDNweDsKICAgICAgICBib3JkZXI6IDJweCBzb2xpZCAvKiBjb2xvciBjb21wdXRlZCBhbmQgc2V0IGFzIGlubGluZSBzdHlsZSAqLzsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBtYXgtaGVpZ2h0OiA1MDBweDsKICAgICAgICBvdmVyZmxvdzogYXV0bzsKICAgICAgICBwYWRkaW5nOiAxMHB4OwogICAgICB9CiAgICAgIC50ZXh0IHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsKICAgICAgICBib3JkZXItcmFkaXVzOiAwIDNweCAzcHggM3B4OwogICAgICAgIHBhZGRpbmc6IDVweDsKICAgICAgICB3b3JkLWJyZWFrOiBicmVhay13b3JkOwogICAgICB9CiAgICAgIC5zdGVwLWNvbnRhaW5lciB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tdGItdWktbGlnaHQtYWNjZW50KTsKICAgICAgICBib3JkZXItYm90dG9tOiBub25lOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDNweCAzcHggMCAwOwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNjY2M7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBmb250LXN0eWxlOiBpdGFsaWM7CiAgICAgICAgbWFyZ2luLWxlZnQ6IC0xcHg7IC8qIHRvIGNvcnJlY3QgZm9yIGJvcmRlciAqLwogICAgICAgIHBhZGRpbmc6IDNweDsKICAgICAgfQogICAgICAuc3RlcC1jb250YWluZXI6bm90KDpmaXJzdC1jaGlsZCkgewogICAgICAgIG1hcmdpbi10b3A6IDE1cHg7CiAgICAgIH0KCiAgICAgIHRmLWNhcmQtaGVhZGluZyB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTBweDsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgogIDxzY3JpcHQ+Ly9+fldFQlBBVEh+fi90Zi10ZXh0LWRhc2hib2FyZC90Zi10ZXh0LWxvYWRlci5odG1sLmpzClBvbHltZXIoe2lzOiJ0Zi10ZXh0LWxvYWRlciIscHJvcGVydGllczp7cnVuOlN0cmluZyx0YWc6U3RyaW5nLF9ydW5Db2xvcjp7dHlwZTpTdHJpbmcsY29tcHV0ZWQ6Il9jb21wdXRlUnVuQ29sb3IocnVuKSJ9LF90ZXh0czp7dHlwZTpBcnJheSx2YWx1ZTpbXX0scmVxdWVzdE1hbmFnZXI6T2JqZWN0LF9jYW5jZWxsZXI6e3R5cGU6T2JqZWN0LHZhbHVlOigpPT5uZXcgUGsuQ2FuY2VsbGVyfX0sX2NvbXB1dGVSdW5Db2xvcihhKXtyZXR1cm4gWmwucnVuc0NvbG9yU2NhbGUoYSl9LGF0dGFjaGVkKCl7dGhpcy5fYXR0YWNoZWQ9ITA7dGhpcy5yZWxvYWQoKX0scmVsb2FkKCl7aWYodGhpcy5fYXR0YWNoZWQpe3RoaXMuX2NhbmNlbGxlci5jYW5jZWxBbGwoKTt2YXIgYT1Qay5hZGRQYXJhbXMoUGsuZ2V0Um91dGVyKCkucGx1Z2luUm91dGUoInRleHQiLCIvdGV4dCIpLHt0YWc6dGhpcy50YWcscnVuOnRoaXMucnVufSksYz10aGlzLl9jYW5jZWxsZXIuY2FuY2VsbGFibGUoZD0+e2QuY2FuY2VsbGVkfHwKKGQ9ZC52YWx1ZS5tYXAoZj0+KHt3YWxsX3RpbWU6bmV3IERhdGUoMUUzKmYud2FsbF90aW1lKSxzdGVwOmYuc3RlcCx0ZXh0OmYudGV4dH0pKSx0aGlzLnNldCgiX3RleHRzIixkLnNsaWNlKCkucmV2ZXJzZSgpKSl9KTt0aGlzLnJlcXVlc3RNYW5hZ2VyLnJlcXVlc3QoYSkudGhlbihjKX19LF9mb3JtYXRTdGVwKGEpe3JldHVybiBkMy5mb3JtYXQoIiwiKShhKX19KTsKPC9zY3JpcHQ+CjwvZG9tLW1vZHVsZT4KCgoKPGRvbS1tb2R1bGUgaWQ9InRmLXRleHQtZGFzaGJvYXJkIj4KICA8dGVtcGxhdGU+CiAgICA8dGYtZGFzaGJvYXJkLWxheW91dD4KICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhciIgc2xvdD0ic2lkZWJhciI+CiAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIj4KICAgICAgICAgIDx0Zi1ydW5zLXNlbGVjdG9yIHNlbGVjdGVkLXJ1bnM9Int7X3NlbGVjdGVkUnVuc319Ij4KICAgICAgICAgIDwvdGYtcnVucy1zZWxlY3Rvcj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNlbnRlciIgc2xvdD0iY2VudGVyIj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2RhdGFOb3RGb3VuZF1dIj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im5vLWRhdGEtd2FybmluZyI+CiAgICAgICAgICAgIDxoMz5ObyB0ZXh0IGRhdGEgd2FzIGZvdW5kLjwvaDM+CiAgICAgICAgICAgIDxwPlByb2JhYmxlIGNhdXNlczoKICAgICAgICAgICAgPHVsPgogICAgICAgICAgICAgIDxsaT5Zb3UgaGF2ZW7igJl0IHdyaXR0ZW4gYW55IHRleHQgZGF0YSB0byB5b3VyIGV2ZW50IGZpbGVzLjwvbGk+CiAgICAgICAgICAgICAgPGxpPlRlbnNvckJvYXJkIGNhbuKAmXQgZmluZCB5b3VyIGV2ZW50IGZpbGVzLjwvbGk+CiAgICAgICAgICAgIDwvdWw+CgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICBJZiB5b3XigJlyZSBuZXcgdG8gdXNpbmcgVGVuc29yQm9hcmQsIGFuZCB3YW50IHRvIGZpbmQgb3V0IGhvdyB0bwogICAgICAgICAgICAgIGFkZCBkYXRhIGFuZCBzZXQgdXAgeW91ciBldmVudCBmaWxlcywgY2hlY2sgb3V0IHRoZQogICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCI+UkVBRE1FPC9hPgogICAgICAgICAgICAgIGFuZCBwZXJoYXBzIHRoZQogICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL2dldF9zdGFydGVkL3N1bW1hcmllc19hbmRfdGVuc29yYm9hcmQiPlRlbnNvckJvYXJkIHR1dG9yaWFsPC9hPi4KICAgICAgICAgICAgCgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICBJZiB5b3UgdGhpbmsgVGVuc29yQm9hcmQgaXMgY29uZmlndXJlZCBwcm9wZXJseSwgcGxlYXNlIHNlZQogICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCNteS10ZW5zb3Jib2FyZC1pc250LXNob3dpbmctYW55LWRhdGEtd2hhdHMtd3JvbmciPnRoZSBzZWN0aW9uIG9mIHRoZSBSRUFETUUgZGV2b3RlZCB0byBtaXNzaW5nIGRhdGEgcHJvYmxlbXM8L2E+CiAgICAgICAgICAgICAgYW5kIGNvbnNpZGVyIGZpbGluZyBhbiBpc3N1ZSBvbiBHaXRIdWIuCiAgICAgICAgICAgIAogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIV9kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8dGYtdGFnLWZpbHRlcmVyIHRhZy1maWx0ZXI9Int7X3RhZ0ZpbHRlcn19Ij48L3RmLXRhZy1maWx0ZXJlcj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX2NhdGVnb3JpZXNdXSIgYXM9ImNhdGVnb3J5Ij4KICAgICAgICAgICAgPHRmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3IGNhdGVnb3J5PSJbW2NhdGVnb3J5XV0iIGluaXRpYWwtb3BlbmVkPSJbW19zaG91bGRPcGVuKGluZGV4KV1dIj4KICAgICAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8dGYtdGV4dC1sb2FkZXIgYWN0aXZlPSJbW2FjdGl2ZV1dIiB0YWc9IltbaXRlbS50YWddXSIgcnVuPSJbW2l0ZW0ucnVuXV0iIHJlcXVlc3QtbWFuYWdlcj0iW1tfcmVxdWVzdE1hbmFnZXJdXSI+PC90Zi10ZXh0LWxvYWRlcj4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8L3RmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L2Rpdj4KICAgIDwvdGYtZGFzaGJvYXJkLWxheW91dD4KICAgIDxzdHlsZSBpbmNsdWRlPSJkYXNoYm9hcmQtc3R5bGUiPjwvc3R5bGU+CiAgICA8c3R5bGU+CiAgICAgIC5uby1kYXRhLXdhcm5pbmcgewogICAgICAgIG1heC13aWR0aDogNTQwcHg7CiAgICAgICAgbWFyZ2luOiA4MHB4IGF1dG8gMCBhdXRvOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CiAgPHNjcmlwdD4vL35+V0VCUEFUSH5+L3RmLXRleHQtZGFzaGJvYXJkL3RmLXRleHQtZGFzaGJvYXJkLmh0bWwuanMKUG9seW1lcih7aXM6InRmLXRleHQtZGFzaGJvYXJkIixwcm9wZXJ0aWVzOntfc2VsZWN0ZWRSdW5zOkFycmF5LF9ydW5Ub1RhZzpPYmplY3QsX2RhdGFOb3RGb3VuZDpCb29sZWFuLF90YWdGaWx0ZXI6U3RyaW5nLF9jYXRlZ29yaWVzRG9tUmVhZHk6Qm9vbGVhbixfY2F0ZWdvcmllczp7dHlwZTpBcnJheSxjb21wdXRlZDoiX21ha2VDYXRlZ29yaWVzKF9ydW5Ub1RhZywgX3NlbGVjdGVkUnVucywgX3RhZ0ZpbHRlciwgX2NhdGVnb3JpZXNEb21SZWFkeSkifSxfcmVxdWVzdE1hbmFnZXI6e3R5cGU6T2JqZWN0LHZhbHVlOigpPT5uZXcgUGsuUmVxdWVzdE1hbmFnZXJ9fSxyZWFkeSgpe3RoaXMucmVsb2FkKCl9LHJlbG9hZCgpe3RoaXMuX2ZldGNoVGFncygpLnRoZW4oKCk9Pnt0aGlzLl9yZWxvYWRUZXh0cygpfSl9LF9zaG91bGRPcGVuKGEpe3JldHVybiAyPj1hfSxfZmV0Y2hUYWdzKCl7Y29uc3QgYT1Qay5nZXRSb3V0ZXIoKS5wbHVnaW5Sb3V0ZSgidGV4dCIsIi90YWdzIik7cmV0dXJuIHRoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3QoYSkudGhlbihjPT4Ke2lmKCFfLmlzRXF1YWwoYyx0aGlzLl9ydW5Ub1RhZykpe3ZhciBkPVBrLmdldFRhZ3MoYyk7dGhpcy5zZXQoIl9kYXRhTm90Rm91bmQiLDA9PT1kLmxlbmd0aCk7dGhpcy5zZXQoIl9ydW5Ub1RhZyIsYyk7dGhpcy5hc3luYygoKT0+e3RoaXMuc2V0KCJfY2F0ZWdvcmllc0RvbVJlYWR5IiwhMCl9KX19KX0sX3JlbG9hZFRleHRzKCl7dGhpcy5yb290LnF1ZXJ5U2VsZWN0b3JBbGwoInRmLXRleHQtbG9hZGVyIikuZm9yRWFjaChhPT57YS5yZWxvYWQoKX0pfSxfbWFrZUNhdGVnb3JpZXMoYSxjLGQpe3JldHVybiBRay5jYXRlZ29yaXplUnVuVGFnQ29tYmluYXRpb25zKGEsYyxkKX19KTsKPC9zY3JpcHQ+CjwvZG9tLW1vZHVsZT4KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCjxkb20tbW9kdWxlIGlkPSJ0Zi1wci1jdXJ2ZS1jYXJkIj4KICA8dGVtcGxhdGU+CiAgICA8dGYtY2FyZC1oZWFkaW5nIHRhZz0iW1t0YWddXSIgZGlzcGxheS1uYW1lPSJbW3RhZ01ldGFkYXRhLmRpc3BsYXlOYW1lXV0iIGRlc2NyaXB0aW9uPSJbW3RhZ01ldGFkYXRhLmRlc2NyaXB0aW9uXV0iPjwvdGYtY2FyZC1oZWFkaW5nPgoKICAgIDx0Zi1saW5lLWNoYXJ0LWRhdGEtbG9hZGVyIHgtY29tcG9uZW50cy1jcmVhdGlvbi1tZXRob2Q9IltbX3hDb21wb25lbnRzQ3JlYXRpb25NZXRob2RdXSIgeS12YWx1ZS1hY2Nlc3Nvcj0iW1tfeVZhbHVlQWNjZXNzb3JdXSIgdG9vbHRpcC1jb2x1bW5zPSJbW190b29sdGlwQ29sdW1uc11dIiBjb2xvci1zY2FsZT0iW1tfY29sb3JTY2FsZUZ1bmN0aW9uXV0iIGRlZmF1bHQteC1yYW5nZT0iW1tfZGVmYXVsdFhSYW5nZV1dIiBkZWZhdWx0LXktcmFuZ2U9IltbX2RlZmF1bHRZUmFuZ2VdXSIgc21vb3RoaW5nLWVuYWJsZWQ9IltbX3Ntb290aGluZ0VuYWJsZWRdXSIgcmVxdWVzdC1tYW5hZ2VyPSJbW3JlcXVlc3RNYW5hZ2VyXV0iIGRhdGEtdG8tbG9hZD0iW1tydW5zXV0iIGRhdGEtc2VyaWVzPSJbW3J1bnNdXSIgbG9hZC1rZXk9IltbdGFnXV0iIGdldC1kYXRhLWxvYWQtdXJsPSJbW19kYXRhVXJsXV0iIGxvYWQtZGF0YS1jYWxsYmFjaz0iW1tfY3JlYXRlUHJvY2Vzc0RhdGFGdW5jdGlvbigpXV0iIGFjdGl2ZT0iW1thY3RpdmVdXSI+PC90Zi1saW5lLWNoYXJ0LWRhdGEtbG9hZGVyPgoKICAgIDxkaXYgaWQ9ImJ1dHRvbnMtcm93Ij4KICAgICAgPHBhcGVyLWljb24tYnV0dG9uIHNlbGVjdGVkJD0iW1tfZXhwYW5kZWRdXSIgaWNvbj0iZnVsbHNjcmVlbiIgb24tdGFwPSJfdG9nZ2xlRXhwYW5kZWQiPjwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgIDxwYXBlci1pY29uLWJ1dHRvbiBpY29uPSJzZXR0aW5ncy1vdmVyc2NhbiIgb24tdGFwPSJfcmVzZXREb21haW4iIHRpdGxlPSJSZXNldCBheGVzIHRvIFswLCAxXS4iPjwvcGFwZXItaWNvbi1idXR0b24+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGlkPSJzdGVwLWxlZ2VuZCI+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX3J1bnNXaXRoU3RlcEF2YWlsYWJsZV1dIiBhcz0icnVuIj4KICAgICAgICA8ZGl2IGNsYXNzPSJsZWdlbmQtcm93Ij4KICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbG9yLWJveCIgc3R5bGU9ImJhY2tncm91bmQ6IFtbX2NvbXB1dGVSdW5Db2xvcihydW4pXV07Ij48L2Rpdj4KICAgICAgICAgIFtbcnVuXV0gaXMgYXQKICAgICAgICAgIDxzcGFuIGNsYXNzPSJzdGVwLWxhYmVsLXRleHQiPgogICAgICAgICAgICBzdGVwIFtbX2NvbXB1dGVDdXJyZW50U3RlcEZvclJ1bihfcnVuVG9QckN1cnZlRW50cnksIHJ1bildXSA8L3NwYW4+PGJyPgogICAgICAgICAgPHNwYW4gY2xhc3M9IndhbGwtdGltZS1sYWJlbC10ZXh0Ij4KICAgICAgICAgICAgKFtbX2NvbXB1dGVDdXJyZW50V2FsbFRpbWVGb3JSdW4oX3J1blRvUHJDdXJ2ZUVudHJ5LCBydW4pXV0pCiAgICAgICAgICA8L3NwYW4+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICA8L2Rpdj4KCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgd2lkdGg6IDUwMHB4OwogICAgICAgIG1hcmdpbi1yaWdodDogMTBweDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAyNXB4OwogICAgICB9CiAgICAgIDpob3N0KFtfZXhwYW5kZWRdKSB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KICAgICAgdGYtbGluZS1jaGFydC1kYXRhLWxvYWRlciB7CiAgICAgICAgaGVpZ2h0OiAzMDBweDsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KICAgICAgOmhvc3QoW19leHBhbmRlZF0pIHRmLWxpbmUtY2hhcnQtZGF0YS1sb2FkZXIgewogICAgICAgIGhlaWdodDogNjAwcHg7CiAgICAgIH0KICAgICAgI2J1dHRvbnMtcm93IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICAgIH0KICAgICAgI2J1dHRvbnMtcm93IHBhcGVyLWljb24tYnV0dG9uIHsKICAgICAgICBjb2xvcjogIzIxOTZmMzsKICAgICAgICBib3JkZXItcmFkaXVzOiAxMDAlOwogICAgICAgIHdpZHRoOiAzMnB4OwogICAgICAgIGhlaWdodDogMzJweDsKICAgICAgICBwYWRkaW5nOiA0cHg7CiAgICAgIH0KICAgICAgI2J1dHRvbnMtcm93IHBhcGVyLWljb24tYnV0dG9uW3NlbGVjdGVkXSB7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tdGItdWktbGlnaHQtYWNjZW50KTsKICAgICAgfQogICAgICAjc3RlcC1sZWdlbmQgewogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgZm9udC1zaXplOiAwLjhlbTsKICAgICAgICBtYXgtaGVpZ2h0OiAyMDBweDsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIHBhZGRpbmc6IDAgMCAwIDEwcHg7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KICAgICAgLmxlZ2VuZC1yb3cgewogICAgICAgIG1hcmdpbjogNXB4IDAgNXB4IDA7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KICAgICAgLmNvbG9yLWJveCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDFweDsKICAgICAgICB3aWR0aDogMTBweDsKICAgICAgICBoZWlnaHQ6IDEwcHg7CiAgICAgIH0KICAgICAgLnN0ZXAtbGFiZWwtdGV4dCB7CiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICAgIH0KICAgICAgLndhbGwtdGltZS1sYWJlbC10ZXh0IHsKICAgICAgICBjb2xvcjogIzg4ODsKICAgICAgICBmb250LXNpemU6IDAuOGVtOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CiAgPHNjcmlwdD4vL35+V0VCUEFUSH5+L3RmLXByLWN1cnZlLWRhc2hib2FyZC90Zi1wci1jdXJ2ZS1jYXJkLmh0bWwuanMKUG9seW1lcih7aXM6InRmLXByLWN1cnZlLWNhcmQiLHByb3BlcnRpZXM6e3J1bnM6QXJyYXksdGFnOlN0cmluZyx0YWdNZXRhZGF0YTpPYmplY3QscnVuVG9TdGVwQ2FwOk9iamVjdCxyZXF1ZXN0TWFuYWdlcjpPYmplY3QsYWN0aXZlOkJvb2xlYW4sX2V4cGFuZGVkOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEscmVmbGVjdFRvQXR0cmlidXRlOiEwfSxfcnVuVG9QckN1cnZlRW50cnk6e3R5cGU6T2JqZWN0LHZhbHVlOigpPT4oe30pfSxfcHJldmlvdXNSdW5Ub1ByQ3VydmVFbnRyeTp7dHlwZTpPYmplY3QsdmFsdWU6KCk9Pih7fSl9LF9ydW5zV2l0aFN0ZXBBdmFpbGFibGU6e3R5cGU6QXJyYXksY29tcHV0ZWQ6Il9jb21wdXRlUnVuc1dpdGhTdGVwQXZhaWxhYmxlKHJ1bnMsIF9ydW5Ub1ByQ3VydmVFbnRyeSkifSxfc2V0T2ZSZWxldmFudFJ1bnM6e3R5cGU6T2JqZWN0LGNvbXB1dGVkOiJfY29tcHV0ZVNldE9mUmVsZXZhbnRSdW5zKF9ydW5zV2l0aFN0ZXBBdmFpbGFibGUpIn0sX3J1blRvRGF0YU92ZXJUaW1lOk9iamVjdCwKX2NvbG9yU2NhbGVGdW5jdGlvbjp7dHlwZTpPYmplY3QsdmFsdWU6KCk9Pih7c2NhbGU6WmwucnVuc0NvbG9yU2NhbGV9KX0sX2NhbmNlbGxlcjp7dHlwZTpPYmplY3QsdmFsdWU6KCk9Pm5ldyBQay5DYW5jZWxsZXJ9LF9hdHRhY2hlZDpCb29sZWFuLF94Q29tcG9uZW50c0NyZWF0aW9uTWV0aG9kOnt0eXBlOk9iamVjdCxyZWFkT25seTohMCx2YWx1ZTooKT0+KCk9Pntjb25zdCBhPW5ldyBQbG90dGFibGUuU2NhbGVzLkxpbmVhcjtyZXR1cm57c2NhbGU6YSxheGlzOm5ldyBQbG90dGFibGUuQXhlcy5OdW1lcmljKGEsImJvdHRvbSIpLGFjY2Vzc29yOmM9PmMucmVjYWxsfX19LF95VmFsdWVBY2Nlc3Nvcjp7dHlwZTpPYmplY3QscmVhZE9ubHk6ITAsdmFsdWU6KCk9PmE9PmEucHJlY2lzaW9ufSxfdG9vbHRpcENvbHVtbnM6e3R5cGU6QXJyYXkscmVhZE9ubHk6ITAsdmFsdWU6KCk9Pntjb25zdCBhPWJtLm11bHRpc2NhbGVGb3JtYXR0ZXIoYm0uWV9UT09MVElQX0ZPUk1BVFRFUl9QUkVDSVNJT04pLApjPWQ9PmlzTmFOKGQpPyJOYU4iOmEoZCk7cmV0dXJuW3t0aXRsZToiUnVuIixldmFsdWF0ZTpkPT5kLmRhdGFzZXQubWV0YWRhdGEoKS5uYW1lfSx7dGl0bGU6IlRocmVzaG9sZCIsZXZhbHVhdGU6ZD0+YyhkLmRhdHVtLnRocmVzaG9sZHMpfSx7dGl0bGU6IlByZWNpc2lvbiIsZXZhbHVhdGU6ZD0+YyhkLmRhdHVtLnByZWNpc2lvbil9LHt0aXRsZToiUmVjYWxsIixldmFsdWF0ZTpkPT5jKGQuZGF0dW0ucmVjYWxsKX0se3RpdGxlOiJUUCIsZXZhbHVhdGU6ZD0+ZC5kYXR1bS50cnVlX3Bvc2l0aXZlc30se3RpdGxlOiJGUCIsZXZhbHVhdGU6ZD0+ZC5kYXR1bS5mYWxzZV9wb3NpdGl2ZXN9LHt0aXRsZToiVE4iLGV2YWx1YXRlOmQ9PmQuZGF0dW0udHJ1ZV9uZWdhdGl2ZXN9LHt0aXRsZToiRk4iLGV2YWx1YXRlOmQ9PmQuZGF0dW0uZmFsc2VfbmVnYXRpdmVzfV19fSxfc2VyaWVzRGF0YUZpZWxkczp7dHlwZTpBcnJheSx2YWx1ZToidGhyZXNob2xkcyBwcmVjaXNpb24gcmVjYWxsIHRydWVfcG9zaXRpdmVzIGZhbHNlX3Bvc2l0aXZlcyB0cnVlX25lZ2F0aXZlcyBmYWxzZV9uZWdhdGl2ZXMiLnNwbGl0KCIgIiksCnJlYWRPbmx5OiEwfSxfZGVmYXVsdFhSYW5nZTp7dHlwZTpBcnJheSx2YWx1ZTpbLS4wNSwxLjA1XSxyZWFkT25seTohMH0sX2RlZmF1bHRZUmFuZ2U6e3R5cGU6QXJyYXksdmFsdWU6Wy0uMDUsMS4wNV0scmVhZE9ubHk6ITB9LF9kYXRhVXJsOnt0eXBlOkZ1bmN0aW9uLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIGE9Pntjb25zdCBjPXRoaXMudGFnO3JldHVybiBQay5hZGRQYXJhbXMoUGsuZ2V0Um91dGVyKCkucGx1Z2luUm91dGUoInByX2N1cnZlcyIsIi9wcl9jdXJ2ZXMiKSx7dGFnOmMscnVuOmF9KX19fSxfc21vb3RoaW5nRW5hYmxlZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExLHJlYWRPbmx5OiEwfX0sb2JzZXJ2ZXJzOlsicmVsb2FkKHJ1bnMsIHRhZykiLCJfc2V0Q2hhcnREYXRhKF9ydW5Ub1ByQ3VydmVFbnRyeSwgX3ByZXZpb3VzUnVuVG9QckN1cnZlRW50cnksIF9zZXRPZlJlbGV2YW50UnVucykiLCJfdXBkYXRlUnVuVG9QckN1cnZlRW50cnkoX3J1blRvRGF0YU92ZXJUaW1lLCBydW5Ub1N0ZXBDYXApIl0sCl9jcmVhdGVQcm9jZXNzRGF0YUZ1bmN0aW9uKCl7cmV0dXJuKGEsYyxkKT0+e3RoaXMuc2V0KCJfcnVuVG9EYXRhT3ZlclRpbWUiLE9iamVjdC5hc3NpZ24oe30sdGhpcy5fcnVuVG9EYXRhT3ZlclRpbWUsZCkpfX0sX2NvbXB1dGVSdW5Db2xvcihhKXtyZXR1cm4gdGhpcy5fY29sb3JTY2FsZUZ1bmN0aW9uLnNjYWxlKGEpfSxhdHRhY2hlZCgpe3RoaXMuX2F0dGFjaGVkPSEwO3RoaXMucmVsb2FkKCl9LHJlbG9hZCgpe3RoaXMuX2F0dGFjaGVkJiYoMD09PXRoaXMucnVucy5sZW5ndGg/dGhpcy5zZXQoIl9ydW5Ub0RhdGFPdmVyVGltZSIse30pOnRoaXMuJCQoInRmLWxpbmUtY2hhcnQtZGF0YS1sb2FkZXIiKS5yZWxvYWQoKSl9LF9zZXRDaGFydERhdGEoYSxjLGQpe18uZm9yT3duKGEsKGYsZyk9Pntjb25zdCBsPWNbZ107bCYmYVtnXS5zdGVwPT09bC5zdGVwfHwoZFtnXT90aGlzLl91cGRhdGVTZXJpZXNEYXRhRm9yUnVuKGcsZik6dGhpcy5fY2xlYXJTZXJpZXNEYXRhKGcpKX0pfSwKX3VwZGF0ZVNlcmllc0RhdGFGb3JSdW4oYSxjKXtjb25zdCBkPV8ucmVkdWNlKHRoaXMuX3Nlcmllc0RhdGFGaWVsZHMsKGcsbCk9PntnW2xdPWNbbF0uc2xpY2UoKS5yZXZlcnNlKCk7cmV0dXJuIGd9LHt9KSxmPUFycmF5KGRbdGhpcy5fc2VyaWVzRGF0YUZpZWxkc1swXV0ubGVuZ3RoKTtmb3IobGV0IGc9MDtnPGYubGVuZ3RoO2crKylmW2ddPV8ubWFwVmFsdWVzKGQsbD0+bFtnXSk7dGhpcy4kJCgidGYtbGluZS1jaGFydC1kYXRhLWxvYWRlciIpLnNldFNlcmllc0RhdGEoYSxmKX0sX2NsZWFyU2VyaWVzRGF0YShhKXt0aGlzLiQkKCJ0Zi1saW5lLWNoYXJ0LWRhdGEtbG9hZGVyIikuc2V0U2VyaWVzRGF0YShhLFtdKX0sX3VwZGF0ZVJ1blRvUHJDdXJ2ZUVudHJ5KGEsYyl7Y29uc3QgZD17fTtfLmZvck93bihhLChmLGcpPT57ZiYmZi5sZW5ndGgmJihkW2ddPXRoaXMuX2NvbXB1dGVFbnRyeUNsb3Nlc3RPckVxdWFsVG9TdGVwQ2FwKGNbZ10sZikpfSk7dGhpcy5zZXQoIl9wcmV2aW91c1J1blRvUHJDdXJ2ZUVudHJ5IiwKdGhpcy5fcnVuVG9QckN1cnZlRW50cnkpO3RoaXMuc2V0KCJfcnVuVG9QckN1cnZlRW50cnkiLGQpfSxfY29tcHV0ZUVudHJ5Q2xvc2VzdE9yRXF1YWxUb1N0ZXBDYXAoYSxjKXthPU1hdGgubWluKF8uc29ydGVkSW5kZXgoYy5tYXAoZD0+ZC5zdGVwKSxhKSxjLmxlbmd0aC0xKTtyZXR1cm4gY1thXX0sX2NvbXB1dGVSdW5zV2l0aFN0ZXBBdmFpbGFibGUoYSxjKXtyZXR1cm4gXy5maWx0ZXIoYSxkPT5jW2RdKS5zb3J0KCl9LF9jb21wdXRlU2V0T2ZSZWxldmFudFJ1bnMoYSl7Y29uc3QgYz17fTtfLmZvckVhY2goYSxkPT57Y1tkXT0hMH0pO3JldHVybiBjfSxfY29tcHV0ZUN1cnJlbnRTdGVwRm9yUnVuKGEsYyl7cmV0dXJuKGE9YVtjXSk/YS5zdGVwOm51bGx9LF9jb21wdXRlQ3VycmVudFdhbGxUaW1lRm9yUnVuKGEsYyl7cmV0dXJuKGE9YVtjXSk/KG5ldyBEYXRlKDFFMyphLndhbGxfdGltZSkpLnRvU3RyaW5nKCk6bnVsbH0sX3RvZ2dsZUV4cGFuZGVkKCl7dGhpcy5zZXQoIl9leHBhbmRlZCIsCiF0aGlzLl9leHBhbmRlZCk7dGhpcy5yZWRyYXcoKX0sX3Jlc2V0RG9tYWluKCl7dGhpcy4kJCgidGYtbGluZS1jaGFydC1kYXRhLWxvYWRlciIpLnJlc2V0RG9tYWluKCl9LHJlZHJhdygpe3RoaXMuJCQoInRmLWxpbmUtY2hhcnQtZGF0YS1sb2FkZXIiKS5yZWRyYXcoKX19KTsKPC9zY3JpcHQ+CjwvZG9tLW1vZHVsZT4KCgoKCgoKCgo8ZG9tLW1vZHVsZSBpZD0idGYtcHItY3VydmUtc3RlcHMtc2VsZWN0b3IiPgogIDx0ZW1wbGF0ZT4KICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX3J1bnNXaXRoU2xpZGVyc11dIiBhcz0icnVuIj4KICAgICAgPGRpdiBjbGFzcz0icnVuLXdpZGdldCI+CiAgICAgICAgPGRpdiBjbGFzcz0icnVuLWRpc3BsYXktY29udGFpbmVyIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InJ1bi1jb2xvci1ib3giIHN0eWxlPSJiYWNrZ3JvdW5kOltbX2NvbXB1dGVDb2xvckZvclJ1bihydW4pXV07Ij48L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9InJ1bi10ZXh0Ij4KICAgICAgICAgICAgW1tydW5dXQogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic3RlcC1kaXNwbGF5LWNvbnRhaW5lciI+CiAgICAgICAgICBbW19jb21wdXRlVGltZVRleHRGb3JSdW4ocnVuVG9BdmFpbGFibGVUaW1lRW50cmllcywgX3J1blRvU3RlcEluZGV4LAogICAgICAgICAgcnVuLCB0aW1lRGlzcGxheVR5cGUpXV0KICAgICAgICA8L2Rpdj4KICAgICAgICA8cGFwZXItc2xpZGVyIGRhdGEtcnVuJD0iW1tydW5dXSIgc3RlcD0iMSIgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG1heD0iW1tfY29tcHV0ZU1heFN0ZXBJbmRleEZvclJ1bihydW5Ub0F2YWlsYWJsZVRpbWVFbnRyaWVzLCBydW4pXV0iIHZhbHVlPSJbW19nZXRTdGVwKF9ydW5Ub1N0ZXBJbmRleCwgcnVuKV1dIiBvbi1pbW1lZGlhdGUtdmFsdWUtY2hhbmdlZD0iX3NsaWRlclZhbHVlQ2hhbmdlZCI+PC9wYXBlci1zbGlkZXI+CiAgICAgIDwvZGl2PgogICAgPC90ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgLnJ1bi13aWRnZXQgewogICAgICAgIG1hcmdpbjogMTBweCAwIDAgMDsKICAgICAgfQogICAgICBwYXBlci1zbGlkZXIgewogICAgICAgIG1hcmdpbjogLThweCAwIDAgLTE1cHg7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KICAgICAgLnN0ZXAtZGlzcGxheS1jb250YWluZXIgewogICAgICAgIGZvbnQtc2l6ZTogMC45ZW07CiAgICAgICAgbWFyZ2luOiAwIDE1cHggMCAwOwogICAgICB9CiAgICAgIC5ydW4tdGV4dCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICB9CiAgICAgIC5ydW4tY29sb3ItYm94IHsKICAgICAgICB3aWR0aDogMTJweDsKICAgICAgICBoZWlnaHQ6IDEycHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgogIDxzY3JpcHQ+Ly9+fldFQlBBVEh+fi90Zi1wci1jdXJ2ZS1kYXNoYm9hcmQvdGYtcHItY3VydmUtc3RlcHMtc2VsZWN0b3IuaHRtbC5qcwpQb2x5bWVyKHtpczoidGYtcHItY3VydmUtc3RlcHMtc2VsZWN0b3IiLHByb3BlcnRpZXM6e3J1bnM6QXJyYXkscnVuVG9BdmFpbGFibGVUaW1lRW50cmllczpPYmplY3QscnVuVG9TdGVwOnt0eXBlOk9iamVjdCxub3RpZnk6ITAsY29tcHV0ZWQ6Il9jb21wdXRlUnVuVG9TdGVwKHJ1blRvQXZhaWxhYmxlVGltZUVudHJpZXMsIF9ydW5Ub1N0ZXBJbmRleCkifSx0aW1lRGlzcGxheVR5cGU6U3RyaW5nLF9ydW5Ub1N0ZXBJbmRleDp7dHlwZTpPYmplY3QsdmFsdWU6KCk9Pih7fSl9LF9ydW5zV2l0aFNsaWRlcnM6e3R5cGU6QXJyYXksY29tcHV0ZWQ6Il9jb21wdXRlUnVuc1dpdGhTbGlkZXJzKHJ1bnMsIHJ1blRvQXZhaWxhYmxlVGltZUVudHJpZXMpIn19LG9ic2VydmVyczpbIl91cGRhdGVTdGVwc0Zvck5ld1J1bnMocnVuVG9BdmFpbGFibGVUaW1lRW50cmllcykiXSxfY29tcHV0ZUNvbG9yRm9yUnVuKGEpe3JldHVybiBabC5ydW5zQ29sb3JTY2FsZShhKX0sX2NvbXB1dGVUaW1lVGV4dEZvclJ1bihhLApjLGQsZil7Yz1jW2RdO2lmKCFfLmlzTnVtYmVyKGMpKXJldHVybiIiO2E9YVtkXTtpZighYSlyZXR1cm4iIjthPWFbY11bZl07aWYoInN0ZXAiPT09ZilyZXR1cm5gc3RlcCAke2F9YDtpZigicmVsYXRpdmUiPT09ZilyZXR1cm4gMT5hP2AkeygxRTMqYSkudG9GaXhlZCgyKX0gbXNgOmAke2EudG9GaXhlZCgyKX0gc2A7aWYoIndhbGxfdGltZSI9PT1mKXJldHVybihuZXcgRGF0ZSgxRTMqYSkpLnRvU3RyaW5nKCk7dGhyb3cgRXJyb3IoYFRoZSBkaXNwbGF5IHR5cGUgb2YgJHtmfSBpcyBub3QgcmVjb2duaXplZC5gKTt9LF9zbGlkZXJWYWx1ZUNoYW5nZWQoYSl7Y29uc3QgYz1hLnRhcmdldC5kYXRhc2V0LnJ1bixkPWEudGFyZ2V0LmltbWVkaWF0ZVZhbHVlLGY9T2JqZWN0LmFzc2lnbih7fSx0aGlzLl9ydW5Ub1N0ZXBJbmRleCk7aXNOYU4oZCk/ZGVsZXRlIGZbY106ZltjXT1hLnRhcmdldC5pbW1lZGlhdGVWYWx1ZTt0aGlzLl9ydW5Ub1N0ZXBJbmRleD1mfSxfY29tcHV0ZU1heFN0ZXBJbmRleEZvclJ1bihhLApjKXtyZXR1cm4oYT1hW2NdKSYmYS5sZW5ndGg/YS5sZW5ndGgtMTowfSxfdXBkYXRlU3RlcHNGb3JOZXdSdW5zKGEpe2NvbnN0IGM9T2JqZWN0LmFzc2lnbih7fSx0aGlzLl9ydW5Ub1N0ZXBJbmRleCk7Xy5mb3JPd24oYSwoZCxmKT0+e18uaXNOdW1iZXIoY1tmXSl8fChjW2ZdPWQubGVuZ3RoLTEpfSk7dGhpcy5fcnVuVG9TdGVwSW5kZXg9Y30sX2dldFN0ZXAoYSxjKXtyZXR1cm4gdGhpcy5fcnVuVG9TdGVwSW5kZXg/dGhpcy5fcnVuVG9TdGVwSW5kZXhbY106MH0sX2NvbXB1dGVSdW5Ub1N0ZXAoYSxjKXtjb25zdCBkPXt9O18uZm9yT3duKGMsKGYsZyk9Pntjb25zdCBsPWFbZ107bCYmKGRbZ109bFtmXS5zdGVwKX0pO3JldHVybiBkfSxfY29tcHV0ZVJ1bnNXaXRoU2xpZGVycyhhLGMpe3JldHVybiBhLmZpbHRlcihkPT5jW2RdKX19KTsKPC9zY3JpcHQ+CjwvZG9tLW1vZHVsZT4KCgoKPGRvbS1tb2R1bGUgaWQ9InRmLXByLWN1cnZlLWRhc2hib2FyZCI+CiAgPHRlbXBsYXRlPgogICAgPHRmLWRhc2hib2FyZC1sYXlvdXQ+CiAgICAgIDxkaXYgY2xhc3M9InNpZGViYXIiIHNsb3Q9InNpZGViYXIiPgogICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiI+CiAgICAgICAgICA8dGYtb3B0aW9uLXNlbGVjdG9yIGlkPSJ0aW1lLXR5cGUtc2VsZWN0b3IiIG5hbWU9IlRpbWUgRGlzcGxheSBUeXBlIiBzZWxlY3RlZC1pZD0ie3tfdGltZURpc3BsYXlUeXBlfX0iPgogICAgICAgICAgICA8cGFwZXItYnV0dG9uIGlkPSJzdGVwIj5zdGVwPC9wYXBlci1idXR0b24+PHBhcGVyLWJ1dHRvbiBpZD0icmVsYXRpdmUiPnJlbGF0aXZlPC9wYXBlci1idXR0b24+PHBhcGVyLWJ1dHRvbiBpZD0id2FsbF90aW1lIj53YWxsPC9wYXBlci1idXR0b24+CiAgICAgICAgICA8L3RmLW9wdGlvbi1zZWxlY3Rvcj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX3J1blRvQXZhaWxhYmxlVGltZUVudHJpZXNdXSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24iIGlkPSJzdGVwcy1zZWxlY3Rvci1jb250YWluZXIiPgogICAgICAgICAgICA8dGYtcHItY3VydmUtc3RlcHMtc2VsZWN0b3IgcnVucz0iW1tfcmVsZXZhbnRTZWxlY3RlZFJ1bnNdXSIgcnVuLXRvLXN0ZXA9Int7X3J1blRvU3RlcH19IiBydW4tdG8tYXZhaWxhYmxlLXRpbWUtZW50cmllcz0iW1tfcnVuVG9BdmFpbGFibGVUaW1lRW50cmllc11dIiB0aW1lLWRpc3BsYXktdHlwZT0iW1tfdGltZURpc3BsYXlUeXBlXV0iPjwvdGYtcHItY3VydmUtc3RlcHMtc2VsZWN0b3I+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiI+CiAgICAgICAgICA8dGYtcnVucy1zZWxlY3RvciBzZWxlY3RlZC1ydW5zPSJ7e19zZWxlY3RlZFJ1bnN9fSI+CiAgICAgICAgICA8L3RmLXJ1bnMtc2VsZWN0b3I+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjZW50ZXIiIHNsb3Q9ImNlbnRlciI+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJuby1kYXRhLXdhcm5pbmciPgogICAgICAgICAgICA8aDM+Tm8gcHJlY2lzaW9u4oCTcmVjYWxsIGN1cnZlIGRhdGEgd2FzIGZvdW5kLjwvaDM+CiAgICAgICAgICAgIDxwPlByb2JhYmxlIGNhdXNlczoKICAgICAgICAgICAgPHVsPgogICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgIFlvdSBoYXZlbuKAmXQgd3JpdHRlbiBhbnkgcHJlY2lzaW9u4oCTcmVjYWxsIGRhdGEgdG8geW91ciBldmVudAogICAgICAgICAgICAgICAgZmlsZXMuCiAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICBUZW5zb3JCb2FyZCBjYW7igJl0IGZpbmQgeW91ciBldmVudCBmaWxlcy4KICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICA8L3VsPgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICBJZiB5b3XigJlyZSBuZXcgdG8gdXNpbmcgVGVuc29yQm9hcmQsIGFuZCB3YW50IHRvIGZpbmQgb3V0IGhvdyB0bwogICAgICAgICAgICAgIGFkZCBkYXRhIGFuZCBzZXQgdXAgeW91ciBldmVudCBmaWxlcywgY2hlY2sgb3V0IHRoZQogICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCI+UkVBRE1FPC9hPgogICAgICAgICAgICAgIGFuZCBwZXJoYXBzIHRoZQogICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL2dldF9zdGFydGVkL3N1bW1hcmllc19hbmRfdGVuc29yYm9hcmQiPlRlbnNvckJvYXJkIHR1dG9yaWFsPC9hPi4KICAgICAgICAgICAgCgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICBJZiB5b3UgdGhpbmsgVGVuc29yQm9hcmQgaXMgY29uZmlndXJlZCBwcm9wZXJseSwgcGxlYXNlIHNlZQogICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCNteS10ZW5zb3Jib2FyZC1pc250LXNob3dpbmctYW55LWRhdGEtd2hhdHMtd3JvbmciPnRoZSBzZWN0aW9uIG9mIHRoZSBSRUFETUUgZGV2b3RlZCB0byBtaXNzaW5nIGRhdGEgcHJvYmxlbXM8L2E+CiAgICAgICAgICAgICAgYW5kIGNvbnNpZGVyIGZpbGluZyBhbiBpc3N1ZSBvbiBHaXRIdWIuCiAgICAgICAgICAgIAogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIV9kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8dGYtdGFnLWZpbHRlcmVyIHRhZy1maWx0ZXI9Int7X3RhZ0ZpbHRlcn19Ij48L3RmLXRhZy1maWx0ZXJlcj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX2NhdGVnb3JpZXNdXSIgYXM9ImNhdGVnb3J5Ij4KICAgICAgICAgICAgPHRmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3IGNhdGVnb3J5PSJbW2NhdGVnb3J5XV0iIGluaXRpYWwtb3BlbmVkPSJbW19zaG91bGRPcGVuKGluZGV4KV1dIj4KICAgICAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8dGYtcHItY3VydmUtY2FyZCBhY3RpdmU9IltbYWN0aXZlXV0iIHJ1bnM9IltbaXRlbS5ydW5zXV0iIHRhZz0iW1tpdGVtLnRhZ11dIiB0YWctbWV0YWRhdGE9IltbX3RhZ01ldGFkYXRhKF9ydW5Ub1RhZ0luZm8sIGl0ZW0ucnVucywgaXRlbS50YWcpXV0iIHJlcXVlc3QtbWFuYWdlcj0iW1tfcmVxdWVzdE1hbmFnZXJdXSIgcnVuLXRvLXN0ZXAtY2FwPSJbW19ydW5Ub1N0ZXBdXSI+PC90Zi1wci1jdXJ2ZS1jYXJkPgogICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDwvdGYtY2F0ZWdvcnktcGFnaW5hdGVkLXZpZXc+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDwvZGl2PgogICAgPC90Zi1kYXNoYm9hcmQtbGF5b3V0PgoKICAgIDxzdHlsZSBpbmNsdWRlPSJkYXNoYm9hcmQtc3R5bGUiPjwvc3R5bGU+CiAgICA8c3R5bGU+CiAgICAgIC5uby1kYXRhLXdhcm5pbmcgewogICAgICAgIG1heC13aWR0aDogNTQwcHg7CiAgICAgICAgbWFyZ2luOiA4MHB4IGF1dG8gMCBhdXRvOwogICAgICB9CiAgICAgIC8qKiBEbyBub3QgbGV0IHRoZSBzdGVwcyBzZWxlY3RvciBvY2NsdWRlIHRoZSBydW4gc2VsZWN0b3IuICovCiAgICAgICNzdGVwcy1zZWxlY3Rvci1jb250YWluZXIgewogICAgICAgIG1heC1oZWlnaHQ6IDQwJTsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CgogIDxzY3JpcHQ+Ly9+fldFQlBBVEh+fi90Zi1wci1jdXJ2ZS1kYXNoYm9hcmQvdGYtcHItY3VydmUtZGFzaGJvYXJkLmh0bWwuanMKUG9seW1lcih7aXM6InRmLXByLWN1cnZlLWRhc2hib2FyZCIscHJvcGVydGllczp7X3RpbWVEaXNwbGF5VHlwZTp7dHlwZTpTdHJpbmcsdmFsdWU6InN0ZXAifSxfc2VsZWN0ZWRSdW5zOnt0eXBlOkFycmF5LHZhbHVlOigpPT5bXX0sX3J1blRvVGFnSW5mbzp7dHlwZTpPYmplY3QsdmFsdWU6KCk9Pih7fSl9LF9ydW5Ub0F2YWlsYWJsZVRpbWVFbnRyaWVzOnt0eXBlOk9iamVjdCx2YWx1ZTp7fX0sX3JlbGV2YW50U2VsZWN0ZWRSdW5zOnt0eXBlOkFycmF5LGNvbXB1dGVkOiJfY29tcHV0ZVJlbGV2YW50U2VsZWN0ZWRSdW5zKF9zZWxlY3RlZFJ1bnMsIF9ydW5Ub1RhZ0luZm8pIn0sX3J1bnNXaXRoUHJDdXJ2ZURhdGE6QXJyYXksX3J1blRvU3RlcDp7dHlwZTpPYmplY3Qsbm90aWZ5OiEwfSxfZGF0YU5vdEZvdW5kOkJvb2xlYW4sX3RhZ0ZpbHRlcjpTdHJpbmcsX2NhdGVnb3JpZXNEb21SZWFkeTpCb29sZWFuLF9jYXRlZ29yaWVzOnt0eXBlOkFycmF5LGNvbXB1dGVkOiJfbWFrZUNhdGVnb3JpZXMoX3J1blRvVGFnSW5mbywgX3NlbGVjdGVkUnVucywgX3RhZ0ZpbHRlciwgX2NhdGVnb3JpZXNEb21SZWFkeSkifSwKX3JlcXVlc3RNYW5hZ2VyOnt0eXBlOk9iamVjdCx2YWx1ZTooKT0+bmV3IFBrLlJlcXVlc3RNYW5hZ2VyfSxfc3RlcDp7dHlwZTpOdW1iZXIsdmFsdWU6MCxub3RpZnk6ITB9fSxyZWFkeSgpe3RoaXMucmVsb2FkKCl9LHJlbG9hZCgpe1Byb21pc2UuYWxsKFt0aGlzLl9mZXRjaFRhZ3MoKSx0aGlzLl9mZXRjaFRpbWVFbnRyaWVzUGVyUnVuKCldKS50aGVuKCgpPT57dGhpcy5fcmVsb2FkQ2FyZHMoKX0pfSxfc2hvdWxkT3BlbihhKXtyZXR1cm4gMj49YX0sX2ZldGNoVGFncygpe2NvbnN0IGE9UGsuZ2V0Um91dGVyKCkucGx1Z2luUm91dGUoInByX2N1cnZlcyIsIi90YWdzIik7cmV0dXJuIHRoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3QoYSkudGhlbihjPT57aWYoIV8uaXNFcXVhbChjLHRoaXMuX3J1blRvVGFnSW5mbykpe3ZhciBkPV8ubWFwVmFsdWVzKGMsZj0+Xy5rZXlzKGYpKTtkPVBrLmdldFRhZ3MoZCk7dGhpcy5zZXQoIl9kYXRhTm90Rm91bmQiLDA9PT1kLmxlbmd0aCk7CnRoaXMuc2V0KCJfcnVuVG9UYWdJbmZvIixjKTt0aGlzLmFzeW5jKCgpPT57dGhpcy5zZXQoIl9jYXRlZ29yaWVzRG9tUmVhZHkiLCEwKX0pfX0pfSxfZmV0Y2hUaW1lRW50cmllc1BlclJ1bigpe2NvbnN0IGE9UGsuZ2V0Um91dGVyKCkucGx1Z2luUm91dGUoInByX2N1cnZlcyIsIi9hdmFpbGFibGVfdGltZV9lbnRyaWVzIik7cmV0dXJuIHRoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3QoYSkudGhlbihjPT57Xy5mb3JPd24oYyxkPT57Xy5mb3JFYWNoKGQsZj0+e2YucmVsYXRpdmU9Zi53YWxsX3RpbWUtZFswXS53YWxsX3RpbWV9KX0pO3RoaXMuc2V0KCJfcnVuVG9BdmFpbGFibGVUaW1lRW50cmllcyIsYyk7Yz1fLmtleXMoYykuc2xpY2UoKS5zb3J0KCk7Xy5pc0VxdWFsKGMsdGhpcy5fcnVuc1dpdGhQckN1cnZlRGF0YSl8fHRoaXMuc2V0KCJfcnVuc1dpdGhQckN1cnZlRGF0YSIsYyl9KX0sX3JlbG9hZENhcmRzKCl7Xy5mb3JFYWNoKHRoaXMucm9vdC5xdWVyeVNlbGVjdG9yQWxsKCJ0Zi1wci1jdXJ2ZS1jYXJkIiksCmE9PnthLnJlbG9hZCgpfSl9LF9tYWtlQ2F0ZWdvcmllcyhhLGMsZCl7YT1fLm1hcFZhbHVlcyhhLGY9Pk9iamVjdC5rZXlzKGYpKTtyZXR1cm4gUWsuY2F0ZWdvcml6ZVRhZ3MoYSxjLGQpfSxfY29tcHV0ZUNvbG9yRm9yUnVuKGEpe3JldHVybiBabC5ydW5zQ29sb3JTY2FsZShhKX0sX2NvbXB1dGVSZWxldmFudFNlbGVjdGVkUnVucyhhLGMpe3JldHVybiBhLmZpbHRlcihkPT5jW2RdKX0sX3RhZ01ldGFkYXRhKGEsYyxkKXtjb25zdCBmPXt9O2MuZm9yRWFjaChnPT57ZltnXT1hW2ddW2RdfSk7Yz1kLnJlcGxhY2UoL1wvcHJfY3VydmVzJC8sIiIpO3JldHVybiBhbS5hZ2dyZWdhdGVUYWdJbmZvKGYsYyl9fSk7Cjwvc2NyaXB0Pgo8L2RvbS1tb2R1bGU+CgoKCgoKCgoKCgoKCgoKCjxkb20tbW9kdWxlIGlkPSJwYXBlci1zcGlubmVyIj4KICA8dGVtcGxhdGUgc3RyaXAtd2hpdGVzcGFjZT4KICAgIDxzdHlsZSBpbmNsdWRlPSJwYXBlci1zcGlubmVyLXN0eWxlcyI+PC9zdHlsZT4KCiAgICA8ZGl2IGlkPSJzcGlubmVyQ29udGFpbmVyIiBjbGFzcy1uYW1lPSJbW19fY29tcHV0ZUNvbnRhaW5lckNsYXNzZXMoYWN0aXZlLCBfX2Nvb2xpbmdEb3duKV1dIiBvbi1hbmltYXRpb25lbmQ9Il9fcmVzZXQiIG9uLXdlYmtpdC1hbmltYXRpb24tZW5kPSJfX3Jlc2V0Ij4KICAgICAgPGRpdiBjbGFzcz0ic3Bpbm5lci1sYXllciBsYXllci0xIj4KICAgICAgICA8ZGl2IGNsYXNzPSJjaXJjbGUtY2xpcHBlciBsZWZ0Ij48L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJjaXJjbGUtY2xpcHBlciByaWdodCI+PC9kaXY+CiAgICAgIDwvZGl2PgoKICAgICAgPGRpdiBjbGFzcz0ic3Bpbm5lci1sYXllciBsYXllci0yIj4KICAgICAgICA8ZGl2IGNsYXNzPSJjaXJjbGUtY2xpcHBlciBsZWZ0Ij48L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJjaXJjbGUtY2xpcHBlciByaWdodCI+PC9kaXY+CiAgICAgIDwvZGl2PgoKICAgICAgPGRpdiBjbGFzcz0ic3Bpbm5lci1sYXllciBsYXllci0zIj4KICAgICAgICA8ZGl2IGNsYXNzPSJjaXJjbGUtY2xpcHBlciBsZWZ0Ij48L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJjaXJjbGUtY2xpcHBlciByaWdodCI+PC9kaXY+CiAgICAgIDwvZGl2PgoKICAgICAgPGRpdiBjbGFzcz0ic3Bpbm5lci1sYXllciBsYXllci00Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJjaXJjbGUtY2xpcHBlciBsZWZ0Ij48L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJjaXJjbGUtY2xpcHBlciByaWdodCI+PC9kaXY+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgPC90ZW1wbGF0ZT4KCiAgPHNjcmlwdD4vL35+V0VCUEFUSH5+L3BhcGVyLXNwaW5uZXIvcGFwZXItc3Bpbm5lci5odG1sLmpzClBvbHltZXIoe2lzOiJwYXBlci1zcGlubmVyIixiZWhhdmlvcnM6W1BvbHltZXIuUGFwZXJTcGlubmVyQmVoYXZpb3JdfSk7Cjwvc2NyaXB0Pgo8L2RvbS1tb2R1bGU+CgoKCgoKCgoKPGRvbS1tb2R1bGUgaWQ9ImlucHV0LXBpcGVsaW5lLWFuYWx5emVyIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGUgaW5jbHVkZT0icGxvdHRhYmxlLXN0eWxlIj48L3N0eWxlPgogICAgPHN0eWxlPgogICAgICAuc2VjdGlvbi1oZWFkZXIgewogICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICAgIGZvbnQtc2l6ZTogMjAwJTsKICAgICAgfQogICAgICAuc3ViLXNlY3Rpb24taGVhZGVyIHsKICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKICAgICAgICBmb250LXdlaWdodDogYm9sZDsKICAgICAgICBmb250LXNpemU6IDE1MCU7CiAgICAgIH0KICAgICAgI3N1bW1hcnktaG9zdCB7CiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICAgIH0KICAgICAgLmhpZ2hsaWdodGVkLXRleHQgewogICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICAgIGZvbnQtc2l6ZTogMTIwJTsKICAgICAgfQogICAgICAuc3RkZGV2LXRleHQgewogICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICAgICAgICBvcGFjaXR5OiAwLjc7CiAgICAgIH0KICAgICAgLmxlZnQtcGFuZSB7CiAgICAgICAgd2lkdGg6IDMwJTsKICAgICAgfQogICAgICAucmlnaHQtcGFuZSB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAzMDBweDsKICAgICAgfQogICAgICAudGFibGUtc3R5bGUgewogICAgICAgIHRhYmxlLWxheW91dDogZml4ZWQ7CiAgICAgICAgd2lkdGg6IDk1JTsKICAgICAgfQogICAgICAucGVyZm9ybWFuY2UtdGFibGUgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CiAgICAgIC54LWF4aXMtdGl0bGUgewogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICB0ZXh0LXRyYW5zZm9ybTogY2FwaXRhbGl6ZTsKICAgICAgfQogICAgICAueS1heGlzLXRpdGxlIHsKICAgICAgICB3cml0aW5nLW1vZGU6IGJ0LXJsOwogICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDI3MGRlZyk7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgdGV4dC10cmFuc2Zvcm06IGNhcGl0YWxpemU7CiAgICAgIH0KICAgICAgI3JlY29tbWVuZGF0aW9uX2RldGFpbHMgewogICAgICAgIGNvbG9yOiBncmVlbjsKICAgICAgfQogICAgICAjcmVjb21tZW5kYXRpb25fZGV0YWlscyBhIHsKICAgICAgICBjb2xvcjogI2ZmMzNjYzsKICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKICAgICAgfQogICAgICAjc3VtbWFyeV9jb25jbHVzaW9uIHsKICAgICAgICBmb250LXdlaWdodDogYm9sZGVyOwogICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICAgICAgICBjb2xvcjogdmFyKC0tc3VtbWFyeS1jb2xvciwgZ3JlZW4pOwogICAgICB9CiAgICAgICNzdW1tYXJ5X25leHRzdGVwIHsKICAgICAgICBmb250LXdlaWdodDogYm9sZGVyOwogICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICAgICAgICBjb2xvcjogZ3JlZW47CiAgICAgIH0KICAgICAgI3JlY29tbWVuZGF0aW9uX3RpdGxlIHsKICAgICAgICBmb250LXdlaWdodDogYm9sZGVyOwogICAgICAgIGZvbnQtc3R5bGU6IG5vcm1hbDsKICAgICAgICBjb2xvcjogYmxhY2s7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8ZGl2PgogICAgICA8ZGl2IGlkPSJzZWN0aW9uX3N1bW1hcnkiPgogICAgICAgIDxkaXYgaWQ9InRpdGxlX3N1bW1hcnkiPgogICAgICAgICAgPHAgY2xhc3M9InNlY3Rpb24taGVhZGVyIj4KICAgICAgICAgICAgU2VjdGlvbiAxOiBTdW1tYXJ5IG9mIGlucHV0LXBpcGVsaW5lIGFuYWx5c2lzCiAgICAgICAgICAKICAgICAgICA8L2Rpdj4KICAgICAgICA8cD48c3BhbiBpZD0ic3VtbWFyeV9jb25jbHVzaW9uIj5bW19zdW1tYXJ5X2NvbmNsdXNpb25dXTwvc3Bhbj4KICAgICAgICA8cD4KICAgICAgICAgIDxzcGFuIGlkPSJyZWNvbW1lbmRhdGlvbl90aXRsZSI+UmVjb21tZW5kYXRpb24gZm9yIG5leHQgc3RlcDogPC9zcGFuPjxzcGFuIGlkPSJzdW1tYXJ5X25leHRzdGVwIj5bW19zdW1tYXJ5X25leHRzdGVwXV08L3NwYW4+CiAgICAgICAgCiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGlkPSJzZWN0aW9uX2RldmljZV9zaWRlX2FuYWx5c2lzIiBoaWRkZW49IltbIV9zaG93X2RldmljZV9zaWRlX2FuYWx5c2lzXV0iPgogICAgICAgIDxkaXYgaWQ9InRpdGxlX2RldmljZV9zaWRlX2FuYWx5c2lzIj4KICAgICAgICAgIDxwIGNsYXNzPSJzZWN0aW9uLWhlYWRlciI+U2VjdGlvbiAyOiBEZXZpY2Utc2lkZSBhbmFseXNpcyBkZXRhaWxzCiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBpZD0ic2VjdGlvbl9kZXZpY2Vfc3RlcF90aW1lIj4KICAgICAgICAgIDxkaXYgaWQ9InRpdGxlX2RldmljZV9zdGVwX3RpbWUiPgogICAgICAgICAgICA8cCBjbGFzcz0ic3ViLXNlY3Rpb24taGVhZGVyIj5TZWN0aW9uIDIuMTogRGV2aWNlIHN0ZXAgdGltZQogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8dGFibGUgY2xhc3M9InRhYmxlLXN0eWxlIj4KICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgIDx0ZCBjbGFzcz0ibGVmdC1wYW5lIj4KICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJoaWdobGlnaHRlZC10ZXh0Ij4KICAgICAgICAgICAgICAgICAgICBEZXZpY2Ugc3RlcC10aW1lIHN0YXRpc3RpY3MgKGluIG1zKQogICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgICAgIDxzcGFuPjxiPkF2ZXJhZ2U6PC9iPiA8L3NwYW4+CiAgICAgICAgICAgICAgICAgIDxzcGFuPltbX3N0ZXB0aW1lX21zX2F2ZXJhZ2VdXSBtcyA8L3NwYW4+CiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzdGRkZXYtdGV4dCI+KM+DID0gW1tfc3RlcHRpbWVfbXNfc3RkZGV2XV0gbXMpPC9zcGFuPgogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICA8cD4KICAgICAgICAgICAgICAgICAgPHNwYW4+PGI+UmFuZ2U6PC9iPiA8L3NwYW4+CiAgICAgICAgICAgICAgICAgIDxzcGFuPltbX3N0ZXB0aW1lX21zX21pbmltdW1dXSAtIFtbX3N0ZXB0aW1lX21zX21heGltdW1dXQogICAgICAgICAgICAgICAgICAgIG1zPC9zcGFuPgogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICA8dGQ+PGRpdiBjbGFzcz0ieS1heGlzLXRpdGxlIj5taWxsaXNlY29uZHM8L2Rpdj48L3RkPgogICAgICAgICAgICAgIDx0ZCBjbGFzcz0icmlnaHQtcGFuZSI+CiAgICAgICAgICAgICAgICA8dnotbGluZS1jaGFydDIgaWQ9ImRldmljZV9zdGVwX2NoYXJ0IiBzdHlsZT0iaGVpZ2h0OjMwMHB4OyI+PC92ei1saW5lLWNoYXJ0Mj4KICAgICAgICAgICAgICAgIDxkaXY+PHAgY2xhc3M9IngtYXhpcy10aXRsZSI+dHJhaW5pbmcgc3RlcCBudW1iZXI8L2Rpdj4KICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICA8L3RyPgogICAgICAgICAgPC90YWJsZT4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGlkPSJzZWN0aW9uX2RldmljZV9pbmZlZWRkZXFfdGltZSI+CiAgICAgICAgICA8ZGl2IGlkPSJ0aXRsZV9kZXZpY2VfaW5mZWVkZGVxX3RpbWUiPgogICAgICAgICAgICA8cCBjbGFzcz0ic3ViLXNlY3Rpb24taGVhZGVyIj4KICAgICAgICAgICAgICA8c3Bhbj5TZWN0aW9uIDIuMjogUmFuZ2Ugb2YgZGV2aWNlIHRpbWUgd2FpdGluZyBmb3IgaW5wdXQgZGF0YQogICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgICA8c3Bhbj48aSBzdHlsZT0ib3BhY2l0eTowLjUiPmFjcm9zcyBjb3JlczwvaT4gYXQgZWFjaCBzdGVwIDwvc3Bhbj4KICAgICAgICAgICAgCiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDx0YWJsZSBjbGFzcz0idGFibGUtc3R5bGUiPgogICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgPHRkIGNsYXNzPSJsZWZ0LXBhbmUiPgogICAgICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJoaWdobGlnaHRlZC10ZXh0Ij4lIG9mIGRldmljZSBzdGVwIHRpbWUgd2FpdGluZyBmb3IgaW5wdXQgZGF0YTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgPHNwYW4+CiAgICAgICAgICAgICAgICAgICAgKGF2ZXJhZ2Ugb3ZlciB0aGUgbWF4aW11bSB3YWl0aW5nIHRpbWUgYWNyb3NzIGNvcmVzIGF0IGVhY2gKICAgICAgICAgICAgICAgICAgICBzdGVwKTwvc3Bhbj4KICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgICAgIDxzcGFuPjxiPkF2ZXJhZ2U6PC9iPiA8L3NwYW4+CiAgICAgICAgICAgICAgICAgIDxzcGFuPltbX2luZmVlZF9wZXJjZW50X2F2ZXJhZ2VdXSAlIDwvc3Bhbj4KICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InN0ZGRldi10ZXh0Ij4oz4MgPSBbW19pbmZlZWRfcGVyY2VudF9zdGRkZXZdXSAlKTwvc3Bhbj4KICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgICAgIDxzcGFuPjxiPlJhbmdlOjwvYj4gPC9zcGFuPgogICAgICAgICAgICAgICAgICA8c3Bhbj5bW19pbmZlZWRfcGVyY2VudF9taW5pbXVtXV0gLSBbW19pbmZlZWRfcGVyY2VudF9tYXhpbXVtXV0KICAgICAgICAgICAgICAgICAgICAlPC9zcGFuPgogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ5LWF4aXMtdGl0bGUiPjxwPiUgb2YgZGV2aWNlIHN0ZXAgdGltZTwvZGl2PgogICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgPHRkIGNsYXNzPSJyaWdodC1wYW5lIj4KICAgICAgICAgICAgICAgIDx2ei1saW5lLWNoYXJ0MiBpZD0iZGV2aWNlX2luZmVlZF9jaGFydCIgc3R5bGU9ImhlaWdodDozMDBweDsiPjwvdnotbGluZS1jaGFydDI+CiAgICAgICAgICAgICAgICA8ZGl2PjxwIGNsYXNzPSJ4LWF4aXMtdGl0bGUiPnRyYWluaW5nIHN0ZXAgbnVtYmVyPC9kaXY+CiAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgPC90cj4KICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGlkPSJzZWN0aW9uX2hvc3Rfc2lkZV9hbmFseXNpcyI+CiAgICAgICAgPGRpdiBpZD0idGl0bGVfaG9zdF9zaWRlX2FuYWx5c2lzIj4KICAgICAgICAgIDxwIGNsYXNzPSJzZWN0aW9uLWhlYWRlciI+U2VjdGlvbiAzOiBIb3N0LXNpZGUgYW5hbHlzaXMgZGV0YWlscwogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgaGlkZGVuJD0iW1shX3Nob3dfaG9zdF9zaWRlX2NoYXJ0XV0iPgogICAgICAgICAgPGRpdiBzdHlsZT0iaGVpZ2h0OjMwMHB4OyIgaWQ9Imhvc3Rfc2lkZV9jaGFydCI+PC9kaXY+CiAgICAgICAgICA8cD4KICAgICAgICAgICAgPHNwYW4+PGI+V2hhdCBjYW4gYmUgZG9uZSB0byByZWR1Y2UgYWJvdmUgY29tcG9uZW50cyBvZiB0aGUgaG9zdCBpbnB1dAogICAgICAgICAgICAgICAgdGltZTo8L2I+PC9zcGFuPgogICAgICAgICAgCiAgICAgICAgICA8ZGl2IGlkPSJyZWNvbW1lbmRhdGlvbl9kZXRhaWxzIj48L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGhpZGRlbiQ9IltbX3Nob3dfaG9zdF9zaWRlX2NoYXJ0XV0iPgogICAgICAgICAgSG9zdCBzaWRlIGFuYWx5c2lzIGNhbiBub3QgYmUgZG9uZSB3aXRob3V0IGluc3RydW1lbnRhdGlvbi4KICAgICAgICA8L2Rpdj4KICAgICAgICA8cD4KICAgICAgICAgIENsaWNrIHRoZSAiU2hvdyIgYnV0dG9uIGJlbG93IHRvIHNlZSB0aGUgc291cmNlIGRhdGEgb2YgdGhlIGJyZWFrZG93bi4KICAgICAgICAKICAgICAgICA8YnV0dG9uIG9uLWNsaWNrPSJvbkNsaWNrIj5bW190b2dnbGVfYnV0dG9uX3RleHRdXTwvYnV0dG9uPgogICAgICAgIDx0YWJsZSBjbGFzcz0icGVyZm9ybWFuY2UtdGFibGUiIGhpZGRlbiQ9IltbIV9zaG93X2hvc3Rfc2lkZV90YWJsZV1dIj4KICAgICAgICAgIDx0aGVhZD4KICAgICAgICAgICAgPHRyPjx0aD5JbnB1dCBPcDwvdGg+CiAgICAgICAgICAgIDx0aD5Db3VudDwvdGg+CiAgICAgICAgICAgIDx0aD5Ub3RhbCBUaW1lIChpbiBtcyk8L3RoPgogICAgICAgICAgICA8dGg+VG90YWwgVGltZSAoYXMgJSBvZiB0b3RhbCBpbnB1dC1wcm9jZXNzaW5nIHRpbWUpPC90aD4KICAgICAgICAgICAgPHRoPlRvdGFsIFNlbGYgVGltZSAoaW4gbXMpPC90aD4KICAgICAgICAgICAgPHRoPlRvdGFsIFNlbGYgVGltZSAoYXMgJSBvZiB0b3RhbCBpbnB1dC1wcm9jZXNzaW5nIHRpbWUpPC90aD4KICAgICAgICAgICAgPHRoPkNhdGVnb3J5PC90aD4KICAgICAgICAgIDwvdGhlYWQ+CiAgICAgICAgICA8dGJvZHkgaWQ9Imhvc3Rfc2lkZV90YWJsZV9jb250ZW50Ij48L3Rib2R5PgogICAgICAgIDwvdGFibGU+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgPC90ZW1wbGF0ZT4KCiAgPHNjcmlwdD4vL35+V0VCUEFUSH5+L3RmLWlucHV0LXBpcGVsaW5lL2lucHV0LXBpcGVsaW5lLWFuYWx5emVyLmh0bWwuanMKUG9seW1lcih7aXM6ImlucHV0LXBpcGVsaW5lLWFuYWx5emVyIixwcm9wZXJ0aWVzOntfZGF0YTp7dHlwZTpPYmplY3Qsb2JzZXJ2ZXI6Il91cGRhdGVWaWV3In0sX3Nob3dfZGV2aWNlX3NpZGVfYW5hbHlzaXM6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMCxub3RpZnk6ITB9LF9zaG93X2hvc3Rfc2lkZV9jaGFydDp7dHlwZTpCb29sZWFuLHZhbHVlOiEwLG5vdGlmeTohMH0sX3Nob3dfaG9zdF9zaWRlX3RhYmxlOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEsbm90aWZ5OiEwfSxfdG9nZ2xlX2J1dHRvbl90ZXh0Ont0eXBlOlN0cmluZyxjb21wdXRlZDoiX2dldFRvZ2dsZUJ1dHRvblRleHQoX3Nob3dfaG9zdF9zaWRlX3RhYmxlKSJ9LF9kZXZpY2VKc29uOnt0eXBlOlN0cmluZyxub3RpZnk6ITB9LF9ob3N0SnNvbjp7dHlwZTpTdHJpbmcsbm90aWZ5OiEwfSxfcmVjb21tZW5kYXRpb25Kc29uOnt0eXBlOlN0cmluZyxub3RpZnk6ITB9LF9hY3RpdmU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxub3RpZnk6ITAsCm9ic2VydmVyOiJfb25BY3RpdmVDaGFuZ2VkIn0sX3N1bW1hcnlfY29uY2x1c2lvbjp7dHlwZTpTdHJpbmcsbm90aWZ5OiEwfSxfc3VtbWFyeV9uZXh0c3RlcDp7dHlwZTpTdHJpbmcsbm90aWZ5OiEwfSxfaW5mZWVkX3BlcmNlbnRfYXZlcmFnZTp7dHlwZTpTdHJpbmcsbm90aWZ5OiEwfSxfaW5mZWVkX3BlcmNlbnRfc3RkZGV2Ont0eXBlOlN0cmluZyxub3RpZnk6ITB9LF9pbmZlZWRfcGVyY2VudF9taW5pbXVtOnt0eXBlOlN0cmluZyxub3RpZnk6ITB9LF9pbmZlZWRfcGVyY2VudF9tYXhpbXVtOnt0eXBlOlN0cmluZyxub3RpZnk6ITB9LF9zdGVwdGltZV9tc19hdmVyYWdlOnt0eXBlOlN0cmluZyxub3RpZnk6ITB9LF9zdGVwdGltZV9tc19zdGRkZXY6e3R5cGU6U3RyaW5nLG5vdGlmeTohMH0sX3N0ZXB0aW1lX21zX21pbmltdW06e3R5cGU6U3RyaW5nLG5vdGlmeTohMH0sX3N0ZXB0aW1lX21zX21heGltdW06e3R5cGU6U3RyaW5nLG5vdGlmeTohMH19LG9ic2VydmVyczpbIl9zaG93RGV2aWNlU3RlcENoYXJ0KF9kZXZpY2VKc29uKSIsCiJfc2hvd0RldmljZUluZmVlZENoYXJ0KF9kZXZpY2VKc29uKSIsIl9zaG93SG9zdENoYXJ0KF9ob3N0SnNvbikiLCJfc2hvd0hvc3RUYWJsZShfaG9zdEpzb24pIiwiX21ha2VSZWNvbW1lbmRhdGlvbnMoX3JlY29tbWVuZGF0aW9uSnNvbikiXSxvbkNsaWNrOmZ1bmN0aW9uKCl7dGhpcy5zZXQoIl9zaG93X2hvc3Rfc2lkZV90YWJsZSIsIXRoaXMuX3Nob3dfaG9zdF9zaWRlX3RhYmxlKX0sX29uQWN0aXZlQ2hhbmdlZDpmdW5jdGlvbihhKXthfHwodGhpcy5fc2hvd19ob3N0X3NpZGVfdGFibGU9dGhpcy5fc2hvd19ob3N0X3NpZGVfY2hhcnQ9dGhpcy5fc2hvd19kZXZpY2Vfc2lkZV9hbmFseXNpcz0hMSl9LF9nZXRUb2dnbGVCdXR0b25UZXh0OmZ1bmN0aW9uKGEpe3JldHVybihhPyJIaWRlIjoiU2hvdyIpKyIgSW5wdXQgT3AgU3RhdGlzdGljcyJ9LF91c1RvTXM6ZnVuY3Rpb24oYSl7cmV0dXJuIE1hdGguYWJzKE51bWJlcihhKSkvMUUzfSxfdXBkYXRlVmlldzpmdW5jdGlvbigpe2lmKHRoaXMuX2RhdGEmJgp0aGlzLl9hY3RpdmUpe3ZhciBhPXRoaXMuX2RhdGFbMF07dGhpcy5fZGV2aWNlSnNvbj1hO3RoaXMuX2hvc3RKc29uPXRoaXMuX2RhdGFbMl07dGhpcy5fcmVjb21tZW5kYXRpb25Kc29uPXRoaXMuX2RhdGFbM107dGhpcy5fc3VtbWFyeV9jb25jbHVzaW9uPWEucC5zdW1tYXJ5X2NvbmNsdXNpb247dGhpcy5fc3VtbWFyeV9uZXh0c3RlcD1hLnAuc3VtbWFyeV9uZXh0c3RlcDt0aGlzLl9pbmZlZWRfcGVyY2VudF9hdmVyYWdlPWEucC5pbmZlZWRfcGVyY2VudF9hdmVyYWdlO3RoaXMuX2luZmVlZF9wZXJjZW50X3N0ZGRldj1hLnAuaW5mZWVkX3BlcmNlbnRfc3RhbmRhcmRfZGV2aWF0aW9uO3RoaXMuX2luZmVlZF9wZXJjZW50X21pbmltdW09YS5wLmluZmVlZF9wZXJjZW50X21pbmltdW07dGhpcy5faW5mZWVkX3BlcmNlbnRfbWF4aW11bT1hLnAuaW5mZWVkX3BlcmNlbnRfbWF4aW11bTt0aGlzLl9zdGVwdGltZV9tc19hdmVyYWdlPWEucC5zdGVwdGltZV9tc19hdmVyYWdlO3RoaXMuX3N0ZXB0aW1lX21zX3N0ZGRldj0KYS5wLnN0ZXB0aW1lX21zX3N0YW5kYXJkX2RldmlhdGlvbjt0aGlzLl9zdGVwdGltZV9tc19taW5pbXVtPWEucC5zdGVwdGltZV9tc19taW5pbXVtO3RoaXMuX3N0ZXB0aW1lX21zX21heGltdW09YS5wLnN0ZXB0aW1lX21zX21heGltdW07dGhpcy5fc3VtbWFyeV9jb25jbHVzaW9uLmluY2x1ZGVzKCJISUdITFkiKT90aGlzLmN1c3RvbVN0eWxlWyItLXN1bW1hcnktY29sb3IiXT0icmVkIjp0aGlzLl9zdW1tYXJ5X2NvbmNsdXNpb24uaW5jbHVkZXMoIk1PREVSQVRFIikmJih0aGlzLmN1c3RvbVN0eWxlWyItLXN1bW1hcnktY29sb3IiXT0ib3JhbmdlIik7dGhpcy51cGRhdGVTdHlsZXMoKX19LF9zaG93RGV2aWNlU3RlcENoYXJ0OmZ1bmN0aW9uKGEpe2lmKGEmJjAhPWEucm93cy5sZW5ndGgmJnRoaXMuX2FjdGl2ZSl7dGhpcy5fc2hvd19kZXZpY2Vfc2lkZV9hbmFseXNpcz0hMDt2YXIgYz1bXSxkPVtdLGY9MCxnPS0xO2Eucm93cy5mb3JFYWNoKGZ1bmN0aW9uKGwpe2c9MDxnPysrZzoKTnVtYmVyKGwuY1swXS52KTtjLnB1c2goe3NjYWxhcjpsLmNbMV0udixzdGVwOmcsdHB1X3N0ZXA6TnVtYmVyKGwuY1swXS52KSxsb3dfd2F0ZXJtYXJrOjB9KTtkLnB1c2goe3NjYWxhcjpsLmNbMV0uditsLmNbMl0udixzdGVwOmcsbG93X3dhdGVybWFyazpsLmNbMV0udn0pO2Y9TWF0aC5tYXgoZixsLmNbMV0uditsLmNbMl0udil9KTtpZihhPXRoaXMuJC5kZXZpY2Vfc3RlcF9jaGFydClhLnNldFZpc2libGVTZXJpZXMoWyJkZXZpY2Ugc3RlcCB0aW1lIiwiY29tcHV0ZSB0aW1lIl0pLGEuc2V0U2VyaWVzRGF0YSgiZGV2aWNlIHN0ZXAgdGltZSIsZCksYS5zZXRTZXJpZXNEYXRhKCJjb21wdXRlIHRpbWUiLGMpLGEuZGVmYXVsdFlSYW5nZT1bMCwxLjEqZl0sYS5zbW9vdGhpbmdFbmFibGVkPSExLGEudG9vbHRpcENvbHVtbnM9W3t0aXRsZToiTmFtZSIsZXZhbHVhdGU6bD0+bC5kYXRhc2V0Lm1ldGFkYXRhKCkubmFtZX0se3RpdGxlOiJUaW1lKG1zKSIsZXZhbHVhdGU6bD0+bC5kYXR1bS5zY2FsYXIudG9GaXhlZCgyKX0sCnt0aXRsZToiU3RlcCIsZXZhbHVhdGU6bD0+bC5kYXR1bS5zdGVwfV0sYS5maWxsQXJlYT17aGlnaGVyQWNjZXNzb3I6bD0+bC5zY2FsYXIsbG93ZXJBY2Nlc3NvcjpsPT5sLmxvd193YXRlcm1hcmt9LGEueEF4aXNGb3JtYXR0ZXI9ZDMuZm9ybWF0KCJkIil9ZWxzZSB0aGlzLl9zaG93X2RldmljZV9zaWRlX2FuYWx5c2lzPSExfSxfc2hvd0RldmljZUluZmVlZENoYXJ0OmZ1bmN0aW9uKGEpe2lmKGEmJjAhPWEucm93cy5sZW5ndGgpe3ZhciBjPVtdLGQ9LTE7YS5yb3dzLmZvckVhY2goZnVuY3Rpb24oZil7ZD0wPGQ/KytkOk51bWJlcihmLmNbMF0udik7Yy5wdXNoKHtzdGVwOmQsdHB1X3N0ZXA6TnVtYmVyKGYuY1swXS52KSxzY2FsYXI6Zi5jWzRdLnYsbWluOmYuY1s1XS52LG1heDpmLmNbNl0udn0pfSk7aWYoYT10aGlzLiQuZGV2aWNlX2luZmVlZF9jaGFydClhLnNldFZpc2libGVTZXJpZXMoWyJpbnB1dCB0aW1lJSJdKSxhLnNldFNlcmllc0RhdGEoImlucHV0IHRpbWUlIixjKSwKYS50b29sdGlwQ29sdW1ucz1be3RpdGxlOiJOYW1lIixldmFsdWF0ZTpmPT5mLmRhdGFzZXQubWV0YWRhdGEoKS5uYW1lfSx7dGl0bGU6IlN0ZXAiLGV2YWx1YXRlOmY9PmYuZGF0dW0udHB1X3N0ZXB9LHt0aXRsZToiQXZlcmFnZSglKSIsZXZhbHVhdGU6Zj0+Zi5kYXR1bS5zY2FsYXIudG9GaXhlZCg0KSsiJSJ9LHt0aXRsZToiTWluKCUpIixldmFsdWF0ZTpmPT5mLmRhdHVtLm1pbi50b0ZpeGVkKDQpKyIlIn0se3RpdGxlOiJNYXgoJSkiLGV2YWx1YXRlOmY9PmYuZGF0dW0ubWF4LnRvRml4ZWQoNCkrIiUifV0sYS5maWxsQXJlYT17aGlnaGVyQWNjZXNzb3I6Zj0+Zi5tYXgsbG93ZXJBY2Nlc3NvcjpmPT5mLm1pbn0sYS54QXhpc0Zvcm1hdHRlcj1kMy5mb3JtYXQoImQiKX1lbHNlIHRoaXMuX3Nob3dfZGV2aWNlX3NpZGVfYW5hbHlzaXM9ITF9LF9zaG93SG9zdENoYXJ0OmZ1bmN0aW9uKGEpe2lmKGEpe3ZhciBjPXRoaXMuX3VzVG9NcyhhLnAudW5jbGFzc2lmaWVkX25vbmVxdWV1ZV91cyksCmQ9dGhpcy5fdXNUb01zKGEucC5kZW1hbmRlZF9maWxlX3JlYWRfdXMpLGY9dGhpcy5fdXNUb01zKGEucC5hZHZhbmNlZF9maWxlX3JlYWRfdXMpLGc9dGhpcy5fdXNUb01zKGEucC5wcmVwcm9jZXNzaW5nX3VzKTthPXRoaXMuX3VzVG9NcyhhLnAuZW5xdWV1ZV91cyk7dmFyIGw9YytkK2YrZythO3RoaXMuX3Nob3dfaG9zdF9zaWRlX2NoYXJ0PTA8bDswPGwmJihmPVt7TmFtZToiT3RoZXIgZGF0YSByZWFkaW5nIG9yIHByb2Nlc3NpbmciLFRvdGFsOmMvbCoxMDB9LHtOYW1lOiJSZWFkaW5nIGRhdGEgZnJvbSBmaWxlcyBvbiBkZW1hbmQiLFRvdGFsOmQvbCoxMDB9LHtOYW1lOiJSZWFkaW5nIGRhdGEgZnJvbSBmaWxlcyBpbiBhZHZhbmNlIFtpbmNsdWRpbmcgY2FjaGluZywgcHJlZmV0Y2hpbmcsIGludGVybGVhdmluZ10iLFRvdGFsOmYvbCoxMDB9LHtOYW1lOiJEYXRhIHByZXByb2Nlc3NpbmciLFRvdGFsOmcvbCoxMDB9LHtOYW1lOiJFbnF1ZXVpbmcgZGF0YSB0byBiZSB0cmFuc2ZlcnJlZCB0byBkZXZpY2UiLApUb3RhbDphL2wqMTAwfV0sZz1uZXcgUGxvdHRhYmxlLlNjYWxlcy5Db2xvcixkPW5ldyBQbG90dGFibGUuQ29tcG9uZW50cy5MZWdlbmQoZyksYz1kMy5zZWxlY3QodGhpcy4kLmhvc3Rfc2lkZV9jaGFydCksZj0obmV3IFBsb3R0YWJsZS5QbG90cy5QaWUpLmF0dHIoImZpbGwiLGZ1bmN0aW9uKGspe3JldHVybiBrLk5hbWV9LGcpLmFkZERhdGFzZXQobmV3IFBsb3R0YWJsZS5EYXRhc2V0KGYpKS5zZWN0b3JWYWx1ZShmdW5jdGlvbihrKXtyZXR1cm4gay5Ub3RhbH0pLmxhYmVsc0VuYWJsZWQoITApLmxhYmVsRm9ybWF0dGVyKGZ1bmN0aW9uKGspe3JldHVybiBOdW1iZXIoaykudG9GaXhlZCgyKSsiJSJ9KSxkPW5ldyBQbG90dGFibGUuQ29tcG9uZW50cy5UYWJsZShbW2YsZF1dKSxjLnNlbGVjdCgiKiIpLnJlbW92ZSgpLGQucmVuZGVyVG8oYykpfX0sX3Nob3dIb3N0VGFibGU6ZnVuY3Rpb24oYSl7aWYoYSl7dmFyIGM9dGhpcy4kLmhvc3Rfc2lkZV90YWJsZV9jb250ZW50O2MuaW5uZXJIVE1MPQoiIjt0aGlzLl9zaG93X2hvc3Rfc2lkZV90YWJsZT0hMTswIT1hLnJvd3MubGVuZ3RoJiZhLnJvd3MuZm9yRWFjaChmdW5jdGlvbihkKXtsZXQgZj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ciIpO1BvbHltZXIuZG9tKGMpLmFwcGVuZENoaWxkKGYpO2xldCBnPVtdO2cucHVzaChkLmNbMF0udik7Zy5wdXNoKGQuY1sxXS52KTtnLnB1c2goZC5jWzJdLnYudG9GaXhlZCgyKSk7Zy5wdXNoKCgxMDAqZC5jWzNdLnYpLnRvRml4ZWQoMikrIiUiKTtnLnB1c2goZC5jWzRdLnYudG9GaXhlZCgyKSk7Zy5wdXNoKCgxMDAqZC5jWzVdLnYpLnRvRml4ZWQoMikrIiUiKTtnLnB1c2goZC5jWzZdLnYpO2cuZm9yRWFjaChmdW5jdGlvbihsKXtsZXQgaz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpO1BvbHltZXIuZG9tKGYpLmFwcGVuZENoaWxkKGspO1BvbHltZXIuZG9tKGspLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGwpKX0pfSl9fSxfbWFrZVJlY29tbWVuZGF0aW9uczpmdW5jdGlvbihhKXtpZihhKXt2YXIgYz0KIiI7YS5yb3dzLmZvckVhY2goZnVuY3Rpb24oZCl7Yys9Ilx4M2NsaVx4M2UiK2QuY1swXS52KyJceDNjL2xpXHgzZSJ9KTt0aGlzLiQucmVjb21tZW5kYXRpb25fZGV0YWlscy5pbm5lckhUTUw9Y319LGF0dGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fYWN0aXZlPSEwO3RoaXMuX3VwZGF0ZVZpZXcoKX0sZGV0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl9hY3RpdmU9ITF9fSk7Cjwvc2NyaXB0Pgo8L2RvbS1tb2R1bGU+CgoKCgoKCgoKPGRvbS1tb2R1bGUgaWQ9Imlyb24taW1hZ2UiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfQoKICAgICAgI2Jhc2VVUklBbmNob3IgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KCiAgICAgICNzaXplZEltZ0RpdiB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMHB4OwogICAgICAgIHJpZ2h0OiAwcHg7CiAgICAgICAgYm90dG9tOiAwcHg7CiAgICAgICAgbGVmdDogMHB4OwoKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICB9CgogICAgICAjaW1nIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICB3aWR0aDogdmFyKC0taXJvbi1pbWFnZS13aWR0aCwgYXV0byk7CiAgICAgICAgaGVpZ2h0OiB2YXIoLS1pcm9uLWltYWdlLWhlaWdodCwgYXV0byk7CiAgICAgIH0KCiAgICAgIDpob3N0KFtzaXppbmddKSAjc2l6ZWRJbWdEaXYgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CgogICAgICA6aG9zdChbc2l6aW5nXSkgI2ltZyB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQoKICAgICAgI3BsYWNlaG9sZGVyIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwcHg7CiAgICAgICAgcmlnaHQ6IDBweDsKICAgICAgICBib3R0b206IDBweDsKICAgICAgICBsZWZ0OiAwcHg7CgogICAgICAgIGJhY2tncm91bmQtY29sb3I6IGluaGVyaXQ7CiAgICAgICAgb3BhY2l0eTogMTsKCiAgICAgICAgQGFwcGx5IC0taXJvbi1pbWFnZS1wbGFjZWhvbGRlcjsKICAgICAgfQoKICAgICAgI3BsYWNlaG9sZGVyLmZhZGVkLW91dCB7CiAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjVzIGxpbmVhcjsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxhIGlkPSJiYXNlVVJJQW5jaG9yIiBocmVmPSIjIj48L2E+CiAgICA8ZGl2IGlkPSJzaXplZEltZ0RpdiIgcm9sZT0iaW1nIiBoaWRkZW4kPSJbW19jb21wdXRlSW1nRGl2SGlkZGVuKHNpemluZyldXSIgYXJpYS1oaWRkZW4kPSJbW19jb21wdXRlSW1nRGl2QVJJQUhpZGRlbihhbHQpXV0iIGFyaWEtbGFiZWwkPSJbW19jb21wdXRlSW1nRGl2QVJJQUxhYmVsKGFsdCwgc3JjKV1dIj48L2Rpdj4KICAgIDxpbWcgaWQ9ImltZyIgYWx0JD0iW1thbHRdXSIgaGlkZGVuJD0iW1tfY29tcHV0ZUltZ0hpZGRlbihzaXppbmcpXV0iIGNyb3Nzb3JpZ2luJD0iW1tjcm9zc29yaWdpbl1dIiBvbi1sb2FkPSJfaW1nT25Mb2FkIiBvbi1lcnJvcj0iX2ltZ09uRXJyb3IiPgogICAgPGRpdiBpZD0icGxhY2Vob2xkZXIiIGhpZGRlbiQ9IltbX2NvbXB1dGVQbGFjZWhvbGRlckhpZGRlbihwcmVsb2FkLCBmYWRlLCBsb2FkaW5nLCBsb2FkZWQpXV0iIGNsYXNzJD0iW1tfY29tcHV0ZVBsYWNlaG9sZGVyQ2xhc3NOYW1lKHByZWxvYWQsIGZhZGUsIGxvYWRpbmcsIGxvYWRlZCldXSI+PC9kaXY+CiAgPC90ZW1wbGF0ZT4KCiAgPHNjcmlwdD4vL35+V0VCUEFUSH5+L2lyb24taW1hZ2UvaXJvbi1pbWFnZS5odG1sLmpzClBvbHltZXIoe2lzOiJpcm9uLWltYWdlIixwcm9wZXJ0aWVzOntzcmM6e3R5cGU6U3RyaW5nLHZhbHVlOiIifSxhbHQ6e3R5cGU6U3RyaW5nLHZhbHVlOm51bGx9LGNyb3Nzb3JpZ2luOnt0eXBlOlN0cmluZyx2YWx1ZTpudWxsfSxwcmV2ZW50TG9hZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxzaXppbmc6e3R5cGU6U3RyaW5nLHZhbHVlOm51bGwscmVmbGVjdFRvQXR0cmlidXRlOiEwfSxwb3NpdGlvbjp7dHlwZTpTdHJpbmcsdmFsdWU6ImNlbnRlciJ9LHByZWxvYWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0scGxhY2Vob2xkZXI6e3R5cGU6U3RyaW5nLHZhbHVlOm51bGwsb2JzZXJ2ZXI6Il9wbGFjZWhvbGRlckNoYW5nZWQifSxmYWRlOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGxvYWRlZDp7bm90aWZ5OiEwLHJlYWRPbmx5OiEwLHR5cGU6Qm9vbGVhbix2YWx1ZTohMX0sbG9hZGluZzp7bm90aWZ5OiEwLHJlYWRPbmx5OiEwLHR5cGU6Qm9vbGVhbix2YWx1ZTohMX0sZXJyb3I6e25vdGlmeTohMCwKcmVhZE9ubHk6ITAsdHlwZTpCb29sZWFuLHZhbHVlOiExfSx3aWR0aDp7b2JzZXJ2ZXI6Il93aWR0aENoYW5nZWQiLHR5cGU6TnVtYmVyLHZhbHVlOm51bGx9LGhlaWdodDp7b2JzZXJ2ZXI6Il9oZWlnaHRDaGFuZ2VkIix0eXBlOk51bWJlcix2YWx1ZTpudWxsfX0sb2JzZXJ2ZXJzOlsiX3RyYW5zZm9ybUNoYW5nZWQoc2l6aW5nLCBwb3NpdGlvbikiLCJfbG9hZFN0YXRlT2JzZXJ2ZXIoc3JjLCBwcmV2ZW50TG9hZCkiXSxjcmVhdGVkOmZ1bmN0aW9uKCl7dGhpcy5fcmVzb2x2ZWRTcmM9IiJ9LF9pbWdPbkxvYWQ6ZnVuY3Rpb24oKXt0aGlzLiQuaW1nLnNyYz09PXRoaXMuX3Jlc29sdmVTcmModGhpcy5zcmMpJiYodGhpcy5fc2V0TG9hZGluZyghMSksdGhpcy5fc2V0TG9hZGVkKCEwKSx0aGlzLl9zZXRFcnJvcighMSkpfSxfaW1nT25FcnJvcjpmdW5jdGlvbigpe3RoaXMuJC5pbWcuc3JjPT09dGhpcy5fcmVzb2x2ZVNyYyh0aGlzLnNyYykmJih0aGlzLiQuaW1nLnJlbW92ZUF0dHJpYnV0ZSgic3JjIiksCnRoaXMuJC5zaXplZEltZ0Rpdi5zdHlsZS5iYWNrZ3JvdW5kSW1hZ2U9IiIsdGhpcy5fc2V0TG9hZGluZyghMSksdGhpcy5fc2V0TG9hZGVkKCExKSx0aGlzLl9zZXRFcnJvcighMCkpfSxfY29tcHV0ZVBsYWNlaG9sZGVySGlkZGVuOmZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMucHJlbG9hZHx8IXRoaXMuZmFkZSYmIXRoaXMubG9hZGluZyYmdGhpcy5sb2FkZWR9LF9jb21wdXRlUGxhY2Vob2xkZXJDbGFzc05hbWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcmVsb2FkJiZ0aGlzLmZhZGUmJiF0aGlzLmxvYWRpbmcmJnRoaXMubG9hZGVkPyJmYWRlZC1vdXQiOiIifSxfY29tcHV0ZUltZ0RpdkhpZGRlbjpmdW5jdGlvbigpe3JldHVybiF0aGlzLnNpemluZ30sX2NvbXB1dGVJbWdEaXZBUklBSGlkZGVuOmZ1bmN0aW9uKCl7cmV0dXJuIiI9PT10aGlzLmFsdD8idHJ1ZSI6dm9pZCAwfSxfY29tcHV0ZUltZ0RpdkFSSUFMYWJlbDpmdW5jdGlvbigpe3JldHVybiBudWxsIT09dGhpcy5hbHQ/dGhpcy5hbHQ6CiIiPT09dGhpcy5zcmM/IiI6dGhpcy5fcmVzb2x2ZVNyYyh0aGlzLnNyYykucmVwbGFjZSgvWz98I10uKi9nLCIiKS5zcGxpdCgiLyIpLnBvcCgpfSxfY29tcHV0ZUltZ0hpZGRlbjpmdW5jdGlvbigpe3JldHVybiEhdGhpcy5zaXppbmd9LF93aWR0aENoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLnN0eWxlLndpZHRoPWlzTmFOKHRoaXMud2lkdGgpP3RoaXMud2lkdGg6dGhpcy53aWR0aCsicHgifSxfaGVpZ2h0Q2hhbmdlZDpmdW5jdGlvbigpe3RoaXMuc3R5bGUuaGVpZ2h0PWlzTmFOKHRoaXMuaGVpZ2h0KT90aGlzLmhlaWdodDp0aGlzLmhlaWdodCsicHgifSxfbG9hZFN0YXRlT2JzZXJ2ZXI6ZnVuY3Rpb24oYSxjKXt2YXIgZD10aGlzLl9yZXNvbHZlU3JjKGEpO2QhPT10aGlzLl9yZXNvbHZlZFNyYyYmKHRoaXMuX3Jlc29sdmVkU3JjPSIiLHRoaXMuJC5pbWcucmVtb3ZlQXR0cmlidXRlKCJzcmMiKSx0aGlzLiQuc2l6ZWRJbWdEaXYuc3R5bGUuYmFja2dyb3VuZEltYWdlPSIiLCIiPT09CmF8fGM/dGhpcy5fc2V0TG9hZGluZyghMSk6KHRoaXMuX3Jlc29sdmVkU3JjPWQsdGhpcy4kLmltZy5zcmM9dGhpcy5fcmVzb2x2ZWRTcmMsdGhpcy4kLnNpemVkSW1nRGl2LnN0eWxlLmJhY2tncm91bmRJbWFnZT0ndXJsKCInK3RoaXMuX3Jlc29sdmVkU3JjKyciKScsdGhpcy5fc2V0TG9hZGluZyghMCkpLHRoaXMuX3NldExvYWRlZCghMSksdGhpcy5fc2V0RXJyb3IoITEpKX0sX3BsYWNlaG9sZGVyQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMuJC5wbGFjZWhvbGRlci5zdHlsZS5iYWNrZ3JvdW5kSW1hZ2U9dGhpcy5wbGFjZWhvbGRlcj8ndXJsKCInK3RoaXMucGxhY2Vob2xkZXIrJyIpJzoiIn0sX3RyYW5zZm9ybUNoYW5nZWQ6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLiQuc2l6ZWRJbWdEaXYuc3R5bGUsYz10aGlzLiQucGxhY2Vob2xkZXIuc3R5bGU7YS5iYWNrZ3JvdW5kU2l6ZT1jLmJhY2tncm91bmRTaXplPXRoaXMuc2l6aW5nO2EuYmFja2dyb3VuZFBvc2l0aW9uPWMuYmFja2dyb3VuZFBvc2l0aW9uPQp0aGlzLnNpemluZz90aGlzLnBvc2l0aW9uOiIiO2EuYmFja2dyb3VuZFJlcGVhdD1jLmJhY2tncm91bmRSZXBlYXQ9dGhpcy5zaXppbmc/Im5vLXJlcGVhdCI6IiJ9LF9yZXNvbHZlU3JjOmZ1bmN0aW9uKGEpe2E9UG9seW1lci5SZXNvbHZlVXJsLnJlc29sdmVVcmwoYSx0aGlzLiQuYmFzZVVSSUFuY2hvci5ocmVmKTsiLyI9PT1hWzBdJiYoYT0obG9jYXRpb24ub3JpZ2lufHxsb2NhdGlvbi5wcm90b2NvbCsiLy8iK2xvY2F0aW9uLmhvc3QpK2EpO3JldHVybiBhfX0pOwo8L3NjcmlwdD4KPC9kb20tbW9kdWxlPgoKCgoKCgo8ZG9tLW1vZHVsZSBpZD0icGFwZXItY2FyZCI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlIGluY2x1ZGU9InBhcGVyLW1hdGVyaWFsLXN0eWxlcyI+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItY2FyZC1iYWNrZ3JvdW5kLWNvbG9yLCB2YXIoLS1wcmltYXJ5LWJhY2tncm91bmQtY29sb3IpKTsKICAgICAgICBib3JkZXItcmFkaXVzOiAycHg7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLWJhc2U7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItY2FyZDsKICAgICAgfQoKICAgICAgLyogSUUgMTAgc3VwcG9ydCBmb3IgSFRNTDUgaGlkZGVuIGF0dHIgKi8KICAgICAgOmhvc3QoW2hpZGRlbl0pLCBbaGlkZGVuXSB7CiAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgICB9CgogICAgICAuaGVhZGVyIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogaW5oZXJpdDsKICAgICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogaW5oZXJpdDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1jYXJkLWhlYWRlcjsKICAgICAgfQoKICAgICAgLmhlYWRlciBpcm9uLWltYWdlIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICAtLWlyb24taW1hZ2Utd2lkdGg6IDEwMCU7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWNhcmQtaGVhZGVyLWltYWdlOwogICAgICB9CgogICAgICAuaGVhZGVyIC50aXRsZS10ZXh0IHsKICAgICAgICBwYWRkaW5nOiAxNnB4OwogICAgICAgIGZvbnQtc2l6ZTogMjRweDsKICAgICAgICBmb250LXdlaWdodDogNDAwOwogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1jYXJkLWhlYWRlci1jb2xvciwgIzAwMCk7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWNhcmQtaGVhZGVyLXRleHQ7CiAgICAgIH0KCiAgICAgIC5oZWFkZXIgLnRpdGxlLXRleHQub3Zlci1pbWFnZSB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGJvdHRvbTogMHB4OwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1jYXJkLWhlYWRlci1pbWFnZS10ZXh0OwogICAgICB9CgogICAgICA6aG9zdCA6OnNsb3R0ZWQoLmNhcmQtY29udGVudCkgewogICAgICAgIHBhZGRpbmc6IDE2cHg7CiAgICAgICAgcG9zaXRpb246cmVsYXRpdmU7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWNhcmQtY29udGVudDsKICAgICAgfQoKICAgICAgOmhvc3QgOjpzbG90dGVkKC5jYXJkLWFjdGlvbnMpIHsKICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgI2U4ZThlODsKICAgICAgICBwYWRkaW5nOiA1cHggMTZweDsKICAgICAgICBwb3NpdGlvbjpyZWxhdGl2ZTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItY2FyZC1hY3Rpb25zOwogICAgICB9CgogICAgICA6aG9zdChbZWxldmF0aW9uPSIxIl0pIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1tYXRlcmlhbC1lbGV2YXRpb24tMTsKICAgICAgfQoKICAgICAgOmhvc3QoW2VsZXZhdGlvbj0iMiJdKSB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTI7CiAgICAgIH0KCiAgICAgIDpob3N0KFtlbGV2YXRpb249IjMiXSkgewogICAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi0zOwogICAgICB9CgogICAgICA6aG9zdChbZWxldmF0aW9uPSI0Il0pIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1tYXRlcmlhbC1lbGV2YXRpb24tNDsKICAgICAgfQoKICAgICAgOmhvc3QoW2VsZXZhdGlvbj0iNSJdKSB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTU7CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPGRpdiBjbGFzcz0iaGVhZGVyIj4KICAgICAgPGlyb24taW1hZ2UgaGlkZGVuJD0iW1shaW1hZ2VdXSIgYXJpYS1oaWRkZW4kPSJbW19pc0hpZGRlbihpbWFnZSldXSIgc3JjPSJbW2ltYWdlXV0iIGFsdD0iW1thbHRdXSIgcGxhY2Vob2xkZXI9IltbcGxhY2Vob2xkZXJJbWFnZV1dIiBwcmVsb2FkPSJbW3ByZWxvYWRJbWFnZV1dIiBmYWRlPSJbW2ZhZGVJbWFnZV1dIj48L2lyb24taW1hZ2U+CiAgICAgIDxkaXYgaGlkZGVuJD0iW1shaGVhZGluZ11dIiBjbGFzcyQ9InRpdGxlLXRleHQgW1tfY29tcHV0ZUhlYWRpbmdDbGFzcyhpbWFnZSldXSI+W1toZWFkaW5nXV08L2Rpdj4KICAgIDwvZGl2PgoKICAgIDxzbG90Pjwvc2xvdD4KICA8L3RlbXBsYXRlPgoKICA8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vcGFwZXItY2FyZC9wYXBlci1jYXJkLmh0bWwuanMKUG9seW1lcih7aXM6InBhcGVyLWNhcmQiLHByb3BlcnRpZXM6e2hlYWRpbmc6e3R5cGU6U3RyaW5nLHZhbHVlOiIiLG9ic2VydmVyOiJfaGVhZGluZ0NoYW5nZWQifSxpbWFnZTp7dHlwZTpTdHJpbmcsdmFsdWU6IiJ9LGFsdDp7dHlwZTpTdHJpbmd9LHByZWxvYWRJbWFnZTp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxmYWRlSW1hZ2U6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0scGxhY2Vob2xkZXJJbWFnZTp7dHlwZTpTdHJpbmcsdmFsdWU6bnVsbH0sZWxldmF0aW9uOnt0eXBlOk51bWJlcix2YWx1ZToxLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH0sYW5pbWF0ZWRTaGFkb3c6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sYW5pbWF0ZWQ6e3R5cGU6Qm9vbGVhbixyZWZsZWN0VG9BdHRyaWJ1dGU6ITAscmVhZE9ubHk6ITAsY29tcHV0ZWQ6Il9jb21wdXRlQW5pbWF0ZWQoYW5pbWF0ZWRTaGFkb3cpIn19LF9pc0hpZGRlbjpmdW5jdGlvbihhKXtyZXR1cm4gYT8iZmFsc2UiOiJ0cnVlIn0sX2hlYWRpbmdDaGFuZ2VkOmZ1bmN0aW9uKGEpe3ZhciBjPQp0aGlzLmdldEF0dHJpYnV0ZSgiaGVhZGluZyIpLGQ9dGhpcy5nZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiKTsic3RyaW5nIj09PXR5cGVvZiBkJiZkIT09Y3x8dGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiLGEpfSxfY29tcHV0ZUhlYWRpbmdDbGFzczpmdW5jdGlvbihhKXtyZXR1cm4gYT8iIG92ZXItaW1hZ2UiOiIifSxfY29tcHV0ZUFuaW1hdGVkOmZ1bmN0aW9uKGEpe3JldHVybiBhfX0pOwo8L3NjcmlwdD4KPC9kb20tbW9kdWxlPgoKCjxkb20tbW9kdWxlIGlkPSJvdmVydmlldy1wYWdlIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIHBhcGVyLWNhcmQgewogICAgICAgIG1hcmdpbjogNXB4OwogICAgICAgIC0tcGFwZXItY2FyZC1oZWFkZXItY29sb3I6ICNmNWY1ZjU7CiAgICAgICAgLS1wYXBlci1jYXJkLWhlYWRlcjogewogICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzQyODVmNDsKICAgICAgICB9CiAgICAgIH0KICAgICAgLmZsZXgtaG9yaXpvbnRhbCB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWhvcml6b250YWw7CiAgICAgIH0KICAgICAgLnN0ZXB0aW1lLWF2ZXJhZ2UgewogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICAgICAgICBjb2xvcjogdmFyKC0tc3VtbWFyeS1jb2xvciwgZ3JlZW4pOwogICAgICB9CiAgICAgIC50YWJsZS1zdHlsZSB7CiAgICAgICAgdGFibGUtbGF5b3V0OiBhdXRvOwogICAgICAgIHdpZHRoOiA5NSU7CiAgICAgIH0KICAgICAgLnRvcC1vcHMtdGFibGUgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CiAgICAgIHZ6LWxpbmUtY2hhcnQyLnN0ZXAtZ3JhcGggewogICAgICAgIHdpZHRoOiA4NjBweDsKICAgICAgICBoZWlnaHQ6IDIwMHB4OwogICAgICB9CiAgICAgIC54LWF4aXMtdGl0bGUgewogICAgICAgIHdpZHRoOiA4MCU7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIHRleHQtdHJhbnNmb3JtOiBjYXBpdGFsaXplOwogICAgICB9CiAgICAgIC55LWF4aXMtdGl0bGUgewogICAgICAgIHdpZHRoOiAxMHB4OwogICAgICAgIHdyaXRpbmctbW9kZTogYnQtcmw7CiAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMjcwZGVnKTsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICB0ZXh0LXRyYW5zZm9ybTogY2FwaXRhbGl6ZTsKICAgICAgfQogICAgICBkaXYuYm90dGxlbmVjay1zdGF0ZW1lbnQgewogICAgICAgIGNvbG9yOiB2YXIoLS1zdW1tYXJ5LWNvbG9yLCBncmVlbik7CiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGRlcjsKICAgICAgICBmb250LXN0eWxlOiBpdGFsaWM7CiAgICAgIH0KICAgICAgZGl2LmVycm9yTWVzc2FnZSB7CiAgICAgICAgY29sb3I6IHJlZDsKICAgICAgICBmb250LXNpemU6IDAuNWNtOwogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkZXI7CiAgICAgICAgbWFyZ2luLXRvcDogMC41Y207CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMC41Y207CiAgICAgIH0KICAgICAgZGl2LmJvdHRsZW5lY2tUaXBzIHsKICAgICAgICBjb2xvcjogIzAwMDAwMDsKICAgICAgfQogICAgICBkaXYuYm90dGxlbmVja1RpcHMgYSB7CiAgICAgICAgY29sb3I6ICNmZjMzY2M7CiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CiAgICAgIH0KICAgICAgZGl2LmRvY3VtZW50YXRpb25UaXBzIHsKICAgICAgICBjb2xvcjogIzY2NjY5OTsKICAgICAgfQogICAgICBkaXYuZG9jdW1lbnRhdGlvblRpcHMgYSB7CiAgICAgICAgY29sb3I6ICMzM2NjMDA7CiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8ZGl2IGNsYXNzPSJlcnJvck1lc3NhZ2UiIGhpZGRlbj0iW1shX2Vycm9yX21lc3NhZ2VdXSI+CiAgICAgIDxzcGFuPltbX2Vycm9yX21lc3NhZ2VdXTwvc3Bhbj4KICAgIDwvZGl2PgogICAgPGRpdiBoaWRkZW49IltbX2Vycm9yX21lc3NhZ2VdXSI+CiAgICAgIDxkaXYgY2xhc3M9ImNvbnRhaW5lciBmbGV4LWhvcml6b250YWwiPgogICAgICAgIDxwYXBlci1jYXJkIGhlYWRpbmc9IlBlcmZvcm1hbmNlIFN1bW1hcnkiPgogICAgICAgICAgPGRpdiBjbGFzcz0iY2FyZC1jb250ZW50Ij4KICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgPGI+QXZlcmFnZSBzdGVwIHRpbWU8L2I+IChsb3dlciBpcyBiZXR0ZXIpOgogICAgICAgICAgICAgIDxiPjxzcGFuIGNsYXNzPSJzdGVwdGltZS1hdmVyYWdlIj5bW19zdGVwdGltZV9tc19hdmVyYWdlXV0gbXM8L3NwYW4+CiAgICAgICAgICAgICAgPC9iPgogICAgICAgICAgICAgIDxpIHN0eWxlPSJvcGFjaXR5OjAuNyI+KHN0YW5kYXJkIGRldmlhdGlvbiA9CiAgICAgICAgICAgICAgICA8c3Bhbj5bW19zdGVwdGltZV9tc19zdGRkZXZdXTwvc3Bhbj4gbXMpPC9pPgogICAgICAgICAgICAKICAgICAgICAgICAgPHVsIGhpZGRlbiQ9IltbIV9pbmZlZWRfbXNfYXZlcmFnZV1dIj4KICAgICAgICAgICAgICA8bGk+QXZlcmFnZSBpbmZlZWQ6IDxzcGFuPltbX2luZmVlZF9tc19hdmVyYWdlXV08L3NwYW4+IG1zPC9saT4KICAgICAgICAgICAgICA8bGk+QXZlcmFnZSBjb21wdXRlOiA8c3Bhbj5bW19jb21wdXRlX21zX2F2ZXJhZ2VdXTwvc3Bhbj4gbXM8L2xpPgogICAgICAgICAgICA8L3VsPgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICA8Yj5Ib3N0IGlkbGUgdGltZTwvYj4gKGxvd2VyIGlzIGJldHRlcik6CiAgICAgICAgICAgICAgPHNwYW4+W1tfaG9zdF9pZGxlX3RpbWVfcGVyY2VudF1dPC9zcGFuPgogICAgICAgICAgICAKICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgPGI+VFBVIGlkbGUgdGltZTwvYj4gKGxvd2VyIGlzIGJldHRlcik6CiAgICAgICAgICAgICAgPHNwYW4+W1tfZGV2aWNlX2lkbGVfdGltZV9wZXJjZW50XV08L3NwYW4+CiAgICAgICAgICAgIAogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICA8Yj5VdGlsaXphdGlvbiBvZiBUUFUgTWF0cml4IFVuaXRzPC9iPiAoaGlnaGVyIGlzIGJldHRlcik6CiAgICAgICAgICAgICAgPHNwYW4+W1tfbXh1X3V0aWxpemF0aW9uX3BlcmNlbnRdXTwvc3Bhbj4KICAgICAgICAgICAgCiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L3BhcGVyLWNhcmQ+CiAgICAgICAgPHBhcGVyLWNhcmQgaGVhZGluZz0iU3RlcC10aW1lIEdyYXBoIj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImNhcmQtY29udGVudCIgaGlkZGVuPSJbWyFfc2hvd19zdGVwX3RpbWVfZ3JhcGhdXSI+CiAgICAgICAgICAgIDx0YWJsZSBjbGFzcz0idGFibGUtc3R5bGUiPgogICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgIDx0ZD48ZGl2IGNsYXNzPSJ5LWF4aXMtdGl0bGUiPm1pbGxpc2Vjb25kczwvZGl2PjwvdGQ+CiAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgIDx2ei1saW5lLWNoYXJ0MiBjbGFzcz0ic3RlcC1ncmFwaCIgaWQ9ImRldmljZV9zdGVwX2NoYXJ0Ij4KICAgICAgICAgICAgICAgICAgPC92ei1saW5lLWNoYXJ0Mj4KICAgICAgICAgICAgICAgICAgPGRpdj48cCBjbGFzcz0ieC1heGlzLXRpdGxlIj50cmFpbmluZyBzdGVwIG51bWJlcjwvZGl2PgogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICA8L3RhYmxlPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9wYXBlci1jYXJkPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY29udGFpbmVyIGZsZXgtaG9yaXpvbnRhbCI+CiAgICAgICAgPHBhcGVyLWNhcmQgaGVhZGluZyQ9IltbX3RvcF9vcHNfaGVhZGluZ11dIj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImNhcmQtY29udGVudCI+CiAgICAgICAgICAgIDxidXR0b24gb24tY2xpY2s9Im9uQ2xpY2tUb3BPcHMiPltbX3RvcF9vcHNfYnV0dG9uX3RleHRdXTwvYnV0dG9uPgogICAgICAgICAgICA8dGhyZWFkPgogICAgICAgICAgICAgICAgPC90aHJlYWQ+PHRhYmxlIGNsYXNzPSJ0b3Atb3BzLXRhYmxlIiBoaWRkZW4kPSJbWyFfc2hvd190b3Bfb3BzX3RhYmxlXV0iPgogICAgICAgICAgICAgIDx0cj48dGg+VGltZSAoJSk8L3RoPgogICAgICAgICAgICAgICAgPHRoPkN1bXVsYXRpdmUgdGltZSAoJSk8L3RoPgogICAgICAgICAgICAgICAgPHRoPkNhdGVnb3J5PC90aD4KICAgICAgICAgICAgICAgIDx0aD5PcGVyYXRpb248L3RoPgogICAgICAgICAgICAgICAgPHRoPkdGbG9wcy9zZWM8L3RoPgogICAgICAgICAgICAgIAogICAgICAgICAgICAgIDx0Ym9keSBpZD0idG9wX29wc190YWJsZV9jb250ZW50Ij48L3Rib2R5PgogICAgICAgICAgICA8L3RhYmxlPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9wYXBlci1jYXJkPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY29udGFpbmVyIGZsZXgtaG9yaXpvbnRhbCI+CiAgICAgICAgPHBhcGVyLWNhcmQgaGVhZGluZz0iUnVuIEVudmlyb25tZW50Ij4KICAgICAgICAgIDxkaXYgY2xhc3M9ImNhcmQtY29udGVudCI+CiAgICAgICAgICAgIDxwPjxiPk51bWJlciBvZiBIb3N0cyB1c2VkPC9iPjogPHNwYW4+W1tfaG9zdF9jb3VudF1dPC9zcGFuPgogICAgICAgICAgICA8cD48Yj5UUFUgdHlwZTwvYj46IENsb3VkIFRQVQogICAgICAgICAgICA8cD48Yj5OdW1iZXIgb2YgVFBVIGNvcmVzPC9iPjogPHNwYW4+IFtbX3RwdV9jb3JlX2NvdW50XV08L3NwYW4+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L3BhcGVyLWNhcmQ+CiAgICAgICAgPHBhcGVyLWNhcmQgaGVhZGluZz0iUmVjb21tZW5kYXRpb24gZm9yIE5leHQgU3RlcHMiPgogICAgICAgICAgPGRpdiBjbGFzcz0iY2FyZC1jb250ZW50Ij4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iYm90dGxlbmVjay1zdGF0ZW1lbnQiPjxzcGFuPltbX3N0YXRlbWVudF1dPC9zcGFuPjwvZGl2PgogICAgICAgICAgICA8ZGl2IGlkPSJob3N0X3NpZGVfdGlwcyI+PC9kaXY+CiAgICAgICAgICAgIDxkaXYgaWQ9ImRldmljZV9zaWRlX3RpcHMiPjwvZGl2PgogICAgICAgICAgICA8ZGl2IGlkPSJkb2N1bWVudGF0aW9uX3RpcHMiPjwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9wYXBlci1jYXJkPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogIDwvdGVtcGxhdGU+CgogIDxzY3JpcHQ+Ly9+fldFQlBBVEh+fi90Zi1vdmVydmlldy1wYWdlL292ZXJ2aWV3LXBhZ2UuaHRtbC5qcwpQb2x5bWVyKHtpczoib3ZlcnZpZXctcGFnZSIscHJvcGVydGllczp7X2RhdGE6e3R5cGU6T2JqZWN0LG9ic2VydmVyOiJfdXBkYXRlVmlldyJ9LF9zaG93X3RvcF9vcHNfdGFibGU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sX3Nob3dfc3RlcF90aW1lX2dyYXBoOnt0eXBlOkJvb2xlYW4sY29tcHV0ZWQ6Il9zaG91bGRTaG93U3RlcFRpbWVHcmFwaChfZGF0YSwgX2FjdGl2ZSkifSxfdG9wX29wc19idXR0b25fdGV4dDp7dHlwZTpTdHJpbmcsY29tcHV0ZWQ6Il9nZXRUb3BPcHNCdXR0b25UZXh0KF9zaG93X3RvcF9vcHNfdGFibGUpIn0sX2dlbmVyYWxBbmFseXNpc0pzb246e3R5cGU6U3RyaW5nfSxfaW5wdXRBbmFseXNpc0pzb246e3R5cGU6U3RyaW5nfSxfcnVuRW52aXJvbm1lbnRKc29uOnt0eXBlOlN0cmluZ30sX3JlY29tbWVuZGF0aW9uSnNvbjp7dHlwZTpTdHJpbmd9LF9hY3RpdmU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxvYnNlcnZlcjoiX29uQWN0aXZlQ2hhbmdlZCJ9LF9ob3N0X2lkbGVfdGltZV9wZXJjZW50Ont0eXBlOlN0cmluZ30sCl9kZXZpY2VfaWRsZV90aW1lX3BlcmNlbnQ6e3R5cGU6U3RyaW5nfSxfbXh1X3V0aWxpemF0aW9uX3BlcmNlbnQ6e3R5cGU6U3RyaW5nfSxfc3RlcHRpbWVfbXNfYXZlcmFnZTp7dHlwZTpTdHJpbmd9LF9zdGVwdGltZV9tc19zdGRkZXY6e3R5cGU6U3RyaW5nfSxfaW5mZWVkX21zX2F2ZXJhZ2U6e3R5cGU6U3RyaW5nLHZhbHVlOiIifSxfY29tcHV0ZV9tc19hdmVyYWdlOnt0eXBlOlN0cmluZyx2YWx1ZToiIn0sX3RvcF9vcHNfaGVhZGluZzp7dHlwZTpTdHJpbmd9LF9lcnJvcl9tZXNzYWdlOnt0eXBlOlN0cmluZ30sX2hvc3RfY291bnQ6e3R5cGU6U3RyaW5nfSxfdHB1X3R5cGU6e3R5cGU6U3RyaW5nfSxfdHB1X2NvcmVfY291bnQ6e3R5cGU6U3RyaW5nfSxfYmF0Y2hfc2l6ZTp7dHlwZTpTdHJpbmd9LF9jaGFuZ2VfbGlzdDp7dHlwZTpTdHJpbmd9LF9idWlsZF90aW1lOnt0eXBlOlN0cmluZ30sX2J1aWxkX3RhcmdldDp7dHlwZTpTdHJpbmd9LF9zdGF0ZW1lbnQ6e3R5cGU6U3RyaW5nfX0sCm9ic2VydmVyczpbIl9zaG93U3VtbWFyeShfaW5wdXRBbmFseXNpc0pzb24sIF9nZW5lcmFsQW5hbHlzaXNKc29uKSIsIl9zaG93UnVuRW52aXJvbm1lbnQoX3J1bkVudmlyb25tZW50SnNvbikiLCJfc2hvd0RldmljZVN0ZXBDaGFydChfaW5wdXRBbmFseXNpc0pzb24pIiwiX3Nob3dUb3BPcHNUYWJsZShfZ2VuZXJhbEFuYWx5c2lzSnNvbikiLCJfc2hvd1JlY29tbWVuZGF0aW9uKF9yZWNvbW1lbmRhdGlvbkpzb24pIl0sb25DbGlja1RvcE9wczpmdW5jdGlvbigpe3RoaXMuX3Nob3dfdG9wX29wc190YWJsZT0hdGhpcy5fc2hvd190b3Bfb3BzX3RhYmxlfSxfZ2V0VG9wT3BzQnV0dG9uVGV4dDpmdW5jdGlvbihhKXtyZXR1cm4oYT8iSGlkZSI6IlNob3ciKSsiIHRhYmxlIn0sX3VwZGF0ZVZpZXc6ZnVuY3Rpb24oKXtpZih0aGlzLl9kYXRhJiZ0aGlzLl9hY3RpdmUpe3RoaXMuX2dlbmVyYWxBbmFseXNpc0pzb249dGhpcy5fZGF0YVswXTt0aGlzLl9pbnB1dEFuYWx5c2lzSnNvbj10aGlzLl9kYXRhWzFdOwp0aGlzLl9ydW5FbnZpcm9ubWVudEpzb249dGhpcy5fZGF0YVsyXTt2YXIgYT10aGlzLl9kYXRhWzNdO3RoaXMuX3JlY29tbWVuZGF0aW9uSnNvbj1hO3RoaXMuX3N0YXRlbWVudD1hLnAuc3RhdGVtZW50O2E9ImdyZWVuIjt0aGlzLl9zdGF0ZW1lbnQuaW5jbHVkZXMoIkhJR0hMWSIpP2E9InJlZCI6dGhpcy5fc3RhdGVtZW50LmluY2x1ZGVzKCJNT0RFUkFURSIpJiYoYT0ib3JhbmdlIik7dGhpcy51cGRhdGVTdHlsZXMoeyItLXN1bW1hcnktY29sb3IiOmF9KX19LF9zaG93U3VtbWFyeTpmdW5jdGlvbihhLGMpe2EmJmMmJih0aGlzLl9ob3N0X2lkbGVfdGltZV9wZXJjZW50PWMucC5ob3N0X2lkbGVfdGltZV9wZXJjZW50LHRoaXMuX2RldmljZV9pZGxlX3RpbWVfcGVyY2VudD1jLnAuZGV2aWNlX2lkbGVfdGltZV9wZXJjZW50LHRoaXMuX214dV91dGlsaXphdGlvbl9wZXJjZW50PWMucC5teHVfdXRpbGl6YXRpb25fcGVyY2VudCx0aGlzLl9zdGVwdGltZV9tc19hdmVyYWdlPWEucC5zdGVwdGltZV9tc19hdmVyYWdlLAp0aGlzLl9zdGVwdGltZV9tc19zdGRkZXY9YS5wLnN0ZXB0aW1lX21zX3N0YW5kYXJkX2RldmlhdGlvbix0aGlzLl9jb21wdXRlX21zX2F2ZXJhZ2U9YS5wLmNvbXB1dGVfbXNfYXZlcmFnZSx0aGlzLl9pbmZlZWRfbXNfYXZlcmFnZT1hLnAuaW5mZWVkX21zX2F2ZXJhZ2UpfSxfc2hvd1J1bkVudmlyb25tZW50OmZ1bmN0aW9uKGEpe2EmJih0aGlzLl9lcnJvcl9tZXNzYWdlPWEucC5lcnJvcl9tZXNzYWdlLHRoaXMuX2hvc3RfY291bnQ9YS5wLmhvc3RfY291bnQsdGhpcy5fdHB1X3R5cGU9YS5wLnRwdV90eXBlLHRoaXMuX3RwdV9jb3JlX2NvdW50PWEucC50cHVfY29yZV9jb3VudCx0aGlzLl9iYXRjaF9zaXplPWEucC5iYXRjaF9zaXplLHRoaXMuX2NoYW5nZV9saXN0PWEucC5jaGFuZ2VfbGlzdCx0aGlzLl9idWlsZF90aW1lPWEucC5idWlsZF90aW1lLHRoaXMuX2J1aWxkX3RhcmdldD1hLnAuYnVpbGRfdGFyZ2V0KX0sX3Nob3dEZXZpY2VTdGVwQ2hhcnQ6ZnVuY3Rpb24oYSl7aWYodGhpcy5fc2hvd19zdGVwX3RpbWVfZ3JhcGgpe3ZhciBjPQpbXSxkPVtdLGY9MCxnPS0xO2Eucm93cy5mb3JFYWNoKGZ1bmN0aW9uKGwpe2c9MDxnPysrZzpOdW1iZXIobC5jWzBdLnYpO2MucHVzaCh7c2NhbGFyOmwuY1sxXS52LHN0ZXA6Zyx0cHVfc3RlcDpOdW1iZXIobC5jWzBdLnYpLGxvd193YXRlcm1hcms6MH0pO2QucHVzaCh7c2NhbGFyOmwuY1sxXS52K2wuY1syXS52LHN0ZXA6Zyxsb3dfd2F0ZXJtYXJrOmwuY1sxXS52fSk7Zj1NYXRoLm1heChmLGwuY1sxXS52K2wuY1syXS52KX0pO2lmKGE9dGhpcy4kJCgiI2RldmljZV9zdGVwX2NoYXJ0IikpYS5zZXRWaXNpYmxlU2VyaWVzKFsiY29tcHV0ZS10aW1lIiwic3RlcC10aW1lIFx4M2QgaW5wdXQtdGltZSArIGNvbXB1dGUtdGltZSJdKSxhLnNldFNlcmllc0RhdGEoImNvbXB1dGUtdGltZSIsYyksYS5zZXRTZXJpZXNEYXRhKCJzdGVwLXRpbWUgXHgzZCBpbnB1dC10aW1lICsgY29tcHV0ZS10aW1lIixkKSxhLmRlZmF1bHRZUmFuZ2U9WzAsMS4xKmZdLGEuc21vb3RoaW5nRW5hYmxlZD0KITEsYS50b29sdGlwQ29sdW1ucz1be3RpdGxlOiJOYW1lIixldmFsdWF0ZTpsPT5sLmRhdGFzZXQubWV0YWRhdGEoKS5uYW1lfSx7dGl0bGU6IlRpbWUobXMpIixldmFsdWF0ZTpsPT5sLmRhdHVtLnNjYWxhci50b0ZpeGVkKDIpfSx7dGl0bGU6IlN0ZXAiLGV2YWx1YXRlOmw9PmwuZGF0dW0uc3RlcH1dLGEuZmlsbEFyZWE9e2hpZ2hlckFjY2Vzc29yOmw9Pmwuc2NhbGFyLGxvd2VyQWNjZXNzb3I6bD0+bC5sb3dfd2F0ZXJtYXJrfSxhLnhBeGlzRm9ybWF0dGVyPWQzLmZvcm1hdCgiZCIpfX0sX3Nob3dUb3BPcHNUYWJsZTpmdW5jdGlvbihhKXtpZihhJiZhLnJvd3MmJmEucm93cy5sZW5ndGgmJnRoaXMuX2FjdGl2ZSl7dmFyIGM9MCxkPXRoaXMuJCQoIiN0b3Bfb3BzX3RhYmxlX2NvbnRlbnQiKTtkJiYoZC5pbm5lckhUTUw9IiIsYS5yb3dzLmZvckVhY2goZnVuY3Rpb24oZil7dmFyIGc9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidHIiKTtQb2x5bWVyLmRvbShkKS5hcHBlbmRDaGlsZChnKTsKdmFyIGw9W107bC5wdXNoKCgxMDAqZi5jWzBdLnYpLnRvRml4ZWQoMikrIiUiKTtsLnB1c2goKDEwMCpmLmNbMV0udikudG9GaXhlZCgyKSsiJSIpO2wucHVzaChmLmNbMl0udik7bC5wdXNoKGYuY1szXS52KTtsLnB1c2goZi5jWzRdLnYudG9GaXhlZCgyKSk7bC5mb3JFYWNoKGZ1bmN0aW9uKGspe3ZhciBtPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7UG9seW1lci5kb20oZykuYXBwZW5kQ2hpbGQobSk7UG9seW1lci5kb20obSkuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoaykpfSk7Yys9MX0pLHRoaXMuX3RvcF9vcHNfaGVhZGluZz0iVG9wICIrYysiIFRlbnNvckZsb3cgb3BlcmF0aW9ucyBleGVjdXRlZCBvbiBUUFUiLHRoaXMuX3Nob3dfdG9wX29wc190YWJsZT0hMSl9fSxfZ2VuZXJhdGVSZWNvbW1lbmRhdGlvbkh0bWw6ZnVuY3Rpb24oYSxjLGQsZil7dmFyIGc9Ilx4M2NwXHgzZVx4MjZuYnNwO1x4M2MvcFx4M2UiO2crPSdceDNjZGl2IGNsYXNzXHgzZCInKwpjKyciXHgzZSc7Zys9Ilx4M2NiXHgzZSIrZisiOlx4M2MvYlx4M2UiO2Eucm93cy5mb3JFYWNoKGZ1bmN0aW9uKGwpe2wuY1swXS52PT1kJiYoZys9Ilx4M2NsaVx4M2UiK2wuY1sxXS52KyJceDNjL2xpXHgzZSIpfSk7cmV0dXJuIGcrPSJceDNjL2Rpdlx4M2UifSxfc2hvd1JlY29tbWVuZGF0aW9uOmZ1bmN0aW9uKGEpe2lmKGEmJnRoaXMuX2FjdGl2ZSl7dmFyIGM9YS5wLmJvdHRsZW5lY2ssZD10aGlzLiQkKCIjaG9zdF9zaWRlX3RpcHMiKSxmPXRoaXMuJCQoIiNkZXZpY2Vfc2lkZV90aXBzIik7ZCYmZiYmKCJkZXZpY2UiPT1jPyhkLmlubmVySFRNTD0iIixmLmlubmVySFRNTD10aGlzLl9nZW5lcmF0ZVJlY29tbWVuZGF0aW9uSHRtbChhLCJib3R0bGVuZWNrVGlwcyIsImRldmljZSIsIk5leHQgdG9vbHMgdG8gdXNlIGZvciByZWR1Y2luZyB0aGUgVFBVIHRpbWUiKSk6Imhvc3QiPT1jPyhkLmlubmVySFRNTD10aGlzLl9nZW5lcmF0ZVJlY29tbWVuZGF0aW9uSHRtbChhLCJib3R0bGVuZWNrVGlwcyIsCiJob3N0IiwiTmV4dCB0b29scyB0byB1c2UgZm9yIHJlZHVjaW5nIHRoZSBpbnB1dCB0aW1lIiksZi5pbm5lckhUTUw9IiIpOihkLmlubmVySFRNTD10aGlzLl9nZW5lcmF0ZVJlY29tbWVuZGF0aW9uSHRtbChhLCJib3R0bGVuZWNrVGlwcyIsImhvc3QiLCJOZXh0IHRvb2xzIHRvIHVzZSBmb3IgcmVkdWNpbmcgdGhlIGlucHV0IHRpbWUiKSxmLmlubmVySFRNTD10aGlzLl9nZW5lcmF0ZVJlY29tbWVuZGF0aW9uSHRtbChhLCJib3R0bGVuZWNrVGlwcyIsImRldmljZSIsIk5leHQgdG9vbHMgdG8gdXNlIGZvciByZWR1Y2luZyB0aGUgVFBVIHRpbWUiKSksYz10aGlzLiQkKCIjZG9jdW1lbnRhdGlvbl90aXBzIikpJiYoYy5pbm5lckhUTUw9dGhpcy5fZ2VuZXJhdGVSZWNvbW1lbmRhdGlvbkh0bWwoYSwiZG9jdW1lbnRhdGlvblRpcHMiLCJkb2MiLCJPdGhlciB1c2VmdWwgcmVzb3VyY2VzIikpfX0sX29uQWN0aXZlQ2hhbmdlZDpmdW5jdGlvbihhKXthP3RoaXMuX3VwZGF0ZVZpZXcoKToKdGhpcy5fc2hvd190b3Bfb3BzX3RhYmxlPXRoaXMuX3Nob3dfc3RlcF90aW1lX2dyYXBoPSExfSxfc2hvdWxkU2hvd1N0ZXBUaW1lR3JhcGg6ZnVuY3Rpb24oYSxjKXtyZXR1cm4gYyYmYSYmYVsxXSYmYVsxXS5yb3dzJiZhWzFdLnJvd3MubGVuZ3RofSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX2FjdGl2ZT0hMDt0aGlzLl91cGRhdGVWaWV3KCl9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fYWN0aXZlPSExfX0pOwo8L3NjcmlwdD4KPC9kb20tbW9kdWxlPgoKCgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdGYtb3AtcHJvZmlsZS91dGlscy5qcwp2YXIgcW07CihmdW5jdGlvbihhKXtmdW5jdGlvbiBjKGwsayxtLHApe3JldHVybiJyZ2JhKCIrTWF0aC5yb3VuZCgyNTUqbCkrIiwiK01hdGgucm91bmQoMjU1KmspKyIsIitNYXRoLnJvdW5kKDI1NSptKSsiLCIrcCsiKSJ9ZnVuY3Rpb24gZChsLGs9MSxtPTEscD1NYXRoLnNxcnQpe2lmKGlzTmFOKGwpKXJldHVybiBjKGssayxrLG0pO2w9cChsKTtyZXR1cm4uNT5sP2MoaywyKmwqaywwLG0pOmMoMiooMS1sKSprLGssMCxtKX1mdW5jdGlvbiBmKGwpe3JldHVybiBsJiZsLm1ldHJpY3MmJmwubWV0cmljcy50aW1lP2wubWV0cmljcy5mbG9wcy9sLm1ldHJpY3MudGltZTpOYU59ZnVuY3Rpb24gZyhsKXtyZXR1cm4gbCYmbC5tZXRyaWNzJiZsLm1ldHJpY3MubWVtb3J5QmFuZHdpZHRoP2wubWV0cmljcy5tZW1vcnlCYW5kd2lkdGg6TmFOfWEuZmxhbWVDb2xvcj1kO2EuZmxvcHNDb2xvcj1mdW5jdGlvbihsKXtyZXR1cm4gZChsLC43KX07YS5id0NvbG9yPWZ1bmN0aW9uKGwpe3JldHVybiBkKDEtbCwKLjcpfTthLnV0aWxpemF0aW9uPWY7YS5tZW1vcnlVdGlsaXphdGlvbj1nO2EuaGFzTWVtb3J5VXRpbGl6YXRpb249ZnVuY3Rpb24obCl7cmV0dXJuIGwmJmwubWV0cmljcyYmbC5tZXRyaWNzLm1lbW9yeUJhbmR3aWR0aH07YS5oYXNGbG9wcz1mdW5jdGlvbihsKXtyZXR1cm4gbCYmbC5tZXRyaWNzJiZsLm1ldHJpY3MudGltZX07YS5wZXJjZW50PWZ1bmN0aW9uKGwpe3JldHVybiBpc05hTihsKT8iLSI6Ljk5NTw9bD8iMTAwJSI6MUUtNT5sPyIwLjAwJSI6KDEwMCpsKS50b1ByZWNpc2lvbigyKSsiJSJ9O2EudGltZVdhc3RlZD1mdW5jdGlvbihsKXtyZXR1cm4gbCYmbC5tZXRyaWNzP2wubWV0cmljcy50aW1lKigxLU1hdGgubWF4KGYobCksZyhsKSkpOk5hTn19KShxbXx8KHFtPXt9KSk7Cjwvc2NyaXB0PgoKCgo8ZG9tLW1vZHVsZSBpZD0idGYtb3AtdGFibGUtc3R5bGVzIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgICN0aW1lLAogICAgICAjd2FzdGVkLAogICAgICAjdXRpbGl6YXRpb24gewogICAgICAgIHdpZHRoOiA2MHB4OwogICAgICB9CiAgICAgICNuYW1lIHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgbWluLXdpZHRoOiA0MCU7CiAgICAgIH0KICAgICAgI3JvdywKICAgICAgI2hlYWRlciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICB9CiAgICAgICNyb3cgPiAqLAogICAgICAjaGVhZGVyID4gKiB7CiAgICAgICAgcGFkZGluZzogMC41ZW07CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICB9CiAgICAgICNoZWFkZXIgPiAqIHsKICAgICAgICBwYWRkaW5nLWJvdHRvbTogMDsKICAgICAgfQogICAgICAjcHJvdmVuYW5jZSB7CiAgICAgICAgZmxleDogMSAxIDAgIWltcG9ydGFudDsKICAgICAgfQogICAgICAjdXRpbGl6YXRpb24gewogICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT4KCgo8ZG9tLW1vZHVsZSBpZD0idGYtb3AtdGFibGUiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZSBpbmNsdWRlPSJ0Zi1vcC10YWJsZS1zdHlsZXMiPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7CiAgICAgIH0KICAgICAgI2hlYWRlciB7CiAgICAgICAgZm9udC1zaXplOiBzbWFsbGVyOwogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICAgIGNvbG9yOiAjNjY2OwogICAgICAgIHBhZGRpbmctYm90dG9tOiAwLjI1ZW07CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICM2NjY7CiAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICB9CiAgICAgIC8qIE1hdGNoIGluZGVudGVkIG5hbWVzICovCiAgICAgICNoZWFkZXIgPiAjbmFtZSB7CiAgICAgICAgcGFkZGluZy1sZWZ0OiAyZW07CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8ZGl2IGlkPSJoZWFkZXIiPgogICAgICA8c3BhbiBpZD0idGltZSI+VGltZTwvc3Bhbj4KICAgICAgPHNwYW4gaWQ9Indhc3RlZCI+V2FzdGVkPC9zcGFuPgogICAgICA8c3BhbiBpZD0ibmFtZSI+TmFtZTwvc3Bhbj4KICAgICAgPHNwYW4gaWQ9InByb3ZlbmFuY2UiPlRlbnNvckZsb3cgT3A8L3NwYW4+CiAgICAgIDxzcGFuIGlkPSJ1dGlsaXphdGlvbiI+RkxPUFM8L3NwYW4+CiAgICA8L2Rpdj4KICAgIDx0Zi1vcC10YWJsZS1lbnRyeSBub2RlPSJbW3Jvb3ROb2RlXV0iIGhlYWRlci1ob3Zlcj0iW1tfb25IZWFkZXJIb3Zlcl1dIiBoZWFkZXItY2xpY2s9IltbX29uSGVhZGVyQ2xpY2tdXSIgY2hpbGRyZW4tY291bnQ9Int7Y2hpbGRyZW5Db3VudH19IiBzaG93LXA5MD0ie3tzaG93UDkwfX0iIGJ5LXdhc3RlPSJ7e2J5V2FzdGV9fSIgZXhwYW5kZWQ9InRydWUiPgogICAgPC90Zi1vcC10YWJsZS1lbnRyeT4KICA8L3RlbXBsYXRlPgoKICA8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdGYtb3AtcHJvZmlsZS90Zi1vcC10YWJsZS5odG1sLmpzClBvbHltZXIoe2lzOiJ0Zi1vcC10YWJsZSIscHJvcGVydGllczp7cm9vdE5vZGU6e3R5cGU6T2JqZWN0fSxhY3RpdmU6e3R5cGU6T2JqZWN0LGNvbXB1dGVkOiJfYWN0aXZlKF9zZWxlY3RlZCwgX2hvdmVyKSIsbm90aWZ5OiEwfSxzaG93UDkwOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEsbm90aWZ5OiEwfSxieVdhc3RlOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEsbm90aWZ5OiEwfSxjaGlsZHJlbkNvdW50Ont0eXBlOk51bWJlcix2YWx1ZToxMCxub3RpZnk6ITB9LF9zZWxlY3RlZDp7dHlwZTpPYmplY3QsdmFsdWU6bnVsbCxub3RpZnk6ITB9LF9ob3Zlcjp7dHlwZTpPYmplY3QsdmFsdWU6bnVsbCxub3RpZnk6ITB9LF9vbkhlYWRlckhvdmVyOnt0eXBlOk9iamVjdCx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBhPT50aGlzLl9ob3Zlcj1hfX0sX29uSGVhZGVyQ2xpY2s6e3R5cGU6T2JqZWN0LHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIGE9Pnt0aGlzLl9zZWxlY3RlZCYmKHRoaXMuX3NlbGVjdGVkLnNlbGVjdGVkPQohMSk7dGhpcy5fc2VsZWN0ZWQ9YTthLnNlbGVjdGVkPSEwfX19fSxfYWN0aXZlOmZ1bmN0aW9uKGEsYyl7aWYoYylyZXR1cm4gYy5ub2RlO2lmKGEpcmV0dXJuIGEubm9kZX19KTsKPC9zY3JpcHQ+CjwvZG9tLW1vZHVsZT4KCgo8ZG9tLW1vZHVsZSBpZD0idGYtb3AtdGFibGUtZW50cnkiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZSBpbmNsdWRlPSJ0Zi1vcC10YWJsZS1zdHlsZXMiPgogICAgICAjcm93IHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMCAwIHJnYmEoMCwgMCwgMCwgMC4wNik7CiAgICAgICAgei1pbmRleDogMDsKICAgICAgfQogICAgICAjYmFyIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIHotaW5kZXg6IC0xOwogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNjZGU7CiAgICAgIH0KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CiAgICAgIDpob3N0KC5zZWxlY3RlZCkgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4wNCk7CiAgICAgIH0KICAgICAgOmhvc3QoLnNlbGVjdGVkKSA+ICNyb3cgewogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICB9CiAgICAgICNyb3c6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4wNSk7CiAgICAgIH0KICAgICAgI2Rpc2Nsb3N1cmUgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICB3aWR0aDogMWVtOwogICAgICB9CiAgICAgICNuYW1lIHsKICAgICAgICBmb250LWZhbWlseTogbW9ub3NwYWNlOwogICAgICB9CiAgICAgICN0aW1lLAogICAgICAjd2FzdGVkLAogICAgICAjdXRpbGl6YXRpb24gewogICAgICAgIGZvbnQtc2l6ZTogc21hbGxlcjsKICAgICAgfQogICAgICAvKiBVdGlsaXphdGlvbiBoYXMgYSBiYWNrZ3JvdW5kIGNvbG9yLCBzbyBpdCBzdHJldGNoZXMgdG8gZmlsbCB0aGUgcm93LgogICAgICAgICBJdHMgdGV4dCBpcyBpbiBhbiBpbm5lciBkaXYgdGhhdCByZW1haW5zIHZlcnRpY2FsbHkgY2VudGVyZWQuICovCiAgICAgICN1dGlsaXphdGlvbiB7CiAgICAgICAgYWxpZ24tc2VsZjogc3RyZXRjaDsKICAgICAgfQogICAgICAjdXRpbGl6YXRpb24gZGl2IHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgdG9wOiA1MCU7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpOwogICAgICB9CgogICAgICBbaGlkZGVuXSB7CiAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgICB9CiAgICA8L3N0eWxlPgogICAgPGRpdiBpZD0icm93IiBvbi1jbGljaz0iX2hhbmRsZUhlYWRlckNsaWNrIiBvbi1tb3VzZWVudGVyPSJfaGFuZGxlSGVhZGVyTW91c2VFbnRlciIgb24tbW91c2VsZWF2ZT0iX2hhbmRsZUhlYWRlck1vdXNlTGVhdmUiIGhpZGRlbj0iW1shbGV2ZWxdXSI+CiAgICAgIDxkaXYgaWQ9ImJhciIgc3R5bGUkPSJ3aWR0aDp7e19iYXJXaWR0aChub2RlKX19Ij48L2Rpdj4KICAgICAgPHNwYW4gaWQ9InRpbWUiPnt7X3BlcmNlbnQobm9kZSl9fTwvc3Bhbj4KICAgICAgPHNwYW4gaWQ9Indhc3RlZCI+e3tfdGltZVdhc3RlZChub2RlKX19PC9zcGFuPgogICAgICA8c3BhbiBpZD0ibmFtZSIgc3R5bGUkPSJwYWRkaW5nLWxlZnQ6W1tsZXZlbF1dZW07Ij4KICAgICAgICA8c3BhbiBpZD0iZGlzY2xvc3VyZSI+CiAgICAgICAgICA8c3BhbiBoaWRkZW49IltbIW5vZGUuY2hpbGRyZW4ubGVuZ3RoXV0iPgogICAgICAgICAgICA8c3BhbiBoaWRkZW49IltbZXhwYW5kZWRdXSI+4pa2PC9zcGFuPgogICAgICAgICAgICA8c3BhbiBoaWRkZW49IltbIWV4cGFuZGVkXV0iPuKWvDwvc3Bhbj4KICAgICAgICAgIDwvc3Bhbj4gPC9zcGFuPnt7bm9kZS5uYW1lfX0KICAgICAgPC9zcGFuPgogICAgICA8c3BhbiBpZD0icHJvdmVuYW5jZSI+e3tfcHJvdmVuYW5jZShub2RlKX19Jm5ic3A7PC9zcGFuPgogICAgICA8c3BhbiBpZD0idXRpbGl6YXRpb24iIGhpZGRlbj0iW1shX2hhc0Zsb3BzKG5vZGUpXV0iIHN0eWxlJD0iYmFja2dyb3VuZC1jb2xvcjp7e19mbGFtZUNvbG9yKG5vZGUpfX0iPgogICAgICAgIHt7X3V0aWxpemF0aW9uKG5vZGUpfX08L3NwYW4+CiAgICA8L2Rpdj4KICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tleHBhbmRlZF1dIj4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0ie3tfZ2V0S0NoaWxkcmVuKG5vZGUsIGNoaWxkcmVuQ291bnQsIHNob3dQOTAsIGxldmVsKX19IiBzb3J0PSJbW19zb3J0KGJ5V2FzdGUpXV0iPgogICAgICAgIDx0Zi1vcC10YWJsZS1lbnRyeSBub2RlPSJbW2l0ZW1dXSIgY2hpbGRyZW4tY291bnQ9Int7Y2hpbGRyZW5Db3VudH19IiBzaG93LXA5MD0ie3tzaG93UDkwfX0iIGJ5LXdhc3RlPSJ7e2J5V2FzdGV9fSIgbGV2ZWw9Int7X25leHRMZXZlbChsZXZlbCl9fSIgaGVhZGVyLWhvdmVyPSJ7e2hlYWRlckhvdmVyfX0iIGhlYWRlci1jbGljaz0ie3toZWFkZXJDbGlja319Ij4KICAgICAgICA8L3RmLW9wLXRhYmxlLWVudHJ5PgogICAgICA8L3RlbXBsYXRlPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2hhc0xlZnRvdXQobm9kZSwgY2hpbGRyZW5Db3VudCwgbGV2ZWwpXV0iPgogICAgICAgIDxzcGFuIGlkPSJuYW1lIiBzdHlsZSQ9InBhZGRpbmctbGVmdDpbW19nZXRQYWRkaW5nTGVmdChsZXZlbCldXWVtOyI+CiAgICAgICAgICBbW19udW1MZWZ0b3V0KG5vZGUsIGNoaWxkcmVuQ291bnQpXV0gY2F0ZWdvcmllcyBvciBvcHMgaGF2ZSBiZWVuIGxlZnQKICAgICAgICAgIG91dC4KICAgICAgICA8L3NwYW4+CiAgICAgIDwvdGVtcGxhdGU+CiAgICA8L3RlbXBsYXRlPgogIDwvdGVtcGxhdGU+CgogIDxzY3JpcHQ+Ly9+fldFQlBBVEh+fi90Zi1vcC1wcm9maWxlL3RmLW9wLXRhYmxlLmh0bWwtMi5qcwpQb2x5bWVyKHtpczoidGYtb3AtdGFibGUtZW50cnkiLHByb3BlcnRpZXM6e25vZGU6e3R5cGU6T2JqZWN0fSxsZXZlbDp7dHlwZTpOdW1iZXIsdmFsdWU6MH0saGVhZGVySG92ZXI6e3R5cGU6T2JqZWN0LHZhbHVlOigpPT5mdW5jdGlvbigpe30sbm90aWZ5OiEwfSxoZWFkZXJDbGljazp7dHlwZTpPYmplY3QsdmFsdWU6KCk9PmZ1bmN0aW9uKCl7fSxub3RpZnk6ITB9LGV4cGFuZGVkOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEsbm90aWZ5OiEwfSxzZWxlY3RlZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExLG9ic2VydmVyOiJfc2VsZWN0ZWRDaGFuZ2VkIn19LF9lcTpmdW5jdGlvbihhLGMpe3JldHVybiBhPT1jfSxfbmV4dExldmVsOmZ1bmN0aW9uKGEpe3JldHVybiBhKzF9LF9oYW5kbGVIZWFkZXJDbGljazpmdW5jdGlvbigpe3RoaXMuZXhwYW5kZWRePTE7dGhpcy5oZWFkZXJDbGljayh0aGlzKX0sX2hhbmRsZUhlYWRlck1vdXNlRW50ZXI6ZnVuY3Rpb24oKXt0aGlzLmhlYWRlckhvdmVyKHRoaXMpfSwKX2hhbmRsZUhlYWRlck1vdXNlTGVhdmU6ZnVuY3Rpb24oKXt0aGlzLmhlYWRlckhvdmVyKG51bGwpfSxfcGVyY2VudDpmdW5jdGlvbihhKXtyZXR1cm4gYS5tZXRyaWNzJiZhLm1ldHJpY3MudGltZT9xbS5wZXJjZW50KGEubWV0cmljcy50aW1lKToiIn0sX3RpbWVXYXN0ZWQ6ZnVuY3Rpb24oYSl7cmV0dXJuIHFtLnBlcmNlbnQocW0udGltZVdhc3RlZChhKSl9LF9wcm92ZW5hbmNlOmZ1bmN0aW9uKGEpe3JldHVybiBhLnhsYSYmYS54bGEucHJvdmVuYW5jZT9hLnhsYS5wcm92ZW5hbmNlLnJlcGxhY2UoL14uKlwvLywiIik6IiJ9LF91dGlsaXphdGlvbjpmdW5jdGlvbihhKXtyZXR1cm4gcW0ucGVyY2VudChxbS51dGlsaXphdGlvbihhKSl9LF9oYXNGbG9wczpxbS5oYXNGbG9wcyxfZmxhbWVDb2xvcjpmdW5jdGlvbihhKXtyZXR1cm4gcW0uZmxhbWVDb2xvcihxbS51dGlsaXphdGlvbihhKSwxLC4yKX0sX2JhcldpZHRoOmZ1bmN0aW9uKGEpe3JldHVybiBhLm1ldHJpY3MmJmEubWV0cmljcy50aW1lPwpxbS5wZXJjZW50KGEubWV0cmljcy50aW1lKTowfSxfc2VsZWN0ZWRDaGFuZ2VkOmZ1bmN0aW9uKGEpe3RoaXMuY2xhc3NMaXN0LnRvZ2dsZSgic2VsZWN0ZWQiLGEpfSxfZ2V0S0NoaWxkcmVuOmZ1bmN0aW9uKGEsYyxkLGYpe2lmKGQmJjA8YS5jaGlsZHJlbi5sZW5ndGgmJmEuY2hpbGRyZW5bMF0ubWV0cmljcyl7Zm9yKHZhciBnPWQ9MCxsPS45KmEubWV0cmljcy50aW1lO2c8TWF0aC5taW4oYyxhLmNoaWxkcmVuLmxlbmd0aCkmJiEoZD49bCk7ZysrKWQrPWEuY2hpbGRyZW5bZ10ubWV0cmljcy50aW1lO2M9Z31yZXR1cm4gZj9hLmNoaWxkcmVuLnNsaWNlKDAsYyk6YS5jaGlsZHJlbn0sX2hhc0xlZnRvdXQ6ZnVuY3Rpb24oYSxjLGQpe3JldHVybiBkP2EubnVtQ2hpbGRyZW4+TWF0aC5taW4oYyxhLmNoaWxkcmVuLmxlbmd0aCk6ITF9LF9udW1MZWZ0b3V0OmZ1bmN0aW9uKGEsYyl7cmV0dXJuIGEubnVtQ2hpbGRyZW4tTWF0aC5taW4oYyxhLmNoaWxkcmVuLmxlbmd0aCl9LF9nZXRQYWRkaW5nTGVmdDpmdW5jdGlvbihhKXtyZXR1cm4gYSsKNX0sX3NvcnQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGE/KGMsZCk9PnFtLnRpbWVXYXN0ZWQoZCktcW0udGltZVdhc3RlZChjKTowfX0pOwo8L3NjcmlwdD4KPC9kb20tbW9kdWxlPgoKCgoKCjxkb20tbW9kdWxlIGlkPSJ0Zi1vcC1iYXIiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBoZWlnaHQ6IDEuNWVtOwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjVlbTsKICAgICAgfQogICAgPC9zdHlsZT4KICAgICZuYnNwO1tbX3BlcmNlbnQodmFsdWUpXV0KICA8L3RlbXBsYXRlPgogIDxzY3JpcHQ+Ly9+fldFQlBBVEh+fi90Zi1vcC1wcm9maWxlL3RmLW9wLWRldGFpbHMuaHRtbC5qcwpQb2x5bWVyKHtpczoidGYtb3AtYmFyIixwcm9wZXJ0aWVzOnt2YWx1ZTp7dHlwZTpOdW1iZXJ9LGNvbG9yOnt0eXBlOlN0cmluZ319LG9ic2VydmVyczpbIl91cGRhdGVWYWx1ZSh2YWx1ZSwgY29sb3IpIl0sX3BlcmNlbnQ6cW0ucGVyY2VudCxfdXBkYXRlVmFsdWU6ZnVuY3Rpb24oYSxjKXtjJiYoYT1xbS5wZXJjZW50KGEpLHRoaXMuc3R5bGUuYmFja2dyb3VuZD1gbGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCAke2N9ICR7YX0sICNjY2MgJHthfSlgKX19KTsKPC9zY3JpcHQ+CjwvZG9tLW1vZHVsZT4KCgo8ZG9tLW1vZHVsZSBpZD0idGYtb3AtZGV0YWlscyI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICBwYXBlci1jYXJkIHsKICAgICAgICAtLXBhcGVyLWNhcmQtaGVhZGVyLWNvbG9yOiB3aGl0ZTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQogICAgICB0Zi1vcC1iYXIgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CiAgICAgICNzdWJoZWFkZXIgewogICAgICAgIHBhZGRpbmc6IDAgMTZweCA2cHg7CiAgICAgICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KTsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgdG9wOiAtMTBweDsKICAgICAgfQogICAgICAuY2FyZC1jb250ZW50IHsKICAgICAgICBiYWNrZ3JvdW5kOiAjZmZmOwogICAgICB9CiAgICAgIC5jYXJkLWNvbnRlbnQgPiBkaXYgewogICAgICAgIG1hcmdpbi1ib3R0b206IDFlbTsKICAgICAgfQogICAgICAuZXhwcmVzc2lvbiB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgd29yZC13cmFwOiBicmVhay13b3JkOwogICAgICB9CiAgICAgIC51bmF2YWlsYWJsZSB7CiAgICAgICAgZm9udC1zdHlsZTogaXRhbGljOwogICAgICAgIGNvbG9yOiAjNjY2OwogICAgICB9CgogICAgICAubGF5b3V0IHsKICAgICAgICBkaXNwbGF5OiB0YWJsZTsKICAgICAgICB3aWR0aDogNTAlOwogICAgICAgIGJvcmRlci1zcGFjaW5nOiAxZW0gMC4zZW07CiAgICAgIH0KICAgICAgLmxheW91dCA+ICogewogICAgICAgIGRpc3BsYXk6IHRhYmxlLXJvdzsKICAgICAgfQogICAgICAubGF5b3V0ID4gKiA+ICogewogICAgICAgIGRpc3BsYXk6IHRhYmxlLWNlbGw7CiAgICAgIH0KICAgICAgLmxheW91dCAuc2l6ZSwKICAgICAgLmxheW91dCAuc2l6ZS14IHsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgIH0KICAgICAgLmxheW91dCAuc2l6ZS14IHsKICAgICAgICBmb250LXdlaWdodDogYm9sZDsKICAgICAgICBjb2xvcjogIzg4ODsKICAgICAgfQogICAgICAubGF5b3V0IC5zZW1hbnRpY3MgewogICAgICAgIGZvbnQtc2l6ZTogc21hbGxlcjsKICAgICAgICBmb250LXdlaWdodDogYm9sZDsKICAgICAgICBjb2xvcjogIzQ4YzsKICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CiAgICAgIH0KICAgICAgLmxheW91dCAuYWxpZ25tZW50IHsKICAgICAgICAvKiBNYWtlIHRoZSBiYWNrZ3JvdW5kIGV4dGVuZCBvdXRzaWRlIHRoZSBib3ggKi8KICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgcGFkZGluZzogMC41ZW07CiAgICAgICAgbWFyZ2luLXRvcDogLTAuNWVtOwogICAgICAgIHdpZHRoOiA1MCU7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgfQogICAgPC9zdHlsZT4KICAgIDxwYXBlci1jYXJkIGlkPSJjYXJkIiBoZWFkaW5nPSJbW25vZGUubmFtZV1dIiBlbGV2YXRpb249IjIiPgogICAgICA8ZGl2IGlkPSJzdWJoZWFkZXIiPltbX3N1YmhlYWRlcihub2RlKV1dPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNhcmQtY29udGVudCI+CiAgICAgICAgPGRpdiBoaWRkZW49IltbIV9oYXNGbG9wcyhub2RlKV1dIj4KICAgICAgICAgIDxiPkZMT1BTIHV0aWxpemF0aW9uOiA8L2I+CiAgICAgICAgICA8dGYtb3AtYmFyIGNvbG9yPSJbW19mbG9wc0NvbG9yKG5vZGUpXV0iIHZhbHVlPSJbW191dGlsaXphdGlvbihub2RlKV1dIj48L3RmLW9wLWJhcj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGhpZGRlbj0iW1shX2hhc01lbW9yeVV0aWxpemF0aW9uKG5vZGUpXV0iPgogICAgICAgICAgPGI+TWVtb3J5IGJhbmR3aWR0aCB1dGlsaXphdGlvbjogPC9iPgogICAgICAgICAgPHRmLW9wLWJhciBjb2xvcj0iW1tfYndDb2xvcihub2RlKV1dIiB2YWx1ZT0iW1tfbWVtb3J5VXRpbGl6YXRpb24obm9kZSldXSI+PC90Zi1vcC1iYXI+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0idW5hdmFpbGFibGUiIGhpZGRlbj0iW1shX2Z1c2VkKG5vZGUpXV0iPgogICAgICAgICAgUGVyZm9ybWFuY2UgaW5mb3JtYXRpb24gZm9yIGluZGl2aWR1YWwgZnVzZWQgb3BlcmF0aW9ucyBpcyBub3QKICAgICAgICAgIGF2YWlsYWJsZS4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJ1bmF2YWlsYWJsZSIgaGlkZGVuPSJbWyFub2RlLmNhdGVnb3J5XV0iPgogICAgICAgICAgU2VsZWN0IGl0ZW1zIHdpdGhpbiB0aGlzIGNhdGVnb3J5IGZvciBwZXJmb3JtYW5jZSBkZXRhaWxzLgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgaGlkZGVuPSJbWyFub2RlLnhsYS5leHByZXNzaW9uXV0iPgogICAgICAgICAgPGI+WExBIEV4cHJlc3Npb246IDwvYj4KICAgICAgICAgIDxjb2RlIGNsYXNzPSJleHByZXNzaW9uIj5bW25vZGUueGxhLmV4cHJlc3Npb25dXTwvY29kZT4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGhpZGRlbj0iW1shbm9kZS54bGEucHJvdmVuYW5jZV1dIj4KICAgICAgICAgIDxiPlRlbnNvckZsb3cgTmFtZTogPC9iPgogICAgICAgICAgPGNvZGUgY2xhc3M9ImV4cHJlc3Npb24iPltbbm9kZS54bGEucHJvdmVuYW5jZV1dPC9jb2RlPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgaGlkZGVuPSJbWyFub2RlLnhsYS5sYXlvdXRdXSI+CiAgICAgICAgICA8Yj5MYXlvdXQ6IDwvYj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImxheW91dCIgaGlkZGVuPSJbWyFub2RlLnhsYS5sYXlvdXRdXSI+CiAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9Iltbbm9kZS54bGEubGF5b3V0LmRpbWVuc2lvbnNdXSI+CiAgICAgICAgICAgICAgPGRpdiBoaWRkZW49IltbIWluZGV4XV0iPjxzcGFuIGNsYXNzPSJzaXplLXgiPsOXPC9zcGFuPjwvZGl2PgogICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2l6ZSI+W1tpdGVtLnNpemVdXTwvc3Bhbj4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZW1hbnRpY3MiPltbaXRlbS5zZW1hbnRpY3NdXTwvc3Bhbj4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJhbGlnbm1lbnQiIHN0eWxlJD0iYmFja2dyb3VuZC1jb2xvcjpbW19kaW1lbnNpb25Db2xvcihpdGVtKV1dIj5bW19kaW1lbnNpb25IaW50KGl0ZW0pXV08L3NwYW4+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICA8L3BhcGVyLWNhcmQ+CiAgPC90ZW1wbGF0ZT4KCiAgPHNjcmlwdD4vL35+V0VCUEFUSH5+L3RmLW9wLXByb2ZpbGUvdGYtb3AtZGV0YWlscy5odG1sLTIuanMKUG9seW1lcih7aXM6InRmLW9wLWRldGFpbHMiLHByb3BlcnRpZXM6e25vZGU6e3R5cGU6T2JqZWN0LG5vdGlmeTohMCxvYnNlcnZlcjoiX3VwZGF0ZUNhcmQifX0sX3V0aWxpemF0aW9uOnFtLnV0aWxpemF0aW9uLF9tZW1vcnlVdGlsaXphdGlvbjpxbS5tZW1vcnlVdGlsaXphdGlvbixfaGFzRmxvcHM6cW0uaGFzRmxvcHMsX2hhc01lbW9yeVV0aWxpemF0aW9uOnFtLmhhc01lbW9yeVV0aWxpemF0aW9uLF91cGRhdGVDYXJkOmZ1bmN0aW9uKGEpe2EmJihhPXFtLmZsYW1lQ29sb3IocW0udXRpbGl6YXRpb24oYSksLjcpLHRoaXMuJC5jYXJkLnVwZGF0ZVN0eWxlcyh7Ii0tcGFwZXItY2FyZC1iYWNrZ3JvdW5kLWNvbG9yIjphfSkpfSxfc3ViaGVhZGVyOmZ1bmN0aW9uKGEpe3JldHVybiBhP2EueGxhP2EueGxhLmNhdGVnb3J5KyIgb3BlcmF0aW9uIjphLmNhdGVnb3J5PyJPcGVyYXRpb24gY2F0ZWdvcnkiOiJVbmtub3duIjpudWxsfSxfZnVzZWQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEmJgphLnhsYSYmIShhLm1ldHJpY3MmJmEubWV0cmljcy50aW1lKX0sX2RpbWVuc2lvbkNvbG9yOmZ1bmN0aW9uKGEpe2lmKCFhfHwhYS5hbGlnbm1lbnQpcmV0dXJuIG51bGw7YT1hLnNpemUvYS5hbGlnbm1lbnQ7cmV0dXJuIHFtLmZsYW1lQ29sb3IoYS9NYXRoLmNlaWwoYSksMSwuMjUsYz0+MS1NYXRoLnNxcnQoMS1jKSl9LF9kaW1lbnNpb25IaW50OmZ1bmN0aW9uKGEpe2lmKCFhfHwhYS5hbGlnbm1lbnQpcmV0dXJuIG51bGw7dmFyIGM9TWF0aC5jZWlsKGEuc2l6ZS9hLmFsaWdubWVudCksZD0xPT1jPyIiOiI6ICIrYysiIFx1MDBkNyAiK2EuYWxpZ25tZW50O3JldHVybiAwPT1hLnNpemUlYS5hbGlnbm1lbnQ/IkV4YWN0IGZpdCIrZDoiUGFkIHRvICIrYyphLmFsaWdubWVudCtkfSxfZmxvcHNDb2xvcjpmdW5jdGlvbihhKXtyZXR1cm4gcW0uZmxvcHNDb2xvcihxbS51dGlsaXphdGlvbihhKSl9LF9id0NvbG9yOmZ1bmN0aW9uKGEpe3JldHVybiBxbS5id0NvbG9yKHFtLm1lbW9yeVV0aWxpemF0aW9uKGEpKX19KTsKPC9zY3JpcHQ+CjwvZG9tLW1vZHVsZT4KCgoKCjxkb20tbW9kdWxlIGlkPSJ0Zi1vcC1wcm9maWxlIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDEuNWVtOwogICAgICB9CiAgICAgICNjb250cm9sIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZmxvdzogcm93IG5vd3JhcDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgICAgb3ZlcmZsb3c6IGF1dG87CiAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgICAgICBwYWRkaW5nOiAwLjVlbTsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogYm90dG9tOwogICAgICAgIHRleHQtYWxpZ246IGJvdHRvbTsKICAgICAgfQogICAgICAuY29udHJvbFJvd0xlZnQgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1mbG93OiByb3cgbm93cmFwOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgbGluZS1oZWlnaHQ6IDUwcHg7CiAgICAgICAgdGV4dC1hbGlnbjogYm90dG9tOwogICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDsKICAgICAgfQogICAgICAuY29udHJvbFJvd1JpZ2h0IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZmxvdzogcm93IG5vd3JhcDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGxpbmUtaGVpZ2h0OiA1MHB4OwogICAgICAgIHRleHQtYWxpZ246IGJvdHRvbTsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kOwogICAgICB9CiAgICAgIHBhcGVyLXNsaWRlciB7CiAgICAgICAgLS1wYXBlci1zbGlkZXItaW5wdXQ6IHsKICAgICAgICAgIHdpZHRoOiAxMDBweDsKICAgICAgICB9CiAgICAgICAgLS1wYXBlci1zbGlkZXItaGVpZ2h0OiAzcHg7CiAgICAgIH0KICAgICAgI2Rlc2NyaXB0aW9uIHsKICAgICAgICBtYXJnaW4tYm90dG9tOiAyZW07CiAgICAgICAgd2lkdGg6IDYwMHB4OwogICAgICB9CiAgICAgIFtoaWRkZW5dIHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICB9CiAgICA8L3N0eWxlPgogICAgPGRpdiBjbGFzcz0idGYtb3AtcHJvZmlsZSI+CiAgICAgIDxoMz4KICAgICAgICBPdmVyYWxsIFRQVSBGTE9QUyB1dGlsaXphdGlvbiBpcwogICAgICAgIDxzcGFuIHN0eWxlJD0iY29sb3I6W1tfZmxvcHNDb2xvcihfcm9vdCldXSI+CiAgICAgICAgICBbW191dGlsaXphdGlvblBlcmNlbnQoX3Jvb3QpXV08L3NwYW4+CiAgICAgICAgLCBtZW1vcnkgYmFuZHdpZHRoIHV0aWxpemF0aW9uIGlzCiAgICAgICAgPHNwYW4gc3R5bGUkPSJjb2xvcjpbW19id0NvbG9yKF9yb290KV1dIj4KICAgICAgICAgIFtbX21lbW9yeVV0aWxpemF0aW9uUGVyY2VudChfcm9vdCldXTwvc3Bhbj4KICAgICAgPC9oMz4KICAgICAgPGRpdiBpZD0iZGVzY3JpcHRpb24iPgogICAgICAgIDxwPgogICAgICAgICAgTW9kaWZ5aW5nIHlvdXIgbW9kZWwncyBhcmNoaXRlY3R1cmUsIGRhdGEgZGltZW5zaW9ucywgYW5kIGltcHJvdmluZwogICAgICAgICAgdGhlIGVmZmljaWVuY3kgb2YgQ1BVIG9wZXJhdGlvbnMgbWF5IGhlbHAgcmVhY2ggdGhlIFRQVSdzIEZMT1BTCiAgICAgICAgICBwb3RlbnRpYWwuCiAgICAgICAgCiAgICAgICAgPHA+CiAgICAgICAgICAiSWRsZSIgcmVwcmVzZW50cyB0aGUgcG9ydGlvbiBvZiB0aGUgdG90YWwgZXhlY3V0aW9uIHRpbWUgb24gZGV2aWNlCiAgICAgICAgICB0aGF0IGlzIGlkbGUuIFdhc3RlZCB0aW1lIGlzIGRlZmluZWQgYnkKICAgICAgICAgIDxjb2RlPlJ1bnRpbWVGcmFjdGlvbiAqICgxIC0gbWF4KEZsb3BzVXRpbGl6YXRpb24sCiAgICAgICAgICAgIE1lbW9yeVV0aWxpemF0aW9uKSk8L2NvZGU+LgogICAgICAgIAogICAgICA8L2Rpdj4KICAgICAgPGRpdiBpZD0iY29udHJvbCI+CiAgICAgICAgPHNwYW4gY2xhc3M9ImNvbnRyb2xSb3dMZWZ0IiBoaWRkZW4kPSJbWyFfaGFzVHdvUHJvZmlsZXNdXSI+QnkgUHJvZ3JhbQogICAgICAgICAgPHBhcGVyLXRvZ2dsZS1idXR0b24gY2hlY2tlZD0ie3tpc0J5Q2F0ZWdvcnl9fSI+IDwvcGFwZXItdG9nZ2xlLWJ1dHRvbj5CeSBDYXRlZ29yeTwvc3Bhbj4KICAgICAgICAKICAgICAgICA8c3BhbiBjbGFzcz0iY29udHJvbFJvd0xlZnQiPlNob3cgdG9wCiAgICAgICAgICA8cGFwZXItc2xpZGVyIG1pbj0iMTAiIG1heD0iMTAwIiBzbmFwcyBzdGVwPSIxMCIgdmFsdWU9Int7Y2hpbGRyZW5Db3VudH19IiBlZGl0YWJsZT4KICAgICAgICAgIDwvcGFwZXItc2xpZGVyPm9wczwvc3Bhbj4KICAgICAgICA8c3BhbiBjbGFzcz0iY29udHJvbFJvd1JpZ2h0Ij4mbmJzcDsKICAgICAgICAgIDxwYXBlci10b2dnbGUtYnV0dG9uIGNoZWNrZWQ9Int7YnlXYXN0ZX19Ij4gPC9wYXBlci10b2dnbGUtYnV0dG9uPlNvcnQKICAgICAgICAgIGJ5IHdhc3RlZCB0aW1lPC9zcGFuPgogICAgICAgIDxzcGFuIGNsYXNzPSJjb250cm9sUm93UmlnaHQiPm9mZiZuYnNwOwogICAgICAgICAgPHBhcGVyLXRvZ2dsZS1idXR0b24gY2hlY2tlZD0ie3tzaG93UDkwfX0iPiA8L3BhcGVyLXRvZ2dsZS1idXR0b24+VG9wCiAgICAgICAgICA5MCU8L3NwYW4+CiAgICAgIDwvZGl2PgogICAgICA8dGYtb3AtdGFibGUgcm9vdC1ub2RlPSJbW19yb290XV0iIGFjdGl2ZT0ie3thY3RpdmV9fSIgYnktd2FzdGU9Int7YnlXYXN0ZX19IiBzaG93LXA5MD0ie3tzaG93UDkwfX0iIGNoaWxkcmVuLWNvdW50PSJ7e2NoaWxkcmVuQ291bnR9fSI+CiAgICAgIDwvdGYtb3AtdGFibGU+CiAgICA8L2Rpdj4KICA8L3RlbXBsYXRlPgoKICA8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdGYtb3AtcHJvZmlsZS90Zi1vcC1wcm9maWxlLmh0bWwuanMKUG9seW1lcih7aXM6InRmLW9wLXByb2ZpbGUiLHByb3BlcnRpZXM6e19kYXRhOnt0eXBlOk9iamVjdCxub3RpZnk6ITB9LF9yb290Ont0eXBlOk9iamVjdCxub3RpZnk6ITB9LGFjdGl2ZTp7dHlwZTpPYmplY3Qsbm90aWZ5OiEwLHZhbHVlOm51bGx9LF9oYXNUd29Qcm9maWxlczp7dHlwZTpCb29sZWFuLGNvbXB1dGVkOiJfY2hlY2tQcm9maWxlcyhfZGF0YSkiLG5vdGlmeTohMH0saXNCeUNhdGVnb3J5Ont0eXBlOkJvb2xlYW4sdmFsdWU6ITEsbm90aWZ5OiEwfSxzaG93UDkwOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEsbm90aWZ5OiEwfSxieVdhc3RlOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEsbm90aWZ5OiEwfSxjaGlsZHJlbkNvdW50Ont0eXBlOk51bWJlcix2YWx1ZToxMCxub3RpZnk6ITB9fSxvYnNlcnZlcnM6WyJfZ2V0Um9vdChfZGF0YSwgaXNCeUNhdGVnb3J5KSJdLF9sb2FkOmZ1bmN0aW9uKGEpe3RoaXMuX2RhdGE9YX0sX2dldFJvb3Q6ZnVuY3Rpb24oYSxjKXt0aGlzLl9yb290PQp0aGlzLl9oYXNUd29Qcm9maWxlcz9jP2EuYnlDYXRlZ29yeTphLmJ5UHJvZ3JhbTphLmJ5Q2F0ZWdvcnl8fGEuYnlQcm9ncmFtfSxfY2hlY2tQcm9maWxlczpmdW5jdGlvbihhKXtyZXR1cm4gbnVsbCE9YS5ieVByb2dyYW0mJm51bGwhPWEuYnlDYXRlZ29yeX0sX3V0aWxpemF0aW9uUGVyY2VudDpmdW5jdGlvbihhKXtyZXR1cm4gcW0ucGVyY2VudChxbS51dGlsaXphdGlvbihhKSl9LF9tZW1vcnlVdGlsaXphdGlvblBlcmNlbnQ6ZnVuY3Rpb24oYSl7cmV0dXJuIHFtLnBlcmNlbnQocW0ubWVtb3J5VXRpbGl6YXRpb24oYSkpfSxfaGFzRmxvcHM6ZnVuY3Rpb24oYSl7cmV0dXJuIDA8YS5tZXRyaWNzLmZsb3BzfSxfZmxvcHNDb2xvcjpmdW5jdGlvbihhKXtyZXR1cm4gcW0uZmxvcHNDb2xvcihxbS51dGlsaXphdGlvbihhKSl9LF9id0NvbG9yOmZ1bmN0aW9uKGEpe3JldHVybiBxbS5id0NvbG9yKHFtLm1lbW9yeVV0aWxpemF0aW9uKGEpKX19KTsKPC9zY3JpcHQ+CjwvZG9tLW1vZHVsZT4KCjxzY3JpcHQ+Ly9+fldFQlBBVEh+fi90Zi1wcm9maWxlLWNvbW1vbi91dGlsLmpzCihmdW5jdGlvbihhKXsoZnVuY3Rpb24oYyl7KGZ1bmN0aW9uKGQpe2QudGltZT1mdW5jdGlvbihmLGcpe2xldCBsPURhdGUubm93KCk7Zz1nKCk7Y29uc29sZS5sb2coZiwiOiIsRGF0ZS5ub3coKS1sLCJtcyIpO3JldHVybiBnfTtkLmdldFRyYWNrZXI9ZnVuY3Rpb24oZil7cmV0dXJue3NldE1lc3NhZ2U6ZnVuY3Rpb24oZyl7Zi5zZXQoInByb2dyZXNzIix7dmFsdWU6Zi5wcm9ncmVzcy52YWx1ZSxtc2c6Z30pfSx1cGRhdGVQcm9ncmVzczpmdW5jdGlvbihnKXtmLnNldCgicHJvZ3Jlc3MiLHt2YWx1ZTpmLnByb2dyZXNzLnZhbHVlK2csbXNnOmYucHJvZ3Jlc3MubXNnfSl9LHJlcG9ydEVycm9yOmZ1bmN0aW9uKGcsbCl7Y29uc29sZS5lcnJvcihsLnN0YWNrKTtmLnNldCgicHJvZ3Jlc3MiLHt2YWx1ZTpmLnByb2dyZXNzLnZhbHVlLG1zZzpnLGVycm9yOiEwfSl9fX07ZC5ydW5UYXNrPWZ1bmN0aW9uKGYsZyxsLGspe2suc2V0TWVzc2FnZShmKTt0cnl7bGV0IG09YS5wcm9maWxlLnV0aWwudGltZShmLApsKTtrLnVwZGF0ZVByb2dyZXNzKGcpO3JldHVybiBtfWNhdGNoKG0pe2sucmVwb3J0RXJyb3IoIkZhaWxlZCAiK2YsbSl9fX0pKGMudXRpbHx8KGMudXRpbD17fSkpfSkoYS5wcm9maWxlfHwoYS5wcm9maWxlPXt9KSl9KSh0Znx8KHRmPXt9KSk7Cjwvc2NyaXB0PgoKPHNjcmlwdD4vL35+V0VCUEFUSH5+L21lbW9yeS12aWV3ZXIvdXRpbHMuanMKdmFyIHJtOwooZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYyhkLGYsZyxsKXtyZXR1cm4icmdiYSgiK01hdGgucm91bmQoMjU1KmQpKyIsIitNYXRoLnJvdW5kKDI1NSpmKSsiLCIrTWF0aC5yb3VuZCgyNTUqZykrIiwiK2wrIikifWEuYnl0ZXNUb01pQj1mdW5jdGlvbihkKXtyZXR1cm4gZC8xMDQ4NTc2fTthLmJ5dGVTaXplT2ZQcmltaXRpdmVUeXBlPWZ1bmN0aW9uKGQpe3N3aXRjaChkKXtjYXNlICJQUkVEIjpyZXR1cm4gMTtjYXNlICJTOCI6cmV0dXJuIDE7Y2FzZSAiUzE2IjpyZXR1cm4gMjtjYXNlICJTMzIiOnJldHVybiA0O2Nhc2UgIlM2NCI6cmV0dXJuIDg7Y2FzZSAiVTgiOnJldHVybiAxO2Nhc2UgIlUxNiI6cmV0dXJuIDI7Y2FzZSAiVTMyIjpyZXR1cm4gNDtjYXNlICJVNjQiOnJldHVybiA4O2Nhc2UgIkJGMTYiOnJldHVybiAyO2Nhc2UgIkYxNiI6cmV0dXJuIDI7Y2FzZSAiRjMyIjpyZXR1cm4gNDtjYXNlICJGNjQiOnJldHVybiA4O2Nhc2UgIkM2NCI6cmV0dXJuIDg7Y2FzZSAiVE9LRU4iOnJldHVybiAwO2RlZmF1bHQ6cmV0dXJuIGNvbnNvbGUuZXJyb3IoIlVuaGFuZGxlZCBwcmltaXRpdmUgdHlwZSAiKwpkKSwwfX07YS5mbGFtZUNvbG9yPWZ1bmN0aW9uKGQsZixnLGwpe3ZvaWQgMD09PWYmJihmPTEpO3ZvaWQgMD09PWcmJihnPTEpO3ZvaWQgMD09PWwmJihsPWs9PjEtTWF0aC5zcXJ0KDEtaykpO2lmKGlzTmFOKGQpKXJldHVybiBjKGYsZixmLGcpO2Q9bChkKTtyZXR1cm4uNT5kP2MoZiwyKmQqZiwwLGcpOmMoMiooMS1kKSpmLGYsMCxnKX07YS5wZXJjZW50PWZ1bmN0aW9uKGQpe3JldHVybiBpc05hTihkKT8iLSI6Ljk5NTw9ZD8iMTAwJSI6MUUtNT5kPyIwLjAwJSI6KDEwMCpkKS50b1ByZWNpc2lvbigyKSsiJSJ9fSkocm18fChybT17fSkpOwo8L3NjcmlwdD4KCgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vbWVtb3J5LXZpZXdlci9zaGFwZS5qcwp2YXIgc207CihmdW5jdGlvbihhKXtjbGFzcyBje2NvbnN0cnVjdG9yKGQpe3RoaXMuZWxlbWVudFR5cGU9ZC5lbGVtZW50VHlwZS50b1N0cmluZygpO3RoaXMuZGltZW5zaW9ucz1kLmRpbWVuc2lvbnMubWFwKGY9PnBhcnNlSW50KGYsMTApKTtkLnR1cGxlU2hhcGVzJiYodGhpcy50dXBsZVNoYXBlcz1kLnR1cGxlU2hhcGVzLm1hcChmPT5uZXcgYyhmKSkpO3RoaXMubGF5b3V0PWQubGF5b3V0fXJlc29sdmVTaGFwZUluZGV4KGQpe3JldHVybiBkLnJlZHVjZSgoZixnKT0+Zi50dXBsZVNoYXBlc1tnXSx0aGlzKX11bnBhZGRlZEhlYXBTaXplQnl0ZXMoKXtpZigiVE9LRU4iPT09dGhpcy5lbGVtZW50VHlwZSlyZXR1cm4gMDtpZigiVFVQTEUiPT09dGhpcy5lbGVtZW50VHlwZSlyZXR1cm4gOCp0aGlzLnR1cGxlU2hhcGVzLmxlbmd0aDtsZXQgZD0wO2lmKHRoaXMubGF5b3V0JiYiREVOU0UiIT10aGlzLmxheW91dC5mb3JtYXQpIlNQQVJTRSI9PXRoaXMubGF5b3V0LmZvcm1hdCYmKGY9cGFyc2VJbnQodGhpcy5sYXlvdXQubWF4U3BhcnNlRWxlbWVudHMsCjEwKSxkPWYqcm0uYnl0ZVNpemVPZlByaW1pdGl2ZVR5cGUodGhpcy5lbGVtZW50VHlwZSksZCs9Zip0aGlzLmRpbWVuc2lvbnMubGVuZ3RoKjgpO2Vsc2V7dmFyIGY9dGhpcy5kaW1lbnNpb25zLnJlZHVjZSgoZyxsKT0+ZypsLDEpO2QrPWYqcm0uYnl0ZVNpemVPZlByaW1pdGl2ZVR5cGUodGhpcy5lbGVtZW50VHlwZSl9cmV0dXJuIGR9aHVtYW5TdHJpbmdXaXRoTGF5b3V0KCl7aWYoIlRVUExFIj09PXRoaXMuZWxlbWVudFR5cGUpe3ZhciBkPSIoIjtsZXQgZj0iIjtmb3IoY29uc3QgZyBvZiB0aGlzLnR1cGxlU2hhcGVzKWQ9ZCtmK2cuaHVtYW5TdHJpbmdXaXRoTGF5b3V0KCksZj0iLCAiO3JldHVybiBkKz0iKSJ9ZD10aGlzLmVsZW1lbnRUeXBlLnRvTG93ZXJDYXNlKCkrIlsiO2QrPXRoaXMuZGltZW5zaW9ucy5qb2luKCkrIl0iOyJPUEFRVUUiIT09dGhpcy5lbGVtZW50VHlwZSYmIlRPS0VOIiE9PXRoaXMuZWxlbWVudFR5cGUmJjA8dGhpcy5kaW1lbnNpb25zLmxlbmd0aCYmdGhpcy5sYXlvdXQmJgooZCs9dGhpcy5odW1hbkxheW91dFN0cmluZyh0aGlzLmxheW91dCkpO3JldHVybiBkfWh1bWFuTGF5b3V0U3RyaW5nKGQpe3JldHVybiJTUEFSU0UiPT1kLmZvcm1hdD8ic3BhcnNleyIrZC5tYXhTcGFyc2VFbGVtZW50cysifSI6IkRFTlNFIj09ZC5mb3JtYXQ/InsiK2QubWlub3JUb01ham9yLmpvaW4oKSsifSI6IiJ9fWEuU2hhcGU9Y30pKHNtfHwoc209e30pKTsKPC9zY3JpcHQ+CjxzY3JpcHQ+Ly9+fldFQlBBVEh+fi9tZW1vcnktdmlld2VyL2xvZ2ljYWwtYnVmZmVyLmpzCnZhciB0bTsoZnVuY3Rpb24oYSl7Y2xhc3MgY3tjb25zdHJ1Y3RvcihkKXt0aGlzLmluc3RydWN0aW9uTmFtZT10aGlzLmNvbXB1dGF0aW9uTmFtZT0iIjt0aGlzLnNoYXBlSW5kZXg9W107dGhpcy5pZD1wYXJzZUludChkLmlkLDEwKTt0aGlzLnNpemU9cGFyc2VJbnQoZC5zaXplLDEwKTt0aGlzLmNvbG9yPXBhcnNlSW50KGQuY29sb3IsMTApO3RoaXMuaW5pdEJ1ZmZlckxvY2F0aW9uXyhkLmRlZmluZWRBdCl9aW5pdEJ1ZmZlckxvY2F0aW9uXyhkKXtkJiYodGhpcy5jb21wdXRhdGlvbk5hbWU9ZC5jb21wdXRhdGlvbk5hbWUsdGhpcy5pbnN0cnVjdGlvbk5hbWU9ZC5pbnN0cnVjdGlvbk5hbWUsdGhpcy5zaGFwZUluZGV4PWQuc2hhcGVJbmRleC5tYXAoZj0+cGFyc2VJbnQoZiwxMCkpKX19YS5Mb2dpY2FsQnVmZmVyPWN9KSh0bXx8KHRtPXt9KSk7Cjwvc2NyaXB0Pgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vbWVtb3J5LXZpZXdlci9idWZmZXItYWxsb2NhdGlvbi5qcwp2YXIgdW07KGZ1bmN0aW9uKGEpe2NsYXNzIGN7Y29uc3RydWN0b3IoZCl7dGhpcy5pbmRleD1wYXJzZUludChkLmluZGV4LDEwKTt0aGlzLnNpemU9cGFyc2VJbnQoZC5zaXplLDEwKTt0aGlzLmlzVGhyZWFkTG9jYWw9ZC5pc1RocmVhZExvY2FsfHwhMTt0aGlzLmFzc2lnbmVkPWQuYXNzaWduZWQubWFwKGY9Pm5ldyB2bS5CdWZmZXJBbGxvY2F0aW9uQXNzaWduZWQoZikpO3RoaXMuZ3JvdXBOYW1lPXRoaXMuZ2V0R3JvdXBOYW1lKGQpfWdldEdyb3VwTmFtZShkKXtyZXR1cm4gZC5pc0VudHJ5Q29tcHV0YXRpb25QYXJhbWV0ZXI/IlBhcmFtZXRlciI6ZC5tYXliZUxpdmVPdXQ/Ik91dHB1dCI6ZC5pc1RocmVhZExvY2FsPyJUaHJlYWQtbG9jYWwiOiJUZW1wb3JhcnkifX1hLkJ1ZmZlckFsbG9jYXRpb249Y30pKHVtfHwodW09e30pKTsKPC9zY3JpcHQ+CjxzY3JpcHQ+Ly9+fldFQlBBVEh+fi9tZW1vcnktdmlld2VyL2J1ZmZlci1hbGxvY2F0aW9uLWFzc2lnbmVkLmpzCnZhciB2bTsoZnVuY3Rpb24oYSl7Y2xhc3MgY3tjb25zdHJ1Y3RvcihkKXt0aGlzLmxvZ2ljYWxCdWZmZXJJZD1wYXJzZUludChkLmxvZ2ljYWxCdWZmZXJJZCwxMCk7dGhpcy5vZmZzZXQ9cGFyc2VJbnQoZC5vZmZzZXQsMTApO3RoaXMuc2l6ZT1wYXJzZUludChkLnNpemUsMTApfX1hLkJ1ZmZlckFsbG9jYXRpb25Bc3NpZ25lZD1jfSkodm18fCh2bT17fSkpOwo8L3NjcmlwdD4KPHNjcmlwdD4vL35+V0VCUEFUSH5+L21lbW9yeS12aWV3ZXIvaGxvLWluc3RydWN0aW9uLmpzCnZhciB3bTsoZnVuY3Rpb24oYSl7Y2xhc3MgY3tjb25zdHJ1Y3RvcihkKXt0aGlzLm5hbWU9ZC5uYW1lP2QubmFtZToiIjt0aGlzLm9wY29kZT1kLm9wY29kZT9kLm9wY29kZToiIjt0aGlzLnNoYXBlPWQuc2hhcGU/bmV3IHNtLlNoYXBlKGQuc2hhcGUpOm51bGw7ZC5tZXRhZGF0YSYmKHRoaXMudGZPcE5hbWU9ZC5tZXRhZGF0YS5vcE5hbWU/ZC5tZXRhZGF0YS5vcE5hbWU6IiIpfX1hLkhsb0luc3RydWN0aW9uPWN9KSh3bXx8KHdtPXt9KSk7Cjwvc2NyaXB0PgoKPHNjcmlwdD4vL35+V0VCUEFUSH5+L21lbW9yeS12aWV3ZXIvbWVtb3J5LXVzYWdlLmpzCnZhciB4bTsKKGZ1bmN0aW9uKGEpe2NsYXNzIGN7Y29uc3RydWN0b3IoZCl7dGhpcy5idWZmZXJzXz1bXTt0aGlzLmlkVG9CdWZmZXJfPXt9O3RoaXMuaWRUb0J1ZmZlckFsbG9jYXRpb25fPXt9O3RoaXMubmFtZVRvSGxvXz17fTt0aGlzLnVucGFkZGVkUGVha0hlYXBTaXplQnl0ZXM9dGhpcy5wZWFrSGVhcFNpemVCeXRlcz10aGlzLnJlc3RfPXRoaXMubkNvbG9yXz0wO3RoaXMucGVha0xvZ2ljYWxCdWZmZXJzPVtdO3RoaXMuaW5kZWZpbml0ZU1lbW9yeVVzYWdlQnl0ZXM9dGhpcy5wZWFrSGVhcFNpemVQb3NpdGlvbj0wO3RoaXMuaGVhcFNpemVzPVtdO3RoaXMudW5wYWRkZWRIZWFwU2l6ZXM9W107dGhpcy5tYXhIZWFwPVtdO3RoaXMubWF4SGVhcEJ5U2l6ZT1bXTt0aGlzLmJ5U2l6ZVRvTWF4SGVhcD1bXTt0aGlzLm1heEhlYXBUb0J5U2l6ZT1bXTt0aGlzLmxvZ2ljYWxCdWZmZXJTcGFucz17fTt0aGlzLnVuU2VlbkxvZ2ljYWxCdWZmZXJzXz1uZXcgU2V0O3RoaXMuc2VlbkJ1ZmZlckFsbG9jYXRpb25zXz1uZXcgU2V0Owp0aGlzLnNtYWxsQnVmZmVyU2l6ZT0xNjM4NDt0aGlzLmluaXRIbG9JbnN0cnVjdGlvbnNfKGQuaGxvTW9kdWxlKTt0aGlzLmluaXRNZW1vcnlVc2FnZV8oZC5idWZmZXJBc3NpZ25tZW50KTt0aGlzLmluaXRNYXhIZWFwXygpfWluaXRIbG9JbnN0cnVjdGlvbnNfKGQpe2lmKGQpZm9yKGNvbnN0IGYgb2YgZC5jb21wdXRhdGlvbnMpZm9yKGNvbnN0IGcgb2YgZi5pbnN0cnVjdGlvbnMpZy5uYW1lJiYodGhpcy5uYW1lVG9IbG9fW2cubmFtZV09bmV3IHdtLkhsb0luc3RydWN0aW9uKGcpKTtlbHNlIGNvbnNvbGUud2FybigiTWlzc2luZyBobG9Nb2R1bGUsIHNraXBwaW5nIHVucGFkZGVkIGFsbG9jYXRpb24gc2l6ZSBhbmFseXNpcyIpfWluaXRNZW1vcnlVc2FnZV8oZCl7ZD8odGhpcy5pbml0QnVmZmVyc18oZCksdGhpcy5pbml0QWxsb2NhdGlvbnNfKGQpLChkPXRoaXMuZ2V0SGJtSGVhcFRyYWNlXyhkKSk/dGhpcy5maW5kUGVha01lbW9yeVVzYWdlXyhkKTpjb25zb2xlLmVycm9yKCJNaXNzaW5nIGhibSBoZWFwIHNpbXVsYXRvciB0cmFjZS4iKSk6CmNvbnNvbGUuZXJyb3IoIk5vIGJ1ZmZlciBhc3NpZ25tZW50IGluZm8iKX1nZXRIYm1IZWFwVHJhY2VfKGQpe2Zvcihjb25zdCBmIG9mIGQuaGVhcFNpbXVsYXRvclRyYWNlcylmb3IoY29uc3QgZyBvZiBmLmV2ZW50cylpZihnLmJ1ZmZlcklkJiYoZD10aGlzLmlkVG9CdWZmZXJfW2cuYnVmZmVySWRdKSl7aWYoMCE9ZC5jb2xvcilicmVhaztyZXR1cm4gZn1yZXR1cm4gbnVsbH1pbml0QnVmZmVyc18oZCl7Zm9yKGxldCBmIG9mIGQubG9naWNhbEJ1ZmZlcnMpZD1uZXcgdG0uTG9naWNhbEJ1ZmZlcihmKSx0aGlzLmJ1ZmZlcnNfLnB1c2goZCksdGhpcy5pZFRvQnVmZmVyX1tkLmlkXT1kLHRoaXMudW5TZWVuTG9naWNhbEJ1ZmZlcnNfLmFkZChkLmlkKX1pbml0QWxsb2NhdGlvbnNfKGQpe2Zvcihjb25zdCBmIG9mIGQuYnVmZmVyQWxsb2NhdGlvbnMpe2Q9bmV3IHVtLkJ1ZmZlckFsbG9jYXRpb24oZik7Zm9yKGNvbnN0IGcgb2YgZi5hc3NpZ25lZClnLmxvZ2ljYWxCdWZmZXJJZCYmKHRoaXMuaWRUb0J1ZmZlckFsbG9jYXRpb25fW2cubG9naWNhbEJ1ZmZlcklkXT0KZCl9fW5ld0hlYXBPYmplY3RfKGQsZixnLGwsayl7Y29uc3QgbT1nP3JtLmJ5dGVzVG9NaUIoZy51bnBhZGRlZEhlYXBTaXplQnl0ZXMoKSk6MDtyZXR1cm57aW5zdHJ1Y3Rpb25OYW1lOmYuaW5zdHJ1Y3Rpb25OYW1lLGxvZ2ljYWxCdWZmZXJJZDpmLmlkLHVucGFkZGVkU2l6ZU1pQjptLHRmT3BOYW1lOmwudGZPcE5hbWUsb3Bjb2RlOmwub3Bjb2RlLHNpemVNaUI6cm0uYnl0ZXNUb01pQihmLnNpemUpLGNvbG9yOmQsc2hhcGU6Zz9nLmh1bWFuU3RyaW5nV2l0aExheW91dCgpOiIiLGdyb3VwTmFtZTprfX1hZGRIZWFwT2JqZWN0XyhkLGYsZyl7aWYoZi5zaXplPD1kLnNtYWxsQnVmZmVyU2l6ZSlkLnJlc3RfKz1mLnNpemU7ZWxzZSBpZihmLmluc3RydWN0aW9uTmFtZSl7dmFyIGw9ZC5uYW1lVG9IbG9fW2YuaW5zdHJ1Y3Rpb25OYW1lXTtpZihsKXt2YXIgaz1sLnNoYXBlLnJlc29sdmVTaGFwZUluZGV4KGYuc2hhcGVJbmRleCk7ZC5tYXhIZWFwLnB1c2goZC5uZXdIZWFwT2JqZWN0XyhkLm5Db2xvcl8rKywKZixrLGwsZykpfX19aW5pdE1heEhlYXBfKCl7Zm9yKHZhciBkIG9mIHRoaXMucGVha0xvZ2ljYWxCdWZmZXJzKXtjb25zdCBmPXRoaXMuaWRUb0J1ZmZlckFsbG9jYXRpb25fW2RdO3RoaXMuYWRkSGVhcE9iamVjdF8odGhpcyx0aGlzLmlkVG9CdWZmZXJfW2RdLGY/Zi5ncm91cE5hbWU6IiIpfTAhPXRoaXMucmVzdF8mJihkPSJzbWFsbCAoXHgzYyIrdGhpcy5zbWFsbEJ1ZmZlclNpemUvMTAyNCsiIEtpQikiLHRoaXMubWF4SGVhcC5wdXNoKHtpbnN0cnVjdGlvbk5hbWU6ZCxzaXplTWlCOnJtLmJ5dGVzVG9NaUIodGhpcy5yZXN0XyksY29sb3I6MCxncm91cE5hbWU6ZH0pKTtkPXRoaXMubWF4SGVhcC5tYXAoZnVuY3Rpb24oZixnKXtyZXR1cm57aW5kOmcsdmFsOmZ9fSk7ZC5zb3J0KChmLGcpPT5nLnZhbC5zaXplTWlCLWYudmFsLnNpemVNaUIpO3RoaXMubWF4SGVhcEJ5U2l6ZT1kLm1hcChmdW5jdGlvbihmKXtyZXR1cm4gZi52YWx9KTt0aGlzLmJ5U2l6ZVRvTWF4SGVhcD1kLm1hcChmdW5jdGlvbihmKXtyZXR1cm4gZi5pbmR9KTsKdGhpcy5tYXhIZWFwVG9CeVNpemUubGVuZ3RoPXRoaXMubWF4SGVhcC5sZW5ndGg7Zm9yKGQ9MDtkPHRoaXMuYnlTaXplVG9NYXhIZWFwLmxlbmd0aDtkKyspdGhpcy5tYXhIZWFwVG9CeVNpemVbdGhpcy5ieVNpemVUb01heEhlYXBbZF1dPWR9ZmluZFBlYWtNZW1vcnlVc2FnZV8oZCl7bGV0IGY9W10sZz1bXTt2YXIgbD1bXTtsZXQgaz1bXSxtPTAscD0wLHE9MCxyPTAsdD0wO2Zvcihjb25zdCB5IG9mIGQuZXZlbnRzKXtmLnB1c2gocm0uYnl0ZXNUb01pQihtKSk7Zy5wdXNoKHJtLmJ5dGVzVG9NaUIocCkpO2NvbnN0IHg9cGFyc2VJbnQoeS5idWZmZXJJZCwxMCk7ZD10aGlzLmlkVG9CdWZmZXJfW3hdO3RoaXMudW5TZWVuTG9naWNhbEJ1ZmZlcnNfLmRlbGV0ZSh4KTt2YXIgdj10aGlzLmlkVG9CdWZmZXJBbGxvY2F0aW9uX1t4XTt2JiZ0aGlzLnNlZW5CdWZmZXJBbGxvY2F0aW9uc18uYWRkKHYuaW5kZXgpO3Y9bnVsbDtkLmluc3RydWN0aW9uTmFtZSYmIiIhPWQuaW5zdHJ1Y3Rpb25OYW1lJiYKKHY9dGhpcy5uYW1lVG9IbG9fW2QuaW5zdHJ1Y3Rpb25OYW1lXS5zaGFwZS5yZXNvbHZlU2hhcGVJbmRleChkLnNoYXBlSW5kZXgpKTtzd2l0Y2goeS5raW5kLnRvU3RyaW5nKCkpe2Nhc2UgIkFMTE9DIjpjYXNlICJTSEFSRV9XSVRIIjpsLnB1c2goeCk7bSs9ZC5zaXplO3YmJihwKz12LnVucGFkZGVkSGVhcFNpemVCeXRlcygpKTt0aGlzLmxvZ2ljYWxCdWZmZXJTcGFuc1t4XT1bZi5sZW5ndGgsLTFdO20+cSYmKHE9bSxyPXAsdD1mLmxlbmd0aCxrPWwuc2xpY2UoKSk7YnJlYWs7Y2FzZSAiRlJFRSI6bD1sLmZpbHRlcihDPT5DIT09eCk7bS09ZC5zaXplO3YmJihwLT12LnVucGFkZGVkSGVhcFNpemVCeXRlcygpKTt0aGlzLmxvZ2ljYWxCdWZmZXJTcGFuc1t4XVsxXT1mLmxlbmd0aDswPm0mJmNvbnNvbGUuZXJyb3IoImhlYXBfc2l6ZV9ieXRlcyBceDNjIDAiKTticmVhaztkZWZhdWx0OmNvbnNvbGUubG9nKCJFUlJPUjogdW5rbm93biBoZWFwIGV2ZW50IGtpbmQ6Iix5KX19Zi5wdXNoKHJtLmJ5dGVzVG9NaUIobSkpOwpsPXRoaXMuZmluZEluZGVmaW5pdGVNZW1vcnlVc2FnZV8odGhpcy51blNlZW5Mb2dpY2FsQnVmZmVyc18pO3RoaXMucGVha0hlYXBTaXplQnl0ZXM9cStsO3RoaXMudW5wYWRkZWRQZWFrSGVhcFNpemVCeXRlcz1yK2w7dGhpcy5wZWFrTG9naWNhbEJ1ZmZlcnM9azt0aGlzLnBlYWtIZWFwU2l6ZVBvc2l0aW9uPXQ7Y29uc3QgQT1ybS5ieXRlc1RvTWlCKGwpO3RoaXMuaGVhcFNpemVzPWYubWFwKHk9PnkrQSk7dGhpcy51bnBhZGRlZEhlYXBTaXplcz1nLm1hcCh5PT55K0EpfWZpbmRJbmRlZmluaXRlTWVtb3J5VXNhZ2VfKGQpe2xldCBmPTA7ZC5mb3JFYWNoKGc9Pntjb25zdCBsPXRoaXMuaWRUb0J1ZmZlckFsbG9jYXRpb25fW2ddO2wuaXNUaHJlYWRMb2NhbHx8dGhpcy5zZWVuQnVmZmVyQWxsb2NhdGlvbnNfLmhhcyhsLmluZGV4KXx8KHRoaXMuc2VlbkJ1ZmZlckFsbG9jYXRpb25zXy5hZGQobC5pbmRleCksZis9bC5zaXplLHRoaXMuYWRkSGVhcE9iamVjdF8odGhpcyx0aGlzLmlkVG9CdWZmZXJfW2ddLApsLmdyb3VwTmFtZSkpfSk7cmV0dXJuIHRoaXMuaW5kZWZpbml0ZU1lbW9yeVVzYWdlQnl0ZXM9Zn19YS5NZW1vcnlVc2FnZT1jfSkoeG18fCh4bT17fSkpOwo8L3NjcmlwdD4KCgoKCgo8ZG9tLW1vZHVsZSBpZD0ibXYtbGluZS1jaGFydCI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlIGluY2x1ZGU9InBsb3R0YWJsZS1zdHlsZSI+PC9zdHlsZT4KICAgIDxkaXYgY2xhc3M9Im12LWxpbmUtY2hhcnQiPgogICAgICA8aDI+V29ya2luZyBTcGFjZSBTaXplIChNaUIpIHZzIFByb2dyYW0gT3JkZXIgKEhMTyBTZXF1ZW5jZSk8L2gyPgogICAgICA8ZGl2IGlkPSJjaGFydGRpdiIgc3R5bGU9IndpZHRoOjEyMDBweDtoZWlnaHQ6Mzg0cHgiPjwvZGl2PgogICAgICA8ZGl2IGlkPSJtYXhoZWFwLWRldGFpbHMiPgogICAgICAgIDxlbT5Ib3ZlciBvdmVyIGEgYmFyIGZvciBidWZmZXIgZGV0YWlscyB0byBhcHBlYXIgb24gdGhlIGxlZnQuPC9lbT4KICAgICAgPC9kaXY+CiAgICAgIDxoMz5CeSBQcm9ncmFtIE9yZGVyPC9oMz4KICAgICAgPGRpdiBpZD0ibWF4aGVhcGNoYXJ0IiBzdHlsZT0id2lkdGg6MTIwMHB4O2hlaWdodDoyMDBweCI+PC9kaXY+CiAgICAgIDxoMz5CeSBTaXplPC9oMz4KICAgICAgPGRpdiBpZD0ibWF4aGVhcHNpemVjaGFydCIgc3R5bGU9IndpZHRoOjEyMDBweDtoZWlnaHQ6MjAwcHgiPjwvZGl2PgogICAgPC9kaXY+CiAgPC90ZW1wbGF0ZT4KICA8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vbWVtb3J5LXZpZXdlci9tdi1saW5lLWNoYXJ0LmpzCnZhciB5bTsKKGZ1bmN0aW9uKCl7UG9seW1lcih7aXM6Im12LWxpbmUtY2hhcnQiLHByb3BlcnRpZXM6e2RhdGE6e3R5cGU6T2JqZWN0LG5vdGlmeTohMCxvYnNlcnZlcjoiX2RhdGFDaGFuZ2VkIn0sYWN0aXZlOnt0eXBlOk9iamVjdCxub3RpZnk6ITAsb2JzZXJ2ZXI6Il9yZW5kZXJTcGFucyJ9LGJ1ZmZlclNpemVzOnt0eXBlOkFycmF5LG5vdGlmeTohMH0sdW5wYWRkZWRCdWZmZXJTaXplczp7dHlwZTpBcnJheSxub3RpZnk6ITB9LG1heEhlYXA6e3R5cGU6QXJyYXksbm90aWZ5OiEwfSxtYXhIZWFwQnlTaXplOnt0eXBlOkFycmF5LG5vdGlmeTohMH0sc3BhblBsb3Q6e3R5cGU6T2JqZWN0LG5vdGlmeTohMH0sY29sb3JTY2FsZTp7dHlwZTpPYmplY3Qsbm90aWZ5OiEwfSxfc2VsZWN0ZWRFbnRpdHlJblNyY0NoYXJ0Ont0eXBlOk9iamVjdCxub3RpZnk6ITAsb2JzZXJ2ZXI6Il9zZWxlY3RlZEVudGl0eUNoYW5nZWQifSxfc2VsZWN0ZWRFbnRpdHlJbkRzdENoYXJ0Ont0eXBlOk9iamVjdCxub3RpZnk6ITAsCm9ic2VydmVyOiJfc2VsZWN0ZWRFbnRpdHlDaGFuZ2VkIn0sX3N5bWJvbFRvRXZlbnRDYWxsYmFjazp7dHlwZTpPYmplY3QsdmFsdWU6KCk9Pm5ldyBNYXB9fSxfbWFrZUNoYXJ0RGF0YXNldCgpe2lmKHRoaXMuZGF0YSl7dGhpcy5idWZmZXJTaXplcz10aGlzLmRhdGEuaGVhcFNpemVzLm1hcCgoZCxmKT0+W2YsZF0pO3RoaXMudW5wYWRkZWRCdWZmZXJTaXplcz10aGlzLmRhdGEudW5wYWRkZWRIZWFwU2l6ZXMubWFwKChkLGYpPT5bZixkXSk7dmFyIGE9dGhpcy5kYXRhLm1heEhlYXA7dGhpcy5kYXRhLm1heEhlYXAucmVkdWNlKGZ1bmN0aW9uKGQsZixnKXthW2ddLm9mZnNldD1kO3JldHVybiBkK2Yuc2l6ZU1pQn0sMCk7dGhpcy5tYXhIZWFwPWE7dmFyIGM9dGhpcy5kYXRhLm1heEhlYXBCeVNpemU7dGhpcy5kYXRhLm1heEhlYXBCeVNpemUucmVkdWNlKGZ1bmN0aW9uKGQsZixnKXtjW2ddLm9mZnNldEJ5U2l6ZT1kO3JldHVybiBkK2Yuc2l6ZU1pQn0sMCk7dGhpcy5tYXhIZWFwQnlTaXplPQpjfX0sX2RyYXdQcm9ncmFtT3JkZXIoKXtpZih0aGlzLmRhdGEpe3ZhciBhPW5ldyBQbG90dGFibGUuU2NhbGVzLkxpbmVhcixjPW5ldyBQbG90dGFibGUuU2NhbGVzLkxpbmVhcixkPW5ldyBQbG90dGFibGUuQXhlcy5OdW1lcmljKGEsImJvdHRvbSIpLGY9bmV3IFBsb3R0YWJsZS5BeGVzLk51bWVyaWMoYywibGVmdCIpLGc9bmV3IFBsb3R0YWJsZS5QbG90cy5MaW5lO2cuYWRkRGF0YXNldChuZXcgUGxvdHRhYmxlLkRhdGFzZXQodGhpcy5idWZmZXJTaXplcykpO2cueChmdW5jdGlvbih2KXtyZXR1cm4gdlswXX0sYSkueShmdW5jdGlvbih2KXtyZXR1cm4gdlsxXX0sYykuYXR0cigic3Ryb2tlIiwicmVkIik7dmFyIGw9bmV3IFBsb3R0YWJsZS5QbG90cy5MaW5lO2wuYWRkRGF0YXNldChuZXcgUGxvdHRhYmxlLkRhdGFzZXQodGhpcy51bnBhZGRlZEJ1ZmZlclNpemVzKSk7bC54KGZ1bmN0aW9uKHYpe3JldHVybiB2WzBdfSxhKS55KGZ1bmN0aW9uKHYpe3JldHVybiB2WzFdfSxjKS5hdHRyKCJzdHJva2UiLAoiZ3JleSIpO3ZhciBrPW5ldyBQbG90dGFibGUuUGxvdHMuUmVjdGFuZ2xlLG09dGhpcy5idWZmZXJTaXplcy5sZW5ndGgvNDA7ay5hZGREYXRhc2V0KG5ldyBQbG90dGFibGUuRGF0YXNldChbdGhpcy5idWZmZXJTaXplc1t0aGlzLmRhdGEucGVha0hlYXBTaXplUG9zaXRpb25dXSkpO2sueChmdW5jdGlvbih2KXtyZXR1cm4gdlswXS1tLzJ9LGEpLnkoZnVuY3Rpb24oKXtyZXR1cm4gMH0sYykueDIoZnVuY3Rpb24odil7cmV0dXJuIHZbMF0rbS8yfSkueTIoZnVuY3Rpb24odil7cmV0dXJuIHZbMV19KS5hdHRyKCJmaWxsIiwicmVkIikuYXR0cigib3BhY2l0eSIsLjMpO3ZhciBwPXRoaXMuY29sb3JTY2FsZSxxPW5ldyBQbG90dGFibGUuUGxvdHMuUmVjdGFuZ2xlLHI9dGhpcy5kYXRhLmxvZ2ljYWxCdWZmZXJTcGFucyx0PXRoaXMubWF4SGVhcC5tYXAodj0+e2NvbnN0IEE9clt2LmxvZ2ljYWxCdWZmZXJJZF07cmV0dXJuIEE/e2lkOnYubG9naWNhbEJ1ZmZlcklkLHNwYW46QSxzaXplOnYuc2l6ZU1pQiwKY29sb3I6di5jb2xvcn06bnVsbH0pO3Q9dC5maWx0ZXIodj0+bnVsbCE9PXYpO3EuYWRkRGF0YXNldChuZXcgUGxvdHRhYmxlLkRhdGFzZXQodCkpO3EueChmdW5jdGlvbih2KXtyZXR1cm4gdi5zcGFuWzBdfSxhKS55KGZ1bmN0aW9uKCl7cmV0dXJuIDB9LGMpLngyKGZ1bmN0aW9uKHYpe3JldHVybiB2LnNwYW5bMV19KS55MihmdW5jdGlvbih2KXtyZXR1cm4gdi5zaXplfSkuYXR0cigiZmlsbCIsZnVuY3Rpb24odil7cmV0dXJuKHYuY29sb3IlMTApLnRvU3RyaW5nKCl9LHApLmF0dHIoImZpbGwtb3BhY2l0eSIsMCk7dGhpcy5zcGFuUGxvdD1xO3A9bmV3IFBsb3R0YWJsZS5TY2FsZXMuQ29sb3I7cC5yYW5nZShbInJlZCIsImdyZXkiXSk7cC5kb21haW4oWyJTaXplcyIsIlVucGFkZGVkIFNpemVzIl0pO3A9bmV3IFBsb3R0YWJsZS5Db21wb25lbnRzLkxlZ2VuZChwKTtwLm1heEVudHJpZXNQZXJSb3coMik7YT1uZXcgUGxvdHRhYmxlLkNvbXBvbmVudHMuR3JpZGxpbmVzKGEsYyk7Cmc9bmV3IFBsb3R0YWJsZS5Db21wb25lbnRzLkdyb3VwKFtrLGcsbCxhLHFdKTtkPW5ldyBQbG90dGFibGUuQ29tcG9uZW50cy5UYWJsZShbW251bGwscF0sW2YsZ10sW251bGwsZF1dKTtmPWQzLnNlbGVjdCh0aGlzLiQuY2hhcnRkaXYpO2Yuc2VsZWN0QWxsKCIuY29tcG9uZW50IikucmVtb3ZlKCk7ZC5yZW5kZXJUbyhmKX19LF9kcmF3TWF4SGVhcCgpe2xldCBhPW5ldyBQbG90dGFibGUuU2NhbGVzLkxpbmVhcixjPW5ldyBQbG90dGFibGUuU2NhbGVzLkxpbmVhcjtuZXcgUGxvdHRhYmxlLkF4ZXMuTnVtZXJpYyhjLCJ0b3AiKTtuZXcgUGxvdHRhYmxlLkF4ZXMuTnVtZXJpYyhhLCJsZWZ0Iik7bGV0IGQ9dGhpcy5jb2xvclNjYWxlO2QzLnNlbGVjdCh0aGlzLiQubWF4aGVhcGNoYXJ0KS5zZWxlY3RBbGwoIi5jb21wb25lbnQiKS5yZW1vdmUoKTtkMy5zZWxlY3QodGhpcy4kLm1heGhlYXBzaXplY2hhcnQpLnNlbGVjdEFsbCgiLmNvbXBvbmVudCIpLnJlbW92ZSgpO3RoaXMuX21heEhlYXBDaGFydE1vdXNlTW92ZUtleSYmCih0aGlzLl91bmxpc3Rlbih0aGlzLl9tYXhIZWFwQ2hhcnRNb3VzZU1vdmVLZXkpLHRoaXMuX21heEhlYXBDaGFydE1vdXNlTW92ZUtleT1udWxsKTt0aGlzLl9tYXhIZWFwU2l6ZUNoYXJ0TW91c2VNb3ZlS2V5JiYodGhpcy5fdW5saXN0ZW4odGhpcy5fbWF4SGVhcFNpemVDaGFydE1vdXNlTW92ZUtleSksdGhpcy5fbWF4SGVhcFNpemVDaGFydE1vdXNlTW92ZUtleT1udWxsKTtsZXQgZj1uZXcgUGxvdHRhYmxlLlBsb3RzLlJlY3RhbmdsZTtmLmFkZERhdGFzZXQobmV3IFBsb3R0YWJsZS5EYXRhc2V0KHRoaXMubWF4SGVhcCkpLngoZnVuY3Rpb24obCl7cmV0dXJuIGwub2Zmc2V0fSxjKS55KGZ1bmN0aW9uKCl7cmV0dXJuIDB9LGEpLngyKGZ1bmN0aW9uKGwpe3JldHVybiBsLm9mZnNldCtsLnNpemVNaUJ9KS55MihmdW5jdGlvbigpe3JldHVybiAxMn0pLmF0dHIoImZpbGwiLGZ1bmN0aW9uKGwpe3JldHVybihsLmNvbG9yJTEwKS50b1N0cmluZygpfSxkKS5hdHRyKCJvcGFjaXR5IiwKIjAuNiIpLnJlbmRlclRvKGQzLnNlbGVjdCh0aGlzLiQubWF4aGVhcGNoYXJ0KSk7bGV0IGc9bmV3IFBsb3R0YWJsZS5QbG90cy5SZWN0YW5nbGU7Zy5hZGREYXRhc2V0KG5ldyBQbG90dGFibGUuRGF0YXNldCh0aGlzLm1heEhlYXBCeVNpemUpKS54KGZ1bmN0aW9uKGwpe3JldHVybiBsLm9mZnNldEJ5U2l6ZX0sYykueShmdW5jdGlvbigpe3JldHVybiAwfSxhKS54MihmdW5jdGlvbihsKXtyZXR1cm4gbC5vZmZzZXRCeVNpemUrbC5zaXplTWlCfSkueTIoZnVuY3Rpb24oKXtyZXR1cm4gMTJ9KS5hdHRyKCJmaWxsIixmdW5jdGlvbihsKXtyZXR1cm4obC5jb2xvciUxMCkudG9TdHJpbmcoKX0sZCkuYXR0cigib3BhY2l0eSIsIjAuNiIpLnJlbmRlclRvKGQzLnNlbGVjdCh0aGlzLiQubWF4aGVhcHNpemVjaGFydCkpO3RoaXMuX21heEhlYXBDaGFydE1vdXNlTW92ZUtleT10aGlzLl9saXN0ZW4odGhpcy4kLm1heGhlYXBjaGFydCwibW91c2Vtb3ZlIixsPT57dGhpcy5fb25Ib3ZlckludGVyYWN0aW9uKGwsCmYsZyx0aGlzLmRhdGEubWF4SGVhcFRvQnlTaXplKX0se3Bhc3NpdmU6ITB9KTt0aGlzLl9tYXhIZWFwU2l6ZUNoYXJ0TW91c2VNb3ZlS2V5PXRoaXMuX2xpc3Rlbih0aGlzLiQubWF4aGVhcHNpemVjaGFydCwibW91c2Vtb3ZlIixsPT57dGhpcy5fb25Ib3ZlckludGVyYWN0aW9uKGwsZyxmLHRoaXMuZGF0YS5ieVNpemVUb01heEhlYXApfSx7cGFzc2l2ZTohMH0pfSxfbGlzdGVuKGEsYyxkLGY9bnVsbCl7Y29uc3QgZz1TeW1ib2woKTthLmFkZEV2ZW50TGlzdGVuZXIoYyxkLGYpO3RoaXMuX3N5bWJvbFRvRXZlbnRDYWxsYmFjay5zZXQoZyx7ZXZlbnROYW1lOmMsbm9kZTphLGNhbGxiYWNrOmQsb3B0aW9uczpmfSk7cmV0dXJuIGd9LF91bmxpc3RlbihhKXtjb25zb2xlLmFzc2VydCh0aGlzLl9zeW1ib2xUb0V2ZW50Q2FsbGJhY2suaGFzKGEpLCJDYW5ub3QgdW5saXN0ZW4gYW4gdW5rbm93biBldmVudCIpO2E9dGhpcy5fc3ltYm9sVG9FdmVudENhbGxiYWNrLmdldChhKTtjb25zdCB7Y2FsbGJhY2s6YywKZXZlbnROYW1lOmQsbm9kZTpmLG9wdGlvbnM6Z309YTtmLnJlbW92ZUV2ZW50TGlzdGVuZXIoZCxjLGcpfSxfb25Ib3ZlckludGVyYWN0aW9uKGEsYyxkLGYpe3ZhciBnPWMucm9vdEVsZW1lbnQoKS5ub2RlKCk7KHtsZWZ0Omd9PWcuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpO2NvbnN0IGw9YS5jbGllbnRYLWc7KGE9Yy5lbnRpdGllcygpLmZpbmQoaz0+e2NvbnN0IHt4Om0sd2lkdGg6cH09ay5ib3VuZHM7cmV0dXJuIG08PWwmJm0rcD49bH0pKT8odGhpcy5hY3RpdmU9YS5kYXR1bSx0aGlzLl9zZWxlY3RlZEVudGl0eUluU3JjQ2hhcnQ9YSx0aGlzLl9zZWxlY3RlZEVudGl0eUluRHN0Q2hhcnQ9ZC5lbnRpdGllcygpW2ZbYS5pbmRleF1dKTp0aGlzLmFjdGl2ZT10aGlzLl9zZWxlY3RlZEVudGl0eUluRHN0Q2hhcnQ9dGhpcy5fc2VsZWN0ZWRFbnRpdHlJblNyY0NoYXJ0PW51bGx9LF9zZWxlY3RlZEVudGl0eUNoYW5nZWQoYSxjKXtjJiZjLnNlbGVjdGlvbi5hdHRyKCJvcGFjaXR5IiwKIjAuNiIpO2EmJmEuc2VsZWN0aW9uLmF0dHIoIm9wYWNpdHkiLCIxLjAiKX0sX3JlbmRlclNwYW5zKGEpe3RoaXMuc3BhblBsb3QmJih0aGlzLnNwYW5QbG90LnNlbGVjdGlvbnMoKS5hdHRyKCJmaWxsLW9wYWNpdHkiLCIwIiksYSYmdGhpcy5zcGFuUGxvdC5lbnRpdGllcygpLmZvckVhY2goZnVuY3Rpb24oYyl7Yy5zZWxlY3Rpb24uYXR0cigiZmlsbC1vcGFjaXR5IixjLmRhdHVtLmlkPT09YS5sb2dpY2FsQnVmZmVySWQ/MTowKX0pKX0sX3JlZHJhdzpmdW5jdGlvbigpe3RoaXMuZGF0YSYmKHRoaXMuY29sb3JTY2FsZT1uZXcgUGxvdHRhYmxlLlNjYWxlcy5Db2xvcigiQ2F0ZWdvcnkxMCIpLHRoaXMuX21ha2VDaGFydERhdGFzZXQoKSx0aGlzLl9kcmF3UHJvZ3JhbU9yZGVyKCksdGhpcy5fZHJhd01heEhlYXAoKSl9LF9kYXRhQ2hhbmdlZChhKXthJiZ0aGlzLl9yZWRyYXcoKX0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl9yZWRyYXcoKX19KX0pKHltfHwoeW09e30pKTsKPC9zY3JpcHQ+CjwvZG9tLW1vZHVsZT4KCgoKCgoKPGRvbS1tb2R1bGUgaWQ9InRmLW12LWJhciI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIGhlaWdodDogMS41ZW07CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNWVtOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT4KCgo8ZG9tLW1vZHVsZSBpZD0iYnVmZmVyLWRldGFpbHMiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgcGFwZXItY2FyZCB7CiAgICAgICAgLS1wYXBlci1jYXJkLWhlYWRlci1jb2xvcjogd2hpdGU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KICAgICAgdGYtbXYtYmFyIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQogICAgICAjc3ViaGVhZGVyIHsKICAgICAgICBwYWRkaW5nOiAwIDE2cHggNnB4OwogICAgICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyk7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHRvcDogLTEwcHg7CiAgICAgIH0KICAgICAgLmNhcmQtY29udGVudCB7CiAgICAgICAgYmFja2dyb3VuZDogI2ZmZjsKICAgICAgfQogICAgICAuY2FyZC1jb250ZW50ID4gZGl2IHsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxZW07CiAgICAgIH0KICAgICAgLmV4cHJlc3Npb24gewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDsKICAgICAgfQogICAgPC9zdHlsZT4KICAgIDxwYXBlci1jYXJkIGlkPSJjYXJkIiBoZWFkaW5nPSJbW25vZGUuaW5zdHJ1Y3Rpb25OYW1lXV0iIGhpZGRlbj0iW1shbm9kZV1dIiBlbGV2YXRpb249IjIiPgogICAgICA8ZGl2IGlkPSJzdWJoZWFkZXIiPltbX3N1YmhlYWRlcihub2RlKV1dPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNhcmQtY29udGVudCI+CiAgICAgICAgPGRpdiBoaWRkZW49IltbIXNpemVdXSI+CiAgICAgICAgICA8aDQ+U2l6ZTogPHNwYW4+W1tzaXplXV08L3NwYW4+PGI+IE1pQjwvYj48L2g0PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgaGlkZGVuPSJbWyF1bnBhZGRlZFNpemVdXSI+CiAgICAgICAgICA8Yj5VbnBhZGRlZCBTaXplOiA8L2I+PHNwYW4+W1t1bnBhZGRlZFNpemVdXTwvc3Bhbj48Yj4gTWlCPC9iPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgaGlkZGVuPSJbWyFwYWRkaW5nXV0iPgogICAgICAgICAgPGI+RXh0cmEgbWVtb3J5IGR1ZSB0byBwYWRkaW5nOiA8L2I+PHNwYW4+W1twYWRkaW5nXV08L3NwYW4+PGI+IE1pQjwvYj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGhpZGRlbj0iW1shZXhwYW5zaW9uXV0iPgogICAgICAgICAgPGI+RXhwYW5zaW9uOiA8L2I+PHNwYW4+W1tleHBhbnNpb25dXTwvc3Bhbj48Yj5YPC9iPgogICAgICAgICAgPHRmLW12LWJhciB2YWx1ZT0iW1t1dGlsaXphdGlvbl1dIj48L3RmLW12LWJhcj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGhpZGRlbj0iW1shbm9kZS5zaGFwZV1dIj4KICAgICAgICAgIDxiPlNoYXBlIChhbmQgbWlub3ItdG8tbWFqb3Igb3JkZXIpOiA8L2I+CiAgICAgICAgICA8Y29kZSBjbGFzcz0iZXhwcmVzc2lvbiI+W1tub2RlLnNoYXBlXV08L2NvZGU+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBoaWRkZW49IltbIW5vZGUudGZPcE5hbWVdXSI+CiAgICAgICAgICA8Yj5UZiBPcCBOYW1lOiA8L2I+CiAgICAgICAgICA8Y29kZSBjbGFzcz0iZXhwcmVzc2lvbiI+W1tub2RlLnRmT3BOYW1lXV08L2NvZGU+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBoaWRkZW49IltbIW5vZGUuZ3JvdXBOYW1lXV0iPgogICAgICAgICAgPGI+QWxsb2NhdGlvbiBUeXBlOiA8L2I+PHNwYW4+W1tub2RlLmdyb3VwTmFtZV1dPC9zcGFuPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIDwvcGFwZXItY2FyZD4KICA8L3RlbXBsYXRlPgogIDxzY3JpcHQ+Ly9+fldFQlBBVEh+fi9tZW1vcnktdmlld2VyL2J1ZmZlci1kZXRhaWxzLmpzCnZhciB6bTsKKGZ1bmN0aW9uKCl7UG9seW1lcih7aXM6InRmLW12LWJhciIscHJvcGVydGllczp7dmFsdWU6e3R5cGU6TnVtYmVyLG5vdGlmeTohMCxvYnNlcnZlcjoiX3VwZGF0ZVZhbHVlIn19LF91cGRhdGVWYWx1ZTpmdW5jdGlvbihhKXtjb25zdCBjPXJtLmZsYW1lQ29sb3IoYSk7YT1ybS5wZXJjZW50KGEpO3RoaXMuc3R5bGUuYmFja2dyb3VuZD1gbGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCAke2N9ICR7YX0sICNjY2MgJHthfSlgfX0pO1BvbHltZXIoe2lzOiJidWZmZXItZGV0YWlscyIscHJvcGVydGllczp7bm9kZTp7dHlwZTpPYmplY3Qsbm90aWZ5OiEwLG9ic2VydmVyOiJfdXBkYXRlQ2FyZCJ9LHNpemU6e3R5cGU6U3RyaW5nLG5vdGlmeTohMH0sdW5wYWRkZWRTaXplOnt0eXBlOlN0cmluZyxub3RpZnk6ITB9LHBhZGRpbmc6e3R5cGU6U3RyaW5nLG5vdGlmeTohMH0sZXhwYW5zaW9uOnt0eXBlOlN0cmluZyxub3RpZnk6ITB9LHV0aWxpemF0aW9uOnt0eXBlOk51bWJlcixub3RpZnk6ITB9fSwKX3VwZGF0ZUNhcmQ6ZnVuY3Rpb24oYSl7aWYoYSl7dGhpcy5zaXplPWEuc2l6ZU1pQi50b0ZpeGVkKDEpO3ZhciBjPSJyZ2IoMTkyLDE5MiwxOTIpIjthLnVucGFkZGVkU2l6ZU1pQiYmKHRoaXMudW5wYWRkZWRTaXplPWEudW5wYWRkZWRTaXplTWlCLnRvRml4ZWQoMSksdGhpcy5wYWRkaW5nPShhLnNpemVNaUItYS51bnBhZGRlZFNpemVNaUIpLnRvRml4ZWQoMSksdGhpcy51dGlsaXphdGlvbj1hLnVucGFkZGVkU2l6ZU1pQi9hLnNpemVNaUIsdGhpcy5leHBhbnNpb249KDEvdGhpcy51dGlsaXphdGlvbikudG9GaXhlZCgxKSxjPXJtLmZsYW1lQ29sb3IodGhpcy51dGlsaXphdGlvbiwuNykpO3RoaXMuJC5jYXJkLnVwZGF0ZVN0eWxlcyh7Ii0tcGFwZXItY2FyZC1iYWNrZ3JvdW5kLWNvbG9yIjpjfSk7dGhpcy4kLnN1YmhlYWRlci5zdHlsZS5iYWNrZ3JvdW5kQ29sb3I9Y319LF9zdWJoZWFkZXI6ZnVuY3Rpb24oYSl7cmV0dXJuIGEmJmEub3Bjb2RlP2Eub3Bjb2RlKyIgb3BlcmF0aW9uIjoKIiJ9fSl9KSh6bXx8KHptPXt9KSk7Cjwvc2NyaXB0Pgo8L2RvbS1tb2R1bGU+CgoKPGRvbS1tb2R1bGUgaWQ9Im1lbW9yeS12aWV3ZXItZGFzaGJvYXJkIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBvdmVyZmxvdy14OiBhdXRvOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CiAgICAgICNkZXNjcmlwdGlvbiB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMmVtOwogICAgICAgIHdpZHRoOiA2MDBweDsKICAgICAgfQogICAgICBtdi1saW5lLWNoYXJ0IHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8ZGl2IGNsYXNzPSJtZW1vcnktdmlld2VyLWRhc2hib2FyZCIgc3R5bGU9Im92ZXJmbG93OmF1dG8iPgogICAgICA8aDM+TW9kdWxlIG5hbWU6IDxzcGFuPltbbW9kdWxlTmFtZV9dXTwvc3Bhbj48L2gzPgogICAgICA8aDM+CiAgICAgICAgUGVhayBtZW1vcnkgYWxsb2NhdGlvbiBpcyA8c3Bhbj57e3BlYWtIZWFwU2l6ZU1pQl99fTwvc3Bhbj4gTWlCCiAgICAgICAgPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToyMHB4IiBoaWRkZW49Int7IXVucGFkZGVkUGVha0hlYXBTaXplTWlCX319Ij4oIHt7dW5wYWRkZWRQZWFrSGVhcFNpemVNaUJffX0gTWlCIHdpdGhvdXQgcGFkZGluZyk8L3NwYW4+CiAgICAgIDwvaDM+CiAgICAgIDxkaXYgaWQ9ImRlc2NyaXB0aW9uIj4KICAgICAgICA8cD4KICAgICAgICAgIE1vZGlmeWluZyB5b3VyIG1vZGVsJ3MgYXJjaGl0ZWN0dXJlLCBiYXRjaCBzaXplIGFuZCBkYXRhIGRpbWVudGlvbnMKICAgICAgICAgIG1heSBoZWxwIHJlZHVjZSB0aGUgbWVtb3J5IGZvb3RwcmludC4KICAgICAgICAKICAgICAgPC9kaXY+CiAgICAgIDxtdi1saW5lLWNoYXJ0IGRhdGE9Int7dXNhZ2V9fSIgYWN0aXZlPSJ7e2FjdGl2ZX19Ij48L212LWxpbmUtY2hhcnQ+CiAgICA8L2Rpdj4KICA8L3RlbXBsYXRlPgogIDxzY3JpcHQ+Ly9+fldFQlBBVEh+fi9tZW1vcnktdmlld2VyL21lbW9yeS12aWV3ZXItZGFzaGJvYXJkLmpzCnZhciBBbTsKKGZ1bmN0aW9uKCl7UG9seW1lcih7aXM6Im1lbW9yeS12aWV3ZXItZGFzaGJvYXJkIixwcm9wZXJ0aWVzOntfZGF0YTp7dHlwZTpPYmplY3Qsbm90aWZ5OiEwLG9ic2VydmVyOiJkYXRhQ2hhbmdlZF8ifSxobG9Nb2R1bGVfOnt0eXBlOk9iamVjdH0sbW9kdWxlTmFtZV86e3R5cGU6U3RyaW5nfSxwZWFrSGVhcFNpemVNaUJfOnt0eXBlOlN0cmluZ30sdW5wYWRkZWRQZWFrSGVhcFNpemVNaUJfOnt0eXBlOlN0cmluZ30sdXNhZ2U6e3R5cGU6T2JqZWN0LG5vdGlmeTohMH0sYWN0aXZlOnt0eXBlOk9iamVjdCxub3RpZnk6ITAsdmFsdWU6bnVsbH19LGRhdGFDaGFuZ2VkXyhhKXthJiZhLmhsb01vZHVsZSYmYS5idWZmZXJBc3NpZ25tZW50JiYodGhpcy5obG9Nb2R1bGVfPWEuaGxvTW9kdWxlLHRoaXMubW9kdWxlTmFtZV89dGhpcy5obG9Nb2R1bGVfLm5hbWU/dGhpcy5obG9Nb2R1bGVfLm5hbWU6IiIsdGhpcy51c2FnZT1uZXcgeG0uTWVtb3J5VXNhZ2UoYSksdGhpcy5wZWFrSGVhcFNpemVNaUJfPXJtLmJ5dGVzVG9NaUIodGhpcy51c2FnZS5wZWFrSGVhcFNpemVCeXRlcykudG9GaXhlZCgyKSwKdGhpcy51bnBhZGRlZFBlYWtIZWFwU2l6ZU1pQl89cm0uYnl0ZXNUb01pQih0aGlzLnVzYWdlLnVucGFkZGVkUGVha0hlYXBTaXplQnl0ZXMpLnRvRml4ZWQoMikpfX0pfSkoQW18fChBbT17fSkpOwo8L3NjcmlwdD4KPC9kb20tbW9kdWxlPgoKCgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vcG9kLXZpZXdlci9wcm90by5qcwo8L3NjcmlwdD4KCgo8ZG9tLW1vZHVsZSBpZD0iZGV0YWlscy1jYXJkIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIHBhcGVyLWNhcmQgewogICAgICAgIG1heC1oZWlnaHQ6IDUwdmg7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICAtLXBhcGVyLWNhcmQtaGVhZGVyLWNvbG9yOiB3aGl0ZTsKICAgICAgICAtLXBhcGVyLWNhcmQtaGVhZGVyOiB7CiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMTc4LCAzNCwgMzQpOwogICAgICAgIH0KICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgLmNhcmQtY29udGVudCA+IGRpdiB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMWVtOwogICAgICAgIHRvcDogLTVweDsKICAgICAgfQoKICAgICAgLnZhbHVlIHsKICAgICAgICBmb250LXdlaWdodDogbm9ybWFsOwogICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OwogICAgICB9CgogICAgICAuaW5mbyB7CiAgICAgICAgZm9udC1zaXplOiAyMHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICB9CgogICAgICAuY29kZS1zdHlsZSB7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8cGFwZXItY2FyZCBpZD0iY2FyZCIgaGVhZGluZz0iW1tfbmFtZV1dIiBoaWRkZW49IltbIV9uYW1lXV0iIGVsZXZhdGlvbj0iMiI+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9Iltbbm9kZXNdXSIgYXM9Im5vZGUiPgogICAgICAgIDxkaXYgY2xhc3M9ImNhcmQtY29udGVudCBpbmZvIj4KICAgICAgICAgIDxkaXYgaGlkZGVuPSJbW19pc1N0ZXAobm9kZSldXSI+CiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIERhdGEgVHJhbnNmZXJyZWQ6CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InZhbHVlIj5bW19zaXplTWlCKG5vZGUuZGF0YVNpemUpXV0gTWlCPC9zcGFuPgogICAgICAgICAgICAKICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgTGF0ZW5jeToKICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idmFsdWUiPltbX2Zvcm1hdChub2RlLmR1cmF0aW9uVXMpXV0gwrVzPC9zcGFuPgogICAgICAgICAgICAKICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgQlc6CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InZhbHVlIj4KICAgICAgICAgICAgICAgIFtbX2JhbmR3aWR0aChub2RlLmRhdGFTaXplLCBub2RlLmR1cmF0aW9uVXMpXV0gR2lCL3M8L3NwYW4+CiAgICAgICAgICAgIAogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGhpZGRlbj0iW1shX2lzQ2hhbm5lbChub2RlKV1dIj4KICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgU2VuZCBEZWxheToKICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idmFsdWUiPltbX2Zvcm1hdChub2RlLnNlbmREZWxheVVzKV1dIMK1czwvc3Bhbj4KICAgICAgICAgICAgCiAgICAgICAgICAgIDxwPkhsbyBOYW1lczoKICAgICAgICAgICAgPGNvZGUgY2xhc3M9ImNvZGUtc3R5bGUiPgogICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9Iltbbm9kZS5obG9OYW1lc11dIj4KICAgICAgICAgICAgICAgICJbW2l0ZW1dXSIKICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8L2NvZGU+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgaGlkZGVuPSJbWyFfaGFzUmVwbGljYUdyb3Vwcyhub2RlKV1dIj4KICAgICAgICAgICAgPHA+UmVwbGljYSBHcm91cHMKICAgICAgICAgICAgPGNvZGUgY2xhc3M9ImNvZGUtc3R5bGUiPgogICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9Iltbbm9kZS5yZXBsaWNhR3JvdXBzXV0iPgogICAgICAgICAgICAgICAge1tbaXRlbS5yZXBsaWNhSWRzXV19PGJyPgogICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDwvY29kZT4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBoaWRkZW49IltbIV9pc1N0ZXAobm9kZSldXSI+CiAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9Iltbc3RlcEJyZWFrZG93bkxheWVyc11dIj4KICAgICAgICAgICAgICA8cD4KICAgICAgICAgICAgICAgIFtbaXRlbS5sYWJlbF1dOgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InZhbHVlIj4KICAgICAgICAgICAgICAgICAgW1tfZ2V0U3RlcEJyZWFrZG93blZhbHVlKG5vZGUsIGl0ZW0ua2V5KV1dIMK1cwogICAgICAgICAgICAgICAgICBbW19nZXRTdGVwQnJlYWtkb3duUGN0KG5vZGUsIGl0ZW0ua2V5KV1dPC9zcGFuPgogICAgICAgICAgICAgIAogICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICA8L3BhcGVyLWNhcmQ+CiAgPC90ZW1wbGF0ZT4KICA8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vcG9kLXZpZXdlci9kZXRhaWxzLWNhcmQuanMKdmFyIEJtOwooZnVuY3Rpb24oKXtQb2x5bWVyKHtpczoiZGV0YWlscy1jYXJkIixwcm9wZXJ0aWVzOntub2Rlczp7dHlwZTpBcnJheX0sX25hbWU6e3R5cGU6U3RyaW5nLGNvbXB1dGVkOiJfY29tcHV0ZU5hbWUobm9kZXMpIn0sc3RlcEJyZWFrZG93bkxheWVyczp7dHlwZTpBcnJheSx2YWx1ZTooKT0+W3trZXk6ImhpZ2hGbG9wc0NvbXB1dGVVcyIsbGFiZWw6IkhpZ2ggZmxvcHMgY29tcHV0ZSJ9LHtrZXk6Imxvd0Zsb3BzQ29tcHV0ZVVzIixsYWJlbDoiTG93IGZsb3BzIGNvbXB1dGUifSx7a2V5OiJob3N0SW5mZWVkRHVyYXRpb25VcyIsbGFiZWw6IkluZmVlZCJ9LHtrZXk6Imhvc3RPdXRmZWVkRHVyYXRpb25VcyIsbGFiZWw6Ik91dGZlZWQifSx7a2V5OiJhbGxSZWR1Y2VDb21wdXRlRHVyYXRpb25VcyIsbGFiZWw6IkFsbFJlZHVjZSBjb21wdXRlIn0se2tleToiYWxsUmVkdWNlU3luY0R1cmF0aW9uVXMiLGxhYmVsOiJBbGxSZWR1Y2Ugc3luYyJ9LHtrZXk6InNlbmREdXJhdGlvblVzIixsYWJlbDoiU2VuZCJ9LAp7a2V5OiJyZWN2RHVyYXRpb25VcyIsbGFiZWw6IlJlY3YifV19fSxfaXNBbGxSZWR1Y2UoYSl7cmV0dXJuIHZvaWQgMCE9YS5yZXBsaWNhR3JvdXBzfSxfaXNDaGFubmVsKGEpe3JldHVybiB2b2lkIDAhPWEuY2hhbm5lbElkfSxfaXNTdGVwKGEpe3JldHVybiB2b2lkIDAhPWEuaG9zdE5hbWV9LF9oYXNSZXBsaWNhR3JvdXBzKGEpe3JldHVybiBhLnJlcGxpY2FHcm91cHMmJjA8YS5yZXBsaWNhR3JvdXBzLmxlbmd0aH0sX2NvbXB1dGVOYW1lOmZ1bmN0aW9uKGEpe2lmKGEmJjAhPWEubGVuZ3RoKXthPWFbMF07aWYodGhpcy5faXNDaGFubmVsKGEpKXJldHVybiJDaGFubmVsICMgIithLmNoYW5uZWxJZDtpZih0aGlzLl9pc0FsbFJlZHVjZShhKSlyZXR1cm4gYS5uYW1lO2lmKHRoaXMuX2lzU3RlcChhKSlyZXR1cm4iU3RlcCBicmVha2Rvd24gb2YgY2hpcCAiK2EuY2hpcElkKyIsIGNvcmUgIithLm5vZGVJZH19LF9ieXRlc1RvTWlCOmZ1bmN0aW9uKGEpe3JldHVybiBhLzEwNDg1NzZ9LApfc2l6ZU1pQjpmdW5jdGlvbihhKXtpZihhKXJldHVybiB0aGlzLl9mb3JtYXQodGhpcy5fYnl0ZXNUb01pQihhKSl9LF9iYW5kd2lkdGg6ZnVuY3Rpb24oYSxjKXtpZihhJiZjKXJldHVybiB0aGlzLl9mb3JtYXQoYS9jLzEwNzMuNzQpfSxfY2hpcElkOmZ1bmN0aW9uKGEpe3JldHVybiBNYXRoLmZsb29yKGEvMil9LF9ub2RlSWQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEmMX0sX2Zvcm1hdDpmdW5jdGlvbihhKXtyZXR1cm4gbnVsbD09YT8iIjphLnRvRml4ZWQoMil9LF9nZXRTdGVwQnJlYWtkb3duVmFsdWU6ZnVuY3Rpb24oYSxjKXtpZihjJiZhKXJldHVybiB0aGlzLl9mb3JtYXQoYVtjXT9hW2NdOjApfSxfZ2V0U3RlcEJyZWFrZG93blBjdDpmdW5jdGlvbihhLGMpe2lmKGMmJmEmJmEudG90YWxEdXJhdGlvblVzJiZhW2NdKXJldHVybihhW2NdL2EudG90YWxEdXJhdGlvblVzKjEwMCkudG9GaXhlZCgyKSsiJSJ9fSl9KShCbXx8KEJtPXt9KSk7Cjwvc2NyaXB0Pgo8L2RvbS1tb2R1bGU+CgoKCgoKCgoKPGRvbS1tb2R1bGUgaWQ9InN0YWNrLWJhci1jaGFydCI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiAxLjVlbTsKICAgICAgfQoKICAgICAgLmF4aXMgdGV4dCB7CiAgICAgICAgZm9udDogMTRweCBzYW5zLXNlcmlmOwogICAgICB9CgogICAgICAuc3ZnLWNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIHBhZGRpbmctYm90dG9tOiA5MCU7IC8qIGFzcGVjdCByYXRpbyAqLwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wOwogICAgICAgIHdpZHRoOiA5MCU7CiAgICAgIH0KCiAgICAgIC5zdmctY29udGVudC1yZXNwb25zaXZlIHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgbGVmdDogMDsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAxMHB4OwogICAgICB9CiAgICA8L3N0eWxlPgogICAgPGRpdiBjbGFzcz0ic3RhY2stYmFyLWNoYXJ0Ij4KICAgICAgPGRpdiBpZD0iY2hhcnQiPjwvZGl2PgogICAgPC9kaXY+CiAgPC90ZW1wbGF0ZT4KICA8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vcG9kLXZpZXdlci9zdGFjay1iYXItY2hhcnQuanMKdmFyIENtOwooZnVuY3Rpb24oKXtQb2x5bWVyKHtpczoic3RhY2stYmFyLWNoYXJ0Iixwcm9wZXJ0aWVzOntkYXRhOnt0eXBlOkFycmF5LHZhbHVlOigpPT5bXSxvYnNlcnZlcjoiX2RhdGFDaGFuZ2VkIn0sYWN0aXZlQmFyOnt0eXBlOk9iamVjdCxub3RpZnk6ITB9LHhEb21haW5GdW5jOnt0eXBlOk9iamVjdH0sc3RhY2tMYXllcnM6e3R5cGU6QXJyYXksdmFsdWU6KCk9PltdLG9ic2VydmVyOiJfb25TdGFja0xheWVyc0NoYW5nZWQifX0sc3RhY2tCYXJDaGFydDpmdW5jdGlvbihhKXtpZihhLmxlbmd0aCYmdGhpcy5pc0F0dGFjaGVkJiYwIT10aGlzLnN0YWNrTGF5ZXJzLmxlbmd0aCl7dmFyIGM9dGhpcy5zdGFja0xheWVycy5tYXAocD0+cC5rZXkpLGQ9dGhpcy5zdGFja0xheWVycy5tYXAocD0+cC5sYWJlbCksZj01MCphLmxlbmd0aCxnPWQzLnNjYWxlQmFuZCgpLnJhbmdlKFswLGZdKS5wYWRkaW5nKC40KSxsPWQzLnNjYWxlTGluZWFyKCkucmFuZ2UoWzI1MCwwXSksaz1kMy5zY2FsZU9yZGluYWwoZDMuc2NoZW1lQ2F0ZWdvcnkxMCkuZG9tYWluKFswLDE5XSksCm09ZDMuc2VsZWN0KHRoaXMuJC5jaGFydCkuc2VsZWN0KCJzdmciKTttLmVtcHR5KCkmJihtPWQzLnNlbGVjdCh0aGlzLiQuY2hhcnQpLmFwcGVuZCgic3ZnIikuYXR0cigid2lkdGgiLE1hdGgubWF4KDE2MDAsZisxMDArMjApKS5hdHRyKCJoZWlnaHQiLDMwMCkuYXBwZW5kKCJnIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKDEwMCwyMCkiKSxtLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwieCBheGlzIikuc3R5bGUoImZvbnQtc2l6ZSIsMTQpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgwLDI1NSkiKSxtLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwieSBheGlzIikuc3R5bGUoImZvbnQtc2l6ZSIsMTQpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgwLDApIikpO2M9ZDMuc3RhY2soKS5rZXlzKGMpLm9yZGVyKGQzLnN0YWNrT3JkZXJOb25lKS5vZmZzZXQoZDMuc3RhY2tPZmZzZXROb25lKShhKTtnLmRvbWFpbihhLm1hcCh0aGlzLnhEb21haW5GdW5jKSk7bC5kb21haW4oWzAsCmQzLm1heChjW2MubGVuZ3RoLTFdLHA9PnBbMF0rcFsxXSldKS5uaWNlKCk7dGhpcy5kcmF3TGF5ZXJzKG0sYyxnLGwsayk7dGhpcy5kcmF3QXhlcyhtLGcsbCwyNTApO2E9ZDMuc2VsZWN0KHRoaXMuJC5jaGFydCkuc2VsZWN0KCIubGVnZW5kIik7YS5lbXB0eSgpJiYoYT1tLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibGVnZW5kIikuYXR0cigiZm9udC1mYW1pbHkiLCJzYW5zLXNlcmlmIikuYXR0cigiZm9udC1zaXplIiwxNCkuYXR0cigidGV4dC1hbmNob3IiLCJzdGFydCIpKTt0aGlzLmRyYXdMZWdlbmQoYSxkLGspfX0sZHJhd0xheWVyczpmdW5jdGlvbihhLGMsZCxmLGcpe2xldCBsPXRoaXM7YT1hLnNlbGVjdEFsbCgiLmxheWVyIikuZGF0YShjKTtjPWEuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImxheWVyIikubWVyZ2UoYSkuc3R5bGUoImZpbGwiLChrLG0pPT5nKG0pKS5zZWxlY3RBbGwoInJlY3QiKS5kYXRhKGs9PmspO2MuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5tZXJnZShjKS5hdHRyKCJ3aWR0aCIsCmQuYmFuZHdpZHRoKCkpLmF0dHIoInkiLGs9PmYoa1sxXSkpLmF0dHIoImhlaWdodCIsaz0+ZihrWzBdKS1mKGtbMV0pKS5hdHRyKCJ4IixrPT5kKGwueERvbWFpbkZ1bmMoay5kYXRhKSkpLm9uKCJtb3VzZW92ZXIiLGZ1bmN0aW9uKGspe2QzLnNlbGVjdCh0aGlzKS5zdHlsZSgib3BhY2l0eSIsLjUpO2wuYWN0aXZlQmFyPWsuZGF0YX0pLm9uKCJtb3VzZW91dCIsZnVuY3Rpb24oKXtkMy5zZWxlY3QodGhpcykuc3R5bGUoIm9wYWNpdHkiLDEpO2wuYWN0aXZlQmFyPW51bGx9KS50cmFuc2l0aW9uKCkuZHVyYXRpb24oMUUzKTthLmV4aXQoKS5yZW1vdmUoKX0sZHJhd0F4ZXM6ZnVuY3Rpb24oYSxjLGQpe2Euc2VsZWN0KCIueC5heGlzIikudHJhbnNpdGlvbigpLmR1cmF0aW9uKDFFMykuY2FsbChkMy5heGlzQm90dG9tKGMpKTthLnNlbGVjdCgiLnkuYXhpcyIpLnRyYW5zaXRpb24oKS5kdXJhdGlvbigxRTMpLmNhbGwoZDMuYXhpc0xlZnQoZCkpfSxkcmF3TGVnZW5kOmZ1bmN0aW9uKGEsCmMsZCl7YT1hLnNlbGVjdEFsbCgiZyIpLmRhdGEoYy5zbGljZSgpKTthLmV4aXQoKS5yZW1vdmUoKTtjPWEuZW50ZXIoKS5hcHBlbmQoImciKTtjLmFwcGVuZCgicmVjdCIpLmF0dHIoIngiLDIwMCkuYXR0cigid2lkdGgiLDE5KS5hdHRyKCJoZWlnaHQiLDE5KTtjLmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLDIyNCkuYXR0cigieSIsOS41KS5hdHRyKCJkeSIsIjAuMzJlbSIpO2E9Yy5tZXJnZShhKTthLmF0dHIoInRyYW5zZm9ybSIsKGYsZyk9PmB0cmFuc2xhdGUoJHsxNTAqZy03NTAqTWF0aC5mbG9vcihnLzUpfSwgJHszMCpNYXRoLmZsb29yKGcvNSl9KWApO2Euc2VsZWN0KCJyZWN0IikuYXR0cigiZmlsbCIsKGYsZyk9PmQoZykpO2Euc2VsZWN0KCJ0ZXh0IikudGV4dChmPT5mKX0scmVkcmF3OmZ1bmN0aW9uKGEpe2EmJjAhPWEubGVuZ3RoJiZ0aGlzLnN0YWNrQmFyQ2hhcnQoYSl9LF9vblN0YWNrTGF5ZXJzQ2hhbmdlZDpmdW5jdGlvbihhKXthJiYwIT1hLmxlbmd0aCYmdGhpcy5yZWRyYXcodGhpcy5kYXRhKX0sCl9kYXRhQ2hhbmdlZDpmdW5jdGlvbihhKXthJiYwIT1hLmxlbmd0aCYmdGhpcy5yZWRyYXcoYSl9LGF0dGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5yZWRyYXcodGhpcy5kYXRhKX19KX0pKENtfHwoQ209e30pKTsKPC9zY3JpcHQ+CjwvZG9tLW1vZHVsZT4KCgoKCgoKCgoKPGRvbS1tb2R1bGUgaWQ9InRvcG9sb2d5LWdyYXBoIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGUgaXM9ImN1c3RvbS1zdHlsZSI+CiAgICAgIC5mbGV4LWhvcml6b250YWwgewogICAgICAgIEBhcHBseSAtLWxheW91dC1ob3Jpem9udGFsOwogICAgICB9CgogICAgICAuZmxleGNoaWxkIHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtZmxleDsKICAgICAgfQoKICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIG1hcmdpbi1yaWdodDogMS41ZW07CiAgICAgIH0KCiAgICAgIC5jZWxscyB7CiAgICAgICAgZmlsbDogI2FhYTsKICAgICAgfQoKICAgICAgLmxhYmVsIHsKICAgICAgICBmb250OiAyNHB4IHNhbnMtc2VyaWY7CiAgICAgICAgdGV4dC1hbmNob3I6IHN0YXJ0OwogICAgICB9CgogICAgICAvKiBkaXNhYmxlIHRleHQgc2VsZWN0aW9uICovCiAgICAgIHN2ZyAqOjpzZWxlY3Rpb24sCiAgICAgIHN2ZyAqOjotbW96LXNlbGVjdGlvbiwKICAgICAgc3ZnICo6Oi13ZWJraXQtc2VsZWN0aW9uIHsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgfQoKICAgICAgcmVjdC5zZWxlY3Rpb24gewogICAgICAgIGZpbGw6IHRyYW5zcGFyZW50OwogICAgICAgIHN0cm9rZTogIzMzMzsKICAgICAgICBzdHJva2UtZGFzaGFycmF5OiA0cHg7CiAgICAgICAgc3Ryb2tlLW9wYWNpdHk6IDAuNTsKICAgICAgfQoKICAgICAgcmVjdC5ib3JkZXJlZCB7CiAgICAgICAgc3Ryb2tlOiAjZTZlNmU2OwogICAgICAgIHN0cm9rZS13aWR0aDogMnB4OwogICAgICB9CgogICAgICByZWN0LmNlbGwtYm9yZGVyIHsKICAgICAgICBzdHJva2U6ICNlZWU7CiAgICAgICAgc3Ryb2tlLXdpZHRoOiAwLjNweDsKICAgICAgfQoKICAgICAgcmVjdC5jZWxsLXNlbGVjdGVkIHsKICAgICAgICBzdHJva2U6IHJnYig1MSwgMTAyLCAxNTMpOwogICAgICAgIHN0cm9rZS13aWR0aDogMC41cHg7CiAgICAgIH0KCiAgICAgIHJlY3QuY2VsbC1ob3ZlciB7CiAgICAgICAgc3Ryb2tlOiAjZjAwOwogICAgICAgIHN0cm9rZS13aWR0aDogMC4zcHg7CiAgICAgIH0KCiAgICAgICN0b29sdGlwIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsKICAgICAgICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDEwcHg7CiAgICAgICAgLW1vei1ib3JkZXItcmFkaXVzOiAxMHB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7CiAgICAgICAgLXdlYmtpdC1ib3gtc2hhZG93OiA0cHggNHB4IDEwcHggcmdiYSgwLCAwLCAwLCAwLjQpOwogICAgICAgIC1tb3otYm94LXNoYWRvdzogNHB4IDRweCAxMHB4IHJnYmEoMCwgMCwgMCwgMC40KTsKICAgICAgICBib3gtc2hhZG93OiA0cHggNHB4IDEwcHggcmdiYSgwLCAwLCAwLCAwLjQpOwogICAgICAgIGhlaWdodDogYXV0bzsKICAgICAgICBwYWRkaW5nOiAxMHB4OwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB3aWR0aDogMjAwcHg7CiAgICAgIH0KCiAgICAgICN0b29sdGlwLmhpZGRlbiB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQoKICAgICAgI3Rvb2x0aXAgcCB7CiAgICAgICAgZm9udDogMTJweCBzYW5zLXNlcmlmOwogICAgICAgIG1hcmdpbjogMDsKICAgICAgICBsaW5lLWhlaWdodDogMjBweDsKICAgICAgfQoKICAgICAgI292ZXJ2aWV3IHsKICAgICAgICBtYXJnaW4tbGVmdDogMjBweDsKICAgICAgfQoKICAgICAgcGFwZXItaXRlbTpob3Zlci5tZW51LW9wdGlvbiB7CiAgICAgICAgYmFja2dyb3VuZDogI2UwZTBlMDsKICAgICAgfQoKICAgICAgcGFwZXItc2xpZGVyIHsKICAgICAgICAtLXBhcGVyLXNsaWRlci1pbnB1dDogewogICAgICAgICAgd2lkdGg6IDE1MHB4OwogICAgICAgIH0KICAgICAgfQoKICAgICAgLm1ldHJpY3MtYnV0dG9uIHsKICAgICAgICBoZWlnaHQ6IDYwcHg7CiAgICAgICAgd2lkdGg6IDYwcHg7CiAgICAgIH0KCiAgICAgIC50b3BvLWhlYWRlciB7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDE2cHg7CiAgICAgIH0KCiAgICAgIC5jb250cm9sLXJvdy1sZWZ0IHsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1mbG93OiByb3cgbm93cmFwOwogICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDsKICAgICAgICBsaW5lLWhlaWdodDogNTBweDsKICAgICAgICBtYXJnaW4tbGVmdDogMTZweDsKICAgICAgICB0ZXh0LWFsaWduOiBib3R0b207CiAgICAgIH0KCiAgICAgIC5tZXRyaWNzLWxhYmVsIHsKICAgICAgICBwYWRkaW5nOiAwLjVlbTsKICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgICB9CgogICAgICAudG9wby10aXRsZSB7CiAgICAgICAgZm9udC1zaXplOiAyNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICAgIGxpbmUtaGVpZ2h0OiAzMnB4OwogICAgICAgIHRleHQtYWxpZ246IGJvdHRvbTsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogYm90dG9tOwogICAgICB9CgogICAgICAjY29udGFpbmVyIHsKICAgICAgICAvKiBUb29sdGlwIHNob3VsZCBwb3NpdGlvbiByZWxhdGl2ZSB0byB0aGUgY29udGFpbmVyLiAqLwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfQogICAgPC9zdHlsZT4KICAgIDxkaXYgY2xhc3M9InRvcG9sb2d5LWdyYXBoIj4KICAgICAgPGRpdiBjbGFzcz0idG9wby1oZWFkZXIgY29udGFpbmVyIGZsZXgtaG9yaXpvbnRhbCI+CiAgICAgICAgPGRpdiBjbGFzcz0iY29udHJvbC1yb3ctbGVmdCB0b3BvLXRpdGxlIj4KICAgICAgICAgIHt7X3RwdVR5cGV9fSB7e190b3RhbENvcmVDb3VudH19CiAgICAgICAgPC9kaXY+CiAgICAgICAgPHNwYW4gY2xhc3M9ImNvbnRyb2wtcm93LWxlZnQgbWV0cmljcy1sYWJlbCI+CiAgICAgICAgICBbW19nZXRTZWxlY3RlZE1ldHJpY0xhYmVsKG1ldHJpY3MsIHNlbGVjdGVkTWV0cmljSWR4KV1dPC9zcGFuPgogICAgICAgIDxwYXBlci1tZW51LWJ1dHRvbiBjbG9zZS1vbi1hY3RpdmF0ZT0idHJ1ZSI+CiAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24gcmFpc2VkIGljb249ImFycm93LWRyb3AtZG93biIgc2xvdD0iZHJvcGRvd24tdHJpZ2dlciIgY2xhc3M9ImRyb3Bkb3duLXRyaWdnZXIgbWV0cmljcy1idXR0b24iPgogICAgICAgICAgPC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgICAgIDxwYXBlci1saXN0Ym94IGNsYXNzPSJkcm9wZG93bi1jb250ZW50IiBzbG90PSJkcm9wZG93bi1jb250ZW50IiBzZWxlY3RlZD0ie3tzZWxlY3RlZE1ldHJpY0lkeH19Ij4KICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1ttZXRyaWNzXV0iPgogICAgICAgICAgICAgIDxwYXBlci1pdGVtIHZhbHVlPSJbW2l0ZW0ua2V5XV0iPltbaXRlbS5sYWJlbF1dPC9wYXBlci1pdGVtPgogICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPC9wYXBlci1saXN0Ym94PgogICAgICAgIDwvcGFwZXItbWVudS1idXR0b24+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGlkPSJjb250YWluZXIiPgogICAgICAgIDxkaXYgaWQ9InRwZ3JhcGgiPjwvZGl2PgogICAgICAgIDxkaXYgaWQ9InRvb2x0aXAiIGNsYXNzPSJoaWRkZW4iPgogICAgICAgICAgPHA+PHNwYW4gaWQ9InZhbHVlIj48L3NwYW4+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgPC90ZW1wbGF0ZT4KICA8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vcG9kLXZpZXdlci90b3BvbG9neS1ncmFwaC5qcwp2YXIgRG07CihmdW5jdGlvbigpe2NvbnN0IGE9IiNmZmZmZDkgI2VkZjhiMSAjYzdlOWI0ICM3ZmNkYmIgIzQxYjZjNCAjMWQ5MWMwICMyMjVlYTggIzI1MzQ5NCAjMDgxZDU4Ii5zcGxpdCgiICIpLGM9ZDMuc2NhbGVRdWFudGlsZSgpLmRvbWFpbihbMCwxXSkucmFuZ2UoYSk7UG9seW1lcih7aXM6InRvcG9sb2d5LWdyYXBoIixwcm9wZXJ0aWVzOntkYXRhOnt0eXBlOk9iamVjdH0scnVuRW52aXJvbm1lbnQ6e3R5cGU6T2JqZWN0fSxtZXRyaWNzOnt0eXBlOkFycmF5LHZhbHVlOigpPT5bXX0sYWN0aXZlQmFyOnt0eXBlOk9iamVjdCxvYnNlcnZlcjoiX2FjdGl2ZUJhckNoYW5nZWQifSxzZWxlY3RlZE1ldHJpY0lkeDp7dHlwZTpOdW1iZXIsdmFsdWU6MCxvYnNlcnZlcjoiX3NlbGVjdGVkTWV0cmljSWR4Q2hhbmdlZCJ9LF90b3BvRGF0YTp7dHlwZTpPYmplY3QsY29tcHV0ZWQ6Il9jb21wdXRlVG9wb0RhdGEoZGF0YSwgcnVuRW52aXJvbm1lbnQsIG1ldHJpY3MpIn0sX3hEaW1lbnNpb246e3R5cGU6TnVtYmVyLGNvbXB1dGVkOiJfY29tcHV0ZVhEaW1lbnNpb24ocnVuRW52aXJvbm1lbnQpIn0sCl95RGltZW5zaW9uOnt0eXBlOk51bWJlcixjb21wdXRlZDoiX2NvbXB1dGVZRGltZW5zaW9uKHJ1bkVudmlyb25tZW50KSJ9LF90b3RhbENvcmVDb3VudDp7dHlwZTpOdW1iZXIsY29tcHV0ZWQ6Il9jb21wdXRlVG90YWxDb3JlQ291bnQoX3hEaW1lbnNpb24sIF95RGltZW5zaW9uKSJ9LF90cHVUeXBlOnt0eXBlOlN0cmluZyxjb21wdXRlZDoiX2NvbXB1dGVUcHVUeXBlKHJ1bkVudmlyb25tZW50KSJ9LF9ob3N0WFN0cmlkZTp7dHlwZTpOdW1iZXIsY29tcHV0ZWQ6Il9jb21wdXRlSG9zdFhTdHJpZGUoX3RwdVR5cGUpIn0sX2hvc3RHcmlkV2lkdGg6e3R5cGU6TnVtYmVyfSxfaG9zdEdyaWRIZWlnaHQ6e3R5cGU6TnVtYmVyfSxfbm9kZUdyaWRIZWlnaHQ6e3R5cGU6TnVtYmVyfSxfbm9kZUdyaWRXaWR0aDp7dHlwZTpOdW1iZXJ9LF9nU1ZHOnt0eXBlOk9iamVjdH19LG9ic2VydmVyczpbImRyYXdUb3BvbG9neShfdG9wb0RhdGEsIHJ1bkVudmlyb25tZW50KSJdLF9jb21wdXRlVG9wb0RhdGE6ZnVuY3Rpb24oZCwKZixnKXtpZihkJiZmJiZmLnRvcG9sb2d5JiZnKXt2YXIgbD1wYXJzZUludChmLnRvcG9sb2d5LnhEaW1lbnNpb24sMTApO3JldHVybiBPYmplY3Qua2V5cyhkLnBvZFN0YXRzUGVyQ29yZSkubWFwKGs9Pntjb25zdCBtPWQucG9kU3RhdHNQZXJDb3JlW2tdO2xldCBwPWcubWFwKHE9Pm1bcS5rZXldP21bcS5rZXldOjApO3JldHVybnt4ZGltOm0uY2hpcElkJWwseWRpbTpNYXRoLmZsb29yKG0uY2hpcElkL2wpLG5pZDptLm5vZGVJZCxjaWQ6bS5jaGlwSWQscmlkOmQuY29yZUlkVG9SZXBsaWNhSWRNYXBba10saG9zdDptLmhvc3ROYW1lLHZhbHVlczpwLHRvdGFsOm0udG90YWxEdXJhdGlvblVzfX0pfX0sX2NvbXB1dGVUcHVUeXBlOmZ1bmN0aW9uKGQpe2lmKGQpcmV0dXJuIGQudHB1VHlwZX0sX2NvbXB1dGVYRGltZW5zaW9uOmZ1bmN0aW9uKGQpe2lmKGQmJmQudG9wb2xvZ3kpcmV0dXJuIHBhcnNlSW50KGQudG9wb2xvZ3kueERpbWVuc2lvbiwxMCl9LF9jb21wdXRlWURpbWVuc2lvbjpmdW5jdGlvbihkKXtpZihkJiYKZC50b3BvbG9neSlyZXR1cm4gcGFyc2VJbnQoZC50b3BvbG9neS55RGltZW5zaW9uLDEwKX0sX2NvbXB1dGVUb3RhbENvcmVDb3VudDpmdW5jdGlvbihkLGYpe3JldHVybiBkKmYqMn0sX2NvbXB1dGVIb3N0WFN0cmlkZTpmdW5jdGlvbihkKXtyZXR1cm4iVFBVIHYzIj09ZD80OjJ9LHRvcG9sb2d5R3JhcGg6ZnVuY3Rpb24oZCl7dGhpcy5faG9zdEdyaWRXaWR0aD10aGlzLmdldEhvc3RHcmlkU2l6ZSh0aGlzLl9ob3N0WFN0cmlkZSk7dGhpcy5faG9zdEdyaWRIZWlnaHQ9dGhpcy5nZXRIb3N0R3JpZFNpemUoMik7dGhpcy5fbm9kZUdyaWRXaWR0aD0xNTt0aGlzLl9ub2RlR3JpZEhlaWdodD0zMDt2YXIgZj10aGlzLl94RGltZW5zaW9uL3RoaXMuX2hvc3RYU3RyaWRlO2NvbnN0IGc9dGhpcy5feURpbWVuc2lvbi8yLGw9QXJyYXkuZnJvbShBcnJheSh0aGlzLl94RGltZW5zaW9uKS5rZXlzKCkpLGs9QXJyYXkuZnJvbShBcnJheSh0aGlzLl95RGltZW5zaW9uKS5rZXlzKCkpO3RoaXMuX2dTVkd8fAoodGhpcy5fZ1NWRz1kMy5zZWxlY3QodGhpcy4kLnRwZ3JhcGgpLmFwcGVuZCgic3ZnIikuYXR0cigid2lkdGgiLDE2MjApLmF0dHIoImhlaWdodCIsZyp0aGlzLl9ob3N0R3JpZEhlaWdodCsxNTApLmFwcGVuZCgiZyIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgzMCw1MCkiKSx0aGlzLl9nU1ZHLmFwcGVuZCgic3ZnOmciKS5jbGFzc2VkKCJncmFwaCIsITApLHRoaXMuX2dTVkcuYXBwZW5kKCJzdmc6ZyIpLmNsYXNzZWQoImxpbmsiLCEwKSx0aGlzLl9nU1ZHLmFwcGVuZCgic3ZnOmRlZnMiKS5hcHBlbmQoInN2ZzptYXJrZXIiKS5hdHRyKCJpZCIsImFycm93IikuYXR0cigidmlld0JveCIsIjAgLTUgMTAgMTAiKS5hdHRyKCJtYXJrZXJXaWR0aCIsNSkuYXR0cigibWFya2VySGVpZ2h0Iiw1KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJzdmc6cGF0aCIpLnN0eWxlKCJzdHJva2UiLCJyZWQiKS5zdHlsZSgiZmlsbCIsInJlZCIpLmF0dHIoImQiLCJNMCwtNUwxMCwwTDAsNSIpKTsKbGV0IG09dGhpcy5fZ1NWRy5zZWxlY3QoIi5ncmFwaCIpO2Y9dGhpcy5jcmVhdGVIb3N0RGF0YShmLGcpO3RoaXMuZHJhd0hvc3RDYXJkcyhtLGYsdGhpcy5faG9zdEdyaWRXaWR0aCx0aGlzLl9ob3N0R3JpZEhlaWdodCk7dGhpcy5kcmF3Tm9kZUNhcmRzKG0sZCxjKTt0aGlzLmRyYXdMYWJlbHMobSxsLGspO3RoaXMuZHJhd0xlZ2VuZChtLHRoaXMuX2hvc3RHcmlkSGVpZ2h0Kk1hdGguY2VpbCh0aGlzLl95RGltZW5zaW9uLzIpKzEwLGMpfSxnZXRIb3N0R3JpZFNpemUoZCl7cmV0dXJuIDMwKzEwKihkLTEpKzMwKmQrMTB9LGdldENoaXBYTG9jOmZ1bmN0aW9uKGQsZil7cmV0dXJuIGQqdGhpcy5faG9zdEdyaWRXaWR0aCsxNSs0MCpmfSxnZXRDaGlwWUxvYzpmdW5jdGlvbihkLGYpe3JldHVybiBkKnRoaXMuX2hvc3RHcmlkSGVpZ2h0KzE1KzQwKmZ9LGdldE5vZGVYTG9jOmZ1bmN0aW9uKGQsZixnKXtyZXR1cm4gdGhpcy5nZXRDaGlwWExvYyhkLGYpK2cqdGhpcy5fbm9kZUdyaWRXaWR0aH0sCmNyZWF0ZUhvc3REYXRhOmZ1bmN0aW9uKGQsZil7bGV0IGc9W107Zm9yKGxldCBsPTA7bDxkO2wrKylmb3IobGV0IGs9MDtrPGY7aysrKWcucHVzaCh7eGRpbTpsLHlkaW06a30pO3JldHVybiBnfSxkcmF3TGFiZWxzOmZ1bmN0aW9uKGQsZixnKXtmPWQuc2VsZWN0QWxsKCIueC1sYWJlbCIpLmRhdGEoZik7Zi5lbnRlcigpLmFwcGVuZCgidGV4dCIpLm1lcmdlKGYpLnRleHQobD0+bCkuYXR0cigieCIsKGwsayk9PnRoaXMuZ2V0Q2hpcFhMb2MoTWF0aC5mbG9vcihrL3RoaXMuX2hvc3RYU3RyaWRlKSxrJXRoaXMuX2hvc3RYU3RyaWRlKSkuYXR0cigieSIsMCkuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKDE1LCAtNikiKS5hdHRyKCJjbGFzcyIsIngtbGFiZWwiKS50cmFuc2l0aW9uKCkuZHVyYXRpb24oMUUzKTtmLmV4aXQoKS5yZW1vdmUoKTtkPWQuc2VsZWN0QWxsKCIueS1sYWJlbCIpLmRhdGEoZyk7ZC5lbnRlcigpLmFwcGVuZCgidGV4dCIpLm1lcmdlKGQpLnRleHQobD0+CmwpLmF0dHIoIngiLDApLmF0dHIoInkiLChsLGspPT50aGlzLmdldENoaXBZTG9jKE1hdGguZmxvb3Ioay8yKSxrJTIpKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoLTEyLDE1KSIpLmF0dHIoImNsYXNzIiwieS1sYWJlbCIpLnRyYW5zaXRpb24oKS5kdXJhdGlvbigxRTMpO2QuZXhpdCgpLnJlbW92ZSgpfSxkcmF3SG9zdENhcmRzOmZ1bmN0aW9uKGQsZixnLGwpe2Q9ZC5zZWxlY3RBbGwoIi5ob3N0IikuZGF0YShmKTtkLmVudGVyKCkuYXBwZW5kKCJyZWN0IikubWVyZ2UoZCkuYXR0cigieCIsaz0+ay54ZGltKmcpLmF0dHIoInkiLGs9PmsueWRpbSpsKS5hdHRyKCJyeCIsNCpnL2wpLmF0dHIoInJ5Iiw0KS5hdHRyKCJjbGFzcyIsImhvc3QgYm9yZGVyZWQiKS5hdHRyKCJ3aWR0aCIsZy0xMCkuYXR0cigiaGVpZ2h0IixsLTEwKS5hdHRyKCJib3JkZXIiLDEpLnN0eWxlKCJmaWxsIiwiRjBGMEYwIikuc3R5bGUoInN0cm9rZSIsCiJibGFjayIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLDEpLnRyYW5zaXRpb24oKS5kdXJhdGlvbigxRTMpO2QuZXhpdCgpLnJlbW92ZSgpfSxkcmF3Tm9kZUNhcmRzOmZ1bmN0aW9uKGQsZixnKXtkPWQuc2VsZWN0QWxsKCIubm9kZSIpLmRhdGEoZik7bGV0IGw9dGhpcyxrPU1hdGgubWF4KHRoaXMuc2VsZWN0ZWRNZXRyaWNJZHgsMCk7ZC5lbnRlcigpLmFwcGVuZCgicmVjdCIpLm1lcmdlKGQpLmF0dHIoImlkIixtPT4icmlkIittLnJpZCkuYXR0cigieCIsbT0+dGhpcy5nZXROb2RlWExvYyhNYXRoLmZsb29yKG0ueGRpbS90aGlzLl9ob3N0WFN0cmlkZSksbS54ZGltJXRoaXMuX2hvc3RYU3RyaWRlLG0ubmlkKSkuYXR0cigieSIsbT0+dGhpcy5nZXRDaGlwWUxvYyhNYXRoLmZsb29yKG0ueWRpbS8yKSxtLnlkaW0lMikpLmF0dHIoInJ4IiwyKS5hdHRyKCJyeSIsNCkuYXR0cigiY2xhc3MiLCJub2RlIGJvcmRlcmVkIikuYXR0cigid2lkdGgiLHRoaXMuX25vZGVHcmlkV2lkdGgpLmF0dHIoImhlaWdodCIsCnRoaXMuX25vZGVHcmlkSGVpZ2h0KS5hdHRyKCJib3JkZXIiLDEpLnN0eWxlKCJzdHJva2UiLCJibGFjayIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLDEpLnN0eWxlKCJmaWxsIixtPT5nKG0udmFsdWVzW2tdL20udG90YWwpKS5vbigibW91c2VvdmVyIixmdW5jdGlvbihtKXtkMy5zZWxlY3QodGhpcykuY2xhc3NlZCgiY2VsbC1ob3ZlciIsITApLnN0eWxlKCJvcGFjaXR5IiwuNSk7dmFyIHA9dGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtjb25zdCBxPWwuJC5jb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkscj1wLngrcC53aWR0aCs1LXEueDtwPXAueS1xLnk7ZDMuc2VsZWN0KGwuJC50b29sdGlwKS5zdHlsZSgibGVmdCIscisicHgiKS5zdHlsZSgidG9wIixwKyJweCIpLnNlbGVjdCgiI3ZhbHVlIikudGV4dChsLl9nZXRUb29sVGlwVGV4dChtKSk7ZDMuc2VsZWN0KGwuJC50b29sdGlwKS5jbGFzc2VkKCJoaWRkZW4iLCExKX0pLm9uKCJtb3VzZW91dCIsZnVuY3Rpb24oKXtkMy5zZWxlY3QodGhpcykuY2xhc3NlZCgiY2VsbC1ob3ZlciIsCiExKS5zdHlsZSgib3BhY2l0eSIsMSk7ZDMuc2VsZWN0KGwuJC50b29sdGlwKS5jbGFzc2VkKCJoaWRkZW4iLCEwKX0pLnRyYW5zaXRpb24oKS5kdXJhdGlvbigxRTMpO2QuZXhpdCgpLnJlbW92ZSgpfSxkcmF3TGlua3M6ZnVuY3Rpb24oZCxmKXtmJiZmLmxlbmd0aCYmZCYmKGQ9ZC5zZWxlY3QoIi5saW5rIikuc2VsZWN0QWxsKCJwYXRoIikuZGF0YShmKSxkLmVudGVyKCkuYXBwZW5kKCJzdmc6cGF0aCIpLm1lcmdlKGQpLmF0dHIoInN0cm9rZS13aWR0aCIsMikuYXR0cigic3Ryb2tlIiwicmVkIikuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCNhcnJvdykiKS5hdHRyKCJkIixnPT50aGlzLmxpbmtUb1BhdGgoZ1swXSxnWzFdKSksZC5leGl0KCkucmVtb3ZlKCkpfSxjb3JlSWRUb1BvczpmdW5jdGlvbihkKXt2YXIgZj1NYXRoLmZsb29yKGQvMik7Y29uc3QgZz1mJXRoaXMuX3hEaW1lbnNpb247Zj1NYXRoLmZsb29yKGYvdGhpcy5feERpbWVuc2lvbik7CnJldHVybnt4OjcuNSt0aGlzLmdldE5vZGVYTG9jKE1hdGguZmxvb3IoZy90aGlzLl9ob3N0WFN0cmlkZSksZyV0aGlzLl9ob3N0WFN0cmlkZSxkJjEpLHk6dGhpcy5nZXRDaGlwWUxvYyhNYXRoLmZsb29yKGYvMiksZiUyKSsxNX19LGxpbmtUb1BhdGg6ZnVuY3Rpb24oZCxmKXtkPXRoaXMuY29yZUlkVG9Qb3MoZD9kOjApO2Y9dGhpcy5jb3JlSWRUb1BvcyhmP2Y6MCk7cmV0dXJuIk0gIitkLngrIiAiK2QueSsiTCAiK2YueCsiICIrZi55fSxfZ2V0VG9vbFRpcFRleHQ6ZnVuY3Rpb24oZCl7Y29uc3QgZj0wPD10aGlzLnNlbGVjdGVkTWV0cmljSWR4P3RoaXMubWV0cmljc1t0aGlzLnNlbGVjdGVkTWV0cmljSWR4XS5sYWJlbDoiIixnPTA8PXRoaXMuc2VsZWN0ZWRNZXRyaWNJZHg/ZC52YWx1ZXNbdGhpcy5zZWxlY3RlZE1ldHJpY0lkeF06MCxsPW5ldyBJbnRsLk51bWJlckZvcm1hdChuYXZpZ2F0b3IubGFuZ3VhZ2Use3N0eWxlOiJwZXJjZW50IixtaW5pbXVtRnJhY3Rpb25EaWdpdHM6Mn0pOwpyZXR1cm5gcG9zOiAoJHtkLnlkaW19LCAke2QueGRpbX0pLAogICAgICAgIGhvc3Q6ICR7ZC5ob3N0fSwKICAgICAgICBjaGlwIGlkOiAke2QuY2lkfSwKICAgICAgICBjb3JlIGlkOiAke2QubmlkfSwKICAgICAgICByZXBsaWNhIGlkOiAke2QucmlkfQogICAgICAgICR7Zj9gJHtmfSBzcGVuZHMgJHtnLnRvRml4ZWQoMil9XHUwMGI1cyBpbiB0b3RhbCwKICAgICAgICAgICAgdGFraW5nICR7bC5mb3JtYXQoZy9kLnRvdGFsKX0gb2YgYSBzdGVwLmA6IiJ9YH0sZHJhd0xlZ2VuZDpmdW5jdGlvbihkLGYsZyl7ZD1kLnNlbGVjdEFsbCgiLmxlZ2VuZCIpLmRhdGEoWzBdLmNvbmNhdChnLnF1YW50aWxlcygpKSxsPT5sKTtkLmV4aXQoKS5yZW1vdmUoKTtnPWQuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImxlZ2VuZCIpO2cuYXBwZW5kKCJyZWN0IikuYXR0cigid2lkdGgiLDYwKS5hdHRyKCJoZWlnaHQiLDMwKS5tZXJnZShkLnNlbGVjdCgicmVjdCIpKS5hdHRyKCJ4IiwobCxrKT0+NjAqaykuYXR0cigieSIsZikuc3R5bGUoImZpbGwiLChsLGspPT5hW2tdKTtnLmFwcGVuZCgidGV4dCIpLm1lcmdlKGQuc2VsZWN0KCJ0ZXh0IikpLnRleHQobD0+Ilx1MjI2NSAwLiIrTWF0aC5yb3VuZCgxMCpsKSkuYXR0cigieCIsKGwsayk9PjYwKmspLmF0dHIoInkiLGYrNjApfSxkcmF3VG9wb2xvZ3k6ZnVuY3Rpb24oZCxmKXtkJiZmJiZ0aGlzLmlzQXR0YWNoZWQmJgp0aGlzLnRvcG9sb2d5R3JhcGgoZCl9LGF0dGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5kcmF3VG9wb2xvZ3kodGhpcy5fdG9wb0RhdGEsdGhpcy5ydW5FbnZpcm9ubWVudCl9LF9zZWxlY3RlZE1ldHJpY0lkeENoYW5nZWQ6ZnVuY3Rpb24oZCl7MD5kfHxkMy5zZWxlY3QodGhpcy4kLnRwZ3JhcGgpLnNlbGVjdEFsbCgiLm5vZGUiKS5zdHlsZSgiZmlsbCIsZj0+YyhmLnZhbHVlc1tkXS9mLnRvdGFsKSl9LF9hY3RpdmVCYXJDaGFuZ2VkOmZ1bmN0aW9uKGQpe3ZhciBmPWQzLnNjYWxlT3JkaW5hbChkMy5zY2hlbWVDYXRlZ29yeTEwKS5kb21haW4oZDMucmFuZ2UoMCwxOSkpO2lmKGQpaWYoZC5yZXBsaWNhR3JvdXBzJiYwPGQucmVwbGljYUdyb3Vwcy5sZW5ndGgpe2ZvcihsZXQgZz0wO2c8ZC5yZXBsaWNhR3JvdXBzLmxlbmd0aDtnKyspe2NvbnN0IGw9ZC5yZXBsaWNhR3JvdXBzW2ddLnJlcGxpY2FJZHM7Zm9yKGxldCBrPTA7azxsLmxlbmd0aDtrKyspZDMuc2VsZWN0KHRoaXMuJC50cGdyYXBoKS5zZWxlY3RBbGwoIiNyaWQiKwpsW2tdKS5zdHlsZSgiZmlsbCIsZihnJTIwKSl9dGhpcy5zZWxlY3RlZE1ldHJpY0lkeD0tMX1lbHNlIGQuc3JjQ29yZUlkcyYmKGY9ZC5zcmNDb3JlSWRzLm1hcCgoZyxsKT0+W2csZC5kc3RDb3JlSWRzW2xdXSksdGhpcy5kcmF3TGlua3ModGhpcy5fZ1NWRyxmKSl9LF9nZXRTZWxlY3RlZE1ldHJpY0xhYmVsOmZ1bmN0aW9uKGQsZil7cmV0dXJuIDA+Znx8IWR8fGY+ZC5sZW5ndGg/IlBsZWFzZSBzZWxlY3QgYSBtZXRyaWMiOiJDb2xvcjogIitkW2ZdLmxhYmVsfX0pfSkoRG18fChEbT17fSkpOwo8L3NjcmlwdD4KPC9kb20tbW9kdWxlPgoKCjxkb20tbW9kdWxlIGlkPSJwb2Qtdmlld2VyLWRhc2hib2FyZCI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiAxLjVlbTsKICAgICAgfQoKICAgICAgI2NvbnRyb2wgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1mbG93OiByb3cgbm93cmFwOwogICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICBvdmVyZmxvdzogYXV0bzsKICAgICAgICBwYWRkaW5nOiAwLjVlbTsKICAgICAgICB0ZXh0LWFsaWduOiBib3R0b207CiAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogYm90dG9tOwogICAgICB9CgogICAgICAuY29udHJvbC1yb3ctbGVmdCB7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZmxvdzogcm93IG5vd3JhcDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7CiAgICAgICAgbGluZS1oZWlnaHQ6IDUwcHg7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDE2cHg7CiAgICAgICAgdGV4dC1hbGlnbjogYm90dG9tOwogICAgICB9CgogICAgICBwYXBlci1zbGlkZXIgewogICAgICAgIC0tcGFwZXItc2xpZGVyLWlucHV0OiB7CiAgICAgICAgICB3aWR0aDogMTAwcHg7CiAgICAgICAgfQogICAgICAgIC0tcGFwZXItc2xpZGVyLWhlaWdodDogM3B4OwogICAgICB9CgogICAgICAuc3RlcC1udW0tdGV4dCB7CiAgICAgICAgZm9udC1zaXplOiAyMHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICAgIHBhZGRpbmctbGVmdDogMWVtOwogICAgICB9CgogICAgICAuc3RhY2stdGl0bGUgewogICAgICAgIGZvbnQtc2l6ZTogMjRweDsKICAgICAgICBsaW5lLWhlaWdodDogMzJweDsKICAgICAgfQoKICAgICAgLmJhci1jaGFydCB7CiAgICAgICAgb3ZlcmZsb3c6IGF1dG87CiAgICAgIH0KCiAgICAgICN0aXRsZSB7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDE2cHg7CiAgICAgIH0KCiAgICAgIC5lcnJvci1tZXNzYWdlIHsKICAgICAgICBjb2xvcjogcmVkOwogICAgICAgIGZvbnQtc2l6ZTogMzJweDsKICAgICAgICBmb250LXdlaWdodDogYm9sZDsKICAgICAgICBtYXJnaW4tbGVmdDogMTZweDsKICAgICAgICBtYXJnaW4tdG9wOiAzMnB4OwogICAgICB9CiAgICA8L3N0eWxlPgogICAgPGRpdiBjbGFzcz0iZXJyb3ItbWVzc2FnZSIgaGlkZGVuPSJbWyFfZXJyb3JNZXNzYWdlXV0iPgogICAgICA8c3Bhbj5bW19lcnJvck1lc3NhZ2VdXTwvc3Bhbj4KICAgIDwvZGl2PgogICAgPGRpdiBpZD0iY29udHJvbCIgaGlkZGVuPSJbW19lcnJvck1lc3NhZ2VdXSI+CiAgICAgIAogICAgICA8c3BhbiBjbGFzcz0iY29udHJvbC1yb3ctbGVmdCI+UGxlYXNlIHNlbGVjdCBhIHN0ZXAKICAgICAgICA8cGFwZXItc2xpZGVyIG1pbj0iMCIgbWF4PSJbW19tYXhTdGVwSWRdXSIgc25hcHMgc3RlcD0iMSIgdmFsdWU9Int7Y3VyU3RlcElkfX0iPgogICAgICAgIDwvcGFwZXItc2xpZGVyPgogICAgICAgIDxzcGFuIGNsYXNzPSJzdGVwLW51bS10ZXh0Ij5TdGVwIFtbX2dldFN0ZXBOdW0oX3BvZFN0YXRzTWFwKV1dPC9zcGFuPgogICAgICA8L3NwYW4+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9InBvZC12aWV3ZXItZGFzaGJvYXJkIiBoaWRkZW49IltbX2Vycm9yTWVzc2FnZV1dIj4KICAgICAgPGRpdiBpZD0idG9wby1ncmFwaCI+CiAgICAgICAgPHRvcG9sb2d5LWdyYXBoIHJ1bi1lbnZpcm9ubWVudD0iW1tfcnVuRW52aXJvbm1lbnRdXSIgZGF0YT0iW1tfcG9kU3RhdHNNYXBdXSIgbWV0cmljcz0iW1tfc3RlcEJyZWFrZG93bkxheWVyc11dIiBhY3RpdmUtYmFyPSJbW2FjdGl2ZUJhcl1dIj4KICAgICAgICA8L3RvcG9sb2d5LWdyYXBoPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBpZD0iY2hhbm5lbC1iYXJzIiBjbGFzcz0iYmFyLWNoYXJ0IiBoaWRkZW49IltbIV9jaGFubmVsRGJdXSI+CiAgICAgICAgPGRpdiBpZD0idGl0bGUiPgogICAgICAgICAgPGRpdiBjbGFzcz0ic3RhY2stdGl0bGUiPkxhdGVuY3kgb2YgU2VuZCBhbmQgUmVjdiBjaGFubmVsczwvZGl2PgogICAgICAgICAgPHA+KHgtYXhpczogY2hhbm5lbCBpZCwgeS1heGlzOiB0aW1lICjCtXMpKQogICAgICAgIDwvZGl2PgogICAgICAgIDxzdGFjay1iYXItY2hhcnQgZGF0YT0iW1tfY2hhbm5lbERiXV0iIHN0YWNrLWxheWVycz0iW1tfY2hhbm5lbExheWVyc11dIiB4LWRvbWFpbi1mdW5jPSJbW19jaGFubmVsRnVuY11dIiBhY3RpdmUtYmFyPSJ7e2FjdGl2ZUJhcn19Ij48L3N0YWNrLWJhci1jaGFydD4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgaWQ9ImFsbC1yZWR1Y2UtYmFycyIgY2xhc3M9ImJhci1jaGFydCIgaGlkZGVuPSJbWyFfYWxsUmVkdWNlRGJdXSI+CiAgICAgICAgPGRpdiBpZD0idGl0bGUiPgogICAgICAgICAgPGRpdiBjbGFzcz0ic3RhY2stdGl0bGUiPgogICAgICAgICAgICBEdXJhdGlvbiBvZiBhbGwtcmVkdWNlIG9wIG9yIGN1c3RvbSBmdXNpb24gZm9yIGFsbC1yZWR1Y2UKICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPHA+CiAgICAgICAgICAgICh4LWF4aXM6IHNob3J0IG5hbWVzIGZvciBhbGwtcmVkdWNlcyBvcHMgKGEjKSBvciBmdXNpb24gKGYjKSwKICAgICAgICAgICAgeS1heGlzOiB0aW1lICjCtXMpKQogICAgICAgICAgCiAgICAgICAgPC9kaXY+CiAgICAgICAgPHN0YWNrLWJhci1jaGFydCBkYXRhPSJbW19hbGxSZWR1Y2VEYl1dIiBzdGFjay1sYXllcnM9IltbX2FsbFJlZHVjZUxheWVyc11dIiB4LWRvbWFpbi1mdW5jPSJbW19hbGxSZWR1Y2VGdW5jXV0iIGFjdGl2ZS1iYXI9Int7YWN0aXZlQmFyfX0iPjwvc3RhY2stYmFyLWNoYXJ0PgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBpZD0ic3RhY2stYmFycyIgY2xhc3M9ImJhci1jaGFydCIgaGlkZGVuPSJbWyFfc3RlcFN0YXRzXV0iPgogICAgICAgIDxkaXYgaWQ9InRpdGxlIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InN0YWNrLXRpdGxlIj5TdGVwIGJyZWFrZG93bjwvZGl2PgogICAgICAgICAgPHA+KHgtYXhpczogZ2xvYmFsIGNoaXAgaWQsIGNvcmUgaWQsIHktYXhpczogdGltZSAowrVzKSkKICAgICAgICA8L2Rpdj4KICAgICAgICA8c3RhY2stYmFyLWNoYXJ0IGRhdGE9IltbX3N0ZXBTdGF0c11dIiBzdGFjay1sYXllcnM9IltbX3N0ZXBCcmVha2Rvd25MYXllcnNdXSIgeC1kb21haW4tZnVuYz0iW1tfc3RlcEJyZWFrZG93bkZ1bmNdXSIgYWN0aXZlLWJhcj0ie3thY3RpdmVCYXJ9fSI+PC9zdGFjay1iYXItY2hhcnQ+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgPC90ZW1wbGF0ZT4KICA8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vcG9kLXZpZXdlci9wb2Qtdmlld2VyLWRhc2hib2FyZC5qcwp2YXIgRW07CihmdW5jdGlvbigpe1BvbHltZXIoe2lzOiJwb2Qtdmlld2VyLWRhc2hib2FyZCIscHJvcGVydGllczp7ZGF0YTp7dHlwZTpPYmplY3Qsb2JzZXJ2ZXI6Il9kYXRhQ2hhbmdlZCJ9LGFjdGl2ZURldGFpbHM6e3R5cGU6QXJyYXksbm90aWZ5OiEwfSxhY3RpdmVCYXI6e3R5cGU6T2JqZWN0LG5vdGlmeTohMCxvYnNlcnZlcjoiX2FjdGl2ZUJhckNoYW5nZWQifSxjdXJTdGVwSWQ6e3R5cGU6TnVtYmVyLHZhbHVlOjB9LF9wb2RTdGF0c01hcHM6e3R5cGU6T2JqZWN0LGNvbXB1dGVkOiJfY29tcHV0ZVBvZFN0YXRzTWFwcyhkYXRhKSJ9LF9tYXhTdGVwSWQ6e3R5cGU6TnVtYmVyLGNvbXB1dGVkOiJfY29tcHV0ZU1heFN0ZXBJZChfcG9kU3RhdHNNYXBzKSJ9LF9lcnJvck1lc3NhZ2U6e3R5cGU6U3RyaW5nLGNvbXB1dGVkOiJfY29tcHV0ZUVycm9yTWVzc2FnZShfbWF4U3RlcElkKSJ9LF9ydW5FbnZpcm9ubWVudDp7dHlwZTpPYmplY3QsY29tcHV0ZWQ6Il9jb21wdXRlUnVuRW52aXJvbm1lbnQoZGF0YSkifSxfc3RlcEJyZWFrZG93bkxheWVyczp7dHlwZTpPYmplY3QsCnZhbHVlOigpPT5be2tleToiaGlnaEZsb3BzQ29tcHV0ZVVzIixsYWJlbDoiSGlnaCBmbG9wcyBjb21wdXRlIn0se2tleToibG93RmxvcHNDb21wdXRlVXMiLGxhYmVsOiJMb3cgZmxvcHMgY29tcHV0ZSJ9LHtrZXk6Imhvc3RJbmZlZWREdXJhdGlvblVzIixsYWJlbDoiSW5mZWVkIn0se2tleToiaG9zdE91dGZlZWREdXJhdGlvblVzIixsYWJlbDoiT3V0ZmVlZCJ9LHtrZXk6ImFsbFJlZHVjZUNvbXB1dGVEdXJhdGlvblVzIixsYWJlbDoiQWxsUmVkdWNlIGNvbXB1dGUifSx7a2V5OiJhbGxSZWR1Y2VTeW5jRHVyYXRpb25VcyIsbGFiZWw6IkFsbFJlZHVjZSBzeW5jIn0se2tleToic2VuZER1cmF0aW9uVXMiLGxhYmVsOiJTZW5kIn0se2tleToicmVjdkR1cmF0aW9uVXMiLGxhYmVsOiJSZWN2In1dfSxfcG9kU3RhdHNNYXA6e3R5cGU6T2JqZWN0LGNvbXB1dGVkOiJfY29tcHV0ZVBvZFN0YXRzTWFwKF9wb2RTdGF0c01hcHMsIGN1clN0ZXBJZCwgX3N0ZXBCcmVha2Rvd25MYXllcnMpIn0sCl9zdGVwU3RhdHM6e3R5cGU6QXJyYXksdmFsdWU6bnVsbCxjb21wdXRlZDoiX2NvbXB1dGVTdGVwU3RhdHMoX3BvZFN0YXRzTWFwKSJ9LF9jaGFubmVsRGI6e3R5cGU6QXJyYXksdmFsdWU6bnVsbCxjb21wdXRlZDoiX2NvbXB1dGVDaGFubmVsRGIoX3BvZFN0YXRzTWFwKSJ9LF9hbGxSZWR1Y2VEYjp7dHlwZTpBcnJheSx2YWx1ZTpudWxsLGNvbXB1dGVkOiJfY29tcHV0ZUFsbFJlZHVjZURiKF9wb2RTdGF0c01hcCkifSxfY2hhbm5lbExheWVyczp7dHlwZTpBcnJheSx2YWx1ZTooKT0+W3trZXk6ImR1cmF0aW9uVXMiLGxhYmVsOiJEdXJhdGlvbiAocykifV19LF9hbGxSZWR1Y2VMYXllcnM6e3R5cGU6QXJyYXksdmFsdWU6KCk9Plt7a2V5OiJkdXJhdGlvblVzIixsYWJlbDoiRHVyYXRpb24gKFx1MDBiNXMpIn1dfSxfc3RlcEJyZWFrZG93bkZ1bmM6e3R5cGU6T2JqZWN0LHZhbHVlOigpPT5hPT5gKCR7YS5jaGlwSWR9LCAke2Eubm9kZUlkfSlgfSxfY2hhbm5lbEZ1bmM6e3R5cGU6T2JqZWN0LAp2YWx1ZTooKT0+YT0+YS5jaGFubmVsSWR9LF9hbGxSZWR1Y2VGdW5jOnt0eXBlOk9iamVjdCx2YWx1ZTooKT0+ZnVuY3Rpb24oYSl7aWYoYS5uYW1lKXJldHVybiBhPWEubmFtZS5yZXBsYWNlKC9sbC1yZWR1Y2UufHVzaW9uLnxsbC1yZWR1Y2V8dXNpb24vLCIiKSwxPGEubGVuZ3RoP2E6YSsiMCJ9fX0sX2NvbXB1dGVQb2RTdGF0c01hcHMoYSl7cmV0dXJuIGE/YS5wb2RTdGF0c1NlcXVlbmNlLnBvZFN0YXRzTWFwOltdfSxfY29tcHV0ZVJ1bkVudmlyb25tZW50KGEpe2lmKGEpcmV0dXJuIGEucnVuRW52aXJvbm1lbnR9LF9jb21wdXRlTWF4U3RlcElkKGEpe3JldHVybiBhLmxlbmd0aC0xfSxfY29tcHV0ZUVycm9yTWVzc2FnZShhKXtyZXR1cm4gMDw9YT8iIjoiV0FSTklORzogTm8gc3RlcCB0aW1lIG1lYXN1cmVkLiBUaGlzIG1pZ2h0IGhhcHBlbiBpZiB5b3VyIHByb2ZpbGUgZHVyYXRpb24gaXMgdG9vIHNob3J0LCB0cnkgaW5jcmVhc2UgcHJvZmlsZSBkdXJhdGlvbiB0byBjb3ZlciBhIGZ1bGwgc3RlcC4gSWYgeW91IGhhdmUgYW4gaW5mZXJlbmNlIGpvYiBvciBub3QgdXNlIFRwdUVzdGltYXRvciwgcGxlYXNlIHNraXAgdGhpcyB0b29sLiJ9LApfcG9wdWxhdGVMb3dGbG9wc0NvbXB1dGUoYSxjKXtpZihhJiZjKXt2YXIgZD1hLnBvZFN0YXRzUGVyQ29yZTtmb3IobGV0IGYgaW4gZCl7bGV0IGc9ZFtmXTtpZihnLmhhc093blByb3BlcnR5KCJsb3dGbG9wc0NvbXB1dGVVcyIpKWJyZWFrO2cubG93RmxvcHNDb21wdXRlVXM9Zy50b3RhbER1cmF0aW9uVXM7Zm9yKGxldCBsPTA7bDxjLmxlbmd0aDtsKyspMSE9bCYmKGdbY1tsXS5rZXldfHwoZ1tjW2xdLmtleV09MCksZy5sb3dGbG9wc0NvbXB1dGVVcy09Z1tjW2xdLmtleV0pfXJldHVybiBhfX0sX2NvbXB1dGVQb2RTdGF0c01hcChhLGMsZCl7aWYoISghYXx8MD5jfHxjPj1hLmxlbmd0aCkmJmQpcmV0dXJuIHRoaXMuX3BvcHVsYXRlTG93RmxvcHNDb21wdXRlKGFbY10sZCl9LF9jb21wdXRlU3RlcFN0YXRzKGEpe2lmKGEmJmEucG9kU3RhdHNQZXJDb3JlKXt2YXIgYz1hLnBvZFN0YXRzUGVyQ29yZTtyZXR1cm4gT2JqZWN0LmtleXMoYykubWFwKGQ9PmNbZF0pLnNvcnQoKGQsZik9PgpkLmNoaXBJZC1mLmNoaXBJZCl9fSxfY29tcHV0ZUNoYW5uZWxEYihhKXtpZihhJiZhLmNoYW5uZWxEYiYmISgwPj1hLmNoYW5uZWxEYi5sZW5ndGgpKXJldHVybiBhLmNoYW5uZWxEYi5zbGljZSgpLnNvcnQoKGMsZCk9PmQuZHVyYXRpb25Vcy1jLmR1cmF0aW9uVXMpfSxfY29tcHV0ZUFsbFJlZHVjZURiKGEpe2lmKGEmJmEuYWxsUmVkdWNlT3BEYiYmISgwPj1hLmFsbFJlZHVjZU9wRGIubGVuZ3RoKSlyZXR1cm4gYS5hbGxSZWR1Y2VPcERiLnNsaWNlKCkuc29ydCgoYyxkKT0+ZC5kdXJhdGlvblVzLWMuZHVyYXRpb25Vcyl9LF9kYXRhQ2hhbmdlZChhKXthJiYodGhpcy5jdXJTdGVwSWQ9MCl9LF9hY3RpdmVCYXJDaGFuZ2VkKGEpe2EmJih0aGlzLmFjdGl2ZURldGFpbHM9W2FdKX0sX2dldFN0ZXBOdW0oYSl7cmV0dXJuIGE/YS5zdGVwTnVtOjB9fSl9KShFbXx8KEVtPXt9KSk7Cjwvc2NyaXB0Pgo8L2RvbS1tb2R1bGU+CgoKCgoKPHNjcmlwdD4vL35+V0VCUEFUSH5+L2lyb24tYWpheC9pcm9uLXJlcXVlc3QuaHRtbC5qcwpQb2x5bWVyKHtpczoiaXJvbi1yZXF1ZXN0Iixob3N0QXR0cmlidXRlczp7aGlkZGVuOiEwfSxwcm9wZXJ0aWVzOnt4aHI6e3R5cGU6T2JqZWN0LG5vdGlmeTohMCxyZWFkT25seTohMCx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBuZXcgWE1MSHR0cFJlcXVlc3R9fSxyZXNwb25zZTp7dHlwZTpPYmplY3Qsbm90aWZ5OiEwLHJlYWRPbmx5OiEwLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9fSxzdGF0dXM6e3R5cGU6TnVtYmVyLG5vdGlmeTohMCxyZWFkT25seTohMCx2YWx1ZTowfSxzdGF0dXNUZXh0Ont0eXBlOlN0cmluZyxub3RpZnk6ITAscmVhZE9ubHk6ITAsdmFsdWU6IiJ9LGNvbXBsZXRlczp7dHlwZTpPYmplY3QscmVhZE9ubHk6ITAsbm90aWZ5OiEwLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGEsYyl7dGhpcy5yZXNvbHZlQ29tcGxldGVzPWE7dGhpcy5yZWplY3RDb21wbGV0ZXM9Y30uYmluZCh0aGlzKSl9fSxwcm9ncmVzczp7dHlwZTpPYmplY3QsCm5vdGlmeTohMCxyZWFkT25seTohMCx2YWx1ZTpmdW5jdGlvbigpe3JldHVybnt9fX0sYWJvcnRlZDp7dHlwZTpCb29sZWFuLG5vdGlmeTohMCxyZWFkT25seTohMCx2YWx1ZTohMX0sZXJyb3JlZDp7dHlwZTpCb29sZWFuLG5vdGlmeTohMCxyZWFkT25seTohMCx2YWx1ZTohMX0sdGltZWRPdXQ6e3R5cGU6Qm9vbGVhbixub3RpZnk6ITAscmVhZE9ubHk6ITAsdmFsdWU6ITF9fSxnZXQgc3VjY2VlZGVkKCl7aWYodGhpcy5lcnJvcmVkfHx0aGlzLmFib3J0ZWR8fHRoaXMudGltZWRPdXQpcmV0dXJuITE7dmFyIGE9dGhpcy54aHIuc3RhdHVzfHwwO3JldHVybiAwPT09YXx8MjAwPD1hJiYzMDA+YX0sc2VuZDpmdW5jdGlvbihhKXt2YXIgYz10aGlzLnhocjtpZigwPGMucmVhZHlTdGF0ZSlyZXR1cm4gbnVsbDtjLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixmdW5jdGlvbihtKXt0aGlzLl9zZXRQcm9ncmVzcyh7bGVuZ3RoQ29tcHV0YWJsZTptLmxlbmd0aENvbXB1dGFibGUsbG9hZGVkOm0ubG9hZGVkLAp0b3RhbDptLnRvdGFsfSk7dGhpcy5maXJlKCJpcm9uLXJlcXVlc3QtcHJvZ3Jlc3MtY2hhbmdlZCIse3ZhbHVlOnRoaXMucHJvZ3Jlc3N9KX0uYmluZCh0aGlzKSk7Yy5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsZnVuY3Rpb24obSl7dGhpcy5fc2V0RXJyb3JlZCghMCk7dGhpcy5fdXBkYXRlU3RhdHVzKCk7dGhpcy5yZWplY3RDb21wbGV0ZXMoYS5yZWplY3RXaXRoUmVxdWVzdD97ZXJyb3I6bSxyZXF1ZXN0OnRoaXN9Om0pfS5iaW5kKHRoaXMpKTtjLmFkZEV2ZW50TGlzdGVuZXIoInRpbWVvdXQiLGZ1bmN0aW9uKG0pe3RoaXMuX3NldFRpbWVkT3V0KCEwKTt0aGlzLl91cGRhdGVTdGF0dXMoKTt0aGlzLnJlamVjdENvbXBsZXRlcyhhLnJlamVjdFdpdGhSZXF1ZXN0P3tlcnJvcjptLHJlcXVlc3Q6dGhpc306bSl9LmJpbmQodGhpcykpO2MuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLGZ1bmN0aW9uKCl7dGhpcy5fc2V0QWJvcnRlZCghMCk7dGhpcy5fdXBkYXRlU3RhdHVzKCk7dmFyIG09CkVycm9yKCJSZXF1ZXN0IGFib3J0ZWQuIik7dGhpcy5yZWplY3RDb21wbGV0ZXMoYS5yZWplY3RXaXRoUmVxdWVzdD97ZXJyb3I6bSxyZXF1ZXN0OnRoaXN9Om0pfS5iaW5kKHRoaXMpKTtjLmFkZEV2ZW50TGlzdGVuZXIoImxvYWRlbmQiLGZ1bmN0aW9uKCl7dGhpcy5fdXBkYXRlU3RhdHVzKCk7dGhpcy5fc2V0UmVzcG9uc2UodGhpcy5wYXJzZVJlc3BvbnNlKCkpO2lmKHRoaXMuc3VjY2VlZGVkKXRoaXMucmVzb2x2ZUNvbXBsZXRlcyh0aGlzKTtlbHNle3ZhciBtPUVycm9yKCJUaGUgcmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXMgY29kZTogIit0aGlzLnhoci5zdGF0dXMpO3RoaXMucmVqZWN0Q29tcGxldGVzKGEucmVqZWN0V2l0aFJlcXVlc3Q/e2Vycm9yOm0scmVxdWVzdDp0aGlzfTptKX19LmJpbmQodGhpcykpO3RoaXMudXJsPWEudXJsO3ZhciBkPSExIT09YS5hc3luYztjLm9wZW4oYS5tZXRob2R8fCJHRVQiLGEudXJsLGQpO3ZhciBmPXtqc29uOiJhcHBsaWNhdGlvbi9qc29uIiwKdGV4dDoidGV4dC9wbGFpbiIsaHRtbDoidGV4dC9odG1sIix4bWw6ImFwcGxpY2F0aW9uL3htbCIsYXJyYXlidWZmZXI6ImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSJ9W2EuaGFuZGxlQXNdLGc9YS5oZWFkZXJzfHxPYmplY3QuY3JlYXRlKG51bGwpLGw9T2JqZWN0LmNyZWF0ZShudWxsKSxrO2ZvcihrIGluIGcpbFtrLnRvTG93ZXJDYXNlKCldPWdba107Zz1sO2YmJiFnLmFjY2VwdCYmKGcuYWNjZXB0PWYpO09iamVjdC5rZXlzKGcpLmZvckVhY2goZnVuY3Rpb24obSl7L1tBLVpdLy50ZXN0KG0pJiZQb2x5bWVyLkJhc2UuX2Vycm9yKCJIZWFkZXJzIG11c3QgYmUgbG93ZXIgY2FzZSwgZ290IixtKTtjLnNldFJlcXVlc3RIZWFkZXIobSxnW21dKX0sdGhpcyk7aWYoZCl7Yy50aW1lb3V0PWEudGltZW91dDtkPWEuaGFuZGxlQXM7aWYoYS5qc29uUHJlZml4fHwhZClkPSJ0ZXh0IjtjLnJlc3BvbnNlVHlwZT1jLl9yZXNwb25zZVR5cGU9ZDthLmpzb25QcmVmaXgmJihjLl9qc29uUHJlZml4PQphLmpzb25QcmVmaXgpfWMud2l0aENyZWRlbnRpYWxzPSEhYS53aXRoQ3JlZGVudGlhbHM7ZD10aGlzLl9lbmNvZGVCb2R5T2JqZWN0KGEuYm9keSxnWyJjb250ZW50LXR5cGUiXSk7Yy5zZW5kKGQpO3JldHVybiB0aGlzLmNvbXBsZXRlc30scGFyc2VSZXNwb25zZTpmdW5jdGlvbigpe3ZhciBhPXRoaXMueGhyLGM9YS5yZXNwb25zZVR5cGV8fGEuX3Jlc3BvbnNlVHlwZSxkPSF0aGlzLnhoci5yZXNwb25zZVR5cGUsZj1hLl9qc29uUHJlZml4JiZhLl9qc29uUHJlZml4Lmxlbmd0aHx8MDt0cnl7c3dpdGNoKGMpe2Nhc2UgImpzb24iOmlmKGR8fHZvaWQgMD09PWEucmVzcG9uc2UpdHJ5e3JldHVybiBKU09OLnBhcnNlKGEucmVzcG9uc2VUZXh0KX1jYXRjaChnKXtyZXR1cm4gY29uc29sZS53YXJuKCJGYWlsZWQgdG8gcGFyc2UgSlNPTiBzZW50IGZyb20gIithLnJlc3BvbnNlVVJMKSxudWxsfXJldHVybiBhLnJlc3BvbnNlO2Nhc2UgInhtbCI6cmV0dXJuIGEucmVzcG9uc2VYTUw7Y2FzZSAiYmxvYiI6Y2FzZSAiZG9jdW1lbnQiOmNhc2UgImFycmF5YnVmZmVyIjpyZXR1cm4gYS5yZXNwb25zZTsKZGVmYXVsdDppZihmKXRyeXtyZXR1cm4gSlNPTi5wYXJzZShhLnJlc3BvbnNlVGV4dC5zdWJzdHJpbmcoZikpfWNhdGNoKGcpe3JldHVybiBjb25zb2xlLndhcm4oIkZhaWxlZCB0byBwYXJzZSBKU09OIHNlbnQgZnJvbSAiK2EucmVzcG9uc2VVUkwpLG51bGx9cmV0dXJuIGEucmVzcG9uc2VUZXh0fX1jYXRjaChnKXt0aGlzLnJlamVjdENvbXBsZXRlcyhFcnJvcigiQ291bGQgbm90IHBhcnNlIHJlc3BvbnNlLiAiK2cubWVzc2FnZSkpfX0sYWJvcnQ6ZnVuY3Rpb24oKXt0aGlzLl9zZXRBYm9ydGVkKCEwKTt0aGlzLnhoci5hYm9ydCgpfSxfZW5jb2RlQm9keU9iamVjdDpmdW5jdGlvbihhLGMpe2lmKCJzdHJpbmciPT10eXBlb2YgYSlyZXR1cm4gYTtzd2l0Y2goYyl7Y2FzZSAiYXBwbGljYXRpb24vanNvbiI6cmV0dXJuIEpTT04uc3RyaW5naWZ5KGEpO2Nhc2UgImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCI6cmV0dXJuIHRoaXMuX3d3d0Zvcm1VcmxFbmNvZGUoYSl9cmV0dXJuIGF9LApfd3d3Rm9ybVVybEVuY29kZTpmdW5jdGlvbihhKXtpZighYSlyZXR1cm4iIjt2YXIgYz1bXTtPYmplY3Qua2V5cyhhKS5mb3JFYWNoKGZ1bmN0aW9uKGQpe2MucHVzaCh0aGlzLl93d3dGb3JtVXJsRW5jb2RlUGllY2UoZCkrIlx4M2QiK3RoaXMuX3d3d0Zvcm1VcmxFbmNvZGVQaWVjZShhW2RdKSl9LHRoaXMpO3JldHVybiBjLmpvaW4oIlx4MjYiKX0sX3d3d0Zvcm1VcmxFbmNvZGVQaWVjZTpmdW5jdGlvbihhKXtyZXR1cm4gbnVsbCE9PWEmJnZvaWQgMCE9PWEmJmEudG9TdHJpbmc/ZW5jb2RlVVJJQ29tcG9uZW50KGEudG9TdHJpbmcoKS5yZXBsYWNlKC9ccj9cbi9nLCJcclxuIikpLnJlcGxhY2UoLyUyMC9nLCIrIik6IiJ9LF91cGRhdGVTdGF0dXM6ZnVuY3Rpb24oKXt0aGlzLl9zZXRTdGF0dXModGhpcy54aHIuc3RhdHVzKTt0aGlzLl9zZXRTdGF0dXNUZXh0KHZvaWQgMD09PXRoaXMueGhyLnN0YXR1c1RleHQ/IiI6dGhpcy54aHIuc3RhdHVzVGV4dCl9fSk7Cjwvc2NyaXB0PgoKCgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vZ29vZ2xlLWNoYXJ0L2dvb2dsZS1jaGFydC1sb2FkZXIuaHRtbC5qcwooZnVuY3Rpb24oKXtmdW5jdGlvbiBhKGspe3JldHVybiBnb29nbGVbMD09PWsuaW5kZXhPZigibWQtIik/Yy5DSEFSVFM6Yy5WSVNdfXZhciBjPXtDSEFSVFM6ImNoYXJ0cyIsVklTOiJ2aXN1YWxpemF0aW9uIn0sZD17YXJlYTp7Y3RvcjoiQXJlYUNoYXJ0In0sYmFyOntjdG9yOiJCYXJDaGFydCJ9LCJtZC1iYXIiOntjdG9yOiJCYXIiLHBrZzoiYmFyIn0sYnViYmxlOntjdG9yOiJCdWJibGVDaGFydCJ9LGNhbGVuZGFyOntjdG9yOiJDYWxlbmRhciIscGtnOiJjYWxlbmRhciJ9LGNhbmRsZXN0aWNrOntjdG9yOiJDYW5kbGVzdGlja0NoYXJ0In0sY29sdW1uOntjdG9yOiJDb2x1bW5DaGFydCJ9LGNvbWJvOntjdG9yOiJDb21ib0NoYXJ0In0sZ2F1Z2U6e2N0b3I6IkdhdWdlIixwa2c6ImdhdWdlIn0sZ2VvOntjdG9yOiJHZW9DaGFydCJ9LGhpc3RvZ3JhbTp7Y3RvcjoiSGlzdG9ncmFtIn0sbGluZTp7Y3RvcjoiTGluZUNoYXJ0In0sIm1kLWxpbmUiOntjdG9yOiJMaW5lIixwa2c6ImxpbmUifSwKb3JnOntjdG9yOiJPcmdDaGFydCIscGtnOiJvcmdjaGFydCJ9LHBpZTp7Y3RvcjoiUGllQ2hhcnQifSxzYW5rZXk6e2N0b3I6IlNhbmtleSIscGtnOiJzYW5rZXkifSxzY2F0dGVyOntjdG9yOiJTY2F0dGVyQ2hhcnQifSwibWQtc2NhdHRlciI6e2N0b3I6IlNjYXR0ZXIiLHBrZzoic2NhdHRlciJ9LCJzdGVwcGVkLWFyZWEiOntjdG9yOiJTdGVwcGVkQXJlYUNoYXJ0In0sdGFibGU6e2N0b3I6IlRhYmxlIixwa2c6InRhYmxlIn0sdGltZWxpbmU6e2N0b3I6IlRpbWVsaW5lIixwa2c6InRpbWVsaW5lIn0sdHJlZW1hcDp7Y3RvcjoiVHJlZU1hcCIscGtnOiJ0cmVlbWFwIn0sd29yZHRyZWU6e2N0b3I6IldvcmRUcmVlIixuYW1lc3BhY2U6Yy5WSVMscGtnOiJ3b3JkdHJlZSJ9fSxmPXt9LGc9e30sbD17fTtQb2x5bWVyKHtpczoiZ29vZ2xlLWNoYXJ0LWxvYWRlciIscHJvcGVydGllczp7cGFja2FnZXM6e3R5cGU6QXJyYXksdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm5bXX0sb2JzZXJ2ZXI6Il9sb2FkUGFja2FnZXMifSwKdHlwZTp7dHlwZTpTdHJpbmcsb2JzZXJ2ZXI6Il9sb2FkUGFja2FnZUZvclR5cGUifX0sZ2V0IF9jb3JlUGFja2FnZSgpe3JldHVybiBnLmNvcmVjaGFydD9nLmNvcmVjaGFydDp0aGlzLl9sb2FkUGFja2FnZXMoWyJjb3JlY2hhcnQiXSkudGhlbihmdW5jdGlvbihrKXtyZXR1cm4ga1swXX0pfSxfbG9hZFBhY2thZ2VzRGVib3VuY2U6ZnVuY3Rpb24oKXt0aGlzLmRlYm91bmNlKCJsb2FkUGFja2FnZXMiLGZ1bmN0aW9uKCl7dmFyIGs9T2JqZWN0LmtleXMoZik7ay5sZW5ndGgmJihmPXt9LGdvb2dsZS5jaGFydHMubG9hZCgiY3VycmVudCIse3BhY2thZ2VzOmssbGFuZ3VhZ2U6ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50Lmxhbmd8fCJlbiJ9KSxnb29nbGUuY2hhcnRzLnNldE9uTG9hZENhbGxiYWNrKGZ1bmN0aW9uKCl7ay5mb3JFYWNoKGZ1bmN0aW9uKG0pe3RoaXMuZmlyZSgibG9hZGVkIixtKTtsW21dKGdvb2dsZS52aXN1YWxpemF0aW9uKX0uYmluZCh0aGlzKSl9LmJpbmQodGhpcykpKX0sCjEwMCl9LF9sb2FkUGFja2FnZXM6ZnVuY3Rpb24oayl7dmFyIG09W107ay5mb3JFYWNoKGZ1bmN0aW9uKHApe2dbcF18fChmW3BdPSEwLGdbcF09bmV3IFByb21pc2UoZnVuY3Rpb24ocSl7bFtwXT1xfSksdGhpcy5fbG9hZFBhY2thZ2VzRGVib3VuY2UoKSk7bS5wdXNoKGdbcF0pfS5iaW5kKHRoaXMpKTtyZXR1cm4gUHJvbWlzZS5hbGwobSl9LF9sb2FkUGFja2FnZUZvclR5cGU6ZnVuY3Rpb24oayl7dmFyIG09ZFtrXTtyZXR1cm4gbT90aGlzLl9sb2FkUGFja2FnZXMoW20ucGtnfHwiY29yZWNoYXJ0Il0pLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4oZ29vZ2xlW20ubmFtZXNwYWNlXXx8YShrKSlbbS5jdG9yXX0pOlByb21pc2UucmVqZWN0KCJUaGlzIGNoYXJ0IHR5cGUgaXMgbm90IHlldCBzdXBwb3J0ZWQ6ICIrayl9LGNyZWF0ZTpmdW5jdGlvbihrLG0pe3JldHVybiB0aGlzLl9sb2FkUGFja2FnZUZvclR5cGUoaykudGhlbihmdW5jdGlvbihwKXtyZXR1cm4gbmV3IHAobSl9KX0sZmlyZU9uQ2hhcnRFdmVudDpmdW5jdGlvbihrLAptLHApe3JldHVybiB0aGlzLl9jb3JlUGFja2FnZS50aGVuKGZ1bmN0aW9uKHEpeyhwP3EuZXZlbnRzLmFkZE9uZVRpbWVMaXN0ZW5lcjpxLmV2ZW50cy5hZGRMaXN0ZW5lcikoayxtLGZ1bmN0aW9uKHIpe3RoaXMuZmlyZSgiZ29vZ2xlLWNoYXJ0LSIrbSx7Y2hhcnQ6ayxkYXRhOnJ9KX0uYmluZCh0aGlzKSl9LmJpbmQodGhpcykpfSxkYXRhVGFibGU6ZnVuY3Rpb24oayl7cmV0dXJuIHRoaXMuX2NvcmVQYWNrYWdlLnRoZW4oZnVuY3Rpb24obSl7cmV0dXJuIG51bGw9PWs/bmV3IG0uRGF0YVRhYmxlOmsuZ2V0TnVtYmVyT2ZSb3dzP2s6ay5jb2xzP25ldyBtLkRhdGFUYWJsZShrKTowPGsubGVuZ3RoP20uYXJyYXlUb0RhdGFUYWJsZShrKTowPT09ay5sZW5ndGg/UHJvbWlzZS5yZWplY3QoIkRhdGEgd2FzIGVtcHR5LiIpOlByb21pc2UucmVqZWN0KCJEYXRhIGZvcm1hdCB3YXMgbm90IHJlY29nbml6ZWQuIil9KX0sZGF0YVZpZXc6ZnVuY3Rpb24oayl7cmV0dXJuIHRoaXMuX2NvcmVQYWNrYWdlLnRoZW4oZnVuY3Rpb24obSl7cmV0dXJuIG5ldyBtLkRhdGFWaWV3KGspfSl9LApxdWVyeTpmdW5jdGlvbihrLG0pe3JldHVybiB0aGlzLl9jb3JlUGFja2FnZS50aGVuKGZ1bmN0aW9uKHApe3JldHVybiBuZXcgcC5RdWVyeShrLG0pfSl9fSl9KSgpOwo8L3NjcmlwdD4KCjxkb20tbW9kdWxlIGlkPSJnb29nbGUtY2hhcnQtc3R5bGVzIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiAtd2Via2l0LWZsZXg7CiAgICAgICAgZGlzcGxheTogLW1zLWZsZXg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgICB3aWR0aDogNDAwcHg7CiAgICAgICAgaGVpZ2h0OiAzMDBweDsKICAgICAgfQoKICAgICAgOmhvc3QoW3R5cGU9J2dhdWdlJ10pIHsKICAgICAgICB3aWR0aDogMzAwcHg7CiAgICAgICAgaGVpZ2h0OiAzMDBweDsKICAgICAgfQoKICAgICAgI2NoYXJ0ZGl2IHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+CgoKCjxkb20tbW9kdWxlIGlkPSJnb29nbGUtY2hhcnQiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZSBpbmNsdWRlPSJnb29nbGUtY2hhcnQtc3R5bGVzIj48L3N0eWxlPgogICAgPGdvb2dsZS1jaGFydC1sb2FkZXIgaWQ9ImxvYWRlciIgdHlwZT0iW1t0eXBlXV0iPjwvZ29vZ2xlLWNoYXJ0LWxvYWRlcj4KICAgIDxkaXYgaWQ9ImNoYXJ0ZGl2Ij48L2Rpdj4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+Cgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vZ29vZ2xlLWNoYXJ0L2dvb2dsZS1jaGFydC5odG1sLmpzCihmdW5jdGlvbigpe1BvbHltZXIoe2lzOiJnb29nbGUtY2hhcnQiLHByb3BlcnRpZXM6e3R5cGU6e3R5cGU6U3RyaW5nLHZhbHVlOiJjb2x1bW4iLG9ic2VydmVyOiJfdHlwZUNoYW5nZWQifSxldmVudHM6e3R5cGU6QXJyYXksdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm5bXX19LG9wdGlvbnM6e3R5cGU6T2JqZWN0fSxjb2xzOnt0eXBlOkFycmF5LG9ic2VydmVyOiJfcm93c09yQ29sdW1uc0NoYW5nZWQifSxyb3dzOnt0eXBlOkFycmF5LG9ic2VydmVyOiJfcm93c09yQ29sdW1uc0NoYW5nZWQifSxkYXRhOnt0eXBlOlN0cmluZyxvYnNlcnZlcjoiX2RhdGFDaGFuZ2VkIn0sdmlldzp7dHlwZTpPYmplY3Qsb2JzZXJ2ZXI6Il92aWV3Q2hhbmdlZCJ9LHNlbGVjdGlvbjp7dHlwZTpBcnJheSxub3RpZnk6ITAsb2JzZXJ2ZXI6Il9zZXRTZWxlY3Rpb24ifSxkcmF3bjp7dHlwZTpCb29sZWFuLHJlYWRPbmx5OiEwLHZhbHVlOiExfX0sb2JzZXJ2ZXJzOlsiX2RyYXcoX2NoYXJ0LCBfZGF0YVZpZXcpIiwKIl9zdWJPcHRpb25DaGFuZ2VkKG9wdGlvbnMuKikiXSxsaXN0ZW5lcnM6eyJnb29nbGUtY2hhcnQtc2VsZWN0IjoiX3VwZGF0ZVNlbGVjdGlvbiIsImdvb2dsZS1jaGFydC1yZWFkeSI6Il9vbkNoYXJ0UmVhZHkifSxfY2hhcnQ6bnVsbCxfZGF0YVZpZXc6bnVsbCxfc2VsZWN0aW9uOm51bGwsX3R5cGVDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy4kLmxvYWRlci5jcmVhdGUodGhpcy50eXBlLHRoaXMuJC5jaGFydGRpdikudGhlbihmdW5jdGlvbihhKXt2YXIgYz10aGlzLiQubG9hZGVyO09iamVjdC5rZXlzKHRoaXMuZXZlbnRzLmNvbmNhdChbInNlbGVjdCIsInJlYWR5Il0pLnJlZHVjZShmdW5jdGlvbihkLGYpe2RbZl09ITA7cmV0dXJuIGR9LHt9KSkuZm9yRWFjaChmdW5jdGlvbihkKXtjLmZpcmVPbkNoYXJ0RXZlbnQoYSxkKX0pO3RoaXMuX3NldERyYXduKCExKTt0aGlzLl9jaGFydD1hfS5iaW5kKHRoaXMpKX0sX3N1Yk9wdGlvbkNoYW5nZWQ6ZnVuY3Rpb24oYSl7dGhpcy5vcHRpb25zPQphLmJhc2U7dGhpcy5kZWJvdW5jZSgib3B0aW9uQ2hhbmdlUmVkcmF3IixmdW5jdGlvbigpe3RoaXMucmVkcmF3KCl9LDUpfSxfc2V0U2VsZWN0aW9uOmZ1bmN0aW9uKCl7dGhpcy5kcmF3biYmdGhpcy5zZWxlY3Rpb24mJnRoaXMuc2VsZWN0aW9uIT09dGhpcy5fc2VsZWN0aW9uJiYodGhpcy5fY2hhcnQuc2V0U2VsZWN0aW9uJiZ0aGlzLl9jaGFydC5zZXRTZWxlY3Rpb24odGhpcy5zZWxlY3Rpb24pLHRoaXMuX3NlbGVjdGlvbj10aGlzLnNlbGVjdGlvbil9LF91cGRhdGVTZWxlY3Rpb246ZnVuY3Rpb24oKXt0aGlzLnNlbGVjdGlvbj10aGlzLl9zZWxlY3Rpb249dGhpcy5fY2hhcnQuZ2V0U2VsZWN0aW9uKCl9LF9vbkNoYXJ0UmVhZHk6ZnVuY3Rpb24oKXt0aGlzLl9zZXREcmF3bighMCk7dGhpcy5fc2VsZWN0aW9uPW51bGw7dGhpcy5fc2V0U2VsZWN0aW9uKCl9LHJlZHJhdzpmdW5jdGlvbigpe3RoaXMuX2NoYXJ0JiZ0aGlzLl9kYXRhVmlldyYmdGhpcy5fZHJhdyh0aGlzLl9jaGFydCwKdGhpcy5fZGF0YVZpZXcpfSxfZHJhdzpmdW5jdGlvbihhLGMpe2lmKG51bGwhPWEmJm51bGwhPWMpdHJ5e3RoaXMuX3NldERyYXduKCExKSxhLmRyYXcoYyx0aGlzLm9wdGlvbnN8fHt9KX1jYXRjaChkKXt0aGlzLiQuY2hhcnRkaXYuaW5uZXJIVE1MPWR9fSxnZXQgaW1hZ2VVUkkoKXtyZXR1cm4gdGhpcy5fY2hhcnQ/dGhpcy5fY2hhcnQuZ2V0SW1hZ2VVUkkoKTpudWxsfSxfdmlld0NoYW5nZWQ6ZnVuY3Rpb24oYSl7YSYmKHRoaXMuX2RhdGFWaWV3PWEpfSxfcm93c09yQ29sdW1uc0NoYW5nZWQ6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLnJvd3MsYz10aGlzLmNvbHM7YSYmYyYmdGhpcy4kLmxvYWRlci5kYXRhVGFibGUoKS50aGVuKGZ1bmN0aW9uKGQpe2MuZm9yRWFjaChmdW5jdGlvbihmKXtkLmFkZENvbHVtbihmKX0pO2QuYWRkUm93cyhhKTtyZXR1cm4gZH0uYmluZCh0aGlzKSkudGhlbih0aGlzLiQubG9hZGVyLmRhdGFWaWV3LmJpbmQodGhpcy4kLmxvYWRlcikpLnRoZW4oZnVuY3Rpb24oZCl7dGhpcy5fZGF0YVZpZXc9CmR9LmJpbmQodGhpcykpLmNhdGNoKGZ1bmN0aW9uKGQpe3RoaXMuJC5jaGFydGRpdi5pbm5lckhUTUw9ZH0uYmluZCh0aGlzKSl9LF9kYXRhQ2hhbmdlZDpmdW5jdGlvbihhKXtpZihhKXt2YXIgYz0hMTt0cnl7YT1KU09OLnBhcnNlKGEpfWNhdGNoKGQpe2M9InN0cmluZyI9PXR5cGVvZiBhfHxhIGluc3RhbmNlb2YgU3RyaW5nfWE9Yz9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpcm9uLXJlcXVlc3QiKS5zZW5kKHt1cmw6YSxoYW5kbGVBczoianNvbiJ9KS50aGVuKGZ1bmN0aW9uKGQpe3JldHVybiBkLnJlc3BvbnNlfSk6UHJvbWlzZS5yZXNvbHZlKGEpO2EudGhlbih0aGlzLiQubG9hZGVyLmRhdGFUYWJsZS5iaW5kKHRoaXMuJC5sb2FkZXIpKS50aGVuKHRoaXMuJC5sb2FkZXIuZGF0YVZpZXcuYmluZCh0aGlzLiQubG9hZGVyKSkudGhlbihmdW5jdGlvbihkKXt0aGlzLl9kYXRhVmlldz1kfS5iaW5kKHRoaXMpKX19LGF0dGFjaGVkOmZ1bmN0aW9uKCl7dmFyIGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7CmEuc3JjPSJodHRwczovL3d3dy5nc3RhdGljLmNvbS9jaGFydHMvbG9hZGVyLmpzIjtkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKGEpfX0pfSkoKTsKPC9zY3JpcHQ+CgoKPGRvbS1tb2R1bGUgaWQ9Imdvb2dsZS1jaGFydC1kZW1vIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIGNvZGUgewogICAgICAgIGNvbG9yOiAjMDA3MDAwOwogICAgICB9CiAgICAgIGdvb2dsZS1jaGFydCB7CiAgICAgICAgaGVpZ2h0OiAzMDBweDsKICAgICAgICB3aWR0aDogNDAwcHg7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8ZGl2IGlkPSJkZW1vLWJvZHkiPgogICAgICA8cD4KICAgICAgICBXZWJzaXRlIHRyYWZmaWMgZGF0YSBieSBjb3VudHJ5IGZyb20gYW4gZXh0ZXJuYWwgSlNPTiByZXNvdXJjZSB3aGVyZSB0aGUKICAgICAgICBkYXRhIGlzIGluIHJhdyBEYXRhVGFibGUgZm9ybWF0LgogICAgICAKICAgICAgPGdvb2dsZS1jaGFydCB0eXBlPSJjb2x1bW4iIG9wdGlvbnM9InsmcXVvdDt0aXRsZSZxdW90OzogJnF1b3Q7VmlzaXRvcnMgYnkgQ291bnRyeSZxdW90OywgJnF1b3Q7bGVnZW5kJnF1b3Q7OiAmcXVvdDtub25lJnF1b3Q7fSIgZGF0YT0iW1tfZGF0YV1dIj4KICAgICAgPC9nb29nbGUtY2hhcnQ+CiAgICA8L2Rpdj4KICA8L3RlbXBsYXRlPgoKICA8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vZ29vZ2xlLWNoYXJ0L2dvb2dsZS1jaGFydC1kZW1vLmh0bWwuanMKUG9seW1lcih7aXM6Imdvb2dsZS1jaGFydC1kZW1vIixwcm9wZXJ0aWVzOntfZGF0YTp7dHlwZTpPYmplY3Qsb2JzZXJ2ZXI6Il91cGRhdGVWaWV3In19fSk7Cjwvc2NyaXB0Pgo8L2RvbS1tb2R1bGU+CgoKCgoKPGRvbS1tb2R1bGUgaWQ9InRmLXBsdWdpbi1kaWFsb2ciPgogIDx0ZW1wbGF0ZT4KICAgIAogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19vcGVuXV0iPgogICAgICA8ZGl2IGlkPSJkYXNoYm9hcmQtYmFja2Ryb3AiPjwvZGl2PgogICAgPC90ZW1wbGF0ZT4KICAgIDxwYXBlci1kaWFsb2cgaWQ9ImRpYWxvZyIgbW9kYWwgb3BlbmVkPSJ7e19vcGVufX0iIHdpdGgtYmFja2Ryb3A9IltbX3VzZU5hdGl2ZUJhY2tkcm9wXV0iPgogICAgICA8aDIgaWQ9ImRpYWxvZy10aXRsZSI+W1tfdGl0bGVdXTwvaDI+CiAgICAgIDxkaXYgY2xhc3M9ImN1c3RvbS1tZXNzYWdlIj5bW19jdXN0b21NZXNzYWdlXV08L2Rpdj4KICAgIDwvcGFwZXItZGlhbG9nPgogICAgPHN0eWxlPgogICAgICAvKiogV2UgcmVseSBvbiBhIHNlcGFyYXRlIGBfaGlkZGVuYCBwcm9wZXJ0eSBpbnN0ZWFkIG9mIGRpcmVjdGx5IG1ha2luZyB1c2UKICAgICAgICAgIG9mIHRoZSBgX29wZW5gIGF0dHJpYnV0ZSBiZWNhdXNlIHRoaXMgQ1NTIHNwZWNpZmljYXRpb24gbWF5IHN0cmFuZ2VseQogICAgICAgICAgYWZmZWN0IG90aGVyIGVsZW1lbnRzIHRocm91Z2hvdXQgVGVuc29yQm9hcmQuIFNlZSAjODk5LiAqLwogICAgICAjZGFzaGJvYXJkLWJhY2tkcm9wIHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuNik7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CgogICAgICAjZGlhbG9nLXRpdGxlIHsKICAgICAgICBwYWRkaW5nLWJvdHRvbTogMTVweDsKICAgICAgfQoKICAgICAgLmN1c3RvbS1tZXNzYWdlIHsKICAgICAgICBtYXJnaW4tdG9wOiAwOwogICAgICAgIG1hcmdpbi1ib3R0b206IDE1cHg7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KICA8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdGYtdGVuc29yYm9hcmQvcGx1Z2luLWRpYWxvZy5odG1sLmpzClBvbHltZXIoe2lzOiJ0Zi1wbHVnaW4tZGlhbG9nIixwcm9wZXJ0aWVzOntfdGl0bGU6e3R5cGU6U3RyaW5nLHZhbHVlOm51bGx9LF9jdXN0b21NZXNzYWdlOnt0eXBlOlN0cmluZyx2YWx1ZTpudWxsfSxfb3Blbjp7dHlwZTpCb29sZWFufSxfaGlkZGVuOnt0eXBlOkJvb2xlYW4sY29tcHV0ZWQ6Il9jb21wdXRlSGlkZGVuKF9vcGVuKSIscmVmbGVjdFRvQXR0cmlidXRlOiEwfSxfdXNlTmF0aXZlQmFja2Ryb3A6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxyZWFkT25seTohMH19LG9wZW5Ob1RlbnNvckZsb3dEaWFsb2coKXt0aGlzLm9wZW5EaWFsb2coIlRoaXMgcGx1Z2luIGlzIGRpc2FibGVkIHdpdGhvdXQgVGVuc29yRmxvdyIsJ1RvIGVuYWJsZSB0aGlzIHBsdWdpbiBpbiBUZW5zb3JCb2FyZCwgaW5zdGFsbCBUZW5zb3JGbG93IHdpdGggInBpcCBpbnN0YWxsIHRlbnNvcmZsb3ciIG9yIGVxdWl2YWxlbnQuJyl9LG9wZW5PbGRUZW5zb3JGbG93RGlhbG9nKGEpe3RoaXMub3BlbkRpYWxvZygiVGhpcyBwbHVnaW4gaXMgZGlzYWJsZWQgd2l0aG91dCBUZW5zb3JGbG93ICIrCmEsIlRvIGVuYWJsZSB0aGlzIHBsdWdpbiBpbiBUZW5zb3JCb2FyZCwgaW5zdGFsbCBUZW5zb3JGbG93ICIrYSsnIG9yIGdyZWF0ZXIgd2l0aCAicGlwIGluc3RhbGwgdGVuc29yZmxvdyIgb3IgZXF1aXZhbGVudC4nKX0sb3BlbkRpYWxvZyhhLGMpe3RoaXMuc2V0KCJfdGl0bGUiLGEpO3RoaXMuc2V0KCJfY3VzdG9tTWVzc2FnZSIsYyk7dGhpcy4kLmRpYWxvZy5vcGVuKCl9LGNsb3NlRGlhbG9nKCl7dGhpcy4kLmRpYWxvZy5jbG9zZSgpfSxfY29tcHV0ZUhpZGRlbihhKXtyZXR1cm4hYX19KTsKPC9zY3JpcHQ+CjwvZG9tLW1vZHVsZT4KCgoKCgo8ZG9tLW1vZHVsZSBpZD0idGYtcHJvZmlsZS1kYXNoYm9hcmQiPgogIDx0ZW1wbGF0ZT4KICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaXNTdGF0ZShfdG9wTGV2ZWxTdGF0ZSwgJ0lOX0NPTEFCJyldXSI+CiAgICAgIDxkaXYgc3R5bGU9Im1heC13aWR0aDogNTQwcHg7IG1hcmdpbjogODBweCBhdXRvIDAgYXV0bzsiPgogICAgICAgIDxoMz5Qcm9maWxpbmcgaXNu4oCZdCBzdXBwb3J0ZWQgaW4gQ29sYWIgeWV0LjwvaDM+CiAgICAgICAgPHA+CiAgICAgICAgICBQbGVhc2Ugc2VlCiAgICAgICAgICA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9pc3N1ZXMvMTkxMyIgcmVsPSJub29wZW5lciIgdGFyZ2V0PSJfYmxhbmsiPkdpdEh1YiBpc3N1ZSAjMTkxMzwvYT4KICAgICAgICAgIGZvciBtb3JlIGluZm9ybWF0aW9uLgogICAgICAgIAogICAgICA8L2Rpdj4KICAgIDwvdGVtcGxhdGU+CiAgICA8cGFwZXItdG9hc3QgaWQ9InRvYXN0IiBkdXJhdGlvbj0iMCIgdGV4dD0iIiBhbHdheXMtb24tdG9wPgogICAgICA8cGFwZXItYnV0dG9uIG9uY2xpY2s9InRvYXN0LnRvZ2dsZSgpIiBjbGFzcz0ieWVsbG93LWJ1dHRvbiI+Q2xvc2Ugbm93ITwvcGFwZXItYnV0dG9uPgogICAgPC9wYXBlci10b2FzdD4KICAgIDx0Zi1wbHVnaW4tZGlhbG9nIGlkPSJpbml0aWFsRGlhbG9nIj48L3RmLXBsdWdpbi1kaWFsb2c+CiAgICA8cGFwZXItZGlhbG9nIGlkPSJjYXB0dXJlUHJvZmlsZURpYWxvZyIgbW9kYWw+CiAgICAgIDxwYXBlci1pbnB1dCBsYWJlbD0iUHJvZmlsZXIgU2VydmljZSBVUkwgb3IgVFBVIG5hbWUiIGFsd2F5cy1mbG9hdC1sYWJlbCBwbGFjZWhvbGRlcj0ibG9jYWxob3N0OjYwMDkiIHZhbHVlPSJ7e19wcm9maWxlclNlcnZpY2VBZGRyZXNzfX0iIGF1dG8tdmFsaWRhdGUgcmVxdWlyZWQ+PC9wYXBlci1pbnB1dD4KICAgICAgPGxhYmVsIGlkPSJwcm9maWxlci1hZGRyZXNzLXR5cGUtbGFiZWwiPkFkZHJlc3MgVHlwZTo8L2xhYmVsPgogICAgICA8cGFwZXItcmFkaW8tZ3JvdXAgc2VsZWN0ZWQ9Int7X3Byb2ZpbGVyU2VydmljZUFkZHJlc3NUeXBlfX0iIGFyaWEtbGFiZWxsZWRieT0icHJvZmlsZXItYWRkcmVzcy10eXBlLWxhYmVsIj4KICAgICAgICA8cGFwZXItcmFkaW8tYnV0dG9uIG5hbWU9ImlwLWFkZHJlc3MiPklQIEFkZHJlc3M8L3BhcGVyLXJhZGlvLWJ1dHRvbj4KICAgICAgICA8cGFwZXItcmFkaW8tYnV0dG9uIG5hbWU9InRwdS1uYW1lIj5UUFUgTmFtZTwvcGFwZXItcmFkaW8tYnV0dG9uPgogICAgICA8L3BhcGVyLXJhZGlvLWdyb3VwPgogICAgICA8cGFwZXItaW5wdXQgbGFiZWw9IlByb2ZpbGluZyBEdXJhdGlvbiAobWlsbGlzZWNvbmRzKSIgYWx3YXlzLWZsb2F0LWxhYmVsIHR5cGU9Im51bWJlciIgbWluPSIxIiBtYXg9IjYwMDAwMCIgYXV0by12YWxpZGF0ZSBwYXR0ZXJuPSJbMC05XSsiIGVycm9yLW1lc3NhZ2U9IklucHV0IGlzIG5vdCBhbiBpbnRlZ2VyIGJldHdlZW4gMSB0byA2MDAwMDAiIHJlcXVpcmVkIHZhbHVlPSJ7e19wcm9maWxlRHVyYXRpb259fSI+PC9wYXBlci1pbnB1dD4KCiAgICAgIDxwYXBlci1pbnB1dCBsYWJlbD0iQXV0b21hdGljYWxseSByZXRyeSBOIHRpbWVzIHdoZW4gbm8gdHJhY2UgZXZlbnQgaXMgY29sbGVjdGVkIiBhbHdheXMtZmxvYXQtbGFiZWwgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG1heD0iMTAwIiBhdXRvLXZhbGlkYXRlIHBhdHRlcm49IlswLTldKyIgZXJyb3ItbWVzc2FnZT0iSW5wdXQgaXMgbm90IGFuIGludGVnZXIgYmV0d2VlbiAwIHRvIDEwMCIgcmVxdWlyZWQgdmFsdWU9Int7X3Byb2ZpbGVOdW1SZXRyeX19Ij48L3BhcGVyLWlucHV0PgoKICAgICAgPGRpdiBoaWRkZW49Int7IV9zaG91bGRTaG93VHB1T3B0aW9ucyhfcHJvZmlsZXJTZXJ2aWNlQWRkcmVzc1R5cGUpfX0iPgogICAgICAgIDxwYXBlci1jaGVja2JveCBjaGVja2VkPSJ7e19wcm9maWxlSW5jbHVkZURhdGFzZXRPcHN9fSI+VHJhY2UgZGF0YXNldCBvcHM8L3BhcGVyLWNoZWNrYm94PgogICAgICAgIDxwYXBlci1pbnB1dCBsYWJlbD0iU3Vic2V0IG9mIHdvcmtlciBUUFVzIHRvIHByb2ZpbGUgKG9wdGlvbmFsKSIgYWx3YXlzLWZsb2F0LWxhYmVsIHBsYWNlaG9sZGVyPSJMaXN0IG9mIElQcywgZS5nLiAxMC40LjEuMiwxMC40LjEuMyIgdmFsdWU9Int7X3Byb2ZpbGVXb3JrZXJMaXN0fX0iPjwvcGFwZXItaW5wdXQ+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJidXR0b25zIj4KICAgICAgICA8cGFwZXItYnV0dG9uIGRpYWxvZy1jb25maXJtIHJhaXNlZCBvbi10YXA9Il9jYXB0dXJlUHJvZmlsZSIgZGlzYWJsZWQkPSJbW19zaG91bGREaXNhYmxlQ2FwdHVyZVByb2ZpbGVCdXR0b24oX3Byb2ZpbGVyU2VydmljZUFkZHJlc3MsIF9wcm9maWxlRHVyYXRpb24sIF9wcm9maWxlTnVtUmV0cnkpXV0iPgogICAgICAgICAgQ2FwdHVyZTwvcGFwZXItYnV0dG9uPgogICAgICAgIDxwYXBlci1idXR0b24gZGlhbG9nLWNvbmZpcm0+Q2xvc2U8L3BhcGVyLWJ1dHRvbj4KICAgICAgPC9kaXY+CiAgICA8L3BhcGVyLWRpYWxvZz4KICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaXNTdGF0ZShfdG9wTGV2ZWxTdGF0ZSwgJ0xPQURJTkcnKV1dIj4KICAgICAgPGRpdiBpZD0icHJvZ3Jlc3MtYmFyIj4KICAgICAgICA8ZGl2IGlkPSJwcm9ncmVzcy1tc2ciPltbcHJvZ3Jlc3MubXNnXV08L2Rpdj4KICAgICAgICA8cGFwZXItcHJvZ3Jlc3MgdmFsdWU9IltbcHJvZ3Jlc3MudmFsdWVdXSI+PC9wYXBlci1wcm9ncmVzcz4KICAgICAgPC9kaXY+CiAgICA8L3RlbXBsYXRlPgogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19pc1N0YXRlKF90b3BMZXZlbFN0YXRlLCAnREFUQV9OT1RfRk9VTkQnKV1dIj4KICAgICAgPGRpdiBzdHlsZT0ibWF4LXdpZHRoOiA1NDBweDsgbWFyZ2luOiA4MHB4IGF1dG8gMCBhdXRvOyI+CiAgICAgICAgPGgzPk5vIHByb2ZpbGUgZGF0YSB3YXMgZm91bmQuPC9oMz4KCiAgICAgICAgPHBhcGVyLWJ1dHRvbiByYWlzZWQgb24tdGFwPSJfb3BlbkNhcHR1cmVQcm9maWxlRGlhbG9nIj5DYXB0dXJlIFByb2ZpbGU8L3BhcGVyLWJ1dHRvbj4KICAgICAgICA8cGFwZXItc3Bpbm5lciBjbGFzcz0iY2FwdHVyZS1zcGlubmVyIiBhY3RpdmU9IltbX2NhcHR1cmluZ1Byb2ZpbGVdXSI+PC9wYXBlci1zcGlubmVyPgoKICAgICAgICA8cD4KICAgICAgICAgIElmIHlvdSBoYXZlIGEgbW9kZWwgcnVubmluZyBvbiBDUFUsIEdQVSwgb3IgR29vZ2xlIENsb3VkIFRQVSwgeW91IG1heQogICAgICAgICAgYmUgYWJsZSB0byB1c2UgdGhlIGFib3ZlIGJ1dHRvbiB0byBjYXB0dXJlIGEgcHJvZmlsZS4KICAgICAgICAKCiAgICAgICAgPHA+CiAgICAgICAgICBJZiB5b3XigJlyZSBhIENQVSBvciBHUFUgdXNlciwgcGxlYXNlIHVzZSB0aGUgSVAgYWRkcmVzcyBvcHRpb24uIFlvdSBtYXkKICAgICAgICAgIHdhbnQgdG8gY2hlY2sgb3V0IHRoZQogICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9jb2xhYi5yZXNlYXJjaC5nb29nbGUuY29tL2dpdGh1Yi90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL2RvY3MvcjIvdGVuc29yYm9hcmRfcHJvZmlsaW5nX2tlcmFzLmlweW5iIiByZWw9Im5vb3BlbmVyIiB0YXJnZXQ9Il9ibGFuayI+dHV0b3JpYWw8L2E+CiAgICAgICAgICBvbiBob3cgdG8gc3RhcnQgYSBUZW5zb3JGbG93IHByb2ZpbGVyIHNlcnZlciBhbmQgcHJvZmlsZSBhIEtlcmFzIG1vZGVsCiAgICAgICAgICBvbiBhIEdQVS4KICAgICAgICAKCiAgICAgICAgPHA+CiAgICAgICAgICBJZiB5b3UncmUgYSBUUFUgdXNlciwgcGxlYXNlIHVzZSB0aGUgVFBVIG5hbWUgb3B0aW9uIGFuZCB5b3UgbWF5IHdhbnQKICAgICAgICAgIHRvIGNoZWNrIG91dCB0aGUKICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vY2xvdWQuZ29vZ2xlLmNvbS90cHUvZG9jcy9jbG91ZC10cHUtdG9vbHMiIHJlbD0ibm9vcGVuZXIiIHRhcmdldD0iX2JsYW5rIj50dXRvcmlhbDwvYT4KICAgICAgICAgIG9uIGhvdyB0byBpbnRlcnByZXRpbmcgdGhlIHByb2ZpbGluZyByZXN1bHRzLgogICAgICAgIAoKICAgICAgICA8cD4KICAgICAgICAgIElmIHlvdSB0aGluayBwcm9maWxpbmcgaXMgZG9uZSBwcm9wZXJseSwgcGxlYXNlIHNlZSB0aGUgcGFnZSBvZgogICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9jbG91ZC5nb29nbGUuY29tL3RwdS9kb2NzL3Ryb3VibGVzaG9vdGluZyIgcmVsPSJub29wZW5lciIgdGFyZ2V0PSJfYmxhbmsiPkdvb2dsZSBDbG91ZCBUUFUgVHJvdWJsZXNob290aW5nIGFuZCBGQVE8L2E+CiAgICAgICAgICBhbmQgY29uc2lkZXIgZmlsaW5nIGFuIGlzc3VlIG9uIEdpdEh1Yi4KICAgICAgICAKICAgICAgPC9kaXY+CiAgICA8L3RlbXBsYXRlPgogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19pc1N0YXRlKF90b3BMZXZlbFN0YXRlLCAnQUNUSVZFJyldXSI+CiAgICAgIDx0Zi1kYXNoYm9hcmQtbGF5b3V0PgogICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXIiIHNsb3Q9InNpZGViYXIiPgogICAgICAgICAgPGRpdiBjbGFzcz0iYWxsY29udHJvbHMiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24iPgogICAgICAgICAgICAgIDxwYXBlci1idXR0b24gcmFpc2VkIG9uLXRhcD0iX29wZW5DYXB0dXJlUHJvZmlsZURpYWxvZyI+Q2FwdHVyZSBQcm9maWxlPC9wYXBlci1idXR0b24+CiAgICAgICAgICAgICAgPHBhcGVyLXNwaW5uZXIgY2xhc3M9ImNhcHR1cmUtc3Bpbm5lciIgYWN0aXZlPSJbW19jYXB0dXJpbmdQcm9maWxlXV0iPjwvcGFwZXItc3Bpbm5lcj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiI+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGl0bGUiPgogICAgICAgICAgICAgICAgUnVucyA8c3BhbiBjbGFzcz0iY291bnRlciI+KFtbX2RhdGFzZXRzLmxlbmd0aF1dKTwvc3Bhbj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICA8cGFwZXItZHJvcGRvd24tbWVudSBuby1sYWJlbC1mbG9hdCBuby1hbmltYXRpb25zIG5vaW5rIGhvcml6b250YWwtYWxpZ249ImxlZnQiPgogICAgICAgICAgICAgICAgPHBhcGVyLWxpc3Rib3ggaWQ9Imxpc3RfYm94X3J1biIgc2xvdD0iZHJvcGRvd24tY29udGVudCIgc2VsZWN0ZWQ9Int7c2VsZWN0ZWREYXRhc2V0SW5kZXh9fSI+CiAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpZD0icnVuX2l0ZW1zIiBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX2RhdGFzZXRzXV0iPgogICAgICAgICAgICAgICAgICAgIDxwYXBlci1pdGVtPltbaXRlbS5uYW1lXV08L3BhcGVyLWl0ZW0+CiAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8L3BhcGVyLWxpc3Rib3g+CiAgICAgICAgICAgICAgPC9wYXBlci1kcm9wZG93bi1tZW51PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZSI+CiAgICAgICAgICAgICAgICBUb29scyA8c3BhbiBjbGFzcz0iY291bnRlciI+KFtbX2FjdGl2ZVRvb2xzTGlzdC5sZW5ndGhdXSk8L3NwYW4+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPHBhcGVyLWRyb3Bkb3duLW1lbnUgbm8tbGFiZWwtZmxvYXQgbm8tYW5pbWF0aW9ucyBub2luayBob3Jpem9udGFsLWFsaWduPSJsZWZ0Ij4KICAgICAgICAgICAgICAgIDxwYXBlci1saXN0Ym94IGlkPSJsaXN0X2JveF90b29sIiBzbG90PSJkcm9wZG93bi1jb250ZW50IiBzZWxlY3RlZD0ie3tzZWxlY3RlZFRvb2xJbmRleH19Ij4KICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlkPSJ0b29sX2l0ZW1zIiBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX2FjdGl2ZVRvb2xzTGlzdF1dIj4KICAgICAgICAgICAgICAgICAgICA8cGFwZXItaXRlbT5bW2l0ZW1dXTwvcGFwZXItaXRlbT4KICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbWyFfaGFzQWN0aXZlVG9vbHMoKV1dIiByZXN0YW1wPSJ0cnVlIj4KICAgICAgICAgICAgICAgICAgICA8cGFwZXItaXRlbT5Ob25lPC9wYXBlci1pdGVtPgogICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgICAgPC9wYXBlci1saXN0Ym94PgogICAgICAgICAgICAgIDwvcGFwZXItZHJvcGRvd24tbWVudT4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiI+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGl0bGUiPgogICAgICAgICAgICAgICAgSG9zdHMgPHNwYW4gY2xhc3M9ImNvdW50ZXIiPihbW19hY3RpdmVIb3N0c0xpc3QubGVuZ3RoXV0pPC9zcGFuPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDxwYXBlci1kcm9wZG93bi1tZW51IG5vLWxhYmVsLWZsb2F0IG5vLWFuaW1hdGlvbnMgbm9pbmsgaG9yaXpvbnRhbC1hbGlnbj0ibGVmdCI+CiAgICAgICAgICAgICAgICA8cGFwZXItbGlzdGJveCBpZD0ibGlzdF9ib3hfaG9zdCIgc2xvdD0iZHJvcGRvd24tY29udGVudCIgc2VsZWN0ZWQ9Int7c2VsZWN0ZWRIb3N0SW5kZXh9fSI+CiAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpZD0iaG9zdF9pdGVtcyIgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19hY3RpdmVIb3N0c0xpc3RdXSI+CiAgICAgICAgICAgICAgICAgICAgPHBhcGVyLWl0ZW0+W1tfZ2V0SG9zdERpc3BsYXlOYW1lKGl0ZW0pXV08L3BhcGVyLWl0ZW0+CiAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8L3BhcGVyLWxpc3Rib3g+CiAgICAgICAgICAgICAgPC9wYXBlci1kcm9wZG93bi1tZW51PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIGRldGFpbHMtY29udGFpbmVyIj4KICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2lzQ3VycmVudFRvb2woX3Rvb2xJblNjb3BlLCAnb3BfcHJvZmlsZScpXV0iIHJlc3RhbXA9InRydWUiPgogICAgICAgICAgICAgICAgPHRmLW9wLWRldGFpbHMgaGlkZGVuPSJbWyFfYWN0aXZlT3BEZXRhaWxzXV0iIG5vZGU9IltbX2FjdGl2ZU9wRGV0YWlsc11dIj48L3RmLW9wLWRldGFpbHM+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2lzQ3VycmVudFRvb2woX3Rvb2xJblNjb3BlLCAnbWVtb3J5X3ZpZXdlcicpXV0iIHJlc3RhbXA9InRydWUiPgogICAgICAgICAgICAgICAgPGJ1ZmZlci1kZXRhaWxzIGhpZGRlbj0iW1shX2FjdGl2ZUJ1ZmZlckRldGFpbHNdXSIgbm9kZT0iW1tfYWN0aXZlQnVmZmVyRGV0YWlsc11dIj48L2J1ZmZlci1kZXRhaWxzPgogICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19pc0N1cnJlbnRUb29sKF90b29sSW5TY29wZSwgJ3BvZF92aWV3ZXInKV1dIiByZXN0YW1wPSJ0cnVlIj4KICAgICAgICAgICAgICAgIDxkZXRhaWxzLWNhcmQgaGlkZGVuPSJbWyFfYWN0aXZlUG9kRGV0YWlsc11dIiBub2Rlcz0iW1tfYWN0aXZlUG9kRGV0YWlsc11dIj48L2RldGFpbHMtY2FyZD4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImNlbnRlciIgc2xvdD0iY2VudGVyIj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaXNDdXJyZW50VG9vbChfdG9vbEluU2NvcGUsICd0cmFjZV92aWV3ZXInKV1dIiByZXN0YW1wPSJ0cnVlIj4KICAgICAgICAgICAgPGlmcmFtZSBpZD0idHZfaWZyYW1lIiBoZWlnaHQ9IjEwMCUiIHdpZHRoPSIxMDAlIiBzcmMkPSJbW190cmFjZURhdGFVcmxdXSI+CiAgICAgICAgICAgIDwvaWZyYW1lPgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaXNDdXJyZW50VG9vbChfdG9vbEluU2NvcGUsICdvcF9wcm9maWxlJyldXSIgcmVzdGFtcD0idHJ1ZSI+CiAgICAgICAgICAgIDx0Zi1vcC1wcm9maWxlIF9kYXRhPSJbW19vcFByb2ZpbGVEYXRhXV0iIGFjdGl2ZT0ie3tfYWN0aXZlT3BEZXRhaWxzfX0iPjwvdGYtb3AtcHJvZmlsZT4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2lzQ3VycmVudFRvb2woX3Rvb2xJblNjb3BlLCAnaW5wdXRfcGlwZWxpbmVfYW5hbHl6ZXInKV1dIiByZXN0YW1wPSJ0cnVlIj4KICAgICAgICAgICAgPGlucHV0LXBpcGVsaW5lLWFuYWx5emVyIF9kYXRhPSJbW19pbnB1dFBpcGVsaW5lRGF0YV1dIj48L2lucHV0LXBpcGVsaW5lLWFuYWx5emVyPgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaXNDdXJyZW50VG9vbChfdG9vbEluU2NvcGUsICdvdmVydmlld19wYWdlJyldXSIgcmVzdGFtcD0idHJ1ZSI+CiAgICAgICAgICAgIDxvdmVydmlldy1wYWdlIF9kYXRhPSJbW19vdmVydmlld1BhZ2VEYXRhXV0iPjwvb3ZlcnZpZXctcGFnZT4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2lzQ3VycmVudFRvb2woX3Rvb2xJblNjb3BlLCAncG9kX3ZpZXdlcicpXV0iIHJlc3RhbXA9InRydWUiPgogICAgICAgICAgICA8cG9kLXZpZXdlci1kYXNoYm9hcmQgZGF0YT0iW1tfcG9kVmlld2VyRGF0YV1dIiBhY3RpdmUtZGV0YWlscz0ie3tfYWN0aXZlUG9kRGV0YWlsc319Ij48L3BvZC12aWV3ZXItZGFzaGJvYXJkPgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaXNDdXJyZW50VG9vbChfdG9vbEluU2NvcGUsICdtZW1vcnlfdmlld2VyJyldXSIgcmVzdGFtcD0idHJ1ZSI+CiAgICAgICAgICAgIDxtZW1vcnktdmlld2VyLWRhc2hib2FyZCBfZGF0YT0iW1tfbWVtb3J5Vmlld2VyRGF0YV1dIiBhY3RpdmU9Int7X2FjdGl2ZUJ1ZmZlckRldGFpbHN9fSI+PC9tZW1vcnktdmlld2VyLWRhc2hib2FyZD4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2lzQ3VycmVudFRvb2woX3Rvb2xJblNjb3BlLCAnZ29vZ2xlX2NoYXJ0X2RlbW8nKV1dIiByZXN0YW1wPSJ0cnVlIj4KICAgICAgICAgICAgPGdvb2dsZS1jaGFydC1kZW1vIF9kYXRhPSJbW19nb29nbGVDaGFydERlbW9EYXRhXV0iPjwvZ29vZ2xlLWNoYXJ0LWRlbW8+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvZGl2PgogICAgICA8L3RmLWRhc2hib2FyZC1sYXlvdXQ+CiAgICA8L3RlbXBsYXRlPgogICAgPHN0eWxlIGluY2x1ZGU9ImRhc2hib2FyZC1zdHlsZSI+PC9zdHlsZT4KCiAgICA8c3R5bGU+CiAgICAgIC5jZW50ZXIgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIH0KICAgICAgaWZyYW1lIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgIH0KICAgICAgI3Byb2dyZXNzLWJhciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogNDBweDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgfQogICAgICAjcHJvZ3Jlc3MtbXNnIHsKICAgICAgICB3aWR0aDogNDAwcHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogNXB4OwogICAgICB9CiAgICAgIHBhcGVyLXByb2dyZXNzIHsKICAgICAgICB3aWR0aDogNDAwcHg7CiAgICAgICAgLS1wYXBlci1wcm9ncmVzcy1oZWlnaHQ6IDZweDsKICAgICAgICAtLXBhcGVyLXByb2dyZXNzLWFjdGl2ZS1jb2xvcjogI2YzOTEzZTsKICAgICAgfQogICAgICBwYXBlci1kcm9wZG93bi1tZW51IHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQogICAgICAuZGV0YWlscy1jb250YWluZXIgewogICAgICAgIHBhZGRpbmctcmlnaHQ6IDVweDsKICAgICAgfQogICAgICB0Zi1vcC1kZXRhaWxzLAogICAgICBidWZmZXItZGV0YWlscywKICAgICAgZGV0YWlscy1jYXJkIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtOwogICAgICB9CiAgICAgIC55ZWxsb3ctYnV0dG9uIHsKICAgICAgICBjb2xvcjogI2VlZmY0MTsKICAgICAgICB0ZXh0LXRyYW5zZm9ybTogbm9uZTsKICAgICAgfQogICAgICAuY2FwdHVyZS1zcGlubmVyIHsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDVweDsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CiAgPHNjcmlwdD4vL35+V0VCUEFUSH5+L3RmLXByb2ZpbGUtZGFzaGJvYXJkL3RmLXByb2ZpbGUtZGFzaGJvYXJkLmh0bWwuanMKKGZ1bmN0aW9uKCl7UG9seW1lcih7aXM6InRmLXByb2ZpbGUtZGFzaGJvYXJkIixwcm9wZXJ0aWVzOntfcmVxdWVzdE1hbmFnZXI6e3R5cGU6T2JqZWN0LHZhbHVlOigpPT5uZXcgUGsuUmVxdWVzdE1hbmFnZXJ9LF9pc0F0dGFjaGVkOkJvb2xlYW4sX2lzQXZhaWxhYmxlOkJvb2xlYW4sX2luaXRpYWxpemVkOkJvb2xlYW4sX2RhdGFOb3RGb3VuZDpCb29sZWFuLF9kYXRhc2V0czp7dHlwZTpBcnJheSxub3RpZnk6ITAsb2JzZXJ2ZXI6Il9kYXRhc2V0c0NoYW5nZWQifSxfYWN0aXZlVG9vbHNMaXN0Ont0eXBlOkFycmF5LGNvbXB1dGVkOiJfZ2V0QWN0aXZlVG9vbHNMaXN0KHNlbGVjdGVkRGF0YXNldEluZGV4LCBfZGF0YXNldHMpIixvYnNlcnZlcjoiX2FjdGl2ZVRvb2xzQ2hhbmdlZCJ9LF9hY3RpdmVIb3N0c0xpc3Q6e3R5cGU6QXJyYXksb2JzZXJ2ZXI6Il9hY3RpdmVIb3N0c0NoYW5nZWQifSxfaW5Db2xhYjp7dHlwZTpCb29sZWFuLHZhbHVlOigpPT4hISh3aW5kb3cuVEVOU09SQk9BUkRfRU5WfHwKe30pLklOX0NPTEFCLHJlYWRPbmx5OiEwfSxfdG9wTGV2ZWxTdGF0ZTp7dHlwZTpTdHJpbmcsY29tcHV0ZWQ6Il9jb21wdXRlVG9wTGV2ZWxTdGF0ZShfaW5Db2xhYiwgX2RhdGFOb3RGb3VuZCwgcHJvZ3Jlc3MpIixyZWFkT25seTohMH0scHJvZ3Jlc3M6e3R5cGU6T2JqZWN0LG5vdGlmeTohMH0sc2VsZWN0ZWREYXRhc2V0SW5kZXg6e3R5cGU6TnVtYmVyLG5vdGlmeTohMCx2YWx1ZTowfSxzZWxlY3RlZFRvb2xJbmRleDp7dHlwZTpOdW1iZXIsbm90aWZ5OiEwLHZhbHVlOjB9LHNlbGVjdGVkSG9zdEluZGV4Ont0eXBlOk51bWJlcixub3RpZnk6ITAsdmFsdWU6MH0sdHJhY2VWaWV3ZXJCYXNlVXJsOnt0eXBlOlN0cmluZyx2YWx1ZToidHJhY2Vfdmlld2VyX2luZGV4Lmh0bWwifSxfcHJvZmlsZXJTZXJ2aWNlQWRkcmVzczpTdHJpbmcsX3Byb2ZpbGVyU2VydmljZUFkZHJlc3NUeXBlOnt0eXBlOlN0cmluZyx2YWx1ZToiaXAtYWRkcmVzcyJ9LF9wcm9maWxlRHVyYXRpb246e3R5cGU6U3RyaW5nLAp2YWx1ZToiMTAwMCJ9LF9wcm9maWxlTnVtUmV0cnk6e3R5cGU6U3RyaW5nLHZhbHVlOiIzIn0sX3Byb2ZpbGVXb3JrZXJMaXN0Ont0eXBlOlN0cmluZ30sX3Byb2ZpbGVJbmNsdWRlRGF0YXNldE9wczp7dHlwZTpCb29sZWFuLHZhbHVlOiEwfSxfdHJhY2VEYXRhVXJsOnt0eXBlOlN0cmluZyx2YWx1ZToiIn0sX29wUHJvZmlsZURhdGE6e3R5cGU6T2JqZWN0fSxfaW5wdXRQaXBlbGluZURhdGE6e3R5cGU6T2JqZWN0fSxfb3ZlcnZpZXdQYWdlRGF0YTp7dHlwZTpPYmplY3R9LF9tZW1vcnlWaWV3ZXJEYXRhOnt0eXBlOk9iamVjdH0sX3BvZFZpZXdlckRhdGE6e3R5cGU6T2JqZWN0fSxfZ29vZ2xlQ2hhcnREZW1vRGF0YTp7dHlwZTpPYmplY3R9LF9zZWxlY3RlZERhdGFzZXROYW1lOnt0eXBlOlN0cmluZyxub3RpZnk6ITAsY29tcHV0ZWQ6Il9nZXRTZWxlY3RlZERhdGFzZXROYW1lKHNlbGVjdGVkRGF0YXNldEluZGV4LCBfZGF0YXNldHMpIn0sX3NlbGVjdGVkVG9vbE5hbWU6e3R5cGU6U3RyaW5nLApub3RpZnk6ITAsY29tcHV0ZWQ6Il9nZXRTZWxlY3RlZChzZWxlY3RlZFRvb2xJbmRleCwgX2FjdGl2ZVRvb2xzTGlzdCkifSxfc2VsZWN0ZWRIb3N0TmFtZTp7dHlwZTpTdHJpbmcsbm90aWZ5OiEwLGNvbXB1dGVkOiJfZ2V0U2VsZWN0ZWQoc2VsZWN0ZWRIb3N0SW5kZXgsIF9hY3RpdmVIb3N0c0xpc3QpIn0sX3Rvb2xJblNjb3BlOnt0eXBlOlN0cmluZ30sX2FjdGl2ZU9wRGV0YWlsczp7dHlwZTpPYmplY3QsdmFsdWU6KCk9Pnt9fSxfYWN0aXZlQnVmZmVyRGV0YWlsczp7dHlwZTpPYmplY3QsdmFsdWU6KCk9Pnt9fSxfYWN0aXZlUG9kRGV0YWlsczp7dHlwZTpBcnJheX0sX2NhcHR1cmluZ1Byb2ZpbGU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX19LHJlbG9hZDpmdW5jdGlvbigpe30scmVhZHk6ZnVuY3Rpb24oKXt9LG9ic2VydmVyczpbIl9tYXliZUluaXRpYWxpemVEYXNoYm9hcmQoX2lzQXR0YWNoZWQsIF9pc0F2YWlsYWJsZSkiLCJfbWF5YmVVcGRhdGVEYXRhKF9zZWxlY3RlZEhvc3ROYW1lKSIsCiJfbWF5YmVVcGRhdGVBY3RpdmVIb3N0cyhfc2VsZWN0ZWREYXRhc2V0TmFtZSwgX3NlbGVjdGVkVG9vbE5hbWUpIl0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLnNldCgiX2lzQXR0YWNoZWQiLCEwKTt0aGlzLl9yZXF1ZXN0TWFuYWdlci5yZXF1ZXN0KFBrLmdldFJvdXRlcigpLnBsdWdpbnNMaXN0aW5nKCkpLnRoZW4oYT0+eyJwcm9maWxlImluIGE/KHRoaXMuJC5pbml0aWFsRGlhbG9nLmNsb3NlRGlhbG9nKCksdGhpcy5zZXQoIl9pc0F2YWlsYWJsZSIsITApKToodGhpcy4kLmluaXRpYWxEaWFsb2cub3Blbk9sZFRlbnNvckZsb3dEaWFsb2coIjEuMTQiKSx0aGlzLnNldCgiX2lzQXZhaWxhYmxlIiwhMSkpfSl9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5zZXQoIl9pc0F0dGFjaGVkIiwhMSl9LF9vcGVuQ2FwdHVyZVByb2ZpbGVEaWFsb2c6ZnVuY3Rpb24oKXt0aGlzLiQuY2FwdHVyZVByb2ZpbGVEaWFsb2cub3BlbigpfSxfc2hvdWxkRGlzYWJsZUNhcHR1cmVQcm9maWxlQnV0dG9uOmZ1bmN0aW9uKGEsCmMsZCl7cmV0dXJuIWF8fCIiPT09Y3x8IiI9PT1kfSxfc2hvdWxkU2hvd1RwdU9wdGlvbnM6ZnVuY3Rpb24oYSl7cmV0dXJuInRwdS1uYW1lIj09YX0sX2NhcHR1cmVQcm9maWxlOmZ1bmN0aW9uKCl7dGhpcy5fY2FwdHVyaW5nUHJvZmlsZT0hMDtjb25zdCBhPVBrLmFkZFBhcmFtcyhQay5nZXRSb3V0ZXIoKS5wbHVnaW5Sb3V0ZSgicHJvZmlsZSIsIi9jYXB0dXJlX3Byb2ZpbGUiKSx7c2VydmljZV9hZGRyOnRoaXMuX3Byb2ZpbGVyU2VydmljZUFkZHJlc3MudHJpbSgpLGlzX3RwdV9uYW1lOiJ0cHUtbmFtZSI9PXRoaXMuX3Byb2ZpbGVyU2VydmljZUFkZHJlc3NUeXBlLGR1cmF0aW9uOnRoaXMuX3Byb2ZpbGVEdXJhdGlvbix3b3JrZXJfbGlzdDp0aGlzLl9wcm9maWxlV29ya2VyTGlzdCxpbmNsdWRlX2RhdGFzZXRfb3BzOnRoaXMuX3Byb2ZpbGVJbmNsdWRlRGF0YXNldE9wcyxudW1fcmV0cnk6dGhpcy5fcHJvZmlsZU51bVJldHJ5fSk7dGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdChhKS50aGVuKGM9Pgp7dGhpcy5fY2FwdHVyaW5nUHJvZmlsZT0hMTtudWxsIT1jLmVycm9yP3RoaXMuX3Nob3dUb2FzdCgiRmFpbGVkIHRvIGNhcHR1cmUgcHJvZmlsZTogIitjLmVycm9yKTp0aGlzLl9zaG93VG9hc3QoYy5yZXN1bHQpfSkuY2F0Y2goYz0+e3RoaXMuX2NhcHR1cmluZ1Byb2ZpbGU9ITE7dGhpcy5fc2hvd1RvYXN0KCJGYWlsZWQgdG8gY2FwdHVyZSBwcm9maWxlOiAiK2MpfSl9LF9zaG93VG9hc3QoYSl7dGhpcy4kLnRvYXN0LnRleHQ9YTt0aGlzLiQudG9hc3Qub3BlbigpfSxfbWF5YmVJbml0aWFsaXplRGFzaGJvYXJkOmZ1bmN0aW9uKGEsYyl7aWYoIXRoaXMuX2luaXRpYWxpemVkJiZhJiZjKXt0aGlzLl9pbml0aWFsaXplZD0hMDt2YXIgZD1Qay5nZXRSb3V0ZXIoKS5wbHVnaW5Sb3V0ZSgicHJvZmlsZSIsIi90b29scyIpO3RoaXMuc2V0KCJwcm9ncmVzcyIse3ZhbHVlOjAsbXNnOiIifSk7dmFyIGY9dGhpcyxnPXRmLnByb2ZpbGUudXRpbC5nZXRUcmFja2VyKHRoaXMpO3RmLnByb2ZpbGUudXRpbC5ydW5UYXNrKCJMb2FkaW5nIGRhdGFzZXRzIiwKMjAsKCk9Pntjb25zb2xlLmxvZygic3RhcnQgY291bnRpbmciKTtyZXR1cm4gZi5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdChkKX0sZykudGhlbihsPT50Zi5wcm9maWxlLnV0aWwucnVuVGFzaygiUHJvY2Vzc2luZyBkYXRhc2V0cyIsNzAsKCk9Pm5ldyBQcm9taXNlKGZ1bmN0aW9uKGspe2YuX3Byb2Nlc3NSdW5Ub1Rvb2wobCk7ayhudWxsKX0pLGcpKS50aGVuKCgpPT50Zi5wcm9maWxlLnV0aWwucnVuVGFzaygiRG9uZSIsMTAsKCk9Pm51bGwsZykpfX0sX3Byb2Nlc3NSdW5Ub1Rvb2w6ZnVuY3Rpb24oYSl7YT1fLm1hcChhLChjLGQpPT4oe25hbWU6ZCxhY3RpdmVUb29sczpjfSkpO2Euc29ydCgoYyxkKT0+MC1Pay5jb21wYXJlVGFnTmFtZXMoYy5uYW1lLGQubmFtZSkpO3RoaXMuc2V0KCJfZGF0YU5vdEZvdW5kIiwwPT09YS5sZW5ndGgpO3RoaXMuc2V0KCJfZGF0YXNldHMiLGEpfSxfZ2V0U2VsZWN0ZWQ6ZnVuY3Rpb24oYSxjKXtpZihudWxsIT1hKXJldHVybiBjJiYwPD1hJiZhPApjLmxlbmd0aD9jW2FdOm51bGx9LF9nZXRTZWxlY3RlZERhdGFzZXROYW1lOmZ1bmN0aW9uKGEsYyl7aWYobnVsbCE9YSlyZXR1cm4gYyYmMDw9YSYmYTxjLmxlbmd0aD9jW2FdLm5hbWU6IiJ9LF9nZXRBY3RpdmVUb29sc0xpc3Q6ZnVuY3Rpb24oYSxjKXtpZihudWxsIT1hKXJldHVybiBjJiYwPD1hJiZhPGMubGVuZ3RoPyh0aGlzLnNlbGVjdGVkVG9vbEluZGV4PTAsY1thXS5hY3RpdmVUb29scyk6W119LF9tYXliZVVwZGF0ZURhdGE6ZnVuY3Rpb24oYSl7aWYobnVsbCE9YSl7dmFyIGM9dGhpcy5fc2VsZWN0ZWREYXRhc2V0TmFtZSxkPXRoaXMuX3NlbGVjdGVkVG9vbE5hbWU7aWYobnVsbCE9YyYmbnVsbCE9ZClpZih0aGlzLl90b29sSW5TY29wZT0idW5kZWZpbmVkIixkLnN0YXJ0c1dpdGgoInRyYWNlX3ZpZXdlciIpKXt2YXIgZj1Qay5hZGRQYXJhbXMoUGsuZ2V0Um91dGVyKCkucGx1Z2luUm91dGUoInByb2ZpbGUiLCIvZGF0YSIpLHt0YWc6ZCxydW46Yyxob3N0OmF9KSxnPWQuZW5kc1dpdGgoIkAiKTsKdGhpcy5fdHJhY2VEYXRhVXJsPXRoaXMudHJhY2VWaWV3ZXJCYXNlVXJsKyI/dHJhY2VfZGF0YV91cmxceDNkIitlbmNvZGVVUklDb21wb25lbnQoZikrIlx4MjZpc19zdHJlYW1pbmdceDNkIitnO3RoaXMuX3Rvb2xJblNjb3BlPSJ0cmFjZV92aWV3ZXIifWVsc2V7dGhpcy5zZXQoInByb2dyZXNzIix7dmFsdWU6MCxtc2c6IiJ9KTtsZXQgbD10aGlzLGs9dGYucHJvZmlsZS51dGlsLmdldFRyYWNrZXIodGhpcyk7dGYucHJvZmlsZS51dGlsLnJ1blRhc2soIlJlYWRpbmcgIitkKyIgdG9vbCBkYXRhIiwyMCwoKT0+bC5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdChQay5hZGRQYXJhbXMoUGsuZ2V0Um91dGVyKCkucGx1Z2luUm91dGUoInByb2ZpbGUiLCIvZGF0YSIpLHt0YWc6ZCxob3N0OmEscnVuOmN9KSksaykuY2F0Y2goKCk9Pnt9KS50aGVuKG09PnRmLnByb2ZpbGUudXRpbC5ydW5UYXNrKCJEb25lIiw4MCwoKT0+e2wuX3VwZGF0ZVRvb2xEYXRhKGQsbSl9LGspKX19fSxfdXBkYXRlVG9vbERhdGE6ZnVuY3Rpb24oYSwKYyl7c3dpdGNoKGEpe2Nhc2UgIm9wX3Byb2ZpbGUiOnRoaXMuX29wUHJvZmlsZURhdGE9Yzt0aGlzLl90b29sSW5TY29wZT0ib3BfcHJvZmlsZSI7YnJlYWs7Y2FzZSAiaW5wdXRfcGlwZWxpbmVfYW5hbHl6ZXIiOnRoaXMuX2lucHV0UGlwZWxpbmVEYXRhPWM7dGhpcy5fdG9vbEluU2NvcGU9ImlucHV0X3BpcGVsaW5lX2FuYWx5emVyIjticmVhaztjYXNlICJvdmVydmlld19wYWdlIjp0aGlzLl9vdmVydmlld1BhZ2VEYXRhPWM7dGhpcy5fdG9vbEluU2NvcGU9Im92ZXJ2aWV3X3BhZ2UiO2JyZWFrO2Nhc2UgIm1lbW9yeV92aWV3ZXIiOnRoaXMuX21lbW9yeVZpZXdlckRhdGE9Yzt0aGlzLl90b29sSW5TY29wZT0ibWVtb3J5X3ZpZXdlciI7YnJlYWs7Y2FzZSAicG9kX3ZpZXdlciI6dGhpcy5fcG9kVmlld2VyRGF0YT1jO3RoaXMuX3Rvb2xJblNjb3BlPSJwb2Rfdmlld2VyIjticmVhaztjYXNlICJnb29nbGVfY2hhcnRfZGVtbyI6dGhpcy5fZ29vZ2xlQ2hhcnREZW1vRGF0YT1jLHRoaXMuX3Rvb2xJblNjb3BlPQoiZ29vZ2xlX2NoYXJ0X2RlbW8ifX0sX21heWJlVXBkYXRlQWN0aXZlSG9zdHM6ZnVuY3Rpb24oYSxjKXtpZihudWxsPT1hfHxudWxsPT1jKXJldHVybiBudWxsO3RoaXMuX2FjdGl2ZUhvc3RzTGlzdD1bXTthPVBrLmFkZFBhcmFtcyhQay5nZXRSb3V0ZXIoKS5wbHVnaW5Sb3V0ZSgicHJvZmlsZSIsIi9ob3N0cyIpLHt0YWc6YyxydW46YX0pO3RoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3QoYSkudGhlbihkPT57dGhpcy5zZXQoIl9hY3RpdmVIb3N0c0xpc3QiLGQuc29ydCgoZixnKT0+T2suY29tcGFyZVRhZ05hbWVzKGYsZykpKX0pfSxfZGF0YXNldHNDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5fZGF0YXNldHMmJih0aGlzLnNlbGVjdGVkRGF0YXNldEluZGV4PTApfSxfYWN0aXZlVG9vbHNDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5fYWN0aXZlVG9vbHNMaXN0JiZ0aGlzLmFzeW5jKGZ1bmN0aW9uKCl7dGhpcy5zZXQoInNlbGVjdGVkVG9vbEluZGV4IiwtMSk7dGhpcy5zZXQoInNlbGVjdGVkVG9vbEluZGV4IiwKMCl9LmJpbmQodGhpcykpfSxfYWN0aXZlSG9zdHNDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5fYWN0aXZlSG9zdHNMaXN0JiZ0aGlzLmFzeW5jKGZ1bmN0aW9uKCl7dGhpcy5zZXQoInNlbGVjdGVkSG9zdEluZGV4IiwtMSk7dGhpcy5zZXQoInNlbGVjdGVkSG9zdEluZGV4IiwwKX0uYmluZCh0aGlzKSl9LF9pc0N1cnJlbnRUb29sOmZ1bmN0aW9uKGEsYyl7cmV0dXJuIGE9PWN9LF9oYXNBY3RpdmVUb29sczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hY3RpdmVUb29sc0xpc3QmJjA8dGhpcy5fYWN0aXZlVG9vbHNMaXN0Lmxlbmd0aD8hMDohMX0sX2dldEhvc3REaXNwbGF5TmFtZTpmdW5jdGlvbihhKXtyZXR1cm4gbnVsbD09YT8iIjoiIj09YT8iZGVmYXVsdCI6YS5zbGljZSgwLC0xKX0sX2NvbXB1dGVUb3BMZXZlbFN0YXRlOmZ1bmN0aW9uKGEsYyxkKXtyZXR1cm4gYT8iSU5fQ09MQUIiOmM/IkRBVEFfTk9UX0ZPVU5EIjohZHx8MTAwPmQudmFsdWU/IkxPQURJTkciOiJBQ1RJVkUifSwKX2lzU3RhdGU6ZnVuY3Rpb24oYSxjKXtyZXR1cm4gYT09PWN9fSk7JGwucmVnaXN0ZXJEYXNoYm9hcmQoe3BsdWdpbjoicHJvZmlsZSIsZWxlbWVudE5hbWU6InRmLXByb2ZpbGUtZGFzaGJvYXJkIixpc1JlbG9hZERpc2FibGVkOiEwfSl9KSgpOwo8L3NjcmlwdD4KPC9kb20tbW9kdWxlPgoKCgoKCgoKCgoKCgoKCgo8ZG9tLW1vZHVsZSBpZD0idGYtYmVob2xkZXItdmlkZW8iPgogIDx0ZW1wbGF0ZT4KICAgIDxkaXYgaWQ9ImNvbnRhaW5lciI+CiAgICAgIDxpbWcgaWQ9InZpZGVvIiBzcmMkPSJbW19pbWFnZVVSTF1dIj4KICAgIDwvZGl2PgoKICAgIDxzdHlsZT4KICAgICAgaW1nIHsKICAgICAgICBpbWFnZS1yZW5kZXJpbmc6IHBpeGVsYXRlZDsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDEwcHg7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KCiAgPHNjcmlwdD4vL35+V0VCUEFUSH5+L3RmLWJlaG9sZGVyLWRhc2hib2FyZC90Zi1iZWhvbGRlci12aWRlby5odG1sLmpzCihmdW5jdGlvbigpe2NvbnN0IGE9UGsuZ2V0Um91dGVyKCkucGx1Z2luUm91dGUoImJlaG9sZGVyIiwiL2JlaG9sZGVyLWZyYW1lIiksYz1Qay5nZXRSb3V0ZXIoKS5wbHVnaW5Sb3V0ZSgiYmVob2xkZXIiLCIvcGluZyIpO1BvbHltZXIoe2lzOiJ0Zi1iZWhvbGRlci12aWRlbyIscHJvcGVydGllczp7ZnBzOnt0eXBlOk51bWJlcix2YWx1ZToxMCxvYnNlcnZlcjoiX2Zwc0NoYW5nZWQifSxwaW5nU2xlZXA6e3R5cGU6TnVtYmVyLHZhbHVlOjFFM30seGhyVGltZW91dDp7dHlwZTpOdW1iZXIsdmFsdWU6MjUwMH0sX2ltYWdlVVJMOnt0eXBlOlN0cmluZyx2YWx1ZToiZGF0YTppbWFnZS9naWY7YmFzZTY0LFIwbEdPRGxoQVFBQkFBRC9BQ3dBQUFBQUFRQUJBQUFDQURzXHgzZCJ9LF94aHI6T2JqZWN0LF90aW1lcjpOdW1iZXIsX2lzRGVhZDpCb29sZWFufSxhdHRhY2hlZCgpe3RoaXMuc2V0KCJfaW1hZ2VVUkwiLGEpO3RoaXMuX3BpbmcoKX0sZGV0YWNoZWQoKXt0aGlzLl9jbGVhcigpOwp0aGlzLnNldCgiX2ltYWdlVVJMIiwiZGF0YTppbWFnZS9naWY7YmFzZTY0LFIwbEdPRGxoQVFBQkFBRC9BQ3dBQUFBQUFRQUJBQUFDQURzXHgzZCIpfSxfcGluZygpe3RoaXMuX2NsZWFyKCk7dGhpcy5feGhyPW5ldyBYTUxIdHRwUmVxdWVzdDt0aGlzLl94aHIub3BlbigiR0VUIixjLCEwKTt0aGlzLl94aHIudGltZW91dD10aGlzLnhoclRpbWVvdXQ7dGhpcy5feGhyLm9ubG9hZD10aGlzLl9vblBpbmdMb2FkLmJpbmQodGhpcyk7dGhpcy5feGhyLm9uZXJyb3I9dGhpcy5fb25QaW5nLmJpbmQodGhpcywhMSx0aGlzLnBpbmdTbGVlcCk7dGhpcy5feGhyLm9udGltZW91dD10aGlzLl9vblBpbmcuYmluZCh0aGlzLCExLDEpO3RoaXMuX3hoci5zZW5kKG51bGwpfSxfb25QaW5nTG9hZCgpe2lmKDIwMD09dGhpcy5feGhyLnN0YXR1cyl7Y29uc3QgZD1KU09OLnBhcnNlKHRoaXMuX3hoci5yZXNwb25zZVRleHQpO3RoaXMuX29uUGluZygiYWxpdmUiPT1kLnN0YXR1cyx0aGlzLnBpbmdTbGVlcCl9ZWxzZSB0aGlzLl9vblBpbmcoITEsCnRoaXMucGluZ1NsZWVwKX0sX29uUGluZyhkLGYpe2QmJnRoaXMuX2lzRGVhZCYmdGhpcy5zZXQoIl9pbWFnZVVSTCIsYSsiP3RceDNkIisobmV3IERhdGUpLmdldFRpbWUoKSk7dGhpcy5faXNEZWFkPSFkO3RoaXMuX3RpbWVyPXdpbmRvdy5zZXRUaW1lb3V0KCgpPT50aGlzLl9waW5nKCksZil9LF9jbGVhcigpe3RoaXMuX3RpbWVyJiYod2luZG93LmNsZWFyVGltZW91dCh0aGlzLl90aW1lciksdGhpcy5fdGltZXI9bnVsbCk7dGhpcy5feGhyJiYodGhpcy5feGhyLnJlYWR5U3RhdGU8WE1MSHR0cFJlcXVlc3QuRE9ORSYmdGhpcy5feGhyLmFib3J0KCksdGhpcy5feGhyPW51bGwpfSxfZnBzQ2hhbmdlZChkLGYpezA9PWQ/dGhpcy5fY2xlYXIoKTowPT1mJiZ0aGlzLl9waW5nKCl9fSl9KSgpOwo8L3NjcmlwdD4KPC9kb20tbW9kdWxlPgoKCgoKPGRvbS1tb2R1bGUgaWQ9InRmLWJlaG9sZGVyLWluZm8iPgogIDx0ZW1wbGF0ZT4KICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX2l0ZW1zXV0iPgogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLWluZm8iIHN0eWxlJD0iaGVpZ2h0OiBbW2l0ZW0uaGVpZ2h0XV1weCI+CiAgICAgICAgPHVsPgogICAgICAgICAgPGxpPltbaXRlbS5uYW1lXV08L2xpPgogICAgICAgICAgPGxpPnNoYXBlOiBbW2l0ZW0uc2hhcGVdXTwvbGk+CiAgICAgICAgICA8bGk+cmFuZ2U6IFsgW1tpdGVtLm1pbl1dLCBbW2l0ZW0ubWF4XV0gXTwvbGk+CiAgICAgICAgICA8bGk+bWVhbjogW1tpdGVtLm1lYW5dXTwvbGk+CiAgICAgICAgPC91bD4KICAgICAgPC9kaXY+CiAgICA8L3RlbXBsYXRlPgoKICAgIDxzdHlsZT4KICAgICAgLnNlY3Rpb24taW5mbyB7CiAgICAgICAgbWFyZ2luOiAwIDAgNXB4IDA7CiAgICAgIH0KICAgICAgLnNlY3Rpb24taW5mbyB1bCB7CiAgICAgICAgbGlzdC1zdHlsZS10eXBlOiBub25lOwogICAgICAgIG1hcmdpbjogMDsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDEwcHg7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KCiAgPHNjcmlwdD4vL35+V0VCUEFUSH5+L3RmLWJlaG9sZGVyLWRhc2hib2FyZC90Zi1iZWhvbGRlci1pbmZvLmh0bWwuanMKKGZ1bmN0aW9uKCl7Y29uc3QgYT1Qay5nZXRSb3V0ZXIoKS5wbHVnaW5Sb3V0ZSgiYmVob2xkZXIiLCIvc2VjdGlvbi1pbmZvIik7UG9seW1lcih7aXM6InRmLWJlaG9sZGVyLWluZm8iLHByb3BlcnRpZXM6e2Zwczp7dHlwZTpOdW1iZXIsdmFsdWU6MTAsb2JzZXJ2ZXI6Il9mcHNDaGFuZ2VkIn0seGhyVGltZW91dDp7dHlwZTpOdW1iZXIsdmFsdWU6MUU0fSxfaXRlbXM6e3R5cGU6QXJyYXksdmFsdWU6KCk9Plt7bmFtZToiTG9hZGluZy4uLiJ9XX0sX3hocjpPYmplY3QsX3RpbWVyOk51bWJlcn0sYXR0YWNoZWQoKXt0aGlzLl9sb2FkKCl9LGRldGFjaGVkKCl7dGhpcy5fY2xlYXIoKX0sX2xvYWQoKXt0aGlzLl9jbGVhcigpO3RoaXMuX3hocj1uZXcgWE1MSHR0cFJlcXVlc3Q7dGhpcy5feGhyLm9wZW4oIkdFVCIsYSwhMCk7dGhpcy5feGhyLnRpbWVvdXQ9dGhpcy54aHJUaW1lb3V0O3RoaXMuX3hoci5vbmxvYWQ9dGhpcy5fb25Mb2FkLmJpbmQodGhpcyk7dGhpcy5feGhyLm9uZXJyb3I9CnRoaXMuX3JldHJ5LmJpbmQodGhpcyx0aGlzLl9nZXRTbGVlcCgpKTt0aGlzLl94aHIub250aW1lb3V0PXRoaXMuX3JldHJ5LmJpbmQodGhpcywxKTt0aGlzLl94aHIuc2VuZChudWxsKX0sX29uTG9hZCgpe2lmKDIwMD09dGhpcy5feGhyLnN0YXR1cyl7Y29uc3QgYz1KU09OLnBhcnNlKHRoaXMuX3hoci5yZXNwb25zZVRleHQpO2NvbnNvbGUuYXNzZXJ0KEFycmF5LmlzQXJyYXkoYyksIkV4cGVjdGVkIHJlc3BvbnNlIHRvIGJlIGluIGFuIGFycmF5Iik7dGhpcy5faXRlbXM9Y310aGlzLl9yZXRyeSh0aGlzLl9nZXRTbGVlcCgpKX0sX3JldHJ5KGMpe3RoaXMuX3RpbWVyPXdpbmRvdy5zZXRUaW1lb3V0KHRoaXMuX2xvYWQuYmluZCh0aGlzKSxjKX0sX2dldFNsZWVwKCl7cmV0dXJuIDFFMy8oMD09PXRoaXMuZnBzPzE6dGhpcy5mcHMpfSxfY2xlYXIoKXt0aGlzLl90aW1lciYmKHdpbmRvdy5jbGVhclRpbWVvdXQodGhpcy5fdGltZXIpLHRoaXMuX3RpbWVyPW51bGwpO3RoaXMuX3hociYmCih0aGlzLl94aHIucmVhZHlTdGF0ZTxYTUxIdHRwUmVxdWVzdC5ET05FJiZ0aGlzLl94aHIuYWJvcnQoKSx0aGlzLl94aHI9bnVsbCl9LF9mcHNDaGFuZ2VkKGMsZCl7MD09Yz90aGlzLl9jbGVhcigpOjA9PWQmJnRoaXMuX2xvYWQoKX19KX0pKCk7Cjwvc2NyaXB0Pgo8L2RvbS1tb2R1bGU+CgoKPGRvbS1tb2R1bGUgaWQ9InRmLWJlaG9sZGVyLWRhc2hib2FyZCI+CiAgPHRlbXBsYXRlPgogICAgPHRmLXBsdWdpbi1kaWFsb2cgaWQ9ImluaXRpYWxEaWFsb2ciPjwvdGYtcGx1Z2luLWRpYWxvZz4KICAgIDx0Zi1kYXNoYm9hcmQtbGF5b3V0PgogICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyIiBzbG90PSJzaWRlYmFyIj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2NvbnRyb2xzX2Rpc2FibGVkXV0iPgogICAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIj4KICAgICAgICAgICAgPHAgY2xhc3M9ImNvbnRyb2xzLWRpc2FibGVkLW1lc3NhZ2UiPgogICAgICAgICAgICAgIENvbnRyb2xzIGRpc2FibGVkOiBkaXJlY3RvcnkgaXMgbm90IHdyaXRlYWJsZS4KICAgICAgICAgICAgCiAgICAgICAgICAgIDxwIGNsYXNzPSJkaXNjbGFpbWVyIj4KICAgICAgICAgICAgICBCZWhvbGRlciByZXF1aXJlcyB3cml0ZSBhY2Nlc3MgdG8gdGhlIGxvZyBkaXJlY3RvcnkgaW4gb3JkZXIgdG8KICAgICAgICAgICAgICBjb21tdW5pY2F0ZSB2aXN1YWxpemF0aW9uIGNoYW5nZXMgdG8gdGhlIDxjb2RlPkJlaG9sZGVyPC9jb2RlPgogICAgICAgICAgICAgIGluc3RhbmNlIGluIHlvdXIgbW9kZWwuCiAgICAgICAgICAgIAogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24iPgogICAgICAgICAgPGgzPlZhbHVlczwvaDM+CiAgICAgICAgICA8cGFwZXItcmFkaW8tZ3JvdXAgaWQ9InZhbHVlc1NlbGVjdG9yIiBzZWxlY3RlZD0ie3tfdmFsdWVzfX0iPgogICAgICAgICAgICA8cGFwZXItcmFkaW8tYnV0dG9uIG5hbWU9InRyYWluYWJsZV92YXJpYWJsZXMiIGRpc2FibGVkPSJbW19jb250cm9sc19kaXNhYmxlZF1dIj4KICAgICAgICAgICAgICA8cHJlPnRmLnRyYWluYWJsZV92YXJpYWJsZXMoKTwvcHJlPgogICAgICAgICAgICA8L3BhcGVyLXJhZGlvLWJ1dHRvbj4KICAgICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbiBpZD0ib3B0aW9uLWFycmF5cyIgbmFtZT0iYXJyYXlzIiBkaXNhYmxlZD0iW1tfY29udHJvbHNfZGlzYWJsZWRdXSI+CiAgICAgICAgICAgICAgPHByZT5iLnVwZGF0ZShhcnJheXM9W05QX0FSUkFZU10pPC9wcmU+CiAgICAgICAgICAgIDwvcGFwZXItcmFkaW8tYnV0dG9uPgogICAgICAgICAgICA8cGFwZXItcmFkaW8tYnV0dG9uIGlkPSJvcHRpb24tZnJhbWVzIiBuYW1lPSJmcmFtZXMiIGRpc2FibGVkPSJbW19jb250cm9sc19kaXNhYmxlZF1dIj4KICAgICAgICAgICAgICA8cHJlPmIudXBkYXRlKGZyYW1lPU5QX0FSUkFZKTwvcHJlPgogICAgICAgICAgICA8L3BhcGVyLXJhZGlvLWJ1dHRvbj4KICAgICAgICAgIDwvcGFwZXItcmFkaW8tZ3JvdXA+CgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW192YWx1ZXNOb3RGcmFtZShfdmFsdWVzKV1dIj4KICAgICAgICAgICAgPHBhcGVyLWNoZWNrYm94IGNoZWNrZWQ9Int7X3Nob3dBbGx9fSIgZGlzYWJsZWQ9IltbX2NvbnRyb2xzX2Rpc2FibGVkXV0iPlNob3cgYWxsIGRhdGEgPGk+KGNhbiBiZSByZXNvdXJjZSBpbnRlbnNpdmUpPC9pPjwvcGFwZXItY2hlY2tib3g+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvZGl2PgoKICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX3ZhbHVlc05vdEZyYW1lKF92YWx1ZXMpXV0iPgogICAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIj4KICAgICAgICAgICAgPGgzPk1vZGU8L2gzPgogICAgICAgICAgICA8cGFwZXItcmFkaW8tZ3JvdXAgaWQ9Im1vZGVTZWxlY3RvciIgc2VsZWN0ZWQ9Int7X21vZGV9fSI+CiAgICAgICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbiBuYW1lPSJjdXJyZW50IiBkaXNhYmxlZD0iW1tfY29udHJvbHNfZGlzYWJsZWRdXSI+CiAgICAgICAgICAgICAgICBjdXJyZW50IHZhbHVlcwogICAgICAgICAgICAgIDwvcGFwZXItcmFkaW8tYnV0dG9uPgogICAgICAgICAgICAgIDxwYXBlci1yYWRpby1idXR0b24gbmFtZT0idmFyaWFuY2UiIGRpc2FibGVkPSJbW19jb250cm9sc19kaXNhYmxlZF1dIj4KICAgICAgICAgICAgICAgIHZhcmlhbmNlIG92ZXIgdHJhaW4gc3RlcHMKICAgICAgICAgICAgICA8L3BhcGVyLXJhZGlvLWJ1dHRvbj4KICAgICAgICAgICAgPC9wYXBlci1yYWRpby1ncm91cD4KICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW192YXJpYW5jZVNlbGVjdGVkKF9tb2RlKV1dIj4KICAgICAgICAgICAgICA8aDQ+VmFyaWFuY2UgdGltZXN0ZXBzOiB7e193aW5kb3dTaXplfX08L2g0PgogICAgICAgICAgICAgIDxwYXBlci1zbGlkZXIgaWQ9IndpbmRvd1NsaWRlciIgdmFsdWU9Int7X3dpbmRvd1NpemV9fSIgdHlwZT0ibnVtYmVyIiBzdGVwPSIxIiBtaW49IjIiIG1heD0iMjAiIHBpbj0idHJ1ZSIgZGlzYWJsZWQ9IltbX2NvbnRyb2xzX2Rpc2FibGVkXV0iPgogICAgICAgICAgICAgIDwvcGFwZXItc2xpZGVyPgogICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPC9kaXY+CgogICAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIj4KICAgICAgICAgICAgPGgzPkltYWdlIHNjYWxpbmc8L2gzPgogICAgICAgICAgICA8cGFwZXItcmFkaW8tZ3JvdXAgaWQ9InNjYWxpbmdTZWxlY3RvciIgc2VsZWN0ZWQ9Int7X3NjYWxpbmd9fSI+CiAgICAgICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbiBpZD0ib3B0aW9uLWxheWVyIiBuYW1lPSJsYXllciIgZGlzYWJsZWQ9IltbX2NvbnRyb2xzX2Rpc2FibGVkXV0iPgogICAgICAgICAgICAgICAgcGVyIHNlY3Rpb24KICAgICAgICAgICAgICA8L3BhcGVyLXJhZGlvLWJ1dHRvbj4KICAgICAgICAgICAgICA8cGFwZXItdG9vbHRpcCBmb3I9Im9wdGlvbi1sYXllciIgcG9zaXRpb249InJpZ2h0Ij4KICAgICAgICAgICAgICAgIEJsYWNrIGlzIHRoZSBsb3dlc3QgdmFsdWUgaW4gdGhhdCBzZWN0aW9uLCB3aGl0ZSBpcyB0aGF0IGxhcmdlc3QKICAgICAgICAgICAgICAgIHZhbHVlIGluIHRoYXQgc2VjdGlvbi4KICAgICAgICAgICAgICA8L3BhcGVyLXRvb2x0aXA+CgogICAgICAgICAgICAgIDxwYXBlci1yYWRpby1idXR0b24gaWQ9Im9wdGlvbi1uZXR3b3JrIiBuYW1lPSJuZXR3b3JrIiBkaXNhYmxlZD0iW1tfY29udHJvbHNfZGlzYWJsZWRdXSI+CiAgICAgICAgICAgICAgICBhbGwgc2VjdGlvbnMKICAgICAgICAgICAgICA8L3BhcGVyLXJhZGlvLWJ1dHRvbj4KICAgICAgICAgICAgICA8cGFwZXItdG9vbHRpcCBmb3I9Im9wdGlvbi1uZXR3b3JrIiBwb3NpdGlvbj0icmlnaHQiPgogICAgICAgICAgICAgICAgQmxhY2sgaXMgdGhlIHNtYWxsZXN0IHZhbHVlIGluIGFsbCBzZWN0aW9ucywgd2hpdGUgaXMgdGhlCiAgICAgICAgICAgICAgICBsYXJnZXN0IHZhbHVlIGluIGFsbCBzZWN0aW9ucy4KICAgICAgICAgICAgICA8L3BhcGVyLXRvb2x0aXA+CiAgICAgICAgICAgIDwvcGFwZXItcmFkaW8tZ3JvdXA+CgogICAgICAgICAgICA8ZGl2IGlkPSJjb2xvcm1hcC1zZWxlY3Rpb24iPgogICAgICAgICAgICAgIDxkaXYgaWQ9ImNvbG9ybWFwLXNlbGVjdGlvbi1sYWJlbCI+Q29sb3JtYXA6PC9kaXY+CiAgICAgICAgICAgICAgPHBhcGVyLWRyb3Bkb3duLW1lbnUgbm8tbGFiZWwtZmxvYXQgc2VsZWN0ZWQtaXRlbS1sYWJlbD0ie3tfY29sb3JtYXB9fSIgZGlzYWJsZWQ9IltbX2NvbnRyb2xzX2Rpc2FibGVkXV0iPgogICAgICAgICAgICAgICAgPHBhcGVyLWxpc3Rib3ggc2xvdD0iZHJvcGRvd24tY29udGVudCIgc2VsZWN0ZWQ9IjAiPgogICAgICAgICAgICAgICAgICA8cGFwZXItaXRlbT5tYWdtYTwvcGFwZXItaXRlbT4KICAgICAgICAgICAgICAgICAgPHBhcGVyLWl0ZW0+aW5mZXJubzwvcGFwZXItaXRlbT4KICAgICAgICAgICAgICAgICAgPHBhcGVyLWl0ZW0+cGxhc21hPC9wYXBlci1pdGVtPgogICAgICAgICAgICAgICAgICA8cGFwZXItaXRlbT52aXJpZGlzPC9wYXBlci1pdGVtPgogICAgICAgICAgICAgICAgICA8cGFwZXItaXRlbT5ncmF5c2NhbGU8L3BhcGVyLWl0ZW0+CiAgICAgICAgICAgICAgICA8L3BhcGVyLWxpc3Rib3g+CiAgICAgICAgICAgICAgPC9wYXBlci1kcm9wZG93bi1tZW51PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvdGVtcGxhdGU+CgogICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiI+CiAgICAgICAgICA8aDM+VXBkYXRlcyBwZXIgc2Vjb25kOiB7e19GUFN9fTwvaDM+CiAgICAgICAgICA8cGFwZXItc2xpZGVyIGlkPSJGUFNTbGlkZXIiIHZhbHVlPSJ7e19GUFN9fSIgdHlwZT0ibnVtYmVyIiBzdGVwPSIxIiBtaW49IjAiIG1heD0iMzAiIHBpbj0idHJ1ZSIgZGlzYWJsZWQ9IltbX2NvbnRyb2xzX2Rpc2FibGVkXV0iPgogICAgICAgICAgPC9wYXBlci1zbGlkZXI+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiI+CiAgICAgICAgICA8ZGl2PgogICAgICAgICAgICA8cGFwZXItYnV0dG9uIGNsYXNzPSJ4LWJ1dHRvbiIgaWQ9InJlY29yZF9idXR0b24iIG9uLXRhcD0iX3RvZ2dsZVJlY29yZCIgZGlzYWJsZWQ9IltbX2NvbnRyb2xzX2Rpc2FibGVkXV0iPgogICAgICAgICAgICAgIFtbX3JlY29yZFRleHRdXQogICAgICAgICAgICA8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24iPgogICAgICAgICAgPHAgY2xhc3M9ImRpc2NsYWltZXIiPgogICAgICAgICAgICBOb3RlOiBCZWhvbGRlciBjdXJyZW50bHkgb25seSB3b3JrcyB3ZWxsIG9uIGxvY2FsIGZpbGUgc3lzdGVtcy4KICAgICAgICAgIAogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY2VudGVyIiBzbG90PSJjZW50ZXIiPgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shX2lzX2FjdGl2ZV1dIj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im5vLWRhdGEtd2FybmluZyI+CiAgICAgICAgICAgIDxoMz5ObyBCZWhvbGRlciBkYXRhIHdhcyBmb3VuZC48L2gzPgoKICAgICAgICAgICAgPHA+UHJvYmFibGUgY2F1c2VzOgogICAgICAgICAgICA8dWw+CiAgICAgICAgICAgICAgPGxpPllvdXIgc2NyaXB0IGlzbid0IHJ1bm5pbmcuPC9saT4KICAgICAgICAgICAgICA8bGk+WW91IGFyZW4ndCBjYWxsaW5nIDxjb2RlPmJlaG9sZGVyLnVwZGF0ZSgpPC9jb2RlPi48L2xpPgogICAgICAgICAgICA8L3VsPgoKICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgVG8gdXNlIEJlaG9sZGVyLCBpbXBvcnQgYW5kIGluc3RhbnRpYXRlIHRoZQogICAgICAgICAgICAgIDxjb2RlPkJlaG9sZGVyPC9jb2RlPiBjbGFzcywgYW5kIGNhbGwgaXRzCiAgICAgICAgICAgICAgPGNvZGU+dXBkYXRlPC9jb2RlPiBtZXRob2Qgd2l0aCBhIDxjb2RlPlNlc3Npb248L2NvZGU+IGFyZ3VtZW50CiAgICAgICAgICAgICAgYWZ0ZXIgZXZlcnkgdHJhaW4gc3RlcDoKICAgICAgICAgICAgCgogICAgICAgICAgICA8cHJlPmZyb20gdGVuc29yYm9hcmQucGx1Z2lucy5iZWhvbGRlciBpbXBvcnQgQmVob2xkZXIKYmVob2xkZXIgPSBCZWhvbGRlcihMT0dfRElSRUNUT1JZKQoKIyBpbnNpZGUgdHJhaW4gbG9vcApiZWhvbGRlci51cGRhdGUoCiAgc2Vzc2lvbj1zZXNzLAogIGFycmF5cz1saXN0X29mX25wX2FycmF5cywgICMgb3B0aW9uYWwgYXJndW1lbnQKICBmcmFtZT10d29fZGltZW5zaW9uYWxfbnBfYXJyYXksICAjIG9wdGlvbmFsIGFyZ3VtZW50Cik8L3ByZT4KICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgSWYgdXNpbmcgPGNvZGU+dGYudHJhaW4uTW9uaXRvcmVkU2Vzc2lvbjwvY29kZT4sIHlvdSBjYW4gdXNlCiAgICAgICAgICAgICAgPGNvZGU+QmVob2xkZXJIb29rPC9jb2RlPjoKICAgICAgICAgICAgCgogICAgICAgICAgICA8cHJlPmZyb20gdGVuc29yYm9hcmQucGx1Z2lucy5iZWhvbGRlciBpbXBvcnQgQmVob2xkZXJIb29rCmJlaG9sZGVyX2hvb2sgPSBCZWhvbGRlckhvb2soTE9HX0RJUkVDVE9SWSkKd2l0aCBNb25pdG9yZWRTZXNzaW9uKC4uLiwgaG9va3M9W2JlaG9sZGVyX2hvb2tdKSBhcyBzZXNzOgogIHNlc3MucnVuKHRyYWluX29wKTwvcHJlPgoKICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgSWYgeW91IHRoaW5rIGV2ZXJ5dGhpbmcgaXMgc2V0IHVwIHByb3Blcmx5LCBwbGVhc2Ugc2VlCiAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvdGVuc29yYm9hcmQvcGx1Z2lucy9iZWhvbGRlci9SRUFETUUubWQiPnRoZSBSRUFETUU8L2E+CiAgICAgICAgICAgICAgZm9yIG1vcmUgaW5mb3JtYXRpb24gYW5kIGNvbnNpZGVyIGZpbGluZyBhbiBpc3N1ZSBvbiBHaXRIdWIuCiAgICAgICAgICAgIAoKICAgICAgICAgICAgPHAgY2xhc3M9ImRpc2NsYWltZXIiPgogICAgICAgICAgICAgIE5vdGU6IEJlaG9sZGVyIGN1cnJlbnRseSBvbmx5IHdvcmtzIHdlbGwgb24gbG9jYWwgZmlsZSBzeXN0ZW1zLgogICAgICAgICAgICAKICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvdGVtcGxhdGU+CgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaXNfYWN0aXZlXV0iPgogICAgICAgICAgPHRmLWJlaG9sZGVyLXZpZGVvIGlkPSJ2aWRlbyIgZnBzPSJbW19GUFNdXSI+PC90Zi1iZWhvbGRlci12aWRlbz4KCiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX3ZhbHVlc05vdEZyYW1lKF92YWx1ZXMpXV0iPgogICAgICAgICAgICA8dGYtYmVob2xkZXItaW5mbyBpZD0iaW5mbyIgZnBzPSJbW19GUFNdXSI+IDwvdGYtYmVob2xkZXItaW5mbz4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPC9kaXY+CiAgICA8L3RmLWRhc2hib2FyZC1sYXlvdXQ+CiAgICA8c3R5bGUgaW5jbHVkZT0iZGFzaGJvYXJkLXN0eWxlIj48L3N0eWxlPgogICAgPHN0eWxlPgogICAgICAuY2VudGVyIHsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICB9CgogICAgICAubm8tZGF0YS13YXJuaW5nIHsKICAgICAgICBtYXgtd2lkdGg6IDU0MHB4OwogICAgICAgIG1hcmdpbjogODBweCBhdXRvIDA7CiAgICAgIH0KCiAgICAgIHBhcGVyLWNoZWNrYm94IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwYWRkaW5nOiA0cHg7CiAgICAgIH0KCiAgICAgIHBhcGVyLXJhZGlvLWJ1dHRvbiB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBwYWRkaW5nOiA1cHg7CgogICAgICAgIC0tcGFwZXItcmFkaW8tYnV0dG9uLXJhZGlvLWNvbnRhaW5lcjogewogICAgICAgICAgZmxleC1ncm93OiAwOwogICAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgfQoKICAgICAgICAtLXBhcGVyLXJhZGlvLWJ1dHRvbi1sYWJlbDogewogICAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICAgIH0KICAgICAgfQoKICAgICAgcGFwZXItcmFkaW8tZ3JvdXAgewogICAgICAgIG1hcmdpbi10b3A6IDVweDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgcGFwZXItc2xpZGVyIHsKICAgICAgICAtLXBhcGVyLXNsaWRlci1hY3RpdmUtY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLWtub2ItY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLWtub2Itc3RhcnQtYm9yZGVyLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1rbm9iLXN0YXJ0LWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1tYXJrZXJzLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1waW4tY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLXBpbi1zdGFydC1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgZmxleC1ncm93OiAyOwogICAgICB9CgogICAgICBwcmUgewogICAgICAgIGRpc3BsYXk6IGlubGluZTsKICAgICAgfQoKICAgICAgcGFwZXItYnV0dG9uI3JlY29yZF9idXR0b24gewogICAgICAgIGNvbG9yOiAjZDMyZjJmOwogICAgICB9CgogICAgICBwYXBlci1idXR0b24jcmVjb3JkX2J1dHRvbi5pcy1yZWNvcmRpbmcgewogICAgICAgIGJhY2tncm91bmQ6ICNkMzJmMmY7CiAgICAgICAgY29sb3I6IHdoaXRlOwogICAgICB9CgogICAgICAuc2lkZWJhci1zZWN0aW9uLmJlaG9sZGVyLWRhc2hib2FyZDpsYXN0LWNoaWxkIHsKICAgICAgICBmbGV4LWdyb3c6IDA7CiAgICAgIH0KCiAgICAgICNjb2xvcm1hcC1zZWxlY3Rpb24gewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgbWFyZ2luLXRvcDogNXB4OwogICAgICB9CgogICAgICAjY29sb3JtYXAtc2VsZWN0aW9uLWxhYmVsIHsKICAgICAgICBtYXJnaW4tdG9wOiAxM3B4OwogICAgICB9CgogICAgICAjY29sb3JtYXAtc2VsZWN0aW9uIHBhcGVyLWRyb3Bkb3duLW1lbnUgewogICAgICAgIG1hcmdpbi1sZWZ0OiAxMHB4OwogICAgICAgIC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWZvY3VzLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICB3aWR0aDogMTA1cHg7CiAgICAgIH0KCiAgICAgIGg0IHsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKICAgICAgICBtYXJnaW46IDVweCAwOwogICAgICB9CgogICAgICBwLmRpc2NsYWltZXIgewogICAgICAgIGNvbG9yOiAjOTk5OwogICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICAgICAgfQoKICAgICAgcC5jb250cm9scy1kaXNhYmxlZC1tZXNzYWdlIHsKICAgICAgICBjb2xvcjogI2MwMDsKICAgICAgICBmb250LXdlaWdodDogYm9sZDsKICAgICAgfQoKICAgICAgLnNpZGViYXIgewogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgogIDxzY3JpcHQ+Ly9+fldFQlBBVEh+fi90Zi1iZWhvbGRlci1kYXNoYm9hcmQvdGYtYmVob2xkZXItZGFzaGJvYXJkLmh0bWwuanMKKGZ1bmN0aW9uKCl7UG9seW1lcih7aXM6InRmLWJlaG9sZGVyLWRhc2hib2FyZCIscHJvcGVydGllczp7X3JlcXVlc3RNYW5hZ2VyOnt0eXBlOk9iamVjdCx2YWx1ZTooKT0+bmV3IFBrLlJlcXVlc3RNYW5hZ2VyKDEwLDApfSxfaXNBdmFpbGFibGU6Qm9vbGVhbixfdmFsdWVzOnt0eXBlOlN0cmluZyx2YWx1ZToidHJhaW5hYmxlX3ZhcmlhYmxlcyIsb2JzZXJ2ZXI6Il9jb25maWdDaGFuZ2VkIn0sX21vZGU6e3R5cGU6U3RyaW5nLHZhbHVlOiJ2YXJpYW5jZSIsb2JzZXJ2ZXI6Il9jb25maWdDaGFuZ2VkIn0sX3NjYWxpbmc6e3R5cGU6U3RyaW5nLHZhbHVlOiJsYXllciIsb2JzZXJ2ZXI6Il9jb25maWdDaGFuZ2VkIn0sX3dpbmRvd1NpemU6e3R5cGU6TnVtYmVyLHZhbHVlOjE1LG9ic2VydmVyOiJfY29uZmlnQ2hhbmdlZCJ9LF9wcmV2aW91c0ZQUzp7dHlwZTpOdW1iZXIsdmFsdWU6MzB9LF9GUFM6e3R5cGU6TnVtYmVyLHZhbHVlOjEwLG9ic2VydmVyOiJfY29uZmlnQ2hhbmdlZCJ9LApfcmVjb3JkVGV4dDp7dHlwZTpTdHJpbmcsdmFsdWU6InN0YXJ0IHJlY29yZGluZyJ9LF9pc1JlY29yZGluZzp7dHlwZTpCb29sZWFuLHZhbHVlOiExLG9ic2VydmVyOiJfY29uZmlnQ2hhbmdlZCJ9LF9zaG93QWxsOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEsb2JzZXJ2ZXI6Il9jb25maWdDaGFuZ2VkIn0sX2NvbG9ybWFwOnt0eXBlOlN0cmluZyx2YWx1ZToibWFnbWEiLG9ic2VydmVyOiJfY29uZmlnQ2hhbmdlZCJ9LF9pc19hY3RpdmU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxvYnNlcnZlcjoiX2NvbmZpZ0NoYW5nZWQifSxfY29udHJvbHNfZGlzYWJsZWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxvYnNlcnZlcjoiX2NvbmZpZ0NoYW5nZWQifX0sX3ZhbHVlc05vdEZyYW1lKGEpe3JldHVybiJmcmFtZXMiIT09YX0sX3ZhcmlhbmNlU2VsZWN0ZWQoYSl7cmV0dXJuInZhcmlhbmNlIj09PWF9LF9jb25maWdDaGFuZ2VkKCl7aWYodGhpcy5faXNfYWN0aXZlJiYhdGhpcy5fY29udHJvbHNfZGlzYWJsZWQpe3ZhciBhPQpbdGhpcy5fdmFsdWVzLHRoaXMuX21vZGUsdGhpcy5fc2NhbGluZyx0aGlzLl93aW5kb3dTaXplLHRoaXMuX0ZQUyx0aGlzLl9pc1JlY29yZGluZyx0aGlzLl9zaG93QWxsLHRoaXMuX2NvbG9ybWFwXSxjO2ZvcihjIG9mIGEpaWYoInVuZGVmaW5lZCI9PT10eXBlb2YgY3x8IiI9PT1jKXJldHVybjthPVBrLmdldFJvdXRlcigpLnBsdWdpblJvdXRlKCJiZWhvbGRlciIsIi9jaGFuZ2UtY29uZmlnIik7dGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdChhLHt2YWx1ZXM6dGhpcy5fdmFsdWVzLG1vZGU6dGhpcy5fbW9kZSxzY2FsaW5nOnRoaXMuX3NjYWxpbmcsd2luZG93X3NpemU6dGhpcy5fd2luZG93U2l6ZSxGUFM6dGhpcy5fRlBTLGlzX3JlY29yZGluZzp0aGlzLl9pc1JlY29yZGluZyxzaG93X2FsbDp0aGlzLl9zaG93QWxsLGNvbG9ybWFwOnRoaXMuX2NvbG9ybWFwfSl9fSxfdG9nZ2xlUmVjb3JkKCl7InN0YXJ0IHJlY29yZGluZyI9PXRoaXMuX3JlY29yZFRleHQ/KHRoaXMuc2V0KCJfcmVjb3JkVGV4dCIsCiJzdG9wIHJlY29yZGluZyIpLHRoaXMuc2V0KCJfaXNSZWNvcmRpbmciLCEwKSk6KHRoaXMuc2V0KCJfcmVjb3JkVGV4dCIsInN0YXJ0IHJlY29yZGluZyIpLHRoaXMuc2V0KCJfaXNSZWNvcmRpbmciLCExKSk7dGhpcy4kLnJlY29yZF9idXR0b24uY2xhc3NMaXN0LnRvZ2dsZSgiaXMtcmVjb3JkaW5nIil9LGF0dGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdChQay5nZXRSb3V0ZXIoKS5wbHVnaW5zTGlzdGluZygpKS50aGVuKGE9PnsiYmVob2xkZXIiaW4gYT8odGhpcy4kLmluaXRpYWxEaWFsb2cuY2xvc2VEaWFsb2coKSx0aGlzLnNldCgiX2lzQXZhaWxhYmxlIiwhMCkpOih0aGlzLiQuaW5pdGlhbERpYWxvZy5vcGVuTm9UZW5zb3JGbG93RGlhbG9nKCksdGhpcy5zZXQoIl9pc0F2YWlsYWJsZSIsITEpKX0pfSxyZWFkeSgpe3RoaXMucmVsb2FkKCl9LHJlbG9hZCgpe2lmKHRoaXMuX2lzQXZhaWxhYmxlKXtjb25zdCBhPVBrLmdldFJvdXRlcigpLnBsdWdpblJvdXRlKCJiZWhvbGRlciIsCiIvaXMtYWN0aXZlIik7dGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdChhKS50aGVuKGM9Pnt0aGlzLnNldCgiX2lzX2FjdGl2ZSIsYy5pc19hY3RpdmUpO3RoaXMuc2V0KCJfY29udHJvbHNfZGlzYWJsZWQiLCFjLmlzX2NvbmZpZ193cml0YWJsZSl9KX19fSk7JGwucmVnaXN0ZXJEYXNoYm9hcmQoe3BsdWdpbjoiYmVob2xkZXIiLGVsZW1lbnROYW1lOiJ0Zi1iZWhvbGRlci1kYXNoYm9hcmQiLHNob3VsZFJlbW92ZURvbTohMH0pfSkoKTsKPC9zY3JpcHQ+CjwvZG9tLW1vZHVsZT4KCgoKPGlyb24taWNvbnNldC1zdmcgbmFtZT0iYXYiIHNpemU9IjI0Ij4KPHN2Zz48ZGVmcz4KPGcgaWQ9ImFkZC10by1xdWV1ZSI+PHBhdGggZD0iTTIxIDNIM2MtMS4xMSAwLTIgLjg5LTIgMnYxMmMwIDEuMS44OSAyIDIgMmg1djJoOHYtMmg1YzEuMSAwIDEuOTktLjkgMS45OS0yTDIzIDVjMC0xLjExLS45LTItMi0yem0wIDE0SDNWNWgxOHYxMnptLTUtN3YyaC0zdjNoLTJ2LTNIOHYtMmgzVjdoMnYzaDN6IiAvPjwvZz4KPGcgaWQ9ImFpcnBsYXkiPjxwYXRoIGQ9Ik02IDIyaDEybC02LTZ6TTIxIDNIM2MtMS4xIDAtMiAuOS0yIDJ2MTJjMCAxLjEuOSAyIDIgMmg0di0ySDNWNWgxOHYxMmgtNHYyaDRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnoiIC8+PC9nPgo8ZyBpZD0iYWxidW0iPjxwYXRoIGQ9Ik0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0wIDE0LjVjLTIuNDkgMC00LjUtMi4wMS00LjUtNC41UzkuNTEgNy41IDEyIDcuNXM0LjUgMi4wMSA0LjUgNC41LTIuMDEgNC41LTQuNSA0LjV6bTAtNS41Yy0uNTUgMC0xIC40NS0xIDFzLjQ1IDEgMSAxIDEtLjQ1IDEtMS0uNDUtMS0xLTF6IiAvPjwvZz4KPGcgaWQ9ImFydC10cmFjayI+PHBhdGggZD0iTTIyIDEzaC04di0yaDh2MnptMC02aC04djJoOFY3em0tOCAxMGg4di0yaC04djJ6bS0yLTh2NmMwIDEuMS0uOSAyLTIgMkg0Yy0xLjEgMC0yLS45LTItMlY5YzAtMS4xLjktMiAyLTJoNmMxLjEgMCAyIC45IDIgMnptLTEuNSA2bC0yLjI1LTMtMS43NSAyLjI2LTEuMjUtMS41MUwzLjUgMTVoN3oiIC8+PC9nPgo8ZyBpZD0iYXYtdGltZXIiPjxwYXRoIGQ9Ik0xMSAxN2MwIC41NS40NSAxIDEgMXMxLS40NSAxLTEtLjQ1LTEtMS0xLTEgLjQ1LTEgMXptMC0xNHY0aDJWNS4wOGMzLjM5LjQ5IDYgMy4zOSA2IDYuOTIgMCAzLjg3LTMuMTMgNy03IDdzLTctMy4xMy03LTdjMC0xLjY4LjU5LTMuMjIgMS41OC00LjQyTDEyIDEzbDEuNDEtMS40MS02LjgtNi44di4wMkM0LjQyIDYuNDUgMyA5LjA1IDMgMTJjMCA0Ljk3IDQuMDIgOSA5IDkgNC45NyAwIDktNC4wMyA5LTlzLTQuMDMtOS05LTloLTF6bTcgOWMwLS41NS0uNDUtMS0xLTFzLTEgLjQ1LTEgMSAuNDUgMSAxIDEgMS0uNDUgMS0xek02IDEyYzAgLjU1LjQ1IDEgMSAxczEtLjQ1IDEtMS0uNDUtMS0xLTEtMSAuNDUtMSAxeiIgLz48L2c+CjxnIGlkPSJicmFuZGluZy13YXRlcm1hcmsiPjxwYXRoIGQ9Ik0yMSAzSDNjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMThjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptMCAxNmgtOXYtNmg5djZ6IiAvPjwvZz4KPGcgaWQ9ImNhbGwtdG8tYWN0aW9uIj48cGF0aCBkPSJNMjEgM0gzYy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE4YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bTAgMTZIM3YtM2gxOHYzeiIgLz48L2c+CjxnIGlkPSJjbG9zZWQtY2FwdGlvbiI+PHBhdGggZD0iTTE5IDRINWMtMS4xMSAwLTIgLjktMiAydjEyYzAgMS4xLjg5IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjZjMC0xLjEtLjktMi0yLTJ6bS04IDdIOS41di0uNWgtMnYzaDJWMTNIMTF2MWMwIC41NS0uNDUgMS0xIDFIN2MtLjU1IDAtMS0uNDUtMS0xdi00YzAtLjU1LjQ1LTEgMS0xaDNjLjU1IDAgMSAuNDUgMSAxdjF6bTcgMGgtMS41di0uNWgtMnYzaDJWMTNIMTh2MWMwIC41NS0uNDUgMS0xIDFoLTNjLS41NSAwLTEtLjQ1LTEtMXYtNGMwLS41NS40NS0xIDEtMWgzYy41NSAwIDEgLjQ1IDEgMXYxeiIgLz48L2c+CjxnIGlkPSJlcXVhbGl6ZXIiPjxwYXRoIGQ9Ik0xMCAyMGg0VjRoLTR2MTZ6bS02IDBoNHYtOEg0djh6TTE2IDl2MTFoNFY5aC00eiIgLz48L2c+CjxnIGlkPSJleHBsaWNpdCI+PHBhdGggZD0iTTE5IDNINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tNCA2aC00djJoNHYyaC00djJoNHYySDlWN2g2djJ6IiAvPjwvZz4KPGcgaWQ9ImZhc3QtZm9yd2FyZCI+PHBhdGggZD0iTTQgMThsOC41LTZMNCA2djEyem05LTEydjEybDguNS02TDEzIDZ6IiAvPjwvZz4KPGcgaWQ9ImZhc3QtcmV3aW5kIj48cGF0aCBkPSJNMTEgMThWNmwtOC41IDYgOC41IDZ6bS41LTZsOC41IDZWNmwtOC41IDZ6IiAvPjwvZz4KPGcgaWQ9ImZlYXR1cmVkLXBsYXktbGlzdCI+PHBhdGggZD0iTTIxIDNIM2MtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxOGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tOSA4SDNWOWg5djJ6bTAtNEgzVjVoOXYyeiIgLz48L2c+CjxnIGlkPSJmZWF0dXJlZC12aWRlbyI+PHBhdGggZD0iTTIxIDNIM2MtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxOGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tOSA5SDNWNWg5djd6IiAvPjwvZz4KPGcgaWQ9ImZpYmVyLWR2ciI+PHBhdGggZD0iTTE3LjUgMTAuNWgydjFoLTJ6bS0xMyAwaDJ2M2gtMnpNMjEgM0gzYy0xLjExIDAtMiAuODktMiAydjE0YzAgMS4xLjg5IDIgMiAyaDE4YzEuMTEgMCAyLS45IDItMlY1YzAtMS4xMS0uODktMi0yLTJ6TTggMTMuNWMwIC44NS0uNjUgMS41LTEuNSAxLjVIM1Y5aDMuNWMuODUgMCAxLjUuNjUgMS41IDEuNXYzem00LjYyIDEuNWgtMS41TDkuMzcgOWgxLjVsMSAzLjQzIDEtMy40M2gxLjVsLTEuNzUgNnpNMjEgMTEuNWMwIC42LS40IDEuMTUtLjkgMS40TDIxIDE1aC0xLjVsLS44NS0ySDE3LjV2MkgxNlY5aDMuNWMuODUgMCAxLjUuNjUgMS41IDEuNXYxeiIgLz48L2c+CjxnIGlkPSJmaWJlci1tYW51YWwtcmVjb3JkIj48Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSI4IiAvPjwvZz4KPGcgaWQ9ImZpYmVyLW5ldyI+PHBhdGggZD0iTTIwIDRINGMtMS4xMSAwLTEuOTkuODktMS45OSAyTDIgMThjMCAxLjExLjg5IDIgMiAyaDE2YzEuMTEgMCAyLS44OSAyLTJWNmMwLTEuMTEtLjg5LTItMi0yek04LjUgMTVINy4zbC0yLjU1LTMuNVYxNUgzLjVWOWgxLjI1bDIuNSAzLjVWOUg4LjV2NnptNS00Ljc0SDExdjEuMTJoMi41djEuMjZIMTF2MS4xMWgyLjVWMTVoLTRWOWg0djEuMjZ6bTcgMy43NGMwIC41NS0uNDUgMS0xIDFoLTRjLS41NSAwLTEtLjQ1LTEtMVY5aDEuMjV2NC41MWgxLjEzVjkuOTloMS4yNXYzLjUxaDEuMTJWOWgxLjI1djV6IiAvPjwvZz4KPGcgaWQ9ImZpYmVyLXBpbiI+PHBhdGggZD0iTTUuNSAxMC41aDJ2MWgtMnpNMjAgNEg0Yy0xLjExIDAtMS45OS44OS0xLjk5IDJMMiAxOGMwIDEuMTEuODkgMiAyIDJoMTZjMS4xMSAwIDItLjg5IDItMlY2YzAtMS4xMS0uODktMi0yLTJ6TTkgMTEuNWMwIC44NS0uNjUgMS41LTEuNSAxLjVoLTJ2Mkg0VjloMy41Yy44NSAwIDEuNS42NSAxLjUgMS41djF6bTMuNSAzLjVIMTFWOWgxLjV2NnptNy41IDBoLTEuMmwtMi41NS0zLjVWMTVIMTVWOWgxLjI1bDIuNSAzLjVWOUgyMHY2eiIgLz48L2c+CjxnIGlkPSJmaWJlci1zbWFydC1yZWNvcmQiPjxnPjxjaXJjbGUgY3g9IjkiIGN5PSIxMiIgcj0iOCIgLz48cGF0aCBkPSJNMTcgNC4yNnYyLjA5YzIuMzMuODIgNCAzLjA0IDQgNS42NXMtMS42NyA0LjgzLTQgNS42NXYyLjA5YzMuNDUtLjg5IDYtNC4wMSA2LTcuNzRzLTIuNTUtNi44NS02LTcuNzR6IiAvPjwvZz48L2c+CjxnIGlkPSJmb3J3YXJkLTEwIj48cGF0aCBkPSJNNCAxM2MwIDQuNCAzLjYgOCA4IDhzOC0zLjYgOC04aC0yYzAgMy4zLTIuNyA2LTYgNnMtNi0yLjctNi02IDIuNy02IDYtNnY0bDUtNS01LTV2NGMtNC40IDAtOCAzLjYtOCA4em02LjggM0gxMHYtMy4zTDkgMTN2LS43bDEuOC0uNmguMVYxNnptNC4zLTEuOGMwIC4zIDAgLjYtLjEuOGwtLjMuNnMtLjMuMy0uNS4zLS40LjEtLjYuMS0uNCAwLS42LS4xLS4zLS4yLS41LS4zLS4yLS4zLS4zLS42LS4xLS41LS4xLS44di0uN2MwLS4zIDAtLjYuMS0uOGwuMy0uNnMuMy0uMy41LS4zLjQtLjEuNi0uMS40IDAgLjYuMS4zLjIuNS4zLjIuMy4zLjYuMS41LjEuOHYuN3ptLS44LS44di0uNXMtLjEtLjItLjEtLjMtLjEtLjEtLjItLjItLjItLjEtLjMtLjEtLjIgMC0uMy4xbC0uMi4ycy0uMS4yLS4xLjN2MnMuMS4yLjEuMy4xLjEuMi4yLjIuMS4zLjEuMiAwIC4zLS4xbC4yLS4ycy4xLS4yLjEtLjN2LTEuNXoiIC8+PC9nPgo8ZyBpZD0iZm9yd2FyZC0zMCI+PHBhdGggZD0iTTkuNiAxMy41aC40Yy4yIDAgLjQtLjEuNS0uMnMuMi0uMi4yLS40di0uMnMtLjEtLjEtLjEtLjItLjEtLjEtLjItLjFoLS41cy0uMS4xLS4yLjEtLjEuMS0uMS4ydi4yaC0xYzAtLjIgMC0uMy4xLS41cy4yLS4zLjMtLjQuMy0uMi40LS4yLjQtLjEuNS0uMWMuMiAwIC40IDAgLjYuMXMuMy4xLjUuMi4yLjIuMy40LjEuMy4xLjV2LjNzLS4xLjItLjEuMy0uMS4yLS4yLjItLjIuMS0uMy4yYy4yLjEuNC4yLjUuNHMuMi40LjIuNmMwIC4yIDAgLjQtLjEuNXMtLjIuMy0uMy40LS4zLjItLjUuMi0uNC4xLS42LjFjLS4yIDAtLjQgMC0uNS0uMXMtLjMtLjEtLjUtLjItLjItLjItLjMtLjQtLjEtLjQtLjEtLjZoLjh2LjJzLjEuMS4xLjIuMS4xLjIuMWguNXMuMS0uMS4yLS4xLjEtLjEuMS0uMnYtLjVzLS4xLS4xLS4xLS4yLS4xLS4xLS4yLS4xaC0uNnYtLjd6bTUuNy43YzAgLjMgMCAuNi0uMS44bC0uMy42cy0uMy4zLS41LjMtLjQuMS0uNi4xLS40IDAtLjYtLjEtLjMtLjItLjUtLjMtLjItLjMtLjMtLjYtLjEtLjUtLjEtLjh2LS43YzAtLjMgMC0uNi4xLS44bC4zLS42cy4zLS4zLjUtLjMuNC0uMS42LS4xLjQgMCAuNi4xLjMuMi41LjMuMi4zLjMuNi4xLjUuMS44di43em0tLjktLjh2LS41cy0uMS0uMi0uMS0uMy0uMS0uMS0uMi0uMi0uMi0uMS0uMy0uMS0uMiAwLS4zLjFsLS4yLjJzLS4xLjItLjEuM3Yycy4xLjIuMS4zLjEuMS4yLjIuMi4xLjMuMS4yIDAgLjMtLjFsLjItLjJzLjEtLjIuMS0uM3YtMS41ek00IDEzYzAgNC40IDMuNiA4IDggOHM4LTMuNiA4LThoLTJjMCAzLjMtMi43IDYtNiA2cy02LTIuNy02LTYgMi43LTYgNi02djRsNS01LTUtNXY0Yy00LjQgMC04IDMuNi04IDh6IiAvPjwvZz4KPGcgaWQ9ImZvcndhcmQtNSI+PHBhdGggZD0iTTQgMTNjMCA0LjQgMy42IDggOCA4czgtMy42IDgtOGgtMmMwIDMuMy0yLjcgNi02IDZzLTYtMi43LTYtNiAyLjctNiA2LTZ2NGw1LTUtNS01djRjLTQuNCAwLTggMy42LTggOHptNi43LjlsLjItMi4yaDIuNHYuN2gtMS43bC0uMS45cy4xIDAgLjEtLjEuMSAwIC4xLS4xLjEgMCAuMiAwaC4yYy4yIDAgLjQgMCAuNS4xcy4zLjIuNC4zLjIuMy4zLjUuMS40LjEuNmMwIC4yIDAgLjQtLjEuNXMtLjEuMy0uMy41LS4zLjItLjUuMy0uNC4xLS42LjFjLS4yIDAtLjQgMC0uNS0uMXMtLjMtLjEtLjUtLjItLjItLjItLjMtLjQtLjEtLjMtLjEtLjVoLjhjMCAuMi4xLjMuMi40cy4yLjEuNC4xYy4xIDAgLjIgMCAuMy0uMWwuMi0uMnMuMS0uMi4xLS4zdi0uNmwtLjEtLjItLjItLjJzLS4yLS4xLS4zLS4xaC0uMnMtLjEgMC0uMi4xLS4xIDAtLjEuMS0uMS4xLS4xLjFoLS42eiIgLz48L2c+CjxnIGlkPSJnYW1lcyI+PHBhdGggZD0iTTE1IDcuNVYySDl2NS41bDMgMyAzLTN6TTcuNSA5SDJ2Nmg1LjVsMy0zLTMtM3pNOSAxNi41VjIyaDZ2LTUuNWwtMy0zLTMgM3pNMTYuNSA5bC0zIDMgMyAzSDIyVjloLTUuNXoiIC8+PC9nPgo8ZyBpZD0iaGQiPjxwYXRoIGQ9Ik0xOSAzSDVjLTEuMTEgMC0yIC45LTIgMnYxNGMwIDEuMS44OSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tOCAxMkg5LjV2LTJoLTJ2Mkg2VjloMS41djIuNWgyVjlIMTF2NnptMi02aDRjLjU1IDAgMSAuNDUgMSAxdjRjMCAuNTUtLjQ1IDEtMSAxaC00Vjl6bTEuNSA0LjVoMnYtM2gtMnYzeiIgLz48L2c+CjxnIGlkPSJoZWFyaW5nIj48cGF0aCBkPSJNMTcgMjBjLS4yOSAwLS41Ni0uMDYtLjc2LS4xNS0uNzEtLjM3LTEuMjEtLjg4LTEuNzEtMi4zOC0uNTEtMS41Ni0xLjQ3LTIuMjktMi4zOS0zLS43OS0uNjEtMS42MS0xLjI0LTIuMzItMi41M0M5LjI5IDEwLjk4IDkgOS45MyA5IDljMC0yLjggMi4yLTUgNS01czUgMi4yIDUgNWgyYzAtMy45My0zLjA3LTctNy03UzcgNS4wNyA3IDljMCAxLjI2LjM4IDIuNjUgMS4wNyAzLjkuOTEgMS42NSAxLjk4IDIuNDggMi44NSAzLjE1LjgxLjYyIDEuMzkgMS4wNyAxLjcxIDIuMDUuNiAxLjgyIDEuMzcgMi44NCAyLjczIDMuNTUuNTEuMjMgMS4wNy4zNSAxLjY0LjM1IDIuMjEgMCA0LTEuNzkgNC00aC0yYzAgMS4xLS45IDItMiAyek03LjY0IDIuNjRMNi4yMiAxLjIyQzQuMjMgMy4yMSAzIDUuOTYgMyA5czEuMjMgNS43OSAzLjIyIDcuNzhsMS40MS0xLjQxQzYuMDEgMTMuNzQgNSAxMS40OSA1IDlzMS4wMS00Ljc0IDIuNjQtNi4zNnpNMTEuNSA5YzAgMS4zOCAxLjEyIDIuNSAyLjUgMi41czIuNS0xLjEyIDIuNS0yLjUtMS4xMi0yLjUtMi41LTIuNS0yLjUgMS4xMi0yLjUgMi41eiIgLz48L2c+CjxnIGlkPSJoaWdoLXF1YWxpdHkiPjxwYXRoIGQ9Ik0xOSA0SDVjLTEuMTEgMC0yIC45LTIgMnYxMmMwIDEuMS44OSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0yem0tOCAxMUg5LjV2LTJoLTJ2Mkg2VjloMS41djIuNWgyVjlIMTF2NnptNy0xYzAgLjU1LS40NSAxLTEgMWgtLjc1djEuNWgtMS41VjE1SDE0Yy0uNTUgMC0xLS40NS0xLTF2LTRjMC0uNTUuNDUtMSAxLTFoM2MuNTUgMCAxIC40NSAxIDF2NHptLTMuNS0uNWgydi0zaC0ydjN6IiAvPjwvZz4KPGcgaWQ9ImxpYnJhcnktYWRkIj48cGF0aCBkPSJNNCA2SDJ2MTRjMCAxLjEuOSAyIDIgMmgxNHYtMkg0VjZ6bTE2LTRIOGMtMS4xIDAtMiAuOS0yIDJ2MTJjMCAxLjEuOSAyIDIgMmgxMmMxLjEgMCAyLS45IDItMlY0YzAtMS4xLS45LTItMi0yem0tMSA5aC00djRoLTJ2LTRIOVY5aDRWNWgydjRoNHYyeiIgLz48L2c+CjxnIGlkPSJsaWJyYXJ5LWJvb2tzIj48cGF0aCBkPSJNNCA2SDJ2MTRjMCAxLjEuOSAyIDIgMmgxNHYtMkg0VjZ6bTE2LTRIOGMtMS4xIDAtMiAuOS0yIDJ2MTJjMCAxLjEuOSAyIDIgMmgxMmMxLjEgMCAyLS45IDItMlY0YzAtMS4xLS45LTItMi0yem0tMSA5SDlWOWgxMHYyem0tNCA0SDl2LTJoNnYyem00LThIOVY1aDEwdjJ6IiAvPjwvZz4KPGcgaWQ9ImxpYnJhcnktbXVzaWMiPjxwYXRoIGQ9Ik0yMCAySDhjLTEuMSAwLTIgLjktMiAydjEyYzAgMS4xLjkgMiAyIDJoMTJjMS4xIDAgMi0uOSAyLTJWNGMwLTEuMS0uOS0yLTItMnptLTIgNWgtM3Y1LjVjMCAxLjM4LTEuMTIgMi41LTIuNSAyLjVTMTAgMTMuODggMTAgMTIuNXMxLjEyLTIuNSAyLjUtMi41Yy41NyAwIDEuMDguMTkgMS41LjUxVjVoNHYyek00IDZIMnYxNGMwIDEuMS45IDIgMiAyaDE0di0ySDRWNnoiIC8+PC9nPgo8ZyBpZD0ibG9vcCI+PHBhdGggZD0iTTEyIDRWMUw4IDVsNCA0VjZjMy4zMSAwIDYgMi42OSA2IDYgMCAxLjAxLS4yNSAxLjk3LS43IDIuOGwxLjQ2IDEuNDZDMTkuNTQgMTUuMDMgMjAgMTMuNTcgMjAgMTJjMC00LjQyLTMuNTgtOC04LTh6bTAgMTRjLTMuMzEgMC02LTIuNjktNi02IDAtMS4wMS4yNS0xLjk3LjctMi44TDUuMjQgNy43NEM0LjQ2IDguOTcgNCAxMC40MyA0IDEyYzAgNC40MiAzLjU4IDggOCA4djNsNC00LTQtNHYzeiIgLz48L2c+CjxnIGlkPSJtaWMiPjxwYXRoIGQ9Ik0xMiAxNGMxLjY2IDAgMi45OS0xLjM0IDIuOTktM0wxNSA1YzAtMS42Ni0xLjM0LTMtMy0zUzkgMy4zNCA5IDV2NmMwIDEuNjYgMS4zNCAzIDMgM3ptNS4zLTNjMCAzLTIuNTQgNS4xLTUuMyA1LjFTNi43IDE0IDYuNyAxMUg1YzAgMy40MSAyLjcyIDYuMjMgNiA2LjcyVjIxaDJ2LTMuMjhjMy4yOC0uNDggNi0zLjMgNi02LjcyaC0xLjd6IiAvPjwvZz4KPGcgaWQ9Im1pYy1ub25lIj48cGF0aCBkPSJNMTIgMTRjMS42NiAwIDIuOTktMS4zNCAyLjk5LTNMMTUgNWMwLTEuNjYtMS4zNC0zLTMtM1M5IDMuMzQgOSA1djZjMCAxLjY2IDEuMzQgMyAzIDN6bS0xLjItOS4xYzAtLjY2LjU0LTEuMiAxLjItMS4yLjY2IDAgMS4yLjU0IDEuMiAxLjJsLS4wMSA2LjJjMCAuNjYtLjUzIDEuMi0xLjE5IDEuMi0uNjYgMC0xLjItLjU0LTEuMi0xLjJWNC45em02LjUgNi4xYzAgMy0yLjU0IDUuMS01LjMgNS4xUzYuNyAxNCA2LjcgMTFINWMwIDMuNDEgMi43MiA2LjIzIDYgNi43MlYyMWgydi0zLjI4YzMuMjgtLjQ4IDYtMy4zIDYtNi43MmgtMS43eiIgLz48L2c+CjxnIGlkPSJtaWMtb2ZmIj48cGF0aCBkPSJNMTkgMTFoLTEuN2MwIC43NC0uMTYgMS40My0uNDMgMi4wNWwxLjIzIDEuMjNjLjU2LS45OC45LTIuMDkuOS0zLjI4em0tNC4wMi4xN2MwLS4wNi4wMi0uMTEuMDItLjE3VjVjMC0xLjY2LTEuMzQtMy0zLTNTOSAzLjM0IDkgNXYuMThsNS45OCA1Ljk5ek00LjI3IDNMMyA0LjI3bDYuMDEgNi4wMVYxMWMwIDEuNjYgMS4zMyAzIDIuOTkgMyAuMjIgMCAuNDQtLjAzLjY1LS4wOGwxLjY2IDEuNjZjLS43MS4zMy0xLjUuNTItMi4zMS41Mi0yLjc2IDAtNS4zLTIuMS01LjMtNS4xSDVjMCAzLjQxIDIuNzIgNi4yMyA2IDYuNzJWMjFoMnYtMy4yOGMuOTEtLjEzIDEuNzctLjQ1IDIuNTQtLjlMMTkuNzMgMjEgMjEgMTkuNzMgNC4yNyAzeiIgLz48L2c+CjxnIGlkPSJtb3ZpZSI+PHBhdGggZD0iTTE4IDRsMiA0aC0zbC0yLTRoLTJsMiA0aC0zbC0yLTRIOGwyIDRIN0w1IDRINGMtMS4xIDAtMS45OS45LTEuOTkgMkwyIDE4YzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJWNGgtNHoiIC8+PC9nPgo8ZyBpZD0ibXVzaWMtdmlkZW8iPjxwYXRoIGQ9Ik0yMSAzSDNjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMThjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptMCAxNkgzVjVoMTh2MTR6TTggMTVjMC0xLjY2IDEuMzQtMyAzLTMgLjM1IDAgLjY5LjA3IDEgLjE4VjZoNXYyaC0zdjcuMDNjLS4wMiAxLjY0LTEuMzUgMi45Ny0zIDIuOTctMS42NiAwLTMtMS4zNC0zLTN6IiAvPjwvZz4KPGcgaWQ9Im5ldy1yZWxlYXNlcyI+PHBhdGggZD0iTTIzIDEybC0yLjQ0LTIuNzguMzQtMy42OC0zLjYxLS44Mi0xLjg5LTMuMThMMTIgMyA4LjYgMS41NCA2LjcxIDQuNzJsLTMuNjEuODEuMzQgMy42OEwxIDEybDIuNDQgMi43OC0uMzQgMy42OSAzLjYxLjgyIDEuODkgMy4xOEwxMiAyMWwzLjQgMS40NiAxLjg5LTMuMTggMy42MS0uODItLjM0LTMuNjhMMjMgMTJ6bS0xMCA1aC0ydi0yaDJ2MnptMC00aC0yVjdoMnY2eiIgLz48L2c+CjxnIGlkPSJub3QtaW50ZXJlc3RlZCI+PHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTAgMThjLTQuNDIgMC04LTMuNTgtOC04IDAtMS44NS42My0zLjU1IDEuNjktNC45TDE2LjkgMTguMzFDMTUuNTUgMTkuMzcgMTMuODUgMjAgMTIgMjB6bTYuMzEtMy4xTDcuMSA1LjY5QzguNDUgNC42MyAxMC4xNSA0IDEyIDRjNC40MiAwIDggMy41OCA4IDggMCAxLjg1LS42MyAzLjU1LTEuNjkgNC45eiIgLz48L2c+CjxnIGlkPSJub3RlIj48cGF0aCBkPSJNMjIgMTBsLTYtNkg0Yy0xLjEgMC0yIC45LTIgMnYxMi4wMWMwIDEuMS45IDEuOTkgMiAxLjk5bDE2LS4wMWMxLjEgMCAyLS44OSAyLTEuOTl2LTh6bS03LTQuNWw1LjUgNS41SDE1VjUuNXoiIC8+PC9nPgo8ZyBpZD0icGF1c2UiPjxwYXRoIGQ9Ik02IDE5aDRWNUg2djE0em04LTE0djE0aDRWNWgtNHoiIC8+PC9nPgo8ZyBpZD0icGF1c2UtY2lyY2xlLWZpbGxlZCI+PHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bS0xIDE0SDlWOGgydjh6bTQgMGgtMlY4aDJ2OHoiIC8+PC9nPgo8ZyBpZD0icGF1c2UtY2lyY2xlLW91dGxpbmUiPjxwYXRoIGQ9Ik05IDE2aDJWOEg5djh6bTMtMTRDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTAgMThjLTQuNDEgMC04LTMuNTktOC04czMuNTktOCA4LTggOCAzLjU5IDggOC0zLjU5IDgtOCA4em0xLTRoMlY4aC0ydjh6IiAvPjwvZz4KPGcgaWQ9InBsYXktYXJyb3ciPjxwYXRoIGQ9Ik04IDV2MTRsMTEtN3oiIC8+PC9nPgo8ZyBpZD0icGxheS1jaXJjbGUtZmlsbGVkIj48cGF0aCBkPSJNMTIgMkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptLTIgMTQuNXYtOWw2IDQuNS02IDQuNXoiIC8+PC9nPgo8ZyBpZD0icGxheS1jaXJjbGUtb3V0bGluZSI+PHBhdGggZD0iTTEwIDE2LjVsNi00LjUtNi00LjV2OXpNMTIgMkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptMCAxOGMtNC40MSAwLTgtMy41OS04LThzMy41OS04IDgtOCA4IDMuNTkgOCA4LTMuNTkgOC04IDh6IiAvPjwvZz4KPGcgaWQ9InBsYXlsaXN0LWFkZCI+PHBhdGggZD0iTTE0IDEwSDJ2MmgxMnYtMnptMC00SDJ2MmgxMlY2em00IDh2LTRoLTJ2NGgtNHYyaDR2NGgydi00aDR2LTJoLTR6TTIgMTZoOHYtMkgydjJ6IiAvPjwvZz4KPGcgaWQ9InBsYXlsaXN0LWFkZC1jaGVjayI+PHBhdGggZD0iTTE0IDEwSDJ2MmgxMnYtMnptMC00SDJ2MmgxMlY2ek0yIDE2aDh2LTJIMnYyem0xOS41LTQuNUwyMyAxM2wtNi45OSA3LTQuNTEtNC41TDEzIDE0bDMuMDEgMyA1LjQ5LTUuNXoiIC8+PC9nPgo8ZyBpZD0icGxheWxpc3QtcGxheSI+PHBhdGggZD0iTTE5IDlIMnYyaDE3Vjl6bTAtNEgydjJoMTdWNXpNMiAxNWgxM3YtMkgydjJ6bTE1LTJ2Nmw1LTMtNS0zeiIgLz48L2c+CjxnIGlkPSJxdWV1ZSI+PHBhdGggZD0iTTQgNkgydjE0YzAgMS4xLjkgMiAyIDJoMTR2LTJINFY2em0xNi00SDhjLTEuMSAwLTIgLjktMiAydjEyYzAgMS4xLjkgMiAyIDJoMTJjMS4xIDAgMi0uOSAyLTJWNGMwLTEuMS0uOS0yLTItMnptLTEgOWgtNHY0aC0ydi00SDlWOWg0VjVoMnY0aDR2MnoiIC8+PC9nPgo8ZyBpZD0icXVldWUtbXVzaWMiPjxwYXRoIGQ9Ik0xNSA2SDN2MmgxMlY2em0wIDRIM3YyaDEydi0yek0zIDE2aDh2LTJIM3Yyek0xNyA2djguMThjLS4zMS0uMTEtLjY1LS4xOC0xLS4xOC0xLjY2IDAtMyAxLjM0LTMgM3MxLjM0IDMgMyAzIDMtMS4zNCAzLTNWOGgzVjZoLTV6IiAvPjwvZz4KPGcgaWQ9InF1ZXVlLXBsYXktbmV4dCI+PHBhdGggZD0iTTIxIDNIM2MtMS4xMSAwLTIgLjg5LTIgMnYxMmMwIDEuMS44OSAyIDIgMmg1djJoOHYtMmgydi0ySDNWNWgxOHY4aDJWNWMwLTEuMTEtLjktMi0yLTJ6bS04IDdWN2gtMnYzSDh2MmgzdjNoMnYtM2gzdi0yaC0zem0xMSA4bC00LjUgNC41TDE4IDIxbDMtMy0zLTMgMS41LTEuNUwyNCAxOHoiIC8+PC9nPgo8ZyBpZD0icmFkaW8iPjxwYXRoIGQ9Ik0zLjI0IDYuMTVDMi41MSA2LjQzIDIgNy4xNyAyIDh2MTJjMCAxLjEuODkgMiAyIDJoMTZjMS4xMSAwIDItLjkgMi0yVjhjMC0xLjExLS44OS0yLTItMkg4LjNsOC4yNi0zLjM0TDE1Ljg4IDEgMy4yNCA2LjE1ek03IDIwYy0xLjY2IDAtMy0xLjM0LTMtM3MxLjM0LTMgMy0zIDMgMS4zNCAzIDMtMS4zNCAzLTMgM3ptMTMtOGgtMnYtMmgtMnYySDRWOGgxNnY0eiIgLz48L2c+CjxnIGlkPSJyZWNlbnQtYWN0b3JzIj48cGF0aCBkPSJNMjEgNXYxNGgyVjVoLTJ6bS00IDE0aDJWNWgtMnYxNHpNMTQgNUgyYy0uNTUgMC0xIC40NS0xIDF2MTJjMCAuNTUuNDUgMSAxIDFoMTJjLjU1IDAgMS0uNDUgMS0xVjZjMC0uNTUtLjQ1LTEtMS0xek04IDcuNzVjMS4yNCAwIDIuMjUgMS4wMSAyLjI1IDIuMjVTOS4yNCAxMi4yNSA4IDEyLjI1IDUuNzUgMTEuMjQgNS43NSAxMCA2Ljc2IDcuNzUgOCA3Ljc1ek0xMi41IDE3aC05di0uNzVjMC0xLjUgMy0yLjI1IDQuNS0yLjI1czQuNS43NSA0LjUgMi4yNVYxN3oiIC8+PC9nPgo8ZyBpZD0icmVtb3ZlLWZyb20tcXVldWUiPjxwYXRoIGQ9Ik0yMSAzSDNjLTEuMTEgMC0yIC44OS0yIDJ2MTJjMCAxLjEuODkgMiAyIDJoNXYyaDh2LTJoNWMxLjEgMCAxLjk5LS45IDEuOTktMkwyMyA1YzAtMS4xMS0uOS0yLTItMnptMCAxNEgzVjVoMTh2MTJ6bS01LTd2Mkg4di0yaDh6IiAvPjwvZz4KPGcgaWQ9InJlcGVhdCI+PHBhdGggZD0iTTcgN2gxMHYzbDQtNC00LTR2M0g1djZoMlY3em0xMCAxMEg3di0zbC00IDQgNCA0di0zaDEydi02aC0ydjR6IiAvPjwvZz4KPGcgaWQ9InJlcGVhdC1vbmUiPjxwYXRoIGQ9Ik03IDdoMTB2M2w0LTQtNC00djNINXY2aDJWN3ptMTAgMTBIN3YtM2wtNCA0IDQgNHYtM2gxMnYtNmgtMnY0em0tNC0yVjloLTFsLTIgMXYxaDEuNXY0SDEzeiIgLz48L2c+CjxnIGlkPSJyZXBsYXkiPjxwYXRoIGQ9Ik0xMiA1VjFMNyA2bDUgNVY3YzMuMzEgMCA2IDIuNjkgNiA2cy0yLjY5IDYtNiA2LTYtMi42OS02LTZINGMwIDQuNDIgMy41OCA4IDggOHM4LTMuNTggOC04LTMuNTgtOC04LTh6IiAvPjwvZz4KPGcgaWQ9InJlcGxheS0xMCI+PHBhdGggZD0iTTEyIDVWMUw3IDZsNSA1VjdjMy4zIDAgNiAyLjcgNiA2cy0yLjcgNi02IDYtNi0yLjctNi02SDRjMCA0LjQgMy42IDggOCA4czgtMy42IDgtOC0zLjYtOC04LTh6bS0xLjEgMTFIMTB2LTMuM0w5IDEzdi0uN2wxLjgtLjZoLjFWMTZ6bTQuMy0xLjhjMCAuMyAwIC42LS4xLjhsLS4zLjZzLS4zLjMtLjUuMy0uNC4xLS42LjEtLjQgMC0uNi0uMS0uMy0uMi0uNS0uMy0uMi0uMy0uMy0uNi0uMS0uNS0uMS0uOHYtLjdjMC0uMyAwLS42LjEtLjhsLjMtLjZzLjMtLjMuNS0uMy40LS4xLjYtLjEuNCAwIC42LjFjLjIuMS4zLjIuNS4zcy4yLjMuMy42LjEuNS4xLjh2Ljd6bS0uOS0uOHYtLjVzLS4xLS4yLS4xLS4zLS4xLS4xLS4yLS4yLS4yLS4xLS4zLS4xLS4yIDAtLjMuMWwtLjIuMnMtLjEuMi0uMS4zdjJzLjEuMi4xLjMuMS4xLjIuMi4yLjEuMy4xLjIgMCAuMy0uMWwuMi0uMnMuMS0uMi4xLS4zdi0xLjV6IiAvPjwvZz4KPGcgaWQ9InJlcGxheS0zMCI+PHBhdGggZD0iTTEyIDVWMUw3IDZsNSA1VjdjMy4zIDAgNiAyLjcgNiA2cy0yLjcgNi02IDYtNi0yLjctNi02SDRjMCA0LjQgMy42IDggOCA4czgtMy42IDgtOC0zLjYtOC04LTh6bS0yLjQgOC41aC40Yy4yIDAgLjQtLjEuNS0uMnMuMi0uMi4yLS40di0uMnMtLjEtLjEtLjEtLjItLjEtLjEtLjItLjFoLS41cy0uMS4xLS4yLjEtLjEuMS0uMS4ydi4yaC0xYzAtLjIgMC0uMy4xLS41cy4yLS4zLjMtLjQuMy0uMi40LS4yLjQtLjEuNS0uMWMuMiAwIC40IDAgLjYuMXMuMy4xLjUuMi4yLjIuMy40LjEuMy4xLjV2LjNzLS4xLjItLjEuMy0uMS4yLS4yLjItLjIuMS0uMy4yYy4yLjEuNC4yLjUuNHMuMi40LjIuNmMwIC4yIDAgLjQtLjEuNXMtLjIuMy0uMy40LS4zLjItLjUuMi0uNC4xLS42LjFjLS4yIDAtLjQgMC0uNS0uMXMtLjMtLjEtLjUtLjItLjItLjItLjMtLjQtLjEtLjQtLjEtLjZoLjh2LjJzLjEuMS4xLjIuMS4xLjIuMWguNXMuMS0uMS4yLS4xLjEtLjEuMS0uMnYtLjVzLS4xLS4xLS4xLS4yLS4xLS4xLS4yLS4xaC0uNnYtLjd6bTUuNy43YzAgLjMgMCAuNi0uMS44bC0uMy42cy0uMy4zLS41LjMtLjQuMS0uNi4xLS40IDAtLjYtLjEtLjMtLjItLjUtLjMtLjItLjMtLjMtLjYtLjEtLjUtLjEtLjh2LS43YzAtLjMgMC0uNi4xLS44bC4zLS42cy4zLS4zLjUtLjMuNC0uMS42LS4xLjQgMCAuNi4xLjMuMi41LjMuMi4zLjMuNi4xLjUuMS44di43em0tLjgtLjh2LS41YzAtLjEtLjEtLjItLjEtLjNzLS4xLS4xLS4yLS4yLS4yLS4xLS4zLS4xLS4yIDAtLjMuMWwtLjIuMnMtLjEuMi0uMS4zdjJzLjEuMi4xLjMuMS4xLjIuMi4yLjEuMy4xLjIgMCAuMy0uMWwuMi0uMnMuMS0uMi4xLS4zdi0xLjV6IiAvPjwvZz4KPGcgaWQ9InJlcGxheS01Ij48cGF0aCBkPSJNMTIgNVYxTDcgNmw1IDVWN2MzLjMgMCA2IDIuNyA2IDZzLTIuNyA2LTYgNi02LTIuNy02LTZINGMwIDQuNCAzLjYgOCA4IDhzOC0zLjYgOC04LTMuNi04LTgtOHptLTEuMyA4LjlsLjItMi4yaDIuNHYuN2gtMS43bC0uMS45cy4xIDAgLjEtLjEuMSAwIC4xLS4xLjEgMCAuMiAwaC4yYy4yIDAgLjQgMCAuNS4xcy4zLjIuNC4zLjIuMy4zLjUuMS40LjEuNmMwIC4yIDAgLjQtLjEuNXMtLjEuMy0uMy41LS4zLjItLjQuMy0uNC4xLS42LjFjLS4yIDAtLjQgMC0uNS0uMXMtLjMtLjEtLjUtLjItLjItLjItLjMtLjQtLjEtLjMtLjEtLjVoLjhjMCAuMi4xLjMuMi40cy4yLjEuNC4xYy4xIDAgLjIgMCAuMy0uMWwuMi0uMnMuMS0uMi4xLS4zdi0uNmwtLjEtLjItLjItLjJzLS4yLS4xLS4zLS4xaC0uMnMtLjEgMC0uMi4xLS4xIDAtLjEuMS0uMS4xLS4xLjFoLS43eiIgLz48L2c+CjxnIGlkPSJzaHVmZmxlIj48cGF0aCBkPSJNMTAuNTkgOS4xN0w1LjQxIDQgNCA1LjQxbDUuMTcgNS4xNyAxLjQyLTEuNDF6TTE0LjUgNGwyLjA0IDIuMDRMNCAxOC41OSA1LjQxIDIwIDE3Ljk2IDcuNDYgMjAgOS41VjRoLTUuNXptLjMzIDkuNDFsLTEuNDEgMS40MSAzLjEzIDMuMTNMMTQuNSAyMEgyMHYtNS41bC0yLjA0IDIuMDQtMy4xMy0zLjEzeiIgLz48L2c+CjxnIGlkPSJza2lwLW5leHQiPjxwYXRoIGQ9Ik02IDE4bDguNS02TDYgNnYxMnpNMTYgNnYxMmgyVjZoLTJ6IiAvPjwvZz4KPGcgaWQ9InNraXAtcHJldmlvdXMiPjxwYXRoIGQ9Ik02IDZoMnYxMkg2em0zLjUgNmw4LjUgNlY2eiIgLz48L2c+CjxnIGlkPSJzbG93LW1vdGlvbi12aWRlbyI+PHBhdGggZD0iTTEzLjA1IDkuNzlMMTAgNy41djlsMy4wNS0yLjI5TDE2IDEyem0wIDBMMTAgNy41djlsMy4wNS0yLjI5TDE2IDEyem0wIDBMMTAgNy41djlsMy4wNS0yLjI5TDE2IDEyek0xMSA0LjA3VjIuMDVjLTIuMDEuMi0zLjg0IDEtNS4zMiAyLjIxTDcuMSA1LjY5YzEuMTEtLjg2IDIuNDQtMS40NCAzLjktMS42MnpNNS42OSA3LjFMNC4yNiA1LjY4QzMuMDUgNy4xNiAyLjI1IDguOTkgMi4wNSAxMWgyLjAyYy4xOC0xLjQ2Ljc2LTIuNzkgMS42Mi0zLjl6TTQuMDcgMTNIMi4wNWMuMiAyLjAxIDEgMy44NCAyLjIxIDUuMzJsMS40My0xLjQzYy0uODYtMS4xLTEuNDQtMi40My0xLjYyLTMuODl6bTEuNjEgNi43NEM3LjE2IDIwLjk1IDkgMjEuNzUgMTEgMjEuOTV2LTIuMDJjLTEuNDYtLjE4LTIuNzktLjc2LTMuOS0xLjYybC0xLjQyIDEuNDN6TTIyIDEyYzAgNS4xNi0zLjkyIDkuNDItOC45NSA5Ljk1di0yLjAyQzE2Ljk3IDE5LjQxIDIwIDE2LjA1IDIwIDEycy0zLjAzLTcuNDEtNi45NS03LjkzVjIuMDVDMTguMDggMi41OCAyMiA2Ljg0IDIyIDEyeiIgLz48L2c+CjxnIGlkPSJzbm9vemUiPjxwYXRoIGQ9Ik03Ljg4IDMuMzlMNi42IDEuODYgMiA1LjcxbDEuMjkgMS41MyA0LjU5LTMuODV6TTIyIDUuNzJsLTQuNi0zLjg2LTEuMjkgMS41MyA0LjYgMy44NkwyMiA1Ljcyek0xMiA0Yy00Ljk3IDAtOSA0LjAzLTkgOXM0LjAyIDkgOSA5YzQuOTcgMCA5LTQuMDMgOS05cy00LjAzLTktOS05em0wIDE2Yy0zLjg3IDAtNy0zLjEzLTctN3MzLjEzLTcgNy03IDcgMy4xMyA3IDctMy4xMyA3LTcgN3ptLTMtOWgzLjYzTDkgMTUuMlYxN2g2di0yaC0zLjYzTDE1IDEwLjhWOUg5djJ6IiAvPjwvZz4KPGcgaWQ9InNvcnQtYnktYWxwaGEiPjxwYXRoIGQ9Ik0xNC45NCA0LjY2aC00LjcybDIuMzYtMi4zNnptLTQuNjkgMTQuNzFoNC42NmwtMi4zMyAyLjMzek02LjEgNi4yN0wxLjYgMTcuNzNoMS44NGwuOTItMi40NWg1LjExbC45MiAyLjQ1aDEuODRMNy43NCA2LjI3SDYuMXptLTEuMTMgNy4zN2wxLjk0LTUuMTggMS45NCA1LjE4SDQuOTd6bTEwLjc2IDIuNWg2LjEydjEuNTloLTguNTN2LTEuMjlsNS45Mi04LjU2aC01Ljg4di0xLjZoOC4zdjEuMjZsLTUuOTMgOC42eiIgLz48L2c+CjxnIGlkPSJzdG9wIj48cGF0aCBkPSJNNiA2aDEydjEySDZ6IiAvPjwvZz4KPGcgaWQ9InN1YnNjcmlwdGlvbnMiPjxwYXRoIGQ9Ik0yMCA4SDRWNmgxNnYyem0tMi02SDZ2MmgxMlYyem00IDEwdjhjMCAxLjEtLjkgMi0yIDJINGMtMS4xIDAtMi0uOS0yLTJ2LThjMC0xLjEuOS0yIDItMmgxNmMxLjEgMCAyIC45IDIgMnptLTYgNGwtNi0zLjI3djYuNTNMMTYgMTZ6IiAvPjwvZz4KPGcgaWQ9InN1YnRpdGxlcyI+PHBhdGggZD0iTTIwIDRINGMtMS4xIDAtMiAuOS0yIDJ2MTJjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0yek00IDEyaDR2Mkg0di0yem0xMCA2SDR2LTJoMTB2MnptNiAwaC00di0yaDR2MnptMC00SDEwdi0yaDEwdjJ6IiAvPjwvZz4KPGcgaWQ9InN1cnJvdW5kLXNvdW5kIj48cGF0aCBkPSJNMjAgNEg0Yy0xLjEgMC0yIC45LTIgMnYxMmMwIDEuMS45IDIgMiAyaDE2YzEuMSAwIDItLjkgMi0yVjZjMC0xLjEtLjktMi0yLTJ6TTcuNzYgMTYuMjRsLTEuNDEgMS40MUM0Ljc4IDE2LjEgNCAxNC4wNSA0IDEyYzAtMi4wNS43OC00LjEgMi4zNC01LjY2bDEuNDEgMS40MUM2LjU5IDguOTMgNiAxMC40NiA2IDEycy41OSAzLjA3IDEuNzYgNC4yNHpNMTIgMTZjLTIuMjEgMC00LTEuNzktNC00czEuNzktNCA0LTQgNCAxLjc5IDQgNC0xLjc5IDQtNCA0em01LjY2IDEuNjZsLTEuNDEtMS40MUMxNy40MSAxNS4wNyAxOCAxMy41NCAxOCAxMnMtLjU5LTMuMDctMS43Ni00LjI0bDEuNDEtMS40MUMxOS4yMiA3LjkgMjAgOS45NSAyMCAxMmMwIDIuMDUtLjc4IDQuMS0yLjM0IDUuNjZ6TTEyIDEwYy0xLjEgMC0yIC45LTIgMnMuOSAyIDIgMiAyLS45IDItMi0uOS0yLTItMnoiIC8+PC9nPgo8ZyBpZD0idmlkZW8tY2FsbCI+PHBhdGggZD0iTTE3IDEwLjVWN2MwLS41NS0uNDUtMS0xLTFINGMtLjU1IDAtMSAuNDUtMSAxdjEwYzAgLjU1LjQ1IDEgMSAxaDEyYy41NSAwIDEtLjQ1IDEtMXYtMy41bDQgNHYtMTFsLTQgNHpNMTQgMTNoLTN2M0g5di0zSDZ2LTJoM1Y4aDJ2M2gzdjJ6IiAvPjwvZz4KPGcgaWQ9InZpZGVvLWxhYmVsIj48cGF0aCBkPSJNMjEgM0gzYy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE4YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bTAgMTNIM1Y1aDE4djExeiIgLz48L2c+CjxnIGlkPSJ2aWRlby1saWJyYXJ5Ij48cGF0aCBkPSJNNCA2SDJ2MTRjMCAxLjEuOSAyIDIgMmgxNHYtMkg0VjZ6bTE2LTRIOGMtMS4xIDAtMiAuOS0yIDJ2MTJjMCAxLjEuOSAyIDIgMmgxMmMxLjEgMCAyLS45IDItMlY0YzAtMS4xLS45LTItMi0yem0tOCAxMi41di05bDYgNC41LTYgNC41eiIgLz48L2c+CjxnIGlkPSJ2aWRlb2NhbSI+PHBhdGggZD0iTTE3IDEwLjVWN2MwLS41NS0uNDUtMS0xLTFINGMtLjU1IDAtMSAuNDUtMSAxdjEwYzAgLjU1LjQ1IDEgMSAxaDEyYy41NSAwIDEtLjQ1IDEtMXYtMy41bDQgNHYtMTFsLTQgNHoiIC8+PC9nPgo8ZyBpZD0idmlkZW9jYW0tb2ZmIj48cGF0aCBkPSJNMjEgNi41bC00IDRWN2MwLS41NS0uNDUtMS0xLTFIOS44MkwyMSAxNy4xOFY2LjV6TTMuMjcgMkwyIDMuMjcgNC43MyA2SDRjLS41NSAwLTEgLjQ1LTEgMXYxMGMwIC41NS40NSAxIDEgMWgxMmMuMjEgMCAuMzktLjA4LjU0LS4xOEwxOS43MyAyMSAyMSAxOS43MyAzLjI3IDJ6IiAvPjwvZz4KPGcgaWQ9InZvbHVtZS1kb3duIj48cGF0aCBkPSJNMTguNSAxMmMwLTEuNzctMS4wMi0zLjI5LTIuNS00LjAzdjguMDVjMS40OC0uNzMgMi41LTIuMjUgMi41LTQuMDJ6TTUgOXY2aDRsNSA1VjRMOSA5SDV6IiAvPjwvZz4KPGcgaWQ9InZvbHVtZS1tdXRlIj48cGF0aCBkPSJNNyA5djZoNGw1IDVWNGwtNSA1SDd6IiAvPjwvZz4KPGcgaWQ9InZvbHVtZS1vZmYiPjxwYXRoIGQ9Ik0xNi41IDEyYzAtMS43Ny0xLjAyLTMuMjktMi41LTQuMDN2Mi4yMWwyLjQ1IDIuNDVjLjAzLS4yLjA1LS40MS4wNS0uNjN6bTIuNSAwYzAgLjk0LS4yIDEuODItLjU0IDIuNjRsMS41MSAxLjUxQzIwLjYzIDE0LjkxIDIxIDEzLjUgMjEgMTJjMC00LjI4LTIuOTktNy44Ni03LTguNzd2Mi4wNmMyLjg5Ljg2IDUgMy41NCA1IDYuNzF6TTQuMjcgM0wzIDQuMjcgNy43MyA5SDN2Nmg0bDUgNXYtNi43M2w0LjI1IDQuMjVjLS42Ny41Mi0xLjQyLjkzLTIuMjUgMS4xOHYyLjA2YzEuMzgtLjMxIDIuNjMtLjk1IDMuNjktMS44MUwxOS43MyAyMSAyMSAxOS43M2wtOS05TDQuMjcgM3pNMTIgNEw5LjkxIDYuMDkgMTIgOC4xOFY0eiIgLz48L2c+CjxnIGlkPSJ2b2x1bWUtdXAiPjxwYXRoIGQ9Ik0zIDl2Nmg0bDUgNVY0TDcgOUgzem0xMy41IDNjMC0xLjc3LTEuMDItMy4yOS0yLjUtNC4wM3Y4LjA1YzEuNDgtLjczIDIuNS0yLjI1IDIuNS00LjAyek0xNCAzLjIzdjIuMDZjMi44OS44NiA1IDMuNTQgNSA2Ljcxcy0yLjExIDUuODUtNSA2LjcxdjIuMDZjNC4wMS0uOTEgNy00LjQ5IDctOC43N3MtMi45OS03Ljg2LTctOC43N3oiIC8+PC9nPgo8ZyBpZD0id2ViIj48cGF0aCBkPSJNMjAgNEg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0yem0tNSAxNEg0di00aDExdjR6bTAtNUg0VjloMTF2NHptNSA1aC00VjloNHY5eiIgLz48L2c+CjxnIGlkPSJ3ZWItYXNzZXQiPjxwYXRoIGQ9Ik0xOSA0SDVjLTEuMTEgMC0yIC45LTIgMnYxMmMwIDEuMS44OSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS44OS0yLTItMnptMCAxNEg1VjhoMTR2MTB6IiAvPjwvZz4KPC9kZWZzPjwvc3ZnPgo8L2lyb24taWNvbnNldC1zdmc+CgoKCjxpcm9uLWljb25zZXQtc3ZnIG5hbWU9ImNvbW11bmljYXRpb24iIHNpemU9IjI0Ij4KPHN2Zz48ZGVmcz4KPGcgaWQ9ImJ1c2luZXNzIj48cGF0aCBkPSJNMTIgN1YzSDJ2MThoMjBWN0gxMnpNNiAxOUg0di0yaDJ2MnptMC00SDR2LTJoMnYyem0wLTRINFY5aDJ2MnptMC00SDRWNWgydjJ6bTQgMTJIOHYtMmgydjJ6bTAtNEg4di0yaDJ2MnptMC00SDhWOWgydjJ6bTAtNEg4VjVoMnYyem0xMCAxMmgtOHYtMmgydi0yaC0ydi0yaDJ2LTJoLTJWOWg4djEwem0tMi04aC0ydjJoMnYtMnptMCA0aC0ydjJoMnYtMnoiIC8+PC9nPgo8ZyBpZD0iY2FsbCI+PHBhdGggZD0iTTYuNjIgMTAuNzljMS40NCAyLjgzIDMuNzYgNS4xNCA2LjU5IDYuNTlsMi4yLTIuMmMuMjctLjI3LjY3LS4zNiAxLjAyLS4yNCAxLjEyLjM3IDIuMzMuNTcgMy41Ny41Ny41NSAwIDEgLjQ1IDEgMVYyMGMwIC41NS0uNDUgMS0xIDEtOS4zOSAwLTE3LTcuNjEtMTctMTcgMC0uNTUuNDUtMSAxLTFoMy41Yy41NSAwIDEgLjQ1IDEgMSAwIDEuMjUuMiAyLjQ1LjU3IDMuNTcuMTEuMzUuMDMuNzQtLjI1IDEuMDJsLTIuMiAyLjJ6IiAvPjwvZz4KPGcgaWQ9ImNhbGwtZW5kIj48cGF0aCBkPSJNMTIgOWMtMS42IDAtMy4xNS4yNS00LjYuNzJ2My4xYzAgLjM5LS4yMy43NC0uNTYuOS0uOTguNDktMS44NyAxLjEyLTIuNjYgMS44NS0uMTguMTgtLjQzLjI4LS43LjI4LS4yOCAwLS41My0uMTEtLjcxLS4yOUwuMjkgMTMuMDhjLS4xOC0uMTctLjI5LS40Mi0uMjktLjcgMC0uMjguMTEtLjUzLjI5LS43MUMzLjM0IDguNzggNy40NiA3IDEyIDdzOC42NiAxLjc4IDExLjcxIDQuNjdjLjE4LjE4LjI5LjQzLjI5LjcxIDAgLjI4LS4xMS41My0uMjkuNzFsLTIuNDggMi40OGMtLjE4LjE4LS40My4yOS0uNzEuMjktLjI3IDAtLjUyLS4xMS0uNy0uMjgtLjc5LS43NC0xLjY5LTEuMzYtMi42Ny0xLjg1LS4zMy0uMTYtLjU2LS41LS41Ni0uOXYtMy4xQzE1LjE1IDkuMjUgMTMuNiA5IDEyIDl6IiAvPjwvZz4KPGcgaWQ9ImNhbGwtbWFkZSI+PHBhdGggZD0iTTkgNXYyaDYuNTlMNCAxOC41OSA1LjQxIDIwIDE3IDguNDFWMTVoMlY1eiIgLz48L2c+CjxnIGlkPSJjYWxsLW1lcmdlIj48cGF0aCBkPSJNMTcgMjAuNDFMMTguNDEgMTkgMTUgMTUuNTkgMTMuNTkgMTcgMTcgMjAuNDF6TTcuNSA4SDExdjUuNTlMNS41OSAxOSA3IDIwLjQxbDYtNlY4aDMuNUwxMiAzLjUgNy41IDh6IiAvPjwvZz4KPGcgaWQ9ImNhbGwtbWlzc2VkIj48cGF0aCBkPSJNMTkuNTkgN0wxMiAxNC41OSA2LjQxIDlIMTFWN0gzdjhoMnYtNC41OWw3IDcgOS05eiIgLz48L2c+CjxnIGlkPSJjYWxsLW1pc3NlZC1vdXRnb2luZyI+PHBhdGggZD0iTTMgOC40MWw5IDkgNy03VjE1aDJWN2gtOHYyaDQuNTlMMTIgMTQuNTkgNC40MSA3IDMgOC40MXoiIC8+PC9nPgo8ZyBpZD0iY2FsbC1yZWNlaXZlZCI+PHBhdGggZD0iTTIwIDUuNDFMMTguNTkgNCA3IDE1LjU5VjlINXYxMGgxMHYtMkg4LjQxeiIgLz48L2c+CjxnIGlkPSJjYWxsLXNwbGl0Ij48cGF0aCBkPSJNMTQgNGwyLjI5IDIuMjktMi44OCAyLjg4IDEuNDIgMS40MiAyLjg4LTIuODhMMjAgMTBWNHptLTQgMEg0djZsMi4yOS0yLjI5IDQuNzEgNC43VjIwaDJ2LTguNDFsLTUuMjktNS4zeiIgLz48L2c+CjxnIGlkPSJjaGF0Ij48cGF0aCBkPSJNMjAgMkg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMjJsNC00aDE0YzEuMSAwIDItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6TTYgOWgxMnYySDZWOXptOCA1SDZ2LTJoOHYyem00LTZINlY2aDEydjJ6IiAvPjwvZz4KPGcgaWQ9ImNoYXQtYnViYmxlIj48cGF0aCBkPSJNMjAgMkg0Yy0xLjEgMC0yIC45LTIgMnYxOGw0LTRoMTRjMS4xIDAgMi0uOSAyLTJWNGMwLTEuMS0uOS0yLTItMnoiIC8+PC9nPgo8ZyBpZD0iY2hhdC1idWJibGUtb3V0bGluZSI+PHBhdGggZD0iTTIwIDJINGMtMS4xIDAtMiAuOS0yIDJ2MThsNC00aDE0YzEuMSAwIDItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6bTAgMTRINmwtMiAyVjRoMTZ2MTJ6IiAvPjwvZz4KPGcgaWQ9ImNsZWFyLWFsbCI+PHBhdGggZD0iTTUgMTNoMTR2LTJINXYyem0tMiA0aDE0di0ySDN2MnpNNyA3djJoMTRWN0g3eiIgLz48L2c+CjxnIGlkPSJjb21tZW50Ij48cGF0aCBkPSJNMjEuOTkgNGMwLTEuMS0uODktMi0xLjk5LTJINGMtMS4xIDAtMiAuOS0yIDJ2MTJjMCAxLjEuOSAyIDIgMmgxNGw0IDQtLjAxLTE4ek0xOCAxNEg2di0yaDEydjJ6bTAtM0g2VjloMTJ2MnptMC0zSDZWNmgxMnYyeiIgLz48L2c+CjxnIGlkPSJjb250YWN0LW1haWwiPjxwYXRoIGQ9Ik0yMSA4VjdsLTMgMi0zLTJ2MWwzIDIgMy0yem0xLTVIMkMuOSAzIDAgMy45IDAgNXYxNGMwIDEuMS45IDIgMiAyaDIwYzEuMSAwIDEuOTktLjkgMS45OS0yTDI0IDVjMC0xLjEtLjktMi0yLTJ6TTggNmMxLjY2IDAgMyAxLjM0IDMgM3MtMS4zNCAzLTMgMy0zLTEuMzQtMy0zIDEuMzQtMyAzLTN6bTYgMTJIMnYtMWMwLTIgNC0zLjEgNi0zLjFzNiAxLjEgNiAzLjF2MXptOC02aC04VjZoOHY2eiIgLz48L2c+CjxnIGlkPSJjb250YWN0LXBob25lIj48cGF0aCBkPSJNMjIgM0gyQy45IDMgMCAzLjkgMCA1djE0YzAgMS4xLjkgMiAyIDJoMjBjMS4xIDAgMS45OS0uOSAxLjk5LTJMMjQgNWMwLTEuMS0uOS0yLTItMnpNOCA2YzEuNjYgMCAzIDEuMzQgMyAzcy0xLjM0IDMtMyAzLTMtMS4zNC0zLTMgMS4zNC0zIDMtM3ptNiAxMkgydi0xYzAtMiA0LTMuMSA2LTMuMXM2IDEuMSA2IDMuMXYxem0zLjg1LTRoMS42NEwyMSAxNmwtMS45OSAxLjk5Yy0xLjMxLS45OC0yLjI4LTIuMzgtMi43My0zLjk5LS4xOC0uNjQtLjI4LTEuMzEtLjI4LTJzLjEtMS4zNi4yOC0yYy40NS0xLjYyIDEuNDItMy4wMSAyLjczLTMuOTlMMjEgOGwtMS41MSAyaC0xLjY0Yy0uMjIuNjMtLjM1IDEuMy0uMzUgMnMuMTMgMS4zNy4zNSAyeiIgLz48L2c+CjxnIGlkPSJjb250YWN0cyI+PHBhdGggZD0iTTIwIDBINHYyaDE2VjB6TTQgMjRoMTZ2LTJINHYyek0yMCA0SDRjLTEuMSAwLTIgLjktMiAydjEyYzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJWNmMwLTEuMS0uOS0yLTItMnptLTggMi43NWMxLjI0IDAgMi4yNSAxLjAxIDIuMjUgMi4yNXMtMS4wMSAyLjI1LTIuMjUgMi4yNVM5Ljc1IDEwLjI0IDkuNzUgOSAxMC43NiA2Ljc1IDEyIDYuNzV6TTE3IDE3SDd2LTEuNWMwLTEuNjcgMy4zMy0yLjUgNS0yLjVzNSAuODMgNSAyLjVWMTd6IiAvPjwvZz4KPGcgaWQ9ImRpYWxlci1zaXAiPjxwYXRoIGQ9Ik0xNyAzaC0xdjVoMVYzem0tMiAyaC0yVjRoMlYzaC0zdjNoMnYxaC0ydjFoM1Y1em0zLTJ2NWgxVjZoMlYzaC0zem0yIDJoLTFWNGgxdjF6bTAgMTAuNWMtMS4yNSAwLTIuNDUtLjItMy41Ny0uNTctLjM1LS4xMS0uNzQtLjAzLTEuMDEuMjRsLTIuMiAyLjJjLTIuODMtMS40NC01LjE1LTMuNzUtNi41OS02LjU5bDIuMi0yLjIxYy4yNy0uMjYuMzUtLjY1LjI0LTFDOC43IDYuNDUgOC41IDUuMjUgOC41IDRjMC0uNTUtLjQ1LTEtMS0xSDRjLS41NSAwLTEgLjQ1LTEgMSAwIDkuMzkgNy42MSAxNyAxNyAxNyAuNTUgMCAxLS40NSAxLTF2LTMuNWMwLS41NS0uNDUtMS0xLTF6IiAvPjwvZz4KPGcgaWQ9ImRpYWxwYWQiPjxwYXRoIGQ9Ik0xMiAxOWMtMS4xIDAtMiAuOS0yIDJzLjkgMiAyIDIgMi0uOSAyLTItLjktMi0yLTJ6TTYgMWMtMS4xIDAtMiAuOS0yIDJzLjkgMiAyIDIgMi0uOSAyLTItLjktMi0yLTJ6bTAgNmMtMS4xIDAtMiAuOS0yIDJzLjkgMiAyIDIgMi0uOSAyLTItLjktMi0yLTJ6bTAgNmMtMS4xIDAtMiAuOS0yIDJzLjkgMiAyIDIgMi0uOSAyLTItLjktMi0yLTJ6bTEyLThjMS4xIDAgMi0uOSAyLTJzLS45LTItMi0yLTIgLjktMiAyIC45IDIgMiAyem0tNiA4Yy0xLjEgMC0yIC45LTIgMnMuOSAyIDIgMiAyLS45IDItMi0uOS0yLTItMnptNiAwYy0xLjEgMC0yIC45LTIgMnMuOSAyIDIgMiAyLS45IDItMi0uOS0yLTItMnptMC02Yy0xLjEgMC0yIC45LTIgMnMuOSAyIDIgMiAyLS45IDItMi0uOS0yLTItMnptLTYgMGMtMS4xIDAtMiAuOS0yIDJzLjkgMiAyIDIgMi0uOSAyLTItLjktMi0yLTJ6bTAtNmMtMS4xIDAtMiAuOS0yIDJzLjkgMiAyIDIgMi0uOSAyLTItLjktMi0yLTJ6IiAvPjwvZz4KPGcgaWQ9ImVtYWlsIj48cGF0aCBkPSJNMjAgNEg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0yem0wIDRsLTggNS04LTVWNmw4IDUgOC01djJ6IiAvPjwvZz4KPGcgaWQ9ImZvcnVtIj48cGF0aCBkPSJNMjEgNmgtMnY5SDZ2MmMwIC41NS40NSAxIDEgMWgxMWw0IDRWN2MwLS41NS0uNDUtMS0xLTF6bS00IDZWM2MwLS41NS0uNDUtMS0xLTFIM2MtLjU1IDAtMSAuNDUtMSAxdjE0bDQtNGgxMGMuNTUgMCAxLS40NSAxLTF6IiAvPjwvZz4KPGcgaWQ9ImltcG9ydC1jb250YWN0cyI+PHBhdGggZD0iTTIxIDVjLTEuMTEtLjM1LTIuMzMtLjUtMy41LS41LTEuOTUgMC00LjA1LjQtNS41IDEuNS0xLjQ1LTEuMS0zLjU1LTEuNS01LjUtMS41UzIuNDUgNC45IDEgNnYxNC42NWMwIC4yNS4yNS41LjUuNS4xIDAgLjE1LS4wNS4yNS0uMDVDMy4xIDIwLjQ1IDUuMDUgMjAgNi41IDIwYzEuOTUgMCA0LjA1LjQgNS41IDEuNSAxLjM1LS44NSAzLjgtMS41IDUuNS0xLjUgMS42NSAwIDMuMzUuMyA0Ljc1IDEuMDUuMS4wNS4xNS4wNS4yNS4wNS4yNSAwIC41LS4yNS41LS41VjZjLS42LS40NS0xLjI1LS43NS0yLTF6bTAgMTMuNWMtMS4xLS4zNS0yLjMtLjUtMy41LS41LTEuNyAwLTQuMTUuNjUtNS41IDEuNVY4YzEuMzUtLjg1IDMuOC0xLjUgNS41LTEuNSAxLjIgMCAyLjQuMTUgMy41LjV2MTEuNXoiIC8+PC9nPgo8ZyBpZD0iaW1wb3J0LWV4cG9ydCI+PHBhdGggZD0iTTkgM0w1IDYuOTloM1YxNGgyVjYuOTloM0w5IDN6bTcgMTQuMDFWMTBoLTJ2Ny4wMWgtM0wxNSAyMWw0LTMuOTloLTN6IiAvPjwvZz4KPGcgaWQ9ImludmVydC1jb2xvcnMtb2ZmIj48cGF0aCBkPSJNMjAuNjUgMjAuODdsLTIuMzUtMi4zNS02LjMtNi4yOS0zLjU2LTMuNTctMS40Mi0xLjQxTDQuMjcgNC41IDMgNS43N2wyLjc4IDIuNzhjLTIuNTUgMy4xNC0yLjM2IDcuNzYuNTYgMTAuNjlDNy45IDIwLjggOS45NSAyMS41OCAxMiAyMS41OGMxLjc5IDAgMy41Ny0uNTkgNS4wMy0xLjc4bDIuNyAyLjdMMjEgMjEuMjNsLS4zNS0uMzZ6TTEyIDE5LjU5Yy0xLjYgMC0zLjExLS42Mi00LjI0LTEuNzZDNi42MiAxNi42OSA2IDE1LjE5IDYgMTMuNTljMC0xLjMyLjQzLTIuNTcgMS4yMS0zLjZMMTIgMTQuNzd2NC44MnpNMTIgNS4xdjQuNThsNy4yNSA3LjI2YzEuMzctMi45Ni44NC02LjU3LTEuNi05LjAxTDEyIDIuMjdsLTMuNyAzLjcgMS40MSAxLjQxTDEyIDUuMXoiIC8+PC9nPgo8ZyBpZD0ibGl2ZS1oZWxwIj48cGF0aCBkPSJNMTkgMkg1Yy0xLjExIDAtMiAuOS0yIDJ2MTRjMCAxLjEuODkgMiAyIDJoNGwzIDMgMy0zaDRjMS4xIDAgMi0uOSAyLTJWNGMwLTEuMS0uOS0yLTItMnptLTYgMTZoLTJ2LTJoMnYyem0yLjA3LTcuNzVsLS45LjkyQzEzLjQ1IDExLjkgMTMgMTIuNSAxMyAxNGgtMnYtLjVjMC0xLjEuNDUtMi4xIDEuMTctMi44M2wxLjI0LTEuMjZjLjM3LS4zNi41OS0uODYuNTktMS40MSAwLTEuMS0uOS0yLTItMnMtMiAuOS0yIDJIOGMwLTIuMjEgMS43OS00IDQtNHM0IDEuNzkgNCA0YzAgLjg4LS4zNiAxLjY4LS45MyAyLjI1eiIgLz48L2c+CjxnIGlkPSJsb2NhdGlvbi1vZmYiPjxwYXRoIGQ9Ik0xMiA2LjVjMS4zOCAwIDIuNSAxLjEyIDIuNSAyLjUgMCAuNzQtLjMzIDEuMzktLjgzIDEuODVsMy42MyAzLjYzYy45OC0xLjg2IDEuNy0zLjggMS43LTUuNDggMC0zLjg3LTMuMTMtNy03LTctMS45OCAwLTMuNzYuODMtNS4wNCAyLjE1bDMuMTkgMy4xOWMuNDYtLjUyIDEuMTEtLjg0IDEuODUtLjg0em00LjM3IDkuNmwtNC42My00LjYzLS4xMS0uMTFMMy4yNyAzIDIgNC4yN2wzLjE4IDMuMThDNS4wNyA3Ljk1IDUgOC40NyA1IDljMCA1LjI1IDcgMTMgNyAxM3MxLjY3LTEuODUgMy4zOC00LjM1TDE4LjczIDIxIDIwIDE5LjczbC0zLjYzLTMuNjN6IiAvPjwvZz4KPGcgaWQ9ImxvY2F0aW9uLW9uIj48cGF0aCBkPSJNMTIgMkM4LjEzIDIgNSA1LjEzIDUgOWMwIDUuMjUgNyAxMyA3IDEzczctNy43NSA3LTEzYzAtMy44Ny0zLjEzLTctNy03em0wIDkuNWMtMS4zOCAwLTIuNS0xLjEyLTIuNS0yLjVzMS4xMi0yLjUgMi41LTIuNSAyLjUgMS4xMiAyLjUgMi41LTEuMTIgMi41LTIuNSAyLjV6IiAvPjwvZz4KPGcgaWQ9Im1haWwtb3V0bGluZSI+PHBhdGggZD0iTTIwIDRINGMtMS4xIDAtMS45OS45LTEuOTkgMkwyIDE4YzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJWNmMwLTEuMS0uOS0yLTItMnptMCAxNEg0VjhsOCA1IDgtNXYxMHptLTgtN0w0IDZoMTZsLTggNXoiIC8+PC9nPgo8ZyBpZD0ibWVzc2FnZSI+PHBhdGggZD0iTTIwIDJINGMtMS4xIDAtMS45OS45LTEuOTkgMkwyIDIybDQtNGgxNGMxLjEgMCAyLS45IDItMlY0YzAtMS4xLS45LTItMi0yem0tMiAxMkg2di0yaDEydjJ6bTAtM0g2VjloMTJ2MnptMC0zSDZWNmgxMnYyeiIgLz48L2c+CjxnIGlkPSJuby1zaW0iPjxwYXRoIGQ9Ik0xOC45OSA1YzAtMS4xLS44OS0yLTEuOTktMmgtN0w3LjY2IDUuMzQgMTkgMTYuNjggMTguOTkgNXpNMy42NSAzLjg4TDIuMzggNS4xNSA1IDcuNzdWMTljMCAxLjEuOSAyIDIgMmgxMC4wMWMuMzUgMCAuNjctLjEuOTYtLjI2bDEuODggMS44OCAxLjI3LTEuMjdMMy42NSAzLjg4eiIgLz48L2c+CjxnIGlkPSJwaG9uZSI+PHBhdGggZD0iTTYuNjIgMTAuNzljMS40NCAyLjgzIDMuNzYgNS4xNCA2LjU5IDYuNTlsMi4yLTIuMmMuMjctLjI3LjY3LS4zNiAxLjAyLS4yNCAxLjEyLjM3IDIuMzMuNTcgMy41Ny41Ny41NSAwIDEgLjQ1IDEgMVYyMGMwIC41NS0uNDUgMS0xIDEtOS4zOSAwLTE3LTcuNjEtMTctMTcgMC0uNTUuNDUtMSAxLTFoMy41Yy41NSAwIDEgLjQ1IDEgMSAwIDEuMjUuMiAyLjQ1LjU3IDMuNTcuMTEuMzUuMDMuNzQtLjI1IDEuMDJsLTIuMiAyLjJ6IiAvPjwvZz4KPGcgaWQ9InBob25lbGluay1lcmFzZSI+PHBhdGggZD0iTTEzIDguMmwtMS0xLTQgNC00LTQtMSAxIDQgNC00IDQgMSAxIDQtNCA0IDQgMS0xLTQtNCA0LTR6TTE5IDFIOWMtMS4xIDAtMiAuOS0yIDJ2M2gyVjRoMTB2MTZIOXYtMkg3djNjMCAxLjEuOSAyIDIgMmgxMGMxLjEgMCAyLS45IDItMlYzYzAtMS4xLS45LTItMi0yeiIgLz48L2c+CjxnIGlkPSJwaG9uZWxpbmstbG9jayI+PHBhdGggZD0iTTE5IDFIOWMtMS4xIDAtMiAuOS0yIDJ2M2gyVjRoMTB2MTZIOXYtMkg3djNjMCAxLjEuOSAyIDIgMmgxMGMxLjEgMCAyLS45IDItMlYzYzAtMS4xLS45LTItMi0yem0tOC4yIDEwVjkuNUMxMC44IDguMSA5LjQgNyA4IDdTNS4yIDguMSA1LjIgOS41VjExYy0uNiAwLTEuMi42LTEuMiAxLjJ2My41YzAgLjcuNiAxLjMgMS4yIDEuM2g1LjVjLjcgMCAxLjMtLjYgMS4zLTEuMnYtMy41YzAtLjctLjYtMS4zLTEuMi0xLjN6bS0xLjMgMGgtM1Y5LjVjMC0uOC43LTEuMyAxLjUtMS4zczEuNS41IDEuNSAxLjNWMTF6IiAvPjwvZz4KPGcgaWQ9InBob25lbGluay1yaW5nIj48cGF0aCBkPSJNMjAuMSA3LjdsLTEgMWMxLjggMS44IDEuOCA0LjYgMCA2LjVsMSAxYzIuNS0yLjMgMi41LTYuMSAwLTguNXpNMTggOS44bC0xIDFjLjUuNy41IDEuNiAwIDIuM2wxIDFjMS4yLTEuMiAxLjItMyAwLTQuM3pNMTQgMUg0Yy0xLjEgMC0yIC45LTIgMnYxOGMwIDEuMS45IDIgMiAyaDEwYzEuMSAwIDItLjkgMi0yVjNjMC0xLjEtLjktMi0yLTJ6bTAgMTlINFY0aDEwdjE2eiIgLz48L2c+CjxnIGlkPSJwaG9uZWxpbmstc2V0dXAiPjxwYXRoIGQ9Ik0xMS44IDEyLjV2LTFsMS4xLS44Yy4xLS4xLjEtLjIuMS0uM2wtMS0xLjdjLS4xLS4xLS4yLS4yLS4zLS4xbC0xLjMuNGMtLjMtLjItLjYtLjQtLjktLjVsLS4yLTEuM2MwLS4xLS4xLS4yLS4zLS4ySDdjLS4xIDAtLjIuMS0uMy4ybC0uMiAxLjNjLS4zLjEtLjYuMy0uOS41bC0xLjMtLjVjLS4xIDAtLjIgMC0uMy4xbC0xIDEuN2MtLjEuMSAwIC4yLjEuM2wxLjEuOHYxbC0xLjEuOGMtLjEuMi0uMS4zLS4xLjRsMSAxLjdjLjEuMS4yLjIuMy4xbDEuNC0uNGMuMy4yLjYuNC45LjVsLjIgMS4zYy0uMS4xLjEuMi4yLjJoMmMuMSAwIC4yLS4xLjMtLjJsLjItMS4zYy4zLS4xLjYtLjMuOS0uNWwxLjMuNWMuMSAwIC4yIDAgLjMtLjFsMS0xLjdjLjEtLjEgMC0uMi0uMS0uM2wtMS4xLS45ek04IDE0Yy0xLjEgMC0yLS45LTItMnMuOS0yIDItMiAyIC45IDIgMi0uOSAyLTIgMnpNMTkgMUg5Yy0xLjEgMC0yIC45LTIgMnYzaDJWNGgxMHYxNkg5di0ySDd2M2MwIDEuMS45IDIgMiAyaDEwYzEuMSAwIDItLjkgMi0yVjNjMC0xLjEtLjktMi0yLTJ6IiAvPjwvZz4KPGcgaWQ9InBvcnRhYmxlLXdpZmktb2ZmIj48cGF0aCBkPSJNMTcuNTYgMTQuMjRjLjI4LS42OS40NC0xLjQ1LjQ0LTIuMjQgMC0zLjMxLTIuNjktNi02LTYtLjc5IDAtMS41NS4xNi0yLjI0LjQ0bDEuNjIgMS42MmMuMi0uMDMuNDEtLjA2LjYyLS4wNiAyLjIxIDAgNCAxLjc5IDQgNCAwIC4yMS0uMDIuNDItLjA1LjYzbDEuNjEgMS42MXpNMTIgNGM0LjQyIDAgOCAzLjU4IDggOCAwIDEuMzUtLjM1IDIuNjItLjk1IDMuNzRsMS40NyAxLjQ3QzIxLjQ2IDE1LjY5IDIyIDEzLjkxIDIyIDEyYzAtNS41Mi00LjQ4LTEwLTEwLTEwLTEuOTEgMC0zLjY5LjU1LTUuMjEgMS40N2wxLjQ2IDEuNDZDOS4zNyA0LjM0IDEwLjY1IDQgMTIgNHpNMy4yNyAyLjVMMiAzLjc3bDIuMSAyLjFDMi43OSA3LjU3IDIgOS42OSAyIDEyYzAgMy43IDIuMDEgNi45MiA0Ljk5IDguNjVsMS0xLjczQzUuNjEgMTcuNTMgNCAxNC45NiA0IDEyYzAtMS43Ni41Ny0zLjM4IDEuNTMtNC42OWwxLjQzIDEuNDRDNi4zNiA5LjY4IDYgMTAuOCA2IDEyYzAgMi4yMiAxLjIxIDQuMTUgMyA1LjE5bDEtMS43NGMtMS4xOS0uNy0yLTEuOTctMi0zLjQ1IDAtLjY1LjE3LTEuMjUuNDQtMS43OWwxLjU4IDEuNThMMTAgMTJjMCAxLjEuOSAyIDIgMmwuMjEtLjAyLjAxLjAxIDcuNTEgNy41MUwyMSAyMC4yMyA0LjI3IDMuNWwtMS0xeiIgLz48L2c+CjxnIGlkPSJwcmVzZW50LXRvLWFsbCI+PHBhdGggZD0iTTIxIDNIM2MtMS4xMSAwLTIgLjg5LTIgMnYxNGMwIDEuMTEuODkgMiAyIDJoMThjMS4xMSAwIDItLjg5IDItMlY1YzAtMS4xMS0uODktMi0yLTJ6bTAgMTYuMDJIM1Y0Ljk4aDE4djE0LjA0ek0xMCAxMkg4bDQtNCA0IDRoLTJ2NGgtNHYtNHoiIC8+PC9nPgo8ZyBpZD0icmluZy12b2x1bWUiPjxwYXRoIGQ9Ik0yMy43MSAxNi42N0MyMC42NiAxMy43OCAxNi41NCAxMiAxMiAxMiA3LjQ2IDEyIDMuMzQgMTMuNzguMjkgMTYuNjdjLS4xOC4xOC0uMjkuNDMtLjI5LjcxIDAgLjI4LjExLjUzLjI5LjcxbDIuNDggMi40OGMuMTguMTguNDMuMjkuNzEuMjkuMjcgMCAuNTItLjExLjctLjI4Ljc5LS43NCAxLjY5LTEuMzYgMi42Ni0xLjg1LjMzLS4xNi41Ni0uNS41Ni0uOXYtMy4xYzEuNDUtLjQ4IDMtLjczIDQuNi0uNzNzMy4xNS4yNSA0LjYuNzJ2My4xYzAgLjM5LjIzLjc0LjU2LjkuOTguNDkgMS44NyAxLjEyIDIuNjYgMS44NS4xOC4xOC40My4yOC43LjI4LjI4IDAgLjUzLS4xMS43MS0uMjlsMi40OC0yLjQ4Yy4xOC0uMTguMjktLjQzLjI5LS43MSAwLS4yNy0uMTEtLjUyLS4yOS0uN3pNMjEuMTYgNi4yNmwtMS40MS0xLjQxLTMuNTYgMy41NSAxLjQxIDEuNDFzMy40NS0zLjUyIDMuNTYtMy41NXpNMTMgMmgtMnY1aDJWMnpNNi40IDkuODFMNy44MSA4LjQgNC4yNiA0Ljg0IDIuODQgNi4yNmMuMTEuMDMgMy41NiAzLjU1IDMuNTYgMy41NXoiIC8+PC9nPgo8ZyBpZD0icnNzLWZlZWQiPjxjaXJjbGUgY3g9IjYuMTgiIGN5PSIxNy44MiIgcj0iMi4xOCIgLz48cGF0aCBkPSJNNCA0LjQ0djIuODNjNy4wMyAwIDEyLjczIDUuNyAxMi43MyAxMi43M2gyLjgzYzAtOC41OS02Ljk3LTE1LjU2LTE1LjU2LTE1LjU2em0wIDUuNjZ2Mi44M2MzLjkgMCA3LjA3IDMuMTcgNy4wNyA3LjA3aDIuODNjMC01LjQ3LTQuNDMtOS45LTkuOS05Ljl6IiAvPjwvZz4KPGcgaWQ9InNjcmVlbi1zaGFyZSI+PHBhdGggZD0iTTIwIDE4YzEuMSAwIDEuOTktLjkgMS45OS0yTDIyIDZjMC0xLjExLS45LTItMi0ySDRjLTEuMTEgMC0yIC44OS0yIDJ2MTBjMCAxLjEuODkgMiAyIDJIMHYyaDI0di0yaC00em0tNy0zLjUzdi0yLjE5Yy0yLjc4IDAtNC42MS44NS02IDIuNzIuNTYtMi42NyAyLjExLTUuMzMgNi01Ljg3VjdsNCAzLjczLTQgMy43NHoiIC8+PC9nPgo8ZyBpZD0ic3BlYWtlci1waG9uZSI+PHBhdGggZD0iTTcgNy4wN0w4LjQzIDguNWMuOTEtLjkxIDIuMTgtMS40OCAzLjU3LTEuNDhzMi42Ni41NyAzLjU3IDEuNDhMMTcgNy4wN0MxNS43MiA1Ljc5IDEzLjk1IDUgMTIgNXMtMy43Mi43OS01IDIuMDd6TTEyIDFDOC45OCAxIDYuMjQgMi4yMyA0LjI1IDQuMjFsMS40MSAxLjQxQzcuMjggNCA5LjUzIDMgMTIgM3M0LjcyIDEgNi4zNCAyLjYybDEuNDEtMS40MUMxNy43NiAyLjIzIDE1LjAyIDEgMTIgMXptMi44NiA5LjAxTDkuMTQgMTBDOC41MSAxMCA4IDEwLjUxIDggMTEuMTR2OS43MWMwIC42My41MSAxLjE0IDEuMTQgMS4xNGg1LjcxYy42MyAwIDEuMTQtLjUxIDEuMTQtMS4xNHYtOS43MWMuMDEtLjYzLS41LTEuMTMtMS4xMy0xLjEzek0xNSAyMEg5di04aDZ2OHoiIC8+PC9nPgo8ZyBpZD0ic3RheS1jdXJyZW50LWxhbmRzY2FwZSI+PHBhdGggZD0iTTEuMDEgN0wxIDE3YzAgMS4xLjkgMiAyIDJoMThjMS4xIDAgMi0uOSAyLTJWN2MwLTEuMS0uOS0yLTItMkgzYy0xLjEgMC0xLjk5LjktMS45OSAyek0xOSA3djEwSDVWN2gxNHoiIC8+PC9nPgo8ZyBpZD0ic3RheS1jdXJyZW50LXBvcnRyYWl0Ij48cGF0aCBkPSJNMTcgMS4wMUw3IDFjLTEuMSAwLTEuOTkuOS0xLjk5IDJ2MThjMCAxLjEuODkgMiAxLjk5IDJoMTBjMS4xIDAgMi0uOSAyLTJWM2MwLTEuMS0uOS0xLjk5LTItMS45OXpNMTcgMTlIN1Y1aDEwdjE0eiIgLz48L2c+CjxnIGlkPSJzdGF5LXByaW1hcnktbGFuZHNjYXBlIj48cGF0aCBkPSJNMS4wMSA3TDEgMTdjMCAxLjEuOSAyIDIgMmgxOGMxLjEgMCAyLS45IDItMlY3YzAtMS4xLS45LTItMi0ySDNjLTEuMSAwLTEuOTkuOS0xLjk5IDJ6TTE5IDd2MTBINVY3aDE0eiIgLz48L2c+CjxnIGlkPSJzdGF5LXByaW1hcnktcG9ydHJhaXQiPjxwYXRoIGQ9Ik0xNyAxLjAxTDcgMWMtMS4xIDAtMS45OS45LTEuOTkgMnYxOGMwIDEuMS44OSAyIDEuOTkgMmgxMGMxLjEgMCAyLS45IDItMlYzYzAtMS4xLS45LTEuOTktMi0xLjk5ek0xNyAxOUg3VjVoMTB2MTR6IiAvPjwvZz4KPGcgaWQ9InN0b3Atc2NyZWVuLXNoYXJlIj48cGF0aCBkPSJNMjEuMjIgMTguMDJsMiAySDI0di0yaC0yLjc4em0uNzctMmwuMDEtMTBjMC0xLjExLS45LTItMi0ySDcuMjJsNS4yMyA1LjIzYy4xOC0uMDQuMzYtLjA3LjU1LS4xVjcuMDJsNCAzLjczLTEuNTggMS40NyA1LjU0IDUuNTRjLjYxLS4zMyAxLjAzLS45OSAxLjAzLTEuNzR6TTIuMzkgMS43M0wxLjExIDNsMS41NCAxLjU0Yy0uNC4zNi0uNjUuODktLjY1IDEuNDh2MTBjMCAxLjEuODkgMiAyIDJIMHYyaDE4LjEzbDIuNzEgMi43MSAxLjI3LTEuMjdMMi4zOSAxLjczek03IDE1LjAyYy4zMS0xLjQ4LjkyLTIuOTUgMi4wNy00LjA2bDEuNTkgMS41OWMtMS41NC4zOC0yLjcgMS4xOC0zLjY2IDIuNDd6IiAvPjwvZz4KPGcgaWQ9InN3YXAtY2FsbHMiPjxwYXRoIGQ9Ik0xOCA0bC00IDRoM3Y3YzAgMS4xLS45IDItMiAycy0yLS45LTItMlY4YzAtMi4yMS0xLjc5LTQtNC00UzUgNS43OSA1IDh2N0gybDQgNCA0LTRIN1Y4YzAtMS4xLjktMiAyLTJzMiAuOSAyIDJ2N2MwIDIuMjEgMS43OSA0IDQgNHM0LTEuNzkgNC00VjhoM2wtNC00eiIgLz48L2c+CjxnIGlkPSJ0ZXh0c21zIj48cGF0aCBkPSJNMjAgMkg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMjJsNC00aDE0YzEuMSAwIDItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6TTkgMTFIN1Y5aDJ2MnptNCAwaC0yVjloMnYyem00IDBoLTJWOWgydjJ6IiAvPjwvZz4KPGcgaWQ9InZvaWNlbWFpbCI+PHBhdGggZD0iTTE4LjUgNkMxNS40NiA2IDEzIDguNDYgMTMgMTEuNWMwIDEuMzMuNDcgMi41NSAxLjI2IDMuNUg5Ljc0Yy43OS0uOTUgMS4yNi0yLjE3IDEuMjYtMy41QzExIDguNDYgOC41NCA2IDUuNSA2UzAgOC40NiAwIDExLjUgMi40NiAxNyA1LjUgMTdoMTNjMy4wNCAwIDUuNS0yLjQ2IDUuNS01LjVTMjEuNTQgNiAxOC41IDZ6bS0xMyA5QzMuNTcgMTUgMiAxMy40MyAyIDExLjVTMy41NyA4IDUuNSA4IDkgOS41NyA5IDExLjUgNy40MyAxNSA1LjUgMTV6bTEzIDBjLTEuOTMgMC0zLjUtMS41Ny0zLjUtMy41UzE2LjU3IDggMTguNSA4IDIyIDkuNTcgMjIgMTEuNSAyMC40MyAxNSAxOC41IDE1eiIgLz48L2c+CjxnIGlkPSJ2cG4ta2V5Ij48cGF0aCBkPSJNMTIuNjUgMTBDMTEuODMgNy42NyA5LjYxIDYgNyA2Yy0zLjMxIDAtNiAyLjY5LTYgNnMyLjY5IDYgNiA2YzIuNjEgMCA0LjgzLTEuNjcgNS42NS00SDE3djRoNHYtNGgydi00SDEyLjY1ek03IDE0Yy0xLjEgMC0yLS45LTItMnMuOS0yIDItMiAyIC45IDIgMi0uOSAyLTIgMnoiIC8+PC9nPgo8L2RlZnM+PC9zdmc+CjwvaXJvbi1pY29uc2V0LXN2Zz4KCgoKCjxpcm9uLWljb25zZXQtc3ZnIG5hbWU9ImVkaXRvciIgc2l6ZT0iMjQiPgo8c3ZnPjxkZWZzPgo8ZyBpZD0iYXR0YWNoLWZpbGUiPjxwYXRoIGQ9Ik0xNi41IDZ2MTEuNWMwIDIuMjEtMS43OSA0LTQgNHMtNC0xLjc5LTQtNFY1YzAtMS4zOCAxLjEyLTIuNSAyLjUtMi41czIuNSAxLjEyIDIuNSAyLjV2MTAuNWMwIC41NS0uNDUgMS0xIDFzLTEtLjQ1LTEtMVY2SDEwdjkuNWMwIDEuMzggMS4xMiAyLjUgMi41IDIuNXMyLjUtMS4xMiAyLjUtMi41VjVjMC0yLjIxLTEuNzktNC00LTRTNyAyLjc5IDcgNXYxMi41YzAgMy4wNCAyLjQ2IDUuNSA1LjUgNS41czUuNS0yLjQ2IDUuNS01LjVWNmgtMS41eiIgLz48L2c+CjxnIGlkPSJhdHRhY2gtbW9uZXkiPjxwYXRoIGQ9Ik0xMS44IDEwLjljLTIuMjctLjU5LTMtMS4yLTMtMi4xNSAwLTEuMDkgMS4wMS0xLjg1IDIuNy0xLjg1IDEuNzggMCAyLjQ0Ljg1IDIuNSAyLjFoMi4yMWMtLjA3LTEuNzItMS4xMi0zLjMtMy4yMS0zLjgxVjNoLTN2Mi4xNmMtMS45NC40Mi0zLjUgMS42OC0zLjUgMy42MSAwIDIuMzEgMS45MSAzLjQ2IDQuNyA0LjEzIDIuNS42IDMgMS40OCAzIDIuNDEgMCAuNjktLjQ5IDEuNzktMi43IDEuNzktMi4wNiAwLTIuODctLjkyLTIuOTgtMi4xaC0yLjJjLjEyIDIuMTkgMS43NiAzLjQyIDMuNjggMy44M1YyMWgzdi0yLjE1YzEuOTUtLjM3IDMuNS0xLjUgMy41LTMuNTUgMC0yLjg0LTIuNDMtMy44MS00LjctNC40eiIgLz48L2c+CjxnIGlkPSJib3JkZXItYWxsIj48cGF0aCBkPSJNMyAzdjE4aDE4VjNIM3ptOCAxNkg1di02aDZ2NnptMC04SDVWNWg2djZ6bTggOGgtNnYtNmg2djZ6bTAtOGgtNlY1aDZ2NnoiIC8+PC9nPgo8ZyBpZD0iYm9yZGVyLWJvdHRvbSI+PHBhdGggZD0iTTkgMTFIN3YyaDJ2LTJ6bTQgNGgtMnYyaDJ2LTJ6TTkgM0g3djJoMlYzem00IDhoLTJ2Mmgydi0yek01IDNIM3YyaDJWM3ptOCA0aC0ydjJoMlY3em00IDRoLTJ2Mmgydi0yem0tNC04aC0ydjJoMlYzem00IDBoLTJ2MmgyVjN6bTIgMTBoMnYtMmgtMnYyem0wIDRoMnYtMmgtMnYyek01IDdIM3YyaDJWN3ptMTQtNHYyaDJWM2gtMnptMCA2aDJWN2gtMnYyek01IDExSDN2Mmgydi0yek0zIDIxaDE4di0ySDN2MnptMi02SDN2Mmgydi0yeiIgLz48L2c+CjxnIGlkPSJib3JkZXItY2xlYXIiPjxwYXRoIGQ9Ik03IDVoMlYzSDd2MnptMCA4aDJ2LTJIN3Yyem0wIDhoMnYtMkg3djJ6bTQtNGgydi0yaC0ydjJ6bTAgNGgydi0yaC0ydjJ6bS04IDBoMnYtMkgzdjJ6bTAtNGgydi0ySDN2MnptMC00aDJ2LTJIM3Yyem0wLTRoMlY3SDN2MnptMC00aDJWM0gzdjJ6bTggOGgydi0yaC0ydjJ6bTggNGgydi0yaC0ydjJ6bTAtNGgydi0yaC0ydjJ6bTAgOGgydi0yaC0ydjJ6bTAtMTJoMlY3aC0ydjJ6bS04IDBoMlY3aC0ydjJ6bTgtNnYyaDJWM2gtMnptLTggMmgyVjNoLTJ2MnptNCAxNmgydi0yaC0ydjJ6bTAtOGgydi0yaC0ydjJ6bTAtOGgyVjNoLTJ2MnoiIC8+PC9nPgo8ZyBpZD0iYm9yZGVyLWNvbG9yIj48cGF0aCBkPSJNMTcuNzUgN0wxNCAzLjI1bC0xMCAxMFYxN2gzLjc1bDEwLTEwem0yLjk2LTIuOTZjLjM5LS4zOS4zOS0xLjAyIDAtMS40MUwxOC4zNy4yOWMtLjM5LS4zOS0xLjAyLS4zOS0xLjQxIDBMMTUgMi4yNSAxOC43NSA2bDEuOTYtMS45NnoiIC8+PHBhdGggZmlsbC1vcGFjaXR5PSIuMzYiIGQ9Ik0wIDIwaDI0djRIMHoiIC8+PC9nPgo8ZyBpZD0iYm9yZGVyLWhvcml6b250YWwiPjxwYXRoIGQ9Ik0zIDIxaDJ2LTJIM3Yyek01IDdIM3YyaDJWN3pNMyAxN2gydi0ySDN2MnptNCA0aDJ2LTJIN3Yyek01IDNIM3YyaDJWM3ptNCAwSDd2MmgyVjN6bTggMGgtMnYyaDJWM3ptLTQgNGgtMnYyaDJWN3ptMC00aC0ydjJoMlYzem02IDE0aDJ2LTJoLTJ2MnptLTggNGgydi0yaC0ydjJ6bS04LThoMTh2LTJIM3Yyek0xOSAzdjJoMlYzaC0yem0wIDZoMlY3aC0ydjJ6bS04IDhoMnYtMmgtMnYyem00IDRoMnYtMmgtMnYyem00IDBoMnYtMmgtMnYyeiIgLz48L2c+CjxnIGlkPSJib3JkZXItaW5uZXIiPjxwYXRoIGQ9Ik0zIDIxaDJ2LTJIM3Yyem00IDBoMnYtMkg3djJ6TTUgN0gzdjJoMlY3ek0zIDE3aDJ2LTJIM3Yyek05IDNIN3YyaDJWM3pNNSAzSDN2MmgyVjN6bTEyIDBoLTJ2MmgyVjN6bTIgNmgyVjdoLTJ2MnptMC02djJoMlYzaC0yem0tNCAxOGgydi0yaC0ydjJ6TTEzIDNoLTJ2OEgzdjJoOHY4aDJ2LThoOHYtMmgtOFYzem02IDE4aDJ2LTJoLTJ2MnptMC00aDJ2LTJoLTJ2MnoiIC8+PC9nPgo8ZyBpZD0iYm9yZGVyLWxlZnQiPjxwYXRoIGQ9Ik0xMSAyMWgydi0yaC0ydjJ6bTAtNGgydi0yaC0ydjJ6bTAtMTJoMlYzaC0ydjJ6bTAgNGgyVjdoLTJ2MnptMCA0aDJ2LTJoLTJ2MnptLTQgOGgydi0ySDd2MnpNNyA1aDJWM0g3djJ6bTAgOGgydi0ySDd2MnptLTQgOGgyVjNIM3YxOHpNMTkgOWgyVjdoLTJ2MnptLTQgMTJoMnYtMmgtMnYyem00LTRoMnYtMmgtMnYyem0wLTE0djJoMlYzaC0yem0wIDEwaDJ2LTJoLTJ2MnptMCA4aDJ2LTJoLTJ2MnptLTQtOGgydi0yaC0ydjJ6bTAtOGgyVjNoLTJ2MnoiIC8+PC9nPgo8ZyBpZD0iYm9yZGVyLW91dGVyIj48cGF0aCBkPSJNMTMgN2gtMnYyaDJWN3ptMCA0aC0ydjJoMnYtMnptNCAwaC0ydjJoMnYtMnpNMyAzdjE4aDE4VjNIM3ptMTYgMTZINVY1aDE0djE0em0tNi00aC0ydjJoMnYtMnptLTQtNEg3djJoMnYtMnoiIC8+PC9nPgo8ZyBpZD0iYm9yZGVyLXJpZ2h0Ij48cGF0aCBkPSJNNyAyMWgydi0ySDd2MnpNMyA1aDJWM0gzdjJ6bTQgMGgyVjNIN3Yyem0wIDhoMnYtMkg3djJ6bS00IDhoMnYtMkgzdjJ6bTggMGgydi0yaC0ydjJ6bS04LThoMnYtMkgzdjJ6bTAgNGgydi0ySDN2MnptMC04aDJWN0gzdjJ6bTggOGgydi0yaC0ydjJ6bTQtNGgydi0yaC0ydjJ6bTQtMTB2MThoMlYzaC0yem0tNCAxOGgydi0yaC0ydjJ6bTAtMTZoMlYzaC0ydjJ6bS00IDhoMnYtMmgtMnYyem0wLThoMlYzaC0ydjJ6bTAgNGgyVjdoLTJ2MnoiIC8+PC9nPgo8ZyBpZD0iYm9yZGVyLXN0eWxlIj48cGF0aCBkPSJNMTUgMjFoMnYtMmgtMnYyem00IDBoMnYtMmgtMnYyek03IDIxaDJ2LTJIN3Yyem00IDBoMnYtMmgtMnYyem04LTRoMnYtMmgtMnYyem0wLTRoMnYtMmgtMnYyek0zIDN2MThoMlY1aDE2VjNIM3ptMTYgNmgyVjdoLTJ2MnoiIC8+PC9nPgo8ZyBpZD0iYm9yZGVyLXRvcCI+PHBhdGggZD0iTTcgMjFoMnYtMkg3djJ6bTAtOGgydi0ySDd2MnptNCAwaDJ2LTJoLTJ2MnptMCA4aDJ2LTJoLTJ2MnptLTgtNGgydi0ySDN2MnptMCA0aDJ2LTJIM3Yyem0wLThoMnYtMkgzdjJ6bTAtNGgyVjdIM3Yyem04IDhoMnYtMmgtMnYyem04LThoMlY3aC0ydjJ6bTAgNGgydi0yaC0ydjJ6TTMgM3YyaDE4VjNIM3ptMTYgMTRoMnYtMmgtMnYyem0tNCA0aDJ2LTJoLTJ2MnpNMTEgOWgyVjdoLTJ2MnptOCAxMmgydi0yaC0ydjJ6bS00LThoMnYtMmgtMnYyeiIgLz48L2c+CjxnIGlkPSJib3JkZXItdmVydGljYWwiPjxwYXRoIGQ9Ik0zIDloMlY3SDN2MnptMC00aDJWM0gzdjJ6bTQgMTZoMnYtMkg3djJ6bTAtOGgydi0ySDd2MnptLTQgMGgydi0ySDN2MnptMCA4aDJ2LTJIM3Yyem0wLTRoMnYtMkgzdjJ6TTcgNWgyVjNIN3Yyem0xMiAxMmgydi0yaC0ydjJ6bS04IDRoMlYzaC0ydjE4em04IDBoMnYtMmgtMnYyem0wLThoMnYtMmgtMnYyem0wLTEwdjJoMlYzaC0yem0wIDZoMlY3aC0ydjJ6bS00LTRoMlYzaC0ydjJ6bTAgMTZoMnYtMmgtMnYyem0wLThoMnYtMmgtMnYyeiIgLz48L2c+CjxnIGlkPSJidWJibGUtY2hhcnQiPjxjaXJjbGUgY3g9IjcuMiIgY3k9IjE0LjQiIHI9IjMuMiIgLz48Y2lyY2xlIGN4PSIxNC44IiBjeT0iMTgiIHI9IjIiIC8+PGNpcmNsZSBjeD0iMTUuMiIgY3k9IjguOCIgcj0iNC44IiAvPjwvZz4KPGcgaWQ9ImRyYWctaGFuZGxlIj48cGF0aCBkPSJNMjAgOUg0djJoMTZWOXpNNCAxNWgxNnYtMkg0djJ6IiAvPjwvZz4KPGcgaWQ9ImZvcm1hdC1hbGlnbi1jZW50ZXIiPjxwYXRoIGQ9Ik03IDE1djJoMTB2LTJIN3ptLTQgNmgxOHYtMkgzdjJ6bTAtOGgxOHYtMkgzdjJ6bTQtNnYyaDEwVjdIN3pNMyAzdjJoMThWM0gzeiIgLz48L2c+CjxnIGlkPSJmb3JtYXQtYWxpZ24tanVzdGlmeSI+PHBhdGggZD0iTTMgMjFoMTh2LTJIM3Yyem0wLTRoMTh2LTJIM3Yyem0wLTRoMTh2LTJIM3Yyem0wLTRoMThWN0gzdjJ6bTAtNnYyaDE4VjNIM3oiIC8+PC9nPgo8ZyBpZD0iZm9ybWF0LWFsaWduLWxlZnQiPjxwYXRoIGQ9Ik0xNSAxNUgzdjJoMTJ2LTJ6bTAtOEgzdjJoMTJWN3pNMyAxM2gxOHYtMkgzdjJ6bTAgOGgxOHYtMkgzdjJ6TTMgM3YyaDE4VjNIM3oiIC8+PC9nPgo8ZyBpZD0iZm9ybWF0LWFsaWduLXJpZ2h0Ij48cGF0aCBkPSJNMyAyMWgxOHYtMkgzdjJ6bTYtNGgxMnYtMkg5djJ6bS02LTRoMTh2LTJIM3Yyem02LTRoMTJWN0g5djJ6TTMgM3YyaDE4VjNIM3oiIC8+PC9nPgo8ZyBpZD0iZm9ybWF0LWJvbGQiPjxwYXRoIGQ9Ik0xNS42IDEwLjc5Yy45Ny0uNjcgMS42NS0xLjc3IDEuNjUtMi43OSAwLTIuMjYtMS43NS00LTQtNEg3djE0aDcuMDRjMi4wOSAwIDMuNzEtMS43IDMuNzEtMy43OSAwLTEuNTItLjg2LTIuODItMi4xNS0zLjQyek0xMCA2LjVoM2MuODMgMCAxLjUuNjcgMS41IDEuNXMtLjY3IDEuNS0xLjUgMS41aC0zdi0zem0zLjUgOUgxMHYtM2gzLjVjLjgzIDAgMS41LjY3IDEuNSAxLjVzLS42NyAxLjUtMS41IDEuNXoiIC8+PC9nPgo8ZyBpZD0iZm9ybWF0LWNsZWFyIj48cGF0aCBkPSJNMy4yNyA1TDIgNi4yN2w2Ljk3IDYuOTdMNi41IDE5aDNsMS41Ny0zLjY2TDE2LjczIDIxIDE4IDE5LjczIDMuNTUgNS4yNyAzLjI3IDV6TTYgNXYuMThMOC44MiA4aDIuNGwtLjcyIDEuNjggMi4xIDIuMUwxNC4yMSA4SDIwVjVINnoiIC8+PC9nPgo8ZyBpZD0iZm9ybWF0LWNvbG9yLWZpbGwiPjxwYXRoIGQ9Ik0xNi41NiA4Ljk0TDcuNjIgMCA2LjIxIDEuNDFsMi4zOCAyLjM4LTUuMTUgNS4xNWMtLjU5LjU5LS41OSAxLjU0IDAgMi4xMmw1LjUgNS41Yy4yOS4yOS42OC40NCAxLjA2LjQ0cy43Ny0uMTUgMS4wNi0uNDRsNS41LTUuNWMuNTktLjU4LjU5LTEuNTMgMC0yLjEyek01LjIxIDEwTDEwIDUuMjEgMTQuNzkgMTBINS4yMXpNMTkgMTEuNXMtMiAyLjE3LTIgMy41YzAgMS4xLjkgMiAyIDJzMi0uOSAyLTJjMC0xLjMzLTItMy41LTItMy41eiIgLz48cGF0aCBmaWxsLW9wYWNpdHk9Ii4zNiIgZD0iTTAgMjBoMjR2NEgweiIgLz48L2c+CjxnIGlkPSJmb3JtYXQtY29sb3ItcmVzZXQiPjxwYXRoIGQ9Ik0xOCAxNGMwLTQtNi0xMC44LTYtMTAuOHMtMS4zMyAxLjUxLTIuNzMgMy41Mmw4LjU5IDguNTljLjA5LS40Mi4xNC0uODYuMTQtMS4zMXptLS44OCAzLjEyTDEyLjUgMTIuNSA1LjI3IDUuMjcgNCA2LjU1bDMuMzIgMy4zMkM2LjU1IDExLjMyIDYgMTIuNzkgNiAxNGMwIDMuMzEgMi42OSA2IDYgNiAxLjUyIDAgMi45LS41NyAzLjk2LTEuNWwyLjYzIDIuNjMgMS4yNy0xLjI3LTIuNzQtMi43NHoiIC8+PC9nPgo8ZyBpZD0iZm9ybWF0LWNvbG9yLXRleHQiPjxwYXRoIGZpbGwtb3BhY2l0eT0iLjM2IiBkPSJNMCAyMGgyNHY0SDB6IiAvPjxwYXRoIGQ9Ik0xMSAzTDUuNSAxN2gyLjI1bDEuMTItM2g2LjI1bDEuMTIgM2gyLjI1TDEzIDNoLTJ6bS0xLjM4IDlMMTIgNS42NyAxNC4zOCAxMkg5LjYyeiIgLz48L2c+CjxnIGlkPSJmb3JtYXQtaW5kZW50LWRlY3JlYXNlIj48cGF0aCBkPSJNMTEgMTdoMTB2LTJIMTF2MnptLTgtNWw0IDRWOGwtNCA0em0wIDloMTh2LTJIM3Yyek0zIDN2MmgxOFYzSDN6bTggNmgxMFY3SDExdjJ6bTAgNGgxMHYtMkgxMXYyeiIgLz48L2c+CjxnIGlkPSJmb3JtYXQtaW5kZW50LWluY3JlYXNlIj48cGF0aCBkPSJNMyAyMWgxOHYtMkgzdjJ6TTMgOHY4bDQtNC00LTR6bTggOWgxMHYtMkgxMXYyek0zIDN2MmgxOFYzSDN6bTggNmgxMFY3SDExdjJ6bTAgNGgxMHYtMkgxMXYyeiIgLz48L2c+CjxnIGlkPSJmb3JtYXQtaXRhbGljIj48cGF0aCBkPSJNMTAgNHYzaDIuMjFsLTMuNDIgOEg2djNoOHYtM2gtMi4yMWwzLjQyLThIMThWNHoiIC8+PC9nPgo8ZyBpZD0iZm9ybWF0LWxpbmUtc3BhY2luZyI+PHBhdGggZD0iTTYgN2gyLjVMNSAzLjUgMS41IDdINHYxMEgxLjVMNSAyMC41IDguNSAxN0g2Vjd6bTQtMnYyaDEyVjVIMTB6bTAgMTRoMTJ2LTJIMTB2MnptMC02aDEydi0ySDEwdjJ6IiAvPjwvZz4KPGcgaWQ9ImZvcm1hdC1saXN0LWJ1bGxldGVkIj48cGF0aCBkPSJNNCAxMC41Yy0uODMgMC0xLjUuNjctMS41IDEuNXMuNjcgMS41IDEuNSAxLjUgMS41LS42NyAxLjUtMS41LS42Ny0xLjUtMS41LTEuNXptMC02Yy0uODMgMC0xLjUuNjctMS41IDEuNVMzLjE3IDcuNSA0IDcuNSA1LjUgNi44MyA1LjUgNiA0LjgzIDQuNSA0IDQuNXptMCAxMmMtLjgzIDAtMS41LjY4LTEuNSAxLjVzLjY4IDEuNSAxLjUgMS41IDEuNS0uNjggMS41LTEuNS0uNjctMS41LTEuNS0xLjV6TTcgMTloMTR2LTJIN3Yyem0wLTZoMTR2LTJIN3Yyem0wLTh2MmgxNFY1SDd6IiAvPjwvZz4KPGcgaWQ9ImZvcm1hdC1saXN0LW51bWJlcmVkIj48cGF0aCBkPSJNMiAxN2gydi41SDN2MWgxdi41SDJ2MWgzdi00SDJ2MXptMS05aDFWNEgydjFoMXYzem0tMSAzaDEuOEwyIDEzLjF2LjloM3YtMUgzLjJMNSAxMC45VjEwSDJ2MXptNS02djJoMTRWNUg3em0wIDE0aDE0di0ySDd2MnptMC02aDE0di0ySDd2MnoiIC8+PC9nPgo8ZyBpZD0iZm9ybWF0LXBhaW50Ij48cGF0aCBkPSJNMTggNFYzYzAtLjU1LS40NS0xLTEtMUg1Yy0uNTUgMC0xIC40NS0xIDF2NGMwIC41NS40NSAxIDEgMWgxMmMuNTUgMCAxLS40NSAxLTFWNmgxdjRIOXYxMWMwIC41NS40NSAxIDEgMWgyYy41NSAwIDEtLjQ1IDEtMXYtOWg4VjRoLTN6IiAvPjwvZz4KPGcgaWQ9ImZvcm1hdC1xdW90ZSI+PHBhdGggZD0iTTYgMTdoM2wyLTRWN0g1djZoM3ptOCAwaDNsMi00VjdoLTZ2NmgzeiIgLz48L2c+CjxnIGlkPSJmb3JtYXQtc2hhcGVzIj48cGF0aCBkPSJNMjMgN1YxaC02djJIN1YxSDF2NmgydjEwSDF2Nmg2di0yaDEwdjJoNnYtNmgtMlY3aDJ6TTMgM2gydjJIM1Yzem0yIDE4SDN2LTJoMnYyem0xMi0ySDd2LTJINVY3aDJWNWgxMHYyaDJ2MTBoLTJ2MnptNCAyaC0ydi0yaDJ2MnpNMTkgNVYzaDJ2MmgtMnptLTUuMjcgOWgtMy40OWwtLjczIDJINy44OWwzLjQtOWgxLjRsMy40MSA5aC0xLjYzbC0uNzQtMnptLTMuMDQtMS4yNmgyLjYxTDEyIDguOTFsLTEuMzEgMy44M3oiIC8+PC9nPgo8ZyBpZD0iZm9ybWF0LXNpemUiPjxwYXRoIGQ9Ik05IDR2M2g1djEyaDNWN2g1VjRIOXptLTYgOGgzdjdoM3YtN2gzVjlIM3YzeiIgLz48L2c+CjxnIGlkPSJmb3JtYXQtc3RyaWtldGhyb3VnaCI+PHBhdGggZD0iTTEwIDE5aDR2LTNoLTR2M3pNNSA0djNoNXYzaDRWN2g1VjRINXpNMyAxNGgxOHYtMkgzdjJ6IiAvPjwvZz4KPGcgaWQ9ImZvcm1hdC10ZXh0ZGlyZWN0aW9uLWwtdG8tciI+PHBhdGggZD0iTTkgMTB2NWgyVjRoMnYxMWgyVjRoMlYySDlDNi43OSAyIDUgMy43OSA1IDZzMS43OSA0IDQgNHptMTIgOGwtNC00djNINXYyaDEydjNsNC00eiIgLz48L2c+CjxnIGlkPSJmb3JtYXQtdGV4dGRpcmVjdGlvbi1yLXRvLWwiPjxwYXRoIGQ9Ik0xMCAxMHY1aDJWNGgydjExaDJWNGgyVjJoLThDNy43OSAyIDYgMy43OSA2IDZzMS43OSA0IDQgNHptLTIgN3YtM2wtNCA0IDQgNHYtM2gxMnYtMkg4eiIgLz48L2c+CjxnIGlkPSJmb3JtYXQtdW5kZXJsaW5lZCI+PHBhdGggZD0iTTEyIDE3YzMuMzEgMCA2LTIuNjkgNi02VjNoLTIuNXY4YzAgMS45My0xLjU3IDMuNS0zLjUgMy41UzguNSAxMi45MyA4LjUgMTFWM0g2djhjMCAzLjMxIDIuNjkgNiA2IDZ6bS03IDJ2MmgxNHYtMkg1eiIgLz48L2c+CjxnIGlkPSJmdW5jdGlvbnMiPjxwYXRoIGQ9Ik0xOCA0SDZ2Mmw2LjUgNkw2IDE4djJoMTJ2LTNoLTdsNS01LTUtNWg3eiIgLz48L2c+CjxnIGlkPSJoaWdobGlnaHQiPjxwYXRoIGQ9Ik02IDE0bDMgM3Y1aDZ2LTVsMy0zVjlINnptNS0xMmgydjNoLTJ6TTMuNSA1Ljg3NUw0LjkxNCA0LjQ2bDIuMTIgMi4xMjJMNS42MiA3Ljk5N3ptMTMuNDYuNzFsMi4xMjMtMi4xMiAxLjQxNCAxLjQxNEwxOC4zNzUgOHoiIC8+PC9nPgo8ZyBpZD0iaW5zZXJ0LWNoYXJ0Ij48cGF0aCBkPSJNMTkgM0g1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6TTkgMTdIN3YtN2gydjd6bTQgMGgtMlY3aDJ2MTB6bTQgMGgtMnYtNGgydjR6IiAvPjwvZz4KPGcgaWQ9Imluc2VydC1jb21tZW50Ij48cGF0aCBkPSJNMjAgMkg0Yy0xLjEgMC0yIC45LTIgMnYxMmMwIDEuMS45IDIgMiAyaDE0bDQgNFY0YzAtMS4xLS45LTItMi0yem0tMiAxMkg2di0yaDEydjJ6bTAtM0g2VjloMTJ2MnptMC0zSDZWNmgxMnYyeiIgLz48L2c+CjxnIGlkPSJpbnNlcnQtZHJpdmUtZmlsZSI+PHBhdGggZD0iTTYgMmMtMS4xIDAtMS45OS45LTEuOTkgMkw0IDIwYzAgMS4xLjg5IDIgMS45OSAySDE4YzEuMSAwIDItLjkgMi0yVjhsLTYtNkg2em03IDdWMy41TDE4LjUgOUgxM3oiIC8+PC9nPgo8ZyBpZD0iaW5zZXJ0LWVtb3RpY29uIj48cGF0aCBkPSJNMTEuOTkgMkM2LjQ3IDIgMiA2LjQ4IDIgMTJzNC40NyAxMCA5Ljk5IDEwQzE3LjUyIDIyIDIyIDE3LjUyIDIyIDEyUzE3LjUyIDIgMTEuOTkgMnpNMTIgMjBjLTQuNDIgMC04LTMuNTgtOC04czMuNTgtOCA4LTggOCAzLjU4IDggOC0zLjU4IDgtOCA4em0zLjUtOWMuODMgMCAxLjUtLjY3IDEuNS0xLjVTMTYuMzMgOCAxNS41IDggMTQgOC42NyAxNCA5LjVzLjY3IDEuNSAxLjUgMS41em0tNyAwYy44MyAwIDEuNS0uNjcgMS41LTEuNVM5LjMzIDggOC41IDggNyA4LjY3IDcgOS41IDcuNjcgMTEgOC41IDExem0zLjUgNi41YzIuMzMgMCA0LjMxLTEuNDYgNS4xMS0zLjVINi44OWMuOCAyLjA0IDIuNzggMy41IDUuMTEgMy41eiIgLz48L2c+CjxnIGlkPSJpbnNlcnQtaW52aXRhdGlvbiI+PHBhdGggZD0iTTE3IDEyaC01djVoNXYtNXpNMTYgMXYySDhWMUg2djJINWMtMS4xMSAwLTEuOTkuOS0xLjk5IDJMMyAxOWMwIDEuMS44OSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yaC0xVjFoLTJ6bTMgMThINVY4aDE0djExeiIgLz48L2c+CjxnIGlkPSJpbnNlcnQtbGluayI+PHBhdGggZD0iTTMuOSAxMmMwLTEuNzEgMS4zOS0zLjEgMy4xLTMuMWg0VjdIN2MtMi43NiAwLTUgMi4yNC01IDVzMi4yNCA1IDUgNWg0di0xLjlIN2MtMS43MSAwLTMuMS0xLjM5LTMuMS0zLjF6TTggMTNoOHYtMkg4djJ6bTktNmgtNHYxLjloNGMxLjcxIDAgMy4xIDEuMzkgMy4xIDMuMXMtMS4zOSAzLjEtMy4xIDMuMWgtNFYxN2g0YzIuNzYgMCA1LTIuMjQgNS01cy0yLjI0LTUtNS01eiIgLz48L2c+CjxnIGlkPSJpbnNlcnQtcGhvdG8iPjxwYXRoIGQ9Ik0yMSAxOVY1YzAtMS4xLS45LTItMi0ySDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJ6TTguNSAxMy41bDIuNSAzLjAxTDE0LjUgMTJsNC41IDZINWwzLjUtNC41eiIgLz48L2c+CjxnIGlkPSJsaW5lYXItc2NhbGUiPjxwYXRoIGQ9Ik0xOS41IDkuNWMtMS4wMyAwLTEuOS42Mi0yLjI5IDEuNWgtMi45MmMtLjM5LS44OC0xLjI2LTEuNS0yLjI5LTEuNXMtMS45LjYyLTIuMjkgMS41SDYuNzljLS4zOS0uODgtMS4yNi0xLjUtMi4yOS0xLjVDMy4xMiA5LjUgMiAxMC42MiAyIDEyczEuMTIgMi41IDIuNSAyLjVjMS4wMyAwIDEuOS0uNjIgMi4yOS0xLjVoMi45MmMuMzkuODggMS4yNiAxLjUgMi4yOSAxLjVzMS45LS42MiAyLjI5LTEuNWgyLjkyYy4zOS44OCAxLjI2IDEuNSAyLjI5IDEuNSAxLjM4IDAgMi41LTEuMTIgMi41LTIuNXMtMS4xMi0yLjUtMi41LTIuNXoiIC8+PC9nPgo8ZyBpZD0ibWVyZ2UtdHlwZSI+PHBhdGggZD0iTTE3IDIwLjQxTDE4LjQxIDE5IDE1IDE1LjU5IDEzLjU5IDE3IDE3IDIwLjQxek03LjUgOEgxMXY1LjU5TDUuNTkgMTkgNyAyMC40MWw2LTZWOGgzLjVMMTIgMy41IDcuNSA4eiIgLz48L2c+CjxnIGlkPSJtb2RlLWNvbW1lbnQiPjxwYXRoIGQ9Ik0yMS45OSA0YzAtMS4xLS44OS0yLTEuOTktMkg0Yy0xLjEgMC0yIC45LTIgMnYxMmMwIDEuMS45IDIgMiAyaDE0bDQgNC0uMDEtMTh6IiAvPjwvZz4KPGcgaWQ9Im1vZGUtZWRpdCI+PHBhdGggZD0iTTMgMTcuMjVWMjFoMy43NUwxNy44MSA5Ljk0bC0zLjc1LTMuNzVMMyAxNy4yNXpNMjAuNzEgNy4wNGMuMzktLjM5LjM5LTEuMDIgMC0xLjQxbC0yLjM0LTIuMzRjLS4zOS0uMzktMS4wMi0uMzktMS40MSAwbC0xLjgzIDEuODMgMy43NSAzLjc1IDEuODMtMS44M3oiIC8+PC9nPgo8ZyBpZD0ibW9uZXRpemF0aW9uLW9uIj48cGF0aCBkPSJNMTIgMkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptMS40MSAxNi4wOVYyMGgtMi42N3YtMS45M2MtMS43MS0uMzYtMy4xNi0xLjQ2LTMuMjctMy40aDEuOTZjLjEgMS4wNS44MiAxLjg3IDIuNjUgMS44NyAxLjk2IDAgMi40LS45OCAyLjQtMS41OSAwLS44My0uNDQtMS42MS0yLjY3LTIuMTQtMi40OC0uNi00LjE4LTEuNjItNC4xOC0zLjY3IDAtMS43MiAxLjM5LTIuODQgMy4xMS0zLjIxVjRoMi42N3YxLjk1YzEuODYuNDUgMi43OSAxLjg2IDIuODUgMy4zOUgxNC4zYy0uMDUtMS4xMS0uNjQtMS44Ny0yLjIyLTEuODctMS41IDAtMi40LjY4LTIuNCAxLjY0IDAgLjg0LjY1IDEuMzkgMi42NyAxLjkxczQuMTggMS4zOSA0LjE4IDMuOTFjLS4wMSAxLjgzLTEuMzggMi44My0zLjEyIDMuMTZ6IiAvPjwvZz4KPGcgaWQ9Im1vbmV5LW9mZiI+PHBhdGggZD0iTTEyLjUgNi45YzEuNzggMCAyLjQ0Ljg1IDIuNSAyLjFoMi4yMWMtLjA3LTEuNzItMS4xMi0zLjMtMy4yMS0zLjgxVjNoLTN2Mi4xNmMtLjUzLjEyLTEuMDMuMy0xLjQ4LjU0bDEuNDcgMS40N2MuNDEtLjE3LjkxLS4yNyAxLjUxLS4yN3pNNS4zMyA0LjA2TDQuMDYgNS4zMyA3LjUgOC43N2MwIDIuMDggMS41NiAzLjIxIDMuOTEgMy45MWwzLjUxIDMuNTFjLS4zNC40OC0xLjA1LjkxLTIuNDIuOTEtMi4wNiAwLTIuODctLjkyLTIuOTgtMi4xaC0yLjJjLjEyIDIuMTkgMS43NiAzLjQyIDMuNjggMy44M1YyMWgzdi0yLjE1Yy45Ni0uMTggMS44Mi0uNTUgMi40NS0xLjEybDIuMjIgMi4yMiAxLjI3LTEuMjdMNS4zMyA0LjA2eiIgLz48L2c+CjxnIGlkPSJtdWx0aWxpbmUtY2hhcnQiPjxwYXRoIGQ9Ik0yMiA2LjkybC0xLjQxLTEuNDEtMi44NSAzLjIxQzE1LjY4IDYuNCAxMi44MyA1IDkuNjEgNSA2LjcyIDUgNC4wNyA2LjE2IDIgOGwxLjQyIDEuNDJDNS4xMiA3LjkzIDcuMjcgNyA5LjYxIDdjMi43NCAwIDUuMDkgMS4yNiA2Ljc3IDMuMjRsLTIuODggMy4yNC00LTRMMiAxNi45OWwxLjUgMS41IDYtNi4wMSA0IDQgNC4wNS00LjU1Yy43NSAxLjM1IDEuMjUgMi45IDEuNDQgNC41NUgyMWMtLjIyLTIuMy0uOTUtNC4zOS0yLjA0LTYuMTRMMjIgNi45MnoiIC8+PC9nPgo8ZyBpZD0icGllLWNoYXJ0Ij48cGF0aCBkPSJNMTEgMnYyMGMtNS4wNy0uNS05LTQuNzktOS0xMHMzLjkzLTkuNSA5LTEwem0yLjAzIDB2OC45OUgyMmMtLjQ3LTQuNzQtNC4yNC04LjUyLTguOTctOC45OXptMCAxMS4wMVYyMmM0Ljc0LS40NyA4LjUtNC4yNSA4Ljk3LTguOTloLTguOTd6IiAvPjwvZz4KPGcgaWQ9InBpZS1jaGFydC1vdXRsaW5lZCI+PHBhdGggZD0iTTEyIDJDNi41IDIgMiA2LjUgMiAxMnM0LjUgMTAgMTAgMTAgMTAtNC41IDEwLTEwUzE3LjUgMiAxMiAyem0xIDIuMDdjMy42MS40NSA2LjQ4IDMuMzMgNi45MyA2LjkzSDEzVjQuMDd6TTQgMTJjMC00LjA2IDMuMDctNy40NCA3LTcuOTN2MTUuODdjLTMuOTMtLjUtNy0zLjg4LTctNy45NHptOSA3LjkzVjEzaDYuOTNjLS40NSAzLjYxLTMuMzIgNi40OC02LjkzIDYuOTN6IiAvPjwvZz4KPGcgaWQ9InB1Ymxpc2giPjxwYXRoIGQ9Ik01IDR2MmgxNFY0SDV6bTAgMTBoNHY2aDZ2LTZoNGwtNy03LTcgN3oiIC8+PC9nPgo8ZyBpZD0ic2hvcnQtdGV4dCI+PHBhdGggZD0iTTQgOWgxNnYySDR6bTAgNGgxMHYySDR6IiAvPjwvZz4KPGcgaWQ9InNob3ctY2hhcnQiPjxwYXRoIGQ9Ik0zLjUgMTguNDlsNi02LjAxIDQgNEwyMiA2LjkybC0xLjQxLTEuNDEtNy4wOSA3Ljk3LTQtNEwyIDE2Ljk5eiIgLz48L2c+CjxnIGlkPSJzcGFjZS1iYXIiPjxwYXRoIGQ9Ik0xOCA5djRINlY5SDR2NmgxNlY5eiIgLz48L2c+CjxnIGlkPSJzdHJpa2V0aHJvdWdoLXMiPjxwYXRoIGQ9Ik03LjI0IDguNzVjLS4yNi0uNDgtLjM5LTEuMDMtLjM5LTEuNjcgMC0uNjEuMTMtMS4xNi40LTEuNjcuMjYtLjUuNjMtLjkzIDEuMTEtMS4yOS40OC0uMzUgMS4wNS0uNjMgMS43LS44My42Ni0uMTkgMS4zOS0uMjkgMi4xOC0uMjkuODEgMCAxLjU0LjExIDIuMjEuMzQuNjYuMjIgMS4yMy41NCAxLjY5Ljk0LjQ3LjQuODMuODggMS4wOCAxLjQzLjI1LjU1LjM4IDEuMTUuMzggMS44MWgtMy4wMWMwLS4zMS0uMDUtLjU5LS4xNS0uODUtLjA5LS4yNy0uMjQtLjQ5LS40NC0uNjgtLjItLjE5LS40NS0uMzMtLjc1LS40NC0uMy0uMS0uNjYtLjE2LTEuMDYtLjE2LS4zOSAwLS43NC4wNC0xLjAzLjEzLS4yOS4wOS0uNTMuMjEtLjcyLjM2LS4xOS4xNi0uMzQuMzQtLjQ0LjU1LS4xLjIxLS4xNS40My0uMTUuNjYgMCAuNDguMjUuODguNzQgMS4yMS4zOC4yNS43Ny40OCAxLjQxLjdINy4zOWMtLjA1LS4wOC0uMTEtLjE3LS4xNS0uMjV6TTIxIDEydi0ySDN2Mmg5LjYyYy4xOC4wNy40LjE0LjU1LjIuMzcuMTcuNjYuMzQuODcuNTEuMjEuMTcuMzUuMzYuNDMuNTcuMDcuMi4xMS40My4xMS42OSAwIC4yMy0uMDUuNDUtLjE0LjY2LS4wOS4yLS4yMy4zOC0uNDIuNTMtLjE5LjE1LS40Mi4yNi0uNzEuMzUtLjI5LjA4LS42My4xMy0xLjAxLjEzLS40MyAwLS44My0uMDQtMS4xOC0uMTNzLS42Ni0uMjMtLjkxLS40MmMtLjI1LS4xOS0uNDUtLjQ0LS41OS0uNzUtLjE0LS4zMS0uMjUtLjc2LS4yNS0xLjIxSDYuNGMwIC41NS4wOCAxLjEzLjI0IDEuNTguMTYuNDUuMzcuODUuNjUgMS4yMS4yOC4zNS42LjY2Ljk4LjkyLjM3LjI2Ljc4LjQ4IDEuMjIuNjUuNDQuMTcuOS4zIDEuMzguMzkuNDguMDguOTYuMTMgMS40NC4xMy44IDAgMS41My0uMDkgMi4xOC0uMjhzMS4yMS0uNDUgMS42Ny0uNzljLjQ2LS4zNC44Mi0uNzcgMS4wNy0xLjI3cy4zOC0xLjA3LjM4LTEuNzFjMC0uNi0uMS0xLjE0LS4zMS0xLjYxLS4wNS0uMTEtLjExLS4yMy0uMTctLjMzSDIxeiIgLz48L2c+CjxnIGlkPSJ0ZXh0LWZpZWxkcyI+PHBhdGggZD0iTTIuNSA0djNoNXYxMmgzVjdoNVY0aC0xM3ptMTkgNWgtOXYzaDN2N2gzdi03aDNWOXoiIC8+PC9nPgo8ZyBpZD0idGl0bGUiPjxwYXRoIGQ9Ik01IDR2M2g1LjV2MTJoM1Y3SDE5VjR6IiAvPjwvZz4KPGcgaWQ9InZlcnRpY2FsLWFsaWduLWJvdHRvbSI+PHBhdGggZD0iTTE2IDEzaC0zVjNoLTJ2MTBIOGw0IDQgNC00ek00IDE5djJoMTZ2LTJINHoiIC8+PC9nPgo8ZyBpZD0idmVydGljYWwtYWxpZ24tY2VudGVyIj48cGF0aCBkPSJNOCAxOWgzdjRoMnYtNGgzbC00LTQtNCA0em04LTE0aC0zVjFoLTJ2NEg4bDQgNCA0LTR6TTQgMTF2MmgxNnYtMkg0eiIgLz48L2c+CjxnIGlkPSJ2ZXJ0aWNhbC1hbGlnbi10b3AiPjxwYXRoIGQ9Ik04IDExaDN2MTBoMlYxMWgzbC00LTQtNCA0ek00IDN2MmgxNlYzSDR6IiAvPjwvZz4KPGcgaWQ9IndyYXAtdGV4dCI+PHBhdGggZD0iTTQgMTloNnYtMkg0djJ6TTIwIDVINHYyaDE2VjV6bS0zIDZINHYyaDEzLjI1YzEuMSAwIDIgLjkgMiAycy0uOSAyLTIgMkgxNXYtMmwtMyAzIDMgM3YtMmgyYzIuMjEgMCA0LTEuNzkgNC00cy0xLjc5LTQtNC00eiIgLz48L2c+CjwvZGVmcz48L3N2Zz4KPC9pcm9uLWljb25zZXQtc3ZnPgoKCgo8aXJvbi1pY29uc2V0LXN2ZyBuYW1lPSJoYXJkd2FyZSIgc2l6ZT0iMjQiPgo8c3ZnPjxkZWZzPgo8ZyBpZD0iY2FzdCI+PHBhdGggZD0iTTIxIDNIM2MtMS4xIDAtMiAuOS0yIDJ2M2gyVjVoMTh2MTRoLTd2Mmg3YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6TTEgMTh2M2gzYzAtMS42Ni0xLjM0LTMtMy0zem0wLTR2MmMyLjc2IDAgNSAyLjI0IDUgNWgyYzAtMy44Ny0zLjEzLTctNy03em0wLTR2MmM0Ljk3IDAgOSA0LjAzIDkgOWgyYzAtNi4wOC00LjkzLTExLTExLTExeiIgLz48L2c+CjxnIGlkPSJjYXN0LWNvbm5lY3RlZCI+PHBhdGggZD0iTTEgMTh2M2gzYzAtMS42Ni0xLjM0LTMtMy0zem0wLTR2MmMyLjc2IDAgNSAyLjI0IDUgNWgyYzAtMy44Ny0zLjEzLTctNy03em0xOC03SDV2MS42M2MzLjk2IDEuMjggNy4wOSA0LjQxIDguMzcgOC4zN0gxOVY3ek0xIDEwdjJjNC45NyAwIDkgNC4wMyA5IDloMmMwLTYuMDgtNC45My0xMS0xMS0xMXptMjAtN0gzYy0xLjEgMC0yIC45LTIgMnYzaDJWNWgxOHYxNGgtN3YyaDdjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnoiIC8+PC9nPgo8ZyBpZD0iY29tcHV0ZXIiPjxwYXRoIGQ9Ik0yMCAxOGMxLjEgMCAxLjk5LS45IDEuOTktMkwyMiA2YzAtMS4xLS45LTItMi0ySDRjLTEuMSAwLTIgLjktMiAydjEwYzAgMS4xLjkgMiAyIDJIMHYyaDI0di0yaC00ek00IDZoMTZ2MTBINFY2eiIgLz48L2c+CjxnIGlkPSJkZXNrdG9wLW1hYyI+PHBhdGggZD0iTTIxIDJIM2MtMS4xIDAtMiAuOS0yIDJ2MTJjMCAxLjEuOSAyIDIgMmg3bC0yIDN2MWg4di0xbC0yLTNoN2MxLjEgMCAyLS45IDItMlY0YzAtMS4xLS45LTItMi0yem0wIDEySDNWNGgxOHYxMHoiIC8+PC9nPgo8ZyBpZD0iZGVza3RvcC13aW5kb3dzIj48cGF0aCBkPSJNMjEgMkgzYy0xLjEgMC0yIC45LTIgMnYxMmMwIDEuMS45IDIgMiAyaDd2Mkg4djJoOHYtMmgtMnYtMmg3YzEuMSAwIDItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6bTAgMTRIM1Y0aDE4djEyeiIgLz48L2c+CjxnIGlkPSJkZXZlbG9wZXItYm9hcmQiPjxwYXRoIGQ9Ik0yMiA5VjdoLTJWNWMwLTEuMS0uOS0yLTItMkg0Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0ydi0yaDJ2LTJoLTJ2LTJoMnYtMmgtMlY5aDJ6bS00IDEwSDRWNWgxNHYxNHpNNiAxM2g1djRINnptNi02aDR2M2gtNHpNNiA3aDV2NUg2em02IDRoNHY2aC00eiIgLz48L2c+CjxnIGlkPSJkZXZpY2UtaHViIj48cGF0aCBkPSJNMTcgMTZsLTQtNFY4LjgyQzE0LjE2IDguNCAxNSA3LjMgMTUgNmMwLTEuNjYtMS4zNC0zLTMtM1M5IDQuMzQgOSA2YzAgMS4zLjg0IDIuNCAyIDIuODJWMTJsLTQgNEgzdjVoNXYtMy4wNWw0LTQuMiA0IDQuMlYyMWg1di01aC00eiIgLz48L2c+CjxnIGlkPSJkZXZpY2VzLW90aGVyIj48cGF0aCBkPSJNMyA2aDE4VjRIM2MtMS4xIDAtMiAuOS0yIDJ2MTJjMCAxLjEuOSAyIDIgMmg0di0ySDNWNnptMTAgNkg5djEuNzhjLS42MS41NS0xIDEuMzMtMSAyLjIycy4zOSAxLjY3IDEgMi4yMlYyMGg0di0xLjc4Yy42MS0uNTUgMS0xLjM0IDEtMi4yMnMtLjM5LTEuNjctMS0yLjIyVjEyem0tMiA1LjVjLS44MyAwLTEuNS0uNjctMS41LTEuNXMuNjctMS41IDEuNS0xLjUgMS41LjY3IDEuNSAxLjUtLjY3IDEuNS0xLjUgMS41ek0yMiA4aC02Yy0uNSAwLTEgLjUtMSAxdjEwYzAgLjUuNSAxIDEgMWg2Yy41IDAgMS0uNSAxLTFWOWMwLS41LS41LTEtMS0xem0tMSAxMGgtNHYtOGg0djh6IiAvPjwvZz4KPGcgaWQ9ImRvY2siPjxwYXRoIGQ9Ik04IDIzaDh2LTJIOHYyem04LTIxLjk5TDggMWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmg4YzEuMSAwIDItLjkgMi0yVjNjMC0xLjEtLjktMS45OS0yLTEuOTl6TTE2IDE1SDhWNWg4djEweiIgLz48L2c+CjxnIGlkPSJnYW1lcGFkIj48cGF0aCBkPSJNMTUgNy41VjJIOXY1LjVsMyAzIDMtM3pNNy41IDlIMnY2aDUuNWwzLTMtMy0zek05IDE2LjVWMjJoNnYtNS41bC0zLTMtMyAzek0xNi41IDlsLTMgMyAzIDNIMjJWOWgtNS41eiIgLz48L2c+CjxnIGlkPSJoZWFkc2V0Ij48cGF0aCBkPSJNMTIgMWMtNC45NyAwLTkgNC4wMy05IDl2N2MwIDEuNjYgMS4zNCAzIDMgM2gzdi04SDV2LTJjMC0zLjg3IDMuMTMtNyA3LTdzNyAzLjEzIDcgN3YyaC00djhoM2MxLjY2IDAgMy0xLjM0IDMtM3YtN2MwLTQuOTctNC4wMy05LTktOXoiIC8+PC9nPgo8ZyBpZD0iaGVhZHNldC1taWMiPjxwYXRoIGQ9Ik0xMiAxYy00Ljk3IDAtOSA0LjAzLTkgOXY3YzAgMS42NiAxLjM0IDMgMyAzaDN2LThINXYtMmMwLTMuODcgMy4xMy03IDctN3M3IDMuMTMgNyA3djJoLTR2OGg0djFoLTd2Mmg2YzEuNjYgMCAzLTEuMzQgMy0zVjEwYzAtNC45Ny00LjAzLTktOS05eiIgLz48L2c+CjxnIGlkPSJrZXlib2FyZCI+PHBhdGggZD0iTTIwIDVINGMtMS4xIDAtMS45OS45LTEuOTkgMkwyIDE3YzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJWN2MwLTEuMS0uOS0yLTItMnptLTkgM2gydjJoLTJWOHptMCAzaDJ2MmgtMnYtMnpNOCA4aDJ2Mkg4Vjh6bTAgM2gydjJIOHYtMnptLTEgMkg1di0yaDJ2MnptMC0zSDVWOGgydjJ6bTkgN0g4di0yaDh2MnptMC00aC0ydi0yaDJ2MnptMC0zaC0yVjhoMnYyem0zIDNoLTJ2LTJoMnYyem0wLTNoLTJWOGgydjJ6IiAvPjwvZz4KPGcgaWQ9ImtleWJvYXJkLWFycm93LWRvd24iPjxwYXRoIGQ9Ik03LjQxIDcuODRMMTIgMTIuNDJsNC41OS00LjU4TDE4IDkuMjVsLTYgNi02LTZ6IiAvPjwvZz4KPGcgaWQ9ImtleWJvYXJkLWFycm93LWxlZnQiPjxwYXRoIGQ9Ik0xNS40MSAxNi4wOWwtNC41OC00LjU5IDQuNTgtNC41OUwxNCA1LjVsLTYgNiA2IDZ6IiAvPjwvZz4KPGcgaWQ9ImtleWJvYXJkLWFycm93LXJpZ2h0Ij48cGF0aCBkPSJNOC41OSAxNi4zNGw0LjU4LTQuNTktNC41OC00LjU5TDEwIDUuNzVsNiA2LTYgNnoiIC8+PC9nPgo8ZyBpZD0ia2V5Ym9hcmQtYXJyb3ctdXAiPjxwYXRoIGQ9Ik03LjQxIDE1LjQxTDEyIDEwLjgzbDQuNTkgNC41OEwxOCAxNGwtNi02LTYgNnoiIC8+PC9nPgo8ZyBpZD0ia2V5Ym9hcmQtYmFja3NwYWNlIj48cGF0aCBkPSJNMjEgMTFINi44M2wzLjU4LTMuNTlMOSA2bC02IDYgNiA2IDEuNDEtMS40MUw2LjgzIDEzSDIxeiIgLz48L2c+CjxnIGlkPSJrZXlib2FyZC1jYXBzbG9jayI+PHBhdGggZD0iTTEyIDguNDFMMTYuNTkgMTMgMTggMTEuNTlsLTYtNi02IDZMNy40MSAxMyAxMiA4LjQxek02IDE4aDEydi0ySDZ2MnoiIC8+PC9nPgo8ZyBpZD0ia2V5Ym9hcmQtaGlkZSI+PHBhdGggZD0iTTIwIDNINGMtMS4xIDAtMS45OS45LTEuOTkgMkwyIDE1YzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptLTkgM2gydjJoLTJWNnptMCAzaDJ2MmgtMlY5ek04IDZoMnYySDhWNnptMCAzaDJ2Mkg4Vjl6bS0xIDJINVY5aDJ2MnptMC0zSDVWNmgydjJ6bTkgN0g4di0yaDh2MnptMC00aC0yVjloMnYyem0wLTNoLTJWNmgydjJ6bTMgM2gtMlY5aDJ2MnptMC0zaC0yVjZoMnYyem0tNyAxNWw0LTRIOGw0IDR6IiAvPjwvZz4KPGcgaWQ9ImtleWJvYXJkLXJldHVybiI+PHBhdGggZD0iTTE5IDd2NEg1LjgzbDMuNTgtMy41OUw4IDZsLTYgNiA2IDYgMS40MS0xLjQxTDUuODMgMTNIMjFWN3oiIC8+PC9nPgo8ZyBpZD0ia2V5Ym9hcmQtdGFiIj48cGF0aCBkPSJNMTEuNTkgNy40MUwxNS4xNyAxMUgxdjJoMTQuMTdsLTMuNTkgMy41OUwxMyAxOGw2LTYtNi02LTEuNDEgMS40MXpNMjAgNnYxMmgyVjZoLTJ6IiAvPjwvZz4KPGcgaWQ9ImtleWJvYXJkLXZvaWNlIj48cGF0aCBkPSJNMTIgMTVjMS42NiAwIDIuOTktMS4zNCAyLjk5LTNMMTUgNmMwLTEuNjYtMS4zNC0zLTMtM1M5IDQuMzQgOSA2djZjMCAxLjY2IDEuMzQgMyAzIDN6bTUuMy0zYzAgMy0yLjU0IDUuMS01LjMgNS4xUzYuNyAxNSA2LjcgMTJINWMwIDMuNDIgMi43MiA2LjIzIDYgNi43MlYyMmgydi0zLjI4YzMuMjgtLjQ4IDYtMy4zIDYtNi43MmgtMS43eiIgLz48L2c+CjxnIGlkPSJsYXB0b3AiPjxwYXRoIGQ9Ik0yMCAxOGMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0ySDRjLTEuMSAwLTIgLjktMiAydjEwYzAgMS4xLjkgMiAyIDJIMHYyaDI0di0yaC00ek00IDZoMTZ2MTBINFY2eiIgLz48L2c+CjxnIGlkPSJsYXB0b3AtY2hyb21lYm9vayI+PHBhdGggZD0iTTIyIDE4VjNIMnYxNUgwdjJoMjR2LTJoLTJ6bS04IDBoLTR2LTFoNHYxem02LTNINFY1aDE2djEweiIgLz48L2c+CjxnIGlkPSJsYXB0b3AtbWFjIj48cGF0aCBkPSJNMjAgMThjMS4xIDAgMS45OS0uOSAxLjk5LTJMMjIgNWMwLTEuMS0uOS0yLTItMkg0Yy0xLjEgMC0yIC45LTIgMnYxMWMwIDEuMS45IDIgMiAySDBjMCAxLjEuOSAyIDIgMmgyMGMxLjEgMCAyLS45IDItMmgtNHpNNCA1aDE2djExSDRWNXptOCAxNGMtLjU1IDAtMS0uNDUtMS0xcy40NS0xIDEtMSAxIC40NSAxIDEtLjQ1IDEtMSAxeiIgLz48L2c+CjxnIGlkPSJsYXB0b3Atd2luZG93cyI+PHBhdGggZD0iTTIwIDE4di0xYzEuMSAwIDEuOTktLjkgMS45OS0yTDIyIDVjMC0xLjEtLjktMi0yLTJINGMtMS4xIDAtMiAuOS0yIDJ2MTBjMCAxLjEuOSAyIDIgMnYxSDB2MmgyNHYtMmgtNHpNNCA1aDE2djEwSDRWNXoiIC8+PC9nPgo8ZyBpZD0ibWVtb3J5Ij48cGF0aCBkPSJNMTUgOUg5djZoNlY5em0tMiA0aC0ydi0yaDJ2MnptOC0yVjloLTJWN2MwLTEuMS0uOS0yLTItMmgtMlYzaC0ydjJoLTJWM0g5djJIN2MtMS4xIDAtMiAuOS0yIDJ2MkgzdjJoMnYySDN2MmgydjJjMCAxLjEuOSAyIDIgMmgydjJoMnYtMmgydjJoMnYtMmgyYzEuMSAwIDItLjkgMi0ydi0yaDJ2LTJoLTJ2LTJoMnptLTQgNkg3VjdoMTB2MTB6IiAvPjwvZz4KPGcgaWQ9Im1vdXNlIj48cGF0aCBkPSJNMTMgMS4wN1Y5aDdjMC00LjA4LTMuMDUtNy40NC03LTcuOTN6TTQgMTVjMCA0LjQyIDMuNTggOCA4IDhzOC0zLjU4IDgtOHYtNEg0djR6bTctMTMuOTNDNy4wNSAxLjU2IDQgNC45MiA0IDloN1YxLjA3eiIgLz48L2c+CjxnIGlkPSJwaG9uZS1hbmRyb2lkIj48cGF0aCBkPSJNMTYgMUg4QzYuMzQgMSA1IDIuMzQgNSA0djE2YzAgMS42NiAxLjM0IDMgMyAzaDhjMS42NiAwIDMtMS4zNCAzLTNWNGMwLTEuNjYtMS4zNC0zLTMtM3ptLTIgMjBoLTR2LTFoNHYxem0zLjI1LTNINi43NVY0aDEwLjV2MTR6IiAvPjwvZz4KPGcgaWQ9InBob25lLWlwaG9uZSI+PHBhdGggZD0iTTE1LjUgMWgtOEM2LjEyIDEgNSAyLjEyIDUgMy41djE3QzUgMjEuODggNi4xMiAyMyA3LjUgMjNoOGMxLjM4IDAgMi41LTEuMTIgMi41LTIuNXYtMTdDMTggMi4xMiAxNi44OCAxIDE1LjUgMXptLTQgMjFjLS44MyAwLTEuNS0uNjctMS41LTEuNXMuNjctMS41IDEuNS0xLjUgMS41LjY3IDEuNSAxLjUtLjY3IDEuNS0xLjUgMS41em00LjUtNEg3VjRoOXYxNHoiIC8+PC9nPgo8ZyBpZD0icGhvbmVsaW5rIj48cGF0aCBkPSJNNCA2aDE4VjRINGMtMS4xIDAtMiAuOS0yIDJ2MTFIMHYzaDE0di0zSDRWNnptMTkgMmgtNmMtLjU1IDAtMSAuNDUtMSAxdjEwYzAgLjU1LjQ1IDEgMSAxaDZjLjU1IDAgMS0uNDUgMS0xVjljMC0uNTUtLjQ1LTEtMS0xem0tMSA5aC00di03aDR2N3oiIC8+PC9nPgo8ZyBpZD0icGhvbmVsaW5rLW9mZiI+PHBhdGggZD0iTTIyIDZWNEg2LjgybDIgMkgyMnpNMS45MiAxLjY1TC42NSAyLjkybDEuODIgMS44MkMyLjE4IDUuMDggMiA1LjUyIDIgNnYxMUgwdjNoMTcuNzNsMi4zNSAyLjM1IDEuMjctMS4yN0wzLjg5IDMuNjIgMS45MiAxLjY1ek00IDYuMjdMMTQuNzMgMTdINFY2LjI3ek0yMyA4aC02Yy0uNTUgMC0xIC40NS0xIDF2NC4xOGwyIDJWMTBoNHY3aC0yLjE4bDMgM0gyM2MuNTUgMCAxLS40NSAxLTFWOWMwLS41NS0uNDUtMS0xLTF6IiAvPjwvZz4KPGcgaWQ9InBvd2VyLWlucHV0Ij48cGF0aCBkPSJNMiA5djJoMTlWOUgyem0wIDZoNXYtMkgydjJ6bTcgMGg1di0ySDl2MnptNyAwaDV2LTJoLTV2MnoiIC8+PC9nPgo8ZyBpZD0icm91dGVyIj48cGF0aCBkPSJNMjAuMiA1LjlsLjgtLjhDMTkuNiAzLjcgMTcuOCAzIDE2IDNzLTMuNi43LTUgMi4xbC44LjhDMTMgNC44IDE0LjUgNC4yIDE2IDQuMnMzIC42IDQuMiAxLjd6bS0uOS44Yy0uOS0uOS0yLjEtMS40LTMuMy0xLjRzLTIuNC41LTMuMyAxLjRsLjguOGMuNy0uNyAxLjYtMSAyLjUtMSAuOSAwIDEuOC4zIDIuNSAxbC44LS44ek0xOSAxM2gtMlY5aC0ydjRINWMtMS4xIDAtMiAuOS0yIDJ2NGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0ydi00YzAtMS4xLS45LTItMi0yek04IDE4SDZ2LTJoMnYyem0zLjUgMGgtMnYtMmgydjJ6bTMuNSAwaC0ydi0yaDJ2MnoiIC8+PC9nPgo8ZyBpZD0ic2Nhbm5lciI+PHBhdGggZD0iTTE5LjggMTAuN0w0LjIgNWwtLjcgMS45TDE3LjYgMTJINWMtMS4xIDAtMiAuOS0yIDJ2NGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0ydi01LjVjMC0uOC0uNS0xLjYtMS4yLTEuOHpNNyAxN0g1di0yaDJ2MnptMTIgMEg5di0yaDEwdjJ6IiAvPjwvZz4KPGcgaWQ9InNlY3VyaXR5Ij48cGF0aCBkPSJNMTIgMUwzIDV2NmMwIDUuNTUgMy44NCAxMC43NCA5IDEyIDUuMTYtMS4yNiA5LTYuNDUgOS0xMlY1bC05LTR6bTAgMTAuOTloN2MtLjUzIDQuMTItMy4yOCA3Ljc5LTcgOC45NFYxMkg1VjYuM2w3LTMuMTF2OC44eiIgLz48L2c+CjxnIGlkPSJzaW0tY2FyZCI+PHBhdGggZD0iTTE5Ljk5IDRjMC0xLjEtLjg5LTItMS45OS0yaC04TDQgOHYxMmMwIDEuMS45IDIgMiAyaDEyLjAxYzEuMSAwIDEuOTktLjkgMS45OS0ybC0uMDEtMTZ6TTkgMTlIN3YtMmgydjJ6bTggMGgtMnYtMmgydjJ6bS04LTRIN3YtNGgydjR6bTQgNGgtMnYtNGgydjR6bTAtNmgtMnYtMmgydjJ6bTQgMmgtMnYtNGgydjR6IiAvPjwvZz4KPGcgaWQ9InNtYXJ0cGhvbmUiPjxwYXRoIGQ9Ik0xNyAxLjAxTDcgMWMtMS4xIDAtMiAuOS0yIDJ2MThjMCAxLjEuOSAyIDIgMmgxMGMxLjEgMCAyLS45IDItMlYzYzAtMS4xLS45LTEuOTktMi0xLjk5ek0xNyAxOUg3VjVoMTB2MTR6IiAvPjwvZz4KPGcgaWQ9InNwZWFrZXIiPjxwYXRoIGQ9Ik0xNyAySDdjLTEuMSAwLTIgLjktMiAydjE2YzAgMS4xLjkgMS45OSAyIDEuOTlMMTcgMjJjMS4xIDAgMi0uOSAyLTJWNGMwLTEuMS0uOS0yLTItMnptLTUgMmMxLjEgMCAyIC45IDIgMnMtLjkgMi0yIDJjLTEuMTEgMC0yLS45LTItMnMuODktMiAyLTJ6bTAgMTZjLTIuNzYgMC01LTIuMjQtNS01czIuMjQtNSA1LTUgNSAyLjI0IDUgNS0yLjI0IDUtNSA1em0wLThjLTEuNjYgMC0zIDEuMzQtMyAzczEuMzQgMyAzIDMgMy0xLjM0IDMtMy0xLjM0LTMtMy0zeiIgLz48L2c+CjxnIGlkPSJzcGVha2VyLWdyb3VwIj48cGF0aCBkPSJNMTguMiAxSDkuOEM4LjgxIDEgOCAxLjgxIDggMi44djE0LjRjMCAuOTkuODEgMS43OSAxLjggMS43OWw4LjQuMDFjLjk5IDAgMS44LS44MSAxLjgtMS44VjIuOGMwLS45OS0uODEtMS44LTEuOC0xLjh6TTE0IDNjMS4xIDAgMiAuODkgMiAycy0uOSAyLTIgMi0yLS44OS0yLTIgLjktMiAyLTJ6bTAgMTMuNWMtMi4yMSAwLTQtMS43OS00LTRzMS43OS00IDQtNCA0IDEuNzkgNCA0LTEuNzkgNC00IDR6IiAvPjxjaXJjbGUgY3g9IjE0IiBjeT0iMTIuNSIgcj0iMi41IiAvPjxwYXRoIGQ9Ik02IDVINHYxNmMwIDEuMS44OSAyIDIgMmgxMHYtMkg2VjV6IiAvPjwvZz4KPGcgaWQ9InRhYmxldCI+PHBhdGggZD0iTTIxIDRIM2MtMS4xIDAtMiAuOS0yIDJ2MTJjMCAxLjEuOSAyIDIgMmgxOGMxLjEgMCAxLjk5LS45IDEuOTktMkwyMyA2YzAtMS4xLS45LTItMi0yem0tMiAxNEg1VjZoMTR2MTJ6IiAvPjwvZz4KPGcgaWQ9InRhYmxldC1hbmRyb2lkIj48cGF0aCBkPSJNMTggMEg2QzQuMzQgMCAzIDEuMzQgMyAzdjE4YzAgMS42NiAxLjM0IDMgMyAzaDEyYzEuNjYgMCAzLTEuMzQgMy0zVjNjMC0xLjY2LTEuMzQtMy0zLTN6bS00IDIyaC00di0xaDR2MXptNS4yNS0zSDQuNzVWM2gxNC41djE2eiIgLz48L2c+CjxnIGlkPSJ0YWJsZXQtbWFjIj48cGF0aCBkPSJNMTguNSAwaC0xNEMzLjEyIDAgMiAxLjEyIDIgMi41djE5QzIgMjIuODggMy4xMiAyNCA0LjUgMjRoMTRjMS4zOCAwIDIuNS0xLjEyIDIuNS0yLjV2LTE5QzIxIDEuMTIgMTkuODggMCAxOC41IDB6bS03IDIzYy0uODMgMC0xLjUtLjY3LTEuNS0xLjVzLjY3LTEuNSAxLjUtMS41IDEuNS42NyAxLjUgMS41LS42NyAxLjUtMS41IDEuNXptNy41LTRINFYzaDE1djE2eiIgLz48L2c+CjxnIGlkPSJ0b3lzIj48cGF0aCBkPSJNMTIgMTJjMC0zIDIuNS01LjUgNS41LTUuNVMyMyA5IDIzIDEySDEyem0wIDBjMCAzLTIuNSA1LjUtNS41IDUuNVMxIDE1IDEgMTJoMTF6bTAgMGMtMyAwLTUuNS0yLjUtNS41LTUuNVM5IDEgMTIgMXYxMXptMCAwYzMgMCA1LjUgMi41IDUuNSA1LjVTMTUgMjMgMTIgMjNWMTJ6IiAvPjwvZz4KPGcgaWQ9InR2Ij48cGF0aCBkPSJNMjEgM0gzYy0xLjEgMC0yIC45LTIgMnYxMmMwIDEuMS45IDIgMiAyaDV2Mmg4di0yaDVjMS4xIDAgMS45OS0uOSAxLjk5LTJMMjMgNWMwLTEuMS0uOS0yLTItMnptMCAxNEgzVjVoMTh2MTJ6IiAvPjwvZz4KPGcgaWQ9InZpZGVvZ2FtZS1hc3NldCI+PHBhdGggZD0iTTIxIDZIM2MtMS4xIDAtMiAuOS0yIDJ2OGMwIDEuMS45IDIgMiAyaDE4YzEuMSAwIDItLjkgMi0yVjhjMC0xLjEtLjktMi0yLTJ6bS0xMCA3SDh2M0g2di0zSDN2LTJoM1Y4aDJ2M2gzdjJ6bTQuNSAyYy0uODMgMC0xLjUtLjY3LTEuNS0xLjVzLjY3LTEuNSAxLjUtMS41IDEuNS42NyAxLjUgMS41LS42NyAxLjUtMS41IDEuNXptNC0zYy0uODMgMC0xLjUtLjY3LTEuNS0xLjVTMTguNjcgOSAxOS41IDlzMS41LjY3IDEuNSAxLjUtLjY3IDEuNS0xLjUgMS41eiIgLz48L2c+CjxnIGlkPSJ3YXRjaCI+PHBhdGggZD0iTTIwIDEyYzAtMi41NC0xLjE5LTQuODEtMy4wNC02LjI3TDE2IDBIOGwtLjk1IDUuNzNDNS4xOSA3LjE5IDQgOS40NSA0IDEyczEuMTkgNC44MSAzLjA1IDYuMjdMOCAyNGg4bC45Ni01LjczQzE4LjgxIDE2LjgxIDIwIDE0LjU0IDIwIDEyek02IDEyYzAtMy4zMSAyLjY5LTYgNi02czYgMi42OSA2IDYtMi42OSA2LTYgNi02LTIuNjktNi02eiIgLz48L2c+CjwvZGVmcz48L3N2Zz4KPC9pcm9uLWljb25zZXQtc3ZnPgoKCgoKCgoKCjxkb20tbW9kdWxlIGlkPSJpcm9uLXBhZ2VzIj4KCiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH0KCiAgICAgIDpob3N0ID4gOjpzbG90dGVkKDpub3Qoc2xvdCk6bm90KC5pcm9uLXNlbGVjdGVkKSkgewogICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8c2xvdD48L3Nsb3Q+CiAgPC90ZW1wbGF0ZT4KCiAgPHNjcmlwdD4vL35+V0VCUEFUSH5+L2lyb24tcGFnZXMvaXJvbi1wYWdlcy5odG1sLmpzClBvbHltZXIoe2lzOiJpcm9uLXBhZ2VzIixiZWhhdmlvcnM6W1BvbHltZXIuSXJvblJlc2l6YWJsZUJlaGF2aW9yLFBvbHltZXIuSXJvblNlbGVjdGFibGVCZWhhdmlvcl0scHJvcGVydGllczp7YWN0aXZhdGVFdmVudDp7dHlwZTpTdHJpbmcsdmFsdWU6bnVsbH19LG9ic2VydmVyczpbIl9zZWxlY3RlZFBhZ2VDaGFuZ2VkKHNlbGVjdGVkKSJdLF9zZWxlY3RlZFBhZ2VDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5hc3luYyh0aGlzLm5vdGlmeVJlc2l6ZSl9fSk7Cjwvc2NyaXB0Pgo8L2RvbS1tb2R1bGU+CgoKCgoKCgoKCgoKCgoKCgoKCgoKCjxkb20tbW9kdWxlIGlkPSJwYXBlci10YWIiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIEBhcHBseSAtLWxheW91dC1pbmxpbmU7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWNlbnRlcjsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtY2VudGVyLWp1c3RpZmllZDsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtZmxleC1hdXRvOwoKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgcGFkZGluZzogMCAxMnB4OwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLWJhc2U7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItdGFiOwogICAgICB9CgogICAgICA6aG9zdCg6Zm9jdXMpIHsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICB9CgogICAgICA6aG9zdChbbGlua10pIHsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICB9CgogICAgICAudGFiLWNvbnRlbnQgewogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVooMCk7CiAgICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWigwKTsKICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMXMgY3ViaWMtYmV6aWVyKDAuNCwgMC4wLCAxLCAxKTsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtaG9yaXpvbnRhbDsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtY2VudGVyLWNlbnRlcjsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtZmxleC1hdXRvOwogICAgICAgIEBhcHBseSAtLXBhcGVyLXRhYi1jb250ZW50OwogICAgICB9CgogICAgICA6aG9zdCg6bm90KC5pcm9uLXNlbGVjdGVkKSkgPiAudGFiLWNvbnRlbnQgewogICAgICAgIG9wYWNpdHk6IDAuODsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItdGFiLWNvbnRlbnQtdW5zZWxlY3RlZDsKICAgICAgfQoKICAgICAgOmhvc3QoOmZvY3VzKSAudGFiLWNvbnRlbnQgewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgICAgfQoKICAgICAgcGFwZXItcmlwcGxlIHsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItdGFiLWluaywgdmFyKC0tcGFwZXIteWVsbG93LWExMDApKTsKICAgICAgfQoKICAgICAgLnRhYi1jb250ZW50ID4gOjpzbG90dGVkKGEpIHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtZmxleC1hdXRvOwoKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPGRpdiBjbGFzcz0idGFiLWNvbnRlbnQiPgogICAgICA8c2xvdD48L3Nsb3Q+CiAgICA8L2Rpdj4KICA8L3RlbXBsYXRlPgoKICA8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vcGFwZXItdGFicy9wYXBlci10YWIuaHRtbC5qcwpQb2x5bWVyKHtpczoicGFwZXItdGFiIixiZWhhdmlvcnM6W1BvbHltZXIuSXJvbkNvbnRyb2xTdGF0ZSxQb2x5bWVyLklyb25CdXR0b25TdGF0ZSxQb2x5bWVyLlBhcGVyUmlwcGxlQmVoYXZpb3JdLHByb3BlcnRpZXM6e2xpbms6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9fSxob3N0QXR0cmlidXRlczp7cm9sZToidGFiIn0sbGlzdGVuZXJzOntkb3duOiJfdXBkYXRlTm9pbmsiLHRhcDoiX29uVGFwIn0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVOb2luaygpfSxnZXQgX3BhcmVudE5vaW5rKCl7dmFyIGE9UG9seW1lci5kb20odGhpcykucGFyZW50Tm9kZTtyZXR1cm4hIWEmJiEhYS5ub2lua30sX3VwZGF0ZU5vaW5rOmZ1bmN0aW9uKCl7dGhpcy5ub2luaz0hIXRoaXMubm9pbmt8fCEhdGhpcy5fcGFyZW50Tm9pbmt9LF9vblRhcDpmdW5jdGlvbihhKXtpZih0aGlzLmxpbmspe3ZhciBjPXRoaXMucXVlcnlFZmZlY3RpdmVDaGlsZHJlbigiYSIpOwpjJiZhLnRhcmdldCE9PWMmJmMuY2xpY2soKX19fSk7Cjwvc2NyaXB0Pgo8L2RvbS1tb2R1bGU+CgoKCgoKCgoKCgo8aXJvbi1pY29uc2V0LXN2ZyBuYW1lPSJwYXBlci10YWJzIiBzaXplPSIyNCI+Cjxzdmc+PGRlZnM+CjxnIGlkPSJjaGV2cm9uLWxlZnQiPjxwYXRoIGQ9Ik0xNS40MSA3LjQxTDE0IDZsLTYgNiA2IDYgMS40MS0xLjQxTDEwLjgzIDEyeiIgLz48L2c+CjxnIGlkPSJjaGV2cm9uLXJpZ2h0Ij48cGF0aCBkPSJNMTAgNkw4LjU5IDcuNDEgMTMuMTcgMTJsLTQuNTggNC41OUwxMCAxOGw2LTZ6IiAvPjwvZz4KPC9kZWZzPjwvc3ZnPgo8L2lyb24taWNvbnNldC1zdmc+CgoKCgoKPGRvbS1tb2R1bGUgaWQ9InBhcGVyLXRhYnMiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIEBhcHBseSAtLWxheW91dDsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtY2VudGVyOwoKICAgICAgICBoZWlnaHQ6IDQ4cHg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIC1tcy11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwoKICAgICAgICAvKiBOT1RFOiBCb3RoIHZhbHVlcyBhcmUgbmVlZGVkLCBzaW5jZSBzb21lIHBob25lcyByZXF1aXJlIHRoZSB2YWx1ZSB0byBiZSBgdHJhbnNwYXJlbnRgLiAqLwogICAgICAgIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwKTsKICAgICAgICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHRyYW5zcGFyZW50OwoKICAgICAgICBAYXBwbHkgLS1wYXBlci10YWJzOwogICAgICB9CgogICAgICA6aG9zdCg6ZGlyKHJ0bCkpIHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtaG9yaXpvbnRhbC1yZXZlcnNlOwogICAgICB9CgogICAgICAjdGFic0NvbnRhaW5lciB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWZsZXgtYXV0bzsKICAgICAgICBAYXBwbHkgLS1wYXBlci10YWJzLWNvbnRhaW5lcjsKICAgICAgfQoKICAgICAgI3RhYnNDb250ZW50IHsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgLW1vei1mbGV4LWJhc2lzOiBhdXRvOwogICAgICAgIC1tcy1mbGV4LWJhc2lzOiBhdXRvOwogICAgICAgIGZsZXgtYmFzaXM6IGF1dG87CiAgICAgICAgQGFwcGx5IC0tcGFwZXItdGFicy1jb250ZW50OwogICAgICB9CgogICAgICAjdGFic0NvbnRlbnQuc2Nyb2xsYWJsZSB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgIH0KCiAgICAgICN0YWJzQ29udGVudDpub3QoLnNjcm9sbGFibGUpLAogICAgICAjdGFic0NvbnRlbnQuc2Nyb2xsYWJsZS5maXQtY29udGFpbmVyIHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtaG9yaXpvbnRhbDsKICAgICAgfQoKICAgICAgI3RhYnNDb250ZW50LnNjcm9sbGFibGUuZml0LWNvbnRhaW5lciB7CiAgICAgICAgbWluLXdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAjdGFic0NvbnRlbnQuc2Nyb2xsYWJsZS5maXQtY29udGFpbmVyID4gOjpzbG90dGVkKCopIHsKICAgICAgICAvKiBJRSAtIHByZXZlbnQgdGFicyBmcm9tIGNvbXByZXNzaW5nIHdoZW4gdGhleSBzaG91bGQgc2Nyb2xsLiAqLwogICAgICAgIC1tcy1mbGV4OiAxIDAgYXV0bzsKICAgICAgICAtd2Via2l0LWZsZXg6IDEgMCBhdXRvOwogICAgICAgIGZsZXg6IDEgMCBhdXRvOwogICAgICB9CgogICAgICAuaGlkZGVuIHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICB9CgogICAgICAubm90LXZpc2libGUgewogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICB9CgogICAgICBwYXBlci1pY29uLWJ1dHRvbiB7CiAgICAgICAgd2lkdGg6IDQ4cHg7CiAgICAgICAgaGVpZ2h0OiA0OHB4OwogICAgICAgIHBhZGRpbmc6IDEycHg7CiAgICAgICAgbWFyZ2luOiAwIDRweDsKICAgICAgfQoKICAgICAgI3NlbGVjdGlvbkJhciB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGhlaWdodDogMDsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgICBib3JkZXItYm90dG9tOiAycHggc29saWQgdmFyKC0tcGFwZXItdGFicy1zZWxlY3Rpb24tYmFyLWNvbG9yLCB2YXIoLS1wYXBlci15ZWxsb3ctYTEwMCkpOwogICAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDApOwogICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMCk7CiAgICAgICAgICAtd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46IGxlZnQgY2VudGVyOwogICAgICAgIHRyYW5zZm9ybS1vcmlnaW46IGxlZnQgY2VudGVyOwogICAgICAgICAgdHJhbnNpdGlvbjogLXdlYmtpdC10cmFuc2Zvcm07CiAgICAgICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci10YWJzLXNlbGVjdGlvbi1iYXI7CiAgICAgIH0KCiAgICAgICNzZWxlY3Rpb25CYXIuYWxpZ24tYm90dG9tIHsKICAgICAgICB0b3A6IDA7CiAgICAgICAgYm90dG9tOiBhdXRvOwogICAgICB9CgogICAgICAjc2VsZWN0aW9uQmFyLmV4cGFuZCB7CiAgICAgICAgdHJhbnNpdGlvbi1kdXJhdGlvbjogMC4xNXM7CiAgICAgICAgdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjQsIDAuMCwgMSwgMSk7CiAgICAgIH0KCiAgICAgICNzZWxlY3Rpb25CYXIuY29udHJhY3QgewogICAgICAgIHRyYW5zaXRpb24tZHVyYXRpb246IDAuMThzOwogICAgICAgIHRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4wLCAwLjAsIDAuMiwgMSk7CiAgICAgIH0KCiAgICAgICN0YWJzQ29udGVudCA+IDo6c2xvdHRlZCg6bm90KCNzZWxlY3Rpb25CYXIpKSB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxwYXBlci1pY29uLWJ1dHRvbiBpY29uPSJwYXBlci10YWJzOmNoZXZyb24tbGVmdCIgY2xhc3MkPSJbW19jb21wdXRlU2Nyb2xsQnV0dG9uQ2xhc3MoX2xlZnRIaWRkZW4sIHNjcm9sbGFibGUsIGhpZGVTY3JvbGxCdXR0b25zKV1dIiBvbi11cD0iX29uU2Nyb2xsQnV0dG9uVXAiIG9uLWRvd249Il9vbkxlZnRTY3JvbGxCdXR0b25Eb3duIiB0YWJpbmRleD0iLTEiPjwvcGFwZXItaWNvbi1idXR0b24+CgogICAgPGRpdiBpZD0idGFic0NvbnRhaW5lciIgb24tdHJhY2s9Il9zY3JvbGwiIG9uLWRvd249Il9kb3duIj4KICAgICAgPGRpdiBpZD0idGFic0NvbnRlbnQiIGNsYXNzJD0iW1tfY29tcHV0ZVRhYnNDb250ZW50Q2xhc3Moc2Nyb2xsYWJsZSwgZml0Q29udGFpbmVyKV1dIj4KICAgICAgICA8ZGl2IGlkPSJzZWxlY3Rpb25CYXIiIGNsYXNzJD0iW1tfY29tcHV0ZVNlbGVjdGlvbkJhckNsYXNzKG5vQmFyLCBhbGlnbkJvdHRvbSldXSIgb24tdHJhbnNpdGlvbmVuZD0iX29uQmFyVHJhbnNpdGlvbkVuZCI+PC9kaXY+CiAgICAgICAgPHNsb3Q+PC9zbG90PgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgoKICAgIDxwYXBlci1pY29uLWJ1dHRvbiBpY29uPSJwYXBlci10YWJzOmNoZXZyb24tcmlnaHQiIGNsYXNzJD0iW1tfY29tcHV0ZVNjcm9sbEJ1dHRvbkNsYXNzKF9yaWdodEhpZGRlbiwgc2Nyb2xsYWJsZSwgaGlkZVNjcm9sbEJ1dHRvbnMpXV0iIG9uLXVwPSJfb25TY3JvbGxCdXR0b25VcCIgb24tZG93bj0iX29uUmlnaHRTY3JvbGxCdXR0b25Eb3duIiB0YWJpbmRleD0iLTEiPjwvcGFwZXItaWNvbi1idXR0b24+CgogIDwvdGVtcGxhdGU+CgogIDxzY3JpcHQ+Ly9+fldFQlBBVEh+fi9wYXBlci10YWJzL3BhcGVyLXRhYnMuaHRtbC5qcwpQb2x5bWVyKHtpczoicGFwZXItdGFicyIsYmVoYXZpb3JzOltQb2x5bWVyLklyb25SZXNpemFibGVCZWhhdmlvcixQb2x5bWVyLklyb25NZW51YmFyQmVoYXZpb3JdLHByb3BlcnRpZXM6e25vaW5rOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEsb2JzZXJ2ZXI6Il9ub2lua0NoYW5nZWQifSxub0Jhcjp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxub1NsaWRlOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LHNjcm9sbGFibGU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sZml0Q29udGFpbmVyOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGRpc2FibGVEcmFnOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGhpZGVTY3JvbGxCdXR0b25zOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGFsaWduQm90dG9tOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LHNlbGVjdGFibGU6e3R5cGU6U3RyaW5nLHZhbHVlOiJwYXBlci10YWIifSxhdXRvc2VsZWN0Ont0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGF1dG9zZWxlY3REZWxheTp7dHlwZTpOdW1iZXIsCnZhbHVlOjB9LF9zdGVwOnt0eXBlOk51bWJlcix2YWx1ZToxMH0sX2hvbGREZWxheTp7dHlwZTpOdW1iZXIsdmFsdWU6MX0sX2xlZnRIaWRkZW46e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sX3JpZ2h0SGlkZGVuOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LF9wcmV2aW91c1RhYjp7dHlwZTpPYmplY3R9fSxob3N0QXR0cmlidXRlczp7cm9sZToidGFibGlzdCJ9LGxpc3RlbmVyczp7Imlyb24tcmVzaXplIjoiX29uVGFiU2l6aW5nQ2hhbmdlZCIsImlyb24taXRlbXMtY2hhbmdlZCI6Il9vblRhYlNpemluZ0NoYW5nZWQiLCJpcm9uLXNlbGVjdCI6Il9vbklyb25TZWxlY3QiLCJpcm9uLWRlc2VsZWN0IjoiX29uSXJvbkRlc2VsZWN0In0sa2V5QmluZGluZ3M6eyJsZWZ0OmtleXVwIHJpZ2h0OmtleXVwIjoiX29uQXJyb3dLZXl1cCJ9LGNyZWF0ZWQ6ZnVuY3Rpb24oKXt0aGlzLl9ob2xkSm9iPW51bGw7dGhpcy5fcGVuZGluZ0FjdGl2YXRpb25UaW1lb3V0PXRoaXMuX3BlbmRpbmdBY3RpdmF0aW9uSXRlbT0Kdm9pZCAwO3RoaXMuX2JpbmREZWxheWVkQWN0aXZhdGlvbkhhbmRsZXI9dGhpcy5fZGVsYXllZEFjdGl2YXRpb25IYW5kbGVyLmJpbmQodGhpcyk7dGhpcy5hZGRFdmVudExpc3RlbmVyKCJibHVyIix0aGlzLl9vbkJsdXJDYXB0dXJlLmJpbmQodGhpcyksITApfSxyZWFkeTpmdW5jdGlvbigpe3RoaXMuc2V0U2Nyb2xsRGlyZWN0aW9uKCJ5Iix0aGlzLiQudGFic0NvbnRhaW5lcil9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fY2FuY2VsUGVuZGluZ0FjdGl2YXRpb24oKX0sX25vaW5rQ2hhbmdlZDpmdW5jdGlvbihhKXtQb2x5bWVyLmRvbSh0aGlzKS5xdWVyeVNlbGVjdG9yQWxsKCJwYXBlci10YWIiKS5mb3JFYWNoKGE/dGhpcy5fc2V0Tm9pbmtBdHRyaWJ1dGU6dGhpcy5fcmVtb3ZlTm9pbmtBdHRyaWJ1dGUpfSxfc2V0Tm9pbmtBdHRyaWJ1dGU6ZnVuY3Rpb24oYSl7YS5zZXRBdHRyaWJ1dGUoIm5vaW5rIiwiIil9LF9yZW1vdmVOb2lua0F0dHJpYnV0ZTpmdW5jdGlvbihhKXthLnJlbW92ZUF0dHJpYnV0ZSgibm9pbmsiKX0sCl9jb21wdXRlU2Nyb2xsQnV0dG9uQ2xhc3M6ZnVuY3Rpb24oYSxjLGQpe3JldHVybiFjfHxkPyJoaWRkZW4iOmE/Im5vdC12aXNpYmxlIjoiIn0sX2NvbXB1dGVUYWJzQ29udGVudENsYXNzOmZ1bmN0aW9uKGEsYyl7cmV0dXJuIGE/InNjcm9sbGFibGUiKyhjPyIgZml0LWNvbnRhaW5lciI6IiIpOiIgZml0LWNvbnRhaW5lciJ9LF9jb21wdXRlU2VsZWN0aW9uQmFyQ2xhc3M6ZnVuY3Rpb24oYSxjKXtyZXR1cm4gYT8iaGlkZGVuIjpjPyJhbGlnbi1ib3R0b20iOiIifSxfb25UYWJTaXppbmdDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5kZWJvdW5jZSgiX29uVGFiU2l6aW5nQ2hhbmdlZCIsZnVuY3Rpb24oKXt0aGlzLl9zY3JvbGwoKTt0aGlzLl90YWJDaGFuZ2VkKHRoaXMuc2VsZWN0ZWRJdGVtKX0sMTApfSxfb25Jcm9uU2VsZWN0OmZ1bmN0aW9uKGEpe3RoaXMuX3RhYkNoYW5nZWQoYS5kZXRhaWwuaXRlbSx0aGlzLl9wcmV2aW91c1RhYik7dGhpcy5fcHJldmlvdXNUYWI9YS5kZXRhaWwuaXRlbTsKdGhpcy5jYW5jZWxEZWJvdW5jZXIoInRhYi1jaGFuZ2VkIil9LF9vbklyb25EZXNlbGVjdDpmdW5jdGlvbigpe3RoaXMuZGVib3VuY2UoInRhYi1jaGFuZ2VkIixmdW5jdGlvbigpe3RoaXMuX3RhYkNoYW5nZWQobnVsbCx0aGlzLl9wcmV2aW91c1RhYik7dGhpcy5fcHJldmlvdXNUYWI9bnVsbH0sMSl9LF9hY3RpdmF0ZUhhbmRsZXI6ZnVuY3Rpb24oKXt0aGlzLl9jYW5jZWxQZW5kaW5nQWN0aXZhdGlvbigpO1BvbHltZXIuSXJvbk1lbnVCZWhhdmlvckltcGwuX2FjdGl2YXRlSGFuZGxlci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LF9zY2hlZHVsZUFjdGl2YXRpb246ZnVuY3Rpb24oYSxjKXt0aGlzLl9wZW5kaW5nQWN0aXZhdGlvbkl0ZW09YTt0aGlzLl9wZW5kaW5nQWN0aXZhdGlvblRpbWVvdXQ9dGhpcy5hc3luYyh0aGlzLl9iaW5kRGVsYXllZEFjdGl2YXRpb25IYW5kbGVyLGMpfSxfZGVsYXllZEFjdGl2YXRpb25IYW5kbGVyOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5fcGVuZGluZ0FjdGl2YXRpb25JdGVtOwp0aGlzLl9wZW5kaW5nQWN0aXZhdGlvblRpbWVvdXQ9dGhpcy5fcGVuZGluZ0FjdGl2YXRpb25JdGVtPXZvaWQgMDthLmZpcmUodGhpcy5hY3RpdmF0ZUV2ZW50LG51bGwse2J1YmJsZXM6ITAsY2FuY2VsYWJsZTohMH0pfSxfY2FuY2VsUGVuZGluZ0FjdGl2YXRpb246ZnVuY3Rpb24oKXt2b2lkIDAhPT10aGlzLl9wZW5kaW5nQWN0aXZhdGlvblRpbWVvdXQmJih0aGlzLmNhbmNlbEFzeW5jKHRoaXMuX3BlbmRpbmdBY3RpdmF0aW9uVGltZW91dCksdGhpcy5fcGVuZGluZ0FjdGl2YXRpb25UaW1lb3V0PXRoaXMuX3BlbmRpbmdBY3RpdmF0aW9uSXRlbT12b2lkIDApfSxfb25BcnJvd0tleXVwOmZ1bmN0aW9uKCl7dGhpcy5hdXRvc2VsZWN0JiZ0aGlzLl9zY2hlZHVsZUFjdGl2YXRpb24odGhpcy5mb2N1c2VkSXRlbSx0aGlzLmF1dG9zZWxlY3REZWxheSl9LF9vbkJsdXJDYXB0dXJlOmZ1bmN0aW9uKGEpe2EudGFyZ2V0PT09dGhpcy5fcGVuZGluZ0FjdGl2YXRpb25JdGVtJiZ0aGlzLl9jYW5jZWxQZW5kaW5nQWN0aXZhdGlvbigpfSwKZ2V0IF90YWJDb250YWluZXJTY3JvbGxTaXplKCl7cmV0dXJuIE1hdGgubWF4KDAsdGhpcy4kLnRhYnNDb250YWluZXIuc2Nyb2xsV2lkdGgtdGhpcy4kLnRhYnNDb250YWluZXIub2Zmc2V0V2lkdGgpfSxfc2Nyb2xsOmZ1bmN0aW9uKGEsYyl7dGhpcy5zY3JvbGxhYmxlJiZ0aGlzLl9hZmZlY3RTY3JvbGwoYyYmLWMuZGR4fHwwKX0sX2Rvd246ZnVuY3Rpb24oKXt0aGlzLmFzeW5jKGZ1bmN0aW9uKCl7dGhpcy5fZGVmYXVsdEZvY3VzQXN5bmMmJih0aGlzLmNhbmNlbEFzeW5jKHRoaXMuX2RlZmF1bHRGb2N1c0FzeW5jKSx0aGlzLl9kZWZhdWx0Rm9jdXNBc3luYz1udWxsKX0sMSl9LF9hZmZlY3RTY3JvbGw6ZnVuY3Rpb24oYSl7dGhpcy4kLnRhYnNDb250YWluZXIuc2Nyb2xsTGVmdCs9YTthPXRoaXMuJC50YWJzQ29udGFpbmVyLnNjcm9sbExlZnQ7dGhpcy5fbGVmdEhpZGRlbj0wPT09YTt0aGlzLl9yaWdodEhpZGRlbj1hPT09dGhpcy5fdGFiQ29udGFpbmVyU2Nyb2xsU2l6ZX0sCl9vbkxlZnRTY3JvbGxCdXR0b25Eb3duOmZ1bmN0aW9uKCl7dGhpcy5fc2Nyb2xsVG9MZWZ0KCk7dGhpcy5faG9sZEpvYj1zZXRJbnRlcnZhbCh0aGlzLl9zY3JvbGxUb0xlZnQuYmluZCh0aGlzKSx0aGlzLl9ob2xkRGVsYXkpfSxfb25SaWdodFNjcm9sbEJ1dHRvbkRvd246ZnVuY3Rpb24oKXt0aGlzLl9zY3JvbGxUb1JpZ2h0KCk7dGhpcy5faG9sZEpvYj1zZXRJbnRlcnZhbCh0aGlzLl9zY3JvbGxUb1JpZ2h0LmJpbmQodGhpcyksdGhpcy5faG9sZERlbGF5KX0sX29uU2Nyb2xsQnV0dG9uVXA6ZnVuY3Rpb24oKXtjbGVhckludGVydmFsKHRoaXMuX2hvbGRKb2IpO3RoaXMuX2hvbGRKb2I9bnVsbH0sX3Njcm9sbFRvTGVmdDpmdW5jdGlvbigpe3RoaXMuX2FmZmVjdFNjcm9sbCgtdGhpcy5fc3RlcCl9LF9zY3JvbGxUb1JpZ2h0OmZ1bmN0aW9uKCl7dGhpcy5fYWZmZWN0U2Nyb2xsKHRoaXMuX3N0ZXApfSxfdGFiQ2hhbmdlZDpmdW5jdGlvbihhLGMpe2lmKGEpe3ZhciBkPXRoaXMuJC50YWJzQ29udGVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSwKZj1kLndpZHRoLGc9YS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtkPWcubGVmdC1kLmxlZnQ7dGhpcy5fcG9zPXt3aWR0aDp0aGlzLl9jYWxjUGVyY2VudChnLndpZHRoLGYpLGxlZnQ6dGhpcy5fY2FsY1BlcmNlbnQoZCxmKX07aWYodGhpcy5ub1NsaWRlfHxudWxsPT1jKXRoaXMuJC5zZWxlY3Rpb25CYXIuY2xhc3NMaXN0LnJlbW92ZSgiZXhwYW5kIiksdGhpcy4kLnNlbGVjdGlvbkJhci5jbGFzc0xpc3QucmVtb3ZlKCJjb250cmFjdCIpLHRoaXMuX3Bvc2l0aW9uQmFyKHRoaXMuX3Bvcy53aWR0aCx0aGlzLl9wb3MubGVmdCk7ZWxzZXt2YXIgbD1jLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2M9dGhpcy5pdGVtcy5pbmRleE9mKGMpO2E9dGhpcy5pdGVtcy5pbmRleE9mKGEpO3RoaXMuJC5zZWxlY3Rpb25CYXIuY2xhc3NMaXN0LmFkZCgiZXhwYW5kIik7YT1jPGE7dGhpcy5faXNSVEwmJihhPSFhKTthP3RoaXMuX3Bvc2l0aW9uQmFyKHRoaXMuX2NhbGNQZXJjZW50KGcubGVmdCtnLndpZHRoLQpsLmxlZnQsZiktNSx0aGlzLl9sZWZ0KTp0aGlzLl9wb3NpdGlvbkJhcih0aGlzLl9jYWxjUGVyY2VudChsLmxlZnQrbC53aWR0aC1nLmxlZnQsZiktNSx0aGlzLl9jYWxjUGVyY2VudChkLGYpKzUpO3RoaXMuc2Nyb2xsYWJsZSYmdGhpcy5fc2Nyb2xsVG9TZWxlY3RlZElmTmVlZGVkKGcud2lkdGgsZCl9fWVsc2UgdGhpcy4kLnNlbGVjdGlvbkJhci5jbGFzc0xpc3QucmVtb3ZlKCJleHBhbmQiKSx0aGlzLiQuc2VsZWN0aW9uQmFyLmNsYXNzTGlzdC5yZW1vdmUoImNvbnRyYWN0IiksdGhpcy5fcG9zaXRpb25CYXIoMCwwKX0sX3Njcm9sbFRvU2VsZWN0ZWRJZk5lZWRlZDpmdW5jdGlvbihhLGMpe2MtPXRoaXMuJC50YWJzQ29udGFpbmVyLnNjcm9sbExlZnQ7MD5jP3RoaXMuJC50YWJzQ29udGFpbmVyLnNjcm9sbExlZnQrPWM6KGMrPWEtdGhpcy4kLnRhYnNDb250YWluZXIub2Zmc2V0V2lkdGgsMDxjJiYodGhpcy4kLnRhYnNDb250YWluZXIuc2Nyb2xsTGVmdCs9YykpfSxfY2FsY1BlcmNlbnQ6ZnVuY3Rpb24oYSwKYyl7cmV0dXJuIDEwMCphL2N9LF9wb3NpdGlvbkJhcjpmdW5jdGlvbihhLGMpe2E9YXx8MDtjPWN8fDA7dGhpcy5fd2lkdGg9YTt0aGlzLl9sZWZ0PWM7dGhpcy50cmFuc2Zvcm0oInRyYW5zbGF0ZVgoIitjKyIlKSBzY2FsZVgoIithLzEwMCsiKSIsdGhpcy4kLnNlbGVjdGlvbkJhcil9LF9vbkJhclRyYW5zaXRpb25FbmQ6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLiQuc2VsZWN0aW9uQmFyLmNsYXNzTGlzdDthLmNvbnRhaW5zKCJleHBhbmQiKT8oYS5yZW1vdmUoImV4cGFuZCIpLGEuYWRkKCJjb250cmFjdCIpLHRoaXMuX3Bvc2l0aW9uQmFyKHRoaXMuX3Bvcy53aWR0aCx0aGlzLl9wb3MubGVmdCkpOmEuY29udGFpbnMoImNvbnRyYWN0IikmJmEucmVtb3ZlKCJjb250cmFjdCIpfX0pOwo8L3NjcmlwdD4KPC9kb20tbW9kdWxlPgoKCgoKCgoKCgoKCgoKCgo8ZG9tLW1vZHVsZSBpZD0idGYtaW5mZXJlbmNlLXBhbmVsIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGUgaWQ9ImxpbnRlci1wYXBlci1idXR0b24tc3R5bGUiPgogICAgICAvKioKICAgICAgICogVGhpcyBzdHlsZSBwcmVzZXJ2ZXMgdGhlIHN0eWxpbmcgcHJldmlvdXMgdG8KICAgICAgICogaHR0cHM6Ly9naXRodWIuY29tL1BvbHltZXJFbGVtZW50cy9wYXBlci1idXR0b24vcHVsbC8xMTUKICAgICAgICogVGhpcyBjaGFuZ2UgY2FuIGJyZWFrIHRoZSBsYXlvdXQgb2YgcGFwZXItYnV0dG9uIGNvbnRlbnQuCiAgICAgICAqIFJlbW92ZSB0aGlzIHN0eWxlIHRvIGFwcGx5IHRoZSBjaGFuZ2UuCiAgICAgICAqLwogICAgICBwYXBlci1idXR0b24gewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgZm9udC1mYW1pbHk6IGluaGVyaXQ7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgIH0KICAgICAgdGYtb3B0aW9uLXNlbGVjdG9yIC5tb2RlbC10eXBlLWJ1dHRvbiB7CiAgICAgICAgd2lkdGg6IGF1dG87CiAgICAgIH0KICAgICAgLmZsZXgtaG9sZGVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICB9CiAgICAgIC50aXRsZSB7CiAgICAgICAgZm9udC1zaXplOiAzMnB4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDIwcHg7CiAgICAgIH0KICAgICAgLmhlbHAtaWNvbiB7CiAgICAgICAgd2lkdGg6IDE1cHg7CiAgICAgICAgaGVpZ2h0OiAxNXB4OwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgICAgY29sb3I6ICM3NTc1NzU7CiAgICAgIH0KICAgICAgLnRvb2x0aXAgewogICAgICAgIHdpZHRoOiA1MDBweDsKICAgICAgfQogICAgICAuaW5wdXQtaW4tcm93IHsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDEwcHg7CiAgICAgIH0KICAgICAgLmZsZXgtZ3JvdyB7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICB9CiAgICAgIC5tb2RlbC10eXBlLWxhYmVsIHsKICAgICAgICBwYWRkaW5nLXRvcDogMTBweDsKICAgICAgfQogICAgICAuYWRkLW1vZGVsLWJ1dHRvbi1ob2xkZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIH0KICAgICAgLmNoZWNrYm94IHsKICAgICAgICBtYXJnaW4tdG9wOiAzMHB4OwogICAgICAgIG1hcmdpbi1sZWZ0OiAxMHB4OwogICAgICB9CiAgICAgIC5wcmVkaWN0LWNoZWNrYm94IHsKICAgICAgICBtYXJnaW4tdG9wOiA0M3B4OwogICAgICAgIG1hcmdpbi1sZWZ0OiAxMHB4OwogICAgICB9CiAgICAgIHBhcGVyLWlucHV0IHsKICAgICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1mb2N1cy1jb2xvcjogI2Y1N2MwMDsKICAgICAgfQogICAgICBwYXBlci1yYWRpby1idXR0b24gewogICAgICAgIC0tcGFwZXItcmFkaW8tYnV0dG9uLXVuY2hlY2tlZC1jb2xvcjogIzNjNDA0MzsKICAgICAgICAtLXBhcGVyLXJhZGlvLWJ1dHRvbi11bmNoZWNrZWQtaW5rLWNvbG9yOiAjM2M0MDQzOwogICAgICAgIC0tcGFwZXItcmFkaW8tYnV0dG9uLWNoZWNrZWQtY29sb3I6ICMzYzQwNDM7CiAgICAgICAgLS1wYXBlci1yYWRpby1idXR0b24tY2hlY2tlZC1pbmstY29sb3I6ICMzYzQwNDM7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8ZGl2IGNsYXNzPSJ0aXRsZSI+U2V0IHVwIHlvdXIgZGF0YSBhbmQgbW9kZWw8L2Rpdj4KICAgIDxwYXBlci1pbnB1dCBhbHdheXMtZmxvYXQtbGFiZWwgbGFiZWw9IkluZmVyZW5jZSBhZGRyZXNzIiBwbGFjZWhvbGRlcj0iW1tpbmZlcmVuY2VBZGRyZXNzMV1dIiB2YWx1ZT0ie3tpbmZlcmVuY2VBZGRyZXNzMX19Ij4KICAgIDwvcGFwZXItaW5wdXQ+CiAgICA8ZGl2IGNsYXNzPSJmbGV4LWhvbGRlciI+CiAgICAgIDxwYXBlci1pbnB1dCBhbHdheXMtZmxvYXQtbGFiZWwgbGFiZWw9Ik1vZGVsIG5hbWUiIHBsYWNlaG9sZGVyPSJbW21vZGVsTmFtZTFdXSIgdmFsdWU9Int7bW9kZWxOYW1lMX19IiBjbGFzcz0iaW5wdXQtaW4tcm93Ij4KICAgICAgPC9wYXBlci1pbnB1dD4KICAgICAgPHBhcGVyLWlucHV0IGFsd2F5cy1mbG9hdC1sYWJlbCBsYWJlbD0iTW9kZWwgdmVyc2lvbiAob3B0aW9uYWwpIiBwbGFjZWhvbGRlcj0iW1ttb2RlbFZlcnNpb24xXV0iIHZhbHVlPSJ7e21vZGVsVmVyc2lvbjF9fSIgY2xhc3M9ImlucHV0LWluLXJvdyI+CiAgICAgIDwvcGFwZXItaW5wdXQ+CiAgICAgIDxwYXBlci1pbnB1dCBhbHdheXMtZmxvYXQtbGFiZWwgbGFiZWw9Ik1vZGVsIHNpZ25hdHVyZSAob3B0aW9uYWwpIiBwbGFjZWhvbGRlcj0iW1ttb2RlbFNpZ25hdHVyZTFdXSIgdmFsdWU9Int7bW9kZWxTaWduYXR1cmUxfX0iIGNsYXNzPSJpbnB1dC1pbi1yb3ciPgogICAgICA8L3BhcGVyLWlucHV0PgogICAgPC9kaXY+CiAgICA8ZGl2IGhpZGRlbiQ9Int7aGlkZU1vZGVsUGFuZTJ9fSI+CiAgICAgIDxwYXBlci1pbnB1dCBhbHdheXMtZmxvYXQtbGFiZWwgbGFiZWw9IkluZmVyZW5jZSBhZGRyZXNzIiBwbGFjZWhvbGRlcj0iW1tpbmZlcmVuY2VBZGRyZXNzMl1dIiB2YWx1ZT0ie3tpbmZlcmVuY2VBZGRyZXNzMn19Ij4KICAgICAgPC9wYXBlci1pbnB1dD4KICAgICAgPGRpdiBjbGFzcz0iZmxleC1ob2xkZXIiPgogICAgICAgIDxwYXBlci1pbnB1dCBhbHdheXMtZmxvYXQtbGFiZWwgbGFiZWw9Ik1vZGVsIG5hbWUiIHBsYWNlaG9sZGVyPSJbW21vZGVsTmFtZTJdXSIgdmFsdWU9Int7bW9kZWxOYW1lMn19IiBjbGFzcz0iaW5wdXQtaW4tcm93Ij4KICAgICAgICA8L3BhcGVyLWlucHV0PgogICAgICAgIDxwYXBlci1pbnB1dCBhbHdheXMtZmxvYXQtbGFiZWwgbGFiZWw9Ik1vZGVsIHZlcnNpb24gKG9wdGlvbmFsKSIgcGxhY2Vob2xkZXI9IltbbW9kZWxWZXJzaW9uMl1dIiB2YWx1ZT0ie3ttb2RlbFZlcnNpb24yfX0iIGNsYXNzPSJpbnB1dC1pbi1yb3ciPgogICAgICAgIDwvcGFwZXItaW5wdXQ+CiAgICAgICAgPHBhcGVyLWlucHV0IGFsd2F5cy1mbG9hdC1sYWJlbCBsYWJlbD0iTW9kZWwgc2lnbmF0dXJlIChvcHRpb25hbCkiIHBsYWNlaG9sZGVyPSJbW21vZGVsU2lnbmF0dXJlMl1dIiB2YWx1ZT0ie3ttb2RlbFNpZ25hdHVyZTJ9fSIgY2xhc3M9ImlucHV0LWluLXJvdyI+CiAgICAgICAgPC9wYXBlci1pbnB1dD4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImFkZC1tb2RlbC1idXR0b24taG9sZGVyIiBoaWRkZW4kPSJ7eyFoaWRlTW9kZWxQYW5lMn19Ij4KICAgICAgPHBhcGVyLWJ1dHRvbiBvbi10YXA9ImFkZE1vZGVsQ2xpY2tlZF8iIGNsYXNzPSJtYWluLWJ1dHRvbiI+CiAgICAgICAgQWRkIGFub3RoZXIgbW9kZWwgZm9yIGNvbXBhcmlzb24KICAgICAgPC9wYXBlci1idXR0b24+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImZsZXgtaG9sZGVyIj4KICAgICAgPGRpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJtb2RlbC10eXBlLWxhYmVsIj5Nb2RlbCBUeXBlPC9kaXY+CiAgICAgICAgPHBhcGVyLXJhZGlvLWdyb3VwIHNlbGVjdGVkPSJ7e21vZGVsVHlwZX19Ij4KICAgICAgICAgIDxwYXBlci1yYWRpby1idXR0b24gbmFtZT0iY2xhc3NpZmljYXRpb24iPkNsYXNzaWZpY2F0aW9uPC9wYXBlci1yYWRpby1idXR0b24+CiAgICAgICAgICA8cGFwZXItcmFkaW8tYnV0dG9uIG5hbWU9InJlZ3Jlc3Npb24iPlJlZ3Jlc3Npb248L3BhcGVyLXJhZGlvLWJ1dHRvbj4KICAgICAgICA8L3BhcGVyLXJhZGlvLWdyb3VwPgogICAgICA8L2Rpdj4KICAgICAgPHBhcGVyLWNoZWNrYm94IGNoZWNrZWQ9Int7dXNlUHJlZGljdEFwaX19IiBjbGFzcz0icHJlZGljdC1jaGVja2JveCI+CiAgICAgICAgVXNlcyBQcmVkaWN0IEFQSQogICAgICA8L3BhcGVyLWNoZWNrYm94PgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJmbGV4LWhvbGRlciI+CiAgICAgIDxwYXBlci1pbnB1dCBhbHdheXMtZmxvYXQtbGFiZWwgbGFiZWw9IklucHV0IHRlbnNvciBuYW1lIiBwbGFjZWhvbGRlcj0iW1twcmVkaWN0SW5wdXRUZW5zb3JdXSIgdmFsdWU9Int7cHJlZGljdElucHV0VGVuc29yfX0iIGNsYXNzPSJpbnB1dC1pbi1yb3ciIGhpZGRlbiQ9Iltbc2hvdWxkRGlzYWJsZVByZWRpY3RUZW5zb3JDb250cm9sc18odXNlUHJlZGljdEFwaSldXSI+CiAgICAgIDwvcGFwZXItaW5wdXQ+CiAgICAgIDxwYXBlci1pbnB1dCBhbHdheXMtZmxvYXQtbGFiZWwgbGFiZWw9Ik91dHB1dCB0ZW5zb3IgbmFtZSIgcGxhY2Vob2xkZXI9IltbcHJlZGljdE91dHB1dFRlbnNvcl1dIiB2YWx1ZT0ie3twcmVkaWN0T3V0cHV0VGVuc29yfX0iIGNsYXNzPSJpbnB1dC1pbi1yb3ciIGhpZGRlbiQ9Iltbc2hvdWxkRGlzYWJsZVByZWRpY3RUZW5zb3JDb250cm9sc18odXNlUHJlZGljdEFwaSldXSI+CiAgICAgIDwvcGFwZXItaW5wdXQ+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImZsZXgtaG9sZGVyIj4KICAgICAgPHBhcGVyLWlucHV0IGFsd2F5cy1mbG9hdC1sYWJlbCBsYWJlbD0iUGF0aCB0byBleGFtcGxlcyIgdmFsdWU9Int7ZXhhbXBsZXNQYXRofX0iIGNsYXNzPSJmbGV4LWdyb3ciPgogICAgICA8L3BhcGVyLWlucHV0PgogICAgICA8cGFwZXItY2hlY2tib3ggY2hlY2tlZD0ie3tzZXF1ZW5jZUV4YW1wbGVzfX0iIGNsYXNzPSJjaGVja2JveCI+CiAgICAgICAgU2VxdWVuY2VFeGFtcGxlcwogICAgICA8L3BhcGVyLWNoZWNrYm94PgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJmbGV4LWhvbGRlciI+CiAgICAgIDxwYXBlci1pbnB1dCBhbHdheXMtZmxvYXQtbGFiZWwgdHlwZT0ibnVtYmVyIiBjbGFzcz0iaW5wdXQtaW4tcm93IGZsZXgtZ3JvdyIgbGFiZWw9Ik1heGltdW0gbnVtYmVyIG9mIGV4YW1wbGVzIHRvIGxvYWQiIHBsYWNlaG9sZGVyPSJbW21heEV4YW1wbGVzXV0iIHZhbHVlPSJ7e21heEV4YW1wbGVzfX0iPgogICAgICA8L3BhcGVyLWlucHV0PgogICAgICA8cGFwZXItaW5wdXQgYWx3YXlzLWZsb2F0LWxhYmVsIHR5cGU9Im51bWJlciIgY2xhc3M9ImlucHV0LWluLXJvdyBmbGV4LWdyb3ciIGxhYmVsPSJTYW1wbGluZyByYXRpbyAoMC4yID0gc2FtcGxlIH4yMCUgb2YgZXhhbXBsZXMpIiBwbGFjZWhvbGRlcj0iW1tzYW1wbGluZ09kZHNdXSIgdmFsdWU9Int7c2FtcGxpbmdPZGRzfX0iPgogICAgICA8L3BhcGVyLWlucHV0PgogICAgPC9kaXY+CiAgICA8cGFwZXItaW5wdXQgYWx3YXlzLWZsb2F0LWxhYmVsIGxhYmVsPSJQYXRoIHRvIGxhYmVsIGRpY3Rpb25hcnkgKG9wdGlvbmFsKSIgcGxhY2Vob2xkZXI9IltbbGFiZWxWb2NhYlBhdGhdXSIgdmFsdWU9Int7bGFiZWxWb2NhYlBhdGh9fSIgZGlzYWJsZWQ9Iltbc2hvdWxkRGlzYWJsZUNsYXNzaWZpY2F0aW9uQ29udHJvbHNfKG1vZGVsVHlwZSldXSI+CiAgICA8L3BhcGVyLWlucHV0PgogICAgPGRpdiBjbGFzcz0iZmxleC1ob2xkZXIiPgogICAgICA8cGFwZXItaWNvbi1idXR0b24gaWNvbj0iaGVscCIgY2xhc3M9ImhlbHAtaWNvbiI+PC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgPGRpdj5NYXBzIHByZWRpY3RlZCBjbGFzcyBpbmRpY2VzIHRvIGxhYmVscyBmcm9tIHRleHQgZmlsZTwvZGl2PgogICAgICA8cGFwZXItdG9vbHRpcCBjbGFzcz0idG9vbHRpcCIgYW5pbWF0aW9uLWRlbGF5PSIwIiBwb3NpdGlvbj0iYm90dG9tIiBvZmZzZXQ9IjAiPgogICAgICAgIEFuIG9wdGlvbmFsIHRleHQgZmlsZSBmb3IgdXNlIHdpdGggdGhlIHJlc3VsdHMgb2YgYSBjbGFzc2lmaWNhdGlvbgogICAgICAgIG1vZGVsLiBDbGFzc2lmaWNhdGlvbiBtb2RlbHMgcmV0dXJuIHByZWRpY3RlZCBjbGFzc2VzIGFzIGluZGljZXMuIElmIGEKICAgICAgICB2b2NhYiBmaWxlIGlzIHByb3ZpZGVkLCBlYWNoIHByZWRpY3RlZCBjbGFzcyBpbmRleCB3aWxsIGJlIG1hcHBlZCB0byBhCiAgICAgICAgbGFiZWwgZnJvbSB0aGlzIGZpbGUgZm9yIHVzZSBpbiB0aGUgZGlzcGxheS4gRWFjaCBsaW5lIGluIHRoZSBmaWxlCiAgICAgICAgY29ycmVzcG9uZHMgdG8gYSBsYWJlbCwgd2l0aCB0aGUgZmlyc3QgbGluZSBjb3JyZXNwb25kaW5nIHRvIGNsYXNzIGluZGV4CiAgICAgICAgMC4KICAgICAgPC9wYXBlci10b29sdGlwPgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJmbGV4LWhvbGRlciI+CiAgICAgIDxwYXBlci1pbnB1dCBhbHdheXMtZmxvYXQtbGFiZWwgdHlwZT0ibnVtYmVyIiBsYWJlbD0iTWF4IGNsYXNzZXMgdG8gZGlzcGxheSIgcGxhY2Vob2xkZXI9IltbbWF4Q2xhc3Nlc1RvRGlzcGxheV1dIiB2YWx1ZT0ie3ttYXhDbGFzc2VzVG9EaXNwbGF5fX0iIGNsYXNzPSJpbnB1dC1pbi1yb3ciIGRpc2FibGVkPSJbW3Nob3VsZERpc2FibGVNdWx0aUNsYXNzQ29udHJvbHNfKG11bHRpQ2xhc3MpXV0iPgogICAgICA8L3BhcGVyLWlucHV0PgogICAgICA8cGFwZXItY2hlY2tib3ggZGlzYWJsZWQ9Iltbc2hvdWxkRGlzYWJsZUNsYXNzaWZpY2F0aW9uQ29udHJvbHNfKG1vZGVsVHlwZSldXSIgY2hlY2tlZD0ie3ttdWx0aUNsYXNzfX0iIGNsYXNzPSJjaGVja2JveCI+CiAgICAgICAgTXVsdGktY2xhc3MgY2xhc3NpZmljYXRpb24gbW9kZWwKICAgICAgPC9wYXBlci1jaGVja2JveD4KICAgIDwvZGl2PgogIDwvdGVtcGxhdGU+CgogIDxzY3JpcHQ+Ly9+fldFQlBBVEh+fi90Zi1pbnRlcmFjdGl2ZS1pbmZlcmVuY2UtZGFzaGJvYXJkL3RmLWluZmVyZW5jZS1wYW5lbC5odG1sLmpzClBvbHltZXIoe2lzOiJ0Zi1pbmZlcmVuY2UtcGFuZWwiLHByb3BlcnRpZXM6e2V4YW1wbGVzUGF0aDp7dHlwZTpTdHJpbmcsdmFsdWU6VmwuZ2V0U3RyaW5nSW5pdGlhbGl6ZXIoImV4YW1wbGVzUGF0aCIse2RlZmF1bHRWYWx1ZToiIn0pLG9ic2VydmVyOiJleGFtcGxlc1BhdGhDaGFuZ2VkXyIsbm90aWZ5OiEwfSxoaWRlTW9kZWxQYW5lMjp7dHlwZTpCb29sZWFuLHZhbHVlOlZsLmdldEJvb2xlYW5Jbml0aWFsaXplcigiaGlkZU1vZGVsUGFuZTIiLHtkZWZhdWx0VmFsdWU6ITB9KSxvYnNlcnZlcjoiaGlkZU1vZGVsUGFuZTJDaGFuZ2VkXyJ9LG1vZGVsTmFtZTp7dHlwZTpTdHJpbmcsdmFsdWU6IiIsbm90aWZ5OiEwfSxtb2RlbE5hbWUxOnt0eXBlOlN0cmluZyx2YWx1ZTpWbC5nZXRTdHJpbmdJbml0aWFsaXplcigibW9kZWxOYW1lMSIse2RlZmF1bHRWYWx1ZToiIn0pLG9ic2VydmVyOiJtb2RlbE5hbWUxQ2hhbmdlZF8iLG5vdGlmeTohMH0sbW9kZWxOYW1lMjp7dHlwZTpTdHJpbmcsCnZhbHVlOlZsLmdldFN0cmluZ0luaXRpYWxpemVyKCJtb2RlbE5hbWUyIix7ZGVmYXVsdFZhbHVlOiIifSksb2JzZXJ2ZXI6Im1vZGVsTmFtZTJDaGFuZ2VkXyIsbm90aWZ5OiEwfSxpbmZlcmVuY2VBZGRyZXNzOnt0eXBlOlN0cmluZyx2YWx1ZToiIixub3RpZnk6ITB9LGluZmVyZW5jZUFkZHJlc3MxOnt0eXBlOlN0cmluZyx2YWx1ZTpWbC5nZXRTdHJpbmdJbml0aWFsaXplcigiaW5mZXJlbmNlQWRkcmVzczEiLHtkZWZhdWx0VmFsdWU6IiJ9KSxvYnNlcnZlcjoiaW5mZXJlbmNlQWRkcmVzczFDaGFuZ2VkXyIsbm90aWZ5OiEwfSxpbmZlcmVuY2VBZGRyZXNzMjp7dHlwZTpTdHJpbmcsdmFsdWU6VmwuZ2V0U3RyaW5nSW5pdGlhbGl6ZXIoImluZmVyZW5jZUFkZHJlc3MyIix7ZGVmYXVsdFZhbHVlOiIifSksb2JzZXJ2ZXI6ImluZmVyZW5jZUFkZHJlc3MyQ2hhbmdlZF8iLG5vdGlmeTohMH0sbW9kZWxUeXBlOnt0eXBlOlN0cmluZyx2YWx1ZTpWbC5nZXRTdHJpbmdJbml0aWFsaXplcigibW9kZWxUeXBlIiwKe2RlZmF1bHRWYWx1ZToiY2xhc3NpZmljYXRpb24ifSksb2JzZXJ2ZXI6Im1vZGVsVHlwZUNoYW5nZWRfIixub3RpZnk6ITB9LG1vZGVsVmVyc2lvbjp7dHlwZTpTdHJpbmcsdmFsdWU6IiIsbm90aWZ5OiEwfSxtb2RlbFZlcnNpb24xOnt0eXBlOlN0cmluZyx2YWx1ZTpWbC5nZXRTdHJpbmdJbml0aWFsaXplcigibW9kZWxWZXJzaW9uMSIse2RlZmF1bHRWYWx1ZToiIn0pLG9ic2VydmVyOiJtb2RlbFZlcnNpb24xQ2hhbmdlZF8iLG5vdGlmeTohMH0sbW9kZWxWZXJzaW9uMjp7dHlwZTpTdHJpbmcsdmFsdWU6VmwuZ2V0U3RyaW5nSW5pdGlhbGl6ZXIoIm1vZGVsVmVyc2lvbjIiLHtkZWZhdWx0VmFsdWU6IiJ9KSxvYnNlcnZlcjoibW9kZWxWZXJzaW9uMkNoYW5nZWRfIixub3RpZnk6ITB9LG1vZGVsU2lnbmF0dXJlOnt0eXBlOlN0cmluZyx2YWx1ZToiIixub3RpZnk6ITB9LG1vZGVsU2lnbmF0dXJlMTp7dHlwZTpTdHJpbmcsdmFsdWU6VmwuZ2V0U3RyaW5nSW5pdGlhbGl6ZXIoIm1vZGVsU2lnbmF0dXJlMSIsCntkZWZhdWx0VmFsdWU6IiJ9KSxvYnNlcnZlcjoibW9kZWxTaWduYXR1cmUxQ2hhbmdlZF8iLG5vdGlmeTohMH0sbW9kZWxTaWduYXR1cmUyOnt0eXBlOlN0cmluZyx2YWx1ZTpWbC5nZXRTdHJpbmdJbml0aWFsaXplcigibW9kZWxTaWduYXR1cmUyIix7ZGVmYXVsdFZhbHVlOiIifSksb2JzZXJ2ZXI6Im1vZGVsU2lnbmF0dXJlMkNoYW5nZWRfIixub3RpZnk6ITB9LG1heEV4YW1wbGVzOnt0eXBlOk51bWJlcix2YWx1ZTpWbC5nZXRTdHJpbmdJbml0aWFsaXplcigibWF4RXhhbXBsZXMiLHtkZWZhdWx0VmFsdWU6IjEwMDAifSksb2JzZXJ2ZXI6Im1heEV4YW1wbGVzQ2hhbmdlZF8iLG5vdGlmeTohMH0sbGFiZWxWb2NhYlBhdGg6e3R5cGU6U3RyaW5nLHZhbHVlOlZsLmdldFN0cmluZ0luaXRpYWxpemVyKCJsYWJlbFZvY2FiUGF0aCIse2RlZmF1bHRWYWx1ZToiIn0pLG9ic2VydmVyOiJsYWJlbFZvY2FiUGF0aENoYW5nZWRfIixub3RpZnk6ITB9LG11bHRpQ2xhc3M6e3R5cGU6Qm9vbGVhbiwKbm90aWZ5OiEwLHZhbHVlOlZsLmdldEJvb2xlYW5Jbml0aWFsaXplcigibXVsdGlDbGFzcyIse2RlZmF1bHRWYWx1ZTohMX0pLG9ic2VydmVyOiJtdWx0aUNsYXNzQ2hhbmdlZF8ifSxzZXF1ZW5jZUV4YW1wbGVzOnt0eXBlOkJvb2xlYW4sbm90aWZ5OiEwLHZhbHVlOlZsLmdldEJvb2xlYW5Jbml0aWFsaXplcigic2VxdWVuY2VFeGFtcGxlcyIse2RlZmF1bHRWYWx1ZTohMX0pLG9ic2VydmVyOiJzZXF1ZW5jZUV4YW1wbGVzQ2hhbmdlZF8ifSxtYXhDbGFzc2VzVG9EaXNwbGF5Ont0eXBlOk51bWJlcix2YWx1ZTpWbC5nZXRTdHJpbmdJbml0aWFsaXplcigibWF4Q2xhc3Nlc1RvRGlzcGxheSIse2RlZmF1bHRWYWx1ZToiNSJ9KSxvYnNlcnZlcjoibWF4Q2xhc3Nlc1RvRGlzcGxheUNoYW5nZWRfIixub3RpZnk6ITB9LHNhbXBsaW5nT2Rkczp7dHlwZTpOdW1iZXIsdmFsdWU6VmwuZ2V0U3RyaW5nSW5pdGlhbGl6ZXIoInNhbXBsaW5nT2RkcyIse2RlZmF1bHRWYWx1ZToiMSJ9KSxvYnNlcnZlcjoic2FtcGxpbmdPZGRzQ2hhbmdlZF8iLApub3RpZnk6ITB9LHVzZVByZWRpY3RBcGk6e3R5cGU6Qm9vbGVhbixub3RpZnk6ITAsdmFsdWU6VmwuZ2V0Qm9vbGVhbkluaXRpYWxpemVyKCJ1c2VQcmVkaWN0QXBpIix7ZGVmYXVsdFZhbHVlOiExfSksb2JzZXJ2ZXI6InVzZVByZWRpY3RBcGlDaGFuZ2VkXyJ9LHByZWRpY3RJbnB1dFRlbnNvcjp7dHlwZTpTdHJpbmcsdmFsdWU6VmwuZ2V0U3RyaW5nSW5pdGlhbGl6ZXIoInByZWRpY3RJbnB1dFRlbnNvciIse2RlZmF1bHRWYWx1ZToiZXhhbXBsZXMifSksb2JzZXJ2ZXI6InByZWRpY3RJbnB1dFRlbnNvckNoYW5nZWRfIixub3RpZnk6ITB9LHByZWRpY3RPdXRwdXRUZW5zb3I6e3R5cGU6U3RyaW5nLHZhbHVlOlZsLmdldFN0cmluZ0luaXRpYWxpemVyKCJwcmVkaWN0T3V0cHV0VGVuc29yIix7ZGVmYXVsdFZhbHVlOiJwcm9iYWJpbGl0aWVzIn0pLG9ic2VydmVyOiJwcmVkaWN0T3V0cHV0VGVuc29yQ2hhbmdlZF8iLG5vdGlmeTohMH19LG9ic2VydmVyczpbInVwZGF0ZU1vZGVsTmFtZShtb2RlbE5hbWUxLCBtb2RlbE5hbWUyKSIsCiJ1cGRhdGVJbmZlcmVuY2VBZGRyZXNzKGluZmVyZW5jZUFkZHJlc3MxLCBpbmZlcmVuY2VBZGRyZXNzMikiLCJ1cGRhdGVNb2RlbFZlcnNpb24obW9kZWxWZXJzaW9uMSwgbW9kZWxWZXJzaW9uMikiLCJ1cGRhdGVNb2RlbFNpZ25hdHVyZShtb2RlbFNpZ25hdHVyZTEsIG1vZGVsU2lnbmF0dXJlMikiXSx1cGRhdGVNb2RlbE5hbWU6ZnVuY3Rpb24oYSxjKXt0aGlzLm1vZGVsTmFtZT1hKyIsIitjO3RoaXMubW9kZWxOYW1lPXRoaXMubW9kZWxOYW1lLnJlcGxhY2UoLyheLCl8KCwkKS9nLCIiKX0sdXBkYXRlSW5mZXJlbmNlQWRkcmVzczpmdW5jdGlvbihhLGMpe3RoaXMuaW5mZXJlbmNlQWRkcmVzcz1hKyIsIitjO3RoaXMuaW5mZXJlbmNlQWRkcmVzcz10aGlzLmluZmVyZW5jZUFkZHJlc3MucmVwbGFjZSgvKF4sKXwoLCQpL2csIiIpfSx1cGRhdGVNb2RlbFZlcnNpb246ZnVuY3Rpb24oYSxjKXt0aGlzLm1vZGVsVmVyc2lvbj1hKyIsIitjfSx1cGRhdGVNb2RlbFNpZ25hdHVyZTpmdW5jdGlvbihhLApjKXt0aGlzLm1vZGVsU2lnbmF0dXJlPWErIiwiK2N9LGFkZE1vZGVsQ2xpY2tlZF86ZnVuY3Rpb24oKXt0aGlzLmhpZGVNb2RlbFBhbmUyPSF0aGlzLmhpZGVNb2RlbFBhbmUyfSxleGFtcGxlc1BhdGhDaGFuZ2VkXzpWbC5nZXRTdHJpbmdPYnNlcnZlcigiZXhhbXBsZXNQYXRoIix7ZGVmYXVsdFZhbHVlOiIifSksbW9kZWxOYW1lMUNoYW5nZWRfOlZsLmdldFN0cmluZ09ic2VydmVyKCJtb2RlbE5hbWUxIix7ZGVmYXVsdFZhbHVlOiIifSksbW9kZWxOYW1lMkNoYW5nZWRfOlZsLmdldFN0cmluZ09ic2VydmVyKCJtb2RlbE5hbWUyIix7ZGVmYXVsdFZhbHVlOiIifSksaW5mZXJlbmNlQWRkcmVzczFDaGFuZ2VkXzpWbC5nZXRTdHJpbmdPYnNlcnZlcigiaW5mZXJlbmNlQWRkcmVzczEiLHtkZWZhdWx0VmFsdWU6IiJ9KSxpbmZlcmVuY2VBZGRyZXNzMkNoYW5nZWRfOlZsLmdldFN0cmluZ09ic2VydmVyKCJpbmZlcmVuY2VBZGRyZXNzMiIse2RlZmF1bHRWYWx1ZToiIn0pLG1vZGVsVHlwZUNoYW5nZWRfOlZsLmdldFN0cmluZ09ic2VydmVyKCJtb2RlbFR5cGUiLAp7ZGVmYXVsdFZhbHVlOiJjbGFzc2lmaWNhdGlvbiJ9KSxtb2RlbFZlcnNpb24xQ2hhbmdlZF86VmwuZ2V0U3RyaW5nT2JzZXJ2ZXIoIm1vZGVsVmVyc2lvbjEiLHtkZWZhdWx0VmFsdWU6IiJ9KSxtb2RlbFZlcnNpb24yQ2hhbmdlZF86VmwuZ2V0U3RyaW5nT2JzZXJ2ZXIoIm1vZGVsVmVyc2lvbjIiLHtkZWZhdWx0VmFsdWU6IiJ9KSxtb2RlbFNpZ25hdHVyZTFDaGFuZ2VkXzpWbC5nZXRTdHJpbmdPYnNlcnZlcigibW9kZWxTaWduYXR1cmUxIix7ZGVmYXVsdFZhbHVlOiIifSksbW9kZWxTaWduYXR1cmUyQ2hhbmdlZF86VmwuZ2V0U3RyaW5nT2JzZXJ2ZXIoIm1vZGVsU2lnbmF0dXJlMiIse2RlZmF1bHRWYWx1ZToiIn0pLG1heEV4YW1wbGVzQ2hhbmdlZF86VmwuZ2V0U3RyaW5nT2JzZXJ2ZXIoIm1heEV4YW1wbGVzIix7ZGVmYXVsdFZhbHVlOiIxMDAwIn0pLGxhYmVsVm9jYWJQYXRoQ2hhbmdlZF86VmwuZ2V0U3RyaW5nT2JzZXJ2ZXIoImxhYmVsVm9jYWJQYXRoIix7ZGVmYXVsdFZhbHVlOiIifSksCm1heENsYXNzZXNUb0Rpc3BsYXlDaGFuZ2VkXzpWbC5nZXRTdHJpbmdPYnNlcnZlcigibWF4Q2xhc3Nlc1RvRGlzcGxheSIse2RlZmF1bHRWYWx1ZToiNSJ9KSxzYW1wbGluZ09kZHNDaGFuZ2VkXzpWbC5nZXRTdHJpbmdPYnNlcnZlcigic2FtcGxpbmdPZGRzIix7ZGVmYXVsdFZhbHVlOiIxIn0pLG11bHRpQ2xhc3NDaGFuZ2VkXzpWbC5nZXRCb29sZWFuT2JzZXJ2ZXIoIm11bHRpQ2xhc3MiLHtkZWZhdWx0VmFsdWU6ITF9KSxzZXF1ZW5jZUV4YW1wbGVzQ2hhbmdlZF86VmwuZ2V0Qm9vbGVhbk9ic2VydmVyKCJzZXF1ZW5jZUV4YW1wbGVzIix7ZGVmYXVsdFZhbHVlOiExfSksaGlkZU1vZGVsUGFuZTJDaGFuZ2VkXzpWbC5nZXRCb29sZWFuT2JzZXJ2ZXIoImhpZGVNb2RlbFBhbmUyIix7ZGVmYXVsdFZhbHVlOiEwfSksdXNlUHJlZGljdEFwaUNoYW5nZWRfOlZsLmdldEJvb2xlYW5PYnNlcnZlcigidXNlUHJlZGljdEFwaSIse2RlZmF1bHRWYWx1ZTohMX0pLHByZWRpY3RPdXRwdXRUZW5zb3JDaGFuZ2VkXzpWbC5nZXRTdHJpbmdPYnNlcnZlcigicHJlZGljdE91dHB1dFRlbnNvciIsCntkZWZhdWx0VmFsdWU6InByb2JhYmlsaXRpZXMifSkscHJlZGljdElucHV0VGVuc29yQ2hhbmdlZF86VmwuZ2V0U3RyaW5nT2JzZXJ2ZXIoInByZWRpY3RJbnB1dFRlbnNvciIse2RlZmF1bHRWYWx1ZToiZXhhbXBsZXMifSksc2hvdWxkRGlzYWJsZUNsYXNzaWZpY2F0aW9uQ29udHJvbHNfOmZ1bmN0aW9uKGEpe3JldHVybiJyZWdyZXNzaW9uIj09YX0sc2hvdWxkRGlzYWJsZU11bHRpQ2xhc3NDb250cm9sc186ZnVuY3Rpb24oYSl7cmV0dXJuIWF9LHNob3VsZERpc2FibGVQcmVkaWN0VGVuc29yQ29udHJvbHNfOmZ1bmN0aW9uKGEpe3JldHVybiFhfX0pOwo8L3NjcmlwdD4KPC9kb20tbW9kdWxlPgoKCgoKCgoKCgoKPGRvbS1tb2R1bGUgaWQ9InZ6LWJhci1jaGFydCI+CiAgPHRlbXBsYXRlPgogICAgPGRpdiBpZD0idG9vbHRpcCI+CiAgICAgIDx0YWJsZT4KICAgICAgICA8dGhlYWQ+CiAgICAgICAgICA8dHIgaWQ9InRvb2x0aXAtdGFibGUtaGVhZGVyLXJvdyI+PC90cj4KICAgICAgICA8L3RoZWFkPgogICAgICAgIDx0Ym9keT48L3Rib2R5PgogICAgICA8L3RhYmxlPgogICAgPC9kaXY+CiAgICA8ZGl2IGlkPSJjaGFydGRpdiI+PC9kaXY+CiAgICA8c3R5bGUgaW5jbHVkZT0icGxvdHRhYmxlLXN0eWxlIj48L3N0eWxlPgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgZmxleC1zaHJpbms6IDE7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgIH0KICAgICAgZGl2IHsKICAgICAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICAgIGZsZXgtc2hyaW5rOiAxOwogICAgICB9CiAgICAgIHRkIHsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDVweDsKICAgICAgICBwYWRkaW5nLXJpZ2h0OiA1cHg7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgIH0KICAgICAgI3Rvb2x0aXAgewogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIGJveC1zaGFkb3c6IDAgMXB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMyk7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC44KTsKICAgICAgICBjb2xvcjogd2hpdGU7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjRlbTsKICAgICAgICBwYWRkaW5nOiA4cHg7CiAgICAgICAgei1pbmRleDogNTsKICAgICAgICBjdXJzb3I6IG5vbmU7CiAgICAgICAgbWFyZ2luLXRvcDogMTBweDsKICAgICAgfQogICAgICAuc3dhdGNoIHsKICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICAgICAgd2lkdGg6IDE0cHg7CiAgICAgICAgaGVpZ2h0OiAxNHB4OwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIGJvcmRlcjogMnB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgMCk7CiAgICAgIH0KICAgICAgLmNsb3Nlc3QgLnN3YXRjaCB7CiAgICAgICAgYm9yZGVyOiAycHggc29saWQgd2hpdGU7CiAgICAgIH0KICAgICAgdGggewogICAgICAgIHBhZGRpbmctbGVmdDogNXB4OwogICAgICAgIHBhZGRpbmctcmlnaHQ6IDVweDsKICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CiAgPHNjcmlwdD4vL35+V0VCUEFUSH5+L3Z6LWJhci1jaGFydC92ei1iYXItY2hhcnQuanMKdmFyIEZtOwooZnVuY3Rpb24oKXtQb2x5bWVyKHtpczoidnotYmFyLWNoYXJ0Iixwcm9wZXJ0aWVzOntkYXRhOk9iamVjdCxsaW5lczp7dHlwZTpPYmplY3QsdmFsdWU6KCk9Pih7fSl9LGNvbG9yU2NhbGU6e3R5cGU6T2JqZWN0LHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuKG5ldyBQbG90dGFibGUuU2NhbGVzLkNvbG9yKS5yYW5nZShkMy5zY2hlbWVDYXRlZ29yeTEwKX19LGxpbmVzQ29sb3JTY2FsZTp7dHlwZTpPYmplY3QsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IFBsb3R0YWJsZS5TY2FsZXMuQ29sb3IpLnJhbmdlKGQzLnNjaGVtZUNhdGVnb3J5MTApfX0sdG9vbHRpcENvbHVtbnM6e3R5cGU6QXJyYXksdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm5be3RpdGxlOiJOYW1lIixldmFsdWF0ZTpmdW5jdGlvbihjKXtyZXR1cm4gYy5rZXl9fSx7dGl0bGU6IlgiLGV2YWx1YXRlOmZ1bmN0aW9uKGMpe3JldHVybiBjLnZhbHVlLnh9fSx7dGl0bGU6IlkiLGV2YWx1YXRlOmZ1bmN0aW9uKGMpe3JldHVybiBjLnZhbHVlLnl9fV19fSxfYXR0YWNoZWQ6Qm9vbGVhbiwKX2NoYXJ0Ok9iamVjdH0sb2JzZXJ2ZXJzOlsiX21ha2VDaGFydChkYXRhLCBsaW5lcywgY29sb3JTY2FsZSwgbGluZXNDb2xvclNjYWxlLCB0b29sdGlwQ29sdW1ucywgX2F0dGFjaGVkKSJdLHJlZHJhdzpmdW5jdGlvbigpe3RoaXMuX2NoYXJ0JiZ0aGlzLl9jaGFydC5yZWRyYXcoKX0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl9hdHRhY2hlZD0hMH0sZGV0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl9hdHRhY2hlZD0hMX0scmVhZHk6ZnVuY3Rpb24oKXt0aGlzLnNjb3BlU3VidHJlZSh0aGlzLiQudG9vbHRpcCwhMCk7dGhpcy5zY29wZVN1YnRyZWUodGhpcy4kLmNoYXJ0ZGl2LCEwKX0sX21ha2VDaGFydDpmdW5jdGlvbigpe3RoaXMuX2NoYXJ0JiZ0aGlzLl9jaGFydC5kZXN0cm95KCk7dmFyIGM9ZDMuc2VsZWN0KHRoaXMuJC50b29sdGlwKTtjPW5ldyBhKHRoaXMuZGF0YSx0aGlzLmxpbmVzLHRoaXMuY29sb3JTY2FsZSx0aGlzLmxpbmVzQ29sb3JTY2FsZSxjLHRoaXMudG9vbHRpcENvbHVtbnMpOwp2YXIgZD1kMy5zZWxlY3QodGhpcy4kLmNoYXJ0ZGl2KTtjLnJlbmRlclRvKGQpO3RoaXMuX2NoYXJ0PWN9fSk7Y2xhc3MgYXtjb25zdHJ1Y3RvcihjLGQsZixnLGwsayl7Zi5kb21haW4oXy5zb3J0QnkoXy5rZXlzKGMpKSk7dGhpcy5kYXRhPWM7dGhpcy5saW5lcz1kO3RoaXMuY29sb3JTY2FsZT1mO3RoaXMubGluZXNDb2xvclNjYWxlPWc7dGhpcy50b29sdGlwPWw7dGhpcy5vdXRlcj10aGlzLnBsb3Q9bnVsbDt0aGlzLmJ1aWxkQ2hhcnQoYyxkLGYsZyk7dGhpcy5zZXR1cFRvb2x0aXBzKGspfWJ1aWxkQ2hhcnQoYyxkLGYpe3RoaXMub3V0ZXImJnRoaXMub3V0ZXIuZGVzdHJveSgpO3ZhciBnPW5ldyBQbG90dGFibGUuU2NhbGVzLkNhdGVnb3J5O2NvbnN0IGw9bmV3IFBsb3R0YWJsZS5TY2FsZXMuTGluZWFyLGs9bmV3IFBsb3R0YWJsZS5BeGVzLkNhdGVnb3J5KGcsImJvdHRvbSIpLG09bmV3IFBsb3R0YWJsZS5BeGVzLk51bWVyaWMobCwibGVmdCIpLHA9bmV3IFBsb3R0YWJsZS5QbG90cy5DbHVzdGVyZWRCYXI7CnAueChmdW5jdGlvbihyKXtyZXR1cm4gci54fSxnKTtwLnkoZnVuY3Rpb24ocil7cmV0dXJuIHIueX0sbCk7Xy5rZXlzKGMpLmZvckVhY2gocj0+cC5hZGREYXRhc2V0KChuZXcgUGxvdHRhYmxlLkRhdGFzZXQoY1tyXSkpLm1ldGFkYXRhKHIpKSk7cC5hdHRyKCJmaWxsIixmdW5jdGlvbihyLHQsdil7cmV0dXJuIGYuc2NhbGUodi5tZXRhZGF0YSgpKX0pO3RoaXMucGxvdD1wO2NvbnN0IHE9Xy5rZXlzKGQpO2lmKDA8cS5sZW5ndGgpe2NvbnN0IHI9bmV3IFBsb3R0YWJsZS5QbG90cy5MaW5lO3IueChmdW5jdGlvbih0KXtyZXR1cm4gdC54fSxnKTtyLnkoZnVuY3Rpb24odCl7cmV0dXJuIHQueX0sbCk7cS5mb3JFYWNoKHQ9PnIuYWRkRGF0YXNldCgobmV3IFBsb3R0YWJsZS5EYXRhc2V0KGRbdF0pKS5tZXRhZGF0YSh0KSkpO3IuYXR0cigic3Ryb2tlIiwodCx2LEEpPT50aGlzLmxpbmVzQ29sb3JTY2FsZS5zY2FsZShBLm1ldGFkYXRhKCkpKTtnPW5ldyBQbG90dGFibGUuQ29tcG9uZW50cy5Hcm91cChbcCwKcl0pO3RoaXMub3V0ZXI9bmV3IFBsb3R0YWJsZS5Db21wb25lbnRzLlRhYmxlKFtbbSxnXSxbbnVsbCxrXV0pfWVsc2UgdGhpcy5vdXRlcj1uZXcgUGxvdHRhYmxlLkNvbXBvbmVudHMuVGFibGUoW1ttLHBdLFtudWxsLGtdXSl9c2V0dXBUb29sdGlwcyhjKXt2YXIgZD10aGlzLnRvb2x0aXAuc2VsZWN0KCJ0aGVhZCB0ciIpO2Quc2VsZWN0QWxsKCJ0aCIpLmRhdGEoYykuZW50ZXIoKS5hcHBlbmQoInRoIikudGV4dChnPT5nLnRpdGxlKTtkLmluc2VydCgidGgiLCI6Zmlyc3QtY2hpbGQiKTtjb25zdCBmPXRoaXMucGxvdDtkPW5ldyBibS5Qb2ludGVySW50ZXJhY3Rpb247ZC5hdHRhY2hUbyhmKTtkLm9uUG9pbnRlck1vdmUoZz0+eyhnPWYuZW50aXR5TmVhcmVzdChnKSkmJnRoaXMuZHJhd1Rvb2x0aXBzKGcsYyl9KTtkLm9uUG9pbnRlckV4aXQoKCk9Pnt0aGlzLnRvb2x0aXAuc3R5bGUoIm9wYWNpdHkiLDApfSl9ZHJhd1Rvb2x0aXBzKGMsZCl7Y29uc3QgZj1jLmRhdHVtLngsZz1jLmRhdGFzZXQubWV0YWRhdGEoKTsKdmFyIGw9Xy5tYXBWYWx1ZXModGhpcy5kYXRhLHA9Pl8uZmlsdGVyKHAscT0+cS54PT1mKSk7bD1fLnBpY2tCeShsLHA9PjA8cC5sZW5ndGgpO2w9Xy5tYXBWYWx1ZXMobCxwPT5wWzBdKTtsPWQzLmVudHJpZXMobCk7Y29uc3Qgaz10aGlzLnRvb2x0aXAuc2VsZWN0KCJ0Ym9keSIpLmh0bWwoIiIpLnNlbGVjdEFsbCgidHIiKS5kYXRhKGwpLmVudGVyKCkuYXBwZW5kKCJ0ciIpO2suc3R5bGUoIndoaXRlLXNwYWNlIiwibm93cmFwIik7ay5jbGFzc2VkKCJjbG9zZXN0IixwPT5wLmtleT09Zyk7Y29uc3QgbT10aGlzLmNvbG9yU2NhbGU7ay5hcHBlbmQoInRkIikuYXBwZW5kKCJkaXYiKS5jbGFzc2VkKCJzd2F0Y2giLCEwKS5zdHlsZSgiYmFja2dyb3VuZC1jb2xvciIscD0+bS5zY2FsZShwLmtleSkpO18uZWFjaChkLHA9PntrLmFwcGVuZCgidGQiKS50ZXh0KHE9PnAuZXZhbHVhdGUocSkpfSk7dGhpcy50b29sdGlwLnN0eWxlKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitjLnBvc2l0aW9uLngrCiJweCwiK2MucG9zaXRpb24ueSsicHgpIik7dGhpcy50b29sdGlwLnN0eWxlKCJvcGFjaXR5IiwxKX1yZW5kZXJUbyhjKXt0aGlzLnRhcmdldFNWRz1jO3RoaXMub3V0ZXIucmVuZGVyVG8oYyl9cmVkcmF3KCl7dGhpcy5vdXRlci5yZWRyYXcoKX1kZXN0cm95KCl7dGhpcy5vdXRlci5kZXN0cm95KCl9fX0pKEZtfHwoRm09e30pKTsKPC9zY3JpcHQ+CjwvZG9tLW1vZHVsZT4KCgoKCgo8ZG9tLW1vZHVsZSBpZD0idGYtY29uZnVzaW9uLW1hdHJpeCI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICB0YWJsZSB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICB9CiAgICAgIHRkIHsKICAgICAgICB0ZXh0LWFsaWduOiByaWdodDsKICAgICAgfQogICAgICB0aCwKICAgICAgdGQgewogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBwYWRkaW5nOiAzcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKICAgICAgfQogICAgICAuZmxleCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2U7CiAgICAgIH0KICAgICAgLnByZWQtbGFiZWwgewogICAgICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICAgICAgZm9udC1zaXplOiAxMHB4OwogICAgICB9CiAgICAgIC50b3RhbC1sYWJlbCB7CiAgICAgICAgY29sb3I6ICM1ZjYzNjg7CiAgICAgICAgZm9udC1zaXplOiAxMHB4OwogICAgICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICAgIH0KICAgICAgLnRvdGFsLWNlbGwgewogICAgICAgIGNvbG9yOiAjNWY2MzY4OwogICAgICB9CiAgICAgIC5hY3R1YWwtbGFiZWwgewogICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OwogICAgICAgIGZvbnQtc2l6ZTogMTBweDsKICAgICAgfQogICAgICAubi1sYWJlbCB7CiAgICAgICAgZm9udC1zaXplOiAxMHB4OwogICAgICAgIHZlcnRpY2FsLWFsaWduOiBib3R0b207CiAgICAgIH0KICAgICAgLnZhbHVlLWNlbGwgewogICAgICAgIGNvbG9yOiAjMjAyMTI0OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIGxpZ2h0Z3JleTsKICAgICAgfQogICAgICAucGFyZW50aGV0aWNhbCB7CiAgICAgICAgcGFkZGluZy1yaWdodDogNXB4OwogICAgICAgIHdpZHRoOiA1MHB4OwogICAgICB9CiAgICA8L3N0eWxlPgogICAgPGRpdiBpZD0iaG9sZGVyIj48L2Rpdj4KICA8L3RlbXBsYXRlPgoKICA8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdGYtaW50ZXJhY3RpdmUtaW5mZXJlbmNlLWRhc2hib2FyZC90Zi1jb25mdXNpb24tbWF0cml4Lmh0bWwuanMKUG9seW1lcih7aXM6InRmLWNvbmZ1c2lvbi1tYXRyaXgiLHByb3BlcnRpZXM6e2NvdW50czpPYmplY3QsYWxsSXRlbXM6e3R5cGU6QXJyYXksdmFsdWU6KCk9PltdfSxsYWJlbDpTdHJpbmcsYmFja2dyb3VuZDp7dHlwZTpPYmplY3QsdmFsdWU6ZDMuY29sb3IoImdyYXkiKX19LG9ic2VydmVyczpbImRyYXdNYXRyaXgoY291bnRzLCBhbGxJdGVtcykiXSxyZWFkeTpmdW5jdGlvbigpe3RoaXMuc2NvcGVTdWJ0cmVlKHRoaXMuJC5ob2xkZXIsITApfSxkcmF3TWF0cml4OmZ1bmN0aW9uKGEsYyl7dGhpcy4kLmhvbGRlci5pbm5lckhUTUw9IiI7aWYoYSl7dmFyIGQ9YztpZihudWxsPT1kfHwwPT1kLmxlbmd0aCl7Yz1uZXcgU2V0O3ZhciBmPU9iamVjdC5rZXlzKGEpO2Zvcih2YXIgZz0wO2c8Zi5sZW5ndGg7ZysrKXtjLmFkZChmW2ddKTt2YXIgbD1PYmplY3Qua2V5cyhhW2ZbZ11dKTtmb3IobGV0IHE9MDtxPGwubGVuZ3RoO3ErKyljLmFkZChsW3FdKX1kPUFycmF5LmZyb20oYy52YWx1ZXMoKSl9ZD0KZC5zb3J0KCk7Mj09ZC5sZW5ndGgmJiJObyI9PWRbMF0mJiJZZXMiPT1kWzFdJiYoZD1kLnJldmVyc2UoKSk7dmFyIGs9QXJyYXkoZC5sZW5ndGgpO18uZmlsbChrLDApO3ZhciBtPVtdO2ZvcihjPTA7YzxkLmxlbmd0aDtjKyspZj1BcnJheShkLmxlbmd0aCksXy5maWxsKGYsMCksbS5wdXNoKGYpO2ZvcihjPTA7YzxkLmxlbmd0aDtjKyspZm9yKGY9MDtmPGQubGVuZ3RoO2YrKylnPWRbY10sbD1kW2ZdLGcgaW4gYSYmbCBpbiBhW2ddJiYobVtjXVtmXT1hW2ddW2xdKTthPVtdO3ZhciBwPTA7Zm9yKGM9MDtjPG0ubGVuZ3RoO2MrKylmb3IoZj1tW2NdLnJlZHVjZSgocSxyKT0+cStyLDApLGEucHVzaChbMF0uY29uY2F0KG1bY10pLmNvbmNhdChbZl0pKSxmPTA7ZjxtLmxlbmd0aDtmKyspa1tmXSs9bVtjXVtmXSxwKz1tW2NdW2ZdO2M9dGhpcy5nZXRJbmRpY2VzKG0ubGVuZ3RoKzIpO2w9ZDMuc2VsZWN0KHRoaXMuJC5ob2xkZXIpLmFwcGVuZCgidGFibGUiKTtmPWwuYXBwZW5kKCJ0aGVhZCIpOwpnPWwuYXBwZW5kKCJ0Ym9keSIpO2w9bC5hcHBlbmQoInRmb290Iik7Zi5hcHBlbmQoInRyIikuc2VsZWN0QWxsKCJ0aCIpLmRhdGEoYykuZW50ZXIoKS5hcHBlbmQoInRoIikudGV4dChxPT4wPT1xP3RoaXMubGFiZWw6cTw9bS5sZW5ndGg/IlByZWRpY3RlZCAiK2RbcS0xXToiVG90YWwiKS5hdHRyKCJjbGFzcyIscT0+MD09cT8ibi1sYWJlbCI6cTw9bS5sZW5ndGg/InByZWQtbGFiZWwiOiJ0b3RhbC1sYWJlbCIpO2E9Zy5zZWxlY3RBbGwoInRyIikuZGF0YShhKS5lbnRlcigpLmFwcGVuZCgidHIiKS5zZWxlY3RBbGwoInRkIikuZGF0YSgocSxyKT0+cS5tYXAoKHQsdik9PjA9PXY/e3ZhbHVlOiJBY3R1YWwgIitkW3JdfTp7dmFsdWU6dCxyb3c6cn0pKS5lbnRlcigpLmFwcGVuZCgidGQiKS5hdHRyKCJjbGFzcyIsKHEscik9PjA9PXI/ImFjdHVhbC1sYWJlbCI6cjw9bS5sZW5ndGg/InZhbHVlLWNlbGwiOiJ0b3RhbC1jZWxsIikuc3R5bGUoImJhY2tncm91bmQiLChxLHIpPT57aWYoMD09CnJ8fHI+bS5sZW5ndGgpcmV0dXJuIiNGRkZGRkYiO3I9dGhpcy5iYWNrZ3JvdW5kO3Iub3BhY2l0eT1xLnZhbHVlL3A7cmV0dXJuIHIrIiJ9KS5hcHBlbmQoImRpdiIpLmNsYXNzZWQoImZsZXgiLCEwKTthLmFwcGVuZCgiZGl2IikuY2xhc3NlZCgicGFyZW50aGV0aWNhbCIsKHEscik9PiEhcikudGV4dChxPT4icm93ImluIHE/IigiK3EudmFsdWUrIikiOiIiKTthLmFwcGVuZCgiZGl2IikudGV4dCgocSxyKT0+MDxyP2QzLmZvcm1hdCgiLC4xJSIpKHEudmFsdWUvcCk6cS52YWx1ZSk7YT1sLmFwcGVuZCgidHIiKS5zZWxlY3RBbGwoInRkIikuZGF0YShjKS5lbnRlcigpLmFwcGVuZCgidGQiKTthLmNsYXNzZWQoInRvdGFsLWxhYmVsIiwocSxyKT0+MD09cik7YS5jbGFzc2VkKCJ0b3RhbC1jZWxsIiwocSxyKT0+MCE9cik7YT1hLmFwcGVuZCgiZGl2IikuY2xhc3NlZCgiZmxleCIsITApO2EuYXBwZW5kKCJkaXYiKS5jbGFzc2VkKCJwYXJlbnRoZXRpY2FsIiwocSxyKT0+ISFyKS50ZXh0KHE9PgowPT1xPyJUb3RhbCI6cTw9bS5sZW5ndGg/IigiK2tbcS0xXSsiKSI6IiIpO2EuYXBwZW5kKCJkaXYiKS50ZXh0KHE9PjA9PXE/IiI6cTw9bS5sZW5ndGg/ZDMuZm9ybWF0KCIsLjElIikoa1txLTFdL3ApOiIiKX19LGdldEluZGljZXM6ZnVuY3Rpb24oYSl7cmV0dXJuIEFycmF5LmFwcGx5KG51bGwse2xlbmd0aDphfSkubWFwKE51bWJlci5jYWxsLE51bWJlcil9fSk7Cjwvc2NyaXB0Pgo8L2RvbS1tb2R1bGU+CgoKCgoKPGRvbS1tb2R1bGUgaWQ9InRmLWluZmVyZW5jZS12aWV3ZXIiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CiAgICAgIC5ydW5zLWhvbGRlciB7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW4tcmV2ZXJzZTsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIG1heC1oZWlnaHQ6IDIwMHB4OwogICAgICB9CiAgICAgIC5yb3cgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgY29sb3I6ICMzYzQwNDM7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICB9CiAgICAgIC5oZWFkZXIgewogICAgICAgIGNvbG9yOiAjODA4NjhiOwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBwYWRkaW5nOiA0cHggMDsKICAgICAgICBib3JkZXItYm90dG9tOiBzb2xpZCAxcHggI2RhZGNlMDsKICAgICAgICBib3JkZXItdG9wOiBzb2xpZCAxcHggI2RhZGNlMDsKICAgICAgfQogICAgICAuZGFyay1yb3ctb25lIHsKICAgICAgICBiYWNrZ3JvdW5kOiAjY2JmMGY4OwogICAgICB9CiAgICAgIC5kYXJrLXJvdy10d28gewogICAgICAgIGJhY2tncm91bmQ6ICNmZmYzZTA7CiAgICAgIH0KICAgICAgLndoaXRlLXJvdyB7CiAgICAgICAgYmFja2dyb3VuZDogd2hpdGU7CiAgICAgIH0KICAgICAgLm1hcmtlciB7CiAgICAgICAgZmxleDogMC41OwogICAgICAgIG1hcmdpbi1yaWdodDogNXB4OwogICAgICB9CiAgICAgIC5tYXJrZXIubWFyay1vbmUgewogICAgICAgIGJhY2tncm91bmQ6ICMwMDdiODM7CiAgICAgICAgcGFkZGluZy1sZWZ0OiAxcHg7CiAgICAgIH0KICAgICAgLm1hcmtlci5tYXJrLXR3byB7CiAgICAgICAgYmFja2dyb3VuZDogI2ZmOTgwMDsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDFweDsKICAgICAgfQogICAgICAucnVuIHsKICAgICAgICBmbGV4OiAxMDsKICAgICAgfQogICAgICAubXVsdGktbW9kZWwgewogICAgICAgIGZsZXg6IDEwOwogICAgICB9CiAgICAgIC5vbmUtbW9kZWwgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KICAgICAgLnNob3ctbGFiZWwgewogICAgICAgIGZsZXg6IDIwOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQogICAgICAubm8tbGFiZWwgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KICAgICAgLnNjb3JlIHsKICAgICAgICBmbGV4OiAxMDsKICAgICAgfQogICAgICAuYXJyb3cgewogICAgICAgIGZsZXg6IDI7CiAgICAgIH0KICAgICAgLmRlbHRhIHsKICAgICAgICBmbGV4OiAxMDsKICAgICAgfQogICAgICAudGV4dCB7CiAgICAgICAgbWFyZ2luLXRvcDogNHB4OwogICAgICB9CiAgICAgIC5ncmVlbiB7CiAgICAgICAgY29sb3I6IGdyZWVuOwogICAgICB9CiAgICAgIC5yZWQgewogICAgICAgIGNvbG9yOiByZWQ7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8ZGl2IGNsYXNzPSJyb3cgaGVhZGVyIj4KICAgICAgPGRpdiBjbGFzcz0ibWFya2VyIj48L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0icnVuIj5SdW48L2Rpdj4KICAgICAgPGRpdiBjbGFzcyQ9IltbZ2V0TW9kZWxIZWFkZXJDbGFzcyhpbmZlcmVuY2VzKV1dIj5Nb2RlbDwvZGl2PgogICAgICA8ZGl2IGNsYXNzJD0iW1tnZXRMYWJlbEhlYWRlckNsYXNzKG1vZGVsVHlwZSldXSI+TGFiZWw8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0ic2NvcmUiPltbZ2V0U2NvcmVMYWJlbChtb2RlbFR5cGUpXV08L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iYXJyb3ciPjwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJkZWx0YSI+RGVsdGE8L2Rpdj4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0icnVucy1ob2xkZXIiPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW2luZmVyZW5jZXNdXSIgYXM9Im1vZGVsc0luZmVyZW5jZSIgaW5kZXgtYXM9InJ1bmluZGV4Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJyb3dzLWZvci1ydW4iPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1ttb2RlbHNJbmZlcmVuY2VdXSIgYXM9ImluZmVyZW5jZSIgaW5kZXgtYXM9Im1vZGVsaW5kZXgiPgogICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW2dldEluZmVyZW5jZUxpc3QoaW5mZXJlbmNlLCBtYXhFbnRyaWVzUGVyUnVuKV1dIj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzJD0iW1tnZXRSb3dDbGFzcyhydW5pbmRleCwgaW5mZXJlbmNlcywgbW9kZWxpbmRleCldXSI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzJD0iW1tnZXRNYXJrZXJDbGFzcyhydW5pbmRleCwgaW5mZXJlbmNlcywgbW9kZWxpbmRleCldXSI+PC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJydW4gdGV4dCI+W1tnZXRSdW5OdW1iZXIocnVuaW5kZXgpXV08L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3MkPSJbW2dldE1vZGVsQ2xhc3MoaW5mZXJlbmNlcyldXSI+CiAgICAgICAgICAgICAgICAgIDxkaXY+W1tnZXRNb2RlbE5hbWUobW9kZWxOYW1lcywgbW9kZWxpbmRleCldXTwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzJD0iW1tnZXRMYWJlbENsYXNzKG1vZGVsVHlwZSldXSI+CiAgICAgICAgICAgICAgICAgIDxkaXY+W1tnZXRMYWJlbChpdGVtKV1dPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InNjb3JlIHRleHQiPltbZ2V0UHJpbnRhYmxlU2NvcmUoaXRlbS5zY29yZSldXTwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYXJyb3ciPgogICAgICAgICAgICAgICAgICA8aXJvbi1pY29uIGljb249IltbZ2V0SWNvbihydW5pbmRleCwgaW5kZXgsIG1vZGVsaW5kZXgpXV0iIGNsYXNzJD0iW1tnZXRJY29uQ2xhc3MocnVuaW5kZXgsIGluZGV4LCBtb2RlbGluZGV4KV1dIj4KICAgICAgICAgICAgICAgICAgPC9pcm9uLWljb24+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRlbHRhIHRleHQiPgogICAgICAgICAgICAgICAgICBbW2dldFByaW50YWJsZURlbHRhKHJ1bmluZGV4LCBpbmRleCwgbW9kZWxpbmRleCldXQogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvZGl2PgogICAgICA8L3RlbXBsYXRlPgogICAgPC9kaXY+CiAgPC90ZW1wbGF0ZT4KCiAgPHNjcmlwdD4vL35+V0VCUEFUSH5+L3RmLWludGVyYWN0aXZlLWluZmVyZW5jZS1kYXNoYm9hcmQvdGYtaW5mZXJlbmNlLXZpZXdlci5odG1sLmpzClBvbHltZXIoe2lzOiJ0Zi1pbmZlcmVuY2Utdmlld2VyIixwcm9wZXJ0aWVzOntpbmZlcmVuY2VzOkFycmF5LG1vZGVsVHlwZTpTdHJpbmcsbW9kZWxOYW1lczpBcnJheSxtYXhFbnRyaWVzUGVyUnVuOnt0eXBlOk51bWJlcix2YWx1ZTo1fX0sZ2V0TGFiZWw6ZnVuY3Rpb24oYSl7bGV0IGM9YS5sYWJlbDthLnZvY2FiTGFiZWwmJihjKz0iICgiK2Eudm9jYWJMYWJlbCsiKSIpO3JldHVybiBjfSxnZXRMYWJlbENsYXNzOmZ1bmN0aW9uKGEpe3JldHVybiJjbGFzc2lmaWNhdGlvbiI9PWE/InNob3ctbGFiZWwgdGV4dCI6Im5vLWxhYmVsIn0sZ2V0TGFiZWxIZWFkZXJDbGFzczpmdW5jdGlvbihhKXtyZXR1cm4iY2xhc3NpZmljYXRpb24iPT1hPyJzaG93LWxhYmVsIjoibm8tbGFiZWwifSxnZXRNb2RlbENsYXNzOmZ1bmN0aW9uKGEpe3JldHVybiBhJiYxPGFbMF0ubGVuZ3RoPyJtdWx0aS1tb2RlbCB0ZXh0Ijoib25lLW1vZGVsIn0sZ2V0TW9kZWxIZWFkZXJDbGFzczpmdW5jdGlvbihhKXtyZXR1cm4gYSYmCjE8YVswXS5sZW5ndGg/Im11bHRpLW1vZGVsIjoib25lLW1vZGVsIn0sZ2V0U2NvcmVMYWJlbDpmdW5jdGlvbihhKXtyZXR1cm4iY2xhc3NpZmljYXRpb24iPT1hPyJTY29yZSI6IlZhbHVlIn0sZ2V0SWNvbkNsYXNzOmZ1bmN0aW9uKGEsYyxkKXtyZXR1cm4gdGhpcy5nZXRJY29uRGVjaXNpb24oYSxjLGQsImdyZWVuIiwicmVkIil9LGdldEljb246ZnVuY3Rpb24oYSxjLGQpe3JldHVybiB0aGlzLmdldEljb25EZWNpc2lvbihhLGMsZCwiaWNvbnM6YXJyb3ctdXB3YXJkIiwiaWNvbnM6YXJyb3ctZG93bndhcmQiKX0sZ2V0SWNvbkRlY2lzaW9uOmZ1bmN0aW9uKGEsYyxkLGYsZyl7aWYoMD09YSlyZXR1cm4iIjtjb25zdCBsPXRoaXMuaW5mZXJlbmNlc1thXVtkXVtjXS5sYWJlbDtjPXRoaXMuaW5mZXJlbmNlc1thXVtkXVtjXS5zY29yZTthPXRoaXMuaW5mZXJlbmNlc1thLTFdW2RdO2ZvcihkPTA7ZDxhLmxlbmd0aDtkKyspaWYoYVtkXS5sYWJlbD09bCl7aWYoYVtkXS5zY29yZT5jKXJldHVybiBnOwppZihhW2RdLnNjb3JlPGMpYnJlYWs7cmV0dXJuIiJ9cmV0dXJuIGZ9LGdldFJ1bk51bWJlcjpmdW5jdGlvbihhKXtyZXR1cm4gYSsxfSxnZXRNb2RlbE5hbWU6ZnVuY3Rpb24oYSxjKXtyZXR1cm4gYVtjXX0sZ2V0TWFya2VyQ2xhc3M6ZnVuY3Rpb24oYSxjLGQpe3JldHVybiJtYXJrZXIiKyhhPT1jLmxlbmd0aC0xPzA9PWQ/IiBtYXJrLW9uZSI6IiBtYXJrLXR3byI6IiIpfSxnZXRSb3dDbGFzczpmdW5jdGlvbihhLGMsZCl7bGV0IGY9InJvdyAiO3JldHVybiBmPWE9PWMubGVuZ3RoLTE/ZisoMD09ZD8iZGFyay1yb3ctb25lIjoiZGFyay1yb3ctdHdvIik6Zisid2hpdGUtcm93In0sZ2V0SW5mZXJlbmNlOmZ1bmN0aW9uKGEpe3JldHVybiBhfSxnZXRQcmludGFibGVTY29yZTpmdW5jdGlvbihhKXtyZXR1cm4gYS50b0ZpeGVkKDMpfSxnZXRQcmludGFibGVEZWx0YTpmdW5jdGlvbihhLGMsZCl7aWYoMD09YSlyZXR1cm4iIjtjb25zdCBmPXRoaXMuaW5mZXJlbmNlc1thXVtkXVtjXS5sYWJlbDsKYz10aGlzLmluZmVyZW5jZXNbYV1bZF1bY10uc2NvcmU7YT10aGlzLmluZmVyZW5jZXNbYS0xXVtkXTtmb3IoZD0wO2Q8YS5sZW5ndGg7ZCsrKWlmKGFbZF0ubGFiZWw9PWYpcmV0dXJuKGMtYVtkXS5zY29yZSkudG9GaXhlZCg2KTtyZXR1cm4iIn0sZ2V0SW5mZXJlbmNlTGlzdDpmdW5jdGlvbihhLGMpe3JldHVybiBhLnNsaWNlKDAsYyl9fSk7Cjwvc2NyaXB0Pgo8L2RvbS1tb2R1bGU+CgoKCgoKCgoKCgoKCgoKPHNjcmlwdD4vL35+V0VCUEFUSH5+L2ZhY2V0cy1kaXZlL2xpYi9ib3VuZGVkLW9iamVjdC5qcwovKgoKIENvcHlyaWdodCAyMDE3IEdvb2dsZSBJbmMuCgogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKCiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCgogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiovCnZhciBHbTsoZnVuY3Rpb24oYSl7YVthLkJvdHRvbT0wXT0iQm90dG9tIjthW2EuTGVmdD0xXT0iTGVmdCI7YVthLlJpZ2h0PTJdPSJSaWdodCI7YVthLlRvcD0zXT0iVG9wIn0pKEdtfHwoR209e30pKTsKY2xhc3MgSG17c2hvdWxkQmVWaXNpYmxlKGEsYyxkLGYpe2lmKHZvaWQgMCE9PXRoaXMubWluU2NhbGUpcmV0dXJuIHRoaXMuc2NhbGVEb3dufHxjPj10aGlzLm1pblNjYWxlO2lmKCF0aGlzLmJvdW5kaW5nQm94KXJldHVybiEwO2NvbnN0IGc9dGhpcy5ib3VuZGluZ0JveDtpZihnLmxlZnQ+ZC54K2YucmlnaHR8fGcucmlnaHQ8ZC54K2YubGVmdHx8Zy5ib3R0b20+ZC55K2YudG9wfHxnLnRvcDxkLnkrZi5ib3R0b20pcmV0dXJuITE7Zj10aGlzLmVsZW1lbnRNYXJnaW58fHtib3R0b206MCxsZWZ0OjAscmlnaHQ6MCx0b3A6MH07ZD12b2lkIDA9PT10aGlzLndpZHRoP2EuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGgrZi5sZWZ0K2YucmlnaHQ6dGhpcy53aWR0aDthPXZvaWQgMD09PXRoaXMuaGVpZ2h0P2EuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0K2YudG9wK2YuYm90dG9tOnRoaXMuaGVpZ2h0O2Y9aXNGaW5pdGUoZy50b3ApJiZpc0Zpbml0ZShnLmJvdHRvbSk/CmcudG9wLWcuYm90dG9tOkluZmluaXR5O3JldHVybihpc0Zpbml0ZShnLmxlZnQpJiZpc0Zpbml0ZShnLnJpZ2h0KT9nLnJpZ2h0LWcubGVmdDpJbmZpbml0eSkqYz49ZCYmZipjPj1hfX07Cjwvc2NyaXB0PgoKPHNjcmlwdD4vL35+V0VCUEFUSH5+L2ZhY2V0cy1kaXZlL2xpYi9zb3J0aW5nLmpzCmZ1bmN0aW9uIEltKGEsYyl7cmV0dXJuIG51bGwhPT1hJiZ2b2lkIDAhPT1hfHxudWxsIT09YyYmdm9pZCAwIT09Yz9udWxsPT09YXx8dm9pZCAwPT09YT8tMTpudWxsPT09Y3x8dm9pZCAwPT09Yz8xOiJudW1iZXIiPT09dHlwZW9mIGEmJiJudW1iZXIiPT09dHlwZW9mIGM/aXNOYU4oYSkmJmlzTmFOKGMpPzA6aXNOYU4oYSk/LTE6aXNOYU4oYyk/MTphLWM6InN0cmluZyIhPT10eXBlb2YgYT8tMToic3RyaW5nIiE9PXR5cGVvZiBjPzE6YS5sb2NhbGVDb21wYXJlKGMpOmE9PT1jPzA6dm9pZCAwPT09YT8tMToxfQpmdW5jdGlvbiBKbShhLGMpe3JldHVybiBudWxsIT09YSYmdm9pZCAwIT09YXx8bnVsbCE9PWMmJnZvaWQgMCE9PWM/bnVsbD09PWF8fHZvaWQgMD09PWE/LTE6bnVsbD09PWN8fHZvaWQgMD09PWM/MToibnVtYmVyIj09PXR5cGVvZiBhJiYibnVtYmVyIj09PXR5cGVvZiBjP2lzTmFOKGEpJiZpc05hTihjKT8wOmlzTmFOKGEpPy0xOmlzTmFOKGMpPzE6Yy1hOiJzdHJpbmciIT09dHlwZW9mIGE/LTE6InN0cmluZyIhPT10eXBlb2YgYz8xOi1hLmxvY2FsZUNvbXBhcmUoYyk6YT09PWM/MDp2b2lkIDA9PT1hPy0xOjF9CmZ1bmN0aW9uIEttKGEsYyl7cmV0dXJuIG51bGwhPT1hJiZ2b2lkIDAhPT1hfHxudWxsIT09YyYmdm9pZCAwIT09Yz9udWxsPT09YXx8dm9pZCAwPT09YT8tMTpudWxsPT09Y3x8dm9pZCAwPT09Yz8xOiJzdHJpbmciPT09dHlwZW9mIGEmJiJzdHJpbmciPT09dHlwZW9mIGM/YS5sb2NhbGVDb21wYXJlKGMpOiJudW1iZXIiIT09dHlwZW9mIGE/LTE6Im51bWJlciIhPT10eXBlb2YgYz8xOmlzTmFOKGEpJiZpc05hTihjKT8wOmlzTmFOKGEpPy0xOmlzTmFOKGMpPzE6YS1jOmE9PT1jPzA6dm9pZCAwPT09YT8tMToxfTsKPC9zY3JpcHQ+Cgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vZmFjZXRzLWRpdmUvbGliL2dyaWQuanMKY29uc3QgTG09KGEsYyxkLGYpPT57YT1NYXRoLmZsb29yKDFFLTYrZC5taW5XaWR0aC9mLml0ZW1Bc3BlY3RSYXRpbyk7cmV0dXJuIDE8YT9jJWEvKGEtMSk6MH0sTW09KGEsYyxkLGYpPT57YT1NYXRoLmZsb29yKDFFLTYrZC5taW5XaWR0aC9mLml0ZW1Bc3BlY3RSYXRpbyk7ZD1NYXRoLmNlaWwoZC5pdGVtcy5sZW5ndGgvYSk7cmV0dXJuIDE8ZD9NYXRoLmZsb29yKGMvYSkvKGQtMSk6MH0sTm09KGEsYyk9Pntjb25zdCBkPSJyaWdodCI9PT1jPzE6Im1pZGRsZSI9PT1jPy41OjAsZj0idG9wIj09PWE/MToibWlkZGxlIj09PWE/LjU6MDtyZXR1cm4oZyxsLGssbSk9Pntjb25zdCBwPWsuaW5uZXJXaWR0aC1tLml0ZW1Bc3BlY3RSYXRpbyxxPWsuaW5uZXJIZWlnaHQtMTtyZXR1cm57eDpMbShnLGwsayxtKS9wKihrLm1pbldpZHRoLW0uaXRlbUFzcGVjdFJhdGlvKStkKihrLmlubmVyV2lkdGgtay5taW5XaWR0aCkvcCx5Ok1tKGcsbCxrLG0pL3EqKGsubWluSGVpZ2h0LTEpK2YqKGsuaW5uZXJIZWlnaHQtCmsubWluSGVpZ2h0KS9xfX19LE9tPU5tKCJib3R0b20iLCJsZWZ0Iik7dmFyIFBtOyhmdW5jdGlvbihhKXthW2EuVGlnaHQ9MF09IlRpZ2h0IjthW2EuVW5pZm9ybT0xXT0iVW5pZm9ybSJ9KShQbXx8KFBtPXt9KSk7CmNsYXNzIFFte2NvbnN0cnVjdG9yKGEpe3RoaXMuaXRlbXM9YTt0aGlzLmNlbGxNYXJnaW49dGhpcy5pdGVtQXNwZWN0UmF0aW89MTt0aGlzLmNlbGxQYWRkaW5nPXtib3R0b206MCxsZWZ0OjAscmlnaHQ6MCx0b3A6MH07dGhpcy50YXJnZXRHcmlkQXNwZWN0UmF0aW89MTt0aGlzLm1pbkNlbGxBc3BlY3RSYXRpbz0wO3RoaXMubWF4Q2VsbEFzcGVjdFJhdGlvPUluZmluaXR5O3RoaXMudmVydGljYWxGYWNldD0oKT0+bnVsbDt0aGlzLmhvcml6b250YWxGYWNldD0oKT0+bnVsbDt0aGlzLnZlcnRpY2FsS2V5Q29tcGFyZT1KbTt0aGlzLmhvcml6b250YWxLZXlDb21wYXJlPUltO3RoaXMudmVydGljYWxLZXlzPVtdO3RoaXMudmVydGljYWxLZXlzSGFzaD17fTt0aGlzLmhvcml6b250YWxLZXlzPVtdO3RoaXMuaG9yaXpvbnRhbEtleXNIYXNoPXt9O3RoaXMuY2VsbHM9e307dGhpcy5oZWlnaHQ9dGhpcy53aWR0aD10aGlzLmxvbmdlc3RDZWxsTGVuZ3RoPTA7dGhpcy5pdGVtUG9zaXRpb25TZXR0ZXI9CihjLGQsZik9PntjLng9ZDtjLnk9Zn07dGhpcy5jb21wdXRlSXRlbVBvc2l0aW9uPU9tO3RoaXMuaG9yaXpvbnRhbEdyaWRBbGlnbm1lbnQ9dGhpcy52ZXJ0aWNhbEdyaWRBbGlnbm1lbnQ9UG0uVGlnaHQ7dGhpcy5jZWxsSXRlbUNvbXBhcmF0b3I9bnVsbH1jbGVhcigpe3RoaXMudmVydGljYWxLZXlzPVtdO3RoaXMudmVydGljYWxLZXlzSGFzaD17fTt0aGlzLmhvcml6b250YWxLZXlzPVtdO3RoaXMuaG9yaXpvbnRhbEtleXNIYXNoPXt9O3RoaXMuY2VsbHM9e307dGhpcy5oZWlnaHQ9dGhpcy53aWR0aD10aGlzLmxvbmdlc3RDZWxsTGVuZ3RoPTB9YXJyYW5nZSgpe3RoaXMuZmFjZXRJdGVtc0ludG9DZWxscygpO3ZhciBhPXRoaXMuY29tcHV0ZU9wdGltYWxDZWxsQXNwZWN0UmF0aW8odGhpcy50YXJnZXRHcmlkQXNwZWN0UmF0aW8pLGM9TWF0aC5taW4odGhpcy5tYXhDZWxsQXNwZWN0UmF0aW8sTWF0aC5tYXgodGhpcy5taW5DZWxsQXNwZWN0UmF0aW8sYSkpO2E9W107Y29uc3QgZD0KW107Zm9yKHZhciBmPTA7Zjx0aGlzLnZlcnRpY2FsS2V5cy5sZW5ndGg7ZisrKWZvcih2YXIgZz0wO2c8dGhpcy5ob3Jpem9udGFsS2V5cy5sZW5ndGg7ZysrKXt2YXIgbD10aGlzLmdldE9yQ3JlYXRlQ2VsbCh0aGlzLnZlcnRpY2FsS2V5c1tmXSx0aGlzLmhvcml6b250YWxLZXlzW2ddKTtbbC5taW5XaWR0aCxsLm1pbkhlaWdodF09dGhpcy5jb21wdXRlQ2VsbERpbWVuc2lvbnMoYyxsLml0ZW1zLmxlbmd0aCk7YVtmXT1NYXRoLm1heChhW2ZdfHwwLGwubWluSGVpZ2h0KTtkW2ddPU1hdGgubWF4KGRbZ118fDAsbC5taW5XaWR0aCl9Zm9yKGM9MDtjPHRoaXMudmVydGljYWxLZXlzLmxlbmd0aDtjKyspZm9yKGY9MDtmPHRoaXMuaG9yaXpvbnRhbEtleXMubGVuZ3RoO2YrKylnPXRoaXMuZ2V0Q2VsbCh0aGlzLnZlcnRpY2FsS2V5c1tjXSx0aGlzLmhvcml6b250YWxLZXlzW2ZdKSxjPHRoaXMudmVydGljYWxLZXlzLmxlbmd0aC0xJiYoZy5zaWJsaW5ncy5hYm92ZT10aGlzLmdldENlbGwodGhpcy52ZXJ0aWNhbEtleXNbYysKMV0sdGhpcy5ob3Jpem9udGFsS2V5c1tmXSkpLDA8YyYmKGcuc2libGluZ3MuYmVsb3c9dGhpcy5nZXRDZWxsKHRoaXMudmVydGljYWxLZXlzW2MtMV0sdGhpcy5ob3Jpem9udGFsS2V5c1tmXSkpLDA8ZiYmKGcuc2libGluZ3MubGVmdD10aGlzLmdldENlbGwodGhpcy52ZXJ0aWNhbEtleXNbY10sdGhpcy5ob3Jpem9udGFsS2V5c1tmLTFdKSksZjx0aGlzLmhvcml6b250YWxLZXlzLmxlbmd0aC0xJiYoZy5zaWJsaW5ncy5yaWdodD10aGlzLmdldENlbGwodGhpcy52ZXJ0aWNhbEtleXNbY10sdGhpcy5ob3Jpem9udGFsS2V5c1tmKzFdKSk7aWYodGhpcy52ZXJ0aWNhbEdyaWRBbGlnbm1lbnQ9PT1QbS5Vbmlmb3JtKWZvcihjPU1hdGgubWF4KC4uLmEpLGY9MDtmPGEubGVuZ3RoO2YrKylhW2ZdPWM7aWYodGhpcy5ob3Jpem9udGFsR3JpZEFsaWdubWVudD09PVBtLlVuaWZvcm0pZm9yKGM9TWF0aC5tYXgoLi4uZCksZj0wO2Y8ZC5sZW5ndGg7ZisrKWRbZl09Yztmb3IoYz0wO2M8dGhpcy52ZXJ0aWNhbEtleXMubGVuZ3RoO2MrKylmb3IoZj0KMDtmPHRoaXMuaG9yaXpvbnRhbEtleXMubGVuZ3RoO2YrKylnPXRoaXMuZ2V0Q2VsbCh0aGlzLnZlcnRpY2FsS2V5c1tjXSx0aGlzLmhvcml6b250YWxLZXlzW2ZdKSxnLmhlaWdodD1hW2NdLGcud2lkdGg9ZFtmXSxnLmlubmVySGVpZ2h0PWcuaGVpZ2h0LXRoaXMuY2VsbFBhZGRpbmcudG9wLXRoaXMuY2VsbFBhZGRpbmcuYm90dG9tLGcuaW5uZXJXaWR0aD1nLndpZHRoLXRoaXMuY2VsbFBhZGRpbmcubGVmdC10aGlzLmNlbGxQYWRkaW5nLnJpZ2h0O2M9dGhpcy5jZWxsTWFyZ2luKnRoaXMuaXRlbUFzcGVjdFJhdGlvO2ZvcihmPTA7Zjx0aGlzLnZlcnRpY2FsS2V5cy5sZW5ndGg7ZisrKWZvcihnPTA7Zzx0aGlzLmhvcml6b250YWxLZXlzLmxlbmd0aDtnKyspbD10aGlzLmdldENlbGwodGhpcy52ZXJ0aWNhbEtleXNbZl0sdGhpcy5ob3Jpem9udGFsS2V5c1tnXSksbC55PWY/dGhpcy5nZXRDZWxsKHRoaXMudmVydGljYWxLZXlzW2YtMV0sdGhpcy5ob3Jpem9udGFsS2V5c1tnXSkueSsKYVtmLTFdK2M6MCxsLmNvbnRlbnRZPWwueSt0aGlzLmNlbGxQYWRkaW5nLmJvdHRvbSxsLng9Zz90aGlzLmdldENlbGwodGhpcy52ZXJ0aWNhbEtleXNbZl0sdGhpcy5ob3Jpem9udGFsS2V5c1tnLTFdKS54K2RbZy0xXStjOjAsbC5jb250ZW50WD1sLngrdGhpcy5jZWxsUGFkZGluZy5sZWZ0O3RoaXMuZWFjaENlbGwoaz0+e3RoaXMud2lkdGg9TWF0aC5tYXgodGhpcy53aWR0aCxrLngray53aWR0aCk7dGhpcy5oZWlnaHQ9TWF0aC5tYXgodGhpcy5oZWlnaHQsay55K2suaGVpZ2h0KX0pO3RoaXMucG9zaXRpb25JdGVtcygpfXBvc2l0aW9uSXRlbXMoKXt0aGlzLmVhY2hDZWxsKGE9Pntjb25zdCBjPU1hdGgubWF4KDAsYS5pbm5lcldpZHRoLXRoaXMuaXRlbUFzcGVjdFJhdGlvKSxkPU1hdGgubWF4KDAsYS5pbm5lckhlaWdodC0xKSxmPWEuaXRlbXMuc2xpY2UoMCk7dGhpcy5jZWxsSXRlbUNvbXBhcmF0b3ImJmYuc29ydCh0aGlzLmNlbGxJdGVtQ29tcGFyYXRvcik7Zm9yKGxldCBnPQowO2c8Zi5sZW5ndGg7ZysrKXtjb25zdCBsPXRoaXMuY29tcHV0ZUl0ZW1Qb3NpdGlvbihmW2ddLGcsYSx0aGlzKTt0aGlzLml0ZW1Qb3NpdGlvblNldHRlcihmW2ddLGEuY29udGVudFgrKCFsfHxpc05hTihsLngpPzA6TWF0aC5tYXgoMCxNYXRoLm1pbigxLGwueCkpKSpjLGEuY29udGVudFkrKCFsfHxpc05hTihsLnkpPzA6TWF0aC5tYXgoMCxNYXRoLm1pbigxLGwueSkpKSpkKX19KX1mYWNldEl0ZW1zSW50b0NlbGxzKCl7dGhpcy5jbGVhcigpO3RoaXMuZWFjaEl0ZW0oYT0+e2NvbnN0IGM9dGhpcy5nZXRPckNyZWF0ZUNlbGwodGhpcy52ZXJ0aWNhbEZhY2V0KGEpLHRoaXMuaG9yaXpvbnRhbEZhY2V0KGEpKTtjLml0ZW1zLnB1c2goYSk7dGhpcy5sb25nZXN0Q2VsbExlbmd0aD1NYXRoLm1heCh0aGlzLmxvbmdlc3RDZWxsTGVuZ3RoLGMuaXRlbXMubGVuZ3RoKX0pO2Zvcihjb25zdCBhIGluIHRoaXMudmVydGljYWxLZXlzSGFzaCl0aGlzLnZlcnRpY2FsS2V5cy5wdXNoKHRoaXMudmVydGljYWxLZXlzSGFzaFthXSk7CnRoaXMudmVydGljYWxLZXlzLnNvcnQodGhpcy52ZXJ0aWNhbEtleUNvbXBhcmUpO2Zvcihjb25zdCBhIGluIHRoaXMuaG9yaXpvbnRhbEtleXNIYXNoKXRoaXMuaG9yaXpvbnRhbEtleXMucHVzaCh0aGlzLmhvcml6b250YWxLZXlzSGFzaFthXSk7dGhpcy5ob3Jpem9udGFsS2V5cy5zb3J0KHRoaXMuaG9yaXpvbnRhbEtleUNvbXBhcmUpfWVhY2hJdGVtKGEpe2lmKHRoaXMuaXRlbXMpZm9yKGxldCBjPTA7Yzx0aGlzLml0ZW1zLmxlbmd0aDtjKyspYS5jYWxsKHRoaXMsdGhpcy5pdGVtc1tjXSl9ZWFjaENlbGwoYSl7Zm9yKGNvbnN0IGMgaW4gdGhpcy5jZWxscylhLmNhbGwodGhpcyx0aGlzLmNlbGxzW2NdKX1nZXRDb21wb3VuZEtleShhLGMpe3JldHVybiB0eXBlb2YgYSsiXHUwMDFmIithKyJcdTAwMWUiK3R5cGVvZiBjKyJcdTAwMWYiK2N9Z2V0Q2VsbChhLGMpe2E9dGhpcy5nZXRDb21wb3VuZEtleShhLGMpO3JldHVybiBhIGluIHRoaXMuY2VsbHM/dGhpcy5jZWxsc1thXTpudWxsfWdldENlbGxzKCl7cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuY2VsbHMpLm1hcChhPT4KdGhpcy5jZWxsc1thXSl9Z2V0T3JDcmVhdGVDZWxsKGEsYyl7bGV0IGQ9dGhpcy5nZXRDZWxsKGEsYyk7aWYoZClyZXR1cm4gZDt0aGlzLmFkZFZlcnRpY2FsS2V5KGEpO3RoaXMuYWRkSG9yaXpvbnRhbEtleShjKTtjb25zdCBmPXRoaXMuZ2V0Q29tcG91bmRLZXkoYSxjKTtkPXt2ZXJ0aWNhbEtleTphLGhvcml6b250YWxLZXk6Yyxjb21wb3VuZEtleTpmLGl0ZW1zOltdLHNpYmxpbmdzOnt9fTtyZXR1cm4gdGhpcy5jZWxsc1tmXT1kfWdldFJvdyhhKXtjb25zdCBjPVtdO2ZvcihsZXQgZD0wO2Q8dGhpcy5ob3Jpem9udGFsS2V5cy5sZW5ndGg7ZCsrKXtjb25zdCBmPXRoaXMuZ2V0Q2VsbChhLHRoaXMuaG9yaXpvbnRhbEtleXNbZF0pO2YmJmMucHVzaChmKX1yZXR1cm4gY31nZXRDb2x1bW4oYSl7Y29uc3QgYz1bXTtmb3IobGV0IGQ9MDtkPHRoaXMudmVydGljYWxLZXlzLmxlbmd0aDtkKyspe2NvbnN0IGY9dGhpcy5nZXRDZWxsKHRoaXMudmVydGljYWxLZXlzW2RdLGEpO2YmJmMucHVzaChmKX1yZXR1cm4gY31hZGRWZXJ0aWNhbEtleShhKXtjb25zdCBjPQp0eXBlb2YgYSsiXHUwMDFmIithO2MgaW4gdGhpcy52ZXJ0aWNhbEtleXNIYXNofHwodGhpcy52ZXJ0aWNhbEtleXNIYXNoW2NdPWEpfWFkZEhvcml6b250YWxLZXkoYSl7Y29uc3QgYz10eXBlb2YgYSsiXHUwMDFmIithO2MgaW4gdGhpcy5ob3Jpem9udGFsS2V5c0hhc2h8fCh0aGlzLmhvcml6b250YWxLZXlzSGFzaFtjXT1hKX1jb21wdXRlT3B0aW1hbENlbGxBc3BlY3RSYXRpbyhhKXt2YXIgYz10aGlzLnZlcnRpY2FsS2V5cy5sZW5ndGgsZD10aGlzLmhvcml6b250YWxLZXlzLmxlbmd0aDtpZighY3x8IWQpcmV0dXJuIDE7bGV0IGY9Yy9kLGc9ZixsPUluZmluaXR5LGs9MCxtPUluZmluaXR5O2M9TWF0aC5taW4oMjAsTWF0aC5tYXgoYyxkLHRoaXMubG9uZ2VzdENlbGxMZW5ndGgpKTtmb3IoZD0wO2Q8Yzspe2QrKztjb25zdCBwPXRoaXMuY29tcHV0ZUdyaWRBc3BlY3RSYXRpbyhmKSxxPU1hdGguYWJzKDEtcC9hKTtxPGwmJihnPWYsbD1xKTtpZiguMDAxPnEpYnJlYWs7cD5hPyhtPQpmLGYtPShtLWspLzIpOihrPWYsZj1pc0Zpbml0ZShtKT9mKyhtLWspLzI6MipmKX1yZXR1cm4gZ31jb21wdXRlR3JpZEFzcGVjdFJhdGlvKGEpe2NvbnN0IGM9dGhpcy52ZXJ0aWNhbEtleXMubGVuZ3RoLGQ9dGhpcy5ob3Jpem9udGFsS2V5cy5sZW5ndGg7bGV0IGY9LUluZmluaXR5LGc9LUluZmluaXR5LGw9LUluZmluaXR5LGs9LUluZmluaXR5O2NvbnN0IG09W107Zm9yKGxldCBwPTA7cDxjO3ArKyl7bVtwXT1bXTtmb3IobGV0IHE9MDtxPGQ7cSsrKXtjb25zdCByPW1bcF1bcV09e3dpZHRoOnE/bVtwXVtxLTFdLndpZHRoOjAsaGVpZ2h0OnA/bVtwLTFdW3FdLmhlaWdodDowfSx0PXRoaXMuZ2V0Q2VsbCh0aGlzLnZlcnRpY2FsS2V5c1twXSx0aGlzLmhvcml6b250YWxLZXlzW3FdKTtpZighdHx8IXQuaXRlbXN8fCF0Lml0ZW1zLmxlbmd0aCljb250aW51ZTtjb25zdCBbdixBXT10aGlzLmNvbXB1dGVDZWxsRGltZW5zaW9ucyhhLHQuaXRlbXMubGVuZ3RoKTtyLndpZHRoKz12O3IuaGVpZ2h0Kz0KQTtmPU1hdGgubWF4KGYsci53aWR0aCk7Zz1NYXRoLm1heChnLEEpO2w9TWF0aC5tYXgobCx2KTtrPU1hdGgubWF4KGssci5oZWlnaHQpfX10aGlzLnZlcnRpY2FsR3JpZEFsaWdubWVudD09PVBtLlVuaWZvcm0mJihrPWcqYyk7dGhpcy5ob3Jpem9udGFsR3JpZEFsaWdubWVudD09PVBtLlVuaWZvcm0mJihmPWwqZCk7YT10aGlzLmNlbGxNYXJnaW4qdGhpcy5pdGVtQXNwZWN0UmF0aW87cmV0dXJuKGYrYSooZC0xKSkvKGsrYSooYy0xKSl9Y29tcHV0ZUNlbGxEaW1lbnNpb25zKGEsYyl7Y29uc3QgZD1bdGhpcy5pdGVtQXNwZWN0UmF0aW8qKHRoaXMuY2VsbFBhZGRpbmcubGVmdCt0aGlzLmNlbGxQYWRkaW5nLnJpZ2h0KSx0aGlzLml0ZW1Bc3BlY3RSYXRpbyoodGhpcy5jZWxsUGFkZGluZy50b3ArdGhpcy5jZWxsUGFkZGluZy5ib3R0b20pXTtpZighYylyZXR1cm4gZDthPU1hdGgubWluKGMsTWF0aC5jZWlsKE1hdGguc3FydChhKmMpL3RoaXMuaXRlbUFzcGVjdFJhdGlvKSk7ZFswXSs9CnRoaXMuaXRlbUFzcGVjdFJhdGlvKmE7ZFsxXSs9TWF0aC5jZWlsKGMvYSk7cmV0dXJuIGR9fTsKPC9zY3JpcHQ+Cgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vZmFjZXRzLWRpdmUvbGliL2F4aXMuanMKY2xhc3MgUm0gZXh0ZW5kcyBIbXtjb25zdHJ1Y3RvcihhLGMpe3N1cGVyKCk7dGhpcy5zaWRlPWE7dGhpcy5jZWxsPWM7c3dpdGNoKGEpe2Nhc2UgR20uTGVmdDp0aGlzLm1pblNjYWxlPTMwL2MuaW5uZXJIZWlnaHQ7Zm9yKGE9Yy5zaWJsaW5ncy5sZWZ0OyEoIWF8fGEuaXRlbXMubGVuZ3RofHxhLnNpYmxpbmdzLmFib3ZlJiZhLnNpYmxpbmdzLmFib3ZlLml0ZW1zLmxlbmd0aCk7KWE9YS5zaWJsaW5ncy5sZWZ0O2EmJih0aGlzLm1pblNjYWxlPU1hdGgubWF4KHRoaXMubWluU2NhbGUsMzkuMi8oYy5jb250ZW50WC0oYS5jb250ZW50WCthLmlubmVyV2lkdGgpKSkpO2JyZWFrO2Nhc2UgR20uQm90dG9tOnRoaXMubWluU2NhbGU9MzAvYy5pbm5lcldpZHRoO2ZvcihhPWMuc2libGluZ3MuYmVsb3c7ISghYXx8YS5pdGVtcy5sZW5ndGh8fGEuc2libGluZ3MucmlnaHQmJmEuc2libGluZ3MucmlnaHQuaXRlbXMubGVuZ3RoKTspYT1hLnNpYmxpbmdzLmJlbG93O2EmJih0aGlzLm1pblNjYWxlPQpNYXRoLm1heCh0aGlzLm1pblNjYWxlLDM5LjIvKGMuY29udGVudFktKGEuY29udGVudFkrYS5pbm5lckhlaWdodCkpKSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBFcnJvcigiQXhlcyBmb3Igc3BlY2lmaWVkIHNpZGUgYXJlIG5vdCBpbXBsZW1lbnRlZC4iKTt9fXN0cm9rZVdpZHRoKGEpe3JldHVybiAxLjIvYX1wYXRoKGEpe2NvbnN0IGM9NC9hLGQ9Ni9hO3JldHVybiB0aGlzLnNpZGU9PT1HbS5MZWZ0P2BNICR7dGhpcy5jZWxsLmNvbnRlbnRYLWMtZH0sJHt0aGlzLmNlbGwuY29udGVudFkrLjYvYX0gaCAke2R9IHYgJHt0aGlzLmNlbGwuaW5uZXJIZWlnaHQtMS4yL2F9IGggLSR7ZH1gOnRoaXMuc2lkZT09PUdtLkJvdHRvbT9gTSAke3RoaXMuY2VsbC5jb250ZW50WCsuNi9hfSwke3RoaXMuY2VsbC5jb250ZW50WS1jLWR9IHYgJHtkfSBoICR7dGhpcy5jZWxsLmlubmVyV2lkdGgtMS4yL2F9IHYgLSR7ZH1gOiIifWtleSgpe3JldHVybmAke3RoaXMuY2VsbC5jb21wb3VuZEtleX0tJHt0aGlzLnNpZGV9YH19CjsKPC9zY3JpcHQ+CgoKPHNjcmlwdD4vL35+V0VCUEFUSH5+L2ZhY2V0cy1kaXZlL2xpYi9kYXRhLWV4YW1wbGUuanMKPC9zY3JpcHQ+CgoKCjxzY3JpcHQ+Ly9+fldFQlBBVEh+fi9mYWNldHMtZGl2ZS9saWIvbGFiZWwuanMKPC9zY3JpcHQ+Cgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vZmFjZXRzLWRpdmUvbGliL2xheW91dC5qcwpjbGFzcyBTbXtjb25zdHJ1Y3Rvcigpe3RoaXMuZ3JpZD17Ym90dG9tOjAsbGVmdDowLHJpZ2h0OjAsdG9wOjB9O3RoaXMudmlld3BvcnQ9e2hlaWdodDowLHdpZHRoOjB9O3RoaXMucGFkZGluZz17Ym90dG9tOjAsbGVmdDowLHJpZ2h0OjAsdG9wOjB9fWNvbXB1dGVTY2FsZSgpe2NvbnN0IGE9dGhpcy52aWV3cG9ydC53aWR0aC10aGlzLnBhZGRpbmcubGVmdC10aGlzLnBhZGRpbmcucmlnaHQsYz10aGlzLnZpZXdwb3J0LmhlaWdodC10aGlzLnBhZGRpbmcudG9wLXRoaXMucGFkZGluZy5ib3R0b207aWYoaXNOYU4oYSl8fDA+PWF8fGlzTmFOKGMpfHwwPj1jKXJldHVybiBOYU47Y29uc3QgZD10aGlzLmdyaWQucmlnaHQtdGhpcy5ncmlkLmxlZnQsZj10aGlzLmdyaWQudG9wLXRoaXMuZ3JpZC5ib3R0b207cmV0dXJuIGlzTmFOKGQpfHwwPj1kfHxpc05hTihmKXx8MD49Zj9OYU46YS9jPmQvZj9jL2Y6YS9kfWNvbXB1dGVDYW1lcmEoKXtjb25zdCBhPXRoaXMuY29tcHV0ZVNjYWxlKCk7CmlmKGlzTmFOKGEpfHwwPj1hKXJldHVybntwb3NpdGlvbjp7eDpOYU4seTpOYU59LGZydXN0dW06e2JvdHRvbTpOYU4sbGVmdDpOYU4scmlnaHQ6TmFOLHRvcDpOYU59fTtjb25zdCBjPXRoaXMudmlld3BvcnQud2lkdGgvYSxkPXRoaXMudmlld3BvcnQuaGVpZ2h0L2E7cmV0dXJue3Bvc2l0aW9uOnt4OnRoaXMuZ3JpZC5sZWZ0LShjLSh0aGlzLnBhZGRpbmcubGVmdCt0aGlzLnBhZGRpbmcucmlnaHQpL2EtKHRoaXMuZ3JpZC5yaWdodC10aGlzLmdyaWQubGVmdCkpLzItdGhpcy5wYWRkaW5nLmxlZnQvYSx5OnRoaXMuZ3JpZC50b3ArKGQtKHRoaXMucGFkZGluZy50b3ArdGhpcy5wYWRkaW5nLmJvdHRvbSkvYS0odGhpcy5ncmlkLnRvcC10aGlzLmdyaWQuYm90dG9tKSkvMit0aGlzLnBhZGRpbmcudG9wL2F9LGZydXN0dW06e2JvdHRvbTotZCxsZWZ0OjAscmlnaHQ6Yyx0b3A6MH19fXJlZHVjZVBhZGRpbmdUb0ZpdFdpZHRoKGEpe2lmKDIwMD5hKXRoaXMucGFkZGluZy5sZWZ0PTAsdGhpcy5wYWRkaW5nLnJpZ2h0PQowO2Vsc2UgaWYodGhpcy5wYWRkaW5nLmxlZnQrdGhpcy5wYWRkaW5nLnJpZ2h0KzIwMD5hKXtjb25zdCBjPXRoaXMucGFkZGluZy5sZWZ0K3RoaXMucGFkZGluZy5yaWdodDthLT0yMDA7dGhpcy5wYWRkaW5nLmxlZnQ9dGhpcy5wYWRkaW5nLmxlZnQvYyphfHwwO3RoaXMucGFkZGluZy5yaWdodD10aGlzLnBhZGRpbmcucmlnaHQvYyphfHwwfX1yZWR1Y2VQYWRkaW5nVG9GaXRIZWlnaHQoYSl7aWYoMjAwPmEpdGhpcy5wYWRkaW5nLnRvcD0wLHRoaXMucGFkZGluZy5ib3R0b209MDtlbHNlIGlmKHRoaXMucGFkZGluZy50b3ArdGhpcy5wYWRkaW5nLmJvdHRvbSsyMDA+YSl7Y29uc3QgYz10aGlzLnBhZGRpbmcudG9wK3RoaXMucGFkZGluZy5ib3R0b207YS09MjAwO3RoaXMucGFkZGluZy50b3A9dGhpcy5wYWRkaW5nLnRvcC9jKmF8fDA7dGhpcy5wYWRkaW5nLmJvdHRvbT10aGlzLnBhZGRpbmcuYm90dG9tL2MqYXx8MH19fTsKPC9zY3JpcHQ+CgoKPHNjcmlwdD4vL35+V0VCUEFUSH5+L2ZhY2V0cy1kaXZlL2xpYi90ZXh0LmpzCnZhciBUbTsoZnVuY3Rpb24oYSl7YVthLkxlZnQ9MF09IkxlZnQiO2FbYS5SaWdodD0xXT0iUmlnaHQiO2FbYS5DZW50ZXI9Ml09IkNlbnRlciJ9KShUbXx8KFRtPXt9KSk7dmFyIFVtOyhmdW5jdGlvbihhKXthW2EuVG9wPTBdPSJUb3AiO2FbYS5Cb3R0b209MV09IkJvdHRvbSI7YVthLk1pZGRsZT0yXT0iTWlkZGxlIn0pKFVtfHwoVW09e30pKTtjb25zdCBWbT17eDowLHk6MCxnbHlwaEFzcGVjdFJhdGlvOi42LGxpbmVIZWlnaHQ6MS4xLGhvcml6b250YWxBbGlnbjpUbS5DZW50ZXIsdmVydGljYWxBbGlnbjpVbS5NaWRkbGV9OwpjbGFzcyBXbXtjb25zdHJ1Y3RvcihhKXt0aGlzLnNldHRpbmdzPU9iamVjdC5hc3NpZ24oe30sVm0sYSl9Zml0KGEpe2E9YS50cmltKCk7Y29uc3Qge21heDpjLHNlZ21lbnRzOmR9PXRoaXMuc3BsaXQoYSkse2N1dG9mZjpmLHdpZHRoOmcsaGVpZ2h0Omx9PXRoaXMuY29tcHV0ZUN1dG9mZihkLGEubGVuZ3RoLGMpO2E9Zyp0aGlzLnNldHRpbmdzLmdseXBoQXNwZWN0UmF0aW87YT1hL2w+dGhpcy5zZXR0aW5ncy53aWR0aC90aGlzLnNldHRpbmdzLmhlaWdodD90aGlzLnNldHRpbmdzLndpZHRoL2E6dGhpcy5zZXR0aW5ncy5oZWlnaHQvbDtjb25zdCBrPXRoaXMuc2V0dGluZ3MuaG9yaXpvbnRhbEFsaWduPT09VG0uTGVmdD8wOnRoaXMuc2V0dGluZ3MuaG9yaXpvbnRhbEFsaWduPT09VG0uUmlnaHQ/MTouNSxtPU1hdGgubWF4KDAsdGhpcy5zZXR0aW5ncy5oZWlnaHQtbCphKSoodGhpcy5zZXR0aW5ncy52ZXJ0aWNhbEFsaWduPT09VW0uVG9wPzA6dGhpcy5zZXR0aW5ncy52ZXJ0aWNhbEFsaWduPT09ClVtLkJvdHRvbT8xOi41KSxwPXRoaXMud3JhcExpbmVzKGQsZikscT1bXTtmb3IobGV0IHI9MDtyPHAubGVuZ3RoO3IrKyl7Y29uc3Qge3N0YXJ0UG9zOnQsZW5kUG9zOnZ9PXBbcl07bGV0IEE9IiI7Zm9yKGxldCB5PXQ7eTx2O3krKylBKz1kW3ldLnRleHQ7cS5wdXNoKHt0ZXh0OkEseDp0aGlzLnNldHRpbmdzLngraypNYXRoLm1heCgwLHRoaXMuc2V0dGluZ3Mud2lkdGgtQS5sZW5ndGgqdGhpcy5zZXR0aW5ncy5nbHlwaEFzcGVjdFJhdGlvKmEpLHk6dGhpcy5zZXR0aW5ncy55K20rcip0aGlzLnNldHRpbmdzLmxpbmVIZWlnaHQqYX0pfXJldHVybntsaW5lczpxLGZvbnRTaXplOmF9fXNwbGl0KGEpe2NvbnN0IGM9W107bGV0IGQ9MSxmPS9ccy8udGVzdChhLmNoYXJBdCgwKSksZz0wLGw9MDtmb3IoO2Q8PWEubGVuZ3RoOyl7Y29uc3Qgaz1hLmNoYXJBdChkKSxtPS9ccy8udGVzdChrKTtrLmxlbmd0aCYmZj09PW18fChsPU1hdGgubWF4KGwsZC1nKSxjLnB1c2goe3RleHQ6YS5zdWJzdHJpbmcoZywKZCksd2hpdGVzcGFjZTpmfSksZz1kKTtmPW07ZCsrfXJldHVybnttYXg6bCxzZWdtZW50czpjfX1jb21wdXRlVGV4dFJlY3QoYSxjKXtsZXQgZD0wLGY9MCxnPTAsbD0xO2ZvcihsZXQgaz0wO2s8YS5sZW5ndGg7aysrKXtjb25zdCB7dGV4dDptLHdoaXRlc3BhY2U6cH09YVtrXSxxPW0ubGVuZ3RoO2lmKCFwfHxkKXA/ZCtxPD1jP2QrPXE6KGY9ZD0wLGwrPXRoaXMuc2V0dGluZ3MubGluZUhlaWdodCk6ZCtxPD1jP2Y9ZCs9cTooZj9kPWY9cTooZz1NYXRoLm1heChnLHEpLGQ9Zj0wKSxsKz10aGlzLnNldHRpbmdzLmxpbmVIZWlnaHQpLGc9TWF0aC5tYXgoZyxmKX1yZXR1cm57d2lkdGg6ZyxoZWlnaHQ6bH19Y29tcHV0ZUN1dG9mZihhLGMsZCl7Y29uc3QgZj10aGlzLnNldHRpbmdzLndpZHRoL3RoaXMuc2V0dGluZ3MuaGVpZ2h0O2xldCBnPWQrKGMtZCkvMixsPWcsaz1udWxsLG09SW5maW5pdHk7Y29uc3QgcD1NYXRoLm1pbigyMCwoYS5sZW5ndGgrMSkvMik7bGV0IHE9MDtmb3IoO3E8CnA7KXtxKys7Y29uc3Qgcj10aGlzLmNvbXB1dGVUZXh0UmVjdChhLGcpLHQ9ci53aWR0aC9yLmhlaWdodCp0aGlzLnNldHRpbmdzLmdseXBoQXNwZWN0UmF0aW8sdj1NYXRoLmFicygxLXQvZik7djxtJiYobD1nLGs9cixtPXYpO2lmKC4wMT52KWJyZWFrO3Q+Zj9jPWc6ZD1nO2c9ZCsoYy1kKS8yfXJldHVybntjdXRvZmY6bCx3aWR0aDprLndpZHRoLGhlaWdodDprLmhlaWdodH19d3JhcExpbmVzKGEsYyl7Y29uc3QgZD1bXTtsZXQgZj0wLGc9MCxsPTAsaz0wO2ZvcihsZXQgbT0wO208YS5sZW5ndGg7bSsrKXtjb25zdCB7dGV4dDpwLHdoaXRlc3BhY2U6cX09YVttXSxyPXAubGVuZ3RoO3EmJiFsP2Y9Zz1tKzE6cT9sK3I8PWM/bCs9cjooZC5wdXNoKHtzdGFydFBvczpmLGVuZFBvczpnLHRleHRMZW5ndGg6a30pLGw9az0wLGY9Zz1tKzEpOmwrcjw9Yz8oaz1sKz1yLGc9bSsxKTprPyhkLnB1c2goe3N0YXJ0UG9zOmYsZW5kUG9zOmcsdGV4dExlbmd0aDprfSksbD1rPXIsZj1tLGc9bSsKMSk6KGQucHVzaCh7c3RhcnRQb3M6bSxlbmRQb3M6bSsxLHRleHRMZW5ndGg6cn0pLGw9az0wLGY9Zz1tKzEpfWc+ZiYmZC5wdXNoKHtzdGFydFBvczpmLGVuZFBvczpnLHRleHRMZW5ndGg6a30pO3JldHVybiBkfX07Cjwvc2NyaXB0PgoKPHNjcmlwdD4vL35+V0VCUEFUSH5+L3RmLWltcG9ydHMvdGhyZWUuanMKKGZ1bmN0aW9uKGEsYyl7Im9iamVjdCI9PT10eXBlb2YgZXhwb3J0cyYmInVuZGVmaW5lZCIhPT10eXBlb2YgbW9kdWxlP2MoZXhwb3J0cyk6ImZ1bmN0aW9uIj09PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFsiZXhwb3J0cyJdLGMpOihhPWF8fHNlbGYsYyhhLlRIUkVFPXt9KSl9KSh0aGlzLGZ1bmN0aW9uKGEpe2Z1bmN0aW9uIGMoKXt9ZnVuY3Rpb24gZChiLGUpe3RoaXMueD1ifHwwO3RoaXMueT1lfHwwfWZ1bmN0aW9uIGYoYixlLGgsbil7dGhpcy5feD1ifHwwO3RoaXMuX3k9ZXx8MDt0aGlzLl96PWh8fDA7dGhpcy5fdz12b2lkIDAhPT1uP246MX1mdW5jdGlvbiBnKGIsZSxoKXt0aGlzLng9Ynx8MDt0aGlzLnk9ZXx8MDt0aGlzLno9aHx8MH1mdW5jdGlvbiBsKCl7dGhpcy5lbGVtZW50cz1bMSwwLDAsMCwxLDAsMCwwLDFdOzA8YXJndW1lbnRzLmxlbmd0aCYmY29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4MzogdGhlIGNvbnN0cnVjdG9yIG5vIGxvbmdlciByZWFkcyBhcmd1bWVudHMuIHVzZSAuc2V0KCkgaW5zdGVhZC4iKX0KZnVuY3Rpb24gayhiLGUsaCxuLHUsdyx6LEUsSCxJKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiaWQiLHt2YWx1ZTpLbisrfSk7dGhpcy51dWlkPW9iLmdlbmVyYXRlVVVJRCgpO3RoaXMubmFtZT0iIjt0aGlzLmltYWdlPXZvaWQgMCE9PWI/YjprLkRFRkFVTFRfSU1BR0U7dGhpcy5taXBtYXBzPVtdO3RoaXMubWFwcGluZz12b2lkIDAhPT1lP2U6ay5ERUZBVUxUX01BUFBJTkc7dGhpcy53cmFwUz12b2lkIDAhPT1oP2g6MTAwMTt0aGlzLndyYXBUPXZvaWQgMCE9PW4/bjoxMDAxO3RoaXMubWFnRmlsdGVyPXZvaWQgMCE9PXU/dToxMDA2O3RoaXMubWluRmlsdGVyPXZvaWQgMCE9PXc/dzoxMDA4O3RoaXMuYW5pc290cm9weT12b2lkIDAhPT1IP0g6MTt0aGlzLmZvcm1hdD12b2lkIDAhPT16P3o6MTAyMzt0aGlzLnR5cGU9dm9pZCAwIT09RT9FOjEwMDk7dGhpcy5vZmZzZXQ9bmV3IGQoMCwwKTt0aGlzLnJlcGVhdD1uZXcgZCgxLDEpO3RoaXMuY2VudGVyPW5ldyBkKDAsMCk7CnRoaXMucm90YXRpb249MDt0aGlzLm1hdHJpeEF1dG9VcGRhdGU9ITA7dGhpcy5tYXRyaXg9bmV3IGw7dGhpcy5nZW5lcmF0ZU1pcG1hcHM9ITA7dGhpcy5wcmVtdWx0aXBseUFscGhhPSExO3RoaXMuZmxpcFk9ITA7dGhpcy51bnBhY2tBbGlnbm1lbnQ9NDt0aGlzLmVuY29kaW5nPXZvaWQgMCE9PUk/STozRTM7dGhpcy52ZXJzaW9uPTA7dGhpcy5vblVwZGF0ZT1udWxsfWZ1bmN0aW9uIG0oYixlLGgsbil7dGhpcy54PWJ8fDA7dGhpcy55PWV8fDA7dGhpcy56PWh8fDA7dGhpcy53PXZvaWQgMCE9PW4/bjoxfWZ1bmN0aW9uIHAoYixlLGgpe3RoaXMud2lkdGg9Yjt0aGlzLmhlaWdodD1lO3RoaXMuc2Npc3Nvcj1uZXcgbSgwLDAsYixlKTt0aGlzLnNjaXNzb3JUZXN0PSExO3RoaXMudmlld3BvcnQ9bmV3IG0oMCwwLGIsZSk7aD1ofHx7fTt0aGlzLnRleHR1cmU9bmV3IGsodm9pZCAwLHZvaWQgMCxoLndyYXBTLGgud3JhcFQsaC5tYWdGaWx0ZXIsaC5taW5GaWx0ZXIsaC5mb3JtYXQsaC50eXBlLApoLmFuaXNvdHJvcHksaC5lbmNvZGluZyk7dGhpcy50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcz12b2lkIDAhPT1oLmdlbmVyYXRlTWlwbWFwcz9oLmdlbmVyYXRlTWlwbWFwczohMTt0aGlzLnRleHR1cmUubWluRmlsdGVyPXZvaWQgMCE9PWgubWluRmlsdGVyP2gubWluRmlsdGVyOjEwMDY7dGhpcy5kZXB0aEJ1ZmZlcj12b2lkIDAhPT1oLmRlcHRoQnVmZmVyP2guZGVwdGhCdWZmZXI6ITA7dGhpcy5zdGVuY2lsQnVmZmVyPXZvaWQgMCE9PWguc3RlbmNpbEJ1ZmZlcj9oLnN0ZW5jaWxCdWZmZXI6ITA7dGhpcy5kZXB0aFRleHR1cmU9dm9pZCAwIT09aC5kZXB0aFRleHR1cmU/aC5kZXB0aFRleHR1cmU6bnVsbH1mdW5jdGlvbiBxKGIsZSxoKXtwLmNhbGwodGhpcyxiLGUsaCk7dGhpcy5zYW1wbGVzPTR9ZnVuY3Rpb24gcihiLGUsaCl7cC5jYWxsKHRoaXMsYixlLGgpfWZ1bmN0aW9uIHQoYixlLGgsbix1LHcseixFLEgsSSxPLFEpe2suY2FsbCh0aGlzLG51bGwsdyx6LEUsSCxJLG4sdSwKTyxRKTt0aGlzLmltYWdlPXtkYXRhOmIsd2lkdGg6ZSxoZWlnaHQ6aH07dGhpcy5tYWdGaWx0ZXI9dm9pZCAwIT09SD9IOjEwMDM7dGhpcy5taW5GaWx0ZXI9dm9pZCAwIT09ST9JOjEwMDM7dGhpcy5mbGlwWT10aGlzLmdlbmVyYXRlTWlwbWFwcz0hMTt0aGlzLnVucGFja0FsaWdubWVudD0xfWZ1bmN0aW9uIHYoYixlKXt0aGlzLm1pbj12b2lkIDAhPT1iP2I6bmV3IGcoSW5maW5pdHksSW5maW5pdHksSW5maW5pdHkpO3RoaXMubWF4PXZvaWQgMCE9PWU/ZTpuZXcgZygtSW5maW5pdHksLUluZmluaXR5LC1JbmZpbml0eSl9ZnVuY3Rpb24gQShiLGUpe3RoaXMuY2VudGVyPXZvaWQgMCE9PWI/YjpuZXcgZzt0aGlzLnJhZGl1cz12b2lkIDAhPT1lP2U6MH1mdW5jdGlvbiB5KGIsZSl7dGhpcy5ub3JtYWw9dm9pZCAwIT09Yj9iOm5ldyBnKDEsMCwwKTt0aGlzLmNvbnN0YW50PXZvaWQgMCE9PWU/ZTowfWZ1bmN0aW9uIHgoYixlLGgsbix1LHcpe3RoaXMucGxhbmVzPVt2b2lkIDAhPT1iPwpiOm5ldyB5LHZvaWQgMCE9PWU/ZTpuZXcgeSx2b2lkIDAhPT1oP2g6bmV3IHksdm9pZCAwIT09bj9uOm5ldyB5LHZvaWQgMCE9PXU/dTpuZXcgeSx2b2lkIDAhPT13P3c6bmV3IHldfWZ1bmN0aW9uIEMoKXt0aGlzLmVsZW1lbnRzPVsxLDAsMCwwLDAsMSwwLDAsMCwwLDEsMCwwLDAsMCwxXTswPGFyZ3VtZW50cy5sZW5ndGgmJmNvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDQ6IHRoZSBjb25zdHJ1Y3RvciBubyBsb25nZXIgcmVhZHMgYXJndW1lbnRzLiB1c2UgLnNldCgpIGluc3RlYWQuIil9ZnVuY3Rpb24gRihiKXt2YXIgZT17fSxoO2ZvcihoIGluIGIpe2VbaF09e307Zm9yKHZhciBuIGluIGJbaF0pe3ZhciB1PWJbaF1bbl07ZVtoXVtuXT11JiYodS5pc0NvbG9yfHx1LmlzTWF0cml4M3x8dS5pc01hdHJpeDR8fHUuaXNWZWN0b3IyfHx1LmlzVmVjdG9yM3x8dS5pc1ZlY3RvcjR8fHUuaXNUZXh0dXJlKT91LmNsb25lKCk6QXJyYXkuaXNBcnJheSh1KT91LnNsaWNlKCk6dX19cmV0dXJuIGV9CmZ1bmN0aW9uIEQoYil7Zm9yKHZhciBlPXt9LGg9MDtoPGIubGVuZ3RoO2grKyl7dmFyIG49RihiW2hdKSx1O2Zvcih1IGluIG4pZVt1XT1uW3VdfXJldHVybiBlfWZ1bmN0aW9uIEIoYixlLGgpe3JldHVybiB2b2lkIDA9PT1lJiZ2b2lkIDA9PT1oP3RoaXMuc2V0KGIpOnRoaXMuc2V0UkdCKGIsZSxoKX1mdW5jdGlvbiBHKCl7ZnVuY3Rpb24gYih1LHcpeyExIT09aCYmKG4odSx3KSxlLnJlcXVlc3RBbmltYXRpb25GcmFtZShiKSl9dmFyIGU9bnVsbCxoPSExLG49bnVsbDtyZXR1cm57c3RhcnQ6ZnVuY3Rpb24oKXshMCE9PWgmJm51bGwhPT1uJiYoZS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoYiksaD0hMCl9LHN0b3A6ZnVuY3Rpb24oKXtoPSExfSxzZXRBbmltYXRpb25Mb29wOmZ1bmN0aW9uKHUpe249dX0sc2V0Q29udGV4dDpmdW5jdGlvbih1KXtlPXV9fX1mdW5jdGlvbiBLKGIpe2Z1bmN0aW9uIGUodSx3KXt2YXIgej11LmFycmF5LEU9dS5keW5hbWljPzM1MDQ4OjM1MDQ0LEg9Yi5jcmVhdGVCdWZmZXIoKTsKYi5iaW5kQnVmZmVyKHcsSCk7Yi5idWZmZXJEYXRhKHcseixFKTt1Lm9uVXBsb2FkQ2FsbGJhY2soKTt3PTUxMjY7eiBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheT93PTUxMjY6eiBpbnN0YW5jZW9mIEZsb2F0NjRBcnJheT9jb25zb2xlLndhcm4oIlRIUkVFLldlYkdMQXR0cmlidXRlczogVW5zdXBwb3J0ZWQgZGF0YSBidWZmZXIgZm9ybWF0OiBGbG9hdDY0QXJyYXkuIik6eiBpbnN0YW5jZW9mIFVpbnQxNkFycmF5P3c9NTEyMzp6IGluc3RhbmNlb2YgSW50MTZBcnJheT93PTUxMjI6eiBpbnN0YW5jZW9mIFVpbnQzMkFycmF5P3c9NTEyNTp6IGluc3RhbmNlb2YgSW50MzJBcnJheT93PTUxMjQ6eiBpbnN0YW5jZW9mIEludDhBcnJheT93PTUxMjA6eiBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkmJih3PTUxMjEpO3JldHVybntidWZmZXI6SCx0eXBlOncsYnl0ZXNQZXJFbGVtZW50OnouQllURVNfUEVSX0VMRU1FTlQsdmVyc2lvbjp1LnZlcnNpb259fWZ1bmN0aW9uIGgodSx3LHope3ZhciBFPQp3LmFycmF5LEg9dy51cGRhdGVSYW5nZTtiLmJpbmRCdWZmZXIoeix1KTshMT09PXcuZHluYW1pYz9iLmJ1ZmZlckRhdGEoeixFLDM1MDQ0KTotMT09PUguY291bnQ/Yi5idWZmZXJTdWJEYXRhKHosMCxFKTowPT09SC5jb3VudD9jb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTE9iamVjdHMudXBkYXRlQnVmZmVyOiBkeW5hbWljIFRIUkVFLkJ1ZmZlckF0dHJpYnV0ZSBtYXJrZWQgYXMgbmVlZHNVcGRhdGUgYnV0IHVwZGF0ZVJhbmdlLmNvdW50IGlzIDAsIGVuc3VyZSB5b3UgYXJlIHVzaW5nIHNldCBtZXRob2RzIG9yIHVwZGF0aW5nIG1hbnVhbGx5LiIpOihiLmJ1ZmZlclN1YkRhdGEoeixILm9mZnNldCpFLkJZVEVTX1BFUl9FTEVNRU5ULEUuc3ViYXJyYXkoSC5vZmZzZXQsSC5vZmZzZXQrSC5jb3VudCkpLEguY291bnQ9LTEpfXZhciBuPW5ldyBXZWFrTWFwO3JldHVybntnZXQ6ZnVuY3Rpb24odSl7dS5pc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlJiYodT11LmRhdGEpO3JldHVybiBuLmdldCh1KX0sCnJlbW92ZTpmdW5jdGlvbih1KXt1LmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUmJih1PXUuZGF0YSk7dmFyIHc9bi5nZXQodSk7dyYmKGIuZGVsZXRlQnVmZmVyKHcuYnVmZmVyKSxuLmRlbGV0ZSh1KSl9LHVwZGF0ZTpmdW5jdGlvbih1LHcpe3UuaXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZSYmKHU9dS5kYXRhKTt2YXIgej1uLmdldCh1KTt2b2lkIDA9PT16P24uc2V0KHUsZSh1LHcpKTp6LnZlcnNpb248dS52ZXJzaW9uJiYoaCh6LmJ1ZmZlcix1LHcpLHoudmVyc2lvbj11LnZlcnNpb24pfX19ZnVuY3Rpb24gTChiLGUsaCxuLHUsdyl7dGhpcy5hPWI7dGhpcy5iPWU7dGhpcy5jPWg7dGhpcy5ub3JtYWw9biYmbi5pc1ZlY3RvcjM/bjpuZXcgZzt0aGlzLnZlcnRleE5vcm1hbHM9QXJyYXkuaXNBcnJheShuKT9uOltdO3RoaXMuY29sb3I9dSYmdS5pc0NvbG9yP3U6bmV3IEI7dGhpcy52ZXJ0ZXhDb2xvcnM9QXJyYXkuaXNBcnJheSh1KT91OltdO3RoaXMubWF0ZXJpYWxJbmRleD0Kdm9pZCAwIT09dz93OjB9ZnVuY3Rpb24gSihiLGUsaCxuKXt0aGlzLl94PWJ8fDA7dGhpcy5feT1lfHwwO3RoaXMuX3o9aHx8MDt0aGlzLl9vcmRlcj1ufHxKLkRlZmF1bHRPcmRlcn1mdW5jdGlvbiBQKCl7dGhpcy5tYXNrPTF9ZnVuY3Rpb24gUygpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJpZCIse3ZhbHVlOkxuKyt9KTt0aGlzLnV1aWQ9b2IuZ2VuZXJhdGVVVUlEKCk7dGhpcy5uYW1lPSIiO3RoaXMudHlwZT0iT2JqZWN0M0QiO3RoaXMucGFyZW50PW51bGw7dGhpcy5jaGlsZHJlbj1bXTt0aGlzLnVwPVMuRGVmYXVsdFVwLmNsb25lKCk7dmFyIGI9bmV3IGcsZT1uZXcgSixoPW5ldyBmLG49bmV3IGcoMSwxLDEpO2Uub25DaGFuZ2UoZnVuY3Rpb24oKXtoLnNldEZyb21FdWxlcihlLCExKX0pO2gub25DaGFuZ2UoZnVuY3Rpb24oKXtlLnNldEZyb21RdWF0ZXJuaW9uKGgsdm9pZCAwLCExKX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRoaXMse3Bvc2l0aW9uOntjb25maWd1cmFibGU6ITAsCmVudW1lcmFibGU6ITAsdmFsdWU6Yn0scm90YXRpb246e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHZhbHVlOmV9LHF1YXRlcm5pb246e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHZhbHVlOmh9LHNjYWxlOntjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx2YWx1ZTpufSxtb2RlbFZpZXdNYXRyaXg6e3ZhbHVlOm5ldyBDfSxub3JtYWxNYXRyaXg6e3ZhbHVlOm5ldyBsfX0pO3RoaXMubWF0cml4PW5ldyBDO3RoaXMubWF0cml4V29ybGQ9bmV3IEM7dGhpcy5tYXRyaXhBdXRvVXBkYXRlPVMuRGVmYXVsdE1hdHJpeEF1dG9VcGRhdGU7dGhpcy5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlPSExO3RoaXMubGF5ZXJzPW5ldyBQO3RoaXMudmlzaWJsZT0hMDt0aGlzLnJlY2VpdmVTaGFkb3c9dGhpcy5jYXN0U2hhZG93PSExO3RoaXMuZnJ1c3R1bUN1bGxlZD0hMDt0aGlzLnJlbmRlck9yZGVyPTA7dGhpcy51c2VyRGF0YT17fX1mdW5jdGlvbiBOKCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsCiJpZCIse3ZhbHVlOk1uKz0yfSk7dGhpcy51dWlkPW9iLmdlbmVyYXRlVVVJRCgpO3RoaXMubmFtZT0iIjt0aGlzLnR5cGU9Ikdlb21ldHJ5Ijt0aGlzLnZlcnRpY2VzPVtdO3RoaXMuY29sb3JzPVtdO3RoaXMuZmFjZXM9W107dGhpcy5mYWNlVmVydGV4VXZzPVtbXV07dGhpcy5tb3JwaFRhcmdldHM9W107dGhpcy5tb3JwaE5vcm1hbHM9W107dGhpcy5za2luV2VpZ2h0cz1bXTt0aGlzLnNraW5JbmRpY2VzPVtdO3RoaXMubGluZURpc3RhbmNlcz1bXTt0aGlzLmJvdW5kaW5nU3BoZXJlPXRoaXMuYm91bmRpbmdCb3g9bnVsbDt0aGlzLmdyb3Vwc05lZWRVcGRhdGU9dGhpcy5saW5lRGlzdGFuY2VzTmVlZFVwZGF0ZT10aGlzLmNvbG9yc05lZWRVcGRhdGU9dGhpcy5ub3JtYWxzTmVlZFVwZGF0ZT10aGlzLnV2c05lZWRVcGRhdGU9dGhpcy52ZXJ0aWNlc05lZWRVcGRhdGU9dGhpcy5lbGVtZW50c05lZWRVcGRhdGU9ITF9ZnVuY3Rpb24gVChiLGUsaCl7aWYoQXJyYXkuaXNBcnJheShiKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGU6IGFycmF5IHNob3VsZCBiZSBhIFR5cGVkIEFycmF5LiIpOwp0aGlzLm5hbWU9IiI7dGhpcy5hcnJheT1iO3RoaXMuaXRlbVNpemU9ZTt0aGlzLmNvdW50PXZvaWQgMCE9PWI/Yi5sZW5ndGgvZTowO3RoaXMubm9ybWFsaXplZD0hMD09PWg7dGhpcy5keW5hbWljPSExO3RoaXMudXBkYXRlUmFuZ2U9e29mZnNldDowLGNvdW50Oi0xfTt0aGlzLnZlcnNpb249MH1mdW5jdGlvbiBZKGIsZSxoKXtULmNhbGwodGhpcyxuZXcgSW50OEFycmF5KGIpLGUsaCl9ZnVuY3Rpb24gYWEoYixlLGgpe1QuY2FsbCh0aGlzLG5ldyBVaW50OEFycmF5KGIpLGUsaCl9ZnVuY3Rpb24gaGEoYixlLGgpe1QuY2FsbCh0aGlzLG5ldyBVaW50OENsYW1wZWRBcnJheShiKSxlLGgpfWZ1bmN0aW9uIFgoYixlLGgpe1QuY2FsbCh0aGlzLG5ldyBJbnQxNkFycmF5KGIpLGUsaCl9ZnVuY3Rpb24gY2EoYixlLGgpe1QuY2FsbCh0aGlzLG5ldyBVaW50MTZBcnJheShiKSxlLGgpfWZ1bmN0aW9uIGVhKGIsZSxoKXtULmNhbGwodGhpcyxuZXcgSW50MzJBcnJheShiKSxlLGgpfWZ1bmN0aW9uIGthKGIsCmUsaCl7VC5jYWxsKHRoaXMsbmV3IFVpbnQzMkFycmF5KGIpLGUsaCl9ZnVuY3Rpb24gYmEoYixlLGgpe1QuY2FsbCh0aGlzLG5ldyBGbG9hdDMyQXJyYXkoYiksZSxoKX1mdW5jdGlvbiBsYShiLGUsaCl7VC5jYWxsKHRoaXMsbmV3IEZsb2F0NjRBcnJheShiKSxlLGgpfWZ1bmN0aW9uIHdhKCl7dGhpcy52ZXJ0aWNlcz1bXTt0aGlzLm5vcm1hbHM9W107dGhpcy5jb2xvcnM9W107dGhpcy51dnM9W107dGhpcy51dnMyPVtdO3RoaXMuZ3JvdXBzPVtdO3RoaXMubW9ycGhUYXJnZXRzPXt9O3RoaXMuc2tpbldlaWdodHM9W107dGhpcy5za2luSW5kaWNlcz1bXTt0aGlzLmJvdW5kaW5nU3BoZXJlPXRoaXMuYm91bmRpbmdCb3g9bnVsbDt0aGlzLmdyb3Vwc05lZWRVcGRhdGU9dGhpcy51dnNOZWVkVXBkYXRlPXRoaXMuY29sb3JzTmVlZFVwZGF0ZT10aGlzLm5vcm1hbHNOZWVkVXBkYXRlPXRoaXMudmVydGljZXNOZWVkVXBkYXRlPSExfWZ1bmN0aW9uIENhKGIpe2lmKDA9PT1iLmxlbmd0aClyZXR1cm4tSW5maW5pdHk7CmZvcih2YXIgZT1iWzBdLGg9MSxuPWIubGVuZ3RoO2g8bjsrK2gpYltoXT5lJiYoZT1iW2hdKTtyZXR1cm4gZX1mdW5jdGlvbiB4YSgpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJpZCIse3ZhbHVlOk5uKz0yfSk7dGhpcy51dWlkPW9iLmdlbmVyYXRlVVVJRCgpO3RoaXMubmFtZT0iIjt0aGlzLnR5cGU9IkJ1ZmZlckdlb21ldHJ5Ijt0aGlzLmluZGV4PW51bGw7dGhpcy5hdHRyaWJ1dGVzPXt9O3RoaXMubW9ycGhBdHRyaWJ1dGVzPXt9O3RoaXMuZ3JvdXBzPVtdO3RoaXMuYm91bmRpbmdTcGhlcmU9dGhpcy5ib3VuZGluZ0JveD1udWxsO3RoaXMuZHJhd1JhbmdlPXtzdGFydDowLGNvdW50OkluZmluaXR5fTt0aGlzLnVzZXJEYXRhPXt9fWZ1bmN0aW9uIHphKGIsZSxoLG4sdSx3KXtOLmNhbGwodGhpcyk7dGhpcy50eXBlPSJCb3hHZW9tZXRyeSI7dGhpcy5wYXJhbWV0ZXJzPXt3aWR0aDpiLGhlaWdodDplLGRlcHRoOmgsd2lkdGhTZWdtZW50czpuLGhlaWdodFNlZ21lbnRzOnUsCmRlcHRoU2VnbWVudHM6d307dGhpcy5mcm9tQnVmZmVyR2VvbWV0cnkobmV3IEZhKGIsZSxoLG4sdSx3KSk7dGhpcy5tZXJnZVZlcnRpY2VzKCl9ZnVuY3Rpb24gRmEoYixlLGgsbix1LHcpe2Z1bmN0aW9uIHooVyxaLGZhLHFhLHJhLGlhLHRhLG5hLHZhLEJhLHNhKXt2YXIgRGE9aWEvdmEsSGE9dGEvQmEsS2E9aWEvMixOYT10YS8yLExhPW5hLzI7dGE9dmErMTt2YXIgZmI9QmErMSxjYj1pYT0wLEphLGhiLFVhPW5ldyBnO2ZvcihoYj0wO2hiPGZiO2hiKyspe3ZhciBIYj1oYipIYS1OYTtmb3IoSmE9MDtKYTx0YTtKYSsrKVVhW1ddPShKYSpEYS1LYSkqcWEsVWFbWl09SGIqcmEsVWFbZmFdPUxhLEkucHVzaChVYS54LFVhLnksVWEueiksVWFbV109MCxVYVtaXT0wLFVhW2ZhXT0wPG5hPzE6LTEsTy5wdXNoKFVhLngsVWEueSxVYS56KSxRLnB1c2goSmEvdmEpLFEucHVzaCgxLWhiL0JhKSxpYSs9MX1mb3IoaGI9MDtoYjxCYTtoYisrKWZvcihKYT0wO0phPHZhO0phKyspVz1SK0phKwp0YSooaGIrMSksWj1SKyhKYSsxKSt0YSooaGIrMSksZmE9UisoSmErMSkrdGEqaGIsSC5wdXNoKFIrSmErdGEqaGIsVyxmYSksSC5wdXNoKFcsWixmYSksY2IrPTY7RS5hZGRHcm91cChVLGNiLHNhKTtVKz1jYjtSKz1pYX14YS5jYWxsKHRoaXMpO3RoaXMudHlwZT0iQm94QnVmZmVyR2VvbWV0cnkiO3RoaXMucGFyYW1ldGVycz17d2lkdGg6YixoZWlnaHQ6ZSxkZXB0aDpoLHdpZHRoU2VnbWVudHM6bixoZWlnaHRTZWdtZW50czp1LGRlcHRoU2VnbWVudHM6d307dmFyIEU9dGhpcztiPWJ8fDE7ZT1lfHwxO2g9aHx8MTtuPU1hdGguZmxvb3Iobil8fDE7dT1NYXRoLmZsb29yKHUpfHwxO3c9TWF0aC5mbG9vcih3KXx8MTt2YXIgSD1bXSxJPVtdLE89W10sUT1bXSxSPTAsVT0wO3ooInoiLCJ5IiwieCIsLTEsLTEsaCxlLGIsdyx1LDApO3ooInoiLCJ5IiwieCIsMSwtMSxoLGUsLWIsdyx1LDEpO3ooIngiLCJ6IiwieSIsMSwxLGIsaCxlLG4sdywyKTt6KCJ4IiwieiIsInkiLDEsLTEsYiwKaCwtZSxuLHcsMyk7eigieCIsInkiLCJ6IiwxLC0xLGIsZSxoLG4sdSw0KTt6KCJ4IiwieSIsInoiLC0xLC0xLGIsZSwtaCxuLHUsNSk7dGhpcy5zZXRJbmRleChIKTt0aGlzLmFkZEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBiYShJLDMpKTt0aGlzLmFkZEF0dHJpYnV0ZSgibm9ybWFsIixuZXcgYmEoTywzKSk7dGhpcy5hZGRBdHRyaWJ1dGUoInV2IixuZXcgYmEoUSwyKSl9ZnVuY3Rpb24gU2EoYixlLGgsbil7Ti5jYWxsKHRoaXMpO3RoaXMudHlwZT0iUGxhbmVHZW9tZXRyeSI7dGhpcy5wYXJhbWV0ZXJzPXt3aWR0aDpiLGhlaWdodDplLHdpZHRoU2VnbWVudHM6aCxoZWlnaHRTZWdtZW50czpufTt0aGlzLmZyb21CdWZmZXJHZW9tZXRyeShuZXcgRWEoYixlLGgsbikpO3RoaXMubWVyZ2VWZXJ0aWNlcygpfWZ1bmN0aW9uIEVhKGIsZSxoLG4pe3hhLmNhbGwodGhpcyk7dGhpcy50eXBlPSJQbGFuZUJ1ZmZlckdlb21ldHJ5Ijt0aGlzLnBhcmFtZXRlcnM9e3dpZHRoOmIsaGVpZ2h0OmUsCndpZHRoU2VnbWVudHM6aCxoZWlnaHRTZWdtZW50czpufTtiPWJ8fDE7ZT1lfHwxO3ZhciB1PWIvMix3PWUvMjtoPU1hdGguZmxvb3IoaCl8fDE7bj1NYXRoLmZsb29yKG4pfHwxO3ZhciB6PWgrMSxFPW4rMSxIPWIvaCxJPWUvbixPPVtdLFE9W10sUj1bXSxVPVtdO2ZvcihiPTA7YjxFO2IrKyl7dmFyIFc9YipJLXc7Zm9yKGU9MDtlPHo7ZSsrKVEucHVzaChlKkgtdSwtVywwKSxSLnB1c2goMCwwLDEpLFUucHVzaChlL2gpLFUucHVzaCgxLWIvbil9Zm9yKGI9MDtiPG47YisrKWZvcihlPTA7ZTxoO2UrKyl1PWUreiooYisxKSx3PWUrMSt6KihiKzEpLEU9ZSsxK3oqYixPLnB1c2goZSt6KmIsdSxFKSxPLnB1c2godSx3LEUpO3RoaXMuc2V0SW5kZXgoTyk7dGhpcy5hZGRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgYmEoUSwzKSk7dGhpcy5hZGRBdHRyaWJ1dGUoIm5vcm1hbCIsbmV3IGJhKFIsMykpO3RoaXMuYWRkQXR0cmlidXRlKCJ1diIsbmV3IGJhKFUsMikpfWZ1bmN0aW9uIEdhKCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsCiJpZCIse3ZhbHVlOk9uKyt9KTt0aGlzLnV1aWQ9b2IuZ2VuZXJhdGVVVUlEKCk7dGhpcy5uYW1lPSIiO3RoaXMudHlwZT0iTWF0ZXJpYWwiO3RoaXMubGlnaHRzPXRoaXMuZm9nPSEwO3RoaXMuYmxlbmRpbmc9MTt0aGlzLnNpZGU9MDt0aGlzLnZlcnRleFRhbmdlbnRzPXRoaXMuZmxhdFNoYWRpbmc9ITE7dGhpcy52ZXJ0ZXhDb2xvcnM9MDt0aGlzLm9wYWNpdHk9MTt0aGlzLnRyYW5zcGFyZW50PSExO3RoaXMuYmxlbmRTcmM9MjA0O3RoaXMuYmxlbmREc3Q9MjA1O3RoaXMuYmxlbmRFcXVhdGlvbj0xMDA7dGhpcy5ibGVuZEVxdWF0aW9uQWxwaGE9dGhpcy5ibGVuZERzdEFscGhhPXRoaXMuYmxlbmRTcmNBbHBoYT1udWxsO3RoaXMuZGVwdGhGdW5jPTM7dGhpcy5kZXB0aFdyaXRlPXRoaXMuZGVwdGhUZXN0PSEwO3RoaXMuY2xpcHBpbmdQbGFuZXM9bnVsbDt0aGlzLmNsaXBTaGFkb3dzPXRoaXMuY2xpcEludGVyc2VjdGlvbj0hMTt0aGlzLnNoYWRvd1NpZGU9bnVsbDt0aGlzLmNvbG9yV3JpdGU9CiEwO3RoaXMucHJlY2lzaW9uPW51bGw7dGhpcy5wb2x5Z29uT2Zmc2V0PSExO3RoaXMucG9seWdvbk9mZnNldFVuaXRzPXRoaXMucG9seWdvbk9mZnNldEZhY3Rvcj0wO3RoaXMuZGl0aGVyaW5nPSExO3RoaXMuYWxwaGFUZXN0PTA7dGhpcy5wcmVtdWx0aXBsaWVkQWxwaGE9ITE7dGhpcy52aXNpYmxlPSEwO3RoaXMudXNlckRhdGE9e307dGhpcy5uZWVkc1VwZGF0ZT0hMH1mdW5jdGlvbiBkYihiKXtHYS5jYWxsKHRoaXMpO3RoaXMudHlwZT0iU2hhZGVyTWF0ZXJpYWwiO3RoaXMuZGVmaW5lcz17fTt0aGlzLnVuaWZvcm1zPXt9O3RoaXMudmVydGV4U2hhZGVyPSJ2b2lkIG1haW4oKSB7XG5cdGdsX1Bvc2l0aW9uIFx4M2QgcHJvamVjdGlvbk1hdHJpeCAqIG1vZGVsVmlld01hdHJpeCAqIHZlYzQoIHBvc2l0aW9uLCAxLjAgKTtcbn0iO3RoaXMuZnJhZ21lbnRTaGFkZXI9InZvaWQgbWFpbigpIHtcblx0Z2xfRnJhZ0NvbG9yIFx4M2QgdmVjNCggMS4wLCAwLjAsIDAuMCwgMS4wICk7XG59IjsKdGhpcy5saW5ld2lkdGg9MTt0aGlzLndpcmVmcmFtZT0hMTt0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xO3RoaXMubW9ycGhOb3JtYWxzPXRoaXMubW9ycGhUYXJnZXRzPXRoaXMuc2tpbm5pbmc9dGhpcy5jbGlwcGluZz10aGlzLmxpZ2h0cz10aGlzLmZvZz0hMTt0aGlzLmV4dGVuc2lvbnM9e2Rlcml2YXRpdmVzOiExLGZyYWdEZXB0aDohMSxkcmF3QnVmZmVyczohMSxzaGFkZXJUZXh0dXJlTE9EOiExfTt0aGlzLmRlZmF1bHRBdHRyaWJ1dGVWYWx1ZXM9e2NvbG9yOlsxLDEsMV0sdXY6WzAsMF0sdXYyOlswLDBdfTt0aGlzLmluZGV4MEF0dHJpYnV0ZU5hbWU9dm9pZCAwO3RoaXMudW5pZm9ybXNOZWVkVXBkYXRlPSExO3ZvaWQgMCE9PWImJih2b2lkIDAhPT1iLmF0dHJpYnV0ZXMmJmNvbnNvbGUuZXJyb3IoIlRIUkVFLlNoYWRlck1hdGVyaWFsOiBhdHRyaWJ1dGVzIHNob3VsZCBub3cgYmUgZGVmaW5lZCBpbiBUSFJFRS5CdWZmZXJHZW9tZXRyeSBpbnN0ZWFkLiIpLHRoaXMuc2V0VmFsdWVzKGIpKX0KZnVuY3Rpb24geGIoYixlKXt0aGlzLm9yaWdpbj12b2lkIDAhPT1iP2I6bmV3IGc7dGhpcy5kaXJlY3Rpb249dm9pZCAwIT09ZT9lOm5ldyBnfWZ1bmN0aW9uIENiKGIsZSxoKXt0aGlzLmE9dm9pZCAwIT09Yj9iOm5ldyBnO3RoaXMuYj12b2lkIDAhPT1lP2U6bmV3IGc7dGhpcy5jPXZvaWQgMCE9PWg/aDpuZXcgZ31mdW5jdGlvbiB5YihiKXtHYS5jYWxsKHRoaXMpO3RoaXMudHlwZT0iTWVzaEJhc2ljTWF0ZXJpYWwiO3RoaXMuY29sb3I9bmV3IEIoMTY3NzcyMTUpO3RoaXMubGlnaHRNYXA9dGhpcy5tYXA9bnVsbDt0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PTE7dGhpcy5hb01hcD1udWxsO3RoaXMuYW9NYXBJbnRlbnNpdHk9MTt0aGlzLmVudk1hcD10aGlzLmFscGhhTWFwPXRoaXMuc3BlY3VsYXJNYXA9bnVsbDt0aGlzLmNvbWJpbmU9MDt0aGlzLnJlZmxlY3Rpdml0eT0xO3RoaXMucmVmcmFjdGlvblJhdGlvPS45ODt0aGlzLndpcmVmcmFtZT0hMTt0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0KMTt0aGlzLndpcmVmcmFtZUxpbmVqb2luPXRoaXMud2lyZWZyYW1lTGluZWNhcD0icm91bmQiO3RoaXMubGlnaHRzPXRoaXMubW9ycGhUYXJnZXRzPXRoaXMuc2tpbm5pbmc9ITE7dGhpcy5zZXRWYWx1ZXMoYil9ZnVuY3Rpb24gdGIoYixlKXtTLmNhbGwodGhpcyk7dGhpcy50eXBlPSJNZXNoIjt0aGlzLmdlb21ldHJ5PXZvaWQgMCE9PWI/YjpuZXcgeGE7dGhpcy5tYXRlcmlhbD12b2lkIDAhPT1lP2U6bmV3IHliKHtjb2xvcjoxNjc3NzIxNSpNYXRoLnJhbmRvbSgpfSk7dGhpcy5kcmF3TW9kZT0wO3RoaXMudXBkYXRlTW9ycGhUYXJnZXRzKCl9ZnVuY3Rpb24gQ2MoYixlLGgsbil7ZnVuY3Rpb24gdShRLFIpe2UuYnVmZmVycy5jb2xvci5zZXRDbGVhcihRLnIsUS5nLFEuYixSLG4pfXZhciB3PW5ldyBCKDApLHo9MCxFLEgsST1udWxsLE89MDtyZXR1cm57Z2V0Q2xlYXJDb2xvcjpmdW5jdGlvbigpe3JldHVybiB3fSxzZXRDbGVhckNvbG9yOmZ1bmN0aW9uKFEsUil7dy5zZXQoUSk7Cno9dm9pZCAwIT09Uj9SOjE7dSh3LHopfSxnZXRDbGVhckFscGhhOmZ1bmN0aW9uKCl7cmV0dXJuIHp9LHNldENsZWFyQWxwaGE6ZnVuY3Rpb24oUSl7ej1RO3Uodyx6KX0scmVuZGVyOmZ1bmN0aW9uKFEsUixVLFcpe1I9Ui5iYWNrZ3JvdW5kO1U9Yi52cjsoVT1VLmdldFNlc3Npb24mJlUuZ2V0U2Vzc2lvbigpKSYmImFkZGl0aXZlIj09PVUuZW52aXJvbm1lbnRCbGVuZE1vZGUmJihSPW51bGwpO251bGw9PT1SPyh1KHcseiksST1udWxsLE89MCk6UiYmUi5pc0NvbG9yJiYodShSLDEpLFc9ITAsST1udWxsLE89MCk7KGIuYXV0b0NsZWFyfHxXKSYmYi5jbGVhcihiLmF1dG9DbGVhckNvbG9yLGIuYXV0b0NsZWFyRGVwdGgsYi5hdXRvQ2xlYXJTdGVuY2lsKTtpZihSJiYoUi5pc0N1YmVUZXh0dXJlfHxSLmlzV2ViR0xSZW5kZXJUYXJnZXRDdWJlKSl7dm9pZCAwPT09SCYmKEg9bmV3IHRiKG5ldyBGYSgxLDEsMSksbmV3IGRiKHt0eXBlOiJCYWNrZ3JvdW5kQ3ViZU1hdGVyaWFsIix1bmlmb3JtczpGKGlkLmN1YmUudW5pZm9ybXMpLAp2ZXJ0ZXhTaGFkZXI6aWQuY3ViZS52ZXJ0ZXhTaGFkZXIsZnJhZ21lbnRTaGFkZXI6aWQuY3ViZS5mcmFnbWVudFNoYWRlcixzaWRlOjEsZGVwdGhUZXN0OiExLGRlcHRoV3JpdGU6ITEsZm9nOiExfSkpLEguZ2VvbWV0cnkucmVtb3ZlQXR0cmlidXRlKCJub3JtYWwiKSxILmdlb21ldHJ5LnJlbW92ZUF0dHJpYnV0ZSgidXYiKSxILm9uQmVmb3JlUmVuZGVyPWZ1bmN0aW9uKFosZmEscWEpe3RoaXMubWF0cml4V29ybGQuY29weVBvc2l0aW9uKHFhLm1hdHJpeFdvcmxkKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KEgubWF0ZXJpYWwsIm1hcCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnVuaWZvcm1zLnRDdWJlLnZhbHVlfX0pLGgudXBkYXRlKEgpKTtXPVIuaXNXZWJHTFJlbmRlclRhcmdldEN1YmU/Ui50ZXh0dXJlOlI7SC5tYXRlcmlhbC51bmlmb3Jtcy50Q3ViZS52YWx1ZT1XO0gubWF0ZXJpYWwudW5pZm9ybXMudEZsaXAudmFsdWU9Ui5pc1dlYkdMUmVuZGVyVGFyZ2V0Q3ViZT8KMTotMTtpZihJIT09Unx8TyE9PVcudmVyc2lvbilILm1hdGVyaWFsLm5lZWRzVXBkYXRlPSEwLEk9UixPPVcudmVyc2lvbjtRLnVuc2hpZnQoSCxILmdlb21ldHJ5LEgubWF0ZXJpYWwsMCwwLG51bGwpfWVsc2UgaWYoUiYmUi5pc1RleHR1cmUpe3ZvaWQgMD09PUUmJihFPW5ldyB0YihuZXcgRWEoMiwyKSxuZXcgZGIoe3R5cGU6IkJhY2tncm91bmRNYXRlcmlhbCIsdW5pZm9ybXM6RihpZC5iYWNrZ3JvdW5kLnVuaWZvcm1zKSx2ZXJ0ZXhTaGFkZXI6aWQuYmFja2dyb3VuZC52ZXJ0ZXhTaGFkZXIsZnJhZ21lbnRTaGFkZXI6aWQuYmFja2dyb3VuZC5mcmFnbWVudFNoYWRlcixzaWRlOjAsZGVwdGhUZXN0OiExLGRlcHRoV3JpdGU6ITEsZm9nOiExfSkpLEUuZ2VvbWV0cnkucmVtb3ZlQXR0cmlidXRlKCJub3JtYWwiKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRS5tYXRlcmlhbCwibWFwIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudW5pZm9ybXMudDJELnZhbHVlfX0pLGgudXBkYXRlKEUpKTsKRS5tYXRlcmlhbC51bmlmb3Jtcy50MkQudmFsdWU9UjshMD09PVIubWF0cml4QXV0b1VwZGF0ZSYmUi51cGRhdGVNYXRyaXgoKTtFLm1hdGVyaWFsLnVuaWZvcm1zLnV2VHJhbnNmb3JtLnZhbHVlLmNvcHkoUi5tYXRyaXgpO2lmKEkhPT1SfHxPIT09Ui52ZXJzaW9uKUUubWF0ZXJpYWwubmVlZHNVcGRhdGU9ITAsST1SLE89Ui52ZXJzaW9uO1EudW5zaGlmdChFLEUuZ2VvbWV0cnksRS5tYXRlcmlhbCwwLDAsbnVsbCl9fX19ZnVuY3Rpb24gWmIoYixlLGgsbil7dmFyIHU7dGhpcy5zZXRNb2RlPWZ1bmN0aW9uKHcpe3U9d307dGhpcy5yZW5kZXI9ZnVuY3Rpb24odyx6KXtiLmRyYXdBcnJheXModSx3LHopO2gudXBkYXRlKHosdSl9O3RoaXMucmVuZGVySW5zdGFuY2VzPWZ1bmN0aW9uKHcseixFKXtpZihuLmlzV2ViR0wyKXZhciBIPWI7ZWxzZSBpZihIPWUuZ2V0KCJBTkdMRV9pbnN0YW5jZWRfYXJyYXlzIiksbnVsbD09PUgpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMQnVmZmVyUmVuZGVyZXI6IHVzaW5nIFRIUkVFLkluc3RhbmNlZEJ1ZmZlckdlb21ldHJ5IGJ1dCBoYXJkd2FyZSBkb2VzIG5vdCBzdXBwb3J0IGV4dGVuc2lvbiBBTkdMRV9pbnN0YW5jZWRfYXJyYXlzLiIpOwpyZXR1cm59SFtuLmlzV2ViR0wyPyJkcmF3QXJyYXlzSW5zdGFuY2VkIjoiZHJhd0FycmF5c0luc3RhbmNlZEFOR0xFIl0odSx6LEUsdy5tYXhJbnN0YW5jZWRDb3VudCk7aC51cGRhdGUoRSx1LHcubWF4SW5zdGFuY2VkQ291bnQpfX1mdW5jdGlvbiBoZChiLGUsaCl7ZnVuY3Rpb24gbihpYSl7aWYoImhpZ2hwIj09PWlhKXtpZigwPGIuZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KDM1NjMzLDM2MzM4KS5wcmVjaXNpb24mJjA8Yi5nZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoMzU2MzIsMzYzMzgpLnByZWNpc2lvbilyZXR1cm4iaGlnaHAiO2lhPSJtZWRpdW1wIn1yZXR1cm4ibWVkaXVtcCI9PT1pYSYmMDxiLmdldFNoYWRlclByZWNpc2lvbkZvcm1hdCgzNTYzMywzNjMzNykucHJlY2lzaW9uJiYwPGIuZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KDM1NjMyLDM2MzM3KS5wcmVjaXNpb24/Im1lZGl1bXAiOiJsb3dwIn12YXIgdSx3PSJ1bmRlZmluZWQiIT09dHlwZW9mIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQmJgpiIGluc3RhbmNlb2YgV2ViR0wyUmVuZGVyaW5nQ29udGV4dCx6PXZvaWQgMCE9PWgucHJlY2lzaW9uP2gucHJlY2lzaW9uOiJoaWdocCIsRT1uKHopO0UhPT16JiYoY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiIseiwibm90IHN1cHBvcnRlZCwgdXNpbmciLEUsImluc3RlYWQuIiksej1FKTtoPSEwPT09aC5sb2dhcml0aG1pY0RlcHRoQnVmZmVyO0U9Yi5nZXRQYXJhbWV0ZXIoMzQ5MzApO3ZhciBIPWIuZ2V0UGFyYW1ldGVyKDM1NjYwKSxJPWIuZ2V0UGFyYW1ldGVyKDMzNzkpLE89Yi5nZXRQYXJhbWV0ZXIoMzQwNzYpLFE9Yi5nZXRQYXJhbWV0ZXIoMzQ5MjEpLFI9Yi5nZXRQYXJhbWV0ZXIoMzYzNDcpLFU9Yi5nZXRQYXJhbWV0ZXIoMzYzNDgpLFc9Yi5nZXRQYXJhbWV0ZXIoMzYzNDkpLFo9MDxILGZhPXd8fCEhZS5nZXQoIk9FU190ZXh0dXJlX2Zsb2F0IikscWE9WiYmZmEscmE9dz9iLmdldFBhcmFtZXRlcigzNjE4Myk6MDtyZXR1cm57aXNXZWJHTDI6dyxnZXRNYXhBbmlzb3Ryb3B5OmZ1bmN0aW9uKCl7aWYodm9pZCAwIT09CnUpcmV0dXJuIHU7dmFyIGlhPWUuZ2V0KCJFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKTtyZXR1cm4gdT1udWxsIT09aWE/Yi5nZXRQYXJhbWV0ZXIoaWEuTUFYX1RFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhUKTowfSxnZXRNYXhQcmVjaXNpb246bixwcmVjaXNpb246eixsb2dhcml0aG1pY0RlcHRoQnVmZmVyOmgsbWF4VGV4dHVyZXM6RSxtYXhWZXJ0ZXhUZXh0dXJlczpILG1heFRleHR1cmVTaXplOkksbWF4Q3ViZW1hcFNpemU6TyxtYXhBdHRyaWJ1dGVzOlEsbWF4VmVydGV4VW5pZm9ybXM6UixtYXhWYXJ5aW5nczpVLG1heEZyYWdtZW50VW5pZm9ybXM6Vyx2ZXJ0ZXhUZXh0dXJlczpaLGZsb2F0RnJhZ21lbnRUZXh0dXJlczpmYSxmbG9hdFZlcnRleFRleHR1cmVzOnFhLG1heFNhbXBsZXM6cmF9fWZ1bmN0aW9uICRiKCl7ZnVuY3Rpb24gYigpe0kudmFsdWUhPT1uJiYoSS52YWx1ZT1uLEkubmVlZHNVcGRhdGU9MDx1KTtoLm51bVBsYW5lcz11O2gubnVtSW50ZXJzZWN0aW9uPQowfWZ1bmN0aW9uIGUoTyxRLFIsVSl7dmFyIFc9bnVsbCE9PU8/Ty5sZW5ndGg6MCxaPW51bGw7aWYoMCE9PVcpe1o9SS52YWx1ZTtpZighMCE9PVV8fG51bGw9PT1aKXtVPVIrNCpXO1E9US5tYXRyaXhXb3JsZEludmVyc2U7SC5nZXROb3JtYWxNYXRyaXgoUSk7aWYobnVsbD09PVp8fFoubGVuZ3RoPFUpWj1uZXcgRmxvYXQzMkFycmF5KFUpO2ZvcihVPTA7VSE9PVc7KytVLFIrPTQpRS5jb3B5KE9bVV0pLmFwcGx5TWF0cml4NChRLEgpLEUubm9ybWFsLnRvQXJyYXkoWixSKSxaW1IrM109RS5jb25zdGFudH1JLnZhbHVlPVo7SS5uZWVkc1VwZGF0ZT0hMH1oLm51bVBsYW5lcz1XO3JldHVybiBafXZhciBoPXRoaXMsbj1udWxsLHU9MCx3PSExLHo9ITEsRT1uZXcgeSxIPW5ldyBsLEk9e3ZhbHVlOm51bGwsbmVlZHNVcGRhdGU6ITF9O3RoaXMudW5pZm9ybT1JO3RoaXMubnVtSW50ZXJzZWN0aW9uPXRoaXMubnVtUGxhbmVzPTA7dGhpcy5pbml0PWZ1bmN0aW9uKE8sUSxSKXt2YXIgVT0KMCE9PU8ubGVuZ3RofHxRfHwwIT09dXx8dzt3PVE7bj1lKE8sUiwwKTt1PU8ubGVuZ3RoO3JldHVybiBVfTt0aGlzLmJlZ2luU2hhZG93cz1mdW5jdGlvbigpe3o9ITA7ZShudWxsKX07dGhpcy5lbmRTaGFkb3dzPWZ1bmN0aW9uKCl7ej0hMTtiKCl9O3RoaXMuc2V0U3RhdGU9ZnVuY3Rpb24oTyxRLFIsVSxXLFope2lmKCF3fHxudWxsPT09T3x8MD09PU8ubGVuZ3RofHx6JiYhUil6P2UobnVsbCk6YigpO2Vsc2V7Uj16PzA6dTt2YXIgZmE9NCpSLHFhPVcuY2xpcHBpbmdTdGF0ZXx8bnVsbDtJLnZhbHVlPXFhO3FhPWUoTyxVLGZhLFopO2ZvcihPPTA7TyE9PWZhOysrTylxYVtPXT1uW09dO1cuY2xpcHBpbmdTdGF0ZT1xYTt0aGlzLm51bUludGVyc2VjdGlvbj1RP3RoaXMubnVtUGxhbmVzOjA7dGhpcy5udW1QbGFuZXMrPVJ9fX1mdW5jdGlvbiBmYyhiKXt2YXIgZT17fTtyZXR1cm57Z2V0OmZ1bmN0aW9uKGgpe2lmKHZvaWQgMCE9PWVbaF0pcmV0dXJuIGVbaF07c3dpdGNoKGgpe2Nhc2UgIldFQkdMX2RlcHRoX3RleHR1cmUiOnZhciBuPQpiLmdldEV4dGVuc2lvbigiV0VCR0xfZGVwdGhfdGV4dHVyZSIpfHxiLmdldEV4dGVuc2lvbigiTU9aX1dFQkdMX2RlcHRoX3RleHR1cmUiKXx8Yi5nZXRFeHRlbnNpb24oIldFQktJVF9XRUJHTF9kZXB0aF90ZXh0dXJlIik7YnJlYWs7Y2FzZSAiRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIjpuPWIuZ2V0RXh0ZW5zaW9uKCJFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKXx8Yi5nZXRFeHRlbnNpb24oIk1PWl9FWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKXx8Yi5nZXRFeHRlbnNpb24oIldFQktJVF9FWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKTticmVhaztjYXNlICJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0YyI6bj1iLmdldEV4dGVuc2lvbigiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMiKXx8Yi5nZXRFeHRlbnNpb24oIk1PWl9XRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0YyIpfHxiLmdldEV4dGVuc2lvbigiV0VCS0lUX1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjIik7CmJyZWFrO2Nhc2UgIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9wdnJ0YyI6bj1iLmdldEV4dGVuc2lvbigiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjIil8fGIuZ2V0RXh0ZW5zaW9uKCJXRUJLSVRfV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjIik7YnJlYWs7ZGVmYXVsdDpuPWIuZ2V0RXh0ZW5zaW9uKGgpfW51bGw9PT1uJiZjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6ICIraCsiIGV4dGVuc2lvbiBub3Qgc3VwcG9ydGVkLiIpO3JldHVybiBlW2hdPW59fX1mdW5jdGlvbiBBYShiLGUsaCl7ZnVuY3Rpb24gbih6KXt2YXIgRT16LnRhcmdldDt6PXVbRS5pZF07bnVsbCE9PXouaW5kZXgmJmUucmVtb3ZlKHouaW5kZXgpO2Zvcih2YXIgSCBpbiB6LmF0dHJpYnV0ZXMpZS5yZW1vdmUoei5hdHRyaWJ1dGVzW0hdKTtFLnJlbW92ZUV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLG4pO2RlbGV0ZSB1W0UuaWRdO2lmKEg9d1t6LmlkXSllLnJlbW92ZShIKSxkZWxldGUgd1t6LmlkXTsKaC5tZW1vcnkuZ2VvbWV0cmllcy0tfXZhciB1PXt9LHc9e307cmV0dXJue2dldDpmdW5jdGlvbih6LEUpe3ZhciBIPXVbRS5pZF07aWYoSClyZXR1cm4gSDtFLmFkZEV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLG4pO0UuaXNCdWZmZXJHZW9tZXRyeT9IPUU6RS5pc0dlb21ldHJ5JiYodm9pZCAwPT09RS5fYnVmZmVyR2VvbWV0cnkmJihFLl9idWZmZXJHZW9tZXRyeT0obmV3IHhhKS5zZXRGcm9tT2JqZWN0KHopKSxIPUUuX2J1ZmZlckdlb21ldHJ5KTt1W0UuaWRdPUg7aC5tZW1vcnkuZ2VvbWV0cmllcysrO3JldHVybiBIfSx1cGRhdGU6ZnVuY3Rpb24oeil7dmFyIEU9ei5pbmRleCxIPXouYXR0cmlidXRlcztudWxsIT09RSYmZS51cGRhdGUoRSwzNDk2Myk7Zm9yKHZhciBJIGluIEgpZS51cGRhdGUoSFtJXSwzNDk2Mik7ej16Lm1vcnBoQXR0cmlidXRlcztmb3IoSSBpbiB6KXtFPXpbSV07SD0wO2Zvcih2YXIgTz1FLmxlbmd0aDtIPE87SCsrKWUudXBkYXRlKEVbSF0sMzQ5NjIpfX0sCmdldFdpcmVmcmFtZUF0dHJpYnV0ZTpmdW5jdGlvbih6KXt2YXIgRT13W3ouaWRdO2lmKEUpcmV0dXJuIEU7RT1bXTt2YXIgSD16LmluZGV4LEk9ei5hdHRyaWJ1dGVzO2lmKG51bGwhPT1IKXtIPUguYXJyYXk7ST0wO2Zvcih2YXIgTz1ILmxlbmd0aDtJPE87SSs9Myl7dmFyIFE9SFtJKzBdLFI9SFtJKzFdLFU9SFtJKzJdO0UucHVzaChRLFIsUixVLFUsUSl9fWVsc2UgZm9yKEg9SS5wb3NpdGlvbi5hcnJheSxJPTAsTz1ILmxlbmd0aC8zLTE7STxPO0krPTMpUT1JKzAsUj1JKzEsVT1JKzIsRS5wdXNoKFEsUixSLFUsVSxRKTtFPW5ldyAoNjU1MzU8Q2EoRSk/a2E6Y2EpKEUsMSk7ZS51cGRhdGUoRSwzNDk2Myk7cmV0dXJuIHdbei5pZF09RX19fWZ1bmN0aW9uIE1iKGIsZSxoLG4pe3ZhciB1LHcsejt0aGlzLnNldE1vZGU9ZnVuY3Rpb24oRSl7dT1FfTt0aGlzLnNldEluZGV4PWZ1bmN0aW9uKEUpe3c9RS50eXBlO3o9RS5ieXRlc1BlckVsZW1lbnR9O3RoaXMucmVuZGVyPWZ1bmN0aW9uKEUsCkgpe2IuZHJhd0VsZW1lbnRzKHUsSCx3LEUqeik7aC51cGRhdGUoSCx1KX07dGhpcy5yZW5kZXJJbnN0YW5jZXM9ZnVuY3Rpb24oRSxILEkpe2lmKG4uaXNXZWJHTDIpdmFyIE89YjtlbHNlIGlmKE89ZS5nZXQoIkFOR0xFX2luc3RhbmNlZF9hcnJheXMiKSxudWxsPT09Tyl7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xJbmRleGVkQnVmZmVyUmVuZGVyZXI6IHVzaW5nIFRIUkVFLkluc3RhbmNlZEJ1ZmZlckdlb21ldHJ5IGJ1dCBoYXJkd2FyZSBkb2VzIG5vdCBzdXBwb3J0IGV4dGVuc2lvbiBBTkdMRV9pbnN0YW5jZWRfYXJyYXlzLiIpO3JldHVybn1PW24uaXNXZWJHTDI/ImRyYXdFbGVtZW50c0luc3RhbmNlZCI6ImRyYXdFbGVtZW50c0luc3RhbmNlZEFOR0xFIl0odSxJLHcsSCp6LEUubWF4SW5zdGFuY2VkQ291bnQpO2gudXBkYXRlKEksdSxFLm1heEluc3RhbmNlZENvdW50KX19ZnVuY3Rpb24gamMoKXt2YXIgYj17ZnJhbWU6MCxjYWxsczowLHRyaWFuZ2xlczowLHBvaW50czowLApsaW5lczowfTtyZXR1cm57bWVtb3J5OntnZW9tZXRyaWVzOjAsdGV4dHVyZXM6MH0scmVuZGVyOmIscHJvZ3JhbXM6bnVsbCxhdXRvUmVzZXQ6ITAscmVzZXQ6ZnVuY3Rpb24oKXtiLmZyYW1lKys7Yi5jYWxscz0wO2IudHJpYW5nbGVzPTA7Yi5wb2ludHM9MDtiLmxpbmVzPTB9LHVwZGF0ZTpmdW5jdGlvbihlLGgsbil7bj1ufHwxO2IuY2FsbHMrKztzd2l0Y2goaCl7Y2FzZSA0OmIudHJpYW5nbGVzKz1lLzMqbjticmVhaztjYXNlIDU6Y2FzZSA2OmIudHJpYW5nbGVzKz1uKihlLTIpO2JyZWFrO2Nhc2UgMTpiLmxpbmVzKz1lLzIqbjticmVhaztjYXNlIDM6Yi5saW5lcys9biooZS0xKTticmVhaztjYXNlIDI6Yi5saW5lcys9biplO2JyZWFrO2Nhc2UgMDpiLnBvaW50cys9biplO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xJbmZvOiBVbmtub3duIGRyYXcgbW9kZToiLGgpfX19fWZ1bmN0aW9uIHRkKGIsZSl7cmV0dXJuIE1hdGguYWJzKGVbMV0pLU1hdGguYWJzKGJbMV0pfQpmdW5jdGlvbiBOZChiKXt2YXIgZT17fSxoPW5ldyBGbG9hdDMyQXJyYXkoOCk7cmV0dXJue3VwZGF0ZTpmdW5jdGlvbihuLHUsdyx6KXt2YXIgRT1uLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcyxIPUUubGVuZ3RoO249ZVt1LmlkXTtpZih2b2lkIDA9PT1uKXtuPVtdO2Zvcih2YXIgST0wO0k8SDtJKyspbltJXT1bSSwwXTtlW3UuaWRdPW59dmFyIE89dy5tb3JwaFRhcmdldHMmJnUubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uO3c9dy5tb3JwaE5vcm1hbHMmJnUubW9ycGhBdHRyaWJ1dGVzLm5vcm1hbDtmb3IoST0wO0k8SDtJKyspe3ZhciBRPW5bSV07MCE9PVFbMV0mJihPJiZ1LnJlbW92ZUF0dHJpYnV0ZSgibW9ycGhUYXJnZXQiK0kpLHcmJnUucmVtb3ZlQXR0cmlidXRlKCJtb3JwaE5vcm1hbCIrSSkpfWZvcihJPTA7STxIO0krKylRPW5bSV0sUVswXT1JLFFbMV09RVtJXTtuLnNvcnQodGQpO2ZvcihJPTA7OD5JO0krKyl7aWYoUT1uW0ldKWlmKEU9UVswXSxIPVFbMV0pe08mJnUuYWRkQXR0cmlidXRlKCJtb3JwaFRhcmdldCIrCkksT1tFXSk7dyYmdS5hZGRBdHRyaWJ1dGUoIm1vcnBoTm9ybWFsIitJLHdbRV0pO2hbSV09SDtjb250aW51ZX1oW0ldPTB9ei5nZXRVbmlmb3JtcygpLnNldFZhbHVlKGIsIm1vcnBoVGFyZ2V0SW5mbHVlbmNlcyIsaCl9fX1mdW5jdGlvbiAkZyhiLGUpe3ZhciBoPXt9O3JldHVybnt1cGRhdGU6ZnVuY3Rpb24obil7dmFyIHU9ZS5yZW5kZXIuZnJhbWUsdz1uLmdlb21ldHJ5LHo9Yi5nZXQobix3KTtoW3ouaWRdIT09dSYmKHcuaXNHZW9tZXRyeSYmei51cGRhdGVGcm9tT2JqZWN0KG4pLGIudXBkYXRlKHopLGhbei5pZF09dSk7cmV0dXJuIHp9LGRpc3Bvc2U6ZnVuY3Rpb24oKXtoPXt9fX19ZnVuY3Rpb24gdWQoYixlLGgsbix1LHcseixFLEgsSSl7Yj12b2lkIDAhPT1iP2I6W107ay5jYWxsKHRoaXMsYix2b2lkIDAhPT1lP2U6MzAxLGgsbix1LHcsdm9pZCAwIT09ej96OjEwMjIsRSxILEkpO3RoaXMuZmxpcFk9ITF9ZnVuY3Rpb24gS2UoYixlLGgsbil7ay5jYWxsKHRoaXMsbnVsbCk7CnRoaXMuaW1hZ2U9e2RhdGE6Yix3aWR0aDplLGhlaWdodDpoLGRlcHRoOm59O3RoaXMubWluRmlsdGVyPXRoaXMubWFnRmlsdGVyPTEwMDM7dGhpcy53cmFwUj0xMDAxO3RoaXMuZmxpcFk9dGhpcy5nZW5lcmF0ZU1pcG1hcHM9ITF9ZnVuY3Rpb24gTGUoYixlLGgsbil7ay5jYWxsKHRoaXMsbnVsbCk7dGhpcy5pbWFnZT17ZGF0YTpiLHdpZHRoOmUsaGVpZ2h0OmgsZGVwdGg6bn07dGhpcy5taW5GaWx0ZXI9dGhpcy5tYWdGaWx0ZXI9MTAwMzt0aGlzLndyYXBSPTEwMDE7dGhpcy5mbGlwWT10aGlzLmdlbmVyYXRlTWlwbWFwcz0hMX1mdW5jdGlvbiBNZShiLGUsaCl7dmFyIG49YlswXTtpZigwPj1ufHwwPG4pcmV0dXJuIGI7dmFyIHU9ZSpoLHc9U2tbdV07dm9pZCAwPT09dyYmKHc9bmV3IEZsb2F0MzJBcnJheSh1KSxTa1t1XT13KTtpZigwIT09ZSlmb3Iobi50b0FycmF5KHcsMCksbj0xLHU9MDtuIT09ZTsrK24pdSs9aCxiW25dLnRvQXJyYXkodyx1KTtyZXR1cm4gd31mdW5jdGlvbiBhYyhiLAplKXtpZihiLmxlbmd0aCE9PWUubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgaD0wLG49Yi5sZW5ndGg7aDxuO2grKylpZihiW2hdIT09ZVtoXSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBrYyhiLGUpe2Zvcih2YXIgaD0wLG49ZS5sZW5ndGg7aDxuO2grKyliW2hdPWVbaF19ZnVuY3Rpb24gVGsoYixlKXt2YXIgaD1Va1tlXTt2b2lkIDA9PT1oJiYoaD1uZXcgSW50MzJBcnJheShlKSxVa1tlXT1oKTtmb3IodmFyIG49MDtuIT09ZTsrK24paFtuXT1iLmFsbG9jYXRlVGV4dHVyZVVuaXQoKTtyZXR1cm4gaH1mdW5jdGlvbiBQbihiLGUpe3ZhciBoPXRoaXMuY2FjaGU7aFswXSE9PWUmJihiLnVuaWZvcm0xZih0aGlzLmFkZHIsZSksaFswXT1lKX1mdW5jdGlvbiBRbihiLGUpe3ZhciBoPXRoaXMuY2FjaGU7aFswXSE9PWUmJihiLnVuaWZvcm0xaSh0aGlzLmFkZHIsZSksaFswXT1lKX1mdW5jdGlvbiBSbihiLGUpe3ZhciBoPXRoaXMuY2FjaGU7aWYodm9pZCAwIT09ZS54KXtpZihoWzBdIT09CmUueHx8aFsxXSE9PWUueSliLnVuaWZvcm0yZih0aGlzLmFkZHIsZS54LGUueSksaFswXT1lLngsaFsxXT1lLnl9ZWxzZSBhYyhoLGUpfHwoYi51bmlmb3JtMmZ2KHRoaXMuYWRkcixlKSxrYyhoLGUpKX1mdW5jdGlvbiBTbihiLGUpe3ZhciBoPXRoaXMuY2FjaGU7aWYodm9pZCAwIT09ZS54KXtpZihoWzBdIT09ZS54fHxoWzFdIT09ZS55fHxoWzJdIT09ZS56KWIudW5pZm9ybTNmKHRoaXMuYWRkcixlLngsZS55LGUueiksaFswXT1lLngsaFsxXT1lLnksaFsyXT1lLnp9ZWxzZSBpZih2b2lkIDAhPT1lLnIpe2lmKGhbMF0hPT1lLnJ8fGhbMV0hPT1lLmd8fGhbMl0hPT1lLmIpYi51bmlmb3JtM2YodGhpcy5hZGRyLGUucixlLmcsZS5iKSxoWzBdPWUucixoWzFdPWUuZyxoWzJdPWUuYn1lbHNlIGFjKGgsZSl8fChiLnVuaWZvcm0zZnYodGhpcy5hZGRyLGUpLGtjKGgsZSkpfWZ1bmN0aW9uIFRuKGIsZSl7dmFyIGg9dGhpcy5jYWNoZTtpZih2b2lkIDAhPT1lLngpe2lmKGhbMF0hPT1lLnh8fApoWzFdIT09ZS55fHxoWzJdIT09ZS56fHxoWzNdIT09ZS53KWIudW5pZm9ybTRmKHRoaXMuYWRkcixlLngsZS55LGUueixlLncpLGhbMF09ZS54LGhbMV09ZS55LGhbMl09ZS56LGhbM109ZS53fWVsc2UgYWMoaCxlKXx8KGIudW5pZm9ybTRmdih0aGlzLmFkZHIsZSksa2MoaCxlKSl9ZnVuY3Rpb24gVW4oYixlKXt2YXIgaD10aGlzLmNhY2hlLG49ZS5lbGVtZW50czt2b2lkIDA9PT1uP2FjKGgsZSl8fChiLnVuaWZvcm1NYXRyaXgyZnYodGhpcy5hZGRyLCExLGUpLGtjKGgsZSkpOmFjKGgsbil8fChWay5zZXQobiksYi51bmlmb3JtTWF0cml4MmZ2KHRoaXMuYWRkciwhMSxWayksa2MoaCxuKSl9ZnVuY3Rpb24gVm4oYixlKXt2YXIgaD10aGlzLmNhY2hlLG49ZS5lbGVtZW50czt2b2lkIDA9PT1uP2FjKGgsZSl8fChiLnVuaWZvcm1NYXRyaXgzZnYodGhpcy5hZGRyLCExLGUpLGtjKGgsZSkpOmFjKGgsbil8fChXay5zZXQobiksYi51bmlmb3JtTWF0cml4M2Z2KHRoaXMuYWRkciwhMSwKV2spLGtjKGgsbikpfWZ1bmN0aW9uIFduKGIsZSl7dmFyIGg9dGhpcy5jYWNoZSxuPWUuZWxlbWVudHM7dm9pZCAwPT09bj9hYyhoLGUpfHwoYi51bmlmb3JtTWF0cml4NGZ2KHRoaXMuYWRkciwhMSxlKSxrYyhoLGUpKTphYyhoLG4pfHwoWGsuc2V0KG4pLGIudW5pZm9ybU1hdHJpeDRmdih0aGlzLmFkZHIsITEsWGspLGtjKGgsbikpfWZ1bmN0aW9uIFhuKGIsZSxoKXt2YXIgbj10aGlzLmNhY2hlLHU9aC5hbGxvY2F0ZVRleHR1cmVVbml0KCk7blswXSE9PXUmJihiLnVuaWZvcm0xaSh0aGlzLmFkZHIsdSksblswXT11KTtoLnNhZmVTZXRUZXh0dXJlMkQoZXx8WWssdSl9ZnVuY3Rpb24gWW4oYixlLGgpe3ZhciBuPXRoaXMuY2FjaGUsdT1oLmFsbG9jYXRlVGV4dHVyZVVuaXQoKTtuWzBdIT09dSYmKGIudW5pZm9ybTFpKHRoaXMuYWRkcix1KSxuWzBdPXUpO2guc2V0VGV4dHVyZTJEQXJyYXkoZXx8Wm4sdSl9ZnVuY3Rpb24gJG4oYixlLGgpe3ZhciBuPXRoaXMuY2FjaGUsdT1oLmFsbG9jYXRlVGV4dHVyZVVuaXQoKTsKblswXSE9PXUmJihiLnVuaWZvcm0xaSh0aGlzLmFkZHIsdSksblswXT11KTtoLnNldFRleHR1cmUzRChlfHxhbyx1KX1mdW5jdGlvbiBibyhiLGUsaCl7dmFyIG49dGhpcy5jYWNoZSx1PWguYWxsb2NhdGVUZXh0dXJlVW5pdCgpO25bMF0hPT11JiYoYi51bmlmb3JtMWkodGhpcy5hZGRyLHUpLG5bMF09dSk7aC5zYWZlU2V0VGV4dHVyZUN1YmUoZXx8WmssdSl9ZnVuY3Rpb24gJGsoYixlKXt2YXIgaD10aGlzLmNhY2hlO2FjKGgsZSl8fChiLnVuaWZvcm0yaXYodGhpcy5hZGRyLGUpLGtjKGgsZSkpfWZ1bmN0aW9uIGFsKGIsZSl7dmFyIGg9dGhpcy5jYWNoZTthYyhoLGUpfHwoYi51bmlmb3JtM2l2KHRoaXMuYWRkcixlKSxrYyhoLGUpKX1mdW5jdGlvbiBibChiLGUpe3ZhciBoPXRoaXMuY2FjaGU7YWMoaCxlKXx8KGIudW5pZm9ybTRpdih0aGlzLmFkZHIsZSksa2MoaCxlKSl9ZnVuY3Rpb24gY28oYil7c3dpdGNoKGIpe2Nhc2UgNTEyNjpyZXR1cm4gUG47Y2FzZSAzNTY2NDpyZXR1cm4gUm47CmNhc2UgMzU2NjU6cmV0dXJuIFNuO2Nhc2UgMzU2NjY6cmV0dXJuIFRuO2Nhc2UgMzU2NzQ6cmV0dXJuIFVuO2Nhc2UgMzU2NzU6cmV0dXJuIFZuO2Nhc2UgMzU2NzY6cmV0dXJuIFduO2Nhc2UgMzU2Nzg6Y2FzZSAzNjE5ODpyZXR1cm4gWG47Y2FzZSAzNTY3OTpyZXR1cm4gJG47Y2FzZSAzNTY4MDpyZXR1cm4gYm87Y2FzZSAzNjI4OTpyZXR1cm4gWW47Y2FzZSA1MTI0OmNhc2UgMzU2NzA6cmV0dXJuIFFuO2Nhc2UgMzU2Njc6Y2FzZSAzNTY3MTpyZXR1cm4gJGs7Y2FzZSAzNTY2ODpjYXNlIDM1NjcyOnJldHVybiBhbDtjYXNlIDM1NjY5OmNhc2UgMzU2NzM6cmV0dXJuIGJsfX1mdW5jdGlvbiBlbyhiLGUpe3ZhciBoPXRoaXMuY2FjaGU7YWMoaCxlKXx8KGIudW5pZm9ybTFmdih0aGlzLmFkZHIsZSksa2MoaCxlKSl9ZnVuY3Rpb24gZm8oYixlKXt2YXIgaD10aGlzLmNhY2hlO2FjKGgsZSl8fChiLnVuaWZvcm0xaXYodGhpcy5hZGRyLGUpLGtjKGgsZSkpfWZ1bmN0aW9uIGdvKGIsZSl7dmFyIGg9CnRoaXMuY2FjaGU7ZT1NZShlLHRoaXMuc2l6ZSwyKTthYyhoLGUpfHwoYi51bmlmb3JtMmZ2KHRoaXMuYWRkcixlKSx0aGlzLnVwZGF0ZUNhY2hlKGUpKX1mdW5jdGlvbiBobyhiLGUpe3ZhciBoPXRoaXMuY2FjaGU7ZT1NZShlLHRoaXMuc2l6ZSwzKTthYyhoLGUpfHwoYi51bmlmb3JtM2Z2KHRoaXMuYWRkcixlKSx0aGlzLnVwZGF0ZUNhY2hlKGUpKX1mdW5jdGlvbiBpbyhiLGUpe3ZhciBoPXRoaXMuY2FjaGU7ZT1NZShlLHRoaXMuc2l6ZSw0KTthYyhoLGUpfHwoYi51bmlmb3JtNGZ2KHRoaXMuYWRkcixlKSx0aGlzLnVwZGF0ZUNhY2hlKGUpKX1mdW5jdGlvbiBqbyhiLGUpe3ZhciBoPXRoaXMuY2FjaGU7ZT1NZShlLHRoaXMuc2l6ZSw0KTthYyhoLGUpfHwoYi51bmlmb3JtTWF0cml4MmZ2KHRoaXMuYWRkciwhMSxlKSx0aGlzLnVwZGF0ZUNhY2hlKGUpKX1mdW5jdGlvbiBrbyhiLGUpe3ZhciBoPXRoaXMuY2FjaGU7ZT1NZShlLHRoaXMuc2l6ZSw5KTthYyhoLGUpfHwoYi51bmlmb3JtTWF0cml4M2Z2KHRoaXMuYWRkciwKITEsZSksdGhpcy51cGRhdGVDYWNoZShlKSl9ZnVuY3Rpb24gbG8oYixlKXt2YXIgaD10aGlzLmNhY2hlO2U9TWUoZSx0aGlzLnNpemUsMTYpO2FjKGgsZSl8fChiLnVuaWZvcm1NYXRyaXg0ZnYodGhpcy5hZGRyLCExLGUpLHRoaXMudXBkYXRlQ2FjaGUoZSkpfWZ1bmN0aW9uIG1vKGIsZSxoKXt2YXIgbj10aGlzLmNhY2hlLHU9ZS5sZW5ndGgsdz1UayhoLHUpOyExPT09YWMobix3KSYmKGIudW5pZm9ybTFpdih0aGlzLmFkZHIsdyksa2Mobix3KSk7Zm9yKGI9MDtiIT09dTsrK2IpaC5zYWZlU2V0VGV4dHVyZTJEKGVbYl18fFlrLHdbYl0pfWZ1bmN0aW9uIG5vKGIsZSxoKXt2YXIgbj10aGlzLmNhY2hlLHU9ZS5sZW5ndGgsdz1UayhoLHUpOyExPT09YWMobix3KSYmKGIudW5pZm9ybTFpdih0aGlzLmFkZHIsdyksa2Mobix3KSk7Zm9yKGI9MDtiIT09dTsrK2IpaC5zYWZlU2V0VGV4dHVyZUN1YmUoZVtiXXx8Wmssd1tiXSl9ZnVuY3Rpb24gb28oYil7c3dpdGNoKGIpe2Nhc2UgNTEyNjpyZXR1cm4gZW87CmNhc2UgMzU2NjQ6cmV0dXJuIGdvO2Nhc2UgMzU2NjU6cmV0dXJuIGhvO2Nhc2UgMzU2NjY6cmV0dXJuIGlvO2Nhc2UgMzU2NzQ6cmV0dXJuIGpvO2Nhc2UgMzU2NzU6cmV0dXJuIGtvO2Nhc2UgMzU2NzY6cmV0dXJuIGxvO2Nhc2UgMzU2Nzg6cmV0dXJuIG1vO2Nhc2UgMzU2ODA6cmV0dXJuIG5vO2Nhc2UgNTEyNDpjYXNlIDM1NjcwOnJldHVybiBmbztjYXNlIDM1NjY3OmNhc2UgMzU2NzE6cmV0dXJuICRrO2Nhc2UgMzU2Njg6Y2FzZSAzNTY3MjpyZXR1cm4gYWw7Y2FzZSAzNTY2OTpjYXNlIDM1NjczOnJldHVybiBibH19ZnVuY3Rpb24gcG8oYixlLGgpe3RoaXMuaWQ9Yjt0aGlzLmFkZHI9aDt0aGlzLmNhY2hlPVtdO3RoaXMuc2V0VmFsdWU9Y28oZS50eXBlKX1mdW5jdGlvbiBjbChiLGUsaCl7dGhpcy5pZD1iO3RoaXMuYWRkcj1oO3RoaXMuY2FjaGU9W107dGhpcy5zaXplPWUuc2l6ZTt0aGlzLnNldFZhbHVlPW9vKGUudHlwZSl9ZnVuY3Rpb24gZGwoYil7dGhpcy5pZD1iO3RoaXMuc2VxPQpbXTt0aGlzLm1hcD17fX1mdW5jdGlvbiBlbChiLGUpe2Iuc2VxLnB1c2goZSk7Yi5tYXBbZS5pZF09ZX1mdW5jdGlvbiBxbyhiLGUsaCl7dmFyIG49Yi5uYW1lLHU9bi5sZW5ndGg7Zm9yKHJpLmxhc3RJbmRleD0wOzspe3ZhciB3PXJpLmV4ZWMobiksej1yaS5sYXN0SW5kZXgsRT13WzFdLEg9d1szXTsiXSI9PT13WzJdJiYoRXw9MCk7aWYodm9pZCAwPT09SHx8IlsiPT09SCYmeisyPT09dSl7ZWwoaCx2b2lkIDA9PT1IP25ldyBwbyhFLGIsZSk6bmV3IGNsKEUsYixlKSk7YnJlYWt9ZWxzZSB3PWgubWFwW0VdLHZvaWQgMD09PXcmJih3PW5ldyBkbChFKSxlbChoLHcpKSxoPXd9fWZ1bmN0aW9uIE9kKGIsZSl7dGhpcy5zZXE9W107dGhpcy5tYXA9e307Zm9yKHZhciBoPWIuZ2V0UHJvZ3JhbVBhcmFtZXRlcihlLDM1NzE4KSxuPTA7bjxoOysrbil7dmFyIHU9Yi5nZXRBY3RpdmVVbmlmb3JtKGUsbik7cW8odSxiLmdldFVuaWZvcm1Mb2NhdGlvbihlLHUubmFtZSksdGhpcyl9fWZ1bmN0aW9uIHJvKGIpe2I9CmIuc3BsaXQoIlxuIik7Zm9yKHZhciBlPTA7ZTxiLmxlbmd0aDtlKyspYltlXT1lKzErIjogIitiW2VdO3JldHVybiBiLmpvaW4oIlxuIil9ZnVuY3Rpb24gZmwoYixlLGgsbil7dmFyIHU9Yi5jcmVhdGVTaGFkZXIoZSk7Yi5zaGFkZXJTb3VyY2UodSxoKTtiLmNvbXBpbGVTaGFkZXIodSk7ITA9PT1uJiYoITE9PT1iLmdldFNoYWRlclBhcmFtZXRlcih1LDM1NzEzKSYmY29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xTaGFkZXI6IFNoYWRlciBjb3VsZG4ndCBjb21waWxlLiIpLCIiIT09Yi5nZXRTaGFkZXJJbmZvTG9nKHUpJiZjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMU2hhZGVyOiBnbC5nZXRTaGFkZXJJbmZvTG9nKCkiLDM1NjMzPT09ZT8idmVydGV4IjoiZnJhZ21lbnQiLGIuZ2V0U2hhZGVySW5mb0xvZyh1KSxybyhoKSkpO3JldHVybiB1fWZ1bmN0aW9uIGdsKGIpe3N3aXRjaChiKXtjYXNlIDNFMzpyZXR1cm5bIkxpbmVhciIsIiggdmFsdWUgKSJdO2Nhc2UgMzAwMTpyZXR1cm5bInNSR0IiLAoiKCB2YWx1ZSApIl07Y2FzZSAzMDAyOnJldHVyblsiUkdCRSIsIiggdmFsdWUgKSJdO2Nhc2UgMzAwNDpyZXR1cm5bIlJHQk0iLCIoIHZhbHVlLCA3LjAgKSJdO2Nhc2UgMzAwNTpyZXR1cm5bIlJHQk0iLCIoIHZhbHVlLCAxNi4wICkiXTtjYXNlIDMwMDY6cmV0dXJuWyJSR0JEIiwiKCB2YWx1ZSwgMjU2LjAgKSJdO2Nhc2UgMzAwNzpyZXR1cm5bIkdhbW1hIiwiKCB2YWx1ZSwgZmxvYXQoIEdBTU1BX0ZBQ1RPUiApICkiXTtkZWZhdWx0OnRocm93IEVycm9yKCJ1bnN1cHBvcnRlZCBlbmNvZGluZzogIitiKTt9fWZ1bmN0aW9uIGFoKGIsZSl7ZT1nbChlKTtyZXR1cm4idmVjNCAiK2IrIiggdmVjNCB2YWx1ZSApIHsgcmV0dXJuICIrZVswXSsiVG9MaW5lYXIiK2VbMV0rIjsgfSJ9ZnVuY3Rpb24gc28oYixlKXtlPWdsKGUpO3JldHVybiJ2ZWM0ICIrYisiKCB2ZWM0IHZhbHVlICkgeyByZXR1cm4gTGluZWFyVG8iK2VbMF0rZVsxXSsiOyB9In1mdW5jdGlvbiB0byhiLGUpe3N3aXRjaChlKXtjYXNlIDE6ZT0KIkxpbmVhciI7YnJlYWs7Y2FzZSAyOmU9IlJlaW5oYXJkIjticmVhaztjYXNlIDM6ZT0iVW5jaGFydGVkMiI7YnJlYWs7Y2FzZSA0OmU9Ik9wdGltaXplZENpbmVvbiI7YnJlYWs7Y2FzZSA1OmU9IkFDRVNGaWxtaWMiO2JyZWFrO2RlZmF1bHQ6dGhyb3cgRXJyb3IoInVuc3VwcG9ydGVkIHRvbmVNYXBwaW5nOiAiK2UpO31yZXR1cm4idmVjMyAiK2IrIiggdmVjMyBjb2xvciApIHsgcmV0dXJuICIrZSsiVG9uZU1hcHBpbmcoIGNvbG9yICk7IH0ifWZ1bmN0aW9uIHVvKGIsZSxoKXtiPWJ8fHt9O3JldHVybltiLmRlcml2YXRpdmVzfHxlLmVudk1hcEN1YmVVVnx8ZS5idW1wTWFwfHxlLm5vcm1hbE1hcCYmIWUub2JqZWN0U3BhY2VOb3JtYWxNYXB8fGUuZmxhdFNoYWRpbmc/IiNleHRlbnNpb24gR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIDogZW5hYmxlIjoiIiwoYi5mcmFnRGVwdGh8fGUubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlcikmJmguZ2V0KCJFWFRfZnJhZ19kZXB0aCIpPyIjZXh0ZW5zaW9uIEdMX0VYVF9mcmFnX2RlcHRoIDogZW5hYmxlIjoKIiIsYi5kcmF3QnVmZmVycyYmaC5nZXQoIldFQkdMX2RyYXdfYnVmZmVycyIpPyIjZXh0ZW5zaW9uIEdMX0VYVF9kcmF3X2J1ZmZlcnMgOiByZXF1aXJlIjoiIiwoYi5zaGFkZXJUZXh0dXJlTE9EfHxlLmVudk1hcCkmJmguZ2V0KCJFWFRfc2hhZGVyX3RleHR1cmVfbG9kIik/IiNleHRlbnNpb24gR0xfRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCA6IGVuYWJsZSI6IiJdLmZpbHRlcihPZikuam9pbigiXG4iKX1mdW5jdGlvbiB2byhiKXt2YXIgZT1bXSxoO2ZvcihoIGluIGIpe3ZhciBuPWJbaF07ITEhPT1uJiZlLnB1c2goIiNkZWZpbmUgIitoKyIgIituKX1yZXR1cm4gZS5qb2luKCJcbiIpfWZ1bmN0aW9uIHdvKGIsZSl7Zm9yKHZhciBoPXt9LG49Yi5nZXRQcm9ncmFtUGFyYW1ldGVyKGUsMzU3MjEpLHU9MDt1PG47dSsrKXt2YXIgdz1iLmdldEFjdGl2ZUF0dHJpYihlLHUpLm5hbWU7aFt3XT1iLmdldEF0dHJpYkxvY2F0aW9uKGUsdyl9cmV0dXJuIGh9ZnVuY3Rpb24gT2YoYil7cmV0dXJuIiIhPT0KYn1mdW5jdGlvbiBobChiLGUpe3JldHVybiBiLnJlcGxhY2UoL05VTV9ESVJfTElHSFRTL2csZS5udW1EaXJMaWdodHMpLnJlcGxhY2UoL05VTV9TUE9UX0xJR0hUUy9nLGUubnVtU3BvdExpZ2h0cykucmVwbGFjZSgvTlVNX1JFQ1RfQVJFQV9MSUdIVFMvZyxlLm51bVJlY3RBcmVhTGlnaHRzKS5yZXBsYWNlKC9OVU1fUE9JTlRfTElHSFRTL2csZS5udW1Qb2ludExpZ2h0cykucmVwbGFjZSgvTlVNX0hFTUlfTElHSFRTL2csZS5udW1IZW1pTGlnaHRzKX1mdW5jdGlvbiBpbChiLGUpe3JldHVybiBiLnJlcGxhY2UoL05VTV9DTElQUElOR19QTEFORVMvZyxlLm51bUNsaXBwaW5nUGxhbmVzKS5yZXBsYWNlKC9VTklPTl9DTElQUElOR19QTEFORVMvZyxlLm51bUNsaXBwaW5nUGxhbmVzLWUubnVtQ2xpcEludGVyc2VjdGlvbil9ZnVuY3Rpb24gc2koYil7cmV0dXJuIGIucmVwbGFjZSgvXlsgXHRdKiNpbmNsdWRlICs8KFtcd1xkLi9dKyk+L2dtLGZ1bmN0aW9uKGUsaCl7ZT16YltoXTtpZih2b2lkIDA9PT0KZSl0aHJvdyBFcnJvcigiQ2FuIG5vdCByZXNvbHZlICNpbmNsdWRlIFx4M2MiK2grIlx4M2UiKTtyZXR1cm4gc2koZSl9KX1mdW5jdGlvbiBqbChiKXtyZXR1cm4gYi5yZXBsYWNlKC8jcHJhZ21hIHVucm9sbF9sb29wW1xzXSs/Zm9yIFwoIGludCBpID0gKFxkKyk7IGkgPCAoXGQrKTsgaSBcK1wrIFwpIFx7KFtcc1xTXSs/KSg/PVx9KVx9L2csZnVuY3Rpb24oZSxoLG4sdSl7ZT0iIjtmb3IoaD1wYXJzZUludChoKTtoPHBhcnNlSW50KG4pO2grKyllKz11LnJlcGxhY2UoL1xbIGkgXF0vZywiWyAiK2grIiBdIik7cmV0dXJuIGV9KX1mdW5jdGlvbiB4byhiLGUsaCxuLHUsdyx6LEUpe3ZhciBIPWIuY29udGV4dCxJPW4uZGVmaW5lcyxPPXUudmVydGV4U2hhZGVyLFE9dS5mcmFnbWVudFNoYWRlcixSPSJTSEFET1dNQVBfVFlQRV9CQVNJQyI7MT09PXcuc2hhZG93TWFwVHlwZT9SPSJTSEFET1dNQVBfVFlQRV9QQ0YiOjI9PT13LnNoYWRvd01hcFR5cGUmJihSPSJTSEFET1dNQVBfVFlQRV9QQ0ZfU09GVCIpOwp2YXIgVT0iRU5WTUFQX1RZUEVfQ1VCRSIsVz0iRU5WTUFQX01PREVfUkVGTEVDVElPTiIsWj0iRU5WTUFQX0JMRU5ESU5HX01VTFRJUExZIjtpZih3LmVudk1hcCl7c3dpdGNoKG4uZW52TWFwLm1hcHBpbmcpe2Nhc2UgMzAxOmNhc2UgMzAyOlU9IkVOVk1BUF9UWVBFX0NVQkUiO2JyZWFrO2Nhc2UgMzA2OmNhc2UgMzA3OlU9IkVOVk1BUF9UWVBFX0NVQkVfVVYiO2JyZWFrO2Nhc2UgMzAzOmNhc2UgMzA0OlU9IkVOVk1BUF9UWVBFX0VRVUlSRUMiO2JyZWFrO2Nhc2UgMzA1OlU9IkVOVk1BUF9UWVBFX1NQSEVSRSJ9c3dpdGNoKG4uZW52TWFwLm1hcHBpbmcpe2Nhc2UgMzAyOmNhc2UgMzA0Olc9IkVOVk1BUF9NT0RFX1JFRlJBQ1RJT04ifXN3aXRjaChuLmNvbWJpbmUpe2Nhc2UgMDpaPSJFTlZNQVBfQkxFTkRJTkdfTVVMVElQTFkiO2JyZWFrO2Nhc2UgMTpaPSJFTlZNQVBfQkxFTkRJTkdfTUlYIjticmVhaztjYXNlIDI6Wj0iRU5WTUFQX0JMRU5ESU5HX0FERCJ9fXZhciBmYT0wPGIuZ2FtbWFGYWN0b3I/CmIuZ2FtbWFGYWN0b3I6MSxxYT16LmlzV2ViR0wyPyIiOnVvKG4uZXh0ZW5zaW9ucyx3LGUpLHJhPXZvKEkpLGlhPUguY3JlYXRlUHJvZ3JhbSgpO24uaXNSYXdTaGFkZXJNYXRlcmlhbD8oST1bcmFdLmZpbHRlcihPZikuam9pbigiXG4iKSwwPEkubGVuZ3RoJiYoSSs9IlxuIiksZT1bcWEscmFdLmZpbHRlcihPZikuam9pbigiXG4iKSwwPGUubGVuZ3RoJiYoZSs9IlxuIikpOihJPVsicHJlY2lzaW9uICIrdy5wcmVjaXNpb24rIiBmbG9hdDsiLCJwcmVjaXNpb24gIit3LnByZWNpc2lvbisiIGludDsiLCIjZGVmaW5lIFNIQURFUl9OQU1FICIrdS5uYW1lLHJhLHcuc3VwcG9ydHNWZXJ0ZXhUZXh0dXJlcz8iI2RlZmluZSBWRVJURVhfVEVYVFVSRVMiOiIiLCIjZGVmaW5lIEdBTU1BX0ZBQ1RPUiAiK2ZhLCIjZGVmaW5lIE1BWF9CT05FUyAiK3cubWF4Qm9uZXMsdy51c2VGb2cmJncuZm9nPyIjZGVmaW5lIFVTRV9GT0ciOiIiLHcudXNlRm9nJiZ3LmZvZ0V4cD8iI2RlZmluZSBGT0dfRVhQMiI6CiIiLHcubWFwPyIjZGVmaW5lIFVTRV9NQVAiOiIiLHcuZW52TWFwPyIjZGVmaW5lIFVTRV9FTlZNQVAiOiIiLHcuZW52TWFwPyIjZGVmaW5lICIrVzoiIix3LmxpZ2h0TWFwPyIjZGVmaW5lIFVTRV9MSUdIVE1BUCI6IiIsdy5hb01hcD8iI2RlZmluZSBVU0VfQU9NQVAiOiIiLHcuZW1pc3NpdmVNYXA/IiNkZWZpbmUgVVNFX0VNSVNTSVZFTUFQIjoiIix3LmJ1bXBNYXA/IiNkZWZpbmUgVVNFX0JVTVBNQVAiOiIiLHcubm9ybWFsTWFwPyIjZGVmaW5lIFVTRV9OT1JNQUxNQVAiOiIiLHcubm9ybWFsTWFwJiZ3Lm9iamVjdFNwYWNlTm9ybWFsTWFwPyIjZGVmaW5lIE9CSkVDVFNQQUNFX05PUk1BTE1BUCI6IiIsdy5kaXNwbGFjZW1lbnRNYXAmJncuc3VwcG9ydHNWZXJ0ZXhUZXh0dXJlcz8iI2RlZmluZSBVU0VfRElTUExBQ0VNRU5UTUFQIjoiIix3LnNwZWN1bGFyTWFwPyIjZGVmaW5lIFVTRV9TUEVDVUxBUk1BUCI6IiIsdy5yb3VnaG5lc3NNYXA/IiNkZWZpbmUgVVNFX1JPVUdITkVTU01BUCI6CiIiLHcubWV0YWxuZXNzTWFwPyIjZGVmaW5lIFVTRV9NRVRBTE5FU1NNQVAiOiIiLHcuYWxwaGFNYXA/IiNkZWZpbmUgVVNFX0FMUEhBTUFQIjoiIix3LnZlcnRleFRhbmdlbnRzPyIjZGVmaW5lIFVTRV9UQU5HRU5UIjoiIix3LnZlcnRleENvbG9ycz8iI2RlZmluZSBVU0VfQ09MT1IiOiIiLHcuZmxhdFNoYWRpbmc/IiNkZWZpbmUgRkxBVF9TSEFERUQiOiIiLHcuc2tpbm5pbmc/IiNkZWZpbmUgVVNFX1NLSU5OSU5HIjoiIix3LnVzZVZlcnRleFRleHR1cmU/IiNkZWZpbmUgQk9ORV9URVhUVVJFIjoiIix3Lm1vcnBoVGFyZ2V0cz8iI2RlZmluZSBVU0VfTU9SUEhUQVJHRVRTIjoiIix3Lm1vcnBoTm9ybWFscyYmITE9PT13LmZsYXRTaGFkaW5nPyIjZGVmaW5lIFVTRV9NT1JQSE5PUk1BTFMiOiIiLHcuZG91YmxlU2lkZWQ/IiNkZWZpbmUgRE9VQkxFX1NJREVEIjoiIix3LmZsaXBTaWRlZD8iI2RlZmluZSBGTElQX1NJREVEIjoiIix3LnNoYWRvd01hcEVuYWJsZWQ/IiNkZWZpbmUgVVNFX1NIQURPV01BUCI6CiIiLHcuc2hhZG93TWFwRW5hYmxlZD8iI2RlZmluZSAiK1I6IiIsdy5zaXplQXR0ZW51YXRpb24/IiNkZWZpbmUgVVNFX1NJWkVBVFRFTlVBVElPTiI6IiIsdy5sb2dhcml0aG1pY0RlcHRoQnVmZmVyPyIjZGVmaW5lIFVTRV9MT0dERVBUSEJVRiI6IiIsdy5sb2dhcml0aG1pY0RlcHRoQnVmZmVyJiYoei5pc1dlYkdMMnx8ZS5nZXQoIkVYVF9mcmFnX2RlcHRoIikpPyIjZGVmaW5lIFVTRV9MT0dERVBUSEJVRl9FWFQiOiIiLCJ1bmlmb3JtIG1hdDQgbW9kZWxNYXRyaXg7IiwidW5pZm9ybSBtYXQ0IG1vZGVsVmlld01hdHJpeDsiLCJ1bmlmb3JtIG1hdDQgcHJvamVjdGlvbk1hdHJpeDsiLCJ1bmlmb3JtIG1hdDQgdmlld01hdHJpeDsiLCJ1bmlmb3JtIG1hdDMgbm9ybWFsTWF0cml4OyIsInVuaWZvcm0gdmVjMyBjYW1lcmFQb3NpdGlvbjsiLCJhdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjsiLCJhdHRyaWJ1dGUgdmVjMyBub3JtYWw7IiwiYXR0cmlidXRlIHZlYzIgdXY7IiwiI2lmZGVmIFVTRV9UQU5HRU5UIiwKIlx0YXR0cmlidXRlIHZlYzQgdGFuZ2VudDsiLCIjZW5kaWYiLCIjaWZkZWYgVVNFX0NPTE9SIiwiXHRhdHRyaWJ1dGUgdmVjMyBjb2xvcjsiLCIjZW5kaWYiLCIjaWZkZWYgVVNFX01PUlBIVEFSR0VUUyIsIlx0YXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQwOyIsIlx0YXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQxOyIsIlx0YXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQyOyIsIlx0YXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQzOyIsIlx0I2lmZGVmIFVTRV9NT1JQSE5PUk1BTFMiLCJcdFx0YXR0cmlidXRlIHZlYzMgbW9ycGhOb3JtYWwwOyIsIlx0XHRhdHRyaWJ1dGUgdmVjMyBtb3JwaE5vcm1hbDE7IiwiXHRcdGF0dHJpYnV0ZSB2ZWMzIG1vcnBoTm9ybWFsMjsiLCJcdFx0YXR0cmlidXRlIHZlYzMgbW9ycGhOb3JtYWwzOyIsIlx0I2Vsc2UiLCJcdFx0YXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQ0OyIsIlx0XHRhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDU7IiwiXHRcdGF0dHJpYnV0ZSB2ZWMzIG1vcnBoVGFyZ2V0NjsiLAoiXHRcdGF0dHJpYnV0ZSB2ZWMzIG1vcnBoVGFyZ2V0NzsiLCJcdCNlbmRpZiIsIiNlbmRpZiIsIiNpZmRlZiBVU0VfU0tJTk5JTkciLCJcdGF0dHJpYnV0ZSB2ZWM0IHNraW5JbmRleDsiLCJcdGF0dHJpYnV0ZSB2ZWM0IHNraW5XZWlnaHQ7IiwiI2VuZGlmIiwiXG4iXS5maWx0ZXIoT2YpLmpvaW4oIlxuIiksZT1bcWEsInByZWNpc2lvbiAiK3cucHJlY2lzaW9uKyIgZmxvYXQ7IiwicHJlY2lzaW9uICIrdy5wcmVjaXNpb24rIiBpbnQ7IiwiI2RlZmluZSBTSEFERVJfTkFNRSAiK3UubmFtZSxyYSx3LmFscGhhVGVzdD8iI2RlZmluZSBBTFBIQVRFU1QgIit3LmFscGhhVGVzdCsody5hbHBoYVRlc3QlMT8iIjoiLjAiKToiIiwiI2RlZmluZSBHQU1NQV9GQUNUT1IgIitmYSx3LnVzZUZvZyYmdy5mb2c/IiNkZWZpbmUgVVNFX0ZPRyI6IiIsdy51c2VGb2cmJncuZm9nRXhwPyIjZGVmaW5lIEZPR19FWFAyIjoiIix3Lm1hcD8iI2RlZmluZSBVU0VfTUFQIjoiIix3Lm1hdGNhcD8iI2RlZmluZSBVU0VfTUFUQ0FQIjoKIiIsdy5lbnZNYXA/IiNkZWZpbmUgVVNFX0VOVk1BUCI6IiIsdy5lbnZNYXA/IiNkZWZpbmUgIitVOiIiLHcuZW52TWFwPyIjZGVmaW5lICIrVzoiIix3LmVudk1hcD8iI2RlZmluZSAiK1o6IiIsdy5saWdodE1hcD8iI2RlZmluZSBVU0VfTElHSFRNQVAiOiIiLHcuYW9NYXA/IiNkZWZpbmUgVVNFX0FPTUFQIjoiIix3LmVtaXNzaXZlTWFwPyIjZGVmaW5lIFVTRV9FTUlTU0lWRU1BUCI6IiIsdy5idW1wTWFwPyIjZGVmaW5lIFVTRV9CVU1QTUFQIjoiIix3Lm5vcm1hbE1hcD8iI2RlZmluZSBVU0VfTk9STUFMTUFQIjoiIix3Lm5vcm1hbE1hcCYmdy5vYmplY3RTcGFjZU5vcm1hbE1hcD8iI2RlZmluZSBPQkpFQ1RTUEFDRV9OT1JNQUxNQVAiOiIiLHcuc3BlY3VsYXJNYXA/IiNkZWZpbmUgVVNFX1NQRUNVTEFSTUFQIjoiIix3LnJvdWdobmVzc01hcD8iI2RlZmluZSBVU0VfUk9VR0hORVNTTUFQIjoiIix3Lm1ldGFsbmVzc01hcD8iI2RlZmluZSBVU0VfTUVUQUxORVNTTUFQIjoiIix3LmFscGhhTWFwPwoiI2RlZmluZSBVU0VfQUxQSEFNQVAiOiIiLHcudmVydGV4VGFuZ2VudHM/IiNkZWZpbmUgVVNFX1RBTkdFTlQiOiIiLHcudmVydGV4Q29sb3JzPyIjZGVmaW5lIFVTRV9DT0xPUiI6IiIsdy5ncmFkaWVudE1hcD8iI2RlZmluZSBVU0VfR1JBRElFTlRNQVAiOiIiLHcuZmxhdFNoYWRpbmc/IiNkZWZpbmUgRkxBVF9TSEFERUQiOiIiLHcuZG91YmxlU2lkZWQ/IiNkZWZpbmUgRE9VQkxFX1NJREVEIjoiIix3LmZsaXBTaWRlZD8iI2RlZmluZSBGTElQX1NJREVEIjoiIix3LnNoYWRvd01hcEVuYWJsZWQ/IiNkZWZpbmUgVVNFX1NIQURPV01BUCI6IiIsdy5zaGFkb3dNYXBFbmFibGVkPyIjZGVmaW5lICIrUjoiIix3LnByZW11bHRpcGxpZWRBbHBoYT8iI2RlZmluZSBQUkVNVUxUSVBMSUVEX0FMUEhBIjoiIix3LnBoeXNpY2FsbHlDb3JyZWN0TGlnaHRzPyIjZGVmaW5lIFBIWVNJQ0FMTFlfQ09SUkVDVF9MSUdIVFMiOiIiLHcubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlcj8iI2RlZmluZSBVU0VfTE9HREVQVEhCVUYiOgoiIix3LmxvZ2FyaXRobWljRGVwdGhCdWZmZXImJih6LmlzV2ViR0wyfHxlLmdldCgiRVhUX2ZyYWdfZGVwdGgiKSk/IiNkZWZpbmUgVVNFX0xPR0RFUFRIQlVGX0VYVCI6IiIsdy5lbnZNYXAmJih6LmlzV2ViR0wyfHxlLmdldCgiRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCIpKT8iI2RlZmluZSBURVhUVVJFX0xPRF9FWFQiOiIiLCJ1bmlmb3JtIG1hdDQgdmlld01hdHJpeDsiLCJ1bmlmb3JtIHZlYzMgY2FtZXJhUG9zaXRpb247IiwwIT09dy50b25lTWFwcGluZz8iI2RlZmluZSBUT05FX01BUFBJTkciOiIiLDAhPT13LnRvbmVNYXBwaW5nP3piLnRvbmVtYXBwaW5nX3BhcnNfZnJhZ21lbnQ6IiIsMCE9PXcudG9uZU1hcHBpbmc/dG8oInRvbmVNYXBwaW5nIix3LnRvbmVNYXBwaW5nKToiIix3LmRpdGhlcmluZz8iI2RlZmluZSBESVRIRVJJTkciOiIiLHcub3V0cHV0RW5jb2Rpbmd8fHcubWFwRW5jb2Rpbmd8fHcubWF0Y2FwRW5jb2Rpbmd8fHcuZW52TWFwRW5jb2Rpbmd8fHcuZW1pc3NpdmVNYXBFbmNvZGluZz8KemIuZW5jb2RpbmdzX3BhcnNfZnJhZ21lbnQ6IiIsdy5tYXBFbmNvZGluZz9haCgibWFwVGV4ZWxUb0xpbmVhciIsdy5tYXBFbmNvZGluZyk6IiIsdy5tYXRjYXBFbmNvZGluZz9haCgibWF0Y2FwVGV4ZWxUb0xpbmVhciIsdy5tYXRjYXBFbmNvZGluZyk6IiIsdy5lbnZNYXBFbmNvZGluZz9haCgiZW52TWFwVGV4ZWxUb0xpbmVhciIsdy5lbnZNYXBFbmNvZGluZyk6IiIsdy5lbWlzc2l2ZU1hcEVuY29kaW5nP2FoKCJlbWlzc2l2ZU1hcFRleGVsVG9MaW5lYXIiLHcuZW1pc3NpdmVNYXBFbmNvZGluZyk6IiIsdy5vdXRwdXRFbmNvZGluZz9zbygibGluZWFyVG9PdXRwdXRUZXhlbCIsdy5vdXRwdXRFbmNvZGluZyk6IiIsdy5kZXB0aFBhY2tpbmc/IiNkZWZpbmUgREVQVEhfUEFDS0lORyAiK24uZGVwdGhQYWNraW5nOiIiLCJcbiJdLmZpbHRlcihPZikuam9pbigiXG4iKSk7Tz1zaShPKTtPPWhsKE8sdyk7Tz1pbChPLHcpO1E9c2koUSk7UT1obChRLHcpO1E9aWwoUSx3KTtPPWpsKE8pOwpRPWpsKFEpO3ouaXNXZWJHTDImJiFuLmlzUmF3U2hhZGVyTWF0ZXJpYWwmJih6PSExLFI9L15ccyojdmVyc2lvblxzKzMwMFxzK2VzXHMqXG4vLG4uaXNTaGFkZXJNYXRlcmlhbCYmbnVsbCE9PU8ubWF0Y2goUikmJm51bGwhPT1RLm1hdGNoKFIpJiYoej0hMCxPPU8ucmVwbGFjZShSLCIiKSxRPVEucmVwbGFjZShSLCIiKSksST0iI3ZlcnNpb24gMzAwIGVzXG5cbiNkZWZpbmUgYXR0cmlidXRlIGluXG4jZGVmaW5lIHZhcnlpbmcgb3V0XG4jZGVmaW5lIHRleHR1cmUyRCB0ZXh0dXJlXG4iK0ksZT1bIiN2ZXJzaW9uIDMwMCBlc1xuXG4jZGVmaW5lIHZhcnlpbmcgaW4iLHo/IiI6Im91dCBoaWdocCB2ZWM0IHBjX2ZyYWdDb2xvcjsiLHo/IiI6IiNkZWZpbmUgZ2xfRnJhZ0NvbG9yIHBjX2ZyYWdDb2xvciIsIiNkZWZpbmUgZ2xfRnJhZ0RlcHRoRVhUIGdsX0ZyYWdEZXB0aFxuI2RlZmluZSB0ZXh0dXJlMkQgdGV4dHVyZVxuI2RlZmluZSB0ZXh0dXJlQ3ViZSB0ZXh0dXJlXG4jZGVmaW5lIHRleHR1cmUyRFByb2ogdGV4dHVyZVByb2pcbiNkZWZpbmUgdGV4dHVyZTJETG9kRVhUIHRleHR1cmVMb2RcbiNkZWZpbmUgdGV4dHVyZTJEUHJvakxvZEVYVCB0ZXh0dXJlUHJvakxvZFxuI2RlZmluZSB0ZXh0dXJlQ3ViZUxvZEVYVCB0ZXh0dXJlTG9kXG4jZGVmaW5lIHRleHR1cmUyREdyYWRFWFQgdGV4dHVyZUdyYWRcbiNkZWZpbmUgdGV4dHVyZTJEUHJvakdyYWRFWFQgdGV4dHVyZVByb2pHcmFkXG4jZGVmaW5lIHRleHR1cmVDdWJlR3JhZEVYVCB0ZXh0dXJlR3JhZCJdLmpvaW4oIlxuIikrCiJcbiIrZSk7UT1lK1E7Tz1mbChILDM1NjMzLEkrTyxiLmRlYnVnLmNoZWNrU2hhZGVyRXJyb3JzKTtRPWZsKEgsMzU2MzIsUSxiLmRlYnVnLmNoZWNrU2hhZGVyRXJyb3JzKTtILmF0dGFjaFNoYWRlcihpYSxPKTtILmF0dGFjaFNoYWRlcihpYSxRKTt2b2lkIDAhPT1uLmluZGV4MEF0dHJpYnV0ZU5hbWU/SC5iaW5kQXR0cmliTG9jYXRpb24oaWEsMCxuLmluZGV4MEF0dHJpYnV0ZU5hbWUpOiEwPT09dy5tb3JwaFRhcmdldHMmJkguYmluZEF0dHJpYkxvY2F0aW9uKGlhLDAsInBvc2l0aW9uIik7SC5saW5rUHJvZ3JhbShpYSk7aWYoYi5kZWJ1Zy5jaGVja1NoYWRlckVycm9ycyl7Yj1ILmdldFByb2dyYW1JbmZvTG9nKGlhKS50cmltKCk7dz1ILmdldFNoYWRlckluZm9Mb2coTykudHJpbSgpO3o9SC5nZXRTaGFkZXJJbmZvTG9nKFEpLnRyaW0oKTtVPVI9ITA7aWYoITE9PT1ILmdldFByb2dyYW1QYXJhbWV0ZXIoaWEsMzU3MTQpKVI9ITEsY29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xQcm9ncmFtOiBzaGFkZXIgZXJyb3I6ICIsCkguZ2V0RXJyb3IoKSwiMzU3MTUiLEguZ2V0UHJvZ3JhbVBhcmFtZXRlcihpYSwzNTcxNSksImdsLmdldFByb2dyYW1JbmZvTG9nIixiLHcseik7ZWxzZSBpZigiIiE9PWIpY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFByb2dyYW06IGdsLmdldFByb2dyYW1JbmZvTG9nKCkiLGIpO2Vsc2UgaWYoIiI9PT13fHwiIj09PXopVT0hMTtVJiYodGhpcy5kaWFnbm9zdGljcz17cnVubmFibGU6UixtYXRlcmlhbDpuLHByb2dyYW1Mb2c6Yix2ZXJ0ZXhTaGFkZXI6e2xvZzp3LHByZWZpeDpJfSxmcmFnbWVudFNoYWRlcjp7bG9nOnoscHJlZml4OmV9fSl9SC5kZWxldGVTaGFkZXIoTyk7SC5kZWxldGVTaGFkZXIoUSk7dmFyIHRhO3RoaXMuZ2V0VW5pZm9ybXM9ZnVuY3Rpb24oKXt2b2lkIDA9PT10YSYmKHRhPW5ldyBPZChILGlhLEUpKTtyZXR1cm4gdGF9O3ZhciBuYTt0aGlzLmdldEF0dHJpYnV0ZXM9ZnVuY3Rpb24oKXt2b2lkIDA9PT1uYSYmKG5hPXdvKEgsaWEpKTtyZXR1cm4gbmF9O3RoaXMuZGVzdHJveT0KZnVuY3Rpb24oKXtILmRlbGV0ZVByb2dyYW0oaWEpO3RoaXMucHJvZ3JhbT12b2lkIDB9O09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRoaXMse3VuaWZvcm1zOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUHJvZ3JhbTogLnVuaWZvcm1zIGlzIG5vdyAuZ2V0VW5pZm9ybXMoKS4iKTtyZXR1cm4gdGhpcy5nZXRVbmlmb3JtcygpfX0sYXR0cmlidXRlczp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFByb2dyYW06IC5hdHRyaWJ1dGVzIGlzIG5vdyAuZ2V0QXR0cmlidXRlcygpLiIpO3JldHVybiB0aGlzLmdldEF0dHJpYnV0ZXMoKX19fSk7dGhpcy5uYW1lPXUubmFtZTt0aGlzLmlkPXlvKys7dGhpcy5jb2RlPWg7dGhpcy51c2VkVGltZXM9MTt0aGlzLnByb2dyYW09aWE7dGhpcy52ZXJ0ZXhTaGFkZXI9Tzt0aGlzLmZyYWdtZW50U2hhZGVyPVE7cmV0dXJuIHRoaXN9ZnVuY3Rpb24gem8oYixlLGgsbil7ZnVuY3Rpb24gdShJKXtJPQpJLnNrZWxldG9uLmJvbmVzO2lmKGguZmxvYXRWZXJ0ZXhUZXh0dXJlcylyZXR1cm4gMTAyNDt2YXIgTz1NYXRoLm1pbihNYXRoLmZsb29yKChoLm1heFZlcnRleFVuaWZvcm1zLTIwKS80KSxJLmxlbmd0aCk7cmV0dXJuIE88SS5sZW5ndGg/KGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogU2tlbGV0b24gaGFzICIrSS5sZW5ndGgrIiBib25lcy4gVGhpcyBHUFUgc3VwcG9ydHMgIitPKyIuIiksMCk6T31mdW5jdGlvbiB3KEksTyl7aWYoSSlJLmlzVGV4dHVyZT9RPUkuZW5jb2Rpbmc6SS5pc1dlYkdMUmVuZGVyVGFyZ2V0JiYoY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFByb2dyYW1zLmdldFRleHR1cmVFbmNvZGluZ0Zyb21NYXA6IGRvbid0IHVzZSByZW5kZXIgdGFyZ2V0cyBhcyB0ZXh0dXJlcy4gVXNlIHRoZWlyIC50ZXh0dXJlIHByb3BlcnR5IGluc3RlYWQuIiksUT1JLnRleHR1cmUuZW5jb2RpbmcpO2Vsc2UgdmFyIFE9M0UzOzNFMz09PVEmJk8mJihRPTMwMDcpOwpyZXR1cm4gUX12YXIgej1bXSxFPXtNZXNoRGVwdGhNYXRlcmlhbDoiZGVwdGgiLE1lc2hEaXN0YW5jZU1hdGVyaWFsOiJkaXN0YW5jZVJHQkEiLE1lc2hOb3JtYWxNYXRlcmlhbDoibm9ybWFsIixNZXNoQmFzaWNNYXRlcmlhbDoiYmFzaWMiLE1lc2hMYW1iZXJ0TWF0ZXJpYWw6ImxhbWJlcnQiLE1lc2hQaG9uZ01hdGVyaWFsOiJwaG9uZyIsTWVzaFRvb25NYXRlcmlhbDoicGhvbmciLE1lc2hTdGFuZGFyZE1hdGVyaWFsOiJwaHlzaWNhbCIsTWVzaFBoeXNpY2FsTWF0ZXJpYWw6InBoeXNpY2FsIixNZXNoTWF0Y2FwTWF0ZXJpYWw6Im1hdGNhcCIsTGluZUJhc2ljTWF0ZXJpYWw6ImJhc2ljIixMaW5lRGFzaGVkTWF0ZXJpYWw6ImRhc2hlZCIsUG9pbnRzTWF0ZXJpYWw6InBvaW50cyIsU2hhZG93TWF0ZXJpYWw6InNoYWRvdyIsU3ByaXRlTWF0ZXJpYWw6InNwcml0ZSJ9LEg9InByZWNpc2lvbiBzdXBwb3J0c1ZlcnRleFRleHR1cmVzIG1hcCBtYXBFbmNvZGluZyBtYXRjYXAgbWF0Y2FwRW5jb2RpbmcgZW52TWFwIGVudk1hcE1vZGUgZW52TWFwRW5jb2RpbmcgbGlnaHRNYXAgYW9NYXAgZW1pc3NpdmVNYXAgZW1pc3NpdmVNYXBFbmNvZGluZyBidW1wTWFwIG5vcm1hbE1hcCBvYmplY3RTcGFjZU5vcm1hbE1hcCBkaXNwbGFjZW1lbnRNYXAgc3BlY3VsYXJNYXAgcm91Z2huZXNzTWFwIG1ldGFsbmVzc01hcCBncmFkaWVudE1hcCBhbHBoYU1hcCBjb21iaW5lIHZlcnRleENvbG9ycyB2ZXJ0ZXhUYW5nZW50cyBmb2cgdXNlRm9nIGZvZ0V4cCBmbGF0U2hhZGluZyBzaXplQXR0ZW51YXRpb24gbG9nYXJpdGhtaWNEZXB0aEJ1ZmZlciBza2lubmluZyBtYXhCb25lcyB1c2VWZXJ0ZXhUZXh0dXJlIG1vcnBoVGFyZ2V0cyBtb3JwaE5vcm1hbHMgbWF4TW9ycGhUYXJnZXRzIG1heE1vcnBoTm9ybWFscyBwcmVtdWx0aXBsaWVkQWxwaGEgbnVtRGlyTGlnaHRzIG51bVBvaW50TGlnaHRzIG51bVNwb3RMaWdodHMgbnVtSGVtaUxpZ2h0cyBudW1SZWN0QXJlYUxpZ2h0cyBzaGFkb3dNYXBFbmFibGVkIHNoYWRvd01hcFR5cGUgdG9uZU1hcHBpbmcgcGh5c2ljYWxseUNvcnJlY3RMaWdodHMgYWxwaGFUZXN0IGRvdWJsZVNpZGVkIGZsaXBTaWRlZCBudW1DbGlwcGluZ1BsYW5lcyBudW1DbGlwSW50ZXJzZWN0aW9uIGRlcHRoUGFja2luZyBkaXRoZXJpbmciLnNwbGl0KCIgIik7CnRoaXMuZ2V0UGFyYW1ldGVycz1mdW5jdGlvbihJLE8sUSxSLFUsVyxaKXt2YXIgZmE9RVtJLnR5cGVdLHFhPVouaXNTa2lubmVkTWVzaD91KFopOjAscmE9aC5wcmVjaXNpb247bnVsbCE9PUkucHJlY2lzaW9uJiYocmE9aC5nZXRNYXhQcmVjaXNpb24oSS5wcmVjaXNpb24pLHJhIT09SS5wcmVjaXNpb24mJmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xQcm9ncmFtLmdldFBhcmFtZXRlcnM6IixJLnByZWNpc2lvbiwibm90IHN1cHBvcnRlZCwgdXNpbmciLHJhLCJpbnN0ZWFkLiIpKTt2YXIgaWE9Yi5nZXRSZW5kZXJUYXJnZXQoKTtyZXR1cm57c2hhZGVySUQ6ZmEscHJlY2lzaW9uOnJhLHN1cHBvcnRzVmVydGV4VGV4dHVyZXM6aC52ZXJ0ZXhUZXh0dXJlcyxvdXRwdXRFbmNvZGluZzp3KGlhP2lhLnRleHR1cmU6bnVsbCxiLmdhbW1hT3V0cHV0KSxtYXA6ISFJLm1hcCxtYXBFbmNvZGluZzp3KEkubWFwLGIuZ2FtbWFJbnB1dCksbWF0Y2FwOiEhSS5tYXRjYXAsbWF0Y2FwRW5jb2Rpbmc6dyhJLm1hdGNhcCwKYi5nYW1tYUlucHV0KSxlbnZNYXA6ISFJLmVudk1hcCxlbnZNYXBNb2RlOkkuZW52TWFwJiZJLmVudk1hcC5tYXBwaW5nLGVudk1hcEVuY29kaW5nOncoSS5lbnZNYXAsYi5nYW1tYUlucHV0KSxlbnZNYXBDdWJlVVY6ISFJLmVudk1hcCYmKDMwNj09PUkuZW52TWFwLm1hcHBpbmd8fDMwNz09PUkuZW52TWFwLm1hcHBpbmcpLGxpZ2h0TWFwOiEhSS5saWdodE1hcCxhb01hcDohIUkuYW9NYXAsZW1pc3NpdmVNYXA6ISFJLmVtaXNzaXZlTWFwLGVtaXNzaXZlTWFwRW5jb2Rpbmc6dyhJLmVtaXNzaXZlTWFwLGIuZ2FtbWFJbnB1dCksYnVtcE1hcDohIUkuYnVtcE1hcCxub3JtYWxNYXA6ISFJLm5vcm1hbE1hcCxvYmplY3RTcGFjZU5vcm1hbE1hcDoxPT09SS5ub3JtYWxNYXBUeXBlLGRpc3BsYWNlbWVudE1hcDohIUkuZGlzcGxhY2VtZW50TWFwLHJvdWdobmVzc01hcDohIUkucm91Z2huZXNzTWFwLG1ldGFsbmVzc01hcDohIUkubWV0YWxuZXNzTWFwLHNwZWN1bGFyTWFwOiEhSS5zcGVjdWxhck1hcCwKYWxwaGFNYXA6ISFJLmFscGhhTWFwLGdyYWRpZW50TWFwOiEhSS5ncmFkaWVudE1hcCxjb21iaW5lOkkuY29tYmluZSx2ZXJ0ZXhUYW5nZW50czpJLm5vcm1hbE1hcCYmSS52ZXJ0ZXhUYW5nZW50cyx2ZXJ0ZXhDb2xvcnM6SS52ZXJ0ZXhDb2xvcnMsZm9nOiEhUix1c2VGb2c6SS5mb2csZm9nRXhwOlImJlIuaXNGb2dFeHAyLGZsYXRTaGFkaW5nOkkuZmxhdFNoYWRpbmcsc2l6ZUF0dGVudWF0aW9uOkkuc2l6ZUF0dGVudWF0aW9uLGxvZ2FyaXRobWljRGVwdGhCdWZmZXI6aC5sb2dhcml0aG1pY0RlcHRoQnVmZmVyLHNraW5uaW5nOkkuc2tpbm5pbmcmJjA8cWEsbWF4Qm9uZXM6cWEsdXNlVmVydGV4VGV4dHVyZTpoLmZsb2F0VmVydGV4VGV4dHVyZXMsbW9ycGhUYXJnZXRzOkkubW9ycGhUYXJnZXRzLG1vcnBoTm9ybWFsczpJLm1vcnBoTm9ybWFscyxtYXhNb3JwaFRhcmdldHM6Yi5tYXhNb3JwaFRhcmdldHMsbWF4TW9ycGhOb3JtYWxzOmIubWF4TW9ycGhOb3JtYWxzLG51bURpckxpZ2h0czpPLmRpcmVjdGlvbmFsLmxlbmd0aCwKbnVtUG9pbnRMaWdodHM6Ty5wb2ludC5sZW5ndGgsbnVtU3BvdExpZ2h0czpPLnNwb3QubGVuZ3RoLG51bVJlY3RBcmVhTGlnaHRzOk8ucmVjdEFyZWEubGVuZ3RoLG51bUhlbWlMaWdodHM6Ty5oZW1pLmxlbmd0aCxudW1DbGlwcGluZ1BsYW5lczpVLG51bUNsaXBJbnRlcnNlY3Rpb246VyxkaXRoZXJpbmc6SS5kaXRoZXJpbmcsc2hhZG93TWFwRW5hYmxlZDpiLnNoYWRvd01hcC5lbmFibGVkJiZaLnJlY2VpdmVTaGFkb3cmJjA8US5sZW5ndGgsc2hhZG93TWFwVHlwZTpiLnNoYWRvd01hcC50eXBlLHRvbmVNYXBwaW5nOmIudG9uZU1hcHBpbmcscGh5c2ljYWxseUNvcnJlY3RMaWdodHM6Yi5waHlzaWNhbGx5Q29ycmVjdExpZ2h0cyxwcmVtdWx0aXBsaWVkQWxwaGE6SS5wcmVtdWx0aXBsaWVkQWxwaGEsYWxwaGFUZXN0OkkuYWxwaGFUZXN0LGRvdWJsZVNpZGVkOjI9PT1JLnNpZGUsZmxpcFNpZGVkOjE9PT1JLnNpZGUsZGVwdGhQYWNraW5nOnZvaWQgMCE9PUkuZGVwdGhQYWNraW5nPwpJLmRlcHRoUGFja2luZzohMX19O3RoaXMuZ2V0UHJvZ3JhbUNvZGU9ZnVuY3Rpb24oSSxPKXt2YXIgUT1bXTtPLnNoYWRlcklEP1EucHVzaChPLnNoYWRlcklEKTooUS5wdXNoKEkuZnJhZ21lbnRTaGFkZXIpLFEucHVzaChJLnZlcnRleFNoYWRlcikpO2lmKHZvaWQgMCE9PUkuZGVmaW5lcylmb3IodmFyIFIgaW4gSS5kZWZpbmVzKVEucHVzaChSKSxRLnB1c2goSS5kZWZpbmVzW1JdKTtmb3IoUj0wO1I8SC5sZW5ndGg7UisrKVEucHVzaChPW0hbUl1dKTtRLnB1c2goSS5vbkJlZm9yZUNvbXBpbGUudG9TdHJpbmcoKSk7US5wdXNoKGIuZ2FtbWFPdXRwdXQpO1EucHVzaChiLmdhbW1hRmFjdG9yKTtyZXR1cm4gUS5qb2luKCl9O3RoaXMuYWNxdWlyZVByb2dyYW09ZnVuY3Rpb24oSSxPLFEsUil7Zm9yKHZhciBVLFc9MCxaPXoubGVuZ3RoO1c8WjtXKyspe3ZhciBmYT16W1ddO2lmKGZhLmNvZGU9PT1SKXtVPWZhOysrVS51c2VkVGltZXM7YnJlYWt9fXZvaWQgMD09PVUmJihVPW5ldyB4byhiLAplLFIsSSxPLFEsaCxuKSx6LnB1c2goVSkpO3JldHVybiBVfTt0aGlzLnJlbGVhc2VQcm9ncmFtPWZ1bmN0aW9uKEkpezA9PT0tLUkudXNlZFRpbWVzJiYoelt6LmluZGV4T2YoSSldPXpbei5sZW5ndGgtMV0sei5wb3AoKSxJLmRlc3Ryb3koKSl9O3RoaXMucHJvZ3JhbXM9en1mdW5jdGlvbiBBbygpe3ZhciBiPW5ldyBXZWFrTWFwO3JldHVybntnZXQ6ZnVuY3Rpb24oZSl7dmFyIGg9Yi5nZXQoZSk7dm9pZCAwPT09aCYmKGg9e30sYi5zZXQoZSxoKSk7cmV0dXJuIGh9LHJlbW92ZTpmdW5jdGlvbihlKXtiLmRlbGV0ZShlKX0sdXBkYXRlOmZ1bmN0aW9uKGUsaCxuKXtiLmdldChlKVtoXT1ufSxkaXNwb3NlOmZ1bmN0aW9uKCl7Yj1uZXcgV2Vha01hcH19fWZ1bmN0aW9uIEJvKGIsZSl7cmV0dXJuIGIuZ3JvdXBPcmRlciE9PWUuZ3JvdXBPcmRlcj9iLmdyb3VwT3JkZXItZS5ncm91cE9yZGVyOmIucmVuZGVyT3JkZXIhPT1lLnJlbmRlck9yZGVyP2IucmVuZGVyT3JkZXItZS5yZW5kZXJPcmRlcjoKYi5wcm9ncmFtIT09ZS5wcm9ncmFtP2IucHJvZ3JhbS5pZC1lLnByb2dyYW0uaWQ6Yi5tYXRlcmlhbC5pZCE9PWUubWF0ZXJpYWwuaWQ/Yi5tYXRlcmlhbC5pZC1lLm1hdGVyaWFsLmlkOmIueiE9PWUuej9iLnotZS56OmIuaWQtZS5pZH1mdW5jdGlvbiBDbyhiLGUpe3JldHVybiBiLmdyb3VwT3JkZXIhPT1lLmdyb3VwT3JkZXI/Yi5ncm91cE9yZGVyLWUuZ3JvdXBPcmRlcjpiLnJlbmRlck9yZGVyIT09ZS5yZW5kZXJPcmRlcj9iLnJlbmRlck9yZGVyLWUucmVuZGVyT3JkZXI6Yi56IT09ZS56P2Uuei1iLno6Yi5pZC1lLmlkfWZ1bmN0aW9uIGtsKCl7ZnVuY3Rpb24gYih6LEUsSCxJLE8sUSl7dmFyIFI9ZVtoXTt2b2lkIDA9PT1SPyhSPXtpZDp6LmlkLG9iamVjdDp6LGdlb21ldHJ5OkUsbWF0ZXJpYWw6SCxwcm9ncmFtOkgucHJvZ3JhbXx8dyxncm91cE9yZGVyOkkscmVuZGVyT3JkZXI6ei5yZW5kZXJPcmRlcix6Ok8sZ3JvdXA6UX0sZVtoXT1SKTooUi5pZD16LmlkLFIub2JqZWN0PQp6LFIuZ2VvbWV0cnk9RSxSLm1hdGVyaWFsPUgsUi5wcm9ncmFtPUgucHJvZ3JhbXx8dyxSLmdyb3VwT3JkZXI9SSxSLnJlbmRlck9yZGVyPXoucmVuZGVyT3JkZXIsUi56PU8sUi5ncm91cD1RKTtoKys7cmV0dXJuIFJ9dmFyIGU9W10saD0wLG49W10sdT1bXSx3PXtpZDotMX07cmV0dXJue29wYXF1ZTpuLHRyYW5zcGFyZW50OnUsaW5pdDpmdW5jdGlvbigpe2g9MDtuLmxlbmd0aD0wO3UubGVuZ3RoPTB9LHB1c2g6ZnVuY3Rpb24oeixFLEgsSSxPLFEpe3o9Yih6LEUsSCxJLE8sUSk7KCEwPT09SC50cmFuc3BhcmVudD91Om4pLnB1c2goeil9LHVuc2hpZnQ6ZnVuY3Rpb24oeixFLEgsSSxPLFEpe3o9Yih6LEUsSCxJLE8sUSk7KCEwPT09SC50cmFuc3BhcmVudD91Om4pLnVuc2hpZnQoeil9LHNvcnQ6ZnVuY3Rpb24oKXsxPG4ubGVuZ3RoJiZuLnNvcnQoQm8pOzE8dS5sZW5ndGgmJnUuc29ydChDbyl9fX1mdW5jdGlvbiBEbygpe2Z1bmN0aW9uIGIoaCl7aD1oLnRhcmdldDtoLnJlbW92ZUV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLApiKTtkZWxldGUgZVtoLmlkXX12YXIgZT17fTtyZXR1cm57Z2V0OmZ1bmN0aW9uKGgsbil7dmFyIHU9ZVtoLmlkXTtpZih2b2lkIDA9PT11KXt2YXIgdz1uZXcga2w7ZVtoLmlkXT17fTtlW2guaWRdW24uaWRdPXc7aC5hZGRFdmVudExpc3RlbmVyKCJkaXNwb3NlIixiKX1lbHNlIHc9dVtuLmlkXSx2b2lkIDA9PT13JiYodz1uZXcga2wsdVtuLmlkXT13KTtyZXR1cm4gd30sZGlzcG9zZTpmdW5jdGlvbigpe2U9e319fX1mdW5jdGlvbiBFbygpe3ZhciBiPXt9O3JldHVybntnZXQ6ZnVuY3Rpb24oZSl7aWYodm9pZCAwIT09YltlLmlkXSlyZXR1cm4gYltlLmlkXTtzd2l0Y2goZS50eXBlKXtjYXNlICJEaXJlY3Rpb25hbExpZ2h0Ijp2YXIgaD17ZGlyZWN0aW9uOm5ldyBnLGNvbG9yOm5ldyBCLHNoYWRvdzohMSxzaGFkb3dCaWFzOjAsc2hhZG93UmFkaXVzOjEsc2hhZG93TWFwU2l6ZTpuZXcgZH07YnJlYWs7Y2FzZSAiU3BvdExpZ2h0IjpoPXtwb3NpdGlvbjpuZXcgZyxkaXJlY3Rpb246bmV3IGcsCmNvbG9yOm5ldyBCLGRpc3RhbmNlOjAsY29uZUNvczowLHBlbnVtYnJhQ29zOjAsZGVjYXk6MCxzaGFkb3c6ITEsc2hhZG93QmlhczowLHNoYWRvd1JhZGl1czoxLHNoYWRvd01hcFNpemU6bmV3IGR9O2JyZWFrO2Nhc2UgIlBvaW50TGlnaHQiOmg9e3Bvc2l0aW9uOm5ldyBnLGNvbG9yOm5ldyBCLGRpc3RhbmNlOjAsZGVjYXk6MCxzaGFkb3c6ITEsc2hhZG93QmlhczowLHNoYWRvd1JhZGl1czoxLHNoYWRvd01hcFNpemU6bmV3IGQsc2hhZG93Q2FtZXJhTmVhcjoxLHNoYWRvd0NhbWVyYUZhcjoxRTN9O2JyZWFrO2Nhc2UgIkhlbWlzcGhlcmVMaWdodCI6aD17ZGlyZWN0aW9uOm5ldyBnLHNreUNvbG9yOm5ldyBCLGdyb3VuZENvbG9yOm5ldyBCfTticmVhaztjYXNlICJSZWN0QXJlYUxpZ2h0IjpoPXtjb2xvcjpuZXcgQixwb3NpdGlvbjpuZXcgZyxoYWxmV2lkdGg6bmV3IGcsaGFsZkhlaWdodDpuZXcgZ319cmV0dXJuIGJbZS5pZF09aH19fWZ1bmN0aW9uIEZvKCl7Zm9yKHZhciBiPQpuZXcgRW8sZT17aWQ6R28rKyxoYXNoOntzdGF0ZUlEOi0xLGRpcmVjdGlvbmFsTGVuZ3RoOi0xLHBvaW50TGVuZ3RoOi0xLHNwb3RMZW5ndGg6LTEscmVjdEFyZWFMZW5ndGg6LTEsaGVtaUxlbmd0aDotMSxzaGFkb3dzTGVuZ3RoOi0xfSxhbWJpZW50OlswLDAsMF0scHJvYmU6W10sZGlyZWN0aW9uYWw6W10sZGlyZWN0aW9uYWxTaGFkb3dNYXA6W10sZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXg6W10sc3BvdDpbXSxzcG90U2hhZG93TWFwOltdLHNwb3RTaGFkb3dNYXRyaXg6W10scmVjdEFyZWE6W10scG9pbnQ6W10scG9pbnRTaGFkb3dNYXA6W10scG9pbnRTaGFkb3dNYXRyaXg6W10saGVtaTpbXX0saD0wOzk+aDtoKyspZS5wcm9iZS5wdXNoKG5ldyBnKTt2YXIgbj1uZXcgZyx1PW5ldyBDLHc9bmV3IEM7cmV0dXJue3NldHVwOmZ1bmN0aW9uKHosRSxIKXtmb3IodmFyIEk9MCxPPTAsUT0wLFI9MDs5PlI7UisrKWUucHJvYmVbUl0uc2V0KDAsMCwwKTt2YXIgVT0wLFc9MCxaPTAsZmE9CjAscWE9MDtIPUgubWF0cml4V29ybGRJbnZlcnNlO1I9MDtmb3IodmFyIHJhPXoubGVuZ3RoO1I8cmE7UisrKXt2YXIgaWE9eltSXSx0YT1pYS5jb2xvcixuYT1pYS5pbnRlbnNpdHksdmE9aWEuZGlzdGFuY2UsQmE9aWEuc2hhZG93JiZpYS5zaGFkb3cubWFwP2lhLnNoYWRvdy5tYXAudGV4dHVyZTpudWxsO2lmKGlhLmlzQW1iaWVudExpZ2h0KUkrPXRhLnIqbmEsTys9dGEuZypuYSxRKz10YS5iKm5hO2Vsc2UgaWYoaWEuaXNMaWdodFByb2JlKWZvcihCYT0wOzk+QmE7QmErKyllLnByb2JlW0JhXS5hZGRTY2FsZWRWZWN0b3IoaWEuc2guY29lZmZpY2llbnRzW0JhXSxuYSk7ZWxzZSBpZihpYS5pc0RpcmVjdGlvbmFsTGlnaHQpe3ZhciBzYT1iLmdldChpYSk7c2EuY29sb3IuY29weShpYS5jb2xvcikubXVsdGlwbHlTY2FsYXIoaWEuaW50ZW5zaXR5KTtzYS5kaXJlY3Rpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKGlhLm1hdHJpeFdvcmxkKTtuLnNldEZyb21NYXRyaXhQb3NpdGlvbihpYS50YXJnZXQubWF0cml4V29ybGQpOwpzYS5kaXJlY3Rpb24uc3ViKG4pO3NhLmRpcmVjdGlvbi50cmFuc2Zvcm1EaXJlY3Rpb24oSCk7aWYoc2Euc2hhZG93PWlhLmNhc3RTaGFkb3cpbmE9aWEuc2hhZG93LHNhLnNoYWRvd0JpYXM9bmEuYmlhcyxzYS5zaGFkb3dSYWRpdXM9bmEucmFkaXVzLHNhLnNoYWRvd01hcFNpemU9bmEubWFwU2l6ZTtlLmRpcmVjdGlvbmFsU2hhZG93TWFwW1VdPUJhO2UuZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXhbVV09aWEuc2hhZG93Lm1hdHJpeDtlLmRpcmVjdGlvbmFsW1VdPXNhO1UrK31lbHNlIGlmKGlhLmlzU3BvdExpZ2h0KXtzYT1iLmdldChpYSk7c2EucG9zaXRpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKGlhLm1hdHJpeFdvcmxkKTtzYS5wb3NpdGlvbi5hcHBseU1hdHJpeDQoSCk7c2EuY29sb3IuY29weSh0YSkubXVsdGlwbHlTY2FsYXIobmEpO3NhLmRpc3RhbmNlPXZhO3NhLmRpcmVjdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oaWEubWF0cml4V29ybGQpO24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKGlhLnRhcmdldC5tYXRyaXhXb3JsZCk7CnNhLmRpcmVjdGlvbi5zdWIobik7c2EuZGlyZWN0aW9uLnRyYW5zZm9ybURpcmVjdGlvbihIKTtzYS5jb25lQ29zPU1hdGguY29zKGlhLmFuZ2xlKTtzYS5wZW51bWJyYUNvcz1NYXRoLmNvcyhpYS5hbmdsZSooMS1pYS5wZW51bWJyYSkpO3NhLmRlY2F5PWlhLmRlY2F5O2lmKHNhLnNoYWRvdz1pYS5jYXN0U2hhZG93KW5hPWlhLnNoYWRvdyxzYS5zaGFkb3dCaWFzPW5hLmJpYXMsc2Euc2hhZG93UmFkaXVzPW5hLnJhZGl1cyxzYS5zaGFkb3dNYXBTaXplPW5hLm1hcFNpemU7ZS5zcG90U2hhZG93TWFwW1pdPUJhO2Uuc3BvdFNoYWRvd01hdHJpeFtaXT1pYS5zaGFkb3cubWF0cml4O2Uuc3BvdFtaXT1zYTtaKyt9ZWxzZSBpZihpYS5pc1JlY3RBcmVhTGlnaHQpc2E9Yi5nZXQoaWEpLHNhLmNvbG9yLmNvcHkodGEpLm11bHRpcGx5U2NhbGFyKG5hKSxzYS5wb3NpdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oaWEubWF0cml4V29ybGQpLHNhLnBvc2l0aW9uLmFwcGx5TWF0cml4NChIKSwKdy5pZGVudGl0eSgpLHUuY29weShpYS5tYXRyaXhXb3JsZCksdS5wcmVtdWx0aXBseShIKSx3LmV4dHJhY3RSb3RhdGlvbih1KSxzYS5oYWxmV2lkdGguc2V0KC41KmlhLndpZHRoLDAsMCksc2EuaGFsZkhlaWdodC5zZXQoMCwuNSppYS5oZWlnaHQsMCksc2EuaGFsZldpZHRoLmFwcGx5TWF0cml4NCh3KSxzYS5oYWxmSGVpZ2h0LmFwcGx5TWF0cml4NCh3KSxlLnJlY3RBcmVhW2ZhXT1zYSxmYSsrO2Vsc2UgaWYoaWEuaXNQb2ludExpZ2h0KXtzYT1iLmdldChpYSk7c2EucG9zaXRpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKGlhLm1hdHJpeFdvcmxkKTtzYS5wb3NpdGlvbi5hcHBseU1hdHJpeDQoSCk7c2EuY29sb3IuY29weShpYS5jb2xvcikubXVsdGlwbHlTY2FsYXIoaWEuaW50ZW5zaXR5KTtzYS5kaXN0YW5jZT1pYS5kaXN0YW5jZTtzYS5kZWNheT1pYS5kZWNheTtpZihzYS5zaGFkb3c9aWEuY2FzdFNoYWRvdyluYT1pYS5zaGFkb3csc2Euc2hhZG93Qmlhcz1uYS5iaWFzLHNhLnNoYWRvd1JhZGl1cz0KbmEucmFkaXVzLHNhLnNoYWRvd01hcFNpemU9bmEubWFwU2l6ZSxzYS5zaGFkb3dDYW1lcmFOZWFyPW5hLmNhbWVyYS5uZWFyLHNhLnNoYWRvd0NhbWVyYUZhcj1uYS5jYW1lcmEuZmFyO2UucG9pbnRTaGFkb3dNYXBbV109QmE7ZS5wb2ludFNoYWRvd01hdHJpeFtXXT1pYS5zaGFkb3cubWF0cml4O2UucG9pbnRbV109c2E7VysrfWVsc2UgaWEuaXNIZW1pc3BoZXJlTGlnaHQmJihzYT1iLmdldChpYSksc2EuZGlyZWN0aW9uLnNldEZyb21NYXRyaXhQb3NpdGlvbihpYS5tYXRyaXhXb3JsZCksc2EuZGlyZWN0aW9uLnRyYW5zZm9ybURpcmVjdGlvbihIKSxzYS5kaXJlY3Rpb24ubm9ybWFsaXplKCksc2Euc2t5Q29sb3IuY29weShpYS5jb2xvcikubXVsdGlwbHlTY2FsYXIobmEpLHNhLmdyb3VuZENvbG9yLmNvcHkoaWEuZ3JvdW5kQ29sb3IpLm11bHRpcGx5U2NhbGFyKG5hKSxlLmhlbWlbcWFdPXNhLHFhKyspfWUuYW1iaWVudFswXT1JO2UuYW1iaWVudFsxXT1PO2UuYW1iaWVudFsyXT0KUTtlLmRpcmVjdGlvbmFsLmxlbmd0aD1VO2Uuc3BvdC5sZW5ndGg9WjtlLnJlY3RBcmVhLmxlbmd0aD1mYTtlLnBvaW50Lmxlbmd0aD1XO2UuaGVtaS5sZW5ndGg9cWE7ZS5oYXNoLnN0YXRlSUQ9ZS5pZDtlLmhhc2guZGlyZWN0aW9uYWxMZW5ndGg9VTtlLmhhc2gucG9pbnRMZW5ndGg9VztlLmhhc2guc3BvdExlbmd0aD1aO2UuaGFzaC5yZWN0QXJlYUxlbmd0aD1mYTtlLmhhc2guaGVtaUxlbmd0aD1xYTtlLmhhc2guc2hhZG93c0xlbmd0aD1FLmxlbmd0aH0sc3RhdGU6ZX19ZnVuY3Rpb24gbGwoKXt2YXIgYj1uZXcgRm8sZT1bXSxoPVtdO3JldHVybntpbml0OmZ1bmN0aW9uKCl7ZS5sZW5ndGg9MDtoLmxlbmd0aD0wfSxzdGF0ZTp7bGlnaHRzQXJyYXk6ZSxzaGFkb3dzQXJyYXk6aCxsaWdodHM6Yn0sc2V0dXBMaWdodHM6ZnVuY3Rpb24obil7Yi5zZXR1cChlLGgsbil9LHB1c2hMaWdodDpmdW5jdGlvbihuKXtlLnB1c2gobil9LHB1c2hTaGFkb3c6ZnVuY3Rpb24obil7aC5wdXNoKG4pfX19CmZ1bmN0aW9uIEhvKCl7ZnVuY3Rpb24gYihoKXtoPWgudGFyZ2V0O2gucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsYik7ZGVsZXRlIGVbaC5pZF19dmFyIGU9e307cmV0dXJue2dldDpmdW5jdGlvbihoLG4pe2lmKHZvaWQgMD09PWVbaC5pZF0pe3ZhciB1PW5ldyBsbDtlW2guaWRdPXt9O2VbaC5pZF1bbi5pZF09dTtoLmFkZEV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLGIpfWVsc2Ugdm9pZCAwPT09ZVtoLmlkXVtuLmlkXT8odT1uZXcgbGwsZVtoLmlkXVtuLmlkXT11KTp1PWVbaC5pZF1bbi5pZF07cmV0dXJuIHV9LGRpc3Bvc2U6ZnVuY3Rpb24oKXtlPXt9fX19ZnVuY3Rpb24gUGQoYil7R2EuY2FsbCh0aGlzKTt0aGlzLnR5cGU9Ik1lc2hEZXB0aE1hdGVyaWFsIjt0aGlzLmRlcHRoUGFja2luZz0zMjAwO3RoaXMubW9ycGhUYXJnZXRzPXRoaXMuc2tpbm5pbmc9ITE7dGhpcy5kaXNwbGFjZW1lbnRNYXA9dGhpcy5hbHBoYU1hcD10aGlzLm1hcD1udWxsO3RoaXMuZGlzcGxhY2VtZW50U2NhbGU9CjE7dGhpcy5kaXNwbGFjZW1lbnRCaWFzPTA7dGhpcy53aXJlZnJhbWU9ITE7dGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9MTt0aGlzLmxpZ2h0cz10aGlzLmZvZz0hMTt0aGlzLnNldFZhbHVlcyhiKX1mdW5jdGlvbiBRZChiKXtHYS5jYWxsKHRoaXMpO3RoaXMudHlwZT0iTWVzaERpc3RhbmNlTWF0ZXJpYWwiO3RoaXMucmVmZXJlbmNlUG9zaXRpb249bmV3IGc7dGhpcy5uZWFyRGlzdGFuY2U9MTt0aGlzLmZhckRpc3RhbmNlPTFFMzt0aGlzLm1vcnBoVGFyZ2V0cz10aGlzLnNraW5uaW5nPSExO3RoaXMuZGlzcGxhY2VtZW50TWFwPXRoaXMuYWxwaGFNYXA9dGhpcy5tYXA9bnVsbDt0aGlzLmRpc3BsYWNlbWVudFNjYWxlPTE7dGhpcy5kaXNwbGFjZW1lbnRCaWFzPTA7dGhpcy5saWdodHM9dGhpcy5mb2c9ITE7dGhpcy5zZXRWYWx1ZXMoYil9ZnVuY3Rpb24gbWwoYixlLGgpe2Z1bmN0aW9uIG4odmEsQmEsc2EsRGEsSGEsS2Epe3ZhciBOYT12YS5nZW9tZXRyeTt2YXIgTGE9UTt2YXIgZmI9CnZhLmN1c3RvbURlcHRoTWF0ZXJpYWw7c2EmJihMYT1SLGZiPXZhLmN1c3RvbURpc3RhbmNlTWF0ZXJpYWwpO2ZiP0xhPWZiOihmYj0hMSxCYS5tb3JwaFRhcmdldHMmJihOYSYmTmEuaXNCdWZmZXJHZW9tZXRyeT9mYj1OYS5tb3JwaEF0dHJpYnV0ZXMmJk5hLm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbiYmMDxOYS5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24ubGVuZ3RoOk5hJiZOYS5pc0dlb21ldHJ5JiYoZmI9TmEubW9ycGhUYXJnZXRzJiYwPE5hLm1vcnBoVGFyZ2V0cy5sZW5ndGgpKSx2YS5pc1NraW5uZWRNZXNoJiYhMT09PUJhLnNraW5uaW5nJiZjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMU2hhZG93TWFwOiBUSFJFRS5Ta2lubmVkTWVzaCB3aXRoIG1hdGVyaWFsLnNraW5uaW5nIHNldCB0byBmYWxzZToiLHZhKSx2YT12YS5pc1NraW5uZWRNZXNoJiZCYS5za2lubmluZyxOYT0wLGZiJiYoTmF8PTEpLHZhJiYoTmF8PTIpLExhPUxhW05hXSk7Yi5sb2NhbENsaXBwaW5nRW5hYmxlZCYmCiEwPT09QmEuY2xpcFNoYWRvd3MmJjAhPT1CYS5jbGlwcGluZ1BsYW5lcy5sZW5ndGgmJihOYT1MYS51dWlkLGZiPUJhLnV1aWQsdmE9VVtOYV0sdm9pZCAwPT09dmEmJih2YT17fSxVW05hXT12YSksTmE9dmFbZmJdLHZvaWQgMD09PU5hJiYoTmE9TGEuY2xvbmUoKSx2YVtmYl09TmEpLExhPU5hKTtMYS52aXNpYmxlPUJhLnZpc2libGU7TGEud2lyZWZyYW1lPUJhLndpcmVmcmFtZTtMYS5zaWRlPW51bGwhPUJhLnNoYWRvd1NpZGU/QmEuc2hhZG93U2lkZTpXW0JhLnNpZGVdO0xhLmNsaXBTaGFkb3dzPUJhLmNsaXBTaGFkb3dzO0xhLmNsaXBwaW5nUGxhbmVzPUJhLmNsaXBwaW5nUGxhbmVzO0xhLmNsaXBJbnRlcnNlY3Rpb249QmEuY2xpcEludGVyc2VjdGlvbjtMYS53aXJlZnJhbWVMaW5ld2lkdGg9QmEud2lyZWZyYW1lTGluZXdpZHRoO0xhLmxpbmV3aWR0aD1CYS5saW5ld2lkdGg7c2EmJkxhLmlzTWVzaERpc3RhbmNlTWF0ZXJpYWwmJihMYS5yZWZlcmVuY2VQb3NpdGlvbi5jb3B5KERhKSwKTGEubmVhckRpc3RhbmNlPUhhLExhLmZhckRpc3RhbmNlPUthKTtyZXR1cm4gTGF9ZnVuY3Rpb24gdSh2YSxCYSxzYSxEYSl7aWYoITEhPT12YS52aXNpYmxlKXtpZih2YS5sYXllcnMudGVzdChCYS5sYXllcnMpJiYodmEuaXNNZXNofHx2YS5pc0xpbmV8fHZhLmlzUG9pbnRzKSYmdmEuY2FzdFNoYWRvdyYmKCF2YS5mcnVzdHVtQ3VsbGVkfHx3LmludGVyc2VjdHNPYmplY3QodmEpKSl7dmEubW9kZWxWaWV3TWF0cml4Lm11bHRpcGx5TWF0cmljZXMoc2EubWF0cml4V29ybGRJbnZlcnNlLHZhLm1hdHJpeFdvcmxkKTt2YXIgSGE9ZS51cGRhdGUodmEpLEthPXZhLm1hdGVyaWFsO2lmKEFycmF5LmlzQXJyYXkoS2EpKWZvcih2YXIgTmE9SGEuZ3JvdXBzLExhPTAsZmI9TmEubGVuZ3RoO0xhPGZiO0xhKyspe3ZhciBjYj1OYVtMYV0sSmE9S2FbY2IubWF0ZXJpYWxJbmRleF07SmEmJkphLnZpc2libGUmJihKYT1uKHZhLEphLERhLE8sc2EubmVhcixzYS5mYXIpLGIucmVuZGVyQnVmZmVyRGlyZWN0KHNhLApudWxsLEhhLEphLHZhLGNiKSl9ZWxzZSBLYS52aXNpYmxlJiYoSmE9bih2YSxLYSxEYSxPLHNhLm5lYXIsc2EuZmFyKSxiLnJlbmRlckJ1ZmZlckRpcmVjdChzYSxudWxsLEhhLEphLHZhLG51bGwpKX12YT12YS5jaGlsZHJlbjtIYT0wO2ZvcihLYT12YS5sZW5ndGg7SGE8S2E7SGErKyl1KHZhW0hhXSxCYSxzYSxEYSl9fXZhciB3PW5ldyB4LHo9bmV3IEMsRT1uZXcgZCxIPW5ldyBkKGgsaCksST1uZXcgZyxPPW5ldyBnLFE9QXJyYXkoNCksUj1BcnJheSg0KSxVPXt9LFc9ezA6MSwxOjAsMjoyfSxaPVtuZXcgZygxLDAsMCksbmV3IGcoLTEsMCwwKSxuZXcgZygwLDAsMSksbmV3IGcoMCwwLC0xKSxuZXcgZygwLDEsMCksbmV3IGcoMCwtMSwwKV0sZmE9W25ldyBnKDAsMSwwKSxuZXcgZygwLDEsMCksbmV3IGcoMCwxLDApLG5ldyBnKDAsMSwwKSxuZXcgZygwLDAsMSksbmV3IGcoMCwwLC0xKV0scWE9W25ldyBtLG5ldyBtLG5ldyBtLG5ldyBtLG5ldyBtLG5ldyBtXTtmb3IoaD0wOzQhPT0KaDsrK2gpe3ZhciByYT0wIT09KGgmMSksaWE9MCE9PShoJjIpLHRhPW5ldyBQZCh7ZGVwdGhQYWNraW5nOjMyMDEsbW9ycGhUYXJnZXRzOnJhLHNraW5uaW5nOmlhfSk7UVtoXT10YTtyYT1uZXcgUWQoe21vcnBoVGFyZ2V0czpyYSxza2lubmluZzppYX0pO1JbaF09cmF9dmFyIG5hPXRoaXM7dGhpcy5lbmFibGVkPSExO3RoaXMuYXV0b1VwZGF0ZT0hMDt0aGlzLm5lZWRzVXBkYXRlPSExO3RoaXMudHlwZT0xO3RoaXMucmVuZGVyPWZ1bmN0aW9uKHZhLEJhLHNhKXtpZighMSE9PW5hLmVuYWJsZWQmJighMSE9PW5hLmF1dG9VcGRhdGV8fCExIT09bmEubmVlZHNVcGRhdGUpJiYwIT09dmEubGVuZ3RoKXt2YXIgRGE9Yi5nZXRSZW5kZXJUYXJnZXQoKSxIYT1iLnN0YXRlO0hhLnNldEJsZW5kaW5nKDApO0hhLmJ1ZmZlcnMuY29sb3Iuc2V0Q2xlYXIoMSwxLDEsMSk7SGEuYnVmZmVycy5kZXB0aC5zZXRUZXN0KCEwKTtIYS5zZXRTY2lzc29yVGVzdCghMSk7Zm9yKHZhciBLYSxOYT0wLExhPQp2YS5sZW5ndGg7TmE8TGE7TmErKyl7dmFyIGZiPXZhW05hXTtLYT1mYi5zaGFkb3c7dmFyIGNiPWZiJiZmYi5pc1BvaW50TGlnaHQ7aWYodm9pZCAwPT09S2EpY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFNoYWRvd01hcDoiLGZiLCJoYXMgbm8gc2hhZG93LiIpO2Vsc2V7dmFyIEphPUthLmNhbWVyYTtFLmNvcHkoS2EubWFwU2l6ZSk7RS5taW4oSCk7aWYoY2Ipe3ZhciBoYj1FLngsVWE9RS55O3FhWzBdLnNldCgyKmhiLFVhLGhiLFVhKTtxYVsxXS5zZXQoMCxVYSxoYixVYSk7cWFbMl0uc2V0KDMqaGIsVWEsaGIsVWEpO3FhWzNdLnNldChoYixVYSxoYixVYSk7cWFbNF0uc2V0KDMqaGIsMCxoYixVYSk7cWFbNV0uc2V0KGhiLDAsaGIsVWEpO0UueCo9NDtFLnkqPTJ9bnVsbD09PUthLm1hcCYmKEthLm1hcD1uZXcgcChFLngsRS55LHttaW5GaWx0ZXI6MTAwMyxtYWdGaWx0ZXI6MTAwMyxmb3JtYXQ6MTAyM30pLEthLm1hcC50ZXh0dXJlLm5hbWU9ZmIubmFtZSsiLnNoYWRvd01hcCIsCkphLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKSk7S2EuaXNTcG90TGlnaHRTaGFkb3cmJkthLnVwZGF0ZShmYik7aGI9S2EubWFwO1VhPUthLm1hdHJpeDtPLnNldEZyb21NYXRyaXhQb3NpdGlvbihmYi5tYXRyaXhXb3JsZCk7SmEucG9zaXRpb24uY29weShPKTtjYj8oS2E9NixVYS5tYWtlVHJhbnNsYXRpb24oLU8ueCwtTy55LC1PLnopKTooS2E9MSxJLnNldEZyb21NYXRyaXhQb3NpdGlvbihmYi50YXJnZXQubWF0cml4V29ybGQpLEphLmxvb2tBdChJKSxKYS51cGRhdGVNYXRyaXhXb3JsZCgpLFVhLnNldCguNSwwLDAsLjUsMCwuNSwwLC41LDAsMCwuNSwuNSwwLDAsMCwxKSxVYS5tdWx0aXBseShKYS5wcm9qZWN0aW9uTWF0cml4KSxVYS5tdWx0aXBseShKYS5tYXRyaXhXb3JsZEludmVyc2UpKTtiLnNldFJlbmRlclRhcmdldChoYik7Yi5jbGVhcigpO2ZvcihmYj0wO2ZiPEthO2ZiKyspY2ImJihJLmNvcHkoSmEucG9zaXRpb24pLEkuYWRkKFpbZmJdKSxKYS51cC5jb3B5KGZhW2ZiXSksCkphLmxvb2tBdChJKSxKYS51cGRhdGVNYXRyaXhXb3JsZCgpLEhhLnZpZXdwb3J0KHFhW2ZiXSkpLHoubXVsdGlwbHlNYXRyaWNlcyhKYS5wcm9qZWN0aW9uTWF0cml4LEphLm1hdHJpeFdvcmxkSW52ZXJzZSksdy5zZXRGcm9tTWF0cml4KHopLHUoQmEsc2EsSmEsY2IpfX1uYS5uZWVkc1VwZGF0ZT0hMTtiLnNldFJlbmRlclRhcmdldChEYSl9fX1mdW5jdGlvbiBJbyhiLGUsaCxuKXtmdW5jdGlvbiB1KG1hLElhLE9hKXt2YXIgdWI9bmV3IFVpbnQ4QXJyYXkoNCksYWI9Yi5jcmVhdGVUZXh0dXJlKCk7Yi5iaW5kVGV4dHVyZShtYSxhYik7Yi50ZXhQYXJhbWV0ZXJpKG1hLDEwMjQxLDk3MjgpO2IudGV4UGFyYW1ldGVyaShtYSwxMDI0MCw5NzI4KTtmb3IobWE9MDttYTxPYTttYSsrKWIudGV4SW1hZ2UyRChJYSttYSwwLDY0MDgsMSwxLDAsNjQwOCw1MTIxLHViKTtyZXR1cm4gYWJ9ZnVuY3Rpb24gdyhtYSxJYSl7cWFbbWFdPTE7MD09PXJhW21hXSYmKGIuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkobWEpLApyYVttYV09MSk7aWFbbWFdIT09SWEmJigobi5pc1dlYkdMMj9iOmUuZ2V0KCJBTkdMRV9pbnN0YW5jZWRfYXJyYXlzIikpW24uaXNXZWJHTDI/InZlcnRleEF0dHJpYkRpdmlzb3IiOiJ2ZXJ0ZXhBdHRyaWJEaXZpc29yQU5HTEUiXShtYSxJYSksaWFbbWFdPUlhKX1mdW5jdGlvbiB6KG1hKXshMCE9PXRhW21hXSYmKGIuZW5hYmxlKG1hKSx0YVttYV09ITApfWZ1bmN0aW9uIEUobWEpeyExIT09dGFbbWFdJiYoYi5kaXNhYmxlKG1hKSx0YVttYV09ITEpfWZ1bmN0aW9uIEgobWEsSWEsT2EsdWIsYWIsS2IsbGIsUWEpe2lmKDA9PT1tYSlCYSYmKEUoMzA0MiksQmE9ITEpO2Vsc2UgaWYoQmF8fCh6KDMwNDIpLEJhPSEwKSw1IT09bWEpe2lmKG1hIT09c2F8fFFhIT09Y2Ipe2lmKDEwMCE9PURhfHwxMDAhPT1OYSliLmJsZW5kRXF1YXRpb24oMzI3NzQpLE5hPURhPTEwMDtpZihRYSlzd2l0Y2gobWEpe2Nhc2UgMTpiLmJsZW5kRnVuY1NlcGFyYXRlKDEsNzcxLDEsNzcxKTticmVhaztjYXNlIDI6Yi5ibGVuZEZ1bmMoMSwKMSk7YnJlYWs7Y2FzZSAzOmIuYmxlbmRGdW5jU2VwYXJhdGUoMCwwLDc2OSw3NzEpO2JyZWFrO2Nhc2UgNDpiLmJsZW5kRnVuY1NlcGFyYXRlKDAsNzY4LDAsNzcwKTticmVhaztkZWZhdWx0OmNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMU3RhdGU6IEludmFsaWQgYmxlbmRpbmc6ICIsbWEpfWVsc2Ugc3dpdGNoKG1hKXtjYXNlIDE6Yi5ibGVuZEZ1bmNTZXBhcmF0ZSg3NzAsNzcxLDEsNzcxKTticmVhaztjYXNlIDI6Yi5ibGVuZEZ1bmMoNzcwLDEpO2JyZWFrO2Nhc2UgMzpiLmJsZW5kRnVuYygwLDc2OSk7YnJlYWs7Y2FzZSA0OmIuYmxlbmRGdW5jKDAsNzY4KTticmVhaztkZWZhdWx0OmNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMU3RhdGU6IEludmFsaWQgYmxlbmRpbmc6ICIsbWEpfWZiPUxhPUthPUhhPW51bGw7c2E9bWE7Y2I9UWF9fWVsc2V7YWI9YWJ8fElhO0tiPUtifHxPYTtsYj1sYnx8dWI7aWYoSWEhPT1EYXx8YWIhPT1OYSliLmJsZW5kRXF1YXRpb25TZXBhcmF0ZShoLmNvbnZlcnQoSWEpLApoLmNvbnZlcnQoYWIpKSxEYT1JYSxOYT1hYjtpZihPYSE9PUhhfHx1YiE9PUthfHxLYiE9PUxhfHxsYiE9PWZiKWIuYmxlbmRGdW5jU2VwYXJhdGUoaC5jb252ZXJ0KE9hKSxoLmNvbnZlcnQodWIpLGguY29udmVydChLYiksaC5jb252ZXJ0KGxiKSksSGE9T2EsS2E9dWIsTGE9S2IsZmI9bGI7c2E9bWE7Y2I9bnVsbH19ZnVuY3Rpb24gSShtYSl7SmEhPT1tYSYmKG1hP2IuZnJvbnRGYWNlKDIzMDQpOmIuZnJvbnRGYWNlKDIzMDUpLEphPW1hKX1mdW5jdGlvbiBPKG1hKXswIT09bWE/KHooMjg4NCksbWEhPT1oYiYmKDE9PT1tYT9iLmN1bGxGYWNlKDEwMjkpOjI9PT1tYT9iLmN1bGxGYWNlKDEwMjgpOmIuY3VsbEZhY2UoMTAzMikpKTpFKDI4ODQpO2hiPW1hfWZ1bmN0aW9uIFEobWEsSWEsT2Epe2lmKG1hKXtpZih6KDMyODIzKSxIYiE9PUlhfHxxYiE9PU9hKWIucG9seWdvbk9mZnNldChJYSxPYSksSGI9SWEscWI9T2F9ZWxzZSBFKDMyODIzKX1mdW5jdGlvbiBSKG1hKXt2b2lkIDA9PT0KbWEmJihtYT0zMzk4NCtqYS0xKTt5YSE9PW1hJiYoYi5hY3RpdmVUZXh0dXJlKG1hKSx5YT1tYSl9dmFyIFU9bmV3IGZ1bmN0aW9uKCl7dmFyIG1hPSExLElhPW5ldyBtLE9hPW51bGwsdWI9bmV3IG0oMCwwLDAsMCk7cmV0dXJue3NldE1hc2s6ZnVuY3Rpb24oYWIpe09hPT09YWJ8fG1hfHwoYi5jb2xvck1hc2soYWIsYWIsYWIsYWIpLE9hPWFiKX0sc2V0TG9ja2VkOmZ1bmN0aW9uKGFiKXttYT1hYn0sc2V0Q2xlYXI6ZnVuY3Rpb24oYWIsS2IsbGIsUWEsbmIpeyEwPT09bmImJihhYio9UWEsS2IqPVFhLGxiKj1RYSk7SWEuc2V0KGFiLEtiLGxiLFFhKTshMT09PXViLmVxdWFscyhJYSkmJihiLmNsZWFyQ29sb3IoYWIsS2IsbGIsUWEpLHViLmNvcHkoSWEpKX0scmVzZXQ6ZnVuY3Rpb24oKXttYT0hMTtPYT1udWxsO3ViLnNldCgtMSwwLDAsMCl9fX0sVz1uZXcgZnVuY3Rpb24oKXt2YXIgbWE9ITEsSWE9bnVsbCxPYT1udWxsLHViPW51bGw7cmV0dXJue3NldFRlc3Q6ZnVuY3Rpb24oYWIpe2FiPwp6KDI5MjkpOkUoMjkyOSl9LHNldE1hc2s6ZnVuY3Rpb24oYWIpe0lhPT09YWJ8fG1hfHwoYi5kZXB0aE1hc2soYWIpLElhPWFiKX0sc2V0RnVuYzpmdW5jdGlvbihhYil7aWYoT2EhPT1hYil7aWYoYWIpc3dpdGNoKGFiKXtjYXNlIDA6Yi5kZXB0aEZ1bmMoNTEyKTticmVhaztjYXNlIDE6Yi5kZXB0aEZ1bmMoNTE5KTticmVhaztjYXNlIDI6Yi5kZXB0aEZ1bmMoNTEzKTticmVhaztjYXNlIDM6Yi5kZXB0aEZ1bmMoNTE1KTticmVhaztjYXNlIDQ6Yi5kZXB0aEZ1bmMoNTE0KTticmVhaztjYXNlIDU6Yi5kZXB0aEZ1bmMoNTE4KTticmVhaztjYXNlIDY6Yi5kZXB0aEZ1bmMoNTE2KTticmVhaztjYXNlIDc6Yi5kZXB0aEZ1bmMoNTE3KTticmVhaztkZWZhdWx0OmIuZGVwdGhGdW5jKDUxNSl9ZWxzZSBiLmRlcHRoRnVuYyg1MTUpO09hPWFifX0sc2V0TG9ja2VkOmZ1bmN0aW9uKGFiKXttYT1hYn0sc2V0Q2xlYXI6ZnVuY3Rpb24oYWIpe3ViIT09YWImJihiLmNsZWFyRGVwdGgoYWIpLHViPQphYil9LHJlc2V0OmZ1bmN0aW9uKCl7bWE9ITE7dWI9T2E9SWE9bnVsbH19fSxaPW5ldyBmdW5jdGlvbigpe3ZhciBtYT0hMSxJYT1udWxsLE9hPW51bGwsdWI9bnVsbCxhYj1udWxsLEtiPW51bGwsbGI9bnVsbCxRYT1udWxsLG5iPW51bGw7cmV0dXJue3NldFRlc3Q6ZnVuY3Rpb24ocGIpe3BiP3ooMjk2MCk6RSgyOTYwKX0sc2V0TWFzazpmdW5jdGlvbihwYil7SWE9PT1wYnx8bWF8fChiLnN0ZW5jaWxNYXNrKHBiKSxJYT1wYil9LHNldEZ1bmM6ZnVuY3Rpb24ocGIsdmIsQWIpe2lmKE9hIT09cGJ8fHViIT09dmJ8fGFiIT09QWIpYi5zdGVuY2lsRnVuYyhwYix2YixBYiksT2E9cGIsdWI9dmIsYWI9QWJ9LHNldE9wOmZ1bmN0aW9uKHBiLHZiLEFiKXtpZihLYiE9PXBifHxsYiE9PXZifHxRYSE9PUFiKWIuc3RlbmNpbE9wKHBiLHZiLEFiKSxLYj1wYixsYj12YixRYT1BYn0sc2V0TG9ja2VkOmZ1bmN0aW9uKHBiKXttYT1wYn0sc2V0Q2xlYXI6ZnVuY3Rpb24ocGIpe25iIT09cGImJihiLmNsZWFyU3RlbmNpbChwYiksCm5iPXBiKX0scmVzZXQ6ZnVuY3Rpb24oKXttYT0hMTtuYj1RYT1sYj1LYj1hYj11Yj1PYT1JYT1udWxsfX19LGZhPWIuZ2V0UGFyYW1ldGVyKDM0OTIxKSxxYT1uZXcgVWludDhBcnJheShmYSkscmE9bmV3IFVpbnQ4QXJyYXkoZmEpLGlhPW5ldyBVaW50OEFycmF5KGZhKSx0YT17fSxuYT1udWxsLHZhPW51bGwsQmE9bnVsbCxzYT1udWxsLERhPW51bGwsSGE9bnVsbCxLYT1udWxsLE5hPW51bGwsTGE9bnVsbCxmYj1udWxsLGNiPSExLEphPW51bGwsaGI9bnVsbCxVYT1udWxsLEhiPW51bGwscWI9bnVsbCxqYT1iLmdldFBhcmFtZXRlcigzNTY2MSkscGE9ITE7ZmE9MDtmYT1iLmdldFBhcmFtZXRlcig3OTM4KTstMSE9PWZhLmluZGV4T2YoIldlYkdMIik/KGZhPXBhcnNlRmxvYXQoL15XZWJHTCAoWzAtOV0pLy5leGVjKGZhKVsxXSkscGE9MTw9ZmEpOi0xIT09ZmEuaW5kZXhPZigiT3BlbkdMIEVTIikmJihmYT1wYXJzZUZsb2F0KC9eT3BlbkdMIEVTIChbMC05XSkvLmV4ZWMoZmEpWzFdKSwKcGE9Mjw9ZmEpO3ZhciB5YT1udWxsLFZhPXt9LFphPW5ldyBtLFRhPW5ldyBtLGliPXt9O2liWzM1NTNdPXUoMzU1MywzNTUzLDEpO2liWzM0MDY3XT11KDM0MDY3LDM0MDY5LDYpO1Uuc2V0Q2xlYXIoMCwwLDAsMSk7Vy5zZXRDbGVhcigxKTtaLnNldENsZWFyKDApO3ooMjkyOSk7Vy5zZXRGdW5jKDMpO0koITEpO08oMSk7eigyODg0KTtIKDApO3JldHVybntidWZmZXJzOntjb2xvcjpVLGRlcHRoOlcsc3RlbmNpbDpafSxpbml0QXR0cmlidXRlczpmdW5jdGlvbigpe2Zvcih2YXIgbWE9MCxJYT1xYS5sZW5ndGg7bWE8SWE7bWErKylxYVttYV09MH0sZW5hYmxlQXR0cmlidXRlOmZ1bmN0aW9uKG1hKXt3KG1hLDApfSxlbmFibGVBdHRyaWJ1dGVBbmREaXZpc29yOncsZGlzYWJsZVVudXNlZEF0dHJpYnV0ZXM6ZnVuY3Rpb24oKXtmb3IodmFyIG1hPTAsSWE9cmEubGVuZ3RoO21hIT09SWE7KyttYSlyYVttYV0hPT1xYVttYV0mJihiLmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShtYSksCnJhW21hXT0wKX0sZW5hYmxlOnosZGlzYWJsZTpFLGdldENvbXByZXNzZWRUZXh0dXJlRm9ybWF0czpmdW5jdGlvbigpe2lmKG51bGw9PT1uYSYmKG5hPVtdLGUuZ2V0KCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfcHZydGMiKXx8ZS5nZXQoIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjIil8fGUuZ2V0KCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfZXRjMSIpfHxlLmdldCgiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX2FzdGMiKSkpZm9yKHZhciBtYT1iLmdldFBhcmFtZXRlcigzNDQ2NyksSWE9MDtJYTxtYS5sZW5ndGg7SWErKyluYS5wdXNoKG1hW0lhXSk7cmV0dXJuIG5hfSx1c2VQcm9ncmFtOmZ1bmN0aW9uKG1hKXtyZXR1cm4gdmEhPT1tYT8oYi51c2VQcm9ncmFtKG1hKSx2YT1tYSwhMCk6ITF9LHNldEJsZW5kaW5nOkgsc2V0TWF0ZXJpYWw6ZnVuY3Rpb24obWEsSWEpezI9PT1tYS5zaWRlP0UoMjg4NCk6eigyODg0KTt2YXIgT2E9MT09PW1hLnNpZGU7SWEmJihPYT0KIU9hKTtJKE9hKTsxPT09bWEuYmxlbmRpbmcmJiExPT09bWEudHJhbnNwYXJlbnQ/SCgwKTpIKG1hLmJsZW5kaW5nLG1hLmJsZW5kRXF1YXRpb24sbWEuYmxlbmRTcmMsbWEuYmxlbmREc3QsbWEuYmxlbmRFcXVhdGlvbkFscGhhLG1hLmJsZW5kU3JjQWxwaGEsbWEuYmxlbmREc3RBbHBoYSxtYS5wcmVtdWx0aXBsaWVkQWxwaGEpO1cuc2V0RnVuYyhtYS5kZXB0aEZ1bmMpO1cuc2V0VGVzdChtYS5kZXB0aFRlc3QpO1cuc2V0TWFzayhtYS5kZXB0aFdyaXRlKTtVLnNldE1hc2sobWEuY29sb3JXcml0ZSk7UShtYS5wb2x5Z29uT2Zmc2V0LG1hLnBvbHlnb25PZmZzZXRGYWN0b3IsbWEucG9seWdvbk9mZnNldFVuaXRzKX0sc2V0RmxpcFNpZGVkOkksc2V0Q3VsbEZhY2U6TyxzZXRMaW5lV2lkdGg6ZnVuY3Rpb24obWEpe21hIT09VWEmJihwYSYmYi5saW5lV2lkdGgobWEpLFVhPW1hKX0sc2V0UG9seWdvbk9mZnNldDpRLHNldFNjaXNzb3JUZXN0OmZ1bmN0aW9uKG1hKXttYT96KDMwODkpOgpFKDMwODkpfSxhY3RpdmVUZXh0dXJlOlIsYmluZFRleHR1cmU6ZnVuY3Rpb24obWEsSWEpe251bGw9PT15YSYmUigpO3ZhciBPYT1WYVt5YV07dm9pZCAwPT09T2EmJihPYT17dHlwZTp2b2lkIDAsdGV4dHVyZTp2b2lkIDB9LFZhW3lhXT1PYSk7aWYoT2EudHlwZSE9PW1hfHxPYS50ZXh0dXJlIT09SWEpYi5iaW5kVGV4dHVyZShtYSxJYXx8aWJbbWFdKSxPYS50eXBlPW1hLE9hLnRleHR1cmU9SWF9LGNvbXByZXNzZWRUZXhJbWFnZTJEOmZ1bmN0aW9uKCl7dHJ5e2IuY29tcHJlc3NlZFRleEltYWdlMkQuYXBwbHkoYixhcmd1bWVudHMpfWNhdGNoKG1hKXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFN0YXRlOiIsbWEpfX0sdGV4SW1hZ2UyRDpmdW5jdGlvbigpe3RyeXtiLnRleEltYWdlMkQuYXBwbHkoYixhcmd1bWVudHMpfWNhdGNoKG1hKXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFN0YXRlOiIsbWEpfX0sdGV4SW1hZ2UzRDpmdW5jdGlvbigpe3RyeXtiLnRleEltYWdlM0QuYXBwbHkoYiwKYXJndW1lbnRzKX1jYXRjaChtYSl7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xTdGF0ZToiLG1hKX19LHNjaXNzb3I6ZnVuY3Rpb24obWEpeyExPT09WmEuZXF1YWxzKG1hKSYmKGIuc2Npc3NvcihtYS54LG1hLnksbWEueixtYS53KSxaYS5jb3B5KG1hKSl9LHZpZXdwb3J0OmZ1bmN0aW9uKG1hKXshMT09PVRhLmVxdWFscyhtYSkmJihiLnZpZXdwb3J0KG1hLngsbWEueSxtYS56LG1hLncpLFRhLmNvcHkobWEpKX0scmVzZXQ6ZnVuY3Rpb24oKXtmb3IodmFyIG1hPTA7bWE8cmEubGVuZ3RoO21hKyspMT09PXJhW21hXSYmKGIuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KG1hKSxyYVttYV09MCk7dGE9e307eWE9bmE9bnVsbDtWYT17fTtoYj1KYT1zYT12YT1udWxsO1UucmVzZXQoKTtXLnJlc2V0KCk7Wi5yZXNldCgpfX19ZnVuY3Rpb24gSm8oYixlLGgsbix1LHcseil7ZnVuY3Rpb24gRShqYSxwYSl7cmV0dXJuIGhiP25ldyBPZmZzY3JlZW5DYW52YXMoamEscGEpOmRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIsCiJjYW52YXMiKX1mdW5jdGlvbiBIKGphLHBhLHlhLFZhKXt2YXIgWmE9MTtpZihqYS53aWR0aD5WYXx8amEuaGVpZ2h0PlZhKVphPVZhL01hdGgubWF4KGphLndpZHRoLGphLmhlaWdodCk7aWYoMT5aYXx8ITA9PT1wYSl7aWYoInVuZGVmaW5lZCIhPT10eXBlb2YgSFRNTEltYWdlRWxlbWVudCYmamEgaW5zdGFuY2VvZiBIVE1MSW1hZ2VFbGVtZW50fHwidW5kZWZpbmVkIiE9PXR5cGVvZiBIVE1MQ2FudmFzRWxlbWVudCYmamEgaW5zdGFuY2VvZiBIVE1MQ2FudmFzRWxlbWVudHx8InVuZGVmaW5lZCIhPT10eXBlb2YgSW1hZ2VCaXRtYXAmJmphIGluc3RhbmNlb2YgSW1hZ2VCaXRtYXApcmV0dXJuIFZhPXBhP29iLmZsb29yUG93ZXJPZlR3bzpNYXRoLmZsb29yLHBhPVZhKFphKmphLndpZHRoKSxaYT1WYShaYSpqYS5oZWlnaHQpLHZvaWQgMD09PUphJiYoSmE9RShwYSxaYSkpLHlhPXlhP0UocGEsWmEpOkphLHlhLndpZHRoPXBhLHlhLmhlaWdodD1aYSx5YS5nZXRDb250ZXh0KCIyZCIpLmRyYXdJbWFnZShqYSwKMCwwLHBhLFphKSxjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFRleHR1cmUgaGFzIGJlZW4gcmVzaXplZCBmcm9tICgiK2phLndpZHRoKyJ4IitqYS5oZWlnaHQrIikgdG8gKCIrcGErIngiK1phKyIpLiIpLHlhOyJkYXRhImluIGphJiZjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IEltYWdlIGluIERhdGFUZXh0dXJlIGlzIHRvbyBiaWcgKCIramEud2lkdGgrIngiK2phLmhlaWdodCsiKS4iKX1yZXR1cm4gamF9ZnVuY3Rpb24gSShqYSl7cmV0dXJuIG9iLmlzUG93ZXJPZlR3byhqYS53aWR0aCkmJm9iLmlzUG93ZXJPZlR3byhqYS5oZWlnaHQpfWZ1bmN0aW9uIE8oamEpe3JldHVybiB1LmlzV2ViR0wyPyExOjEwMDEhPT1qYS53cmFwU3x8MTAwMSE9PWphLndyYXBUfHwxMDAzIT09amEubWluRmlsdGVyJiYxMDA2IT09amEubWluRmlsdGVyfWZ1bmN0aW9uIFEoamEscGEpe3JldHVybiBqYS5nZW5lcmF0ZU1pcG1hcHMmJnBhJiYxMDAzIT09amEubWluRmlsdGVyJiYKMTAwNiE9PWphLm1pbkZpbHRlcn1mdW5jdGlvbiBSKGphLHBhLHlhLFZhKXtiLmdlbmVyYXRlTWlwbWFwKGphKTtuLmdldChwYSkuX19tYXhNaXBMZXZlbD1NYXRoLmxvZyhNYXRoLm1heCh5YSxWYSkpKk1hdGguTE9HMkV9ZnVuY3Rpb24gVShqYSxwYSl7aWYoIXUuaXNXZWJHTDIpcmV0dXJuIGphO3ZhciB5YT1qYTs2NDAzPT09amEmJig1MTI2PT09cGEmJih5YT0zMzMyNiksNTEzMT09PXBhJiYoeWE9MzMzMjUpLDUxMjE9PT1wYSYmKHlhPTMzMzIxKSk7NjQwNz09PWphJiYoNTEyNj09PXBhJiYoeWE9MzQ4MzcpLDUxMzE9PT1wYSYmKHlhPTM0ODQzKSw1MTIxPT09cGEmJih5YT0zMjg0OSkpOzY0MDg9PT1qYSYmKDUxMjY9PT1wYSYmKHlhPTM0ODM2KSw1MTMxPT09cGEmJih5YT0zNDg0MiksNTEyMT09PXBhJiYoeWE9MzI4NTYpKTszMzMyNT09PXlhfHwzMzMyNj09PXlhfHwzNDg0Mj09PXlhfHwzNDgzNj09PXlhP2UuZ2V0KCJFWFRfY29sb3JfYnVmZmVyX2Zsb2F0Iik6KDM0ODQzPT09CnlhfHwzNDgzNz09PXlhKSYmY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBGbG9hdGluZyBwb2ludCB0ZXh0dXJlcyB3aXRoIFJHQiBmb3JtYXQgbm90IHN1cHBvcnRlZC4gUGxlYXNlIHVzZSBSR0JBIGluc3RlYWQuIik7cmV0dXJuIHlhfWZ1bmN0aW9uIFcoamEpe3JldHVybiAxMDAzPT09amF8fDEwMDQ9PT1qYXx8MTAwNT09PWphPzk3Mjg6OTcyOX1mdW5jdGlvbiBaKGphKXtqYT1qYS50YXJnZXQ7amEucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsWik7cWEoamEpO2phLmlzVmlkZW9UZXh0dXJlJiZkZWxldGUgY2JbamEuaWRdO3oubWVtb3J5LnRleHR1cmVzLS19ZnVuY3Rpb24gZmEoamEpe2phPWphLnRhcmdldDtqYS5yZW1vdmVFdmVudExpc3RlbmVyKCJkaXNwb3NlIixmYSk7cmEoamEpO3oubWVtb3J5LnRleHR1cmVzLS19ZnVuY3Rpb24gcWEoamEpe3ZhciBwYT1uLmdldChqYSk7dm9pZCAwIT09cGEuX193ZWJnbEluaXQmJihiLmRlbGV0ZVRleHR1cmUocGEuX193ZWJnbFRleHR1cmUpLApuLnJlbW92ZShqYSkpfWZ1bmN0aW9uIHJhKGphKXt2YXIgcGE9bi5nZXQoamEpLHlhPW4uZ2V0KGphLnRleHR1cmUpO2lmKGphKXt2b2lkIDAhPT15YS5fX3dlYmdsVGV4dHVyZSYmYi5kZWxldGVUZXh0dXJlKHlhLl9fd2ViZ2xUZXh0dXJlKTtqYS5kZXB0aFRleHR1cmUmJmphLmRlcHRoVGV4dHVyZS5kaXNwb3NlKCk7aWYoamEuaXNXZWJHTFJlbmRlclRhcmdldEN1YmUpZm9yKHlhPTA7Nj55YTt5YSsrKWIuZGVsZXRlRnJhbWVidWZmZXIocGEuX193ZWJnbEZyYW1lYnVmZmVyW3lhXSkscGEuX193ZWJnbERlcHRoYnVmZmVyJiZiLmRlbGV0ZVJlbmRlcmJ1ZmZlcihwYS5fX3dlYmdsRGVwdGhidWZmZXJbeWFdKTtlbHNlIGIuZGVsZXRlRnJhbWVidWZmZXIocGEuX193ZWJnbEZyYW1lYnVmZmVyKSxwYS5fX3dlYmdsRGVwdGhidWZmZXImJmIuZGVsZXRlUmVuZGVyYnVmZmVyKHBhLl9fd2ViZ2xEZXB0aGJ1ZmZlcik7bi5yZW1vdmUoamEudGV4dHVyZSk7bi5yZW1vdmUoamEpfX1mdW5jdGlvbiBpYShqYSwKcGEpe3ZhciB5YT1uLmdldChqYSk7amEuaXNWaWRlb1RleHR1cmUmJmZiKGphKTtpZigwPGphLnZlcnNpb24mJnlhLl9fdmVyc2lvbiE9PWphLnZlcnNpb24pe3ZhciBWYT1qYS5pbWFnZTtpZih2b2lkIDA9PT1WYSljb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFRleHR1cmUgbWFya2VkIGZvciB1cGRhdGUgYnV0IGltYWdlIGlzIHVuZGVmaW5lZCIpO2Vsc2UgaWYoITE9PT1WYS5jb21wbGV0ZSljb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFRleHR1cmUgbWFya2VkIGZvciB1cGRhdGUgYnV0IGltYWdlIGlzIGluY29tcGxldGUiKTtlbHNle3NhKHlhLGphLHBhKTtyZXR1cm59fWguYWN0aXZlVGV4dHVyZSgzMzk4NCtwYSk7aC5iaW5kVGV4dHVyZSgzNTUzLHlhLl9fd2ViZ2xUZXh0dXJlKX1mdW5jdGlvbiB0YShqYSxwYSl7dmFyIHlhPW4uZ2V0KGphKTtpZig2PT09amEuaW1hZ2UubGVuZ3RoKWlmKDA8amEudmVyc2lvbiYmeWEuX192ZXJzaW9uIT09CmphLnZlcnNpb24pe0JhKHlhLGphKTtoLmFjdGl2ZVRleHR1cmUoMzM5ODQrcGEpO2guYmluZFRleHR1cmUoMzQwNjcseWEuX193ZWJnbFRleHR1cmUpO2IucGl4ZWxTdG9yZWkoMzc0NDAsamEuZmxpcFkpO3BhPWphJiZqYS5pc0NvbXByZXNzZWRUZXh0dXJlO2Zvcih2YXIgVmE9amEuaW1hZ2VbMF0mJmphLmltYWdlWzBdLmlzRGF0YVRleHR1cmUsWmE9W10sVGE9MDs2PlRhO1RhKyspWmFbVGFdPXBhfHxWYT9WYT9qYS5pbWFnZVtUYV0uaW1hZ2U6amEuaW1hZ2VbVGFdOkgoamEuaW1hZ2VbVGFdLCExLCEwLHUubWF4Q3ViZW1hcFNpemUpO3ZhciBpYj1aYVswXSxtYT1JKGliKXx8dS5pc1dlYkdMMixJYT13LmNvbnZlcnQoamEuZm9ybWF0KSxPYT13LmNvbnZlcnQoamEudHlwZSksdWI9VShJYSxPYSk7dmEoMzQwNjcsamEsbWEpO2ZvcihUYT0wOzY+VGE7VGErKylpZihwYSlmb3IodmFyIGFiLEtiPVphW1RhXS5taXBtYXBzLGxiPTAsUWE9S2IubGVuZ3RoO2xiPFFhO2xiKyspYWI9S2JbbGJdLAoxMDIzIT09amEuZm9ybWF0JiYxMDIyIT09amEuZm9ybWF0Py0xPGguZ2V0Q29tcHJlc3NlZFRleHR1cmVGb3JtYXRzKCkuaW5kZXhPZihJYSk/aC5jb21wcmVzc2VkVGV4SW1hZ2UyRCgzNDA2OStUYSxsYix1YixhYi53aWR0aCxhYi5oZWlnaHQsMCxhYi5kYXRhKTpjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IEF0dGVtcHQgdG8gbG9hZCB1bnN1cHBvcnRlZCBjb21wcmVzc2VkIHRleHR1cmUgZm9ybWF0IGluIC5zZXRUZXh0dXJlQ3ViZSgpIik6aC50ZXhJbWFnZTJEKDM0MDY5K1RhLGxiLHViLGFiLndpZHRoLGFiLmhlaWdodCwwLElhLE9hLGFiLmRhdGEpO2Vsc2UgVmE/aC50ZXhJbWFnZTJEKDM0MDY5K1RhLDAsdWIsWmFbVGFdLndpZHRoLFphW1RhXS5oZWlnaHQsMCxJYSxPYSxaYVtUYV0uZGF0YSk6aC50ZXhJbWFnZTJEKDM0MDY5K1RhLDAsdWIsSWEsT2EsWmFbVGFdKTt5YS5fX21heE1pcExldmVsPXBhP0tiLmxlbmd0aC0xOjA7UShqYSxtYSkmJlIoMzQwNjcsCmphLGliLndpZHRoLGliLmhlaWdodCk7eWEuX192ZXJzaW9uPWphLnZlcnNpb247aWYoamEub25VcGRhdGUpamEub25VcGRhdGUoamEpfWVsc2UgaC5hY3RpdmVUZXh0dXJlKDMzOTg0K3BhKSxoLmJpbmRUZXh0dXJlKDM0MDY3LHlhLl9fd2ViZ2xUZXh0dXJlKX1mdW5jdGlvbiBuYShqYSxwYSl7aC5hY3RpdmVUZXh0dXJlKDMzOTg0K3BhKTtoLmJpbmRUZXh0dXJlKDM0MDY3LG4uZ2V0KGphKS5fX3dlYmdsVGV4dHVyZSl9ZnVuY3Rpb24gdmEoamEscGEseWEpe3lhPyhiLnRleFBhcmFtZXRlcmkoamEsMTAyNDIsdy5jb252ZXJ0KHBhLndyYXBTKSksYi50ZXhQYXJhbWV0ZXJpKGphLDEwMjQzLHcuY29udmVydChwYS53cmFwVCkpLDMyODc5IT09amEmJjM1ODY2IT09amF8fGIudGV4UGFyYW1ldGVyaShqYSwzMjg4Mix3LmNvbnZlcnQocGEud3JhcFIpKSxiLnRleFBhcmFtZXRlcmkoamEsMTAyNDAsdy5jb252ZXJ0KHBhLm1hZ0ZpbHRlcikpLGIudGV4UGFyYW1ldGVyaShqYSwxMDI0MSwKdy5jb252ZXJ0KHBhLm1pbkZpbHRlcikpKTooYi50ZXhQYXJhbWV0ZXJpKGphLDEwMjQyLDMzMDcxKSxiLnRleFBhcmFtZXRlcmkoamEsMTAyNDMsMzMwNzEpLDMyODc5IT09amEmJjM1ODY2IT09amF8fGIudGV4UGFyYW1ldGVyaShqYSwzMjg4MiwzMzA3MSksMTAwMT09PXBhLndyYXBTJiYxMDAxPT09cGEud3JhcFR8fGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogVGV4dHVyZSBpcyBub3QgcG93ZXIgb2YgdHdvLiBUZXh0dXJlLndyYXBTIGFuZCBUZXh0dXJlLndyYXBUIHNob3VsZCBiZSBzZXQgdG8gVEhSRUUuQ2xhbXBUb0VkZ2VXcmFwcGluZy4iKSxiLnRleFBhcmFtZXRlcmkoamEsMTAyNDAsVyhwYS5tYWdGaWx0ZXIpKSxiLnRleFBhcmFtZXRlcmkoamEsMTAyNDEsVyhwYS5taW5GaWx0ZXIpKSwxMDAzIT09cGEubWluRmlsdGVyJiYxMDA2IT09cGEubWluRmlsdGVyJiZjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFRleHR1cmUgaXMgbm90IHBvd2VyIG9mIHR3by4gVGV4dHVyZS5taW5GaWx0ZXIgc2hvdWxkIGJlIHNldCB0byBUSFJFRS5OZWFyZXN0RmlsdGVyIG9yIFRIUkVFLkxpbmVhckZpbHRlci4iKSk7CiEoeWE9ZS5nZXQoIkVYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpKXx8MTAxNT09PXBhLnR5cGUmJm51bGw9PT1lLmdldCgiT0VTX3RleHR1cmVfZmxvYXRfbGluZWFyIil8fDEwMTY9PT1wYS50eXBlJiZudWxsPT09KHUuaXNXZWJHTDJ8fGUuZ2V0KCJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0X2xpbmVhciIpKXx8ISgxPHBhLmFuaXNvdHJvcHl8fG4uZ2V0KHBhKS5fX2N1cnJlbnRBbmlzb3Ryb3B5KXx8KGIudGV4UGFyYW1ldGVyZihqYSx5YS5URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVCxNYXRoLm1pbihwYS5hbmlzb3Ryb3B5LHUuZ2V0TWF4QW5pc290cm9weSgpKSksbi5nZXQocGEpLl9fY3VycmVudEFuaXNvdHJvcHk9cGEuYW5pc290cm9weSl9ZnVuY3Rpb24gQmEoamEscGEpe3ZvaWQgMD09PWphLl9fd2ViZ2xJbml0JiYoamEuX193ZWJnbEluaXQ9ITAscGEuYWRkRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsWiksamEuX193ZWJnbFRleHR1cmU9Yi5jcmVhdGVUZXh0dXJlKCksCnoubWVtb3J5LnRleHR1cmVzKyspfWZ1bmN0aW9uIHNhKGphLHBhLHlhKXt2YXIgVmE9MzU1MztwYS5pc0RhdGFUZXh0dXJlMkRBcnJheSYmKFZhPTM1ODY2KTtwYS5pc0RhdGFUZXh0dXJlM0QmJihWYT0zMjg3OSk7QmEoamEscGEpO2guYWN0aXZlVGV4dHVyZSgzMzk4NCt5YSk7aC5iaW5kVGV4dHVyZShWYSxqYS5fX3dlYmdsVGV4dHVyZSk7Yi5waXhlbFN0b3JlaSgzNzQ0MCxwYS5mbGlwWSk7Yi5waXhlbFN0b3JlaSgzNzQ0MSxwYS5wcmVtdWx0aXBseUFscGhhKTtiLnBpeGVsU3RvcmVpKDMzMTcscGEudW5wYWNrQWxpZ25tZW50KTt5YT1PKHBhKSYmITE9PT1JKHBhLmltYWdlKTt5YT1IKHBhLmltYWdlLHlhLCExLHUubWF4VGV4dHVyZVNpemUpO3ZhciBaYT1JKHlhKXx8dS5pc1dlYkdMMixUYT13LmNvbnZlcnQocGEuZm9ybWF0KSxpYj13LmNvbnZlcnQocGEudHlwZSksbWE9VShUYSxpYik7dmEoVmEscGEsWmEpO3ZhciBJYT1wYS5taXBtYXBzO2lmKHBhLmlzRGVwdGhUZXh0dXJlKXttYT0KNjQwMjtpZigxMDE1PT09cGEudHlwZSl7aWYoIXUuaXNXZWJHTDIpdGhyb3cgRXJyb3IoIkZsb2F0IERlcHRoIFRleHR1cmUgb25seSBzdXBwb3J0ZWQgaW4gV2ViR0wyLjAiKTttYT0zNjAxMn1lbHNlIHUuaXNXZWJHTDImJihtYT0zMzE4OSk7MTAyNj09PXBhLmZvcm1hdCYmNjQwMj09PW1hJiYxMDEyIT09cGEudHlwZSYmMTAxNCE9PXBhLnR5cGUmJihjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFVzZSBVbnNpZ25lZFNob3J0VHlwZSBvciBVbnNpZ25lZEludFR5cGUgZm9yIERlcHRoRm9ybWF0IERlcHRoVGV4dHVyZS4iKSxwYS50eXBlPTEwMTIsaWI9dy5jb252ZXJ0KHBhLnR5cGUpKTsxMDI3PT09cGEuZm9ybWF0JiYobWE9MzQwNDEsMTAyMCE9PXBhLnR5cGUmJihjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFVzZSBVbnNpZ25lZEludDI0OFR5cGUgZm9yIERlcHRoU3RlbmNpbEZvcm1hdCBEZXB0aFRleHR1cmUuIikscGEudHlwZT0xMDIwLGliPQp3LmNvbnZlcnQocGEudHlwZSkpKTtoLnRleEltYWdlMkQoMzU1MywwLG1hLHlhLndpZHRoLHlhLmhlaWdodCwwLFRhLGliLG51bGwpfWVsc2UgaWYocGEuaXNEYXRhVGV4dHVyZSlpZigwPElhLmxlbmd0aCYmWmEpe2Zvcih2YXIgT2E9MCx1Yj1JYS5sZW5ndGg7T2E8dWI7T2ErKylWYT1JYVtPYV0saC50ZXhJbWFnZTJEKDM1NTMsT2EsbWEsVmEud2lkdGgsVmEuaGVpZ2h0LDAsVGEsaWIsVmEuZGF0YSk7cGEuZ2VuZXJhdGVNaXBtYXBzPSExO2phLl9fbWF4TWlwTGV2ZWw9SWEubGVuZ3RoLTF9ZWxzZSBoLnRleEltYWdlMkQoMzU1MywwLG1hLHlhLndpZHRoLHlhLmhlaWdodCwwLFRhLGliLHlhLmRhdGEpLGphLl9fbWF4TWlwTGV2ZWw9MDtlbHNlIGlmKHBhLmlzQ29tcHJlc3NlZFRleHR1cmUpe09hPTA7Zm9yKHViPUlhLmxlbmd0aDtPYTx1YjtPYSsrKVZhPUlhW09hXSwxMDIzIT09cGEuZm9ybWF0JiYxMDIyIT09cGEuZm9ybWF0Py0xPGguZ2V0Q29tcHJlc3NlZFRleHR1cmVGb3JtYXRzKCkuaW5kZXhPZihUYSk/CmguY29tcHJlc3NlZFRleEltYWdlMkQoMzU1MyxPYSxtYSxWYS53aWR0aCxWYS5oZWlnaHQsMCxWYS5kYXRhKTpjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IEF0dGVtcHQgdG8gbG9hZCB1bnN1cHBvcnRlZCBjb21wcmVzc2VkIHRleHR1cmUgZm9ybWF0IGluIC51cGxvYWRUZXh0dXJlKCkiKTpoLnRleEltYWdlMkQoMzU1MyxPYSxtYSxWYS53aWR0aCxWYS5oZWlnaHQsMCxUYSxpYixWYS5kYXRhKTtqYS5fX21heE1pcExldmVsPUlhLmxlbmd0aC0xfWVsc2UgaWYocGEuaXNEYXRhVGV4dHVyZTJEQXJyYXkpaC50ZXhJbWFnZTNEKDM1ODY2LDAsbWEseWEud2lkdGgseWEuaGVpZ2h0LHlhLmRlcHRoLDAsVGEsaWIseWEuZGF0YSksamEuX19tYXhNaXBMZXZlbD0wO2Vsc2UgaWYocGEuaXNEYXRhVGV4dHVyZTNEKWgudGV4SW1hZ2UzRCgzMjg3OSwwLG1hLHlhLndpZHRoLHlhLmhlaWdodCx5YS5kZXB0aCwwLFRhLGliLHlhLmRhdGEpLGphLl9fbWF4TWlwTGV2ZWw9MDtlbHNlIGlmKDA8CklhLmxlbmd0aCYmWmEpe09hPTA7Zm9yKHViPUlhLmxlbmd0aDtPYTx1YjtPYSsrKVZhPUlhW09hXSxoLnRleEltYWdlMkQoMzU1MyxPYSxtYSxUYSxpYixWYSk7cGEuZ2VuZXJhdGVNaXBtYXBzPSExO2phLl9fbWF4TWlwTGV2ZWw9SWEubGVuZ3RoLTF9ZWxzZSBoLnRleEltYWdlMkQoMzU1MywwLG1hLFRhLGliLHlhKSxqYS5fX21heE1pcExldmVsPTA7UShwYSxaYSkmJlIoMzU1MyxwYSx5YS53aWR0aCx5YS5oZWlnaHQpO2phLl9fdmVyc2lvbj1wYS52ZXJzaW9uO2lmKHBhLm9uVXBkYXRlKXBhLm9uVXBkYXRlKHBhKX1mdW5jdGlvbiBEYShqYSxwYSx5YSxWYSl7dmFyIFphPXcuY29udmVydChwYS50ZXh0dXJlLmZvcm1hdCksVGE9dy5jb252ZXJ0KHBhLnRleHR1cmUudHlwZSksaWI9VShaYSxUYSk7aC50ZXhJbWFnZTJEKFZhLDAsaWIscGEud2lkdGgscGEuaGVpZ2h0LDAsWmEsVGEsbnVsbCk7Yi5iaW5kRnJhbWVidWZmZXIoMzYxNjAsamEpO2IuZnJhbWVidWZmZXJUZXh0dXJlMkQoMzYxNjAsCnlhLFZhLG4uZ2V0KHBhLnRleHR1cmUpLl9fd2ViZ2xUZXh0dXJlLDApO2IuYmluZEZyYW1lYnVmZmVyKDM2MTYwLG51bGwpfWZ1bmN0aW9uIEhhKGphLHBhLHlhKXtiLmJpbmRSZW5kZXJidWZmZXIoMzYxNjEsamEpO2lmKHBhLmRlcHRoQnVmZmVyJiYhcGEuc3RlbmNpbEJ1ZmZlcil5YT8oeWE9TGEocGEpLGIucmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKDM2MTYxLHlhLDMzMTg5LHBhLndpZHRoLHBhLmhlaWdodCkpOmIucmVuZGVyYnVmZmVyU3RvcmFnZSgzNjE2MSwzMzE4OSxwYS53aWR0aCxwYS5oZWlnaHQpLGIuZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoMzYxNjAsMzYwOTYsMzYxNjEsamEpO2Vsc2UgaWYocGEuZGVwdGhCdWZmZXImJnBhLnN0ZW5jaWxCdWZmZXIpeWE/KHlhPUxhKHBhKSxiLnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSgzNjE2MSx5YSwzNDA0MSxwYS53aWR0aCxwYS5oZWlnaHQpKTpiLnJlbmRlcmJ1ZmZlclN0b3JhZ2UoMzYxNjEsMzQwNDEsCnBhLndpZHRoLHBhLmhlaWdodCksYi5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcigzNjE2MCwzMzMwNiwzNjE2MSxqYSk7ZWxzZXtqYT13LmNvbnZlcnQocGEudGV4dHVyZS5mb3JtYXQpO3ZhciBWYT13LmNvbnZlcnQocGEudGV4dHVyZS50eXBlKTtqYT1VKGphLFZhKTt5YT8oeWE9TGEocGEpLGIucmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKDM2MTYxLHlhLGphLHBhLndpZHRoLHBhLmhlaWdodCkpOmIucmVuZGVyYnVmZmVyU3RvcmFnZSgzNjE2MSxqYSxwYS53aWR0aCxwYS5oZWlnaHQpfWIuYmluZFJlbmRlcmJ1ZmZlcigzNjE2MSxudWxsKX1mdW5jdGlvbiBLYShqYSxwYSl7aWYocGEmJnBhLmlzV2ViR0xSZW5kZXJUYXJnZXRDdWJlKXRocm93IEVycm9yKCJEZXB0aCBUZXh0dXJlIHdpdGggY3ViZSByZW5kZXIgdGFyZ2V0cyBpcyBub3Qgc3VwcG9ydGVkIik7Yi5iaW5kRnJhbWVidWZmZXIoMzYxNjAsamEpO2lmKCFwYS5kZXB0aFRleHR1cmV8fCFwYS5kZXB0aFRleHR1cmUuaXNEZXB0aFRleHR1cmUpdGhyb3cgRXJyb3IoInJlbmRlclRhcmdldC5kZXB0aFRleHR1cmUgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBUSFJFRS5EZXB0aFRleHR1cmUiKTsKbi5nZXQocGEuZGVwdGhUZXh0dXJlKS5fX3dlYmdsVGV4dHVyZSYmcGEuZGVwdGhUZXh0dXJlLmltYWdlLndpZHRoPT09cGEud2lkdGgmJnBhLmRlcHRoVGV4dHVyZS5pbWFnZS5oZWlnaHQ9PT1wYS5oZWlnaHR8fChwYS5kZXB0aFRleHR1cmUuaW1hZ2Uud2lkdGg9cGEud2lkdGgscGEuZGVwdGhUZXh0dXJlLmltYWdlLmhlaWdodD1wYS5oZWlnaHQscGEuZGVwdGhUZXh0dXJlLm5lZWRzVXBkYXRlPSEwKTtpYShwYS5kZXB0aFRleHR1cmUsMCk7amE9bi5nZXQocGEuZGVwdGhUZXh0dXJlKS5fX3dlYmdsVGV4dHVyZTtpZigxMDI2PT09cGEuZGVwdGhUZXh0dXJlLmZvcm1hdCliLmZyYW1lYnVmZmVyVGV4dHVyZTJEKDM2MTYwLDM2MDk2LDM1NTMsamEsMCk7ZWxzZSBpZigxMDI3PT09cGEuZGVwdGhUZXh0dXJlLmZvcm1hdCliLmZyYW1lYnVmZmVyVGV4dHVyZTJEKDM2MTYwLDMzMzA2LDM1NTMsamEsMCk7ZWxzZSB0aHJvdyBFcnJvcigiVW5rbm93biBkZXB0aFRleHR1cmUgZm9ybWF0Iik7Cn1mdW5jdGlvbiBOYShqYSl7dmFyIHBhPW4uZ2V0KGphKSx5YT0hMD09PWphLmlzV2ViR0xSZW5kZXJUYXJnZXRDdWJlO2lmKGphLmRlcHRoVGV4dHVyZSl7aWYoeWEpdGhyb3cgRXJyb3IoInRhcmdldC5kZXB0aFRleHR1cmUgbm90IHN1cHBvcnRlZCBpbiBDdWJlIHJlbmRlciB0YXJnZXRzIik7S2EocGEuX193ZWJnbEZyYW1lYnVmZmVyLGphKX1lbHNlIGlmKHlhKWZvcihwYS5fX3dlYmdsRGVwdGhidWZmZXI9W10seWE9MDs2PnlhO3lhKyspYi5iaW5kRnJhbWVidWZmZXIoMzYxNjAscGEuX193ZWJnbEZyYW1lYnVmZmVyW3lhXSkscGEuX193ZWJnbERlcHRoYnVmZmVyW3lhXT1iLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpLEhhKHBhLl9fd2ViZ2xEZXB0aGJ1ZmZlclt5YV0samEpO2Vsc2UgYi5iaW5kRnJhbWVidWZmZXIoMzYxNjAscGEuX193ZWJnbEZyYW1lYnVmZmVyKSxwYS5fX3dlYmdsRGVwdGhidWZmZXI9Yi5jcmVhdGVSZW5kZXJidWZmZXIoKSxIYShwYS5fX3dlYmdsRGVwdGhidWZmZXIsCmphKTtiLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxudWxsKX1mdW5jdGlvbiBMYShqYSl7cmV0dXJuIHUuaXNXZWJHTDImJmphLmlzV2ViR0xNdWx0aXNhbXBsZVJlbmRlclRhcmdldD9NYXRoLm1pbih1Lm1heFNhbXBsZXMsamEuc2FtcGxlcyk6MH1mdW5jdGlvbiBmYihqYSl7dmFyIHBhPWphLmlkLHlhPXoucmVuZGVyLmZyYW1lO2NiW3BhXSE9PXlhJiYoY2JbcGFdPXlhLGphLnVwZGF0ZSgpKX12YXIgY2I9e30sSmEsaGI9InVuZGVmaW5lZCIhPT10eXBlb2YgT2Zmc2NyZWVuQ2FudmFzLFVhPTAsSGI9ITEscWI9ITE7dGhpcy5hbGxvY2F0ZVRleHR1cmVVbml0PWZ1bmN0aW9uKCl7dmFyIGphPVVhO2phPj11Lm1heFRleHR1cmVzJiZjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMVGV4dHVyZXM6IFRyeWluZyB0byB1c2UgIitqYSsiIHRleHR1cmUgdW5pdHMgd2hpbGUgdGhpcyBHUFUgc3VwcG9ydHMgb25seSAiK3UubWF4VGV4dHVyZXMpO1VhKz0xO3JldHVybiBqYX07dGhpcy5yZXNldFRleHR1cmVVbml0cz0KZnVuY3Rpb24oKXtVYT0wfTt0aGlzLnNldFRleHR1cmUyRD1pYTt0aGlzLnNldFRleHR1cmUyREFycmF5PWZ1bmN0aW9uKGphLHBhKXt2YXIgeWE9bi5nZXQoamEpOzA8amEudmVyc2lvbiYmeWEuX192ZXJzaW9uIT09amEudmVyc2lvbj9zYSh5YSxqYSxwYSk6KGguYWN0aXZlVGV4dHVyZSgzMzk4NCtwYSksaC5iaW5kVGV4dHVyZSgzNTg2Nix5YS5fX3dlYmdsVGV4dHVyZSkpfTt0aGlzLnNldFRleHR1cmUzRD1mdW5jdGlvbihqYSxwYSl7dmFyIHlhPW4uZ2V0KGphKTswPGphLnZlcnNpb24mJnlhLl9fdmVyc2lvbiE9PWphLnZlcnNpb24/c2EoeWEsamEscGEpOihoLmFjdGl2ZVRleHR1cmUoMzM5ODQrcGEpLGguYmluZFRleHR1cmUoMzI4NzkseWEuX193ZWJnbFRleHR1cmUpKX07dGhpcy5zZXRUZXh0dXJlQ3ViZT10YTt0aGlzLnNldFRleHR1cmVDdWJlRHluYW1pYz1uYTt0aGlzLnNldHVwUmVuZGVyVGFyZ2V0PWZ1bmN0aW9uKGphKXt2YXIgcGE9bi5nZXQoamEpLHlhPW4uZ2V0KGphLnRleHR1cmUpOwpqYS5hZGRFdmVudExpc3RlbmVyKCJkaXNwb3NlIixmYSk7eWEuX193ZWJnbFRleHR1cmU9Yi5jcmVhdGVUZXh0dXJlKCk7ei5tZW1vcnkudGV4dHVyZXMrKzt2YXIgVmE9ITA9PT1qYS5pc1dlYkdMUmVuZGVyVGFyZ2V0Q3ViZSxaYT0hMD09PWphLmlzV2ViR0xNdWx0aXNhbXBsZVJlbmRlclRhcmdldCxUYT1JKGphKXx8dS5pc1dlYkdMMjtpZihWYSlmb3IocGEuX193ZWJnbEZyYW1lYnVmZmVyPVtdLFphPTA7Nj5aYTtaYSsrKXBhLl9fd2ViZ2xGcmFtZWJ1ZmZlcltaYV09Yi5jcmVhdGVGcmFtZWJ1ZmZlcigpO2Vsc2UgaWYocGEuX193ZWJnbEZyYW1lYnVmZmVyPWIuY3JlYXRlRnJhbWVidWZmZXIoKSxaYSlpZih1LmlzV2ViR0wyKXtwYS5fX3dlYmdsTXVsdGlzYW1wbGVkRnJhbWVidWZmZXI9Yi5jcmVhdGVGcmFtZWJ1ZmZlcigpO3BhLl9fd2ViZ2xDb2xvclJlbmRlcmJ1ZmZlcj1iLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpO2IuYmluZFJlbmRlcmJ1ZmZlcigzNjE2MSxwYS5fX3dlYmdsQ29sb3JSZW5kZXJidWZmZXIpOwpaYT13LmNvbnZlcnQoamEudGV4dHVyZS5mb3JtYXQpO3ZhciBpYj13LmNvbnZlcnQoamEudGV4dHVyZS50eXBlKTtaYT1VKFphLGliKTtpYj1MYShqYSk7Yi5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoMzYxNjEsaWIsWmEsamEud2lkdGgsamEuaGVpZ2h0KTtiLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxwYS5fX3dlYmdsTXVsdGlzYW1wbGVkRnJhbWVidWZmZXIpO2IuZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoMzYxNjAsMzYwNjQsMzYxNjEscGEuX193ZWJnbENvbG9yUmVuZGVyYnVmZmVyKTtiLmJpbmRSZW5kZXJidWZmZXIoMzYxNjEsbnVsbCk7amEuZGVwdGhCdWZmZXImJihwYS5fX3dlYmdsRGVwdGhSZW5kZXJidWZmZXI9Yi5jcmVhdGVSZW5kZXJidWZmZXIoKSxIYShwYS5fX3dlYmdsRGVwdGhSZW5kZXJidWZmZXIsamEsITApKTtiLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxudWxsKX1lbHNlIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogV2ViR0xNdWx0aXNhbXBsZVJlbmRlclRhcmdldCBjYW4gb25seSBiZSB1c2VkIHdpdGggV2ViR0wyLiIpOwppZihWYSl7aC5iaW5kVGV4dHVyZSgzNDA2Nyx5YS5fX3dlYmdsVGV4dHVyZSk7dmEoMzQwNjcsamEudGV4dHVyZSxUYSk7Zm9yKFphPTA7Nj5aYTtaYSsrKURhKHBhLl9fd2ViZ2xGcmFtZWJ1ZmZlcltaYV0samEsMzYwNjQsMzQwNjkrWmEpO1EoamEudGV4dHVyZSxUYSkmJlIoMzQwNjcsamEudGV4dHVyZSxqYS53aWR0aCxqYS5oZWlnaHQpO2guYmluZFRleHR1cmUoMzQwNjcsbnVsbCl9ZWxzZSBoLmJpbmRUZXh0dXJlKDM1NTMseWEuX193ZWJnbFRleHR1cmUpLHZhKDM1NTMsamEudGV4dHVyZSxUYSksRGEocGEuX193ZWJnbEZyYW1lYnVmZmVyLGphLDM2MDY0LDM1NTMpLFEoamEudGV4dHVyZSxUYSkmJlIoMzU1MyxqYS50ZXh0dXJlLGphLndpZHRoLGphLmhlaWdodCksaC5iaW5kVGV4dHVyZSgzNTUzLG51bGwpO2phLmRlcHRoQnVmZmVyJiZOYShqYSl9O3RoaXMudXBkYXRlUmVuZGVyVGFyZ2V0TWlwbWFwPWZ1bmN0aW9uKGphKXt2YXIgcGE9amEudGV4dHVyZSx5YT1JKGphKXx8CnUuaXNXZWJHTDI7aWYoUShwYSx5YSkpe3lhPWphLmlzV2ViR0xSZW5kZXJUYXJnZXRDdWJlPzM0MDY3OjM1NTM7dmFyIFZhPW4uZ2V0KHBhKS5fX3dlYmdsVGV4dHVyZTtoLmJpbmRUZXh0dXJlKHlhLFZhKTtSKHlhLHBhLGphLndpZHRoLGphLmhlaWdodCk7aC5iaW5kVGV4dHVyZSh5YSxudWxsKX19O3RoaXMudXBkYXRlTXVsdGlzYW1wbGVSZW5kZXJUYXJnZXQ9ZnVuY3Rpb24oamEpe2lmKGphLmlzV2ViR0xNdWx0aXNhbXBsZVJlbmRlclRhcmdldClpZih1LmlzV2ViR0wyKXt2YXIgcGE9bi5nZXQoamEpO2IuYmluZEZyYW1lYnVmZmVyKDM2MDA4LHBhLl9fd2ViZ2xNdWx0aXNhbXBsZWRGcmFtZWJ1ZmZlcik7Yi5iaW5kRnJhbWVidWZmZXIoMzYwMDkscGEuX193ZWJnbEZyYW1lYnVmZmVyKTtwYT1qYS53aWR0aDt2YXIgeWE9amEuaGVpZ2h0LFZhPTE2Mzg0O2phLmRlcHRoQnVmZmVyJiYoVmF8PTI1Nik7amEuc3RlbmNpbEJ1ZmZlciYmKFZhfD0xMDI0KTtiLmJsaXRGcmFtZWJ1ZmZlcigwLAowLHBhLHlhLDAsMCxwYSx5YSxWYSw5NzI4KX1lbHNlIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogV2ViR0xNdWx0aXNhbXBsZVJlbmRlclRhcmdldCBjYW4gb25seSBiZSB1c2VkIHdpdGggV2ViR0wyLiIpfTt0aGlzLnNhZmVTZXRUZXh0dXJlMkQ9ZnVuY3Rpb24oamEscGEpe2phJiZqYS5pc1dlYkdMUmVuZGVyVGFyZ2V0JiYoITE9PT1IYiYmKGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xUZXh0dXJlcy5zYWZlU2V0VGV4dHVyZTJEOiBkb24ndCB1c2UgcmVuZGVyIHRhcmdldHMgYXMgdGV4dHVyZXMuIFVzZSB0aGVpciAudGV4dHVyZSBwcm9wZXJ0eSBpbnN0ZWFkLiIpLEhiPSEwKSxqYT1qYS50ZXh0dXJlKTtpYShqYSxwYSl9O3RoaXMuc2FmZVNldFRleHR1cmVDdWJlPWZ1bmN0aW9uKGphLHBhKXtqYSYmamEuaXNXZWJHTFJlbmRlclRhcmdldEN1YmUmJighMT09PXFiJiYoY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFRleHR1cmVzLnNhZmVTZXRUZXh0dXJlQ3ViZTogZG9uJ3QgdXNlIGN1YmUgcmVuZGVyIHRhcmdldHMgYXMgdGV4dHVyZXMuIFVzZSB0aGVpciAudGV4dHVyZSBwcm9wZXJ0eSBpbnN0ZWFkLiIpLApxYj0hMCksamE9amEudGV4dHVyZSk7amEmJmphLmlzQ3ViZVRleHR1cmV8fEFycmF5LmlzQXJyYXkoamEuaW1hZ2UpJiY2PT09amEuaW1hZ2UubGVuZ3RoP3RhKGphLHBhKTpuYShqYSxwYSl9fWZ1bmN0aW9uIG5sKGIsZSxoKXtyZXR1cm57Y29udmVydDpmdW5jdGlvbihuKXtpZigxRTM9PT1uKXJldHVybiAxMDQ5NztpZigxMDAxPT09bilyZXR1cm4gMzMwNzE7aWYoMTAwMj09PW4pcmV0dXJuIDMzNjQ4O2lmKDEwMDM9PT1uKXJldHVybiA5NzI4O2lmKDEwMDQ9PT1uKXJldHVybiA5OTg0O2lmKDEwMDU9PT1uKXJldHVybiA5OTg2O2lmKDEwMDY9PT1uKXJldHVybiA5NzI5O2lmKDEwMDc9PT1uKXJldHVybiA5OTg1O2lmKDEwMDg9PT1uKXJldHVybiA5OTg3O2lmKDEwMDk9PT1uKXJldHVybiA1MTIxO2lmKDEwMTc9PT1uKXJldHVybiAzMjgxOTtpZigxMDE4PT09bilyZXR1cm4gMzI4MjA7aWYoMTAxOT09PW4pcmV0dXJuIDMzNjM1O2lmKDEwMTA9PT1uKXJldHVybiA1MTIwO2lmKDEwMTE9PT0KbilyZXR1cm4gNTEyMjtpZigxMDEyPT09bilyZXR1cm4gNTEyMztpZigxMDEzPT09bilyZXR1cm4gNTEyNDtpZigxMDE0PT09bilyZXR1cm4gNTEyNTtpZigxMDE1PT09bilyZXR1cm4gNTEyNjtpZigxMDE2PT09bil7aWYoaC5pc1dlYkdMMilyZXR1cm4gNTEzMTt2YXIgdT1lLmdldCgiT0VTX3RleHR1cmVfaGFsZl9mbG9hdCIpO2lmKG51bGwhPT11KXJldHVybiB1LkhBTEZfRkxPQVRfT0VTfWlmKDEwMjE9PT1uKXJldHVybiA2NDA2O2lmKDEwMjI9PT1uKXJldHVybiA2NDA3O2lmKDEwMjM9PT1uKXJldHVybiA2NDA4O2lmKDEwMjQ9PT1uKXJldHVybiA2NDA5O2lmKDEwMjU9PT1uKXJldHVybiA2NDEwO2lmKDEwMjY9PT1uKXJldHVybiA2NDAyO2lmKDEwMjc9PT1uKXJldHVybiAzNDA0MTtpZigxMDI4PT09bilyZXR1cm4gNjQwMztpZigxMDA9PT1uKXJldHVybiAzMjc3NDtpZigxMDE9PT1uKXJldHVybiAzMjc3ODtpZigxMDI9PT1uKXJldHVybiAzMjc3OTtpZigyMDA9PT1uKXJldHVybiAwOwppZigyMDE9PT1uKXJldHVybiAxO2lmKDIwMj09PW4pcmV0dXJuIDc2ODtpZigyMDM9PT1uKXJldHVybiA3Njk7aWYoMjA0PT09bilyZXR1cm4gNzcwO2lmKDIwNT09PW4pcmV0dXJuIDc3MTtpZigyMDY9PT1uKXJldHVybiA3NzI7aWYoMjA3PT09bilyZXR1cm4gNzczO2lmKDIwOD09PW4pcmV0dXJuIDc3NDtpZigyMDk9PT1uKXJldHVybiA3NzU7aWYoMjEwPT09bilyZXR1cm4gNzc2O2lmKDMzNzc2PT09bnx8MzM3Nzc9PT1ufHwzMzc3OD09PW58fDMzNzc5PT09bilpZih1PWUuZ2V0KCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0YyIpLG51bGwhPT11KXtpZigzMzc3Nj09PW4pcmV0dXJuIHUuQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVDtpZigzMzc3Nz09PW4pcmV0dXJuIHUuQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQ7aWYoMzM3Nzg9PT1uKXJldHVybiB1LkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfRVhUO2lmKDMzNzc5PT09bilyZXR1cm4gdS5DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0VYVH1pZigzNTg0MD09PQpufHwzNTg0MT09PW58fDM1ODQyPT09bnx8MzU4NDM9PT1uKWlmKHU9ZS5nZXQoIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9wdnJ0YyIpLG51bGwhPT11KXtpZigzNTg0MD09PW4pcmV0dXJuIHUuQ09NUFJFU1NFRF9SR0JfUFZSVENfNEJQUFYxX0lNRztpZigzNTg0MT09PW4pcmV0dXJuIHUuQ09NUFJFU1NFRF9SR0JfUFZSVENfMkJQUFYxX0lNRztpZigzNTg0Mj09PW4pcmV0dXJuIHUuQ09NUFJFU1NFRF9SR0JBX1BWUlRDXzRCUFBWMV9JTUc7aWYoMzU4NDM9PT1uKXJldHVybiB1LkNPTVBSRVNTRURfUkdCQV9QVlJUQ18yQlBQVjFfSU1HfWlmKDM2MTk2PT09biYmKHU9ZS5nZXQoIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9ldGMxIiksbnVsbCE9PXUpKXJldHVybiB1LkNPTVBSRVNTRURfUkdCX0VUQzFfV0VCR0w7aWYoMzc4MDg9PT1ufHwzNzgwOT09PW58fDM3ODEwPT09bnx8Mzc4MTE9PT1ufHwzNzgxMj09PW58fDM3ODEzPT09bnx8Mzc4MTQ9PT1ufHwzNzgxNT09PW58fDM3ODE2PT09Cm58fDM3ODE3PT09bnx8Mzc4MTg9PT1ufHwzNzgxOT09PW58fDM3ODIwPT09bnx8Mzc4MjE9PT1uKWlmKHU9ZS5nZXQoIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9hc3RjIiksbnVsbCE9PXUpcmV0dXJuIG47aWYoMTAzPT09bnx8MTA0PT09bil7aWYoaC5pc1dlYkdMMil7aWYoMTAzPT09bilyZXR1cm4gMzI3NzU7aWYoMTA0PT09bilyZXR1cm4gMzI3NzZ9dT1lLmdldCgiRVhUX2JsZW5kX21pbm1heCIpO2lmKG51bGwhPT11KXtpZigxMDM9PT1uKXJldHVybiB1Lk1JTl9FWFQ7aWYoMTA0PT09bilyZXR1cm4gdS5NQVhfRVhUfX1pZigxMDIwPT09bil7aWYoaC5pc1dlYkdMMilyZXR1cm4gMzQwNDI7dT1lLmdldCgiV0VCR0xfZGVwdGhfdGV4dHVyZSIpO2lmKG51bGwhPT11KXJldHVybiB1LlVOU0lHTkVEX0lOVF8yNF84X1dFQkdMfXJldHVybiAwfX19ZnVuY3Rpb24gTmUoKXtTLmNhbGwodGhpcyk7dGhpcy50eXBlPSJHcm91cCJ9ZnVuY3Rpb24gamQoKXtTLmNhbGwodGhpcyk7dGhpcy50eXBlPQoiQ2FtZXJhIjt0aGlzLm1hdHJpeFdvcmxkSW52ZXJzZT1uZXcgQzt0aGlzLnByb2plY3Rpb25NYXRyaXg9bmV3IEM7dGhpcy5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZT1uZXcgQ31mdW5jdGlvbiBjYyhiLGUsaCxuKXtqZC5jYWxsKHRoaXMpO3RoaXMudHlwZT0iUGVyc3BlY3RpdmVDYW1lcmEiO3RoaXMuZm92PXZvaWQgMCE9PWI/Yjo1MDt0aGlzLnpvb209MTt0aGlzLm5lYXI9dm9pZCAwIT09aD9oOi4xO3RoaXMuZmFyPXZvaWQgMCE9PW4/bjoyRTM7dGhpcy5mb2N1cz0xMDt0aGlzLmFzcGVjdD12b2lkIDAhPT1lP2U6MTt0aGlzLnZpZXc9bnVsbDt0aGlzLmZpbG1HYXVnZT0zNTt0aGlzLmZpbG1PZmZzZXQ9MDt0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX1mdW5jdGlvbiBQZihiKXtjYy5jYWxsKHRoaXMpO3RoaXMuY2FtZXJhcz1ifHxbXX1mdW5jdGlvbiBvbChiLGUsaCl7cGwuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKGUubWF0cml4V29ybGQpO3FsLnNldEZyb21NYXRyaXhQb3NpdGlvbihoLm1hdHJpeFdvcmxkKTsKdmFyIG49cGwuZGlzdGFuY2VUbyhxbCksdT1lLnByb2plY3Rpb25NYXRyaXguZWxlbWVudHMsdz1oLnByb2plY3Rpb25NYXRyaXguZWxlbWVudHMsej11WzE0XS8odVsxMF0tMSk7aD11WzE0XS8odVsxMF0rMSk7dmFyIEU9KHVbOV0rMSkvdVs1XSxIPSh1WzldLTEpL3VbNV0sST0odVs4XS0xKS91WzBdLE89KHdbOF0rMSkvd1swXTt1PXoqSTt3PXoqTztPPW4vKC1JK08pO0k9TyotSTtlLm1hdHJpeFdvcmxkLmRlY29tcG9zZShiLnBvc2l0aW9uLGIucXVhdGVybmlvbixiLnNjYWxlKTtiLnRyYW5zbGF0ZVgoSSk7Yi50cmFuc2xhdGVaKE8pO2IubWF0cml4V29ybGQuY29tcG9zZShiLnBvc2l0aW9uLGIucXVhdGVybmlvbixiLnNjYWxlKTtiLm1hdHJpeFdvcmxkSW52ZXJzZS5nZXRJbnZlcnNlKGIubWF0cml4V29ybGQpO2U9eitPO3o9aCtPO2IucHJvamVjdGlvbk1hdHJpeC5tYWtlUGVyc3BlY3RpdmUodS1JLHcrKG4tSSksRSpoL3oqZSxIKmgveiplLGUseil9ZnVuY3Rpb24gcmwoYil7ZnVuY3Rpb24gZSgpe3JldHVybiBudWxsIT09CnomJiEwPT09ei5pc1ByZXNlbnRpbmd9ZnVuY3Rpb24gaCgpe2lmKGUoKSl7dmFyIHNhPXouZ2V0RXllUGFyYW1ldGVycygibGVmdCIpLERhPXNhLnJlbmRlcldpZHRoKlI7c2E9c2EucmVuZGVySGVpZ2h0KlI7bmE9Yi5nZXRQaXhlbFJhdGlvKCk7Yi5nZXRTaXplKHRhKTtiLnNldERyYXdpbmdCdWZmZXJTaXplKDIqRGEsc2EsMSk7QmEuc3RhcnQoKX1lbHNlIHcuZW5hYmxlZCYmYi5zZXREcmF3aW5nQnVmZmVyU2l6ZSh0YS53aWR0aCx0YS5oZWlnaHQsbmEpLEJhLnN0b3AoKX1mdW5jdGlvbiBuKHNhKXtmb3IodmFyIERhPW5hdmlnYXRvci5nZXRHYW1lcGFkcyYmbmF2aWdhdG9yLmdldEdhbWVwYWRzKCksSGE9MCxLYT0wLE5hPURhLmxlbmd0aDtIYTxOYTtIYSsrKXt2YXIgTGE9RGFbSGFdO2lmKExhJiYoIkRheWRyZWFtIENvbnRyb2xsZXIiPT09TGEuaWR8fCJHZWFyIFZSIENvbnRyb2xsZXIiPT09TGEuaWR8fCJPY3VsdXMgR28gQ29udHJvbGxlciI9PT1MYS5pZHx8Ik9wZW5WUiBHYW1lcGFkIj09PQpMYS5pZHx8TGEuaWQuc3RhcnRzV2l0aCgiT2N1bHVzIFRvdWNoIil8fExhLmlkLnN0YXJ0c1dpdGgoIlNwYXRpYWwgQ29udHJvbGxlciIpKSl7aWYoS2E9PT1zYSlyZXR1cm4gTGE7S2ErK319fWZ1bmN0aW9uIHUoKXtmb3IodmFyIHNhPTA7c2E8SS5sZW5ndGg7c2ErKyl7dmFyIERhPUlbc2FdLEhhPW4oc2EpO2lmKHZvaWQgMCE9PUhhJiZ2b2lkIDAhPT1IYS5wb3NlKXtpZihudWxsPT09SGEucG9zZSlicmVhazt2YXIgS2E9SGEucG9zZTshMT09PUthLmhhc1Bvc2l0aW9uJiZEYS5wb3NpdGlvbi5zZXQoLjIsLS42LC0uMDUpO251bGwhPT1LYS5wb3NpdGlvbiYmRGEucG9zaXRpb24uZnJvbUFycmF5KEthLnBvc2l0aW9uKTtudWxsIT09S2Eub3JpZW50YXRpb24mJkRhLnF1YXRlcm5pb24uZnJvbUFycmF5KEthLm9yaWVudGF0aW9uKTtEYS5tYXRyaXguY29tcG9zZShEYS5wb3NpdGlvbixEYS5xdWF0ZXJuaW9uLERhLnNjYWxlKTtEYS5tYXRyaXgucHJlbXVsdGlwbHkoTyk7RGEubWF0cml4LmRlY29tcG9zZShEYS5wb3NpdGlvbiwKRGEucXVhdGVybmlvbixEYS5zY2FsZSk7RGEubWF0cml4V29ybGROZWVkc1VwZGF0ZT0hMDtEYS52aXNpYmxlPSEwO0thPSJEYXlkcmVhbSBDb250cm9sbGVyIj09PUhhLmlkPzA6MTt2YVtzYV0hPT1IYS5idXR0b25zW0thXS5wcmVzc2VkJiYodmFbc2FdPUhhLmJ1dHRvbnNbS2FdLnByZXNzZWQsITA9PT12YVtzYV0/RGEuZGlzcGF0Y2hFdmVudCh7dHlwZToic2VsZWN0c3RhcnQifSk6KERhLmRpc3BhdGNoRXZlbnQoe3R5cGU6InNlbGVjdGVuZCJ9KSxEYS5kaXNwYXRjaEV2ZW50KHt0eXBlOiJzZWxlY3QifSkpKX1lbHNlIERhLnZpc2libGU9ITF9fXZhciB3PXRoaXMsej1udWxsLEU9bnVsbCxIPW51bGwsST1bXSxPPW5ldyBDLFE9bmV3IEMsUj0xLFU9InN0YWdlIjsidW5kZWZpbmVkIiE9PXR5cGVvZiB3aW5kb3cmJiJWUkZyYW1lRGF0YSJpbiB3aW5kb3cmJihFPW5ldyB3aW5kb3cuVlJGcmFtZURhdGEsd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInZyZGlzcGxheXByZXNlbnRjaGFuZ2UiLApoLCExKSk7dmFyIFc9bmV3IEMsWj1uZXcgZixmYT1uZXcgZyxxYT1uZXcgY2M7cWEuYm91bmRzPW5ldyBtKDAsMCwuNSwxKTtxYS5sYXllcnMuZW5hYmxlKDEpO3ZhciByYT1uZXcgY2M7cmEuYm91bmRzPW5ldyBtKC41LDAsLjUsMSk7cmEubGF5ZXJzLmVuYWJsZSgyKTt2YXIgaWE9bmV3IFBmKFtxYSxyYV0pO2lhLmxheWVycy5lbmFibGUoMSk7aWEubGF5ZXJzLmVuYWJsZSgyKTt2YXIgdGE9bmV3IGQsbmEsdmE9W107dGhpcy5lbmFibGVkPSExO3RoaXMuZ2V0Q29udHJvbGxlcj1mdW5jdGlvbihzYSl7dmFyIERhPUlbc2FdO3ZvaWQgMD09PURhJiYoRGE9bmV3IE5lLERhLm1hdHJpeEF1dG9VcGRhdGU9ITEsRGEudmlzaWJsZT0hMSxJW3NhXT1EYSk7cmV0dXJuIERhfTt0aGlzLmdldERldmljZT1mdW5jdGlvbigpe3JldHVybiB6fTt0aGlzLnNldERldmljZT1mdW5jdGlvbihzYSl7dm9pZCAwIT09c2EmJih6PXNhKTtCYS5zZXRDb250ZXh0KHNhKX07dGhpcy5zZXRGcmFtZWJ1ZmZlclNjYWxlRmFjdG9yPQpmdW5jdGlvbihzYSl7Uj1zYX07dGhpcy5zZXRGcmFtZU9mUmVmZXJlbmNlVHlwZT1mdW5jdGlvbihzYSl7VT1zYX07dGhpcy5zZXRQb3NlVGFyZ2V0PWZ1bmN0aW9uKHNhKXt2b2lkIDAhPT1zYSYmKEg9c2EpfTt0aGlzLmdldENhbWVyYT1mdW5jdGlvbihzYSl7dmFyIERhPSJzdGFnZSI9PT1VPzEuNjowO2lmKCExPT09ZSgpKXJldHVybiBzYS5wb3NpdGlvbi5zZXQoMCxEYSwwKSxzYS5yb3RhdGlvbi5zZXQoMCwwLDApLHNhO3ouZGVwdGhOZWFyPXNhLm5lYXI7ei5kZXB0aEZhcj1zYS5mYXI7ei5nZXRGcmFtZURhdGEoRSk7aWYoInN0YWdlIj09PVUpe3ZhciBIYT16LnN0YWdlUGFyYW1ldGVycztIYT9PLmZyb21BcnJheShIYS5zaXR0aW5nVG9TdGFuZGluZ1RyYW5zZm9ybSk6Ty5tYWtlVHJhbnNsYXRpb24oMCxEYSwwKX1EYT1FLnBvc2U7SGE9bnVsbCE9PUg/SDpzYTtIYS5tYXRyaXguY29weShPKTtIYS5tYXRyaXguZGVjb21wb3NlKEhhLnBvc2l0aW9uLEhhLnF1YXRlcm5pb24sCkhhLnNjYWxlKTtudWxsIT09RGEub3JpZW50YXRpb24mJihaLmZyb21BcnJheShEYS5vcmllbnRhdGlvbiksSGEucXVhdGVybmlvbi5tdWx0aXBseShaKSk7bnVsbCE9PURhLnBvc2l0aW9uJiYoWi5zZXRGcm9tUm90YXRpb25NYXRyaXgoTyksZmEuZnJvbUFycmF5KERhLnBvc2l0aW9uKSxmYS5hcHBseVF1YXRlcm5pb24oWiksSGEucG9zaXRpb24uYWRkKGZhKSk7SGEudXBkYXRlTWF0cml4V29ybGQoKTtxYS5uZWFyPXNhLm5lYXI7cmEubmVhcj1zYS5uZWFyO3FhLmZhcj1zYS5mYXI7cmEuZmFyPXNhLmZhcjtxYS5tYXRyaXhXb3JsZEludmVyc2UuZnJvbUFycmF5KEUubGVmdFZpZXdNYXRyaXgpO3JhLm1hdHJpeFdvcmxkSW52ZXJzZS5mcm9tQXJyYXkoRS5yaWdodFZpZXdNYXRyaXgpO1EuZ2V0SW52ZXJzZShPKTsic3RhZ2UiPT09VSYmKHFhLm1hdHJpeFdvcmxkSW52ZXJzZS5tdWx0aXBseShRKSxyYS5tYXRyaXhXb3JsZEludmVyc2UubXVsdGlwbHkoUSkpO3NhPUhhLnBhcmVudDsKbnVsbCE9PXNhJiYoVy5nZXRJbnZlcnNlKHNhLm1hdHJpeFdvcmxkKSxxYS5tYXRyaXhXb3JsZEludmVyc2UubXVsdGlwbHkoVykscmEubWF0cml4V29ybGRJbnZlcnNlLm11bHRpcGx5KFcpKTtxYS5tYXRyaXhXb3JsZC5nZXRJbnZlcnNlKHFhLm1hdHJpeFdvcmxkSW52ZXJzZSk7cmEubWF0cml4V29ybGQuZ2V0SW52ZXJzZShyYS5tYXRyaXhXb3JsZEludmVyc2UpO3FhLnByb2plY3Rpb25NYXRyaXguZnJvbUFycmF5KEUubGVmdFByb2plY3Rpb25NYXRyaXgpO3JhLnByb2plY3Rpb25NYXRyaXguZnJvbUFycmF5KEUucmlnaHRQcm9qZWN0aW9uTWF0cml4KTtvbChpYSxxYSxyYSk7c2E9ei5nZXRMYXllcnMoKTtzYS5sZW5ndGgmJihzYT1zYVswXSxudWxsIT09c2EubGVmdEJvdW5kcyYmND09PXNhLmxlZnRCb3VuZHMubGVuZ3RoJiZxYS5ib3VuZHMuZnJvbUFycmF5KHNhLmxlZnRCb3VuZHMpLG51bGwhPT1zYS5yaWdodEJvdW5kcyYmND09PXNhLnJpZ2h0Qm91bmRzLmxlbmd0aCYmCnJhLmJvdW5kcy5mcm9tQXJyYXkoc2EucmlnaHRCb3VuZHMpKTt1KCk7cmV0dXJuIGlhfTt0aGlzLmdldFN0YW5kaW5nTWF0cml4PWZ1bmN0aW9uKCl7cmV0dXJuIE99O3RoaXMuaXNQcmVzZW50aW5nPWU7dmFyIEJhPW5ldyBHO3RoaXMuc2V0QW5pbWF0aW9uTG9vcD1mdW5jdGlvbihzYSl7QmEuc2V0QW5pbWF0aW9uTG9vcChzYSk7ZSgpJiZCYS5zdGFydCgpfTt0aGlzLnN1Ym1pdEZyYW1lPWZ1bmN0aW9uKCl7ZSgpJiZ6LnN1Ym1pdEZyYW1lKCl9O3RoaXMuZGlzcG9zZT1mdW5jdGlvbigpeyJ1bmRlZmluZWQiIT09dHlwZW9mIHdpbmRvdyYmd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInZyZGlzcGxheXByZXNlbnRjaGFuZ2UiLGgpfX1mdW5jdGlvbiBLbyhiKXtmdW5jdGlvbiBlKCl7cmV0dXJuIG51bGwhPT1FJiZudWxsIT09SX1mdW5jdGlvbiBoKGlhKXt2YXIgdGE9UltVLmluZGV4T2YoaWEuaW5wdXRTb3VyY2UpXTt0YSYmdGEuZGlzcGF0Y2hFdmVudCh7dHlwZTppYS50eXBlfSl9CmZ1bmN0aW9uIG4oKXtiLnNldEZyYW1lYnVmZmVyKG51bGwpO2Iuc2V0UmVuZGVyVGFyZ2V0KGIuZ2V0UmVuZGVyVGFyZ2V0KCkpO3JhLnN0b3AoKX1mdW5jdGlvbiB1KGlhLHRhKXtudWxsPT09dGE/aWEubWF0cml4V29ybGQuY29weShpYS5tYXRyaXgpOmlhLm1hdHJpeFdvcmxkLm11bHRpcGx5TWF0cmljZXModGEubWF0cml4V29ybGQsaWEubWF0cml4KTtpYS5tYXRyaXhXb3JsZEludmVyc2UuZ2V0SW52ZXJzZShpYS5tYXRyaXhXb3JsZCl9dmFyIHc9Yi5jb250ZXh0LHo9bnVsbCxFPW51bGwsSD0xLEk9bnVsbCxPPSJzdGFnZSIsUT1udWxsLFI9W10sVT1bXSxXPW5ldyBjYztXLmxheWVycy5lbmFibGUoMSk7Vy52aWV3cG9ydD1uZXcgbTt2YXIgWj1uZXcgY2M7Wi5sYXllcnMuZW5hYmxlKDIpO1oudmlld3BvcnQ9bmV3IG07dmFyIGZhPW5ldyBQZihbVyxaXSk7ZmEubGF5ZXJzLmVuYWJsZSgxKTtmYS5sYXllcnMuZW5hYmxlKDIpO3RoaXMuZW5hYmxlZD0hMTt0aGlzLmdldENvbnRyb2xsZXI9CmZ1bmN0aW9uKGlhKXt2YXIgdGE9UltpYV07dm9pZCAwPT09dGEmJih0YT1uZXcgTmUsdGEubWF0cml4QXV0b1VwZGF0ZT0hMSx0YS52aXNpYmxlPSExLFJbaWFdPXRhKTtyZXR1cm4gdGF9O3RoaXMuZ2V0RGV2aWNlPWZ1bmN0aW9uKCl7cmV0dXJuIHp9O3RoaXMuc2V0RGV2aWNlPWZ1bmN0aW9uKGlhKXt2b2lkIDAhPT1pYSYmKHo9aWEpO2lhIGluc3RhbmNlb2YgWFJEZXZpY2UmJncuc2V0Q29tcGF0aWJsZVhSRGV2aWNlKGlhKX07dGhpcy5zZXRGcmFtZWJ1ZmZlclNjYWxlRmFjdG9yPWZ1bmN0aW9uKGlhKXtIPWlhfTt0aGlzLnNldEZyYW1lT2ZSZWZlcmVuY2VUeXBlPWZ1bmN0aW9uKGlhKXtPPWlhfTt0aGlzLnNldFNlc3Npb249ZnVuY3Rpb24oaWEpe0U9aWE7bnVsbCE9PUUmJihFLmFkZEV2ZW50TGlzdGVuZXIoInNlbGVjdCIsaCksRS5hZGRFdmVudExpc3RlbmVyKCJzZWxlY3RzdGFydCIsaCksRS5hZGRFdmVudExpc3RlbmVyKCJzZWxlY3RlbmQiLGgpLEUuYWRkRXZlbnRMaXN0ZW5lcigiZW5kIiwKbiksRS5iYXNlTGF5ZXI9bmV3IFhSV2ViR0xMYXllcihFLHcse2ZyYW1lYnVmZmVyU2NhbGVGYWN0b3I6SH0pLEUucmVxdWVzdEZyYW1lT2ZSZWZlcmVuY2UoTykudGhlbihmdW5jdGlvbih0YSl7ST10YTtiLnNldEZyYW1lYnVmZmVyKEUuYmFzZUxheWVyLmZyYW1lYnVmZmVyKTtyYS5zZXRDb250ZXh0KEUpO3JhLnN0YXJ0KCl9KSxVPUUuZ2V0SW5wdXRTb3VyY2VzKCksRS5hZGRFdmVudExpc3RlbmVyKCJpbnB1dHNvdXJjZXNjaGFuZ2UiLGZ1bmN0aW9uKCl7VT1FLmdldElucHV0U291cmNlcygpO2NvbnNvbGUubG9nKFUpO2Zvcih2YXIgdGE9MDt0YTxSLmxlbmd0aDt0YSsrKVJbdGFdLnVzZXJEYXRhLmlucHV0U291cmNlPVVbdGFdfSkpfTt0aGlzLmdldENhbWVyYT1mdW5jdGlvbihpYSl7aWYoZSgpKXt2YXIgdGE9aWEucGFyZW50LG5hPWZhLmNhbWVyYXM7dShmYSx0YSk7Zm9yKHZhciB2YT0wO3ZhPG5hLmxlbmd0aDt2YSsrKXUobmFbdmFdLHRhKTtpYS5tYXRyaXhXb3JsZC5jb3B5KGZhLm1hdHJpeFdvcmxkKTsKaWE9aWEuY2hpbGRyZW47dmE9MDtmb3IodGE9aWEubGVuZ3RoO3ZhPHRhO3ZhKyspaWFbdmFdLnVwZGF0ZU1hdHJpeFdvcmxkKCEwKTtvbChmYSxXLFopO3JldHVybiBmYX1yZXR1cm4gaWF9O3RoaXMuaXNQcmVzZW50aW5nPWU7dmFyIHFhPW51bGwscmE9bmV3IEc7cmEuc2V0QW5pbWF0aW9uTG9vcChmdW5jdGlvbihpYSx0YSl7UT10YS5nZXREZXZpY2VQb3NlKEkpO2lmKG51bGwhPT1RKWZvcih2YXIgbmE9RS5iYXNlTGF5ZXIsdmE9dGEudmlld3MsQmE9MDtCYTx2YS5sZW5ndGg7QmErKyl7dmFyIHNhPXZhW0JhXSxEYT1uYS5nZXRWaWV3cG9ydChzYSksSGE9US5nZXRWaWV3TWF0cml4KHNhKSxLYT1mYS5jYW1lcmFzW0JhXTtLYS5tYXRyaXguZnJvbUFycmF5KEhhKS5nZXRJbnZlcnNlKEthLm1hdHJpeCk7S2EucHJvamVjdGlvbk1hdHJpeC5mcm9tQXJyYXkoc2EucHJvamVjdGlvbk1hdHJpeCk7S2Eudmlld3BvcnQuc2V0KERhLngsRGEueSxEYS53aWR0aCxEYS5oZWlnaHQpOzA9PT0KQmEmJmZhLm1hdHJpeC5jb3B5KEthLm1hdHJpeCl9Zm9yKEJhPTA7QmE8Ui5sZW5ndGg7QmErKyl7bmE9UltCYV07aWYodmE9VVtCYV0paWYodmE9dGEuZ2V0SW5wdXRQb3NlKHZhLEkpLG51bGwhPT12YSl7InRhcmdldFJheSJpbiB2YT9uYS5tYXRyaXguZWxlbWVudHM9dmEudGFyZ2V0UmF5LnRyYW5zZm9ybU1hdHJpeDoicG9pbnRlck1hdHJpeCJpbiB2YSYmKG5hLm1hdHJpeC5lbGVtZW50cz12YS5wb2ludGVyTWF0cml4KTtuYS5tYXRyaXguZGVjb21wb3NlKG5hLnBvc2l0aW9uLG5hLnJvdGF0aW9uLG5hLnNjYWxlKTtuYS52aXNpYmxlPSEwO2NvbnRpbnVlfW5hLnZpc2libGU9ITF9cWEmJnFhKGlhKX0pO3RoaXMuc2V0QW5pbWF0aW9uTG9vcD1mdW5jdGlvbihpYSl7cWE9aWF9O3RoaXMuZGlzcG9zZT1mdW5jdGlvbigpe307dGhpcy5nZXRTdGFuZGluZ01hdHJpeD1mdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViWFJNYW5hZ2VyOiBnZXRTdGFuZGluZ01hdHJpeCgpIGlzIG5vIGxvbmdlciBuZWVkZWQuIik7CnJldHVybiBuZXcgQ307dGhpcy5zdWJtaXRGcmFtZT1mdW5jdGlvbigpe319ZnVuY3Rpb24gdGkoYil7dmFyIGU7ZnVuY3Rpb24gaCgpe3JldHVybiBudWxsPT09T2E/UmI6MX1mdW5jdGlvbiBuKCl7VmI9bmV3IGZjKFlhKTt1Yz1uZXcgaGQoWWEsVmIsYik7dWMuaXNXZWJHTDJ8fChWYi5nZXQoIldFQkdMX2RlcHRoX3RleHR1cmUiKSxWYi5nZXQoIk9FU190ZXh0dXJlX2Zsb2F0IiksVmIuZ2V0KCJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0IiksVmIuZ2V0KCJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0X2xpbmVhciIpLFZiLmdldCgiT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIiksVmIuZ2V0KCJPRVNfZWxlbWVudF9pbmRleF91aW50IiksVmIuZ2V0KCJBTkdMRV9pbnN0YW5jZWRfYXJyYXlzIikpO1ZiLmdldCgiT0VTX3RleHR1cmVfZmxvYXRfbGluZWFyIik7a2Q9bmV3IG5sKFlhLFZiLHVjKTtCYj1uZXcgSW8oWWEsVmIsa2QsdWMpO0JiLnNjaXNzb3IodmIuY29weSh2ZCkubXVsdGlwbHlTY2FsYXIoUmIpKTsKQmIudmlld3BvcnQocGIuY29weSh3ZCkubXVsdGlwbHlTY2FsYXIoUmIpKTtSZD1uZXcgamMoWWEpO3ZjPW5ldyBBbztQYz1uZXcgSm8oWWEsVmIsQmIsdmMsdWMsa2QsUmQpO2JoPW5ldyBLKFlhKTt1aT1uZXcgQWEoWWEsYmgsUmQpO09lPW5ldyAkZyh1aSxSZCk7c2w9bmV3IE5kKFlhKTtnZT1uZXcgem8oaWIsVmIsdWMsUGMpO2NoPW5ldyBEbztQZT1uZXcgSG87U2Q9bmV3IENjKGliLEJiLE9lLHBhKTt0bD1uZXcgWmIoWWEsVmIsUmQsdWMpO3VsPW5ldyBNYihZYSxWYixSZCx1Yyk7UmQucHJvZ3JhbXM9Z2UucHJvZ3JhbXM7aWIuY29udGV4dD1ZYTtpYi5jYXBhYmlsaXRpZXM9dWM7aWIuZXh0ZW5zaW9ucz1WYjtpYi5wcm9wZXJ0aWVzPXZjO2liLnJlbmRlckxpc3RzPWNoO2liLnN0YXRlPUJiO2liLmluZm89UmR9ZnVuY3Rpb24gdShWKXtWLnByZXZlbnREZWZhdWx0KCk7Y29uc29sZS5sb2coIlRIUkVFLldlYkdMUmVuZGVyZXI6IENvbnRleHQgTG9zdC4iKTttYT0hMH1mdW5jdGlvbiB3KCl7Y29uc29sZS5sb2coIlRIUkVFLldlYkdMUmVuZGVyZXI6IENvbnRleHQgUmVzdG9yZWQuIik7Cm1hPSExO24oKX1mdW5jdGlvbiB6KFYpe1Y9Vi50YXJnZXQ7Vi5yZW1vdmVFdmVudExpc3RlbmVyKCJkaXNwb3NlIix6KTtFKFYpfWZ1bmN0aW9uIEUoVil7SChWKTt2Yy5yZW1vdmUoVil9ZnVuY3Rpb24gSChWKXt2YXIgZGE9dmMuZ2V0KFYpLnByb2dyYW07Vi5wcm9ncmFtPXZvaWQgMDt2b2lkIDAhPT1kYSYmZ2UucmVsZWFzZVByb2dyYW0oZGEpfWZ1bmN0aW9uIEkoVixkYSl7Vi5yZW5kZXIoZnVuY3Rpb24ob2Epe2liLnJlbmRlckJ1ZmZlckltbWVkaWF0ZShvYSxkYSl9KX1mdW5jdGlvbiBPKFYsZGEsb2Epe2lmKG9hJiZvYS5pc0luc3RhbmNlZEJ1ZmZlckdlb21ldHJ5JiYhdWMuaXNXZWJHTDImJm51bGw9PT1WYi5nZXQoIkFOR0xFX2luc3RhbmNlZF9hcnJheXMiKSljb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFJlbmRlcmVyLnNldHVwVmVydGV4QXR0cmlidXRlczogdXNpbmcgVEhSRUUuSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnkgYnV0IGhhcmR3YXJlIGRvZXMgbm90IHN1cHBvcnQgZXh0ZW5zaW9uIEFOR0xFX2luc3RhbmNlZF9hcnJheXMuIik7CmVsc2V7QmIuaW5pdEF0dHJpYnV0ZXMoKTt2YXIgTWE9b2EuYXR0cmlidXRlcztkYT1kYS5nZXRBdHRyaWJ1dGVzKCk7Vj1WLmRlZmF1bHRBdHRyaWJ1dGVWYWx1ZXM7Zm9yKHZhciBXYSBpbiBkYSl7dmFyIFJhPWRhW1dhXTtpZigwPD1SYSl7dmFyIFhhPU1hW1dhXTtpZih2b2lkIDAhPT1YYSl7dmFyICRhPVhhLm5vcm1hbGl6ZWQsRmI9WGEuaXRlbVNpemUscmI9YmguZ2V0KFhhKTtpZih2b2lkIDAhPT1yYil7dmFyIGdiPXJiLmJ1ZmZlcixsZD1yYi50eXBlO3JiPXJiLmJ5dGVzUGVyRWxlbWVudDtpZihYYS5pc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlKXt2YXIgUWM9WGEuZGF0YSxUZD1RYy5zdHJpZGU7WGE9WGEub2Zmc2V0O1FjJiZRYy5pc0luc3RhbmNlZEludGVybGVhdmVkQnVmZmVyPyhCYi5lbmFibGVBdHRyaWJ1dGVBbmREaXZpc29yKFJhLFFjLm1lc2hQZXJBdHRyaWJ1dGUpLHZvaWQgMD09PW9hLm1heEluc3RhbmNlZENvdW50JiYob2EubWF4SW5zdGFuY2VkQ291bnQ9ClFjLm1lc2hQZXJBdHRyaWJ1dGUqUWMuY291bnQpKTpCYi5lbmFibGVBdHRyaWJ1dGUoUmEpO1lhLmJpbmRCdWZmZXIoMzQ5NjIsZ2IpO1lhLnZlcnRleEF0dHJpYlBvaW50ZXIoUmEsRmIsbGQsJGEsVGQqcmIsWGEqcmIpfWVsc2UgWGEuaXNJbnN0YW5jZWRCdWZmZXJBdHRyaWJ1dGU/KEJiLmVuYWJsZUF0dHJpYnV0ZUFuZERpdmlzb3IoUmEsWGEubWVzaFBlckF0dHJpYnV0ZSksdm9pZCAwPT09b2EubWF4SW5zdGFuY2VkQ291bnQmJihvYS5tYXhJbnN0YW5jZWRDb3VudD1YYS5tZXNoUGVyQXR0cmlidXRlKlhhLmNvdW50KSk6QmIuZW5hYmxlQXR0cmlidXRlKFJhKSxZYS5iaW5kQnVmZmVyKDM0OTYyLGdiKSxZYS52ZXJ0ZXhBdHRyaWJQb2ludGVyKFJhLEZiLGxkLCRhLDAsMCl9fWVsc2UgaWYodm9pZCAwIT09ViYmKCRhPVZbV2FdLHZvaWQgMCE9PSRhKSlzd2l0Y2goJGEubGVuZ3RoKXtjYXNlIDI6WWEudmVydGV4QXR0cmliMmZ2KFJhLCRhKTticmVhaztjYXNlIDM6WWEudmVydGV4QXR0cmliM2Z2KFJhLAokYSk7YnJlYWs7Y2FzZSA0OllhLnZlcnRleEF0dHJpYjRmdihSYSwkYSk7YnJlYWs7ZGVmYXVsdDpZYS52ZXJ0ZXhBdHRyaWIxZnYoUmEsJGEpfX19QmIuZGlzYWJsZVVudXNlZEF0dHJpYnV0ZXMoKX19ZnVuY3Rpb24gUShWLGRhLG9hLE1hKXtpZighMSE9PVYudmlzaWJsZSl7aWYoVi5sYXllcnMudGVzdChkYS5sYXllcnMpKWlmKFYuaXNHcm91cClvYT1WLnJlbmRlck9yZGVyO2Vsc2UgaWYoVi5pc0xpZ2h0KVRhLnB1c2hMaWdodChWKSxWLmNhc3RTaGFkb3cmJlRhLnB1c2hTaGFkb3coVik7ZWxzZSBpZihWLmlzU3ByaXRlKXtpZighVi5mcnVzdHVtQ3VsbGVkfHx2aS5pbnRlcnNlY3RzU3ByaXRlKFYpKXtNYSYmVWQuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKFYubWF0cml4V29ybGQpLmFwcGx5TWF0cml4NChRZik7dmFyIFdhPU9lLnVwZGF0ZShWKSxSYT1WLm1hdGVyaWFsO1JhLnZpc2libGUmJlphLnB1c2goVixXYSxSYSxvYSxVZC56LG51bGwpfX1lbHNlIGlmKFYuaXNJbW1lZGlhdGVSZW5kZXJPYmplY3QpTWEmJgpVZC5zZXRGcm9tTWF0cml4UG9zaXRpb24oVi5tYXRyaXhXb3JsZCkuYXBwbHlNYXRyaXg0KFFmKSxaYS5wdXNoKFYsbnVsbCxWLm1hdGVyaWFsLG9hLFVkLnosbnVsbCk7ZWxzZSBpZihWLmlzTWVzaHx8Vi5pc0xpbmV8fFYuaXNQb2ludHMpaWYoVi5pc1NraW5uZWRNZXNoJiZWLnNrZWxldG9uLnVwZGF0ZSgpLCFWLmZydXN0dW1DdWxsZWR8fHZpLmludGVyc2VjdHNPYmplY3QoVikpaWYoTWEmJlVkLnNldEZyb21NYXRyaXhQb3NpdGlvbihWLm1hdHJpeFdvcmxkKS5hcHBseU1hdHJpeDQoUWYpLFdhPU9lLnVwZGF0ZShWKSxSYT1WLm1hdGVyaWFsLEFycmF5LmlzQXJyYXkoUmEpKWZvcih2YXIgWGE9V2EuZ3JvdXBzLCRhPTAsRmI9WGEubGVuZ3RoOyRhPEZiOyRhKyspe3ZhciByYj1YYVskYV0sZ2I9UmFbcmIubWF0ZXJpYWxJbmRleF07Z2ImJmdiLnZpc2libGUmJlphLnB1c2goVixXYSxnYixvYSxVZC56LHJiKX1lbHNlIFJhLnZpc2libGUmJlphLnB1c2goVixXYSxSYSxvYSxVZC56LApudWxsKTtWPVYuY2hpbGRyZW47JGE9MDtmb3IoRmI9Vi5sZW5ndGg7JGE8RmI7JGErKylRKFZbJGFdLGRhLG9hLE1hKX19ZnVuY3Rpb24gUihWLGRhLG9hLE1hKXtmb3IodmFyIFdhPTAsUmE9Vi5sZW5ndGg7V2E8UmE7V2ErKyl7dmFyIFhhPVZbV2FdLCRhPVhhLm9iamVjdCxGYj1YYS5nZW9tZXRyeSxyYj12b2lkIDA9PT1NYT9YYS5tYXRlcmlhbDpNYTtYYT1YYS5ncm91cDtpZihvYS5pc0FycmF5Q2FtZXJhKXtuYj1vYTtmb3IodmFyIGdiPW9hLmNhbWVyYXMsbGQ9MCxRYz1nYi5sZW5ndGg7bGQ8UWM7bGQrKyl7dmFyIFRkPWdiW2xkXTtpZigkYS5sYXllcnMudGVzdChUZC5sYXllcnMpKXtpZigidmlld3BvcnQiaW4gVGQpQmIudmlld3BvcnQocGIuY29weShUZC52aWV3cG9ydCkpO2Vsc2V7dmFyIGRoPVRkLmJvdW5kcztCYi52aWV3cG9ydChwYi5zZXQoZGgueCpPYixkaC55KldiLGRoLnoqT2IsZGgudypXYikubXVsdGlwbHlTY2FsYXIoUmIpKX1UYS5zZXR1cExpZ2h0cyhUZCk7ClUoJGEsZGEsVGQsRmIscmIsWGEpfX19ZWxzZSBuYj1udWxsLFUoJGEsZGEsb2EsRmIscmIsWGEpfX1mdW5jdGlvbiBVKFYsZGEsb2EsTWEsV2EsUmEpe1Yub25CZWZvcmVSZW5kZXIoaWIsZGEsb2EsTWEsV2EsUmEpO1RhPVBlLmdldChkYSxuYnx8b2EpO1YubW9kZWxWaWV3TWF0cml4Lm11bHRpcGx5TWF0cmljZXMob2EubWF0cml4V29ybGRJbnZlcnNlLFYubWF0cml4V29ybGQpO1Yubm9ybWFsTWF0cml4LmdldE5vcm1hbE1hdHJpeChWLm1vZGVsVmlld01hdHJpeCk7Vi5pc0ltbWVkaWF0ZVJlbmRlck9iamVjdD8oQmIuc2V0TWF0ZXJpYWwoV2EpLE1hPVoob2EsZGEuZm9nLFdhLFYpLEtiPWU9bnVsbCxsYj0hMSxJKFYsTWEpKTppYi5yZW5kZXJCdWZmZXJEaXJlY3Qob2EsZGEuZm9nLE1hLFdhLFYsUmEpO1RhPVBlLmdldChkYSxuYnx8b2EpfWZ1bmN0aW9uIFcoVixkYSxvYSl7dmFyIE1hPXZjLmdldChWKSxXYT1UYS5zdGF0ZS5saWdodHMsUmE9TWEubGlnaHRzSGFzaCxYYT1XYS5zdGF0ZS5oYXNoOwpvYT1nZS5nZXRQYXJhbWV0ZXJzKFYsV2Euc3RhdGUsVGEuc3RhdGUuc2hhZG93c0FycmF5LGRhLFJjLm51bVBsYW5lcyxSYy5udW1JbnRlcnNlY3Rpb24sb2EpO3ZhciAkYT1nZS5nZXRQcm9ncmFtQ29kZShWLG9hKSxGYj1NYS5wcm9ncmFtLHJiPSEwO2lmKHZvaWQgMD09PUZiKVYuYWRkRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIseik7ZWxzZSBpZihGYi5jb2RlIT09JGEpSChWKTtlbHNle2lmKFJhLnN0YXRlSUQhPT1YYS5zdGF0ZUlEfHxSYS5kaXJlY3Rpb25hbExlbmd0aCE9PVhhLmRpcmVjdGlvbmFsTGVuZ3RofHxSYS5wb2ludExlbmd0aCE9PVhhLnBvaW50TGVuZ3RofHxSYS5zcG90TGVuZ3RoIT09WGEuc3BvdExlbmd0aHx8UmEucmVjdEFyZWFMZW5ndGghPT1YYS5yZWN0QXJlYUxlbmd0aHx8UmEuaGVtaUxlbmd0aCE9PVhhLmhlbWlMZW5ndGh8fFJhLnNoYWRvd3NMZW5ndGghPT1YYS5zaGFkb3dzTGVuZ3RoKVJhLnN0YXRlSUQ9WGEuc3RhdGVJRCxSYS5kaXJlY3Rpb25hbExlbmd0aD0KWGEuZGlyZWN0aW9uYWxMZW5ndGgsUmEucG9pbnRMZW5ndGg9WGEucG9pbnRMZW5ndGgsUmEuc3BvdExlbmd0aD1YYS5zcG90TGVuZ3RoLFJhLnJlY3RBcmVhTGVuZ3RoPVhhLnJlY3RBcmVhTGVuZ3RoLFJhLmhlbWlMZW5ndGg9WGEuaGVtaUxlbmd0aCxSYS5zaGFkb3dzTGVuZ3RoPVhhLnNoYWRvd3NMZW5ndGg7ZWxzZSBpZih2b2lkIDAhPT1vYS5zaGFkZXJJRClyZXR1cm47cmI9ITF9cmImJihvYS5zaGFkZXJJRD8oJGE9aWRbb2Euc2hhZGVySURdLE1hLnNoYWRlcj17bmFtZTpWLnR5cGUsdW5pZm9ybXM6RigkYS51bmlmb3JtcyksdmVydGV4U2hhZGVyOiRhLnZlcnRleFNoYWRlcixmcmFnbWVudFNoYWRlcjokYS5mcmFnbWVudFNoYWRlcn0pOk1hLnNoYWRlcj17bmFtZTpWLnR5cGUsdW5pZm9ybXM6Vi51bmlmb3Jtcyx2ZXJ0ZXhTaGFkZXI6Vi52ZXJ0ZXhTaGFkZXIsZnJhZ21lbnRTaGFkZXI6Vi5mcmFnbWVudFNoYWRlcn0sJGE9Z2UuZ2V0UHJvZ3JhbUNvZGUoVixvYSksRmI9CmdlLmFjcXVpcmVQcm9ncmFtKFYsTWEuc2hhZGVyLG9hLCRhKSxNYS5wcm9ncmFtPUZiLFYucHJvZ3JhbT1GYik7b2E9RmIuZ2V0QXR0cmlidXRlcygpO2lmKFYubW9ycGhUYXJnZXRzKWZvcigkYT1WLm51bVN1cHBvcnRlZE1vcnBoVGFyZ2V0cz0wOyRhPGliLm1heE1vcnBoVGFyZ2V0czskYSsrKTA8PW9hWyJtb3JwaFRhcmdldCIrJGFdJiZWLm51bVN1cHBvcnRlZE1vcnBoVGFyZ2V0cysrO2lmKFYubW9ycGhOb3JtYWxzKWZvcigkYT1WLm51bVN1cHBvcnRlZE1vcnBoTm9ybWFscz0wOyRhPGliLm1heE1vcnBoTm9ybWFsczskYSsrKTA8PW9hWyJtb3JwaE5vcm1hbCIrJGFdJiZWLm51bVN1cHBvcnRlZE1vcnBoTm9ybWFscysrO29hPU1hLnNoYWRlci51bmlmb3JtcztpZighVi5pc1NoYWRlck1hdGVyaWFsJiYhVi5pc1Jhd1NoYWRlck1hdGVyaWFsfHwhMD09PVYuY2xpcHBpbmcpTWEubnVtQ2xpcHBpbmdQbGFuZXM9UmMubnVtUGxhbmVzLE1hLm51bUludGVyc2VjdGlvbj1SYy5udW1JbnRlcnNlY3Rpb24sCm9hLmNsaXBwaW5nUGxhbmVzPVJjLnVuaWZvcm07TWEuZm9nPWRhO3ZvaWQgMD09PVJhJiYoTWEubGlnaHRzSGFzaD1SYT17fSk7UmEuc3RhdGVJRD1YYS5zdGF0ZUlEO1JhLmRpcmVjdGlvbmFsTGVuZ3RoPVhhLmRpcmVjdGlvbmFsTGVuZ3RoO1JhLnBvaW50TGVuZ3RoPVhhLnBvaW50TGVuZ3RoO1JhLnNwb3RMZW5ndGg9WGEuc3BvdExlbmd0aDtSYS5yZWN0QXJlYUxlbmd0aD1YYS5yZWN0QXJlYUxlbmd0aDtSYS5oZW1pTGVuZ3RoPVhhLmhlbWlMZW5ndGg7UmEuc2hhZG93c0xlbmd0aD1YYS5zaGFkb3dzTGVuZ3RoO1YubGlnaHRzJiYob2EuYW1iaWVudExpZ2h0Q29sb3IudmFsdWU9V2Euc3RhdGUuYW1iaWVudCxvYS5saWdodFByb2JlLnZhbHVlPVdhLnN0YXRlLnByb2JlLG9hLmRpcmVjdGlvbmFsTGlnaHRzLnZhbHVlPVdhLnN0YXRlLmRpcmVjdGlvbmFsLG9hLnNwb3RMaWdodHMudmFsdWU9V2Euc3RhdGUuc3BvdCxvYS5yZWN0QXJlYUxpZ2h0cy52YWx1ZT1XYS5zdGF0ZS5yZWN0QXJlYSwKb2EucG9pbnRMaWdodHMudmFsdWU9V2Euc3RhdGUucG9pbnQsb2EuaGVtaXNwaGVyZUxpZ2h0cy52YWx1ZT1XYS5zdGF0ZS5oZW1pLG9hLmRpcmVjdGlvbmFsU2hhZG93TWFwLnZhbHVlPVdhLnN0YXRlLmRpcmVjdGlvbmFsU2hhZG93TWFwLG9hLmRpcmVjdGlvbmFsU2hhZG93TWF0cml4LnZhbHVlPVdhLnN0YXRlLmRpcmVjdGlvbmFsU2hhZG93TWF0cml4LG9hLnNwb3RTaGFkb3dNYXAudmFsdWU9V2Euc3RhdGUuc3BvdFNoYWRvd01hcCxvYS5zcG90U2hhZG93TWF0cml4LnZhbHVlPVdhLnN0YXRlLnNwb3RTaGFkb3dNYXRyaXgsb2EucG9pbnRTaGFkb3dNYXAudmFsdWU9V2Euc3RhdGUucG9pbnRTaGFkb3dNYXAsb2EucG9pbnRTaGFkb3dNYXRyaXgudmFsdWU9V2Euc3RhdGUucG9pbnRTaGFkb3dNYXRyaXgpO1Y9TWEucHJvZ3JhbS5nZXRVbmlmb3JtcygpO1Y9T2Quc2VxV2l0aFZhbHVlKFYuc2VxLG9hKTtNYS51bmlmb3Jtc0xpc3Q9Vn1mdW5jdGlvbiBaKFYsZGEsb2EsTWEpe1BjLnJlc2V0VGV4dHVyZVVuaXRzKCk7CnZhciBXYT12Yy5nZXQob2EpLFJhPVdhLmxpZ2h0c0hhc2gsWGE9VGEuc3RhdGUubGlnaHRzLnN0YXRlLmhhc2g7ZWgmJih3aXx8ViE9PVFhKSYmUmMuc2V0U3RhdGUob2EuY2xpcHBpbmdQbGFuZXMsb2EuY2xpcEludGVyc2VjdGlvbixvYS5jbGlwU2hhZG93cyxWLFdhLFY9PT1RYSYmb2EuaWQ9PT1hYik7ITE9PT1vYS5uZWVkc1VwZGF0ZSYmKHZvaWQgMD09PVdhLnByb2dyYW0/b2EubmVlZHNVcGRhdGU9ITA6b2EuZm9nJiZXYS5mb2chPT1kYT9vYS5uZWVkc1VwZGF0ZT0hMDohb2EubGlnaHRzfHxSYS5zdGF0ZUlEPT09WGEuc3RhdGVJRCYmUmEuZGlyZWN0aW9uYWxMZW5ndGg9PT1YYS5kaXJlY3Rpb25hbExlbmd0aCYmUmEucG9pbnRMZW5ndGg9PT1YYS5wb2ludExlbmd0aCYmUmEuc3BvdExlbmd0aD09PVhhLnNwb3RMZW5ndGgmJlJhLnJlY3RBcmVhTGVuZ3RoPT09WGEucmVjdEFyZWFMZW5ndGgmJlJhLmhlbWlMZW5ndGg9PT1YYS5oZW1pTGVuZ3RoJiZSYS5zaGFkb3dzTGVuZ3RoPT09ClhhLnNoYWRvd3NMZW5ndGg/dm9pZCAwPT09V2EubnVtQ2xpcHBpbmdQbGFuZXN8fFdhLm51bUNsaXBwaW5nUGxhbmVzPT09UmMubnVtUGxhbmVzJiZXYS5udW1JbnRlcnNlY3Rpb249PT1SYy5udW1JbnRlcnNlY3Rpb258fChvYS5uZWVkc1VwZGF0ZT0hMCk6b2EubmVlZHNVcGRhdGU9ITApO29hLm5lZWRzVXBkYXRlJiYoVyhvYSxkYSxNYSksb2EubmVlZHNVcGRhdGU9ITEpO3ZhciAkYT0hMTtYYT1SYT0hMTt2YXIgRmI9V2EucHJvZ3JhbSxyYj1GYi5nZXRVbmlmb3JtcygpLGdiPVdhLnNoYWRlci51bmlmb3JtcztCYi51c2VQcm9ncmFtKEZiLnByb2dyYW0pJiYoWGE9UmE9JGE9ITApO29hLmlkIT09YWImJihhYj1vYS5pZCxSYT0hMCk7aWYoJGF8fFFhIT09Vil7cmIuc2V0VmFsdWUoWWEsInByb2plY3Rpb25NYXRyaXgiLFYucHJvamVjdGlvbk1hdHJpeCk7dWMubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlciYmcmIuc2V0VmFsdWUoWWEsImxvZ0RlcHRoQnVmRkMiLDIvKE1hdGgubG9nKFYuZmFyKwoxKS9NYXRoLkxOMikpO1FhIT09ViYmKFFhPVYsWGE9UmE9ITApO2lmKG9hLmlzU2hhZGVyTWF0ZXJpYWx8fG9hLmlzTWVzaFBob25nTWF0ZXJpYWx8fG9hLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWx8fG9hLmVudk1hcCkkYT1yYi5tYXAuY2FtZXJhUG9zaXRpb24sdm9pZCAwIT09JGEmJiRhLnNldFZhbHVlKFlhLFVkLnNldEZyb21NYXRyaXhQb3NpdGlvbihWLm1hdHJpeFdvcmxkKSk7KG9hLmlzTWVzaFBob25nTWF0ZXJpYWx8fG9hLmlzTWVzaExhbWJlcnRNYXRlcmlhbHx8b2EuaXNNZXNoQmFzaWNNYXRlcmlhbHx8b2EuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbHx8b2EuaXNTaGFkZXJNYXRlcmlhbHx8b2Euc2tpbm5pbmcpJiZyYi5zZXRWYWx1ZShZYSwidmlld01hdHJpeCIsVi5tYXRyaXhXb3JsZEludmVyc2UpfWlmKG9hLnNraW5uaW5nJiYocmIuc2V0T3B0aW9uYWwoWWEsTWEsImJpbmRNYXRyaXgiKSxyYi5zZXRPcHRpb25hbChZYSxNYSwiYmluZE1hdHJpeEludmVyc2UiKSxWPU1hLnNrZWxldG9uKSlpZigkYT0KVi5ib25lcyx1Yy5mbG9hdFZlcnRleFRleHR1cmVzKXtpZih2b2lkIDA9PT1WLmJvbmVUZXh0dXJlKXskYT1NYXRoLnNxcnQoNCokYS5sZW5ndGgpOyRhPW9iLmNlaWxQb3dlck9mVHdvKCRhKTskYT1NYXRoLm1heCgkYSw0KTt2YXIgbGQ9bmV3IEZsb2F0MzJBcnJheSgkYSokYSo0KTtsZC5zZXQoVi5ib25lTWF0cmljZXMpO3ZhciBRYz1uZXcgdChsZCwkYSwkYSwxMDIzLDEwMTUpO1FjLm5lZWRzVXBkYXRlPSEwO1YuYm9uZU1hdHJpY2VzPWxkO1YuYm9uZVRleHR1cmU9UWM7Vi5ib25lVGV4dHVyZVNpemU9JGF9cmIuc2V0VmFsdWUoWWEsImJvbmVUZXh0dXJlIixWLmJvbmVUZXh0dXJlLFBjKTtyYi5zZXRWYWx1ZShZYSwiYm9uZVRleHR1cmVTaXplIixWLmJvbmVUZXh0dXJlU2l6ZSl9ZWxzZSByYi5zZXRPcHRpb25hbChZYSxWLCJib25lTWF0cmljZXMiKTtSYSYmKHJiLnNldFZhbHVlKFlhLCJ0b25lTWFwcGluZ0V4cG9zdXJlIixpYi50b25lTWFwcGluZ0V4cG9zdXJlKSxyYi5zZXRWYWx1ZShZYSwKInRvbmVNYXBwaW5nV2hpdGVQb2ludCIsaWIudG9uZU1hcHBpbmdXaGl0ZVBvaW50KSxvYS5saWdodHMmJmNiKGdiLFhhKSxkYSYmb2EuZm9nJiZuYShnYixkYSksb2EuaXNNZXNoQmFzaWNNYXRlcmlhbD9mYShnYixvYSk6b2EuaXNNZXNoTGFtYmVydE1hdGVyaWFsPyhmYShnYixvYSksdmEoZ2Isb2EpKTpvYS5pc01lc2hQaG9uZ01hdGVyaWFsPyhmYShnYixvYSksb2EuaXNNZXNoVG9vbk1hdGVyaWFsP3NhKGdiLG9hKTpCYShnYixvYSkpOm9hLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWw/KGZhKGdiLG9hKSxvYS5pc01lc2hQaHlzaWNhbE1hdGVyaWFsP0hhKGdiLG9hKTpEYShnYixvYSkpOm9hLmlzTWVzaE1hdGNhcE1hdGVyaWFsPyhmYShnYixvYSksS2EoZ2Isb2EpKTpvYS5pc01lc2hEZXB0aE1hdGVyaWFsPyhmYShnYixvYSksTmEoZ2Isb2EpKTpvYS5pc01lc2hEaXN0YW5jZU1hdGVyaWFsPyhmYShnYixvYSksTGEoZ2Isb2EpKTpvYS5pc01lc2hOb3JtYWxNYXRlcmlhbD8oZmEoZ2IsCm9hKSxmYihnYixvYSkpOm9hLmlzTGluZUJhc2ljTWF0ZXJpYWw/KHFhKGdiLG9hKSxvYS5pc0xpbmVEYXNoZWRNYXRlcmlhbCYmcmEoZ2Isb2EpKTpvYS5pc1BvaW50c01hdGVyaWFsP2lhKGdiLG9hKTpvYS5pc1Nwcml0ZU1hdGVyaWFsP3RhKGdiLG9hKTpvYS5pc1NoYWRvd01hdGVyaWFsJiYoZ2IuY29sb3IudmFsdWUuY29weShvYS5jb2xvciksZ2Iub3BhY2l0eS52YWx1ZT1vYS5vcGFjaXR5KSx2b2lkIDAhPT1nYi5sdGNfMSYmKGdiLmx0Y18xLnZhbHVlPWJiLkxUQ18xKSx2b2lkIDAhPT1nYi5sdGNfMiYmKGdiLmx0Y18yLnZhbHVlPWJiLkxUQ18yKSxPZC51cGxvYWQoWWEsV2EudW5pZm9ybXNMaXN0LGdiLFBjKSk7b2EuaXNTaGFkZXJNYXRlcmlhbCYmITA9PT1vYS51bmlmb3Jtc05lZWRVcGRhdGUmJihPZC51cGxvYWQoWWEsV2EudW5pZm9ybXNMaXN0LGdiLFBjKSxvYS51bmlmb3Jtc05lZWRVcGRhdGU9ITEpO29hLmlzU3ByaXRlTWF0ZXJpYWwmJnJiLnNldFZhbHVlKFlhLAoiY2VudGVyIixNYS5jZW50ZXIpO3JiLnNldFZhbHVlKFlhLCJtb2RlbFZpZXdNYXRyaXgiLE1hLm1vZGVsVmlld01hdHJpeCk7cmIuc2V0VmFsdWUoWWEsIm5vcm1hbE1hdHJpeCIsTWEubm9ybWFsTWF0cml4KTtyYi5zZXRWYWx1ZShZYSwibW9kZWxNYXRyaXgiLE1hLm1hdHJpeFdvcmxkKTtyZXR1cm4gRmJ9ZnVuY3Rpb24gZmEoVixkYSl7Vi5vcGFjaXR5LnZhbHVlPWRhLm9wYWNpdHk7ZGEuY29sb3ImJlYuZGlmZnVzZS52YWx1ZS5jb3B5KGRhLmNvbG9yKTtkYS5lbWlzc2l2ZSYmVi5lbWlzc2l2ZS52YWx1ZS5jb3B5KGRhLmVtaXNzaXZlKS5tdWx0aXBseVNjYWxhcihkYS5lbWlzc2l2ZUludGVuc2l0eSk7ZGEubWFwJiYoVi5tYXAudmFsdWU9ZGEubWFwKTtkYS5hbHBoYU1hcCYmKFYuYWxwaGFNYXAudmFsdWU9ZGEuYWxwaGFNYXApO2RhLnNwZWN1bGFyTWFwJiYoVi5zcGVjdWxhck1hcC52YWx1ZT1kYS5zcGVjdWxhck1hcCk7ZGEuZW52TWFwJiYoVi5lbnZNYXAudmFsdWU9ZGEuZW52TWFwLApWLmZsaXBFbnZNYXAudmFsdWU9ZGEuZW52TWFwLmlzQ3ViZVRleHR1cmU/LTE6MSxWLnJlZmxlY3Rpdml0eS52YWx1ZT1kYS5yZWZsZWN0aXZpdHksVi5yZWZyYWN0aW9uUmF0aW8udmFsdWU9ZGEucmVmcmFjdGlvblJhdGlvLFYubWF4TWlwTGV2ZWwudmFsdWU9dmMuZ2V0KGRhLmVudk1hcCkuX19tYXhNaXBMZXZlbCk7ZGEubGlnaHRNYXAmJihWLmxpZ2h0TWFwLnZhbHVlPWRhLmxpZ2h0TWFwLFYubGlnaHRNYXBJbnRlbnNpdHkudmFsdWU9ZGEubGlnaHRNYXBJbnRlbnNpdHkpO2RhLmFvTWFwJiYoVi5hb01hcC52YWx1ZT1kYS5hb01hcCxWLmFvTWFwSW50ZW5zaXR5LnZhbHVlPWRhLmFvTWFwSW50ZW5zaXR5KTtpZihkYS5tYXApdmFyIG9hPWRhLm1hcDtlbHNlIGRhLnNwZWN1bGFyTWFwP29hPWRhLnNwZWN1bGFyTWFwOmRhLmRpc3BsYWNlbWVudE1hcD9vYT1kYS5kaXNwbGFjZW1lbnRNYXA6ZGEubm9ybWFsTWFwP29hPWRhLm5vcm1hbE1hcDpkYS5idW1wTWFwP29hPWRhLmJ1bXBNYXA6CmRhLnJvdWdobmVzc01hcD9vYT1kYS5yb3VnaG5lc3NNYXA6ZGEubWV0YWxuZXNzTWFwP29hPWRhLm1ldGFsbmVzc01hcDpkYS5hbHBoYU1hcD9vYT1kYS5hbHBoYU1hcDpkYS5lbWlzc2l2ZU1hcCYmKG9hPWRhLmVtaXNzaXZlTWFwKTt2b2lkIDAhPT1vYSYmKG9hLmlzV2ViR0xSZW5kZXJUYXJnZXQmJihvYT1vYS50ZXh0dXJlKSwhMD09PW9hLm1hdHJpeEF1dG9VcGRhdGUmJm9hLnVwZGF0ZU1hdHJpeCgpLFYudXZUcmFuc2Zvcm0udmFsdWUuY29weShvYS5tYXRyaXgpKX1mdW5jdGlvbiBxYShWLGRhKXtWLmRpZmZ1c2UudmFsdWUuY29weShkYS5jb2xvcik7Vi5vcGFjaXR5LnZhbHVlPWRhLm9wYWNpdHl9ZnVuY3Rpb24gcmEoVixkYSl7Vi5kYXNoU2l6ZS52YWx1ZT1kYS5kYXNoU2l6ZTtWLnRvdGFsU2l6ZS52YWx1ZT1kYS5kYXNoU2l6ZStkYS5nYXBTaXplO1Yuc2NhbGUudmFsdWU9ZGEuc2NhbGV9ZnVuY3Rpb24gaWEoVixkYSl7Vi5kaWZmdXNlLnZhbHVlLmNvcHkoZGEuY29sb3IpOwpWLm9wYWNpdHkudmFsdWU9ZGEub3BhY2l0eTtWLnNpemUudmFsdWU9ZGEuc2l6ZSpSYjtWLnNjYWxlLnZhbHVlPS41KldiO1YubWFwLnZhbHVlPWRhLm1hcDtudWxsIT09ZGEubWFwJiYoITA9PT1kYS5tYXAubWF0cml4QXV0b1VwZGF0ZSYmZGEubWFwLnVwZGF0ZU1hdHJpeCgpLFYudXZUcmFuc2Zvcm0udmFsdWUuY29weShkYS5tYXAubWF0cml4KSl9ZnVuY3Rpb24gdGEoVixkYSl7Vi5kaWZmdXNlLnZhbHVlLmNvcHkoZGEuY29sb3IpO1Yub3BhY2l0eS52YWx1ZT1kYS5vcGFjaXR5O1Yucm90YXRpb24udmFsdWU9ZGEucm90YXRpb247Vi5tYXAudmFsdWU9ZGEubWFwO251bGwhPT1kYS5tYXAmJighMD09PWRhLm1hcC5tYXRyaXhBdXRvVXBkYXRlJiZkYS5tYXAudXBkYXRlTWF0cml4KCksVi51dlRyYW5zZm9ybS52YWx1ZS5jb3B5KGRhLm1hcC5tYXRyaXgpKX1mdW5jdGlvbiBuYShWLGRhKXtWLmZvZ0NvbG9yLnZhbHVlLmNvcHkoZGEuY29sb3IpO2RhLmlzRm9nPyhWLmZvZ05lYXIudmFsdWU9CmRhLm5lYXIsVi5mb2dGYXIudmFsdWU9ZGEuZmFyKTpkYS5pc0ZvZ0V4cDImJihWLmZvZ0RlbnNpdHkudmFsdWU9ZGEuZGVuc2l0eSl9ZnVuY3Rpb24gdmEoVixkYSl7ZGEuZW1pc3NpdmVNYXAmJihWLmVtaXNzaXZlTWFwLnZhbHVlPWRhLmVtaXNzaXZlTWFwKX1mdW5jdGlvbiBCYShWLGRhKXtWLnNwZWN1bGFyLnZhbHVlLmNvcHkoZGEuc3BlY3VsYXIpO1Yuc2hpbmluZXNzLnZhbHVlPU1hdGgubWF4KGRhLnNoaW5pbmVzcywxRS00KTtkYS5lbWlzc2l2ZU1hcCYmKFYuZW1pc3NpdmVNYXAudmFsdWU9ZGEuZW1pc3NpdmVNYXApO2RhLmJ1bXBNYXAmJihWLmJ1bXBNYXAudmFsdWU9ZGEuYnVtcE1hcCxWLmJ1bXBTY2FsZS52YWx1ZT1kYS5idW1wU2NhbGUsMT09PWRhLnNpZGUmJihWLmJ1bXBTY2FsZS52YWx1ZSo9LTEpKTtkYS5ub3JtYWxNYXAmJihWLm5vcm1hbE1hcC52YWx1ZT1kYS5ub3JtYWxNYXAsVi5ub3JtYWxTY2FsZS52YWx1ZS5jb3B5KGRhLm5vcm1hbFNjYWxlKSwxPT09ZGEuc2lkZSYmClYubm9ybWFsU2NhbGUudmFsdWUubmVnYXRlKCkpO2RhLmRpc3BsYWNlbWVudE1hcCYmKFYuZGlzcGxhY2VtZW50TWFwLnZhbHVlPWRhLmRpc3BsYWNlbWVudE1hcCxWLmRpc3BsYWNlbWVudFNjYWxlLnZhbHVlPWRhLmRpc3BsYWNlbWVudFNjYWxlLFYuZGlzcGxhY2VtZW50Qmlhcy52YWx1ZT1kYS5kaXNwbGFjZW1lbnRCaWFzKX1mdW5jdGlvbiBzYShWLGRhKXtCYShWLGRhKTtkYS5ncmFkaWVudE1hcCYmKFYuZ3JhZGllbnRNYXAudmFsdWU9ZGEuZ3JhZGllbnRNYXApfWZ1bmN0aW9uIERhKFYsZGEpe1Yucm91Z2huZXNzLnZhbHVlPWRhLnJvdWdobmVzcztWLm1ldGFsbmVzcy52YWx1ZT1kYS5tZXRhbG5lc3M7ZGEucm91Z2huZXNzTWFwJiYoVi5yb3VnaG5lc3NNYXAudmFsdWU9ZGEucm91Z2huZXNzTWFwKTtkYS5tZXRhbG5lc3NNYXAmJihWLm1ldGFsbmVzc01hcC52YWx1ZT1kYS5tZXRhbG5lc3NNYXApO2RhLmVtaXNzaXZlTWFwJiYoVi5lbWlzc2l2ZU1hcC52YWx1ZT1kYS5lbWlzc2l2ZU1hcCk7CmRhLmJ1bXBNYXAmJihWLmJ1bXBNYXAudmFsdWU9ZGEuYnVtcE1hcCxWLmJ1bXBTY2FsZS52YWx1ZT1kYS5idW1wU2NhbGUsMT09PWRhLnNpZGUmJihWLmJ1bXBTY2FsZS52YWx1ZSo9LTEpKTtkYS5ub3JtYWxNYXAmJihWLm5vcm1hbE1hcC52YWx1ZT1kYS5ub3JtYWxNYXAsVi5ub3JtYWxTY2FsZS52YWx1ZS5jb3B5KGRhLm5vcm1hbFNjYWxlKSwxPT09ZGEuc2lkZSYmVi5ub3JtYWxTY2FsZS52YWx1ZS5uZWdhdGUoKSk7ZGEuZGlzcGxhY2VtZW50TWFwJiYoVi5kaXNwbGFjZW1lbnRNYXAudmFsdWU9ZGEuZGlzcGxhY2VtZW50TWFwLFYuZGlzcGxhY2VtZW50U2NhbGUudmFsdWU9ZGEuZGlzcGxhY2VtZW50U2NhbGUsVi5kaXNwbGFjZW1lbnRCaWFzLnZhbHVlPWRhLmRpc3BsYWNlbWVudEJpYXMpO2RhLmVudk1hcCYmKFYuZW52TWFwSW50ZW5zaXR5LnZhbHVlPWRhLmVudk1hcEludGVuc2l0eSl9ZnVuY3Rpb24gSGEoVixkYSl7RGEoVixkYSk7Vi5yZWZsZWN0aXZpdHkudmFsdWU9ZGEucmVmbGVjdGl2aXR5OwpWLmNsZWFyQ29hdC52YWx1ZT1kYS5jbGVhckNvYXQ7Vi5jbGVhckNvYXRSb3VnaG5lc3MudmFsdWU9ZGEuY2xlYXJDb2F0Um91Z2huZXNzfWZ1bmN0aW9uIEthKFYsZGEpe2RhLm1hdGNhcCYmKFYubWF0Y2FwLnZhbHVlPWRhLm1hdGNhcCk7ZGEuYnVtcE1hcCYmKFYuYnVtcE1hcC52YWx1ZT1kYS5idW1wTWFwLFYuYnVtcFNjYWxlLnZhbHVlPWRhLmJ1bXBTY2FsZSwxPT09ZGEuc2lkZSYmKFYuYnVtcFNjYWxlLnZhbHVlKj0tMSkpO2RhLm5vcm1hbE1hcCYmKFYubm9ybWFsTWFwLnZhbHVlPWRhLm5vcm1hbE1hcCxWLm5vcm1hbFNjYWxlLnZhbHVlLmNvcHkoZGEubm9ybWFsU2NhbGUpLDE9PT1kYS5zaWRlJiZWLm5vcm1hbFNjYWxlLnZhbHVlLm5lZ2F0ZSgpKTtkYS5kaXNwbGFjZW1lbnRNYXAmJihWLmRpc3BsYWNlbWVudE1hcC52YWx1ZT1kYS5kaXNwbGFjZW1lbnRNYXAsVi5kaXNwbGFjZW1lbnRTY2FsZS52YWx1ZT1kYS5kaXNwbGFjZW1lbnRTY2FsZSxWLmRpc3BsYWNlbWVudEJpYXMudmFsdWU9CmRhLmRpc3BsYWNlbWVudEJpYXMpfWZ1bmN0aW9uIE5hKFYsZGEpe2RhLmRpc3BsYWNlbWVudE1hcCYmKFYuZGlzcGxhY2VtZW50TWFwLnZhbHVlPWRhLmRpc3BsYWNlbWVudE1hcCxWLmRpc3BsYWNlbWVudFNjYWxlLnZhbHVlPWRhLmRpc3BsYWNlbWVudFNjYWxlLFYuZGlzcGxhY2VtZW50Qmlhcy52YWx1ZT1kYS5kaXNwbGFjZW1lbnRCaWFzKX1mdW5jdGlvbiBMYShWLGRhKXtkYS5kaXNwbGFjZW1lbnRNYXAmJihWLmRpc3BsYWNlbWVudE1hcC52YWx1ZT1kYS5kaXNwbGFjZW1lbnRNYXAsVi5kaXNwbGFjZW1lbnRTY2FsZS52YWx1ZT1kYS5kaXNwbGFjZW1lbnRTY2FsZSxWLmRpc3BsYWNlbWVudEJpYXMudmFsdWU9ZGEuZGlzcGxhY2VtZW50Qmlhcyk7Vi5yZWZlcmVuY2VQb3NpdGlvbi52YWx1ZS5jb3B5KGRhLnJlZmVyZW5jZVBvc2l0aW9uKTtWLm5lYXJEaXN0YW5jZS52YWx1ZT1kYS5uZWFyRGlzdGFuY2U7Vi5mYXJEaXN0YW5jZS52YWx1ZT1kYS5mYXJEaXN0YW5jZX1mdW5jdGlvbiBmYihWLApkYSl7ZGEuYnVtcE1hcCYmKFYuYnVtcE1hcC52YWx1ZT1kYS5idW1wTWFwLFYuYnVtcFNjYWxlLnZhbHVlPWRhLmJ1bXBTY2FsZSwxPT09ZGEuc2lkZSYmKFYuYnVtcFNjYWxlLnZhbHVlKj0tMSkpO2RhLm5vcm1hbE1hcCYmKFYubm9ybWFsTWFwLnZhbHVlPWRhLm5vcm1hbE1hcCxWLm5vcm1hbFNjYWxlLnZhbHVlLmNvcHkoZGEubm9ybWFsU2NhbGUpLDE9PT1kYS5zaWRlJiZWLm5vcm1hbFNjYWxlLnZhbHVlLm5lZ2F0ZSgpKTtkYS5kaXNwbGFjZW1lbnRNYXAmJihWLmRpc3BsYWNlbWVudE1hcC52YWx1ZT1kYS5kaXNwbGFjZW1lbnRNYXAsVi5kaXNwbGFjZW1lbnRTY2FsZS52YWx1ZT1kYS5kaXNwbGFjZW1lbnRTY2FsZSxWLmRpc3BsYWNlbWVudEJpYXMudmFsdWU9ZGEuZGlzcGxhY2VtZW50Qmlhcyl9ZnVuY3Rpb24gY2IoVixkYSl7Vi5hbWJpZW50TGlnaHRDb2xvci5uZWVkc1VwZGF0ZT1kYTtWLmxpZ2h0UHJvYmUubmVlZHNVcGRhdGU9ZGE7Vi5kaXJlY3Rpb25hbExpZ2h0cy5uZWVkc1VwZGF0ZT0KZGE7Vi5wb2ludExpZ2h0cy5uZWVkc1VwZGF0ZT1kYTtWLnNwb3RMaWdodHMubmVlZHNVcGRhdGU9ZGE7Vi5yZWN0QXJlYUxpZ2h0cy5uZWVkc1VwZGF0ZT1kYTtWLmhlbWlzcGhlcmVMaWdodHMubmVlZHNVcGRhdGU9ZGF9Y29uc29sZS5sb2coIlRIUkVFLldlYkdMUmVuZGVyZXIiLCIxMDQiKTtiPWJ8fHt9O3ZhciBKYT12b2lkIDAhPT1iLmNhbnZhcz9iLmNhbnZhczpkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLCJjYW52YXMiKSxoYj12b2lkIDAhPT1iLmNvbnRleHQ/Yi5jb250ZXh0Om51bGwsVWE9dm9pZCAwIT09Yi5hbHBoYT9iLmFscGhhOiExLEhiPXZvaWQgMCE9PWIuZGVwdGg/Yi5kZXB0aDohMCxxYj12b2lkIDAhPT1iLnN0ZW5jaWw/Yi5zdGVuY2lsOiEwLGphPXZvaWQgMCE9PWIuYW50aWFsaWFzP2IuYW50aWFsaWFzOiExLHBhPXZvaWQgMCE9PWIucHJlbXVsdGlwbGllZEFscGhhP2IucHJlbXVsdGlwbGllZEFscGhhOgohMCx5YT12b2lkIDAhPT1iLnByZXNlcnZlRHJhd2luZ0J1ZmZlcj9iLnByZXNlcnZlRHJhd2luZ0J1ZmZlcjohMSxWYT12b2lkIDAhPT1iLnBvd2VyUHJlZmVyZW5jZT9iLnBvd2VyUHJlZmVyZW5jZToiZGVmYXVsdCIsWmE9bnVsbCxUYT1udWxsO3RoaXMuZG9tRWxlbWVudD1KYTt0aGlzLmNvbnRleHQ9bnVsbDt0aGlzLmRlYnVnPXtjaGVja1NoYWRlckVycm9yczohMX07dGhpcy5zb3J0T2JqZWN0cz10aGlzLmF1dG9DbGVhclN0ZW5jaWw9dGhpcy5hdXRvQ2xlYXJEZXB0aD10aGlzLmF1dG9DbGVhckNvbG9yPXRoaXMuYXV0b0NsZWFyPSEwO3RoaXMuY2xpcHBpbmdQbGFuZXM9W107dGhpcy5sb2NhbENsaXBwaW5nRW5hYmxlZD0hMTt0aGlzLmdhbW1hRmFjdG9yPTI7dGhpcy5waHlzaWNhbGx5Q29ycmVjdExpZ2h0cz10aGlzLmdhbW1hT3V0cHV0PXRoaXMuZ2FtbWFJbnB1dD0hMTt0aGlzLnRvbmVNYXBwaW5nV2hpdGVQb2ludD10aGlzLnRvbmVNYXBwaW5nRXhwb3N1cmU9dGhpcy50b25lTWFwcGluZz0KMTt0aGlzLm1heE1vcnBoVGFyZ2V0cz04O3RoaXMubWF4TW9ycGhOb3JtYWxzPTQ7dmFyIGliPXRoaXMsbWE9ITEsSWE9bnVsbCxPYT1udWxsLHViPW51bGwsYWI9LTE7dmFyIEtiPWU9bnVsbDt2YXIgbGI9ITE7dmFyIFFhPW51bGwsbmI9bnVsbCxwYj1uZXcgbSx2Yj1uZXcgbSxBYj1udWxsLE9iPUphLndpZHRoLFdiPUphLmhlaWdodCxSYj0xLHdkPW5ldyBtKDAsMCxPYixXYiksdmQ9bmV3IG0oMCwwLE9iLFdiKSx4aT0hMSx2aT1uZXcgeCxSYz1uZXcgJGIsZWg9ITEsd2k9ITEsUWY9bmV3IEMsVWQ9bmV3IGc7dHJ5e1VhPXthbHBoYTpVYSxkZXB0aDpIYixzdGVuY2lsOnFiLGFudGlhbGlhczpqYSxwcmVtdWx0aXBsaWVkQWxwaGE6cGEscHJlc2VydmVEcmF3aW5nQnVmZmVyOnlhLHBvd2VyUHJlZmVyZW5jZTpWYX07SmEuYWRkRXZlbnRMaXN0ZW5lcigid2ViZ2xjb250ZXh0bG9zdCIsdSwhMSk7SmEuYWRkRXZlbnRMaXN0ZW5lcigid2ViZ2xjb250ZXh0cmVzdG9yZWQiLHcsITEpOwp2YXIgWWE9aGJ8fEphLmdldENvbnRleHQoIndlYmdsIixVYSl8fEphLmdldENvbnRleHQoImV4cGVyaW1lbnRhbC13ZWJnbCIsVWEpO2lmKG51bGw9PT1ZYSl7aWYobnVsbCE9PUphLmdldENvbnRleHQoIndlYmdsIikpdGhyb3cgRXJyb3IoIkVycm9yIGNyZWF0aW5nIFdlYkdMIGNvbnRleHQgd2l0aCB5b3VyIHNlbGVjdGVkIGF0dHJpYnV0ZXMuIik7dGhyb3cgRXJyb3IoIkVycm9yIGNyZWF0aW5nIFdlYkdMIGNvbnRleHQuIik7fXZvaWQgMD09PVlhLmdldFNoYWRlclByZWNpc2lvbkZvcm1hdCYmKFlhLmdldFNoYWRlclByZWNpc2lvbkZvcm1hdD1mdW5jdGlvbigpe3JldHVybntyYW5nZU1pbjoxLHJhbmdlTWF4OjEscHJlY2lzaW9uOjF9fSl9Y2F0Y2goVil7dGhyb3cgY29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xSZW5kZXJlcjogIitWLm1lc3NhZ2UpLFY7fXZhciBWYix1YyxCYixSZCx2YyxQYyxiaCx1aSxPZSxnZSxjaCxQZSxTZCxzbCx0bCx1bCxrZDtuKCk7dmFyIHhkPSJ1bmRlZmluZWQiIT09CnR5cGVvZiBuYXZpZ2F0b3ImJiJ4ciJpbiBuYXZpZ2F0b3I/bmV3IEtvKGliKTpuZXcgcmwoaWIpO3RoaXMudnI9eGQ7dmFyIHZsPW5ldyBtbChpYixPZSx1Yy5tYXhUZXh0dXJlU2l6ZSk7dGhpcy5zaGFkb3dNYXA9dmw7dGhpcy5nZXRDb250ZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIFlhfTt0aGlzLmdldENvbnRleHRBdHRyaWJ1dGVzPWZ1bmN0aW9uKCl7cmV0dXJuIFlhLmdldENvbnRleHRBdHRyaWJ1dGVzKCl9O3RoaXMuZm9yY2VDb250ZXh0TG9zcz1mdW5jdGlvbigpe3ZhciBWPVZiLmdldCgiV0VCR0xfbG9zZV9jb250ZXh0Iik7ViYmVi5sb3NlQ29udGV4dCgpfTt0aGlzLmZvcmNlQ29udGV4dFJlc3RvcmU9ZnVuY3Rpb24oKXt2YXIgVj1WYi5nZXQoIldFQkdMX2xvc2VfY29udGV4dCIpO1YmJlYucmVzdG9yZUNvbnRleHQoKX07dGhpcy5nZXRQaXhlbFJhdGlvPWZ1bmN0aW9uKCl7cmV0dXJuIFJifTt0aGlzLnNldFBpeGVsUmF0aW89ZnVuY3Rpb24oKXt2YXIgVj13aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbzsKdm9pZCAwIT09ViYmKFJiPVYsdGhpcy5zZXRTaXplKE9iLFdiLCExKSl9O3RoaXMuZ2V0U2l6ZT1mdW5jdGlvbihWKXt2b2lkIDA9PT1WJiYoY29uc29sZS53YXJuKCJXZWJHTFJlbmRlcmVyOiAuZ2V0c2l6ZSgpIG5vdyByZXF1aXJlcyBhIFZlY3RvcjIgYXMgYW4gYXJndW1lbnQiKSxWPW5ldyBkKTtyZXR1cm4gVi5zZXQoT2IsV2IpfTt0aGlzLnNldFNpemU9ZnVuY3Rpb24oVixkYSxvYSl7eGQuaXNQcmVzZW50aW5nKCk/Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBDYW4ndCBjaGFuZ2Ugc2l6ZSB3aGlsZSBWUiBkZXZpY2UgaXMgcHJlc2VudGluZy4iKTooT2I9VixXYj1kYSxKYS53aWR0aD1WKlJiLEphLmhlaWdodD1kYSpSYiwhMSE9PW9hJiYoSmEuc3R5bGUud2lkdGg9VisicHgiLEphLnN0eWxlLmhlaWdodD1kYSsicHgiKSx0aGlzLnNldFZpZXdwb3J0KFYsZGEpKX07dGhpcy5nZXREcmF3aW5nQnVmZmVyU2l6ZT1mdW5jdGlvbihWKXt2b2lkIDA9PT1WJiYoY29uc29sZS53YXJuKCJXZWJHTFJlbmRlcmVyOiAuZ2V0ZHJhd2luZ0J1ZmZlclNpemUoKSBub3cgcmVxdWlyZXMgYSBWZWN0b3IyIGFzIGFuIGFyZ3VtZW50IiksClY9bmV3IGQpO3JldHVybiBWLnNldChPYipSYixXYipSYil9O3RoaXMuc2V0RHJhd2luZ0J1ZmZlclNpemU9ZnVuY3Rpb24oVixkYSxvYSl7T2I9VjtXYj1kYTtSYj1vYTtKYS53aWR0aD1WKm9hO0phLmhlaWdodD1kYSpvYTt0aGlzLnNldFZpZXdwb3J0KFYsZGEpfTt0aGlzLmdldEN1cnJlbnRWaWV3cG9ydD1mdW5jdGlvbihWKXt2b2lkIDA9PT1WJiYoY29uc29sZS53YXJuKCJXZWJHTFJlbmRlcmVyOiAuZ2V0Q3VycmVudFZpZXdwb3J0KCkgbm93IHJlcXVpcmVzIGEgVmVjdG9yNCBhcyBhbiBhcmd1bWVudCIpLFY9bmV3IG0pO3JldHVybiBWLmNvcHkocGIpfTt0aGlzLmdldFZpZXdwb3J0PWZ1bmN0aW9uKFYpe3JldHVybiBWLmNvcHkod2QpfTt0aGlzLnNldFZpZXdwb3J0PWZ1bmN0aW9uKFYsZGEpeygwKS5pc1ZlY3RvcjQ/d2Quc2V0KCgwKS54LCgwKS55LCgwKS56LCgwKS53KTp3ZC5zZXQoMCwwLFYsZGEpO0JiLnZpZXdwb3J0KHBiLmNvcHkod2QpLm11bHRpcGx5U2NhbGFyKFJiKSl9Owp0aGlzLmdldFNjaXNzb3I9ZnVuY3Rpb24oVil7cmV0dXJuIFYuY29weSh2ZCl9O3RoaXMuc2V0U2Npc3Nvcj1mdW5jdGlvbihWLGRhLG9hLE1hKXtWLmlzVmVjdG9yND92ZC5zZXQoVi54LFYueSxWLnosVi53KTp2ZC5zZXQoVixkYSxvYSxNYSk7QmIuc2Npc3Nvcih2Yi5jb3B5KHZkKS5tdWx0aXBseVNjYWxhcihSYikpfTt0aGlzLmdldFNjaXNzb3JUZXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHhpfTt0aGlzLnNldFNjaXNzb3JUZXN0PWZ1bmN0aW9uKFYpe0JiLnNldFNjaXNzb3JUZXN0KHhpPVYpfTt0aGlzLmdldENsZWFyQ29sb3I9ZnVuY3Rpb24oKXtyZXR1cm4gU2QuZ2V0Q2xlYXJDb2xvcigpfTt0aGlzLnNldENsZWFyQ29sb3I9ZnVuY3Rpb24oKXtTZC5zZXRDbGVhckNvbG9yLmFwcGx5KFNkLGFyZ3VtZW50cyl9O3RoaXMuZ2V0Q2xlYXJBbHBoYT1mdW5jdGlvbigpe3JldHVybiBTZC5nZXRDbGVhckFscGhhKCl9O3RoaXMuc2V0Q2xlYXJBbHBoYT1mdW5jdGlvbigpe1NkLnNldENsZWFyQWxwaGEuYXBwbHkoU2QsCmFyZ3VtZW50cyl9O3RoaXMuY2xlYXI9ZnVuY3Rpb24oVixkYSxvYSl7dmFyIE1hPTA7aWYodm9pZCAwPT09Vnx8VilNYXw9MTYzODQ7aWYodm9pZCAwPT09ZGF8fGRhKU1hfD0yNTY7aWYodm9pZCAwPT09b2F8fG9hKU1hfD0xMDI0O1lhLmNsZWFyKE1hKX07dGhpcy5jbGVhckNvbG9yPWZ1bmN0aW9uKCl7dGhpcy5jbGVhcighMCwhMSwhMSl9O3RoaXMuY2xlYXJEZXB0aD1mdW5jdGlvbigpe3RoaXMuY2xlYXIoITEsITAsITEpfTt0aGlzLmNsZWFyU3RlbmNpbD1mdW5jdGlvbigpe3RoaXMuY2xlYXIoITEsITEsITApfTt0aGlzLmRpc3Bvc2U9ZnVuY3Rpb24oKXtKYS5yZW1vdmVFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRsb3N0Iix1LCExKTtKYS5yZW1vdmVFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRyZXN0b3JlZCIsdywhMSk7Y2guZGlzcG9zZSgpO1BlLmRpc3Bvc2UoKTt2Yy5kaXNwb3NlKCk7T2UuZGlzcG9zZSgpO3hkLmRpc3Bvc2UoKTtmaC5zdG9wKCl9O3RoaXMucmVuZGVyQnVmZmVySW1tZWRpYXRlPQpmdW5jdGlvbihWLGRhKXtCYi5pbml0QXR0cmlidXRlcygpO3ZhciBvYT12Yy5nZXQoVik7Vi5oYXNQb3NpdGlvbnMmJiFvYS5wb3NpdGlvbiYmKG9hLnBvc2l0aW9uPVlhLmNyZWF0ZUJ1ZmZlcigpKTtWLmhhc05vcm1hbHMmJiFvYS5ub3JtYWwmJihvYS5ub3JtYWw9WWEuY3JlYXRlQnVmZmVyKCkpO1YuaGFzVXZzJiYhb2EudXYmJihvYS51dj1ZYS5jcmVhdGVCdWZmZXIoKSk7Vi5oYXNDb2xvcnMmJiFvYS5jb2xvciYmKG9hLmNvbG9yPVlhLmNyZWF0ZUJ1ZmZlcigpKTtkYT1kYS5nZXRBdHRyaWJ1dGVzKCk7Vi5oYXNQb3NpdGlvbnMmJihZYS5iaW5kQnVmZmVyKDM0OTYyLG9hLnBvc2l0aW9uKSxZYS5idWZmZXJEYXRhKDM0OTYyLFYucG9zaXRpb25BcnJheSwzNTA0OCksQmIuZW5hYmxlQXR0cmlidXRlKGRhLnBvc2l0aW9uKSxZYS52ZXJ0ZXhBdHRyaWJQb2ludGVyKGRhLnBvc2l0aW9uLDMsNTEyNiwhMSwwLDApKTtWLmhhc05vcm1hbHMmJihZYS5iaW5kQnVmZmVyKDM0OTYyLG9hLm5vcm1hbCksCllhLmJ1ZmZlckRhdGEoMzQ5NjIsVi5ub3JtYWxBcnJheSwzNTA0OCksQmIuZW5hYmxlQXR0cmlidXRlKGRhLm5vcm1hbCksWWEudmVydGV4QXR0cmliUG9pbnRlcihkYS5ub3JtYWwsMyw1MTI2LCExLDAsMCkpO1YuaGFzVXZzJiYoWWEuYmluZEJ1ZmZlcigzNDk2MixvYS51diksWWEuYnVmZmVyRGF0YSgzNDk2MixWLnV2QXJyYXksMzUwNDgpLEJiLmVuYWJsZUF0dHJpYnV0ZShkYS51diksWWEudmVydGV4QXR0cmliUG9pbnRlcihkYS51diwyLDUxMjYsITEsMCwwKSk7Vi5oYXNDb2xvcnMmJihZYS5iaW5kQnVmZmVyKDM0OTYyLG9hLmNvbG9yKSxZYS5idWZmZXJEYXRhKDM0OTYyLFYuY29sb3JBcnJheSwzNTA0OCksQmIuZW5hYmxlQXR0cmlidXRlKGRhLmNvbG9yKSxZYS52ZXJ0ZXhBdHRyaWJQb2ludGVyKGRhLmNvbG9yLDMsNTEyNiwhMSwwLDApKTtCYi5kaXNhYmxlVW51c2VkQXR0cmlidXRlcygpO1lhLmRyYXdBcnJheXMoNCwwLFYuY291bnQpO1YuY291bnQ9MH07dGhpcy5yZW5kZXJCdWZmZXJEaXJlY3Q9CmZ1bmN0aW9uKFYsZGEsb2EsTWEsV2EsUmEpe0JiLnNldE1hdGVyaWFsKE1hLFdhLmlzTWVzaCYmMD5XYS5tYXRyaXhXb3JsZC5kZXRlcm1pbmFudCgpKTt2YXIgWGE9WihWLGRhLE1hLFdhKSwkYT0hMTtpZihlIT09b2EuaWR8fEtiIT09WGEuaWR8fGxiIT09KCEwPT09TWEud2lyZWZyYW1lKSllPW9hLmlkLEtiPVhhLmlkLGxiPSEwPT09TWEud2lyZWZyYW1lLCRhPSEwO1dhLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcyYmKHNsLnVwZGF0ZShXYSxvYSxNYSxYYSksJGE9ITApO3ZhciBGYj1vYS5pbmRleCxyYj1vYS5hdHRyaWJ1dGVzLnBvc2l0aW9uO2RhPTE7ITA9PT1NYS53aXJlZnJhbWUmJihGYj11aS5nZXRXaXJlZnJhbWVBdHRyaWJ1dGUob2EpLGRhPTIpO1Y9dGw7aWYobnVsbCE9PUZiKXt2YXIgZ2I9YmguZ2V0KEZiKTtWPXVsO1Yuc2V0SW5kZXgoZ2IpfSRhJiYoTyhNYSxYYSxvYSksbnVsbCE9PUZiJiZZYS5iaW5kQnVmZmVyKDM0OTYzLGdiLmJ1ZmZlcikpO2diPUluZmluaXR5OwpudWxsIT09RmI/Z2I9RmIuY291bnQ6dm9pZCAwIT09cmImJihnYj1yYi5jb3VudCk7cmI9b2EuZHJhd1JhbmdlLnN0YXJ0KmRhO1hhPW51bGwhPT1SYT9SYS5zdGFydCpkYTowO0ZiPU1hdGgubWF4KHJiLFhhKTtSYT1NYXRoLm1heCgwLE1hdGgubWluKGdiLHJiK29hLmRyYXdSYW5nZS5jb3VudCpkYSxYYSsobnVsbCE9PVJhP1JhLmNvdW50KmRhOkluZmluaXR5KSktMS1GYisxKTtpZigwIT09UmEpe2lmKFdhLmlzTWVzaClpZighMD09PU1hLndpcmVmcmFtZSlCYi5zZXRMaW5lV2lkdGgoTWEud2lyZWZyYW1lTGluZXdpZHRoKmgoKSksVi5zZXRNb2RlKDEpO2Vsc2Ugc3dpdGNoKFdhLmRyYXdNb2RlKXtjYXNlIDA6Vi5zZXRNb2RlKDQpO2JyZWFrO2Nhc2UgMTpWLnNldE1vZGUoNSk7YnJlYWs7Y2FzZSAyOlYuc2V0TW9kZSg2KX1lbHNlIFdhLmlzTGluZT8oTWE9TWEubGluZXdpZHRoLHZvaWQgMD09PU1hJiYoTWE9MSksQmIuc2V0TGluZVdpZHRoKE1hKmgoKSksV2EuaXNMaW5lU2VnbWVudHM/ClYuc2V0TW9kZSgxKTpXYS5pc0xpbmVMb29wP1Yuc2V0TW9kZSgyKTpWLnNldE1vZGUoMykpOldhLmlzUG9pbnRzP1Yuc2V0TW9kZSgwKTpXYS5pc1Nwcml0ZSYmVi5zZXRNb2RlKDQpO29hJiZvYS5pc0luc3RhbmNlZEJ1ZmZlckdlb21ldHJ5PzA8b2EubWF4SW5zdGFuY2VkQ291bnQmJlYucmVuZGVySW5zdGFuY2VzKG9hLEZiLFJhKTpWLnJlbmRlcihGYixSYSl9fTt0aGlzLmNvbXBpbGU9ZnVuY3Rpb24oVixkYSl7VGE9UGUuZ2V0KFYsZGEpO1RhLmluaXQoKTtWLnRyYXZlcnNlKGZ1bmN0aW9uKG9hKXtvYS5pc0xpZ2h0JiYoVGEucHVzaExpZ2h0KG9hKSxvYS5jYXN0U2hhZG93JiZUYS5wdXNoU2hhZG93KG9hKSl9KTtUYS5zZXR1cExpZ2h0cyhkYSk7Vi50cmF2ZXJzZShmdW5jdGlvbihvYSl7aWYob2EubWF0ZXJpYWwpaWYoQXJyYXkuaXNBcnJheShvYS5tYXRlcmlhbCkpZm9yKHZhciBNYT0wO01hPG9hLm1hdGVyaWFsLmxlbmd0aDtNYSsrKVcob2EubWF0ZXJpYWxbTWFdLFYuZm9nLApvYSk7ZWxzZSBXKG9hLm1hdGVyaWFsLFYuZm9nLG9hKX0pfTt2YXIgeWk9bnVsbCxmaD1uZXcgRztmaC5zZXRBbmltYXRpb25Mb29wKGZ1bmN0aW9uKFYpe3hkLmlzUHJlc2VudGluZygpfHx5aSYmeWkoVil9KTsidW5kZWZpbmVkIiE9PXR5cGVvZiB3aW5kb3cmJmZoLnNldENvbnRleHQod2luZG93KTt0aGlzLnNldEFuaW1hdGlvbkxvb3A9ZnVuY3Rpb24oVil7eWk9Vjt4ZC5zZXRBbmltYXRpb25Mb29wKFYpO2ZoLnN0YXJ0KCl9O3RoaXMucmVuZGVyPWZ1bmN0aW9uKFYsZGEsb2EsTWEpe2lmKHZvaWQgMCE9PW9hKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXIucmVuZGVyKCk6IHRoZSByZW5kZXJUYXJnZXQgYXJndW1lbnQgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIC5zZXRSZW5kZXJUYXJnZXQoKSBpbnN0ZWFkLiIpO3ZhciBXYT1vYX1pZih2b2lkIDAhPT1NYSl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyLnJlbmRlcigpOiB0aGUgZm9yY2VDbGVhciBhcmd1bWVudCBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLmNsZWFyKCkgaW5zdGVhZC4iKTsKdmFyIFJhPU1hfWRhJiZkYS5pc0NhbWVyYT9tYXx8KEtiPWU9bnVsbCxsYj0hMSxhYj0tMSxRYT1udWxsLCEwPT09Vi5hdXRvVXBkYXRlJiZWLnVwZGF0ZU1hdHJpeFdvcmxkKCksbnVsbD09PWRhLnBhcmVudCYmZGEudXBkYXRlTWF0cml4V29ybGQoKSx4ZC5lbmFibGVkJiYoZGE9eGQuZ2V0Q2FtZXJhKGRhKSksVGE9UGUuZ2V0KFYsZGEpLFRhLmluaXQoKSxWLm9uQmVmb3JlUmVuZGVyKGliLFYsZGEsV2F8fE9hKSxRZi5tdWx0aXBseU1hdHJpY2VzKGRhLnByb2plY3Rpb25NYXRyaXgsZGEubWF0cml4V29ybGRJbnZlcnNlKSx2aS5zZXRGcm9tTWF0cml4KFFmKSx3aT10aGlzLmxvY2FsQ2xpcHBpbmdFbmFibGVkLGVoPVJjLmluaXQodGhpcy5jbGlwcGluZ1BsYW5lcyx3aSxkYSksWmE9Y2guZ2V0KFYsZGEpLFphLmluaXQoKSxRKFYsZGEsMCxpYi5zb3J0T2JqZWN0cyksITA9PT1pYi5zb3J0T2JqZWN0cyYmWmEuc29ydCgpLGVoJiZSYy5iZWdpblNoYWRvd3MoKSx2bC5yZW5kZXIoVGEuc3RhdGUuc2hhZG93c0FycmF5LApWLGRhKSxUYS5zZXR1cExpZ2h0cyhkYSksZWgmJlJjLmVuZFNoYWRvd3MoKSx0aGlzLmluZm8uYXV0b1Jlc2V0JiZ0aGlzLmluZm8ucmVzZXQoKSx2b2lkIDAhPT1XYSYmdGhpcy5zZXRSZW5kZXJUYXJnZXQoV2EpLFNkLnJlbmRlcihaYSxWLGRhLFJhKSxvYT1aYS5vcGFxdWUsTWE9WmEudHJhbnNwYXJlbnQsVi5vdmVycmlkZU1hdGVyaWFsPyhXYT1WLm92ZXJyaWRlTWF0ZXJpYWwsb2EubGVuZ3RoJiZSKG9hLFYsZGEsV2EpLE1hLmxlbmd0aCYmUihNYSxWLGRhLFdhKSk6KG9hLmxlbmd0aCYmUihvYSxWLGRhKSxNYS5sZW5ndGgmJlIoTWEsVixkYSkpLG51bGwhPT1PYSYmKFBjLnVwZGF0ZVJlbmRlclRhcmdldE1pcG1hcChPYSksUGMudXBkYXRlTXVsdGlzYW1wbGVSZW5kZXJUYXJnZXQoT2EpKSxCYi5idWZmZXJzLmRlcHRoLnNldFRlc3QoITApLEJiLmJ1ZmZlcnMuZGVwdGguc2V0TWFzayghMCksQmIuYnVmZmVycy5jb2xvci5zZXRNYXNrKCEwKSxCYi5zZXRQb2x5Z29uT2Zmc2V0KCExKSwKeGQuZW5hYmxlZCYmeGQuc3VibWl0RnJhbWUoKSxUYT1aYT1udWxsKTpjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFJlbmRlcmVyLnJlbmRlcjogY2FtZXJhIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBUSFJFRS5DYW1lcmEuIil9O3RoaXMuc2V0RnJhbWVidWZmZXI9ZnVuY3Rpb24oVil7SWE9Vn07dGhpcy5nZXRSZW5kZXJUYXJnZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gT2F9O3RoaXMuc2V0UmVuZGVyVGFyZ2V0PWZ1bmN0aW9uKFYsZGEpeyhPYT1WKSYmdm9pZCAwPT09dmMuZ2V0KFYpLl9fd2ViZ2xGcmFtZWJ1ZmZlciYmUGMuc2V0dXBSZW5kZXJUYXJnZXQoVik7dmFyIG9hPUlhLE1hPSExO1Y/KG9hPXZjLmdldChWKS5fX3dlYmdsRnJhbWVidWZmZXIsVi5pc1dlYkdMUmVuZGVyVGFyZ2V0Q3ViZT8ob2E9b2FbZGF8fDBdLE1hPSEwKTpvYT1WLmlzV2ViR0xNdWx0aXNhbXBsZVJlbmRlclRhcmdldD92Yy5nZXQoVikuX193ZWJnbE11bHRpc2FtcGxlZEZyYW1lYnVmZmVyOm9hLHBiLmNvcHkoVi52aWV3cG9ydCksCnZiLmNvcHkoVi5zY2lzc29yKSxBYj1WLnNjaXNzb3JUZXN0KToocGIuY29weSh3ZCkubXVsdGlwbHlTY2FsYXIoUmIpLHZiLmNvcHkodmQpLm11bHRpcGx5U2NhbGFyKFJiKSxBYj14aSk7dWIhPT1vYSYmKFlhLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxvYSksdWI9b2EpO0JiLnZpZXdwb3J0KHBiKTtCYi5zY2lzc29yKHZiKTtCYi5zZXRTY2lzc29yVGVzdChBYik7TWEmJihWPXZjLmdldChWLnRleHR1cmUpLFlhLmZyYW1lYnVmZmVyVGV4dHVyZTJEKDM2MTYwLDM2MDY0LDM0MDY5KyhkYXx8MCksVi5fX3dlYmdsVGV4dHVyZSwwKSl9O3RoaXMucmVhZFJlbmRlclRhcmdldFBpeGVscz1mdW5jdGlvbihWLGRhLG9hLE1hLFdhLFJhKXtpZihWJiZWLmlzV2ViR0xSZW5kZXJUYXJnZXQpe3ZhciBYYT12Yy5nZXQoVikuX193ZWJnbEZyYW1lYnVmZmVyO2lmKFhhKXt2YXIgJGE9ITE7WGEhPT11YiYmKFlhLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxYYSksJGE9ITApO3RyeXt2YXIgRmI9Vi50ZXh0dXJlLApyYj1GYi5mb3JtYXQsZ2I9RmIudHlwZTsxMDIzIT09cmImJmtkLmNvbnZlcnQocmIpIT09WWEuZ2V0UGFyYW1ldGVyKDM1NzM5KT9jb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFJlbmRlcmVyLnJlYWRSZW5kZXJUYXJnZXRQaXhlbHM6IHJlbmRlclRhcmdldCBpcyBub3QgaW4gUkdCQSBvciBpbXBsZW1lbnRhdGlvbiBkZWZpbmVkIGZvcm1hdC4iKToxMDA5PT09Z2J8fGtkLmNvbnZlcnQoZ2IpPT09WWEuZ2V0UGFyYW1ldGVyKDM1NzM4KXx8MTAxNT09PWdiJiYodWMuaXNXZWJHTDJ8fFZiLmdldCgiT0VTX3RleHR1cmVfZmxvYXQiKXx8VmIuZ2V0KCJXRUJHTF9jb2xvcl9idWZmZXJfZmxvYXQiKSl8fDEwMTY9PT1nYiYmKHVjLmlzV2ViR0wyP1ZiLmdldCgiRVhUX2NvbG9yX2J1ZmZlcl9mbG9hdCIpOlZiLmdldCgiRVhUX2NvbG9yX2J1ZmZlcl9oYWxmX2Zsb2F0IikpPzM2MDUzPT09WWEuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cygzNjE2MCk/MDw9ZGEmJmRhPD1WLndpZHRoLU1hJiYKMDw9b2EmJm9hPD1WLmhlaWdodC1XYSYmWWEucmVhZFBpeGVscyhkYSxvYSxNYSxXYSxrZC5jb252ZXJ0KHJiKSxrZC5jb252ZXJ0KGdiKSxSYSk6Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xSZW5kZXJlci5yZWFkUmVuZGVyVGFyZ2V0UGl4ZWxzOiByZWFkUGl4ZWxzIGZyb20gcmVuZGVyVGFyZ2V0IGZhaWxlZC4gRnJhbWVidWZmZXIgbm90IGNvbXBsZXRlLiIpOmNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMUmVuZGVyZXIucmVhZFJlbmRlclRhcmdldFBpeGVsczogcmVuZGVyVGFyZ2V0IGlzIG5vdCBpbiBVbnNpZ25lZEJ5dGVUeXBlIG9yIGltcGxlbWVudGF0aW9uIGRlZmluZWQgdHlwZS4iKX1maW5hbGx5eyRhJiZZYS5iaW5kRnJhbWVidWZmZXIoMzYxNjAsdWIpfX19ZWxzZSBjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFJlbmRlcmVyLnJlYWRSZW5kZXJUYXJnZXRQaXhlbHM6IHJlbmRlclRhcmdldCBpcyBub3QgVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQuIil9O3RoaXMuY29weUZyYW1lYnVmZmVyVG9UZXh0dXJlPQpmdW5jdGlvbihWLGRhLG9hKXt2YXIgTWE9ZGEuaW1hZ2Uud2lkdGgsV2E9ZGEuaW1hZ2UuaGVpZ2h0LFJhPWtkLmNvbnZlcnQoZGEuZm9ybWF0KTtQYy5zZXRUZXh0dXJlMkQoZGEsMCk7WWEuY29weVRleEltYWdlMkQoMzU1MyxvYXx8MCxSYSxWLngsVi55LE1hLFdhLDApfTt0aGlzLmNvcHlUZXh0dXJlVG9UZXh0dXJlPWZ1bmN0aW9uKFYsZGEsb2EsTWEpe3ZhciBXYT1kYS5pbWFnZS53aWR0aCxSYT1kYS5pbWFnZS5oZWlnaHQsWGE9a2QuY29udmVydChvYS5mb3JtYXQpLCRhPWtkLmNvbnZlcnQob2EudHlwZSk7UGMuc2V0VGV4dHVyZTJEKG9hLDApO2RhLmlzRGF0YVRleHR1cmU/WWEudGV4U3ViSW1hZ2UyRCgzNTUzLE1hfHwwLFYueCxWLnksV2EsUmEsWGEsJGEsZGEuaW1hZ2UuZGF0YSk6WWEudGV4U3ViSW1hZ2UyRCgzNTUzLE1hfHwwLFYueCxWLnksWGEsJGEsZGEuaW1hZ2UpfX1mdW5jdGlvbiBnaChiLGUpe3RoaXMubmFtZT0iIjt0aGlzLmNvbG9yPW5ldyBCKGIpO3RoaXMuZGVuc2l0eT0Kdm9pZCAwIT09ZT9lOjIuNUUtNH1mdW5jdGlvbiBoaChiLGUsaCl7dGhpcy5uYW1lPSIiO3RoaXMuY29sb3I9bmV3IEIoYik7dGhpcy5uZWFyPXZvaWQgMCE9PWU/ZToxO3RoaXMuZmFyPXZvaWQgMCE9PWg/aDoxRTN9ZnVuY3Rpb24gaWgoKXtTLmNhbGwodGhpcyk7dGhpcy50eXBlPSJTY2VuZSI7dGhpcy5vdmVycmlkZU1hdGVyaWFsPXRoaXMuZm9nPXRoaXMuYmFja2dyb3VuZD1udWxsO3RoaXMuYXV0b1VwZGF0ZT0hMH1mdW5jdGlvbiBoZShiLGUpe3RoaXMuYXJyYXk9Yjt0aGlzLnN0cmlkZT1lO3RoaXMuY291bnQ9dm9pZCAwIT09Yj9iLmxlbmd0aC9lOjA7dGhpcy5keW5hbWljPSExO3RoaXMudXBkYXRlUmFuZ2U9e29mZnNldDowLGNvdW50Oi0xfTt0aGlzLnZlcnNpb249MH1mdW5jdGlvbiBSZihiLGUsaCxuKXt0aGlzLmRhdGE9Yjt0aGlzLml0ZW1TaXplPWU7dGhpcy5vZmZzZXQ9aDt0aGlzLm5vcm1hbGl6ZWQ9ITA9PT1ufWZ1bmN0aW9uIFZkKGIpe0dhLmNhbGwodGhpcyk7CnRoaXMudHlwZT0iU3ByaXRlTWF0ZXJpYWwiO3RoaXMuY29sb3I9bmV3IEIoMTY3NzcyMTUpO3RoaXMubWFwPW51bGw7dGhpcy5yb3RhdGlvbj0wO3RoaXMuc2l6ZUF0dGVudWF0aW9uPSEwO3RoaXMubGlnaHRzPSExO3RoaXMudHJhbnNwYXJlbnQ9ITA7dGhpcy5zZXRWYWx1ZXMoYil9ZnVuY3Rpb24gU2YoYil7Uy5jYWxsKHRoaXMpO3RoaXMudHlwZT0iU3ByaXRlIjtpZih2b2lkIDA9PT1RZSl7UWU9bmV3IHhhO3ZhciBlPW5ldyBoZShuZXcgRmxvYXQzMkFycmF5KFstLjUsLS41LDAsMCwwLC41LC0uNSwwLDEsMCwuNSwuNSwwLDEsMSwtLjUsLjUsMCwwLDFdKSw1KTtRZS5zZXRJbmRleChbMCwxLDIsMCwyLDNdKTtRZS5hZGRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgUmYoZSwzLDAsITEpKTtRZS5hZGRBdHRyaWJ1dGUoInV2IixuZXcgUmYoZSwyLDMsITEpKX10aGlzLmdlb21ldHJ5PVFlO3RoaXMubWF0ZXJpYWw9dm9pZCAwIT09Yj9iOm5ldyBWZDt0aGlzLmNlbnRlcj1uZXcgZCguNSwKLjUpfWZ1bmN0aW9uIFRmKCl7Uy5jYWxsKHRoaXMpO3RoaXMudHlwZT0iTE9EIjtPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0aGlzLHtsZXZlbHM6e2VudW1lcmFibGU6ITAsdmFsdWU6W119fSl9ZnVuY3Rpb24gVWYoYixlKXtiJiZiLmlzR2VvbWV0cnkmJmNvbnNvbGUuZXJyb3IoIlRIUkVFLlNraW5uZWRNZXNoIG5vIGxvbmdlciBzdXBwb3J0cyBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIik7dGIuY2FsbCh0aGlzLGIsZSk7dGhpcy50eXBlPSJTa2lubmVkTWVzaCI7dGhpcy5iaW5kTW9kZT0iYXR0YWNoZWQiO3RoaXMuYmluZE1hdHJpeD1uZXcgQzt0aGlzLmJpbmRNYXRyaXhJbnZlcnNlPW5ldyBDfWZ1bmN0aW9uIGpoKGIsZSl7Yj1ifHxbXTt0aGlzLmJvbmVzPWIuc2xpY2UoMCk7dGhpcy5ib25lTWF0cmljZXM9bmV3IEZsb2F0MzJBcnJheSgxNip0aGlzLmJvbmVzLmxlbmd0aCk7aWYodm9pZCAwPT09ZSl0aGlzLmNhbGN1bGF0ZUludmVyc2VzKCk7CmVsc2UgaWYodGhpcy5ib25lcy5sZW5ndGg9PT1lLmxlbmd0aCl0aGlzLmJvbmVJbnZlcnNlcz1lLnNsaWNlKDApO2Vsc2UgZm9yKGNvbnNvbGUud2FybigiVEhSRUUuU2tlbGV0b24gYm9uZUludmVyc2VzIGlzIHRoZSB3cm9uZyBsZW5ndGguIiksdGhpcy5ib25lSW52ZXJzZXM9W10sYj0wLGU9dGhpcy5ib25lcy5sZW5ndGg7YjxlO2IrKyl0aGlzLmJvbmVJbnZlcnNlcy5wdXNoKG5ldyBDKX1mdW5jdGlvbiB6aSgpe1MuY2FsbCh0aGlzKTt0aGlzLnR5cGU9IkJvbmUifWZ1bmN0aW9uIExiKGIpe0dhLmNhbGwodGhpcyk7dGhpcy50eXBlPSJMaW5lQmFzaWNNYXRlcmlhbCI7dGhpcy5jb2xvcj1uZXcgQigxNjc3NzIxNSk7dGhpcy5saW5ld2lkdGg9MTt0aGlzLmxpbmVqb2luPXRoaXMubGluZWNhcD0icm91bmQiO3RoaXMubGlnaHRzPSExO3RoaXMuc2V0VmFsdWVzKGIpfWZ1bmN0aW9uIGxjKGIsZSxoKXsxPT09aCYmY29uc29sZS5lcnJvcigiVEhSRUUuTGluZTogcGFyYW1ldGVyIFRIUkVFLkxpbmVQaWVjZXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC4gVXNlIFRIUkVFLkxpbmVTZWdtZW50cyBpbnN0ZWFkLiIpOwpTLmNhbGwodGhpcyk7dGhpcy50eXBlPSJMaW5lIjt0aGlzLmdlb21ldHJ5PXZvaWQgMCE9PWI/YjpuZXcgeGE7dGhpcy5tYXRlcmlhbD12b2lkIDAhPT1lP2U6bmV3IExiKHtjb2xvcjoxNjc3NzIxNSpNYXRoLnJhbmRvbSgpfSl9ZnVuY3Rpb24gUGIoYixlKXtsYy5jYWxsKHRoaXMsYixlKTt0aGlzLnR5cGU9IkxpbmVTZWdtZW50cyJ9ZnVuY3Rpb24ga2goYixlKXtsYy5jYWxsKHRoaXMsYixlKTt0aGlzLnR5cGU9IkxpbmVMb29wIn1mdW5jdGlvbiBTYyhiKXtHYS5jYWxsKHRoaXMpO3RoaXMudHlwZT0iUG9pbnRzTWF0ZXJpYWwiO3RoaXMuY29sb3I9bmV3IEIoMTY3NzcyMTUpO3RoaXMubWFwPW51bGw7dGhpcy5zaXplPTE7dGhpcy5zaXplQXR0ZW51YXRpb249ITA7dGhpcy5saWdodHM9dGhpcy5tb3JwaFRhcmdldHM9ITE7dGhpcy5zZXRWYWx1ZXMoYil9ZnVuY3Rpb24gUmUoYixlKXtTLmNhbGwodGhpcyk7dGhpcy50eXBlPSJQb2ludHMiO3RoaXMuZ2VvbWV0cnk9dm9pZCAwIT09CmI/YjpuZXcgeGE7dGhpcy5tYXRlcmlhbD12b2lkIDAhPT1lP2U6bmV3IFNjKHtjb2xvcjoxNjc3NzIxNSpNYXRoLnJhbmRvbSgpfSl9ZnVuY3Rpb24gQWkoYixlLGgsbix1LHcseixFLEgpe2suY2FsbCh0aGlzLGIsZSxoLG4sdSx3LHosRSxIKTt0aGlzLmZvcm1hdD12b2lkIDAhPT16P3o6MTAyMjt0aGlzLm1pbkZpbHRlcj12b2lkIDAhPT13P3c6MTAwNjt0aGlzLm1hZ0ZpbHRlcj12b2lkIDAhPT11P3U6MTAwNjt0aGlzLmdlbmVyYXRlTWlwbWFwcz0hMX1mdW5jdGlvbiBTZShiLGUsaCxuLHUsdyx6LEUsSCxJLE8sUSl7ay5jYWxsKHRoaXMsbnVsbCx3LHosRSxILEksbix1LE8sUSk7dGhpcy5pbWFnZT17d2lkdGg6ZSxoZWlnaHQ6aH07dGhpcy5taXBtYXBzPWI7dGhpcy5nZW5lcmF0ZU1pcG1hcHM9dGhpcy5mbGlwWT0hMX1mdW5jdGlvbiBWZihiLGUsaCxuLHUsdyx6LEUsSCl7ay5jYWxsKHRoaXMsYixlLGgsbix1LHcseixFLEgpO3RoaXMubmVlZHNVcGRhdGU9ITB9ZnVuY3Rpb24gV2YoYiwKZSxoLG4sdSx3LHosRSxILEkpe0k9dm9pZCAwIT09ST9JOjEwMjY7aWYoMTAyNiE9PUkmJjEwMjchPT1JKXRocm93IEVycm9yKCJEZXB0aFRleHR1cmUgZm9ybWF0IG11c3QgYmUgZWl0aGVyIFRIUkVFLkRlcHRoRm9ybWF0IG9yIFRIUkVFLkRlcHRoU3RlbmNpbEZvcm1hdCIpO3ZvaWQgMD09PWgmJjEwMjY9PT1JJiYoaD0xMDEyKTt2b2lkIDA9PT1oJiYxMDI3PT09SSYmKGg9MTAyMCk7ay5jYWxsKHRoaXMsbnVsbCxuLHUsdyx6LEUsSSxoLEgpO3RoaXMuaW1hZ2U9e3dpZHRoOmIsaGVpZ2h0OmV9O3RoaXMubWFnRmlsdGVyPXZvaWQgMCE9PXo/ejoxMDAzO3RoaXMubWluRmlsdGVyPXZvaWQgMCE9PUU/RToxMDAzO3RoaXMuZ2VuZXJhdGVNaXBtYXBzPXRoaXMuZmxpcFk9ITF9ZnVuY3Rpb24gVGUoYil7eGEuY2FsbCh0aGlzKTt0aGlzLnR5cGU9IldpcmVmcmFtZUdlb21ldHJ5Ijt2YXIgZT1bXSxoLG4sdSx3PVswLDBdLHo9e30sRT1bImEiLCJiIiwiYyJdO2lmKGImJmIuaXNHZW9tZXRyeSl7dmFyIEg9CmIuZmFjZXM7dmFyIEk9MDtmb3Iobj1ILmxlbmd0aDtJPG47SSsrKXt2YXIgTz1IW0ldO2ZvcihoPTA7Mz5oO2grKyl7dmFyIFE9T1tFW2hdXTt2YXIgUj1PW0VbKGgrMSklM11dO3dbMF09TWF0aC5taW4oUSxSKTt3WzFdPU1hdGgubWF4KFEsUik7UT13WzBdKyIsIit3WzFdO3ZvaWQgMD09PXpbUV0mJih6W1FdPXtpbmRleDE6d1swXSxpbmRleDI6d1sxXX0pfX1mb3IoUSBpbiB6KUk9eltRXSxFPWIudmVydGljZXNbSS5pbmRleDFdLGUucHVzaChFLngsRS55LEUueiksRT1iLnZlcnRpY2VzW0kuaW5kZXgyXSxlLnB1c2goRS54LEUueSxFLnopfWVsc2UgaWYoYiYmYi5pc0J1ZmZlckdlb21ldHJ5KWlmKEU9bmV3IGcsbnVsbCE9PWIuaW5kZXgpe0g9Yi5hdHRyaWJ1dGVzLnBvc2l0aW9uO089Yi5pbmRleDt2YXIgVT1iLmdyb3VwczswPT09VS5sZW5ndGgmJihVPVt7c3RhcnQ6MCxjb3VudDpPLmNvdW50LG1hdGVyaWFsSW5kZXg6MH1dKTtiPTA7Zm9yKHU9VS5sZW5ndGg7Yjx1OysrYilmb3IoST0KVVtiXSxoPUkuc3RhcnQsbj1JLmNvdW50LEk9aCxuPWgrbjtJPG47SSs9Mylmb3IoaD0wOzM+aDtoKyspUT1PLmdldFgoSStoKSxSPU8uZ2V0WChJKyhoKzEpJTMpLHdbMF09TWF0aC5taW4oUSxSKSx3WzFdPU1hdGgubWF4KFEsUiksUT13WzBdKyIsIit3WzFdLHZvaWQgMD09PXpbUV0mJih6W1FdPXtpbmRleDE6d1swXSxpbmRleDI6d1sxXX0pO2ZvcihRIGluIHopST16W1FdLEUuZnJvbUJ1ZmZlckF0dHJpYnV0ZShILEkuaW5kZXgxKSxlLnB1c2goRS54LEUueSxFLnopLEUuZnJvbUJ1ZmZlckF0dHJpYnV0ZShILEkuaW5kZXgyKSxlLnB1c2goRS54LEUueSxFLnopfWVsc2UgZm9yKEg9Yi5hdHRyaWJ1dGVzLnBvc2l0aW9uLEk9MCxuPUguY291bnQvMztJPG47SSsrKWZvcihoPTA7Mz5oO2grKyl6PTMqSStoLEUuZnJvbUJ1ZmZlckF0dHJpYnV0ZShILHopLGUucHVzaChFLngsRS55LEUueiksej0zKkkrKGgrMSklMyxFLmZyb21CdWZmZXJBdHRyaWJ1dGUoSCx6KSxlLnB1c2goRS54LApFLnksRS56KTt0aGlzLmFkZEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBiYShlLDMpKX1mdW5jdGlvbiBYZihiLGUsaCl7Ti5jYWxsKHRoaXMpO3RoaXMudHlwZT0iUGFyYW1ldHJpY0dlb21ldHJ5Ijt0aGlzLnBhcmFtZXRlcnM9e2Z1bmM6YixzbGljZXM6ZSxzdGFja3M6aH07dGhpcy5mcm9tQnVmZmVyR2VvbWV0cnkobmV3IFVlKGIsZSxoKSk7dGhpcy5tZXJnZVZlcnRpY2VzKCl9ZnVuY3Rpb24gVWUoYixlLGgpe3hhLmNhbGwodGhpcyk7dGhpcy50eXBlPSJQYXJhbWV0cmljQnVmZmVyR2VvbWV0cnkiO3RoaXMucGFyYW1ldGVycz17ZnVuYzpiLHNsaWNlczplLHN0YWNrczpofTt2YXIgbj1bXSx1PVtdLHc9W10sej1bXSxFPW5ldyBnLEg9bmV3IGcsST1uZXcgZyxPPW5ldyBnLFE9bmV3IGcsUixVOzM+Yi5sZW5ndGgmJmNvbnNvbGUuZXJyb3IoIlRIUkVFLlBhcmFtZXRyaWNHZW9tZXRyeTogRnVuY3Rpb24gbXVzdCBub3cgbW9kaWZ5IGEgVmVjdG9yMyBhcyB0aGlyZCBwYXJhbWV0ZXIuIik7CnZhciBXPWUrMTtmb3IoUj0wO1I8PWg7UisrKXt2YXIgWj1SL2g7Zm9yKFU9MDtVPD1lO1UrKyl7dmFyIGZhPVUvZTtiKGZhLFosSCk7dS5wdXNoKEgueCxILnksSC56KTswPD1mYS0xRS01PyhiKGZhLTFFLTUsWixJKSxPLnN1YlZlY3RvcnMoSCxJKSk6KGIoZmErMUUtNSxaLEkpLE8uc3ViVmVjdG9ycyhJLEgpKTswPD1aLTFFLTU/KGIoZmEsWi0xRS01LEkpLFEuc3ViVmVjdG9ycyhILEkpKTooYihmYSxaKzFFLTUsSSksUS5zdWJWZWN0b3JzKEksSCkpO0UuY3Jvc3NWZWN0b3JzKE8sUSkubm9ybWFsaXplKCk7dy5wdXNoKEUueCxFLnksRS56KTt6LnB1c2goZmEsWil9fWZvcihSPTA7UjxoO1IrKylmb3IoVT0wO1U8ZTtVKyspYj1SKlcrVSsxLEU9KFIrMSkqVytVKzEsSD0oUisxKSpXK1Usbi5wdXNoKFIqVytVLGIsSCksbi5wdXNoKGIsRSxIKTt0aGlzLnNldEluZGV4KG4pO3RoaXMuYWRkQXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IGJhKHUsMykpO3RoaXMuYWRkQXR0cmlidXRlKCJub3JtYWwiLApuZXcgYmEodywzKSk7dGhpcy5hZGRBdHRyaWJ1dGUoInV2IixuZXcgYmEoeiwyKSl9ZnVuY3Rpb24gWWYoYixlLGgsbil7Ti5jYWxsKHRoaXMpO3RoaXMudHlwZT0iUG9seWhlZHJvbkdlb21ldHJ5Ijt0aGlzLnBhcmFtZXRlcnM9e3ZlcnRpY2VzOmIsaW5kaWNlczplLHJhZGl1czpoLGRldGFpbDpufTt0aGlzLmZyb21CdWZmZXJHZW9tZXRyeShuZXcgemMoYixlLGgsbikpO3RoaXMubWVyZ2VWZXJ0aWNlcygpfWZ1bmN0aW9uIHpjKGIsZSxoLG4pe2Z1bmN0aW9uIHUoVyxaLGZhLHFhKXtxYT1NYXRoLnBvdygyLHFhKTt2YXIgcmE9W10saWEsdGE7Zm9yKGlhPTA7aWE8PXFhO2lhKyspe3JhW2lhXT1bXTt2YXIgbmE9Vy5jbG9uZSgpLmxlcnAoZmEsaWEvcWEpLHZhPVouY2xvbmUoKS5sZXJwKGZhLGlhL3FhKSxCYT1xYS1pYTtmb3IodGE9MDt0YTw9QmE7dGErKylyYVtpYV1bdGFdPTA9PT10YSYmaWE9PT1xYT9uYTpuYS5jbG9uZSgpLmxlcnAodmEsdGEvQmEpfWZvcihpYT0wO2lhPHFhO2lhKyspZm9yKHRhPQowO3RhPDIqKHFhLWlhKS0xO3RhKyspVz1NYXRoLmZsb29yKHRhLzIpLDA9PT10YSUyPyh6KHJhW2lhXVtXKzFdKSx6KHJhW2lhKzFdW1ddKSx6KHJhW2lhXVtXXSkpOih6KHJhW2lhXVtXKzFdKSx6KHJhW2lhKzFdW1crMV0pLHoocmFbaWErMV1bV10pKX1mdW5jdGlvbiB3KCl7Zm9yKHZhciBXPTA7VzxVLmxlbmd0aDtXKz02KXt2YXIgWj1VW1crMF0sZmE9VVtXKzJdLHFhPVVbVys0XSxyYT1NYXRoLm1pbihaLGZhLHFhKTsuOTxNYXRoLm1heChaLGZhLHFhKSYmLjE+cmEmJiguMj5aJiYoVVtXKzBdKz0xKSwuMj5mYSYmKFVbVysyXSs9MSksLjI+cWEmJihVW1crNF0rPTEpKX19ZnVuY3Rpb24geihXKXtSLnB1c2goVy54LFcueSxXLnopfWZ1bmN0aW9uIEUoVyxaKXtXKj0zO1oueD1iW1crMF07Wi55PWJbVysxXTtaLno9YltXKzJdfWZ1bmN0aW9uIEgoKXtmb3IodmFyIFc9bmV3IGcsWj1uZXcgZyxmYT1uZXcgZyxxYT1uZXcgZyxyYT1uZXcgZCxpYT1uZXcgZCx0YT1uZXcgZCxuYT0KMCx2YT0wO25hPFIubGVuZ3RoO25hKz05LHZhKz02KXtXLnNldChSW25hKzBdLFJbbmErMV0sUltuYSsyXSk7Wi5zZXQoUltuYSszXSxSW25hKzRdLFJbbmErNV0pO2ZhLnNldChSW25hKzZdLFJbbmErN10sUltuYSs4XSk7cmEuc2V0KFVbdmErMF0sVVt2YSsxXSk7aWEuc2V0KFVbdmErMl0sVVt2YSszXSk7dGEuc2V0KFVbdmErNF0sVVt2YSs1XSk7cWEuY29weShXKS5hZGQoWikuYWRkKGZhKS5kaXZpZGVTY2FsYXIoMyk7dmFyIEJhPU8ocWEpO0kocmEsdmErMCxXLEJhKTtJKGlhLHZhKzIsWixCYSk7SSh0YSx2YSs0LGZhLEJhKX19ZnVuY3Rpb24gSShXLFosZmEscWEpezA+cWEmJjE9PT1XLngmJihVW1pdPVcueC0xKTswPT09ZmEueCYmMD09PWZhLnomJihVW1pdPXFhLzIvTWF0aC5QSSsuNSl9ZnVuY3Rpb24gTyhXKXtyZXR1cm4gTWF0aC5hdGFuMihXLnosLVcueCl9ZnVuY3Rpb24gUShXKXtyZXR1cm4gTWF0aC5hdGFuMigtVy55LE1hdGguc3FydChXLngqVy54K1cueipXLnopKX0KeGEuY2FsbCh0aGlzKTt0aGlzLnR5cGU9IlBvbHloZWRyb25CdWZmZXJHZW9tZXRyeSI7dGhpcy5wYXJhbWV0ZXJzPXt2ZXJ0aWNlczpiLGluZGljZXM6ZSxyYWRpdXM6aCxkZXRhaWw6bn07aD1ofHwxO249bnx8MDt2YXIgUj1bXSxVPVtdOyhmdW5jdGlvbihXKXtmb3IodmFyIFo9bmV3IGcsZmE9bmV3IGcscWE9bmV3IGcscmE9MDtyYTxlLmxlbmd0aDtyYSs9MylFKGVbcmErMF0sWiksRShlW3JhKzFdLGZhKSxFKGVbcmErMl0scWEpLHUoWixmYSxxYSxXKX0pKG4pOyhmdW5jdGlvbihXKXtmb3IodmFyIFo9bmV3IGcsZmE9MDtmYTxSLmxlbmd0aDtmYSs9MylaLng9UltmYSswXSxaLnk9UltmYSsxXSxaLno9UltmYSsyXSxaLm5vcm1hbGl6ZSgpLm11bHRpcGx5U2NhbGFyKFcpLFJbZmErMF09Wi54LFJbZmErMV09Wi55LFJbZmErMl09Wi56fSkoaCk7KGZ1bmN0aW9uKCl7Zm9yKHZhciBXPW5ldyBnLFo9MDtaPFIubGVuZ3RoO1orPTMpe1cueD1SW1orMF07Vy55PVJbWisxXTtXLno9ClJbWisyXTt2YXIgZmE9TyhXKS8yL01hdGguUEkrLjUscWE9UShXKS9NYXRoLlBJKy41O1UucHVzaChmYSwxLXFhKX1IKCk7dygpfSkoKTt0aGlzLmFkZEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBiYShSLDMpKTt0aGlzLmFkZEF0dHJpYnV0ZSgibm9ybWFsIixuZXcgYmEoUi5zbGljZSgpLDMpKTt0aGlzLmFkZEF0dHJpYnV0ZSgidXYiLG5ldyBiYShVLDIpKTswPT09bj90aGlzLmNvbXB1dGVWZXJ0ZXhOb3JtYWxzKCk6dGhpcy5ub3JtYWxpemVOb3JtYWxzKCl9ZnVuY3Rpb24gWmYoYixlKXtOLmNhbGwodGhpcyk7dGhpcy50eXBlPSJUZXRyYWhlZHJvbkdlb21ldHJ5Ijt0aGlzLnBhcmFtZXRlcnM9e3JhZGl1czpiLGRldGFpbDplfTt0aGlzLmZyb21CdWZmZXJHZW9tZXRyeShuZXcgVmUoYixlKSk7dGhpcy5tZXJnZVZlcnRpY2VzKCl9ZnVuY3Rpb24gVmUoYixlKXt6Yy5jYWxsKHRoaXMsWzEsMSwxLC0xLC0xLDEsLTEsMSwtMSwxLC0xLC0xXSxbMiwxLDAsMCwzLDIsMSwzLDAsMiwKMywxXSxiLGUpO3RoaXMudHlwZT0iVGV0cmFoZWRyb25CdWZmZXJHZW9tZXRyeSI7dGhpcy5wYXJhbWV0ZXJzPXtyYWRpdXM6YixkZXRhaWw6ZX19ZnVuY3Rpb24gJGYoYixlKXtOLmNhbGwodGhpcyk7dGhpcy50eXBlPSJPY3RhaGVkcm9uR2VvbWV0cnkiO3RoaXMucGFyYW1ldGVycz17cmFkaXVzOmIsZGV0YWlsOmV9O3RoaXMuZnJvbUJ1ZmZlckdlb21ldHJ5KG5ldyBpZShiLGUpKTt0aGlzLm1lcmdlVmVydGljZXMoKX1mdW5jdGlvbiBpZShiLGUpe3pjLmNhbGwodGhpcyxbMSwwLDAsLTEsMCwwLDAsMSwwLDAsLTEsMCwwLDAsMSwwLDAsLTFdLFswLDIsNCwwLDQsMywwLDMsNSwwLDUsMiwxLDIsNSwxLDUsMywxLDMsNCwxLDQsMl0sYixlKTt0aGlzLnR5cGU9Ik9jdGFoZWRyb25CdWZmZXJHZW9tZXRyeSI7dGhpcy5wYXJhbWV0ZXJzPXtyYWRpdXM6YixkZXRhaWw6ZX19ZnVuY3Rpb24gYWcoYixlKXtOLmNhbGwodGhpcyk7dGhpcy50eXBlPSJJY29zYWhlZHJvbkdlb21ldHJ5Ijt0aGlzLnBhcmFtZXRlcnM9CntyYWRpdXM6YixkZXRhaWw6ZX07dGhpcy5mcm9tQnVmZmVyR2VvbWV0cnkobmV3IFdlKGIsZSkpO3RoaXMubWVyZ2VWZXJ0aWNlcygpfWZ1bmN0aW9uIFdlKGIsZSl7dmFyIGg9KDErTWF0aC5zcXJ0KDUpKS8yO3pjLmNhbGwodGhpcyxbLTEsaCwwLDEsaCwwLC0xLC1oLDAsMSwtaCwwLDAsLTEsaCwwLDEsaCwwLC0xLC1oLDAsMSwtaCxoLDAsLTEsaCwwLDEsLWgsMCwtMSwtaCwwLDFdLFswLDExLDUsMCw1LDEsMCwxLDcsMCw3LDEwLDAsMTAsMTEsMSw1LDksNSwxMSw0LDExLDEwLDIsMTAsNyw2LDcsMSw4LDMsOSw0LDMsNCwyLDMsMiw2LDMsNiw4LDMsOCw5LDQsOSw1LDIsNCwxMSw2LDIsMTAsOCw2LDcsOSw4LDFdLGIsZSk7dGhpcy50eXBlPSJJY29zYWhlZHJvbkJ1ZmZlckdlb21ldHJ5Ijt0aGlzLnBhcmFtZXRlcnM9e3JhZGl1czpiLGRldGFpbDplfX1mdW5jdGlvbiBiZyhiLGUpe04uY2FsbCh0aGlzKTt0aGlzLnR5cGU9IkRvZGVjYWhlZHJvbkdlb21ldHJ5Ijt0aGlzLnBhcmFtZXRlcnM9CntyYWRpdXM6YixkZXRhaWw6ZX07dGhpcy5mcm9tQnVmZmVyR2VvbWV0cnkobmV3IFhlKGIsZSkpO3RoaXMubWVyZ2VWZXJ0aWNlcygpfWZ1bmN0aW9uIFhlKGIsZSl7dmFyIGg9KDErTWF0aC5zcXJ0KDUpKS8yLG49MS9oO3pjLmNhbGwodGhpcyxbLTEsLTEsLTEsLTEsLTEsMSwtMSwxLC0xLC0xLDEsMSwxLC0xLC0xLDEsLTEsMSwxLDEsLTEsMSwxLDEsMCwtbiwtaCwwLC1uLGgsMCxuLC1oLDAsbixoLC1uLC1oLDAsLW4saCwwLG4sLWgsMCxuLGgsMCwtaCwwLC1uLGgsMCwtbiwtaCwwLG4saCwwLG5dLFszLDExLDcsMyw3LDE1LDMsMTUsMTMsNywxOSwxNyw3LDE3LDYsNyw2LDE1LDE3LDQsOCwxNyw4LDEwLDE3LDEwLDYsOCwwLDE2LDgsMTYsMiw4LDIsMTAsMCwxMiwxLDAsMSwxOCwwLDE4LDE2LDYsMTAsMiw2LDIsMTMsNiwxMywxNSwyLDE2LDE4LDIsMTgsMywyLDMsMTMsMTgsMSw5LDE4LDksMTEsMTgsMTEsMyw0LDE0LDEyLDQsMTIsMCw0LDAsOCwxMSw5LDUsMTEsNSwxOSwxMSwKMTksNywxOSw1LDE0LDE5LDE0LDQsMTksNCwxNywxLDEyLDE0LDEsMTQsNSwxLDUsOV0sYixlKTt0aGlzLnR5cGU9IkRvZGVjYWhlZHJvbkJ1ZmZlckdlb21ldHJ5Ijt0aGlzLnBhcmFtZXRlcnM9e3JhZGl1czpiLGRldGFpbDplfX1mdW5jdGlvbiBjZyhiLGUsaCxuLHUsdyl7Ti5jYWxsKHRoaXMpO3RoaXMudHlwZT0iVHViZUdlb21ldHJ5Ijt0aGlzLnBhcmFtZXRlcnM9e3BhdGg6Yix0dWJ1bGFyU2VnbWVudHM6ZSxyYWRpdXM6aCxyYWRpYWxTZWdtZW50czpuLGNsb3NlZDp1fTt2b2lkIDAhPT13JiZjb25zb2xlLndhcm4oIlRIUkVFLlR1YmVHZW9tZXRyeTogdGFwZXIgaGFzIGJlZW4gcmVtb3ZlZC4iKTtiPW5ldyBqZShiLGUsaCxuLHUpO3RoaXMudGFuZ2VudHM9Yi50YW5nZW50czt0aGlzLm5vcm1hbHM9Yi5ub3JtYWxzO3RoaXMuYmlub3JtYWxzPWIuYmlub3JtYWxzO3RoaXMuZnJvbUJ1ZmZlckdlb21ldHJ5KGIpO3RoaXMubWVyZ2VWZXJ0aWNlcygpfWZ1bmN0aW9uIGplKGIsCmUsaCxuLHUpe2Z1bmN0aW9uIHcoaWEpe1I9Yi5nZXRQb2ludEF0KGlhL2UsUik7dmFyIHRhPUgubm9ybWFsc1tpYV07aWE9SC5iaW5vcm1hbHNbaWFdO2ZvcihXPTA7Vzw9bjtXKyspe3ZhciBuYT1XL24qTWF0aC5QSSoyLHZhPU1hdGguc2luKG5hKTtuYT0tTWF0aC5jb3MobmEpO08ueD1uYSp0YS54K3ZhKmlhLng7Ty55PW5hKnRhLnkrdmEqaWEueTtPLno9bmEqdGEueit2YSppYS56O08ubm9ybWFsaXplKCk7ZmEucHVzaChPLngsTy55LE8ueik7SS54PVIueCtoKk8ueDtJLnk9Ui55K2gqTy55O0kuej1SLnoraCpPLno7Wi5wdXNoKEkueCxJLnksSS56KX19ZnVuY3Rpb24geigpe2ZvcihXPTE7Vzw9ZTtXKyspZm9yKFU9MTtVPD1uO1UrKyl7dmFyIGlhPShuKzEpKlcrKFUtMSksdGE9KG4rMSkqVytVLG5hPShuKzEpKihXLTEpK1U7cmEucHVzaCgobisxKSooVy0xKSsoVS0xKSxpYSxuYSk7cmEucHVzaChpYSx0YSxuYSl9fWZ1bmN0aW9uIEUoKXtmb3IoVT0wO1U8PWU7VSsrKWZvcihXPQowO1c8PW47VysrKVEueD1VL2UsUS55PVcvbixxYS5wdXNoKFEueCxRLnkpfXhhLmNhbGwodGhpcyk7dGhpcy50eXBlPSJUdWJlQnVmZmVyR2VvbWV0cnkiO3RoaXMucGFyYW1ldGVycz17cGF0aDpiLHR1YnVsYXJTZWdtZW50czplLHJhZGl1czpoLHJhZGlhbFNlZ21lbnRzOm4sY2xvc2VkOnV9O2U9ZXx8NjQ7aD1ofHwxO249bnx8ODt1PXV8fCExO3ZhciBIPWIuY29tcHV0ZUZyZW5ldEZyYW1lcyhlLHUpO3RoaXMudGFuZ2VudHM9SC50YW5nZW50czt0aGlzLm5vcm1hbHM9SC5ub3JtYWxzO3RoaXMuYmlub3JtYWxzPUguYmlub3JtYWxzO3ZhciBJPW5ldyBnLE89bmV3IGcsUT1uZXcgZCxSPW5ldyBnLFUsVyxaPVtdLGZhPVtdLHFhPVtdLHJhPVtdOyhmdW5jdGlvbigpe2ZvcihVPTA7VTxlO1UrKyl3KFUpO3coITE9PT11P2U6MCk7RSgpO3ooKX0pKCk7dGhpcy5zZXRJbmRleChyYSk7dGhpcy5hZGRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgYmEoWiwzKSk7dGhpcy5hZGRBdHRyaWJ1dGUoIm5vcm1hbCIsCm5ldyBiYShmYSwzKSk7dGhpcy5hZGRBdHRyaWJ1dGUoInV2IixuZXcgYmEocWEsMikpfWZ1bmN0aW9uIGRnKGIsZSxoLG4sdSx3LHope04uY2FsbCh0aGlzKTt0aGlzLnR5cGU9IlRvcnVzS25vdEdlb21ldHJ5Ijt0aGlzLnBhcmFtZXRlcnM9e3JhZGl1czpiLHR1YmU6ZSx0dWJ1bGFyU2VnbWVudHM6aCxyYWRpYWxTZWdtZW50czpuLHA6dSxxOnd9O3ZvaWQgMCE9PXomJmNvbnNvbGUud2FybigiVEhSRUUuVG9ydXNLbm90R2VvbWV0cnk6IGhlaWdodFNjYWxlIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSAuc2NhbGUoIHgsIHksIHogKSBpbnN0ZWFkLiIpO3RoaXMuZnJvbUJ1ZmZlckdlb21ldHJ5KG5ldyBZZShiLGUsaCxuLHUsdykpO3RoaXMubWVyZ2VWZXJ0aWNlcygpfWZ1bmN0aW9uIFllKGIsZSxoLG4sdSx3KXtmdW5jdGlvbiB6KHZhLEJhLHNhLERhLEhhKXt2YXIgS2E9TWF0aC5zaW4odmEpO0JhPXNhL0JhKnZhO3NhPU1hdGguY29zKEJhKTtIYS54PURhKigyK3NhKSouNSpNYXRoLmNvcyh2YSk7CkhhLnk9RGEqKDIrc2EpKkthKi41O0hhLno9RGEqTWF0aC5zaW4oQmEpKi41fXhhLmNhbGwodGhpcyk7dGhpcy50eXBlPSJUb3J1c0tub3RCdWZmZXJHZW9tZXRyeSI7dGhpcy5wYXJhbWV0ZXJzPXtyYWRpdXM6Yix0dWJlOmUsdHVidWxhclNlZ21lbnRzOmgscmFkaWFsU2VnbWVudHM6bixwOnUscTp3fTtiPWJ8fDE7ZT1lfHwuNDtoPU1hdGguZmxvb3IoaCl8fDY0O249TWF0aC5mbG9vcihuKXx8ODt1PXV8fDI7dz13fHwzO3ZhciBFPVtdLEg9W10sST1bXSxPPVtdLFEsUj1uZXcgZyxVPW5ldyBnLFc9bmV3IGcsWj1uZXcgZyxmYT1uZXcgZyxxYT1uZXcgZyxyYT1uZXcgZztmb3IoUT0wO1E8PWg7KytRKXt2YXIgaWE9US9oKnUqTWF0aC5QSSoyO3ooaWEsdSx3LGIsVyk7eihpYSsuMDEsdSx3LGIsWik7cWEuc3ViVmVjdG9ycyhaLFcpO3JhLmFkZFZlY3RvcnMoWixXKTtmYS5jcm9zc1ZlY3RvcnMocWEscmEpO3JhLmNyb3NzVmVjdG9ycyhmYSxxYSk7ZmEubm9ybWFsaXplKCk7cmEubm9ybWFsaXplKCk7CmZvcihpYT0wO2lhPD1uOysraWEpe3ZhciB0YT1pYS9uKk1hdGguUEkqMixuYT0tZSpNYXRoLmNvcyh0YSk7dGE9ZSpNYXRoLnNpbih0YSk7Ui54PVcueCsobmEqcmEueCt0YSpmYS54KTtSLnk9Vy55KyhuYSpyYS55K3RhKmZhLnkpO1Iuej1XLnorKG5hKnJhLnordGEqZmEueik7SC5wdXNoKFIueCxSLnksUi56KTtVLnN1YlZlY3RvcnMoUixXKS5ub3JtYWxpemUoKTtJLnB1c2goVS54LFUueSxVLnopO08ucHVzaChRL2gpO08ucHVzaChpYS9uKX19Zm9yKGlhPTE7aWE8PWg7aWErKylmb3IoUT0xO1E8PW47USsrKWI9KG4rMSkqaWErKFEtMSksZT0obisxKSppYStRLHU9KG4rMSkqKGlhLTEpK1EsRS5wdXNoKChuKzEpKihpYS0xKSsoUS0xKSxiLHUpLEUucHVzaChiLGUsdSk7dGhpcy5zZXRJbmRleChFKTt0aGlzLmFkZEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBiYShILDMpKTt0aGlzLmFkZEF0dHJpYnV0ZSgibm9ybWFsIixuZXcgYmEoSSwzKSk7dGhpcy5hZGRBdHRyaWJ1dGUoInV2IiwKbmV3IGJhKE8sMikpfWZ1bmN0aW9uIGVnKGIsZSxoLG4sdSl7Ti5jYWxsKHRoaXMpO3RoaXMudHlwZT0iVG9ydXNHZW9tZXRyeSI7dGhpcy5wYXJhbWV0ZXJzPXtyYWRpdXM6Yix0dWJlOmUscmFkaWFsU2VnbWVudHM6aCx0dWJ1bGFyU2VnbWVudHM6bixhcmM6dX07dGhpcy5mcm9tQnVmZmVyR2VvbWV0cnkobmV3IFplKGIsZSxoLG4sdSkpO3RoaXMubWVyZ2VWZXJ0aWNlcygpfWZ1bmN0aW9uIFplKGIsZSxoLG4sdSl7eGEuY2FsbCh0aGlzKTt0aGlzLnR5cGU9IlRvcnVzQnVmZmVyR2VvbWV0cnkiO3RoaXMucGFyYW1ldGVycz17cmFkaXVzOmIsdHViZTplLHJhZGlhbFNlZ21lbnRzOmgsdHVidWxhclNlZ21lbnRzOm4sYXJjOnV9O2I9Ynx8MTtlPWV8fC40O2g9TWF0aC5mbG9vcihoKXx8ODtuPU1hdGguZmxvb3Iobil8fDY7dT11fHwyKk1hdGguUEk7dmFyIHc9W10sej1bXSxFPVtdLEg9W10sST1uZXcgZyxPPW5ldyBnLFE9bmV3IGcsUixVO2ZvcihSPTA7Ujw9aDtSKyspZm9yKFU9CjA7VTw9bjtVKyspe3ZhciBXPVUvbip1LFo9Ui9oKk1hdGguUEkqMjtPLng9KGIrZSpNYXRoLmNvcyhaKSkqTWF0aC5jb3MoVyk7Ty55PShiK2UqTWF0aC5jb3MoWikpKk1hdGguc2luKFcpO08uej1lKk1hdGguc2luKFopO3oucHVzaChPLngsTy55LE8ueik7SS54PWIqTWF0aC5jb3MoVyk7SS55PWIqTWF0aC5zaW4oVyk7US5zdWJWZWN0b3JzKE8sSSkubm9ybWFsaXplKCk7RS5wdXNoKFEueCxRLnksUS56KTtILnB1c2goVS9uKTtILnB1c2goUi9oKX1mb3IoUj0xO1I8PWg7UisrKWZvcihVPTE7VTw9bjtVKyspYj0obisxKSooUi0xKStVLTEsZT0obisxKSooUi0xKStVLHU9KG4rMSkqUitVLHcucHVzaCgobisxKSpSK1UtMSxiLHUpLHcucHVzaChiLGUsdSk7dGhpcy5zZXRJbmRleCh3KTt0aGlzLmFkZEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBiYSh6LDMpKTt0aGlzLmFkZEF0dHJpYnV0ZSgibm9ybWFsIixuZXcgYmEoRSwzKSk7dGhpcy5hZGRBdHRyaWJ1dGUoInV2IixuZXcgYmEoSCwKMikpfWZ1bmN0aW9uIHdsKGIsZSxoLG4sdSl7aWYodT09PTA8TG8oYixlLGgsbikpZm9yKHU9ZTt1PGg7dSs9bil2YXIgdz14bCh1LGJbdV0sYlt1KzFdLHcpO2Vsc2UgZm9yKHU9aC1uO3U+PWU7dS09bil3PXhsKHUsYlt1XSxiW3UrMV0sdyk7dyYma2Uodyx3Lm5leHQpJiYoZmcodyksdz13Lm5leHQpO3JldHVybiB3fWZ1bmN0aW9uIGdnKGIsZSl7aWYoIWIpcmV0dXJuIGI7ZXx8KGU9Yik7ZG97dmFyIGg9ITE7aWYoYi5zdGVpbmVyfHwha2UoYixiLm5leHQpJiYwIT09d2MoYi5wcmV2LGIsYi5uZXh0KSliPWIubmV4dDtlbHNle2ZnKGIpO2I9ZT1iLnByZXY7aWYoYj09PWIubmV4dClicmVhaztoPSEwfX13aGlsZShofHxiIT09ZSk7cmV0dXJuIGV9ZnVuY3Rpb24gaGcoYixlLGgsbix1LHcseil7aWYoYil7IXomJncmJk1vKGIsbix1LHcpO2Zvcih2YXIgRT1iLEgsSTtiLnByZXYhPT1iLm5leHQ7KWlmKEg9Yi5wcmV2LEk9Yi5uZXh0LHc/Tm8oYixuLHUsdyk6T28oYikpZS5wdXNoKEguaS8KaCksZS5wdXNoKGIuaS9oKSxlLnB1c2goSS5pL2gpLGZnKGIpLEU9Yj1JLm5leHQ7ZWxzZSBpZihiPUksYj09PUUpe3o/MT09PXo/KGI9UG8oYixlLGgpLGhnKGIsZSxoLG4sdSx3LDIpKToyPT09eiYmUW8oYixlLGgsbix1LHcpOmhnKGdnKGIpLGUsaCxuLHUsdywxKTticmVha319fWZ1bmN0aW9uIE9vKGIpe3ZhciBlPWIucHJldixoPWIubmV4dDtpZigwPD13YyhlLGIsaCkpcmV0dXJuITE7Zm9yKHZhciBuPWIubmV4dC5uZXh0O24hPT1iLnByZXY7KXtpZihsaChlLngsZS55LGIueCxiLnksaC54LGgueSxuLngsbi55KSYmMDw9d2Mobi5wcmV2LG4sbi5uZXh0KSlyZXR1cm4hMTtuPW4ubmV4dH1yZXR1cm4hMH1mdW5jdGlvbiBObyhiLGUsaCxuKXt2YXIgdT1iLnByZXYsdz1iLm5leHQ7aWYoMDw9d2ModSxiLHcpKXJldHVybiExO3ZhciB6PXUueD5iLng/dS54PncueD91Lng6dy54OmIueD53Lng/Yi54OncueCxFPXUueT5iLnk/dS55PncueT91Lnk6dy55OmIueT53Lnk/Yi55OncueSwKSD1CaSh1Lng8Yi54P3UueDx3Lng/dS54OncueDpiLng8dy54P2IueDp3LngsdS55PGIueT91Lnk8dy55P3UueTp3Lnk6Yi55PHcueT9iLnk6dy55LGUsaCxuKTtlPUJpKHosRSxlLGgsbik7Zm9yKGg9Yi5uZXh0WjtoJiZoLno8PWU7KXtpZihoIT09Yi5wcmV2JiZoIT09Yi5uZXh0JiZsaCh1LngsdS55LGIueCxiLnksdy54LHcueSxoLngsaC55KSYmMDw9d2MoaC5wcmV2LGgsaC5uZXh0KSlyZXR1cm4hMTtoPWgubmV4dFp9Zm9yKGg9Yi5wcmV2WjtoJiZoLno+PUg7KXtpZihoIT09Yi5wcmV2JiZoIT09Yi5uZXh0JiZsaCh1LngsdS55LGIueCxiLnksdy54LHcueSxoLngsaC55KSYmMDw9d2MoaC5wcmV2LGgsaC5uZXh0KSlyZXR1cm4hMTtoPWgucHJldlp9cmV0dXJuITB9ZnVuY3Rpb24gUG8oYixlLGgpe3ZhciBuPWI7ZG97dmFyIHU9bi5wcmV2LHc9bi5uZXh0Lm5leHQ7IWtlKHUsdykmJnlsKHUsbixuLm5leHQsdykmJmlnKHUsdykmJmlnKHcsdSkmJihlLnB1c2godS5pL2gpLGUucHVzaChuLmkvCmgpLGUucHVzaCh3LmkvaCksZmcobiksZmcobi5uZXh0KSxuPWI9dyk7bj1uLm5leHR9d2hpbGUobiE9PWIpO3JldHVybiBufWZ1bmN0aW9uIFFvKGIsZSxoLG4sdSx3KXt2YXIgej1iO2Rve2Zvcih2YXIgRT16Lm5leHQubmV4dDtFIT09ei5wcmV2Oyl7aWYoei5pIT09RS5pJiZSbyh6LEUpKXtiPXpsKHosRSk7ej1nZyh6LHoubmV4dCk7Yj1nZyhiLGIubmV4dCk7aGcoeixlLGgsbix1LHcpO2hnKGIsZSxoLG4sdSx3KTtyZXR1cm59RT1FLm5leHR9ej16Lm5leHR9d2hpbGUoeiE9PWIpfWZ1bmN0aW9uIFNvKGIsZSxoLG4pe3ZhciB1PVtdLHc7dmFyIHo9MDtmb3Iodz1lLmxlbmd0aDt6PHc7eisrKXt2YXIgRT1lW3pdKm47dmFyIEg9ejx3LTE/ZVt6KzFdKm46Yi5sZW5ndGg7RT13bChiLEUsSCxuLCExKTtFPT09RS5uZXh0JiYoRS5zdGVpbmVyPSEwKTt1LnB1c2goVG8oRSkpfXUuc29ydChVbyk7Zm9yKHo9MDt6PHUubGVuZ3RoO3orKylWbyh1W3pdLGgpLGg9Z2coaCxoLm5leHQpOwpyZXR1cm4gaH1mdW5jdGlvbiBVbyhiLGUpe3JldHVybiBiLngtZS54fWZ1bmN0aW9uIFZvKGIsZSl7aWYoZT1XbyhiLGUpKWI9emwoZSxiKSxnZyhiLGIubmV4dCl9ZnVuY3Rpb24gV28oYixlKXt2YXIgaD1lLG49Yi54LHU9Yi55LHc9LUluZmluaXR5O2Rve2lmKHU8PWgueSYmdT49aC5uZXh0LnkmJmgubmV4dC55IT09aC55KXt2YXIgej1oLngrKHUtaC55KSooaC5uZXh0LngtaC54KS8oaC5uZXh0LnktaC55KTtpZih6PD1uJiZ6Pncpe3c9ejtpZih6PT09bil7aWYodT09PWgueSlyZXR1cm4gaDtpZih1PT09aC5uZXh0LnkpcmV0dXJuIGgubmV4dH12YXIgRT1oLng8aC5uZXh0Lng/aDpoLm5leHR9fWg9aC5uZXh0fXdoaWxlKGghPT1lKTtpZighRSlyZXR1cm4gbnVsbDtpZihuPT09dylyZXR1cm4gRS5wcmV2O2U9RTt6PUUueDt2YXIgSD1FLnksST1JbmZpbml0eTtmb3IoaD1FLm5leHQ7aCE9PWU7KXtpZihuPj1oLngmJmgueD49eiYmbiE9PWgueCYmbGgodTxIP246dyx1LHosSCwKdTxIP3c6bix1LGgueCxoLnkpKXt2YXIgTz1NYXRoLmFicyh1LWgueSkvKG4taC54KTsoTzxJfHxPPT09SSYmaC54PkUueCkmJmlnKGgsYikmJihFPWgsST1PKX1oPWgubmV4dH1yZXR1cm4gRX1mdW5jdGlvbiBNbyhiLGUsaCxuKXt2YXIgdT1iO2RvIG51bGw9PT11LnomJih1Lno9QmkodS54LHUueSxlLGgsbikpLHUucHJldlo9dS5wcmV2LHU9dS5uZXh0Wj11Lm5leHQ7d2hpbGUodSE9PWIpO3UucHJldloubmV4dFo9bnVsbDt1LnByZXZaPW51bGw7WG8odSl9ZnVuY3Rpb24gWG8oYil7dmFyIGUsaCxuLHUsdz0xO2Rve3ZhciB6PWI7dmFyIEU9Yj1udWxsO2ZvcihoPTA7ejspe2grKzt2YXIgSD16O2ZvcihlPW49MDtlPHcmJihuKyssSD1ILm5leHRaLEgpO2UrKyk7Zm9yKHU9dzswPG58fDA8dSYmSDspMCE9PW4mJigwPT09dXx8IUh8fHouejw9SC56KT8oZT16LHo9ei5uZXh0WixuLS0pOihlPUgsSD1ILm5leHRaLHUtLSksRT9FLm5leHRaPWU6Yj1lLGUucHJldlo9RSxFPWU7ej1IfUUubmV4dFo9Cm51bGw7dyo9Mn13aGlsZSgxPGgpO3JldHVybiBifWZ1bmN0aW9uIEJpKGIsZSxoLG4sdSl7Yj0zMjc2NyooYi1oKSp1O2U9MzI3NjcqKGUtbikqdTtiPShifGI8PDgpJjE2NzExOTM1O2I9KGJ8Yjw8NCkmMjUyNjQ1MTM1O2I9KGJ8Yjw8MikmODU4OTkzNDU5O2U9KGV8ZTw8OCkmMTY3MTE5MzU7ZT0oZXxlPDw0KSYyNTI2NDUxMzU7ZT0oZXxlPDwyKSY4NTg5OTM0NTk7cmV0dXJuKGJ8Yjw8MSkmMTQzMTY1NTc2NXwoKGV8ZTw8MSkmMTQzMTY1NTc2NSk8PDF9ZnVuY3Rpb24gVG8oYil7dmFyIGU9YixoPWI7ZG8gZS54PGgueCYmKGg9ZSksZT1lLm5leHQ7d2hpbGUoZSE9PWIpO3JldHVybiBofWZ1bmN0aW9uIGxoKGIsZSxoLG4sdSx3LHosRSl7cmV0dXJuIDA8PSh1LXopKihlLUUpLShiLXopKih3LUUpJiYwPD0oYi16KSoobi1FKS0oaC16KSooZS1FKSYmMDw9KGgteikqKHctRSktKHUteikqKG4tRSl9ZnVuY3Rpb24gUm8oYixlKXtyZXR1cm4gYi5uZXh0LmkhPT1lLmkmJmIucHJldi5pIT09CmUuaSYmIVlvKGIsZSkmJmlnKGIsZSkmJmlnKGUsYikmJlpvKGIsZSl9ZnVuY3Rpb24gd2MoYixlLGgpe3JldHVybihlLnktYi55KSooaC54LWUueCktKGUueC1iLngpKihoLnktZS55KX1mdW5jdGlvbiBrZShiLGUpe3JldHVybiBiLng9PT1lLngmJmIueT09PWUueX1mdW5jdGlvbiB5bChiLGUsaCxuKXtyZXR1cm4ga2UoYixlKSYma2UoaCxuKXx8a2UoYixuKSYma2UoaCxlKT8hMDowPHdjKGIsZSxoKSE9PTA8d2MoYixlLG4pJiYwPHdjKGgsbixiKSE9PTA8d2MoaCxuLGUpfWZ1bmN0aW9uIFlvKGIsZSl7dmFyIGg9Yjtkb3tpZihoLmkhPT1iLmkmJmgubmV4dC5pIT09Yi5pJiZoLmkhPT1lLmkmJmgubmV4dC5pIT09ZS5pJiZ5bChoLGgubmV4dCxiLGUpKXJldHVybiEwO2g9aC5uZXh0fXdoaWxlKGghPT1iKTtyZXR1cm4hMX1mdW5jdGlvbiBpZyhiLGUpe3JldHVybiAwPndjKGIucHJldixiLGIubmV4dCk/MDw9d2MoYixlLGIubmV4dCkmJjA8PXdjKGIsYi5wcmV2LGUpOjA+d2MoYiwKZSxiLnByZXYpfHwwPndjKGIsYi5uZXh0LGUpfWZ1bmN0aW9uIFpvKGIsZSl7dmFyIGg9YixuPSExLHU9KGIueCtlLngpLzI7ZT0oYi55K2UueSkvMjtkbyBoLnk+ZSE9PWgubmV4dC55PmUmJmgubmV4dC55IT09aC55JiZ1PChoLm5leHQueC1oLngpKihlLWgueSkvKGgubmV4dC55LWgueSkraC54JiYobj0hbiksaD1oLm5leHQ7d2hpbGUoaCE9PWIpO3JldHVybiBufWZ1bmN0aW9uIHpsKGIsZSl7dmFyIGg9bmV3IENpKGIuaSxiLngsYi55KSxuPW5ldyBDaShlLmksZS54LGUueSksdT1iLm5leHQsdz1lLnByZXY7Yi5uZXh0PWU7ZS5wcmV2PWI7aC5uZXh0PXU7dS5wcmV2PWg7bi5uZXh0PWg7aC5wcmV2PW47dy5uZXh0PW47bi5wcmV2PXc7cmV0dXJuIG59ZnVuY3Rpb24geGwoYixlLGgsbil7Yj1uZXcgQ2koYixlLGgpO24/KGIubmV4dD1uLm5leHQsYi5wcmV2PW4sbi5uZXh0LnByZXY9YixuLm5leHQ9Yik6KGIucHJldj1iLGIubmV4dD1iKTtyZXR1cm4gYn1mdW5jdGlvbiBmZyhiKXtiLm5leHQucHJldj0KYi5wcmV2O2IucHJldi5uZXh0PWIubmV4dDtiLnByZXZaJiYoYi5wcmV2Wi5uZXh0Wj1iLm5leHRaKTtiLm5leHRaJiYoYi5uZXh0Wi5wcmV2Wj1iLnByZXZaKX1mdW5jdGlvbiBDaShiLGUsaCl7dGhpcy5pPWI7dGhpcy54PWU7dGhpcy55PWg7dGhpcy5uZXh0Wj10aGlzLnByZXZaPXRoaXMuej10aGlzLm5leHQ9dGhpcy5wcmV2PW51bGw7dGhpcy5zdGVpbmVyPSExfWZ1bmN0aW9uIExvKGIsZSxoLG4pe2Zvcih2YXIgdT0wLHc9aC1uO2U8aDtlKz1uKXUrPShiW3ddLWJbZV0pKihiW2UrMV0rYlt3KzFdKSx3PWU7cmV0dXJuIHV9ZnVuY3Rpb24gQWwoYil7dmFyIGU9Yi5sZW5ndGg7MjxlJiZiW2UtMV0uZXF1YWxzKGJbMF0pJiZiLnBvcCgpfWZ1bmN0aW9uIEJsKGIsZSl7Zm9yKHZhciBoPTA7aDxlLmxlbmd0aDtoKyspYi5wdXNoKGVbaF0ueCksYi5wdXNoKGVbaF0ueSl9ZnVuY3Rpb24gbGUoYixlKXtOLmNhbGwodGhpcyk7dGhpcy50eXBlPSJFeHRydWRlR2VvbWV0cnkiO3RoaXMucGFyYW1ldGVycz0Ke3NoYXBlczpiLG9wdGlvbnM6ZX07dGhpcy5mcm9tQnVmZmVyR2VvbWV0cnkobmV3IG1kKGIsZSkpO3RoaXMubWVyZ2VWZXJ0aWNlcygpfWZ1bmN0aW9uIG1kKGIsZSl7ZnVuY3Rpb24gaChIKXtmdW5jdGlvbiBJKFFhLG5iLHBiKXtuYnx8Y29uc29sZS5lcnJvcigiVEhSRUUuRXh0cnVkZUdlb21ldHJ5OiB2ZWMgZG9lcyBub3QgZXhpc3QiKTtyZXR1cm4gbmIuY2xvbmUoKS5tdWx0aXBseVNjYWxhcihwYikuYWRkKFFhKX1mdW5jdGlvbiBPKFFhLG5iLHBiKXt2YXIgdmI9UWEueC1uYi54O3ZhciBBYj1RYS55LW5iLnk7dmFyIE9iPXBiLngtUWEueDt2YXIgV2I9cGIueS1RYS55LFJiPXZiKnZiK0FiKkFiO2lmKE1hdGguYWJzKHZiKldiLUFiKk9iKT5OdW1iZXIuRVBTSUxPTil7dmFyIHdkPU1hdGguc3FydChSYiksdmQ9TWF0aC5zcXJ0KE9iKk9iK1diKldiKTtSYj1uYi54LUFiL3dkO25iPW5iLnkrdmIvd2Q7V2I9KChwYi54LVdiL3ZkLVJiKSpXYi0ocGIueStPYi92ZC1uYikqT2IpLwoodmIqV2ItQWIqT2IpO09iPVJiK3ZiKldiLVFhLng7dmI9bmIrQWIqV2ItUWEueTtBYj1PYipPYit2Yip2YjtpZigyPj1BYilyZXR1cm4gbmV3IGQoT2IsdmIpO0FiPU1hdGguc3FydChBYi8yKX1lbHNlIFFhPSExLHZiPk51bWJlci5FUFNJTE9OP09iPk51bWJlci5FUFNJTE9OJiYoUWE9ITApOnZiPC1OdW1iZXIuRVBTSUxPTj9PYjwtTnVtYmVyLkVQU0lMT04mJihRYT0hMCk6TWF0aC5zaWduKEFiKT09PU1hdGguc2lnbihXYikmJihRYT0hMCksUWE/KE9iPS1BYixBYj1NYXRoLnNxcnQoUmIpKTooT2I9dmIsdmI9QWIsQWI9TWF0aC5zcXJ0KFJiLzIpKTtyZXR1cm4gbmV3IGQoT2IvQWIsdmIvQWIpfWZ1bmN0aW9uIFEoUWEsbmIpe2ZvcihtYT1RYS5sZW5ndGg7MDw9LS1tYTspe3ZhciBwYj1tYTt2YXIgdmI9bWEtMTswPnZiJiYodmI9UWEubGVuZ3RoLTEpO3ZhciBBYixPYj1pYSsyKkRhO2ZvcihBYj0wO0FiPE9iO0FiKyspe3ZhciBXYj1aYSpBYixSYj1aYSooQWIrMSk7VyhuYisKcGIrV2IsbmIrdmIrV2IsbmIrdmIrUmIsbmIrcGIrUmIpfX19ZnVuY3Rpb24gUihRYSxuYixwYil7cWEucHVzaChRYSk7cWEucHVzaChuYik7cWEucHVzaChwYil9ZnVuY3Rpb24gVShRYSxuYixwYil7WihRYSk7WihuYik7WihwYik7UWE9dS5sZW5ndGgvMztRYT1LYS5nZW5lcmF0ZVRvcFVWKG4sdSxRYS0zLFFhLTIsUWEtMSk7ZmEoUWFbMF0pO2ZhKFFhWzFdKTtmYShRYVsyXSl9ZnVuY3Rpb24gVyhRYSxuYixwYix2Yil7WihRYSk7WihuYik7Wih2Yik7WihuYik7WihwYik7Wih2Yik7UWE9dS5sZW5ndGgvMztRYT1LYS5nZW5lcmF0ZVNpZGVXYWxsVVYobix1LFFhLTYsUWEtMyxRYS0yLFFhLTEpO2ZhKFFhWzBdKTtmYShRYVsxXSk7ZmEoUWFbM10pO2ZhKFFhWzFdKTtmYShRYVsyXSk7ZmEoUWFbM10pfWZ1bmN0aW9uIFooUWEpe3UucHVzaChxYVszKlFhXSk7dS5wdXNoKHFhWzMqUWErMV0pO3UucHVzaChxYVszKlFhKzJdKX1mdW5jdGlvbiBmYShRYSl7dy5wdXNoKFFhLngpO3cucHVzaChRYS55KX0KdmFyIHFhPVtdLHJhPXZvaWQgMCE9PWUuY3VydmVTZWdtZW50cz9lLmN1cnZlU2VnbWVudHM6MTIsaWE9dm9pZCAwIT09ZS5zdGVwcz9lLnN0ZXBzOjEsdGE9dm9pZCAwIT09ZS5kZXB0aD9lLmRlcHRoOjEwMCxuYT12b2lkIDAhPT1lLmJldmVsRW5hYmxlZD9lLmJldmVsRW5hYmxlZDohMCx2YT12b2lkIDAhPT1lLmJldmVsVGhpY2tuZXNzP2UuYmV2ZWxUaGlja25lc3M6NixCYT12b2lkIDAhPT1lLmJldmVsU2l6ZT9lLmJldmVsU2l6ZTp2YS0yLHNhPXZvaWQgMCE9PWUuYmV2ZWxPZmZzZXQ/ZS5iZXZlbE9mZnNldDowLERhPXZvaWQgMCE9PWUuYmV2ZWxTZWdtZW50cz9lLmJldmVsU2VnbWVudHM6MyxIYT1lLmV4dHJ1ZGVQYXRoLEthPXZvaWQgMCE9PWUuVVZHZW5lcmF0b3I/ZS5VVkdlbmVyYXRvcjokbzt2b2lkIDAhPT1lLmFtb3VudCYmKGNvbnNvbGUud2FybigiVEhSRUUuRXh0cnVkZUJ1ZmZlckdlb21ldHJ5OiBhbW91bnQgaGFzIGJlZW4gcmVuYW1lZCB0byBkZXB0aC4iKSx0YT0KZS5hbW91bnQpO3ZhciBOYT0hMTtpZihIYSl7dmFyIExhPUhhLmdldFNwYWNlZFBvaW50cyhpYSk7TmE9ITA7bmE9ITE7dmFyIGZiPUhhLmNvbXB1dGVGcmVuZXRGcmFtZXMoaWEsITEpO3ZhciBjYj1uZXcgZzt2YXIgSmE9bmV3IGc7dmFyIGhiPW5ldyBnfW5hfHwoc2E9QmE9dmE9RGE9MCk7dmFyIFVhO3JhPUguZXh0cmFjdFBvaW50cyhyYSk7SD1yYS5zaGFwZTt2YXIgSGI9cmEuaG9sZXM7aWYoIXlkLmlzQ2xvY2tXaXNlKEgpKXtIPUgucmV2ZXJzZSgpO3ZhciBxYj0wO2ZvcihVYT1IYi5sZW5ndGg7cWI8VWE7cWIrKyl7dmFyIGphPUhiW3FiXTt5ZC5pc0Nsb2NrV2lzZShqYSkmJihIYltxYl09amEucmV2ZXJzZSgpKX19dmFyIHBhPXlkLnRyaWFuZ3VsYXRlU2hhcGUoSCxIYikseWE9SDtxYj0wO2ZvcihVYT1IYi5sZW5ndGg7cWI8VWE7cWIrKylqYT1IYltxYl0sSD1ILmNvbmNhdChqYSk7dmFyIFZhLFphPUgubGVuZ3RoLFRhLGliPXBhLmxlbmd0aDtyYT1bXTt2YXIgbWE9MDt2YXIgSWE9CnlhLmxlbmd0aDt2YXIgT2E9SWEtMTtmb3IoVmE9bWErMTttYTxJYTttYSsrLE9hKyssVmErKylPYT09PUlhJiYoT2E9MCksVmE9PT1JYSYmKFZhPTApLHJhW21hXT1PKHlhW21hXSx5YVtPYV0seWFbVmFdKTtIYT1bXTt2YXIgdWI9cmEuY29uY2F0KCk7cWI9MDtmb3IoVWE9SGIubGVuZ3RoO3FiPFVhO3FiKyspe2phPUhiW3FiXTt2YXIgYWI9W107bWE9MDtJYT1qYS5sZW5ndGg7T2E9SWEtMTtmb3IoVmE9bWErMTttYTxJYTttYSsrLE9hKyssVmErKylPYT09PUlhJiYoT2E9MCksVmE9PT1JYSYmKFZhPTApLGFiW21hXT1PKGphW21hXSxqYVtPYV0samFbVmFdKTtIYS5wdXNoKGFiKTt1Yj11Yi5jb25jYXQoYWIpfWZvcihPYT0wO09hPERhO09hKyspe0lhPU9hL0RhO3ZhciBLYj12YSpNYXRoLmNvcyhJYSpNYXRoLlBJLzIpO1ZhPUJhKk1hdGguc2luKElhKk1hdGguUEkvMikrc2E7bWE9MDtmb3IoSWE9eWEubGVuZ3RoO21hPElhO21hKyspe3ZhciBsYj1JKHlhW21hXSxyYVttYV0sVmEpOwpSKGxiLngsbGIueSwtS2IpfXFiPTA7Zm9yKFVhPUhiLmxlbmd0aDtxYjxVYTtxYisrKWZvcihqYT1IYltxYl0sYWI9SGFbcWJdLG1hPTAsSWE9amEubGVuZ3RoO21hPElhO21hKyspbGI9SShqYVttYV0sYWJbbWFdLFZhKSxSKGxiLngsbGIueSwtS2IpfVZhPUJhK3NhO2ZvcihtYT0wO21hPFphO21hKyspbGI9bmE/SShIW21hXSx1YlttYV0sVmEpOkhbbWFdLE5hPyhKYS5jb3B5KGZiLm5vcm1hbHNbMF0pLm11bHRpcGx5U2NhbGFyKGxiLngpLGNiLmNvcHkoZmIuYmlub3JtYWxzWzBdKS5tdWx0aXBseVNjYWxhcihsYi55KSxoYi5jb3B5KExhWzBdKS5hZGQoSmEpLmFkZChjYiksUihoYi54LGhiLnksaGIueikpOlIobGIueCxsYi55LDApO2ZvcihJYT0xO0lhPD1pYTtJYSsrKWZvcihtYT0wO21hPFphO21hKyspbGI9bmE/SShIW21hXSx1YlttYV0sVmEpOkhbbWFdLE5hPyhKYS5jb3B5KGZiLm5vcm1hbHNbSWFdKS5tdWx0aXBseVNjYWxhcihsYi54KSxjYi5jb3B5KGZiLmJpbm9ybWFsc1tJYV0pLm11bHRpcGx5U2NhbGFyKGxiLnkpLApoYi5jb3B5KExhW0lhXSkuYWRkKEphKS5hZGQoY2IpLFIoaGIueCxoYi55LGhiLnopKTpSKGxiLngsbGIueSx0YS9pYSpJYSk7Zm9yKE9hPURhLTE7MDw9T2E7T2EtLSl7SWE9T2EvRGE7S2I9dmEqTWF0aC5jb3MoSWEqTWF0aC5QSS8yKTtWYT1CYSpNYXRoLnNpbihJYSpNYXRoLlBJLzIpK3NhO21hPTA7Zm9yKElhPXlhLmxlbmd0aDttYTxJYTttYSsrKWxiPUkoeWFbbWFdLHJhW21hXSxWYSksUihsYi54LGxiLnksdGErS2IpO3FiPTA7Zm9yKFVhPUhiLmxlbmd0aDtxYjxVYTtxYisrKWZvcihqYT1IYltxYl0sYWI9SGFbcWJdLG1hPTAsSWE9amEubGVuZ3RoO21hPElhO21hKyspbGI9SShqYVttYV0sYWJbbWFdLFZhKSxOYT9SKGxiLngsbGIueStMYVtpYS0xXS55LExhW2lhLTFdLngrS2IpOlIobGIueCxsYi55LHRhK0tiKX0oZnVuY3Rpb24oKXt2YXIgUWE9dS5sZW5ndGgvMztpZihuYSl7dmFyIG5iPTAqWmE7Zm9yKG1hPTA7bWE8aWI7bWErKylUYT1wYVttYV0sVShUYVsyXStuYiwKVGFbMV0rbmIsVGFbMF0rbmIpO25iPVphKihpYSsyKkRhKTtmb3IobWE9MDttYTxpYjttYSsrKVRhPXBhW21hXSxVKFRhWzBdK25iLFRhWzFdK25iLFRhWzJdK25iKX1lbHNle2ZvcihtYT0wO21hPGliO21hKyspVGE9cGFbbWFdLFUoVGFbMl0sVGFbMV0sVGFbMF0pO2ZvcihtYT0wO21hPGliO21hKyspVGE9cGFbbWFdLFUoVGFbMF0rWmEqaWEsVGFbMV0rWmEqaWEsVGFbMl0rWmEqaWEpfW4uYWRkR3JvdXAoUWEsdS5sZW5ndGgvMy1RYSwwKX0pKCk7KGZ1bmN0aW9uKCl7dmFyIFFhPXUubGVuZ3RoLzMsbmI9MDtRKHlhLG5iKTtuYis9eWEubGVuZ3RoO3FiPTA7Zm9yKFVhPUhiLmxlbmd0aDtxYjxVYTtxYisrKWphPUhiW3FiXSxRKGphLG5iKSxuYis9amEubGVuZ3RoO24uYWRkR3JvdXAoUWEsdS5sZW5ndGgvMy1RYSwxKX0pKCl9eGEuY2FsbCh0aGlzKTt0aGlzLnR5cGU9IkV4dHJ1ZGVCdWZmZXJHZW9tZXRyeSI7dGhpcy5wYXJhbWV0ZXJzPXtzaGFwZXM6YixvcHRpb25zOmV9O2I9CkFycmF5LmlzQXJyYXkoYik/YjpbYl07Zm9yKHZhciBuPXRoaXMsdT1bXSx3PVtdLHo9MCxFPWIubGVuZ3RoO3o8RTt6KyspaChiW3pdKTt0aGlzLmFkZEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBiYSh1LDMpKTt0aGlzLmFkZEF0dHJpYnV0ZSgidXYiLG5ldyBiYSh3LDIpKTt0aGlzLmNvbXB1dGVWZXJ0ZXhOb3JtYWxzKCl9ZnVuY3Rpb24gQ2woYixlLGgpe2guc2hhcGVzPVtdO2lmKEFycmF5LmlzQXJyYXkoYikpZm9yKHZhciBuPTAsdT1iLmxlbmd0aDtuPHU7bisrKWguc2hhcGVzLnB1c2goYltuXS51dWlkKTtlbHNlIGguc2hhcGVzLnB1c2goYi51dWlkKTt2b2lkIDAhPT1lLmV4dHJ1ZGVQYXRoJiYoaC5vcHRpb25zLmV4dHJ1ZGVQYXRoPWUuZXh0cnVkZVBhdGgudG9KU09OKCkpO3JldHVybiBofWZ1bmN0aW9uIGpnKGIsZSl7Ti5jYWxsKHRoaXMpO3RoaXMudHlwZT0iVGV4dEdlb21ldHJ5Ijt0aGlzLnBhcmFtZXRlcnM9e3RleHQ6YixwYXJhbWV0ZXJzOmV9O3RoaXMuZnJvbUJ1ZmZlckdlb21ldHJ5KG5ldyAkZShiLAplKSk7dGhpcy5tZXJnZVZlcnRpY2VzKCl9ZnVuY3Rpb24gJGUoYixlKXtlPWV8fHt9O3ZhciBoPWUuZm9udDtpZighaHx8IWguaXNGb250KXJldHVybiBjb25zb2xlLmVycm9yKCJUSFJFRS5UZXh0R2VvbWV0cnk6IGZvbnQgcGFyYW1ldGVyIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBUSFJFRS5Gb250LiIpLG5ldyBOO2I9aC5nZW5lcmF0ZVNoYXBlcyhiLGUuc2l6ZSk7ZS5kZXB0aD12b2lkIDAhPT1lLmhlaWdodD9lLmhlaWdodDo1MDt2b2lkIDA9PT1lLmJldmVsVGhpY2tuZXNzJiYoZS5iZXZlbFRoaWNrbmVzcz0xMCk7dm9pZCAwPT09ZS5iZXZlbFNpemUmJihlLmJldmVsU2l6ZT04KTt2b2lkIDA9PT1lLmJldmVsRW5hYmxlZCYmKGUuYmV2ZWxFbmFibGVkPSExKTttZC5jYWxsKHRoaXMsYixlKTt0aGlzLnR5cGU9IlRleHRCdWZmZXJHZW9tZXRyeSJ9ZnVuY3Rpb24ga2coYixlLGgsbix1LHcseil7Ti5jYWxsKHRoaXMpO3RoaXMudHlwZT0iU3BoZXJlR2VvbWV0cnkiO3RoaXMucGFyYW1ldGVycz0Ke3JhZGl1czpiLHdpZHRoU2VnbWVudHM6ZSxoZWlnaHRTZWdtZW50czpoLHBoaVN0YXJ0Om4scGhpTGVuZ3RoOnUsdGhldGFTdGFydDp3LHRoZXRhTGVuZ3RoOnp9O3RoaXMuZnJvbUJ1ZmZlckdlb21ldHJ5KG5ldyBXZChiLGUsaCxuLHUsdyx6KSk7dGhpcy5tZXJnZVZlcnRpY2VzKCl9ZnVuY3Rpb24gV2QoYixlLGgsbix1LHcseil7eGEuY2FsbCh0aGlzKTt0aGlzLnR5cGU9IlNwaGVyZUJ1ZmZlckdlb21ldHJ5Ijt0aGlzLnBhcmFtZXRlcnM9e3JhZGl1czpiLHdpZHRoU2VnbWVudHM6ZSxoZWlnaHRTZWdtZW50czpoLHBoaVN0YXJ0Om4scGhpTGVuZ3RoOnUsdGhldGFTdGFydDp3LHRoZXRhTGVuZ3RoOnp9O2I9Ynx8MTtlPU1hdGgubWF4KDMsTWF0aC5mbG9vcihlKXx8OCk7aD1NYXRoLm1heCgyLE1hdGguZmxvb3IoaCl8fDYpO249dm9pZCAwIT09bj9uOjA7dT12b2lkIDAhPT11P3U6MipNYXRoLlBJO3c9dm9pZCAwIT09dz93OjA7ej12b2lkIDAhPT16P3o6TWF0aC5QSTt2YXIgRT0Kdyt6LEgsSSxPPTAsUT1bXSxSPW5ldyBnLFU9bmV3IGcsVz1bXSxaPVtdLGZhPVtdLHFhPVtdO2ZvcihJPTA7STw9aDtJKyspe3ZhciByYT1bXSxpYT1JL2gsdGE9MD09ST8uNS9lOkk9PWg/LS41L2U6MDtmb3IoSD0wO0g8PWU7SCsrKXt2YXIgbmE9SC9lO1IueD0tYipNYXRoLmNvcyhuK25hKnUpKk1hdGguc2luKHcraWEqeik7Ui55PWIqTWF0aC5jb3ModytpYSp6KTtSLno9YipNYXRoLnNpbihuK25hKnUpKk1hdGguc2luKHcraWEqeik7Wi5wdXNoKFIueCxSLnksUi56KTtVLmNvcHkoUikubm9ybWFsaXplKCk7ZmEucHVzaChVLngsVS55LFUueik7cWEucHVzaChuYSt0YSwxLWlhKTtyYS5wdXNoKE8rKyl9US5wdXNoKHJhKX1mb3IoST0wO0k8aDtJKyspZm9yKEg9MDtIPGU7SCsrKWI9UVtJXVtIKzFdLG49UVtJXVtIXSx1PVFbSSsxXVtIXSx6PVFbSSsxXVtIKzFdLCgwIT09SXx8MDx3KSYmVy5wdXNoKGIsbix6KSwoSSE9PWgtMXx8RTxNYXRoLlBJKSYmVy5wdXNoKG4sdSx6KTt0aGlzLnNldEluZGV4KFcpOwp0aGlzLmFkZEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBiYShaLDMpKTt0aGlzLmFkZEF0dHJpYnV0ZSgibm9ybWFsIixuZXcgYmEoZmEsMykpO3RoaXMuYWRkQXR0cmlidXRlKCJ1diIsbmV3IGJhKHFhLDIpKX1mdW5jdGlvbiBsZyhiLGUsaCxuLHUsdyl7Ti5jYWxsKHRoaXMpO3RoaXMudHlwZT0iUmluZ0dlb21ldHJ5Ijt0aGlzLnBhcmFtZXRlcnM9e2lubmVyUmFkaXVzOmIsb3V0ZXJSYWRpdXM6ZSx0aGV0YVNlZ21lbnRzOmgscGhpU2VnbWVudHM6bix0aGV0YVN0YXJ0OnUsdGhldGFMZW5ndGg6d307dGhpcy5mcm9tQnVmZmVyR2VvbWV0cnkobmV3IGFmKGIsZSxoLG4sdSx3KSk7dGhpcy5tZXJnZVZlcnRpY2VzKCl9ZnVuY3Rpb24gYWYoYixlLGgsbix1LHcpe3hhLmNhbGwodGhpcyk7dGhpcy50eXBlPSJSaW5nQnVmZmVyR2VvbWV0cnkiO3RoaXMucGFyYW1ldGVycz17aW5uZXJSYWRpdXM6YixvdXRlclJhZGl1czplLHRoZXRhU2VnbWVudHM6aCxwaGlTZWdtZW50czpuLHRoZXRhU3RhcnQ6dSwKdGhldGFMZW5ndGg6d307Yj1ifHwuNTtlPWV8fDE7dT12b2lkIDAhPT11P3U6MDt3PXZvaWQgMCE9PXc/dzoyKk1hdGguUEk7aD12b2lkIDAhPT1oP01hdGgubWF4KDMsaCk6ODtuPXZvaWQgMCE9PW4/TWF0aC5tYXgoMSxuKToxO3ZhciB6PVtdLEU9W10sSD1bXSxJPVtdLE89YixRPShlLWIpL24sUj1uZXcgZyxVPW5ldyBkLFcsWjtmb3IoVz0wO1c8PW47VysrKXtmb3IoWj0wO1o8PWg7WisrKWI9dStaL2gqdyxSLng9TypNYXRoLmNvcyhiKSxSLnk9TypNYXRoLnNpbihiKSxFLnB1c2goUi54LFIueSxSLnopLEgucHVzaCgwLDAsMSksVS54PShSLngvZSsxKS8yLFUueT0oUi55L2UrMSkvMixJLnB1c2goVS54LFUueSk7Tys9UX1mb3IoVz0wO1c8bjtXKyspZm9yKGU9VyooaCsxKSxaPTA7WjxoO1orKyliPVorZSx1PWIraCsxLHc9YitoKzIsTz1iKzEsei5wdXNoKGIsdSxPKSx6LnB1c2godSx3LE8pO3RoaXMuc2V0SW5kZXgoeik7dGhpcy5hZGRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgYmEoRSwKMykpO3RoaXMuYWRkQXR0cmlidXRlKCJub3JtYWwiLG5ldyBiYShILDMpKTt0aGlzLmFkZEF0dHJpYnV0ZSgidXYiLG5ldyBiYShJLDIpKX1mdW5jdGlvbiBtZyhiLGUsaCxuKXtOLmNhbGwodGhpcyk7dGhpcy50eXBlPSJMYXRoZUdlb21ldHJ5Ijt0aGlzLnBhcmFtZXRlcnM9e3BvaW50czpiLHNlZ21lbnRzOmUscGhpU3RhcnQ6aCxwaGlMZW5ndGg6bn07dGhpcy5mcm9tQnVmZmVyR2VvbWV0cnkobmV3IGJmKGIsZSxoLG4pKTt0aGlzLm1lcmdlVmVydGljZXMoKX1mdW5jdGlvbiBiZihiLGUsaCxuKXt4YS5jYWxsKHRoaXMpO3RoaXMudHlwZT0iTGF0aGVCdWZmZXJHZW9tZXRyeSI7dGhpcy5wYXJhbWV0ZXJzPXtwb2ludHM6YixzZWdtZW50czplLHBoaVN0YXJ0OmgscGhpTGVuZ3RoOm59O2U9TWF0aC5mbG9vcihlKXx8MTI7aD1ofHwwO249bnx8MipNYXRoLlBJO249b2IuY2xhbXAobiwwLDIqTWF0aC5QSSk7dmFyIHU9W10sdz1bXSx6PVtdLEU9MS9lLEg9bmV3IGcsST1uZXcgZCxPOwpmb3IoTz0wO088PWU7TysrKXt2YXIgUT1oK08qRSpuO3ZhciBSPU1hdGguc2luKFEpLFU9TWF0aC5jb3MoUSk7Zm9yKFE9MDtRPD1iLmxlbmd0aC0xO1ErKylILng9YltRXS54KlIsSC55PWJbUV0ueSxILno9YltRXS54KlUsdy5wdXNoKEgueCxILnksSC56KSxJLng9Ty9lLEkueT1RLyhiLmxlbmd0aC0xKSx6LnB1c2goSS54LEkueSl9Zm9yKE89MDtPPGU7TysrKWZvcihRPTA7UTxiLmxlbmd0aC0xO1ErKyloPVErTypiLmxlbmd0aCxFPWgrYi5sZW5ndGgsSD1oK2IubGVuZ3RoKzEsST1oKzEsdS5wdXNoKGgsRSxJKSx1LnB1c2goRSxILEkpO3RoaXMuc2V0SW5kZXgodSk7dGhpcy5hZGRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgYmEodywzKSk7dGhpcy5hZGRBdHRyaWJ1dGUoInV2IixuZXcgYmEoeiwyKSk7dGhpcy5jb21wdXRlVmVydGV4Tm9ybWFscygpO2lmKG49PT0yKk1hdGguUEkpZm9yKG49dGhpcy5hdHRyaWJ1dGVzLm5vcm1hbC5hcnJheSx1PW5ldyBnLHc9bmV3IGcsej0KbmV3IGcsaD1lKmIubGVuZ3RoKjMsUT1PPTA7TzxiLmxlbmd0aDtPKyssUSs9Myl1Lng9bltRKzBdLHUueT1uW1ErMV0sdS56PW5bUSsyXSx3Lng9bltoK1ErMF0sdy55PW5baCtRKzFdLHcuej1uW2grUSsyXSx6LmFkZFZlY3RvcnModSx3KS5ub3JtYWxpemUoKSxuW1ErMF09bltoK1ErMF09ei54LG5bUSsxXT1uW2grUSsxXT16LnksbltRKzJdPW5baCtRKzJdPXouen1mdW5jdGlvbiBtZShiLGUpe04uY2FsbCh0aGlzKTt0aGlzLnR5cGU9IlNoYXBlR2VvbWV0cnkiOyJvYmplY3QiPT09dHlwZW9mIGUmJihjb25zb2xlLndhcm4oIlRIUkVFLlNoYXBlR2VvbWV0cnk6IE9wdGlvbnMgcGFyYW1ldGVyIGhhcyBiZWVuIHJlbW92ZWQuIiksZT1lLmN1cnZlU2VnbWVudHMpO3RoaXMucGFyYW1ldGVycz17c2hhcGVzOmIsY3VydmVTZWdtZW50czplfTt0aGlzLmZyb21CdWZmZXJHZW9tZXRyeShuZXcgbmUoYixlKSk7dGhpcy5tZXJnZVZlcnRpY2VzKCl9ZnVuY3Rpb24gbmUoYixlKXtmdW5jdGlvbiBoKE8pe3ZhciBRLApSPXUubGVuZ3RoLzM7Tz1PLmV4dHJhY3RQb2ludHMoZSk7dmFyIFU9Ty5zaGFwZSxXPU8uaG9sZXM7ITE9PT15ZC5pc0Nsb2NrV2lzZShVKSYmKFU9VS5yZXZlcnNlKCkpO089MDtmb3IoUT1XLmxlbmd0aDtPPFE7TysrKXt2YXIgWj1XW09dOyEwPT09eWQuaXNDbG9ja1dpc2UoWikmJihXW09dPVoucmV2ZXJzZSgpKX12YXIgZmE9eWQudHJpYW5ndWxhdGVTaGFwZShVLFcpO089MDtmb3IoUT1XLmxlbmd0aDtPPFE7TysrKVo9V1tPXSxVPVUuY29uY2F0KFopO089MDtmb3IoUT1VLmxlbmd0aDtPPFE7TysrKVo9VVtPXSx1LnB1c2goWi54LFoueSwwKSx3LnB1c2goMCwwLDEpLHoucHVzaChaLngsWi55KTtPPTA7Zm9yKFE9ZmEubGVuZ3RoO088UTtPKyspVT1mYVtPXSxuLnB1c2goVVswXStSLFVbMV0rUixVWzJdK1IpLEgrPTN9eGEuY2FsbCh0aGlzKTt0aGlzLnR5cGU9IlNoYXBlQnVmZmVyR2VvbWV0cnkiO3RoaXMucGFyYW1ldGVycz17c2hhcGVzOmIsY3VydmVTZWdtZW50czplfTsKZT1lfHwxMjt2YXIgbj1bXSx1PVtdLHc9W10sej1bXSxFPTAsSD0wO2lmKCExPT09QXJyYXkuaXNBcnJheShiKSloKGIpO2Vsc2UgZm9yKHZhciBJPTA7STxiLmxlbmd0aDtJKyspaChiW0ldKSx0aGlzLmFkZEdyb3VwKEUsSCxJKSxFKz1ILEg9MDt0aGlzLnNldEluZGV4KG4pO3RoaXMuYWRkQXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IGJhKHUsMykpO3RoaXMuYWRkQXR0cmlidXRlKCJub3JtYWwiLG5ldyBiYSh3LDMpKTt0aGlzLmFkZEF0dHJpYnV0ZSgidXYiLG5ldyBiYSh6LDIpKX1mdW5jdGlvbiBEbChiLGUpe2Uuc2hhcGVzPVtdO2lmKEFycmF5LmlzQXJyYXkoYikpZm9yKHZhciBoPTAsbj1iLmxlbmd0aDtoPG47aCsrKWUuc2hhcGVzLnB1c2goYltoXS51dWlkKTtlbHNlIGUuc2hhcGVzLnB1c2goYi51dWlkKTtyZXR1cm4gZX1mdW5jdGlvbiBjZihiLGUpe3hhLmNhbGwodGhpcyk7dGhpcy50eXBlPSJFZGdlc0dlb21ldHJ5Ijt0aGlzLnBhcmFtZXRlcnM9e3RocmVzaG9sZEFuZ2xlOmV9Owp2YXIgaD1bXTtlPU1hdGguY29zKG9iLkRFRzJSQUQqKHZvaWQgMCE9PWU/ZToxKSk7dmFyIG49WzAsMF0sdT17fSx3PVsiYSIsImIiLCJjIl07aWYoYi5pc0J1ZmZlckdlb21ldHJ5KXt2YXIgej1uZXcgTjt6LmZyb21CdWZmZXJHZW9tZXRyeShiKX1lbHNlIHo9Yi5jbG9uZSgpO3oubWVyZ2VWZXJ0aWNlcygpO3ouY29tcHV0ZUZhY2VOb3JtYWxzKCk7Yj16LnZlcnRpY2VzO3o9ei5mYWNlcztmb3IodmFyIEU9MCxIPXoubGVuZ3RoO0U8SDtFKyspZm9yKHZhciBJPXpbRV0sTz0wOzM+TztPKyspe3ZhciBRPUlbd1tPXV07dmFyIFI9SVt3WyhPKzEpJTNdXTtuWzBdPU1hdGgubWluKFEsUik7blsxXT1NYXRoLm1heChRLFIpO1E9blswXSsiLCIrblsxXTt2b2lkIDA9PT11W1FdP3VbUV09e2luZGV4MTpuWzBdLGluZGV4MjpuWzFdLGZhY2UxOkUsZmFjZTI6dm9pZCAwfTp1W1FdLmZhY2UyPUV9Zm9yKFEgaW4gdSlpZihuPXVbUV0sdm9pZCAwPT09bi5mYWNlMnx8eltuLmZhY2UxXS5ub3JtYWwuZG90KHpbbi5mYWNlMl0ubm9ybWFsKTw9CmUpdz1iW24uaW5kZXgxXSxoLnB1c2gody54LHcueSx3LnopLHc9YltuLmluZGV4Ml0saC5wdXNoKHcueCx3Lnksdy56KTt0aGlzLmFkZEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBiYShoLDMpKX1mdW5jdGlvbiBvZShiLGUsaCxuLHUsdyx6LEUpe04uY2FsbCh0aGlzKTt0aGlzLnR5cGU9IkN5bGluZGVyR2VvbWV0cnkiO3RoaXMucGFyYW1ldGVycz17cmFkaXVzVG9wOmIscmFkaXVzQm90dG9tOmUsaGVpZ2h0OmgscmFkaWFsU2VnbWVudHM6bixoZWlnaHRTZWdtZW50czp1LG9wZW5FbmRlZDp3LHRoZXRhU3RhcnQ6eix0aGV0YUxlbmd0aDpFfTt0aGlzLmZyb21CdWZmZXJHZW9tZXRyeShuZXcgemQoYixlLGgsbix1LHcseixFKSk7dGhpcy5tZXJnZVZlcnRpY2VzKCl9ZnVuY3Rpb24gemQoYixlLGgsbix1LHcseixFKXtmdW5jdGlvbiBIKHJhKXt2YXIgaWEsdGE9bmV3IGQsbmE9bmV3IGcsdmE9MCxCYT0hMD09PXJhP2I6ZSxzYT0hMD09PXJhPzE6LTE7dmFyIERhPVc7Zm9yKGlhPQoxO2lhPD1uO2lhKyspUS5wdXNoKDAsZmEqc2EsMCksUi5wdXNoKDAsc2EsMCksVS5wdXNoKC41LC41KSxXKys7dmFyIEhhPVc7Zm9yKGlhPTA7aWE8PW47aWErKyl7dmFyIEthPWlhL24qRSt6LE5hPU1hdGguY29zKEthKTtLYT1NYXRoLnNpbihLYSk7bmEueD1CYSpLYTtuYS55PWZhKnNhO25hLno9QmEqTmE7US5wdXNoKG5hLngsbmEueSxuYS56KTtSLnB1c2goMCxzYSwwKTt0YS54PS41Kk5hKy41O3RhLnk9LjUqS2Eqc2ErLjU7VS5wdXNoKHRhLngsdGEueSk7VysrfWZvcihpYT0wO2lhPG47aWErKyl0YT1EYStpYSxuYT1IYStpYSwhMD09PXJhP08ucHVzaChuYSxuYSsxLHRhKTpPLnB1c2gobmErMSxuYSx0YSksdmErPTM7SS5hZGRHcm91cChxYSx2YSwhMD09PXJhPzE6Mik7cWErPXZhfXhhLmNhbGwodGhpcyk7dGhpcy50eXBlPSJDeWxpbmRlckJ1ZmZlckdlb21ldHJ5Ijt0aGlzLnBhcmFtZXRlcnM9e3JhZGl1c1RvcDpiLHJhZGl1c0JvdHRvbTplLGhlaWdodDpoLHJhZGlhbFNlZ21lbnRzOm4sCmhlaWdodFNlZ21lbnRzOnUsb3BlbkVuZGVkOncsdGhldGFTdGFydDp6LHRoZXRhTGVuZ3RoOkV9O3ZhciBJPXRoaXM7Yj12b2lkIDAhPT1iP2I6MTtlPXZvaWQgMCE9PWU/ZToxO2g9aHx8MTtuPU1hdGguZmxvb3Iobil8fDg7dT1NYXRoLmZsb29yKHUpfHwxO3c9dm9pZCAwIT09dz93OiExO3o9dm9pZCAwIT09ej96OjA7RT12b2lkIDAhPT1FP0U6MipNYXRoLlBJO3ZhciBPPVtdLFE9W10sUj1bXSxVPVtdLFc9MCxaPVtdLGZhPWgvMixxYT0wOyhmdW5jdGlvbigpe3ZhciByYSxpYSx0YT1uZXcgZyxuYT1uZXcgZyx2YT0wLEJhPShlLWIpL2g7Zm9yKGlhPTA7aWE8PXU7aWErKyl7dmFyIHNhPVtdLERhPWlhL3UsSGE9RGEqKGUtYikrYjtmb3IocmE9MDtyYTw9bjtyYSsrKXt2YXIgS2E9cmEvbixOYT1LYSpFK3osTGE9TWF0aC5zaW4oTmEpO05hPU1hdGguY29zKE5hKTtuYS54PUhhKkxhO25hLnk9LURhKmgrZmE7bmEuej1IYSpOYTtRLnB1c2gobmEueCxuYS55LG5hLnopO3RhLnNldChMYSwKQmEsTmEpLm5vcm1hbGl6ZSgpO1IucHVzaCh0YS54LHRhLnksdGEueik7VS5wdXNoKEthLDEtRGEpO3NhLnB1c2goVysrKX1aLnB1c2goc2EpfWZvcihyYT0wO3JhPG47cmErKylmb3IoaWE9MDtpYTx1O2lhKyspdGE9WltpYSsxXVtyYV0sbmE9WltpYSsxXVtyYSsxXSxCYT1aW2lhXVtyYSsxXSxPLnB1c2goWltpYV1bcmFdLHRhLEJhKSxPLnB1c2godGEsbmEsQmEpLHZhKz02O0kuYWRkR3JvdXAocWEsdmEsMCk7cWErPXZhfSkoKTshMT09PXcmJigwPGImJkgoITApLDA8ZSYmSCghMSkpO3RoaXMuc2V0SW5kZXgoTyk7dGhpcy5hZGRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgYmEoUSwzKSk7dGhpcy5hZGRBdHRyaWJ1dGUoIm5vcm1hbCIsbmV3IGJhKFIsMykpO3RoaXMuYWRkQXR0cmlidXRlKCJ1diIsbmV3IGJhKFUsMikpfWZ1bmN0aW9uIG5nKGIsZSxoLG4sdSx3LHope29lLmNhbGwodGhpcywwLGIsZSxoLG4sdSx3LHopO3RoaXMudHlwZT0iQ29uZUdlb21ldHJ5Ijt0aGlzLnBhcmFtZXRlcnM9CntyYWRpdXM6YixoZWlnaHQ6ZSxyYWRpYWxTZWdtZW50czpoLGhlaWdodFNlZ21lbnRzOm4sb3BlbkVuZGVkOnUsdGhldGFTdGFydDp3LHRoZXRhTGVuZ3RoOnp9fWZ1bmN0aW9uIG9nKGIsZSxoLG4sdSx3LHope3pkLmNhbGwodGhpcywwLGIsZSxoLG4sdSx3LHopO3RoaXMudHlwZT0iQ29uZUJ1ZmZlckdlb21ldHJ5Ijt0aGlzLnBhcmFtZXRlcnM9e3JhZGl1czpiLGhlaWdodDplLHJhZGlhbFNlZ21lbnRzOmgsaGVpZ2h0U2VnbWVudHM6bixvcGVuRW5kZWQ6dSx0aGV0YVN0YXJ0OncsdGhldGFMZW5ndGg6en19ZnVuY3Rpb24gcGcoYixlLGgsbil7Ti5jYWxsKHRoaXMpO3RoaXMudHlwZT0iQ2lyY2xlR2VvbWV0cnkiO3RoaXMucGFyYW1ldGVycz17cmFkaXVzOmIsc2VnbWVudHM6ZSx0aGV0YVN0YXJ0OmgsdGhldGFMZW5ndGg6bn07dGhpcy5mcm9tQnVmZmVyR2VvbWV0cnkobmV3IGRmKGIsZSxoLG4pKTt0aGlzLm1lcmdlVmVydGljZXMoKX1mdW5jdGlvbiBkZihiLGUsaCxuKXt4YS5jYWxsKHRoaXMpOwp0aGlzLnR5cGU9IkNpcmNsZUJ1ZmZlckdlb21ldHJ5Ijt0aGlzLnBhcmFtZXRlcnM9e3JhZGl1czpiLHNlZ21lbnRzOmUsdGhldGFTdGFydDpoLHRoZXRhTGVuZ3RoOm59O2I9Ynx8MTtlPXZvaWQgMCE9PWU/TWF0aC5tYXgoMyxlKTo4O2g9dm9pZCAwIT09aD9oOjA7bj12b2lkIDAhPT1uP246MipNYXRoLlBJO3ZhciB1PVtdLHc9W10sej1bXSxFPVtdLEgsST1uZXcgZyxPPW5ldyBkO3cucHVzaCgwLDAsMCk7ei5wdXNoKDAsMCwxKTtFLnB1c2goLjUsLjUpO3ZhciBRPTA7Zm9yKEg9MztRPD1lO1ErKyxIKz0zKXt2YXIgUj1oK1EvZSpuO0kueD1iKk1hdGguY29zKFIpO0kueT1iKk1hdGguc2luKFIpO3cucHVzaChJLngsSS55LEkueik7ei5wdXNoKDAsMCwxKTtPLng9KHdbSF0vYisxKS8yO08ueT0od1tIKzFdL2IrMSkvMjtFLnB1c2goTy54LE8ueSl9Zm9yKEg9MTtIPD1lO0grKyl1LnB1c2goSCxIKzEsMCk7dGhpcy5zZXRJbmRleCh1KTt0aGlzLmFkZEF0dHJpYnV0ZSgicG9zaXRpb24iLApuZXcgYmEodywzKSk7dGhpcy5hZGRBdHRyaWJ1dGUoIm5vcm1hbCIsbmV3IGJhKHosMykpO3RoaXMuYWRkQXR0cmlidXRlKCJ1diIsbmV3IGJhKEUsMikpfWZ1bmN0aW9uIHBlKGIpe0dhLmNhbGwodGhpcyk7dGhpcy50eXBlPSJTaGFkb3dNYXRlcmlhbCI7dGhpcy5jb2xvcj1uZXcgQigwKTt0aGlzLnRyYW5zcGFyZW50PSEwO3RoaXMuc2V0VmFsdWVzKGIpfWZ1bmN0aW9uIGVmKGIpe2RiLmNhbGwodGhpcyxiKTt0aGlzLnR5cGU9IlJhd1NoYWRlck1hdGVyaWFsIn1mdW5jdGlvbiBuZChiKXtHYS5jYWxsKHRoaXMpO3RoaXMuZGVmaW5lcz17U1RBTkRBUkQ6IiJ9O3RoaXMudHlwZT0iTWVzaFN0YW5kYXJkTWF0ZXJpYWwiO3RoaXMuY29sb3I9bmV3IEIoMTY3NzcyMTUpO3RoaXMubWV0YWxuZXNzPXRoaXMucm91Z2huZXNzPS41O3RoaXMubGlnaHRNYXA9dGhpcy5tYXA9bnVsbDt0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PTE7dGhpcy5hb01hcD1udWxsO3RoaXMuYW9NYXBJbnRlbnNpdHk9CjE7dGhpcy5lbWlzc2l2ZT1uZXcgQigwKTt0aGlzLmVtaXNzaXZlSW50ZW5zaXR5PTE7dGhpcy5idW1wTWFwPXRoaXMuZW1pc3NpdmVNYXA9bnVsbDt0aGlzLmJ1bXBTY2FsZT0xO3RoaXMubm9ybWFsTWFwPW51bGw7dGhpcy5ub3JtYWxNYXBUeXBlPTA7dGhpcy5ub3JtYWxTY2FsZT1uZXcgZCgxLDEpO3RoaXMuZGlzcGxhY2VtZW50TWFwPW51bGw7dGhpcy5kaXNwbGFjZW1lbnRTY2FsZT0xO3RoaXMuZGlzcGxhY2VtZW50Qmlhcz0wO3RoaXMuZW52TWFwPXRoaXMuYWxwaGFNYXA9dGhpcy5tZXRhbG5lc3NNYXA9dGhpcy5yb3VnaG5lc3NNYXA9bnVsbDt0aGlzLmVudk1hcEludGVuc2l0eT0xO3RoaXMucmVmcmFjdGlvblJhdGlvPS45ODt0aGlzLndpcmVmcmFtZT0hMTt0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xO3RoaXMud2lyZWZyYW1lTGluZWpvaW49dGhpcy53aXJlZnJhbWVMaW5lY2FwPSJyb3VuZCI7dGhpcy5tb3JwaE5vcm1hbHM9dGhpcy5tb3JwaFRhcmdldHM9dGhpcy5za2lubmluZz0KITE7dGhpcy5zZXRWYWx1ZXMoYil9ZnVuY3Rpb24gcWUoYil7bmQuY2FsbCh0aGlzKTt0aGlzLmRlZmluZXM9e1BIWVNJQ0FMOiIifTt0aGlzLnR5cGU9Ik1lc2hQaHlzaWNhbE1hdGVyaWFsIjt0aGlzLnJlZmxlY3Rpdml0eT0uNTt0aGlzLmNsZWFyQ29hdFJvdWdobmVzcz10aGlzLmNsZWFyQ29hdD0wO3RoaXMuc2V0VmFsdWVzKGIpfWZ1bmN0aW9uIFRjKGIpe0dhLmNhbGwodGhpcyk7dGhpcy50eXBlPSJNZXNoUGhvbmdNYXRlcmlhbCI7dGhpcy5jb2xvcj1uZXcgQigxNjc3NzIxNSk7dGhpcy5zcGVjdWxhcj1uZXcgQigxMTE4NDgxKTt0aGlzLnNoaW5pbmVzcz0zMDt0aGlzLmxpZ2h0TWFwPXRoaXMubWFwPW51bGw7dGhpcy5saWdodE1hcEludGVuc2l0eT0xO3RoaXMuYW9NYXA9bnVsbDt0aGlzLmFvTWFwSW50ZW5zaXR5PTE7dGhpcy5lbWlzc2l2ZT1uZXcgQigwKTt0aGlzLmVtaXNzaXZlSW50ZW5zaXR5PTE7dGhpcy5idW1wTWFwPXRoaXMuZW1pc3NpdmVNYXA9bnVsbDt0aGlzLmJ1bXBTY2FsZT0KMTt0aGlzLm5vcm1hbE1hcD1udWxsO3RoaXMubm9ybWFsTWFwVHlwZT0wO3RoaXMubm9ybWFsU2NhbGU9bmV3IGQoMSwxKTt0aGlzLmRpc3BsYWNlbWVudE1hcD1udWxsO3RoaXMuZGlzcGxhY2VtZW50U2NhbGU9MTt0aGlzLmRpc3BsYWNlbWVudEJpYXM9MDt0aGlzLmVudk1hcD10aGlzLmFscGhhTWFwPXRoaXMuc3BlY3VsYXJNYXA9bnVsbDt0aGlzLmNvbWJpbmU9MDt0aGlzLnJlZmxlY3Rpdml0eT0xO3RoaXMucmVmcmFjdGlvblJhdGlvPS45ODt0aGlzLndpcmVmcmFtZT0hMTt0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xO3RoaXMud2lyZWZyYW1lTGluZWpvaW49dGhpcy53aXJlZnJhbWVMaW5lY2FwPSJyb3VuZCI7dGhpcy5tb3JwaE5vcm1hbHM9dGhpcy5tb3JwaFRhcmdldHM9dGhpcy5za2lubmluZz0hMTt0aGlzLnNldFZhbHVlcyhiKX1mdW5jdGlvbiByZShiKXtUYy5jYWxsKHRoaXMpO3RoaXMuZGVmaW5lcz17VE9PTjoiIn07dGhpcy50eXBlPSJNZXNoVG9vbk1hdGVyaWFsIjsKdGhpcy5ncmFkaWVudE1hcD1udWxsO3RoaXMuc2V0VmFsdWVzKGIpfWZ1bmN0aW9uIHNlKGIpe0dhLmNhbGwodGhpcyk7dGhpcy50eXBlPSJNZXNoTm9ybWFsTWF0ZXJpYWwiO3RoaXMuYnVtcE1hcD1udWxsO3RoaXMuYnVtcFNjYWxlPTE7dGhpcy5ub3JtYWxNYXA9bnVsbDt0aGlzLm5vcm1hbE1hcFR5cGU9MDt0aGlzLm5vcm1hbFNjYWxlPW5ldyBkKDEsMSk7dGhpcy5kaXNwbGFjZW1lbnRNYXA9bnVsbDt0aGlzLmRpc3BsYWNlbWVudFNjYWxlPTE7dGhpcy5kaXNwbGFjZW1lbnRCaWFzPTA7dGhpcy53aXJlZnJhbWU9ITE7dGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9MTt0aGlzLm1vcnBoTm9ybWFscz10aGlzLm1vcnBoVGFyZ2V0cz10aGlzLnNraW5uaW5nPXRoaXMubGlnaHRzPXRoaXMuZm9nPSExO3RoaXMuc2V0VmFsdWVzKGIpfWZ1bmN0aW9uIHRlKGIpe0dhLmNhbGwodGhpcyk7dGhpcy50eXBlPSJNZXNoTGFtYmVydE1hdGVyaWFsIjt0aGlzLmNvbG9yPW5ldyBCKDE2Nzc3MjE1KTsKdGhpcy5saWdodE1hcD10aGlzLm1hcD1udWxsO3RoaXMubGlnaHRNYXBJbnRlbnNpdHk9MTt0aGlzLmFvTWFwPW51bGw7dGhpcy5hb01hcEludGVuc2l0eT0xO3RoaXMuZW1pc3NpdmU9bmV3IEIoMCk7dGhpcy5lbWlzc2l2ZUludGVuc2l0eT0xO3RoaXMuZW52TWFwPXRoaXMuYWxwaGFNYXA9dGhpcy5zcGVjdWxhck1hcD10aGlzLmVtaXNzaXZlTWFwPW51bGw7dGhpcy5jb21iaW5lPTA7dGhpcy5yZWZsZWN0aXZpdHk9MTt0aGlzLnJlZnJhY3Rpb25SYXRpbz0uOTg7dGhpcy53aXJlZnJhbWU9ITE7dGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9MTt0aGlzLndpcmVmcmFtZUxpbmVqb2luPXRoaXMud2lyZWZyYW1lTGluZWNhcD0icm91bmQiO3RoaXMubW9ycGhOb3JtYWxzPXRoaXMubW9ycGhUYXJnZXRzPXRoaXMuc2tpbm5pbmc9ITE7dGhpcy5zZXRWYWx1ZXMoYil9ZnVuY3Rpb24gdWUoYil7R2EuY2FsbCh0aGlzKTt0aGlzLmRlZmluZXM9e01BVENBUDoiIn07dGhpcy50eXBlPSJNZXNoTWF0Y2FwTWF0ZXJpYWwiOwp0aGlzLmNvbG9yPW5ldyBCKDE2Nzc3MjE1KTt0aGlzLmJ1bXBNYXA9dGhpcy5tYXA9dGhpcy5tYXRjYXA9bnVsbDt0aGlzLmJ1bXBTY2FsZT0xO3RoaXMubm9ybWFsTWFwPW51bGw7dGhpcy5ub3JtYWxNYXBUeXBlPTA7dGhpcy5ub3JtYWxTY2FsZT1uZXcgZCgxLDEpO3RoaXMuZGlzcGxhY2VtZW50TWFwPW51bGw7dGhpcy5kaXNwbGFjZW1lbnRTY2FsZT0xO3RoaXMuZGlzcGxhY2VtZW50Qmlhcz0wO3RoaXMuYWxwaGFNYXA9bnVsbDt0aGlzLmxpZ2h0cz10aGlzLm1vcnBoTm9ybWFscz10aGlzLm1vcnBoVGFyZ2V0cz10aGlzLnNraW5uaW5nPSExO3RoaXMuc2V0VmFsdWVzKGIpfWZ1bmN0aW9uIHZlKGIpe0xiLmNhbGwodGhpcyk7dGhpcy50eXBlPSJMaW5lRGFzaGVkTWF0ZXJpYWwiO3RoaXMuc2NhbGU9MTt0aGlzLmRhc2hTaXplPTM7dGhpcy5nYXBTaXplPTE7dGhpcy5zZXRWYWx1ZXMoYil9ZnVuY3Rpb24gRGMoYixlLGgsbil7dGhpcy5wYXJhbWV0ZXJQb3NpdGlvbnM9Yjt0aGlzLl9jYWNoZWRJbmRleD0KMDt0aGlzLnJlc3VsdEJ1ZmZlcj12b2lkIDAhPT1uP246bmV3IGUuY29uc3RydWN0b3IoaCk7dGhpcy5zYW1wbGVWYWx1ZXM9ZTt0aGlzLnZhbHVlU2l6ZT1ofWZ1bmN0aW9uIG1oKGIsZSxoLG4pe0RjLmNhbGwodGhpcyxiLGUsaCxuKTt0aGlzLl9vZmZzZXROZXh0PXRoaXMuX3dlaWdodE5leHQ9dGhpcy5fb2Zmc2V0UHJldj10aGlzLl93ZWlnaHRQcmV2PS0wfWZ1bmN0aW9uIHFnKGIsZSxoLG4pe0RjLmNhbGwodGhpcyxiLGUsaCxuKX1mdW5jdGlvbiBuaChiLGUsaCxuKXtEYy5jYWxsKHRoaXMsYixlLGgsbil9ZnVuY3Rpb24gbWMoYixlLGgsbil7aWYodm9pZCAwPT09Yil0aHJvdyBFcnJvcigiVEhSRUUuS2V5ZnJhbWVUcmFjazogdHJhY2sgbmFtZSBpcyB1bmRlZmluZWQiKTtpZih2b2lkIDA9PT1lfHwwPT09ZS5sZW5ndGgpdGhyb3cgRXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IG5vIGtleWZyYW1lcyBpbiB0cmFjayBuYW1lZCAiK2IpO3RoaXMubmFtZT1iO3RoaXMudGltZXM9CmdjLmNvbnZlcnRBcnJheShlLHRoaXMuVGltZUJ1ZmZlclR5cGUpO3RoaXMudmFsdWVzPWdjLmNvbnZlcnRBcnJheShoLHRoaXMuVmFsdWVCdWZmZXJUeXBlKTt0aGlzLnNldEludGVycG9sYXRpb24obnx8dGhpcy5EZWZhdWx0SW50ZXJwb2xhdGlvbil9ZnVuY3Rpb24gb2goYixlLGgpe21jLmNhbGwodGhpcyxiLGUsaCl9ZnVuY3Rpb24gcGgoYixlLGgsbil7bWMuY2FsbCh0aGlzLGIsZSxoLG4pfWZ1bmN0aW9uIGZmKGIsZSxoLG4pe21jLmNhbGwodGhpcyxiLGUsaCxuKX1mdW5jdGlvbiBxaChiLGUsaCxuKXtEYy5jYWxsKHRoaXMsYixlLGgsbil9ZnVuY3Rpb24gcmcoYixlLGgsbil7bWMuY2FsbCh0aGlzLGIsZSxoLG4pfWZ1bmN0aW9uIHJoKGIsZSxoLG4pe21jLmNhbGwodGhpcyxiLGUsaCxuKX1mdW5jdGlvbiBnZihiLGUsaCxuKXttYy5jYWxsKHRoaXMsYixlLGgsbil9ZnVuY3Rpb24gSWMoYixlLGgpe3RoaXMubmFtZT1iO3RoaXMudHJhY2tzPWg7dGhpcy5kdXJhdGlvbj12b2lkIDAhPT0KZT9lOi0xO3RoaXMudXVpZD1vYi5nZW5lcmF0ZVVVSUQoKTswPnRoaXMuZHVyYXRpb24mJnRoaXMucmVzZXREdXJhdGlvbigpfWZ1bmN0aW9uIGFwKGIpe3N3aXRjaChiLnRvTG93ZXJDYXNlKCkpe2Nhc2UgInNjYWxhciI6Y2FzZSAiZG91YmxlIjpjYXNlICJmbG9hdCI6Y2FzZSAibnVtYmVyIjpjYXNlICJpbnRlZ2VyIjpyZXR1cm4gZmY7Y2FzZSAidmVjdG9yIjpjYXNlICJ2ZWN0b3IyIjpjYXNlICJ2ZWN0b3IzIjpjYXNlICJ2ZWN0b3I0IjpyZXR1cm4gZ2Y7Y2FzZSAiY29sb3IiOnJldHVybiBwaDtjYXNlICJxdWF0ZXJuaW9uIjpyZXR1cm4gcmc7Y2FzZSAiYm9vbCI6Y2FzZSAiYm9vbGVhbiI6cmV0dXJuIG9oO2Nhc2UgInN0cmluZyI6cmV0dXJuIHJofXRocm93IEVycm9yKCJUSFJFRS5LZXlmcmFtZVRyYWNrOiBVbnN1cHBvcnRlZCB0eXBlTmFtZTogIitiKTt9ZnVuY3Rpb24gYnAoYil7aWYodm9pZCAwPT09Yi50eXBlKXRocm93IEVycm9yKCJUSFJFRS5LZXlmcmFtZVRyYWNrOiB0cmFjayB0eXBlIHVuZGVmaW5lZCwgY2FuIG5vdCBwYXJzZSIpOwp2YXIgZT1hcChiLnR5cGUpO2lmKHZvaWQgMD09PWIudGltZXMpe3ZhciBoPVtdLG49W107Z2MuZmxhdHRlbkpTT04oYi5rZXlzLGgsbiwidmFsdWUiKTtiLnRpbWVzPWg7Yi52YWx1ZXM9bn1yZXR1cm4gdm9pZCAwIT09ZS5wYXJzZT9lLnBhcnNlKGIpOm5ldyBlKGIubmFtZSxiLnRpbWVzLGIudmFsdWVzLGIuaW50ZXJwb2xhdGlvbil9ZnVuY3Rpb24gRGkoYixlLGgpe3ZhciBuPXRoaXMsdT0hMSx3PTAsej0wLEU9dm9pZCAwO3RoaXMub25TdGFydD12b2lkIDA7dGhpcy5vbkxvYWQ9Yjt0aGlzLm9uUHJvZ3Jlc3M9ZTt0aGlzLm9uRXJyb3I9aDt0aGlzLml0ZW1TdGFydD1mdW5jdGlvbihIKXt6Kys7aWYoITE9PT11JiZ2b2lkIDAhPT1uLm9uU3RhcnQpbi5vblN0YXJ0KEgsdyx6KTt1PSEwfTt0aGlzLml0ZW1FbmQ9ZnVuY3Rpb24oSCl7dysrO2lmKHZvaWQgMCE9PW4ub25Qcm9ncmVzcyluLm9uUHJvZ3Jlc3MoSCx3LHopO2lmKHc9PT16JiYodT0hMSx2b2lkIDAhPT1uLm9uTG9hZCkpbi5vbkxvYWQoKX07CnRoaXMuaXRlbUVycm9yPWZ1bmN0aW9uKEgpe2lmKHZvaWQgMCE9PW4ub25FcnJvciluLm9uRXJyb3IoSCl9O3RoaXMucmVzb2x2ZVVSTD1mdW5jdGlvbihIKXtyZXR1cm4gRT9FKEgpOkh9O3RoaXMuc2V0VVJMTW9kaWZpZXI9ZnVuY3Rpb24oSCl7RT1IO3JldHVybiB0aGlzfX1mdW5jdGlvbiBVYyhiKXt0aGlzLm1hbmFnZXI9dm9pZCAwIT09Yj9iOkFjfWZ1bmN0aW9uIEVsKGIpe3RoaXMubWFuYWdlcj12b2lkIDAhPT1iP2I6QWN9ZnVuY3Rpb24gRmwoYil7dGhpcy5tYW5hZ2VyPXZvaWQgMCE9PWI/YjpBYzt0aGlzLl9wYXJzZXI9bnVsbH1mdW5jdGlvbiBFaShiKXt0aGlzLm1hbmFnZXI9dm9pZCAwIT09Yj9iOkFjO3RoaXMuX3BhcnNlcj1udWxsfWZ1bmN0aW9uIHNnKGIpe3RoaXMubWFuYWdlcj12b2lkIDAhPT1iP2I6QWN9ZnVuY3Rpb24gRmkoYil7dGhpcy5tYW5hZ2VyPXZvaWQgMCE9PWI/YjpBY31mdW5jdGlvbiBzaChiKXt0aGlzLm1hbmFnZXI9dm9pZCAwIT09Yj9iOkFjfQpmdW5jdGlvbiBlYigpe3RoaXMudHlwZT0iQ3VydmUiO3RoaXMuYXJjTGVuZ3RoRGl2aXNpb25zPTIwMH1mdW5jdGlvbiBFYyhiLGUsaCxuLHUsdyx6LEUpe2ViLmNhbGwodGhpcyk7dGhpcy50eXBlPSJFbGxpcHNlQ3VydmUiO3RoaXMuYVg9Ynx8MDt0aGlzLmFZPWV8fDA7dGhpcy54UmFkaXVzPWh8fDE7dGhpcy55UmFkaXVzPW58fDE7dGhpcy5hU3RhcnRBbmdsZT11fHwwO3RoaXMuYUVuZEFuZ2xlPXd8fDIqTWF0aC5QSTt0aGlzLmFDbG9ja3dpc2U9enx8ITE7dGhpcy5hUm90YXRpb249RXx8MH1mdW5jdGlvbiBoZihiLGUsaCxuLHUsdyl7RWMuY2FsbCh0aGlzLGIsZSxoLGgsbix1LHcpO3RoaXMudHlwZT0iQXJjQ3VydmUifWZ1bmN0aW9uIEdpKCl7ZnVuY3Rpb24gYih3LHosRSxIKXtlPXc7aD1FO249LTMqdyszKnotMipFLUg7dT0yKnctMip6K0UrSH12YXIgZT0wLGg9MCxuPTAsdT0wO3JldHVybntpbml0Q2F0bXVsbFJvbTpmdW5jdGlvbih3LHosRSxILEkpe2IoeixFLEkqKEUtCncpLEkqKEgteikpfSxpbml0Tm9udW5pZm9ybUNhdG11bGxSb206ZnVuY3Rpb24odyx6LEUsSCxJLE8sUSl7Yih6LEUsKCh6LXcpL0ktKEUtdykvKEkrTykrKEUteikvTykqTywoKEUteikvTy0oSC16KS8oTytRKSsoSC1FKS9RKSpPKX0sY2FsYzpmdW5jdGlvbih3KXt2YXIgej13Knc7cmV0dXJuIGUraCp3K24qeit1Knoqd319fWZ1bmN0aW9uIHJjKGIsZSxoLG4pe2ViLmNhbGwodGhpcyk7dGhpcy50eXBlPSJDYXRtdWxsUm9tQ3VydmUzIjt0aGlzLnBvaW50cz1ifHxbXTt0aGlzLmNsb3NlZD1lfHwhMTt0aGlzLmN1cnZlVHlwZT1ofHwiY2VudHJpcGV0YWwiO3RoaXMudGVuc2lvbj1ufHwuNX1mdW5jdGlvbiBHbChiLGUsaCxuLHUpe2U9LjUqKG4tZSk7dT0uNSoodS1oKTt2YXIgdz1iKmI7cmV0dXJuKDIqaC0yKm4rZSt1KSpiKncrKC0zKmgrMypuLTIqZS11KSp3K2UqYitofWZ1bmN0aW9uIGNwKGIsZSl7Yj0xLWI7cmV0dXJuIGIqYiplfWZ1bmN0aW9uIGRwKGIsZSl7cmV0dXJuIDIqCigxLWIpKmIqZX1mdW5jdGlvbiBlcChiLGUpe3JldHVybiBiKmIqZX1mdW5jdGlvbiB0ZyhiLGUsaCxuKXtyZXR1cm4gY3AoYixlKStkcChiLGgpK2VwKGIsbil9ZnVuY3Rpb24gZnAoYixlKXtiPTEtYjtyZXR1cm4gYipiKmIqZX1mdW5jdGlvbiBncChiLGUpe3ZhciBoPTEtYjtyZXR1cm4gMypoKmgqYiplfWZ1bmN0aW9uIGhwKGIsZSl7cmV0dXJuIDMqKDEtYikqYipiKmV9ZnVuY3Rpb24gaXAoYixlKXtyZXR1cm4gYipiKmIqZX1mdW5jdGlvbiB1ZyhiLGUsaCxuLHUpe3JldHVybiBmcChiLGUpK2dwKGIsaCkraHAoYixuKStpcChiLHUpfWZ1bmN0aW9uIFZjKGIsZSxoLG4pe2ViLmNhbGwodGhpcyk7dGhpcy50eXBlPSJDdWJpY0JlemllckN1cnZlIjt0aGlzLnYwPWJ8fG5ldyBkO3RoaXMudjE9ZXx8bmV3IGQ7dGhpcy52Mj1ofHxuZXcgZDt0aGlzLnYzPW58fG5ldyBkfWZ1bmN0aW9uIG9kKGIsZSxoLG4pe2ViLmNhbGwodGhpcyk7dGhpcy50eXBlPSJDdWJpY0JlemllckN1cnZlMyI7CnRoaXMudjA9Ynx8bmV3IGc7dGhpcy52MT1lfHxuZXcgZzt0aGlzLnYyPWh8fG5ldyBnO3RoaXMudjM9bnx8bmV3IGd9ZnVuY3Rpb24gQmMoYixlKXtlYi5jYWxsKHRoaXMpO3RoaXMudHlwZT0iTGluZUN1cnZlIjt0aGlzLnYxPWJ8fG5ldyBkO3RoaXMudjI9ZXx8bmV3IGR9ZnVuY3Rpb24gV2MoYixlKXtlYi5jYWxsKHRoaXMpO3RoaXMudHlwZT0iTGluZUN1cnZlMyI7dGhpcy52MT1ifHxuZXcgZzt0aGlzLnYyPWV8fG5ldyBnfWZ1bmN0aW9uIFhjKGIsZSxoKXtlYi5jYWxsKHRoaXMpO3RoaXMudHlwZT0iUXVhZHJhdGljQmV6aWVyQ3VydmUiO3RoaXMudjA9Ynx8bmV3IGQ7dGhpcy52MT1lfHxuZXcgZDt0aGlzLnYyPWh8fG5ldyBkfWZ1bmN0aW9uIHBkKGIsZSxoKXtlYi5jYWxsKHRoaXMpO3RoaXMudHlwZT0iUXVhZHJhdGljQmV6aWVyQ3VydmUzIjt0aGlzLnYwPWJ8fG5ldyBnO3RoaXMudjE9ZXx8bmV3IGc7dGhpcy52Mj1ofHxuZXcgZ31mdW5jdGlvbiBZYyhiKXtlYi5jYWxsKHRoaXMpOwp0aGlzLnR5cGU9IlNwbGluZUN1cnZlIjt0aGlzLnBvaW50cz1ifHxbXX1mdW5jdGlvbiBBZCgpe2ViLmNhbGwodGhpcyk7dGhpcy50eXBlPSJDdXJ2ZVBhdGgiO3RoaXMuY3VydmVzPVtdO3RoaXMuYXV0b0Nsb3NlPSExfWZ1bmN0aW9uIFpjKGIpe0FkLmNhbGwodGhpcyk7dGhpcy50eXBlPSJQYXRoIjt0aGlzLmN1cnJlbnRQb2ludD1uZXcgZDtiJiZ0aGlzLnNldEZyb21Qb2ludHMoYil9ZnVuY3Rpb24gWGQoYil7WmMuY2FsbCh0aGlzLGIpO3RoaXMudXVpZD1vYi5nZW5lcmF0ZVVVSUQoKTt0aGlzLnR5cGU9IlNoYXBlIjt0aGlzLmhvbGVzPVtdfWZ1bmN0aW9uIFNiKGIsZSl7Uy5jYWxsKHRoaXMpO3RoaXMudHlwZT0iTGlnaHQiO3RoaXMuY29sb3I9bmV3IEIoYik7dGhpcy5pbnRlbnNpdHk9dm9pZCAwIT09ZT9lOjE7dGhpcy5yZWNlaXZlU2hhZG93PXZvaWQgMH1mdW5jdGlvbiB0aChiLGUsaCl7U2IuY2FsbCh0aGlzLGIsaCk7dGhpcy50eXBlPSJIZW1pc3BoZXJlTGlnaHQiO3RoaXMuY2FzdFNoYWRvdz0Kdm9pZCAwO3RoaXMucG9zaXRpb24uY29weShTLkRlZmF1bHRVcCk7dGhpcy51cGRhdGVNYXRyaXgoKTt0aGlzLmdyb3VuZENvbG9yPW5ldyBCKGUpfWZ1bmN0aW9uIHdlKGIpe3RoaXMuY2FtZXJhPWI7dGhpcy5iaWFzPTA7dGhpcy5yYWRpdXM9MTt0aGlzLm1hcFNpemU9bmV3IGQoNTEyLDUxMik7dGhpcy5tYXA9bnVsbDt0aGlzLm1hdHJpeD1uZXcgQ31mdW5jdGlvbiB1aCgpe3dlLmNhbGwodGhpcyxuZXcgY2MoNTAsMSwuNSw1MDApKX1mdW5jdGlvbiB2aChiLGUsaCxuLHUsdyl7U2IuY2FsbCh0aGlzLGIsZSk7dGhpcy50eXBlPSJTcG90TGlnaHQiO3RoaXMucG9zaXRpb24uY29weShTLkRlZmF1bHRVcCk7dGhpcy51cGRhdGVNYXRyaXgoKTt0aGlzLnRhcmdldD1uZXcgUztPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywicG93ZXIiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbnRlbnNpdHkqTWF0aC5QSX0sc2V0OmZ1bmN0aW9uKHope3RoaXMuaW50ZW5zaXR5PXovTWF0aC5QSX19KTsKdGhpcy5kaXN0YW5jZT12b2lkIDAhPT1oP2g6MDt0aGlzLmFuZ2xlPXZvaWQgMCE9PW4/bjpNYXRoLlBJLzM7dGhpcy5wZW51bWJyYT12b2lkIDAhPT11P3U6MDt0aGlzLmRlY2F5PXZvaWQgMCE9PXc/dzoxO3RoaXMuc2hhZG93PW5ldyB1aH1mdW5jdGlvbiB3aChiLGUsaCxuKXtTYi5jYWxsKHRoaXMsYixlKTt0aGlzLnR5cGU9IlBvaW50TGlnaHQiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJwb3dlciIse2dldDpmdW5jdGlvbigpe3JldHVybiA0KnRoaXMuaW50ZW5zaXR5Kk1hdGguUEl9LHNldDpmdW5jdGlvbih1KXt0aGlzLmludGVuc2l0eT11Lyg0Kk1hdGguUEkpfX0pO3RoaXMuZGlzdGFuY2U9dm9pZCAwIT09aD9oOjA7dGhpcy5kZWNheT12b2lkIDAhPT1uP246MTt0aGlzLnNoYWRvdz1uZXcgd2UobmV3IGNjKDkwLDEsLjUsNTAwKSl9ZnVuY3Rpb24gdmcoYixlLGgsbix1LHcpe2pkLmNhbGwodGhpcyk7dGhpcy50eXBlPSJPcnRob2dyYXBoaWNDYW1lcmEiO3RoaXMuem9vbT0KMTt0aGlzLnZpZXc9bnVsbDt0aGlzLmxlZnQ9dm9pZCAwIT09Yj9iOi0xO3RoaXMucmlnaHQ9dm9pZCAwIT09ZT9lOjE7dGhpcy50b3A9dm9pZCAwIT09aD9oOjE7dGhpcy5ib3R0b209dm9pZCAwIT09bj9uOi0xO3RoaXMubmVhcj12b2lkIDAhPT11P3U6LjE7dGhpcy5mYXI9dm9pZCAwIT09dz93OjJFMzt0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX1mdW5jdGlvbiB4aCgpe3dlLmNhbGwodGhpcyxuZXcgdmcoLTUsNSw1LC01LC41LDUwMCkpfWZ1bmN0aW9uIHloKGIsZSl7U2IuY2FsbCh0aGlzLGIsZSk7dGhpcy50eXBlPSJEaXJlY3Rpb25hbExpZ2h0Ijt0aGlzLnBvc2l0aW9uLmNvcHkoUy5EZWZhdWx0VXApO3RoaXMudXBkYXRlTWF0cml4KCk7dGhpcy50YXJnZXQ9bmV3IFM7dGhpcy5zaGFkb3c9bmV3IHhofWZ1bmN0aW9uIHpoKGIsZSl7U2IuY2FsbCh0aGlzLGIsZSk7dGhpcy50eXBlPSJBbWJpZW50TGlnaHQiO3RoaXMuY2FzdFNoYWRvdz12b2lkIDB9ZnVuY3Rpb24gQWgoYiwKZSxoLG4pe1NiLmNhbGwodGhpcyxiLGUpO3RoaXMudHlwZT0iUmVjdEFyZWFMaWdodCI7dGhpcy53aWR0aD12b2lkIDAhPT1oP2g6MTA7dGhpcy5oZWlnaHQ9dm9pZCAwIT09bj9uOjEwfWZ1bmN0aW9uIEJoKGIpe3RoaXMubWFuYWdlcj12b2lkIDAhPT1iP2I6QWM7dGhpcy50ZXh0dXJlcz17fX1mdW5jdGlvbiBIaShiKXt0aGlzLm1hbmFnZXI9dm9pZCAwIT09Yj9iOkFjfWZ1bmN0aW9uIElpKGIpe3RoaXMubWFuYWdlcj12b2lkIDAhPT1iP2I6QWM7dGhpcy5yZXNvdXJjZVBhdGg9IiJ9ZnVuY3Rpb24gSmkoYil7InVuZGVmaW5lZCI9PT10eXBlb2YgY3JlYXRlSW1hZ2VCaXRtYXAmJmNvbnNvbGUud2FybigiVEhSRUUuSW1hZ2VCaXRtYXBMb2FkZXI6IGNyZWF0ZUltYWdlQml0bWFwKCkgbm90IHN1cHBvcnRlZC4iKTsidW5kZWZpbmVkIj09PXR5cGVvZiBmZXRjaCYmY29uc29sZS53YXJuKCJUSFJFRS5JbWFnZUJpdG1hcExvYWRlcjogZmV0Y2goKSBub3Qgc3VwcG9ydGVkLiIpO3RoaXMubWFuYWdlcj0Kdm9pZCAwIT09Yj9iOkFjO3RoaXMub3B0aW9ucz12b2lkIDB9ZnVuY3Rpb24gS2koKXt0aGlzLnR5cGU9IlNoYXBlUGF0aCI7dGhpcy5jb2xvcj1uZXcgQjt0aGlzLnN1YlBhdGhzPVtdO3RoaXMuY3VycmVudFBhdGg9bnVsbH1mdW5jdGlvbiBMaShiKXt0aGlzLnR5cGU9IkZvbnQiO3RoaXMuZGF0YT1ifWZ1bmN0aW9uIGpwKGIsZSxoKXtiPUFycmF5LmZyb20/QXJyYXkuZnJvbShiKTpTdHJpbmcoYikuc3BsaXQoIiIpO2UvPWgucmVzb2x1dGlvbjtmb3IodmFyIG49KGguYm91bmRpbmdCb3gueU1heC1oLmJvdW5kaW5nQm94LnlNaW4raC51bmRlcmxpbmVUaGlja25lc3MpKmUsdT1bXSx3PTAsej0wLEU9MDtFPGIubGVuZ3RoO0UrKyl7dmFyIEg9YltFXTsiXG4iPT09SD8odz0wLHotPW4pOihIPWtwKEgsZSx3LHosaCksdys9SC5vZmZzZXRYLHUucHVzaChILnBhdGgpKX1yZXR1cm4gdX1mdW5jdGlvbiBrcChiLGUsaCxuLHUpe2lmKGI9dS5nbHlwaHNbYl18fHUuZ2x5cGhzWyI/Il0pe3U9Cm5ldyBLaTtpZihiLm8pZm9yKHZhciB3PWIuX2NhY2hlZE91dGxpbmV8fChiLl9jYWNoZWRPdXRsaW5lPWIuby5zcGxpdCgiICIpKSx6PTAsRT13Lmxlbmd0aDt6PEU7KXN3aXRjaCh3W3orK10pe2Nhc2UgIm0iOnZhciBIPXdbeisrXSplK2g7dmFyIEk9d1t6KytdKmUrbjt1Lm1vdmVUbyhILEkpO2JyZWFrO2Nhc2UgImwiOkg9d1t6KytdKmUraDtJPXdbeisrXSplK247dS5saW5lVG8oSCxJKTticmVhaztjYXNlICJxIjpIPXdbeisrXSplK2g7ST13W3orK10qZStuO3ZhciBPPXdbeisrXSplK2g7dmFyIFE9d1t6KytdKmUrbjt1LnF1YWRyYXRpY0N1cnZlVG8oTyxRLEgsSSk7YnJlYWs7Y2FzZSAiYiI6SD13W3orK10qZStoO0k9d1t6KytdKmUrbjtPPXdbeisrXSplK2g7UT13W3orK10qZStuO3ZhciBSPXdbeisrXSplK2g7dmFyIFU9d1t6KytdKmUrbjt1LmJlemllckN1cnZlVG8oTyxRLFIsVSxILEkpfXJldHVybntvZmZzZXRYOmIuaGEqZSxwYXRoOnV9fX1mdW5jdGlvbiBIbChiKXt0aGlzLm1hbmFnZXI9CnZvaWQgMCE9PWI/YjpBY31mdW5jdGlvbiB3Zygpe31mdW5jdGlvbiBNaShiKXt0aGlzLm1hbmFnZXI9dm9pZCAwIT09Yj9iOkFjfWZ1bmN0aW9uIENoKCl7dGhpcy5jb2VmZmljaWVudHM9W107Zm9yKHZhciBiPTA7OT5iO2IrKyl0aGlzLmNvZWZmaWNpZW50cy5wdXNoKG5ldyBnKX1mdW5jdGlvbiAkYyhiLGUpe1NiLmNhbGwodGhpcyx2b2lkIDAsZSk7dGhpcy5zaD12b2lkIDAhPT1iP2I6bmV3IENofWZ1bmN0aW9uIE5pKGIsZSxoKXskYy5jYWxsKHRoaXMsdm9pZCAwLGgpO2I9KG5ldyBCKS5zZXQoYik7aD0obmV3IEIpLnNldChlKTtlPW5ldyBnKGIucixiLmcsYi5iKTtiPW5ldyBnKGgucixoLmcsaC5iKTtoPU1hdGguc3FydChNYXRoLlBJKTt2YXIgbj1oKk1hdGguc3FydCguNzUpO3RoaXMuc2guY29lZmZpY2llbnRzWzBdLmNvcHkoZSkuYWRkKGIpLm11bHRpcGx5U2NhbGFyKGgpO3RoaXMuc2guY29lZmZpY2llbnRzWzFdLmNvcHkoZSkuc3ViKGIpLm11bHRpcGx5U2NhbGFyKG4pfQpmdW5jdGlvbiBPaShiLGUpeyRjLmNhbGwodGhpcyx2b2lkIDAsZSk7Yj0obmV3IEIpLnNldChiKTt0aGlzLnNoLmNvZWZmaWNpZW50c1swXS5zZXQoYi5yLGIuZyxiLmIpLm11bHRpcGx5U2NhbGFyKDIqTWF0aC5zcXJ0KE1hdGguUEkpKX1mdW5jdGlvbiBJbCgpe3RoaXMudHlwZT0iU3RlcmVvQ2FtZXJhIjt0aGlzLmFzcGVjdD0xO3RoaXMuZXllU2VwPS4wNjQ7dGhpcy5jYW1lcmFMPW5ldyBjYzt0aGlzLmNhbWVyYUwubGF5ZXJzLmVuYWJsZSgxKTt0aGlzLmNhbWVyYUwubWF0cml4QXV0b1VwZGF0ZT0hMTt0aGlzLmNhbWVyYVI9bmV3IGNjO3RoaXMuY2FtZXJhUi5sYXllcnMuZW5hYmxlKDIpO3RoaXMuY2FtZXJhUi5tYXRyaXhBdXRvVXBkYXRlPSExfWZ1bmN0aW9uIHhnKGIsZSxoLG4pe1MuY2FsbCh0aGlzKTt0aGlzLnR5cGU9IkN1YmVDYW1lcmEiO3ZhciB1PW5ldyBjYyg5MCwxLGIsZSk7dS51cC5zZXQoMCwtMSwwKTt1Lmxvb2tBdChuZXcgZygxLDAsMCkpO3RoaXMuYWRkKHUpOwp2YXIgdz1uZXcgY2MoOTAsMSxiLGUpO3cudXAuc2V0KDAsLTEsMCk7dy5sb29rQXQobmV3IGcoLTEsMCwwKSk7dGhpcy5hZGQodyk7dmFyIHo9bmV3IGNjKDkwLDEsYixlKTt6LnVwLnNldCgwLDAsMSk7ei5sb29rQXQobmV3IGcoMCwxLDApKTt0aGlzLmFkZCh6KTt2YXIgRT1uZXcgY2MoOTAsMSxiLGUpO0UudXAuc2V0KDAsMCwtMSk7RS5sb29rQXQobmV3IGcoMCwtMSwwKSk7dGhpcy5hZGQoRSk7dmFyIEg9bmV3IGNjKDkwLDEsYixlKTtILnVwLnNldCgwLC0xLDApO0gubG9va0F0KG5ldyBnKDAsMCwxKSk7dGhpcy5hZGQoSCk7dmFyIEk9bmV3IGNjKDkwLDEsYixlKTtJLnVwLnNldCgwLC0xLDApO0kubG9va0F0KG5ldyBnKDAsMCwtMSkpO3RoaXMuYWRkKEkpO249bnx8e2Zvcm1hdDoxMDIyLG1hZ0ZpbHRlcjoxMDA2LG1pbkZpbHRlcjoxMDA2fTt0aGlzLnJlbmRlclRhcmdldD1uZXcgcihoLGgsbik7dGhpcy5yZW5kZXJUYXJnZXQudGV4dHVyZS5uYW1lPSJDdWJlQ2FtZXJhIjsKdGhpcy51cGRhdGU9ZnVuY3Rpb24oTyxRKXtudWxsPT09dGhpcy5wYXJlbnQmJnRoaXMudXBkYXRlTWF0cml4V29ybGQoKTt2YXIgUj1PLmdldFJlbmRlclRhcmdldCgpLFU9dGhpcy5yZW5kZXJUYXJnZXQsVz1VLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzO1UudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHM9ITE7Ty5zZXRSZW5kZXJUYXJnZXQoVSwwKTtPLnJlbmRlcihRLHUpO08uc2V0UmVuZGVyVGFyZ2V0KFUsMSk7Ty5yZW5kZXIoUSx3KTtPLnNldFJlbmRlclRhcmdldChVLDIpO08ucmVuZGVyKFEseik7Ty5zZXRSZW5kZXJUYXJnZXQoVSwzKTtPLnJlbmRlcihRLEUpO08uc2V0UmVuZGVyVGFyZ2V0KFUsNCk7Ty5yZW5kZXIoUSxIKTtVLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzPVc7Ty5zZXRSZW5kZXJUYXJnZXQoVSw1KTtPLnJlbmRlcihRLEkpO08uc2V0UmVuZGVyVGFyZ2V0KFIpfTt0aGlzLmNsZWFyPWZ1bmN0aW9uKE8sUSxSLFUpe2Zvcih2YXIgVz1PLmdldFJlbmRlclRhcmdldCgpLApaPXRoaXMucmVuZGVyVGFyZ2V0LGZhPTA7Nj5mYTtmYSsrKU8uc2V0UmVuZGVyVGFyZ2V0KFosZmEpLE8uY2xlYXIoUSxSLFUpO08uc2V0UmVuZGVyVGFyZ2V0KFcpfX1mdW5jdGlvbiBQaShiKXt0aGlzLmF1dG9TdGFydD12b2lkIDAhPT1iP2I6ITA7dGhpcy5lbGFwc2VkVGltZT10aGlzLm9sZFRpbWU9dGhpcy5zdGFydFRpbWU9MDt0aGlzLnJ1bm5pbmc9ITF9ZnVuY3Rpb24gUWkoKXtTLmNhbGwodGhpcyk7dGhpcy50eXBlPSJBdWRpb0xpc3RlbmVyIjt0aGlzLmNvbnRleHQ9UmkuZ2V0Q29udGV4dCgpO3RoaXMuZ2Fpbj10aGlzLmNvbnRleHQuY3JlYXRlR2FpbigpO3RoaXMuZ2Fpbi5jb25uZWN0KHRoaXMuY29udGV4dC5kZXN0aW5hdGlvbik7dGhpcy5maWx0ZXI9bnVsbDt0aGlzLnRpbWVEZWx0YT0wfWZ1bmN0aW9uIGpmKGIpe1MuY2FsbCh0aGlzKTt0aGlzLnR5cGU9IkF1ZGlvIjt0aGlzLmxpc3RlbmVyPWI7dGhpcy5jb250ZXh0PWIuY29udGV4dDt0aGlzLmdhaW49dGhpcy5jb250ZXh0LmNyZWF0ZUdhaW4oKTsKdGhpcy5nYWluLmNvbm5lY3QoYi5nZXRJbnB1dCgpKTt0aGlzLmF1dG9wbGF5PSExO3RoaXMuYnVmZmVyPW51bGw7dGhpcy5kZXR1bmU9MDt0aGlzLmxvb3A9ITE7dGhpcy5vZmZzZXQ9dGhpcy5zdGFydFRpbWU9MDt0aGlzLnBsYXliYWNrUmF0ZT0xO3RoaXMuaXNQbGF5aW5nPSExO3RoaXMuaGFzUGxheWJhY2tDb250cm9sPSEwO3RoaXMuc291cmNlVHlwZT0iZW1wdHkiO3RoaXMuZmlsdGVycz1bXX1mdW5jdGlvbiBTaShiKXtqZi5jYWxsKHRoaXMsYik7dGhpcy5wYW5uZXI9dGhpcy5jb250ZXh0LmNyZWF0ZVBhbm5lcigpO3RoaXMucGFubmVyLmNvbm5lY3QodGhpcy5nYWluKX1mdW5jdGlvbiBUaShiLGUpe3RoaXMuYW5hbHlzZXI9Yi5jb250ZXh0LmNyZWF0ZUFuYWx5c2VyKCk7dGhpcy5hbmFseXNlci5mZnRTaXplPXZvaWQgMCE9PWU/ZToyMDQ4O3RoaXMuZGF0YT1uZXcgVWludDhBcnJheSh0aGlzLmFuYWx5c2VyLmZyZXF1ZW5jeUJpbkNvdW50KTtiLmdldE91dHB1dCgpLmNvbm5lY3QodGhpcy5hbmFseXNlcil9CmZ1bmN0aW9uIFVpKGIsZSxoKXt0aGlzLmJpbmRpbmc9Yjt0aGlzLnZhbHVlU2l6ZT1oO2I9RmxvYXQ2NEFycmF5O3N3aXRjaChlKXtjYXNlICJxdWF0ZXJuaW9uIjplPXRoaXMuX3NsZXJwO2JyZWFrO2Nhc2UgInN0cmluZyI6Y2FzZSAiYm9vbCI6Yj1BcnJheTtlPXRoaXMuX3NlbGVjdDticmVhaztkZWZhdWx0OmU9dGhpcy5fbGVycH10aGlzLmJ1ZmZlcj1uZXcgYig0KmgpO3RoaXMuX21peEJ1ZmZlclJlZ2lvbj1lO3RoaXMucmVmZXJlbmNlQ291bnQ9dGhpcy51c2VDb3VudD10aGlzLmN1bXVsYXRpdmVXZWlnaHQ9MH1mdW5jdGlvbiBKbChiLGUsaCl7aD1ofHxzYy5wYXJzZVRyYWNrTmFtZShlKTt0aGlzLl90YXJnZXRHcm91cD1iO3RoaXMuX2JpbmRpbmdzPWIuc3Vic2NyaWJlXyhlLGgpfWZ1bmN0aW9uIHNjKGIsZSxoKXt0aGlzLnBhdGg9ZTt0aGlzLnBhcnNlZFBhdGg9aHx8c2MucGFyc2VUcmFja05hbWUoZSk7dGhpcy5ub2RlPXNjLmZpbmROb2RlKGIsdGhpcy5wYXJzZWRQYXRoLm5vZGVOYW1lKXx8CmI7dGhpcy5yb290Tm9kZT1ifWZ1bmN0aW9uIEtsKCl7dGhpcy51dWlkPW9iLmdlbmVyYXRlVVVJRCgpO3RoaXMuX29iamVjdHM9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTt0aGlzLm5DYWNoZWRPYmplY3RzXz0wO3ZhciBiPXt9O3RoaXMuX2luZGljZXNCeVVVSUQ9Yjtmb3IodmFyIGU9MCxoPWFyZ3VtZW50cy5sZW5ndGg7ZSE9PWg7KytlKWJbYXJndW1lbnRzW2VdLnV1aWRdPWU7dGhpcy5fcGF0aHM9W107dGhpcy5fcGFyc2VkUGF0aHM9W107dGhpcy5fYmluZGluZ3M9W107dGhpcy5fYmluZGluZ3NJbmRpY2VzQnlQYXRoPXt9O3ZhciBuPXRoaXM7dGhpcy5zdGF0cz17b2JqZWN0czp7Z2V0IHRvdGFsKCl7cmV0dXJuIG4uX29iamVjdHMubGVuZ3RofSxnZXQgaW5Vc2UoKXtyZXR1cm4gdGhpcy50b3RhbC1uLm5DYWNoZWRPYmplY3RzX319LGdldCBiaW5kaW5nc1Blck9iamVjdCgpe3JldHVybiBuLl9iaW5kaW5ncy5sZW5ndGh9fX1mdW5jdGlvbiBMbChiLAplLGgpe3RoaXMuX21peGVyPWI7dGhpcy5fY2xpcD1lO3RoaXMuX2xvY2FsUm9vdD1ofHxudWxsO2I9ZS50cmFja3M7ZT1iLmxlbmd0aDtoPUFycmF5KGUpO2Zvcih2YXIgbj17ZW5kaW5nU3RhcnQ6MjQwMCxlbmRpbmdFbmQ6MjQwMH0sdT0wO3UhPT1lOysrdSl7dmFyIHc9Ylt1XS5jcmVhdGVJbnRlcnBvbGFudChudWxsKTtoW3VdPXc7dy5zZXR0aW5ncz1ufXRoaXMuX2ludGVycG9sYW50U2V0dGluZ3M9bjt0aGlzLl9pbnRlcnBvbGFudHM9aDt0aGlzLl9wcm9wZXJ0eUJpbmRpbmdzPUFycmF5KGUpO3RoaXMuX3dlaWdodEludGVycG9sYW50PXRoaXMuX3RpbWVTY2FsZUludGVycG9sYW50PXRoaXMuX2J5Q2xpcENhY2hlSW5kZXg9dGhpcy5fY2FjaGVJbmRleD1udWxsO3RoaXMubG9vcD0yMjAxO3RoaXMuX2xvb3BDb3VudD0tMTt0aGlzLl9zdGFydFRpbWU9bnVsbDt0aGlzLnRpbWU9MDt0aGlzLl9lZmZlY3RpdmVXZWlnaHQ9dGhpcy53ZWlnaHQ9dGhpcy5fZWZmZWN0aXZlVGltZVNjYWxlPQp0aGlzLnRpbWVTY2FsZT0xO3RoaXMucmVwZXRpdGlvbnM9SW5maW5pdHk7dGhpcy5wYXVzZWQ9ITE7dGhpcy5lbmFibGVkPSEwO3RoaXMuY2xhbXBXaGVuRmluaXNoZWQ9ITE7dGhpcy56ZXJvU2xvcGVBdEVuZD10aGlzLnplcm9TbG9wZUF0U3RhcnQ9ITB9ZnVuY3Rpb24gVmkoYil7dGhpcy5fcm9vdD1iO3RoaXMuX2luaXRNZW1vcnlNYW5hZ2VyKCk7dGhpcy50aW1lPXRoaXMuX2FjY3VJbmRleD0wO3RoaXMudGltZVNjYWxlPTF9ZnVuY3Rpb24gRGgoYixlKXsic3RyaW5nIj09PXR5cGVvZiBiJiYoY29uc29sZS53YXJuKCJUSFJFRS5Vbmlmb3JtOiBUeXBlIHBhcmFtZXRlciBpcyBubyBsb25nZXIgbmVlZGVkLiIpLGI9ZSk7dGhpcy52YWx1ZT1ifWZ1bmN0aW9uIFdpKCl7eGEuY2FsbCh0aGlzKTt0aGlzLnR5cGU9Ikluc3RhbmNlZEJ1ZmZlckdlb21ldHJ5Ijt0aGlzLm1heEluc3RhbmNlZENvdW50PXZvaWQgMH1mdW5jdGlvbiBYaShiLGUsaCl7aGUuY2FsbCh0aGlzLGIsZSk7dGhpcy5tZXNoUGVyQXR0cmlidXRlPQpofHwxfWZ1bmN0aW9uIFlpKGIsZSxoLG4peyJudW1iZXIiPT09dHlwZW9mIGgmJihuPWgsaD0hMSxjb25zb2xlLmVycm9yKCJUSFJFRS5JbnN0YW5jZWRCdWZmZXJBdHRyaWJ1dGU6IFRoZSBjb25zdHJ1Y3RvciBub3cgZXhwZWN0cyBub3JtYWxpemVkIGFzIHRoZSB0aGlyZCBhcmd1bWVudC4iKSk7VC5jYWxsKHRoaXMsYixlLGgpO3RoaXMubWVzaFBlckF0dHJpYnV0ZT1ufHwxfWZ1bmN0aW9uIE1sKGIsZSxoLG4pe3RoaXMucmF5PW5ldyB4YihiLGUpO3RoaXMubmVhcj1ofHwwO3RoaXMuZmFyPW58fEluZmluaXR5O3RoaXMucGFyYW1zPXtNZXNoOnt9LExpbmU6e30sTE9EOnt9LFBvaW50czp7dGhyZXNob2xkOjF9LFNwcml0ZTp7fX07T2JqZWN0LmRlZmluZVByb3BlcnRpZXModGhpcy5wYXJhbXMse1BvaW50Q2xvdWQ6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuUmF5Y2FzdGVyOiBwYXJhbXMuUG9pbnRDbG91ZCBoYXMgYmVlbiByZW5hbWVkIHRvIHBhcmFtcy5Qb2ludHMuIik7CnJldHVybiB0aGlzLlBvaW50c319fSl9ZnVuY3Rpb24gTmwoYixlKXtyZXR1cm4gYi5kaXN0YW5jZS1lLmRpc3RhbmNlfWZ1bmN0aW9uIFppKGIsZSxoLG4pe2lmKCExIT09Yi52aXNpYmxlJiYoYi5yYXljYXN0KGUsaCksITA9PT1uKSl7Yj1iLmNoaWxkcmVuO249MDtmb3IodmFyIHU9Yi5sZW5ndGg7bjx1O24rKylaaShiW25dLGUsaCwhMCl9fWZ1bmN0aW9uIE9sKGIsZSxoKXt0aGlzLnJhZGl1cz12b2lkIDAhPT1iP2I6MTt0aGlzLnBoaT12b2lkIDAhPT1lP2U6MDt0aGlzLnRoZXRhPXZvaWQgMCE9PWg/aDowO3JldHVybiB0aGlzfWZ1bmN0aW9uIFBsKGIsZSxoKXt0aGlzLnJhZGl1cz12b2lkIDAhPT1iP2I6MTt0aGlzLnRoZXRhPXZvaWQgMCE9PWU/ZTowO3RoaXMueT12b2lkIDAhPT1oP2g6MDtyZXR1cm4gdGhpc31mdW5jdGlvbiAkaShiLGUpe3RoaXMubWluPXZvaWQgMCE9PWI/YjpuZXcgZChJbmZpbml0eSxJbmZpbml0eSk7dGhpcy5tYXg9dm9pZCAwIT09ZT9lOm5ldyBkKC1JbmZpbml0eSwKLUluZmluaXR5KX1mdW5jdGlvbiBhaihiLGUpe3RoaXMuc3RhcnQ9dm9pZCAwIT09Yj9iOm5ldyBnO3RoaXMuZW5kPXZvaWQgMCE9PWU/ZTpuZXcgZ31mdW5jdGlvbiB5ZyhiKXtTLmNhbGwodGhpcyk7dGhpcy5tYXRlcmlhbD1iO3RoaXMucmVuZGVyPWZ1bmN0aW9uKCl7fX1mdW5jdGlvbiB6ZyhiLGUsaCxuKXt0aGlzLm9iamVjdD1iO3RoaXMuc2l6ZT12b2lkIDAhPT1lP2U6MTtiPXZvaWQgMCE9PWg/aDoxNjcxMTY4MDtuPXZvaWQgMCE9PW4/bjoxO2U9MDsoaD10aGlzLm9iamVjdC5nZW9tZXRyeSkmJmguaXNHZW9tZXRyeT9lPTMqaC5mYWNlcy5sZW5ndGg6aCYmaC5pc0J1ZmZlckdlb21ldHJ5JiYoZT1oLmF0dHJpYnV0ZXMubm9ybWFsLmNvdW50KTtoPW5ldyB4YTtlPW5ldyBiYSg2KmUsMyk7aC5hZGRBdHRyaWJ1dGUoInBvc2l0aW9uIixlKTtQYi5jYWxsKHRoaXMsaCxuZXcgTGIoe2NvbG9yOmIsbGluZXdpZHRoOm59KSk7dGhpcy5tYXRyaXhBdXRvVXBkYXRlPSExO3RoaXMudXBkYXRlKCl9CmZ1bmN0aW9uIGtmKGIsZSl7Uy5jYWxsKHRoaXMpO3RoaXMubGlnaHQ9Yjt0aGlzLmxpZ2h0LnVwZGF0ZU1hdHJpeFdvcmxkKCk7dGhpcy5tYXRyaXg9Yi5tYXRyaXhXb3JsZDt0aGlzLm1hdHJpeEF1dG9VcGRhdGU9ITE7dGhpcy5jb2xvcj1lO2I9bmV3IHhhO2U9WzAsMCwwLDAsMCwxLDAsMCwwLDEsMCwxLDAsMCwwLC0xLDAsMSwwLDAsMCwwLDEsMSwwLDAsMCwwLC0xLDFdO2Zvcih2YXIgaD0wLG49MTszMj5oO2grKyxuKyspe3ZhciB1PWgvMzIqTWF0aC5QSSoyLHc9bi8zMipNYXRoLlBJKjI7ZS5wdXNoKE1hdGguY29zKHUpLE1hdGguc2luKHUpLDEsTWF0aC5jb3ModyksTWF0aC5zaW4odyksMSl9Yi5hZGRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgYmEoZSwzKSk7ZT1uZXcgTGIoe2ZvZzohMX0pO3RoaXMuY29uZT1uZXcgUGIoYixlKTt0aGlzLmFkZCh0aGlzLmNvbmUpO3RoaXMudXBkYXRlKCl9ZnVuY3Rpb24gUWwoYil7dmFyIGU9W107YiYmYi5pc0JvbmUmJmUucHVzaChiKTsKZm9yKHZhciBoPTA7aDxiLmNoaWxkcmVuLmxlbmd0aDtoKyspZS5wdXNoLmFwcGx5KGUsUWwoYi5jaGlsZHJlbltoXSkpO3JldHVybiBlfWZ1bmN0aW9uIGxmKGIpe2Zvcih2YXIgZT1RbChiKSxoPW5ldyB4YSxuPVtdLHU9W10sdz1uZXcgQigwLDAsMSksej1uZXcgQigwLDEsMCksRT0wO0U8ZS5sZW5ndGg7RSsrKXt2YXIgSD1lW0VdO0gucGFyZW50JiZILnBhcmVudC5pc0JvbmUmJihuLnB1c2goMCwwLDApLG4ucHVzaCgwLDAsMCksdS5wdXNoKHcucix3Lmcsdy5iKSx1LnB1c2goei5yLHouZyx6LmIpKX1oLmFkZEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBiYShuLDMpKTtoLmFkZEF0dHJpYnV0ZSgiY29sb3IiLG5ldyBiYSh1LDMpKTtuPW5ldyBMYih7dmVydGV4Q29sb3JzOjIsZGVwdGhUZXN0OiExLGRlcHRoV3JpdGU6ITEsdHJhbnNwYXJlbnQ6ITB9KTtQYi5jYWxsKHRoaXMsaCxuKTt0aGlzLnJvb3Q9Yjt0aGlzLmJvbmVzPWU7dGhpcy5tYXRyaXg9Yi5tYXRyaXhXb3JsZDt0aGlzLm1hdHJpeEF1dG9VcGRhdGU9CiExfWZ1bmN0aW9uIG1mKGIsZSxoKXt0aGlzLmxpZ2h0PWI7dGhpcy5saWdodC51cGRhdGVNYXRyaXhXb3JsZCgpO3RoaXMuY29sb3I9aDtiPW5ldyBXZChlLDQsMik7ZT1uZXcgeWIoe3dpcmVmcmFtZTohMCxmb2c6ITF9KTt0Yi5jYWxsKHRoaXMsYixlKTt0aGlzLm1hdHJpeD10aGlzLmxpZ2h0Lm1hdHJpeFdvcmxkO3RoaXMubWF0cml4QXV0b1VwZGF0ZT0hMTt0aGlzLnVwZGF0ZSgpfWZ1bmN0aW9uIG5mKGIsZSl7dGhpcy50eXBlPSJSZWN0QXJlYUxpZ2h0SGVscGVyIjt0aGlzLmxpZ2h0PWI7dGhpcy5jb2xvcj1lO2I9bmV3IHhhO2IuYWRkQXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IGJhKFsxLDEsMCwtMSwxLDAsLTEsLTEsMCwxLC0xLDAsMSwxLDBdLDMpKTtiLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpO2U9bmV3IExiKHtmb2c6ITF9KTtsYy5jYWxsKHRoaXMsYixlKTtiPW5ldyB4YTtiLmFkZEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBiYShbMSwxLDAsLTEsMSwwLC0xLC0xLAowLDEsMSwwLC0xLC0xLDAsMSwtMSwwXSwzKSk7Yi5jb21wdXRlQm91bmRpbmdTcGhlcmUoKTt0aGlzLmFkZChuZXcgdGIoYixuZXcgeWIoe3NpZGU6MSxmb2c6ITF9KSkpO3RoaXMudXBkYXRlKCl9ZnVuY3Rpb24gb2YoYixlLGgpe1MuY2FsbCh0aGlzKTt0aGlzLmxpZ2h0PWI7dGhpcy5saWdodC51cGRhdGVNYXRyaXhXb3JsZCgpO3RoaXMubWF0cml4PWIubWF0cml4V29ybGQ7dGhpcy5tYXRyaXhBdXRvVXBkYXRlPSExO3RoaXMuY29sb3I9aDtiPW5ldyBpZShlKTtiLnJvdGF0ZVkoLjUqTWF0aC5QSSk7dGhpcy5tYXRlcmlhbD1uZXcgeWIoe3dpcmVmcmFtZTohMCxmb2c6ITF9KTt2b2lkIDA9PT10aGlzLmNvbG9yJiYodGhpcy5tYXRlcmlhbC52ZXJ0ZXhDb2xvcnM9Mik7ZT1iLmdldEF0dHJpYnV0ZSgicG9zaXRpb24iKTtiLmFkZEF0dHJpYnV0ZSgiY29sb3IiLG5ldyBUKG5ldyBGbG9hdDMyQXJyYXkoMyplLmNvdW50KSwzKSk7dGhpcy5hZGQobmV3IHRiKGIsdGhpcy5tYXRlcmlhbCkpOwp0aGlzLnVwZGF0ZSgpfWZ1bmN0aW9uIHBmKGIsZSl7dGhpcy5saWdodFByb2JlPWI7dGhpcy5zaXplPWU7Yj1uZXcgZGIoe2RlZmluZXM6e0dBTU1BX09VVFBVVDoiIn0sdW5pZm9ybXM6e3NoOnt2YWx1ZTp0aGlzLmxpZ2h0UHJvYmUuc2guY29lZmZpY2llbnRzfSxpbnRlbnNpdHk6e3ZhbHVlOnRoaXMubGlnaHRQcm9iZS5pbnRlbnNpdHl9fSx2ZXJ0ZXhTaGFkZXI6InZhcnlpbmcgdmVjMyB2Tm9ybWFsO1xudm9pZCBtYWluKCkge1xuXHR2Tm9ybWFsIFx4M2Qgbm9ybWFsaXplKCBub3JtYWxNYXRyaXggKiBub3JtYWwgKTtcblx0Z2xfUG9zaXRpb24gXHgzZCBwcm9qZWN0aW9uTWF0cml4ICogbW9kZWxWaWV3TWF0cml4ICogdmVjNCggcG9zaXRpb24sIDEuMCApO1xufSIsZnJhZ21lbnRTaGFkZXI6IiNkZWZpbmUgUkVDSVBST0NBTF9QSSAwLjMxODMwOTg4NlxudmVjMyBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCBpbiB2ZWMzIG5vcm1hbCwgaW4gbWF0NCBtYXRyaXggKSB7XG5cdC8vIG1hdHJpeCBpcyBhc3N1bWVkIHRvIGJlIG9ydGhvZ29uYWxcblx0cmV0dXJuIG5vcm1hbGl6ZSggKCB2ZWM0KCBub3JtYWwsIDAuMCApICogbWF0cml4ICkueHl6ICk7XG59XG52ZWMzIGxpbmVhclRvT3V0cHV0KCBpbiB2ZWMzIGEgKSB7XG5cdCNpZmRlZiBHQU1NQV9PVVRQVVRcblx0XHRyZXR1cm4gcG93KCBhLCB2ZWMzKCAxLjAgLyBmbG9hdCggR0FNTUFfRkFDVE9SICkgKSApO1xuXHQjZWxzZVxuXHRcdHJldHVybiBhO1xuXHQjZW5kaWZcbn1cbi8vIHNvdXJjZTogaHR0cHM6Ly9ncmFwaGljcy5zdGFuZm9yZC5lZHUvcGFwZXJzL2Vudm1hcC9lbnZtYXAucGRmXG52ZWMzIHNoR2V0SXJyYWRpYW5jZUF0KCBpbiB2ZWMzIG5vcm1hbCwgaW4gdmVjMyBzaENvZWZmaWNpZW50c1sgOSBdICkge1xuXHQvLyBub3JtYWwgaXMgYXNzdW1lZCB0byBoYXZlIHVuaXQgbGVuZ3RoXG5cdGZsb2F0IHggXHgzZCBub3JtYWwueCwgeSBceDNkIG5vcm1hbC55LCB6IFx4M2Qgbm9ybWFsLno7XG5cdC8vIGJhbmQgMFxuXHR2ZWMzIHJlc3VsdCBceDNkIHNoQ29lZmZpY2llbnRzWyAwIF0gKiAwLjg4NjIyNztcblx0Ly8gYmFuZCAxXG5cdHJlc3VsdCArXHgzZCBzaENvZWZmaWNpZW50c1sgMSBdICogMi4wICogMC41MTE2NjQgKiB5O1xuXHRyZXN1bHQgK1x4M2Qgc2hDb2VmZmljaWVudHNbIDIgXSAqIDIuMCAqIDAuNTExNjY0ICogejtcblx0cmVzdWx0ICtceDNkIHNoQ29lZmZpY2llbnRzWyAzIF0gKiAyLjAgKiAwLjUxMTY2NCAqIHg7XG5cdC8vIGJhbmQgMlxuXHRyZXN1bHQgK1x4M2Qgc2hDb2VmZmljaWVudHNbIDQgXSAqIDIuMCAqIDAuNDI5MDQzICogeCAqIHk7XG5cdHJlc3VsdCArXHgzZCBzaENvZWZmaWNpZW50c1sgNSBdICogMi4wICogMC40MjkwNDMgKiB5ICogejtcblx0cmVzdWx0ICtceDNkIHNoQ29lZmZpY2llbnRzWyA2IF0gKiAoIDAuNzQzMTI1ICogeiAqIHogLSAwLjI0NzcwOCApO1xuXHRyZXN1bHQgK1x4M2Qgc2hDb2VmZmljaWVudHNbIDcgXSAqIDIuMCAqIDAuNDI5MDQzICogeCAqIHo7XG5cdHJlc3VsdCArXHgzZCBzaENvZWZmaWNpZW50c1sgOCBdICogMC40MjkwNDMgKiAoIHggKiB4IC0geSAqIHkgKTtcblx0cmV0dXJuIHJlc3VsdDtcbn1cbnVuaWZvcm0gdmVjMyBzaFsgOSBdOyAvLyBzaCBjb2VmZmljaWVudHNcbnVuaWZvcm0gZmxvYXQgaW50ZW5zaXR5OyAvLyBsaWdodCBwcm9iZSBpbnRlbnNpdHlcbnZhcnlpbmcgdmVjMyB2Tm9ybWFsO1xudm9pZCBtYWluKCkge1xuXHR2ZWMzIG5vcm1hbCBceDNkIG5vcm1hbGl6ZSggdk5vcm1hbCApO1xuXHR2ZWMzIHdvcmxkTm9ybWFsIFx4M2QgaW52ZXJzZVRyYW5zZm9ybURpcmVjdGlvbiggbm9ybWFsLCB2aWV3TWF0cml4ICk7XG5cdHZlYzMgaXJyYWRpYW5jZSBceDNkIHNoR2V0SXJyYWRpYW5jZUF0KCB3b3JsZE5vcm1hbCwgc2ggKTtcblx0dmVjMyBvdXRnb2luZ0xpZ2h0IFx4M2QgUkVDSVBST0NBTF9QSSAqIGlycmFkaWFuY2UgKiBpbnRlbnNpdHk7XG5cdG91dGdvaW5nTGlnaHQgXHgzZCBsaW5lYXJUb091dHB1dCggb3V0Z29pbmdMaWdodCApO1xuXHRnbF9GcmFnQ29sb3IgXHgzZCB2ZWM0KCBvdXRnb2luZ0xpZ2h0LCAxLjAgKTtcbn0ifSk7CmU9bmV3IFdkKDEsMzIsMTYpO3RiLmNhbGwodGhpcyxlLGIpO3RoaXMub25CZWZvcmVSZW5kZXIoKX1mdW5jdGlvbiBFaChiLGUsaCxuKXtiPWJ8fDEwO2U9ZXx8MTA7aD1uZXcgQih2b2lkIDAhPT1oP2g6NDQ3MzkyNCk7bj1uZXcgQih2b2lkIDAhPT1uP246ODk0Nzg0OCk7dmFyIHU9ZS8yLHc9Yi9lLHo9Yi8yO2I9W107Zm9yKHZhciBFPVtdLEg9MCxJPTAsTz0tejtIPD1lO0grKyxPKz13KXtiLnB1c2goLXosMCxPLHosMCxPKTtiLnB1c2goTywwLC16LE8sMCx6KTt2YXIgUT1IPT09dT9oOm47US50b0FycmF5KEUsSSk7SSs9MztRLnRvQXJyYXkoRSxJKTtJKz0zO1EudG9BcnJheShFLEkpO0krPTM7US50b0FycmF5KEUsSSk7SSs9M31lPW5ldyB4YTtlLmFkZEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBiYShiLDMpKTtlLmFkZEF0dHJpYnV0ZSgiY29sb3IiLG5ldyBiYShFLDMpKTtoPW5ldyBMYih7dmVydGV4Q29sb3JzOjJ9KTtQYi5jYWxsKHRoaXMsZSxoKX1mdW5jdGlvbiBGaChiLAplLGgsbix1LHcpe2I9Ynx8MTA7ZT1lfHwxNjtoPWh8fDg7bj1ufHw2NDt1PW5ldyBCKHZvaWQgMCE9PXU/dTo0NDczOTI0KTt3PW5ldyBCKHZvaWQgMCE9PXc/dzo4OTQ3ODQ4KTt2YXIgej1bXSxFPVtdLEg7Zm9yKEg9MDtIPD1lO0grKyl7dmFyIEk9SC9lKjIqTWF0aC5QSTt2YXIgTz1NYXRoLnNpbihJKSpiO0k9TWF0aC5jb3MoSSkqYjt6LnB1c2goMCwwLDApO3oucHVzaChPLDAsSSk7dmFyIFE9SCYxP3U6dztFLnB1c2goUS5yLFEuZyxRLmIpO0UucHVzaChRLnIsUS5nLFEuYil9Zm9yKEg9MDtIPD1oO0grKyl7UT1IJjE/dTp3O3ZhciBSPWItYi9oKkg7Zm9yKGU9MDtlPG47ZSsrKUk9ZS9uKjIqTWF0aC5QSSxPPU1hdGguc2luKEkpKlIsST1NYXRoLmNvcyhJKSpSLHoucHVzaChPLDAsSSksRS5wdXNoKFEucixRLmcsUS5iKSxJPShlKzEpL24qMipNYXRoLlBJLE89TWF0aC5zaW4oSSkqUixJPU1hdGguY29zKEkpKlIsei5wdXNoKE8sMCxJKSxFLnB1c2goUS5yLFEuZyxRLmIpfWI9Cm5ldyB4YTtiLmFkZEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBiYSh6LDMpKTtiLmFkZEF0dHJpYnV0ZSgiY29sb3IiLG5ldyBiYShFLDMpKTt6PW5ldyBMYih7dmVydGV4Q29sb3JzOjJ9KTtQYi5jYWxsKHRoaXMsYix6KX1mdW5jdGlvbiBxZihiLGUsaCxuKXt0aGlzLmF1ZGlvPWI7dGhpcy5yYW5nZT1lfHwxO3RoaXMuZGl2aXNpb25zSW5uZXJBbmdsZT1ofHwxNjt0aGlzLmRpdmlzaW9uc091dGVyQW5nbGU9bnx8MjtiPW5ldyB4YTtiLmFkZEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBUKG5ldyBGbG9hdDMyQXJyYXkoMyooMyoodGhpcy5kaXZpc2lvbnNJbm5lckFuZ2xlKzIqdGhpcy5kaXZpc2lvbnNPdXRlckFuZ2xlKSszKSksMykpO2U9bmV3IExiKHtjb2xvcjo2NTI4MH0pO2g9bmV3IExiKHtjb2xvcjoxNjc3Njk2MH0pO2xjLmNhbGwodGhpcyxiLFtoLGVdKTt0aGlzLnVwZGF0ZSgpfWZ1bmN0aW9uIEFnKGIsZSxoLG4pe3RoaXMub2JqZWN0PWI7dGhpcy5zaXplPXZvaWQgMCE9PQplP2U6MTtiPXZvaWQgMCE9PWg/aDoxNjc3Njk2MDtuPXZvaWQgMCE9PW4/bjoxO2U9MDsoaD10aGlzLm9iamVjdC5nZW9tZXRyeSkmJmguaXNHZW9tZXRyeT9lPWguZmFjZXMubGVuZ3RoOmNvbnNvbGUud2FybigiVEhSRUUuRmFjZU5vcm1hbHNIZWxwZXI6IG9ubHkgVEhSRUUuR2VvbWV0cnkgaXMgc3VwcG9ydGVkLiBVc2UgVEhSRUUuVmVydGV4Tm9ybWFsc0hlbHBlciwgaW5zdGVhZC4iKTtoPW5ldyB4YTtlPW5ldyBiYSg2KmUsMyk7aC5hZGRBdHRyaWJ1dGUoInBvc2l0aW9uIixlKTtQYi5jYWxsKHRoaXMsaCxuZXcgTGIoe2NvbG9yOmIsbGluZXdpZHRoOm59KSk7dGhpcy5tYXRyaXhBdXRvVXBkYXRlPSExO3RoaXMudXBkYXRlKCl9ZnVuY3Rpb24gcmYoYixlLGgpe1MuY2FsbCh0aGlzKTt0aGlzLmxpZ2h0PWI7dGhpcy5saWdodC51cGRhdGVNYXRyaXhXb3JsZCgpO3RoaXMubWF0cml4PWIubWF0cml4V29ybGQ7dGhpcy5tYXRyaXhBdXRvVXBkYXRlPSExO3RoaXMuY29sb3I9aDsKdm9pZCAwPT09ZSYmKGU9MSk7Yj1uZXcgeGE7Yi5hZGRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgYmEoWy1lLGUsMCxlLGUsMCxlLC1lLDAsLWUsLWUsMCwtZSxlLDBdLDMpKTtlPW5ldyBMYih7Zm9nOiExfSk7dGhpcy5saWdodFBsYW5lPW5ldyBsYyhiLGUpO3RoaXMuYWRkKHRoaXMubGlnaHRQbGFuZSk7Yj1uZXcgeGE7Yi5hZGRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgYmEoWzAsMCwwLDAsMCwxXSwzKSk7dGhpcy50YXJnZXRMaW5lPW5ldyBsYyhiLGUpO3RoaXMuYWRkKHRoaXMudGFyZ2V0TGluZSk7dGhpcy51cGRhdGUoKX1mdW5jdGlvbiBCZyhiKXtmdW5jdGlvbiBlKFUsVyxaKXtoKFUsWik7aChXLFopfWZ1bmN0aW9uIGgoVSxXKXt3LnB1c2goMCwwLDApO3oucHVzaChXLnIsVy5nLFcuYik7dm9pZCAwPT09RVtVXSYmKEVbVV09W10pO0VbVV0ucHVzaCh3Lmxlbmd0aC8zLTEpfXZhciBuPW5ldyB4YSx1PW5ldyBMYih7Y29sb3I6MTY3NzcyMTUsdmVydGV4Q29sb3JzOjF9KSwKdz1bXSx6PVtdLEU9e30sSD1uZXcgQigxNjc1NTIwMCksST1uZXcgQigxNjcxMTY4MCksTz1uZXcgQig0Mzc3NSksUT1uZXcgQigxNjc3NzIxNSksUj1uZXcgQigzMzU1NDQzKTtlKCJuMSIsIm4yIixIKTtlKCJuMiIsIm40IixIKTtlKCJuNCIsIm4zIixIKTtlKCJuMyIsIm4xIixIKTtlKCJmMSIsImYyIixIKTtlKCJmMiIsImY0IixIKTtlKCJmNCIsImYzIixIKTtlKCJmMyIsImYxIixIKTtlKCJuMSIsImYxIixIKTtlKCJuMiIsImYyIixIKTtlKCJuMyIsImYzIixIKTtlKCJuNCIsImY0IixIKTtlKCJwIiwibjEiLEkpO2UoInAiLCJuMiIsSSk7ZSgicCIsIm4zIixJKTtlKCJwIiwibjQiLEkpO2UoInUxIiwidTIiLE8pO2UoInUyIiwidTMiLE8pO2UoInUzIiwidTEiLE8pO2UoImMiLCJ0IixRKTtlKCJwIiwiYyIsUik7ZSgiY24xIiwiY24yIixSKTtlKCJjbjMiLCJjbjQiLFIpO2UoImNmMSIsImNmMiIsUik7ZSgiY2YzIiwiY2Y0IixSKTtuLmFkZEF0dHJpYnV0ZSgicG9zaXRpb24iLApuZXcgYmEodywzKSk7bi5hZGRBdHRyaWJ1dGUoImNvbG9yIixuZXcgYmEoeiwzKSk7UGIuY2FsbCh0aGlzLG4sdSk7dGhpcy5jYW1lcmE9Yjt0aGlzLmNhbWVyYS51cGRhdGVQcm9qZWN0aW9uTWF0cml4JiZ0aGlzLmNhbWVyYS51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCk7dGhpcy5tYXRyaXg9Yi5tYXRyaXhXb3JsZDt0aGlzLm1hdHJpeEF1dG9VcGRhdGU9ITE7dGhpcy5wb2ludE1hcD1FO3RoaXMudXBkYXRlKCl9ZnVuY3Rpb24gQmQoYixlKXt0aGlzLm9iamVjdD1iO3ZvaWQgMD09PWUmJihlPTE2Nzc2OTYwKTtiPW5ldyBVaW50MTZBcnJheShbMCwxLDEsMiwyLDMsMywwLDQsNSw1LDYsNiw3LDcsNCwwLDQsMSw1LDIsNiwzLDddKTt2YXIgaD1uZXcgRmxvYXQzMkFycmF5KDI0KSxuPW5ldyB4YTtuLnNldEluZGV4KG5ldyBUKGIsMSkpO24uYWRkQXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IFQoaCwzKSk7UGIuY2FsbCh0aGlzLG4sbmV3IExiKHtjb2xvcjplfSkpO3RoaXMubWF0cml4QXV0b1VwZGF0ZT0KITE7dGhpcy51cGRhdGUoKX1mdW5jdGlvbiBDZyhiLGUpe3RoaXMudHlwZT0iQm94M0hlbHBlciI7dGhpcy5ib3g9YjtiPXZvaWQgMCE9PWU/ZToxNjc3Njk2MDtlPW5ldyBVaW50MTZBcnJheShbMCwxLDEsMiwyLDMsMywwLDQsNSw1LDYsNiw3LDcsNCwwLDQsMSw1LDIsNiwzLDddKTt2YXIgaD1uZXcgeGE7aC5zZXRJbmRleChuZXcgVChlLDEpKTtoLmFkZEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBiYShbMSwxLDEsLTEsMSwxLC0xLC0xLDEsMSwtMSwxLDEsMSwtMSwtMSwxLC0xLC0xLC0xLC0xLDEsLTEsLTFdLDMpKTtQYi5jYWxsKHRoaXMsaCxuZXcgTGIoe2NvbG9yOmJ9KSk7dGhpcy5nZW9tZXRyeS5jb21wdXRlQm91bmRpbmdTcGhlcmUoKX1mdW5jdGlvbiBEZyhiLGUsaCl7dGhpcy50eXBlPSJQbGFuZUhlbHBlciI7dGhpcy5wbGFuZT1iO3RoaXMuc2l6ZT12b2lkIDA9PT1lPzE6ZTtiPXZvaWQgMCE9PWg/aDoxNjc3Njk2MDtlPW5ldyB4YTtlLmFkZEF0dHJpYnV0ZSgicG9zaXRpb24iLApuZXcgYmEoWzEsLTEsMSwtMSwxLDEsLTEsLTEsMSwxLDEsMSwtMSwxLDEsLTEsLTEsMSwxLC0xLDEsMSwxLDEsMCwwLDEsMCwwLDBdLDMpKTtlLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpO2xjLmNhbGwodGhpcyxlLG5ldyBMYih7Y29sb3I6Yn0pKTtlPW5ldyB4YTtlLmFkZEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBiYShbMSwxLDEsLTEsMSwxLC0xLC0xLDEsMSwxLDEsLTEsLTEsMSwxLC0xLDFdLDMpKTtlLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpO3RoaXMuYWRkKG5ldyB0YihlLG5ldyB5Yih7Y29sb3I6YixvcGFjaXR5Oi4yLHRyYW5zcGFyZW50OiEwLGRlcHRoV3JpdGU6ITF9KSkpfWZ1bmN0aW9uIENkKGIsZSxoLG4sdSx3KXtTLmNhbGwodGhpcyk7dm9pZCAwPT09YiYmKGI9bmV3IGcoMCwwLDEpKTt2b2lkIDA9PT1lJiYoZT1uZXcgZygwLDAsMCkpO3ZvaWQgMD09PWgmJihoPTEpO3ZvaWQgMD09PW4mJihuPTE2Nzc2OTYwKTt2b2lkIDA9PT11JiYodT0uMipoKTt2b2lkIDA9PT0KdyYmKHc9LjIqdSk7dm9pZCAwPT09R2gmJihHaD1uZXcgeGEsR2guYWRkQXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IGJhKFswLDAsMCwwLDEsMF0sMykpLGJqPW5ldyB6ZCgwLC41LDEsNSwxKSxiai50cmFuc2xhdGUoMCwtLjUsMCkpO3RoaXMucG9zaXRpb24uY29weShlKTt0aGlzLmxpbmU9bmV3IGxjKEdoLG5ldyBMYih7Y29sb3I6bn0pKTt0aGlzLmxpbmUubWF0cml4QXV0b1VwZGF0ZT0hMTt0aGlzLmFkZCh0aGlzLmxpbmUpO3RoaXMuY29uZT1uZXcgdGIoYmosbmV3IHliKHtjb2xvcjpufSkpO3RoaXMuY29uZS5tYXRyaXhBdXRvVXBkYXRlPSExO3RoaXMuYWRkKHRoaXMuY29uZSk7dGhpcy5zZXREaXJlY3Rpb24oYik7dGhpcy5zZXRMZW5ndGgoaCx1LHcpfWZ1bmN0aW9uIEVnKGIpe2I9Ynx8MTt2YXIgZT1bMCwwLDAsYiwwLDAsMCwwLDAsMCxiLDAsMCwwLDAsMCwwLGJdO2I9bmV3IHhhO2IuYWRkQXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IGJhKGUsMykpO2IuYWRkQXR0cmlidXRlKCJjb2xvciIsCm5ldyBiYShbMSwwLDAsMSwuNiwwLDAsMSwwLC42LDEsMCwwLDAsMSwwLC42LDFdLDMpKTtlPW5ldyBMYih7dmVydGV4Q29sb3JzOjJ9KTtQYi5jYWxsKHRoaXMsYixlKX1mdW5jdGlvbiBSbChiKXtjb25zb2xlLndhcm4oIlRIUkVFLkNsb3NlZFNwbGluZUN1cnZlMyBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgVEhSRUUuQ2F0bXVsbFJvbUN1cnZlMyBpbnN0ZWFkLiIpO3JjLmNhbGwodGhpcyxiKTt0aGlzLnR5cGU9ImNhdG11bGxyb20iO3RoaXMuY2xvc2VkPSEwfWZ1bmN0aW9uIFNsKGIpe2NvbnNvbGUud2FybigiVEhSRUUuU3BsaW5lQ3VydmUzIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSBUSFJFRS5DYXRtdWxsUm9tQ3VydmUzIGluc3RlYWQuIik7cmMuY2FsbCh0aGlzLGIpO3RoaXMudHlwZT0iY2F0bXVsbHJvbSJ9ZnVuY3Rpb24gY2ooYil7Y29uc29sZS53YXJuKCJUSFJFRS5TcGxpbmUgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFRIUkVFLkNhdG11bGxSb21DdXJ2ZTMgaW5zdGVhZC4iKTsKcmMuY2FsbCh0aGlzLGIpO3RoaXMudHlwZT0iY2F0bXVsbHJvbSJ9dm9pZCAwPT09TnVtYmVyLkVQU0lMT04mJihOdW1iZXIuRVBTSUxPTj1NYXRoLnBvdygyLC01MikpO3ZvaWQgMD09PU51bWJlci5pc0ludGVnZXImJihOdW1iZXIuaXNJbnRlZ2VyPWZ1bmN0aW9uKGIpe3JldHVybiJudW1iZXIiPT09dHlwZW9mIGImJmlzRmluaXRlKGIpJiZNYXRoLmZsb29yKGIpPT09Yn0pO3ZvaWQgMD09PU1hdGguc2lnbiYmKE1hdGguc2lnbj1mdW5jdGlvbihiKXtyZXR1cm4gMD5iPy0xOjA8Yj8xOitifSk7ITE9PT0ibmFtZSJpbiBGdW5jdGlvbi5wcm90b3R5cGUmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShGdW5jdGlvbi5wcm90b3R5cGUsIm5hbWUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b1N0cmluZygpLm1hdGNoKC9eXHMqZnVuY3Rpb25ccyooW15cKFxzXSopLylbMV19fSk7dm9pZCAwPT09T2JqZWN0LmFzc2lnbiYmZnVuY3Rpb24oKXtPYmplY3QuYXNzaWduPWZ1bmN0aW9uKGIpe2lmKHZvaWQgMD09PQpifHxudWxsPT09Yil0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY29udmVydCB1bmRlZmluZWQgb3IgbnVsbCB0byBvYmplY3QiKTtmb3IodmFyIGU9T2JqZWN0KGIpLGg9MTtoPGFyZ3VtZW50cy5sZW5ndGg7aCsrKXt2YXIgbj1hcmd1bWVudHNbaF07aWYodm9pZCAwIT09biYmbnVsbCE9PW4pZm9yKHZhciB1IGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4sdSkmJihlW3VdPW5bdV0pfXJldHVybiBlfX0oKTtPYmplY3QuYXNzaWduKGMucHJvdG90eXBlLHthZGRFdmVudExpc3RlbmVyOmZ1bmN0aW9uKGIsZSl7dm9pZCAwPT09dGhpcy5fbGlzdGVuZXJzJiYodGhpcy5fbGlzdGVuZXJzPXt9KTt2YXIgaD10aGlzLl9saXN0ZW5lcnM7dm9pZCAwPT09aFtiXSYmKGhbYl09W10pOy0xPT09aFtiXS5pbmRleE9mKGUpJiZoW2JdLnB1c2goZSl9LGhhc0V2ZW50TGlzdGVuZXI6ZnVuY3Rpb24oYixlKXtpZih2b2lkIDA9PT10aGlzLl9saXN0ZW5lcnMpcmV0dXJuITE7CnZhciBoPXRoaXMuX2xpc3RlbmVycztyZXR1cm4gdm9pZCAwIT09aFtiXSYmLTEhPT1oW2JdLmluZGV4T2YoZSl9LHJlbW92ZUV2ZW50TGlzdGVuZXI6ZnVuY3Rpb24oYixlKXt2b2lkIDAhPT10aGlzLl9saXN0ZW5lcnMmJihiPXRoaXMuX2xpc3RlbmVyc1tiXSx2b2lkIDAhPT1iJiYoZT1iLmluZGV4T2YoZSksLTEhPT1lJiZiLnNwbGljZShlLDEpKSl9LGRpc3BhdGNoRXZlbnQ6ZnVuY3Rpb24oYil7aWYodm9pZCAwIT09dGhpcy5fbGlzdGVuZXJzKXt2YXIgZT10aGlzLl9saXN0ZW5lcnNbYi50eXBlXTtpZih2b2lkIDAhPT1lKXtiLnRhcmdldD10aGlzO2U9ZS5zbGljZSgwKTtmb3IodmFyIGg9MCxuPWUubGVuZ3RoO2g8bjtoKyspZVtoXS5jYWxsKHRoaXMsYil9fX19KTt2YXIgb2I9e0RFRzJSQUQ6TWF0aC5QSS8xODAsUkFEMkRFRzoxODAvTWF0aC5QSSxnZW5lcmF0ZVVVSUQ6ZnVuY3Rpb24oKXtmb3IodmFyIGI9W10sZT0wOzI1Nj5lO2UrKyliW2VdPSgxNj5lPyIwIjoiIikrZS50b1N0cmluZygxNik7CnJldHVybiBmdW5jdGlvbigpe3ZhciBoPTQyOTQ5NjcyOTUqTWF0aC5yYW5kb20oKXwwLG49NDI5NDk2NzI5NSpNYXRoLnJhbmRvbSgpfDAsdT00Mjk0OTY3Mjk1Kk1hdGgucmFuZG9tKCl8MCx3PTQyOTQ5NjcyOTUqTWF0aC5yYW5kb20oKXwwO3JldHVybihiW2gmMjU1XStiW2g+PjgmMjU1XStiW2g+PjE2JjI1NV0rYltoPj4yNCYyNTVdKyItIitiW24mMjU1XStiW24+PjgmMjU1XSsiLSIrYltuPj4xNiYxNXw2NF0rYltuPj4yNCYyNTVdKyItIitiW3UmNjN8MTI4XStiW3U+PjgmMjU1XSsiLSIrYlt1Pj4xNiYyNTVdK2JbdT4+MjQmMjU1XStiW3cmMjU1XStiW3c+PjgmMjU1XStiW3c+PjE2JjI1NV0rYlt3Pj4yNCYyNTVdKS50b1VwcGVyQ2FzZSgpfX0oKSxjbGFtcDpmdW5jdGlvbihiLGUsaCl7cmV0dXJuIE1hdGgubWF4KGUsTWF0aC5taW4oaCxiKSl9LGV1Y2xpZGVhbk1vZHVsbzpmdW5jdGlvbihiLGUpe3JldHVybihiJWUrZSklZX0sbWFwTGluZWFyOmZ1bmN0aW9uKGIsZSxoLApuLHUpe3JldHVybiBuKyhiLWUpKih1LW4pLyhoLWUpfSxsZXJwOmZ1bmN0aW9uKGIsZSxoKXtyZXR1cm4oMS1oKSpiK2gqZX0sc21vb3Roc3RlcDpmdW5jdGlvbihiLGUsaCl7aWYoYjw9ZSlyZXR1cm4gMDtpZihiPj1oKXJldHVybiAxO2I9KGItZSkvKGgtZSk7cmV0dXJuIGIqYiooMy0yKmIpfSxzbW9vdGhlcnN0ZXA6ZnVuY3Rpb24oYixlLGgpe2lmKGI8PWUpcmV0dXJuIDA7aWYoYj49aClyZXR1cm4gMTtiPShiLWUpLyhoLWUpO3JldHVybiBiKmIqYiooYiooNipiLTE1KSsxMCl9LHJhbmRJbnQ6ZnVuY3Rpb24oYixlKXtyZXR1cm4gYitNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqKGUtYisxKSl9LHJhbmRGbG9hdDpmdW5jdGlvbihiLGUpe3JldHVybiBiK01hdGgucmFuZG9tKCkqKGUtYil9LHJhbmRGbG9hdFNwcmVhZDpmdW5jdGlvbihiKXtyZXR1cm4gYiooLjUtTWF0aC5yYW5kb20oKSl9LGRlZ1RvUmFkOmZ1bmN0aW9uKGIpe3JldHVybiBiKm9iLkRFRzJSQUR9LHJhZFRvRGVnOmZ1bmN0aW9uKGIpe3JldHVybiBiKgpvYi5SQUQyREVHfSxpc1Bvd2VyT2ZUd286ZnVuY3Rpb24oYil7cmV0dXJuIDA9PT0oYiZiLTEpJiYwIT09Yn0sY2VpbFBvd2VyT2ZUd286ZnVuY3Rpb24oYil7cmV0dXJuIE1hdGgucG93KDIsTWF0aC5jZWlsKE1hdGgubG9nKGIpL01hdGguTE4yKSl9LGZsb29yUG93ZXJPZlR3bzpmdW5jdGlvbihiKXtyZXR1cm4gTWF0aC5wb3coMixNYXRoLmZsb29yKE1hdGgubG9nKGIpL01hdGguTE4yKSl9fTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhkLnByb3RvdHlwZSx7d2lkdGg6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnh9LHNldDpmdW5jdGlvbihiKXt0aGlzLng9Yn19LGhlaWdodDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueX0sc2V0OmZ1bmN0aW9uKGIpe3RoaXMueT1ifX19KTtPYmplY3QuYXNzaWduKGQucHJvdG90eXBlLHtpc1ZlY3RvcjI6ITAsc2V0OmZ1bmN0aW9uKGIsZSl7dGhpcy54PWI7dGhpcy55PWU7cmV0dXJuIHRoaXN9LHNldFNjYWxhcjpmdW5jdGlvbihiKXt0aGlzLnk9CnRoaXMueD1iO3JldHVybiB0aGlzfSxzZXRYOmZ1bmN0aW9uKGIpe3RoaXMueD1iO3JldHVybiB0aGlzfSxzZXRZOmZ1bmN0aW9uKGIpe3RoaXMueT1iO3JldHVybiB0aGlzfSxzZXRDb21wb25lbnQ6ZnVuY3Rpb24oYixlKXtzd2l0Y2goYil7Y2FzZSAwOnRoaXMueD1lO2JyZWFrO2Nhc2UgMTp0aGlzLnk9ZTticmVhaztkZWZhdWx0OnRocm93IEVycm9yKCJpbmRleCBpcyBvdXQgb2YgcmFuZ2U6ICIrYik7fXJldHVybiB0aGlzfSxnZXRDb21wb25lbnQ6ZnVuY3Rpb24oYil7c3dpdGNoKGIpe2Nhc2UgMDpyZXR1cm4gdGhpcy54O2Nhc2UgMTpyZXR1cm4gdGhpcy55O2RlZmF1bHQ6dGhyb3cgRXJyb3IoImluZGV4IGlzIG91dCBvZiByYW5nZTogIitiKTt9fSxjbG9uZTpmdW5jdGlvbigpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLngsdGhpcy55KX0sY29weTpmdW5jdGlvbihiKXt0aGlzLng9Yi54O3RoaXMueT1iLnk7cmV0dXJuIHRoaXN9LGFkZDpmdW5jdGlvbihiLAplKXtpZih2b2lkIDAhPT1lKXJldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjI6IC5hZGQoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5hZGRWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLmFkZFZlY3RvcnMoYixlKTt0aGlzLngrPWIueDt0aGlzLnkrPWIueTtyZXR1cm4gdGhpc30sYWRkU2NhbGFyOmZ1bmN0aW9uKGIpe3RoaXMueCs9Yjt0aGlzLnkrPWI7cmV0dXJuIHRoaXN9LGFkZFZlY3RvcnM6ZnVuY3Rpb24oYixlKXt0aGlzLng9Yi54K2UueDt0aGlzLnk9Yi55K2UueTtyZXR1cm4gdGhpc30sYWRkU2NhbGVkVmVjdG9yOmZ1bmN0aW9uKGIsZSl7dGhpcy54Kz1iLngqZTt0aGlzLnkrPWIueSplO3JldHVybiB0aGlzfSxzdWI6ZnVuY3Rpb24oYixlKXtpZih2b2lkIDAhPT1lKXJldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjI6IC5zdWIoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5zdWJWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4iKSwKdGhpcy5zdWJWZWN0b3JzKGIsZSk7dGhpcy54LT1iLng7dGhpcy55LT1iLnk7cmV0dXJuIHRoaXN9LHN1YlNjYWxhcjpmdW5jdGlvbihiKXt0aGlzLngtPWI7dGhpcy55LT1iO3JldHVybiB0aGlzfSxzdWJWZWN0b3JzOmZ1bmN0aW9uKGIsZSl7dGhpcy54PWIueC1lLng7dGhpcy55PWIueS1lLnk7cmV0dXJuIHRoaXN9LG11bHRpcGx5OmZ1bmN0aW9uKGIpe3RoaXMueCo9Yi54O3RoaXMueSo9Yi55O3JldHVybiB0aGlzfSxtdWx0aXBseVNjYWxhcjpmdW5jdGlvbihiKXt0aGlzLngqPWI7dGhpcy55Kj1iO3JldHVybiB0aGlzfSxkaXZpZGU6ZnVuY3Rpb24oYil7dGhpcy54Lz1iLng7dGhpcy55Lz1iLnk7cmV0dXJuIHRoaXN9LGRpdmlkZVNjYWxhcjpmdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5tdWx0aXBseVNjYWxhcigxL2IpfSxhcHBseU1hdHJpeDM6ZnVuY3Rpb24oYil7dmFyIGU9dGhpcy54LGg9dGhpcy55O2I9Yi5lbGVtZW50czt0aGlzLng9YlswXSplK2JbM10qaCtiWzZdO3RoaXMueT0KYlsxXSplK2JbNF0qaCtiWzddO3JldHVybiB0aGlzfSxtaW46ZnVuY3Rpb24oYil7dGhpcy54PU1hdGgubWluKHRoaXMueCxiLngpO3RoaXMueT1NYXRoLm1pbih0aGlzLnksYi55KTtyZXR1cm4gdGhpc30sbWF4OmZ1bmN0aW9uKGIpe3RoaXMueD1NYXRoLm1heCh0aGlzLngsYi54KTt0aGlzLnk9TWF0aC5tYXgodGhpcy55LGIueSk7cmV0dXJuIHRoaXN9LGNsYW1wOmZ1bmN0aW9uKGIsZSl7dGhpcy54PU1hdGgubWF4KGIueCxNYXRoLm1pbihlLngsdGhpcy54KSk7dGhpcy55PU1hdGgubWF4KGIueSxNYXRoLm1pbihlLnksdGhpcy55KSk7cmV0dXJuIHRoaXN9LGNsYW1wU2NhbGFyOmZ1bmN0aW9uKGIsZSl7dGhpcy54PU1hdGgubWF4KGIsTWF0aC5taW4oZSx0aGlzLngpKTt0aGlzLnk9TWF0aC5tYXgoYixNYXRoLm1pbihlLHRoaXMueSkpO3JldHVybiB0aGlzfSxjbGFtcExlbmd0aDpmdW5jdGlvbihiLGUpe3ZhciBoPXRoaXMubGVuZ3RoKCk7cmV0dXJuIHRoaXMuZGl2aWRlU2NhbGFyKGh8fAoxKS5tdWx0aXBseVNjYWxhcihNYXRoLm1heChiLE1hdGgubWluKGUsaCkpKX0sZmxvb3I6ZnVuY3Rpb24oKXt0aGlzLng9TWF0aC5mbG9vcih0aGlzLngpO3RoaXMueT1NYXRoLmZsb29yKHRoaXMueSk7cmV0dXJuIHRoaXN9LGNlaWw6ZnVuY3Rpb24oKXt0aGlzLng9TWF0aC5jZWlsKHRoaXMueCk7dGhpcy55PU1hdGguY2VpbCh0aGlzLnkpO3JldHVybiB0aGlzfSxyb3VuZDpmdW5jdGlvbigpe3RoaXMueD1NYXRoLnJvdW5kKHRoaXMueCk7dGhpcy55PU1hdGgucm91bmQodGhpcy55KTtyZXR1cm4gdGhpc30scm91bmRUb1plcm86ZnVuY3Rpb24oKXt0aGlzLng9MD50aGlzLng/TWF0aC5jZWlsKHRoaXMueCk6TWF0aC5mbG9vcih0aGlzLngpO3RoaXMueT0wPnRoaXMueT9NYXRoLmNlaWwodGhpcy55KTpNYXRoLmZsb29yKHRoaXMueSk7cmV0dXJuIHRoaXN9LG5lZ2F0ZTpmdW5jdGlvbigpe3RoaXMueD0tdGhpcy54O3RoaXMueT0tdGhpcy55O3JldHVybiB0aGlzfSxkb3Q6ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMueCoKYi54K3RoaXMueSpiLnl9LGNyb3NzOmZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLngqYi55LXRoaXMueSpiLnh9LGxlbmd0aFNxOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueCp0aGlzLngrdGhpcy55KnRoaXMueX0sbGVuZ3RoOmZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLngqdGhpcy54K3RoaXMueSp0aGlzLnkpfSxtYW5oYXR0YW5MZW5ndGg6ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5hYnModGhpcy54KStNYXRoLmFicyh0aGlzLnkpfSxub3JtYWxpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kaXZpZGVTY2FsYXIodGhpcy5sZW5ndGgoKXx8MSl9LGFuZ2xlOmZ1bmN0aW9uKCl7dmFyIGI9TWF0aC5hdGFuMih0aGlzLnksdGhpcy54KTswPmImJihiKz0yKk1hdGguUEkpO3JldHVybiBifSxkaXN0YW5jZVRvOmZ1bmN0aW9uKGIpe3JldHVybiBNYXRoLnNxcnQodGhpcy5kaXN0YW5jZVRvU3F1YXJlZChiKSl9LGRpc3RhbmNlVG9TcXVhcmVkOmZ1bmN0aW9uKGIpe3ZhciBlPQp0aGlzLngtYi54O2I9dGhpcy55LWIueTtyZXR1cm4gZSplK2IqYn0sbWFuaGF0dGFuRGlzdGFuY2VUbzpmdW5jdGlvbihiKXtyZXR1cm4gTWF0aC5hYnModGhpcy54LWIueCkrTWF0aC5hYnModGhpcy55LWIueSl9LHNldExlbmd0aDpmdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5ub3JtYWxpemUoKS5tdWx0aXBseVNjYWxhcihiKX0sbGVycDpmdW5jdGlvbihiLGUpe3RoaXMueCs9KGIueC10aGlzLngpKmU7dGhpcy55Kz0oYi55LXRoaXMueSkqZTtyZXR1cm4gdGhpc30sbGVycFZlY3RvcnM6ZnVuY3Rpb24oYixlLGgpe3JldHVybiB0aGlzLnN1YlZlY3RvcnMoZSxiKS5tdWx0aXBseVNjYWxhcihoKS5hZGQoYil9LGVxdWFsczpmdW5jdGlvbihiKXtyZXR1cm4gYi54PT09dGhpcy54JiZiLnk9PT10aGlzLnl9LGZyb21BcnJheTpmdW5jdGlvbihiLGUpe3ZvaWQgMD09PWUmJihlPTApO3RoaXMueD1iW2VdO3RoaXMueT1iW2UrMV07cmV0dXJuIHRoaXN9LHRvQXJyYXk6ZnVuY3Rpb24oYiwKZSl7dm9pZCAwPT09YiYmKGI9W10pO3ZvaWQgMD09PWUmJihlPTApO2JbZV09dGhpcy54O2JbZSsxXT10aGlzLnk7cmV0dXJuIGJ9LGZyb21CdWZmZXJBdHRyaWJ1dGU6ZnVuY3Rpb24oYixlLGgpe3ZvaWQgMCE9PWgmJmNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMjogb2Zmc2V0IGhhcyBiZWVuIHJlbW92ZWQgZnJvbSAuZnJvbUJ1ZmZlckF0dHJpYnV0ZSgpLiIpO3RoaXMueD1iLmdldFgoZSk7dGhpcy55PWIuZ2V0WShlKTtyZXR1cm4gdGhpc30scm90YXRlQXJvdW5kOmZ1bmN0aW9uKGIsZSl7dmFyIGg9TWF0aC5jb3MoZSk7ZT1NYXRoLnNpbihlKTt2YXIgbj10aGlzLngtYi54LHU9dGhpcy55LWIueTt0aGlzLng9bipoLXUqZStiLng7dGhpcy55PW4qZSt1KmgrYi55O3JldHVybiB0aGlzfX0pO09iamVjdC5hc3NpZ24oZix7c2xlcnA6ZnVuY3Rpb24oYixlLGgsbil7cmV0dXJuIGguY29weShiKS5zbGVycChlLG4pfSxzbGVycEZsYXQ6ZnVuY3Rpb24oYixlLGgsbix1LHcseil7dmFyIEU9CmhbbiswXSxIPWhbbisxXSxJPWhbbisyXTtoPWhbbiszXTtuPXVbdyswXTt2YXIgTz11W3crMV0sUT11W3crMl07dT11W3crM107aWYoaCE9PXV8fEUhPT1ufHxIIT09T3x8SSE9PVEpe3c9MS16O3ZhciBSPUUqbitIKk8rSSpRK2gqdSxVPTA8PVI/MTotMSxXPTEtUipSO1c+TnVtYmVyLkVQU0lMT04mJihXPU1hdGguc3FydChXKSxSPU1hdGguYXRhbjIoVyxSKlUpLHc9TWF0aC5zaW4odypSKS9XLHo9TWF0aC5zaW4oeipSKS9XKTtVKj16O0U9RSp3K24qVTtIPUgqdytPKlU7ST1JKncrUSpVO2g9aCp3K3UqVTt3PT09MS16JiYoej0xL01hdGguc3FydChFKkUrSCpIK0kqSStoKmgpLEUqPXosSCo9eixJKj16LGgqPXopfWJbZV09RTtiW2UrMV09SDtiW2UrMl09STtiW2UrM109aH19KTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhmLnByb3RvdHlwZSx7eDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3h9LHNldDpmdW5jdGlvbihiKXt0aGlzLl94PWI7dGhpcy5vbkNoYW5nZUNhbGxiYWNrKCl9fSwKeTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3l9LHNldDpmdW5jdGlvbihiKXt0aGlzLl95PWI7dGhpcy5vbkNoYW5nZUNhbGxiYWNrKCl9fSx6OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fen0sc2V0OmZ1bmN0aW9uKGIpe3RoaXMuX3o9Yjt0aGlzLm9uQ2hhbmdlQ2FsbGJhY2soKX19LHc6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93fSxzZXQ6ZnVuY3Rpb24oYil7dGhpcy5fdz1iO3RoaXMub25DaGFuZ2VDYWxsYmFjaygpfX19KTtPYmplY3QuYXNzaWduKGYucHJvdG90eXBlLHtpc1F1YXRlcm5pb246ITAsc2V0OmZ1bmN0aW9uKGIsZSxoLG4pe3RoaXMuX3g9Yjt0aGlzLl95PWU7dGhpcy5fej1oO3RoaXMuX3c9bjt0aGlzLm9uQ2hhbmdlQ2FsbGJhY2soKTtyZXR1cm4gdGhpc30sY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy5feCx0aGlzLl95LHRoaXMuX3osdGhpcy5fdyl9LGNvcHk6ZnVuY3Rpb24oYil7dGhpcy5feD0KYi54O3RoaXMuX3k9Yi55O3RoaXMuX3o9Yi56O3RoaXMuX3c9Yi53O3RoaXMub25DaGFuZ2VDYWxsYmFjaygpO3JldHVybiB0aGlzfSxzZXRGcm9tRXVsZXI6ZnVuY3Rpb24oYixlKXtpZighYnx8IWIuaXNFdWxlcil0aHJvdyBFcnJvcigiVEhSRUUuUXVhdGVybmlvbjogLnNldEZyb21FdWxlcigpIG5vdyBleHBlY3RzIGFuIEV1bGVyIHJvdGF0aW9uIHJhdGhlciB0aGFuIGEgVmVjdG9yMyBhbmQgb3JkZXIuIik7dmFyIGg9Yi5feCxuPWIuX3ksdT1iLl96O2I9Yi5vcmRlcjt2YXIgdz1NYXRoLmNvcyx6PU1hdGguc2luLEU9dyhoLzIpLEg9dyhuLzIpO3c9dyh1LzIpO2g9eihoLzIpO249eihuLzIpO3U9eih1LzIpOyJYWVoiPT09Yj8odGhpcy5feD1oKkgqdytFKm4qdSx0aGlzLl95PUUqbip3LWgqSCp1LHRoaXMuX3o9RSpIKnUraCpuKncsdGhpcy5fdz1FKkgqdy1oKm4qdSk6IllYWiI9PT1iPyh0aGlzLl94PWgqSCp3K0Uqbip1LHRoaXMuX3k9RSpuKnctaCpIKnUsdGhpcy5fej1FKgpIKnUtaCpuKncsdGhpcy5fdz1FKkgqdytoKm4qdSk6IlpYWSI9PT1iPyh0aGlzLl94PWgqSCp3LUUqbip1LHRoaXMuX3k9RSpuKncraCpIKnUsdGhpcy5fej1FKkgqdStoKm4qdyx0aGlzLl93PUUqSCp3LWgqbip1KToiWllYIj09PWI/KHRoaXMuX3g9aCpIKnctRSpuKnUsdGhpcy5feT1FKm4qdytoKkgqdSx0aGlzLl96PUUqSCp1LWgqbip3LHRoaXMuX3c9RSpIKncraCpuKnUpOiJZWlgiPT09Yj8odGhpcy5feD1oKkgqdytFKm4qdSx0aGlzLl95PUUqbip3K2gqSCp1LHRoaXMuX3o9RSpIKnUtaCpuKncsdGhpcy5fdz1FKkgqdy1oKm4qdSk6IlhaWSI9PT1iJiYodGhpcy5feD1oKkgqdy1FKm4qdSx0aGlzLl95PUUqbip3LWgqSCp1LHRoaXMuX3o9RSpIKnUraCpuKncsdGhpcy5fdz1FKkgqdytoKm4qdSk7aWYoITEhPT1lKXRoaXMub25DaGFuZ2VDYWxsYmFjaygpO3JldHVybiB0aGlzfSxzZXRGcm9tQXhpc0FuZ2xlOmZ1bmN0aW9uKGIsZSl7ZS89Mjt2YXIgaD1NYXRoLnNpbihlKTsKdGhpcy5feD1iLngqaDt0aGlzLl95PWIueSpoO3RoaXMuX3o9Yi56Kmg7dGhpcy5fdz1NYXRoLmNvcyhlKTt0aGlzLm9uQ2hhbmdlQ2FsbGJhY2soKTtyZXR1cm4gdGhpc30sc2V0RnJvbVJvdGF0aW9uTWF0cml4OmZ1bmN0aW9uKGIpe3ZhciBlPWIuZWxlbWVudHMsaD1lWzBdO2I9ZVs0XTt2YXIgbj1lWzhdLHU9ZVsxXSx3PWVbNV0sej1lWzldLEU9ZVsyXSxIPWVbNl07ZT1lWzEwXTt2YXIgST1oK3crZTswPEk/KGg9LjUvTWF0aC5zcXJ0KEkrMSksdGhpcy5fdz0uMjUvaCx0aGlzLl94PShILXopKmgsdGhpcy5feT0obi1FKSpoLHRoaXMuX3o9KHUtYikqaCk6aD53JiZoPmU/KGg9MipNYXRoLnNxcnQoMStoLXctZSksdGhpcy5fdz0oSC16KS9oLHRoaXMuX3g9LjI1KmgsdGhpcy5feT0oYit1KS9oLHRoaXMuX3o9KG4rRSkvaCk6dz5lPyhoPTIqTWF0aC5zcXJ0KDErdy1oLWUpLHRoaXMuX3c9KG4tRSkvaCx0aGlzLl94PShiK3UpL2gsdGhpcy5feT0uMjUqaCx0aGlzLl96PSh6K0gpLwpoKTooaD0yKk1hdGguc3FydCgxK2UtaC13KSx0aGlzLl93PSh1LWIpL2gsdGhpcy5feD0obitFKS9oLHRoaXMuX3k9KHorSCkvaCx0aGlzLl96PS4yNSpoKTt0aGlzLm9uQ2hhbmdlQ2FsbGJhY2soKTtyZXR1cm4gdGhpc30sc2V0RnJvbVVuaXRWZWN0b3JzOmZ1bmN0aW9uKGIsZSl7dmFyIGg9Yi5kb3QoZSkrMTsxRS02Pmg/KGg9MCxNYXRoLmFicyhiLngpPk1hdGguYWJzKGIueik/KHRoaXMuX3g9LWIueSx0aGlzLl95PWIueCx0aGlzLl96PTApOih0aGlzLl94PTAsdGhpcy5feT0tYi56LHRoaXMuX3o9Yi55KSk6KHRoaXMuX3g9Yi55KmUuei1iLnoqZS55LHRoaXMuX3k9Yi56KmUueC1iLngqZS56LHRoaXMuX3o9Yi54KmUueS1iLnkqZS54KTt0aGlzLl93PWg7cmV0dXJuIHRoaXMubm9ybWFsaXplKCl9LGFuZ2xlVG86ZnVuY3Rpb24oYil7cmV0dXJuIDIqTWF0aC5hY29zKE1hdGguYWJzKG9iLmNsYW1wKHRoaXMuZG90KGIpLC0xLDEpKSl9LHJvdGF0ZVRvd2FyZHM6ZnVuY3Rpb24oYiwKZSl7dmFyIGg9dGhpcy5hbmdsZVRvKGIpO2lmKDA9PT1oKXJldHVybiB0aGlzO3RoaXMuc2xlcnAoYixNYXRoLm1pbigxLGUvaCkpO3JldHVybiB0aGlzfSxpbnZlcnNlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uanVnYXRlKCl9LGNvbmp1Z2F0ZTpmdW5jdGlvbigpe3RoaXMuX3gqPS0xO3RoaXMuX3kqPS0xO3RoaXMuX3oqPS0xO3RoaXMub25DaGFuZ2VDYWxsYmFjaygpO3JldHVybiB0aGlzfSxkb3Q6ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuX3gqYi5feCt0aGlzLl95KmIuX3krdGhpcy5feipiLl96K3RoaXMuX3cqYi5fd30sbGVuZ3RoU3E6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5feCp0aGlzLl94K3RoaXMuX3kqdGhpcy5feSt0aGlzLl96KnRoaXMuX3ordGhpcy5fdyp0aGlzLl93fSxsZW5ndGg6ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMuX3gqdGhpcy5feCt0aGlzLl95KnRoaXMuX3krdGhpcy5feip0aGlzLl96K3RoaXMuX3cqdGhpcy5fdyl9LG5vcm1hbGl6ZTpmdW5jdGlvbigpe3ZhciBiPQp0aGlzLmxlbmd0aCgpOzA9PT1iPyh0aGlzLl96PXRoaXMuX3k9dGhpcy5feD0wLHRoaXMuX3c9MSk6KGI9MS9iLHRoaXMuX3gqPWIsdGhpcy5feSo9Yix0aGlzLl96Kj1iLHRoaXMuX3cqPWIpO3RoaXMub25DaGFuZ2VDYWxsYmFjaygpO3JldHVybiB0aGlzfSxtdWx0aXBseTpmdW5jdGlvbihiLGUpe3JldHVybiB2b2lkIDAhPT1lPyhjb25zb2xlLndhcm4oIlRIUkVFLlF1YXRlcm5pb246IC5tdWx0aXBseSgpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLm11bHRpcGx5UXVhdGVybmlvbnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMubXVsdGlwbHlRdWF0ZXJuaW9ucyhiLGUpKTp0aGlzLm11bHRpcGx5UXVhdGVybmlvbnModGhpcyxiKX0scHJlbXVsdGlwbHk6ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMubXVsdGlwbHlRdWF0ZXJuaW9ucyhiLHRoaXMpfSxtdWx0aXBseVF1YXRlcm5pb25zOmZ1bmN0aW9uKGIsZSl7dmFyIGg9Yi5feCxuPWIuX3ksdT1iLl96O2I9Yi5fdzsKdmFyIHc9ZS5feCx6PWUuX3ksRT1lLl96O2U9ZS5fdzt0aGlzLl94PWgqZStiKncrbipFLXUqejt0aGlzLl95PW4qZStiKnordSp3LWgqRTt0aGlzLl96PXUqZStiKkUraCp6LW4qdzt0aGlzLl93PWIqZS1oKnctbip6LXUqRTt0aGlzLm9uQ2hhbmdlQ2FsbGJhY2soKTtyZXR1cm4gdGhpc30sc2xlcnA6ZnVuY3Rpb24oYixlKXtpZigwPT09ZSlyZXR1cm4gdGhpcztpZigxPT09ZSlyZXR1cm4gdGhpcy5jb3B5KGIpO3ZhciBoPXRoaXMuX3gsbj10aGlzLl95LHU9dGhpcy5feix3PXRoaXMuX3csej13KmIuX3craCpiLl94K24qYi5feSt1KmIuX3o7MD56Pyh0aGlzLl93PS1iLl93LHRoaXMuX3g9LWIuX3gsdGhpcy5feT0tYi5feSx0aGlzLl96PS1iLl96LHo9LXopOnRoaXMuY29weShiKTtpZigxPD16KXJldHVybiB0aGlzLl93PXcsdGhpcy5feD1oLHRoaXMuX3k9bix0aGlzLl96PXUsdGhpcztiPTEteip6O2lmKGI8PU51bWJlci5FUFNJTE9OKXJldHVybiB6PTEtZSx0aGlzLl93PXoqCncrZSp0aGlzLl93LHRoaXMuX3g9eipoK2UqdGhpcy5feCx0aGlzLl95PXoqbitlKnRoaXMuX3ksdGhpcy5fej16KnUrZSp0aGlzLl96LHRoaXMubm9ybWFsaXplKCk7Yj1NYXRoLnNxcnQoYik7dmFyIEU9TWF0aC5hdGFuMihiLHopO3o9TWF0aC5zaW4oKDEtZSkqRSkvYjtlPU1hdGguc2luKGUqRSkvYjt0aGlzLl93PXcqeit0aGlzLl93KmU7dGhpcy5feD1oKnordGhpcy5feCplO3RoaXMuX3k9bip6K3RoaXMuX3kqZTt0aGlzLl96PXUqeit0aGlzLl96KmU7dGhpcy5vbkNoYW5nZUNhbGxiYWNrKCk7cmV0dXJuIHRoaXN9LGVxdWFsczpmdW5jdGlvbihiKXtyZXR1cm4gYi5feD09PXRoaXMuX3gmJmIuX3k9PT10aGlzLl95JiZiLl96PT09dGhpcy5feiYmYi5fdz09PXRoaXMuX3d9LGZyb21BcnJheTpmdW5jdGlvbihiLGUpe3ZvaWQgMD09PWUmJihlPTApO3RoaXMuX3g9YltlXTt0aGlzLl95PWJbZSsxXTt0aGlzLl96PWJbZSsyXTt0aGlzLl93PWJbZSszXTt0aGlzLm9uQ2hhbmdlQ2FsbGJhY2soKTsKcmV0dXJuIHRoaXN9LHRvQXJyYXk6ZnVuY3Rpb24oYixlKXt2b2lkIDA9PT1iJiYoYj1bXSk7dm9pZCAwPT09ZSYmKGU9MCk7YltlXT10aGlzLl94O2JbZSsxXT10aGlzLl95O2JbZSsyXT10aGlzLl96O2JbZSszXT10aGlzLl93O3JldHVybiBifSxvbkNoYW5nZTpmdW5jdGlvbihiKXt0aGlzLm9uQ2hhbmdlQ2FsbGJhY2s9YjtyZXR1cm4gdGhpc30sb25DaGFuZ2VDYWxsYmFjazpmdW5jdGlvbigpe319KTtPYmplY3QuYXNzaWduKGcucHJvdG90eXBlLHtpc1ZlY3RvcjM6ITAsc2V0OmZ1bmN0aW9uKGIsZSxoKXt0aGlzLng9Yjt0aGlzLnk9ZTt0aGlzLno9aDtyZXR1cm4gdGhpc30sc2V0U2NhbGFyOmZ1bmN0aW9uKGIpe3RoaXMuej10aGlzLnk9dGhpcy54PWI7cmV0dXJuIHRoaXN9LHNldFg6ZnVuY3Rpb24oYil7dGhpcy54PWI7cmV0dXJuIHRoaXN9LHNldFk6ZnVuY3Rpb24oYil7dGhpcy55PWI7cmV0dXJuIHRoaXN9LHNldFo6ZnVuY3Rpb24oYil7dGhpcy56PWI7cmV0dXJuIHRoaXN9LApzZXRDb21wb25lbnQ6ZnVuY3Rpb24oYixlKXtzd2l0Y2goYil7Y2FzZSAwOnRoaXMueD1lO2JyZWFrO2Nhc2UgMTp0aGlzLnk9ZTticmVhaztjYXNlIDI6dGhpcy56PWU7YnJlYWs7ZGVmYXVsdDp0aHJvdyBFcnJvcigiaW5kZXggaXMgb3V0IG9mIHJhbmdlOiAiK2IpO31yZXR1cm4gdGhpc30sZ2V0Q29tcG9uZW50OmZ1bmN0aW9uKGIpe3N3aXRjaChiKXtjYXNlIDA6cmV0dXJuIHRoaXMueDtjYXNlIDE6cmV0dXJuIHRoaXMueTtjYXNlIDI6cmV0dXJuIHRoaXMuejtkZWZhdWx0OnRocm93IEVycm9yKCJpbmRleCBpcyBvdXQgb2YgcmFuZ2U6ICIrYik7fX0sY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy54LHRoaXMueSx0aGlzLnopfSxjb3B5OmZ1bmN0aW9uKGIpe3RoaXMueD1iLng7dGhpcy55PWIueTt0aGlzLno9Yi56O3JldHVybiB0aGlzfSxhZGQ6ZnVuY3Rpb24oYixlKXtpZih2b2lkIDAhPT1lKXJldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5hZGQoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5hZGRWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4iKSwKdGhpcy5hZGRWZWN0b3JzKGIsZSk7dGhpcy54Kz1iLng7dGhpcy55Kz1iLnk7dGhpcy56Kz1iLno7cmV0dXJuIHRoaXN9LGFkZFNjYWxhcjpmdW5jdGlvbihiKXt0aGlzLngrPWI7dGhpcy55Kz1iO3RoaXMueis9YjtyZXR1cm4gdGhpc30sYWRkVmVjdG9yczpmdW5jdGlvbihiLGUpe3RoaXMueD1iLngrZS54O3RoaXMueT1iLnkrZS55O3RoaXMuej1iLnorZS56O3JldHVybiB0aGlzfSxhZGRTY2FsZWRWZWN0b3I6ZnVuY3Rpb24oYixlKXt0aGlzLngrPWIueCplO3RoaXMueSs9Yi55KmU7dGhpcy56Kz1iLnoqZTtyZXR1cm4gdGhpc30sc3ViOmZ1bmN0aW9uKGIsZSl7aWYodm9pZCAwIT09ZSlyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuc3ViKCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAuc3ViVmVjdG9ycyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5zdWJWZWN0b3JzKGIsZSk7dGhpcy54LT1iLng7dGhpcy55LT1iLnk7dGhpcy56LT1iLno7CnJldHVybiB0aGlzfSxzdWJTY2FsYXI6ZnVuY3Rpb24oYil7dGhpcy54LT1iO3RoaXMueS09Yjt0aGlzLnotPWI7cmV0dXJuIHRoaXN9LHN1YlZlY3RvcnM6ZnVuY3Rpb24oYixlKXt0aGlzLng9Yi54LWUueDt0aGlzLnk9Yi55LWUueTt0aGlzLno9Yi56LWUuejtyZXR1cm4gdGhpc30sbXVsdGlwbHk6ZnVuY3Rpb24oYixlKXtpZih2b2lkIDAhPT1lKXJldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5tdWx0aXBseSgpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLm11bHRpcGx5VmVjdG9ycyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5tdWx0aXBseVZlY3RvcnMoYixlKTt0aGlzLngqPWIueDt0aGlzLnkqPWIueTt0aGlzLnoqPWIuejtyZXR1cm4gdGhpc30sbXVsdGlwbHlTY2FsYXI6ZnVuY3Rpb24oYil7dGhpcy54Kj1iO3RoaXMueSo9Yjt0aGlzLnoqPWI7cmV0dXJuIHRoaXN9LG11bHRpcGx5VmVjdG9yczpmdW5jdGlvbihiLGUpe3RoaXMueD1iLngqCmUueDt0aGlzLnk9Yi55KmUueTt0aGlzLno9Yi56KmUuejtyZXR1cm4gdGhpc30sYXBwbHlFdWxlcjpmdW5jdGlvbigpe3ZhciBiPW5ldyBmO3JldHVybiBmdW5jdGlvbihlKXtlJiZlLmlzRXVsZXJ8fGNvbnNvbGUuZXJyb3IoIlRIUkVFLlZlY3RvcjM6IC5hcHBseUV1bGVyKCkgbm93IGV4cGVjdHMgYW4gRXVsZXIgcm90YXRpb24gcmF0aGVyIHRoYW4gYSBWZWN0b3IzIGFuZCBvcmRlci4iKTtyZXR1cm4gdGhpcy5hcHBseVF1YXRlcm5pb24oYi5zZXRGcm9tRXVsZXIoZSkpfX0oKSxhcHBseUF4aXNBbmdsZTpmdW5jdGlvbigpe3ZhciBiPW5ldyBmO3JldHVybiBmdW5jdGlvbihlLGgpe3JldHVybiB0aGlzLmFwcGx5UXVhdGVybmlvbihiLnNldEZyb21BeGlzQW5nbGUoZSxoKSl9fSgpLGFwcGx5TWF0cml4MzpmdW5jdGlvbihiKXt2YXIgZT10aGlzLngsaD10aGlzLnksbj10aGlzLno7Yj1iLmVsZW1lbnRzO3RoaXMueD1iWzBdKmUrYlszXSpoK2JbNl0qbjt0aGlzLnk9YlsxXSplKwpiWzRdKmgrYls3XSpuO3RoaXMuej1iWzJdKmUrYls1XSpoK2JbOF0qbjtyZXR1cm4gdGhpc30sYXBwbHlNYXRyaXg0OmZ1bmN0aW9uKGIpe3ZhciBlPXRoaXMueCxoPXRoaXMueSxuPXRoaXMuejtiPWIuZWxlbWVudHM7dmFyIHU9MS8oYlszXSplK2JbN10qaCtiWzExXSpuK2JbMTVdKTt0aGlzLng9KGJbMF0qZStiWzRdKmgrYls4XSpuK2JbMTJdKSp1O3RoaXMueT0oYlsxXSplK2JbNV0qaCtiWzldKm4rYlsxM10pKnU7dGhpcy56PShiWzJdKmUrYls2XSpoK2JbMTBdKm4rYlsxNF0pKnU7cmV0dXJuIHRoaXN9LGFwcGx5UXVhdGVybmlvbjpmdW5jdGlvbihiKXt2YXIgZT10aGlzLngsaD10aGlzLnksbj10aGlzLnosdT1iLngsdz1iLnksej1iLno7Yj1iLnc7dmFyIEU9YiplK3cqbi16KmgsSD1iKmgreiplLXUqbixJPWIqbit1KmgtdyplO2U9LXUqZS13KmgteipuO3RoaXMueD1FKmIrZSotdStIKi16LUkqLXc7dGhpcy55PUgqYitlKi13K0kqLXUtRSotejt0aGlzLno9SSpiK2UqLXorCkUqLXctSCotdTtyZXR1cm4gdGhpc30scHJvamVjdDpmdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5hcHBseU1hdHJpeDQoYi5tYXRyaXhXb3JsZEludmVyc2UpLmFwcGx5TWF0cml4NChiLnByb2plY3Rpb25NYXRyaXgpfSx1bnByb2plY3Q6ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuYXBwbHlNYXRyaXg0KGIucHJvamVjdGlvbk1hdHJpeEludmVyc2UpLmFwcGx5TWF0cml4NChiLm1hdHJpeFdvcmxkKX0sdHJhbnNmb3JtRGlyZWN0aW9uOmZ1bmN0aW9uKGIpe3ZhciBlPXRoaXMueCxoPXRoaXMueSxuPXRoaXMuejtiPWIuZWxlbWVudHM7dGhpcy54PWJbMF0qZStiWzRdKmgrYls4XSpuO3RoaXMueT1iWzFdKmUrYls1XSpoK2JbOV0qbjt0aGlzLno9YlsyXSplK2JbNl0qaCtiWzEwXSpuO3JldHVybiB0aGlzLm5vcm1hbGl6ZSgpfSxkaXZpZGU6ZnVuY3Rpb24oYil7dGhpcy54Lz1iLng7dGhpcy55Lz1iLnk7dGhpcy56Lz1iLno7cmV0dXJuIHRoaXN9LGRpdmlkZVNjYWxhcjpmdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5tdWx0aXBseVNjYWxhcigxLwpiKX0sbWluOmZ1bmN0aW9uKGIpe3RoaXMueD1NYXRoLm1pbih0aGlzLngsYi54KTt0aGlzLnk9TWF0aC5taW4odGhpcy55LGIueSk7dGhpcy56PU1hdGgubWluKHRoaXMueixiLnopO3JldHVybiB0aGlzfSxtYXg6ZnVuY3Rpb24oYil7dGhpcy54PU1hdGgubWF4KHRoaXMueCxiLngpO3RoaXMueT1NYXRoLm1heCh0aGlzLnksYi55KTt0aGlzLno9TWF0aC5tYXgodGhpcy56LGIueik7cmV0dXJuIHRoaXN9LGNsYW1wOmZ1bmN0aW9uKGIsZSl7dGhpcy54PU1hdGgubWF4KGIueCxNYXRoLm1pbihlLngsdGhpcy54KSk7dGhpcy55PU1hdGgubWF4KGIueSxNYXRoLm1pbihlLnksdGhpcy55KSk7dGhpcy56PU1hdGgubWF4KGIueixNYXRoLm1pbihlLnosdGhpcy56KSk7cmV0dXJuIHRoaXN9LGNsYW1wU2NhbGFyOmZ1bmN0aW9uKGIsZSl7dGhpcy54PU1hdGgubWF4KGIsTWF0aC5taW4oZSx0aGlzLngpKTt0aGlzLnk9TWF0aC5tYXgoYixNYXRoLm1pbihlLHRoaXMueSkpO3RoaXMuej1NYXRoLm1heChiLApNYXRoLm1pbihlLHRoaXMueikpO3JldHVybiB0aGlzfSxjbGFtcExlbmd0aDpmdW5jdGlvbihiLGUpe3ZhciBoPXRoaXMubGVuZ3RoKCk7cmV0dXJuIHRoaXMuZGl2aWRlU2NhbGFyKGh8fDEpLm11bHRpcGx5U2NhbGFyKE1hdGgubWF4KGIsTWF0aC5taW4oZSxoKSkpfSxmbG9vcjpmdW5jdGlvbigpe3RoaXMueD1NYXRoLmZsb29yKHRoaXMueCk7dGhpcy55PU1hdGguZmxvb3IodGhpcy55KTt0aGlzLno9TWF0aC5mbG9vcih0aGlzLnopO3JldHVybiB0aGlzfSxjZWlsOmZ1bmN0aW9uKCl7dGhpcy54PU1hdGguY2VpbCh0aGlzLngpO3RoaXMueT1NYXRoLmNlaWwodGhpcy55KTt0aGlzLno9TWF0aC5jZWlsKHRoaXMueik7cmV0dXJuIHRoaXN9LHJvdW5kOmZ1bmN0aW9uKCl7dGhpcy54PU1hdGgucm91bmQodGhpcy54KTt0aGlzLnk9TWF0aC5yb3VuZCh0aGlzLnkpO3RoaXMuej1NYXRoLnJvdW5kKHRoaXMueik7cmV0dXJuIHRoaXN9LHJvdW5kVG9aZXJvOmZ1bmN0aW9uKCl7dGhpcy54PQowPnRoaXMueD9NYXRoLmNlaWwodGhpcy54KTpNYXRoLmZsb29yKHRoaXMueCk7dGhpcy55PTA+dGhpcy55P01hdGguY2VpbCh0aGlzLnkpOk1hdGguZmxvb3IodGhpcy55KTt0aGlzLno9MD50aGlzLno/TWF0aC5jZWlsKHRoaXMueik6TWF0aC5mbG9vcih0aGlzLnopO3JldHVybiB0aGlzfSxuZWdhdGU6ZnVuY3Rpb24oKXt0aGlzLng9LXRoaXMueDt0aGlzLnk9LXRoaXMueTt0aGlzLno9LXRoaXMuejtyZXR1cm4gdGhpc30sZG90OmZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLngqYi54K3RoaXMueSpiLnkrdGhpcy56KmIuen0sbGVuZ3RoU3E6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54KnRoaXMueCt0aGlzLnkqdGhpcy55K3RoaXMueip0aGlzLnp9LGxlbmd0aDpmdW5jdGlvbigpe3JldHVybiBNYXRoLnNxcnQodGhpcy54KnRoaXMueCt0aGlzLnkqdGhpcy55K3RoaXMueip0aGlzLnopfSxtYW5oYXR0YW5MZW5ndGg6ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5hYnModGhpcy54KStNYXRoLmFicyh0aGlzLnkpKwpNYXRoLmFicyh0aGlzLnopfSxub3JtYWxpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kaXZpZGVTY2FsYXIodGhpcy5sZW5ndGgoKXx8MSl9LHNldExlbmd0aDpmdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5ub3JtYWxpemUoKS5tdWx0aXBseVNjYWxhcihiKX0sbGVycDpmdW5jdGlvbihiLGUpe3RoaXMueCs9KGIueC10aGlzLngpKmU7dGhpcy55Kz0oYi55LXRoaXMueSkqZTt0aGlzLnorPShiLnotdGhpcy56KSplO3JldHVybiB0aGlzfSxsZXJwVmVjdG9yczpmdW5jdGlvbihiLGUsaCl7cmV0dXJuIHRoaXMuc3ViVmVjdG9ycyhlLGIpLm11bHRpcGx5U2NhbGFyKGgpLmFkZChiKX0sY3Jvc3M6ZnVuY3Rpb24oYixlKXtyZXR1cm4gdm9pZCAwIT09ZT8oY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuY3Jvc3MoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5jcm9zc1ZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMuY3Jvc3NWZWN0b3JzKGIsZSkpOnRoaXMuY3Jvc3NWZWN0b3JzKHRoaXMsCmIpfSxjcm9zc1ZlY3RvcnM6ZnVuY3Rpb24oYixlKXt2YXIgaD1iLngsbj1iLnk7Yj1iLno7dmFyIHU9ZS54LHc9ZS55O2U9ZS56O3RoaXMueD1uKmUtYip3O3RoaXMueT1iKnUtaCplO3RoaXMuej1oKnctbip1O3JldHVybiB0aGlzfSxwcm9qZWN0T25WZWN0b3I6ZnVuY3Rpb24oYil7dmFyIGU9Yi5kb3QodGhpcykvYi5sZW5ndGhTcSgpO3JldHVybiB0aGlzLmNvcHkoYikubXVsdGlwbHlTY2FsYXIoZSl9LHByb2plY3RPblBsYW5lOmZ1bmN0aW9uKCl7dmFyIGI9bmV3IGc7cmV0dXJuIGZ1bmN0aW9uKGUpe2IuY29weSh0aGlzKS5wcm9qZWN0T25WZWN0b3IoZSk7cmV0dXJuIHRoaXMuc3ViKGIpfX0oKSxyZWZsZWN0OmZ1bmN0aW9uKCl7dmFyIGI9bmV3IGc7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnN1YihiLmNvcHkoZSkubXVsdGlwbHlTY2FsYXIoMip0aGlzLmRvdChlKSkpfX0oKSxhbmdsZVRvOmZ1bmN0aW9uKGIpe3JldHVybiBNYXRoLmFjb3Mob2IuY2xhbXAodGhpcy5kb3QoYikvCk1hdGguc3FydCh0aGlzLmxlbmd0aFNxKCkqYi5sZW5ndGhTcSgpKSwtMSwxKSl9LGRpc3RhbmNlVG86ZnVuY3Rpb24oYil7cmV0dXJuIE1hdGguc3FydCh0aGlzLmRpc3RhbmNlVG9TcXVhcmVkKGIpKX0sZGlzdGFuY2VUb1NxdWFyZWQ6ZnVuY3Rpb24oYil7dmFyIGU9dGhpcy54LWIueCxoPXRoaXMueS1iLnk7Yj10aGlzLnotYi56O3JldHVybiBlKmUraCpoK2IqYn0sbWFuaGF0dGFuRGlzdGFuY2VUbzpmdW5jdGlvbihiKXtyZXR1cm4gTWF0aC5hYnModGhpcy54LWIueCkrTWF0aC5hYnModGhpcy55LWIueSkrTWF0aC5hYnModGhpcy56LWIueil9LHNldEZyb21TcGhlcmljYWw6ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuc2V0RnJvbVNwaGVyaWNhbENvb3JkcyhiLnJhZGl1cyxiLnBoaSxiLnRoZXRhKX0sc2V0RnJvbVNwaGVyaWNhbENvb3JkczpmdW5jdGlvbihiLGUsaCl7dmFyIG49TWF0aC5zaW4oZSkqYjt0aGlzLng9bipNYXRoLnNpbihoKTt0aGlzLnk9TWF0aC5jb3MoZSkqYjsKdGhpcy56PW4qTWF0aC5jb3MoaCk7cmV0dXJuIHRoaXN9LHNldEZyb21DeWxpbmRyaWNhbDpmdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5zZXRGcm9tQ3lsaW5kcmljYWxDb29yZHMoYi5yYWRpdXMsYi50aGV0YSxiLnkpfSxzZXRGcm9tQ3lsaW5kcmljYWxDb29yZHM6ZnVuY3Rpb24oYixlLGgpe3RoaXMueD1iKk1hdGguc2luKGUpO3RoaXMueT1oO3RoaXMuej1iKk1hdGguY29zKGUpO3JldHVybiB0aGlzfSxzZXRGcm9tTWF0cml4UG9zaXRpb246ZnVuY3Rpb24oYil7Yj1iLmVsZW1lbnRzO3RoaXMueD1iWzEyXTt0aGlzLnk9YlsxM107dGhpcy56PWJbMTRdO3JldHVybiB0aGlzfSxzZXRGcm9tTWF0cml4U2NhbGU6ZnVuY3Rpb24oYil7dmFyIGU9dGhpcy5zZXRGcm9tTWF0cml4Q29sdW1uKGIsMCkubGVuZ3RoKCksaD10aGlzLnNldEZyb21NYXRyaXhDb2x1bW4oYiwxKS5sZW5ndGgoKTtiPXRoaXMuc2V0RnJvbU1hdHJpeENvbHVtbihiLDIpLmxlbmd0aCgpO3RoaXMueD1lO3RoaXMueT0KaDt0aGlzLno9YjtyZXR1cm4gdGhpc30sc2V0RnJvbU1hdHJpeENvbHVtbjpmdW5jdGlvbihiLGUpe3JldHVybiB0aGlzLmZyb21BcnJheShiLmVsZW1lbnRzLDQqZSl9LGVxdWFsczpmdW5jdGlvbihiKXtyZXR1cm4gYi54PT09dGhpcy54JiZiLnk9PT10aGlzLnkmJmIuej09PXRoaXMuen0sZnJvbUFycmF5OmZ1bmN0aW9uKGIsZSl7dm9pZCAwPT09ZSYmKGU9MCk7dGhpcy54PWJbZV07dGhpcy55PWJbZSsxXTt0aGlzLno9YltlKzJdO3JldHVybiB0aGlzfSx0b0FycmF5OmZ1bmN0aW9uKGIsZSl7dm9pZCAwPT09YiYmKGI9W10pO3ZvaWQgMD09PWUmJihlPTApO2JbZV09dGhpcy54O2JbZSsxXT10aGlzLnk7YltlKzJdPXRoaXMuejtyZXR1cm4gYn0sZnJvbUJ1ZmZlckF0dHJpYnV0ZTpmdW5jdGlvbihiLGUsaCl7dm9pZCAwIT09aCYmY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiBvZmZzZXQgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIC5mcm9tQnVmZmVyQXR0cmlidXRlKCkuIik7CnRoaXMueD1iLmdldFgoZSk7dGhpcy55PWIuZ2V0WShlKTt0aGlzLno9Yi5nZXRaKGUpO3JldHVybiB0aGlzfX0pO09iamVjdC5hc3NpZ24obC5wcm90b3R5cGUse2lzTWF0cml4MzohMCxzZXQ6ZnVuY3Rpb24oYixlLGgsbix1LHcseixFLEgpe3ZhciBJPXRoaXMuZWxlbWVudHM7SVswXT1iO0lbMV09bjtJWzJdPXo7SVszXT1lO0lbNF09dTtJWzVdPUU7SVs2XT1oO0lbN109dztJWzhdPUg7cmV0dXJuIHRoaXN9LGlkZW50aXR5OmZ1bmN0aW9uKCl7dGhpcy5zZXQoMSwwLDAsMCwxLDAsMCwwLDEpO3JldHVybiB0aGlzfSxjbG9uZTpmdW5jdGlvbigpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuZnJvbUFycmF5KHRoaXMuZWxlbWVudHMpfSxjb3B5OmZ1bmN0aW9uKGIpe3ZhciBlPXRoaXMuZWxlbWVudHM7Yj1iLmVsZW1lbnRzO2VbMF09YlswXTtlWzFdPWJbMV07ZVsyXT1iWzJdO2VbM109YlszXTtlWzRdPWJbNF07ZVs1XT1iWzVdO2VbNl09Yls2XTtlWzddPWJbN107ZVs4XT0KYls4XTtyZXR1cm4gdGhpc30sc2V0RnJvbU1hdHJpeDQ6ZnVuY3Rpb24oYil7Yj1iLmVsZW1lbnRzO3RoaXMuc2V0KGJbMF0sYls0XSxiWzhdLGJbMV0sYls1XSxiWzldLGJbMl0sYls2XSxiWzEwXSk7cmV0dXJuIHRoaXN9LGFwcGx5VG9CdWZmZXJBdHRyaWJ1dGU6ZnVuY3Rpb24oKXt2YXIgYj1uZXcgZztyZXR1cm4gZnVuY3Rpb24oZSl7Zm9yKHZhciBoPTAsbj1lLmNvdW50O2g8bjtoKyspYi54PWUuZ2V0WChoKSxiLnk9ZS5nZXRZKGgpLGIuej1lLmdldFooaCksYi5hcHBseU1hdHJpeDModGhpcyksZS5zZXRYWVooaCxiLngsYi55LGIueik7cmV0dXJuIGV9fSgpLG11bHRpcGx5OmZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLm11bHRpcGx5TWF0cmljZXModGhpcyxiKX0scHJlbXVsdGlwbHk6ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMubXVsdGlwbHlNYXRyaWNlcyhiLHRoaXMpfSxtdWx0aXBseU1hdHJpY2VzOmZ1bmN0aW9uKGIsZSl7dmFyIGg9Yi5lbGVtZW50cyxuPWUuZWxlbWVudHM7CmU9dGhpcy5lbGVtZW50cztiPWhbMF07dmFyIHU9aFszXSx3PWhbNl0sej1oWzFdLEU9aFs0XSxIPWhbN10sST1oWzJdLE89aFs1XTtoPWhbOF07dmFyIFE9blswXSxSPW5bM10sVT1uWzZdLFc9blsxXSxaPW5bNF0sZmE9bls3XSxxYT1uWzJdLHJhPW5bNV07bj1uWzhdO2VbMF09YipRK3UqVyt3KnFhO2VbM109YipSK3UqWit3KnJhO2VbNl09YipVK3UqZmErdypuO2VbMV09eipRK0UqVytIKnFhO2VbNF09eipSK0UqWitIKnJhO2VbN109eipVK0UqZmErSCpuO2VbMl09SSpRK08qVytoKnFhO2VbNV09SSpSK08qWitoKnJhO2VbOF09SSpVK08qZmEraCpuO3JldHVybiB0aGlzfSxtdWx0aXBseVNjYWxhcjpmdW5jdGlvbihiKXt2YXIgZT10aGlzLmVsZW1lbnRzO2VbMF0qPWI7ZVszXSo9YjtlWzZdKj1iO2VbMV0qPWI7ZVs0XSo9YjtlWzddKj1iO2VbMl0qPWI7ZVs1XSo9YjtlWzhdKj1iO3JldHVybiB0aGlzfSxkZXRlcm1pbmFudDpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZWxlbWVudHMsCmU9YlswXSxoPWJbMV0sbj1iWzJdLHU9YlszXSx3PWJbNF0sej1iWzVdLEU9Yls2XSxIPWJbN107Yj1iWzhdO3JldHVybiBlKncqYi1lKnoqSC1oKnUqYitoKnoqRStuKnUqSC1uKncqRX0sZ2V0SW52ZXJzZTpmdW5jdGlvbihiLGUpe2ImJmIuaXNNYXRyaXg0JiZjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXgzOiAuZ2V0SW52ZXJzZSgpIG5vIGxvbmdlciB0YWtlcyBhIE1hdHJpeDQgYXJndW1lbnQuIik7dmFyIGg9Yi5lbGVtZW50cztiPXRoaXMuZWxlbWVudHM7dmFyIG49aFswXSx1PWhbMV0sdz1oWzJdLHo9aFszXSxFPWhbNF0sSD1oWzVdLEk9aFs2XSxPPWhbN107aD1oWzhdO3ZhciBRPWgqRS1IKk8sUj1IKkktaCp6LFU9Typ6LUUqSSxXPW4qUSt1KlIrdypVO2lmKDA9PT1XKXtpZighMD09PWUpdGhyb3cgRXJyb3IoIlRIUkVFLk1hdHJpeDM6IC5nZXRJbnZlcnNlKCkgY2FuJ3QgaW52ZXJ0IG1hdHJpeCwgZGV0ZXJtaW5hbnQgaXMgMCIpO2NvbnNvbGUud2FybigiVEhSRUUuTWF0cml4MzogLmdldEludmVyc2UoKSBjYW4ndCBpbnZlcnQgbWF0cml4LCBkZXRlcm1pbmFudCBpcyAwIik7CnJldHVybiB0aGlzLmlkZW50aXR5KCl9ZT0xL1c7YlswXT1RKmU7YlsxXT0odypPLWgqdSkqZTtiWzJdPShIKnUtdypFKSplO2JbM109UiplO2JbNF09KGgqbi13KkkpKmU7Yls1XT0odyp6LUgqbikqZTtiWzZdPVUqZTtiWzddPSh1KkktTypuKSplO2JbOF09KEUqbi11KnopKmU7cmV0dXJuIHRoaXN9LHRyYW5zcG9zZTpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZWxlbWVudHM7dmFyIGU9YlsxXTtiWzFdPWJbM107YlszXT1lO2U9YlsyXTtiWzJdPWJbNl07Yls2XT1lO2U9Yls1XTtiWzVdPWJbN107Yls3XT1lO3JldHVybiB0aGlzfSxnZXROb3JtYWxNYXRyaXg6ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuc2V0RnJvbU1hdHJpeDQoYikuZ2V0SW52ZXJzZSh0aGlzKS50cmFuc3Bvc2UoKX0sdHJhbnNwb3NlSW50b0FycmF5OmZ1bmN0aW9uKGIpe3ZhciBlPXRoaXMuZWxlbWVudHM7YlswXT1lWzBdO2JbMV09ZVszXTtiWzJdPWVbNl07YlszXT1lWzFdO2JbNF09ZVs0XTtiWzVdPWVbN107Yls2XT0KZVsyXTtiWzddPWVbNV07Yls4XT1lWzhdO3JldHVybiB0aGlzfSxzZXRVdlRyYW5zZm9ybTpmdW5jdGlvbihiLGUsaCxuLHUsdyx6KXt2YXIgRT1NYXRoLmNvcyh1KTt1PU1hdGguc2luKHUpO3RoaXMuc2V0KGgqRSxoKnUsLWgqKEUqdyt1KnopK3crYiwtbip1LG4qRSwtbiooLXUqdytFKnopK3orZSwwLDAsMSl9LHNjYWxlOmZ1bmN0aW9uKGIsZSl7dmFyIGg9dGhpcy5lbGVtZW50cztoWzBdKj1iO2hbM10qPWI7aFs2XSo9YjtoWzFdKj1lO2hbNF0qPWU7aFs3XSo9ZTtyZXR1cm4gdGhpc30scm90YXRlOmZ1bmN0aW9uKGIpe3ZhciBlPU1hdGguY29zKGIpO2I9TWF0aC5zaW4oYik7dmFyIGg9dGhpcy5lbGVtZW50cyxuPWhbMF0sdT1oWzNdLHc9aFs2XSx6PWhbMV0sRT1oWzRdLEg9aFs3XTtoWzBdPWUqbitiKno7aFszXT1lKnUrYipFO2hbNl09ZSp3K2IqSDtoWzFdPS1iKm4rZSp6O2hbNF09LWIqdStlKkU7aFs3XT0tYip3K2UqSDtyZXR1cm4gdGhpc30sdHJhbnNsYXRlOmZ1bmN0aW9uKGIsCmUpe3ZhciBoPXRoaXMuZWxlbWVudHM7aFswXSs9YipoWzJdO2hbM10rPWIqaFs1XTtoWzZdKz1iKmhbOF07aFsxXSs9ZSpoWzJdO2hbNF0rPWUqaFs1XTtoWzddKz1lKmhbOF07cmV0dXJuIHRoaXN9LGVxdWFsczpmdW5jdGlvbihiKXt2YXIgZT10aGlzLmVsZW1lbnRzO2I9Yi5lbGVtZW50cztmb3IodmFyIGg9MDs5Pmg7aCsrKWlmKGVbaF0hPT1iW2hdKXJldHVybiExO3JldHVybiEwfSxmcm9tQXJyYXk6ZnVuY3Rpb24oYixlKXt2b2lkIDA9PT1lJiYoZT0wKTtmb3IodmFyIGg9MDs5Pmg7aCsrKXRoaXMuZWxlbWVudHNbaF09YltoK2VdO3JldHVybiB0aGlzfSx0b0FycmF5OmZ1bmN0aW9uKGIsZSl7dm9pZCAwPT09YiYmKGI9W10pO3ZvaWQgMD09PWUmJihlPTApO3ZhciBoPXRoaXMuZWxlbWVudHM7YltlXT1oWzBdO2JbZSsxXT1oWzFdO2JbZSsyXT1oWzJdO2JbZSszXT1oWzNdO2JbZSs0XT1oWzRdO2JbZSs1XT1oWzVdO2JbZSs2XT1oWzZdO2JbZSs3XT1oWzddO2JbZSs4XT1oWzhdOwpyZXR1cm4gYn19KTt2YXIgc2YsWWQ9e2dldERhdGFVUkw6ZnVuY3Rpb24oYil7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBIVE1MQ2FudmFzRWxlbWVudClyZXR1cm4gYi5zcmM7aWYoIShiIGluc3RhbmNlb2YgSFRNTENhbnZhc0VsZW1lbnQpKXt2b2lkIDA9PT1zZiYmKHNmPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIsImNhbnZhcyIpKTtzZi53aWR0aD1iLndpZHRoO3NmLmhlaWdodD1iLmhlaWdodDt2YXIgZT1zZi5nZXRDb250ZXh0KCIyZCIpO2IgaW5zdGFuY2VvZiBJbWFnZURhdGE/ZS5wdXRJbWFnZURhdGEoYiwwLDApOmUuZHJhd0ltYWdlKGIsMCwwLGIud2lkdGgsYi5oZWlnaHQpO2I9c2Z9cmV0dXJuIDIwNDg8Yi53aWR0aHx8MjA0ODxiLmhlaWdodD9iLnRvRGF0YVVSTCgiaW1hZ2UvanBlZyIsLjYpOmIudG9EYXRhVVJMKCJpbWFnZS9wbmciKX19LEtuPTA7ay5ERUZBVUxUX0lNQUdFPXZvaWQgMDtrLkRFRkFVTFRfTUFQUElORz0KMzAwO2sucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShjLnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOmssaXNUZXh0dXJlOiEwLHVwZGF0ZU1hdHJpeDpmdW5jdGlvbigpe3RoaXMubWF0cml4LnNldFV2VHJhbnNmb3JtKHRoaXMub2Zmc2V0LngsdGhpcy5vZmZzZXQueSx0aGlzLnJlcGVhdC54LHRoaXMucmVwZWF0LnksdGhpcy5yb3RhdGlvbix0aGlzLmNlbnRlci54LHRoaXMuY2VudGVyLnkpfSxjbG9uZTpmdW5jdGlvbigpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX0sY29weTpmdW5jdGlvbihiKXt0aGlzLm5hbWU9Yi5uYW1lO3RoaXMuaW1hZ2U9Yi5pbWFnZTt0aGlzLm1pcG1hcHM9Yi5taXBtYXBzLnNsaWNlKDApO3RoaXMubWFwcGluZz1iLm1hcHBpbmc7dGhpcy53cmFwUz1iLndyYXBTO3RoaXMud3JhcFQ9Yi53cmFwVDt0aGlzLm1hZ0ZpbHRlcj1iLm1hZ0ZpbHRlcjt0aGlzLm1pbkZpbHRlcj1iLm1pbkZpbHRlcjt0aGlzLmFuaXNvdHJvcHk9CmIuYW5pc290cm9weTt0aGlzLmZvcm1hdD1iLmZvcm1hdDt0aGlzLnR5cGU9Yi50eXBlO3RoaXMub2Zmc2V0LmNvcHkoYi5vZmZzZXQpO3RoaXMucmVwZWF0LmNvcHkoYi5yZXBlYXQpO3RoaXMuY2VudGVyLmNvcHkoYi5jZW50ZXIpO3RoaXMucm90YXRpb249Yi5yb3RhdGlvbjt0aGlzLm1hdHJpeEF1dG9VcGRhdGU9Yi5tYXRyaXhBdXRvVXBkYXRlO3RoaXMubWF0cml4LmNvcHkoYi5tYXRyaXgpO3RoaXMuZ2VuZXJhdGVNaXBtYXBzPWIuZ2VuZXJhdGVNaXBtYXBzO3RoaXMucHJlbXVsdGlwbHlBbHBoYT1iLnByZW11bHRpcGx5QWxwaGE7dGhpcy5mbGlwWT1iLmZsaXBZO3RoaXMudW5wYWNrQWxpZ25tZW50PWIudW5wYWNrQWxpZ25tZW50O3RoaXMuZW5jb2Rpbmc9Yi5lbmNvZGluZztyZXR1cm4gdGhpc30sdG9KU09OOmZ1bmN0aW9uKGIpe3ZhciBlPXZvaWQgMD09PWJ8fCJzdHJpbmciPT09dHlwZW9mIGI7aWYoIWUmJnZvaWQgMCE9PWIudGV4dHVyZXNbdGhpcy51dWlkXSlyZXR1cm4gYi50ZXh0dXJlc1t0aGlzLnV1aWRdOwp2YXIgaD17bWV0YWRhdGE6e3ZlcnNpb246NC41LHR5cGU6IlRleHR1cmUiLGdlbmVyYXRvcjoiVGV4dHVyZS50b0pTT04ifSx1dWlkOnRoaXMudXVpZCxuYW1lOnRoaXMubmFtZSxtYXBwaW5nOnRoaXMubWFwcGluZyxyZXBlYXQ6W3RoaXMucmVwZWF0LngsdGhpcy5yZXBlYXQueV0sb2Zmc2V0Olt0aGlzLm9mZnNldC54LHRoaXMub2Zmc2V0LnldLGNlbnRlcjpbdGhpcy5jZW50ZXIueCx0aGlzLmNlbnRlci55XSxyb3RhdGlvbjp0aGlzLnJvdGF0aW9uLHdyYXA6W3RoaXMud3JhcFMsdGhpcy53cmFwVF0sZm9ybWF0OnRoaXMuZm9ybWF0LHR5cGU6dGhpcy50eXBlLGVuY29kaW5nOnRoaXMuZW5jb2RpbmcsbWluRmlsdGVyOnRoaXMubWluRmlsdGVyLG1hZ0ZpbHRlcjp0aGlzLm1hZ0ZpbHRlcixhbmlzb3Ryb3B5OnRoaXMuYW5pc290cm9weSxmbGlwWTp0aGlzLmZsaXBZLHByZW11bHRpcGx5QWxwaGE6dGhpcy5wcmVtdWx0aXBseUFscGhhLHVucGFja0FsaWdubWVudDp0aGlzLnVucGFja0FsaWdubWVudH07CmlmKHZvaWQgMCE9PXRoaXMuaW1hZ2Upe3ZhciBuPXRoaXMuaW1hZ2U7dm9pZCAwPT09bi51dWlkJiYobi51dWlkPW9iLmdlbmVyYXRlVVVJRCgpKTtpZighZSYmdm9pZCAwPT09Yi5pbWFnZXNbbi51dWlkXSl7aWYoQXJyYXkuaXNBcnJheShuKSl7dmFyIHU9W107Zm9yKHZhciB3PTAsej1uLmxlbmd0aDt3PHo7dysrKXUucHVzaChZZC5nZXREYXRhVVJMKG5bd10pKX1lbHNlIHU9WWQuZ2V0RGF0YVVSTChuKTtiLmltYWdlc1tuLnV1aWRdPXt1dWlkOm4udXVpZCx1cmw6dX19aC5pbWFnZT1uLnV1aWR9ZXx8KGIudGV4dHVyZXNbdGhpcy51dWlkXT1oKTtyZXR1cm4gaH0sZGlzcG9zZTpmdW5jdGlvbigpe3RoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZToiZGlzcG9zZSJ9KX0sdHJhbnNmb3JtVXY6ZnVuY3Rpb24oYil7aWYoMzAwIT09dGhpcy5tYXBwaW5nKXJldHVybiBiO2IuYXBwbHlNYXRyaXgzKHRoaXMubWF0cml4KTtpZigwPmIueHx8MTxiLngpc3dpdGNoKHRoaXMud3JhcFMpe2Nhc2UgMUUzOmIueC09Ck1hdGguZmxvb3IoYi54KTticmVhaztjYXNlIDEwMDE6Yi54PTA+Yi54PzA6MTticmVhaztjYXNlIDEwMDI6Yi54PTE9PT1NYXRoLmFicyhNYXRoLmZsb29yKGIueCklMik/TWF0aC5jZWlsKGIueCktYi54OmIueC1NYXRoLmZsb29yKGIueCl9aWYoMD5iLnl8fDE8Yi55KXN3aXRjaCh0aGlzLndyYXBUKXtjYXNlIDFFMzpiLnktPU1hdGguZmxvb3IoYi55KTticmVhaztjYXNlIDEwMDE6Yi55PTA+Yi55PzA6MTticmVhaztjYXNlIDEwMDI6Yi55PTE9PT1NYXRoLmFicyhNYXRoLmZsb29yKGIueSklMik/TWF0aC5jZWlsKGIueSktYi55OmIueS1NYXRoLmZsb29yKGIueSl9dGhpcy5mbGlwWSYmKGIueT0xLWIueSk7cmV0dXJuIGJ9fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGsucHJvdG90eXBlLCJuZWVkc1VwZGF0ZSIse3NldDpmdW5jdGlvbihiKXshMD09PWImJnRoaXMudmVyc2lvbisrfX0pO09iamVjdC5hc3NpZ24obS5wcm90b3R5cGUse2lzVmVjdG9yNDohMCxzZXQ6ZnVuY3Rpb24oYiwKZSxoLG4pe3RoaXMueD1iO3RoaXMueT1lO3RoaXMuej1oO3RoaXMudz1uO3JldHVybiB0aGlzfSxzZXRTY2FsYXI6ZnVuY3Rpb24oYil7dGhpcy53PXRoaXMuej10aGlzLnk9dGhpcy54PWI7cmV0dXJuIHRoaXN9LHNldFg6ZnVuY3Rpb24oYil7dGhpcy54PWI7cmV0dXJuIHRoaXN9LHNldFk6ZnVuY3Rpb24oYil7dGhpcy55PWI7cmV0dXJuIHRoaXN9LHNldFo6ZnVuY3Rpb24oYil7dGhpcy56PWI7cmV0dXJuIHRoaXN9LHNldFc6ZnVuY3Rpb24oYil7dGhpcy53PWI7cmV0dXJuIHRoaXN9LHNldENvbXBvbmVudDpmdW5jdGlvbihiLGUpe3N3aXRjaChiKXtjYXNlIDA6dGhpcy54PWU7YnJlYWs7Y2FzZSAxOnRoaXMueT1lO2JyZWFrO2Nhc2UgMjp0aGlzLno9ZTticmVhaztjYXNlIDM6dGhpcy53PWU7YnJlYWs7ZGVmYXVsdDp0aHJvdyBFcnJvcigiaW5kZXggaXMgb3V0IG9mIHJhbmdlOiAiK2IpO31yZXR1cm4gdGhpc30sZ2V0Q29tcG9uZW50OmZ1bmN0aW9uKGIpe3N3aXRjaChiKXtjYXNlIDA6cmV0dXJuIHRoaXMueDsKY2FzZSAxOnJldHVybiB0aGlzLnk7Y2FzZSAyOnJldHVybiB0aGlzLno7Y2FzZSAzOnJldHVybiB0aGlzLnc7ZGVmYXVsdDp0aHJvdyBFcnJvcigiaW5kZXggaXMgb3V0IG9mIHJhbmdlOiAiK2IpO319LGNsb25lOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMueCx0aGlzLnksdGhpcy56LHRoaXMudyl9LGNvcHk6ZnVuY3Rpb24oYil7dGhpcy54PWIueDt0aGlzLnk9Yi55O3RoaXMuej1iLno7dGhpcy53PXZvaWQgMCE9PWIudz9iLnc6MTtyZXR1cm4gdGhpc30sYWRkOmZ1bmN0aW9uKGIsZSl7aWYodm9pZCAwIT09ZSlyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3I0OiAuYWRkKCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAuYWRkVmVjdG9ycyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5hZGRWZWN0b3JzKGIsZSk7dGhpcy54Kz1iLng7dGhpcy55Kz1iLnk7dGhpcy56Kz1iLno7dGhpcy53Kz1iLnc7cmV0dXJuIHRoaXN9LAphZGRTY2FsYXI6ZnVuY3Rpb24oYil7dGhpcy54Kz1iO3RoaXMueSs9Yjt0aGlzLnorPWI7dGhpcy53Kz1iO3JldHVybiB0aGlzfSxhZGRWZWN0b3JzOmZ1bmN0aW9uKGIsZSl7dGhpcy54PWIueCtlLng7dGhpcy55PWIueStlLnk7dGhpcy56PWIueitlLno7dGhpcy53PWIudytlLnc7cmV0dXJuIHRoaXN9LGFkZFNjYWxlZFZlY3RvcjpmdW5jdGlvbihiLGUpe3RoaXMueCs9Yi54KmU7dGhpcy55Kz1iLnkqZTt0aGlzLnorPWIueiplO3RoaXMudys9Yi53KmU7cmV0dXJuIHRoaXN9LHN1YjpmdW5jdGlvbihiLGUpe2lmKHZvaWQgMCE9PWUpcmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yNDogLnN1YigpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLnN1YlZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMuc3ViVmVjdG9ycyhiLGUpO3RoaXMueC09Yi54O3RoaXMueS09Yi55O3RoaXMuei09Yi56O3RoaXMudy09Yi53O3JldHVybiB0aGlzfSxzdWJTY2FsYXI6ZnVuY3Rpb24oYil7dGhpcy54LT0KYjt0aGlzLnktPWI7dGhpcy56LT1iO3RoaXMudy09YjtyZXR1cm4gdGhpc30sc3ViVmVjdG9yczpmdW5jdGlvbihiLGUpe3RoaXMueD1iLngtZS54O3RoaXMueT1iLnktZS55O3RoaXMuej1iLnotZS56O3RoaXMudz1iLnctZS53O3JldHVybiB0aGlzfSxtdWx0aXBseVNjYWxhcjpmdW5jdGlvbihiKXt0aGlzLngqPWI7dGhpcy55Kj1iO3RoaXMueio9Yjt0aGlzLncqPWI7cmV0dXJuIHRoaXN9LGFwcGx5TWF0cml4NDpmdW5jdGlvbihiKXt2YXIgZT10aGlzLngsaD10aGlzLnksbj10aGlzLnosdT10aGlzLnc7Yj1iLmVsZW1lbnRzO3RoaXMueD1iWzBdKmUrYls0XSpoK2JbOF0qbitiWzEyXSp1O3RoaXMueT1iWzFdKmUrYls1XSpoK2JbOV0qbitiWzEzXSp1O3RoaXMuej1iWzJdKmUrYls2XSpoK2JbMTBdKm4rYlsxNF0qdTt0aGlzLnc9YlszXSplK2JbN10qaCtiWzExXSpuK2JbMTVdKnU7cmV0dXJuIHRoaXN9LGRpdmlkZVNjYWxhcjpmdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5tdWx0aXBseVNjYWxhcigxLwpiKX0sc2V0QXhpc0FuZ2xlRnJvbVF1YXRlcm5pb246ZnVuY3Rpb24oYil7dGhpcy53PTIqTWF0aC5hY29zKGIudyk7dmFyIGU9TWF0aC5zcXJ0KDEtYi53KmIudyk7MUUtND5lPyh0aGlzLng9MSx0aGlzLno9dGhpcy55PTApOih0aGlzLng9Yi54L2UsdGhpcy55PWIueS9lLHRoaXMuej1iLnovZSk7cmV0dXJuIHRoaXN9LHNldEF4aXNBbmdsZUZyb21Sb3RhdGlvbk1hdHJpeDpmdW5jdGlvbihiKXtiPWIuZWxlbWVudHM7dmFyIGU9YlswXTt2YXIgaD1iWzRdO3ZhciBuPWJbOF0sdT1iWzFdLHc9Yls1XSx6PWJbOV07dmFyIEU9YlsyXTt2YXIgSD1iWzZdO3ZhciBJPWJbMTBdO2lmKC4wMT5NYXRoLmFicyhoLXUpJiYuMDE+TWF0aC5hYnMobi1FKSYmLjAxPk1hdGguYWJzKHotSCkpe2lmKC4xPk1hdGguYWJzKGgrdSkmJi4xPk1hdGguYWJzKG4rRSkmJi4xPk1hdGguYWJzKHorSCkmJi4xPk1hdGguYWJzKGUrdytJLTMpKXJldHVybiB0aGlzLnNldCgxLDAsMCwwKSx0aGlzO2I9TWF0aC5QSTsKZT0oZSsxKS8yO3c9KHcrMSkvMjtJPShJKzEpLzI7aD0oaCt1KS80O249KG4rRSkvNDt6PSh6K0gpLzQ7ZT53JiZlPkk/LjAxPmU/KEg9MCxoPUU9LjcwNzEwNjc4MSk6KEg9TWF0aC5zcXJ0KGUpLEU9aC9ILGg9bi9IKTp3Pkk/LjAxPnc/KEg9LjcwNzEwNjc4MSxFPTAsaD0uNzA3MTA2NzgxKTooRT1NYXRoLnNxcnQodyksSD1oL0UsaD16L0UpOi4wMT5JPyhFPUg9LjcwNzEwNjc4MSxoPTApOihoPU1hdGguc3FydChJKSxIPW4vaCxFPXovaCk7dGhpcy5zZXQoSCxFLGgsYik7cmV0dXJuIHRoaXN9Yj1NYXRoLnNxcnQoKEgteikqKEgteikrKG4tRSkqKG4tRSkrKHUtaCkqKHUtaCkpOy4wMDE+TWF0aC5hYnMoYikmJihiPTEpO3RoaXMueD0oSC16KS9iO3RoaXMueT0obi1FKS9iO3RoaXMuej0odS1oKS9iO3RoaXMudz1NYXRoLmFjb3MoKGUrdytJLTEpLzIpO3JldHVybiB0aGlzfSxtaW46ZnVuY3Rpb24oYil7dGhpcy54PU1hdGgubWluKHRoaXMueCxiLngpO3RoaXMueT1NYXRoLm1pbih0aGlzLnksCmIueSk7dGhpcy56PU1hdGgubWluKHRoaXMueixiLnopO3RoaXMudz1NYXRoLm1pbih0aGlzLncsYi53KTtyZXR1cm4gdGhpc30sbWF4OmZ1bmN0aW9uKGIpe3RoaXMueD1NYXRoLm1heCh0aGlzLngsYi54KTt0aGlzLnk9TWF0aC5tYXgodGhpcy55LGIueSk7dGhpcy56PU1hdGgubWF4KHRoaXMueixiLnopO3RoaXMudz1NYXRoLm1heCh0aGlzLncsYi53KTtyZXR1cm4gdGhpc30sY2xhbXA6ZnVuY3Rpb24oYixlKXt0aGlzLng9TWF0aC5tYXgoYi54LE1hdGgubWluKGUueCx0aGlzLngpKTt0aGlzLnk9TWF0aC5tYXgoYi55LE1hdGgubWluKGUueSx0aGlzLnkpKTt0aGlzLno9TWF0aC5tYXgoYi56LE1hdGgubWluKGUueix0aGlzLnopKTt0aGlzLnc9TWF0aC5tYXgoYi53LE1hdGgubWluKGUudyx0aGlzLncpKTtyZXR1cm4gdGhpc30sY2xhbXBTY2FsYXI6ZnVuY3Rpb24oKXt2YXIgYixlO3JldHVybiBmdW5jdGlvbihoLG4pe3ZvaWQgMD09PWImJihiPW5ldyBtLGU9bmV3IG0pO2Iuc2V0KGgsCmgsaCxoKTtlLnNldChuLG4sbixuKTtyZXR1cm4gdGhpcy5jbGFtcChiLGUpfX0oKSxjbGFtcExlbmd0aDpmdW5jdGlvbihiLGUpe3ZhciBoPXRoaXMubGVuZ3RoKCk7cmV0dXJuIHRoaXMuZGl2aWRlU2NhbGFyKGh8fDEpLm11bHRpcGx5U2NhbGFyKE1hdGgubWF4KGIsTWF0aC5taW4oZSxoKSkpfSxmbG9vcjpmdW5jdGlvbigpe3RoaXMueD1NYXRoLmZsb29yKHRoaXMueCk7dGhpcy55PU1hdGguZmxvb3IodGhpcy55KTt0aGlzLno9TWF0aC5mbG9vcih0aGlzLnopO3RoaXMudz1NYXRoLmZsb29yKHRoaXMudyk7cmV0dXJuIHRoaXN9LGNlaWw6ZnVuY3Rpb24oKXt0aGlzLng9TWF0aC5jZWlsKHRoaXMueCk7dGhpcy55PU1hdGguY2VpbCh0aGlzLnkpO3RoaXMuej1NYXRoLmNlaWwodGhpcy56KTt0aGlzLnc9TWF0aC5jZWlsKHRoaXMudyk7cmV0dXJuIHRoaXN9LHJvdW5kOmZ1bmN0aW9uKCl7dGhpcy54PU1hdGgucm91bmQodGhpcy54KTt0aGlzLnk9TWF0aC5yb3VuZCh0aGlzLnkpOwp0aGlzLno9TWF0aC5yb3VuZCh0aGlzLnopO3RoaXMudz1NYXRoLnJvdW5kKHRoaXMudyk7cmV0dXJuIHRoaXN9LHJvdW5kVG9aZXJvOmZ1bmN0aW9uKCl7dGhpcy54PTA+dGhpcy54P01hdGguY2VpbCh0aGlzLngpOk1hdGguZmxvb3IodGhpcy54KTt0aGlzLnk9MD50aGlzLnk/TWF0aC5jZWlsKHRoaXMueSk6TWF0aC5mbG9vcih0aGlzLnkpO3RoaXMuej0wPnRoaXMuej9NYXRoLmNlaWwodGhpcy56KTpNYXRoLmZsb29yKHRoaXMueik7dGhpcy53PTA+dGhpcy53P01hdGguY2VpbCh0aGlzLncpOk1hdGguZmxvb3IodGhpcy53KTtyZXR1cm4gdGhpc30sbmVnYXRlOmZ1bmN0aW9uKCl7dGhpcy54PS10aGlzLng7dGhpcy55PS10aGlzLnk7dGhpcy56PS10aGlzLno7dGhpcy53PS10aGlzLnc7cmV0dXJuIHRoaXN9LGRvdDpmdW5jdGlvbihiKXtyZXR1cm4gdGhpcy54KmIueCt0aGlzLnkqYi55K3RoaXMueipiLnordGhpcy53KmIud30sbGVuZ3RoU3E6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54Kgp0aGlzLngrdGhpcy55KnRoaXMueSt0aGlzLnoqdGhpcy56K3RoaXMudyp0aGlzLnd9LGxlbmd0aDpmdW5jdGlvbigpe3JldHVybiBNYXRoLnNxcnQodGhpcy54KnRoaXMueCt0aGlzLnkqdGhpcy55K3RoaXMueip0aGlzLnordGhpcy53KnRoaXMudyl9LG1hbmhhdHRhbkxlbmd0aDpmdW5jdGlvbigpe3JldHVybiBNYXRoLmFicyh0aGlzLngpK01hdGguYWJzKHRoaXMueSkrTWF0aC5hYnModGhpcy56KStNYXRoLmFicyh0aGlzLncpfSxub3JtYWxpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kaXZpZGVTY2FsYXIodGhpcy5sZW5ndGgoKXx8MSl9LHNldExlbmd0aDpmdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5ub3JtYWxpemUoKS5tdWx0aXBseVNjYWxhcihiKX0sbGVycDpmdW5jdGlvbihiLGUpe3RoaXMueCs9KGIueC10aGlzLngpKmU7dGhpcy55Kz0oYi55LXRoaXMueSkqZTt0aGlzLnorPShiLnotdGhpcy56KSplO3RoaXMudys9KGIudy10aGlzLncpKmU7cmV0dXJuIHRoaXN9LGxlcnBWZWN0b3JzOmZ1bmN0aW9uKGIsCmUsaCl7cmV0dXJuIHRoaXMuc3ViVmVjdG9ycyhlLGIpLm11bHRpcGx5U2NhbGFyKGgpLmFkZChiKX0sZXF1YWxzOmZ1bmN0aW9uKGIpe3JldHVybiBiLng9PT10aGlzLngmJmIueT09PXRoaXMueSYmYi56PT09dGhpcy56JiZiLnc9PT10aGlzLnd9LGZyb21BcnJheTpmdW5jdGlvbihiLGUpe3ZvaWQgMD09PWUmJihlPTApO3RoaXMueD1iW2VdO3RoaXMueT1iW2UrMV07dGhpcy56PWJbZSsyXTt0aGlzLnc9YltlKzNdO3JldHVybiB0aGlzfSx0b0FycmF5OmZ1bmN0aW9uKGIsZSl7dm9pZCAwPT09YiYmKGI9W10pO3ZvaWQgMD09PWUmJihlPTApO2JbZV09dGhpcy54O2JbZSsxXT10aGlzLnk7YltlKzJdPXRoaXMuejtiW2UrM109dGhpcy53O3JldHVybiBifSxmcm9tQnVmZmVyQXR0cmlidXRlOmZ1bmN0aW9uKGIsZSxoKXt2b2lkIDAhPT1oJiZjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjQ6IG9mZnNldCBoYXMgYmVlbiByZW1vdmVkIGZyb20gLmZyb21CdWZmZXJBdHRyaWJ1dGUoKS4iKTsKdGhpcy54PWIuZ2V0WChlKTt0aGlzLnk9Yi5nZXRZKGUpO3RoaXMuej1iLmdldFooZSk7dGhpcy53PWIuZ2V0VyhlKTtyZXR1cm4gdGhpc319KTtwLnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoYy5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpwLGlzV2ViR0xSZW5kZXJUYXJnZXQ6ITAsc2V0U2l6ZTpmdW5jdGlvbihiLGUpe2lmKHRoaXMud2lkdGghPT1ifHx0aGlzLmhlaWdodCE9PWUpdGhpcy53aWR0aD1iLHRoaXMuaGVpZ2h0PWUsdGhpcy5kaXNwb3NlKCk7dGhpcy52aWV3cG9ydC5zZXQoMCwwLGIsZSk7dGhpcy5zY2lzc29yLnNldCgwLDAsYixlKX0sY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9LGNvcHk6ZnVuY3Rpb24oYil7dGhpcy53aWR0aD1iLndpZHRoO3RoaXMuaGVpZ2h0PWIuaGVpZ2h0O3RoaXMudmlld3BvcnQuY29weShiLnZpZXdwb3J0KTt0aGlzLnRleHR1cmU9Yi50ZXh0dXJlLmNsb25lKCk7CnRoaXMuZGVwdGhCdWZmZXI9Yi5kZXB0aEJ1ZmZlcjt0aGlzLnN0ZW5jaWxCdWZmZXI9Yi5zdGVuY2lsQnVmZmVyO3RoaXMuZGVwdGhUZXh0dXJlPWIuZGVwdGhUZXh0dXJlO3JldHVybiB0aGlzfSxkaXNwb3NlOmZ1bmN0aW9uKCl7dGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiJkaXNwb3NlIn0pfX0pO3EucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShwLnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOnEsaXNXZWJHTE11bHRpc2FtcGxlUmVuZGVyVGFyZ2V0OiEwLGNvcHk6ZnVuY3Rpb24oYil7cC5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsYik7dGhpcy5zYW1wbGVzPWIuc2FtcGxlcztyZXR1cm4gdGhpc319KTtyLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHAucHJvdG90eXBlKTtyLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1yO3IucHJvdG90eXBlLmlzV2ViR0xSZW5kZXJUYXJnZXRDdWJlPSEwO3QucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoay5wcm90b3R5cGUpOwp0LnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj10O3QucHJvdG90eXBlLmlzRGF0YVRleHR1cmU9ITA7T2JqZWN0LmFzc2lnbih2LnByb3RvdHlwZSx7aXNCb3gzOiEwLHNldDpmdW5jdGlvbihiLGUpe3RoaXMubWluLmNvcHkoYik7dGhpcy5tYXguY29weShlKTtyZXR1cm4gdGhpc30sc2V0RnJvbUFycmF5OmZ1bmN0aW9uKGIpe2Zvcih2YXIgZT1JbmZpbml0eSxoPUluZmluaXR5LG49SW5maW5pdHksdT0tSW5maW5pdHksdz0tSW5maW5pdHksej0tSW5maW5pdHksRT0wLEg9Yi5sZW5ndGg7RTxIO0UrPTMpe3ZhciBJPWJbRV0sTz1iW0UrMV0sUT1iW0UrMl07STxlJiYoZT1JKTtPPGgmJihoPU8pO1E8biYmKG49USk7ST51JiYodT1JKTtPPncmJih3PU8pO1E+eiYmKHo9USl9dGhpcy5taW4uc2V0KGUsaCxuKTt0aGlzLm1heC5zZXQodSx3LHopO3JldHVybiB0aGlzfSxzZXRGcm9tQnVmZmVyQXR0cmlidXRlOmZ1bmN0aW9uKGIpe2Zvcih2YXIgZT1JbmZpbml0eSxoPUluZmluaXR5LG49SW5maW5pdHksCnU9LUluZmluaXR5LHc9LUluZmluaXR5LHo9LUluZmluaXR5LEU9MCxIPWIuY291bnQ7RTxIO0UrKyl7dmFyIEk9Yi5nZXRYKEUpLE89Yi5nZXRZKEUpLFE9Yi5nZXRaKEUpO0k8ZSYmKGU9SSk7TzxoJiYoaD1PKTtRPG4mJihuPVEpO0k+dSYmKHU9SSk7Tz53JiYodz1PKTtRPnomJih6PVEpfXRoaXMubWluLnNldChlLGgsbik7dGhpcy5tYXguc2V0KHUsdyx6KTtyZXR1cm4gdGhpc30sc2V0RnJvbVBvaW50czpmdW5jdGlvbihiKXt0aGlzLm1ha2VFbXB0eSgpO2Zvcih2YXIgZT0wLGg9Yi5sZW5ndGg7ZTxoO2UrKyl0aGlzLmV4cGFuZEJ5UG9pbnQoYltlXSk7cmV0dXJuIHRoaXN9LHNldEZyb21DZW50ZXJBbmRTaXplOmZ1bmN0aW9uKCl7dmFyIGI9bmV3IGc7cmV0dXJuIGZ1bmN0aW9uKGUsaCl7aD1iLmNvcHkoaCkubXVsdGlwbHlTY2FsYXIoLjUpO3RoaXMubWluLmNvcHkoZSkuc3ViKGgpO3RoaXMubWF4LmNvcHkoZSkuYWRkKGgpO3JldHVybiB0aGlzfX0oKSxzZXRGcm9tT2JqZWN0OmZ1bmN0aW9uKGIpe3RoaXMubWFrZUVtcHR5KCk7CnJldHVybiB0aGlzLmV4cGFuZEJ5T2JqZWN0KGIpfSxjbG9uZTpmdW5jdGlvbigpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX0sY29weTpmdW5jdGlvbihiKXt0aGlzLm1pbi5jb3B5KGIubWluKTt0aGlzLm1heC5jb3B5KGIubWF4KTtyZXR1cm4gdGhpc30sbWFrZUVtcHR5OmZ1bmN0aW9uKCl7dGhpcy5taW4ueD10aGlzLm1pbi55PXRoaXMubWluLno9SW5maW5pdHk7dGhpcy5tYXgueD10aGlzLm1heC55PXRoaXMubWF4Lno9LUluZmluaXR5O3JldHVybiB0aGlzfSxpc0VtcHR5OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWF4Lng8dGhpcy5taW4ueHx8dGhpcy5tYXgueTx0aGlzLm1pbi55fHx0aGlzLm1heC56PHRoaXMubWluLnp9LGdldENlbnRlcjpmdW5jdGlvbihiKXt2b2lkIDA9PT1iJiYoY29uc29sZS53YXJuKCJUSFJFRS5Cb3gzOiAuZ2V0Q2VudGVyKCkgdGFyZ2V0IGlzIG5vdyByZXF1aXJlZCIpLGI9bmV3IGcpO3JldHVybiB0aGlzLmlzRW1wdHkoKT8KYi5zZXQoMCwwLDApOmIuYWRkVmVjdG9ycyh0aGlzLm1pbix0aGlzLm1heCkubXVsdGlwbHlTY2FsYXIoLjUpfSxnZXRTaXplOmZ1bmN0aW9uKGIpe3ZvaWQgMD09PWImJihjb25zb2xlLndhcm4oIlRIUkVFLkJveDM6IC5nZXRTaXplKCkgdGFyZ2V0IGlzIG5vdyByZXF1aXJlZCIpLGI9bmV3IGcpO3JldHVybiB0aGlzLmlzRW1wdHkoKT9iLnNldCgwLDAsMCk6Yi5zdWJWZWN0b3JzKHRoaXMubWF4LHRoaXMubWluKX0sZXhwYW5kQnlQb2ludDpmdW5jdGlvbihiKXt0aGlzLm1pbi5taW4oYik7dGhpcy5tYXgubWF4KGIpO3JldHVybiB0aGlzfSxleHBhbmRCeVZlY3RvcjpmdW5jdGlvbihiKXt0aGlzLm1pbi5zdWIoYik7dGhpcy5tYXguYWRkKGIpO3JldHVybiB0aGlzfSxleHBhbmRCeVNjYWxhcjpmdW5jdGlvbihiKXt0aGlzLm1pbi5hZGRTY2FsYXIoLWIpO3RoaXMubWF4LmFkZFNjYWxhcihiKTtyZXR1cm4gdGhpc30sZXhwYW5kQnlPYmplY3Q6ZnVuY3Rpb24oKXtmdW5jdGlvbiBiKHcpe3ZhciB6PQp3Lmdlb21ldHJ5O2lmKHZvaWQgMCE9PXopaWYoei5pc0dlb21ldHJ5KWZvcih6PXoudmVydGljZXMsaD0wLG49ei5sZW5ndGg7aDxuO2grKyl1LmNvcHkoeltoXSksdS5hcHBseU1hdHJpeDQody5tYXRyaXhXb3JsZCksZS5leHBhbmRCeVBvaW50KHUpO2Vsc2UgaWYoei5pc0J1ZmZlckdlb21ldHJ5JiYoej16LmF0dHJpYnV0ZXMucG9zaXRpb24sdm9pZCAwIT09eikpZm9yKGg9MCxuPXouY291bnQ7aDxuO2grKyl1LmZyb21CdWZmZXJBdHRyaWJ1dGUoeixoKS5hcHBseU1hdHJpeDQody5tYXRyaXhXb3JsZCksZS5leHBhbmRCeVBvaW50KHUpfXZhciBlLGgsbix1PW5ldyBnO3JldHVybiBmdW5jdGlvbih3KXtlPXRoaXM7dy51cGRhdGVNYXRyaXhXb3JsZCghMCk7dy50cmF2ZXJzZShiKTtyZXR1cm4gdGhpc319KCksY29udGFpbnNQb2ludDpmdW5jdGlvbihiKXtyZXR1cm4gYi54PHRoaXMubWluLnh8fGIueD50aGlzLm1heC54fHxiLnk8dGhpcy5taW4ueXx8Yi55PnRoaXMubWF4Lnl8fApiLno8dGhpcy5taW4uenx8Yi56PnRoaXMubWF4Lno/ITE6ITB9LGNvbnRhaW5zQm94OmZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLm1pbi54PD1iLm1pbi54JiZiLm1heC54PD10aGlzLm1heC54JiZ0aGlzLm1pbi55PD1iLm1pbi55JiZiLm1heC55PD10aGlzLm1heC55JiZ0aGlzLm1pbi56PD1iLm1pbi56JiZiLm1heC56PD10aGlzLm1heC56fSxnZXRQYXJhbWV0ZXI6ZnVuY3Rpb24oYixlKXt2b2lkIDA9PT1lJiYoY29uc29sZS53YXJuKCJUSFJFRS5Cb3gzOiAuZ2V0UGFyYW1ldGVyKCkgdGFyZ2V0IGlzIG5vdyByZXF1aXJlZCIpLGU9bmV3IGcpO3JldHVybiBlLnNldCgoYi54LXRoaXMubWluLngpLyh0aGlzLm1heC54LXRoaXMubWluLngpLChiLnktdGhpcy5taW4ueSkvKHRoaXMubWF4LnktdGhpcy5taW4ueSksKGIuei10aGlzLm1pbi56KS8odGhpcy5tYXguei10aGlzLm1pbi56KSl9LGludGVyc2VjdHNCb3g6ZnVuY3Rpb24oYil7cmV0dXJuIGIubWF4Lng8dGhpcy5taW4ueHx8CmIubWluLng+dGhpcy5tYXgueHx8Yi5tYXgueTx0aGlzLm1pbi55fHxiLm1pbi55PnRoaXMubWF4Lnl8fGIubWF4Lno8dGhpcy5taW4uenx8Yi5taW4uej50aGlzLm1heC56PyExOiEwfSxpbnRlcnNlY3RzU3BoZXJlOmZ1bmN0aW9uKCl7dmFyIGI9bmV3IGc7cmV0dXJuIGZ1bmN0aW9uKGUpe3RoaXMuY2xhbXBQb2ludChlLmNlbnRlcixiKTtyZXR1cm4gYi5kaXN0YW5jZVRvU3F1YXJlZChlLmNlbnRlcik8PWUucmFkaXVzKmUucmFkaXVzfX0oKSxpbnRlcnNlY3RzUGxhbmU6ZnVuY3Rpb24oYil7aWYoMDxiLm5vcm1hbC54KXt2YXIgZT1iLm5vcm1hbC54KnRoaXMubWluLng7dmFyIGg9Yi5ub3JtYWwueCp0aGlzLm1heC54fWVsc2UgZT1iLm5vcm1hbC54KnRoaXMubWF4LngsaD1iLm5vcm1hbC54KnRoaXMubWluLng7MDxiLm5vcm1hbC55PyhlKz1iLm5vcm1hbC55KnRoaXMubWluLnksaCs9Yi5ub3JtYWwueSp0aGlzLm1heC55KTooZSs9Yi5ub3JtYWwueSp0aGlzLm1heC55LGgrPQpiLm5vcm1hbC55KnRoaXMubWluLnkpOzA8Yi5ub3JtYWwuej8oZSs9Yi5ub3JtYWwueip0aGlzLm1pbi56LGgrPWIubm9ybWFsLnoqdGhpcy5tYXgueik6KGUrPWIubm9ybWFsLnoqdGhpcy5tYXgueixoKz1iLm5vcm1hbC56KnRoaXMubWluLnopO3JldHVybiBlPD0tYi5jb25zdGFudCYmaD49LWIuY29uc3RhbnR9LGludGVyc2VjdHNUcmlhbmdsZTpmdW5jdGlvbigpe2Z1bmN0aW9uIGIoUSl7dmFyIFI7dmFyIFU9MDtmb3IoUj1RLmxlbmd0aC0zO1U8PVI7VSs9Myl7RS5mcm9tQXJyYXkoUSxVKTt2YXIgVz1lLmRvdChFKSxaPWguZG90KEUpLGZhPW4uZG90KEUpO2lmKE1hdGgubWF4KC1NYXRoLm1heChXLFosZmEpLE1hdGgubWluKFcsWixmYSkpPkkueCpNYXRoLmFicyhFLngpK0kueSpNYXRoLmFicyhFLnkpK0kueipNYXRoLmFicyhFLnopKXJldHVybiExfXJldHVybiEwfXZhciBlPW5ldyBnLGg9bmV3IGcsbj1uZXcgZyx1PW5ldyBnLHc9bmV3IGcsej1uZXcgZyxFPW5ldyBnLEg9Cm5ldyBnLEk9bmV3IGcsTz1uZXcgZztyZXR1cm4gZnVuY3Rpb24oUSl7aWYodGhpcy5pc0VtcHR5KCkpcmV0dXJuITE7dGhpcy5nZXRDZW50ZXIoSCk7SS5zdWJWZWN0b3JzKHRoaXMubWF4LEgpO2Uuc3ViVmVjdG9ycyhRLmEsSCk7aC5zdWJWZWN0b3JzKFEuYixIKTtuLnN1YlZlY3RvcnMoUS5jLEgpO3Uuc3ViVmVjdG9ycyhoLGUpO3cuc3ViVmVjdG9ycyhuLGgpO3ouc3ViVmVjdG9ycyhlLG4pO1E9WzAsLXUueix1LnksMCwtdy56LHcueSwwLC16Lnosei55LHUueiwwLC11Lngsdy56LDAsLXcueCx6LnosMCwtei54LC11LnksdS54LDAsLXcueSx3LngsMCwtei55LHoueCwwXTtpZighYihRKSlyZXR1cm4hMTtRPVsxLDAsMCwwLDEsMCwwLDAsMV07aWYoIWIoUSkpcmV0dXJuITE7Ty5jcm9zc1ZlY3RvcnModSx3KTtRPVtPLngsTy55LE8uel07cmV0dXJuIGIoUSl9fSgpLGNsYW1wUG9pbnQ6ZnVuY3Rpb24oYixlKXt2b2lkIDA9PT1lJiYoY29uc29sZS53YXJuKCJUSFJFRS5Cb3gzOiAuY2xhbXBQb2ludCgpIHRhcmdldCBpcyBub3cgcmVxdWlyZWQiKSwKZT1uZXcgZyk7cmV0dXJuIGUuY29weShiKS5jbGFtcCh0aGlzLm1pbix0aGlzLm1heCl9LGRpc3RhbmNlVG9Qb2ludDpmdW5jdGlvbigpe3ZhciBiPW5ldyBnO3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gYi5jb3B5KGUpLmNsYW1wKHRoaXMubWluLHRoaXMubWF4KS5zdWIoZSkubGVuZ3RoKCl9fSgpLGdldEJvdW5kaW5nU3BoZXJlOmZ1bmN0aW9uKCl7dmFyIGI9bmV3IGc7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZvaWQgMD09PWUmJmNvbnNvbGUuZXJyb3IoIlRIUkVFLkJveDM6IC5nZXRCb3VuZGluZ1NwaGVyZSgpIHRhcmdldCBpcyBub3cgcmVxdWlyZWQiKTt0aGlzLmdldENlbnRlcihlLmNlbnRlcik7ZS5yYWRpdXM9LjUqdGhpcy5nZXRTaXplKGIpLmxlbmd0aCgpO3JldHVybiBlfX0oKSxpbnRlcnNlY3Q6ZnVuY3Rpb24oYil7dGhpcy5taW4ubWF4KGIubWluKTt0aGlzLm1heC5taW4oYi5tYXgpO3RoaXMuaXNFbXB0eSgpJiZ0aGlzLm1ha2VFbXB0eSgpO3JldHVybiB0aGlzfSx1bmlvbjpmdW5jdGlvbihiKXt0aGlzLm1pbi5taW4oYi5taW4pOwp0aGlzLm1heC5tYXgoYi5tYXgpO3JldHVybiB0aGlzfSxhcHBseU1hdHJpeDQ6ZnVuY3Rpb24oKXt2YXIgYj1bbmV3IGcsbmV3IGcsbmV3IGcsbmV3IGcsbmV3IGcsbmV3IGcsbmV3IGcsbmV3IGddO3JldHVybiBmdW5jdGlvbihlKXtpZih0aGlzLmlzRW1wdHkoKSlyZXR1cm4gdGhpcztiWzBdLnNldCh0aGlzLm1pbi54LHRoaXMubWluLnksdGhpcy5taW4ueikuYXBwbHlNYXRyaXg0KGUpO2JbMV0uc2V0KHRoaXMubWluLngsdGhpcy5taW4ueSx0aGlzLm1heC56KS5hcHBseU1hdHJpeDQoZSk7YlsyXS5zZXQodGhpcy5taW4ueCx0aGlzLm1heC55LHRoaXMubWluLnopLmFwcGx5TWF0cml4NChlKTtiWzNdLnNldCh0aGlzLm1pbi54LHRoaXMubWF4LnksdGhpcy5tYXgueikuYXBwbHlNYXRyaXg0KGUpO2JbNF0uc2V0KHRoaXMubWF4LngsdGhpcy5taW4ueSx0aGlzLm1pbi56KS5hcHBseU1hdHJpeDQoZSk7Yls1XS5zZXQodGhpcy5tYXgueCx0aGlzLm1pbi55LHRoaXMubWF4LnopLmFwcGx5TWF0cml4NChlKTsKYls2XS5zZXQodGhpcy5tYXgueCx0aGlzLm1heC55LHRoaXMubWluLnopLmFwcGx5TWF0cml4NChlKTtiWzddLnNldCh0aGlzLm1heC54LHRoaXMubWF4LnksdGhpcy5tYXgueikuYXBwbHlNYXRyaXg0KGUpO3RoaXMuc2V0RnJvbVBvaW50cyhiKTtyZXR1cm4gdGhpc319KCksdHJhbnNsYXRlOmZ1bmN0aW9uKGIpe3RoaXMubWluLmFkZChiKTt0aGlzLm1heC5hZGQoYik7cmV0dXJuIHRoaXN9LGVxdWFsczpmdW5jdGlvbihiKXtyZXR1cm4gYi5taW4uZXF1YWxzKHRoaXMubWluKSYmYi5tYXguZXF1YWxzKHRoaXMubWF4KX19KTtPYmplY3QuYXNzaWduKEEucHJvdG90eXBlLHtzZXQ6ZnVuY3Rpb24oYixlKXt0aGlzLmNlbnRlci5jb3B5KGIpO3RoaXMucmFkaXVzPWU7cmV0dXJuIHRoaXN9LHNldEZyb21Qb2ludHM6ZnVuY3Rpb24oKXt2YXIgYj1uZXcgdjtyZXR1cm4gZnVuY3Rpb24oZSxoKXt2YXIgbj10aGlzLmNlbnRlcjt2b2lkIDAhPT1oP24uY29weShoKTpiLnNldEZyb21Qb2ludHMoZSkuZ2V0Q2VudGVyKG4pOwpmb3IodmFyIHU9aD0wLHc9ZS5sZW5ndGg7dTx3O3UrKyloPU1hdGgubWF4KGgsbi5kaXN0YW5jZVRvU3F1YXJlZChlW3VdKSk7dGhpcy5yYWRpdXM9TWF0aC5zcXJ0KGgpO3JldHVybiB0aGlzfX0oKSxjbG9uZTpmdW5jdGlvbigpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX0sY29weTpmdW5jdGlvbihiKXt0aGlzLmNlbnRlci5jb3B5KGIuY2VudGVyKTt0aGlzLnJhZGl1cz1iLnJhZGl1cztyZXR1cm4gdGhpc30sZW1wdHk6ZnVuY3Rpb24oKXtyZXR1cm4gMD49dGhpcy5yYWRpdXN9LGNvbnRhaW5zUG9pbnQ6ZnVuY3Rpb24oYil7cmV0dXJuIGIuZGlzdGFuY2VUb1NxdWFyZWQodGhpcy5jZW50ZXIpPD10aGlzLnJhZGl1cyp0aGlzLnJhZGl1c30sZGlzdGFuY2VUb1BvaW50OmZ1bmN0aW9uKGIpe3JldHVybiBiLmRpc3RhbmNlVG8odGhpcy5jZW50ZXIpLXRoaXMucmFkaXVzfSxpbnRlcnNlY3RzU3BoZXJlOmZ1bmN0aW9uKGIpe3ZhciBlPXRoaXMucmFkaXVzKwpiLnJhZGl1cztyZXR1cm4gYi5jZW50ZXIuZGlzdGFuY2VUb1NxdWFyZWQodGhpcy5jZW50ZXIpPD1lKmV9LGludGVyc2VjdHNCb3g6ZnVuY3Rpb24oYil7cmV0dXJuIGIuaW50ZXJzZWN0c1NwaGVyZSh0aGlzKX0saW50ZXJzZWN0c1BsYW5lOmZ1bmN0aW9uKGIpe3JldHVybiBNYXRoLmFicyhiLmRpc3RhbmNlVG9Qb2ludCh0aGlzLmNlbnRlcikpPD10aGlzLnJhZGl1c30sY2xhbXBQb2ludDpmdW5jdGlvbihiLGUpe3ZhciBoPXRoaXMuY2VudGVyLmRpc3RhbmNlVG9TcXVhcmVkKGIpO3ZvaWQgMD09PWUmJihjb25zb2xlLndhcm4oIlRIUkVFLlNwaGVyZTogLmNsYW1wUG9pbnQoKSB0YXJnZXQgaXMgbm93IHJlcXVpcmVkIiksZT1uZXcgZyk7ZS5jb3B5KGIpO2g+dGhpcy5yYWRpdXMqdGhpcy5yYWRpdXMmJihlLnN1Yih0aGlzLmNlbnRlcikubm9ybWFsaXplKCksZS5tdWx0aXBseVNjYWxhcih0aGlzLnJhZGl1cykuYWRkKHRoaXMuY2VudGVyKSk7cmV0dXJuIGV9LGdldEJvdW5kaW5nQm94OmZ1bmN0aW9uKGIpe3ZvaWQgMD09PQpiJiYoY29uc29sZS53YXJuKCJUSFJFRS5TcGhlcmU6IC5nZXRCb3VuZGluZ0JveCgpIHRhcmdldCBpcyBub3cgcmVxdWlyZWQiKSxiPW5ldyB2KTtiLnNldCh0aGlzLmNlbnRlcix0aGlzLmNlbnRlcik7Yi5leHBhbmRCeVNjYWxhcih0aGlzLnJhZGl1cyk7cmV0dXJuIGJ9LGFwcGx5TWF0cml4NDpmdW5jdGlvbihiKXt0aGlzLmNlbnRlci5hcHBseU1hdHJpeDQoYik7dGhpcy5yYWRpdXMqPWIuZ2V0TWF4U2NhbGVPbkF4aXMoKTtyZXR1cm4gdGhpc30sdHJhbnNsYXRlOmZ1bmN0aW9uKGIpe3RoaXMuY2VudGVyLmFkZChiKTtyZXR1cm4gdGhpc30sZXF1YWxzOmZ1bmN0aW9uKGIpe3JldHVybiBiLmNlbnRlci5lcXVhbHModGhpcy5jZW50ZXIpJiZiLnJhZGl1cz09PXRoaXMucmFkaXVzfX0pO09iamVjdC5hc3NpZ24oeS5wcm90b3R5cGUse3NldDpmdW5jdGlvbihiLGUpe3RoaXMubm9ybWFsLmNvcHkoYik7dGhpcy5jb25zdGFudD1lO3JldHVybiB0aGlzfSxzZXRDb21wb25lbnRzOmZ1bmN0aW9uKGIsCmUsaCxuKXt0aGlzLm5vcm1hbC5zZXQoYixlLGgpO3RoaXMuY29uc3RhbnQ9bjtyZXR1cm4gdGhpc30sc2V0RnJvbU5vcm1hbEFuZENvcGxhbmFyUG9pbnQ6ZnVuY3Rpb24oYixlKXt0aGlzLm5vcm1hbC5jb3B5KGIpO3RoaXMuY29uc3RhbnQ9LWUuZG90KHRoaXMubm9ybWFsKTtyZXR1cm4gdGhpc30sc2V0RnJvbUNvcGxhbmFyUG9pbnRzOmZ1bmN0aW9uKCl7dmFyIGI9bmV3IGcsZT1uZXcgZztyZXR1cm4gZnVuY3Rpb24oaCxuLHUpe249Yi5zdWJWZWN0b3JzKHUsbikuY3Jvc3MoZS5zdWJWZWN0b3JzKGgsbikpLm5vcm1hbGl6ZSgpO3RoaXMuc2V0RnJvbU5vcm1hbEFuZENvcGxhbmFyUG9pbnQobixoKTtyZXR1cm4gdGhpc319KCksY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9LGNvcHk6ZnVuY3Rpb24oYil7dGhpcy5ub3JtYWwuY29weShiLm5vcm1hbCk7dGhpcy5jb25zdGFudD1iLmNvbnN0YW50O3JldHVybiB0aGlzfSxub3JtYWxpemU6ZnVuY3Rpb24oKXt2YXIgYj0KMS90aGlzLm5vcm1hbC5sZW5ndGgoKTt0aGlzLm5vcm1hbC5tdWx0aXBseVNjYWxhcihiKTt0aGlzLmNvbnN0YW50Kj1iO3JldHVybiB0aGlzfSxuZWdhdGU6ZnVuY3Rpb24oKXt0aGlzLmNvbnN0YW50Kj0tMTt0aGlzLm5vcm1hbC5uZWdhdGUoKTtyZXR1cm4gdGhpc30sZGlzdGFuY2VUb1BvaW50OmZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLm5vcm1hbC5kb3QoYikrdGhpcy5jb25zdGFudH0sZGlzdGFuY2VUb1NwaGVyZTpmdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5kaXN0YW5jZVRvUG9pbnQoYi5jZW50ZXIpLWIucmFkaXVzfSxwcm9qZWN0UG9pbnQ6ZnVuY3Rpb24oYixlKXt2b2lkIDA9PT1lJiYoY29uc29sZS53YXJuKCJUSFJFRS5QbGFuZTogLnByb2plY3RQb2ludCgpIHRhcmdldCBpcyBub3cgcmVxdWlyZWQiKSxlPW5ldyBnKTtyZXR1cm4gZS5jb3B5KHRoaXMubm9ybWFsKS5tdWx0aXBseVNjYWxhcigtdGhpcy5kaXN0YW5jZVRvUG9pbnQoYikpLmFkZChiKX0saW50ZXJzZWN0TGluZTpmdW5jdGlvbigpe3ZhciBiPQpuZXcgZztyZXR1cm4gZnVuY3Rpb24oZSxoKXt2b2lkIDA9PT1oJiYoY29uc29sZS53YXJuKCJUSFJFRS5QbGFuZTogLmludGVyc2VjdExpbmUoKSB0YXJnZXQgaXMgbm93IHJlcXVpcmVkIiksaD1uZXcgZyk7dmFyIG49ZS5kZWx0YShiKSx1PXRoaXMubm9ybWFsLmRvdChuKTtpZigwPT09dSl7aWYoMD09PXRoaXMuZGlzdGFuY2VUb1BvaW50KGUuc3RhcnQpKXJldHVybiBoLmNvcHkoZS5zdGFydCl9ZWxzZSBpZih1PS0oZS5zdGFydC5kb3QodGhpcy5ub3JtYWwpK3RoaXMuY29uc3RhbnQpL3UsISgwPnV8fDE8dSkpcmV0dXJuIGguY29weShuKS5tdWx0aXBseVNjYWxhcih1KS5hZGQoZS5zdGFydCl9fSgpLGludGVyc2VjdHNMaW5lOmZ1bmN0aW9uKGIpe3ZhciBlPXRoaXMuZGlzdGFuY2VUb1BvaW50KGIuc3RhcnQpO2I9dGhpcy5kaXN0YW5jZVRvUG9pbnQoYi5lbmQpO3JldHVybiAwPmUmJjA8Ynx8MD5iJiYwPGV9LGludGVyc2VjdHNCb3g6ZnVuY3Rpb24oYil7cmV0dXJuIGIuaW50ZXJzZWN0c1BsYW5lKHRoaXMpfSwKaW50ZXJzZWN0c1NwaGVyZTpmdW5jdGlvbihiKXtyZXR1cm4gYi5pbnRlcnNlY3RzUGxhbmUodGhpcyl9LGNvcGxhbmFyUG9pbnQ6ZnVuY3Rpb24oYil7dm9pZCAwPT09YiYmKGNvbnNvbGUud2FybigiVEhSRUUuUGxhbmU6IC5jb3BsYW5hclBvaW50KCkgdGFyZ2V0IGlzIG5vdyByZXF1aXJlZCIpLGI9bmV3IGcpO3JldHVybiBiLmNvcHkodGhpcy5ub3JtYWwpLm11bHRpcGx5U2NhbGFyKC10aGlzLmNvbnN0YW50KX0sYXBwbHlNYXRyaXg0OmZ1bmN0aW9uKCl7dmFyIGI9bmV3IGcsZT1uZXcgbDtyZXR1cm4gZnVuY3Rpb24oaCxuKXtuPW58fGUuZ2V0Tm9ybWFsTWF0cml4KGgpO2g9dGhpcy5jb3BsYW5hclBvaW50KGIpLmFwcGx5TWF0cml4NChoKTtuPXRoaXMubm9ybWFsLmFwcGx5TWF0cml4MyhuKS5ub3JtYWxpemUoKTt0aGlzLmNvbnN0YW50PS1oLmRvdChuKTtyZXR1cm4gdGhpc319KCksdHJhbnNsYXRlOmZ1bmN0aW9uKGIpe3RoaXMuY29uc3RhbnQtPWIuZG90KHRoaXMubm9ybWFsKTsKcmV0dXJuIHRoaXN9LGVxdWFsczpmdW5jdGlvbihiKXtyZXR1cm4gYi5ub3JtYWwuZXF1YWxzKHRoaXMubm9ybWFsKSYmYi5jb25zdGFudD09PXRoaXMuY29uc3RhbnR9fSk7T2JqZWN0LmFzc2lnbih4LnByb3RvdHlwZSx7c2V0OmZ1bmN0aW9uKGIsZSxoLG4sdSx3KXt2YXIgej10aGlzLnBsYW5lczt6WzBdLmNvcHkoYik7elsxXS5jb3B5KGUpO3pbMl0uY29weShoKTt6WzNdLmNvcHkobik7els0XS5jb3B5KHUpO3pbNV0uY29weSh3KTtyZXR1cm4gdGhpc30sY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9LGNvcHk6ZnVuY3Rpb24oYil7Zm9yKHZhciBlPXRoaXMucGxhbmVzLGg9MDs2Pmg7aCsrKWVbaF0uY29weShiLnBsYW5lc1toXSk7cmV0dXJuIHRoaXN9LHNldEZyb21NYXRyaXg6ZnVuY3Rpb24oYil7dmFyIGU9dGhpcy5wbGFuZXMsaD1iLmVsZW1lbnRzO2I9aFswXTt2YXIgbj1oWzFdLHU9aFsyXSx3PWhbM10sej1oWzRdLApFPWhbNV0sSD1oWzZdLEk9aFs3XSxPPWhbOF0sUT1oWzldLFI9aFsxMF0sVT1oWzExXSxXPWhbMTJdLFo9aFsxM10sZmE9aFsxNF07aD1oWzE1XTtlWzBdLnNldENvbXBvbmVudHMody1iLEkteixVLU8saC1XKS5ub3JtYWxpemUoKTtlWzFdLnNldENvbXBvbmVudHModytiLEkreixVK08saCtXKS5ub3JtYWxpemUoKTtlWzJdLnNldENvbXBvbmVudHModytuLEkrRSxVK1EsaCtaKS5ub3JtYWxpemUoKTtlWzNdLnNldENvbXBvbmVudHMody1uLEktRSxVLVEsaC1aKS5ub3JtYWxpemUoKTtlWzRdLnNldENvbXBvbmVudHMody11LEktSCxVLVIsaC1mYSkubm9ybWFsaXplKCk7ZVs1XS5zZXRDb21wb25lbnRzKHcrdSxJK0gsVStSLGgrZmEpLm5vcm1hbGl6ZSgpO3JldHVybiB0aGlzfSxpbnRlcnNlY3RzT2JqZWN0OmZ1bmN0aW9uKCl7dmFyIGI9bmV3IEE7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciBoPWUuZ2VvbWV0cnk7bnVsbD09PWguYm91bmRpbmdTcGhlcmUmJmguY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCk7CmIuY29weShoLmJvdW5kaW5nU3BoZXJlKS5hcHBseU1hdHJpeDQoZS5tYXRyaXhXb3JsZCk7cmV0dXJuIHRoaXMuaW50ZXJzZWN0c1NwaGVyZShiKX19KCksaW50ZXJzZWN0c1Nwcml0ZTpmdW5jdGlvbigpe3ZhciBiPW5ldyBBO3JldHVybiBmdW5jdGlvbihlKXtiLmNlbnRlci5zZXQoMCwwLDApO2IucmFkaXVzPS43MDcxMDY3ODExODY1NDc2O2IuYXBwbHlNYXRyaXg0KGUubWF0cml4V29ybGQpO3JldHVybiB0aGlzLmludGVyc2VjdHNTcGhlcmUoYil9fSgpLGludGVyc2VjdHNTcGhlcmU6ZnVuY3Rpb24oYil7dmFyIGU9dGhpcy5wbGFuZXMsaD1iLmNlbnRlcjtiPS1iLnJhZGl1cztmb3IodmFyIG49MDs2Pm47bisrKWlmKGVbbl0uZGlzdGFuY2VUb1BvaW50KGgpPGIpcmV0dXJuITE7cmV0dXJuITB9LGludGVyc2VjdHNCb3g6ZnVuY3Rpb24oKXt2YXIgYj1uZXcgZztyZXR1cm4gZnVuY3Rpb24oZSl7Zm9yKHZhciBoPXRoaXMucGxhbmVzLG49MDs2Pm47bisrKXt2YXIgdT1oW25dOwpiLng9MDx1Lm5vcm1hbC54P2UubWF4Lng6ZS5taW4ueDtiLnk9MDx1Lm5vcm1hbC55P2UubWF4Lnk6ZS5taW4ueTtiLno9MDx1Lm5vcm1hbC56P2UubWF4Lno6ZS5taW4uejtpZigwPnUuZGlzdGFuY2VUb1BvaW50KGIpKXJldHVybiExfXJldHVybiEwfX0oKSxjb250YWluc1BvaW50OmZ1bmN0aW9uKGIpe2Zvcih2YXIgZT10aGlzLnBsYW5lcyxoPTA7Nj5oO2grKylpZigwPmVbaF0uZGlzdGFuY2VUb1BvaW50KGIpKXJldHVybiExO3JldHVybiEwfX0pO09iamVjdC5hc3NpZ24oQy5wcm90b3R5cGUse2lzTWF0cml4NDohMCxzZXQ6ZnVuY3Rpb24oYixlLGgsbix1LHcseixFLEgsSSxPLFEsUixVLFcsWil7dmFyIGZhPXRoaXMuZWxlbWVudHM7ZmFbMF09YjtmYVs0XT1lO2ZhWzhdPWg7ZmFbMTJdPW47ZmFbMV09dTtmYVs1XT13O2ZhWzldPXo7ZmFbMTNdPUU7ZmFbMl09SDtmYVs2XT1JO2ZhWzEwXT1PO2ZhWzE0XT1RO2ZhWzNdPVI7ZmFbN109VTtmYVsxMV09VztmYVsxNV09WjtyZXR1cm4gdGhpc30sCmlkZW50aXR5OmZ1bmN0aW9uKCl7dGhpcy5zZXQoMSwwLDAsMCwwLDEsMCwwLDAsMCwxLDAsMCwwLDAsMSk7cmV0dXJuIHRoaXN9LGNsb25lOmZ1bmN0aW9uKCl7cmV0dXJuKG5ldyBDKS5mcm9tQXJyYXkodGhpcy5lbGVtZW50cyl9LGNvcHk6ZnVuY3Rpb24oYil7dmFyIGU9dGhpcy5lbGVtZW50cztiPWIuZWxlbWVudHM7ZVswXT1iWzBdO2VbMV09YlsxXTtlWzJdPWJbMl07ZVszXT1iWzNdO2VbNF09Yls0XTtlWzVdPWJbNV07ZVs2XT1iWzZdO2VbN109Yls3XTtlWzhdPWJbOF07ZVs5XT1iWzldO2VbMTBdPWJbMTBdO2VbMTFdPWJbMTFdO2VbMTJdPWJbMTJdO2VbMTNdPWJbMTNdO2VbMTRdPWJbMTRdO2VbMTVdPWJbMTVdO3JldHVybiB0aGlzfSxjb3B5UG9zaXRpb246ZnVuY3Rpb24oYil7dmFyIGU9dGhpcy5lbGVtZW50cztiPWIuZWxlbWVudHM7ZVsxMl09YlsxMl07ZVsxM109YlsxM107ZVsxNF09YlsxNF07cmV0dXJuIHRoaXN9LGV4dHJhY3RCYXNpczpmdW5jdGlvbihiLGUsaCl7Yi5zZXRGcm9tTWF0cml4Q29sdW1uKHRoaXMsCjApO2Uuc2V0RnJvbU1hdHJpeENvbHVtbih0aGlzLDEpO2guc2V0RnJvbU1hdHJpeENvbHVtbih0aGlzLDIpO3JldHVybiB0aGlzfSxtYWtlQmFzaXM6ZnVuY3Rpb24oYixlLGgpe3RoaXMuc2V0KGIueCxlLngsaC54LDAsYi55LGUueSxoLnksMCxiLnosZS56LGgueiwwLDAsMCwwLDEpO3JldHVybiB0aGlzfSxleHRyYWN0Um90YXRpb246ZnVuY3Rpb24oKXt2YXIgYj1uZXcgZztyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIGg9dGhpcy5lbGVtZW50cyxuPWUuZWxlbWVudHMsdT0xL2Iuc2V0RnJvbU1hdHJpeENvbHVtbihlLDApLmxlbmd0aCgpLHc9MS9iLnNldEZyb21NYXRyaXhDb2x1bW4oZSwxKS5sZW5ndGgoKTtlPTEvYi5zZXRGcm9tTWF0cml4Q29sdW1uKGUsMikubGVuZ3RoKCk7aFswXT1uWzBdKnU7aFsxXT1uWzFdKnU7aFsyXT1uWzJdKnU7aFszXT0wO2hbNF09bls0XSp3O2hbNV09bls1XSp3O2hbNl09bls2XSp3O2hbN109MDtoWzhdPW5bOF0qZTtoWzldPW5bOV0qZTtoWzEwXT0KblsxMF0qZTtoWzExXT0wO2hbMTJdPTA7aFsxM109MDtoWzE0XT0wO2hbMTVdPTE7cmV0dXJuIHRoaXN9fSgpLG1ha2VSb3RhdGlvbkZyb21FdWxlcjpmdW5jdGlvbihiKXtiJiZiLmlzRXVsZXJ8fGNvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDQ6IC5tYWtlUm90YXRpb25Gcm9tRXVsZXIoKSBub3cgZXhwZWN0cyBhIEV1bGVyIHJvdGF0aW9uIHJhdGhlciB0aGFuIGEgVmVjdG9yMyBhbmQgb3JkZXIuIik7dmFyIGU9dGhpcy5lbGVtZW50cyxoPWIueCxuPWIueSx1PWIueix3PU1hdGguY29zKGgpO2g9TWF0aC5zaW4oaCk7dmFyIHo9TWF0aC5jb3Mobik7bj1NYXRoLnNpbihuKTt2YXIgRT1NYXRoLmNvcyh1KTt1PU1hdGguc2luKHUpO2lmKCJYWVoiPT09Yi5vcmRlcil7Yj13KkU7dmFyIEg9dyp1LEk9aCpFLE89aCp1O2VbMF09eipFO2VbNF09LXoqdTtlWzhdPW47ZVsxXT1IK0kqbjtlWzVdPWItTypuO2VbOV09LWgqejtlWzJdPU8tYipuO2VbNl09SStIKm47ZVsxMF09dyp6fWVsc2UiWVhaIj09PQpiLm9yZGVyPyhiPXoqRSxIPXoqdSxJPW4qRSxPPW4qdSxlWzBdPWIrTypoLGVbNF09SSpoLUgsZVs4XT13Km4sZVsxXT13KnUsZVs1XT13KkUsZVs5XT0taCxlWzJdPUgqaC1JLGVbNl09TytiKmgsZVsxMF09dyp6KToiWlhZIj09PWIub3JkZXI/KGI9eipFLEg9eip1LEk9bipFLE89bip1LGVbMF09Yi1PKmgsZVs0XT0tdyp1LGVbOF09SStIKmgsZVsxXT1IK0kqaCxlWzVdPXcqRSxlWzldPU8tYipoLGVbMl09LXcqbixlWzZdPWgsZVsxMF09dyp6KToiWllYIj09PWIub3JkZXI/KGI9dypFLEg9dyp1LEk9aCpFLE89aCp1LGVbMF09eipFLGVbNF09SSpuLUgsZVs4XT1iKm4rTyxlWzFdPXoqdSxlWzVdPU8qbitiLGVbOV09SCpuLUksZVsyXT0tbixlWzZdPWgqeixlWzEwXT13KnopOiJZWlgiPT09Yi5vcmRlcj8oYj13KnosSD13Km4sST1oKnosTz1oKm4sZVswXT16KkUsZVs0XT1PLWIqdSxlWzhdPUkqdStILGVbMV09dSxlWzVdPXcqRSxlWzldPS1oKkUsZVsyXT0tbipFLGVbNl09SCoKdStJLGVbMTBdPWItTyp1KToiWFpZIj09PWIub3JkZXImJihiPXcqeixIPXcqbixJPWgqeixPPWgqbixlWzBdPXoqRSxlWzRdPS11LGVbOF09bipFLGVbMV09Yip1K08sZVs1XT13KkUsZVs5XT1IKnUtSSxlWzJdPUkqdS1ILGVbNl09aCpFLGVbMTBdPU8qdStiKTtlWzNdPTA7ZVs3XT0wO2VbMTFdPTA7ZVsxMl09MDtlWzEzXT0wO2VbMTRdPTA7ZVsxNV09MTtyZXR1cm4gdGhpc30sbWFrZVJvdGF0aW9uRnJvbVF1YXRlcm5pb246ZnVuY3Rpb24oKXt2YXIgYj1uZXcgZygwLDAsMCksZT1uZXcgZygxLDEsMSk7cmV0dXJuIGZ1bmN0aW9uKGgpe3JldHVybiB0aGlzLmNvbXBvc2UoYixoLGUpfX0oKSxsb29rQXQ6ZnVuY3Rpb24oKXt2YXIgYj1uZXcgZyxlPW5ldyBnLGg9bmV3IGc7cmV0dXJuIGZ1bmN0aW9uKG4sdSx3KXt2YXIgej10aGlzLmVsZW1lbnRzO2guc3ViVmVjdG9ycyhuLHUpOzA9PT1oLmxlbmd0aFNxKCkmJihoLno9MSk7aC5ub3JtYWxpemUoKTtiLmNyb3NzVmVjdG9ycyh3LApoKTswPT09Yi5sZW5ndGhTcSgpJiYoMT09PU1hdGguYWJzKHcueik/aC54Kz0xRS00Omgueis9MUUtNCxoLm5vcm1hbGl6ZSgpLGIuY3Jvc3NWZWN0b3JzKHcsaCkpO2Iubm9ybWFsaXplKCk7ZS5jcm9zc1ZlY3RvcnMoaCxiKTt6WzBdPWIueDt6WzRdPWUueDt6WzhdPWgueDt6WzFdPWIueTt6WzVdPWUueTt6WzldPWgueTt6WzJdPWIuejt6WzZdPWUuejt6WzEwXT1oLno7cmV0dXJuIHRoaXN9fSgpLG11bHRpcGx5OmZ1bmN0aW9uKGIsZSl7cmV0dXJuIHZvaWQgMCE9PWU/KGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLm11bHRpcGx5KCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAubXVsdGlwbHlNYXRyaWNlcyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5tdWx0aXBseU1hdHJpY2VzKGIsZSkpOnRoaXMubXVsdGlwbHlNYXRyaWNlcyh0aGlzLGIpfSxwcmVtdWx0aXBseTpmdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5tdWx0aXBseU1hdHJpY2VzKGIsdGhpcyl9LAptdWx0aXBseU1hdHJpY2VzOmZ1bmN0aW9uKGIsZSl7dmFyIGg9Yi5lbGVtZW50cyxuPWUuZWxlbWVudHM7ZT10aGlzLmVsZW1lbnRzO2I9aFswXTt2YXIgdT1oWzRdLHc9aFs4XSx6PWhbMTJdLEU9aFsxXSxIPWhbNV0sST1oWzldLE89aFsxM10sUT1oWzJdLFI9aFs2XSxVPWhbMTBdLFc9aFsxNF0sWj1oWzNdLGZhPWhbN10scWE9aFsxMV07aD1oWzE1XTt2YXIgcmE9blswXSxpYT1uWzRdLHRhPW5bOF0sbmE9blsxMl0sdmE9blsxXSxCYT1uWzVdLHNhPW5bOV0sRGE9blsxM10sSGE9blsyXSxLYT1uWzZdLE5hPW5bMTBdLExhPW5bMTRdLGZiPW5bM10sY2I9bls3XSxKYT1uWzExXTtuPW5bMTVdO2VbMF09YipyYSt1KnZhK3cqSGEreipmYjtlWzRdPWIqaWErdSpCYSt3KkthK3oqY2I7ZVs4XT1iKnRhK3Uqc2ErdypOYSt6KkphO2VbMTJdPWIqbmErdSpEYSt3KkxhK3oqbjtlWzFdPUUqcmErSCp2YStJKkhhK08qZmI7ZVs1XT1FKmlhK0gqQmErSSpLYStPKmNiO2VbOV09RSp0YStIKnNhKwpJKk5hK08qSmE7ZVsxM109RSpuYStIKkRhK0kqTGErTypuO2VbMl09USpyYStSKnZhK1UqSGErVypmYjtlWzZdPVEqaWErUipCYStVKkthK1cqY2I7ZVsxMF09USp0YStSKnNhK1UqTmErVypKYTtlWzE0XT1RKm5hK1IqRGErVSpMYStXKm47ZVszXT1aKnJhK2ZhKnZhK3FhKkhhK2gqZmI7ZVs3XT1aKmlhK2ZhKkJhK3FhKkthK2gqY2I7ZVsxMV09Wip0YStmYSpzYStxYSpOYStoKkphO2VbMTVdPVoqbmErZmEqRGErcWEqTGEraCpuO3JldHVybiB0aGlzfSxtdWx0aXBseVNjYWxhcjpmdW5jdGlvbihiKXt2YXIgZT10aGlzLmVsZW1lbnRzO2VbMF0qPWI7ZVs0XSo9YjtlWzhdKj1iO2VbMTJdKj1iO2VbMV0qPWI7ZVs1XSo9YjtlWzldKj1iO2VbMTNdKj1iO2VbMl0qPWI7ZVs2XSo9YjtlWzEwXSo9YjtlWzE0XSo9YjtlWzNdKj1iO2VbN10qPWI7ZVsxMV0qPWI7ZVsxNV0qPWI7cmV0dXJuIHRoaXN9LGFwcGx5VG9CdWZmZXJBdHRyaWJ1dGU6ZnVuY3Rpb24oKXt2YXIgYj1uZXcgZztyZXR1cm4gZnVuY3Rpb24oZSl7Zm9yKHZhciBoPQowLG49ZS5jb3VudDtoPG47aCsrKWIueD1lLmdldFgoaCksYi55PWUuZ2V0WShoKSxiLno9ZS5nZXRaKGgpLGIuYXBwbHlNYXRyaXg0KHRoaXMpLGUuc2V0WFlaKGgsYi54LGIueSxiLnopO3JldHVybiBlfX0oKSxkZXRlcm1pbmFudDpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZWxlbWVudHMsZT1iWzBdLGg9Yls0XSxuPWJbOF0sdT1iWzEyXSx3PWJbMV0sej1iWzVdLEU9Yls5XSxIPWJbMTNdLEk9YlsyXSxPPWJbNl0sUT1iWzEwXSxSPWJbMTRdO3JldHVybiBiWzNdKigrdSpFKk8tbipIKk8tdSp6KlEraCpIKlErbip6KlItaCpFKlIpK2JbN10qKCtlKkUqUi1lKkgqUSt1KncqUS1uKncqUituKkgqSS11KkUqSSkrYlsxMV0qKCtlKkgqTy1lKnoqUi11KncqTytoKncqUit1KnoqSS1oKkgqSSkrYlsxNV0qKC1uKnoqSS1lKkUqTytlKnoqUStuKncqTy1oKncqUStoKkUqSSl9LHRyYW5zcG9zZTpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZWxlbWVudHM7dmFyIGU9YlsxXTtiWzFdPWJbNF07Yls0XT0KZTtlPWJbMl07YlsyXT1iWzhdO2JbOF09ZTtlPWJbNl07Yls2XT1iWzldO2JbOV09ZTtlPWJbM107YlszXT1iWzEyXTtiWzEyXT1lO2U9Yls3XTtiWzddPWJbMTNdO2JbMTNdPWU7ZT1iWzExXTtiWzExXT1iWzE0XTtiWzE0XT1lO3JldHVybiB0aGlzfSxzZXRQb3NpdGlvbjpmdW5jdGlvbihiKXt2YXIgZT10aGlzLmVsZW1lbnRzO2VbMTJdPWIueDtlWzEzXT1iLnk7ZVsxNF09Yi56O3JldHVybiB0aGlzfSxnZXRJbnZlcnNlOmZ1bmN0aW9uKGIsZSl7dmFyIGg9dGhpcy5lbGVtZW50cyxuPWIuZWxlbWVudHM7Yj1uWzBdO3ZhciB1PW5bMV0sdz1uWzJdLHo9blszXSxFPW5bNF0sSD1uWzVdLEk9bls2XSxPPW5bN10sUT1uWzhdLFI9bls5XSxVPW5bMTBdLFc9blsxMV0sWj1uWzEyXSxmYT1uWzEzXSxxYT1uWzE0XTtuPW5bMTVdO3ZhciByYT1SKnFhKk8tZmEqVSpPK2ZhKkkqVy1IKnFhKlctUipJKm4rSCpVKm4saWE9WipVKk8tUSpxYSpPLVoqSSpXK0UqcWEqVytRKkkqbi1FKlUqbix0YT0KUSpmYSpPLVoqUipPK1oqSCpXLUUqZmEqVy1RKkgqbitFKlIqbixuYT1aKlIqSS1RKmZhKkktWipIKlUrRSpmYSpVK1EqSCpxYS1FKlIqcWEsdmE9YipyYSt1KmlhK3cqdGEreipuYTtpZigwPT09dmEpe2lmKCEwPT09ZSl0aHJvdyBFcnJvcigiVEhSRUUuTWF0cml4NDogLmdldEludmVyc2UoKSBjYW4ndCBpbnZlcnQgbWF0cml4LCBkZXRlcm1pbmFudCBpcyAwIik7Y29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAuZ2V0SW52ZXJzZSgpIGNhbid0IGludmVydCBtYXRyaXgsIGRldGVybWluYW50IGlzIDAiKTtyZXR1cm4gdGhpcy5pZGVudGl0eSgpfWU9MS92YTtoWzBdPXJhKmU7aFsxXT0oZmEqVSp6LVIqcWEqei1mYSp3KlcrdSpxYSpXK1IqdypuLXUqVSpuKSplO2hbMl09KEgqcWEqei1mYSpJKnorZmEqdypPLXUqcWEqTy1IKncqbit1KkkqbikqZTtoWzNdPShSKkkqei1IKlUqei1SKncqTyt1KlUqTytIKncqVy11KkkqVykqZTtoWzRdPWlhKmU7aFs1XT0oUSpxYSp6LVoqVSp6KwpaKncqVy1iKnFhKlctUSp3Km4rYipVKm4pKmU7aFs2XT0oWipJKnotRSpxYSp6LVoqdypPK2IqcWEqTytFKncqbi1iKkkqbikqZTtoWzddPShFKlUqei1RKkkqeitRKncqTy1iKlUqTy1FKncqVytiKkkqVykqZTtoWzhdPXRhKmU7aFs5XT0oWipSKnotUSpmYSp6LVoqdSpXK2IqZmEqVytRKnUqbi1iKlIqbikqZTtoWzEwXT0oRSpmYSp6LVoqSCp6K1oqdSpPLWIqZmEqTy1FKnUqbitiKkgqbikqZTtoWzExXT0oUSpIKnotRSpSKnotUSp1Kk8rYipSKk8rRSp1KlctYipIKlcpKmU7aFsxMl09bmEqZTtoWzEzXT0oUSpmYSp3LVoqUip3K1oqdSpVLWIqZmEqVS1RKnUqcWErYipSKnFhKSplO2hbMTRdPShaKkgqdy1FKmZhKnctWip1KkkrYipmYSpJK0UqdSpxYS1iKkgqcWEpKmU7aFsxNV09KEUqUip3LVEqSCp3K1EqdSpJLWIqUipJLUUqdSpVK2IqSCpVKSplO3JldHVybiB0aGlzfSxzY2FsZTpmdW5jdGlvbihiKXt2YXIgZT10aGlzLmVsZW1lbnRzLGg9Yi54LG49Yi55O2I9Yi56O2VbMF0qPQpoO2VbNF0qPW47ZVs4XSo9YjtlWzFdKj1oO2VbNV0qPW47ZVs5XSo9YjtlWzJdKj1oO2VbNl0qPW47ZVsxMF0qPWI7ZVszXSo9aDtlWzddKj1uO2VbMTFdKj1iO3JldHVybiB0aGlzfSxnZXRNYXhTY2FsZU9uQXhpczpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZWxlbWVudHM7cmV0dXJuIE1hdGguc3FydChNYXRoLm1heChiWzBdKmJbMF0rYlsxXSpiWzFdK2JbMl0qYlsyXSxiWzRdKmJbNF0rYls1XSpiWzVdK2JbNl0qYls2XSxiWzhdKmJbOF0rYls5XSpiWzldK2JbMTBdKmJbMTBdKSl9LG1ha2VUcmFuc2xhdGlvbjpmdW5jdGlvbihiLGUsaCl7dGhpcy5zZXQoMSwwLDAsYiwwLDEsMCxlLDAsMCwxLGgsMCwwLDAsMSk7cmV0dXJuIHRoaXN9LG1ha2VSb3RhdGlvblg6ZnVuY3Rpb24oYil7dmFyIGU9TWF0aC5jb3MoYik7Yj1NYXRoLnNpbihiKTt0aGlzLnNldCgxLDAsMCwwLDAsZSwtYiwwLDAsYixlLDAsMCwwLDAsMSk7cmV0dXJuIHRoaXN9LG1ha2VSb3RhdGlvblk6ZnVuY3Rpb24oYil7dmFyIGU9Ck1hdGguY29zKGIpO2I9TWF0aC5zaW4oYik7dGhpcy5zZXQoZSwwLGIsMCwwLDEsMCwwLC1iLDAsZSwwLDAsMCwwLDEpO3JldHVybiB0aGlzfSxtYWtlUm90YXRpb25aOmZ1bmN0aW9uKGIpe3ZhciBlPU1hdGguY29zKGIpO2I9TWF0aC5zaW4oYik7dGhpcy5zZXQoZSwtYiwwLDAsYixlLDAsMCwwLDAsMSwwLDAsMCwwLDEpO3JldHVybiB0aGlzfSxtYWtlUm90YXRpb25BeGlzOmZ1bmN0aW9uKGIsZSl7dmFyIGg9TWF0aC5jb3MoZSk7ZT1NYXRoLnNpbihlKTt2YXIgbj0xLWgsdT1iLngsdz1iLnk7Yj1iLno7dmFyIHo9bip1LEU9bip3O3RoaXMuc2V0KHoqdStoLHoqdy1lKmIseipiK2UqdywwLHoqdytlKmIsRSp3K2gsRSpiLWUqdSwwLHoqYi1lKncsRSpiK2UqdSxuKmIqYitoLDAsMCwwLDAsMSk7cmV0dXJuIHRoaXN9LG1ha2VTY2FsZTpmdW5jdGlvbihiLGUsaCl7dGhpcy5zZXQoYiwwLDAsMCwwLGUsMCwwLDAsMCxoLDAsMCwwLDAsMSk7cmV0dXJuIHRoaXN9LG1ha2VTaGVhcjpmdW5jdGlvbihiLAplLGgpe3RoaXMuc2V0KDEsZSxoLDAsYiwxLGgsMCxiLGUsMSwwLDAsMCwwLDEpO3JldHVybiB0aGlzfSxjb21wb3NlOmZ1bmN0aW9uKGIsZSxoKXt2YXIgbj10aGlzLmVsZW1lbnRzLHU9ZS5feCx3PWUuX3ksej1lLl96LEU9ZS5fdyxIPXUrdSxJPXcrdyxPPXorejtlPXUqSDt2YXIgUT11Kkk7dSo9Tzt2YXIgUj13Kkk7dyo9Tzt6Kj1PO0gqPUU7SSo9RTtFKj1PO089aC54O3ZhciBVPWgueTtoPWguejtuWzBdPSgxLShSK3opKSpPO25bMV09KFErRSkqTztuWzJdPSh1LUkpKk87blszXT0wO25bNF09KFEtRSkqVTtuWzVdPSgxLShlK3opKSpVO25bNl09KHcrSCkqVTtuWzddPTA7bls4XT0odStJKSpoO25bOV09KHctSCkqaDtuWzEwXT0oMS0oZStSKSkqaDtuWzExXT0wO25bMTJdPWIueDtuWzEzXT1iLnk7blsxNF09Yi56O25bMTVdPTE7cmV0dXJuIHRoaXN9LGRlY29tcG9zZTpmdW5jdGlvbigpe3ZhciBiPW5ldyBnLGU9bmV3IEM7cmV0dXJuIGZ1bmN0aW9uKGgsbix1KXt2YXIgdz0KdGhpcy5lbGVtZW50cyx6PWIuc2V0KHdbMF0sd1sxXSx3WzJdKS5sZW5ndGgoKSxFPWIuc2V0KHdbNF0sd1s1XSx3WzZdKS5sZW5ndGgoKSxIPWIuc2V0KHdbOF0sd1s5XSx3WzEwXSkubGVuZ3RoKCk7MD50aGlzLmRldGVybWluYW50KCkmJih6PS16KTtoLng9d1sxMl07aC55PXdbMTNdO2guej13WzE0XTtlLmNvcHkodGhpcyk7aD0xL3o7dz0xL0U7dmFyIEk9MS9IO2UuZWxlbWVudHNbMF0qPWg7ZS5lbGVtZW50c1sxXSo9aDtlLmVsZW1lbnRzWzJdKj1oO2UuZWxlbWVudHNbNF0qPXc7ZS5lbGVtZW50c1s1XSo9dztlLmVsZW1lbnRzWzZdKj13O2UuZWxlbWVudHNbOF0qPUk7ZS5lbGVtZW50c1s5XSo9STtlLmVsZW1lbnRzWzEwXSo9STtuLnNldEZyb21Sb3RhdGlvbk1hdHJpeChlKTt1Lng9ejt1Lnk9RTt1Lno9SDtyZXR1cm4gdGhpc319KCksbWFrZVBlcnNwZWN0aXZlOmZ1bmN0aW9uKGIsZSxoLG4sdSx3KXt2b2lkIDA9PT13JiZjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5tYWtlUGVyc3BlY3RpdmUoKSBoYXMgYmVlbiByZWRlZmluZWQgYW5kIGhhcyBhIG5ldyBzaWduYXR1cmUuIFBsZWFzZSBjaGVjayB0aGUgZG9jcy4iKTsKdmFyIHo9dGhpcy5lbGVtZW50czt6WzBdPTIqdS8oZS1iKTt6WzRdPTA7els4XT0oZStiKS8oZS1iKTt6WzEyXT0wO3pbMV09MDt6WzVdPTIqdS8oaC1uKTt6WzldPShoK24pLyhoLW4pO3pbMTNdPTA7elsyXT0wO3pbNl09MDt6WzEwXT0tKHcrdSkvKHctdSk7elsxNF09LTIqdyp1Lyh3LXUpO3pbM109MDt6WzddPTA7elsxMV09LTE7elsxNV09MDtyZXR1cm4gdGhpc30sbWFrZU9ydGhvZ3JhcGhpYzpmdW5jdGlvbihiLGUsaCxuLHUsdyl7dmFyIHo9dGhpcy5lbGVtZW50cyxFPTEvKGUtYiksSD0xLyhoLW4pLEk9MS8ody11KTt6WzBdPTIqRTt6WzRdPTA7els4XT0wO3pbMTJdPS0oKGUrYikqRSk7elsxXT0wO3pbNV09MipIO3pbOV09MDt6WzEzXT0tKChoK24pKkgpO3pbMl09MDt6WzZdPTA7elsxMF09LTIqSTt6WzE0XT0tKCh3K3UpKkkpO3pbM109MDt6WzddPTA7elsxMV09MDt6WzE1XT0xO3JldHVybiB0aGlzfSxlcXVhbHM6ZnVuY3Rpb24oYil7dmFyIGU9dGhpcy5lbGVtZW50czsKYj1iLmVsZW1lbnRzO2Zvcih2YXIgaD0wOzE2Pmg7aCsrKWlmKGVbaF0hPT1iW2hdKXJldHVybiExO3JldHVybiEwfSxmcm9tQXJyYXk6ZnVuY3Rpb24oYixlKXt2b2lkIDA9PT1lJiYoZT0wKTtmb3IodmFyIGg9MDsxNj5oO2grKyl0aGlzLmVsZW1lbnRzW2hdPWJbaCtlXTtyZXR1cm4gdGhpc30sdG9BcnJheTpmdW5jdGlvbihiLGUpe3ZvaWQgMD09PWImJihiPVtdKTt2b2lkIDA9PT1lJiYoZT0wKTt2YXIgaD10aGlzLmVsZW1lbnRzO2JbZV09aFswXTtiW2UrMV09aFsxXTtiW2UrMl09aFsyXTtiW2UrM109aFszXTtiW2UrNF09aFs0XTtiW2UrNV09aFs1XTtiW2UrNl09aFs2XTtiW2UrN109aFs3XTtiW2UrOF09aFs4XTtiW2UrOV09aFs5XTtiW2UrMTBdPWhbMTBdO2JbZSsxMV09aFsxMV07YltlKzEyXT1oWzEyXTtiW2UrMTNdPWhbMTNdO2JbZSsxNF09aFsxNF07YltlKzE1XT1oWzE1XTtyZXR1cm4gYn19KTt2YXIgemI9e2FscGhhbWFwX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0FMUEhBTUFQXG5cdGRpZmZ1c2VDb2xvci5hICpceDNkIHRleHR1cmUyRCggYWxwaGFNYXAsIHZVdiApLmc7XG4jZW5kaWYiLAphbHBoYW1hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0FMUEhBTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIGFscGhhTWFwO1xuI2VuZGlmIixhbHBoYXRlc3RfZnJhZ21lbnQ6IiNpZmRlZiBBTFBIQVRFU1Rcblx0aWYgKCBkaWZmdXNlQ29sb3IuYSBceDNjIEFMUEhBVEVTVCApIGRpc2NhcmQ7XG4jZW5kaWYiLGFvbWFwX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0FPTUFQXG5cdGZsb2F0IGFtYmllbnRPY2NsdXNpb24gXHgzZCAoIHRleHR1cmUyRCggYW9NYXAsIHZVdjIgKS5yIC0gMS4wICkgKiBhb01hcEludGVuc2l0eSArIDEuMDtcblx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICpceDNkIGFtYmllbnRPY2NsdXNpb247XG5cdCNpZiBkZWZpbmVkKCBVU0VfRU5WTUFQICkgXHgyNlx4MjYgZGVmaW5lZCggUEhZU0lDQUwgKVxuXHRcdGZsb2F0IGRvdE5WIFx4M2Qgc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkubm9ybWFsLCBnZW9tZXRyeS52aWV3RGlyICkgKTtcblx0XHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdFNwZWN1bGFyICpceDNkIGNvbXB1dGVTcGVjdWxhck9jY2x1c2lvbiggZG90TlYsIGFtYmllbnRPY2NsdXNpb24sIG1hdGVyaWFsLnNwZWN1bGFyUm91Z2huZXNzICk7XG5cdCNlbmRpZlxuI2VuZGlmIiwKYW9tYXBfcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9BT01BUFxuXHR1bmlmb3JtIHNhbXBsZXIyRCBhb01hcDtcblx0dW5pZm9ybSBmbG9hdCBhb01hcEludGVuc2l0eTtcbiNlbmRpZiIsYmVnaW5fdmVydGV4OiJ2ZWMzIHRyYW5zZm9ybWVkIFx4M2QgdmVjMyggcG9zaXRpb24gKTsiLGJlZ2lubm9ybWFsX3ZlcnRleDoidmVjMyBvYmplY3ROb3JtYWwgXHgzZCB2ZWMzKCBub3JtYWwgKTtcbiNpZmRlZiBVU0VfVEFOR0VOVFxuXHR2ZWMzIG9iamVjdFRhbmdlbnQgXHgzZCB2ZWMzKCB0YW5nZW50Lnh5eiApO1xuI2VuZGlmIixic2RmczoidmVjMiBpbnRlZ3JhdGVTcGVjdWxhckJSREYoIGNvbnN0IGluIGZsb2F0IGRvdE5WLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MgKSB7XG5cdGNvbnN0IHZlYzQgYzAgXHgzZCB2ZWM0KCAtIDEsIC0gMC4wMjc1LCAtIDAuNTcyLCAwLjAyMiApO1xuXHRjb25zdCB2ZWM0IGMxIFx4M2QgdmVjNCggMSwgMC4wNDI1LCAxLjA0LCAtIDAuMDQgKTtcblx0dmVjNCByIFx4M2Qgcm91Z2huZXNzICogYzAgKyBjMTtcblx0ZmxvYXQgYTAwNCBceDNkIG1pbiggci54ICogci54LCBleHAyKCAtIDkuMjggKiBkb3ROViApICkgKiByLnggKyByLnk7XG5cdHJldHVybiB2ZWMyKCAtMS4wNCwgMS4wNCApICogYTAwNCArIHIuenc7XG59XG5mbG9hdCBwdW5jdHVhbExpZ2h0SW50ZW5zaXR5VG9JcnJhZGlhbmNlRmFjdG9yKCBjb25zdCBpbiBmbG9hdCBsaWdodERpc3RhbmNlLCBjb25zdCBpbiBmbG9hdCBjdXRvZmZEaXN0YW5jZSwgY29uc3QgaW4gZmxvYXQgZGVjYXlFeHBvbmVudCApIHtcbiNpZiBkZWZpbmVkICggUEhZU0lDQUxMWV9DT1JSRUNUX0xJR0hUUyApXG5cdGZsb2F0IGRpc3RhbmNlRmFsbG9mZiBceDNkIDEuMCAvIG1heCggcG93KCBsaWdodERpc3RhbmNlLCBkZWNheUV4cG9uZW50ICksIDAuMDEgKTtcblx0aWYoIGN1dG9mZkRpc3RhbmNlIFx4M2UgMC4wICkge1xuXHRcdGRpc3RhbmNlRmFsbG9mZiAqXHgzZCBwb3cyKCBzYXR1cmF0ZSggMS4wIC0gcG93NCggbGlnaHREaXN0YW5jZSAvIGN1dG9mZkRpc3RhbmNlICkgKSApO1xuXHR9XG5cdHJldHVybiBkaXN0YW5jZUZhbGxvZmY7XG4jZWxzZVxuXHRpZiggY3V0b2ZmRGlzdGFuY2UgXHgzZSAwLjAgXHgyNlx4MjYgZGVjYXlFeHBvbmVudCBceDNlIDAuMCApIHtcblx0XHRyZXR1cm4gcG93KCBzYXR1cmF0ZSggLWxpZ2h0RGlzdGFuY2UgLyBjdXRvZmZEaXN0YW5jZSArIDEuMCApLCBkZWNheUV4cG9uZW50ICk7XG5cdH1cblx0cmV0dXJuIDEuMDtcbiNlbmRpZlxufVxudmVjMyBCUkRGX0RpZmZ1c2VfTGFtYmVydCggY29uc3QgaW4gdmVjMyBkaWZmdXNlQ29sb3IgKSB7XG5cdHJldHVybiBSRUNJUFJPQ0FMX1BJICogZGlmZnVzZUNvbG9yO1xufVxudmVjMyBGX1NjaGxpY2soIGNvbnN0IGluIHZlYzMgc3BlY3VsYXJDb2xvciwgY29uc3QgaW4gZmxvYXQgZG90TEggKSB7XG5cdGZsb2F0IGZyZXNuZWwgXHgzZCBleHAyKCAoIC01LjU1NDczICogZG90TEggLSA2Ljk4MzE2ICkgKiBkb3RMSCApO1xuXHRyZXR1cm4gKCAxLjAgLSBzcGVjdWxhckNvbG9yICkgKiBmcmVzbmVsICsgc3BlY3VsYXJDb2xvcjtcbn1cbmZsb2F0IEdfR0dYX1NtaXRoKCBjb25zdCBpbiBmbG9hdCBhbHBoYSwgY29uc3QgaW4gZmxvYXQgZG90TkwsIGNvbnN0IGluIGZsb2F0IGRvdE5WICkge1xuXHRmbG9hdCBhMiBceDNkIHBvdzIoIGFscGhhICk7XG5cdGZsb2F0IGdsIFx4M2QgZG90TkwgKyBzcXJ0KCBhMiArICggMS4wIC0gYTIgKSAqIHBvdzIoIGRvdE5MICkgKTtcblx0ZmxvYXQgZ3YgXHgzZCBkb3ROViArIHNxcnQoIGEyICsgKCAxLjAgLSBhMiApICogcG93MiggZG90TlYgKSApO1xuXHRyZXR1cm4gMS4wIC8gKCBnbCAqIGd2ICk7XG59XG5mbG9hdCBHX0dHWF9TbWl0aENvcnJlbGF0ZWQoIGNvbnN0IGluIGZsb2F0IGFscGhhLCBjb25zdCBpbiBmbG9hdCBkb3ROTCwgY29uc3QgaW4gZmxvYXQgZG90TlYgKSB7XG5cdGZsb2F0IGEyIFx4M2QgcG93MiggYWxwaGEgKTtcblx0ZmxvYXQgZ3YgXHgzZCBkb3ROTCAqIHNxcnQoIGEyICsgKCAxLjAgLSBhMiApICogcG93MiggZG90TlYgKSApO1xuXHRmbG9hdCBnbCBceDNkIGRvdE5WICogc3FydCggYTIgKyAoIDEuMCAtIGEyICkgKiBwb3cyKCBkb3ROTCApICk7XG5cdHJldHVybiAwLjUgLyBtYXgoIGd2ICsgZ2wsIEVQU0lMT04gKTtcbn1cbmZsb2F0IERfR0dYKCBjb25zdCBpbiBmbG9hdCBhbHBoYSwgY29uc3QgaW4gZmxvYXQgZG90TkggKSB7XG5cdGZsb2F0IGEyIFx4M2QgcG93MiggYWxwaGEgKTtcblx0ZmxvYXQgZGVub20gXHgzZCBwb3cyKCBkb3ROSCApICogKCBhMiAtIDEuMCApICsgMS4wO1xuXHRyZXR1cm4gUkVDSVBST0NBTF9QSSAqIGEyIC8gcG93MiggZGVub20gKTtcbn1cbnZlYzMgQlJERl9TcGVjdWxhcl9HR1goIGNvbnN0IGluIEluY2lkZW50TGlnaHQgaW5jaWRlbnRMaWdodCwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gdmVjMyBzcGVjdWxhckNvbG9yLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MgKSB7XG5cdGZsb2F0IGFscGhhIFx4M2QgcG93Miggcm91Z2huZXNzICk7XG5cdHZlYzMgaGFsZkRpciBceDNkIG5vcm1hbGl6ZSggaW5jaWRlbnRMaWdodC5kaXJlY3Rpb24gKyBnZW9tZXRyeS52aWV3RGlyICk7XG5cdGZsb2F0IGRvdE5MIFx4M2Qgc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkubm9ybWFsLCBpbmNpZGVudExpZ2h0LmRpcmVjdGlvbiApICk7XG5cdGZsb2F0IGRvdE5WIFx4M2Qgc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkubm9ybWFsLCBnZW9tZXRyeS52aWV3RGlyICkgKTtcblx0ZmxvYXQgZG90TkggXHgzZCBzYXR1cmF0ZSggZG90KCBnZW9tZXRyeS5ub3JtYWwsIGhhbGZEaXIgKSApO1xuXHRmbG9hdCBkb3RMSCBceDNkIHNhdHVyYXRlKCBkb3QoIGluY2lkZW50TGlnaHQuZGlyZWN0aW9uLCBoYWxmRGlyICkgKTtcblx0dmVjMyBGIFx4M2QgRl9TY2hsaWNrKCBzcGVjdWxhckNvbG9yLCBkb3RMSCApO1xuXHRmbG9hdCBHIFx4M2QgR19HR1hfU21pdGhDb3JyZWxhdGVkKCBhbHBoYSwgZG90TkwsIGRvdE5WICk7XG5cdGZsb2F0IEQgXHgzZCBEX0dHWCggYWxwaGEsIGRvdE5IICk7XG5cdHJldHVybiBGICogKCBHICogRCApO1xufVxudmVjMiBMVENfVXYoIGNvbnN0IGluIHZlYzMgTiwgY29uc3QgaW4gdmVjMyBWLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MgKSB7XG5cdGNvbnN0IGZsb2F0IExVVF9TSVpFICBceDNkIDY0LjA7XG5cdGNvbnN0IGZsb2F0IExVVF9TQ0FMRSBceDNkICggTFVUX1NJWkUgLSAxLjAgKSAvIExVVF9TSVpFO1xuXHRjb25zdCBmbG9hdCBMVVRfQklBUyAgXHgzZCAwLjUgLyBMVVRfU0laRTtcblx0ZmxvYXQgZG90TlYgXHgzZCBzYXR1cmF0ZSggZG90KCBOLCBWICkgKTtcblx0dmVjMiB1diBceDNkIHZlYzIoIHJvdWdobmVzcywgc3FydCggMS4wIC0gZG90TlYgKSApO1xuXHR1diBceDNkIHV2ICogTFVUX1NDQUxFICsgTFVUX0JJQVM7XG5cdHJldHVybiB1djtcbn1cbmZsb2F0IExUQ19DbGlwcGVkU3BoZXJlRm9ybUZhY3RvciggY29uc3QgaW4gdmVjMyBmICkge1xuXHRmbG9hdCBsIFx4M2QgbGVuZ3RoKCBmICk7XG5cdHJldHVybiBtYXgoICggbCAqIGwgKyBmLnogKSAvICggbCArIDEuMCApLCAwLjAgKTtcbn1cbnZlYzMgTFRDX0VkZ2VWZWN0b3JGb3JtRmFjdG9yKCBjb25zdCBpbiB2ZWMzIHYxLCBjb25zdCBpbiB2ZWMzIHYyICkge1xuXHRmbG9hdCB4IFx4M2QgZG90KCB2MSwgdjIgKTtcblx0ZmxvYXQgeSBceDNkIGFicyggeCApO1xuXHRmbG9hdCBhIFx4M2QgMC44NTQzOTg1ICsgKCAwLjQ5NjUxNTUgKyAwLjAxNDUyMDYgKiB5ICkgKiB5O1xuXHRmbG9hdCBiIFx4M2QgMy40MTc1OTQwICsgKCA0LjE2MTY3MjQgKyB5ICkgKiB5O1xuXHRmbG9hdCB2IFx4M2QgYSAvIGI7XG5cdGZsb2F0IHRoZXRhX3NpbnRoZXRhIFx4M2QgKCB4IFx4M2UgMC4wICkgPyB2IDogMC41ICogaW52ZXJzZXNxcnQoIG1heCggMS4wIC0geCAqIHgsIDFlLTcgKSApIC0gdjtcblx0cmV0dXJuIGNyb3NzKCB2MSwgdjIgKSAqIHRoZXRhX3NpbnRoZXRhO1xufVxudmVjMyBMVENfRXZhbHVhdGUoIGNvbnN0IGluIHZlYzMgTiwgY29uc3QgaW4gdmVjMyBWLCBjb25zdCBpbiB2ZWMzIFAsIGNvbnN0IGluIG1hdDMgbUludiwgY29uc3QgaW4gdmVjMyByZWN0Q29vcmRzWyA0IF0gKSB7XG5cdHZlYzMgdjEgXHgzZCByZWN0Q29vcmRzWyAxIF0gLSByZWN0Q29vcmRzWyAwIF07XG5cdHZlYzMgdjIgXHgzZCByZWN0Q29vcmRzWyAzIF0gLSByZWN0Q29vcmRzWyAwIF07XG5cdHZlYzMgbGlnaHROb3JtYWwgXHgzZCBjcm9zcyggdjEsIHYyICk7XG5cdGlmKCBkb3QoIGxpZ2h0Tm9ybWFsLCBQIC0gcmVjdENvb3Jkc1sgMCBdICkgXHgzYyAwLjAgKSByZXR1cm4gdmVjMyggMC4wICk7XG5cdHZlYzMgVDEsIFQyO1xuXHRUMSBceDNkIG5vcm1hbGl6ZSggViAtIE4gKiBkb3QoIFYsIE4gKSApO1xuXHRUMiBceDNkIC0gY3Jvc3MoIE4sIFQxICk7XG5cdG1hdDMgbWF0IFx4M2QgbUludiAqIHRyYW5zcG9zZU1hdDMoIG1hdDMoIFQxLCBUMiwgTiApICk7XG5cdHZlYzMgY29vcmRzWyA0IF07XG5cdGNvb3Jkc1sgMCBdIFx4M2QgbWF0ICogKCByZWN0Q29vcmRzWyAwIF0gLSBQICk7XG5cdGNvb3Jkc1sgMSBdIFx4M2QgbWF0ICogKCByZWN0Q29vcmRzWyAxIF0gLSBQICk7XG5cdGNvb3Jkc1sgMiBdIFx4M2QgbWF0ICogKCByZWN0Q29vcmRzWyAyIF0gLSBQICk7XG5cdGNvb3Jkc1sgMyBdIFx4M2QgbWF0ICogKCByZWN0Q29vcmRzWyAzIF0gLSBQICk7XG5cdGNvb3Jkc1sgMCBdIFx4M2Qgbm9ybWFsaXplKCBjb29yZHNbIDAgXSApO1xuXHRjb29yZHNbIDEgXSBceDNkIG5vcm1hbGl6ZSggY29vcmRzWyAxIF0gKTtcblx0Y29vcmRzWyAyIF0gXHgzZCBub3JtYWxpemUoIGNvb3Jkc1sgMiBdICk7XG5cdGNvb3Jkc1sgMyBdIFx4M2Qgbm9ybWFsaXplKCBjb29yZHNbIDMgXSApO1xuXHR2ZWMzIHZlY3RvckZvcm1GYWN0b3IgXHgzZCB2ZWMzKCAwLjAgKTtcblx0dmVjdG9yRm9ybUZhY3RvciArXHgzZCBMVENfRWRnZVZlY3RvckZvcm1GYWN0b3IoIGNvb3Jkc1sgMCBdLCBjb29yZHNbIDEgXSApO1xuXHR2ZWN0b3JGb3JtRmFjdG9yICtceDNkIExUQ19FZGdlVmVjdG9yRm9ybUZhY3RvciggY29vcmRzWyAxIF0sIGNvb3Jkc1sgMiBdICk7XG5cdHZlY3RvckZvcm1GYWN0b3IgK1x4M2QgTFRDX0VkZ2VWZWN0b3JGb3JtRmFjdG9yKCBjb29yZHNbIDIgXSwgY29vcmRzWyAzIF0gKTtcblx0dmVjdG9yRm9ybUZhY3RvciArXHgzZCBMVENfRWRnZVZlY3RvckZvcm1GYWN0b3IoIGNvb3Jkc1sgMyBdLCBjb29yZHNbIDAgXSApO1xuXHRmbG9hdCByZXN1bHQgXHgzZCBMVENfQ2xpcHBlZFNwaGVyZUZvcm1GYWN0b3IoIHZlY3RvckZvcm1GYWN0b3IgKTtcblx0cmV0dXJuIHZlYzMoIHJlc3VsdCApO1xufVxudmVjMyBCUkRGX1NwZWN1bGFyX0dHWF9FbnZpcm9ubWVudCggY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gdmVjMyBzcGVjdWxhckNvbG9yLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MgKSB7XG5cdGZsb2F0IGRvdE5WIFx4M2Qgc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkubm9ybWFsLCBnZW9tZXRyeS52aWV3RGlyICkgKTtcblx0dmVjMiBicmRmIFx4M2QgaW50ZWdyYXRlU3BlY3VsYXJCUkRGKCBkb3ROViwgcm91Z2huZXNzICk7XG5cdHJldHVybiBzcGVjdWxhckNvbG9yICogYnJkZi54ICsgYnJkZi55O1xufVxudm9pZCBCUkRGX1NwZWN1bGFyX011bHRpc2NhdHRlcmluZ19FbnZpcm9ubWVudCggY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gdmVjMyBzcGVjdWxhckNvbG9yLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MsIGlub3V0IHZlYzMgc2luZ2xlU2NhdHRlciwgaW5vdXQgdmVjMyBtdWx0aVNjYXR0ZXIgKSB7XG5cdGZsb2F0IGRvdE5WIFx4M2Qgc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkubm9ybWFsLCBnZW9tZXRyeS52aWV3RGlyICkgKTtcblx0dmVjMyBGIFx4M2QgRl9TY2hsaWNrKCBzcGVjdWxhckNvbG9yLCBkb3ROViApO1xuXHR2ZWMyIGJyZGYgXHgzZCBpbnRlZ3JhdGVTcGVjdWxhckJSREYoIGRvdE5WLCByb3VnaG5lc3MgKTtcblx0dmVjMyBGc3NFc3MgXHgzZCBGICogYnJkZi54ICsgYnJkZi55O1xuXHRmbG9hdCBFc3MgXHgzZCBicmRmLnggKyBicmRmLnk7XG5cdGZsb2F0IEVtcyBceDNkIDEuMCAtIEVzcztcblx0dmVjMyBGYXZnIFx4M2Qgc3BlY3VsYXJDb2xvciArICggMS4wIC0gc3BlY3VsYXJDb2xvciApICogMC4wNDc2MTk7XHR2ZWMzIEZtcyBceDNkIEZzc0VzcyAqIEZhdmcgLyAoIDEuMCAtIEVtcyAqIEZhdmcgKTtcblx0c2luZ2xlU2NhdHRlciArXHgzZCBGc3NFc3M7XG5cdG11bHRpU2NhdHRlciArXHgzZCBGbXMgKiBFbXM7XG59XG5mbG9hdCBHX0JsaW5uUGhvbmdfSW1wbGljaXQoICkge1xuXHRyZXR1cm4gMC4yNTtcbn1cbmZsb2F0IERfQmxpbm5QaG9uZyggY29uc3QgaW4gZmxvYXQgc2hpbmluZXNzLCBjb25zdCBpbiBmbG9hdCBkb3ROSCApIHtcblx0cmV0dXJuIFJFQ0lQUk9DQUxfUEkgKiAoIHNoaW5pbmVzcyAqIDAuNSArIDEuMCApICogcG93KCBkb3ROSCwgc2hpbmluZXNzICk7XG59XG52ZWMzIEJSREZfU3BlY3VsYXJfQmxpbm5QaG9uZyggY29uc3QgaW4gSW5jaWRlbnRMaWdodCBpbmNpZGVudExpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiB2ZWMzIHNwZWN1bGFyQ29sb3IsIGNvbnN0IGluIGZsb2F0IHNoaW5pbmVzcyApIHtcblx0dmVjMyBoYWxmRGlyIFx4M2Qgbm9ybWFsaXplKCBpbmNpZGVudExpZ2h0LmRpcmVjdGlvbiArIGdlb21ldHJ5LnZpZXdEaXIgKTtcblx0ZmxvYXQgZG90TkggXHgzZCBzYXR1cmF0ZSggZG90KCBnZW9tZXRyeS5ub3JtYWwsIGhhbGZEaXIgKSApO1xuXHRmbG9hdCBkb3RMSCBceDNkIHNhdHVyYXRlKCBkb3QoIGluY2lkZW50TGlnaHQuZGlyZWN0aW9uLCBoYWxmRGlyICkgKTtcblx0dmVjMyBGIFx4M2QgRl9TY2hsaWNrKCBzcGVjdWxhckNvbG9yLCBkb3RMSCApO1xuXHRmbG9hdCBHIFx4M2QgR19CbGlublBob25nX0ltcGxpY2l0KCApO1xuXHRmbG9hdCBEIFx4M2QgRF9CbGlublBob25nKCBzaGluaW5lc3MsIGRvdE5IICk7XG5cdHJldHVybiBGICogKCBHICogRCApO1xufVxuZmxvYXQgR0dYUm91Z2huZXNzVG9CbGlubkV4cG9uZW50KCBjb25zdCBpbiBmbG9hdCBnZ3hSb3VnaG5lc3MgKSB7XG5cdHJldHVybiAoIDIuMCAvIHBvdzIoIGdneFJvdWdobmVzcyArIDAuMDAwMSApIC0gMi4wICk7XG59XG5mbG9hdCBCbGlubkV4cG9uZW50VG9HR1hSb3VnaG5lc3MoIGNvbnN0IGluIGZsb2F0IGJsaW5uRXhwb25lbnQgKSB7XG5cdHJldHVybiBzcXJ0KCAyLjAgLyAoIGJsaW5uRXhwb25lbnQgKyAyLjAgKSApO1xufSIsCmJ1bXBtYXBfcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9CVU1QTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIGJ1bXBNYXA7XG5cdHVuaWZvcm0gZmxvYXQgYnVtcFNjYWxlO1xuXHR2ZWMyIGRIZHh5X2Z3ZCgpIHtcblx0XHR2ZWMyIGRTVGR4IFx4M2QgZEZkeCggdlV2ICk7XG5cdFx0dmVjMiBkU1RkeSBceDNkIGRGZHkoIHZVdiApO1xuXHRcdGZsb2F0IEhsbCBceDNkIGJ1bXBTY2FsZSAqIHRleHR1cmUyRCggYnVtcE1hcCwgdlV2ICkueDtcblx0XHRmbG9hdCBkQnggXHgzZCBidW1wU2NhbGUgKiB0ZXh0dXJlMkQoIGJ1bXBNYXAsIHZVdiArIGRTVGR4ICkueCAtIEhsbDtcblx0XHRmbG9hdCBkQnkgXHgzZCBidW1wU2NhbGUgKiB0ZXh0dXJlMkQoIGJ1bXBNYXAsIHZVdiArIGRTVGR5ICkueCAtIEhsbDtcblx0XHRyZXR1cm4gdmVjMiggZEJ4LCBkQnkgKTtcblx0fVxuXHR2ZWMzIHBlcnR1cmJOb3JtYWxBcmIoIHZlYzMgc3VyZl9wb3MsIHZlYzMgc3VyZl9ub3JtLCB2ZWMyIGRIZHh5ICkge1xuXHRcdHZlYzMgdlNpZ21hWCBceDNkIHZlYzMoIGRGZHgoIHN1cmZfcG9zLnggKSwgZEZkeCggc3VyZl9wb3MueSApLCBkRmR4KCBzdXJmX3Bvcy56ICkgKTtcblx0XHR2ZWMzIHZTaWdtYVkgXHgzZCB2ZWMzKCBkRmR5KCBzdXJmX3Bvcy54ICksIGRGZHkoIHN1cmZfcG9zLnkgKSwgZEZkeSggc3VyZl9wb3MueiApICk7XG5cdFx0dmVjMyB2TiBceDNkIHN1cmZfbm9ybTtcblx0XHR2ZWMzIFIxIFx4M2QgY3Jvc3MoIHZTaWdtYVksIHZOICk7XG5cdFx0dmVjMyBSMiBceDNkIGNyb3NzKCB2TiwgdlNpZ21hWCApO1xuXHRcdGZsb2F0IGZEZXQgXHgzZCBkb3QoIHZTaWdtYVgsIFIxICk7XG5cdFx0ZkRldCAqXHgzZCAoIGZsb2F0KCBnbF9Gcm9udEZhY2luZyApICogMi4wIC0gMS4wICk7XG5cdFx0dmVjMyB2R3JhZCBceDNkIHNpZ24oIGZEZXQgKSAqICggZEhkeHkueCAqIFIxICsgZEhkeHkueSAqIFIyICk7XG5cdFx0cmV0dXJuIG5vcm1hbGl6ZSggYWJzKCBmRGV0ICkgKiBzdXJmX25vcm0gLSB2R3JhZCApO1xuXHR9XG4jZW5kaWYiLApjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ6IiNpZiBOVU1fQ0xJUFBJTkdfUExBTkVTIFx4M2UgMFxuXHR2ZWM0IHBsYW5lO1xuXHQjcHJhZ21hIHVucm9sbF9sb29wXG5cdGZvciAoIGludCBpIFx4M2QgMDsgaSBceDNjIFVOSU9OX0NMSVBQSU5HX1BMQU5FUzsgaSArKyApIHtcblx0XHRwbGFuZSBceDNkIGNsaXBwaW5nUGxhbmVzWyBpIF07XG5cdFx0aWYgKCBkb3QoIHZWaWV3UG9zaXRpb24sIHBsYW5lLnh5eiApIFx4M2UgcGxhbmUudyApIGRpc2NhcmQ7XG5cdH1cblx0I2lmIFVOSU9OX0NMSVBQSU5HX1BMQU5FUyBceDNjIE5VTV9DTElQUElOR19QTEFORVNcblx0XHRib29sIGNsaXBwZWQgXHgzZCB0cnVlO1xuXHRcdCNwcmFnbWEgdW5yb2xsX2xvb3Bcblx0XHRmb3IgKCBpbnQgaSBceDNkIFVOSU9OX0NMSVBQSU5HX1BMQU5FUzsgaSBceDNjIE5VTV9DTElQUElOR19QTEFORVM7IGkgKysgKSB7XG5cdFx0XHRwbGFuZSBceDNkIGNsaXBwaW5nUGxhbmVzWyBpIF07XG5cdFx0XHRjbGlwcGVkIFx4M2QgKCBkb3QoIHZWaWV3UG9zaXRpb24sIHBsYW5lLnh5eiApIFx4M2UgcGxhbmUudyApIFx4MjZceDI2IGNsaXBwZWQ7XG5cdFx0fVxuXHRcdGlmICggY2xpcHBlZCApIGRpc2NhcmQ7XG5cdCNlbmRpZlxuI2VuZGlmIiwKY2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ6IiNpZiBOVU1fQ0xJUFBJTkdfUExBTkVTIFx4M2UgMFxuXHQjaWYgISBkZWZpbmVkKCBQSFlTSUNBTCApIFx4MjZceDI2ICEgZGVmaW5lZCggUEhPTkcgKSBceDI2XHgyNiAhIGRlZmluZWQoIE1BVENBUCApXG5cdFx0dmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247XG5cdCNlbmRpZlxuXHR1bmlmb3JtIHZlYzQgY2xpcHBpbmdQbGFuZXNbIE5VTV9DTElQUElOR19QTEFORVMgXTtcbiNlbmRpZiIsY2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4OiIjaWYgTlVNX0NMSVBQSU5HX1BMQU5FUyBceDNlIDAgXHgyNlx4MjYgISBkZWZpbmVkKCBQSFlTSUNBTCApIFx4MjZceDI2ICEgZGVmaW5lZCggUEhPTkcgKSBceDI2XHgyNiAhIGRlZmluZWQoIE1BVENBUCApXG5cdHZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uO1xuI2VuZGlmIixjbGlwcGluZ19wbGFuZXNfdmVydGV4OiIjaWYgTlVNX0NMSVBQSU5HX1BMQU5FUyBceDNlIDAgXHgyNlx4MjYgISBkZWZpbmVkKCBQSFlTSUNBTCApIFx4MjZceDI2ICEgZGVmaW5lZCggUEhPTkcgKSBceDI2XHgyNiAhIGRlZmluZWQoIE1BVENBUCApXG5cdHZWaWV3UG9zaXRpb24gXHgzZCAtIG12UG9zaXRpb24ueHl6O1xuI2VuZGlmIiwKY29sb3JfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfQ09MT1Jcblx0ZGlmZnVzZUNvbG9yLnJnYiAqXHgzZCB2Q29sb3I7XG4jZW5kaWYiLGNvbG9yX3BhcnNfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfQ09MT1Jcblx0dmFyeWluZyB2ZWMzIHZDb2xvcjtcbiNlbmRpZiIsY29sb3JfcGFyc192ZXJ0ZXg6IiNpZmRlZiBVU0VfQ09MT1Jcblx0dmFyeWluZyB2ZWMzIHZDb2xvcjtcbiNlbmRpZiIsY29sb3JfdmVydGV4OiIjaWZkZWYgVVNFX0NPTE9SXG5cdHZDb2xvci54eXogXHgzZCBjb2xvci54eXo7XG4jZW5kaWYiLGNvbW1vbjoiI2RlZmluZSBQSSAzLjE0MTU5MjY1MzU5XG4jZGVmaW5lIFBJMiA2LjI4MzE4NTMwNzE4XG4jZGVmaW5lIFBJX0hBTEYgMS41NzA3OTYzMjY3OTQ5XG4jZGVmaW5lIFJFQ0lQUk9DQUxfUEkgMC4zMTgzMDk4ODYxOFxuI2RlZmluZSBSRUNJUFJPQ0FMX1BJMiAwLjE1OTE1NDk0XG4jZGVmaW5lIExPRzIgMS40NDI2OTVcbiNkZWZpbmUgRVBTSUxPTiAxZS02XG4jZGVmaW5lIHNhdHVyYXRlKGEpIGNsYW1wKCBhLCAwLjAsIDEuMCApXG4jZGVmaW5lIHdoaXRlQ29tcGxpbWVudChhKSAoIDEuMCAtIHNhdHVyYXRlKCBhICkgKVxuZmxvYXQgcG93MiggY29uc3QgaW4gZmxvYXQgeCApIHsgcmV0dXJuIHgqeDsgfVxuZmxvYXQgcG93MyggY29uc3QgaW4gZmxvYXQgeCApIHsgcmV0dXJuIHgqeCp4OyB9XG5mbG9hdCBwb3c0KCBjb25zdCBpbiBmbG9hdCB4ICkgeyBmbG9hdCB4MiBceDNkIHgqeDsgcmV0dXJuIHgyKngyOyB9XG5mbG9hdCBhdmVyYWdlKCBjb25zdCBpbiB2ZWMzIGNvbG9yICkgeyByZXR1cm4gZG90KCBjb2xvciwgdmVjMyggMC4zMzMzICkgKTsgfVxuaGlnaHAgZmxvYXQgcmFuZCggY29uc3QgaW4gdmVjMiB1diApIHtcblx0Y29uc3QgaGlnaHAgZmxvYXQgYSBceDNkIDEyLjk4OTgsIGIgXHgzZCA3OC4yMzMsIGMgXHgzZCA0Mzc1OC41NDUzO1xuXHRoaWdocCBmbG9hdCBkdCBceDNkIGRvdCggdXYueHksIHZlYzIoIGEsYiApICksIHNuIFx4M2QgbW9kKCBkdCwgUEkgKTtcblx0cmV0dXJuIGZyYWN0KHNpbihzbikgKiBjKTtcbn1cbnN0cnVjdCBJbmNpZGVudExpZ2h0IHtcblx0dmVjMyBjb2xvcjtcblx0dmVjMyBkaXJlY3Rpb247XG5cdGJvb2wgdmlzaWJsZTtcbn07XG5zdHJ1Y3QgUmVmbGVjdGVkTGlnaHQge1xuXHR2ZWMzIGRpcmVjdERpZmZ1c2U7XG5cdHZlYzMgZGlyZWN0U3BlY3VsYXI7XG5cdHZlYzMgaW5kaXJlY3REaWZmdXNlO1xuXHR2ZWMzIGluZGlyZWN0U3BlY3VsYXI7XG59O1xuc3RydWN0IEdlb21ldHJpY0NvbnRleHQge1xuXHR2ZWMzIHBvc2l0aW9uO1xuXHR2ZWMzIG5vcm1hbDtcblx0dmVjMyB2aWV3RGlyO1xufTtcbnZlYzMgdHJhbnNmb3JtRGlyZWN0aW9uKCBpbiB2ZWMzIGRpciwgaW4gbWF0NCBtYXRyaXggKSB7XG5cdHJldHVybiBub3JtYWxpemUoICggbWF0cml4ICogdmVjNCggZGlyLCAwLjAgKSApLnh5eiApO1xufVxudmVjMyBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCBpbiB2ZWMzIGRpciwgaW4gbWF0NCBtYXRyaXggKSB7XG5cdHJldHVybiBub3JtYWxpemUoICggdmVjNCggZGlyLCAwLjAgKSAqIG1hdHJpeCApLnh5eiApO1xufVxudmVjMyBwcm9qZWN0T25QbGFuZShpbiB2ZWMzIHBvaW50LCBpbiB2ZWMzIHBvaW50T25QbGFuZSwgaW4gdmVjMyBwbGFuZU5vcm1hbCApIHtcblx0ZmxvYXQgZGlzdGFuY2UgXHgzZCBkb3QoIHBsYW5lTm9ybWFsLCBwb2ludCAtIHBvaW50T25QbGFuZSApO1xuXHRyZXR1cm4gLSBkaXN0YW5jZSAqIHBsYW5lTm9ybWFsICsgcG9pbnQ7XG59XG5mbG9hdCBzaWRlT2ZQbGFuZSggaW4gdmVjMyBwb2ludCwgaW4gdmVjMyBwb2ludE9uUGxhbmUsIGluIHZlYzMgcGxhbmVOb3JtYWwgKSB7XG5cdHJldHVybiBzaWduKCBkb3QoIHBvaW50IC0gcG9pbnRPblBsYW5lLCBwbGFuZU5vcm1hbCApICk7XG59XG52ZWMzIGxpbmVQbGFuZUludGVyc2VjdCggaW4gdmVjMyBwb2ludE9uTGluZSwgaW4gdmVjMyBsaW5lRGlyZWN0aW9uLCBpbiB2ZWMzIHBvaW50T25QbGFuZSwgaW4gdmVjMyBwbGFuZU5vcm1hbCApIHtcblx0cmV0dXJuIGxpbmVEaXJlY3Rpb24gKiAoIGRvdCggcGxhbmVOb3JtYWwsIHBvaW50T25QbGFuZSAtIHBvaW50T25MaW5lICkgLyBkb3QoIHBsYW5lTm9ybWFsLCBsaW5lRGlyZWN0aW9uICkgKSArIHBvaW50T25MaW5lO1xufVxubWF0MyB0cmFuc3Bvc2VNYXQzKCBjb25zdCBpbiBtYXQzIG0gKSB7XG5cdG1hdDMgdG1wO1xuXHR0bXBbIDAgXSBceDNkIHZlYzMoIG1bIDAgXS54LCBtWyAxIF0ueCwgbVsgMiBdLnggKTtcblx0dG1wWyAxIF0gXHgzZCB2ZWMzKCBtWyAwIF0ueSwgbVsgMSBdLnksIG1bIDIgXS55ICk7XG5cdHRtcFsgMiBdIFx4M2QgdmVjMyggbVsgMCBdLnosIG1bIDEgXS56LCBtWyAyIF0ueiApO1xuXHRyZXR1cm4gdG1wO1xufVxuZmxvYXQgbGluZWFyVG9SZWxhdGl2ZUx1bWluYW5jZSggY29uc3QgaW4gdmVjMyBjb2xvciApIHtcblx0dmVjMyB3ZWlnaHRzIFx4M2QgdmVjMyggMC4yMTI2LCAwLjcxNTIsIDAuMDcyMiApO1xuXHRyZXR1cm4gZG90KCB3ZWlnaHRzLCBjb2xvci5yZ2IgKTtcbn0iLApjdWJlX3V2X3JlZmxlY3Rpb25fZnJhZ21lbnQ6IiNpZmRlZiBFTlZNQVBfVFlQRV9DVUJFX1VWXG4jZGVmaW5lIGN1YmVVVl90ZXh0dXJlU2l6ZSAoMTAyNC4wKVxuaW50IGdldEZhY2VGcm9tRGlyZWN0aW9uKHZlYzMgZGlyZWN0aW9uKSB7XG5cdHZlYzMgYWJzRGlyZWN0aW9uIFx4M2QgYWJzKGRpcmVjdGlvbik7XG5cdGludCBmYWNlIFx4M2QgLTE7XG5cdGlmKCBhYnNEaXJlY3Rpb24ueCBceDNlIGFic0RpcmVjdGlvbi56ICkge1xuXHRcdGlmKGFic0RpcmVjdGlvbi54IFx4M2UgYWJzRGlyZWN0aW9uLnkgKVxuXHRcdFx0ZmFjZSBceDNkIGRpcmVjdGlvbi54IFx4M2UgMC4wID8gMCA6IDM7XG5cdFx0ZWxzZVxuXHRcdFx0ZmFjZSBceDNkIGRpcmVjdGlvbi55IFx4M2UgMC4wID8gMSA6IDQ7XG5cdH1cblx0ZWxzZSB7XG5cdFx0aWYoYWJzRGlyZWN0aW9uLnogXHgzZSBhYnNEaXJlY3Rpb24ueSApXG5cdFx0XHRmYWNlIFx4M2QgZGlyZWN0aW9uLnogXHgzZSAwLjAgPyAyIDogNTtcblx0XHRlbHNlXG5cdFx0XHRmYWNlIFx4M2QgZGlyZWN0aW9uLnkgXHgzZSAwLjAgPyAxIDogNDtcblx0fVxuXHRyZXR1cm4gZmFjZTtcbn1cbiNkZWZpbmUgY3ViZVVWX21heExvZHMxICAobG9nMihjdWJlVVZfdGV4dHVyZVNpemUqMC4yNSkgLSAxLjApXG4jZGVmaW5lIGN1YmVVVl9yYW5nZUNsYW1wIChleHAyKCg2LjAgLSAxLjApICogMi4wKSlcbnZlYzIgTWlwTGV2ZWxJbmZvKCB2ZWMzIHZlYywgZmxvYXQgcm91Z2huZXNzTGV2ZWwsIGZsb2F0IHJvdWdobmVzcyApIHtcblx0ZmxvYXQgc2NhbGUgXHgzZCBleHAyKGN1YmVVVl9tYXhMb2RzMSAtIHJvdWdobmVzc0xldmVsKTtcblx0ZmxvYXQgZHhSb3VnaG5lc3MgXHgzZCBkRmR4KHJvdWdobmVzcyk7XG5cdGZsb2F0IGR5Um91Z2huZXNzIFx4M2QgZEZkeShyb3VnaG5lc3MpO1xuXHR2ZWMzIGR4IFx4M2QgZEZkeCggdmVjICogc2NhbGUgKiBkeFJvdWdobmVzcyApO1xuXHR2ZWMzIGR5IFx4M2QgZEZkeSggdmVjICogc2NhbGUgKiBkeVJvdWdobmVzcyApO1xuXHRmbG9hdCBkIFx4M2QgbWF4KCBkb3QoIGR4LCBkeCApLCBkb3QoIGR5LCBkeSApICk7XG5cdGQgXHgzZCBjbGFtcChkLCAxLjAsIGN1YmVVVl9yYW5nZUNsYW1wKTtcblx0ZmxvYXQgbWlwTGV2ZWwgXHgzZCAwLjUgKiBsb2cyKGQpO1xuXHRyZXR1cm4gdmVjMihmbG9vcihtaXBMZXZlbCksIGZyYWN0KG1pcExldmVsKSk7XG59XG4jZGVmaW5lIGN1YmVVVl9tYXhMb2RzMiAobG9nMihjdWJlVVZfdGV4dHVyZVNpemUqMC4yNSkgLSAyLjApXG4jZGVmaW5lIGN1YmVVVl9yY3BUZXh0dXJlU2l6ZSAoMS4wIC8gY3ViZVVWX3RleHR1cmVTaXplKVxudmVjMiBnZXRDdWJlVVYodmVjMyBkaXJlY3Rpb24sIGZsb2F0IHJvdWdobmVzc0xldmVsLCBmbG9hdCBtaXBMZXZlbCkge1xuXHRtaXBMZXZlbCBceDNkIHJvdWdobmVzc0xldmVsIFx4M2UgY3ViZVVWX21heExvZHMyIC0gMy4wID8gMC4wIDogbWlwTGV2ZWw7XG5cdGZsb2F0IGEgXHgzZCAxNi4wICogY3ViZVVWX3JjcFRleHR1cmVTaXplO1xuXHR2ZWMyIGV4cDJfcGFja2VkIFx4M2QgZXhwMiggdmVjMiggcm91Z2huZXNzTGV2ZWwsIG1pcExldmVsICkgKTtcblx0dmVjMiByY3BfZXhwMl9wYWNrZWQgXHgzZCB2ZWMyKCAxLjAgKSAvIGV4cDJfcGFja2VkO1xuXHRmbG9hdCBwb3dTY2FsZSBceDNkIGV4cDJfcGFja2VkLnggKiBleHAyX3BhY2tlZC55O1xuXHRmbG9hdCBzY2FsZSBceDNkIHJjcF9leHAyX3BhY2tlZC54ICogcmNwX2V4cDJfcGFja2VkLnkgKiAwLjI1O1xuXHRmbG9hdCBtaXBPZmZzZXQgXHgzZCAwLjc1KigxLjAgLSByY3BfZXhwMl9wYWNrZWQueSkgKiByY3BfZXhwMl9wYWNrZWQueDtcblx0Ym9vbCBiUmVzIFx4M2QgbWlwTGV2ZWwgXHgzZFx4M2QgMC4wO1xuXHRzY2FsZSBceDNkICBiUmVzIFx4MjZceDI2IChzY2FsZSBceDNjIGEpID8gYSA6IHNjYWxlO1xuXHR2ZWMzIHI7XG5cdHZlYzIgb2Zmc2V0O1xuXHRpbnQgZmFjZSBceDNkIGdldEZhY2VGcm9tRGlyZWN0aW9uKGRpcmVjdGlvbik7XG5cdGZsb2F0IHJjcFBvd1NjYWxlIFx4M2QgMS4wIC8gcG93U2NhbGU7XG5cdGlmKCBmYWNlIFx4M2RceDNkIDApIHtcblx0XHRyIFx4M2QgdmVjMyhkaXJlY3Rpb24ueCwgLWRpcmVjdGlvbi56LCBkaXJlY3Rpb24ueSk7XG5cdFx0b2Zmc2V0IFx4M2QgdmVjMigwLjArbWlwT2Zmc2V0LDAuNzUgKiByY3BQb3dTY2FsZSk7XG5cdFx0b2Zmc2V0LnkgXHgzZCBiUmVzIFx4MjZceDI2IChvZmZzZXQueSBceDNjIDIuMCphKSA/IGEgOiBvZmZzZXQueTtcblx0fVxuXHRlbHNlIGlmKCBmYWNlIFx4M2RceDNkIDEpIHtcblx0XHRyIFx4M2QgdmVjMyhkaXJlY3Rpb24ueSwgZGlyZWN0aW9uLngsIGRpcmVjdGlvbi56KTtcblx0XHRvZmZzZXQgXHgzZCB2ZWMyKHNjYWxlK21pcE9mZnNldCwgMC43NSAqIHJjcFBvd1NjYWxlKTtcblx0XHRvZmZzZXQueSBceDNkIGJSZXMgXHgyNlx4MjYgKG9mZnNldC55IFx4M2MgMi4wKmEpID8gYSA6IG9mZnNldC55O1xuXHR9XG5cdGVsc2UgaWYoIGZhY2UgXHgzZFx4M2QgMikge1xuXHRcdHIgXHgzZCB2ZWMzKGRpcmVjdGlvbi56LCBkaXJlY3Rpb24ueCwgZGlyZWN0aW9uLnkpO1xuXHRcdG9mZnNldCBceDNkIHZlYzIoMi4wKnNjYWxlK21pcE9mZnNldCwgMC43NSAqIHJjcFBvd1NjYWxlKTtcblx0XHRvZmZzZXQueSBceDNkIGJSZXMgXHgyNlx4MjYgKG9mZnNldC55IFx4M2MgMi4wKmEpID8gYSA6IG9mZnNldC55O1xuXHR9XG5cdGVsc2UgaWYoIGZhY2UgXHgzZFx4M2QgMykge1xuXHRcdHIgXHgzZCB2ZWMzKGRpcmVjdGlvbi54LCBkaXJlY3Rpb24ueiwgZGlyZWN0aW9uLnkpO1xuXHRcdG9mZnNldCBceDNkIHZlYzIoMC4wK21pcE9mZnNldCwwLjUgKiByY3BQb3dTY2FsZSk7XG5cdFx0b2Zmc2V0LnkgXHgzZCBiUmVzIFx4MjZceDI2IChvZmZzZXQueSBceDNjIDIuMCphKSA/IDAuMCA6IG9mZnNldC55O1xuXHR9XG5cdGVsc2UgaWYoIGZhY2UgXHgzZFx4M2QgNCkge1xuXHRcdHIgXHgzZCB2ZWMzKGRpcmVjdGlvbi55LCBkaXJlY3Rpb24ueCwgLWRpcmVjdGlvbi56KTtcblx0XHRvZmZzZXQgXHgzZCB2ZWMyKHNjYWxlK21pcE9mZnNldCwgMC41ICogcmNwUG93U2NhbGUpO1xuXHRcdG9mZnNldC55IFx4M2QgYlJlcyBceDI2XHgyNiAob2Zmc2V0LnkgXHgzYyAyLjAqYSkgPyAwLjAgOiBvZmZzZXQueTtcblx0fVxuXHRlbHNlIHtcblx0XHRyIFx4M2QgdmVjMyhkaXJlY3Rpb24ueiwgLWRpcmVjdGlvbi54LCBkaXJlY3Rpb24ueSk7XG5cdFx0b2Zmc2V0IFx4M2QgdmVjMigyLjAqc2NhbGUrbWlwT2Zmc2V0LCAwLjUgKiByY3BQb3dTY2FsZSk7XG5cdFx0b2Zmc2V0LnkgXHgzZCBiUmVzIFx4MjZceDI2IChvZmZzZXQueSBceDNjIDIuMCphKSA/IDAuMCA6IG9mZnNldC55O1xuXHR9XG5cdHIgXHgzZCBub3JtYWxpemUocik7XG5cdGZsb2F0IHRleGVsT2Zmc2V0IFx4M2QgMC41ICogY3ViZVVWX3JjcFRleHR1cmVTaXplO1xuXHR2ZWMyIHMgXHgzZCAoIHIueXogLyBhYnMoIHIueCApICsgdmVjMiggMS4wICkgKSAqIDAuNTtcblx0dmVjMiBiYXNlIFx4M2Qgb2Zmc2V0ICsgdmVjMiggdGV4ZWxPZmZzZXQgKTtcblx0cmV0dXJuIGJhc2UgKyBzICogKCBzY2FsZSAtIDIuMCAqIHRleGVsT2Zmc2V0ICk7XG59XG4jZGVmaW5lIGN1YmVVVl9tYXhMb2RzMyAobG9nMihjdWJlVVZfdGV4dHVyZVNpemUqMC4yNSkgLSAzLjApXG52ZWM0IHRleHR1cmVDdWJlVVYoIHNhbXBsZXIyRCBlbnZNYXAsIHZlYzMgcmVmbGVjdGVkRGlyZWN0aW9uLCBmbG9hdCByb3VnaG5lc3MgKSB7XG5cdGZsb2F0IHJvdWdobmVzc1ZhbCBceDNkIHJvdWdobmVzcyogY3ViZVVWX21heExvZHMzO1xuXHRmbG9hdCByMSBceDNkIGZsb29yKHJvdWdobmVzc1ZhbCk7XG5cdGZsb2F0IHIyIFx4M2QgcjEgKyAxLjA7XG5cdGZsb2F0IHQgXHgzZCBmcmFjdChyb3VnaG5lc3NWYWwpO1xuXHR2ZWMyIG1pcEluZm8gXHgzZCBNaXBMZXZlbEluZm8ocmVmbGVjdGVkRGlyZWN0aW9uLCByMSwgcm91Z2huZXNzKTtcblx0ZmxvYXQgcyBceDNkIG1pcEluZm8ueTtcblx0ZmxvYXQgbGV2ZWwwIFx4M2QgbWlwSW5mby54O1xuXHRmbG9hdCBsZXZlbDEgXHgzZCBsZXZlbDAgKyAxLjA7XG5cdGxldmVsMSBceDNkIGxldmVsMSBceDNlIDUuMCA/IDUuMCA6IGxldmVsMTtcblx0bGV2ZWwwICtceDNkIG1pbiggZmxvb3IoIHMgKyAwLjUgKSwgNS4wICk7XG5cdHZlYzIgdXZfMTAgXHgzZCBnZXRDdWJlVVYocmVmbGVjdGVkRGlyZWN0aW9uLCByMSwgbGV2ZWwwKTtcblx0dmVjNCBjb2xvcjEwIFx4M2QgZW52TWFwVGV4ZWxUb0xpbmVhcih0ZXh0dXJlMkQoZW52TWFwLCB1dl8xMCkpO1xuXHR2ZWMyIHV2XzIwIFx4M2QgZ2V0Q3ViZVVWKHJlZmxlY3RlZERpcmVjdGlvbiwgcjIsIGxldmVsMCk7XG5cdHZlYzQgY29sb3IyMCBceDNkIGVudk1hcFRleGVsVG9MaW5lYXIodGV4dHVyZTJEKGVudk1hcCwgdXZfMjApKTtcblx0dmVjNCByZXN1bHQgXHgzZCBtaXgoY29sb3IxMCwgY29sb3IyMCwgdCk7XG5cdHJldHVybiB2ZWM0KHJlc3VsdC5yZ2IsIDEuMCk7XG59XG4jZW5kaWYiLApkZWZhdWx0bm9ybWFsX3ZlcnRleDoidmVjMyB0cmFuc2Zvcm1lZE5vcm1hbCBceDNkIG5vcm1hbE1hdHJpeCAqIG9iamVjdE5vcm1hbDtcbiNpZmRlZiBGTElQX1NJREVEXG5cdHRyYW5zZm9ybWVkTm9ybWFsIFx4M2QgLSB0cmFuc2Zvcm1lZE5vcm1hbDtcbiNlbmRpZlxuI2lmZGVmIFVTRV9UQU5HRU5UXG5cdHZlYzMgdHJhbnNmb3JtZWRUYW5nZW50IFx4M2Qgbm9ybWFsTWF0cml4ICogb2JqZWN0VGFuZ2VudDtcblx0I2lmZGVmIEZMSVBfU0lERURcblx0XHR0cmFuc2Zvcm1lZFRhbmdlbnQgXHgzZCAtIHRyYW5zZm9ybWVkVGFuZ2VudDtcblx0I2VuZGlmXG4jZW5kaWYiLGRpc3BsYWNlbWVudG1hcF9wYXJzX3ZlcnRleDoiI2lmZGVmIFVTRV9ESVNQTEFDRU1FTlRNQVBcblx0dW5pZm9ybSBzYW1wbGVyMkQgZGlzcGxhY2VtZW50TWFwO1xuXHR1bmlmb3JtIGZsb2F0IGRpc3BsYWNlbWVudFNjYWxlO1xuXHR1bmlmb3JtIGZsb2F0IGRpc3BsYWNlbWVudEJpYXM7XG4jZW5kaWYiLGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg6IiNpZmRlZiBVU0VfRElTUExBQ0VNRU5UTUFQXG5cdHRyYW5zZm9ybWVkICtceDNkIG5vcm1hbGl6ZSggb2JqZWN0Tm9ybWFsICkgKiAoIHRleHR1cmUyRCggZGlzcGxhY2VtZW50TWFwLCB1diApLnggKiBkaXNwbGFjZW1lbnRTY2FsZSArIGRpc3BsYWNlbWVudEJpYXMgKTtcbiNlbmRpZiIsCmVtaXNzaXZlbWFwX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0VNSVNTSVZFTUFQXG5cdHZlYzQgZW1pc3NpdmVDb2xvciBceDNkIHRleHR1cmUyRCggZW1pc3NpdmVNYXAsIHZVdiApO1xuXHRlbWlzc2l2ZUNvbG9yLnJnYiBceDNkIGVtaXNzaXZlTWFwVGV4ZWxUb0xpbmVhciggZW1pc3NpdmVDb2xvciApLnJnYjtcblx0dG90YWxFbWlzc2l2ZVJhZGlhbmNlICpceDNkIGVtaXNzaXZlQ29sb3IucmdiO1xuI2VuZGlmIixlbWlzc2l2ZW1hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0VNSVNTSVZFTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIGVtaXNzaXZlTWFwO1xuI2VuZGlmIixlbmNvZGluZ3NfZnJhZ21lbnQ6ImdsX0ZyYWdDb2xvciBceDNkIGxpbmVhclRvT3V0cHV0VGV4ZWwoIGdsX0ZyYWdDb2xvciApOyIsZW5jb2RpbmdzX3BhcnNfZnJhZ21lbnQ6IlxudmVjNCBMaW5lYXJUb0xpbmVhciggaW4gdmVjNCB2YWx1ZSApIHtcblx0cmV0dXJuIHZhbHVlO1xufVxudmVjNCBHYW1tYVRvTGluZWFyKCBpbiB2ZWM0IHZhbHVlLCBpbiBmbG9hdCBnYW1tYUZhY3RvciApIHtcblx0cmV0dXJuIHZlYzQoIHBvdyggdmFsdWUucmdiLCB2ZWMzKCBnYW1tYUZhY3RvciApICksIHZhbHVlLmEgKTtcbn1cbnZlYzQgTGluZWFyVG9HYW1tYSggaW4gdmVjNCB2YWx1ZSwgaW4gZmxvYXQgZ2FtbWFGYWN0b3IgKSB7XG5cdHJldHVybiB2ZWM0KCBwb3coIHZhbHVlLnJnYiwgdmVjMyggMS4wIC8gZ2FtbWFGYWN0b3IgKSApLCB2YWx1ZS5hICk7XG59XG52ZWM0IHNSR0JUb0xpbmVhciggaW4gdmVjNCB2YWx1ZSApIHtcblx0cmV0dXJuIHZlYzQoIG1peCggcG93KCB2YWx1ZS5yZ2IgKiAwLjk0Nzg2NzI5ODYgKyB2ZWMzKCAwLjA1MjEzMjcwMTQgKSwgdmVjMyggMi40ICkgKSwgdmFsdWUucmdiICogMC4wNzczOTkzODA4LCB2ZWMzKCBsZXNzVGhhbkVxdWFsKCB2YWx1ZS5yZ2IsIHZlYzMoIDAuMDQwNDUgKSApICkgKSwgdmFsdWUuYSApO1xufVxudmVjNCBMaW5lYXJUb3NSR0IoIGluIHZlYzQgdmFsdWUgKSB7XG5cdHJldHVybiB2ZWM0KCBtaXgoIHBvdyggdmFsdWUucmdiLCB2ZWMzKCAwLjQxNjY2ICkgKSAqIDEuMDU1IC0gdmVjMyggMC4wNTUgKSwgdmFsdWUucmdiICogMTIuOTIsIHZlYzMoIGxlc3NUaGFuRXF1YWwoIHZhbHVlLnJnYiwgdmVjMyggMC4wMDMxMzA4ICkgKSApICksIHZhbHVlLmEgKTtcbn1cbnZlYzQgUkdCRVRvTGluZWFyKCBpbiB2ZWM0IHZhbHVlICkge1xuXHRyZXR1cm4gdmVjNCggdmFsdWUucmdiICogZXhwMiggdmFsdWUuYSAqIDI1NS4wIC0gMTI4LjAgKSwgMS4wICk7XG59XG52ZWM0IExpbmVhclRvUkdCRSggaW4gdmVjNCB2YWx1ZSApIHtcblx0ZmxvYXQgbWF4Q29tcG9uZW50IFx4M2QgbWF4KCBtYXgoIHZhbHVlLnIsIHZhbHVlLmcgKSwgdmFsdWUuYiApO1xuXHRmbG9hdCBmRXhwIFx4M2QgY2xhbXAoIGNlaWwoIGxvZzIoIG1heENvbXBvbmVudCApICksIC0xMjguMCwgMTI3LjAgKTtcblx0cmV0dXJuIHZlYzQoIHZhbHVlLnJnYiAvIGV4cDIoIGZFeHAgKSwgKCBmRXhwICsgMTI4LjAgKSAvIDI1NS4wICk7XG59XG52ZWM0IFJHQk1Ub0xpbmVhciggaW4gdmVjNCB2YWx1ZSwgaW4gZmxvYXQgbWF4UmFuZ2UgKSB7XG5cdHJldHVybiB2ZWM0KCB2YWx1ZS5yZ2IgKiB2YWx1ZS5hICogbWF4UmFuZ2UsIDEuMCApO1xufVxudmVjNCBMaW5lYXJUb1JHQk0oIGluIHZlYzQgdmFsdWUsIGluIGZsb2F0IG1heFJhbmdlICkge1xuXHRmbG9hdCBtYXhSR0IgXHgzZCBtYXgoIHZhbHVlLnIsIG1heCggdmFsdWUuZywgdmFsdWUuYiApICk7XG5cdGZsb2F0IE0gXHgzZCBjbGFtcCggbWF4UkdCIC8gbWF4UmFuZ2UsIDAuMCwgMS4wICk7XG5cdE0gXHgzZCBjZWlsKCBNICogMjU1LjAgKSAvIDI1NS4wO1xuXHRyZXR1cm4gdmVjNCggdmFsdWUucmdiIC8gKCBNICogbWF4UmFuZ2UgKSwgTSApO1xufVxudmVjNCBSR0JEVG9MaW5lYXIoIGluIHZlYzQgdmFsdWUsIGluIGZsb2F0IG1heFJhbmdlICkge1xuXHRyZXR1cm4gdmVjNCggdmFsdWUucmdiICogKCAoIG1heFJhbmdlIC8gMjU1LjAgKSAvIHZhbHVlLmEgKSwgMS4wICk7XG59XG52ZWM0IExpbmVhclRvUkdCRCggaW4gdmVjNCB2YWx1ZSwgaW4gZmxvYXQgbWF4UmFuZ2UgKSB7XG5cdGZsb2F0IG1heFJHQiBceDNkIG1heCggdmFsdWUuciwgbWF4KCB2YWx1ZS5nLCB2YWx1ZS5iICkgKTtcblx0ZmxvYXQgRCBceDNkIG1heCggbWF4UmFuZ2UgLyBtYXhSR0IsIDEuMCApO1xuXHREIFx4M2QgbWluKCBmbG9vciggRCApIC8gMjU1LjAsIDEuMCApO1xuXHRyZXR1cm4gdmVjNCggdmFsdWUucmdiICogKCBEICogKCAyNTUuMCAvIG1heFJhbmdlICkgKSwgRCApO1xufVxuY29uc3QgbWF0MyBjTG9nTHV2TSBceDNkIG1hdDMoIDAuMjIwOSwgMC4zMzkwLCAwLjQxODQsIDAuMTEzOCwgMC42NzgwLCAwLjczMTksIDAuMDEwMiwgMC4xMTMwLCAwLjI5NjkgKTtcbnZlYzQgTGluZWFyVG9Mb2dMdXYoIGluIHZlYzQgdmFsdWUgKSAge1xuXHR2ZWMzIFhwX1lfWFlacCBceDNkIGNMb2dMdXZNICogdmFsdWUucmdiO1xuXHRYcF9ZX1hZWnAgXHgzZCBtYXgoIFhwX1lfWFlacCwgdmVjMyggMWUtNiwgMWUtNiwgMWUtNiApICk7XG5cdHZlYzQgdlJlc3VsdDtcblx0dlJlc3VsdC54eSBceDNkIFhwX1lfWFlacC54eSAvIFhwX1lfWFlacC56O1xuXHRmbG9hdCBMZSBceDNkIDIuMCAqIGxvZzIoWHBfWV9YWVpwLnkpICsgMTI3LjA7XG5cdHZSZXN1bHQudyBceDNkIGZyYWN0KCBMZSApO1xuXHR2UmVzdWx0LnogXHgzZCAoIExlIC0gKCBmbG9vciggdlJlc3VsdC53ICogMjU1LjAgKSApIC8gMjU1LjAgKSAvIDI1NS4wO1xuXHRyZXR1cm4gdlJlc3VsdDtcbn1cbmNvbnN0IG1hdDMgY0xvZ0x1dkludmVyc2VNIFx4M2QgbWF0MyggNi4wMDE0LCAtMi43MDA4LCAtMS43OTk2LCAtMS4zMzIwLCAzLjEwMjksIC01Ljc3MjEsIDAuMzAwOCwgLTEuMDg4MiwgNS42MjY4ICk7XG52ZWM0IExvZ0x1dlRvTGluZWFyKCBpbiB2ZWM0IHZhbHVlICkge1xuXHRmbG9hdCBMZSBceDNkIHZhbHVlLnogKiAyNTUuMCArIHZhbHVlLnc7XG5cdHZlYzMgWHBfWV9YWVpwO1xuXHRYcF9ZX1hZWnAueSBceDNkIGV4cDIoICggTGUgLSAxMjcuMCApIC8gMi4wICk7XG5cdFhwX1lfWFlacC56IFx4M2QgWHBfWV9YWVpwLnkgLyB2YWx1ZS55O1xuXHRYcF9ZX1hZWnAueCBceDNkIHZhbHVlLnggKiBYcF9ZX1hZWnAuejtcblx0dmVjMyB2UkdCIFx4M2QgY0xvZ0x1dkludmVyc2VNICogWHBfWV9YWVpwLnJnYjtcblx0cmV0dXJuIHZlYzQoIG1heCggdlJHQiwgMC4wICksIDEuMCApO1xufSIsCmVudm1hcF9mcmFnbWVudDoiI2lmZGVmIFVTRV9FTlZNQVBcblx0I2lmIGRlZmluZWQoIFVTRV9CVU1QTUFQICkgfHwgZGVmaW5lZCggVVNFX05PUk1BTE1BUCApIHx8IGRlZmluZWQoIFBIT05HIClcblx0XHR2ZWMzIGNhbWVyYVRvVmVydGV4IFx4M2Qgbm9ybWFsaXplKCB2V29ybGRQb3NpdGlvbiAtIGNhbWVyYVBvc2l0aW9uICk7XG5cdFx0dmVjMyB3b3JsZE5vcm1hbCBceDNkIGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIG5vcm1hbCwgdmlld01hdHJpeCApO1xuXHRcdCNpZmRlZiBFTlZNQVBfTU9ERV9SRUZMRUNUSU9OXG5cdFx0XHR2ZWMzIHJlZmxlY3RWZWMgXHgzZCByZWZsZWN0KCBjYW1lcmFUb1ZlcnRleCwgd29ybGROb3JtYWwgKTtcblx0XHQjZWxzZVxuXHRcdFx0dmVjMyByZWZsZWN0VmVjIFx4M2QgcmVmcmFjdCggY2FtZXJhVG9WZXJ0ZXgsIHdvcmxkTm9ybWFsLCByZWZyYWN0aW9uUmF0aW8gKTtcblx0XHQjZW5kaWZcblx0I2Vsc2Vcblx0XHR2ZWMzIHJlZmxlY3RWZWMgXHgzZCB2UmVmbGVjdDtcblx0I2VuZGlmXG5cdCNpZmRlZiBFTlZNQVBfVFlQRV9DVUJFXG5cdFx0dmVjNCBlbnZDb2xvciBceDNkIHRleHR1cmVDdWJlKCBlbnZNYXAsIHZlYzMoIGZsaXBFbnZNYXAgKiByZWZsZWN0VmVjLngsIHJlZmxlY3RWZWMueXogKSApO1xuXHQjZWxpZiBkZWZpbmVkKCBFTlZNQVBfVFlQRV9FUVVJUkVDIClcblx0XHR2ZWMyIHNhbXBsZVVWO1xuXHRcdHJlZmxlY3RWZWMgXHgzZCBub3JtYWxpemUoIHJlZmxlY3RWZWMgKTtcblx0XHRzYW1wbGVVVi55IFx4M2QgYXNpbiggY2xhbXAoIHJlZmxlY3RWZWMueSwgLSAxLjAsIDEuMCApICkgKiBSRUNJUFJPQ0FMX1BJICsgMC41O1xuXHRcdHNhbXBsZVVWLnggXHgzZCBhdGFuKCByZWZsZWN0VmVjLnosIHJlZmxlY3RWZWMueCApICogUkVDSVBST0NBTF9QSTIgKyAwLjU7XG5cdFx0dmVjNCBlbnZDb2xvciBceDNkIHRleHR1cmUyRCggZW52TWFwLCBzYW1wbGVVViApO1xuXHQjZWxpZiBkZWZpbmVkKCBFTlZNQVBfVFlQRV9TUEhFUkUgKVxuXHRcdHJlZmxlY3RWZWMgXHgzZCBub3JtYWxpemUoIHJlZmxlY3RWZWMgKTtcblx0XHR2ZWMzIHJlZmxlY3RWaWV3IFx4M2Qgbm9ybWFsaXplKCAoIHZpZXdNYXRyaXggKiB2ZWM0KCByZWZsZWN0VmVjLCAwLjAgKSApLnh5eiArIHZlYzMoIDAuMCwgMC4wLCAxLjAgKSApO1xuXHRcdHZlYzQgZW52Q29sb3IgXHgzZCB0ZXh0dXJlMkQoIGVudk1hcCwgcmVmbGVjdFZpZXcueHkgKiAwLjUgKyAwLjUgKTtcblx0I2Vsc2Vcblx0XHR2ZWM0IGVudkNvbG9yIFx4M2QgdmVjNCggMC4wICk7XG5cdCNlbmRpZlxuXHRlbnZDb2xvciBceDNkIGVudk1hcFRleGVsVG9MaW5lYXIoIGVudkNvbG9yICk7XG5cdCNpZmRlZiBFTlZNQVBfQkxFTkRJTkdfTVVMVElQTFlcblx0XHRvdXRnb2luZ0xpZ2h0IFx4M2QgbWl4KCBvdXRnb2luZ0xpZ2h0LCBvdXRnb2luZ0xpZ2h0ICogZW52Q29sb3IueHl6LCBzcGVjdWxhclN0cmVuZ3RoICogcmVmbGVjdGl2aXR5ICk7XG5cdCNlbGlmIGRlZmluZWQoIEVOVk1BUF9CTEVORElOR19NSVggKVxuXHRcdG91dGdvaW5nTGlnaHQgXHgzZCBtaXgoIG91dGdvaW5nTGlnaHQsIGVudkNvbG9yLnh5eiwgc3BlY3VsYXJTdHJlbmd0aCAqIHJlZmxlY3Rpdml0eSApO1xuXHQjZWxpZiBkZWZpbmVkKCBFTlZNQVBfQkxFTkRJTkdfQUREIClcblx0XHRvdXRnb2luZ0xpZ2h0ICtceDNkIGVudkNvbG9yLnh5eiAqIHNwZWN1bGFyU3RyZW5ndGggKiByZWZsZWN0aXZpdHk7XG5cdCNlbmRpZlxuI2VuZGlmIiwKZW52bWFwX3BhcnNfZnJhZ21lbnQ6IiNpZiBkZWZpbmVkKCBVU0VfRU5WTUFQICkgfHwgZGVmaW5lZCggUEhZU0lDQUwgKVxuXHR1bmlmb3JtIGZsb2F0IHJlZmxlY3Rpdml0eTtcblx0dW5pZm9ybSBmbG9hdCBlbnZNYXBJbnRlbnNpdHk7XG4jZW5kaWZcbiNpZmRlZiBVU0VfRU5WTUFQXG5cdCNpZiAhIGRlZmluZWQoIFBIWVNJQ0FMICkgXHgyNlx4MjYgKCBkZWZpbmVkKCBVU0VfQlVNUE1BUCApIHx8IGRlZmluZWQoIFVTRV9OT1JNQUxNQVAgKSB8fCBkZWZpbmVkKCBQSE9ORyApIClcblx0XHR2YXJ5aW5nIHZlYzMgdldvcmxkUG9zaXRpb247XG5cdCNlbmRpZlxuXHQjaWZkZWYgRU5WTUFQX1RZUEVfQ1VCRVxuXHRcdHVuaWZvcm0gc2FtcGxlckN1YmUgZW52TWFwO1xuXHQjZWxzZVxuXHRcdHVuaWZvcm0gc2FtcGxlcjJEIGVudk1hcDtcblx0I2VuZGlmXG5cdHVuaWZvcm0gZmxvYXQgZmxpcEVudk1hcDtcblx0dW5pZm9ybSBpbnQgbWF4TWlwTGV2ZWw7XG5cdCNpZiBkZWZpbmVkKCBVU0VfQlVNUE1BUCApIHx8IGRlZmluZWQoIFVTRV9OT1JNQUxNQVAgKSB8fCBkZWZpbmVkKCBQSE9ORyApIHx8IGRlZmluZWQoIFBIWVNJQ0FMIClcblx0XHR1bmlmb3JtIGZsb2F0IHJlZnJhY3Rpb25SYXRpbztcblx0I2Vsc2Vcblx0XHR2YXJ5aW5nIHZlYzMgdlJlZmxlY3Q7XG5cdCNlbmRpZlxuI2VuZGlmIiwKZW52bWFwX3BhcnNfdmVydGV4OiIjaWZkZWYgVVNFX0VOVk1BUFxuXHQjaWYgZGVmaW5lZCggVVNFX0JVTVBNQVAgKSB8fCBkZWZpbmVkKCBVU0VfTk9STUFMTUFQICkgfHwgZGVmaW5lZCggUEhPTkcgKVxuXHRcdHZhcnlpbmcgdmVjMyB2V29ybGRQb3NpdGlvbjtcblx0I2Vsc2Vcblx0XHR2YXJ5aW5nIHZlYzMgdlJlZmxlY3Q7XG5cdFx0dW5pZm9ybSBmbG9hdCByZWZyYWN0aW9uUmF0aW87XG5cdCNlbmRpZlxuI2VuZGlmIixlbnZtYXBfcGh5c2ljYWxfcGFyc19mcmFnbWVudDoiI2lmIGRlZmluZWQoIFVTRV9FTlZNQVAgKSBceDI2XHgyNiBkZWZpbmVkKCBQSFlTSUNBTCApXG5cdHZlYzMgZ2V0TGlnaHRQcm9iZUluZGlyZWN0SXJyYWRpYW5jZSggY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gaW50IG1heE1JUExldmVsICkge1xuXHRcdHZlYzMgd29ybGROb3JtYWwgXHgzZCBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCBnZW9tZXRyeS5ub3JtYWwsIHZpZXdNYXRyaXggKTtcblx0XHQjaWZkZWYgRU5WTUFQX1RZUEVfQ1VCRVxuXHRcdFx0dmVjMyBxdWVyeVZlYyBceDNkIHZlYzMoIGZsaXBFbnZNYXAgKiB3b3JsZE5vcm1hbC54LCB3b3JsZE5vcm1hbC55eiApO1xuXHRcdFx0I2lmZGVmIFRFWFRVUkVfTE9EX0VYVFxuXHRcdFx0XHR2ZWM0IGVudk1hcENvbG9yIFx4M2QgdGV4dHVyZUN1YmVMb2RFWFQoIGVudk1hcCwgcXVlcnlWZWMsIGZsb2F0KCBtYXhNSVBMZXZlbCApICk7XG5cdFx0XHQjZWxzZVxuXHRcdFx0XHR2ZWM0IGVudk1hcENvbG9yIFx4M2QgdGV4dHVyZUN1YmUoIGVudk1hcCwgcXVlcnlWZWMsIGZsb2F0KCBtYXhNSVBMZXZlbCApICk7XG5cdFx0XHQjZW5kaWZcblx0XHRcdGVudk1hcENvbG9yLnJnYiBceDNkIGVudk1hcFRleGVsVG9MaW5lYXIoIGVudk1hcENvbG9yICkucmdiO1xuXHRcdCNlbGlmIGRlZmluZWQoIEVOVk1BUF9UWVBFX0NVQkVfVVYgKVxuXHRcdFx0dmVjMyBxdWVyeVZlYyBceDNkIHZlYzMoIGZsaXBFbnZNYXAgKiB3b3JsZE5vcm1hbC54LCB3b3JsZE5vcm1hbC55eiApO1xuXHRcdFx0dmVjNCBlbnZNYXBDb2xvciBceDNkIHRleHR1cmVDdWJlVVYoIGVudk1hcCwgcXVlcnlWZWMsIDEuMCApO1xuXHRcdCNlbHNlXG5cdFx0XHR2ZWM0IGVudk1hcENvbG9yIFx4M2QgdmVjNCggMC4wICk7XG5cdFx0I2VuZGlmXG5cdFx0cmV0dXJuIFBJICogZW52TWFwQ29sb3IucmdiICogZW52TWFwSW50ZW5zaXR5O1xuXHR9XG5cdGZsb2F0IGdldFNwZWN1bGFyTUlQTGV2ZWwoIGNvbnN0IGluIGZsb2F0IGJsaW5uU2hpbmluZXNzRXhwb25lbnQsIGNvbnN0IGluIGludCBtYXhNSVBMZXZlbCApIHtcblx0XHRmbG9hdCBtYXhNSVBMZXZlbFNjYWxhciBceDNkIGZsb2F0KCBtYXhNSVBMZXZlbCApO1xuXHRcdGZsb2F0IGRlc2lyZWRNSVBMZXZlbCBceDNkIG1heE1JUExldmVsU2NhbGFyICsgMC43OTI0OCAtIDAuNSAqIGxvZzIoIHBvdzIoIGJsaW5uU2hpbmluZXNzRXhwb25lbnQgKSArIDEuMCApO1xuXHRcdHJldHVybiBjbGFtcCggZGVzaXJlZE1JUExldmVsLCAwLjAsIG1heE1JUExldmVsU2NhbGFyICk7XG5cdH1cblx0dmVjMyBnZXRMaWdodFByb2JlSW5kaXJlY3RSYWRpYW5jZSggY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gZmxvYXQgYmxpbm5TaGluaW5lc3NFeHBvbmVudCwgY29uc3QgaW4gaW50IG1heE1JUExldmVsICkge1xuXHRcdCNpZmRlZiBFTlZNQVBfTU9ERV9SRUZMRUNUSU9OXG5cdFx0XHR2ZWMzIHJlZmxlY3RWZWMgXHgzZCByZWZsZWN0KCAtZ2VvbWV0cnkudmlld0RpciwgZ2VvbWV0cnkubm9ybWFsICk7XG5cdFx0I2Vsc2Vcblx0XHRcdHZlYzMgcmVmbGVjdFZlYyBceDNkIHJlZnJhY3QoIC1nZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5ub3JtYWwsIHJlZnJhY3Rpb25SYXRpbyApO1xuXHRcdCNlbmRpZlxuXHRcdHJlZmxlY3RWZWMgXHgzZCBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCByZWZsZWN0VmVjLCB2aWV3TWF0cml4ICk7XG5cdFx0ZmxvYXQgc3BlY3VsYXJNSVBMZXZlbCBceDNkIGdldFNwZWN1bGFyTUlQTGV2ZWwoIGJsaW5uU2hpbmluZXNzRXhwb25lbnQsIG1heE1JUExldmVsICk7XG5cdFx0I2lmZGVmIEVOVk1BUF9UWVBFX0NVQkVcblx0XHRcdHZlYzMgcXVlcnlSZWZsZWN0VmVjIFx4M2QgdmVjMyggZmxpcEVudk1hcCAqIHJlZmxlY3RWZWMueCwgcmVmbGVjdFZlYy55eiApO1xuXHRcdFx0I2lmZGVmIFRFWFRVUkVfTE9EX0VYVFxuXHRcdFx0XHR2ZWM0IGVudk1hcENvbG9yIFx4M2QgdGV4dHVyZUN1YmVMb2RFWFQoIGVudk1hcCwgcXVlcnlSZWZsZWN0VmVjLCBzcGVjdWxhck1JUExldmVsICk7XG5cdFx0XHQjZWxzZVxuXHRcdFx0XHR2ZWM0IGVudk1hcENvbG9yIFx4M2QgdGV4dHVyZUN1YmUoIGVudk1hcCwgcXVlcnlSZWZsZWN0VmVjLCBzcGVjdWxhck1JUExldmVsICk7XG5cdFx0XHQjZW5kaWZcblx0XHRcdGVudk1hcENvbG9yLnJnYiBceDNkIGVudk1hcFRleGVsVG9MaW5lYXIoIGVudk1hcENvbG9yICkucmdiO1xuXHRcdCNlbGlmIGRlZmluZWQoIEVOVk1BUF9UWVBFX0NVQkVfVVYgKVxuXHRcdFx0dmVjMyBxdWVyeVJlZmxlY3RWZWMgXHgzZCB2ZWMzKCBmbGlwRW52TWFwICogcmVmbGVjdFZlYy54LCByZWZsZWN0VmVjLnl6ICk7XG5cdFx0XHR2ZWM0IGVudk1hcENvbG9yIFx4M2QgdGV4dHVyZUN1YmVVViggZW52TWFwLCBxdWVyeVJlZmxlY3RWZWMsIEJsaW5uRXhwb25lbnRUb0dHWFJvdWdobmVzcyhibGlublNoaW5pbmVzc0V4cG9uZW50ICkpO1xuXHRcdCNlbGlmIGRlZmluZWQoIEVOVk1BUF9UWVBFX0VRVUlSRUMgKVxuXHRcdFx0dmVjMiBzYW1wbGVVVjtcblx0XHRcdHNhbXBsZVVWLnkgXHgzZCBhc2luKCBjbGFtcCggcmVmbGVjdFZlYy55LCAtIDEuMCwgMS4wICkgKSAqIFJFQ0lQUk9DQUxfUEkgKyAwLjU7XG5cdFx0XHRzYW1wbGVVVi54IFx4M2QgYXRhbiggcmVmbGVjdFZlYy56LCByZWZsZWN0VmVjLnggKSAqIFJFQ0lQUk9DQUxfUEkyICsgMC41O1xuXHRcdFx0I2lmZGVmIFRFWFRVUkVfTE9EX0VYVFxuXHRcdFx0XHR2ZWM0IGVudk1hcENvbG9yIFx4M2QgdGV4dHVyZTJETG9kRVhUKCBlbnZNYXAsIHNhbXBsZVVWLCBzcGVjdWxhck1JUExldmVsICk7XG5cdFx0XHQjZWxzZVxuXHRcdFx0XHR2ZWM0IGVudk1hcENvbG9yIFx4M2QgdGV4dHVyZTJEKCBlbnZNYXAsIHNhbXBsZVVWLCBzcGVjdWxhck1JUExldmVsICk7XG5cdFx0XHQjZW5kaWZcblx0XHRcdGVudk1hcENvbG9yLnJnYiBceDNkIGVudk1hcFRleGVsVG9MaW5lYXIoIGVudk1hcENvbG9yICkucmdiO1xuXHRcdCNlbGlmIGRlZmluZWQoIEVOVk1BUF9UWVBFX1NQSEVSRSApXG5cdFx0XHR2ZWMzIHJlZmxlY3RWaWV3IFx4M2Qgbm9ybWFsaXplKCAoIHZpZXdNYXRyaXggKiB2ZWM0KCByZWZsZWN0VmVjLCAwLjAgKSApLnh5eiArIHZlYzMoIDAuMCwwLjAsMS4wICkgKTtcblx0XHRcdCNpZmRlZiBURVhUVVJFX0xPRF9FWFRcblx0XHRcdFx0dmVjNCBlbnZNYXBDb2xvciBceDNkIHRleHR1cmUyRExvZEVYVCggZW52TWFwLCByZWZsZWN0Vmlldy54eSAqIDAuNSArIDAuNSwgc3BlY3VsYXJNSVBMZXZlbCApO1xuXHRcdFx0I2Vsc2Vcblx0XHRcdFx0dmVjNCBlbnZNYXBDb2xvciBceDNkIHRleHR1cmUyRCggZW52TWFwLCByZWZsZWN0Vmlldy54eSAqIDAuNSArIDAuNSwgc3BlY3VsYXJNSVBMZXZlbCApO1xuXHRcdFx0I2VuZGlmXG5cdFx0XHRlbnZNYXBDb2xvci5yZ2IgXHgzZCBlbnZNYXBUZXhlbFRvTGluZWFyKCBlbnZNYXBDb2xvciApLnJnYjtcblx0XHQjZW5kaWZcblx0XHRyZXR1cm4gZW52TWFwQ29sb3IucmdiICogZW52TWFwSW50ZW5zaXR5O1xuXHR9XG4jZW5kaWYiLAplbnZtYXBfdmVydGV4OiIjaWZkZWYgVVNFX0VOVk1BUFxuXHQjaWYgZGVmaW5lZCggVVNFX0JVTVBNQVAgKSB8fCBkZWZpbmVkKCBVU0VfTk9STUFMTUFQICkgfHwgZGVmaW5lZCggUEhPTkcgKVxuXHRcdHZXb3JsZFBvc2l0aW9uIFx4M2Qgd29ybGRQb3NpdGlvbi54eXo7XG5cdCNlbHNlXG5cdFx0dmVjMyBjYW1lcmFUb1ZlcnRleCBceDNkIG5vcm1hbGl6ZSggd29ybGRQb3NpdGlvbi54eXogLSBjYW1lcmFQb3NpdGlvbiApO1xuXHRcdHZlYzMgd29ybGROb3JtYWwgXHgzZCBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCB0cmFuc2Zvcm1lZE5vcm1hbCwgdmlld01hdHJpeCApO1xuXHRcdCNpZmRlZiBFTlZNQVBfTU9ERV9SRUZMRUNUSU9OXG5cdFx0XHR2UmVmbGVjdCBceDNkIHJlZmxlY3QoIGNhbWVyYVRvVmVydGV4LCB3b3JsZE5vcm1hbCApO1xuXHRcdCNlbHNlXG5cdFx0XHR2UmVmbGVjdCBceDNkIHJlZnJhY3QoIGNhbWVyYVRvVmVydGV4LCB3b3JsZE5vcm1hbCwgcmVmcmFjdGlvblJhdGlvICk7XG5cdFx0I2VuZGlmXG5cdCNlbmRpZlxuI2VuZGlmIiwKZm9nX3ZlcnRleDoiI2lmZGVmIFVTRV9GT0dcblx0Zm9nRGVwdGggXHgzZCAtbXZQb3NpdGlvbi56O1xuI2VuZGlmIixmb2dfcGFyc192ZXJ0ZXg6IiNpZmRlZiBVU0VfRk9HXG5cdHZhcnlpbmcgZmxvYXQgZm9nRGVwdGg7XG4jZW5kaWYiLGZvZ19mcmFnbWVudDoiI2lmZGVmIFVTRV9GT0dcblx0I2lmZGVmIEZPR19FWFAyXG5cdFx0ZmxvYXQgZm9nRmFjdG9yIFx4M2Qgd2hpdGVDb21wbGltZW50KCBleHAyKCAtIGZvZ0RlbnNpdHkgKiBmb2dEZW5zaXR5ICogZm9nRGVwdGggKiBmb2dEZXB0aCAqIExPRzIgKSApO1xuXHQjZWxzZVxuXHRcdGZsb2F0IGZvZ0ZhY3RvciBceDNkIHNtb290aHN0ZXAoIGZvZ05lYXIsIGZvZ0ZhciwgZm9nRGVwdGggKTtcblx0I2VuZGlmXG5cdGdsX0ZyYWdDb2xvci5yZ2IgXHgzZCBtaXgoIGdsX0ZyYWdDb2xvci5yZ2IsIGZvZ0NvbG9yLCBmb2dGYWN0b3IgKTtcbiNlbmRpZiIsZm9nX3BhcnNfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfRk9HXG5cdHVuaWZvcm0gdmVjMyBmb2dDb2xvcjtcblx0dmFyeWluZyBmbG9hdCBmb2dEZXB0aDtcblx0I2lmZGVmIEZPR19FWFAyXG5cdFx0dW5pZm9ybSBmbG9hdCBmb2dEZW5zaXR5O1xuXHQjZWxzZVxuXHRcdHVuaWZvcm0gZmxvYXQgZm9nTmVhcjtcblx0XHR1bmlmb3JtIGZsb2F0IGZvZ0Zhcjtcblx0I2VuZGlmXG4jZW5kaWYiLApncmFkaWVudG1hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVE9PTlxuXHR1bmlmb3JtIHNhbXBsZXIyRCBncmFkaWVudE1hcDtcblx0dmVjMyBnZXRHcmFkaWVudElycmFkaWFuY2UoIHZlYzMgbm9ybWFsLCB2ZWMzIGxpZ2h0RGlyZWN0aW9uICkge1xuXHRcdGZsb2F0IGRvdE5MIFx4M2QgZG90KCBub3JtYWwsIGxpZ2h0RGlyZWN0aW9uICk7XG5cdFx0dmVjMiBjb29yZCBceDNkIHZlYzIoIGRvdE5MICogMC41ICsgMC41LCAwLjAgKTtcblx0XHQjaWZkZWYgVVNFX0dSQURJRU5UTUFQXG5cdFx0XHRyZXR1cm4gdGV4dHVyZTJEKCBncmFkaWVudE1hcCwgY29vcmQgKS5yZ2I7XG5cdFx0I2Vsc2Vcblx0XHRcdHJldHVybiAoIGNvb3JkLnggXHgzYyAwLjcgKSA/IHZlYzMoIDAuNyApIDogdmVjMyggMS4wICk7XG5cdFx0I2VuZGlmXG5cdH1cbiNlbmRpZiIsbGlnaHRtYXBfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfTElHSFRNQVBcblx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICtceDNkIFBJICogdGV4dHVyZTJEKCBsaWdodE1hcCwgdlV2MiApLnh5eiAqIGxpZ2h0TWFwSW50ZW5zaXR5O1xuI2VuZGlmIiwKbGlnaHRtYXBfcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9MSUdIVE1BUFxuXHR1bmlmb3JtIHNhbXBsZXIyRCBsaWdodE1hcDtcblx0dW5pZm9ybSBmbG9hdCBsaWdodE1hcEludGVuc2l0eTtcbiNlbmRpZiIsbGlnaHRzX2xhbWJlcnRfdmVydGV4OiJ2ZWMzIGRpZmZ1c2UgXHgzZCB2ZWMzKCAxLjAgKTtcbkdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnk7XG5nZW9tZXRyeS5wb3NpdGlvbiBceDNkIG12UG9zaXRpb24ueHl6O1xuZ2VvbWV0cnkubm9ybWFsIFx4M2Qgbm9ybWFsaXplKCB0cmFuc2Zvcm1lZE5vcm1hbCApO1xuZ2VvbWV0cnkudmlld0RpciBceDNkIG5vcm1hbGl6ZSggLW12UG9zaXRpb24ueHl6ICk7XG5HZW9tZXRyaWNDb250ZXh0IGJhY2tHZW9tZXRyeTtcbmJhY2tHZW9tZXRyeS5wb3NpdGlvbiBceDNkIGdlb21ldHJ5LnBvc2l0aW9uO1xuYmFja0dlb21ldHJ5Lm5vcm1hbCBceDNkIC1nZW9tZXRyeS5ub3JtYWw7XG5iYWNrR2VvbWV0cnkudmlld0RpciBceDNkIGdlb21ldHJ5LnZpZXdEaXI7XG52TGlnaHRGcm9udCBceDNkIHZlYzMoIDAuMCApO1xudkluZGlyZWN0RnJvbnQgXHgzZCB2ZWMzKCAwLjAgKTtcbiNpZmRlZiBET1VCTEVfU0lERURcblx0dkxpZ2h0QmFjayBceDNkIHZlYzMoIDAuMCApO1xuXHR2SW5kaXJlY3RCYWNrIFx4M2QgdmVjMyggMC4wICk7XG4jZW5kaWZcbkluY2lkZW50TGlnaHQgZGlyZWN0TGlnaHQ7XG5mbG9hdCBkb3ROTDtcbnZlYzMgZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlO1xuI2lmIE5VTV9QT0lOVF9MSUdIVFMgXHgzZSAwXG5cdCNwcmFnbWEgdW5yb2xsX2xvb3Bcblx0Zm9yICggaW50IGkgXHgzZCAwOyBpIFx4M2MgTlVNX1BPSU5UX0xJR0hUUzsgaSArKyApIHtcblx0XHRnZXRQb2ludERpcmVjdExpZ2h0SXJyYWRpYW5jZSggcG9pbnRMaWdodHNbIGkgXSwgZ2VvbWV0cnksIGRpcmVjdExpZ2h0ICk7XG5cdFx0ZG90TkwgXHgzZCBkb3QoIGdlb21ldHJ5Lm5vcm1hbCwgZGlyZWN0TGlnaHQuZGlyZWN0aW9uICk7XG5cdFx0ZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlIFx4M2QgUEkgKiBkaXJlY3RMaWdodC5jb2xvcjtcblx0XHR2TGlnaHRGcm9udCArXHgzZCBzYXR1cmF0ZSggZG90TkwgKSAqIGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZTtcblx0XHQjaWZkZWYgRE9VQkxFX1NJREVEXG5cdFx0XHR2TGlnaHRCYWNrICtceDNkIHNhdHVyYXRlKCAtZG90TkwgKSAqIGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZTtcblx0XHQjZW5kaWZcblx0fVxuI2VuZGlmXG4jaWYgTlVNX1NQT1RfTElHSFRTIFx4M2UgMFxuXHQjcHJhZ21hIHVucm9sbF9sb29wXG5cdGZvciAoIGludCBpIFx4M2QgMDsgaSBceDNjIE5VTV9TUE9UX0xJR0hUUzsgaSArKyApIHtcblx0XHRnZXRTcG90RGlyZWN0TGlnaHRJcnJhZGlhbmNlKCBzcG90TGlnaHRzWyBpIF0sIGdlb21ldHJ5LCBkaXJlY3RMaWdodCApO1xuXHRcdGRvdE5MIFx4M2QgZG90KCBnZW9tZXRyeS5ub3JtYWwsIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiApO1xuXHRcdGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZSBceDNkIFBJICogZGlyZWN0TGlnaHQuY29sb3I7XG5cdFx0dkxpZ2h0RnJvbnQgK1x4M2Qgc2F0dXJhdGUoIGRvdE5MICkgKiBkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2U7XG5cdFx0I2lmZGVmIERPVUJMRV9TSURFRFxuXHRcdFx0dkxpZ2h0QmFjayArXHgzZCBzYXR1cmF0ZSggLWRvdE5MICkgKiBkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2U7XG5cdFx0I2VuZGlmXG5cdH1cbiNlbmRpZlxuI2lmIE5VTV9ESVJfTElHSFRTIFx4M2UgMFxuXHQjcHJhZ21hIHVucm9sbF9sb29wXG5cdGZvciAoIGludCBpIFx4M2QgMDsgaSBceDNjIE5VTV9ESVJfTElHSFRTOyBpICsrICkge1xuXHRcdGdldERpcmVjdGlvbmFsRGlyZWN0TGlnaHRJcnJhZGlhbmNlKCBkaXJlY3Rpb25hbExpZ2h0c1sgaSBdLCBnZW9tZXRyeSwgZGlyZWN0TGlnaHQgKTtcblx0XHRkb3ROTCBceDNkIGRvdCggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKTtcblx0XHRkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2UgXHgzZCBQSSAqIGRpcmVjdExpZ2h0LmNvbG9yO1xuXHRcdHZMaWdodEZyb250ICtceDNkIHNhdHVyYXRlKCBkb3ROTCApICogZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlO1xuXHRcdCNpZmRlZiBET1VCTEVfU0lERURcblx0XHRcdHZMaWdodEJhY2sgK1x4M2Qgc2F0dXJhdGUoIC1kb3ROTCApICogZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlO1xuXHRcdCNlbmRpZlxuXHR9XG4jZW5kaWZcbiNpZiBOVU1fSEVNSV9MSUdIVFMgXHgzZSAwXG5cdCNwcmFnbWEgdW5yb2xsX2xvb3Bcblx0Zm9yICggaW50IGkgXHgzZCAwOyBpIFx4M2MgTlVNX0hFTUlfTElHSFRTOyBpICsrICkge1xuXHRcdHZJbmRpcmVjdEZyb250ICtceDNkIGdldEhlbWlzcGhlcmVMaWdodElycmFkaWFuY2UoIGhlbWlzcGhlcmVMaWdodHNbIGkgXSwgZ2VvbWV0cnkgKTtcblx0XHQjaWZkZWYgRE9VQkxFX1NJREVEXG5cdFx0XHR2SW5kaXJlY3RCYWNrICtceDNkIGdldEhlbWlzcGhlcmVMaWdodElycmFkaWFuY2UoIGhlbWlzcGhlcmVMaWdodHNbIGkgXSwgYmFja0dlb21ldHJ5ICk7XG5cdFx0I2VuZGlmXG5cdH1cbiNlbmRpZiIsCmxpZ2h0c19wYXJzX2JlZ2luOiJ1bmlmb3JtIHZlYzMgYW1iaWVudExpZ2h0Q29sb3I7XG51bmlmb3JtIHZlYzMgbGlnaHRQcm9iZVsgOSBdO1xudmVjMyBzaEdldElycmFkaWFuY2VBdCggaW4gdmVjMyBub3JtYWwsIGluIHZlYzMgc2hDb2VmZmljaWVudHNbIDkgXSApIHtcblx0ZmxvYXQgeCBceDNkIG5vcm1hbC54LCB5IFx4M2Qgbm9ybWFsLnksIHogXHgzZCBub3JtYWwuejtcblx0dmVjMyByZXN1bHQgXHgzZCBzaENvZWZmaWNpZW50c1sgMCBdICogMC44ODYyMjc7XG5cdHJlc3VsdCArXHgzZCBzaENvZWZmaWNpZW50c1sgMSBdICogMi4wICogMC41MTE2NjQgKiB5O1xuXHRyZXN1bHQgK1x4M2Qgc2hDb2VmZmljaWVudHNbIDIgXSAqIDIuMCAqIDAuNTExNjY0ICogejtcblx0cmVzdWx0ICtceDNkIHNoQ29lZmZpY2llbnRzWyAzIF0gKiAyLjAgKiAwLjUxMTY2NCAqIHg7XG5cdHJlc3VsdCArXHgzZCBzaENvZWZmaWNpZW50c1sgNCBdICogMi4wICogMC40MjkwNDMgKiB4ICogeTtcblx0cmVzdWx0ICtceDNkIHNoQ29lZmZpY2llbnRzWyA1IF0gKiAyLjAgKiAwLjQyOTA0MyAqIHkgKiB6O1xuXHRyZXN1bHQgK1x4M2Qgc2hDb2VmZmljaWVudHNbIDYgXSAqICggMC43NDMxMjUgKiB6ICogeiAtIDAuMjQ3NzA4ICk7XG5cdHJlc3VsdCArXHgzZCBzaENvZWZmaWNpZW50c1sgNyBdICogMi4wICogMC40MjkwNDMgKiB4ICogejtcblx0cmVzdWx0ICtceDNkIHNoQ29lZmZpY2llbnRzWyA4IF0gKiAwLjQyOTA0MyAqICggeCAqIHggLSB5ICogeSApO1xuXHRyZXR1cm4gcmVzdWx0O1xufVxudmVjMyBnZXRMaWdodFByb2JlSXJyYWRpYW5jZSggY29uc3QgaW4gdmVjMyBsaWdodFByb2JlWyA5IF0sIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnkgKSB7XG5cdHZlYzMgd29ybGROb3JtYWwgXHgzZCBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCBnZW9tZXRyeS5ub3JtYWwsIHZpZXdNYXRyaXggKTtcblx0dmVjMyBpcnJhZGlhbmNlIFx4M2Qgc2hHZXRJcnJhZGlhbmNlQXQoIHdvcmxkTm9ybWFsLCBsaWdodFByb2JlICk7XG5cdHJldHVybiBpcnJhZGlhbmNlO1xufVxudmVjMyBnZXRBbWJpZW50TGlnaHRJcnJhZGlhbmNlKCBjb25zdCBpbiB2ZWMzIGFtYmllbnRMaWdodENvbG9yICkge1xuXHR2ZWMzIGlycmFkaWFuY2UgXHgzZCBhbWJpZW50TGlnaHRDb2xvcjtcblx0I2lmbmRlZiBQSFlTSUNBTExZX0NPUlJFQ1RfTElHSFRTXG5cdFx0aXJyYWRpYW5jZSAqXHgzZCBQSTtcblx0I2VuZGlmXG5cdHJldHVybiBpcnJhZGlhbmNlO1xufVxuI2lmIE5VTV9ESVJfTElHSFRTIFx4M2UgMFxuXHRzdHJ1Y3QgRGlyZWN0aW9uYWxMaWdodCB7XG5cdFx0dmVjMyBkaXJlY3Rpb247XG5cdFx0dmVjMyBjb2xvcjtcblx0XHRpbnQgc2hhZG93O1xuXHRcdGZsb2F0IHNoYWRvd0JpYXM7XG5cdFx0ZmxvYXQgc2hhZG93UmFkaXVzO1xuXHRcdHZlYzIgc2hhZG93TWFwU2l6ZTtcblx0fTtcblx0dW5pZm9ybSBEaXJlY3Rpb25hbExpZ2h0IGRpcmVjdGlvbmFsTGlnaHRzWyBOVU1fRElSX0xJR0hUUyBdO1xuXHR2b2lkIGdldERpcmVjdGlvbmFsRGlyZWN0TGlnaHRJcnJhZGlhbmNlKCBjb25zdCBpbiBEaXJlY3Rpb25hbExpZ2h0IGRpcmVjdGlvbmFsTGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIG91dCBJbmNpZGVudExpZ2h0IGRpcmVjdExpZ2h0ICkge1xuXHRcdGRpcmVjdExpZ2h0LmNvbG9yIFx4M2QgZGlyZWN0aW9uYWxMaWdodC5jb2xvcjtcblx0XHRkaXJlY3RMaWdodC5kaXJlY3Rpb24gXHgzZCBkaXJlY3Rpb25hbExpZ2h0LmRpcmVjdGlvbjtcblx0XHRkaXJlY3RMaWdodC52aXNpYmxlIFx4M2QgdHJ1ZTtcblx0fVxuI2VuZGlmXG4jaWYgTlVNX1BPSU5UX0xJR0hUUyBceDNlIDBcblx0c3RydWN0IFBvaW50TGlnaHQge1xuXHRcdHZlYzMgcG9zaXRpb247XG5cdFx0dmVjMyBjb2xvcjtcblx0XHRmbG9hdCBkaXN0YW5jZTtcblx0XHRmbG9hdCBkZWNheTtcblx0XHRpbnQgc2hhZG93O1xuXHRcdGZsb2F0IHNoYWRvd0JpYXM7XG5cdFx0ZmxvYXQgc2hhZG93UmFkaXVzO1xuXHRcdHZlYzIgc2hhZG93TWFwU2l6ZTtcblx0XHRmbG9hdCBzaGFkb3dDYW1lcmFOZWFyO1xuXHRcdGZsb2F0IHNoYWRvd0NhbWVyYUZhcjtcblx0fTtcblx0dW5pZm9ybSBQb2ludExpZ2h0IHBvaW50TGlnaHRzWyBOVU1fUE9JTlRfTElHSFRTIF07XG5cdHZvaWQgZ2V0UG9pbnREaXJlY3RMaWdodElycmFkaWFuY2UoIGNvbnN0IGluIFBvaW50TGlnaHQgcG9pbnRMaWdodCwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgb3V0IEluY2lkZW50TGlnaHQgZGlyZWN0TGlnaHQgKSB7XG5cdFx0dmVjMyBsVmVjdG9yIFx4M2QgcG9pbnRMaWdodC5wb3NpdGlvbiAtIGdlb21ldHJ5LnBvc2l0aW9uO1xuXHRcdGRpcmVjdExpZ2h0LmRpcmVjdGlvbiBceDNkIG5vcm1hbGl6ZSggbFZlY3RvciApO1xuXHRcdGZsb2F0IGxpZ2h0RGlzdGFuY2UgXHgzZCBsZW5ndGgoIGxWZWN0b3IgKTtcblx0XHRkaXJlY3RMaWdodC5jb2xvciBceDNkIHBvaW50TGlnaHQuY29sb3I7XG5cdFx0ZGlyZWN0TGlnaHQuY29sb3IgKlx4M2QgcHVuY3R1YWxMaWdodEludGVuc2l0eVRvSXJyYWRpYW5jZUZhY3RvciggbGlnaHREaXN0YW5jZSwgcG9pbnRMaWdodC5kaXN0YW5jZSwgcG9pbnRMaWdodC5kZWNheSApO1xuXHRcdGRpcmVjdExpZ2h0LnZpc2libGUgXHgzZCAoIGRpcmVjdExpZ2h0LmNvbG9yICFceDNkIHZlYzMoIDAuMCApICk7XG5cdH1cbiNlbmRpZlxuI2lmIE5VTV9TUE9UX0xJR0hUUyBceDNlIDBcblx0c3RydWN0IFNwb3RMaWdodCB7XG5cdFx0dmVjMyBwb3NpdGlvbjtcblx0XHR2ZWMzIGRpcmVjdGlvbjtcblx0XHR2ZWMzIGNvbG9yO1xuXHRcdGZsb2F0IGRpc3RhbmNlO1xuXHRcdGZsb2F0IGRlY2F5O1xuXHRcdGZsb2F0IGNvbmVDb3M7XG5cdFx0ZmxvYXQgcGVudW1icmFDb3M7XG5cdFx0aW50IHNoYWRvdztcblx0XHRmbG9hdCBzaGFkb3dCaWFzO1xuXHRcdGZsb2F0IHNoYWRvd1JhZGl1cztcblx0XHR2ZWMyIHNoYWRvd01hcFNpemU7XG5cdH07XG5cdHVuaWZvcm0gU3BvdExpZ2h0IHNwb3RMaWdodHNbIE5VTV9TUE9UX0xJR0hUUyBdO1xuXHR2b2lkIGdldFNwb3REaXJlY3RMaWdodElycmFkaWFuY2UoIGNvbnN0IGluIFNwb3RMaWdodCBzcG90TGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIG91dCBJbmNpZGVudExpZ2h0IGRpcmVjdExpZ2h0ICApIHtcblx0XHR2ZWMzIGxWZWN0b3IgXHgzZCBzcG90TGlnaHQucG9zaXRpb24gLSBnZW9tZXRyeS5wb3NpdGlvbjtcblx0XHRkaXJlY3RMaWdodC5kaXJlY3Rpb24gXHgzZCBub3JtYWxpemUoIGxWZWN0b3IgKTtcblx0XHRmbG9hdCBsaWdodERpc3RhbmNlIFx4M2QgbGVuZ3RoKCBsVmVjdG9yICk7XG5cdFx0ZmxvYXQgYW5nbGVDb3MgXHgzZCBkb3QoIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiwgc3BvdExpZ2h0LmRpcmVjdGlvbiApO1xuXHRcdGlmICggYW5nbGVDb3MgXHgzZSBzcG90TGlnaHQuY29uZUNvcyApIHtcblx0XHRcdGZsb2F0IHNwb3RFZmZlY3QgXHgzZCBzbW9vdGhzdGVwKCBzcG90TGlnaHQuY29uZUNvcywgc3BvdExpZ2h0LnBlbnVtYnJhQ29zLCBhbmdsZUNvcyApO1xuXHRcdFx0ZGlyZWN0TGlnaHQuY29sb3IgXHgzZCBzcG90TGlnaHQuY29sb3I7XG5cdFx0XHRkaXJlY3RMaWdodC5jb2xvciAqXHgzZCBzcG90RWZmZWN0ICogcHVuY3R1YWxMaWdodEludGVuc2l0eVRvSXJyYWRpYW5jZUZhY3RvciggbGlnaHREaXN0YW5jZSwgc3BvdExpZ2h0LmRpc3RhbmNlLCBzcG90TGlnaHQuZGVjYXkgKTtcblx0XHRcdGRpcmVjdExpZ2h0LnZpc2libGUgXHgzZCB0cnVlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRkaXJlY3RMaWdodC5jb2xvciBceDNkIHZlYzMoIDAuMCApO1xuXHRcdFx0ZGlyZWN0TGlnaHQudmlzaWJsZSBceDNkIGZhbHNlO1xuXHRcdH1cblx0fVxuI2VuZGlmXG4jaWYgTlVNX1JFQ1RfQVJFQV9MSUdIVFMgXHgzZSAwXG5cdHN0cnVjdCBSZWN0QXJlYUxpZ2h0IHtcblx0XHR2ZWMzIGNvbG9yO1xuXHRcdHZlYzMgcG9zaXRpb247XG5cdFx0dmVjMyBoYWxmV2lkdGg7XG5cdFx0dmVjMyBoYWxmSGVpZ2h0O1xuXHR9O1xuXHR1bmlmb3JtIHNhbXBsZXIyRCBsdGNfMTtcdHVuaWZvcm0gc2FtcGxlcjJEIGx0Y18yO1xuXHR1bmlmb3JtIFJlY3RBcmVhTGlnaHQgcmVjdEFyZWFMaWdodHNbIE5VTV9SRUNUX0FSRUFfTElHSFRTIF07XG4jZW5kaWZcbiNpZiBOVU1fSEVNSV9MSUdIVFMgXHgzZSAwXG5cdHN0cnVjdCBIZW1pc3BoZXJlTGlnaHQge1xuXHRcdHZlYzMgZGlyZWN0aW9uO1xuXHRcdHZlYzMgc2t5Q29sb3I7XG5cdFx0dmVjMyBncm91bmRDb2xvcjtcblx0fTtcblx0dW5pZm9ybSBIZW1pc3BoZXJlTGlnaHQgaGVtaXNwaGVyZUxpZ2h0c1sgTlVNX0hFTUlfTElHSFRTIF07XG5cdHZlYzMgZ2V0SGVtaXNwaGVyZUxpZ2h0SXJyYWRpYW5jZSggY29uc3QgaW4gSGVtaXNwaGVyZUxpZ2h0IGhlbWlMaWdodCwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSApIHtcblx0XHRmbG9hdCBkb3ROTCBceDNkIGRvdCggZ2VvbWV0cnkubm9ybWFsLCBoZW1pTGlnaHQuZGlyZWN0aW9uICk7XG5cdFx0ZmxvYXQgaGVtaURpZmZ1c2VXZWlnaHQgXHgzZCAwLjUgKiBkb3ROTCArIDAuNTtcblx0XHR2ZWMzIGlycmFkaWFuY2UgXHgzZCBtaXgoIGhlbWlMaWdodC5ncm91bmRDb2xvciwgaGVtaUxpZ2h0LnNreUNvbG9yLCBoZW1pRGlmZnVzZVdlaWdodCApO1xuXHRcdCNpZm5kZWYgUEhZU0lDQUxMWV9DT1JSRUNUX0xJR0hUU1xuXHRcdFx0aXJyYWRpYW5jZSAqXHgzZCBQSTtcblx0XHQjZW5kaWZcblx0XHRyZXR1cm4gaXJyYWRpYW5jZTtcblx0fVxuI2VuZGlmIiwKbGlnaHRzX3Bob25nX2ZyYWdtZW50OiJCbGlublBob25nTWF0ZXJpYWwgbWF0ZXJpYWw7XG5tYXRlcmlhbC5kaWZmdXNlQ29sb3IgXHgzZCBkaWZmdXNlQ29sb3IucmdiO1xubWF0ZXJpYWwuc3BlY3VsYXJDb2xvciBceDNkIHNwZWN1bGFyO1xubWF0ZXJpYWwuc3BlY3VsYXJTaGluaW5lc3MgXHgzZCBzaGluaW5lc3M7XG5tYXRlcmlhbC5zcGVjdWxhclN0cmVuZ3RoIFx4M2Qgc3BlY3VsYXJTdHJlbmd0aDsiLGxpZ2h0c19waG9uZ19wYXJzX2ZyYWdtZW50OiJ2YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjtcbiNpZm5kZWYgRkxBVF9TSEFERURcblx0dmFyeWluZyB2ZWMzIHZOb3JtYWw7XG4jZW5kaWZcbnN0cnVjdCBCbGlublBob25nTWF0ZXJpYWwge1xuXHR2ZWMzXHRkaWZmdXNlQ29sb3I7XG5cdHZlYzNcdHNwZWN1bGFyQ29sb3I7XG5cdGZsb2F0XHRzcGVjdWxhclNoaW5pbmVzcztcblx0ZmxvYXRcdHNwZWN1bGFyU3RyZW5ndGg7XG59O1xudm9pZCBSRV9EaXJlY3RfQmxpbm5QaG9uZyggY29uc3QgaW4gSW5jaWRlbnRMaWdodCBkaXJlY3RMaWdodCwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gQmxpbm5QaG9uZ01hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCApIHtcblx0I2lmZGVmIFRPT05cblx0XHR2ZWMzIGlycmFkaWFuY2UgXHgzZCBnZXRHcmFkaWVudElycmFkaWFuY2UoIGdlb21ldHJ5Lm5vcm1hbCwgZGlyZWN0TGlnaHQuZGlyZWN0aW9uICkgKiBkaXJlY3RMaWdodC5jb2xvcjtcblx0I2Vsc2Vcblx0XHRmbG9hdCBkb3ROTCBceDNkIHNhdHVyYXRlKCBkb3QoIGdlb21ldHJ5Lm5vcm1hbCwgZGlyZWN0TGlnaHQuZGlyZWN0aW9uICkgKTtcblx0XHR2ZWMzIGlycmFkaWFuY2UgXHgzZCBkb3ROTCAqIGRpcmVjdExpZ2h0LmNvbG9yO1xuXHQjZW5kaWZcblx0I2lmbmRlZiBQSFlTSUNBTExZX0NPUlJFQ1RfTElHSFRTXG5cdFx0aXJyYWRpYW5jZSAqXHgzZCBQSTtcblx0I2VuZGlmXG5cdHJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgK1x4M2QgaXJyYWRpYW5jZSAqIEJSREZfRGlmZnVzZV9MYW1iZXJ0KCBtYXRlcmlhbC5kaWZmdXNlQ29sb3IgKTtcblx0cmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXIgK1x4M2QgaXJyYWRpYW5jZSAqIEJSREZfU3BlY3VsYXJfQmxpbm5QaG9uZyggZGlyZWN0TGlnaHQsIGdlb21ldHJ5LCBtYXRlcmlhbC5zcGVjdWxhckNvbG9yLCBtYXRlcmlhbC5zcGVjdWxhclNoaW5pbmVzcyApICogbWF0ZXJpYWwuc3BlY3VsYXJTdHJlbmd0aDtcbn1cbnZvaWQgUkVfSW5kaXJlY3REaWZmdXNlX0JsaW5uUGhvbmcoIGNvbnN0IGluIHZlYzMgaXJyYWRpYW5jZSwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gQmxpbm5QaG9uZ01hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCApIHtcblx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICtceDNkIGlycmFkaWFuY2UgKiBCUkRGX0RpZmZ1c2VfTGFtYmVydCggbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICk7XG59XG4jZGVmaW5lIFJFX0RpcmVjdFx0XHRcdFx0UkVfRGlyZWN0X0JsaW5uUGhvbmdcbiNkZWZpbmUgUkVfSW5kaXJlY3REaWZmdXNlXHRcdFJFX0luZGlyZWN0RGlmZnVzZV9CbGlublBob25nXG4jZGVmaW5lIE1hdGVyaWFsX0xpZ2h0UHJvYmVMT0QoIG1hdGVyaWFsIClcdCgwKSIsCmxpZ2h0c19waHlzaWNhbF9mcmFnbWVudDoiUGh5c2ljYWxNYXRlcmlhbCBtYXRlcmlhbDtcbm1hdGVyaWFsLmRpZmZ1c2VDb2xvciBceDNkIGRpZmZ1c2VDb2xvci5yZ2IgKiAoIDEuMCAtIG1ldGFsbmVzc0ZhY3RvciApO1xubWF0ZXJpYWwuc3BlY3VsYXJSb3VnaG5lc3MgXHgzZCBjbGFtcCggcm91Z2huZXNzRmFjdG9yLCAwLjA0LCAxLjAgKTtcbiNpZmRlZiBTVEFOREFSRFxuXHRtYXRlcmlhbC5zcGVjdWxhckNvbG9yIFx4M2QgbWl4KCB2ZWMzKCBERUZBVUxUX1NQRUNVTEFSX0NPRUZGSUNJRU5UICksIGRpZmZ1c2VDb2xvci5yZ2IsIG1ldGFsbmVzc0ZhY3RvciApO1xuI2Vsc2Vcblx0bWF0ZXJpYWwuc3BlY3VsYXJDb2xvciBceDNkIG1peCggdmVjMyggTUFYSU1VTV9TUEVDVUxBUl9DT0VGRklDSUVOVCAqIHBvdzIoIHJlZmxlY3Rpdml0eSApICksIGRpZmZ1c2VDb2xvci5yZ2IsIG1ldGFsbmVzc0ZhY3RvciApO1xuXHRtYXRlcmlhbC5jbGVhckNvYXQgXHgzZCBzYXR1cmF0ZSggY2xlYXJDb2F0ICk7XHRtYXRlcmlhbC5jbGVhckNvYXRSb3VnaG5lc3MgXHgzZCBjbGFtcCggY2xlYXJDb2F0Um91Z2huZXNzLCAwLjA0LCAxLjAgKTtcbiNlbmRpZiIsCmxpZ2h0c19waHlzaWNhbF9wYXJzX2ZyYWdtZW50OiJzdHJ1Y3QgUGh5c2ljYWxNYXRlcmlhbCB7XG5cdHZlYzNcdGRpZmZ1c2VDb2xvcjtcblx0ZmxvYXRcdHNwZWN1bGFyUm91Z2huZXNzO1xuXHR2ZWMzXHRzcGVjdWxhckNvbG9yO1xuXHQjaWZuZGVmIFNUQU5EQVJEXG5cdFx0ZmxvYXQgY2xlYXJDb2F0O1xuXHRcdGZsb2F0IGNsZWFyQ29hdFJvdWdobmVzcztcblx0I2VuZGlmXG59O1xuI2RlZmluZSBNQVhJTVVNX1NQRUNVTEFSX0NPRUZGSUNJRU5UIDAuMTZcbiNkZWZpbmUgREVGQVVMVF9TUEVDVUxBUl9DT0VGRklDSUVOVCAwLjA0XG5mbG9hdCBjbGVhckNvYXRESFJBcHByb3goIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcywgY29uc3QgaW4gZmxvYXQgZG90TkwgKSB7XG5cdHJldHVybiBERUZBVUxUX1NQRUNVTEFSX0NPRUZGSUNJRU5UICsgKCAxLjAgLSBERUZBVUxUX1NQRUNVTEFSX0NPRUZGSUNJRU5UICkgKiAoIHBvdyggMS4wIC0gZG90TkwsIDUuMCApICogcG93KCAxLjAgLSByb3VnaG5lc3MsIDIuMCApICk7XG59XG4jaWYgTlVNX1JFQ1RfQVJFQV9MSUdIVFMgXHgzZSAwXG5cdHZvaWQgUkVfRGlyZWN0X1JlY3RBcmVhX1BoeXNpY2FsKCBjb25zdCBpbiBSZWN0QXJlYUxpZ2h0IHJlY3RBcmVhTGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIFBoeXNpY2FsTWF0ZXJpYWwgbWF0ZXJpYWwsIGlub3V0IFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ICkge1xuXHRcdHZlYzMgbm9ybWFsIFx4M2QgZ2VvbWV0cnkubm9ybWFsO1xuXHRcdHZlYzMgdmlld0RpciBceDNkIGdlb21ldHJ5LnZpZXdEaXI7XG5cdFx0dmVjMyBwb3NpdGlvbiBceDNkIGdlb21ldHJ5LnBvc2l0aW9uO1xuXHRcdHZlYzMgbGlnaHRQb3MgXHgzZCByZWN0QXJlYUxpZ2h0LnBvc2l0aW9uO1xuXHRcdHZlYzMgaGFsZldpZHRoIFx4M2QgcmVjdEFyZWFMaWdodC5oYWxmV2lkdGg7XG5cdFx0dmVjMyBoYWxmSGVpZ2h0IFx4M2QgcmVjdEFyZWFMaWdodC5oYWxmSGVpZ2h0O1xuXHRcdHZlYzMgbGlnaHRDb2xvciBceDNkIHJlY3RBcmVhTGlnaHQuY29sb3I7XG5cdFx0ZmxvYXQgcm91Z2huZXNzIFx4M2QgbWF0ZXJpYWwuc3BlY3VsYXJSb3VnaG5lc3M7XG5cdFx0dmVjMyByZWN0Q29vcmRzWyA0IF07XG5cdFx0cmVjdENvb3Jkc1sgMCBdIFx4M2QgbGlnaHRQb3MgKyBoYWxmV2lkdGggLSBoYWxmSGVpZ2h0O1x0XHRyZWN0Q29vcmRzWyAxIF0gXHgzZCBsaWdodFBvcyAtIGhhbGZXaWR0aCAtIGhhbGZIZWlnaHQ7XG5cdFx0cmVjdENvb3Jkc1sgMiBdIFx4M2QgbGlnaHRQb3MgLSBoYWxmV2lkdGggKyBoYWxmSGVpZ2h0O1xuXHRcdHJlY3RDb29yZHNbIDMgXSBceDNkIGxpZ2h0UG9zICsgaGFsZldpZHRoICsgaGFsZkhlaWdodDtcblx0XHR2ZWMyIHV2IFx4M2QgTFRDX1V2KCBub3JtYWwsIHZpZXdEaXIsIHJvdWdobmVzcyApO1xuXHRcdHZlYzQgdDEgXHgzZCB0ZXh0dXJlMkQoIGx0Y18xLCB1diApO1xuXHRcdHZlYzQgdDIgXHgzZCB0ZXh0dXJlMkQoIGx0Y18yLCB1diApO1xuXHRcdG1hdDMgbUludiBceDNkIG1hdDMoXG5cdFx0XHR2ZWMzKCB0MS54LCAwLCB0MS55ICksXG5cdFx0XHR2ZWMzKCAgICAwLCAxLCAgICAwICksXG5cdFx0XHR2ZWMzKCB0MS56LCAwLCB0MS53IClcblx0XHQpO1xuXHRcdHZlYzMgZnJlc25lbCBceDNkICggbWF0ZXJpYWwuc3BlY3VsYXJDb2xvciAqIHQyLnggKyAoIHZlYzMoIDEuMCApIC0gbWF0ZXJpYWwuc3BlY3VsYXJDb2xvciApICogdDIueSApO1xuXHRcdHJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyICtceDNkIGxpZ2h0Q29sb3IgKiBmcmVzbmVsICogTFRDX0V2YWx1YXRlKCBub3JtYWwsIHZpZXdEaXIsIHBvc2l0aW9uLCBtSW52LCByZWN0Q29vcmRzICk7XG5cdFx0cmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArXHgzZCBsaWdodENvbG9yICogbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICogTFRDX0V2YWx1YXRlKCBub3JtYWwsIHZpZXdEaXIsIHBvc2l0aW9uLCBtYXQzKCAxLjAgKSwgcmVjdENvb3JkcyApO1xuXHR9XG4jZW5kaWZcbnZvaWQgUkVfRGlyZWN0X1BoeXNpY2FsKCBjb25zdCBpbiBJbmNpZGVudExpZ2h0IGRpcmVjdExpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiBQaHlzaWNhbE1hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCApIHtcblx0ZmxvYXQgZG90TkwgXHgzZCBzYXR1cmF0ZSggZG90KCBnZW9tZXRyeS5ub3JtYWwsIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiApICk7XG5cdHZlYzMgaXJyYWRpYW5jZSBceDNkIGRvdE5MICogZGlyZWN0TGlnaHQuY29sb3I7XG5cdCNpZm5kZWYgUEhZU0lDQUxMWV9DT1JSRUNUX0xJR0hUU1xuXHRcdGlycmFkaWFuY2UgKlx4M2QgUEk7XG5cdCNlbmRpZlxuXHQjaWZuZGVmIFNUQU5EQVJEXG5cdFx0ZmxvYXQgY2xlYXJDb2F0REhSIFx4M2QgbWF0ZXJpYWwuY2xlYXJDb2F0ICogY2xlYXJDb2F0REhSQXBwcm94KCBtYXRlcmlhbC5jbGVhckNvYXRSb3VnaG5lc3MsIGRvdE5MICk7XG5cdCNlbHNlXG5cdFx0ZmxvYXQgY2xlYXJDb2F0REhSIFx4M2QgMC4wO1xuXHQjZW5kaWZcblx0cmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXIgK1x4M2QgKCAxLjAgLSBjbGVhckNvYXRESFIgKSAqIGlycmFkaWFuY2UgKiBCUkRGX1NwZWN1bGFyX0dHWCggZGlyZWN0TGlnaHQsIGdlb21ldHJ5LCBtYXRlcmlhbC5zcGVjdWxhckNvbG9yLCBtYXRlcmlhbC5zcGVjdWxhclJvdWdobmVzcyApO1xuXHRyZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICtceDNkICggMS4wIC0gY2xlYXJDb2F0REhSICkgKiBpcnJhZGlhbmNlICogQlJERl9EaWZmdXNlX0xhbWJlcnQoIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciApO1xuXHQjaWZuZGVmIFNUQU5EQVJEXG5cdFx0cmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXIgK1x4M2QgaXJyYWRpYW5jZSAqIG1hdGVyaWFsLmNsZWFyQ29hdCAqIEJSREZfU3BlY3VsYXJfR0dYKCBkaXJlY3RMaWdodCwgZ2VvbWV0cnksIHZlYzMoIERFRkFVTFRfU1BFQ1VMQVJfQ09FRkZJQ0lFTlQgKSwgbWF0ZXJpYWwuY2xlYXJDb2F0Um91Z2huZXNzICk7XG5cdCNlbmRpZlxufVxudm9pZCBSRV9JbmRpcmVjdERpZmZ1c2VfUGh5c2ljYWwoIGNvbnN0IGluIHZlYzMgaXJyYWRpYW5jZSwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gUGh5c2ljYWxNYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgKSB7XG5cdCNpZm5kZWYgRU5WTUFQX1RZUEVfQ1VCRV9VVlxuXHRcdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArXHgzZCBpcnJhZGlhbmNlICogQlJERl9EaWZmdXNlX0xhbWJlcnQoIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciApO1xuXHQjZW5kaWZcbn1cbnZvaWQgUkVfSW5kaXJlY3RTcGVjdWxhcl9QaHlzaWNhbCggY29uc3QgaW4gdmVjMyByYWRpYW5jZSwgY29uc3QgaW4gdmVjMyBpcnJhZGlhbmNlLCBjb25zdCBpbiB2ZWMzIGNsZWFyQ29hdFJhZGlhbmNlLCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiBQaHlzaWNhbE1hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCkge1xuXHQjaWZuZGVmIFNUQU5EQVJEXG5cdFx0ZmxvYXQgZG90TlYgXHgzZCBzYXR1cmF0ZSggZG90KCBnZW9tZXRyeS5ub3JtYWwsIGdlb21ldHJ5LnZpZXdEaXIgKSApO1xuXHRcdGZsb2F0IGRvdE5MIFx4M2QgZG90TlY7XG5cdFx0ZmxvYXQgY2xlYXJDb2F0REhSIFx4M2QgbWF0ZXJpYWwuY2xlYXJDb2F0ICogY2xlYXJDb2F0REhSQXBwcm94KCBtYXRlcmlhbC5jbGVhckNvYXRSb3VnaG5lc3MsIGRvdE5MICk7XG5cdCNlbHNlXG5cdFx0ZmxvYXQgY2xlYXJDb2F0REhSIFx4M2QgMC4wO1xuXHQjZW5kaWZcblx0ZmxvYXQgY2xlYXJDb2F0SW52IFx4M2QgMS4wIC0gY2xlYXJDb2F0REhSO1xuXHQjaWYgZGVmaW5lZCggRU5WTUFQX1RZUEVfQ1VCRV9VViApXG5cdFx0dmVjMyBzaW5nbGVTY2F0dGVyaW5nIFx4M2QgdmVjMyggMC4wICk7XG5cdFx0dmVjMyBtdWx0aVNjYXR0ZXJpbmcgXHgzZCB2ZWMzKCAwLjAgKTtcblx0XHR2ZWMzIGNvc2luZVdlaWdodGVkSXJyYWRpYW5jZSBceDNkIGlycmFkaWFuY2UgKiBSRUNJUFJPQ0FMX1BJO1xuXHRcdEJSREZfU3BlY3VsYXJfTXVsdGlzY2F0dGVyaW5nX0Vudmlyb25tZW50KCBnZW9tZXRyeSwgbWF0ZXJpYWwuc3BlY3VsYXJDb2xvciwgbWF0ZXJpYWwuc3BlY3VsYXJSb3VnaG5lc3MsIHNpbmdsZVNjYXR0ZXJpbmcsIG11bHRpU2NhdHRlcmluZyApO1xuXHRcdHZlYzMgZGlmZnVzZSBceDNkIG1hdGVyaWFsLmRpZmZ1c2VDb2xvcjtcblx0XHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdFNwZWN1bGFyICtceDNkIGNsZWFyQ29hdEludiAqIHJhZGlhbmNlICogc2luZ2xlU2NhdHRlcmluZztcblx0XHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgK1x4M2QgbXVsdGlTY2F0dGVyaW5nICogY29zaW5lV2VpZ2h0ZWRJcnJhZGlhbmNlO1xuXHRcdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArXHgzZCBkaWZmdXNlICogY29zaW5lV2VpZ2h0ZWRJcnJhZGlhbmNlO1xuXHQjZWxzZVxuXHRcdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0U3BlY3VsYXIgK1x4M2QgY2xlYXJDb2F0SW52ICogcmFkaWFuY2UgKiBCUkRGX1NwZWN1bGFyX0dHWF9FbnZpcm9ubWVudCggZ2VvbWV0cnksIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IsIG1hdGVyaWFsLnNwZWN1bGFyUm91Z2huZXNzICk7XG5cdCNlbmRpZlxuXHQjaWZuZGVmIFNUQU5EQVJEXG5cdFx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3RTcGVjdWxhciArXHgzZCBjbGVhckNvYXRSYWRpYW5jZSAqIG1hdGVyaWFsLmNsZWFyQ29hdCAqIEJSREZfU3BlY3VsYXJfR0dYX0Vudmlyb25tZW50KCBnZW9tZXRyeSwgdmVjMyggREVGQVVMVF9TUEVDVUxBUl9DT0VGRklDSUVOVCApLCBtYXRlcmlhbC5jbGVhckNvYXRSb3VnaG5lc3MgKTtcblx0I2VuZGlmXG59XG4jZGVmaW5lIFJFX0RpcmVjdFx0XHRcdFx0UkVfRGlyZWN0X1BoeXNpY2FsXG4jZGVmaW5lIFJFX0RpcmVjdF9SZWN0QXJlYVx0XHRSRV9EaXJlY3RfUmVjdEFyZWFfUGh5c2ljYWxcbiNkZWZpbmUgUkVfSW5kaXJlY3REaWZmdXNlXHRcdFJFX0luZGlyZWN0RGlmZnVzZV9QaHlzaWNhbFxuI2RlZmluZSBSRV9JbmRpcmVjdFNwZWN1bGFyXHRcdFJFX0luZGlyZWN0U3BlY3VsYXJfUGh5c2ljYWxcbiNkZWZpbmUgTWF0ZXJpYWxfQmxpbm5TaGluaW5lc3NFeHBvbmVudCggbWF0ZXJpYWwgKSAgIEdHWFJvdWdobmVzc1RvQmxpbm5FeHBvbmVudCggbWF0ZXJpYWwuc3BlY3VsYXJSb3VnaG5lc3MgKVxuI2RlZmluZSBNYXRlcmlhbF9DbGVhckNvYXRfQmxpbm5TaGluaW5lc3NFeHBvbmVudCggbWF0ZXJpYWwgKSAgIEdHWFJvdWdobmVzc1RvQmxpbm5FeHBvbmVudCggbWF0ZXJpYWwuY2xlYXJDb2F0Um91Z2huZXNzIClcbmZsb2F0IGNvbXB1dGVTcGVjdWxhck9jY2x1c2lvbiggY29uc3QgaW4gZmxvYXQgZG90TlYsIGNvbnN0IGluIGZsb2F0IGFtYmllbnRPY2NsdXNpb24sIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcyApIHtcblx0cmV0dXJuIHNhdHVyYXRlKCBwb3coIGRvdE5WICsgYW1iaWVudE9jY2x1c2lvbiwgZXhwMiggLSAxNi4wICogcm91Z2huZXNzIC0gMS4wICkgKSAtIDEuMCArIGFtYmllbnRPY2NsdXNpb24gKTtcbn0iLApsaWdodHNfZnJhZ21lbnRfYmVnaW46IlxuR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeTtcbmdlb21ldHJ5LnBvc2l0aW9uIFx4M2QgLSB2Vmlld1Bvc2l0aW9uO1xuZ2VvbWV0cnkubm9ybWFsIFx4M2Qgbm9ybWFsO1xuZ2VvbWV0cnkudmlld0RpciBceDNkIG5vcm1hbGl6ZSggdlZpZXdQb3NpdGlvbiApO1xuSW5jaWRlbnRMaWdodCBkaXJlY3RMaWdodDtcbiNpZiAoIE5VTV9QT0lOVF9MSUdIVFMgXHgzZSAwICkgXHgyNlx4MjYgZGVmaW5lZCggUkVfRGlyZWN0IClcblx0UG9pbnRMaWdodCBwb2ludExpZ2h0O1xuXHQjcHJhZ21hIHVucm9sbF9sb29wXG5cdGZvciAoIGludCBpIFx4M2QgMDsgaSBceDNjIE5VTV9QT0lOVF9MSUdIVFM7IGkgKysgKSB7XG5cdFx0cG9pbnRMaWdodCBceDNkIHBvaW50TGlnaHRzWyBpIF07XG5cdFx0Z2V0UG9pbnREaXJlY3RMaWdodElycmFkaWFuY2UoIHBvaW50TGlnaHQsIGdlb21ldHJ5LCBkaXJlY3RMaWdodCApO1xuXHRcdCNpZmRlZiBVU0VfU0hBRE9XTUFQXG5cdFx0ZGlyZWN0TGlnaHQuY29sb3IgKlx4M2QgYWxsKCBidmVjMiggcG9pbnRMaWdodC5zaGFkb3csIGRpcmVjdExpZ2h0LnZpc2libGUgKSApID8gZ2V0UG9pbnRTaGFkb3coIHBvaW50U2hhZG93TWFwWyBpIF0sIHBvaW50TGlnaHQuc2hhZG93TWFwU2l6ZSwgcG9pbnRMaWdodC5zaGFkb3dCaWFzLCBwb2ludExpZ2h0LnNoYWRvd1JhZGl1cywgdlBvaW50U2hhZG93Q29vcmRbIGkgXSwgcG9pbnRMaWdodC5zaGFkb3dDYW1lcmFOZWFyLCBwb2ludExpZ2h0LnNoYWRvd0NhbWVyYUZhciApIDogMS4wO1xuXHRcdCNlbmRpZlxuXHRcdFJFX0RpcmVjdCggZGlyZWN0TGlnaHQsIGdlb21ldHJ5LCBtYXRlcmlhbCwgcmVmbGVjdGVkTGlnaHQgKTtcblx0fVxuI2VuZGlmXG4jaWYgKCBOVU1fU1BPVF9MSUdIVFMgXHgzZSAwICkgXHgyNlx4MjYgZGVmaW5lZCggUkVfRGlyZWN0IClcblx0U3BvdExpZ2h0IHNwb3RMaWdodDtcblx0I3ByYWdtYSB1bnJvbGxfbG9vcFxuXHRmb3IgKCBpbnQgaSBceDNkIDA7IGkgXHgzYyBOVU1fU1BPVF9MSUdIVFM7IGkgKysgKSB7XG5cdFx0c3BvdExpZ2h0IFx4M2Qgc3BvdExpZ2h0c1sgaSBdO1xuXHRcdGdldFNwb3REaXJlY3RMaWdodElycmFkaWFuY2UoIHNwb3RMaWdodCwgZ2VvbWV0cnksIGRpcmVjdExpZ2h0ICk7XG5cdFx0I2lmZGVmIFVTRV9TSEFET1dNQVBcblx0XHRkaXJlY3RMaWdodC5jb2xvciAqXHgzZCBhbGwoIGJ2ZWMyKCBzcG90TGlnaHQuc2hhZG93LCBkaXJlY3RMaWdodC52aXNpYmxlICkgKSA/IGdldFNoYWRvdyggc3BvdFNoYWRvd01hcFsgaSBdLCBzcG90TGlnaHQuc2hhZG93TWFwU2l6ZSwgc3BvdExpZ2h0LnNoYWRvd0JpYXMsIHNwb3RMaWdodC5zaGFkb3dSYWRpdXMsIHZTcG90U2hhZG93Q29vcmRbIGkgXSApIDogMS4wO1xuXHRcdCNlbmRpZlxuXHRcdFJFX0RpcmVjdCggZGlyZWN0TGlnaHQsIGdlb21ldHJ5LCBtYXRlcmlhbCwgcmVmbGVjdGVkTGlnaHQgKTtcblx0fVxuI2VuZGlmXG4jaWYgKCBOVU1fRElSX0xJR0hUUyBceDNlIDAgKSBceDI2XHgyNiBkZWZpbmVkKCBSRV9EaXJlY3QgKVxuXHREaXJlY3Rpb25hbExpZ2h0IGRpcmVjdGlvbmFsTGlnaHQ7XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3Bcblx0Zm9yICggaW50IGkgXHgzZCAwOyBpIFx4M2MgTlVNX0RJUl9MSUdIVFM7IGkgKysgKSB7XG5cdFx0ZGlyZWN0aW9uYWxMaWdodCBceDNkIGRpcmVjdGlvbmFsTGlnaHRzWyBpIF07XG5cdFx0Z2V0RGlyZWN0aW9uYWxEaXJlY3RMaWdodElycmFkaWFuY2UoIGRpcmVjdGlvbmFsTGlnaHQsIGdlb21ldHJ5LCBkaXJlY3RMaWdodCApO1xuXHRcdCNpZmRlZiBVU0VfU0hBRE9XTUFQXG5cdFx0ZGlyZWN0TGlnaHQuY29sb3IgKlx4M2QgYWxsKCBidmVjMiggZGlyZWN0aW9uYWxMaWdodC5zaGFkb3csIGRpcmVjdExpZ2h0LnZpc2libGUgKSApID8gZ2V0U2hhZG93KCBkaXJlY3Rpb25hbFNoYWRvd01hcFsgaSBdLCBkaXJlY3Rpb25hbExpZ2h0LnNoYWRvd01hcFNpemUsIGRpcmVjdGlvbmFsTGlnaHQuc2hhZG93QmlhcywgZGlyZWN0aW9uYWxMaWdodC5zaGFkb3dSYWRpdXMsIHZEaXJlY3Rpb25hbFNoYWRvd0Nvb3JkWyBpIF0gKSA6IDEuMDtcblx0XHQjZW5kaWZcblx0XHRSRV9EaXJlY3QoIGRpcmVjdExpZ2h0LCBnZW9tZXRyeSwgbWF0ZXJpYWwsIHJlZmxlY3RlZExpZ2h0ICk7XG5cdH1cbiNlbmRpZlxuI2lmICggTlVNX1JFQ1RfQVJFQV9MSUdIVFMgXHgzZSAwICkgXHgyNlx4MjYgZGVmaW5lZCggUkVfRGlyZWN0X1JlY3RBcmVhIClcblx0UmVjdEFyZWFMaWdodCByZWN0QXJlYUxpZ2h0O1xuXHQjcHJhZ21hIHVucm9sbF9sb29wXG5cdGZvciAoIGludCBpIFx4M2QgMDsgaSBceDNjIE5VTV9SRUNUX0FSRUFfTElHSFRTOyBpICsrICkge1xuXHRcdHJlY3RBcmVhTGlnaHQgXHgzZCByZWN0QXJlYUxpZ2h0c1sgaSBdO1xuXHRcdFJFX0RpcmVjdF9SZWN0QXJlYSggcmVjdEFyZWFMaWdodCwgZ2VvbWV0cnksIG1hdGVyaWFsLCByZWZsZWN0ZWRMaWdodCApO1xuXHR9XG4jZW5kaWZcbiNpZiBkZWZpbmVkKCBSRV9JbmRpcmVjdERpZmZ1c2UgKVxuXHR2ZWMzIGlycmFkaWFuY2UgXHgzZCBnZXRBbWJpZW50TGlnaHRJcnJhZGlhbmNlKCBhbWJpZW50TGlnaHRDb2xvciApO1xuXHRpcnJhZGlhbmNlICtceDNkIGdldExpZ2h0UHJvYmVJcnJhZGlhbmNlKCBsaWdodFByb2JlLCBnZW9tZXRyeSApO1xuXHQjaWYgKCBOVU1fSEVNSV9MSUdIVFMgXHgzZSAwIClcblx0XHQjcHJhZ21hIHVucm9sbF9sb29wXG5cdFx0Zm9yICggaW50IGkgXHgzZCAwOyBpIFx4M2MgTlVNX0hFTUlfTElHSFRTOyBpICsrICkge1xuXHRcdFx0aXJyYWRpYW5jZSArXHgzZCBnZXRIZW1pc3BoZXJlTGlnaHRJcnJhZGlhbmNlKCBoZW1pc3BoZXJlTGlnaHRzWyBpIF0sIGdlb21ldHJ5ICk7XG5cdFx0fVxuXHQjZW5kaWZcbiNlbmRpZlxuI2lmIGRlZmluZWQoIFJFX0luZGlyZWN0U3BlY3VsYXIgKVxuXHR2ZWMzIHJhZGlhbmNlIFx4M2QgdmVjMyggMC4wICk7XG5cdHZlYzMgY2xlYXJDb2F0UmFkaWFuY2UgXHgzZCB2ZWMzKCAwLjAgKTtcbiNlbmRpZiIsCmxpZ2h0c19mcmFnbWVudF9tYXBzOiIjaWYgZGVmaW5lZCggUkVfSW5kaXJlY3REaWZmdXNlIClcblx0I2lmZGVmIFVTRV9MSUdIVE1BUFxuXHRcdHZlYzMgbGlnaHRNYXBJcnJhZGlhbmNlIFx4M2QgdGV4dHVyZTJEKCBsaWdodE1hcCwgdlV2MiApLnh5eiAqIGxpZ2h0TWFwSW50ZW5zaXR5O1xuXHRcdCNpZm5kZWYgUEhZU0lDQUxMWV9DT1JSRUNUX0xJR0hUU1xuXHRcdFx0bGlnaHRNYXBJcnJhZGlhbmNlICpceDNkIFBJO1xuXHRcdCNlbmRpZlxuXHRcdGlycmFkaWFuY2UgK1x4M2QgbGlnaHRNYXBJcnJhZGlhbmNlO1xuXHQjZW5kaWZcblx0I2lmIGRlZmluZWQoIFVTRV9FTlZNQVAgKSBceDI2XHgyNiBkZWZpbmVkKCBQSFlTSUNBTCApIFx4MjZceDI2IGRlZmluZWQoIEVOVk1BUF9UWVBFX0NVQkVfVVYgKVxuXHRcdGlycmFkaWFuY2UgK1x4M2QgZ2V0TGlnaHRQcm9iZUluZGlyZWN0SXJyYWRpYW5jZSggZ2VvbWV0cnksIG1heE1pcExldmVsICk7XG5cdCNlbmRpZlxuI2VuZGlmXG4jaWYgZGVmaW5lZCggVVNFX0VOVk1BUCApIFx4MjZceDI2IGRlZmluZWQoIFJFX0luZGlyZWN0U3BlY3VsYXIgKVxuXHRyYWRpYW5jZSArXHgzZCBnZXRMaWdodFByb2JlSW5kaXJlY3RSYWRpYW5jZSggZ2VvbWV0cnksIE1hdGVyaWFsX0JsaW5uU2hpbmluZXNzRXhwb25lbnQoIG1hdGVyaWFsICksIG1heE1pcExldmVsICk7XG5cdCNpZm5kZWYgU1RBTkRBUkRcblx0XHRjbGVhckNvYXRSYWRpYW5jZSArXHgzZCBnZXRMaWdodFByb2JlSW5kaXJlY3RSYWRpYW5jZSggZ2VvbWV0cnksIE1hdGVyaWFsX0NsZWFyQ29hdF9CbGlublNoaW5pbmVzc0V4cG9uZW50KCBtYXRlcmlhbCApLCBtYXhNaXBMZXZlbCApO1xuXHQjZW5kaWZcbiNlbmRpZiIsCmxpZ2h0c19mcmFnbWVudF9lbmQ6IiNpZiBkZWZpbmVkKCBSRV9JbmRpcmVjdERpZmZ1c2UgKVxuXHRSRV9JbmRpcmVjdERpZmZ1c2UoIGlycmFkaWFuY2UsIGdlb21ldHJ5LCBtYXRlcmlhbCwgcmVmbGVjdGVkTGlnaHQgKTtcbiNlbmRpZlxuI2lmIGRlZmluZWQoIFJFX0luZGlyZWN0U3BlY3VsYXIgKVxuXHRSRV9JbmRpcmVjdFNwZWN1bGFyKCByYWRpYW5jZSwgaXJyYWRpYW5jZSwgY2xlYXJDb2F0UmFkaWFuY2UsIGdlb21ldHJ5LCBtYXRlcmlhbCwgcmVmbGVjdGVkTGlnaHQgKTtcbiNlbmRpZiIsbG9nZGVwdGhidWZfZnJhZ21lbnQ6IiNpZiBkZWZpbmVkKCBVU0VfTE9HREVQVEhCVUYgKSBceDI2XHgyNiBkZWZpbmVkKCBVU0VfTE9HREVQVEhCVUZfRVhUIClcblx0Z2xfRnJhZ0RlcHRoRVhUIFx4M2QgbG9nMiggdkZyYWdEZXB0aCApICogbG9nRGVwdGhCdWZGQyAqIDAuNTtcbiNlbmRpZiIsbG9nZGVwdGhidWZfcGFyc19mcmFnbWVudDoiI2lmIGRlZmluZWQoIFVTRV9MT0dERVBUSEJVRiApIFx4MjZceDI2IGRlZmluZWQoIFVTRV9MT0dERVBUSEJVRl9FWFQgKVxuXHR1bmlmb3JtIGZsb2F0IGxvZ0RlcHRoQnVmRkM7XG5cdHZhcnlpbmcgZmxvYXQgdkZyYWdEZXB0aDtcbiNlbmRpZiIsCmxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4OiIjaWZkZWYgVVNFX0xPR0RFUFRIQlVGXG5cdCNpZmRlZiBVU0VfTE9HREVQVEhCVUZfRVhUXG5cdFx0dmFyeWluZyBmbG9hdCB2RnJhZ0RlcHRoO1xuXHQjZWxzZVxuXHRcdHVuaWZvcm0gZmxvYXQgbG9nRGVwdGhCdWZGQztcblx0I2VuZGlmXG4jZW5kaWYiLGxvZ2RlcHRoYnVmX3ZlcnRleDoiI2lmZGVmIFVTRV9MT0dERVBUSEJVRlxuXHQjaWZkZWYgVVNFX0xPR0RFUFRIQlVGX0VYVFxuXHRcdHZGcmFnRGVwdGggXHgzZCAxLjAgKyBnbF9Qb3NpdGlvbi53O1xuXHQjZWxzZVxuXHRcdGdsX1Bvc2l0aW9uLnogXHgzZCBsb2cyKCBtYXgoIEVQU0lMT04sIGdsX1Bvc2l0aW9uLncgKyAxLjAgKSApICogbG9nRGVwdGhCdWZGQyAtIDEuMDtcblx0XHRnbF9Qb3NpdGlvbi56ICpceDNkIGdsX1Bvc2l0aW9uLnc7XG5cdCNlbmRpZlxuI2VuZGlmIixtYXBfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfTUFQXG5cdHZlYzQgdGV4ZWxDb2xvciBceDNkIHRleHR1cmUyRCggbWFwLCB2VXYgKTtcblx0dGV4ZWxDb2xvciBceDNkIG1hcFRleGVsVG9MaW5lYXIoIHRleGVsQ29sb3IgKTtcblx0ZGlmZnVzZUNvbG9yICpceDNkIHRleGVsQ29sb3I7XG4jZW5kaWYiLAptYXBfcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9NQVBcblx0dW5pZm9ybSBzYW1wbGVyMkQgbWFwO1xuI2VuZGlmIixtYXBfcGFydGljbGVfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfTUFQXG5cdHZlYzIgdXYgXHgzZCAoIHV2VHJhbnNmb3JtICogdmVjMyggZ2xfUG9pbnRDb29yZC54LCAxLjAgLSBnbF9Qb2ludENvb3JkLnksIDEgKSApLnh5O1xuXHR2ZWM0IG1hcFRleGVsIFx4M2QgdGV4dHVyZTJEKCBtYXAsIHV2ICk7XG5cdGRpZmZ1c2VDb2xvciAqXHgzZCBtYXBUZXhlbFRvTGluZWFyKCBtYXBUZXhlbCApO1xuI2VuZGlmIixtYXBfcGFydGljbGVfcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9NQVBcblx0dW5pZm9ybSBtYXQzIHV2VHJhbnNmb3JtO1xuXHR1bmlmb3JtIHNhbXBsZXIyRCBtYXA7XG4jZW5kaWYiLG1ldGFsbmVzc21hcF9mcmFnbWVudDoiZmxvYXQgbWV0YWxuZXNzRmFjdG9yIFx4M2QgbWV0YWxuZXNzO1xuI2lmZGVmIFVTRV9NRVRBTE5FU1NNQVBcblx0dmVjNCB0ZXhlbE1ldGFsbmVzcyBceDNkIHRleHR1cmUyRCggbWV0YWxuZXNzTWFwLCB2VXYgKTtcblx0bWV0YWxuZXNzRmFjdG9yICpceDNkIHRleGVsTWV0YWxuZXNzLmI7XG4jZW5kaWYiLAptZXRhbG5lc3NtYXBfcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9NRVRBTE5FU1NNQVBcblx0dW5pZm9ybSBzYW1wbGVyMkQgbWV0YWxuZXNzTWFwO1xuI2VuZGlmIixtb3JwaG5vcm1hbF92ZXJ0ZXg6IiNpZmRlZiBVU0VfTU9SUEhOT1JNQUxTXG5cdG9iamVjdE5vcm1hbCArXHgzZCAoIG1vcnBoTm9ybWFsMCAtIG5vcm1hbCApICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAwIF07XG5cdG9iamVjdE5vcm1hbCArXHgzZCAoIG1vcnBoTm9ybWFsMSAtIG5vcm1hbCApICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAxIF07XG5cdG9iamVjdE5vcm1hbCArXHgzZCAoIG1vcnBoTm9ybWFsMiAtIG5vcm1hbCApICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAyIF07XG5cdG9iamVjdE5vcm1hbCArXHgzZCAoIG1vcnBoTm9ybWFsMyAtIG5vcm1hbCApICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAzIF07XG4jZW5kaWYiLG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4OiIjaWZkZWYgVVNFX01PUlBIVEFSR0VUU1xuXHQjaWZuZGVmIFVTRV9NT1JQSE5PUk1BTFNcblx0dW5pZm9ybSBmbG9hdCBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDggXTtcblx0I2Vsc2Vcblx0dW5pZm9ybSBmbG9hdCBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDQgXTtcblx0I2VuZGlmXG4jZW5kaWYiLAptb3JwaHRhcmdldF92ZXJ0ZXg6IiNpZmRlZiBVU0VfTU9SUEhUQVJHRVRTXG5cdHRyYW5zZm9ybWVkICtceDNkICggbW9ycGhUYXJnZXQwIC0gcG9zaXRpb24gKSAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgMCBdO1xuXHR0cmFuc2Zvcm1lZCArXHgzZCAoIG1vcnBoVGFyZ2V0MSAtIHBvc2l0aW9uICkgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDEgXTtcblx0dHJhbnNmb3JtZWQgK1x4M2QgKCBtb3JwaFRhcmdldDIgLSBwb3NpdGlvbiApICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAyIF07XG5cdHRyYW5zZm9ybWVkICtceDNkICggbW9ycGhUYXJnZXQzIC0gcG9zaXRpb24gKSAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgMyBdO1xuXHQjaWZuZGVmIFVTRV9NT1JQSE5PUk1BTFNcblx0dHJhbnNmb3JtZWQgK1x4M2QgKCBtb3JwaFRhcmdldDQgLSBwb3NpdGlvbiApICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyA0IF07XG5cdHRyYW5zZm9ybWVkICtceDNkICggbW9ycGhUYXJnZXQ1IC0gcG9zaXRpb24gKSAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgNSBdO1xuXHR0cmFuc2Zvcm1lZCArXHgzZCAoIG1vcnBoVGFyZ2V0NiAtIHBvc2l0aW9uICkgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDYgXTtcblx0dHJhbnNmb3JtZWQgK1x4M2QgKCBtb3JwaFRhcmdldDcgLSBwb3NpdGlvbiApICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyA3IF07XG5cdCNlbmRpZlxuI2VuZGlmIiwKbm9ybWFsX2ZyYWdtZW50X2JlZ2luOiIjaWZkZWYgRkxBVF9TSEFERURcblx0dmVjMyBmZHggXHgzZCB2ZWMzKCBkRmR4KCB2Vmlld1Bvc2l0aW9uLnggKSwgZEZkeCggdlZpZXdQb3NpdGlvbi55ICksIGRGZHgoIHZWaWV3UG9zaXRpb24ueiApICk7XG5cdHZlYzMgZmR5IFx4M2QgdmVjMyggZEZkeSggdlZpZXdQb3NpdGlvbi54ICksIGRGZHkoIHZWaWV3UG9zaXRpb24ueSApLCBkRmR5KCB2Vmlld1Bvc2l0aW9uLnogKSApO1xuXHR2ZWMzIG5vcm1hbCBceDNkIG5vcm1hbGl6ZSggY3Jvc3MoIGZkeCwgZmR5ICkgKTtcbiNlbHNlXG5cdHZlYzMgbm9ybWFsIFx4M2Qgbm9ybWFsaXplKCB2Tm9ybWFsICk7XG5cdCNpZmRlZiBET1VCTEVfU0lERURcblx0XHRub3JtYWwgXHgzZCBub3JtYWwgKiAoIGZsb2F0KCBnbF9Gcm9udEZhY2luZyApICogMi4wIC0gMS4wICk7XG5cdCNlbmRpZlxuXHQjaWZkZWYgVVNFX1RBTkdFTlRcblx0XHR2ZWMzIHRhbmdlbnQgXHgzZCBub3JtYWxpemUoIHZUYW5nZW50ICk7XG5cdFx0dmVjMyBiaXRhbmdlbnQgXHgzZCBub3JtYWxpemUoIHZCaXRhbmdlbnQgKTtcblx0XHQjaWZkZWYgRE9VQkxFX1NJREVEXG5cdFx0XHR0YW5nZW50IFx4M2QgdGFuZ2VudCAqICggZmxvYXQoIGdsX0Zyb250RmFjaW5nICkgKiAyLjAgLSAxLjAgKTtcblx0XHRcdGJpdGFuZ2VudCBceDNkIGJpdGFuZ2VudCAqICggZmxvYXQoIGdsX0Zyb250RmFjaW5nICkgKiAyLjAgLSAxLjAgKTtcblx0XHQjZW5kaWZcblx0I2VuZGlmXG4jZW5kaWYiLApub3JtYWxfZnJhZ21lbnRfbWFwczoiI2lmZGVmIFVTRV9OT1JNQUxNQVBcblx0I2lmZGVmIE9CSkVDVFNQQUNFX05PUk1BTE1BUFxuXHRcdG5vcm1hbCBceDNkIHRleHR1cmUyRCggbm9ybWFsTWFwLCB2VXYgKS54eXogKiAyLjAgLSAxLjA7XG5cdFx0I2lmZGVmIEZMSVBfU0lERURcblx0XHRcdG5vcm1hbCBceDNkIC0gbm9ybWFsO1xuXHRcdCNlbmRpZlxuXHRcdCNpZmRlZiBET1VCTEVfU0lERURcblx0XHRcdG5vcm1hbCBceDNkIG5vcm1hbCAqICggZmxvYXQoIGdsX0Zyb250RmFjaW5nICkgKiAyLjAgLSAxLjAgKTtcblx0XHQjZW5kaWZcblx0XHRub3JtYWwgXHgzZCBub3JtYWxpemUoIG5vcm1hbE1hdHJpeCAqIG5vcm1hbCApO1xuXHQjZWxzZVxuXHRcdCNpZmRlZiBVU0VfVEFOR0VOVFxuXHRcdFx0bWF0MyB2VEJOIFx4M2QgbWF0MyggdGFuZ2VudCwgYml0YW5nZW50LCBub3JtYWwgKTtcblx0XHRcdHZlYzMgbWFwTiBceDNkIHRleHR1cmUyRCggbm9ybWFsTWFwLCB2VXYgKS54eXogKiAyLjAgLSAxLjA7XG5cdFx0XHRtYXBOLnh5IFx4M2Qgbm9ybWFsU2NhbGUgKiBtYXBOLnh5O1xuXHRcdFx0bm9ybWFsIFx4M2Qgbm9ybWFsaXplKCB2VEJOICogbWFwTiApO1xuXHRcdCNlbHNlXG5cdFx0XHRub3JtYWwgXHgzZCBwZXJ0dXJiTm9ybWFsMkFyYiggLXZWaWV3UG9zaXRpb24sIG5vcm1hbCApO1xuXHRcdCNlbmRpZlxuXHQjZW5kaWZcbiNlbGlmIGRlZmluZWQoIFVTRV9CVU1QTUFQIClcblx0bm9ybWFsIFx4M2QgcGVydHVyYk5vcm1hbEFyYiggLXZWaWV3UG9zaXRpb24sIG5vcm1hbCwgZEhkeHlfZndkKCkgKTtcbiNlbmRpZiIsCm5vcm1hbG1hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX05PUk1BTE1BUFxuXHR1bmlmb3JtIHNhbXBsZXIyRCBub3JtYWxNYXA7XG5cdHVuaWZvcm0gdmVjMiBub3JtYWxTY2FsZTtcblx0I2lmZGVmIE9CSkVDVFNQQUNFX05PUk1BTE1BUFxuXHRcdHVuaWZvcm0gbWF0MyBub3JtYWxNYXRyaXg7XG5cdCNlbHNlXG5cdFx0dmVjMyBwZXJ0dXJiTm9ybWFsMkFyYiggdmVjMyBleWVfcG9zLCB2ZWMzIHN1cmZfbm9ybSApIHtcblx0XHRcdHZlYzMgcTAgXHgzZCB2ZWMzKCBkRmR4KCBleWVfcG9zLnggKSwgZEZkeCggZXllX3Bvcy55ICksIGRGZHgoIGV5ZV9wb3MueiApICk7XG5cdFx0XHR2ZWMzIHExIFx4M2QgdmVjMyggZEZkeSggZXllX3Bvcy54ICksIGRGZHkoIGV5ZV9wb3MueSApLCBkRmR5KCBleWVfcG9zLnogKSApO1xuXHRcdFx0dmVjMiBzdDAgXHgzZCBkRmR4KCB2VXYuc3QgKTtcblx0XHRcdHZlYzIgc3QxIFx4M2QgZEZkeSggdlV2LnN0ICk7XG5cdFx0XHRmbG9hdCBzY2FsZSBceDNkIHNpZ24oIHN0MS50ICogc3QwLnMgLSBzdDAudCAqIHN0MS5zICk7XG5cdFx0XHR2ZWMzIFMgXHgzZCBub3JtYWxpemUoICggcTAgKiBzdDEudCAtIHExICogc3QwLnQgKSAqIHNjYWxlICk7XG5cdFx0XHR2ZWMzIFQgXHgzZCBub3JtYWxpemUoICggLSBxMCAqIHN0MS5zICsgcTEgKiBzdDAucyApICogc2NhbGUgKTtcblx0XHRcdHZlYzMgTiBceDNkIG5vcm1hbGl6ZSggc3VyZl9ub3JtICk7XG5cdFx0XHRtYXQzIHRzbiBceDNkIG1hdDMoIFMsIFQsIE4gKTtcblx0XHRcdHZlYzMgbWFwTiBceDNkIHRleHR1cmUyRCggbm9ybWFsTWFwLCB2VXYgKS54eXogKiAyLjAgLSAxLjA7XG5cdFx0XHRtYXBOLnh5ICpceDNkIG5vcm1hbFNjYWxlO1xuXHRcdFx0bWFwTi54eSAqXHgzZCAoIGZsb2F0KCBnbF9Gcm9udEZhY2luZyApICogMi4wIC0gMS4wICk7XG5cdFx0XHRyZXR1cm4gbm9ybWFsaXplKCB0c24gKiBtYXBOICk7XG5cdFx0fVxuXHQjZW5kaWZcbiNlbmRpZiIsCnBhY2tpbmc6InZlYzMgcGFja05vcm1hbFRvUkdCKCBjb25zdCBpbiB2ZWMzIG5vcm1hbCApIHtcblx0cmV0dXJuIG5vcm1hbGl6ZSggbm9ybWFsICkgKiAwLjUgKyAwLjU7XG59XG52ZWMzIHVucGFja1JHQlRvTm9ybWFsKCBjb25zdCBpbiB2ZWMzIHJnYiApIHtcblx0cmV0dXJuIDIuMCAqIHJnYi54eXogLSAxLjA7XG59XG5jb25zdCBmbG9hdCBQYWNrVXBzY2FsZSBceDNkIDI1Ni4gLyAyNTUuO2NvbnN0IGZsb2F0IFVucGFja0Rvd25zY2FsZSBceDNkIDI1NS4gLyAyNTYuO1xuY29uc3QgdmVjMyBQYWNrRmFjdG9ycyBceDNkIHZlYzMoIDI1Ni4gKiAyNTYuICogMjU2LiwgMjU2LiAqIDI1Ni4sICAyNTYuICk7XG5jb25zdCB2ZWM0IFVucGFja0ZhY3RvcnMgXHgzZCBVbnBhY2tEb3duc2NhbGUgLyB2ZWM0KCBQYWNrRmFjdG9ycywgMS4gKTtcbmNvbnN0IGZsb2F0IFNoaWZ0UmlnaHQ4IFx4M2QgMS4gLyAyNTYuO1xudmVjNCBwYWNrRGVwdGhUb1JHQkEoIGNvbnN0IGluIGZsb2F0IHYgKSB7XG5cdHZlYzQgciBceDNkIHZlYzQoIGZyYWN0KCB2ICogUGFja0ZhY3RvcnMgKSwgdiApO1xuXHRyLnl6dyAtXHgzZCByLnh5eiAqIFNoaWZ0UmlnaHQ4O1x0cmV0dXJuIHIgKiBQYWNrVXBzY2FsZTtcbn1cbmZsb2F0IHVucGFja1JHQkFUb0RlcHRoKCBjb25zdCBpbiB2ZWM0IHYgKSB7XG5cdHJldHVybiBkb3QoIHYsIFVucGFja0ZhY3RvcnMgKTtcbn1cbmZsb2F0IHZpZXdaVG9PcnRob2dyYXBoaWNEZXB0aCggY29uc3QgaW4gZmxvYXQgdmlld1osIGNvbnN0IGluIGZsb2F0IG5lYXIsIGNvbnN0IGluIGZsb2F0IGZhciApIHtcblx0cmV0dXJuICggdmlld1ogKyBuZWFyICkgLyAoIG5lYXIgLSBmYXIgKTtcbn1cbmZsb2F0IG9ydGhvZ3JhcGhpY0RlcHRoVG9WaWV3WiggY29uc3QgaW4gZmxvYXQgbGluZWFyQ2xpcFosIGNvbnN0IGluIGZsb2F0IG5lYXIsIGNvbnN0IGluIGZsb2F0IGZhciApIHtcblx0cmV0dXJuIGxpbmVhckNsaXBaICogKCBuZWFyIC0gZmFyICkgLSBuZWFyO1xufVxuZmxvYXQgdmlld1pUb1BlcnNwZWN0aXZlRGVwdGgoIGNvbnN0IGluIGZsb2F0IHZpZXdaLCBjb25zdCBpbiBmbG9hdCBuZWFyLCBjb25zdCBpbiBmbG9hdCBmYXIgKSB7XG5cdHJldHVybiAoKCBuZWFyICsgdmlld1ogKSAqIGZhciApIC8gKCggZmFyIC0gbmVhciApICogdmlld1ogKTtcbn1cbmZsb2F0IHBlcnNwZWN0aXZlRGVwdGhUb1ZpZXdaKCBjb25zdCBpbiBmbG9hdCBpbnZDbGlwWiwgY29uc3QgaW4gZmxvYXQgbmVhciwgY29uc3QgaW4gZmxvYXQgZmFyICkge1xuXHRyZXR1cm4gKCBuZWFyICogZmFyICkgLyAoICggZmFyIC0gbmVhciApICogaW52Q2xpcFogLSBmYXIgKTtcbn0iLApwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50OiIjaWZkZWYgUFJFTVVMVElQTElFRF9BTFBIQVxuXHRnbF9GcmFnQ29sb3IucmdiICpceDNkIGdsX0ZyYWdDb2xvci5hO1xuI2VuZGlmIixwcm9qZWN0X3ZlcnRleDoidmVjNCBtdlBvc2l0aW9uIFx4M2QgbW9kZWxWaWV3TWF0cml4ICogdmVjNCggdHJhbnNmb3JtZWQsIDEuMCApO1xuZ2xfUG9zaXRpb24gXHgzZCBwcm9qZWN0aW9uTWF0cml4ICogbXZQb3NpdGlvbjsiLGRpdGhlcmluZ19mcmFnbWVudDoiI2lmIGRlZmluZWQoIERJVEhFUklORyApXG5cdGdsX0ZyYWdDb2xvci5yZ2IgXHgzZCBkaXRoZXJpbmcoIGdsX0ZyYWdDb2xvci5yZ2IgKTtcbiNlbmRpZiIsZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ6IiNpZiBkZWZpbmVkKCBESVRIRVJJTkcgKVxuXHR2ZWMzIGRpdGhlcmluZyggdmVjMyBjb2xvciApIHtcblx0XHRmbG9hdCBncmlkX3Bvc2l0aW9uIFx4M2QgcmFuZCggZ2xfRnJhZ0Nvb3JkLnh5ICk7XG5cdFx0dmVjMyBkaXRoZXJfc2hpZnRfUkdCIFx4M2QgdmVjMyggMC4yNSAvIDI1NS4wLCAtMC4yNSAvIDI1NS4wLCAwLjI1IC8gMjU1LjAgKTtcblx0XHRkaXRoZXJfc2hpZnRfUkdCIFx4M2QgbWl4KCAyLjAgKiBkaXRoZXJfc2hpZnRfUkdCLCAtMi4wICogZGl0aGVyX3NoaWZ0X1JHQiwgZ3JpZF9wb3NpdGlvbiApO1xuXHRcdHJldHVybiBjb2xvciArIGRpdGhlcl9zaGlmdF9SR0I7XG5cdH1cbiNlbmRpZiIsCnJvdWdobmVzc21hcF9mcmFnbWVudDoiZmxvYXQgcm91Z2huZXNzRmFjdG9yIFx4M2Qgcm91Z2huZXNzO1xuI2lmZGVmIFVTRV9ST1VHSE5FU1NNQVBcblx0dmVjNCB0ZXhlbFJvdWdobmVzcyBceDNkIHRleHR1cmUyRCggcm91Z2huZXNzTWFwLCB2VXYgKTtcblx0cm91Z2huZXNzRmFjdG9yICpceDNkIHRleGVsUm91Z2huZXNzLmc7XG4jZW5kaWYiLHJvdWdobmVzc21hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX1JPVUdITkVTU01BUFxuXHR1bmlmb3JtIHNhbXBsZXIyRCByb3VnaG5lc3NNYXA7XG4jZW5kaWYiLHNoYWRvd21hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX1NIQURPV01BUFxuXHQjaWYgTlVNX0RJUl9MSUdIVFMgXHgzZSAwXG5cdFx0dW5pZm9ybSBzYW1wbGVyMkQgZGlyZWN0aW9uYWxTaGFkb3dNYXBbIE5VTV9ESVJfTElHSFRTIF07XG5cdFx0dmFyeWluZyB2ZWM0IHZEaXJlY3Rpb25hbFNoYWRvd0Nvb3JkWyBOVU1fRElSX0xJR0hUUyBdO1xuXHQjZW5kaWZcblx0I2lmIE5VTV9TUE9UX0xJR0hUUyBceDNlIDBcblx0XHR1bmlmb3JtIHNhbXBsZXIyRCBzcG90U2hhZG93TWFwWyBOVU1fU1BPVF9MSUdIVFMgXTtcblx0XHR2YXJ5aW5nIHZlYzQgdlNwb3RTaGFkb3dDb29yZFsgTlVNX1NQT1RfTElHSFRTIF07XG5cdCNlbmRpZlxuXHQjaWYgTlVNX1BPSU5UX0xJR0hUUyBceDNlIDBcblx0XHR1bmlmb3JtIHNhbXBsZXIyRCBwb2ludFNoYWRvd01hcFsgTlVNX1BPSU5UX0xJR0hUUyBdO1xuXHRcdHZhcnlpbmcgdmVjNCB2UG9pbnRTaGFkb3dDb29yZFsgTlVNX1BPSU5UX0xJR0hUUyBdO1xuXHQjZW5kaWZcblx0ZmxvYXQgdGV4dHVyZTJEQ29tcGFyZSggc2FtcGxlcjJEIGRlcHRocywgdmVjMiB1diwgZmxvYXQgY29tcGFyZSApIHtcblx0XHRyZXR1cm4gc3RlcCggY29tcGFyZSwgdW5wYWNrUkdCQVRvRGVwdGgoIHRleHR1cmUyRCggZGVwdGhzLCB1diApICkgKTtcblx0fVxuXHRmbG9hdCB0ZXh0dXJlMkRTaGFkb3dMZXJwKCBzYW1wbGVyMkQgZGVwdGhzLCB2ZWMyIHNpemUsIHZlYzIgdXYsIGZsb2F0IGNvbXBhcmUgKSB7XG5cdFx0Y29uc3QgdmVjMiBvZmZzZXQgXHgzZCB2ZWMyKCAwLjAsIDEuMCApO1xuXHRcdHZlYzIgdGV4ZWxTaXplIFx4M2QgdmVjMiggMS4wICkgLyBzaXplO1xuXHRcdHZlYzIgY2VudHJvaWRVViBceDNkIGZsb29yKCB1diAqIHNpemUgKyAwLjUgKSAvIHNpemU7XG5cdFx0ZmxvYXQgbGIgXHgzZCB0ZXh0dXJlMkRDb21wYXJlKCBkZXB0aHMsIGNlbnRyb2lkVVYgKyB0ZXhlbFNpemUgKiBvZmZzZXQueHgsIGNvbXBhcmUgKTtcblx0XHRmbG9hdCBsdCBceDNkIHRleHR1cmUyRENvbXBhcmUoIGRlcHRocywgY2VudHJvaWRVViArIHRleGVsU2l6ZSAqIG9mZnNldC54eSwgY29tcGFyZSApO1xuXHRcdGZsb2F0IHJiIFx4M2QgdGV4dHVyZTJEQ29tcGFyZSggZGVwdGhzLCBjZW50cm9pZFVWICsgdGV4ZWxTaXplICogb2Zmc2V0Lnl4LCBjb21wYXJlICk7XG5cdFx0ZmxvYXQgcnQgXHgzZCB0ZXh0dXJlMkRDb21wYXJlKCBkZXB0aHMsIGNlbnRyb2lkVVYgKyB0ZXhlbFNpemUgKiBvZmZzZXQueXksIGNvbXBhcmUgKTtcblx0XHR2ZWMyIGYgXHgzZCBmcmFjdCggdXYgKiBzaXplICsgMC41ICk7XG5cdFx0ZmxvYXQgYSBceDNkIG1peCggbGIsIGx0LCBmLnkgKTtcblx0XHRmbG9hdCBiIFx4M2QgbWl4KCByYiwgcnQsIGYueSApO1xuXHRcdGZsb2F0IGMgXHgzZCBtaXgoIGEsIGIsIGYueCApO1xuXHRcdHJldHVybiBjO1xuXHR9XG5cdGZsb2F0IGdldFNoYWRvdyggc2FtcGxlcjJEIHNoYWRvd01hcCwgdmVjMiBzaGFkb3dNYXBTaXplLCBmbG9hdCBzaGFkb3dCaWFzLCBmbG9hdCBzaGFkb3dSYWRpdXMsIHZlYzQgc2hhZG93Q29vcmQgKSB7XG5cdFx0ZmxvYXQgc2hhZG93IFx4M2QgMS4wO1xuXHRcdHNoYWRvd0Nvb3JkLnh5eiAvXHgzZCBzaGFkb3dDb29yZC53O1xuXHRcdHNoYWRvd0Nvb3JkLnogK1x4M2Qgc2hhZG93Qmlhcztcblx0XHRidmVjNCBpbkZydXN0dW1WZWMgXHgzZCBidmVjNCAoIHNoYWRvd0Nvb3JkLnggXHgzZVx4M2QgMC4wLCBzaGFkb3dDb29yZC54IFx4M2NceDNkIDEuMCwgc2hhZG93Q29vcmQueSBceDNlXHgzZCAwLjAsIHNoYWRvd0Nvb3JkLnkgXHgzY1x4M2QgMS4wICk7XG5cdFx0Ym9vbCBpbkZydXN0dW0gXHgzZCBhbGwoIGluRnJ1c3R1bVZlYyApO1xuXHRcdGJ2ZWMyIGZydXN0dW1UZXN0VmVjIFx4M2QgYnZlYzIoIGluRnJ1c3R1bSwgc2hhZG93Q29vcmQueiBceDNjXHgzZCAxLjAgKTtcblx0XHRib29sIGZydXN0dW1UZXN0IFx4M2QgYWxsKCBmcnVzdHVtVGVzdFZlYyApO1xuXHRcdGlmICggZnJ1c3R1bVRlc3QgKSB7XG5cdFx0I2lmIGRlZmluZWQoIFNIQURPV01BUF9UWVBFX1BDRiApXG5cdFx0XHR2ZWMyIHRleGVsU2l6ZSBceDNkIHZlYzIoIDEuMCApIC8gc2hhZG93TWFwU2l6ZTtcblx0XHRcdGZsb2F0IGR4MCBceDNkIC0gdGV4ZWxTaXplLnggKiBzaGFkb3dSYWRpdXM7XG5cdFx0XHRmbG9hdCBkeTAgXHgzZCAtIHRleGVsU2l6ZS55ICogc2hhZG93UmFkaXVzO1xuXHRcdFx0ZmxvYXQgZHgxIFx4M2QgKyB0ZXhlbFNpemUueCAqIHNoYWRvd1JhZGl1cztcblx0XHRcdGZsb2F0IGR5MSBceDNkICsgdGV4ZWxTaXplLnkgKiBzaGFkb3dSYWRpdXM7XG5cdFx0XHRzaGFkb3cgXHgzZCAoXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDAsIGR5MCApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggMC4wLCBkeTAgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MSwgZHkwICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDAsIDAuMCApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5LCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgxLCAwLjAgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MCwgZHkxICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCAwLjAsIGR5MSApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgxLCBkeTEgKSwgc2hhZG93Q29vcmQueiApXG5cdFx0XHQpICogKCAxLjAgLyA5LjAgKTtcblx0XHQjZWxpZiBkZWZpbmVkKCBTSEFET1dNQVBfVFlQRV9QQ0ZfU09GVCApXG5cdFx0XHR2ZWMyIHRleGVsU2l6ZSBceDNkIHZlYzIoIDEuMCApIC8gc2hhZG93TWFwU2l6ZTtcblx0XHRcdGZsb2F0IGR4MCBceDNkIC0gdGV4ZWxTaXplLnggKiBzaGFkb3dSYWRpdXM7XG5cdFx0XHRmbG9hdCBkeTAgXHgzZCAtIHRleGVsU2l6ZS55ICogc2hhZG93UmFkaXVzO1xuXHRcdFx0ZmxvYXQgZHgxIFx4M2QgKyB0ZXhlbFNpemUueCAqIHNoYWRvd1JhZGl1cztcblx0XHRcdGZsb2F0IGR5MSBceDNkICsgdGV4ZWxTaXplLnkgKiBzaGFkb3dSYWRpdXM7XG5cdFx0XHRzaGFkb3cgXHgzZCAoXG5cdFx0XHRcdHRleHR1cmUyRFNoYWRvd0xlcnAoIHNoYWRvd01hcCwgc2hhZG93TWFwU2l6ZSwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDAsIGR5MCApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRTaGFkb3dMZXJwKCBzaGFkb3dNYXAsIHNoYWRvd01hcFNpemUsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggMC4wLCBkeTAgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEU2hhZG93TGVycCggc2hhZG93TWFwLCBzaGFkb3dNYXBTaXplLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MSwgZHkwICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRFNoYWRvd0xlcnAoIHNoYWRvd01hcCwgc2hhZG93TWFwU2l6ZSwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDAsIDAuMCApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRTaGFkb3dMZXJwKCBzaGFkb3dNYXAsIHNoYWRvd01hcFNpemUsIHNoYWRvd0Nvb3JkLnh5LCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRTaGFkb3dMZXJwKCBzaGFkb3dNYXAsIHNoYWRvd01hcFNpemUsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgxLCAwLjAgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEU2hhZG93TGVycCggc2hhZG93TWFwLCBzaGFkb3dNYXBTaXplLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MCwgZHkxICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRFNoYWRvd0xlcnAoIHNoYWRvd01hcCwgc2hhZG93TWFwU2l6ZSwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCAwLjAsIGR5MSApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRTaGFkb3dMZXJwKCBzaGFkb3dNYXAsIHNoYWRvd01hcFNpemUsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgxLCBkeTEgKSwgc2hhZG93Q29vcmQueiApXG5cdFx0XHQpICogKCAxLjAgLyA5LjAgKTtcblx0XHQjZWxzZVxuXHRcdFx0c2hhZG93IFx4M2QgdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSwgc2hhZG93Q29vcmQueiApO1xuXHRcdCNlbmRpZlxuXHRcdH1cblx0XHRyZXR1cm4gc2hhZG93O1xuXHR9XG5cdHZlYzIgY3ViZVRvVVYoIHZlYzMgdiwgZmxvYXQgdGV4ZWxTaXplWSApIHtcblx0XHR2ZWMzIGFic1YgXHgzZCBhYnMoIHYgKTtcblx0XHRmbG9hdCBzY2FsZVRvQ3ViZSBceDNkIDEuMCAvIG1heCggYWJzVi54LCBtYXgoIGFic1YueSwgYWJzVi56ICkgKTtcblx0XHRhYnNWICpceDNkIHNjYWxlVG9DdWJlO1xuXHRcdHYgKlx4M2Qgc2NhbGVUb0N1YmUgKiAoIDEuMCAtIDIuMCAqIHRleGVsU2l6ZVkgKTtcblx0XHR2ZWMyIHBsYW5hciBceDNkIHYueHk7XG5cdFx0ZmxvYXQgYWxtb3N0QVRleGVsIFx4M2QgMS41ICogdGV4ZWxTaXplWTtcblx0XHRmbG9hdCBhbG1vc3RPbmUgXHgzZCAxLjAgLSBhbG1vc3RBVGV4ZWw7XG5cdFx0aWYgKCBhYnNWLnogXHgzZVx4M2QgYWxtb3N0T25lICkge1xuXHRcdFx0aWYgKCB2LnogXHgzZSAwLjAgKVxuXHRcdFx0XHRwbGFuYXIueCBceDNkIDQuMCAtIHYueDtcblx0XHR9IGVsc2UgaWYgKCBhYnNWLnggXHgzZVx4M2QgYWxtb3N0T25lICkge1xuXHRcdFx0ZmxvYXQgc2lnblggXHgzZCBzaWduKCB2LnggKTtcblx0XHRcdHBsYW5hci54IFx4M2Qgdi56ICogc2lnblggKyAyLjAgKiBzaWduWDtcblx0XHR9IGVsc2UgaWYgKCBhYnNWLnkgXHgzZVx4M2QgYWxtb3N0T25lICkge1xuXHRcdFx0ZmxvYXQgc2lnblkgXHgzZCBzaWduKCB2LnkgKTtcblx0XHRcdHBsYW5hci54IFx4M2Qgdi54ICsgMi4wICogc2lnblkgKyAyLjA7XG5cdFx0XHRwbGFuYXIueSBceDNkIHYueiAqIHNpZ25ZIC0gMi4wO1xuXHRcdH1cblx0XHRyZXR1cm4gdmVjMiggMC4xMjUsIDAuMjUgKSAqIHBsYW5hciArIHZlYzIoIDAuMzc1LCAwLjc1ICk7XG5cdH1cblx0ZmxvYXQgZ2V0UG9pbnRTaGFkb3coIHNhbXBsZXIyRCBzaGFkb3dNYXAsIHZlYzIgc2hhZG93TWFwU2l6ZSwgZmxvYXQgc2hhZG93QmlhcywgZmxvYXQgc2hhZG93UmFkaXVzLCB2ZWM0IHNoYWRvd0Nvb3JkLCBmbG9hdCBzaGFkb3dDYW1lcmFOZWFyLCBmbG9hdCBzaGFkb3dDYW1lcmFGYXIgKSB7XG5cdFx0dmVjMiB0ZXhlbFNpemUgXHgzZCB2ZWMyKCAxLjAgKSAvICggc2hhZG93TWFwU2l6ZSAqIHZlYzIoIDQuMCwgMi4wICkgKTtcblx0XHR2ZWMzIGxpZ2h0VG9Qb3NpdGlvbiBceDNkIHNoYWRvd0Nvb3JkLnh5ejtcblx0XHRmbG9hdCBkcCBceDNkICggbGVuZ3RoKCBsaWdodFRvUG9zaXRpb24gKSAtIHNoYWRvd0NhbWVyYU5lYXIgKSAvICggc2hhZG93Q2FtZXJhRmFyIC0gc2hhZG93Q2FtZXJhTmVhciApO1x0XHRkcCArXHgzZCBzaGFkb3dCaWFzO1xuXHRcdHZlYzMgYmQzRCBceDNkIG5vcm1hbGl6ZSggbGlnaHRUb1Bvc2l0aW9uICk7XG5cdFx0I2lmIGRlZmluZWQoIFNIQURPV01BUF9UWVBFX1BDRiApIHx8IGRlZmluZWQoIFNIQURPV01BUF9UWVBFX1BDRl9TT0ZUIClcblx0XHRcdHZlYzIgb2Zmc2V0IFx4M2QgdmVjMiggLSAxLCAxICkgKiBzaGFkb3dSYWRpdXMgKiB0ZXhlbFNpemUueTtcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueHl5LCB0ZXhlbFNpemUueSApLCBkcCApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC55eXksIHRleGVsU2l6ZS55ICksIGRwICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnh5eCwgdGV4ZWxTaXplLnkgKSwgZHAgKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueXl4LCB0ZXhlbFNpemUueSApLCBkcCApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCwgdGV4ZWxTaXplLnkgKSwgZHAgKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueHh5LCB0ZXhlbFNpemUueSApLCBkcCApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC55eHksIHRleGVsU2l6ZS55ICksIGRwICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnh4eCwgdGV4ZWxTaXplLnkgKSwgZHAgKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueXh4LCB0ZXhlbFNpemUueSApLCBkcCApXG5cdFx0XHQpICogKCAxLjAgLyA5LjAgKTtcblx0XHQjZWxzZVxuXHRcdFx0cmV0dXJuIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QsIHRleGVsU2l6ZS55ICksIGRwICk7XG5cdFx0I2VuZGlmXG5cdH1cbiNlbmRpZiIsCnNoYWRvd21hcF9wYXJzX3ZlcnRleDoiI2lmZGVmIFVTRV9TSEFET1dNQVBcblx0I2lmIE5VTV9ESVJfTElHSFRTIFx4M2UgMFxuXHRcdHVuaWZvcm0gbWF0NCBkaXJlY3Rpb25hbFNoYWRvd01hdHJpeFsgTlVNX0RJUl9MSUdIVFMgXTtcblx0XHR2YXJ5aW5nIHZlYzQgdkRpcmVjdGlvbmFsU2hhZG93Q29vcmRbIE5VTV9ESVJfTElHSFRTIF07XG5cdCNlbmRpZlxuXHQjaWYgTlVNX1NQT1RfTElHSFRTIFx4M2UgMFxuXHRcdHVuaWZvcm0gbWF0NCBzcG90U2hhZG93TWF0cml4WyBOVU1fU1BPVF9MSUdIVFMgXTtcblx0XHR2YXJ5aW5nIHZlYzQgdlNwb3RTaGFkb3dDb29yZFsgTlVNX1NQT1RfTElHSFRTIF07XG5cdCNlbmRpZlxuXHQjaWYgTlVNX1BPSU5UX0xJR0hUUyBceDNlIDBcblx0XHR1bmlmb3JtIG1hdDQgcG9pbnRTaGFkb3dNYXRyaXhbIE5VTV9QT0lOVF9MSUdIVFMgXTtcblx0XHR2YXJ5aW5nIHZlYzQgdlBvaW50U2hhZG93Q29vcmRbIE5VTV9QT0lOVF9MSUdIVFMgXTtcblx0I2VuZGlmXG4jZW5kaWYiLApzaGFkb3dtYXBfdmVydGV4OiIjaWZkZWYgVVNFX1NIQURPV01BUFxuXHQjaWYgTlVNX0RJUl9MSUdIVFMgXHgzZSAwXG5cdCNwcmFnbWEgdW5yb2xsX2xvb3Bcblx0Zm9yICggaW50IGkgXHgzZCAwOyBpIFx4M2MgTlVNX0RJUl9MSUdIVFM7IGkgKysgKSB7XG5cdFx0dkRpcmVjdGlvbmFsU2hhZG93Q29vcmRbIGkgXSBceDNkIGRpcmVjdGlvbmFsU2hhZG93TWF0cml4WyBpIF0gKiB3b3JsZFBvc2l0aW9uO1xuXHR9XG5cdCNlbmRpZlxuXHQjaWYgTlVNX1NQT1RfTElHSFRTIFx4M2UgMFxuXHQjcHJhZ21hIHVucm9sbF9sb29wXG5cdGZvciAoIGludCBpIFx4M2QgMDsgaSBceDNjIE5VTV9TUE9UX0xJR0hUUzsgaSArKyApIHtcblx0XHR2U3BvdFNoYWRvd0Nvb3JkWyBpIF0gXHgzZCBzcG90U2hhZG93TWF0cml4WyBpIF0gKiB3b3JsZFBvc2l0aW9uO1xuXHR9XG5cdCNlbmRpZlxuXHQjaWYgTlVNX1BPSU5UX0xJR0hUUyBceDNlIDBcblx0I3ByYWdtYSB1bnJvbGxfbG9vcFxuXHRmb3IgKCBpbnQgaSBceDNkIDA7IGkgXHgzYyBOVU1fUE9JTlRfTElHSFRTOyBpICsrICkge1xuXHRcdHZQb2ludFNoYWRvd0Nvb3JkWyBpIF0gXHgzZCBwb2ludFNoYWRvd01hdHJpeFsgaSBdICogd29ybGRQb3NpdGlvbjtcblx0fVxuXHQjZW5kaWZcbiNlbmRpZiIsCnNoYWRvd21hc2tfcGFyc19mcmFnbWVudDoiZmxvYXQgZ2V0U2hhZG93TWFzaygpIHtcblx0ZmxvYXQgc2hhZG93IFx4M2QgMS4wO1xuXHQjaWZkZWYgVVNFX1NIQURPV01BUFxuXHQjaWYgTlVNX0RJUl9MSUdIVFMgXHgzZSAwXG5cdERpcmVjdGlvbmFsTGlnaHQgZGlyZWN0aW9uYWxMaWdodDtcblx0I3ByYWdtYSB1bnJvbGxfbG9vcFxuXHRmb3IgKCBpbnQgaSBceDNkIDA7IGkgXHgzYyBOVU1fRElSX0xJR0hUUzsgaSArKyApIHtcblx0XHRkaXJlY3Rpb25hbExpZ2h0IFx4M2QgZGlyZWN0aW9uYWxMaWdodHNbIGkgXTtcblx0XHRzaGFkb3cgKlx4M2QgYm9vbCggZGlyZWN0aW9uYWxMaWdodC5zaGFkb3cgKSA/IGdldFNoYWRvdyggZGlyZWN0aW9uYWxTaGFkb3dNYXBbIGkgXSwgZGlyZWN0aW9uYWxMaWdodC5zaGFkb3dNYXBTaXplLCBkaXJlY3Rpb25hbExpZ2h0LnNoYWRvd0JpYXMsIGRpcmVjdGlvbmFsTGlnaHQuc2hhZG93UmFkaXVzLCB2RGlyZWN0aW9uYWxTaGFkb3dDb29yZFsgaSBdICkgOiAxLjA7XG5cdH1cblx0I2VuZGlmXG5cdCNpZiBOVU1fU1BPVF9MSUdIVFMgXHgzZSAwXG5cdFNwb3RMaWdodCBzcG90TGlnaHQ7XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3Bcblx0Zm9yICggaW50IGkgXHgzZCAwOyBpIFx4M2MgTlVNX1NQT1RfTElHSFRTOyBpICsrICkge1xuXHRcdHNwb3RMaWdodCBceDNkIHNwb3RMaWdodHNbIGkgXTtcblx0XHRzaGFkb3cgKlx4M2QgYm9vbCggc3BvdExpZ2h0LnNoYWRvdyApID8gZ2V0U2hhZG93KCBzcG90U2hhZG93TWFwWyBpIF0sIHNwb3RMaWdodC5zaGFkb3dNYXBTaXplLCBzcG90TGlnaHQuc2hhZG93Qmlhcywgc3BvdExpZ2h0LnNoYWRvd1JhZGl1cywgdlNwb3RTaGFkb3dDb29yZFsgaSBdICkgOiAxLjA7XG5cdH1cblx0I2VuZGlmXG5cdCNpZiBOVU1fUE9JTlRfTElHSFRTIFx4M2UgMFxuXHRQb2ludExpZ2h0IHBvaW50TGlnaHQ7XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3Bcblx0Zm9yICggaW50IGkgXHgzZCAwOyBpIFx4M2MgTlVNX1BPSU5UX0xJR0hUUzsgaSArKyApIHtcblx0XHRwb2ludExpZ2h0IFx4M2QgcG9pbnRMaWdodHNbIGkgXTtcblx0XHRzaGFkb3cgKlx4M2QgYm9vbCggcG9pbnRMaWdodC5zaGFkb3cgKSA/IGdldFBvaW50U2hhZG93KCBwb2ludFNoYWRvd01hcFsgaSBdLCBwb2ludExpZ2h0LnNoYWRvd01hcFNpemUsIHBvaW50TGlnaHQuc2hhZG93QmlhcywgcG9pbnRMaWdodC5zaGFkb3dSYWRpdXMsIHZQb2ludFNoYWRvd0Nvb3JkWyBpIF0sIHBvaW50TGlnaHQuc2hhZG93Q2FtZXJhTmVhciwgcG9pbnRMaWdodC5zaGFkb3dDYW1lcmFGYXIgKSA6IDEuMDtcblx0fVxuXHQjZW5kaWZcblx0I2VuZGlmXG5cdHJldHVybiBzaGFkb3c7XG59IiwKc2tpbmJhc2VfdmVydGV4OiIjaWZkZWYgVVNFX1NLSU5OSU5HXG5cdG1hdDQgYm9uZU1hdFggXHgzZCBnZXRCb25lTWF0cml4KCBza2luSW5kZXgueCApO1xuXHRtYXQ0IGJvbmVNYXRZIFx4M2QgZ2V0Qm9uZU1hdHJpeCggc2tpbkluZGV4LnkgKTtcblx0bWF0NCBib25lTWF0WiBceDNkIGdldEJvbmVNYXRyaXgoIHNraW5JbmRleC56ICk7XG5cdG1hdDQgYm9uZU1hdFcgXHgzZCBnZXRCb25lTWF0cml4KCBza2luSW5kZXgudyApO1xuI2VuZGlmIixza2lubmluZ19wYXJzX3ZlcnRleDoiI2lmZGVmIFVTRV9TS0lOTklOR1xuXHR1bmlmb3JtIG1hdDQgYmluZE1hdHJpeDtcblx0dW5pZm9ybSBtYXQ0IGJpbmRNYXRyaXhJbnZlcnNlO1xuXHQjaWZkZWYgQk9ORV9URVhUVVJFXG5cdFx0dW5pZm9ybSBzYW1wbGVyMkQgYm9uZVRleHR1cmU7XG5cdFx0dW5pZm9ybSBpbnQgYm9uZVRleHR1cmVTaXplO1xuXHRcdG1hdDQgZ2V0Qm9uZU1hdHJpeCggY29uc3QgaW4gZmxvYXQgaSApIHtcblx0XHRcdGZsb2F0IGogXHgzZCBpICogNC4wO1xuXHRcdFx0ZmxvYXQgeCBceDNkIG1vZCggaiwgZmxvYXQoIGJvbmVUZXh0dXJlU2l6ZSApICk7XG5cdFx0XHRmbG9hdCB5IFx4M2QgZmxvb3IoIGogLyBmbG9hdCggYm9uZVRleHR1cmVTaXplICkgKTtcblx0XHRcdGZsb2F0IGR4IFx4M2QgMS4wIC8gZmxvYXQoIGJvbmVUZXh0dXJlU2l6ZSApO1xuXHRcdFx0ZmxvYXQgZHkgXHgzZCAxLjAgLyBmbG9hdCggYm9uZVRleHR1cmVTaXplICk7XG5cdFx0XHR5IFx4M2QgZHkgKiAoIHkgKyAwLjUgKTtcblx0XHRcdHZlYzQgdjEgXHgzZCB0ZXh0dXJlMkQoIGJvbmVUZXh0dXJlLCB2ZWMyKCBkeCAqICggeCArIDAuNSApLCB5ICkgKTtcblx0XHRcdHZlYzQgdjIgXHgzZCB0ZXh0dXJlMkQoIGJvbmVUZXh0dXJlLCB2ZWMyKCBkeCAqICggeCArIDEuNSApLCB5ICkgKTtcblx0XHRcdHZlYzQgdjMgXHgzZCB0ZXh0dXJlMkQoIGJvbmVUZXh0dXJlLCB2ZWMyKCBkeCAqICggeCArIDIuNSApLCB5ICkgKTtcblx0XHRcdHZlYzQgdjQgXHgzZCB0ZXh0dXJlMkQoIGJvbmVUZXh0dXJlLCB2ZWMyKCBkeCAqICggeCArIDMuNSApLCB5ICkgKTtcblx0XHRcdG1hdDQgYm9uZSBceDNkIG1hdDQoIHYxLCB2MiwgdjMsIHY0ICk7XG5cdFx0XHRyZXR1cm4gYm9uZTtcblx0XHR9XG5cdCNlbHNlXG5cdFx0dW5pZm9ybSBtYXQ0IGJvbmVNYXRyaWNlc1sgTUFYX0JPTkVTIF07XG5cdFx0bWF0NCBnZXRCb25lTWF0cml4KCBjb25zdCBpbiBmbG9hdCBpICkge1xuXHRcdFx0bWF0NCBib25lIFx4M2QgYm9uZU1hdHJpY2VzWyBpbnQoaSkgXTtcblx0XHRcdHJldHVybiBib25lO1xuXHRcdH1cblx0I2VuZGlmXG4jZW5kaWYiLApza2lubmluZ192ZXJ0ZXg6IiNpZmRlZiBVU0VfU0tJTk5JTkdcblx0dmVjNCBza2luVmVydGV4IFx4M2QgYmluZE1hdHJpeCAqIHZlYzQoIHRyYW5zZm9ybWVkLCAxLjAgKTtcblx0dmVjNCBza2lubmVkIFx4M2QgdmVjNCggMC4wICk7XG5cdHNraW5uZWQgK1x4M2QgYm9uZU1hdFggKiBza2luVmVydGV4ICogc2tpbldlaWdodC54O1xuXHRza2lubmVkICtceDNkIGJvbmVNYXRZICogc2tpblZlcnRleCAqIHNraW5XZWlnaHQueTtcblx0c2tpbm5lZCArXHgzZCBib25lTWF0WiAqIHNraW5WZXJ0ZXggKiBza2luV2VpZ2h0Lno7XG5cdHNraW5uZWQgK1x4M2QgYm9uZU1hdFcgKiBza2luVmVydGV4ICogc2tpbldlaWdodC53O1xuXHR0cmFuc2Zvcm1lZCBceDNkICggYmluZE1hdHJpeEludmVyc2UgKiBza2lubmVkICkueHl6O1xuI2VuZGlmIixza2lubm9ybWFsX3ZlcnRleDoiI2lmZGVmIFVTRV9TS0lOTklOR1xuXHRtYXQ0IHNraW5NYXRyaXggXHgzZCBtYXQ0KCAwLjAgKTtcblx0c2tpbk1hdHJpeCArXHgzZCBza2luV2VpZ2h0LnggKiBib25lTWF0WDtcblx0c2tpbk1hdHJpeCArXHgzZCBza2luV2VpZ2h0LnkgKiBib25lTWF0WTtcblx0c2tpbk1hdHJpeCArXHgzZCBza2luV2VpZ2h0LnogKiBib25lTWF0Wjtcblx0c2tpbk1hdHJpeCArXHgzZCBza2luV2VpZ2h0LncgKiBib25lTWF0Vztcblx0c2tpbk1hdHJpeCAgXHgzZCBiaW5kTWF0cml4SW52ZXJzZSAqIHNraW5NYXRyaXggKiBiaW5kTWF0cml4O1xuXHRvYmplY3ROb3JtYWwgXHgzZCB2ZWM0KCBza2luTWF0cml4ICogdmVjNCggb2JqZWN0Tm9ybWFsLCAwLjAgKSApLnh5ejtcblx0I2lmZGVmIFVTRV9UQU5HRU5UXG5cdFx0b2JqZWN0VGFuZ2VudCBceDNkIHZlYzQoIHNraW5NYXRyaXggKiB2ZWM0KCBvYmplY3RUYW5nZW50LCAwLjAgKSApLnh5ejtcblx0I2VuZGlmXG4jZW5kaWYiLApzcGVjdWxhcm1hcF9mcmFnbWVudDoiZmxvYXQgc3BlY3VsYXJTdHJlbmd0aDtcbiNpZmRlZiBVU0VfU1BFQ1VMQVJNQVBcblx0dmVjNCB0ZXhlbFNwZWN1bGFyIFx4M2QgdGV4dHVyZTJEKCBzcGVjdWxhck1hcCwgdlV2ICk7XG5cdHNwZWN1bGFyU3RyZW5ndGggXHgzZCB0ZXhlbFNwZWN1bGFyLnI7XG4jZWxzZVxuXHRzcGVjdWxhclN0cmVuZ3RoIFx4M2QgMS4wO1xuI2VuZGlmIixzcGVjdWxhcm1hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX1NQRUNVTEFSTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIHNwZWN1bGFyTWFwO1xuI2VuZGlmIix0b25lbWFwcGluZ19mcmFnbWVudDoiI2lmIGRlZmluZWQoIFRPTkVfTUFQUElORyApXG5cdGdsX0ZyYWdDb2xvci5yZ2IgXHgzZCB0b25lTWFwcGluZyggZ2xfRnJhZ0NvbG9yLnJnYiApO1xuI2VuZGlmIix0b25lbWFwcGluZ19wYXJzX2ZyYWdtZW50OiIjaWZuZGVmIHNhdHVyYXRlXG5cdCNkZWZpbmUgc2F0dXJhdGUoYSkgY2xhbXAoIGEsIDAuMCwgMS4wIClcbiNlbmRpZlxudW5pZm9ybSBmbG9hdCB0b25lTWFwcGluZ0V4cG9zdXJlO1xudW5pZm9ybSBmbG9hdCB0b25lTWFwcGluZ1doaXRlUG9pbnQ7XG52ZWMzIExpbmVhclRvbmVNYXBwaW5nKCB2ZWMzIGNvbG9yICkge1xuXHRyZXR1cm4gdG9uZU1hcHBpbmdFeHBvc3VyZSAqIGNvbG9yO1xufVxudmVjMyBSZWluaGFyZFRvbmVNYXBwaW5nKCB2ZWMzIGNvbG9yICkge1xuXHRjb2xvciAqXHgzZCB0b25lTWFwcGluZ0V4cG9zdXJlO1xuXHRyZXR1cm4gc2F0dXJhdGUoIGNvbG9yIC8gKCB2ZWMzKCAxLjAgKSArIGNvbG9yICkgKTtcbn1cbiNkZWZpbmUgVW5jaGFydGVkMkhlbHBlciggeCApIG1heCggKCAoIHggKiAoIDAuMTUgKiB4ICsgMC4xMCAqIDAuNTAgKSArIDAuMjAgKiAwLjAyICkgLyAoIHggKiAoIDAuMTUgKiB4ICsgMC41MCApICsgMC4yMCAqIDAuMzAgKSApIC0gMC4wMiAvIDAuMzAsIHZlYzMoIDAuMCApIClcbnZlYzMgVW5jaGFydGVkMlRvbmVNYXBwaW5nKCB2ZWMzIGNvbG9yICkge1xuXHRjb2xvciAqXHgzZCB0b25lTWFwcGluZ0V4cG9zdXJlO1xuXHRyZXR1cm4gc2F0dXJhdGUoIFVuY2hhcnRlZDJIZWxwZXIoIGNvbG9yICkgLyBVbmNoYXJ0ZWQySGVscGVyKCB2ZWMzKCB0b25lTWFwcGluZ1doaXRlUG9pbnQgKSApICk7XG59XG52ZWMzIE9wdGltaXplZENpbmVvblRvbmVNYXBwaW5nKCB2ZWMzIGNvbG9yICkge1xuXHRjb2xvciAqXHgzZCB0b25lTWFwcGluZ0V4cG9zdXJlO1xuXHRjb2xvciBceDNkIG1heCggdmVjMyggMC4wICksIGNvbG9yIC0gMC4wMDQgKTtcblx0cmV0dXJuIHBvdyggKCBjb2xvciAqICggNi4yICogY29sb3IgKyAwLjUgKSApIC8gKCBjb2xvciAqICggNi4yICogY29sb3IgKyAxLjcgKSArIDAuMDYgKSwgdmVjMyggMi4yICkgKTtcbn1cbnZlYzMgQUNFU0ZpbG1pY1RvbmVNYXBwaW5nKCB2ZWMzIGNvbG9yICkge1xuXHRjb2xvciAqXHgzZCB0b25lTWFwcGluZ0V4cG9zdXJlO1xuXHRyZXR1cm4gc2F0dXJhdGUoICggY29sb3IgKiAoIDIuNTEgKiBjb2xvciArIDAuMDMgKSApIC8gKCBjb2xvciAqICggMi40MyAqIGNvbG9yICsgMC41OSApICsgMC4xNCApICk7XG59IiwKdXZfcGFyc19mcmFnbWVudDoiI2lmIGRlZmluZWQoIFVTRV9NQVAgKSB8fCBkZWZpbmVkKCBVU0VfQlVNUE1BUCApIHx8IGRlZmluZWQoIFVTRV9OT1JNQUxNQVAgKSB8fCBkZWZpbmVkKCBVU0VfU1BFQ1VMQVJNQVAgKSB8fCBkZWZpbmVkKCBVU0VfQUxQSEFNQVAgKSB8fCBkZWZpbmVkKCBVU0VfRU1JU1NJVkVNQVAgKSB8fCBkZWZpbmVkKCBVU0VfUk9VR0hORVNTTUFQICkgfHwgZGVmaW5lZCggVVNFX01FVEFMTkVTU01BUCApXG5cdHZhcnlpbmcgdmVjMiB2VXY7XG4jZW5kaWYiLHV2X3BhcnNfdmVydGV4OiIjaWYgZGVmaW5lZCggVVNFX01BUCApIHx8IGRlZmluZWQoIFVTRV9CVU1QTUFQICkgfHwgZGVmaW5lZCggVVNFX05PUk1BTE1BUCApIHx8IGRlZmluZWQoIFVTRV9TUEVDVUxBUk1BUCApIHx8IGRlZmluZWQoIFVTRV9BTFBIQU1BUCApIHx8IGRlZmluZWQoIFVTRV9FTUlTU0lWRU1BUCApIHx8IGRlZmluZWQoIFVTRV9ST1VHSE5FU1NNQVAgKSB8fCBkZWZpbmVkKCBVU0VfTUVUQUxORVNTTUFQIClcblx0dmFyeWluZyB2ZWMyIHZVdjtcblx0dW5pZm9ybSBtYXQzIHV2VHJhbnNmb3JtO1xuI2VuZGlmIiwKdXZfdmVydGV4OiIjaWYgZGVmaW5lZCggVVNFX01BUCApIHx8IGRlZmluZWQoIFVTRV9CVU1QTUFQICkgfHwgZGVmaW5lZCggVVNFX05PUk1BTE1BUCApIHx8IGRlZmluZWQoIFVTRV9TUEVDVUxBUk1BUCApIHx8IGRlZmluZWQoIFVTRV9BTFBIQU1BUCApIHx8IGRlZmluZWQoIFVTRV9FTUlTU0lWRU1BUCApIHx8IGRlZmluZWQoIFVTRV9ST1VHSE5FU1NNQVAgKSB8fCBkZWZpbmVkKCBVU0VfTUVUQUxORVNTTUFQIClcblx0dlV2IFx4M2QgKCB1dlRyYW5zZm9ybSAqIHZlYzMoIHV2LCAxICkgKS54eTtcbiNlbmRpZiIsdXYyX3BhcnNfZnJhZ21lbnQ6IiNpZiBkZWZpbmVkKCBVU0VfTElHSFRNQVAgKSB8fCBkZWZpbmVkKCBVU0VfQU9NQVAgKVxuXHR2YXJ5aW5nIHZlYzIgdlV2MjtcbiNlbmRpZiIsdXYyX3BhcnNfdmVydGV4OiIjaWYgZGVmaW5lZCggVVNFX0xJR0hUTUFQICkgfHwgZGVmaW5lZCggVVNFX0FPTUFQIClcblx0YXR0cmlidXRlIHZlYzIgdXYyO1xuXHR2YXJ5aW5nIHZlYzIgdlV2MjtcbiNlbmRpZiIsCnV2Ml92ZXJ0ZXg6IiNpZiBkZWZpbmVkKCBVU0VfTElHSFRNQVAgKSB8fCBkZWZpbmVkKCBVU0VfQU9NQVAgKVxuXHR2VXYyIFx4M2QgdXYyO1xuI2VuZGlmIix3b3JsZHBvc192ZXJ0ZXg6IiNpZiBkZWZpbmVkKCBVU0VfRU5WTUFQICkgfHwgZGVmaW5lZCggRElTVEFOQ0UgKSB8fCBkZWZpbmVkICggVVNFX1NIQURPV01BUCApXG5cdHZlYzQgd29ybGRQb3NpdGlvbiBceDNkIG1vZGVsTWF0cml4ICogdmVjNCggdHJhbnNmb3JtZWQsIDEuMCApO1xuI2VuZGlmIixiYWNrZ3JvdW5kX2ZyYWc6InVuaWZvcm0gc2FtcGxlcjJEIHQyRDtcbnZhcnlpbmcgdmVjMiB2VXY7XG52b2lkIG1haW4oKSB7XG5cdHZlYzQgdGV4Q29sb3IgXHgzZCB0ZXh0dXJlMkQoIHQyRCwgdlV2ICk7XG5cdGdsX0ZyYWdDb2xvciBceDNkIG1hcFRleGVsVG9MaW5lYXIoIHRleENvbG9yICk7XG5cdCNpbmNsdWRlIFx4M2N0b25lbWFwcGluZ19mcmFnbWVudFx4M2Vcblx0I2luY2x1ZGUgXHgzY2VuY29kaW5nc19mcmFnbWVudFx4M2Vcbn0iLApiYWNrZ3JvdW5kX3ZlcnQ6InZhcnlpbmcgdmVjMiB2VXY7XG51bmlmb3JtIG1hdDMgdXZUcmFuc2Zvcm07XG52b2lkIG1haW4oKSB7XG5cdHZVdiBceDNkICggdXZUcmFuc2Zvcm0gKiB2ZWMzKCB1diwgMSApICkueHk7XG5cdGdsX1Bvc2l0aW9uIFx4M2QgdmVjNCggcG9zaXRpb24ueHksIDEuMCwgMS4wICk7XG59IixjdWJlX2ZyYWc6InVuaWZvcm0gc2FtcGxlckN1YmUgdEN1YmU7XG51bmlmb3JtIGZsb2F0IHRGbGlwO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xudmFyeWluZyB2ZWMzIHZXb3JsZERpcmVjdGlvbjtcbnZvaWQgbWFpbigpIHtcblx0dmVjNCB0ZXhDb2xvciBceDNkIHRleHR1cmVDdWJlKCB0Q3ViZSwgdmVjMyggdEZsaXAgKiB2V29ybGREaXJlY3Rpb24ueCwgdldvcmxkRGlyZWN0aW9uLnl6ICkgKTtcblx0Z2xfRnJhZ0NvbG9yIFx4M2QgbWFwVGV4ZWxUb0xpbmVhciggdGV4Q29sb3IgKTtcblx0Z2xfRnJhZ0NvbG9yLmEgKlx4M2Qgb3BhY2l0eTtcblx0I2luY2x1ZGUgXHgzY3RvbmVtYXBwaW5nX2ZyYWdtZW50XHgzZVxuXHQjaW5jbHVkZSBceDNjZW5jb2RpbmdzX2ZyYWdtZW50XHgzZVxufSIsCmN1YmVfdmVydDoidmFyeWluZyB2ZWMzIHZXb3JsZERpcmVjdGlvbjtcbiNpbmNsdWRlIFx4M2Njb21tb25ceDNlXG52b2lkIG1haW4oKSB7XG5cdHZXb3JsZERpcmVjdGlvbiBceDNkIHRyYW5zZm9ybURpcmVjdGlvbiggcG9zaXRpb24sIG1vZGVsTWF0cml4ICk7XG5cdCNpbmNsdWRlIFx4M2NiZWdpbl92ZXJ0ZXhceDNlXG5cdCNpbmNsdWRlIFx4M2Nwcm9qZWN0X3ZlcnRleFx4M2Vcblx0Z2xfUG9zaXRpb24ueiBceDNkIGdsX1Bvc2l0aW9uLnc7XG59IixkZXB0aF9mcmFnOiIjaWYgREVQVEhfUEFDS0lORyBceDNkXHgzZCAzMjAwXG5cdHVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcbiNlbmRpZlxuI2luY2x1ZGUgXHgzY2NvbW1vblx4M2VcbiNpbmNsdWRlIFx4M2NwYWNraW5nXHgzZVxuI2luY2x1ZGUgXHgzY3V2X3BhcnNfZnJhZ21lbnRceDNlXG4jaW5jbHVkZSBceDNjbWFwX3BhcnNfZnJhZ21lbnRceDNlXG4jaW5jbHVkZSBceDNjYWxwaGFtYXBfcGFyc19mcmFnbWVudFx4M2VcbiNpbmNsdWRlIFx4M2Nsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50XHgzZVxuI2luY2x1ZGUgXHgzY2NsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50XHgzZVxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSBceDNjY2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50XHgzZVxuXHR2ZWM0IGRpZmZ1c2VDb2xvciBceDNkIHZlYzQoIDEuMCApO1xuXHQjaWYgREVQVEhfUEFDS0lORyBceDNkXHgzZCAzMjAwXG5cdFx0ZGlmZnVzZUNvbG9yLmEgXHgzZCBvcGFjaXR5O1xuXHQjZW5kaWZcblx0I2luY2x1ZGUgXHgzY21hcF9mcmFnbWVudFx4M2Vcblx0I2luY2x1ZGUgXHgzY2FscGhhbWFwX2ZyYWdtZW50XHgzZVxuXHQjaW5jbHVkZSBceDNjYWxwaGF0ZXN0X2ZyYWdtZW50XHgzZVxuXHQjaW5jbHVkZSBceDNjbG9nZGVwdGhidWZfZnJhZ21lbnRceDNlXG5cdCNpZiBERVBUSF9QQUNLSU5HIFx4M2RceDNkIDMyMDBcblx0XHRnbF9GcmFnQ29sb3IgXHgzZCB2ZWM0KCB2ZWMzKCAxLjAgLSBnbF9GcmFnQ29vcmQueiApLCBvcGFjaXR5ICk7XG5cdCNlbGlmIERFUFRIX1BBQ0tJTkcgXHgzZFx4M2QgMzIwMVxuXHRcdGdsX0ZyYWdDb2xvciBceDNkIHBhY2tEZXB0aFRvUkdCQSggZ2xfRnJhZ0Nvb3JkLnogKTtcblx0I2VuZGlmXG59IiwKZGVwdGhfdmVydDoiI2luY2x1ZGUgXHgzY2NvbW1vblx4M2VcbiNpbmNsdWRlIFx4M2N1dl9wYXJzX3ZlcnRleFx4M2VcbiNpbmNsdWRlIFx4M2NkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXhceDNlXG4jaW5jbHVkZSBceDNjbW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXhceDNlXG4jaW5jbHVkZSBceDNjc2tpbm5pbmdfcGFyc192ZXJ0ZXhceDNlXG4jaW5jbHVkZSBceDNjbG9nZGVwdGhidWZfcGFyc192ZXJ0ZXhceDNlXG4jaW5jbHVkZSBceDNjY2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4XHgzZVxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSBceDNjdXZfdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjc2tpbmJhc2VfdmVydGV4XHgzZVxuXHQjaWZkZWYgVVNFX0RJU1BMQUNFTUVOVE1BUFxuXHRcdCNpbmNsdWRlIFx4M2NiZWdpbm5vcm1hbF92ZXJ0ZXhceDNlXG5cdFx0I2luY2x1ZGUgXHgzY21vcnBobm9ybWFsX3ZlcnRleFx4M2Vcblx0XHQjaW5jbHVkZSBceDNjc2tpbm5vcm1hbF92ZXJ0ZXhceDNlXG5cdCNlbmRpZlxuXHQjaW5jbHVkZSBceDNjYmVnaW5fdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjbW9ycGh0YXJnZXRfdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjc2tpbm5pbmdfdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjZGlzcGxhY2VtZW50bWFwX3ZlcnRleFx4M2Vcblx0I2luY2x1ZGUgXHgzY3Byb2plY3RfdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjbG9nZGVwdGhidWZfdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjY2xpcHBpbmdfcGxhbmVzX3ZlcnRleFx4M2Vcbn0iLApkaXN0YW5jZVJHQkFfZnJhZzoiI2RlZmluZSBESVNUQU5DRVxudW5pZm9ybSB2ZWMzIHJlZmVyZW5jZVBvc2l0aW9uO1xudW5pZm9ybSBmbG9hdCBuZWFyRGlzdGFuY2U7XG51bmlmb3JtIGZsb2F0IGZhckRpc3RhbmNlO1xudmFyeWluZyB2ZWMzIHZXb3JsZFBvc2l0aW9uO1xuI2luY2x1ZGUgXHgzY2NvbW1vblx4M2VcbiNpbmNsdWRlIFx4M2NwYWNraW5nXHgzZVxuI2luY2x1ZGUgXHgzY3V2X3BhcnNfZnJhZ21lbnRceDNlXG4jaW5jbHVkZSBceDNjbWFwX3BhcnNfZnJhZ21lbnRceDNlXG4jaW5jbHVkZSBceDNjYWxwaGFtYXBfcGFyc19mcmFnbWVudFx4M2VcbiNpbmNsdWRlIFx4M2NjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudFx4M2VcbnZvaWQgbWFpbiAoKSB7XG5cdCNpbmNsdWRlIFx4M2NjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnRceDNlXG5cdHZlYzQgZGlmZnVzZUNvbG9yIFx4M2QgdmVjNCggMS4wICk7XG5cdCNpbmNsdWRlIFx4M2NtYXBfZnJhZ21lbnRceDNlXG5cdCNpbmNsdWRlIFx4M2NhbHBoYW1hcF9mcmFnbWVudFx4M2Vcblx0I2luY2x1ZGUgXHgzY2FscGhhdGVzdF9mcmFnbWVudFx4M2Vcblx0ZmxvYXQgZGlzdCBceDNkIGxlbmd0aCggdldvcmxkUG9zaXRpb24gLSByZWZlcmVuY2VQb3NpdGlvbiApO1xuXHRkaXN0IFx4M2QgKCBkaXN0IC0gbmVhckRpc3RhbmNlICkgLyAoIGZhckRpc3RhbmNlIC0gbmVhckRpc3RhbmNlICk7XG5cdGRpc3QgXHgzZCBzYXR1cmF0ZSggZGlzdCApO1xuXHRnbF9GcmFnQ29sb3IgXHgzZCBwYWNrRGVwdGhUb1JHQkEoIGRpc3QgKTtcbn0iLApkaXN0YW5jZVJHQkFfdmVydDoiI2RlZmluZSBESVNUQU5DRVxudmFyeWluZyB2ZWMzIHZXb3JsZFBvc2l0aW9uO1xuI2luY2x1ZGUgXHgzY2NvbW1vblx4M2VcbiNpbmNsdWRlIFx4M2N1dl9wYXJzX3ZlcnRleFx4M2VcbiNpbmNsdWRlIFx4M2NkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXhceDNlXG4jaW5jbHVkZSBceDNjbW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXhceDNlXG4jaW5jbHVkZSBceDNjc2tpbm5pbmdfcGFyc192ZXJ0ZXhceDNlXG4jaW5jbHVkZSBceDNjY2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4XHgzZVxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSBceDNjdXZfdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjc2tpbmJhc2VfdmVydGV4XHgzZVxuXHQjaWZkZWYgVVNFX0RJU1BMQUNFTUVOVE1BUFxuXHRcdCNpbmNsdWRlIFx4M2NiZWdpbm5vcm1hbF92ZXJ0ZXhceDNlXG5cdFx0I2luY2x1ZGUgXHgzY21vcnBobm9ybWFsX3ZlcnRleFx4M2Vcblx0XHQjaW5jbHVkZSBceDNjc2tpbm5vcm1hbF92ZXJ0ZXhceDNlXG5cdCNlbmRpZlxuXHQjaW5jbHVkZSBceDNjYmVnaW5fdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjbW9ycGh0YXJnZXRfdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjc2tpbm5pbmdfdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjZGlzcGxhY2VtZW50bWFwX3ZlcnRleFx4M2Vcblx0I2luY2x1ZGUgXHgzY3Byb2plY3RfdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjd29ybGRwb3NfdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjY2xpcHBpbmdfcGxhbmVzX3ZlcnRleFx4M2Vcblx0dldvcmxkUG9zaXRpb24gXHgzZCB3b3JsZFBvc2l0aW9uLnh5ejtcbn0iLAplcXVpcmVjdF9mcmFnOiJ1bmlmb3JtIHNhbXBsZXIyRCB0RXF1aXJlY3Q7XG52YXJ5aW5nIHZlYzMgdldvcmxkRGlyZWN0aW9uO1xuI2luY2x1ZGUgXHgzY2NvbW1vblx4M2VcbnZvaWQgbWFpbigpIHtcblx0dmVjMyBkaXJlY3Rpb24gXHgzZCBub3JtYWxpemUoIHZXb3JsZERpcmVjdGlvbiApO1xuXHR2ZWMyIHNhbXBsZVVWO1xuXHRzYW1wbGVVVi55IFx4M2QgYXNpbiggY2xhbXAoIGRpcmVjdGlvbi55LCAtIDEuMCwgMS4wICkgKSAqIFJFQ0lQUk9DQUxfUEkgKyAwLjU7XG5cdHNhbXBsZVVWLnggXHgzZCBhdGFuKCBkaXJlY3Rpb24ueiwgZGlyZWN0aW9uLnggKSAqIFJFQ0lQUk9DQUxfUEkyICsgMC41O1xuXHR2ZWM0IHRleENvbG9yIFx4M2QgdGV4dHVyZTJEKCB0RXF1aXJlY3QsIHNhbXBsZVVWICk7XG5cdGdsX0ZyYWdDb2xvciBceDNkIG1hcFRleGVsVG9MaW5lYXIoIHRleENvbG9yICk7XG5cdCNpbmNsdWRlIFx4M2N0b25lbWFwcGluZ19mcmFnbWVudFx4M2Vcblx0I2luY2x1ZGUgXHgzY2VuY29kaW5nc19mcmFnbWVudFx4M2Vcbn0iLAplcXVpcmVjdF92ZXJ0OiJ2YXJ5aW5nIHZlYzMgdldvcmxkRGlyZWN0aW9uO1xuI2luY2x1ZGUgXHgzY2NvbW1vblx4M2VcbnZvaWQgbWFpbigpIHtcblx0dldvcmxkRGlyZWN0aW9uIFx4M2QgdHJhbnNmb3JtRGlyZWN0aW9uKCBwb3NpdGlvbiwgbW9kZWxNYXRyaXggKTtcblx0I2luY2x1ZGUgXHgzY2JlZ2luX3ZlcnRleFx4M2Vcblx0I2luY2x1ZGUgXHgzY3Byb2plY3RfdmVydGV4XHgzZVxufSIsbGluZWRhc2hlZF9mcmFnOiJ1bmlmb3JtIHZlYzMgZGlmZnVzZTtcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcbnVuaWZvcm0gZmxvYXQgZGFzaFNpemU7XG51bmlmb3JtIGZsb2F0IHRvdGFsU2l6ZTtcbnZhcnlpbmcgZmxvYXQgdkxpbmVEaXN0YW5jZTtcbiNpbmNsdWRlIFx4M2Njb21tb25ceDNlXG4jaW5jbHVkZSBceDNjY29sb3JfcGFyc19mcmFnbWVudFx4M2VcbiNpbmNsdWRlIFx4M2Nmb2dfcGFyc19mcmFnbWVudFx4M2VcbiNpbmNsdWRlIFx4M2Nsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50XHgzZVxuI2luY2x1ZGUgXHgzY2NsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50XHgzZVxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSBceDNjY2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50XHgzZVxuXHRpZiAoIG1vZCggdkxpbmVEaXN0YW5jZSwgdG90YWxTaXplICkgXHgzZSBkYXNoU2l6ZSApIHtcblx0XHRkaXNjYXJkO1xuXHR9XG5cdHZlYzMgb3V0Z29pbmdMaWdodCBceDNkIHZlYzMoIDAuMCApO1xuXHR2ZWM0IGRpZmZ1c2VDb2xvciBceDNkIHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTtcblx0I2luY2x1ZGUgXHgzY2xvZ2RlcHRoYnVmX2ZyYWdtZW50XHgzZVxuXHQjaW5jbHVkZSBceDNjY29sb3JfZnJhZ21lbnRceDNlXG5cdG91dGdvaW5nTGlnaHQgXHgzZCBkaWZmdXNlQ29sb3IucmdiO1xuXHRnbF9GcmFnQ29sb3IgXHgzZCB2ZWM0KCBvdXRnb2luZ0xpZ2h0LCBkaWZmdXNlQ29sb3IuYSApO1xuXHQjaW5jbHVkZSBceDNjcHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudFx4M2Vcblx0I2luY2x1ZGUgXHgzY3RvbmVtYXBwaW5nX2ZyYWdtZW50XHgzZVxuXHQjaW5jbHVkZSBceDNjZW5jb2RpbmdzX2ZyYWdtZW50XHgzZVxuXHQjaW5jbHVkZSBceDNjZm9nX2ZyYWdtZW50XHgzZVxufSIsCmxpbmVkYXNoZWRfdmVydDoidW5pZm9ybSBmbG9hdCBzY2FsZTtcbmF0dHJpYnV0ZSBmbG9hdCBsaW5lRGlzdGFuY2U7XG52YXJ5aW5nIGZsb2F0IHZMaW5lRGlzdGFuY2U7XG4jaW5jbHVkZSBceDNjY29tbW9uXHgzZVxuI2luY2x1ZGUgXHgzY2NvbG9yX3BhcnNfdmVydGV4XHgzZVxuI2luY2x1ZGUgXHgzY2ZvZ19wYXJzX3ZlcnRleFx4M2VcbiNpbmNsdWRlIFx4M2Nsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleFx4M2VcbiNpbmNsdWRlIFx4M2NjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXhceDNlXG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIFx4M2Njb2xvcl92ZXJ0ZXhceDNlXG5cdHZMaW5lRGlzdGFuY2UgXHgzZCBzY2FsZSAqIGxpbmVEaXN0YW5jZTtcblx0dmVjNCBtdlBvc2l0aW9uIFx4M2QgbW9kZWxWaWV3TWF0cml4ICogdmVjNCggcG9zaXRpb24sIDEuMCApO1xuXHRnbF9Qb3NpdGlvbiBceDNkIHByb2plY3Rpb25NYXRyaXggKiBtdlBvc2l0aW9uO1xuXHQjaW5jbHVkZSBceDNjbG9nZGVwdGhidWZfdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjY2xpcHBpbmdfcGxhbmVzX3ZlcnRleFx4M2Vcblx0I2luY2x1ZGUgXHgzY2ZvZ192ZXJ0ZXhceDNlXG59IiwKbWVzaGJhc2ljX2ZyYWc6InVuaWZvcm0gdmVjMyBkaWZmdXNlO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xuI2lmbmRlZiBGTEFUX1NIQURFRFxuXHR2YXJ5aW5nIHZlYzMgdk5vcm1hbDtcbiNlbmRpZlxuI2luY2x1ZGUgXHgzY2NvbW1vblx4M2VcbiNpbmNsdWRlIFx4M2Njb2xvcl9wYXJzX2ZyYWdtZW50XHgzZVxuI2luY2x1ZGUgXHgzY3V2X3BhcnNfZnJhZ21lbnRceDNlXG4jaW5jbHVkZSBceDNjdXYyX3BhcnNfZnJhZ21lbnRceDNlXG4jaW5jbHVkZSBceDNjbWFwX3BhcnNfZnJhZ21lbnRceDNlXG4jaW5jbHVkZSBceDNjYWxwaGFtYXBfcGFyc19mcmFnbWVudFx4M2VcbiNpbmNsdWRlIFx4M2Nhb21hcF9wYXJzX2ZyYWdtZW50XHgzZVxuI2luY2x1ZGUgXHgzY2xpZ2h0bWFwX3BhcnNfZnJhZ21lbnRceDNlXG4jaW5jbHVkZSBceDNjZW52bWFwX3BhcnNfZnJhZ21lbnRceDNlXG4jaW5jbHVkZSBceDNjZm9nX3BhcnNfZnJhZ21lbnRceDNlXG4jaW5jbHVkZSBceDNjc3BlY3VsYXJtYXBfcGFyc19mcmFnbWVudFx4M2VcbiNpbmNsdWRlIFx4M2Nsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50XHgzZVxuI2luY2x1ZGUgXHgzY2NsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50XHgzZVxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSBceDNjY2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50XHgzZVxuXHR2ZWM0IGRpZmZ1c2VDb2xvciBceDNkIHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTtcblx0I2luY2x1ZGUgXHgzY2xvZ2RlcHRoYnVmX2ZyYWdtZW50XHgzZVxuXHQjaW5jbHVkZSBceDNjbWFwX2ZyYWdtZW50XHgzZVxuXHQjaW5jbHVkZSBceDNjY29sb3JfZnJhZ21lbnRceDNlXG5cdCNpbmNsdWRlIFx4M2NhbHBoYW1hcF9mcmFnbWVudFx4M2Vcblx0I2luY2x1ZGUgXHgzY2FscGhhdGVzdF9mcmFnbWVudFx4M2Vcblx0I2luY2x1ZGUgXHgzY3NwZWN1bGFybWFwX2ZyYWdtZW50XHgzZVxuXHRSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCBceDNkIFJlZmxlY3RlZExpZ2h0KCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSApO1xuXHQjaWZkZWYgVVNFX0xJR0hUTUFQXG5cdFx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICtceDNkIHRleHR1cmUyRCggbGlnaHRNYXAsIHZVdjIgKS54eXogKiBsaWdodE1hcEludGVuc2l0eTtcblx0I2Vsc2Vcblx0XHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgK1x4M2QgdmVjMyggMS4wICk7XG5cdCNlbmRpZlxuXHQjaW5jbHVkZSBceDNjYW9tYXBfZnJhZ21lbnRceDNlXG5cdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSAqXHgzZCBkaWZmdXNlQ29sb3IucmdiO1xuXHR2ZWMzIG91dGdvaW5nTGlnaHQgXHgzZCByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2U7XG5cdCNpbmNsdWRlIFx4M2NlbnZtYXBfZnJhZ21lbnRceDNlXG5cdGdsX0ZyYWdDb2xvciBceDNkIHZlYzQoIG91dGdvaW5nTGlnaHQsIGRpZmZ1c2VDb2xvci5hICk7XG5cdCNpbmNsdWRlIFx4M2NwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50XHgzZVxuXHQjaW5jbHVkZSBceDNjdG9uZW1hcHBpbmdfZnJhZ21lbnRceDNlXG5cdCNpbmNsdWRlIFx4M2NlbmNvZGluZ3NfZnJhZ21lbnRceDNlXG5cdCNpbmNsdWRlIFx4M2Nmb2dfZnJhZ21lbnRceDNlXG59IiwKbWVzaGJhc2ljX3ZlcnQ6IiNpbmNsdWRlIFx4M2Njb21tb25ceDNlXG4jaW5jbHVkZSBceDNjdXZfcGFyc192ZXJ0ZXhceDNlXG4jaW5jbHVkZSBceDNjdXYyX3BhcnNfdmVydGV4XHgzZVxuI2luY2x1ZGUgXHgzY2Vudm1hcF9wYXJzX3ZlcnRleFx4M2VcbiNpbmNsdWRlIFx4M2Njb2xvcl9wYXJzX3ZlcnRleFx4M2VcbiNpbmNsdWRlIFx4M2Nmb2dfcGFyc192ZXJ0ZXhceDNlXG4jaW5jbHVkZSBceDNjbW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXhceDNlXG4jaW5jbHVkZSBceDNjc2tpbm5pbmdfcGFyc192ZXJ0ZXhceDNlXG4jaW5jbHVkZSBceDNjbG9nZGVwdGhidWZfcGFyc192ZXJ0ZXhceDNlXG4jaW5jbHVkZSBceDNjY2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4XHgzZVxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSBceDNjdXZfdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjdXYyX3ZlcnRleFx4M2Vcblx0I2luY2x1ZGUgXHgzY2NvbG9yX3ZlcnRleFx4M2Vcblx0I2luY2x1ZGUgXHgzY3NraW5iYXNlX3ZlcnRleFx4M2Vcblx0I2lmZGVmIFVTRV9FTlZNQVBcblx0I2luY2x1ZGUgXHgzY2JlZ2lubm9ybWFsX3ZlcnRleFx4M2Vcblx0I2luY2x1ZGUgXHgzY21vcnBobm9ybWFsX3ZlcnRleFx4M2Vcblx0I2luY2x1ZGUgXHgzY3NraW5ub3JtYWxfdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjZGVmYXVsdG5vcm1hbF92ZXJ0ZXhceDNlXG5cdCNlbmRpZlxuXHQjaW5jbHVkZSBceDNjYmVnaW5fdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjbW9ycGh0YXJnZXRfdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjc2tpbm5pbmdfdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjcHJvamVjdF92ZXJ0ZXhceDNlXG5cdCNpbmNsdWRlIFx4M2Nsb2dkZXB0aGJ1Zl92ZXJ0ZXhceDNlXG5cdCNpbmNsdWRlIFx4M2N3b3JsZHBvc192ZXJ0ZXhceDNlXG5cdCNpbmNsdWRlIFx4M2NjbGlwcGluZ19wbGFuZXNfdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjZW52bWFwX3ZlcnRleFx4M2Vcblx0I2luY2x1ZGUgXHgzY2ZvZ192ZXJ0ZXhceDNlXG59IiwKbWVzaGxhbWJlcnRfZnJhZzoidW5pZm9ybSB2ZWMzIGRpZmZ1c2U7XG51bmlmb3JtIHZlYzMgZW1pc3NpdmU7XG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG52YXJ5aW5nIHZlYzMgdkxpZ2h0RnJvbnQ7XG52YXJ5aW5nIHZlYzMgdkluZGlyZWN0RnJvbnQ7XG4jaWZkZWYgRE9VQkxFX1NJREVEXG5cdHZhcnlpbmcgdmVjMyB2TGlnaHRCYWNrO1xuXHR2YXJ5aW5nIHZlYzMgdkluZGlyZWN0QmFjaztcbiNlbmRpZlxuI2luY2x1ZGUgXHgzY2NvbW1vblx4M2VcbiNpbmNsdWRlIFx4M2NwYWNraW5nXHgzZVxuI2luY2x1ZGUgXHgzY2RpdGhlcmluZ19wYXJzX2ZyYWdtZW50XHgzZVxuI2luY2x1ZGUgXHgzY2NvbG9yX3BhcnNfZnJhZ21lbnRceDNlXG4jaW5jbHVkZSBceDNjdXZfcGFyc19mcmFnbWVudFx4M2VcbiNpbmNsdWRlIFx4M2N1djJfcGFyc19mcmFnbWVudFx4M2VcbiNpbmNsdWRlIFx4M2NtYXBfcGFyc19mcmFnbWVudFx4M2VcbiNpbmNsdWRlIFx4M2NhbHBoYW1hcF9wYXJzX2ZyYWdtZW50XHgzZVxuI2luY2x1ZGUgXHgzY2FvbWFwX3BhcnNfZnJhZ21lbnRceDNlXG4jaW5jbHVkZSBceDNjbGlnaHRtYXBfcGFyc19mcmFnbWVudFx4M2VcbiNpbmNsdWRlIFx4M2NlbWlzc2l2ZW1hcF9wYXJzX2ZyYWdtZW50XHgzZVxuI2luY2x1ZGUgXHgzY2Vudm1hcF9wYXJzX2ZyYWdtZW50XHgzZVxuI2luY2x1ZGUgXHgzY2JzZGZzXHgzZVxuI2luY2x1ZGUgXHgzY2xpZ2h0c19wYXJzX2JlZ2luXHgzZVxuI2luY2x1ZGUgXHgzY2ZvZ19wYXJzX2ZyYWdtZW50XHgzZVxuI2luY2x1ZGUgXHgzY3NoYWRvd21hcF9wYXJzX2ZyYWdtZW50XHgzZVxuI2luY2x1ZGUgXHgzY3NoYWRvd21hc2tfcGFyc19mcmFnbWVudFx4M2VcbiNpbmNsdWRlIFx4M2NzcGVjdWxhcm1hcF9wYXJzX2ZyYWdtZW50XHgzZVxuI2luY2x1ZGUgXHgzY2xvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnRceDNlXG4jaW5jbHVkZSBceDNjY2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnRceDNlXG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIFx4M2NjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnRceDNlXG5cdHZlYzQgZGlmZnVzZUNvbG9yIFx4M2QgdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApO1xuXHRSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCBceDNkIFJlZmxlY3RlZExpZ2h0KCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSApO1xuXHR2ZWMzIHRvdGFsRW1pc3NpdmVSYWRpYW5jZSBceDNkIGVtaXNzaXZlO1xuXHQjaW5jbHVkZSBceDNjbG9nZGVwdGhidWZfZnJhZ21lbnRceDNlXG5cdCNpbmNsdWRlIFx4M2NtYXBfZnJhZ21lbnRceDNlXG5cdCNpbmNsdWRlIFx4M2Njb2xvcl9mcmFnbWVudFx4M2Vcblx0I2luY2x1ZGUgXHgzY2FscGhhbWFwX2ZyYWdtZW50XHgzZVxuXHQjaW5jbHVkZSBceDNjYWxwaGF0ZXN0X2ZyYWdtZW50XHgzZVxuXHQjaW5jbHVkZSBceDNjc3BlY3VsYXJtYXBfZnJhZ21lbnRceDNlXG5cdCNpbmNsdWRlIFx4M2NlbWlzc2l2ZW1hcF9mcmFnbWVudFx4M2Vcblx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlIFx4M2QgZ2V0QW1iaWVudExpZ2h0SXJyYWRpYW5jZSggYW1iaWVudExpZ2h0Q29sb3IgKTtcblx0I2lmZGVmIERPVUJMRV9TSURFRFxuXHRcdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArXHgzZCAoIGdsX0Zyb250RmFjaW5nICkgPyB2SW5kaXJlY3RGcm9udCA6IHZJbmRpcmVjdEJhY2s7XG5cdCNlbHNlXG5cdFx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICtceDNkIHZJbmRpcmVjdEZyb250O1xuXHQjZW5kaWZcblx0I2luY2x1ZGUgXHgzY2xpZ2h0bWFwX2ZyYWdtZW50XHgzZVxuXHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKlx4M2QgQlJERl9EaWZmdXNlX0xhbWJlcnQoIGRpZmZ1c2VDb2xvci5yZ2IgKTtcblx0I2lmZGVmIERPVUJMRV9TSURFRFxuXHRcdHJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgXHgzZCAoIGdsX0Zyb250RmFjaW5nICkgPyB2TGlnaHRGcm9udCA6IHZMaWdodEJhY2s7XG5cdCNlbHNlXG5cdFx0cmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSBceDNkIHZMaWdodEZyb250O1xuXHQjZW5kaWZcblx0cmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSAqXHgzZCBCUkRGX0RpZmZ1c2VfTGFtYmVydCggZGlmZnVzZUNvbG9yLnJnYiApICogZ2V0U2hhZG93TWFzaygpO1xuXHQjaW5jbHVkZSBceDNjYW9tYXBfZnJhZ21lbnRceDNlXG5cdHZlYzMgb3V0Z29pbmdMaWdodCBceDNkIHJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKyByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKyB0b3RhbEVtaXNzaXZlUmFkaWFuY2U7XG5cdCNpbmNsdWRlIFx4M2NlbnZtYXBfZnJhZ21lbnRceDNlXG5cdGdsX0ZyYWdDb2xvciBceDNkIHZlYzQoIG91dGdvaW5nTGlnaHQsIGRpZmZ1c2VDb2xvci5hICk7XG5cdCNpbmNsdWRlIFx4M2N0b25lbWFwcGluZ19mcmFnbWVudFx4M2Vcblx0I2luY2x1ZGUgXHgzY2VuY29kaW5nc19mcmFnbWVudFx4M2Vcblx0I2luY2x1ZGUgXHgzY2ZvZ19mcmFnbWVudFx4M2Vcblx0I2luY2x1ZGUgXHgzY3ByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnRceDNlXG5cdCNpbmNsdWRlIFx4M2NkaXRoZXJpbmdfZnJhZ21lbnRceDNlXG59IiwKbWVzaGxhbWJlcnRfdmVydDoiI2RlZmluZSBMQU1CRVJUXG52YXJ5aW5nIHZlYzMgdkxpZ2h0RnJvbnQ7XG52YXJ5aW5nIHZlYzMgdkluZGlyZWN0RnJvbnQ7XG4jaWZkZWYgRE9VQkxFX1NJREVEXG5cdHZhcnlpbmcgdmVjMyB2TGlnaHRCYWNrO1xuXHR2YXJ5aW5nIHZlYzMgdkluZGlyZWN0QmFjaztcbiNlbmRpZlxuI2luY2x1ZGUgXHgzY2NvbW1vblx4M2VcbiNpbmNsdWRlIFx4M2N1dl9wYXJzX3ZlcnRleFx4M2VcbiNpbmNsdWRlIFx4M2N1djJfcGFyc192ZXJ0ZXhceDNlXG4jaW5jbHVkZSBceDNjZW52bWFwX3BhcnNfdmVydGV4XHgzZVxuI2luY2x1ZGUgXHgzY2JzZGZzXHgzZVxuI2luY2x1ZGUgXHgzY2xpZ2h0c19wYXJzX2JlZ2luXHgzZVxuI2luY2x1ZGUgXHgzY2NvbG9yX3BhcnNfdmVydGV4XHgzZVxuI2luY2x1ZGUgXHgzY2ZvZ19wYXJzX3ZlcnRleFx4M2VcbiNpbmNsdWRlIFx4M2Ntb3JwaHRhcmdldF9wYXJzX3ZlcnRleFx4M2VcbiNpbmNsdWRlIFx4M2Nza2lubmluZ19wYXJzX3ZlcnRleFx4M2VcbiNpbmNsdWRlIFx4M2NzaGFkb3dtYXBfcGFyc192ZXJ0ZXhceDNlXG4jaW5jbHVkZSBceDNjbG9nZGVwdGhidWZfcGFyc192ZXJ0ZXhceDNlXG4jaW5jbHVkZSBceDNjY2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4XHgzZVxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSBceDNjdXZfdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjdXYyX3ZlcnRleFx4M2Vcblx0I2luY2x1ZGUgXHgzY2NvbG9yX3ZlcnRleFx4M2Vcblx0I2luY2x1ZGUgXHgzY2JlZ2lubm9ybWFsX3ZlcnRleFx4M2Vcblx0I2luY2x1ZGUgXHgzY21vcnBobm9ybWFsX3ZlcnRleFx4M2Vcblx0I2luY2x1ZGUgXHgzY3NraW5iYXNlX3ZlcnRleFx4M2Vcblx0I2luY2x1ZGUgXHgzY3NraW5ub3JtYWxfdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjZGVmYXVsdG5vcm1hbF92ZXJ0ZXhceDNlXG5cdCNpbmNsdWRlIFx4M2NiZWdpbl92ZXJ0ZXhceDNlXG5cdCNpbmNsdWRlIFx4M2Ntb3JwaHRhcmdldF92ZXJ0ZXhceDNlXG5cdCNpbmNsdWRlIFx4M2Nza2lubmluZ192ZXJ0ZXhceDNlXG5cdCNpbmNsdWRlIFx4M2Nwcm9qZWN0X3ZlcnRleFx4M2Vcblx0I2luY2x1ZGUgXHgzY2xvZ2RlcHRoYnVmX3ZlcnRleFx4M2Vcblx0I2luY2x1ZGUgXHgzY2NsaXBwaW5nX3BsYW5lc192ZXJ0ZXhceDNlXG5cdCNpbmNsdWRlIFx4M2N3b3JsZHBvc192ZXJ0ZXhceDNlXG5cdCNpbmNsdWRlIFx4M2NlbnZtYXBfdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjbGlnaHRzX2xhbWJlcnRfdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjc2hhZG93bWFwX3ZlcnRleFx4M2Vcblx0I2luY2x1ZGUgXHgzY2ZvZ192ZXJ0ZXhceDNlXG59IiwKbWVzaG1hdGNhcF9mcmFnOiIjZGVmaW5lIE1BVENBUFxudW5pZm9ybSB2ZWMzIGRpZmZ1c2U7XG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG51bmlmb3JtIHNhbXBsZXIyRCBtYXRjYXA7XG52YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjtcbiNpZm5kZWYgRkxBVF9TSEFERURcblx0dmFyeWluZyB2ZWMzIHZOb3JtYWw7XG4jZW5kaWZcbiNpbmNsdWRlIFx4M2Njb21tb25ceDNlXG4jaW5jbHVkZSBceDNjdXZfcGFyc19mcmFnbWVudFx4M2VcbiNpbmNsdWRlIFx4M2NtYXBfcGFyc19mcmFnbWVudFx4M2VcbiNpbmNsdWRlIFx4M2NhbHBoYW1hcF9wYXJzX2ZyYWdtZW50XHgzZVxuI2luY2x1ZGUgXHgzY2ZvZ19wYXJzX2ZyYWdtZW50XHgzZVxuI2luY2x1ZGUgXHgzY2J1bXBtYXBfcGFyc19mcmFnbWVudFx4M2VcbiNpbmNsdWRlIFx4M2Nub3JtYWxtYXBfcGFyc19mcmFnbWVudFx4M2VcbiNpbmNsdWRlIFx4M2Nsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50XHgzZVxuI2luY2x1ZGUgXHgzY2NsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50XHgzZVxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSBceDNjY2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50XHgzZVxuXHR2ZWM0IGRpZmZ1c2VDb2xvciBceDNkIHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTtcblx0I2luY2x1ZGUgXHgzY2xvZ2RlcHRoYnVmX2ZyYWdtZW50XHgzZVxuXHQjaW5jbHVkZSBceDNjbWFwX2ZyYWdtZW50XHgzZVxuXHQjaW5jbHVkZSBceDNjYWxwaGFtYXBfZnJhZ21lbnRceDNlXG5cdCNpbmNsdWRlIFx4M2NhbHBoYXRlc3RfZnJhZ21lbnRceDNlXG5cdCNpbmNsdWRlIFx4M2Nub3JtYWxfZnJhZ21lbnRfYmVnaW5ceDNlXG5cdCNpbmNsdWRlIFx4M2Nub3JtYWxfZnJhZ21lbnRfbWFwc1x4M2Vcblx0dmVjMyB2aWV3RGlyIFx4M2Qgbm9ybWFsaXplKCB2Vmlld1Bvc2l0aW9uICk7XG5cdHZlYzMgeCBceDNkIG5vcm1hbGl6ZSggdmVjMyggdmlld0Rpci56LCAwLjAsIC0gdmlld0Rpci54ICkgKTtcblx0dmVjMyB5IFx4M2QgY3Jvc3MoIHZpZXdEaXIsIHggKTtcblx0dmVjMiB1diBceDNkIHZlYzIoIGRvdCggeCwgbm9ybWFsICksIGRvdCggeSwgbm9ybWFsICkgKSAqIDAuNDk1ICsgMC41O1xuXHQjaWZkZWYgVVNFX01BVENBUFxuXHRcdHZlYzQgbWF0Y2FwQ29sb3IgXHgzZCB0ZXh0dXJlMkQoIG1hdGNhcCwgdXYgKTtcblx0XHRtYXRjYXBDb2xvciBceDNkIG1hdGNhcFRleGVsVG9MaW5lYXIoIG1hdGNhcENvbG9yICk7XG5cdCNlbHNlXG5cdFx0dmVjNCBtYXRjYXBDb2xvciBceDNkIHZlYzQoIDEuMCApO1xuXHQjZW5kaWZcblx0dmVjMyBvdXRnb2luZ0xpZ2h0IFx4M2QgZGlmZnVzZUNvbG9yLnJnYiAqIG1hdGNhcENvbG9yLnJnYjtcblx0Z2xfRnJhZ0NvbG9yIFx4M2QgdmVjNCggb3V0Z29pbmdMaWdodCwgZGlmZnVzZUNvbG9yLmEgKTtcblx0I2luY2x1ZGUgXHgzY3ByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnRceDNlXG5cdCNpbmNsdWRlIFx4M2N0b25lbWFwcGluZ19mcmFnbWVudFx4M2Vcblx0I2luY2x1ZGUgXHgzY2VuY29kaW5nc19mcmFnbWVudFx4M2Vcblx0I2luY2x1ZGUgXHgzY2ZvZ19mcmFnbWVudFx4M2Vcbn0iLAptZXNobWF0Y2FwX3ZlcnQ6IiNkZWZpbmUgTUFUQ0FQXG52YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjtcbiNpZm5kZWYgRkxBVF9TSEFERURcblx0dmFyeWluZyB2ZWMzIHZOb3JtYWw7XG4jZW5kaWZcbiNpbmNsdWRlIFx4M2Njb21tb25ceDNlXG4jaW5jbHVkZSBceDNjdXZfcGFyc192ZXJ0ZXhceDNlXG4jaW5jbHVkZSBceDNjZGlzcGxhY2VtZW50bWFwX3BhcnNfdmVydGV4XHgzZVxuI2luY2x1ZGUgXHgzY2ZvZ19wYXJzX3ZlcnRleFx4M2VcbiNpbmNsdWRlIFx4M2Ntb3JwaHRhcmdldF9wYXJzX3ZlcnRleFx4M2VcbiNpbmNsdWRlIFx4M2Nza2lubmluZ19wYXJzX3ZlcnRleFx4M2VcbiNpbmNsdWRlIFx4M2Nsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleFx4M2VcbiNpbmNsdWRlIFx4M2NjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXhceDNlXG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIFx4M2N1dl92ZXJ0ZXhceDNlXG5cdCNpbmNsdWRlIFx4M2NiZWdpbm5vcm1hbF92ZXJ0ZXhceDNlXG5cdCNpbmNsdWRlIFx4M2Ntb3JwaG5vcm1hbF92ZXJ0ZXhceDNlXG5cdCNpbmNsdWRlIFx4M2Nza2luYmFzZV92ZXJ0ZXhceDNlXG5cdCNpbmNsdWRlIFx4M2Nza2lubm9ybWFsX3ZlcnRleFx4M2Vcblx0I2luY2x1ZGUgXHgzY2RlZmF1bHRub3JtYWxfdmVydGV4XHgzZVxuXHQjaWZuZGVmIEZMQVRfU0hBREVEXG5cdFx0dk5vcm1hbCBceDNkIG5vcm1hbGl6ZSggdHJhbnNmb3JtZWROb3JtYWwgKTtcblx0I2VuZGlmXG5cdCNpbmNsdWRlIFx4M2NiZWdpbl92ZXJ0ZXhceDNlXG5cdCNpbmNsdWRlIFx4M2Ntb3JwaHRhcmdldF92ZXJ0ZXhceDNlXG5cdCNpbmNsdWRlIFx4M2Nza2lubmluZ192ZXJ0ZXhceDNlXG5cdCNpbmNsdWRlIFx4M2NkaXNwbGFjZW1lbnRtYXBfdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjcHJvamVjdF92ZXJ0ZXhceDNlXG5cdCNpbmNsdWRlIFx4M2Nsb2dkZXB0aGJ1Zl92ZXJ0ZXhceDNlXG5cdCNpbmNsdWRlIFx4M2NjbGlwcGluZ19wbGFuZXNfdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjZm9nX3ZlcnRleFx4M2Vcblx0dlZpZXdQb3NpdGlvbiBceDNkIC0gbXZQb3NpdGlvbi54eXo7XG59IiwKbWVzaHBob25nX2ZyYWc6IiNkZWZpbmUgUEhPTkdcbnVuaWZvcm0gdmVjMyBkaWZmdXNlO1xudW5pZm9ybSB2ZWMzIGVtaXNzaXZlO1xudW5pZm9ybSB2ZWMzIHNwZWN1bGFyO1xudW5pZm9ybSBmbG9hdCBzaGluaW5lc3M7XG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG4jaW5jbHVkZSBceDNjY29tbW9uXHgzZVxuI2luY2x1ZGUgXHgzY3BhY2tpbmdceDNlXG4jaW5jbHVkZSBceDNjZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnRceDNlXG4jaW5jbHVkZSBceDNjY29sb3JfcGFyc19mcmFnbWVudFx4M2VcbiNpbmNsdWRlIFx4M2N1dl9wYXJzX2ZyYWdtZW50XHgzZVxuI2luY2x1ZGUgXHgzY3V2Ml9wYXJzX2ZyYWdtZW50XHgzZVxuI2luY2x1ZGUgXHgzY21hcF9wYXJzX2ZyYWdtZW50XHgzZVxuI2luY2x1ZGUgXHgzY2FscGhhbWFwX3BhcnNfZnJhZ21lbnRceDNlXG4jaW5jbHVkZSBceDNjYW9tYXBfcGFyc19mcmFnbWVudFx4M2VcbiNpbmNsdWRlIFx4M2NsaWdodG1hcF9wYXJzX2ZyYWdtZW50XHgzZVxuI2luY2x1ZGUgXHgzY2VtaXNzaXZlbWFwX3BhcnNfZnJhZ21lbnRceDNlXG4jaW5jbHVkZSBceDNjZW52bWFwX3BhcnNfZnJhZ21lbnRceDNlXG4jaW5jbHVkZSBceDNjZ3JhZGllbnRtYXBfcGFyc19mcmFnbWVudFx4M2VcbiNpbmNsdWRlIFx4M2Nmb2dfcGFyc19mcmFnbWVudFx4M2VcbiNpbmNsdWRlIFx4M2Nic2Rmc1x4M2VcbiNpbmNsdWRlIFx4M2NsaWdodHNfcGFyc19iZWdpblx4M2VcbiNpbmNsdWRlIFx4M2NsaWdodHNfcGhvbmdfcGFyc19mcmFnbWVudFx4M2VcbiNpbmNsdWRlIFx4M2NzaGFkb3dtYXBfcGFyc19mcmFnbWVudFx4M2VcbiNpbmNsdWRlIFx4M2NidW1wbWFwX3BhcnNfZnJhZ21lbnRceDNlXG4jaW5jbHVkZSBceDNjbm9ybWFsbWFwX3BhcnNfZnJhZ21lbnRceDNlXG4jaW5jbHVkZSBceDNjc3BlY3VsYXJtYXBfcGFyc19mcmFnbWVudFx4M2VcbiNpbmNsdWRlIFx4M2Nsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50XHgzZVxuI2luY2x1ZGUgXHgzY2NsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50XHgzZVxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSBceDNjY2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50XHgzZVxuXHR2ZWM0IGRpZmZ1c2VDb2xvciBceDNkIHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTtcblx0UmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgXHgzZCBSZWZsZWN0ZWRMaWdodCggdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICkgKTtcblx0dmVjMyB0b3RhbEVtaXNzaXZlUmFkaWFuY2UgXHgzZCBlbWlzc2l2ZTtcblx0I2luY2x1ZGUgXHgzY2xvZ2RlcHRoYnVmX2ZyYWdtZW50XHgzZVxuXHQjaW5jbHVkZSBceDNjbWFwX2ZyYWdtZW50XHgzZVxuXHQjaW5jbHVkZSBceDNjY29sb3JfZnJhZ21lbnRceDNlXG5cdCNpbmNsdWRlIFx4M2NhbHBoYW1hcF9mcmFnbWVudFx4M2Vcblx0I2luY2x1ZGUgXHgzY2FscGhhdGVzdF9mcmFnbWVudFx4M2Vcblx0I2luY2x1ZGUgXHgzY3NwZWN1bGFybWFwX2ZyYWdtZW50XHgzZVxuXHQjaW5jbHVkZSBceDNjbm9ybWFsX2ZyYWdtZW50X2JlZ2luXHgzZVxuXHQjaW5jbHVkZSBceDNjbm9ybWFsX2ZyYWdtZW50X21hcHNceDNlXG5cdCNpbmNsdWRlIFx4M2NlbWlzc2l2ZW1hcF9mcmFnbWVudFx4M2Vcblx0I2luY2x1ZGUgXHgzY2xpZ2h0c19waG9uZ19mcmFnbWVudFx4M2Vcblx0I2luY2x1ZGUgXHgzY2xpZ2h0c19mcmFnbWVudF9iZWdpblx4M2Vcblx0I2luY2x1ZGUgXHgzY2xpZ2h0c19mcmFnbWVudF9tYXBzXHgzZVxuXHQjaW5jbHVkZSBceDNjbGlnaHRzX2ZyYWdtZW50X2VuZFx4M2Vcblx0I2luY2x1ZGUgXHgzY2FvbWFwX2ZyYWdtZW50XHgzZVxuXHR2ZWMzIG91dGdvaW5nTGlnaHQgXHgzZCByZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICsgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICsgcmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXIgKyByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdFNwZWN1bGFyICsgdG90YWxFbWlzc2l2ZVJhZGlhbmNlO1xuXHQjaW5jbHVkZSBceDNjZW52bWFwX2ZyYWdtZW50XHgzZVxuXHRnbF9GcmFnQ29sb3IgXHgzZCB2ZWM0KCBvdXRnb2luZ0xpZ2h0LCBkaWZmdXNlQ29sb3IuYSApO1xuXHQjaW5jbHVkZSBceDNjdG9uZW1hcHBpbmdfZnJhZ21lbnRceDNlXG5cdCNpbmNsdWRlIFx4M2NlbmNvZGluZ3NfZnJhZ21lbnRceDNlXG5cdCNpbmNsdWRlIFx4M2Nmb2dfZnJhZ21lbnRceDNlXG5cdCNpbmNsdWRlIFx4M2NwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50XHgzZVxuXHQjaW5jbHVkZSBceDNjZGl0aGVyaW5nX2ZyYWdtZW50XHgzZVxufSIsCm1lc2hwaG9uZ192ZXJ0OiIjZGVmaW5lIFBIT05HXG52YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjtcbiNpZm5kZWYgRkxBVF9TSEFERURcblx0dmFyeWluZyB2ZWMzIHZOb3JtYWw7XG4jZW5kaWZcbiNpbmNsdWRlIFx4M2Njb21tb25ceDNlXG4jaW5jbHVkZSBceDNjdXZfcGFyc192ZXJ0ZXhceDNlXG4jaW5jbHVkZSBceDNjdXYyX3BhcnNfdmVydGV4XHgzZVxuI2luY2x1ZGUgXHgzY2Rpc3BsYWNlbWVudG1hcF9wYXJzX3ZlcnRleFx4M2VcbiNpbmNsdWRlIFx4M2NlbnZtYXBfcGFyc192ZXJ0ZXhceDNlXG4jaW5jbHVkZSBceDNjY29sb3JfcGFyc192ZXJ0ZXhceDNlXG4jaW5jbHVkZSBceDNjZm9nX3BhcnNfdmVydGV4XHgzZVxuI2luY2x1ZGUgXHgzY21vcnBodGFyZ2V0X3BhcnNfdmVydGV4XHgzZVxuI2luY2x1ZGUgXHgzY3NraW5uaW5nX3BhcnNfdmVydGV4XHgzZVxuI2luY2x1ZGUgXHgzY3NoYWRvd21hcF9wYXJzX3ZlcnRleFx4M2VcbiNpbmNsdWRlIFx4M2Nsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleFx4M2VcbiNpbmNsdWRlIFx4M2NjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXhceDNlXG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIFx4M2N1dl92ZXJ0ZXhceDNlXG5cdCNpbmNsdWRlIFx4M2N1djJfdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjY29sb3JfdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjYmVnaW5ub3JtYWxfdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjbW9ycGhub3JtYWxfdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjc2tpbmJhc2VfdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjc2tpbm5vcm1hbF92ZXJ0ZXhceDNlXG5cdCNpbmNsdWRlIFx4M2NkZWZhdWx0bm9ybWFsX3ZlcnRleFx4M2VcbiNpZm5kZWYgRkxBVF9TSEFERURcblx0dk5vcm1hbCBceDNkIG5vcm1hbGl6ZSggdHJhbnNmb3JtZWROb3JtYWwgKTtcbiNlbmRpZlxuXHQjaW5jbHVkZSBceDNjYmVnaW5fdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjbW9ycGh0YXJnZXRfdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjc2tpbm5pbmdfdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjZGlzcGxhY2VtZW50bWFwX3ZlcnRleFx4M2Vcblx0I2luY2x1ZGUgXHgzY3Byb2plY3RfdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjbG9nZGVwdGhidWZfdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjY2xpcHBpbmdfcGxhbmVzX3ZlcnRleFx4M2Vcblx0dlZpZXdQb3NpdGlvbiBceDNkIC0gbXZQb3NpdGlvbi54eXo7XG5cdCNpbmNsdWRlIFx4M2N3b3JsZHBvc192ZXJ0ZXhceDNlXG5cdCNpbmNsdWRlIFx4M2NlbnZtYXBfdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjc2hhZG93bWFwX3ZlcnRleFx4M2Vcblx0I2luY2x1ZGUgXHgzY2ZvZ192ZXJ0ZXhceDNlXG59IiwKbWVzaHBoeXNpY2FsX2ZyYWc6IiNkZWZpbmUgUEhZU0lDQUxcbnVuaWZvcm0gdmVjMyBkaWZmdXNlO1xudW5pZm9ybSB2ZWMzIGVtaXNzaXZlO1xudW5pZm9ybSBmbG9hdCByb3VnaG5lc3M7XG51bmlmb3JtIGZsb2F0IG1ldGFsbmVzcztcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcbiNpZm5kZWYgU1RBTkRBUkRcblx0dW5pZm9ybSBmbG9hdCBjbGVhckNvYXQ7XG5cdHVuaWZvcm0gZmxvYXQgY2xlYXJDb2F0Um91Z2huZXNzO1xuI2VuZGlmXG52YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjtcbiNpZm5kZWYgRkxBVF9TSEFERURcblx0dmFyeWluZyB2ZWMzIHZOb3JtYWw7XG5cdCNpZmRlZiBVU0VfVEFOR0VOVFxuXHRcdHZhcnlpbmcgdmVjMyB2VGFuZ2VudDtcblx0XHR2YXJ5aW5nIHZlYzMgdkJpdGFuZ2VudDtcblx0I2VuZGlmXG4jZW5kaWZcbiNpbmNsdWRlIFx4M2Njb21tb25ceDNlXG4jaW5jbHVkZSBceDNjcGFja2luZ1x4M2VcbiNpbmNsdWRlIFx4M2NkaXRoZXJpbmdfcGFyc19mcmFnbWVudFx4M2VcbiNpbmNsdWRlIFx4M2Njb2xvcl9wYXJzX2ZyYWdtZW50XHgzZVxuI2luY2x1ZGUgXHgzY3V2X3BhcnNfZnJhZ21lbnRceDNlXG4jaW5jbHVkZSBceDNjdXYyX3BhcnNfZnJhZ21lbnRceDNlXG4jaW5jbHVkZSBceDNjbWFwX3BhcnNfZnJhZ21lbnRceDNlXG4jaW5jbHVkZSBceDNjYWxwaGFtYXBfcGFyc19mcmFnbWVudFx4M2VcbiNpbmNsdWRlIFx4M2Nhb21hcF9wYXJzX2ZyYWdtZW50XHgzZVxuI2luY2x1ZGUgXHgzY2xpZ2h0bWFwX3BhcnNfZnJhZ21lbnRceDNlXG4jaW5jbHVkZSBceDNjZW1pc3NpdmVtYXBfcGFyc19mcmFnbWVudFx4M2VcbiNpbmNsdWRlIFx4M2Nic2Rmc1x4M2VcbiNpbmNsdWRlIFx4M2NjdWJlX3V2X3JlZmxlY3Rpb25fZnJhZ21lbnRceDNlXG4jaW5jbHVkZSBceDNjZW52bWFwX3BhcnNfZnJhZ21lbnRceDNlXG4jaW5jbHVkZSBceDNjZW52bWFwX3BoeXNpY2FsX3BhcnNfZnJhZ21lbnRceDNlXG4jaW5jbHVkZSBceDNjZm9nX3BhcnNfZnJhZ21lbnRceDNlXG4jaW5jbHVkZSBceDNjbGlnaHRzX3BhcnNfYmVnaW5ceDNlXG4jaW5jbHVkZSBceDNjbGlnaHRzX3BoeXNpY2FsX3BhcnNfZnJhZ21lbnRceDNlXG4jaW5jbHVkZSBceDNjc2hhZG93bWFwX3BhcnNfZnJhZ21lbnRceDNlXG4jaW5jbHVkZSBceDNjYnVtcG1hcF9wYXJzX2ZyYWdtZW50XHgzZVxuI2luY2x1ZGUgXHgzY25vcm1hbG1hcF9wYXJzX2ZyYWdtZW50XHgzZVxuI2luY2x1ZGUgXHgzY3JvdWdobmVzc21hcF9wYXJzX2ZyYWdtZW50XHgzZVxuI2luY2x1ZGUgXHgzY21ldGFsbmVzc21hcF9wYXJzX2ZyYWdtZW50XHgzZVxuI2luY2x1ZGUgXHgzY2xvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnRceDNlXG4jaW5jbHVkZSBceDNjY2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnRceDNlXG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIFx4M2NjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnRceDNlXG5cdHZlYzQgZGlmZnVzZUNvbG9yIFx4M2QgdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApO1xuXHRSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCBceDNkIFJlZmxlY3RlZExpZ2h0KCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSApO1xuXHR2ZWMzIHRvdGFsRW1pc3NpdmVSYWRpYW5jZSBceDNkIGVtaXNzaXZlO1xuXHQjaW5jbHVkZSBceDNjbG9nZGVwdGhidWZfZnJhZ21lbnRceDNlXG5cdCNpbmNsdWRlIFx4M2NtYXBfZnJhZ21lbnRceDNlXG5cdCNpbmNsdWRlIFx4M2Njb2xvcl9mcmFnbWVudFx4M2Vcblx0I2luY2x1ZGUgXHgzY2FscGhhbWFwX2ZyYWdtZW50XHgzZVxuXHQjaW5jbHVkZSBceDNjYWxwaGF0ZXN0X2ZyYWdtZW50XHgzZVxuXHQjaW5jbHVkZSBceDNjcm91Z2huZXNzbWFwX2ZyYWdtZW50XHgzZVxuXHQjaW5jbHVkZSBceDNjbWV0YWxuZXNzbWFwX2ZyYWdtZW50XHgzZVxuXHQjaW5jbHVkZSBceDNjbm9ybWFsX2ZyYWdtZW50X2JlZ2luXHgzZVxuXHQjaW5jbHVkZSBceDNjbm9ybWFsX2ZyYWdtZW50X21hcHNceDNlXG5cdCNpbmNsdWRlIFx4M2NlbWlzc2l2ZW1hcF9mcmFnbWVudFx4M2Vcblx0I2luY2x1ZGUgXHgzY2xpZ2h0c19waHlzaWNhbF9mcmFnbWVudFx4M2Vcblx0I2luY2x1ZGUgXHgzY2xpZ2h0c19mcmFnbWVudF9iZWdpblx4M2Vcblx0I2luY2x1ZGUgXHgzY2xpZ2h0c19mcmFnbWVudF9tYXBzXHgzZVxuXHQjaW5jbHVkZSBceDNjbGlnaHRzX2ZyYWdtZW50X2VuZFx4M2Vcblx0I2luY2x1ZGUgXHgzY2FvbWFwX2ZyYWdtZW50XHgzZVxuXHR2ZWMzIG91dGdvaW5nTGlnaHQgXHgzZCByZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICsgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICsgcmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXIgKyByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdFNwZWN1bGFyICsgdG90YWxFbWlzc2l2ZVJhZGlhbmNlO1xuXHRnbF9GcmFnQ29sb3IgXHgzZCB2ZWM0KCBvdXRnb2luZ0xpZ2h0LCBkaWZmdXNlQ29sb3IuYSApO1xuXHQjaW5jbHVkZSBceDNjdG9uZW1hcHBpbmdfZnJhZ21lbnRceDNlXG5cdCNpbmNsdWRlIFx4M2NlbmNvZGluZ3NfZnJhZ21lbnRceDNlXG5cdCNpbmNsdWRlIFx4M2Nmb2dfZnJhZ21lbnRceDNlXG5cdCNpbmNsdWRlIFx4M2NwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50XHgzZVxuXHQjaW5jbHVkZSBceDNjZGl0aGVyaW5nX2ZyYWdtZW50XHgzZVxufSIsCm1lc2hwaHlzaWNhbF92ZXJ0OiIjZGVmaW5lIFBIWVNJQ0FMXG52YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjtcbiNpZm5kZWYgRkxBVF9TSEFERURcblx0dmFyeWluZyB2ZWMzIHZOb3JtYWw7XG5cdCNpZmRlZiBVU0VfVEFOR0VOVFxuXHRcdHZhcnlpbmcgdmVjMyB2VGFuZ2VudDtcblx0XHR2YXJ5aW5nIHZlYzMgdkJpdGFuZ2VudDtcblx0I2VuZGlmXG4jZW5kaWZcbiNpbmNsdWRlIFx4M2Njb21tb25ceDNlXG4jaW5jbHVkZSBceDNjdXZfcGFyc192ZXJ0ZXhceDNlXG4jaW5jbHVkZSBceDNjdXYyX3BhcnNfdmVydGV4XHgzZVxuI2luY2x1ZGUgXHgzY2Rpc3BsYWNlbWVudG1hcF9wYXJzX3ZlcnRleFx4M2VcbiNpbmNsdWRlIFx4M2Njb2xvcl9wYXJzX3ZlcnRleFx4M2VcbiNpbmNsdWRlIFx4M2Nmb2dfcGFyc192ZXJ0ZXhceDNlXG4jaW5jbHVkZSBceDNjbW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXhceDNlXG4jaW5jbHVkZSBceDNjc2tpbm5pbmdfcGFyc192ZXJ0ZXhceDNlXG4jaW5jbHVkZSBceDNjc2hhZG93bWFwX3BhcnNfdmVydGV4XHgzZVxuI2luY2x1ZGUgXHgzY2xvZ2RlcHRoYnVmX3BhcnNfdmVydGV4XHgzZVxuI2luY2x1ZGUgXHgzY2NsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleFx4M2VcbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgXHgzY3V2X3ZlcnRleFx4M2Vcblx0I2luY2x1ZGUgXHgzY3V2Ml92ZXJ0ZXhceDNlXG5cdCNpbmNsdWRlIFx4M2Njb2xvcl92ZXJ0ZXhceDNlXG5cdCNpbmNsdWRlIFx4M2NiZWdpbm5vcm1hbF92ZXJ0ZXhceDNlXG5cdCNpbmNsdWRlIFx4M2Ntb3JwaG5vcm1hbF92ZXJ0ZXhceDNlXG5cdCNpbmNsdWRlIFx4M2Nza2luYmFzZV92ZXJ0ZXhceDNlXG5cdCNpbmNsdWRlIFx4M2Nza2lubm9ybWFsX3ZlcnRleFx4M2Vcblx0I2luY2x1ZGUgXHgzY2RlZmF1bHRub3JtYWxfdmVydGV4XHgzZVxuI2lmbmRlZiBGTEFUX1NIQURFRFxuXHR2Tm9ybWFsIFx4M2Qgbm9ybWFsaXplKCB0cmFuc2Zvcm1lZE5vcm1hbCApO1xuXHQjaWZkZWYgVVNFX1RBTkdFTlRcblx0XHR2VGFuZ2VudCBceDNkIG5vcm1hbGl6ZSggdHJhbnNmb3JtZWRUYW5nZW50ICk7XG5cdFx0dkJpdGFuZ2VudCBceDNkIG5vcm1hbGl6ZSggY3Jvc3MoIHZOb3JtYWwsIHZUYW5nZW50ICkgKiB0YW5nZW50LncgKTtcblx0I2VuZGlmXG4jZW5kaWZcblx0I2luY2x1ZGUgXHgzY2JlZ2luX3ZlcnRleFx4M2Vcblx0I2luY2x1ZGUgXHgzY21vcnBodGFyZ2V0X3ZlcnRleFx4M2Vcblx0I2luY2x1ZGUgXHgzY3NraW5uaW5nX3ZlcnRleFx4M2Vcblx0I2luY2x1ZGUgXHgzY2Rpc3BsYWNlbWVudG1hcF92ZXJ0ZXhceDNlXG5cdCNpbmNsdWRlIFx4M2Nwcm9qZWN0X3ZlcnRleFx4M2Vcblx0I2luY2x1ZGUgXHgzY2xvZ2RlcHRoYnVmX3ZlcnRleFx4M2Vcblx0I2luY2x1ZGUgXHgzY2NsaXBwaW5nX3BsYW5lc192ZXJ0ZXhceDNlXG5cdHZWaWV3UG9zaXRpb24gXHgzZCAtIG12UG9zaXRpb24ueHl6O1xuXHQjaW5jbHVkZSBceDNjd29ybGRwb3NfdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjc2hhZG93bWFwX3ZlcnRleFx4M2Vcblx0I2luY2x1ZGUgXHgzY2ZvZ192ZXJ0ZXhceDNlXG59IiwKbm9ybWFsX2ZyYWc6IiNkZWZpbmUgTk9STUFMXG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG4jaWYgZGVmaW5lZCggRkxBVF9TSEFERUQgKSB8fCBkZWZpbmVkKCBVU0VfQlVNUE1BUCApIHx8ICggZGVmaW5lZCggVVNFX05PUk1BTE1BUCApIFx4MjZceDI2ICEgZGVmaW5lZCggT0JKRUNUU1BBQ0VfTk9STUFMTUFQICkgKVxuXHR2YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjtcbiNlbmRpZlxuI2lmbmRlZiBGTEFUX1NIQURFRFxuXHR2YXJ5aW5nIHZlYzMgdk5vcm1hbDtcblx0I2lmZGVmIFVTRV9UQU5HRU5UXG5cdFx0dmFyeWluZyB2ZWMzIHZUYW5nZW50O1xuXHRcdHZhcnlpbmcgdmVjMyB2Qml0YW5nZW50O1xuXHQjZW5kaWZcbiNlbmRpZlxuI2luY2x1ZGUgXHgzY3BhY2tpbmdceDNlXG4jaW5jbHVkZSBceDNjdXZfcGFyc19mcmFnbWVudFx4M2VcbiNpbmNsdWRlIFx4M2NidW1wbWFwX3BhcnNfZnJhZ21lbnRceDNlXG4jaW5jbHVkZSBceDNjbm9ybWFsbWFwX3BhcnNfZnJhZ21lbnRceDNlXG4jaW5jbHVkZSBceDNjbG9nZGVwdGhidWZfcGFyc19mcmFnbWVudFx4M2VcbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgXHgzY2xvZ2RlcHRoYnVmX2ZyYWdtZW50XHgzZVxuXHQjaW5jbHVkZSBceDNjbm9ybWFsX2ZyYWdtZW50X2JlZ2luXHgzZVxuXHQjaW5jbHVkZSBceDNjbm9ybWFsX2ZyYWdtZW50X21hcHNceDNlXG5cdGdsX0ZyYWdDb2xvciBceDNkIHZlYzQoIHBhY2tOb3JtYWxUb1JHQiggbm9ybWFsICksIG9wYWNpdHkgKTtcbn0iLApub3JtYWxfdmVydDoiI2RlZmluZSBOT1JNQUxcbiNpZiBkZWZpbmVkKCBGTEFUX1NIQURFRCApIHx8IGRlZmluZWQoIFVTRV9CVU1QTUFQICkgfHwgKCBkZWZpbmVkKCBVU0VfTk9STUFMTUFQICkgXHgyNlx4MjYgISBkZWZpbmVkKCBPQkpFQ1RTUEFDRV9OT1JNQUxNQVAgKSApXG5cdHZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uO1xuI2VuZGlmXG4jaWZuZGVmIEZMQVRfU0hBREVEXG5cdHZhcnlpbmcgdmVjMyB2Tm9ybWFsO1xuXHQjaWZkZWYgVVNFX1RBTkdFTlRcblx0XHR2YXJ5aW5nIHZlYzMgdlRhbmdlbnQ7XG5cdFx0dmFyeWluZyB2ZWMzIHZCaXRhbmdlbnQ7XG5cdCNlbmRpZlxuI2VuZGlmXG4jaW5jbHVkZSBceDNjdXZfcGFyc192ZXJ0ZXhceDNlXG4jaW5jbHVkZSBceDNjZGlzcGxhY2VtZW50bWFwX3BhcnNfdmVydGV4XHgzZVxuI2luY2x1ZGUgXHgzY21vcnBodGFyZ2V0X3BhcnNfdmVydGV4XHgzZVxuI2luY2x1ZGUgXHgzY3NraW5uaW5nX3BhcnNfdmVydGV4XHgzZVxuI2luY2x1ZGUgXHgzY2xvZ2RlcHRoYnVmX3BhcnNfdmVydGV4XHgzZVxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSBceDNjdXZfdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjYmVnaW5ub3JtYWxfdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjbW9ycGhub3JtYWxfdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjc2tpbmJhc2VfdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjc2tpbm5vcm1hbF92ZXJ0ZXhceDNlXG5cdCNpbmNsdWRlIFx4M2NkZWZhdWx0bm9ybWFsX3ZlcnRleFx4M2VcbiNpZm5kZWYgRkxBVF9TSEFERURcblx0dk5vcm1hbCBceDNkIG5vcm1hbGl6ZSggdHJhbnNmb3JtZWROb3JtYWwgKTtcblx0I2lmZGVmIFVTRV9UQU5HRU5UXG5cdFx0dlRhbmdlbnQgXHgzZCBub3JtYWxpemUoIHRyYW5zZm9ybWVkVGFuZ2VudCApO1xuXHRcdHZCaXRhbmdlbnQgXHgzZCBub3JtYWxpemUoIGNyb3NzKCB2Tm9ybWFsLCB2VGFuZ2VudCApICogdGFuZ2VudC53ICk7XG5cdCNlbmRpZlxuI2VuZGlmXG5cdCNpbmNsdWRlIFx4M2NiZWdpbl92ZXJ0ZXhceDNlXG5cdCNpbmNsdWRlIFx4M2Ntb3JwaHRhcmdldF92ZXJ0ZXhceDNlXG5cdCNpbmNsdWRlIFx4M2Nza2lubmluZ192ZXJ0ZXhceDNlXG5cdCNpbmNsdWRlIFx4M2NkaXNwbGFjZW1lbnRtYXBfdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjcHJvamVjdF92ZXJ0ZXhceDNlXG5cdCNpbmNsdWRlIFx4M2Nsb2dkZXB0aGJ1Zl92ZXJ0ZXhceDNlXG4jaWYgZGVmaW5lZCggRkxBVF9TSEFERUQgKSB8fCBkZWZpbmVkKCBVU0VfQlVNUE1BUCApIHx8ICggZGVmaW5lZCggVVNFX05PUk1BTE1BUCApIFx4MjZceDI2ICEgZGVmaW5lZCggT0JKRUNUU1BBQ0VfTk9STUFMTUFQICkgKVxuXHR2Vmlld1Bvc2l0aW9uIFx4M2QgLSBtdlBvc2l0aW9uLnh5ejtcbiNlbmRpZlxufSIsCnBvaW50c19mcmFnOiJ1bmlmb3JtIHZlYzMgZGlmZnVzZTtcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcbiNpbmNsdWRlIFx4M2Njb21tb25ceDNlXG4jaW5jbHVkZSBceDNjY29sb3JfcGFyc19mcmFnbWVudFx4M2VcbiNpbmNsdWRlIFx4M2NtYXBfcGFydGljbGVfcGFyc19mcmFnbWVudFx4M2VcbiNpbmNsdWRlIFx4M2Nmb2dfcGFyc19mcmFnbWVudFx4M2VcbiNpbmNsdWRlIFx4M2Nsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50XHgzZVxuI2luY2x1ZGUgXHgzY2NsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50XHgzZVxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSBceDNjY2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50XHgzZVxuXHR2ZWMzIG91dGdvaW5nTGlnaHQgXHgzZCB2ZWMzKCAwLjAgKTtcblx0dmVjNCBkaWZmdXNlQ29sb3IgXHgzZCB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7XG5cdCNpbmNsdWRlIFx4M2Nsb2dkZXB0aGJ1Zl9mcmFnbWVudFx4M2Vcblx0I2luY2x1ZGUgXHgzY21hcF9wYXJ0aWNsZV9mcmFnbWVudFx4M2Vcblx0I2luY2x1ZGUgXHgzY2NvbG9yX2ZyYWdtZW50XHgzZVxuXHQjaW5jbHVkZSBceDNjYWxwaGF0ZXN0X2ZyYWdtZW50XHgzZVxuXHRvdXRnb2luZ0xpZ2h0IFx4M2QgZGlmZnVzZUNvbG9yLnJnYjtcblx0Z2xfRnJhZ0NvbG9yIFx4M2QgdmVjNCggb3V0Z29pbmdMaWdodCwgZGlmZnVzZUNvbG9yLmEgKTtcblx0I2luY2x1ZGUgXHgzY3ByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnRceDNlXG5cdCNpbmNsdWRlIFx4M2N0b25lbWFwcGluZ19mcmFnbWVudFx4M2Vcblx0I2luY2x1ZGUgXHgzY2VuY29kaW5nc19mcmFnbWVudFx4M2Vcblx0I2luY2x1ZGUgXHgzY2ZvZ19mcmFnbWVudFx4M2Vcbn0iLApwb2ludHNfdmVydDoidW5pZm9ybSBmbG9hdCBzaXplO1xudW5pZm9ybSBmbG9hdCBzY2FsZTtcbiNpbmNsdWRlIFx4M2Njb21tb25ceDNlXG4jaW5jbHVkZSBceDNjY29sb3JfcGFyc192ZXJ0ZXhceDNlXG4jaW5jbHVkZSBceDNjZm9nX3BhcnNfdmVydGV4XHgzZVxuI2luY2x1ZGUgXHgzY21vcnBodGFyZ2V0X3BhcnNfdmVydGV4XHgzZVxuI2luY2x1ZGUgXHgzY2xvZ2RlcHRoYnVmX3BhcnNfdmVydGV4XHgzZVxuI2luY2x1ZGUgXHgzY2NsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleFx4M2VcbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgXHgzY2NvbG9yX3ZlcnRleFx4M2Vcblx0I2luY2x1ZGUgXHgzY2JlZ2luX3ZlcnRleFx4M2Vcblx0I2luY2x1ZGUgXHgzY21vcnBodGFyZ2V0X3ZlcnRleFx4M2Vcblx0I2luY2x1ZGUgXHgzY3Byb2plY3RfdmVydGV4XHgzZVxuXHRnbF9Qb2ludFNpemUgXHgzZCBzaXplO1xuXHQjaWZkZWYgVVNFX1NJWkVBVFRFTlVBVElPTlxuXHRcdGJvb2wgaXNQZXJzcGVjdGl2ZSBceDNkICggcHJvamVjdGlvbk1hdHJpeFsgMiBdWyAzIF0gXHgzZFx4M2QgLSAxLjAgKTtcblx0XHRpZiAoIGlzUGVyc3BlY3RpdmUgKSBnbF9Qb2ludFNpemUgKlx4M2QgKCBzY2FsZSAvIC0gbXZQb3NpdGlvbi56ICk7XG5cdCNlbmRpZlxuXHQjaW5jbHVkZSBceDNjbG9nZGVwdGhidWZfdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjY2xpcHBpbmdfcGxhbmVzX3ZlcnRleFx4M2Vcblx0I2luY2x1ZGUgXHgzY3dvcmxkcG9zX3ZlcnRleFx4M2Vcblx0I2luY2x1ZGUgXHgzY2ZvZ192ZXJ0ZXhceDNlXG59IiwKc2hhZG93X2ZyYWc6InVuaWZvcm0gdmVjMyBjb2xvcjtcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcbiNpbmNsdWRlIFx4M2Njb21tb25ceDNlXG4jaW5jbHVkZSBceDNjcGFja2luZ1x4M2VcbiNpbmNsdWRlIFx4M2Nmb2dfcGFyc19mcmFnbWVudFx4M2VcbiNpbmNsdWRlIFx4M2Nic2Rmc1x4M2VcbiNpbmNsdWRlIFx4M2NsaWdodHNfcGFyc19iZWdpblx4M2VcbiNpbmNsdWRlIFx4M2NzaGFkb3dtYXBfcGFyc19mcmFnbWVudFx4M2VcbiNpbmNsdWRlIFx4M2NzaGFkb3dtYXNrX3BhcnNfZnJhZ21lbnRceDNlXG52b2lkIG1haW4oKSB7XG5cdGdsX0ZyYWdDb2xvciBceDNkIHZlYzQoIGNvbG9yLCBvcGFjaXR5ICogKCAxLjAgLSBnZXRTaGFkb3dNYXNrKCkgKSApO1xuXHQjaW5jbHVkZSBceDNjZm9nX2ZyYWdtZW50XHgzZVxufSIsc2hhZG93X3ZlcnQ6IiNpbmNsdWRlIFx4M2Nmb2dfcGFyc192ZXJ0ZXhceDNlXG4jaW5jbHVkZSBceDNjc2hhZG93bWFwX3BhcnNfdmVydGV4XHgzZVxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSBceDNjYmVnaW5fdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjcHJvamVjdF92ZXJ0ZXhceDNlXG5cdCNpbmNsdWRlIFx4M2N3b3JsZHBvc192ZXJ0ZXhceDNlXG5cdCNpbmNsdWRlIFx4M2NzaGFkb3dtYXBfdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjZm9nX3ZlcnRleFx4M2Vcbn0iLApzcHJpdGVfZnJhZzoidW5pZm9ybSB2ZWMzIGRpZmZ1c2U7XG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG4jaW5jbHVkZSBceDNjY29tbW9uXHgzZVxuI2luY2x1ZGUgXHgzY3V2X3BhcnNfZnJhZ21lbnRceDNlXG4jaW5jbHVkZSBceDNjbWFwX3BhcnNfZnJhZ21lbnRceDNlXG4jaW5jbHVkZSBceDNjZm9nX3BhcnNfZnJhZ21lbnRceDNlXG4jaW5jbHVkZSBceDNjbG9nZGVwdGhidWZfcGFyc19mcmFnbWVudFx4M2VcbiNpbmNsdWRlIFx4M2NjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudFx4M2VcbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgXHgzY2NsaXBwaW5nX3BsYW5lc19mcmFnbWVudFx4M2Vcblx0dmVjMyBvdXRnb2luZ0xpZ2h0IFx4M2QgdmVjMyggMC4wICk7XG5cdHZlYzQgZGlmZnVzZUNvbG9yIFx4M2QgdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApO1xuXHQjaW5jbHVkZSBceDNjbG9nZGVwdGhidWZfZnJhZ21lbnRceDNlXG5cdCNpbmNsdWRlIFx4M2NtYXBfZnJhZ21lbnRceDNlXG5cdCNpbmNsdWRlIFx4M2NhbHBoYXRlc3RfZnJhZ21lbnRceDNlXG5cdG91dGdvaW5nTGlnaHQgXHgzZCBkaWZmdXNlQ29sb3IucmdiO1xuXHRnbF9GcmFnQ29sb3IgXHgzZCB2ZWM0KCBvdXRnb2luZ0xpZ2h0LCBkaWZmdXNlQ29sb3IuYSApO1xuXHQjaW5jbHVkZSBceDNjdG9uZW1hcHBpbmdfZnJhZ21lbnRceDNlXG5cdCNpbmNsdWRlIFx4M2NlbmNvZGluZ3NfZnJhZ21lbnRceDNlXG5cdCNpbmNsdWRlIFx4M2Nmb2dfZnJhZ21lbnRceDNlXG59IiwKc3ByaXRlX3ZlcnQ6InVuaWZvcm0gZmxvYXQgcm90YXRpb247XG51bmlmb3JtIHZlYzIgY2VudGVyO1xuI2luY2x1ZGUgXHgzY2NvbW1vblx4M2VcbiNpbmNsdWRlIFx4M2N1dl9wYXJzX3ZlcnRleFx4M2VcbiNpbmNsdWRlIFx4M2Nmb2dfcGFyc192ZXJ0ZXhceDNlXG4jaW5jbHVkZSBceDNjbG9nZGVwdGhidWZfcGFyc192ZXJ0ZXhceDNlXG4jaW5jbHVkZSBceDNjY2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4XHgzZVxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSBceDNjdXZfdmVydGV4XHgzZVxuXHR2ZWM0IG12UG9zaXRpb24gXHgzZCBtb2RlbFZpZXdNYXRyaXggKiB2ZWM0KCAwLjAsIDAuMCwgMC4wLCAxLjAgKTtcblx0dmVjMiBzY2FsZTtcblx0c2NhbGUueCBceDNkIGxlbmd0aCggdmVjMyggbW9kZWxNYXRyaXhbIDAgXS54LCBtb2RlbE1hdHJpeFsgMCBdLnksIG1vZGVsTWF0cml4WyAwIF0ueiApICk7XG5cdHNjYWxlLnkgXHgzZCBsZW5ndGgoIHZlYzMoIG1vZGVsTWF0cml4WyAxIF0ueCwgbW9kZWxNYXRyaXhbIDEgXS55LCBtb2RlbE1hdHJpeFsgMSBdLnogKSApO1xuXHQjaWZuZGVmIFVTRV9TSVpFQVRURU5VQVRJT05cblx0XHRib29sIGlzUGVyc3BlY3RpdmUgXHgzZCAoIHByb2plY3Rpb25NYXRyaXhbIDIgXVsgMyBdIFx4M2RceDNkIC0gMS4wICk7XG5cdFx0aWYgKCBpc1BlcnNwZWN0aXZlICkgc2NhbGUgKlx4M2QgLSBtdlBvc2l0aW9uLno7XG5cdCNlbmRpZlxuXHR2ZWMyIGFsaWduZWRQb3NpdGlvbiBceDNkICggcG9zaXRpb24ueHkgLSAoIGNlbnRlciAtIHZlYzIoIDAuNSApICkgKSAqIHNjYWxlO1xuXHR2ZWMyIHJvdGF0ZWRQb3NpdGlvbjtcblx0cm90YXRlZFBvc2l0aW9uLnggXHgzZCBjb3MoIHJvdGF0aW9uICkgKiBhbGlnbmVkUG9zaXRpb24ueCAtIHNpbiggcm90YXRpb24gKSAqIGFsaWduZWRQb3NpdGlvbi55O1xuXHRyb3RhdGVkUG9zaXRpb24ueSBceDNkIHNpbiggcm90YXRpb24gKSAqIGFsaWduZWRQb3NpdGlvbi54ICsgY29zKCByb3RhdGlvbiApICogYWxpZ25lZFBvc2l0aW9uLnk7XG5cdG12UG9zaXRpb24ueHkgK1x4M2Qgcm90YXRlZFBvc2l0aW9uO1xuXHRnbF9Qb3NpdGlvbiBceDNkIHByb2plY3Rpb25NYXRyaXggKiBtdlBvc2l0aW9uO1xuXHQjaW5jbHVkZSBceDNjbG9nZGVwdGhidWZfdmVydGV4XHgzZVxuXHQjaW5jbHVkZSBceDNjY2xpcHBpbmdfcGxhbmVzX3ZlcnRleFx4M2Vcblx0I2luY2x1ZGUgXHgzY2ZvZ192ZXJ0ZXhceDNlXG59In0sCmxwPXtjbG9uZTpGLG1lcmdlOkR9LG1wPXthbGljZWJsdWU6MTU3OTIzODMsYW50aXF1ZXdoaXRlOjE2NDQ0Mzc1LGFxdWE6NjU1MzUsYXF1YW1hcmluZTo4Mzg4NTY0LGF6dXJlOjE1Nzk0MTc1LGJlaWdlOjE2MTE5MjYwLGJpc3F1ZToxNjc3MDI0NCxibGFjazowLGJsYW5jaGVkYWxtb25kOjE2NzcyMDQ1LGJsdWU6MjU1LGJsdWV2aW9sZXQ6OTA1NTIwMixicm93bjoxMDgyNDIzNCxidXJseXdvb2Q6MTQ1OTYyMzEsY2FkZXRibHVlOjYyNjY1MjgsY2hhcnRyZXVzZTo4Mzg4MzUyLGNob2NvbGF0ZToxMzc4OTQ3MCxjb3JhbDoxNjc0NDI3Mixjb3JuZmxvd2VyYmx1ZTo2NTkxOTgxLGNvcm5zaWxrOjE2Nzc1Mzg4LGNyaW1zb246MTQ0MjMxMDAsY3lhbjo2NTUzNSxkYXJrYmx1ZToxMzksZGFya2N5YW46MzU3MjMsZGFya2dvbGRlbnJvZDoxMjA5MjkzOSxkYXJrZ3JheToxMTExOTAxNyxkYXJrZ3JlZW46MjU2MDAsZGFya2dyZXk6MTExMTkwMTcsZGFya2toYWtpOjEyNDMzMjU5LGRhcmttYWdlbnRhOjkxMDk2NDMsCmRhcmtvbGl2ZWdyZWVuOjU1OTc5OTksZGFya29yYW5nZToxNjc0NzUyMCxkYXJrb3JjaGlkOjEwMDQwMDEyLGRhcmtyZWQ6OTEwOTUwNCxkYXJrc2FsbW9uOjE1MzA4NDEwLGRhcmtzZWFncmVlbjo5NDE5OTE5LGRhcmtzbGF0ZWJsdWU6NDczNDM0NyxkYXJrc2xhdGVncmF5OjMxMDA0OTUsZGFya3NsYXRlZ3JleTozMTAwNDk1LGRhcmt0dXJxdW9pc2U6NTI5NDUsZGFya3Zpb2xldDo5Njk5NTM5LGRlZXBwaW5rOjE2NzE2OTQ3LGRlZXBza3libHVlOjQ5MTUxLGRpbWdyYXk6NjkwODI2NSxkaW1ncmV5OjY5MDgyNjUsZG9kZ2VyYmx1ZToyMDAzMTk5LGZpcmVicmljazoxMTY3NDE0NixmbG9yYWx3aGl0ZToxNjc3NTkyMCxmb3Jlc3RncmVlbjoyMjYzODQyLGZ1Y2hzaWE6MTY3MTE5MzUsZ2FpbnNib3JvOjE0NDc0NDYwLGdob3N0d2hpdGU6MTYzMTY2NzEsZ29sZDoxNjc2NjcyMCxnb2xkZW5yb2Q6MTQzMjkxMjAsZ3JheTo4NDIxNTA0LGdyZWVuOjMyNzY4LGdyZWVueWVsbG93OjExNDAzMDU1LApncmV5Ojg0MjE1MDQsaG9uZXlkZXc6MTU3OTQxNjAsaG90cGluazoxNjczODc0MCxpbmRpYW5yZWQ6MTM0NTg1MjQsaW5kaWdvOjQ5MTUzMzAsaXZvcnk6MTY3NzcyMDAsa2hha2k6MTU3ODc2NjAsbGF2ZW5kZXI6MTUxMzI0MTAsbGF2ZW5kZXJibHVzaDoxNjc3MzM2NSxsYXduZ3JlZW46ODE5MDk3NixsZW1vbmNoaWZmb246MTY3NzU4ODUsbGlnaHRibHVlOjExMzkzMjU0LGxpZ2h0Y29yYWw6MTU3NjE1MzYsbGlnaHRjeWFuOjE0NzQ1NTk5LGxpZ2h0Z29sZGVucm9keWVsbG93OjE2NDQ4MjEwLGxpZ2h0Z3JheToxMzg4MjMyMyxsaWdodGdyZWVuOjk0OTgyNTYsbGlnaHRncmV5OjEzODgyMzIzLGxpZ2h0cGluazoxNjc1ODQ2NSxsaWdodHNhbG1vbjoxNjc1Mjc2MixsaWdodHNlYWdyZWVuOjIxNDI4OTAsbGlnaHRza3libHVlOjg5MDAzNDYsbGlnaHRzbGF0ZWdyYXk6NzgzMzc1MyxsaWdodHNsYXRlZ3JleTo3ODMzNzUzLGxpZ2h0c3RlZWxibHVlOjExNTg0NzM0LGxpZ2h0eWVsbG93OjE2Nzc3MTg0LApsaW1lOjY1MjgwLGxpbWVncmVlbjozMzI5MzMwLGxpbmVuOjE2NDQ1NjcwLG1hZ2VudGE6MTY3MTE5MzUsbWFyb29uOjgzODg2MDgsbWVkaXVtYXF1YW1hcmluZTo2NzM3MzIyLG1lZGl1bWJsdWU6MjA1LG1lZGl1bW9yY2hpZDoxMjIxMTY2NyxtZWRpdW1wdXJwbGU6OTY2MjY4MyxtZWRpdW1zZWFncmVlbjozOTc4MDk3LG1lZGl1bXNsYXRlYmx1ZTo4MDg3NzkwLG1lZGl1bXNwcmluZ2dyZWVuOjY0MTU0LG1lZGl1bXR1cnF1b2lzZTo0NzcyMzAwLG1lZGl1bXZpb2xldHJlZDoxMzA0NzE3MyxtaWRuaWdodGJsdWU6MTY0NDkxMixtaW50Y3JlYW06MTYxMjE4NTAsbWlzdHlyb3NlOjE2NzcwMjczLG1vY2Nhc2luOjE2NzcwMjI5LG5hdmFqb3doaXRlOjE2NzY4Njg1LG5hdnk6MTI4LG9sZGxhY2U6MTY2NDM1NTgsb2xpdmU6ODQyMTM3NixvbGl2ZWRyYWI6NzA0ODczOSxvcmFuZ2U6MTY3NTM5MjAsb3JhbmdlcmVkOjE2NzI5MzQ0LG9yY2hpZDoxNDMxNTczNCxwYWxlZ29sZGVucm9kOjE1NjU3MTMwLApwYWxlZ3JlZW46MTAwMjU4ODAscGFsZXR1cnF1b2lzZToxMTUyOTk2NixwYWxldmlvbGV0cmVkOjE0MzgxMjAzLHBhcGF5YXdoaXA6MTY3NzMwNzcscGVhY2hwdWZmOjE2NzY3NjczLHBlcnU6MTM0Njg5OTEscGluazoxNjc2MTAzNSxwbHVtOjE0NTI0NjM3LHBvd2RlcmJsdWU6MTE1OTE5MTAscHVycGxlOjgzODg3MzYscmViZWNjYXB1cnBsZTo2Njk3ODgxLHJlZDoxNjcxMTY4MCxyb3N5YnJvd246MTIzNTc1MTkscm95YWxibHVlOjQyODY5NDUsc2FkZGxlYnJvd246OTEyNzE4NyxzYWxtb246MTY0MTY4ODIsc2FuZHlicm93bjoxNjAzMjg2NCxzZWFncmVlbjozMDUwMzI3LHNlYXNoZWxsOjE2Nzc0NjM4LHNpZW5uYToxMDUwNjc5NyxzaWx2ZXI6MTI2MzIyNTYsc2t5Ymx1ZTo4OTAwMzMxLHNsYXRlYmx1ZTo2OTcwMDYxLHNsYXRlZ3JheTo3MzcyOTQ0LHNsYXRlZ3JleTo3MzcyOTQ0LHNub3c6MTY3NzU5MzAsc3ByaW5nZ3JlZW46NjU0MDcsc3RlZWxibHVlOjQ2MjA5ODAsdGFuOjEzODA4NzgwLAp0ZWFsOjMyODk2LHRoaXN0bGU6MTQyMDQ4ODgsdG9tYXRvOjE2NzM3MDk1LHR1cnF1b2lzZTo0MjUxODU2LHZpb2xldDoxNTYzMTA4Nix3aGVhdDoxNjExMzMzMSx3aGl0ZToxNjc3NzIxNSx3aGl0ZXNtb2tlOjE2MTE5Mjg1LHllbGxvdzoxNjc3Njk2MCx5ZWxsb3dncmVlbjoxMDE0NTA3NH07T2JqZWN0LmFzc2lnbihCLnByb3RvdHlwZSx7aXNDb2xvcjohMCxyOjEsZzoxLGI6MSxzZXQ6ZnVuY3Rpb24oYil7YiYmYi5pc0NvbG9yP3RoaXMuY29weShiKToibnVtYmVyIj09PXR5cGVvZiBiP3RoaXMuc2V0SGV4KGIpOiJzdHJpbmciPT09dHlwZW9mIGImJnRoaXMuc2V0U3R5bGUoYik7cmV0dXJuIHRoaXN9LHNldFNjYWxhcjpmdW5jdGlvbihiKXt0aGlzLmI9dGhpcy5nPXRoaXMucj1iO3JldHVybiB0aGlzfSxzZXRIZXg6ZnVuY3Rpb24oYil7Yj1NYXRoLmZsb29yKGIpO3RoaXMucj0oYj4+MTYmMjU1KS8yNTU7dGhpcy5nPShiPj44JjI1NSkvMjU1O3RoaXMuYj0oYiYyNTUpLzI1NTsKcmV0dXJuIHRoaXN9LHNldFJHQjpmdW5jdGlvbihiLGUsaCl7dGhpcy5yPWI7dGhpcy5nPWU7dGhpcy5iPWg7cmV0dXJuIHRoaXN9LHNldEhTTDpmdW5jdGlvbigpe2Z1bmN0aW9uIGIoZSxoLG4pezA+biYmKG4rPTEpOzE8biYmLS1uO3JldHVybiBuPDEvNj9lKzYqKGgtZSkqbjouNT5uP2g6bjwyLzM/ZSs2KihoLWUpKigyLzMtbik6ZX1yZXR1cm4gZnVuY3Rpb24oZSxoLG4pe2U9b2IuZXVjbGlkZWFuTW9kdWxvKGUsMSk7aD1vYi5jbGFtcChoLDAsMSk7bj1vYi5jbGFtcChuLDAsMSk7MD09PWg/dGhpcy5yPXRoaXMuZz10aGlzLmI9bjooaD0uNT49bj9uKigxK2gpOm4raC1uKmgsbj0yKm4taCx0aGlzLnI9YihuLGgsZSsxLzMpLHRoaXMuZz1iKG4saCxlKSx0aGlzLmI9YihuLGgsZS0xLzMpKTtyZXR1cm4gdGhpc319KCksc2V0U3R5bGU6ZnVuY3Rpb24oYil7ZnVuY3Rpb24gZSh6KXt2b2lkIDAhPT16JiYxPnBhcnNlRmxvYXQoeikmJmNvbnNvbGUud2FybigiVEhSRUUuQ29sb3I6IEFscGhhIGNvbXBvbmVudCBvZiAiKwpiKyIgd2lsbCBiZSBpZ25vcmVkLiIpfXZhciBoO2lmKGg9L14oKD86cmdifGhzbClhPylcKFxzKihbXlwpXSopXCkvLmV4ZWMoYikpe3ZhciBuPWhbMl07c3dpdGNoKGhbMV0pe2Nhc2UgInJnYiI6Y2FzZSAicmdiYSI6aWYoaD0vXihcZCspXHMqLFxzKihcZCspXHMqLFxzKihcZCspXHMqKCxccyooWzAtOV0qXC4/WzAtOV0rKVxzKik/JC8uZXhlYyhuKSlyZXR1cm4gdGhpcy5yPU1hdGgubWluKDI1NSxwYXJzZUludChoWzFdLDEwKSkvMjU1LHRoaXMuZz1NYXRoLm1pbigyNTUscGFyc2VJbnQoaFsyXSwxMCkpLzI1NSx0aGlzLmI9TWF0aC5taW4oMjU1LHBhcnNlSW50KGhbM10sMTApKS8yNTUsZShoWzVdKSx0aGlzO2lmKGg9L14oXGQrKSVccyosXHMqKFxkKyklXHMqLFxzKihcZCspJVxzKigsXHMqKFswLTldKlwuP1swLTldKylccyopPyQvLmV4ZWMobikpcmV0dXJuIHRoaXMucj1NYXRoLm1pbigxMDAscGFyc2VJbnQoaFsxXSwxMCkpLzEwMCx0aGlzLmc9TWF0aC5taW4oMTAwLHBhcnNlSW50KGhbMl0sCjEwKSkvMTAwLHRoaXMuYj1NYXRoLm1pbigxMDAscGFyc2VJbnQoaFszXSwxMCkpLzEwMCxlKGhbNV0pLHRoaXM7YnJlYWs7Y2FzZSAiaHNsIjpjYXNlICJoc2xhIjppZihoPS9eKFswLTldKlwuP1swLTldKylccyosXHMqKFxkKyklXHMqLFxzKihcZCspJVxzKigsXHMqKFswLTldKlwuP1swLTldKylccyopPyQvLmV4ZWMobikpe249cGFyc2VGbG9hdChoWzFdKS8zNjA7dmFyIHU9cGFyc2VJbnQoaFsyXSwxMCkvMTAwLHc9cGFyc2VJbnQoaFszXSwxMCkvMTAwO2UoaFs1XSk7cmV0dXJuIHRoaXMuc2V0SFNMKG4sdSx3KX19fWVsc2UgaWYoaD0vXiMoW0EtRmEtZjAtOV0rKSQvLmV4ZWMoYikpe2g9aFsxXTtuPWgubGVuZ3RoO2lmKDM9PT1uKXJldHVybiB0aGlzLnI9cGFyc2VJbnQoaC5jaGFyQXQoMCkraC5jaGFyQXQoMCksMTYpLzI1NSx0aGlzLmc9cGFyc2VJbnQoaC5jaGFyQXQoMSkraC5jaGFyQXQoMSksMTYpLzI1NSx0aGlzLmI9cGFyc2VJbnQoaC5jaGFyQXQoMikraC5jaGFyQXQoMiksCjE2KS8yNTUsdGhpcztpZig2PT09bilyZXR1cm4gdGhpcy5yPXBhcnNlSW50KGguY2hhckF0KDApK2guY2hhckF0KDEpLDE2KS8yNTUsdGhpcy5nPXBhcnNlSW50KGguY2hhckF0KDIpK2guY2hhckF0KDMpLDE2KS8yNTUsdGhpcy5iPXBhcnNlSW50KGguY2hhckF0KDQpK2guY2hhckF0KDUpLDE2KS8yNTUsdGhpc31iJiYwPGIubGVuZ3RoJiYoaD1tcFtiXSx2b2lkIDAhPT1oP3RoaXMuc2V0SGV4KGgpOmNvbnNvbGUud2FybigiVEhSRUUuQ29sb3I6IFVua25vd24gY29sb3IgIitiKSk7cmV0dXJuIHRoaXN9LGNsb25lOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMucix0aGlzLmcsdGhpcy5iKX0sY29weTpmdW5jdGlvbihiKXt0aGlzLnI9Yi5yO3RoaXMuZz1iLmc7dGhpcy5iPWIuYjtyZXR1cm4gdGhpc30sY29weUdhbW1hVG9MaW5lYXI6ZnVuY3Rpb24oYixlKXt2b2lkIDA9PT1lJiYoZT0yKTt0aGlzLnI9TWF0aC5wb3coYi5yLGUpO3RoaXMuZz1NYXRoLnBvdyhiLmcsCmUpO3RoaXMuYj1NYXRoLnBvdyhiLmIsZSk7cmV0dXJuIHRoaXN9LGNvcHlMaW5lYXJUb0dhbW1hOmZ1bmN0aW9uKGIsZSl7dm9pZCAwPT09ZSYmKGU9Mik7ZT0wPGU/MS9lOjE7dGhpcy5yPU1hdGgucG93KGIucixlKTt0aGlzLmc9TWF0aC5wb3coYi5nLGUpO3RoaXMuYj1NYXRoLnBvdyhiLmIsZSk7cmV0dXJuIHRoaXN9LGNvbnZlcnRHYW1tYVRvTGluZWFyOmZ1bmN0aW9uKGIpe3RoaXMuY29weUdhbW1hVG9MaW5lYXIodGhpcyxiKTtyZXR1cm4gdGhpc30sY29udmVydExpbmVhclRvR2FtbWE6ZnVuY3Rpb24oYil7dGhpcy5jb3B5TGluZWFyVG9HYW1tYSh0aGlzLGIpO3JldHVybiB0aGlzfSxjb3B5U1JHQlRvTGluZWFyOmZ1bmN0aW9uKCl7ZnVuY3Rpb24gYihlKXtyZXR1cm4uMDQwNDU+ZT8uMDc3Mzk5MzgwOCplOk1hdGgucG93KC45NDc4NjcyOTg2KmUrLjA1MjEzMjcwMTQsMi40KX1yZXR1cm4gZnVuY3Rpb24oZSl7dGhpcy5yPWIoZS5yKTt0aGlzLmc9YihlLmcpO3RoaXMuYj0KYihlLmIpO3JldHVybiB0aGlzfX0oKSxjb3B5TGluZWFyVG9TUkdCOmZ1bmN0aW9uKCl7ZnVuY3Rpb24gYihlKXtyZXR1cm4uMDAzMTMwOD5lPzEyLjkyKmU6MS4wNTUqTWF0aC5wb3coZSwuNDE2NjYpLS4wNTV9cmV0dXJuIGZ1bmN0aW9uKGUpe3RoaXMucj1iKGUucik7dGhpcy5nPWIoZS5nKTt0aGlzLmI9YihlLmIpO3JldHVybiB0aGlzfX0oKSxjb252ZXJ0U1JHQlRvTGluZWFyOmZ1bmN0aW9uKCl7dGhpcy5jb3B5U1JHQlRvTGluZWFyKHRoaXMpO3JldHVybiB0aGlzfSxjb252ZXJ0TGluZWFyVG9TUkdCOmZ1bmN0aW9uKCl7dGhpcy5jb3B5TGluZWFyVG9TUkdCKHRoaXMpO3JldHVybiB0aGlzfSxnZXRIZXg6ZnVuY3Rpb24oKXtyZXR1cm4gMjU1KnRoaXMucjw8MTZeMjU1KnRoaXMuZzw8OF4yNTUqdGhpcy5iPDwwfSxnZXRIZXhTdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4oIjAwMDAwMCIrdGhpcy5nZXRIZXgoKS50b1N0cmluZygxNikpLnNsaWNlKC02KX0sZ2V0SFNMOmZ1bmN0aW9uKGIpe3ZvaWQgMD09PQpiJiYoY29uc29sZS53YXJuKCJUSFJFRS5Db2xvcjogLmdldEhTTCgpIHRhcmdldCBpcyBub3cgcmVxdWlyZWQiKSxiPXtoOjAsczowLGw6MH0pO3ZhciBlPXRoaXMucixoPXRoaXMuZyxuPXRoaXMuYix1PU1hdGgubWF4KGUsaCxuKSx3PU1hdGgubWluKGUsaCxuKSx6LEU9KHcrdSkvMjtpZih3PT09dSl3PXo9MDtlbHNle3ZhciBIPXUtdzt3PS41Pj1FP0gvKHUrdyk6SC8oMi11LXcpO3N3aXRjaCh1KXtjYXNlIGU6ej0oaC1uKS9IKyhoPG4/NjowKTticmVhaztjYXNlIGg6ej0obi1lKS9IKzI7YnJlYWs7Y2FzZSBuOno9KGUtaCkvSCs0fXovPTZ9Yi5oPXo7Yi5zPXc7Yi5sPUU7cmV0dXJuIGJ9LGdldFN0eWxlOmZ1bmN0aW9uKCl7cmV0dXJuInJnYigiKygyNTUqdGhpcy5yfDApKyIsIisoMjU1KnRoaXMuZ3wwKSsiLCIrKDI1NSp0aGlzLmJ8MCkrIikifSxvZmZzZXRIU0w6ZnVuY3Rpb24oKXt2YXIgYj17fTtyZXR1cm4gZnVuY3Rpb24oZSxoLG4pe3RoaXMuZ2V0SFNMKGIpO2IuaCs9CmU7Yi5zKz1oO2IubCs9bjt0aGlzLnNldEhTTChiLmgsYi5zLGIubCk7cmV0dXJuIHRoaXN9fSgpLGFkZDpmdW5jdGlvbihiKXt0aGlzLnIrPWIucjt0aGlzLmcrPWIuZzt0aGlzLmIrPWIuYjtyZXR1cm4gdGhpc30sYWRkQ29sb3JzOmZ1bmN0aW9uKGIsZSl7dGhpcy5yPWIucitlLnI7dGhpcy5nPWIuZytlLmc7dGhpcy5iPWIuYitlLmI7cmV0dXJuIHRoaXN9LGFkZFNjYWxhcjpmdW5jdGlvbihiKXt0aGlzLnIrPWI7dGhpcy5nKz1iO3RoaXMuYis9YjtyZXR1cm4gdGhpc30sc3ViOmZ1bmN0aW9uKGIpe3RoaXMucj1NYXRoLm1heCgwLHRoaXMuci1iLnIpO3RoaXMuZz1NYXRoLm1heCgwLHRoaXMuZy1iLmcpO3RoaXMuYj1NYXRoLm1heCgwLHRoaXMuYi1iLmIpO3JldHVybiB0aGlzfSxtdWx0aXBseTpmdW5jdGlvbihiKXt0aGlzLnIqPWIucjt0aGlzLmcqPWIuZzt0aGlzLmIqPWIuYjtyZXR1cm4gdGhpc30sbXVsdGlwbHlTY2FsYXI6ZnVuY3Rpb24oYil7dGhpcy5yKj1iO3RoaXMuZyo9CmI7dGhpcy5iKj1iO3JldHVybiB0aGlzfSxsZXJwOmZ1bmN0aW9uKGIsZSl7dGhpcy5yKz0oYi5yLXRoaXMucikqZTt0aGlzLmcrPShiLmctdGhpcy5nKSplO3RoaXMuYis9KGIuYi10aGlzLmIpKmU7cmV0dXJuIHRoaXN9LGxlcnBIU0w6ZnVuY3Rpb24oKXt2YXIgYj17aDowLHM6MCxsOjB9LGU9e2g6MCxzOjAsbDowfTtyZXR1cm4gZnVuY3Rpb24oaCxuKXt0aGlzLmdldEhTTChiKTtoLmdldEhTTChlKTtoPW9iLmxlcnAoYi5oLGUuaCxuKTt2YXIgdT1vYi5sZXJwKGIucyxlLnMsbik7bj1vYi5sZXJwKGIubCxlLmwsbik7dGhpcy5zZXRIU0woaCx1LG4pO3JldHVybiB0aGlzfX0oKSxlcXVhbHM6ZnVuY3Rpb24oYil7cmV0dXJuIGIucj09PXRoaXMuciYmYi5nPT09dGhpcy5nJiZiLmI9PT10aGlzLmJ9LGZyb21BcnJheTpmdW5jdGlvbihiLGUpe3ZvaWQgMD09PWUmJihlPTApO3RoaXMucj1iW2VdO3RoaXMuZz1iW2UrMV07dGhpcy5iPWJbZSsyXTtyZXR1cm4gdGhpc30sdG9BcnJheTpmdW5jdGlvbihiLAplKXt2b2lkIDA9PT1iJiYoYj1bXSk7dm9pZCAwPT09ZSYmKGU9MCk7YltlXT10aGlzLnI7YltlKzFdPXRoaXMuZztiW2UrMl09dGhpcy5iO3JldHVybiBifSx0b0pTT046ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRIZXgoKX19KTt2YXIgYmI9e2NvbW1vbjp7ZGlmZnVzZTp7dmFsdWU6bmV3IEIoMTU2NTg3MzQpfSxvcGFjaXR5Ont2YWx1ZToxfSxtYXA6e3ZhbHVlOm51bGx9LHV2VHJhbnNmb3JtOnt2YWx1ZTpuZXcgbH0sYWxwaGFNYXA6e3ZhbHVlOm51bGx9fSxzcGVjdWxhcm1hcDp7c3BlY3VsYXJNYXA6e3ZhbHVlOm51bGx9fSxlbnZtYXA6e2Vudk1hcDp7dmFsdWU6bnVsbH0sZmxpcEVudk1hcDp7dmFsdWU6LTF9LHJlZmxlY3Rpdml0eTp7dmFsdWU6MX0scmVmcmFjdGlvblJhdGlvOnt2YWx1ZTouOTh9LG1heE1pcExldmVsOnt2YWx1ZTowfX0sYW9tYXA6e2FvTWFwOnt2YWx1ZTpudWxsfSxhb01hcEludGVuc2l0eTp7dmFsdWU6MX19LGxpZ2h0bWFwOntsaWdodE1hcDp7dmFsdWU6bnVsbH0sCmxpZ2h0TWFwSW50ZW5zaXR5Ont2YWx1ZToxfX0sZW1pc3NpdmVtYXA6e2VtaXNzaXZlTWFwOnt2YWx1ZTpudWxsfX0sYnVtcG1hcDp7YnVtcE1hcDp7dmFsdWU6bnVsbH0sYnVtcFNjYWxlOnt2YWx1ZToxfX0sbm9ybWFsbWFwOntub3JtYWxNYXA6e3ZhbHVlOm51bGx9LG5vcm1hbFNjYWxlOnt2YWx1ZTpuZXcgZCgxLDEpfX0sZGlzcGxhY2VtZW50bWFwOntkaXNwbGFjZW1lbnRNYXA6e3ZhbHVlOm51bGx9LGRpc3BsYWNlbWVudFNjYWxlOnt2YWx1ZToxfSxkaXNwbGFjZW1lbnRCaWFzOnt2YWx1ZTowfX0scm91Z2huZXNzbWFwOntyb3VnaG5lc3NNYXA6e3ZhbHVlOm51bGx9fSxtZXRhbG5lc3NtYXA6e21ldGFsbmVzc01hcDp7dmFsdWU6bnVsbH19LGdyYWRpZW50bWFwOntncmFkaWVudE1hcDp7dmFsdWU6bnVsbH19LGZvZzp7Zm9nRGVuc2l0eTp7dmFsdWU6Mi41RS00fSxmb2dOZWFyOnt2YWx1ZToxfSxmb2dGYXI6e3ZhbHVlOjJFM30sZm9nQ29sb3I6e3ZhbHVlOm5ldyBCKDE2Nzc3MjE1KX19LApsaWdodHM6e2FtYmllbnRMaWdodENvbG9yOnt2YWx1ZTpbXX0sbGlnaHRQcm9iZTp7dmFsdWU6W119LGRpcmVjdGlvbmFsTGlnaHRzOnt2YWx1ZTpbXSxwcm9wZXJ0aWVzOntkaXJlY3Rpb246e30sY29sb3I6e30sc2hhZG93Ont9LHNoYWRvd0JpYXM6e30sc2hhZG93UmFkaXVzOnt9LHNoYWRvd01hcFNpemU6e319fSxkaXJlY3Rpb25hbFNoYWRvd01hcDp7dmFsdWU6W119LGRpcmVjdGlvbmFsU2hhZG93TWF0cml4Ont2YWx1ZTpbXX0sc3BvdExpZ2h0czp7dmFsdWU6W10scHJvcGVydGllczp7Y29sb3I6e30scG9zaXRpb246e30sZGlyZWN0aW9uOnt9LGRpc3RhbmNlOnt9LGNvbmVDb3M6e30scGVudW1icmFDb3M6e30sZGVjYXk6e30sc2hhZG93Ont9LHNoYWRvd0JpYXM6e30sc2hhZG93UmFkaXVzOnt9LHNoYWRvd01hcFNpemU6e319fSxzcG90U2hhZG93TWFwOnt2YWx1ZTpbXX0sc3BvdFNoYWRvd01hdHJpeDp7dmFsdWU6W119LHBvaW50TGlnaHRzOnt2YWx1ZTpbXSxwcm9wZXJ0aWVzOntjb2xvcjp7fSwKcG9zaXRpb246e30sZGVjYXk6e30sZGlzdGFuY2U6e30sc2hhZG93Ont9LHNoYWRvd0JpYXM6e30sc2hhZG93UmFkaXVzOnt9LHNoYWRvd01hcFNpemU6e30sc2hhZG93Q2FtZXJhTmVhcjp7fSxzaGFkb3dDYW1lcmFGYXI6e319fSxwb2ludFNoYWRvd01hcDp7dmFsdWU6W119LHBvaW50U2hhZG93TWF0cml4Ont2YWx1ZTpbXX0saGVtaXNwaGVyZUxpZ2h0czp7dmFsdWU6W10scHJvcGVydGllczp7ZGlyZWN0aW9uOnt9LHNreUNvbG9yOnt9LGdyb3VuZENvbG9yOnt9fX0scmVjdEFyZWFMaWdodHM6e3ZhbHVlOltdLHByb3BlcnRpZXM6e2NvbG9yOnt9LHBvc2l0aW9uOnt9LHdpZHRoOnt9LGhlaWdodDp7fX19fSxwb2ludHM6e2RpZmZ1c2U6e3ZhbHVlOm5ldyBCKDE1NjU4NzM0KX0sb3BhY2l0eTp7dmFsdWU6MX0sc2l6ZTp7dmFsdWU6MX0sc2NhbGU6e3ZhbHVlOjF9LG1hcDp7dmFsdWU6bnVsbH0sdXZUcmFuc2Zvcm06e3ZhbHVlOm5ldyBsfX0sc3ByaXRlOntkaWZmdXNlOnt2YWx1ZTpuZXcgQigxNTY1ODczNCl9LApvcGFjaXR5Ont2YWx1ZToxfSxjZW50ZXI6e3ZhbHVlOm5ldyBkKC41LC41KX0scm90YXRpb246e3ZhbHVlOjB9LG1hcDp7dmFsdWU6bnVsbH0sdXZUcmFuc2Zvcm06e3ZhbHVlOm5ldyBsfX19LGlkPXtiYXNpYzp7dW5pZm9ybXM6RChbYmIuY29tbW9uLGJiLnNwZWN1bGFybWFwLGJiLmVudm1hcCxiYi5hb21hcCxiYi5saWdodG1hcCxiYi5mb2ddKSx2ZXJ0ZXhTaGFkZXI6emIubWVzaGJhc2ljX3ZlcnQsZnJhZ21lbnRTaGFkZXI6emIubWVzaGJhc2ljX2ZyYWd9LGxhbWJlcnQ6e3VuaWZvcm1zOkQoW2JiLmNvbW1vbixiYi5zcGVjdWxhcm1hcCxiYi5lbnZtYXAsYmIuYW9tYXAsYmIubGlnaHRtYXAsYmIuZW1pc3NpdmVtYXAsYmIuZm9nLGJiLmxpZ2h0cyx7ZW1pc3NpdmU6e3ZhbHVlOm5ldyBCKDApfX1dKSx2ZXJ0ZXhTaGFkZXI6emIubWVzaGxhbWJlcnRfdmVydCxmcmFnbWVudFNoYWRlcjp6Yi5tZXNobGFtYmVydF9mcmFnfSxwaG9uZzp7dW5pZm9ybXM6RChbYmIuY29tbW9uLGJiLnNwZWN1bGFybWFwLApiYi5lbnZtYXAsYmIuYW9tYXAsYmIubGlnaHRtYXAsYmIuZW1pc3NpdmVtYXAsYmIuYnVtcG1hcCxiYi5ub3JtYWxtYXAsYmIuZGlzcGxhY2VtZW50bWFwLGJiLmdyYWRpZW50bWFwLGJiLmZvZyxiYi5saWdodHMse2VtaXNzaXZlOnt2YWx1ZTpuZXcgQigwKX0sc3BlY3VsYXI6e3ZhbHVlOm5ldyBCKDExMTg0ODEpfSxzaGluaW5lc3M6e3ZhbHVlOjMwfX1dKSx2ZXJ0ZXhTaGFkZXI6emIubWVzaHBob25nX3ZlcnQsZnJhZ21lbnRTaGFkZXI6emIubWVzaHBob25nX2ZyYWd9LHN0YW5kYXJkOnt1bmlmb3JtczpEKFtiYi5jb21tb24sYmIuZW52bWFwLGJiLmFvbWFwLGJiLmxpZ2h0bWFwLGJiLmVtaXNzaXZlbWFwLGJiLmJ1bXBtYXAsYmIubm9ybWFsbWFwLGJiLmRpc3BsYWNlbWVudG1hcCxiYi5yb3VnaG5lc3NtYXAsYmIubWV0YWxuZXNzbWFwLGJiLmZvZyxiYi5saWdodHMse2VtaXNzaXZlOnt2YWx1ZTpuZXcgQigwKX0scm91Z2huZXNzOnt2YWx1ZTouNX0sbWV0YWxuZXNzOnt2YWx1ZTouNX0sCmVudk1hcEludGVuc2l0eTp7dmFsdWU6MX19XSksdmVydGV4U2hhZGVyOnpiLm1lc2hwaHlzaWNhbF92ZXJ0LGZyYWdtZW50U2hhZGVyOnpiLm1lc2hwaHlzaWNhbF9mcmFnfSxtYXRjYXA6e3VuaWZvcm1zOkQoW2JiLmNvbW1vbixiYi5idW1wbWFwLGJiLm5vcm1hbG1hcCxiYi5kaXNwbGFjZW1lbnRtYXAsYmIuZm9nLHttYXRjYXA6e3ZhbHVlOm51bGx9fV0pLHZlcnRleFNoYWRlcjp6Yi5tZXNobWF0Y2FwX3ZlcnQsZnJhZ21lbnRTaGFkZXI6emIubWVzaG1hdGNhcF9mcmFnfSxwb2ludHM6e3VuaWZvcm1zOkQoW2JiLnBvaW50cyxiYi5mb2ddKSx2ZXJ0ZXhTaGFkZXI6emIucG9pbnRzX3ZlcnQsZnJhZ21lbnRTaGFkZXI6emIucG9pbnRzX2ZyYWd9LGRhc2hlZDp7dW5pZm9ybXM6RChbYmIuY29tbW9uLGJiLmZvZyx7c2NhbGU6e3ZhbHVlOjF9LGRhc2hTaXplOnt2YWx1ZToxfSx0b3RhbFNpemU6e3ZhbHVlOjJ9fV0pLHZlcnRleFNoYWRlcjp6Yi5saW5lZGFzaGVkX3ZlcnQsZnJhZ21lbnRTaGFkZXI6emIubGluZWRhc2hlZF9mcmFnfSwKZGVwdGg6e3VuaWZvcm1zOkQoW2JiLmNvbW1vbixiYi5kaXNwbGFjZW1lbnRtYXBdKSx2ZXJ0ZXhTaGFkZXI6emIuZGVwdGhfdmVydCxmcmFnbWVudFNoYWRlcjp6Yi5kZXB0aF9mcmFnfSxub3JtYWw6e3VuaWZvcm1zOkQoW2JiLmNvbW1vbixiYi5idW1wbWFwLGJiLm5vcm1hbG1hcCxiYi5kaXNwbGFjZW1lbnRtYXAse29wYWNpdHk6e3ZhbHVlOjF9fV0pLHZlcnRleFNoYWRlcjp6Yi5ub3JtYWxfdmVydCxmcmFnbWVudFNoYWRlcjp6Yi5ub3JtYWxfZnJhZ30sc3ByaXRlOnt1bmlmb3JtczpEKFtiYi5zcHJpdGUsYmIuZm9nXSksdmVydGV4U2hhZGVyOnpiLnNwcml0ZV92ZXJ0LGZyYWdtZW50U2hhZGVyOnpiLnNwcml0ZV9mcmFnfSxiYWNrZ3JvdW5kOnt1bmlmb3Jtczp7dXZUcmFuc2Zvcm06e3ZhbHVlOm5ldyBsfSx0MkQ6e3ZhbHVlOm51bGx9fSx2ZXJ0ZXhTaGFkZXI6emIuYmFja2dyb3VuZF92ZXJ0LGZyYWdtZW50U2hhZGVyOnpiLmJhY2tncm91bmRfZnJhZ30sY3ViZTp7dW5pZm9ybXM6e3RDdWJlOnt2YWx1ZTpudWxsfSwKdEZsaXA6e3ZhbHVlOi0xfSxvcGFjaXR5Ont2YWx1ZToxfX0sdmVydGV4U2hhZGVyOnpiLmN1YmVfdmVydCxmcmFnbWVudFNoYWRlcjp6Yi5jdWJlX2ZyYWd9LGVxdWlyZWN0Ont1bmlmb3Jtczp7dEVxdWlyZWN0Ont2YWx1ZTpudWxsfX0sdmVydGV4U2hhZGVyOnpiLmVxdWlyZWN0X3ZlcnQsZnJhZ21lbnRTaGFkZXI6emIuZXF1aXJlY3RfZnJhZ30sZGlzdGFuY2VSR0JBOnt1bmlmb3JtczpEKFtiYi5jb21tb24sYmIuZGlzcGxhY2VtZW50bWFwLHtyZWZlcmVuY2VQb3NpdGlvbjp7dmFsdWU6bmV3IGd9LG5lYXJEaXN0YW5jZTp7dmFsdWU6MX0sZmFyRGlzdGFuY2U6e3ZhbHVlOjFFM319XSksdmVydGV4U2hhZGVyOnpiLmRpc3RhbmNlUkdCQV92ZXJ0LGZyYWdtZW50U2hhZGVyOnpiLmRpc3RhbmNlUkdCQV9mcmFnfSxzaGFkb3c6e3VuaWZvcm1zOkQoW2JiLmxpZ2h0cyxiYi5mb2cse2NvbG9yOnt2YWx1ZTpuZXcgQigwKX0sb3BhY2l0eTp7dmFsdWU6MX19XSksdmVydGV4U2hhZGVyOnpiLnNoYWRvd192ZXJ0LApmcmFnbWVudFNoYWRlcjp6Yi5zaGFkb3dfZnJhZ319O2lkLnBoeXNpY2FsPXt1bmlmb3JtczpEKFtpZC5zdGFuZGFyZC51bmlmb3Jtcyx7Y2xlYXJDb2F0Ont2YWx1ZTowfSxjbGVhckNvYXRSb3VnaG5lc3M6e3ZhbHVlOjB9fV0pLHZlcnRleFNoYWRlcjp6Yi5tZXNocGh5c2ljYWxfdmVydCxmcmFnbWVudFNoYWRlcjp6Yi5tZXNocGh5c2ljYWxfZnJhZ307T2JqZWN0LmFzc2lnbihMLnByb3RvdHlwZSx7Y2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9LGNvcHk6ZnVuY3Rpb24oYil7dGhpcy5hPWIuYTt0aGlzLmI9Yi5iO3RoaXMuYz1iLmM7dGhpcy5ub3JtYWwuY29weShiLm5vcm1hbCk7dGhpcy5jb2xvci5jb3B5KGIuY29sb3IpO3RoaXMubWF0ZXJpYWxJbmRleD1iLm1hdGVyaWFsSW5kZXg7Zm9yKHZhciBlPTAsaD1iLnZlcnRleE5vcm1hbHMubGVuZ3RoO2U8aDtlKyspdGhpcy52ZXJ0ZXhOb3JtYWxzW2VdPWIudmVydGV4Tm9ybWFsc1tlXS5jbG9uZSgpOwplPTA7Zm9yKGg9Yi52ZXJ0ZXhDb2xvcnMubGVuZ3RoO2U8aDtlKyspdGhpcy52ZXJ0ZXhDb2xvcnNbZV09Yi52ZXJ0ZXhDb2xvcnNbZV0uY2xvbmUoKTtyZXR1cm4gdGhpc319KTtKLlJvdGF0aW9uT3JkZXJzPSJYWVogWVpYIFpYWSBYWlkgWVhaIFpZWCIuc3BsaXQoIiAiKTtKLkRlZmF1bHRPcmRlcj0iWFlaIjtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhKLnByb3RvdHlwZSx7eDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3h9LHNldDpmdW5jdGlvbihiKXt0aGlzLl94PWI7dGhpcy5vbkNoYW5nZUNhbGxiYWNrKCl9fSx5OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5feX0sc2V0OmZ1bmN0aW9uKGIpe3RoaXMuX3k9Yjt0aGlzLm9uQ2hhbmdlQ2FsbGJhY2soKX19LHo6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl96fSxzZXQ6ZnVuY3Rpb24oYil7dGhpcy5fej1iO3RoaXMub25DaGFuZ2VDYWxsYmFjaygpfX0sb3JkZXI6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9vcmRlcn0sCnNldDpmdW5jdGlvbihiKXt0aGlzLl9vcmRlcj1iO3RoaXMub25DaGFuZ2VDYWxsYmFjaygpfX19KTtPYmplY3QuYXNzaWduKEoucHJvdG90eXBlLHtpc0V1bGVyOiEwLHNldDpmdW5jdGlvbihiLGUsaCxuKXt0aGlzLl94PWI7dGhpcy5feT1lO3RoaXMuX3o9aDt0aGlzLl9vcmRlcj1ufHx0aGlzLl9vcmRlcjt0aGlzLm9uQ2hhbmdlQ2FsbGJhY2soKTtyZXR1cm4gdGhpc30sY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy5feCx0aGlzLl95LHRoaXMuX3osdGhpcy5fb3JkZXIpfSxjb3B5OmZ1bmN0aW9uKGIpe3RoaXMuX3g9Yi5feDt0aGlzLl95PWIuX3k7dGhpcy5fej1iLl96O3RoaXMuX29yZGVyPWIuX29yZGVyO3RoaXMub25DaGFuZ2VDYWxsYmFjaygpO3JldHVybiB0aGlzfSxzZXRGcm9tUm90YXRpb25NYXRyaXg6ZnVuY3Rpb24oYixlLGgpe3ZhciBuPW9iLmNsYW1wLHU9Yi5lbGVtZW50cztiPXVbMF07dmFyIHc9dVs0XSx6PXVbOF0sRT0KdVsxXSxIPXVbNV0sST11WzldLE89dVsyXSxRPXVbNl07dT11WzEwXTtlPWV8fHRoaXMuX29yZGVyOyJYWVoiPT09ZT8odGhpcy5feT1NYXRoLmFzaW4obih6LC0xLDEpKSwuOTk5OTk+TWF0aC5hYnMoeik/KHRoaXMuX3g9TWF0aC5hdGFuMigtSSx1KSx0aGlzLl96PU1hdGguYXRhbjIoLXcsYikpOih0aGlzLl94PU1hdGguYXRhbjIoUSxIKSx0aGlzLl96PTApKToiWVhaIj09PWU/KHRoaXMuX3g9TWF0aC5hc2luKC1uKEksLTEsMSkpLC45OTk5OT5NYXRoLmFicyhJKT8odGhpcy5feT1NYXRoLmF0YW4yKHosdSksdGhpcy5fej1NYXRoLmF0YW4yKEUsSCkpOih0aGlzLl95PU1hdGguYXRhbjIoLU8sYiksdGhpcy5fej0wKSk6IlpYWSI9PT1lPyh0aGlzLl94PU1hdGguYXNpbihuKFEsLTEsMSkpLC45OTk5OT5NYXRoLmFicyhRKT8odGhpcy5feT1NYXRoLmF0YW4yKC1PLHUpLHRoaXMuX3o9TWF0aC5hdGFuMigtdyxIKSk6KHRoaXMuX3k9MCx0aGlzLl96PU1hdGguYXRhbjIoRSxiKSkpOgoiWllYIj09PWU/KHRoaXMuX3k9TWF0aC5hc2luKC1uKE8sLTEsMSkpLC45OTk5OT5NYXRoLmFicyhPKT8odGhpcy5feD1NYXRoLmF0YW4yKFEsdSksdGhpcy5fej1NYXRoLmF0YW4yKEUsYikpOih0aGlzLl94PTAsdGhpcy5fej1NYXRoLmF0YW4yKC13LEgpKSk6IllaWCI9PT1lPyh0aGlzLl96PU1hdGguYXNpbihuKEUsLTEsMSkpLC45OTk5OT5NYXRoLmFicyhFKT8odGhpcy5feD1NYXRoLmF0YW4yKC1JLEgpLHRoaXMuX3k9TWF0aC5hdGFuMigtTyxiKSk6KHRoaXMuX3g9MCx0aGlzLl95PU1hdGguYXRhbjIoeix1KSkpOiJYWlkiPT09ZT8odGhpcy5fej1NYXRoLmFzaW4oLW4odywtMSwxKSksLjk5OTk5Pk1hdGguYWJzKHcpPyh0aGlzLl94PU1hdGguYXRhbjIoUSxIKSx0aGlzLl95PU1hdGguYXRhbjIoeixiKSk6KHRoaXMuX3g9TWF0aC5hdGFuMigtSSx1KSx0aGlzLl95PTApKTpjb25zb2xlLndhcm4oIlRIUkVFLkV1bGVyOiAuc2V0RnJvbVJvdGF0aW9uTWF0cml4KCkgZ2l2ZW4gdW5zdXBwb3J0ZWQgb3JkZXI6ICIrCmUpO3RoaXMuX29yZGVyPWU7aWYoITEhPT1oKXRoaXMub25DaGFuZ2VDYWxsYmFjaygpO3JldHVybiB0aGlzfSxzZXRGcm9tUXVhdGVybmlvbjpmdW5jdGlvbigpe3ZhciBiPW5ldyBDO3JldHVybiBmdW5jdGlvbihlLGgsbil7Yi5tYWtlUm90YXRpb25Gcm9tUXVhdGVybmlvbihlKTtyZXR1cm4gdGhpcy5zZXRGcm9tUm90YXRpb25NYXRyaXgoYixoLG4pfX0oKSxzZXRGcm9tVmVjdG9yMzpmdW5jdGlvbihiLGUpe3JldHVybiB0aGlzLnNldChiLngsYi55LGIueixlfHx0aGlzLl9vcmRlcil9LHJlb3JkZXI6ZnVuY3Rpb24oKXt2YXIgYj1uZXcgZjtyZXR1cm4gZnVuY3Rpb24oZSl7Yi5zZXRGcm9tRXVsZXIodGhpcyk7cmV0dXJuIHRoaXMuc2V0RnJvbVF1YXRlcm5pb24oYixlKX19KCksZXF1YWxzOmZ1bmN0aW9uKGIpe3JldHVybiBiLl94PT09dGhpcy5feCYmYi5feT09PXRoaXMuX3kmJmIuX3o9PT10aGlzLl96JiZiLl9vcmRlcj09PXRoaXMuX29yZGVyfSxmcm9tQXJyYXk6ZnVuY3Rpb24oYil7dGhpcy5feD0KYlswXTt0aGlzLl95PWJbMV07dGhpcy5fej1iWzJdO3ZvaWQgMCE9PWJbM10mJih0aGlzLl9vcmRlcj1iWzNdKTt0aGlzLm9uQ2hhbmdlQ2FsbGJhY2soKTtyZXR1cm4gdGhpc30sdG9BcnJheTpmdW5jdGlvbihiLGUpe3ZvaWQgMD09PWImJihiPVtdKTt2b2lkIDA9PT1lJiYoZT0wKTtiW2VdPXRoaXMuX3g7YltlKzFdPXRoaXMuX3k7YltlKzJdPXRoaXMuX3o7YltlKzNdPXRoaXMuX29yZGVyO3JldHVybiBifSx0b1ZlY3RvcjM6ZnVuY3Rpb24oYil7cmV0dXJuIGI/Yi5zZXQodGhpcy5feCx0aGlzLl95LHRoaXMuX3opOm5ldyBnKHRoaXMuX3gsdGhpcy5feSx0aGlzLl96KX0sb25DaGFuZ2U6ZnVuY3Rpb24oYil7dGhpcy5vbkNoYW5nZUNhbGxiYWNrPWI7cmV0dXJuIHRoaXN9LG9uQ2hhbmdlQ2FsbGJhY2s6ZnVuY3Rpb24oKXt9fSk7T2JqZWN0LmFzc2lnbihQLnByb3RvdHlwZSx7c2V0OmZ1bmN0aW9uKGIpe3RoaXMubWFzaz0xPDxifDB9LGVuYWJsZTpmdW5jdGlvbihiKXt0aGlzLm1hc2s9CnRoaXMubWFza3wxPDxifDB9LHRvZ2dsZTpmdW5jdGlvbihiKXt0aGlzLm1hc2tePTE8PGJ8MH0sZGlzYWJsZTpmdW5jdGlvbihiKXt0aGlzLm1hc2smPX4oMTw8YnwwKX0sdGVzdDpmdW5jdGlvbihiKXtyZXR1cm4gMCE9PSh0aGlzLm1hc2smYi5tYXNrKX19KTt2YXIgTG49MDtTLkRlZmF1bHRVcD1uZXcgZygwLDEsMCk7Uy5EZWZhdWx0TWF0cml4QXV0b1VwZGF0ZT0hMDtTLnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoYy5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpTLGlzT2JqZWN0M0Q6ITAsb25CZWZvcmVSZW5kZXI6ZnVuY3Rpb24oKXt9LG9uQWZ0ZXJSZW5kZXI6ZnVuY3Rpb24oKXt9LGFwcGx5TWF0cml4OmZ1bmN0aW9uKGIpe3RoaXMubWF0cml4QXV0b1VwZGF0ZSYmdGhpcy51cGRhdGVNYXRyaXgoKTt0aGlzLm1hdHJpeC5wcmVtdWx0aXBseShiKTt0aGlzLm1hdHJpeC5kZWNvbXBvc2UodGhpcy5wb3NpdGlvbix0aGlzLnF1YXRlcm5pb24sdGhpcy5zY2FsZSl9LAphcHBseVF1YXRlcm5pb246ZnVuY3Rpb24oYil7dGhpcy5xdWF0ZXJuaW9uLnByZW11bHRpcGx5KGIpO3JldHVybiB0aGlzfSxzZXRSb3RhdGlvbkZyb21BeGlzQW5nbGU6ZnVuY3Rpb24oYixlKXt0aGlzLnF1YXRlcm5pb24uc2V0RnJvbUF4aXNBbmdsZShiLGUpfSxzZXRSb3RhdGlvbkZyb21FdWxlcjpmdW5jdGlvbihiKXt0aGlzLnF1YXRlcm5pb24uc2V0RnJvbUV1bGVyKGIsITApfSxzZXRSb3RhdGlvbkZyb21NYXRyaXg6ZnVuY3Rpb24oYil7dGhpcy5xdWF0ZXJuaW9uLnNldEZyb21Sb3RhdGlvbk1hdHJpeChiKX0sc2V0Um90YXRpb25Gcm9tUXVhdGVybmlvbjpmdW5jdGlvbihiKXt0aGlzLnF1YXRlcm5pb24uY29weShiKX0scm90YXRlT25BeGlzOmZ1bmN0aW9uKCl7dmFyIGI9bmV3IGY7cmV0dXJuIGZ1bmN0aW9uKGUsaCl7Yi5zZXRGcm9tQXhpc0FuZ2xlKGUsaCk7dGhpcy5xdWF0ZXJuaW9uLm11bHRpcGx5KGIpO3JldHVybiB0aGlzfX0oKSxyb3RhdGVPbldvcmxkQXhpczpmdW5jdGlvbigpe3ZhciBiPQpuZXcgZjtyZXR1cm4gZnVuY3Rpb24oZSxoKXtiLnNldEZyb21BeGlzQW5nbGUoZSxoKTt0aGlzLnF1YXRlcm5pb24ucHJlbXVsdGlwbHkoYik7cmV0dXJuIHRoaXN9fSgpLHJvdGF0ZVg6ZnVuY3Rpb24oKXt2YXIgYj1uZXcgZygxLDAsMCk7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnJvdGF0ZU9uQXhpcyhiLGUpfX0oKSxyb3RhdGVZOmZ1bmN0aW9uKCl7dmFyIGI9bmV3IGcoMCwxLDApO3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5yb3RhdGVPbkF4aXMoYixlKX19KCkscm90YXRlWjpmdW5jdGlvbigpe3ZhciBiPW5ldyBnKDAsMCwxKTtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucm90YXRlT25BeGlzKGIsZSl9fSgpLHRyYW5zbGF0ZU9uQXhpczpmdW5jdGlvbigpe3ZhciBiPW5ldyBnO3JldHVybiBmdW5jdGlvbihlLGgpe2IuY29weShlKS5hcHBseVF1YXRlcm5pb24odGhpcy5xdWF0ZXJuaW9uKTt0aGlzLnBvc2l0aW9uLmFkZChiLm11bHRpcGx5U2NhbGFyKGgpKTsKcmV0dXJuIHRoaXN9fSgpLHRyYW5zbGF0ZVg6ZnVuY3Rpb24oKXt2YXIgYj1uZXcgZygxLDAsMCk7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnRyYW5zbGF0ZU9uQXhpcyhiLGUpfX0oKSx0cmFuc2xhdGVZOmZ1bmN0aW9uKCl7dmFyIGI9bmV3IGcoMCwxLDApO3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy50cmFuc2xhdGVPbkF4aXMoYixlKX19KCksdHJhbnNsYXRlWjpmdW5jdGlvbigpe3ZhciBiPW5ldyBnKDAsMCwxKTtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMudHJhbnNsYXRlT25BeGlzKGIsZSl9fSgpLGxvY2FsVG9Xb3JsZDpmdW5jdGlvbihiKXtyZXR1cm4gYi5hcHBseU1hdHJpeDQodGhpcy5tYXRyaXhXb3JsZCl9LHdvcmxkVG9Mb2NhbDpmdW5jdGlvbigpe3ZhciBiPW5ldyBDO3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZS5hcHBseU1hdHJpeDQoYi5nZXRJbnZlcnNlKHRoaXMubWF0cml4V29ybGQpKX19KCksbG9va0F0OmZ1bmN0aW9uKCl7dmFyIGI9Cm5ldyBmLGU9bmV3IEMsaD1uZXcgZyxuPW5ldyBnO3JldHVybiBmdW5jdGlvbih1LHcseil7dS5pc1ZlY3RvcjM/aC5jb3B5KHUpOmguc2V0KHUsdyx6KTt1PXRoaXMucGFyZW50O3RoaXMudXBkYXRlV29ybGRNYXRyaXgoITAsITEpO24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHRoaXMubWF0cml4V29ybGQpO3RoaXMuaXNDYW1lcmF8fHRoaXMuaXNMaWdodD9lLmxvb2tBdChuLGgsdGhpcy51cCk6ZS5sb29rQXQoaCxuLHRoaXMudXApO3RoaXMucXVhdGVybmlvbi5zZXRGcm9tUm90YXRpb25NYXRyaXgoZSk7dSYmKGUuZXh0cmFjdFJvdGF0aW9uKHUubWF0cml4V29ybGQpLGIuc2V0RnJvbVJvdGF0aW9uTWF0cml4KGUpLHRoaXMucXVhdGVybmlvbi5wcmVtdWx0aXBseShiLmludmVyc2UoKSkpfX0oKSxhZGQ6ZnVuY3Rpb24oYil7aWYoMTxhcmd1bWVudHMubGVuZ3RoKXtmb3IodmFyIGU9MDtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXRoaXMuYWRkKGFyZ3VtZW50c1tlXSk7cmV0dXJuIHRoaXN9aWYoYj09PQp0aGlzKXJldHVybiBjb25zb2xlLmVycm9yKCJUSFJFRS5PYmplY3QzRC5hZGQ6IG9iamVjdCBjYW4ndCBiZSBhZGRlZCBhcyBhIGNoaWxkIG9mIGl0c2VsZi4iLGIpLHRoaXM7YiYmYi5pc09iamVjdDNEPyhudWxsIT09Yi5wYXJlbnQmJmIucGFyZW50LnJlbW92ZShiKSxiLnBhcmVudD10aGlzLGIuZGlzcGF0Y2hFdmVudCh7dHlwZToiYWRkZWQifSksdGhpcy5jaGlsZHJlbi5wdXNoKGIpKTpjb25zb2xlLmVycm9yKCJUSFJFRS5PYmplY3QzRC5hZGQ6IG9iamVjdCBub3QgYW4gaW5zdGFuY2Ugb2YgVEhSRUUuT2JqZWN0M0QuIixiKTtyZXR1cm4gdGhpc30scmVtb3ZlOmZ1bmN0aW9uKGIpe2lmKDE8YXJndW1lbnRzLmxlbmd0aCl7Zm9yKHZhciBlPTA7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl0aGlzLnJlbW92ZShhcmd1bWVudHNbZV0pO3JldHVybiB0aGlzfWU9dGhpcy5jaGlsZHJlbi5pbmRleE9mKGIpOy0xIT09ZSYmKGIucGFyZW50PW51bGwsYi5kaXNwYXRjaEV2ZW50KHt0eXBlOiJyZW1vdmVkIn0pLAp0aGlzLmNoaWxkcmVuLnNwbGljZShlLDEpKTtyZXR1cm4gdGhpc30sZ2V0T2JqZWN0QnlJZDpmdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5nZXRPYmplY3RCeVByb3BlcnR5KCJpZCIsYil9LGdldE9iamVjdEJ5TmFtZTpmdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5nZXRPYmplY3RCeVByb3BlcnR5KCJuYW1lIixiKX0sZ2V0T2JqZWN0QnlQcm9wZXJ0eTpmdW5jdGlvbihiLGUpe2lmKHRoaXNbYl09PT1lKXJldHVybiB0aGlzO2Zvcih2YXIgaD0wLG49dGhpcy5jaGlsZHJlbi5sZW5ndGg7aDxuO2grKyl7dmFyIHU9dGhpcy5jaGlsZHJlbltoXS5nZXRPYmplY3RCeVByb3BlcnR5KGIsZSk7aWYodm9pZCAwIT09dSlyZXR1cm4gdX19LGdldFdvcmxkUG9zaXRpb246ZnVuY3Rpb24oYil7dm9pZCAwPT09YiYmKGNvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC5nZXRXb3JsZFBvc2l0aW9uKCkgdGFyZ2V0IGlzIG5vdyByZXF1aXJlZCIpLGI9bmV3IGcpO3RoaXMudXBkYXRlTWF0cml4V29ybGQoITApOwpyZXR1cm4gYi5zZXRGcm9tTWF0cml4UG9zaXRpb24odGhpcy5tYXRyaXhXb3JsZCl9LGdldFdvcmxkUXVhdGVybmlvbjpmdW5jdGlvbigpe3ZhciBiPW5ldyBnLGU9bmV3IGc7cmV0dXJuIGZ1bmN0aW9uKGgpe3ZvaWQgMD09PWgmJihjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdDNEOiAuZ2V0V29ybGRRdWF0ZXJuaW9uKCkgdGFyZ2V0IGlzIG5vdyByZXF1aXJlZCIpLGg9bmV3IGYpO3RoaXMudXBkYXRlTWF0cml4V29ybGQoITApO3RoaXMubWF0cml4V29ybGQuZGVjb21wb3NlKGIsaCxlKTtyZXR1cm4gaH19KCksZ2V0V29ybGRTY2FsZTpmdW5jdGlvbigpe3ZhciBiPW5ldyBnLGU9bmV3IGY7cmV0dXJuIGZ1bmN0aW9uKGgpe3ZvaWQgMD09PWgmJihjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdDNEOiAuZ2V0V29ybGRTY2FsZSgpIHRhcmdldCBpcyBub3cgcmVxdWlyZWQiKSxoPW5ldyBnKTt0aGlzLnVwZGF0ZU1hdHJpeFdvcmxkKCEwKTt0aGlzLm1hdHJpeFdvcmxkLmRlY29tcG9zZShiLAplLGgpO3JldHVybiBofX0oKSxnZXRXb3JsZERpcmVjdGlvbjpmdW5jdGlvbihiKXt2b2lkIDA9PT1iJiYoY29uc29sZS53YXJuKCJUSFJFRS5PYmplY3QzRDogLmdldFdvcmxkRGlyZWN0aW9uKCkgdGFyZ2V0IGlzIG5vdyByZXF1aXJlZCIpLGI9bmV3IGcpO3RoaXMudXBkYXRlTWF0cml4V29ybGQoITApO3ZhciBlPXRoaXMubWF0cml4V29ybGQuZWxlbWVudHM7cmV0dXJuIGIuc2V0KGVbOF0sZVs5XSxlWzEwXSkubm9ybWFsaXplKCl9LHJheWNhc3Q6ZnVuY3Rpb24oKXt9LHRyYXZlcnNlOmZ1bmN0aW9uKGIpe2IodGhpcyk7Zm9yKHZhciBlPXRoaXMuY2hpbGRyZW4saD0wLG49ZS5sZW5ndGg7aDxuO2grKyllW2hdLnRyYXZlcnNlKGIpfSx0cmF2ZXJzZVZpc2libGU6ZnVuY3Rpb24oYil7aWYoITEhPT10aGlzLnZpc2libGUpe2IodGhpcyk7Zm9yKHZhciBlPXRoaXMuY2hpbGRyZW4saD0wLG49ZS5sZW5ndGg7aDxuO2grKyllW2hdLnRyYXZlcnNlVmlzaWJsZShiKX19LHRyYXZlcnNlQW5jZXN0b3JzOmZ1bmN0aW9uKGIpe3ZhciBlPQp0aGlzLnBhcmVudDtudWxsIT09ZSYmKGIoZSksZS50cmF2ZXJzZUFuY2VzdG9ycyhiKSl9LHVwZGF0ZU1hdHJpeDpmdW5jdGlvbigpe3RoaXMubWF0cml4LmNvbXBvc2UodGhpcy5wb3NpdGlvbix0aGlzLnF1YXRlcm5pb24sdGhpcy5zY2FsZSk7dGhpcy5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlPSEwfSx1cGRhdGVNYXRyaXhXb3JsZDpmdW5jdGlvbihiKXt0aGlzLm1hdHJpeEF1dG9VcGRhdGUmJnRoaXMudXBkYXRlTWF0cml4KCk7aWYodGhpcy5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlfHxiKW51bGw9PT10aGlzLnBhcmVudD90aGlzLm1hdHJpeFdvcmxkLmNvcHkodGhpcy5tYXRyaXgpOnRoaXMubWF0cml4V29ybGQubXVsdGlwbHlNYXRyaWNlcyh0aGlzLnBhcmVudC5tYXRyaXhXb3JsZCx0aGlzLm1hdHJpeCksdGhpcy5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlPSExLGI9ITA7Zm9yKHZhciBlPXRoaXMuY2hpbGRyZW4saD0wLG49ZS5sZW5ndGg7aDxuO2grKyllW2hdLnVwZGF0ZU1hdHJpeFdvcmxkKGIpfSwKdXBkYXRlV29ybGRNYXRyaXg6ZnVuY3Rpb24oYixlKXt2YXIgaD10aGlzLnBhcmVudDshMD09PWImJm51bGwhPT1oJiZoLnVwZGF0ZVdvcmxkTWF0cml4KCEwLCExKTt0aGlzLm1hdHJpeEF1dG9VcGRhdGUmJnRoaXMudXBkYXRlTWF0cml4KCk7bnVsbD09PXRoaXMucGFyZW50P3RoaXMubWF0cml4V29ybGQuY29weSh0aGlzLm1hdHJpeCk6dGhpcy5tYXRyaXhXb3JsZC5tdWx0aXBseU1hdHJpY2VzKHRoaXMucGFyZW50Lm1hdHJpeFdvcmxkLHRoaXMubWF0cml4KTtpZighMD09PWUpZm9yKGI9dGhpcy5jaGlsZHJlbixlPTAsaD1iLmxlbmd0aDtlPGg7ZSsrKWJbZV0udXBkYXRlV29ybGRNYXRyaXgoITEsITApfSx0b0pTT046ZnVuY3Rpb24oYil7ZnVuY3Rpb24gZShPLFEpe3ZvaWQgMD09PU9bUS51dWlkXSYmKE9bUS51dWlkXT1RLnRvSlNPTihiKSk7cmV0dXJuIFEudXVpZH1mdW5jdGlvbiBoKE8pe3ZhciBRPVtdLFI7Zm9yKFIgaW4gTyl7dmFyIFU9T1tSXTtkZWxldGUgVS5tZXRhZGF0YTsKUS5wdXNoKFUpfXJldHVybiBRfXZhciBuPXZvaWQgMD09PWJ8fCJzdHJpbmciPT09dHlwZW9mIGIsdT17fTtuJiYoYj17Z2VvbWV0cmllczp7fSxtYXRlcmlhbHM6e30sdGV4dHVyZXM6e30saW1hZ2VzOnt9LHNoYXBlczp7fX0sdS5tZXRhZGF0YT17dmVyc2lvbjo0LjUsdHlwZToiT2JqZWN0IixnZW5lcmF0b3I6Ik9iamVjdDNELnRvSlNPTiJ9KTt2YXIgdz17fTt3LnV1aWQ9dGhpcy51dWlkO3cudHlwZT10aGlzLnR5cGU7IiIhPT10aGlzLm5hbWUmJih3Lm5hbWU9dGhpcy5uYW1lKTshMD09PXRoaXMuY2FzdFNoYWRvdyYmKHcuY2FzdFNoYWRvdz0hMCk7ITA9PT10aGlzLnJlY2VpdmVTaGFkb3cmJih3LnJlY2VpdmVTaGFkb3c9ITApOyExPT09dGhpcy52aXNpYmxlJiYody52aXNpYmxlPSExKTshMT09PXRoaXMuZnJ1c3R1bUN1bGxlZCYmKHcuZnJ1c3R1bUN1bGxlZD0hMSk7MCE9PXRoaXMucmVuZGVyT3JkZXImJih3LnJlbmRlck9yZGVyPXRoaXMucmVuZGVyT3JkZXIpOyJ7fSIhPT0KSlNPTi5zdHJpbmdpZnkodGhpcy51c2VyRGF0YSkmJih3LnVzZXJEYXRhPXRoaXMudXNlckRhdGEpO3cubGF5ZXJzPXRoaXMubGF5ZXJzLm1hc2s7dy5tYXRyaXg9dGhpcy5tYXRyaXgudG9BcnJheSgpOyExPT09dGhpcy5tYXRyaXhBdXRvVXBkYXRlJiYody5tYXRyaXhBdXRvVXBkYXRlPSExKTt0aGlzLmlzTWVzaCYmMCE9PXRoaXMuZHJhd01vZGUmJih3LmRyYXdNb2RlPXRoaXMuZHJhd01vZGUpO2lmKHRoaXMuaXNNZXNofHx0aGlzLmlzTGluZXx8dGhpcy5pc1BvaW50cyl7dy5nZW9tZXRyeT1lKGIuZ2VvbWV0cmllcyx0aGlzLmdlb21ldHJ5KTt2YXIgej10aGlzLmdlb21ldHJ5LnBhcmFtZXRlcnM7aWYodm9pZCAwIT09eiYmdm9pZCAwIT09ei5zaGFwZXMpaWYoej16LnNoYXBlcyxBcnJheS5pc0FycmF5KHopKWZvcih2YXIgRT0wLEg9ei5sZW5ndGg7RTxIO0UrKyllKGIuc2hhcGVzLHpbRV0pO2Vsc2UgZShiLnNoYXBlcyx6KX1pZih2b2lkIDAhPT10aGlzLm1hdGVyaWFsKWlmKEFycmF5LmlzQXJyYXkodGhpcy5tYXRlcmlhbCkpe3o9CltdO0U9MDtmb3IoSD10aGlzLm1hdGVyaWFsLmxlbmd0aDtFPEg7RSsrKXoucHVzaChlKGIubWF0ZXJpYWxzLHRoaXMubWF0ZXJpYWxbRV0pKTt3Lm1hdGVyaWFsPXp9ZWxzZSB3Lm1hdGVyaWFsPWUoYi5tYXRlcmlhbHMsdGhpcy5tYXRlcmlhbCk7aWYoMDx0aGlzLmNoaWxkcmVuLmxlbmd0aClmb3Iody5jaGlsZHJlbj1bXSxFPTA7RTx0aGlzLmNoaWxkcmVuLmxlbmd0aDtFKyspdy5jaGlsZHJlbi5wdXNoKHRoaXMuY2hpbGRyZW5bRV0udG9KU09OKGIpLm9iamVjdCk7aWYobil7bj1oKGIuZ2VvbWV0cmllcyk7RT1oKGIubWF0ZXJpYWxzKTtIPWgoYi50ZXh0dXJlcyk7dmFyIEk9aChiLmltYWdlcyk7ej1oKGIuc2hhcGVzKTswPG4ubGVuZ3RoJiYodS5nZW9tZXRyaWVzPW4pOzA8RS5sZW5ndGgmJih1Lm1hdGVyaWFscz1FKTswPEgubGVuZ3RoJiYodS50ZXh0dXJlcz1IKTswPEkubGVuZ3RoJiYodS5pbWFnZXM9SSk7MDx6Lmxlbmd0aCYmKHUuc2hhcGVzPXopfXUub2JqZWN0PXc7cmV0dXJuIHV9LApjbG9uZTpmdW5jdGlvbihiKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyxiKX0sY29weTpmdW5jdGlvbihiLGUpe3ZvaWQgMD09PWUmJihlPSEwKTt0aGlzLm5hbWU9Yi5uYW1lO3RoaXMudXAuY29weShiLnVwKTt0aGlzLnBvc2l0aW9uLmNvcHkoYi5wb3NpdGlvbik7dGhpcy5xdWF0ZXJuaW9uLmNvcHkoYi5xdWF0ZXJuaW9uKTt0aGlzLnNjYWxlLmNvcHkoYi5zY2FsZSk7dGhpcy5tYXRyaXguY29weShiLm1hdHJpeCk7dGhpcy5tYXRyaXhXb3JsZC5jb3B5KGIubWF0cml4V29ybGQpO3RoaXMubWF0cml4QXV0b1VwZGF0ZT1iLm1hdHJpeEF1dG9VcGRhdGU7dGhpcy5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlPWIubWF0cml4V29ybGROZWVkc1VwZGF0ZTt0aGlzLmxheWVycy5tYXNrPWIubGF5ZXJzLm1hc2s7dGhpcy52aXNpYmxlPWIudmlzaWJsZTt0aGlzLmNhc3RTaGFkb3c9Yi5jYXN0U2hhZG93O3RoaXMucmVjZWl2ZVNoYWRvdz1iLnJlY2VpdmVTaGFkb3c7CnRoaXMuZnJ1c3R1bUN1bGxlZD1iLmZydXN0dW1DdWxsZWQ7dGhpcy5yZW5kZXJPcmRlcj1iLnJlbmRlck9yZGVyO3RoaXMudXNlckRhdGE9SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShiLnVzZXJEYXRhKSk7aWYoITA9PT1lKWZvcihlPTA7ZTxiLmNoaWxkcmVuLmxlbmd0aDtlKyspdGhpcy5hZGQoYi5jaGlsZHJlbltlXS5jbG9uZSgpKTtyZXR1cm4gdGhpc319KTt2YXIgTW49MDtOLnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoYy5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpOLGlzR2VvbWV0cnk6ITAsYXBwbHlNYXRyaXg6ZnVuY3Rpb24oYil7Zm9yKHZhciBlPShuZXcgbCkuZ2V0Tm9ybWFsTWF0cml4KGIpLGg9MCxuPXRoaXMudmVydGljZXMubGVuZ3RoO2g8bjtoKyspdGhpcy52ZXJ0aWNlc1toXS5hcHBseU1hdHJpeDQoYik7aD0wO2ZvcihuPXRoaXMuZmFjZXMubGVuZ3RoO2g8bjtoKyspe2I9dGhpcy5mYWNlc1toXTtiLm5vcm1hbC5hcHBseU1hdHJpeDMoZSkubm9ybWFsaXplKCk7CmZvcih2YXIgdT0wLHc9Yi52ZXJ0ZXhOb3JtYWxzLmxlbmd0aDt1PHc7dSsrKWIudmVydGV4Tm9ybWFsc1t1XS5hcHBseU1hdHJpeDMoZSkubm9ybWFsaXplKCl9bnVsbCE9PXRoaXMuYm91bmRpbmdCb3gmJnRoaXMuY29tcHV0ZUJvdW5kaW5nQm94KCk7bnVsbCE9PXRoaXMuYm91bmRpbmdTcGhlcmUmJnRoaXMuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCk7dGhpcy5ub3JtYWxzTmVlZFVwZGF0ZT10aGlzLnZlcnRpY2VzTmVlZFVwZGF0ZT0hMDtyZXR1cm4gdGhpc30scm90YXRlWDpmdW5jdGlvbigpe3ZhciBiPW5ldyBDO3JldHVybiBmdW5jdGlvbihlKXtiLm1ha2VSb3RhdGlvblgoZSk7dGhpcy5hcHBseU1hdHJpeChiKTtyZXR1cm4gdGhpc319KCkscm90YXRlWTpmdW5jdGlvbigpe3ZhciBiPW5ldyBDO3JldHVybiBmdW5jdGlvbihlKXtiLm1ha2VSb3RhdGlvblkoZSk7dGhpcy5hcHBseU1hdHJpeChiKTtyZXR1cm4gdGhpc319KCkscm90YXRlWjpmdW5jdGlvbigpe3ZhciBiPW5ldyBDOwpyZXR1cm4gZnVuY3Rpb24oZSl7Yi5tYWtlUm90YXRpb25aKGUpO3RoaXMuYXBwbHlNYXRyaXgoYik7cmV0dXJuIHRoaXN9fSgpLHRyYW5zbGF0ZTpmdW5jdGlvbigpe3ZhciBiPW5ldyBDO3JldHVybiBmdW5jdGlvbihlLGgsbil7Yi5tYWtlVHJhbnNsYXRpb24oZSxoLG4pO3RoaXMuYXBwbHlNYXRyaXgoYik7cmV0dXJuIHRoaXN9fSgpLHNjYWxlOmZ1bmN0aW9uKCl7dmFyIGI9bmV3IEM7cmV0dXJuIGZ1bmN0aW9uKGUsaCxuKXtiLm1ha2VTY2FsZShlLGgsbik7dGhpcy5hcHBseU1hdHJpeChiKTtyZXR1cm4gdGhpc319KCksbG9va0F0OmZ1bmN0aW9uKCl7dmFyIGI9bmV3IFM7cmV0dXJuIGZ1bmN0aW9uKGUpe2IubG9va0F0KGUpO2IudXBkYXRlTWF0cml4KCk7dGhpcy5hcHBseU1hdHJpeChiLm1hdHJpeCl9fSgpLGZyb21CdWZmZXJHZW9tZXRyeTpmdW5jdGlvbihiKXtmdW5jdGlvbiBlKFcsWixmYSxxYSl7dmFyIHJhPXZvaWQgMD09PUU/W106W2guY29sb3JzW1ddLmNsb25lKCksCmguY29sb3JzW1pdLmNsb25lKCksaC5jb2xvcnNbZmFdLmNsb25lKCldLGlhPXZvaWQgMD09PXo/W106WyhuZXcgZykuZnJvbUFycmF5KHosMypXKSwobmV3IGcpLmZyb21BcnJheSh6LDMqWiksKG5ldyBnKS5mcm9tQXJyYXkoeiwzKmZhKV07cWE9bmV3IEwoVyxaLGZhLGlhLHJhLHFhKTtoLmZhY2VzLnB1c2gocWEpO3ZvaWQgMCE9PUgmJmguZmFjZVZlcnRleFV2c1swXS5wdXNoKFsobmV3IGQpLmZyb21BcnJheShILDIqVyksKG5ldyBkKS5mcm9tQXJyYXkoSCwyKlopLChuZXcgZCkuZnJvbUFycmF5KEgsMipmYSldKTt2b2lkIDAhPT1JJiZoLmZhY2VWZXJ0ZXhVdnNbMV0ucHVzaChbKG5ldyBkKS5mcm9tQXJyYXkoSSwyKlcpLChuZXcgZCkuZnJvbUFycmF5KEksMipaKSwobmV3IGQpLmZyb21BcnJheShJLDIqZmEpXSl9dmFyIGg9dGhpcyxuPW51bGwhPT1iLmluZGV4P2IuaW5kZXguYXJyYXk6dm9pZCAwLHU9Yi5hdHRyaWJ1dGVzLHc9dS5wb3NpdGlvbi5hcnJheSx6PXZvaWQgMCE9PQp1Lm5vcm1hbD91Lm5vcm1hbC5hcnJheTp2b2lkIDAsRT12b2lkIDAhPT11LmNvbG9yP3UuY29sb3IuYXJyYXk6dm9pZCAwLEg9dm9pZCAwIT09dS51dj91LnV2LmFycmF5OnZvaWQgMCxJPXZvaWQgMCE9PXUudXYyP3UudXYyLmFycmF5OnZvaWQgMDt2b2lkIDAhPT1JJiYodGhpcy5mYWNlVmVydGV4VXZzWzFdPVtdKTtmb3IodmFyIE89dT0wO3U8dy5sZW5ndGg7dSs9MyxPKz0yKWgudmVydGljZXMucHVzaCgobmV3IGcpLmZyb21BcnJheSh3LHUpKSx2b2lkIDAhPT1FJiZoLmNvbG9ycy5wdXNoKChuZXcgQikuZnJvbUFycmF5KEUsdSkpO3ZhciBRPWIuZ3JvdXBzO2lmKDA8US5sZW5ndGgpZm9yKHU9MDt1PFEubGVuZ3RoO3UrKyl7dz1RW3VdO3ZhciBSPXcuc3RhcnQsVT13LmNvdW50O089Ujtmb3IoUis9VTtPPFI7Tys9Myl2b2lkIDAhPT1uP2UobltPXSxuW08rMV0sbltPKzJdLHcubWF0ZXJpYWxJbmRleCk6ZShPLE8rMSxPKzIsdy5tYXRlcmlhbEluZGV4KX1lbHNlIGlmKHZvaWQgMCE9PQpuKWZvcih1PTA7dTxuLmxlbmd0aDt1Kz0zKWUoblt1XSxuW3UrMV0sblt1KzJdKTtlbHNlIGZvcih1PTA7dTx3Lmxlbmd0aC8zO3UrPTMpZSh1LHUrMSx1KzIpO3RoaXMuY29tcHV0ZUZhY2VOb3JtYWxzKCk7bnVsbCE9PWIuYm91bmRpbmdCb3gmJih0aGlzLmJvdW5kaW5nQm94PWIuYm91bmRpbmdCb3guY2xvbmUoKSk7bnVsbCE9PWIuYm91bmRpbmdTcGhlcmUmJih0aGlzLmJvdW5kaW5nU3BoZXJlPWIuYm91bmRpbmdTcGhlcmUuY2xvbmUoKSk7cmV0dXJuIHRoaXN9LGNlbnRlcjpmdW5jdGlvbigpe3ZhciBiPW5ldyBnO3JldHVybiBmdW5jdGlvbigpe3RoaXMuY29tcHV0ZUJvdW5kaW5nQm94KCk7dGhpcy5ib3VuZGluZ0JveC5nZXRDZW50ZXIoYikubmVnYXRlKCk7dGhpcy50cmFuc2xhdGUoYi54LGIueSxiLnopO3JldHVybiB0aGlzfX0oKSxub3JtYWxpemU6ZnVuY3Rpb24oKXt0aGlzLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpO3ZhciBiPXRoaXMuYm91bmRpbmdTcGhlcmUuY2VudGVyLAplPXRoaXMuYm91bmRpbmdTcGhlcmUucmFkaXVzO2U9MD09PWU/MToxL2U7dmFyIGg9bmV3IEM7aC5zZXQoZSwwLDAsLWUqYi54LDAsZSwwLC1lKmIueSwwLDAsZSwtZSpiLnosMCwwLDAsMSk7dGhpcy5hcHBseU1hdHJpeChoKTtyZXR1cm4gdGhpc30sY29tcHV0ZUZhY2VOb3JtYWxzOmZ1bmN0aW9uKCl7Zm9yKHZhciBiPW5ldyBnLGU9bmV3IGcsaD0wLG49dGhpcy5mYWNlcy5sZW5ndGg7aDxuO2grKyl7dmFyIHU9dGhpcy5mYWNlc1toXSx3PXRoaXMudmVydGljZXNbdS5hXSx6PXRoaXMudmVydGljZXNbdS5iXTtiLnN1YlZlY3RvcnModGhpcy52ZXJ0aWNlc1t1LmNdLHopO2Uuc3ViVmVjdG9ycyh3LHopO2IuY3Jvc3MoZSk7Yi5ub3JtYWxpemUoKTt1Lm5vcm1hbC5jb3B5KGIpfX0sY29tcHV0ZVZlcnRleE5vcm1hbHM6ZnVuY3Rpb24oYil7dm9pZCAwPT09YiYmKGI9ITApO3ZhciBlO3ZhciBoPUFycmF5KHRoaXMudmVydGljZXMubGVuZ3RoKTt2YXIgbj0wO2ZvcihlPXRoaXMudmVydGljZXMubGVuZ3RoO248CmU7bisrKWhbbl09bmV3IGc7aWYoYil7dmFyIHU9bmV3IGcsdz1uZXcgZztiPTA7Zm9yKG49dGhpcy5mYWNlcy5sZW5ndGg7YjxuO2IrKyl7ZT10aGlzLmZhY2VzW2JdO3ZhciB6PXRoaXMudmVydGljZXNbZS5hXTt2YXIgRT10aGlzLnZlcnRpY2VzW2UuYl07dmFyIEg9dGhpcy52ZXJ0aWNlc1tlLmNdO3Uuc3ViVmVjdG9ycyhILEUpO3cuc3ViVmVjdG9ycyh6LEUpO3UuY3Jvc3Modyk7aFtlLmFdLmFkZCh1KTtoW2UuYl0uYWRkKHUpO2hbZS5jXS5hZGQodSl9fWVsc2UgZm9yKHRoaXMuY29tcHV0ZUZhY2VOb3JtYWxzKCksYj0wLG49dGhpcy5mYWNlcy5sZW5ndGg7YjxuO2IrKyllPXRoaXMuZmFjZXNbYl0saFtlLmFdLmFkZChlLm5vcm1hbCksaFtlLmJdLmFkZChlLm5vcm1hbCksaFtlLmNdLmFkZChlLm5vcm1hbCk7bj0wO2ZvcihlPXRoaXMudmVydGljZXMubGVuZ3RoO248ZTtuKyspaFtuXS5ub3JtYWxpemUoKTtiPTA7Zm9yKG49dGhpcy5mYWNlcy5sZW5ndGg7YjxuO2IrKyllPQp0aGlzLmZhY2VzW2JdLHo9ZS52ZXJ0ZXhOb3JtYWxzLDM9PT16Lmxlbmd0aD8oelswXS5jb3B5KGhbZS5hXSkselsxXS5jb3B5KGhbZS5iXSkselsyXS5jb3B5KGhbZS5jXSkpOih6WzBdPWhbZS5hXS5jbG9uZSgpLHpbMV09aFtlLmJdLmNsb25lKCkselsyXT1oW2UuY10uY2xvbmUoKSk7MDx0aGlzLmZhY2VzLmxlbmd0aCYmKHRoaXMubm9ybWFsc05lZWRVcGRhdGU9ITApfSxjb21wdXRlRmxhdFZlcnRleE5vcm1hbHM6ZnVuY3Rpb24oKXt2YXIgYjt0aGlzLmNvbXB1dGVGYWNlTm9ybWFscygpO3ZhciBlPTA7Zm9yKGI9dGhpcy5mYWNlcy5sZW5ndGg7ZTxiO2UrKyl7dmFyIGg9dGhpcy5mYWNlc1tlXTt2YXIgbj1oLnZlcnRleE5vcm1hbHM7Mz09PW4ubGVuZ3RoPyhuWzBdLmNvcHkoaC5ub3JtYWwpLG5bMV0uY29weShoLm5vcm1hbCksblsyXS5jb3B5KGgubm9ybWFsKSk6KG5bMF09aC5ub3JtYWwuY2xvbmUoKSxuWzFdPWgubm9ybWFsLmNsb25lKCksblsyXT1oLm5vcm1hbC5jbG9uZSgpKX0wPAp0aGlzLmZhY2VzLmxlbmd0aCYmKHRoaXMubm9ybWFsc05lZWRVcGRhdGU9ITApfSxjb21wdXRlTW9ycGhOb3JtYWxzOmZ1bmN0aW9uKCl7dmFyIGIsZTt2YXIgaD0wO2ZvcihlPXRoaXMuZmFjZXMubGVuZ3RoO2g8ZTtoKyspe3ZhciBuPXRoaXMuZmFjZXNbaF07bi5fX29yaWdpbmFsRmFjZU5vcm1hbD9uLl9fb3JpZ2luYWxGYWNlTm9ybWFsLmNvcHkobi5ub3JtYWwpOm4uX19vcmlnaW5hbEZhY2VOb3JtYWw9bi5ub3JtYWwuY2xvbmUoKTtuLl9fb3JpZ2luYWxWZXJ0ZXhOb3JtYWxzfHwobi5fX29yaWdpbmFsVmVydGV4Tm9ybWFscz1bXSk7dmFyIHU9MDtmb3IoYj1uLnZlcnRleE5vcm1hbHMubGVuZ3RoO3U8Yjt1Kyspbi5fX29yaWdpbmFsVmVydGV4Tm9ybWFsc1t1XT9uLl9fb3JpZ2luYWxWZXJ0ZXhOb3JtYWxzW3VdLmNvcHkobi52ZXJ0ZXhOb3JtYWxzW3VdKTpuLl9fb3JpZ2luYWxWZXJ0ZXhOb3JtYWxzW3VdPW4udmVydGV4Tm9ybWFsc1t1XS5jbG9uZSgpfXZhciB3PW5ldyBOOwp3LmZhY2VzPXRoaXMuZmFjZXM7dT0wO2ZvcihiPXRoaXMubW9ycGhUYXJnZXRzLmxlbmd0aDt1PGI7dSsrKXtpZighdGhpcy5tb3JwaE5vcm1hbHNbdV0pe3RoaXMubW9ycGhOb3JtYWxzW3VdPXt9O3RoaXMubW9ycGhOb3JtYWxzW3VdLmZhY2VOb3JtYWxzPVtdO3RoaXMubW9ycGhOb3JtYWxzW3VdLnZlcnRleE5vcm1hbHM9W107bj10aGlzLm1vcnBoTm9ybWFsc1t1XS5mYWNlTm9ybWFsczt2YXIgej10aGlzLm1vcnBoTm9ybWFsc1t1XS52ZXJ0ZXhOb3JtYWxzO2g9MDtmb3IoZT10aGlzLmZhY2VzLmxlbmd0aDtoPGU7aCsrKXt2YXIgRT1uZXcgZzt2YXIgSD17YTpuZXcgZyxiOm5ldyBnLGM6bmV3IGd9O24ucHVzaChFKTt6LnB1c2goSCl9fXo9dGhpcy5tb3JwaE5vcm1hbHNbdV07dy52ZXJ0aWNlcz10aGlzLm1vcnBoVGFyZ2V0c1t1XS52ZXJ0aWNlczt3LmNvbXB1dGVGYWNlTm9ybWFscygpO3cuY29tcHV0ZVZlcnRleE5vcm1hbHMoKTtoPTA7Zm9yKGU9dGhpcy5mYWNlcy5sZW5ndGg7aDwKZTtoKyspbj10aGlzLmZhY2VzW2hdLEU9ei5mYWNlTm9ybWFsc1toXSxIPXoudmVydGV4Tm9ybWFsc1toXSxFLmNvcHkobi5ub3JtYWwpLEguYS5jb3B5KG4udmVydGV4Tm9ybWFsc1swXSksSC5iLmNvcHkobi52ZXJ0ZXhOb3JtYWxzWzFdKSxILmMuY29weShuLnZlcnRleE5vcm1hbHNbMl0pfWg9MDtmb3IoZT10aGlzLmZhY2VzLmxlbmd0aDtoPGU7aCsrKW49dGhpcy5mYWNlc1toXSxuLm5vcm1hbD1uLl9fb3JpZ2luYWxGYWNlTm9ybWFsLG4udmVydGV4Tm9ybWFscz1uLl9fb3JpZ2luYWxWZXJ0ZXhOb3JtYWxzfSxjb21wdXRlQm91bmRpbmdCb3g6ZnVuY3Rpb24oKXtudWxsPT09dGhpcy5ib3VuZGluZ0JveCYmKHRoaXMuYm91bmRpbmdCb3g9bmV3IHYpO3RoaXMuYm91bmRpbmdCb3guc2V0RnJvbVBvaW50cyh0aGlzLnZlcnRpY2VzKX0sY29tcHV0ZUJvdW5kaW5nU3BoZXJlOmZ1bmN0aW9uKCl7bnVsbD09PXRoaXMuYm91bmRpbmdTcGhlcmUmJih0aGlzLmJvdW5kaW5nU3BoZXJlPQpuZXcgQSk7dGhpcy5ib3VuZGluZ1NwaGVyZS5zZXRGcm9tUG9pbnRzKHRoaXMudmVydGljZXMpfSxtZXJnZTpmdW5jdGlvbihiLGUsaCl7aWYoYiYmYi5pc0dlb21ldHJ5KXt2YXIgbix1PXRoaXMudmVydGljZXMubGVuZ3RoLHc9dGhpcy52ZXJ0aWNlcyx6PWIudmVydGljZXMsRT10aGlzLmZhY2VzLEg9Yi5mYWNlcyxJPXRoaXMuZmFjZVZlcnRleFV2c1swXSxPPWIuZmFjZVZlcnRleFV2c1swXSxRPXRoaXMuY29sb3JzLFI9Yi5jb2xvcnM7dm9pZCAwPT09aCYmKGg9MCk7dm9pZCAwIT09ZSYmKG49KG5ldyBsKS5nZXROb3JtYWxNYXRyaXgoZSkpO2I9MDtmb3IodmFyIFU9ei5sZW5ndGg7YjxVO2IrKyl7dmFyIFc9eltiXS5jbG9uZSgpO3ZvaWQgMCE9PWUmJlcuYXBwbHlNYXRyaXg0KGUpO3cucHVzaChXKX1iPTA7Zm9yKFU9Ui5sZW5ndGg7YjxVO2IrKylRLnB1c2goUltiXS5jbG9uZSgpKTtiPTA7Zm9yKFU9SC5sZW5ndGg7YjxVO2IrKyl7ej1IW2JdO3ZhciBaPXoudmVydGV4Tm9ybWFsczsKUj16LnZlcnRleENvbG9ycztRPW5ldyBMKHouYSt1LHouYit1LHouYyt1KTtRLm5vcm1hbC5jb3B5KHoubm9ybWFsKTt2b2lkIDAhPT1uJiZRLm5vcm1hbC5hcHBseU1hdHJpeDMobikubm9ybWFsaXplKCk7ZT0wO2Zvcih3PVoubGVuZ3RoO2U8dztlKyspVz1aW2VdLmNsb25lKCksdm9pZCAwIT09biYmVy5hcHBseU1hdHJpeDMobikubm9ybWFsaXplKCksUS52ZXJ0ZXhOb3JtYWxzLnB1c2goVyk7US5jb2xvci5jb3B5KHouY29sb3IpO2U9MDtmb3Iodz1SLmxlbmd0aDtlPHc7ZSsrKVc9UltlXSxRLnZlcnRleENvbG9ycy5wdXNoKFcuY2xvbmUoKSk7US5tYXRlcmlhbEluZGV4PXoubWF0ZXJpYWxJbmRleCtoO0UucHVzaChRKX1iPTA7Zm9yKFU9Ty5sZW5ndGg7YjxVO2IrKylpZihoPU9bYl0sbj1bXSx2b2lkIDAhPT1oKXtlPTA7Zm9yKHc9aC5sZW5ndGg7ZTx3O2UrKyluLnB1c2goaFtlXS5jbG9uZSgpKTtJLnB1c2gobil9fWVsc2UgY29uc29sZS5lcnJvcigiVEhSRUUuR2VvbWV0cnkubWVyZ2UoKTogZ2VvbWV0cnkgbm90IGFuIGluc3RhbmNlIG9mIFRIUkVFLkdlb21ldHJ5LiIsCmIpfSxtZXJnZU1lc2g6ZnVuY3Rpb24oYil7YiYmYi5pc01lc2g/KGIubWF0cml4QXV0b1VwZGF0ZSYmYi51cGRhdGVNYXRyaXgoKSx0aGlzLm1lcmdlKGIuZ2VvbWV0cnksYi5tYXRyaXgpKTpjb25zb2xlLmVycm9yKCJUSFJFRS5HZW9tZXRyeS5tZXJnZU1lc2goKTogbWVzaCBub3QgYW4gaW5zdGFuY2Ugb2YgVEhSRUUuTWVzaC4iLGIpfSxtZXJnZVZlcnRpY2VzOmZ1bmN0aW9uKCl7dmFyIGI9e30sZT1bXSxoPVtdLG49TWF0aC5wb3coMTAsNCksdTt2YXIgdz0wO2Zvcih1PXRoaXMudmVydGljZXMubGVuZ3RoO3c8dTt3Kyspe3ZhciB6PXRoaXMudmVydGljZXNbd107ej1NYXRoLnJvdW5kKHoueCpuKSsiXyIrTWF0aC5yb3VuZCh6LnkqbikrIl8iK01hdGgucm91bmQoei56Km4pO3ZvaWQgMD09PWJbel0/KGJbel09dyxlLnB1c2godGhpcy52ZXJ0aWNlc1t3XSksaFt3XT1lLmxlbmd0aC0xKTpoW3ddPWhbYlt6XV19Yj1bXTt3PTA7Zm9yKHU9dGhpcy5mYWNlcy5sZW5ndGg7dzx1O3crKylmb3Iobj0KdGhpcy5mYWNlc1t3XSxuLmE9aFtuLmFdLG4uYj1oW24uYl0sbi5jPWhbbi5jXSxuPVtuLmEsbi5iLG4uY10sej0wOzM+ejt6KyspaWYoblt6XT09PW5bKHorMSklM10pe2IucHVzaCh3KTticmVha31mb3Iodz1iLmxlbmd0aC0xOzA8PXc7dy0tKWZvcihuPWJbd10sdGhpcy5mYWNlcy5zcGxpY2UobiwxKSxoPTAsdT10aGlzLmZhY2VWZXJ0ZXhVdnMubGVuZ3RoO2g8dTtoKyspdGhpcy5mYWNlVmVydGV4VXZzW2hdLnNwbGljZShuLDEpO3c9dGhpcy52ZXJ0aWNlcy5sZW5ndGgtZS5sZW5ndGg7dGhpcy52ZXJ0aWNlcz1lO3JldHVybiB3fSxzZXRGcm9tUG9pbnRzOmZ1bmN0aW9uKGIpe3RoaXMudmVydGljZXM9W107Zm9yKHZhciBlPTAsaD1iLmxlbmd0aDtlPGg7ZSsrKXt2YXIgbj1iW2VdO3RoaXMudmVydGljZXMucHVzaChuZXcgZyhuLngsbi55LG4uenx8MCkpfXJldHVybiB0aGlzfSxzb3J0RmFjZXNCeU1hdGVyaWFsSW5kZXg6ZnVuY3Rpb24oKXtmb3IodmFyIGI9dGhpcy5mYWNlcywKZT1iLmxlbmd0aCxoPTA7aDxlO2grKyliW2hdLl9pZD1oO2Iuc29ydChmdW5jdGlvbihILEkpe3JldHVybiBILm1hdGVyaWFsSW5kZXgtSS5tYXRlcmlhbEluZGV4fSk7dmFyIG49dGhpcy5mYWNlVmVydGV4VXZzWzBdLHU9dGhpcy5mYWNlVmVydGV4VXZzWzFdLHcsejtuJiZuLmxlbmd0aD09PWUmJih3PVtdKTt1JiZ1Lmxlbmd0aD09PWUmJih6PVtdKTtmb3IoaD0wO2g8ZTtoKyspe3ZhciBFPWJbaF0uX2lkO3cmJncucHVzaChuW0VdKTt6JiZ6LnB1c2godVtFXSl9dyYmKHRoaXMuZmFjZVZlcnRleFV2c1swXT13KTt6JiYodGhpcy5mYWNlVmVydGV4VXZzWzFdPXopfSx0b0pTT046ZnVuY3Rpb24oKXtmdW5jdGlvbiBiKG5hLHZhLEJhKXtyZXR1cm4gQmE/bmF8MTw8dmE6bmEmfigxPDx2YSl9ZnVuY3Rpb24gZShuYSl7dmFyIHZhPW5hLngudG9TdHJpbmcoKStuYS55LnRvU3RyaW5nKCkrbmEuei50b1N0cmluZygpO2lmKHZvaWQgMCE9PUlbdmFdKXJldHVybiBJW3ZhXTtJW3ZhXT1ILmxlbmd0aC8KMztILnB1c2gobmEueCxuYS55LG5hLnopO3JldHVybiBJW3ZhXX1mdW5jdGlvbiBoKG5hKXt2YXIgdmE9bmEuci50b1N0cmluZygpK25hLmcudG9TdHJpbmcoKStuYS5iLnRvU3RyaW5nKCk7aWYodm9pZCAwIT09UVt2YV0pcmV0dXJuIFFbdmFdO1FbdmFdPU8ubGVuZ3RoO08ucHVzaChuYS5nZXRIZXgoKSk7cmV0dXJuIFFbdmFdfWZ1bmN0aW9uIG4obmEpe3ZhciB2YT1uYS54LnRvU3RyaW5nKCkrbmEueS50b1N0cmluZygpO2lmKHZvaWQgMCE9PVVbdmFdKXJldHVybiBVW3ZhXTtVW3ZhXT1SLmxlbmd0aC8yO1IucHVzaChuYS54LG5hLnkpO3JldHVybiBVW3ZhXX12YXIgdT17bWV0YWRhdGE6e3ZlcnNpb246NC41LHR5cGU6Ikdlb21ldHJ5IixnZW5lcmF0b3I6Ikdlb21ldHJ5LnRvSlNPTiJ9fTt1LnV1aWQ9dGhpcy51dWlkO3UudHlwZT10aGlzLnR5cGU7IiIhPT10aGlzLm5hbWUmJih1Lm5hbWU9dGhpcy5uYW1lKTtpZih2b2lkIDAhPT10aGlzLnBhcmFtZXRlcnMpe3ZhciB3PXRoaXMucGFyYW1ldGVycywKejtmb3IoeiBpbiB3KXZvaWQgMCE9PXdbel0mJih1W3pdPXdbel0pO3JldHVybiB1fXc9W107Zm9yKHo9MDt6PHRoaXMudmVydGljZXMubGVuZ3RoO3orKyl7dmFyIEU9dGhpcy52ZXJ0aWNlc1t6XTt3LnB1c2goRS54LEUueSxFLnopfUU9W107dmFyIEg9W10sST17fSxPPVtdLFE9e30sUj1bXSxVPXt9O2Zvcih6PTA7ejx0aGlzLmZhY2VzLmxlbmd0aDt6Kyspe3ZhciBXPXRoaXMuZmFjZXNbel0sWj12b2lkIDAhPT10aGlzLmZhY2VWZXJ0ZXhVdnNbMF1bel0sZmE9MDxXLm5vcm1hbC5sZW5ndGgoKSxxYT0wPFcudmVydGV4Tm9ybWFscy5sZW5ndGgscmE9MSE9PVcuY29sb3Iucnx8MSE9PVcuY29sb3IuZ3x8MSE9PVcuY29sb3IuYixpYT0wPFcudmVydGV4Q29sb3JzLmxlbmd0aCx0YT0wO3RhPWIodGEsMCwwKTt0YT1iKHRhLDEsITApO3RhPWIodGEsMiwhMSk7dGE9Yih0YSwzLFopO3RhPWIodGEsNCxmYSk7dGE9Yih0YSw1LHFhKTt0YT1iKHRhLDYscmEpO3RhPWIodGEsNyxpYSk7CkUucHVzaCh0YSk7RS5wdXNoKFcuYSxXLmIsVy5jKTtFLnB1c2goVy5tYXRlcmlhbEluZGV4KTtaJiYoWj10aGlzLmZhY2VWZXJ0ZXhVdnNbMF1bel0sRS5wdXNoKG4oWlswXSksbihaWzFdKSxuKFpbMl0pKSk7ZmEmJkUucHVzaChlKFcubm9ybWFsKSk7cWEmJihmYT1XLnZlcnRleE5vcm1hbHMsRS5wdXNoKGUoZmFbMF0pLGUoZmFbMV0pLGUoZmFbMl0pKSk7cmEmJkUucHVzaChoKFcuY29sb3IpKTtpYSYmKFc9Vy52ZXJ0ZXhDb2xvcnMsRS5wdXNoKGgoV1swXSksaChXWzFdKSxoKFdbMl0pKSl9dS5kYXRhPXt9O3UuZGF0YS52ZXJ0aWNlcz13O3UuZGF0YS5ub3JtYWxzPUg7MDxPLmxlbmd0aCYmKHUuZGF0YS5jb2xvcnM9Tyk7MDxSLmxlbmd0aCYmKHUuZGF0YS51dnM9W1JdKTt1LmRhdGEuZmFjZXM9RTtyZXR1cm4gdX0sY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IE4pLmNvcHkodGhpcyl9LGNvcHk6ZnVuY3Rpb24oYil7dmFyIGUsaCxuO3RoaXMudmVydGljZXM9W107dGhpcy5jb2xvcnM9CltdO3RoaXMuZmFjZXM9W107dGhpcy5mYWNlVmVydGV4VXZzPVtbXV07dGhpcy5tb3JwaFRhcmdldHM9W107dGhpcy5tb3JwaE5vcm1hbHM9W107dGhpcy5za2luV2VpZ2h0cz1bXTt0aGlzLnNraW5JbmRpY2VzPVtdO3RoaXMubGluZURpc3RhbmNlcz1bXTt0aGlzLmJvdW5kaW5nU3BoZXJlPXRoaXMuYm91bmRpbmdCb3g9bnVsbDt0aGlzLm5hbWU9Yi5uYW1lO3ZhciB1PWIudmVydGljZXM7dmFyIHc9MDtmb3IoZT11Lmxlbmd0aDt3PGU7dysrKXRoaXMudmVydGljZXMucHVzaCh1W3ddLmNsb25lKCkpO3U9Yi5jb2xvcnM7dz0wO2ZvcihlPXUubGVuZ3RoO3c8ZTt3KyspdGhpcy5jb2xvcnMucHVzaCh1W3ddLmNsb25lKCkpO3U9Yi5mYWNlczt3PTA7Zm9yKGU9dS5sZW5ndGg7dzxlO3crKyl0aGlzLmZhY2VzLnB1c2godVt3XS5jbG9uZSgpKTt3PTA7Zm9yKGU9Yi5mYWNlVmVydGV4VXZzLmxlbmd0aDt3PGU7dysrKXt2YXIgej1iLmZhY2VWZXJ0ZXhVdnNbd107dm9pZCAwPT09dGhpcy5mYWNlVmVydGV4VXZzW3ddJiYKKHRoaXMuZmFjZVZlcnRleFV2c1t3XT1bXSk7dT0wO2ZvcihoPXoubGVuZ3RoO3U8aDt1Kyspe3ZhciBFPXpbdV0sSD1bXTt2YXIgST0wO2ZvcihuPUUubGVuZ3RoO0k8bjtJKyspSC5wdXNoKEVbSV0uY2xvbmUoKSk7dGhpcy5mYWNlVmVydGV4VXZzW3ddLnB1c2goSCl9fUk9Yi5tb3JwaFRhcmdldHM7dz0wO2ZvcihlPUkubGVuZ3RoO3c8ZTt3Kyspe249e307bi5uYW1lPUlbd10ubmFtZTtpZih2b2lkIDAhPT1JW3ddLnZlcnRpY2VzKWZvcihuLnZlcnRpY2VzPVtdLHU9MCxoPUlbd10udmVydGljZXMubGVuZ3RoO3U8aDt1Kyspbi52ZXJ0aWNlcy5wdXNoKElbd10udmVydGljZXNbdV0uY2xvbmUoKSk7aWYodm9pZCAwIT09SVt3XS5ub3JtYWxzKWZvcihuLm5vcm1hbHM9W10sdT0wLGg9SVt3XS5ub3JtYWxzLmxlbmd0aDt1PGg7dSsrKW4ubm9ybWFscy5wdXNoKElbd10ubm9ybWFsc1t1XS5jbG9uZSgpKTt0aGlzLm1vcnBoVGFyZ2V0cy5wdXNoKG4pfUk9Yi5tb3JwaE5vcm1hbHM7Cnc9MDtmb3IoZT1JLmxlbmd0aDt3PGU7dysrKXtuPXt9O2lmKHZvaWQgMCE9PUlbd10udmVydGV4Tm9ybWFscylmb3Iobi52ZXJ0ZXhOb3JtYWxzPVtdLHU9MCxoPUlbd10udmVydGV4Tm9ybWFscy5sZW5ndGg7dTxoO3UrKyl6PUlbd10udmVydGV4Tm9ybWFsc1t1XSxFPXt9LEUuYT16LmEuY2xvbmUoKSxFLmI9ei5iLmNsb25lKCksRS5jPXouYy5jbG9uZSgpLG4udmVydGV4Tm9ybWFscy5wdXNoKEUpO2lmKHZvaWQgMCE9PUlbd10uZmFjZU5vcm1hbHMpZm9yKG4uZmFjZU5vcm1hbHM9W10sdT0wLGg9SVt3XS5mYWNlTm9ybWFscy5sZW5ndGg7dTxoO3UrKyluLmZhY2VOb3JtYWxzLnB1c2goSVt3XS5mYWNlTm9ybWFsc1t1XS5jbG9uZSgpKTt0aGlzLm1vcnBoTm9ybWFscy5wdXNoKG4pfXU9Yi5za2luV2VpZ2h0czt3PTA7Zm9yKGU9dS5sZW5ndGg7dzxlO3crKyl0aGlzLnNraW5XZWlnaHRzLnB1c2godVt3XS5jbG9uZSgpKTt1PWIuc2tpbkluZGljZXM7dz0wO2ZvcihlPXUubGVuZ3RoO3c8CmU7dysrKXRoaXMuc2tpbkluZGljZXMucHVzaCh1W3ddLmNsb25lKCkpO3U9Yi5saW5lRGlzdGFuY2VzO3c9MDtmb3IoZT11Lmxlbmd0aDt3PGU7dysrKXRoaXMubGluZURpc3RhbmNlcy5wdXNoKHVbd10pO3c9Yi5ib3VuZGluZ0JveDtudWxsIT09dyYmKHRoaXMuYm91bmRpbmdCb3g9dy5jbG9uZSgpKTt3PWIuYm91bmRpbmdTcGhlcmU7bnVsbCE9PXcmJih0aGlzLmJvdW5kaW5nU3BoZXJlPXcuY2xvbmUoKSk7dGhpcy5lbGVtZW50c05lZWRVcGRhdGU9Yi5lbGVtZW50c05lZWRVcGRhdGU7dGhpcy52ZXJ0aWNlc05lZWRVcGRhdGU9Yi52ZXJ0aWNlc05lZWRVcGRhdGU7dGhpcy51dnNOZWVkVXBkYXRlPWIudXZzTmVlZFVwZGF0ZTt0aGlzLm5vcm1hbHNOZWVkVXBkYXRlPWIubm9ybWFsc05lZWRVcGRhdGU7dGhpcy5jb2xvcnNOZWVkVXBkYXRlPWIuY29sb3JzTmVlZFVwZGF0ZTt0aGlzLmxpbmVEaXN0YW5jZXNOZWVkVXBkYXRlPWIubGluZURpc3RhbmNlc05lZWRVcGRhdGU7dGhpcy5ncm91cHNOZWVkVXBkYXRlPQpiLmdyb3Vwc05lZWRVcGRhdGU7cmV0dXJuIHRoaXN9LGRpc3Bvc2U6ZnVuY3Rpb24oKXt0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImRpc3Bvc2UifSl9fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KFQucHJvdG90eXBlLCJuZWVkc1VwZGF0ZSIse3NldDpmdW5jdGlvbihiKXshMD09PWImJnRoaXMudmVyc2lvbisrfX0pO09iamVjdC5hc3NpZ24oVC5wcm90b3R5cGUse2lzQnVmZmVyQXR0cmlidXRlOiEwLG9uVXBsb2FkQ2FsbGJhY2s6ZnVuY3Rpb24oKXt9LHNldEFycmF5OmZ1bmN0aW9uKGIpe2lmKEFycmF5LmlzQXJyYXkoYikpdGhyb3cgbmV3IFR5cGVFcnJvcigiVEhSRUUuQnVmZmVyQXR0cmlidXRlOiBhcnJheSBzaG91bGQgYmUgYSBUeXBlZCBBcnJheS4iKTt0aGlzLmNvdW50PXZvaWQgMCE9PWI/Yi5sZW5ndGgvdGhpcy5pdGVtU2l6ZTowO3RoaXMuYXJyYXk9YjtyZXR1cm4gdGhpc30sc2V0RHluYW1pYzpmdW5jdGlvbihiKXt0aGlzLmR5bmFtaWM9YjtyZXR1cm4gdGhpc30sCmNvcHk6ZnVuY3Rpb24oYil7dGhpcy5uYW1lPWIubmFtZTt0aGlzLmFycmF5PW5ldyBiLmFycmF5LmNvbnN0cnVjdG9yKGIuYXJyYXkpO3RoaXMuaXRlbVNpemU9Yi5pdGVtU2l6ZTt0aGlzLmNvdW50PWIuY291bnQ7dGhpcy5ub3JtYWxpemVkPWIubm9ybWFsaXplZDt0aGlzLmR5bmFtaWM9Yi5keW5hbWljO3JldHVybiB0aGlzfSxjb3B5QXQ6ZnVuY3Rpb24oYixlLGgpe2IqPXRoaXMuaXRlbVNpemU7aCo9ZS5pdGVtU2l6ZTtmb3IodmFyIG49MCx1PXRoaXMuaXRlbVNpemU7bjx1O24rKyl0aGlzLmFycmF5W2Irbl09ZS5hcnJheVtoK25dO3JldHVybiB0aGlzfSxjb3B5QXJyYXk6ZnVuY3Rpb24oYil7dGhpcy5hcnJheS5zZXQoYik7cmV0dXJuIHRoaXN9LGNvcHlDb2xvcnNBcnJheTpmdW5jdGlvbihiKXtmb3IodmFyIGU9dGhpcy5hcnJheSxoPTAsbj0wLHU9Yi5sZW5ndGg7bjx1O24rKyl7dmFyIHc9YltuXTt2b2lkIDA9PT13JiYoY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGUuY29weUNvbG9yc0FycmF5KCk6IGNvbG9yIGlzIHVuZGVmaW5lZCIsCm4pLHc9bmV3IEIpO2VbaCsrXT13LnI7ZVtoKytdPXcuZztlW2grK109dy5ifXJldHVybiB0aGlzfSxjb3B5VmVjdG9yMnNBcnJheTpmdW5jdGlvbihiKXtmb3IodmFyIGU9dGhpcy5hcnJheSxoPTAsbj0wLHU9Yi5sZW5ndGg7bjx1O24rKyl7dmFyIHc9YltuXTt2b2lkIDA9PT13JiYoY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGUuY29weVZlY3RvcjJzQXJyYXkoKTogdmVjdG9yIGlzIHVuZGVmaW5lZCIsbiksdz1uZXcgZCk7ZVtoKytdPXcueDtlW2grK109dy55fXJldHVybiB0aGlzfSxjb3B5VmVjdG9yM3NBcnJheTpmdW5jdGlvbihiKXtmb3IodmFyIGU9dGhpcy5hcnJheSxoPTAsbj0wLHU9Yi5sZW5ndGg7bjx1O24rKyl7dmFyIHc9YltuXTt2b2lkIDA9PT13JiYoY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGUuY29weVZlY3RvcjNzQXJyYXkoKTogdmVjdG9yIGlzIHVuZGVmaW5lZCIsbiksdz1uZXcgZyk7ZVtoKytdPXcueDtlW2grK109dy55OwplW2grK109dy56fXJldHVybiB0aGlzfSxjb3B5VmVjdG9yNHNBcnJheTpmdW5jdGlvbihiKXtmb3IodmFyIGU9dGhpcy5hcnJheSxoPTAsbj0wLHU9Yi5sZW5ndGg7bjx1O24rKyl7dmFyIHc9YltuXTt2b2lkIDA9PT13JiYoY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGUuY29weVZlY3RvcjRzQXJyYXkoKTogdmVjdG9yIGlzIHVuZGVmaW5lZCIsbiksdz1uZXcgbSk7ZVtoKytdPXcueDtlW2grK109dy55O2VbaCsrXT13Lno7ZVtoKytdPXcud31yZXR1cm4gdGhpc30sc2V0OmZ1bmN0aW9uKGIsZSl7dm9pZCAwPT09ZSYmKGU9MCk7dGhpcy5hcnJheS5zZXQoYixlKTtyZXR1cm4gdGhpc30sZ2V0WDpmdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5hcnJheVtiKnRoaXMuaXRlbVNpemVdfSxzZXRYOmZ1bmN0aW9uKGIsZSl7dGhpcy5hcnJheVtiKnRoaXMuaXRlbVNpemVdPWU7cmV0dXJuIHRoaXN9LGdldFk6ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuYXJyYXlbYip0aGlzLml0ZW1TaXplKwoxXX0sc2V0WTpmdW5jdGlvbihiLGUpe3RoaXMuYXJyYXlbYip0aGlzLml0ZW1TaXplKzFdPWU7cmV0dXJuIHRoaXN9LGdldFo6ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuYXJyYXlbYip0aGlzLml0ZW1TaXplKzJdfSxzZXRaOmZ1bmN0aW9uKGIsZSl7dGhpcy5hcnJheVtiKnRoaXMuaXRlbVNpemUrMl09ZTtyZXR1cm4gdGhpc30sZ2V0VzpmdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5hcnJheVtiKnRoaXMuaXRlbVNpemUrM119LHNldFc6ZnVuY3Rpb24oYixlKXt0aGlzLmFycmF5W2IqdGhpcy5pdGVtU2l6ZSszXT1lO3JldHVybiB0aGlzfSxzZXRYWTpmdW5jdGlvbihiLGUsaCl7Yio9dGhpcy5pdGVtU2l6ZTt0aGlzLmFycmF5W2IrMF09ZTt0aGlzLmFycmF5W2IrMV09aDtyZXR1cm4gdGhpc30sc2V0WFlaOmZ1bmN0aW9uKGIsZSxoLG4pe2IqPXRoaXMuaXRlbVNpemU7dGhpcy5hcnJheVtiKzBdPWU7dGhpcy5hcnJheVtiKzFdPWg7dGhpcy5hcnJheVtiKzJdPW47cmV0dXJuIHRoaXN9LApzZXRYWVpXOmZ1bmN0aW9uKGIsZSxoLG4sdSl7Yio9dGhpcy5pdGVtU2l6ZTt0aGlzLmFycmF5W2IrMF09ZTt0aGlzLmFycmF5W2IrMV09aDt0aGlzLmFycmF5W2IrMl09bjt0aGlzLmFycmF5W2IrM109dTtyZXR1cm4gdGhpc30sb25VcGxvYWQ6ZnVuY3Rpb24oYil7dGhpcy5vblVwbG9hZENhbGxiYWNrPWI7cmV0dXJuIHRoaXN9LGNsb25lOmZ1bmN0aW9uKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMuYXJyYXksdGhpcy5pdGVtU2l6ZSkpLmNvcHkodGhpcyl9fSk7WS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShULnByb3RvdHlwZSk7WS5wcm90b3R5cGUuY29uc3RydWN0b3I9WTthYS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShULnByb3RvdHlwZSk7YWEucHJvdG90eXBlLmNvbnN0cnVjdG9yPWFhO2hhLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKFQucHJvdG90eXBlKTtoYS5wcm90b3R5cGUuY29uc3RydWN0b3I9aGE7WC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShULnByb3RvdHlwZSk7ClgucHJvdG90eXBlLmNvbnN0cnVjdG9yPVg7Y2EucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoVC5wcm90b3R5cGUpO2NhLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1jYTtlYS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShULnByb3RvdHlwZSk7ZWEucHJvdG90eXBlLmNvbnN0cnVjdG9yPWVhO2thLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKFQucHJvdG90eXBlKTtrYS5wcm90b3R5cGUuY29uc3RydWN0b3I9a2E7YmEucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoVC5wcm90b3R5cGUpO2JhLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1iYTtsYS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShULnByb3RvdHlwZSk7bGEucHJvdG90eXBlLmNvbnN0cnVjdG9yPWxhO09iamVjdC5hc3NpZ24od2EucHJvdG90eXBlLHtjb21wdXRlR3JvdXBzOmZ1bmN0aW9uKGIpe3ZhciBlPVtdLGg9dm9pZCAwO2I9Yi5mYWNlcztmb3IodmFyIG49MDtuPGIubGVuZ3RoO24rKyl7dmFyIHU9YltuXTtpZih1Lm1hdGVyaWFsSW5kZXghPT0KaCl7aD11Lm1hdGVyaWFsSW5kZXg7dm9pZCAwIT09dyYmKHcuY291bnQ9MypuLXcuc3RhcnQsZS5wdXNoKHcpKTt2YXIgdz17c3RhcnQ6MypuLG1hdGVyaWFsSW5kZXg6aH19fXZvaWQgMCE9PXcmJih3LmNvdW50PTMqbi13LnN0YXJ0LGUucHVzaCh3KSk7dGhpcy5ncm91cHM9ZX0sZnJvbUdlb21ldHJ5OmZ1bmN0aW9uKGIpe3ZhciBlPWIuZmFjZXMsaD1iLnZlcnRpY2VzLG49Yi5mYWNlVmVydGV4VXZzLHU9blswXSYmMDxuWzBdLmxlbmd0aCx3PW5bMV0mJjA8blsxXS5sZW5ndGgsej1iLm1vcnBoVGFyZ2V0cyxFPXoubGVuZ3RoO2lmKDA8RSl7dmFyIEg9W107Zm9yKHZhciBJPTA7STxFO0krKylIW0ldPXtuYW1lOnpbSV0ubmFtZSxkYXRhOltdfTt0aGlzLm1vcnBoVGFyZ2V0cy5wb3NpdGlvbj1IfXZhciBPPWIubW9ycGhOb3JtYWxzLFE9Ty5sZW5ndGg7aWYoMDxRKXt2YXIgUj1bXTtmb3IoST0wO0k8UTtJKyspUltJXT17bmFtZTpPW0ldLm5hbWUsZGF0YTpbXX07dGhpcy5tb3JwaFRhcmdldHMubm9ybWFsPQpSfXZhciBVPWIuc2tpbkluZGljZXMsVz1iLnNraW5XZWlnaHRzLFo9VS5sZW5ndGg9PT1oLmxlbmd0aCxmYT1XLmxlbmd0aD09PWgubGVuZ3RoOzA8aC5sZW5ndGgmJjA9PT1lLmxlbmd0aCYmY29uc29sZS5lcnJvcigiVEhSRUUuRGlyZWN0R2VvbWV0cnk6IEZhY2VsZXNzIGdlb21ldHJpZXMgYXJlIG5vdCBzdXBwb3J0ZWQuIik7Zm9yKEk9MDtJPGUubGVuZ3RoO0krKyl7dmFyIHFhPWVbSV07dGhpcy52ZXJ0aWNlcy5wdXNoKGhbcWEuYV0saFtxYS5iXSxoW3FhLmNdKTt2YXIgcmE9cWEudmVydGV4Tm9ybWFsczszPT09cmEubGVuZ3RoP3RoaXMubm9ybWFscy5wdXNoKHJhWzBdLHJhWzFdLHJhWzJdKToocmE9cWEubm9ybWFsLHRoaXMubm9ybWFscy5wdXNoKHJhLHJhLHJhKSk7cmE9cWEudmVydGV4Q29sb3JzOzM9PT1yYS5sZW5ndGg/dGhpcy5jb2xvcnMucHVzaChyYVswXSxyYVsxXSxyYVsyXSk6KHJhPXFhLmNvbG9yLHRoaXMuY29sb3JzLnB1c2gocmEscmEscmEpKTshMD09PXUmJgoocmE9blswXVtJXSx2b2lkIDAhPT1yYT90aGlzLnV2cy5wdXNoKHJhWzBdLHJhWzFdLHJhWzJdKTooY29uc29sZS53YXJuKCJUSFJFRS5EaXJlY3RHZW9tZXRyeS5mcm9tR2VvbWV0cnkoKTogVW5kZWZpbmVkIHZlcnRleFV2ICIsSSksdGhpcy51dnMucHVzaChuZXcgZCxuZXcgZCxuZXcgZCkpKTshMD09PXcmJihyYT1uWzFdW0ldLHZvaWQgMCE9PXJhP3RoaXMudXZzMi5wdXNoKHJhWzBdLHJhWzFdLHJhWzJdKTooY29uc29sZS53YXJuKCJUSFJFRS5EaXJlY3RHZW9tZXRyeS5mcm9tR2VvbWV0cnkoKTogVW5kZWZpbmVkIHZlcnRleFV2MiAiLEkpLHRoaXMudXZzMi5wdXNoKG5ldyBkLG5ldyBkLG5ldyBkKSkpO2ZvcihyYT0wO3JhPEU7cmErKyl7dmFyIGlhPXpbcmFdLnZlcnRpY2VzO0hbcmFdLmRhdGEucHVzaChpYVtxYS5hXSxpYVtxYS5iXSxpYVtxYS5jXSl9Zm9yKHJhPTA7cmE8UTtyYSsrKWlhPU9bcmFdLnZlcnRleE5vcm1hbHNbSV0sUltyYV0uZGF0YS5wdXNoKGlhLmEsaWEuYiwKaWEuYyk7WiYmdGhpcy5za2luSW5kaWNlcy5wdXNoKFVbcWEuYV0sVVtxYS5iXSxVW3FhLmNdKTtmYSYmdGhpcy5za2luV2VpZ2h0cy5wdXNoKFdbcWEuYV0sV1txYS5iXSxXW3FhLmNdKX10aGlzLmNvbXB1dGVHcm91cHMoYik7dGhpcy52ZXJ0aWNlc05lZWRVcGRhdGU9Yi52ZXJ0aWNlc05lZWRVcGRhdGU7dGhpcy5ub3JtYWxzTmVlZFVwZGF0ZT1iLm5vcm1hbHNOZWVkVXBkYXRlO3RoaXMuY29sb3JzTmVlZFVwZGF0ZT1iLmNvbG9yc05lZWRVcGRhdGU7dGhpcy51dnNOZWVkVXBkYXRlPWIudXZzTmVlZFVwZGF0ZTt0aGlzLmdyb3Vwc05lZWRVcGRhdGU9Yi5ncm91cHNOZWVkVXBkYXRlO3JldHVybiB0aGlzfX0pO3ZhciBObj0xO3hhLnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoYy5wcm90b3R5cGUpLHtjb25zdHJ1Y3Rvcjp4YSxpc0J1ZmZlckdlb21ldHJ5OiEwLGdldEluZGV4OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5kZXh9LHNldEluZGV4OmZ1bmN0aW9uKGIpe3RoaXMuaW5kZXg9CkFycmF5LmlzQXJyYXkoYik/bmV3ICg2NTUzNTxDYShiKT9rYTpjYSkoYiwxKTpifSxhZGRBdHRyaWJ1dGU6ZnVuY3Rpb24oYixlLGgpe2lmKCEoZSYmZS5pc0J1ZmZlckF0dHJpYnV0ZXx8ZSYmZS5pc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlKSlyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJHZW9tZXRyeTogLmFkZEF0dHJpYnV0ZSgpIG5vdyBleHBlY3RzICggbmFtZSwgYXR0cmlidXRlICkuIiksdGhpcy5hZGRBdHRyaWJ1dGUoYixuZXcgVChlLGgpKTtpZigiaW5kZXgiPT09YilyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJHZW9tZXRyeS5hZGRBdHRyaWJ1dGU6IFVzZSAuc2V0SW5kZXgoKSBmb3IgaW5kZXggYXR0cmlidXRlLiIpLHRoaXMuc2V0SW5kZXgoZSksdGhpczt0aGlzLmF0dHJpYnV0ZXNbYl09ZTtyZXR1cm4gdGhpc30sZ2V0QXR0cmlidXRlOmZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmF0dHJpYnV0ZXNbYl19LHJlbW92ZUF0dHJpYnV0ZTpmdW5jdGlvbihiKXtkZWxldGUgdGhpcy5hdHRyaWJ1dGVzW2JdOwpyZXR1cm4gdGhpc30sYWRkR3JvdXA6ZnVuY3Rpb24oYixlLGgpe3RoaXMuZ3JvdXBzLnB1c2goe3N0YXJ0OmIsY291bnQ6ZSxtYXRlcmlhbEluZGV4OnZvaWQgMCE9PWg/aDowfSl9LGNsZWFyR3JvdXBzOmZ1bmN0aW9uKCl7dGhpcy5ncm91cHM9W119LHNldERyYXdSYW5nZTpmdW5jdGlvbihiLGUpe3RoaXMuZHJhd1JhbmdlLnN0YXJ0PWI7dGhpcy5kcmF3UmFuZ2UuY291bnQ9ZX0sYXBwbHlNYXRyaXg6ZnVuY3Rpb24oYil7dmFyIGU9dGhpcy5hdHRyaWJ1dGVzLnBvc2l0aW9uO3ZvaWQgMCE9PWUmJihiLmFwcGx5VG9CdWZmZXJBdHRyaWJ1dGUoZSksZS5uZWVkc1VwZGF0ZT0hMCk7dmFyIGg9dGhpcy5hdHRyaWJ1dGVzLm5vcm1hbDt2b2lkIDAhPT1oJiYoZT0obmV3IGwpLmdldE5vcm1hbE1hdHJpeChiKSxlLmFwcGx5VG9CdWZmZXJBdHRyaWJ1dGUoaCksaC5uZWVkc1VwZGF0ZT0hMCk7aD10aGlzLmF0dHJpYnV0ZXMudGFuZ2VudDt2b2lkIDAhPT1oJiYoZT0obmV3IGwpLmdldE5vcm1hbE1hdHJpeChiKSwKZS5hcHBseVRvQnVmZmVyQXR0cmlidXRlKGgpLGgubmVlZHNVcGRhdGU9ITApO251bGwhPT10aGlzLmJvdW5kaW5nQm94JiZ0aGlzLmNvbXB1dGVCb3VuZGluZ0JveCgpO251bGwhPT10aGlzLmJvdW5kaW5nU3BoZXJlJiZ0aGlzLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpO3JldHVybiB0aGlzfSxyb3RhdGVYOmZ1bmN0aW9uKCl7dmFyIGI9bmV3IEM7cmV0dXJuIGZ1bmN0aW9uKGUpe2IubWFrZVJvdGF0aW9uWChlKTt0aGlzLmFwcGx5TWF0cml4KGIpO3JldHVybiB0aGlzfX0oKSxyb3RhdGVZOmZ1bmN0aW9uKCl7dmFyIGI9bmV3IEM7cmV0dXJuIGZ1bmN0aW9uKGUpe2IubWFrZVJvdGF0aW9uWShlKTt0aGlzLmFwcGx5TWF0cml4KGIpO3JldHVybiB0aGlzfX0oKSxyb3RhdGVaOmZ1bmN0aW9uKCl7dmFyIGI9bmV3IEM7cmV0dXJuIGZ1bmN0aW9uKGUpe2IubWFrZVJvdGF0aW9uWihlKTt0aGlzLmFwcGx5TWF0cml4KGIpO3JldHVybiB0aGlzfX0oKSx0cmFuc2xhdGU6ZnVuY3Rpb24oKXt2YXIgYj0KbmV3IEM7cmV0dXJuIGZ1bmN0aW9uKGUsaCxuKXtiLm1ha2VUcmFuc2xhdGlvbihlLGgsbik7dGhpcy5hcHBseU1hdHJpeChiKTtyZXR1cm4gdGhpc319KCksc2NhbGU6ZnVuY3Rpb24oKXt2YXIgYj1uZXcgQztyZXR1cm4gZnVuY3Rpb24oZSxoLG4pe2IubWFrZVNjYWxlKGUsaCxuKTt0aGlzLmFwcGx5TWF0cml4KGIpO3JldHVybiB0aGlzfX0oKSxsb29rQXQ6ZnVuY3Rpb24oKXt2YXIgYj1uZXcgUztyZXR1cm4gZnVuY3Rpb24oZSl7Yi5sb29rQXQoZSk7Yi51cGRhdGVNYXRyaXgoKTt0aGlzLmFwcGx5TWF0cml4KGIubWF0cml4KX19KCksY2VudGVyOmZ1bmN0aW9uKCl7dmFyIGI9bmV3IGc7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5jb21wdXRlQm91bmRpbmdCb3goKTt0aGlzLmJvdW5kaW5nQm94LmdldENlbnRlcihiKS5uZWdhdGUoKTt0aGlzLnRyYW5zbGF0ZShiLngsYi55LGIueik7cmV0dXJuIHRoaXN9fSgpLHNldEZyb21PYmplY3Q6ZnVuY3Rpb24oYil7dmFyIGU9Yi5nZW9tZXRyeTsKaWYoYi5pc1BvaW50c3x8Yi5pc0xpbmUpe2I9bmV3IGJhKDMqZS52ZXJ0aWNlcy5sZW5ndGgsMyk7dmFyIGg9bmV3IGJhKDMqZS5jb2xvcnMubGVuZ3RoLDMpO3RoaXMuYWRkQXR0cmlidXRlKCJwb3NpdGlvbiIsYi5jb3B5VmVjdG9yM3NBcnJheShlLnZlcnRpY2VzKSk7dGhpcy5hZGRBdHRyaWJ1dGUoImNvbG9yIixoLmNvcHlDb2xvcnNBcnJheShlLmNvbG9ycykpO2UubGluZURpc3RhbmNlcyYmZS5saW5lRGlzdGFuY2VzLmxlbmd0aD09PWUudmVydGljZXMubGVuZ3RoJiYoYj1uZXcgYmEoZS5saW5lRGlzdGFuY2VzLmxlbmd0aCwxKSx0aGlzLmFkZEF0dHJpYnV0ZSgibGluZURpc3RhbmNlIixiLmNvcHlBcnJheShlLmxpbmVEaXN0YW5jZXMpKSk7bnVsbCE9PWUuYm91bmRpbmdTcGhlcmUmJih0aGlzLmJvdW5kaW5nU3BoZXJlPWUuYm91bmRpbmdTcGhlcmUuY2xvbmUoKSk7bnVsbCE9PWUuYm91bmRpbmdCb3gmJih0aGlzLmJvdW5kaW5nQm94PWUuYm91bmRpbmdCb3guY2xvbmUoKSl9ZWxzZSBiLmlzTWVzaCYmCmUmJmUuaXNHZW9tZXRyeSYmdGhpcy5mcm9tR2VvbWV0cnkoZSk7cmV0dXJuIHRoaXN9LHNldEZyb21Qb2ludHM6ZnVuY3Rpb24oYil7Zm9yKHZhciBlPVtdLGg9MCxuPWIubGVuZ3RoO2g8bjtoKyspe3ZhciB1PWJbaF07ZS5wdXNoKHUueCx1LnksdS56fHwwKX10aGlzLmFkZEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBiYShlLDMpKTtyZXR1cm4gdGhpc30sdXBkYXRlRnJvbU9iamVjdDpmdW5jdGlvbihiKXt2YXIgZT1iLmdlb21ldHJ5O2lmKGIuaXNNZXNoKXt2YXIgaD1lLl9fZGlyZWN0R2VvbWV0cnk7ITA9PT1lLmVsZW1lbnRzTmVlZFVwZGF0ZSYmKGg9dm9pZCAwLGUuZWxlbWVudHNOZWVkVXBkYXRlPSExKTtpZih2b2lkIDA9PT1oKXJldHVybiB0aGlzLmZyb21HZW9tZXRyeShlKTtoLnZlcnRpY2VzTmVlZFVwZGF0ZT1lLnZlcnRpY2VzTmVlZFVwZGF0ZTtoLm5vcm1hbHNOZWVkVXBkYXRlPWUubm9ybWFsc05lZWRVcGRhdGU7aC5jb2xvcnNOZWVkVXBkYXRlPWUuY29sb3JzTmVlZFVwZGF0ZTsKaC51dnNOZWVkVXBkYXRlPWUudXZzTmVlZFVwZGF0ZTtoLmdyb3Vwc05lZWRVcGRhdGU9ZS5ncm91cHNOZWVkVXBkYXRlO2UudmVydGljZXNOZWVkVXBkYXRlPSExO2Uubm9ybWFsc05lZWRVcGRhdGU9ITE7ZS5jb2xvcnNOZWVkVXBkYXRlPSExO2UudXZzTmVlZFVwZGF0ZT0hMTtlLmdyb3Vwc05lZWRVcGRhdGU9ITE7ZT1ofSEwPT09ZS52ZXJ0aWNlc05lZWRVcGRhdGUmJihoPXRoaXMuYXR0cmlidXRlcy5wb3NpdGlvbix2b2lkIDAhPT1oJiYoaC5jb3B5VmVjdG9yM3NBcnJheShlLnZlcnRpY2VzKSxoLm5lZWRzVXBkYXRlPSEwKSxlLnZlcnRpY2VzTmVlZFVwZGF0ZT0hMSk7ITA9PT1lLm5vcm1hbHNOZWVkVXBkYXRlJiYoaD10aGlzLmF0dHJpYnV0ZXMubm9ybWFsLHZvaWQgMCE9PWgmJihoLmNvcHlWZWN0b3Izc0FycmF5KGUubm9ybWFscyksaC5uZWVkc1VwZGF0ZT0hMCksZS5ub3JtYWxzTmVlZFVwZGF0ZT0hMSk7ITA9PT1lLmNvbG9yc05lZWRVcGRhdGUmJihoPXRoaXMuYXR0cmlidXRlcy5jb2xvciwKdm9pZCAwIT09aCYmKGguY29weUNvbG9yc0FycmF5KGUuY29sb3JzKSxoLm5lZWRzVXBkYXRlPSEwKSxlLmNvbG9yc05lZWRVcGRhdGU9ITEpO2UudXZzTmVlZFVwZGF0ZSYmKGg9dGhpcy5hdHRyaWJ1dGVzLnV2LHZvaWQgMCE9PWgmJihoLmNvcHlWZWN0b3Iyc0FycmF5KGUudXZzKSxoLm5lZWRzVXBkYXRlPSEwKSxlLnV2c05lZWRVcGRhdGU9ITEpO2UubGluZURpc3RhbmNlc05lZWRVcGRhdGUmJihoPXRoaXMuYXR0cmlidXRlcy5saW5lRGlzdGFuY2Usdm9pZCAwIT09aCYmKGguY29weUFycmF5KGUubGluZURpc3RhbmNlcyksaC5uZWVkc1VwZGF0ZT0hMCksZS5saW5lRGlzdGFuY2VzTmVlZFVwZGF0ZT0hMSk7ZS5ncm91cHNOZWVkVXBkYXRlJiYoZS5jb21wdXRlR3JvdXBzKGIuZ2VvbWV0cnkpLHRoaXMuZ3JvdXBzPWUuZ3JvdXBzLGUuZ3JvdXBzTmVlZFVwZGF0ZT0hMSk7cmV0dXJuIHRoaXN9LGZyb21HZW9tZXRyeTpmdW5jdGlvbihiKXtiLl9fZGlyZWN0R2VvbWV0cnk9KG5ldyB3YSkuZnJvbUdlb21ldHJ5KGIpOwpyZXR1cm4gdGhpcy5mcm9tRGlyZWN0R2VvbWV0cnkoYi5fX2RpcmVjdEdlb21ldHJ5KX0sZnJvbURpcmVjdEdlb21ldHJ5OmZ1bmN0aW9uKGIpe3RoaXMuYWRkQXR0cmlidXRlKCJwb3NpdGlvbiIsKG5ldyBUKG5ldyBGbG9hdDMyQXJyYXkoMypiLnZlcnRpY2VzLmxlbmd0aCksMykpLmNvcHlWZWN0b3Izc0FycmF5KGIudmVydGljZXMpKTswPGIubm9ybWFscy5sZW5ndGgmJnRoaXMuYWRkQXR0cmlidXRlKCJub3JtYWwiLChuZXcgVChuZXcgRmxvYXQzMkFycmF5KDMqYi5ub3JtYWxzLmxlbmd0aCksMykpLmNvcHlWZWN0b3Izc0FycmF5KGIubm9ybWFscykpOzA8Yi5jb2xvcnMubGVuZ3RoJiZ0aGlzLmFkZEF0dHJpYnV0ZSgiY29sb3IiLChuZXcgVChuZXcgRmxvYXQzMkFycmF5KDMqYi5jb2xvcnMubGVuZ3RoKSwzKSkuY29weUNvbG9yc0FycmF5KGIuY29sb3JzKSk7MDxiLnV2cy5sZW5ndGgmJnRoaXMuYWRkQXR0cmlidXRlKCJ1diIsKG5ldyBUKG5ldyBGbG9hdDMyQXJyYXkoMioKYi51dnMubGVuZ3RoKSwyKSkuY29weVZlY3RvcjJzQXJyYXkoYi51dnMpKTswPGIudXZzMi5sZW5ndGgmJnRoaXMuYWRkQXR0cmlidXRlKCJ1djIiLChuZXcgVChuZXcgRmxvYXQzMkFycmF5KDIqYi51dnMyLmxlbmd0aCksMikpLmNvcHlWZWN0b3Iyc0FycmF5KGIudXZzMikpO3RoaXMuZ3JvdXBzPWIuZ3JvdXBzO2Zvcih2YXIgZSBpbiBiLm1vcnBoVGFyZ2V0cyl7Zm9yKHZhciBoPVtdLG49Yi5tb3JwaFRhcmdldHNbZV0sdT0wLHc9bi5sZW5ndGg7dTx3O3UrKyl7dmFyIHo9blt1XSxFPW5ldyBiYSgzKnouZGF0YS5sZW5ndGgsMyk7RS5uYW1lPXoubmFtZTtoLnB1c2goRS5jb3B5VmVjdG9yM3NBcnJheSh6LmRhdGEpKX10aGlzLm1vcnBoQXR0cmlidXRlc1tlXT1ofTA8Yi5za2luSW5kaWNlcy5sZW5ndGgmJihlPW5ldyBiYSg0KmIuc2tpbkluZGljZXMubGVuZ3RoLDQpLHRoaXMuYWRkQXR0cmlidXRlKCJza2luSW5kZXgiLGUuY29weVZlY3RvcjRzQXJyYXkoYi5za2luSW5kaWNlcykpKTsKMDxiLnNraW5XZWlnaHRzLmxlbmd0aCYmKGU9bmV3IGJhKDQqYi5za2luV2VpZ2h0cy5sZW5ndGgsNCksdGhpcy5hZGRBdHRyaWJ1dGUoInNraW5XZWlnaHQiLGUuY29weVZlY3RvcjRzQXJyYXkoYi5za2luV2VpZ2h0cykpKTtudWxsIT09Yi5ib3VuZGluZ1NwaGVyZSYmKHRoaXMuYm91bmRpbmdTcGhlcmU9Yi5ib3VuZGluZ1NwaGVyZS5jbG9uZSgpKTtudWxsIT09Yi5ib3VuZGluZ0JveCYmKHRoaXMuYm91bmRpbmdCb3g9Yi5ib3VuZGluZ0JveC5jbG9uZSgpKTtyZXR1cm4gdGhpc30sY29tcHV0ZUJvdW5kaW5nQm94OmZ1bmN0aW9uKCl7dmFyIGI9bmV3IHY7cmV0dXJuIGZ1bmN0aW9uKCl7bnVsbD09PXRoaXMuYm91bmRpbmdCb3gmJih0aGlzLmJvdW5kaW5nQm94PW5ldyB2KTt2YXIgZT10aGlzLmF0dHJpYnV0ZXMucG9zaXRpb24saD10aGlzLm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbjtpZih2b2lkIDAhPT1lKXtpZih0aGlzLmJvdW5kaW5nQm94LnNldEZyb21CdWZmZXJBdHRyaWJ1dGUoZSksCmgpe2U9MDtmb3IodmFyIG49aC5sZW5ndGg7ZTxuO2UrKyliLnNldEZyb21CdWZmZXJBdHRyaWJ1dGUoaFtlXSksdGhpcy5ib3VuZGluZ0JveC5leHBhbmRCeVBvaW50KGIubWluKSx0aGlzLmJvdW5kaW5nQm94LmV4cGFuZEJ5UG9pbnQoYi5tYXgpfX1lbHNlIHRoaXMuYm91bmRpbmdCb3gubWFrZUVtcHR5KCk7KGlzTmFOKHRoaXMuYm91bmRpbmdCb3gubWluLngpfHxpc05hTih0aGlzLmJvdW5kaW5nQm94Lm1pbi55KXx8aXNOYU4odGhpcy5ib3VuZGluZ0JveC5taW4ueikpJiZjb25zb2xlLmVycm9yKCdUSFJFRS5CdWZmZXJHZW9tZXRyeS5jb21wdXRlQm91bmRpbmdCb3g6IENvbXB1dGVkIG1pbi9tYXggaGF2ZSBOYU4gdmFsdWVzLiBUaGUgInBvc2l0aW9uIiBhdHRyaWJ1dGUgaXMgbGlrZWx5IHRvIGhhdmUgTmFOIHZhbHVlcy4nLHRoaXMpfX0oKSxjb21wdXRlQm91bmRpbmdTcGhlcmU6ZnVuY3Rpb24oKXt2YXIgYj1uZXcgdixlPW5ldyB2LGg9bmV3IGc7cmV0dXJuIGZ1bmN0aW9uKCl7bnVsbD09PQp0aGlzLmJvdW5kaW5nU3BoZXJlJiYodGhpcy5ib3VuZGluZ1NwaGVyZT1uZXcgQSk7dmFyIG49dGhpcy5hdHRyaWJ1dGVzLnBvc2l0aW9uLHU9dGhpcy5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb247aWYobil7dmFyIHc9dGhpcy5ib3VuZGluZ1NwaGVyZS5jZW50ZXI7Yi5zZXRGcm9tQnVmZmVyQXR0cmlidXRlKG4pO2lmKHUpZm9yKHZhciB6PTAsRT11Lmxlbmd0aDt6PEU7eisrKXt2YXIgSD11W3pdO2Uuc2V0RnJvbUJ1ZmZlckF0dHJpYnV0ZShIKTtiLmV4cGFuZEJ5UG9pbnQoZS5taW4pO2IuZXhwYW5kQnlQb2ludChlLm1heCl9Yi5nZXRDZW50ZXIodyk7dmFyIEk9MDt6PTA7Zm9yKEU9bi5jb3VudDt6PEU7eisrKWguZnJvbUJ1ZmZlckF0dHJpYnV0ZShuLHopLEk9TWF0aC5tYXgoSSx3LmRpc3RhbmNlVG9TcXVhcmVkKGgpKTtpZih1KWZvcih6PTAsRT11Lmxlbmd0aDt6PEU7eisrKXtIPXVbel07bj0wO2Zvcih2YXIgTz1ILmNvdW50O248TztuKyspaC5mcm9tQnVmZmVyQXR0cmlidXRlKEgsCm4pLEk9TWF0aC5tYXgoSSx3LmRpc3RhbmNlVG9TcXVhcmVkKGgpKX10aGlzLmJvdW5kaW5nU3BoZXJlLnJhZGl1cz1NYXRoLnNxcnQoSSk7aXNOYU4odGhpcy5ib3VuZGluZ1NwaGVyZS5yYWRpdXMpJiZjb25zb2xlLmVycm9yKCdUSFJFRS5CdWZmZXJHZW9tZXRyeS5jb21wdXRlQm91bmRpbmdTcGhlcmUoKTogQ29tcHV0ZWQgcmFkaXVzIGlzIE5hTi4gVGhlICJwb3NpdGlvbiIgYXR0cmlidXRlIGlzIGxpa2VseSB0byBoYXZlIE5hTiB2YWx1ZXMuJyx0aGlzKX19fSgpLGNvbXB1dGVGYWNlTm9ybWFsczpmdW5jdGlvbigpe30sY29tcHV0ZVZlcnRleE5vcm1hbHM6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLmluZGV4LGU9dGhpcy5hdHRyaWJ1dGVzO2lmKGUucG9zaXRpb24pe3ZhciBoPWUucG9zaXRpb24uYXJyYXk7aWYodm9pZCAwPT09ZS5ub3JtYWwpdGhpcy5hZGRBdHRyaWJ1dGUoIm5vcm1hbCIsbmV3IFQobmV3IEZsb2F0MzJBcnJheShoLmxlbmd0aCksMykpO2Vsc2UgZm9yKHZhciBuPQplLm5vcm1hbC5hcnJheSx1PTAsdz1uLmxlbmd0aDt1PHc7dSsrKW5bdV09MDtuPWUubm9ybWFsLmFycmF5O3ZhciB6PW5ldyBnLEU9bmV3IGcsSD1uZXcgZyxJPW5ldyBnLE89bmV3IGc7aWYoYil7dmFyIFE9Yi5hcnJheTt1PTA7Zm9yKHc9Yi5jb3VudDt1PHc7dSs9Myl7Yj0zKlFbdSswXTt2YXIgUj0zKlFbdSsxXTt2YXIgVT0zKlFbdSsyXTt6LmZyb21BcnJheShoLGIpO0UuZnJvbUFycmF5KGgsUik7SC5mcm9tQXJyYXkoaCxVKTtJLnN1YlZlY3RvcnMoSCxFKTtPLnN1YlZlY3RvcnMoeixFKTtJLmNyb3NzKE8pO25bYl0rPUkueDtuW2IrMV0rPUkueTtuW2IrMl0rPUkuejtuW1JdKz1JLng7bltSKzFdKz1JLnk7bltSKzJdKz1JLno7bltVXSs9SS54O25bVSsxXSs9SS55O25bVSsyXSs9SS56fX1lbHNlIGZvcih1PTAsdz1oLmxlbmd0aDt1PHc7dSs9OSl6LmZyb21BcnJheShoLHUpLEUuZnJvbUFycmF5KGgsdSszKSxILmZyb21BcnJheShoLHUrNiksSS5zdWJWZWN0b3JzKEgsRSksCk8uc3ViVmVjdG9ycyh6LEUpLEkuY3Jvc3MoTyksblt1XT1JLngsblt1KzFdPUkueSxuW3UrMl09SS56LG5bdSszXT1JLngsblt1KzRdPUkueSxuW3UrNV09SS56LG5bdSs2XT1JLngsblt1KzddPUkueSxuW3UrOF09SS56O3RoaXMubm9ybWFsaXplTm9ybWFscygpO2Uubm9ybWFsLm5lZWRzVXBkYXRlPSEwfX0sbWVyZ2U6ZnVuY3Rpb24oYixlKXtpZihiJiZiLmlzQnVmZmVyR2VvbWV0cnkpe3ZvaWQgMD09PWUmJihlPTAsY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJHZW9tZXRyeS5tZXJnZSgpOiBPdmVyd3JpdGluZyBvcmlnaW5hbCBnZW9tZXRyeSwgc3RhcnRpbmcgYXQgb2Zmc2V0XHgzZDAuIFVzZSBCdWZmZXJHZW9tZXRyeVV0aWxzLm1lcmdlQnVmZmVyR2VvbWV0cmllcygpIGZvciBsb3NzbGVzcyBtZXJnZS4iKSk7dmFyIGg9dGhpcy5hdHRyaWJ1dGVzLG47Zm9yKG4gaW4gaClpZih2b2lkIDAhPT1iLmF0dHJpYnV0ZXNbbl0pe3ZhciB1PWhbbl0uYXJyYXksdz1iLmF0dHJpYnV0ZXNbbl0sCno9dy5hcnJheSxFPXcuaXRlbVNpemUqZTt3PU1hdGgubWluKHoubGVuZ3RoLHUubGVuZ3RoLUUpO2Zvcih2YXIgSD0wO0g8dztIKyssRSsrKXVbRV09eltIXX1yZXR1cm4gdGhpc31jb25zb2xlLmVycm9yKCJUSFJFRS5CdWZmZXJHZW9tZXRyeS5tZXJnZSgpOiBnZW9tZXRyeSBub3QgYW4gaW5zdGFuY2Ugb2YgVEhSRUUuQnVmZmVyR2VvbWV0cnkuIixiKX0sbm9ybWFsaXplTm9ybWFsczpmdW5jdGlvbigpe3ZhciBiPW5ldyBnO3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLmF0dHJpYnV0ZXMubm9ybWFsLGg9MCxuPWUuY291bnQ7aDxuO2grKyliLng9ZS5nZXRYKGgpLGIueT1lLmdldFkoaCksYi56PWUuZ2V0WihoKSxiLm5vcm1hbGl6ZSgpLGUuc2V0WFlaKGgsYi54LGIueSxiLnopfX0oKSx0b05vbkluZGV4ZWQ6ZnVuY3Rpb24oKXtmdW5jdGlvbiBiKE8sUSl7dmFyIFI9Ty5hcnJheTtPPU8uaXRlbVNpemU7Zm9yKHZhciBVPW5ldyBSLmNvbnN0cnVjdG9yKFEubGVuZ3RoKgpPKSxXLFo9MCxmYT0wLHFhPVEubGVuZ3RoO2ZhPHFhO2ZhKyspe1c9UVtmYV0qTztmb3IodmFyIHJhPTA7cmE8TztyYSsrKVVbWisrXT1SW1crK119cmV0dXJuIG5ldyBUKFUsTyl9aWYobnVsbD09PXRoaXMuaW5kZXgpcmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnkudG9Ob25JbmRleGVkKCk6IEdlb21ldHJ5IGlzIGFscmVhZHkgbm9uLWluZGV4ZWQuIiksdGhpczt2YXIgZT1uZXcgeGEsaD10aGlzLmluZGV4LmFycmF5LG49dGhpcy5hdHRyaWJ1dGVzLHU7Zm9yKHUgaW4gbil7dmFyIHc9blt1XTt3PWIodyxoKTtlLmFkZEF0dHJpYnV0ZSh1LHcpfXZhciB6PXRoaXMubW9ycGhBdHRyaWJ1dGVzO2Zvcih1IGluIHope3ZhciBFPVtdLEg9elt1XTtuPTA7Zm9yKHZhciBJPUgubGVuZ3RoO248STtuKyspdz1IW25dLHc9Yih3LGgpLEUucHVzaCh3KTtlLm1vcnBoQXR0cmlidXRlc1t1XT1FfWg9dGhpcy5ncm91cHM7bj0wO2Zvcih1PWgubGVuZ3RoO248dTtuKyspdz0KaFtuXSxlLmFkZEdyb3VwKHcuc3RhcnQsdy5jb3VudCx3Lm1hdGVyaWFsSW5kZXgpO3JldHVybiBlfSx0b0pTT046ZnVuY3Rpb24oKXt2YXIgYj17bWV0YWRhdGE6e3ZlcnNpb246NC41LHR5cGU6IkJ1ZmZlckdlb21ldHJ5IixnZW5lcmF0b3I6IkJ1ZmZlckdlb21ldHJ5LnRvSlNPTiJ9fTtiLnV1aWQ9dGhpcy51dWlkO2IudHlwZT10aGlzLnR5cGU7IiIhPT10aGlzLm5hbWUmJihiLm5hbWU9dGhpcy5uYW1lKTswPE9iamVjdC5rZXlzKHRoaXMudXNlckRhdGEpLmxlbmd0aCYmKGIudXNlckRhdGE9dGhpcy51c2VyRGF0YSk7aWYodm9pZCAwIT09dGhpcy5wYXJhbWV0ZXJzKXt2YXIgZT10aGlzLnBhcmFtZXRlcnM7Zm9yKEkgaW4gZSl2b2lkIDAhPT1lW0ldJiYoYltJXT1lW0ldKTtyZXR1cm4gYn1iLmRhdGE9e2F0dHJpYnV0ZXM6e319O2U9dGhpcy5pbmRleDtudWxsIT09ZSYmKGIuZGF0YS5pbmRleD17dHlwZTplLmFycmF5LmNvbnN0cnVjdG9yLm5hbWUsYXJyYXk6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZS5hcnJheSl9KTsKdmFyIGg9dGhpcy5hdHRyaWJ1dGVzO2ZvcihJIGluIGgpe2U9aFtJXTt2YXIgbj17aXRlbVNpemU6ZS5pdGVtU2l6ZSx0eXBlOmUuYXJyYXkuY29uc3RydWN0b3IubmFtZSxhcnJheTpBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChlLmFycmF5KSxub3JtYWxpemVkOmUubm9ybWFsaXplZH07IiIhPT1lLm5hbWUmJihuLm5hbWU9ZS5uYW1lKTtiLmRhdGEuYXR0cmlidXRlc1tJXT1ufWg9e307dmFyIHU9ITE7Zm9yKEkgaW4gdGhpcy5tb3JwaEF0dHJpYnV0ZXMpe2Zvcih2YXIgdz10aGlzLm1vcnBoQXR0cmlidXRlc1tJXSx6PVtdLEU9MCxIPXcubGVuZ3RoO0U8SDtFKyspZT13W0VdLG49e2l0ZW1TaXplOmUuaXRlbVNpemUsdHlwZTplLmFycmF5LmNvbnN0cnVjdG9yLm5hbWUsYXJyYXk6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZS5hcnJheSksbm9ybWFsaXplZDplLm5vcm1hbGl6ZWR9LCIiIT09ZS5uYW1lJiYobi5uYW1lPWUubmFtZSksei5wdXNoKG4pOzA8ei5sZW5ndGgmJgooaFtJXT16LHU9ITApfXUmJihiLmRhdGEubW9ycGhBdHRyaWJ1dGVzPWgpO3ZhciBJPXRoaXMuZ3JvdXBzOzA8SS5sZW5ndGgmJihiLmRhdGEuZ3JvdXBzPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoSSkpKTtJPXRoaXMuYm91bmRpbmdTcGhlcmU7bnVsbCE9PUkmJihiLmRhdGEuYm91bmRpbmdTcGhlcmU9e2NlbnRlcjpJLmNlbnRlci50b0FycmF5KCkscmFkaXVzOkkucmFkaXVzfSk7cmV0dXJuIGJ9LGNsb25lOmZ1bmN0aW9uKCl7cmV0dXJuKG5ldyB4YSkuY29weSh0aGlzKX0sY29weTpmdW5jdGlvbihiKXt2YXIgZTt0aGlzLmluZGV4PW51bGw7dGhpcy5hdHRyaWJ1dGVzPXt9O3RoaXMubW9ycGhBdHRyaWJ1dGVzPXt9O3RoaXMuZ3JvdXBzPVtdO3RoaXMuYm91bmRpbmdTcGhlcmU9dGhpcy5ib3VuZGluZ0JveD1udWxsO3RoaXMubmFtZT1iLm5hbWU7dmFyIGg9Yi5pbmRleDtudWxsIT09aCYmdGhpcy5zZXRJbmRleChoLmNsb25lKCkpO2g9Yi5hdHRyaWJ1dGVzO2Zvcih6IGluIGgpdGhpcy5hZGRBdHRyaWJ1dGUoeiwKaFt6XS5jbG9uZSgpKTt2YXIgbj1iLm1vcnBoQXR0cmlidXRlcztmb3IoeiBpbiBuKXt2YXIgdT1bXSx3PW5bel07aD0wO2ZvcihlPXcubGVuZ3RoO2g8ZTtoKyspdS5wdXNoKHdbaF0uY2xvbmUoKSk7dGhpcy5tb3JwaEF0dHJpYnV0ZXNbel09dX12YXIgej1iLmdyb3VwcztoPTA7Zm9yKGU9ei5sZW5ndGg7aDxlO2grKyluPXpbaF0sdGhpcy5hZGRHcm91cChuLnN0YXJ0LG4uY291bnQsbi5tYXRlcmlhbEluZGV4KTt6PWIuYm91bmRpbmdCb3g7bnVsbCE9PXomJih0aGlzLmJvdW5kaW5nQm94PXouY2xvbmUoKSk7ej1iLmJvdW5kaW5nU3BoZXJlO251bGwhPT16JiYodGhpcy5ib3VuZGluZ1NwaGVyZT16LmNsb25lKCkpO3RoaXMuZHJhd1JhbmdlLnN0YXJ0PWIuZHJhd1JhbmdlLnN0YXJ0O3RoaXMuZHJhd1JhbmdlLmNvdW50PWIuZHJhd1JhbmdlLmNvdW50O3RoaXMudXNlckRhdGE9Yi51c2VyRGF0YTtyZXR1cm4gdGhpc30sZGlzcG9zZTpmdW5jdGlvbigpe3RoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZToiZGlzcG9zZSJ9KX19KTsKemEucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoTi5wcm90b3R5cGUpO3phLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj16YTtGYS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh4YS5wcm90b3R5cGUpO0ZhLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1GYTtTYS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShOLnByb3RvdHlwZSk7U2EucHJvdG90eXBlLmNvbnN0cnVjdG9yPVNhO0VhLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHhhLnByb3RvdHlwZSk7RWEucHJvdG90eXBlLmNvbnN0cnVjdG9yPUVhO3ZhciBPbj0wO0dhLnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoYy5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpHYSxpc01hdGVyaWFsOiEwLG9uQmVmb3JlQ29tcGlsZTpmdW5jdGlvbigpe30sc2V0VmFsdWVzOmZ1bmN0aW9uKGIpe2lmKHZvaWQgMCE9PWIpZm9yKHZhciBlIGluIGIpe3ZhciBoPWJbZV07aWYodm9pZCAwPT09aCljb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsOiAnIisKZSsiJyBwYXJhbWV0ZXIgaXMgdW5kZWZpbmVkLiIpO2Vsc2UgaWYoInNoYWRpbmciPT09ZSljb25zb2xlLndhcm4oIlRIUkVFLiIrdGhpcy50eXBlKyI6IC5zaGFkaW5nIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSB0aGUgYm9vbGVhbiAuZmxhdFNoYWRpbmcgaW5zdGVhZC4iKSx0aGlzLmZsYXRTaGFkaW5nPTE9PT1oPyEwOiExO2Vsc2V7dmFyIG49dGhpc1tlXTt2b2lkIDA9PT1uP2NvbnNvbGUud2FybigiVEhSRUUuIit0aGlzLnR5cGUrIjogJyIrZSsiJyBpcyBub3QgYSBwcm9wZXJ0eSBvZiB0aGlzIG1hdGVyaWFsLiIpOm4mJm4uaXNDb2xvcj9uLnNldChoKTpuJiZuLmlzVmVjdG9yMyYmaCYmaC5pc1ZlY3RvcjM/bi5jb3B5KGgpOnRoaXNbZV09aH19fSx0b0pTT046ZnVuY3Rpb24oYil7ZnVuY3Rpb24gZSh1KXt2YXIgdz1bXSx6O2Zvcih6IGluIHUpe3ZhciBFPXVbel07ZGVsZXRlIEUubWV0YWRhdGE7dy5wdXNoKEUpfXJldHVybiB3fXZhciBoPXZvaWQgMD09PWJ8fCJzdHJpbmciPT09CnR5cGVvZiBiO2gmJihiPXt0ZXh0dXJlczp7fSxpbWFnZXM6e319KTt2YXIgbj17bWV0YWRhdGE6e3ZlcnNpb246NC41LHR5cGU6Ik1hdGVyaWFsIixnZW5lcmF0b3I6Ik1hdGVyaWFsLnRvSlNPTiJ9fTtuLnV1aWQ9dGhpcy51dWlkO24udHlwZT10aGlzLnR5cGU7IiIhPT10aGlzLm5hbWUmJihuLm5hbWU9dGhpcy5uYW1lKTt0aGlzLmNvbG9yJiZ0aGlzLmNvbG9yLmlzQ29sb3ImJihuLmNvbG9yPXRoaXMuY29sb3IuZ2V0SGV4KCkpO3ZvaWQgMCE9PXRoaXMucm91Z2huZXNzJiYobi5yb3VnaG5lc3M9dGhpcy5yb3VnaG5lc3MpO3ZvaWQgMCE9PXRoaXMubWV0YWxuZXNzJiYobi5tZXRhbG5lc3M9dGhpcy5tZXRhbG5lc3MpO3RoaXMuZW1pc3NpdmUmJnRoaXMuZW1pc3NpdmUuaXNDb2xvciYmKG4uZW1pc3NpdmU9dGhpcy5lbWlzc2l2ZS5nZXRIZXgoKSk7MSE9PXRoaXMuZW1pc3NpdmVJbnRlbnNpdHkmJihuLmVtaXNzaXZlSW50ZW5zaXR5PXRoaXMuZW1pc3NpdmVJbnRlbnNpdHkpOwp0aGlzLnNwZWN1bGFyJiZ0aGlzLnNwZWN1bGFyLmlzQ29sb3ImJihuLnNwZWN1bGFyPXRoaXMuc3BlY3VsYXIuZ2V0SGV4KCkpO3ZvaWQgMCE9PXRoaXMuc2hpbmluZXNzJiYobi5zaGluaW5lc3M9dGhpcy5zaGluaW5lc3MpO3ZvaWQgMCE9PXRoaXMuY2xlYXJDb2F0JiYobi5jbGVhckNvYXQ9dGhpcy5jbGVhckNvYXQpO3ZvaWQgMCE9PXRoaXMuY2xlYXJDb2F0Um91Z2huZXNzJiYobi5jbGVhckNvYXRSb3VnaG5lc3M9dGhpcy5jbGVhckNvYXRSb3VnaG5lc3MpO3RoaXMubWFwJiZ0aGlzLm1hcC5pc1RleHR1cmUmJihuLm1hcD10aGlzLm1hcC50b0pTT04oYikudXVpZCk7dGhpcy5tYXRjYXAmJnRoaXMubWF0Y2FwLmlzVGV4dHVyZSYmKG4ubWF0Y2FwPXRoaXMubWF0Y2FwLnRvSlNPTihiKS51dWlkKTt0aGlzLmFscGhhTWFwJiZ0aGlzLmFscGhhTWFwLmlzVGV4dHVyZSYmKG4uYWxwaGFNYXA9dGhpcy5hbHBoYU1hcC50b0pTT04oYikudXVpZCk7dGhpcy5saWdodE1hcCYmdGhpcy5saWdodE1hcC5pc1RleHR1cmUmJgoobi5saWdodE1hcD10aGlzLmxpZ2h0TWFwLnRvSlNPTihiKS51dWlkKTt0aGlzLmFvTWFwJiZ0aGlzLmFvTWFwLmlzVGV4dHVyZSYmKG4uYW9NYXA9dGhpcy5hb01hcC50b0pTT04oYikudXVpZCxuLmFvTWFwSW50ZW5zaXR5PXRoaXMuYW9NYXBJbnRlbnNpdHkpO3RoaXMuYnVtcE1hcCYmdGhpcy5idW1wTWFwLmlzVGV4dHVyZSYmKG4uYnVtcE1hcD10aGlzLmJ1bXBNYXAudG9KU09OKGIpLnV1aWQsbi5idW1wU2NhbGU9dGhpcy5idW1wU2NhbGUpO3RoaXMubm9ybWFsTWFwJiZ0aGlzLm5vcm1hbE1hcC5pc1RleHR1cmUmJihuLm5vcm1hbE1hcD10aGlzLm5vcm1hbE1hcC50b0pTT04oYikudXVpZCxuLm5vcm1hbE1hcFR5cGU9dGhpcy5ub3JtYWxNYXBUeXBlLG4ubm9ybWFsU2NhbGU9dGhpcy5ub3JtYWxTY2FsZS50b0FycmF5KCkpO3RoaXMuZGlzcGxhY2VtZW50TWFwJiZ0aGlzLmRpc3BsYWNlbWVudE1hcC5pc1RleHR1cmUmJihuLmRpc3BsYWNlbWVudE1hcD10aGlzLmRpc3BsYWNlbWVudE1hcC50b0pTT04oYikudXVpZCwKbi5kaXNwbGFjZW1lbnRTY2FsZT10aGlzLmRpc3BsYWNlbWVudFNjYWxlLG4uZGlzcGxhY2VtZW50Qmlhcz10aGlzLmRpc3BsYWNlbWVudEJpYXMpO3RoaXMucm91Z2huZXNzTWFwJiZ0aGlzLnJvdWdobmVzc01hcC5pc1RleHR1cmUmJihuLnJvdWdobmVzc01hcD10aGlzLnJvdWdobmVzc01hcC50b0pTT04oYikudXVpZCk7dGhpcy5tZXRhbG5lc3NNYXAmJnRoaXMubWV0YWxuZXNzTWFwLmlzVGV4dHVyZSYmKG4ubWV0YWxuZXNzTWFwPXRoaXMubWV0YWxuZXNzTWFwLnRvSlNPTihiKS51dWlkKTt0aGlzLmVtaXNzaXZlTWFwJiZ0aGlzLmVtaXNzaXZlTWFwLmlzVGV4dHVyZSYmKG4uZW1pc3NpdmVNYXA9dGhpcy5lbWlzc2l2ZU1hcC50b0pTT04oYikudXVpZCk7dGhpcy5zcGVjdWxhck1hcCYmdGhpcy5zcGVjdWxhck1hcC5pc1RleHR1cmUmJihuLnNwZWN1bGFyTWFwPXRoaXMuc3BlY3VsYXJNYXAudG9KU09OKGIpLnV1aWQpO3RoaXMuZW52TWFwJiZ0aGlzLmVudk1hcC5pc1RleHR1cmUmJgoobi5lbnZNYXA9dGhpcy5lbnZNYXAudG9KU09OKGIpLnV1aWQsbi5yZWZsZWN0aXZpdHk9dGhpcy5yZWZsZWN0aXZpdHksdm9pZCAwIT09dGhpcy5jb21iaW5lJiYobi5jb21iaW5lPXRoaXMuY29tYmluZSksdm9pZCAwIT09dGhpcy5lbnZNYXBJbnRlbnNpdHkmJihuLmVudk1hcEludGVuc2l0eT10aGlzLmVudk1hcEludGVuc2l0eSkpO3RoaXMuZ3JhZGllbnRNYXAmJnRoaXMuZ3JhZGllbnRNYXAuaXNUZXh0dXJlJiYobi5ncmFkaWVudE1hcD10aGlzLmdyYWRpZW50TWFwLnRvSlNPTihiKS51dWlkKTt2b2lkIDAhPT10aGlzLnNpemUmJihuLnNpemU9dGhpcy5zaXplKTt2b2lkIDAhPT10aGlzLnNpemVBdHRlbnVhdGlvbiYmKG4uc2l6ZUF0dGVudWF0aW9uPXRoaXMuc2l6ZUF0dGVudWF0aW9uKTsxIT09dGhpcy5ibGVuZGluZyYmKG4uYmxlbmRpbmc9dGhpcy5ibGVuZGluZyk7ITA9PT10aGlzLmZsYXRTaGFkaW5nJiYobi5mbGF0U2hhZGluZz10aGlzLmZsYXRTaGFkaW5nKTswIT09CnRoaXMuc2lkZSYmKG4uc2lkZT10aGlzLnNpZGUpOzAhPT10aGlzLnZlcnRleENvbG9ycyYmKG4udmVydGV4Q29sb3JzPXRoaXMudmVydGV4Q29sb3JzKTsxPnRoaXMub3BhY2l0eSYmKG4ub3BhY2l0eT10aGlzLm9wYWNpdHkpOyEwPT09dGhpcy50cmFuc3BhcmVudCYmKG4udHJhbnNwYXJlbnQ9dGhpcy50cmFuc3BhcmVudCk7bi5kZXB0aEZ1bmM9dGhpcy5kZXB0aEZ1bmM7bi5kZXB0aFRlc3Q9dGhpcy5kZXB0aFRlc3Q7bi5kZXB0aFdyaXRlPXRoaXMuZGVwdGhXcml0ZTswIT09dGhpcy5yb3RhdGlvbiYmKG4ucm90YXRpb249dGhpcy5yb3RhdGlvbik7ITA9PT10aGlzLnBvbHlnb25PZmZzZXQmJihuLnBvbHlnb25PZmZzZXQ9ITApOzAhPT10aGlzLnBvbHlnb25PZmZzZXRGYWN0b3ImJihuLnBvbHlnb25PZmZzZXRGYWN0b3I9dGhpcy5wb2x5Z29uT2Zmc2V0RmFjdG9yKTswIT09dGhpcy5wb2x5Z29uT2Zmc2V0VW5pdHMmJihuLnBvbHlnb25PZmZzZXRVbml0cz10aGlzLnBvbHlnb25PZmZzZXRVbml0cyk7CjEhPT10aGlzLmxpbmV3aWR0aCYmKG4ubGluZXdpZHRoPXRoaXMubGluZXdpZHRoKTt2b2lkIDAhPT10aGlzLmRhc2hTaXplJiYobi5kYXNoU2l6ZT10aGlzLmRhc2hTaXplKTt2b2lkIDAhPT10aGlzLmdhcFNpemUmJihuLmdhcFNpemU9dGhpcy5nYXBTaXplKTt2b2lkIDAhPT10aGlzLnNjYWxlJiYobi5zY2FsZT10aGlzLnNjYWxlKTshMD09PXRoaXMuZGl0aGVyaW5nJiYobi5kaXRoZXJpbmc9ITApOzA8dGhpcy5hbHBoYVRlc3QmJihuLmFscGhhVGVzdD10aGlzLmFscGhhVGVzdCk7ITA9PT10aGlzLnByZW11bHRpcGxpZWRBbHBoYSYmKG4ucHJlbXVsdGlwbGllZEFscGhhPXRoaXMucHJlbXVsdGlwbGllZEFscGhhKTshMD09PXRoaXMud2lyZWZyYW1lJiYobi53aXJlZnJhbWU9dGhpcy53aXJlZnJhbWUpOzE8dGhpcy53aXJlZnJhbWVMaW5ld2lkdGgmJihuLndpcmVmcmFtZUxpbmV3aWR0aD10aGlzLndpcmVmcmFtZUxpbmV3aWR0aCk7InJvdW5kIiE9PXRoaXMud2lyZWZyYW1lTGluZWNhcCYmCihuLndpcmVmcmFtZUxpbmVjYXA9dGhpcy53aXJlZnJhbWVMaW5lY2FwKTsicm91bmQiIT09dGhpcy53aXJlZnJhbWVMaW5lam9pbiYmKG4ud2lyZWZyYW1lTGluZWpvaW49dGhpcy53aXJlZnJhbWVMaW5lam9pbik7ITA9PT10aGlzLm1vcnBoVGFyZ2V0cyYmKG4ubW9ycGhUYXJnZXRzPSEwKTshMD09PXRoaXMuc2tpbm5pbmcmJihuLnNraW5uaW5nPSEwKTshMT09PXRoaXMudmlzaWJsZSYmKG4udmlzaWJsZT0hMSk7Int9IiE9PUpTT04uc3RyaW5naWZ5KHRoaXMudXNlckRhdGEpJiYobi51c2VyRGF0YT10aGlzLnVzZXJEYXRhKTtoJiYoaD1lKGIudGV4dHVyZXMpLGI9ZShiLmltYWdlcyksMDxoLmxlbmd0aCYmKG4udGV4dHVyZXM9aCksMDxiLmxlbmd0aCYmKG4uaW1hZ2VzPWIpKTtyZXR1cm4gbn0sY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9LGNvcHk6ZnVuY3Rpb24oYil7dGhpcy5uYW1lPWIubmFtZTt0aGlzLmZvZz1iLmZvZzsKdGhpcy5saWdodHM9Yi5saWdodHM7dGhpcy5ibGVuZGluZz1iLmJsZW5kaW5nO3RoaXMuc2lkZT1iLnNpZGU7dGhpcy5mbGF0U2hhZGluZz1iLmZsYXRTaGFkaW5nO3RoaXMudmVydGV4Q29sb3JzPWIudmVydGV4Q29sb3JzO3RoaXMub3BhY2l0eT1iLm9wYWNpdHk7dGhpcy50cmFuc3BhcmVudD1iLnRyYW5zcGFyZW50O3RoaXMuYmxlbmRTcmM9Yi5ibGVuZFNyYzt0aGlzLmJsZW5kRHN0PWIuYmxlbmREc3Q7dGhpcy5ibGVuZEVxdWF0aW9uPWIuYmxlbmRFcXVhdGlvbjt0aGlzLmJsZW5kU3JjQWxwaGE9Yi5ibGVuZFNyY0FscGhhO3RoaXMuYmxlbmREc3RBbHBoYT1iLmJsZW5kRHN0QWxwaGE7dGhpcy5ibGVuZEVxdWF0aW9uQWxwaGE9Yi5ibGVuZEVxdWF0aW9uQWxwaGE7dGhpcy5kZXB0aEZ1bmM9Yi5kZXB0aEZ1bmM7dGhpcy5kZXB0aFRlc3Q9Yi5kZXB0aFRlc3Q7dGhpcy5kZXB0aFdyaXRlPWIuZGVwdGhXcml0ZTt0aGlzLmNvbG9yV3JpdGU9Yi5jb2xvcldyaXRlO3RoaXMucHJlY2lzaW9uPQpiLnByZWNpc2lvbjt0aGlzLnBvbHlnb25PZmZzZXQ9Yi5wb2x5Z29uT2Zmc2V0O3RoaXMucG9seWdvbk9mZnNldEZhY3Rvcj1iLnBvbHlnb25PZmZzZXRGYWN0b3I7dGhpcy5wb2x5Z29uT2Zmc2V0VW5pdHM9Yi5wb2x5Z29uT2Zmc2V0VW5pdHM7dGhpcy5kaXRoZXJpbmc9Yi5kaXRoZXJpbmc7dGhpcy5hbHBoYVRlc3Q9Yi5hbHBoYVRlc3Q7dGhpcy5wcmVtdWx0aXBsaWVkQWxwaGE9Yi5wcmVtdWx0aXBsaWVkQWxwaGE7dGhpcy52aXNpYmxlPWIudmlzaWJsZTt0aGlzLnVzZXJEYXRhPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoYi51c2VyRGF0YSkpO3RoaXMuY2xpcFNoYWRvd3M9Yi5jbGlwU2hhZG93czt0aGlzLmNsaXBJbnRlcnNlY3Rpb249Yi5jbGlwSW50ZXJzZWN0aW9uO3ZhciBlPWIuY2xpcHBpbmdQbGFuZXMsaD1udWxsO2lmKG51bGwhPT1lKXt2YXIgbj1lLmxlbmd0aDtoPUFycmF5KG4pO2Zvcih2YXIgdT0wO3UhPT1uOysrdSloW3VdPWVbdV0uY2xvbmUoKX10aGlzLmNsaXBwaW5nUGxhbmVzPQpoO3RoaXMuc2hhZG93U2lkZT1iLnNoYWRvd1NpZGU7cmV0dXJuIHRoaXN9LGRpc3Bvc2U6ZnVuY3Rpb24oKXt0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImRpc3Bvc2UifSl9fSk7ZGIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoR2EucHJvdG90eXBlKTtkYi5wcm90b3R5cGUuY29uc3RydWN0b3I9ZGI7ZGIucHJvdG90eXBlLmlzU2hhZGVyTWF0ZXJpYWw9ITA7ZGIucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oYil7R2EucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLGIpO3RoaXMuZnJhZ21lbnRTaGFkZXI9Yi5mcmFnbWVudFNoYWRlcjt0aGlzLnZlcnRleFNoYWRlcj1iLnZlcnRleFNoYWRlcjt0aGlzLnVuaWZvcm1zPUYoYi51bmlmb3Jtcyk7dGhpcy5kZWZpbmVzPU9iamVjdC5hc3NpZ24oe30sYi5kZWZpbmVzKTt0aGlzLndpcmVmcmFtZT1iLndpcmVmcmFtZTt0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD1iLndpcmVmcmFtZUxpbmV3aWR0aDt0aGlzLmxpZ2h0cz1iLmxpZ2h0czt0aGlzLmNsaXBwaW5nPQpiLmNsaXBwaW5nO3RoaXMuc2tpbm5pbmc9Yi5za2lubmluZzt0aGlzLm1vcnBoVGFyZ2V0cz1iLm1vcnBoVGFyZ2V0czt0aGlzLm1vcnBoTm9ybWFscz1iLm1vcnBoTm9ybWFsczt0aGlzLmV4dGVuc2lvbnM9Yi5leHRlbnNpb25zO3JldHVybiB0aGlzfTtkYi5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKGIpe3ZhciBlPUdhLnByb3RvdHlwZS50b0pTT04uY2FsbCh0aGlzLGIpO2UudW5pZm9ybXM9e307Zm9yKHZhciBoIGluIHRoaXMudW5pZm9ybXMpe3ZhciBuPXRoaXMudW5pZm9ybXNbaF0udmFsdWU7ZS51bmlmb3Jtc1toXT1uJiZuLmlzVGV4dHVyZT97dHlwZToidCIsdmFsdWU6bi50b0pTT04oYikudXVpZH06biYmbi5pc0NvbG9yP3t0eXBlOiJjIix2YWx1ZTpuLmdldEhleCgpfTpuJiZuLmlzVmVjdG9yMj97dHlwZToidjIiLHZhbHVlOm4udG9BcnJheSgpfTpuJiZuLmlzVmVjdG9yMz97dHlwZToidjMiLHZhbHVlOm4udG9BcnJheSgpfTpuJiZuLmlzVmVjdG9yND97dHlwZToidjQiLAp2YWx1ZTpuLnRvQXJyYXkoKX06biYmbi5pc01hdHJpeDM/e3R5cGU6Im0zIix2YWx1ZTpuLnRvQXJyYXkoKX06biYmbi5pc01hdHJpeDQ/e3R5cGU6Im00Iix2YWx1ZTpuLnRvQXJyYXkoKX06e3ZhbHVlOm59fTA8T2JqZWN0LmtleXModGhpcy5kZWZpbmVzKS5sZW5ndGgmJihlLmRlZmluZXM9dGhpcy5kZWZpbmVzKTtlLnZlcnRleFNoYWRlcj10aGlzLnZlcnRleFNoYWRlcjtlLmZyYWdtZW50U2hhZGVyPXRoaXMuZnJhZ21lbnRTaGFkZXI7Yj17fTtmb3IodmFyIHUgaW4gdGhpcy5leHRlbnNpb25zKSEwPT09dGhpcy5leHRlbnNpb25zW3VdJiYoYlt1XT0hMCk7MDxPYmplY3Qua2V5cyhiKS5sZW5ndGgmJihlLmV4dGVuc2lvbnM9Yik7cmV0dXJuIGV9O09iamVjdC5hc3NpZ24oeGIucHJvdG90eXBlLHtzZXQ6ZnVuY3Rpb24oYixlKXt0aGlzLm9yaWdpbi5jb3B5KGIpO3RoaXMuZGlyZWN0aW9uLmNvcHkoZSk7cmV0dXJuIHRoaXN9LGNsb25lOmZ1bmN0aW9uKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKS5jb3B5KHRoaXMpfSwKY29weTpmdW5jdGlvbihiKXt0aGlzLm9yaWdpbi5jb3B5KGIub3JpZ2luKTt0aGlzLmRpcmVjdGlvbi5jb3B5KGIuZGlyZWN0aW9uKTtyZXR1cm4gdGhpc30sYXQ6ZnVuY3Rpb24oYixlKXt2b2lkIDA9PT1lJiYoY29uc29sZS53YXJuKCJUSFJFRS5SYXk6IC5hdCgpIHRhcmdldCBpcyBub3cgcmVxdWlyZWQiKSxlPW5ldyBnKTtyZXR1cm4gZS5jb3B5KHRoaXMuZGlyZWN0aW9uKS5tdWx0aXBseVNjYWxhcihiKS5hZGQodGhpcy5vcmlnaW4pfSxsb29rQXQ6ZnVuY3Rpb24oYil7dGhpcy5kaXJlY3Rpb24uY29weShiKS5zdWIodGhpcy5vcmlnaW4pLm5vcm1hbGl6ZSgpO3JldHVybiB0aGlzfSxyZWNhc3Q6ZnVuY3Rpb24oKXt2YXIgYj1uZXcgZztyZXR1cm4gZnVuY3Rpb24oZSl7dGhpcy5vcmlnaW4uY29weSh0aGlzLmF0KGUsYikpO3JldHVybiB0aGlzfX0oKSxjbG9zZXN0UG9pbnRUb1BvaW50OmZ1bmN0aW9uKGIsZSl7dm9pZCAwPT09ZSYmKGNvbnNvbGUud2FybigiVEhSRUUuUmF5OiAuY2xvc2VzdFBvaW50VG9Qb2ludCgpIHRhcmdldCBpcyBub3cgcmVxdWlyZWQiKSwKZT1uZXcgZyk7ZS5zdWJWZWN0b3JzKGIsdGhpcy5vcmlnaW4pO2I9ZS5kb3QodGhpcy5kaXJlY3Rpb24pO3JldHVybiAwPmI/ZS5jb3B5KHRoaXMub3JpZ2luKTplLmNvcHkodGhpcy5kaXJlY3Rpb24pLm11bHRpcGx5U2NhbGFyKGIpLmFkZCh0aGlzLm9yaWdpbil9LGRpc3RhbmNlVG9Qb2ludDpmdW5jdGlvbihiKXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMuZGlzdGFuY2VTcVRvUG9pbnQoYikpfSxkaXN0YW5jZVNxVG9Qb2ludDpmdW5jdGlvbigpe3ZhciBiPW5ldyBnO3JldHVybiBmdW5jdGlvbihlKXt2YXIgaD1iLnN1YlZlY3RvcnMoZSx0aGlzLm9yaWdpbikuZG90KHRoaXMuZGlyZWN0aW9uKTtpZigwPmgpcmV0dXJuIHRoaXMub3JpZ2luLmRpc3RhbmNlVG9TcXVhcmVkKGUpO2IuY29weSh0aGlzLmRpcmVjdGlvbikubXVsdGlwbHlTY2FsYXIoaCkuYWRkKHRoaXMub3JpZ2luKTtyZXR1cm4gYi5kaXN0YW5jZVRvU3F1YXJlZChlKX19KCksZGlzdGFuY2VTcVRvU2VnbWVudDpmdW5jdGlvbigpe3ZhciBiPQpuZXcgZyxlPW5ldyBnLGg9bmV3IGc7cmV0dXJuIGZ1bmN0aW9uKG4sdSx3LHope2IuY29weShuKS5hZGQodSkubXVsdGlwbHlTY2FsYXIoLjUpO2UuY29weSh1KS5zdWIobikubm9ybWFsaXplKCk7aC5jb3B5KHRoaXMub3JpZ2luKS5zdWIoYik7dmFyIEU9LjUqbi5kaXN0YW5jZVRvKHUpLEg9LXRoaXMuZGlyZWN0aW9uLmRvdChlKSxJPWguZG90KHRoaXMuZGlyZWN0aW9uKSxPPS1oLmRvdChlKSxRPWgubGVuZ3RoU3EoKSxSPU1hdGguYWJzKDEtSCpIKTtpZigwPFIpe249SCpPLUk7dT1IKkktTzt2YXIgVT1FKlI7MDw9bj91Pj0tVT91PD1VPyhFPTEvUixuKj1FLHUqPUUsSD1uKihuK0gqdSsyKkkpK3UqKEgqbit1KzIqTykrUSk6KHU9RSxuPU1hdGgubWF4KDAsLShIKnUrSSkpLEg9LW4qbit1Kih1KzIqTykrUSk6KHU9LUUsbj1NYXRoLm1heCgwLC0oSCp1K0kpKSxIPS1uKm4rdSoodSsyKk8pK1EpOnU8PS1VPyhuPU1hdGgubWF4KDAsLSgtSCpFK0kpKSx1PTA8bj8tRTpNYXRoLm1pbihNYXRoLm1heCgtRSwKLU8pLEUpLEg9LW4qbit1Kih1KzIqTykrUSk6dTw9VT8obj0wLHU9TWF0aC5taW4oTWF0aC5tYXgoLUUsLU8pLEUpLEg9dSoodSsyKk8pK1EpOihuPU1hdGgubWF4KDAsLShIKkUrSSkpLHU9MDxuP0U6TWF0aC5taW4oTWF0aC5tYXgoLUUsLU8pLEUpLEg9LW4qbit1Kih1KzIqTykrUSl9ZWxzZSB1PTA8SD8tRTpFLG49TWF0aC5tYXgoMCwtKEgqdStJKSksSD0tbipuK3UqKHUrMipPKStRO3cmJncuY29weSh0aGlzLmRpcmVjdGlvbikubXVsdGlwbHlTY2FsYXIobikuYWRkKHRoaXMub3JpZ2luKTt6JiZ6LmNvcHkoZSkubXVsdGlwbHlTY2FsYXIodSkuYWRkKGIpO3JldHVybiBIfX0oKSxpbnRlcnNlY3RTcGhlcmU6ZnVuY3Rpb24oKXt2YXIgYj1uZXcgZztyZXR1cm4gZnVuY3Rpb24oZSxoKXtiLnN1YlZlY3RvcnMoZS5jZW50ZXIsdGhpcy5vcmlnaW4pO3ZhciBuPWIuZG90KHRoaXMuZGlyZWN0aW9uKSx1PWIuZG90KGIpLW4qbjtlPWUucmFkaXVzKmUucmFkaXVzO2lmKHU+ZSlyZXR1cm4gbnVsbDsKZT1NYXRoLnNxcnQoZS11KTt1PW4tZTtuKz1lO3JldHVybiAwPnUmJjA+bj9udWxsOjA+dT90aGlzLmF0KG4saCk6dGhpcy5hdCh1LGgpfX0oKSxpbnRlcnNlY3RzU3BoZXJlOmZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmRpc3RhbmNlU3FUb1BvaW50KGIuY2VudGVyKTw9Yi5yYWRpdXMqYi5yYWRpdXN9LGRpc3RhbmNlVG9QbGFuZTpmdW5jdGlvbihiKXt2YXIgZT1iLm5vcm1hbC5kb3QodGhpcy5kaXJlY3Rpb24pO2lmKDA9PT1lKXJldHVybiAwPT09Yi5kaXN0YW5jZVRvUG9pbnQodGhpcy5vcmlnaW4pPzA6bnVsbDtiPS0odGhpcy5vcmlnaW4uZG90KGIubm9ybWFsKStiLmNvbnN0YW50KS9lO3JldHVybiAwPD1iP2I6bnVsbH0saW50ZXJzZWN0UGxhbmU6ZnVuY3Rpb24oYixlKXtiPXRoaXMuZGlzdGFuY2VUb1BsYW5lKGIpO3JldHVybiBudWxsPT09Yj9udWxsOnRoaXMuYXQoYixlKX0saW50ZXJzZWN0c1BsYW5lOmZ1bmN0aW9uKGIpe3ZhciBlPWIuZGlzdGFuY2VUb1BvaW50KHRoaXMub3JpZ2luKTsKcmV0dXJuIDA9PT1lfHwwPmIubm9ybWFsLmRvdCh0aGlzLmRpcmVjdGlvbikqZT8hMDohMX0saW50ZXJzZWN0Qm94OmZ1bmN0aW9uKGIsZSl7dmFyIGg9MS90aGlzLmRpcmVjdGlvbi54O3ZhciBuPTEvdGhpcy5kaXJlY3Rpb24ueTt2YXIgdT0xL3RoaXMuZGlyZWN0aW9uLnosdz10aGlzLm9yaWdpbjtpZigwPD1oKXt2YXIgej0oYi5taW4ueC13LngpKmg7aCo9Yi5tYXgueC13Lnh9ZWxzZSB6PShiLm1heC54LXcueCkqaCxoKj1iLm1pbi54LXcueDtpZigwPD1uKXt2YXIgRT0oYi5taW4ueS13LnkpKm47bio9Yi5tYXgueS13Lnl9ZWxzZSBFPShiLm1heC55LXcueSkqbixuKj1iLm1pbi55LXcueTtpZih6Pm58fEU+aClyZXR1cm4gbnVsbDtpZihFPnp8fHohPT16KXo9RTtpZihuPGh8fGghPT1oKWg9bjswPD11PyhFPShiLm1pbi56LXcueikqdSxiPShiLm1heC56LXcueikqdSk6KEU9KGIubWF4Lnotdy56KSp1LGI9KGIubWluLnotdy56KSp1KTtpZih6PmJ8fEU+aClyZXR1cm4gbnVsbDsKaWYoRT56fHx6IT09eil6PUU7aWYoYjxofHxoIT09aCloPWI7cmV0dXJuIDA+aD9udWxsOnRoaXMuYXQoMDw9ej96OmgsZSl9LGludGVyc2VjdHNCb3g6ZnVuY3Rpb24oKXt2YXIgYj1uZXcgZztyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIG51bGwhPT10aGlzLmludGVyc2VjdEJveChlLGIpfX0oKSxpbnRlcnNlY3RUcmlhbmdsZTpmdW5jdGlvbigpe3ZhciBiPW5ldyBnLGU9bmV3IGcsaD1uZXcgZyxuPW5ldyBnO3JldHVybiBmdW5jdGlvbih1LHcseixFLEgpe2Uuc3ViVmVjdG9ycyh3LHUpO2guc3ViVmVjdG9ycyh6LHUpO24uY3Jvc3NWZWN0b3JzKGUsaCk7dz10aGlzLmRpcmVjdGlvbi5kb3Qobik7aWYoMDx3KXtpZihFKXJldHVybiBudWxsO0U9MX1lbHNlIGlmKDA+dylFPS0xLHc9LXc7ZWxzZSByZXR1cm4gbnVsbDtiLnN1YlZlY3RvcnModGhpcy5vcmlnaW4sdSk7dT1FKnRoaXMuZGlyZWN0aW9uLmRvdChoLmNyb3NzVmVjdG9ycyhiLGgpKTtpZigwPnUpcmV0dXJuIG51bGw7Cno9RSp0aGlzLmRpcmVjdGlvbi5kb3QoZS5jcm9zcyhiKSk7aWYoMD56fHx1K3o+dylyZXR1cm4gbnVsbDt1PS1FKmIuZG90KG4pO3JldHVybiAwPnU/bnVsbDp0aGlzLmF0KHUvdyxIKX19KCksYXBwbHlNYXRyaXg0OmZ1bmN0aW9uKGIpe3RoaXMub3JpZ2luLmFwcGx5TWF0cml4NChiKTt0aGlzLmRpcmVjdGlvbi50cmFuc2Zvcm1EaXJlY3Rpb24oYik7cmV0dXJuIHRoaXN9LGVxdWFsczpmdW5jdGlvbihiKXtyZXR1cm4gYi5vcmlnaW4uZXF1YWxzKHRoaXMub3JpZ2luKSYmYi5kaXJlY3Rpb24uZXF1YWxzKHRoaXMuZGlyZWN0aW9uKX19KTtPYmplY3QuYXNzaWduKENiLHtnZXROb3JtYWw6ZnVuY3Rpb24oKXt2YXIgYj1uZXcgZztyZXR1cm4gZnVuY3Rpb24oZSxoLG4sdSl7dm9pZCAwPT09dSYmKGNvbnNvbGUud2FybigiVEhSRUUuVHJpYW5nbGU6IC5nZXROb3JtYWwoKSB0YXJnZXQgaXMgbm93IHJlcXVpcmVkIiksdT1uZXcgZyk7dS5zdWJWZWN0b3JzKG4saCk7Yi5zdWJWZWN0b3JzKGUsCmgpO3UuY3Jvc3MoYik7ZT11Lmxlbmd0aFNxKCk7cmV0dXJuIDA8ZT91Lm11bHRpcGx5U2NhbGFyKDEvTWF0aC5zcXJ0KGUpKTp1LnNldCgwLDAsMCl9fSgpLGdldEJhcnljb29yZDpmdW5jdGlvbigpe3ZhciBiPW5ldyBnLGU9bmV3IGcsaD1uZXcgZztyZXR1cm4gZnVuY3Rpb24obix1LHcseixFKXtiLnN1YlZlY3RvcnMoeix1KTtlLnN1YlZlY3RvcnModyx1KTtoLnN1YlZlY3RvcnMobix1KTtuPWIuZG90KGIpO3U9Yi5kb3QoZSk7dz1iLmRvdChoKTt2YXIgSD1lLmRvdChlKTt6PWUuZG90KGgpO3ZhciBJPW4qSC11KnU7dm9pZCAwPT09RSYmKGNvbnNvbGUud2FybigiVEhSRUUuVHJpYW5nbGU6IC5nZXRCYXJ5Y29vcmQoKSB0YXJnZXQgaXMgbm93IHJlcXVpcmVkIiksRT1uZXcgZyk7aWYoMD09PUkpcmV0dXJuIEUuc2V0KC0yLC0xLC0xKTtJPTEvSTtIPShIKnctdSp6KSpJO249KG4qei11KncpKkk7cmV0dXJuIEUuc2V0KDEtSC1uLG4sSCl9fSgpLGNvbnRhaW5zUG9pbnQ6ZnVuY3Rpb24oKXt2YXIgYj0KbmV3IGc7cmV0dXJuIGZ1bmN0aW9uKGUsaCxuLHUpe0NiLmdldEJhcnljb29yZChlLGgsbix1LGIpO3JldHVybiAwPD1iLngmJjA8PWIueSYmMT49Yi54K2IueX19KCksZ2V0VVY6ZnVuY3Rpb24oKXt2YXIgYj1uZXcgZztyZXR1cm4gZnVuY3Rpb24oZSxoLG4sdSx3LHosRSxIKXt0aGlzLmdldEJhcnljb29yZChlLGgsbix1LGIpO0guc2V0KDAsMCk7SC5hZGRTY2FsZWRWZWN0b3IodyxiLngpO0guYWRkU2NhbGVkVmVjdG9yKHosYi55KTtILmFkZFNjYWxlZFZlY3RvcihFLGIueik7cmV0dXJuIEh9fSgpfSk7T2JqZWN0LmFzc2lnbihDYi5wcm90b3R5cGUse3NldDpmdW5jdGlvbihiLGUsaCl7dGhpcy5hLmNvcHkoYik7dGhpcy5iLmNvcHkoZSk7dGhpcy5jLmNvcHkoaCk7cmV0dXJuIHRoaXN9LHNldEZyb21Qb2ludHNBbmRJbmRpY2VzOmZ1bmN0aW9uKGIsZSxoLG4pe3RoaXMuYS5jb3B5KGJbZV0pO3RoaXMuYi5jb3B5KGJbaF0pO3RoaXMuYy5jb3B5KGJbbl0pO3JldHVybiB0aGlzfSwKY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9LGNvcHk6ZnVuY3Rpb24oYil7dGhpcy5hLmNvcHkoYi5hKTt0aGlzLmIuY29weShiLmIpO3RoaXMuYy5jb3B5KGIuYyk7cmV0dXJuIHRoaXN9LGdldEFyZWE6ZnVuY3Rpb24oKXt2YXIgYj1uZXcgZyxlPW5ldyBnO3JldHVybiBmdW5jdGlvbigpe2Iuc3ViVmVjdG9ycyh0aGlzLmMsdGhpcy5iKTtlLnN1YlZlY3RvcnModGhpcy5hLHRoaXMuYik7cmV0dXJuLjUqYi5jcm9zcyhlKS5sZW5ndGgoKX19KCksZ2V0TWlkcG9pbnQ6ZnVuY3Rpb24oYil7dm9pZCAwPT09YiYmKGNvbnNvbGUud2FybigiVEhSRUUuVHJpYW5nbGU6IC5nZXRNaWRwb2ludCgpIHRhcmdldCBpcyBub3cgcmVxdWlyZWQiKSxiPW5ldyBnKTtyZXR1cm4gYi5hZGRWZWN0b3JzKHRoaXMuYSx0aGlzLmIpLmFkZCh0aGlzLmMpLm11bHRpcGx5U2NhbGFyKDEvMyl9LGdldE5vcm1hbDpmdW5jdGlvbihiKXtyZXR1cm4gQ2IuZ2V0Tm9ybWFsKHRoaXMuYSwKdGhpcy5iLHRoaXMuYyxiKX0sZ2V0UGxhbmU6ZnVuY3Rpb24oYil7dm9pZCAwPT09YiYmKGNvbnNvbGUud2FybigiVEhSRUUuVHJpYW5nbGU6IC5nZXRQbGFuZSgpIHRhcmdldCBpcyBub3cgcmVxdWlyZWQiKSxiPW5ldyBnKTtyZXR1cm4gYi5zZXRGcm9tQ29wbGFuYXJQb2ludHModGhpcy5hLHRoaXMuYix0aGlzLmMpfSxnZXRCYXJ5Y29vcmQ6ZnVuY3Rpb24oYixlKXtyZXR1cm4gQ2IuZ2V0QmFyeWNvb3JkKGIsdGhpcy5hLHRoaXMuYix0aGlzLmMsZSl9LGNvbnRhaW5zUG9pbnQ6ZnVuY3Rpb24oYil7cmV0dXJuIENiLmNvbnRhaW5zUG9pbnQoYix0aGlzLmEsdGhpcy5iLHRoaXMuYyl9LGdldFVWOmZ1bmN0aW9uKGIsZSxoLG4sdSl7cmV0dXJuIENiLmdldFVWKGIsdGhpcy5hLHRoaXMuYix0aGlzLmMsZSxoLG4sdSl9LGludGVyc2VjdHNCb3g6ZnVuY3Rpb24oYil7cmV0dXJuIGIuaW50ZXJzZWN0c1RyaWFuZ2xlKHRoaXMpfSxjbG9zZXN0UG9pbnRUb1BvaW50OmZ1bmN0aW9uKCl7dmFyIGI9Cm5ldyBnLGU9bmV3IGcsaD1uZXcgZyxuPW5ldyBnLHU9bmV3IGcsdz1uZXcgZztyZXR1cm4gZnVuY3Rpb24oeixFKXt2b2lkIDA9PT1FJiYoY29uc29sZS53YXJuKCJUSFJFRS5UcmlhbmdsZTogLmNsb3Nlc3RQb2ludFRvUG9pbnQoKSB0YXJnZXQgaXMgbm93IHJlcXVpcmVkIiksRT1uZXcgZyk7dmFyIEg9dGhpcy5hLEk9dGhpcy5iLE89dGhpcy5jO2Iuc3ViVmVjdG9ycyhJLEgpO2Uuc3ViVmVjdG9ycyhPLEgpO24uc3ViVmVjdG9ycyh6LEgpO3ZhciBRPWIuZG90KG4pLFI9ZS5kb3Qobik7aWYoMD49USYmMD49UilyZXR1cm4gRS5jb3B5KEgpO3Uuc3ViVmVjdG9ycyh6LEkpO3ZhciBVPWIuZG90KHUpLFc9ZS5kb3QodSk7aWYoMDw9VSYmVzw9VSlyZXR1cm4gRS5jb3B5KEkpO3ZhciBaPVEqVy1VKlI7aWYoMD49WiYmMDw9USYmMD49VSlyZXR1cm4gST1RLyhRLVUpLEUuY29weShIKS5hZGRTY2FsZWRWZWN0b3IoYixJKTt3LnN1YlZlY3RvcnMoeixPKTt6PWIuZG90KHcpO3ZhciBmYT0KZS5kb3Qodyk7aWYoMDw9ZmEmJno8PWZhKXJldHVybiBFLmNvcHkoTyk7UT16KlItUSpmYTtpZigwPj1RJiYwPD1SJiYwPj1mYSlyZXR1cm4gWj1SLyhSLWZhKSxFLmNvcHkoSCkuYWRkU2NhbGVkVmVjdG9yKGUsWik7Uj1VKmZhLXoqVztpZigwPj1SJiYwPD1XLVUmJjA8PXotZmEpcmV0dXJuIGguc3ViVmVjdG9ycyhPLEkpLFo9KFctVSkvKFctVSsoei1mYSkpLEUuY29weShJKS5hZGRTY2FsZWRWZWN0b3IoaCxaKTtPPTEvKFIrUStaKTtJPVEqTztaKj1PO3JldHVybiBFLmNvcHkoSCkuYWRkU2NhbGVkVmVjdG9yKGIsSSkuYWRkU2NhbGVkVmVjdG9yKGUsWil9fSgpLGVxdWFsczpmdW5jdGlvbihiKXtyZXR1cm4gYi5hLmVxdWFscyh0aGlzLmEpJiZiLmIuZXF1YWxzKHRoaXMuYikmJmIuYy5lcXVhbHModGhpcy5jKX19KTt5Yi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShHYS5wcm90b3R5cGUpO3liLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj15Yjt5Yi5wcm90b3R5cGUuaXNNZXNoQmFzaWNNYXRlcmlhbD0KITA7eWIucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oYil7R2EucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLGIpO3RoaXMuY29sb3IuY29weShiLmNvbG9yKTt0aGlzLm1hcD1iLm1hcDt0aGlzLmxpZ2h0TWFwPWIubGlnaHRNYXA7dGhpcy5saWdodE1hcEludGVuc2l0eT1iLmxpZ2h0TWFwSW50ZW5zaXR5O3RoaXMuYW9NYXA9Yi5hb01hcDt0aGlzLmFvTWFwSW50ZW5zaXR5PWIuYW9NYXBJbnRlbnNpdHk7dGhpcy5zcGVjdWxhck1hcD1iLnNwZWN1bGFyTWFwO3RoaXMuYWxwaGFNYXA9Yi5hbHBoYU1hcDt0aGlzLmVudk1hcD1iLmVudk1hcDt0aGlzLmNvbWJpbmU9Yi5jb21iaW5lO3RoaXMucmVmbGVjdGl2aXR5PWIucmVmbGVjdGl2aXR5O3RoaXMucmVmcmFjdGlvblJhdGlvPWIucmVmcmFjdGlvblJhdGlvO3RoaXMud2lyZWZyYW1lPWIud2lyZWZyYW1lO3RoaXMud2lyZWZyYW1lTGluZXdpZHRoPWIud2lyZWZyYW1lTGluZXdpZHRoO3RoaXMud2lyZWZyYW1lTGluZWNhcD1iLndpcmVmcmFtZUxpbmVjYXA7CnRoaXMud2lyZWZyYW1lTGluZWpvaW49Yi53aXJlZnJhbWVMaW5lam9pbjt0aGlzLnNraW5uaW5nPWIuc2tpbm5pbmc7dGhpcy5tb3JwaFRhcmdldHM9Yi5tb3JwaFRhcmdldHM7cmV0dXJuIHRoaXN9O3RiLnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoUy5wcm90b3R5cGUpLHtjb25zdHJ1Y3Rvcjp0Yixpc01lc2g6ITAsc2V0RHJhd01vZGU6ZnVuY3Rpb24oYil7dGhpcy5kcmF3TW9kZT1ifSxjb3B5OmZ1bmN0aW9uKGIpe1MucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLGIpO3RoaXMuZHJhd01vZGU9Yi5kcmF3TW9kZTt2b2lkIDAhPT1iLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcyYmKHRoaXMubW9ycGhUYXJnZXRJbmZsdWVuY2VzPWIubW9ycGhUYXJnZXRJbmZsdWVuY2VzLnNsaWNlKCkpO3ZvaWQgMCE9PWIubW9ycGhUYXJnZXREaWN0aW9uYXJ5JiYodGhpcy5tb3JwaFRhcmdldERpY3Rpb25hcnk9T2JqZWN0LmFzc2lnbih7fSxiLm1vcnBoVGFyZ2V0RGljdGlvbmFyeSkpOwpyZXR1cm4gdGhpc30sdXBkYXRlTW9ycGhUYXJnZXRzOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZW9tZXRyeTtpZihiLmlzQnVmZmVyR2VvbWV0cnkpe2I9Yi5tb3JwaEF0dHJpYnV0ZXM7dmFyIGU9T2JqZWN0LmtleXMoYik7aWYoMDxlLmxlbmd0aCl7dmFyIGg9YltlWzBdXTtpZih2b2lkIDAhPT1oKWZvcih0aGlzLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcz1bXSx0aGlzLm1vcnBoVGFyZ2V0RGljdGlvbmFyeT17fSxiPTAsZT1oLmxlbmd0aDtiPGU7YisrKXt2YXIgbj1oW2JdLm5hbWV8fFN0cmluZyhiKTt0aGlzLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcy5wdXNoKDApO3RoaXMubW9ycGhUYXJnZXREaWN0aW9uYXJ5W25dPWJ9fX1lbHNlIGI9Yi5tb3JwaFRhcmdldHMsdm9pZCAwIT09YiYmMDxiLmxlbmd0aCYmY29uc29sZS5lcnJvcigiVEhSRUUuTWVzaC51cGRhdGVNb3JwaFRhcmdldHMoKSBubyBsb25nZXIgc3VwcG9ydHMgVEhSRUUuR2VvbWV0cnkuIFVzZSBUSFJFRS5CdWZmZXJHZW9tZXRyeSBpbnN0ZWFkLiIpfSwKcmF5Y2FzdDpmdW5jdGlvbigpe2Z1bmN0aW9uIGIoaWEsdGEsbmEsdmEsQmEsc2EsRGEsSGEpe2lmKG51bGw9PT0oMT09PXRhLnNpZGU/dmEuaW50ZXJzZWN0VHJpYW5nbGUoRGEsc2EsQmEsITAsSGEpOnZhLmludGVyc2VjdFRyaWFuZ2xlKEJhLHNhLERhLDIhPT10YS5zaWRlLEhhKSkpcmV0dXJuIG51bGw7cmEuY29weShIYSk7cmEuYXBwbHlNYXRyaXg0KGlhLm1hdHJpeFdvcmxkKTt0YT1uYS5yYXkub3JpZ2luLmRpc3RhbmNlVG8ocmEpO3JldHVybiB0YTxuYS5uZWFyfHx0YT5uYS5mYXI/bnVsbDp7ZGlzdGFuY2U6dGEscG9pbnQ6cmEuY2xvbmUoKSxvYmplY3Q6aWF9fWZ1bmN0aW9uIGUoaWEsdGEsbmEsdmEsQmEsc2EsRGEsSGEsS2EsTmEpe3cuZnJvbUJ1ZmZlckF0dHJpYnV0ZShCYSxIYSk7ei5mcm9tQnVmZmVyQXR0cmlidXRlKEJhLEthKTtFLmZyb21CdWZmZXJBdHRyaWJ1dGUoQmEsTmEpO0JhPWlhLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcztpZih0YS5tb3JwaFRhcmdldHMmJgpzYSYmQmEpe1Euc2V0KDAsMCwwKTtSLnNldCgwLDAsMCk7VS5zZXQoMCwwLDApO2Zvcih2YXIgTGE9MCxmYj1zYS5sZW5ndGg7TGE8ZmI7TGErKyl7dmFyIGNiPUJhW0xhXSxKYT1zYVtMYV07MCE9PWNiJiYoSC5mcm9tQnVmZmVyQXR0cmlidXRlKEphLEhhKSxJLmZyb21CdWZmZXJBdHRyaWJ1dGUoSmEsS2EpLE8uZnJvbUJ1ZmZlckF0dHJpYnV0ZShKYSxOYSksUS5hZGRTY2FsZWRWZWN0b3IoSC5zdWIodyksY2IpLFIuYWRkU2NhbGVkVmVjdG9yKEkuc3ViKHopLGNiKSxVLmFkZFNjYWxlZFZlY3RvcihPLnN1YihFKSxjYikpfXcuYWRkKFEpO3ouYWRkKFIpO0UuYWRkKFUpfWlmKGlhPWIoaWEsdGEsbmEsdmEsdyx6LEUscWEpKURhJiYoVy5mcm9tQnVmZmVyQXR0cmlidXRlKERhLEhhKSxaLmZyb21CdWZmZXJBdHRyaWJ1dGUoRGEsS2EpLGZhLmZyb21CdWZmZXJBdHRyaWJ1dGUoRGEsTmEpLGlhLnV2PUNiLmdldFVWKHFhLHcseixFLFcsWixmYSxuZXcgZCkpLERhPW5ldyBMKEhhLEthLApOYSksQ2IuZ2V0Tm9ybWFsKHcseixFLERhLm5vcm1hbCksaWEuZmFjZT1EYTtyZXR1cm4gaWF9dmFyIGg9bmV3IEMsbj1uZXcgeGIsdT1uZXcgQSx3PW5ldyBnLHo9bmV3IGcsRT1uZXcgZyxIPW5ldyBnLEk9bmV3IGcsTz1uZXcgZyxRPW5ldyBnLFI9bmV3IGcsVT1uZXcgZyxXPW5ldyBkLFo9bmV3IGQsZmE9bmV3IGQscWE9bmV3IGcscmE9bmV3IGc7cmV0dXJuIGZ1bmN0aW9uKGlhLHRhKXt2YXIgbmE9dGhpcy5nZW9tZXRyeSx2YT10aGlzLm1hdGVyaWFsLEJhPXRoaXMubWF0cml4V29ybGQ7aWYodm9pZCAwIT09dmEmJihudWxsPT09bmEuYm91bmRpbmdTcGhlcmUmJm5hLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpLHUuY29weShuYS5ib3VuZGluZ1NwaGVyZSksdS5hcHBseU1hdHJpeDQoQmEpLCExIT09aWEucmF5LmludGVyc2VjdHNTcGhlcmUodSkmJihoLmdldEludmVyc2UoQmEpLG4uY29weShpYS5yYXkpLmFwcGx5TWF0cml4NChoKSxudWxsPT09bmEuYm91bmRpbmdCb3h8fCExIT09Cm4uaW50ZXJzZWN0c0JveChuYS5ib3VuZGluZ0JveCkpKSlpZihuYS5pc0J1ZmZlckdlb21ldHJ5KXt2YXIgc2E9bmEuaW5kZXg7QmE9bmEuYXR0cmlidXRlcy5wb3NpdGlvbjt2YXIgRGE9bmEubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uLEhhPW5hLmF0dHJpYnV0ZXMudXYsS2E9bmEuZ3JvdXBzLE5hPW5hLmRyYXdSYW5nZSxMYSxmYjtpZihudWxsIT09c2EpaWYoQXJyYXkuaXNBcnJheSh2YSkpe3ZhciBjYj0wO2ZvcihMYT1LYS5sZW5ndGg7Y2I8TGE7Y2IrKyl7dmFyIEphPUthW2NiXTt2YXIgaGI9dmFbSmEubWF0ZXJpYWxJbmRleF07dmFyIFVhPU1hdGgubWF4KEphLnN0YXJ0LE5hLnN0YXJ0KTtmb3IoZmI9bmE9TWF0aC5taW4oSmEuc3RhcnQrSmEuY291bnQsTmEuc3RhcnQrTmEuY291bnQpO1VhPGZiO1VhKz0zKXtuYT1zYS5nZXRYKFVhKTt2YXIgSGI9c2EuZ2V0WChVYSsxKTt2YXIgcWI9c2EuZ2V0WChVYSsyKTtpZihuYT1lKHRoaXMsaGIsaWEsbixCYSxEYSxIYSxuYSxIYiwKcWIpKW5hLmZhY2VJbmRleD1NYXRoLmZsb29yKFVhLzMpLG5hLmZhY2UubWF0ZXJpYWxJbmRleD1KYS5tYXRlcmlhbEluZGV4LHRhLnB1c2gobmEpfX19ZWxzZSBmb3IoVWE9TWF0aC5tYXgoMCxOYS5zdGFydCksbmE9TWF0aC5taW4oc2EuY291bnQsTmEuc3RhcnQrTmEuY291bnQpLGNiPVVhLExhPW5hO2NiPExhO2NiKz0zKXtpZihuYT1zYS5nZXRYKGNiKSxIYj1zYS5nZXRYKGNiKzEpLHFiPXNhLmdldFgoY2IrMiksbmE9ZSh0aGlzLHZhLGlhLG4sQmEsRGEsSGEsbmEsSGIscWIpKW5hLmZhY2VJbmRleD1NYXRoLmZsb29yKGNiLzMpLHRhLnB1c2gobmEpfWVsc2UgaWYodm9pZCAwIT09QmEpaWYoQXJyYXkuaXNBcnJheSh2YSkpZm9yKGNiPTAsTGE9S2EubGVuZ3RoO2NiPExhO2NiKyspZm9yKEphPUthW2NiXSxoYj12YVtKYS5tYXRlcmlhbEluZGV4XSxVYT1NYXRoLm1heChKYS5zdGFydCxOYS5zdGFydCksZmI9bmE9TWF0aC5taW4oSmEuc3RhcnQrSmEuY291bnQsTmEuc3RhcnQrCk5hLmNvdW50KTtVYTxmYjtVYSs9Myl7aWYobmE9VWEsSGI9VWErMSxxYj1VYSsyLG5hPWUodGhpcyxoYixpYSxuLEJhLERhLEhhLG5hLEhiLHFiKSluYS5mYWNlSW5kZXg9TWF0aC5mbG9vcihVYS8zKSxuYS5mYWNlLm1hdGVyaWFsSW5kZXg9SmEubWF0ZXJpYWxJbmRleCx0YS5wdXNoKG5hKX1lbHNlIGZvcihVYT1NYXRoLm1heCgwLE5hLnN0YXJ0KSxuYT1NYXRoLm1pbihCYS5jb3VudCxOYS5zdGFydCtOYS5jb3VudCksY2I9VWEsTGE9bmE7Y2I8TGE7Y2IrPTMpaWYobmE9Y2IsSGI9Y2IrMSxxYj1jYisyLG5hPWUodGhpcyx2YSxpYSxuLEJhLERhLEhhLG5hLEhiLHFiKSluYS5mYWNlSW5kZXg9TWF0aC5mbG9vcihjYi8zKSx0YS5wdXNoKG5hKX1lbHNlIGlmKG5hLmlzR2VvbWV0cnkpZm9yKEJhPUFycmF5LmlzQXJyYXkodmEpLERhPW5hLnZlcnRpY2VzLEhhPW5hLmZhY2VzLG5hPW5hLmZhY2VWZXJ0ZXhVdnNbMF0sMDxuYS5sZW5ndGgmJihzYT1uYSksTGE9MCxKYT1IYS5sZW5ndGg7TGE8CkphO0xhKyspaWYoaGI9SGFbTGFdLG5hPUJhP3ZhW2hiLm1hdGVyaWFsSW5kZXhdOnZhLHZvaWQgMCE9PW5hJiYoS2E9RGFbaGIuYV0sTmE9RGFbaGIuYl0sY2I9RGFbaGIuY10sbmE9Yih0aGlzLG5hLGlhLG4sS2EsTmEsY2IscWEpKSlzYSYmc2FbTGFdJiYoVWE9c2FbTGFdLFcuY29weShVYVswXSksWi5jb3B5KFVhWzFdKSxmYS5jb3B5KFVhWzJdKSxuYS51dj1DYi5nZXRVVihxYSxLYSxOYSxjYixXLFosZmEsbmV3IGQpKSxuYS5mYWNlPWhiLG5hLmZhY2VJbmRleD1MYSx0YS5wdXNoKG5hKX19KCksY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy5nZW9tZXRyeSx0aGlzLm1hdGVyaWFsKSkuY29weSh0aGlzKX19KTt1ZC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShrLnByb3RvdHlwZSk7dWQucHJvdG90eXBlLmNvbnN0cnVjdG9yPXVkO3VkLnByb3RvdHlwZS5pc0N1YmVUZXh0dXJlPSEwO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh1ZC5wcm90b3R5cGUsCiJpbWFnZXMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbWFnZX0sc2V0OmZ1bmN0aW9uKGIpe3RoaXMuaW1hZ2U9Yn19KTtLZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShrLnByb3RvdHlwZSk7S2UucHJvdG90eXBlLmNvbnN0cnVjdG9yPUtlO0tlLnByb3RvdHlwZS5pc0RhdGFUZXh0dXJlMkRBcnJheT0hMDtMZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShrLnByb3RvdHlwZSk7TGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPUxlO0xlLnByb3RvdHlwZS5pc0RhdGFUZXh0dXJlM0Q9ITA7dmFyIFlrPW5ldyBrLFpuPW5ldyBLZSxhbz1uZXcgTGUsWms9bmV3IHVkLFNrPVtdLFVrPVtdLFhrPW5ldyBGbG9hdDMyQXJyYXkoMTYpLFdrPW5ldyBGbG9hdDMyQXJyYXkoOSksVms9bmV3IEZsb2F0MzJBcnJheSg0KTtjbC5wcm90b3R5cGUudXBkYXRlQ2FjaGU9ZnVuY3Rpb24oYil7dmFyIGU9dGhpcy5jYWNoZTtiIGluc3RhbmNlb2YgRmxvYXQzMkFycmF5JiZlLmxlbmd0aCE9PWIubGVuZ3RoJiYKKHRoaXMuY2FjaGU9bmV3IEZsb2F0MzJBcnJheShiLmxlbmd0aCkpO2tjKGUsYil9O2RsLnByb3RvdHlwZS5zZXRWYWx1ZT1mdW5jdGlvbihiLGUsaCl7Zm9yKHZhciBuPXRoaXMuc2VxLHU9MCx3PW4ubGVuZ3RoO3UhPT13OysrdSl7dmFyIHo9blt1XTt6LnNldFZhbHVlKGIsZVt6LmlkXSxoKX19O3ZhciByaT0vKFtcd1xkX10rKShcXSk/KFxbfFwuKT8vZztPZC5wcm90b3R5cGUuc2V0VmFsdWU9ZnVuY3Rpb24oYixlLGgsbil7ZT10aGlzLm1hcFtlXTt2b2lkIDAhPT1lJiZlLnNldFZhbHVlKGIsaCxuKX07T2QucHJvdG90eXBlLnNldE9wdGlvbmFsPWZ1bmN0aW9uKGIsZSxoKXtlPWVbaF07dm9pZCAwIT09ZSYmdGhpcy5zZXRWYWx1ZShiLGgsZSl9O09kLnVwbG9hZD1mdW5jdGlvbihiLGUsaCxuKXtmb3IodmFyIHU9MCx3PWUubGVuZ3RoO3UhPT13OysrdSl7dmFyIHo9ZVt1XSxFPWhbei5pZF07ITEhPT1FLm5lZWRzVXBkYXRlJiZ6LnNldFZhbHVlKGIsRS52YWx1ZSxuKX19O09kLnNlcVdpdGhWYWx1ZT0KZnVuY3Rpb24oYixlKXtmb3IodmFyIGg9W10sbj0wLHU9Yi5sZW5ndGg7biE9PXU7KytuKXt2YXIgdz1iW25dO3cuaWQgaW4gZSYmaC5wdXNoKHcpfXJldHVybiBofTt2YXIgeW89MCxHbz0wO1BkLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEdhLnByb3RvdHlwZSk7UGQucHJvdG90eXBlLmNvbnN0cnVjdG9yPVBkO1BkLnByb3RvdHlwZS5pc01lc2hEZXB0aE1hdGVyaWFsPSEwO1BkLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKGIpe0dhLnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyxiKTt0aGlzLmRlcHRoUGFja2luZz1iLmRlcHRoUGFja2luZzt0aGlzLnNraW5uaW5nPWIuc2tpbm5pbmc7dGhpcy5tb3JwaFRhcmdldHM9Yi5tb3JwaFRhcmdldHM7dGhpcy5tYXA9Yi5tYXA7dGhpcy5hbHBoYU1hcD1iLmFscGhhTWFwO3RoaXMuZGlzcGxhY2VtZW50TWFwPWIuZGlzcGxhY2VtZW50TWFwO3RoaXMuZGlzcGxhY2VtZW50U2NhbGU9Yi5kaXNwbGFjZW1lbnRTY2FsZTt0aGlzLmRpc3BsYWNlbWVudEJpYXM9CmIuZGlzcGxhY2VtZW50Qmlhczt0aGlzLndpcmVmcmFtZT1iLndpcmVmcmFtZTt0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD1iLndpcmVmcmFtZUxpbmV3aWR0aDtyZXR1cm4gdGhpc307UWQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoR2EucHJvdG90eXBlKTtRZC5wcm90b3R5cGUuY29uc3RydWN0b3I9UWQ7UWQucHJvdG90eXBlLmlzTWVzaERpc3RhbmNlTWF0ZXJpYWw9ITA7UWQucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oYil7R2EucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLGIpO3RoaXMucmVmZXJlbmNlUG9zaXRpb24uY29weShiLnJlZmVyZW5jZVBvc2l0aW9uKTt0aGlzLm5lYXJEaXN0YW5jZT1iLm5lYXJEaXN0YW5jZTt0aGlzLmZhckRpc3RhbmNlPWIuZmFyRGlzdGFuY2U7dGhpcy5za2lubmluZz1iLnNraW5uaW5nO3RoaXMubW9ycGhUYXJnZXRzPWIubW9ycGhUYXJnZXRzO3RoaXMubWFwPWIubWFwO3RoaXMuYWxwaGFNYXA9Yi5hbHBoYU1hcDt0aGlzLmRpc3BsYWNlbWVudE1hcD0KYi5kaXNwbGFjZW1lbnRNYXA7dGhpcy5kaXNwbGFjZW1lbnRTY2FsZT1iLmRpc3BsYWNlbWVudFNjYWxlO3RoaXMuZGlzcGxhY2VtZW50Qmlhcz1iLmRpc3BsYWNlbWVudEJpYXM7cmV0dXJuIHRoaXN9O05lLnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoUy5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpOZSxpc0dyb3VwOiEwfSk7amQucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShTLnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOmpkLGlzQ2FtZXJhOiEwLGNvcHk6ZnVuY3Rpb24oYixlKXtTLnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyxiLGUpO3RoaXMubWF0cml4V29ybGRJbnZlcnNlLmNvcHkoYi5tYXRyaXhXb3JsZEludmVyc2UpO3RoaXMucHJvamVjdGlvbk1hdHJpeC5jb3B5KGIucHJvamVjdGlvbk1hdHJpeCk7dGhpcy5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZS5jb3B5KGIucHJvamVjdGlvbk1hdHJpeEludmVyc2UpO3JldHVybiB0aGlzfSwKZ2V0V29ybGREaXJlY3Rpb246ZnVuY3Rpb24oYil7dm9pZCAwPT09YiYmKGNvbnNvbGUud2FybigiVEhSRUUuQ2FtZXJhOiAuZ2V0V29ybGREaXJlY3Rpb24oKSB0YXJnZXQgaXMgbm93IHJlcXVpcmVkIiksYj1uZXcgZyk7dGhpcy51cGRhdGVNYXRyaXhXb3JsZCghMCk7dmFyIGU9dGhpcy5tYXRyaXhXb3JsZC5lbGVtZW50cztyZXR1cm4gYi5zZXQoLWVbOF0sLWVbOV0sLWVbMTBdKS5ub3JtYWxpemUoKX0sdXBkYXRlTWF0cml4V29ybGQ6ZnVuY3Rpb24oYil7Uy5wcm90b3R5cGUudXBkYXRlTWF0cml4V29ybGQuY2FsbCh0aGlzLGIpO3RoaXMubWF0cml4V29ybGRJbnZlcnNlLmdldEludmVyc2UodGhpcy5tYXRyaXhXb3JsZCl9LGNsb25lOmZ1bmN0aW9uKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKS5jb3B5KHRoaXMpfX0pO2NjLnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoamQucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6Y2MsaXNQZXJzcGVjdGl2ZUNhbWVyYTohMCwKY29weTpmdW5jdGlvbihiLGUpe2pkLnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyxiLGUpO3RoaXMuZm92PWIuZm92O3RoaXMuem9vbT1iLnpvb207dGhpcy5uZWFyPWIubmVhcjt0aGlzLmZhcj1iLmZhcjt0aGlzLmZvY3VzPWIuZm9jdXM7dGhpcy5hc3BlY3Q9Yi5hc3BlY3Q7dGhpcy52aWV3PW51bGw9PT1iLnZpZXc/bnVsbDpPYmplY3QuYXNzaWduKHt9LGIudmlldyk7dGhpcy5maWxtR2F1Z2U9Yi5maWxtR2F1Z2U7dGhpcy5maWxtT2Zmc2V0PWIuZmlsbU9mZnNldDtyZXR1cm4gdGhpc30sc2V0Rm9jYWxMZW5ndGg6ZnVuY3Rpb24oYil7dGhpcy5mb3Y9MipvYi5SQUQyREVHKk1hdGguYXRhbiguNSp0aGlzLmdldEZpbG1IZWlnaHQoKS9iKTt0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX0sZ2V0Rm9jYWxMZW5ndGg6ZnVuY3Rpb24oKXtyZXR1cm4uNSp0aGlzLmdldEZpbG1IZWlnaHQoKS9NYXRoLnRhbiguNSpvYi5ERUcyUkFEKnRoaXMuZm92KX0sZ2V0RWZmZWN0aXZlRk9WOmZ1bmN0aW9uKCl7cmV0dXJuIDIqCm9iLlJBRDJERUcqTWF0aC5hdGFuKE1hdGgudGFuKC41Km9iLkRFRzJSQUQqdGhpcy5mb3YpL3RoaXMuem9vbSl9LGdldEZpbG1XaWR0aDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmZpbG1HYXVnZSpNYXRoLm1pbih0aGlzLmFzcGVjdCwxKX0sZ2V0RmlsbUhlaWdodDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmZpbG1HYXVnZS9NYXRoLm1heCh0aGlzLmFzcGVjdCwxKX0sc2V0Vmlld09mZnNldDpmdW5jdGlvbihiLGUsaCxuLHUsdyl7dGhpcy5hc3BlY3Q9Yi9lO251bGw9PT10aGlzLnZpZXcmJih0aGlzLnZpZXc9e2VuYWJsZWQ6ITAsZnVsbFdpZHRoOjEsZnVsbEhlaWdodDoxLG9mZnNldFg6MCxvZmZzZXRZOjAsd2lkdGg6MSxoZWlnaHQ6MX0pO3RoaXMudmlldy5lbmFibGVkPSEwO3RoaXMudmlldy5mdWxsV2lkdGg9Yjt0aGlzLnZpZXcuZnVsbEhlaWdodD1lO3RoaXMudmlldy5vZmZzZXRYPWg7dGhpcy52aWV3Lm9mZnNldFk9bjt0aGlzLnZpZXcud2lkdGg9dTt0aGlzLnZpZXcuaGVpZ2h0PQp3O3RoaXMudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpfSxjbGVhclZpZXdPZmZzZXQ6ZnVuY3Rpb24oKXtudWxsIT09dGhpcy52aWV3JiYodGhpcy52aWV3LmVuYWJsZWQ9ITEpO3RoaXMudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpfSx1cGRhdGVQcm9qZWN0aW9uTWF0cml4OmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5uZWFyLGU9YipNYXRoLnRhbiguNSpvYi5ERUcyUkFEKnRoaXMuZm92KS90aGlzLnpvb20saD0yKmUsbj10aGlzLmFzcGVjdCpoLHU9LS41Km4sdz10aGlzLnZpZXc7aWYobnVsbCE9PXRoaXMudmlldyYmdGhpcy52aWV3LmVuYWJsZWQpe3ZhciB6PXcuZnVsbFdpZHRoLEU9dy5mdWxsSGVpZ2h0O3UrPXcub2Zmc2V0WCpuL3o7ZS09dy5vZmZzZXRZKmgvRTtuKj13LndpZHRoL3o7aCo9dy5oZWlnaHQvRX13PXRoaXMuZmlsbU9mZnNldDswIT09dyYmKHUrPWIqdy90aGlzLmdldEZpbG1XaWR0aCgpKTt0aGlzLnByb2plY3Rpb25NYXRyaXgubWFrZVBlcnNwZWN0aXZlKHUsdSsKbixlLGUtaCxiLHRoaXMuZmFyKTt0aGlzLnByb2plY3Rpb25NYXRyaXhJbnZlcnNlLmdldEludmVyc2UodGhpcy5wcm9qZWN0aW9uTWF0cml4KX0sdG9KU09OOmZ1bmN0aW9uKGIpe2I9Uy5wcm90b3R5cGUudG9KU09OLmNhbGwodGhpcyxiKTtiLm9iamVjdC5mb3Y9dGhpcy5mb3Y7Yi5vYmplY3Quem9vbT10aGlzLnpvb207Yi5vYmplY3QubmVhcj10aGlzLm5lYXI7Yi5vYmplY3QuZmFyPXRoaXMuZmFyO2Iub2JqZWN0LmZvY3VzPXRoaXMuZm9jdXM7Yi5vYmplY3QuYXNwZWN0PXRoaXMuYXNwZWN0O251bGwhPT10aGlzLnZpZXcmJihiLm9iamVjdC52aWV3PU9iamVjdC5hc3NpZ24oe30sdGhpcy52aWV3KSk7Yi5vYmplY3QuZmlsbUdhdWdlPXRoaXMuZmlsbUdhdWdlO2Iub2JqZWN0LmZpbG1PZmZzZXQ9dGhpcy5maWxtT2Zmc2V0O3JldHVybiBifX0pO1BmLnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoY2MucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6UGYsaXNBcnJheUNhbWVyYTohMH0pOwp2YXIgcGw9bmV3IGcscWw9bmV3IGc7T2JqZWN0LmFzc2lnbihnaC5wcm90b3R5cGUse2lzRm9nRXhwMjohMCxjbG9uZTpmdW5jdGlvbigpe3JldHVybiBuZXcgZ2godGhpcy5jb2xvcix0aGlzLmRlbnNpdHkpfSx0b0pTT046ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToiRm9nRXhwMiIsY29sb3I6dGhpcy5jb2xvci5nZXRIZXgoKSxkZW5zaXR5OnRoaXMuZGVuc2l0eX19fSk7T2JqZWN0LmFzc2lnbihoaC5wcm90b3R5cGUse2lzRm9nOiEwLGNsb25lOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBoaCh0aGlzLmNvbG9yLHRoaXMubmVhcix0aGlzLmZhcil9LHRvSlNPTjpmdW5jdGlvbigpe3JldHVybnt0eXBlOiJGb2ciLGNvbG9yOnRoaXMuY29sb3IuZ2V0SGV4KCksbmVhcjp0aGlzLm5lYXIsZmFyOnRoaXMuZmFyfX19KTtpaC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKFMucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6aWgsaXNTY2VuZTohMCxjb3B5OmZ1bmN0aW9uKGIsCmUpe1MucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLGIsZSk7bnVsbCE9PWIuYmFja2dyb3VuZCYmKHRoaXMuYmFja2dyb3VuZD1iLmJhY2tncm91bmQuY2xvbmUoKSk7bnVsbCE9PWIuZm9nJiYodGhpcy5mb2c9Yi5mb2cuY2xvbmUoKSk7bnVsbCE9PWIub3ZlcnJpZGVNYXRlcmlhbCYmKHRoaXMub3ZlcnJpZGVNYXRlcmlhbD1iLm92ZXJyaWRlTWF0ZXJpYWwuY2xvbmUoKSk7dGhpcy5hdXRvVXBkYXRlPWIuYXV0b1VwZGF0ZTt0aGlzLm1hdHJpeEF1dG9VcGRhdGU9Yi5tYXRyaXhBdXRvVXBkYXRlO3JldHVybiB0aGlzfSx0b0pTT046ZnVuY3Rpb24oYil7dmFyIGU9Uy5wcm90b3R5cGUudG9KU09OLmNhbGwodGhpcyxiKTtudWxsIT09dGhpcy5iYWNrZ3JvdW5kJiYoZS5vYmplY3QuYmFja2dyb3VuZD10aGlzLmJhY2tncm91bmQudG9KU09OKGIpKTtudWxsIT09dGhpcy5mb2cmJihlLm9iamVjdC5mb2c9dGhpcy5mb2cudG9KU09OKCkpO3JldHVybiBlfSxkaXNwb3NlOmZ1bmN0aW9uKCl7dGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiJkaXNwb3NlIn0pfX0pOwpPYmplY3QuZGVmaW5lUHJvcGVydHkoaGUucHJvdG90eXBlLCJuZWVkc1VwZGF0ZSIse3NldDpmdW5jdGlvbihiKXshMD09PWImJnRoaXMudmVyc2lvbisrfX0pO09iamVjdC5hc3NpZ24oaGUucHJvdG90eXBlLHtpc0ludGVybGVhdmVkQnVmZmVyOiEwLG9uVXBsb2FkQ2FsbGJhY2s6ZnVuY3Rpb24oKXt9LHNldEFycmF5OmZ1bmN0aW9uKGIpe2lmKEFycmF5LmlzQXJyYXkoYikpdGhyb3cgbmV3IFR5cGVFcnJvcigiVEhSRUUuQnVmZmVyQXR0cmlidXRlOiBhcnJheSBzaG91bGQgYmUgYSBUeXBlZCBBcnJheS4iKTt0aGlzLmNvdW50PXZvaWQgMCE9PWI/Yi5sZW5ndGgvdGhpcy5zdHJpZGU6MDt0aGlzLmFycmF5PWI7cmV0dXJuIHRoaXN9LHNldER5bmFtaWM6ZnVuY3Rpb24oYil7dGhpcy5keW5hbWljPWI7cmV0dXJuIHRoaXN9LGNvcHk6ZnVuY3Rpb24oYil7dGhpcy5hcnJheT1uZXcgYi5hcnJheS5jb25zdHJ1Y3RvcihiLmFycmF5KTt0aGlzLmNvdW50PWIuY291bnQ7dGhpcy5zdHJpZGU9CmIuc3RyaWRlO3RoaXMuZHluYW1pYz1iLmR5bmFtaWM7cmV0dXJuIHRoaXN9LGNvcHlBdDpmdW5jdGlvbihiLGUsaCl7Yio9dGhpcy5zdHJpZGU7aCo9ZS5zdHJpZGU7Zm9yKHZhciBuPTAsdT10aGlzLnN0cmlkZTtuPHU7bisrKXRoaXMuYXJyYXlbYituXT1lLmFycmF5W2grbl07cmV0dXJuIHRoaXN9LHNldDpmdW5jdGlvbihiLGUpe3ZvaWQgMD09PWUmJihlPTApO3RoaXMuYXJyYXkuc2V0KGIsZSk7cmV0dXJuIHRoaXN9LGNsb25lOmZ1bmN0aW9uKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKS5jb3B5KHRoaXMpfSxvblVwbG9hZDpmdW5jdGlvbihiKXt0aGlzLm9uVXBsb2FkQ2FsbGJhY2s9YjtyZXR1cm4gdGhpc319KTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhSZi5wcm90b3R5cGUse2NvdW50OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kYXRhLmNvdW50fX0sYXJyYXk6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRhdGEuYXJyYXl9fX0pO09iamVjdC5hc3NpZ24oUmYucHJvdG90eXBlLAp7aXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZTohMCxzZXRYOmZ1bmN0aW9uKGIsZSl7dGhpcy5kYXRhLmFycmF5W2IqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldF09ZTtyZXR1cm4gdGhpc30sc2V0WTpmdW5jdGlvbihiLGUpe3RoaXMuZGF0YS5hcnJheVtiKnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQrMV09ZTtyZXR1cm4gdGhpc30sc2V0WjpmdW5jdGlvbihiLGUpe3RoaXMuZGF0YS5hcnJheVtiKnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQrMl09ZTtyZXR1cm4gdGhpc30sc2V0VzpmdW5jdGlvbihiLGUpe3RoaXMuZGF0YS5hcnJheVtiKnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQrM109ZTtyZXR1cm4gdGhpc30sZ2V0WDpmdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5W2IqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldF19LGdldFk6ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuZGF0YS5hcnJheVtiKnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQrCjFdfSxnZXRaOmZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmRhdGEuYXJyYXlbYip0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0KzJdfSxnZXRXOmZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmRhdGEuYXJyYXlbYip0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0KzNdfSxzZXRYWTpmdW5jdGlvbihiLGUsaCl7Yj1iKnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQ7dGhpcy5kYXRhLmFycmF5W2IrMF09ZTt0aGlzLmRhdGEuYXJyYXlbYisxXT1oO3JldHVybiB0aGlzfSxzZXRYWVo6ZnVuY3Rpb24oYixlLGgsbil7Yj1iKnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQ7dGhpcy5kYXRhLmFycmF5W2IrMF09ZTt0aGlzLmRhdGEuYXJyYXlbYisxXT1oO3RoaXMuZGF0YS5hcnJheVtiKzJdPW47cmV0dXJuIHRoaXN9LHNldFhZWlc6ZnVuY3Rpb24oYixlLGgsbix1KXtiPWIqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldDt0aGlzLmRhdGEuYXJyYXlbYiswXT1lO3RoaXMuZGF0YS5hcnJheVtiKwoxXT1oO3RoaXMuZGF0YS5hcnJheVtiKzJdPW47dGhpcy5kYXRhLmFycmF5W2IrM109dTtyZXR1cm4gdGhpc319KTtWZC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShHYS5wcm90b3R5cGUpO1ZkLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1WZDtWZC5wcm90b3R5cGUuaXNTcHJpdGVNYXRlcmlhbD0hMDtWZC5wcm90b3R5cGUuY29weT1mdW5jdGlvbihiKXtHYS5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsYik7dGhpcy5jb2xvci5jb3B5KGIuY29sb3IpO3RoaXMubWFwPWIubWFwO3RoaXMucm90YXRpb249Yi5yb3RhdGlvbjt0aGlzLnNpemVBdHRlbnVhdGlvbj1iLnNpemVBdHRlbnVhdGlvbjtyZXR1cm4gdGhpc307dmFyIFFlO1NmLnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoUy5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpTZixpc1Nwcml0ZTohMCxyYXljYXN0OmZ1bmN0aW9uKCl7ZnVuY3Rpb24gYihVLFcsWixmYSxxYSxyYSl7dS5zdWJWZWN0b3JzKFUsWikuYWRkU2NhbGFyKC41KS5tdWx0aXBseShmYSk7CnZvaWQgMCE9PXFhPyh3Lng9cmEqdS54LXFhKnUueSx3Lnk9cWEqdS54K3JhKnUueSk6dy5jb3B5KHUpO1UuY29weShXKTtVLngrPXcueDtVLnkrPXcueTtVLmFwcGx5TWF0cml4NCh6KX12YXIgZT1uZXcgZyxoPW5ldyBnLG49bmV3IGcsdT1uZXcgZCx3PW5ldyBkLHo9bmV3IEMsRT1uZXcgZyxIPW5ldyBnLEk9bmV3IGcsTz1uZXcgZCxRPW5ldyBkLFI9bmV3IGQ7cmV0dXJuIGZ1bmN0aW9uKFUsVyl7aC5zZXRGcm9tTWF0cml4U2NhbGUodGhpcy5tYXRyaXhXb3JsZCk7ei5nZXRJbnZlcnNlKHRoaXMubW9kZWxWaWV3TWF0cml4KS5wcmVtdWx0aXBseSh0aGlzLm1hdHJpeFdvcmxkKTtuLnNldEZyb21NYXRyaXhQb3NpdGlvbih0aGlzLm1vZGVsVmlld01hdHJpeCk7dmFyIFo9dGhpcy5tYXRlcmlhbC5yb3RhdGlvbjtpZigwIT09Wil7dmFyIGZhPU1hdGguY29zKFopO3ZhciBxYT1NYXRoLnNpbihaKX1aPXRoaXMuY2VudGVyO2IoRS5zZXQoLS41LC0uNSwwKSxuLFosaCxxYSxmYSk7YihILnNldCguNSwKLS41LDApLG4sWixoLHFhLGZhKTtiKEkuc2V0KC41LC41LDApLG4sWixoLHFhLGZhKTtPLnNldCgwLDApO1Euc2V0KDEsMCk7Ui5zZXQoMSwxKTt2YXIgcmE9VS5yYXkuaW50ZXJzZWN0VHJpYW5nbGUoRSxILEksITEsZSk7aWYobnVsbD09PXJhJiYoYihILnNldCgtLjUsLjUsMCksbixaLGgscWEsZmEpLFEuc2V0KDAsMSkscmE9VS5yYXkuaW50ZXJzZWN0VHJpYW5nbGUoRSxJLEgsITEsZSksbnVsbD09PXJhKSlyZXR1cm47cWE9VS5yYXkub3JpZ2luLmRpc3RhbmNlVG8oZSk7cWE8VS5uZWFyfHxxYT5VLmZhcnx8Vy5wdXNoKHtkaXN0YW5jZTpxYSxwb2ludDplLmNsb25lKCksdXY6Q2IuZ2V0VVYoZSxFLEgsSSxPLFEsUixuZXcgZCksZmFjZTpudWxsLG9iamVjdDp0aGlzfSl9fSgpLGNsb25lOmZ1bmN0aW9uKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMubWF0ZXJpYWwpKS5jb3B5KHRoaXMpfSxjb3B5OmZ1bmN0aW9uKGIpe1MucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLApiKTt2b2lkIDAhPT1iLmNlbnRlciYmdGhpcy5jZW50ZXIuY29weShiLmNlbnRlcik7cmV0dXJuIHRoaXN9fSk7VGYucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShTLnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOlRmLGlzTE9EOiEwLGNvcHk6ZnVuY3Rpb24oYil7Uy5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsYiwhMSk7Yj1iLmxldmVscztmb3IodmFyIGU9MCxoPWIubGVuZ3RoO2U8aDtlKyspe3ZhciBuPWJbZV07dGhpcy5hZGRMZXZlbChuLm9iamVjdC5jbG9uZSgpLG4uZGlzdGFuY2UpfXJldHVybiB0aGlzfSxhZGRMZXZlbDpmdW5jdGlvbihiLGUpe3ZvaWQgMD09PWUmJihlPTApO2U9TWF0aC5hYnMoZSk7Zm9yKHZhciBoPXRoaXMubGV2ZWxzLG49MDtuPGgubGVuZ3RoJiYhKGU8aFtuXS5kaXN0YW5jZSk7bisrKTtoLnNwbGljZShuLDAse2Rpc3RhbmNlOmUsb2JqZWN0OmJ9KTt0aGlzLmFkZChiKTtyZXR1cm4gdGhpc30sZ2V0T2JqZWN0Rm9yRGlzdGFuY2U6ZnVuY3Rpb24oYil7Zm9yKHZhciBlPQp0aGlzLmxldmVscyxoPTEsbj1lLmxlbmd0aDtoPG4mJiEoYjxlW2hdLmRpc3RhbmNlKTtoKyspO3JldHVybiBlW2gtMV0ub2JqZWN0fSxyYXljYXN0OmZ1bmN0aW9uKCl7dmFyIGI9bmV3IGc7cmV0dXJuIGZ1bmN0aW9uKGUsaCl7Yi5zZXRGcm9tTWF0cml4UG9zaXRpb24odGhpcy5tYXRyaXhXb3JsZCk7dGhpcy5nZXRPYmplY3RGb3JEaXN0YW5jZShlLnJheS5vcmlnaW4uZGlzdGFuY2VUbyhiKSkucmF5Y2FzdChlLGgpfX0oKSx1cGRhdGU6ZnVuY3Rpb24oKXt2YXIgYj1uZXcgZyxlPW5ldyBnO3JldHVybiBmdW5jdGlvbihoKXt2YXIgbj10aGlzLmxldmVscztpZigxPG4ubGVuZ3RoKXtiLnNldEZyb21NYXRyaXhQb3NpdGlvbihoLm1hdHJpeFdvcmxkKTtlLnNldEZyb21NYXRyaXhQb3NpdGlvbih0aGlzLm1hdHJpeFdvcmxkKTtoPWIuZGlzdGFuY2VUbyhlKTtuWzBdLm9iamVjdC52aXNpYmxlPSEwO2Zvcih2YXIgdT0xLHc9bi5sZW5ndGg7dTx3O3UrKylpZihoPj1uW3VdLmRpc3RhbmNlKW5bdS0KMV0ub2JqZWN0LnZpc2libGU9ITEsblt1XS5vYmplY3QudmlzaWJsZT0hMDtlbHNlIGJyZWFrO2Zvcig7dTx3O3UrKyluW3VdLm9iamVjdC52aXNpYmxlPSExfX19KCksdG9KU09OOmZ1bmN0aW9uKGIpe2I9Uy5wcm90b3R5cGUudG9KU09OLmNhbGwodGhpcyxiKTtiLm9iamVjdC5sZXZlbHM9W107Zm9yKHZhciBlPXRoaXMubGV2ZWxzLGg9MCxuPWUubGVuZ3RoO2g8bjtoKyspe3ZhciB1PWVbaF07Yi5vYmplY3QubGV2ZWxzLnB1c2goe29iamVjdDp1Lm9iamVjdC51dWlkLGRpc3RhbmNlOnUuZGlzdGFuY2V9KX1yZXR1cm4gYn19KTtVZi5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKHRiLnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOlVmLGlzU2tpbm5lZE1lc2g6ITAsYmluZDpmdW5jdGlvbihiLGUpe3RoaXMuc2tlbGV0b249Yjt2b2lkIDA9PT1lJiYodGhpcy51cGRhdGVNYXRyaXhXb3JsZCghMCksdGhpcy5za2VsZXRvbi5jYWxjdWxhdGVJbnZlcnNlcygpLGU9CnRoaXMubWF0cml4V29ybGQpO3RoaXMuYmluZE1hdHJpeC5jb3B5KGUpO3RoaXMuYmluZE1hdHJpeEludmVyc2UuZ2V0SW52ZXJzZShlKX0scG9zZTpmdW5jdGlvbigpe3RoaXMuc2tlbGV0b24ucG9zZSgpfSxub3JtYWxpemVTa2luV2VpZ2h0czpmdW5jdGlvbigpe2Zvcih2YXIgYj1uZXcgbSxlPXRoaXMuZ2VvbWV0cnkuYXR0cmlidXRlcy5za2luV2VpZ2h0LGg9MCxuPWUuY291bnQ7aDxuO2grKyl7Yi54PWUuZ2V0WChoKTtiLnk9ZS5nZXRZKGgpO2Iuej1lLmdldFooaCk7Yi53PWUuZ2V0VyhoKTt2YXIgdT0xL2IubWFuaGF0dGFuTGVuZ3RoKCk7SW5maW5pdHkhPT11P2IubXVsdGlwbHlTY2FsYXIodSk6Yi5zZXQoMSwwLDAsMCk7ZS5zZXRYWVpXKGgsYi54LGIueSxiLnosYi53KX19LHVwZGF0ZU1hdHJpeFdvcmxkOmZ1bmN0aW9uKGIpe3RiLnByb3RvdHlwZS51cGRhdGVNYXRyaXhXb3JsZC5jYWxsKHRoaXMsYik7ImF0dGFjaGVkIj09PXRoaXMuYmluZE1vZGU/dGhpcy5iaW5kTWF0cml4SW52ZXJzZS5nZXRJbnZlcnNlKHRoaXMubWF0cml4V29ybGQpOgoiZGV0YWNoZWQiPT09dGhpcy5iaW5kTW9kZT90aGlzLmJpbmRNYXRyaXhJbnZlcnNlLmdldEludmVyc2UodGhpcy5iaW5kTWF0cml4KTpjb25zb2xlLndhcm4oIlRIUkVFLlNraW5uZWRNZXNoOiBVbnJlY29nbml6ZWQgYmluZE1vZGU6ICIrdGhpcy5iaW5kTW9kZSl9LGNsb25lOmZ1bmN0aW9uKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMuZ2VvbWV0cnksdGhpcy5tYXRlcmlhbCkpLmNvcHkodGhpcyl9fSk7T2JqZWN0LmFzc2lnbihqaC5wcm90b3R5cGUse2NhbGN1bGF0ZUludmVyc2VzOmZ1bmN0aW9uKCl7dGhpcy5ib25lSW52ZXJzZXM9W107Zm9yKHZhciBiPTAsZT10aGlzLmJvbmVzLmxlbmd0aDtiPGU7YisrKXt2YXIgaD1uZXcgQzt0aGlzLmJvbmVzW2JdJiZoLmdldEludmVyc2UodGhpcy5ib25lc1tiXS5tYXRyaXhXb3JsZCk7dGhpcy5ib25lSW52ZXJzZXMucHVzaChoKX19LHBvc2U6ZnVuY3Rpb24oKXt2YXIgYixlO3ZhciBoPTA7Zm9yKGU9dGhpcy5ib25lcy5sZW5ndGg7aDwKZTtoKyspKGI9dGhpcy5ib25lc1toXSkmJmIubWF0cml4V29ybGQuZ2V0SW52ZXJzZSh0aGlzLmJvbmVJbnZlcnNlc1toXSk7aD0wO2ZvcihlPXRoaXMuYm9uZXMubGVuZ3RoO2g8ZTtoKyspaWYoYj10aGlzLmJvbmVzW2hdKWIucGFyZW50JiZiLnBhcmVudC5pc0JvbmU/KGIubWF0cml4LmdldEludmVyc2UoYi5wYXJlbnQubWF0cml4V29ybGQpLGIubWF0cml4Lm11bHRpcGx5KGIubWF0cml4V29ybGQpKTpiLm1hdHJpeC5jb3B5KGIubWF0cml4V29ybGQpLGIubWF0cml4LmRlY29tcG9zZShiLnBvc2l0aW9uLGIucXVhdGVybmlvbixiLnNjYWxlKX0sdXBkYXRlOmZ1bmN0aW9uKCl7dmFyIGI9bmV3IEMsZT1uZXcgQztyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIGg9dGhpcy5ib25lcyxuPXRoaXMuYm9uZUludmVyc2VzLHU9dGhpcy5ib25lTWF0cmljZXMsdz10aGlzLmJvbmVUZXh0dXJlLHo9MCxFPWgubGVuZ3RoO3o8RTt6KyspYi5tdWx0aXBseU1hdHJpY2VzKGhbel0/aFt6XS5tYXRyaXhXb3JsZDoKZSxuW3pdKSxiLnRvQXJyYXkodSwxNip6KTt2b2lkIDAhPT13JiYody5uZWVkc1VwZGF0ZT0hMCl9fSgpLGNsb25lOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBqaCh0aGlzLmJvbmVzLHRoaXMuYm9uZUludmVyc2VzKX0sZ2V0Qm9uZUJ5TmFtZTpmdW5jdGlvbihiKXtmb3IodmFyIGU9MCxoPXRoaXMuYm9uZXMubGVuZ3RoO2U8aDtlKyspe3ZhciBuPXRoaXMuYm9uZXNbZV07aWYobi5uYW1lPT09YilyZXR1cm4gbn19fSk7emkucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShTLnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOnppLGlzQm9uZTohMH0pO0xiLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEdhLnByb3RvdHlwZSk7TGIucHJvdG90eXBlLmNvbnN0cnVjdG9yPUxiO0xiLnByb3RvdHlwZS5pc0xpbmVCYXNpY01hdGVyaWFsPSEwO0xiLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKGIpe0dhLnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyxiKTt0aGlzLmNvbG9yLmNvcHkoYi5jb2xvcik7CnRoaXMubGluZXdpZHRoPWIubGluZXdpZHRoO3RoaXMubGluZWNhcD1iLmxpbmVjYXA7dGhpcy5saW5lam9pbj1iLmxpbmVqb2luO3JldHVybiB0aGlzfTtsYy5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKFMucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6bGMsaXNMaW5lOiEwLGNvbXB1dGVMaW5lRGlzdGFuY2VzOmZ1bmN0aW9uKCl7dmFyIGI9bmV3IGcsZT1uZXcgZztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgaD10aGlzLmdlb21ldHJ5O2lmKGguaXNCdWZmZXJHZW9tZXRyeSlpZihudWxsPT09aC5pbmRleCl7Zm9yKHZhciBuPWguYXR0cmlidXRlcy5wb3NpdGlvbix1PVswXSx3PTEsej1uLmNvdW50O3c8ejt3KyspYi5mcm9tQnVmZmVyQXR0cmlidXRlKG4sdy0xKSxlLmZyb21CdWZmZXJBdHRyaWJ1dGUobix3KSx1W3ddPXVbdy0xXSx1W3ddKz1iLmRpc3RhbmNlVG8oZSk7aC5hZGRBdHRyaWJ1dGUoImxpbmVEaXN0YW5jZSIsbmV3IGJhKHUsMSkpfWVsc2UgY29uc29sZS53YXJuKCJUSFJFRS5MaW5lLmNvbXB1dGVMaW5lRGlzdGFuY2VzKCk6IENvbXB1dGF0aW9uIG9ubHkgcG9zc2libGUgd2l0aCBub24taW5kZXhlZCBCdWZmZXJHZW9tZXRyeS4iKTsKZWxzZSBpZihoLmlzR2VvbWV0cnkpZm9yKG49aC52ZXJ0aWNlcyx1PWgubGluZURpc3RhbmNlcyx1WzBdPTAsdz0xLHo9bi5sZW5ndGg7dzx6O3crKyl1W3ddPXVbdy0xXSx1W3ddKz1uW3ctMV0uZGlzdGFuY2VUbyhuW3ddKTtyZXR1cm4gdGhpc319KCkscmF5Y2FzdDpmdW5jdGlvbigpe3ZhciBiPW5ldyBDLGU9bmV3IHhiLGg9bmV3IEE7cmV0dXJuIGZ1bmN0aW9uKG4sdSl7dmFyIHc9bi5saW5lUHJlY2lzaW9uLHo9dGhpcy5nZW9tZXRyeSxFPXRoaXMubWF0cml4V29ybGQ7bnVsbD09PXouYm91bmRpbmdTcGhlcmUmJnouY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCk7aC5jb3B5KHouYm91bmRpbmdTcGhlcmUpO2guYXBwbHlNYXRyaXg0KEUpO2gucmFkaXVzKz13O2lmKCExIT09bi5yYXkuaW50ZXJzZWN0c1NwaGVyZShoKSl7Yi5nZXRJbnZlcnNlKEUpO2UuY29weShuLnJheSkuYXBwbHlNYXRyaXg0KGIpO3cvPSh0aGlzLnNjYWxlLngrdGhpcy5zY2FsZS55K3RoaXMuc2NhbGUueikvCjM7dyo9dzt2YXIgSD1uZXcgZyxJPW5ldyBnO0U9bmV3IGc7dmFyIE89bmV3IGcsUT10aGlzJiZ0aGlzLmlzTGluZVNlZ21lbnRzPzI6MTtpZih6LmlzQnVmZmVyR2VvbWV0cnkpe3ZhciBSPXouaW5kZXgsVT16LmF0dHJpYnV0ZXMucG9zaXRpb24uYXJyYXk7aWYobnVsbCE9PVIpe1I9Ui5hcnJheTt6PTA7Zm9yKHZhciBXPVIubGVuZ3RoLTE7ejxXO3orPVEpe3ZhciBaPVJbeisxXTtILmZyb21BcnJheShVLDMqUlt6XSk7SS5mcm9tQXJyYXkoVSwzKlopO1o9ZS5kaXN0YW5jZVNxVG9TZWdtZW50KEgsSSxPLEUpO1o+d3x8KE8uYXBwbHlNYXRyaXg0KHRoaXMubWF0cml4V29ybGQpLFo9bi5yYXkub3JpZ2luLmRpc3RhbmNlVG8oTyksWjxuLm5lYXJ8fFo+bi5mYXJ8fHUucHVzaCh7ZGlzdGFuY2U6Wixwb2ludDpFLmNsb25lKCkuYXBwbHlNYXRyaXg0KHRoaXMubWF0cml4V29ybGQpLGluZGV4OnosZmFjZTpudWxsLGZhY2VJbmRleDpudWxsLG9iamVjdDp0aGlzfSkpfX1lbHNlIGZvcih6PQowLFc9VS5sZW5ndGgvMy0xO3o8Vzt6Kz1RKUguZnJvbUFycmF5KFUsMyp6KSxJLmZyb21BcnJheShVLDMqeiszKSxaPWUuZGlzdGFuY2VTcVRvU2VnbWVudChILEksTyxFKSxaPnd8fChPLmFwcGx5TWF0cml4NCh0aGlzLm1hdHJpeFdvcmxkKSxaPW4ucmF5Lm9yaWdpbi5kaXN0YW5jZVRvKE8pLFo8bi5uZWFyfHxaPm4uZmFyfHx1LnB1c2goe2Rpc3RhbmNlOloscG9pbnQ6RS5jbG9uZSgpLmFwcGx5TWF0cml4NCh0aGlzLm1hdHJpeFdvcmxkKSxpbmRleDp6LGZhY2U6bnVsbCxmYWNlSW5kZXg6bnVsbCxvYmplY3Q6dGhpc30pKX1lbHNlIGlmKHouaXNHZW9tZXRyeSlmb3IoSD16LnZlcnRpY2VzLEk9SC5sZW5ndGgsej0wO3o8SS0xO3orPVEpWj1lLmRpc3RhbmNlU3FUb1NlZ21lbnQoSFt6XSxIW3orMV0sTyxFKSxaPnd8fChPLmFwcGx5TWF0cml4NCh0aGlzLm1hdHJpeFdvcmxkKSxaPW4ucmF5Lm9yaWdpbi5kaXN0YW5jZVRvKE8pLFo8bi5uZWFyfHxaPm4uZmFyfHx1LnB1c2goe2Rpc3RhbmNlOlosCnBvaW50OkUuY2xvbmUoKS5hcHBseU1hdHJpeDQodGhpcy5tYXRyaXhXb3JsZCksaW5kZXg6eixmYWNlOm51bGwsZmFjZUluZGV4Om51bGwsb2JqZWN0OnRoaXN9KSl9fX0oKSxjbG9uZTpmdW5jdGlvbigpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLmdlb21ldHJ5LHRoaXMubWF0ZXJpYWwpKS5jb3B5KHRoaXMpfX0pO1BiLnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUobGMucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6UGIsaXNMaW5lU2VnbWVudHM6ITAsY29tcHV0ZUxpbmVEaXN0YW5jZXM6ZnVuY3Rpb24oKXt2YXIgYj1uZXcgZyxlPW5ldyBnO3JldHVybiBmdW5jdGlvbigpe3ZhciBoPXRoaXMuZ2VvbWV0cnk7aWYoaC5pc0J1ZmZlckdlb21ldHJ5KWlmKG51bGw9PT1oLmluZGV4KXtmb3IodmFyIG49aC5hdHRyaWJ1dGVzLnBvc2l0aW9uLHU9W10sdz0wLHo9bi5jb3VudDt3PHo7dys9MiliLmZyb21CdWZmZXJBdHRyaWJ1dGUobix3KSxlLmZyb21CdWZmZXJBdHRyaWJ1dGUobiwKdysxKSx1W3ddPTA9PT13PzA6dVt3LTFdLHVbdysxXT11W3ddK2IuZGlzdGFuY2VUbyhlKTtoLmFkZEF0dHJpYnV0ZSgibGluZURpc3RhbmNlIixuZXcgYmEodSwxKSl9ZWxzZSBjb25zb2xlLndhcm4oIlRIUkVFLkxpbmVTZWdtZW50cy5jb21wdXRlTGluZURpc3RhbmNlcygpOiBDb21wdXRhdGlvbiBvbmx5IHBvc3NpYmxlIHdpdGggbm9uLWluZGV4ZWQgQnVmZmVyR2VvbWV0cnkuIik7ZWxzZSBpZihoLmlzR2VvbWV0cnkpZm9yKG49aC52ZXJ0aWNlcyx1PWgubGluZURpc3RhbmNlcyx3PTAsej1uLmxlbmd0aDt3PHo7dys9MiliLmNvcHkoblt3XSksZS5jb3B5KG5bdysxXSksdVt3XT0wPT09dz8wOnVbdy0xXSx1W3crMV09dVt3XStiLmRpc3RhbmNlVG8oZSk7cmV0dXJuIHRoaXN9fSgpfSk7a2gucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShsYy5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpraCxpc0xpbmVMb29wOiEwfSk7U2MucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoR2EucHJvdG90eXBlKTsKU2MucHJvdG90eXBlLmNvbnN0cnVjdG9yPVNjO1NjLnByb3RvdHlwZS5pc1BvaW50c01hdGVyaWFsPSEwO1NjLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKGIpe0dhLnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyxiKTt0aGlzLmNvbG9yLmNvcHkoYi5jb2xvcik7dGhpcy5tYXA9Yi5tYXA7dGhpcy5zaXplPWIuc2l6ZTt0aGlzLnNpemVBdHRlbnVhdGlvbj1iLnNpemVBdHRlbnVhdGlvbjt0aGlzLm1vcnBoVGFyZ2V0cz1iLm1vcnBoVGFyZ2V0cztyZXR1cm4gdGhpc307UmUucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShTLnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOlJlLGlzUG9pbnRzOiEwLHJheWNhc3Q6ZnVuY3Rpb24oKXt2YXIgYj1uZXcgQyxlPW5ldyB4YixoPW5ldyBBO3JldHVybiBmdW5jdGlvbihuLHUpe2Z1bmN0aW9uIHcoZmEscWEpe3ZhciByYT1lLmRpc3RhbmNlU3FUb1BvaW50KGZhKTtyYTxPJiYoZS5jbG9zZXN0UG9pbnRUb1BvaW50KGZhLFEpLFEuYXBwbHlNYXRyaXg0KEgpLApmYT1uLnJheS5vcmlnaW4uZGlzdGFuY2VUbyhRKSxmYTxuLm5lYXJ8fGZhPm4uZmFyfHx1LnB1c2goe2Rpc3RhbmNlOmZhLGRpc3RhbmNlVG9SYXk6TWF0aC5zcXJ0KHJhKSxwb2ludDpRLmNsb25lKCksaW5kZXg6cWEsZmFjZTpudWxsLG9iamVjdDp6fSkpfXZhciB6PXRoaXMsRT10aGlzLmdlb21ldHJ5LEg9dGhpcy5tYXRyaXhXb3JsZCxJPW4ucGFyYW1zLlBvaW50cy50aHJlc2hvbGQ7bnVsbD09PUUuYm91bmRpbmdTcGhlcmUmJkUuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCk7aC5jb3B5KEUuYm91bmRpbmdTcGhlcmUpO2guYXBwbHlNYXRyaXg0KEgpO2gucmFkaXVzKz1JO2lmKCExIT09bi5yYXkuaW50ZXJzZWN0c1NwaGVyZShoKSl7Yi5nZXRJbnZlcnNlKEgpO2UuY29weShuLnJheSkuYXBwbHlNYXRyaXg0KGIpO0kvPSh0aGlzLnNjYWxlLngrdGhpcy5zY2FsZS55K3RoaXMuc2NhbGUueikvMzt2YXIgTz1JKkk7ST1uZXcgZzt2YXIgUT1uZXcgZztpZihFLmlzQnVmZmVyR2VvbWV0cnkpe3ZhciBSPQpFLmluZGV4O0U9RS5hdHRyaWJ1dGVzLnBvc2l0aW9uLmFycmF5O2lmKG51bGwhPT1SKXt2YXIgVT1SLmFycmF5O1I9MDtmb3IodmFyIFc9VS5sZW5ndGg7UjxXO1IrKyl7dmFyIFo9VVtSXTtJLmZyb21BcnJheShFLDMqWik7dyhJLFopfX1lbHNlIGZvcihSPTAsVT1FLmxlbmd0aC8zO1I8VTtSKyspSS5mcm9tQXJyYXkoRSwzKlIpLHcoSSxSKX1lbHNlIGZvcihJPUUudmVydGljZXMsUj0wLFU9SS5sZW5ndGg7UjxVO1IrKyl3KElbUl0sUil9fX0oKSxjbG9uZTpmdW5jdGlvbigpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLmdlb21ldHJ5LHRoaXMubWF0ZXJpYWwpKS5jb3B5KHRoaXMpfX0pO0FpLnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoay5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpBaSxpc1ZpZGVvVGV4dHVyZTohMCx1cGRhdGU6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLmltYWdlO2IucmVhZHlTdGF0ZT49Yi5IQVZFX0NVUlJFTlRfREFUQSYmCih0aGlzLm5lZWRzVXBkYXRlPSEwKX19KTtTZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShrLnByb3RvdHlwZSk7U2UucHJvdG90eXBlLmNvbnN0cnVjdG9yPVNlO1NlLnByb3RvdHlwZS5pc0NvbXByZXNzZWRUZXh0dXJlPSEwO1ZmLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGsucHJvdG90eXBlKTtWZi5wcm90b3R5cGUuY29uc3RydWN0b3I9VmY7VmYucHJvdG90eXBlLmlzQ2FudmFzVGV4dHVyZT0hMDtXZi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShrLnByb3RvdHlwZSk7V2YucHJvdG90eXBlLmNvbnN0cnVjdG9yPVdmO1dmLnByb3RvdHlwZS5pc0RlcHRoVGV4dHVyZT0hMDtUZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh4YS5wcm90b3R5cGUpO1RlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1UZTtYZi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShOLnByb3RvdHlwZSk7WGYucHJvdG90eXBlLmNvbnN0cnVjdG9yPVhmO1VlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHhhLnByb3RvdHlwZSk7ClVlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1VZTtZZi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShOLnByb3RvdHlwZSk7WWYucHJvdG90eXBlLmNvbnN0cnVjdG9yPVlmO3pjLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHhhLnByb3RvdHlwZSk7emMucHJvdG90eXBlLmNvbnN0cnVjdG9yPXpjO1pmLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKE4ucHJvdG90eXBlKTtaZi5wcm90b3R5cGUuY29uc3RydWN0b3I9WmY7VmUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoemMucHJvdG90eXBlKTtWZS5wcm90b3R5cGUuY29uc3RydWN0b3I9VmU7JGYucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoTi5wcm90b3R5cGUpOyRmLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj0kZjtpZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh6Yy5wcm90b3R5cGUpO2llLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1pZTthZy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShOLnByb3RvdHlwZSk7YWcucHJvdG90eXBlLmNvbnN0cnVjdG9yPQphZztXZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh6Yy5wcm90b3R5cGUpO1dlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1XZTtiZy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShOLnByb3RvdHlwZSk7YmcucHJvdG90eXBlLmNvbnN0cnVjdG9yPWJnO1hlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHpjLnByb3RvdHlwZSk7WGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPVhlO2NnLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKE4ucHJvdG90eXBlKTtjZy5wcm90b3R5cGUuY29uc3RydWN0b3I9Y2c7amUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoeGEucHJvdG90eXBlKTtqZS5wcm90b3R5cGUuY29uc3RydWN0b3I9amU7amUucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3ZhciBiPXhhLnByb3RvdHlwZS50b0pTT04uY2FsbCh0aGlzKTtiLnBhdGg9dGhpcy5wYXJhbWV0ZXJzLnBhdGgudG9KU09OKCk7cmV0dXJuIGJ9O2RnLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKE4ucHJvdG90eXBlKTsKZGcucHJvdG90eXBlLmNvbnN0cnVjdG9yPWRnO1llLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHhhLnByb3RvdHlwZSk7WWUucHJvdG90eXBlLmNvbnN0cnVjdG9yPVllO2VnLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKE4ucHJvdG90eXBlKTtlZy5wcm90b3R5cGUuY29uc3RydWN0b3I9ZWc7WmUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoeGEucHJvdG90eXBlKTtaZS5wcm90b3R5cGUuY29uc3RydWN0b3I9WmU7dmFyIG5wPXt0cmlhbmd1bGF0ZTpmdW5jdGlvbihiLGUsaCl7aD1ofHwyO3ZhciBuPWUmJmUubGVuZ3RoLHU9bj9lWzBdKmg6Yi5sZW5ndGgsdz13bChiLDAsdSxoLCEwKSx6PVtdO2lmKCF3KXJldHVybiB6O24mJih3PVNvKGIsZSx3LGgpKTtpZihiLmxlbmd0aD44MCpoKXt2YXIgRT1lPWJbMF07dmFyIEg9bj1iWzFdO2Zvcih2YXIgST1oO0k8dTtJKz1oKXt2YXIgTz1iW0ldO3ZhciBRPWJbSSsxXTtPPEUmJihFPU8pO1E8SCYmKEg9USk7Tz5lJiYoZT1PKTtRPm4mJihuPQpRKX1PPU1hdGgubWF4KGUtRSxuLUgpO089MCE9PU8/MS9POjB9aGcodyx6LGgsRSxILE8pO3JldHVybiB6fX0seWQ9e2FyZWE6ZnVuY3Rpb24oYil7Zm9yKHZhciBlPWIubGVuZ3RoLGg9MCxuPWUtMSx1PTA7dTxlO249dSsrKWgrPWJbbl0ueCpiW3VdLnktYlt1XS54KmJbbl0ueTtyZXR1cm4uNSpofSxpc0Nsb2NrV2lzZTpmdW5jdGlvbihiKXtyZXR1cm4gMD55ZC5hcmVhKGIpfSx0cmlhbmd1bGF0ZVNoYXBlOmZ1bmN0aW9uKGIsZSl7dmFyIGg9W10sbj1bXSx1PVtdO0FsKGIpO0JsKGgsYik7dmFyIHc9Yi5sZW5ndGg7ZS5mb3JFYWNoKEFsKTtmb3IoYj0wO2I8ZS5sZW5ndGg7YisrKW4ucHVzaCh3KSx3Kz1lW2JdLmxlbmd0aCxCbChoLGVbYl0pO2U9bnAudHJpYW5ndWxhdGUoaCxuKTtmb3IoYj0wO2I8ZS5sZW5ndGg7Yis9Myl1LnB1c2goZS5zbGljZShiLGIrMykpO3JldHVybiB1fX07bGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoTi5wcm90b3R5cGUpO2xlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj0KbGU7bGUucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3ZhciBiPU4ucHJvdG90eXBlLnRvSlNPTi5jYWxsKHRoaXMpO3JldHVybiBDbCh0aGlzLnBhcmFtZXRlcnMuc2hhcGVzLHRoaXMucGFyYW1ldGVycy5vcHRpb25zLGIpfTttZC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh4YS5wcm90b3R5cGUpO21kLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1tZDttZC5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7dmFyIGI9eGEucHJvdG90eXBlLnRvSlNPTi5jYWxsKHRoaXMpO3JldHVybiBDbCh0aGlzLnBhcmFtZXRlcnMuc2hhcGVzLHRoaXMucGFyYW1ldGVycy5vcHRpb25zLGIpfTt2YXIgJG89e2dlbmVyYXRlVG9wVVY6ZnVuY3Rpb24oYixlLGgsbix1KXtiPWVbMypuXTtuPWVbMypuKzFdO3ZhciB3PWVbMyp1XTt1PWVbMyp1KzFdO3JldHVybltuZXcgZChlWzMqaF0sZVszKmgrMV0pLG5ldyBkKGIsbiksbmV3IGQodyx1KV19LGdlbmVyYXRlU2lkZVdhbGxVVjpmdW5jdGlvbihiLGUsCmgsbix1LHcpe2I9ZVszKmhdO3ZhciB6PWVbMypoKzFdO2g9ZVszKmgrMl07dmFyIEU9ZVszKm5dLEg9ZVszKm4rMV07bj1lWzMqbisyXTt2YXIgST1lWzMqdV0sTz1lWzMqdSsxXTt1PWVbMyp1KzJdO3ZhciBRPWVbMyp3XSxSPWVbMyp3KzFdO2U9ZVszKncrMl07cmV0dXJuLjAxPk1hdGguYWJzKHotSCk/W25ldyBkKGIsMS1oKSxuZXcgZChFLDEtbiksbmV3IGQoSSwxLXUpLG5ldyBkKFEsMS1lKV06W25ldyBkKHosMS1oKSxuZXcgZChILDEtbiksbmV3IGQoTywxLXUpLG5ldyBkKFIsMS1lKV19fTtqZy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShOLnByb3RvdHlwZSk7amcucHJvdG90eXBlLmNvbnN0cnVjdG9yPWpnOyRlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKG1kLnByb3RvdHlwZSk7JGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPSRlO2tnLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKE4ucHJvdG90eXBlKTtrZy5wcm90b3R5cGUuY29uc3RydWN0b3I9a2c7V2QucHJvdG90eXBlPQpPYmplY3QuY3JlYXRlKHhhLnByb3RvdHlwZSk7V2QucHJvdG90eXBlLmNvbnN0cnVjdG9yPVdkO2xnLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKE4ucHJvdG90eXBlKTtsZy5wcm90b3R5cGUuY29uc3RydWN0b3I9bGc7YWYucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoeGEucHJvdG90eXBlKTthZi5wcm90b3R5cGUuY29uc3RydWN0b3I9YWY7bWcucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoTi5wcm90b3R5cGUpO21nLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1tZztiZi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh4YS5wcm90b3R5cGUpO2JmLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1iZjttZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShOLnByb3RvdHlwZSk7bWUucHJvdG90eXBlLmNvbnN0cnVjdG9yPW1lO21lLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXt2YXIgYj1OLnByb3RvdHlwZS50b0pTT04uY2FsbCh0aGlzKTtyZXR1cm4gRGwodGhpcy5wYXJhbWV0ZXJzLnNoYXBlcyxiKX07Cm5lLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHhhLnByb3RvdHlwZSk7bmUucHJvdG90eXBlLmNvbnN0cnVjdG9yPW5lO25lLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXt2YXIgYj14YS5wcm90b3R5cGUudG9KU09OLmNhbGwodGhpcyk7cmV0dXJuIERsKHRoaXMucGFyYW1ldGVycy5zaGFwZXMsYil9O2NmLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHhhLnByb3RvdHlwZSk7Y2YucHJvdG90eXBlLmNvbnN0cnVjdG9yPWNmO29lLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKE4ucHJvdG90eXBlKTtvZS5wcm90b3R5cGUuY29uc3RydWN0b3I9b2U7emQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoeGEucHJvdG90eXBlKTt6ZC5wcm90b3R5cGUuY29uc3RydWN0b3I9emQ7bmcucHJvdG90eXBlPU9iamVjdC5jcmVhdGUob2UucHJvdG90eXBlKTtuZy5wcm90b3R5cGUuY29uc3RydWN0b3I9bmc7b2cucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoemQucHJvdG90eXBlKTtvZy5wcm90b3R5cGUuY29uc3RydWN0b3I9Cm9nO3BnLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKE4ucHJvdG90eXBlKTtwZy5wcm90b3R5cGUuY29uc3RydWN0b3I9cGc7ZGYucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoeGEucHJvdG90eXBlKTtkZi5wcm90b3R5cGUuY29uc3RydWN0b3I9ZGY7dmFyIHhjPU9iamVjdC5mcmVlemUoe1dpcmVmcmFtZUdlb21ldHJ5OlRlLFBhcmFtZXRyaWNHZW9tZXRyeTpYZixQYXJhbWV0cmljQnVmZmVyR2VvbWV0cnk6VWUsVGV0cmFoZWRyb25HZW9tZXRyeTpaZixUZXRyYWhlZHJvbkJ1ZmZlckdlb21ldHJ5OlZlLE9jdGFoZWRyb25HZW9tZXRyeTokZixPY3RhaGVkcm9uQnVmZmVyR2VvbWV0cnk6aWUsSWNvc2FoZWRyb25HZW9tZXRyeTphZyxJY29zYWhlZHJvbkJ1ZmZlckdlb21ldHJ5OldlLERvZGVjYWhlZHJvbkdlb21ldHJ5OmJnLERvZGVjYWhlZHJvbkJ1ZmZlckdlb21ldHJ5OlhlLFBvbHloZWRyb25HZW9tZXRyeTpZZixQb2x5aGVkcm9uQnVmZmVyR2VvbWV0cnk6emMsVHViZUdlb21ldHJ5OmNnLApUdWJlQnVmZmVyR2VvbWV0cnk6amUsVG9ydXNLbm90R2VvbWV0cnk6ZGcsVG9ydXNLbm90QnVmZmVyR2VvbWV0cnk6WWUsVG9ydXNHZW9tZXRyeTplZyxUb3J1c0J1ZmZlckdlb21ldHJ5OlplLFRleHRHZW9tZXRyeTpqZyxUZXh0QnVmZmVyR2VvbWV0cnk6JGUsU3BoZXJlR2VvbWV0cnk6a2csU3BoZXJlQnVmZmVyR2VvbWV0cnk6V2QsUmluZ0dlb21ldHJ5OmxnLFJpbmdCdWZmZXJHZW9tZXRyeTphZixQbGFuZUdlb21ldHJ5OlNhLFBsYW5lQnVmZmVyR2VvbWV0cnk6RWEsTGF0aGVHZW9tZXRyeTptZyxMYXRoZUJ1ZmZlckdlb21ldHJ5OmJmLFNoYXBlR2VvbWV0cnk6bWUsU2hhcGVCdWZmZXJHZW9tZXRyeTpuZSxFeHRydWRlR2VvbWV0cnk6bGUsRXh0cnVkZUJ1ZmZlckdlb21ldHJ5Om1kLEVkZ2VzR2VvbWV0cnk6Y2YsQ29uZUdlb21ldHJ5Om5nLENvbmVCdWZmZXJHZW9tZXRyeTpvZyxDeWxpbmRlckdlb21ldHJ5Om9lLEN5bGluZGVyQnVmZmVyR2VvbWV0cnk6emQsQ2lyY2xlR2VvbWV0cnk6cGcsCkNpcmNsZUJ1ZmZlckdlb21ldHJ5OmRmLEJveEdlb21ldHJ5OnphLEJveEJ1ZmZlckdlb21ldHJ5OkZhfSk7cGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoR2EucHJvdG90eXBlKTtwZS5wcm90b3R5cGUuY29uc3RydWN0b3I9cGU7cGUucHJvdG90eXBlLmlzU2hhZG93TWF0ZXJpYWw9ITA7cGUucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oYil7R2EucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLGIpO3RoaXMuY29sb3IuY29weShiLmNvbG9yKTtyZXR1cm4gdGhpc307ZWYucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZGIucHJvdG90eXBlKTtlZi5wcm90b3R5cGUuY29uc3RydWN0b3I9ZWY7ZWYucHJvdG90eXBlLmlzUmF3U2hhZGVyTWF0ZXJpYWw9ITA7bmQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoR2EucHJvdG90eXBlKTtuZC5wcm90b3R5cGUuY29uc3RydWN0b3I9bmQ7bmQucHJvdG90eXBlLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWw9ITA7bmQucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oYil7R2EucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLApiKTt0aGlzLmRlZmluZXM9e1NUQU5EQVJEOiIifTt0aGlzLmNvbG9yLmNvcHkoYi5jb2xvcik7dGhpcy5yb3VnaG5lc3M9Yi5yb3VnaG5lc3M7dGhpcy5tZXRhbG5lc3M9Yi5tZXRhbG5lc3M7dGhpcy5tYXA9Yi5tYXA7dGhpcy5saWdodE1hcD1iLmxpZ2h0TWFwO3RoaXMubGlnaHRNYXBJbnRlbnNpdHk9Yi5saWdodE1hcEludGVuc2l0eTt0aGlzLmFvTWFwPWIuYW9NYXA7dGhpcy5hb01hcEludGVuc2l0eT1iLmFvTWFwSW50ZW5zaXR5O3RoaXMuZW1pc3NpdmUuY29weShiLmVtaXNzaXZlKTt0aGlzLmVtaXNzaXZlTWFwPWIuZW1pc3NpdmVNYXA7dGhpcy5lbWlzc2l2ZUludGVuc2l0eT1iLmVtaXNzaXZlSW50ZW5zaXR5O3RoaXMuYnVtcE1hcD1iLmJ1bXBNYXA7dGhpcy5idW1wU2NhbGU9Yi5idW1wU2NhbGU7dGhpcy5ub3JtYWxNYXA9Yi5ub3JtYWxNYXA7dGhpcy5ub3JtYWxNYXBUeXBlPWIubm9ybWFsTWFwVHlwZTt0aGlzLm5vcm1hbFNjYWxlLmNvcHkoYi5ub3JtYWxTY2FsZSk7CnRoaXMuZGlzcGxhY2VtZW50TWFwPWIuZGlzcGxhY2VtZW50TWFwO3RoaXMuZGlzcGxhY2VtZW50U2NhbGU9Yi5kaXNwbGFjZW1lbnRTY2FsZTt0aGlzLmRpc3BsYWNlbWVudEJpYXM9Yi5kaXNwbGFjZW1lbnRCaWFzO3RoaXMucm91Z2huZXNzTWFwPWIucm91Z2huZXNzTWFwO3RoaXMubWV0YWxuZXNzTWFwPWIubWV0YWxuZXNzTWFwO3RoaXMuYWxwaGFNYXA9Yi5hbHBoYU1hcDt0aGlzLmVudk1hcD1iLmVudk1hcDt0aGlzLmVudk1hcEludGVuc2l0eT1iLmVudk1hcEludGVuc2l0eTt0aGlzLnJlZnJhY3Rpb25SYXRpbz1iLnJlZnJhY3Rpb25SYXRpbzt0aGlzLndpcmVmcmFtZT1iLndpcmVmcmFtZTt0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD1iLndpcmVmcmFtZUxpbmV3aWR0aDt0aGlzLndpcmVmcmFtZUxpbmVjYXA9Yi53aXJlZnJhbWVMaW5lY2FwO3RoaXMud2lyZWZyYW1lTGluZWpvaW49Yi53aXJlZnJhbWVMaW5lam9pbjt0aGlzLnNraW5uaW5nPWIuc2tpbm5pbmc7dGhpcy5tb3JwaFRhcmdldHM9CmIubW9ycGhUYXJnZXRzO3RoaXMubW9ycGhOb3JtYWxzPWIubW9ycGhOb3JtYWxzO3JldHVybiB0aGlzfTtxZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShuZC5wcm90b3R5cGUpO3FlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1xZTtxZS5wcm90b3R5cGUuaXNNZXNoUGh5c2ljYWxNYXRlcmlhbD0hMDtxZS5wcm90b3R5cGUuY29weT1mdW5jdGlvbihiKXtuZC5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsYik7dGhpcy5kZWZpbmVzPXtQSFlTSUNBTDoiIn07dGhpcy5yZWZsZWN0aXZpdHk9Yi5yZWZsZWN0aXZpdHk7dGhpcy5jbGVhckNvYXQ9Yi5jbGVhckNvYXQ7dGhpcy5jbGVhckNvYXRSb3VnaG5lc3M9Yi5jbGVhckNvYXRSb3VnaG5lc3M7cmV0dXJuIHRoaXN9O1RjLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEdhLnByb3RvdHlwZSk7VGMucHJvdG90eXBlLmNvbnN0cnVjdG9yPVRjO1RjLnByb3RvdHlwZS5pc01lc2hQaG9uZ01hdGVyaWFsPSEwO1RjLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKGIpe0dhLnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcywKYik7dGhpcy5jb2xvci5jb3B5KGIuY29sb3IpO3RoaXMuc3BlY3VsYXIuY29weShiLnNwZWN1bGFyKTt0aGlzLnNoaW5pbmVzcz1iLnNoaW5pbmVzczt0aGlzLm1hcD1iLm1hcDt0aGlzLmxpZ2h0TWFwPWIubGlnaHRNYXA7dGhpcy5saWdodE1hcEludGVuc2l0eT1iLmxpZ2h0TWFwSW50ZW5zaXR5O3RoaXMuYW9NYXA9Yi5hb01hcDt0aGlzLmFvTWFwSW50ZW5zaXR5PWIuYW9NYXBJbnRlbnNpdHk7dGhpcy5lbWlzc2l2ZS5jb3B5KGIuZW1pc3NpdmUpO3RoaXMuZW1pc3NpdmVNYXA9Yi5lbWlzc2l2ZU1hcDt0aGlzLmVtaXNzaXZlSW50ZW5zaXR5PWIuZW1pc3NpdmVJbnRlbnNpdHk7dGhpcy5idW1wTWFwPWIuYnVtcE1hcDt0aGlzLmJ1bXBTY2FsZT1iLmJ1bXBTY2FsZTt0aGlzLm5vcm1hbE1hcD1iLm5vcm1hbE1hcDt0aGlzLm5vcm1hbE1hcFR5cGU9Yi5ub3JtYWxNYXBUeXBlO3RoaXMubm9ybWFsU2NhbGUuY29weShiLm5vcm1hbFNjYWxlKTt0aGlzLmRpc3BsYWNlbWVudE1hcD1iLmRpc3BsYWNlbWVudE1hcDsKdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT1iLmRpc3BsYWNlbWVudFNjYWxlO3RoaXMuZGlzcGxhY2VtZW50Qmlhcz1iLmRpc3BsYWNlbWVudEJpYXM7dGhpcy5zcGVjdWxhck1hcD1iLnNwZWN1bGFyTWFwO3RoaXMuYWxwaGFNYXA9Yi5hbHBoYU1hcDt0aGlzLmVudk1hcD1iLmVudk1hcDt0aGlzLmNvbWJpbmU9Yi5jb21iaW5lO3RoaXMucmVmbGVjdGl2aXR5PWIucmVmbGVjdGl2aXR5O3RoaXMucmVmcmFjdGlvblJhdGlvPWIucmVmcmFjdGlvblJhdGlvO3RoaXMud2lyZWZyYW1lPWIud2lyZWZyYW1lO3RoaXMud2lyZWZyYW1lTGluZXdpZHRoPWIud2lyZWZyYW1lTGluZXdpZHRoO3RoaXMud2lyZWZyYW1lTGluZWNhcD1iLndpcmVmcmFtZUxpbmVjYXA7dGhpcy53aXJlZnJhbWVMaW5lam9pbj1iLndpcmVmcmFtZUxpbmVqb2luO3RoaXMuc2tpbm5pbmc9Yi5za2lubmluZzt0aGlzLm1vcnBoVGFyZ2V0cz1iLm1vcnBoVGFyZ2V0czt0aGlzLm1vcnBoTm9ybWFscz1iLm1vcnBoTm9ybWFsczsKcmV0dXJuIHRoaXN9O3JlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKFRjLnByb3RvdHlwZSk7cmUucHJvdG90eXBlLmNvbnN0cnVjdG9yPXJlO3JlLnByb3RvdHlwZS5pc01lc2hUb29uTWF0ZXJpYWw9ITA7cmUucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oYil7VGMucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLGIpO3RoaXMuZ3JhZGllbnRNYXA9Yi5ncmFkaWVudE1hcDtyZXR1cm4gdGhpc307c2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoR2EucHJvdG90eXBlKTtzZS5wcm90b3R5cGUuY29uc3RydWN0b3I9c2U7c2UucHJvdG90eXBlLmlzTWVzaE5vcm1hbE1hdGVyaWFsPSEwO3NlLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKGIpe0dhLnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyxiKTt0aGlzLmJ1bXBNYXA9Yi5idW1wTWFwO3RoaXMuYnVtcFNjYWxlPWIuYnVtcFNjYWxlO3RoaXMubm9ybWFsTWFwPWIubm9ybWFsTWFwO3RoaXMubm9ybWFsTWFwVHlwZT1iLm5vcm1hbE1hcFR5cGU7CnRoaXMubm9ybWFsU2NhbGUuY29weShiLm5vcm1hbFNjYWxlKTt0aGlzLmRpc3BsYWNlbWVudE1hcD1iLmRpc3BsYWNlbWVudE1hcDt0aGlzLmRpc3BsYWNlbWVudFNjYWxlPWIuZGlzcGxhY2VtZW50U2NhbGU7dGhpcy5kaXNwbGFjZW1lbnRCaWFzPWIuZGlzcGxhY2VtZW50Qmlhczt0aGlzLndpcmVmcmFtZT1iLndpcmVmcmFtZTt0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD1iLndpcmVmcmFtZUxpbmV3aWR0aDt0aGlzLnNraW5uaW5nPWIuc2tpbm5pbmc7dGhpcy5tb3JwaFRhcmdldHM9Yi5tb3JwaFRhcmdldHM7dGhpcy5tb3JwaE5vcm1hbHM9Yi5tb3JwaE5vcm1hbHM7cmV0dXJuIHRoaXN9O3RlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEdhLnByb3RvdHlwZSk7dGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPXRlO3RlLnByb3RvdHlwZS5pc01lc2hMYW1iZXJ0TWF0ZXJpYWw9ITA7dGUucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oYil7R2EucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLApiKTt0aGlzLmNvbG9yLmNvcHkoYi5jb2xvcik7dGhpcy5tYXA9Yi5tYXA7dGhpcy5saWdodE1hcD1iLmxpZ2h0TWFwO3RoaXMubGlnaHRNYXBJbnRlbnNpdHk9Yi5saWdodE1hcEludGVuc2l0eTt0aGlzLmFvTWFwPWIuYW9NYXA7dGhpcy5hb01hcEludGVuc2l0eT1iLmFvTWFwSW50ZW5zaXR5O3RoaXMuZW1pc3NpdmUuY29weShiLmVtaXNzaXZlKTt0aGlzLmVtaXNzaXZlTWFwPWIuZW1pc3NpdmVNYXA7dGhpcy5lbWlzc2l2ZUludGVuc2l0eT1iLmVtaXNzaXZlSW50ZW5zaXR5O3RoaXMuc3BlY3VsYXJNYXA9Yi5zcGVjdWxhck1hcDt0aGlzLmFscGhhTWFwPWIuYWxwaGFNYXA7dGhpcy5lbnZNYXA9Yi5lbnZNYXA7dGhpcy5jb21iaW5lPWIuY29tYmluZTt0aGlzLnJlZmxlY3Rpdml0eT1iLnJlZmxlY3Rpdml0eTt0aGlzLnJlZnJhY3Rpb25SYXRpbz1iLnJlZnJhY3Rpb25SYXRpbzt0aGlzLndpcmVmcmFtZT1iLndpcmVmcmFtZTt0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD1iLndpcmVmcmFtZUxpbmV3aWR0aDsKdGhpcy53aXJlZnJhbWVMaW5lY2FwPWIud2lyZWZyYW1lTGluZWNhcDt0aGlzLndpcmVmcmFtZUxpbmVqb2luPWIud2lyZWZyYW1lTGluZWpvaW47dGhpcy5za2lubmluZz1iLnNraW5uaW5nO3RoaXMubW9ycGhUYXJnZXRzPWIubW9ycGhUYXJnZXRzO3RoaXMubW9ycGhOb3JtYWxzPWIubW9ycGhOb3JtYWxzO3JldHVybiB0aGlzfTt1ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShHYS5wcm90b3R5cGUpO3VlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj11ZTt1ZS5wcm90b3R5cGUuaXNNZXNoTWF0Y2FwTWF0ZXJpYWw9ITA7dWUucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oYil7R2EucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLGIpO3RoaXMuZGVmaW5lcz17TUFUQ0FQOiIifTt0aGlzLmNvbG9yLmNvcHkoYi5jb2xvcik7dGhpcy5tYXRjYXA9Yi5tYXRjYXA7dGhpcy5tYXA9Yi5tYXA7dGhpcy5idW1wTWFwPWIuYnVtcE1hcDt0aGlzLmJ1bXBTY2FsZT1iLmJ1bXBTY2FsZTt0aGlzLm5vcm1hbE1hcD0KYi5ub3JtYWxNYXA7dGhpcy5ub3JtYWxNYXBUeXBlPWIubm9ybWFsTWFwVHlwZTt0aGlzLm5vcm1hbFNjYWxlLmNvcHkoYi5ub3JtYWxTY2FsZSk7dGhpcy5kaXNwbGFjZW1lbnRNYXA9Yi5kaXNwbGFjZW1lbnRNYXA7dGhpcy5kaXNwbGFjZW1lbnRTY2FsZT1iLmRpc3BsYWNlbWVudFNjYWxlO3RoaXMuZGlzcGxhY2VtZW50Qmlhcz1iLmRpc3BsYWNlbWVudEJpYXM7dGhpcy5hbHBoYU1hcD1iLmFscGhhTWFwO3RoaXMuc2tpbm5pbmc9Yi5za2lubmluZzt0aGlzLm1vcnBoVGFyZ2V0cz1iLm1vcnBoVGFyZ2V0czt0aGlzLm1vcnBoTm9ybWFscz1iLm1vcnBoTm9ybWFscztyZXR1cm4gdGhpc307dmUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoTGIucHJvdG90eXBlKTt2ZS5wcm90b3R5cGUuY29uc3RydWN0b3I9dmU7dmUucHJvdG90eXBlLmlzTGluZURhc2hlZE1hdGVyaWFsPSEwO3ZlLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKGIpe0xiLnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyxiKTsKdGhpcy5zY2FsZT1iLnNjYWxlO3RoaXMuZGFzaFNpemU9Yi5kYXNoU2l6ZTt0aGlzLmdhcFNpemU9Yi5nYXBTaXplO3JldHVybiB0aGlzfTt2YXIgb3A9T2JqZWN0LmZyZWV6ZSh7U2hhZG93TWF0ZXJpYWw6cGUsU3ByaXRlTWF0ZXJpYWw6VmQsUmF3U2hhZGVyTWF0ZXJpYWw6ZWYsU2hhZGVyTWF0ZXJpYWw6ZGIsUG9pbnRzTWF0ZXJpYWw6U2MsTWVzaFBoeXNpY2FsTWF0ZXJpYWw6cWUsTWVzaFN0YW5kYXJkTWF0ZXJpYWw6bmQsTWVzaFBob25nTWF0ZXJpYWw6VGMsTWVzaFRvb25NYXRlcmlhbDpyZSxNZXNoTm9ybWFsTWF0ZXJpYWw6c2UsTWVzaExhbWJlcnRNYXRlcmlhbDp0ZSxNZXNoRGVwdGhNYXRlcmlhbDpQZCxNZXNoRGlzdGFuY2VNYXRlcmlhbDpRZCxNZXNoQmFzaWNNYXRlcmlhbDp5YixNZXNoTWF0Y2FwTWF0ZXJpYWw6dWUsTGluZURhc2hlZE1hdGVyaWFsOnZlLExpbmVCYXNpY01hdGVyaWFsOkxiLE1hdGVyaWFsOkdhfSksZ2M9e2FycmF5U2xpY2U6ZnVuY3Rpb24oYixlLApoKXtyZXR1cm4gZ2MuaXNUeXBlZEFycmF5KGIpP25ldyBiLmNvbnN0cnVjdG9yKGIuc3ViYXJyYXkoZSx2b2lkIDAhPT1oP2g6Yi5sZW5ndGgpKTpiLnNsaWNlKGUsaCl9LGNvbnZlcnRBcnJheTpmdW5jdGlvbihiLGUsaCl7cmV0dXJuIWJ8fCFoJiZiLmNvbnN0cnVjdG9yPT09ZT9iOiJudW1iZXIiPT09dHlwZW9mIGUuQllURVNfUEVSX0VMRU1FTlQ/bmV3IGUoYik6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYil9LGlzVHlwZWRBcnJheTpmdW5jdGlvbihiKXtyZXR1cm4gQXJyYXlCdWZmZXIuaXNWaWV3KGIpJiYhKGIgaW5zdGFuY2VvZiBEYXRhVmlldyl9LGdldEtleWZyYW1lT3JkZXI6ZnVuY3Rpb24oYil7Zm9yKHZhciBlPWIubGVuZ3RoLGg9QXJyYXkoZSksbj0wO24hPT1lOysrbiloW25dPW47aC5zb3J0KGZ1bmN0aW9uKHUsdyl7cmV0dXJuIGJbdV0tYlt3XX0pO3JldHVybiBofSxzb3J0ZWRBcnJheTpmdW5jdGlvbihiLGUsaCl7Zm9yKHZhciBuPWIubGVuZ3RoLHU9bmV3IGIuY29uc3RydWN0b3IobiksCnc9MCx6PTA7eiE9PW47Kyt3KWZvcih2YXIgRT1oW3ddKmUsSD0wO0ghPT1lOysrSCl1W3orK109YltFK0hdO3JldHVybiB1fSxmbGF0dGVuSlNPTjpmdW5jdGlvbihiLGUsaCxuKXtmb3IodmFyIHU9MSx3PWJbMF07dm9pZCAwIT09dyYmdm9pZCAwPT09d1tuXTspdz1iW3UrK107aWYodm9pZCAwIT09dyl7dmFyIHo9d1tuXTtpZih2b2lkIDAhPT16KWlmKEFycmF5LmlzQXJyYXkoeikpe2RvIHo9d1tuXSx2b2lkIDAhPT16JiYoZS5wdXNoKHcudGltZSksaC5wdXNoLmFwcGx5KGgseikpLHc9Ylt1KytdO3doaWxlKHZvaWQgMCE9PXcpfWVsc2UgaWYodm9pZCAwIT09ei50b0FycmF5KXtkbyB6PXdbbl0sdm9pZCAwIT09eiYmKGUucHVzaCh3LnRpbWUpLHoudG9BcnJheShoLGgubGVuZ3RoKSksdz1iW3UrK107d2hpbGUodm9pZCAwIT09dyl9ZWxzZXtkbyB6PXdbbl0sdm9pZCAwIT09eiYmKGUucHVzaCh3LnRpbWUpLGgucHVzaCh6KSksdz1iW3UrK107d2hpbGUodm9pZCAwIT09dyl9fX19OwpPYmplY3QuYXNzaWduKERjLnByb3RvdHlwZSx7ZXZhbHVhdGU6ZnVuY3Rpb24oYil7dmFyIGU9dGhpcy5wYXJhbWV0ZXJQb3NpdGlvbnMsaD10aGlzLl9jYWNoZWRJbmRleCxuPWVbaF0sdT1lW2gtMV07YTp7Yjp7Yzp7ZDppZighKGI8bikpe2Zvcih2YXIgdz1oKzI7Oyl7aWYodm9pZCAwPT09bil7aWYoYjx1KWJyZWFrIGQ7dGhpcy5fY2FjaGVkSW5kZXg9aD1lLmxlbmd0aDtyZXR1cm4gdGhpcy5hZnRlckVuZF8oaC0xLGIsdSl9aWYoaD09PXcpYnJlYWs7dT1uO249ZVsrK2hdO2lmKGI8bilicmVhayBifW49ZS5sZW5ndGg7YnJlYWsgY31pZihiPj11KWJyZWFrIGE7ZWxzZXt3PWVbMV07Yjx3JiYoaD0yLHU9dyk7Zm9yKHc9aC0yOzspe2lmKHZvaWQgMD09PXUpcmV0dXJuIHRoaXMuX2NhY2hlZEluZGV4PTAsdGhpcy5iZWZvcmVTdGFydF8oMCxiLG4pO2lmKGg9PT13KWJyZWFrO249dTt1PWVbLS1oLTFdO2lmKGI+PXUpYnJlYWsgYn1uPWg7aD0wfX1mb3IoO2g8bjspdT1oK24+Pj4KMSxiPGVbdV0/bj11Omg9dSsxO249ZVtoXTt1PWVbaC0xXTtpZih2b2lkIDA9PT11KXJldHVybiB0aGlzLl9jYWNoZWRJbmRleD0wLHRoaXMuYmVmb3JlU3RhcnRfKDAsYixuKTtpZih2b2lkIDA9PT1uKXJldHVybiB0aGlzLl9jYWNoZWRJbmRleD1oPWUubGVuZ3RoLHRoaXMuYWZ0ZXJFbmRfKGgtMSx1LGIpfXRoaXMuX2NhY2hlZEluZGV4PWg7dGhpcy5pbnRlcnZhbENoYW5nZWRfKGgsdSxuKX1yZXR1cm4gdGhpcy5pbnRlcnBvbGF0ZV8oaCx1LGIsbil9LHNldHRpbmdzOm51bGwsRGVmYXVsdFNldHRpbmdzXzp7fSxnZXRTZXR0aW5nc186ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXR0aW5nc3x8dGhpcy5EZWZhdWx0U2V0dGluZ3NffSxjb3B5U2FtcGxlVmFsdWVfOmZ1bmN0aW9uKGIpe3ZhciBlPXRoaXMucmVzdWx0QnVmZmVyLGg9dGhpcy5zYW1wbGVWYWx1ZXMsbj10aGlzLnZhbHVlU2l6ZTtiKj1uO2Zvcih2YXIgdT0wO3UhPT1uOysrdSllW3VdPWhbYit1XTtyZXR1cm4gZX0sCmludGVycG9sYXRlXzpmdW5jdGlvbigpe3Rocm93IEVycm9yKCJjYWxsIHRvIGFic3RyYWN0IG1ldGhvZCIpO30saW50ZXJ2YWxDaGFuZ2VkXzpmdW5jdGlvbigpe319KTtPYmplY3QuYXNzaWduKERjLnByb3RvdHlwZSx7YmVmb3JlU3RhcnRfOkRjLnByb3RvdHlwZS5jb3B5U2FtcGxlVmFsdWVfLGFmdGVyRW5kXzpEYy5wcm90b3R5cGUuY29weVNhbXBsZVZhbHVlX30pO21oLnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoRGMucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6bWgsRGVmYXVsdFNldHRpbmdzXzp7ZW5kaW5nU3RhcnQ6MjQwMCxlbmRpbmdFbmQ6MjQwMH0saW50ZXJ2YWxDaGFuZ2VkXzpmdW5jdGlvbihiLGUsaCl7dmFyIG49dGhpcy5wYXJhbWV0ZXJQb3NpdGlvbnMsdT1iLTIsdz1iKzEsej1uW3VdLEU9blt3XTtpZih2b2lkIDA9PT16KXN3aXRjaCh0aGlzLmdldFNldHRpbmdzXygpLmVuZGluZ1N0YXJ0KXtjYXNlIDI0MDE6dT1iO3o9MiplLWg7YnJlYWs7CmNhc2UgMjQwMjp1PW4ubGVuZ3RoLTI7ej1lK25bdV0tblt1KzFdO2JyZWFrO2RlZmF1bHQ6dT1iLHo9aH1pZih2b2lkIDA9PT1FKXN3aXRjaCh0aGlzLmdldFNldHRpbmdzXygpLmVuZGluZ0VuZCl7Y2FzZSAyNDAxOnc9YjtFPTIqaC1lO2JyZWFrO2Nhc2UgMjQwMjp3PTE7RT1oK25bMV0tblswXTticmVhaztkZWZhdWx0Onc9Yi0xLEU9ZX1iPS41KihoLWUpO249dGhpcy52YWx1ZVNpemU7dGhpcy5fd2VpZ2h0UHJldj1iLyhlLXopO3RoaXMuX3dlaWdodE5leHQ9Yi8oRS1oKTt0aGlzLl9vZmZzZXRQcmV2PXUqbjt0aGlzLl9vZmZzZXROZXh0PXcqbn0saW50ZXJwb2xhdGVfOmZ1bmN0aW9uKGIsZSxoLG4pe3ZhciB1PXRoaXMucmVzdWx0QnVmZmVyLHc9dGhpcy5zYW1wbGVWYWx1ZXMsej10aGlzLnZhbHVlU2l6ZTtiKj16O3ZhciBFPWIteixIPXRoaXMuX29mZnNldFByZXYsST10aGlzLl9vZmZzZXROZXh0LE89dGhpcy5fd2VpZ2h0UHJldixRPXRoaXMuX3dlaWdodE5leHQsUj0oaC0KZSkvKG4tZSk7aD1SKlI7bj1oKlI7ZT0tTypuKzIqTypoLU8qUjtPPSgxK08pKm4rKC0xLjUtMipPKSpoKygtLjUrTykqUisxO1I9KC0xLVEpKm4rKDEuNStRKSpoKy41KlI7UT1RKm4tUSpoO2ZvcihoPTA7aCE9PXo7KytoKXVbaF09ZSp3W0graF0rTyp3W0UraF0rUip3W2IraF0rUSp3W0kraF07cmV0dXJuIHV9fSk7cWcucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShEYy5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpxZyxpbnRlcnBvbGF0ZV86ZnVuY3Rpb24oYixlLGgsbil7dmFyIHU9dGhpcy5yZXN1bHRCdWZmZXIsdz10aGlzLnNhbXBsZVZhbHVlcyx6PXRoaXMudmFsdWVTaXplO2IqPXo7dmFyIEU9Yi16O2U9KGgtZSkvKG4tZSk7aD0xLWU7Zm9yKG49MDtuIT09ejsrK24pdVtuXT13W0Urbl0qaCt3W2Irbl0qZTtyZXR1cm4gdX19KTtuaC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKERjLnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOm5oLAppbnRlcnBvbGF0ZV86ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY29weVNhbXBsZVZhbHVlXyhiLTEpfX0pO09iamVjdC5hc3NpZ24obWMse3RvSlNPTjpmdW5jdGlvbihiKXt2YXIgZT1iLmNvbnN0cnVjdG9yO2lmKHZvaWQgMCE9PWUudG9KU09OKWU9ZS50b0pTT04oYik7ZWxzZXtlPXtuYW1lOmIubmFtZSx0aW1lczpnYy5jb252ZXJ0QXJyYXkoYi50aW1lcyxBcnJheSksdmFsdWVzOmdjLmNvbnZlcnRBcnJheShiLnZhbHVlcyxBcnJheSl9O3ZhciBoPWIuZ2V0SW50ZXJwb2xhdGlvbigpO2ghPT1iLkRlZmF1bHRJbnRlcnBvbGF0aW9uJiYoZS5pbnRlcnBvbGF0aW9uPWgpfWUudHlwZT1iLlZhbHVlVHlwZU5hbWU7cmV0dXJuIGV9fSk7T2JqZWN0LmFzc2lnbihtYy5wcm90b3R5cGUse2NvbnN0cnVjdG9yOm1jLFRpbWVCdWZmZXJUeXBlOkZsb2F0MzJBcnJheSxWYWx1ZUJ1ZmZlclR5cGU6RmxvYXQzMkFycmF5LERlZmF1bHRJbnRlcnBvbGF0aW9uOjIzMDEsSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kRGlzY3JldGU6ZnVuY3Rpb24oYil7cmV0dXJuIG5ldyBuaCh0aGlzLnRpbWVzLAp0aGlzLnZhbHVlcyx0aGlzLmdldFZhbHVlU2l6ZSgpLGIpfSxJbnRlcnBvbGFudEZhY3RvcnlNZXRob2RMaW5lYXI6ZnVuY3Rpb24oYil7cmV0dXJuIG5ldyBxZyh0aGlzLnRpbWVzLHRoaXMudmFsdWVzLHRoaXMuZ2V0VmFsdWVTaXplKCksYil9LEludGVycG9sYW50RmFjdG9yeU1ldGhvZFNtb290aDpmdW5jdGlvbihiKXtyZXR1cm4gbmV3IG1oKHRoaXMudGltZXMsdGhpcy52YWx1ZXMsdGhpcy5nZXRWYWx1ZVNpemUoKSxiKX0sc2V0SW50ZXJwb2xhdGlvbjpmdW5jdGlvbihiKXtzd2l0Y2goYil7Y2FzZSAyMzAwOnZhciBlPXRoaXMuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kRGlzY3JldGU7YnJlYWs7Y2FzZSAyMzAxOmU9dGhpcy5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RMaW5lYXI7YnJlYWs7Y2FzZSAyMzAyOmU9dGhpcy5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RTbW9vdGh9aWYodm9pZCAwPT09ZSl7ZT0idW5zdXBwb3J0ZWQgaW50ZXJwb2xhdGlvbiBmb3IgIit0aGlzLlZhbHVlVHlwZU5hbWUrCiIga2V5ZnJhbWUgdHJhY2sgbmFtZWQgIit0aGlzLm5hbWU7aWYodm9pZCAwPT09dGhpcy5jcmVhdGVJbnRlcnBvbGFudClpZihiIT09dGhpcy5EZWZhdWx0SW50ZXJwb2xhdGlvbil0aGlzLnNldEludGVycG9sYXRpb24odGhpcy5EZWZhdWx0SW50ZXJwb2xhdGlvbik7ZWxzZSB0aHJvdyBFcnJvcihlKTtjb25zb2xlLndhcm4oIlRIUkVFLktleWZyYW1lVHJhY2s6IixlKTtyZXR1cm4gdGhpc310aGlzLmNyZWF0ZUludGVycG9sYW50PWU7cmV0dXJuIHRoaXN9LGdldEludGVycG9sYXRpb246ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5jcmVhdGVJbnRlcnBvbGFudCl7Y2FzZSB0aGlzLkludGVycG9sYW50RmFjdG9yeU1ldGhvZERpc2NyZXRlOnJldHVybiAyMzAwO2Nhc2UgdGhpcy5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RMaW5lYXI6cmV0dXJuIDIzMDE7Y2FzZSB0aGlzLkludGVycG9sYW50RmFjdG9yeU1ldGhvZFNtb290aDpyZXR1cm4gMjMwMn19LGdldFZhbHVlU2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnZhbHVlcy5sZW5ndGgvCnRoaXMudGltZXMubGVuZ3RofSxzaGlmdDpmdW5jdGlvbihiKXtpZigwIT09Yilmb3IodmFyIGU9dGhpcy50aW1lcyxoPTAsbj1lLmxlbmd0aDtoIT09bjsrK2gpZVtoXSs9YjtyZXR1cm4gdGhpc30sc2NhbGU6ZnVuY3Rpb24oYil7aWYoMSE9PWIpZm9yKHZhciBlPXRoaXMudGltZXMsaD0wLG49ZS5sZW5ndGg7aCE9PW47KytoKWVbaF0qPWI7cmV0dXJuIHRoaXN9LHRyaW06ZnVuY3Rpb24oYixlKXtmb3IodmFyIGg9dGhpcy50aW1lcyxuPWgubGVuZ3RoLHU9MCx3PW4tMTt1IT09biYmaFt1XTxiOykrK3U7Zm9yKDstMSE9PXcmJmhbd10+ZTspLS13OysrdztpZigwIT09dXx8dyE9PW4pdT49dyYmKHc9TWF0aC5tYXgodywxKSx1PXctMSksYj10aGlzLmdldFZhbHVlU2l6ZSgpLHRoaXMudGltZXM9Z2MuYXJyYXlTbGljZShoLHUsdyksdGhpcy52YWx1ZXM9Z2MuYXJyYXlTbGljZSh0aGlzLnZhbHVlcyx1KmIsdypiKTtyZXR1cm4gdGhpc30sdmFsaWRhdGU6ZnVuY3Rpb24oKXt2YXIgYj0KITAsZT10aGlzLmdldFZhbHVlU2l6ZSgpOzAhPT1lLU1hdGguZmxvb3IoZSkmJihjb25zb2xlLmVycm9yKCJUSFJFRS5LZXlmcmFtZVRyYWNrOiBJbnZhbGlkIHZhbHVlIHNpemUgaW4gdHJhY2suIix0aGlzKSxiPSExKTt2YXIgaD10aGlzLnRpbWVzO2U9dGhpcy52YWx1ZXM7dmFyIG49aC5sZW5ndGg7MD09PW4mJihjb25zb2xlLmVycm9yKCJUSFJFRS5LZXlmcmFtZVRyYWNrOiBUcmFjayBpcyBlbXB0eS4iLHRoaXMpLGI9ITEpO2Zvcih2YXIgdT1udWxsLHc9MDt3IT09bjt3Kyspe3ZhciB6PWhbd107aWYoIm51bWJlciI9PT10eXBlb2YgeiYmaXNOYU4oeikpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IFRpbWUgaXMgbm90IGEgdmFsaWQgbnVtYmVyLiIsdGhpcyx3LHopO2I9ITE7YnJlYWt9aWYobnVsbCE9PXUmJnU+eil7Y29uc29sZS5lcnJvcigiVEhSRUUuS2V5ZnJhbWVUcmFjazogT3V0IG9mIG9yZGVyIGtleXMuIix0aGlzLHcseix1KTtiPSExO2JyZWFrfXU9Cnp9aWYodm9pZCAwIT09ZSYmZ2MuaXNUeXBlZEFycmF5KGUpKWZvcih3PTAsaD1lLmxlbmd0aDt3IT09aDsrK3cpaWYobj1lW3ddLGlzTmFOKG4pKXtjb25zb2xlLmVycm9yKCJUSFJFRS5LZXlmcmFtZVRyYWNrOiBWYWx1ZSBpcyBub3QgYSB2YWxpZCBudW1iZXIuIix0aGlzLHcsbik7Yj0hMTticmVha31yZXR1cm4gYn0sb3B0aW1pemU6ZnVuY3Rpb24oKXtmb3IodmFyIGI9dGhpcy50aW1lcyxlPXRoaXMudmFsdWVzLGg9dGhpcy5nZXRWYWx1ZVNpemUoKSxuPTIzMDI9PT10aGlzLmdldEludGVycG9sYXRpb24oKSx1PTEsdz1iLmxlbmd0aC0xLHo9MTt6PHc7Kyt6KXt2YXIgRT0hMSxIPWJbel07aWYoSCE9PWJbeisxXSYmKDEhPT16fHxIIT09SFswXSkpaWYobilFPSEwO2Vsc2V7dmFyIEk9eipoLE89SS1oLFE9SStoO2ZvcihIPTA7SCE9PWg7KytIKXt2YXIgUj1lW0krSF07aWYoUiE9PWVbTytIXXx8UiE9PWVbUStIXSl7RT0hMDticmVha319fWlmKEUpe2lmKHohPT11KWZvcihiW3VdPQpiW3pdLEU9eipoLEk9dSpoLEg9MDtIIT09aDsrK0gpZVtJK0hdPWVbRStIXTsrK3V9fWlmKDA8dyl7Ylt1XT1iW3ddO0U9dypoO0k9dSpoO2ZvcihIPTA7SCE9PWg7KytIKWVbSStIXT1lW0UrSF07Kyt1fXUhPT1iLmxlbmd0aCYmKHRoaXMudGltZXM9Z2MuYXJyYXlTbGljZShiLDAsdSksdGhpcy52YWx1ZXM9Z2MuYXJyYXlTbGljZShlLDAsdSpoKSk7cmV0dXJuIHRoaXN9LGNsb25lOmZ1bmN0aW9uKCl7dmFyIGI9Z2MuYXJyYXlTbGljZSh0aGlzLnRpbWVzLDApLGU9Z2MuYXJyYXlTbGljZSh0aGlzLnZhbHVlcywwKTtiPW5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMubmFtZSxiLGUpO2IuY3JlYXRlSW50ZXJwb2xhbnQ9dGhpcy5jcmVhdGVJbnRlcnBvbGFudDtyZXR1cm4gYn19KTtvaC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKG1jLnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOm9oLFZhbHVlVHlwZU5hbWU6ImJvb2wiLFZhbHVlQnVmZmVyVHlwZTpBcnJheSwKRGVmYXVsdEludGVycG9sYXRpb246MjMwMCxJbnRlcnBvbGFudEZhY3RvcnlNZXRob2RMaW5lYXI6dm9pZCAwLEludGVycG9sYW50RmFjdG9yeU1ldGhvZFNtb290aDp2b2lkIDB9KTtwaC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKG1jLnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOnBoLFZhbHVlVHlwZU5hbWU6ImNvbG9yIn0pO2ZmLnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUobWMucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6ZmYsVmFsdWVUeXBlTmFtZToibnVtYmVyIn0pO3FoLnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoRGMucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6cWgsaW50ZXJwb2xhdGVfOmZ1bmN0aW9uKGIsZSxoLG4pe3ZhciB1PXRoaXMucmVzdWx0QnVmZmVyLHc9dGhpcy5zYW1wbGVWYWx1ZXMsej10aGlzLnZhbHVlU2l6ZTtiKj16O2U9KGgtZSkvKG4tZSk7Zm9yKGg9Yit6O2IhPT1oO2IrPTQpZi5zbGVycEZsYXQodSwKMCx3LGIteix3LGIsZSk7cmV0dXJuIHV9fSk7cmcucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShtYy5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpyZyxWYWx1ZVR5cGVOYW1lOiJxdWF0ZXJuaW9uIixEZWZhdWx0SW50ZXJwb2xhdGlvbjoyMzAxLEludGVycG9sYW50RmFjdG9yeU1ldGhvZExpbmVhcjpmdW5jdGlvbihiKXtyZXR1cm4gbmV3IHFoKHRoaXMudGltZXMsdGhpcy52YWx1ZXMsdGhpcy5nZXRWYWx1ZVNpemUoKSxiKX0sSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kU21vb3RoOnZvaWQgMH0pO3JoLnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUobWMucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6cmgsVmFsdWVUeXBlTmFtZToic3RyaW5nIixWYWx1ZUJ1ZmZlclR5cGU6QXJyYXksRGVmYXVsdEludGVycG9sYXRpb246MjMwMCxJbnRlcnBvbGFudEZhY3RvcnlNZXRob2RMaW5lYXI6dm9pZCAwLEludGVycG9sYW50RmFjdG9yeU1ldGhvZFNtb290aDp2b2lkIDB9KTsKZ2YucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShtYy5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpnZixWYWx1ZVR5cGVOYW1lOiJ2ZWN0b3IifSk7T2JqZWN0LmFzc2lnbihJYyx7cGFyc2U6ZnVuY3Rpb24oYil7Zm9yKHZhciBlPVtdLGg9Yi50cmFja3Msbj0xLyhiLmZwc3x8MSksdT0wLHc9aC5sZW5ndGg7dSE9PXc7Kyt1KWUucHVzaChicChoW3VdKS5zY2FsZShuKSk7cmV0dXJuIG5ldyBJYyhiLm5hbWUsYi5kdXJhdGlvbixlKX0sdG9KU09OOmZ1bmN0aW9uKGIpe3ZhciBlPVtdLGg9Yi50cmFja3M7Yj17bmFtZTpiLm5hbWUsZHVyYXRpb246Yi5kdXJhdGlvbix0cmFja3M6ZSx1dWlkOmIudXVpZH07Zm9yKHZhciBuPTAsdT1oLmxlbmd0aDtuIT09dTsrK24pZS5wdXNoKG1jLnRvSlNPTihoW25dKSk7cmV0dXJuIGJ9LENyZWF0ZUZyb21Nb3JwaFRhcmdldFNlcXVlbmNlOmZ1bmN0aW9uKGIsZSxoLG4pe2Zvcih2YXIgdT1lLmxlbmd0aCx3PVtdLHo9MDt6PHU7eisrKXt2YXIgRT0KW10sSD1bXTtFLnB1c2goKHordS0xKSV1LHosKHorMSkldSk7SC5wdXNoKDAsMSwwKTt2YXIgST1nYy5nZXRLZXlmcmFtZU9yZGVyKEUpO0U9Z2Muc29ydGVkQXJyYXkoRSwxLEkpO0g9Z2Muc29ydGVkQXJyYXkoSCwxLEkpO258fDAhPT1FWzBdfHwoRS5wdXNoKHUpLEgucHVzaChIWzBdKSk7dy5wdXNoKChuZXcgZmYoIi5tb3JwaFRhcmdldEluZmx1ZW5jZXNbIitlW3pdLm5hbWUrIl0iLEUsSCkpLnNjYWxlKDEvaCkpfXJldHVybiBuZXcgSWMoYiwtMSx3KX0sZmluZEJ5TmFtZTpmdW5jdGlvbihiLGUpe3ZhciBoPWI7QXJyYXkuaXNBcnJheShiKXx8KGg9Yi5nZW9tZXRyeSYmYi5nZW9tZXRyeS5hbmltYXRpb25zfHxiLmFuaW1hdGlvbnMpO2ZvcihiPTA7YjxoLmxlbmd0aDtiKyspaWYoaFtiXS5uYW1lPT09ZSlyZXR1cm4gaFtiXTtyZXR1cm4gbnVsbH0sQ3JlYXRlQ2xpcHNGcm9tTW9ycGhUYXJnZXRTZXF1ZW5jZXM6ZnVuY3Rpb24oYixlLGgpe2Zvcih2YXIgbj17fSx1PS9eKFtcdy1dKj8pKFtcZF0rKSQvLAp3PTAsej1iLmxlbmd0aDt3PHo7dysrKXt2YXIgRT1iW3ddLEg9RS5uYW1lLm1hdGNoKHUpO2lmKEgmJjE8SC5sZW5ndGgpe3ZhciBJPUhbMV07KEg9bltJXSl8fChuW0ldPUg9W10pO0gucHVzaChFKX19Yj1bXTtmb3IoSSBpbiBuKWIucHVzaChJYy5DcmVhdGVGcm9tTW9ycGhUYXJnZXRTZXF1ZW5jZShJLG5bSV0sZSxoKSk7cmV0dXJuIGJ9LHBhcnNlQW5pbWF0aW9uOmZ1bmN0aW9uKGIsZSl7ZnVuY3Rpb24gaChaLGZhLHFhLHJhLGlhKXtpZigwIT09cWEubGVuZ3RoKXt2YXIgdGE9W10sbmE9W107Z2MuZmxhdHRlbkpTT04ocWEsdGEsbmEscmEpOzAhPT10YS5sZW5ndGgmJmlhLnB1c2gobmV3IFooZmEsdGEsbmEpKX19aWYoIWIpcmV0dXJuIGNvbnNvbGUuZXJyb3IoIlRIUkVFLkFuaW1hdGlvbkNsaXA6IE5vIGFuaW1hdGlvbiBpbiBKU09OTG9hZGVyIGRhdGEuIiksbnVsbDt2YXIgbj1bXSx1PWIubmFtZXx8ImRlZmF1bHQiLHc9Yi5sZW5ndGh8fC0xLHo9Yi5mcHN8fDMwO2I9Yi5oaWVyYXJjaHl8fApbXTtmb3IodmFyIEU9MDtFPGIubGVuZ3RoO0UrKyl7dmFyIEg9YltFXS5rZXlzO2lmKEgmJjAhPT1ILmxlbmd0aClpZihIWzBdLm1vcnBoVGFyZ2V0cyl7dz17fTtmb3IodmFyIEk9MDtJPEgubGVuZ3RoO0krKylpZihIW0ldLm1vcnBoVGFyZ2V0cylmb3IodmFyIE89MDtPPEhbSV0ubW9ycGhUYXJnZXRzLmxlbmd0aDtPKyspd1tIW0ldLm1vcnBoVGFyZ2V0c1tPXV09LTE7Zm9yKHZhciBRIGluIHcpe3ZhciBSPVtdLFU9W107Zm9yKE89MDtPIT09SFtJXS5tb3JwaFRhcmdldHMubGVuZ3RoOysrTyl7dmFyIFc9SFtJXTtSLnB1c2goVy50aW1lKTtVLnB1c2goVy5tb3JwaFRhcmdldD09PVE/MTowKX1uLnB1c2gobmV3IGZmKCIubW9ycGhUYXJnZXRJbmZsdWVuY2VbIitRKyJdIixSLFUpKX13PXcubGVuZ3RoKih6fHwxKX1lbHNlIEk9Ii5ib25lc1siK2VbRV0ubmFtZSsiXSIsaChnZixJKyIucG9zaXRpb24iLEgsInBvcyIsbiksaChyZyxJKyIucXVhdGVybmlvbiIsSCwicm90IixuKSwKaChnZixJKyIuc2NhbGUiLEgsInNjbCIsbil9cmV0dXJuIDA9PT1uLmxlbmd0aD9udWxsOm5ldyBJYyh1LHcsbil9fSk7T2JqZWN0LmFzc2lnbihJYy5wcm90b3R5cGUse3Jlc2V0RHVyYXRpb246ZnVuY3Rpb24oKXtmb3IodmFyIGI9MCxlPTAsaD10aGlzLnRyYWNrcy5sZW5ndGg7ZSE9PWg7KytlKXt2YXIgbj10aGlzLnRyYWNrc1tlXTtiPU1hdGgubWF4KGIsbi50aW1lc1tuLnRpbWVzLmxlbmd0aC0xXSl9dGhpcy5kdXJhdGlvbj1iO3JldHVybiB0aGlzfSx0cmltOmZ1bmN0aW9uKCl7Zm9yKHZhciBiPTA7Yjx0aGlzLnRyYWNrcy5sZW5ndGg7YisrKXRoaXMudHJhY2tzW2JdLnRyaW0oMCx0aGlzLmR1cmF0aW9uKTtyZXR1cm4gdGhpc30sdmFsaWRhdGU6ZnVuY3Rpb24oKXtmb3IodmFyIGI9ITAsZT0wO2U8dGhpcy50cmFja3MubGVuZ3RoO2UrKyliPWImJnRoaXMudHJhY2tzW2VdLnZhbGlkYXRlKCk7cmV0dXJuIGJ9LG9wdGltaXplOmZ1bmN0aW9uKCl7Zm9yKHZhciBiPTA7Yjx0aGlzLnRyYWNrcy5sZW5ndGg7YisrKXRoaXMudHJhY2tzW2JdLm9wdGltaXplKCk7CnJldHVybiB0aGlzfSxjbG9uZTpmdW5jdGlvbigpe2Zvcih2YXIgYj1bXSxlPTA7ZTx0aGlzLnRyYWNrcy5sZW5ndGg7ZSsrKWIucHVzaCh0aGlzLnRyYWNrc1tlXS5jbG9uZSgpKTtyZXR1cm4gbmV3IEljKHRoaXMubmFtZSx0aGlzLmR1cmF0aW9uLGIpfX0pO3ZhciB4ZT17ZW5hYmxlZDohMSxmaWxlczp7fSxhZGQ6ZnVuY3Rpb24oYixlKXshMSE9PXRoaXMuZW5hYmxlZCYmKHRoaXMuZmlsZXNbYl09ZSl9LGdldDpmdW5jdGlvbihiKXtpZighMSE9PXRoaXMuZW5hYmxlZClyZXR1cm4gdGhpcy5maWxlc1tiXX0scmVtb3ZlOmZ1bmN0aW9uKGIpe2RlbGV0ZSB0aGlzLmZpbGVzW2JdfSxjbGVhcjpmdW5jdGlvbigpe3RoaXMuZmlsZXM9e319fSxBYz1uZXcgRGksYWQ9e307T2JqZWN0LmFzc2lnbihVYy5wcm90b3R5cGUse2xvYWQ6ZnVuY3Rpb24oYixlLGgsbil7dm9pZCAwPT09YiYmKGI9IiIpO3ZvaWQgMCE9PXRoaXMucGF0aCYmKGI9dGhpcy5wYXRoK2IpO2I9dGhpcy5tYW5hZ2VyLnJlc29sdmVVUkwoYik7CnZhciB1PXRoaXMsdz14ZS5nZXQoYik7aWYodm9pZCAwIT09dylyZXR1cm4gdS5tYW5hZ2VyLml0ZW1TdGFydChiKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZSYmZSh3KTt1Lm1hbmFnZXIuaXRlbUVuZChiKX0sMCksdztpZih2b2lkIDAhPT1hZFtiXSlhZFtiXS5wdXNoKHtvbkxvYWQ6ZSxvblByb2dyZXNzOmgsb25FcnJvcjpufSk7ZWxzZXt2YXIgej1iLm1hdGNoKC9eZGF0YTooLio/KSg7YmFzZTY0KT8sKC4qKSQvKTtpZih6KXtoPXpbMV07dmFyIEU9ISF6WzJdO3o9elszXTt6PWRlY29kZVVSSUNvbXBvbmVudCh6KTtFJiYoej1hdG9iKHopKTt0cnl7dmFyIEg9KHRoaXMucmVzcG9uc2VUeXBlfHwiIikudG9Mb3dlckNhc2UoKTtzd2l0Y2goSCl7Y2FzZSAiYXJyYXlidWZmZXIiOmNhc2UgImJsb2IiOnZhciBJPW5ldyBVaW50OEFycmF5KHoubGVuZ3RoKTtmb3IoRT0wO0U8ei5sZW5ndGg7RSsrKUlbRV09ei5jaGFyQ29kZUF0KEUpO3ZhciBPPSJibG9iIj09PUg/bmV3IEJsb2IoW0kuYnVmZmVyXSwKe3R5cGU6aH0pOkkuYnVmZmVyO2JyZWFrO2Nhc2UgImRvY3VtZW50IjpPPShuZXcgRE9NUGFyc2VyKS5wYXJzZUZyb21TdHJpbmcoeixoKTticmVhaztjYXNlICJqc29uIjpPPUpTT04ucGFyc2Uoeik7YnJlYWs7ZGVmYXVsdDpPPXp9c2V0VGltZW91dChmdW5jdGlvbigpe2UmJmUoTyk7dS5tYW5hZ2VyLml0ZW1FbmQoYil9LDApfWNhdGNoKFIpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXtuJiZuKFIpO3UubWFuYWdlci5pdGVtRXJyb3IoYik7dS5tYW5hZ2VyLml0ZW1FbmQoYil9LDApfX1lbHNle2FkW2JdPVtdO2FkW2JdLnB1c2goe29uTG9hZDplLG9uUHJvZ3Jlc3M6aCxvbkVycm9yOm59KTt2YXIgUT1uZXcgWE1MSHR0cFJlcXVlc3Q7US5vcGVuKCJHRVQiLGIsITApO1EuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsZnVuY3Rpb24oUil7dmFyIFU9dGhpcy5yZXNwb25zZTt4ZS5hZGQoYixVKTt2YXIgVz1hZFtiXTtkZWxldGUgYWRbYl07aWYoMjAwPT09dGhpcy5zdGF0dXN8fDA9PT10aGlzLnN0YXR1cyl7MD09PQp0aGlzLnN0YXR1cyYmY29uc29sZS53YXJuKCJUSFJFRS5GaWxlTG9hZGVyOiBIVFRQIFN0YXR1cyAwIHJlY2VpdmVkLiIpO2Zvcih2YXIgWj0wLGZhPVcubGVuZ3RoO1o8ZmE7WisrKXt2YXIgcWE9V1taXTtpZihxYS5vbkxvYWQpcWEub25Mb2FkKFUpfX1lbHNle1o9MDtmb3IoZmE9Vy5sZW5ndGg7WjxmYTtaKyspaWYocWE9V1taXSxxYS5vbkVycm9yKXFhLm9uRXJyb3IoUik7dS5tYW5hZ2VyLml0ZW1FcnJvcihiKX11Lm1hbmFnZXIuaXRlbUVuZChiKX0sITEpO1EuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLGZ1bmN0aW9uKFIpe2Zvcih2YXIgVT1hZFtiXSxXPTAsWj1VLmxlbmd0aDtXPFo7VysrKXt2YXIgZmE9VVtXXTtpZihmYS5vblByb2dyZXNzKWZhLm9uUHJvZ3Jlc3MoUil9fSwhMSk7US5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsZnVuY3Rpb24oUil7dmFyIFU9YWRbYl07ZGVsZXRlIGFkW2JdO2Zvcih2YXIgVz0wLFo9VS5sZW5ndGg7VzxaO1crKyl7dmFyIGZhPVVbV107CmlmKGZhLm9uRXJyb3IpZmEub25FcnJvcihSKX11Lm1hbmFnZXIuaXRlbUVycm9yKGIpO3UubWFuYWdlci5pdGVtRW5kKGIpfSwhMSk7US5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIsZnVuY3Rpb24oUil7dmFyIFU9YWRbYl07ZGVsZXRlIGFkW2JdO2Zvcih2YXIgVz0wLFo9VS5sZW5ndGg7VzxaO1crKyl7dmFyIGZhPVVbV107aWYoZmEub25FcnJvcilmYS5vbkVycm9yKFIpfXUubWFuYWdlci5pdGVtRXJyb3IoYik7dS5tYW5hZ2VyLml0ZW1FbmQoYil9LCExKTt2b2lkIDAhPT10aGlzLnJlc3BvbnNlVHlwZSYmKFEucmVzcG9uc2VUeXBlPXRoaXMucmVzcG9uc2VUeXBlKTt2b2lkIDAhPT10aGlzLndpdGhDcmVkZW50aWFscyYmKFEud2l0aENyZWRlbnRpYWxzPXRoaXMud2l0aENyZWRlbnRpYWxzKTtRLm92ZXJyaWRlTWltZVR5cGUmJlEub3ZlcnJpZGVNaW1lVHlwZSh2b2lkIDAhPT10aGlzLm1pbWVUeXBlP3RoaXMubWltZVR5cGU6InRleHQvcGxhaW4iKTtmb3IoRSBpbiB0aGlzLnJlcXVlc3RIZWFkZXIpUS5zZXRSZXF1ZXN0SGVhZGVyKEUsCnRoaXMucmVxdWVzdEhlYWRlcltFXSk7US5zZW5kKG51bGwpfXUubWFuYWdlci5pdGVtU3RhcnQoYik7cmV0dXJuIFF9fSxzZXRQYXRoOmZ1bmN0aW9uKGIpe3RoaXMucGF0aD1iO3JldHVybiB0aGlzfSxzZXRSZXNwb25zZVR5cGU6ZnVuY3Rpb24oYil7dGhpcy5yZXNwb25zZVR5cGU9YjtyZXR1cm4gdGhpc30sc2V0V2l0aENyZWRlbnRpYWxzOmZ1bmN0aW9uKGIpe3RoaXMud2l0aENyZWRlbnRpYWxzPWI7cmV0dXJuIHRoaXN9LHNldE1pbWVUeXBlOmZ1bmN0aW9uKGIpe3RoaXMubWltZVR5cGU9YjtyZXR1cm4gdGhpc30sc2V0UmVxdWVzdEhlYWRlcjpmdW5jdGlvbihiKXt0aGlzLnJlcXVlc3RIZWFkZXI9YjtyZXR1cm4gdGhpc319KTtPYmplY3QuYXNzaWduKEVsLnByb3RvdHlwZSx7bG9hZDpmdW5jdGlvbihiLGUsaCxuKXt2YXIgdT10aGlzLHc9bmV3IFVjKHUubWFuYWdlcik7dy5zZXRQYXRoKHUucGF0aCk7dy5sb2FkKGIsZnVuY3Rpb24oeil7ZSh1LnBhcnNlKEpTT04ucGFyc2UoeikpKX0sCmgsbil9LHBhcnNlOmZ1bmN0aW9uKGIpe2Zvcih2YXIgZT1bXSxoPTA7aDxiLmxlbmd0aDtoKyspe3ZhciBuPUljLnBhcnNlKGJbaF0pO2UucHVzaChuKX1yZXR1cm4gZX0sc2V0UGF0aDpmdW5jdGlvbihiKXt0aGlzLnBhdGg9YjtyZXR1cm4gdGhpc319KTtPYmplY3QuYXNzaWduKEZsLnByb3RvdHlwZSx7bG9hZDpmdW5jdGlvbihiLGUsaCxuKXtmdW5jdGlvbiB1KFIpe0gubG9hZChiW1JdLGZ1bmN0aW9uKFUpe1U9dy5fcGFyc2VyKFUsITApO3pbUl09e3dpZHRoOlUud2lkdGgsaGVpZ2h0OlUuaGVpZ2h0LGZvcm1hdDpVLmZvcm1hdCxtaXBtYXBzOlUubWlwbWFwc307SSs9MTs2PT09SSYmKDE9PT1VLm1pcG1hcENvdW50JiYoRS5taW5GaWx0ZXI9MTAwNiksRS5mb3JtYXQ9VS5mb3JtYXQsRS5uZWVkc1VwZGF0ZT0hMCxlJiZlKEUpKX0saCxuKX12YXIgdz10aGlzLHo9W10sRT1uZXcgU2U7RS5pbWFnZT16O3ZhciBIPW5ldyBVYyh0aGlzLm1hbmFnZXIpO0guc2V0UGF0aCh0aGlzLnBhdGgpOwpILnNldFJlc3BvbnNlVHlwZSgiYXJyYXlidWZmZXIiKTtpZihBcnJheS5pc0FycmF5KGIpKWZvcih2YXIgST0wLE89MCxRPWIubGVuZ3RoO088UTsrK08pdShPKTtlbHNlIEgubG9hZChiLGZ1bmN0aW9uKFIpe1I9dy5fcGFyc2VyKFIsITApO2lmKFIuaXNDdWJlbWFwKWZvcih2YXIgVT1SLm1pcG1hcHMubGVuZ3RoL1IubWlwbWFwQ291bnQsVz0wO1c8VTtXKyspe3pbV109e21pcG1hcHM6W119O2Zvcih2YXIgWj0wO1o8Ui5taXBtYXBDb3VudDtaKyspeltXXS5taXBtYXBzLnB1c2goUi5taXBtYXBzW1cqUi5taXBtYXBDb3VudCtaXSkseltXXS5mb3JtYXQ9Ui5mb3JtYXQseltXXS53aWR0aD1SLndpZHRoLHpbV10uaGVpZ2h0PVIuaGVpZ2h0fWVsc2UgRS5pbWFnZS53aWR0aD1SLndpZHRoLEUuaW1hZ2UuaGVpZ2h0PVIuaGVpZ2h0LEUubWlwbWFwcz1SLm1pcG1hcHM7MT09PVIubWlwbWFwQ291bnQmJihFLm1pbkZpbHRlcj0xMDA2KTtFLmZvcm1hdD1SLmZvcm1hdDtFLm5lZWRzVXBkYXRlPQohMDtlJiZlKEUpfSxoLG4pO3JldHVybiBFfSxzZXRQYXRoOmZ1bmN0aW9uKGIpe3RoaXMucGF0aD1iO3JldHVybiB0aGlzfX0pO09iamVjdC5hc3NpZ24oRWkucHJvdG90eXBlLHtsb2FkOmZ1bmN0aW9uKGIsZSxoLG4pe3ZhciB1PXRoaXMsdz1uZXcgdCx6PW5ldyBVYyh0aGlzLm1hbmFnZXIpO3ouc2V0UmVzcG9uc2VUeXBlKCJhcnJheWJ1ZmZlciIpO3ouc2V0UGF0aCh0aGlzLnBhdGgpO3oubG9hZChiLGZ1bmN0aW9uKEUpe2lmKEU9dS5fcGFyc2VyKEUpKXZvaWQgMCE9PUUuaW1hZ2U/dy5pbWFnZT1FLmltYWdlOnZvaWQgMCE9PUUuZGF0YSYmKHcuaW1hZ2Uud2lkdGg9RS53aWR0aCx3LmltYWdlLmhlaWdodD1FLmhlaWdodCx3LmltYWdlLmRhdGE9RS5kYXRhKSx3LndyYXBTPXZvaWQgMCE9PUUud3JhcFM/RS53cmFwUzoxMDAxLHcud3JhcFQ9dm9pZCAwIT09RS53cmFwVD9FLndyYXBUOjEwMDEsdy5tYWdGaWx0ZXI9dm9pZCAwIT09RS5tYWdGaWx0ZXI/RS5tYWdGaWx0ZXI6MTAwNiwKdy5taW5GaWx0ZXI9dm9pZCAwIT09RS5taW5GaWx0ZXI/RS5taW5GaWx0ZXI6MTAwOCx3LmFuaXNvdHJvcHk9dm9pZCAwIT09RS5hbmlzb3Ryb3B5P0UuYW5pc290cm9weToxLHZvaWQgMCE9PUUuZm9ybWF0JiYody5mb3JtYXQ9RS5mb3JtYXQpLHZvaWQgMCE9PUUudHlwZSYmKHcudHlwZT1FLnR5cGUpLHZvaWQgMCE9PUUubWlwbWFwcyYmKHcubWlwbWFwcz1FLm1pcG1hcHMpLDE9PT1FLm1pcG1hcENvdW50JiYody5taW5GaWx0ZXI9MTAwNiksdy5uZWVkc1VwZGF0ZT0hMCxlJiZlKHcsRSl9LGgsbik7cmV0dXJuIHd9LHNldFBhdGg6ZnVuY3Rpb24oYil7dGhpcy5wYXRoPWI7cmV0dXJuIHRoaXN9fSk7T2JqZWN0LmFzc2lnbihzZy5wcm90b3R5cGUse2Nyb3NzT3JpZ2luOiJhbm9ueW1vdXMiLGxvYWQ6ZnVuY3Rpb24oYixlLGgsbil7ZnVuY3Rpb24gdSgpe0gucmVtb3ZlRXZlbnRMaXN0ZW5lcigibG9hZCIsdSwhMSk7SC5yZW1vdmVFdmVudExpc3RlbmVyKCJlcnJvciIsdywhMSk7CnhlLmFkZChiLHRoaXMpO2UmJmUodGhpcyk7ei5tYW5hZ2VyLml0ZW1FbmQoYil9ZnVuY3Rpb24gdyhJKXtILnJlbW92ZUV2ZW50TGlzdGVuZXIoImxvYWQiLHUsITEpO0gucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZXJyb3IiLHcsITEpO24mJm4oSSk7ei5tYW5hZ2VyLml0ZW1FcnJvcihiKTt6Lm1hbmFnZXIuaXRlbUVuZChiKX12b2lkIDA9PT1iJiYoYj0iIik7dm9pZCAwIT09dGhpcy5wYXRoJiYoYj10aGlzLnBhdGgrYik7Yj10aGlzLm1hbmFnZXIucmVzb2x2ZVVSTChiKTt2YXIgej10aGlzLEU9eGUuZ2V0KGIpO2lmKHZvaWQgMCE9PUUpcmV0dXJuIHoubWFuYWdlci5pdGVtU3RhcnQoYiksc2V0VGltZW91dChmdW5jdGlvbigpe2UmJmUoRSk7ei5tYW5hZ2VyLml0ZW1FbmQoYil9LDApLEU7dmFyIEg9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiwiaW1nIik7SC5hZGRFdmVudExpc3RlbmVyKCJsb2FkIix1LCExKTtILmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIiwKdywhMSk7ImRhdGE6IiE9PWIuc3Vic3RyKDAsNSkmJnZvaWQgMCE9PXRoaXMuY3Jvc3NPcmlnaW4mJihILmNyb3NzT3JpZ2luPXRoaXMuY3Jvc3NPcmlnaW4pO3oubWFuYWdlci5pdGVtU3RhcnQoYik7SC5zcmM9YjtyZXR1cm4gSH0sc2V0Q3Jvc3NPcmlnaW46ZnVuY3Rpb24oYil7dGhpcy5jcm9zc09yaWdpbj1iO3JldHVybiB0aGlzfSxzZXRQYXRoOmZ1bmN0aW9uKGIpe3RoaXMucGF0aD1iO3JldHVybiB0aGlzfX0pO09iamVjdC5hc3NpZ24oRmkucHJvdG90eXBlLHtjcm9zc09yaWdpbjoiYW5vbnltb3VzIixsb2FkOmZ1bmN0aW9uKGIsZSxoLG4pe2Z1bmN0aW9uIHUoSCl7ei5sb2FkKGJbSF0sZnVuY3Rpb24oSSl7dy5pbWFnZXNbSF09STtFKys7Nj09PUUmJih3Lm5lZWRzVXBkYXRlPSEwLGUmJmUodykpfSx2b2lkIDAsbil9dmFyIHc9bmV3IHVkLHo9bmV3IHNnKHRoaXMubWFuYWdlcik7ei5zZXRDcm9zc09yaWdpbih0aGlzLmNyb3NzT3JpZ2luKTt6LnNldFBhdGgodGhpcy5wYXRoKTsKdmFyIEU9MDtmb3IoaD0wO2g8Yi5sZW5ndGg7KytoKXUoaCk7cmV0dXJuIHd9LHNldENyb3NzT3JpZ2luOmZ1bmN0aW9uKGIpe3RoaXMuY3Jvc3NPcmlnaW49YjtyZXR1cm4gdGhpc30sc2V0UGF0aDpmdW5jdGlvbihiKXt0aGlzLnBhdGg9YjtyZXR1cm4gdGhpc319KTtPYmplY3QuYXNzaWduKHNoLnByb3RvdHlwZSx7Y3Jvc3NPcmlnaW46ImFub255bW91cyIsbG9hZDpmdW5jdGlvbihiLGUsaCxuKXt2YXIgdT1uZXcgayx3PW5ldyBzZyh0aGlzLm1hbmFnZXIpO3cuc2V0Q3Jvc3NPcmlnaW4odGhpcy5jcm9zc09yaWdpbik7dy5zZXRQYXRoKHRoaXMucGF0aCk7dy5sb2FkKGIsZnVuY3Rpb24oeil7dS5pbWFnZT16O3o9MDxiLnNlYXJjaCgvXC5qcGU/ZygkfFw/KS9pKXx8MD09PWIuc2VhcmNoKC9eZGF0YTppbWFnZVwvanBlZy8pO3UuZm9ybWF0PXo/MTAyMjoxMDIzO3UubmVlZHNVcGRhdGU9ITA7dm9pZCAwIT09ZSYmZSh1KX0saCxuKTtyZXR1cm4gdX0sc2V0Q3Jvc3NPcmlnaW46ZnVuY3Rpb24oYil7dGhpcy5jcm9zc09yaWdpbj0KYjtyZXR1cm4gdGhpc30sc2V0UGF0aDpmdW5jdGlvbihiKXt0aGlzLnBhdGg9YjtyZXR1cm4gdGhpc319KTtPYmplY3QuYXNzaWduKGViLnByb3RvdHlwZSx7Z2V0UG9pbnQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkN1cnZlOiAuZ2V0UG9pbnQoKSBub3QgaW1wbGVtZW50ZWQuIik7cmV0dXJuIG51bGx9LGdldFBvaW50QXQ6ZnVuY3Rpb24oYixlKXtiPXRoaXMuZ2V0VXRvVG1hcHBpbmcoYik7cmV0dXJuIHRoaXMuZ2V0UG9pbnQoYixlKX0sZ2V0UG9pbnRzOmZ1bmN0aW9uKGIpe3ZvaWQgMD09PWImJihiPTUpO2Zvcih2YXIgZT1bXSxoPTA7aDw9YjtoKyspZS5wdXNoKHRoaXMuZ2V0UG9pbnQoaC9iKSk7cmV0dXJuIGV9LGdldFNwYWNlZFBvaW50czpmdW5jdGlvbihiKXt2b2lkIDA9PT1iJiYoYj01KTtmb3IodmFyIGU9W10saD0wO2g8PWI7aCsrKWUucHVzaCh0aGlzLmdldFBvaW50QXQoaC9iKSk7cmV0dXJuIGV9LGdldExlbmd0aDpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0TGVuZ3RocygpOwpyZXR1cm4gYltiLmxlbmd0aC0xXX0sZ2V0TGVuZ3RoczpmdW5jdGlvbihiKXt2b2lkIDA9PT1iJiYoYj10aGlzLmFyY0xlbmd0aERpdmlzaW9ucyk7aWYodGhpcy5jYWNoZUFyY0xlbmd0aHMmJnRoaXMuY2FjaGVBcmNMZW5ndGhzLmxlbmd0aD09PWIrMSYmIXRoaXMubmVlZHNVcGRhdGUpcmV0dXJuIHRoaXMuY2FjaGVBcmNMZW5ndGhzO3RoaXMubmVlZHNVcGRhdGU9ITE7dmFyIGU9W10saD10aGlzLmdldFBvaW50KDApLG4sdT0wO2UucHVzaCgwKTtmb3Iobj0xO248PWI7bisrKXt2YXIgdz10aGlzLmdldFBvaW50KG4vYik7dSs9dy5kaXN0YW5jZVRvKGgpO2UucHVzaCh1KTtoPXd9cmV0dXJuIHRoaXMuY2FjaGVBcmNMZW5ndGhzPWV9LHVwZGF0ZUFyY0xlbmd0aHM6ZnVuY3Rpb24oKXt0aGlzLm5lZWRzVXBkYXRlPSEwO3RoaXMuZ2V0TGVuZ3RocygpfSxnZXRVdG9UbWFwcGluZzpmdW5jdGlvbihiLGUpe3ZhciBoPXRoaXMuZ2V0TGVuZ3RocygpLG49aC5sZW5ndGg7ZT1lP2U6YioKaFtuLTFdO2Zvcih2YXIgdT0wLHc9bi0xLHo7dTw9dzspaWYoYj1NYXRoLmZsb29yKHUrKHctdSkvMiksej1oW2JdLWUsMD56KXU9YisxO2Vsc2UgaWYoMDx6KXc9Yi0xO2Vsc2V7dz1iO2JyZWFrfWI9dztpZihoW2JdPT09ZSlyZXR1cm4gYi8obi0xKTt1PWhbYl07cmV0dXJuKGIrKGUtdSkvKGhbYisxXS11KSkvKG4tMSl9LGdldFRhbmdlbnQ6ZnVuY3Rpb24oYil7dmFyIGU9Yi0xRS00O2IrPTFFLTQ7MD5lJiYoZT0wKTsxPGImJihiPTEpO2U9dGhpcy5nZXRQb2ludChlKTtyZXR1cm4gdGhpcy5nZXRQb2ludChiKS5jbG9uZSgpLnN1YihlKS5ub3JtYWxpemUoKX0sZ2V0VGFuZ2VudEF0OmZ1bmN0aW9uKGIpe2I9dGhpcy5nZXRVdG9UbWFwcGluZyhiKTtyZXR1cm4gdGhpcy5nZXRUYW5nZW50KGIpfSxjb21wdXRlRnJlbmV0RnJhbWVzOmZ1bmN0aW9uKGIsZSl7dmFyIGg9bmV3IGcsbj1bXSx1PVtdLHc9W10sej1uZXcgZyxFPW5ldyBDLEg7Zm9yKEg9MDtIPD1iO0grKyl7dmFyIEk9CkgvYjtuW0hdPXRoaXMuZ2V0VGFuZ2VudEF0KEkpO25bSF0ubm9ybWFsaXplKCl9dVswXT1uZXcgZzt3WzBdPW5ldyBnO0g9TnVtYmVyLk1BWF9WQUxVRTtJPU1hdGguYWJzKG5bMF0ueCk7dmFyIE89TWF0aC5hYnMoblswXS55KSxRPU1hdGguYWJzKG5bMF0ueik7STw9SCYmKEg9SSxoLnNldCgxLDAsMCkpO088PUgmJihIPU8saC5zZXQoMCwxLDApKTtRPD1IJiZoLnNldCgwLDAsMSk7ei5jcm9zc1ZlY3RvcnMoblswXSxoKS5ub3JtYWxpemUoKTt1WzBdLmNyb3NzVmVjdG9ycyhuWzBdLHopO3dbMF0uY3Jvc3NWZWN0b3JzKG5bMF0sdVswXSk7Zm9yKEg9MTtIPD1iO0grKyl1W0hdPXVbSC0xXS5jbG9uZSgpLHdbSF09d1tILTFdLmNsb25lKCksei5jcm9zc1ZlY3RvcnMobltILTFdLG5bSF0pLHoubGVuZ3RoKCk+TnVtYmVyLkVQU0lMT04mJih6Lm5vcm1hbGl6ZSgpLGg9TWF0aC5hY29zKG9iLmNsYW1wKG5bSC0xXS5kb3QobltIXSksLTEsMSkpLHVbSF0uYXBwbHlNYXRyaXg0KEUubWFrZVJvdGF0aW9uQXhpcyh6LApoKSkpLHdbSF0uY3Jvc3NWZWN0b3JzKG5bSF0sdVtIXSk7aWYoITA9PT1lKWZvcihoPU1hdGguYWNvcyhvYi5jbGFtcCh1WzBdLmRvdCh1W2JdKSwtMSwxKSksaC89YiwwPG5bMF0uZG90KHouY3Jvc3NWZWN0b3JzKHVbMF0sdVtiXSkpJiYoaD0taCksSD0xO0g8PWI7SCsrKXVbSF0uYXBwbHlNYXRyaXg0KEUubWFrZVJvdGF0aW9uQXhpcyhuW0hdLGgqSCkpLHdbSF0uY3Jvc3NWZWN0b3JzKG5bSF0sdVtIXSk7cmV0dXJue3RhbmdlbnRzOm4sbm9ybWFsczp1LGJpbm9ybWFsczp3fX0sY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9LGNvcHk6ZnVuY3Rpb24oYil7dGhpcy5hcmNMZW5ndGhEaXZpc2lvbnM9Yi5hcmNMZW5ndGhEaXZpc2lvbnM7cmV0dXJuIHRoaXN9LHRvSlNPTjpmdW5jdGlvbigpe3ZhciBiPXttZXRhZGF0YTp7dmVyc2lvbjo0LjUsdHlwZToiQ3VydmUiLGdlbmVyYXRvcjoiQ3VydmUudG9KU09OIn19O2IuYXJjTGVuZ3RoRGl2aXNpb25zPQp0aGlzLmFyY0xlbmd0aERpdmlzaW9ucztiLnR5cGU9dGhpcy50eXBlO3JldHVybiBifSxmcm9tSlNPTjpmdW5jdGlvbihiKXt0aGlzLmFyY0xlbmd0aERpdmlzaW9ucz1iLmFyY0xlbmd0aERpdmlzaW9ucztyZXR1cm4gdGhpc319KTtFYy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlYi5wcm90b3R5cGUpO0VjLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1FYztFYy5wcm90b3R5cGUuaXNFbGxpcHNlQ3VydmU9ITA7RWMucHJvdG90eXBlLmdldFBvaW50PWZ1bmN0aW9uKGIsZSl7ZT1lfHxuZXcgZDtmb3IodmFyIGg9MipNYXRoLlBJLG49dGhpcy5hRW5kQW5nbGUtdGhpcy5hU3RhcnRBbmdsZSx1PU1hdGguYWJzKG4pPE51bWJlci5FUFNJTE9OOzA+bjspbis9aDtmb3IoO24+aDspbi09aDtuPE51bWJlci5FUFNJTE9OJiYobj11PzA6aCk7ITAhPT10aGlzLmFDbG9ja3dpc2V8fHV8fChuPW49PT1oPy1oOm4taCk7aD10aGlzLmFTdGFydEFuZ2xlK2IqbjtiPXRoaXMuYVgrdGhpcy54UmFkaXVzKgpNYXRoLmNvcyhoKTt2YXIgdz10aGlzLmFZK3RoaXMueVJhZGl1cypNYXRoLnNpbihoKTswIT09dGhpcy5hUm90YXRpb24mJihoPU1hdGguY29zKHRoaXMuYVJvdGF0aW9uKSxuPU1hdGguc2luKHRoaXMuYVJvdGF0aW9uKSx1PWItdGhpcy5hWCx3LT10aGlzLmFZLGI9dSpoLXcqbit0aGlzLmFYLHc9dSpuK3cqaCt0aGlzLmFZKTtyZXR1cm4gZS5zZXQoYix3KX07RWMucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oYil7ZWIucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLGIpO3RoaXMuYVg9Yi5hWDt0aGlzLmFZPWIuYVk7dGhpcy54UmFkaXVzPWIueFJhZGl1czt0aGlzLnlSYWRpdXM9Yi55UmFkaXVzO3RoaXMuYVN0YXJ0QW5nbGU9Yi5hU3RhcnRBbmdsZTt0aGlzLmFFbmRBbmdsZT1iLmFFbmRBbmdsZTt0aGlzLmFDbG9ja3dpc2U9Yi5hQ2xvY2t3aXNlO3RoaXMuYVJvdGF0aW9uPWIuYVJvdGF0aW9uO3JldHVybiB0aGlzfTtFYy5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7dmFyIGI9CmViLnByb3RvdHlwZS50b0pTT04uY2FsbCh0aGlzKTtiLmFYPXRoaXMuYVg7Yi5hWT10aGlzLmFZO2IueFJhZGl1cz10aGlzLnhSYWRpdXM7Yi55UmFkaXVzPXRoaXMueVJhZGl1cztiLmFTdGFydEFuZ2xlPXRoaXMuYVN0YXJ0QW5nbGU7Yi5hRW5kQW5nbGU9dGhpcy5hRW5kQW5nbGU7Yi5hQ2xvY2t3aXNlPXRoaXMuYUNsb2Nrd2lzZTtiLmFSb3RhdGlvbj10aGlzLmFSb3RhdGlvbjtyZXR1cm4gYn07RWMucHJvdG90eXBlLmZyb21KU09OPWZ1bmN0aW9uKGIpe2ViLnByb3RvdHlwZS5mcm9tSlNPTi5jYWxsKHRoaXMsYik7dGhpcy5hWD1iLmFYO3RoaXMuYVk9Yi5hWTt0aGlzLnhSYWRpdXM9Yi54UmFkaXVzO3RoaXMueVJhZGl1cz1iLnlSYWRpdXM7dGhpcy5hU3RhcnRBbmdsZT1iLmFTdGFydEFuZ2xlO3RoaXMuYUVuZEFuZ2xlPWIuYUVuZEFuZ2xlO3RoaXMuYUNsb2Nrd2lzZT1iLmFDbG9ja3dpc2U7dGhpcy5hUm90YXRpb249Yi5hUm90YXRpb247cmV0dXJuIHRoaXN9O2hmLnByb3RvdHlwZT0KT2JqZWN0LmNyZWF0ZShFYy5wcm90b3R5cGUpO2hmLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1oZjtoZi5wcm90b3R5cGUuaXNBcmNDdXJ2ZT0hMDt2YXIgSGg9bmV3IGcsZGo9bmV3IEdpLGVqPW5ldyBHaSxmaj1uZXcgR2k7cmMucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZWIucHJvdG90eXBlKTtyYy5wcm90b3R5cGUuY29uc3RydWN0b3I9cmM7cmMucHJvdG90eXBlLmlzQ2F0bXVsbFJvbUN1cnZlMz0hMDtyYy5wcm90b3R5cGUuZ2V0UG9pbnQ9ZnVuY3Rpb24oYixlKXtlPWV8fG5ldyBnO3ZhciBoPXRoaXMucG9pbnRzLG49aC5sZW5ndGg7Yio9bi0odGhpcy5jbG9zZWQ/MDoxKTt2YXIgdT1NYXRoLmZsb29yKGIpO2ItPXU7dGhpcy5jbG9zZWQ/dSs9MDx1PzA6KE1hdGguZmxvb3IoTWF0aC5hYnModSkvbikrMSkqbjowPT09YiYmdT09PW4tMSYmKHU9bi0yLGI9MSk7aWYodGhpcy5jbG9zZWR8fDA8dSl2YXIgdz1oWyh1LTEpJW5dO2Vsc2UgSGguc3ViVmVjdG9ycyhoWzBdLGhbMV0pLmFkZChoWzBdKSwKdz1IaDt2YXIgej1oW3Ulbl07dmFyIEU9aFsodSsxKSVuXTt0aGlzLmNsb3NlZHx8dSsyPG4/aD1oWyh1KzIpJW5dOihIaC5zdWJWZWN0b3JzKGhbbi0xXSxoW24tMl0pLmFkZChoW24tMV0pLGg9SGgpO2lmKCJjZW50cmlwZXRhbCI9PT10aGlzLmN1cnZlVHlwZXx8ImNob3JkYWwiPT09dGhpcy5jdXJ2ZVR5cGUpe3ZhciBIPSJjaG9yZGFsIj09PXRoaXMuY3VydmVUeXBlPy41Oi4yNTtuPU1hdGgucG93KHcuZGlzdGFuY2VUb1NxdWFyZWQoeiksSCk7dT1NYXRoLnBvdyh6LmRpc3RhbmNlVG9TcXVhcmVkKEUpLEgpO0g9TWF0aC5wb3coRS5kaXN0YW5jZVRvU3F1YXJlZChoKSxIKTsxRS00PnUmJih1PTEpOzFFLTQ+biYmKG49dSk7MUUtND5IJiYoSD11KTtkai5pbml0Tm9udW5pZm9ybUNhdG11bGxSb20ody54LHoueCxFLngsaC54LG4sdSxIKTtlai5pbml0Tm9udW5pZm9ybUNhdG11bGxSb20ody55LHoueSxFLnksaC55LG4sdSxIKTtmai5pbml0Tm9udW5pZm9ybUNhdG11bGxSb20ody56LAp6LnosRS56LGgueixuLHUsSCl9ZWxzZSJjYXRtdWxscm9tIj09PXRoaXMuY3VydmVUeXBlJiYoZGouaW5pdENhdG11bGxSb20ody54LHoueCxFLngsaC54LHRoaXMudGVuc2lvbiksZWouaW5pdENhdG11bGxSb20ody55LHoueSxFLnksaC55LHRoaXMudGVuc2lvbiksZmouaW5pdENhdG11bGxSb20ody56LHoueixFLnosaC56LHRoaXMudGVuc2lvbikpO2Uuc2V0KGRqLmNhbGMoYiksZWouY2FsYyhiKSxmai5jYWxjKGIpKTtyZXR1cm4gZX07cmMucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oYil7ZWIucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLGIpO3RoaXMucG9pbnRzPVtdO2Zvcih2YXIgZT0wLGg9Yi5wb2ludHMubGVuZ3RoO2U8aDtlKyspdGhpcy5wb2ludHMucHVzaChiLnBvaW50c1tlXS5jbG9uZSgpKTt0aGlzLmNsb3NlZD1iLmNsb3NlZDt0aGlzLmN1cnZlVHlwZT1iLmN1cnZlVHlwZTt0aGlzLnRlbnNpb249Yi50ZW5zaW9uO3JldHVybiB0aGlzfTtyYy5wcm90b3R5cGUudG9KU09OPQpmdW5jdGlvbigpe3ZhciBiPWViLnByb3RvdHlwZS50b0pTT04uY2FsbCh0aGlzKTtiLnBvaW50cz1bXTtmb3IodmFyIGU9MCxoPXRoaXMucG9pbnRzLmxlbmd0aDtlPGg7ZSsrKWIucG9pbnRzLnB1c2godGhpcy5wb2ludHNbZV0udG9BcnJheSgpKTtiLmNsb3NlZD10aGlzLmNsb3NlZDtiLmN1cnZlVHlwZT10aGlzLmN1cnZlVHlwZTtiLnRlbnNpb249dGhpcy50ZW5zaW9uO3JldHVybiBifTtyYy5wcm90b3R5cGUuZnJvbUpTT049ZnVuY3Rpb24oYil7ZWIucHJvdG90eXBlLmZyb21KU09OLmNhbGwodGhpcyxiKTt0aGlzLnBvaW50cz1bXTtmb3IodmFyIGU9MCxoPWIucG9pbnRzLmxlbmd0aDtlPGg7ZSsrKXt2YXIgbj1iLnBvaW50c1tlXTt0aGlzLnBvaW50cy5wdXNoKChuZXcgZykuZnJvbUFycmF5KG4pKX10aGlzLmNsb3NlZD1iLmNsb3NlZDt0aGlzLmN1cnZlVHlwZT1iLmN1cnZlVHlwZTt0aGlzLnRlbnNpb249Yi50ZW5zaW9uO3JldHVybiB0aGlzfTtWYy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlYi5wcm90b3R5cGUpOwpWYy5wcm90b3R5cGUuY29uc3RydWN0b3I9VmM7VmMucHJvdG90eXBlLmlzQ3ViaWNCZXppZXJDdXJ2ZT0hMDtWYy5wcm90b3R5cGUuZ2V0UG9pbnQ9ZnVuY3Rpb24oYixlKXtlPWV8fG5ldyBkO3ZhciBoPXRoaXMudjAsbj10aGlzLnYxLHU9dGhpcy52Mix3PXRoaXMudjM7ZS5zZXQodWcoYixoLngsbi54LHUueCx3LngpLHVnKGIsaC55LG4ueSx1Lnksdy55KSk7cmV0dXJuIGV9O1ZjLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKGIpe2ViLnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyxiKTt0aGlzLnYwLmNvcHkoYi52MCk7dGhpcy52MS5jb3B5KGIudjEpO3RoaXMudjIuY29weShiLnYyKTt0aGlzLnYzLmNvcHkoYi52Myk7cmV0dXJuIHRoaXN9O1ZjLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXt2YXIgYj1lYi5wcm90b3R5cGUudG9KU09OLmNhbGwodGhpcyk7Yi52MD10aGlzLnYwLnRvQXJyYXkoKTtiLnYxPXRoaXMudjEudG9BcnJheSgpO2IudjI9dGhpcy52Mi50b0FycmF5KCk7CmIudjM9dGhpcy52My50b0FycmF5KCk7cmV0dXJuIGJ9O1ZjLnByb3RvdHlwZS5mcm9tSlNPTj1mdW5jdGlvbihiKXtlYi5wcm90b3R5cGUuZnJvbUpTT04uY2FsbCh0aGlzLGIpO3RoaXMudjAuZnJvbUFycmF5KGIudjApO3RoaXMudjEuZnJvbUFycmF5KGIudjEpO3RoaXMudjIuZnJvbUFycmF5KGIudjIpO3RoaXMudjMuZnJvbUFycmF5KGIudjMpO3JldHVybiB0aGlzfTtvZC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlYi5wcm90b3R5cGUpO29kLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1vZDtvZC5wcm90b3R5cGUuaXNDdWJpY0JlemllckN1cnZlMz0hMDtvZC5wcm90b3R5cGUuZ2V0UG9pbnQ9ZnVuY3Rpb24oYixlKXtlPWV8fG5ldyBnO3ZhciBoPXRoaXMudjAsbj10aGlzLnYxLHU9dGhpcy52Mix3PXRoaXMudjM7ZS5zZXQodWcoYixoLngsbi54LHUueCx3LngpLHVnKGIsaC55LG4ueSx1Lnksdy55KSx1ZyhiLGgueixuLnosdS56LHcueikpO3JldHVybiBlfTtvZC5wcm90b3R5cGUuY29weT0KZnVuY3Rpb24oYil7ZWIucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLGIpO3RoaXMudjAuY29weShiLnYwKTt0aGlzLnYxLmNvcHkoYi52MSk7dGhpcy52Mi5jb3B5KGIudjIpO3RoaXMudjMuY29weShiLnYzKTtyZXR1cm4gdGhpc307b2QucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3ZhciBiPWViLnByb3RvdHlwZS50b0pTT04uY2FsbCh0aGlzKTtiLnYwPXRoaXMudjAudG9BcnJheSgpO2IudjE9dGhpcy52MS50b0FycmF5KCk7Yi52Mj10aGlzLnYyLnRvQXJyYXkoKTtiLnYzPXRoaXMudjMudG9BcnJheSgpO3JldHVybiBifTtvZC5wcm90b3R5cGUuZnJvbUpTT049ZnVuY3Rpb24oYil7ZWIucHJvdG90eXBlLmZyb21KU09OLmNhbGwodGhpcyxiKTt0aGlzLnYwLmZyb21BcnJheShiLnYwKTt0aGlzLnYxLmZyb21BcnJheShiLnYxKTt0aGlzLnYyLmZyb21BcnJheShiLnYyKTt0aGlzLnYzLmZyb21BcnJheShiLnYzKTtyZXR1cm4gdGhpc307QmMucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZWIucHJvdG90eXBlKTsKQmMucHJvdG90eXBlLmNvbnN0cnVjdG9yPUJjO0JjLnByb3RvdHlwZS5pc0xpbmVDdXJ2ZT0hMDtCYy5wcm90b3R5cGUuZ2V0UG9pbnQ9ZnVuY3Rpb24oYixlKXtlPWV8fG5ldyBkOzE9PT1iP2UuY29weSh0aGlzLnYyKTooZS5jb3B5KHRoaXMudjIpLnN1Yih0aGlzLnYxKSxlLm11bHRpcGx5U2NhbGFyKGIpLmFkZCh0aGlzLnYxKSk7cmV0dXJuIGV9O0JjLnByb3RvdHlwZS5nZXRQb2ludEF0PWZ1bmN0aW9uKGIsZSl7cmV0dXJuIHRoaXMuZ2V0UG9pbnQoYixlKX07QmMucHJvdG90eXBlLmdldFRhbmdlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52Mi5jbG9uZSgpLnN1Yih0aGlzLnYxKS5ub3JtYWxpemUoKX07QmMucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oYil7ZWIucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLGIpO3RoaXMudjEuY29weShiLnYxKTt0aGlzLnYyLmNvcHkoYi52Mik7cmV0dXJuIHRoaXN9O0JjLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXt2YXIgYj1lYi5wcm90b3R5cGUudG9KU09OLmNhbGwodGhpcyk7CmIudjE9dGhpcy52MS50b0FycmF5KCk7Yi52Mj10aGlzLnYyLnRvQXJyYXkoKTtyZXR1cm4gYn07QmMucHJvdG90eXBlLmZyb21KU09OPWZ1bmN0aW9uKGIpe2ViLnByb3RvdHlwZS5mcm9tSlNPTi5jYWxsKHRoaXMsYik7dGhpcy52MS5mcm9tQXJyYXkoYi52MSk7dGhpcy52Mi5mcm9tQXJyYXkoYi52Mik7cmV0dXJuIHRoaXN9O1djLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGViLnByb3RvdHlwZSk7V2MucHJvdG90eXBlLmNvbnN0cnVjdG9yPVdjO1djLnByb3RvdHlwZS5pc0xpbmVDdXJ2ZTM9ITA7V2MucHJvdG90eXBlLmdldFBvaW50PWZ1bmN0aW9uKGIsZSl7ZT1lfHxuZXcgZzsxPT09Yj9lLmNvcHkodGhpcy52Mik6KGUuY29weSh0aGlzLnYyKS5zdWIodGhpcy52MSksZS5tdWx0aXBseVNjYWxhcihiKS5hZGQodGhpcy52MSkpO3JldHVybiBlfTtXYy5wcm90b3R5cGUuZ2V0UG9pbnRBdD1mdW5jdGlvbihiLGUpe3JldHVybiB0aGlzLmdldFBvaW50KGIsZSl9O1djLnByb3RvdHlwZS5jb3B5PQpmdW5jdGlvbihiKXtlYi5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsYik7dGhpcy52MS5jb3B5KGIudjEpO3RoaXMudjIuY29weShiLnYyKTtyZXR1cm4gdGhpc307V2MucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3ZhciBiPWViLnByb3RvdHlwZS50b0pTT04uY2FsbCh0aGlzKTtiLnYxPXRoaXMudjEudG9BcnJheSgpO2IudjI9dGhpcy52Mi50b0FycmF5KCk7cmV0dXJuIGJ9O1djLnByb3RvdHlwZS5mcm9tSlNPTj1mdW5jdGlvbihiKXtlYi5wcm90b3R5cGUuZnJvbUpTT04uY2FsbCh0aGlzLGIpO3RoaXMudjEuZnJvbUFycmF5KGIudjEpO3RoaXMudjIuZnJvbUFycmF5KGIudjIpO3JldHVybiB0aGlzfTtYYy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlYi5wcm90b3R5cGUpO1hjLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1YYztYYy5wcm90b3R5cGUuaXNRdWFkcmF0aWNCZXppZXJDdXJ2ZT0hMDtYYy5wcm90b3R5cGUuZ2V0UG9pbnQ9ZnVuY3Rpb24oYixlKXtlPWV8fG5ldyBkOwp2YXIgaD10aGlzLnYwLG49dGhpcy52MSx1PXRoaXMudjI7ZS5zZXQodGcoYixoLngsbi54LHUueCksdGcoYixoLnksbi55LHUueSkpO3JldHVybiBlfTtYYy5wcm90b3R5cGUuY29weT1mdW5jdGlvbihiKXtlYi5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsYik7dGhpcy52MC5jb3B5KGIudjApO3RoaXMudjEuY29weShiLnYxKTt0aGlzLnYyLmNvcHkoYi52Mik7cmV0dXJuIHRoaXN9O1hjLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXt2YXIgYj1lYi5wcm90b3R5cGUudG9KU09OLmNhbGwodGhpcyk7Yi52MD10aGlzLnYwLnRvQXJyYXkoKTtiLnYxPXRoaXMudjEudG9BcnJheSgpO2IudjI9dGhpcy52Mi50b0FycmF5KCk7cmV0dXJuIGJ9O1hjLnByb3RvdHlwZS5mcm9tSlNPTj1mdW5jdGlvbihiKXtlYi5wcm90b3R5cGUuZnJvbUpTT04uY2FsbCh0aGlzLGIpO3RoaXMudjAuZnJvbUFycmF5KGIudjApO3RoaXMudjEuZnJvbUFycmF5KGIudjEpO3RoaXMudjIuZnJvbUFycmF5KGIudjIpOwpyZXR1cm4gdGhpc307cGQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZWIucHJvdG90eXBlKTtwZC5wcm90b3R5cGUuY29uc3RydWN0b3I9cGQ7cGQucHJvdG90eXBlLmlzUXVhZHJhdGljQmV6aWVyQ3VydmUzPSEwO3BkLnByb3RvdHlwZS5nZXRQb2ludD1mdW5jdGlvbihiLGUpe2U9ZXx8bmV3IGc7dmFyIGg9dGhpcy52MCxuPXRoaXMudjEsdT10aGlzLnYyO2Uuc2V0KHRnKGIsaC54LG4ueCx1LngpLHRnKGIsaC55LG4ueSx1LnkpLHRnKGIsaC56LG4ueix1LnopKTtyZXR1cm4gZX07cGQucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oYil7ZWIucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLGIpO3RoaXMudjAuY29weShiLnYwKTt0aGlzLnYxLmNvcHkoYi52MSk7dGhpcy52Mi5jb3B5KGIudjIpO3JldHVybiB0aGlzfTtwZC5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7dmFyIGI9ZWIucHJvdG90eXBlLnRvSlNPTi5jYWxsKHRoaXMpO2IudjA9dGhpcy52MC50b0FycmF5KCk7Yi52MT0KdGhpcy52MS50b0FycmF5KCk7Yi52Mj10aGlzLnYyLnRvQXJyYXkoKTtyZXR1cm4gYn07cGQucHJvdG90eXBlLmZyb21KU09OPWZ1bmN0aW9uKGIpe2ViLnByb3RvdHlwZS5mcm9tSlNPTi5jYWxsKHRoaXMsYik7dGhpcy52MC5mcm9tQXJyYXkoYi52MCk7dGhpcy52MS5mcm9tQXJyYXkoYi52MSk7dGhpcy52Mi5mcm9tQXJyYXkoYi52Mik7cmV0dXJuIHRoaXN9O1ljLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGViLnByb3RvdHlwZSk7WWMucHJvdG90eXBlLmNvbnN0cnVjdG9yPVljO1ljLnByb3RvdHlwZS5pc1NwbGluZUN1cnZlPSEwO1ljLnByb3RvdHlwZS5nZXRQb2ludD1mdW5jdGlvbihiLGUpe2U9ZXx8bmV3IGQ7dmFyIGg9dGhpcy5wb2ludHMsbj0oaC5sZW5ndGgtMSkqYjtiPU1hdGguZmxvb3Iobik7bi09Yjt2YXIgdT1oWzA9PT1iP2I6Yi0xXSx3PWhbYl0sej1oW2I+aC5sZW5ndGgtMj9oLmxlbmd0aC0xOmIrMV07aD1oW2I+aC5sZW5ndGgtMz9oLmxlbmd0aC0xOmIrMl07CmUuc2V0KEdsKG4sdS54LHcueCx6LngsaC54KSxHbChuLHUueSx3Lnksei55LGgueSkpO3JldHVybiBlfTtZYy5wcm90b3R5cGUuY29weT1mdW5jdGlvbihiKXtlYi5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsYik7dGhpcy5wb2ludHM9W107Zm9yKHZhciBlPTAsaD1iLnBvaW50cy5sZW5ndGg7ZTxoO2UrKyl0aGlzLnBvaW50cy5wdXNoKGIucG9pbnRzW2VdLmNsb25lKCkpO3JldHVybiB0aGlzfTtZYy5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7dmFyIGI9ZWIucHJvdG90eXBlLnRvSlNPTi5jYWxsKHRoaXMpO2IucG9pbnRzPVtdO2Zvcih2YXIgZT0wLGg9dGhpcy5wb2ludHMubGVuZ3RoO2U8aDtlKyspYi5wb2ludHMucHVzaCh0aGlzLnBvaW50c1tlXS50b0FycmF5KCkpO3JldHVybiBifTtZYy5wcm90b3R5cGUuZnJvbUpTT049ZnVuY3Rpb24oYil7ZWIucHJvdG90eXBlLmZyb21KU09OLmNhbGwodGhpcyxiKTt0aGlzLnBvaW50cz1bXTtmb3IodmFyIGU9MCxoPWIucG9pbnRzLmxlbmd0aDtlPApoO2UrKyl7dmFyIG49Yi5wb2ludHNbZV07dGhpcy5wb2ludHMucHVzaCgobmV3IGQpLmZyb21BcnJheShuKSl9cmV0dXJuIHRoaXN9O3ZhciBnaj1PYmplY3QuZnJlZXplKHtBcmNDdXJ2ZTpoZixDYXRtdWxsUm9tQ3VydmUzOnJjLEN1YmljQmV6aWVyQ3VydmU6VmMsQ3ViaWNCZXppZXJDdXJ2ZTM6b2QsRWxsaXBzZUN1cnZlOkVjLExpbmVDdXJ2ZTpCYyxMaW5lQ3VydmUzOldjLFF1YWRyYXRpY0JlemllckN1cnZlOlhjLFF1YWRyYXRpY0JlemllckN1cnZlMzpwZCxTcGxpbmVDdXJ2ZTpZY30pO0FkLnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoZWIucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6QWQsYWRkOmZ1bmN0aW9uKGIpe3RoaXMuY3VydmVzLnB1c2goYil9LGNsb3NlUGF0aDpmdW5jdGlvbigpe3ZhciBiPXRoaXMuY3VydmVzWzBdLmdldFBvaW50KDApLGU9dGhpcy5jdXJ2ZXNbdGhpcy5jdXJ2ZXMubGVuZ3RoLTFdLmdldFBvaW50KDEpO2IuZXF1YWxzKGUpfHwKdGhpcy5jdXJ2ZXMucHVzaChuZXcgQmMoZSxiKSl9LGdldFBvaW50OmZ1bmN0aW9uKGIpe3ZhciBlPWIqdGhpcy5nZXRMZW5ndGgoKSxoPXRoaXMuZ2V0Q3VydmVMZW5ndGhzKCk7Zm9yKGI9MDtiPGgubGVuZ3RoOyl7aWYoaFtiXT49ZSlyZXR1cm4gZT1oW2JdLWUsYj10aGlzLmN1cnZlc1tiXSxoPWIuZ2V0TGVuZ3RoKCksYi5nZXRQb2ludEF0KDA9PT1oPzA6MS1lL2gpO2IrK31yZXR1cm4gbnVsbH0sZ2V0TGVuZ3RoOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRDdXJ2ZUxlbmd0aHMoKTtyZXR1cm4gYltiLmxlbmd0aC0xXX0sdXBkYXRlQXJjTGVuZ3RoczpmdW5jdGlvbigpe3RoaXMubmVlZHNVcGRhdGU9ITA7dGhpcy5jYWNoZUxlbmd0aHM9bnVsbDt0aGlzLmdldEN1cnZlTGVuZ3RocygpfSxnZXRDdXJ2ZUxlbmd0aHM6ZnVuY3Rpb24oKXtpZih0aGlzLmNhY2hlTGVuZ3RocyYmdGhpcy5jYWNoZUxlbmd0aHMubGVuZ3RoPT09dGhpcy5jdXJ2ZXMubGVuZ3RoKXJldHVybiB0aGlzLmNhY2hlTGVuZ3RoczsKZm9yKHZhciBiPVtdLGU9MCxoPTAsbj10aGlzLmN1cnZlcy5sZW5ndGg7aDxuO2grKyllKz10aGlzLmN1cnZlc1toXS5nZXRMZW5ndGgoKSxiLnB1c2goZSk7cmV0dXJuIHRoaXMuY2FjaGVMZW5ndGhzPWJ9LGdldFNwYWNlZFBvaW50czpmdW5jdGlvbihiKXt2b2lkIDA9PT1iJiYoYj00MCk7Zm9yKHZhciBlPVtdLGg9MDtoPD1iO2grKyllLnB1c2godGhpcy5nZXRQb2ludChoL2IpKTt0aGlzLmF1dG9DbG9zZSYmZS5wdXNoKGVbMF0pO3JldHVybiBlfSxnZXRQb2ludHM6ZnVuY3Rpb24oYil7Yj1ifHwxMjtmb3IodmFyIGU9W10saCxuPTAsdT10aGlzLmN1cnZlcztuPHUubGVuZ3RoO24rKyl7dmFyIHc9dVtuXTt3PXcuZ2V0UG9pbnRzKHcmJncuaXNFbGxpcHNlQ3VydmU/MipiOncmJih3LmlzTGluZUN1cnZlfHx3LmlzTGluZUN1cnZlMyk/MTp3JiZ3LmlzU3BsaW5lQ3VydmU/Yip3LnBvaW50cy5sZW5ndGg6Yik7Zm9yKHZhciB6PTA7ejx3Lmxlbmd0aDt6Kyspe3ZhciBFPXdbel07CmgmJmguZXF1YWxzKEUpfHwoZS5wdXNoKEUpLGg9RSl9fXRoaXMuYXV0b0Nsb3NlJiYxPGUubGVuZ3RoJiYhZVtlLmxlbmd0aC0xXS5lcXVhbHMoZVswXSkmJmUucHVzaChlWzBdKTtyZXR1cm4gZX0sY29weTpmdW5jdGlvbihiKXtlYi5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsYik7dGhpcy5jdXJ2ZXM9W107Zm9yKHZhciBlPTAsaD1iLmN1cnZlcy5sZW5ndGg7ZTxoO2UrKyl0aGlzLmN1cnZlcy5wdXNoKGIuY3VydmVzW2VdLmNsb25lKCkpO3RoaXMuYXV0b0Nsb3NlPWIuYXV0b0Nsb3NlO3JldHVybiB0aGlzfSx0b0pTT046ZnVuY3Rpb24oKXt2YXIgYj1lYi5wcm90b3R5cGUudG9KU09OLmNhbGwodGhpcyk7Yi5hdXRvQ2xvc2U9dGhpcy5hdXRvQ2xvc2U7Yi5jdXJ2ZXM9W107Zm9yKHZhciBlPTAsaD10aGlzLmN1cnZlcy5sZW5ndGg7ZTxoO2UrKyliLmN1cnZlcy5wdXNoKHRoaXMuY3VydmVzW2VdLnRvSlNPTigpKTtyZXR1cm4gYn0sZnJvbUpTT046ZnVuY3Rpb24oYil7ZWIucHJvdG90eXBlLmZyb21KU09OLmNhbGwodGhpcywKYik7dGhpcy5hdXRvQ2xvc2U9Yi5hdXRvQ2xvc2U7dGhpcy5jdXJ2ZXM9W107Zm9yKHZhciBlPTAsaD1iLmN1cnZlcy5sZW5ndGg7ZTxoO2UrKyl7dmFyIG49Yi5jdXJ2ZXNbZV07dGhpcy5jdXJ2ZXMucHVzaCgobmV3IGdqW24udHlwZV0pLmZyb21KU09OKG4pKX1yZXR1cm4gdGhpc319KTtaYy5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKEFkLnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOlpjLHNldEZyb21Qb2ludHM6ZnVuY3Rpb24oYil7dGhpcy5tb3ZlVG8oYlswXS54LGJbMF0ueSk7Zm9yKHZhciBlPTEsaD1iLmxlbmd0aDtlPGg7ZSsrKXRoaXMubGluZVRvKGJbZV0ueCxiW2VdLnkpfSxtb3ZlVG86ZnVuY3Rpb24oYixlKXt0aGlzLmN1cnJlbnRQb2ludC5zZXQoYixlKX0sbGluZVRvOmZ1bmN0aW9uKGIsZSl7dmFyIGg9bmV3IEJjKHRoaXMuY3VycmVudFBvaW50LmNsb25lKCksbmV3IGQoYixlKSk7dGhpcy5jdXJ2ZXMucHVzaChoKTt0aGlzLmN1cnJlbnRQb2ludC5zZXQoYiwKZSl9LHF1YWRyYXRpY0N1cnZlVG86ZnVuY3Rpb24oYixlLGgsbil7Yj1uZXcgWGModGhpcy5jdXJyZW50UG9pbnQuY2xvbmUoKSxuZXcgZChiLGUpLG5ldyBkKGgsbikpO3RoaXMuY3VydmVzLnB1c2goYik7dGhpcy5jdXJyZW50UG9pbnQuc2V0KGgsbil9LGJlemllckN1cnZlVG86ZnVuY3Rpb24oYixlLGgsbix1LHcpe2I9bmV3IFZjKHRoaXMuY3VycmVudFBvaW50LmNsb25lKCksbmV3IGQoYixlKSxuZXcgZChoLG4pLG5ldyBkKHUsdykpO3RoaXMuY3VydmVzLnB1c2goYik7dGhpcy5jdXJyZW50UG9pbnQuc2V0KHUsdyl9LHNwbGluZVRocnU6ZnVuY3Rpb24oYil7dmFyIGU9W3RoaXMuY3VycmVudFBvaW50LmNsb25lKCldLmNvbmNhdChiKTtlPW5ldyBZYyhlKTt0aGlzLmN1cnZlcy5wdXNoKGUpO3RoaXMuY3VycmVudFBvaW50LmNvcHkoYltiLmxlbmd0aC0xXSl9LGFyYzpmdW5jdGlvbihiLGUsaCxuLHUsdyl7dGhpcy5hYnNhcmMoYit0aGlzLmN1cnJlbnRQb2ludC54LGUrdGhpcy5jdXJyZW50UG9pbnQueSwKaCxuLHUsdyl9LGFic2FyYzpmdW5jdGlvbihiLGUsaCxuLHUsdyl7dGhpcy5hYnNlbGxpcHNlKGIsZSxoLGgsbix1LHcpfSxlbGxpcHNlOmZ1bmN0aW9uKGIsZSxoLG4sdSx3LHosRSl7dGhpcy5hYnNlbGxpcHNlKGIrdGhpcy5jdXJyZW50UG9pbnQueCxlK3RoaXMuY3VycmVudFBvaW50LnksaCxuLHUsdyx6LEUpfSxhYnNlbGxpcHNlOmZ1bmN0aW9uKGIsZSxoLG4sdSx3LHosRSl7Yj1uZXcgRWMoYixlLGgsbix1LHcseixFKTswPHRoaXMuY3VydmVzLmxlbmd0aCYmKGU9Yi5nZXRQb2ludCgwKSxlLmVxdWFscyh0aGlzLmN1cnJlbnRQb2ludCl8fHRoaXMubGluZVRvKGUueCxlLnkpKTt0aGlzLmN1cnZlcy5wdXNoKGIpO2I9Yi5nZXRQb2ludCgxKTt0aGlzLmN1cnJlbnRQb2ludC5jb3B5KGIpfSxjb3B5OmZ1bmN0aW9uKGIpe0FkLnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyxiKTt0aGlzLmN1cnJlbnRQb2ludC5jb3B5KGIuY3VycmVudFBvaW50KTtyZXR1cm4gdGhpc30sdG9KU09OOmZ1bmN0aW9uKCl7dmFyIGI9CkFkLnByb3RvdHlwZS50b0pTT04uY2FsbCh0aGlzKTtiLmN1cnJlbnRQb2ludD10aGlzLmN1cnJlbnRQb2ludC50b0FycmF5KCk7cmV0dXJuIGJ9LGZyb21KU09OOmZ1bmN0aW9uKGIpe0FkLnByb3RvdHlwZS5mcm9tSlNPTi5jYWxsKHRoaXMsYik7dGhpcy5jdXJyZW50UG9pbnQuZnJvbUFycmF5KGIuY3VycmVudFBvaW50KTtyZXR1cm4gdGhpc319KTtYZC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKFpjLnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOlhkLGdldFBvaW50c0hvbGVzOmZ1bmN0aW9uKGIpe2Zvcih2YXIgZT1bXSxoPTAsbj10aGlzLmhvbGVzLmxlbmd0aDtoPG47aCsrKWVbaF09dGhpcy5ob2xlc1toXS5nZXRQb2ludHMoYik7cmV0dXJuIGV9LGV4dHJhY3RQb2ludHM6ZnVuY3Rpb24oYil7cmV0dXJue3NoYXBlOnRoaXMuZ2V0UG9pbnRzKGIpLGhvbGVzOnRoaXMuZ2V0UG9pbnRzSG9sZXMoYil9fSxjb3B5OmZ1bmN0aW9uKGIpe1pjLnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcywKYik7dGhpcy5ob2xlcz1bXTtmb3IodmFyIGU9MCxoPWIuaG9sZXMubGVuZ3RoO2U8aDtlKyspdGhpcy5ob2xlcy5wdXNoKGIuaG9sZXNbZV0uY2xvbmUoKSk7cmV0dXJuIHRoaXN9LHRvSlNPTjpmdW5jdGlvbigpe3ZhciBiPVpjLnByb3RvdHlwZS50b0pTT04uY2FsbCh0aGlzKTtiLnV1aWQ9dGhpcy51dWlkO2IuaG9sZXM9W107Zm9yKHZhciBlPTAsaD10aGlzLmhvbGVzLmxlbmd0aDtlPGg7ZSsrKWIuaG9sZXMucHVzaCh0aGlzLmhvbGVzW2VdLnRvSlNPTigpKTtyZXR1cm4gYn0sZnJvbUpTT046ZnVuY3Rpb24oYil7WmMucHJvdG90eXBlLmZyb21KU09OLmNhbGwodGhpcyxiKTt0aGlzLnV1aWQ9Yi51dWlkO3RoaXMuaG9sZXM9W107Zm9yKHZhciBlPTAsaD1iLmhvbGVzLmxlbmd0aDtlPGg7ZSsrKXt2YXIgbj1iLmhvbGVzW2VdO3RoaXMuaG9sZXMucHVzaCgobmV3IFpjKS5mcm9tSlNPTihuKSl9cmV0dXJuIHRoaXN9fSk7U2IucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShTLnByb3RvdHlwZSksCntjb25zdHJ1Y3RvcjpTYixpc0xpZ2h0OiEwLGNvcHk6ZnVuY3Rpb24oYil7Uy5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsYik7dGhpcy5jb2xvci5jb3B5KGIuY29sb3IpO3RoaXMuaW50ZW5zaXR5PWIuaW50ZW5zaXR5O3JldHVybiB0aGlzfSx0b0pTT046ZnVuY3Rpb24oYil7Yj1TLnByb3RvdHlwZS50b0pTT04uY2FsbCh0aGlzLGIpO2Iub2JqZWN0LmNvbG9yPXRoaXMuY29sb3IuZ2V0SGV4KCk7Yi5vYmplY3QuaW50ZW5zaXR5PXRoaXMuaW50ZW5zaXR5O3ZvaWQgMCE9PXRoaXMuZ3JvdW5kQ29sb3ImJihiLm9iamVjdC5ncm91bmRDb2xvcj10aGlzLmdyb3VuZENvbG9yLmdldEhleCgpKTt2b2lkIDAhPT10aGlzLmRpc3RhbmNlJiYoYi5vYmplY3QuZGlzdGFuY2U9dGhpcy5kaXN0YW5jZSk7dm9pZCAwIT09dGhpcy5hbmdsZSYmKGIub2JqZWN0LmFuZ2xlPXRoaXMuYW5nbGUpO3ZvaWQgMCE9PXRoaXMuZGVjYXkmJihiLm9iamVjdC5kZWNheT10aGlzLmRlY2F5KTt2b2lkIDAhPT0KdGhpcy5wZW51bWJyYSYmKGIub2JqZWN0LnBlbnVtYnJhPXRoaXMucGVudW1icmEpO3ZvaWQgMCE9PXRoaXMuc2hhZG93JiYoYi5vYmplY3Quc2hhZG93PXRoaXMuc2hhZG93LnRvSlNPTigpKTtyZXR1cm4gYn19KTt0aC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKFNiLnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOnRoLGlzSGVtaXNwaGVyZUxpZ2h0OiEwLGNvcHk6ZnVuY3Rpb24oYil7U2IucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLGIpO3RoaXMuZ3JvdW5kQ29sb3IuY29weShiLmdyb3VuZENvbG9yKTtyZXR1cm4gdGhpc319KTtPYmplY3QuYXNzaWduKHdlLnByb3RvdHlwZSx7Y29weTpmdW5jdGlvbihiKXt0aGlzLmNhbWVyYT1iLmNhbWVyYS5jbG9uZSgpO3RoaXMuYmlhcz1iLmJpYXM7dGhpcy5yYWRpdXM9Yi5yYWRpdXM7dGhpcy5tYXBTaXplLmNvcHkoYi5tYXBTaXplKTtyZXR1cm4gdGhpc30sY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9LAp0b0pTT046ZnVuY3Rpb24oKXt2YXIgYj17fTswIT09dGhpcy5iaWFzJiYoYi5iaWFzPXRoaXMuYmlhcyk7MSE9PXRoaXMucmFkaXVzJiYoYi5yYWRpdXM9dGhpcy5yYWRpdXMpO2lmKDUxMiE9PXRoaXMubWFwU2l6ZS54fHw1MTIhPT10aGlzLm1hcFNpemUueSliLm1hcFNpemU9dGhpcy5tYXBTaXplLnRvQXJyYXkoKTtiLmNhbWVyYT10aGlzLmNhbWVyYS50b0pTT04oITEpLm9iamVjdDtkZWxldGUgYi5jYW1lcmEubWF0cml4O3JldHVybiBifX0pO3VoLnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUod2UucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6dWgsaXNTcG90TGlnaHRTaGFkb3c6ITAsdXBkYXRlOmZ1bmN0aW9uKGIpe3ZhciBlPXRoaXMuY2FtZXJhLGg9MipvYi5SQUQyREVHKmIuYW5nbGUsbj10aGlzLm1hcFNpemUud2lkdGgvdGhpcy5tYXBTaXplLmhlaWdodDtiPWIuZGlzdGFuY2V8fGUuZmFyO2lmKGghPT1lLmZvdnx8biE9PWUuYXNwZWN0fHxiIT09ZS5mYXIpZS5mb3Y9CmgsZS5hc3BlY3Q9bixlLmZhcj1iLGUudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpfX0pO3ZoLnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoU2IucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6dmgsaXNTcG90TGlnaHQ6ITAsY29weTpmdW5jdGlvbihiKXtTYi5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsYik7dGhpcy5kaXN0YW5jZT1iLmRpc3RhbmNlO3RoaXMuYW5nbGU9Yi5hbmdsZTt0aGlzLnBlbnVtYnJhPWIucGVudW1icmE7dGhpcy5kZWNheT1iLmRlY2F5O3RoaXMudGFyZ2V0PWIudGFyZ2V0LmNsb25lKCk7dGhpcy5zaGFkb3c9Yi5zaGFkb3cuY2xvbmUoKTtyZXR1cm4gdGhpc319KTt3aC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKFNiLnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOndoLGlzUG9pbnRMaWdodDohMCxjb3B5OmZ1bmN0aW9uKGIpe1NiLnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyxiKTt0aGlzLmRpc3RhbmNlPWIuZGlzdGFuY2U7CnRoaXMuZGVjYXk9Yi5kZWNheTt0aGlzLnNoYWRvdz1iLnNoYWRvdy5jbG9uZSgpO3JldHVybiB0aGlzfX0pO3ZnLnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoamQucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6dmcsaXNPcnRob2dyYXBoaWNDYW1lcmE6ITAsY29weTpmdW5jdGlvbihiLGUpe2pkLnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyxiLGUpO3RoaXMubGVmdD1iLmxlZnQ7dGhpcy5yaWdodD1iLnJpZ2h0O3RoaXMudG9wPWIudG9wO3RoaXMuYm90dG9tPWIuYm90dG9tO3RoaXMubmVhcj1iLm5lYXI7dGhpcy5mYXI9Yi5mYXI7dGhpcy56b29tPWIuem9vbTt0aGlzLnZpZXc9bnVsbD09PWIudmlldz9udWxsOk9iamVjdC5hc3NpZ24oe30sYi52aWV3KTtyZXR1cm4gdGhpc30sc2V0Vmlld09mZnNldDpmdW5jdGlvbihiLGUsaCxuLHUsdyl7bnVsbD09PXRoaXMudmlldyYmKHRoaXMudmlldz17ZW5hYmxlZDohMCxmdWxsV2lkdGg6MSxmdWxsSGVpZ2h0OjEsb2Zmc2V0WDowLApvZmZzZXRZOjAsd2lkdGg6MSxoZWlnaHQ6MX0pO3RoaXMudmlldy5lbmFibGVkPSEwO3RoaXMudmlldy5mdWxsV2lkdGg9Yjt0aGlzLnZpZXcuZnVsbEhlaWdodD1lO3RoaXMudmlldy5vZmZzZXRYPWg7dGhpcy52aWV3Lm9mZnNldFk9bjt0aGlzLnZpZXcud2lkdGg9dTt0aGlzLnZpZXcuaGVpZ2h0PXc7dGhpcy51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl9LGNsZWFyVmlld09mZnNldDpmdW5jdGlvbigpe251bGwhPT10aGlzLnZpZXcmJih0aGlzLnZpZXcuZW5hYmxlZD0hMSk7dGhpcy51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl9LHVwZGF0ZVByb2plY3Rpb25NYXRyaXg6ZnVuY3Rpb24oKXt2YXIgYj0odGhpcy5yaWdodC10aGlzLmxlZnQpLygyKnRoaXMuem9vbSksZT0odGhpcy50b3AtdGhpcy5ib3R0b20pLygyKnRoaXMuem9vbSksaD0odGhpcy5yaWdodCt0aGlzLmxlZnQpLzIsbj0odGhpcy50b3ArdGhpcy5ib3R0b20pLzIsdT1oLWI7aCs9YjtiPW4rZTtlPW4tZTtpZihudWxsIT09CnRoaXMudmlldyYmdGhpcy52aWV3LmVuYWJsZWQpe2g9dGhpcy56b29tLyh0aGlzLnZpZXcud2lkdGgvdGhpcy52aWV3LmZ1bGxXaWR0aCk7ZT10aGlzLnpvb20vKHRoaXMudmlldy5oZWlnaHQvdGhpcy52aWV3LmZ1bGxIZWlnaHQpO3ZhciB3PSh0aGlzLnJpZ2h0LXRoaXMubGVmdCkvdGhpcy52aWV3LndpZHRoO249KHRoaXMudG9wLXRoaXMuYm90dG9tKS90aGlzLnZpZXcuaGVpZ2h0O3UrPXRoaXMudmlldy5vZmZzZXRYL2gqdztoPXUrdGhpcy52aWV3LndpZHRoL2gqdztiLT10aGlzLnZpZXcub2Zmc2V0WS9lKm47ZT1iLXRoaXMudmlldy5oZWlnaHQvZSpufXRoaXMucHJvamVjdGlvbk1hdHJpeC5tYWtlT3J0aG9ncmFwaGljKHUsaCxiLGUsdGhpcy5uZWFyLHRoaXMuZmFyKTt0aGlzLnByb2plY3Rpb25NYXRyaXhJbnZlcnNlLmdldEludmVyc2UodGhpcy5wcm9qZWN0aW9uTWF0cml4KX0sdG9KU09OOmZ1bmN0aW9uKGIpe2I9Uy5wcm90b3R5cGUudG9KU09OLmNhbGwodGhpcyxiKTsKYi5vYmplY3Quem9vbT10aGlzLnpvb207Yi5vYmplY3QubGVmdD10aGlzLmxlZnQ7Yi5vYmplY3QucmlnaHQ9dGhpcy5yaWdodDtiLm9iamVjdC50b3A9dGhpcy50b3A7Yi5vYmplY3QuYm90dG9tPXRoaXMuYm90dG9tO2Iub2JqZWN0Lm5lYXI9dGhpcy5uZWFyO2Iub2JqZWN0LmZhcj10aGlzLmZhcjtudWxsIT09dGhpcy52aWV3JiYoYi5vYmplY3Qudmlldz1PYmplY3QuYXNzaWduKHt9LHRoaXMudmlldykpO3JldHVybiBifX0pO3hoLnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUod2UucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6eGh9KTt5aC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKFNiLnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOnloLGlzRGlyZWN0aW9uYWxMaWdodDohMCxjb3B5OmZ1bmN0aW9uKGIpe1NiLnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyxiKTt0aGlzLnRhcmdldD1iLnRhcmdldC5jbG9uZSgpO3RoaXMuc2hhZG93PWIuc2hhZG93LmNsb25lKCk7CnJldHVybiB0aGlzfX0pO3poLnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoU2IucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6emgsaXNBbWJpZW50TGlnaHQ6ITB9KTtBaC5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKFNiLnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOkFoLGlzUmVjdEFyZWFMaWdodDohMCxjb3B5OmZ1bmN0aW9uKGIpe1NiLnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyxiKTt0aGlzLndpZHRoPWIud2lkdGg7dGhpcy5oZWlnaHQ9Yi5oZWlnaHQ7cmV0dXJuIHRoaXN9LHRvSlNPTjpmdW5jdGlvbihiKXtiPVNiLnByb3RvdHlwZS50b0pTT04uY2FsbCh0aGlzLGIpO2Iub2JqZWN0LndpZHRoPXRoaXMud2lkdGg7Yi5vYmplY3QuaGVpZ2h0PXRoaXMuaGVpZ2h0O3JldHVybiBifX0pO09iamVjdC5hc3NpZ24oQmgucHJvdG90eXBlLHtsb2FkOmZ1bmN0aW9uKGIsZSxoLG4pe3ZhciB1PXRoaXMsdz1uZXcgVWModS5tYW5hZ2VyKTt3LnNldFBhdGgodS5wYXRoKTsKdy5sb2FkKGIsZnVuY3Rpb24oeil7ZSh1LnBhcnNlKEpTT04ucGFyc2UoeikpKX0saCxuKX0scGFyc2U6ZnVuY3Rpb24oYil7ZnVuY3Rpb24gZShFKXt2b2lkIDA9PT1oW0VdJiZjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsTG9hZGVyOiBVbmRlZmluZWQgdGV4dHVyZSIsRSk7cmV0dXJuIGhbRV19dmFyIGg9dGhpcy50ZXh0dXJlcyxuPW5ldyBvcFtiLnR5cGVdO3ZvaWQgMCE9PWIudXVpZCYmKG4udXVpZD1iLnV1aWQpO3ZvaWQgMCE9PWIubmFtZSYmKG4ubmFtZT1iLm5hbWUpO3ZvaWQgMCE9PWIuY29sb3ImJm4uY29sb3Iuc2V0SGV4KGIuY29sb3IpO3ZvaWQgMCE9PWIucm91Z2huZXNzJiYobi5yb3VnaG5lc3M9Yi5yb3VnaG5lc3MpO3ZvaWQgMCE9PWIubWV0YWxuZXNzJiYobi5tZXRhbG5lc3M9Yi5tZXRhbG5lc3MpO3ZvaWQgMCE9PWIuZW1pc3NpdmUmJm4uZW1pc3NpdmUuc2V0SGV4KGIuZW1pc3NpdmUpO3ZvaWQgMCE9PWIuc3BlY3VsYXImJm4uc3BlY3VsYXIuc2V0SGV4KGIuc3BlY3VsYXIpOwp2b2lkIDAhPT1iLnNoaW5pbmVzcyYmKG4uc2hpbmluZXNzPWIuc2hpbmluZXNzKTt2b2lkIDAhPT1iLmNsZWFyQ29hdCYmKG4uY2xlYXJDb2F0PWIuY2xlYXJDb2F0KTt2b2lkIDAhPT1iLmNsZWFyQ29hdFJvdWdobmVzcyYmKG4uY2xlYXJDb2F0Um91Z2huZXNzPWIuY2xlYXJDb2F0Um91Z2huZXNzKTt2b2lkIDAhPT1iLnZlcnRleENvbG9ycyYmKG4udmVydGV4Q29sb3JzPWIudmVydGV4Q29sb3JzKTt2b2lkIDAhPT1iLmZvZyYmKG4uZm9nPWIuZm9nKTt2b2lkIDAhPT1iLmZsYXRTaGFkaW5nJiYobi5mbGF0U2hhZGluZz1iLmZsYXRTaGFkaW5nKTt2b2lkIDAhPT1iLmJsZW5kaW5nJiYobi5ibGVuZGluZz1iLmJsZW5kaW5nKTt2b2lkIDAhPT1iLmNvbWJpbmUmJihuLmNvbWJpbmU9Yi5jb21iaW5lKTt2b2lkIDAhPT1iLnNpZGUmJihuLnNpZGU9Yi5zaWRlKTt2b2lkIDAhPT1iLm9wYWNpdHkmJihuLm9wYWNpdHk9Yi5vcGFjaXR5KTt2b2lkIDAhPT1iLnRyYW5zcGFyZW50JiYobi50cmFuc3BhcmVudD0KYi50cmFuc3BhcmVudCk7dm9pZCAwIT09Yi5hbHBoYVRlc3QmJihuLmFscGhhVGVzdD1iLmFscGhhVGVzdCk7dm9pZCAwIT09Yi5kZXB0aFRlc3QmJihuLmRlcHRoVGVzdD1iLmRlcHRoVGVzdCk7dm9pZCAwIT09Yi5kZXB0aFdyaXRlJiYobi5kZXB0aFdyaXRlPWIuZGVwdGhXcml0ZSk7dm9pZCAwIT09Yi5jb2xvcldyaXRlJiYobi5jb2xvcldyaXRlPWIuY29sb3JXcml0ZSk7dm9pZCAwIT09Yi53aXJlZnJhbWUmJihuLndpcmVmcmFtZT1iLndpcmVmcmFtZSk7dm9pZCAwIT09Yi53aXJlZnJhbWVMaW5ld2lkdGgmJihuLndpcmVmcmFtZUxpbmV3aWR0aD1iLndpcmVmcmFtZUxpbmV3aWR0aCk7dm9pZCAwIT09Yi53aXJlZnJhbWVMaW5lY2FwJiYobi53aXJlZnJhbWVMaW5lY2FwPWIud2lyZWZyYW1lTGluZWNhcCk7dm9pZCAwIT09Yi53aXJlZnJhbWVMaW5lam9pbiYmKG4ud2lyZWZyYW1lTGluZWpvaW49Yi53aXJlZnJhbWVMaW5lam9pbik7dm9pZCAwIT09Yi5yb3RhdGlvbiYmKG4ucm90YXRpb249CmIucm90YXRpb24pOzEhPT1iLmxpbmV3aWR0aCYmKG4ubGluZXdpZHRoPWIubGluZXdpZHRoKTt2b2lkIDAhPT1iLmRhc2hTaXplJiYobi5kYXNoU2l6ZT1iLmRhc2hTaXplKTt2b2lkIDAhPT1iLmdhcFNpemUmJihuLmdhcFNpemU9Yi5nYXBTaXplKTt2b2lkIDAhPT1iLnNjYWxlJiYobi5zY2FsZT1iLnNjYWxlKTt2b2lkIDAhPT1iLnBvbHlnb25PZmZzZXQmJihuLnBvbHlnb25PZmZzZXQ9Yi5wb2x5Z29uT2Zmc2V0KTt2b2lkIDAhPT1iLnBvbHlnb25PZmZzZXRGYWN0b3ImJihuLnBvbHlnb25PZmZzZXRGYWN0b3I9Yi5wb2x5Z29uT2Zmc2V0RmFjdG9yKTt2b2lkIDAhPT1iLnBvbHlnb25PZmZzZXRVbml0cyYmKG4ucG9seWdvbk9mZnNldFVuaXRzPWIucG9seWdvbk9mZnNldFVuaXRzKTt2b2lkIDAhPT1iLnNraW5uaW5nJiYobi5za2lubmluZz1iLnNraW5uaW5nKTt2b2lkIDAhPT1iLm1vcnBoVGFyZ2V0cyYmKG4ubW9ycGhUYXJnZXRzPWIubW9ycGhUYXJnZXRzKTt2b2lkIDAhPT0KYi5kaXRoZXJpbmcmJihuLmRpdGhlcmluZz1iLmRpdGhlcmluZyk7dm9pZCAwIT09Yi52aXNpYmxlJiYobi52aXNpYmxlPWIudmlzaWJsZSk7dm9pZCAwIT09Yi51c2VyRGF0YSYmKG4udXNlckRhdGE9Yi51c2VyRGF0YSk7aWYodm9pZCAwIT09Yi51bmlmb3Jtcylmb3IodmFyIHUgaW4gYi51bmlmb3Jtcyl7dmFyIHc9Yi51bmlmb3Jtc1t1XTtuLnVuaWZvcm1zW3VdPXt9O3N3aXRjaCh3LnR5cGUpe2Nhc2UgInQiOm4udW5pZm9ybXNbdV0udmFsdWU9ZSh3LnZhbHVlKTticmVhaztjYXNlICJjIjpuLnVuaWZvcm1zW3VdLnZhbHVlPShuZXcgQikuc2V0SGV4KHcudmFsdWUpO2JyZWFrO2Nhc2UgInYyIjpuLnVuaWZvcm1zW3VdLnZhbHVlPShuZXcgZCkuZnJvbUFycmF5KHcudmFsdWUpO2JyZWFrO2Nhc2UgInYzIjpuLnVuaWZvcm1zW3VdLnZhbHVlPShuZXcgZykuZnJvbUFycmF5KHcudmFsdWUpO2JyZWFrO2Nhc2UgInY0IjpuLnVuaWZvcm1zW3VdLnZhbHVlPShuZXcgbSkuZnJvbUFycmF5KHcudmFsdWUpOwpicmVhaztjYXNlICJtMyI6bi51bmlmb3Jtc1t1XS52YWx1ZT0obmV3IGwpLmZyb21BcnJheSh3LnZhbHVlKTtjYXNlICJtNCI6bi51bmlmb3Jtc1t1XS52YWx1ZT0obmV3IEMpLmZyb21BcnJheSh3LnZhbHVlKTticmVhaztkZWZhdWx0Om4udW5pZm9ybXNbdV0udmFsdWU9dy52YWx1ZX19dm9pZCAwIT09Yi5kZWZpbmVzJiYobi5kZWZpbmVzPWIuZGVmaW5lcyk7dm9pZCAwIT09Yi52ZXJ0ZXhTaGFkZXImJihuLnZlcnRleFNoYWRlcj1iLnZlcnRleFNoYWRlcik7dm9pZCAwIT09Yi5mcmFnbWVudFNoYWRlciYmKG4uZnJhZ21lbnRTaGFkZXI9Yi5mcmFnbWVudFNoYWRlcik7aWYodm9pZCAwIT09Yi5leHRlbnNpb25zKWZvcih2YXIgeiBpbiBiLmV4dGVuc2lvbnMpbi5leHRlbnNpb25zW3pdPWIuZXh0ZW5zaW9uc1t6XTt2b2lkIDAhPT1iLnNoYWRpbmcmJihuLmZsYXRTaGFkaW5nPTE9PT1iLnNoYWRpbmcpO3ZvaWQgMCE9PWIuc2l6ZSYmKG4uc2l6ZT1iLnNpemUpO3ZvaWQgMCE9PWIuc2l6ZUF0dGVudWF0aW9uJiYKKG4uc2l6ZUF0dGVudWF0aW9uPWIuc2l6ZUF0dGVudWF0aW9uKTt2b2lkIDAhPT1iLm1hcCYmKG4ubWFwPWUoYi5tYXApKTt2b2lkIDAhPT1iLm1hdGNhcCYmKG4ubWF0Y2FwPWUoYi5tYXRjYXApKTt2b2lkIDAhPT1iLmFscGhhTWFwJiYobi5hbHBoYU1hcD1lKGIuYWxwaGFNYXApLG4udHJhbnNwYXJlbnQ9ITApO3ZvaWQgMCE9PWIuYnVtcE1hcCYmKG4uYnVtcE1hcD1lKGIuYnVtcE1hcCkpO3ZvaWQgMCE9PWIuYnVtcFNjYWxlJiYobi5idW1wU2NhbGU9Yi5idW1wU2NhbGUpO3ZvaWQgMCE9PWIubm9ybWFsTWFwJiYobi5ub3JtYWxNYXA9ZShiLm5vcm1hbE1hcCkpO3ZvaWQgMCE9PWIubm9ybWFsTWFwVHlwZSYmKG4ubm9ybWFsTWFwVHlwZT1iLm5vcm1hbE1hcFR5cGUpO3ZvaWQgMCE9PWIubm9ybWFsU2NhbGUmJih1PWIubm9ybWFsU2NhbGUsITE9PT1BcnJheS5pc0FycmF5KHUpJiYodT1bdSx1XSksbi5ub3JtYWxTY2FsZT0obmV3IGQpLmZyb21BcnJheSh1KSk7dm9pZCAwIT09CmIuZGlzcGxhY2VtZW50TWFwJiYobi5kaXNwbGFjZW1lbnRNYXA9ZShiLmRpc3BsYWNlbWVudE1hcCkpO3ZvaWQgMCE9PWIuZGlzcGxhY2VtZW50U2NhbGUmJihuLmRpc3BsYWNlbWVudFNjYWxlPWIuZGlzcGxhY2VtZW50U2NhbGUpO3ZvaWQgMCE9PWIuZGlzcGxhY2VtZW50QmlhcyYmKG4uZGlzcGxhY2VtZW50Qmlhcz1iLmRpc3BsYWNlbWVudEJpYXMpO3ZvaWQgMCE9PWIucm91Z2huZXNzTWFwJiYobi5yb3VnaG5lc3NNYXA9ZShiLnJvdWdobmVzc01hcCkpO3ZvaWQgMCE9PWIubWV0YWxuZXNzTWFwJiYobi5tZXRhbG5lc3NNYXA9ZShiLm1ldGFsbmVzc01hcCkpO3ZvaWQgMCE9PWIuZW1pc3NpdmVNYXAmJihuLmVtaXNzaXZlTWFwPWUoYi5lbWlzc2l2ZU1hcCkpO3ZvaWQgMCE9PWIuZW1pc3NpdmVJbnRlbnNpdHkmJihuLmVtaXNzaXZlSW50ZW5zaXR5PWIuZW1pc3NpdmVJbnRlbnNpdHkpO3ZvaWQgMCE9PWIuc3BlY3VsYXJNYXAmJihuLnNwZWN1bGFyTWFwPWUoYi5zcGVjdWxhck1hcCkpOwp2b2lkIDAhPT1iLmVudk1hcCYmKG4uZW52TWFwPWUoYi5lbnZNYXApKTt2b2lkIDAhPT1iLmVudk1hcEludGVuc2l0eSYmKG4uZW52TWFwSW50ZW5zaXR5PWIuZW52TWFwSW50ZW5zaXR5KTt2b2lkIDAhPT1iLnJlZmxlY3Rpdml0eSYmKG4ucmVmbGVjdGl2aXR5PWIucmVmbGVjdGl2aXR5KTt2b2lkIDAhPT1iLmxpZ2h0TWFwJiYobi5saWdodE1hcD1lKGIubGlnaHRNYXApKTt2b2lkIDAhPT1iLmxpZ2h0TWFwSW50ZW5zaXR5JiYobi5saWdodE1hcEludGVuc2l0eT1iLmxpZ2h0TWFwSW50ZW5zaXR5KTt2b2lkIDAhPT1iLmFvTWFwJiYobi5hb01hcD1lKGIuYW9NYXApKTt2b2lkIDAhPT1iLmFvTWFwSW50ZW5zaXR5JiYobi5hb01hcEludGVuc2l0eT1iLmFvTWFwSW50ZW5zaXR5KTt2b2lkIDAhPT1iLmdyYWRpZW50TWFwJiYobi5ncmFkaWVudE1hcD1lKGIuZ3JhZGllbnRNYXApKTtyZXR1cm4gbn0sc2V0UGF0aDpmdW5jdGlvbihiKXt0aGlzLnBhdGg9YjtyZXR1cm4gdGhpc30sc2V0VGV4dHVyZXM6ZnVuY3Rpb24oYil7dGhpcy50ZXh0dXJlcz0KYjtyZXR1cm4gdGhpc319KTt2YXIgaGo9e2RlY29kZVRleHQ6ZnVuY3Rpb24oYil7aWYoInVuZGVmaW5lZCIhPT10eXBlb2YgVGV4dERlY29kZXIpcmV0dXJuKG5ldyBUZXh0RGVjb2RlcikuZGVjb2RlKGIpO2Zvcih2YXIgZT0iIixoPTAsbj1iLmxlbmd0aDtoPG47aCsrKWUrPVN0cmluZy5mcm9tQ2hhckNvZGUoYltoXSk7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChlc2NhcGUoZSkpfSxleHRyYWN0VXJsQmFzZTpmdW5jdGlvbihiKXt2YXIgZT1iLmxhc3RJbmRleE9mKCIvIik7cmV0dXJuLTE9PT1lPyIuLyI6Yi5zdWJzdHIoMCxlKzEpfX07T2JqZWN0LmFzc2lnbihIaS5wcm90b3R5cGUse2xvYWQ6ZnVuY3Rpb24oYixlLGgsbil7dmFyIHU9dGhpcyx3PW5ldyBVYyh1Lm1hbmFnZXIpO3cuc2V0UGF0aCh1LnBhdGgpO3cubG9hZChiLGZ1bmN0aW9uKHope2UodS5wYXJzZShKU09OLnBhcnNlKHopKSl9LGgsbil9LHBhcnNlOmZ1bmN0aW9uKGIpe3ZhciBlPW5ldyB4YSxoPWIuZGF0YS5pbmRleDsKaWYodm9pZCAwIT09aCl7dmFyIG49bmV3IGlqW2gudHlwZV0oaC5hcnJheSk7ZS5zZXRJbmRleChuZXcgVChuLDEpKX1oPWIuZGF0YS5hdHRyaWJ1dGVzO2Zvcih2YXIgdSBpbiBoKXt2YXIgdz1oW3VdO249bmV3IGlqW3cudHlwZV0ody5hcnJheSk7bj1uZXcgVChuLHcuaXRlbVNpemUsdy5ub3JtYWxpemVkKTt2b2lkIDAhPT13Lm5hbWUmJihuLm5hbWU9dy5uYW1lKTtlLmFkZEF0dHJpYnV0ZSh1LG4pfXZhciB6PWIuZGF0YS5tb3JwaEF0dHJpYnV0ZXM7aWYoeilmb3IodSBpbiB6KXt2YXIgRT16W3VdLEg9W107aD0wO2Zvcih2YXIgST1FLmxlbmd0aDtoPEk7aCsrKXc9RVtoXSxuPW5ldyBpalt3LnR5cGVdKHcuYXJyYXkpLG49bmV3IFQobix3Lml0ZW1TaXplLHcubm9ybWFsaXplZCksdm9pZCAwIT09dy5uYW1lJiYobi5uYW1lPXcubmFtZSksSC5wdXNoKG4pO2UubW9ycGhBdHRyaWJ1dGVzW3VdPUh9dT1iLmRhdGEuZ3JvdXBzfHxiLmRhdGEuZHJhd2NhbGxzfHxiLmRhdGEub2Zmc2V0czsKaWYodm9pZCAwIT09dSlmb3IoaD0wLHc9dS5sZW5ndGg7aCE9PXc7KytoKW49dVtoXSxlLmFkZEdyb3VwKG4uc3RhcnQsbi5jb3VudCxuLm1hdGVyaWFsSW5kZXgpO2g9Yi5kYXRhLmJvdW5kaW5nU3BoZXJlO3ZvaWQgMCE9PWgmJih1PW5ldyBnLHZvaWQgMCE9PWguY2VudGVyJiZ1LmZyb21BcnJheShoLmNlbnRlciksZS5ib3VuZGluZ1NwaGVyZT1uZXcgQSh1LGgucmFkaXVzKSk7Yi5uYW1lJiYoZS5uYW1lPWIubmFtZSk7Yi51c2VyRGF0YSYmKGUudXNlckRhdGE9Yi51c2VyRGF0YSk7cmV0dXJuIGV9LHNldFBhdGg6ZnVuY3Rpb24oYil7dGhpcy5wYXRoPWI7cmV0dXJuIHRoaXN9fSk7dmFyIGlqPXtJbnQ4QXJyYXksVWludDhBcnJheSxVaW50OENsYW1wZWRBcnJheToidW5kZWZpbmVkIiE9PXR5cGVvZiBVaW50OENsYW1wZWRBcnJheT9VaW50OENsYW1wZWRBcnJheTpVaW50OEFycmF5LEludDE2QXJyYXksVWludDE2QXJyYXksSW50MzJBcnJheSxVaW50MzJBcnJheSxGbG9hdDMyQXJyYXksCkZsb2F0NjRBcnJheX07T2JqZWN0LmFzc2lnbihJaS5wcm90b3R5cGUse2Nyb3NzT3JpZ2luOiJhbm9ueW1vdXMiLGxvYWQ6ZnVuY3Rpb24oYixlLGgsbil7dmFyIHU9dGhpcyx3PXZvaWQgMD09PXRoaXMucGF0aD9oai5leHRyYWN0VXJsQmFzZShiKTp0aGlzLnBhdGg7dGhpcy5yZXNvdXJjZVBhdGg9dGhpcy5yZXNvdXJjZVBhdGh8fHc7dz1uZXcgVWModS5tYW5hZ2VyKTt3LnNldFBhdGgodGhpcy5wYXRoKTt3LmxvYWQoYixmdW5jdGlvbih6KXt2YXIgRT1udWxsO3RyeXtFPUpTT04ucGFyc2Uoeil9Y2F0Y2goSCl7dm9pZCAwIT09biYmbihIKTtjb25zb2xlLmVycm9yKCJUSFJFRTpPYmplY3RMb2FkZXI6IENhbid0IHBhcnNlICIrYisiLiIsSC5tZXNzYWdlKTtyZXR1cm59ej1FLm1ldGFkYXRhO3ZvaWQgMD09PXp8fHZvaWQgMD09PXoudHlwZXx8Imdlb21ldHJ5Ij09PXoudHlwZS50b0xvd2VyQ2FzZSgpP2NvbnNvbGUuZXJyb3IoIlRIUkVFLk9iamVjdExvYWRlcjogQ2FuJ3QgbG9hZCAiKwpiKTp1LnBhcnNlKEUsZSl9LGgsbil9LHNldFBhdGg6ZnVuY3Rpb24oYil7dGhpcy5wYXRoPWI7cmV0dXJuIHRoaXN9LHNldFJlc291cmNlUGF0aDpmdW5jdGlvbihiKXt0aGlzLnJlc291cmNlUGF0aD1iO3JldHVybiB0aGlzfSxzZXRDcm9zc09yaWdpbjpmdW5jdGlvbihiKXt0aGlzLmNyb3NzT3JpZ2luPWI7cmV0dXJuIHRoaXN9LHBhcnNlOmZ1bmN0aW9uKGIsZSl7dmFyIGg9dGhpcy5wYXJzZVNoYXBlKGIuc2hhcGVzKTtoPXRoaXMucGFyc2VHZW9tZXRyaWVzKGIuZ2VvbWV0cmllcyxoKTt2YXIgbj10aGlzLnBhcnNlSW1hZ2VzKGIuaW1hZ2VzLGZ1bmN0aW9uKCl7dm9pZCAwIT09ZSYmZSh1KX0pO249dGhpcy5wYXJzZVRleHR1cmVzKGIudGV4dHVyZXMsbik7bj10aGlzLnBhcnNlTWF0ZXJpYWxzKGIubWF0ZXJpYWxzLG4pO3ZhciB1PXRoaXMucGFyc2VPYmplY3QoYi5vYmplY3QsaCxuKTtiLmFuaW1hdGlvbnMmJih1LmFuaW1hdGlvbnM9dGhpcy5wYXJzZUFuaW1hdGlvbnMoYi5hbmltYXRpb25zKSk7CnZvaWQgMCE9PWIuaW1hZ2VzJiYwIT09Yi5pbWFnZXMubGVuZ3RofHx2b2lkIDA9PT1lfHxlKHUpO3JldHVybiB1fSxwYXJzZVNoYXBlOmZ1bmN0aW9uKGIpe3ZhciBlPXt9O2lmKHZvaWQgMCE9PWIpZm9yKHZhciBoPTAsbj1iLmxlbmd0aDtoPG47aCsrKXt2YXIgdT0obmV3IFhkKS5mcm9tSlNPTihiW2hdKTtlW3UudXVpZF09dX1yZXR1cm4gZX0scGFyc2VHZW9tZXRyaWVzOmZ1bmN0aW9uKGIsZSl7dmFyIGg9e307aWYodm9pZCAwIT09Yilmb3IodmFyIG49bmV3IEhpLHU9MCx3PWIubGVuZ3RoO3U8dzt1Kyspe3ZhciB6PWJbdV07c3dpdGNoKHoudHlwZSl7Y2FzZSAiUGxhbmVHZW9tZXRyeSI6Y2FzZSAiUGxhbmVCdWZmZXJHZW9tZXRyeSI6dmFyIEU9bmV3IHhjW3oudHlwZV0oei53aWR0aCx6LmhlaWdodCx6LndpZHRoU2VnbWVudHMsei5oZWlnaHRTZWdtZW50cyk7YnJlYWs7Y2FzZSAiQm94R2VvbWV0cnkiOmNhc2UgIkJveEJ1ZmZlckdlb21ldHJ5IjpjYXNlICJDdWJlR2VvbWV0cnkiOkU9Cm5ldyB4Y1t6LnR5cGVdKHoud2lkdGgsei5oZWlnaHQsei5kZXB0aCx6LndpZHRoU2VnbWVudHMsei5oZWlnaHRTZWdtZW50cyx6LmRlcHRoU2VnbWVudHMpO2JyZWFrO2Nhc2UgIkNpcmNsZUdlb21ldHJ5IjpjYXNlICJDaXJjbGVCdWZmZXJHZW9tZXRyeSI6RT1uZXcgeGNbei50eXBlXSh6LnJhZGl1cyx6LnNlZ21lbnRzLHoudGhldGFTdGFydCx6LnRoZXRhTGVuZ3RoKTticmVhaztjYXNlICJDeWxpbmRlckdlb21ldHJ5IjpjYXNlICJDeWxpbmRlckJ1ZmZlckdlb21ldHJ5IjpFPW5ldyB4Y1t6LnR5cGVdKHoucmFkaXVzVG9wLHoucmFkaXVzQm90dG9tLHouaGVpZ2h0LHoucmFkaWFsU2VnbWVudHMsei5oZWlnaHRTZWdtZW50cyx6Lm9wZW5FbmRlZCx6LnRoZXRhU3RhcnQsei50aGV0YUxlbmd0aCk7YnJlYWs7Y2FzZSAiQ29uZUdlb21ldHJ5IjpjYXNlICJDb25lQnVmZmVyR2VvbWV0cnkiOkU9bmV3IHhjW3oudHlwZV0oei5yYWRpdXMsei5oZWlnaHQsei5yYWRpYWxTZWdtZW50cywKei5oZWlnaHRTZWdtZW50cyx6Lm9wZW5FbmRlZCx6LnRoZXRhU3RhcnQsei50aGV0YUxlbmd0aCk7YnJlYWs7Y2FzZSAiU3BoZXJlR2VvbWV0cnkiOmNhc2UgIlNwaGVyZUJ1ZmZlckdlb21ldHJ5IjpFPW5ldyB4Y1t6LnR5cGVdKHoucmFkaXVzLHoud2lkdGhTZWdtZW50cyx6LmhlaWdodFNlZ21lbnRzLHoucGhpU3RhcnQsei5waGlMZW5ndGgsei50aGV0YVN0YXJ0LHoudGhldGFMZW5ndGgpO2JyZWFrO2Nhc2UgIkRvZGVjYWhlZHJvbkdlb21ldHJ5IjpjYXNlICJEb2RlY2FoZWRyb25CdWZmZXJHZW9tZXRyeSI6Y2FzZSAiSWNvc2FoZWRyb25HZW9tZXRyeSI6Y2FzZSAiSWNvc2FoZWRyb25CdWZmZXJHZW9tZXRyeSI6Y2FzZSAiT2N0YWhlZHJvbkdlb21ldHJ5IjpjYXNlICJPY3RhaGVkcm9uQnVmZmVyR2VvbWV0cnkiOmNhc2UgIlRldHJhaGVkcm9uR2VvbWV0cnkiOmNhc2UgIlRldHJhaGVkcm9uQnVmZmVyR2VvbWV0cnkiOkU9bmV3IHhjW3oudHlwZV0oei5yYWRpdXMsei5kZXRhaWwpOwpicmVhaztjYXNlICJSaW5nR2VvbWV0cnkiOmNhc2UgIlJpbmdCdWZmZXJHZW9tZXRyeSI6RT1uZXcgeGNbei50eXBlXSh6LmlubmVyUmFkaXVzLHoub3V0ZXJSYWRpdXMsei50aGV0YVNlZ21lbnRzLHoucGhpU2VnbWVudHMsei50aGV0YVN0YXJ0LHoudGhldGFMZW5ndGgpO2JyZWFrO2Nhc2UgIlRvcnVzR2VvbWV0cnkiOmNhc2UgIlRvcnVzQnVmZmVyR2VvbWV0cnkiOkU9bmV3IHhjW3oudHlwZV0oei5yYWRpdXMsei50dWJlLHoucmFkaWFsU2VnbWVudHMsei50dWJ1bGFyU2VnbWVudHMsei5hcmMpO2JyZWFrO2Nhc2UgIlRvcnVzS25vdEdlb21ldHJ5IjpjYXNlICJUb3J1c0tub3RCdWZmZXJHZW9tZXRyeSI6RT1uZXcgeGNbei50eXBlXSh6LnJhZGl1cyx6LnR1YmUsei50dWJ1bGFyU2VnbWVudHMsei5yYWRpYWxTZWdtZW50cyx6LnAsei5xKTticmVhaztjYXNlICJUdWJlR2VvbWV0cnkiOmNhc2UgIlR1YmVCdWZmZXJHZW9tZXRyeSI6RT1uZXcgeGNbei50eXBlXSgobmV3IGdqW3oucGF0aC50eXBlXSkuZnJvbUpTT04oei5wYXRoKSwKei50dWJ1bGFyU2VnbWVudHMsei5yYWRpdXMsei5yYWRpYWxTZWdtZW50cyx6LmNsb3NlZCk7YnJlYWs7Y2FzZSAiTGF0aGVHZW9tZXRyeSI6Y2FzZSAiTGF0aGVCdWZmZXJHZW9tZXRyeSI6RT1uZXcgeGNbei50eXBlXSh6LnBvaW50cyx6LnNlZ21lbnRzLHoucGhpU3RhcnQsei5waGlMZW5ndGgpO2JyZWFrO2Nhc2UgIlBvbHloZWRyb25HZW9tZXRyeSI6Y2FzZSAiUG9seWhlZHJvbkJ1ZmZlckdlb21ldHJ5IjpFPW5ldyB4Y1t6LnR5cGVdKHoudmVydGljZXMsei5pbmRpY2VzLHoucmFkaXVzLHouZGV0YWlscyk7YnJlYWs7Y2FzZSAiU2hhcGVHZW9tZXRyeSI6Y2FzZSAiU2hhcGVCdWZmZXJHZW9tZXRyeSI6RT1bXTtmb3IodmFyIEg9MCxJPXouc2hhcGVzLmxlbmd0aDtIPEk7SCsrKXt2YXIgTz1lW3ouc2hhcGVzW0hdXTtFLnB1c2goTyl9RT1uZXcgeGNbei50eXBlXShFLHouY3VydmVTZWdtZW50cyk7YnJlYWs7Y2FzZSAiRXh0cnVkZUdlb21ldHJ5IjpjYXNlICJFeHRydWRlQnVmZmVyR2VvbWV0cnkiOkU9CltdO0g9MDtmb3IoST16LnNoYXBlcy5sZW5ndGg7SDxJO0grKylPPWVbei5zaGFwZXNbSF1dLEUucHVzaChPKTtIPXoub3B0aW9ucy5leHRydWRlUGF0aDt2b2lkIDAhPT1IJiYoei5vcHRpb25zLmV4dHJ1ZGVQYXRoPShuZXcgZ2pbSC50eXBlXSkuZnJvbUpTT04oSCkpO0U9bmV3IHhjW3oudHlwZV0oRSx6Lm9wdGlvbnMpO2JyZWFrO2Nhc2UgIkJ1ZmZlckdlb21ldHJ5IjpFPW4ucGFyc2Uoeik7YnJlYWs7Y2FzZSAiR2VvbWV0cnkiOiJUSFJFRSJpbiB3aW5kb3cmJiJMZWdhY3lKU09OTG9hZGVyImluIFRIUkVFP0U9KG5ldyBUSFJFRS5MZWdhY3lKU09OTG9hZGVyKS5wYXJzZSh6LHRoaXMucmVzb3VyY2VQYXRoKS5nZW9tZXRyeTpjb25zb2xlLmVycm9yKCdUSFJFRS5PYmplY3RMb2FkZXI6IFlvdSBoYXZlIHRvIGltcG9ydCBMZWdhY3lKU09OTG9hZGVyIGluIG9yZGVyIGxvYWQgZ2VvbWV0cnkgZGF0YSBvZiB0eXBlICJHZW9tZXRyeSIuJyk7YnJlYWs7ZGVmYXVsdDpjb25zb2xlLndhcm4oJ1RIUkVFLk9iamVjdExvYWRlcjogVW5zdXBwb3J0ZWQgZ2VvbWV0cnkgdHlwZSAiJysKei50eXBlKyciJyk7Y29udGludWV9RS51dWlkPXoudXVpZDt2b2lkIDAhPT16Lm5hbWUmJihFLm5hbWU9ei5uYW1lKTshMD09PUUuaXNCdWZmZXJHZW9tZXRyeSYmdm9pZCAwIT09ei51c2VyRGF0YSYmKEUudXNlckRhdGE9ei51c2VyRGF0YSk7aFt6LnV1aWRdPUV9cmV0dXJuIGh9LHBhcnNlTWF0ZXJpYWxzOmZ1bmN0aW9uKGIsZSl7dmFyIGg9e30sbj17fTtpZih2b2lkIDAhPT1iKXt2YXIgdT1uZXcgQmg7dS5zZXRUZXh0dXJlcyhlKTtlPTA7Zm9yKHZhciB3PWIubGVuZ3RoO2U8dztlKyspe3ZhciB6PWJbZV07aWYoIk11bHRpTWF0ZXJpYWwiPT09ei50eXBlKXtmb3IodmFyIEU9W10sSD0wO0g8ei5tYXRlcmlhbHMubGVuZ3RoO0grKyl7dmFyIEk9ei5tYXRlcmlhbHNbSF07dm9pZCAwPT09aFtJLnV1aWRdJiYoaFtJLnV1aWRdPXUucGFyc2UoSSkpO0UucHVzaChoW0kudXVpZF0pfW5bei51dWlkXT1FfWVsc2Ugdm9pZCAwPT09aFt6LnV1aWRdJiYoaFt6LnV1aWRdPXUucGFyc2UoeikpLApuW3oudXVpZF09aFt6LnV1aWRdfX1yZXR1cm4gbn0scGFyc2VBbmltYXRpb25zOmZ1bmN0aW9uKGIpe2Zvcih2YXIgZT1bXSxoPTA7aDxiLmxlbmd0aDtoKyspe3ZhciBuPWJbaF0sdT1JYy5wYXJzZShuKTt2b2lkIDAhPT1uLnV1aWQmJih1LnV1aWQ9bi51dWlkKTtlLnB1c2godSl9cmV0dXJuIGV9LHBhcnNlSW1hZ2VzOmZ1bmN0aW9uKGIsZSl7ZnVuY3Rpb24gaChSKXtuLm1hbmFnZXIuaXRlbVN0YXJ0KFIpO3JldHVybiB3LmxvYWQoUixmdW5jdGlvbigpe24ubWFuYWdlci5pdGVtRW5kKFIpfSx2b2lkIDAsZnVuY3Rpb24oKXtuLm1hbmFnZXIuaXRlbUVycm9yKFIpO24ubWFuYWdlci5pdGVtRW5kKFIpfSl9dmFyIG49dGhpcyx1PXt9O2lmKHZvaWQgMCE9PWImJjA8Yi5sZW5ndGgpe2U9bmV3IERpKGUpO3ZhciB3PW5ldyBzZyhlKTt3LnNldENyb3NzT3JpZ2luKHRoaXMuY3Jvc3NPcmlnaW4pO2U9MDtmb3IodmFyIHo9Yi5sZW5ndGg7ZTx6O2UrKyl7dmFyIEU9YltlXSxIPUUudXJsOwppZihBcnJheS5pc0FycmF5KEgpKXt1W0UudXVpZF09W107Zm9yKHZhciBJPTAsTz1ILmxlbmd0aDtJPE87SSsrKXt2YXIgUT1IW0ldO1E9L14oXC9cLyl8KFthLXpdKzooXC9cLyk/KS9pLnRlc3QoUSk/UTpuLnJlc291cmNlUGF0aCtRO3VbRS51dWlkXS5wdXNoKGgoUSkpfX1lbHNlIFE9L14oXC9cLyl8KFthLXpdKzooXC9cLyk/KS9pLnRlc3QoRS51cmwpP0UudXJsOm4ucmVzb3VyY2VQYXRoK0UudXJsLHVbRS51dWlkXT1oKFEpfX1yZXR1cm4gdX0scGFyc2VUZXh0dXJlczpmdW5jdGlvbihiLGUpe2Z1bmN0aW9uIGgoSCxJKXtpZigibnVtYmVyIj09PXR5cGVvZiBIKXJldHVybiBIO2NvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0TG9hZGVyLnBhcnNlVGV4dHVyZTogQ29uc3RhbnQgc2hvdWxkIGJlIGluIG51bWVyaWMgZm9ybS4iLEgpO3JldHVybiBJW0hdfXZhciBuPXt9O2lmKHZvaWQgMCE9PWIpZm9yKHZhciB1PTAsdz1iLmxlbmd0aDt1PHc7dSsrKXt2YXIgej1iW3VdO3ZvaWQgMD09PQp6LmltYWdlJiZjb25zb2xlLndhcm4oJ1RIUkVFLk9iamVjdExvYWRlcjogTm8gImltYWdlIiBzcGVjaWZpZWQgZm9yJyx6LnV1aWQpO3ZvaWQgMD09PWVbei5pbWFnZV0mJmNvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0TG9hZGVyOiBVbmRlZmluZWQgaW1hZ2UiLHouaW1hZ2UpO3ZhciBFPUFycmF5LmlzQXJyYXkoZVt6LmltYWdlXSk/bmV3IHVkKGVbei5pbWFnZV0pOm5ldyBrKGVbei5pbWFnZV0pO0UubmVlZHNVcGRhdGU9ITA7RS51dWlkPXoudXVpZDt2b2lkIDAhPT16Lm5hbWUmJihFLm5hbWU9ei5uYW1lKTt2b2lkIDAhPT16Lm1hcHBpbmcmJihFLm1hcHBpbmc9aCh6Lm1hcHBpbmcscHApKTt2b2lkIDAhPT16Lm9mZnNldCYmRS5vZmZzZXQuZnJvbUFycmF5KHoub2Zmc2V0KTt2b2lkIDAhPT16LnJlcGVhdCYmRS5yZXBlYXQuZnJvbUFycmF5KHoucmVwZWF0KTt2b2lkIDAhPT16LmNlbnRlciYmRS5jZW50ZXIuZnJvbUFycmF5KHouY2VudGVyKTt2b2lkIDAhPT16LnJvdGF0aW9uJiYKKEUucm90YXRpb249ei5yb3RhdGlvbik7dm9pZCAwIT09ei53cmFwJiYoRS53cmFwUz1oKHoud3JhcFswXSxUbCksRS53cmFwVD1oKHoud3JhcFsxXSxUbCkpO3ZvaWQgMCE9PXouZm9ybWF0JiYoRS5mb3JtYXQ9ei5mb3JtYXQpO3ZvaWQgMCE9PXoudHlwZSYmKEUudHlwZT16LnR5cGUpO3ZvaWQgMCE9PXouZW5jb2RpbmcmJihFLmVuY29kaW5nPXouZW5jb2RpbmcpO3ZvaWQgMCE9PXoubWluRmlsdGVyJiYoRS5taW5GaWx0ZXI9aCh6Lm1pbkZpbHRlcixVbCkpO3ZvaWQgMCE9PXoubWFnRmlsdGVyJiYoRS5tYWdGaWx0ZXI9aCh6Lm1hZ0ZpbHRlcixVbCkpO3ZvaWQgMCE9PXouYW5pc290cm9weSYmKEUuYW5pc290cm9weT16LmFuaXNvdHJvcHkpO3ZvaWQgMCE9PXouZmxpcFkmJihFLmZsaXBZPXouZmxpcFkpO3ZvaWQgMCE9PXoucHJlbXVsdGlwbHlBbHBoYSYmKEUucHJlbXVsdGlwbHlBbHBoYT16LnByZW11bHRpcGx5QWxwaGEpO3ZvaWQgMCE9PXoudW5wYWNrQWxpZ25tZW50JiYoRS51bnBhY2tBbGlnbm1lbnQ9CnoudW5wYWNrQWxpZ25tZW50KTtuW3oudXVpZF09RX1yZXR1cm4gbn0scGFyc2VPYmplY3Q6ZnVuY3Rpb24oYixlLGgpe2Z1bmN0aW9uIG4oSSl7dm9pZCAwPT09ZVtJXSYmY29uc29sZS53YXJuKCJUSFJFRS5PYmplY3RMb2FkZXI6IFVuZGVmaW5lZCBnZW9tZXRyeSIsSSk7cmV0dXJuIGVbSV19ZnVuY3Rpb24gdShJKXtpZih2b2lkIDAhPT1JKXtpZihBcnJheS5pc0FycmF5KEkpKXtmb3IodmFyIE89W10sUT0wLFI9SS5sZW5ndGg7UTxSO1ErKyl7dmFyIFU9SVtRXTt2b2lkIDA9PT1oW1VdJiZjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdExvYWRlcjogVW5kZWZpbmVkIG1hdGVyaWFsIixVKTtPLnB1c2goaFtVXSl9cmV0dXJuIE99dm9pZCAwPT09aFtJXSYmY29uc29sZS53YXJuKCJUSFJFRS5PYmplY3RMb2FkZXI6IFVuZGVmaW5lZCBtYXRlcmlhbCIsSSk7cmV0dXJuIGhbSV19fXN3aXRjaChiLnR5cGUpe2Nhc2UgIlNjZW5lIjp2YXIgdz1uZXcgaWg7dm9pZCAwIT09Yi5iYWNrZ3JvdW5kJiYKTnVtYmVyLmlzSW50ZWdlcihiLmJhY2tncm91bmQpJiYody5iYWNrZ3JvdW5kPW5ldyBCKGIuYmFja2dyb3VuZCkpO3ZvaWQgMCE9PWIuZm9nJiYoIkZvZyI9PT1iLmZvZy50eXBlP3cuZm9nPW5ldyBoaChiLmZvZy5jb2xvcixiLmZvZy5uZWFyLGIuZm9nLmZhcik6IkZvZ0V4cDIiPT09Yi5mb2cudHlwZSYmKHcuZm9nPW5ldyBnaChiLmZvZy5jb2xvcixiLmZvZy5kZW5zaXR5KSkpO2JyZWFrO2Nhc2UgIlBlcnNwZWN0aXZlQ2FtZXJhIjp3PW5ldyBjYyhiLmZvdixiLmFzcGVjdCxiLm5lYXIsYi5mYXIpO3ZvaWQgMCE9PWIuZm9jdXMmJih3LmZvY3VzPWIuZm9jdXMpO3ZvaWQgMCE9PWIuem9vbSYmKHcuem9vbT1iLnpvb20pO3ZvaWQgMCE9PWIuZmlsbUdhdWdlJiYody5maWxtR2F1Z2U9Yi5maWxtR2F1Z2UpO3ZvaWQgMCE9PWIuZmlsbU9mZnNldCYmKHcuZmlsbU9mZnNldD1iLmZpbG1PZmZzZXQpO3ZvaWQgMCE9PWIudmlldyYmKHcudmlldz1PYmplY3QuYXNzaWduKHt9LGIudmlldykpOwpicmVhaztjYXNlICJPcnRob2dyYXBoaWNDYW1lcmEiOnc9bmV3IHZnKGIubGVmdCxiLnJpZ2h0LGIudG9wLGIuYm90dG9tLGIubmVhcixiLmZhcik7dm9pZCAwIT09Yi56b29tJiYody56b29tPWIuem9vbSk7dm9pZCAwIT09Yi52aWV3JiYody52aWV3PU9iamVjdC5hc3NpZ24oe30sYi52aWV3KSk7YnJlYWs7Y2FzZSAiQW1iaWVudExpZ2h0Ijp3PW5ldyB6aChiLmNvbG9yLGIuaW50ZW5zaXR5KTticmVhaztjYXNlICJEaXJlY3Rpb25hbExpZ2h0Ijp3PW5ldyB5aChiLmNvbG9yLGIuaW50ZW5zaXR5KTticmVhaztjYXNlICJQb2ludExpZ2h0Ijp3PW5ldyB3aChiLmNvbG9yLGIuaW50ZW5zaXR5LGIuZGlzdGFuY2UsYi5kZWNheSk7YnJlYWs7Y2FzZSAiUmVjdEFyZWFMaWdodCI6dz1uZXcgQWgoYi5jb2xvcixiLmludGVuc2l0eSxiLndpZHRoLGIuaGVpZ2h0KTticmVhaztjYXNlICJTcG90TGlnaHQiOnc9bmV3IHZoKGIuY29sb3IsYi5pbnRlbnNpdHksYi5kaXN0YW5jZSxiLmFuZ2xlLApiLnBlbnVtYnJhLGIuZGVjYXkpO2JyZWFrO2Nhc2UgIkhlbWlzcGhlcmVMaWdodCI6dz1uZXcgdGgoYi5jb2xvcixiLmdyb3VuZENvbG9yLGIuaW50ZW5zaXR5KTticmVhaztjYXNlICJTa2lubmVkTWVzaCI6Y29uc29sZS53YXJuKCJUSFJFRS5PYmplY3RMb2FkZXIucGFyc2VPYmplY3QoKSBkb2VzIG5vdCBzdXBwb3J0IFNraW5uZWRNZXNoIHlldC4iKTtjYXNlICJNZXNoIjp3PW4oYi5nZW9tZXRyeSk7dmFyIHo9dShiLm1hdGVyaWFsKTt3PXcuYm9uZXMmJjA8dy5ib25lcy5sZW5ndGg/bmV3IFVmKHcseik6bmV3IHRiKHcseik7dm9pZCAwIT09Yi5kcmF3TW9kZSYmdy5zZXREcmF3TW9kZShiLmRyYXdNb2RlKTticmVhaztjYXNlICJMT0QiOnc9bmV3IFRmO2JyZWFrO2Nhc2UgIkxpbmUiOnc9bmV3IGxjKG4oYi5nZW9tZXRyeSksdShiLm1hdGVyaWFsKSxiLm1vZGUpO2JyZWFrO2Nhc2UgIkxpbmVMb29wIjp3PW5ldyBraChuKGIuZ2VvbWV0cnkpLHUoYi5tYXRlcmlhbCkpO2JyZWFrOwpjYXNlICJMaW5lU2VnbWVudHMiOnc9bmV3IFBiKG4oYi5nZW9tZXRyeSksdShiLm1hdGVyaWFsKSk7YnJlYWs7Y2FzZSAiUG9pbnRDbG91ZCI6Y2FzZSAiUG9pbnRzIjp3PW5ldyBSZShuKGIuZ2VvbWV0cnkpLHUoYi5tYXRlcmlhbCkpO2JyZWFrO2Nhc2UgIlNwcml0ZSI6dz1uZXcgU2YodShiLm1hdGVyaWFsKSk7YnJlYWs7Y2FzZSAiR3JvdXAiOnc9bmV3IE5lO2JyZWFrO2RlZmF1bHQ6dz1uZXcgU313LnV1aWQ9Yi51dWlkO3ZvaWQgMCE9PWIubmFtZSYmKHcubmFtZT1iLm5hbWUpO3ZvaWQgMCE9PWIubWF0cml4Pyh3Lm1hdHJpeC5mcm9tQXJyYXkoYi5tYXRyaXgpLHZvaWQgMCE9PWIubWF0cml4QXV0b1VwZGF0ZSYmKHcubWF0cml4QXV0b1VwZGF0ZT1iLm1hdHJpeEF1dG9VcGRhdGUpLHcubWF0cml4QXV0b1VwZGF0ZSYmdy5tYXRyaXguZGVjb21wb3NlKHcucG9zaXRpb24sdy5xdWF0ZXJuaW9uLHcuc2NhbGUpKToodm9pZCAwIT09Yi5wb3NpdGlvbiYmdy5wb3NpdGlvbi5mcm9tQXJyYXkoYi5wb3NpdGlvbiksCnZvaWQgMCE9PWIucm90YXRpb24mJncucm90YXRpb24uZnJvbUFycmF5KGIucm90YXRpb24pLHZvaWQgMCE9PWIucXVhdGVybmlvbiYmdy5xdWF0ZXJuaW9uLmZyb21BcnJheShiLnF1YXRlcm5pb24pLHZvaWQgMCE9PWIuc2NhbGUmJncuc2NhbGUuZnJvbUFycmF5KGIuc2NhbGUpKTt2b2lkIDAhPT1iLmNhc3RTaGFkb3cmJih3LmNhc3RTaGFkb3c9Yi5jYXN0U2hhZG93KTt2b2lkIDAhPT1iLnJlY2VpdmVTaGFkb3cmJih3LnJlY2VpdmVTaGFkb3c9Yi5yZWNlaXZlU2hhZG93KTtiLnNoYWRvdyYmKHZvaWQgMCE9PWIuc2hhZG93LmJpYXMmJih3LnNoYWRvdy5iaWFzPWIuc2hhZG93LmJpYXMpLHZvaWQgMCE9PWIuc2hhZG93LnJhZGl1cyYmKHcuc2hhZG93LnJhZGl1cz1iLnNoYWRvdy5yYWRpdXMpLHZvaWQgMCE9PWIuc2hhZG93Lm1hcFNpemUmJncuc2hhZG93Lm1hcFNpemUuZnJvbUFycmF5KGIuc2hhZG93Lm1hcFNpemUpLHZvaWQgMCE9PWIuc2hhZG93LmNhbWVyYSYmKHcuc2hhZG93LmNhbWVyYT0KdGhpcy5wYXJzZU9iamVjdChiLnNoYWRvdy5jYW1lcmEpKSk7dm9pZCAwIT09Yi52aXNpYmxlJiYody52aXNpYmxlPWIudmlzaWJsZSk7dm9pZCAwIT09Yi5mcnVzdHVtQ3VsbGVkJiYody5mcnVzdHVtQ3VsbGVkPWIuZnJ1c3R1bUN1bGxlZCk7dm9pZCAwIT09Yi5yZW5kZXJPcmRlciYmKHcucmVuZGVyT3JkZXI9Yi5yZW5kZXJPcmRlcik7dm9pZCAwIT09Yi51c2VyRGF0YSYmKHcudXNlckRhdGE9Yi51c2VyRGF0YSk7dm9pZCAwIT09Yi5sYXllcnMmJih3LmxheWVycy5tYXNrPWIubGF5ZXJzKTtpZih2b2lkIDAhPT1iLmNoaWxkcmVuKXt6PWIuY2hpbGRyZW47Zm9yKHZhciBFPTA7RTx6Lmxlbmd0aDtFKyspdy5hZGQodGhpcy5wYXJzZU9iamVjdCh6W0VdLGUsaCkpfWlmKCJMT0QiPT09Yi50eXBlKWZvcihiPWIubGV2ZWxzLHo9MDt6PGIubGVuZ3RoO3orKyl7RT1iW3pdO3ZhciBIPXcuZ2V0T2JqZWN0QnlQcm9wZXJ0eSgidXVpZCIsRS5vYmplY3QpO3ZvaWQgMCE9PUgmJncuYWRkTGV2ZWwoSCwKRS5kaXN0YW5jZSl9cmV0dXJuIHd9fSk7dmFyIHBwPXtVVk1hcHBpbmc6MzAwLEN1YmVSZWZsZWN0aW9uTWFwcGluZzozMDEsQ3ViZVJlZnJhY3Rpb25NYXBwaW5nOjMwMixFcXVpcmVjdGFuZ3VsYXJSZWZsZWN0aW9uTWFwcGluZzozMDMsRXF1aXJlY3Rhbmd1bGFyUmVmcmFjdGlvbk1hcHBpbmc6MzA0LFNwaGVyaWNhbFJlZmxlY3Rpb25NYXBwaW5nOjMwNSxDdWJlVVZSZWZsZWN0aW9uTWFwcGluZzozMDYsQ3ViZVVWUmVmcmFjdGlvbk1hcHBpbmc6MzA3fSxUbD17UmVwZWF0V3JhcHBpbmc6MUUzLENsYW1wVG9FZGdlV3JhcHBpbmc6MTAwMSxNaXJyb3JlZFJlcGVhdFdyYXBwaW5nOjEwMDJ9LFVsPXtOZWFyZXN0RmlsdGVyOjEwMDMsTmVhcmVzdE1pcE1hcE5lYXJlc3RGaWx0ZXI6MTAwNCxOZWFyZXN0TWlwTWFwTGluZWFyRmlsdGVyOjEwMDUsTGluZWFyRmlsdGVyOjEwMDYsTGluZWFyTWlwTWFwTmVhcmVzdEZpbHRlcjoxMDA3LExpbmVhck1pcE1hcExpbmVhckZpbHRlcjoxMDA4fTsKSmkucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpKaSxzZXRPcHRpb25zOmZ1bmN0aW9uKGIpe3RoaXMub3B0aW9ucz1iO3JldHVybiB0aGlzfSxsb2FkOmZ1bmN0aW9uKGIsZSxoLG4pe3ZvaWQgMD09PWImJihiPSIiKTt2b2lkIDAhPT10aGlzLnBhdGgmJihiPXRoaXMucGF0aCtiKTtiPXRoaXMubWFuYWdlci5yZXNvbHZlVVJMKGIpO3ZhciB1PXRoaXMsdz14ZS5nZXQoYik7aWYodm9pZCAwIT09dylyZXR1cm4gdS5tYW5hZ2VyLml0ZW1TdGFydChiKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZSYmZSh3KTt1Lm1hbmFnZXIuaXRlbUVuZChiKX0sMCksdztmZXRjaChiKS50aGVuKGZ1bmN0aW9uKHope3JldHVybiB6LmJsb2IoKX0pLnRoZW4oZnVuY3Rpb24oeil7cmV0dXJuIHZvaWQgMD09PXUub3B0aW9ucz9jcmVhdGVJbWFnZUJpdG1hcCh6KTpjcmVhdGVJbWFnZUJpdG1hcCh6LHUub3B0aW9ucyl9KS50aGVuKGZ1bmN0aW9uKHope3hlLmFkZChiLHopO2UmJmUoeik7dS5tYW5hZ2VyLml0ZW1FbmQoYil9KS5jYXRjaChmdW5jdGlvbih6KXtuJiYKbih6KTt1Lm1hbmFnZXIuaXRlbUVycm9yKGIpO3UubWFuYWdlci5pdGVtRW5kKGIpfSk7dS5tYW5hZ2VyLml0ZW1TdGFydChiKX0sc2V0Q3Jvc3NPcmlnaW46ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sc2V0UGF0aDpmdW5jdGlvbihiKXt0aGlzLnBhdGg9YjtyZXR1cm4gdGhpc319O09iamVjdC5hc3NpZ24oS2kucHJvdG90eXBlLHttb3ZlVG86ZnVuY3Rpb24oYixlKXt0aGlzLmN1cnJlbnRQYXRoPW5ldyBaYzt0aGlzLnN1YlBhdGhzLnB1c2godGhpcy5jdXJyZW50UGF0aCk7dGhpcy5jdXJyZW50UGF0aC5tb3ZlVG8oYixlKX0sbGluZVRvOmZ1bmN0aW9uKGIsZSl7dGhpcy5jdXJyZW50UGF0aC5saW5lVG8oYixlKX0scXVhZHJhdGljQ3VydmVUbzpmdW5jdGlvbihiLGUsaCxuKXt0aGlzLmN1cnJlbnRQYXRoLnF1YWRyYXRpY0N1cnZlVG8oYixlLGgsbil9LGJlemllckN1cnZlVG86ZnVuY3Rpb24oYixlLGgsbix1LHcpe3RoaXMuY3VycmVudFBhdGguYmV6aWVyQ3VydmVUbyhiLGUsCmgsbix1LHcpfSxzcGxpbmVUaHJ1OmZ1bmN0aW9uKGIpe3RoaXMuY3VycmVudFBhdGguc3BsaW5lVGhydShiKX0sdG9TaGFwZXM6ZnVuY3Rpb24oYixlKXtmdW5jdGlvbiBoKGZhKXtmb3IodmFyIHFhPVtdLHJhPTAsaWE9ZmEubGVuZ3RoO3JhPGlhO3JhKyspe3ZhciB0YT1mYVtyYV0sbmE9bmV3IFhkO25hLmN1cnZlcz10YS5jdXJ2ZXM7cWEucHVzaChuYSl9cmV0dXJuIHFhfWZ1bmN0aW9uIG4oZmEscWEpe2Zvcih2YXIgcmE9cWEubGVuZ3RoLGlhPSExLHRhPXJhLTEsbmE9MDtuYTxyYTt0YT1uYSsrKXt2YXIgdmE9cWFbdGFdLEJhPXFhW25hXSxzYT1CYS54LXZhLngsRGE9QmEueS12YS55O2lmKE1hdGguYWJzKERhKT5OdW1iZXIuRVBTSUxPTil7aWYoMD5EYSYmKHZhPXFhW25hXSxzYT0tc2EsQmE9cWFbdGFdLERhPS1EYSksIShmYS55PHZhLnl8fGZhLnk+QmEueSkpaWYoZmEueT09PXZhLnkpe2lmKGZhLng9PT12YS54KXJldHVybiEwfWVsc2V7dGE9RGEqKGZhLngtdmEueCktc2EqCihmYS55LXZhLnkpO2lmKDA9PT10YSlyZXR1cm4hMDswPnRhfHwoaWE9IWlhKX19ZWxzZSBpZihmYS55PT09dmEueSYmKEJhLng8PWZhLngmJmZhLng8PXZhLnh8fHZhLng8PWZhLngmJmZhLng8PUJhLngpKXJldHVybiEwfXJldHVybiBpYX12YXIgdT15ZC5pc0Nsb2NrV2lzZSx3PXRoaXMuc3ViUGF0aHM7aWYoMD09PXcubGVuZ3RoKXJldHVybltdO2lmKCEwPT09ZSlyZXR1cm4gaCh3KTtlPVtdO2lmKDE9PT13Lmxlbmd0aCl7dmFyIHo9d1swXTt2YXIgRT1uZXcgWGQ7RS5jdXJ2ZXM9ei5jdXJ2ZXM7ZS5wdXNoKEUpO3JldHVybiBlfXZhciBIPSF1KHdbMF0uZ2V0UG9pbnRzKCkpO0g9Yj8hSDpIO0U9W107dmFyIEk9W10sTz1bXSxRPTA7SVtRXT12b2lkIDA7T1tRXT1bXTtmb3IodmFyIFI9MCxVPXcubGVuZ3RoO1I8VTtSKyspe3o9d1tSXTt2YXIgVz16LmdldFBvaW50cygpO3ZhciBaPXUoVyk7KFo9Yj8hWjpaKT8oIUgmJklbUV0mJlErKyxJW1FdPXtzOm5ldyBYZCxwOld9LElbUV0ucy5jdXJ2ZXM9CnouY3VydmVzLEgmJlErKyxPW1FdPVtdKTpPW1FdLnB1c2goe2g6eixwOldbMF19KX1pZighSVswXSlyZXR1cm4gaCh3KTtpZigxPEkubGVuZ3RoKXtSPSExO2I9W107dT0wO2Zvcih3PUkubGVuZ3RoO3U8dzt1KyspRVt1XT1bXTt1PTA7Zm9yKHc9SS5sZW5ndGg7dTx3O3UrKylmb3Ioej1PW3VdLFo9MDtaPHoubGVuZ3RoO1orKyl7SD16W1pdO1E9ITA7Zm9yKFc9MDtXPEkubGVuZ3RoO1crKyluKEgucCxJW1ddLnApJiYodSE9PVcmJmIucHVzaCh7ZnJvbXM6dSx0b3M6Vyxob2xlOlp9KSxRPyhRPSExLEVbV10ucHVzaChIKSk6Uj0hMCk7USYmRVt1XS5wdXNoKEgpfTA8Yi5sZW5ndGgmJihSfHwoTz1FKSl9Uj0wO2Zvcih1PUkubGVuZ3RoO1I8dTtSKyspZm9yKEU9SVtSXS5zLGUucHVzaChFKSxiPU9bUl0sdz0wLHo9Yi5sZW5ndGg7dzx6O3crKylFLmhvbGVzLnB1c2goYlt3XS5oKTtyZXR1cm4gZX19KTtPYmplY3QuYXNzaWduKExpLnByb3RvdHlwZSx7aXNGb250OiEwLGdlbmVyYXRlU2hhcGVzOmZ1bmN0aW9uKGIsCmUpe3ZvaWQgMD09PWUmJihlPTEwMCk7dmFyIGg9W107Yj1qcChiLGUsdGhpcy5kYXRhKTtlPTA7Zm9yKHZhciBuPWIubGVuZ3RoO2U8bjtlKyspQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkoaCxiW2VdLnRvU2hhcGVzKCkpO3JldHVybiBofX0pO09iamVjdC5hc3NpZ24oSGwucHJvdG90eXBlLHtsb2FkOmZ1bmN0aW9uKGIsZSxoLG4pe3ZhciB1PXRoaXMsdz1uZXcgVWModGhpcy5tYW5hZ2VyKTt3LnNldFBhdGgodGhpcy5wYXRoKTt3LmxvYWQoYixmdW5jdGlvbih6KXt0cnl7dmFyIEU9SlNPTi5wYXJzZSh6KX1jYXRjaChIKXtjb25zb2xlLndhcm4oIlRIUkVFLkZvbnRMb2FkZXI6IHR5cGVmYWNlLmpzIHN1cHBvcnQgaXMgYmVpbmcgZGVwcmVjYXRlZC4gVXNlIHR5cGVmYWNlLmpzb24gaW5zdGVhZC4iKSxFPUpTT04ucGFyc2Uoei5zdWJzdHJpbmcoNjUsei5sZW5ndGgtMikpfXo9dS5wYXJzZShFKTtlJiZlKHopfSxoLG4pfSxwYXJzZTpmdW5jdGlvbihiKXtyZXR1cm4gbmV3IExpKGIpfSwKc2V0UGF0aDpmdW5jdGlvbihiKXt0aGlzLnBhdGg9YjtyZXR1cm4gdGhpc319KTt3Zy5IYW5kbGVycz17aGFuZGxlcnM6W10sYWRkOmZ1bmN0aW9uKGIsZSl7dGhpcy5oYW5kbGVycy5wdXNoKGIsZSl9LGdldDpmdW5jdGlvbihiKXtmb3IodmFyIGU9dGhpcy5oYW5kbGVycyxoPTAsbj1lLmxlbmd0aDtoPG47aCs9Mil7dmFyIHU9ZVtoKzFdO2lmKGVbaF0udGVzdChiKSlyZXR1cm4gdX1yZXR1cm4gbnVsbH19O09iamVjdC5hc3NpZ24od2cucHJvdG90eXBlLHtjcm9zc09yaWdpbjoiYW5vbnltb3VzIixvbkxvYWRTdGFydDpmdW5jdGlvbigpe30sb25Mb2FkUHJvZ3Jlc3M6ZnVuY3Rpb24oKXt9LG9uTG9hZENvbXBsZXRlOmZ1bmN0aW9uKCl7fSxpbml0TWF0ZXJpYWxzOmZ1bmN0aW9uKGIsZSxoKXtmb3IodmFyIG49W10sdT0wO3U8Yi5sZW5ndGg7Kyt1KW5bdV09dGhpcy5jcmVhdGVNYXRlcmlhbChiW3VdLGUsaCk7cmV0dXJuIG59LGNyZWF0ZU1hdGVyaWFsOmZ1bmN0aW9uKCl7dmFyIGI9CntOb0JsZW5kaW5nOjAsTm9ybWFsQmxlbmRpbmc6MSxBZGRpdGl2ZUJsZW5kaW5nOjIsU3VidHJhY3RpdmVCbGVuZGluZzozLE11bHRpcGx5QmxlbmRpbmc6NCxDdXN0b21CbGVuZGluZzo1fSxlPW5ldyBCLGg9bmV3IHNoLG49bmV3IEJoO3JldHVybiBmdW5jdGlvbih1LHcseil7ZnVuY3Rpb24gRShSLFUsVyxaLGZhKXtSPXcrUjt2YXIgcWE9d2cuSGFuZGxlcnMuZ2V0KFIpO251bGwhPT1xYT9SPXFhLmxvYWQoUik6KGguc2V0Q3Jvc3NPcmlnaW4oeiksUj1oLmxvYWQoUikpO3ZvaWQgMCE9PVUmJihSLnJlcGVhdC5mcm9tQXJyYXkoVSksMSE9PVVbMF0mJihSLndyYXBTPTFFMyksMSE9PVVbMV0mJihSLndyYXBUPTFFMykpO3ZvaWQgMCE9PVcmJlIub2Zmc2V0LmZyb21BcnJheShXKTt2b2lkIDAhPT1aJiYoInJlcGVhdCI9PT1aWzBdJiYoUi53cmFwUz0xRTMpLCJtaXJyb3IiPT09WlswXSYmKFIud3JhcFM9MTAwMiksInJlcGVhdCI9PT1aWzFdJiYoUi53cmFwVD0xRTMpLCJtaXJyb3IiPT09ClpbMV0mJihSLndyYXBUPTEwMDIpKTt2b2lkIDAhPT1mYSYmKFIuYW5pc290cm9weT1mYSk7VT1vYi5nZW5lcmF0ZVVVSUQoKTtIW1VdPVI7cmV0dXJuIFV9dmFyIEg9e30sST17dXVpZDpvYi5nZW5lcmF0ZVVVSUQoKSx0eXBlOiJNZXNoTGFtYmVydE1hdGVyaWFsIn0sTztmb3IoTyBpbiB1KXt2YXIgUT11W09dO3N3aXRjaChPKXtjYXNlICJEYmdDb2xvciI6Y2FzZSAiRGJnSW5kZXgiOmNhc2UgIm9wdGljYWxEZW5zaXR5IjpjYXNlICJpbGx1bWluYXRpb24iOmJyZWFrO2Nhc2UgIkRiZ05hbWUiOkkubmFtZT1RO2JyZWFrO2Nhc2UgImJsZW5kaW5nIjpJLmJsZW5kaW5nPWJbUV07YnJlYWs7Y2FzZSAiY29sb3JBbWJpZW50IjpjYXNlICJtYXBBbWJpZW50Ijpjb25zb2xlLndhcm4oIlRIUkVFLkxvYWRlci5jcmVhdGVNYXRlcmlhbDoiLE8sImlzIG5vIGxvbmdlciBzdXBwb3J0ZWQuIik7YnJlYWs7Y2FzZSAiY29sb3JEaWZmdXNlIjpJLmNvbG9yPWUuZnJvbUFycmF5KFEpLmdldEhleCgpOwpicmVhaztjYXNlICJjb2xvclNwZWN1bGFyIjpJLnNwZWN1bGFyPWUuZnJvbUFycmF5KFEpLmdldEhleCgpO2JyZWFrO2Nhc2UgImNvbG9yRW1pc3NpdmUiOkkuZW1pc3NpdmU9ZS5mcm9tQXJyYXkoUSkuZ2V0SGV4KCk7YnJlYWs7Y2FzZSAic3BlY3VsYXJDb2VmIjpJLnNoaW5pbmVzcz1RO2JyZWFrO2Nhc2UgInNoYWRpbmciOiJiYXNpYyI9PT1RLnRvTG93ZXJDYXNlKCkmJihJLnR5cGU9Ik1lc2hCYXNpY01hdGVyaWFsIik7InBob25nIj09PVEudG9Mb3dlckNhc2UoKSYmKEkudHlwZT0iTWVzaFBob25nTWF0ZXJpYWwiKTsic3RhbmRhcmQiPT09US50b0xvd2VyQ2FzZSgpJiYoSS50eXBlPSJNZXNoU3RhbmRhcmRNYXRlcmlhbCIpO2JyZWFrO2Nhc2UgIm1hcERpZmZ1c2UiOkkubWFwPUUoUSx1Lm1hcERpZmZ1c2VSZXBlYXQsdS5tYXBEaWZmdXNlT2Zmc2V0LHUubWFwRGlmZnVzZVdyYXAsdS5tYXBEaWZmdXNlQW5pc290cm9weSk7YnJlYWs7Y2FzZSAibWFwRGlmZnVzZVJlcGVhdCI6Y2FzZSAibWFwRGlmZnVzZU9mZnNldCI6Y2FzZSAibWFwRGlmZnVzZVdyYXAiOmNhc2UgIm1hcERpZmZ1c2VBbmlzb3Ryb3B5IjpicmVhazsKY2FzZSAibWFwRW1pc3NpdmUiOkkuZW1pc3NpdmVNYXA9RShRLHUubWFwRW1pc3NpdmVSZXBlYXQsdS5tYXBFbWlzc2l2ZU9mZnNldCx1Lm1hcEVtaXNzaXZlV3JhcCx1Lm1hcEVtaXNzaXZlQW5pc290cm9weSk7YnJlYWs7Y2FzZSAibWFwRW1pc3NpdmVSZXBlYXQiOmNhc2UgIm1hcEVtaXNzaXZlT2Zmc2V0IjpjYXNlICJtYXBFbWlzc2l2ZVdyYXAiOmNhc2UgIm1hcEVtaXNzaXZlQW5pc290cm9weSI6YnJlYWs7Y2FzZSAibWFwTGlnaHQiOkkubGlnaHRNYXA9RShRLHUubWFwTGlnaHRSZXBlYXQsdS5tYXBMaWdodE9mZnNldCx1Lm1hcExpZ2h0V3JhcCx1Lm1hcExpZ2h0QW5pc290cm9weSk7YnJlYWs7Y2FzZSAibWFwTGlnaHRSZXBlYXQiOmNhc2UgIm1hcExpZ2h0T2Zmc2V0IjpjYXNlICJtYXBMaWdodFdyYXAiOmNhc2UgIm1hcExpZ2h0QW5pc290cm9weSI6YnJlYWs7Y2FzZSAibWFwQU8iOkkuYW9NYXA9RShRLHUubWFwQU9SZXBlYXQsdS5tYXBBT09mZnNldCx1Lm1hcEFPV3JhcCwKdS5tYXBBT0FuaXNvdHJvcHkpO2JyZWFrO2Nhc2UgIm1hcEFPUmVwZWF0IjpjYXNlICJtYXBBT09mZnNldCI6Y2FzZSAibWFwQU9XcmFwIjpjYXNlICJtYXBBT0FuaXNvdHJvcHkiOmJyZWFrO2Nhc2UgIm1hcEJ1bXAiOkkuYnVtcE1hcD1FKFEsdS5tYXBCdW1wUmVwZWF0LHUubWFwQnVtcE9mZnNldCx1Lm1hcEJ1bXBXcmFwLHUubWFwQnVtcEFuaXNvdHJvcHkpO2JyZWFrO2Nhc2UgIm1hcEJ1bXBTY2FsZSI6SS5idW1wU2NhbGU9UTticmVhaztjYXNlICJtYXBCdW1wUmVwZWF0IjpjYXNlICJtYXBCdW1wT2Zmc2V0IjpjYXNlICJtYXBCdW1wV3JhcCI6Y2FzZSAibWFwQnVtcEFuaXNvdHJvcHkiOmJyZWFrO2Nhc2UgIm1hcE5vcm1hbCI6SS5ub3JtYWxNYXA9RShRLHUubWFwTm9ybWFsUmVwZWF0LHUubWFwTm9ybWFsT2Zmc2V0LHUubWFwTm9ybWFsV3JhcCx1Lm1hcE5vcm1hbEFuaXNvdHJvcHkpO2JyZWFrO2Nhc2UgIm1hcE5vcm1hbEZhY3RvciI6SS5ub3JtYWxTY2FsZT1RO2JyZWFrOwpjYXNlICJtYXBOb3JtYWxSZXBlYXQiOmNhc2UgIm1hcE5vcm1hbE9mZnNldCI6Y2FzZSAibWFwTm9ybWFsV3JhcCI6Y2FzZSAibWFwTm9ybWFsQW5pc290cm9weSI6YnJlYWs7Y2FzZSAibWFwU3BlY3VsYXIiOkkuc3BlY3VsYXJNYXA9RShRLHUubWFwU3BlY3VsYXJSZXBlYXQsdS5tYXBTcGVjdWxhck9mZnNldCx1Lm1hcFNwZWN1bGFyV3JhcCx1Lm1hcFNwZWN1bGFyQW5pc290cm9weSk7YnJlYWs7Y2FzZSAibWFwU3BlY3VsYXJSZXBlYXQiOmNhc2UgIm1hcFNwZWN1bGFyT2Zmc2V0IjpjYXNlICJtYXBTcGVjdWxhcldyYXAiOmNhc2UgIm1hcFNwZWN1bGFyQW5pc290cm9weSI6YnJlYWs7Y2FzZSAibWFwTWV0YWxuZXNzIjpJLm1ldGFsbmVzc01hcD1FKFEsdS5tYXBNZXRhbG5lc3NSZXBlYXQsdS5tYXBNZXRhbG5lc3NPZmZzZXQsdS5tYXBNZXRhbG5lc3NXcmFwLHUubWFwTWV0YWxuZXNzQW5pc290cm9weSk7YnJlYWs7Y2FzZSAibWFwTWV0YWxuZXNzUmVwZWF0IjpjYXNlICJtYXBNZXRhbG5lc3NPZmZzZXQiOmNhc2UgIm1hcE1ldGFsbmVzc1dyYXAiOmNhc2UgIm1hcE1ldGFsbmVzc0FuaXNvdHJvcHkiOmJyZWFrOwpjYXNlICJtYXBSb3VnaG5lc3MiOkkucm91Z2huZXNzTWFwPUUoUSx1Lm1hcFJvdWdobmVzc1JlcGVhdCx1Lm1hcFJvdWdobmVzc09mZnNldCx1Lm1hcFJvdWdobmVzc1dyYXAsdS5tYXBSb3VnaG5lc3NBbmlzb3Ryb3B5KTticmVhaztjYXNlICJtYXBSb3VnaG5lc3NSZXBlYXQiOmNhc2UgIm1hcFJvdWdobmVzc09mZnNldCI6Y2FzZSAibWFwUm91Z2huZXNzV3JhcCI6Y2FzZSAibWFwUm91Z2huZXNzQW5pc290cm9weSI6YnJlYWs7Y2FzZSAibWFwQWxwaGEiOkkuYWxwaGFNYXA9RShRLHUubWFwQWxwaGFSZXBlYXQsdS5tYXBBbHBoYU9mZnNldCx1Lm1hcEFscGhhV3JhcCx1Lm1hcEFscGhhQW5pc290cm9weSk7YnJlYWs7Y2FzZSAibWFwQWxwaGFSZXBlYXQiOmNhc2UgIm1hcEFscGhhT2Zmc2V0IjpjYXNlICJtYXBBbHBoYVdyYXAiOmNhc2UgIm1hcEFscGhhQW5pc290cm9weSI6YnJlYWs7Y2FzZSAiZmxpcFNpZGVkIjpJLnNpZGU9MTticmVhaztjYXNlICJkb3VibGVTaWRlZCI6SS5zaWRlPQoyO2JyZWFrO2Nhc2UgInRyYW5zcGFyZW5jeSI6Y29uc29sZS53YXJuKCJUSFJFRS5Mb2FkZXIuY3JlYXRlTWF0ZXJpYWw6IHRyYW5zcGFyZW5jeSBoYXMgYmVlbiByZW5hbWVkIHRvIG9wYWNpdHkiKTtJLm9wYWNpdHk9UTticmVhaztjYXNlICJkZXB0aFRlc3QiOmNhc2UgImRlcHRoV3JpdGUiOmNhc2UgImNvbG9yV3JpdGUiOmNhc2UgIm9wYWNpdHkiOmNhc2UgInJlZmxlY3Rpdml0eSI6Y2FzZSAidHJhbnNwYXJlbnQiOmNhc2UgInZpc2libGUiOmNhc2UgIndpcmVmcmFtZSI6SVtPXT1RO2JyZWFrO2Nhc2UgInZlcnRleENvbG9ycyI6ITA9PT1RJiYoSS52ZXJ0ZXhDb2xvcnM9Mik7ImZhY2UiPT09USYmKEkudmVydGV4Q29sb3JzPTEpO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS5lcnJvcigiVEhSRUUuTG9hZGVyLmNyZWF0ZU1hdGVyaWFsOiBVbnN1cHBvcnRlZCIsTyxRKX19Ik1lc2hCYXNpY01hdGVyaWFsIj09PUkudHlwZSYmZGVsZXRlIEkuZW1pc3NpdmU7Ik1lc2hQaG9uZ01hdGVyaWFsIiE9PQpJLnR5cGUmJmRlbGV0ZSBJLnNwZWN1bGFyOzE+SS5vcGFjaXR5JiYoSS50cmFuc3BhcmVudD0hMCk7bi5zZXRUZXh0dXJlcyhIKTtyZXR1cm4gbi5wYXJzZShJKX19KCl9KTt2YXIgSWgsUmk9e2dldENvbnRleHQ6ZnVuY3Rpb24oKXt2b2lkIDA9PT1JaCYmKEloPW5ldyAod2luZG93LkF1ZGlvQ29udGV4dHx8d2luZG93LndlYmtpdEF1ZGlvQ29udGV4dCkpO3JldHVybiBJaH0sc2V0Q29udGV4dDpmdW5jdGlvbihiKXtJaD1ifX07T2JqZWN0LmFzc2lnbihNaS5wcm90b3R5cGUse2xvYWQ6ZnVuY3Rpb24oYixlLGgsbil7dmFyIHU9bmV3IFVjKHRoaXMubWFuYWdlcik7dS5zZXRSZXNwb25zZVR5cGUoImFycmF5YnVmZmVyIik7dS5zZXRQYXRoKHRoaXMucGF0aCk7dS5sb2FkKGIsZnVuY3Rpb24odyl7dz13LnNsaWNlKDApO1JpLmdldENvbnRleHQoKS5kZWNvZGVBdWRpb0RhdGEodyxmdW5jdGlvbih6KXtlKHopfSl9LGgsbil9LHNldFBhdGg6ZnVuY3Rpb24oYil7dGhpcy5wYXRoPWI7CnJldHVybiB0aGlzfX0pO09iamVjdC5hc3NpZ24oQ2gucHJvdG90eXBlLHtpc1NwaGVyaWNhbEhhcm1vbmljczM6ITAsc2V0OmZ1bmN0aW9uKGIpe2Zvcih2YXIgZT0wOzk+ZTtlKyspdGhpcy5jb2VmZmljaWVudHNbZV0uY29weShiW2VdKTtyZXR1cm4gdGhpc30semVybzpmdW5jdGlvbigpe2Zvcih2YXIgYj0wOzk+YjtiKyspdGhpcy5jb2VmZmljaWVudHNbYl0uc2V0KDAsMCwwKTtyZXR1cm4gdGhpc30sZ2V0QXQ6ZnVuY3Rpb24oYixlKXt2YXIgaD1iLngsbj1iLnk7Yj1iLno7dmFyIHU9dGhpcy5jb2VmZmljaWVudHM7ZT0uMjgyMDk1KnVbMF07ZSs9LjQ4ODYwMyp1WzFdKm47ZSs9LjQ4ODYwMyp1WzJdKmI7ZSs9LjQ4ODYwMyp1WzNdKmg7ZSs9MS4wOTI1NDgqdVs0XSpoKm47ZSs9MS4wOTI1NDgqdVs1XSpuKmI7ZSs9LjMxNTM5Mip1WzZdKigzKmIqYi0xKTtlKz0xLjA5MjU0OCp1WzddKmgqYjtyZXR1cm4gZSs9LjU0NjI3NCp1WzhdKihoKmgtbipuKX0sZ2V0SXJyYWRpYW5jZUF0OmZ1bmN0aW9uKGIsCmUpe3ZhciBoPWIueCxuPWIueTtiPWIuejt2YXIgdT10aGlzLmNvZWZmaWNpZW50cztlPS44ODYyMjcqdVswXTtlKz0xLjAyMzMyOCp1WzFdKm47ZSs9MS4wMjMzMjgqdVsyXSpiO2UrPTEuMDIzMzI4KnVbM10qaDtlKz0uODU4MDg2KnVbNF0qaCpuO2UrPS44NTgwODYqdVs1XSpuKmI7ZSs9dVs2XSooLjc0MzEyNSpiKmItLjI0NzcwOCk7ZSs9Ljg1ODA4Nip1WzddKmgqYjtyZXR1cm4gZSs9LjQyOTA0Myp1WzhdKihoKmgtbipuKX0sYWRkOmZ1bmN0aW9uKGIpe2Zvcih2YXIgZT0wOzk+ZTtlKyspdGhpcy5jb2VmZmljaWVudHNbZV0uYWRkKGIuY29lZmZpY2llbnRzW2VdKTtyZXR1cm4gdGhpc30sc2NhbGU6ZnVuY3Rpb24oYil7Zm9yKHZhciBlPTA7OT5lO2UrKyl0aGlzLmNvZWZmaWNpZW50c1tlXS5tdWx0aXBseVNjYWxhcihiKTtyZXR1cm4gdGhpc30sbGVycDpmdW5jdGlvbihiLGUpe2Zvcih2YXIgaD0wOzk+aDtoKyspdGhpcy5jb2VmZmljaWVudHNbaF0ubGVycChiLmNvZWZmaWNpZW50c1toXSwKZSk7cmV0dXJuIHRoaXN9LGVxdWFsczpmdW5jdGlvbihiKXtmb3IodmFyIGU9MDs5PmU7ZSsrKWlmKCF0aGlzLmNvZWZmaWNpZW50c1tlXS5lcXVhbHMoYi5jb2VmZmljaWVudHNbZV0pKXJldHVybiExO3JldHVybiEwfSxjb3B5OmZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLnNldChiLmNvZWZmaWNpZW50cyl9LGNsb25lOmZ1bmN0aW9uKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKS5jb3B5KHRoaXMpfSxmcm9tQXJyYXk6ZnVuY3Rpb24oYil7Zm9yKHZhciBlPXRoaXMuY29lZmZpY2llbnRzLGg9MDs5Pmg7aCsrKWVbaF0uZnJvbUFycmF5KGIsMypoKTtyZXR1cm4gdGhpc30sdG9BcnJheTpmdW5jdGlvbigpe2Zvcih2YXIgYj1bXSxlPXRoaXMuY29lZmZpY2llbnRzLGg9MDs5Pmg7aCsrKWVbaF0udG9BcnJheShiLDMqaCk7cmV0dXJuIGJ9fSk7T2JqZWN0LmFzc2lnbihDaCx7Z2V0QmFzaXNBdDpmdW5jdGlvbihiLGUpe3ZhciBoPWIueCxuPWIueTtiPWIuejtlWzBdPS4yODIwOTU7CmVbMV09LjQ4ODYwMypuO2VbMl09LjQ4ODYwMypiO2VbM109LjQ4ODYwMypoO2VbNF09MS4wOTI1NDgqaCpuO2VbNV09MS4wOTI1NDgqbipiO2VbNl09LjMxNTM5MiooMypiKmItMSk7ZVs3XT0xLjA5MjU0OCpoKmI7ZVs4XT0uNTQ2Mjc0KihoKmgtbipuKX19KTskYy5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKFNiLnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOiRjLGlzTGlnaHRQcm9iZTohMCxjb3B5OmZ1bmN0aW9uKGIpe1NiLnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyxiKTt0aGlzLnNoLmNvcHkoYi5zaCk7dGhpcy5pbnRlbnNpdHk9Yi5pbnRlbnNpdHk7cmV0dXJuIHRoaXN9LHRvSlNPTjpmdW5jdGlvbihiKXtyZXR1cm4gU2IucHJvdG90eXBlLnRvSlNPTi5jYWxsKHRoaXMsYil9fSk7TmkucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZSgkYy5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpOaSxpc0hlbWlzcGhlcmVMaWdodFByb2JlOiEwLApjb3B5OmZ1bmN0aW9uKGIpeyRjLnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyxiKTtyZXR1cm4gdGhpc30sdG9KU09OOmZ1bmN0aW9uKGIpe3JldHVybiAkYy5wcm90b3R5cGUudG9KU09OLmNhbGwodGhpcyxiKX19KTtPaS5wcm90b3R5cGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKCRjLnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOk9pLGlzQW1iaWVudExpZ2h0UHJvYmU6ITAsY29weTpmdW5jdGlvbihiKXskYy5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsYik7cmV0dXJuIHRoaXN9LHRvSlNPTjpmdW5jdGlvbihiKXtyZXR1cm4gJGMucHJvdG90eXBlLnRvSlNPTi5jYWxsKHRoaXMsYil9fSk7T2JqZWN0LmFzc2lnbihJbC5wcm90b3R5cGUse3VwZGF0ZTpmdW5jdGlvbigpe3ZhciBiLGUsaCxuLHUsdyx6LEUsSD1uZXcgQyxJPW5ldyBDO3JldHVybiBmdW5jdGlvbihPKXtpZihiIT09dGhpc3x8ZSE9PU8uZm9jdXN8fGghPT1PLmZvdnx8biE9PU8uYXNwZWN0KnRoaXMuYXNwZWN0fHwKdSE9PU8ubmVhcnx8dyE9PU8uZmFyfHx6IT09Ty56b29tfHxFIT09dGhpcy5leWVTZXApe2I9dGhpcztlPU8uZm9jdXM7aD1PLmZvdjtuPU8uYXNwZWN0KnRoaXMuYXNwZWN0O3U9Ty5uZWFyO3c9Ty5mYXI7ej1PLnpvb207dmFyIFE9Ty5wcm9qZWN0aW9uTWF0cml4LmNsb25lKCk7RT10aGlzLmV5ZVNlcC8yO3ZhciBSPUUqdS9lLFU9dSpNYXRoLnRhbihvYi5ERUcyUkFEKmgqLjUpL3o7SS5lbGVtZW50c1sxMl09LUU7SC5lbGVtZW50c1sxMl09RTt2YXIgVz0tVSpuK1I7dmFyIFo9VSpuK1I7US5lbGVtZW50c1swXT0yKnUvKFotVyk7US5lbGVtZW50c1s4XT0oWitXKS8oWi1XKTt0aGlzLmNhbWVyYUwucHJvamVjdGlvbk1hdHJpeC5jb3B5KFEpO1c9LVUqbi1SO1o9VSpuLVI7US5lbGVtZW50c1swXT0yKnUvKFotVyk7US5lbGVtZW50c1s4XT0oWitXKS8oWi1XKTt0aGlzLmNhbWVyYVIucHJvamVjdGlvbk1hdHJpeC5jb3B5KFEpfXRoaXMuY2FtZXJhTC5tYXRyaXhXb3JsZC5jb3B5KE8ubWF0cml4V29ybGQpLm11bHRpcGx5KEkpOwp0aGlzLmNhbWVyYVIubWF0cml4V29ybGQuY29weShPLm1hdHJpeFdvcmxkKS5tdWx0aXBseShIKX19KCl9KTt4Zy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShTLnByb3RvdHlwZSk7eGcucHJvdG90eXBlLmNvbnN0cnVjdG9yPXhnO09iamVjdC5hc3NpZ24oUGkucHJvdG90eXBlLHtzdGFydDpmdW5jdGlvbigpe3RoaXMub2xkVGltZT10aGlzLnN0YXJ0VGltZT0oInVuZGVmaW5lZCI9PT10eXBlb2YgcGVyZm9ybWFuY2U/RGF0ZTpwZXJmb3JtYW5jZSkubm93KCk7dGhpcy5lbGFwc2VkVGltZT0wO3RoaXMucnVubmluZz0hMH0sc3RvcDpmdW5jdGlvbigpe3RoaXMuZ2V0RWxhcHNlZFRpbWUoKTt0aGlzLmF1dG9TdGFydD10aGlzLnJ1bm5pbmc9ITF9LGdldEVsYXBzZWRUaW1lOmZ1bmN0aW9uKCl7dGhpcy5nZXREZWx0YSgpO3JldHVybiB0aGlzLmVsYXBzZWRUaW1lfSxnZXREZWx0YTpmdW5jdGlvbigpe3ZhciBiPTA7aWYodGhpcy5hdXRvU3RhcnQmJiF0aGlzLnJ1bm5pbmcpcmV0dXJuIHRoaXMuc3RhcnQoKSwKMDtpZih0aGlzLnJ1bm5pbmcpe3ZhciBlPSgidW5kZWZpbmVkIj09PXR5cGVvZiBwZXJmb3JtYW5jZT9EYXRlOnBlcmZvcm1hbmNlKS5ub3coKTtiPShlLXRoaXMub2xkVGltZSkvMUUzO3RoaXMub2xkVGltZT1lO3RoaXMuZWxhcHNlZFRpbWUrPWJ9cmV0dXJuIGJ9fSk7UWkucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShTLnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOlFpLGdldElucHV0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2Fpbn0scmVtb3ZlRmlsdGVyOmZ1bmN0aW9uKCl7bnVsbCE9PXRoaXMuZmlsdGVyJiYodGhpcy5nYWluLmRpc2Nvbm5lY3QodGhpcy5maWx0ZXIpLHRoaXMuZmlsdGVyLmRpc2Nvbm5lY3QodGhpcy5jb250ZXh0LmRlc3RpbmF0aW9uKSx0aGlzLmdhaW4uY29ubmVjdCh0aGlzLmNvbnRleHQuZGVzdGluYXRpb24pLHRoaXMuZmlsdGVyPW51bGwpO3JldHVybiB0aGlzfSxnZXRGaWx0ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5maWx0ZXJ9LApzZXRGaWx0ZXI6ZnVuY3Rpb24oYil7bnVsbCE9PXRoaXMuZmlsdGVyPyh0aGlzLmdhaW4uZGlzY29ubmVjdCh0aGlzLmZpbHRlciksdGhpcy5maWx0ZXIuZGlzY29ubmVjdCh0aGlzLmNvbnRleHQuZGVzdGluYXRpb24pKTp0aGlzLmdhaW4uZGlzY29ubmVjdCh0aGlzLmNvbnRleHQuZGVzdGluYXRpb24pO3RoaXMuZmlsdGVyPWI7dGhpcy5nYWluLmNvbm5lY3QodGhpcy5maWx0ZXIpO3RoaXMuZmlsdGVyLmNvbm5lY3QodGhpcy5jb250ZXh0LmRlc3RpbmF0aW9uKTtyZXR1cm4gdGhpc30sZ2V0TWFzdGVyVm9sdW1lOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2Fpbi5nYWluLnZhbHVlfSxzZXRNYXN0ZXJWb2x1bWU6ZnVuY3Rpb24oYil7dGhpcy5nYWluLmdhaW4uc2V0VGFyZ2V0QXRUaW1lKGIsdGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lLC4wMSk7cmV0dXJuIHRoaXN9LHVwZGF0ZU1hdHJpeFdvcmxkOmZ1bmN0aW9uKCl7dmFyIGI9bmV3IGcsZT1uZXcgZixoPW5ldyBnLG49bmV3IGcsCnU9bmV3IFBpO3JldHVybiBmdW5jdGlvbih3KXtTLnByb3RvdHlwZS51cGRhdGVNYXRyaXhXb3JsZC5jYWxsKHRoaXMsdyk7dz10aGlzLmNvbnRleHQubGlzdGVuZXI7dmFyIHo9dGhpcy51cDt0aGlzLnRpbWVEZWx0YT11LmdldERlbHRhKCk7dGhpcy5tYXRyaXhXb3JsZC5kZWNvbXBvc2UoYixlLGgpO24uc2V0KDAsMCwtMSkuYXBwbHlRdWF0ZXJuaW9uKGUpO2lmKHcucG9zaXRpb25YKXt2YXIgRT10aGlzLmNvbnRleHQuY3VycmVudFRpbWUrdGhpcy50aW1lRGVsdGE7dy5wb3NpdGlvblgubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUoYi54LEUpO3cucG9zaXRpb25ZLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKGIueSxFKTt3LnBvc2l0aW9uWi5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZShiLnosRSk7dy5mb3J3YXJkWC5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZShuLngsRSk7dy5mb3J3YXJkWS5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZShuLnksRSk7dy5mb3J3YXJkWi5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZShuLnosCkUpO3cudXBYLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKHoueCxFKTt3LnVwWS5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZSh6LnksRSk7dy51cFoubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUoei56LEUpfWVsc2Ugdy5zZXRQb3NpdGlvbihiLngsYi55LGIueiksdy5zZXRPcmllbnRhdGlvbihuLngsbi55LG4ueix6Lngsei55LHoueil9fSgpfSk7amYucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShTLnByb3RvdHlwZSkse2NvbnN0cnVjdG9yOmpmLGdldE91dHB1dDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdhaW59LHNldE5vZGVTb3VyY2U6ZnVuY3Rpb24oYil7dGhpcy5oYXNQbGF5YmFja0NvbnRyb2w9ITE7dGhpcy5zb3VyY2VUeXBlPSJhdWRpb05vZGUiO3RoaXMuc291cmNlPWI7dGhpcy5jb25uZWN0KCk7cmV0dXJuIHRoaXN9LHNldE1lZGlhRWxlbWVudFNvdXJjZTpmdW5jdGlvbihiKXt0aGlzLmhhc1BsYXliYWNrQ29udHJvbD0hMTt0aGlzLnNvdXJjZVR5cGU9CiJtZWRpYU5vZGUiO3RoaXMuc291cmNlPXRoaXMuY29udGV4dC5jcmVhdGVNZWRpYUVsZW1lbnRTb3VyY2UoYik7dGhpcy5jb25uZWN0KCk7cmV0dXJuIHRoaXN9LHNldEJ1ZmZlcjpmdW5jdGlvbihiKXt0aGlzLmJ1ZmZlcj1iO3RoaXMuc291cmNlVHlwZT0iYnVmZmVyIjt0aGlzLmF1dG9wbGF5JiZ0aGlzLnBsYXkoKTtyZXR1cm4gdGhpc30scGxheTpmdW5jdGlvbigpe2lmKCEwPT09dGhpcy5pc1BsYXlpbmcpY29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogQXVkaW8gaXMgYWxyZWFkeSBwbGF5aW5nLiIpO2Vsc2UgaWYoITE9PT10aGlzLmhhc1BsYXliYWNrQ29udHJvbCljb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvOiB0aGlzIEF1ZGlvIGhhcyBubyBwbGF5YmFjayBjb250cm9sLiIpO2Vsc2V7dmFyIGI9dGhpcy5jb250ZXh0LmNyZWF0ZUJ1ZmZlclNvdXJjZSgpO2IuYnVmZmVyPXRoaXMuYnVmZmVyO2IubG9vcD10aGlzLmxvb3A7Yi5vbmVuZGVkPXRoaXMub25FbmRlZC5iaW5kKHRoaXMpOwp0aGlzLnN0YXJ0VGltZT10aGlzLmNvbnRleHQuY3VycmVudFRpbWU7Yi5zdGFydCh0aGlzLnN0YXJ0VGltZSx0aGlzLm9mZnNldCk7dGhpcy5pc1BsYXlpbmc9ITA7dGhpcy5zb3VyY2U9Yjt0aGlzLnNldERldHVuZSh0aGlzLmRldHVuZSk7dGhpcy5zZXRQbGF5YmFja1JhdGUodGhpcy5wbGF5YmFja1JhdGUpO3JldHVybiB0aGlzLmNvbm5lY3QoKX19LHBhdXNlOmZ1bmN0aW9uKCl7aWYoITE9PT10aGlzLmhhc1BsYXliYWNrQ29udHJvbCljb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvOiB0aGlzIEF1ZGlvIGhhcyBubyBwbGF5YmFjayBjb250cm9sLiIpO2Vsc2UgcmV0dXJuITA9PT10aGlzLmlzUGxheWluZyYmKHRoaXMuc291cmNlLnN0b3AoKSx0aGlzLnNvdXJjZS5vbmVuZGVkPW51bGwsdGhpcy5vZmZzZXQrPSh0aGlzLmNvbnRleHQuY3VycmVudFRpbWUtdGhpcy5zdGFydFRpbWUpKnRoaXMucGxheWJhY2tSYXRlLHRoaXMuaXNQbGF5aW5nPSExKSx0aGlzfSxzdG9wOmZ1bmN0aW9uKCl7aWYoITE9PT0KdGhpcy5oYXNQbGF5YmFja0NvbnRyb2wpY29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogdGhpcyBBdWRpbyBoYXMgbm8gcGxheWJhY2sgY29udHJvbC4iKTtlbHNlIHJldHVybiB0aGlzLnNvdXJjZS5zdG9wKCksdGhpcy5zb3VyY2Uub25lbmRlZD1udWxsLHRoaXMub2Zmc2V0PTAsdGhpcy5pc1BsYXlpbmc9ITEsdGhpc30sY29ubmVjdDpmdW5jdGlvbigpe2lmKDA8dGhpcy5maWx0ZXJzLmxlbmd0aCl7dGhpcy5zb3VyY2UuY29ubmVjdCh0aGlzLmZpbHRlcnNbMF0pO2Zvcih2YXIgYj0xLGU9dGhpcy5maWx0ZXJzLmxlbmd0aDtiPGU7YisrKXRoaXMuZmlsdGVyc1tiLTFdLmNvbm5lY3QodGhpcy5maWx0ZXJzW2JdKTt0aGlzLmZpbHRlcnNbdGhpcy5maWx0ZXJzLmxlbmd0aC0xXS5jb25uZWN0KHRoaXMuZ2V0T3V0cHV0KCkpfWVsc2UgdGhpcy5zb3VyY2UuY29ubmVjdCh0aGlzLmdldE91dHB1dCgpKTtyZXR1cm4gdGhpc30sZGlzY29ubmVjdDpmdW5jdGlvbigpe2lmKDA8dGhpcy5maWx0ZXJzLmxlbmd0aCl7dGhpcy5zb3VyY2UuZGlzY29ubmVjdCh0aGlzLmZpbHRlcnNbMF0pOwpmb3IodmFyIGI9MSxlPXRoaXMuZmlsdGVycy5sZW5ndGg7YjxlO2IrKyl0aGlzLmZpbHRlcnNbYi0xXS5kaXNjb25uZWN0KHRoaXMuZmlsdGVyc1tiXSk7dGhpcy5maWx0ZXJzW3RoaXMuZmlsdGVycy5sZW5ndGgtMV0uZGlzY29ubmVjdCh0aGlzLmdldE91dHB1dCgpKX1lbHNlIHRoaXMuc291cmNlLmRpc2Nvbm5lY3QodGhpcy5nZXRPdXRwdXQoKSk7cmV0dXJuIHRoaXN9LGdldEZpbHRlcnM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5maWx0ZXJzfSxzZXRGaWx0ZXJzOmZ1bmN0aW9uKGIpe2J8fChiPVtdKTshMD09PXRoaXMuaXNQbGF5aW5nPyh0aGlzLmRpc2Nvbm5lY3QoKSx0aGlzLmZpbHRlcnM9Yix0aGlzLmNvbm5lY3QoKSk6dGhpcy5maWx0ZXJzPWI7cmV0dXJuIHRoaXN9LHNldERldHVuZTpmdW5jdGlvbihiKXt0aGlzLmRldHVuZT1iO2lmKHZvaWQgMCE9PXRoaXMuc291cmNlLmRldHVuZSlyZXR1cm4hMD09PXRoaXMuaXNQbGF5aW5nJiZ0aGlzLnNvdXJjZS5kZXR1bmUuc2V0VGFyZ2V0QXRUaW1lKHRoaXMuZGV0dW5lLAp0aGlzLmNvbnRleHQuY3VycmVudFRpbWUsLjAxKSx0aGlzfSxnZXREZXR1bmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kZXR1bmV9LGdldEZpbHRlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldEZpbHRlcnMoKVswXX0sc2V0RmlsdGVyOmZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLnNldEZpbHRlcnMoYj9bYl06W10pfSxzZXRQbGF5YmFja1JhdGU6ZnVuY3Rpb24oYil7aWYoITE9PT10aGlzLmhhc1BsYXliYWNrQ29udHJvbCljb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvOiB0aGlzIEF1ZGlvIGhhcyBubyBwbGF5YmFjayBjb250cm9sLiIpO2Vsc2UgcmV0dXJuIHRoaXMucGxheWJhY2tSYXRlPWIsITA9PT10aGlzLmlzUGxheWluZyYmdGhpcy5zb3VyY2UucGxheWJhY2tSYXRlLnNldFRhcmdldEF0VGltZSh0aGlzLnBsYXliYWNrUmF0ZSx0aGlzLmNvbnRleHQuY3VycmVudFRpbWUsLjAxKSx0aGlzfSxnZXRQbGF5YmFja1JhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wbGF5YmFja1JhdGV9LApvbkVuZGVkOmZ1bmN0aW9uKCl7dGhpcy5pc1BsYXlpbmc9ITF9LGdldExvb3A6ZnVuY3Rpb24oKXtyZXR1cm4hMT09PXRoaXMuaGFzUGxheWJhY2tDb250cm9sPyhjb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvOiB0aGlzIEF1ZGlvIGhhcyBubyBwbGF5YmFjayBjb250cm9sLiIpLCExKTp0aGlzLmxvb3B9LHNldExvb3A6ZnVuY3Rpb24oYil7aWYoITE9PT10aGlzLmhhc1BsYXliYWNrQ29udHJvbCljb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvOiB0aGlzIEF1ZGlvIGhhcyBubyBwbGF5YmFjayBjb250cm9sLiIpO2Vsc2UgcmV0dXJuIHRoaXMubG9vcD1iLCEwPT09dGhpcy5pc1BsYXlpbmcmJih0aGlzLnNvdXJjZS5sb29wPXRoaXMubG9vcCksdGhpc30sZ2V0Vm9sdW1lOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2Fpbi5nYWluLnZhbHVlfSxzZXRWb2x1bWU6ZnVuY3Rpb24oYil7dGhpcy5nYWluLmdhaW4uc2V0VGFyZ2V0QXRUaW1lKGIsdGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lLC4wMSk7CnJldHVybiB0aGlzfX0pO1NpLnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoamYucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6U2ksZ2V0T3V0cHV0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFubmVyfSxnZXRSZWZEaXN0YW5jZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnBhbm5lci5yZWZEaXN0YW5jZX0sc2V0UmVmRGlzdGFuY2U6ZnVuY3Rpb24oYil7dGhpcy5wYW5uZXIucmVmRGlzdGFuY2U9YjtyZXR1cm4gdGhpc30sZ2V0Um9sbG9mZkZhY3RvcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLnBhbm5lci5yb2xsb2ZmRmFjdG9yfSxzZXRSb2xsb2ZmRmFjdG9yOmZ1bmN0aW9uKGIpe3RoaXMucGFubmVyLnJvbGxvZmZGYWN0b3I9YjtyZXR1cm4gdGhpc30sZ2V0RGlzdGFuY2VNb2RlbDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnBhbm5lci5kaXN0YW5jZU1vZGVsfSxzZXREaXN0YW5jZU1vZGVsOmZ1bmN0aW9uKGIpe3RoaXMucGFubmVyLmRpc3RhbmNlTW9kZWw9YjsKcmV0dXJuIHRoaXN9LGdldE1heERpc3RhbmNlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFubmVyLm1heERpc3RhbmNlfSxzZXRNYXhEaXN0YW5jZTpmdW5jdGlvbihiKXt0aGlzLnBhbm5lci5tYXhEaXN0YW5jZT1iO3JldHVybiB0aGlzfSxzZXREaXJlY3Rpb25hbENvbmU6ZnVuY3Rpb24oYixlLGgpe3RoaXMucGFubmVyLmNvbmVJbm5lckFuZ2xlPWI7dGhpcy5wYW5uZXIuY29uZU91dGVyQW5nbGU9ZTt0aGlzLnBhbm5lci5jb25lT3V0ZXJHYWluPWg7cmV0dXJuIHRoaXN9LHVwZGF0ZU1hdHJpeFdvcmxkOmZ1bmN0aW9uKCl7dmFyIGI9bmV3IGcsZT1uZXcgZixoPW5ldyBnLG49bmV3IGc7cmV0dXJuIGZ1bmN0aW9uKHUpe1MucHJvdG90eXBlLnVwZGF0ZU1hdHJpeFdvcmxkLmNhbGwodGhpcyx1KTtpZighMCE9PXRoaXMuaGFzUGxheWJhY2tDb250cm9sfHwhMSE9PXRoaXMuaXNQbGF5aW5nKWlmKHRoaXMubWF0cml4V29ybGQuZGVjb21wb3NlKGIsZSxoKSxuLnNldCgwLDAsMSkuYXBwbHlRdWF0ZXJuaW9uKGUpLAp1PXRoaXMucGFubmVyLHUucG9zaXRpb25YKXt2YXIgdz10aGlzLmNvbnRleHQuY3VycmVudFRpbWUrdGhpcy5saXN0ZW5lci50aW1lRGVsdGE7dS5wb3NpdGlvblgubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUoYi54LHcpO3UucG9zaXRpb25ZLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKGIueSx3KTt1LnBvc2l0aW9uWi5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZShiLnosdyk7dS5vcmllbnRhdGlvblgubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUobi54LHcpO3Uub3JpZW50YXRpb25ZLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKG4ueSx3KTt1Lm9yaWVudGF0aW9uWi5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZShuLnosdyl9ZWxzZSB1LnNldFBvc2l0aW9uKGIueCxiLnksYi56KSx1LnNldE9yaWVudGF0aW9uKG4ueCxuLnksbi56KX19KCl9KTtPYmplY3QuYXNzaWduKFRpLnByb3RvdHlwZSx7Z2V0RnJlcXVlbmN5RGF0YTpmdW5jdGlvbigpe3RoaXMuYW5hbHlzZXIuZ2V0Qnl0ZUZyZXF1ZW5jeURhdGEodGhpcy5kYXRhKTsKcmV0dXJuIHRoaXMuZGF0YX0sZ2V0QXZlcmFnZUZyZXF1ZW5jeTpmdW5jdGlvbigpe2Zvcih2YXIgYj0wLGU9dGhpcy5nZXRGcmVxdWVuY3lEYXRhKCksaD0wO2g8ZS5sZW5ndGg7aCsrKWIrPWVbaF07cmV0dXJuIGIvZS5sZW5ndGh9fSk7T2JqZWN0LmFzc2lnbihVaS5wcm90b3R5cGUse2FjY3VtdWxhdGU6ZnVuY3Rpb24oYixlKXt2YXIgaD10aGlzLmJ1ZmZlcixuPXRoaXMudmFsdWVTaXplO2I9YipuK247dmFyIHU9dGhpcy5jdW11bGF0aXZlV2VpZ2h0O2lmKDA9PT11KXtmb3IodT0wO3UhPT1uOysrdSloW2IrdV09aFt1XTt1PWV9ZWxzZSB1Kz1lLHRoaXMuX21peEJ1ZmZlclJlZ2lvbihoLGIsMCxlL3Usbik7dGhpcy5jdW11bGF0aXZlV2VpZ2h0PXV9LGFwcGx5OmZ1bmN0aW9uKGIpe3ZhciBlPXRoaXMudmFsdWVTaXplLGg9dGhpcy5idWZmZXI7Yj1iKmUrZTt2YXIgbj10aGlzLmN1bXVsYXRpdmVXZWlnaHQsdT10aGlzLmJpbmRpbmc7dGhpcy5jdW11bGF0aXZlV2VpZ2h0PTA7CjE+biYmdGhpcy5fbWl4QnVmZmVyUmVnaW9uKGgsYiwzKmUsMS1uLGUpO249ZTtmb3IodmFyIHc9ZStlO24hPT13OysrbilpZihoW25dIT09aFtuK2VdKXt1LnNldFZhbHVlKGgsYik7YnJlYWt9fSxzYXZlT3JpZ2luYWxTdGF0ZTpmdW5jdGlvbigpe3ZhciBiPXRoaXMuYnVmZmVyLGU9dGhpcy52YWx1ZVNpemUsaD0zKmU7dGhpcy5iaW5kaW5nLmdldFZhbHVlKGIsaCk7Zm9yKHZhciBuPWU7biE9PWg7KytuKWJbbl09YltoK24lZV07dGhpcy5jdW11bGF0aXZlV2VpZ2h0PTB9LHJlc3RvcmVPcmlnaW5hbFN0YXRlOmZ1bmN0aW9uKCl7dGhpcy5iaW5kaW5nLnNldFZhbHVlKHRoaXMuYnVmZmVyLDMqdGhpcy52YWx1ZVNpemUpfSxfc2VsZWN0OmZ1bmN0aW9uKGIsZSxoLG4sdSl7aWYoLjU8PW4pZm9yKG49MDtuIT09dTsrK24pYltlK25dPWJbaCtuXX0sX3NsZXJwOmZ1bmN0aW9uKGIsZSxoLG4pe2Yuc2xlcnBGbGF0KGIsZSxiLGUsYixoLG4pfSxfbGVycDpmdW5jdGlvbihiLGUsaCxuLAp1KXtmb3IodmFyIHc9MS1uLHo9MDt6IT09dTsrK3ope3ZhciBFPWUrejtiW0VdPWJbRV0qdytiW2grel0qbn19fSk7T2JqZWN0LmFzc2lnbihKbC5wcm90b3R5cGUse2dldFZhbHVlOmZ1bmN0aW9uKGIsZSl7dGhpcy5iaW5kKCk7dmFyIGg9dGhpcy5fYmluZGluZ3NbdGhpcy5fdGFyZ2V0R3JvdXAubkNhY2hlZE9iamVjdHNfXTt2b2lkIDAhPT1oJiZoLmdldFZhbHVlKGIsZSl9LHNldFZhbHVlOmZ1bmN0aW9uKGIsZSl7Zm9yKHZhciBoPXRoaXMuX2JpbmRpbmdzLG49dGhpcy5fdGFyZ2V0R3JvdXAubkNhY2hlZE9iamVjdHNfLHU9aC5sZW5ndGg7biE9PXU7KytuKWhbbl0uc2V0VmFsdWUoYixlKX0sYmluZDpmdW5jdGlvbigpe2Zvcih2YXIgYj10aGlzLl9iaW5kaW5ncyxlPXRoaXMuX3RhcmdldEdyb3VwLm5DYWNoZWRPYmplY3RzXyxoPWIubGVuZ3RoO2UhPT1oOysrZSliW2VdLmJpbmQoKX0sdW5iaW5kOmZ1bmN0aW9uKCl7Zm9yKHZhciBiPXRoaXMuX2JpbmRpbmdzLGU9dGhpcy5fdGFyZ2V0R3JvdXAubkNhY2hlZE9iamVjdHNfLApoPWIubGVuZ3RoO2UhPT1oOysrZSliW2VdLnVuYmluZCgpfX0pO09iamVjdC5hc3NpZ24oc2Mse0NvbXBvc2l0ZTpKbCxjcmVhdGU6ZnVuY3Rpb24oYixlLGgpe3JldHVybiBiJiZiLmlzQW5pbWF0aW9uT2JqZWN0R3JvdXA/bmV3IHNjLkNvbXBvc2l0ZShiLGUsaCk6bmV3IHNjKGIsZSxoKX0sc2FuaXRpemVOb2RlTmFtZTpmdW5jdGlvbigpe3ZhciBiPS9bXFtcXVwuOlwvXS9nO3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKC9ccy9nLCJfIikucmVwbGFjZShiLCIiKX19KCkscGFyc2VUcmFja05hbWU6ZnVuY3Rpb24oKXt2YXIgYj0iW14iKyJcXFtcXF1cXC46XFwvIi5yZXBsYWNlKCJcXC4iLCIiKSsiXSIsZT0vKCg/OldDK1tcLzpdKSopLy5zb3VyY2UucmVwbGFjZSgiV0MiLCJbXlxcW1xcXVxcLjpcXC9dIik7Yj0vKFdDT0QrKT8vLnNvdXJjZS5yZXBsYWNlKCJXQ09EIixiKTt2YXIgaD0vKD86XC4oV0MrKSg/OlxbKC4rKVxdKT8pPy8uc291cmNlLnJlcGxhY2UoIldDIiwKIlteXFxbXFxdXFwuOlxcL10iKSxuPS9cLihXQyspKD86XFsoLispXF0pPy8uc291cmNlLnJlcGxhY2UoIldDIiwiW15cXFtcXF1cXC46XFwvXSIpLHU9bmV3IFJlZ0V4cCgiXiIrZStiK2grbisiJCIpLHc9WyJtYXRlcmlhbCIsIm1hdGVyaWFscyIsImJvbmVzIl07cmV0dXJuIGZ1bmN0aW9uKHope3ZhciBFPXUuZXhlYyh6KTtpZighRSl0aHJvdyBFcnJvcigiUHJvcGVydHlCaW5kaW5nOiBDYW5ub3QgcGFyc2UgdHJhY2tOYW1lOiAiK3opO0U9e25vZGVOYW1lOkVbMl0sb2JqZWN0TmFtZTpFWzNdLG9iamVjdEluZGV4OkVbNF0scHJvcGVydHlOYW1lOkVbNV0scHJvcGVydHlJbmRleDpFWzZdfTt2YXIgSD1FLm5vZGVOYW1lJiZFLm5vZGVOYW1lLmxhc3RJbmRleE9mKCIuIik7aWYodm9pZCAwIT09SCYmLTEhPT1IKXt2YXIgST1FLm5vZGVOYW1lLnN1YnN0cmluZyhIKzEpOy0xIT09dy5pbmRleE9mKEkpJiYoRS5ub2RlTmFtZT1FLm5vZGVOYW1lLnN1YnN0cmluZygwLEgpLEUub2JqZWN0TmFtZT0KSSl9aWYobnVsbD09PUUucHJvcGVydHlOYW1lfHwwPT09RS5wcm9wZXJ0eU5hbWUubGVuZ3RoKXRocm93IEVycm9yKCJQcm9wZXJ0eUJpbmRpbmc6IGNhbiBub3QgcGFyc2UgcHJvcGVydHlOYW1lIGZyb20gdHJhY2tOYW1lOiAiK3opO3JldHVybiBFfX0oKSxmaW5kTm9kZTpmdW5jdGlvbihiLGUpe2lmKCFlfHwiIj09PWV8fCJyb290Ij09PWV8fCIuIj09PWV8fC0xPT09ZXx8ZT09PWIubmFtZXx8ZT09PWIudXVpZClyZXR1cm4gYjtpZihiLnNrZWxldG9uKXt2YXIgaD1iLnNrZWxldG9uLmdldEJvbmVCeU5hbWUoZSk7aWYodm9pZCAwIT09aClyZXR1cm4gaH1pZihiLmNoaWxkcmVuKXt2YXIgbj1mdW5jdGlvbih1KXtmb3IodmFyIHc9MDt3PHUubGVuZ3RoO3crKyl7dmFyIHo9dVt3XTtpZih6Lm5hbWU9PT1lfHx6LnV1aWQ9PT1lKXJldHVybiB6O2lmKHo9bih6LmNoaWxkcmVuKSlyZXR1cm4gen1yZXR1cm4gbnVsbH07aWYoYj1uKGIuY2hpbGRyZW4pKXJldHVybiBifXJldHVybiBudWxsfX0pOwpPYmplY3QuYXNzaWduKHNjLnByb3RvdHlwZSx7X2dldFZhbHVlX3VuYXZhaWxhYmxlOmZ1bmN0aW9uKCl7fSxfc2V0VmFsdWVfdW5hdmFpbGFibGU6ZnVuY3Rpb24oKXt9LEJpbmRpbmdUeXBlOntEaXJlY3Q6MCxFbnRpcmVBcnJheToxLEFycmF5RWxlbWVudDoyLEhhc0Zyb21Ub0FycmF5OjN9LFZlcnNpb25pbmc6e05vbmU6MCxOZWVkc1VwZGF0ZToxLE1hdHJpeFdvcmxkTmVlZHNVcGRhdGU6Mn0sR2V0dGVyQnlCaW5kaW5nVHlwZTpbZnVuY3Rpb24oYixlKXtiW2VdPXRoaXMubm9kZVt0aGlzLnByb3BlcnR5TmFtZV19LGZ1bmN0aW9uKGIsZSl7Zm9yKHZhciBoPXRoaXMucmVzb2x2ZWRQcm9wZXJ0eSxuPTAsdT1oLmxlbmd0aDtuIT09dTsrK24pYltlKytdPWhbbl19LGZ1bmN0aW9uKGIsZSl7YltlXT10aGlzLnJlc29sdmVkUHJvcGVydHlbdGhpcy5wcm9wZXJ0eUluZGV4XX0sZnVuY3Rpb24oYixlKXt0aGlzLnJlc29sdmVkUHJvcGVydHkudG9BcnJheShiLGUpfV0sU2V0dGVyQnlCaW5kaW5nVHlwZUFuZFZlcnNpb25pbmc6W1tmdW5jdGlvbihiLAplKXt0aGlzLnRhcmdldE9iamVjdFt0aGlzLnByb3BlcnR5TmFtZV09YltlXX0sZnVuY3Rpb24oYixlKXt0aGlzLnRhcmdldE9iamVjdFt0aGlzLnByb3BlcnR5TmFtZV09YltlXTt0aGlzLnRhcmdldE9iamVjdC5uZWVkc1VwZGF0ZT0hMH0sZnVuY3Rpb24oYixlKXt0aGlzLnRhcmdldE9iamVjdFt0aGlzLnByb3BlcnR5TmFtZV09YltlXTt0aGlzLnRhcmdldE9iamVjdC5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlPSEwfV0sW2Z1bmN0aW9uKGIsZSl7Zm9yKHZhciBoPXRoaXMucmVzb2x2ZWRQcm9wZXJ0eSxuPTAsdT1oLmxlbmd0aDtuIT09dTsrK24paFtuXT1iW2UrK119LGZ1bmN0aW9uKGIsZSl7Zm9yKHZhciBoPXRoaXMucmVzb2x2ZWRQcm9wZXJ0eSxuPTAsdT1oLmxlbmd0aDtuIT09dTsrK24paFtuXT1iW2UrK107dGhpcy50YXJnZXRPYmplY3QubmVlZHNVcGRhdGU9ITB9LGZ1bmN0aW9uKGIsZSl7Zm9yKHZhciBoPXRoaXMucmVzb2x2ZWRQcm9wZXJ0eSxuPTAsdT1oLmxlbmd0aDtuIT09CnU7KytuKWhbbl09YltlKytdO3RoaXMudGFyZ2V0T2JqZWN0Lm1hdHJpeFdvcmxkTmVlZHNVcGRhdGU9ITB9XSxbZnVuY3Rpb24oYixlKXt0aGlzLnJlc29sdmVkUHJvcGVydHlbdGhpcy5wcm9wZXJ0eUluZGV4XT1iW2VdfSxmdW5jdGlvbihiLGUpe3RoaXMucmVzb2x2ZWRQcm9wZXJ0eVt0aGlzLnByb3BlcnR5SW5kZXhdPWJbZV07dGhpcy50YXJnZXRPYmplY3QubmVlZHNVcGRhdGU9ITB9LGZ1bmN0aW9uKGIsZSl7dGhpcy5yZXNvbHZlZFByb3BlcnR5W3RoaXMucHJvcGVydHlJbmRleF09YltlXTt0aGlzLnRhcmdldE9iamVjdC5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlPSEwfV0sW2Z1bmN0aW9uKGIsZSl7dGhpcy5yZXNvbHZlZFByb3BlcnR5LmZyb21BcnJheShiLGUpfSxmdW5jdGlvbihiLGUpe3RoaXMucmVzb2x2ZWRQcm9wZXJ0eS5mcm9tQXJyYXkoYixlKTt0aGlzLnRhcmdldE9iamVjdC5uZWVkc1VwZGF0ZT0hMH0sZnVuY3Rpb24oYixlKXt0aGlzLnJlc29sdmVkUHJvcGVydHkuZnJvbUFycmF5KGIsCmUpO3RoaXMudGFyZ2V0T2JqZWN0Lm1hdHJpeFdvcmxkTmVlZHNVcGRhdGU9ITB9XV0sZ2V0VmFsdWU6ZnVuY3Rpb24oYixlKXt0aGlzLmJpbmQoKTt0aGlzLmdldFZhbHVlKGIsZSl9LHNldFZhbHVlOmZ1bmN0aW9uKGIsZSl7dGhpcy5iaW5kKCk7dGhpcy5zZXRWYWx1ZShiLGUpfSxiaW5kOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5ub2RlLGU9dGhpcy5wYXJzZWRQYXRoLGg9ZS5vYmplY3ROYW1lLG49ZS5wcm9wZXJ0eU5hbWUsdT1lLnByb3BlcnR5SW5kZXg7Ynx8KHRoaXMubm9kZT1iPXNjLmZpbmROb2RlKHRoaXMucm9vdE5vZGUsZS5ub2RlTmFtZSl8fHRoaXMucm9vdE5vZGUpO3RoaXMuZ2V0VmFsdWU9dGhpcy5fZ2V0VmFsdWVfdW5hdmFpbGFibGU7dGhpcy5zZXRWYWx1ZT10aGlzLl9zZXRWYWx1ZV91bmF2YWlsYWJsZTtpZihiKXtpZihoKXt2YXIgdz1lLm9iamVjdEluZGV4O3N3aXRjaChoKXtjYXNlICJtYXRlcmlhbHMiOmlmKCFiLm1hdGVyaWFsKXtjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IENhbiBub3QgYmluZCB0byBtYXRlcmlhbCBhcyBub2RlIGRvZXMgbm90IGhhdmUgYSBtYXRlcmlhbC4iLAp0aGlzKTtyZXR1cm59aWYoIWIubWF0ZXJpYWwubWF0ZXJpYWxzKXtjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IENhbiBub3QgYmluZCB0byBtYXRlcmlhbC5tYXRlcmlhbHMgYXMgbm9kZS5tYXRlcmlhbCBkb2VzIG5vdCBoYXZlIGEgbWF0ZXJpYWxzIGFycmF5LiIsdGhpcyk7cmV0dXJufWI9Yi5tYXRlcmlhbC5tYXRlcmlhbHM7YnJlYWs7Y2FzZSAiYm9uZXMiOmlmKCFiLnNrZWxldG9uKXtjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IENhbiBub3QgYmluZCB0byBib25lcyBhcyBub2RlIGRvZXMgbm90IGhhdmUgYSBza2VsZXRvbi4iLHRoaXMpO3JldHVybn1iPWIuc2tlbGV0b24uYm9uZXM7Zm9yKGg9MDtoPGIubGVuZ3RoO2grKylpZihiW2hdLm5hbWU9PT13KXt3PWg7YnJlYWt9YnJlYWs7ZGVmYXVsdDppZih2b2lkIDA9PT1iW2hdKXtjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IENhbiBub3QgYmluZCB0byBvYmplY3ROYW1lIG9mIG5vZGUgdW5kZWZpbmVkLiIsCnRoaXMpO3JldHVybn1iPWJbaF19aWYodm9pZCAwIT09dyl7aWYodm9pZCAwPT09Ylt3XSl7Y29uc29sZS5lcnJvcigiVEhSRUUuUHJvcGVydHlCaW5kaW5nOiBUcnlpbmcgdG8gYmluZCB0byBvYmplY3RJbmRleCBvZiBvYmplY3ROYW1lLCBidXQgaXMgdW5kZWZpbmVkLiIsdGhpcyxiKTtyZXR1cm59Yj1iW3ddfX13PWJbbl07aWYodm9pZCAwPT09dyljb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IFRyeWluZyB0byB1cGRhdGUgcHJvcGVydHkgZm9yIHRyYWNrOiAiK2Uubm9kZU5hbWUrIi4iK24rIiBidXQgaXQgd2Fzbid0IGZvdW5kLiIsYik7ZWxzZXtlPXRoaXMuVmVyc2lvbmluZy5Ob25lO3RoaXMudGFyZ2V0T2JqZWN0PWI7dm9pZCAwIT09Yi5uZWVkc1VwZGF0ZT9lPXRoaXMuVmVyc2lvbmluZy5OZWVkc1VwZGF0ZTp2b2lkIDAhPT1iLm1hdHJpeFdvcmxkTmVlZHNVcGRhdGUmJihlPXRoaXMuVmVyc2lvbmluZy5NYXRyaXhXb3JsZE5lZWRzVXBkYXRlKTtoPQp0aGlzLkJpbmRpbmdUeXBlLkRpcmVjdDtpZih2b2lkIDAhPT11KXtpZigibW9ycGhUYXJnZXRJbmZsdWVuY2VzIj09PW4pe2lmKCFiLmdlb21ldHJ5KXtjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IENhbiBub3QgYmluZCB0byBtb3JwaFRhcmdldEluZmx1ZW5jZXMgYmVjYXVzZSBub2RlIGRvZXMgbm90IGhhdmUgYSBnZW9tZXRyeS4iLHRoaXMpO3JldHVybn1pZihiLmdlb21ldHJ5LmlzQnVmZmVyR2VvbWV0cnkpe2lmKCFiLmdlb21ldHJ5Lm1vcnBoQXR0cmlidXRlcyl7Y29uc29sZS5lcnJvcigiVEhSRUUuUHJvcGVydHlCaW5kaW5nOiBDYW4gbm90IGJpbmQgdG8gbW9ycGhUYXJnZXRJbmZsdWVuY2VzIGJlY2F1c2Ugbm9kZSBkb2VzIG5vdCBoYXZlIGEgZ2VvbWV0cnkubW9ycGhBdHRyaWJ1dGVzLiIsdGhpcyk7cmV0dXJufWZvcihoPTA7aDx0aGlzLm5vZGUuZ2VvbWV0cnkubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uLmxlbmd0aDtoKyspaWYoYi5nZW9tZXRyeS5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb25baF0ubmFtZT09PQp1KXt1PWg7YnJlYWt9fWVsc2V7aWYoIWIuZ2VvbWV0cnkubW9ycGhUYXJnZXRzKXtjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IENhbiBub3QgYmluZCB0byBtb3JwaFRhcmdldEluZmx1ZW5jZXMgYmVjYXVzZSBub2RlIGRvZXMgbm90IGhhdmUgYSBnZW9tZXRyeS5tb3JwaFRhcmdldHMuIix0aGlzKTtyZXR1cm59Zm9yKGg9MDtoPHRoaXMubm9kZS5nZW9tZXRyeS5tb3JwaFRhcmdldHMubGVuZ3RoO2grKylpZihiLmdlb21ldHJ5Lm1vcnBoVGFyZ2V0c1toXS5uYW1lPT09dSl7dT1oO2JyZWFrfX19aD10aGlzLkJpbmRpbmdUeXBlLkFycmF5RWxlbWVudDt0aGlzLnJlc29sdmVkUHJvcGVydHk9dzt0aGlzLnByb3BlcnR5SW5kZXg9dX1lbHNlIHZvaWQgMCE9PXcuZnJvbUFycmF5JiZ2b2lkIDAhPT13LnRvQXJyYXk/KGg9dGhpcy5CaW5kaW5nVHlwZS5IYXNGcm9tVG9BcnJheSx0aGlzLnJlc29sdmVkUHJvcGVydHk9dyk6QXJyYXkuaXNBcnJheSh3KT8oaD10aGlzLkJpbmRpbmdUeXBlLkVudGlyZUFycmF5LAp0aGlzLnJlc29sdmVkUHJvcGVydHk9dyk6dGhpcy5wcm9wZXJ0eU5hbWU9bjt0aGlzLmdldFZhbHVlPXRoaXMuR2V0dGVyQnlCaW5kaW5nVHlwZVtoXTt0aGlzLnNldFZhbHVlPXRoaXMuU2V0dGVyQnlCaW5kaW5nVHlwZUFuZFZlcnNpb25pbmdbaF1bZV19fWVsc2UgY29uc29sZS5lcnJvcigiVEhSRUUuUHJvcGVydHlCaW5kaW5nOiBUcnlpbmcgdG8gdXBkYXRlIG5vZGUgZm9yIHRyYWNrOiAiK3RoaXMucGF0aCsiIGJ1dCBpdCB3YXNuJ3QgZm91bmQuIil9LHVuYmluZDpmdW5jdGlvbigpe3RoaXMubm9kZT1udWxsO3RoaXMuZ2V0VmFsdWU9dGhpcy5fZ2V0VmFsdWVfdW5ib3VuZDt0aGlzLnNldFZhbHVlPXRoaXMuX3NldFZhbHVlX3VuYm91bmR9fSk7T2JqZWN0LmFzc2lnbihzYy5wcm90b3R5cGUse19nZXRWYWx1ZV91bmJvdW5kOnNjLnByb3RvdHlwZS5nZXRWYWx1ZSxfc2V0VmFsdWVfdW5ib3VuZDpzYy5wcm90b3R5cGUuc2V0VmFsdWV9KTtPYmplY3QuYXNzaWduKEtsLnByb3RvdHlwZSwKe2lzQW5pbWF0aW9uT2JqZWN0R3JvdXA6ITAsYWRkOmZ1bmN0aW9uKCl7Zm9yKHZhciBiPXRoaXMuX29iamVjdHMsZT1iLmxlbmd0aCxoPXRoaXMubkNhY2hlZE9iamVjdHNfLG49dGhpcy5faW5kaWNlc0J5VVVJRCx1PXRoaXMuX3BhdGhzLHc9dGhpcy5fcGFyc2VkUGF0aHMsej10aGlzLl9iaW5kaW5ncyxFPXoubGVuZ3RoLEg9dm9pZCAwLEk9MCxPPWFyZ3VtZW50cy5sZW5ndGg7SSE9PU87KytJKXt2YXIgUT1hcmd1bWVudHNbSV0sUj1RLnV1aWQsVT1uW1JdO2lmKHZvaWQgMD09PVUpe1U9ZSsrO25bUl09VTtiLnB1c2goUSk7Uj0wO2Zvcih2YXIgVz1FO1IhPT1XOysrUil6W1JdLnB1c2gobmV3IHNjKFEsdVtSXSx3W1JdKSl9ZWxzZSBpZihVPGgpe0g9YltVXTt2YXIgWj0tLWg7Vz1iW1pdO25bVy51dWlkXT1VO2JbVV09VztuW1JdPVo7YltaXT1RO1I9MDtmb3IoVz1FO1IhPT1XOysrUil7dmFyIGZhPXpbUl0scWE9ZmFbVV07ZmFbVV09ZmFbWl07dm9pZCAwPT09cWEmJihxYT1uZXcgc2MoUSwKdVtSXSx3W1JdKSk7ZmFbWl09cWF9fWVsc2UgYltVXSE9PUgmJmNvbnNvbGUuZXJyb3IoIlRIUkVFLkFuaW1hdGlvbk9iamVjdEdyb3VwOiBEaWZmZXJlbnQgb2JqZWN0cyB3aXRoIHRoZSBzYW1lIFVVSUQgZGV0ZWN0ZWQuIENsZWFuIHRoZSBjYWNoZXMgb3IgcmVjcmVhdGUgeW91ciBpbmZyYXN0cnVjdHVyZSB3aGVuIHJlbG9hZGluZyBzY2VuZXMuIil9dGhpcy5uQ2FjaGVkT2JqZWN0c189aH0scmVtb3ZlOmZ1bmN0aW9uKCl7Zm9yKHZhciBiPXRoaXMuX29iamVjdHMsZT10aGlzLm5DYWNoZWRPYmplY3RzXyxoPXRoaXMuX2luZGljZXNCeVVVSUQsbj10aGlzLl9iaW5kaW5ncyx1PW4ubGVuZ3RoLHc9MCx6PWFyZ3VtZW50cy5sZW5ndGg7dyE9PXo7Kyt3KXt2YXIgRT1hcmd1bWVudHNbd10sSD1FLnV1aWQsST1oW0hdO2lmKHZvaWQgMCE9PUkmJkk+PWUpe3ZhciBPPWUrKyxRPWJbT107aFtRLnV1aWRdPUk7YltJXT1RO2hbSF09TztiW09dPUU7RT0wO2ZvcihIPXU7RSE9PUg7KytFKXtRPQpuW0VdO3ZhciBSPVFbSV07UVtJXT1RW09dO1FbT109Un19fXRoaXMubkNhY2hlZE9iamVjdHNfPWV9LHVuY2FjaGU6ZnVuY3Rpb24oKXtmb3IodmFyIGI9dGhpcy5fb2JqZWN0cyxlPWIubGVuZ3RoLGg9dGhpcy5uQ2FjaGVkT2JqZWN0c18sbj10aGlzLl9pbmRpY2VzQnlVVUlELHU9dGhpcy5fYmluZGluZ3Msdz11Lmxlbmd0aCx6PTAsRT1hcmd1bWVudHMubGVuZ3RoO3ohPT1FOysreil7dmFyIEg9YXJndW1lbnRzW3pdLnV1aWQsST1uW0hdO2lmKHZvaWQgMCE9PUkpaWYoZGVsZXRlIG5bSF0sSTxoKXtIPS0taDt2YXIgTz1iW0hdLFE9LS1lLFI9YltRXTtuW08udXVpZF09STtiW0ldPU87bltSLnV1aWRdPUg7YltIXT1SO2IucG9wKCk7Tz0wO2ZvcihSPXc7TyE9PVI7KytPKXt2YXIgVT11W09dLFc9VVtRXTtVW0ldPVVbSF07VVtIXT1XO1UucG9wKCl9fWVsc2UgZm9yKFE9LS1lLFI9YltRXSxuW1IudXVpZF09SSxiW0ldPVIsYi5wb3AoKSxPPTAsUj13O08hPT1SOysrTylVPXVbT10sClVbSV09VVtRXSxVLnBvcCgpfXRoaXMubkNhY2hlZE9iamVjdHNfPWh9LHN1YnNjcmliZV86ZnVuY3Rpb24oYixlKXt2YXIgaD10aGlzLl9iaW5kaW5nc0luZGljZXNCeVBhdGgsbj1oW2JdLHU9dGhpcy5fYmluZGluZ3M7aWYodm9pZCAwIT09bilyZXR1cm4gdVtuXTt2YXIgdz10aGlzLl9wYXRocyx6PXRoaXMuX3BhcnNlZFBhdGhzLEU9dGhpcy5fb2JqZWN0cyxIPXRoaXMubkNhY2hlZE9iamVjdHNfLEk9QXJyYXkoRS5sZW5ndGgpO249dS5sZW5ndGg7aFtiXT1uO3cucHVzaChiKTt6LnB1c2goZSk7dS5wdXNoKEkpO2g9SDtmb3Iobj1FLmxlbmd0aDtoIT09bjsrK2gpSVtoXT1uZXcgc2MoRVtoXSxiLGUpO3JldHVybiBJfSx1bnN1YnNjcmliZV86ZnVuY3Rpb24oYil7dmFyIGU9dGhpcy5fYmluZGluZ3NJbmRpY2VzQnlQYXRoLGg9ZVtiXTtpZih2b2lkIDAhPT1oKXt2YXIgbj10aGlzLl9wYXRocyx1PXRoaXMuX3BhcnNlZFBhdGhzLHc9dGhpcy5fYmluZGluZ3Msej13Lmxlbmd0aC0KMSxFPXdbel07ZVtiW3pdXT1oO3dbaF09RTt3LnBvcCgpO3VbaF09dVt6XTt1LnBvcCgpO25baF09blt6XTtuLnBvcCgpfX19KTtPYmplY3QuYXNzaWduKExsLnByb3RvdHlwZSx7cGxheTpmdW5jdGlvbigpe3RoaXMuX21peGVyLl9hY3RpdmF0ZUFjdGlvbih0aGlzKTtyZXR1cm4gdGhpc30sc3RvcDpmdW5jdGlvbigpe3RoaXMuX21peGVyLl9kZWFjdGl2YXRlQWN0aW9uKHRoaXMpO3JldHVybiB0aGlzLnJlc2V0KCl9LHJlc2V0OmZ1bmN0aW9uKCl7dGhpcy5wYXVzZWQ9ITE7dGhpcy5lbmFibGVkPSEwO3RoaXMudGltZT0wO3RoaXMuX2xvb3BDb3VudD0tMTt0aGlzLl9zdGFydFRpbWU9bnVsbDtyZXR1cm4gdGhpcy5zdG9wRmFkaW5nKCkuc3RvcFdhcnBpbmcoKX0saXNSdW5uaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZW5hYmxlZCYmIXRoaXMucGF1c2VkJiYwIT09dGhpcy50aW1lU2NhbGUmJm51bGw9PT10aGlzLl9zdGFydFRpbWUmJnRoaXMuX21peGVyLl9pc0FjdGl2ZUFjdGlvbih0aGlzKX0sCmlzU2NoZWR1bGVkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21peGVyLl9pc0FjdGl2ZUFjdGlvbih0aGlzKX0sc3RhcnRBdDpmdW5jdGlvbihiKXt0aGlzLl9zdGFydFRpbWU9YjtyZXR1cm4gdGhpc30sc2V0TG9vcDpmdW5jdGlvbihiLGUpe3RoaXMubG9vcD1iO3RoaXMucmVwZXRpdGlvbnM9ZTtyZXR1cm4gdGhpc30sc2V0RWZmZWN0aXZlV2VpZ2h0OmZ1bmN0aW9uKGIpe3RoaXMud2VpZ2h0PWI7dGhpcy5fZWZmZWN0aXZlV2VpZ2h0PXRoaXMuZW5hYmxlZD9iOjA7cmV0dXJuIHRoaXMuc3RvcEZhZGluZygpfSxnZXRFZmZlY3RpdmVXZWlnaHQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZWZmZWN0aXZlV2VpZ2h0fSxmYWRlSW46ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuX3NjaGVkdWxlRmFkaW5nKGIsMCwxKX0sZmFkZU91dDpmdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5fc2NoZWR1bGVGYWRpbmcoYiwxLDApfSxjcm9zc0ZhZGVGcm9tOmZ1bmN0aW9uKGIsZSxoKXtiLmZhZGVPdXQoZSk7CnRoaXMuZmFkZUluKGUpO2lmKGgpe2g9dGhpcy5fY2xpcC5kdXJhdGlvbjt2YXIgbj1iLl9jbGlwLmR1cmF0aW9uLHU9aC9uO2Iud2FycCgxLG4vaCxlKTt0aGlzLndhcnAodSwxLGUpfXJldHVybiB0aGlzfSxjcm9zc0ZhZGVUbzpmdW5jdGlvbihiLGUsaCl7cmV0dXJuIGIuY3Jvc3NGYWRlRnJvbSh0aGlzLGUsaCl9LHN0b3BGYWRpbmc6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLl93ZWlnaHRJbnRlcnBvbGFudDtudWxsIT09YiYmKHRoaXMuX3dlaWdodEludGVycG9sYW50PW51bGwsdGhpcy5fbWl4ZXIuX3Rha2VCYWNrQ29udHJvbEludGVycG9sYW50KGIpKTtyZXR1cm4gdGhpc30sc2V0RWZmZWN0aXZlVGltZVNjYWxlOmZ1bmN0aW9uKGIpe3RoaXMudGltZVNjYWxlPWI7dGhpcy5fZWZmZWN0aXZlVGltZVNjYWxlPXRoaXMucGF1c2VkPzA6YjtyZXR1cm4gdGhpcy5zdG9wV2FycGluZygpfSxnZXRFZmZlY3RpdmVUaW1lU2NhbGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZWZmZWN0aXZlVGltZVNjYWxlfSwKc2V0RHVyYXRpb246ZnVuY3Rpb24oYil7dGhpcy50aW1lU2NhbGU9dGhpcy5fY2xpcC5kdXJhdGlvbi9iO3JldHVybiB0aGlzLnN0b3BXYXJwaW5nKCl9LHN5bmNXaXRoOmZ1bmN0aW9uKGIpe3RoaXMudGltZT1iLnRpbWU7dGhpcy50aW1lU2NhbGU9Yi50aW1lU2NhbGU7cmV0dXJuIHRoaXMuc3RvcFdhcnBpbmcoKX0saGFsdDpmdW5jdGlvbihiKXtyZXR1cm4gdGhpcy53YXJwKHRoaXMuX2VmZmVjdGl2ZVRpbWVTY2FsZSwwLGIpfSx3YXJwOmZ1bmN0aW9uKGIsZSxoKXt2YXIgbj10aGlzLl9taXhlcix1PW4udGltZSx3PXRoaXMuX3RpbWVTY2FsZUludGVycG9sYW50LHo9dGhpcy50aW1lU2NhbGU7bnVsbD09PXcmJih0aGlzLl90aW1lU2NhbGVJbnRlcnBvbGFudD13PW4uX2xlbmRDb250cm9sSW50ZXJwb2xhbnQoKSk7bj13LnBhcmFtZXRlclBvc2l0aW9uczt3PXcuc2FtcGxlVmFsdWVzO25bMF09dTtuWzFdPXUraDt3WzBdPWIvejt3WzFdPWUvejtyZXR1cm4gdGhpc30sc3RvcFdhcnBpbmc6ZnVuY3Rpb24oKXt2YXIgYj0KdGhpcy5fdGltZVNjYWxlSW50ZXJwb2xhbnQ7bnVsbCE9PWImJih0aGlzLl90aW1lU2NhbGVJbnRlcnBvbGFudD1udWxsLHRoaXMuX21peGVyLl90YWtlQmFja0NvbnRyb2xJbnRlcnBvbGFudChiKSk7cmV0dXJuIHRoaXN9LGdldE1peGVyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21peGVyfSxnZXRDbGlwOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NsaXB9LGdldFJvb3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbG9jYWxSb290fHx0aGlzLl9taXhlci5fcm9vdH0sX3VwZGF0ZTpmdW5jdGlvbihiLGUsaCxuKXtpZih0aGlzLmVuYWJsZWQpe3ZhciB1PXRoaXMuX3N0YXJ0VGltZTtpZihudWxsIT09dSl7ZT0oYi11KSpoO2lmKDA+ZXx8MD09PWgpcmV0dXJuO3RoaXMuX3N0YXJ0VGltZT1udWxsO2UqPWh9ZSo9dGhpcy5fdXBkYXRlVGltZVNjYWxlKGIpO2g9dGhpcy5fdXBkYXRlVGltZShlKTtiPXRoaXMuX3VwZGF0ZVdlaWdodChiKTtpZigwPGIpe2U9dGhpcy5faW50ZXJwb2xhbnRzOwp1PXRoaXMuX3Byb3BlcnR5QmluZGluZ3M7Zm9yKHZhciB3PTAsej1lLmxlbmd0aDt3IT09ejsrK3cpZVt3XS5ldmFsdWF0ZShoKSx1W3ddLmFjY3VtdWxhdGUobixiKX19ZWxzZSB0aGlzLl91cGRhdGVXZWlnaHQoYil9LF91cGRhdGVXZWlnaHQ6ZnVuY3Rpb24oYil7dmFyIGU9MDtpZih0aGlzLmVuYWJsZWQpe2U9dGhpcy53ZWlnaHQ7dmFyIGg9dGhpcy5fd2VpZ2h0SW50ZXJwb2xhbnQ7aWYobnVsbCE9PWgpe3ZhciBuPWguZXZhbHVhdGUoYilbMF07ZSo9bjtiPmgucGFyYW1ldGVyUG9zaXRpb25zWzFdJiYodGhpcy5zdG9wRmFkaW5nKCksMD09PW4mJih0aGlzLmVuYWJsZWQ9ITEpKX19cmV0dXJuIHRoaXMuX2VmZmVjdGl2ZVdlaWdodD1lfSxfdXBkYXRlVGltZVNjYWxlOmZ1bmN0aW9uKGIpe3ZhciBlPTA7aWYoIXRoaXMucGF1c2VkKXtlPXRoaXMudGltZVNjYWxlO3ZhciBoPXRoaXMuX3RpbWVTY2FsZUludGVycG9sYW50O2lmKG51bGwhPT1oKXt2YXIgbj1oLmV2YWx1YXRlKGIpWzBdOwplKj1uO2I+aC5wYXJhbWV0ZXJQb3NpdGlvbnNbMV0mJih0aGlzLnN0b3BXYXJwaW5nKCksMD09PWU/dGhpcy5wYXVzZWQ9ITA6dGhpcy50aW1lU2NhbGU9ZSl9fXJldHVybiB0aGlzLl9lZmZlY3RpdmVUaW1lU2NhbGU9ZX0sX3VwZGF0ZVRpbWU6ZnVuY3Rpb24oYil7dmFyIGU9dGhpcy50aW1lK2IsaD10aGlzLl9jbGlwLmR1cmF0aW9uLG49dGhpcy5sb29wLHU9dGhpcy5fbG9vcENvdW50LHc9MjIwMj09PW47aWYoMD09PWIpcmV0dXJuLTE9PT11P2U6dyYmMT09PSh1JjEpP2gtZTplO2lmKDIyMDA9PT1uKWE6e2lmKC0xPT09dSYmKHRoaXMuX2xvb3BDb3VudD0wLHRoaXMuX3NldEVuZGluZ3MoITAsITAsITEpKSxlPj1oKWU9aDtlbHNlIGlmKDA+ZSllPTA7ZWxzZSBicmVhayBhO3RoaXMuY2xhbXBXaGVuRmluaXNoZWQ/dGhpcy5wYXVzZWQ9ITA6dGhpcy5lbmFibGVkPSExO3RoaXMuX21peGVyLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImZpbmlzaGVkIixhY3Rpb246dGhpcyxkaXJlY3Rpb246MD4KYj8tMToxfSl9ZWxzZXstMT09PXUmJigwPD1iPyh1PTAsdGhpcy5fc2V0RW5kaW5ncyghMCwwPT09dGhpcy5yZXBldGl0aW9ucyx3KSk6dGhpcy5fc2V0RW5kaW5ncygwPT09dGhpcy5yZXBldGl0aW9ucywhMCx3KSk7aWYoZT49aHx8MD5lKXtuPU1hdGguZmxvb3IoZS9oKTtlLT1oKm47dSs9TWF0aC5hYnMobik7dmFyIHo9dGhpcy5yZXBldGl0aW9ucy11OzA+PXo/KHRoaXMuY2xhbXBXaGVuRmluaXNoZWQ/dGhpcy5wYXVzZWQ9ITA6dGhpcy5lbmFibGVkPSExLGU9MDxiP2g6MCx0aGlzLl9taXhlci5kaXNwYXRjaEV2ZW50KHt0eXBlOiJmaW5pc2hlZCIsYWN0aW9uOnRoaXMsZGlyZWN0aW9uOjA8Yj8xOi0xfSkpOigxPT09ej8oYj0wPmIsdGhpcy5fc2V0RW5kaW5ncyhiLCFiLHcpKTp0aGlzLl9zZXRFbmRpbmdzKCExLCExLHcpLHRoaXMuX2xvb3BDb3VudD11LHRoaXMuX21peGVyLmRpc3BhdGNoRXZlbnQoe3R5cGU6Imxvb3AiLGFjdGlvbjp0aGlzLGxvb3BEZWx0YTpufSkpfWlmKHcmJgoxPT09KHUmMSkpcmV0dXJuIHRoaXMudGltZT1lLGgtZX1yZXR1cm4gdGhpcy50aW1lPWV9LF9zZXRFbmRpbmdzOmZ1bmN0aW9uKGIsZSxoKXt2YXIgbj10aGlzLl9pbnRlcnBvbGFudFNldHRpbmdzO2g/KG4uZW5kaW5nU3RhcnQ9MjQwMSxuLmVuZGluZ0VuZD0yNDAxKToobi5lbmRpbmdTdGFydD1iP3RoaXMuemVyb1Nsb3BlQXRTdGFydD8yNDAxOjI0MDA6MjQwMixuLmVuZGluZ0VuZD1lP3RoaXMuemVyb1Nsb3BlQXRFbmQ/MjQwMToyNDAwOjI0MDIpfSxfc2NoZWR1bGVGYWRpbmc6ZnVuY3Rpb24oYixlLGgpe3ZhciBuPXRoaXMuX21peGVyLHU9bi50aW1lLHc9dGhpcy5fd2VpZ2h0SW50ZXJwb2xhbnQ7bnVsbD09PXcmJih0aGlzLl93ZWlnaHRJbnRlcnBvbGFudD13PW4uX2xlbmRDb250cm9sSW50ZXJwb2xhbnQoKSk7bj13LnBhcmFtZXRlclBvc2l0aW9uczt3PXcuc2FtcGxlVmFsdWVzO25bMF09dTt3WzBdPWU7blsxXT11K2I7d1sxXT1oO3JldHVybiB0aGlzfX0pO1ZpLnByb3RvdHlwZT0KT2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKGMucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6VmksX2JpbmRBY3Rpb246ZnVuY3Rpb24oYixlKXt2YXIgaD1iLl9sb2NhbFJvb3R8fHRoaXMuX3Jvb3Qsbj1iLl9jbGlwLnRyYWNrcyx1PW4ubGVuZ3RoLHc9Yi5fcHJvcGVydHlCaW5kaW5ncztiPWIuX2ludGVycG9sYW50czt2YXIgej1oLnV1aWQsRT10aGlzLl9iaW5kaW5nc0J5Um9vdEFuZE5hbWUsSD1FW3pdO3ZvaWQgMD09PUgmJihIPXt9LEVbel09SCk7Zm9yKEU9MDtFIT09dTsrK0Upe3ZhciBJPW5bRV0sTz1JLm5hbWUsUT1IW09dO2lmKHZvaWQgMD09PVEpe1E9d1tFXTtpZih2b2lkIDAhPT1RKXtudWxsPT09US5fY2FjaGVJbmRleCYmKCsrUS5yZWZlcmVuY2VDb3VudCx0aGlzLl9hZGRJbmFjdGl2ZUJpbmRpbmcoUSx6LE8pKTtjb250aW51ZX1RPW5ldyBVaShzYy5jcmVhdGUoaCxPLGUmJmUuX3Byb3BlcnR5QmluZGluZ3NbRV0uYmluZGluZy5wYXJzZWRQYXRoKSxJLlZhbHVlVHlwZU5hbWUsCkkuZ2V0VmFsdWVTaXplKCkpOysrUS5yZWZlcmVuY2VDb3VudDt0aGlzLl9hZGRJbmFjdGl2ZUJpbmRpbmcoUSx6LE8pfXdbRV09UTtiW0VdLnJlc3VsdEJ1ZmZlcj1RLmJ1ZmZlcn19LF9hY3RpdmF0ZUFjdGlvbjpmdW5jdGlvbihiKXtpZighdGhpcy5faXNBY3RpdmVBY3Rpb24oYikpe2lmKG51bGw9PT1iLl9jYWNoZUluZGV4KXt2YXIgZT0oYi5fbG9jYWxSb290fHx0aGlzLl9yb290KS51dWlkLGg9Yi5fY2xpcC51dWlkLG49dGhpcy5fYWN0aW9uc0J5Q2xpcFtoXTt0aGlzLl9iaW5kQWN0aW9uKGIsbiYmbi5rbm93bkFjdGlvbnNbMF0pO3RoaXMuX2FkZEluYWN0aXZlQWN0aW9uKGIsaCxlKX1lPWIuX3Byb3BlcnR5QmluZGluZ3M7aD0wO2ZvcihuPWUubGVuZ3RoO2ghPT1uOysraCl7dmFyIHU9ZVtoXTswPT09dS51c2VDb3VudCsrJiYodGhpcy5fbGVuZEJpbmRpbmcodSksdS5zYXZlT3JpZ2luYWxTdGF0ZSgpKX10aGlzLl9sZW5kQWN0aW9uKGIpfX0sX2RlYWN0aXZhdGVBY3Rpb246ZnVuY3Rpb24oYil7aWYodGhpcy5faXNBY3RpdmVBY3Rpb24oYikpe2Zvcih2YXIgZT0KYi5fcHJvcGVydHlCaW5kaW5ncyxoPTAsbj1lLmxlbmd0aDtoIT09bjsrK2gpe3ZhciB1PWVbaF07MD09PS0tdS51c2VDb3VudCYmKHUucmVzdG9yZU9yaWdpbmFsU3RhdGUoKSx0aGlzLl90YWtlQmFja0JpbmRpbmcodSkpfXRoaXMuX3Rha2VCYWNrQWN0aW9uKGIpfX0sX2luaXRNZW1vcnlNYW5hZ2VyOmZ1bmN0aW9uKCl7dGhpcy5fYWN0aW9ucz1bXTt0aGlzLl9uQWN0aXZlQWN0aW9ucz0wO3RoaXMuX2FjdGlvbnNCeUNsaXA9e307dGhpcy5fYmluZGluZ3M9W107dGhpcy5fbkFjdGl2ZUJpbmRpbmdzPTA7dGhpcy5fYmluZGluZ3NCeVJvb3RBbmROYW1lPXt9O3RoaXMuX2NvbnRyb2xJbnRlcnBvbGFudHM9W107dGhpcy5fbkFjdGl2ZUNvbnRyb2xJbnRlcnBvbGFudHM9MDt2YXIgYj10aGlzO3RoaXMuc3RhdHM9e2FjdGlvbnM6e2dldCB0b3RhbCgpe3JldHVybiBiLl9hY3Rpb25zLmxlbmd0aH0sZ2V0IGluVXNlKCl7cmV0dXJuIGIuX25BY3RpdmVBY3Rpb25zfX0sYmluZGluZ3M6e2dldCB0b3RhbCgpe3JldHVybiBiLl9iaW5kaW5ncy5sZW5ndGh9LApnZXQgaW5Vc2UoKXtyZXR1cm4gYi5fbkFjdGl2ZUJpbmRpbmdzfX0sY29udHJvbEludGVycG9sYW50czp7Z2V0IHRvdGFsKCl7cmV0dXJuIGIuX2NvbnRyb2xJbnRlcnBvbGFudHMubGVuZ3RofSxnZXQgaW5Vc2UoKXtyZXR1cm4gYi5fbkFjdGl2ZUNvbnRyb2xJbnRlcnBvbGFudHN9fX19LF9pc0FjdGl2ZUFjdGlvbjpmdW5jdGlvbihiKXtiPWIuX2NhY2hlSW5kZXg7cmV0dXJuIG51bGwhPT1iJiZiPHRoaXMuX25BY3RpdmVBY3Rpb25zfSxfYWRkSW5hY3RpdmVBY3Rpb246ZnVuY3Rpb24oYixlLGgpe3ZhciBuPXRoaXMuX2FjdGlvbnMsdT10aGlzLl9hY3Rpb25zQnlDbGlwLHc9dVtlXTt2b2lkIDA9PT13Pyh3PXtrbm93bkFjdGlvbnM6W2JdLGFjdGlvbkJ5Um9vdDp7fX0sYi5fYnlDbGlwQ2FjaGVJbmRleD0wLHVbZV09dyk6KGU9dy5rbm93bkFjdGlvbnMsYi5fYnlDbGlwQ2FjaGVJbmRleD1lLmxlbmd0aCxlLnB1c2goYikpO2IuX2NhY2hlSW5kZXg9bi5sZW5ndGg7bi5wdXNoKGIpOwp3LmFjdGlvbkJ5Um9vdFtoXT1ifSxfcmVtb3ZlSW5hY3RpdmVBY3Rpb246ZnVuY3Rpb24oYil7dmFyIGU9dGhpcy5fYWN0aW9ucyxoPWVbZS5sZW5ndGgtMV0sbj1iLl9jYWNoZUluZGV4O2guX2NhY2hlSW5kZXg9bjtlW25dPWg7ZS5wb3AoKTtiLl9jYWNoZUluZGV4PW51bGw7ZT1iLl9jbGlwLnV1aWQ7aD10aGlzLl9hY3Rpb25zQnlDbGlwO249aFtlXTt2YXIgdT1uLmtub3duQWN0aW9ucyx3PXVbdS5sZW5ndGgtMV0sej1iLl9ieUNsaXBDYWNoZUluZGV4O3cuX2J5Q2xpcENhY2hlSW5kZXg9ejt1W3pdPXc7dS5wb3AoKTtiLl9ieUNsaXBDYWNoZUluZGV4PW51bGw7ZGVsZXRlIG4uYWN0aW9uQnlSb290WyhiLl9sb2NhbFJvb3R8fHRoaXMuX3Jvb3QpLnV1aWRdOzA9PT11Lmxlbmd0aCYmZGVsZXRlIGhbZV07dGhpcy5fcmVtb3ZlSW5hY3RpdmVCaW5kaW5nc0ZvckFjdGlvbihiKX0sX3JlbW92ZUluYWN0aXZlQmluZGluZ3NGb3JBY3Rpb246ZnVuY3Rpb24oYil7Yj1iLl9wcm9wZXJ0eUJpbmRpbmdzOwpmb3IodmFyIGU9MCxoPWIubGVuZ3RoO2UhPT1oOysrZSl7dmFyIG49YltlXTswPT09LS1uLnJlZmVyZW5jZUNvdW50JiZ0aGlzLl9yZW1vdmVJbmFjdGl2ZUJpbmRpbmcobil9fSxfbGVuZEFjdGlvbjpmdW5jdGlvbihiKXt2YXIgZT10aGlzLl9hY3Rpb25zLGg9Yi5fY2FjaGVJbmRleCxuPXRoaXMuX25BY3RpdmVBY3Rpb25zKyssdT1lW25dO2IuX2NhY2hlSW5kZXg9bjtlW25dPWI7dS5fY2FjaGVJbmRleD1oO2VbaF09dX0sX3Rha2VCYWNrQWN0aW9uOmZ1bmN0aW9uKGIpe3ZhciBlPXRoaXMuX2FjdGlvbnMsaD1iLl9jYWNoZUluZGV4LG49LS10aGlzLl9uQWN0aXZlQWN0aW9ucyx1PWVbbl07Yi5fY2FjaGVJbmRleD1uO2Vbbl09Yjt1Ll9jYWNoZUluZGV4PWg7ZVtoXT11fSxfYWRkSW5hY3RpdmVCaW5kaW5nOmZ1bmN0aW9uKGIsZSxoKXt2YXIgbj10aGlzLl9iaW5kaW5nc0J5Um9vdEFuZE5hbWUsdT1uW2VdLHc9dGhpcy5fYmluZGluZ3M7dm9pZCAwPT09dSYmKHU9e30sbltlXT0KdSk7dVtoXT1iO2IuX2NhY2hlSW5kZXg9dy5sZW5ndGg7dy5wdXNoKGIpfSxfcmVtb3ZlSW5hY3RpdmVCaW5kaW5nOmZ1bmN0aW9uKGIpe3ZhciBlPXRoaXMuX2JpbmRpbmdzLGg9Yi5iaW5kaW5nLG49aC5yb290Tm9kZS51dWlkO2g9aC5wYXRoO3ZhciB1PXRoaXMuX2JpbmRpbmdzQnlSb290QW5kTmFtZSx3PXVbbl0sej1lW2UubGVuZ3RoLTFdO2I9Yi5fY2FjaGVJbmRleDt6Ll9jYWNoZUluZGV4PWI7ZVtiXT16O2UucG9wKCk7ZGVsZXRlIHdbaF07YTp7Zm9yKHZhciBFIGluIHcpYnJlYWsgYTtkZWxldGUgdVtuXX19LF9sZW5kQmluZGluZzpmdW5jdGlvbihiKXt2YXIgZT10aGlzLl9iaW5kaW5ncyxoPWIuX2NhY2hlSW5kZXgsbj10aGlzLl9uQWN0aXZlQmluZGluZ3MrKyx1PWVbbl07Yi5fY2FjaGVJbmRleD1uO2Vbbl09Yjt1Ll9jYWNoZUluZGV4PWg7ZVtoXT11fSxfdGFrZUJhY2tCaW5kaW5nOmZ1bmN0aW9uKGIpe3ZhciBlPXRoaXMuX2JpbmRpbmdzLGg9Yi5fY2FjaGVJbmRleCwKbj0tLXRoaXMuX25BY3RpdmVCaW5kaW5ncyx1PWVbbl07Yi5fY2FjaGVJbmRleD1uO2Vbbl09Yjt1Ll9jYWNoZUluZGV4PWg7ZVtoXT11fSxfbGVuZENvbnRyb2xJbnRlcnBvbGFudDpmdW5jdGlvbigpe3ZhciBiPXRoaXMuX2NvbnRyb2xJbnRlcnBvbGFudHMsZT10aGlzLl9uQWN0aXZlQ29udHJvbEludGVycG9sYW50cysrLGg9YltlXTt2b2lkIDA9PT1oJiYoaD1uZXcgcWcobmV3IEZsb2F0MzJBcnJheSgyKSxuZXcgRmxvYXQzMkFycmF5KDIpLDEsdGhpcy5fY29udHJvbEludGVycG9sYW50c1Jlc3VsdEJ1ZmZlciksaC5fX2NhY2hlSW5kZXg9ZSxiW2VdPWgpO3JldHVybiBofSxfdGFrZUJhY2tDb250cm9sSW50ZXJwb2xhbnQ6ZnVuY3Rpb24oYil7dmFyIGU9dGhpcy5fY29udHJvbEludGVycG9sYW50cyxoPWIuX19jYWNoZUluZGV4LG49LS10aGlzLl9uQWN0aXZlQ29udHJvbEludGVycG9sYW50cyx1PWVbbl07Yi5fX2NhY2hlSW5kZXg9bjtlW25dPWI7dS5fX2NhY2hlSW5kZXg9Cmg7ZVtoXT11fSxfY29udHJvbEludGVycG9sYW50c1Jlc3VsdEJ1ZmZlcjpuZXcgRmxvYXQzMkFycmF5KDEpLGNsaXBBY3Rpb246ZnVuY3Rpb24oYixlKXt2YXIgaD1lfHx0aGlzLl9yb290LG49aC51dWlkO2g9InN0cmluZyI9PT10eXBlb2YgYj9JYy5maW5kQnlOYW1lKGgsYik6YjtiPW51bGwhPT1oP2gudXVpZDpiO3ZhciB1PXRoaXMuX2FjdGlvbnNCeUNsaXBbYl0sdz1udWxsO2lmKHZvaWQgMCE9PXUpe3c9dS5hY3Rpb25CeVJvb3Rbbl07aWYodm9pZCAwIT09dylyZXR1cm4gdzt3PXUua25vd25BY3Rpb25zWzBdO251bGw9PT1oJiYoaD13Ll9jbGlwKX1pZihudWxsPT09aClyZXR1cm4gbnVsbDtlPW5ldyBMbCh0aGlzLGgsZSk7dGhpcy5fYmluZEFjdGlvbihlLHcpO3RoaXMuX2FkZEluYWN0aXZlQWN0aW9uKGUsYixuKTtyZXR1cm4gZX0sZXhpc3RpbmdBY3Rpb246ZnVuY3Rpb24oYixlKXt2YXIgaD1lfHx0aGlzLl9yb290O2U9aC51dWlkO2g9InN0cmluZyI9PT10eXBlb2YgYj8KSWMuZmluZEJ5TmFtZShoLGIpOmI7Yj10aGlzLl9hY3Rpb25zQnlDbGlwW2g/aC51dWlkOmJdO3JldHVybiB2b2lkIDAhPT1iP2IuYWN0aW9uQnlSb290W2VdfHxudWxsOm51bGx9LHN0b3BBbGxBY3Rpb246ZnVuY3Rpb24oKXtmb3IodmFyIGI9dGhpcy5fYWN0aW9ucyxlPXRoaXMuX25BY3RpdmVBY3Rpb25zLGg9dGhpcy5fYmluZGluZ3Msbj10aGlzLl9uQWN0aXZlQmluZGluZ3MsdT10aGlzLl9uQWN0aXZlQmluZGluZ3M9dGhpcy5fbkFjdGl2ZUFjdGlvbnM9MDt1IT09ZTsrK3UpYlt1XS5yZXNldCgpO2Zvcih1PTA7dSE9PW47Kyt1KWhbdV0udXNlQ291bnQ9MDtyZXR1cm4gdGhpc30sdXBkYXRlOmZ1bmN0aW9uKGIpe2IqPXRoaXMudGltZVNjYWxlO2Zvcih2YXIgZT10aGlzLl9hY3Rpb25zLGg9dGhpcy5fbkFjdGl2ZUFjdGlvbnMsbj10aGlzLnRpbWUrPWIsdT1NYXRoLnNpZ24oYiksdz10aGlzLl9hY2N1SW5kZXhePTEsej0wO3ohPT1oOysreillW3pdLl91cGRhdGUobixiLHUsCncpO2I9dGhpcy5fYmluZGluZ3M7ZT10aGlzLl9uQWN0aXZlQmluZGluZ3M7Zm9yKHo9MDt6IT09ZTsrK3opYlt6XS5hcHBseSh3KTtyZXR1cm4gdGhpc30sZ2V0Um9vdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yb290fSx1bmNhY2hlQ2xpcDpmdW5jdGlvbihiKXt2YXIgZT10aGlzLl9hY3Rpb25zO2I9Yi51dWlkO3ZhciBoPXRoaXMuX2FjdGlvbnNCeUNsaXAsbj1oW2JdO2lmKHZvaWQgMCE9PW4pe249bi5rbm93bkFjdGlvbnM7Zm9yKHZhciB1PTAsdz1uLmxlbmd0aDt1IT09dzsrK3Upe3ZhciB6PW5bdV07dGhpcy5fZGVhY3RpdmF0ZUFjdGlvbih6KTt2YXIgRT16Ll9jYWNoZUluZGV4LEg9ZVtlLmxlbmd0aC0xXTt6Ll9jYWNoZUluZGV4PW51bGw7ei5fYnlDbGlwQ2FjaGVJbmRleD1udWxsO0guX2NhY2hlSW5kZXg9RTtlW0VdPUg7ZS5wb3AoKTt0aGlzLl9yZW1vdmVJbmFjdGl2ZUJpbmRpbmdzRm9yQWN0aW9uKHopfWRlbGV0ZSBoW2JdfX0sdW5jYWNoZVJvb3Q6ZnVuY3Rpb24oYil7Yj0KYi51dWlkO3ZhciBlPXRoaXMuX2FjdGlvbnNCeUNsaXA7Zm9yKG4gaW4gZSl7dmFyIGg9ZVtuXS5hY3Rpb25CeVJvb3RbYl07dm9pZCAwIT09aCYmKHRoaXMuX2RlYWN0aXZhdGVBY3Rpb24oaCksdGhpcy5fcmVtb3ZlSW5hY3RpdmVBY3Rpb24oaCkpfXZhciBuPXRoaXMuX2JpbmRpbmdzQnlSb290QW5kTmFtZVtiXTtpZih2b2lkIDAhPT1uKWZvcih2YXIgdSBpbiBuKWI9blt1XSxiLnJlc3RvcmVPcmlnaW5hbFN0YXRlKCksdGhpcy5fcmVtb3ZlSW5hY3RpdmVCaW5kaW5nKGIpfSx1bmNhY2hlQWN0aW9uOmZ1bmN0aW9uKGIsZSl7Yj10aGlzLmV4aXN0aW5nQWN0aW9uKGIsZSk7bnVsbCE9PWImJih0aGlzLl9kZWFjdGl2YXRlQWN0aW9uKGIpLHRoaXMuX3JlbW92ZUluYWN0aXZlQWN0aW9uKGIpKX19KTtEaC5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IERoKHZvaWQgMD09PXRoaXMudmFsdWUuY2xvbmU/dGhpcy52YWx1ZTp0aGlzLnZhbHVlLmNsb25lKCkpfTtXaS5wcm90b3R5cGU9Ck9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZSh4YS5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpXaSxpc0luc3RhbmNlZEJ1ZmZlckdlb21ldHJ5OiEwLGNvcHk6ZnVuY3Rpb24oYil7eGEucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLGIpO3RoaXMubWF4SW5zdGFuY2VkQ291bnQ9Yi5tYXhJbnN0YW5jZWRDb3VudDtyZXR1cm4gdGhpc30sY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9fSk7WGkucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShoZS5wcm90b3R5cGUpLHtjb25zdHJ1Y3RvcjpYaSxpc0luc3RhbmNlZEludGVybGVhdmVkQnVmZmVyOiEwLGNvcHk6ZnVuY3Rpb24oYil7aGUucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLGIpO3RoaXMubWVzaFBlckF0dHJpYnV0ZT1iLm1lc2hQZXJBdHRyaWJ1dGU7cmV0dXJuIHRoaXN9fSk7WWkucHJvdG90eXBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShULnByb3RvdHlwZSksCntjb25zdHJ1Y3RvcjpZaSxpc0luc3RhbmNlZEJ1ZmZlckF0dHJpYnV0ZTohMCxjb3B5OmZ1bmN0aW9uKGIpe1QucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLGIpO3RoaXMubWVzaFBlckF0dHJpYnV0ZT1iLm1lc2hQZXJBdHRyaWJ1dGU7cmV0dXJuIHRoaXN9fSk7T2JqZWN0LmFzc2lnbihNbC5wcm90b3R5cGUse2xpbmVQcmVjaXNpb246MSxzZXQ6ZnVuY3Rpb24oYixlKXt0aGlzLnJheS5zZXQoYixlKX0sc2V0RnJvbUNhbWVyYTpmdW5jdGlvbihiLGUpe2UmJmUuaXNQZXJzcGVjdGl2ZUNhbWVyYT8odGhpcy5yYXkub3JpZ2luLnNldEZyb21NYXRyaXhQb3NpdGlvbihlLm1hdHJpeFdvcmxkKSx0aGlzLnJheS5kaXJlY3Rpb24uc2V0KGIueCxiLnksLjUpLnVucHJvamVjdChlKS5zdWIodGhpcy5yYXkub3JpZ2luKS5ub3JtYWxpemUoKSk6ZSYmZS5pc09ydGhvZ3JhcGhpY0NhbWVyYT8odGhpcy5yYXkub3JpZ2luLnNldChiLngsYi55LChlLm5lYXIrZS5mYXIpLyhlLm5lYXItZS5mYXIpKS51bnByb2plY3QoZSksCnRoaXMucmF5LmRpcmVjdGlvbi5zZXQoMCwwLC0xKS50cmFuc2Zvcm1EaXJlY3Rpb24oZS5tYXRyaXhXb3JsZCkpOmNvbnNvbGUuZXJyb3IoIlRIUkVFLlJheWNhc3RlcjogVW5zdXBwb3J0ZWQgY2FtZXJhIHR5cGUuIil9LGludGVyc2VjdE9iamVjdDpmdW5jdGlvbihiLGUsaCl7aD1ofHxbXTtaaShiLHRoaXMsaCxlKTtoLnNvcnQoTmwpO3JldHVybiBofSxpbnRlcnNlY3RPYmplY3RzOmZ1bmN0aW9uKGIsZSxoKXtoPWh8fFtdO2lmKCExPT09QXJyYXkuaXNBcnJheShiKSlyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5SYXljYXN0ZXIuaW50ZXJzZWN0T2JqZWN0czogb2JqZWN0cyBpcyBub3QgYW4gQXJyYXkuIiksaDtmb3IodmFyIG49MCx1PWIubGVuZ3RoO248dTtuKyspWmkoYltuXSx0aGlzLGgsZSk7aC5zb3J0KE5sKTtyZXR1cm4gaH19KTtPYmplY3QuYXNzaWduKE9sLnByb3RvdHlwZSx7c2V0OmZ1bmN0aW9uKGIsZSxoKXt0aGlzLnJhZGl1cz1iO3RoaXMucGhpPWU7dGhpcy50aGV0YT0KaDtyZXR1cm4gdGhpc30sY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9LGNvcHk6ZnVuY3Rpb24oYil7dGhpcy5yYWRpdXM9Yi5yYWRpdXM7dGhpcy5waGk9Yi5waGk7dGhpcy50aGV0YT1iLnRoZXRhO3JldHVybiB0aGlzfSxtYWtlU2FmZTpmdW5jdGlvbigpe3RoaXMucGhpPU1hdGgubWF4KDFFLTYsTWF0aC5taW4oTWF0aC5QSS0xRS02LHRoaXMucGhpKSk7cmV0dXJuIHRoaXN9LHNldEZyb21WZWN0b3IzOmZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLnNldEZyb21DYXJ0ZXNpYW5Db29yZHMoYi54LGIueSxiLnopfSxzZXRGcm9tQ2FydGVzaWFuQ29vcmRzOmZ1bmN0aW9uKGIsZSxoKXt0aGlzLnJhZGl1cz1NYXRoLnNxcnQoYipiK2UqZStoKmgpOzA9PT10aGlzLnJhZGl1cz90aGlzLnBoaT10aGlzLnRoZXRhPTA6KHRoaXMudGhldGE9TWF0aC5hdGFuMihiLGgpLHRoaXMucGhpPU1hdGguYWNvcyhvYi5jbGFtcChlL3RoaXMucmFkaXVzLAotMSwxKSkpO3JldHVybiB0aGlzfX0pO09iamVjdC5hc3NpZ24oUGwucHJvdG90eXBlLHtzZXQ6ZnVuY3Rpb24oYixlLGgpe3RoaXMucmFkaXVzPWI7dGhpcy50aGV0YT1lO3RoaXMueT1oO3JldHVybiB0aGlzfSxjbG9uZTpmdW5jdGlvbigpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX0sY29weTpmdW5jdGlvbihiKXt0aGlzLnJhZGl1cz1iLnJhZGl1czt0aGlzLnRoZXRhPWIudGhldGE7dGhpcy55PWIueTtyZXR1cm4gdGhpc30sc2V0RnJvbVZlY3RvcjM6ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuc2V0RnJvbUNhcnRlc2lhbkNvb3JkcyhiLngsYi55LGIueil9LHNldEZyb21DYXJ0ZXNpYW5Db29yZHM6ZnVuY3Rpb24oYixlLGgpe3RoaXMucmFkaXVzPU1hdGguc3FydChiKmIraCpoKTt0aGlzLnRoZXRhPU1hdGguYXRhbjIoYixoKTt0aGlzLnk9ZTtyZXR1cm4gdGhpc319KTtPYmplY3QuYXNzaWduKCRpLnByb3RvdHlwZSx7c2V0OmZ1bmN0aW9uKGIsZSl7dGhpcy5taW4uY29weShiKTsKdGhpcy5tYXguY29weShlKTtyZXR1cm4gdGhpc30sc2V0RnJvbVBvaW50czpmdW5jdGlvbihiKXt0aGlzLm1ha2VFbXB0eSgpO2Zvcih2YXIgZT0wLGg9Yi5sZW5ndGg7ZTxoO2UrKyl0aGlzLmV4cGFuZEJ5UG9pbnQoYltlXSk7cmV0dXJuIHRoaXN9LHNldEZyb21DZW50ZXJBbmRTaXplOmZ1bmN0aW9uKCl7dmFyIGI9bmV3IGQ7cmV0dXJuIGZ1bmN0aW9uKGUsaCl7aD1iLmNvcHkoaCkubXVsdGlwbHlTY2FsYXIoLjUpO3RoaXMubWluLmNvcHkoZSkuc3ViKGgpO3RoaXMubWF4LmNvcHkoZSkuYWRkKGgpO3JldHVybiB0aGlzfX0oKSxjbG9uZTpmdW5jdGlvbigpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX0sY29weTpmdW5jdGlvbihiKXt0aGlzLm1pbi5jb3B5KGIubWluKTt0aGlzLm1heC5jb3B5KGIubWF4KTtyZXR1cm4gdGhpc30sbWFrZUVtcHR5OmZ1bmN0aW9uKCl7dGhpcy5taW4ueD10aGlzLm1pbi55PUluZmluaXR5O3RoaXMubWF4Lng9dGhpcy5tYXgueT0KLUluZmluaXR5O3JldHVybiB0aGlzfSxpc0VtcHR5OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWF4Lng8dGhpcy5taW4ueHx8dGhpcy5tYXgueTx0aGlzLm1pbi55fSxnZXRDZW50ZXI6ZnVuY3Rpb24oYil7dm9pZCAwPT09YiYmKGNvbnNvbGUud2FybigiVEhSRUUuQm94MjogLmdldENlbnRlcigpIHRhcmdldCBpcyBub3cgcmVxdWlyZWQiKSxiPW5ldyBkKTtyZXR1cm4gdGhpcy5pc0VtcHR5KCk/Yi5zZXQoMCwwKTpiLmFkZFZlY3RvcnModGhpcy5taW4sdGhpcy5tYXgpLm11bHRpcGx5U2NhbGFyKC41KX0sZ2V0U2l6ZTpmdW5jdGlvbihiKXt2b2lkIDA9PT1iJiYoY29uc29sZS53YXJuKCJUSFJFRS5Cb3gyOiAuZ2V0U2l6ZSgpIHRhcmdldCBpcyBub3cgcmVxdWlyZWQiKSxiPW5ldyBkKTtyZXR1cm4gdGhpcy5pc0VtcHR5KCk/Yi5zZXQoMCwwKTpiLnN1YlZlY3RvcnModGhpcy5tYXgsdGhpcy5taW4pfSxleHBhbmRCeVBvaW50OmZ1bmN0aW9uKGIpe3RoaXMubWluLm1pbihiKTt0aGlzLm1heC5tYXgoYik7CnJldHVybiB0aGlzfSxleHBhbmRCeVZlY3RvcjpmdW5jdGlvbihiKXt0aGlzLm1pbi5zdWIoYik7dGhpcy5tYXguYWRkKGIpO3JldHVybiB0aGlzfSxleHBhbmRCeVNjYWxhcjpmdW5jdGlvbihiKXt0aGlzLm1pbi5hZGRTY2FsYXIoLWIpO3RoaXMubWF4LmFkZFNjYWxhcihiKTtyZXR1cm4gdGhpc30sY29udGFpbnNQb2ludDpmdW5jdGlvbihiKXtyZXR1cm4gYi54PHRoaXMubWluLnh8fGIueD50aGlzLm1heC54fHxiLnk8dGhpcy5taW4ueXx8Yi55PnRoaXMubWF4Lnk/ITE6ITB9LGNvbnRhaW5zQm94OmZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLm1pbi54PD1iLm1pbi54JiZiLm1heC54PD10aGlzLm1heC54JiZ0aGlzLm1pbi55PD1iLm1pbi55JiZiLm1heC55PD10aGlzLm1heC55fSxnZXRQYXJhbWV0ZXI6ZnVuY3Rpb24oYixlKXt2b2lkIDA9PT1lJiYoY29uc29sZS53YXJuKCJUSFJFRS5Cb3gyOiAuZ2V0UGFyYW1ldGVyKCkgdGFyZ2V0IGlzIG5vdyByZXF1aXJlZCIpLGU9bmV3IGQpOwpyZXR1cm4gZS5zZXQoKGIueC10aGlzLm1pbi54KS8odGhpcy5tYXgueC10aGlzLm1pbi54KSwoYi55LXRoaXMubWluLnkpLyh0aGlzLm1heC55LXRoaXMubWluLnkpKX0saW50ZXJzZWN0c0JveDpmdW5jdGlvbihiKXtyZXR1cm4gYi5tYXgueDx0aGlzLm1pbi54fHxiLm1pbi54PnRoaXMubWF4Lnh8fGIubWF4Lnk8dGhpcy5taW4ueXx8Yi5taW4ueT50aGlzLm1heC55PyExOiEwfSxjbGFtcFBvaW50OmZ1bmN0aW9uKGIsZSl7dm9pZCAwPT09ZSYmKGNvbnNvbGUud2FybigiVEhSRUUuQm94MjogLmNsYW1wUG9pbnQoKSB0YXJnZXQgaXMgbm93IHJlcXVpcmVkIiksZT1uZXcgZCk7cmV0dXJuIGUuY29weShiKS5jbGFtcCh0aGlzLm1pbix0aGlzLm1heCl9LGRpc3RhbmNlVG9Qb2ludDpmdW5jdGlvbigpe3ZhciBiPW5ldyBkO3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gYi5jb3B5KGUpLmNsYW1wKHRoaXMubWluLHRoaXMubWF4KS5zdWIoZSkubGVuZ3RoKCl9fSgpLGludGVyc2VjdDpmdW5jdGlvbihiKXt0aGlzLm1pbi5tYXgoYi5taW4pOwp0aGlzLm1heC5taW4oYi5tYXgpO3JldHVybiB0aGlzfSx1bmlvbjpmdW5jdGlvbihiKXt0aGlzLm1pbi5taW4oYi5taW4pO3RoaXMubWF4Lm1heChiLm1heCk7cmV0dXJuIHRoaXN9LHRyYW5zbGF0ZTpmdW5jdGlvbihiKXt0aGlzLm1pbi5hZGQoYik7dGhpcy5tYXguYWRkKGIpO3JldHVybiB0aGlzfSxlcXVhbHM6ZnVuY3Rpb24oYil7cmV0dXJuIGIubWluLmVxdWFscyh0aGlzLm1pbikmJmIubWF4LmVxdWFscyh0aGlzLm1heCl9fSk7T2JqZWN0LmFzc2lnbihhai5wcm90b3R5cGUse3NldDpmdW5jdGlvbihiLGUpe3RoaXMuc3RhcnQuY29weShiKTt0aGlzLmVuZC5jb3B5KGUpO3JldHVybiB0aGlzfSxjbG9uZTpmdW5jdGlvbigpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX0sY29weTpmdW5jdGlvbihiKXt0aGlzLnN0YXJ0LmNvcHkoYi5zdGFydCk7dGhpcy5lbmQuY29weShiLmVuZCk7cmV0dXJuIHRoaXN9LGdldENlbnRlcjpmdW5jdGlvbihiKXt2b2lkIDA9PT0KYiYmKGNvbnNvbGUud2FybigiVEhSRUUuTGluZTM6IC5nZXRDZW50ZXIoKSB0YXJnZXQgaXMgbm93IHJlcXVpcmVkIiksYj1uZXcgZyk7cmV0dXJuIGIuYWRkVmVjdG9ycyh0aGlzLnN0YXJ0LHRoaXMuZW5kKS5tdWx0aXBseVNjYWxhciguNSl9LGRlbHRhOmZ1bmN0aW9uKGIpe3ZvaWQgMD09PWImJihjb25zb2xlLndhcm4oIlRIUkVFLkxpbmUzOiAuZGVsdGEoKSB0YXJnZXQgaXMgbm93IHJlcXVpcmVkIiksYj1uZXcgZyk7cmV0dXJuIGIuc3ViVmVjdG9ycyh0aGlzLmVuZCx0aGlzLnN0YXJ0KX0sZGlzdGFuY2VTcTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN0YXJ0LmRpc3RhbmNlVG9TcXVhcmVkKHRoaXMuZW5kKX0sZGlzdGFuY2U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdGFydC5kaXN0YW5jZVRvKHRoaXMuZW5kKX0sYXQ6ZnVuY3Rpb24oYixlKXt2b2lkIDA9PT1lJiYoY29uc29sZS53YXJuKCJUSFJFRS5MaW5lMzogLmF0KCkgdGFyZ2V0IGlzIG5vdyByZXF1aXJlZCIpLGU9Cm5ldyBnKTtyZXR1cm4gdGhpcy5kZWx0YShlKS5tdWx0aXBseVNjYWxhcihiKS5hZGQodGhpcy5zdGFydCl9LGNsb3Nlc3RQb2ludFRvUG9pbnRQYXJhbWV0ZXI6ZnVuY3Rpb24oKXt2YXIgYj1uZXcgZyxlPW5ldyBnO3JldHVybiBmdW5jdGlvbihoLG4pe2Iuc3ViVmVjdG9ycyhoLHRoaXMuc3RhcnQpO2Uuc3ViVmVjdG9ycyh0aGlzLmVuZCx0aGlzLnN0YXJ0KTtoPWUuZG90KGIpL2UuZG90KGUpO24mJihoPW9iLmNsYW1wKGgsMCwxKSk7cmV0dXJuIGh9fSgpLGNsb3Nlc3RQb2ludFRvUG9pbnQ6ZnVuY3Rpb24oYixlLGgpe2I9dGhpcy5jbG9zZXN0UG9pbnRUb1BvaW50UGFyYW1ldGVyKGIsZSk7dm9pZCAwPT09aCYmKGNvbnNvbGUud2FybigiVEhSRUUuTGluZTM6IC5jbG9zZXN0UG9pbnRUb1BvaW50KCkgdGFyZ2V0IGlzIG5vdyByZXF1aXJlZCIpLGg9bmV3IGcpO3JldHVybiB0aGlzLmRlbHRhKGgpLm11bHRpcGx5U2NhbGFyKGIpLmFkZCh0aGlzLnN0YXJ0KX0sYXBwbHlNYXRyaXg0OmZ1bmN0aW9uKGIpe3RoaXMuc3RhcnQuYXBwbHlNYXRyaXg0KGIpOwp0aGlzLmVuZC5hcHBseU1hdHJpeDQoYik7cmV0dXJuIHRoaXN9LGVxdWFsczpmdW5jdGlvbihiKXtyZXR1cm4gYi5zdGFydC5lcXVhbHModGhpcy5zdGFydCkmJmIuZW5kLmVxdWFscyh0aGlzLmVuZCl9fSk7eWcucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoUy5wcm90b3R5cGUpO3lnLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj15Zzt5Zy5wcm90b3R5cGUuaXNJbW1lZGlhdGVSZW5kZXJPYmplY3Q9ITA7emcucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoUGIucHJvdG90eXBlKTt6Zy5wcm90b3R5cGUuY29uc3RydWN0b3I9emc7emcucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbigpe3ZhciBiPW5ldyBnLGU9bmV3IGcsaD1uZXcgbDtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj1bImEiLCJiIiwiYyJdO3RoaXMub2JqZWN0LnVwZGF0ZU1hdHJpeFdvcmxkKCEwKTtoLmdldE5vcm1hbE1hdHJpeCh0aGlzLm9iamVjdC5tYXRyaXhXb3JsZCk7dmFyIHU9dGhpcy5vYmplY3QubWF0cml4V29ybGQsdz0KdGhpcy5nZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uLHo9dGhpcy5vYmplY3QuZ2VvbWV0cnk7aWYoeiYmei5pc0dlb21ldHJ5KWZvcih2YXIgRT16LnZlcnRpY2VzLEg9ei5mYWNlcyxJPXo9MCxPPUgubGVuZ3RoO0k8TztJKyspZm9yKHZhciBRPUhbSV0sUj0wLFU9US52ZXJ0ZXhOb3JtYWxzLmxlbmd0aDtSPFU7UisrKXt2YXIgVz1RLnZlcnRleE5vcm1hbHNbUl07Yi5jb3B5KEVbUVtuW1JdXV0pLmFwcGx5TWF0cml4NCh1KTtlLmNvcHkoVykuYXBwbHlNYXRyaXgzKGgpLm5vcm1hbGl6ZSgpLm11bHRpcGx5U2NhbGFyKHRoaXMuc2l6ZSkuYWRkKGIpO3cuc2V0WFlaKHosYi54LGIueSxiLnopO3orPTE7dy5zZXRYWVooeixlLngsZS55LGUueik7eis9MX1lbHNlIGlmKHomJnouaXNCdWZmZXJHZW9tZXRyeSlmb3Iobj16LmF0dHJpYnV0ZXMucG9zaXRpb24sRT16LmF0dHJpYnV0ZXMubm9ybWFsLFI9ej0wLFU9bi5jb3VudDtSPFU7UisrKWIuc2V0KG4uZ2V0WChSKSxuLmdldFkoUiksCm4uZ2V0WihSKSkuYXBwbHlNYXRyaXg0KHUpLGUuc2V0KEUuZ2V0WChSKSxFLmdldFkoUiksRS5nZXRaKFIpKSxlLmFwcGx5TWF0cml4MyhoKS5ub3JtYWxpemUoKS5tdWx0aXBseVNjYWxhcih0aGlzLnNpemUpLmFkZChiKSx3LnNldFhZWih6LGIueCxiLnksYi56KSx6Kz0xLHcuc2V0WFlaKHosZS54LGUueSxlLnopLHorPTE7dy5uZWVkc1VwZGF0ZT0hMH19KCk7a2YucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoUy5wcm90b3R5cGUpO2tmLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1rZjtrZi5wcm90b3R5cGUuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuY29uZS5nZW9tZXRyeS5kaXNwb3NlKCk7dGhpcy5jb25lLm1hdGVyaWFsLmRpc3Bvc2UoKX07a2YucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbigpe3ZhciBiPW5ldyBnO3JldHVybiBmdW5jdGlvbigpe3RoaXMubGlnaHQudXBkYXRlTWF0cml4V29ybGQoKTt2YXIgZT10aGlzLmxpZ2h0LmRpc3RhbmNlP3RoaXMubGlnaHQuZGlzdGFuY2U6CjFFMyxoPWUqTWF0aC50YW4odGhpcy5saWdodC5hbmdsZSk7dGhpcy5jb25lLnNjYWxlLnNldChoLGgsZSk7Yi5zZXRGcm9tTWF0cml4UG9zaXRpb24odGhpcy5saWdodC50YXJnZXQubWF0cml4V29ybGQpO3RoaXMuY29uZS5sb29rQXQoYik7dm9pZCAwIT09dGhpcy5jb2xvcj90aGlzLmNvbmUubWF0ZXJpYWwuY29sb3Iuc2V0KHRoaXMuY29sb3IpOnRoaXMuY29uZS5tYXRlcmlhbC5jb2xvci5jb3B5KHRoaXMubGlnaHQuY29sb3IpfX0oKTtsZi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShQYi5wcm90b3R5cGUpO2xmLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1sZjtsZi5wcm90b3R5cGUudXBkYXRlTWF0cml4V29ybGQ9ZnVuY3Rpb24oKXt2YXIgYj1uZXcgZyxlPW5ldyBDLGg9bmV3IEM7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciB1PXRoaXMuYm9uZXMsdz10aGlzLmdlb21ldHJ5LHo9dy5nZXRBdHRyaWJ1dGUoInBvc2l0aW9uIik7aC5nZXRJbnZlcnNlKHRoaXMucm9vdC5tYXRyaXhXb3JsZCk7CmZvcih2YXIgRT0wLEg9MDtFPHUubGVuZ3RoO0UrKyl7dmFyIEk9dVtFXTtJLnBhcmVudCYmSS5wYXJlbnQuaXNCb25lJiYoZS5tdWx0aXBseU1hdHJpY2VzKGgsSS5tYXRyaXhXb3JsZCksYi5zZXRGcm9tTWF0cml4UG9zaXRpb24oZSksei5zZXRYWVooSCxiLngsYi55LGIueiksZS5tdWx0aXBseU1hdHJpY2VzKGgsSS5wYXJlbnQubWF0cml4V29ybGQpLGIuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKGUpLHouc2V0WFlaKEgrMSxiLngsYi55LGIueiksSCs9Mil9dy5nZXRBdHRyaWJ1dGUoInBvc2l0aW9uIikubmVlZHNVcGRhdGU9ITA7Uy5wcm90b3R5cGUudXBkYXRlTWF0cml4V29ybGQuY2FsbCh0aGlzLG4pfX0oKTttZi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0Yi5wcm90b3R5cGUpO21mLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1tZjttZi5wcm90b3R5cGUuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuZ2VvbWV0cnkuZGlzcG9zZSgpO3RoaXMubWF0ZXJpYWwuZGlzcG9zZSgpfTttZi5wcm90b3R5cGUudXBkYXRlPQpmdW5jdGlvbigpe3ZvaWQgMCE9PXRoaXMuY29sb3I/dGhpcy5tYXRlcmlhbC5jb2xvci5zZXQodGhpcy5jb2xvcik6dGhpcy5tYXRlcmlhbC5jb2xvci5jb3B5KHRoaXMubGlnaHQuY29sb3IpfTtuZi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShsYy5wcm90b3R5cGUpO25mLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1uZjtuZi5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKCl7dGhpcy5zY2FsZS5zZXQoLjUqdGhpcy5saWdodC53aWR0aCwuNSp0aGlzLmxpZ2h0LmhlaWdodCwxKTtpZih2b2lkIDAhPT10aGlzLmNvbG9yKXRoaXMubWF0ZXJpYWwuY29sb3Iuc2V0KHRoaXMuY29sb3IpLHRoaXMuY2hpbGRyZW5bMF0ubWF0ZXJpYWwuY29sb3Iuc2V0KHRoaXMuY29sb3IpO2Vsc2V7dGhpcy5tYXRlcmlhbC5jb2xvci5jb3B5KHRoaXMubGlnaHQuY29sb3IpLm11bHRpcGx5U2NhbGFyKHRoaXMubGlnaHQuaW50ZW5zaXR5KTt2YXIgYj10aGlzLm1hdGVyaWFsLmNvbG9yLGU9TWF0aC5tYXgoYi5yLApiLmcsYi5iKTsxPGUmJmIubXVsdGlwbHlTY2FsYXIoMS9lKTt0aGlzLmNoaWxkcmVuWzBdLm1hdGVyaWFsLmNvbG9yLmNvcHkodGhpcy5tYXRlcmlhbC5jb2xvcil9fTtuZi5wcm90b3R5cGUuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuZ2VvbWV0cnkuZGlzcG9zZSgpO3RoaXMubWF0ZXJpYWwuZGlzcG9zZSgpO3RoaXMuY2hpbGRyZW5bMF0uZ2VvbWV0cnkuZGlzcG9zZSgpO3RoaXMuY2hpbGRyZW5bMF0ubWF0ZXJpYWwuZGlzcG9zZSgpfTtvZi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShTLnByb3RvdHlwZSk7b2YucHJvdG90eXBlLmNvbnN0cnVjdG9yPW9mO29mLnByb3RvdHlwZS5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5jaGlsZHJlblswXS5nZW9tZXRyeS5kaXNwb3NlKCk7dGhpcy5jaGlsZHJlblswXS5tYXRlcmlhbC5kaXNwb3NlKCl9O29mLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oKXt2YXIgYj1uZXcgZyxlPW5ldyBCLGg9bmV3IEI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49CnRoaXMuY2hpbGRyZW5bMF07aWYodm9pZCAwIT09dGhpcy5jb2xvcil0aGlzLm1hdGVyaWFsLmNvbG9yLnNldCh0aGlzLmNvbG9yKTtlbHNle3ZhciB1PW4uZ2VvbWV0cnkuZ2V0QXR0cmlidXRlKCJjb2xvciIpO2UuY29weSh0aGlzLmxpZ2h0LmNvbG9yKTtoLmNvcHkodGhpcy5saWdodC5ncm91bmRDb2xvcik7Zm9yKHZhciB3PTAsej11LmNvdW50O3c8ejt3Kyspe3ZhciBFPXc8ei8yP2U6aDt1LnNldFhZWih3LEUucixFLmcsRS5iKX11Lm5lZWRzVXBkYXRlPSEwfW4ubG9va0F0KGIuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHRoaXMubGlnaHQubWF0cml4V29ybGQpLm5lZ2F0ZSgpKX19KCk7cGYucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodGIucHJvdG90eXBlKTtwZi5wcm90b3R5cGUuY29uc3RydWN0b3I9cGY7cGYucHJvdG90eXBlLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLmdlb21ldHJ5LmRpc3Bvc2UoKTt0aGlzLm1hdGVyaWFsLmRpc3Bvc2UoKX07cGYucHJvdG90eXBlLm9uQmVmb3JlUmVuZGVyPQpmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucG9zaXRpb24uY29weSh0aGlzLmxpZ2h0UHJvYmUucG9zaXRpb24pO3RoaXMuc2NhbGUuc2V0KDEsMSwxKS5tdWx0aXBseVNjYWxhcih0aGlzLnNpemUpO3RoaXMubWF0ZXJpYWwudW5pZm9ybXMuaW50ZW5zaXR5LnZhbHVlPXRoaXMubGlnaHRQcm9iZS5pbnRlbnNpdHl9fSgpO0VoLnByb3RvdHlwZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoUGIucHJvdG90eXBlKSx7Y29uc3RydWN0b3I6RWgsY29weTpmdW5jdGlvbihiKXtQYi5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsYik7dGhpcy5nZW9tZXRyeS5jb3B5KGIuZ2VvbWV0cnkpO3RoaXMubWF0ZXJpYWwuY29weShiLm1hdGVyaWFsKTtyZXR1cm4gdGhpc30sY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9fSk7RmgucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoUGIucHJvdG90eXBlKTtGaC5wcm90b3R5cGUuY29uc3RydWN0b3I9CkZoO3FmLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGxjLnByb3RvdHlwZSk7cWYucHJvdG90eXBlLmNvbnN0cnVjdG9yPXFmO3FmLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBiKFcsWixmYSxxYSl7ZmE9KFotVykvZmE7VS5zZXRYWVooSCwwLDAsMCk7SSsrO2ZvcihPPVc7TzxaO08rPWZhKVE9SCtJLFUuc2V0WFlaKFEsTWF0aC5zaW4oTykqaCwwLE1hdGguY29zKE8pKmgpLFUuc2V0WFlaKFErMSxNYXRoLnNpbihNYXRoLm1pbihPK2ZhLFopKSpoLDAsTWF0aC5jb3MoTWF0aC5taW4oTytmYSxaKSkqaCksVS5zZXRYWVooUSsyLDAsMCwwKSxJKz0zO1IuYWRkR3JvdXAoSCxJLHFhKTtIKz1JO0k9MH12YXIgZT10aGlzLmF1ZGlvLGg9dGhpcy5yYW5nZSxuPXRoaXMuZGl2aXNpb25zSW5uZXJBbmdsZSx1PXRoaXMuZGl2aXNpb25zT3V0ZXJBbmdsZSx3PW9iLmRlZ1RvUmFkKGUucGFubmVyLmNvbmVJbm5lckFuZ2xlKTtlPW9iLmRlZ1RvUmFkKGUucGFubmVyLmNvbmVPdXRlckFuZ2xlKTsKdmFyIHo9dy8yLEU9ZS8yLEg9MCxJPTAsTyxRLFI9dGhpcy5nZW9tZXRyeSxVPVIuYXR0cmlidXRlcy5wb3NpdGlvbjtSLmNsZWFyR3JvdXBzKCk7YigtRSwteix1LDApO2IoLXoseixuLDEpO2IoeixFLHUsMCk7VS5uZWVkc1VwZGF0ZT0hMDt3PT09ZSYmKHRoaXMubWF0ZXJpYWxbMF0udmlzaWJsZT0hMSl9O3FmLnByb3RvdHlwZS5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5nZW9tZXRyeS5kaXNwb3NlKCk7dGhpcy5tYXRlcmlhbFswXS5kaXNwb3NlKCk7dGhpcy5tYXRlcmlhbFsxXS5kaXNwb3NlKCl9O0FnLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKFBiLnByb3RvdHlwZSk7QWcucHJvdG90eXBlLmNvbnN0cnVjdG9yPUFnO0FnLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oKXt2YXIgYj1uZXcgZyxlPW5ldyBnLGg9bmV3IGw7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5vYmplY3QudXBkYXRlTWF0cml4V29ybGQoITApO2guZ2V0Tm9ybWFsTWF0cml4KHRoaXMub2JqZWN0Lm1hdHJpeFdvcmxkKTsKdmFyIG49dGhpcy5vYmplY3QubWF0cml4V29ybGQsdT10aGlzLmdlb21ldHJ5LmF0dHJpYnV0ZXMucG9zaXRpb24sdz10aGlzLm9iamVjdC5nZW9tZXRyeSx6PXcudmVydGljZXM7dz13LmZhY2VzO2Zvcih2YXIgRT0wLEg9MCxJPXcubGVuZ3RoO0g8STtIKyspe3ZhciBPPXdbSF0sUT1PLm5vcm1hbDtiLmNvcHkoeltPLmFdKS5hZGQoeltPLmJdKS5hZGQoeltPLmNdKS5kaXZpZGVTY2FsYXIoMykuYXBwbHlNYXRyaXg0KG4pO2UuY29weShRKS5hcHBseU1hdHJpeDMoaCkubm9ybWFsaXplKCkubXVsdGlwbHlTY2FsYXIodGhpcy5zaXplKS5hZGQoYik7dS5zZXRYWVooRSxiLngsYi55LGIueik7RSs9MTt1LnNldFhZWihFLGUueCxlLnksZS56KTtFKz0xfXUubmVlZHNVcGRhdGU9ITB9fSgpO3JmLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKFMucHJvdG90eXBlKTtyZi5wcm90b3R5cGUuY29uc3RydWN0b3I9cmY7cmYucHJvdG90eXBlLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLmxpZ2h0UGxhbmUuZ2VvbWV0cnkuZGlzcG9zZSgpOwp0aGlzLmxpZ2h0UGxhbmUubWF0ZXJpYWwuZGlzcG9zZSgpO3RoaXMudGFyZ2V0TGluZS5nZW9tZXRyeS5kaXNwb3NlKCk7dGhpcy50YXJnZXRMaW5lLm1hdGVyaWFsLmRpc3Bvc2UoKX07cmYucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbigpe3ZhciBiPW5ldyBnLGU9bmV3IGcsaD1uZXcgZztyZXR1cm4gZnVuY3Rpb24oKXtiLnNldEZyb21NYXRyaXhQb3NpdGlvbih0aGlzLmxpZ2h0Lm1hdHJpeFdvcmxkKTtlLnNldEZyb21NYXRyaXhQb3NpdGlvbih0aGlzLmxpZ2h0LnRhcmdldC5tYXRyaXhXb3JsZCk7aC5zdWJWZWN0b3JzKGUsYik7dGhpcy5saWdodFBsYW5lLmxvb2tBdChlKTt2b2lkIDAhPT10aGlzLmNvbG9yPyh0aGlzLmxpZ2h0UGxhbmUubWF0ZXJpYWwuY29sb3Iuc2V0KHRoaXMuY29sb3IpLHRoaXMudGFyZ2V0TGluZS5tYXRlcmlhbC5jb2xvci5zZXQodGhpcy5jb2xvcikpOih0aGlzLmxpZ2h0UGxhbmUubWF0ZXJpYWwuY29sb3IuY29weSh0aGlzLmxpZ2h0LmNvbG9yKSwKdGhpcy50YXJnZXRMaW5lLm1hdGVyaWFsLmNvbG9yLmNvcHkodGhpcy5saWdodC5jb2xvcikpO3RoaXMudGFyZ2V0TGluZS5sb29rQXQoZSk7dGhpcy50YXJnZXRMaW5lLnNjYWxlLno9aC5sZW5ndGgoKX19KCk7QmcucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoUGIucHJvdG90eXBlKTtCZy5wcm90b3R5cGUuY29uc3RydWN0b3I9Qmc7QmcucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGIodyx6LEUsSCl7bi5zZXQoeixFLEgpLnVucHJvamVjdCh1KTt3PWhbd107aWYodm9pZCAwIT09dylmb3Ioej1lLmdldEF0dHJpYnV0ZSgicG9zaXRpb24iKSxFPTAsSD13Lmxlbmd0aDtFPEg7RSsrKXouc2V0WFlaKHdbRV0sbi54LG4ueSxuLnopfXZhciBlLGgsbj1uZXcgZyx1PW5ldyBqZDtyZXR1cm4gZnVuY3Rpb24oKXtlPXRoaXMuZ2VvbWV0cnk7aD10aGlzLnBvaW50TWFwO3UucHJvamVjdGlvbk1hdHJpeEludmVyc2UuY29weSh0aGlzLmNhbWVyYS5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZSk7CmIoImMiLDAsMCwtMSk7YigidCIsMCwwLDEpO2IoIm4xIiwtMSwtMSwtMSk7YigibjIiLDEsLTEsLTEpO2IoIm4zIiwtMSwxLC0xKTtiKCJuNCIsMSwxLC0xKTtiKCJmMSIsLTEsLTEsMSk7YigiZjIiLDEsLTEsMSk7YigiZjMiLC0xLDEsMSk7YigiZjQiLDEsMSwxKTtiKCJ1MSIsLjcsMS4xLC0xKTtiKCJ1MiIsLS43LDEuMSwtMSk7YigidTMiLDAsMiwtMSk7YigiY2YxIiwtMSwwLDEpO2IoImNmMiIsMSwwLDEpO2IoImNmMyIsMCwtMSwxKTtiKCJjZjQiLDAsMSwxKTtiKCJjbjEiLC0xLDAsLTEpO2IoImNuMiIsMSwwLC0xKTtiKCJjbjMiLDAsLTEsLTEpO2IoImNuNCIsMCwxLC0xKTtlLmdldEF0dHJpYnV0ZSgicG9zaXRpb24iKS5uZWVkc1VwZGF0ZT0hMH19KCk7QmQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoUGIucHJvdG90eXBlKTtCZC5wcm90b3R5cGUuY29uc3RydWN0b3I9QmQ7QmQucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbigpe3ZhciBiPW5ldyB2O3JldHVybiBmdW5jdGlvbihlKXt2b2lkIDAhPT0KZSYmY29uc29sZS53YXJuKCJUSFJFRS5Cb3hIZWxwZXI6IC51cGRhdGUoKSBoYXMgbm8gbG9uZ2VyIGFyZ3VtZW50cy4iKTt2b2lkIDAhPT10aGlzLm9iamVjdCYmYi5zZXRGcm9tT2JqZWN0KHRoaXMub2JqZWN0KTtpZighYi5pc0VtcHR5KCkpe2U9Yi5taW47dmFyIGg9Yi5tYXgsbj10aGlzLmdlb21ldHJ5LmF0dHJpYnV0ZXMucG9zaXRpb24sdT1uLmFycmF5O3VbMF09aC54O3VbMV09aC55O3VbMl09aC56O3VbM109ZS54O3VbNF09aC55O3VbNV09aC56O3VbNl09ZS54O3VbN109ZS55O3VbOF09aC56O3VbOV09aC54O3VbMTBdPWUueTt1WzExXT1oLno7dVsxMl09aC54O3VbMTNdPWgueTt1WzE0XT1lLno7dVsxNV09ZS54O3VbMTZdPWgueTt1WzE3XT1lLno7dVsxOF09ZS54O3VbMTldPWUueTt1WzIwXT1lLno7dVsyMV09aC54O3VbMjJdPWUueTt1WzIzXT1lLno7bi5uZWVkc1VwZGF0ZT0hMDt0aGlzLmdlb21ldHJ5LmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpfX19KCk7QmQucHJvdG90eXBlLnNldEZyb21PYmplY3Q9CmZ1bmN0aW9uKGIpe3RoaXMub2JqZWN0PWI7dGhpcy51cGRhdGUoKTtyZXR1cm4gdGhpc307QmQucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oYil7UGIucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLGIpO3RoaXMub2JqZWN0PWIub2JqZWN0O3JldHVybiB0aGlzfTtCZC5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9O0NnLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKFBiLnByb3RvdHlwZSk7Q2cucHJvdG90eXBlLmNvbnN0cnVjdG9yPUNnO0NnLnByb3RvdHlwZS51cGRhdGVNYXRyaXhXb3JsZD1mdW5jdGlvbihiKXt2YXIgZT10aGlzLmJveDtlLmlzRW1wdHkoKXx8KGUuZ2V0Q2VudGVyKHRoaXMucG9zaXRpb24pLGUuZ2V0U2l6ZSh0aGlzLnNjYWxlKSx0aGlzLnNjYWxlLm11bHRpcGx5U2NhbGFyKC41KSxTLnByb3RvdHlwZS51cGRhdGVNYXRyaXhXb3JsZC5jYWxsKHRoaXMsYikpfTtEZy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShsYy5wcm90b3R5cGUpOwpEZy5wcm90b3R5cGUuY29uc3RydWN0b3I9RGc7RGcucHJvdG90eXBlLnVwZGF0ZU1hdHJpeFdvcmxkPWZ1bmN0aW9uKGIpe3ZhciBlPS10aGlzLnBsYW5lLmNvbnN0YW50OzFFLTg+TWF0aC5hYnMoZSkmJihlPTFFLTgpO3RoaXMuc2NhbGUuc2V0KC41KnRoaXMuc2l6ZSwuNSp0aGlzLnNpemUsZSk7dGhpcy5jaGlsZHJlblswXS5tYXRlcmlhbC5zaWRlPTA+ZT8xOjA7dGhpcy5sb29rQXQodGhpcy5wbGFuZS5ub3JtYWwpO1MucHJvdG90eXBlLnVwZGF0ZU1hdHJpeFdvcmxkLmNhbGwodGhpcyxiKX07dmFyIEdoLGJqO0NkLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKFMucHJvdG90eXBlKTtDZC5wcm90b3R5cGUuY29uc3RydWN0b3I9Q2Q7Q2QucHJvdG90eXBlLnNldERpcmVjdGlvbj1mdW5jdGlvbigpe3ZhciBiPW5ldyBnLGU7cmV0dXJuIGZ1bmN0aW9uKGgpey45OTk5OTxoLnk/dGhpcy5xdWF0ZXJuaW9uLnNldCgwLDAsMCwxKTotLjk5OTk5PmgueT90aGlzLnF1YXRlcm5pb24uc2V0KDEsCjAsMCwwKTooYi5zZXQoaC56LDAsLWgueCkubm9ybWFsaXplKCksZT1NYXRoLmFjb3MoaC55KSx0aGlzLnF1YXRlcm5pb24uc2V0RnJvbUF4aXNBbmdsZShiLGUpKX19KCk7Q2QucHJvdG90eXBlLnNldExlbmd0aD1mdW5jdGlvbihiLGUsaCl7dm9pZCAwPT09ZSYmKGU9LjIqYik7dm9pZCAwPT09aCYmKGg9LjIqZSk7dGhpcy5saW5lLnNjYWxlLnNldCgxLE1hdGgubWF4KDAsYi1lKSwxKTt0aGlzLmxpbmUudXBkYXRlTWF0cml4KCk7dGhpcy5jb25lLnNjYWxlLnNldChoLGUsaCk7dGhpcy5jb25lLnBvc2l0aW9uLnk9Yjt0aGlzLmNvbmUudXBkYXRlTWF0cml4KCl9O0NkLnByb3RvdHlwZS5zZXRDb2xvcj1mdW5jdGlvbihiKXt0aGlzLmxpbmUubWF0ZXJpYWwuY29sb3IuY29weShiKTt0aGlzLmNvbmUubWF0ZXJpYWwuY29sb3IuY29weShiKX07Q2QucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oYil7Uy5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsYiwhMSk7dGhpcy5saW5lLmNvcHkoYi5saW5lKTsKdGhpcy5jb25lLmNvcHkoYi5jb25lKTtyZXR1cm4gdGhpc307Q2QucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKS5jb3B5KHRoaXMpfTtFZy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShQYi5wcm90b3R5cGUpO0VnLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1FZztlYi5jcmVhdGU9ZnVuY3Rpb24oYixlKXtjb25zb2xlLmxvZygiVEhSRUUuQ3VydmUuY3JlYXRlKCkgaGFzIGJlZW4gZGVwcmVjYXRlZCIpO2IucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZWIucHJvdG90eXBlKTtiLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1iO2IucHJvdG90eXBlLmdldFBvaW50PWU7cmV0dXJuIGJ9O09iamVjdC5hc3NpZ24oQWQucHJvdG90eXBlLHtjcmVhdGVQb2ludHNHZW9tZXRyeTpmdW5jdGlvbihiKXtjb25zb2xlLndhcm4oIlRIUkVFLkN1cnZlUGF0aDogLmNyZWF0ZVBvaW50c0dlb21ldHJ5KCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG5ldyBUSFJFRS5HZW9tZXRyeSgpLnNldEZyb21Qb2ludHMoIHBvaW50cyApIGluc3RlYWQuIik7CmI9dGhpcy5nZXRQb2ludHMoYik7cmV0dXJuIHRoaXMuY3JlYXRlR2VvbWV0cnkoYil9LGNyZWF0ZVNwYWNlZFBvaW50c0dlb21ldHJ5OmZ1bmN0aW9uKGIpe2NvbnNvbGUud2FybigiVEhSRUUuQ3VydmVQYXRoOiAuY3JlYXRlU3BhY2VkUG9pbnRzR2VvbWV0cnkoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLkdlb21ldHJ5KCkuc2V0RnJvbVBvaW50cyggcG9pbnRzICkgaW5zdGVhZC4iKTtiPXRoaXMuZ2V0U3BhY2VkUG9pbnRzKGIpO3JldHVybiB0aGlzLmNyZWF0ZUdlb21ldHJ5KGIpfSxjcmVhdGVHZW9tZXRyeTpmdW5jdGlvbihiKXtjb25zb2xlLndhcm4oIlRIUkVFLkN1cnZlUGF0aDogLmNyZWF0ZUdlb21ldHJ5KCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG5ldyBUSFJFRS5HZW9tZXRyeSgpLnNldEZyb21Qb2ludHMoIHBvaW50cyApIGluc3RlYWQuIik7Zm9yKHZhciBlPW5ldyBOLGg9MCxuPWIubGVuZ3RoO2g8bjtoKyspe3ZhciB1PWJbaF07ZS52ZXJ0aWNlcy5wdXNoKG5ldyBnKHUueCwKdS55LHUuenx8MCkpfXJldHVybiBlfX0pO09iamVjdC5hc3NpZ24oWmMucHJvdG90eXBlLHtmcm9tUG9pbnRzOmZ1bmN0aW9uKGIpe2NvbnNvbGUud2FybigiVEhSRUUuUGF0aDogLmZyb21Qb2ludHMoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5zZXRGcm9tUG9pbnRzKCkuIik7dGhpcy5zZXRGcm9tUG9pbnRzKGIpfX0pO1JsLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHJjLnByb3RvdHlwZSk7U2wucHJvdG90eXBlPU9iamVjdC5jcmVhdGUocmMucHJvdG90eXBlKTtjai5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShyYy5wcm90b3R5cGUpO09iamVjdC5hc3NpZ24oY2oucHJvdG90eXBlLHtpbml0RnJvbUFycmF5OmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuU3BsaW5lOiAuaW5pdEZyb21BcnJheSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LGdldENvbnRyb2xQb2ludHNBcnJheTpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlNwbGluZTogLmdldENvbnRyb2xQb2ludHNBcnJheSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LApyZXBhcmFtZXRyaXplQnlBcmNMZW5ndGg6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5TcGxpbmU6IC5yZXBhcmFtZXRyaXplQnlBcmNMZW5ndGgoKSBoYXMgYmVlbiByZW1vdmVkLiIpfX0pO0VoLnByb3RvdHlwZS5zZXRDb2xvcnM9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5HcmlkSGVscGVyOiBzZXRDb2xvcnMoKSBoYXMgYmVlbiBkZXByZWNhdGVkLCBwYXNzIHRoZW0gaW4gdGhlIGNvbnN0cnVjdG9yIGluc3RlYWQuIil9O2xmLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5Ta2VsZXRvbkhlbHBlcjogdXBkYXRlKCkgbm8gbG9uZ2VyIG5lZWRzIHRvIGJlIGNhbGxlZC4iKX07T2JqZWN0LmFzc2lnbih3Zy5wcm90b3R5cGUse2V4dHJhY3RVcmxCYXNlOmZ1bmN0aW9uKGIpe2NvbnNvbGUud2FybigiVEhSRUUuTG9hZGVyOiAuZXh0cmFjdFVybEJhc2UoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgVEhSRUUuTG9hZGVyVXRpbHMuZXh0cmFjdFVybEJhc2UoKSBpbnN0ZWFkLiIpOwpyZXR1cm4gaGouZXh0cmFjdFVybEJhc2UoYil9fSk7T2JqZWN0LmFzc2lnbihJaS5wcm90b3R5cGUse3NldFRleHR1cmVQYXRoOmZ1bmN0aW9uKGIpe2NvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0TG9hZGVyOiAuc2V0VGV4dHVyZVBhdGgoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5zZXRSZXNvdXJjZVBhdGgoKS4iKTtyZXR1cm4gdGhpcy5zZXRSZXNvdXJjZVBhdGgoYil9fSk7T2JqZWN0LmFzc2lnbigkaS5wcm90b3R5cGUse2NlbnRlcjpmdW5jdGlvbihiKXtjb25zb2xlLndhcm4oIlRIUkVFLkJveDI6IC5jZW50ZXIoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRDZW50ZXIoKS4iKTtyZXR1cm4gdGhpcy5nZXRDZW50ZXIoYil9LGVtcHR5OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5Cb3gyOiAuZW1wdHkoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pc0VtcHR5KCkuIik7cmV0dXJuIHRoaXMuaXNFbXB0eSgpfSxpc0ludGVyc2VjdGlvbkJveDpmdW5jdGlvbihiKXtjb25zb2xlLndhcm4oIlRIUkVFLkJveDI6IC5pc0ludGVyc2VjdGlvbkJveCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNCb3goKS4iKTsKcmV0dXJuIHRoaXMuaW50ZXJzZWN0c0JveChiKX0sc2l6ZTpmdW5jdGlvbihiKXtjb25zb2xlLndhcm4oIlRIUkVFLkJveDI6IC5zaXplKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0U2l6ZSgpLiIpO3JldHVybiB0aGlzLmdldFNpemUoYil9fSk7T2JqZWN0LmFzc2lnbih2LnByb3RvdHlwZSx7Y2VudGVyOmZ1bmN0aW9uKGIpe2NvbnNvbGUud2FybigiVEhSRUUuQm94MzogLmNlbnRlcigpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldENlbnRlcigpLiIpO3JldHVybiB0aGlzLmdldENlbnRlcihiKX0sZW1wdHk6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkJveDM6IC5lbXB0eSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmlzRW1wdHkoKS4iKTtyZXR1cm4gdGhpcy5pc0VtcHR5KCl9LGlzSW50ZXJzZWN0aW9uQm94OmZ1bmN0aW9uKGIpe2NvbnNvbGUud2FybigiVEhSRUUuQm94MzogLmlzSW50ZXJzZWN0aW9uQm94KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaW50ZXJzZWN0c0JveCgpLiIpOwpyZXR1cm4gdGhpcy5pbnRlcnNlY3RzQm94KGIpfSxpc0ludGVyc2VjdGlvblNwaGVyZTpmdW5jdGlvbihiKXtjb25zb2xlLndhcm4oIlRIUkVFLkJveDM6IC5pc0ludGVyc2VjdGlvblNwaGVyZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNTcGhlcmUoKS4iKTtyZXR1cm4gdGhpcy5pbnRlcnNlY3RzU3BoZXJlKGIpfSxzaXplOmZ1bmN0aW9uKGIpe2NvbnNvbGUud2FybigiVEhSRUUuQm94MzogLnNpemUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRTaXplKCkuIik7cmV0dXJuIHRoaXMuZ2V0U2l6ZShiKX19KTthai5wcm90b3R5cGUuY2VudGVyPWZ1bmN0aW9uKGIpe2NvbnNvbGUud2FybigiVEhSRUUuTGluZTM6IC5jZW50ZXIoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRDZW50ZXIoKS4iKTtyZXR1cm4gdGhpcy5nZXRDZW50ZXIoYil9O09iamVjdC5hc3NpZ24ob2Ise3JhbmRvbTE2OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5NYXRoOiAucmFuZG9tMTYoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgTWF0aC5yYW5kb20oKSBpbnN0ZWFkLiIpOwpyZXR1cm4gTWF0aC5yYW5kb20oKX0sbmVhcmVzdFBvd2VyT2ZUd286ZnVuY3Rpb24oYil7Y29uc29sZS53YXJuKCJUSFJFRS5NYXRoOiAubmVhcmVzdFBvd2VyT2ZUd28oKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5mbG9vclBvd2VyT2ZUd28oKS4iKTtyZXR1cm4gb2IuZmxvb3JQb3dlck9mVHdvKGIpfSxuZXh0UG93ZXJPZlR3bzpmdW5jdGlvbihiKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdGg6IC5uZXh0UG93ZXJPZlR3bygpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmNlaWxQb3dlck9mVHdvKCkuIik7cmV0dXJuIG9iLmNlaWxQb3dlck9mVHdvKGIpfX0pO09iamVjdC5hc3NpZ24obC5wcm90b3R5cGUse2ZsYXR0ZW5Ub0FycmF5T2Zmc2V0OmZ1bmN0aW9uKGIsZSl7Y29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXgzOiAuZmxhdHRlblRvQXJyYXlPZmZzZXQoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnRvQXJyYXkoKSBpbnN0ZWFkLiIpO3JldHVybiB0aGlzLnRvQXJyYXkoYixlKX0sCm11bHRpcGx5VmVjdG9yMzpmdW5jdGlvbihiKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDM6IC5tdWx0aXBseVZlY3RvcjMoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgdmVjdG9yLmFwcGx5TWF0cml4MyggbWF0cml4ICkgaW5zdGVhZC4iKTtyZXR1cm4gYi5hcHBseU1hdHJpeDModGhpcyl9LG11bHRpcGx5VmVjdG9yM0FycmF5OmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4MzogLm11bHRpcGx5VmVjdG9yM0FycmF5KCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sYXBwbHlUb0J1ZmZlcjpmdW5jdGlvbihiKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDM6IC5hcHBseVRvQnVmZmVyKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG1hdHJpeC5hcHBseVRvQnVmZmVyQXR0cmlidXRlKCBhdHRyaWJ1dGUgKSBpbnN0ZWFkLiIpO3JldHVybiB0aGlzLmFwcGx5VG9CdWZmZXJBdHRyaWJ1dGUoYil9LGFwcGx5VG9WZWN0b3IzQXJyYXk6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXgzOiAuYXBwbHlUb1ZlY3RvcjNBcnJheSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9fSk7Ck9iamVjdC5hc3NpZ24oQy5wcm90b3R5cGUse2V4dHJhY3RQb3NpdGlvbjpmdW5jdGlvbihiKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5leHRyYWN0UG9zaXRpb24oKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5jb3B5UG9zaXRpb24oKS4iKTtyZXR1cm4gdGhpcy5jb3B5UG9zaXRpb24oYil9LGZsYXR0ZW5Ub0FycmF5T2Zmc2V0OmZ1bmN0aW9uKGIsZSl7Y29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAuZmxhdHRlblRvQXJyYXlPZmZzZXQoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnRvQXJyYXkoKSBpbnN0ZWFkLiIpO3JldHVybiB0aGlzLnRvQXJyYXkoYixlKX0sZ2V0UG9zaXRpb246ZnVuY3Rpb24oKXt2YXIgYjtyZXR1cm4gZnVuY3Rpb24oKXt2b2lkIDA9PT1iJiYoYj1uZXcgZyk7Y29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAuZ2V0UG9zaXRpb24oKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgVmVjdG9yMy5zZXRGcm9tTWF0cml4UG9zaXRpb24oIG1hdHJpeCApIGluc3RlYWQuIik7CnJldHVybiBiLnNldEZyb21NYXRyaXhDb2x1bW4odGhpcywzKX19KCksc2V0Um90YXRpb25Gcm9tUXVhdGVybmlvbjpmdW5jdGlvbihiKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5zZXRSb3RhdGlvbkZyb21RdWF0ZXJuaW9uKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAubWFrZVJvdGF0aW9uRnJvbVF1YXRlcm5pb24oKS4iKTtyZXR1cm4gdGhpcy5tYWtlUm90YXRpb25Gcm9tUXVhdGVybmlvbihiKX0sbXVsdGlwbHlUb0FycmF5OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAubXVsdGlwbHlUb0FycmF5KCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sbXVsdGlwbHlWZWN0b3IzOmZ1bmN0aW9uKGIpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLm11bHRpcGx5VmVjdG9yMygpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSB2ZWN0b3IuYXBwbHlNYXRyaXg0KCBtYXRyaXggKSBpbnN0ZWFkLiIpO3JldHVybiBiLmFwcGx5TWF0cml4NCh0aGlzKX0sbXVsdGlwbHlWZWN0b3I0OmZ1bmN0aW9uKGIpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLm11bHRpcGx5VmVjdG9yNCgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSB2ZWN0b3IuYXBwbHlNYXRyaXg0KCBtYXRyaXggKSBpbnN0ZWFkLiIpOwpyZXR1cm4gYi5hcHBseU1hdHJpeDQodGhpcyl9LG11bHRpcGx5VmVjdG9yM0FycmF5OmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogLm11bHRpcGx5VmVjdG9yM0FycmF5KCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0scm90YXRlQXhpczpmdW5jdGlvbihiKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5yb3RhdGVBeGlzKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFZlY3RvcjMudHJhbnNmb3JtRGlyZWN0aW9uKCBtYXRyaXggKSBpbnN0ZWFkLiIpO2IudHJhbnNmb3JtRGlyZWN0aW9uKHRoaXMpfSxjcm9zc1ZlY3RvcjpmdW5jdGlvbihiKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5jcm9zc1ZlY3RvcigpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSB2ZWN0b3IuYXBwbHlNYXRyaXg0KCBtYXRyaXggKSBpbnN0ZWFkLiIpO3JldHVybiBiLmFwcGx5TWF0cml4NCh0aGlzKX0sdHJhbnNsYXRlOmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogLnRyYW5zbGF0ZSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LApyb3RhdGVYOmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogLnJvdGF0ZVgoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxyb3RhdGVZOmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogLnJvdGF0ZVkoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxyb3RhdGVaOmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogLnJvdGF0ZVooKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxyb3RhdGVCeUF4aXM6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiAucm90YXRlQnlBeGlzKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sYXBwbHlUb0J1ZmZlcjpmdW5jdGlvbihiKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5hcHBseVRvQnVmZmVyKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG1hdHJpeC5hcHBseVRvQnVmZmVyQXR0cmlidXRlKCBhdHRyaWJ1dGUgKSBpbnN0ZWFkLiIpO3JldHVybiB0aGlzLmFwcGx5VG9CdWZmZXJBdHRyaWJ1dGUoYil9LAphcHBseVRvVmVjdG9yM0FycmF5OmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogLmFwcGx5VG9WZWN0b3IzQXJyYXkoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxtYWtlRnJ1c3R1bTpmdW5jdGlvbihiLGUsaCxuLHUsdyl7Y29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAubWFrZUZydXN0dW0oKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLm1ha2VQZXJzcGVjdGl2ZSggbGVmdCwgcmlnaHQsIHRvcCwgYm90dG9tLCBuZWFyLCBmYXIgKSBpbnN0ZWFkLiIpO3JldHVybiB0aGlzLm1ha2VQZXJzcGVjdGl2ZShiLGUsbixoLHUsdyl9fSk7eS5wcm90b3R5cGUuaXNJbnRlcnNlY3Rpb25MaW5lPWZ1bmN0aW9uKGIpe2NvbnNvbGUud2FybigiVEhSRUUuUGxhbmU6IC5pc0ludGVyc2VjdGlvbkxpbmUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pbnRlcnNlY3RzTGluZSgpLiIpO3JldHVybiB0aGlzLmludGVyc2VjdHNMaW5lKGIpfTtmLnByb3RvdHlwZS5tdWx0aXBseVZlY3RvcjM9CmZ1bmN0aW9uKGIpe2NvbnNvbGUud2FybigiVEhSRUUuUXVhdGVybmlvbjogLm11bHRpcGx5VmVjdG9yMygpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBpcyBub3cgdmVjdG9yLmFwcGx5UXVhdGVybmlvbiggcXVhdGVybmlvbiApIGluc3RlYWQuIik7cmV0dXJuIGIuYXBwbHlRdWF0ZXJuaW9uKHRoaXMpfTtPYmplY3QuYXNzaWduKHhiLnByb3RvdHlwZSx7aXNJbnRlcnNlY3Rpb25Cb3g6ZnVuY3Rpb24oYil7Y29uc29sZS53YXJuKCJUSFJFRS5SYXk6IC5pc0ludGVyc2VjdGlvbkJveCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNCb3goKS4iKTtyZXR1cm4gdGhpcy5pbnRlcnNlY3RzQm94KGIpfSxpc0ludGVyc2VjdGlvblBsYW5lOmZ1bmN0aW9uKGIpe2NvbnNvbGUud2FybigiVEhSRUUuUmF5OiAuaXNJbnRlcnNlY3Rpb25QbGFuZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNQbGFuZSgpLiIpO3JldHVybiB0aGlzLmludGVyc2VjdHNQbGFuZShiKX0saXNJbnRlcnNlY3Rpb25TcGhlcmU6ZnVuY3Rpb24oYil7Y29uc29sZS53YXJuKCJUSFJFRS5SYXk6IC5pc0ludGVyc2VjdGlvblNwaGVyZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNTcGhlcmUoKS4iKTsKcmV0dXJuIHRoaXMuaW50ZXJzZWN0c1NwaGVyZShiKX19KTtPYmplY3QuYXNzaWduKENiLnByb3RvdHlwZSx7YXJlYTpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuVHJpYW5nbGU6IC5hcmVhKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0QXJlYSgpLiIpO3JldHVybiB0aGlzLmdldEFyZWEoKX0sYmFyeWNvb3JkRnJvbVBvaW50OmZ1bmN0aW9uKGIsZSl7Y29uc29sZS53YXJuKCJUSFJFRS5UcmlhbmdsZTogLmJhcnljb29yZEZyb21Qb2ludCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldEJhcnljb29yZCgpLiIpO3JldHVybiB0aGlzLmdldEJhcnljb29yZChiLGUpfSxtaWRwb2ludDpmdW5jdGlvbihiKXtjb25zb2xlLndhcm4oIlRIUkVFLlRyaWFuZ2xlOiAubWlkcG9pbnQoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRNaWRwb2ludCgpLiIpO3JldHVybiB0aGlzLmdldE1pZHBvaW50KGIpfSxub3JtYWw6ZnVuY3Rpb24oYil7Y29uc29sZS53YXJuKCJUSFJFRS5UcmlhbmdsZTogLm5vcm1hbCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldE5vcm1hbCgpLiIpOwpyZXR1cm4gdGhpcy5nZXROb3JtYWwoYil9LHBsYW5lOmZ1bmN0aW9uKGIpe2NvbnNvbGUud2FybigiVEhSRUUuVHJpYW5nbGU6IC5wbGFuZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldFBsYW5lKCkuIik7cmV0dXJuIHRoaXMuZ2V0UGxhbmUoYil9fSk7T2JqZWN0LmFzc2lnbihDYix7YmFyeWNvb3JkRnJvbVBvaW50OmZ1bmN0aW9uKGIsZSxoLG4sdSl7Y29uc29sZS53YXJuKCJUSFJFRS5UcmlhbmdsZTogLmJhcnljb29yZEZyb21Qb2ludCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldEJhcnljb29yZCgpLiIpO3JldHVybiBDYi5nZXRCYXJ5Y29vcmQoYixlLGgsbix1KX0sbm9ybWFsOmZ1bmN0aW9uKGIsZSxoLG4pe2NvbnNvbGUud2FybigiVEhSRUUuVHJpYW5nbGU6IC5ub3JtYWwoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXROb3JtYWwoKS4iKTtyZXR1cm4gQ2IuZ2V0Tm9ybWFsKGIsZSxoLG4pfX0pO09iamVjdC5hc3NpZ24oWGQucHJvdG90eXBlLHtleHRyYWN0QWxsUG9pbnRzOmZ1bmN0aW9uKGIpe2NvbnNvbGUud2FybigiVEhSRUUuU2hhcGU6IC5leHRyYWN0QWxsUG9pbnRzKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIC5leHRyYWN0UG9pbnRzKCkgaW5zdGVhZC4iKTsKcmV0dXJuIHRoaXMuZXh0cmFjdFBvaW50cyhiKX0sZXh0cnVkZTpmdW5jdGlvbihiKXtjb25zb2xlLndhcm4oIlRIUkVFLlNoYXBlOiAuZXh0cnVkZSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBFeHRydWRlR2VvbWV0cnkoKSBpbnN0ZWFkLiIpO3JldHVybiBuZXcgbGUodGhpcyxiKX0sbWFrZUdlb21ldHJ5OmZ1bmN0aW9uKGIpe2NvbnNvbGUud2FybigiVEhSRUUuU2hhcGU6IC5tYWtlR2VvbWV0cnkoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgU2hhcGVHZW9tZXRyeSgpIGluc3RlYWQuIik7cmV0dXJuIG5ldyBtZSh0aGlzLGIpfX0pO09iamVjdC5hc3NpZ24oZC5wcm90b3R5cGUse2Zyb21BdHRyaWJ1dGU6ZnVuY3Rpb24oYixlLGgpe2NvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMjogLmZyb21BdHRyaWJ1dGUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5mcm9tQnVmZmVyQXR0cmlidXRlKCkuIik7cmV0dXJuIHRoaXMuZnJvbUJ1ZmZlckF0dHJpYnV0ZShiLGUsaCl9LGRpc3RhbmNlVG9NYW5oYXR0YW46ZnVuY3Rpb24oYil7Y29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IyOiAuZGlzdGFuY2VUb01hbmhhdHRhbigpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLm1hbmhhdHRhbkRpc3RhbmNlVG8oKS4iKTsKcmV0dXJuIHRoaXMubWFuaGF0dGFuRGlzdGFuY2VUbyhiKX0sbGVuZ3RoTWFuaGF0dGFuOmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IyOiAubGVuZ3RoTWFuaGF0dGFuKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAubWFuaGF0dGFuTGVuZ3RoKCkuIik7cmV0dXJuIHRoaXMubWFuaGF0dGFuTGVuZ3RoKCl9fSk7T2JqZWN0LmFzc2lnbihnLnByb3RvdHlwZSx7c2V0RXVsZXJGcm9tUm90YXRpb25NYXRyaXg6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5WZWN0b3IzOiAuc2V0RXVsZXJGcm9tUm90YXRpb25NYXRyaXgoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgRXVsZXIuc2V0RnJvbVJvdGF0aW9uTWF0cml4KCkgaW5zdGVhZC4iKX0sc2V0RXVsZXJGcm9tUXVhdGVybmlvbjpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlZlY3RvcjM6IC5zZXRFdWxlckZyb21RdWF0ZXJuaW9uKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIEV1bGVyLnNldEZyb21RdWF0ZXJuaW9uKCkgaW5zdGVhZC4iKX0sCmdldFBvc2l0aW9uRnJvbU1hdHJpeDpmdW5jdGlvbihiKXtjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5nZXRQb3NpdGlvbkZyb21NYXRyaXgoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5zZXRGcm9tTWF0cml4UG9zaXRpb24oKS4iKTtyZXR1cm4gdGhpcy5zZXRGcm9tTWF0cml4UG9zaXRpb24oYil9LGdldFNjYWxlRnJvbU1hdHJpeDpmdW5jdGlvbihiKXtjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5nZXRTY2FsZUZyb21NYXRyaXgoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5zZXRGcm9tTWF0cml4U2NhbGUoKS4iKTtyZXR1cm4gdGhpcy5zZXRGcm9tTWF0cml4U2NhbGUoYil9LGdldENvbHVtbkZyb21NYXRyaXg6ZnVuY3Rpb24oYixlKXtjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5nZXRDb2x1bW5Gcm9tTWF0cml4KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0RnJvbU1hdHJpeENvbHVtbigpLiIpO3JldHVybiB0aGlzLnNldEZyb21NYXRyaXhDb2x1bW4oZSwKYil9LGFwcGx5UHJvamVjdGlvbjpmdW5jdGlvbihiKXtjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5hcHBseVByb2plY3Rpb24oKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLmFwcGx5TWF0cml4NCggbSApIGluc3RlYWQuIik7cmV0dXJuIHRoaXMuYXBwbHlNYXRyaXg0KGIpfSxmcm9tQXR0cmlidXRlOmZ1bmN0aW9uKGIsZSxoKXtjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5mcm9tQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZnJvbUJ1ZmZlckF0dHJpYnV0ZSgpLiIpO3JldHVybiB0aGlzLmZyb21CdWZmZXJBdHRyaWJ1dGUoYixlLGgpfSxkaXN0YW5jZVRvTWFuaGF0dGFuOmZ1bmN0aW9uKGIpe2NvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLmRpc3RhbmNlVG9NYW5oYXR0YW4oKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5tYW5oYXR0YW5EaXN0YW5jZVRvKCkuIik7cmV0dXJuIHRoaXMubWFuaGF0dGFuRGlzdGFuY2VUbyhiKX0sbGVuZ3RoTWFuaGF0dGFuOmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAubGVuZ3RoTWFuaGF0dGFuKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAubWFuaGF0dGFuTGVuZ3RoKCkuIik7CnJldHVybiB0aGlzLm1hbmhhdHRhbkxlbmd0aCgpfX0pO09iamVjdC5hc3NpZ24obS5wcm90b3R5cGUse2Zyb21BdHRyaWJ1dGU6ZnVuY3Rpb24oYixlLGgpe2NvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yNDogLmZyb21BdHRyaWJ1dGUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5mcm9tQnVmZmVyQXR0cmlidXRlKCkuIik7cmV0dXJuIHRoaXMuZnJvbUJ1ZmZlckF0dHJpYnV0ZShiLGUsaCl9LGxlbmd0aE1hbmhhdHRhbjpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yNDogLmxlbmd0aE1hbmhhdHRhbigpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLm1hbmhhdHRhbkxlbmd0aCgpLiIpO3JldHVybiB0aGlzLm1hbmhhdHRhbkxlbmd0aCgpfX0pO09iamVjdC5hc3NpZ24oTi5wcm90b3R5cGUse2NvbXB1dGVUYW5nZW50czpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkdlb21ldHJ5OiAuY29tcHV0ZVRhbmdlbnRzKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sY29tcHV0ZUxpbmVEaXN0YW5jZXM6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5HZW9tZXRyeTogLmNvbXB1dGVMaW5lRGlzdGFuY2VzKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFRIUkVFLkxpbmUuY29tcHV0ZUxpbmVEaXN0YW5jZXMoKSBpbnN0ZWFkLiIpfX0pOwpPYmplY3QuYXNzaWduKFMucHJvdG90eXBlLHtnZXRDaGlsZEJ5TmFtZTpmdW5jdGlvbihiKXtjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdDNEOiAuZ2V0Q2hpbGRCeU5hbWUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRPYmplY3RCeU5hbWUoKS4iKTtyZXR1cm4gdGhpcy5nZXRPYmplY3RCeU5hbWUoYil9LHJlbmRlckRlcHRoOmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5PYmplY3QzRDogLnJlbmRlckRlcHRoIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSAucmVuZGVyT3JkZXIsIGluc3RlYWQuIil9LHRyYW5zbGF0ZTpmdW5jdGlvbihiLGUpe2NvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC50cmFuc2xhdGUoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLnRyYW5zbGF0ZU9uQXhpcyggYXhpcywgZGlzdGFuY2UgKSBpbnN0ZWFkLiIpO3JldHVybiB0aGlzLnRyYW5zbGF0ZU9uQXhpcyhlLGIpfSxnZXRXb3JsZFJvdGF0aW9uOmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuT2JqZWN0M0Q6IC5nZXRXb3JsZFJvdGF0aW9uKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFRIUkVFLk9iamVjdDNELmdldFdvcmxkUXVhdGVybmlvbiggdGFyZ2V0ICkgaW5zdGVhZC4iKX19KTsKT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoUy5wcm90b3R5cGUse2V1bGVyT3JkZXI6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC5ldWxlck9yZGVyIGlzIG5vdyAucm90YXRpb24ub3JkZXIuIik7cmV0dXJuIHRoaXMucm90YXRpb24ub3JkZXJ9LHNldDpmdW5jdGlvbihiKXtjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdDNEOiAuZXVsZXJPcmRlciBpcyBub3cgLnJvdGF0aW9uLm9yZGVyLiIpO3RoaXMucm90YXRpb24ub3JkZXI9Yn19LHVzZVF1YXRlcm5pb246e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC51c2VRdWF0ZXJuaW9uIGhhcyBiZWVuIHJlbW92ZWQuIFRoZSBsaWJyYXJ5IG5vdyB1c2VzIHF1YXRlcm5pb25zIGJ5IGRlZmF1bHQuIil9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC51c2VRdWF0ZXJuaW9uIGhhcyBiZWVuIHJlbW92ZWQuIFRoZSBsaWJyYXJ5IG5vdyB1c2VzIHF1YXRlcm5pb25zIGJ5IGRlZmF1bHQuIil9fX0pOwpPYmplY3QuZGVmaW5lUHJvcGVydGllcyhUZi5wcm90b3R5cGUse29iamVjdHM6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuTE9EOiAub2JqZWN0cyBoYXMgYmVlbiByZW5hbWVkIHRvIC5sZXZlbHMuIik7cmV0dXJuIHRoaXMubGV2ZWxzfX19KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoamgucHJvdG90eXBlLCJ1c2VWZXJ0ZXhUZXh0dXJlIix7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5Ta2VsZXRvbjogdXNlVmVydGV4VGV4dHVyZSBoYXMgYmVlbiByZW1vdmVkLiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLlNrZWxldG9uOiB1c2VWZXJ0ZXhUZXh0dXJlIGhhcyBiZWVuIHJlbW92ZWQuIil9fSk7VWYucHJvdG90eXBlLmluaXRCb25lcz1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlNraW5uZWRNZXNoOiBpbml0Qm9uZXMoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoZWIucHJvdG90eXBlLAoiX19hcmNMZW5ndGhEaXZpc2lvbnMiLHtnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkN1cnZlOiAuX19hcmNMZW5ndGhEaXZpc2lvbnMgaXMgbm93IC5hcmNMZW5ndGhEaXZpc2lvbnMuIik7cmV0dXJuIHRoaXMuYXJjTGVuZ3RoRGl2aXNpb25zfSxzZXQ6ZnVuY3Rpb24oYil7Y29uc29sZS53YXJuKCJUSFJFRS5DdXJ2ZTogLl9fYXJjTGVuZ3RoRGl2aXNpb25zIGlzIG5vdyAuYXJjTGVuZ3RoRGl2aXNpb25zLiIpO3RoaXMuYXJjTGVuZ3RoRGl2aXNpb25zPWJ9fSk7Y2MucHJvdG90eXBlLnNldExlbnM9ZnVuY3Rpb24oYixlKXtjb25zb2xlLndhcm4oIlRIUkVFLlBlcnNwZWN0aXZlQ2FtZXJhLnNldExlbnMgaXMgZGVwcmVjYXRlZC4gVXNlIC5zZXRGb2NhbExlbmd0aCBhbmQgLmZpbG1HYXVnZSBmb3IgYSBwaG90b2dyYXBoaWMgc2V0dXAuIik7dm9pZCAwIT09ZSYmKHRoaXMuZmlsbUdhdWdlPWUpO3RoaXMuc2V0Rm9jYWxMZW5ndGgoYil9O09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFNiLnByb3RvdHlwZSwKe29ubHlTaGFkb3c6e3NldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5vbmx5U2hhZG93IGhhcyBiZWVuIHJlbW92ZWQuIil9fSxzaGFkb3dDYW1lcmFGb3Y6e3NldDpmdW5jdGlvbihiKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhRm92IGlzIG5vdyAuc2hhZG93LmNhbWVyYS5mb3YuIik7dGhpcy5zaGFkb3cuY2FtZXJhLmZvdj1ifX0sc2hhZG93Q2FtZXJhTGVmdDp7c2V0OmZ1bmN0aW9uKGIpe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dDYW1lcmFMZWZ0IGlzIG5vdyAuc2hhZG93LmNhbWVyYS5sZWZ0LiIpO3RoaXMuc2hhZG93LmNhbWVyYS5sZWZ0PWJ9fSxzaGFkb3dDYW1lcmFSaWdodDp7c2V0OmZ1bmN0aW9uKGIpe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dDYW1lcmFSaWdodCBpcyBub3cgLnNoYWRvdy5jYW1lcmEucmlnaHQuIik7dGhpcy5zaGFkb3cuY2FtZXJhLnJpZ2h0PWJ9fSxzaGFkb3dDYW1lcmFUb3A6e3NldDpmdW5jdGlvbihiKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhVG9wIGlzIG5vdyAuc2hhZG93LmNhbWVyYS50b3AuIik7CnRoaXMuc2hhZG93LmNhbWVyYS50b3A9Yn19LHNoYWRvd0NhbWVyYUJvdHRvbTp7c2V0OmZ1bmN0aW9uKGIpe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dDYW1lcmFCb3R0b20gaXMgbm93IC5zaGFkb3cuY2FtZXJhLmJvdHRvbS4iKTt0aGlzLnNoYWRvdy5jYW1lcmEuYm90dG9tPWJ9fSxzaGFkb3dDYW1lcmFOZWFyOntzZXQ6ZnVuY3Rpb24oYil7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0NhbWVyYU5lYXIgaXMgbm93IC5zaGFkb3cuY2FtZXJhLm5lYXIuIik7dGhpcy5zaGFkb3cuY2FtZXJhLm5lYXI9Yn19LHNoYWRvd0NhbWVyYUZhcjp7c2V0OmZ1bmN0aW9uKGIpe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dDYW1lcmFGYXIgaXMgbm93IC5zaGFkb3cuY2FtZXJhLmZhci4iKTt0aGlzLnNoYWRvdy5jYW1lcmEuZmFyPWJ9fSxzaGFkb3dDYW1lcmFWaXNpYmxlOntzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhVmlzaWJsZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLkNhbWVyYUhlbHBlciggbGlnaHQuc2hhZG93LmNhbWVyYSApIGluc3RlYWQuIil9fSwKc2hhZG93Qmlhczp7c2V0OmZ1bmN0aW9uKGIpe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dCaWFzIGlzIG5vdyAuc2hhZG93LmJpYXMuIik7dGhpcy5zaGFkb3cuYmlhcz1ifX0sc2hhZG93RGFya25lc3M6e3NldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dEYXJrbmVzcyBoYXMgYmVlbiByZW1vdmVkLiIpfX0sc2hhZG93TWFwV2lkdGg6e3NldDpmdW5jdGlvbihiKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93TWFwV2lkdGggaXMgbm93IC5zaGFkb3cubWFwU2l6ZS53aWR0aC4iKTt0aGlzLnNoYWRvdy5tYXBTaXplLndpZHRoPWJ9fSxzaGFkb3dNYXBIZWlnaHQ6e3NldDpmdW5jdGlvbihiKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93TWFwSGVpZ2h0IGlzIG5vdyAuc2hhZG93Lm1hcFNpemUuaGVpZ2h0LiIpO3RoaXMuc2hhZG93Lm1hcFNpemUuaGVpZ2h0PWJ9fX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFQucHJvdG90eXBlLAp7bGVuZ3RoOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckF0dHJpYnV0ZTogLmxlbmd0aCBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLmNvdW50IGluc3RlYWQuIik7cmV0dXJuIHRoaXMuYXJyYXkubGVuZ3RofX0sY29weUluZGljZXNBcnJheTpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkJ1ZmZlckF0dHJpYnV0ZTogLmNvcHlJbmRpY2VzQXJyYXkoKSBoYXMgYmVlbiByZW1vdmVkLiIpfX0pO09iamVjdC5hc3NpZ24oeGEucHJvdG90eXBlLHthZGRJbmRleDpmdW5jdGlvbihiKXtjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuYWRkSW5kZXgoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5zZXRJbmRleCgpLiIpO3RoaXMuc2V0SW5kZXgoYil9LGFkZERyYXdDYWxsOmZ1bmN0aW9uKGIsZSxoKXt2b2lkIDAhPT1oJiZjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuYWRkRHJhd0NhbGwoKSBubyBsb25nZXIgc3VwcG9ydHMgaW5kZXhPZmZzZXQuIik7CmNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5hZGREcmF3Q2FsbCgpIGlzIG5vdyAuYWRkR3JvdXAoKS4iKTt0aGlzLmFkZEdyb3VwKGIsZSl9LGNsZWFyRHJhd0NhbGxzOmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJHZW9tZXRyeTogLmNsZWFyRHJhd0NhbGxzKCkgaXMgbm93IC5jbGVhckdyb3VwcygpLiIpO3RoaXMuY2xlYXJHcm91cHMoKX0sY29tcHV0ZVRhbmdlbnRzOmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJHZW9tZXRyeTogLmNvbXB1dGVUYW5nZW50cygpIGhhcyBiZWVuIHJlbW92ZWQuIil9LGNvbXB1dGVPZmZzZXRzOmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJHZW9tZXRyeTogLmNvbXB1dGVPZmZzZXRzKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX19KTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyh4YS5wcm90b3R5cGUse2RyYXdjYWxsczp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5kcmF3Y2FsbHMgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ3JvdXBzLiIpOwpyZXR1cm4gdGhpcy5ncm91cHN9fSxvZmZzZXRzOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAub2Zmc2V0cyBoYXMgYmVlbiByZW5hbWVkIHRvIC5ncm91cHMuIik7cmV0dXJuIHRoaXMuZ3JvdXBzfX19KTtPYmplY3QuYXNzaWduKG1kLnByb3RvdHlwZSx7Z2V0QXJyYXlzOmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuRXh0cnVkZUJ1ZmZlckdlb21ldHJ5OiAuZ2V0QXJyYXlzKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sYWRkU2hhcGVMaXN0OmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuRXh0cnVkZUJ1ZmZlckdlb21ldHJ5OiAuYWRkU2hhcGVMaXN0KCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sYWRkU2hhcGU6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5FeHRydWRlQnVmZmVyR2VvbWV0cnk6IC5hZGRTaGFwZSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9fSk7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRGgucHJvdG90eXBlLAp7ZHluYW1pYzp7c2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5Vbmlmb3JtOiAuZHluYW1pYyBoYXMgYmVlbiByZW1vdmVkLiBVc2Ugb2JqZWN0Lm9uQmVmb3JlUmVuZGVyKCkgaW5zdGVhZC4iKX19LG9uVXBkYXRlOnt2YWx1ZTpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuVW5pZm9ybTogLm9uVXBkYXRlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG9iamVjdC5vbkJlZm9yZVJlbmRlcigpIGluc3RlYWQuIik7cmV0dXJuIHRoaXN9fX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEdhLnByb3RvdHlwZSx7d3JhcEFyb3VuZDp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5NYXRlcmlhbDogLndyYXBBcm91bmQgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5NYXRlcmlhbDogLndyYXBBcm91bmQgaGFzIGJlZW4gcmVtb3ZlZC4iKX19LG92ZXJkcmF3OntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsOiAub3ZlcmRyYXcgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sCnNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0ZXJpYWw6IC5vdmVyZHJhdyBoYXMgYmVlbiByZW1vdmVkLiIpfX0sd3JhcFJHQjp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5NYXRlcmlhbDogLndyYXBSR0IgaGFzIGJlZW4gcmVtb3ZlZC4iKTtyZXR1cm4gbmV3IEJ9fSxzaGFkaW5nOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS4iK3RoaXMudHlwZSsiOiAuc2hhZGluZyBoYXMgYmVlbiByZW1vdmVkLiBVc2UgdGhlIGJvb2xlYW4gLmZsYXRTaGFkaW5nIGluc3RlYWQuIil9LHNldDpmdW5jdGlvbihiKXtjb25zb2xlLndhcm4oIlRIUkVFLiIrdGhpcy50eXBlKyI6IC5zaGFkaW5nIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSB0aGUgYm9vbGVhbiAuZmxhdFNoYWRpbmcgaW5zdGVhZC4iKTt0aGlzLmZsYXRTaGFkaW5nPTE9PT1ifX19KTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhUYy5wcm90b3R5cGUse21ldGFsOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk1lc2hQaG9uZ01hdGVyaWFsOiAubWV0YWwgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFRIUkVFLk1lc2hTdGFuZGFyZE1hdGVyaWFsIGluc3RlYWQuIik7CnJldHVybiExfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk1lc2hQaG9uZ01hdGVyaWFsOiAubWV0YWwgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFRIUkVFLk1lc2hTdGFuZGFyZE1hdGVyaWFsIGluc3RlYWQiKX19fSk7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZGIucHJvdG90eXBlLHtkZXJpdmF0aXZlczp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5TaGFkZXJNYXRlcmlhbDogLmRlcml2YXRpdmVzIGhhcyBiZWVuIG1vdmVkIHRvIC5leHRlbnNpb25zLmRlcml2YXRpdmVzLiIpO3JldHVybiB0aGlzLmV4dGVuc2lvbnMuZGVyaXZhdGl2ZXN9LHNldDpmdW5jdGlvbihiKXtjb25zb2xlLndhcm4oIlRIUkVFLiBTaGFkZXJNYXRlcmlhbDogLmRlcml2YXRpdmVzIGhhcyBiZWVuIG1vdmVkIHRvIC5leHRlbnNpb25zLmRlcml2YXRpdmVzLiIpO3RoaXMuZXh0ZW5zaW9ucy5kZXJpdmF0aXZlcz1ifX19KTtPYmplY3QuYXNzaWduKHRpLnByb3RvdHlwZSwKe2NsZWFyVGFyZ2V0OmZ1bmN0aW9uKGIsZSxoLG4pe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmNsZWFyVGFyZ2V0KCkgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIC5zZXRSZW5kZXJUYXJnZXQoKSBhbmQgLmNsZWFyKCkgaW5zdGVhZC4iKTt0aGlzLnNldFJlbmRlclRhcmdldChiKTt0aGlzLmNsZWFyKGUsaCxuKX0sYW5pbWF0ZTpmdW5jdGlvbihiKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5hbmltYXRlKCkgaXMgbm93IC5zZXRBbmltYXRpb25Mb29wKCkuIik7dGhpcy5zZXRBbmltYXRpb25Mb29wKGIpfSxnZXRDdXJyZW50UmVuZGVyVGFyZ2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZ2V0Q3VycmVudFJlbmRlclRhcmdldCgpIGlzIG5vdyAuZ2V0UmVuZGVyVGFyZ2V0KCkuIik7cmV0dXJuIHRoaXMuZ2V0UmVuZGVyVGFyZ2V0KCl9LGdldE1heEFuaXNvdHJvcHk6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nZXRNYXhBbmlzb3Ryb3B5KCkgaXMgbm93IC5jYXBhYmlsaXRpZXMuZ2V0TWF4QW5pc290cm9weSgpLiIpOwpyZXR1cm4gdGhpcy5jYXBhYmlsaXRpZXMuZ2V0TWF4QW5pc290cm9weSgpfSxnZXRQcmVjaXNpb246ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nZXRQcmVjaXNpb24oKSBpcyBub3cgLmNhcGFiaWxpdGllcy5wcmVjaXNpb24uIik7cmV0dXJuIHRoaXMuY2FwYWJpbGl0aWVzLnByZWNpc2lvbn0scmVzZXRHTFN0YXRlOmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAucmVzZXRHTFN0YXRlKCkgaXMgbm93IC5zdGF0ZS5yZXNldCgpLiIpO3JldHVybiB0aGlzLnN0YXRlLnJlc2V0KCl9LHN1cHBvcnRzRmxvYXRUZXh0dXJlczpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnN1cHBvcnRzRmxvYXRUZXh0dXJlcygpIGlzIG5vdyAuZXh0ZW5zaW9ucy5nZXQoICdPRVNfdGV4dHVyZV9mbG9hdCcgKS4iKTtyZXR1cm4gdGhpcy5leHRlbnNpb25zLmdldCgiT0VTX3RleHR1cmVfZmxvYXQiKX0sCnN1cHBvcnRzSGFsZkZsb2F0VGV4dHVyZXM6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zdXBwb3J0c0hhbGZGbG9hdFRleHR1cmVzKCkgaXMgbm93IC5leHRlbnNpb25zLmdldCggJ09FU190ZXh0dXJlX2hhbGZfZmxvYXQnICkuIik7cmV0dXJuIHRoaXMuZXh0ZW5zaW9ucy5nZXQoIk9FU190ZXh0dXJlX2hhbGZfZmxvYXQiKX0sc3VwcG9ydHNTdGFuZGFyZERlcml2YXRpdmVzOmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNTdGFuZGFyZERlcml2YXRpdmVzKCkgaXMgbm93IC5leHRlbnNpb25zLmdldCggJ09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcycgKS4iKTtyZXR1cm4gdGhpcy5leHRlbnNpb25zLmdldCgiT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIil9LHN1cHBvcnRzQ29tcHJlc3NlZFRleHR1cmVTM1RDOmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNDb21wcmVzc2VkVGV4dHVyZVMzVEMoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCAnV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMnICkuIik7CnJldHVybiB0aGlzLmV4dGVuc2lvbnMuZ2V0KCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0YyIpfSxzdXBwb3J0c0NvbXByZXNzZWRUZXh0dXJlUFZSVEM6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zdXBwb3J0c0NvbXByZXNzZWRUZXh0dXJlUFZSVEMoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCAnV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjJyApLiIpO3JldHVybiB0aGlzLmV4dGVuc2lvbnMuZ2V0KCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfcHZydGMiKX0sc3VwcG9ydHNCbGVuZE1pbk1heDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnN1cHBvcnRzQmxlbmRNaW5NYXgoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCAnRVhUX2JsZW5kX21pbm1heCcgKS4iKTtyZXR1cm4gdGhpcy5leHRlbnNpb25zLmdldCgiRVhUX2JsZW5kX21pbm1heCIpfSxzdXBwb3J0c1ZlcnRleFRleHR1cmVzOmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNWZXJ0ZXhUZXh0dXJlcygpIGlzIG5vdyAuY2FwYWJpbGl0aWVzLnZlcnRleFRleHR1cmVzLiIpOwpyZXR1cm4gdGhpcy5jYXBhYmlsaXRpZXMudmVydGV4VGV4dHVyZXN9LHN1cHBvcnRzSW5zdGFuY2VkQXJyYXlzOmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNJbnN0YW5jZWRBcnJheXMoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCAnQU5HTEVfaW5zdGFuY2VkX2FycmF5cycgKS4iKTtyZXR1cm4gdGhpcy5leHRlbnNpb25zLmdldCgiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpfSxlbmFibGVTY2lzc29yVGVzdDpmdW5jdGlvbihiKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5lbmFibGVTY2lzc29yVGVzdCgpIGlzIG5vdyAuc2V0U2Npc3NvclRlc3QoKS4iKTt0aGlzLnNldFNjaXNzb3JUZXN0KGIpfSxpbml0TWF0ZXJpYWw6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5pbml0TWF0ZXJpYWwoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxhZGRQcmVQbHVnaW46ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5hZGRQcmVQbHVnaW4oKSBoYXMgYmVlbiByZW1vdmVkLiIpfSwKYWRkUG9zdFBsdWdpbjpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmFkZFBvc3RQbHVnaW4oKSBoYXMgYmVlbiByZW1vdmVkLiIpfSx1cGRhdGVTaGFkb3dNYXA6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC51cGRhdGVTaGFkb3dNYXAoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxzZXRGYWNlQ3VsbGluZzpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNldEZhY2VDdWxsaW5nKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sYWxsb2NUZXh0dXJlVW5pdDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmFsbG9jVGV4dHVyZVVuaXQoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxzZXRUZXh0dXJlOmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2V0VGV4dHVyZSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LHNldFRleHR1cmUyRDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNldFRleHR1cmUyRCgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LApzZXRUZXh0dXJlQ3ViZTpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNldFRleHR1cmVDdWJlKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX19KTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0aS5wcm90b3R5cGUse3NoYWRvd01hcEVuYWJsZWQ6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNoYWRvd01hcC5lbmFibGVkfSxzZXQ6ZnVuY3Rpb24oYil7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwRW5hYmxlZCBpcyBub3cgLnNoYWRvd01hcC5lbmFibGVkLiIpO3RoaXMuc2hhZG93TWFwLmVuYWJsZWQ9Yn19LHNoYWRvd01hcFR5cGU6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNoYWRvd01hcC50eXBlfSxzZXQ6ZnVuY3Rpb24oYil7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwVHlwZSBpcyBub3cgLnNoYWRvd01hcC50eXBlLiIpO3RoaXMuc2hhZG93TWFwLnR5cGU9Yn19LApzaGFkb3dNYXBDdWxsRmFjZTp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwQ3VsbEZhY2UgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IE1hdGVyaWFsLnNoYWRvd1NpZGUgaW5zdGVhZC4iKX0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwQ3VsbEZhY2UgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IE1hdGVyaWFsLnNoYWRvd1NpZGUgaW5zdGVhZC4iKX19fSk7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMobWwucHJvdG90eXBlLHtjdWxsRmFjZTp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwLmN1bGxGYWNlIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuIil9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcC5jdWxsRmFjZSBoYXMgYmVlbiByZW1vdmVkLiBTZXQgTWF0ZXJpYWwuc2hhZG93U2lkZSBpbnN0ZWFkLiIpfX0sCnJlbmRlclJldmVyc2VTaWRlZDp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwLnJlbmRlclJldmVyc2VTaWRlZCBoYXMgYmVlbiByZW1vdmVkLiBTZXQgTWF0ZXJpYWwuc2hhZG93U2lkZSBpbnN0ZWFkLiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXAucmVuZGVyUmV2ZXJzZVNpZGVkIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuIil9fSxyZW5kZXJTaW5nbGVTaWRlZDp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwLnJlbmRlclNpbmdsZVNpZGVkIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuIil9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcC5yZW5kZXJTaW5nbGVTaWRlZCBoYXMgYmVlbiByZW1vdmVkLiBTZXQgTWF0ZXJpYWwuc2hhZG93U2lkZSBpbnN0ZWFkLiIpfX19KTsKT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoci5wcm90b3R5cGUse2FjdGl2ZUN1YmVGYWNlOntzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0Q3ViZTogLmFjdGl2ZUN1YmVGYWNlIGhhcyBiZWVuIHJlbW92ZWQuIEl0IGlzIG5vdyB0aGUgc2Vjb25kIHBhcmFtZXRlciBvZiBXZWJHTFJlbmRlcmVyLnNldFJlbmRlclRhcmdldCgpLiIpfX0sYWN0aXZlTWlwTWFwTGV2ZWw6e3NldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXRDdWJlOiAuYWN0aXZlTWlwTWFwTGV2ZWwgaGFzIGJlZW4gcmVtb3ZlZC4gSXQgaXMgbm93IHRoZSB0aGlyZCBwYXJhbWV0ZXIgb2YgV2ViR0xSZW5kZXJlci5zZXRSZW5kZXJUYXJnZXQoKS4iKX19fSk7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMocC5wcm90b3R5cGUse3dyYXBTOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAud3JhcFMgaXMgbm93IC50ZXh0dXJlLndyYXBTLiIpOwpyZXR1cm4gdGhpcy50ZXh0dXJlLndyYXBTfSxzZXQ6ZnVuY3Rpb24oYil7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLndyYXBTIGlzIG5vdyAudGV4dHVyZS53cmFwUy4iKTt0aGlzLnRleHR1cmUud3JhcFM9Yn19LHdyYXBUOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAud3JhcFQgaXMgbm93IC50ZXh0dXJlLndyYXBULiIpO3JldHVybiB0aGlzLnRleHR1cmUud3JhcFR9LHNldDpmdW5jdGlvbihiKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAud3JhcFQgaXMgbm93IC50ZXh0dXJlLndyYXBULiIpO3RoaXMudGV4dHVyZS53cmFwVD1ifX0sbWFnRmlsdGVyOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAubWFnRmlsdGVyIGlzIG5vdyAudGV4dHVyZS5tYWdGaWx0ZXIuIik7cmV0dXJuIHRoaXMudGV4dHVyZS5tYWdGaWx0ZXJ9LApzZXQ6ZnVuY3Rpb24oYil7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLm1hZ0ZpbHRlciBpcyBub3cgLnRleHR1cmUubWFnRmlsdGVyLiIpO3RoaXMudGV4dHVyZS5tYWdGaWx0ZXI9Yn19LG1pbkZpbHRlcjp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLm1pbkZpbHRlciBpcyBub3cgLnRleHR1cmUubWluRmlsdGVyLiIpO3JldHVybiB0aGlzLnRleHR1cmUubWluRmlsdGVyfSxzZXQ6ZnVuY3Rpb24oYil7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLm1pbkZpbHRlciBpcyBub3cgLnRleHR1cmUubWluRmlsdGVyLiIpO3RoaXMudGV4dHVyZS5taW5GaWx0ZXI9Yn19LGFuaXNvdHJvcHk6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5hbmlzb3Ryb3B5IGlzIG5vdyAudGV4dHVyZS5hbmlzb3Ryb3B5LiIpO3JldHVybiB0aGlzLnRleHR1cmUuYW5pc290cm9weX0sCnNldDpmdW5jdGlvbihiKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAuYW5pc290cm9weSBpcyBub3cgLnRleHR1cmUuYW5pc290cm9weS4iKTt0aGlzLnRleHR1cmUuYW5pc290cm9weT1ifX0sb2Zmc2V0OntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAub2Zmc2V0IGlzIG5vdyAudGV4dHVyZS5vZmZzZXQuIik7cmV0dXJuIHRoaXMudGV4dHVyZS5vZmZzZXR9LHNldDpmdW5jdGlvbihiKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAub2Zmc2V0IGlzIG5vdyAudGV4dHVyZS5vZmZzZXQuIik7dGhpcy50ZXh0dXJlLm9mZnNldD1ifX0scmVwZWF0OntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAucmVwZWF0IGlzIG5vdyAudGV4dHVyZS5yZXBlYXQuIik7cmV0dXJuIHRoaXMudGV4dHVyZS5yZXBlYXR9LHNldDpmdW5jdGlvbihiKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAucmVwZWF0IGlzIG5vdyAudGV4dHVyZS5yZXBlYXQuIik7CnRoaXMudGV4dHVyZS5yZXBlYXQ9Yn19LGZvcm1hdDp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLmZvcm1hdCBpcyBub3cgLnRleHR1cmUuZm9ybWF0LiIpO3JldHVybiB0aGlzLnRleHR1cmUuZm9ybWF0fSxzZXQ6ZnVuY3Rpb24oYil7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLmZvcm1hdCBpcyBub3cgLnRleHR1cmUuZm9ybWF0LiIpO3RoaXMudGV4dHVyZS5mb3JtYXQ9Yn19LHR5cGU6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC50eXBlIGlzIG5vdyAudGV4dHVyZS50eXBlLiIpO3JldHVybiB0aGlzLnRleHR1cmUudHlwZX0sc2V0OmZ1bmN0aW9uKGIpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC50eXBlIGlzIG5vdyAudGV4dHVyZS50eXBlLiIpO3RoaXMudGV4dHVyZS50eXBlPWJ9fSxnZW5lcmF0ZU1pcG1hcHM6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5nZW5lcmF0ZU1pcG1hcHMgaXMgbm93IC50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcy4iKTsKcmV0dXJuIHRoaXMudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHN9LHNldDpmdW5jdGlvbihiKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAuZ2VuZXJhdGVNaXBtYXBzIGlzIG5vdyAudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHMuIik7dGhpcy50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcz1ifX19KTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhybC5wcm90b3R5cGUse3N0YW5kaW5nOntzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYlZSTWFuYWdlcjogLnN0YW5kaW5nIGhhcyBiZWVuIHJlbW92ZWQuIil9fSx1c2VySGVpZ2h0OntzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYlZSTWFuYWdlcjogLnVzZXJIZWlnaHQgaGFzIGJlZW4gcmVtb3ZlZC4iKX19fSk7amYucHJvdG90eXBlLmxvYWQ9ZnVuY3Rpb24oYil7Y29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogLmxvYWQgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIFRIUkVFLkF1ZGlvTG9hZGVyIGluc3RlYWQuIik7CnZhciBlPXRoaXM7KG5ldyBNaSkubG9hZChiLGZ1bmN0aW9uKGgpe2Uuc2V0QnVmZmVyKGgpfSk7cmV0dXJuIHRoaXN9O1RpLnByb3RvdHlwZS5nZXREYXRhPWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5BdWRpb0FuYWx5c2VyOiAuZ2V0RGF0YSgpIGlzIG5vdyAuZ2V0RnJlcXVlbmN5RGF0YSgpLiIpO3JldHVybiB0aGlzLmdldEZyZXF1ZW5jeURhdGEoKX07eGcucHJvdG90eXBlLnVwZGF0ZUN1YmVNYXA9ZnVuY3Rpb24oYixlKXtjb25zb2xlLndhcm4oIlRIUkVFLkN1YmVDYW1lcmE6IC51cGRhdGVDdWJlTWFwKCkgaXMgbm93IC51cGRhdGUoKS4iKTtyZXR1cm4gdGhpcy51cGRhdGUoYixlKX07WWQuY3Jvc3NPcmlnaW49dm9pZCAwO1lkLmxvYWRUZXh0dXJlPWZ1bmN0aW9uKGIsZSxoLG4pe2NvbnNvbGUud2FybigiVEhSRUUuSW1hZ2VVdGlscy5sb2FkVGV4dHVyZSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgVEhSRUUuVGV4dHVyZUxvYWRlcigpIGluc3RlYWQuIik7dmFyIHU9Cm5ldyBzaDt1LnNldENyb3NzT3JpZ2luKHRoaXMuY3Jvc3NPcmlnaW4pO2I9dS5sb2FkKGIsaCx2b2lkIDAsbik7ZSYmKGIubWFwcGluZz1lKTtyZXR1cm4gYn07WWQubG9hZFRleHR1cmVDdWJlPWZ1bmN0aW9uKGIsZSxoLG4pe2NvbnNvbGUud2FybigiVEhSRUUuSW1hZ2VVdGlscy5sb2FkVGV4dHVyZUN1YmUgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIFRIUkVFLkN1YmVUZXh0dXJlTG9hZGVyKCkgaW5zdGVhZC4iKTt2YXIgdT1uZXcgRmk7dS5zZXRDcm9zc09yaWdpbih0aGlzLmNyb3NzT3JpZ2luKTtiPXUubG9hZChiLGgsdm9pZCAwLG4pO2UmJihiLm1hcHBpbmc9ZSk7cmV0dXJuIGJ9O1lkLmxvYWRDb21wcmVzc2VkVGV4dHVyZT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkltYWdlVXRpbHMubG9hZENvbXByZXNzZWRUZXh0dXJlIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBUSFJFRS5ERFNMb2FkZXIgaW5zdGVhZC4iKX07WWQubG9hZENvbXByZXNzZWRUZXh0dXJlQ3ViZT0KZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5JbWFnZVV0aWxzLmxvYWRDb21wcmVzc2VkVGV4dHVyZUN1YmUgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFRIUkVFLkREU0xvYWRlciBpbnN0ZWFkLiIpfTthLldlYkdMTXVsdGlzYW1wbGVSZW5kZXJUYXJnZXQ9cTthLldlYkdMUmVuZGVyVGFyZ2V0Q3ViZT1yO2EuV2ViR0xSZW5kZXJUYXJnZXQ9cDthLldlYkdMUmVuZGVyZXI9dGk7YS5TaGFkZXJMaWI9aWQ7YS5Vbmlmb3Jtc0xpYj1iYjthLlVuaWZvcm1zVXRpbHM9bHA7YS5TaGFkZXJDaHVuaz16YjthLkZvZ0V4cDI9Z2g7YS5Gb2c9aGg7YS5TY2VuZT1paDthLlNwcml0ZT1TZjthLkxPRD1UZjthLlNraW5uZWRNZXNoPVVmO2EuU2tlbGV0b249amg7YS5Cb25lPXppO2EuTWVzaD10YjthLkxpbmVTZWdtZW50cz1QYjthLkxpbmVMb29wPWtoO2EuTGluZT1sYzthLlBvaW50cz1SZTthLkdyb3VwPU5lO2EuVmlkZW9UZXh0dXJlPUFpO2EuRGF0YVRleHR1cmU9dDthLkRhdGFUZXh0dXJlMkRBcnJheT0KS2U7YS5EYXRhVGV4dHVyZTNEPUxlO2EuQ29tcHJlc3NlZFRleHR1cmU9U2U7YS5DdWJlVGV4dHVyZT11ZDthLkNhbnZhc1RleHR1cmU9VmY7YS5EZXB0aFRleHR1cmU9V2Y7YS5UZXh0dXJlPWs7YS5BbmltYXRpb25Mb2FkZXI9RWw7YS5Db21wcmVzc2VkVGV4dHVyZUxvYWRlcj1GbDthLkRhdGFUZXh0dXJlTG9hZGVyPUVpO2EuQ3ViZVRleHR1cmVMb2FkZXI9Rmk7YS5UZXh0dXJlTG9hZGVyPXNoO2EuT2JqZWN0TG9hZGVyPUlpO2EuTWF0ZXJpYWxMb2FkZXI9Qmg7YS5CdWZmZXJHZW9tZXRyeUxvYWRlcj1IaTthLkRlZmF1bHRMb2FkaW5nTWFuYWdlcj1BYzthLkxvYWRpbmdNYW5hZ2VyPURpO2EuSW1hZ2VMb2FkZXI9c2c7YS5JbWFnZUJpdG1hcExvYWRlcj1KaTthLkZvbnRMb2FkZXI9SGw7YS5GaWxlTG9hZGVyPVVjO2EuTG9hZGVyPXdnO2EuTG9hZGVyVXRpbHM9aGo7YS5DYWNoZT14ZTthLkF1ZGlvTG9hZGVyPU1pO2EuU3BvdExpZ2h0U2hhZG93PXVoO2EuU3BvdExpZ2h0PXZoOwphLlBvaW50TGlnaHQ9d2g7YS5SZWN0QXJlYUxpZ2h0PUFoO2EuSGVtaXNwaGVyZUxpZ2h0PXRoO2EuSGVtaXNwaGVyZUxpZ2h0UHJvYmU9Tmk7YS5EaXJlY3Rpb25hbExpZ2h0U2hhZG93PXhoO2EuRGlyZWN0aW9uYWxMaWdodD15aDthLkFtYmllbnRMaWdodD16aDthLkFtYmllbnRMaWdodFByb2JlPU9pO2EuTGlnaHRTaGFkb3c9d2U7YS5MaWdodD1TYjthLkxpZ2h0UHJvYmU9JGM7YS5TdGVyZW9DYW1lcmE9SWw7YS5QZXJzcGVjdGl2ZUNhbWVyYT1jYzthLk9ydGhvZ3JhcGhpY0NhbWVyYT12ZzthLkN1YmVDYW1lcmE9eGc7YS5BcnJheUNhbWVyYT1QZjthLkNhbWVyYT1qZDthLkF1ZGlvTGlzdGVuZXI9UWk7YS5Qb3NpdGlvbmFsQXVkaW89U2k7YS5BdWRpb0NvbnRleHQ9Umk7YS5BdWRpb0FuYWx5c2VyPVRpO2EuQXVkaW89amY7YS5WZWN0b3JLZXlmcmFtZVRyYWNrPWdmO2EuU3RyaW5nS2V5ZnJhbWVUcmFjaz1yaDthLlF1YXRlcm5pb25LZXlmcmFtZVRyYWNrPXJnO2EuTnVtYmVyS2V5ZnJhbWVUcmFjaz0KZmY7YS5Db2xvcktleWZyYW1lVHJhY2s9cGg7YS5Cb29sZWFuS2V5ZnJhbWVUcmFjaz1vaDthLlByb3BlcnR5TWl4ZXI9VWk7YS5Qcm9wZXJ0eUJpbmRpbmc9c2M7YS5LZXlmcmFtZVRyYWNrPW1jO2EuQW5pbWF0aW9uVXRpbHM9Z2M7YS5BbmltYXRpb25PYmplY3RHcm91cD1LbDthLkFuaW1hdGlvbk1peGVyPVZpO2EuQW5pbWF0aW9uQ2xpcD1JYzthLlVuaWZvcm09RGg7YS5JbnN0YW5jZWRCdWZmZXJHZW9tZXRyeT1XaTthLkJ1ZmZlckdlb21ldHJ5PXhhO2EuR2VvbWV0cnk9TjthLkludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlPVJmO2EuSW5zdGFuY2VkSW50ZXJsZWF2ZWRCdWZmZXI9WGk7YS5JbnRlcmxlYXZlZEJ1ZmZlcj1oZTthLkluc3RhbmNlZEJ1ZmZlckF0dHJpYnV0ZT1ZaTthLkZhY2UzPUw7YS5PYmplY3QzRD1TO2EuUmF5Y2FzdGVyPU1sO2EuTGF5ZXJzPVA7YS5FdmVudERpc3BhdGNoZXI9YzthLkNsb2NrPVBpO2EuUXVhdGVybmlvbkxpbmVhckludGVycG9sYW50PXFoOwphLkxpbmVhckludGVycG9sYW50PXFnO2EuRGlzY3JldGVJbnRlcnBvbGFudD1uaDthLkN1YmljSW50ZXJwb2xhbnQ9bWg7YS5JbnRlcnBvbGFudD1EYzthLlRyaWFuZ2xlPUNiO2EuTWF0aD1vYjthLlNwaGVyaWNhbD1PbDthLkN5bGluZHJpY2FsPVBsO2EuUGxhbmU9eTthLkZydXN0dW09eDthLlNwaGVyZT1BO2EuUmF5PXhiO2EuTWF0cml4ND1DO2EuTWF0cml4Mz1sO2EuQm94Mz12O2EuQm94Mj0kaTthLkxpbmUzPWFqO2EuRXVsZXI9SjthLlZlY3RvcjQ9bTthLlZlY3RvcjM9ZzthLlZlY3RvcjI9ZDthLlF1YXRlcm5pb249ZjthLkNvbG9yPUI7YS5TcGhlcmljYWxIYXJtb25pY3MzPUNoO2EuSW1tZWRpYXRlUmVuZGVyT2JqZWN0PXlnO2EuVmVydGV4Tm9ybWFsc0hlbHBlcj16ZzthLlNwb3RMaWdodEhlbHBlcj1rZjthLlNrZWxldG9uSGVscGVyPWxmO2EuUG9pbnRMaWdodEhlbHBlcj1tZjthLlJlY3RBcmVhTGlnaHRIZWxwZXI9bmY7YS5IZW1pc3BoZXJlTGlnaHRIZWxwZXI9b2Y7CmEuTGlnaHRQcm9iZUhlbHBlcj1wZjthLkdyaWRIZWxwZXI9RWg7YS5Qb2xhckdyaWRIZWxwZXI9Rmg7YS5Qb3NpdGlvbmFsQXVkaW9IZWxwZXI9cWY7YS5GYWNlTm9ybWFsc0hlbHBlcj1BZzthLkRpcmVjdGlvbmFsTGlnaHRIZWxwZXI9cmY7YS5DYW1lcmFIZWxwZXI9Qmc7YS5Cb3hIZWxwZXI9QmQ7YS5Cb3gzSGVscGVyPUNnO2EuUGxhbmVIZWxwZXI9RGc7YS5BcnJvd0hlbHBlcj1DZDthLkF4ZXNIZWxwZXI9RWc7YS5TaGFwZT1YZDthLlBhdGg9WmM7YS5TaGFwZVBhdGg9S2k7YS5Gb250PUxpO2EuQ3VydmVQYXRoPUFkO2EuQ3VydmU9ZWI7YS5JbWFnZVV0aWxzPVlkO2EuU2hhcGVVdGlscz15ZDthLldlYkdMVXRpbHM9bmw7YS5XaXJlZnJhbWVHZW9tZXRyeT1UZTthLlBhcmFtZXRyaWNHZW9tZXRyeT1YZjthLlBhcmFtZXRyaWNCdWZmZXJHZW9tZXRyeT1VZTthLlRldHJhaGVkcm9uR2VvbWV0cnk9WmY7YS5UZXRyYWhlZHJvbkJ1ZmZlckdlb21ldHJ5PVZlO2EuT2N0YWhlZHJvbkdlb21ldHJ5PQokZjthLk9jdGFoZWRyb25CdWZmZXJHZW9tZXRyeT1pZTthLkljb3NhaGVkcm9uR2VvbWV0cnk9YWc7YS5JY29zYWhlZHJvbkJ1ZmZlckdlb21ldHJ5PVdlO2EuRG9kZWNhaGVkcm9uR2VvbWV0cnk9Ymc7YS5Eb2RlY2FoZWRyb25CdWZmZXJHZW9tZXRyeT1YZTthLlBvbHloZWRyb25HZW9tZXRyeT1ZZjthLlBvbHloZWRyb25CdWZmZXJHZW9tZXRyeT16YzthLlR1YmVHZW9tZXRyeT1jZzthLlR1YmVCdWZmZXJHZW9tZXRyeT1qZTthLlRvcnVzS25vdEdlb21ldHJ5PWRnO2EuVG9ydXNLbm90QnVmZmVyR2VvbWV0cnk9WWU7YS5Ub3J1c0dlb21ldHJ5PWVnO2EuVG9ydXNCdWZmZXJHZW9tZXRyeT1aZTthLlRleHRHZW9tZXRyeT1qZzthLlRleHRCdWZmZXJHZW9tZXRyeT0kZTthLlNwaGVyZUdlb21ldHJ5PWtnO2EuU3BoZXJlQnVmZmVyR2VvbWV0cnk9V2Q7YS5SaW5nR2VvbWV0cnk9bGc7YS5SaW5nQnVmZmVyR2VvbWV0cnk9YWY7YS5QbGFuZUdlb21ldHJ5PVNhO2EuUGxhbmVCdWZmZXJHZW9tZXRyeT0KRWE7YS5MYXRoZUdlb21ldHJ5PW1nO2EuTGF0aGVCdWZmZXJHZW9tZXRyeT1iZjthLlNoYXBlR2VvbWV0cnk9bWU7YS5TaGFwZUJ1ZmZlckdlb21ldHJ5PW5lO2EuRXh0cnVkZUdlb21ldHJ5PWxlO2EuRXh0cnVkZUJ1ZmZlckdlb21ldHJ5PW1kO2EuRWRnZXNHZW9tZXRyeT1jZjthLkNvbmVHZW9tZXRyeT1uZzthLkNvbmVCdWZmZXJHZW9tZXRyeT1vZzthLkN5bGluZGVyR2VvbWV0cnk9b2U7YS5DeWxpbmRlckJ1ZmZlckdlb21ldHJ5PXpkO2EuQ2lyY2xlR2VvbWV0cnk9cGc7YS5DaXJjbGVCdWZmZXJHZW9tZXRyeT1kZjthLkJveEdlb21ldHJ5PXphO2EuQ3ViZUdlb21ldHJ5PXphO2EuQm94QnVmZmVyR2VvbWV0cnk9RmE7YS5TaGFkb3dNYXRlcmlhbD1wZTthLlNwcml0ZU1hdGVyaWFsPVZkO2EuUmF3U2hhZGVyTWF0ZXJpYWw9ZWY7YS5TaGFkZXJNYXRlcmlhbD1kYjthLlBvaW50c01hdGVyaWFsPVNjO2EuTWVzaFBoeXNpY2FsTWF0ZXJpYWw9cWU7YS5NZXNoU3RhbmRhcmRNYXRlcmlhbD0KbmQ7YS5NZXNoUGhvbmdNYXRlcmlhbD1UYzthLk1lc2hUb29uTWF0ZXJpYWw9cmU7YS5NZXNoTm9ybWFsTWF0ZXJpYWw9c2U7YS5NZXNoTGFtYmVydE1hdGVyaWFsPXRlO2EuTWVzaERlcHRoTWF0ZXJpYWw9UGQ7YS5NZXNoRGlzdGFuY2VNYXRlcmlhbD1RZDthLk1lc2hCYXNpY01hdGVyaWFsPXliO2EuTWVzaE1hdGNhcE1hdGVyaWFsPXVlO2EuTGluZURhc2hlZE1hdGVyaWFsPXZlO2EuTGluZUJhc2ljTWF0ZXJpYWw9TGI7YS5NYXRlcmlhbD1HYTthLkZsb2F0NjRCdWZmZXJBdHRyaWJ1dGU9bGE7YS5GbG9hdDMyQnVmZmVyQXR0cmlidXRlPWJhO2EuVWludDMyQnVmZmVyQXR0cmlidXRlPWthO2EuSW50MzJCdWZmZXJBdHRyaWJ1dGU9ZWE7YS5VaW50MTZCdWZmZXJBdHRyaWJ1dGU9Y2E7YS5JbnQxNkJ1ZmZlckF0dHJpYnV0ZT1YO2EuVWludDhDbGFtcGVkQnVmZmVyQXR0cmlidXRlPWhhO2EuVWludDhCdWZmZXJBdHRyaWJ1dGU9YWE7YS5JbnQ4QnVmZmVyQXR0cmlidXRlPVk7YS5CdWZmZXJBdHRyaWJ1dGU9ClQ7YS5BcmNDdXJ2ZT1oZjthLkNhdG11bGxSb21DdXJ2ZTM9cmM7YS5DdWJpY0JlemllckN1cnZlPVZjO2EuQ3ViaWNCZXppZXJDdXJ2ZTM9b2Q7YS5FbGxpcHNlQ3VydmU9RWM7YS5MaW5lQ3VydmU9QmM7YS5MaW5lQ3VydmUzPVdjO2EuUXVhZHJhdGljQmV6aWVyQ3VydmU9WGM7YS5RdWFkcmF0aWNCZXppZXJDdXJ2ZTM9cGQ7YS5TcGxpbmVDdXJ2ZT1ZYzthLlJFVklTSU9OPSIxMDQiO2EuTU9VU0U9e0xFRlQ6MCxNSURETEU6MSxSSUdIVDoyfTthLkN1bGxGYWNlTm9uZT0wO2EuQ3VsbEZhY2VCYWNrPTE7YS5DdWxsRmFjZUZyb250PTI7YS5DdWxsRmFjZUZyb250QmFjaz0zO2EuRnJvbnRGYWNlRGlyZWN0aW9uQ1c9MDthLkZyb250RmFjZURpcmVjdGlvbkNDVz0xO2EuQmFzaWNTaGFkb3dNYXA9MDthLlBDRlNoYWRvd01hcD0xO2EuUENGU29mdFNoYWRvd01hcD0yO2EuRnJvbnRTaWRlPTA7YS5CYWNrU2lkZT0xO2EuRG91YmxlU2lkZT0yO2EuRmxhdFNoYWRpbmc9MTthLlNtb290aFNoYWRpbmc9CjI7YS5Ob0NvbG9ycz0wO2EuRmFjZUNvbG9ycz0xO2EuVmVydGV4Q29sb3JzPTI7YS5Ob0JsZW5kaW5nPTA7YS5Ob3JtYWxCbGVuZGluZz0xO2EuQWRkaXRpdmVCbGVuZGluZz0yO2EuU3VidHJhY3RpdmVCbGVuZGluZz0zO2EuTXVsdGlwbHlCbGVuZGluZz00O2EuQ3VzdG9tQmxlbmRpbmc9NTthLkFkZEVxdWF0aW9uPTEwMDthLlN1YnRyYWN0RXF1YXRpb249MTAxO2EuUmV2ZXJzZVN1YnRyYWN0RXF1YXRpb249MTAyO2EuTWluRXF1YXRpb249MTAzO2EuTWF4RXF1YXRpb249MTA0O2EuWmVyb0ZhY3Rvcj0yMDA7YS5PbmVGYWN0b3I9MjAxO2EuU3JjQ29sb3JGYWN0b3I9MjAyO2EuT25lTWludXNTcmNDb2xvckZhY3Rvcj0yMDM7YS5TcmNBbHBoYUZhY3Rvcj0yMDQ7YS5PbmVNaW51c1NyY0FscGhhRmFjdG9yPTIwNTthLkRzdEFscGhhRmFjdG9yPTIwNjthLk9uZU1pbnVzRHN0QWxwaGFGYWN0b3I9MjA3O2EuRHN0Q29sb3JGYWN0b3I9MjA4O2EuT25lTWludXNEc3RDb2xvckZhY3Rvcj0KMjA5O2EuU3JjQWxwaGFTYXR1cmF0ZUZhY3Rvcj0yMTA7YS5OZXZlckRlcHRoPTA7YS5BbHdheXNEZXB0aD0xO2EuTGVzc0RlcHRoPTI7YS5MZXNzRXF1YWxEZXB0aD0zO2EuRXF1YWxEZXB0aD00O2EuR3JlYXRlckVxdWFsRGVwdGg9NTthLkdyZWF0ZXJEZXB0aD02O2EuTm90RXF1YWxEZXB0aD03O2EuTXVsdGlwbHlPcGVyYXRpb249MDthLk1peE9wZXJhdGlvbj0xO2EuQWRkT3BlcmF0aW9uPTI7YS5Ob1RvbmVNYXBwaW5nPTA7YS5MaW5lYXJUb25lTWFwcGluZz0xO2EuUmVpbmhhcmRUb25lTWFwcGluZz0yO2EuVW5jaGFydGVkMlRvbmVNYXBwaW5nPTM7YS5DaW5lb25Ub25lTWFwcGluZz00O2EuQUNFU0ZpbG1pY1RvbmVNYXBwaW5nPTU7YS5VVk1hcHBpbmc9MzAwO2EuQ3ViZVJlZmxlY3Rpb25NYXBwaW5nPTMwMTthLkN1YmVSZWZyYWN0aW9uTWFwcGluZz0zMDI7YS5FcXVpcmVjdGFuZ3VsYXJSZWZsZWN0aW9uTWFwcGluZz0zMDM7YS5FcXVpcmVjdGFuZ3VsYXJSZWZyYWN0aW9uTWFwcGluZz0KMzA0O2EuU3BoZXJpY2FsUmVmbGVjdGlvbk1hcHBpbmc9MzA1O2EuQ3ViZVVWUmVmbGVjdGlvbk1hcHBpbmc9MzA2O2EuQ3ViZVVWUmVmcmFjdGlvbk1hcHBpbmc9MzA3O2EuUmVwZWF0V3JhcHBpbmc9MUUzO2EuQ2xhbXBUb0VkZ2VXcmFwcGluZz0xMDAxO2EuTWlycm9yZWRSZXBlYXRXcmFwcGluZz0xMDAyO2EuTmVhcmVzdEZpbHRlcj0xMDAzO2EuTmVhcmVzdE1pcE1hcE5lYXJlc3RGaWx0ZXI9MTAwNDthLk5lYXJlc3RNaXBNYXBMaW5lYXJGaWx0ZXI9MTAwNTthLkxpbmVhckZpbHRlcj0xMDA2O2EuTGluZWFyTWlwTWFwTmVhcmVzdEZpbHRlcj0xMDA3O2EuTGluZWFyTWlwTWFwTGluZWFyRmlsdGVyPTEwMDg7YS5VbnNpZ25lZEJ5dGVUeXBlPTEwMDk7YS5CeXRlVHlwZT0xMDEwO2EuU2hvcnRUeXBlPTEwMTE7YS5VbnNpZ25lZFNob3J0VHlwZT0xMDEyO2EuSW50VHlwZT0xMDEzO2EuVW5zaWduZWRJbnRUeXBlPTEwMTQ7YS5GbG9hdFR5cGU9MTAxNTthLkhhbGZGbG9hdFR5cGU9CjEwMTY7YS5VbnNpZ25lZFNob3J0NDQ0NFR5cGU9MTAxNzthLlVuc2lnbmVkU2hvcnQ1NTUxVHlwZT0xMDE4O2EuVW5zaWduZWRTaG9ydDU2NVR5cGU9MTAxOTthLlVuc2lnbmVkSW50MjQ4VHlwZT0xMDIwO2EuQWxwaGFGb3JtYXQ9MTAyMTthLlJHQkZvcm1hdD0xMDIyO2EuUkdCQUZvcm1hdD0xMDIzO2EuTHVtaW5hbmNlRm9ybWF0PTEwMjQ7YS5MdW1pbmFuY2VBbHBoYUZvcm1hdD0xMDI1O2EuUkdCRUZvcm1hdD0xMDIzO2EuRGVwdGhGb3JtYXQ9MTAyNjthLkRlcHRoU3RlbmNpbEZvcm1hdD0xMDI3O2EuUmVkRm9ybWF0PTEwMjg7YS5SR0JfUzNUQ19EWFQxX0Zvcm1hdD0zMzc3NjthLlJHQkFfUzNUQ19EWFQxX0Zvcm1hdD0zMzc3NzthLlJHQkFfUzNUQ19EWFQzX0Zvcm1hdD0zMzc3ODthLlJHQkFfUzNUQ19EWFQ1X0Zvcm1hdD0zMzc3OTthLlJHQl9QVlJUQ180QlBQVjFfRm9ybWF0PTM1ODQwO2EuUkdCX1BWUlRDXzJCUFBWMV9Gb3JtYXQ9MzU4NDE7YS5SR0JBX1BWUlRDXzRCUFBWMV9Gb3JtYXQ9CjM1ODQyO2EuUkdCQV9QVlJUQ18yQlBQVjFfRm9ybWF0PTM1ODQzO2EuUkdCX0VUQzFfRm9ybWF0PTM2MTk2O2EuUkdCQV9BU1RDXzR4NF9Gb3JtYXQ9Mzc4MDg7YS5SR0JBX0FTVENfNXg0X0Zvcm1hdD0zNzgwOTthLlJHQkFfQVNUQ181eDVfRm9ybWF0PTM3ODEwO2EuUkdCQV9BU1RDXzZ4NV9Gb3JtYXQ9Mzc4MTE7YS5SR0JBX0FTVENfNng2X0Zvcm1hdD0zNzgxMjthLlJHQkFfQVNUQ184eDVfRm9ybWF0PTM3ODEzO2EuUkdCQV9BU1RDXzh4Nl9Gb3JtYXQ9Mzc4MTQ7YS5SR0JBX0FTVENfOHg4X0Zvcm1hdD0zNzgxNTthLlJHQkFfQVNUQ18xMHg1X0Zvcm1hdD0zNzgxNjthLlJHQkFfQVNUQ18xMHg2X0Zvcm1hdD0zNzgxNzthLlJHQkFfQVNUQ18xMHg4X0Zvcm1hdD0zNzgxODthLlJHQkFfQVNUQ18xMHgxMF9Gb3JtYXQ9Mzc4MTk7YS5SR0JBX0FTVENfMTJ4MTBfRm9ybWF0PTM3ODIwO2EuUkdCQV9BU1RDXzEyeDEyX0Zvcm1hdD0zNzgyMTthLkxvb3BPbmNlPTIyMDA7YS5Mb29wUmVwZWF0PQoyMjAxO2EuTG9vcFBpbmdQb25nPTIyMDI7YS5JbnRlcnBvbGF0ZURpc2NyZXRlPTIzMDA7YS5JbnRlcnBvbGF0ZUxpbmVhcj0yMzAxO2EuSW50ZXJwb2xhdGVTbW9vdGg9MjMwMjthLlplcm9DdXJ2YXR1cmVFbmRpbmc9MjQwMDthLlplcm9TbG9wZUVuZGluZz0yNDAxO2EuV3JhcEFyb3VuZEVuZGluZz0yNDAyO2EuVHJpYW5nbGVzRHJhd01vZGU9MDthLlRyaWFuZ2xlU3RyaXBEcmF3TW9kZT0xO2EuVHJpYW5nbGVGYW5EcmF3TW9kZT0yO2EuTGluZWFyRW5jb2Rpbmc9M0UzO2Euc1JHQkVuY29kaW5nPTMwMDE7YS5HYW1tYUVuY29kaW5nPTMwMDc7YS5SR0JFRW5jb2Rpbmc9MzAwMjthLkxvZ0x1dkVuY29kaW5nPTMwMDM7YS5SR0JNN0VuY29kaW5nPTMwMDQ7YS5SR0JNMTZFbmNvZGluZz0zMDA1O2EuUkdCREVuY29kaW5nPTMwMDY7YS5CYXNpY0RlcHRoUGFja2luZz0zMjAwO2EuUkdCQURlcHRoUGFja2luZz0zMjAxO2EuVGFuZ2VudFNwYWNlTm9ybWFsTWFwPTA7YS5PYmplY3RTcGFjZU5vcm1hbE1hcD0KMTthLkZhY2U0PWZ1bmN0aW9uKGIsZSxoLG4sdSx3LHope2NvbnNvbGUud2FybigiVEhSRUUuRmFjZTQgaGFzIGJlZW4gcmVtb3ZlZC4gQSBUSFJFRS5GYWNlMyB3aWxsIGJlIGNyZWF0ZWQgaW5zdGVhZC4iKTtyZXR1cm4gbmV3IEwoYixlLGgsdSx3LHopfTthLkxpbmVTdHJpcD0wO2EuTGluZVBpZWNlcz0xO2EuTWVzaEZhY2VNYXRlcmlhbD1mdW5jdGlvbihiKXtjb25zb2xlLndhcm4oIlRIUkVFLk1lc2hGYWNlTWF0ZXJpYWwgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIGFuIEFycmF5IGluc3RlYWQuIik7cmV0dXJuIGJ9O2EuTXVsdGlNYXRlcmlhbD1mdW5jdGlvbihiKXt2b2lkIDA9PT1iJiYoYj1bXSk7Y29uc29sZS53YXJuKCJUSFJFRS5NdWx0aU1hdGVyaWFsIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBhbiBBcnJheSBpbnN0ZWFkLiIpO2IuaXNNdWx0aU1hdGVyaWFsPSEwO2IubWF0ZXJpYWxzPWI7Yi5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBiLnNsaWNlKCl9O3JldHVybiBifTthLlBvaW50Q2xvdWQ9CmZ1bmN0aW9uKGIsZSl7Y29uc29sZS53YXJuKCJUSFJFRS5Qb2ludENsb3VkIGhhcyBiZWVuIHJlbmFtZWQgdG8gVEhSRUUuUG9pbnRzLiIpO3JldHVybiBuZXcgUmUoYixlKX07YS5QYXJ0aWNsZT1mdW5jdGlvbihiKXtjb25zb2xlLndhcm4oIlRIUkVFLlBhcnRpY2xlIGhhcyBiZWVuIHJlbmFtZWQgdG8gVEhSRUUuU3ByaXRlLiIpO3JldHVybiBuZXcgU2YoYil9O2EuUGFydGljbGVTeXN0ZW09ZnVuY3Rpb24oYixlKXtjb25zb2xlLndhcm4oIlRIUkVFLlBhcnRpY2xlU3lzdGVtIGhhcyBiZWVuIHJlbmFtZWQgdG8gVEhSRUUuUG9pbnRzLiIpO3JldHVybiBuZXcgUmUoYixlKX07YS5Qb2ludENsb3VkTWF0ZXJpYWw9ZnVuY3Rpb24oYil7Y29uc29sZS53YXJuKCJUSFJFRS5Qb2ludENsb3VkTWF0ZXJpYWwgaGFzIGJlZW4gcmVuYW1lZCB0byBUSFJFRS5Qb2ludHNNYXRlcmlhbC4iKTtyZXR1cm4gbmV3IFNjKGIpfTthLlBhcnRpY2xlQmFzaWNNYXRlcmlhbD1mdW5jdGlvbihiKXtjb25zb2xlLndhcm4oIlRIUkVFLlBhcnRpY2xlQmFzaWNNYXRlcmlhbCBoYXMgYmVlbiByZW5hbWVkIHRvIFRIUkVFLlBvaW50c01hdGVyaWFsLiIpOwpyZXR1cm4gbmV3IFNjKGIpfTthLlBhcnRpY2xlU3lzdGVtTWF0ZXJpYWw9ZnVuY3Rpb24oYil7Y29uc29sZS53YXJuKCJUSFJFRS5QYXJ0aWNsZVN5c3RlbU1hdGVyaWFsIGhhcyBiZWVuIHJlbmFtZWQgdG8gVEhSRUUuUG9pbnRzTWF0ZXJpYWwuIik7cmV0dXJuIG5ldyBTYyhiKX07YS5WZXJ0ZXg9ZnVuY3Rpb24oYixlLGgpe2NvbnNvbGUud2FybigiVEhSRUUuVmVydGV4IGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBUSFJFRS5WZWN0b3IzIGluc3RlYWQuIik7cmV0dXJuIG5ldyBnKGIsZSxoKX07YS5EeW5hbWljQnVmZmVyQXR0cmlidXRlPWZ1bmN0aW9uKGIsZSl7Y29uc29sZS53YXJuKCJUSFJFRS5EeW5hbWljQnVmZmVyQXR0cmlidXRlIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBuZXcgVEhSRUUuQnVmZmVyQXR0cmlidXRlKCkuc2V0RHluYW1pYyggdHJ1ZSApIGluc3RlYWQuIik7cmV0dXJuKG5ldyBUKGIsZSkpLnNldER5bmFtaWMoITApfTthLkludDhBdHRyaWJ1dGU9ZnVuY3Rpb24oYiwKZSl7Y29uc29sZS53YXJuKCJUSFJFRS5JbnQ4QXR0cmlidXRlIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBuZXcgVEhSRUUuSW50OEJ1ZmZlckF0dHJpYnV0ZSgpIGluc3RlYWQuIik7cmV0dXJuIG5ldyBZKGIsZSl9O2EuVWludDhBdHRyaWJ1dGU9ZnVuY3Rpb24oYixlKXtjb25zb2xlLndhcm4oIlRIUkVFLlVpbnQ4QXR0cmlidXRlIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBuZXcgVEhSRUUuVWludDhCdWZmZXJBdHRyaWJ1dGUoKSBpbnN0ZWFkLiIpO3JldHVybiBuZXcgYWEoYixlKX07YS5VaW50OENsYW1wZWRBdHRyaWJ1dGU9ZnVuY3Rpb24oYixlKXtjb25zb2xlLndhcm4oIlRIUkVFLlVpbnQ4Q2xhbXBlZEF0dHJpYnV0ZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLlVpbnQ4Q2xhbXBlZEJ1ZmZlckF0dHJpYnV0ZSgpIGluc3RlYWQuIik7cmV0dXJuIG5ldyBoYShiLGUpfTthLkludDE2QXR0cmlidXRlPWZ1bmN0aW9uKGIsZSl7Y29uc29sZS53YXJuKCJUSFJFRS5JbnQxNkF0dHJpYnV0ZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLkludDE2QnVmZmVyQXR0cmlidXRlKCkgaW5zdGVhZC4iKTsKcmV0dXJuIG5ldyBYKGIsZSl9O2EuVWludDE2QXR0cmlidXRlPWZ1bmN0aW9uKGIsZSl7Y29uc29sZS53YXJuKCJUSFJFRS5VaW50MTZBdHRyaWJ1dGUgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG5ldyBUSFJFRS5VaW50MTZCdWZmZXJBdHRyaWJ1dGUoKSBpbnN0ZWFkLiIpO3JldHVybiBuZXcgY2EoYixlKX07YS5JbnQzMkF0dHJpYnV0ZT1mdW5jdGlvbihiLGUpe2NvbnNvbGUud2FybigiVEhSRUUuSW50MzJBdHRyaWJ1dGUgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG5ldyBUSFJFRS5JbnQzMkJ1ZmZlckF0dHJpYnV0ZSgpIGluc3RlYWQuIik7cmV0dXJuIG5ldyBlYShiLGUpfTthLlVpbnQzMkF0dHJpYnV0ZT1mdW5jdGlvbihiLGUpe2NvbnNvbGUud2FybigiVEhSRUUuVWludDMyQXR0cmlidXRlIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBuZXcgVEhSRUUuVWludDMyQnVmZmVyQXR0cmlidXRlKCkgaW5zdGVhZC4iKTtyZXR1cm4gbmV3IGthKGIsZSl9O2EuRmxvYXQzMkF0dHJpYnV0ZT1mdW5jdGlvbihiLAplKXtjb25zb2xlLndhcm4oIlRIUkVFLkZsb2F0MzJBdHRyaWJ1dGUgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG5ldyBUSFJFRS5GbG9hdDMyQnVmZmVyQXR0cmlidXRlKCkgaW5zdGVhZC4iKTtyZXR1cm4gbmV3IGJhKGIsZSl9O2EuRmxvYXQ2NEF0dHJpYnV0ZT1mdW5jdGlvbihiLGUpe2NvbnNvbGUud2FybigiVEhSRUUuRmxvYXQ2NEF0dHJpYnV0ZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLkZsb2F0NjRCdWZmZXJBdHRyaWJ1dGUoKSBpbnN0ZWFkLiIpO3JldHVybiBuZXcgbGEoYixlKX07YS5DbG9zZWRTcGxpbmVDdXJ2ZTM9Umw7YS5TcGxpbmVDdXJ2ZTM9U2w7YS5TcGxpbmU9Y2o7YS5BeGlzSGVscGVyPWZ1bmN0aW9uKGIpe2NvbnNvbGUud2FybigiVEhSRUUuQXhpc0hlbHBlciBoYXMgYmVlbiByZW5hbWVkIHRvIFRIUkVFLkF4ZXNIZWxwZXIuIik7cmV0dXJuIG5ldyBFZyhiKX07YS5Cb3VuZGluZ0JveEhlbHBlcj1mdW5jdGlvbihiLGUpe2NvbnNvbGUud2FybigiVEhSRUUuQm91bmRpbmdCb3hIZWxwZXIgaGFzIGJlZW4gZGVwcmVjYXRlZC4gQ3JlYXRpbmcgYSBUSFJFRS5Cb3hIZWxwZXIgaW5zdGVhZC4iKTsKcmV0dXJuIG5ldyBCZChiLGUpfTthLkVkZ2VzSGVscGVyPWZ1bmN0aW9uKGIsZSl7Y29uc29sZS53YXJuKCJUSFJFRS5FZGdlc0hlbHBlciBoYXMgYmVlbiByZW1vdmVkLiBVc2UgVEhSRUUuRWRnZXNHZW9tZXRyeSBpbnN0ZWFkLiIpO3JldHVybiBuZXcgUGIobmV3IGNmKGIuZ2VvbWV0cnkpLG5ldyBMYih7Y29sb3I6dm9pZCAwIT09ZT9lOjE2Nzc3MjE1fSkpfTthLldpcmVmcmFtZUhlbHBlcj1mdW5jdGlvbihiLGUpe2NvbnNvbGUud2FybigiVEhSRUUuV2lyZWZyYW1lSGVscGVyIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBUSFJFRS5XaXJlZnJhbWVHZW9tZXRyeSBpbnN0ZWFkLiIpO3JldHVybiBuZXcgUGIobmV3IFRlKGIuZ2VvbWV0cnkpLG5ldyBMYih7Y29sb3I6dm9pZCAwIT09ZT9lOjE2Nzc3MjE1fSkpfTthLlhIUkxvYWRlcj1mdW5jdGlvbihiKXtjb25zb2xlLndhcm4oIlRIUkVFLlhIUkxvYWRlciBoYXMgYmVlbiByZW5hbWVkIHRvIFRIUkVFLkZpbGVMb2FkZXIuIik7cmV0dXJuIG5ldyBVYyhiKX07CmEuQmluYXJ5VGV4dHVyZUxvYWRlcj1mdW5jdGlvbihiKXtjb25zb2xlLndhcm4oIlRIUkVFLkJpbmFyeVRleHR1cmVMb2FkZXIgaGFzIGJlZW4gcmVuYW1lZCB0byBUSFJFRS5EYXRhVGV4dHVyZUxvYWRlci4iKTtyZXR1cm4gbmV3IEVpKGIpfTthLkdlb21ldHJ5VXRpbHM9e21lcmdlOmZ1bmN0aW9uKGIsZSxoKXtjb25zb2xlLndhcm4oIlRIUkVFLkdlb21ldHJ5VXRpbHM6IC5tZXJnZSgpIGhhcyBiZWVuIG1vdmVkIHRvIEdlb21ldHJ5LiBVc2UgZ2VvbWV0cnkubWVyZ2UoIGdlb21ldHJ5MiwgbWF0cml4LCBtYXRlcmlhbEluZGV4T2Zmc2V0ICkgaW5zdGVhZC4iKTtpZihlLmlzTWVzaCl7ZS5tYXRyaXhBdXRvVXBkYXRlJiZlLnVwZGF0ZU1hdHJpeCgpO3ZhciBuPWUubWF0cml4O2U9ZS5nZW9tZXRyeX1iLm1lcmdlKGUsbixoKX0sY2VudGVyOmZ1bmN0aW9uKGIpe2NvbnNvbGUud2FybigiVEhSRUUuR2VvbWV0cnlVdGlsczogLmNlbnRlcigpIGhhcyBiZWVuIG1vdmVkIHRvIEdlb21ldHJ5LiBVc2UgZ2VvbWV0cnkuY2VudGVyKCkgaW5zdGVhZC4iKTsKcmV0dXJuIGIuY2VudGVyKCl9fTthLlByb2plY3Rvcj1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlByb2plY3RvciBoYXMgYmVlbiBtb3ZlZCB0byAvZXhhbXBsZXMvanMvcmVuZGVyZXJzL1Byb2plY3Rvci5qcy4iKTt0aGlzLnByb2plY3RWZWN0b3I9ZnVuY3Rpb24oYixlKXtjb25zb2xlLndhcm4oIlRIUkVFLlByb2plY3RvcjogLnByb2plY3RWZWN0b3IoKSBpcyBub3cgdmVjdG9yLnByb2plY3QoKS4iKTtiLnByb2plY3QoZSl9O3RoaXMudW5wcm9qZWN0VmVjdG9yPWZ1bmN0aW9uKGIsZSl7Y29uc29sZS53YXJuKCJUSFJFRS5Qcm9qZWN0b3I6IC51bnByb2plY3RWZWN0b3IoKSBpcyBub3cgdmVjdG9yLnVucHJvamVjdCgpLiIpO2IudW5wcm9qZWN0KGUpfTt0aGlzLnBpY2tpbmdSYXk9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9qZWN0b3I6IC5waWNraW5nUmF5KCkgaXMgbm93IHJheWNhc3Rlci5zZXRGcm9tQ2FtZXJhKCkuIil9fTthLkNhbnZhc1JlbmRlcmVyPQpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkNhbnZhc1JlbmRlcmVyIGhhcyBiZWVuIHJlbW92ZWQiKX07YS5KU09OTG9hZGVyPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuSlNPTkxvYWRlciBoYXMgYmVlbiByZW1vdmVkLiIpfTthLlNjZW5lVXRpbHM9e2NyZWF0ZU11bHRpTWF0ZXJpYWxPYmplY3Q6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5TY2VuZVV0aWxzIGhhcyBiZWVuIG1vdmVkIHRvIC9leGFtcGxlcy9qcy91dGlscy9TY2VuZVV0aWxzLmpzIil9LGRldGFjaDpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlNjZW5lVXRpbHMgaGFzIGJlZW4gbW92ZWQgdG8gL2V4YW1wbGVzL2pzL3V0aWxzL1NjZW5lVXRpbHMuanMiKX0sYXR0YWNoOmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuU2NlbmVVdGlscyBoYXMgYmVlbiBtb3ZlZCB0byAvZXhhbXBsZXMvanMvdXRpbHMvU2NlbmVVdGlscy5qcyIpfX07YS5MZW5zRmxhcmU9CmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTGVuc0ZsYXJlIGhhcyBiZWVuIG1vdmVkIHRvIC9leGFtcGxlcy9qcy9vYmplY3RzL0xlbnNmbGFyZS5qcyIpfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoYSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9KTsKPC9zY3JpcHQ+CjxzY3JpcHQ+Ly9+fldFQlBBVEh+fi90Zi1pbXBvcnRzL09yYml0Q29udHJvbHMuanMKVEhSRUUuT3JiaXRDb250cm9scz1mdW5jdGlvbihhLGMpe2Z1bmN0aW9uIGQoKXtyZXR1cm4gMipNYXRoLlBJLzYwLzYwKlguYXV0b1JvdGF0ZVNwZWVkfWZ1bmN0aW9uIGYoKXtyZXR1cm4gTWF0aC5wb3coLjk1LFguem9vbVNwZWVkKX1mdW5jdGlvbiBnKEFhKXt4YS50aGV0YS09QWF9ZnVuY3Rpb24gbChBYSl7eGEucGhpLT1BYX1mdW5jdGlvbiBrKEFhKXtYLm9iamVjdC5pc1BlcnNwZWN0aXZlQ2FtZXJhP3phLz1BYTpYLm9iamVjdC5pc09ydGhvZ3JhcGhpY0NhbWVyYT8oWC5vYmplY3Quem9vbT1NYXRoLm1heChYLm1pblpvb20sTWF0aC5taW4oWC5tYXhab29tLFgub2JqZWN0Lnpvb20qQWEpKSxYLm9iamVjdC51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCksU2E9ITApOihjb25zb2xlLndhcm4oIldBUk5JTkc6IE9yYml0Q29udHJvbHMuanMgZW5jb3VudGVyZWQgYW4gdW5rbm93biBjYW1lcmEgdHlwZSAtIGRvbGx5L3pvb20gZGlzYWJsZWQuIiksWC5lbmFibGVab29tPSExKX1mdW5jdGlvbiBtKEFhKXtYLm9iamVjdC5pc1BlcnNwZWN0aXZlQ2FtZXJhPwp6YSo9QWE6WC5vYmplY3QuaXNPcnRob2dyYXBoaWNDYW1lcmE/KFgub2JqZWN0Lnpvb209TWF0aC5tYXgoWC5taW5ab29tLE1hdGgubWluKFgubWF4Wm9vbSxYLm9iamVjdC56b29tL0FhKSksWC5vYmplY3QudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpLFNhPSEwKTooY29uc29sZS53YXJuKCJXQVJOSU5HOiBPcmJpdENvbnRyb2xzLmpzIGVuY291bnRlcmVkIGFuIHVua25vd24gY2FtZXJhIHR5cGUgLSBkb2xseS96b29tIGRpc2FibGVkLiIpLFguZW5hYmxlWm9vbT0hMSl9ZnVuY3Rpb24gcChBYSl7RWEuc2V0KEFhLmNsaWVudFgsQWEuY2xpZW50WSl9ZnVuY3Rpb24gcShBYSl7dGIuc2V0KEFhLmNsaWVudFgsQWEuY2xpZW50WSl9ZnVuY3Rpb24gcihBYSl7eGIuc2V0KEFhLmNsaWVudFgsQWEuY2xpZW50WSl9ZnVuY3Rpb24gdChBYSl7R2Euc2V0KEFhLmNsaWVudFgsQWEuY2xpZW50WSk7ZGIuc3ViVmVjdG9ycyhHYSxFYSkubXVsdGlwbHlTY2FsYXIoWC5yb3RhdGVTcGVlZCk7QWE9ClguZG9tRWxlbWVudD09PWRvY3VtZW50P1guZG9tRWxlbWVudC5ib2R5OlguZG9tRWxlbWVudDtnKDIqTWF0aC5QSSpkYi54L0FhLmNsaWVudEhlaWdodCk7bCgyKk1hdGguUEkqZGIueS9BYS5jbGllbnRIZWlnaHQpO0VhLmNvcHkoR2EpO1gudXBkYXRlKCl9ZnVuY3Rpb24gdihBYSl7Q2Muc2V0KEFhLmNsaWVudFgsQWEuY2xpZW50WSk7WmIuc3ViVmVjdG9ycyhDYyx0Yik7MDxaYi55P2soZigpKTowPlpiLnkmJm0oZigpKTt0Yi5jb3B5KENjKTtYLnVwZGF0ZSgpfWZ1bmN0aW9uIEEoQWEpe0NiLnNldChBYS5jbGllbnRYLEFhLmNsaWVudFkpO3liLnN1YlZlY3RvcnMoQ2IseGIpLm11bHRpcGx5U2NhbGFyKFgucGFuU3BlZWQpO2ZjKHliLngseWIueSk7eGIuY29weShDYik7WC51cGRhdGUoKX1mdW5jdGlvbiB5KCl7fWZ1bmN0aW9uIHgoQWEpezA+QWEuZGVsdGFZP20oZigpKTowPEFhLmRlbHRhWSYmayhmKCkpO1gudXBkYXRlKCl9ZnVuY3Rpb24gQyhBYSl7dmFyIE1iPSExO3N3aXRjaChBYS5rZXlDb2RlKXtjYXNlIFgua2V5cy5VUDpmYygwLApYLmtleVBhblNwZWVkKTtNYj0hMDticmVhaztjYXNlIFgua2V5cy5CT1RUT006ZmMoMCwtWC5rZXlQYW5TcGVlZCk7TWI9ITA7YnJlYWs7Y2FzZSBYLmtleXMuTEVGVDpmYyhYLmtleVBhblNwZWVkLDApO01iPSEwO2JyZWFrO2Nhc2UgWC5rZXlzLlJJR0hUOmZjKC1YLmtleVBhblNwZWVkLDApLE1iPSEwfU1iJiYoQWEucHJldmVudERlZmF1bHQoKSxYLnVwZGF0ZSgpKX1mdW5jdGlvbiBGKEFhKXtFYS5zZXQoQWEudG91Y2hlc1swXS5wYWdlWCxBYS50b3VjaGVzWzBdLnBhZ2VZKX1mdW5jdGlvbiBEKEFhKXtpZihYLmVuYWJsZVpvb20pe3ZhciBNYj1BYS50b3VjaGVzWzBdLnBhZ2VYLUFhLnRvdWNoZXNbMV0ucGFnZVgsamM9QWEudG91Y2hlc1swXS5wYWdlWS1BYS50b3VjaGVzWzFdLnBhZ2VZO3RiLnNldCgwLE1hdGguc3FydChNYipNYitqYypqYykpfVguZW5hYmxlUGFuJiZ4Yi5zZXQoLjUqKEFhLnRvdWNoZXNbMF0ucGFnZVgrQWEudG91Y2hlc1sxXS5wYWdlWCksLjUqKEFhLnRvdWNoZXNbMF0ucGFnZVkrCkFhLnRvdWNoZXNbMV0ucGFnZVkpKX1mdW5jdGlvbiBCKEFhKXtHYS5zZXQoQWEudG91Y2hlc1swXS5wYWdlWCxBYS50b3VjaGVzWzBdLnBhZ2VZKTtkYi5zdWJWZWN0b3JzKEdhLEVhKS5tdWx0aXBseVNjYWxhcihYLnJvdGF0ZVNwZWVkKTtBYT1YLmRvbUVsZW1lbnQ9PT1kb2N1bWVudD9YLmRvbUVsZW1lbnQuYm9keTpYLmRvbUVsZW1lbnQ7ZygyKk1hdGguUEkqZGIueC9BYS5jbGllbnRIZWlnaHQpO2woMipNYXRoLlBJKmRiLnkvQWEuY2xpZW50SGVpZ2h0KTtFYS5jb3B5KEdhKTtYLnVwZGF0ZSgpfWZ1bmN0aW9uIEcoQWEpe2lmKFguZW5hYmxlWm9vbSl7dmFyIE1iPUFhLnRvdWNoZXNbMF0ucGFnZVgtQWEudG91Y2hlc1sxXS5wYWdlWCxqYz1BYS50b3VjaGVzWzBdLnBhZ2VZLUFhLnRvdWNoZXNbMV0ucGFnZVk7Q2Muc2V0KDAsTWF0aC5zcXJ0KE1iKk1iK2pjKmpjKSk7WmIuc2V0KDAsTWF0aC5wb3coQ2MueS90Yi55LFguem9vbVNwZWVkKSk7ayhaYi55KTt0Yi5jb3B5KENjKX1YLmVuYWJsZVBhbiYmCihDYi5zZXQoLjUqKEFhLnRvdWNoZXNbMF0ucGFnZVgrQWEudG91Y2hlc1sxXS5wYWdlWCksLjUqKEFhLnRvdWNoZXNbMF0ucGFnZVkrQWEudG91Y2hlc1sxXS5wYWdlWSkpLHliLnN1YlZlY3RvcnMoQ2IseGIpLm11bHRpcGx5U2NhbGFyKFgucGFuU3BlZWQpLGZjKHliLngseWIueSkseGIuY29weShDYikpO1gudXBkYXRlKCl9ZnVuY3Rpb24gSygpe31mdW5jdGlvbiBMKEFhKXtpZighMSE9PVguZW5hYmxlZCl7QWEucHJldmVudERlZmF1bHQoKTtYLmRvbUVsZW1lbnQuZm9jdXM/WC5kb21FbGVtZW50LmZvY3VzKCk6d2luZG93LmZvY3VzKCk7c3dpdGNoKEFhLmJ1dHRvbil7Y2FzZSBYLm1vdXNlQnV0dG9ucy5MRUZUOmlmKEFhLmN0cmxLZXl8fEFhLm1ldGFLZXl8fEFhLnNoaWZ0S2V5KXtpZighMT09PVguZW5hYmxlUGFuKXJldHVybjtyKEFhKTtsYT1iYS5QQU59ZWxzZXtpZighMT09PVguZW5hYmxlUm90YXRlKXJldHVybjtwKEFhKTtsYT1iYS5ST1RBVEV9YnJlYWs7Y2FzZSBYLm1vdXNlQnV0dG9ucy5NSURETEU6aWYoITE9PT0KWC5lbmFibGVab29tKXJldHVybjtxKEFhKTtsYT1iYS5ET0xMWTticmVhaztjYXNlIFgubW91c2VCdXR0b25zLlJJR0hUOmlmKCExPT09WC5lbmFibGVQYW4pcmV0dXJuO3IoQWEpO2xhPWJhLlBBTn1sYSE9PWJhLk5PTkUmJihkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLEosITEpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLFAsITEpLFguZGlzcGF0Y2hFdmVudChlYSkpfX1mdW5jdGlvbiBKKEFhKXtpZighMSE9PVguZW5hYmxlZClzd2l0Y2goQWEucHJldmVudERlZmF1bHQoKSxsYSl7Y2FzZSBiYS5ST1RBVEU6aWYoITE9PT1YLmVuYWJsZVJvdGF0ZSlicmVhazt0KEFhKTticmVhaztjYXNlIGJhLkRPTExZOmlmKCExPT09WC5lbmFibGVab29tKWJyZWFrO3YoQWEpO2JyZWFrO2Nhc2UgYmEuUEFOOiExIT09WC5lbmFibGVQYW4mJkEoQWEpfX1mdW5jdGlvbiBQKEFhKXshMSE9PVguZW5hYmxlZCYmKHkoQWEpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsCkosITEpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLFAsITEpLFguZGlzcGF0Y2hFdmVudChrYSksbGE9YmEuTk9ORSl9ZnVuY3Rpb24gUyhBYSl7ITE9PT1YLmVuYWJsZWR8fCExPT09WC5lbmFibGVab29tfHxsYSE9PWJhLk5PTkUmJmxhIT09YmEuUk9UQVRFfHwoQWEucHJldmVudERlZmF1bHQoKSxBYS5zdG9wUHJvcGFnYXRpb24oKSxYLmRpc3BhdGNoRXZlbnQoZWEpLHgoQWEpLFguZGlzcGF0Y2hFdmVudChrYSkpfWZ1bmN0aW9uIE4oQWEpeyExIT09WC5lbmFibGVkJiYhMSE9PVguZW5hYmxlS2V5cyYmITEhPT1YLmVuYWJsZVBhbiYmQyhBYSl9ZnVuY3Rpb24gVChBYSl7aWYoITEhPT1YLmVuYWJsZWQpe0FhLnByZXZlbnREZWZhdWx0KCk7c3dpdGNoKEFhLnRvdWNoZXMubGVuZ3RoKXtjYXNlIDE6aWYoITE9PT1YLmVuYWJsZVJvdGF0ZSlyZXR1cm47RihBYSk7bGE9YmEuVE9VQ0hfUk9UQVRFO2JyZWFrO2Nhc2UgMjppZighMT09PVguZW5hYmxlWm9vbSYmCiExPT09WC5lbmFibGVQYW4pcmV0dXJuO0QoQWEpO2xhPWJhLlRPVUNIX0RPTExZX1BBTjticmVhaztkZWZhdWx0OmxhPWJhLk5PTkV9bGEhPT1iYS5OT05FJiZYLmRpc3BhdGNoRXZlbnQoZWEpfX1mdW5jdGlvbiBZKEFhKXtpZighMSE9PVguZW5hYmxlZClzd2l0Y2goQWEucHJldmVudERlZmF1bHQoKSxBYS5zdG9wUHJvcGFnYXRpb24oKSxBYS50b3VjaGVzLmxlbmd0aCl7Y2FzZSAxOmlmKCExPT09WC5lbmFibGVSb3RhdGUpYnJlYWs7aWYobGEhPT1iYS5UT1VDSF9ST1RBVEUpYnJlYWs7QihBYSk7YnJlYWs7Y2FzZSAyOmlmKCExPT09WC5lbmFibGVab29tJiYhMT09PVguZW5hYmxlUGFuKWJyZWFrO2lmKGxhIT09YmEuVE9VQ0hfRE9MTFlfUEFOKWJyZWFrO0coQWEpO2JyZWFrO2RlZmF1bHQ6bGE9YmEuTk9ORX19ZnVuY3Rpb24gYWEoQWEpeyExIT09WC5lbmFibGVkJiYoSyhBYSksWC5kaXNwYXRjaEV2ZW50KGthKSxsYT1iYS5OT05FKX1mdW5jdGlvbiBoYShBYSl7ITEhPT1YLmVuYWJsZWQmJgpBYS5wcmV2ZW50RGVmYXVsdCgpfXRoaXMub2JqZWN0PWE7dGhpcy5kb21FbGVtZW50PXZvaWQgMCE9PWM/Yzpkb2N1bWVudDt0aGlzLmVuYWJsZWQ9ITA7dGhpcy50YXJnZXQ9bmV3IFRIUkVFLlZlY3RvcjM7dGhpcy5taW5EaXN0YW5jZT0wO3RoaXMubWF4RGlzdGFuY2U9SW5maW5pdHk7dGhpcy5taW5ab29tPTA7dGhpcy5tYXhab29tPUluZmluaXR5O3RoaXMubWluUG9sYXJBbmdsZT0wO3RoaXMubWF4UG9sYXJBbmdsZT1NYXRoLlBJO3RoaXMubWluQXppbXV0aEFuZ2xlPS1JbmZpbml0eTt0aGlzLm1heEF6aW11dGhBbmdsZT1JbmZpbml0eTt0aGlzLmVuYWJsZURhbXBpbmc9ITE7dGhpcy5kYW1waW5nRmFjdG9yPS4yNTt0aGlzLmVuYWJsZVpvb209ITA7dGhpcy56b29tU3BlZWQ9MTt0aGlzLmVuYWJsZVJvdGF0ZT0hMDt0aGlzLnJvdGF0ZVNwZWVkPTE7dGhpcy5lbmFibGVQYW49ITA7dGhpcy5wYW5TcGVlZD0xO3RoaXMuc2NyZWVuU3BhY2VQYW5uaW5nPSExO3RoaXMua2V5UGFuU3BlZWQ9Cjc7dGhpcy5hdXRvUm90YXRlPSExO3RoaXMuYXV0b1JvdGF0ZVNwZWVkPTI7dGhpcy5lbmFibGVLZXlzPSEwO3RoaXMua2V5cz17TEVGVDozNyxVUDozOCxSSUdIVDozOSxCT1RUT006NDB9O3RoaXMubW91c2VCdXR0b25zPXtMRUZUOlRIUkVFLk1PVVNFLkxFRlQsTUlERExFOlRIUkVFLk1PVVNFLk1JRERMRSxSSUdIVDpUSFJFRS5NT1VTRS5SSUdIVH07dGhpcy50YXJnZXQwPXRoaXMudGFyZ2V0LmNsb25lKCk7dGhpcy5wb3NpdGlvbjA9dGhpcy5vYmplY3QucG9zaXRpb24uY2xvbmUoKTt0aGlzLnpvb20wPXRoaXMub2JqZWN0Lnpvb207dGhpcy5nZXRQb2xhckFuZ2xlPWZ1bmN0aW9uKCl7cmV0dXJuIENhLnBoaX07dGhpcy5nZXRBemltdXRoYWxBbmdsZT1mdW5jdGlvbigpe3JldHVybiBDYS50aGV0YX07dGhpcy5zYXZlU3RhdGU9ZnVuY3Rpb24oKXtYLnRhcmdldDAuY29weShYLnRhcmdldCk7WC5wb3NpdGlvbjAuY29weShYLm9iamVjdC5wb3NpdGlvbik7WC56b29tMD1YLm9iamVjdC56b29tfTsKdGhpcy5yZXNldD1mdW5jdGlvbigpe1gudGFyZ2V0LmNvcHkoWC50YXJnZXQwKTtYLm9iamVjdC5wb3NpdGlvbi5jb3B5KFgucG9zaXRpb24wKTtYLm9iamVjdC56b29tPVguem9vbTA7WC5vYmplY3QudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpO1guZGlzcGF0Y2hFdmVudChjYSk7WC51cGRhdGUoKTtsYT1iYS5OT05FfTt0aGlzLnVwZGF0ZT1mdW5jdGlvbigpe3ZhciBBYT1uZXcgVEhSRUUuVmVjdG9yMyxNYj0obmV3IFRIUkVFLlF1YXRlcm5pb24pLnNldEZyb21Vbml0VmVjdG9ycyhhLnVwLG5ldyBUSFJFRS5WZWN0b3IzKDAsMSwwKSksamM9TWIuY2xvbmUoKS5pbnZlcnNlKCksdGQ9bmV3IFRIUkVFLlZlY3RvcjMsTmQ9bmV3IFRIUkVFLlF1YXRlcm5pb247cmV0dXJuIGZ1bmN0aW9uKCl7dmFyICRnPVgub2JqZWN0LnBvc2l0aW9uO0FhLmNvcHkoJGcpLnN1YihYLnRhcmdldCk7QWEuYXBwbHlRdWF0ZXJuaW9uKE1iKTtDYS5zZXRGcm9tVmVjdG9yMyhBYSk7WC5hdXRvUm90YXRlJiYKbGE9PT1iYS5OT05FJiZnKGQoKSk7Q2EudGhldGErPXhhLnRoZXRhO0NhLnBoaSs9eGEucGhpO0NhLnRoZXRhPU1hdGgubWF4KFgubWluQXppbXV0aEFuZ2xlLE1hdGgubWluKFgubWF4QXppbXV0aEFuZ2xlLENhLnRoZXRhKSk7Q2EucGhpPU1hdGgubWF4KFgubWluUG9sYXJBbmdsZSxNYXRoLm1pbihYLm1heFBvbGFyQW5nbGUsQ2EucGhpKSk7Q2EubWFrZVNhZmUoKTtDYS5yYWRpdXMqPXphO0NhLnJhZGl1cz1NYXRoLm1heChYLm1pbkRpc3RhbmNlLE1hdGgubWluKFgubWF4RGlzdGFuY2UsQ2EucmFkaXVzKSk7WC50YXJnZXQuYWRkKEZhKTtBYS5zZXRGcm9tU3BoZXJpY2FsKENhKTtBYS5hcHBseVF1YXRlcm5pb24oamMpOyRnLmNvcHkoWC50YXJnZXQpLmFkZChBYSk7WC5vYmplY3QubG9va0F0KFgudGFyZ2V0KTshMD09PVguZW5hYmxlRGFtcGluZz8oeGEudGhldGEqPTEtWC5kYW1waW5nRmFjdG9yLHhhLnBoaSo9MS1YLmRhbXBpbmdGYWN0b3IsRmEubXVsdGlwbHlTY2FsYXIoMS0KWC5kYW1waW5nRmFjdG9yKSk6KHhhLnNldCgwLDAsMCksRmEuc2V0KDAsMCwwKSk7emE9MTtyZXR1cm4gU2F8fHRkLmRpc3RhbmNlVG9TcXVhcmVkKFgub2JqZWN0LnBvc2l0aW9uKT53YXx8OCooMS1OZC5kb3QoWC5vYmplY3QucXVhdGVybmlvbikpPndhPyhYLmRpc3BhdGNoRXZlbnQoY2EpLHRkLmNvcHkoWC5vYmplY3QucG9zaXRpb24pLE5kLmNvcHkoWC5vYmplY3QucXVhdGVybmlvbiksU2E9ITEsITApOiExfX0oKTt0aGlzLmRpc3Bvc2U9ZnVuY3Rpb24oKXtYLmRvbUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY29udGV4dG1lbnUiLGhhLCExKTtYLmRvbUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIixMLCExKTtYLmRvbUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigid2hlZWwiLFMsITEpO1guZG9tRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJ0b3VjaHN0YXJ0IixULCExKTtYLmRvbUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigidG91Y2hlbmQiLAphYSwhMSk7WC5kb21FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNobW92ZSIsWSwhMSk7ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIixKLCExKTtkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZXVwIixQLCExKTt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsTiwhMSl9O3ZhciBYPXRoaXMsY2E9e3R5cGU6ImNoYW5nZSJ9LGVhPXt0eXBlOiJzdGFydCJ9LGthPXt0eXBlOiJlbmQifSxiYT17Tk9ORTotMSxST1RBVEU6MCxET0xMWToxLFBBTjoyLFRPVUNIX1JPVEFURTozLFRPVUNIX0RPTExZX1BBTjo0fSxsYT1iYS5OT05FLHdhPTFFLTYsQ2E9bmV3IFRIUkVFLlNwaGVyaWNhbCx4YT1uZXcgVEhSRUUuU3BoZXJpY2FsLHphPTEsRmE9bmV3IFRIUkVFLlZlY3RvcjMsU2E9ITEsRWE9bmV3IFRIUkVFLlZlY3RvcjIsR2E9bmV3IFRIUkVFLlZlY3RvcjIsZGI9bmV3IFRIUkVFLlZlY3RvcjIseGI9bmV3IFRIUkVFLlZlY3RvcjIsCkNiPW5ldyBUSFJFRS5WZWN0b3IyLHliPW5ldyBUSFJFRS5WZWN0b3IyLHRiPW5ldyBUSFJFRS5WZWN0b3IyLENjPW5ldyBUSFJFRS5WZWN0b3IyLFpiPW5ldyBUSFJFRS5WZWN0b3IyLGhkPWZ1bmN0aW9uKCl7dmFyIEFhPW5ldyBUSFJFRS5WZWN0b3IzO3JldHVybiBmdW5jdGlvbihNYixqYyl7QWEuc2V0RnJvbU1hdHJpeENvbHVtbihqYywwKTtBYS5tdWx0aXBseVNjYWxhcigtTWIpO0ZhLmFkZChBYSl9fSgpLCRiPWZ1bmN0aW9uKCl7dmFyIEFhPW5ldyBUSFJFRS5WZWN0b3IzO3JldHVybiBmdW5jdGlvbihNYixqYyl7ITA9PT1YLnNjcmVlblNwYWNlUGFubmluZz9BYS5zZXRGcm9tTWF0cml4Q29sdW1uKGpjLDEpOihBYS5zZXRGcm9tTWF0cml4Q29sdW1uKGpjLDApLEFhLmNyb3NzVmVjdG9ycyhYLm9iamVjdC51cCxBYSkpO0FhLm11bHRpcGx5U2NhbGFyKE1iKTtGYS5hZGQoQWEpfX0oKSxmYz1mdW5jdGlvbigpe3ZhciBBYT1uZXcgVEhSRUUuVmVjdG9yMztyZXR1cm4gZnVuY3Rpb24oTWIsCmpjKXt2YXIgdGQ9WC5kb21FbGVtZW50PT09ZG9jdW1lbnQ/WC5kb21FbGVtZW50LmJvZHk6WC5kb21FbGVtZW50O2lmKFgub2JqZWN0LmlzUGVyc3BlY3RpdmVDYW1lcmEpe0FhLmNvcHkoWC5vYmplY3QucG9zaXRpb24pLnN1YihYLnRhcmdldCk7dmFyIE5kPUFhLmxlbmd0aCgpO05kKj1NYXRoLnRhbihYLm9iamVjdC5mb3YvMipNYXRoLlBJLzE4MCk7aGQoMipNYipOZC90ZC5jbGllbnRIZWlnaHQsWC5vYmplY3QubWF0cml4KTskYigyKmpjKk5kL3RkLmNsaWVudEhlaWdodCxYLm9iamVjdC5tYXRyaXgpfWVsc2UgWC5vYmplY3QuaXNPcnRob2dyYXBoaWNDYW1lcmE/KGhkKE1iKihYLm9iamVjdC5yaWdodC1YLm9iamVjdC5sZWZ0KS9YLm9iamVjdC56b29tL3RkLmNsaWVudFdpZHRoLFgub2JqZWN0Lm1hdHJpeCksJGIoamMqKFgub2JqZWN0LnRvcC1YLm9iamVjdC5ib3R0b20pL1gub2JqZWN0Lnpvb20vdGQuY2xpZW50SGVpZ2h0LFgub2JqZWN0Lm1hdHJpeCkpOihjb25zb2xlLndhcm4oIldBUk5JTkc6IE9yYml0Q29udHJvbHMuanMgZW5jb3VudGVyZWQgYW4gdW5rbm93biBjYW1lcmEgdHlwZSAtIHBhbiBkaXNhYmxlZC4iKSwKWC5lbmFibGVQYW49ITEpfX0oKTtYLmRvbUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY29udGV4dG1lbnUiLGhhLCExKTtYLmRvbUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIixMLCExKTtYLmRvbUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigid2hlZWwiLFMsITEpO1guZG9tRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaHN0YXJ0IixULCExKTtYLmRvbUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hlbmQiLGFhLCExKTtYLmRvbUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2htb3ZlIixZLCExKTt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsTiwhMSk7dGhpcy51cGRhdGUoKX07VEhSRUUuT3JiaXRDb250cm9scy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShUSFJFRS5FdmVudERpc3BhdGNoZXIucHJvdG90eXBlKTtUSFJFRS5PcmJpdENvbnRyb2xzLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1USFJFRS5PcmJpdENvbnRyb2xzOwpPYmplY3QuZGVmaW5lUHJvcGVydGllcyhUSFJFRS5PcmJpdENvbnRyb2xzLnByb3RvdHlwZSx7Y2VudGVyOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk9yYml0Q29udHJvbHM6IC5jZW50ZXIgaGFzIGJlZW4gcmVuYW1lZCB0byAudGFyZ2V0Iik7cmV0dXJuIHRoaXMudGFyZ2V0fX0sbm9ab29tOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk9yYml0Q29udHJvbHM6IC5ub1pvb20gaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIC5lbmFibGVab29tIGluc3RlYWQuIik7cmV0dXJuIXRoaXMuZW5hYmxlWm9vbX0sc2V0OmZ1bmN0aW9uKGEpe2NvbnNvbGUud2FybigiVEhSRUUuT3JiaXRDb250cm9sczogLm5vWm9vbSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLmVuYWJsZVpvb20gaW5zdGVhZC4iKTt0aGlzLmVuYWJsZVpvb209IWF9fSxub1JvdGF0ZTp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5PcmJpdENvbnRyb2xzOiAubm9Sb3RhdGUgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIC5lbmFibGVSb3RhdGUgaW5zdGVhZC4iKTsKcmV0dXJuIXRoaXMuZW5hYmxlUm90YXRlfSxzZXQ6ZnVuY3Rpb24oYSl7Y29uc29sZS53YXJuKCJUSFJFRS5PcmJpdENvbnRyb2xzOiAubm9Sb3RhdGUgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIC5lbmFibGVSb3RhdGUgaW5zdGVhZC4iKTt0aGlzLmVuYWJsZVJvdGF0ZT0hYX19LG5vUGFuOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk9yYml0Q29udHJvbHM6IC5ub1BhbiBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLmVuYWJsZVBhbiBpbnN0ZWFkLiIpO3JldHVybiF0aGlzLmVuYWJsZVBhbn0sc2V0OmZ1bmN0aW9uKGEpe2NvbnNvbGUud2FybigiVEhSRUUuT3JiaXRDb250cm9sczogLm5vUGFuIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSAuZW5hYmxlUGFuIGluc3RlYWQuIik7dGhpcy5lbmFibGVQYW49IWF9fSxub0tleXM6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuT3JiaXRDb250cm9sczogLm5vS2V5cyBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLmVuYWJsZUtleXMgaW5zdGVhZC4iKTsKcmV0dXJuIXRoaXMuZW5hYmxlS2V5c30sc2V0OmZ1bmN0aW9uKGEpe2NvbnNvbGUud2FybigiVEhSRUUuT3JiaXRDb250cm9sczogLm5vS2V5cyBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLmVuYWJsZUtleXMgaW5zdGVhZC4iKTt0aGlzLmVuYWJsZUtleXM9IWF9fSxzdGF0aWNNb3Zpbmc6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuT3JiaXRDb250cm9sczogLnN0YXRpY01vdmluZyBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLmVuYWJsZURhbXBpbmcgaW5zdGVhZC4iKTtyZXR1cm4hdGhpcy5lbmFibGVEYW1waW5nfSxzZXQ6ZnVuY3Rpb24oYSl7Y29uc29sZS53YXJuKCJUSFJFRS5PcmJpdENvbnRyb2xzOiAuc3RhdGljTW92aW5nIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSAuZW5hYmxlRGFtcGluZyBpbnN0ZWFkLiIpO3RoaXMuZW5hYmxlRGFtcGluZz0hYX19LGR5bmFtaWNEYW1waW5nRmFjdG9yOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk9yYml0Q29udHJvbHM6IC5keW5hbWljRGFtcGluZ0ZhY3RvciBoYXMgYmVlbiByZW5hbWVkLiBVc2UgLmRhbXBpbmdGYWN0b3IgaW5zdGVhZC4iKTsKcmV0dXJuIHRoaXMuZGFtcGluZ0ZhY3Rvcn0sc2V0OmZ1bmN0aW9uKGEpe2NvbnNvbGUud2FybigiVEhSRUUuT3JiaXRDb250cm9sczogLmR5bmFtaWNEYW1waW5nRmFjdG9yIGhhcyBiZWVuIHJlbmFtZWQuIFVzZSAuZGFtcGluZ0ZhY3RvciBpbnN0ZWFkLiIpO3RoaXMuZGFtcGluZ0ZhY3Rvcj1hfX19KTsKPC9zY3JpcHQ+Cgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vZmFjZXRzLWRpdmUvbGliL3Nwcml0ZS1hdGxhcy5qcwpjbGFzcyBYbSBleHRlbmRzIFRIUkVFLlRleHR1cmV7Y29uc3RydWN0b3IoYSxjLGQpe2NvbnN0IGY9TWF0aC5jZWlsKE1hdGguc3FydChhKSksZz1NYXRoLmNlaWwoYS9mKSxsPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpO2wud2lkdGg9YypmO2wuaGVpZ2h0PWQqZztjb25zdCBrPWwuZ2V0Q29udGV4dCgiMmQiKTtzdXBlcihsKTt0aGlzLmNhcGFjaXR5PWE7dGhpcy5pbWFnZVdpZHRoPWM7dGhpcy5pbWFnZUhlaWdodD1kO3RoaXMuc3ByaXRlQ29sdW1ucz1mO3RoaXMuc3ByaXRlUm93cz1nO3RoaXMuY2FudmFzPWw7dGhpcy5jb250ZXh0PWs7dGhpcy5tYWdGaWx0ZXI9dGhpcy5taW5GaWx0ZXI9VEhSRUUuTGluZWFyRmlsdGVyO3RoaXMuZHJhd1RpbWVvdXQ9NTA7dGhpcy53YWl0VGltZW91dD0xO3RoaXMuZHJhd1F1ZXVlPVtdO3RoaXMuaXNEcmF3UXVldWVkPSExO3RoaXMubGFzdENsZWFyVGltZXN0YW1wPTA7dGhpcy5jYWxsYmFja1F1ZXVlPVtdO3RoaXMucGVuZGluZ0ltYWdlQ291bnQ9CjA7dGhpcy5maXR0ZXI9bmV3IFdtKHt4Oi4xMjUqYyx5Oi4xMjUqZCx3aWR0aDouNzUqYyxoZWlnaHQ6Ljc1KmR9KX1jbGVhclF1ZXVlcygpe3RoaXMuZHJhd1F1ZXVlPVtdO3RoaXMuY2FsbGJhY2tRdWV1ZT1bXTt0aGlzLnBlbmRpbmdJbWFnZUNvdW50PTA7cmV0dXJuIHRoaXMubGFzdENsZWFyVGltZXN0YW1wPURhdGUubm93KCl9c2V0U3ByaXRlSW1hZ2VEYXRhKGEsYyxkKXt0aGlzLmRyYXdRdWV1ZS5wdXNoKHtzcHJpdGVJbmRleDphLHRpbWVzdGFtcDpEYXRlLm5vdygpLGltYWdlRGF0YTpjLGNhbGxiYWNrOmR9KTt0aGlzLnF1ZXVlRHJhdygpfXNldEF0bGFzVXJsKGEsYyxkKXtjb25zdCBmPXRoaXMuY2xlYXJRdWV1ZXMoKSxnPW5ldyBJbWFnZTt2b2lkIDAhPT1jJiYoZy5jcm9zc09yaWdpbj1jKTt0aGlzLnBlbmRpbmdJbWFnZUNvdW50Kys7Zy5vbmVycm9yPSgpPT57dGhpcy5sYXN0Q2xlYXJUaW1lc3RhbXA+Znx8dGhpcy5wZW5kaW5nSW1hZ2VDb3VudC0tfTtnLm9ubG9hZD0KKCk9PntpZighKHRoaXMubGFzdENsZWFyVGltZXN0YW1wPmYpJiYodGhpcy5wZW5kaW5nSW1hZ2VDb3VudC0tLHRoaXMudXBkYXRlUHJvcGVydGllc1RvTWF0Y2hJbWFnZURpbWVuc2lvbnMoZy53aWR0aCxnLmhlaWdodCksdGhpcy5jb250ZXh0LmRyYXdJbWFnZShnLDAsMCx0aGlzLmNhbnZhcy53aWR0aCx0aGlzLmNhbnZhcy5oZWlnaHQpLHRoaXMubmVlZHNVcGRhdGU9ITAsZCYmdGhpcy5jYWxsYmFja1F1ZXVlLnB1c2goe2NhbGxiYWNrOmQsYXJnczpbZ119KSx0aGlzLm9uRHJhd0ZpbmlzaGVkKSl0aGlzLm9uRHJhd0ZpbmlzaGVkKCl9O2cuc3JjPWF9dXBkYXRlUHJvcGVydGllc1RvTWF0Y2hJbWFnZURpbWVuc2lvbnMoYSxjKXtpZihhIT09dGhpcy5pbWFnZVdpZHRoKnRoaXMuc3ByaXRlQ29sdW1uc3x8YyE9PXRoaXMuaW1hZ2VIZWlnaHQqdGhpcy5zcHJpdGVSb3dzKXt2YXIgZD1hL3RoaXMuaW1hZ2VXaWR0aCxmPWMvdGhpcy5pbWFnZUhlaWdodDtpZihkKmY8dGhpcy5jYXBhY2l0eSl0aHJvdyBFcnJvcigiQXRsYXMgaW1hZ2UgdG9vIHNtYWxsIHRvIGFjY29tbW9kYXRlIGF0bGFzIGNhcGFjaXR5LiIpOwppZihkIT09TWF0aC5yb3VuZChkKXx8ZiE9PU1hdGgucm91bmQoZikpdGhyb3cgRXJyb3IoIkF0bGFzIGltYWdlIGRpbWVuc2lvbnMgZG8gbm90IGZpdCBzcHJpdGUgaW1hZ2UgZGltZW5zaW9ucy4iKTt0aGlzLnNwcml0ZUNvbHVtbnM9ZDt0aGlzLnNwcml0ZVJvd3M9Zjt0aGlzLmNhbnZhcy53aWR0aD1hO3RoaXMuY2FudmFzLmhlaWdodD1jfX1wb3N0UmVuZGVyKCl7aWYoISh0aGlzLmRyYXdRdWV1ZS5sZW5ndGh8fDA8dGhpcy5wZW5kaW5nSW1hZ2VDb3VudCkpZm9yKDt0aGlzLmNhbGxiYWNrUXVldWUubGVuZ3RoOyl7Y29uc3Qge2NhbGxiYWNrOmEsYXJnczpjfT10aGlzLmNhbGxiYWNrUXVldWUuc2hpZnQoKTthLmFwcGx5KG51bGwsYyl9fXF1ZXVlRHJhdygpe3RoaXMuaXNEcmF3UXVldWVkfHwodGhpcy5pc0RyYXdRdWV1ZWQ9ITAsc2V0VGltZW91dCgoKT0+e3RoaXMuaXNEcmF3UXVldWVkJiZ0aGlzLndvcmtPbkRyYXdKb2JzKCl9LHRoaXMud2FpdFRpbWVvdXQpKX13b3JrT25EcmF3Sm9icygpe3RoaXMuaXNEcmF3UXVldWVkPQohMTtjb25zdCBhPURhdGUubm93KCksYz1hKyh0aGlzLmRyYXdUaW1lb3V0fHxJbmZpbml0eSk7Zm9yKDt0aGlzLmRyYXdRdWV1ZS5sZW5ndGgmJkRhdGUubm93KCk8Yzspe2NvbnN0IHtzcHJpdGVJbmRleDpwLHRpbWVzdGFtcDpxLGltYWdlRGF0YTpyLGltYWdlOnQsY2FsbGJhY2s6dn09dGhpcy5kcmF3UXVldWUuc2hpZnQoKTtpZih0KXt2YXIgZD10aGlzLmltYWdlV2lkdGgsZj10aGlzLmltYWdlSGVpZ2h0LGc9cCV0aGlzLnNwcml0ZUNvbHVtbnMqZCxsPWYqTWF0aC5mbG9vcihwL3RoaXMuc3ByaXRlQ29sdW1ucyk7dGhpcy5jb250ZXh0LmNsZWFyUmVjdChnLGwsZCxmKTt0aGlzLmNvbnRleHQuZHJhd0ltYWdlKHQsZyxsLGQsZik7ImZ1bmN0aW9uIj09PXR5cGVvZiB2JiZ0aGlzLmNhbGxiYWNrUXVldWUucHVzaCh7Y2FsbGJhY2s6dixhcmdzOltwXX0pfWVsc2UgaWYociYmInRleHQiPT09ci50eXBlKXtkPXAldGhpcy5zcHJpdGVDb2x1bW5zKnRoaXMuaW1hZ2VXaWR0aDtmPXRoaXMuaW1hZ2VIZWlnaHQqCk1hdGguZmxvb3IocC90aGlzLnNwcml0ZUNvbHVtbnMpO3ZhciBrPWQrdGhpcy5pbWFnZVdpZHRoLzIsbT1mK3RoaXMuaW1hZ2VIZWlnaHQvMjtnPXRoaXMuZml0dGVyLmZpdChyLmRhdGErIiIpO2w9dGhpcy5jb250ZXh0O2wuY2xlYXJSZWN0KGQsZix0aGlzLmltYWdlV2lkdGgsdGhpcy5pbWFnZUhlaWdodCk7bC5zYXZlKCk7bC50cmFuc2xhdGUoayxtKTtsLnNjYWxlKHRoaXMuaW1hZ2VXaWR0aCx0aGlzLmltYWdlSGVpZ2h0KTtsLmJlZ2luUGF0aCgpO2wuYXJjKDAsMCwuNSwwLDIqTWF0aC5QSSk7bC5yZXN0b3JlKCk7bC5maWxsU3R5bGU9IiM1NTU1NTUiO2wuZmlsbCgpO2wuZmlsbFN0eWxlPSJ3aGl0ZSI7bC50ZXh0QmFzZWxpbmU9ImhhbmdpbmciO2wuZm9udD1gJHtyLnNwZWNpYWw/Iml0YWxpYyI6ImJvbGQifSAke2cuZm9udFNpemV9cHggJHsiJ1JvYm90byBNb25vJywgJ0NvbnNvbGFzJywgJ01lbmxvJywgbW9ub3NwYWNlIn1gO2s9Zy5saW5lcztmb3IobT0wO208ay5sZW5ndGg7bSsrKXtjb25zdCBBPQprW21dO2wuZmlsbFRleHQoQS50ZXh0LGQrQS54LGYrQS55LEEudGV4dC5sZW5ndGgqdGhpcy5maXR0ZXIuc2V0dGluZ3MuZ2x5cGhBc3BlY3RSYXRpbypnLmZvbnRTaXplKX0iZnVuY3Rpb24iPT09dHlwZW9mIHYmJnRoaXMuY2FsbGJhY2tRdWV1ZS5wdXNoKHtjYWxsYmFjazp2LGFyZ3M6W3BdfSl9ZWxzZSBpZihyKXtjb25zdCBBPW5ldyBJbWFnZTt0aGlzLnBlbmRpbmdJbWFnZUNvdW50Kys7QS5vbmxvYWQ9KCk9PnthPHRoaXMubGFzdENsZWFyVGltZXN0YW1wfHwodGhpcy5wZW5kaW5nSW1hZ2VDb3VudC0tLHRoaXMuZHJhd1F1ZXVlLnVuc2hpZnQoe3Nwcml0ZUluZGV4OnAsdGltZXN0YW1wOnEsaW1hZ2U6QSxjYWxsYmFjazp2fSksdGhpcy5xdWV1ZURyYXcoKSl9O0Eub25lcnJvcj0oKT0+e2E8dGhpcy5sYXN0Q2xlYXJUaW1lc3RhbXB8fCh0aGlzLnBlbmRpbmdJbWFnZUNvdW50LS0sdGhpcy5kcmF3UXVldWUucHVzaCh7c3ByaXRlSW5kZXg6cCx0aW1lc3RhbXA6cSxpbWFnZURhdGE6ciwKY2FsbGJhY2s6dn0pLHRoaXMucXVldWVEcmF3KCkpfTtBLnNyYz0ic3ZnIj09PXIudHlwZT9VUkwuY3JlYXRlT2JqZWN0VVJMKG5ldyBCbG9iKFtyLmRhdGFdLHt0eXBlOiJpbWFnZS9zdmcreG1sO2NoYXJzZXRceDNkdXRmLTgifSkpOmBkYXRhOiR7ci50eXBlfTtiYXNlNjQsJHtyLmRhdGF9YH19aWYodGhpcy5kcmF3UXVldWUubGVuZ3RofHwwPHRoaXMucGVuZGluZ0ltYWdlQ291bnQpdGhpcy5xdWV1ZURyYXcoKTtlbHNlIGlmKHRoaXMubmVlZHNVcGRhdGU9ITAsdGhpcy5vbkRyYXdGaW5pc2hlZCl0aGlzLm9uRHJhd0ZpbmlzaGVkKCl9fTsKPC9zY3JpcHQ+CgoKCjxzY3JpcHQ+Ly9+fldFQlBBVEh+fi9mYWNldHMtZGl2ZS9saWIvc3ByaXRlLW1hdGVyaWFsLmpzCmNsYXNzIFltIGV4dGVuZHMgVEhSRUUuUmF3U2hhZGVyTWF0ZXJpYWx7Y29uc3RydWN0b3IoYSxjKXtzdXBlcih7dmVydGV4U2hhZGVyOiJcblxuICBwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4gIHByZWNpc2lvbiBoaWdocCBpbnQ7XG5cbiAgI2RlZmluZSBTSEFERVJfTkFNRSBTcHJpdGVNYXRlcmlhbFxuXG4gIC8vIFN0YW5kYXJkIHVuaWZvcm1zIHByb3ZpZGVkIGJ5IFRIUkVFLmpzIGZvciBwcm9qZWN0aW5nIHRocm91Z2ggdGhlIGNhbWVyYS5cbiAgdW5pZm9ybSBtYXQ0IG1vZGVsVmlld01hdHJpeDtcbiAgdW5pZm9ybSBtYXQ0IHByb2plY3Rpb25NYXRyaXg7XG5cbiAgdW5pZm9ybSBmbG9hdCB0aW1lO1xuXG4gIHVuaWZvcm0gZmxvYXQgc3ByaXRlQ29sdW1ucztcbiAgdW5pZm9ybSBmbG9hdCBzcHJpdGVSb3dzO1xuXG4gIGF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uO1xuICBhdHRyaWJ1dGUgdmVjMyBiYXNlUG9zaXRpb247XG5cbiAgYXR0cmlidXRlIHZlYzQgY29sb3I7XG4gIGF0dHJpYnV0ZSB2ZWM0IGJhc2VDb2xvcjtcblxuICBhdHRyaWJ1dGUgZmxvYXQgb3BhY2l0eTtcbiAgYXR0cmlidXRlIGZsb2F0IGJhc2VPcGFjaXR5O1xuXG4gIGF0dHJpYnV0ZSBmbG9hdCB0aW1lc3RhbXA7XG4gIGF0dHJpYnV0ZSBmbG9hdCBiYXNlVGltZXN0YW1wO1xuXG4gIGF0dHJpYnV0ZSBmbG9hdCB2ZXJ0ZXhJbmRleDtcblxuICBhdHRyaWJ1dGUgZmxvYXQgdGV4dHVyZUluZGV4O1xuICBhdHRyaWJ1dGUgZmxvYXQgYmFzZVRleHR1cmVJbmRleDtcblxuICBhdHRyaWJ1dGUgZmxvYXQgdGV4dHVyZVRpbWVzdGFtcDtcbiAgYXR0cmlidXRlIGZsb2F0IGJhc2VUZXh0dXJlVGltZXN0YW1wO1xuXG4gIC8vIENvbXB1dGVkIFVWIGNvb3JkaW5hdGVzIGludG8gdGhlIGRlZmF1bHRUZXh0dXJlIGJhc2VkIG9uIHRoZSB2ZXJ0ZXhJbmRleC5cbiAgdmFyeWluZyB2ZWMyIHZEZWZhdWx0VXY7XG5cbiAgLy8gQ29tcHV0ZWQgVVYgY29vcmRpbmF0ZXMgaW50byB0aGUgc3ByaXRlIHRleHR1cmUgYXRsYXMuXG4gIHZhcnlpbmcgdmVjMiB2U3ByaXRlVXY7XG5cbiAgLy8gSW50ZXJwb2xhdGVkIGNvbG9yIHVzZWQgYnkgdGhlIGZyYWdtZW50IHNoYWRlci5cbiAgdmFyeWluZyB2ZWM0IHZDb2xvcjtcblxuICAvLyBJbnRlcnBvbGF0ZWQgb3BhY2l0eSB1c2VkIGJ5IHRoZSBmcmFnbWVudCBzaGFkZXIuXG4gIHZhcnlpbmcgZmxvYXQgdk9wYWNpdHk7XG5cbiAgLy8gRGVncmVlIG9mIG1peGluZyBiZXR3ZWVuIGJhc2UgYW5kIGN1cnJlbnQgdGV4dHVyZS5cbiAgdmFyeWluZyBmbG9hdCB2VGV4dHVyZU1peDtcblxuICBmbG9hdCBhcHBseUVhc2luZyhmbG9hdCB0KSB7XG4gICAgcmV0dXJuIHQgXHgzYyAwLjUgPyA0LjAgKiB0ICogdCAqIHQgOlxuICAgICAgNC4wICogKHQgLSAxLjApICogKHQgLSAxLjApICogKHQgLSAxLjApICsgMS4wO1xuICB9XG5cbiAgdm9pZCBtYWluKCkge1xuXG4gICAgLy8gQ29tcHV0ZSBkZWZhdWx0IFVWcy4gQSBceDNkXHgzZSAoMCwwKSwgQiBceDNkXHgzZSAoMSwwKSwgZXRjLlxuICAgIHZEZWZhdWx0VXYueCBceDNkIG1vZChmbG9vcigodmVydGV4SW5kZXggKyAxLjApIC8gMi4wKSwgMi4wKTtcbiAgICB2RGVmYXVsdFV2LnkgXHgzZCBtb2QoZmxvb3IodmVydGV4SW5kZXggLyAyLjApLCAyLjApO1xuXG4gICAgLy8gRGV0ZXJtaW5lIHRoZSByb3cgYW5kIGNvbHVtbiBpbmRpY2VzIGZvciB0aGlzIHNwcml0ZS5cbiAgICBmbG9hdCBzcHJpdGVJbmRleCBceDNkIGZsb29yKHZlcnRleEluZGV4IC8gNC4wKSArIDAuNTtcbiAgICBmbG9hdCBjb2x1bW5JbmRleCBceDNkIGZsb29yKG1vZChzcHJpdGVJbmRleCwgc3ByaXRlQ29sdW1ucykpO1xuICAgIGZsb2F0IHJvd0luZGV4IFx4M2Qgc3ByaXRlUm93cyAtIDEuMCAtIGZsb29yKHNwcml0ZUluZGV4IC8gc3ByaXRlQ29sdW1ucyk7XG5cbiAgICAvLyBDb21wdXRlIHNwcml0ZSBVVnMgZnJvbSByb3cgYW5kIGNvbHVtbiBpbmRpY2VzLlxuICAgIHZTcHJpdGVVdi54IFx4M2QgKGNvbHVtbkluZGV4ICsgdkRlZmF1bHRVdi54KSAvIHNwcml0ZUNvbHVtbnM7XG4gICAgdlNwcml0ZVV2LnkgXHgzZCAocm93SW5kZXggKyB2RGVmYXVsdFV2LnkpIC8gc3ByaXRlUm93cztcblxuICAgIGZsb2F0IGJsZW5kIFx4M2QgYXBwbHlFYXNpbmcoc21vb3Roc3RlcChiYXNlVGltZXN0YW1wLCB0aW1lc3RhbXAsIHRpbWUpKTtcblxuICAgIHZUZXh0dXJlTWl4IFx4M2QgbWl4KGJhc2VUZXh0dXJlSW5kZXgsIHRleHR1cmVJbmRleCxcbiAgICAgICAgc21vb3Roc3RlcChiYXNlVGV4dHVyZVRpbWVzdGFtcCwgdGV4dHVyZVRpbWVzdGFtcCwgdGltZSkpO1xuXG4gICAgdkNvbG9yIFx4M2QgbWl4KGJhc2VDb2xvciwgY29sb3IsIGJsZW5kKTtcblxuICAgIHZPcGFjaXR5IFx4M2QgbWl4KGJhc2VPcGFjaXR5LCBvcGFjaXR5LCBibGVuZCk7XG5cbiAgICBnbF9Qb3NpdGlvbiBceDNkIHByb2plY3Rpb25NYXRyaXggKiBtb2RlbFZpZXdNYXRyaXggKlxuICAgICAgICB2ZWM0KG1peChiYXNlUG9zaXRpb24sIHBvc2l0aW9uLCB2ZWMzKGJsZW5kKSksIDEuMCk7XG5cbiAgfVxuXG4iLApmcmFnbWVudFNoYWRlcjoiXG5cbiAgcHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuICBwcmVjaXNpb24gaGlnaHAgaW50O1xuXG4gICNkZWZpbmUgU0hBREVSX05BTUUgU3ByaXRlTWF0ZXJpYWxcblxuICAvLyBMaWdodG5lc3MgdGhhdCBzaG91bGQgaWRlYWxseSBleGFjdGx5IG1hdGNoIHRoZSB2Q29sb3IuXG4gICNkZWZpbmUgVEFSR0VUX0xJR0hUTkVTUyAwLjZcblxuICB1bmlmb3JtIGZsb2F0IHRpbWU7XG5cbiAgdW5pZm9ybSBzYW1wbGVyMkQgZGVmYXVsdFRleHR1cmU7XG4gIHVuaWZvcm0gc2FtcGxlcjJEIHNwcml0ZUF0bGFzO1xuXG4gIHZhcnlpbmcgdmVjMiB2RGVmYXVsdFV2O1xuICB2YXJ5aW5nIHZlYzIgdlNwcml0ZVV2O1xuICB2YXJ5aW5nIHZlYzQgdkNvbG9yO1xuICB2YXJ5aW5nIGZsb2F0IHZPcGFjaXR5O1xuICB2YXJ5aW5nIGZsb2F0IHZUZXh0dXJlTWl4O1xuXG4gIC8vIENvbXB1dGUgcmVsYXRpdmUgbHVtaW5hbmNlIGZyb20gUkdCLlxuICBmbG9hdCByZ2JUb0wodmVjMyByZ2IpIHtcbiAgICByZXR1cm4gZG90KHJnYiwgdmVjMygwLjMsIDAuNTksIDAuMTEpKTtcbiAgfVxuXG4gIC8vIEFwcGx5IGx1bWluYW5jZSBlYXNpbmcuXG4gIGZsb2F0IGVhc2VMKGZsb2F0IGwpIHtcbiAgICByZXR1cm4gMS4wIC0gKDEuMCAtIGwpICogKDEuMCAtIGwpICogKDEuMCAtIGwpO1xuICB9XG5cbiAgdm9pZCBtYWluKCkge1xuICAgIGlmICh2T3BhY2l0eSBceDNjXHgzZCAwLjA1KSB7XG4gICAgICBkaXNjYXJkO1xuICAgIH1cblxuICAgIC8vIEludGVycG9sYXRlIGJldHdlZW4gZGVmYXVsdCB0ZXh0dXJlIGFuZCBzcHJpdGUgdGV4dHVyZS5cbiAgICB2ZWM0IGRlZmF1bHRDb2xvciBceDNkXG4gICAgICB2VGV4dHVyZU1peCBceDNjIDEuMCA/IHRleHR1cmUyRChkZWZhdWx0VGV4dHVyZSwgdkRlZmF1bHRVdikgOiB2ZWM0KDAuMCk7XG4gICAgdmVjNCBzcHJpdGVDb2xvciBceDNkXG4gICAgICB2VGV4dHVyZU1peCBceDNlIDAuMCA/IHRleHR1cmUyRChzcHJpdGVBdGxhcywgdlNwcml0ZVV2KSA6IHZlYzQoMC4wKTtcbiAgICB2ZWM0IG1peGVkQ29sb3IgXHgzZCBtaXgoZGVmYXVsdENvbG9yLCBzcHJpdGVDb2xvciwgdlRleHR1cmVNaXgpO1xuXG4gICAgLy8gTGlnaHRuZXNzIG9mIHRoZSBtaXhlZCBwaXhlbC5cbiAgICBmbG9hdCBtaXhlZEwgXHgzZCByZ2JUb0wobWl4ZWRDb2xvci5yZ2IpO1xuXG4gICAgLy8gVXNpbmcgdGhlIG1peGVkIGFuZCB0YXJnZXQgbGlnaHRuZXNzLCBkZXRlcm1pbmUgdGhlIGNvbG9yIHRoYXQncyBiZXR3ZWVuXG4gICAgLy8gYmxhY2ssIHZDb2xvciBhbmQgd2hpdGUuXG4gICAgdmVjMyBjb2xvciBceDNkIG1peGVkTCBceDNjIFRBUkdFVF9MSUdIVE5FU1MgP1xuICAgICAgICBtaXgodmVjMygwLjApLCB2Q29sb3IucmdiLCBlYXNlTChtaXhlZEwgLyBUQVJHRVRfTElHSFRORVNTKSkgOlxuICAgICAgICBtaXgodmVjMygxLjApLCB2Q29sb3IucmdiLFxuICAgICAgICAgICAgZWFzZUwoKDEuMCAtIG1peGVkTCkgLyAoMS4wIC0gVEFSR0VUX0xJR0hUTkVTUykpKTtcblxuICAgIHZlYzMgZmluYWxDb2xvciBceDNkIG1peChtaXhlZENvbG9yLnJnYiwgY29sb3IsIHZDb2xvci5hKTtcblxuICAgIC8vIEFwcGx5IG9wYWNpdHkuXG4gICAgZ2xfRnJhZ0NvbG9yIFx4M2QgdmVjNChmaW5hbENvbG9yLCBtaXhlZENvbG9yLmEgKiB2T3BhY2l0eSk7XG4gIH1cbiIsCnVuaWZvcm1zOnt0aW1lOnt0eXBlOiJmIix2YWx1ZTowfSxkZWZhdWx0VGV4dHVyZTp7dHlwZToidCIsdmFsdWU6YX0sc3ByaXRlQXRsYXM6e3R5cGU6InQiLHZhbHVlOmN9LHNwcml0ZUNvbHVtbnM6e3R5cGU6ImYiLHZhbHVlOmM/Yy5zcHJpdGVDb2x1bW5zOjF9LHNwcml0ZVJvd3M6e3R5cGU6ImYiLHZhbHVlOmM/Yy5zcHJpdGVSb3dzOjF9fSx0cmFuc3BhcmVudDohMH0pfWdldCB0aW1lKCl7cmV0dXJuIHRoaXMudW5pZm9ybXMudGltZS52YWx1ZX1zZXQgdGltZShhKXt0aGlzLnVuaWZvcm1zLnRpbWUudmFsdWU9YX1nZXQgZGVmYXVsdFRleHR1cmUoKXtyZXR1cm4gdGhpcy51bmlmb3Jtcy5kZWZhdWx0VGV4dHVyZS52YWx1ZX1zZXQgZGVmYXVsdFRleHR1cmUoYSl7dGhpcy51bmlmb3Jtcy5kZWZhdWx0VGV4dHVyZS52YWx1ZT1hfWdldCBzcHJpdGVBdGxhcygpe3JldHVybiB0aGlzLnVuaWZvcm1zLnNwcml0ZUF0bGFzLnZhbHVlfXNldCBzcHJpdGVBdGxhcyhhKXt0aGlzLnVuaWZvcm1zLnNwcml0ZUF0bGFzLnZhbHVlPQphfXVwZGF0ZUF0bGFzVW5pZm9ybXMoKXt0aGlzLnVuaWZvcm1zLnNwcml0ZUNvbHVtbnMudmFsdWU9dGhpcy5zcHJpdGVBdGxhcy5zcHJpdGVDb2x1bW5zO3RoaXMudW5pZm9ybXMuc3ByaXRlUm93cy52YWx1ZT10aGlzLnNwcml0ZUF0bGFzLnNwcml0ZVJvd3N9YXBwbHlFYXNpbmcoYSl7cmV0dXJuLjU+YT80KmEqYSphOjQqKGEtMSkqKGEtMSkqKGEtMSkrMX19Owo8L3NjcmlwdD4KCgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vZmFjZXRzLWRpdmUvbGliL3Nwcml0ZS1tZXNoLmpzCmNsYXNzIFpte2NvbnN0cnVjdG9yKGEsYyl7dGhpcy5fc3ByaXRlTWVzaD1hO3RoaXMuX3Nwcml0ZUluZGV4PWN9Z2V0IHNwcml0ZU1lc2goKXtyZXR1cm4gdGhpcy5fc3ByaXRlTWVzaH1nZXQgc3ByaXRlSW5kZXgoKXtyZXR1cm4gdGhpcy5fc3ByaXRlSW5kZXh9Z2V0IHgoKXtyZXR1cm4gdGhpcy5fc3ByaXRlTWVzaC5nZXRYKHRoaXMuX3Nwcml0ZUluZGV4KX1zZXQgeChhKXt0aGlzLl9zcHJpdGVNZXNoLnNldFgodGhpcy5fc3ByaXRlSW5kZXgsYSl9Z2V0IHkoKXtyZXR1cm4gdGhpcy5fc3ByaXRlTWVzaC5nZXRZKHRoaXMuX3Nwcml0ZUluZGV4KX1zZXQgeShhKXt0aGlzLl9zcHJpdGVNZXNoLnNldFkodGhpcy5fc3ByaXRlSW5kZXgsYSl9Z2V0IHooKXtyZXR1cm4gdGhpcy5fc3ByaXRlTWVzaC5nZXRaKHRoaXMuX3Nwcml0ZUluZGV4KX1zZXQgeihhKXt0aGlzLl9zcHJpdGVNZXNoLnNldFoodGhpcy5fc3ByaXRlSW5kZXgsYSl9Z2V0IHIoKXtyZXR1cm4gdGhpcy5fc3ByaXRlTWVzaC5nZXRSKHRoaXMuX3Nwcml0ZUluZGV4KX1zZXQgcihhKXt0aGlzLl9zcHJpdGVNZXNoLnNldFIodGhpcy5fc3ByaXRlSW5kZXgsCmEpfWdldCBnKCl7cmV0dXJuIHRoaXMuX3Nwcml0ZU1lc2guZ2V0Ryh0aGlzLl9zcHJpdGVJbmRleCl9c2V0IGcoYSl7dGhpcy5fc3ByaXRlTWVzaC5zZXRHKHRoaXMuX3Nwcml0ZUluZGV4LGEpfWdldCBiKCl7cmV0dXJuIHRoaXMuX3Nwcml0ZU1lc2guZ2V0Qih0aGlzLl9zcHJpdGVJbmRleCl9c2V0IGIoYSl7dGhpcy5fc3ByaXRlTWVzaC5zZXRCKHRoaXMuX3Nwcml0ZUluZGV4LGEpfWdldCBhKCl7cmV0dXJuIHRoaXMuX3Nwcml0ZU1lc2guZ2V0QSh0aGlzLl9zcHJpdGVJbmRleCl9c2V0IGEoYSl7dGhpcy5fc3ByaXRlTWVzaC5zZXRBKHRoaXMuX3Nwcml0ZUluZGV4LGEpfWdldCBvcGFjaXR5KCl7cmV0dXJuIHRoaXMuX3Nwcml0ZU1lc2guZ2V0T3BhY2l0eSh0aGlzLl9zcHJpdGVJbmRleCl9c2V0IG9wYWNpdHkoYSl7dGhpcy5fc3ByaXRlTWVzaC5zZXRPcGFjaXR5KHRoaXMuX3Nwcml0ZUluZGV4LGEpfWdldCB0aW1lc3RhbXAoKXtyZXR1cm4gdGhpcy5fc3ByaXRlTWVzaC5nZXRUaW1lc3RhbXAodGhpcy5fc3ByaXRlSW5kZXgpfXNldCB0aW1lc3RhbXAoYSl7dGhpcy5fc3ByaXRlTWVzaC5zZXRUaW1lc3RhbXAodGhpcy5fc3ByaXRlSW5kZXgsCmEpfWdldCBiYXNlWCgpe3JldHVybiB0aGlzLl9zcHJpdGVNZXNoLmdldEJhc2VYKHRoaXMuX3Nwcml0ZUluZGV4KX1zZXQgYmFzZVgoYSl7dGhpcy5fc3ByaXRlTWVzaC5zZXRCYXNlWCh0aGlzLl9zcHJpdGVJbmRleCxhKX1nZXQgYmFzZVkoKXtyZXR1cm4gdGhpcy5fc3ByaXRlTWVzaC5nZXRCYXNlWSh0aGlzLl9zcHJpdGVJbmRleCl9c2V0IGJhc2VZKGEpe3RoaXMuX3Nwcml0ZU1lc2guc2V0QmFzZVkodGhpcy5fc3ByaXRlSW5kZXgsYSl9Z2V0IGJhc2VaKCl7cmV0dXJuIHRoaXMuX3Nwcml0ZU1lc2guZ2V0QmFzZVoodGhpcy5fc3ByaXRlSW5kZXgpfXNldCBiYXNlWihhKXt0aGlzLl9zcHJpdGVNZXNoLnNldEJhc2VaKHRoaXMuX3Nwcml0ZUluZGV4LGEpfWdldCBiYXNlUigpe3JldHVybiB0aGlzLl9zcHJpdGVNZXNoLmdldEJhc2VSKHRoaXMuX3Nwcml0ZUluZGV4KX1zZXQgYmFzZVIoYSl7dGhpcy5fc3ByaXRlTWVzaC5zZXRCYXNlUih0aGlzLl9zcHJpdGVJbmRleCxhKX1nZXQgYmFzZUcoKXtyZXR1cm4gdGhpcy5fc3ByaXRlTWVzaC5nZXRCYXNlRyh0aGlzLl9zcHJpdGVJbmRleCl9c2V0IGJhc2VHKGEpe3RoaXMuX3Nwcml0ZU1lc2guc2V0QmFzZUcodGhpcy5fc3ByaXRlSW5kZXgsCmEpfWdldCBiYXNlQigpe3JldHVybiB0aGlzLl9zcHJpdGVNZXNoLmdldEJhc2VCKHRoaXMuX3Nwcml0ZUluZGV4KX1zZXQgYmFzZUIoYSl7dGhpcy5fc3ByaXRlTWVzaC5zZXRCYXNlQih0aGlzLl9zcHJpdGVJbmRleCxhKX1nZXQgYmFzZUEoKXtyZXR1cm4gdGhpcy5fc3ByaXRlTWVzaC5nZXRCYXNlQSh0aGlzLl9zcHJpdGVJbmRleCl9c2V0IGJhc2VBKGEpe3RoaXMuX3Nwcml0ZU1lc2guc2V0QmFzZUEodGhpcy5fc3ByaXRlSW5kZXgsYSl9Z2V0IGJhc2VPcGFjaXR5KCl7cmV0dXJuIHRoaXMuX3Nwcml0ZU1lc2guZ2V0QmFzZU9wYWNpdHkodGhpcy5fc3ByaXRlSW5kZXgpfXNldCBiYXNlT3BhY2l0eShhKXt0aGlzLl9zcHJpdGVNZXNoLnNldEJhc2VPcGFjaXR5KHRoaXMuX3Nwcml0ZUluZGV4LGEpfWdldCBiYXNlVGltZXN0YW1wKCl7cmV0dXJuIHRoaXMuX3Nwcml0ZU1lc2guZ2V0QmFzZVRpbWVzdGFtcCh0aGlzLl9zcHJpdGVJbmRleCl9c2V0IGJhc2VUaW1lc3RhbXAoYSl7dGhpcy5fc3ByaXRlTWVzaC5zZXRCYXNlVGltZXN0YW1wKHRoaXMuX3Nwcml0ZUluZGV4LAphKX1nZXQgdGV4dHVyZUluZGV4KCl7cmV0dXJuIHRoaXMuX3Nwcml0ZU1lc2guZ2V0VGV4dHVyZUluZGV4KHRoaXMuX3Nwcml0ZUluZGV4KX1zZXQgdGV4dHVyZUluZGV4KGEpe3RoaXMuX3Nwcml0ZU1lc2guc2V0VGV4dHVyZUluZGV4KHRoaXMuX3Nwcml0ZUluZGV4LGEpfWdldCBiYXNlVGV4dHVyZUluZGV4KCl7cmV0dXJuIHRoaXMuX3Nwcml0ZU1lc2guZ2V0QmFzZVRleHR1cmVJbmRleCh0aGlzLl9zcHJpdGVJbmRleCl9c2V0IGJhc2VUZXh0dXJlSW5kZXgoYSl7dGhpcy5fc3ByaXRlTWVzaC5zZXRCYXNlVGV4dHVyZUluZGV4KHRoaXMuX3Nwcml0ZUluZGV4LGEpfWdldCB0ZXh0dXJlVGltZXN0YW1wKCl7cmV0dXJuIHRoaXMuX3Nwcml0ZU1lc2guZ2V0VGV4dHVyZVRpbWVzdGFtcCh0aGlzLl9zcHJpdGVJbmRleCl9c2V0IHRleHR1cmVUaW1lc3RhbXAoYSl7dGhpcy5fc3ByaXRlTWVzaC5zZXRUZXh0dXJlVGltZXN0YW1wKHRoaXMuX3Nwcml0ZUluZGV4LGEpfWdldCBiYXNlVGV4dHVyZVRpbWVzdGFtcCgpe3JldHVybiB0aGlzLl9zcHJpdGVNZXNoLmdldEJhc2VUZXh0dXJlVGltZXN0YW1wKHRoaXMuX3Nwcml0ZUluZGV4KX1zZXQgYmFzZVRleHR1cmVUaW1lc3RhbXAoYSl7dGhpcy5fc3ByaXRlTWVzaC5zZXRCYXNlVGV4dHVyZVRpbWVzdGFtcCh0aGlzLl9zcHJpdGVJbmRleCwKYSl9cmViYXNlKGEpe3RoaXMuX3Nwcml0ZU1lc2gucmViYXNlKHRoaXMuX3Nwcml0ZUluZGV4LGEpfXNldFNwcml0ZUltYWdlRGF0YShhLGMpe3RoaXMuX3Nwcml0ZU1lc2guc2V0U3ByaXRlSW1hZ2VEYXRhKHRoaXMuX3Nwcml0ZUluZGV4LGEsYyl9c3dpdGNoVGV4dHVyZXMoYSxjKXt0aGlzLl9zcHJpdGVNZXNoLnN3aXRjaFRleHR1cmVzKHRoaXMuX3Nwcml0ZUluZGV4LGEsYyl9fQpjbGFzcyAkbSBleHRlbmRzIFRIUkVFLk1lc2h7Y29uc3RydWN0b3IoYSxjPTMyLGQ9MzIpe3N1cGVyKCk7dGhpcy5jYXBhY2l0eT1hO3RoaXMuaW1hZ2VXaWR0aD1jO3RoaXMuaW1hZ2VIZWlnaHQ9ZDt0aGlzLm5leHRJbmRleD0wO3RoaXMuc3ByaXRlV2lkdGg9dGhpcy5pbWFnZVdpZHRoL3RoaXMuaW1hZ2VIZWlnaHQ7dGhpcy5zcHJpdGVIZWlnaHQ9MTt0aGlzLmdlb21ldHJ5PW5ldyBUSFJFRS5CdWZmZXJHZW9tZXRyeTt0aGlzLnBvc2l0aW9uRGF0YT1uZXcgRmxvYXQzMkFycmF5KDEyKmEpO3RoaXMucG9zaXRpb25BdHRyaWJ1dGU9bmV3IFRIUkVFLkJ1ZmZlckF0dHJpYnV0ZSh0aGlzLnBvc2l0aW9uRGF0YSwzKTt0aGlzLnBvc2l0aW9uQXR0cmlidXRlLnNldER5bmFtaWMoITApO3RoaXMuZ2VvbWV0cnkuYWRkQXR0cmlidXRlKCJwb3NpdGlvbiIsdGhpcy5wb3NpdGlvbkF0dHJpYnV0ZSk7dGhpcy5iYXNlUG9zaXRpb25EYXRhPW5ldyBGbG9hdDMyQXJyYXkoMTIqYSk7dGhpcy5iYXNlUG9zaXRpb25BdHRyaWJ1dGU9Cm5ldyBUSFJFRS5CdWZmZXJBdHRyaWJ1dGUodGhpcy5iYXNlUG9zaXRpb25EYXRhLDMpO3RoaXMuYmFzZVBvc2l0aW9uQXR0cmlidXRlLnNldER5bmFtaWMoITApO3RoaXMuZ2VvbWV0cnkuYWRkQXR0cmlidXRlKCJiYXNlUG9zaXRpb24iLHRoaXMuYmFzZVBvc2l0aW9uQXR0cmlidXRlKTt0aGlzLmNvbG9yRGF0YT1uZXcgVWludDhBcnJheSgxNiphKTt0aGlzLmNvbG9yQXR0cmlidXRlPW5ldyBUSFJFRS5CdWZmZXJBdHRyaWJ1dGUodGhpcy5jb2xvckRhdGEsNCk7dGhpcy5jb2xvckF0dHJpYnV0ZS5ub3JtYWxpemVkPSEwO3RoaXMuY29sb3JBdHRyaWJ1dGUuc2V0RHluYW1pYyghMCk7dGhpcy5nZW9tZXRyeS5hZGRBdHRyaWJ1dGUoImNvbG9yIix0aGlzLmNvbG9yQXR0cmlidXRlKTt0aGlzLmJhc2VDb2xvckRhdGE9bmV3IFVpbnQ4QXJyYXkoMTYqYSk7dGhpcy5iYXNlQ29sb3JBdHRyaWJ1dGU9bmV3IFRIUkVFLkJ1ZmZlckF0dHJpYnV0ZSh0aGlzLmJhc2VDb2xvckRhdGEsNCk7dGhpcy5iYXNlQ29sb3JBdHRyaWJ1dGUubm9ybWFsaXplZD0KITA7dGhpcy5iYXNlQ29sb3JBdHRyaWJ1dGUuc2V0RHluYW1pYyghMCk7dGhpcy5nZW9tZXRyeS5hZGRBdHRyaWJ1dGUoImJhc2VDb2xvciIsdGhpcy5iYXNlQ29sb3JBdHRyaWJ1dGUpO3RoaXMub3BhY2l0eURhdGE9bmV3IEZsb2F0MzJBcnJheSg0KmEpO3RoaXMub3BhY2l0eUF0dHJpYnV0ZT1uZXcgVEhSRUUuQnVmZmVyQXR0cmlidXRlKHRoaXMub3BhY2l0eURhdGEsMSk7dGhpcy5vcGFjaXR5QXR0cmlidXRlLnNldER5bmFtaWMoITApO3RoaXMuZ2VvbWV0cnkuYWRkQXR0cmlidXRlKCJvcGFjaXR5Iix0aGlzLm9wYWNpdHlBdHRyaWJ1dGUpO3RoaXMuYmFzZU9wYWNpdHlEYXRhPW5ldyBGbG9hdDMyQXJyYXkoNCphKTt0aGlzLmJhc2VPcGFjaXR5QXR0cmlidXRlPW5ldyBUSFJFRS5CdWZmZXJBdHRyaWJ1dGUodGhpcy5iYXNlT3BhY2l0eURhdGEsMSk7dGhpcy5iYXNlT3BhY2l0eUF0dHJpYnV0ZS5zZXREeW5hbWljKCEwKTt0aGlzLmdlb21ldHJ5LmFkZEF0dHJpYnV0ZSgiYmFzZU9wYWNpdHkiLAp0aGlzLmJhc2VPcGFjaXR5QXR0cmlidXRlKTt0aGlzLnRpbWVzdGFtcERhdGE9bmV3IEZsb2F0MzJBcnJheSg0KmEpO3RoaXMudGltZXN0YW1wQXR0cmlidXRlPW5ldyBUSFJFRS5CdWZmZXJBdHRyaWJ1dGUodGhpcy50aW1lc3RhbXBEYXRhLDEpO3RoaXMudGltZXN0YW1wQXR0cmlidXRlLnNldER5bmFtaWMoITApO3RoaXMuZ2VvbWV0cnkuYWRkQXR0cmlidXRlKCJ0aW1lc3RhbXAiLHRoaXMudGltZXN0YW1wQXR0cmlidXRlKTt0aGlzLmJhc2VUaW1lc3RhbXBEYXRhPW5ldyBGbG9hdDMyQXJyYXkoNCphKTt0aGlzLmJhc2VUaW1lc3RhbXBBdHRyaWJ1dGU9bmV3IFRIUkVFLkJ1ZmZlckF0dHJpYnV0ZSh0aGlzLmJhc2VUaW1lc3RhbXBEYXRhLDEpO3RoaXMuYmFzZVRpbWVzdGFtcEF0dHJpYnV0ZS5zZXREeW5hbWljKCEwKTt0aGlzLmdlb21ldHJ5LmFkZEF0dHJpYnV0ZSgiYmFzZVRpbWVzdGFtcCIsdGhpcy5iYXNlVGltZXN0YW1wQXR0cmlidXRlKTt0aGlzLmZhY2VJbmRleERhdGE9Cm5ldyBVaW50MzJBcnJheSg2KmEpO2Zvcih2YXIgZj0wO2Y8YTtmKyspe3ZhciBnPTYqZjtjb25zdCBsPTQqZjt0aGlzLmZhY2VJbmRleERhdGFbZyswXT1sKzA7dGhpcy5mYWNlSW5kZXhEYXRhW2crMV09bCsxO3RoaXMuZmFjZUluZGV4RGF0YVtnKzJdPWwrMjt0aGlzLmZhY2VJbmRleERhdGFbZyszXT1sKzA7dGhpcy5mYWNlSW5kZXhEYXRhW2crNF09bCsyO3RoaXMuZmFjZUluZGV4RGF0YVtnKzVdPWwrM310aGlzLmZhY2VJbmRleEF0dHJpYnV0ZT1uZXcgVEhSRUUuQnVmZmVyQXR0cmlidXRlKHRoaXMuZmFjZUluZGV4RGF0YSwxKTt0aGlzLmdlb21ldHJ5LnNldEluZGV4KHRoaXMuZmFjZUluZGV4QXR0cmlidXRlKTt0aGlzLnRleHR1cmVJbmRleERhdGE9bmV3IEZsb2F0MzJBcnJheSg0KmEpO3RoaXMudGV4dHVyZUluZGV4QXR0cmlidXRlPW5ldyBUSFJFRS5CdWZmZXJBdHRyaWJ1dGUodGhpcy50ZXh0dXJlSW5kZXhEYXRhLDEpO3RoaXMudGV4dHVyZUluZGV4QXR0cmlidXRlLnNldER5bmFtaWMoITApOwp0aGlzLmdlb21ldHJ5LmFkZEF0dHJpYnV0ZSgidGV4dHVyZUluZGV4Iix0aGlzLnRleHR1cmVJbmRleEF0dHJpYnV0ZSk7dGhpcy5iYXNlVGV4dHVyZUluZGV4RGF0YT1uZXcgRmxvYXQzMkFycmF5KDQqYSk7dGhpcy5iYXNlVGV4dHVyZUluZGV4QXR0cmlidXRlPW5ldyBUSFJFRS5CdWZmZXJBdHRyaWJ1dGUodGhpcy5iYXNlVGV4dHVyZUluZGV4RGF0YSwxKTt0aGlzLmJhc2VUZXh0dXJlSW5kZXhBdHRyaWJ1dGUuc2V0RHluYW1pYyghMCk7dGhpcy5nZW9tZXRyeS5hZGRBdHRyaWJ1dGUoImJhc2VUZXh0dXJlSW5kZXgiLHRoaXMuYmFzZVRleHR1cmVJbmRleEF0dHJpYnV0ZSk7dGhpcy50ZXh0dXJlVGltZXN0YW1wRGF0YT1uZXcgRmxvYXQzMkFycmF5KDQqYSk7dGhpcy50ZXh0dXJlVGltZXN0YW1wQXR0cmlidXRlPW5ldyBUSFJFRS5CdWZmZXJBdHRyaWJ1dGUodGhpcy50ZXh0dXJlVGltZXN0YW1wRGF0YSwxKTt0aGlzLnRleHR1cmVUaW1lc3RhbXBBdHRyaWJ1dGUuc2V0RHluYW1pYyghMCk7CnRoaXMuZ2VvbWV0cnkuYWRkQXR0cmlidXRlKCJ0ZXh0dXJlVGltZXN0YW1wIix0aGlzLnRleHR1cmVUaW1lc3RhbXBBdHRyaWJ1dGUpO3RoaXMuYmFzZVRleHR1cmVUaW1lc3RhbXBEYXRhPW5ldyBGbG9hdDMyQXJyYXkoNCphKTt0aGlzLmJhc2VUZXh0dXJlVGltZXN0YW1wQXR0cmlidXRlPW5ldyBUSFJFRS5CdWZmZXJBdHRyaWJ1dGUodGhpcy5iYXNlVGV4dHVyZVRpbWVzdGFtcERhdGEsMSk7dGhpcy5iYXNlVGV4dHVyZVRpbWVzdGFtcEF0dHJpYnV0ZS5zZXREeW5hbWljKCEwKTt0aGlzLmdlb21ldHJ5LmFkZEF0dHJpYnV0ZSgiYmFzZVRleHR1cmVUaW1lc3RhbXAiLHRoaXMuYmFzZVRleHR1cmVUaW1lc3RhbXBBdHRyaWJ1dGUpO2Y9NCphO3RoaXMudmVydGV4SW5kZXhEYXRhPW5ldyBGbG9hdDMyQXJyYXkoZik7Zm9yKGc9MDtnPGY7ZysrKXRoaXMudmVydGV4SW5kZXhEYXRhW2ddPWc7dGhpcy52ZXJ0ZXhJbmRleEF0dHJpYnV0ZT1uZXcgVEhSRUUuQnVmZmVyQXR0cmlidXRlKHRoaXMudmVydGV4SW5kZXhEYXRhLAoxKTt0aGlzLmdlb21ldHJ5LmFkZEF0dHJpYnV0ZSgidmVydGV4SW5kZXgiLHRoaXMudmVydGV4SW5kZXhBdHRyaWJ1dGUpO3RoaXMuZGVmYXVsdFRleHR1cmVDYW52YXM9dGhpcy5jcmVhdGVEZWZhdWx0VGV4dHVyZUNhbnZhcygpO3RoaXMuZGVmYXVsdFRleHR1cmU9bmV3IFRIUkVFLlRleHR1cmUodGhpcy5kZWZhdWx0VGV4dHVyZUNhbnZhcyk7dGhpcy5kZWZhdWx0VGV4dHVyZS5taW5GaWx0ZXI9VEhSRUUuTGluZWFyRmlsdGVyO3RoaXMuZGVmYXVsdFRleHR1cmUubWFnRmlsdGVyPVRIUkVFLk5lYXJlc3RGaWx0ZXI7dGhpcy5kZWZhdWx0VGV4dHVyZS5uZWVkc1VwZGF0ZT0hMDt0aGlzLnNwcml0ZUF0bGFzPW5ldyBYbShhLGMsZCk7dGhpcy5tYXRlcmlhbD1uZXcgWW0odGhpcy5kZWZhdWx0VGV4dHVyZSx0aGlzLnNwcml0ZUF0bGFzKTt0aGlzLm9uQmVmb3JlUmVuZGVyPSgpPT57dGhpcy5tYXRlcmlhbC51cGRhdGVBdGxhc1VuaWZvcm1zKCl9O3RoaXMudGltZT10aGlzLmNvbnN0cnVjdGlvblRpbWVzdGFtcD0KRGF0ZS5ub3coKTt0aGlzLmZydXN0dW1DdWxsZWQ9ITF9Y3JlYXRlU3ByaXRlKCl7cmV0dXJuIG5ldyBabSh0aGlzLHRoaXMubmV4dEluZGV4KyspfWdldCB0aW1lKCl7cmV0dXJuIHRoaXMubWF0ZXJpYWwudGltZSt0aGlzLmNvbnN0cnVjdGlvblRpbWVzdGFtcH1zZXQgdGltZShhKXt0aGlzLm1hdGVyaWFsLnRpbWU9YS10aGlzLmNvbnN0cnVjdGlvblRpbWVzdGFtcH1jcmVhdGVEZWZhdWx0VGV4dHVyZUNhbnZhcygpe2NvbnN0IGE9dGhpcy5kZWZhdWx0VGV4dHVyZUNhbnZhcz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKSxjPWEud2lkdGg9dGhpcy5pbWFnZVdpZHRoLGQ9YS5oZWlnaHQ9dGhpcy5pbWFnZUhlaWdodCxmPWEuZ2V0Q29udGV4dCgiMmQiKSxnPW5ldyBJbWFnZTtnLm9ubG9hZD0oKT0+e2YuZHJhd0ltYWdlKGcsMCwwLGMsZCk7dGhpcy5kZWZhdWx0VGV4dHVyZS5uZWVkc1VwZGF0ZT0hMH07Zy5zcmM9VVJMLmNyZWF0ZU9iamVjdFVSTChuZXcgQmxvYihbJ1xuXHgzY3N2ZyB2ZXJzaW9uXHgzZCIxLjEiXG4gICAgIGJhc2VQcm9maWxlXHgzZCJmdWxsIlxuICAgICB3aWR0aFx4M2QiMTI4IiBoZWlnaHRceDNkIjEyOCJcbiAgICAgeG1sbnNceDNkImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIlxuICAgICB4bWxuczp4bGlua1x4M2QiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayJceDNlXG4gIFx4M2NkZWZzXHgzZVxuICAgIFx4M2NsaW5lYXJHcmFkaWVudCBpZFx4M2QibGluZWFyR3JhZGllbnQzNzc0Ilx4M2VcbiAgICAgIFx4M2NzdG9wXG4gICAgICAgICBzdHlsZVx4M2Qic3RvcC1jb2xvcjojODA4MDgwO3N0b3Atb3BhY2l0eToxOyJcbiAgICAgICAgIG9mZnNldFx4M2QiMCIgL1x4M2VcbiAgICAgIFx4M2NzdG9wXG4gICAgICAgICBzdHlsZVx4M2Qic3RvcC1jb2xvcjojNTU1NTU1O3N0b3Atb3BhY2l0eToxOyJcbiAgICAgICAgIG9mZnNldFx4M2QiMSIgL1x4M2VcbiAgICBceDNjL2xpbmVhckdyYWRpZW50XHgzZVxuICAgIFx4M2NyYWRpYWxHcmFkaWVudFxuICAgICAgIHhsaW5rOmhyZWZceDNkIiNsaW5lYXJHcmFkaWVudDM3NzQiXG4gICAgICAgaWRceDNkInJhZGlhbEdyYWRpZW50Mzc4MCJcbiAgICAgICBjeFx4M2QiODAiXG4gICAgICAgY3lceDNkIjQwIlxuICAgICAgIGZ4XHgzZCI4MCJcbiAgICAgICBmeVx4M2QiNDAiXG4gICAgICAgclx4M2QiODAiXG4gICAgICAgZ3JhZGllbnRVbml0c1x4M2QidXNlclNwYWNlT25Vc2UiXG4gICAgICAgc3ByZWFkTWV0aG9kXHgzZCJwYWQiIC9ceDNlXG4gIFx4M2MvZGVmc1x4M2VcbiAgXHgzY2NpcmNsZSBjeFx4M2QiNTAlIiBjeVx4M2QiNTAlIiByXHgzZCI1MCUiIGZpbGxceDNkInVybCgjcmFkaWFsR3JhZGllbnQzNzgwKSIgL1x4M2Vcblx4M2Mvc3ZnXHgzZVxuJ10sCnt0eXBlOiJpbWFnZS9zdmcreG1sO2NoYXJzZXRceDNkdXRmLTgifSkpO3JldHVybiBhfWdldFgoYSl7cmV0dXJuIHRoaXMucG9zaXRpb25EYXRhWzEyKmFdfXNldFgoYSxjKXthKj0xMjt0aGlzLnBvc2l0aW9uRGF0YVthKzBdPWM7dGhpcy5wb3NpdGlvbkRhdGFbYSszXT1jK3RoaXMuc3ByaXRlV2lkdGg7dGhpcy5wb3NpdGlvbkRhdGFbYSs2XT1jK3RoaXMuc3ByaXRlV2lkdGg7dGhpcy5wb3NpdGlvbkRhdGFbYSs5XT1jO3RoaXMucG9zaXRpb25BdHRyaWJ1dGUubmVlZHNVcGRhdGU9ITB9Z2V0WShhKXtyZXR1cm4gdGhpcy5wb3NpdGlvbkRhdGFbMTIqYSsxXX1zZXRZKGEsYyl7YSo9MTI7dGhpcy5wb3NpdGlvbkRhdGFbYSsxXT1jO3RoaXMucG9zaXRpb25EYXRhW2ErNF09Yzt0aGlzLnBvc2l0aW9uRGF0YVthKzddPWMrdGhpcy5zcHJpdGVIZWlnaHQ7dGhpcy5wb3NpdGlvbkRhdGFbYSsxMF09Yyt0aGlzLnNwcml0ZUhlaWdodDt0aGlzLnBvc2l0aW9uQXR0cmlidXRlLm5lZWRzVXBkYXRlPQohMH1nZXRaKGEpe3JldHVybiB0aGlzLnBvc2l0aW9uRGF0YVsxMiphKzJdfXNldFooYSxjKXthKj0xMjt0aGlzLnBvc2l0aW9uRGF0YVthKzJdPWM7dGhpcy5wb3NpdGlvbkRhdGFbYSs1XT1jO3RoaXMucG9zaXRpb25EYXRhW2ErOF09Yzt0aGlzLnBvc2l0aW9uRGF0YVthKzExXT1jO3RoaXMucG9zaXRpb25BdHRyaWJ1dGUubmVlZHNVcGRhdGU9ITB9Z2V0UihhKXtyZXR1cm4gdGhpcy5jb2xvckRhdGFbMTYqYV19c2V0UihhLGMpe2EqPTE2O3RoaXMuY29sb3JEYXRhW2ErMF09Yzt0aGlzLmNvbG9yRGF0YVthKzRdPWM7dGhpcy5jb2xvckRhdGFbYSs4XT1jO3RoaXMuY29sb3JEYXRhW2ErMTJdPWM7dGhpcy5jb2xvckF0dHJpYnV0ZS5uZWVkc1VwZGF0ZT0hMH1nZXRHKGEpe3JldHVybiB0aGlzLmNvbG9yRGF0YVsxNiphKzFdfXNldEcoYSxjKXthKj0xNjt0aGlzLmNvbG9yRGF0YVthKzFdPWM7dGhpcy5jb2xvckRhdGFbYSs1XT1jO3RoaXMuY29sb3JEYXRhW2ErOV09Yzt0aGlzLmNvbG9yRGF0YVthKwoxM109Yzt0aGlzLmNvbG9yQXR0cmlidXRlLm5lZWRzVXBkYXRlPSEwfWdldEIoYSl7cmV0dXJuIHRoaXMuY29sb3JEYXRhWzE2KmErMl19c2V0QihhLGMpe2EqPTE2O3RoaXMuY29sb3JEYXRhW2ErMl09Yzt0aGlzLmNvbG9yRGF0YVthKzZdPWM7dGhpcy5jb2xvckRhdGFbYSsxMF09Yzt0aGlzLmNvbG9yRGF0YVthKzE0XT1jO3RoaXMuY29sb3JBdHRyaWJ1dGUubmVlZHNVcGRhdGU9ITB9Z2V0QShhKXtyZXR1cm4gdGhpcy5jb2xvckRhdGFbMTYqYSszXX1zZXRBKGEsYyl7YSo9MTY7dGhpcy5jb2xvckRhdGFbYSszXT1jO3RoaXMuY29sb3JEYXRhW2ErN109Yzt0aGlzLmNvbG9yRGF0YVthKzExXT1jO3RoaXMuY29sb3JEYXRhW2ErMTVdPWM7dGhpcy5jb2xvckF0dHJpYnV0ZS5uZWVkc1VwZGF0ZT0hMH1nZXRCYXNlWChhKXtyZXR1cm4gdGhpcy5iYXNlUG9zaXRpb25EYXRhWzEyKmFdfXNldEJhc2VYKGEsYyl7YSo9MTI7dGhpcy5iYXNlUG9zaXRpb25EYXRhW2ErMF09Yzt0aGlzLmJhc2VQb3NpdGlvbkRhdGFbYSsKM109Yyt0aGlzLnNwcml0ZVdpZHRoO3RoaXMuYmFzZVBvc2l0aW9uRGF0YVthKzZdPWMrdGhpcy5zcHJpdGVXaWR0aDt0aGlzLmJhc2VQb3NpdGlvbkRhdGFbYSs5XT1jO3RoaXMuYmFzZVBvc2l0aW9uQXR0cmlidXRlLm5lZWRzVXBkYXRlPSEwfWdldEJhc2VZKGEpe3JldHVybiB0aGlzLmJhc2VQb3NpdGlvbkRhdGFbMTIqYSsxXX1zZXRCYXNlWShhLGMpe2EqPTEyO3RoaXMuYmFzZVBvc2l0aW9uRGF0YVthKzFdPWM7dGhpcy5iYXNlUG9zaXRpb25EYXRhW2ErNF09Yzt0aGlzLmJhc2VQb3NpdGlvbkRhdGFbYSs3XT1jK3RoaXMuc3ByaXRlSGVpZ2h0O3RoaXMuYmFzZVBvc2l0aW9uRGF0YVthKzEwXT1jK3RoaXMuc3ByaXRlSGVpZ2h0O3RoaXMuYmFzZVBvc2l0aW9uQXR0cmlidXRlLm5lZWRzVXBkYXRlPSEwfWdldEJhc2VaKGEpe3JldHVybiB0aGlzLmJhc2VQb3NpdGlvbkRhdGFbMTIqYSsyXX1zZXRCYXNlWihhLGMpe2EqPTEyO3RoaXMuYmFzZVBvc2l0aW9uRGF0YVthKzJdPWM7CnRoaXMuYmFzZVBvc2l0aW9uRGF0YVthKzVdPWM7dGhpcy5iYXNlUG9zaXRpb25EYXRhW2ErOF09Yzt0aGlzLmJhc2VQb3NpdGlvbkRhdGFbYSsxMV09Yzt0aGlzLmJhc2VQb3NpdGlvbkF0dHJpYnV0ZS5uZWVkc1VwZGF0ZT0hMH1nZXRCYXNlUihhKXtyZXR1cm4gdGhpcy5iYXNlQ29sb3JEYXRhWzE2KmFdfXNldEJhc2VSKGEsYyl7YSo9MTY7dGhpcy5iYXNlQ29sb3JEYXRhW2ErMF09Yzt0aGlzLmJhc2VDb2xvckRhdGFbYSs0XT1jO3RoaXMuYmFzZUNvbG9yRGF0YVthKzhdPWM7dGhpcy5iYXNlQ29sb3JEYXRhW2ErMTJdPWM7dGhpcy5iYXNlQ29sb3JBdHRyaWJ1dGUubmVlZHNVcGRhdGU9ITB9Z2V0QmFzZUcoYSl7cmV0dXJuIHRoaXMuYmFzZUNvbG9yRGF0YVsxNiphKzFdfXNldEJhc2VHKGEsYyl7YSo9MTY7dGhpcy5iYXNlQ29sb3JEYXRhW2ErMV09Yzt0aGlzLmJhc2VDb2xvckRhdGFbYSs1XT1jO3RoaXMuYmFzZUNvbG9yRGF0YVthKzldPWM7dGhpcy5iYXNlQ29sb3JEYXRhW2ErCjEzXT1jO3RoaXMuYmFzZUNvbG9yQXR0cmlidXRlLm5lZWRzVXBkYXRlPSEwfWdldEJhc2VCKGEpe3JldHVybiB0aGlzLmJhc2VDb2xvckRhdGFbMTYqYSsyXX1zZXRCYXNlQihhLGMpe2EqPTE2O3RoaXMuYmFzZUNvbG9yRGF0YVthKzJdPWM7dGhpcy5iYXNlQ29sb3JEYXRhW2ErNl09Yzt0aGlzLmJhc2VDb2xvckRhdGFbYSsxMF09Yzt0aGlzLmJhc2VDb2xvckRhdGFbYSsxNF09Yzt0aGlzLmJhc2VDb2xvckF0dHJpYnV0ZS5uZWVkc1VwZGF0ZT0hMH1nZXRCYXNlQShhKXtyZXR1cm4gdGhpcy5iYXNlQ29sb3JEYXRhWzE2KmErM119c2V0QmFzZUEoYSxjKXthKj0xNjt0aGlzLmJhc2VDb2xvckRhdGFbYSszXT1jO3RoaXMuYmFzZUNvbG9yRGF0YVthKzddPWM7dGhpcy5iYXNlQ29sb3JEYXRhW2ErMTFdPWM7dGhpcy5iYXNlQ29sb3JEYXRhW2ErMTVdPWM7dGhpcy5iYXNlQ29sb3JBdHRyaWJ1dGUubmVlZHNVcGRhdGU9ITB9Z2V0T3BhY2l0eShhKXtyZXR1cm4gdGhpcy5vcGFjaXR5RGF0YVs0KgphXX1zZXRPcGFjaXR5KGEsYyl7YSo9NDt0aGlzLm9wYWNpdHlEYXRhW2ErMF09Yzt0aGlzLm9wYWNpdHlEYXRhW2ErMV09Yzt0aGlzLm9wYWNpdHlEYXRhW2ErMl09Yzt0aGlzLm9wYWNpdHlEYXRhW2ErM109Yzt0aGlzLm9wYWNpdHlBdHRyaWJ1dGUubmVlZHNVcGRhdGU9ITB9Z2V0QmFzZU9wYWNpdHkoYSl7cmV0dXJuIHRoaXMuYmFzZU9wYWNpdHlEYXRhWzQqYV19c2V0QmFzZU9wYWNpdHkoYSxjKXthKj00O3RoaXMuYmFzZU9wYWNpdHlEYXRhW2ErMF09Yzt0aGlzLmJhc2VPcGFjaXR5RGF0YVthKzFdPWM7dGhpcy5iYXNlT3BhY2l0eURhdGFbYSsyXT1jO3RoaXMuYmFzZU9wYWNpdHlEYXRhW2ErM109Yzt0aGlzLmJhc2VPcGFjaXR5QXR0cmlidXRlLm5lZWRzVXBkYXRlPSEwfWdldFRpbWVzdGFtcChhKXtyZXR1cm4gdGhpcy50aW1lc3RhbXBEYXRhWzQqYV0rdGhpcy5jb25zdHJ1Y3Rpb25UaW1lc3RhbXB9c2V0VGltZXN0YW1wKGEsYyl7YSo9NDtjLT10aGlzLmNvbnN0cnVjdGlvblRpbWVzdGFtcDsKdGhpcy50aW1lc3RhbXBEYXRhW2ErMF09Yzt0aGlzLnRpbWVzdGFtcERhdGFbYSsxXT1jO3RoaXMudGltZXN0YW1wRGF0YVthKzJdPWM7dGhpcy50aW1lc3RhbXBEYXRhW2ErM109Yzt0aGlzLnRpbWVzdGFtcEF0dHJpYnV0ZS5uZWVkc1VwZGF0ZT0hMH1nZXRCYXNlVGltZXN0YW1wKGEpe3JldHVybiB0aGlzLmJhc2VUaW1lc3RhbXBEYXRhWzQqYV0rdGhpcy5jb25zdHJ1Y3Rpb25UaW1lc3RhbXB9c2V0QmFzZVRpbWVzdGFtcChhLGMpe2EqPTQ7Yy09dGhpcy5jb25zdHJ1Y3Rpb25UaW1lc3RhbXA7dGhpcy5iYXNlVGltZXN0YW1wRGF0YVthKzBdPWM7dGhpcy5iYXNlVGltZXN0YW1wRGF0YVthKzFdPWM7dGhpcy5iYXNlVGltZXN0YW1wRGF0YVthKzJdPWM7dGhpcy5iYXNlVGltZXN0YW1wRGF0YVthKzNdPWM7dGhpcy5iYXNlVGltZXN0YW1wQXR0cmlidXRlLm5lZWRzVXBkYXRlPSEwfWdldFRleHR1cmVJbmRleChhKXtyZXR1cm4gdGhpcy50ZXh0dXJlSW5kZXhEYXRhWzQqYV19c2V0VGV4dHVyZUluZGV4KGEsCmMpe2EqPTQ7dGhpcy50ZXh0dXJlSW5kZXhEYXRhW2ErMF09Yzt0aGlzLnRleHR1cmVJbmRleERhdGFbYSsxXT1jO3RoaXMudGV4dHVyZUluZGV4RGF0YVthKzJdPWM7dGhpcy50ZXh0dXJlSW5kZXhEYXRhW2ErM109Yzt0aGlzLnRleHR1cmVJbmRleEF0dHJpYnV0ZS5uZWVkc1VwZGF0ZT0hMH1nZXRCYXNlVGV4dHVyZUluZGV4KGEpe3JldHVybiB0aGlzLmJhc2VUZXh0dXJlSW5kZXhEYXRhWzQqYV19c2V0QmFzZVRleHR1cmVJbmRleChhLGMpe2EqPTQ7dGhpcy5iYXNlVGV4dHVyZUluZGV4RGF0YVthKzBdPWM7dGhpcy5iYXNlVGV4dHVyZUluZGV4RGF0YVthKzFdPWM7dGhpcy5iYXNlVGV4dHVyZUluZGV4RGF0YVthKzJdPWM7dGhpcy5iYXNlVGV4dHVyZUluZGV4RGF0YVthKzNdPWM7dGhpcy5iYXNlVGV4dHVyZUluZGV4QXR0cmlidXRlLm5lZWRzVXBkYXRlPSEwfWdldFRleHR1cmVUaW1lc3RhbXAoYSl7cmV0dXJuIHRoaXMudGV4dHVyZVRpbWVzdGFtcERhdGFbNCphXSt0aGlzLmNvbnN0cnVjdGlvblRpbWVzdGFtcH1zZXRUZXh0dXJlVGltZXN0YW1wKGEsCmMpe2EqPTQ7Yy09dGhpcy5jb25zdHJ1Y3Rpb25UaW1lc3RhbXA7dGhpcy50ZXh0dXJlVGltZXN0YW1wRGF0YVthKzBdPWM7dGhpcy50ZXh0dXJlVGltZXN0YW1wRGF0YVthKzFdPWM7dGhpcy50ZXh0dXJlVGltZXN0YW1wRGF0YVthKzJdPWM7dGhpcy50ZXh0dXJlVGltZXN0YW1wRGF0YVthKzNdPWM7dGhpcy50ZXh0dXJlVGltZXN0YW1wQXR0cmlidXRlLm5lZWRzVXBkYXRlPSEwfWdldEJhc2VUZXh0dXJlVGltZXN0YW1wKGEpe3JldHVybiB0aGlzLmJhc2VUZXh0dXJlVGltZXN0YW1wRGF0YVs0KmFdK3RoaXMuY29uc3RydWN0aW9uVGltZXN0YW1wfXNldEJhc2VUZXh0dXJlVGltZXN0YW1wKGEsYyl7YSo9NDtjLT10aGlzLmNvbnN0cnVjdGlvblRpbWVzdGFtcDt0aGlzLmJhc2VUZXh0dXJlVGltZXN0YW1wRGF0YVthKzBdPWM7dGhpcy5iYXNlVGV4dHVyZVRpbWVzdGFtcERhdGFbYSsxXT1jO3RoaXMuYmFzZVRleHR1cmVUaW1lc3RhbXBEYXRhW2ErMl09Yzt0aGlzLmJhc2VUZXh0dXJlVGltZXN0YW1wRGF0YVthKwozXT1jO3RoaXMuYmFzZVRleHR1cmVUaW1lc3RhbXBBdHRyaWJ1dGUubmVlZHNVcGRhdGU9ITB9cmViYXNlKGEsYyl7Yz12b2lkIDA9PT1jP3RoaXMudGltZTpjO2NvbnN0IGQ9dGhpcy5nZXRCYXNlVGltZXN0YW1wKGEpLGY9dGhpcy5nZXRUaW1lc3RhbXAoYSksZz1jPj1mPzE6Yzw9ZD8wOnRoaXMubWF0ZXJpYWwuYXBwbHlFYXNpbmcoKGMtZCkvKGYtZCkpLGw9KGssbSk9PmsqZyttKigxLWcpO3RoaXMuc2V0QmFzZVgoYSxsKHRoaXMuZ2V0WChhKSx0aGlzLmdldEJhc2VYKGEpKSk7dGhpcy5zZXRCYXNlWShhLGwodGhpcy5nZXRZKGEpLHRoaXMuZ2V0QmFzZVkoYSkpKTt0aGlzLnNldEJhc2VaKGEsbCh0aGlzLmdldFooYSksdGhpcy5nZXRCYXNlWihhKSkpO3RoaXMuc2V0QmFzZVIoYSxsKHRoaXMuZ2V0UihhKSx0aGlzLmdldEJhc2VSKGEpKSk7dGhpcy5zZXRCYXNlRyhhLGwodGhpcy5nZXRHKGEpLHRoaXMuZ2V0QmFzZUcoYSkpKTt0aGlzLnNldEJhc2VCKGEsbCh0aGlzLmdldEIoYSksCnRoaXMuZ2V0QmFzZUIoYSkpKTt0aGlzLnNldEJhc2VBKGEsbCh0aGlzLmdldEEoYSksdGhpcy5nZXRCYXNlQShhKSkpO3RoaXMuc2V0QmFzZU9wYWNpdHkoYSxsKHRoaXMuZ2V0T3BhY2l0eShhKSx0aGlzLmdldEJhc2VPcGFjaXR5KGEpKSk7Yz1jPj1mP2M6bChmLGQpO3RoaXMuc2V0QmFzZVRpbWVzdGFtcChhLGMpfXNldFNwcml0ZUltYWdlRGF0YShhLGMsZCl7dGhpcy5zcHJpdGVBdGxhcy5zZXRTcHJpdGVJbWFnZURhdGEoYSxjLGQpfXN3aXRjaFRleHR1cmVzKGEsYyxkKXtjb25zdCBmPXRoaXMuZ2V0VGV4dHVyZUluZGV4KGEpO3RoaXMuc2V0QmFzZVRleHR1cmVJbmRleChhLGYpO3RoaXMuc2V0VGV4dHVyZUluZGV4KGEsMD09PWY/MTowKTt0aGlzLnNldEJhc2VUZXh0dXJlVGltZXN0YW1wKGEsYyk7dGhpcy5zZXRUZXh0dXJlVGltZXN0YW1wKGEsZCl9ZmluZFNwcml0ZXMoYSxjKXtjb25zdCBkPVtdO2ZvcihsZXQgZj0wO2Y8dGhpcy5jYXBhY2l0eTtmKyspe2NvbnN0IGc9MTIqCmY7YT49dGhpcy5wb3NpdGlvbkRhdGFbZyswXSYmYTw9dGhpcy5wb3NpdGlvbkRhdGFbZys2XSYmYz49dGhpcy5wb3NpdGlvbkRhdGFbZysxXSYmYzw9dGhpcy5wb3NpdGlvbkRhdGFbZys3XSYmZC5wdXNoKGYpfXJldHVybiBkfX07Cjwvc2NyaXB0PgoKPHNjcmlwdD4vL35+V0VCUEFUSH5+L2ZhY2V0cy1kaXZlL2xpYi93b3JkdHJlZS5qcwpjb25zdCBhbj0vXGJbLSdcd10rXGIvZztmdW5jdGlvbiBibihhKXtyZXR1cm5gJHt0eXBlb2YgYX1cdTAwMUYke2F9YH1mdW5jdGlvbiBjbihhKXtyZXR1cm4gYS50b0xvd2VyQ2FzZSgpLm1hdGNoKGFuKXx8W119CmZ1bmN0aW9uIGRuKGEpe2lmKDI+YS52YWx1ZUNvdW50KXJldHVybiBudWxsO2Zvcih2YXIgYz0oZyxsKT0+e2ZvcihsZXQgaz0wO2s8Zy5sZW5ndGg7aysrKWxbZ1trXV09ITB9LGQ9e30sZj1hO2Y7KWMoZi5jb21tb25Xb3JkcyxkKSxmPWYucGFyZW50O2ZvcihmPTA7ZjxhLmNoaWxkcmVuLmxlbmd0aDtmKyspYyhhLmNoaWxkcmVuW2ZdLmNvbW1vbldvcmRzLGQpO2M9e307Zm9yKGNvbnN0IGcgaW4gYS52YWx1ZUhhc2gpe2NvbnN0IHtjb3VudDpsLHdvcmRzOmt9PWEudmFsdWVIYXNoW2ddO2Zvcihjb25zdCBtIGluIGspbSBpbiBkfHwoY1ttXT0oY1ttXXx8MCkrbCxjW21dPT09YS50b3RhbENvdW50JiYoYS5jb21tb25Xb3Jkcy5wdXNoKG0pLGRbbV09ITAsZGVsZXRlIGNbbV0pKX1hPW51bGw7ZD0wO2Zvcihjb25zdCBnIGluIGMpY1tnXT5kJiYoYT1nLGQ9Y1tnXSk7cmV0dXJuIGF9CmZ1bmN0aW9uIGVuKGEpe3ZhciBjPXtwYXJlbnQ6bnVsbCxjb21tb25Xb3JkczpbXSxsZXZlbDoxLG9yZGVyOjAsdG90YWxDb3VudDowLHZhbHVlSGFzaDp7fSx2YWx1ZUNvdW50OjAsbm9uVmFsdWVDb3VudDowLGNoaWxkcmVuOltdfTtjb25zdCBkPXtyb290OmMsbm9kZUhhc2g6e30saGlnaGVzdExldmVsOjEsbGV2ZWxIYXNoOnsxOmN9fTtmb3IodmFyIGYgaW4gYSl7aWYoIWEuaGFzT3duUHJvcGVydHkoZikpY29udGludWU7Y29uc3Qge3ZhbHVlOnEsY291bnQ6cix3b3Jkczp0fT1hW2ZdOyJzdHJpbmciPT09dHlwZW9mIHE/KGMudmFsdWVIYXNoW2ZdPXt2YWx1ZTpxLGNvdW50OnIsd29yZHM6dH0sYy52YWx1ZUNvdW50Kz1yKTpjLm5vblZhbHVlQ291bnQrPXI7Yy50b3RhbENvdW50Kz1yO2Qubm9kZUhhc2hbZl09Y31hPWMubGV2ZWw7aWYoYy5ub25WYWx1ZUNvdW50KXthKys7Zj17cGFyZW50OmMsY29tbW9uV29yZHM6W10sbGV2ZWw6YSxvcmRlcjowLHRvdGFsQ291bnQ6Yy5ub25WYWx1ZUNvdW50LAp2YWx1ZUhhc2g6e30sdmFsdWVDb3VudDowLG5vblZhbHVlQ291bnQ6Yy5ub25WYWx1ZUNvdW50LGNoaWxkcmVuOltdfTtjLm5vblZhbHVlQ291bnQ9MDtjLmNoaWxkcmVuLnB1c2goZik7ZC5oaWdoZXN0TGV2ZWw9YTtkLmxldmVsSGFzaFthXT1mO2Zvcih2YXIgZyBpbiBkLm5vZGVIYXNoKWcgaW4gYy52YWx1ZUhhc2h8fChkLm5vZGVIYXNoW2ddPWYpfWM9W2NdO2ZvcihnPXE9PnEudmFsdWVDb3VudCtxLm5vblZhbHVlQ291bnQ7MTAwPmEmJmMubGVuZ3RoOyl7Zj0wO3ZhciBsPWcoY1tmXSk7Zm9yKHZhciBrPTE7azxjLmxlbmd0aDtrKyspe2NvbnN0IHE9ZyhjW2tdKTtxPmwmJihmPWssbD1xKX1sPWNbZl07aWYoaz1kbihsKSl7YSsrO2Y9e3BhcmVudDpsLGNvbW1vbldvcmRzOltrXSxsZXZlbDphLG9yZGVyOjAsdG90YWxDb3VudDowLHZhbHVlSGFzaDp7fSx2YWx1ZUNvdW50OjAsbm9uVmFsdWVDb3VudDowLGNoaWxkcmVuOltdfTtsLmNoaWxkcmVuLnB1c2goZik7Yy5wdXNoKGYpOwpmb3IoY29uc3QgcSBpbiBsLnZhbHVlSGFzaCl7aWYoIWwudmFsdWVIYXNoLmhhc093blByb3BlcnR5KHEpKWNvbnRpbnVlO2NvbnN0IHt2YWx1ZTpyLGNvdW50OnQsd29yZHM6dn09bC52YWx1ZUhhc2hbcV07diYmayBpbiB2JiYoZi52YWx1ZUhhc2hbcV09e3ZhbHVlOnIsY291bnQ6dCx3b3Jkczp2fSxmLnZhbHVlQ291bnQrPXQsZi50b3RhbENvdW50Kz10LGRlbGV0ZSBsLnZhbHVlSGFzaFtxXSxsLnZhbHVlQ291bnQtPXQsZC5ub2RlSGFzaFtxXT1mLGQuaGlnaGVzdExldmVsPWEsZC5sZXZlbEhhc2hbYV09Zil9fWVsc2UgYy5zcGxpY2UoZiwxKX1sZXQgbT0wO2NvbnN0IHA9cT0+e3Eub3JkZXI9KyttO2ZvcihsZXQgcj0wO3I8cS5jaGlsZHJlbi5sZW5ndGg7cisrKXAocS5jaGlsZHJlbltyXSl9O3AoZC5yb290KTtyZXR1cm4gZH07Cjwvc2NyaXB0PgoKPHNjcmlwdD4vL35+V0VCUEFUSH5+L2ZhY2V0cy1kaXZlL2xpYi9zdGF0cy5qcwpmdW5jdGlvbiBmbihhKXtpZighYXx8IWEubGVuZ3RoKXJldHVybltdO2NvbnN0IGM9e307Zm9yKGxldCBkPTA7ZDxhLmxlbmd0aDtkKyspaWYoYVtkXSl7Y29uc3QgZj1PYmplY3Qua2V5cyhhW2RdKTtmb3IobGV0IGc9MDtnPGYubGVuZ3RoO2crKyljW2ZbZ11dPSEwfXJldHVybiBPYmplY3Qua2V5cyhjKX1jb25zdCBnbj1hPT4ibnVtYmVyIj09PXR5cGVvZiBhJiZhPj4wPT09YTsKY2xhc3MgaG57Y29uc3RydWN0b3IoKXt0aGlzLnVuaXF1ZUNvdW50PXRoaXMudG90YWxDb3VudD0wO3RoaXMudmFsdWVIYXNoPXt9O3RoaXMub3RoZXJDb3VudD10aGlzLnN0cmluZ0NvdW50PXRoaXMuaW50ZWdlckNvdW50PXRoaXMubnVtYmVyQ291bnQ9MDt0aGlzLnN0cmluZ0xlbmd0aHNDb3VudD10aGlzLnN0cmluZ01lYW5MZW5ndGg9dGhpcy5zdHJpbmdNYXhMZW5ndGg9dGhpcy5zdHJpbmdNaW5MZW5ndGg9dGhpcy5udW1iZXJNYXg9dGhpcy5udW1iZXJNaW49bnVsbDt0aGlzLnN0cmluZ0xlbmd0aHNIYXNoPXt9O3RoaXMudG90YWxXb3JkQ291bnQ9dGhpcy5tdWx0aXdvcmRDb3VudD0wO3RoaXMud29yZENvdW50cz17fTt0aGlzLnVuaXF1ZVdvcmRDb3VudD0wO3RoaXMud29yZFRyZWU9bnVsbH1pc051bWVyaWMoKXtyZXR1cm4gMDx0aGlzLm51bWJlckNvdW50JiZudWxsIT09dGhpcy5udW1iZXJNaW4mJm51bGwhPT10aGlzLm51bWJlck1heCYmdGhpcy5udW1iZXJNYXg+dGhpcy5udW1iZXJNaW59aXNJbnRlZ2VyKCl7cmV0dXJuIDA8CnRoaXMubnVtYmVyQ291bnQmJnRoaXMuaW50ZWdlckNvdW50PT09dGhpcy5udW1iZXJDb3VudH1hZGRWYWx1ZShhKXt0aGlzLnRvdGFsQ291bnQrKztjb25zdCBjPWJuKGEpO2MgaW4gdGhpcy52YWx1ZUhhc2h8fCh0aGlzLnZhbHVlSGFzaFtjXT17dmFsdWU6YSxjb3VudDowfSx0aGlzLnVuaXF1ZUNvdW50KyspO3RoaXMudmFsdWVIYXNoW2NdLmNvdW50Kys7c3dpdGNoKHR5cGVvZiBhKXtjYXNlICJudW1iZXIiOnRoaXMuaW5jb3Jwb3JhdGVOdW1iZXJWYWx1ZShhKTticmVhaztjYXNlICJzdHJpbmciOnRoaXMuaW5jb3Jwb3JhdGVTdHJpbmdWYWx1ZShjLGEpO2JyZWFrO2RlZmF1bHQ6dGhpcy5vdGhlckNvdW50Kyt9fWluY29ycG9yYXRlTnVtYmVyVmFsdWUoYSl7dGhpcy5udW1iZXJDb3VudCsrO2duKGEpJiZ0aGlzLmludGVnZXJDb3VudCsrO2lzTmFOKGEpfHwodGhpcy5udW1iZXJNaW49bnVsbD09PXRoaXMubnVtYmVyTWluP2E6TWF0aC5taW4odGhpcy5udW1iZXJNaW4sYSksdGhpcy5udW1iZXJNYXg9Cm51bGw9PT10aGlzLm51bWJlck1heD9hOk1hdGgubWF4KHRoaXMubnVtYmVyTWF4LGEpKX1pbmNvcnBvcmF0ZVN0cmluZ1ZhbHVlKGEsYyl7dGhpcy5zdHJpbmdDb3VudCsrO3ZhciBkPWMubGVuZ3RoO2QgaW4gdGhpcy5zdHJpbmdMZW5ndGhzSGFzaHx8KHRoaXMuc3RyaW5nTGVuZ3Roc0NvdW50PSh0aGlzLnN0cmluZ0xlbmd0aHNDb3VudHx8MCkrMSk7dGhpcy5zdHJpbmdMZW5ndGhzSGFzaFtkXT0odGhpcy5zdHJpbmdMZW5ndGhzSGFzaFtkXXx8MCkrMTt0aGlzLnN0cmluZ01pbkxlbmd0aD1udWxsPT09dGhpcy5zdHJpbmdNaW5MZW5ndGg/ZDpNYXRoLm1pbih0aGlzLnN0cmluZ01pbkxlbmd0aCxkKTt0aGlzLnN0cmluZ01heExlbmd0aD1udWxsPT09dGhpcy5zdHJpbmdNYXhMZW5ndGg/ZDpNYXRoLm1heCh0aGlzLnN0cmluZ01heExlbmd0aCxkKTt0aGlzLnN0cmluZ01lYW5MZW5ndGg9KHRoaXMuc3RyaW5nTWVhbkxlbmd0aHx8MCkqKHRoaXMuc3RyaW5nQ291bnQtMSkvdGhpcy5zdHJpbmdDb3VudCsKZC90aGlzLnN0cmluZ0NvdW50O2lmKCF0aGlzLnZhbHVlSGFzaFthXS53b3Jkcyl7Yz1jbihjLnRvTG93ZXJDYXNlKCkpOzE8Yy5sZW5ndGgmJih0aGlzLm11bHRpd29yZENvdW50KyssdGhpcy50b3RhbFdvcmRDb3VudCs9Yy5sZW5ndGgpO2Q9dGhpcy52YWx1ZUhhc2hbYV0ud29yZHM9e307Zm9yKGxldCBmPTA7ZjxjLmxlbmd0aDtmKyspe2NvbnN0IGc9Y1tmXTtkW2ddPShkW2ddfHwwKSsxO2cgaW4gdGhpcy53b3JkQ291bnRzfHwodGhpcy53b3JkQ291bnRzW2ddPTAsdGhpcy51bmlxdWVXb3JkQ291bnQrKyl9fWE9dGhpcy52YWx1ZUhhc2hbYV0ud29yZHM7Zm9yKGNvbnN0IGYgaW4gYSl0aGlzLndvcmRDb3VudHNbZl09KHRoaXMud29yZENvdW50c1tmXXx8MCkrMX19CmZ1bmN0aW9uIGpuKGEpe2lmKCFhfHwhYS5sZW5ndGgpcmV0dXJue307Y29uc3QgYz17fTtmb3IobGV0IGQ9MDtkPGEubGVuZ3RoO2QrKyl7Y29uc3QgZj1hW2RdO2lmKG51bGw9PWYpY29udGludWU7Y29uc3QgZz1PYmplY3Qua2V5cyhmKTtmb3IobGV0IGw9MDtsPGcubGVuZ3RoO2wrKyl7Y29uc3Qgaz1nW2xdLG09ZltrXTtrIGluIGN8fChjW2tdPW5ldyBobik7Y1trXS5hZGRWYWx1ZShtKX19Zm9yKGNvbnN0IGQgaW4gYylhPWNbZF0sYS5tdWx0aXdvcmRDb3VudCYmKGEud29yZFRyZWU9ZW4oYS52YWx1ZUhhc2gpKTtyZXR1cm4gY307Cjwvc2NyaXB0PgoKPHNjcmlwdD4vL35+V0VCUEFUSH5+L2ZhY2V0cy1kaXZlL2xpYi9zdHJpbmctZm9ybWF0LmpzCmZ1bmN0aW9uIGtuKGEpe3JldHVybiBhLnJlcGxhY2UoLyhbXFdfXSkvZywiJDFcdTIwMGIiKX1mdW5jdGlvbiBsbihhKXtyZXR1cm4gNjU+YS5sZW5ndGg/YTphLnN1YnN0cigwLDMwKSsiLi4uIithLnN1YnN0cigtMzApfTsKPC9zY3JpcHQ+CgoKCgo8ZG9tLW1vZHVsZSBpZD0iZmFjZXRzLWRpdmUtdmlzIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQogICAgICAubGFiZWxzIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1iYXNlOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtaGVhZGxpbmU7CiAgICAgIH0KICAgICAgLnJvdGF0ZSB7CiAgICAgICAgc3Ryb2tlLWRhc2hhcnJheTogMS41LCAwLjU7CiAgICAgICAgYW5pbWF0aW9uOiByb3RhdGUgMXMgbGluZWFyIGluZmluaXRlOwogICAgICB9CiAgICAgIEBrZXlmcmFtZXMgcm90YXRlIHsKICAgICAgICBmcm9tIHsKICAgICAgICAgIHN0cm9rZS1kYXNob2Zmc2V0OiAwOwogICAgICAgIH0KICAgICAgICB0byB7CiAgICAgICAgICBzdHJva2UtZGFzaG9mZnNldDogMjsKICAgICAgICB9CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8ZGl2IGlkPSJob2xkZXIiPgogICAgICAKICAgIDwvZGl2PgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT4KCjxzY3JpcHQ+Ly9+fldFQlBBVEh+fi9mYWNldHMtZGl2ZS9jb21wb25lbnRzL2ZhY2V0cy1kaXZlLXZpcy9mYWNldHMtZGl2ZS12aXMuanMKLyoKCiBDb3B5cmlnaHQgMjAxOCBHb29nbGUgSW5jLgoKIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CgogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAoKIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgoqLwpjb25zdCBtbj17Ym90dG9tOjYsbGVmdDo2LHJpZ2h0OjYsdG9wOjZ9LG5uPXsiXHVmZmZjT1RIRVJcdWZmZmMiOiJvdGhlciIsIlx1ZmZmY05PX1dPUkRTXHVmZmZjIjoibm9uLXdvcmRzIiwiXHVmZmZjQUxMX1dPUkRTXHVmZmZjIjoib3RoZXIifSxvbj1hPT5udWxsIT09YSYmYSBpbiBubj97bGFiZWw6bm5bYV0sc3BlY2lhbDohMH06Im51bWJlciIhPT10eXBlb2YgYSYmInN0cmluZyIhPT10eXBlb2YgYT97bGFiZWw6IiIrYSxzcGVjaWFsOiEwfTp7bGFiZWw6bG4oIiIrYSksc3BlY2lhbDohMX0scG49IiM0Mjg1RjQgI0RCNDQzNyAjRjRCNDAwICMwRjlENTggI0FCNDdCQyAjMDBBQ0MxICNGRjcwNDMgIzlFOUQyNCAjNUM2QkMwICNGMDYyOTIgIzAwNzk2QiAjQzIxODVCIi5zcGxpdCgiICIpLHFuPSIjNDI4NUY0ICMwRjlENTggIzAwQUNDMSAjOUU5RDI0ICM1QzZCQzAgIzAwNzk2QiAjNjA3RDhCIi5zcGxpdCgiICIpLHJuPSIjREI0NDM3ICNGNEI0MDAgI0FCNDdCQyAjRjA2MjkyICNBQjQ3QkMgIzc5NTU0OCAjRkY3MDQzICNDMjE4NUIiLnNwbGl0KCIgIiksCnNuPSIjNDI4NUY0ICNDNTM5MjkgI0Y3Q0I0RCAjMEI4MDQzICM1RTM1QjEgIzgwREVFQSAjRkY3MDQzICNDMENBMzMiLnNwbGl0KCIgIiksdG49eyJhbGlnbm1lbnQtYmFzZWxpbmUiOiJtaWRkbGUiLGZpbGw6IiM0NDQ0NDQiLCJmb250LXNpemUiOjE4LCJmb250LXN0eWxlIjoibm9ybWFsIiwidGV4dC1hbmNob3IiOiJtaWRkbGUiLHg6MCx5OjB9O2NsYXNzIHVuIGV4dGVuZHMgSG17fQpjbGFzcyB2bntjb25zdHJ1Y3RvcihhKXt0aGlzLmVsZW09YTt0aGlzLmVuZFRpbWVzdGFtcD0wO3RoaXMucmVuZGVyUXVldWVkPSExO3RoaXMubGFiZWxzPVtdO3RoaXMuYXV0b0NvbG9yQnk9ITE7dGhpcy5ob3Jpem9udGFsRmFjZXRJbmZvPXRoaXMudmVydGljYWxGYWNldEluZm89bnVsbH1yZWFkeSgpe3RoaXMubGF5b3V0PW5ldyBTbTt0aGlzLmhvbGRlcj10aGlzLmVsZW0uJC5ob2xkZXI7dGhpcy5lbGVtLnNjb3BlU3VidHJlZSh0aGlzLmhvbGRlciwhMCk7dGhpcy5jZWxsQmFja2dyb3VuZFNWRz1kMy5zZWxlY3QodGhpcy5ob2xkZXIpLmFwcGVuZCgic3ZnIikuc3R5bGUoImxlZnQiLDApLnN0eWxlKCJwb3NpdGlvbiIsImFic29sdXRlIikuc3R5bGUoInRvcCIsMCk7dGhpcy5jZWxsQmFja2dyb3VuZFNWR1Jvb3Q9dGhpcy5jZWxsQmFja2dyb3VuZFNWRy5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsInJvb3QiKTt0aGlzLmNlbGxCYWNrZ3JvdW5kTGF5ZXI9dGhpcy5jZWxsQmFja2dyb3VuZFNWR1Jvb3QuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLAoibGFiZWxzIik7dGhpcy5zY2VuZT1uZXcgVEhSRUUuU2NlbmU7dGhpcy5jYW1lcmE9bmV3IFRIUkVFLk9ydGhvZ3JhcGhpY0NhbWVyYSgwLDEwMCwwLDEwMCwuMSwxRTMpO3RyeXt0aGlzLnJlbmRlcmVyPW5ldyBUSFJFRS5XZWJHTFJlbmRlcmVyKHthbHBoYTohMH0pLHRoaXMucmVuZGVyZXIuc2V0UGl4ZWxSYXRpbygpLGQzLnNlbGVjdCh0aGlzLnJlbmRlcmVyLmRvbUVsZW1lbnQpLnN0eWxlKCJsZWZ0IiwwKS5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJub25lIikuc3R5bGUoInBvc2l0aW9uIiwiYWJzb2x1dGUiKS5zdHlsZSgidG9wIiwwKSx0aGlzLmhvbGRlci5hcHBlbmRDaGlsZCh0aGlzLnJlbmRlcmVyLmRvbUVsZW1lbnQpfWNhdGNoKGEpe310aGlzLnpvb209ZDMuem9vbSgpLnNjYWxlRXh0ZW50KFsxLDUwMF0pLm9uKCJ6b29tIix0aGlzLnpvb21lZC5iaW5kKHRoaXMpKTtkMy5zZWxlY3QodGhpcy5lbGVtKS5jYWxsKHRoaXMuem9vbSk7dGhpcy5sYWJlbHNBbmRBeGVzU1ZHPQpkMy5zZWxlY3QodGhpcy5ob2xkZXIpLmFwcGVuZCgic3ZnIikuc3R5bGUoImxlZnQiLDApLnN0eWxlKCJwb3NpdGlvbiIsImFic29sdXRlIikuc3R5bGUoInRvcCIsMCk7dGhpcy5sYWJlbHNBbmRBeGVzU1ZHUm9vdD10aGlzLmxhYmVsc0FuZEF4ZXNTVkcuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJyb290Iik7dGhpcy5sYWJlbHNMYXllcj10aGlzLmxhYmVsc0FuZEF4ZXNTVkdSb290LmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibGFiZWxzIik7dGhpcy5heGVzTGF5ZXI9dGhpcy5sYWJlbHNBbmRBeGVzU1ZHUm9vdC5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImF4ZXMiKTt0aGlzLmNvbXBhcmVkTGF5ZXI9dGhpcy5sYWJlbHNBbmRBeGVzU1ZHUm9vdC5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImNvbXBhcmVkYm94ZXMiKTt0aGlzLnNlbGVjdGVkTGF5ZXI9dGhpcy5sYWJlbHNBbmRBeGVzU1ZHUm9vdC5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsInNlbGVjdGVkYm94ZXMiKTsKdGhpcy5sYWJlbHNBbmRBeGVzU1ZHLm9uKCJjbGljayIsdGhpcy5jbGlja2VkLmJpbmQodGhpcykpO3RoaXMucmVuZGVyZXJ8fCh0aGlzLmxhYmVsc0FuZEF4ZXNTVkcuc3R5bGUoImRpc3BsYXkiLCJub25lIiksdGhpcy5jZWxsQmFja2dyb3VuZFNWRy5zdHlsZSgiZGlzcGxheSIsIm5vbmUiKSxkMy5zZWxlY3QodGhpcy5ob2xkZXIpLmFwcGVuZCgicCIpLmF0dHIoImNsYXNzIiwiZXJyb3IiKS5zdHlsZSgiY29sb3IiLCJkYXJrcmVkIikuaHRtbCgnXG4gICAgICAgICAgICBceDNjc3Ryb25nXHgzZUVSUk9SXHgzYy9zdHJvbmdceDNlOiBGYWNldHMgRGl2ZSByZXF1aXJlcyBXZWJHTCwgYW5kIGl0IGlzIG5vdFxuICAgICAgICAgICAgZW5hYmxlZCBpbiB5b3VyIGJyb3dzZXIuIFNlZVxuICAgICAgICAgICAgXHgzY2EgcmVsXHgzZCJub3JlZmVycmVyIiBocmVmXHgzZCJodHRwOi8vd2ViZ2xyZXBvcnQuY29tLyJceDNlXG4gICAgICAgICAgICBXZWJHTCBSZXBvcnRceDNjL2FceDNlIGZvciBkZXRhaWxzLlxuICAgICAgICAgICcpKX16b29tZWQoKXtjb25zdCB7eDphLAp5OmMsazpkfT1kMy5ldmVudC50cmFuc2Zvcm0sZj10aGlzLnNjYWxlL2Q7dGhpcy5jYW1lcmEudG9wKj1mO3RoaXMuY2FtZXJhLmxlZnQqPWY7dGhpcy5jYW1lcmEucmlnaHQqPWY7dGhpcy5jYW1lcmEuYm90dG9tKj1mO3RoaXMuY2FtZXJhLnBvc2l0aW9uLnNldCgtYS9kLGMvZCx0aGlzLmNhbWVyYS5wb3NpdGlvbi56KTt0aGlzLmNhbWVyYS51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCk7dGhpcy5zY2FsZT1kO3RoaXMudHJhbnNmb3JtU1ZHKCk7dGhpcy51cGRhdGVPYmplY3RWaXNpYmlsaXR5KCk7dGhpcy5xdWV1ZVJlbmRlclNjZW5lKCl9Y2xpY2tlZCgpe3ZhciBhPXRoaXMuZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxjPWQzLmV2ZW50O2E9dGhpcy5zcHJpdGVNZXNoLmZpbmRTcHJpdGVzKHRoaXMuY2FtZXJhLnBvc2l0aW9uLngrKGMuY2xpZW50WC1hLmxlZnQpL3RoaXMuc2NhbGUsdGhpcy5jYW1lcmEucG9zaXRpb24ueS0oYy5jbGllbnRZLWEudG9wKS90aGlzLnNjYWxlKTsKdmFyIGQ9e307aWYoYy5jdHJsS2V5KWZvcihjPTA7Yzx0aGlzLmVsZW0uc2VsZWN0ZWRJbmRpY2VzLmxlbmd0aDtjKyspZFt0aGlzLmVsZW0uc2VsZWN0ZWRJbmRpY2VzW2NdXT0hMDtmb3IoYz0wO2M8YS5sZW5ndGg7YysrKWRbYVtjXV09ITA7dGhpcy5lbGVtLnNldCgic2VsZWN0ZWRJbmRpY2VzIixBcnJheS5mcm9tKE9iamVjdC5rZXlzKGQpLm1hcChmPT4rZikpKTthPVtdO2ZvcihkPTA7ZDx0aGlzLmVsZW0uc2VsZWN0ZWRJbmRpY2VzLmxlbmd0aDtkKyspYS5wdXNoKHRoaXMuZWxlbS5kYXRhW3RoaXMuZWxlbS5zZWxlY3RlZEluZGljZXNbZF1dKTt0aGlzLmVsZW0uc2V0KCJzZWxlY3RlZERhdGEiLGEpfXNlbGVjdGVkSW5kaWNlc1VwZGF0ZWQoKXt0aGlzLnNwcml0ZU1lc2gmJnRoaXMudXBkYXRlU2VsZWN0ZWRCb3hlcygpfWNvbXBhcmVkSW5kaWNlc1VwZGF0ZWQoKXtpZih0aGlzLnNwcml0ZU1lc2gpe3ZhciBhPVtdO2ZvcihsZXQgYz0wO2M8dGhpcy5lbGVtLmNvbXBhcmVkSW5kaWNlcy5sZW5ndGg7YysrKWEucHVzaCh0aGlzLmVsZW0uZGF0YVt0aGlzLmVsZW0uY29tcGFyZWRJbmRpY2VzW2NdXSk7CnRoaXMuZWxlbS5zZXQoImNvbXBhcmVkRGF0YSIsYSk7dGhpcy51cGRhdGVDb21wYXJlZEJveGVzKCl9fXVwZGF0ZVNlbGVjdGVkQm94ZXMoKXt2YXIgYT10aGlzLmVsZW0uc2VsZWN0ZWRJbmRpY2VzLm1hcChkPT4oe3g6dGhpcy5zcHJpdGVNZXNoLmdldFgoZCkseTp0aGlzLnNwcml0ZU1lc2guZ2V0WShkKX0pKTthPXRoaXMuc2VsZWN0ZWRMYXllci5zZWxlY3RBbGwoIi5zZWxlY3RlZCIpLmRhdGEoYSk7dmFyIGM9YS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoInNlbGVjdGVkIiwhMCkuYXR0cigidHJhbnNmb3JtIixkPT5gdHJhbnNsYXRlKCR7LjUrKGQueHx8MCl9LCR7LjUrKGQueXx8MCl9KSBzY2FsZSgkezN9KWApLnN0eWxlKCJvcGFjaXR5IiwwKTtjLmFwcGVuZCgicmVjdCIpLmF0dHIoIngiLC0uNSkuYXR0cigieSIsLS41KS5hdHRyKCJ3aWR0aCIsMSkuYXR0cigiaGVpZ2h0IiwxKS5hdHRyKCJzdHJva2UiLCIjNDgzZDA2IikuYXR0cigic3Ryb2tlLWxpbmVjYXAiLAoicm91bmQiKS5hdHRyKCJzdHJva2UtbGluZWpvaW4iLCJyb3VuZCIpLmF0dHIoInN0cm9rZS1vcGFjaXR5IiwwKS5hdHRyKCJzdHJva2Utd2lkdGgiLC4zKS5hdHRyKCJmaWxsLW9wYWNpdHkiLDApO2MuYXBwZW5kKCJyZWN0IikuYXR0cigieCIsLS41KS5hdHRyKCJ5IiwtLjUpLmF0dHIoIndpZHRoIiwxKS5hdHRyKCJoZWlnaHQiLDEpLmF0dHIoInN0cm9rZSIsIiNmYWQ0MTEiKS5hdHRyKCJzdHJva2UtbGluZWNhcCIsInJvdW5kIikuYXR0cigic3Ryb2tlLWxpbmVqb2luIiwicm91bmQiKS5hdHRyKCJzdHJva2Utb3BhY2l0eSIsMCkuYXR0cigic3Ryb2tlLXdpZHRoIiwuMTUpLmF0dHIoImZpbGwtb3BhY2l0eSIsMCk7Yz1jLm1lcmdlKGEpO2MudHJhbnNpdGlvbigpLmF0dHIoInRyYW5zZm9ybSIsZD0+YHRyYW5zbGF0ZSgkey41KyhkLnh8fDApfSwkey41KyhkLnl8fDApfSkgc2NhbGUoJHsuOH0pYCkuc3R5bGUoIm9wYWNpdHkiLDEpO2Muc2VsZWN0QWxsKCJyZWN0IikuY2xhc3NlZCgicm90YXRlIiwKITApLmF0dHIoInN0cm9rZS1vcGFjaXR5IiwxKTthLmV4aXQoKS50cmFuc2l0aW9uKCkuc3R5bGUoIm9wYWNpdHkiLDApLnJlbW92ZSgpfXVwZGF0ZUNvbXBhcmVkQm94ZXMoKXt2YXIgYT10aGlzLmVsZW0uY29tcGFyZWRJbmRpY2VzLm1hcChkPT4oe3g6dGhpcy5zcHJpdGVNZXNoLmdldFgoZCkseTp0aGlzLnNwcml0ZU1lc2guZ2V0WShkKX0pKTthPXRoaXMuY29tcGFyZWRMYXllci5zZWxlY3RBbGwoIi5jb21wYXJlZCIpLmRhdGEoYSk7dmFyIGM9YS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoImNvbXBhcmVkIiwhMCkuYXR0cigidHJhbnNmb3JtIixkPT5gdHJhbnNsYXRlKCR7LjUrKGQueHx8MCl9LCR7LjUrKGQueXx8MCl9KSBzY2FsZSgkezN9KWApLnN0eWxlKCJvcGFjaXR5IiwwKTtjLmFwcGVuZCgicmVjdCIpLmF0dHIoIngiLC0uNSkuYXR0cigieSIsLS41KS5hdHRyKCJ3aWR0aCIsMSkuYXR0cigiaGVpZ2h0IiwxKS5hdHRyKCJzdHJva2UiLCIjNDRmZjQ0IikuYXR0cigic3Ryb2tlLWxpbmVjYXAiLAoicm91bmQiKS5hdHRyKCJzdHJva2UtbGluZWpvaW4iLCJyb3VuZCIpLmF0dHIoInN0cm9rZS1vcGFjaXR5IiwwKS5hdHRyKCJzdHJva2Utd2lkdGgiLC4zKS5hdHRyKCJmaWxsLW9wYWNpdHkiLDApO2MuYXBwZW5kKCJyZWN0IikuYXR0cigieCIsLS41KS5hdHRyKCJ5IiwtLjUpLmF0dHIoIndpZHRoIiwxKS5hdHRyKCJoZWlnaHQiLDEpLmF0dHIoInN0cm9rZSIsIiMxZDZiMWQiKS5hdHRyKCJzdHJva2UtbGluZWNhcCIsInJvdW5kIikuYXR0cigic3Ryb2tlLWxpbmVqb2luIiwicm91bmQiKS5hdHRyKCJzdHJva2Utb3BhY2l0eSIsMCkuYXR0cigic3Ryb2tlLXdpZHRoIiwuMTUpLmF0dHIoImZpbGwtb3BhY2l0eSIsMCk7Yz1jLm1lcmdlKGEpO2MudHJhbnNpdGlvbigpLmF0dHIoInRyYW5zZm9ybSIsZD0+YHRyYW5zbGF0ZSgkey41KyhkLnh8fDApfSwkey41KyhkLnl8fDApfSkgc2NhbGUoJHsuOH0pYCkuc3R5bGUoIm9wYWNpdHkiLDEpO2Muc2VsZWN0QWxsKCJyZWN0IikuY2xhc3NlZCgicm90YXRlIiwKITApLmF0dHIoInN0cm9rZS1vcGFjaXR5IiwxKTthLmV4aXQoKS50cmFuc2l0aW9uKCkuc3R5bGUoIm9wYWNpdHkiLDApLnJlbW92ZSgpfWZpdFRvVmlld3BvcnQoKXtjb25zdCBhPXRoaXMuZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtpZihhLndpZHRoJiZhLmhlaWdodCl7dGhpcy5sYXlvdXQudmlld3BvcnQud2lkdGg9YS53aWR0aDt0aGlzLmxheW91dC52aWV3cG9ydC5oZWlnaHQ9YS5oZWlnaHQ7dGhpcy5sYXlvdXQucGFkZGluZy5ib3R0b209dGhpcy5lbGVtLnNjZW5lUGFkZGluZzt0aGlzLmxheW91dC5wYWRkaW5nLmxlZnQ9dGhpcy5lbGVtLnNjZW5lUGFkZGluZzt0aGlzLmxheW91dC5wYWRkaW5nLnJpZ2h0PXRoaXMuZWxlbS5zY2VuZVBhZGRpbmc7dGhpcy5sYXlvdXQucGFkZGluZy50b3A9dGhpcy5lbGVtLnNjZW5lUGFkZGluZzt0aGlzLmxheW91dC5ncmlkPXtib3R0b206MCxsZWZ0OjAscmlnaHQ6dGhpcy5ncmlkLndpZHRoLHRvcDp0aGlzLmdyaWQuaGVpZ2h0fTsKaWYodGhpcy5sYWJlbHMubGVuZ3RoKXt2YXIgYz0wLGQ9MCxmPTAsZz0wO3RoaXMubGFiZWxzTGF5ZXIuc2VsZWN0QWxsKCIubGFiZWwiKS5lYWNoKGZ1bmN0aW9uKG0pe3ZhciBwPWQzLnNlbGVjdCh0aGlzKS5zZWxlY3QoIi5jdXJyZW50Iikubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2NvbnN0IHE9bS5lbGVtZW50TWFyZ2lufHx7Ym90dG9tOjAsbGVmdDowLHJpZ2h0OjAsdG9wOjB9LHI9cC5oZWlnaHQrcS50b3ArcS5ib3R0b207cD1wLndpZHRoK3EubGVmdCtxLnJpZ2h0O3N3aXRjaChtLnNpZGUpe2Nhc2UgR20uQm90dG9tOmM9TWF0aC5tYXgoYyxyKTticmVhaztjYXNlIEdtLlRvcDpnPU1hdGgubWF4KGcscik7YnJlYWs7Y2FzZSBHbS5MZWZ0OmQ9TWF0aC5tYXgoZCxwKTticmVhaztjYXNlIEdtLlJpZ2h0OmY9TWF0aC5tYXgoZixwKTticmVhaztkZWZhdWx0OnRocm93IEVycm9yKCJVbnJlY29nbml6ZWQgU2lkZS4iKTt9fSk7dGhpcy5sYXlvdXQucGFkZGluZy5ib3R0b20rPQpjO3RoaXMubGF5b3V0LnBhZGRpbmcubGVmdCs9ZDt0aGlzLmxheW91dC5wYWRkaW5nLnJpZ2h0Kz1mO3RoaXMubGF5b3V0LnBhZGRpbmcudG9wKz1nfXRoaXMubGF5b3V0LnJlZHVjZVBhZGRpbmdUb0ZpdFdpZHRoKGEud2lkdGgpO3RoaXMubGF5b3V0LnJlZHVjZVBhZGRpbmdUb0ZpdEhlaWdodChhLmhlaWdodCk7dGhpcy5zY2FsZT10aGlzLmxheW91dC5jb21wdXRlU2NhbGUoKTt2YXIge3Bvc2l0aW9uOmwsZnJ1c3R1bTprfT10aGlzLmxheW91dC5jb21wdXRlQ2FtZXJhKCk7dGhpcy5jYW1lcmEubGVmdD1rLmxlZnQ7dGhpcy5jYW1lcmEucmlnaHQ9ay5yaWdodDt0aGlzLmNhbWVyYS50b3A9ay50b3A7dGhpcy5jYW1lcmEuYm90dG9tPWsuYm90dG9tO3RoaXMuY2FtZXJhLnBvc2l0aW9uLnNldChsLngsbC55LDEwMCk7dGhpcy5jYW1lcmEudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpO2QzLnNlbGVjdCh0aGlzLmVsZW0pLmNhbGwodGhpcy56b29tLnRyYW5zZm9ybSxkMy56b29tSWRlbnRpdHkuc2NhbGUodGhpcy5zY2FsZSkudHJhbnNsYXRlKC10aGlzLmNhbWVyYS5wb3NpdGlvbi54LAp0aGlzLmNhbWVyYS5wb3NpdGlvbi55KSk7dGhpcy50cmFuc2Zvcm1TVkcoKTt0aGlzLnVwZGF0ZU9iamVjdFZpc2liaWxpdHkoKTt0aGlzLnF1ZXVlUmVuZGVyU2NlbmUoKX1lbHNlIHNldFRpbWVvdXQoKCk9PnRoaXMuZml0VG9WaWV3cG9ydCgpLDEwMCl9em9vbUluKCl7dGhpcy56b29tLnNjYWxlQnkoZDMuc2VsZWN0KHRoaXMuZWxlbSksMS4xKX16b29tT3V0KCl7dGhpcy56b29tLnNjYWxlQnkoZDMuc2VsZWN0KHRoaXMuZWxlbSksMS8xLjEpfXRyYW5zZm9ybVNWRygpe2NvbnN0IGE9LXRoaXMuY2FtZXJhLnBvc2l0aW9uLngqdGhpcy5zY2FsZSxjPXRoaXMuY2FtZXJhLnBvc2l0aW9uLnkqdGhpcy5zY2FsZTt0aGlzLmNlbGxCYWNrZ3JvdW5kU1ZHUm9vdC5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHthfSwke2N9KSBzY2FsZSgke3RoaXMuc2NhbGV9LCR7LXRoaXMuc2NhbGV9KWApO3RoaXMubGFiZWxzQW5kQXhlc1NWR1Jvb3QuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7YX0sJHtjfSkgc2NhbGUoJHt0aGlzLnNjYWxlfSwkey10aGlzLnNjYWxlfSlgKTsKdGhpcy5sYWJlbHNBbmRBeGVzU1ZHUm9vdC5zZWxlY3RBbGwoIi51bnNjYWxlIikuYXR0cigidHJhbnNmb3JtIixgc2NhbGUoJHsxL3RoaXMuc2NhbGV9KWApO3RoaXMuYXhlc0xheWVyLnNlbGVjdEFsbCgiLmF4aXMiKS5zZWxlY3QoInBhdGgiKS5hdHRyKCJkIixkPT5kLnBhdGgodGhpcy5zY2FsZSkpLmF0dHIoInN0cm9rZS13aWR0aCIsZD0+ZC5zdHJva2VXaWR0aCh0aGlzLnNjYWxlKSl9aXNWaXNpYmxlKGEsYyl7cmV0dXJuIGEuc2hvdWxkQmVWaXNpYmxlKGMsdGhpcy5zY2FsZSx0aGlzLmNhbWVyYS5wb3NpdGlvbix0aGlzLmNhbWVyYSl9dXBkYXRlT2JqZWN0VmlzaWJpbGl0eSgpe2NvbnN0IGE9dGhpczt2YXIgYz10aGlzLmxhYmVsc0xheWVyLnNlbGVjdEFsbCgiLmxhYmVsIik7Y29uc3QgZD1jLmZpbHRlcihmdW5jdGlvbihnKXtyZXR1cm4odm9pZCAwPT09Zy52aXNpYmxlfHwhZy52aXNpYmxlKSYmYS5pc1Zpc2libGUoZyx0aGlzKX0pLmVhY2goZz0+Zy52aXNpYmxlPSEwKSwKZj1jLmZpbHRlcihmdW5jdGlvbihnKXtyZXR1cm4odm9pZCAwPT09Zy52aXNpYmxlfHxnLnZpc2libGUpJiYhYS5pc1Zpc2libGUoZyx0aGlzKX0pLmVhY2goZz0+Zy52aXNpYmxlPSExKTtkLnNlbGVjdEFsbCgiLm9wYWNpdHkiKS50cmFuc2l0aW9uKCkuZHVyYXRpb24odGhpcy5lbGVtLnR3ZWVuRHVyYXRpb24pLmF0dHIoIm9wYWNpdHkiLDEpO2Yuc2VsZWN0QWxsKCIub3BhY2l0eSIpLnRyYW5zaXRpb24oKS5kdXJhdGlvbih0aGlzLmVsZW0udHdlZW5EdXJhdGlvbikuYXR0cigib3BhY2l0eSIsMCk7Yy5maWx0ZXIoZz0+ISFnLnNjYWxlRG93bikuc2VsZWN0QWxsKCIuc2NhbGUiKS5hdHRyKCJ0cmFuc2Zvcm0iLGc9PmBzY2FsZSgke3RoaXMuc2NhbGU8Zy5taW5TY2FsZT90aGlzLnNjYWxlL2cubWluU2NhbGU6MX0pYCk7Yz10aGlzLmF4ZXNMYXllci5zZWxlY3RBbGwoIi5heGlzIikuZWFjaChmdW5jdGlvbihnKXtnLnZpc2libGU9YS5pc1Zpc2libGUoZyx0aGlzKX0pO2MuZmlsdGVyKGc9PgohIWcudmlzaWJsZSkuc2VsZWN0KCJwYXRoIikudHJhbnNpdGlvbigpLmR1cmF0aW9uKHRoaXMuZWxlbS50d2VlbkR1cmF0aW9uKS5hdHRyKCJzdHJva2Utb3BhY2l0eSIsMSk7Yy5maWx0ZXIoZz0+IWcudmlzaWJsZSkuc2VsZWN0KCJwYXRoIikudHJhbnNpdGlvbigpLmR1cmF0aW9uKHRoaXMuZWxlbS50d2VlbkR1cmF0aW9uKS5hdHRyKCJzdHJva2Utb3BhY2l0eSIsMCl9YWRkVmVydGljYWxGYWNldExhYmVscyhhKXt0aGlzLmVsZW0udmVydGljYWxGYWNldCBpbiB0aGlzLnN0YXRzJiZ0aGlzLmdyaWQuZ2V0Q29sdW1uKHRoaXMuZ3JpZC5ob3Jpem9udGFsS2V5c1t0aGlzLmdyaWQuaG9yaXpvbnRhbEtleXMubGVuZ3RoLTFdKS5mb3JFYWNoKGM9Pntjb25zdCBkPXRoaXMudmVydGljYWxGYWNldEluZm8ubGFiZWxpbmdGdW5jdGlvbihjLnZlcnRpY2FsS2V5KSxmPW5ldyB1bjtmLnRleHQ9ZC5sYWJlbDtmLng9Yy54K2Mud2lkdGg7Zi55PWMuY29udGVudFkrYy5pbm5lckhlaWdodC8KMjtmLnNpZGU9R20uUmlnaHQ7Zi5jZWxsPWM7Zi5hdHRyaWJ1dGVzPXsiYWxpZ25tZW50LWJhc2VsaW5lIjoibWlkZGxlIixmaWxsOiIjNjY2NjY2IiwiZm9udC1zaXplIjp0blsiZm9udC1zaXplIl0sInRleHQtYW5jaG9yIjoic3RhcnQiLCJmb250LXN0eWxlIjpkLnNwZWNpYWw/Iml0YWxpYyI6Im5vcm1hbCJ9O2Yub2Zmc2V0UG9zaXRpb249e3g6OH07Zi5taW5TY2FsZT10blsiZm9udC1zaXplIl0vKGMuaGVpZ2h0K3RoaXMuZ3JpZC5jZWxsTWFyZ2luKTtmLnNjYWxlRG93bj0hMDthLnB1c2goZil9KX1hZGRIb3Jpem9udGFsRmFjZXRMYWJlbHMoYSl7dGhpcy5lbGVtLmhvcml6b250YWxGYWNldCBpbiB0aGlzLnN0YXRzJiZ0aGlzLmdyaWQuZ2V0Um93KHRoaXMuZ3JpZC52ZXJ0aWNhbEtleXNbdGhpcy5ncmlkLnZlcnRpY2FsS2V5cy5sZW5ndGgtMV0pLmZvckVhY2goYz0+e2NvbnN0IGQ9dGhpcy5ob3Jpem9udGFsRmFjZXRJbmZvLmxhYmVsaW5nRnVuY3Rpb24oYy5ob3Jpem9udGFsS2V5KSwKZj1uZXcgdW47Zi50ZXh0PWQubGFiZWw7Zi54PWMuY29udGVudFgrYy5pbm5lcldpZHRoLzI7Zi55PWMueStjLmhlaWdodDtmLnNpZGU9R20uVG9wO2YuY2VsbD1jO2Yucm90YXRlPS00NTtmLmF0dHJpYnV0ZXM9eyJhbGlnbm1lbnQtYmFzZWxpbmUiOiJpZGVvZ3JhcGhpYyIsZmlsbDoiI2RkNjYyMiIsImZvbnQtc2l6ZSI6dG5bImZvbnQtc2l6ZSJdLCJ0ZXh0LWFuY2hvciI6InN0YXJ0IiwiZm9udC1zdHlsZSI6ZC5zcGVjaWFsPyJpdGFsaWMiOiJub3JtYWwifTtmLm9mZnNldFBvc2l0aW9uPXt4OjgseTotOH07Zi5taW5TY2FsZT10blsiZm9udC1zaXplIl0vKGMud2lkdGgrdGhpcy5ncmlkLmNlbGxNYXJnaW4vMik7Zi5zY2FsZURvd249ITA7YS5wdXNoKGYpfSl9YWRkVmVydGljYWxQb3NpdGlvbmluZ0xhYmVscyhhKXtpZigic2NhdHRlciI9PT10aGlzLmVsZW0ucG9zaXRpb25Nb2RlJiZ0aGlzLmVsZW0udmVydGljYWxQb3NpdGlvbiBpbiB0aGlzLnN0YXRzKXt2YXIgYz10aGlzLnN0YXRzW3RoaXMuZWxlbS52ZXJ0aWNhbFBvc2l0aW9uXSwKZD10aGlzLmZvcm1hdE51bWJlcihjLm51bWJlck1pbiksZj10aGlzLmZvcm1hdE51bWJlcihjLm51bWJlck1heCksZz0oZC5sZW5ndGgrMykvKGQubGVuZ3RoK2YubGVuZ3RoKzYpO3RoaXMuZ3JpZC5lYWNoQ2VsbChsPT57aWYobC5pdGVtcy5sZW5ndGgpe2Zvcih2YXIgaz1sLnNpYmxpbmdzLmxlZnQ7ISgha3x8ay5pdGVtcy5sZW5ndGh8fGsuc2libGluZ3MuYWJvdmUmJmsuc2libGluZ3MuYWJvdmUuaXRlbXMubGVuZ3RoKTspaz1rLnNpYmxpbmdzLmxlZnQ7az1rP2suY29udGVudFgray5pbm5lcldpZHRoOi1JbmZpbml0eTt2YXIgbT1sLngrOCxwPWwuY29udGVudFkscT1sLmNvbnRlbnRZK2wuaW5uZXJIZWlnaHQscj1uZXcgdW47ci5pZD1gJHtsLmNvbXBvdW5kS2V5fS1sZWZ0LXN0YXJ0YDtyLnRleHQ9ZDtyLng9bC54Kzg7ci55PWwueSsodGhpcy5lbGVtLmhvcml6b250YWxQb3NpdGlvbj84OjApO3Iuc2lkZT1HbS5MZWZ0O3IuY2VsbD1sO3Iucm90YXRlPS05MDtyLmF0dHJpYnV0ZXM9CnsiYWxpZ25tZW50LWJhc2VsaW5lIjoiaWRlb2dyYXBoaWMiLGZpbGw6IiMyMjU1YWEiLCJmb250LXNpemUiOjE2LCJ0ZXh0LWFuY2hvciI6InN0YXJ0In07ci5vZmZzZXRQb3NpdGlvbj17eDptbi5ib3R0b20seTotbW4ucmlnaHR9O3IuYm91bmRpbmdCb3g9e2JvdHRvbTpwLGxlZnQ6ayxyaWdodDptLHRvcDpwK2wuaW5uZXJIZWlnaHQqKE1hdGgubWF4KGcsLjEpLS4wNSl9O3IuZWxlbWVudE1hcmdpbj1tbjthLnB1c2gocik7cj1uZXcgdW47ci5pZD1gJHtsLmNvbXBvdW5kS2V5fS1sZWZ0LWVuZGA7ci50ZXh0PWY7ci54PWwueCs4O3IueT1sLnkrbC5oZWlnaHQ7ci5zaWRlPUdtLkxlZnQ7ci5jZWxsPWw7ci5yb3RhdGU9LTkwO3IuYXR0cmlidXRlcz17ImFsaWdubWVudC1iYXNlbGluZSI6ImlkZW9ncmFwaGljIixmaWxsOiIjMjI1NWFhIiwiZm9udC1zaXplIjoxNiwidGV4dC1hbmNob3IiOiJlbmQifTtyLm9mZnNldFBvc2l0aW9uPXt4Oi1tbi50b3AseTotbW4ucmlnaHR9O3IuYm91bmRpbmdCb3g9Cntib3R0b206cCtsLmlubmVySGVpZ2h0KihNYXRoLm1pbihnLC45KSsuMDUpLGxlZnQ6ayxyaWdodDptLHRvcDpxfTtyLmVsZW1lbnRNYXJnaW49bW47YS5wdXNoKHIpfX0pfX1hZGRIb3Jpem9udGFsUG9zaXRpb25pbmdMYWJlbHMoYSl7aWYoInNjYXR0ZXIiPT09dGhpcy5lbGVtLnBvc2l0aW9uTW9kZSYmdGhpcy5lbGVtLmhvcml6b250YWxQb3NpdGlvbiBpbiB0aGlzLnN0YXRzKXt2YXIgYz10aGlzLnN0YXRzW3RoaXMuZWxlbS5ob3Jpem9udGFsUG9zaXRpb25dLGQ9dGhpcy5mb3JtYXROdW1iZXIoYy5udW1iZXJNaW4pLGY9dGhpcy5mb3JtYXROdW1iZXIoYy5udW1iZXJNYXgpLGc9KGQubGVuZ3RoKzMpLyhkLmxlbmd0aCtmLmxlbmd0aCs2KTt0aGlzLmdyaWQuZWFjaENlbGwobD0+e2lmKGwuaXRlbXMubGVuZ3RoKXtmb3IodmFyIGs9bC5zaWJsaW5ncy5iZWxvdzshKCFrfHxrLml0ZW1zLmxlbmd0aHx8ay5zaWJsaW5ncy5yaWdodCYmay5zaWJsaW5ncy5yaWdodC5pdGVtcy5sZW5ndGgpOylrPQprLnNpYmxpbmdzLmJlbG93O2s9az9rLmNvbnRlbnRZK2suaW5uZXJIZWlnaHQ6LUluZmluaXR5O3ZhciBtPWwuY29udGVudFkscD1sLmNvbnRlbnRYLHE9cCtsLmlubmVyV2lkdGgscj1uZXcgdW47ci5pZD1gJHtsLmNvbXBvdW5kS2V5fS1ib3R0b20tc3RhcnRgO3IudGV4dD1kO3IueD1sLngrKHRoaXMuZWxlbS52ZXJ0aWNhbFBvc2l0aW9uPzg6MCk7ci55PWwueSs4O3Iuc2lkZT1HbS5Cb3R0b207ci5jZWxsPWw7ci5hdHRyaWJ1dGVzPXsiYWxpZ25tZW50LWJhc2VsaW5lIjoiaGFuZ2luZyIsZmlsbDoiIzExODg0NCIsImZvbnQtc2l6ZSI6MTYsInRleHQtYW5jaG9yIjoic3RhcnQifTtyLm9mZnNldFBvc2l0aW9uPXt4Om1uLmxlZnQseTptbi50b3B9O3IuYm91bmRpbmdCb3g9e2JvdHRvbTprLGxlZnQ6cCxyaWdodDpwK2wuaW5uZXJXaWR0aCooTWF0aC5tYXgoZywuMSktLjA1KSx0b3A6bX07ci5lbGVtZW50TWFyZ2luPW1uO2EucHVzaChyKTtyPW5ldyB1bjtyLmlkPWAke2wuY29tcG91bmRLZXl9LWJvdHRvbS1lbmRgOwpyLnRleHQ9ZjtyLng9bC54K2wud2lkdGg7ci55PWwueSs4O3Iuc2lkZT1HbS5Cb3R0b207ci5jZWxsPWw7ci5hdHRyaWJ1dGVzPXsiYWxpZ25tZW50LWJhc2VsaW5lIjoiaGFuZ2luZyIsZmlsbDoiIzExODg0NCIsImZvbnQtc2l6ZSI6MTYsInRleHQtYW5jaG9yIjoiZW5kIn07ci5vZmZzZXRQb3NpdGlvbj17eDotbW4ucmlnaHQseTptbi50b3B9O3IuYm91bmRpbmdCb3g9e2JvdHRvbTprLGxlZnQ6cCtsLmlubmVyV2lkdGgqKE1hdGgubWluKGcsLjkpKy4wNSkscmlnaHQ6cSx0b3A6bX07ci5lbGVtZW50TWFyZ2luPW1uO2EucHVzaChyKX19KX19ZGV0ZXJtaW5lTGFiZWxzKCl7Y29uc3QgYT1bXTt0aGlzLmFkZFZlcnRpY2FsRmFjZXRMYWJlbHMoYSk7dGhpcy5hZGRIb3Jpem9udGFsRmFjZXRMYWJlbHMoYSk7dGhpcy5hZGRWZXJ0aWNhbFBvc2l0aW9uaW5nTGFiZWxzKGEpO3RoaXMuYWRkSG9yaXpvbnRhbFBvc2l0aW9uaW5nTGFiZWxzKGEpO3JldHVybiBhfXVwZGF0ZUNlbGxCYWNrZ3JvdW5kcygpe3ZhciBhPQp0aGlzLmdyaWQuZ2V0Q2VsbHMoKS5maWx0ZXIoYz0+Yy5pdGVtcy5sZW5ndGgpO2E9dGhpcy5jZWxsQmFja2dyb3VuZExheWVyLnNlbGVjdEFsbCgiLmNlbGwiKS5kYXRhKGEsYz0+Yy5jb21wb3VuZEtleSk7YS5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIiwiY2VsbCIpLmF0dHIoIngiLGM9PmMuY29udGVudFh8fDApLmF0dHIoInkiLGM9PmMuY29udGVudFl8fDApLmF0dHIoIndpZHRoIixjPT5jLmlubmVyV2lkdGh8fDApLmF0dHIoImhlaWdodCIsYz0+Yy5pbm5lckhlaWdodHx8MCkuYXR0cigiZmlsbCIsIiNmOGY4ZjkiKS5hdHRyKCJmaWxsLW9wYWNpdHkiLDApLm1lcmdlKGEpLnRyYW5zaXRpb24oKS5kdXJhdGlvbih0aGlzLmVsZW0udHdlZW5EdXJhdGlvbikuYXR0cigieCIsYz0+Yy5jb250ZW50WHx8MCkuYXR0cigieSIsYz0+Yy5jb250ZW50WXx8MCkuYXR0cigid2lkdGgiLGM9PmMuaW5uZXJXaWR0aHx8MCkuYXR0cigiaGVpZ2h0IixjPT5jLmlubmVySGVpZ2h0fHwKMCkuYXR0cigiZmlsbC1vcGFjaXR5IiwxKTthLmV4aXQoKS50cmFuc2l0aW9uKCkuZHVyYXRpb24odGhpcy5lbGVtLnR3ZWVuRHVyYXRpb24pLnJlbW92ZSgpLmF0dHIoImZpbGwtb3BhY2l0eSIsMCl9dXBkYXRlQXhlcygpe2NvbnN0IGE9W107InN0YWNrZWQiIT09dGhpcy5lbGVtLnBvc2l0aW9uTW9kZSYmdGhpcy5ncmlkLmVhY2hDZWxsKGY9PntpZihmLml0ZW1zLmxlbmd0aCl7aWYodGhpcy5lbGVtLnZlcnRpY2FsUG9zaXRpb24pe2NvbnN0IGc9bmV3IFJtKEdtLkxlZnQsZik7YS5wdXNoKGcpfXRoaXMuZWxlbS5ob3Jpem9udGFsUG9zaXRpb24mJihmPW5ldyBSbShHbS5Cb3R0b20sZiksYS5wdXNoKGYpKX19KTtjb25zdCBjPXRoaXMuYXhlc0xheWVyLnNlbGVjdEFsbCgiLmF4aXMiKS5kYXRhKGEsZj0+Zi5rZXkoKSksZD1jLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJheGlzIikuYXR0cigib3BhY2l0eSIsMCk7ZC5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIixmPT4KZi5wYXRoKHRoaXMuc2NhbGUpKS5hdHRyKCJzdHJva2UiLGY9PmYuc2lkZT09PUdtLkxlZnQ/IiMyMjU1YWEiOiIjMTE4ODQ0IikuYXR0cigic3Ryb2tlLXdpZHRoIixmPT5mLnN0cm9rZVdpZHRoKHRoaXMuc2NhbGUpKS5hdHRyKCJzdHJva2Utb3BhY2l0eSIsMCkuYXR0cigiZmlsbCIsIm5vbmUiKTtkLm1lcmdlKGMpLnRyYW5zaXRpb24oKS5kdXJhdGlvbih0aGlzLmVsZW0udHdlZW5EdXJhdGlvbikuYXR0cigib3BhY2l0eSIsMSk7ZC5tZXJnZShjKS5zZWxlY3QoInBhdGgiKS50cmFuc2l0aW9uKCkuZHVyYXRpb24odGhpcy5lbGVtLnR3ZWVuRHVyYXRpb24pLmF0dHIoImQiLGY9PmYucGF0aCh0aGlzLnNjYWxlKSk7Yy5leGl0KCkudHJhbnNpdGlvbigpLmR1cmF0aW9uKHRoaXMuZWxlbS50d2VlbkR1cmF0aW9uKS5yZW1vdmUoKS5hdHRyKCJvcGFjaXR5IiwwKX11cGRhdGVMYWJlbHMoKXtpZih0aGlzLnNjYWxlKXt0aGlzLmxhYmVscz10aGlzLmRldGVybWluZUxhYmVscygpO3ZhciBhPQp0aGlzLmxhYmVsc0xheWVyLnNlbGVjdEFsbCgiLmxhYmVsIikuZGF0YSh0aGlzLmxhYmVscyxsPT5sLmlkfHxgJHtsLnNpZGV9LSR7bC50ZXh0fWApO2EuZWFjaChmdW5jdGlvbihsKXtjb25zdCBrPWQzLnNlbGVjdCh0aGlzKSxtPWsuc2VsZWN0KCIuY3VycmVudCIpO2wudGV4dCE9PW0udGV4dCgpJiYobS5hdHRyKCJmaWxsLW9wYWNpdHkiLDApLGsuc2VsZWN0KCIub2xkIikuYXR0cigiZmlsbC1vcGFjaXR5IiwxKS50ZXh0KG0udGV4dCgpKSl9KS5zZWxlY3QoIi5jdXJyZW50IikudGV4dChsPT5sLnRleHQpO3ZhciBjPWw9Pms9PnZvaWQgMD09PWsuYXR0cmlidXRlc3x8dm9pZCAwPT09ay5hdHRyaWJ1dGVzW2xdP3RuW2xdOmsuYXR0cmlidXRlc1tsXSxkPWEuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImxhYmVsIikuYXR0cigidHJhbnNmb3JtIixsPT5gdHJhbnNsYXRlKCR7bC54fSwke2wueX0pYCksZj1kLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiZmxpcCIpLmF0dHIoInRyYW5zZm9ybSIsCiJzY2FsZSgxLC0xKSIpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwicm90YXRlIikuYXR0cigidHJhbnNmb3JtIixsPT4icm90YXRlKCIrKCJyb3RhdGUiaW4gbD9sLnJvdGF0ZTowKSsiKSIpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwidW5zY2FsZSIpLmF0dHIoInRyYW5zZm9ybSIsYHNjYWxlKCR7MS90aGlzLnNjYWxlfSlgKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsInBvc2l0aW9uIikuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJvcGFjaXR5IHNjYWxlIiksZz1mLmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIiwib2xkIikuYXR0cigiZmlsbC1vcGFjaXR5IiwwKTtmPWYuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJjdXJyZW50IikuYXR0cigiZmlsbC1vcGFjaXR5IiwwKS50ZXh0KGw9PmwudGV4dCk7Zm9yKGNvbnN0IGwgaW4gdG4pdG4uaGFzT3duUHJvcGVydHkobCkmJihnLmF0dHIobCxjKGwpKSxmLmF0dHIobCxjKGwpKSk7Zz1kLm1lcmdlKGEpLnRyYW5zaXRpb24oKS5kdXJhdGlvbih0aGlzLmVsZW0udHdlZW5EdXJhdGlvbikuYXR0cigidHJhbnNmb3JtIiwKbD0+YHRyYW5zbGF0ZSgke2wueH0sJHtsLnl9KWApO2cuc2VsZWN0KCIucm90YXRlIikuYXR0cigidHJhbnNmb3JtIixsPT4icm90YXRlKCIrKCJyb3RhdGUiaW4gbD9sLnJvdGF0ZTowKSsiKSIpO2cuZmlsdGVyKGw9PiEhbC5vZmZzZXRQb3NpdGlvbikuc2VsZWN0KCIucG9zaXRpb24iKS5hdHRyKCJ0cmFuc2Zvcm0iLGw9PmB0cmFuc2xhdGUoJHtsLm9mZnNldFBvc2l0aW9uLnh8fDB9LCR7bC5vZmZzZXRQb3NpdGlvbi55fHwwfSlgKTtkPWcuc2VsZWN0KCIub2xkIikuYXR0cigiZmlsbC1vcGFjaXR5IiwwKTtnPWcuc2VsZWN0KCIuY3VycmVudCIpLmF0dHIoImZpbGwtb3BhY2l0eSIsMSk7Zm9yKGNvbnN0IGwgaW4gdG4pdG4uaGFzT3duUHJvcGVydHkobCkmJihkLmF0dHIobCxjKGwpKSxnLmF0dHIobCxjKGwpKSk7YS5leGl0KCkudHJhbnNpdGlvbigpLmR1cmF0aW9uKHRoaXMuZWxlbS50d2VlbkR1cmF0aW9uKS5yZW1vdmUoKS5zZWxlY3QoIi5jdXJyZW50IikuYXR0cigiZmlsbC1vcGFjaXR5IiwKMCl9fWRhdGFDaGFuZ2UoKXtjb25zdCBhPXRoaXMuZWxlbS5kYXRhO2lmKGEmJmEubGVuZ3RoKXt0aGlzLnJlc2l6ZUhhbmRsZXIoKTt0aGlzLnN0YXRzPWpuKGEpO2lmKHRoaXMuaXRlbXMpaWYodGhpcy5pdGVtcy5sZW5ndGghPT1hLmxlbmd0aCl0aGlzLmluaXRpYWxpemVTcHJpdGVNZXNoKCksdGhpcy51cGRhdGVJbWFnZUZpZWxkTmFtZSgpO2Vsc2UgZm9yKGxldCBjPTA7YzxhLmxlbmd0aDtjKyspdGhpcy5pdGVtc1tjXS5kYXRhPWFbY107ZWxzZSB0aGlzLmluaXRpYWxpemVTcHJpdGVNZXNoKCksdGhpcy5waWNrQ29sb3JCeUZpZWxkKCksdGhpcy5waWNrVGV4dERyYXdpbmdGaWVsZCgpO3RoaXMudXBkYXRlR3JpZEZhY2V0aW5nKCk7dGhpcy51cGRhdGVHcmlkSXRlbVBvc2l0aW9ucygpO3RoaXMudXBkYXRlQ29sb3JzKCl9fWluaXRpYWxpemVTcHJpdGVNZXNoKCl7dGhpcy5zcHJpdGVNZXNoJiYodGhpcy5zY2VuZS5yZW1vdmUodGhpcy5zcHJpdGVNZXNoKSx0aGlzLnNwcml0ZU1lc2guc3ByaXRlQXRsYXMuY2xlYXJRdWV1ZXMoKSwKZGVsZXRlIHRoaXMuc3ByaXRlTWVzaCk7Y29uc3QgYT10aGlzLmVsZW0uZGF0YSxjPWEubGVuZ3RoO3ZhciBkPXRoaXMuZWxlbS5zcHJpdGVJbWFnZVdpZHRoLGY9dGhpcy5lbGVtLnNwcml0ZUltYWdlSGVpZ2h0O2NvbnN0IGc9ZC9mO3RoaXMuc3ByaXRlTWVzaD1uZXcgJG0oYyxkLGYpO3RoaXMuc2NlbmUuYWRkKHRoaXMuc3ByaXRlTWVzaCk7dGhpcy5zcHJpdGVNZXNoLnNwcml0ZUF0bGFzLm9uRHJhd0ZpbmlzaGVkPSgpPT50aGlzLnF1ZXVlUmVuZGVyU2NlbmUoKTt0aGlzLml0ZW1zPVtdO2Q9TWF0aC5jZWlsKE1hdGguc3FydChjKSk7Zj1NYXRoLmNlaWwoYy9kKTtmb3IobGV0IGw9MDtsPGM7bCsrKXtjb25zdCBrPXRoaXMuc3ByaXRlTWVzaC5jcmVhdGVTcHJpdGUoKTtrLng9ZC8yO2sueT1mLzI7ay5vcGFjaXR5PTA7ay50aW1lc3RhbXA9RGF0ZS5ub3coKTtrLnJlYmFzZShrLnRpbWVzdGFtcCk7dGhpcy5pdGVtcy5wdXNoKHtzcHJpdGU6ayxkYXRhOmFbbF19KX10aGlzLmdyaWQ9Cm5ldyBRbSh0aGlzLml0ZW1zKTt0aGlzLmdyaWQuY2VsbE1hcmdpbj0xO3RoaXMuZ3JpZC5pdGVtQXNwZWN0UmF0aW89Zzt0aGlzLmdyaWQuaXRlbVBvc2l0aW9uU2V0dGVyPShsLGssbSk9Pntjb25zdCBwPURhdGUubm93KCk7bC5zcHJpdGUucmViYXNlKHApO2wuc3ByaXRlLng9aztsLnNwcml0ZS55PW07bC5zcHJpdGUub3BhY2l0eT0xO2wuc3ByaXRlLnRpbWVzdGFtcD1wK3RoaXMuZWxlbS50d2VlbkR1cmF0aW9uO3RoaXMucmVuZGVyVW50aWwobC5zcHJpdGUudGltZXN0YW1wKX19ZmlsdGVyZWREYXRhSW5kaWNlc0NoYW5nZSgpe2NvbnN0IGE9dGhpcy5lbGVtLmZpbHRlcmVkRGF0YUluZGljZXMsYz1bXTtpZihhKWZvcih2YXIgZD0wO2Q8YS5sZW5ndGg7ZCsrKXt2YXIgZj1hW2RdO2Y8dGhpcy5pdGVtcy5sZW5ndGgmJihjW2ZdPSEwKX1kPVtdO2Y9W107Y29uc3QgZz1EYXRlLm5vdygpLGw9Zyt0aGlzLmVsZW0udHdlZW5EdXJhdGlvbjtmb3IobGV0IGs9MDtrPHRoaXMuaXRlbXMubGVuZ3RoO2srKyl7Y29uc3QgbT0KdGhpcy5pdGVtc1trXTshYXx8Y1trXT8oZC5wdXNoKG0uZGF0YSksZi5wdXNoKG0pLG0uc3ByaXRlLm9wYWNpdHl8fChtLnNwcml0ZS5yZWJhc2UoZyksbS5zcHJpdGUudGltZXN0YW1wPWwsbS5zcHJpdGUub3BhY2l0eT0xKSk6MDxtLnNwcml0ZS5vcGFjaXR5JiYobS5zcHJpdGUucmViYXNlKGcpLG0uc3ByaXRlLnRpbWVzdGFtcD1sLG0uc3ByaXRlLm9wYWNpdHk9MCl9dGhpcy5yZW5kZXJVbnRpbChsKTt0aGlzLnN0YXRzPWpuKGQpO3RoaXMuZ3JpZC5pdGVtcz1mO3RoaXMudXBkYXRlR3JpZEZhY2V0aW5nKCk7dGhpcy51cGRhdGVHcmlkSXRlbVBvc2l0aW9ucygpfXBpY2tDb2xvckJ5RmllbGQoKXtsZXQgYT1udWxsLGM9SW5maW5pdHk7Zm9yKGNvbnN0IGQgaW4gdGhpcy5zdGF0cylpZih0aGlzLnN0YXRzLmhhc093blByb3BlcnR5KGQpKXtjb25zdCBmPXRoaXMuc3RhdHNbZF0sZz1NYXRoLmFicyhmLnVuaXF1ZUNvdW50LXBuLmxlbmd0aCk7MTxmLnVuaXF1ZUNvdW50JiZnPGMmJgooYT1kLGM9Zyl9aXNGaW5pdGUoYykmJmEgaW4gdGhpcy5zdGF0cyYmKHRoaXMuYXV0b0NvbG9yQnk9ITAsdGhpcy5lbGVtLnNldCgiY29sb3JCeSIsYSkpfXBpY2tUZXh0RHJhd2luZ0ZpZWxkKCl7bGV0IGE9IiIsYz0tSW5maW5pdHk7Zm9yKGNvbnN0IGYgaW4gdGhpcy5zdGF0cylpZih0aGlzLnN0YXRzLmhhc093blByb3BlcnR5KGYpKXt2YXIgZD10aGlzLnN0YXRzW2ZdO2Q9ZC5zdHJpbmdDb3VudCtkLnN0cmluZ0xlbmd0aHNDb3VudC1kLnRvdGFsQ291bnQ7ZD5jJiYoYT1mLGM9ZCl9aXNGaW5pdGUoYykmJmEgaW4gdGhpcy5zdGF0cyYmdGhpcy5lbGVtLnNldCgiaW1hZ2VGaWVsZE5hbWUiLGEpfXF1ZXVlQXRsYXNVcmxDaGFuZ2UoKXt0aGlzLmF0bGFzVXJsQ2hhbmdlVGltZXImJmNsZWFyVGltZW91dCh0aGlzLmF0bGFzVXJsQ2hhbmdlVGltZXIpO3RoaXMuYXRsYXNVcmxDaGFuZ2VUaW1lcj1zZXRUaW1lb3V0KCgpPT57dGhpcy5hdGxhc1VybENoYW5nZVRpbWVyJiZ0aGlzLmF0bGFzVXJsQ2hhbmdlKCl9LAoxMDApfWF0bGFzVXJsQ2hhbmdlKCl7Y2xlYXJUaW1lb3V0KHRoaXMuYXRsYXNVcmxDaGFuZ2VUaW1lcik7ZGVsZXRlIHRoaXMuYXRsYXNVcmxDaGFuZ2VUaW1lcjtpZih0aGlzLnNwcml0ZU1lc2gpe3ZhciBhPXRoaXMuZWxlbS5hdGxhc1VybDthJiZhLmxlbmd0aCYmYSE9PXRoaXMubGFzdEF0bGFzVXJsJiYodGhpcy5sYXN0QXRsYXNVcmw9YSx0aGlzLnJlc2V0U3ByaXRlc1RvRGVmYXVsdFRleHR1cmUoKSx0aGlzLnNwcml0ZU1lc2guc3ByaXRlQXRsYXMuc2V0QXRsYXNVcmwoYSx0aGlzLmVsZW0uY3Jvc3NPcmlnaW4sKCk9Pntjb25zdCBjPXRoaXMuZWxlbS5kYXRhLGQ9RGF0ZS5ub3coKSxmPWQrdGhpcy5lbGVtLmZhZGVEdXJhdGlvbjtmb3IobGV0IGc9MDtjJiZnPGMubGVuZ3RoO2crKyl0aGlzLnNwcml0ZU1lc2guc3dpdGNoVGV4dHVyZXMoZyxkLGYpO3RoaXMucmVuZGVyVW50aWwoZik7dGhpcy5pZ25vcmVDaGFuZ2U9ITA7dGhpcy5lbGVtLnNldCgiaW1hZ2VGaWVsZE5hbWUiLAoiIik7ZGVsZXRlIHRoaXMuaWdub3JlQ2hhbmdlO3RoaXMuYXV0b0NvbG9yQnkmJih0aGlzLmF1dG9Db2xvckJ5PSExLHRoaXMuZWxlbS5zZXQoImNvbG9yQnkiLCIiKSl9KSl9ZWxzZSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5hdGxhc1VybENoYW5nZS5iaW5kKHRoaXMpKX1zcHJpdGVVcmxDaGFuZ2UoKXtjb25zdCBhPXRoaXMuZWxlbS5zcHJpdGVVcmw7aWYoYSlpZih0aGlzLnNwcml0ZU1lc2gpe2NvbnN0IGM9bmV3IEltYWdlO3ZvaWQgMCE9PXRoaXMuZWxlbS5jcm9zc09yaWdpbiYmKGMuY3Jvc3NPcmlnaW49dGhpcy5lbGVtLmNyb3NzT3JpZ2luKTtjLm9ubG9hZD0oKT0+e2NvbnN0IGQ9dGhpcy5zcHJpdGVNZXNoLmRlZmF1bHRUZXh0dXJlQ2FudmFzLGY9ZC5nZXRDb250ZXh0KCIyZCIpO2YuY2xlYXJSZWN0KDAsMCxkLndpZHRoLGQuaGVpZ2h0KTtmLmRyYXdJbWFnZShjLDAsMCxkLndpZHRoLGQuaGVpZ2h0KTt0aGlzLnNwcml0ZU1lc2guZGVmYXVsdFRleHR1cmUubmVlZHNVcGRhdGU9CiEwO3RoaXMucXVldWVSZW5kZXJTY2VuZSgpfTtjLnNyYz1hfWVsc2UgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMuc3ByaXRlVXJsQ2hhbmdlLmJpbmQodGhpcykpfXVwZGF0ZUdyaWRTdGFja2luZygpeyJzdGFja2VkIj09PXRoaXMuZWxlbS5wb3NpdGlvbk1vZGUmJih0aGlzLmdyaWQuY29tcHV0ZUl0ZW1Qb3NpdGlvbj1ObSh0aGlzLmVsZW0udmVydGljYWxGYWNldD8ibWlkZGxlIjoiYm90dG9tIix0aGlzLmVsZW0uaG9yaXpvbnRhbEZhY2V0PyJtaWRkbGUiOiJyaWdodCIpKX11cGRhdGVHcmlkRmFjZXRpbmcoKXtpZih0aGlzLmdyaWQpe3RoaXMudXBkYXRlR3JpZFN0YWNraW5nKCk7dmFyIGE9dGhpcy52ZXJ0aWNhbEZhY2V0SW5mbz10aGlzLmdlbmVyYXRlRmFjZXRpbmdJbmZvKHRoaXMuZWxlbS52ZXJ0aWNhbEZhY2V0LHRoaXMuZWxlbS52ZXJ0aWNhbEJ1Y2tldHMsdGhpcy5lbGVtLnZlcnRpY2FsQmFnT2ZXb3JkcywhMCk7dGhpcy5ncmlkLnZlcnRpY2FsRmFjZXQ9YS5mYWNldGluZ0Z1bmN0aW9uOwp0aGlzLmdyaWQudmVydGljYWxLZXlDb21wYXJlPWEua2V5Q29tcGFyZUZ1bmN0aW9uO2E9dGhpcy5ob3Jpem9udGFsRmFjZXRJbmZvPXRoaXMuZ2VuZXJhdGVGYWNldGluZ0luZm8odGhpcy5lbGVtLmhvcml6b250YWxGYWNldCx0aGlzLmVsZW0uaG9yaXpvbnRhbEJ1Y2tldHMsdGhpcy5lbGVtLmhvcml6b250YWxCYWdPZldvcmRzLCExKTt0aGlzLmdyaWQuaG9yaXpvbnRhbEZhY2V0PWEuZmFjZXRpbmdGdW5jdGlvbjt0aGlzLmdyaWQuaG9yaXpvbnRhbEtleUNvbXBhcmU9YS5rZXlDb21wYXJlRnVuY3Rpb247dGhpcy5lbGVtLmZpdEdyaWRBc3BlY3RSYXRpb1RvVmlld3BvcnQ/KGE9dGhpcy5lbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHRoaXMuZ3JpZC50YXJnZXRHcmlkQXNwZWN0UmF0aW89YSYmYS53aWR0aCYmYS5oZWlnaHQ/YS53aWR0aC9hLmhlaWdodHx8MToxKTp0aGlzLmdyaWQudGFyZ2V0R3JpZEFzcGVjdFJhdGlvPTE7dGhpcy5ncmlkLmFycmFuZ2UoKTt0aGlzLnVwZGF0ZUNlbGxCYWNrZ3JvdW5kcygpOwp0aGlzLnVwZGF0ZUF4ZXMoKTt0aGlzLnVwZGF0ZUxhYmVscygpO3RoaXMudXBkYXRlU2VsZWN0ZWRCb3hlcygpO3RoaXMudXBkYXRlQ29tcGFyZWRCb3hlcygpO3RoaXMuZml0VG9WaWV3cG9ydCgpfX11cGRhdGVHcmlkSXRlbVBvc2l0aW9ucygpe2lmKHRoaXMuZ3JpZCl7dGhpcy51cGRhdGVHcmlkU3RhY2tpbmcoKTt2YXIgYT10aGlzLmdyaWQuY2VsbFBhZGRpbmcsYz1QbS5UaWdodCxkPVBtLlVuaWZvcm0sZj0hMTtpZigic3RhY2tlZCI9PT10aGlzLmVsZW0ucG9zaXRpb25Nb2RlKWY9dGhpcy5ncmlkLnZlcnRpY2FsR3JpZEFsaWdubWVudCE9PWN8fHRoaXMuZ3JpZC5ob3Jpem9udGFsR3JpZEFsaWdubWVudCE9PWMsdGhpcy5ncmlkLnZlcnRpY2FsR3JpZEFsaWdubWVudD1jLHRoaXMuZ3JpZC5ob3Jpem9udGFsR3JpZEFsaWdubWVudD1jLHRoaXMuZ3JpZC5jZWxsUGFkZGluZy50b3A9MCx0aGlzLmdyaWQuY2VsbFBhZGRpbmcubGVmdD0wLHRoaXMuZ3JpZC5jZWxsUGFkZGluZy5yaWdodD0KMCx0aGlzLmdyaWQuY2VsbFBhZGRpbmcuYm90dG9tPTAsdGhpcy5ncmlkLm1pbkNlbGxBc3BlY3RSYXRpbz0wLHRoaXMuZ3JpZC5tYXhDZWxsQXNwZWN0UmF0aW89SW5maW5pdHk7ZWxzZXt0aGlzLmVsZW0udmVydGljYWxQb3NpdGlvbj8oZj10aGlzLmdyaWQudmVydGljYWxHcmlkQWxpZ25tZW50IT09ZCx0aGlzLmdyaWQudmVydGljYWxHcmlkQWxpZ25tZW50PWQpOihmPXRoaXMuZ3JpZC52ZXJ0aWNhbEdyaWRBbGlnbm1lbnQhPT1jLHRoaXMuZ3JpZC52ZXJ0aWNhbEdyaWRBbGlnbm1lbnQ9Yyk7dGhpcy5lbGVtLmhvcml6b250YWxQb3NpdGlvbj8oZj1mfHx0aGlzLmdyaWQuaG9yaXpvbnRhbEdyaWRBbGlnbm1lbnQhPT1kLHRoaXMuZ3JpZC5ob3Jpem9udGFsR3JpZEFsaWdubWVudD1kKTooZj1mfHx0aGlzLmdyaWQuaG9yaXpvbnRhbEdyaWRBbGlnbm1lbnQhPT1jLHRoaXMuZ3JpZC5ob3Jpem9udGFsR3JpZEFsaWdubWVudD1jKTtjb25zdCBnPXRoaXMuZ2VuZXJhdGVQb3NpdGlvbkZ1bmN0aW9uKHRoaXMuZWxlbS5ob3Jpem9udGFsUG9zaXRpb24pfHwKTG0sbD10aGlzLmdlbmVyYXRlUG9zaXRpb25GdW5jdGlvbih0aGlzLmVsZW0udmVydGljYWxQb3NpdGlvbil8fE1tO3RoaXMuZ3JpZC5jb21wdXRlSXRlbVBvc2l0aW9uPShrLG0scCxxKT0+KHt4OmcoayxtLHAscSkseTpsKGssbSxwLHEpfSk7Yz10aGlzLmVsZW0udmVydGljYWxQb3NpdGlvbj84OjA7ZD10aGlzLmVsZW0uaG9yaXpvbnRhbFBvc2l0aW9uPzg6MDtmPWZ8fDAhPT1hLnRvcHx8YyE9PWEubGVmdHx8MCE9PWEucmlnaHR8fGQhPT1hLmJvdHRvbTt0aGlzLmdyaWQuY2VsbFBhZGRpbmcudG9wPTA7dGhpcy5ncmlkLmNlbGxQYWRkaW5nLnJpZ2h0PTA7dGhpcy5ncmlkLmNlbGxQYWRkaW5nLmxlZnQ9Yzt0aGlzLmdyaWQuY2VsbFBhZGRpbmcuYm90dG9tPWQ7dGhpcy5ncmlkLm1pbkNlbGxBc3BlY3RSYXRpbz0xO3RoaXMuZ3JpZC5tYXhDZWxsQXNwZWN0UmF0aW89Mn1mPyh0aGlzLmdyaWQuYXJyYW5nZSgpLHRoaXMudXBkYXRlQ2VsbEJhY2tncm91bmRzKCkpOnRoaXMuZ3JpZC5wb3NpdGlvbkl0ZW1zKCk7CnRoaXMudXBkYXRlQXhlcygpO3RoaXMudXBkYXRlTGFiZWxzKCk7dGhpcy51cGRhdGVTZWxlY3RlZEJveGVzKCk7dGhpcy51cGRhdGVDb21wYXJlZEJveGVzKCk7dGhpcy5maXRUb1ZpZXdwb3J0KCl9fWdldFBhbGV0dGVTb3VyY2UoKXtzd2l0Y2godGhpcy5lbGVtLnBhbGV0dGVDaG9pY2Upe2Nhc2UgIndhcm0iOnJldHVybiBybjtjYXNlICJjb29sIjpyZXR1cm4gcW47Y2FzZSAiYXNzaXN0IjpyZXR1cm4gc247ZGVmYXVsdDpyZXR1cm4gcG59fXVwZGF0ZVNjYWxhclBhbGV0dGUoKXtjb25zdCBhPXRoaXMuZWxlbS5jb2xvckJ5LGM9dGhpcy5zdGF0c1thXTt2YXIgZD10aGlzLmdyaWQuaXRlbXMsZj1kMy5yZ2IoIiNBNTI3MTQiKSxnPWQzLnNjYWxlTGluZWFyKCk7Zy5kb21haW4oW2MubnVtYmVyTWluLGMubnVtYmVyTWF4XSkucmFuZ2UoWyJ3aGl0ZSIsIiMxQzNBQTkiXSk7Y29uc3QgbD1bXTtmb3IodmFyIGs9MDtrPGQubGVuZ3RoO2srKyl7dmFyIG09ZFtrXTttPWEgaW4gbS5kYXRhPwptLmRhdGFbYV06TmFOO209Im51bWJlciIhPT10eXBlb2YgbXx8aXNOYU4obSk/ZjpkMy5yZ2IoZyhtKSk7bC5wdXNoKG0pfWQ9dGhpcy5nZW5lcmF0ZUZhY2V0aW5nSW5mbyhhLDUsITEsITEpLmxhYmVsaW5nRnVuY3Rpb247Zj1kMy5zY2FsZUxpbmVhcigpO2YuZG9tYWluKFswLDRdKS5yYW5nZShbIndoaXRlIiwiIzFDM0FBOSJdKTtnPVtdO2ZvcihrPTQ7MDw9aztrLS0pbT1kKGspLGcucHVzaCh7a2V5OmssY29sb3I6ZihrKSxjb250ZW50Om19KTsoYy5vdGhlckNvdW50fHxjLnN0cmluZ0NvdW50fHxjLnRvdGFsQ291bnQ8dGhpcy5ncmlkLml0ZW1zLmxlbmd0aCkmJmcucHVzaCh7a2V5Ok5hTixjb2xvcjoiI0E1MjcxNCIsY29udGVudDp7bGFiZWw6Im1pc3NpbmciLHNwZWNpYWw6ITB9fSk7dGhpcy5lbGVtLnNldCgicGFsZXR0ZSIsZyk7dGhpcy5ncmlkLmNlbGxJdGVtQ29tcGFyYXRvcj0ocCxxKT0+e2lmKCEoYSBpbiBwLmRhdGF8fGEgaW4gcS5kYXRhKSlyZXR1cm4gMDtpZighKGEgaW4KcC5kYXRhKSlyZXR1cm4tMTtpZighKGEgaW4gcS5kYXRhKSlyZXR1cm4gMTtwPXAuZGF0YVthXTtxPXEuZGF0YVthXTtpZihwPT09cSlyZXR1cm4gMDtjb25zdCByPSJudW1iZXIiIT09dHlwZW9mIHB8fGlzTmFOKHApLHQ9Im51bWJlciIhPT10eXBlb2YgcXx8aXNOYU4ocSk7cmV0dXJuIHImJnQ/MDpyPy0xOnQ/MTpwLXF9O3JldHVybiBsfXVwZGF0ZUNhdGVnb3JpY2FsUGFsZXR0ZShhKXtjb25zdCBjPXRoaXMuZWxlbS5jb2xvckJ5LGQ9dGhpcy5zdGF0c1tjXSxmPXRoaXMuZ3JpZC5pdGVtcyxnPU9iamVjdC5rZXlzKGQudmFsdWVIYXNoKTt0aGlzLmVsZW0uc3RhYmxlQ29sb3JzP2cuc29ydCgpOmcuc29ydCgodCx2KT0+ZC52YWx1ZUhhc2hbdl0uY291bnQtZC52YWx1ZUhhc2hbdF0uY291bnQpO2NvbnN0IGw9TWF0aC5taW4oYS5sZW5ndGgsZy5sZW5ndGgpLGs9Zy5zbGljZSgwLGwpLnJlZHVjZSgodCx2LEEpPT57dFt2XT1BO3JldHVybiB0fSx7fSksbT1kMy5yZ2IoIiNGMEYwRjAiKSwKcD1hLm1hcCh0PT5kMy5yZ2IodCkpO2xldCBxPSExO2NvbnN0IHI9W107Zm9yKGxldCB0PTA7dDxmLmxlbmd0aDt0Kyspe2NvbnN0IHY9Ym4oZlt0XS5kYXRhW2NdKTtxPXF8fCEodiBpbiBrKTtyLnB1c2gocFtrW3ZdXXx8bSl9YT1hLnNsaWNlKDAsbCkubWFwKCh0LHYpPT57dj1kLnZhbHVlSGFzaFtnW3ZdXS52YWx1ZTtyZXR1cm57a2V5OnYsY29sb3I6dCxjb250ZW50OntsYWJlbDp2KyIiLHNwZWNpYWw6Im51bWJlciIhPT10eXBlb2YgdiYmInN0cmluZyIhPT10eXBlb2Ygdnx8diBpbiBubn19fSk7cSYmYS5wdXNoKHtrZXk6bnVsbCxjb2xvcjoiI0YwRjBGMCIsY29udGVudDp7bGFiZWw6Im90aGVyIixzcGVjaWFsOiEwfX0pO3RoaXMuZWxlbS5zZXQoInBhbGV0dGUiLGEpO3RoaXMuZ3JpZC5jZWxsSXRlbUNvbXBhcmF0b3I9KHQsdik9PntpZighKGMgaW4gdC5kYXRhfHxjIGluIHYuZGF0YSkpcmV0dXJuIDA7aWYoIShjIGluIHQuZGF0YSkpcmV0dXJuIDE7aWYoIShjIGluIHYuZGF0YSkpcmV0dXJuLTE7CnQ9dC5kYXRhW2NdO3Y9di5kYXRhW2NdO2lmKHQ9PT12KXJldHVybiAwO3Q9Ym4odCk7dj1ibih2KTtyZXR1cm4gdCBpbiBrfHx2IGluIGs/dCBpbiBrP3YgaW4gaz9rW3RdLWtbdl06LTE6MTowfTtyZXR1cm4gcn11cGRhdGVDb2xvcnMoKXtpZih0aGlzLmdyaWQpe3ZhciBhPXRoaXMuZWxlbS5jb2xvckJ5O2lmKGEgaW4gdGhpcy5zdGF0cyl7YT10aGlzLnN0YXRzW2FdO3ZhciBjPXRoaXMuZ2V0UGFsZXR0ZVNvdXJjZSgpO2E9YS51bmlxdWVDb3VudD5jLmxlbmd0aCYmYS5pc051bWVyaWMoKT90aGlzLnVwZGF0ZVNjYWxhclBhbGV0dGUoKTp0aGlzLnVwZGF0ZUNhdGVnb3JpY2FsUGFsZXR0ZShjKTtjPXRoaXMuZ3JpZC5pdGVtczt2YXIgZD1EYXRlLm5vdygpLGY9ZCt0aGlzLmVsZW0udHdlZW5EdXJhdGlvbjtmb3IobGV0IGc9MDtnPGMubGVuZ3RoO2crKyl7Y29uc3QgbD1jW2ddLGs9YVtnXTtsLnNwcml0ZS5yZWJhc2UoZCk7bC5zcHJpdGUucj1rLnI7bC5zcHJpdGUuZz1rLmc7bC5zcHJpdGUuYj0Kay5iO2wuc3ByaXRlLmE9MTgwO2wuc3ByaXRlLnRpbWVzdGFtcD1mfXRoaXMucmVuZGVyVW50aWwoZik7dGhpcy51cGRhdGVHcmlkSXRlbVBvc2l0aW9uc0FmdGVyQ29sb3JDaGFuZ2UoKX1lbHNlIHRoaXMuY2xlYXJDb2xvcnMoKX19dXBkYXRlR3JpZEl0ZW1Qb3NpdGlvbnNBZnRlckNvbG9yQ2hhbmdlKCl7InN0YWNrZWQiIT09dGhpcy5lbGVtLnBvc2l0aW9uTW9kZSYmdGhpcy5lbGVtLnZlcnRpY2FsUG9zaXRpb24mJnRoaXMuZWxlbS5ob3Jpem9udGFsUG9zaXRpb258fHRoaXMudXBkYXRlR3JpZEl0ZW1Qb3NpdGlvbnMoKX1jbGVhckNvbG9ycygpe2NvbnN0IGE9dGhpcy5ncmlkLml0ZW1zLGM9RGF0ZS5ub3coKSxkPWMrdGhpcy5lbGVtLnR3ZWVuRHVyYXRpb247Zm9yKGxldCBmPTA7ZjxhLmxlbmd0aDtmKyspe2NvbnN0IGc9YVtmXTtnLnNwcml0ZS5yZWJhc2UoYyk7Zy5zcHJpdGUucj0wO2cuc3ByaXRlLmc9MDtnLnNwcml0ZS5iPTA7Zy5zcHJpdGUuYT0wO2cuc3ByaXRlLnRpbWVzdGFtcD0KZH10aGlzLnJlbmRlclVudGlsKGQpO3RoaXMuZWxlbS5zZXQoInBhbGV0dGUiLFtdKTt0aGlzLmdyaWQuY2VsbEl0ZW1Db21wYXJhdG9yJiYodGhpcy5ncmlkLmNlbGxJdGVtQ29tcGFyYXRvcj1udWxsLHRoaXMudXBkYXRlR3JpZEl0ZW1Qb3NpdGlvbnNBZnRlckNvbG9yQ2hhbmdlKCkpfXJlc2V0U3ByaXRlc1RvRGVmYXVsdFRleHR1cmUoKXtjb25zdCBhPXRoaXMuZ3JpZC5pdGVtczt0aGlzLnNwcml0ZU1lc2guc3ByaXRlQXRsYXMuY2xlYXJRdWV1ZXMoKTtjb25zdCBjPURhdGUubm93KCksZD1jK3RoaXMuZWxlbS5mYWRlRHVyYXRpb247Zm9yKGxldCBmPTA7ZjxhLmxlbmd0aDtmKyspe2NvbnN0IGc9YVtmXTswPGcuc3ByaXRlLnRleHR1cmVJbmRleCYmZy5zcHJpdGUuc3dpdGNoVGV4dHVyZXMoYyxkKX10aGlzLnJlbmRlclVudGlsKGQpfXVwZGF0ZUltYWdlRmllbGROYW1lKCl7aWYoIXRoaXMuaWdub3JlQ2hhbmdlJiZ0aGlzLmdyaWQpe3RoaXMucmVzZXRTcHJpdGVzVG9EZWZhdWx0VGV4dHVyZSgpOwp2YXIgYT10aGlzLmVsZW0uaW1hZ2VGaWVsZE5hbWU7aWYoYSBpbiB0aGlzLnN0YXRzKXt2YXIgYz10aGlzLmdyaWQuaXRlbXM7Zm9yKGxldCBkPTA7ZDxjLmxlbmd0aDtkKyspe2NvbnN0IHtzcHJpdGU6ZixkYXRhOmd9PWNbZF07Zi5zZXRTcHJpdGVJbWFnZURhdGEoe3R5cGU6InRleHQiLGRhdGE6b24oZ1thXSkubGFiZWx9LCgpPT57Y29uc3QgbD1EYXRlLm5vdygpO2YuYmFzZVRleHR1cmVUaW1lc3RhbXA9bDtmLmJhc2VUZXh0dXJlSW5kZXg9MDtmLnRleHR1cmVUaW1lc3RhbXA9bCt0aGlzLmVsZW0udHdlZW5EdXJhdGlvbjtmLnRleHR1cmVJbmRleD0xO3RoaXMucmVuZGVyVW50aWwoZi50ZXh0dXJlVGltZXN0YW1wKX0pfX1lbHNlIGRlbGV0ZSB0aGlzLmxhc3RBdGxhc1VybCx0aGlzLnF1ZXVlQXRsYXNVcmxDaGFuZ2UoKX19Z2VuZXJhdGVQb3NpdGlvbkZ1bmN0aW9uKGEpe2NvbnN0IGM9dGhpcy5zdGF0c1thXTtpZighY3x8IWMuaXNOdW1lcmljKCkpcmV0dXJuIG51bGw7Y29uc3QgZD0KYy5udW1iZXJNYXgtYy5udW1iZXJNaW47cmV0dXJuIGY9PihmLmRhdGFbYV0tYy5udW1iZXJNaW4pL2R9Z2VuZXJhdGVGYWNldGluZ0luZm8oYSxjLGQsZil7aWYoIShhIGluIHRoaXMuc3RhdHMpKXJldHVybntmYWNldGluZ0Z1bmN0aW9uOigpPT5udWxsLGtleUNvbXBhcmVGdW5jdGlvbjooKT0+MCxsYWJlbGluZ0Z1bmN0aW9uOm9ufTtjb25zdCBnPXRoaXMuc3RhdHNbYV07aWYoZy53b3JkVHJlZSYmMTxnLndvcmRUcmVlLmhpZ2hlc3RMZXZlbCYmZClyZXR1cm4gdGhpcy5nZW5lcmF0ZUJhZ09mV29yZHNGYWNldGluZ0luZm8oYSxjLGYpO2lmKGcudW5pcXVlQ291bnQ8PWMpcmV0dXJue2ZhY2V0aW5nRnVuY3Rpb246az0+YSBpbiBrLmRhdGE/ay5kYXRhW2FdOm51bGwsa2V5Q29tcGFyZUZ1bmN0aW9uOmcuaXNOdW1lcmljKCk/S206Zj9KbTpJbSxsYWJlbGluZ0Z1bmN0aW9uOm9ufTtpZihnLmlzTnVtZXJpYygpJiZnLm51bWJlck1heCE9PWcubnVtYmVyTWluKXJldHVybiB0aGlzLmdlbmVyYXRlTnVtZXJpY0ZhY2V0aW5nSW5mbyhhLApjKTtkPU9iamVjdC5rZXlzKGcudmFsdWVIYXNoKTtkLnNvcnQoKGssbSk9PmcudmFsdWVIYXNoW21dLmNvdW50LWcudmFsdWVIYXNoW2tdLmNvdW50KTtjb25zdCBsPWQuc2xpY2UoMCxjKS5yZWR1Y2UoKGssbSk9PntrW21dPSEwO3JldHVybiBrfSx7fSk7cmV0dXJue2ZhY2V0aW5nRnVuY3Rpb246az0+e2lmKCEoYSBpbiBrLmRhdGEpKXJldHVybiBudWxsO2s9ay5kYXRhW2FdO3JldHVybiBibihrKWluIGw/azoiXHVmZmZjT1RIRVJcdWZmZmMifSxrZXlDb21wYXJlRnVuY3Rpb246Zj9KbTpJbSxsYWJlbGluZ0Z1bmN0aW9uOm9ufX1nZW5lcmF0ZUJhZ09mV29yZHNGYWNldGluZ0luZm8oYSxjLGQpe2NvbnN0IGY9dGhpcy5zdGF0c1thXS53b3JkVHJlZSxnPWYubGV2ZWxIYXNoO3JldHVybntmYWNldGluZ0Z1bmN0aW9uOmw9PntpZighKGEgaW4gbC5kYXRhKSlyZXR1cm4gbnVsbDtmb3IobD1mLm5vZGVIYXNoW2JuKGwuZGF0YVthXSldO2wucGFyZW50JiZsLmxldmVsPmM7KWw9bC5wYXJlbnQ7CnJldHVybiBsLmxldmVsfSxrZXlDb21wYXJlRnVuY3Rpb246KGwsayk9PntsPWdbbF07az1nW2tdO2lmKHZvaWQgMD09PWwmJnZvaWQgMD09PWspcmV0dXJuIDA7aWYodm9pZCAwPT09bClyZXR1cm4tMTtpZih2b2lkIDA9PT1rKXJldHVybiAxO2lmKGwubm9uVmFsdWVDb3VudCYmay5ub25WYWx1ZUNvdW50KXJldHVybiAwO2lmKGwubm9uVmFsdWVDb3VudClyZXR1cm4tMTtpZihrLm5vblZhbHVlQ291bnQpcmV0dXJuIDE7az1rLm9yZGVyLWwub3JkZXI7cmV0dXJuIGQ/azota30sbGFiZWxpbmdGdW5jdGlvbjpsPT57bD1nWytsXTtpZighbC5wYXJlbnQmJiFsLmNvbW1vbldvcmRzLmxlbmd0aClyZXR1cm57bGFiZWw6Im90aGVyIixzcGVjaWFsOiEwfTtpZihsLm5vblZhbHVlQ291bnQpcmV0dXJue2xhYmVsOiJub24td29yZHMiLHNwZWNpYWw6ITB9O2xldCBrPWAgJHsiXHUyMDIyIn0gJHtsLmNvbW1vbldvcmRzLmpvaW4oIiAiKX1gO2ZvcihsZXQgbT0wO208bC5jaGlsZHJlbi5sZW5ndGg7bSsrKWlmKGwuY2hpbGRyZW5bbV0ubGV2ZWw+CmMpe2srPSIgXHUyMDI2IjticmVha31mb3IoO2wucGFyZW50OylsPWwucGFyZW50LGwuY29tbW9uV29yZHMubGVuZ3RoJiYoaz1gICR7Ilx1MjAyMiJ9ICR7bC5jb21tb25Xb3Jkcy5qb2luKCIgIil9IGArayk7cmV0dXJue2xhYmVsOmt9fX19Z2VuZXJhdGVOdW1lcmljRmFjZXRpbmdJbmZvKGEsYyl7Y29uc3QgZD10aGlzLnN0YXRzW2FdLGY9ZC5udW1iZXJNYXgtZC5udW1iZXJNaW47cmV0dXJue2ZhY2V0aW5nRnVuY3Rpb246Zz0+e2lmKCEoYSBpbiBnLmRhdGEpKXJldHVybiBudWxsO2c9Zy5kYXRhW2FdO3JldHVybiJudW1iZXIiIT09dHlwZW9mIGc/Zzppc05hTihnKT9nOk1hdGgubWluKE1hdGguZmxvb3IoYyooZy1kLm51bWJlck1pbikvZiksYy0xKX0sa2V5Q29tcGFyZUZ1bmN0aW9uOkttLGxhYmVsaW5nRnVuY3Rpb246Zz0+e2lmKCJudW1iZXIiIT09dHlwZW9mIGd8fGlzTmFOKCtnKSlyZXR1cm4gb24oZyk7Y29uc3QgbD1kLm51bWJlck1heC1kLm51bWJlck1pbixrPWcvYyoKbCtkLm51bWJlck1pbjtnPSgxK2cpL2MqbCtkLm51bWJlck1pbjtyZXR1cm4gZC5pc0ludGVnZXIoKT97bGFiZWw6dGhpcy5mb3JtYXRSYW5nZShNYXRoLmNlaWwoayksTWF0aC5mbG9vcihnKSl9OntsYWJlbDp0aGlzLmZvcm1hdFJhbmdlKGssZyl9fX19Zm9ybWF0TnVtYmVyKGEpe2lmKG51bGw9PT1hKXJldHVybiJudWxsIjthPXBhcnNlRmxvYXQoYS50b1ByZWNpc2lvbigzKSk7cmV0dXJuIDFFMzw9TWF0aC5hYnMoYSk/ZDMuZm9ybWF0KCJzIikoYSk6IiIrYX1mb3JtYXRSYW5nZShhLGMpe3JldHVybmAke3RoaXMuZm9ybWF0TnVtYmVyKGEpfSBcdTIwMTQgJHt0aGlzLmZvcm1hdE51bWJlcihjKX1gfWdldEtleXMoKXtyZXR1cm4gZm4odGhpcy5lbGVtLmRhdGEpLnNvcnQoKX1yZW5kZXJVbnRpbChhKXt0aGlzLmVuZFRpbWVzdGFtcD1NYXRoLm1heCh0aGlzLmVuZFRpbWVzdGFtcCxhKTt0aGlzLnF1ZXVlUmVuZGVyU2NlbmUoKX1yZXNpemVIYW5kbGVyKCl7Y29uc3QgYT10aGlzLmVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CmEud2lkdGgmJmEuaGVpZ2h0Pyh0aGlzLmxhYmVsc0FuZEF4ZXNTVkcuYXR0cigid2lkdGgiLGEud2lkdGgpLmF0dHIoImhlaWdodCIsYS5oZWlnaHQpLHRoaXMuY2VsbEJhY2tncm91bmRTVkcuYXR0cigid2lkdGgiLGEud2lkdGgpLmF0dHIoImhlaWdodCIsYS5oZWlnaHQpLHRoaXMucmVuZGVyZXImJnRoaXMucmVuZGVyZXIuc2V0U2l6ZShhLndpZHRoLGEuaGVpZ2h0KSx0aGlzLmNhbWVyYS5yaWdodD1hLndpZHRoL3RoaXMuc2NhbGUsdGhpcy5jYW1lcmEuYm90dG9tPS1hLmhlaWdodC90aGlzLnNjYWxlLHRoaXMuY2FtZXJhLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKSx0aGlzLnF1ZXVlUmVuZGVyU2NlbmUoKSk6cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT50aGlzLnJlc2l6ZUhhbmRsZXIoKSl9cXVldWVSZW5kZXJTY2VuZSgpe3RoaXMucmVuZGVyUXVldWVkfHwodGhpcy5yZW5kZXJRdWV1ZWQ9ITAscmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57dGhpcy5yZW5kZXJRdWV1ZWQmJgp0aGlzLnJlbmRlclNjZW5lKCl9KSl9cmVuZGVyU2NlbmUoKXt0aGlzLnJlbmRlclF1ZXVlZD0hMTtjb25zdCBhPURhdGUubm93KCk7dGhpcy5lbmRUaW1lc3RhbXA+YSYmdGhpcy5xdWV1ZVJlbmRlclNjZW5lKCk7aWYodGhpcy5zcHJpdGVNZXNoJiYodGhpcy5zcHJpdGVNZXNoLnRpbWU9YSw4MT4rVEhSRUUuUkVWSVNJT04mJnRoaXMuc3ByaXRlTWVzaC5vbkJlZm9yZVJlbmRlcikpdGhpcy5zcHJpdGVNZXNoLm9uQmVmb3JlUmVuZGVyKCk7dGhpcy5yZW5kZXJlciYmdGhpcy5yZW5kZXJlci5yZW5kZXIodGhpcy5zY2VuZSx0aGlzLmNhbWVyYSk7dGhpcy5zcHJpdGVNZXNoJiZ0aGlzLnNwcml0ZU1lc2guc3ByaXRlQXRsYXMmJnRoaXMuc3ByaXRlTWVzaC5zcHJpdGVBdGxhcy5wb3N0UmVuZGVyKCl9fQpQb2x5bWVyKHtpczoiZmFjZXRzLWRpdmUtdmlzIixiZWhhdmlvcnM6W1BvbHltZXIuSXJvblJlc2l6YWJsZUJlaGF2aW9yXSxwcm9wZXJ0aWVzOntkYXRhOnt0eXBlOkFycmF5LHZhbHVlOm51bGwsb2JzZXJ2ZXI6Il9kYXRhQ2hhbmdlIn0sZmlsdGVyZWREYXRhSW5kaWNlczp7dHlwZTpBcnJheSx2YWx1ZTpudWxsLG9ic2VydmVyOiJfZmlsdGVyZWREYXRhSW5kaWNlc0NoYW5nZSJ9LGF0bGFzVXJsOnt0eXBlOlN0cmluZyx2YWx1ZTpudWxsLG9ic2VydmVyOiJfcXVldWVBdGxhc1VybENoYW5nZSJ9LHNwcml0ZVVybDp7dHlwZTpTdHJpbmcsdmFsdWU6bnVsbCxvYnNlcnZlcjoiX3Nwcml0ZVVybENoYW5nZSJ9LGNyb3NzT3JpZ2luOnt0eXBlOlN0cmluZyx2YWx1ZTpudWxsfSxrZXlzOnt0eXBlOkFycmF5LHZhbHVlOltdLG5vdGlmeTohMCxyZWFkT25seTohMH0sc3RhdHM6e3R5cGU6T2JqZWN0LHZhbHVlOnt9LG5vdGlmeTohMCxyZWFkT25seTohMH0sc2NlbmVQYWRkaW5nOnt0eXBlOk51bWJlciwKdmFsdWU6OH0sdHdlZW5EdXJhdGlvbjp7dHlwZTpOdW1iZXIsdmFsdWU6NjAwfSxmYWRlRHVyYXRpb246e3R5cGU6TnVtYmVyLHZhbHVlOjIwMH0sc3ByaXRlSW1hZ2VXaWR0aDp7dHlwZTpOdW1iZXIsdmFsdWU6NjR9LHNwcml0ZUltYWdlSGVpZ2h0Ont0eXBlOk51bWJlcix2YWx1ZTo2NH0sZ3JpZEZhY2V0aW5nVmVydGljYWxMYWJlbENvbG9yOnt0eXBlOlN0cmluZyx2YWx1ZToiIzY2NjY2NiJ9LGdyaWRGYWNldGluZ0hvcml6b250YWxMYWJlbENvbG9yOnt0eXBlOlN0cmluZyx2YWx1ZToiI2RkNjYyMiJ9LGl0ZW1Qb3NpdGlvbmluZ1ZlcnRpY2FsTGFiZWxDb2xvcjp7dHlwZTpTdHJpbmcsdmFsdWU6IiMyMjU1YWEifSxpdGVtUG9zaXRpb25pbmdIb3Jpem9udGFsTGFiZWxDb2xvcjp7dHlwZTpTdHJpbmcsdmFsdWU6IiMxMTg4NDQifSxmaXRHcmlkQXNwZWN0UmF0aW9Ub1ZpZXdwb3J0Ont0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LHZlcnRpY2FsRmFjZXQ6e3R5cGU6U3RyaW5nLHZhbHVlOiIiLApvYnNlcnZlcjoiX3VwZGF0ZUdyaWRGYWNldGluZyJ9LHZlcnRpY2FsQnVja2V0czp7dHlwZTpOdW1iZXIsdmFsdWU6MTAsb2JzZXJ2ZXI6Il91cGRhdGVHcmlkRmFjZXRpbmcifSx2ZXJ0aWNhbEJhZ09mV29yZHM6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxvYnNlcnZlcjoiX3VwZGF0ZUdyaWRGYWNldGluZyJ9LGhvcml6b250YWxGYWNldDp7dHlwZTpTdHJpbmcsdmFsdWU6IiIsb2JzZXJ2ZXI6Il91cGRhdGVHcmlkRmFjZXRpbmcifSxob3Jpem9udGFsQnVja2V0czp7dHlwZTpOdW1iZXIsdmFsdWU6MTAsb2JzZXJ2ZXI6Il91cGRhdGVHcmlkRmFjZXRpbmcifSxob3Jpem9udGFsQmFnT2ZXb3Jkczp7dHlwZTpCb29sZWFuLHZhbHVlOiExLG9ic2VydmVyOiJfdXBkYXRlR3JpZEZhY2V0aW5nIn0scG9zaXRpb25Nb2RlOnt0eXBlOlN0cmluZyx2YWx1ZToiIixvYnNlcnZlcjoiX3VwZGF0ZUdyaWRJdGVtUG9zaXRpb25zIn0sdmVydGljYWxQb3NpdGlvbjp7dHlwZTpTdHJpbmcsdmFsdWU6IiIsCm9ic2VydmVyOiJfdXBkYXRlR3JpZEl0ZW1Qb3NpdGlvbnMifSxob3Jpem9udGFsUG9zaXRpb246e3R5cGU6U3RyaW5nLHZhbHVlOiIiLG9ic2VydmVyOiJfdXBkYXRlR3JpZEl0ZW1Qb3NpdGlvbnMifSxjb2xvckJ5Ont0eXBlOlN0cmluZyx2YWx1ZToiIixvYnNlcnZlcjoiX3VwZGF0ZUNvbG9ycyIsbm90aWZ5OiEwfSxpbWFnZUZpZWxkTmFtZTp7dHlwZTpTdHJpbmcsdmFsdWU6IiIsb2JzZXJ2ZXI6Il91cGRhdGVJbWFnZUZpZWxkTmFtZSIsbm90aWZ5OiEwfSxwYWxldHRlOnt0eXBlOkFycmF5LHZhbHVlOltdLG5vdGlmeTohMH0scGFsZXR0ZUNob2ljZTp7dHlwZTpTdHJpbmcsdmFsdWU6InN0YW5kYXJkIixvYnNlcnZlcjoiX3VwZGF0ZUNvbG9ycyJ9LHNlbGVjdGVkRGF0YTp7dHlwZTpBcnJheSx2YWx1ZTpbXSxub3RpZnk6ITB9LHNlbGVjdGVkSW5kaWNlczp7dHlwZTpBcnJheSx2YWx1ZTpbXSxub3RpZnk6ITAsb2JzZXJ2ZXI6Il9zZWxlY3RlZEluZGljZXNVcGRhdGVkIn0sY29tcGFyZWREYXRhOnt0eXBlOkFycmF5LAp2YWx1ZTpbXSxub3RpZnk6ITB9LGNvbXBhcmVkSW5kaWNlczp7dHlwZTpBcnJheSx2YWx1ZTpbXSxub3RpZnk6ITAsb2JzZXJ2ZXI6Il9jb21wYXJlZEluZGljZXNVcGRhdGVkIn0sc3RhYmxlQ29sb3JzOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEsb2JzZXJ2ZXI6Il91cGRhdGVDb2xvcnMifX0sbGlzdGVuZXJzOnsiaXJvbi1yZXNpemUiOiJfb25Jcm9uUmVzaXplIn0sY3JlYXRlZCgpe3RoaXMuX2JhY2tpbmc9bmV3IHZuKHRoaXMpfSxyZWFkeSgpe3RoaXMuX2JhY2tpbmcucmVhZHkoKX0sX2RhdGFDaGFuZ2UoYSl7dGhpcy5fYmFja2luZy5zY2VuZT8odGhpcy5fYmFja2luZy5kYXRhQ2hhbmdlKCksdGhpcy5fc2V0S2V5cyh0aGlzLl9iYWNraW5nLmdldEtleXMoKSksdGhpcy5fc2V0U3RhdHModGhpcy5fYmFja2luZy5zdGF0cykpOnJlcXVlc3RBbmltYXRpb25GcmFtZSh0aGlzLl9kYXRhQ2hhbmdlLmJpbmQodGhpcyxhKSl9LF9maWx0ZXJlZERhdGFJbmRpY2VzQ2hhbmdlKGEpe3RoaXMuX2JhY2tpbmcuc2NlbmUmJgp0aGlzLl9iYWNraW5nLml0ZW1zPyh0aGlzLl9iYWNraW5nLmZpbHRlcmVkRGF0YUluZGljZXNDaGFuZ2UoKSx0aGlzLl9zZXRLZXlzKHRoaXMuX2JhY2tpbmcuZ2V0S2V5cygpKSx0aGlzLl9zZXRTdGF0cyh0aGlzLl9iYWNraW5nLnN0YXRzKSk6cmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMuX2ZpbHRlcmVkRGF0YUluZGljZXNDaGFuZ2UuYmluZCh0aGlzLGEpKX0sX3F1ZXVlQXRsYXNVcmxDaGFuZ2UoKXt0aGlzLl9iYWNraW5nLnF1ZXVlQXRsYXNVcmxDaGFuZ2UoKX0sX3Nwcml0ZVVybENoYW5nZSgpe3RoaXMuX2JhY2tpbmcuc3ByaXRlVXJsQ2hhbmdlKCl9LF91cGRhdGVHcmlkRmFjZXRpbmcoKXt0aGlzLl9iYWNraW5nLnVwZGF0ZUdyaWRGYWNldGluZygpfSxfdXBkYXRlR3JpZEl0ZW1Qb3NpdGlvbnMoKXt0aGlzLl9iYWNraW5nLnVwZGF0ZUdyaWRJdGVtUG9zaXRpb25zKCl9LF91cGRhdGVDb2xvcnMoKXt0aGlzLl9iYWNraW5nLnVwZGF0ZUNvbG9ycygpfSxfdXBkYXRlSW1hZ2VGaWVsZE5hbWUoKXt0aGlzLl9iYWNraW5nLnVwZGF0ZUltYWdlRmllbGROYW1lKCl9LApfb25Jcm9uUmVzaXplKCl7dGhpcy5fYmFja2luZy5yZXNpemVIYW5kbGVyKCl9LF9zZWxlY3RlZEluZGljZXNVcGRhdGVkKCl7dGhpcy5fYmFja2luZy5zZWxlY3RlZEluZGljZXNVcGRhdGVkKCl9LF9jb21wYXJlZEluZGljZXNVcGRhdGVkKCl7dGhpcy5fYmFja2luZy5jb21wYXJlZEluZGljZXNVcGRhdGVkKCl9LGZpdFRvVmlld3BvcnQoKXt0aGlzLl9iYWNraW5nLmZpdFRvVmlld3BvcnQoKX0sem9vbUluKCl7dGhpcy5fYmFja2luZy56b29tSW4oKX0sem9vbU91dCgpe3RoaXMuX2JhY2tpbmcuem9vbU91dCgpfX0pOwo8L3NjcmlwdD4KCgo8ZG9tLW1vZHVsZSBpZD0iZmFjZXRzLWRpdmUtY29udHJvbHMiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLWJhc2U7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBvdmVyZmxvdzogdmlzaWJsZTsKICAgICAgfQoKICAgICAgLm1haW4tY29udHJvbHMgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDYwcHg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgb3ZlcmZsb3c6IHZpc2libGU7CiAgICAgIH0KCiAgICAgIC5vdmVyZmxvdy1ob2xkZXIgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIHdpZHRoOiA2MHB4OwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIG92ZXJmbG93OiB2aXNpYmxlOwogICAgICB9CgogICAgICAjb3ZlcmZsb3dtZW51IHsKICAgICAgICBtYXJnaW46IDAgNDBweDsKICAgICAgfQoKICAgICAgLm92ZXJmbG93LWRpdiB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICB9CgogICAgICAub3ZlcmZsb3ctY2hlY2tib3ggewogICAgICAgIG1hcmdpbjogOHB4IDA7CiAgICAgICAgcGFkZGluZwogICAgICB9CgogICAgICAuZHJvcGRvd24taG9sZGVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIHdpZHRoOiAxNTBweDsKICAgICAgICBtYXJnaW46IDAgMTBweDsKICAgICAgfQoKICAgICAgLmRyb3Bkb3duLXRyaWdnZXIgewogICAgICAgIG1hcmdpbi10b3A6IDEwcHg7CiAgICAgIH0KCiAgICAgIC5leHBhbmQtYnV0dG9uIHsKICAgICAgICBjb2xvcjogIzliOWI5YjsKICAgICAgICAtLXBhcGVyLWljb24tYnV0dG9uLWluay1jb2xvcjogIzliOWI5YjsKICAgICAgfQogICAgICBwYXBlci1tZW51IHBhcGVyLWNoZWNrYm94IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBmb250LXdlaWdodDogbm9ybWFsOwogICAgICAgIGZvbnQtc2l6ZTogMTIuNXB4OwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgfQoKICAgICAgcGFwZXItaXRlbSB7CiAgICAgICAgcGFkZGluZzogMCAxNHB4OwogICAgICAgIC0tcGFwZXItaXRlbS1taW4taGVpZ2h0OiAzNnB4OwogICAgICB9CiAgICAgIHBhcGVyLWRyb3Bkb3duLW1lbnUgcGFwZXItaXRlbSB7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNjY2M7CiAgICAgIH0KCiAgICAgICN2ZXJ0aWNhbEZhY2V0IHsKICAgICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnB1dDogewogICAgICAgICAgY29sb3I6IHZhcigtLWdyaWQtZmFjZXRpbmctdmVydGljYWwtbGFiZWwtY29sb3IpOwogICAgICAgIH07CiAgICAgIH0KICAgICAgI2hvcml6b250YWxGYWNldCB7CiAgICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItaW5wdXQ6IHsKICAgICAgICAgIGNvbG9yOiB2YXIoLS1ncmlkLWZhY2V0aW5nLWhvcml6b250YWwtbGFiZWwtY29sb3IpOwogICAgICAgIH07CiAgICAgIH0KICAgICAgI3ZlcnRpY2FsUG9zaXRpb24gewogICAgICAgIC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWlucHV0OiB7CiAgICAgICAgICBjb2xvcjogdmFyKC0taXRlbS1wb3NpdGlvbmluZy12ZXJ0aWNhbC1sYWJlbC1jb2xvcik7CiAgICAgICAgfTsKICAgICAgfQogICAgICAjaG9yaXpvbnRhbFBvc2l0aW9uIHsKICAgICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnB1dDogewogICAgICAgICAgY29sb3I6IHZhcigtLWl0ZW0tcG9zaXRpb25pbmctaG9yaXpvbnRhbC1sYWJlbC1jb2xvcik7CiAgICAgICAgfTsKICAgICAgfQogICAgICAudmVydGljYWwtZmFjZXQgewogICAgICAgIGNvbG9yOiB2YXIoLS1ncmlkLWZhY2V0aW5nLXZlcnRpY2FsLWxhYmVsLWNvbG9yKTsKICAgICAgfQogICAgICAuaG9yaXpvbnRhbC1mYWNldCB7CiAgICAgICAgY29sb3I6IHZhcigtLWdyaWQtZmFjZXRpbmctaG9yaXpvbnRhbC1sYWJlbC1jb2xvcik7CiAgICAgIH0KICAgICAgLnZlcnRpY2FsLXBvc2l0aW9uIHsKICAgICAgICBjb2xvcjogdmFyKC0taXRlbS1wb3NpdGlvbmluZy12ZXJ0aWNhbC1sYWJlbC1jb2xvcik7CiAgICAgIH0KICAgICAgLmhvcml6b250YWwtcG9zaXRpb24gewogICAgICAgIGNvbG9yOiB2YXIoLS1pdGVtLXBvc2l0aW9uaW5nLWhvcml6b250YWwtbGFiZWwtY29sb3IpOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxkaXYgY2xhc3M9Im1haW4tY29udHJvbHMiPgogICAgICAgIDxkaXYgY2xhc3M9ImRyb3Bkb3duLWhvbGRlciBob3Jpem9udGFsLWZhY2V0Ij4KICAgICAgICAgICAgPHBhcGVyLWRyb3Bkb3duLW1lbnUgaWQ9Imhvcml6b250YWxGYWNldCIgbGFiZWw9IkJpbm5pbmcgfCBYLUF4aXMiIGNsYXNzPSJmYWNldC1zZWxlY3RvciI+CiAgICAgICAgICAgICAgPHBhcGVyLWxpc3Rib3ggY2xhc3M9ImRyb3Bkb3duLWNvbnRlbnQiIHNlbGVjdGVkPSJ7e2hvcml6b250YWxGYWNldH19IiBhdHRyLWZvci1zZWxlY3RlZD0idmFsdWUiIHNsb3Q9ImRyb3Bkb3duLWNvbnRlbnQiPgogICAgICAgICAgICAgICAgPHBhcGVyLWl0ZW0gdmFsdWU9IiI+KG5vbmUpPC9wYXBlci1pdGVtPgogICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1trZXlzXV0iPgogICAgICAgICAgICAgICAgICA8cGFwZXItaXRlbSB2YWx1ZT0iW1tpdGVtXV0iPltbX2JyZWFrVXBBbmRUcnVuY2F0ZShpdGVtKV1dPC9wYXBlci1pdGVtPgogICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICA8L3BhcGVyLWxpc3Rib3g+CiAgICAgICAgICAgIDwvcGFwZXItZHJvcGRvd24tbWVudT4KICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tob3Jpem9udGFsRmFjZXRdXSI+CiAgICAgICAgICA8cGFwZXItaW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjEiIG1heD0iW1tfbWF4QnVja2V0cyhob3Jpem9udGFsRmFjZXQsIGhvcml6b250YWxCYWdPZldvcmRzKV1dIiB2YWx1ZT0ie3tob3Jpem9udGFsQnVja2V0c319IiBsYWJlbD0iQ291bnQiPgogICAgICAgICAgICA8L3BhcGVyLWlucHV0PgogICAgICAgICAgPC90ZW1wbGF0ZT4KCiAgICAgIDxkaXYgY2xhc3M9ImRyb3Bkb3duLWhvbGRlciB2ZXJ0aWNhbC1mYWNldCI+CiAgICAgICAgPHBhcGVyLWRyb3Bkb3duLW1lbnUgaWQ9InZlcnRpY2FsRmFjZXQiIGxhYmVsPSJCaW5uaW5nIHwgWS1BeGlzIiBjbGFzcz0iZmFjZXQtc2VsZWN0b3IiPgogICAgICAgICAgPHBhcGVyLWxpc3Rib3ggY2xhc3M9ImRyb3Bkb3duLWNvbnRlbnQiIHNlbGVjdGVkPSJ7e3ZlcnRpY2FsRmFjZXR9fSIgYXR0ci1mb3Itc2VsZWN0ZWQ9InZhbHVlIiBzbG90PSJkcm9wZG93bi1jb250ZW50Ij4KICAgICAgICAgICAgPHBhcGVyLWl0ZW0gdmFsdWU9IiI+KG5vbmUpPC9wYXBlci1pdGVtPgogICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW2tleXNdXSI+CiAgICAgICAgICAgICAgPHBhcGVyLWl0ZW0gdmFsdWU9IltbaXRlbV1dIj5bW19icmVha1VwQW5kVHJ1bmNhdGUoaXRlbSldXTwvcGFwZXItaXRlbT4KICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDwvcGFwZXItbGlzdGJveD4KICAgICAgICA8L3BhcGVyLWRyb3Bkb3duLW1lbnU+CiAgICAgIDwvZGl2PgoKICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW3ZlcnRpY2FsRmFjZXRdXSI+CiAgICAgICAgPHBhcGVyLWlucHV0IHR5cGU9Im51bWJlciIgbWluPSIxIiBtYXg9IltbX21heEJ1Y2tldHModmVydGljYWxGYWNldCx2ZXJ0aWNhbEJhZ09mV29yZHMpXV0iIHZhbHVlPSJ7e3ZlcnRpY2FsQnVja2V0c319IiBsYWJlbD0iQ291bnQiPgogICAgICAgIDwvcGFwZXItaW5wdXQ+CiAgICAgIDwvdGVtcGxhdGU+CgogICAgICA8ZGl2IGNsYXNzPSJkcm9wZG93bi1ob2xkZXIiPgogICAgICAgIDxwYXBlci1kcm9wZG93bi1tZW51IGlkPSJjb2xvckJ5IiBsYWJlbD0iQ29sb3IgQnkiPgogICAgICAgICAgPHBhcGVyLWxpc3Rib3ggY2xhc3M9ImRyb3Bkb3duLWNvbnRlbnQiIHNlbGVjdGVkPSJ7e2NvbG9yQnl9fSIgYXR0ci1mb3Itc2VsZWN0ZWQ9InZhbHVlIiBzbG90PSJkcm9wZG93bi1jb250ZW50Ij4KICAgICAgICAgICAgPHBhcGVyLWl0ZW0gdmFsdWU9IiI+KG5vbmUpPC9wYXBlci1pdGVtPgogICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW2tleXNdXSI+CiAgICAgICAgICAgICAgPHBhcGVyLWl0ZW0gdmFsdWU9IltbaXRlbV1dIj5bW2l0ZW1dXTwvcGFwZXItaXRlbT4KICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDwvcGFwZXItbGlzdGJveD4KICAgICAgICA8L3BhcGVyLWRyb3Bkb3duLW1lbnU+CiAgICAgIDwvZGl2PgoKICAgICAgPGRpdiBjbGFzcz0iZHJvcGRvd24taG9sZGVyIj4KICAgICAgICA8cGFwZXItZHJvcGRvd24tbWVudSBpZD0iaW1hZ2VGaWVsZE5hbWUiIGxhYmVsPSJMYWJlbCBCeSI+CiAgICAgICAgICA8cGFwZXItbGlzdGJveCBjbGFzcz0iZHJvcGRvd24tY29udGVudCIgc2VsZWN0ZWQ9Int7aW1hZ2VGaWVsZE5hbWV9fSIgYXR0ci1mb3Itc2VsZWN0ZWQ9InZhbHVlIiBzbG90PSJkcm9wZG93bi1jb250ZW50Ij4KICAgICAgICAgICAgPHBhcGVyLWl0ZW0gdmFsdWU9IiI+CiAgICAgICAgICAgICAgW1tfZ2V0SW1hZ2VGaWVsZE5hbWVEZWZhdWx0TGFiZWwoYXRsYXNVcmwpXV0KICAgICAgICAgICAgPC9wYXBlci1pdGVtPgogICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW2tleXNdXSI+CiAgICAgICAgICAgICAgPHBhcGVyLWl0ZW0gdmFsdWU9IltbaXRlbV1dIj5bW2l0ZW1dXTwvcGFwZXItaXRlbT4KICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDwvcGFwZXItbGlzdGJveD4KICAgICAgICA8L3BhcGVyLWRyb3Bkb3duLW1lbnU+CiAgICAgIDwvZGl2PgoKICAgICAgPGRpdiBjbGFzcz0iZHJvcGRvd24taG9sZGVyIGhvcml6b250YWwtcG9zaXRpb24iPgogICAgICAgIDxwYXBlci1kcm9wZG93bi1tZW51IGlkPSJob3Jpem9udGFsUG9zaXRpb24iIGxhYmVsPSJTY2F0dGVyIHwgWC1BeGlzIiBjbGFzcz0icG9zaXRpb24tc2VsZWN0b3IiPgogICAgICAgICAgPHBhcGVyLWxpc3Rib3ggY2xhc3M9ImRyb3Bkb3duLWNvbnRlbnQiIHNlbGVjdGVkPSJ7e2hvcml6b250YWxQb3NpdGlvbn19IiBhdHRyLWZvci1zZWxlY3RlZD0idmFsdWUiIHNsb3Q9ImRyb3Bkb3duLWNvbnRlbnQiPgogICAgICAgICAgICA8cGFwZXItaXRlbSB2YWx1ZT0iIj4oZGVmYXVsdCk8L3BhcGVyLWl0ZW0+CiAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9Iltba2V5c11dIiBmaWx0ZXI9Il9pc0tleU51bWVyaWMiPgogICAgICAgICAgICAgIDxwYXBlci1pdGVtIHZhbHVlPSJbW2l0ZW1dXSI+W1tpdGVtXV08L3BhcGVyLWl0ZW0+CiAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8L3BhcGVyLWxpc3Rib3g+CiAgICAgICAgPC9wYXBlci1kcm9wZG93bi1tZW51PgogICAgICA8L2Rpdj4KCiAgICAgIDxkaXYgY2xhc3M9ImRyb3Bkb3duLWhvbGRlciB2ZXJ0aWNhbC1wb3NpdGlvbiI+CiAgICAgICAgPHBhcGVyLWRyb3Bkb3duLW1lbnUgaWQ9InZlcnRpY2FsUG9zaXRpb24iIGxhYmVsPSJTY2F0dGVyIHwgWS1BeGlzIiBjbGFzcz0icG9zaXRpb24tc2VsZWN0b3IiPgogICAgICAgICAgPHBhcGVyLWxpc3Rib3ggY2xhc3M9ImRyb3Bkb3duLWNvbnRlbnQiIHNlbGVjdGVkPSJ7e3ZlcnRpY2FsUG9zaXRpb259fSIgYXR0ci1mb3Itc2VsZWN0ZWQ9InZhbHVlIiBzbG90PSJkcm9wZG93bi1jb250ZW50Ij4KICAgICAgICAgICAgPHBhcGVyLWl0ZW0gdmFsdWU9IiI+KGRlZmF1bHQpPC9wYXBlci1pdGVtPgogICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW2tleXNdXSIgZmlsdGVyPSJfaXNLZXlOdW1lcmljIj4KICAgICAgICAgICAgICA8cGFwZXItaXRlbSB2YWx1ZT0iW1tpdGVtXV0iPltbaXRlbV1dPC9wYXBlci1pdGVtPgogICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPC9wYXBlci1saXN0Ym94PgogICAgICAgIDwvcGFwZXItZHJvcGRvd24tbWVudT4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9Im92ZXJmbG93LWhvbGRlciI+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfc2hvdWxkU2hvd092ZXJmbG93TWVudShjb2xvckJ5LCB2ZXJ0aWNhbEZhY2V0LCBob3Jpem9udGFsRmFjZXQpXV0iPgogICAgICAgIDxwYXBlci1pY29uLWJ1dHRvbiBjbGFzcz0iZHJvcGRvd24tdHJpZ2dlciIgaWNvbj0ibW9yZS12ZXJ0IiBhbHQ9Im1vcmUtdmVydCIgaWQ9Im92ZXJmbG93YnRuIiBvbi1jbGljaz0iX29wZW5PdmVyZmxvdyI+CiAgICAgICAgPC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPHBhcGVyLWRpYWxvZyBpZD0ib3ZlcmZsb3dtZW51IiBuby1vdmVybGFwIGhvcml6b250YWwtYWxpZ249InJpZ2h0IiB2ZXJ0aWNhbC1hbGlnbj0idG9wIj4KICAgICAgICA8ZGl2IGNsYXNzPSJvdmVyZmxvdy1kaXYiPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJ7e19pc0tleUNhdGVnb3JpY2FsKGNvbG9yQnkpfX0iPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJkcm9wZG93bi1ob2xkZXIiPgogICAgICAgICAgICAgIDxwYXBlci1kcm9wZG93bi1tZW51IGlkPSJwYWxldHRlQ2hvaWNlIiBsYWJlbD0iRGlzcGxheSB8IENvbG9yIFBhbGV0dGUiPgogICAgICAgICAgICAgICAgPHBhcGVyLWxpc3Rib3ggY2xhc3M9ImRyb3Bkb3duLWNvbnRlbnQiIHNlbGVjdGVkPSJ7e3BhbGV0dGVDaG9pY2V9fSIgYXR0ci1mb3Itc2VsZWN0ZWQ9InZhbHVlIiBzbG90PSJkcm9wZG93bi1jb250ZW50Ij4KICAgICAgICAgICAgICAgICAgPHBhcGVyLWl0ZW0gdmFsdWU9InN0YW5kYXJkIj5zdGFuZGFyZDwvcGFwZXItaXRlbT4KICAgICAgICAgICAgICAgICAgPHBhcGVyLWl0ZW0gdmFsdWU9Indhcm0iPndhcm08L3BhcGVyLWl0ZW0+CiAgICAgICAgICAgICAgICAgIDxwYXBlci1pdGVtIHZhbHVlPSJjb29sIj5jb29sPC9wYXBlci1pdGVtPgogICAgICAgICAgICAgICAgICA8cGFwZXItaXRlbSB2YWx1ZT0iYXNzaXN0Ij5hc3Npc3Q8L3BhcGVyLWl0ZW0+CiAgICAgICAgICAgICAgICA8L3BhcGVyLWxpc3Rib3g+CiAgICAgICAgICAgICAgPC9wYXBlci1kcm9wZG93bi1tZW51PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2hhc1dvcmRUcmVlKHZlcnRpY2FsRmFjZXQpXV0iPgogICAgICAgICAgICA8cGFwZXItY2hlY2tib3ggY2xhc3M9Im92ZXJmbG93LWNoZWNrYm94IiBjaGVja2VkPSJ7e3ZlcnRpY2FsQmFnT2ZXb3Jkc319Ij4KICAgICAgICAgICAgICBYLUF4aXMgQmFnIG9mIHdvcmRzCiAgICAgICAgICAgIDwvcGFwZXItY2hlY2tib3g+CiAgICAgICAgICA8L3RlbXBsYXRlPgoKICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaGFzV29yZFRyZWUoaG9yaXpvbnRhbEZhY2V0KV1dIj4KICAgICAgICAgICAgPHBhcGVyLWNoZWNrYm94IGNsYXNzPSJvdmVyZmxvdy1jaGVja2JveCIgY2hlY2tlZD0ie3tob3Jpem9udGFsQmFnT2ZXb3Jkc319Ij4KICAgICAgICAgICAgICBZLUF4aXMgQmFnIG9mIHdvcmRzCiAgICAgICAgICAgIDwvcGFwZXItY2hlY2tib3g+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvZGl2PgogICAgICA8L3BhcGVyLWRpYWxvZz4KICAgIDwvZGl2PgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT4KCjxzY3JpcHQ+Ly9+fldFQlBBVEh+fi9mYWNldHMtZGl2ZS9jb21wb25lbnRzL2ZhY2V0cy1kaXZlLWNvbnRyb2xzL2ZhY2V0cy1kaXZlLWNvbnRyb2xzLmpzClBvbHltZXIoe2lzOiJmYWNldHMtZGl2ZS1jb250cm9scyIscHJvcGVydGllczp7YXRsYXNVcmw6e3R5cGU6U3RyaW5nLHZhbHVlOiIifSxrZXlzOnt0eXBlOkFycmF5LHZhbHVlOltdfSxzdGF0czp7dHlwZTpPYmplY3QsdmFsdWU6e319LHZlcnRpY2FsRmFjZXQ6e3R5cGU6U3RyaW5nLHZhbHVlOiIiLG5vdGlmeTohMH0sdmVydGljYWxCdWNrZXRzOnt0eXBlOk51bWJlcix2YWx1ZToxMCxub3RpZnk6ITB9LHZlcnRpY2FsQmFnT2ZXb3Jkczp7dHlwZTpCb29sZWFuLHZhbHVlOiExLG5vdGlmeTohMH0saG9yaXpvbnRhbEZhY2V0Ont0eXBlOlN0cmluZyx2YWx1ZToiIixub3RpZnk6ITB9LGhvcml6b250YWxCdWNrZXRzOnt0eXBlOk51bWJlcix2YWx1ZToxMCxub3RpZnk6ITB9LGhvcml6b250YWxCYWdPZldvcmRzOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEsbm90aWZ5OiEwfSxwb3NpdGlvbk1vZGU6e3R5cGU6U3RyaW5nLGNvbXB1dGVkOiJfZ2V0UG9zaXRpb25Nb2RlKHZlcnRpY2FsUG9zaXRpb24sIGhvcml6b250YWxQb3NpdGlvbikiLApub3RpZnk6ITB9LHZlcnRpY2FsUG9zaXRpb246e3R5cGU6U3RyaW5nLHZhbHVlOiIiLG5vdGlmeTohMH0saG9yaXpvbnRhbFBvc2l0aW9uOnt0eXBlOlN0cmluZyx2YWx1ZToiIixub3RpZnk6ITB9LGNvbG9yQnk6e3R5cGU6U3RyaW5nLHZhbHVlOiIiLG5vdGlmeTohMH0saW1hZ2VGaWVsZE5hbWU6e3R5cGU6U3RyaW5nLHZhbHVlOiIiLG5vdGlmeTohMH0scGFsZXR0ZTp7dHlwZTpBcnJheSx2YWx1ZTpbXX0scGFsZXR0ZUNob2ljZTp7dHlwZTpTdHJpbmcsdmFsdWU6InN0YW5kYXJkIixub3RpZnk6ITB9LGdyaWRGYWNldGluZ1ZlcnRpY2FsTGFiZWxDb2xvcjp7dHlwZTpTdHJpbmcsdmFsdWU6IiM2NjY2NjYiLG9ic2VydmVyOiJfdXBkYXRlQ1NTVmFycyJ9LGdyaWRGYWNldGluZ0hvcml6b250YWxMYWJlbENvbG9yOnt0eXBlOlN0cmluZyx2YWx1ZToiI2RkNjYyMiIsb2JzZXJ2ZXI6Il91cGRhdGVDU1NWYXJzIn0saXRlbVBvc2l0aW9uaW5nVmVydGljYWxMYWJlbENvbG9yOnt0eXBlOlN0cmluZywKdmFsdWU6IiMyMjU1YWEiLG9ic2VydmVyOiJfdXBkYXRlQ1NTVmFycyJ9LGl0ZW1Qb3NpdGlvbmluZ0hvcml6b250YWxMYWJlbENvbG9yOnt0eXBlOlN0cmluZyx2YWx1ZToiIzExODg0NCIsb2JzZXJ2ZXI6Il91cGRhdGVDU1NWYXJzIn19LF9nZXRJbWFnZUZpZWxkTmFtZURlZmF1bHRMYWJlbChhKXtyZXR1cm4gYT8iKGltYWdlKSI6IihkZWZhdWx0KSJ9LF9pc01vZGVTY2F0dGVyKGEpe3JldHVybiJzY2F0dGVyIj09PWF9LF9pc0tleU51bWVyaWMoYSl7cmV0dXJuIHRoaXMuc3RhdHMmJmEgaW4gdGhpcy5zdGF0cyYmdGhpcy5zdGF0c1thXS5pc051bWVyaWMoKX0sX2lzS2V5Q2F0ZWdvcmljYWwoYSl7cmV0dXJuIHRoaXMuc3RhdHMmJmEgaW4gdGhpcy5zdGF0cyYmIXRoaXMuc3RhdHNbYV0uaXNOdW1lcmljKCl9LF91cGRhdGVDU1NWYXJzKCl7dGhpcy51cGRhdGVTdHlsZXMoeyItLWdyaWQtZmFjZXRpbmctdmVydGljYWwtbGFiZWwtY29sb3IiOnRoaXMuZ3JpZEZhY2V0aW5nVmVydGljYWxMYWJlbENvbG9yLAoiLS1ncmlkLWZhY2V0aW5nLWhvcml6b250YWwtbGFiZWwtY29sb3IiOnRoaXMuZ3JpZEZhY2V0aW5nSG9yaXpvbnRhbExhYmVsQ29sb3IsIi0taXRlbS1wb3NpdGlvbmluZy12ZXJ0aWNhbC1sYWJlbC1jb2xvciI6dGhpcy5pdGVtUG9zaXRpb25pbmdWZXJ0aWNhbExhYmVsQ29sb3IsIi0taXRlbS1wb3NpdGlvbmluZy1ob3Jpem9udGFsLWxhYmVsLWNvbG9yIjp0aGlzLml0ZW1Qb3NpdGlvbmluZ0hvcml6b250YWxMYWJlbENvbG9yfSl9LF9icmVha1VwQW5kVHJ1bmNhdGUoYSl7cmV0dXJuIGtuKGxuKCIiK2EpKX0sX21heEJ1Y2tldHMoYSxjKXtjb25zdCBkPXRoaXMuc3RhdHM/dGhpcy5zdGF0c1thXTpudWxsO3JldHVybiBkP2MmJnRoaXMuX2hhc1dvcmRUcmVlKGEpP01hdGgubWluKDEwMCxkLndvcmRUcmVlLmhpZ2hlc3RMZXZlbCk6TWF0aC5taW4oMTAwLGQudW5pcXVlQ291bnQrMSk6MTAwfSxfaGFzV29yZFRyZWUoYSl7YT10aGlzLnN0YXRzP3RoaXMuc3RhdHNbYV06bnVsbDsKcmV0dXJuISFhJiYhIWEud29yZFRyZWUmJjE8YS53b3JkVHJlZS5oaWdoZXN0TGV2ZWx9LF9nZXRQb3NpdGlvbk1vZGUoYSxjKXtyZXR1cm4iIj09YSYmIiI9PWM/InN0YWNrZWQiOiJzY2F0dGVyIn0sX29wZW5PdmVyZmxvdygpe3RoaXMuJC5vdmVyZmxvd21lbnUucG9zaXRpb25FbGVtZW50PXRoaXMuJC5vdmVyZmxvd2J0bjt0aGlzLiQub3ZlcmZsb3dtZW51Lm9wZW4oKX0sX3Nob3VsZFNob3dPdmVyZmxvd01lbnUoYSxjLGQpe3JldHVybiB0aGlzLl9pc0tleUNhdGVnb3JpY2FsKGEpfHx0aGlzLl9oYXNXb3JkVHJlZShjKXx8dGhpcy5faGFzV29yZFRyZWUoZCl9fSk7Cjwvc2NyaXB0PgoKCgoKPHNjcmlwdD4vL35+V0VCUEFUSH5+L2ZhY2V0cy1kaXZlL2xpYi9pbmZvLXJlbmRlcmVycy5qcwpjb25zdCB3bj0oYSxjKT0+e2NvbnN0IGQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGwiKTtmb3IoY29uc3QgZyBpbiBhKWlmKGEuaGFzT3duUHJvcGVydHkoZykpe3ZhciBmPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImR0Iik7Zi50ZXh0Q29udGVudD1nO2QuYXBwZW5kQ2hpbGQoZik7Zj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkZCIpO2YudGV4dENvbnRlbnQ9YVtnXTtkLmFwcGVuZENoaWxkKGYpfWMuYXBwZW5kQ2hpbGQoZCl9Owo8L3NjcmlwdD4KCgo8ZG9tLW1vZHVsZSBpZD0iZmFjZXRzLWRpdmUtaW5mby1jYXJkIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1iYXNlOwogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgbWF4LWhlaWdodDogMTAwJTsKICAgICAgICBtYXgtd2lkdGg6IDEwMCU7CiAgICAgICAgb3ZlcmZsb3c6IGF1dG87CiAgICAgICAgcGFkZGluZzogOHB4OwogICAgICB9CiAgICAgIGR0IHsKICAgICAgICBjb2xvcjogIzllN2M2NTsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgIH0KICAgICAgZGQgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLWNvZGU7CiAgICAgICAgY29sb3I6ICM1MTM3MjY7CiAgICAgICAgbWFyZ2luOiAwIDAgMTZweCAwOwogICAgICB9CiAgICA8L3N0eWxlPgogICAgPGRpdiBpZD0iaG9sZGVyIj48L2Rpdj4KICAgIAogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT4KCjxzY3JpcHQ+Ly9+fldFQlBBVEh+fi9mYWNldHMtZGl2ZS9jb21wb25lbnRzL2ZhY2V0cy1kaXZlLWluZm8tY2FyZC9mYWNldHMtZGl2ZS1pbmZvLWNhcmQuanMKUG9seW1lcih7aXM6ImZhY2V0cy1kaXZlLWluZm8tY2FyZCIscHJvcGVydGllczp7aW5mb1JlbmRlcmVyOnt0eXBlOk9iamVjdH0sc2VsZWN0ZWREYXRhOnt0eXBlOkFycmF5LHZhbHVlOltdLG9ic2VydmVyOiJfdXBkYXRlU2VsZWN0ZWQifX0scmVhZHkoKXt0aGlzLnNjb3BlU3VidHJlZSh0aGlzLiQuaG9sZGVyLCEwKX0sX3VwZGF0ZVNlbGVjdGVkKGEpe3RoaXMuJC5ob2xkZXIuaW5uZXJIVE1MPSIiO2lmKGEpe3ZhciBjPXRoaXMuaW5mb1JlbmRlcmVyfHx3bjtmb3IobGV0IGQ9MDtkPGEubGVuZ3RoO2QrKyl7Y29uc3QgZj1hW2RdLGc9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Zy5zdHlsZS53aWR0aD0iMTAwJSI7dGhpcy4kLmhvbGRlci5hcHBlbmRDaGlsZChnKTtjKGYsZyl9fX19KTsKPC9zY3JpcHQ+CgoKCgoKCgoKCgo8ZG9tLW1vZHVsZSBpZD0iZmFjZXRzLWRpdmUtbGVnZW5kIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1iYXNlOwogICAgICB9CgogICAgICAubGVnZW5kIHsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjYTlhOWE5OwogICAgICAgIG1pbi13aWR0aDogMjAwcHg7CiAgICAgIH0KCiAgICAgIC50b3BiYXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICAgIHBhZGRpbmc6IDhweDsKICAgICAgICBiYWNrZ3JvdW5kOiAjRTZFNkZBOwogICAgICB9CgogICAgICAuZXhwYW5kLWJ1dHRvbiB7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgICB3aWR0aDogMjBweDsKICAgICAgICBoZWlnaHQ6IDIwcHg7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDEwcHg7CiAgICAgIH0KCiAgICAgIC5sZWdlbmQtYm9keSB7CiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNhOWE5YTk7CiAgICAgICAgcGFkZGluZzogOHB4OwogICAgICAgIGJhY2tncm91bmQ6IHdoaXRlOwogICAgICB9CgogICAgICAubGVnZW5kIC5sYXlvdXQtcm93IHsKICAgICAgICBtYXJnaW46IDA7CiAgICAgIH0KICAgICAgLmxlZ2VuZCAubGF5b3V0LXJvdyBzcGFuIHsKICAgICAgICBtYXJnaW46IDJweCAwIDAgOHB4OwogICAgICB9CgogICAgICAvKioKICAgICAgICogTGVnZW5kIHRhYmxlIHNoaW0uIFBvbHltZXIncyBkb20tcmVwZWF0IGZlYXR1cmUgaGFzIGEga25vd24gaXNzdWUgaW4KICAgICAgICogd2hpY2ggaXQgZG9lc24ndCB3b3JrIHdpdGggPHRyPiBlbGVtZW50cyBpbnNpZGUgb2YgYSA8dGFibGU+LiBTbwogICAgICAgKiBpbnN0ZWFkLCB3ZSB1c2UgQ1NTIHdpdGggY2xhc3NlZCBkaXZzIHRvIGFjaGlldmUgdGFibGUgYmVoYXZpb3IuCiAgICAgICAqLwogICAgICAubGVnZW5kLXRhYmxlIHsKICAgICAgICBkaXNwbGF5OiB0YWJsZTsKICAgICAgICBtYXJnaW4tbGVmdDogMnB4OwogICAgICB9CiAgICAgIC5sZWdlbmQtcm93IHsKICAgICAgICBkaXNwbGF5OiB0YWJsZS1yb3c7CiAgICAgIH0KICAgICAgLmxlZ2VuZC1jZWxsIHsKICAgICAgICBkaXNwbGF5OiB0YWJsZS1jZWxsOwogICAgICB9CgogICAgICAvKioKICAgICAgICogQ29sb3IgbGVnZW5kLgogICAgICAgKi8KICAgICAgLmxlZ2VuZCAuY29sb3IgewogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgfQogICAgICAubGVnZW5kIC5jb2xvciBpcm9uLWljb24gewogICAgICAgIC0taXJvbi1pY29uLXdpZHRoOiAxNnB4OwogICAgICAgIC0taXJvbi1pY29uLWhlaWdodDogMTZweDsKICAgICAgICBtYXJnaW46IDAgMnB4OwogICAgICB9CiAgICAgIC5sZWdlbmQgLmNvbG9yIGlyb24taWNvbltmaWxsPSIjZmZmZmZmIl0gewogICAgICAgIGJhY2tncm91bmQ6ICNkZGRkZGQ7CiAgICAgIH0KICAgICAgLmxlZ2VuZCAuY29sb3Igc3BhbiB7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICB9CiAgICAgIC5sZWdlbmQgLnNwZWNpYWwgewogICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICAgICAgfQoKICAgICAgLmxlZ2VuZCBoMiB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1zdWJoZWFkOwogICAgICAgIGNvbG9yOiAjNGY0MjNlOwogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICAgIGxpbmUtaGVpZ2h0OiAxOwogICAgICAgIG1hcmdpbjogMDsKICAgICAgfQogICAgICAubGVnZW5kIC5jb2xvci1ieS1maWVsZCB7CiAgICAgICAgY29sb3I6ICM5NjhlOGM7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgZm9udC1zaXplOiAxMi41cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKICAgICAgICBtYXJnaW46IDJweCAwIDRweCAyMHB4OwogICAgICB9CiAgICA8L3N0eWxlPgogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19hbnlDb2xvcihjb2xvckJ5LCBwYWxldHRlKV1dIj4KICAgICAgPGRpdiBjbGFzcz0ibGVnZW5kIj4KICAgICAgICA8ZGl2IGNsYXNzPSJ0b3BiYXIiPgogICAgICAgICAgPGRpdiBjbGFzcz0idGl0bGUiPkxlZ2VuZDwvZGl2PgogICAgICAgICAgPHBhcGVyLWljb24tYnV0dG9uIGNsYXNzPSJleHBhbmQtYnV0dG9uIiBvbi1jbGljaz0iX3RvZ2dsZU9wZW5lZCIgaWNvbj0iW1tfZ2V0SWNvbihfb3BlbmVkKV1dIj4KICAgICAgICAgIDwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGlyb24tY29sbGFwc2UgaWQ9ImNvbGxhcHNlIiBvcGVuZWQ9Int7X29wZW5lZH19Ij4KICAgICAgICAgIDxkaXYgY2xhc3M9ImxlZ2VuZC1ib2R5Ij4KICAgICAgICAgICAgPGgyPkNvbG9yczwvaDI+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjb2xvci1ieS1maWVsZCI+CiAgICAgICAgICAgICAgYnkgW1tfYnJlYWtVcEFuZFRydW5jYXRlKGNvbG9yQnkpXV0KICAgICAgICAgICAgICA8cGFwZXItdG9vbHRpcCBwb3NpdGlvbj0idG9wIj5bW2NvbG9yQnldXTwvcGFwZXItdG9vbHRpcD4KICAgICAgICAgICAgPC9zcGFuPgoKICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGVnZW5kLXRhYmxlIj4KICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW3BhbGV0dGVdXSI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsZWdlbmQtcm93IGNvbG9yIj4KICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGVnZW5kLWNlbGwiPgogICAgICAgICAgICAgICAgICAgIDxpcm9uLWljb24gaWNvbj0iYXY6ZmliZXItbWFudWFsLXJlY29yZCIgZmlsbCQ9IltbaXRlbS5jb2xvcl1dIiBzdHlsZSQ9ImZpbGw6W1tpdGVtLmNvbG9yXV0iPjwvaXJvbi1pY29uPgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGVnZW5kLWNlbGwiPgogICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzJD0iW1tfc3BlY2lhbENsYXNzKGl0ZW0uY29udGVudC5zcGVjaWFsKV1dIj4KICAgICAgICAgICAgICAgICAgICAgIFtbX2JyZWFrVXBBbmRUcnVuY2F0ZShpdGVtLmNvbnRlbnQubGFiZWwpXV0KICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPHBhcGVyLXRvb2x0aXAgcG9zaXRpb249InRvcCI+W1tpdGVtLmNvbnRlbnQubGFiZWxdXTwvcGFwZXItdG9vbHRpcD4KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvaXJvbi1jb2xsYXBzZT4KICAgICAgPC9kaXY+CiAgICA8L3RlbXBsYXRlPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT4KPHNjcmlwdD4vL35+V0VCUEFUSH5+L2ZhY2V0cy1kaXZlL2NvbXBvbmVudHMvZmFjZXRzLWRpdmUtbGVnZW5kL2ZhY2V0cy1kaXZlLWxlZ2VuZC5qcwpQb2x5bWVyKHtpczoiZmFjZXRzLWRpdmUtbGVnZW5kIixwcm9wZXJ0aWVzOntjb2xvckJ5Ont0eXBlOlN0cmluZyx2YWx1ZToiIixvYnNlcnZlcjoiX29wZW4ifSxwYWxldHRlOnt0eXBlOkFycmF5LHZhbHVlOltdfSxfb3BlbmVkOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9fSxfYnJlYWtVcEFuZFRydW5jYXRlKGEpe3JldHVybiBrbihsbigiIithKSl9LF9hbnlDb2xvcigpe3JldHVybiEhKHRoaXMuY29sb3JCeSYmdGhpcy5wYWxldHRlJiZ0aGlzLnBhbGV0dGUubGVuZ3RoKX0sX3NwZWNpYWxDbGFzcyhhKXtyZXR1cm4gYT8ic3BlY2lhbCI6IiJ9LF9vcGVuKCl7dGhpcy5fb3BlbmVkPSEwfSxfdG9nZ2xlT3BlbmVkKCl7dGhpcy5fb3BlbmVkPSF0aGlzLl9vcGVuZWR9LF9nZXRJY29uKGEpe3JldHVybiBhPyJleHBhbmQtbGVzcyI6ImV4cGFuZC1tb3JlIn19KTsKPC9zY3JpcHQ+CgoKCjxkb20tbW9kdWxlIGlkPSJmYWNldHMtZGl2ZSI+CiAgPHRlbXBsYXRlPgoKICAgIDxzdHlsZT4KICAgICAgLyoqCiAgICAgICAqIHBhcGVyLWlucHV0LWNvbnRhaW5lciB1c2VzIGFuIGVsZW1lbnQgY29udGFpbmluZyBvbmx5ICZuYnNwOyBmb3IKICAgICAgICogc3BhY2luZyBwdXJwb3Nlcy4gQWdncmVzc2l2ZSB2dWxjYW5pemVycyBzb21ldGltZXMgcmVtb3ZlIHRoaXMgY29udGVudC4KICAgICAgICogVGhpcyBDU1MgcnVsZSBmb3JjZXMgdGhlIGNvbnRhaW5pbmcgZWxlbWVudCB0byBoYXZlIHRoZSBjb3JyZWN0IGhlaWdodAogICAgICAgKiBpbiBlaXRoZXIgY2FzZS4KICAgICAgICovCiAgICAgIDpob3N0IHBhcGVyLWlucHV0LWNvbnRhaW5lciA+IC5mbG9hdGVkLWxhYmVsLXBsYWNlaG9sZGVyIHsKICAgICAgICBtaW4taGVpZ2h0OiAyMHB4OwogICAgICB9CgogICAgICA6aG9zdCB7CiAgICAgICAgYmFja2dyb3VuZDogI2ZmZmZmZjsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQogICAgICAuZmlsbCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CiAgICAgIC5tYWluIHsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICB9CiAgICAgIGZhY2V0cy1kaXZlLWNvbnRyb2xzIHsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2QzZDNkMzsKICAgICAgICBmbGV4LWdyb3c6IDA7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgaGVpZ2h0OiA2MHB4OwogICAgICB9CiAgICAgIC5yb3cgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgfQogICAgICBmYWNldHMtZGl2ZS1sZWdlbmQgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBib3R0b206IDE0cHg7CiAgICAgICAgcmlnaHQ6IDI0cHg7CiAgICAgIH0KICAgICAgLnpvb20tY29udHJvbHMgewogICAgICAgIGJvdHRvbTogMTRweDsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICB9CiAgICAgIC56b29tLWNvbnRyb2xzIHBhcGVyLWJ1dHRvbiB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2U3ZTdlNzsKICAgICAgICBjbGVhcjogbGVmdDsKICAgICAgICBjb2xvcjogIzJiMmIyYjsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBmbG9hdDogbGVmdDsKICAgICAgICBtYXJnaW46IDRweCA4cHg7CiAgICAgICAgbWluLXdpZHRoOiAwOwogICAgICAgIHBhZGRpbmc6IDhweDsKICAgICAgfQogICAgICBmYWNldHMtZGl2ZS1pbmZvLWNhcmQgewogICAgICAgIGJhY2tncm91bmQ6ICNmZmY4ZjQ7CiAgICAgICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjYzZjNmM2OwogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgZmxleC1ncm93OiAwOwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICAgIHdpZHRoOiAyNDBweDsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8ZGl2IGNsYXNzPSJmaWxsIG1haW4iPgogICAgICA8ZmFjZXRzLWRpdmUtY29udHJvbHMgaWQ9ImNvbnRyb2xzIiBhdGxhcy11cmw9IltbYXRsYXNVcmxdXSIga2V5cz0iW1tfa2V5c11dIiBzdGF0cz0iW1tzdGF0c11dIiB2ZXJ0aWNhbC1mYWNldD0ie3t2ZXJ0aWNhbEZhY2V0fX0iIHZlcnRpY2FsLWJ1Y2tldHM9Int7dmVydGljYWxCdWNrZXRzfX0iIHZlcnRpY2FsLWJhZy1vZi13b3Jkcz0ie3t2ZXJ0aWNhbEJhZ09mV29yZHN9fSIgaG9yaXpvbnRhbC1mYWNldD0ie3tob3Jpem9udGFsRmFjZXR9fSIgaG9yaXpvbnRhbC1idWNrZXRzPSJ7e2hvcml6b250YWxCdWNrZXRzfX0iIGhvcml6b250YWwtYmFnLW9mLXdvcmRzPSJ7e2hvcml6b250YWxCYWdPZldvcmRzfX0iIHBvc2l0aW9uLW1vZGU9Int7cG9zaXRpb25Nb2RlfX0iIHZlcnRpY2FsLXBvc2l0aW9uPSJ7e3ZlcnRpY2FsUG9zaXRpb259fSIgaG9yaXpvbnRhbC1wb3NpdGlvbj0ie3tob3Jpem9udGFsUG9zaXRpb259fSIgY29sb3ItYnk9Int7Y29sb3JCeX19IiBpbWFnZS1maWVsZC1uYW1lPSJ7e2ltYWdlRmllbGROYW1lfX0iIHBhbGV0dGU9IltbX3BhbGV0dGVdXSIgcGFsZXR0ZS1jaG9pY2U9Int7cGFsZXR0ZUNob2ljZX19IiBncmlkLWZhY2V0aW5nLXZlcnRpY2FsLWxhYmVsLWNvbG9yPSJbW2dyaWRGYWNldGluZ1ZlcnRpY2FsTGFiZWxDb2xvcl1dIiBncmlkLWZhY2V0aW5nLWhvcml6b250YWwtbGFiZWwtY29sb3I9IltbZ3JpZEZhY2V0aW5nSG9yaXpvbnRhbExhYmVsQ29sb3JdXSIgaXRlbS1wb3NpdGlvbmluZy12ZXJ0aWNhbC1sYWJlbC1jb2xvcj0iW1tpdGVtUG9zaXRpb25pbmdWZXJ0aWNhbExhYmVsQ29sb3JdXSIgaXRlbS1wb3NpdGlvbmluZy1ob3Jpem9udGFsLWxhYmVsLWNvbG9yPSJbW2l0ZW1Qb3NpdGlvbmluZ0hvcml6b250YWxMYWJlbENvbG9yXV0iPjwvZmFjZXRzLWRpdmUtY29udHJvbHM+CgogICAgICA8ZGl2IGNsYXNzPSJmaWxsIHJvdyI+CiAgICAgICAgPGRpdiBjbGFzcz0iZmlsbCI+CiAgICAgICAgICA8ZmFjZXRzLWRpdmUtdmlzIGlkPSJ2aXMiIGNsYXNzPSJmaWxsIiBkYXRhPSJbW2RhdGFdXSIgZmlsdGVyZWQtZGF0YS1pbmRpY2VzPSJbW2ZpbHRlcmVkRGF0YUluZGljZXNdXSIgYXRsYXMtdXJsPSJbW2F0bGFzVXJsXV0iIHNwcml0ZS11cmw9Iltbc3ByaXRlVXJsXV0iIGNyb3NzLW9yaWdpbj0iW1tjcm9zc09yaWdpbl1dIiBrZXlzPSJ7e19rZXlzfX0iIHN0YXRzPSJ7e3N0YXRzfX0iIHNwcml0ZS1pbWFnZS13aWR0aD0iW1tzcHJpdGVJbWFnZVdpZHRoXV0iIHNwcml0ZS1pbWFnZS1oZWlnaHQ9Iltbc3ByaXRlSW1hZ2VIZWlnaHRdXSIgdmVydGljYWwtZmFjZXQ9IltbdmVydGljYWxGYWNldF1dIiB2ZXJ0aWNhbC1idWNrZXRzPSJbW3ZlcnRpY2FsQnVja2V0c11dIiB2ZXJ0aWNhbC1iYWctb2Ytd29yZHM9IltbdmVydGljYWxCYWdPZldvcmRzXV0iIGhvcml6b250YWwtZmFjZXQ9IltbaG9yaXpvbnRhbEZhY2V0XV0iIGhvcml6b250YWwtYnVja2V0cz0iW1tob3Jpem9udGFsQnVja2V0c11dIiBob3Jpem9udGFsLWJhZy1vZi13b3Jkcz0iW1tob3Jpem9udGFsQmFnT2ZXb3Jkc11dIiBwb3NpdGlvbi1tb2RlPSJbW3Bvc2l0aW9uTW9kZV1dIiB2ZXJ0aWNhbC1wb3NpdGlvbj0iW1t2ZXJ0aWNhbFBvc2l0aW9uXV0iIGhvcml6b250YWwtcG9zaXRpb249IltbaG9yaXpvbnRhbFBvc2l0aW9uXV0iIGNvbG9yLWJ5PSJ7e2NvbG9yQnl9fSIgaW1hZ2UtZmllbGQtbmFtZT0ie3tpbWFnZUZpZWxkTmFtZX19IiBwYWxldHRlPSJ7e19wYWxldHRlfX0iIHBhbGV0dGUtY2hvaWNlPSJbW3BhbGV0dGVDaG9pY2VdXSIgZ3JpZC1mYWNldGluZy12ZXJ0aWNhbC1sYWJlbC1jb2xvcj0ie3tncmlkRmFjZXRpbmdWZXJ0aWNhbExhYmVsQ29sb3J9fSIgZ3JpZC1mYWNldGluZy1ob3Jpem9udGFsLWxhYmVsLWNvbG9yPSJ7e2dyaWRGYWNldGluZ0hvcml6b250YWxMYWJlbENvbG9yfX0iIGl0ZW0tcG9zaXRpb25pbmctdmVydGljYWwtbGFiZWwtY29sb3I9Int7aXRlbVBvc2l0aW9uaW5nVmVydGljYWxMYWJlbENvbG9yfX0iIGl0ZW0tcG9zaXRpb25pbmctaG9yaXpvbnRhbC1sYWJlbC1jb2xvcj0ie3tpdGVtUG9zaXRpb25pbmdIb3Jpem9udGFsTGFiZWxDb2xvcn19IiBmaXQtZ3JpZC1hc3BlY3QtcmF0aW8tdG8tdmlld3BvcnQ9IltbZml0R3JpZEFzcGVjdFJhdGlvVG9WaWV3cG9ydF1dIiBzZWxlY3RlZC1kYXRhPSJ7e3NlbGVjdGVkRGF0YX19IiBzZWxlY3RlZC1pbmRpY2VzPSJ7e3NlbGVjdGVkSW5kaWNlc319IiBjb21wYXJlZC1kYXRhPSJ7e2NvbXBhcmVkRGF0YX19IiBjb21wYXJlZC1pbmRpY2VzPSJ7e2NvbXBhcmVkSW5kaWNlc319IiBzdGFibGUtY29sb3JzPSJbW3N0YWJsZUNvbG9yc11dIj48L2ZhY2V0cy1kaXZlLXZpcz4KCiAgICAgICAgICA8ZGl2IGNsYXNzPSJ6b29tLWNvbnRyb2xzIj4KICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbiByYWlzZWQgaWQ9Inpvb21JbkJ1dHRvbiI+CiAgICAgICAgICAgICAgPGlyb24taWNvbiBpY29uPSJpY29uczphZGQiPjwvaXJvbi1pY29uPgogICAgICAgICAgICA8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbiByYWlzZWQgaWQ9Inpvb21PdXRCdXR0b24iPgogICAgICAgICAgICAgIDxpcm9uLWljb24gaWNvbj0iaWNvbnM6cmVtb3ZlIj48L2lyb24taWNvbj4KICAgICAgICAgICAgPC9wYXBlci1idXR0b24+CiAgICAgICAgICAgIDxwYXBlci1idXR0b24gcmFpc2VkIGlkPSJmaXRCdXR0b24iPgogICAgICAgICAgICAgIDxpcm9uLWljb24gaWNvbj0iaWNvbnM6YXNwZWN0LXJhdGlvIj48L2lyb24taWNvbj4KICAgICAgICAgICAgPC9wYXBlci1idXR0b24+CiAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICA8ZmFjZXRzLWRpdmUtbGVnZW5kIGlkPSJsZWdlbmQiIGNvbG9yLWJ5PSJbW2NvbG9yQnldXSIgcGFsZXR0ZT0iW1tfcGFsZXR0ZV1dIj4KICAgICAgICAgIDwvZmFjZXRzLWRpdmUtbGVnZW5kPgogICAgICAgIDwvZGl2PgoKICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIWhpZGVJbmZvQ2FyZF1dIj4KICAgICAgICAgIDxmYWNldHMtZGl2ZS1pbmZvLWNhcmQgaWQ9ImluZm9DYXJkIiBzZWxlY3RlZC1kYXRhPSJbW3NlbGVjdGVkRGF0YV1dIiBpbmZvLXJlbmRlcmVyPSJbW2luZm9SZW5kZXJlcl1dIj4KICAgICAgICAgIDwvZmFjZXRzLWRpdmUtaW5mby1jYXJkPgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT4KCjxzY3JpcHQ+Ly9+fldFQlBBVEh+fi9mYWNldHMtZGl2ZS9jb21wb25lbnRzL2ZhY2V0cy1kaXZlL2ZhY2V0cy1kaXZlLmpzClBvbHltZXIoe2lzOiJmYWNldHMtZGl2ZSIscHJvcGVydGllczp7ZGF0YTp7dHlwZTpBcnJheSx2YWx1ZTpudWxsLG5vdGlmeTohMH0sZmlsdGVyZWREYXRhSW5kaWNlczp7dHlwZTpBcnJheSx2YWx1ZTpudWxsfSxfa2V5czp7dHlwZTpBcnJheSx2YWx1ZTpbXX0sc3RhdHM6e3R5cGU6T2JqZWN0LHZhbHVlOnt9LG5vdGlmeTohMH0sYXRsYXNVcmw6e3R5cGU6U3RyaW5nLHZhbHVlOm51bGwsbm90aWZ5OiEwfSxzcHJpdGVVcmw6e3R5cGU6U3RyaW5nLHZhbHVlOm51bGwsbm90aWZ5OiEwfSxjcm9zc09yaWdpbjp7dHlwZTpTdHJpbmcsdmFsdWU6bnVsbCxub3RpZnk6ITB9LHNwcml0ZUltYWdlV2lkdGg6e3R5cGU6TnVtYmVyLHZhbHVlOjY0fSxzcHJpdGVJbWFnZUhlaWdodDp7dHlwZTpOdW1iZXIsdmFsdWU6NjR9LGdyaWRGYWNldGluZ1ZlcnRpY2FsTGFiZWxDb2xvcjp7dHlwZTpTdHJpbmcsdmFsdWU6IiM2NjY2NjYifSxncmlkRmFjZXRpbmdIb3Jpem9udGFsTGFiZWxDb2xvcjp7dHlwZTpTdHJpbmcsCnZhbHVlOiIjZGQ2NjIyIn0saXRlbVBvc2l0aW9uaW5nVmVydGljYWxMYWJlbENvbG9yOnt0eXBlOlN0cmluZyx2YWx1ZToiIzIyNTVhYSJ9LGl0ZW1Qb3NpdGlvbmluZ0hvcml6b250YWxMYWJlbENvbG9yOnt0eXBlOlN0cmluZyx2YWx1ZToiIzExODg0NCJ9LGZpdEdyaWRBc3BlY3RSYXRpb1RvVmlld3BvcnQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sdmVydGljYWxGYWNldDp7dHlwZTpTdHJpbmcsdmFsdWU6IiIsbm90aWZ5OiEwfSx2ZXJ0aWNhbEJ1Y2tldHM6e3R5cGU6TnVtYmVyLHZhbHVlOjEwLG5vdGlmeTohMH0sdmVydGljYWxCYWdPZldvcmRzOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEsbm90aWZ5OiEwfSxob3Jpem9udGFsRmFjZXQ6e3R5cGU6U3RyaW5nLHZhbHVlOiIiLG5vdGlmeTohMH0saG9yaXpvbnRhbEJ1Y2tldHM6e3R5cGU6TnVtYmVyLHZhbHVlOjEwLG5vdGlmeTohMH0saG9yaXpvbnRhbEJhZ09mV29yZHM6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxub3RpZnk6ITB9LApwb3NpdGlvbk1vZGU6e3R5cGU6U3RyaW5nLHZhbHVlOiJzdGFja2VkIixub3RpZnk6ITB9LHZlcnRpY2FsUG9zaXRpb246e3R5cGU6U3RyaW5nLHZhbHVlOiIiLG5vdGlmeTohMH0saG9yaXpvbnRhbFBvc2l0aW9uOnt0eXBlOlN0cmluZyx2YWx1ZToiIixub3RpZnk6ITB9LGNvbG9yQnk6e3R5cGU6U3RyaW5nLHZhbHVlOiIiLG5vdGlmeTohMH0saW1hZ2VGaWVsZE5hbWU6e3R5cGU6U3RyaW5nLHZhbHVlOiIiLG5vdGlmeTohMH0sX3BhbGV0dGU6e3R5cGU6QXJyYXksdmFsdWU6W119LHBhbGV0dGVDaG9pY2U6e3R5cGU6U3RyaW5nLHZhbHVlOiJzdGFuZGFyZCIsbm90aWZ5OiEwfSxzZWxlY3RlZERhdGE6e3R5cGU6QXJyYXksdmFsdWU6W10sbm90aWZ5OiEwfSxzZWxlY3RlZEluZGljZXM6e3R5cGU6QXJyYXksdmFsdWU6W10sbm90aWZ5OiEwfSxjb21wYXJlZERhdGE6e3R5cGU6QXJyYXksdmFsdWU6W10sbm90aWZ5OiEwfSxjb21wYXJlZEluZGljZXM6e3R5cGU6QXJyYXksdmFsdWU6W10sCm5vdGlmeTohMH0saGVpZ2h0Ont0eXBlOk51bWJlcix2YWx1ZTpudWxsLG9ic2VydmVyOiJfdXBkYXRlSGVpZ2h0In0saW5mb1JlbmRlcmVyOnt0eXBlOk9iamVjdH0saGlkZUluZm9DYXJkOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LHN0YWJsZUNvbG9yczp7dHlwZTpCb29sZWFuLHZhbHVlOiExfX0scmVhZHkoKXtjb25zdCBhPXRoaXMuJDthLmZpdEJ1dHRvbi5vbmNsaWNrPSgpPT5hLnZpcy5maXRUb1ZpZXdwb3J0KCk7YS56b29tSW5CdXR0b24ub25jbGljaz0oKT0+YS52aXMuem9vbUluKCk7YS56b29tT3V0QnV0dG9uLm9uY2xpY2s9KCk9PmEudmlzLnpvb21PdXQoKTt0aGlzLmhpZGVJbmZvQ2FyZCYmKGEudmlzLnN0eWxlLnJpZ2h0PSIwIik7dGhpcy5fdXBkYXRlSGVpZ2h0KCl9LF91cGRhdGVIZWlnaHQoKXtudWxsIT09dGhpcy5oZWlnaHQmJih0aGlzLnN0eWxlLmhlaWdodD0ibnVtYmVyIj09PXR5cGVvZiB0aGlzLmhlaWdodD90aGlzLmhlaWdodCsicHgiOnRoaXMuaGVpZ2h0KX19KTsKPC9zY3JpcHQ+CgoKCgoKCgoKCjxzY3JpcHQ+Ly9+fldFQlBBVEh+fi9mYWNldHMtb3ZlcnZpZXcvY29tbW9uL2ZlYXR1cmVfc3RhdGlzdGljc19nZW5lcmF0b3IuanMKY2xhc3MgeG57Y29uc3RydWN0b3IoKXt0aGlzLnZhbHM9W107dGhpcy5jb3VudHM9W119fWZ1bmN0aW9uIHluKGEpe2NvbnN0IGM9bmV3IHBpO2EuZm9yRWFjaChkPT57Y29uc3QgZj16bihkLmRhdGEpO2Yuc2V0TmFtZShkLm5hbWUpO2MuZ2V0RGF0YXNldHNMaXN0KCkucHVzaChmKX0pO3JldHVybiBjfQpmdW5jdGlvbiB6bihhKXtjb25zdCBjPXt9O2lmKG51bGw9PWEpcmV0dXJuIG5ldyBsajthLmZvckVhY2goKGQsZik9PntpZihudWxsIT1kKXt2YXIgZz1PYmplY3Qua2V5cyhkKSxsPXt9O2ZvcihsZXQgaz0wO2s8Zy5sZW5ndGg7aysrKXtjb25zdCBtPWdba10scD1kW21dO2xbbV09ITA7bSBpbiBjfHwoY1ttXT1uZXcgeG4sY1ttXS5taXNzaW5nPWYsY1ttXS5jb3VudHM9W10pOyJudW1iZXIiPT09dHlwZW9mIHB8fCJzdHJpbmciPT09dHlwZW9mIHA/KGNbbV0udmFscy5wdXNoKHApLGNbbV0uY291bnRzLnB1c2goMSkpOnAgaW5zdGFuY2VvZiBBcnJheSYmKGNbbV0uY291bnRzLnB1c2gocC5sZW5ndGgpLGNbbV0udmFscy5wdXNoKC4uLnApKX1PYmplY3Qua2V5cyhjKS5mb3JFYWNoKGs9PntrIGluIGx8fChjW2tdLm1pc3NpbmcrPTEpfSl9fSk7T2JqZWN0LmtleXMoYykuZm9yRWFjaChkPT57bGV0IGY9MCxnPTAsbD0hMTtjW2RdLnZhbHMuZm9yRWFjaChrPT57InN0cmluZyI9PT0KdHlwZW9mIGs/Zis9MTooZys9MSxsPWx8fCFBbihrKSl9KTtjW2RdLnR5cGU9Zz5mP2w/MTowOjJ9KTtyZXR1cm4gQm4oYyxhLmxlbmd0aCl9ZnVuY3Rpb24gQW4oYSl7cmV0dXJuIGE9PT0rYSYmYT09PShhfDApfWZ1bmN0aW9uIEJuKGEsYyl7Y29uc3QgZD1uZXcgbGo7ZC5zZXROdW1FeGFtcGxlcyhjKTtmb3IoY29uc3QgZiBpbiBhKXtpZighYS5oYXNPd25Qcm9wZXJ0eShmKSljb250aW51ZTtjb25zdCBnPW5ldyBuajtkLmdldEZlYXR1cmVzTGlzdCgpLnB1c2goZyk7Y29uc3QgbD1hW2ZdO2cuc2V0TmFtZShmKTtnLnNldFR5cGUobC50eXBlKTsxPT09bC50eXBlfHwwPT09bC50eXBlP2cuc2V0TnVtU3RhdHMoQ24obC52YWxzLGwuY291bnRzLGMsbC5taXNzaW5nKSk6Mj09PWwudHlwZSYmZy5zZXRTdHJpbmdTdGF0cyhEbihsLnZhbHMsbC5jb3VudHMsYyxsLm1pc3NpbmcpKX1yZXR1cm4gZH0KZnVuY3Rpb24gQ24oYSxjLGQsZil7Y29uc3QgZz1uZXcgdGo7Zy5zZXRDb21tb25TdGF0cyhFbihjLGQsZikpO2xldCBsPTAsaz0wLG09MDtjPWEuZmlsdGVyKHQ9PiJudW1iZXIiPT09dHlwZW9mIHQmJiFpc05hTih0KSkubWFwKHQ9Pit0KS5zb3J0KCh0LHYpPT50LXYpOzA8Yy5sZW5ndGgmJihnLnNldE1pbihjWzBdKSxnLnNldE1heChjW2MubGVuZ3RoLTFdKSxkPU1hdGguZmxvb3IoYy5sZW5ndGgvMiksZy5zZXRNZWRpYW4oMCE9PWMubGVuZ3RoJTI/Y1tkXTooY1tkXStjW2QtMV0pLzIpKTtjLmZvckVhY2godD0+ezA9PT10JiYobSs9MSk7bCs9dDtrKz10KnR9KTsxPGMubGVuZ3RoJiZnLnNldFN0ZERldihNYXRoLnNxcnQoKGstbCpsL2MubGVuZ3RoKS8oYy5sZW5ndGgtMSkpKTtnLnNldE1lYW4obC9hLmxlbmd0aCk7Zy5zZXROdW1aZXJvcyhtKTthPWMuZmlsdGVyKHQ9PkluZmluaXR5IT09dCYmLUluZmluaXR5IT09dCk7ZD1jLmZpbHRlcih0PT5JbmZpbml0eT09PXQpLmxlbmd0aDsKZj1jLmZpbHRlcih0PT4tSW5maW5pdHk9PT10KS5sZW5ndGg7dmFyIHA9YVswXTtjb25zdCBxPWFbYS5sZW5ndGgtMV07cD1kMy5yYW5nZShwLHEsKHEtcCkvMTApO3A9ZDMuaGlzdG9ncmFtKCkudGhyZXNob2xkcyhwKShhKTtsZXQgcj1nLmFkZEhpc3RvZ3JhbXMoKTtyLnNldFR5cGUoMCk7cC5mb3JFYWNoKHQ9Pntjb25zdCB2PXIuYWRkQnVja2V0cygpO3Yuc2V0U2FtcGxlQ291bnQodC5sZW5ndGgpO3Yuc2V0TG93VmFsdWUodC54MCk7di5zZXRIaWdoVmFsdWUodC54MSl9KTtwPXIuZ2V0QnVja2V0c0xpc3QoKTtjLmxlbmd0aCYmLUluZmluaXR5PT09Y1swXSYmKHBbMF0uc2V0TG93VmFsdWUoLUluZmluaXR5KSxwWzBdLnNldFNhbXBsZUNvdW50KHBbMF0uZ2V0U2FtcGxlQ291bnQoKStmKSk7Yy5sZW5ndGgmJkluZmluaXR5PT09Y1tjLmxlbmd0aC0xXSYmKHBbcC5sZW5ndGgtMV0uc2V0SGlnaFZhbHVlKEluZmluaXR5KSxwW3AubGVuZ3RoLTFdLnNldFNhbXBsZUNvdW50KHBbcC5sZW5ndGgtCjFdLmdldFNhbXBsZUNvdW50KCkrZCkpO3I9Zy5hZGRIaXN0b2dyYW1zKCk7Rm4ocixhKTtyZXR1cm4gZ31mdW5jdGlvbiBGbihhLGMpe3ZhciBkPVswLDEwLDIwLDMwLDQwLDUwLDYwLDcwLDgwLDkwLDEwMF07Y29uc3QgZj1kLmxlbmd0aC0xO2Q9ZC5tYXAobD0+R24oYyxsKSk7YS5zZXRUeXBlKDEpO2NvbnN0IGc9Yy5sZW5ndGgvZjtmb3IobGV0IGw9MDtsPGY7bCsrKXtjb25zdCBrPWEuYWRkQnVja2V0cygpO2suc2V0U2FtcGxlQ291bnQoZyk7ay5zZXRMb3dWYWx1ZShkW2xdKTtrLnNldEhpZ2hWYWx1ZShkW2wrMV0pfX1mdW5jdGlvbiBHbihhLGMpe2lmKDA9PT1hLmxlbmd0aClyZXR1cm4gTmFOO2M9Yy8xMDAqKGEubGVuZ3RoLTEpO2NvbnN0IGQ9TWF0aC5mbG9vcihjKTtyZXR1cm4gZD09PWM/YVtjXTphW2RdKyhhW2QrMV0tYVtkXSkqKGMtZCl9CmZ1bmN0aW9uIERuKGEsYyxkLGYpe2NvbnN0IGc9bmV3IHZqO2cuc2V0Q29tbW9uU3RhdHMoRW4oYyxkLGYpKTtsZXQgbD0wO2NvbnN0IGs9e307YS5mb3JFYWNoKHE9PntxPVN0cmluZyhxKTtrW3FdPShrW3FdfHwwKSsxO2wrPXEubGVuZ3RofSk7MDxhLmxlbmd0aCYmZy5zZXRBdmdMZW5ndGgobC9hLmxlbmd0aCk7YT1bXTtmb3IodmFyIG0gaW4gaylrLmhhc093blByb3BlcnR5KG0pJiZhLnB1c2goe3N0cjptLGNvdW50OmtbbV19KTtnLnNldFVuaXF1ZShhLmxlbmd0aCk7YT1hLnNvcnQoKHEscik9PnIuY291bnQtcS5jb3VudCk7Y29uc3QgcD1uZXcgSWo7Zy5zZXRSYW5rSGlzdG9ncmFtKHApO2EubGVuZ3RoJiYobT1nLmFkZFRvcFZhbHVlcygpLG0uc2V0VmFsdWUoYVswXS5zdHIpLG0uc2V0RnJlcXVlbmN5KGFbMF0uY291bnQpKTthLmZvckVhY2goKHEscik9Pntjb25zdCB0PXAuYWRkQnVja2V0cygpO3Quc2V0U2FtcGxlQ291bnQocS5jb3VudCk7dC5zZXRMb3dSYW5rKHIpOwp0LnNldEhpZ2hSYW5rKHIpO3Quc2V0TGFiZWwocS5zdHIpfSk7cmV0dXJuIGd9ZnVuY3Rpb24gRW4oYSxjLGQpe2NvbnN0IGY9bmV3IEVqO2xldCBnPUluZmluaXR5LGw9MCxrPTA7YS5mb3JFYWNoKG09PnttPGcmJihnPW0pO20+bCYmKGw9bSk7ays9bX0pO2Yuc2V0TnVtTm9uTWlzc2luZyhjLWQpO2Yuc2V0TnVtTWlzc2luZyhkKTtmLnNldE1pbk51bVZhbHVlcyhnKTtmLnNldE1heE51bVZhbHVlcyhsKTswPGEubGVuZ3RoJiZmLnNldEF2Z051bVZhbHVlcyhrL2EubGVuZ3RoKTtjPW5ldyBGajtmLnNldE51bVZhbHVlc0hpc3RvZ3JhbShjKTtGbihjLGEpO3JldHVybiBmfTsKPC9zY3JpcHQ+CjxzY3JpcHQ+Ly9+fldFQlBBVEh+fi9mYWNldHMtb3ZlcnZpZXcvY29tbW9uL3V0aWxzLmpzCmNsYXNzIEhue31jbGFzcyBJbntjb25zdHJ1Y3RvcihhLGMsZCxmLGcsbCxrLG0pe3RoaXMuaGlzdE1hcD17fTt0aGlzLm5hbWU9YTtjJiYodGhpcy5oaXN0TWFwW0puKCExLCJTdGFuZGFyZCIpXT1jKTtkJiYodGhpcy5oaXN0TWFwW0puKCEwLCJTdGFuZGFyZCIpXT1kKTtmJiYodGhpcy5oaXN0TWFwW0puKCExLCJRdWFudGlsZXMiKV09Zik7ZyYmKHRoaXMuaGlzdE1hcFtKbighMCwiUXVhbnRpbGVzIildPWcpO2wmJih0aGlzLmhpc3RNYXBbSm4oITEsIlZhbHVlIGxpc3QgbGVuZ3RoIildPWwpO2smJih0aGlzLmhpc3RNYXBbSm4oITEsIkZlYXR1cmUgbGlzdCBsZW5ndGgiKV09ayk7bSYmT2JqZWN0LmtleXMobSkuZm9yRWFjaChwPT50aGlzLmhpc3RNYXBbcF09bVtwXSl9fQpjbGFzcyBxcHtjb25zdHJ1Y3RvcihhLGMsZCxmKXt0aGlzLm5hbWU9YTt0aGlzLnN0cmluZ1ZhbHVlPWM7dGhpcy5sb3dOdW1WYWx1ZT1kO3RoaXMuaGlnaE51bVZhbHVlPWZ9Y2xlYXIoKXt0aGlzLmhpZ2hOdW1WYWx1ZT10aGlzLmxvd051bVZhbHVlPXRoaXMuc3RyaW5nVmFsdWU9dGhpcy5uYW1lPXZvaWQgMH1lcXVhbHMoYSl7cmV0dXJuIGE/dGhpcy5uYW1lPT09YS5uYW1lJiZ0aGlzLnN0cmluZ1ZhbHVlPT09YS5zdHJpbmdWYWx1ZSYmdGhpcy5sb3dOdW1WYWx1ZT09PWEubG93TnVtVmFsdWUmJnRoaXMuaGlnaE51bVZhbHVlPT09YS5oaWdoTnVtVmFsdWU6ITF9fQpmdW5jdGlvbiBycChhKXtjb25zdCBjPXNwKGEpO2lmKDA9PT1jKXJldHVybiAwO2NvbnN0IGQ9YS5yZWR1Y2UoKGYsZyk9PntnPStnLmdldFNhbXBsZUNvdW50KCl8fDA7aWYoMD09PWcpcmV0dXJuIGY7Zy89YztyZXR1cm4gZi1nKk1hdGgubG9nKGcpfSwwKTtyZXR1cm4gMD09PWQ/MDpkL01hdGgubG9nKGEubGVuZ3RoKX1mdW5jdGlvbiB0cChhLGMpe3JldHVybiBpc0Zpbml0ZShhKSYmLTE9PT1hLnRvU3RyaW5nKCkuaW5kZXhPZigiZSIpPysoTWF0aC5yb3VuZChOdW1iZXIoYSsiZSsiK2MpKSsiZS0iK2MpOmF9ZnVuY3Rpb24gdXAoYSxjLGQpe3JldHVybihhPWEuaGlzdE1hcFtKbihjLGQpXSk/YS5nZXRCdWNrZXRzTGlzdCgpOltdfWZ1bmN0aW9uIEpuKGEsYyl7Yz1udWxsPT1jPyJTdGFuZGFyZCI6YzthJiYoYz0id2VpZ2h0ZWQiK2MpO3JldHVybiBjfQpmdW5jdGlvbiBzcChhKXtyZXR1cm4gYS5tYXAoYz0+Yy5nZXRTYW1wbGVDb3VudCgpKS5yZWR1Y2UoKGMsZCk9PigrZHx8MCkrYywwKX1mdW5jdGlvbiB2cChhKXtyZXR1cm4gYS5tYXAoYz0+c3AodXAoYywhMSkpKX1mdW5jdGlvbiB3cChhKXtjb25zdCBjPVtdO2EuZm9yRWFjaChkPT57ZC5mb3JFYWNoKGY9PntmPXhwKGYuZ2V0TGFiZWwoKSk7LTE9PT1jLmluZGV4T2YoZikmJmMucHVzaChmKX0pfSk7cmV0dXJuIGN9ZnVuY3Rpb24geHAoYSl7cmV0dXJuIG51bGw9PWF8fCIiPT09YT8iXHUwMGEwIjphfWZ1bmN0aW9uIHlwKGEpe3JldHVybiAwPT09YS5sZW5ndGh8fGlzTmFOKCthKT9hOiciJythKyciJ31mdW5jdGlvbiB6cChhKXtyZXR1cm4gbnVsbD09YT8wOiJpbmYiPT09YT9JbmZpbml0eToiLWluZiI9PT1hPy1JbmZpbml0eTorYX0KZnVuY3Rpb24gQXAoYSl7bGV0IGM9MDt2YXIgZD0wO2NvbnN0IGY9QnAoYSk7YSYmYS5nZXROdW1TdGF0cygpJiYoYT1hLmdldE51bVN0YXRzKCksYys9enAoYS5nZXROdW1aZXJvcygpKSk7ZiYmKGQ9enAoZi5nZXROdW1NaXNzaW5nKCkpLGMrPWQsZD16cChmLmdldE51bU5vbk1pc3NpbmcoKSkrZCk7cmV0dXJuIDA9PT1kPzE6Yy9kfQpmdW5jdGlvbiBDcChhKXtjb25zdCBjPWEubWFwKEE9PnVwKEEsITEpKTt2YXIgZD1udWxsO2Zvcih2YXIgZj0wO2Y8Yy5sZW5ndGg7ZisrKWlmKDA8Y1tmXS5sZW5ndGgpe2Q9Y1tmXVswXTticmVha31pZighZClyZXR1cm4gMDtmPXZwKGEpO2Zvcih2YXIgZz0wO2c8Zi5sZW5ndGg7ZysrKWlmKDA9PT1mW2ddKXJldHVybiBJbmZpbml0eTtnPTA7aWYoZCBpbnN0YW5jZW9mIEtqKXtkPXdwKGMpO2Zvcih2YXIgbD0xO2w8YS5sZW5ndGg7bCsrKXt2YXIgaz1jWzBdLG09Y1tsXSxwPTA7Zm9yKHZhciBxPTA7cTxkLmxlbmd0aDtxKyspe3ZhciByPWRbcV0sdD0wO2xldCBBPTA7Zm9yKHZhciB2PTA7djxrLmxlbmd0aDt2KyspaWYoa1t2XS5nZXRMYWJlbCgpPT09cil7dD1rW3ZdLmdldFNhbXBsZUNvdW50KCk/a1t2XS5nZXRTYW1wbGVDb3VudCgpOjA7YnJlYWt9Zm9yKHY9MDt2PG0ubGVuZ3RoO3YrKylpZihtW3ZdLmdldExhYmVsKCk9PT1yKXtBPW1bdl0uZ2V0U2FtcGxlQ291bnQoKT8KbVt2XS5nZXRTYW1wbGVDb3VudCgpOjA7YnJlYWt9cD1EcChwLHQsZlswXSxBLGZbbF0pfWc9TWF0aC5tYXgoZyxwKX19ZWxzZSBmb3IoZD0xO2Q8YS5sZW5ndGg7ZCsrKXtsPWNbMF07az1jW2RdO209MDtwPU1hdGgubWF4KGwubGVuZ3RoLGsubGVuZ3RoKTtmb3IocT0wO3E8cDtxKyspcj1xPGwubGVuZ3RoJiZsW3FdLmdldFNhbXBsZUNvdW50KCk/bFtxXS5nZXRTYW1wbGVDb3VudCgpOjAsdD1xPGsubGVuZ3RoJiZrW3FdLmdldFNhbXBsZUNvdW50KCk/a1txXS5nZXRTYW1wbGVDb3VudCgpOjAsbT1EcChtLHIsZlswXSx0LGZbZF0pO2c9TWF0aC5tYXgoZyxtKX1yZXR1cm4gZ31mdW5jdGlvbiBEcChhLGMsZCxmLGcpe2NvbnN0IGw9Yy9kLWYvZztjPWMvKGQqZCkrZi8oZypnKTtyZXR1cm4gYSsoYz9sKmwvYzowKX1mdW5jdGlvbiBFcChhLGMpe3JldHVybiBjPT09YT9jLnRvTG9jYWxlU3RyaW5nKCk6YS50b0xvY2FsZVN0cmluZygpKyIvIitjLnRvTG9jYWxlU3RyaW5nKCl9CmZ1bmN0aW9uIEZwKGEpe3JldHVybiBudWxsIT1hLmdldE51bVN0YXRzKCl9CmZ1bmN0aW9uIEdwKGEpe2EuZ2V0RGF0YXNldHNMaXN0KCkuZm9yRWFjaChjPT57Yy5nZXRGZWF0dXJlc0xpc3QoKS5mb3JFYWNoKGQ9Pnt2YXIgZj1kLmdldFBhdGgoKTtudWxsIT1mJiYoZj1mLmdldFN0ZXBMaXN0KCksbnVsbCE9ZiYmZC5zZXROYW1lKGYuam9pbigiLyIpKSk7Zj1bXTtpZihkLmdldFN0cmluZ1N0YXRzKCkpe2NvbnN0IGc9ZC5nZXRTdHJpbmdTdGF0cygpLmdldFJhbmtIaXN0b2dyYW0oKTtnJiZmLnB1c2goZyk7KGQ9ZC5nZXRTdHJpbmdTdGF0cygpLmdldFRvcFZhbHVlc0xpc3QoKSkmJmQuZm9yRWFjaChsPT57Y29uc3Qgaz1sLmdldERlcHJlY2F0ZWRGcmVxKCk7ayYmIWwuZ2V0RnJlcXVlbmN5KCkmJmwuc2V0RnJlcXVlbmN5KGspfSl9ZWxzZSBkLmdldE51bVN0YXRzKCkmJihkPWQuZ2V0TnVtU3RhdHMoKS5nZXRIaXN0b2dyYW1zTGlzdCgpKSYmKGY9Zi5jb25jYXQoZCkpO2YuZm9yRWFjaChnPT57KGc9Zy5nZXRCdWNrZXRzTGlzdCgpKSYmZy5mb3JFYWNoKGw9Pgp7Y29uc3Qgaz1sLmdldERlcHJlY2F0ZWRDb3VudCgpO2smJiFsLmdldFNhbXBsZUNvdW50KCkmJmwuc2V0U2FtcGxlQ291bnQoayl9KX0pfSl9KTtyZXR1cm4gYX0KZnVuY3Rpb24gSHAoYSl7bGV0IGM9ITA7YS5nZXREYXRhc2V0c0xpc3QoKS5mb3JFYWNoKGQ9PntkLmdldEZlYXR1cmVzTGlzdCgpLmZvckVhY2goZj0+e2xldCBnPVtdO2lmKGYuZ2V0U3RyaW5nU3RhdHMoKSl7Y29uc3QgbD1mLmdldFN0cmluZ1N0YXRzKCkuZ2V0UmFua0hpc3RvZ3JhbSgpO2wmJmcucHVzaChsKTsoZj1mLmdldFN0cmluZ1N0YXRzKCkuZ2V0VG9wVmFsdWVzTGlzdCgpKSYmZi5mb3JFYWNoKGs9PntrLmdldERlcHJlY2F0ZWRGcmVxKCkmJiFrLmdldEZyZXF1ZW5jeSgpJiYoYz0hMSl9KX1lbHNlIGYuZ2V0TnVtU3RhdHMoKSYmKGY9Zi5nZXROdW1TdGF0cygpLmdldEhpc3RvZ3JhbXNMaXN0KCkpJiYoZz1nLmNvbmNhdChmKSk7Zy5mb3JFYWNoKGw9PnsobD1sLmdldEJ1Y2tldHNMaXN0KCkpJiZsLmZvckVhY2goaz0+e2suZ2V0RGVwcmVjYXRlZENvdW50KCkmJiFrLmdldFNhbXBsZUNvdW50KCkmJihjPSExKX0pfSl9KX0pO3JldHVybiBjfQpmdW5jdGlvbiBJcChhKXtmb3IobGV0IGM9MDtjPGEuZ2V0RGF0YXNldHNMaXN0KCkubGVuZ3RoO2MrKyl7Y29uc3QgZD1hLmdldERhdGFzZXRzTGlzdCgpW2NdO2ZvcihsZXQgZj0wO2Y8ZC5nZXRGZWF0dXJlc0xpc3QoKS5sZW5ndGg7ZisrKXtjb25zdCBnPWQuZ2V0RmVhdHVyZXNMaXN0KClbZl07aWYoZy5nZXRTdHJpbmdTdGF0cygpKXtpZihnLmdldFN0cmluZ1N0YXRzKCkuZ2V0V2VpZ2h0ZWRTdHJpbmdTdGF0cygpKXJldHVybiEwfWVsc2UgaWYoZy5nZXROdW1TdGF0cygpJiZnLmdldE51bVN0YXRzKCkuZ2V0V2VpZ2h0ZWROdW1lcmljU3RhdHMoKSlyZXR1cm4hMH19cmV0dXJuITF9CmZ1bmN0aW9uIEpwKGEpe2ZvcihsZXQgYz0wO2M8YS5nZXREYXRhc2V0c0xpc3QoKS5sZW5ndGg7YysrKXtjb25zdCBkPWEuZ2V0RGF0YXNldHNMaXN0KClbY107Zm9yKGxldCBmPTA7ZjxkLmdldEZlYXR1cmVzTGlzdCgpLmxlbmd0aDtmKyspe2NvbnN0IGc9ZC5nZXRGZWF0dXJlc0xpc3QoKVtmXS5nZXRDdXN0b21TdGF0c0xpc3QoKTtpZihudWxsIT1nJiYwPGcubGVuZ3RoKXJldHVybiEwfX1yZXR1cm4hMX1mdW5jdGlvbiBLcChhKXtmb3IobGV0IGQ9MDtkPGEuZ2V0RGF0YXNldHNMaXN0KCkubGVuZ3RoO2QrKyl7Y29uc3QgZj1hLmdldERhdGFzZXRzTGlzdCgpW2RdO2ZvcihsZXQgZz0wO2c8Zi5nZXRGZWF0dXJlc0xpc3QoKS5sZW5ndGg7ZysrKXt2YXIgYz1mLmdldEZlYXR1cmVzTGlzdCgpW2ddO2lmKChjPUJwKGMpKSYmYy5nZXRGZWF0dXJlTGlzdExlbmd0aEhpc3RvZ3JhbSgpKXJldHVybiEwfX1yZXR1cm4hMX0KZnVuY3Rpb24gTHAoYSl7aWYoIWEpcmV0dXJuITE7Zm9yKGxldCBjPTA7YzxhLmxlbmd0aDtjKyspaWYoYVtjXS5oaXN0TWFwW0puKCEwLCJTdGFuZGFyZCIpXSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBNcChhKXtpZighYSlyZXR1cm4hMTtmb3IobGV0IGM9MDtjPGEubGVuZ3RoO2MrKylpZihhW2NdLmhpc3RNYXAuUXVhbnRpbGVzKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIE5wKGEpe2lmKCFhKXJldHVybiExO2ZvcihsZXQgYz0wO2M8YS5sZW5ndGg7YysrKWlmKGFbY10uaGlzdE1hcFsiVmFsdWUgbGlzdCBsZW5ndGgiXSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBPcChhKXtyZXR1cm4gYT9hLmdldE51bU5vbk1pc3NpbmcoKSphLmdldEF2Z051bVZhbHVlcygpOjB9CmZ1bmN0aW9uIFBwKGEpe3N3aXRjaChhKXtjYXNlIDA6cmV0dXJuImludCI7Y2FzZSAxOnJldHVybiJmaXhlZC1sZW5ndGggaW50cyI7Y2FzZSAyOnJldHVybiJ2YXJpYWJsZS1sZW5ndGggaW50cyI7Y2FzZSAzOnJldHVybiJmbG9hdCI7Y2FzZSA0OnJldHVybiJmaXhlZC1sZW5ndGggZmxvYXRzIjtjYXNlIDU6cmV0dXJuInZhcmlhYmxlLWxlbmd0aCBmbG9hdHMiO2Nhc2UgNjpyZXR1cm4ic3RyaW5nIjtjYXNlIDc6cmV0dXJuImZpeGVkLWxlbmd0aCBzdHJpbmdzIjtjYXNlIDg6cmV0dXJuInZhcmlhYmxlLWxlbmd0aCBzdHJpbmdzIjtjYXNlIDk6cmV0dXJuImJ5dGVzIjtjYXNlIDEwOnJldHVybiJmaXhlZC1sZW5ndGggYnl0ZXMiO2Nhc2UgMTE6cmV0dXJuInZhcmlhYmxlLWxlbmd0aCBieXRlcyI7Y2FzZSAxMjpyZXR1cm4ic3RydWN0IjtjYXNlIDEzOnJldHVybiJmaXhlZC1sZW5ndGggc3RydWN0IjtjYXNlIDE0OnJldHVybiJ2YXJpYWJsZS1sZW5ndGggc3RydWN0IjtkZWZhdWx0OnJldHVybiJ1bmtub3duIn19CmZ1bmN0aW9uIFFwKGEsYyl7cmV0dXJuIDE1PT09YT9jOjE2PD1hfHwxNT09PWM/YTozPD1hJiY1Pj1hJiYzPD1jJiY1Pj1jfHwwPD1hJiYyPj1hJiYwPD1jJiYyPj1jfHw2PD1hJiY4Pj1hJiY2PD1jJiY4Pj1jfHw5PD1hJiYxMT49YSYmOTw9YyYmMTE+PWN8fDEyPD1hJiYxND49YSYmMTI8PWMmJjE0Pj1jP01hdGgubWF4KGEsYyk6MTZ9ZnVuY3Rpb24gUnAoYSxjKXt2YXIgZD0xNTtpZihudWxsIT1jJiYwIT09Yy5nZXROdW1Ob25NaXNzaW5nKCkpe2xldCBmPWQ9ITE7Yy5nZXRNaW5OdW1WYWx1ZXMoKT09PWMuZ2V0TWF4TnVtVmFsdWVzKCkmJigxPT09Yy5nZXRNaW5OdW1WYWx1ZXMoKT9kPSEwOmY9ITApO2Q9MT09PWE/ZD8zOmY/NDo1OjA9PT1hP2Q/MDpmPzE6MjoyPT09YT9kPzY6Zj83Ojg6Mz09PWE/ZD85OmY/MTA6MTE6ZD8xMjpmPzEzOjE0fXJldHVybiBkfWNsYXNzIFNwe31jbGFzcyBUcHt9Y2xhc3MgVXB7fQpmdW5jdGlvbiBWcChhKXtsZXQgYz0wLGQ9MDtmb3IodmFyIGY9MDtmPGEubGVuZ3RoO2YrKylhW2ZdLnJhd0J1Y2tldHMubGVuZ3RoPmMmJihjPWFbZl0ucmF3QnVja2V0cy5sZW5ndGgsZD1mKTtmPVtdO2ZvcihsZXQgZz0wO2c8YztnKyspe2NvbnN0IGw9bmV3IFVwO2wudmFsdWU9YVtkXS5yYXdCdWNrZXRzW2ddLmdldExhYmVsKCk7bC5jb3VudHM9W107Zm9yKGxldCBrPTA7azxhLmxlbmd0aDtrKyspYVtrXS5yYXdCdWNrZXRzLmxlbmd0aDw9Zz9sLmNvdW50cy5wdXNoKDApOmwuY291bnRzLnB1c2goYVtrXS5yYXdCdWNrZXRzW2ddLmdldFNhbXBsZUNvdW50KCkpO2YucHVzaChsKX1yZXR1cm4gZn0KZnVuY3Rpb24gV3AoYSxjKXtjb25zdCBkPVtdO2ZvcihsZXQgZj0wO2Y8Yy5sZW5ndGg7ZisrKXtjb25zdCBnPW5ldyBVcCxsPWNbZl07Zy52YWx1ZT1sO2cuY291bnRzPVtdO2ZvcihsZXQgaz0wO2s8YS5sZW5ndGg7aysrKXtjb25zdCBtPWFba10ucmF3QnVja2V0cztsZXQgcD0tMTtmb3IobGV0IHE9MDtxPG0ubGVuZ3RoO3ErKylpZihtW3FdLmdldExhYmVsKCk9PT1sKXtwPXE7YnJlYWt9LTE9PT1wP2cuY291bnRzLnB1c2goMCk6Zy5jb3VudHMucHVzaChtW3BdLmdldFNhbXBsZUNvdW50KCkpfWQucHVzaChnKX1yZXR1cm4gZH12YXIgWHA7KGZ1bmN0aW9uKGEpe2FbYS5ISVNUT0dSQU09MF09IkhJU1RPR1JBTSI7YVthLkJBUl9DSEFSVD0xXT0iQkFSX0NIQVJUIjthW2EuQ1VNRElTVF9DSEFSVD0yXT0iQ1VNRElTVF9DSEFSVCJ9KShYcHx8KFhwPXt9KSk7CmZ1bmN0aW9uIFlwKGEpe3JldHVybiJRdWFudGlsZXMiPT09YXx8IlZhbHVlIGxpc3QgbGVuZ3RoIj09PWF8fCJGZWF0dXJlIGxpc3QgbGVuZ3RoIj09PWF9ZnVuY3Rpb24gWnAoYSxjLGQpe2xldCBmPSEwLGc9MDthLmZvckVhY2gobD0+e2wuaGlzdE1hcFtjXSYmKGw9bC5oaXN0TWFwW2NdLmdldEJ1Y2tldHNMaXN0KCksZz1NYXRoLm1heChnLGwubGVuZ3RoKSxsLmZvckVhY2goaz0+e2suZ2V0TG93VmFsdWV8fChmPSExKX0pKX0pO3JldHVybiBmP1hwLkhJU1RPR1JBTTpnPmQ/WHAuQ1VNRElTVF9DSEFSVDpYcC5CQVJfQ0hBUlR9CmNsYXNzICRwe2NvbnN0cnVjdG9yKGEsYyxkKXt0aGlzLnN0cj1hO3RoaXMuY3NzQ2xhc3M9Yzt0aGlzLmZ1bGxTdHI9ZDt0aGlzLmZ1bGxTdHJ8fCh0aGlzLmZ1bGxTdHI9YSl9YXBwZW5kKGEsYyl7YyYmKHRoaXMuc3RyKz1jLHRoaXMuZnVsbFN0cis9Yyk7dGhpcy5zdHIrPWEuc3RyO3RoaXMuZnVsbFN0cis9YS5mdWxsU3RyO3RoaXMuY3NzQ2xhc3MrPWEuY3NzQ2xhc3N9fWZ1bmN0aW9uIGFxKGEpe2NvbnN0IGM9TWF0aC5hYnMoYSk7cmV0dXJuKC4wMT5jJiYwPGN8fDFFNDxjKSYmaXNGaW5pdGUoYSk/ZDMuZm9ybWF0KCIuM3MiKShhKS5yZXBsYWNlKC9HJC8sIkIiKTphLnRvTG9jYWxlU3RyaW5nKCl9ZnVuY3Rpb24gYnEoYSxjKXtjb25zdCBkPWFxKHRwKHpwKGEpLDFFNjxNYXRoLmFicyhhKT8wOjIpKTtjPWNxKGEsYyx2b2lkIDApO3JldHVybiBuZXcgJHAoZCxjLGEudG9Mb2NhbGVTdHJpbmcoW10se21heGltdW1GcmFjdGlvbkRpZ2l0czo5fSkpfQpmdW5jdGlvbiBkcShhLGMsZCl7YT16cChhKTthPW51bGwhPWEmJmM/YS9jOjA7Yz0uOTk5OTk5PGEmJjE+YT8ifjEwMCUiOjFFLTY+YSYmMDxhPyJ+MCUiOnRwKDEwMCphLDIpKyIlIjtkPWNxKGEsITEsZCk7cmV0dXJuIG5ldyAkcChjLGQsMTAwKmErIiUiKX1mdW5jdGlvbiBlcShhLGMsZCl7Y29uc3QgZj1hcShhKTtjPWNxKGEsYyxkKTtyZXR1cm4gbmV3ICRwKGYsYyxhLnRvTG9jYWxlU3RyaW5nKCkpfWZ1bmN0aW9uIGZxKGEsYyl7YT15cCh4cChhKSk7Yz1jcShhLGMsdm9pZCAwKTtyZXR1cm4gbmV3ICRwKGEsYyl9ZnVuY3Rpb24gY3EoYSxjLGQpe2M9Yz8iZGF0YS13ZWlnaHRlZCAiOiIiO2lmKGQmJmQoYSl8fCJudW1iZXIiPT09dHlwZW9mIGEmJiFpc0Zpbml0ZShhKSljKz0iZGF0YS1lcnJvciAiO3JldHVybiBjfQpmdW5jdGlvbiBncShhLGMsZCl7Y29uc3QgZj1bXTtmLnB1c2goZnEoImNvdW50IikpO2YucHVzaChmcSgibWlzc2luZyIpKTthPyhmLnB1c2goZnEoIm1lYW4iLGMpKSxmLnB1c2goZnEoInN0ZCBkZXYiLGMpKSxmLnB1c2goZnEoInplcm9zIikpLGYucHVzaChmcSgibWluIikpLGYucHVzaChmcSgibWVkaWFuIixjKSksZi5wdXNoKGZxKCJtYXgiKSkpOihmLnB1c2goZnEoInVuaXF1ZSIpKSxmLnB1c2goZnEoInRvcCIsYykpLGYucHVzaChmcSgiZnJlcSB0b3AiLGMpKSxmLnB1c2goZnEoImF2ZyBzdHIgbGVuIikpKTtkJiZmLnB1c2gobmV3ICRwKCJjdXN0b20iLCJkYXRhLWN1c3RvbSAiKSk7cmV0dXJuIGZ9CmZ1bmN0aW9uIEJwKGEpe3JldHVybiBhP2EuZ2V0TnVtU3RhdHMoKT9hLmdldE51bVN0YXRzKCkuZ2V0Q29tbW9uU3RhdHMoKTphLmdldFN0cmluZ1N0YXRzKCk/YS5nZXRTdHJpbmdTdGF0cygpLmdldENvbW1vblN0YXRzKCk6YS5nZXRCeXRlc1N0YXRzKCk/YS5nZXRCeXRlc1N0YXRzKCkuZ2V0Q29tbW9uU3RhdHMoKTphLmdldFN0cnVjdFN0YXRzKCk/YS5nZXRTdHJ1Y3RTdGF0cygpLmdldENvbW1vblN0YXRzKCk6bnVsbDpudWxsfWZ1bmN0aW9uIGhxKGEpe2NvbnN0IGM9W107YT8oYy5wdXNoKGVxKGEuZ2V0TnVtTm9uTWlzc2luZygpLCExLGQ9PjA+PWQpKSxjLnB1c2goZHEoYS5nZXROdW1NaXNzaW5nKCksenAoYS5nZXROdW1Ob25NaXNzaW5nKCkpK3pwKGEuZ2V0TnVtTWlzc2luZygpKSxkPT4uMDI8ZCkpKTooYy5wdXNoKGVxKDAsITEsZD0+MD49ZCkpLGMucHVzaChkcSgxLDEsZD0+LjAyPGQpKSk7cmV0dXJuIGN9CmZ1bmN0aW9uIGlxKGEsYyxkKXtjb25zdCBmPVtdO2lmKGEpKGQ9ZD9hLmdldFdlaWdodGVkTnVtZXJpY1N0YXRzKCk6bnVsbCk/KGYucHVzaChicShkLmdldE1lYW4oKSwhMCkpLGYucHVzaChicShkLmdldFN0ZERldigpLCEwKSkpOihmLnB1c2goYnEoYS5nZXRNZWFuKCkpKSxmLnB1c2goYnEoYS5nZXRTdGREZXYoKSkpKSxmLnB1c2goZHEoYS5nZXROdW1aZXJvcygpLE9wKGMpLGc9Pi4xPGcpKSxjPWpxKGEpLGYucHVzaChicShjP05hTjphLmdldE1pbigpKSksZD9mLnB1c2goYnEoZC5nZXRNZWRpYW4oKSwhMCkpOmYucHVzaChicShhLmdldE1lZGlhbigpKSksZi5wdXNoKGJxKGM/TmFOOmEuZ2V0TWF4KCkpKTtlbHNlIGZvcihhPTA7Nj5hO2ErKylmLnB1c2goZnEoIi0iKSk7cmV0dXJuIGZ9CmZ1bmN0aW9uIGpxKGEpe2lmKCFhKXJldHVybiExO2E9YS5nZXRIaXN0b2dyYW1zTGlzdCgpO2ZvcihsZXQgYz0wO2M8YS5sZW5ndGg7YysrKWlmKDA8YVtjXS5nZXROdW1OYW4oKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBrcShhLGMpe2NvbnN0IGQ9W107aWYoYSl7Yz1jP2EuZ2V0V2VpZ2h0ZWRTdHJpbmdTdGF0cygpOm51bGw7ZC5wdXNoKGVxKGEuZ2V0VW5pcXVlKCkpKTtjb25zdCBmPWM/Yy5nZXRUb3BWYWx1ZXNMaXN0KCk6YS5nZXRUb3BWYWx1ZXNMaXN0KCk7ZiYmMDxmLmxlbmd0aD8oZC5wdXNoKGZxKGZbMF0uZ2V0VmFsdWUoKSwhIWMpKSxkLnB1c2goYnEoZlswXS5nZXRGcmVxdWVuY3koKSwhIWMpKSk6KGQucHVzaChmcSgiLSIpKSxkLnB1c2goZnEoIi0iKSkpO2QucHVzaChicShhLmdldEF2Z0xlbmd0aCgpKSl9ZWxzZSBmb3IoYT0wOzQ+YTthKyspZC5wdXNoKGZxKCItIikpO3JldHVybiBkfQpmdW5jdGlvbiBscShhKXtjb25zdCBjPVtdO2lmKGEpYy5wdXNoKGVxKGEuZ2V0VW5pcXVlKCkpKSxjLnB1c2goZnEoIi0iKSksYy5wdXNoKGZxKCItIikpLGMucHVzaChicShhLmdldEF2Z051bUJ5dGVzKCkpKTtlbHNlIGZvcihhPTA7ND5hO2ErKyljLnB1c2goZnEoIi0iKSk7cmV0dXJuIGN9ZnVuY3Rpb24gbXEoYSl7Y29uc3QgYz1bXTtpZihhJiYwPGEubGVuZ3RoKXtjb25zdCBkPW5ldyAkcCgiIiwiZGF0YS1jdXN0b20gIik7YS5mb3JFYWNoKGY9PntpZighZi5nZXRIaXN0b2dyYW0oKSYmIWYuZ2V0UmFua0hpc3RvZ3JhbSgpKXt2YXIgZz1mLmdldE5hbWUoKTsiIiE9PWQuc3RyJiYoZz0iXG4iK2cpO2QuYXBwZW5kKGZxKGcpKTtmLmdldFN0cigpP2QuYXBwZW5kKGZxKGYuZ2V0U3RyKCkpLCI6ICIpOmQuYXBwZW5kKGJxKGYuZ2V0TnVtKCkpLCI6ICIpfX0pO2MucHVzaChkKX1lbHNlIGMucHVzaChuZXcgJHAoIi0iLCJkYXRhLWN1c3RvbSAiKSk7cmV0dXJuIGN9CmZ1bmN0aW9uIG5xKGEsYyxkKXtpZighYSlyZXR1cm5bXTtjb25zdCBmPUJwKGEpO2xldCBnPWhxKGYpO2c9YS5nZXROdW1TdGF0cygpP2cuY29uY2F0KGlxKGEuZ2V0TnVtU3RhdHMoKSxmLGMpKTphLmdldFN0cmluZ1N0YXRzKCk/Zy5jb25jYXQoa3EoYS5nZXRTdHJpbmdTdGF0cygpLGMpKTpnLmNvbmNhdChscShhLmdldEJ5dGVzU3RhdHMoKSkpO2QmJihnPWcuY29uY2F0KG1xKGEuZ2V0Q3VzdG9tU3RhdHNMaXN0KCkpKSk7cmV0dXJuIGd9CmZ1bmN0aW9uIG9xKGEpe2NvbnN0IGM9YS5tYXAoKCk9PjApO2EuZm9yRWFjaCgoZCxmKT0+e2QuZm9yRWFjaChnPT57Y1tmXSs9enAoZy5nZXRTYW1wbGVDb3VudCgpKX0pfSk7cmV0dXJuIGEubWFwKChkLGYpPT5kLm1hcChnPT57aWYoZyBpbnN0YW5jZW9mIEhqKXt2YXIgbD1uZXcgSGo7bC5zZXRTYW1wbGVDb3VudChnLmdldFNhbXBsZUNvdW50KCkvY1tmXSk7bC5zZXRMb3dWYWx1ZShnLmdldExvd1ZhbHVlKCkpO2wuc2V0SGlnaFZhbHVlKGcuZ2V0SGlnaFZhbHVlKCkpO3JldHVybiBsfWw9bmV3IEtqO2wuc2V0U2FtcGxlQ291bnQoZy5nZXRTYW1wbGVDb3VudCgpL2NbZl0pO2wuc2V0TG93UmFuayhnLmdldExvd1JhbmsoKSk7bC5zZXRIaWdoUmFuayhnLmdldEhpZ2hSYW5rKCkpO2wuc2V0TGFiZWwoZy5nZXRMYWJlbCgpKTtyZXR1cm4gbH0pKX07Cjwvc2NyaXB0Pgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vZmFjZXRzLW92ZXJ2aWV3L2NvbW1vbi9vdmVydmlld19kYXRhX21vZGVsLmpzCmNsYXNzIHBxe2NvbnN0cnVjdG9yKGEpe3RoaXMuZGF0YT1hO3RoaXMuY29sb3JTY2FsZT1uZXcgUGxvdHRhYmxlLlNjYWxlcy5Db2xvcjt0aGlzLmNvbG9yU2NhbGUuZG9tYWluKGEuZ2V0RGF0YXNldHNMaXN0KCkubWFwKGM9PmMuZ2V0TmFtZSgpKSk7dGhpcy5jb2xvclNjYWxlLnJhbmdlKCIjNDI4NUY0ICNGMDkzMDAgIzBGOUQ1OCAjOUMyN0IwICM2MDdEOEIgIzBCODA0MyAjNzU3NTc1Ii5zcGxpdCgiICIpKTtpZighSHAoYSkpdGhyb3cgRXJyb3IoImlucHV0IHByb3RvIGhhcyBub3QgYmVlbiBjbGVhbmVkIik7dGhpcy5mZWF0dXJlc0J5U3BlYz10aGlzLm1ha2VGZWF0dXJlQnlTcGVjTGlzdCgpfW1ha2VGZWF0dXJlQnlTcGVjTGlzdCgpe2NvbnN0IGE9W107Zm9yKGxldCBjPTA7MTY+YztjKyspYVtjXT1bXTt0aGlzLmdldFVuaXF1ZUZlYXR1cmVzKCkuZm9yRWFjaChjPT57Y29uc3QgZD10aGlzLmdldEZlYXR1cmVTcGVjRm9yRmVhdHVyZShjLmdldE5hbWUoKSk7YVtkXS5wdXNoKGMuZ2V0TmFtZSgpKX0pOwpyZXR1cm4gYX1nZXROb25FbXB0eUZlYXR1cmVTcGVjTGlzdHMoKXtjb25zdCBhPVtdO2ZvcihsZXQgYz0wOzE2PmM7YysrKWlmKDAhPT10aGlzLmZlYXR1cmVzQnlTcGVjW2NdLmxlbmd0aCl7Y29uc3QgZD1uZXcgU3A7ZC5mZWF0dXJlcz10aGlzLmZlYXR1cmVzQnlTcGVjW2NdO2Quc3BlYz1jO2EucHVzaChkKX1yZXR1cm4gYX1nZXRGZWF0dXJlU3BlY0ZvckZlYXR1cmUoYSl7Y29uc3QgYz10aGlzLmdldERhdGFzZXROYW1lcygpO2xldCBkPTE1O2ZvcihsZXQgZz0wO2c8Yy5sZW5ndGg7ZysrKXt2YXIgZj10aGlzLmdldEZlYXR1cmUoYSxjW2ddKTtmPW51bGw9PWY/MTU6UnAoZi5nZXRUeXBlKCksdGhpcy5nZXRGZWF0dXJlQ29tbW9uU3RhdHMoYSxjW2ddKSk7ZD1RcChkLGYpfTE2PT09ZCYmKGQ9MTUpO3JldHVybiBkfWdldERhdGFzZXRGZWF0dXJlU3RhdGlzdGljcygpe3JldHVybiB0aGlzLmRhdGF9Z2V0Q29sb3JTY2FsZSgpe3JldHVybiB0aGlzLmNvbG9yU2NhbGV9Z2V0RGF0YXNldE5hbWVzKCl7cmV0dXJuIHRoaXMuZGF0YT8KdGhpcy5kYXRhLmdldERhdGFzZXRzTGlzdCgpLm1hcChhPT5hLmdldE5hbWUoKSk6W119Z2V0RGF0YXNldChhKXtpZighdGhpcy5kYXRhKXJldHVybiBudWxsO2Zvcihjb25zdCBjIG9mIHRoaXMuZGF0YS5nZXREYXRhc2V0c0xpc3QoKSlpZihjLmdldE5hbWUoKT09PWEpcmV0dXJuIGM7cmV0dXJuIG51bGx9Z2V0RmVhdHVyZShhLGMpe2lmKCFhfHwhdGhpcy5kYXRhKXJldHVybiBudWxsO2M9dGhpcy5nZXREYXRhc2V0KGMpO2lmKCFjKXJldHVybiBudWxsO2Zvcihjb25zdCBkIG9mIGMuZ2V0RmVhdHVyZXNMaXN0KCkpaWYoZC5nZXROYW1lKCk9PT1hKXJldHVybiBkO3JldHVybiBudWxsfWdldEV4dHJhSGlzdG9ncmFtTmFtZXMoYSl7aWYoIXRoaXMuZGF0YSlyZXR1cm5bXTthPWEubWFwKGQ9PmQuZ2V0TmFtZSgpKTtjb25zdCBjPXt9O2Zvcihjb25zdCBkIG9mIHRoaXMuZGF0YS5nZXREYXRhc2V0c0xpc3QoKSlmb3IoY29uc3QgZiBvZiBkLmdldEZlYXR1cmVzTGlzdCgpKWlmKC0xIT09CmEuaW5kZXhPZihmLmdldE5hbWUoKSkmJihmLmdldEN1c3RvbVN0YXRzTGlzdCgpJiZmLmdldEN1c3RvbVN0YXRzTGlzdCgpLmZvckVhY2goZz0+e2lmKGcuZ2V0SGlzdG9ncmFtKCl8fGcuZ2V0UmFua0hpc3RvZ3JhbSgpKWNbZy5nZXROYW1lKCldPSEwfSksZi5nZXROdW1TdGF0cygpKSl7Y29uc3QgZz1mLmdldE51bVN0YXRzKCkuZ2V0SGlzdG9ncmFtc0xpc3QoKTtpZihnKWZvcihsZXQgbD0wO2w8Zy5sZW5ndGg7bCsrKXtjb25zdCBrPWdbbF07ay5nZXROYW1lKCkmJihjW2suZ2V0TmFtZSgpXT0hMCl9fXJldHVybiBPYmplY3Qua2V5cyhjKX1nZXRGZWF0dXJlQ29tbW9uU3RhdHMoYSxjKXthPXRoaXMuZ2V0RmVhdHVyZShhLGMpO3JldHVybiBudWxsPT1hP251bGw6QnAoYSl9Z2V0RmVhdHVyZU5hbWVzKGEpe3JldHVybiBhJiZ0aGlzLmRhdGE/KGE9dGhpcy5nZXREYXRhc2V0KGEpKT9hLmdldEZlYXR1cmVzTGlzdCgpLm1hcChjPT5jLmdldE5hbWUoKSk6W106bnVsbH1nZXRGZWF0dXJlSW5kZXgoYSwKYyl7aWYoIXRoaXMuZGF0YSlyZXR1cm4gbnVsbDthPXRoaXMuZ2V0RGF0YXNldChhKTtpZighYSlyZXR1cm4gbnVsbDtsZXQgZD0wO2Zvcihjb25zdCBmIG9mIGEuZ2V0RmVhdHVyZXNMaXN0KCkpe2lmKGYuZ2V0TmFtZSgpPT09YylyZXR1cm4gZDsrK2R9cmV0dXJuIG51bGx9Z2V0VW5pcXVlRmVhdHVyZXMoKXtpZighdGhpcy5kYXRhKXJldHVybltdO2NvbnN0IGE9e307Zm9yKGNvbnN0IGMgb2YgdGhpcy5kYXRhLmdldERhdGFzZXRzTGlzdCgpKWZvcihjb25zdCBkIG9mIGMuZ2V0RmVhdHVyZXNMaXN0KCkpYVtkLmdldE5hbWUoKV09ZDtyZXR1cm4gT2JqZWN0LmtleXMoYSkubWFwKGM9PmFbY10pfWdldE51bVVuaXF1ZUZlYXR1cmVzQnlUeXBlKGEpe3JldHVybiB0aGlzLmdldFVuaXF1ZUZlYXR1cmVzKCkuZmlsdGVyKGM9PkZwKGMpPT09YSkubGVuZ3RofWZlYXR1cmVIYXNTaW5nbGVWYWx1ZShhKXtpZighYSlyZXR1cm4hMTtpZihhLmdldFN0cmluZ1N0YXRzKCkpe3ZhciBjPWEuZ2V0U3RyaW5nU3RhdHMoKS5nZXRVbmlxdWUoKTsKcmV0dXJuIDE9PT16cChjKX1yZXR1cm4gYS5nZXRCeXRlc1N0YXRzKCk/KGM9YS5nZXRCeXRlc1N0YXRzKCkuZ2V0VW5pcXVlKCksMT09PXpwKGMpKTphLmdldE51bVN0YXRzKCk/KGM9YS5nZXROdW1TdGF0cygpLmdldE1pbigpLGE9YS5nZXROdW1TdGF0cygpLmdldE1heCgpLG51bGw9PWMmJm51bGw9PWE/ITE6enAoYyk9PT16cChhKSk6ITF9ZmVhdHVyZUFjcm9zc0FsbERhdGFzZXRzSGFzU2luZ2xlVmFsdWUoYSl7aWYoIWF8fCF0aGlzLmRhdGEpcmV0dXJuITE7Zm9yKGNvbnN0IGMgb2YgdGhpcy5kYXRhLmdldERhdGFzZXRzTGlzdCgpKWZvcihjb25zdCBkIG9mIGMuZ2V0RmVhdHVyZXNMaXN0KCkpaWYoYT09PWQuZ2V0TmFtZSgpJiYhdGhpcy5mZWF0dXJlSGFzU2luZ2xlVmFsdWUoZCkpcmV0dXJuITE7cmV0dXJuITB9Z2V0RmVhdHVyZVNpbmdsZVZhbHVlKGEpe2lmKG51bGw9PWEpcmV0dXJuIlx4M2NudWxsXHgzZSI7aWYoYS5nZXRTdHJpbmdTdGF0cygpKXJldHVybiBhPWEuZ2V0U3RyaW5nU3RhdHMoKS5nZXRUb3BWYWx1ZXNMaXN0KCksCm51bGw9PWF8fDA9PT1hLmxlbmd0aD8iXHgzY251bGxceDNlIjphWzBdLmdldFZhbHVlKCk7aWYoYS5nZXRCeXRlc1N0YXRzKCkpcmV0dXJuIDA9PT1hLmdldEJ5dGVzU3RhdHMoKS5nZXRVbmlxdWUoKT8iXHgzY251bGxceDNlIjoiXHgzY2JpbmFyeSBkYXRhXHgzZSI7aWYoYS5nZXROdW1TdGF0cygpKXtjb25zdCBjPWEuZ2V0TnVtU3RhdHMoKS5nZXRNaW4oKTtpZihjKXJldHVybiB6cChjKS50b1N0cmluZygpO2lmKGE9YS5nZXROdW1TdGF0cygpLmdldE1heCgpKXJldHVybiB6cChhKS50b1N0cmluZygpfXJldHVybiJceDNjdW5rbm93biB0eXBlXHgzZSJ9Z2V0RGF0YXNldEhpc3RvZ3JhbXNGb3JGZWF0dXJlKGEpe2NvbnN0IGM9W107aWYodGhpcy5kYXRhKWZvcihjb25zdCBsIG9mIHRoaXMuZGF0YS5nZXREYXRhc2V0c0xpc3QoKSl7Y29uc3Qgaz1sLmdldE5hbWUoKTtsZXQgbT1udWxsLHA9bnVsbCxxPW51bGwscj1udWxsLHQ9bnVsbCx2PW51bGw7Y29uc3QgQT17fTtmb3IoY29uc3QgeSBvZiBsLmdldEZlYXR1cmVzTGlzdCgpKWlmKHkuZ2V0TmFtZSgpPT09CmEpe3ZhciBkPXRoaXMuZ2V0RmVhdHVyZUNvbW1vblN0YXRzKGEsayk7ZCYmKHQ9ZC5nZXROdW1WYWx1ZXNIaXN0b2dyYW0oKSx2PWQuZ2V0RmVhdHVyZUxpc3RMZW5ndGhIaXN0b2dyYW0oKSk7eS5nZXRDdXN0b21TdGF0c0xpc3QoKSYmeS5nZXRDdXN0b21TdGF0c0xpc3QoKS5mb3JFYWNoKHg9Pnt4LmdldEhpc3RvZ3JhbSgpP0FbeC5nZXROYW1lKCldPXguZ2V0SGlzdG9ncmFtKCk6eC5nZXRSYW5rSGlzdG9ncmFtKCkmJihBW3guZ2V0TmFtZSgpXT14LmdldFJhbmtIaXN0b2dyYW0oKSl9KTtpZih5LmdldE51bVN0YXRzKCkpe2lmKGQ9eS5nZXROdW1TdGF0cygpLmdldEhpc3RvZ3JhbXNMaXN0KCkpZm9yKHZhciBmPTA7ZjxkLmxlbmd0aDtmKyspe3ZhciBnPWRbZl07Zy5nZXROYW1lKCk/QVtnLmdldE5hbWUoKV09ZzowPT09Zy5nZXRUeXBlKCk/bT1nOnE9Z31pZih5LmdldE51bVN0YXRzKCkuZ2V0V2VpZ2h0ZWROdW1lcmljU3RhdHMoKSYmKGQ9eS5nZXROdW1TdGF0cygpLmdldFdlaWdodGVkTnVtZXJpY1N0YXRzKCkuZ2V0SGlzdG9ncmFtc0xpc3QoKSkpZm9yKGY9CjA7ZjxkLmxlbmd0aDtmKyspZz1kW2ZdLDA9PT1nLmdldFR5cGUoKT9wPWc6cj1nfWVsc2UgeS5nZXRTdHJpbmdTdGF0cygpJiYobT15LmdldFN0cmluZ1N0YXRzKCkuZ2V0UmFua0hpc3RvZ3JhbSgpLHkuZ2V0U3RyaW5nU3RhdHMoKS5nZXRXZWlnaHRlZFN0cmluZ1N0YXRzKCkmJihwPXkuZ2V0U3RyaW5nU3RhdHMoKS5nZXRXZWlnaHRlZFN0cmluZ1N0YXRzKCkuZ2V0UmFua0hpc3RvZ3JhbSgpKSk7YnJlYWt9Yy5wdXNoKG5ldyBJbihrLG0scCxxLHIsdCx2LEEpKX1yZXR1cm4gY31kb2VzQ29udGFpbldlaWdodGVkU3RhdHMoKXtudWxsPT10aGlzLmNvbnRhaW5zV2VpZ2h0ZWRTdGF0cyYmKHRoaXMuY29udGFpbnNXZWlnaHRlZFN0YXRzPUlwKHRoaXMuZGF0YSkpO3JldHVybiB0aGlzLmNvbnRhaW5zV2VpZ2h0ZWRTdGF0c31kb2VzQ29udGFpbkN1c3RvbVN0YXRzKCl7bnVsbD09dGhpcy5jb250YWluc0N1c3RvbVN0YXRzJiYodGhpcy5jb250YWluc0N1c3RvbVN0YXRzPUpwKHRoaXMuZGF0YSkpOwpyZXR1cm4gdGhpcy5jb250YWluc0N1c3RvbVN0YXRzfWRvZXNDb250YWluRmVhdHVyZUxpc3RMZW5ndGhEYXRhKCl7bnVsbD09dGhpcy5jb250YWluc0ZlYXR1cmVMaXN0TGVuZ3RoRGF0YSYmKHRoaXMuY29udGFpbnNGZWF0dXJlTGlzdExlbmd0aERhdGE9S3AodGhpcy5kYXRhKSk7cmV0dXJuIHRoaXMuY29udGFpbnNGZWF0dXJlTGlzdExlbmd0aERhdGF9Z2V0Q2hhcnRBbHBoYSgpe3JldHVybiAyPD10aGlzLmdldERhdGFzZXROYW1lcygpLmxlbmd0aD8uNDoxfWdldENoYXJ0Q29sb3JTdHJpbmcoYSl7YT10aGlzLmdldENvbG9yU2NhbGUoKS5zY2FsZSh0aGlzLmdldERhdGFzZXROYW1lcygpW2FdKTtjb25zdCBjPXRoaXMuZ2V0Q2hhcnRBbHBoYSgpO3JldHVybiBhLnJlcGxhY2UoInJnYiIsInJnYmEiKS5yZXBsYWNlKCIpIiwiLCAiK2MrIikiKX19Owo8L3NjcmlwdD4KPHNjcmlwdD4vL35+V0VCUEFUSH5+L2ZhY2V0cy1vdmVydmlldy9jb21tb24vcGxvdHRhYmxlX2hlbHBlcnMuanMKKGZ1bmN0aW9uKGEpe2Z1bmN0aW9uIGMocCl7Y29uc3QgcT1bXTtmb3IoO3AmJnAgaW5zdGFuY2VvZiBIVE1MRWxlbWVudDspaWYocS5wdXNoKHApLHAuYXNzaWduZWRTbG90KXA9cC5hc3NpZ25lZFNsb3Q7ZWxzZSBpZihwLnBhcmVudEVsZW1lbnQpcD1wLnBhcmVudEVsZW1lbnQ7ZWxzZXtjb25zdCByPXAucGFyZW50Tm9kZTtwPXIgaW5zdGFuY2VvZiBEb2N1bWVudEZyYWdtZW50P3IuaG9zdDpyIT09cD9yOm51bGx9cmV0dXJuIHF9ZnVuY3Rpb24gZChwKXt2YXIgcT1jKHApO3A9ZjtsZXQgcj1udWxsO2Zvcihjb25zdCB2IG9mIHEpe3E9UGxvdHRhYmxlLlV0aWxzLkRPTS5nZXRFbGVtZW50VHJhbnNmb3JtKHYpO2lmKG51bGwhPXEpe3ZhciB0PXYuY2xpZW50V2lkdGgvMjtjb25zdCBBPXYuY2xpZW50SGVpZ2h0LzI7cD1QbG90dGFibGUuVXRpbHMuTWF0aC5tdWx0aXBseVRyYW5zbGF0ZShwLFt0LEFdKTtwPVBsb3R0YWJsZS5VdGlscy5NYXRoLm11bHRpcGx5TWF0cml4KHAsUGxvdHRhYmxlLlV0aWxzLk1hdGguaW52ZXJ0TWF0cml4KHEpKTsKcD1QbG90dGFibGUuVXRpbHMuTWF0aC5tdWx0aXBseVRyYW5zbGF0ZShwLFstdCwtQV0pfXE9di5zY3JvbGxMZWZ0O3Q9di5zY3JvbGxUb3A7aWYobnVsbD09PXJ8fHY9PT1yKXEtPXYub2Zmc2V0TGVmdCt2LmNsaWVudExlZnQsdC09di5vZmZzZXRUb3Ardi5jbGllbnRUb3Ascj12Lm9mZnNldFBhcmVudDtwPVBsb3R0YWJsZS5VdGlscy5NYXRoLm11bHRpcGx5VHJhbnNsYXRlKHAsW3EsdF0pfXJldHVybiBwfWNvbnN0IGY9WzEsMCwwLDEsMCwwXTtjbGFzcyBnIGV4dGVuZHMgUGxvdHRhYmxlLlV0aWxzLlRyYW5zbGF0b3J7Y29tcHV0ZVBvc2l0aW9uKHAscSl7cD17eDpwLHk6cX07cT1kKHRoaXMuX3Jvb3RFbGVtZW50KTtyZXR1cm4gbnVsbD09cT9wOlBsb3R0YWJsZS5VdGlscy5NYXRoLmFwcGx5VHJhbnNmb3JtKHEscCl9fWNsYXNzIGwgZXh0ZW5kcyBQbG90dGFibGUuRGlzcGF0Y2hlcnMuTW91c2V7Y29uc3RydWN0b3IocCl7c3VwZXIocCk7dGhpcy5fZXZlbnRUYXJnZXQ9cC5yb290KCkucm9vdEVsZW1lbnQoKS5ub2RlKCk7CnRoaXMuX3RyYW5zbGF0b3I9bmV3IGcocC5yb290KCkucm9vdEVsZW1lbnQoKS5ub2RlKCkpfXN0YXRpYyBnZXREaXNwYXRjaGVyKHApe2NvbnN0IHE9cC5yb290KCkucm9vdEVsZW1lbnQoKTtsZXQgcj1xW2wuX0RJU1BBVENIRVJfS0VZXTtyfHwocj1uZXcgbChwKSxxW2wuX0RJU1BBVENIRVJfS0VZXT1yKTtyZXR1cm4gcn19Y2xhc3MgayBleHRlbmRzIFBsb3R0YWJsZS5EaXNwYXRjaGVycy5Ub3VjaHtjb25zdHJ1Y3RvcihwKXtzdXBlcihwKTt0aGlzLl9ldmVudFRhcmdldD1wLnJvb3QoKS5yb290RWxlbWVudCgpLm5vZGUoKTt0aGlzLl90cmFuc2xhdG9yPW5ldyBnKHAucm9vdCgpLnJvb3RFbGVtZW50KCkubm9kZSgpKX1zdGF0aWMgZ2V0RGlzcGF0Y2hlcihwKXtjb25zdCBxPXAucm9vdCgpLnJvb3RFbGVtZW50KCk7bGV0IHI9cVtrLl9ESVNQQVRDSEVSX0tFWV07cnx8KHI9bmV3IGsocCkscVtrLl9ESVNQQVRDSEVSX0tFWV09cik7cmV0dXJuIHJ9fWNsYXNzIG0gZXh0ZW5kcyBQbG90dGFibGUuSW50ZXJhY3Rpb25zLlBvaW50ZXJ7X2FuY2hvcigpe3RoaXMuX2lzQW5jaG9yZWQ9CiEwO3RoaXMuX21vdXNlRGlzcGF0Y2hlcj1sLmdldERpc3BhdGNoZXIodGhpcy5fY29tcG9uZW50QXR0YWNoZWRUbyk7dGhpcy5fbW91c2VEaXNwYXRjaGVyLm9uTW91c2VNb3ZlKHRoaXMuX21vdXNlTW92ZUNhbGxiYWNrKTt0aGlzLl90b3VjaERpc3BhdGNoZXI9ay5nZXREaXNwYXRjaGVyKHRoaXMuX2NvbXBvbmVudEF0dGFjaGVkVG8pO3RoaXMuX3RvdWNoRGlzcGF0Y2hlci5vblRvdWNoU3RhcnQodGhpcy5fdG91Y2hTdGFydENhbGxiYWNrKX19YS5Qb2ludGVySW50ZXJhY3Rpb249bX0pKHdpbmRvdy5wbG90dGFibGVfaGVscGVyc3x8KHdpbmRvdy5wbG90dGFibGVfaGVscGVycz17fSkpOwo8L3NjcmlwdD4KCgoKCgoKCgoKCjxkb20tbW9kdWxlIGlkPSJmYWNldHMtb3ZlcnZpZXctcm93LXN0YXRzIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgICogewogICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgb3ZlcmZsb3cteDogaGlkZGVuOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICB9CiAgICAgIC5kYXRhLWVycm9yIHsKICAgICAgICBjb2xvcjogcmVkOwogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICB9CiAgICAgIC5kYXRhLXdlaWdodGVkIHsKICAgICAgICBmb250LXN0eWxlOiBpdGFsaWM7CiAgICAgIH0KICAgICAgLnRhYmxlLXJvdyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBtYXJnaW4tYm90dG9tOiA0cHg7CiAgICAgIH0KICAgICAgLnRhYmxlLWNlbGwgewogICAgICAgIG1pbi13aWR0aDogNzBweDsKICAgICAgICBtYXgtd2lkdGg6IDcwcHg7CiAgICAgICAgcGFkZGluZy1yaWdodDogNHB4OwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KICAgICAgLmRhdGEtY3VzdG9tIHsKICAgICAgICBtaW4td2lkdGg6IDE1MHB4OwogICAgICAgIG1heC13aWR0aDogMTUwcHg7CiAgICAgICAgd2hpdGUtc3BhY2U6IHByZTs7CiAgICAgIH0KICAgICAgI2xlZ2VuZC1ib3ggewogICAgICAgIHdpZHRoOiA2cHg7CiAgICAgICAgaGVpZ2h0OiAxNnB4OwogICAgICAgIG1hcmdpbi1sZWZ0OiA0cHg7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8ZGl2IGNsYXNzPSJ0YWJsZS1yb3ciPgogICAgICA8ZGl2IGlkPSJsZWdlbmQtYm94Ij48L2Rpdj4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tfZW50cmllc11dIj4KICAgICAgICA8ZGl2IGNsYXNzJD0iW1tpdGVtLmNzc0NsYXNzXV0gdGFibGUtY2VsbCIgdGl0bGU9IltbaXRlbS5mdWxsU3RyXV0iPltbaXRlbS5zdHJdXTwvZGl2PgogICAgICA8L3RlbXBsYXRlPgogICAgPC9kaXY+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vZmFjZXRzLW92ZXJ2aWV3L2NvbXBvbmVudHMvZmFjZXRzLW92ZXJ2aWV3LXJvdy1zdGF0cy9mYWNldHMtb3ZlcnZpZXctcm93LXN0YXRzLmpzClBvbHltZXIoe2lzOiJmYWNldHMtb3ZlcnZpZXctcm93LXN0YXRzIixwcm9wZXJ0aWVzOntzdGF0czpPYmplY3Qsc2hvd1dlaWdodGVkOkJvb2xlYW4saGFzQ3VzdG9tOkJvb2xlYW4sZGF0YU1vZGVsOk9iamVjdCxkYXRhc2V0SW5kZXg6TnVtYmVyLGNvbXBhcmVNb2RlOkJvb2xlYW4sX2VudHJpZXM6e3R5cGU6QXJyYXksY29tcHV0ZWQ6Il9nZXRFbnRyaWVzKHN0YXRzLCBzaG93V2VpZ2h0ZWQsIGhhc0N1c3RvbSkifX0sb2JzZXJ2ZXJzOlsiX2NvbG9yTGVnZW5kQm94KGRhdGFNb2RlbCwgZGF0YXNldEluZGV4LCBjb21wYXJlTW9kZSkiXSxfZ2V0RW50cmllczpmdW5jdGlvbihhLGMsZCl7cmV0dXJuIG5xKGEsYyxkKX0sX2NvbG9yTGVnZW5kQm94OmZ1bmN0aW9uKGEsYyxkKXtjb25zdCBmPWQzLnNlbGVjdCh0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiI2xlZ2VuZC1ib3giKSk7Mj5hLmdldERhdGFzZXROYW1lcygpLmxlbmd0aCYmIWQ/Zi5zdHlsZSgidmlzaWJpbGl0eSIsCiJoaWRkZW4iKTooZi5zdHlsZSgidmlzaWJpbGl0eSIsbnVsbCksZi5zdHlsZSgiYmFja2dyb3VuZC1jb2xvciIsYS5nZXRDaGFydENvbG9yU3RyaW5nKGMpKSl9fSk7Cjwvc2NyaXB0PgoKCgoKPGRvbS1tb2R1bGUgaWQ9ImZhY2V0cy1vdmVydmlldy1yb3ctbGVnZW5kIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIC50YWJsZS1yb3cgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSg2MSwxNDAsMjA3LDAuMSk7CiAgICAgICAgYm9yZGVyLWxlZnQ6IHNvbGlkIDAuNXB4IHJnYmEoMCwwLDAsMC4xKTsKICAgICAgICBib3JkZXItYm90dG9tOiBzb2xpZCAwLjVweCByZ2JhKDAsMCwwLDAuMSk7CiAgICAgIH0KICAgICAgLnRhYmxlLWNlbGwgewogICAgICAgIHBhZGRpbmc6IDIwcHggNHB4IDhweCAwOwogICAgICAgIG1pbi13aWR0aDogNjlweDsKICAgICAgICBtYXgtd2lkdGg6IDY5cHg7CiAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiAzMDA7CiAgICAgICAgYm9yZGVyLXJpZ2h0OiBzb2xpZCAwLjVweCByZ2JhKDAsMCwwLDAuMSk7CiAgICAgIH0KICAgICAgLmRhdGEtd2VpZ2h0ZWQgewogICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICAgICAgfQogICAgICAuZGF0YS1jdXN0b20gewogICAgICAgIG1pbi13aWR0aDogMTUwcHg7CiAgICAgICAgbWF4LXdpZHRoOiAxNTBweDsKICAgICAgfQogICAgICAubGVnZW5kLXNwYWNlIHsKICAgICAgICB3aWR0aDogNnB4OwogICAgICAgIGhlaWdodDogOHB4OwogICAgICAgIG1hcmdpbi1sZWZ0OiA0cHg7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8ZGl2IGNsYXNzPSJ0YWJsZS1yb3ciPgogICAgICA8ZGl2IGNsYXNzPSJsZWdlbmQtc3BhY2UiPjwvZGl2PgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19lbnRyaWVzXV0iPgogICAgICAgIDxkaXYgY2xhc3MkPSJbW2l0ZW0uY3NzQ2xhc3NdXSB0YWJsZS1jZWxsIj5bW2l0ZW0uc3RyXV08L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgIDwvZGl2PgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT4KPHNjcmlwdD4vL35+V0VCUEFUSH5+L2ZhY2V0cy1vdmVydmlldy9jb21wb25lbnRzL2ZhY2V0cy1vdmVydmlldy1yb3ctbGVnZW5kL2ZhY2V0cy1vdmVydmlldy1yb3ctbGVnZW5kLmpzClBvbHltZXIoe2lzOiJmYWNldHMtb3ZlcnZpZXctcm93LWxlZ2VuZCIscHJvcGVydGllczp7bnVtZXJpYzpCb29sZWFuLHNob3dXZWlnaHRlZDpCb29sZWFuLGhhc0N1c3RvbTpCb29sZWFuLGRhdGFNb2RlbDpPYmplY3QsX2VudHJpZXM6e3R5cGU6QXJyYXksY29tcHV0ZWQ6Il9nZXRFbnRyaWVzKG51bWVyaWMsIHNob3dXZWlnaHRlZCwgaGFzQ3VzdG9tKSJ9fSxfZ2V0RW50cmllczpmdW5jdGlvbihhLGMsZCl7cmV0dXJuIGdxKGEsYyxkKX19KTsKPC9zY3JpcHQ+CgoKCgoKCgoKPGRvbS1tb2R1bGUgaWQ9ImZhY2V0cy1vdmVydmlldy1jaGFydCI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlIGluY2x1ZGU9InBsb3R0YWJsZS1zdHlsZSI+PC9zdHlsZT4KICAgIDxzdHlsZT4KICAgICAgLnBsb3R0YWJsZS5jaGFydC1zbWFsbCB7CiAgICAgICAgaGVpZ2h0OiA0NnB4OwogICAgICAgIHdpZHRoOiAyNTBweDsKICAgICAgfQogICAgICAucGxvdHRhYmxlLnhheGlzLXNtYWxsewogICAgICAgIGhlaWdodDogMzBweDsKICAgICAgICB3aWR0aDogMjUwcHg7CiAgICAgIH0KICAgICAgLnBsb3R0YWJsZS5jaGFydC1iaWcgewogICAgICAgIGhlaWdodDogMjAwcHg7CiAgICAgICAgd2lkdGg6IDU1MHB4OwogICAgICB9CiAgICAgIC5wbG90dGFibGUueGF4aXMtYmlnIHsKICAgICAgICBoZWlnaHQ6IDUwcHg7CiAgICAgICAgd2lkdGg6IDU1MHB4OwogICAgICB9CiAgICAgICNzaG93X3RhYmxlX2J1dHRvbiB7CiAgICAgICAgbWFyZ2luOiAwIDAgMCA1cHg7CiAgICAgICAgcGFkZGluZzogMCAzcHg7CiAgICAgICAgZm9udC1zaXplOiA3cHQ7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2QzZDNkMzsKICAgICAgfQogICAgICAuZGlhbG9nLXJvdy1lbnRyeSB7CiAgICAgICAgcGFkZGluZzogMCAxMHB4IDAgMDsKICAgICAgfQogICAgICAudGFibGUtaGVhZGVyIHsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgYmxhY2s7CiAgICAgIH0KICAgICAgLmRpYWxvZy1yb3csIC5kaWFsb2ctaGVhZGVyLXJvdyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgfQogICAgICAuZGlhbG9nLXJvdy5zZWxlY3RlZCB7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgYmxhY2sKICAgICAgfQogICAgICAuZGlhbG9nLXJvdzpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI0QwRDBEMDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgIH0KICAgICAgLmRpYWxvZy10YWJsZSB7CiAgICAgICAgY2xlYXI6IGxlZnQ7CiAgICAgIH0KICAgICAgLmxhYmVsLWNlbGwgewogICAgICAgIHdpZHRoOiA5MHB4OwogICAgICAgIG1heC13aWR0aDogOTBweDsKICAgICAgICBtaW4td2lkdGg6IDkwcHg7CiAgICAgICAgb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKICAgICAgfQogICAgICAubm9uLW92ZXJmbG93LWxhYmVsLWNlbGwgewogICAgICAgIHdpZHRoOiA5MHB4OwogICAgICAgIG1heC13aWR0aDogOTBweDsKICAgICAgICBtaW4td2lkdGg6IDkwcHg7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICB9CiAgICAgIC5jb3VudC1jZWxsIHsKICAgICAgICB3aWR0aDogMTAwcHg7CiAgICAgICAgbWF4LXdpZHRoOiAxMDBweDsKICAgICAgICBtaW4td2lkdGg6IDEwMHB4OwogICAgICAgIG92ZXJmbG93LXdyYXA6IGJyZWFrLXdvcmQ7CiAgICAgIH0KICAgICAgLndlaWdodGVkLWNlbGwgewogICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICAgICAgfQogICAgICAuZGF0YS1saXN0LXNtYWxsIHsKICAgICAgICBoZWlnaHQ6IDYwcHg7CiAgICAgIH0KICAgICAgLmRhdGEtbGlzdC1iaWcgewogICAgICAgIGhlaWdodDogMTgwcHg7CiAgICAgICAgd2lkdGg6IDU1MHB4OwogICAgICB9CiAgICAgIC5oaWRlY2hhcnQgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KICAgICAgLnNob3djaGFydCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lOwogICAgICB9CiAgICAgICN0b29sdGlwIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci10b29sdGlwLWJhY2tncm91bmQsICM2MTYxNjEpOwogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgY29sb3I6IHdoaXRlOwogICAgICAgIHBvaW50ZXItZXZlbnRzOm5vbmU7CiAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjNzOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0ZXh0LWFsaWduOmNlbnRlcjsKICAgICAgICBwYWRkaW5nOiA2cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMnB4OwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBsaW5lLWhlaWdodDogMTsKICAgICAgICBtYXJnaW4tbGVmdDogNTBweDsKICAgICAgICB3aGl0ZS1zcGFjZTogcHJlOwogICAgICAgIHRvcDogMHB4OwogICAgICB9CiAgICAgIC50b3BsZXZlbCB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICAgICAgcGFkZGluZy10b3A6IDRweDsKICAgICAgfQogICAgPC9zdHlsZT4KICAgIDxkaXYgY2xhc3M9InRvcGxldmVsIj4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19pc1N0cmluZ0NoYXJ0KF9jaGFydFR5cGUsIGNoYXJ0U2VsZWN0aW9uKV1dIj4KICAgICAgICA8cGFwZXItYnV0dG9uIGlkPSJzaG93X3RhYmxlX2J1dHRvbiIgb24tY2xpY2s9Il90b2dnbGVTaG93VGFibGUiPltbX2dldFNob3dUYWJsZUJ1dHRvblRleHQoX3Nob3dUYWJsZSldXTwvcGFwZXItYnV0dG9uPgogICAgICA8L3RlbXBsYXRlPgogICAgICA8ZGl2IGNsYXNzJD0iW1tfY2hhcnRDbGFzc11dIj4KICAgICAgICA8ZGl2IGlkPSJjaGFydCIgY2xhc3MkPSJbW19jaGFydFN2Z0NsYXNzXV0iPjwvZGl2PgogICAgICAgIDxkaXYgaWQ9InhheGlzIiBjbGFzcyQ9IltbX3hBeGlzU3ZnQ2xhc3NdXSI+PC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX3Nob3dUYWJsZV1dIj4KICAgICAgICA8ZGl2IGNsYXNzPSJkaWFsb2ctdGFibGUiPgogICAgICAgICAgPGRpdiBjbGFzcz0iZGlhbG9nLWhlYWRlci1yb3ciPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJkaWFsb2ctcm93LWVudHJ5IHRhYmxlLWhlYWRlciBsYWJlbC1jZWxsIj5WYWx1ZTwvZGl2PgogICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW2RhdGFdXSIgYXM9ImRhdGEiPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRpYWxvZy1yb3ctZW50cnkgdGFibGUtaGVhZGVyIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im5vbi1vdmVyZmxvdy1sYWJlbC1jZWxsIj5bW2RhdGEubmFtZV1dPC9kaXY+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxpcm9uLWxpc3QgaXRlbXM9IltbX3RhYmxlRGF0YV1dIiBhcz0iZW50cnkiIGNsYXNzJD0iW1tfdGFibGVEYXRhQ2xhc3NdXSI+CiAgICAgICAgICAgIDx0ZW1wbGF0ZT4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzJD0iW1tfZ2V0RW50cnlSb3dDbGFzcyhlbnRyeSwgc2VsZWN0aW9uKV1dIiBvbi10YXA9Il9yb3dDbGljayIgZGF0YS12YWx1ZT0iW1tfZ2V0RW50cnlSb3dWYWx1ZShlbnRyeSldXSI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJkaWFsb2ctcm93LWVudHJ5IGxhYmVsLWNlbGwiPltbZW50cnkudmFsdWVdXTwvZGl2PgogICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tlbnRyeS5jb3VudHNdXSIgYXM9ImNvdW50Ij4KICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcyQ9IltbX2dldENvdW50Q2VsbENsYXNzKHNob3dXZWlnaHRlZCldXSI+W1tjb3VudF1dPC9kaXY+CiAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPGlyb24tbGlzdD4KICAgICAgICA8L2lyb24tbGlzdD48L2lyb24tbGlzdD48L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPGRpdiBpZD0idG9vbHRpcCI+PC9kaXY+CiAgICA8L2Rpdj4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+CjxzY3JpcHQ+Ly9+fldFQlBBVEh+fi9mYWNldHMtb3ZlcnZpZXcvY29tcG9uZW50cy9mYWNldHMtb3ZlcnZpZXctY2hhcnQvZmFjZXRzLW92ZXJ2aWV3LWNoYXJ0LmpzClBvbHltZXIoe2lzOiJmYWNldHMtb3ZlcnZpZXctY2hhcnQiLHByb3BlcnRpZXM6e2RhdGE6e3R5cGU6T2JqZWN0LG9ic2VydmVyOiJfdXBkYXRlRGF0YSJ9LGRhdGFNb2RlbDpPYmplY3QsZmVhdHVyZTpTdHJpbmcsX21heEJ1Y2tldHNGb3JCYXJDaGFydDp7dHlwZTpOdW1iZXIsdmFsdWU6MTAscmVhZE9ubHk6ITB9LF9jaGFydEFscGhhOnt0eXBlOk51bWJlcix2YWx1ZToxfSxsb2dTY2FsZTpCb29sZWFuLHNob3dXZWlnaHRlZDpCb29sZWFuLHNob3dQZXJjZW50YWdlOkJvb2xlYW4sY2hhcnRTZWxlY3Rpb246e3R5cGU6TnVtYmVyLG9ic2VydmVyOiJfdXBkYXRlQ2hhcnRTZWxlY3Rpb24ifSxzZWxlY3Rpb246e3R5cGU6T2JqZWN0LG9ic2VydmVyOiJfdXBkYXRlU2VsZWN0aW9uVmlzaWJpbGl0eSIsbm90aWZ5OiEwfSxleHBhbmRDaGFydDpCb29sZWFuLF9zZWxlY3Rpb25FbGVtOk9iamVjdCxfbWluQmFySGVpZ2h0UmF0aW86e3R5cGU6TnVtYmVyLHZhbHVlOi4wMSxyZWFkT25seTohMH0sCl9vbkNsaWNrOk9iamVjdCxfb25DbGlja0Z1bmN0aW9uOk9iamVjdCxfb25Qb2ludGVyOk9iamVjdCxfb25Qb2ludGVyRW50ZXJGdW5jdGlvbjpPYmplY3QsX29uUG9pbnRlckV4aXRGdW5jdGlvbjpPYmplY3QsX3RhYmxlRGF0YTpBcnJheSxfc2hvd1RhYmxlOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LF9jaGFydFR5cGU6T2JqZWN0LF9jaGFydENsYXNzOnt0eXBlOlN0cmluZyxjb21wdXRlZDoiX2dldENoYXJ0Q2xhc3MoX3Nob3dUYWJsZSkifSxfY2hhcnRTdmdDbGFzczp7dHlwZTpTdHJpbmcsY29tcHV0ZWQ6Il9nZXRDaGFydFN2Z0NsYXNzKGV4cGFuZENoYXJ0KSJ9LF94QXhpc1N2Z0NsYXNzOnt0eXBlOlN0cmluZyxjb21wdXRlZDoiX2dldFhBeGlzU3ZnQ2xhc3MoZXhwYW5kQ2hhcnQpIn0sX3RhYmxlRGF0YUNsYXNzOnt0eXBlOlN0cmluZyxjb21wdXRlZDoiX2dldFRhYmxlRGF0YUNsYXNzKGV4cGFuZENoYXJ0KSJ9fSxvYnNlcnZlcnM6WyJfcmVuZGVyKGRhdGEsIGxvZ1NjYWxlLCBzaG93V2VpZ2h0ZWQsIGNoYXJ0U2VsZWN0aW9uLCBfc2hvd1RhYmxlLCBleHBhbmRDaGFydCwgc2hvd1BlcmNlbnRhZ2UsIGRhdGFNb2RlbCkiXSwKX3VwZGF0ZURhdGEoKXt0aGlzLl9zaG93VGFibGU9ITF9LF91cGRhdGVDaGFydFNlbGVjdGlvbigpe3RoaXMuX3Nob3dUYWJsZT0hMX0sX2hhc1dlaWdodGVkSGlzdG9ncmFtKGEpe3JldHVybiBMcChhKX0sX2hhc1F1YW50aWxlcyhhKXtyZXR1cm4gTXAoYSl9LF9pc1N0cmluZ0NoYXJ0KGEsYyl7cmV0dXJuKGE9PT1YcC5DVU1ESVNUX0NIQVJUfHxhPT09WHAuQkFSX0NIQVJUKSYmIlZhbHVlIGxpc3QgbGVuZ3RoIiE9PWMmJiJGZWF0dXJlIGxpc3QgbGVuZ3RoIiE9PWN9LF9kaXNhYmxlTG9nQ2hlY2tib3goYSxjKXtyZXR1cm4gYXx8IlN0YW5kYXJkIiE9PWN9LF9yZW5kZXIoYSxjLGQsZixnLGwsayxtKXt0aGlzLl9vblBvaW50ZXImJih0aGlzLl9vblBvaW50ZXIub2ZmUG9pbnRlck1vdmUodGhpcy5fb25Qb2ludGVyRW50ZXJGdW5jdGlvbiksdGhpcy5fb25Qb2ludGVyLm9mZlBvaW50ZXJNb3ZlKHRoaXMuX29uUG9pbnRlckV4aXRGdW5jdGlvbikpO3RoaXMuX29uQ2xpY2smJnRoaXMuX29uQ2xpY2sub2ZmQ2xpY2sodGhpcy5fb25DbGlja0Z1bmN0aW9uKTsKYSYmKHRoaXMuX2NoYXJ0QWxwaGE9bS5nZXRDaGFydEFscGhhKCksZz1hLm1hcChwPT50aGlzLl9nZXRCdWNrZXRzKHAsZCxmKSksdGhpcy5fY2hhcnRUeXBlPVpwKGEsZix0aGlzLl9tYXhCdWNrZXRzRm9yQmFyQ2hhcnQpLGE9YS5tYXAocD0+cC5uYW1lKSwiVmFsdWUgbGlzdCBsZW5ndGgiPT09Znx8IkZlYXR1cmUgbGlzdCBsZW5ndGgiPT09Znx8IlF1YW50aWxlcyI9PT1mP3RoaXMuX3JlbmRlclF1YW50aWxlQ2hhcnQoZyxhLGMpOnRoaXMuX2NoYXJ0VHlwZT09PVhwLkhJU1RPR1JBTT90aGlzLl9yZW5kZXJIaXN0b2dyYW1DaGFydChnLGEsYyxrKTp0aGlzLl9jaGFydFR5cGU9PT1YcC5DVU1ESVNUX0NIQVJUP3RoaXMuX3JlbmRlckNkZkNoYXJ0KGcsYSxjKTp0aGlzLl9yZW5kZXJCYXJDaGFydChnLGEsYyxrKSl9LF9yZW5kZXJIaXN0b2dyYW1DaGFydChhLGMsZCxmKXtjb25zdCBnPVtdLGw9bmV3IFBsb3R0YWJsZS5QbG90cy5SZWN0YW5nbGU7bGV0IGs9SW5maW5pdHksbT0tSW5maW5pdHksCnA9MDtmJiYoYT1vcShhKSk7YS5mb3JFYWNoKCh2LEEpPT57di5mb3JFYWNoKHk9Pntjb25zdCB4PXpwKHkuZ2V0TG93VmFsdWUoKSksQz16cCh5LmdldEhpZ2hWYWx1ZSgpKTt5PXpwKHkuZ2V0U2FtcGxlQ291bnQoKSk7eDxrJiYoaz14KTtDPm0mJihtPUMpO3k+cCYmKHA9eSk7aXNGaW5pdGUoeCkmJmlzRmluaXRlKEMpJiZnLnB1c2goQy14KX0pO2wuYWRkRGF0YXNldChuZXcgUGxvdHRhYmxlLkRhdGFzZXQodix7bmFtZTpjW0FdfSkpfSk7bGV0IHE9MDxnLmxlbmd0aD9nLnJlZHVjZShmdW5jdGlvbih2LEEpe3JldHVybiB2K0F9KS9nLmxlbmd0aDowOzA9PT1xJiYocT0xKTtmPVtdO2lzRmluaXRlKGspJiYoZi5wdXNoKGspLGlzRmluaXRlKG0pJiZmLnB1c2gobSkpO2E9bmV3IFBsb3R0YWJsZS5TY2FsZXMuTGluZWFyOzA8Zi5sZW5ndGgmJmEuZG9tYWluKGYpO2Y9dGhpcy5fZ2V0U2NhbGUoZCkuZG9tYWluKFswXSk7Y29uc3Qgcj1uZXcgUGxvdHRhYmxlLkF4ZXMuTnVtZXJpYyhhLAoiYm90dG9tIiksdD1uZXcgUGxvdHRhYmxlLkF4ZXMuTnVtZXJpYyhmLCJsZWZ0Iik7dC5mb3JtYXR0ZXIodGhpcy5fY2hhcnRBeGlzU2NhbGVGb3JtYXR0ZXIoKSk7ci5mb3JtYXR0ZXIodGhpcy5fY2hhcnRBeGlzU2NhbGVGb3JtYXR0ZXIoKSk7bC54KHY9PntsZXQgQT16cCh2LmdldExvd1ZhbHVlKCkpO2lmKC1JbmZpbml0eT09PUF8fEE9PT12LmdldEhpZ2hWYWx1ZSgpKXY9enAodi5nZXRIaWdoVmFsdWUoKSksaXNGaW5pdGUodik/QT12LXE6KEE9MCwtSW5maW5pdHk9PT12JiYoQS09cSkpO3JldHVybiBBfSxhKS54Mih2PT57bGV0IEE9enAodi5nZXRIaWdoVmFsdWUoKSk7aWYoSW5maW5pdHk9PT1BfHxBPT09di5nZXRMb3dWYWx1ZSgpKXY9enAodi5nZXRMb3dWYWx1ZSgpKSxpc0Zpbml0ZSh2KT9BPXYrcTooQT0wLEluZmluaXR5PT09diYmKEErPXEpKTtyZXR1cm4gQX0pLnkoKCk9PjAsZikueTIodj0+dGhpcy5fZ2V0Q291bnRXaXRoRmxvb3IodixwLGQpKTtsLmF0dHIoImZpbGwiLAoodixBLHkpPT55Lm1ldGFkYXRhKCkubmFtZSx0aGlzLmRhdGFNb2RlbC5nZXRDb2xvclNjYWxlKCkpLmF0dHIoIm9wYWNpdHkiLHRoaXMuX2NoYXJ0QWxwaGEpO3RoaXMuX3JlbmRlckNoYXJ0KGwscix0LG51bGwsbnVsbCx2PT5sLmVudGl0aWVzQXQodiksdj0+dHAoenAodi5nZXRMb3dWYWx1ZSgpKSwyKS50b0xvY2FsZVN0cmluZygpKyItIit0cCh6cCh2LmdldEhpZ2hWYWx1ZSgpKSwyKS50b0xvY2FsZVN0cmluZygpKyI6ICIrenAodi5nZXRTYW1wbGVDb3VudCgpKS50b0xvY2FsZVN0cmluZygpLHY9Pm5ldyBxcCh0aGlzLmZlYXR1cmUsdm9pZCAwLHpwKHYuZ2V0TG93VmFsdWUoKSksenAodi5nZXRIaWdoVmFsdWUoKSkpLHY9PnYuYXBwZW5kKCJyZWN0IikuYXR0cigic3Ryb2tlIiwiYmxhY2siKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoInN0cm9rZS13aWR0aCIsIjFweCIpLCh2LEEpPT52LmF0dHIoIngiLEEucG9zaXRpb24ueC1BLnNlbGVjdGlvbi5fZ3JvdXBzWzBdWzBdLndpZHRoLmJhc2VWYWwudmFsdWUvCjIpLmF0dHIoInkiLEEucG9zaXRpb24ueS1BLnNlbGVjdGlvbi5fZ3JvdXBzWzBdWzBdLmhlaWdodC5iYXNlVmFsLnZhbHVlLzIpLmF0dHIoIndpZHRoIixBLnNlbGVjdGlvbi5fZ3JvdXBzWzBdWzBdLndpZHRoLmJhc2VWYWwudmFsdWUpLmF0dHIoImhlaWdodCIsQS5zZWxlY3Rpb24uX2dyb3Vwc1swXVswXS5oZWlnaHQuYmFzZVZhbC52YWx1ZSkpfSxfcmVuZGVyUXVhbnRpbGVDaGFydChhLGMsZCl7Y29uc3QgZj1uZXcgUGxvdHRhYmxlLlBsb3RzLkxpbmUsZz1uZXcgUGxvdHRhYmxlLlBsb3RzLlNjYXR0ZXI7bGV0IGw9SW5maW5pdHksaz0tSW5maW5pdHk7YS5mb3JFYWNoKChxLHIpPT57Y29uc3QgdD1bXSx2PXEubGVuZ3RoO3EuZm9yRWFjaCgoQSx5KT0+e3ZhciB4PXpwKEEuZ2V0TG93VmFsdWUoKSk7Y29uc3QgQz16cChBLmdldEhpZ2hWYWx1ZSgpKTt4PGwmJihsPXgpO0M+ayYmKGs9Qyk7eD1uZXcgSG47eC5idWNrZXQ9QTt4LmRhdGFzZXRJbmRleD1yO3gucXVhbnRpbGU9MTAwKgp5L3Y7dC5wdXNoKHgpfSk7aWYoMDxxLmxlbmd0aCl7Y29uc3QgQT1uZXcgSGo7QS5zZXRMb3dWYWx1ZShxW3EubGVuZ3RoLTFdLmdldEhpZ2hWYWx1ZSgpKTtBLnNldEhpZ2hWYWx1ZShxW3EubGVuZ3RoLTFdLmdldEhpZ2hWYWx1ZSgpKTtBLnNldFNhbXBsZUNvdW50KHFbcS5sZW5ndGgtMV0uZ2V0U2FtcGxlQ291bnQoKSk7cT1uZXcgSG47cS5idWNrZXQ9QTtxLmRhdGFzZXRJbmRleD1yO3EucXVhbnRpbGU9MTAwO3QucHVzaChxKX1mLmFkZERhdGFzZXQobmV3IFBsb3R0YWJsZS5EYXRhc2V0KHQse25hbWU6Y1tyXX0pKTtnLmFkZERhdGFzZXQobmV3IFBsb3R0YWJsZS5EYXRhc2V0KHQse25hbWU6Y1tyXX0pKX0pO2NvbnN0IG09aXNGaW5pdGUobCkmJmlzRmluaXRlKGspP2s9PT1sPzE6KGstbCkvMTA6MDt2YXIgcD1bXTtpc0Zpbml0ZShsKSYmKHAucHVzaChsLW0pLGlzRmluaXRlKGspJiZwLnB1c2goayttKSk7ZD10aGlzLl9nZXRTY2FsZShkKTswPHAubGVuZ3RoJiZkLmRvbWFpbihwKTsKcD10aGlzLl9nZXRTY2FsZSghMSkuZG9tYWluKFstYS5sZW5ndGgrLjUsMV0pO2E9bmV3IFBsb3R0YWJsZS5BeGVzLk51bWVyaWMoZCwiYm90dG9tIik7YS5mb3JtYXR0ZXIodGhpcy5fY2hhcnRBeGlzU2NhbGVGb3JtYXR0ZXIoKSk7Zi54KHE9PnpwKHEuYnVja2V0LmdldExvd1ZhbHVlKCkpLGQpLnkocT0+LTEqcS5kYXRhc2V0SW5kZXgscCk7Zy54KHE9PnpwKHEuYnVja2V0LmdldExvd1ZhbHVlKCkpLGQpLnkocT0+LXEuZGF0YXNldEluZGV4LHApLnNpemUocT0+NTA9PT1xLnF1YW50aWxlPzE1OjgpLnN5bWJvbCgoKT0+UGxvdHRhYmxlLlN5bWJvbEZhY3Rvcmllcy5jcm9zcygpKTtmLmF0dHIoInN0cm9rZSIsImdyYXkiKS5hdHRyKCJvcGFjaXR5Iix0aGlzLl9jaGFydEFscGhhKTtnLmF0dHIoImZpbGwiLChxLHIsdCk9PnQubWV0YWRhdGEoKS5uYW1lLHRoaXMuZGF0YU1vZGVsLmdldENvbG9yU2NhbGUoKSkuYXR0cigib3BhY2l0eSIsdGhpcy5fY2hhcnRBbHBoYSk7cD1uZXcgUGxvdHRhYmxlLkNvbXBvbmVudHMuR3JvdXAoW2YsCmddKTt0aGlzLl9yZW5kZXJDaGFydChwLGEsbnVsbCxudWxsLG51bGwscT0+Zy5lbnRpdGllc0F0KHEpLHE9PnEucXVhbnRpbGUrIiU6ICIrdHAoenAocS5idWNrZXQuZ2V0TG93VmFsdWUoKSksMikudG9Mb2NhbGVTdHJpbmcoKSxxPT5uZXcgcXAodGhpcy5mZWF0dXJlLHZvaWQgMCx6cChxLmJ1Y2tldC5nZXRMb3dWYWx1ZSgpKSx6cChxLmJ1Y2tldC5nZXRIaWdoVmFsdWUoKSkpLHE9PnEuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJyIiwzKS5hdHRyKCJzdHJva2UiLCJibGFjayIpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigic3Ryb2tlLXdpZHRoIiwiMXB4IiksKHEscik9PnEuYXR0cigiY3giLHIucG9zaXRpb24ueCkuYXR0cigiY3kiLHIucG9zaXRpb24ueSkpfSxfcmVuZGVyQmFyQ2hhcnQoYSxjLGQsZil7Y29uc3QgZz13cChhKSxsPW5ldyBQbG90dGFibGUuU2NhbGVzLkxpbmVhcjt2YXIgaz1uZXcgUGxvdHRhYmxlLlNjYWxlcy5DYXRlZ29yeTtjb25zdCBtPXRoaXMuX2dldFNjYWxlKGQpOwprLmRvbWFpbihnKTtrPW5ldyBQbG90dGFibGUuQXhlcy5DYXRlZ29yeShrLCJib3R0b20iKTtjb25zdCBwPW5ldyBQbG90dGFibGUuQXhlcy5OdW1lcmljKG0sImxlZnQiKTtwLmZvcm1hdHRlcih0aGlzLl9jaGFydEF4aXNTY2FsZUZvcm1hdHRlcigpKTtmJiYoYT1vcShhKSk7bGV0IHE9MDtmPWEubWFwKCh0LHYpPT57dC5mb3JFYWNoKHk9Pnt5PXpwKHkuZ2V0U2FtcGxlQ291bnQoKSk7eT5xJiYocT15KX0pO2NvbnN0IEE9bmV3IFRwO0EubmFtZT1jW3ZdO0EucmF3QnVja2V0cz10O3JldHVybiBBfSk7dGhpcy5fdGFibGVEYXRhPVdwKGYsZyk7Y29uc3Qgcj1uZXcgUGxvdHRhYmxlLlBsb3RzLkJhcjthLmZvckVhY2goKHQsdik9PnIuYWRkRGF0YXNldChuZXcgUGxvdHRhYmxlLkRhdGFzZXQodCx7bmFtZTpjW3ZdfSkpKTtyLngodD0+Zy5pbmRleE9mKHhwKHQuZ2V0TGFiZWwoKSkpLGwpLnkodD0+dGhpcy5fZ2V0Q291bnRXaXRoRmxvb3IodCxxLGQpLG0pO3IuYXR0cigiZmlsbCIsCih0LHYsQSk9PkEubWV0YWRhdGEoKS5uYW1lLHRoaXMuZGF0YU1vZGVsLmdldENvbG9yU2NhbGUoKSkuYXR0cigib3BhY2l0eSIsdGhpcy5fY2hhcnRBbHBoYSk7dGhpcy5fcmVuZGVyQ2hhcnQocixrLHAsbnVsbCxudWxsLHQ9PnIuZW50aXRpZXNBdCh0KSx0PT54cCh0LmdldExhYmVsKCkpKyI6ICIrenAodC5nZXRTYW1wbGVDb3VudCgpKS50b0xvY2FsZVN0cmluZygpLHQ9Pm5ldyBxcCh0aGlzLmZlYXR1cmUsdC5nZXRMYWJlbCgpKSx0PT50LmFwcGVuZCgicmVjdCIpLmF0dHIoInN0cm9rZSIsImJsYWNrIikuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJzdHJva2Utd2lkdGgiLCIxcHgiKSwodCx2KT0+dC5hdHRyKCJ4Iix2LnBvc2l0aW9uLngtdi5zZWxlY3Rpb24uX2dyb3Vwc1swXVswXS53aWR0aC5iYXNlVmFsLnZhbHVlLzIpLmF0dHIoInkiLHYucG9zaXRpb24ueSkuYXR0cigid2lkdGgiLHYuc2VsZWN0aW9uLl9ncm91cHNbMF1bMF0ud2lkdGguYmFzZVZhbC52YWx1ZSkuYXR0cigiaGVpZ2h0IiwKdi5zZWxlY3Rpb24uX2dyb3Vwc1swXVswXS5oZWlnaHQuYmFzZVZhbC52YWx1ZSkpfSxfcmVuZGVyQ2RmQ2hhcnQoYSxjLGQpe2NvbnN0IGY9Yy5tYXAocj0+e3I9dGhpcy5kYXRhTW9kZWwuZ2V0RmVhdHVyZUNvbW1vblN0YXRzKHRoaXMuZmVhdHVyZSxyKTtyZXR1cm4gbnVsbCE9cj9yLmdldE51bU5vbk1pc3NpbmcoKSpyLmdldEF2Z051bVZhbHVlcygpOjB9KSxnPXdwKGEpLGw9e307Zy5mb3JFYWNoKChyLHQpPT57bFtyXT10fSk7Y29uc3Qgaz0obmV3IFBsb3R0YWJsZS5TY2FsZXMuTGluZWFyKS5kb21haW4oWzBdKTtkPXRoaXMuX2dldFNjYWxlKGQpLmRvbWFpbihbMF0pO2NvbnN0IG09bmV3IFBsb3R0YWJsZS5BeGVzLk51bWVyaWMoaywiYm90dG9tIikscD1uZXcgUGxvdHRhYmxlLkF4ZXMuTnVtZXJpYyhkLCJsZWZ0IikscT1uZXcgUGxvdHRhYmxlLlBsb3RzLkxpbmU7YT1hLm1hcCgocix0KT0+e2NvbnN0IHY9W10sQT1bXSx5PVtdO2xldCB4PS0xO3IuZm9yRWFjaChDPT57Qz0KQy5jbG9uZU1lc3NhZ2UoKTt5LnB1c2goQyl9KTswPHQmJnkuc29ydCgoQyxGKT0+bFt4cChDLmdldExhYmVsKCkpXS1sW3hwKEYuZ2V0TGFiZWwoKSldKTt5LmZvckVhY2goKEMsRik9Pntjb25zdCBEPWxbeHAoQy5nZXRMYWJlbCgpKV07Zm9yKHZhciBCPXgrMTtCPEQ7QisrKXt2YXIgRz1uZXcgS2o7Ry5zZXRMYWJlbChnW0JdKTtHLnNldExvd1JhbmsoQik7Ry5zZXRIaWdoUmFuayhCKTswPT09di5sZW5ndGg/Ry5zZXRTYW1wbGVDb3VudCgwKTpHLnNldFNhbXBsZUNvdW50KHZbdi5sZW5ndGgtMV0uZ2V0U2FtcGxlQ291bnQoKSk7di5wdXNoKEcpO0c9bmV3IEtqO0cuc2V0TGFiZWwoZ1tCXSk7Ry5zZXRMb3dSYW5rKEIpO0cuc2V0SGlnaFJhbmsoQik7Ry5zZXRTYW1wbGVDb3VudCgwKTtBLnB1c2goRyl9eD1EO0I9Qy5jbG9uZSgpO0EucHVzaChCKTswPT09Rj9DLnNldFNhbXBsZUNvdW50KHpwKEMuZ2V0U2FtcGxlQ291bnQoKSkvZlt0XSk6KEY9MDxEP0QtMTpGLTEsQy5zZXRTYW1wbGVDb3VudCh6cChDLmdldFNhbXBsZUNvdW50KCkpLwpmW3RdK3pwKHZbRl0uZ2V0U2FtcGxlQ291bnQoKSkpKTtDLnNldExvd1JhbmsoRCk7Qy5zZXRIaWdoUmFuayhEKTt2LnB1c2goQyl9KTtyPW5ldyBUcDtyLm5hbWU9Y1t0XTtyLnBlcmNCdWNrZXRzPXY7ci5yYXdCdWNrZXRzPUE7cmV0dXJuIHJ9KTt0aGlzLl90YWJsZURhdGE9VnAoYSk7Zm9yKGNvbnN0IHIgb2YgYSlxLmFkZERhdGFzZXQobmV3IFBsb3R0YWJsZS5EYXRhc2V0KHIucGVyY0J1Y2tldHMse25hbWU6ci5uYW1lfSkpO3EueChyPT56cChyLmdldExvd1JhbmsoKSksaykueShyPT56cChyLmdldFNhbXBsZUNvdW50KCkpLGQpO3EuYXR0cigic3Ryb2tlIiwocix0LHYpPT52Lm1ldGFkYXRhKCkubmFtZSx0aGlzLmRhdGFNb2RlbC5nZXRDb2xvclNjYWxlKCkpLmF0dHIoIm9wYWNpdHkiLHRoaXMuX2NoYXJ0QWxwaGEpO3RoaXMuX3JlbmRlckNoYXJ0KHEsbSxwLG51bGwsbnVsbCxyPT5xLmVudGl0aWVzQXQocikscj0+eHAoci5nZXRMYWJlbCgpKSsiOiAiK3RwKHpwKHIuZ2V0U2FtcGxlQ291bnQoKSksCjQpLnRvTG9jYWxlU3RyaW5nKCkscj0+bmV3IHFwKHRoaXMuZmVhdHVyZSxyLmdldExhYmVsKCkpLHI9PnIuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJyIiwzKS5hdHRyKCJzdHJva2UiLCJibGFjayIpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigic3Ryb2tlLXdpZHRoIiwiMXB4IiksKHIsdCk9PnIuYXR0cigiY3giLHQucG9zaXRpb24ueCkuYXR0cigiY3kiLHQucG9zaXRpb24ueSkpfSxfcmVuZGVyQ2hhcnQoYSxjLGQsZixnLGwsayxtLHAscSl7aWYoIXRoaXMuX3Nob3dUYWJsZSl7dmFyIHI9bmV3IFBsb3R0YWJsZS5Db21wb25lbnRzLlRhYmxlKFtbZyxkLGFdLFtudWxsLG51bGwsbnVsbF1dKSx0PW5ldyBQbG90dGFibGUuQ29tcG9uZW50cy5UYWJsZShbW251bGwsbnVsbF0sW251bGwsY11dKTtQbG90dGFibGUuUmVuZGVyQ29udHJvbGxlci5yZW5kZXJQb2xpY3koKTt2YXIgdj1kMy5zZWxlY3QodGhpcy4kLmNoYXJ0KSxBPWQzLnNlbGVjdCh0aGlzLiQueGF4aXMpLHk9ZDMuc2VsZWN0KHRoaXMuJC50b29sdGlwKTsKdGhpcy5hc3luYygoKT0+e3Yuc2VsZWN0QWxsKCIuY29tcG9uZW50IikucmVtb3ZlKCk7QS5zZWxlY3RBbGwoIi5jb21wb25lbnQiKS5yZW1vdmUoKTtyLnJlbmRlclRvKHRoaXMuJC5jaGFydCk7dGhpcy5fc2VsZWN0aW9uRWxlbT1wKGEuZm9yZWdyb3VuZCgpKTt0aGlzLl91cGRhdGVTZWxlY3Rpb25WaXNpYmlsaXR5KHRoaXMuc2VsZWN0aW9uKTt2Lm9uKCJtb3VzZWVudGVyIiwoKT0+e3RoaXMuX29uUG9pbnRlcj1uZXcgcGxvdHRhYmxlX2hlbHBlcnMuUG9pbnRlckludGVyYWN0aW9uO3RoaXMuX29uUG9pbnRlckVudGVyRnVuY3Rpb249eD0+e3g9bCh4KTswPHgubGVuZ3RoJiYoeD14Lm1hcChDPT5udWxsPT1DLmRhdGFzZXQubWV0YWRhdGEoKS5uYW1lfHwxPT09dGhpcy5kYXRhTW9kZWwuZ2V0RGF0YXNldE5hbWVzKCkubGVuZ3RoP2soQy5kYXR1bSk6Qy5kYXRhc2V0Lm1ldGFkYXRhKCkubmFtZSsiOiAiK2soQy5kYXR1bSkpLmpvaW4oIlxuIikseS50ZXh0KHgpLHkuc3R5bGUoIm9wYWNpdHkiLAoiMSIpKX07dGhpcy5fb25Qb2ludGVyLm9uUG9pbnRlck1vdmUodGhpcy5fb25Qb2ludGVyRW50ZXJGdW5jdGlvbik7dGhpcy5fb25Qb2ludGVyRXhpdEZ1bmN0aW9uPWZ1bmN0aW9uKCl7eS5zdHlsZSgib3BhY2l0eSIsIjAiKX07dGhpcy5fb25Qb2ludGVyLm9uUG9pbnRlckV4aXQodGhpcy5fb25Qb2ludGVyRXhpdEZ1bmN0aW9uKTt0aGlzLl9vblBvaW50ZXIuYXR0YWNoVG8oYSk7aWYoIlZhbHVlIGxpc3QgbGVuZ3RoIiE9PXRoaXMuY2hhcnRTZWxlY3Rpb24pe3RoaXMuX29uQ2xpY2s9bmV3IFBsb3R0YWJsZS5JbnRlcmFjdGlvbnMuQ2xpY2s7Y29uc3QgeD10aGlzO3RoaXMuX29uQ2xpY2tGdW5jdGlvbj1DPT57Qz1sKEMpOzA8Qy5sZW5ndGgmJihxKHguX3NlbGVjdGlvbkVsZW0sQ1swXSksQz1tKENbMF0uZGF0dW0pLHguX3NldFNlbGVjdGlvbihDKSl9O3RoaXMuX29uQ2xpY2sub25DbGljayh0aGlzLl9vbkNsaWNrRnVuY3Rpb24pO3RoaXMuX29uQ2xpY2suYXR0YWNoVG8oYSl9fSkub24oIm1vdXNlbGVhdmUiLAooKT0+e3RoaXMuX29uUG9pbnRlci5kZXRhY2hGcm9tKCk7dGhpcy5fb25DbGljay5kZXRhY2hGcm9tKCl9KTtudWxsIT1kJiZ0LmNvbHVtblBhZGRpbmcoci5jb21wb25lbnRBdCgxKS53aWR0aCgpKyhyLmNvbXBvbmVudEF0KDApP3IuY29tcG9uZW50QXQoMCkud2lkdGgoKTowKSk7dC5yZW5kZXJUbyh0aGlzLiQueGF4aXMpfSl9fSxfc2V0U2VsZWN0aW9uKGEpe2EuZXF1YWxzKHRoaXMuc2VsZWN0aW9uKSYmYS5jbGVhcigpO3RoaXMuc2VsZWN0aW9uPWE7dGhpcy5maXJlKCJmZWF0dXJlLXNlbGVjdCIse3NlbGVjdGlvbjphfSl9LF9nZXRCdWNrZXRzKGEsYyxkKXtyZXR1cm4gdXAoYSxjLGQpfSxfZ2V0U2NhbGUoYSl7cmV0dXJuIGE/bmV3IFBsb3R0YWJsZS5TY2FsZXMuTW9kaWZpZWRMb2c6bmV3IFBsb3R0YWJsZS5TY2FsZXMuTGluZWFyfSxfY2hhcnRBeGlzU2NhbGVGb3JtYXR0ZXIoKXtjb25zdCBhPVBsb3R0YWJsZS5Gb3JtYXR0ZXJzLnNob3J0U2NhbGUoKTtyZXR1cm4gYz0+CjFFMz5NYXRoLmFicyhjKT9TdHJpbmcoYyk6YShjKX0sX2dldENvdW50V2l0aEZsb29yKGEsYyxkKXthPXpwKGEuZ2V0U2FtcGxlQ291bnQoKSk7IWQmJjA8YSYmYS9jPHRoaXMuX21pbkJhckhlaWdodFJhdGlvJiYoYT1jKnRoaXMuX21pbkJhckhlaWdodFJhdGlvKTtyZXR1cm4gYX0sX3VwZGF0ZVNlbGVjdGlvblZpc2liaWxpdHkoYSl7dGhpcy5fc2VsZWN0aW9uRWxlbSYmdGhpcy5fc2VsZWN0aW9uRWxlbS5zdHlsZSgiZGlzcGxheSIsbnVsbD09YXx8YS5uYW1lIT09dGhpcy5mZWF0dXJlPyJub25lIjoiaW5saW5lIil9LF90b2dnbGVTaG93VGFibGUoKXt0aGlzLl9zaG93VGFibGU9IXRoaXMuX3Nob3dUYWJsZX0sX2dldENoYXJ0Q2xhc3MoYSl7cmV0dXJuIGE/ImhpZGVjaGFydCI6InNob3djaGFydCJ9LF9nZXRTaG93VGFibGVCdXR0b25UZXh0KGEpe3JldHVybiBhPyJzaG93IGNoYXJ0Ijoic2hvdyByYXcgZGF0YSJ9LF9nZXRDaGFydFN2Z0NsYXNzKGEpe3JldHVybiBhPyJjaGFydC1iaWciOgoiY2hhcnQtc21hbGwifSxfZ2V0WEF4aXNTdmdDbGFzcyhhKXtyZXR1cm4gYT8ieGF4aXMtYmlnIjoieGF4aXMtc21hbGwifSxfZ2V0VGFibGVEYXRhQ2xhc3MoYSl7cmV0dXJuIGE/ImRhdGEtbGlzdC1iaWciOiJkYXRhLWxpc3Qtc21hbGwifSxfcm93Q2xpY2soYSl7dGhpcy5fc2V0U2VsZWN0aW9uKG5ldyBxcCh0aGlzLmZlYXR1cmUsYS5jdXJyZW50VGFyZ2V0LmRhdGFWYWx1ZSkpfSxfZ2V0RW50cnlSb3dWYWx1ZShhKXtyZXR1cm4gYS52YWx1ZX0sX2dldEVudHJ5Um93Q2xhc3MoYSxjKXtsZXQgZD0iZGlhbG9nLXJvdyI7bnVsbCE9YyYmYy5uYW1lPT09dGhpcy5mZWF0dXJlJiZjLnN0cmluZ1ZhbHVlPT09YS52YWx1ZSYmKGQrPSIgc2VsZWN0ZWQiKTtyZXR1cm4gZH0sX2dldENvdW50Q2VsbENsYXNzKGEpe3JldHVybiJkYWlsb2ctcm93LWVudHJ5IGNvdW50LWNlbGwiKyhhPyIgd2VpZ2h0ZWQtY2VsbCI6IiIpfX0pOwo8L3NjcmlwdD4KCgo8ZG9tLW1vZHVsZSBpZD0iZmFjZXRzLW92ZXJ2aWV3LXRhYmxlIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIFtoaWRkZW5dIHsKICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICAgIH0KICAgICAgLmZlYXR1cmUtbmFtZSB7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBtYXgtd2lkdGg6IDQ4MHB4OwogICAgICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDsKICAgICAgICBtYXJnaW46IDAgMCA0cHggNHB4OwogICAgICB9CiAgICAgIC50YWJsZS1uYW1lIHsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIHdvcmQtd3JhcDpicmVhay13b3JkOwogICAgICAgIHBhZGRpbmc6IDRweCAwIDRweCA4cHg7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSg2MSwxNDAsMjA3LDAuMyk7CiAgICAgICAgYm9yZGVyOiBzb2xpZCAwLjVweCByZ2JhKDAsMCwwLDAuMSk7CiAgICAgIH0KICAgICAgLmZlYXR1cmUtaXJvbi1saXN0IHsKICAgICAgICBvdmVyZmxvdy14OiBoaWRkZW4gIWltcG9ydGFudDsKICAgICAgICBoZWlnaHQ6IDgwMHB4OwogICAgICB9CiAgICAgIC5jaGFydC1jb2x1bW4gewogICAgICAgIHdpZHRoOiAyODBweDsKICAgICAgICBtaW4td2lkdGg6IDI4MHB4OwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgfQogICAgICAuY2hhcnQtY29sdW1uLmhlYWRlci1jZWxsIHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDYxLDE0MCwyMDcsMC4xKTsKICAgICAgICBib3JkZXItdG9wOiBzb2xpZCAwLjVweCByZ2JhKDAsMCwwLDAuMSk7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogc29saWQgMC41cHggcmdiYSgwLDAsMCwwLjEpOwogICAgICAgIGJvcmRlci1yaWdodDogc29saWQgMC41cHggcmdiYSgwLDAsMCwwLjEpOwogICAgICAgIHBhZGRpbmctbGVmdDogOHB4OwogICAgICB9CiAgICAgIC5udW1lcmljLXJvdyB7CiAgICAgICAgbWluLWhlaWdodDogODBweDsKICAgICAgICBkaXNwbGF5OiB0YWJsZS1yb3c7CiAgICAgIH0KICAgICAgLmNhdGVnb3JpY2FsLXJvdyB7CiAgICAgICAgbWluLWhlaWdodDogOThweDsKICAgICAgICBkaXNwbGF5OiB0YWJsZS1yb3c7CiAgICAgIH0KICAgICAgLnRhYmxlLWNlbGwgewogICAgICAgIGRpc3BsYXk6IHRhYmxlLWNlbGw7CiAgICAgICAgdmVydGljYWwtYWxpZ246IHRvcDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMmVtOwogICAgICB9CiAgICAgIC5jaGFydC1jb2x1bW4udGFibGUtY2VsbCB7CiAgICAgICAgZGlzcGxheTogdGFibGUtY2VsbDsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wOwogICAgICAgIHBhZGRpbmc6IDEwcHggMCAwIDIwcHgKICAgICAgICBtYXJnaW4tcmlnaHQ6IDEwcHg7CiAgICAgIH0KICAgICAgLmhlYWRlci1jZWxsIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgbWluLWhlaWdodDogNjBweDsKICAgICAgfQogICAgICBwYXBlci1jaGVja2JveCB7CiAgICAgICAgLS1wYXBlci1jaGVja2JveC1zaXplOiAxMnB4OwogICAgICAgIC0tcGFwZXItY2hlY2tib3gtbGFiZWwtc3BhY2luZzogMnB4OwogICAgICB9CiAgICAgIC5jb250cm9sLWhvbGRlciB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQogICAgICAuY2hlY2tib3gtaG9sZGVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIHBhZGRpbmctYm90dG9tOiAycHg7CiAgICAgIH0KICAgICAgLmNoYXJ0LWNoZWNrYm94IHsKICAgICAgICBwYWRkaW5nLXJpZ2h0OiA4cHg7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICB9CiAgICAgICN3ZWlnaHRib3ggewogICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICAgICAgfQogICAgICBwYXBlci1kcm9wZG93bi1tZW51IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICB3aWR0aDogMTUwcHg7CiAgICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItbGFiZWwgLS1wYXBlci1pbnB1dC1jb250YWluZXItaW5wdXQ6IHsKICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICB9CiAgICAgIH0KICAgICAgLmhpZGRlbiB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQogICAgPC9zdHlsZT4KICAgIDxkaXYgY2xhc3MkPSJbW19nZXRUYWJsZVdyYXBwZXJDbGFzcyhmZWF0dXJlcyldXSI+CiAgICAgIDxkaXYgY2xhc3M9ImhlYWRlci1yb3ciPgogICAgICAgIDxkaXYgY2xhc3M9ImhlYWRlci1jZWxsIHRhYmxlLWNlbGwiPgogICAgICAgICAgPGRpdiBjbGFzcz0idGFibGUtbmFtZSI+W1tfZ2V0VGl0bGUobnVtZXJpYyldXSBGZWF0dXJlcyAoW1tfZ2V0RmVhdHVyZUNvdW50VGV4dChkYXRhTW9kZWwsIG51bWVyaWMsIGZlYXR1cmVzKV1dKQogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZmFjZXRzLW92ZXJ2aWV3LXJvdy1sZWdlbmQgbnVtZXJpYz0iW1tudW1lcmljXV0iIHNob3ctd2VpZ2h0ZWQ9IltbX3Nob3dXZWlnaHRlZF1dIiBoYXMtY3VzdG9tPSJbW19oYXNDdXN0b21TdGF0cyhkYXRhTW9kZWwpXV0iIGRhdGEtbW9kZWw9IltbZGF0YU1vZGVsXV0iPgogICAgICAgICAgPC9mYWNldHMtb3ZlcnZpZXctcm93LWxlZ2VuZD4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJ0YWJsZS1jZWxsIGNoYXJ0LWNvbHVtbiBoZWFkZXItY2VsbCI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJjb250cm9sLWhvbGRlciI+CiAgICAgICAgICAgIDxwYXBlci1kcm9wZG93bi1tZW51IGxhYmVsPSJDaGFydCB0byBzaG93Ij4KICAgICAgICAgICAgICA8cGFwZXItbGlzdGJveCBjbGFzcz0iZHJvcGRvd24tY29udGVudCIgc2VsZWN0ZWQ9Int7X2NoYXJ0U2VsZWN0aW9ufX0iIGF0dHItZm9yLXNlbGVjdGVkPSJ2YWx1ZSIgc2xvdD0iZHJvcGRvd24tY29udGVudCI+CiAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19jaGFydFNlbGVjdGlvblR5cGVzXV0iPgogICAgICAgICAgICAgICAgICA8cGFwZXItaXRlbSB2YWx1ZT0iW1tpdGVtXV0iPltbaXRlbV1dPC9wYXBlci1pdGVtPgogICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICA8L3BhcGVyLWxpc3Rib3g+CiAgICAgICAgICAgIDwvcGFwZXItZHJvcGRvd24tbWVudT4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2hlY2tib3gtaG9sZGVyIj4KICAgICAgICAgICAgICA8cGFwZXItY2hlY2tib3ggY2xhc3M9ImNoYXJ0LWNoZWNrYm94IiBpZD0ibG9nYm94IiBjaGVja2VkPSJ7e19sb2dTY2FsZX19Ij5sb2c8L3BhcGVyLWNoZWNrYm94PgogICAgICAgICAgICAgIDxwYXBlci1jaGVja2JveCBjbGFzcz0iY2hhcnQtY2hlY2tib3giIGlkPSJleHBhbmRib3giIGNoZWNrZWQ9Int7X2V4cGFuZENoYXJ0c319Ij5leHBhbmQ8L3BhcGVyLWNoZWNrYm94PgogICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaGFzV2VpZ2h0ZWRIaXN0b2dyYW0oZmVhdHVyZXMpXV0iPgogICAgICAgICAgICAgICAgPHBhcGVyLWNoZWNrYm94IGNsYXNzPSJjaGFydC1jaGVja2JveCIgaWQ9IndlaWdodGJveCIgY2hlY2tlZD0ie3tfc2hvd1dlaWdodGVkfX0iPndlaWdodGVkPC9wYXBlci1jaGVja2JveD4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaGFzTXVsdGlwbGVEYXRhc2V0cyhkYXRhTW9kZWwpXV0iPgogICAgICAgICAgICAgICAgPHBhcGVyLWNoZWNrYm94IGNsYXNzPSJjaGFydC1jaGVja2JveCIgaWQ9InBlcmNlbnRib3giIGNoZWNrZWQ9Int7X3Nob3dQZXJjZW50YWdlfX0iIGRpc2FibGVkPSJbW19jaGFydFNlbGVjdGlvbkhhc1F1YW50aWxlcyhfY2hhcnRTZWxlY3Rpb24pXV0iPnBlcmNlbnRhZ2VzPC9wYXBlci1jaGVja2JveD4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgPGlyb24tbGlzdCBpdGVtcz0iW1tmZWF0dXJlc11dIiBhcz0iZmVhdHVyZSIgY2xhc3M9ImZlYXR1cmUtaXJvbi1saXN0Ij4KICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICA8ZGl2IGNsYXNzJD0iW1tfZ2V0VGFibGVSb3dDbGFzcyhudW1lcmljKV1dIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idGFibGUtY2VsbCI+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmVhdHVyZS1uYW1lIj5bW19nZXRGZWF0dXJlTmFtZShmZWF0dXJlKV1dPC9kaXY+CiAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tfZ2V0RGF0YXNldHMoZGF0YU1vZGVsKV1dIiBhcz0iZGF0YXNldCIgaW5kZXgtYXM9ImRhdGFzZXRJbmRleCI+CiAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICA8ZmFjZXRzLW92ZXJ2aWV3LXJvdy1zdGF0cyBzdGF0cz0iW1tfZ2V0U3RhdHMoZGF0YU1vZGVsLCBkYXRhc2V0LCBmZWF0dXJlKV1dIiBjdXN0b20tc3RhdHM9IltbX2dldEFsbEN1c3RvbVN0YXRzKGRhdGFNb2RlbCwgZmVhdHVyZSldXSIgc2hvdy13ZWlnaHRlZD0iW1tfc2hvd1dlaWdodGVkXV0iIGhhcy1jdXN0b209IltbX2hhc0N1c3RvbVN0YXRzKGRhdGFNb2RlbCldXSIgZGF0YS1tb2RlbD0iW1tkYXRhTW9kZWxdXSIgZGF0YXNldC1pbmRleD0iW1tkYXRhc2V0SW5kZXhdXSIgY29tcGFyZS1tb2RlPSJbW2NvbXBhcmVNb2RlXV0iPgogICAgICAgICAgICAgICAgICA8L2ZhY2V0cy1vdmVydmlldy1yb3ctc3RhdHM+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcyQ9IltbX2dldENoYXJ0Q2xhc3MoX2V4cGFuZENoYXJ0cyldXSI+CiAgICAgICAgICAgICAgPGZhY2V0cy1vdmVydmlldy1jaGFydCBkYXRhPSJbW19nZXRDaGFydERhdGEoZGF0YU1vZGVsLCBmZWF0dXJlKV1dIiBkYXRhLW1vZGVsPSJbW2RhdGFNb2RlbF1dIiBmZWF0dXJlPSJbW19nZXRGZWF0dXJlTmFtZShmZWF0dXJlKV1dIiBzZWxlY3Rpb249Int7ZmVhdHVyZVNsaWNlU2VsZWN0aW9ufX0iIGxvZy1zY2FsZT0iW1tfbG9nU2NhbGVdXSIgc2hvdy13ZWlnaHRlZD0iW1tfc2hvd1dlaWdodGVkXV0iIHNob3ctcGVyY2VudGFnZT0iW1tfc2hvd1BlcmNlbnRhZ2VdXSIgY2hhcnQtc2VsZWN0aW9uPSJbW19jaGFydFNlbGVjdGlvbl1dIiBleHBhbmQtY2hhcnQ9IltbX2V4cGFuZENoYXJ0c11dIj4KICAgICAgICAgICAgICA8L2ZhY2V0cy1vdmVydmlldy1jaGFydD4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L2lyb24tbGlzdD4KICAgIDwvZGl2PgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT4KPHNjcmlwdD4vL35+V0VCUEFUSH5+L2ZhY2V0cy1vdmVydmlldy9jb21wb25lbnRzL2ZhY2V0cy1vdmVydmlldy10YWJsZS9mYWNldHMtb3ZlcnZpZXctdGFibGUuanMKUG9seW1lcih7aXM6ImZhY2V0cy1vdmVydmlldy10YWJsZSIscHJvcGVydGllczp7ZGF0YU1vZGVsOnt0eXBlOk9iamVjdCxvYnNlcnZlcjoiX2hhbmRsZVJlc2l6ZSJ9LGZlYXR1cmVzOnt0eXBlOkFycmF5LG9ic2VydmVyOiJfaGFuZGxlUmVzaXplIn0sZmVhdHVyZVNsaWNlU2VsZWN0aW9uOnt0eXBlOk9iamVjdCxub3RpZnk6ITB9LG51bWVyaWM6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sY29tcGFyZU1vZGU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sX2xvZ1NjYWxlOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LF9leHBhbmRDaGFydHM6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxvYnNlcnZlcjoiX2hhbmRsZVJlc2l6ZSJ9LF9zaG93V2VpZ2h0ZWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sX3Nob3dQZXJjZW50YWdlOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LF9jaGFydFNlbGVjdGlvbjp7dHlwZTpTdHJpbmcsdmFsdWU6IlN0YW5kYXJkIn0sX2VuYWJsZUxvZ1NjYWxlOnt0eXBlOkJvb2xlYW4sCnZhbHVlOiEwfSxfY2hhcnRTZWxlY3Rpb25UeXBlczp7dHlwZTpBcnJheSxjb21wdXRlZDoiX2NvbXB1dGVDaGFydFNlbGVjdGlvblR5cGVzKG51bWVyaWMsIGRhdGFNb2RlbCwgZmVhdHVyZXMpIn0sX21heEhlaWdodDp7dHlwZTpOdW1iZXIsdmFsdWU6ODAwLHJlYWRPbmx5OiEwfSxfZXhwYW5kZWRSb3dIZWlnaHQ6e3R5cGU6TnVtYmVyLHZhbHVlOjMzMCxyZWFkT25seTohMH0sX3Jvd0hlaWdodDp7dHlwZTpOdW1iZXIsdmFsdWU6MTAwLHJlYWRPbmx5OiEwfX0sX2hhbmRsZVJlc2l6ZSgpe2NvbnN0IGE9dGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoImlyb24tbGlzdCIpO2EmJnRoaXMuX2V4cGFuZGVkUm93SGVpZ2h0JiZ0aGlzLl9yb3dIZWlnaHQmJnRoaXMuX21heEhlaWdodCYmdGhpcy5mZWF0dXJlcyYmKGEuc3R5bGUuaGVpZ2h0PU1hdGgubWluKCh0aGlzLmZlYXR1cmVzP3RoaXMuZmVhdHVyZXMubGVuZ3RoOjApKih0aGlzLl9leHBhbmRDaGFydHM/dGhpcy5fZXhwYW5kZWRSb3dIZWlnaHQ6CnRoaXMuX3Jvd0hlaWdodCksdGhpcy5fbWF4SGVpZ2h0KSsicHgiLGEuZmlyZSgiaXJvbi1yZXNpemUiKSl9LF9jb21wdXRlQ2hhcnRTZWxlY3Rpb25UeXBlcyhhLGMsZCl7Y29uc3QgZj1bIlN0YW5kYXJkIl07YSYmZi5wdXNoKCJRdWFudGlsZXMiKTswIT09ZC5sZW5ndGgmJk5wKHRoaXMuX2dldENoYXJ0RGF0YShjLGRbMF0pKSYmZi5wdXNoKCJWYWx1ZSBsaXN0IGxlbmd0aCIpO2MuZG9lc0NvbnRhaW5GZWF0dXJlTGlzdExlbmd0aERhdGEoKSYmZi5wdXNoKCJGZWF0dXJlIGxpc3QgbGVuZ3RoIik7cmV0dXJuIGYuY29uY2F0KGMuZ2V0RXh0cmFIaXN0b2dyYW1OYW1lcyhkKSl9LGF0dGFjaGVkKCl7c2V0VGltZW91dCgoKT0+e3RoaXMuX2hhbmRsZVJlc2l6ZSgpfSwxRTMpfSxfY2hhcnRTZWxlY3Rpb25IYXNRdWFudGlsZXMoYSl7cmV0dXJuIFlwKGEpfSxfZ2V0VGl0bGUoYSl7cmV0dXJuIGE/Ik51bWVyaWMiOiJDYXRlZ29yaWNhbCJ9LF9nZXRGZWF0dXJlTmFtZShhKXtyZXR1cm4gYS5nZXROYW1lKCl9LApfaGFzQ3VzdG9tU3RhdHMoYSl7cmV0dXJuIG51bGw9PWE/ITE6YS5kb2VzQ29udGFpbkN1c3RvbVN0YXRzKCl9LF9oYXNNdWx0aXBsZURhdGFzZXRzKGEpe3JldHVybiBudWxsPT1hPyExOjE8YS5nZXREYXRhc2V0TmFtZXMoKS5sZW5ndGh9LF9nZXRBbGxDdXN0b21TdGF0cyhhLGMpe2NvbnN0IGQ9W10sZj17fTthLmdldERhdGFzZXRGZWF0dXJlU3RhdGlzdGljcygpLmdldERhdGFzZXRzTGlzdCgpLmZvckVhY2goZz0+e2NvbnN0IGw9YS5nZXRGZWF0dXJlSW5kZXgoZy5nZXROYW1lKCksYy5nZXROYW1lKCkpO251bGwhPWwmJihnPWcuZ2V0RmVhdHVyZXNMaXN0KClbbF0uZ2V0Q3VzdG9tU3RhdHNMaXN0KCkpJiZnLmZvckVhY2goaz0+e2Zbay5nZXROYW1lKCldfHwoZltrLmdldE5hbWUoKV09ITAsZC5wdXNoKGspKX0pfSk7cmV0dXJuIGR9LF9nZXREYXRhc2V0cyhhKXtyZXR1cm4gYT9hLmdldERhdGFzZXRGZWF0dXJlU3RhdGlzdGljcygpLmdldERhdGFzZXRzTGlzdCgpOm51bGx9LApfZ2V0U3RhdHMoYSxjLGQpe3JldHVybiBhJiZjJiZkP2EuZ2V0RmVhdHVyZShkLmdldE5hbWUoKSxjLmdldE5hbWUoKSk6bnVsbH0sX2dldENoYXJ0RGF0YShhLGMpe3JldHVybiBhJiZjP2EuZ2V0RGF0YXNldEhpc3RvZ3JhbXNGb3JGZWF0dXJlKGMuZ2V0TmFtZSgpKTpbXX0sX2dldEZlYXR1cmVDb3VudFRleHQoYSxjLGQpe2E9YT9hLmdldE51bVVuaXF1ZUZlYXR1cmVzQnlUeXBlKGMpOjA7cmV0dXJuIEVwKGQubGVuZ3RoLGEpfSxfaGFzV2VpZ2h0ZWRIaXN0b2dyYW0oYSl7cmV0dXJuIDA9PT1hLmxlbmd0aD8hMTpMcCh0aGlzLl9nZXRDaGFydERhdGEodGhpcy5kYXRhTW9kZWwsYVswXSkpfSxfZ2V0Q2hhcnRDbGFzcyhhKXtsZXQgYz0iY2hhcnQtY29sdW1uICI7YXx8KGMrPSJ0YWJsZS1jZWxsICIpO3JldHVybiBjfSxfZ2V0VGFibGVXcmFwcGVyQ2xhc3MoYSl7cmV0dXJuIGEmJjAhPT1hLmxlbmd0aD8iIjoiaGlkZGVuIn0sX2dldFRhYmxlUm93Q2xhc3MoYSl7cmV0dXJuIGE/CiJudW1lcmljLXJvdyI6ImNhdGVnb3JpY2FsLXJvdyJ9fSk7Cjwvc2NyaXB0PgoKCgoKCjxzY3JpcHQ+Ly9+fldFQlBBVEh+fi9pcm9uLXZhbGlkYXRvci1iZWhhdmlvci9pcm9uLXZhbGlkYXRvci1iZWhhdmlvci5odG1sLmpzClBvbHltZXIuSXJvblZhbGlkYXRvckJlaGF2aW9yPXtyZWFkeTpmdW5jdGlvbigpe25ldyBQb2x5bWVyLklyb25NZXRhKHt0eXBlOiJ2YWxpZGF0b3IiLGtleTp0aGlzLmlzfHx0aGlzLmNvbnN0cnVjdG9yLmlzLHZhbHVlOnRoaXN9KX0sdmFsaWRhdGU6ZnVuY3Rpb24oKXt9fTsKPC9zY3JpcHQ+CgoKPHNjcmlwdD4vL35+V0VCUEFUSH5+L2ZhY2V0cy1vdmVydmlldy9jb21wb25lbnRzL2ZhY2V0cy1vdmVydmlldy9mYWNldHMtb3ZlcnZpZXctZmlsdGVyLXZhbGlkYXRvci5odG1sLmpzClBvbHltZXIoe2lzOiJmYWNldHMtb3ZlcnZpZXctZmlsdGVyLXZhbGlkYXRvciIsYmVoYXZpb3JzOltQb2x5bWVyLklyb25WYWxpZGF0b3JCZWhhdmlvcl0sdmFsaWRhdGU6ZnVuY3Rpb24oYSl7dHJ5e3JldHVybiBuZXcgUmVnRXhwKGEpLCEwfWNhdGNoKGMpe3JldHVybiExfX19KTsKPC9zY3JpcHQ+CgoKPGRvbS1tb2R1bGUgaWQ9ImZhY2V0cy1vdmVydmlldyI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZQogICAgICAgIGZvbnQtc2l6ZTogMTBwdDsKICAgICAgfQogICAgICAuY29udHJvbHMgewogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjM0LDIzNCwyMzQsMC4yKTsKICAgICAgICBib3JkZXItYm90dG9tOiBzb2xpZCAwLjVweCByZ2JhKDAsMCwwLDAuMik7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBoZWlnaHQ6IDYwcHg7CiAgICAgICAgcGFkZGluZy1sZWZ0OiAyMHB4OwoKICAgICAgfQogICAgICAuZmVhdHVyZS1jaGVja2JveGVzIHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDIzNCwyMzQsMjM0LDAuMik7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogc29saWQgMC41cHggcmdiYSgwLDAsMCwwLjIpOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICAgIHBhZGRpbmc6ICA4cHggMCA4cHggMjBweDsKICAgICAgfQogICAgICAuZmVhdHVyZS1jaGVja2JveCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBwYWRkaW5nOiAwIDAgMCAxNnB4OwogICAgICB9CiAgICAgIHBhcGVyLWNoZWNrYm94IHsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgIH0KICAgICAgLmlucHV0LWNvbnRyb2wgewogICAgICAgIC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWxhYmVsIC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWlucHV0OiB7CiAgICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgfTsKICAgICAgfQogICAgICAuZmVhdHVyZXMtdGV4dCB7CiAgICAgICAgbGluZS1oZWlnaHQ6IDE7CiAgICAgICAgcGFkZGluZzogMXB4IDAgMCAwOwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgfQogICAgICAubGVmdC1kcm9wZG93biB7CiAgICAgICAgcGFkZGluZzogMCAxMHB4IDAgMDsKICAgICAgfQogICAgICAubWlkZGxlLWNoZWNrYm94IHsKICAgICAgICBtYXJnaW4tdG9wOiAzMHB4OwogICAgICAgIHBhZGRpbmc6IDAgMTBweDsKICAgICAgfQogICAgICAucmlnaHQtaW5wdXQgewogICAgICAgIHdpZHRoOiAzMDBweDsKICAgICAgICBwYWRkaW5nOiAwIDEwcHg7CiAgICAgIH0KICAgICAgLmZlYXR1cmUtaXJvbi1saXN0IHsKICAgICAgICBtYXgtaGVpZ2h0OiA4MDBweDsKICAgICAgICBvdmVyZmxvdzogYXV0bzsKICAgICAgfQogICAgICAuZmVhdHVyZS1jb2x1bW4gewogICAgICAgIHdpZHRoOiAyMDBweDsKICAgICAgICBtYXgtd2lkdGg6IDIwMHB4OwogICAgICAgIG92ZXJmbG93LXdyYXA6IGJyZWFrLXdvcmQ7CiAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsKICAgICAgfQogICAgICAubGVnZW5kLWNvbHVtbiB7CiAgICAgICAgd2lkdGg6IDEyMHB4OwogICAgICB9CiAgICAgIC5zdGF0cy1jb2x1bW4gewogICAgICAgIHdpZHRoOiAxNTBweDsKICAgICAgICBtYXgtd2lkdGg6IDE1MHB4OwogICAgICAgIG92ZXJmbG93LXdyYXA6IGJyZWFrLXdvcmQ7CiAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7CiAgICAgIH0KICAgICAgLmNoYXJ0LWNvbHVtbiB7CiAgICAgICAgd2lkdGg6IDU4MHB4OwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgfQogICAgICAudGFibGUtcm93IHsKICAgICAgICBkaXNwbGF5OiB0YWJsZS1yb3c7CiAgICAgIH0KICAgICAgLnRhYmxlLWNlbGwgewogICAgICAgIGRpc3BsYXk6IHRhYmxlLWNlbGw7CiAgICAgICAgdmVydGljYWwtYWxpZ246IHRvcDsKICAgICAgICBwYWRkaW5nOiAxMHB4IDVweCAwCiAgICAgIH0KICAgICAgLmNoYXJ0LWNvbHVtbi50YWJsZS1jZWxsIHsKICAgICAgICBkaXNwbGF5OiB0YWJsZS1jZWxsOwogICAgICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7CiAgICAgICAgcGFkZGluZzogMTBweCAwIDAgMjBweAogICAgICB9CiAgICAgIC5oZWFkZXItcm93IHsKICAgICAgICBjbGVhcjogYm90aDsKICAgICAgfQogICAgICAuaGVhZGVyLXJvdyA+IC50YWJsZS1jZWxsIHsKICAgICAgICBmb250LXNpemU6IDE0cHQ7CiAgICAgICAgcGFkZGluZzogMCA1cHggMDsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgYmxhY2s7CiAgICAgIH0KICAgICAgLnN0YXRzLWhlYWRlci10ZXh0IHsKICAgICAgICB0ZXh0LWFsaWduOiByaWdodDsKICAgICAgfQogICAgICAuY2hhcnQtaGVhZGVyLXRleHQgewogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgfQogICAgICAudGFibGUtaG9sZGVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtd3JhcDogd3JhcDsKICAgICAgICBvdmVyZmxvdy14OiBhdXRvOwogICAgICAgIG1hcmdpbi1sZWZ0OiAzMHB4OwogICAgICB9CiAgICAgIC50YWJsZS1sZWZ0IHsKICAgICAgICBtYXJnaW46IDIwcHggMjBweCAwIDA7CiAgICAgIH0KICAgICAgLnRhYmxlLXJpZ2h0IHsKICAgICAgICBtYXJnaW46IDIwcHggMCAwIDA7CiAgICAgIH0KICAgICAgLmhpZGRlbiB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQogICAgICAubGVnZW5kLWhvbGRlciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBtYXJnaW46IDhweCAwIDAgMzhweDsKICAgICAgfQogICAgICAubGVnZW5kLWJveCB7CiAgICAgICAgd2lkdGg6IDhweDsKICAgICAgICBoZWlnaHQ6IDhweDsKICAgICAgICBtYXJnaW4tdG9wOiA2cHg7CiAgICAgIH0KICAgICAgLmxlZ2VuZC1yb3cgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIH0KICAgICAgLmxlZ2VuZC1uYW1lIHsKICAgICAgICBtYXJnaW46IDNweCAxMHB4IDAgNXB4OwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgfQogICAgICAvKiBHaXZlIG1pbiBoZWlnaHQgdG8gcGxhY2Vob2xkZXIgaW4gcGFwZXItaW5wdXQgdG8gZ2V0IGFyb3VuZCBjb2xhYiBlbWJlZGRpbmcKICAgICAgICogYWxpZ25tZW50IGlzc3VlLgogICAgICAgKi8KICAgICAgOmhvc3QgcGFwZXItaW5wdXQtY29udGFpbmVyID4gLmZsb2F0ZWQtbGFiZWwtcGxhY2Vob2xkZXIgewogICAgICAgIG1pbi1oZWlnaHQ6IDIwcHg7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2RhdGFNb2RlbF1dIj4KICAgICAgPGRpdiBjbGFzcyQ9IltbX2dldENvbnRyb2xzV3JhcHBlckNsYXNzKF9kYXRhTW9kZWwpXV0iPgogICAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2xzIj4KICAgICAgICAgIDxwYXBlci1kcm9wZG93bi1tZW51IGNsYXNzPSJsZWZ0LWRyb3Bkb3duIGlucHV0LWNvbnRyb2wiIGxhYmVsPSJTb3J0IGJ5Ij4KICAgICAgICAgICAgPHBhcGVyLWxpc3Rib3ggY2xhc3M9ImRyb3Bkb3duLWNvbnRlbnQiIHNlbGVjdGVkPSJ7e19zb3J0T3JkZXJ9fSIgc2xvdD0iZHJvcGRvd24tY29udGVudCI+CiAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tfc29ydE9wdGlvbnNdXSIgYXM9Im9wdGlvbiI+CiAgICAgICAgICAgICAgICA8cGFwZXItaXRlbT5bW29wdGlvbi5uYW1lXV08L3BhcGVyLWl0ZW0+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPC9wYXBlci1saXN0Ym94PgogICAgICAgICAgPC9wYXBlci1kcm9wZG93bi1tZW51PgogICAgICAgICAgPHBhcGVyLWNoZWNrYm94IG5vaW5rIGNsYXNzPSJtaWRkbGUtY2hlY2tib3giIGNoZWNrZWQ9Int7X3JldmVyc2VPcmRlcn19Ij4KICAgICAgICAgICAgUmV2ZXJzZSBvcmRlcgogICAgICAgICAgPC9wYXBlci1jaGVja2JveD4KICAgICAgICAgIDxwYXBlci1pbnB1dCBjbGFzcz0icmlnaHQtaW5wdXQgaW5wdXQtY29udHJvbCIgbGFiZWw9IkZlYXR1cmUgc2VhcmNoIChyZWdleCBlbmFibGVkKSIgdmFsdWU9Int7c2VhcmNoU3RyaW5nfX0iIGF1dG8tdmFsaWRhdGU9InRydWUiIHZhbGlkYXRvcj0iZmlsdGVyLXZhbGlkYXRvciI+CiAgICAgICAgICAgIDxmYWNldHMtb3ZlcnZpZXctZmlsdGVyLXZhbGlkYXRvciB2YWxpZGF0b3ItbmFtZT0iZmlsdGVyLXZhbGlkYXRvciI+CiAgICAgICAgICAgIDwvZmFjZXRzLW92ZXJ2aWV3LWZpbHRlci12YWxpZGF0b3I+CiAgICAgICAgICA8L3BhcGVyLWlucHV0PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImZlYXR1cmUtY2hlY2tib3hlcyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJmZWF0dXJlcy10ZXh0Ij5GZWF0dXJlczogPC9kaXY+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19mZWF0dXJlU3BlY0FycmF5XV0iIGFzPSJzcGVjQW5kTGlzdCI+CiAgICAgICAgICA8ZGl2PgogICAgICAgICAgICA8cGFwZXItY2hlY2tib3ggbm9pbmsgY2hlY2tlZD0idHJ1ZSIgY2xhc3M9ImZlYXR1cmUtY2hlY2tib3giIGlkPSJbW19nZXRTcGVjQ2hlY2tib3hJZChzcGVjQW5kTGlzdCldXSIgb24tY2hhbmdlPSJfZmVhdHVyZVNwZWNDaGVjayI+CiAgICAgICAgICAgICAgW1tfZ2V0U3BlY0NoZWNrYm94VGV4dChzcGVjQW5kTGlzdCldXQogICAgICAgICAgICA8L3BhcGVyLWNoZWNrYm94PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaGFzTXVsdGlwbGVEYXRhc2V0cyhfZGF0YU1vZGVsKV1dIj4KICAgICAgICA8ZGl2IGNsYXNzPSJsZWdlbmQtaG9sZGVyIj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX2dldERhdGFzZXRzKF9kYXRhTW9kZWwpXV0iIGFzPSJkYXRhc2V0IiBpbmRleC1hcz0iZGF0YXNldEluZGV4Ij4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGVnZW5kLXJvdyI+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGVnZW5kLWJveCIgc3R5bGU9IltbX2dldExlZ2VuZEJveFN0eWxlKF9kYXRhTW9kZWwsIGRhdGFzZXRJbmRleCldXSI+PC9kaXY+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGVnZW5kLW5hbWUiPltbX2dldERhdGFzZXROYW1lKF9kYXRhTW9kZWwsIGRhdGFzZXRJbmRleCldXTwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDxkaXYgY2xhc3M9InRhYmxlLWhvbGRlciI+CiAgICAgICAgPGZhY2V0cy1vdmVydmlldy10YWJsZSBmZWF0dXJlcz0iW1tfZ2V0TnVtZXJpY0ZlYXR1cmVMaXN0SXRlbXMoX2RhdGFNb2RlbCwgc2VhcmNoU3RyaW5nLCBfc29ydE9yZGVyLCBfcmV2ZXJzZU9yZGVyLCBfZmVhdHVyZVNwZWNDaGVja2JveGVzKV1dIiBkYXRhLW1vZGVsPSJbW19kYXRhTW9kZWxdXSIgZmVhdHVyZS1zbGljZS1zZWxlY3Rpb249Int7ZmVhdHVyZVNsaWNlU2VsZWN0aW9ufX0iIG51bWVyaWM9InRydWUiIGNsYXNzPSJ0YWJsZS1sZWZ0IiBjb21wYXJlLW1vZGU9IltbY29tcGFyZU1vZGVdXSI+CiAgICAgICAgPC9mYWNldHMtb3ZlcnZpZXctdGFibGU+CiAgICAgICAgPGZhY2V0cy1vdmVydmlldy10YWJsZSBmZWF0dXJlcz0iW1tfZ2V0Tm9uTnVtZXJpY0ZlYXR1cmVMaXN0SXRlbXMoX2RhdGFNb2RlbCwgc2VhcmNoU3RyaW5nLCBfc29ydE9yZGVyLCBfcmV2ZXJzZU9yZGVyLCBfZmVhdHVyZVNwZWNDaGVja2JveGVzKV1dIiBkYXRhLW1vZGVsPSJbW19kYXRhTW9kZWxdXSIgZmVhdHVyZS1zbGljZS1zZWxlY3Rpb249Int7ZmVhdHVyZVNsaWNlU2VsZWN0aW9ufX0iIGNsYXNzPSJ0YWJsZS1yaWdodCIgY29tcGFyZS1tb2RlPSJbW2NvbXBhcmVNb2RlXV0iPgogICAgICAgIDwvZmFjZXRzLW92ZXJ2aWV3LXRhYmxlPgogICAgICA8L2Rpdj4KICAgIDwvdGVtcGxhdGU+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vZmFjZXRzLW92ZXJ2aWV3L2NvbXBvbmVudHMvZmFjZXRzLW92ZXJ2aWV3L2ZhY2V0cy1vdmVydmlldy5qcwpQb2x5bWVyKHtpczoiZmFjZXRzLW92ZXJ2aWV3Iixwcm9wZXJ0aWVzOntzZWFyY2hTdHJpbmc6e3R5cGU6U3RyaW5nLG5vdGlmeTohMH0sX3NvcnRPcHRpb25zOkFycmF5LF9yZXZlcnNlT3JkZXI6Qm9vbGVhbixfc29ydE9yZGVyOnt0eXBlOk51bWJlcix2YWx1ZTowfSxwcm90b0lucHV0Ont0eXBlOk9iamVjdCxvYnNlcnZlcjoiX3VwZGF0ZSJ9LGZlYXR1cmVTbGljZVNlbGVjdGlvbjp7dHlwZTpPYmplY3Qsbm90aWZ5OiEwfSxjb21wYXJlTW9kZTp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxfZGF0YU1vZGVsOnt0eXBlOk9iamVjdCx2YWx1ZTpudWxsfSxfZmVhdHVyZVNwZWNBcnJheTp7dHlwZTpBcnJheSxjb21wdXRlZDoiX2dldEZlYXR1cmVTcGVjQXJyYXkoX2RhdGFNb2RlbCkifSxfZmVhdHVyZVNwZWNDaGVja2JveGVzOkFycmF5fSxfZ2V0RmVhdHVyZVNwZWNBcnJheShhKXtpZighYSlyZXR1cm5bXTtjb25zdCBjPVtdO2ZvcihsZXQgZD0wOzE2PmQ7ZCsrKWMucHVzaCghMCk7CnRoaXMuX2ZlYXR1cmVTcGVjQ2hlY2tib3hlcz1jO3JldHVybiBhLmdldE5vbkVtcHR5RmVhdHVyZVNwZWNMaXN0cygpfSxfZ2V0U3BlY0NoZWNrYm94VGV4dChhKXtyZXR1cm4gUHAoYS5zcGVjKSsiKCIrYS5mZWF0dXJlcy5sZW5ndGgrIikifSxfZ2V0U3BlY0NoZWNrYm94SWQoYSl7cmV0dXJuIFN0cmluZyhhLnNwZWMpfSxfZmVhdHVyZVNwZWNDaGVjayhhKXtpZihhKXtjb25zdCBjPVtdLGQ9K2EudGFyZ2V0LmlkO2ZvcihsZXQgZj0wOzE2PmY7ZisrKWQ9PT1mP2MucHVzaChhLnRhcmdldC5jaGVja2VkKTpjLnB1c2godGhpcy5fZmVhdHVyZVNwZWNDaGVja2JveGVzW2ZdKTt0aGlzLl9mZWF0dXJlU3BlY0NoZWNrYm94ZXM9Y319LF9jb252ZXJ0SW5wdXRUb1Byb3RvKGEpe2lmKCFhfHxhLmNvbnN0cnVjdG9yPT09T2JqZWN0JiYwPT09T2JqZWN0LmtleXMoYSkubGVuZ3RoKXJldHVybiBudWxsO2lmKGEgaW5zdGFuY2VvZiBVaW50OEFycmF5KXJldHVybiBOaihhKTtpZigic3RyaW5nIj09PQp0eXBlb2YgYXx8YSBpbnN0YW5jZW9mIFN0cmluZyl7YT1hdG9iKGEpO2NvbnN0IGM9bmV3IFVpbnQ4QXJyYXkoYS5sZW5ndGgpO2ZvcihsZXQgZD0wO2Q8YS5sZW5ndGg7ZCsrKWNbZF09YS5jaGFyQ29kZUF0KGQpO3JldHVybiBOaihjKX1yZXR1cm4gYS5jb25zdHJ1Y3Rvcj09PU9iamVjdCYmImZ1bmN0aW9uIj09PXR5cGVvZiBwaS5mcm9tT2JqZWN0P3BpLmZyb21PYmplY3QoYSk6YX0sX3VwZGF0ZSgpe3RoaXMuZmVhdHVyZVNsaWNlU2VsZWN0aW9uPW51bGw7bGV0IGE7e2NvbnN0IGY9dGhpcy5fY29udmVydElucHV0VG9Qcm90byh0aGlzLnByb3RvSW5wdXQpO2lmKCFmKXt0aGlzLl9kYXRhTW9kZWw9bnVsbDtyZXR1cm59YT1uZXcgcHEoR3AoZikpfXRoaXMuc2V0KCJfc29ydE9wdGlvbnMiLFt7bmFtZToiRmVhdHVyZSBvcmRlciIsbWFwOnt9fSx7bmFtZToiTm9uLXVuaWZvcm1pdHkiLG1hcDp7fX0se25hbWU6IkFscGhhYmV0aWNhbCIsbWFwOnt9fSx7bmFtZToiQW1vdW50IG1pc3NpbmcvemVybyIsCm1hcDp7fX1dKTtjb25zdCBjPWEuZ2V0RGF0YXNldEZlYXR1cmVTdGF0aXN0aWNzKCkuZ2V0RGF0YXNldHNMaXN0KCksZD0xPGMubGVuZ3RoO2QmJnRoaXMucHVzaCgiX3NvcnRPcHRpb25zIix7bmFtZToiRGlzdHJpYnV0aW9uIGRpc3RhbmNlIixtYXA6e319KTthLmdldFVuaXF1ZUZlYXR1cmVzKCkuZm9yRWFjaCgoZixnKT0+e3RoaXMuX3NvcnRPcHRpb25zWzBdLm1hcFtmLmdldE5hbWUoKV09ZztnPWEuZ2V0RGF0YXNldEhpc3RvZ3JhbXNGb3JGZWF0dXJlKGYuZ2V0TmFtZSgpKTt0aGlzLl9zb3J0T3B0aW9uc1sxXS5tYXBbZi5nZXROYW1lKCldPWcucmVkdWNlKChsLGspPT57az1rLmhpc3RNYXAuU3RhbmRhcmQ/cnAoay5oaXN0TWFwLlN0YW5kYXJkLmdldEJ1Y2tldHNMaXN0KCkpOjE7cmV0dXJuIE1hdGgubWluKGwsayl9LDEpO3RoaXMuX3NvcnRPcHRpb25zWzJdLm1hcFtmLmdldE5hbWUoKV09Zi5nZXROYW1lKCk7dGhpcy5fc29ydE9wdGlvbnNbM10ubWFwW2YuZ2V0TmFtZSgpXT0KYy5yZWR1Y2UoKGwsayk9PntrPXRoaXMuX2dldFN0YXRzKGEsayxmKTtrPS0xKkFwKGspO3JldHVybiBNYXRoLm1pbihsLGspfSwwKTtkJiYodGhpcy5fc29ydE9wdGlvbnNbNF0ubWFwW2YuZ2V0TmFtZSgpXT0tMSpDcChnKSl9LHRoaXMpO3RoaXMuX2RhdGFNb2RlbD1hfSxfZ2V0U3RhdHMoYSxjLGQpe3JldHVybiBhJiZjJiZkP2EuZ2V0RmVhdHVyZShkLmdldE5hbWUoKSxjLmdldE5hbWUoKSk6bnVsbH0sX2dldFNvcnRGdW5jdGlvbihhLGMpe2NvbnN0IGQ9dGhpcy5fc29ydE9wdGlvbnNbYV0ubWFwLGY9Yz8tMToxO3JldHVybihnLGwpPT57Zz1kW2cuZ2V0TmFtZSgpXTtsPWRbbC5nZXROYW1lKCldO3JldHVybiJ1bmRlZmluZWQiPT10eXBlb2YgZ3x8InVuZGVmaW5lZCI9PXR5cGVvZiBsPzA6ZiooZzxsPy0xOjEpfX0sX2dldEZpbHRlcihhKXtpZihhKXRyeXtjb25zdCBjPW5ldyBSZWdFeHAoYSwiaSIpO3JldHVybiBkPT5jLnRlc3QoZC5nZXROYW1lKCkpfWNhdGNoKGMpe3JldHVybiBudWxsfWVsc2UgcmV0dXJuIG51bGx9LApfZ2V0TnVtZXJpY0ZlYXR1cmVMaXN0SXRlbXMoYSxjLGQsZixnKXtyZXR1cm4gdGhpcy5fZ2V0RmVhdHVyZUxpc3RJdGVtcyhhLGMsZCxmLGcsITApfSxfZ2V0Tm9uTnVtZXJpY0ZlYXR1cmVMaXN0SXRlbXMoYSxjLGQsZixnKXtyZXR1cm4gdGhpcy5fZ2V0RmVhdHVyZUxpc3RJdGVtcyhhLGMsZCxmLGcsITEpfSxfZ2V0RmVhdHVyZUxpc3RJdGVtcyhhLGMsZCxmLGcsbCl7aWYoIWEpcmV0dXJuW107Y29uc3Qgaz10aGlzLl9nZXRGaWx0ZXIoYyk7Yz1hLmdldFVuaXF1ZUZlYXR1cmVzKCk7Yz1rP2MuZmlsdGVyKG09PmsobSkmJmdbYS5nZXRGZWF0dXJlU3BlY0ZvckZlYXR1cmUobS5nZXROYW1lKCkpXSk6Yy5maWx0ZXIobT0+Z1thLmdldEZlYXR1cmVTcGVjRm9yRmVhdHVyZShtLmdldE5hbWUoKSldKTtjPWMuZmlsdGVyKG09Pmw/RnAobSk6IUZwKG0pKTtyZXR1cm4gYy5zbGljZSgpLnNvcnQodGhpcy5fZ2V0U29ydEZ1bmN0aW9uKGQsZikpfSxfZ2V0Q29udHJvbHNXcmFwcGVyQ2xhc3MoYSl7cmV0dXJuIWF8fAoxPj1hLmdldFVuaXF1ZUZlYXR1cmVzKCkubGVuZ3RoPyJoaWRkZW4iOiIifSxfZ2V0RGF0YXNldE5hbWUoYSxjKXtyZXR1cm4gYS5nZXREYXRhc2V0TmFtZXMoKVtjXX0sX2dldExlZ2VuZEJveFN0eWxlKGEsYyl7cmV0dXJuImJhY2tncm91bmQtY29sb3I6IithLmdldENoYXJ0Q29sb3JTdHJpbmcoYyl9LF9nZXREYXRhc2V0cyhhKXtyZXR1cm4gYT9hLmdldERhdGFzZXRGZWF0dXJlU3RhdGlzdGljcygpLmdldERhdGFzZXRzTGlzdCgpOm51bGx9LF9oYXNNdWx0aXBsZURhdGFzZXRzKGEpe3JldHVybiBudWxsPT1hPyExOjE8YS5nZXREYXRhc2V0TmFtZXMoKS5sZW5ndGh9LGdldFN0YXRzUHJvdG8oYSl7cmV0dXJuIHluKGEpfX0pOwo8L3NjcmlwdD4KCgoKCgoKCgoKCgoKCgoKPGRvbS1tb2R1bGUgaWQ9InZ6LWV4YW1wbGUtdmlld2VyIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGUgaWQ9ImxpbnRlci1wYXBlci1idXR0b24tc3R5bGUiPgogICAgICAvKioKICAgICAgICogVGhpcyBzdHlsZSBwcmVzZXJ2ZXMgdGhlIHN0eWxpbmcgcHJldmlvdXMgdG8KICAgICAgICogaHR0cHM6Ly9naXRodWIuY29tL1BvbHltZXJFbGVtZW50cy9wYXBlci1idXR0b24vcHVsbC8xMTUKICAgICAgICogVGhpcyBjaGFuZ2UgY2FuIGJyZWFrIHRoZSBsYXlvdXQgb2YgcGFwZXItYnV0dG9uIGNvbnRlbnQuCiAgICAgICAqIFJlbW92ZSB0aGlzIHN0eWxlIHRvIGFwcGx5IHRoZSBjaGFuZ2UsIG1vcmUgZGV0YWlscyBhdCBiLzcwNTI4MzU2LgogICAgICAgKi8KICAgICAgcGFwZXItYnV0dG9uIHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0OwogICAgICB9CiAgICA8L3N0eWxlPgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KCiAgICAgIC5zZXEtZmVhdCB7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDE2cHg7CiAgICAgIH0KCiAgICAgIC52YWx1ZS1saXN0IHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgLnNsaWRlci1ob2xkZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIH0KCiAgICAgIC5zbGlkZXItbGFiZWwgewogICAgICAgIG1hcmdpbi1yaWdodDogMTBweDsKICAgICAgICBtYXJnaW4tdG9wOiAxNnB4OwogICAgICB9CgogICAgICAjc2FsaWVuY3lMZWdlbmQgewogICAgICAgIHdpZHRoOiAzMDBweDsKICAgICAgICBoZWlnaHQ6IDUwcHg7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDhweDsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDhweDsKICAgICAgfQoKICAgICAgLnNhbGllbmN5LWNvbnRyb2xzLWhvbGRlciB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcGFkZGluZzogOHB4OwogICAgICAgIHdpZHRoOiBmaXQtY29udGVudDsKICAgICAgfQoKICAgICAgLmhpZGUtc2FsaWVuY3ktY29udHJvbHMgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5zYWxpZW5jeS1sZWdlbmQtbGFiZWwgewogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBjb2xvcjogIzNjNDA0MzsKICAgICAgfQoKICAgICAgLm91dGVyIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBvdmVyZmxvdzogYXV0bzsKICAgICAgfQoKICAgICAgLmltYWdlIHsKICAgICAgICAvKiA8aW1nPiBlbGVtZW50cyBhcmUgdXNlZCB0byBsb2FkIHRvIGEgY2FudmFzIHNvIHRoZXkgYXJlbid0IGRpc3BsYXllZC4gKi8KICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICB9CgogICAgICAuZmxleC1jb250cm9scyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgICAgb3ZlcmZsb3c6IGF1dG87CiAgICAgIH0KCiAgICAgIC52YWx1ZS1waWxscy1ob2xkZXIgewogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgICBmbGV4LWJhc2lzOiAxMDAlOwogICAgICB9CgogICAgICBpcm9uLWF1dG9ncm93LXRleHRhcmVhIHsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjZmZmZmZmOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgLW1vei1hcHBlYXJhbmNlOiBub25lOwogICAgICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTsKICAgICAgICAtLWlyb24tYXV0b2dyb3ctdGV4dGFyZWE6IHsKICAgICAgICAgIGNvbG9yOiAjM2M0MDQzOwogICAgICAgIH0KICAgICAgfQoKICAgICAgaXJvbi1hdXRvZ3Jvdy10ZXh0YXJlYS52YWx1ZS1zYW1lIHsKICAgICAgICAtLWlyb24tYXV0b2dyb3ctdGV4dGFyZWE6IHsKICAgICAgICAgIGNvbG9yOiAjNWY2MzY4OwogICAgICAgIH0KICAgICAgfQoKICAgICAgaXJvbi1hdXRvZ3Jvdy10ZXh0YXJlYS52YWx1ZS1kaWZmZXJlbnQgewogICAgICAgIC0taXJvbi1hdXRvZ3Jvdy10ZXh0YXJlYTogewogICAgICAgICAgY29sb3I6ICMzNGE4NTM7CiAgICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIH0KICAgICAgfQoKICAgICAgLnZhbHVlLXBpbGwgewogICAgICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICAgICAgbWFyZ2luOiA0cHg7CiAgICAgICAgcGFkZGluZzogNHB4IDhweDsKICAgICAgICBjb2xvcjogIzNjNDA0MzsKICAgICAgfQoKICAgICAgLnZhbHVlLXBpbGw6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICNmOGY5ZmE7CiAgICAgIH0KCiAgICAgIC52YWx1ZS1waWxsW2ZvY3VzZWRdIHsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjZmZlYjNiOwogICAgICAgIGJhY2tncm91bmQ6ICNmOGY5ZmE7CiAgICAgIH0KCiAgICAgIC52YWx1ZS1jb21wYXJlIHsKICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OwogICAgICAgIHBhZGRpbmc6IDRweCA4cHg7CiAgICAgIH0KCiAgICAgIC52YWx1ZS1waWxsLXN0YWNrZWQgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIG1hcmdpbjogNHB4IDRweCA0cHggMDsKICAgICAgICBwYWRkaW5nOiAycHg7CiAgICAgIH0KCiAgICAgIC52YWx1ZS1waWxsLWdyaWQgewogICAgICAgIHdpZHRoOiAxMjBweDsKICAgICAgICBtYXJnaW46IDRweCA4cHggNHB4IDA7CiAgICAgIH0KCiAgICAgIC5mZWF0dXJlLW5hbWUgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgcGFkZGluZy1sZWZ0OiA0cHg7CiAgICAgICAgbWFyZ2luOiA0cHggMjBweCA0cHggOHB4OwogICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICBjb2xvcjogIzgwODY4YjsKICAgICAgfQoKICAgICAgLmZlYXR1cmUtbmFtZS10ZXh0IHsKICAgICAgICB3aWR0aDogMzAwcHg7CiAgICAgICAgbWF4LXdpZHRoOiAzMDBweDsKICAgICAgICBtaW4td2lkdGg6IDE1MHB4OwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBtYXJnaW4tdG9wOiA0cHg7CiAgICAgICAgY29sb3I6ICMzYzQwNDM7CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNmVtOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICAgIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKICAgICAgICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7CiAgICAgICAgcGFkZGluZy1yaWdodDogOHB4OwogICAgICB9CgogICAgICAuZmVhdHVyZS1uYW1lLWhlYWRlci10ZXh0IHsKICAgICAgICB3aWR0aDogMzAwcHg7CiAgICAgICAgbWF4LXdpZHRoOiAzMDBweDsKICAgICAgICBtaW4td2lkdGg6IDE1MHB4OwogICAgICAgIGNvbG9yOiAjMjAyMTI0OwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBsaW5lLWhlaWdodDogMS44ZW07CiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICAgICAgd2hpdGUtc3BhY2U6IHByZS13cmFwOwogICAgICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDsKICAgICAgfQoKICAgICAgLmZlYXR1cmUtbmFtZS5mZWF0dXJlLW5hbWUtaGVhZGVyIHsKICAgICAgICBwYWRkaW5nOiA0cHggNHB4IDBweCA0cHg7CiAgICAgICAgYmFja2dyb3VuZDogI2Y4ZjlmYTsKICAgICAgICBtYXJnaW46IDBweDsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2U4ZWFlZDsKICAgICAgfQoKICAgICAgLnNsaWRlciB7CiAgICAgICAgLS1wYXBlci1zbGlkZXItaW5wdXQ6IHsKICAgICAgICAgIHdpZHRoOiAxMDBweDsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC5oaWRlLWNvbnRyb2xzIHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICB9CgogICAgICAuaW5kZW50IHsKICAgICAgICBtYXJnaW4tbGVmdDogMTZweDsKICAgICAgfQoKICAgICAgLnNjYWxlLWxhYmVsIHsKICAgICAgICBtYXJnaW4tdG9wOiAxMHB4OwogICAgICAgIG1hcmdpbi1yaWdodDogMTBweDsKICAgICAgfQoKICAgICAgLndpbmRvd2luZy1sYWJlbCB7CiAgICAgICAgd2lkdGg6IDExMHB4OwogICAgICB9CgogICAgICAuY29udHJvbC10b2dnbGUtYnV0dG9uIHsKICAgICAgICBmbG9hdDogbGVmdDsKICAgICAgICBtYXgtaGVpZ2h0OiAyMHB4OwogICAgICAgIG1heC13aWR0aDogMjBweDsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICB9CgogICAgICAuZXhwYW5kLWJ1dHRvbi1ob2xkZXIgewogICAgICAgIG1hcmdpbi1ib3R0b206IDEwcHg7CiAgICAgIH0KCiAgICAgIC5kZWxldGUtdmFsdWUtYnV0dG9uIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgYmFja2dyb3VuZDogI2ZmZTYwMzsKICAgICAgICBjb2xvcjogIzVmNjM2ODsKICAgICAgICBib3JkZXItcmFkaXVzOiAxMnB4OwogICAgICAgIG1heC13aWR0aDogMjRweDsKICAgICAgICBtYXgtaGVpZ2h0OiAyNHB4OwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgICAgbWFyZ2luLXRvcDogMnB4OwogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgdmlzaWJpbGl0eTogdmlzaWJsZTsKICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDIwMG1zOwogICAgICB9CgogICAgICAuZGVsZXRlLXZhbHVlLWJ1dHRvbi5kZWxldGUtdmFsdWUtYnV0dG9uLWhpZGRlbiB7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB2aXNpYmlsaXR5OiBoaWRkZW47CiAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAyMDBtcywgdmlzaWJpbGl0eSAyMDBtczsKICAgICAgfQoKICAgICAgLmRlbGV0ZS1mZWF0dXJlLWJ1dHRvbiB7CiAgICAgICAgbWF4LWhlaWdodDogMjBweDsKICAgICAgICBtYXgtd2lkdGg6IDIwcHg7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgICBtYXJnaW4tbGVmdDogNHB4OwogICAgICAgIG1hcmdpbi10b3A6IDBweDsKICAgICAgfQoKICAgICAgLmFkZC12YWx1ZS1idXR0b24gewogICAgICAgIG1hcmdpbi10b3A6IDJweDsKICAgICAgICBtYXgtaGVpZ2h0OiAyMHB4OwogICAgICAgIG1heC13aWR0aDogMjBweDsKICAgICAgICBtaW4taGVpZ2h0OiAyMHB4OwogICAgICAgIG1pbi13aWR0aDogMjBweDsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICAgIGNvbG9yOiAjODA4NjhiOwogICAgICB9CgogICAgICAuYWRkLWZlYXR1cmUtYnV0dG9uIHsKICAgICAgICBtYXJnaW4tbGVmdDogMDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxMHB4OwogICAgICB9CgogICAgICAudXBsb2FkLWltYWdlLWJ1dHRvbiB7CiAgICAgICAgbWFyZ2luOiAwIDAgMCA1cHg7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgICB3aWR0aDogMTZweDsKICAgICAgICBoZWlnaHQ6IDE2cHg7CiAgICAgICAgY29sb3I6IHdoaXRlOwogICAgICB9CgogICAgICAuaW1hZ2VjYXJkIHsKICAgICAgICBtYXJnaW46IDRweDsKICAgICAgfQoKICAgICAgLmltYWdlLXNjYWxlLWJ1dHRvbiB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogNXB4OwogICAgICB9CgogICAgICAuc2FsaWVuY3ktbGVnZW5kLWxhYmVsIHsKICAgICAgICBtYXJnaW4tYm90dG9tOiA1cHg7CiAgICAgIH0KCiAgICAgIC5mZWF0dXJlLWRpYWxvZyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICB9CgogICAgICAuZmVhdHVyZS1kaWFsb2ctYnV0dG9uIHsKICAgICAgICB0ZXh0LXRyYW5zZm9ybTogbm9uZTsKICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OwogICAgICB9CgogICAgICAuaW1hZ2UtYm90dG9tLWJhciB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgYmFja2dyb3VuZDogIzNjNDA0MzsKICAgICAgfQoKICAgICAgLmltYWdlLXVwbG9hZC1pbnB1dCB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQoKICAgICAgLnNwYWNlLWZvci1tb3JlLWJ1dHRvbiB7CiAgICAgICAgd2lkdGg6IDIwcHg7CiAgICAgIH0KCiAgICAgIC52YWx1ZS1oZWFkZXItdGV4dCB7CiAgICAgICAgbWluLXdpZHRoOiAxMzBweDsKICAgICAgICB3aWR0aDogMTMwcHg7CiAgICAgICAgY29sb3I6ICMyMDIxMjQ7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjhlbTsKICAgICAgfQoKICAgICAgcGFwZXItZGlhbG9nIHsKICAgICAgICBib3JkZXItcmFkaXVzOiAxMHB4OwogICAgICB9CgogICAgICAuY29udHJvbC1idXR0b24gewogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlOwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNkYWRjZTA7CiAgICAgICAgY29sb3I6IHZhcigtLXRiLW9yYW5nZS1kYXJrKTsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweDsKICAgICAgICB0ZXh0LXRyYW5zZm9ybTogbm9uZTsKICAgICAgICBtYXJnaW46IDVweDsKICAgICAgfQoKICAgICAgLmNvbnRyb2wtYnV0dG9uW2Rpc2FibGVkXSB7CiAgICAgICAgY29sb3I6ICNkYWRjZTA7CiAgICAgIH0KCiAgICAgIC52YWx1ZS10ZXh0IHsKICAgICAgICBib3JkZXItYm90dG9tOiAycHggc29saWQgI2ZmZWIzYjsKICAgICAgfQoKICAgICAgLmNvbXBhcmUtdmFsdWUtdGV4dCB7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkICMzNGE4NTM7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8ZGl2IGNsYXNzPSJvdXRlciI+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tzaG93U2VhcmNoQm94XV0iPgogICAgICAgIDxwYXBlci1pbnB1dCB2YWx1ZT0ie3tmZWF0dXJlU2VhcmNoVmFsdWV9fSIgbGFiZWw9IlNlYXJjaCIgY2xhc3M9ImZpbHRlci1pbnB1dCIgbm8tbGFiZWwtZmxvYXQ+CiAgICAgICAgICA8aXJvbi1pY29uIGljb249Imljb25zOnNlYXJjaCIgcHJlZml4PjwvaXJvbi1pY29uPgogICAgICAgIDwvcGFwZXItaW5wdXQ+CiAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDxkaXYgY2xhc3M9ImZlYXR1cmUtbmFtZSBmZWF0dXJlLW5hbWUtaGVhZGVyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJmZWF0dXJlLW5hbWUtaGVhZGVyLXRleHQiPkZlYXR1cmU8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJ2YWx1ZS1waWxscy1ob2xkZXIgZmxleC1jb250cm9scyB2YWx1ZS1oZWFkZXItdGV4dCI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJ2YWx1ZS10ZXh0Ij5WYWx1ZShzKTwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tjb21wYXJlTW9kZV1dIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InZhbHVlLXBpbGxzLWhvbGRlciBmbGV4LWNvbnRyb2xzIHZhbHVlLWhlYWRlci10ZXh0Ij4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29tcGFyZS12YWx1ZS10ZXh0Ij5bW2NvbXBhcmVUaXRsZV1dPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDxkaXYgY2xhc3M9InNwYWNlLWZvci1tb3JlLWJ1dHRvbiI+PC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW2ZpbHRlcmVkRmVhdHVyZXNMaXN0XV0iIGFzPSJmZWF0Ij4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbaXNJbWFnZShmZWF0Lm5hbWUpXV0iPgogICAgICAgICAgPGRpdiBjbGFzcz0iZmVhdHVyZS1uYW1lIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmVhdHVyZS1uYW1lLXRleHQiPltbZmVhdC5uYW1lXV08L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idmFsdWUtcGlsbHMtaG9sZGVyIj4KICAgICAgICAgICAgICA8cGFwZXItY2FyZCBpZD0iW1tnZXRJbWFnZUNhcmRJZChmZWF0Lm5hbWUpXV0iIGNsYXNzPSJpbWFnZWNhcmQiPgogICAgICAgICAgICAgICAgPGltZyBjbGFzcz0iaW1hZ2UiIHNyYyQ9IltbZ2V0SW1hZ2VTcmMoZmVhdC5uYW1lKV1dIiBpZD0iW1tnZXRJbWFnZUlkKGZlYXQubmFtZSldXSI+CiAgICAgICAgICAgICAgICA8Y2FudmFzIGlkPSJbW2dldENhbnZhc0lkKGZlYXQubmFtZSldXSIgZGF0YS1mZWF0dXJlPSJbW2ZlYXQubmFtZV1dIj48L2NhbnZhcz4KICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tzaG91bGRTaG93SW1hZ2VDb250cm9scyhoYXNJbWFnZSwgYWxsb3dJbWFnZUNvbnRyb2xzKV1dIj4KICAgICAgICAgICAgICAgICAgPGRpdj5JbWFnZSB3aW5kb3dpbmcgKGNvbnRyYXN0KTwvZGl2PgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzbGlkZXItaG9sZGVyIGluZGVudCI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2xpZGVyLWxhYmVsIHdpbmRvd2luZy1sYWJlbCI+CiAgICAgICAgICAgICAgICAgICAgICBXaW5kb3cgY2VudGVyOgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxwYXBlci1zbGlkZXIgY2xhc3M9InNsaWRlciIgZWRpdGFibGU9InRydWUiIG1heD0iMjU1IiBpbW1lZGlhdGUtdmFsdWU9Int7d2luZG93Q2VudGVyfX0iIHZhbHVlPSJbW3dpbmRvd0NlbnRlcl1dIj4KICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLXNsaWRlcj4KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InNsaWRlci1ob2xkZXIgaW5kZW50Ij4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzbGlkZXItbGFiZWwgd2luZG93aW5nLWxhYmVsIj4KICAgICAgICAgICAgICAgICAgICAgIFdpbmRvdyB3aWR0aDoKICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8cGFwZXItc2xpZGVyIGNsYXNzPSJzbGlkZXIiIGVkaXRhYmxlPSJ0cnVlIiBtYXg9IjUxMiIgbWluPSIxIiBpbW1lZGlhdGUtdmFsdWU9Int7d2luZG93V2lkdGh9fSIgdmFsdWU9Iltbd2luZG93V2lkdGhdXSI+CiAgICAgICAgICAgICAgICAgICAgPC9wYXBlci1zbGlkZXI+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4LWNvbnRyb2xzIj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzY2FsZS1sYWJlbCI+SW1hZ2Ugc2NhbGUgcGVyY2VudGFnZTo8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8cGFwZXItaW5wdXQgbm8tbGFiZWwtZmxvYXQgdHlwZT0ibnVtYmVyIiBtaW49IjEwIiBtYXg9IjUwMCIgdmFsdWU9Int7aW1hZ2VTY2FsZVBlcmNlbnRhZ2V9fSI+CiAgICAgICAgICAgICAgICAgICAgPC9wYXBlci1pbnB1dD4KICAgICAgICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uIGNsYXNzPSJpbWFnZS1zY2FsZS1idXR0b24iIG9uLWNsaWNrPSJ1cGRhdGVJbWFnZXMiPgogICAgICAgICAgICAgICAgICAgICAgc2V0CiAgICAgICAgICAgICAgICAgICAgPC9wYXBlci1idXR0b24+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImltYWdlLWJvdHRvbS1iYXIiPgogICAgICAgICAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24gY2xhc3MkPSJbW2dldFVwbG9hZEltYWdlQ2xhc3MocmVhZG9ubHkpXV0iIGljb249ImZpbGUtdXBsb2FkIiBvbi1jbGljaz0idXBsb2FkSW1hZ2VDbGlja2VkIiBkYXRhLWZlYXR1cmU9IltbZmVhdC5uYW1lXV0iIHRpdGxlPSJVcGxvYWQgaW1hZ2UiPgogICAgICAgICAgICAgICAgICA8L3BhcGVyLWljb24tYnV0dG9uPgogICAgICAgICAgICAgICAgICA8cGFwZXItaW5wdXQgY2xhc3M9ImltYWdlLXVwbG9hZC1pbnB1dCIgdHlwZT0iZmlsZSIgb24tY2hhbmdlPSJoYW5kbGVJbWFnZVVwbG9hZCIgZGF0YS1mZWF0dXJlPSJbW2ZlYXQubmFtZV1dIiBkYXRhLWluZGV4PSJbW2luZGV4XV0iPgogICAgICAgICAgICAgICAgICA8L3BhcGVyLWlucHV0PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPC9wYXBlci1jYXJkPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2NvbXBhcmVNb2RlXV0iPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9InZhbHVlLXBpbGxzLWhvbGRlciI+CiAgICAgICAgICAgICAgICA8cGFwZXItY2FyZCBpZD0iW1tnZXRDb21wYXJlSW1hZ2VDYXJkSWQoZmVhdC5uYW1lKV1dIiBjbGFzcz0iaW1hZ2VjYXJkIj4KICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz0iaW1hZ2UiIHNyYyQ9IltbZ2V0Q29tcGFyZUltYWdlU3JjKGZlYXQubmFtZSldXSIgaWQ9IltbZ2V0Q29tcGFyZUltYWdlSWQoZmVhdC5uYW1lKV1dIj4KICAgICAgICAgICAgICAgICAgPGNhbnZhcyBpZD0iW1tnZXRDb21wYXJlQ2FudmFzSWQoZmVhdC5uYW1lKV1dIiBkYXRhLWZlYXR1cmU9IltbZmVhdC5uYW1lXV0iPjwvY2FudmFzPgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbWFnZS1ib3R0b20tYmFyIj48L2Rpdj4KICAgICAgICAgICAgICAgIDwvcGFwZXItY2FyZD4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPHBhcGVyLWljb24tYnV0dG9uIGljb249Im1vcmUtaG9yaXoiIGNsYXNzJD0iW1tnZXRBZGRWYWx1ZUJ1dHRvbkNsYXNzKHJlYWRvbmx5KV1dIiBvbi1jbGljaz0iZmVhdHVyZU1vcmVDbGlja2VkIiBkYXRhLWZlYXR1cmU9IltbZmVhdC5uYW1lXV0iPjwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgICAgICAgIDxwYXBlci1kaWFsb2cgaWQ9IltbZ2V0RmVhdHVyZURpYWxvZ0lkKGZlYXQubmFtZSldXSIgaG9yaXpvbnRhbC1hbGlnbj0icmlnaHQiIHZlcnRpY2FsLWFsaWduPSJib3R0b20iPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZlYXR1cmUtZGlhbG9nIj4KICAgICAgICAgICAgICAgIDxwYXBlci1idXR0b24gZGF0YS1mZWF0dXJlPSJbW2ZlYXQubmFtZV1dIiBvbi1jbGljaz0iZGVsZXRlRmVhdHVyZSIgY2xhc3M9ImZlYXR1cmUtZGlhbG9nLWJ1dHRvbiI+CiAgICAgICAgICAgICAgICAgIERlbGV0ZSBmZWF0dXJlCiAgICAgICAgICAgICAgICA8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9wYXBlci1kaWFsb2c+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shaXNJbWFnZShmZWF0Lm5hbWUpXV0iPgogICAgICAgICAgPGRpdiBjbGFzcz0iZmVhdHVyZS1uYW1lIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmVhdHVyZS1uYW1lLXRleHQiPltbZmVhdC5uYW1lXV08L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmxleC1jb250cm9scyB2YWx1ZS1waWxscy1ob2xkZXIiPgogICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tpc0V4cGFuZGVkKGZlYXQubmFtZSwgZXhwYW5kQWxsRmVhdHVyZXMpXV0iPgogICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tnZXRGZWF0dXJlVmFsdWVzKGZlYXQubmFtZSldXSIgYXM9InZhbHVlIj4KICAgICAgICAgICAgICAgICAgPGlyb24tYXV0b2dyb3ctdGV4dGFyZWEgY2xhc3MkPSJbW2dldElucHV0UGlsbENsYXNzKGZlYXQubmFtZSwgZGlzcGxheU1vZGUpXV0iIHJlYWRvbmx5JD0iW1tyZWFkb25seV1dIiBvbi1pbnB1dD0ib25WYWx1ZUNoYW5nZWQiIG9uLWZvY3VzPSJvbklucHV0Rm9jdXMiIG9uLWJsdXI9Im9uSW5wdXRCbHVyIiBkYXRhLWZlYXR1cmU9IltbZmVhdC5uYW1lXV0iIGRhdGEtaW5kZXg9IltbaW5kZXhdXSIgdmFsdWU9IltbdmFsdWVdXSI+CiAgICAgICAgICAgICAgICAgIDwvaXJvbi1hdXRvZ3Jvdy10ZXh0YXJlYT4KICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIWlzRXhwYW5kZWQoZmVhdC5uYW1lLCBleHBhbmRBbGxGZWF0dXJlcyldXSI+CiAgICAgICAgICAgICAgICA8aXJvbi1hdXRvZ3Jvdy10ZXh0YXJlYSBjbGFzcyQ9IltbZ2V0SW5wdXRQaWxsQ2xhc3MoZmVhdC5uYW1lLCBkaXNwbGF5TW9kZSldXSIgcmVhZG9ubHkkPSJbW3JlYWRvbmx5XV0iIG9uLWlucHV0PSJvblZhbHVlQ2hhbmdlZCIgb24tZm9jdXM9Im9uSW5wdXRGb2N1cyIgb24tYmx1cj0ib25JbnB1dEJsdXIiIGRhdGEtZmVhdHVyZT0iW1tmZWF0Lm5hbWVdXSIgZGF0YS1pbmRleD0iW1t6ZXJvSW5kZXhdXSIgdmFsdWU9IltbZ2V0Rmlyc3RGZWF0dXJlVmFsdWUoZmVhdC5uYW1lKV1dIj4KICAgICAgICAgICAgICAgIDwvaXJvbi1hdXRvZ3Jvdy10ZXh0YXJlYT4KICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tmZWF0dXJlSGFzTXVsdGlwbGVWYWx1ZXMoZmVhdC5uYW1lKV1dIj4KICAgICAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbiBkYXRhLWZlYXR1cmU9IltbZmVhdC5uYW1lXV0iIG9uLWNsaWNrPSJleHBhbmRGZWF0dXJlIiBjbGFzcyQ9IltbZ2V0SW5wdXRQaWxsQ2xhc3MoZmVhdC5uYW1lLCBkaXNwbGF5TW9kZSldXSI+CiAgICAgICAgICAgICAgICAgICAgLi4uCiAgICAgICAgICAgICAgICAgIDwvcGFwZXItYnV0dG9uPgogICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2NvbXBhcmVNb2RlXV0iPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXgtY29udHJvbHMgdmFsdWUtcGlsbHMtaG9sZGVyIj4KICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tpc0V4cGFuZGVkKGZlYXQubmFtZSwgZXhwYW5kQWxsRmVhdHVyZXMpXV0iPgogICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW2dldENvbXBhcmVGZWF0dXJlVmFsdWVzKGZlYXQubmFtZSldXSIgYXM9InZhbHVlIj4KICAgICAgICAgICAgICAgICAgICA8aXJvbi1hdXRvZ3Jvdy10ZXh0YXJlYSBjbGFzcyQ9IltbZ2V0Q29tcGFyZUlucHV0Q2xhc3MoZmVhdC5uYW1lLCBkaXNwbGF5TW9kZSwgaW5kZXgpXV0iIHJlYWRvbmx5IHZhbHVlPSJbW3ZhbHVlXV0iPgogICAgICAgICAgICAgICAgICAgIDwvaXJvbi1hdXRvZ3Jvdy10ZXh0YXJlYT4KICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIWlzRXhwYW5kZWQoZmVhdC5uYW1lLCBleHBhbmRBbGxGZWF0dXJlcyldXSI+CiAgICAgICAgICAgICAgICAgIDxpcm9uLWF1dG9ncm93LXRleHRhcmVhIGNsYXNzJD0iW1tnZXRDb21wYXJlSW5wdXRDbGFzcyhmZWF0Lm5hbWUsIGRpc3BsYXlNb2RlLCB6ZXJvSW5kZXgpXV0iIHJlYWRvbmx5IHZhbHVlPSJbW2dldEZpcnN0Q29tcGFyZUZlYXR1cmVWYWx1ZShmZWF0Lm5hbWUpXV0iPgogICAgICAgICAgICAgICAgICA8L2lyb24tYXV0b2dyb3ctdGV4dGFyZWE+CiAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tjb21wYXJlRmVhdHVyZUhhc011bHRpcGxlVmFsdWVzKGZlYXQubmFtZSldXSI+CiAgICAgICAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbiBkYXRhLWZlYXR1cmU9IltbZmVhdC5uYW1lXV0iIG9uLWNsaWNrPSJleHBhbmRGZWF0dXJlIiBjbGFzcyQ9IltbZ2V0Q29tcGFyZUlucHV0Q2xhc3MoZmVhdC5uYW1lLCBkaXNwbGF5TW9kZSldXSI+CiAgICAgICAgICAgICAgICAgICAgICAuLi4KICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvdGVtcGxhdGU+CgogICAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24gaWNvbj0ibW9yZS1ob3JpeiIgY2xhc3MkPSJbW2dldEFkZFZhbHVlQnV0dG9uQ2xhc3MocmVhZG9ubHkpXV0iIG9uLWNsaWNrPSJmZWF0dXJlTW9yZUNsaWNrZWQiIGRhdGEtZmVhdHVyZT0iW1tmZWF0Lm5hbWVdXSI+PC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgICAgICAgPHBhcGVyLWRpYWxvZyBpZD0iW1tnZXRGZWF0dXJlRGlhbG9nSWQoZmVhdC5uYW1lKV1dIiBob3Jpem9udGFsLWFsaWduPSJyaWdodCIgdmVydGljYWwtYWxpZ249ImJvdHRvbSI+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmVhdHVyZS1kaWFsb2ciPgogICAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbiBkYXRhLWZlYXR1cmU9IltbZmVhdC5uYW1lXV0iIG9uLWNsaWNrPSJkZWxldGVGZWF0dXJlIiBjbGFzcz0iZmVhdHVyZS1kaWFsb2ctYnV0dG9uIj4KICAgICAgICAgICAgICAgICAgRGVsZXRlIGZlYXR1cmUKICAgICAgICAgICAgICAgIDwvcGFwZXItYnV0dG9uPgogICAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbiBkYXRhLWZlYXR1cmU9IltbZmVhdC5uYW1lXV0iIG9uLWNsaWNrPSJhZGRWYWx1ZSIgY2xhc3M9ImZlYXR1cmUtZGlhbG9nLWJ1dHRvbiI+CiAgICAgICAgICAgICAgICAgIEFkZCBmZWF0dXJlIHZhbHVlCiAgICAgICAgICAgICAgICA8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9wYXBlci1kaWFsb2c+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L3RlbXBsYXRlPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbaXNTZXFFeGFtcGxlKG1heFNlcU51bWJlcildXSI+CiAgICAgICAgPGRpdiBjbGFzcz0ic2xpZGVyLWhvbGRlciI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzbGlkZXItbGFiZWwiPlNlcXVlbmNlIE51bWJlcjo8L2Rpdj4KICAgICAgICAgIDxwYXBlci1zbGlkZXIgY2xhc3M9InNsaWRlciIgZWRpdGFibGU9InRydWUiIG1heD0iW1ttYXhTZXFOdW1iZXJdXSIgdmFsdWU9Int7c2VxTnVtYmVyfX0iPgogICAgICAgICAgPC9wYXBlci1zbGlkZXI+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tmaWx0ZXJlZFNlcUZlYXR1cmVzTGlzdF1dIiBhcz0ic2VxZmVhdCI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzZXFmZWF0Ij4KICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2lzSW1hZ2Uoc2VxZmVhdC5uYW1lKV1dIj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmZWF0dXJlLW5hbWUiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmVhdHVyZS1uYW1lLXRleHQiPltbc2VxZmVhdC5uYW1lXV08L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InZhbHVlLXBpbGxzLWhvbGRlciI+CiAgICAgICAgICAgICAgICAgIDxwYXBlci1jYXJkIGlkPSJbW2dldEltYWdlQ2FyZElkKHNlcWZlYXQubmFtZSldXSIgY2xhc3M9ImltYWdlY2FyZCI+CiAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz0iaW1hZ2UiIHNyYyQ9IltbZ2V0U2VxSW1hZ2VTcmMoc2VxZmVhdC5uYW1lLCBzZXFOdW1iZXIpXV0iIGlkPSJbW2dldEltYWdlSWQoc2VxZmVhdC5uYW1lKV1dIj4KICAgICAgICAgICAgICAgICAgICA8Y2FudmFzIGlkPSJbW2dldENhbnZhc0lkKHNlcWZlYXQubmFtZSldXSIgZGF0YS1mZWF0dXJlPSJbW3NlcWZlYXQubmFtZV1dIiBkYXRhLXNlcS1udW09Iltbc2VxTnVtYmVyXV0iPjwvY2FudmFzPgogICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tzaG91bGRTaG93SW1hZ2VDb250cm9scyhoYXNJbWFnZSwgYWxsb3dJbWFnZUNvbnRyb2xzKV1dIj4KICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImltYWdlLWNvbnRyb2xzIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5JbWFnZSB3aW5kb3dpbmcgKGNvbnRyYXN0KTwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzbGlkZXItaG9sZGVyIGluZGVudCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2xpZGVyLWxhYmVsIHdpbmRvd2luZy1sYWJlbCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaW5kb3cgY2VudGVyOgogICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXBlci1zbGlkZXIgY2xhc3M9InNsaWRlciIgZWRpdGFibGU9InRydWUiIG1heD0iMjU1IiBpbW1lZGlhdGUtdmFsdWU9Int7d2luZG93Q2VudGVyfX0iIHZhbHVlPSJbW3dpbmRvd0NlbnRlcl1dIj4KICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLXNsaWRlcj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InNsaWRlci1ob2xkZXIgaW5kZW50Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzbGlkZXItbGFiZWwgd2luZG93aW5nLWxhYmVsIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpbmRvdyB3aWR0aDoKICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFwZXItc2xpZGVyIGNsYXNzPSJzbGlkZXIiIGVkaXRhYmxlPSJ0cnVlIiBtYXg9IjUxMiIgbWluPSIxIiBpbW1lZGlhdGUtdmFsdWU9Int7d2luZG93V2lkdGh9fSIgdmFsdWU9Iltbd2luZG93V2lkdGhdXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXBlci1zbGlkZXI+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4LWNvbnRyb2xzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzY2FsZS1sYWJlbCI+SW1hZ2Ugc2NhbGUgcGVyY2VudGFnZTo8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFwZXItaW5wdXQgbm8tbGFiZWwtZmxvYXQgdHlwZT0ibnVtYmVyIiBtaW49IjEwIiBtYXg9IjUwMCIgdmFsdWU9Int7aW1hZ2VTY2FsZVBlcmNlbnRhZ2V9fSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXBlci1pbnB1dD4KICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uIGNsYXNzPSJpbWFnZS1zY2FsZS1idXR0b24iIG9uLWNsaWNrPSJ1cGRhdGVJbWFnZXMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0CiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXBlci1idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbWFnZS1ib3R0b20tYmFyIj4KICAgICAgICAgICAgICAgICAgICAgIDxwYXBlci1pY29uLWJ1dHRvbiBjbGFzcyQ9IltbZ2V0VXBsb2FkSW1hZ2VDbGFzcyhyZWFkb25seSldXSIgaWNvbj0iZmlsZS11cGxvYWQiIG9uLWNsaWNrPSJ1cGxvYWRJbWFnZUNsaWNrZWQiIGRhdGEtZmVhdHVyZT0iW1tzZXFmZWF0Lm5hbWVdXSIgdGl0bGU9IlVwbG9hZCBpbWFnZSI+CiAgICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLWljb24tYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgPHBhcGVyLWlucHV0IGNsYXNzPSJpbWFnZS11cGxvYWQtaW5wdXQiIHR5cGU9ImZpbGUiIG9uLWNoYW5nZT0iaGFuZGxlSW1hZ2VVcGxvYWQiIGRhdGEtZmVhdHVyZT0iW1tzZXFmZWF0Lm5hbWVdXSIgZGF0YS1pbmRleD0iW1tpbmRleF1dIiBkYXRhLXNlcS1udW09Iltbc2VxTnVtYmVyXV0iPgogICAgICAgICAgICAgICAgICAgICAgPC9wYXBlci1pbnB1dD4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgPC9wYXBlci1jYXJkPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbY29tcGFyZU1vZGVdXSI+CiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InZhbHVlLXBpbGxzLWhvbGRlciI+CiAgICAgICAgICAgICAgICAgICAgPHBhcGVyLWNhcmQgaWQ9IltbZ2V0Q29tcGFyZUltYWdlQ2FyZElkKHNlcWZlYXQubmFtZSldXSIgY2xhc3M9ImltYWdlY2FyZCI+CiAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPSJpbWFnZSIgc3JjJD0iW1tnZXRDb21wYXJlU2VxSW1hZ2VTcmMoc2VxZmVhdC5uYW1lLCBzZXFOdW1iZXIpXV0iIGlkPSJbW2dldENvbXBhcmVJbWFnZUlkKHNlcWZlYXQubmFtZSldXSI+CiAgICAgICAgICAgICAgICAgICAgICA8Y2FudmFzIGlkPSJbW2dldENvbXBhcmVDYW52YXNJZChzZXFmZWF0Lm5hbWUpXV0iIGRhdGEtZmVhdHVyZT0iW1tzZXFmZWF0Lm5hbWVdXSIgZGF0YS1zZXEtbnVtPSJbW3NlcU51bWJlcl1dIj48L2NhbnZhcz4KICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImltYWdlLWJvdHRvbS1iYXIiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvcGFwZXItY2FyZD4KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgICAgPHBhcGVyLWljb24tYnV0dG9uIGljb249Im1vcmUtaG9yaXoiIGNsYXNzJD0iW1tnZXRBZGRWYWx1ZUJ1dHRvbkNsYXNzKHJlYWRvbmx5KV1dIj48L3BhcGVyLWljb24tYnV0dG9uPgogICAgICAgICAgICAgICAgPHBhcGVyLWRpYWxvZz4KICAgICAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbiBkYXRhLWZlYXR1cmU9Iltbc2VxZmVhdC5uYW1lXV0iIG9uLWNsaWNrPSJkZWxldGVGZWF0dXJlIj4KICAgICAgICAgICAgICAgICAgICBEZWxldGUgZmVhdHVyZQogICAgICAgICAgICAgICAgICA8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgICAgICAgIDwvcGFwZXItZGlhbG9nPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIWlzSW1hZ2Uoc2VxZmVhdC5uYW1lKV1dIj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmZWF0dXJlLW5hbWUiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmVhdHVyZS1uYW1lLXRleHQiPltbc2VxZmVhdC5uYW1lXV08L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXgtY29udHJvbHMgdmFsdWUtcGlsbHMtaG9sZGVyIj4KICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2lzRXhwYW5kZWQoc2VxZmVhdC5uYW1lLCBleHBhbmRBbGxGZWF0dXJlcyldXSI+CiAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tnZXRTZXFGZWF0dXJlVmFsdWVzKHNlcWZlYXQubmFtZSwgc2VxTnVtYmVyKV1dIiBhcz0ic2VxdmFsdWUiPgogICAgICAgICAgICAgICAgICAgICAgPGlyb24tYXV0b2dyb3ctdGV4dGFyZWEgY2xhc3MkPSJbW2dldElucHV0UGlsbENsYXNzKHNlcWZlYXQubmFtZSwgZGlzcGxheU1vZGUpXV0iIHJlYWRvbmx5JD0iW1tyZWFkb25seV1dIiBvbi1pbnB1dD0ib25WYWx1ZUNoYW5nZWQiIG9uLWZvY3VzPSJvbklucHV0Rm9jdXMiIG9uLWJsdXI9Im9uSW5wdXRCbHVyIiBkYXRhLWZlYXR1cmU9Iltbc2VxZmVhdC5uYW1lXV0iIGRhdGEtaW5kZXg9IltbaW5kZXhdXSIgZGF0YS1zZXEtbnVtPSJbW3NlcU51bWJlcl1dIiB2YWx1ZT0iW1tzZXF2YWx1ZV1dIj4KICAgICAgICAgICAgICAgICAgICAgIDwvaXJvbi1hdXRvZ3Jvdy10ZXh0YXJlYT4KICAgICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIWlzRXhwYW5kZWQoc2VxZmVhdC5uYW1lLCBleHBhbmRBbGxGZWF0dXJlcyldXSI+CiAgICAgICAgICAgICAgICAgICAgPGlyb24tYXV0b2dyb3ctdGV4dGFyZWEgY2xhc3MkPSJbW2dldElucHV0UGlsbENsYXNzKHNlcWZlYXQubmFtZSwgZGlzcGxheU1vZGUpXV0iIHJlYWRvbmx5JD0iW1tyZWFkb25seV1dIiBvbi1pbnB1dD0ib25WYWx1ZUNoYW5nZWQiIG9uLWZvY3VzPSJvbklucHV0Rm9jdXMiIG9uLWJsdXI9Im9uSW5wdXRCbHVyIiBkYXRhLWZlYXR1cmU9Iltbc2VxZmVhdC5uYW1lXV0iIGRhdGEtaW5kZXg9IltbemVyb0luZGV4XV0iIGRhdGEtc2VxLW51bT0iW1tzZXFOdW1iZXJdXSIgdmFsdWU9IltbZ2V0Rmlyc3RTZXFGZWF0dXJlVmFsdWUoc2VxZmVhdC5uYW1lLCBzZXFOdW1iZXIpXV0iPgogICAgICAgICAgICAgICAgICAgIDwvaXJvbi1hdXRvZ3Jvdy10ZXh0YXJlYT4KICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Iltbc2VxRmVhdHVyZUhhc011bHRpcGxlVmFsdWVzKHNlcWZlYXQubmFtZSwgc2VxTnVtYmVyKV1dIj4KICAgICAgICAgICAgICAgICAgICAgIDxwYXBlci1idXR0b24gZGF0YS1mZWF0dXJlPSJbW3NlcWZlYXQubmFtZV1dIiBvbi1jbGljaz0iZXhwYW5kRmVhdHVyZSIgY2xhc3MkPSJbW2dldElucHV0UGlsbENsYXNzKHNlcWZlYXQubmFtZSwgZGlzcGxheU1vZGUpXV0iPgogICAgICAgICAgICAgICAgICAgICAgICAuLi4KICAgICAgICAgICAgICAgICAgICAgIDwvcGFwZXItYnV0dG9uPgogICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tjb21wYXJlTW9kZV1dIj4KICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmxleC1jb250cm9scyB2YWx1ZS1waWxscy1ob2xkZXIiPgogICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tpc0V4cGFuZGVkKHNlcWZlYXQubmFtZSwgZXhwYW5kQWxsRmVhdHVyZXMpXV0iPgogICAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tnZXRDb21wYXJlU2VxRmVhdHVyZVZhbHVlcyhzZXFmZWF0Lm5hbWUsIHNlcU51bWJlcildXSIgYXM9InNlcXZhbHVlIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGlyb24tYXV0b2dyb3ctdGV4dGFyZWEgY2xhc3MkPSJbW2dldFNlcUNvbXBhcmVJbnB1dENsYXNzKHNlcWZlYXQubmFtZSwgZGlzcGxheU1vZGUsIHNlcU51bWJlciwgaW5kZXgpXV0iIHJlYWRvbmx5IHZhbHVlPSJbW3NlcXZhbHVlXV0iPgogICAgICAgICAgICAgICAgICAgICAgICA8L2lyb24tYXV0b2dyb3ctdGV4dGFyZWE+CiAgICAgICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbWyFpc0V4cGFuZGVkKHNlcWZlYXQubmFtZSwgZXhwYW5kQWxsRmVhdHVyZXMpXV0iPgogICAgICAgICAgICAgICAgICAgICAgPGlyb24tYXV0b2dyb3ctdGV4dGFyZWEgY2xhc3MkPSJbW2dldFNlcUNvbXBhcmVJbnB1dENsYXNzKHNlcWZlYXQubmFtZSwgZGlzcGxheU1vZGUsIHNlcU51bWJlciwgemVyb0luZGV4KV1dIiByZWFkb25seSB2YWx1ZT0iW1tnZXRGaXJzdENvbXBhcmVTZXFGZWF0dXJlVmFsdWUoc2VxZmVhdC5uYW1lLCBzZXFOdW1iZXIpXV0iPgogICAgICAgICAgICAgICAgICAgICAgPC9pcm9uLWF1dG9ncm93LXRleHRhcmVhPgogICAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2NvbXBhcmVTZXFGZWF0dXJlSGFzTXVsdGlwbGVWYWx1ZXMoc2VxZmVhdC5uYW1lLCBzZXFOdW1iZXIpXV0iPgogICAgICAgICAgICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uIGRhdGEtZmVhdHVyZT0iW1tzZXFmZWF0Lm5hbWVdXSIgb24tY2xpY2s9ImV4cGFuZEZlYXR1cmUiIGNsYXNzJD0iW1tnZXRTZXFDb21wYXJlSW5wdXRDbGFzcyhzZXFmZWF0Lm5hbWUsIGRpc3BsYXlNb2RlLCBzZXFOdW1iZXIpXV0iPgogICAgICAgICAgICAgICAgICAgICAgICAgIC4uLgogICAgICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgICAgPHBhcGVyLWljb24tYnV0dG9uIGljb249Im1vcmUtaG9yaXoiIGNsYXNzJD0iW1tnZXRBZGRWYWx1ZUJ1dHRvbkNsYXNzKHJlYWRvbmx5KV1dIj48L3BhcGVyLWljb24tYnV0dG9uPgogICAgICAgICAgICAgICAgPHBhcGVyLWRpYWxvZz4KICAgICAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbiBkYXRhLWZlYXR1cmU9Iltbc2VxZmVhdC5uYW1lXV0iIG9uLWNsaWNrPSJkZWxldGVGZWF0dXJlIj4KICAgICAgICAgICAgICAgICAgICBEZWxldGUgZmVhdHVyZQogICAgICAgICAgICAgICAgICA8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbiBkYXRhLWZlYXR1cmU9Iltbc2VxZmVhdC5uYW1lXV0iIGRhdGEtc2VxLW51bT0iW1tzZXFOdW1iZXJdXSIgb24tY2xpY2s9ImFkZFZhbHVlIiBjbGFzcz0iZmVhdHVyZS1kaWFsb2ctYnV0dG9uIj4KICAgICAgICAgICAgICAgICAgICBBZGQgZmVhdHVyZSB2YWx1ZQogICAgICAgICAgICAgICAgICA8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgICAgICAgIDwvcGFwZXItZGlhbG9nPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPHBhcGVyLWljb24tYnV0dG9uIG9uLWNsaWNrPSJvcGVuQWRkRmVhdHVyZURpYWxvZyIgaWNvbj0iYWRkIiB0aXRsZT0iQWRkIGZlYXR1cmUiIGNsYXNzJD0iW1tnZXRBZGRWYWx1ZUJ1dHRvbkNsYXNzKHJlYWRvbmx5KV1dIj4KICAgICAgPC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgPGRpdiBjbGFzcyQ9IltbZ2V0U2FsaWVuY3lDb250cm9sc0hvbGRlckNsYXNzKHNhbGllbmN5KV1dIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzYWxpZW5jeS1sZWdlbmQtbGFiZWwiPkF0dHJpYnV0aW9uIGxlZ2VuZDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImZsZXgtY29udHJvbHMiPgogICAgICAgICAgPHN2ZyBpZD0ic2FsaWVuY3lMZWdlbmQiPjwvc3ZnPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogICAgPHBhcGVyLWljb24tYnV0dG9uIGlkPSJkZWxldGV2YWx1ZSIgaWNvbj0iZGVsZXRlIiBjbGFzcyQ9IltbZ2V0RGVsZXRlVmFsdWVCdXR0b25DbGFzcyhyZWFkb25seSwgc2hvd0RlbGV0ZVZhbHVlQnV0dG9uKV1dIiBkYXRhLWZlYXR1cmU9IltbZm9jdXNlZEZlYXR1cmVOYW1lXV0iIGRhdGEtaW5kZXg9IltbZm9jdXNlZEZlYXR1cmVWYWx1ZUluZGV4XV0iIGRhdGEtc2VxLW51bT0iW1tmb2N1c2VkU2VxTnVtYmVyXV0iIG9uLWNsaWNrPSJkZWxldGVWYWx1ZSIgdGl0bGU9IkRlbGV0ZSB2YWx1ZSI+CiAgICA8L3BhcGVyLWljb24tYnV0dG9uPgogICAgPHBhcGVyLWRpYWxvZyBpZD0iYWRkRmVhdHVyZURpYWxvZyI+CiAgICAgIDxoMj5BZGQgRmVhdHVyZTwvaDI+CiAgICAgIDxwYXBlci1pbnB1dCBsYWJlbD0iRmVhdHVyZSBuYW1lIiB2YWx1ZT0ie3tuZXdGZWF0dXJlTmFtZX19Ij48L3BhcGVyLWlucHV0PgogICAgICA8cGFwZXItcmFkaW8tZ3JvdXAgc2VsZWN0ZWQ9Int7bmV3RmVhdHVyZVR5cGV9fSI+CiAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbiBuYW1lPSJpbnQiPkludDwvcGFwZXItcmFkaW8tYnV0dG9uPgogICAgICAgIDxwYXBlci1yYWRpby1idXR0b24gbmFtZT0iZmxvYXQiPkZsb2F0PC9wYXBlci1yYWRpby1idXR0b24+CiAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbiBuYW1lPSJieXRlcyI+Qnl0ZXM8L3BhcGVyLXJhZGlvLWJ1dHRvbj4KICAgICAgPC9wYXBlci1yYWRpby1ncm91cD4KICAgICAgPHBhcGVyLWJ1dHRvbiBkaWFsb2ctZGlzbWlzcyBjbGFzcz0iY29udHJvbC1idXR0b24iIG9uLWNsaWNrPSJhZGRGZWF0dXJlIiBkaXNhYmxlZD0iW1shc2hvdWxkRW5hYmxlQWRkRmVhdHVyZShuZXdGZWF0dXJlTmFtZSldXSI+CiAgICAgICAgQ3JlYXRlCiAgICAgIDwvcGFwZXItYnV0dG9uPgogICAgPC9wYXBlci1kaWFsb2c+CiAgPC90ZW1wbGF0ZT4KICA8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdnotZXhhbXBsZS12aWV3ZXIvdnotZXhhbXBsZS12aWV3ZXIuanMKdmFyIHFxOwooZnVuY3Rpb24oKXtjb25zdCBhPWQzLmludGVycG9sYXRlUmdiLGM9L15pbWFnZVwvKFteXC9dK1wvKSplbmNvZGVkJC8sZD1bMSwyMF07UG9seW1lcih7aXM6InZ6LWV4YW1wbGUtdmlld2VyIixwcm9wZXJ0aWVzOntleGFtcGxlOnt0eXBlOk9iamVjdH0sc2VyaWFsaXplZEV4YW1wbGU6e3R5cGU6U3RyaW5nLG9ic2VydmVyOiJ1cGRhdGVFeGFtcGxlIn0sc2VyaWFsaXplZFNlcUV4YW1wbGU6e3R5cGU6U3RyaW5nLG9ic2VydmVyOiJ1cGRhdGVTZXFFeGFtcGxlIn0sanNvbjp7dHlwZTpPYmplY3Qsb2JzZXJ2ZXI6ImNyZWF0ZUV4YW1wbGVzRnJvbUpzb24ifSxzYWxpZW5jeTp7dHlwZTpPYmplY3QsdmFsdWU6e319LHNhbGllbmN5SnNvblN0cmluZzp7dHlwZTpTdHJpbmcsb2JzZXJ2ZXI6ImhhdmVTYWxpZW5jeUpzb24ifSxyZWFkb25seTp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxzZXFOdW1iZXI6e3R5cGU6TnVtYmVyLHZhbHVlOjAsb2JzZXJ2ZXI6Im5ld1NlcU51bSJ9LGlzU2VxdWVuY2U6Qm9vbGVhbiwKY2hhbmdlQ2FsbGJhY2tUaW1lcjpOdW1iZXIsaWdub3JlQ2hhbmdlOkJvb2xlYW4sbWluU2FsOnt0eXBlOk51bWJlcix2YWx1ZTowfSxtYXhTYWw6e3R5cGU6TnVtYmVyLHZhbHVlOjB9LHNob3dTYWxpZW5jeTp7dHlwZTpCb29sZWFuLHZhbHVlOiEwfSxpbWFnZUluZm86e3R5cGU6T2JqZWN0LHZhbHVlOnt9fSx3aW5kb3dXaWR0aDp7dHlwZTpOdW1iZXIsdmFsdWU6MjU2fSx3aW5kb3dDZW50ZXI6e3R5cGU6TnVtYmVyLHZhbHVlOjEyOH0sc2FsaWVuY3lDdXRvZmY6e3R5cGU6TnVtYmVyLHZhbHVlOjB9LGhhc0ltYWdlOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITB9LGFsbG93SW1hZ2VDb250cm9sczp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxpbWFnZVNjYWxlUGVyY2VudGFnZTp7dHlwZTpOdW1iZXIsdmFsdWU6MTAwfSxmZWF0dXJlczp7dHlwZTpPYmplY3QsY29tcHV0ZWQ6ImdldEZlYXR1cmVzKGV4YW1wbGUpIn0sZmVhdHVyZXNMaXN0Ont0eXBlOk9iamVjdCxjb21wdXRlZDoiZ2V0RmVhdHVyZXNMaXN0KGZlYXR1cmVzLCBjb21wYXJlRmVhdHVyZXMpIn0sCnNlcUZlYXR1cmVzOnt0eXBlOk9iamVjdCxjb21wdXRlZDoiZ2V0U2VxRmVhdHVyZXMoZXhhbXBsZSkifSxzZXFGZWF0dXJlc0xpc3Q6e3R5cGU6T2JqZWN0LGNvbXB1dGVkOiJnZXRGZWF0dXJlc0xpc3Qoc2VxRmVhdHVyZXMsIGNvbXBhcmVTZXFGZWF0dXJlcykifSxtYXhTZXFOdW1iZXI6e3R5cGU6TnVtYmVyLGNvbXB1dGVkOiJnZXRNYXhTZXFOdW1iZXIoc2VxRmVhdHVyZXNMaXN0KSJ9LGNvbG9yczp7dHlwZTpPYmplY3QsY29tcHV0ZWQ6ImdldENvbG9ycyhzYWxpZW5jeSkiLG9ic2VydmVyOiJjcmVhdGVMZWdlbmQifSxkaXNwbGF5TW9kZTp7dHlwZTpTdHJpbmcsdmFsdWU6ImdyaWQifSxmZWF0dXJlU2VhcmNoVmFsdWU6e3R5cGU6U3RyaW5nLHZhbHVlOiIiLG5vdGlmeTohMH0sZmlsdGVyZWRGZWF0dXJlc0xpc3Q6e3R5cGU6T2JqZWN0fSxmaWx0ZXJlZFNlcUZlYXR1cmVzTGlzdDp7dHlwZTpPYmplY3R9LGZvY3VzZWRGZWF0dXJlTmFtZTpTdHJpbmcsZm9jdXNlZEZlYXR1cmVWYWx1ZUluZGV4Ok51bWJlciwKZm9jdXNlZFNlcU51bWJlcjpOdW1iZXIsc2hvd0RlbGV0ZVZhbHVlQnV0dG9uOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGV4cGFuZGVkRmVhdHVyZXM6e3R5cGU6T2JqZWN0LHZhbHVlOnt9fSxleHBhbmRBbGxGZWF0dXJlczp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSx6ZXJvSW5kZXg6e3R5cGU6TnVtYmVyLHZhbHVlOjB9LGNvbXBhcmVKc29uOnt0eXBlOk9iamVjdCxvYnNlcnZlcjoiY3JlYXRlQ29tcGFyZUV4YW1wbGVzRnJvbUpzb24ifSxjb21wYXJlRXhhbXBsZTp7dHlwZTpPYmplY3R9LGNvbXBhcmVGZWF0dXJlczp7dHlwZTpPYmplY3QsY29tcHV0ZWQ6ImdldEZlYXR1cmVzKGNvbXBhcmVFeGFtcGxlKSIsb2JzZXJ2ZXI6InVwZGF0ZUNvbXBhcmVNb2RlIn0sY29tcGFyZVNlcUZlYXR1cmVzOnt0eXBlOk9iamVjdCxjb21wdXRlZDoiZ2V0U2VxRmVhdHVyZXMoY29tcGFyZUV4YW1wbGUpIixvYnNlcnZlcjoidXBkYXRlQ29tcGFyZU1vZGUifSxjb21wYXJlTW9kZTpCb29sZWFuLApjb21wYXJlSW1hZ2VJbmZvOnt0eXBlOk9iamVjdCx2YWx1ZTp7fX0sY29tcGFyZVRpdGxlOlN0cmluZ30sb2JzZXJ2ZXJzOlsiaGF2ZVNhbGllbmN5KGZpbHRlcmVkRmVhdHVyZXNMaXN0LCBzYWxpZW5jeSwgY29sb3JzLCBzaG93U2FsaWVuY3ksIHNhbGllbmN5Q3V0b2ZmKSIsInNlcVNhbGllbmN5KHNlcU51bWJlciwgc2VxRmVhdHVyZXNMaXN0LCBzYWxpZW5jeSwgY29sb3JzLCBzaG93U2FsaWVuY3ksIHNhbGllbmN5Q3V0b2ZmKSIsInNldEZpbHRlcmVkRmVhdHVyZXNMaXN0KGZlYXR1cmVzTGlzdCwgZmVhdHVyZVNlYXJjaFZhbHVlLCBzYWxpZW5jeSkiLCJzZXRGaWx0ZXJlZFNlcUZlYXR1cmVzTGlzdChzZXFGZWF0dXJlc0xpc3QsIGZlYXR1cmVTZWFyY2hWYWx1ZSwgc2FsaWVuY3kpIl0saXNFeHBhbmRlZDpmdW5jdGlvbihmKXtyZXR1cm4gdGhpcy5leHBhbmRBbGxGZWF0dXJlc3x8dGhpcy5zYW5pdGl6ZUZlYXR1cmUoZilpbiB0aGlzLmV4cGFuZGVkRmVhdHVyZXN9LHVwZGF0ZUV4YW1wbGU6ZnVuY3Rpb24oKXt0aGlzLmRlc2VyaWFsaXplRXhhbXBsZSh0aGlzLnNlcmlhbGl6ZWRFeGFtcGxlLAppaSl9LHVwZGF0ZVNlcUV4YW1wbGU6ZnVuY3Rpb24oKXt0aGlzLmRlc2VyaWFsaXplRXhhbXBsZSh0aGlzLnNlcmlhbGl6ZWRTZXFFeGFtcGxlLG1pKX0sc3RyaW5nVG9VaW50OEFycmF5OmZ1bmN0aW9uKGYpe3JldHVybihuZXcgd2luZG93LlRleHRFbmNvZGVyKS5lbmNvZGUoZil9LGRlc2VyaWFsaXplRXhhbXBsZTpmdW5jdGlvbihmLGcpe3RoaXMuaWdub3JlQ2hhbmdlfHwoZj10aGlzLmRlY29kZWRTdHJpbmdUb0NoYXJDb2RlcyhhdG9iKGYpKSx0aGlzLmV4YW1wbGU9ZyhmKSl9LGdldEZlYXR1cmVzOmZ1bmN0aW9uKGYpe3RoaXMuaW1hZ2VJbmZvPXt9O3RoaXMuaGFzSW1hZ2U9ITE7aWYobnVsbD09ZilyZXR1cm4gbmV3IE1hcChbXSk7aWYoZiBpbnN0YW5jZW9mIGZpKXJldHVybiB0aGlzLmlzU2VxdWVuY2U9ITEsZi5oYXNGZWF0dXJlcygpfHxmLnNldEZlYXR1cmVzKG5ldyBZZyksZi5nZXRGZWF0dXJlcygpLmdldEZlYXR1cmVNYXAoKTt0aGlzLmlzU2VxdWVuY2U9ITA7Zi5oYXNDb250ZXh0KCl8fApmLnNldENvbnRleHQobmV3IFlnKTtyZXR1cm4gZi5nZXRDb250ZXh0KCkuZ2V0RmVhdHVyZU1hcCgpfSxnZXRGZWF0dXJlc0xpc3Q6ZnVuY3Rpb24oZixnKXtpZihudWxsPT1mKXJldHVybltdO2NvbnN0IGw9W10saz17fTtsZXQgbT1mLmtleXMoKTtpZihtKXtsZXQgcD1tLm5leHQoKTtmb3IoOyFwLmRvbmU7KWwucHVzaCh7bmFtZTpwLnZhbHVlLGZlYXR1cmU6Zi5nZXQocC52YWx1ZSl9KSxrW3AudmFsdWVdPSEwLHA9bS5uZXh0KCl9aWYobnVsbD09ZylyZXR1cm4gbDtpZihtPWcua2V5cygpKWZvcihmPW0ubmV4dCgpOyFmLmRvbmU7KWYudmFsdWUgaW4ga3x8KGwucHVzaCh7bmFtZTpmLnZhbHVlLGZlYXR1cmU6Zy5nZXQoZi52YWx1ZSl9KSxrW2YudmFsdWVdPSEwKSxmPW0ubmV4dCgpO3JldHVybiBsfSxnZXRTZXFGZWF0dXJlczpmdW5jdGlvbihmKXtyZXR1cm4gbnVsbD09Znx8ZiBpbnN0YW5jZW9mIGZpP25ldyBNYXAoW10pOnRoaXMuZXhhbXBsZS5nZXRGZWF0dXJlTGlzdHMoKS5nZXRGZWF0dXJlTGlzdE1hcCgpfSwKc2V0RmlsdGVyZWRGZWF0dXJlc0xpc3Q6ZnVuY3Rpb24oZixnLGwpe3RoaXMuZmlsdGVyZWRGZWF0dXJlc0xpc3Q9W107dGhpcy5maWx0ZXJlZEZlYXR1cmVzTGlzdD10aGlzLmdldEZpbHRlcmVkRmVhdHVyZXNMaXN0KGYsZyxsKX0sc2V0RmlsdGVyZWRTZXFGZWF0dXJlc0xpc3Q6ZnVuY3Rpb24oZixnLGwpe3RoaXMuZmlsdGVyZWRTZXFGZWF0dXJlc0xpc3Q9W107dGhpcy5maWx0ZXJlZFNlcUZlYXR1cmVzTGlzdD10aGlzLmdldEZpbHRlcmVkRmVhdHVyZXNMaXN0KGYsZyxsKX0sZ2V0RmlsdGVyZWRGZWF0dXJlc0xpc3Q6ZnVuY3Rpb24oZixnLGwpe2lmKG51bGwhPWYpe3ZhciBrPWYsbT1sJiYwPE9iamVjdC5rZXlzKGwpLmxlbmd0aCxwPW0/T2JqZWN0LmFzc2lnbih7fSwuLi5PYmplY3Qua2V5cyhsKS5tYXAocT0+KHtbcV06Im51bWJlciI9PXR5cGVvZiBsW3FdP2xbcV06bFtxXS5yZWR1Y2UoKHIsdCk9PnIrdCwwKX0pKSk6e307aWYoIiIhPWcpe2NvbnN0IHE9bmV3IFJlZ0V4cChnLAoiaSIpO2s9Zi5maWx0ZXIocj0+cS50ZXN0KHIubmFtZSkpfXJldHVybiBrLnNvcnQoKHEscik9PntpZih0aGlzLmlzSW1hZ2UocS5uYW1lKSYmIXRoaXMuaXNJbWFnZShyLm5hbWUpKXJldHVybi0xO2lmKHRoaXMuaXNJbWFnZShyLm5hbWUpJiYhdGhpcy5pc0ltYWdlKHEubmFtZSkpcmV0dXJuIDE7aWYobSl7aWYocS5uYW1lIGluIGwmJiEoci5uYW1lIGluIGwpKXJldHVybi0xO2lmKHIubmFtZSBpbiBsJiYhKHEubmFtZSBpbiBsKSlyZXR1cm4gMTt7Y29uc3QgdD1wW3IubmFtZV0tcFtxLm5hbWVdO2lmKDAhPXQpcmV0dXJuIHR9fXJldHVybiBxLm5hbWUubG9jYWxlQ29tcGFyZShyLm5hbWUpfSl9fSxnZXRNYXhTZXFOdW1iZXI6ZnVuY3Rpb24oKXtsZXQgZj0tMTtmb3IoY29uc3QgZyBvZiB0aGlzLnNlcUZlYXR1cmVzTGlzdCl7Y29uc3QgbD1nLmZlYXR1cmU7bCYmbC5nZXRGZWF0dXJlTGlzdCgpLmxlbmd0aC0xPmYmJihmPWwuZ2V0RmVhdHVyZUxpc3QoKS5sZW5ndGgtMSl9cmV0dXJuIGZ9LApoYXZlU2FsaWVuY3lKc29uOmZ1bmN0aW9uKCl7dGhpcy5zYWxpZW5jeT1KU09OLnBhcnNlKHRoaXMuc2FsaWVuY3lKc29uU3RyaW5nKX0sZ2V0Q29sb3JzOmZ1bmN0aW9uKCl7W3RoaXMubWluU2FsLHRoaXMubWF4U2FsXT10aGlzLmdldE1pbk1heFNhbGllbmN5KHRoaXMuc2FsaWVuY3kpO3JldHVybiBkMy5zY2FsZUxpbmVhcigpLmRvbWFpbihbdGhpcy5taW5TYWwsMCx0aGlzLm1heFNhbF0pLmludGVycG9sYXRlKGEpLmNsYW1wKCEwKS5yYW5nZShbIiNGRjg0N0MiLCIjZmZmIiwiIzAwN0I4MyJdKX0sc2VsZWN0QWxsOmZ1bmN0aW9uKGYpe3JldHVybiBkMy5zZWxlY3RBbGwoUG9seW1lci5kb20odGhpcy5yb290KS5xdWVyeVNlbGVjdG9yQWxsKGYpKX0saGF2ZVNhbGllbmN5OmZ1bmN0aW9uKCl7cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT50aGlzLl9oYXZlU2FsaWVuY3lJbXBsKCkpfSxfaGF2ZVNhbGllbmN5SW1wbDpmdW5jdGlvbigpe3RoaXMuc2VsZWN0QWxsKCIudmFsdWUtcGlsbCIpLnN0eWxlKCJiYWNrZ3JvdW5kIiwKIiNmZmYiKTtpZih0aGlzLmZpbHRlcmVkRmVhdHVyZXNMaXN0JiZ0aGlzLnNhbGllbmN5JiYwIT09T2JqZWN0LmtleXModGhpcy5zYWxpZW5jeSkubGVuZ3RoJiZ0aGlzLmNvbG9ycylmb3IoY29uc3QgZyBvZiB0aGlzLmZpbHRlcmVkRmVhdHVyZXNMaXN0KXtjb25zdCBsPXRoaXMuc2FsaWVuY3lbZy5uYW1lXTtpZihsKXt2YXIgZj1BcnJheS5pc0FycmF5KGwpPyhrLG0pPT50aGlzLmdldENvbG9yRm9yU2FsaWVuY3kobFttXSk6KCk9PnRoaXMuZ2V0Q29sb3JGb3JTYWxpZW5jeShsKTt0aGlzLnNlbGVjdEFsbChgLiR7dGhpcy5zYW5pdGl6ZUZlYXR1cmUoZy5uYW1lKX0udmFsdWUtcGlsbGApLnN0eWxlKCJiYWNrZ3JvdW5kIix0aGlzLnNob3dTYWxpZW5jeT9mOigpPT4iI2ZmZiIpO2lmKEFycmF5LmlzQXJyYXkobCkpe2Y9bDtjb25zdCBrPXRoaXMuc2VsZWN0QWxsKGBwYXBlci1idXR0b24uJHt0aGlzLnNhbml0aXplRmVhdHVyZShnLm5hbWUpfS52YWx1ZS1waWxsYCk7bGV0IG09CjA7Zm9yKGxldCBwPTE7cDxmLmxlbmd0aDtwKyspTWF0aC5hYnMoZltwXSk+TWF0aC5hYnMobSkmJihtPWZbcF0pO2suc3R5bGUoImJhY2tncm91bmQiLHRoaXMuc2hvd1NhbGllbmN5PygpPT50aGlzLmdldENvbG9yRm9yU2FsaWVuY3kobSk6KCk9PiIjZmZmIil9fX19LG5ld1NlcU51bTpmdW5jdGlvbigpe3RoaXMuc2VxU2FsaWVuY3koKX0sc2VxU2FsaWVuY3k6ZnVuY3Rpb24oKXtpZih0aGlzLnNlcUZlYXR1cmVzTGlzdCYmdGhpcy5zYWxpZW5jeSYmMCE9PU9iamVjdC5rZXlzKHRoaXMuc2FsaWVuY3kpLmxlbmd0aCYmdGhpcy5jb2xvcnMpaWYodGhpcy5zZWxlY3RBbGwoIi52YWx1ZSBpbnB1dCIpLnNpemUoKTx0aGlzLnNlcUZlYXR1cmVzTGlzdC5sZW5ndGgpcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT50aGlzLnNlcVNhbGllbmN5KCkpO2Vsc2UgZm9yKGNvbnN0IGcgb2YgdGhpcy5zZXFGZWF0dXJlc0xpc3Qpe3ZhciBmPXRoaXMuc2FsaWVuY3lbZy5uYW1lXTtpZighZiljb250aW51ZTsKY29uc3QgbD1mW3RoaXMuc2VxTnVtYmVyXTtmPUFycmF5LmlzQXJyYXkobCk/KGssbSk9PnRoaXMuZ2V0Q29sb3JGb3JTYWxpZW5jeShsW21dKTooKT0+dGhpcy5nZXRDb2xvckZvclNhbGllbmN5KGwpO3RoaXMuc2VsZWN0QWxsKGAuJHt0aGlzLnNhbml0aXplRmVhdHVyZShnLm5hbWUpfSBpbnB1dGApLnN0eWxlKCJjb2xvciIsdGhpcy5zaG93U2FsaWVuY3k/ZjooKT0+ImJsYWNrIil9fSxnZXRNaW5NYXhTYWxpZW5jeTpmdW5jdGlvbihmKXtsZXQgZz1JbmZpbml0eSxsPS1JbmZpbml0eTtjb25zdCBrPW09PntpZihBcnJheS5pc0FycmF5KG0pKWZvcihjb25zdCBwIG9mIG0payhwKTtlbHNlIG08ZyYmKGc9bSksbT5sJiYobD1tKX07Zm9yKGNvbnN0IG0gaW4gZilmLmhhc093blByb3BlcnR5KG0pJiZrKGZbbV0pO2c9Ljk1Kk1hdGgubWluKDAsZyk7bD0uOTUqTWF0aC5tYXgoMCxsKTswPmcmJmw+TWF0aC5hYnMoZyk/Zz0tMSpsOjA8bCYmTWF0aC5hYnMoZyk+bCYmKGw9LTEqZyk7CnJldHVybltnLGxdfSxnZXRGZWF0dXJlVmFsdWVzOmZ1bmN0aW9uKGYsZyxsLGspe3JldHVybihmPWs/dGhpcy5jb21wYXJlRmVhdHVyZXMuZ2V0KGYpOnRoaXMuZmVhdHVyZXMuZ2V0KGYpKT9mLmdldEJ5dGVzTGlzdCgpP2c/Zi5nZXRCeXRlc0xpc3QoKS5nZXRWYWx1ZUxpc3QoKS5zbGljZSgpOmYuZ2V0Qnl0ZXNMaXN0KCkuZ2V0VmFsdWVMaXN0X2FzVTgoKS5tYXAobT0+dGhpcy5kZWNvZGVCeXRlc0xpc3RTdHJpbmcobSxsKSk6Zi5nZXRJbnQ2NExpc3QoKT9mLmdldEludDY0TGlzdCgpLmdldFZhbHVlTGlzdCgpLnNsaWNlKCk6Zi5nZXRGbG9hdExpc3QoKT9mLmdldEZsb2F0TGlzdCgpLmdldFZhbHVlTGlzdCgpLnNsaWNlKCk6W106W119LGdldENvbXBhcmVGZWF0dXJlVmFsdWVzOmZ1bmN0aW9uKGYsZyxsKXtyZXR1cm4gdGhpcy5nZXRGZWF0dXJlVmFsdWVzKGYsZyxsLCEwKX0sZ2V0Rmlyc3RGZWF0dXJlVmFsdWU6ZnVuY3Rpb24oZil7cmV0dXJuIHRoaXMuZ2V0RmVhdHVyZVZhbHVlcyhmKVswXX0sCmdldEZpcnN0Q29tcGFyZUZlYXR1cmVWYWx1ZTpmdW5jdGlvbihmKXtyZXR1cm4gdGhpcy5nZXRDb21wYXJlRmVhdHVyZVZhbHVlcyhmKVswXX0sZmVhdHVyZUhhc011bHRpcGxlVmFsdWVzOmZ1bmN0aW9uKGYpe3JldHVybiAxPHRoaXMuZ2V0RmVhdHVyZVZhbHVlcyhmKS5sZW5ndGh9LGNvbXBhcmVGZWF0dXJlSGFzTXVsdGlwbGVWYWx1ZXM6ZnVuY3Rpb24oZil7cmV0dXJuIDE8dGhpcy5nZXRDb21wYXJlRmVhdHVyZVZhbHVlcyhmKS5sZW5ndGh9LGdldFNlcUZlYXR1cmVWYWx1ZXM6ZnVuY3Rpb24oZixnLGwsayxtKXtmPW0/dGhpcy5jb21wYXJlU2VxRmVhdHVyZXMuZ2V0KGYpOnRoaXMuc2VxRmVhdHVyZXMuZ2V0KGYpO2lmKCFmKXJldHVybltdO2Y9Zi5nZXRGZWF0dXJlTGlzdCgpO3JldHVybiFmfHxmLmxlbmd0aDw9Zz9bXTooZz1mW2ddKT9nLmdldEJ5dGVzTGlzdCgpP2w/Zy5nZXRCeXRlc0xpc3QoKS5nZXRWYWx1ZUxpc3QoKTpnLmdldEJ5dGVzTGlzdCgpLmdldFZhbHVlTGlzdF9hc1U4KCkubWFwKHA9Pgp0aGlzLmRlY29kZUJ5dGVzTGlzdFN0cmluZyhwLGspKTpnLmdldEludDY0TGlzdCgpP2cuZ2V0SW50NjRMaXN0KCkuZ2V0VmFsdWVMaXN0KCk6Zy5nZXRGbG9hdExpc3QoKT9nLmdldEZsb2F0TGlzdCgpLmdldFZhbHVlTGlzdCgpOltdOltdfSxnZXRDb21wYXJlU2VxRmVhdHVyZVZhbHVlczpmdW5jdGlvbihmLGcsbCxrKXtyZXR1cm4gdGhpcy5nZXRTZXFGZWF0dXJlVmFsdWVzKGYsZyxsLGssITApfSxnZXRGaXJzdFNlcUZlYXR1cmVWYWx1ZTpmdW5jdGlvbihmLGcpe3JldHVybiB0aGlzLmdldFNlcUZlYXR1cmVWYWx1ZXMoZixnKVswXX0sZ2V0Rmlyc3RTZXFDb21wYXJlRmVhdHVyZVZhbHVlOmZ1bmN0aW9uKGYsZyl7cmV0dXJuIHRoaXMuZ2V0Q29tcGFyZVNlcUZlYXR1cmVWYWx1ZXMoZixnKVswXX0sc2VxRmVhdHVyZUhhc011bHRpcGxlVmFsdWVzOmZ1bmN0aW9uKGYsZyl7cmV0dXJuIDE8dGhpcy5nZXRTZXFGZWF0dXJlVmFsdWVzKGYsZykubGVuZ3RofSxjb21wYXJlU2VxRmVhdHVyZUhhc011bHRpcGxlVmFsdWVzOmZ1bmN0aW9uKGYsCmcpe3JldHVybiAxPHRoaXMuZ2V0Q29tcGFyZVNlcUZlYXR1cmVWYWx1ZXMoZixnKS5sZW5ndGh9LGRlY29kZUJ5dGVzTGlzdFN0cmluZzpmdW5jdGlvbihmLGcpe3JldHVybiAzMjc2OEUzPGYubGVuZ3RoPyJTdHJpbmcgdG9vIGxhcmdlIHRvIGRpc3BsYXkiOmc/dGhpcy5kZWNvZGVCeXRlc0xpc3RUb1N0cmluZyhmKToobmV3IHdpbmRvdy5UZXh0RGVjb2RlcikuZGVjb2RlKGYpfSxpc0J5dGVzRmVhdHVyZTpmdW5jdGlvbihmKXtjb25zdCBnPXRoaXMuZmVhdHVyZXMuZ2V0KGYpO3JldHVybiBnJiZnLmhhc0J5dGVzTGlzdCgpPyEwOihmPXRoaXMuc2VxRmVhdHVyZXMuZ2V0KGYpKSYmZi5nZXRGZWF0dXJlTGlzdCgpWzBdLmhhc0J5dGVzTGlzdCgpPyEwOiExfSxnZXRKc29uRmVhdHVyZTpmdW5jdGlvbihmKXtpZighdGhpcy5qc29uKXJldHVybiBudWxsO2lmKHRoaXMuanNvbi5mZWF0dXJlcyYmdGhpcy5qc29uLmZlYXR1cmVzLmZlYXR1cmUpe3ZhciBnPXRoaXMuanNvbi5mZWF0dXJlcy5mZWF0dXJlW2ZdOwppZihnKXJldHVybiBnfXJldHVybiB0aGlzLmpzb24uY29udGV4dCYmdGhpcy5qc29uLmNvbnRleHQuZmVhdHVyZSYmKGc9dGhpcy5qc29uLmNvbnRleHQuZmVhdHVyZVtmXSk/Zzp0aGlzLmpzb24uZmVhdHVyZUxpc3RzJiZ0aGlzLmpzb24uZmVhdHVyZUxpc3RzLmZlYXR1cmVMaXN0P3RoaXMuanNvbi5mZWF0dXJlTGlzdHMuZmVhdHVyZUxpc3RbZl06bnVsbH0sZ2V0SnNvblZhbHVlTGlzdDpmdW5jdGlvbihmLGcpe2Y9dGhpcy5nZXRKc29uRmVhdHVyZShmKTtpZighZilyZXR1cm4gbnVsbDtpc05hTihnKXx8KGY9Zi5mZWF0dXJlW2ddKTtyZXR1cm4oZz1mLmJ5dGVzTGlzdHx8Zi5pbnQ2NExpc3R8fGYuZmxvYXRMaXN0KT9nLnZhbHVlOm51bGx9LGdldERhdGFGcm9tRXZlbnQ6ZnVuY3Rpb24oZil7Zm9yKGY9Zi50YXJnZXQ7bnVsbD09Zi5kYXRhRmVhdHVyZTspe2lmKCFmLnBhcmVudEVsZW1lbnQpdGhyb3cgRXJyb3IoIkNvdWxkIG5vdCBmaW5kIGFuY2VzdG9yIGNvbnRyb2wgZWxlbWVudCIpOwpmPWYucGFyZW50RWxlbWVudH1yZXR1cm57ZmVhdHVyZTpmLmRhdGFGZWF0dXJlLHZhbHVlSW5kZXg6Zi5kYXRhSW5kZXgsc2VxTnVtOmYuZGF0YVNlcU51bX19LGdldEZlYXR1cmVGcm9tRGF0YTpmdW5jdGlvbihmKXtpZihpc05hTihmLnNlcU51bSkpcmV0dXJuIHRoaXMuZmVhdHVyZXMuZ2V0KGYuZmVhdHVyZSk7dmFyIGc9dGhpcy5zZXFGZWF0dXJlcy5nZXQoZi5mZWF0dXJlKTtpZihnKXJldHVybihnPWcuZ2V0RmVhdHVyZUxpc3QoKSk/Z1tmLnNlcU51bV06dm9pZCAwfSxnZXRWYWx1ZUxpc3RGcm9tRGF0YTpmdW5jdGlvbihmKXtyZXR1cm4gaXNOYU4oZi5zZXFOdW0pP3RoaXMuZ2V0RmVhdHVyZVZhbHVlcyhmLmZlYXR1cmUsITApOnRoaXMuZ2V0U2VxRmVhdHVyZVZhbHVlcyhmLmZlYXR1cmUsZi5zZXFOdW0sITApfSxzZXRGZWF0dXJlVmFsdWVzOmZ1bmN0aW9uKGYsZyl7Y29uc3QgbD1mLmdldEJ5dGVzTGlzdCgpLGs9Zi5nZXRJbnQ2NExpc3QoKTtmPWYuZ2V0RmxvYXRMaXN0KCk7Cmw/bC5zZXRWYWx1ZUxpc3QoZyk6az9rLnNldFZhbHVlTGlzdChnKTpmJiZmLnNldFZhbHVlTGlzdChnKX0sb25WYWx1ZUNoYW5nZWQ6ZnVuY3Rpb24oZil7Y29uc3QgZz1mLnRhcmdldDtmPXRoaXMuZ2V0RGF0YUZyb21FdmVudChmKTtjb25zdCBsPXRoaXMuZ2V0RmVhdHVyZUZyb21EYXRhKGYpLGs9dGhpcy5nZXRWYWx1ZUxpc3RGcm9tRGF0YShmKTtpZihsKXtpZih0aGlzLmlzQnl0ZXNGZWF0dXJlKGYuZmVhdHVyZSkpe3ZhciBtPXRoaXMuc3RyaW5nVG9VaW50OEFycmF5KGcudmFsdWUpO2tbZi52YWx1ZUluZGV4XT1tOyhtPXRoaXMuZ2V0SnNvblZhbHVlTGlzdChmLmZlYXR1cmUsZi5zZXFOdW0pKSYmKG1bZi52YWx1ZUluZGV4XT1idG9hKGcudmFsdWUpKX1lbHNlIGtbZi52YWx1ZUluZGV4XT0rZy52YWx1ZSwobT10aGlzLmdldEpzb25WYWx1ZUxpc3QoZi5mZWF0dXJlLGYuc2VxTnVtKSkmJihtW2YudmFsdWVJbmRleF09K2cudmFsdWUpO3RoaXMuc2V0RmVhdHVyZVZhbHVlcyhsLAprKTt0aGlzLmV4YW1wbGVDaGFuZ2VkKCl9fSxvbklucHV0Rm9jdXM6ZnVuY3Rpb24oZil7Y29uc3QgZz1mLnRhcmdldDtmPXRoaXMuZ2V0RGF0YUZyb21FdmVudChmKTt0aGlzLmZvY3VzZWRGZWF0dXJlTmFtZT1mLmZlYXR1cmU7dGhpcy5mb2N1c2VkRmVhdHVyZVZhbHVlSW5kZXg9Zi52YWx1ZUluZGV4O3RoaXMuZm9jdXNlZFNlcU51bWJlcj1mLnNlcU51bTt0aGlzLiQuZGVsZXRldmFsdWUuc3R5bGUudG9wPWcuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wLXRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wLTI1KyJweCI7dGhpcy4kLmRlbGV0ZXZhbHVlLnN0eWxlLnJpZ2h0PXRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkucmlnaHQtZy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5yaWdodCszMCsicHgiO3RoaXMuc2hvd0RlbGV0ZVZhbHVlQnV0dG9uPSEwfSxvbklucHV0Qmx1cjpmdW5jdGlvbigpe3RoaXMuc2hvd0RlbGV0ZVZhbHVlQnV0dG9uPSExfSxkZWxldGVGZWF0dXJlOmZ1bmN0aW9uKGYpe2Y9CnRoaXMuZ2V0RGF0YUZyb21FdmVudChmKTt0aGlzLmZlYXR1cmVzLmRlbCYmdGhpcy5mZWF0dXJlcy5kZWwoZi5mZWF0dXJlKTt0aGlzLnNlcUZlYXR1cmVzLmRlbCYmdGhpcy5zZXFGZWF0dXJlcy5kZWwoZi5mZWF0dXJlKTt0aGlzLmRlbGV0ZUpzb25GZWF0dXJlKGYuZmVhdHVyZSk7dGhpcy5leGFtcGxlQ2hhbmdlZCgpO3RoaXMucmVmcmVzaEV4YW1wbGVWaWV3ZXIoKX0sZGVsZXRlSnNvbkZlYXR1cmU6ZnVuY3Rpb24oZil7dGhpcy5qc29uJiYodGhpcy5qc29uLmZlYXR1cmVzJiZ0aGlzLmpzb24uZmVhdHVyZXMuZmVhdHVyZSYmZGVsZXRlIHRoaXMuanNvbi5mZWF0dXJlcy5mZWF0dXJlW2ZdLHRoaXMuanNvbi5jb250ZXh0JiZ0aGlzLmpzb24uY29udGV4dC5mZWF0dXJlJiZkZWxldGUgdGhpcy5qc29uLmNvbnRleHQuZmVhdHVyZVtmXSx0aGlzLmpzb24uZmVhdHVyZUxpc3RzJiZ0aGlzLmpzb24uZmVhdHVyZUxpc3RzLmZlYXR1cmVMaXN0JiZkZWxldGUgdGhpcy5qc29uLmZlYXR1cmVMaXN0cy5mZWF0dXJlTGlzdFtmXSl9LApkZWxldGVWYWx1ZTpmdW5jdGlvbihmKXtmPXRoaXMuZ2V0RGF0YUZyb21FdmVudChmKTtjb25zdCBnPXRoaXMuZ2V0RmVhdHVyZUZyb21EYXRhKGYpLGw9dGhpcy5nZXRWYWx1ZUxpc3RGcm9tRGF0YShmKTtpZihnKXtpZih0aGlzLmlzQnl0ZXNGZWF0dXJlKGYuZmVhdHVyZSkpe2NvbnN0IGs9dGhpcy5nZXRKc29uVmFsdWVMaXN0KGYuZmVhdHVyZSxmLnNlcU51bSk7ayYmay5zcGxpY2UoZi52YWx1ZUluZGV4LDEpfWwuc3BsaWNlKGYudmFsdWVJbmRleCwxKTt0aGlzLnNldEZlYXR1cmVWYWx1ZXMoZyxsKTt0aGlzLmV4YW1wbGVDaGFuZ2VkKCk7dGhpcy5yZWZyZXNoRXhhbXBsZVZpZXdlcigpfX0sb3BlbkFkZEZlYXR1cmVEaWFsb2c6ZnVuY3Rpb24oKXt0aGlzLiQuYWRkRmVhdHVyZURpYWxvZy5vcGVuKCl9LGFkZEZlYXR1cmU6ZnVuY3Rpb24oKXtpZih0aGlzLmpzb24pe3ZhciBmPW5ldyBXZztpZigiaW50Ij09PXRoaXMubmV3RmVhdHVyZVR5cGUpe3ZhciBnPVtdO3ZhciBsPW5ldyBVZzsKbC5zZXRWYWx1ZUxpc3QoZyk7Zi5zZXRJbnQ2NExpc3QobCk7Zz17aW50NjRMaXN0Ont2YWx1ZTpnfX19ZWxzZSJmbG9hdCI9PT10aGlzLm5ld0ZlYXR1cmVUeXBlPyhnPVtdLGw9bmV3IFNnLGwuc2V0VmFsdWVMaXN0KGcpLGYuc2V0RmxvYXRMaXN0KGwpLGc9e2Zsb2F0TGlzdDp7dmFsdWU6Z319KTooZz1bXSxsPW5ldyBRZyxsLnNldFZhbHVlTGlzdChnKSxmLnNldEJ5dGVzTGlzdChsKSxnPXtieXRlc0xpc3Q6e3ZhbHVlOmd9fSk7dGhpcy5mZWF0dXJlcy5zZXQodGhpcy5uZXdGZWF0dXJlTmFtZSxmKTt0aGlzLmFkZEpzb25GZWF0dXJlKHRoaXMubmV3RmVhdHVyZU5hbWUsZyk7dGhpcy5uZXdGZWF0dXJlTmFtZT0iIjt0aGlzLmV4YW1wbGVDaGFuZ2VkKCk7dGhpcy5yZWZyZXNoRXhhbXBsZVZpZXdlcigpfX0sYWRkSnNvbkZlYXR1cmU6ZnVuY3Rpb24oZixnKXt0aGlzLmpzb24mJnRoaXMuanNvbi5mZWF0dXJlcyYmdGhpcy5qc29uLmZlYXR1cmVzLmZlYXR1cmU/dGhpcy5qc29uLmZlYXR1cmVzLmZlYXR1cmVbZl09Cmc6dGhpcy5qc29uJiZ0aGlzLmpzb24uY29udGV4dCYmdGhpcy5qc29uLmNvbnRleHQuZmVhdHVyZSYmKHRoaXMuanNvbi5jb250ZXh0LmZlYXR1cmVbZl09Zyl9LGFkZFZhbHVlOmZ1bmN0aW9uKGYpe2Y9dGhpcy5nZXREYXRhRnJvbUV2ZW50KGYpO2NvbnN0IGc9dGhpcy5nZXRGZWF0dXJlRnJvbURhdGEoZiksbD10aGlzLmdldFZhbHVlTGlzdEZyb21EYXRhKGYpO2cmJih0aGlzLmlzQnl0ZXNGZWF0dXJlKGYuZmVhdHVyZSk/bC5wdXNoKCIiKTpsLnB1c2goMCksdGhpcy5zZXRGZWF0dXJlVmFsdWVzKGcsbCksdGhpcy5leGFtcGxlQ2hhbmdlZCgpLHRoaXMucmVmcmVzaEV4YW1wbGVWaWV3ZXIoKSl9LHJlZnJlc2hFeGFtcGxlVmlld2VyOmZ1bmN0aW9uKCl7Y29uc3QgZj10aGlzLmV4YW1wbGU7dGhpcy5pZ25vcmVDaGFuZ2U9ITA7dGhpcy5leGFtcGxlPW5ldyBmaTt0aGlzLmlnbm9yZUNoYW5nZT0hMTtzZXRUaW1lb3V0KCgpPT57dGhpcy5leGFtcGxlPWY7dGhpcy5oYXZlU2FsaWVuY3koKX0sCjApfSxleGFtcGxlQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMuZmlyZSgiZXhhbXBsZS1jaGFuZ2UiLHtleGFtcGxlOnRoaXMuZXhhbXBsZX0pO2NsZWFyVGltZW91dCh0aGlzLmNoYW5nZUNhbGxiYWNrVGltZXIpO3RoaXMuY2hhbmdlQ2FsbGJhY2tUaW1lcj1zZXRUaW1lb3V0KHRoaXMuY2hhbmdlQ2FsbGJhY2suYmluZCh0aGlzKSwxRTMpfSxjaGFuZ2VDYWxsYmFjazpmdW5jdGlvbigpe3RoaXMuaWdub3JlQ2hhbmdlPSEwO3RoaXMuaXNTZXF1ZW5jZSYmdGhpcy5zZXJpYWxpemVkU2VxRXhhbXBsZT90aGlzLnNlcmlhbGl6ZWRTZXFFeGFtcGxlPWJ0b2EodGhpcy5kZWNvZGVCeXRlc0xpc3RTdHJpbmcodGhpcy5leGFtcGxlLnNlcmlhbGl6ZUJpbmFyeSgpLCEwKSk6dGhpcy5zZXJpYWxpemVkRXhhbXBsZSYmKHRoaXMuc2VyaWFsaXplZEV4YW1wbGU9YnRvYSh0aGlzLmRlY29kZUJ5dGVzTGlzdFN0cmluZyh0aGlzLmV4YW1wbGUuc2VyaWFsaXplQmluYXJ5KCksITApKSk7dGhpcy5pZ25vcmVDaGFuZ2U9CiExfSxnZXRJbnB1dFBpbGxDbGFzczpmdW5jdGlvbihmLGcpe3JldHVybiB0aGlzLnNhbml0aXplRmVhdHVyZShmKSsiIHZhbHVlLXBpbGwiKygiZ3JpZCI9PWc/IiB2YWx1ZS1waWxsLWdyaWQiOiIgdmFsdWUtcGlsbC1zdGFja2VkIil9LGdldENvbXBhcmVJbnB1dENsYXNzOmZ1bmN0aW9uKGYsZyxsKXtnPSJ2YWx1ZS1jb21wYXJlIisoImdyaWQiPT1nPyIgdmFsdWUtcGlsbC1ncmlkIjoiIHZhbHVlLXBpbGwtc3RhY2tlZCIpO2lmKG51bGwhPWwpe2NvbnN0IGs9dGhpcy5nZXRGZWF0dXJlVmFsdWVzKGYsITApO2Y9dGhpcy5nZXRDb21wYXJlRmVhdHVyZVZhbHVlcyhmLCEwKTtnPWw+PWsubGVuZ3RofHxsPj1mLmxlbmd0aHx8a1tsXSE9ZltsXT9nKyIgdmFsdWUtZGlmZmVyZW50IjpnKyIgdmFsdWUtc2FtZSJ9cmV0dXJuIGd9LGdldFNlcUNvbXBhcmVJbnB1dENsYXNzOmZ1bmN0aW9uKGYsZyxsLGspe2c9InZhbHVlLWNvbXBhcmUiKygiZ3JpZCI9PWc/IiB2YWx1ZS1waWxsLWdyaWQiOgoiIHZhbHVlLXBpbGwtc3RhY2tlZCIpO2lmKG51bGwhPWspe2NvbnN0IG09dGhpcy5nZXRTZXFGZWF0dXJlVmFsdWVzKGYsbCwhMCk7Zj10aGlzLmdldENvbXBhcmVTZXFGZWF0dXJlVmFsdWVzKGYsbCwhMCk7Zz1rPj1tLmxlbmd0aHx8az49Zi5sZW5ndGh8fG1ba10hPWZba10/ZysiIHZhbHVlLWRpZmZlcmVudCI6ZysiIHZhbHVlLXNhbWUifXJldHVybiBnfSxzYW5pdGl6ZUZlYXR1cmU6ZnVuY3Rpb24oZil7Zj1mLnRyaW0oKTtmLm1hdGNoKC9eW0EtWmEtel0uKiQvKXx8KGY9Il8iK2YpO3JldHVybiBmLnJlcGxhY2UoL1tcL1wuI10vZywiXyIpfSxpc1NlcUV4YW1wbGU6ZnVuY3Rpb24oZil7cmV0dXJuIDA8PWZ9LHNob3VsZFNob3dTYWxpZW5jeUxlZ2VuZDpmdW5jdGlvbihmKXtyZXR1cm4gZiYmMDxPYmplY3Qua2V5cyhmKS5sZW5ndGh9LGdldFNhbGllbmN5Q29udHJvbHNIb2xkZXJDbGFzcyhmKXtyZXR1cm4gdGhpcy5zaG91bGRTaG93U2FsaWVuY3lMZWdlbmQoZik/InNhbGllbmN5LWNvbnRyb2xzLWhvbGRlciI6CiJoaWRlLXNhbGllbmN5LWNvbnRyb2xzIn0sY3JlYXRlTGVnZW5kOmZ1bmN0aW9uKCl7ZDMuc2VsZWN0KHRoaXMuJC5zYWxpZW5jeUxlZ2VuZCkuc2VsZWN0QWxsKCIqIikucmVtb3ZlKCk7Y29uc3QgZj1kMy5zZWxlY3QodGhpcy4kLnNhbGllbmN5TGVnZW5kKS5hcHBlbmQoImciKSxnPWYuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJsaW5lYXJHcmFkaWVudCIpLmF0dHIoImlkIiwidnpleGFtcGxldmlld2VyZ3JhZGllbnQiKS5hdHRyKCJ4MSIsIjAlIikuYXR0cigieTEiLCIwJSIpLmF0dHIoIngyIiwiMTAwJSIpLmF0dHIoInkyIiwiMCUiKS5hdHRyKCJzcHJlYWRNZXRob2QiLCJwYWQiKTt2YXIgbD1bXTswPnRoaXMubWluU2FsJiZsLnB1c2goIiNGRjg0N0MiKTtsLnB1c2goIiNmZmYiKTswPHRoaXMubWF4U2FsJiZsLnB1c2goIiMwMDdCODMiKTtjb25zdCBrPSgobSxwLHEpPT57Y29uc3Qgcj1bXSx0PShwLW0pLyhxLTEpO2xldCB2PTA7Zm9yKDt2PHEtMTspci5wdXNoKG0rdip0KSwKdisrO3IucHVzaChwKTtyZXR1cm4gcn0pKDAsMTAwLGwubGVuZ3RoKS5tYXAobT0+TWF0aC5yb3VuZChtKSsiJSIpO2QzLnppcChrLGwpLmZvckVhY2gobT0+e2cuYXBwZW5kKCJzdG9wIikuYXR0cigib2Zmc2V0IixtWzBdKS5hdHRyKCJzdG9wLWNvbG9yIixtWzFdKS5hdHRyKCJzdG9wLW9wYWNpdHkiLDEpfSk7Zi5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4MSIsMCkuYXR0cigieTEiLDApLmF0dHIoIndpZHRoIiwyNjApLmF0dHIoImhlaWdodCIsMjApLnN0eWxlKCJmaWxsIiwidXJsKCN2emV4YW1wbGV2aWV3ZXJncmFkaWVudCkiKTtsPWQzLnNjYWxlTGluZWFyKCkuZG9tYWluKFt0aGlzLm1pblNhbCx0aGlzLm1heFNhbF0pLnJhbmdlKFswLDI2MF0pO2w9ZDMuYXhpc0JvdHRvbShsKS50aWNrcygpO2YuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJsZWdlbmQgYXhpcyIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgwLDIwKSIpLmNhbGwobCl9LGlzSW1hZ2U6ZnVuY3Rpb24oZil7cmV0dXJuIGMudGVzdChmKX0sCmdldEltYWdlU3JjOmZ1bmN0aW9uKGYpe3RoaXMuc2V0dXBPbmxvYWRDYWxsYmFjayhmKTtyZXR1cm4gdGhpcy5nZXRJbWFnZVNyY0ZvckRhdGEoZix0aGlzLmdldEZlYXR1cmVWYWx1ZXMoZiwhMSwhMClbMF0pfSxnZXRDb21wYXJlSW1hZ2VTcmM6ZnVuY3Rpb24oZil7dGhpcy5zZXR1cE9ubG9hZENhbGxiYWNrKGYsITApO3JldHVybiB0aGlzLmdldEltYWdlU3JjRm9yRGF0YShmLHRoaXMuZ2V0Q29tcGFyZUZlYXR1cmVWYWx1ZXMoZiwhMSwhMClbMF0sITApfSxnZXRTZXFJbWFnZVNyYzpmdW5jdGlvbihmLGcpe3RoaXMuc2V0dXBPbmxvYWRDYWxsYmFjayhmKTtyZXR1cm4gdGhpcy5nZXRJbWFnZVNyY0ZvckRhdGEoZix0aGlzLmdldFNlcUZlYXR1cmVWYWx1ZXMoZixnLCExLCEwKVswXSl9LGdldENvbXBhcmVTZXFJbWFnZVNyYzpmdW5jdGlvbihmLGcpe3RoaXMuc2V0dXBPbmxvYWRDYWxsYmFjayhmLCEwKTtyZXR1cm4gdGhpcy5nZXRJbWFnZVNyY0ZvckRhdGEoZix0aGlzLmdldENvbXBhcmVTZXFGZWF0dXJlVmFsdWVzKGYsCmcsITEsITApWzBdLCEwKX0sc2V0dXBPbmxvYWRDYWxsYmFjazpmdW5jdGlvbihmLGcpe3JlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e2NvbnN0IGw9dGhpcy4kJCgiIyIrdGhpcy5nZXRJbWFnZUlkKGYsZykpO2wub25sb2FkPXRoaXMuZ2V0T25Mb2FkRm9ySW1hZ2UoZixsLGcpfSl9LGdldEltYWdlU3JjRm9yRGF0YTpmdW5jdGlvbihmLGcsbCl7Zj1jLmV4ZWMoZik7aWYobnVsbD09ZilyZXR1cm4gbnVsbDtmPWZbMV18fCIiO2w9bD90aGlzLmdldENvbXBhcmVGZWF0dXJlVmFsdWVzKCJpbWFnZSIrZisiL2Zvcm1hdCIsITEpOnRoaXMuZ2V0RmVhdHVyZVZhbHVlcygiaW1hZ2UiK2YrIi9mb3JtYXQiLCExKTtmPSJqcGVnIjswPGwubGVuZ3RoJiYoZj1sWzBdLnRvTG93ZXJDYXNlKCkpO3JldHVybiJkYXRhOmltYWdlLyIrZisiO2Jhc2U2NCwiK2J0b2EoZGVjb2RlVVJJQ29tcG9uZW50KGVuY29kZVVSSUNvbXBvbmVudChnKSkpfSxnZXRJdGVyTGVuZ3RoOmZ1bmN0aW9uKGYpe2xldCBnPQowO2lmKGYpe2xldCBsPWYubmV4dCgpO2Zvcig7IWwuZG9uZTspZysrLGw9Zi5uZXh0KCl9cmV0dXJuIGd9LHVwZGF0ZUNvbXBhcmVNb2RlOmZ1bmN0aW9uKCl7bGV0IGY9ITE7aWYodGhpcy5jb21wYXJlRmVhdHVyZXMmJjA8dGhpcy5nZXRJdGVyTGVuZ3RoKHRoaXMuY29tcGFyZUZlYXR1cmVzLmtleXMoKSl8fHRoaXMuY29tcGFyZVNlcUZlYXR1cmVzJiYwPHRoaXMuZ2V0SXRlckxlbmd0aCh0aGlzLmNvbXBhcmVTZXFGZWF0dXJlcy5rZXlzKCkpKWY9ITA7dGhpcy5jb21wYXJlTW9kZT1mfSxjcmVhdGVFeGFtcGxlc0Zyb21Kc29uOmZ1bmN0aW9uKGYpe3RoaXMuZXhhbXBsZT10aGlzLmNyZWF0ZUV4YW1wbGVzRnJvbUpzb25IZWxwZXIoZik7dGhpcy5jb21wYXJlSnNvbj17fX0sY3JlYXRlQ29tcGFyZUV4YW1wbGVzRnJvbUpzb246ZnVuY3Rpb24oZil7ZiYmKHRoaXMuY29tcGFyZUV4YW1wbGU9dGhpcy5jcmVhdGVFeGFtcGxlc0Zyb21Kc29uSGVscGVyKGYpKX0sY3JlYXRlRXhhbXBsZXNGcm9tSnNvbkhlbHBlcjpmdW5jdGlvbihmKXtpZighZilyZXR1cm4gbnVsbDsKInN0cmluZyI9PT10eXBlb2YgdGhpcy5qc29uJiYoZj1KU09OLnBhcnNlKHRoaXMuanNvbikpO2lmKGYuZmVhdHVyZXMpe3ZhciBnPW5ldyBmaTtnLnNldEZlYXR1cmVzKHRoaXMucGFyc2VGZWF0dXJlcyhmLmZlYXR1cmVzKSk7cmV0dXJuIGd9cmV0dXJuIGYuY29udGV4dHx8Zi5mZWF0dXJlTGlzdHM/KGc9bmV3IGdpLGYuY29udGV4dCYmZy5zZXRDb250ZXh0KHRoaXMucGFyc2VGZWF0dXJlcyhmLmNvbnRleHQpKSxmLmZlYXR1cmVMaXN0cyYmZy5zZXRGZWF0dXJlTGlzdHModGhpcy5wYXJzZUZlYXR1cmVMaXN0cyhmLmZlYXR1cmVMaXN0cykpLGcpOm5ldyBmaX0scGFyc2VGZWF0dXJlczpmdW5jdGlvbihmKXtjb25zdCBnPW5ldyBZZztmb3IoY29uc3QgbCBpbiBmLmZlYXR1cmUpaWYoZi5mZWF0dXJlLmhhc093blByb3BlcnR5KGwpKXtjb25zdCBrPWYuZmVhdHVyZVtsXTtnLmdldEZlYXR1cmVNYXAoKS5zZXQobCx0aGlzLnBhcnNlRmVhdHVyZShrLHRoaXMuaXNJbWFnZShsKSkpfXJldHVybiBnfSwKcGFyc2VGZWF0dXJlTGlzdHM6ZnVuY3Rpb24oZil7Y29uc3QgZz1uZXcgS2g7Zm9yKGNvbnN0IGwgaW4gZi5mZWF0dXJlTGlzdClpZihmLmZlYXR1cmVMaXN0Lmhhc093blByb3BlcnR5KGwpKXtjb25zdCBrPWYuZmVhdHVyZUxpc3RbbF0sbT1uZXcgWmcscD1bXTtmb3IoY29uc3QgcSBpbiBrLmZlYXR1cmUpay5mZWF0dXJlLmhhc093blByb3BlcnR5KHEpJiZwLnB1c2godGhpcy5wYXJzZUZlYXR1cmUoay5mZWF0dXJlW3FdLHRoaXMuaXNJbWFnZShsKSkpO20uc2V0RmVhdHVyZUxpc3QocCk7Zy5nZXRGZWF0dXJlTGlzdE1hcCgpLnNldChsLG0pfXJldHVybiBnfSxwYXJzZUZlYXR1cmU6ZnVuY3Rpb24oZil7Y29uc3QgZz1uZXcgV2c7aWYoZi5mbG9hdExpc3Qpe3ZhciBsPW5ldyBTZztsLnNldFZhbHVlTGlzdChmLmZsb2F0TGlzdC52YWx1ZSk7Zy5zZXRGbG9hdExpc3QobCl9ZWxzZSBmLmJ5dGVzTGlzdD8obD1uZXcgUWcsZi5ieXRlc0xpc3QudmFsdWUmJmwuc2V0VmFsdWVMaXN0KGYuYnl0ZXNMaXN0LnZhbHVlKSwKZy5zZXRCeXRlc0xpc3QobCkpOmYuaW50NjRMaXN0JiYobD1uZXcgVWcsbC5zZXRWYWx1ZUxpc3QoZi5pbnQ2NExpc3QudmFsdWUpLGcuc2V0SW50NjRMaXN0KGwpKTtyZXR1cm4gZ30sZ2V0SW1hZ2VJZDpmdW5jdGlvbihmLGcpe3JldHVybiBnP3RoaXMuZ2V0Q29tcGFyZUltYWdlSWQoZik6dGhpcy5zYW5pdGl6ZUZlYXR1cmUoZikrIl9pbWFnZSJ9LGdldENhbnZhc0lkOmZ1bmN0aW9uKGYsZyl7cmV0dXJuIGc/dGhpcy5nZXRDb21wYXJlQ2FudmFzSWQoZik6dGhpcy5zYW5pdGl6ZUZlYXR1cmUoZikrIl9jYW52YXMifSxnZXRJbWFnZUNhcmRJZDpmdW5jdGlvbihmLGcpe3JldHVybiBnP3RoaXMuZ2V0Q29tcGFyZUltYWdlQ2FyZElkKGYpOnRoaXMuc2FuaXRpemVGZWF0dXJlKGYpKyJfY2FyZCJ9LGdldENvbXBhcmVJbWFnZUlkOmZ1bmN0aW9uKGYpe3JldHVybiB0aGlzLnNhbml0aXplRmVhdHVyZShmKSsiX2ltYWdlX2NvbXBhcmUifSxnZXRDb21wYXJlQ2FudmFzSWQ6ZnVuY3Rpb24oZil7cmV0dXJuIHRoaXMuc2FuaXRpemVGZWF0dXJlKGYpKwoiX2NhbnZhc19jb21wYXJlIn0sZ2V0Q29tcGFyZUltYWdlQ2FyZElkOmZ1bmN0aW9uKGYpe3JldHVybiB0aGlzLnNhbml0aXplRmVhdHVyZShmKSsiX2NhcmRfY29tcGFyZSJ9LGdldEZlYXR1cmVEaWFsb2dJZDpmdW5jdGlvbihmKXtyZXR1cm4gdGhpcy5zYW5pdGl6ZUZlYXR1cmUoZikrIl9kaWFsb2cifSxmZWF0dXJlTW9yZUNsaWNrZWQ6ZnVuY3Rpb24oZil7Zj1mLnNyY0VsZW1lbnQ7Y29uc3QgZz10aGlzLiQkKCIjIit0aGlzLnNhbml0aXplRmVhdHVyZShmLmRhdGFGZWF0dXJlKSsiX2RpYWxvZyIpO2cucG9zaXRpb25UYXJnZXQ9ZjtnLm9wZW4oKX0sZXhwYW5kRmVhdHVyZTpmdW5jdGlvbihmKXt0aGlzLnNldCgiZXhwYW5kZWRGZWF0dXJlcy4iK3RoaXMuc2FuaXRpemVGZWF0dXJlKGYuc3JjRWxlbWVudC5kYXRhRmVhdHVyZSksITApO3RoaXMucmVmcmVzaEV4YW1wbGVWaWV3ZXIoKX0sZGVjb2RlZFN0cmluZ1RvQ2hhckNvZGVzOmZ1bmN0aW9uKGYpe2NvbnN0IGc9bmV3IFVpbnQ4QXJyYXkoZi5sZW5ndGgpOwpmb3IobGV0IGw9MDtsPGYubGVuZ3RoOysrbClnW2xdPWYuY2hhckNvZGVBdChsKTtyZXR1cm4gZ30saGFuZGxlSW1hZ2VVcGxvYWQ6ZnVuY3Rpb24oZil7dGhpcy5oYW5kbGVGaWxlU2VsZWN0KGYsdGhpcyl9LHVwbG9hZEltYWdlQ2xpY2tlZDpmdW5jdGlvbihmKXtmPXRoaXMuZ2V0RGF0YUZyb21FdmVudChmKTtjb25zdCBnPVBvbHltZXIuZG9tKHRoaXMucm9vdCkucXVlcnlTZWxlY3RvckFsbCgicGFwZXItaW5wdXQiKTtsZXQgbD1udWxsO2ZvcihsZXQgaz0wO2s8Zy5sZW5ndGg7aysrKWlmKGdba10uZGF0YUZlYXR1cmU9PWYuZmVhdHVyZSl7bD1nW2tdO2JyZWFrfWwmJmwucXVlcnlTZWxlY3RvcigiaW5wdXQiKS5jbGljaygpfSxoYW5kbGVGaWxlU2VsZWN0OmZ1bmN0aW9uKGYsZyl7Zi5zdG9wUHJvcGFnYXRpb24oKTtmLnByZXZlbnREZWZhdWx0KCk7Y29uc3QgbD1uZXcgRmlsZVJlYWRlcixrPWYuZGF0YVRyYW5zZmVyP2YuZGF0YVRyYW5zZmVyLmZpbGVzOmYudGFyZ2V0LmZpbGVzOwowIT09ay5sZW5ndGgmJihsLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLCgpPT57Y29uc3QgbT1sLnJlc3VsdC5zdWJzdHJpbmcoK2wucmVzdWx0LmluZGV4T2YoImJhc2U2NCwiKSs3KTt2YXIgcD1nLmRlY29kZWRTdHJpbmdUb0NoYXJDb2RlcyhhdG9iKG0pKTtjb25zdCBxPWcuZ2V0RGF0YUZyb21FdmVudChmKSxyPWcuZ2V0RmVhdHVyZUZyb21EYXRhKHEpLHQ9Zy5nZXRWYWx1ZUxpc3RGcm9tRGF0YShxKTtpZihyKXt0WzBdPXA7ci5nZXRCeXRlc0xpc3QoKS5zZXRWYWx1ZUxpc3QodCk7KHA9Zy5nZXRKc29uVmFsdWVMaXN0KHEuZmVhdHVyZSxxLnNlcU51bSkpJiYocFswXT1tKTtjb25zdCB2PW5ldyBJbWFnZTtnLmFkZEltYWdlRWxlbWVudChxLmZlYXR1cmUsdik7di5hZGRFdmVudExpc3RlbmVyKCJsb2FkIiwoKT0+e2cuZ2V0T25Mb2FkRm9ySW1hZ2UocS5mZWF0dXJlLHYpO3ZhciBBPWMuZXhlYyhxLmZlYXR1cmUpWzFdfHwiIjtjb25zdCB5PSJpbWFnZSIrQSsiL3dpZHRoIjsKQT0iaW1hZ2UiK0ErIi9oZWlnaHQiO2NvbnN0IHg9Zy5nZXRGZWF0dXJlVmFsdWVzKHksITEpLEM9Zy5nZXRGZWF0dXJlVmFsdWVzKEEsITEpOzA8eC5sZW5ndGgmJih4WzBdPSt2LndpZHRoLGcuZmVhdHVyZXMuZ2V0KHkpLmdldEludDY0TGlzdCgpLnNldFZhbHVlTGlzdCh4KSk7MDxDLmxlbmd0aCYmKENbMF09K3YuaGVpZ2h0LGcuZmVhdHVyZXMuZ2V0KEEpLmdldEludDY0TGlzdCgpLnNldFZhbHVlTGlzdChDKSk7Zy5leGFtcGxlQ2hhbmdlZCgpfSk7di5zcmM9bC5yZXN1bHR9fSwhMSksbC5yZWFkQXNEYXRhVVJMKGtbMF0pKX0sYWRkRHJhZ0Ryb3BCZWhhdmlvclRvQ2FudmFzOmZ1bmN0aW9uKGYpe2Z1bmN0aW9uIGcobSl7bS5zdG9wUHJvcGFnYXRpb24oKTttLnByZXZlbnREZWZhdWx0KCk7bS5kYXRhVHJhbnNmZXIuZHJvcEVmZmVjdD0iY29weSJ9ZnVuY3Rpb24gbChtKXtrLmhhbmRsZUZpbGVTZWxlY3QobSxrKX1jb25zdCBrPXRoaXM7IXRoaXMucmVhZG9ubHkmJmYmJihmLmFkZEV2ZW50TGlzdGVuZXIoImRyYWdvdmVyIiwKZywhMSksZi5hZGRFdmVudExpc3RlbmVyKCJkcm9wIixsLCExKSl9LGdldE9uTG9hZEZvckltYWdlOmZ1bmN0aW9uKGYsZyxsKXtjb25zdCBrPShtLHAscSk9Pntjb25zdCByPXRoaXMuJCQoIiMiK3RoaXMuZ2V0Q2FudmFzSWQobSxxKSk7cXx8dGhpcy5hZGREcmFnRHJvcEJlaGF2aW9yVG9DYW52YXMocik7aWYocCYmcil7Y29uc3QgdD1yLmdldENvbnRleHQoIjJkIik7bGV0IHY9dGhpcy5pbWFnZVNjYWxlUGVyY2VudGFnZS8xMDA7aWYoIXRoaXMuYWxsb3dJbWFnZUNvbnRyb2xzKXtsZXQgeD10aGlzLiQkKCIjIit0aGlzLmdldEltYWdlQ2FyZElkKG0scSkpLnBhcmVudEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGgvMjsxNjx4JiYoeC09MTYpO3g8cC53aWR0aCYmKHY9eC9wLndpZHRoKX1yLndpZHRoPXAud2lkdGgqdjtyLmhlaWdodD1wLmhlaWdodCp2O2NvbnN0IEE9eD0+e3Quc2F2ZSgpO3QuY2xlYXJSZWN0KDAsMCxyLndpZHRoLHIuaGVpZ2h0KTt0LnRyYW5zbGF0ZSh4LngsCngueSk7dC5zY2FsZSh4LmsseC5rKTt0aGlzLnJlbmRlckltYWdlT25DYW52YXModCxyLndpZHRoLHIuaGVpZ2h0LG0scSk7dC5yZXN0b3JlKCl9LHk9ZDMuem9vbSgpLnNjYWxlRXh0ZW50KGQpLm9uKCJ6b29tIiwoKT0+e3RoaXMuYWRkSW1hZ2VUcmFuc2Zvcm0obSxkMy5ldmVudC50cmFuc2Zvcm0scSk7QShkMy5ldmVudC50cmFuc2Zvcm0pfSk7ZDMuc2VsZWN0KHIpLmNhbGwoeSkub24oImRibGNsaWNrLnpvb20iLCgpPT5kMy5zZWxlY3QocikuY2FsbCh5LnRyYW5zZm9ybSxkMy56b29tSWRlbnRpdHkpKTt0LnNhdmUoKTt0LnNjYWxlKHYsdik7dC5kcmF3SW1hZ2UocCwwLDApO3QucmVzdG9yZSgpO3RoaXMuc2V0SW1hZ2VEYXR1bSh0LHIud2lkdGgsci5oZWlnaHQsbSxxKTt0aGlzLnJlbmRlckltYWdlT25DYW52YXModCxyLndpZHRoLHIuaGVpZ2h0LG0scSk7cT90aGlzLmNvbXBhcmVJbWFnZUluZm9bbV0udHJhbnNmb3JtJiZBKHRoaXMuY29tcGFyZUltYWdlSW5mb1ttXS50cmFuc2Zvcm0pOgp0aGlzLmltYWdlSW5mb1ttXS50cmFuc2Zvcm0mJkEodGhpcy5pbWFnZUluZm9bbV0udHJhbnNmb3JtKX1lbHNlIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+ayhtLHAscSkpfTt0aGlzLmFkZEltYWdlRWxlbWVudChmLGcsbCk7dGhpcy5hZGRJbWFnZU9uTG9hZChmLGssbCk7cmV0dXJuIGsuYXBwbHkodGhpcyxbZixnLGxdKX0sYWRkSW1hZ2VPbkxvYWQ6ZnVuY3Rpb24oZixnLGwpe3RoaXMuaGFzSW1hZ2U9ITA7bD8odGhpcy5jb21wYXJlSW1hZ2VJbmZvW2ZdfHwodGhpcy5jb21wYXJlSW1hZ2VJbmZvW2ZdPXt9KSx0aGlzLmNvbXBhcmVJbWFnZUluZm9bZl0ub25sb2FkPWcpOih0aGlzLmltYWdlSW5mb1tmXXx8KHRoaXMuaW1hZ2VJbmZvW2ZdPXt9KSx0aGlzLmltYWdlSW5mb1tmXS5vbmxvYWQ9Zyl9LGFkZEltYWdlRGF0YTpmdW5jdGlvbihmLGcsbCl7bD8odGhpcy5jb21wYXJlSW1hZ2VJbmZvW2ZdfHwodGhpcy5jb21wYXJlSW1hZ2VJbmZvW2ZdPXt9KSx0aGlzLmNvbXBhcmVJbWFnZUluZm9bZl0uaW1hZ2VEYXRhPQpnKToodGhpcy5pbWFnZUluZm9bZl18fCh0aGlzLmltYWdlSW5mb1tmXT17fSksdGhpcy5pbWFnZUluZm9bZl0uaW1hZ2VEYXRhPWcpfSxhZGRJbWFnZUVsZW1lbnQ6ZnVuY3Rpb24oZixnLGwpe2w/KHRoaXMuY29tcGFyZUltYWdlSW5mb1tmXXx8KHRoaXMuY29tcGFyZUltYWdlSW5mb1tmXT17fSksdGhpcy5jb21wYXJlSW1hZ2VJbmZvW2ZdLmltYWdlRWxlbWVudD1nKToodGhpcy5pbWFnZUluZm9bZl18fCh0aGlzLmltYWdlSW5mb1tmXT17fSksdGhpcy5pbWFnZUluZm9bZl0uaW1hZ2VFbGVtZW50PWcpfSxhZGRJbWFnZUdyYXlzY2FsZURhdGE6ZnVuY3Rpb24oZixnKXt0aGlzLmltYWdlSW5mb1tmXXx8KHRoaXMuaW1hZ2VJbmZvW2ZdPXt9KTt0aGlzLmltYWdlSW5mb1tmXS5pbWFnZUdyYXlzY2FsZURhdGE9Z30sYWRkSW1hZ2VUcmFuc2Zvcm06ZnVuY3Rpb24oZixnLGwpe2w/KHRoaXMuY29tcGFyZUltYWdlSW5mb1tmXXx8KHRoaXMuY29tcGFyZUltYWdlSW5mb1tmXT17fSksdGhpcy5jb21wYXJlSW1hZ2VJbmZvW2ZdLnRyYW5zZm9ybT0KZyk6KHRoaXMuaW1hZ2VJbmZvW2ZdfHwodGhpcy5pbWFnZUluZm9bZl09e30pLHRoaXMuaW1hZ2VJbmZvW2ZdLnRyYW5zZm9ybT1nKX0sc2V0SW1hZ2VEYXR1bTpmdW5jdGlvbihmLGcsbCxrLG0pe2lmKGcmJmwmJihmPWYuZ2V0SW1hZ2VEYXRhKDAsMCxnLGwpLGY9VWludDhDbGFtcGVkQXJyYXkuZnJvbShmLmRhdGEpLHRoaXMuYWRkSW1hZ2VEYXRhKGssZixtKSx0aGlzLnNhbGllbmN5JiZ0aGlzLnNob3dTYWxpZW5jeSYmdGhpcy5zYWxpZW5jeVtrXSYmIW0pKXttPVVpbnQ4Q2xhbXBlZEFycmF5LmZyb20oZik7Zm9yKGc9MDtnPGYubGVuZ3RoO2crPTQpbD0oZltnXStmW2crMV0rZltnKzJdKS8zLG1bZ109bCxtW2crMV09bCxtW2crMl09bDt0aGlzLmFkZEltYWdlR3JheXNjYWxlRGF0YShrLG0pfX0sY29udHJhc3RJbWFnZTpmdW5jdGlvbihmLGcsbCl7Zz1kMy5zY2FsZUxpbmVhcigpLmRvbWFpbihbbC0uNS1nLzIsbC0uNSsoZy0xKS8yXSkuY2xhbXAoITApLnJhbmdlKFswLDI1NV0pOwpmb3IobD0wO2w8Zi5sZW5ndGg7bCsrKTMhPT1sJTQmJihmW2xdPWcoZltsXSkpfSxzaG93U2FsaWVuY3lGb3JWYWx1ZTpmdW5jdGlvbihmKXtyZXR1cm4gTWF0aC5hYnMoZik+PU1hdGguYWJzKDA8PWY/dGhpcy5tYXhTYWw6dGhpcy5taW5TYWwpKnRoaXMuc2FsaWVuY3lDdXRvZmYvMTAwfSxnZXRDb2xvckZvclNhbGllbmN5OmZ1bmN0aW9uKGYpe3JldHVybiB0aGlzLnNob3dTYWxpZW5jeUZvclZhbHVlKGYpP3RoaXMuY29sb3JzKGYpOiIjZmZmIn0sYWRkU2FsaWVuY3lUb0ltYWdlOmZ1bmN0aW9uKGYsZyl7QXJyYXkuaXNBcnJheShnKSYmMDxnLmxlbmd0aCYmQXJyYXkuaXNBcnJheShnWzBdKSYmKGc9Z1t0aGlzLnNlcU51bWJlcl0pO2NvbnN0IGw9MS9NYXRoLnBvdyh0aGlzLmltYWdlU2NhbGVQZXJjZW50YWdlLzEwMCwyKTtmb3IobGV0IG09MDttPGYubGVuZ3RoO20rPTQpe3ZhciBrPU1hdGguZmxvb3IobS80KmwpO2s9QXJyYXkuaXNBcnJheShnKT9nLmxlbmd0aD5rP2dba106CjA6Zztjb25zdCBwPS41Kih0aGlzLnNob3dTYWxpZW5jeUZvclZhbHVlKGspPzA8PWs/MD09PXRoaXMubWF4U2FsPzA6ay90aGlzLm1heFNhbDprL3RoaXMubWluU2FsOjApLHtyOnEsZzpyLGI6dH09ZDMucmdiKDA8az8iIzAwN0I4MyI6IiNGRjg0N0MiKTtmW21dPWZbbV0qKDEtcCkrcSpwO2ZbbSsxXT1mW20rMV0qKDEtcCkrcipwO2ZbbSsyXT1mW20rMl0qKDEtcCkrdCpwfX0scmVuZGVySW1hZ2VPbkNhbnZhczpmdW5jdGlvbihmLGcsbCxrLG0pe2lmKGcmJmwpe3ZhciBwPWYuZ2V0SW1hZ2VEYXRhKDAsMCxnLGwpO20/cC5kYXRhLnNldCh0aGlzLmNvbXBhcmVJbWFnZUluZm9ba10uaW1hZ2VEYXRhKTpwLmRhdGEuc2V0KHRoaXMuc2FsaWVuY3kmJnRoaXMuc2hvd1NhbGllbmN5JiZ0aGlzLnNhbGllbmN5W2tdP3RoaXMuaW1hZ2VJbmZvW2tdLmltYWdlR3JheXNjYWxlRGF0YTp0aGlzLmltYWdlSW5mb1trXS5pbWFnZURhdGEpOzI1Nj09PXRoaXMud2luZG93V2lkdGgmJjEyOD09PQp0aGlzLndpbmRvd0NlbnRlcnx8dGhpcy5jb250cmFzdEltYWdlKHAuZGF0YSx0aGlzLndpbmRvd1dpZHRoLHRoaXMud2luZG93Q2VudGVyKTshbSYmdGhpcy5zYWxpZW5jeSYmdGhpcy5zaG93U2FsaWVuY3kmJnRoaXMuc2FsaWVuY3lba10mJnRoaXMuYWRkU2FsaWVuY3lUb0ltYWdlKHAuZGF0YSx0aGlzLnNhbGllbmN5W2tdKTtrPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpO2sud2lkdGg9ZztrLmhlaWdodD1sO2suZ2V0Q29udGV4dCgiMmQiKS5wdXRJbWFnZURhdGEocCwwLDApO2YuY2xlYXJSZWN0KDAsMCxnLGwpO2YuZHJhd0ltYWdlKGssMCwwKX19LHNob3dTYWxDaGVja2JveENoYW5nZTpmdW5jdGlvbigpe3RoaXMuc2hvd1NhbGllbmN5PXRoaXMuJC5zYWxDaGVja2JveC5jaGVja2VkfSx1cGRhdGVJbWFnZXM6ZnVuY3Rpb24oKXtmb3IoY29uc3QgZiBpbiB0aGlzLmltYWdlSW5mbylpZih0aGlzLmltYWdlSW5mby5oYXNPd25Qcm9wZXJ0eShmKSl0aGlzLmltYWdlSW5mb1tmXS5vbmxvYWQoZiwKdGhpcy5pbWFnZUluZm9bZl0uaW1hZ2VFbGVtZW50KX0sc2hvdWxkU2hvd0ltYWdlQ29udHJvbHM6ZnVuY3Rpb24oZixnKXtyZXR1cm4gZiYmZ30sc2hvdWxkRW5hYmxlQWRkRmVhdHVyZTpmdW5jdGlvbihmKXtyZXR1cm4gMDxmLmxlbmd0aH0sZ2V0RGVsZXRlVmFsdWVCdXR0b25DbGFzczpmdW5jdGlvbihmLGcpe3JldHVybiBmfHwhZz8iZGVsZXRlLXZhbHVlLWJ1dHRvbiBkZWxldGUtdmFsdWUtYnV0dG9uLWhpZGRlbiI6ImRlbGV0ZS12YWx1ZS1idXR0b24ifSxnZXREZWxldGVGZWF0dXJlQnV0dG9uQ2xhc3M6ZnVuY3Rpb24oZil7cmV0dXJuIGY/ImhpZGUtY29udHJvbHMiOiJkZWxldGUtZmVhdHVyZS1idXR0b24ifSxnZXRBZGRWYWx1ZUJ1dHRvbkNsYXNzOmZ1bmN0aW9uKGYpe3JldHVybiBmPyJoaWRlLWNvbnRyb2xzIjoiYWRkLXZhbHVlLWJ1dHRvbiJ9LGdldEFkZEZlYXR1cmVCdXR0b25DbGFzczpmdW5jdGlvbihmKXtyZXR1cm4gZj8iaGlkZS1jb250cm9scyI6ImFkZC1mZWF0dXJlLWJ1dHRvbiJ9LApnZXRVcGxvYWRJbWFnZUNsYXNzOmZ1bmN0aW9uKGYpe3JldHVybiBmPyJoaWRlLWNvbnRyb2xzIjoidXBsb2FkLWltYWdlLWJ1dHRvbiJ9LGRlY29kZUJ5dGVzTGlzdFRvU3RyaW5nOmZ1bmN0aW9uKGYpe2xldCBnPSIiLGw7Zm9yKGw9MDtsPGYubGVuZ3RoLzE2Mzg0O2wrKylnKz1TdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsZi5zbGljZSgxNjM4NCpsLDE2Mzg0KihsKzEpKSk7cmV0dXJuIGcrPVN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxmLnNsaWNlKDE2Mzg0KmwpKX19KX0pKHFxfHwocXE9e30pKTsKPC9zY3JpcHQ+CjwvZG9tLW1vZHVsZT4KCgo8ZG9tLW1vZHVsZSBpZD0idGYtaW50ZXJhY3RpdmUtaW5mZXJlbmNlLWRhc2hib2FyZCI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlIGlkPSJsaW50ZXItcGFwZXItYnV0dG9uLXN0eWxlIj4KICAgICAgLyoqCiAgICAgICAqIFRoaXMgc3R5bGUgcHJlc2VydmVzIHRoZSBzdHlsaW5nIHByZXZpb3VzIHRvCiAgICAgICAqIGh0dHBzOi8vZ2l0aHViLmNvbS9Qb2x5bWVyRWxlbWVudHMvcGFwZXItYnV0dG9uL3B1bGwvMTE1CiAgICAgICAqIFRoaXMgY2hhbmdlIGNhbiBicmVhayB0aGUgbGF5b3V0IG9mIHBhcGVyLWJ1dHRvbiBjb250ZW50LgogICAgICAgKiBSZW1vdmUgdGhpcyBzdHlsZSB0byBhcHBseSB0aGUgY2hhbmdlLCBtb3JlIGRldGFpbHMgYXQgYi83MDUyODM1Ni4KICAgICAgICovCiAgICAgIHBhcGVyLWJ1dHRvbiB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICBmb250LWZhbWlseTogaW5oZXJpdDsKICAgICAgfQogICAgPC9zdHlsZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGZvbnQtZmFtaWx5OiAnUm9ib3RvJywgJ05vdG8nLCBzYW5zLXNlcmlmOwogICAgICAgIC0tcGFwZXItdGFiLWluazogdmFyKC0tdGItb3JhbmdlLWRhcmspOwogICAgICAgIC0td2l0LWNvbG9yLWdyYXkzMDA6ICNkYWRjZTA7CiAgICAgIH0KCiAgICAgIFtoaWRkZW5dIHsKICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICAgIH0KCiAgICAgICNjbGFzc2lmaWNhdGlvbiB7CiAgICAgICAgd2lkdGg6IDQwJTsKICAgICAgfQoKICAgICAgLmV4YW1wbGUtaG9sZGVyIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgLmluZmVyZW5jZS1zZWN0aW9uLWhvbGRlciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBtYXJnaW4tdG9wOiA2cHg7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiA2cHg7CiAgICAgIH0KCiAgICAgIC5pbmZlcmVuY2Utc2VjdGlvbiB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0td2l0LWNvbG9yLWdyYXkzMDApOwogICAgICB9CgogICAgICAuaW5mZXJlbmNlLXZpZXdlciB7CiAgICAgICAgbWF4LWhlaWdodDogMzUlOwogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgfQoKICAgICAgLmNvbXBhcmUtaW5mZXJlbmNlLXZpZXdlciB7CiAgICAgICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCB2YXIoLS13aXQtY29sb3ItZ3JheTMwMCk7CiAgICAgIH0KCiAgICAgIC50Zi1vcHRpb24tc2VsZWN0b3ItMCAuY29udGVudC13cmFwcGVyLnRmLW9wdGlvbi1zZWxlY3RvciA+ICogewogICAgICAgIHdpZHRoOiA0MCU7CiAgICAgIH0KCiAgICAgICNzcGlubmVyIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiA5NXB4OwogICAgICAgIGxlZnQ6IDEwcHg7CiAgICAgICAgd2lkdGg6IDE0cHg7CiAgICAgICAgaGVpZ2h0OiAxNHB4OwogICAgICAgIC0tcGFwZXItc3Bpbm5lci1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgIH0KCiAgICAgIC5ub2V4YW1wbGVzIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiA3NXB4OwogICAgICAgIGxlZnQ6IDMwcHg7CiAgICAgIH0KCiAgICAgIC5jZW50ZXIgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfQoKICAgICAgLmluZm8tdGV4dCB7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGNvbG9yOiAjM2M0MDQzOwogICAgICAgIGxldHRlci1zcGFjaW5nOiAwLjI1cHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDIwcHg7CiAgICAgICAgbWFyZ2luOiAxMnB4IGF1dG87CiAgICAgIH0KCiAgICAgIC5wZC1pbmZvLXRleHQgewogICAgICAgIGZvbnQtc2l6ZTogMThweDsKICAgICAgICBjb2xvcjogIzNjNDA0MzsKICAgICAgICBsaW5lLWhlaWdodDogMjRweDsKICAgICAgICBwYWRkaW5nLXRvcDogMTJweDsKICAgICAgICBwYWRkaW5nLXJpZ2h0OiA0cHg7CiAgICAgICAgcGFkZGluZy1sZWZ0OiAxMnB4OwogICAgICB9CgogICAgICAucGQtbm8tZmVhdHVyZXMtdGV4dCB7CiAgICAgICAgZm9udC1zaXplOiAxOHB4OwogICAgICAgIGNvbG9yOiAjM2M0MDQzOwogICAgICAgIHBhZGRpbmc6IDEycHggNDhweDsKICAgICAgfQoKICAgICAgLmFjY2VwdC1idXR0b24taG9sZGVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZTsKICAgICAgfQoKICAgICAgLnNldHRpbmdzLWJ1dHRvbiB7CiAgICAgICAgbWFyZ2luLXRvcDogNHB4OwogICAgICB9CgogICAgICAuZGF0YXBvaW50LXJpZ2h0LWNvbnRyb2xzLWhvbGRlciAuY29udHJvbCB7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgIH0KCiAgICAgIC5idXR0b24gewogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBtYXJnaW46IDEwcHggMCAwIDA7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgY29sb3I6IHdoaXRlOwogICAgICB9CgogICAgICAuYnV0dG9uW2Rpc2FibGVkXSB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2NjYzsKICAgICAgfQoKICAgICAgLmlucHV0LWFuZC10b29sdGlwIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICB9CgogICAgICAubGFiZWwtdm9jYWItcGF0aC1pbnB1dCB7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICB9CgogICAgICAudGhyZXNob2xkLWRyb3Bkb3duIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICB3aWR0aDogMTUwcHg7CiAgICAgICAgbWluLXdpZHRoOiAxNTBweDsKICAgICAgICBwYWRkaW5nLXJpZ2h0OiAxNnB4OwogICAgICAgIC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWlucHV0OiB7CiAgICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgICBjb2xvcjogIzNjNDA0MzsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC5jb3VudGVyZmFjdHVhbC1kcm9wZG93biB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIHdpZHRoOiAxMDBweDsKICAgICAgICBtaW4td2lkdGg6IDUwcHg7CiAgICAgICAgcGFkZGluZy1yaWdodDogNXB4OwogICAgICAgIC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWlucHV0OiB7CiAgICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgICBjb2xvcjogIzNjNDA0MzsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC5zbGlkZXItbGFiZWwgewogICAgICAgIG1hcmdpbi10b3A6IDhweDsKICAgICAgfQoKICAgICAgLmZhY2V0LWxhYmVsIHsKICAgICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci11bmRlcmxpbmU6IHsKICAgICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgICAgfQogICAgICAgIC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWlucHV0OiB7CiAgICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIH0KICAgICAgfQoKICAgICAgLnNsaWRlciB7CiAgICAgICAgd2lkdGg6IDI4MHB4OwogICAgICAgIC0tcGFwZXItc2xpZGVyLWlucHV0OiB7CiAgICAgICAgICB3aWR0aDogODBweDsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC5zbGlkZXItbW9kZWwtb25lIHsKICAgICAgICAtLXBhcGVyLXNsaWRlci1rbm9iLWNvbG9yOiAjMTJiNWNlOwogICAgICAgIC0tcGFwZXItc2xpZGVyLWFjdGl2ZS1jb2xvcjogIzEyYjVjZTsKICAgICAgfQoKICAgICAgLnNsaWRlci1tb2RlbC10d28gewogICAgICAgIC0tcGFwZXItc2xpZGVyLWtub2ItY29sb3I6ICNmYTc4MTc7CiAgICAgICAgLS1wYXBlci1zbGlkZXItYWN0aXZlLWNvbG9yOiAjZmE3ODE3OwogICAgICB9CgogICAgICAucHItbGluZS1jaGFydCB7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICAgIGhlaWdodDogMjAwcHg7CiAgICAgICAgd2lkdGg6IDI4MHB4OwogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgfQoKICAgICAgcGFwZXItZGlhbG9nLmluZmVyZW5jZS1zZXR0aW5ncyB7CiAgICAgICAgcGFkZGluZzogMjBweDsKICAgICAgICB3aWR0aDogNDAlOwogICAgICAgIG1heC13aWR0aDogNDAlOwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgICAgYm9yZGVyLXJhZGl1czogMTBweDsKICAgICAgfQoKICAgICAgLmRhc2hib2FyZC1sYXlvdXQgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlOwogICAgICB9CgogICAgICAuY2VudGVyIHsKICAgICAgICB3aWR0aDogNjAlOwogICAgICB9CgogICAgICAuc2lkZS1ob2xkZXIgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB3aWR0aDogNDAlOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIH0KCiAgICAgIC5zaWRlLWNvbnRlbnQgewogICAgICAgIHBhZGRpbmctbGVmdDogNXB4OwogICAgICAgIHdpZHRoOiBjYWxjKDEwMCUgLSAxMHB4KTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgIH0KCiAgICAgIC5zaWRlLXRhYnMgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgaGVpZ2h0OiBjYWxjKDEwMCUgLSA1MHB4KTsKICAgICAgfQoKICAgICAgLmRhdGFwb2ludC10YWIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgb3ZlcmZsb3c6IGF1dG87CiAgICAgIH0KCiAgICAgIC5jb25maWctdGFiIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICB9CgogICAgICAuY29uZmlnLXNpZGUtY29udGVudCB7CiAgICAgICAgcGFkZGluZy1sZWZ0OiA1cHg7CiAgICAgICAgd2lkdGg6IDMwJTsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkIHZhcigtLXdpdC1jb2xvci1ncmF5MzAwKTsKICAgICAgfQoKICAgICAgLmNvbmZpZy1tYWluLWNvbnRlbnQgewogICAgICAgIHdpZHRoOiA3MCU7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGJhY2tncm91bmQ6ICNmOGY5ZmE7CiAgICAgIH0KCiAgICAgIC5zdGF0cy10YWIgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgb3ZlcmZsb3c6IGF1dG87CiAgICAgIH0KCiAgICAgIC5wZC10YWIgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIHBhZGRpbmc6IDVweCAxMHB4OwogICAgICB9CgogICAgICAucGQtcGxvdHMtaGVhZGVyIHsKICAgICAgICBoZWlnaHQ6IDUycHg7CiAgICAgICAgbWluLWhlaWdodDogNTJweDsKICAgICAgICBtYXgtaGVpZ2h0OiA1MnB4OwogICAgICAgIGJvcmRlci1ib3R0b206IHNvbGlkIDJweCB2YXIoLS13aXQtY29sb3ItZ3JheTMwMCk7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgIH0KCiAgICAgIC5wZHBsb3RzLWhvbGRlciB7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICAgIG92ZXJmbG93LXk6IG92ZXJsYXk7CiAgICAgICAgYmFja2dyb3VuZDogI2Y4ZjlmYTsKICAgICAgfQoKICAgICAgLnBkLXJhbmdlLWh5cGhlbiB7CiAgICAgICAgcGFkZGluZy1yaWdodDogNnB4OwogICAgICAgIHBhZGRpbmctdG9wOiA4cHg7CiAgICAgIH0KCiAgICAgIC5wZC1yYW5nZS1jb250cm9sIHsKICAgICAgICBib3JkZXItYm90dG9tOiBzb2xpZCAxcHggI2ZjYzkzNDsKICAgICAgICBib3JkZXItdG9wOiBub25lOwogICAgICAgIGJvcmRlci1sZWZ0OiBub25lOwogICAgICAgIGJvcmRlci1yaWdodDogbm9uZTsKICAgICAgICBoZWlnaHQ6IDM2cHg7CiAgICAgICAgd2lkdGg6IDEwNHB4OwogICAgICAgIG1hcmdpbi1yaWdodDogNnB4OwogICAgICB9CgogICAgICAjb3ZlcnZpZXcgewogICAgICAgIG1heC1oZWlnaHQ6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CgogICAgICAuaW5mZXJlbmNlLWhlYWRlci5oZWFkaW5nIHsKICAgICAgICBiYWNrZ3JvdW5kOiAjZTRmN2ZiOwogICAgICB9CgogICAgICAucmlnaHQtc2lkZSB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIHRvcDogMDsKICAgICAgfQoKICAgICAgLnJpZ2h0LXNpZGUtcGVyZm9ybWFuY2UtdGFiIHsKICAgICAgICBtYXJnaW46IDRweDsKICAgICAgfQoKICAgICAgdGYtY29uZnVzaW9uLW1hdHJpeCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH0KCiAgICAgIC5jb25mLW1hdHJpeC1ob2xkZXIgewogICAgICAgIG1hcmdpbi10b3A6IDIwcHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMThweDsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDI0cHg7CiAgICAgIH0KCiAgICAgIC5jb25mLW1hdHJpeCB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMThweDsKICAgICAgfQoKICAgICAgLmRhdGFwb2ludC1jb250cm9scy1ob2xkZXIuZGF0YXBvaW50LWNvbnRyb2wtYnV0dG9ucy1ob2xkZXIgewogICAgICAgIHBhZGRpbmctbGVmdDogMnB4OwogICAgICB9CgogICAgICAuZGF0YXBvaW50LWNvbnRyb2xzLWhvbGRlci5kYXRhcG9pbnQtY29udHJvbC1zZWFyY2gtaG9sZGVyIHsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDEwcHg7CiAgICAgIH0KCiAgICAgIC5kYXRhcG9pbnQtY29udHJvbHMtaG9sZGVyIHsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0td2l0LWNvbG9yLWdyYXkzMDApOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1ncm93OiAwOwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICBtYXJnaW4tbGVmdDogMXB4OwogICAgICB9CgogICAgICAuZGF0YXBvaW50LWxlZnQtY29udHJvbHMtaG9sZGVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtd3JhcDogd3JhcDsKICAgICAgfQoKICAgICAgLmRhdGFwb2ludC1yaWdodC1jb250cm9scy1ob2xkZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC50Zi1jYXRlZ29yeS1wYW5lIHsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgIH0KCiAgICAgIC50Zi1jYXRlZ29yeS1wYW5lLWNvbnRlbnQgewogICAgICAgIGZsZXgtd3JhcDogd3JhcDsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgcGFkZGluZzogMTJweDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS13aXQtY29sb3ItZ3JheTMwMCk7CiAgICAgICAgYm9yZGVyLXRvcDogbm9uZTsKICAgICAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAycHg7CiAgICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDJweDsKICAgICAgICBiYWNrZ3JvdW5kOiB3aGl0ZTsKICAgICAgfQoKICAgICAgOmhvc3QgdnotbGluZS1jaGFydDIgewogICAgICAgIG1hcmdpbjogMTJweCAxMnB4IDEycHggMjRweDsKICAgICAgICBoZWlnaHQ6IDE4MHB4OwogICAgICAgIHdpZHRoOiAzMDBweDsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgIH0KCiAgICAgIDpob3N0IHZ6LWJhci1jaGFydCB7CiAgICAgICAgbWFyZ2luOiAxMnB4IDEycHggMTJweCAyNHB4OwogICAgICAgIGhlaWdodDogMjQwcHg7CiAgICAgICAgd2lkdGg6IDQ1MHB4OwogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgfQoKICAgICAgLnBkLWlucHV0LWNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgZmxleC1ncm93OiAwOwogICAgICAgIHBhZGRpbmc6IDEycHggNDhweCAyNHB4IDI0cHg7CiAgICAgICAgYmFja2dyb3VuZDogI2ZlZjdlMDsKICAgICAgICBib3JkZXI6IHNvbGlkIDFweCAjZmRlMjkzOwogICAgICB9CgogICAgICAuc3R5bGUtaW5wdXQgewogICAgICAgIHdpZHRoOiA1MHB4OwogICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OwogICAgICAgIGJhY2tncm91bmQ6IHdoaXRlOwogICAgICB9CgogICAgICAuZmVhdHVyZS1jb250YWluZXItaG9sZGVyIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgb3ZlcmZsb3c6IGF1dG87CiAgICAgICAgYmFja2dyb3VuZDogd2hpdGU7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICB9CgogICAgICAuZGF0YXBvaW50LWNvbnRyb2wtZmlsdGVyLWlucHV0IHsKICAgICAgICBib3JkZXItcmFkaXVzOiAycHg7CiAgICAgICAgbWF4LXdpZHRoOiA2MCU7CiAgICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXI6IHsKICAgICAgICAgIHBhZGRpbmc6IDRweCA2cHggMnB4IDRweDsKICAgICAgICB9CiAgICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItaW5wdXQ6IHsKICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICAgIGNvbG9yOiAjM2M0MDQzOwogICAgICAgIH0KICAgICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1sYWJlbDogewogICAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgICAgY29sb3I6ICM4MDg2OGI7CiAgICAgICAgfQogICAgICB9CgogICAgICAuZGF0YXBvaW50LWNvbnRyb2wtZmlsdGVyLWlucHV0IGlyb24taWNvbiB7CiAgICAgICAgY29sb3I6ICM5YmEwYTY7CiAgICAgIH0KCiAgICAgIC5mZWF0dXJlLXNlYXJjaC1pbnB1dCB7CiAgICAgICAgcGFkZGluZy10b3A6IDNweDsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgbWF4LXdpZHRoOiAxNTBweDsKICAgICAgfQoKICAgICAgLmNvbnRyb2wtYnV0dG9uIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS13aXQtY29sb3ItZ3JheTMwMCk7CiAgICAgICAgY29sb3I6IHZhcigtLXRiLW9yYW5nZS1kYXJrKTsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweDsKICAgICAgICB0ZXh0LXRyYW5zZm9ybTogbm9uZTsKICAgICAgICBtYXJnaW46IDVweDsKICAgICAgfQoKICAgICAgLmNvbnRyb2wtYnV0dG9uW2Rpc2FibGVkXSB7CiAgICAgICAgY29sb3I6ICM1ZjYzNjg7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2Y0ZjRmNDsKICAgICAgfQoKICAgICAgLm1haW4tYnV0dG9uIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2UtZGFyayk7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tdGItb3JhbmdlLWRhcmspOwogICAgICAgIGNvbG9yOiB3aGl0ZTsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweDsKICAgICAgICB0ZXh0LXRyYW5zZm9ybTogbm9uZTsKICAgICAgICBtYXJnaW46IDVweDsKICAgICAgfQoKICAgICAgLm1haW4tYnV0dG9uW2Rpc2FibGVkXSB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogbGlnaHRncmF5OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIGxpZ2h0Z3JheTsKICAgICAgICBjb2xvcjogZ3JheTsKICAgICAgfQoKICAgICAgLm9wdGltaXplLXRocmVzaG9sZC1idXR0b24gewogICAgICAgIG1hcmdpbjogNXB4IDA7CiAgICAgICAgd2lkdGg6IDE1MHB4OwogICAgICAgIG1pbi13aWR0aDogMTUwcHg7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiAxNnB4OwogICAgICB9CgogICAgICAuY2xvc2UtcGFydGlhbC1kZXBzLWJ1dHRvbiB7CiAgICAgICAgbWFyZ2luOiAxMHB4OwogICAgICB9CgogICAgICBwYXBlci10YWJzIHsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIC0tcGFwZXItdGFicy1zZWxlY3Rpb24tYmFyLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2UtZGFyayk7CiAgICAgIH0KCiAgICAgIHBhcGVyLXRhYiB7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgICAgICAgcGFkZGluZzogMCAyNHB4OwogICAgICAgIGxldHRlci1zcGFjaW5nOiAwLjFweDsKICAgICAgfQoKICAgICAgcGFwZXItdGFiOm5vdCguaXJvbi1zZWxlY3RlZCkgewogICAgICAgIGNvbG9yOiAjM2M0MDQzOwogICAgICB9CgogICAgICBwYXBlci10YWIuaXJvbi1zZWxlY3RlZCB7CiAgICAgICAgY29sb3I6ICMyMDIxMjQ7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgfQoKICAgICAgLmN1cnZlcy1ob2xkZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICAgIG1hcmdpbi10b3A6IDIwcHg7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICAuY3VydmUtaG9sZGVyIHsKICAgICAgICB3aWR0aDogMzAwcHg7CiAgICAgICAgaGVpZ2h0OiAyMzVweDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAyMHB4OwogICAgICAgIG1hcmdpbi1yaWdodDogMjBweDsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KCiAgICAgIC5yb2MteC1sYWJlbCB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICBsZWZ0OiAxMjBweDsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgY29sb3I6ICM1ZjYzNjg7CiAgICAgICAgcGFkZGluZzogMHB4OwogICAgICB9CgogICAgICAucm9jLXktbGFiZWwgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBsZWZ0OiAtMzZweDsKICAgICAgICBib3R0b206IDExMHB4OwogICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDI3MGRlZyk7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGNvbG9yOiAjNWY2MzY4OwogICAgICAgIHBhZGRpbmc6IDBweDsKICAgICAgfQoKICAgICAgLnByLXgtbGFiZWwgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgbGVmdDogMTQwcHg7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGNvbG9yOiAjNWY2MzY4OwogICAgICAgIHBhZGRpbmc6IDBweDsKICAgICAgfQoKICAgICAgLnByLXktbGFiZWwgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBsZWZ0OiAtMTRweDsKICAgICAgICBib3R0b206IDExMHB4OwogICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDI3MGRlZyk7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGNvbG9yOiAjNWY2MzY4OwogICAgICAgIHBhZGRpbmc6IDBweDsKICAgICAgfQoKICAgICAgLmZsZXggewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIH0KCiAgICAgIC5zcGFjZS1iZXR3ZWVuIHsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgIH0KCiAgICAgIC5mbGV4LXdyYXAgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICB9CgogICAgICAub3B0aW1pemUtdGV4dCB7CiAgICAgICAgbWFyZ2luOiA1cHggMDsKICAgICAgICBjb2xvcjogZ3JleTsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgIH0KCiAgICAgIC50aHJlc2hvbGQtY29zdC1pbnB1dCB7CiAgICAgICAgd2lkdGg6IDE1MHB4OwogICAgICAgIG1pbi13aWR0aDogMTUwcHg7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiAxNnB4OwogICAgICAgIC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWlucHV0OiB7CiAgICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgICBjb2xvcjogIzNjNDA0MzsKICAgICAgICB9CiAgICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItbGFiZWw6IHsKICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICAgIGNvbG9yOiAjODA4NjhiOwogICAgICAgIH0KICAgICAgfQoKICAgICAgLmJvbGQgewogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgIH0KCiAgICAgIC5pbmRlbnQgewogICAgICAgIG1hcmdpbi1sZWZ0OiAxMHB4OwogICAgICB9CgogICAgICAuZmVhdHVyZS1icmVha2Rvd24gewogICAgICAgIG1hcmdpbi1sZWZ0OiAxMnB4OwogICAgICB9CgogICAgICAub3B0aW1pemUtc2VsZWN0aW9uLWJ1dHRvbiB7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDA7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogNXB4OwogICAgICB9CgogICAgICAucmVnLXRhYmxlLWNhdGVnb3J5IHsKICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OwogICAgICB9CgogICAgICAucmVnLXRhYmxlLXZhbHVlIHsKICAgICAgICB0ZXh0LWFsaWduOiByaWdodDsKICAgICAgfQoKICAgICAgLnN1YmZlYXR1cmUtdGFibGUgewogICAgICAgIG1hcmdpbi1sZWZ0OiAxMHB4OwogICAgICB9CgogICAgICAuY291bnRlcmZhY3R1YWwtYnV0dG9uLWludHJvIHsKICAgICAgICBwYWRkaW5nOiA3cHggMCAwIDEwcHg7CiAgICAgIH0KCiAgICAgIC5tYWluLXZlcnRpY2FsIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgLm1haW4tYm90dG9tLWJhciB7CiAgICAgICAgaGVpZ2h0OiA1MnB4OwogICAgICAgIG1pbi1oZWlnaHQ6IDUycHg7CiAgICAgICAgZmxleC1ncm93OiAwOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgLyogYm94LXNoYWRvdzogMCAycHggNXB4IGdyZXk7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogM3B4OyAqLwogICAgICAgIGJvcmRlci1ib3R0b206IHNvbGlkIDFweCAjZGFkY2UwOwogICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgfQoKICAgICAgLm1haW4tY29udGVudCB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CgogICAgICAuZGlzdC1zd2l0Y2ggewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgbWFyZ2luLXRvcDogMDsKICAgICAgfQoKICAgICAgLmRpc3RhbmNlLXZpcy1kcm9wZG93biB7CiAgICAgICAgbWFyZ2luLXRvcDogMDsKICAgICAgfQoKICAgICAgI2Rpc3RhbmNlZGlhbG9nIHsKICAgICAgICB3aWR0aDogMzAlOwogICAgICB9CgogICAgICAjZGlzdGFuY2VkaWFsb2cgLmJ1dHRvbnMgewogICAgICAgIGNvbG9yOiAjZjU3YzAwOwogICAgICB9CgogICAgICBwYXBlci1yYWRpby1idXR0b24gewogICAgICAgIC0tcGFwZXItcmFkaW8tYnV0dG9uLWxhYmVsOiB7CiAgICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgICBjb2xvcjogIzNjNDA0MzsKICAgICAgICB9CiAgICAgICAgLS1wYXBlci1yYWRpby1idXR0b24tdW5jaGVja2VkLWNvbG9yOiAjM2M0MDQzOwogICAgICAgIC0tcGFwZXItcmFkaW8tYnV0dG9uLXVuY2hlY2tlZC1pbmstY29sb3I6ICMzYzQwNDM7CiAgICAgICAgLS1wYXBlci1yYWRpby1idXR0b24tY2hlY2tlZC1jb2xvcjogIzNjNDA0MzsKICAgICAgICAtLXBhcGVyLXJhZGlvLWJ1dHRvbi1jaGVja2VkLWluay1jb2xvcjogIzNjNDA0MzsKICAgICAgfQoKICAgICAgcGFwZXItaWNvbi1idXR0b24gewogICAgICAgIGNvbG9yOiAjNWY2MzY4OwogICAgICB9CgogICAgICBwYXBlci1pY29uLWJ1dHRvbltkaXNhYmxlZF0gewogICAgICAgIGNvbG9yOiAjOWFhMGE2OwogICAgICB9CgogICAgICAucmVzaXplciB7CiAgICAgICAgZGlzcGxheTogdGFibGU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIHdpZHRoOiA4cHg7CiAgICAgICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCB2YXIoLS13aXQtY29sb3ItZ3JheTMwMCk7CiAgICAgICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgdmFyKC0td2l0LWNvbG9yLWdyYXkzMDApOwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgfQoKICAgICAgLmV4YW1wbGUtc3RhdHVzIHsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgY29sb3I6ICM1ZjYzNjg7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICAgIHBhZGRpbmctdG9wOiAyMHB4OwogICAgICB9CgogICAgICAuZXhhbXBsZS1pZC1sYWJlbCB7CiAgICAgICAgcGFkZGluZzogOXB4IDVweCA5cHggMDsKICAgICAgfQoKICAgICAgLmV4YW1wbGUtaWQtaW5wdXQgewogICAgICAgIHdpZHRoOiA3MHB4OwogICAgICAgIHBhZGRpbmctdG9wOiAzcHg7CiAgICAgIH0KCiAgICAgIC5oZWFkaW5nLWFuZC1jYXJkIHsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCBsaWdodGdyYXk7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiA1cHg7CiAgICAgICAgbWFyZ2luLXRvcDogNXB4OwogICAgICAgIHBhZGRpbmctdG9wOiAxcHg7CiAgICAgIH0KCiAgICAgIC5lZGl0b3ItaGVhZGluZy1hbmQtY2FyZCB7CiAgICAgICAgZmxleDogMTsKICAgICAgICBvdmVyZmxvdy15OiBvdmVybGF5OwogICAgICB9CgogICAgICAuaGVhZGluZyB7CiAgICAgICAgY29sb3I6ICM1ZjYzNjg7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHBhZGRpbmc6IDEwcHggOHB4OwogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmZWY3ZTA7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLXdpdC1jb2xvci1ncmF5MzAwKTsKICAgICAgICBib3JkZXItdG9wOiBub25lOwogICAgICAgIGJvcmRlci1sZWZ0OiBub25lOwogICAgICAgIGJvcmRlci1yaWdodDogbm9uZTsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiByZ2JhKDAsIDAsIDAsIDApOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICAgIH0KCiAgICAgIC5jYXJkIHsKICAgICAgICBwYWRkaW5nOiAwIDEwcHggNXB4OwogICAgICB9CgogICAgICAubm8tcGFkZGluZy1jYXJkIHsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICB9CgogICAgICAudG9vbHRpcCB7CiAgICAgICAgLS1wYXBlci10b29sdGlwOiB7CiAgICAgICAgICBmb250LXNpemU6IDE2cHg7CiAgICAgICAgfQogICAgICAgIC0tcGFwZXItdG9vbHRpcC1kZWxheS1vdXQ6IDIwMDBtczsKICAgICAgfQoKICAgICAgLmNvbW1lbnQtaWNvbiB7CiAgICAgICAgd2lkdGg6IDMwcHg7CiAgICAgICAgaGVpZ2h0OiAzMHB4OwogICAgICAgIG1pbi13aWR0aDogMzBweDsKICAgICAgICBtaW4taGVpZ2h0OiAzMHB4OwogICAgICAgIG1hcmdpbi10b3A6IDEwcHg7CiAgICAgICAgY29sb3I6IHZhcigtLXRiLW9yYW5nZS1kYXJrKTsKICAgICAgfQoKICAgICAgLmFycm93LWljb24gewogICAgICAgIHdpZHRoOiA1MHB4OwogICAgICAgIGhlaWdodDogNTBweDsKICAgICAgICBtaW4td2lkdGg6IDUwcHg7CiAgICAgICAgbWluLWhlaWdodDogNTBweDsKICAgICAgICBjb2xvcjogdmFyKC0tdGItb3JhbmdlLWRhcmspOwogICAgICB9CgogICAgICAucGQtYXJyb3ctaWNvbiB7CiAgICAgICAgd2lkdGg6IDQwcHg7CiAgICAgICAgaGVpZ2h0OiA0MHB4OwogICAgICAgIG1pbi13aWR0aDogNDBweDsKICAgICAgICBtaW4taGVpZ2h0OiA0MHB4OwogICAgICAgIG1hcmdpbi10b3A6IDVweDsKICAgICAgICBjb2xvcjogZ3JleTsKICAgICAgfQoKICAgICAgLnBkLXRvZ2dsZSB7CiAgICAgICAgbWFyZ2luOiAwIDhweCAwIDIwcHg7CiAgICAgIH0KCiAgICAgIC5wZC1lbnRyeS1jb250YWluZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlOwogICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgIH0KCiAgICAgIC5pbmZvLWljb24gewogICAgICAgIHdpZHRoOiAyMHB4OwogICAgICAgIGhlaWdodDogMjBweDsKICAgICAgICBtaW4td2lkdGg6IDIwcHg7CiAgICAgICAgbWluLWhlaWdodDogMjBweDsKICAgICAgICBtYXJnaW4tdG9wOiAxMHB4OwogICAgICAgIGNvbG9yOiBncmV5OwogICAgICB9CgogICAgICAuaW5mby1pY29uLmNmLWluZm8taWNvbiB7CiAgICAgICAgbWFyZ2luLXRvcDogMTJweDsKICAgICAgfQoKICAgICAgLmluZm8taWNvbi50aHJlc2gtaW5mby1pY29uIHsKICAgICAgICBtYXJnaW4tdG9wOiAtM3B4OwogICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CiAgICAgIH0KCiAgICAgIC5pbmZvLWljb24ucGQtaW5mby1pY29uIHsKICAgICAgICBtYXJnaW4tdG9wOiAxNXB4OwogICAgICB9CgogICAgICAuaW5mby1pY29uLnRocmVzaG9sZC1pbmZvLWljb24gewogICAgICAgIG1hcmdpbi10b3A6IDA7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTBweDsKICAgICAgICBtYXJnaW4tbGVmdDogNXB4OwogICAgICB9CgogICAgICAuaW5mby1pY29uLnBlcmZvcm1hbmNlLWluZm8taWNvbiB7CiAgICAgICAgbWFyZ2luLXRvcDogMThweDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxMHB4OwogICAgICAgIG1hcmdpbi1sZWZ0OiA1cHg7CiAgICAgIH0KCiAgICAgIC5uby1wYWRkaW5nIHsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICB9CgogICAgICAucmVzaXplLWljb24gewogICAgICAgIGRpc3BsYXk6IHRhYmxlLWNlbGw7CiAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKICAgICAgICBjb2xvcjogZ3JleTsKICAgICAgICB3aWR0aDogMTBweDsKICAgICAgICBoZWlnaHQ6IDEwcHg7CiAgICAgICAgbWluLXdpZHRoOiAxMHB4OwogICAgICAgIG1pbi1oZWlnaHQ6IDEwcHg7CiAgICAgIH0KCiAgICAgIC5oZWxwLXRleHQgewogICAgICAgIGNvbG9yOiAjNWY2MzY4OwogICAgICAgIGZvbnQtc2l6ZTogMTBweDsKICAgICAgICBtYXgtd2lkdGg6IDIwMHB4OwogICAgICB9CgogICAgICAuaGVscC10aXRsZSB7CiAgICAgICAgY29sb3I6ICMwMDdiN2M7CiAgICAgICAgZm9udC1zaXplOiAxMXB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgICAgfQoKICAgICAgLmhlbHAtdGl0bGUtbWFyZ2luIHsKICAgICAgICBtYXJnaW4tdG9wOiAxNHB4OwogICAgICB9CgogICAgICAuaGVscC10aXRsZS1tYXJnaW4tYnV0dG9uIHsKICAgICAgICBtYXJnaW4tdG9wOiA0cHg7CiAgICAgIH0KCiAgICAgIC5oZWxwLXRpdGxlLW1hcmdpbi10aXRsZSB7CiAgICAgICAgbWFyZ2luLXRvcDogN3B4OwogICAgICB9CgogICAgICAuZGlhbG9nLWxpbmsgewogICAgICAgIGNvbG9yOiAjNWY2MzY4OwogICAgICAgIGZvbnQtc2l6ZTogMTBweDsKICAgICAgICBmb250LXN0eWxlOiBpdGFsaWM7CiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICB9CgogICAgICAucm9jLXRleHQgewogICAgICAgIGNvbG9yOiAjM2M0MDQzOwogICAgICAgIGZvbnQtc2l6ZTogMTZweDsKICAgICAgICBtYXJnaW4tbGVmdDogNDRweDsKICAgICAgfQoKICAgICAgLmNvbmYtdGV4dCB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTJweDsKICAgICAgICBjb2xvcjogIzNjNDA0MzsKICAgICAgICBmb250LXNpemU6IDE2cHg7CiAgICAgIH0KCiAgICAgIC5kaWFsb2ctdGV4dCB7CiAgICAgICAgZm9udC1zdHlsZTogbm9ybWFsOwogICAgICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICAgIH0KCiAgICAgIC5kaWFsb2ctdGl0bGUgewogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICB9CgogICAgICAudGl0bGUtd2lkdGggewogICAgICAgIHdpZHRoOiAyNTBweDsKICAgICAgICBwYWRkaW5nLXJpZ2h0OiAxNnB4OwogICAgICB9CgogICAgICAuZGF0YXBvaW50LWluZm8taG9sZGVyIHsKICAgICAgICBtYXJnaW46IDI0cHggYXV0bzsKICAgICAgICBtYXgtd2lkdGg6IDM4MHB4OwogICAgICAgIHBhZGRpbmc6IDI0cHg7CiAgICAgIH0KCiAgICAgIC5vbmJvYXJkaW5nLWhlYWRlciB7CiAgICAgICAgY29sb3I6ICMyMDIxMjQ7CiAgICAgICAgZm9udC1zaXplOiAyMnB4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDI4cHg7CiAgICAgIH0KCiAgICAgIC5vbmJvYXJkaW5nLXRleHQgewogICAgICAgIGNvbG9yOiAjM2M0MDQzOwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAyMHB4OwogICAgICB9CgogICAgICAuY29udHJvbC1pbmZvLWhlYWRlciB7CiAgICAgICAgY29sb3I6ICMzYzQwNDM7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgbWFyZ2luLXRvcDogMTBweDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxNXB4OwogICAgICB9CgogICAgICAuY29udHJvbC1pbmZvLXRleHQgewogICAgICAgIGNvbG9yOiAjM2M0MDQzOwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxNXB4OwogICAgICAgIG1heC13aWR0aDogNDYwcHg7CiAgICAgIH0KCiAgICAgIC5idXR0b24tcHJlZml4LWxhYmVsIHsKICAgICAgICBtYXJnaW46IDEycHggMCAwIDEycHg7CiAgICAgICAgY29sb3I6IGdyZXk7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICB9CgogICAgICAuYm9yZGVyLXJpZ2h0IHsKICAgICAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCB2YXIoLS13aXQtY29sb3ItZ3JheTMwMCk7CiAgICAgIH0KCiAgICAgIHBhcGVyLWRpYWxvZyB7CiAgICAgICAgY29sb3I6ICMzYzQwNDM7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMTBweDsKICAgICAgICBtYXgtd2lkdGg6IDYwMHB4OwogICAgICB9CgogICAgICAubWFpbi1idXR0b24ucnVuLWJ1dHRvbiB7CiAgICAgICAgcGFkZGluZzogNXB4OwogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgfQoKICAgICAgLmRvYy1pbWFnZSB7CiAgICAgICAgd2lkdGg6IDEyOHB4OwogICAgICAgIGhlaWdodDogOTZweDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS13aXQtY29sb3ItZ3JheTMwMCk7CiAgICAgIH0KCiAgICAgIC5jb250cm9sLWRpdmlkZXIgewogICAgICAgIG1hcmdpbjogNXB4IDAgNXB4IDVweDsKICAgICAgICB3aWR0aDogNXB4OwogICAgICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgdmFyKC0td2l0LWNvbG9yLWdyYXkzMDApOwogICAgICB9CgogICAgICAub3B0aW1pemF0aW9uLXJhZGlvIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwYWRkaW5nOiA3cHg7CiAgICAgIH0KCiAgICAgIC5vcHRpbWl6YXRpb24tcmFkaW8tZ3JvdXAgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgIH0KCiAgICAgIC5pbmZlci1pbmZvIHsKICAgICAgICBtYXJnaW4tbGVmdDogMzBweDsKICAgICAgfQoKICAgICAgLnNjcm9sbC14IHsKICAgICAgICBvdmVyZmxvdy14OiBhdXRvOwogICAgICB9CgogICAgICAucGVyZi10YWJsZS1jbGlja2FibGUgewogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgfQoKICAgICAgLnBlcmYtdGFibGUtdGl0bGUtcm93IHsKICAgICAgICBiYWNrZ3JvdW5kOiB3aGl0ZTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS13aXQtY29sb3ItZ3JheTMwMCk7CiAgICAgICAgbWluLWhlaWdodDogNTJweDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgIH0KICAgICAgLnBlcmYtdGFibGUtdGl0bGUgewogICAgICAgIGNvbG9yOiAjM2M0MDQzOwogICAgICAgIGZvbnQtc2l6ZTogMThweDsKICAgICAgICBtYXJnaW4tbGVmdDogMTRweDsKICAgICAgICBtYXJnaW4tdG9wOiAxNnB4OwogICAgICB9CiAgICAgIC5wZXJmLXRhYmxlLXNvcnQtbWVudSB7CiAgICAgICAgbWFyZ2luLXRvcDogLTEwcHg7CiAgICAgIH0KICAgICAgLnBlcmYtdGFibGUtaGVhZGVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiB3aGl0ZTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGNvbG9yOiAjODA4NjhiOwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBsaW5lLWhlaWdodDogMTZweDsKICAgICAgICBsZXR0ZXItc3BhY2luZzogMC4yNTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS13aXQtY29sb3ItZ3JheTMwMCk7CiAgICAgICAgbWluLWhlaWdodDogbWluLWNvbnRlbnQ7CiAgICAgICAgcGFkZGluZy10b3A6IDEycHg7CiAgICAgICAgcGFkZGluZy1ib3R0b206IDRweDsKICAgICAgfQoKICAgICAgLnBlcmYtdGFibGUtZW50cmllcy1ob2xkZXIgewogICAgICAgIG92ZXJmbG93LXk6IG92ZXJsYXk7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICB9CgogICAgICAucGVyZi10YWJsZS1lbnRyeSB7CiAgICAgICAgYmFja2dyb3VuZDogd2hpdGU7CiAgICAgICAgY29sb3I6ICMzYzQwNDM7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGJvcmRlci1ib3R0b206IHNvbGlkIDFweCB2YXIoLS13aXQtY29sb3ItZ3JheTMwMCk7CiAgICAgIH0KCiAgICAgIC5wZXJmLXRhYmxlLWVudHJ5LWV4cGFuZGVkIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtd3JhcDogd3JhcDsKICAgICAgICBtYXJnaW46IDAgMTJweDsKICAgICAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkIHZhcigtLXdpdC1jb2xvci1ncmF5MzAwKTsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0td2l0LWNvbG9yLWdyYXkzMDApOwogICAgICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkIHZhcigtLXdpdC1jb2xvci1ncmF5MzAwKTsKICAgICAgICBiYWNrZ3JvdW5kOiB3aGl0ZTsKICAgICAgfQoKICAgICAgLnBlcmYtdGFibGUtcm93IHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGJhY2tncm91bmQ6IHdoaXRlOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfQoKICAgICAgLnBlcmYtdGFibGUtcm93LWV4cGFuZGVkIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS13aXQtY29sb3ItZ3JheTMwMCk7CiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHZhcigtLXdpdC1jb2xvci1ncmF5MzAwKTsKICAgICAgICBib3JkZXItcmFkaXVzOiAycHg7CiAgICAgICAgYm94LXNoYWRvdzogMCAxcHggMnB4IDAgcmdiYSg2MCwgNjQsIDY3LCAwLjMpLAogICAgICAgICAgMCAxcHggM3B4IDFweCByZ2JhKDYwLCA2NCwgNjcsIDAuMTUpOwogICAgICAgIGJhY2tncm91bmQ6IHdoaXRlOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfQoKICAgICAgLnBlcmYtdGFibGUtdGV4dC1lbnRyeSB7CiAgICAgICAgaGVpZ2h0OiA0MHB4OwogICAgICAgIHBhZGRpbmctdG9wOiAxNnB4OwogICAgICB9CiAgICAgIC5wZXJmLXRhYmxlLW51bS1lbnRyeSB7CiAgICAgICAgaGVpZ2h0OiA0MHB4OwogICAgICAgIHBhZGRpbmctdG9wOiAxNnB4OwogICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OwogICAgICB9CiAgICAgIC5wZXJmLXRhYmxlLWFycm93IHsKICAgICAgICBtaW4td2lkdGg6IDQwcHg7CiAgICAgICAgd2lkdGg6IDQwcHg7CiAgICAgICAgbWFyZ2luLXRvcDogOHB4OwogICAgICB9CiAgICAgIC5wZXJmLXRhYmxlLXZhbCB7CiAgICAgICAgd2lkdGg6IDMwJTsKICAgICAgfQogICAgICAucGVyZi10YWJsZS1jb3VudCB7CiAgICAgICAgd2lkdGg6IDEwJTsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDIwcHg7CiAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7CiAgICAgIH0KICAgICAgLnBlcmYtdGFibGUtbW9kZWwgewogICAgICAgIG1pbi13aWR0aDogMTAwcHg7CiAgICAgICAgd2lkdGg6IDEwMHB4OwogICAgICB9CiAgICAgIC5wZXJmLXRhYmxlLW1vZGVsLXNpbmdsZSB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQogICAgICAucGVyZi10YWJsZS10aHJlc2hvbGQgewogICAgICAgIHdpZHRoOiAyODBweDsKICAgICAgICBtaW4td2lkdGg6IDI4MHB4OwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgfQogICAgICAucGVyZi10YWJsZS1lcnJvciB7CiAgICAgICAgd2lkdGg6IDE1JTsKICAgICAgICB0ZXh0LWFsaWduOiByaWdodDsKICAgICAgfQogICAgICAucGVyZi10YWJsZS1zcS1lcnJvciB7CiAgICAgICAgd2lkdGg6IDE1JTsKICAgICAgICB0ZXh0LWFsaWduOiByaWdodDsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDIwcHg7CiAgICAgIH0KICAgICAgLnBlcmYtdGFibGUtZnAgewogICAgICAgIHdpZHRoOiAxNSU7CiAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7CiAgICAgIH0KICAgICAgLnBlcmYtdGFibGUtZm4gewogICAgICAgIHdpZHRoOiAxNSU7CiAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7CiAgICAgIH0KICAgICAgLnBlcmYtdGFibGUtYWNjIHsKICAgICAgICB3aWR0aDogMTUlOwogICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OwogICAgICAgIG1hcmdpbi1yaWdodDogMjBweDsKICAgICAgfQogICAgICAucGVyZi10YWJsZS1mMSB7CiAgICAgICAgd2lkdGg6IDEwJTsKICAgICAgICB0ZXh0LWFsaWduOiByaWdodDsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDIwcHg7CiAgICAgIH0KICAgICAgLnBlcmYtYnV0dG9uIHsKICAgICAgICBtYXJnaW4tdG9wOiAxMHB4OwogICAgICB9CgogICAgICAucGVyZi1zb3J0LWJveCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2U7CiAgICAgIH0KICAgICAgLmNvdW50ZXJmYWN0dWFsLXRvZ2dsZSB7CiAgICAgICAgbWFyZ2luOiA0cHggNHB4IDRweCA2cHg7CiAgICAgICAgLS1wYXBlci10b2dnbGUtYnV0dG9uLWNoZWNrZWQtYmFyLWNvbG9yOiAjODFjOTk1OwogICAgICB9CiAgICAgIC5kYXRhcG9pbnQtYnV0dG9uIHsKICAgICAgICBjb2xvcjogIzIwMjEyNDsKICAgICAgICBiYWNrZ3JvdW5kOiAjZmRlMjkzOwogICAgICB9CiAgICAgIC5pbmZlci1idXR0b24gewogICAgICAgIGNvbG9yOiB3aGl0ZTsKICAgICAgICBiYWNrZ3JvdW5kOiAjMTI4ZWFmOwogICAgICB9CiAgICAgIC5mbGV4LWdyb3cgewogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgfQogICAgICAuZmxleC1yb3ctcmV2ZXJzZSB7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlOwogICAgICB9CiAgICAgIC50aHJlc2hvbGQtaW5mby1ob2xkZXIgewogICAgICAgIG1hcmdpbi10b3A6IC0ycHg7CiAgICAgIH0KICAgICAgLnRhYnMgewogICAgICAgIHBhZGRpbmctbGVmdDogMzJweDsKICAgICAgICB0ZXh0LXRyYW5zZm9ybTogbm9uZTsKICAgICAgfQogICAgICAucm90YXRlZC1pY29uIHsKICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgyNzBkZWcpOwogICAgICB9CiAgICAgIC5kYXRhcG9pbnQtY29udHJvbC1idXR0b24gewogICAgICAgIHdpZHRoOiAyOHB4OwogICAgICAgIGhlaWdodDogMjhweDsKICAgICAgICBwYWRkaW5nOiA0cHg7CiAgICAgICAgbWFyZ2luLXRvcDogNHB4OwogICAgICB9CiAgICAgIC5wZC1ob2xkZXIgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB3aWR0aDogMzAwcHg7CiAgICAgIH0KICAgICAgLnBkLXktbGFiZWwgewogICAgICAgIGNvbG9yOiAjNWY2MzY4OwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBsZWZ0OiAtMjBweDsKICAgICAgICBwYWRkaW5nOiAwcHg7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogODBweDsKICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgyNzBkZWcpOwogICAgICB9CiAgICAgIC5wZC14LWxhYmVsIHsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgY29sb3I6ICM1ZjYzNjg7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgcGFkZGluZzogMCAwIDAgNDBweDsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgIH0KICAgICAgcGFwZXItdG9nZ2xlLWJ1dHRvbiB7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIC0tcGFwZXItdG9nZ2xlLWJ1dHRvbi1jaGVja2VkLWJ1dHRvbi1jb2xvcjogd2hpdGU7CiAgICAgICAgLS1wYXBlci10b2dnbGUtYnV0dG9uLWxhYmVsLWNvbG9yOiAjM2M0MDQzOwogICAgICB9CiAgICA8L3N0eWxlPgogICAgPHRmLXBsdWdpbi1kaWFsb2cgaWQ9ImluaXRpYWxEaWFsb2ciPjwvdGYtcGx1Z2luLWRpYWxvZz4KICAgIDxwYXBlci1kaWFsb2cgaWQ9ImluZmVyZW5jZXNldHRpbmdzIiBjbGFzcz0iaW5mZXJlbmNlLXNldHRpbmdzIiBvcGVuZWQ9IltbIWxvY2FsXV0iPgogICAgICA8dGYtaW5mZXJlbmNlLXBhbmVsIGluZmVyZW5jZS1hZGRyZXNzPSJ7e2luZmVyZW5jZUFkZHJlc3N9fSIgbW9kZWwtbmFtZT0ie3ttb2RlbE5hbWV9fSIgZXhhbXBsZXMtcGF0aD0ie3tleGFtcGxlc1BhdGh9fSIgbW9kZWwtdHlwZT0ie3ttb2RlbFR5cGV9fSIgbW9kZWwtdmVyc2lvbj0ie3ttb2RlbFZlcnNpb259fSIgbW9kZWwtc2lnbmF0dXJlPSJ7e21vZGVsU2lnbmF0dXJlfX0iIG1heC1leGFtcGxlcz0ie3ttYXhFeGFtcGxlc319IiBsYWJlbC12b2NhYi1wYXRoPSJ7e2xhYmVsVm9jYWJQYXRofX0iIG11bHRpLWNsYXNzPSJ7e211bHRpQ2xhc3N9fSIgc2FtcGxpbmctb2Rkcz0ie3tzYW1wbGluZ09kZHN9fSIgc2VxdWVuY2UtZXhhbXBsZXM9Int7c2VxdWVuY2VFeGFtcGxlc319IiBtYXgtY2xhc3Nlcy10by1kaXNwbGF5PSJ7e21heEluZmVyZW5jZUVudHJpZXNQZXJSdW59fSIgdXNlLXByZWRpY3QtYXBpPSJ7e3VzZVByZWRpY3RBcGl9fSIgcHJlZGljdC1vdXRwdXQtdGVuc29yPSJ7e3ByZWRpY3RPdXRwdXRUZW5zb3J9fSIgcHJlZGljdC1pbnB1dC10ZW5zb3I9Int7cHJlZGljdElucHV0VGVuc29yfX0iPgogICAgICA8L3RmLWluZmVyZW5jZS1wYW5lbD4KICAgICAgPGRpdiBjbGFzcz0iYWNjZXB0LWJ1dHRvbi1ob2xkZXIiPgogICAgICAgIDxwYXBlci1idXR0b24gb24tdGFwPSJnZXRFeGFtcGxlc0FuZENsb3NlU2V0dGluZ3NfIiBjbGFzcz0ibWFpbi1idXR0b24iIGRpc2FibGVkJD0iW1tzaG91bGREaXNhYmxlR2V0RXhhbXBsZXNCdXR0b25fKGV4YW1wbGVzUGF0aCwgbWF4RXhhbXBsZXMpXV0iPgogICAgICAgICAgQWNjZXB0CiAgICAgICAgPC9wYXBlci1idXR0b24+CiAgICAgICAgPHBhcGVyLWJ1dHRvbiBkaWFsb2ctZGlzbWlzcyBjbGFzcz0iY29udHJvbC1idXR0b24iPkNhbmNlbDwvcGFwZXItYnV0dG9uPgogICAgICA8L2Rpdj4KICAgIDwvcGFwZXItZGlhbG9nPgogICAgPHBhcGVyLWRpYWxvZyBpZD0iZGVsZXRlZGlhbG9nIj4KICAgICAgPHA+QXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGUgc2VsZWN0ZWQgZGF0YXBvaW50PwogICAgICA8ZGl2IGNsYXNzPSJidXR0b25zIj4KICAgICAgICA8cGFwZXItYnV0dG9uIGRpYWxvZy1kaXNtaXNzIGNsYXNzPSJjb250cm9sLWJ1dHRvbiI+Q2FuY2VsPC9wYXBlci1idXR0b24+CiAgICAgICAgPHBhcGVyLWJ1dHRvbiBkaWFsb2ctY29uZmlybSBhdXRvZm9jdXMgb24tdGFwPSJkZWxldGVEYXRhcG9pbnRfIiBjbGFzcz0ibWFpbi1idXR0b24iPkRlbGV0ZTwvcGFwZXItYnV0dG9uPgogICAgICA8L2Rpdj4KICAgIDwvcGFwZXItZGlhbG9nPgogICAgPHBhcGVyLWRpYWxvZyBpZD0iZGlzdGFuY2VkaWFsb2ciPgogICAgICA8aDI+U2hvdyBzaW1pbGFyaXR5IHRvIHNlbGVjdGVkIGRhdGFwb2ludDwvaDI+CiAgICAgIDxwYXBlci1pbnB1dCB2YWx1ZT0ie3tmYWNldERpc3RGZWF0dXJlTmFtZX19IiBsYWJlbD0iTWV0cmljIG5hbWUiIGNsYXNzPSJkYXRhcG9pbnQtY29udHJvbC1maWx0ZXItaW5wdXQiPgogICAgICA8L3BhcGVyLWlucHV0PgogICAgICA8ZGl2IGNsYXNzPSJyYWRpb2xhYmVsIj5EaXN0YW5jZSB0eXBlPC9kaXY+CiAgICAgIDxwYXBlci1yYWRpby1ncm91cCBjbGFzcz0iZGlzdC1zd2l0Y2giIHNlbGVjdGVkPSJ7e2ZhY2V0RGlzdFN3aXRjaH19Ij4KICAgICAgICA8cGFwZXItcmFkaW8tYnV0dG9uIGNsYXNzPSJkaXN0LXJhZGlvIiBuYW1lPSJMMSI+TDE8L3BhcGVyLXJhZGlvLWJ1dHRvbj4KICAgICAgICA8cGFwZXItcmFkaW8tYnV0dG9uIGNsYXNzPSJkaXN0LXJhZGlvIiBuYW1lPSJMMiI+TDI8L3BhcGVyLXJhZGlvLWJ1dHRvbj4KICAgICAgPC9wYXBlci1yYWRpby1ncm91cD4KICAgICAgPHBhcGVyLWRyb3Bkb3duLW1lbnUgbGFiZWw9IkFwcGx5IHRvIGRhdGFwb2ludHMgdmlzdWFsaXphdGlvbiIgY2xhc3M9InRocmVzaG9sZC1kcm9wZG93biBkaXN0YW5jZS12aXMtZHJvcGRvd24iPgogICAgICAgIDxwYXBlci1saXN0Ym94IHNsb3Q9ImRyb3Bkb3duLWNvbnRlbnQiIHNlbGVjdGVkPSJ7e2ZhY2V0RGlzdFNldHRpbmd9fSIgYXR0ci1mb3Itc2VsZWN0ZWQ9Im5hbWUiPgogICAgICAgICAgPHBhcGVyLWl0ZW0gbmFtZT0iY29sb3JCeSI+Q29sb3IgQnk8L3BhcGVyLWl0ZW0+CiAgICAgICAgICA8cGFwZXItaXRlbSBuYW1lPSJob3Jpem9udGFsRmFjZXQiPlgtQXhpcyBCaW5uaW5nPC9wYXBlci1pdGVtPgogICAgICAgICAgPHBhcGVyLWl0ZW0gbmFtZT0idmVydGljYWxGYWNldCI+WS1BeGlzIEJpbm5pbmc8L3BhcGVyLWl0ZW0+CiAgICAgICAgICA8cGFwZXItaXRlbSBuYW1lPSJob3Jpem9udGFsUG9zaXRpb24iPlgtQXhpcyBTY2F0dGVyPC9wYXBlci1pdGVtPgogICAgICAgICAgPHBhcGVyLWl0ZW0gbmFtZT0idmVydGljYWxQb3NpdGlvbiI+WS1BeGlzIFNjYXR0ZXI8L3BhcGVyLWl0ZW0+CiAgICAgICAgPC9wYXBlci1saXN0Ym94PgogICAgICA8L3BhcGVyLWRyb3Bkb3duLW1lbnU+CiAgICAgIDxkaXYgY2xhc3M9ImJ1dHRvbnMiPgogICAgICAgIDxwYXBlci1idXR0b24gZGlhbG9nLWRpc21pc3MgY2xhc3M9ImNvbnRyb2wtYnV0dG9uIj5DYW5jZWw8L3BhcGVyLWJ1dHRvbj4KICAgICAgICA8cGFwZXItYnV0dG9uIGRpYWxvZy1jb25maXJtIGF1dG9mb2N1cyBvbi10YXA9ImFkZERpc3RhbmNlTWV0cmljIiBjbGFzcz0ibWFpbi1idXR0b24iPkFwcGx5PC9wYXBlci1idXR0b24+CiAgICAgIDwvZGl2PgogICAgPC9wYXBlci1kaWFsb2c+CiAgICA8ZGl2IGNsYXNzPSJkYXNoYm9hcmQtbGF5b3V0Ij4KICAgICAgPGRpdiBjbGFzcz0ibWFpbi12ZXJ0aWNhbCI+CiAgICAgICAgPGRpdiBjbGFzcz0ibWFpbi1jb250ZW50Ij4KICAgICAgICAgIDxkaXYgY2xhc3M9Im1haW4tYm90dG9tLWJhciI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRhdGFwb2ludC1sZWZ0LWNvbnRyb2xzLWhvbGRlciI+CiAgICAgICAgICAgICAgPHBhcGVyLXRhYnMgY2xhc3M9InRhYnMiIG5vaW5rIHNlbGVjdGVkPSJ7e3NpZGVUYWJTZWxlY3RlZH19Ij4KICAgICAgICAgICAgICAgIDxwYXBlci10YWI+RGF0YXBvaW50IGVkaXRvcjwvcGFwZXItdGFiPgogICAgICAgICAgICAgICAgPHBhcGVyLXRhYj5bW2dldFBlcmZvcm1hbmNlVGFiVGl0bGUobW9kZWxUeXBlLCBtdWx0aUNsYXNzKV1dPC9wYXBlci10YWI+CiAgICAgICAgICAgICAgICA8cGFwZXItdGFiPkZlYXR1cmVzPC9wYXBlci10YWI+CiAgICAgICAgICAgICAgPC9wYXBlci10YWJzPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iZGF0YXBvaW50LXJpZ2h0LWNvbnRyb2xzLWhvbGRlciI+CiAgICAgICAgICAgICAgPGEgdGFyZ2V0PSJfYmxhbmsiIGNsYXNzPSJjb250cm9sIiBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC90cmVlL21hc3Rlci90ZW5zb3Jib2FyZC9wbHVnaW5zL2ludGVyYWN0aXZlX2luZmVyZW5jZS9SRUFETUUubWQiIHJlbD0ibm9vcGVuZXIgbm9yZWZlcnJlciI+CiAgICAgICAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24gaWNvbj0iaGVscC1vdXRsaW5lIiBjbGFzcz0ic2V0dGluZ3MtYnV0dG9uIiB0aXRsZT0iV2hhdC1JZiBUb29sIGRvY3VtZW50YXRpb24iPjwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgIDxwYXBlci1pY29uLWJ1dHRvbiBpY29uPSJzZXR0aW5ncyIgb24tdGFwPSJzZXR0aW5nc0NsaWNrZWRfIiBjbGFzcz0ic2V0dGluZ3MtYnV0dG9uIGNvbnRyb2wiIHRpdGxlPSJXaGF0LUlmIFRvb2wgc2V0dGluZ3MiIGRpc2FibGVkJD0iW1tsb2NhbF1dIj48L3BhcGVyLWljb24tYnV0dG9uPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImV4YW1wbGUtc3RhdHVzIj5bW2V4YW1wbGVTdGF0dXNTdHJdXTwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGlyb24tcGFnZXMgY2xhc3M9InNpZGUtdGFicyIgc2VsZWN0ZWQ9Int7c2lkZVRhYlNlbGVjdGVkfX0iPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJkYXRhcG9pbnQtdGFiIj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlLWhvbGRlciIgaWQ9InNpZGUiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2lkZS1jb250ZW50Ij4KICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGluZy1hbmQtY2FyZCI+CiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iaGVhZGluZyIgb24tdGFwPSJ0b2dnbGVDb250ZXh0VG9vbHMiPgogICAgICAgICAgICAgICAgICAgICAgVmlzdWFsaXplCiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJyaWdodC1zaWRlIHJpZ2h0LXNpZGUtcGVyZm9ybWFuY2UtdGFiIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGlyb24taWNvbiBpY29uPSJbW2dldEV4cGFuZENvbGxhcHNlSWNvbihvcGVuZWRDb250ZXh0VG9vbHMpXV0iIGNsYXNzPSJleHBhbmQtY29sbGFwc2UtYnV0dG9uIj48L2lyb24taWNvbj4KICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgIDxpcm9uLWNvbGxhcHNlIGNsYXNzPSJuby1wYWRkaW5nLWNhcmQiIGlkPSJjb2xsYXBzZWNvbnRleHR0b29scyIgb3BlbmVkPSJ7e29wZW5lZENvbnRleHRUb29sc319Ij4KICAgICAgICAgICAgICAgICAgICAgIDxwYXBlci1yYWRpby1ncm91cCBzZWxlY3RlZD0ie3t2aXNNb2RlfX0iPgogICAgICAgICAgICAgICAgICAgICAgICA8cGFwZXItcmFkaW8tYnV0dG9uIG5hbWU9ImRpdmUiPkRhdGFwb2ludHM8L3BhcGVyLXJhZGlvLWJ1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbiBuYW1lPSJwZCI+UGFydGlhbCBkZXBlbmRlbmNlIHBsb3RzPC9wYXBlci1yYWRpby1idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLXJhZGlvLWdyb3VwPgogICAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbWyFpc1JlZ3Jlc3Npb25fKG1vZGVsVHlwZSldXSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXgiPgogICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgdGl0bGU9IlNlbGVjdCBhIGRhdGFwb2ludCB0byB1c2UgdGhpcyBmZWF0dXJlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXBlci10b2dnbGUtYnV0dG9uIGNsYXNzPSJjb3VudGVyZmFjdHVhbC10b2dnbGUiIGNoZWNrZWQ9Int7c2hvd05lYXJlc3RDb3VudGVyZmFjdHVhbH19IiBkaXNhYmxlZCQ9IltbIWhhc1NlbGVjdGVkKHNlbGVjdGVkRXhhbXBsZUFuZEluZmVyZW5jZSldXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNob3cgbmVhcmVzdCBjb3VudGVyZmFjdHVhbCBkYXRhcG9pbnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFwZXItdG9nZ2xlLWJ1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFwZXItcmFkaW8tZ3JvdXAgc2VsZWN0ZWQ9Int7bmVhcmVzdENvdW50ZXJmYWN0dWFsRGlzdH19Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXBlci1yYWRpby1idXR0b24gbmFtZT0iTDEiPkwxPC9wYXBlci1yYWRpby1idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFwZXItcmFkaW8tYnV0dG9uIG5hbWU9IkwyIj5MMjwvcGFwZXItcmFkaW8tYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFwZXItcmFkaW8tZ3JvdXA+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcGVyLWRyb3Bkb3duLW1lbnUgbGFiZWw9Ik1vZGVsOiIgbm8tbGFiZWwtZmxvYXQgY2xhc3M9ImNvdW50ZXJmYWN0dWFsLWRyb3Bkb3duIiBoaWRkZW4kPSJbW3Nob3VsZEhpZGVDb3VudGVyZmFjdHVhbE1vZGVsU2VsZWN0b3JfKHBhcnNlZE1vZGVsTmFtZXMpXV0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcGVyLWxpc3Rib3ggY2xhc3M9ImRyb3Bkb3duLWNvbnRlbnQiIHNlbGVjdGVkPSJ7e25lYXJlc3RDb3VudGVyZmFjdHVhbE1vZGVsSW5kZXh9fSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbcGFyc2VkTW9kZWxOYW1lc11dIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFwZXItaXRlbT5bW2dldENvdW50ZXJmYWN0dWFsTW9kZWxOYW1lXyhpdGVtKV1dPC9wYXBlci1pdGVtPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXBlci1saXN0Ym94PgogICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFwZXItZHJvcGRvd24tbWVudT4KICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24gaWNvbj0iaW5mby1vdXRsaW5lIiBjbGFzcz0iaW5mby1pY29uIGNmLWluZm8taWNvbiBuby1wYWRkaW5nIiBvbi10YXA9Im9wZW5EaWFsb2ciPgogICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcGVyLWRpYWxvZyBjbGFzcz0iZGlhbG9nLXRleHQiIGhvcml6b250YWwtYWxpZ249ImF1dG8iIHZlcnRpY2FsLWFsaWduPSJhdXRvIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRpYWxvZy10aXRsZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5lYXJlc3QgY291bnRlcmZhY3R1YWwgKG5laWdoYm9yIG9mIGRpZmZlcmVudAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc2lmaWNhdGlvbikKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tcGFyZXMgdGhlIHNlbGVjdGVkIGRhdGFwb2ludCB3aXRoIGl0cyBuZWFyZXN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5laWdoYm9yIGZyb20gYSBkaWZmZXJlbnQgY2xhc3NpZmljYXRpb24gdXNpbmcgTDEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgTDIgZGlzdGFuY2UuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLWRpYWxvZz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgICAgICAgICAgPGRpdiB0aXRsZT0iU2VsZWN0IGEgZGF0YXBvaW50IHRvIHVzZSB0aGlzIGZlYXR1cmUiPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uIGNsYXNzPSJjb250cm9sLWJ1dHRvbiBkYXRhcG9pbnQtYnV0dG9uIiBkaXNhYmxlZCQ9IltbIWhhc1NlbGVjdGVkKHNlbGVjdGVkRXhhbXBsZUFuZEluZmVyZW5jZSldXSIgb24tdGFwPSJzaG93RGlzdGFuY2VDbGlja2VkXyIgYWx0PSJTaG93IHNpbWlsYXJpdHkgdG8gc2VsZWN0ZWQgZGF0YXBvaW50IiB0aXRsZT0iU2hvdyBzaW1pbGFyaXR5IHRvIHNlbGVjdGVkIGRhdGFwb2ludCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaG93IHNpbWlsYXJpdHkgdG8gc2VsZWN0ZWQgZGF0YXBvaW50CiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXBlci1idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcGVyLWljb24tYnV0dG9uIGljb249ImluZm8tb3V0bGluZSIgY2xhc3M9ImluZm8taWNvbiBjZi1pbmZvLWljb24gbm8tcGFkZGluZyIgb24tdGFwPSJvcGVuRGlhbG9nIj4KICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLWljb24tYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXBlci1kaWFsb2cgY2xhc3M9ImRpYWxvZy10ZXh0IiBob3Jpem9udGFsLWFsaWduPSJhdXRvIiB2ZXJ0aWNhbC1hbGlnbj0iYXV0byI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJkaWFsb2ctdGl0bGUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaG93IHNpbWlsYXJpdHkgdG8gc2VsZWN0ZWQgZGF0YXBvaW50CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENhbGN1bGF0ZXMgdGhlIGRpc3RhbmNlIGJldHdlZW4gdGhlIHNlbGVjdGVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFwb2ludCBhbmQgYWxsIG90aGVyIGRhdGFwb2ludHMgYW5kIHNob3dzIHRoaXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIGRhdGFwb2ludHMgdmlzdWFsaXphdGlvbi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFwZXItZGlhbG9nPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvaXJvbi1jb2xsYXBzZT4KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImhlYWRpbmctYW5kLWNhcmQgZWRpdG9yLWhlYWRpbmctYW5kLWNhcmQiPgogICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImhlYWRpbmciPgogICAgICAgICAgICAgICAgICAgICAgW1tnZXREYXRhcG9pbnRFZGl0b3JUaXRsZShzZWxlY3RlZEV4YW1wbGVOdW0sCiAgICAgICAgICAgICAgICAgICAgICBjb21wYXJlZEluZGljZXMpXV0KICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJuby1wYWRkaW5nLWNhcmQiPgogICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZGF0YXBvaW50LWNvbnRyb2xzLWhvbGRlciBkYXRhcG9pbnQtY29udHJvbC1idXR0b25zLWhvbGRlciI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRhdGFwb2ludC1sZWZ0LWNvbnRyb2xzLWhvbGRlciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcGVyLWljb24tYnV0dG9uIGNsYXNzPSJkYXRhcG9pbnQtY29udHJvbC1idXR0b24iIGljb249ImNoZXZyb24tbGVmdCIgZGlzYWJsZWQkPSJbWyFoYXNTZWxlY3RlZChzZWxlY3RlZEV4YW1wbGVBbmRJbmZlcmVuY2UpXV0iIG9uLXRhcD0ic2VsZWN0UHJldkRhdGFwb2ludF8iIGFsdD0ic2VsZWN0IHByZXZpb3VzIGRhdGFwb2ludCIgdGl0bGU9IlNlbGVjdCBwcmV2aW91cyBkYXRhcG9pbnQiPgogICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcGVyLWljb24tYnV0dG9uIGNsYXNzPSJkYXRhcG9pbnQtY29udHJvbC1idXR0b24iIGljb249ImNoZXZyb24tcmlnaHQiIGRpc2FibGVkJD0iW1shaGFzU2VsZWN0ZWQoc2VsZWN0ZWRFeGFtcGxlQW5kSW5mZXJlbmNlKV1dIiBvbi10YXA9InNlbGVjdE5leHREYXRhcG9pbnRfIiBhbHQ9InNlbGVjdCBuZXh0IGRhdGFwb2ludCIgdGl0bGU9IlNlbGVjdCBuZXh0IGRhdGFwb2ludCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHRpdGxlPSJFZGl0IGEgZGF0YXBvaW50IHRvIHVzZSB0aGlzIGZlYXR1cmUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcGVyLWljb24tYnV0dG9uIGNsYXNzPSJkYXRhcG9pbnQtY29udHJvbC1idXR0b24iIGljb249Imhpc3RvcnkiIG9uLXRhcD0icmVzZXREYXRhcG9pbnRfIiBhbHQ9InVuZG8gY2hhbmdlcyIgdGl0bGU9IlVuZG8gY2hhbmdlcyIgZGlzYWJsZWQkPSJbW3Nob3VsZERpc2FibGVSZXNldF8oc2VsZWN0ZWRFeGFtcGxlQW5kSW5mZXJlbmNlLmNoYW5nZWQpXV0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHRpdGxlPSJTZWxlY3QgYSBkYXRhcG9pbnQgdG8gdXNlIHRoaXMgZmVhdHVyZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24gY2xhc3M9ImRhdGFwb2ludC1jb250cm9sLWJ1dHRvbiIgaWNvbj0iY29udGVudC1jb3B5IiBkaXNhYmxlZCQ9IltbIWhhc1NlbGVjdGVkKHNlbGVjdGVkRXhhbXBsZUFuZEluZmVyZW5jZSldXSIgb24tdGFwPSJjb3B5RGF0YXBvaW50XyIgYWx0PSJkdXBsaWNhdGUgZGF0YXBvaW50IiB0aXRsZT0iRHVwbGljYXRlIGRhdGFwb2ludCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLWljb24tYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgdGl0bGU9IlNlbGVjdCBhIGRhdGFwb2ludCB0byB1c2UgdGhpcyBmZWF0dXJlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXBlci1pY29uLWJ1dHRvbiBjbGFzcz0iZGF0YXBvaW50LWNvbnRyb2wtYnV0dG9uIiBpY29uPSJkZWxldGUiIGRpc2FibGVkJD0iW1shaGFzU2VsZWN0ZWQoc2VsZWN0ZWRFeGFtcGxlQW5kSW5mZXJlbmNlKV1dIiBvbi10YXA9ImRlbGV0ZURhdGFwb2ludERpYWxvZ18iIGFsdD0iZGVsZXRlIGRhdGFwb2ludCIgdGl0bGU9IkRlbGV0ZSBkYXRhcG9pbnQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb250cm9sLWRpdmlkZXIiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXBlci1pbnB1dCB2YWx1ZT0ie3tmZWF0dXJlU2VhcmNoVmFsdWV9fSIgbGFiZWw9IlNlYXJjaCBmZWF0dXJlcyIgY2xhc3M9ImRhdGFwb2ludC1jb250cm9sLWZpbHRlci1pbnB1dCBmZWF0dXJlLXNlYXJjaC1pbnB1dCIgZGlzYWJsZWQkPSJbWyFoYXNTZWxlY3RlZChzZWxlY3RlZEV4YW1wbGVBbmRJbmZlcmVuY2UpXV0iIG5vLWxhYmVsLWZsb2F0PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlyb24taWNvbiBpY29uPSJpY29uczpzZWFyY2giIHNsb3Q9InByZWZpeCI+PC9pcm9uLWljb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXBlci1pbnB1dD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRhdGFwb2ludC1yaWdodC1jb250cm9scy1ob2xkZXIiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbaGFzU2VsZWN0ZWQoc2VsZWN0ZWRFeGFtcGxlQW5kSW5mZXJlbmNlKV1dIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZXhhbXBsZS1hbmQtaW5mZXJlbmNlLWhvbGRlciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPHZ6LWV4YW1wbGUtdmlld2VyIGNsYXNzPSJleGFtcGxlLWhvbGRlciIganNvbj0ie3tzZWxlY3RlZEV4YW1wbGVBbmRJbmZlcmVuY2UuZXhhbXBsZX19IiBjb21wYXJlLWpzb249Int7Y291bnRlcmZhY3R1YWxFeGFtcGxlQW5kSW5mZXJlbmNlLmV4YW1wbGV9fSIgb24tZXhhbXBsZS1jaGFuZ2U9ImV4YW1wbGVDaGFuZ2VfIiBpZD0idmlld2VyIiBkaXNwbGF5LW1vZGU9IltbZXhhbXBsZURpc3BsYXlNb2RlXV0iIGZlYXR1cmUtc2VhcmNoLXZhbHVlPSJ7e2ZlYXR1cmVTZWFyY2hWYWx1ZX19IiBjb21wYXJlLXRpdGxlPSJbW2NvbXBhcmVUaXRsZV1dIiBzYWxpZW5jeT0iW1thdHRyaWJ1dGlvbl1dIiBzaG93LXNhbGllbmN5IHJlYWRvbmx5PSJbWyFhcmVFeGFtcGxlc0VkaXRhYmxlXyhtb2RlbE5hbWUsIGluZmVyZW5jZUFkZHJlc3MpXV0iPgogICAgICAgICAgICAgICAgICAgICAgICAgIDwvdnotZXhhbXBsZS12aWV3ZXI+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shaGFzU2VsZWN0ZWQoc2VsZWN0ZWRFeGFtcGxlQW5kSW5mZXJlbmNlKV1dIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZGF0YXBvaW50LWluZm8taG9sZGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJkYXRhcG9pbnQtaW5mby1jb250ZW50Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXggc3BhY2UtYmV0d2VlbiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im9uYm9hcmRpbmctaGVhZGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWxlY3QgYSBkYXRhcG9pbnQgdG8gYmVnaW4gZXhwbG9yaW5nIG1vZGVsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVoYXZpb3IgZm9yIHlvdXIgc2VsZWN0aW9uLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ib25ib2FyZGluZy10ZXh0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImJvbGQiPkVkaXQgYW5kIEluZmVyOjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWRpdCB5b3VyIGRhdGFwb2ludCBoZXJlIGFuZCBydW4gaW5mZXJlbmNlIGluIHRoZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmZlciB0YWJsZSB0byBzZWUgZGlmZmVyZW5jZXMgaW4gbW9kZWwgYmVoYXZpb3IuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im9uYm9hcmRpbmctdGV4dCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJib2xkIj5WaXN1YWxpemU6PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTd2l0Y2ggYmV0d2VlbiB2aXN1YWxpemluZyBkYXRhcG9pbnRzIGFuZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBsb3JpbmcgcGFydGlhbCBkZXBlbmRlbmNlIHBsb3RzIHRvIGdhaW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zaWdodHMgaW50byB5b3VyIG1vZGVsJ3MgYmVoYXZpb3IuIEV4cGxvcmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnRlcmZhY3R1YWxzIG9yIHNlZSBob3cgc2ltaWxhciAob3IgZGlmZmVyZW50KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgcmVzdCBvZiB5b3VyIGRhdGFzZXQgaXMgZnJvbSB5b3VyIHNlbGVjdGlvbi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbmZlcmVuY2Utc2VjdGlvbi1ob2xkZXIiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImluZmVyZW5jZS1zZWN0aW9uIj4KICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImluZmVyZW5jZS1oZWFkZXIgaGVhZGluZyIgb24tdGFwPSJ0b2dnbGVJbmZlcmVuY2VSZXN1bHRzIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmxleCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtbZ2V0SW5mZXJUaXRsZShzZWxlY3RlZEV4YW1wbGVOdW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wYXJlZEluZGljZXMpXV0KICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJyaWdodC1zaWRlIHJpZ2h0LXNpZGUtcGVyZm9ybWFuY2UtdGFiIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpcm9uLWljb24gaWNvbj0iW1tnZXRFeHBhbmRDb2xsYXBzZUljb24ob3BlbmVkSW5mZXJlbmNlUmVzdWx0cyldXSIgY2xhc3M9ImV4cGFuZC1jb2xsYXBzZS1idXR0b24iPjwvaXJvbi1pY29uPgogICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgPGlyb24tY29sbGFwc2UgY2xhc3M9Im5vLXBhZGRpbmctY2FyZCIgaWQ9ImNvbGxhcHNlaW5mZXJlbmNlIiBvcGVuZWQ9Int7b3BlbmVkSW5mZXJlbmNlUmVzdWx0c319Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiB0aXRsZT0iRWRpdCBhIGRhdGFwb2ludCB0byB1c2UgdGhpcyBmZWF0dXJlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uIG9uLXRhcD0iaW5mZXJDbGlja2VkXyIgY2xhc3M9ImNvbnRyb2wtYnV0dG9uIGluZmVyLWJ1dHRvbiBmbGV4LWdyb3ciIGRpc2FibGVkJD0iW1tzaG91bGREaXNhYmxlSW5mZXJCdXR0b25fKGV4YW1wbGVzQW5kSW5mZXJlbmNlcywgbW9kZWxOYW1lLCBpbmZlcmVuY2VBZGRyZXNzLCB1cGRhdGVkRXhhbXBsZSldXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBSdW4gaW5mZXJlbmNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXBlci1idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbaGFzU2VsZWN0ZWQoc2VsZWN0ZWRFeGFtcGxlQW5kSW5mZXJlbmNlKV1dIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0Zi1pbmZlcmVuY2Utdmlld2VyIGNsYXNzPSJpbmZlcmVuY2Utdmlld2VyIiBpbmZlcmVuY2VzPSJbW3NlbGVjdGVkRXhhbXBsZUFuZEluZmVyZW5jZS5pbmZlcmVuY2VzXV0iIGlkJD0iW1tnZXRJbmZlcmVuY2VIb2xkZXJJZF8oKV1dIiBtb2RlbC10eXBlPSJbW21vZGVsVHlwZV1dIiBtb2RlbC1uYW1lcz0iW1twYXJzZWRNb2RlbE5hbWVzXV0iIG1heC1lbnRyaWVzLXBlci1ydW49IltbbWF4SW5mZXJlbmNlRW50cmllc1BlclJ1bl1dIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGYtaW5mZXJlbmNlLXZpZXdlcj4KICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tjb3VudGVyZmFjdHVhbEV4YW1wbGVBbmRJbmZlcmVuY2VdXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGYtaW5mZXJlbmNlLXZpZXdlciBjbGFzcz0iaW5mZXJlbmNlLXZpZXdlciBjb21wYXJlLWluZmVyZW5jZS12aWV3ZXIiIGluZmVyZW5jZXM9IltbY291bnRlcmZhY3R1YWxFeGFtcGxlQW5kSW5mZXJlbmNlLmluZmVyZW5jZXNdXSIgbW9kZWwtdHlwZT0iW1ttb2RlbFR5cGVdXSIgbW9kZWwtbmFtZXM9IltbcGFyc2VkTW9kZWxOYW1lc11dIiBtYXgtZW50cmllcy1wZXItcnVuPSJbW21heEluZmVyZW5jZUVudHJpZXNQZXJSdW5dXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RmLWluZmVyZW5jZS12aWV3ZXI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICA8L2lyb24tY29sbGFwc2U+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJyZXNpemVyIiBpZD0icmVzaXplciI+CiAgICAgICAgICAgICAgICAgIDxpcm9uLWljb24gaWNvbj0iYXY6cGF1c2UiIGNsYXNzPSJyZXNpemUtaWNvbiI+PC9pcm9uLWljb24+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjZW50ZXIiIHNsb3Q9ImNlbnRlciIgaWQ9ImNlbnRlciI+CiAgICAgICAgICAgICAgICA8ZmFjZXRzLWRpdmUgaWQ9ImRpdmUiIGRhdGE9IltbdmlzZGF0YV1dIiBzZWxlY3RlZC1pbmRpY2VzPSJbW3NlbGVjdGVkXV0iIGNvbXBhcmVkLWluZGljZXM9IltbY29tcGFyZWRJbmRpY2VzXV0iIG9uLXNlbGVjdGVkLWluZGljZXMtY2hhbmdlZD0ic2VsZWN0ZWRJbmRpY2VzQ2hhbmdlZF8iIG9uLXN0YXRzLWNoYW5nZWQ9InN0YXRzQ2hhbmdlZF8iIGhpZGUtaW5mby1jYXJkPSJ0cnVlIiBzcHJpdGUtaW1hZ2Utd2lkdGg9IjMyIiBzcHJpdGUtaW1hZ2UtaGVpZ2h0PSIzMiIgZml0LWdyaWQtYXNwZWN0LXJhdGlvLXRvLXZpZXdwb3J0PSJ0cnVlIiBzdGFibGUtY29sb3JzPSJ0cnVlIj4KICAgICAgICAgICAgICAgIDwvZmFjZXRzLWRpdmU+CiAgICAgICAgICAgICAgICA8ZGl2IGlkPSJub2V4YW1wbGVzIiBjbGFzcz0ibm9leGFtcGxlcyBpbmZvLXRleHQiPgogICAgICAgICAgICAgICAgICBEYXRhcG9pbnRzIGFuZCB0aGVpciBpbmZlcmVuY2UgcmVzdWx0cyB3aWxsIGJlIGRpc3BsYXllZCBoZXJlLgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8cGFwZXItc3Bpbm5lci1saXRlIGlkPSJzcGlubmVyIiBoaWRkZW49Iltbc3Bpbm5lckhpZGRlbl9dXSIgYWN0aXZlPjwvcGFwZXItc3Bpbm5lci1saXRlPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmVhdHVyZS1jb250YWluZXItaG9sZGVyIiBpZD0icGFydGlhbHBsb3Rob2xkZXIiPgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZC1wbG90cy1oZWFkZXIiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXgiPgogICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGQtaW5mby10ZXh0Ij5QYXJ0aWFsIERlcGVuZGVuY2UgUGxvdHM8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgIDxwYXBlci1pY29uLWJ1dHRvbiBpY29uPSJpbmZvLW91dGxpbmUiIGNsYXNzPSJpbmZvLWljb24gcGQtaW5mby1pY29uIG5vLXBhZGRpbmciIG9uLXRhcD0ib3BlbkRpYWxvZyI+CiAgICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLWljb24tYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgPHBhcGVyLWRpYWxvZyBjbGFzcz0iZGlhbG9nLXRleHQiIGhvcml6b250YWwtYWxpZ249ImF1dG8iIHZlcnRpY2FsLWFsaWduPSJhdXRvIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZGlhbG9nLXRpdGxlIj5QYXJ0aWFsIERlcGVuZGVuY2UgUGxvdHM8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICBQYXJ0aWFsIGRlcGVuZGVuY2UgcGxvdHMgdmlzdWFsaXplIHRoZSBjaGFuZ2UgaW4KICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZlcmVuY2UgcmVzdWx0cyBmb3IgZXZlcnkgZmVhdHVyZSwgYXMgdGhlIHZhbHVlIGZvcgogICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgZmVhdHVyZSBpcyBjaGFuZ2VkIHRvIGRpZmZlcmVudCB2YWxpZCB2YWx1ZXMuCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBudW1lcmljIGZlYXR1cmVzLCB5b3UgY2FuIHNldCB0aGUgbWluaW11bSBhbmQKICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhpbXVtIHZhbHVlcyB0byBwbG90LgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICBGb3Igc3RyaW5nIGZlYXR1cmVzLCB0aGUgbW9zdCBwb3B1bGFyIGZlYXR1cmUgdmFsdWVzCiAgICAgICAgICAgICAgICAgICAgICAgICAgYXJlIHNob3duIGFzIGFsdGVybmF0aXZlcyB0byB0aGUgZmVhdHVyZSB2YWx1ZSBmb3IgdGhlCiAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQgZGF0YXBvaW50LgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgZmVhdHVyZXMgd2l0aCBtdWx0aXBsZSBmZWF0dXJlIHZhbHVlcyBwZXIKICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhcG9pbnQsIGEgc2luZ2xlIHBsb3QgaXMgc2hvd24gZm9yIGZvciBlYWNoIGZlYXR1cmUKICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSBpbiB0aGUgc2VsZWN0ZWQgZGF0YXBvaW50LiBZb3UgY2FuIG92ZXJyaWRlCiAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpY2ggZmVhdHVyZSB2YWx1ZXMgaGF2ZSBwbG90cyBjcmVhdGVkIGZvciB0aGVtIGJ5CiAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmeWluZyB0aGUgaW5kaWNlcyB0byBzaG93biBwYXJ0aWFsIGRlcGVuZGVuY2UKICAgICAgICAgICAgICAgICAgICAgICAgICBwbG90cyBmb3IsIGlmIHRoZSBkYXRhcG9pbnQgY29udGFpbnMgbXVsdGlwbGUgZmVhdHVyZQogICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcyBmb3IgYSBmZWF0dXJlLgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICBXaGVuIHRoZSBnbG9iYWwgdG9nZ2xlIGlzIHR1cm5lZCBvbiwgdGhlIHBsb3RzIHNob3cKICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgYXZlcmFnZSBlZmZlY3Qgb2YgcmVwZWF0ZWRseSBjaGFuZ2luZyBhIHNpbmdsZQogICAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmUgYWNyb3NzIGFsbCBkYXRhcG9pbnRzLiBXaGVuIGl0IGlzIHR1cm5lZCBvZmYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHBsb3RzIHNob3cgdGhlIGVmZmVjdCBvZiBhIHJlcGVhdGVkbHkgY2hhbmdpbmcgYQogICAgICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZSBmZWF0dXJlIG9uIHRoZSBzZWxlY3RlZCBkYXRhcG9pbnQuCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgPC9wYXBlci1kaWFsb2c+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPHBhcGVyLXRvZ2dsZS1idXR0b24gY2xhc3M9InBkLXRvZ2dsZSIgY2hlY2tlZD0ie3tnbG9iYWxQZFBsb3RzfX0iIG9uLWNoYW5nZT0iaGlkZUFsbFBkRWxlbWVudHNfIiBkaXNhYmxlZCQ9IltbIWhhc1NlbGVjdGVkKHNlbGVjdGVkRXhhbXBsZUFuZEluZmVyZW5jZSldXSI+CiAgICAgICAgICAgICAgICAgICAgICBHbG9iYWwgcGFydGlhbCBkZXBlbmRlbmNlIHBsb3RzCiAgICAgICAgICAgICAgICAgICAgPC9wYXBlci10b2dnbGUtYnV0dG9uPgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbWyFhcmVUaGVyZVBkUGxvdEZlYXR1cmVzXyhwYXJ0aWFsRGVwUGxvdEVsaWdpYmxlRmVhdHVyZXMpXV0iPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBkLW5vLWZlYXR1cmVzLXRleHQiPgogICAgICAgICAgICAgICAgICAgICAgVGhlIGxvYWRlZCBkYXRhc2V0IGhhcyBubyBmZWF0dXJlcyB0byBzaG93IHBhcnRpYWwKICAgICAgICAgICAgICAgICAgICAgIGRlcGVuZGVuY2UgcGxvdHMgZm9yLgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZHBsb3RzLWhvbGRlciI+CiAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1twYXJ0aWFsRGVwUGxvdEVsaWdpYmxlRmVhdHVyZXNdXSI+CiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmZWF0dXJlLWNvbnRhaW5lciIgZGF0YS1mZWF0dXJlLW5hbWUkPSJbW2l0ZW0ubmFtZV1dIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGVyZi10YWJsZS1lbnRyeSBwZXJmLXRhYmxlLXJvdyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGVyZi10YWJsZS1hcnJvdyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24gY2xhc3M9InBkLXJvdy1hcnJvdyByb3RhdGVkLWljb24iIGljb249ImFycm93LWRyb3AtZG93biIgb24tdGFwPSJjYXRlZ29yeVBhbmVDbGlja2VkIj48L3BhcGVyLWljb24tYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBlcmYtdGFibGUtdmFsIHBlcmYtdGFibGUtY2xpY2thYmxlIHRmLWNhdGVnb3J5LXBhbmUgcGVyZi10YWJsZS10ZXh0LWVudHJ5IiBvbi10YXA9ImNhdGVnb3J5UGFuZUNsaWNrZWQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgW1tpdGVtLm5hbWVdXQogICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGQtZW50cnktY29udGFpbmVyIHBlcmYtdGFibGUtZW50cnktZXhwYW5kZWQiIGhpZGRlbj4KICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZC1pbnB1dC1jb250YWluZXIiIGhpZGRlbiQ9Iltbc2hvdWxkSGlkZVBkSW5wdXRDb250YWluZXIoaXRlbS5zYW1wbGVzLCBpdGVtLm5hbWUsIHNlbGVjdGVkKV1dIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InJhbmdlLWlucHV0LWNvbnRhaW5lciIgaGlkZGVuJD0iW1tpdGVtLnNhbXBsZXNdXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImluZm8tdGV4dCIgdGl0bGU9IlRoZSByYW5nZSBvZiB2YWx1ZXMgdG8gdGVzdCAoZGVmYXVsdCB2YWx1ZXMgYXJlIGF1dG9tYXRpY2FsbHkgaW5mZXJyZWQpLiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2V0IHJhbmdlIG9mIHZhbHVlcyB0byB0ZXN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0ibnVtYmVyIiBjbGFzcz0ic3R5bGUtaW5wdXQgeC1taW4gcGQtcmFuZ2UtY29udHJvbCIgdmFsdWU9IltbaXRlbS5vYnNlcnZlZE1pbl1dIiB0aXRsZT0iVGhlIG1pbmltdW0gdmFsdWUgdG8gdGVzdCAoZGVmYXVsdCB2YWx1ZSBpcyBhdXRvbWF0aWNhbGx5IGluZmVycmVkKS4iIG9uLWlucHV0PSJwZElucHV0Q2hhbmdlZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGQtcmFuZ2UtaHlwaGVuIj4tPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9Im51bWJlciIgY2xhc3M9InN0eWxlLWlucHV0IHgtbWF4IHBkLXJhbmdlLWNvbnRyb2wiIHZhbHVlPSJbW2l0ZW0ub2JzZXJ2ZWRNYXhdXSIgdGl0bGU9IlRoZSBtYXhpbXVtIHZhbHVlIHRvIHRlc3QgKGRlZmF1bHQgdmFsdWUgaXMgYXV0b21hdGljYWxseSBpbmZlcnJlZCkuIiBvbi1pbnB1dD0icGRJbnB1dENoYW5nZWQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmVhdHVyZS1pbmRleC1jb250YWluZXIiIGhpZGRlbiQ9Iltbc2hvdWxkSGlkZUZlYXR1cmVJbmRpY2VzU2VsZWN0b3IoaXRlbS5uYW1lLCBzZWxlY3RlZCldXSIgdGl0bGU9IkFuIG9wdGlvbmFsIHByaW50ZXItcGFnZS1zdHlsZSBwYXR0ZXJuIGxpa2UgJzAsMiw0LTYnIHRvIHNlbGVjdCB0aGUgaW5kaWNlcyBvZiB0aGUgZmVhdHVyZSB2YWx1ZXMgdG8gZ2VuZXJhdGUgcGxvdHMgZm9yLiBVc2VmdWwgZm9yIGZlYXR1cmVzIHdpdGggbWFueSByZXBlYXRlZCBmaWVsZHMuIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW5mby10ZXh0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZXQgZmVhdHVyZSBpbmRpY2VzIDxpPihvcHRpb25hbCk8L2k+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgY2xhc3M9InN0eWxlLWlucHV0IGZlYXR1cmUtaW5kZXgtcGF0dGVybiBwZC1yYW5nZS1jb250cm9sIiBvbi1pbnB1dD0icGRJbnB1dENoYW5nZWQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGYtY2F0ZWdvcnktcGFuZS1jb250ZW50Ij48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29uZmlnLXRhYiI+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29uZmlnLXNpZGUtY29udGVudCI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nLWFuZC1jYXJkIj4KICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iaW5mZXJlbmNlLWhlYWRlciBoZWFkaW5nIiBvbi10YXA9InRvZ2dsZVRydWVMYWJlbFNldHVwIj4KICAgICAgICAgICAgICAgICAgICBDb25maWd1cmUKICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJyaWdodC1zaWRlIHJpZ2h0LXNpZGUtcGVyZm9ybWFuY2UtdGFiIj4KICAgICAgICAgICAgICAgICAgICAgIDxpcm9uLWljb24gaWNvbj0iW1tnZXRFeHBhbmRDb2xsYXBzZUljb24ob3BlbmVkVHJ1ZUxhYmVsKV1dIiBjbGFzcz0iZXhwYW5kLWNvbGxhcHNlLWJ1dHRvbiI+PC9pcm9uLWljb24+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICA8aXJvbi1jb2xsYXBzZSBjbGFzcz0iY2FyZCIgaWQ9ImNvbGxhcHNldHJ1ZWxhYmVsIiBvcGVuZWQ9Int7b3BlbmVkVHJ1ZUxhYmVsfX0iPgogICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tzaG91bGRTaG93TGFiZWxEcm9wZG93bl8oc3RhdHMpXV0iPgogICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmxleCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXBlci1kcm9wZG93bi1tZW51IGxhYmVsPSJHcm91bmQgVHJ1dGggRmVhdHVyZSIgY2xhc3M9InRocmVzaG9sZC1kcm9wZG93biI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcGVyLWxpc3Rib3ggc2xvdD0iZHJvcGRvd24tY29udGVudCIgc2VsZWN0ZWQ9Int7c2VsZWN0ZWRMYWJlbEZlYXR1cmV9fSIgYXR0ci1mb3Itc2VsZWN0ZWQ9Im5hbWUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tnZXRGZWF0dXJlTGlzdF8oc3RhdHMpXV0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFwZXItaXRlbSBuYW1lPSJbW2l0ZW1dXSI+W1tnZXRGZWF0dXJlTmFtZV8oaXRlbSldXTwvcGFwZXItaXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXBlci1saXN0Ym94PgogICAgICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLWRyb3Bkb3duLW1lbnU+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaGVscC10aXRsZSBoZWxwLXRpdGxlLW1hcmdpbiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0IGlzIGdyb3VuZCB0cnV0aD8KICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWxwLXRleHQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGZlYXR1cmUgdGhhdCB5b3VyIG1vZGVsIGlzIHRyeWluZyB0byBwcmVkaWN0LgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZGlhbG9nLWxpbmsiIG9uLXRhcD0ib3BlbkRpYWxvZyI+TW9yZS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFwZXItZGlhbG9nIGNsYXNzPSJkaWFsb2ctdGV4dCIgaG9yaXpvbnRhbC1hbGlnbj0iYXV0byIgdmVydGljYWwtYWxpZ249ImF1dG8iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZGlhbG9nLXRpdGxlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JvdW5kIFRydXRoIEZlYXR1cmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgdGhlIGRhdGFwb2ludHMgY29udGFpbiBhIGZlYXR1cmUgdGhhdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXByZXNlbnRzIHRoZSBncm91bmQgdHJ1dGggZm9yIHdoYXQgdGhlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVsIGlzIGF0dGVtcHRpbmcgdG8gcHJlZGljdCwgdGhlbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RpbmcgdGhhdCBmZWF0dXJlIGhlcmUgYWxsb3dzIHRoZSB0b29sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGludmVzdGlnYXRlIHRoZSBwZXJmb3JtYW5jZSBvZiB0aGUgbW9kZWwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnkgY29tcGFyaW5nIHRoZSBtb2RlbCdzIHJlc3VsdHMgdG8gdGhlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VuZCB0cnV0aCBmZWF0dXJlLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXBlci1kaWFsb2c+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW3Nob3VsZFNob3dDb3N0UmF0aW9fKHNlbGVjdGVkTGFiZWxGZWF0dXJlLCBtb2RlbFR5cGUsIG11bHRpQ2xhc3MpXV0iPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFwZXItaW5wdXQgdmFsdWU9Int7aW5jb3JyZWN0UHJlZENvc3RSYXRpb319IiBsYWJlbD0iQ29zdCBSYXRpbyAoRlAvRk4pIiB0eXBlPSJudW1iZXIiIGNsYXNzPSJ0aHJlc2hvbGQtY29zdC1pbnB1dCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXBlci1pbnB1dD4KICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaGVscC10aXRsZSBoZWxwLXRpdGxlLW1hcmdpbiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQgaXMgY29zdCByYXRpbz8KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaGVscC10ZXh0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgY29zdCBvZiBmYWxzZSBwb3NpdGl2ZXMgcmVsYXRpdmUgdG8gZmFsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZWdhdGl2ZXMuIFJlcXVpcmVkIGZvciBvcHRpbWl6YXRpb24uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImRpYWxvZy1saW5rIiBvbi10YXA9Im9wZW5EaWFsb2ciPk1vcmUuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFwZXItZGlhbG9nIGNsYXNzPSJkaWFsb2ctdGV4dCIgaG9yaXpvbnRhbC1hbGlnbj0iYXV0byIgdmVydGljYWwtYWxpZ249ImF1dG8iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJkaWFsb2ctdGl0bGUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQgaXMgY29zdCByYXRpbz8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyB0ZWxscyB0aGUgdG9vbCBob3cgdG8gb3B0aW1pemUgdGhlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NpZmljYXRpb24gdGhyZXNob2xkcyB3aGVuIHlvdSB1c2UgdGhlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW1pemF0aW9uIHN0cmF0ZWd5IGNvbnRyb2xzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLjAwID0gZmFsc2UgcG9zaXRpdmVzIGFyZSBlcXVhbGx5IGFzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29zdGx5IGFzIGZhbHNlIG5lZ2F0aXZlcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNC4wMCA9IGZhbHNlIHBvc2l0aXZlcyBhcmUgNCB0aW1lcyBtb3JlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29zdGx5IHRoYW4gZmFsc2UgbmVnYXRpdmVzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuMjUgPSBmYWxzZSBuZWdhdGl2ZXMgYXJlIDQgdGltZXMgbW9yZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvc3RseSB0aGFuIGZhbHNlIHBvc2l0aXZlcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLWRpYWxvZz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tzaG91bGRTaG93RmVhdHVyZURyb3Bkb3duXyhzdGF0cyldXSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXgiPgogICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXBlci1kcm9wZG93bi1tZW51IGxhYmVsPSJTbGljZSBieSIgY2xhc3M9InRocmVzaG9sZC1kcm9wZG93biI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFwZXItbGlzdGJveCBzbG90PSJkcm9wZG93bi1jb250ZW50IiBzZWxlY3RlZD0ie3tzZWxlY3RlZEJyZWFrZG93bkZlYXR1cmV9fSIgYXR0ci1mb3Itc2VsZWN0ZWQ9Im5hbWUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW2dldEZlYXR1cmVMaXN0XyhzdGF0cyldXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcGVyLWl0ZW0gbmFtZT0iW1tpdGVtXV0iPltbZ2V0RmVhdHVyZU5hbWVfKGl0ZW0pXV08L3BhcGVyLWl0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLWxpc3Rib3g+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXBlci1kcm9wZG93bi1tZW51PgogICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWxwLXRpdGxlIGhlbHAtdGl0bGUtbWFyZ2luIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCBkb2VzIHNsaWNpbmcgZG8/CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImhlbHAtdGV4dCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2hvd3MgcGVyZm9ybWFuY2UgZm9yIGVhY2ggdmFsdWUgb2YgdGhlIHNlbGVjdGVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVhdHVyZS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXgiPgogICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tzaG91bGRTaG93U2Vjb25kRmVhdHVyZURyb3Bkb3duXyhzZWxlY3RlZEJyZWFrZG93bkZlYXR1cmUpXV0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcGVyLWRyb3Bkb3duLW1lbnUgbGFiZWw9IlNsaWNlIGJ5IChzZWNvbmRhcnkpIiBjbGFzcz0idGhyZXNob2xkLWRyb3Bkb3duIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcGVyLWxpc3Rib3ggc2xvdD0iZHJvcGRvd24tY29udGVudCIgc2VsZWN0ZWQ9Int7c2VsZWN0ZWRTZWNvbmRCcmVha2Rvd25GZWF0dXJlfX0iIGF0dHItZm9yLXNlbGVjdGVkPSJuYW1lIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW2dldEZlYXR1cmVMaXN0XyhzdGF0cyldXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFwZXItaXRlbSBuYW1lPSJbW2l0ZW1dXSI+W1tnZXRGZWF0dXJlTmFtZV8oaXRlbSldXTwvcGFwZXItaXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLWxpc3Rib3g+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLWRyb3Bkb3duLW1lbnU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICAgIDwvaXJvbi1jb2xsYXBzZT4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2lzQmluYXJ5Q2xhc3NpZmljYXRpb25fKG1vZGVsVHlwZSwgbXVsdGlDbGFzcyldXSI+CiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImhlYWRpbmctYW5kLWNhcmQiPgogICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImluZmVyZW5jZS1oZWFkZXIgaGVhZGluZyIgb24tdGFwPSJ0b2dnbGVFeHBsb3JlclNldHVwIj4KICAgICAgICAgICAgICAgICAgICAgIEZhaXJuZXNzCiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJyaWdodC1zaWRlIHJpZ2h0LXNpZGUtcGVyZm9ybWFuY2UtdGFiIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGlyb24taWNvbiBpY29uPSJbW2dldEV4cGFuZENvbGxhcHNlSWNvbihvcGVuZWRFeHBsb3JlcildXSIgY2xhc3M9ImV4cGFuZC1jb2xsYXBzZS1idXR0b24iPjwvaXJvbi1pY29uPgogICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgPGlyb24tY29sbGFwc2UgY2xhc3M9ImNhcmQiIGlkPSJjb2xsYXBzZWV4cGxvcmVyIiBvcGVuZWQ9Int7b3BlbmVkRXhwbG9yZXJ9fSI+CiAgICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Iltbc2hvdWxkU2hvd0ZlYXR1cmVEcm9wZG93bl8oc3RhdHMpXV0iPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb250cm9sLWluZm8taGVhZGVyIGhlbHAtdGl0bGUtbWFyZ2luLWJ1dHRvbiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgQXBwbHkgYW4gb3B0aW1pemF0aW9uIHN0cmF0ZWd5CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb250cm9sLWluZm8tdGV4dCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgU2VsZWN0IGEgc3RyYXRlZ3kgdG8gc2V0IGNsYXNzaWZpY2F0aW9uIHRocmVzaG9sZHMKICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlZCBvbiB0aGUgc2V0IGNvc3QgcmF0aW8gYW5kIGRhdGEgc2xpY2VzLiBNYW51YWxseQogICAgICAgICAgICAgICAgICAgICAgICAgIGFsdGVyaW5nIHRocmVzaG9sZHMgb3IgY2hhbmdpbmcgY29zdCByYXRpbyB3aWxsCiAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdCBiYWNrIHRvIGN1c3RvbSB0aHJlc2hvbGRzLgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPHBhcGVyLXJhZGlvLWdyb3VwIGNsYXNzPSJvcHRpbWl6YXRpb24tcmFkaW8tZ3JvdXAiIHNlbGVjdGVkPSJ7e29wdGltaXphdGlvblNlbGVjdGVkfX0iPgogICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXBlci1yYWRpby1idXR0b24gbmFtZT0iY3VzdG9tIiBjbGFzcz0ib3B0aW1pemF0aW9uLXJhZGlvIiBpZD0iY3VzdG9tdGhyZXNoIj5DdXN0b20gdGhyZXNob2xkcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcGVyLWljb24tYnV0dG9uIGljb249ImluZm8tb3V0bGluZSIgY2xhc3M9ImluZm8taWNvbiB0aHJlc2gtaW5mby1pY29uIG5vLXBhZGRpbmciIG9uLXRhcD0ib3BlbkRpYWxvZyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLWljb24tYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcGVyLWRpYWxvZyBjbGFzcz0iZGlhbG9nLXRleHQiIGhvcml6b250YWwtYWxpZ249ImF1dG8iIHZlcnRpY2FsLWFsaWduPSJib3R0b20iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJkaWFsb2ctdGl0bGUiPkN1c3RvbSB0aHJlc2hvbGRzPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2V0IHlvdXIgb3duIHRocmVzaG9sZHMgdXNpbmcgdGhlIHRocmVzaG9sZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsaWRlcnMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXBlci1kaWFsb2c+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXBlci1yYWRpby1idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbiBuYW1lPSJ1bmF3YXJlIiBjbGFzcz0ib3B0aW1pemF0aW9uLXJhZGlvIj5TaW5nbGUgdGhyZXNob2xkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24gaWNvbj0iaW5mby1vdXRsaW5lIiBjbGFzcz0iaW5mby1pY29uIHRocmVzaC1pbmZvLWljb24gbm8tcGFkZGluZyIgb24tdGFwPSJvcGVuRGlhbG9nIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFwZXItZGlhbG9nIGNsYXNzPSJkaWFsb2ctdGV4dCIgaG9yaXpvbnRhbC1hbGlnbj0iYXV0byIgdmVydGljYWwtYWxpZ249ImJvdHRvbSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRpYWxvZy10aXRsZSI+U2luZ2xlIHRocmVzaG9sZDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wdGltaXplIGEgc2luZ2xlIHRocmVzaG9sZCBmb3IgYWxsIGRhdGFwb2ludHMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlZCBvbiB0aGUgc3BlY2lmaWVkIGNvc3QgcmF0aW8uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXBlci1kaWFsb2c+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXBlci1yYWRpby1idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbiBuYW1lPSJkZW1vcGFyaXR5IiBjbGFzcz0ib3B0aW1pemF0aW9uLXJhZGlvIiBkaXNhYmxlZCQ9IltbIXNob3VsZFNob3dGZWF0dXJlUHJDaGFydHNfKHNlbGVjdGVkTGFiZWxGZWF0dXJlLCBzZWxlY3RlZEJyZWFrZG93bkZlYXR1cmUsIGluZmVyZW5jZXMpXV0iPkRlbW9ncmFwaGljIHBhcml0eQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcGVyLWljb24tYnV0dG9uIGljb249ImluZm8tb3V0bGluZSIgY2xhc3M9ImluZm8taWNvbiB0aHJlc2gtaW5mby1pY29uIG5vLXBhZGRpbmciIG9uLXRhcD0ib3BlbkRpYWxvZyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLWljb24tYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcGVyLWRpYWxvZyBjbGFzcz0iZGlhbG9nLXRleHQiIGhvcml6b250YWwtYWxpZ249ImF1dG8iIHZlcnRpY2FsLWFsaWduPSJib3R0b20iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJkaWFsb2ctdGl0bGUiPkRlbW9ncmFwaGljIHBhcml0eTwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wdGltaXplIGEgdGhyZXNob2xkIHBlciBzbGljZSBiYXNlZCBvbiB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZWQgY29zdCByYXRpbywgZW5zdXJpbmcgdGhlIGRpZmZlcmVudAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsaWNlcyBhY2hpZXZlIGRlbW9ncmFwaGljIHBhcnR5LgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZW1vZ3JhcGhpYyBwYXJpdHkgbWVhbnMgdGhhdCBzaW1pbGFyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVyY2VudGFnZXMgb2YgZGF0YXBvaW50cyBmcm9tIGVhY2ggc2xpY2UgYXJlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZGljdGVkIGFzIHBvc2l0aXZlIGNsYXNzaWZpY2F0aW9ucy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLWRpYWxvZz4KICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLXJhZGlvLWJ1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFwZXItcmFkaW8tYnV0dG9uIG5hbWU9ImVxdWFsb3BwIiBjbGFzcz0ib3B0aW1pemF0aW9uLXJhZGlvIiBkaXNhYmxlZCQ9IltbIXNob3VsZFNob3dGZWF0dXJlUHJDaGFydHNfKHNlbGVjdGVkTGFiZWxGZWF0dXJlLCBzZWxlY3RlZEJyZWFrZG93bkZlYXR1cmUsIGluZmVyZW5jZXMpXV0iPkVxdWFsIG9wcG9ydHVuaXR5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24gaWNvbj0iaW5mby1vdXRsaW5lIiBjbGFzcz0iaW5mby1pY29uIHRocmVzaC1pbmZvLWljb24gbm8tcGFkZGluZyIgb24tdGFwPSJvcGVuRGlhbG9nIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFwZXItZGlhbG9nIGNsYXNzPSJkaWFsb2ctdGV4dCIgaG9yaXpvbnRhbC1hbGlnbj0iYXV0byIgdmVydGljYWwtYWxpZ249ImJvdHRvbSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRpYWxvZy10aXRsZSI+RXF1YWwgb3Bwb3J0dW5pdHk8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcHRpbWl6ZSBhIHRocmVzaG9sZCBwZXIgc2xpY2UgYmFzZWQgb24gdGhlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWVkIGNvc3QgcmF0aW8sIGVuc3VyaW5nIHRoZSBkaWZmZXJlbnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGljZXMgYWNoaWV2ZSBlcXVhbCBvcHBvcnR1bml0eS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXF1YWwgb3Bwb3J0dW5pdHkgbWVhbnMgdGhhdCBhbW9uZyB0aG9zZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWRpY3RlZCBhcyBwb3NpdGl2ZSBjbGFzc2lmaWNhdGlvbnMsIHRoZXJlIGlzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSBzaW1pbGFyIHBlcmNlbnRhZ2Ugb2YgY29ycmVjdCBwcmVkaWN0aW9ucyBpbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVhY2ggc2xpY2UuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXBlci1kaWFsb2c+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXBlci1yYWRpby1idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbiBuYW1lPSJlcXVhbGFjYyIgY2xhc3M9Im9wdGltaXphdGlvbi1yYWRpbyIgZGlzYWJsZWQkPSJbWyFzaG91bGRTaG93RmVhdHVyZVByQ2hhcnRzXyhzZWxlY3RlZExhYmVsRmVhdHVyZSwgc2VsZWN0ZWRCcmVha2Rvd25GZWF0dXJlLCBpbmZlcmVuY2VzKV1dIj5FcXVhbCBhY2N1cmFjeQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcGVyLWljb24tYnV0dG9uIGljb249ImluZm8tb3V0bGluZSIgY2xhc3M9ImluZm8taWNvbiB0aHJlc2gtaW5mby1pY29uIG5vLXBhZGRpbmciIG9uLXRhcD0ib3BlbkRpYWxvZyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLWljb24tYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcGVyLWRpYWxvZyBjbGFzcz0iZGlhbG9nLXRleHQiIGhvcml6b250YWwtYWxpZ249ImF1dG8iIHZlcnRpY2FsLWFsaWduPSJib3R0b20iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJkaWFsb2ctdGl0bGUiPkVxdWFsIGFjY3VyYWN5PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3B0aW1pemUgYSB0aHJlc2hvbGQgcGVyIHNsaWNlIGJhc2VkIG9uIHRoZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmllZCBjb3N0IHJhdGlvLCBlbnN1cmluZyB0aGUgZGlmZmVyZW50CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xpY2VzIGFjaGlldmUgZXF1YWwgYWNjdXJhY3kuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVxdWFsIGFjY3VyYWN5IG1lYW5zIHRoYXQgdGhlcmUgaXMgYSBzaW1pbGFyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVyY2VudGFnZSBvZiBjb3JyZWN0IHByZWRpY3Rpb25zIGluIGVhY2ggc2xpY2UuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXBlci1kaWFsb2c+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXBlci1yYWRpby1idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbiBuYW1lPSJncm91cCIgY2xhc3M9Im9wdGltaXphdGlvbi1yYWRpbyIgZGlzYWJsZWQkPSJbWyFzaG91bGRTaG93RmVhdHVyZVByQ2hhcnRzXyhzZWxlY3RlZExhYmVsRmVhdHVyZSwgc2VsZWN0ZWRCcmVha2Rvd25GZWF0dXJlLCBpbmZlcmVuY2VzKV1dIj5Hcm91cCB0aHJlc2hvbGRzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24gaWNvbj0iaW5mby1vdXRsaW5lIiBjbGFzcz0iaW5mby1pY29uIHRocmVzaC1pbmZvLWljb24gbm8tcGFkZGluZyIgb24tdGFwPSJvcGVuRGlhbG9nIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFwZXItZGlhbG9nIGNsYXNzPSJkaWFsb2ctdGV4dCIgaG9yaXpvbnRhbC1hbGlnbj0iYXV0byIgdmVydGljYWwtYWxpZ249ImJvdHRvbSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRpYWxvZy10aXRsZSI+R3JvdXAgdGhyZXNob2xkczwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wdGltaXplIGEgc2VwYXJhdGUgdGhyZXNob2xkIGZvciBlYWNoIHNsaWNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZWQgb24gdGhlIHNwZWNpZmllZCBjb3N0IHJhdGlvLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFwZXItZGlhbG9nPgogICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFwZXItcmFkaW8tYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLXJhZGlvLWdyb3VwPgogICAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgICAgICA8L2lyb24tY29sbGFwc2U+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb25maWctbWFpbi1jb250ZW50Ij4KICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tpc0JpbmFyeUNsYXNzaWZpY2F0aW9uXyhtb2RlbFR5cGUsIG11bHRpQ2xhc3MpXV0iIHJlc3RhbXA+CiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBlcmYtdGFibGUtdGl0bGUtcm93Ij4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4Ij4KICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBlcmYtdGFibGUtdGl0bGUiPgogICAgICAgICAgICAgICAgICAgICAgICBbW2dldFBlcmZUYWJsZVRpdGxlKHNlbGVjdGVkQnJlYWtkb3duRmVhdHVyZSwKICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRTZWNvbmRCcmVha2Rvd25GZWF0dXJlLCBvcHRpbWl6YXRpb25TZWxlY3RlZCwKICAgICAgICAgICAgICAgICAgICAgICAgZmVhdHVyZVZhbHVlVGhyZXNob2xkcyldXQogICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24gaWNvbj0iaW5mby1vdXRsaW5lIiBjbGFzcz0iaW5mby1pY29uIHBlcmZvcm1hbmNlLWluZm8taWNvbiBuby1wYWRkaW5nIiBvbi10YXA9Im9wZW5EaWFsb2ciPgogICAgICAgICAgICAgICAgICAgICAgPC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgIDxwYXBlci1kaWFsb2cgY2xhc3M9ImRpYWxvZy10ZXh0IiBob3Jpem9udGFsLWFsaWduPSJhdXRvIiB2ZXJ0aWNhbC1hbGlnbj0iYXV0byI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRpYWxvZy10aXRsZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgQ2xhc3NpZmljYXRpb24gUGVyZm9ybWFuY2UgVGFibGUKICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgU2V0IHRoZSBncm91bmQgdHJ1dGggZmVhdHVyZSB0byBleHBsb3JlIG1vZGVsCiAgICAgICAgICAgICAgICAgICAgICAgICAgcGVyZm9ybWFuY2UgaW5jbHVkaW5nIFJPQyBjdXJ2ZXMgYW5kIGNvbmZ1c2lvbgogICAgICAgICAgICAgICAgICAgICAgICAgIG1hdHJpY2VzLgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICBTbGljZSB0aGUgZGF0YXNldCBieSBmZWF0dXJlcyBhbmQgZXhwbG9yZSBtb2RlbAogICAgICAgICAgICAgICAgICAgICAgICAgIHBlcmZvcm1hbmNlIGJ5IHNsaWNlLgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICBVc2UgdGhlIGZhaXJuZXNzIG9wdGltaXphdGlvbiBzdHJhdGVnaWVzIGFuZCBzZWUgdGhlCiAgICAgICAgICAgICAgICAgICAgICAgICAgaW1wYWN0IG9uIHRoZSB0aHJlc2hvbGRzIGFuZCBwZXJmb3JtYW5jZSBvZiB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRpdmlkdWFsIHNsaWNlcy4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLWRpYWxvZz4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmLXNvcnQtYm94Ij4KICAgICAgICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXBlci1pY29uLWJ1dHRvbiBpY29uPSJ1bmZvbGQtbW9yZSIgY2xhc3M9InBlcmYtYnV0dG9uIiBvbi10YXA9ImV4cGFuZEFsbFBlcmZvcm1hbmNlIiBhbHQ9ImV4cGFuZCBhbGwgc2xpY2VzIiB0aXRsZT0iRXhwYW5kIGFsbCBzbGljZXMiPgogICAgICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLWljb24tYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24gaWNvbj0idW5mb2xkLWxlc3MiIGNsYXNzPSJwZXJmLWJ1dHRvbiIgb24tdGFwPSJjb2xsYXBzZUFsbFBlcmZvcm1hbmNlIiBhbHQ9ImNvbGxhcHNlIGFsbCBzbGljZXMiIHRpdGxlPSJDb2xsYXBzZSBhbGwgc2xpY2VzIj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgPHBhcGVyLWRyb3Bkb3duLW1lbnUgbGFiZWw9IlNvcnQgYnkiIGNsYXNzPSJ0aHJlc2hvbGQtZHJvcGRvd24gcGVyZi10YWJsZS1zb3J0LW1lbnUiPgogICAgICAgICAgICAgICAgICAgICAgICA8cGFwZXItbGlzdGJveCBzbG90PSJkcm9wZG93bi1jb250ZW50IiBzZWxlY3RlZD0ie3tzZWxlY3RlZEZlYXR1cmVTb3J0fX0iIGF0dHItZm9yLXNlbGVjdGVkPSJuYW1lIj4KICAgICAgICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW2dldEZlYXR1cmVTb3J0QnkobW9kZWxUeXBlLCBtdWx0aUNsYXNzKV1dIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXBlci1pdGVtIG5hbWU9IltbaXRlbV1dIj5bW2l0ZW1dXTwvcGFwZXItaXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLWxpc3Rib3g+CiAgICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLWRyb3Bkb3duLW1lbnU+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmLXRhYmxlLWhlYWRlciI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGVyZi10YWJsZS1hcnJvdyI+CiAgICAgICAgICAgICAgICAgICAgICA8aXJvbi1pY29uIGNsYXNzPSJleHBhbmQtY29sbGFwc2UtYnV0dG9uIj48L2lyb24taWNvbj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmLXRhYmxlLXZhbCI+RmVhdHVyZSBWYWx1ZTwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBlcmYtdGFibGUtY291bnQiPkNvdW50PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcyQ9IltbZ2V0UGVyZlRhYmxlTW9kZWxDbGFzcyhudW1Nb2RlbHMpXV0iPgogICAgICAgICAgICAgICAgICAgICAgTW9kZWwKICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmLXRhYmxlLXRocmVzaG9sZCBmbGV4Ij4KICAgICAgICAgICAgICAgICAgICAgIDxkaXY+VGhyZXNob2xkPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aHJlc2hvbGQtaW5mby1ob2xkZXIiPgogICAgICAgICAgICAgICAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24gaWNvbj0iaW5mby1vdXRsaW5lIiBjbGFzcz0iaW5mby1pY29uIHRocmVzaG9sZC1pbmZvLWljb24gbm8tcGFkZGluZyIgb24tdGFwPSJvcGVuRGlhbG9nIj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgPHBhcGVyLWRpYWxvZyBjbGFzcz0iZGlhbG9nLXRleHQiIGhvcml6b250YWwtYWxpZ249ImF1dG8iIHZlcnRpY2FsLWFsaWduPSJhdXRvIj4KICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJkaWFsb2ctdGl0bGUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgRXhwbG9yaW5nIENsYXNzaWZpY2F0aW9uIFBlcmZvcm1hbmNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZSB0aGlzIHNsaWRlciB0byBhZGp1c3QgdGhlIGNsYXNzaWZpY2F0aW9uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJlc2hvbGQgZm9yIHRoaXMgc2xpY2UuIEluZmVyZW5jZSB2YWx1ZXMgYXQgb3IKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFib3ZlIHRoaXMgdGhyZXNob2xkIGFyZSBjb25zaWRlcmVkIGEgcG9zaXRpdmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzaWZpY2F0aW9uLCB3aGlsZSBpbmZlcmVuY2UgdmFsdWVzIGJlbG93IHRoaXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocmVzaG9sZCBhcmUgY29uc2lkZXJlZCBhIG5lZ2F0aXZlIGNsYXNzaWZpY2F0aW9uLgogICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLWRpYWxvZz4KICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBlcmYtdGFibGUtZnAiPkZhbHNlIFBvc2l0aXZlcyAoJSk8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmLXRhYmxlLWZuIj5GYWxzZSBOZWdhdGl2ZXMgKCUpPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGVyZi10YWJsZS1hY2MiPkFjY3VyYWN5ICglKTwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBlcmYtdGFibGUtZjEiPkYxPC9kaXY+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmLXRhYmxlLWVudHJpZXMtaG9sZGVyIj4KICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW2ZlYXR1cmVWYWx1ZVRocmVzaG9sZHNdXSIgYXM9ImZlYXR1cmVWYWx1ZVRocmVzaG9sZCI+CiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmLXRhYmxlLWVudHJ5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcyQ9IltbZ2V0UGVyZlRhYmxlUm93Q2xhc3MoZmVhdHVyZVZhbHVlVGhyZXNob2xkLm9wZW5lZCldXSIgZGF0YS1pbmRleCQ9IltbaW5kZXhdXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGVyZi10YWJsZS1hcnJvdyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24gY2xhc3MkPSJbW2dldEV4cGFuZENvbGxhcHNlUGVyZkljb25DbGFzcyhmZWF0dXJlVmFsdWVUaHJlc2hvbGQub3BlbmVkKV1dIiBpY29uPSJhcnJvdy1kcm9wLWRvd24iIG9uLXRhcD0idG9nZ2xlUGVyZlJvdyI+PC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmLXRhYmxlLXZhbCBwZXJmLXRhYmxlLWNsaWNrYWJsZSBwZXJmLXRhYmxlLXRleHQtZW50cnkiIG9uLXRhcD0idG9nZ2xlUGVyZlJvdyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbW2dldFByaW50YWJsZVZhbHVlXyhmZWF0dXJlVmFsdWVUaHJlc2hvbGQpXV0KICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmLXRhYmxlLWNvdW50IHBlcmYtdGFibGUtY2xpY2thYmxlIHBlcmYtdGFibGUtbnVtLWVudHJ5IiBvbi10YXA9InRvZ2dsZVBlcmZSb3ciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgW1tnZXRGZWF0dXJlVmFsdWVDb3VudChpbmZlcmVuY2VTdGF0c18sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZWF0dXJlVmFsdWVUaHJlc2hvbGQudGhyZXNob2xkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVhdHVyZVZhbHVlVGhyZXNob2xkKV1dCiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcyQ9IltbZ2V0UGVyZlRhYmxlTW9kZWxDbGFzcyhudW1Nb2RlbHMpXV0iIG9uLXRhcD0idG9nZ2xlUGVyZlJvdyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJ7e2ZlYXR1cmVWYWx1ZVRocmVzaG9sZC50aHJlc2hvbGR9fSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBlcmYtdGFibGUtdGV4dC1lbnRyeSBwZXJmLXRhYmxlLWNsaWNrYWJsZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1tnZXRNb2RlbE5hbWVfKGluZGV4KV1dCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmLXRhYmxlLXRocmVzaG9sZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJ7e2ZlYXR1cmVWYWx1ZVRocmVzaG9sZC50aHJlc2hvbGR9fSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXBlci1zbGlkZXIgY2xhc3MkPSJbW2dldFNsaWRlckNsYXNzKGluZGV4KV1dIiBlZGl0YWJsZT0idHJ1ZSIgbWluPSIwIiBtYXg9IjEiIHN0ZXA9IjAuMDEiIGltbWVkaWF0ZS12YWx1ZT0ie3tpdGVtLnRocmVzaG9sZH19IiB2YWx1ZT0iW1tpdGVtLnRocmVzaG9sZF1dIiBvbi12YWx1ZS1jaGFuZ2VkPSJyZWZyZXNoSW5mZXJlbmNlc05vUmVnZW5fIiBvbi1pbW1lZGlhdGUtdmFsdWUtY2hhbmdlZD0icmVmcmVzaEluZmVyZW5jZXNOb1JlZ2VuXyIgb24tZG93bj0icmVzZXRPcHRpbWl6YXRpb25TZWxlY3RlZF8iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLXNsaWRlcj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGVyZi10YWJsZS1mcCBwZXJmLXRhYmxlLWNsaWNrYWJsZSIgb24tdGFwPSJ0b2dnbGVQZXJmUm93Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9Int7ZmVhdHVyZVZhbHVlVGhyZXNob2xkLnRocmVzaG9sZH19Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGVyZi10YWJsZS1udW0tZW50cnkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtbZ2V0RlBNb2RlbEluZGV4KGluZmVyZW5jZVN0YXRzXywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZWF0dXJlVmFsdWVUaHJlc2hvbGQudGhyZXNob2xkLCBpbmRleCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZWF0dXJlVmFsdWVUaHJlc2hvbGQpXV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBlcmYtdGFibGUtZm4gcGVyZi10YWJsZS1jbGlja2FibGUiIG9uLXRhcD0idG9nZ2xlUGVyZlJvdyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJ7e2ZlYXR1cmVWYWx1ZVRocmVzaG9sZC50aHJlc2hvbGR9fSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBlcmYtdGFibGUtbnVtLWVudHJ5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbW2dldEZOTW9kZWxJbmRleChpbmZlcmVuY2VTdGF0c18sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVhdHVyZVZhbHVlVGhyZXNob2xkLnRocmVzaG9sZCwgaW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVhdHVyZVZhbHVlVGhyZXNob2xkKV1dCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmLXRhYmxlLWFjYyBwZXJmLXRhYmxlLWNsaWNrYWJsZSIgb24tdGFwPSJ0b2dnbGVQZXJmUm93Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9Int7ZmVhdHVyZVZhbHVlVGhyZXNob2xkLnRocmVzaG9sZH19Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGVyZi10YWJsZS1udW0tZW50cnkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtbZ2V0QWNjdXJhY3lNb2RlbEluZGV4KGluZmVyZW5jZVN0YXRzXywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZWF0dXJlVmFsdWVUaHJlc2hvbGQudGhyZXNob2xkLCBpbmRleCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZWF0dXJlVmFsdWVUaHJlc2hvbGQpXV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBlcmYtdGFibGUtZjEgcGVyZi10YWJsZS1jbGlja2FibGUiIG9uLXRhcD0idG9nZ2xlUGVyZlJvdyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJ7e2ZlYXR1cmVWYWx1ZVRocmVzaG9sZC50aHJlc2hvbGR9fSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBlcmYtdGFibGUtbnVtLWVudHJ5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbW2dldEYxTW9kZWxJbmRleChpbmZlcmVuY2VTdGF0c18sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVhdHVyZVZhbHVlVGhyZXNob2xkLnRocmVzaG9sZCwgaW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVhdHVyZVZhbHVlVGhyZXNob2xkKV1dCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgIDxpcm9uLWNvbGxhcHNlIG9wZW5lZD0ie3tmZWF0dXJlVmFsdWVUaHJlc2hvbGQub3BlbmVkfX0iPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmLXRhYmxlLWVudHJ5LWV4cGFuZGVkIGZsZXgtcm93LXJldmVyc2UiPgogICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tzaG91bGRTaG93RmVhdHVyZVByQ2hhcnRzXyhzZWxlY3RlZExhYmVsRmVhdHVyZSwgc2VsZWN0ZWRCcmVha2Rvd25GZWF0dXJlLCBpbmZlcmVuY2VzKV1dIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbmYtbWF0cml4LWhvbGRlciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbmYtdGV4dCI+Q29uZnVzaW9uIG1hdHJpeDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJ7e2ZlYXR1cmVWYWx1ZVRocmVzaG9sZC50aHJlc2hvbGR9fSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRmLWNvbmZ1c2lvbi1tYXRyaXggY291bnRzPSJbW2dldENvbmZ1c2lvbkNvdW50c01vZGVsSW5kZXgoaW5mZXJlbmNlU3RhdHNfLCBmZWF0dXJlVmFsdWVUaHJlc2hvbGQudGhyZXNob2xkLCBpbmRleCwgZmVhdHVyZVZhbHVlVGhyZXNob2xkKV1dIiBsYWJlbD0iW1tnZXRDb25mdXNpb25NYXRyaXhMYWJlbChpbmRleCwgbnVtTW9kZWxzKV1dIiBiYWNrZ3JvdW5kPSJbW2dldENvbmZ1c2lvbk1hdHJpeENvbG9yKGluZGV4KV1dIiBhbGwtaXRlbXM9IltbYWxsQ29uZk1hdHJpeExhYmVsc11dIiBjbGFzcz0iY29uZi1tYXRyaXgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGYtY29uZnVzaW9uLW1hdHJpeD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY3VydmVzLWhvbGRlciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImN1cnZlLWhvbGRlciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icm9jLXRleHQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUk9DIGN1cnZlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24gaWNvbj0iaW5mby1vdXRsaW5lIiBjbGFzcz0iaW5mby1pY29uIHRocmVzaG9sZC1pbmZvLWljb24gbm8tcGFkZGluZyIgb24tdGFwPSJvcGVuRGlhbG9nIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFwZXItZGlhbG9nIGNsYXNzPSJkaWFsb2ctdGV4dCIgaG9yaXpvbnRhbC1hbGlnbj0icmlnaHQiIHZlcnRpY2FsLWFsaWduPSJib3R0b20iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJkaWFsb2ctdGl0bGUiPlJPQyBjdXJ2ZTwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEEgcmVjZWl2ZXIgb3BlcmF0aW5nIGNoYXJhY3RlcmlzdGljIChST0MpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VydmUgcGxvdHMgdGhlIHRydWUgcG9zaXRpdmUgcmF0ZSAoVFBSKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFnYWluc3QgdGhlIGZhbHNlIHBvc2l0aXZlIHJhdGUgKEZQUikgYXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpb3VzIGNsYXNzaWZpY2F0aW9uIHRocmVzaG9sZHMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXBlci1kaWFsb2c+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icm9jLXgtbGFiZWwiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmFsc2UgcG9zaXRpdmUgcmF0ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InJvYy15LWxhYmVsIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRydWUgcG9zaXRpdmUgcmF0ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2ei1saW5lLWNoYXJ0MiBpZD0iW1tnZXRSb2NDaGFydElkKGluZGV4KV1dIiBjbGFzcz0icHItbGluZS1jaGFydCIgeC1heGlzLWZvcm1hdHRlcj0iW1tnZXRTaW1wbGVBeGlzRm9ybWF0dGVyKGF4aXNQcmVjaXNpb24pXV0iIHktYXhpcy1mb3JtYXR0ZXI9IltbZ2V0U2ltcGxlQXhpc0Zvcm1hdHRlcihheGlzUHJlY2lzaW9uKV1dIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Z6LWxpbmUtY2hhcnQyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY3VydmUtaG9sZGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJyb2MtdGV4dCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUiBjdXJ2ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcGVyLWljb24tYnV0dG9uIGljb249ImluZm8tb3V0bGluZSIgY2xhc3M9ImluZm8taWNvbiB0aHJlc2hvbGQtaW5mby1pY29uIG5vLXBhZGRpbmciIG9uLXRhcD0ib3BlbkRpYWxvZyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLWljb24tYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcGVyLWRpYWxvZyBjbGFzcz0iZGlhbG9nLXRleHQiIGhvcml6b250YWwtYWxpZ249InJpZ2h0IiB2ZXJ0aWNhbC1hbGlnbj0iYm90dG9tIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZGlhbG9nLXRpdGxlIj5QUiBjdXJ2ZTwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEEgcHJlY2lzaW9uLXJlY2FsbCAoUFIpIGN1cnZlIHBsb3RzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlY2lzaW9uIGFnYWluc3QgcmVjYWxsIGF0IHZhcmlvdXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc2lmaWNhdGlvbiB0aHJlc2hvbGRzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFwZXItZGlhbG9nPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InByLXgtbGFiZWwiPlJlY2FsbDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InByLXktbGFiZWwiPlByZWNpc2lvbjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2ei1saW5lLWNoYXJ0MiBpZD0iW1tnZXRQckNoYXJ0SWQoaW5kZXgpXV0iIGNsYXNzPSJwci1saW5lLWNoYXJ0IiB4LWF4aXMtZm9ybWF0dGVyPSJbW2dldFNpbXBsZUF4aXNGb3JtYXR0ZXIoYXhpc1ByZWNpc2lvbildXSIgeS1heGlzLWZvcm1hdHRlcj0iW1tnZXRTaW1wbGVBeGlzRm9ybWF0dGVyKGF4aXNQcmVjaXNpb24pXV0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdnotbGluZS1jaGFydDI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICA8L2lyb24tY29sbGFwc2U+CiAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Iltbc2hvdWxkU2hvd092ZXJhbGxUaHJlc2hvbGRlcl8oc2VsZWN0ZWRCcmVha2Rvd25GZWF0dXJlKV1dIj4KICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBlcmYtdGFibGUtZW50cnkiPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmLXRhYmxlLXJvdy1leHBhbmRlZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGVyZi10YWJsZS1hcnJvdyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24gaWNvbj0iYXJyb3ctZHJvcC1kb3duIiBvbi10YXA9InRvZ2dsZVBlcmZSb3ciIGRpc2FibGVkPjwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGVyZi10YWJsZS12YWwgcGVyZi10YWJsZS10ZXh0LWVudHJ5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFsbCBkYXRhcG9pbnRzCiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGVyZi10YWJsZS1jb3VudCBwZXJmLXRhYmxlLW51bS1lbnRyeSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbW2dldEZlYXR1cmVWYWx1ZUNvdW50KGluZmVyZW5jZVN0YXRzXywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJhbGxUaHJlc2hvbGRzKV1dCiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcyQ9IltbZ2V0UGVyZlRhYmxlTW9kZWxDbGFzcyhudW1Nb2RlbHMpXV0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0ie3tvdmVyYWxsVGhyZXNob2xkc319Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGVyZi10YWJsZS10ZXh0LWVudHJ5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbW2dldE1vZGVsTmFtZV8oaW5kZXgpXV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBlcmYtdGFibGUtdGhyZXNob2xkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9Int7b3ZlcmFsbFRocmVzaG9sZHN9fSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXBlci1zbGlkZXIgY2xhc3MkPSJbW2dldFNsaWRlckNsYXNzKGluZGV4KV1dIiBlZGl0YWJsZT0idHJ1ZSIgbWluPSIwIiBtYXg9IjEiIHN0ZXA9IjAuMDEiIGltbWVkaWF0ZS12YWx1ZT0ie3tpdGVtLnRocmVzaG9sZH19IiB2YWx1ZT0iW1tpdGVtLnRocmVzaG9sZF1dIiBvbi12YWx1ZS1jaGFuZ2VkPSJyZWZyZXNoSW5mZXJlbmNlc05vUmVnZW5fIiBvbi1pbW1lZGlhdGUtdmFsdWUtY2hhbmdlZD0icmVmcmVzaEluZmVyZW5jZXNOb1JlZ2VuXyIgb24tZG93bj0icmVzZXRPcHRpbWl6YXRpb25TZWxlY3RlZF8iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLXNsaWRlcj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGVyZi10YWJsZS1mcCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJ7e292ZXJhbGxUaHJlc2hvbGRzfX0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmLXRhYmxlLW51bS1lbnRyeSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1tnZXRGUE1vZGVsSW5kZXgoaW5mZXJlbmNlU3RhdHNfLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJhbGxUaHJlc2hvbGRzLCBpbmRleCldXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGVyZi10YWJsZS1mbiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJ7e292ZXJhbGxUaHJlc2hvbGRzfX0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmLXRhYmxlLW51bS1lbnRyeSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1tnZXRGTk1vZGVsSW5kZXgoaW5mZXJlbmNlU3RhdHNfLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJhbGxUaHJlc2hvbGRzLCBpbmRleCldXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGVyZi10YWJsZS1hY2MiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0ie3tvdmVyYWxsVGhyZXNob2xkc319Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGVyZi10YWJsZS1udW0tZW50cnkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtbZ2V0QWNjdXJhY3lNb2RlbEluZGV4KGluZmVyZW5jZVN0YXRzXywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdmVyYWxsVGhyZXNob2xkcywgaW5kZXgpXV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBlcmYtdGFibGUtZjEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0ie3tvdmVyYWxsVGhyZXNob2xkc319Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGVyZi10YWJsZS1udW0tZW50cnkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtbZ2V0RjFNb2RlbEluZGV4KGluZmVyZW5jZVN0YXRzXywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdmVyYWxsVGhyZXNob2xkcywgaW5kZXgpXV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGVyZi10YWJsZS1lbnRyeS1leHBhbmRlZCBmbGV4LXJvdy1yZXZlcnNlIj4KICAgICAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW3Nob3VsZFNob3dPdmVyYWxsUHJDaGFydF8oc2VsZWN0ZWRMYWJlbEZlYXR1cmUsIHNlbGVjdGVkQnJlYWtkb3duRmVhdHVyZSwgaW5mZXJlbmNlcyldXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29uZi1tYXRyaXgtaG9sZGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbmYtdGV4dCI+Q29uZnVzaW9uIG1hdHJpeDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0ie3tvdmVyYWxsVGhyZXNob2xkc319Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRmLWNvbmZ1c2lvbi1tYXRyaXggY291bnRzPSJbW2dldENvbmZ1c2lvbkNvdW50c01vZGVsSW5kZXgoaW5mZXJlbmNlU3RhdHNfLCBvdmVyYWxsVGhyZXNob2xkcywgaW5kZXgpXV0iIGxhYmVsPSJbW2dldENvbmZ1c2lvbk1hdHJpeExhYmVsKGluZGV4LCBudW1Nb2RlbHMpXV0iIGJhY2tncm91bmQ9IltbZ2V0Q29uZnVzaW9uTWF0cml4Q29sb3IoaW5kZXgpXV0iIGFsbC1pdGVtcz0iW1thbGxDb25mTWF0cml4TGFiZWxzXV0iIGNsYXNzPSJjb25mLW1hdHJpeCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGYtY29uZnVzaW9uLW1hdHJpeD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY3VydmVzLWhvbGRlciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjdXJ2ZS1ob2xkZXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJyb2MtdGV4dCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUk9DIGN1cnZlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcGVyLWljb24tYnV0dG9uIGljb249ImluZm8tb3V0bGluZSIgY2xhc3M9ImluZm8taWNvbiB0aHJlc2hvbGQtaW5mby1pY29uIG5vLXBhZGRpbmciIG9uLXRhcD0ib3BlbkRpYWxvZyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFwZXItZGlhbG9nIGNsYXNzPSJkaWFsb2ctdGV4dCIgaG9yaXpvbnRhbC1hbGlnbj0icmlnaHQiIHZlcnRpY2FsLWFsaWduPSJib3R0b20iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZGlhbG9nLXRpdGxlIj5ST0MgY3VydmU8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEEgcmVjZWl2ZXIgb3BlcmF0aW5nIGNoYXJhY3RlcmlzdGljIChST0MpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnZlIHBsb3RzIHRoZSB0cnVlIHBvc2l0aXZlIHJhdGUgKFRQUikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWdhaW5zdCB0aGUgZmFsc2UgcG9zaXRpdmUgcmF0ZSAoRlBSKSBhdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpb3VzIGNsYXNzaWZpY2F0aW9uIHRocmVzaG9sZHMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLWRpYWxvZz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InJvYy14LWxhYmVsIj5GYWxzZSBwb3NpdGl2ZSByYXRlPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InJvYy15LWxhYmVsIj5UcnVlIHBvc2l0aXZlIHJhdGU8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZ6LWxpbmUtY2hhcnQyIGlkPSJyb2NjaGFydCIgY2xhc3M9InByLWxpbmUtY2hhcnQiIHgtYXhpcy1mb3JtYXR0ZXI9IltbZ2V0U2ltcGxlQXhpc0Zvcm1hdHRlcihheGlzUHJlY2lzaW9uKV1dIiB5LWF4aXMtZm9ybWF0dGVyPSJbW2dldFNpbXBsZUF4aXNGb3JtYXR0ZXIoYXhpc1ByZWNpc2lvbildXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdnotbGluZS1jaGFydDI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImN1cnZlLWhvbGRlciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InJvYy10ZXh0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUiBjdXJ2ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXBlci1pY29uLWJ1dHRvbiBpY29uPSJpbmZvLW91dGxpbmUiIGNsYXNzPSJpbmZvLWljb24gdGhyZXNob2xkLWluZm8taWNvbiBuby1wYWRkaW5nIiBvbi10YXA9Im9wZW5EaWFsb2ciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcGVyLWRpYWxvZyBjbGFzcz0iZGlhbG9nLXRleHQiIGhvcml6b250YWwtYWxpZ249InJpZ2h0IiB2ZXJ0aWNhbC1hbGlnbj0iYm90dG9tIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRpYWxvZy10aXRsZSI+UFIgY3VydmU8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEEgcHJlY2lzaW9uLXJlY2FsbCAoUFIpIGN1cnZlIHBsb3RzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWNpc2lvbiBhZ2FpbnN0IHJlY2FsbCBhdCB2YXJpb3VzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzaWZpY2F0aW9uIHRocmVzaG9sZHMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLWRpYWxvZz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InByLXgtbGFiZWwiPlJlY2FsbDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwci15LWxhYmVsIj5QcmVjaXNpb248L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZ6LWxpbmUtY2hhcnQyIGlkPSJwcmNoYXJ0IiBjbGFzcz0icHItbGluZS1jaGFydCIgeC1heGlzLWZvcm1hdHRlcj0iW1tnZXRTaW1wbGVBeGlzRm9ybWF0dGVyKGF4aXNQcmVjaXNpb24pXV0iIHktYXhpcy1mb3JtYXR0ZXI9IltbZ2V0U2ltcGxlQXhpc0Zvcm1hdHRlcihheGlzUHJlY2lzaW9uKV1dIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC92ei1saW5lLWNoYXJ0Mj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2lzTXVsdGlDbGFzc18obW9kZWxUeXBlLCBtdWx0aUNsYXNzKV1dIiByZXN0YW1wPgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmLXRhYmxlLXRpdGxlLXJvdyI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmxleCI+CiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmLXRhYmxlLXRpdGxlIj4KICAgICAgICAgICAgICAgICAgICAgICAgW1tnZXROb1RocmVzaG9sZFBlcmZUYWJsZVRpdGxlKHNlbGVjdGVkQnJlYWtkb3duRmVhdHVyZSwKICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRTZWNvbmRCcmVha2Rvd25GZWF0dXJlLAogICAgICAgICAgICAgICAgICAgICAgICBmZWF0dXJlVmFsdWVUaHJlc2hvbGRzKV1dCiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgIDxwYXBlci1pY29uLWJ1dHRvbiBpY29uPSJpbmZvLW91dGxpbmUiIGNsYXNzPSJpbmZvLWljb24gcGVyZm9ybWFuY2UtaW5mby1pY29uIG5vLXBhZGRpbmciIG9uLXRhcD0ib3BlbkRpYWxvZyI+CiAgICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLWljb24tYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgPHBhcGVyLWRpYWxvZyBjbGFzcz0iZGlhbG9nLXRleHQiIGhvcml6b250YWwtYWxpZ249ImF1dG8iIHZlcnRpY2FsLWFsaWduPSJhdXRvIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZGlhbG9nLXRpdGxlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICBDbGFzc2lmaWNhdGlvbiBQZXJmb3JtYW5jZSBUYWJsZQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICBTZXQgdGhlIGdyb3VuZCB0cnV0aCBmZWF0dXJlIHRvIGV4cGxvcmUgbW9kZWwKICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJmb3JtYW5jZSBpbmNsdWRpbmcgY29uZnVzaW9uIG1hdHJpY2VzLgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICBTbGljZSB0aGUgZGF0YXNldCBhbmQgZXhwbG9yZSBtb2RlbCBwZXJmb3JtYW5jZSBieQogICAgICAgICAgICAgICAgICAgICAgICAgIHNsaWNlLgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgIDwvcGFwZXItZGlhbG9nPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBlcmYtc29ydC1ib3giPgogICAgICAgICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPHBhcGVyLWljb24tYnV0dG9uIGljb249InVuZm9sZC1tb3JlIiBjbGFzcz0icGVyZi1idXR0b24iIG9uLXRhcD0iZXhwYW5kQWxsUGVyZm9ybWFuY2UiIGFsdD0iZXhwYW5kIGFsbCBzbGljZXMiIHRpdGxlPSJFeHBhbmQgYWxsIHNsaWNlcyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXBlci1pY29uLWJ1dHRvbiBpY29uPSJ1bmZvbGQtbGVzcyIgY2xhc3M9InBlcmYtYnV0dG9uIiBvbi10YXA9ImNvbGxhcHNlQWxsUGVyZm9ybWFuY2UiIGFsdD0iY29sbGFwc2UgYWxsIHNsaWNlcyIgdGl0bGU9IkNvbGxhcHNlIGFsbCBzbGljZXMiPgogICAgICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLWljb24tYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICA8cGFwZXItZHJvcGRvd24tbWVudSBsYWJlbD0iU29ydCBieSIgY2xhc3M9InRocmVzaG9sZC1kcm9wZG93biBwZXJmLXRhYmxlLXNvcnQtbWVudSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXBlci1saXN0Ym94IHNsb3Q9ImRyb3Bkb3duLWNvbnRlbnQiIHNlbGVjdGVkPSJ7e3NlbGVjdGVkRmVhdHVyZVNvcnR9fSIgYXR0ci1mb3Itc2VsZWN0ZWQ9Im5hbWUiPgogICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbZ2V0RmVhdHVyZVNvcnRCeShtb2RlbFR5cGUsIG11bHRpQ2xhc3MpXV0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcGVyLWl0ZW0gbmFtZT0iW1tpdGVtXV0iPltbaXRlbV1dPC9wYXBlci1pdGVtPgogICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFwZXItbGlzdGJveD4KICAgICAgICAgICAgICAgICAgICAgIDwvcGFwZXItZHJvcGRvd24tbWVudT4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBlcmYtdGFibGUtaGVhZGVyIj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmLXRhYmxlLWFycm93Ij48L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmLXRhYmxlLXZhbCI+RmVhdHVyZSBWYWx1ZTwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBlcmYtdGFibGUtY291bnQiPkNvdW50PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcyQ9IltbZ2V0UGVyZlRhYmxlTW9kZWxDbGFzcyhudW1Nb2RlbHMpXV0iPgogICAgICAgICAgICAgICAgICAgICAgTW9kZWwKICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmLXRhYmxlLWFjYyI+QWNjdXJhY3k8L2Rpdj4KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBlcmYtdGFibGUtZW50cmllcy1ob2xkZXIiPgogICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbZmVhdHVyZVZhbHVlVGhyZXNob2xkc11dIiBhcz0iZmVhdHVyZVZhbHVlVGhyZXNob2xkIj4KICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBlcmYtdGFibGUtZW50cnkiPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzJD0iW1tnZXRQZXJmVGFibGVSb3dDbGFzcyhmZWF0dXJlVmFsdWVUaHJlc2hvbGQub3BlbmVkKV1dIiBkYXRhLWluZGV4JD0iW1tpbmRleF1dIj4KICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmLXRhYmxlLWFycm93Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXBlci1pY29uLWJ1dHRvbiBjbGFzcyQ9IltbZ2V0RXhwYW5kQ29sbGFwc2VQZXJmSWNvbkNsYXNzKGZlYXR1cmVWYWx1ZVRocmVzaG9sZC5vcGVuZWQpXV0iIGljb249ImFycm93LWRyb3AtZG93biIgb24tdGFwPSJ0b2dnbGVQZXJmUm93Ij48L3BhcGVyLWljb24tYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBlcmYtdGFibGUtdmFsIHBlcmYtdGFibGUtY2xpY2thYmxlIHBlcmYtdGFibGUtdGV4dC1lbnRyeSIgb24tdGFwPSJ0b2dnbGVQZXJmUm93Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtbZ2V0UHJpbnRhYmxlVmFsdWVfKGZlYXR1cmVWYWx1ZVRocmVzaG9sZCldXQogICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBlcmYtdGFibGUtY291bnQgcGVyZi10YWJsZS1udW0tZW50cnkgcGVyZi10YWJsZS1jbGlja2FibGUgcGVyZi10YWJsZS10ZXh0LWVudHJ5IiBvbi10YXA9InRvZ2dsZVBlcmZSb3ciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgW1tnZXRNdWx0aUNsYXNzRmVhdHVyZVZhbHVlQ291bnQoaW5mZXJlbmNlU3RhdHNfLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVhdHVyZVZhbHVlVGhyZXNob2xkKV1dCiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcyQ9IltbZ2V0UGVyZlRhYmxlTW9kZWxDbGFzcyhudW1Nb2RlbHMpXV0iIG9uLXRhcD0idG9nZ2xlUGVyZlJvdyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJ7e2ZlYXR1cmVWYWx1ZVRocmVzaG9sZC50aHJlc2hvbGR9fSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBlcmYtdGFibGUtdGV4dC1lbnRyeSBwZXJmLXRhYmxlLWNsaWNrYWJsZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1tnZXRNb2RlbE5hbWVfKGluZGV4KV1dCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmLXRhYmxlLWFjYyBwZXJmLXRhYmxlLWNsaWNrYWJsZSIgb24tdGFwPSJ0b2dnbGVQZXJmUm93Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9Int7ZmVhdHVyZVZhbHVlVGhyZXNob2xkLnRocmVzaG9sZH19Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGVyZi10YWJsZS10ZXh0LWVudHJ5IHBlcmYtdGFibGUtbnVtLWVudHJ5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbW2dldE11bHRpQ2xhc3NBY2N1cmFjeU1vZGVsSW5kZXgoaW5mZXJlbmNlU3RhdHNfLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4LCBmZWF0dXJlVmFsdWVUaHJlc2hvbGQpXV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgPGlyb24tY29sbGFwc2Ugb3BlbmVkPSJ7e2ZlYXR1cmVWYWx1ZVRocmVzaG9sZC5vcGVuZWR9fSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBlcmYtdGFibGUtZW50cnktZXhwYW5kZWQgZmxleC1yb3ctcmV2ZXJzZSBzY3JvbGwteCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tzaG91bGRTaG93RmVhdHVyZVByQ2hhcnRzXyhzZWxlY3RlZExhYmVsRmVhdHVyZSwgc2VsZWN0ZWRCcmVha2Rvd25GZWF0dXJlLCBpbmZlcmVuY2VzKV1dIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29uZi1tYXRyaXgtaG9sZGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb25mLXRleHQiPkNvbmZ1c2lvbiBtYXRyaXg8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW2luZmVyZW5jZVN0YXRzX11dIiBhcz0iaW5mZXJlbmNlU3RhdCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGYtY29uZnVzaW9uLW1hdHJpeCBjb3VudHM9IltbZ2V0TXVsdGlDbGFzc0NvbmZNYXRyaXgoaW5mZXJlbmNlU3RhdHNfLCBpbmRleCwgZmVhdHVyZVZhbHVlVGhyZXNob2xkKV1dIiBsYWJlbD0iW1tnZXRDb25mdXNpb25NYXRyaXhMYWJlbChpbmRleCwgbnVtTW9kZWxzKV1dIiBiYWNrZ3JvdW5kPSJbW2dldENvbmZ1c2lvbk1hdHJpeENvbG9yKGluZGV4KV1dIiBhbGwtaXRlbXM9IltbYWxsQ29uZk1hdHJpeExhYmVsc11dIiBjbGFzcz0iY29uZi1tYXRyaXgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90Zi1jb25mdXNpb24tbWF0cml4PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICA8L2lyb24tY29sbGFwc2U+CiAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Iltbc2hvdWxkU2hvd092ZXJhbGxUaHJlc2hvbGRlcl8oc2VsZWN0ZWRCcmVha2Rvd25GZWF0dXJlKV1dIj4KICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBlcmYtdGFibGUtZW50cnkiPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmLXRhYmxlLXJvdy1leHBhbmRlZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGVyZi10YWJsZS1hcnJvdyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24gaWNvbj0iYXJyb3ctZHJvcC1kb3duIiBvbi10YXA9InRvZ2dsZVBlcmZSb3ciIGRpc2FibGVkPjwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGVyZi10YWJsZS12YWwgcGVyZi10YWJsZS10ZXh0LWVudHJ5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFsbCBkYXRhcG9pbnRzCiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGVyZi10YWJsZS1jb3VudCBwZXJmLXRhYmxlLW51bS1lbnRyeSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbW2dldE11bHRpQ2xhc3NGZWF0dXJlVmFsdWVDb3VudChpbmZlcmVuY2VTdGF0c18pXV0KICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzJD0iW1tnZXRQZXJmVGFibGVNb2RlbENsYXNzKG51bU1vZGVscyldXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJ7e292ZXJhbGxUaHJlc2hvbGRzfX0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmLXRhYmxlLXRleHQtZW50cnkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtbZ2V0TW9kZWxOYW1lXyhpbmRleCldXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGVyZi10YWJsZS1hY2MiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tpbmZlcmVuY2VTdGF0c19dXSIgYXM9ImluZmVyZW5jZVN0YXQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmLXRhYmxlLXRleHQtZW50cnkgcGVyZi10YWJsZS1udW0tZW50cnkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtbZ2V0TXVsdGlDbGFzc0FjY3VyYWN5TW9kZWxJbmRleChpbmZlcmVuY2VTdGF0c18sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXgpXV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGVyZi10YWJsZS1lbnRyeS1leHBhbmRlZCBmbGV4LXJvdy1yZXZlcnNlIHNjcm9sbC14Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW3Nob3VsZFNob3dPdmVyYWxsUHJDaGFydF8oc2VsZWN0ZWRMYWJlbEZlYXR1cmUsIHNlbGVjdGVkQnJlYWtkb3duRmVhdHVyZSwgaW5mZXJlbmNlcyldXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29uZi1tYXRyaXgtaG9sZGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbmYtdGV4dCI+Q29uZnVzaW9uIG1hdHJpeDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tpbmZlcmVuY2VTdGF0c19dXSIgYXM9ImluZmVyZW5jZVN0YXQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGYtY29uZnVzaW9uLW1hdHJpeCBjb3VudHM9IltbZ2V0TXVsdGlDbGFzc0NvbmZNYXRyaXgoaW5mZXJlbmNlU3RhdHNfLCBpbmRleCldXSIgbGFiZWw9IltbZ2V0Q29uZnVzaW9uTWF0cml4TGFiZWwoaW5kZXgsIG51bU1vZGVscyldXSIgYmFja2dyb3VuZD0iW1tnZXRDb25mdXNpb25NYXRyaXhDb2xvcihpbmRleCldXSIgYWxsLWl0ZW1zPSJbW2FsbENvbmZNYXRyaXhMYWJlbHNdXSIgY2xhc3M9ImNvbmYtbWF0cml4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90Zi1jb25mdXNpb24tbWF0cml4PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tpc1JlZ3Jlc3Npb25fKG1vZGVsVHlwZSldXSIgcmVzdGFtcD4KICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGVyZi10YWJsZS10aXRsZS1yb3ciPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXgiPgogICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGVyZi10YWJsZS10aXRsZSI+CiAgICAgICAgICAgICAgICAgICAgICAgIFtbZ2V0Tm9UaHJlc2hvbGRQZXJmVGFibGVUaXRsZShzZWxlY3RlZEJyZWFrZG93bkZlYXR1cmUsCiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkU2Vjb25kQnJlYWtkb3duRmVhdHVyZSwKICAgICAgICAgICAgICAgICAgICAgICAgZmVhdHVyZVZhbHVlVGhyZXNob2xkcyldXQogICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24gaWNvbj0iaW5mby1vdXRsaW5lIiBjbGFzcz0iaW5mby1pY29uIHBlcmZvcm1hbmNlLWluZm8taWNvbiBuby1wYWRkaW5nIiBvbi10YXA9Im9wZW5EaWFsb2ciPgogICAgICAgICAgICAgICAgICAgICAgPC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgIDxwYXBlci1kaWFsb2cgY2xhc3M9ImRpYWxvZy10ZXh0IiBob3Jpem9udGFsLWFsaWduPSJhdXRvIiB2ZXJ0aWNhbC1hbGlnbj0iYXV0byI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRpYWxvZy10aXRsZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgUmVncmVzc2lvbiBQZXJmb3JtYW5jZSBUYWJsZQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICBTZXQgdGhlIGdyb3VuZCB0cnV0aCBmZWF0dXJlIHRvIGV4cGxvcmUgbW9kZWwKICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJmb3JtYW5jZS4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgU2xpY2UgdGhlIGRhdGFzZXQgYW5kIGV4cGxvcmUgbW9kZWwgcGVyZm9ybWFuY2UgYnkKICAgICAgICAgICAgICAgICAgICAgICAgICBzbGljZS4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLWRpYWxvZz4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8cGFwZXItZHJvcGRvd24tbWVudSBsYWJlbD0iU29ydCBieSIgY2xhc3M9InRocmVzaG9sZC1kcm9wZG93biBwZXJmLXRhYmxlLXNvcnQtbWVudSI+CiAgICAgICAgICAgICAgICAgICAgICA8cGFwZXItbGlzdGJveCBzbG90PSJkcm9wZG93bi1jb250ZW50IiBzZWxlY3RlZD0ie3tzZWxlY3RlZEZlYXR1cmVTb3J0fX0iIGF0dHItZm9yLXNlbGVjdGVkPSJuYW1lIj4KICAgICAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tnZXRGZWF0dXJlU29ydEJ5KG1vZGVsVHlwZSwgbXVsdGlDbGFzcyldXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcGVyLWl0ZW0gbmFtZT0iW1tpdGVtXV0iPltbaXRlbV1dPC9wYXBlci1pdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgICAgICAgICAgPC9wYXBlci1saXN0Ym94PgogICAgICAgICAgICAgICAgICAgIDwvcGFwZXItZHJvcGRvd24tbWVudT4KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBlcmYtdGFibGUtaGVhZGVyIj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmLXRhYmxlLWFycm93Ij48L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmLXRhYmxlLXZhbCI+RmVhdHVyZSBWYWx1ZTwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBlcmYtdGFibGUtY291bnQiPkNvdW50PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGVyZi10YWJsZS1lcnJvciI+TWVhbiBlcnJvcjwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBlcmYtdGFibGUtZXJyb3IiPk1lZGlhbiBlcnJvcjwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBlcmYtdGFibGUtZXJyb3IiPk1lYW4gYWJzb2x1dGUgZXJyb3I8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmLXRhYmxlLWVycm9yIj5NZWRpYW4gYWJzb2x1dGUgZXJyb3I8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmLXRhYmxlLXNxLWVycm9yIj5NZWFuIHNxdWFyZWQgZXJyb3I8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmLXRhYmxlLXNxLWVycm9yIj5NZWRpYW4gc3F1YXJlZCBlcnJvcjwvZGl2PgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGVyZi10YWJsZS1lbnRyaWVzLWhvbGRlciI+CiAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tyZWdyZXNzaW9uRW50cmllc19dXSI+CiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmLXRhYmxlLWVudHJ5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGVyZi10YWJsZS1yb3ciPgogICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBlcmYtdGFibGUtYXJyb3ciPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBlcmYtdGFibGUtdmFsIHBlcmYtdGFibGUtdGV4dC1lbnRyeSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbW2l0ZW0ubmFtZV1dCiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGVyZi10YWJsZS1jb3VudCBwZXJmLXRhYmxlLW51bS1lbnRyeSBwZXJmLXRhYmxlLXRleHQtZW50cnkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgW1tpdGVtLmNvdW50XV0KICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmLXRhYmxlLWVycm9yIHBlcmYtdGFibGUtbnVtLWVudHJ5IHBlcmYtdGFibGUtdGV4dC1lbnRyeSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbW2Zvcm1hdEVycm9yKGl0ZW0ubWVhbkVycm9yKV1dCiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGVyZi10YWJsZS1lcnJvciBwZXJmLXRhYmxlLW51bS1lbnRyeSBwZXJmLXRhYmxlLXRleHQtZW50cnkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgW1tmb3JtYXRFcnJvcihpdGVtLm1lZGlhbkVycm9yKV1dCiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGVyZi10YWJsZS1lcnJvciBwZXJmLXRhYmxlLW51bS1lbnRyeSBwZXJmLXRhYmxlLXRleHQtZW50cnkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgW1tmb3JtYXRFcnJvcihpdGVtLm1lYW5BYnNFcnJvcildXQogICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBlcmYtdGFibGUtc3EtZXJyb3IgcGVyZi10YWJsZS1udW0tZW50cnkgcGVyZi10YWJsZS10ZXh0LWVudHJ5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtbZm9ybWF0RXJyb3IoaXRlbS5tZWRpYW5BYnNFcnJvcildXQogICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBlcmYtdGFibGUtZXJyb3IgcGVyZi10YWJsZS1udW0tZW50cnkgcGVyZi10YWJsZS10ZXh0LWVudHJ5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtbZm9ybWF0RXJyb3IoaXRlbS5tZWFuU3F1YXJlZEVycm9yKV1dCiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGVyZi10YWJsZS1zcS1lcnJvciBwZXJmLXRhYmxlLW51bS1lbnRyeSBwZXJmLXRhYmxlLXRleHQtZW50cnkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgW1tmb3JtYXRFcnJvcihpdGVtLm1lZGlhblNxdWFyZWRFcnJvcildXQogICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InN0YXRzLXRhYiI+CiAgICAgICAgICAgICAgPGZhY2V0cy1vdmVydmlldyBpZD0ib3ZlcnZpZXciIHNlYXJjaC1zdHJpbmc9Int7ZmVhdHVyZVNlYXJjaFZhbHVlfX0iPjwvZmFjZXRzLW92ZXJ2aWV3PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvaXJvbi1wYWdlcz4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgIDxzdHlsZSBpbmNsdWRlPSJkYXNoYm9hcmQtc3R5bGUiPjwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KCiAgPHNjcmlwdD4vL35+V0VCUEFUSH5+L3RmLWludGVyYWN0aXZlLWluZmVyZW5jZS1kYXNoYm9hcmQvdGYtaW50ZXJhY3RpdmUtaW5mZXJlbmNlLWRhc2hib2FyZC5odG1sLmpzCmZ1bmN0aW9uIHJxKGEpe2EmJmEucGFyZW50RWxlbWVudCYmYS5wYXJlbnRFbGVtZW50LnJlbW92ZUNoaWxkKGEpfQooZnVuY3Rpb24oKXtQb2x5bWVyKHtpczoidGYtaW50ZXJhY3RpdmUtaW5mZXJlbmNlLWRhc2hib2FyZCIscHJvcGVydGllczp7X3JlcXVlc3RNYW5hZ2VyOnt0eXBlOk9iamVjdCx2YWx1ZTooKT0+bmV3IFBrLlJlcXVlc3RNYW5hZ2VyfSxfY2FuY2VsbGVyOnt0eXBlOk9iamVjdCx2YWx1ZTooKT0+bmV3IFBrLkNhbmNlbGxlcn0sZXhhbXBsZXNQYXRoOnt0eXBlOlN0cmluZ30sbW9kZWxOYW1lOnt0eXBlOlN0cmluZyxvYnNlcnZlcjoibW9kZWxOYW1lQ2hhbmdlZF8ifSxwYXJzZWRNb2RlbE5hbWVzOnt0eXBlOlN0cmluZ30saW5mZXJlbmNlQWRkcmVzczp7dHlwZTpTdHJpbmd9LG1vZGVsVHlwZTp7dHlwZTpTdHJpbmd9LG1vZGVsU2lnbmF0dXJlOnt0eXBlOlN0cmluZ30sbW9kZWxWZXJzaW9uOnt0eXBlOlN0cmluZ30sbWF4RXhhbXBsZXM6e3R5cGU6TnVtYmVyfSxsYWJlbFZvY2FiUGF0aDp7dHlwZTpTdHJpbmd9LG1heEluZmVyZW5jZUVudHJpZXNQZXJSdW46TnVtYmVyLGluZmVyZW5jZXM6e3R5cGU6T2JqZWN0LApvYnNlcnZlcjoibmV3SW5mZXJlbmNlc18iLHZhbHVlOigpPT4oe30pfSxhdHRyaWJ1dGlvbnM6e3R5cGU6T2JqZWN0LG9ic2VydmVyOiJuZXdBdHRyaWJ1dGlvbnNfIn0sZXhhbXBsZXNBbmRJbmZlcmVuY2VzOnt0eXBlOkFycmF5LHZhbHVlOigpPT5bXSxvYnNlcnZlcjoiY29tcHV0ZVNlbGVjdGVkRXhhbXBsZUFuZEluZmVyZW5jZSJ9LHNlbGVjdGVkRXhhbXBsZUFuZEluZmVyZW5jZTp7dHlwZTpPYmplY3R9LGNvdW50ZXJmYWN0dWFsRXhhbXBsZUFuZEluZmVyZW5jZTp7dHlwZTpPYmplY3R9LHZpc2RhdGE6e3R5cGU6QXJyYXksdmFsdWU6KCk9PltdfSxzZWxlY3RlZDp7dHlwZTpBcnJheSx2YWx1ZTooKT0+W10sb2JzZXJ2ZXI6ImNvbXB1dGVTZWxlY3RlZEV4YW1wbGVBbmRJbmZlcmVuY2UifSxjb21wYXJlZEluZGljZXM6e3R5cGU6QXJyYXksdmFsdWU6KCk9PltdfSxsYWJlbFZvY2FiOnt0eXBlOkFycmF5LHZhbHVlOigpPT5bXX0sdXBkYXRlZEV4YW1wbGU6e3R5cGU6Qm9vbGVhbiwKdmFsdWU6ITF9LGltYWdlRmVhdHVyZU5hbWU6e3R5cGU6U3RyaW5nLHZhbHVlOiJpbWFnZS9lbmNvZGVkIixyZWFkb25seTohMH0sc3RhdHM6T2JqZWN0LHNlbGVjdGVkQnJlYWtkb3duRmVhdHVyZTp7dHlwZTpTdHJpbmcsdmFsdWU6IiIsb2JzZXJ2ZXI6ImJyZWFrZG93bkZlYXR1cmVTZWxlY3RlZF8ifSxzZWxlY3RlZFNlY29uZEJyZWFrZG93bkZlYXR1cmU6e3R5cGU6U3RyaW5nLHZhbHVlOiIiLG9ic2VydmVyOiJicmVha2Rvd25GZWF0dXJlU2VsZWN0ZWRfIn0sc2VsZWN0ZWRMYWJlbEZlYXR1cmU6e3R5cGU6U3RyaW5nLHZhbHVlOiIiLG9ic2VydmVyOiJsYWJlbEZlYXR1cmVTZWxlY3RlZF8ifSxuZWFyZXN0Q291bnRlcmZhY3R1YWxNb2RlbEluZGV4Ont0eXBlOk51bWJlcix2YWx1ZTowfSxpbmZlcmVuY2VTdGF0c186e3R5cGU6QXJyYXksdmFsdWU6KCk9PltdfSxmZWF0dXJlVmFsdWVUaHJlc2hvbGRzOnt0eXBlOkFycmF5LHZhbHVlOigpPT5bXX0sZmVhdHVyZVZhbHVlVGhyZXNob2xkc01hcDpPYmplY3QsCmRlZmF1bHRJbmZlcmVuY2VMYWJlbDp7dHlwZTpOdW1iZXIsdmFsdWU6MCxvYnNlcnZlcjoicmVmcmVzaEluZmVyZW5jZXNfIn0sb3ZlcmFsbFRocmVzaG9sZHM6e3R5cGU6QXJyYXksdmFsdWU6KCk9PltdfSxzaWRlVGFiU2VsZWN0ZWQ6e3R5cGU6TnVtYmVyLHZhbHVlOjAsb2JzZXJ2ZXI6InNpZGVUYWJTZWxlY3RlZENoYW5nZWRfIn0sbG9jYWw6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxvYnNlcnZlcjoibG9jYWxDaGFuZ2VkXyJ9LGxvY2FsQXRsYXNVcmw6U3RyaW5nLHBhcnRpYWxEZXBQbG90RWxpZ2libGVGZWF0dXJlczp7dHlwZTpBcnJheSx2YWx1ZTooKT0+W10sb2JzZXJ2ZXI6InBhcnRpYWxEZXBQbG90RWxpZ2libGVGZWF0dXJlc1NldCJ9LHBhcnRpYWxEZXBQbG90UGVuZGluZ0ZlYXR1cmVzOnt0eXBlOkFycmF5LHZhbHVlOigpPT5bXX0sZXhhbXBsZURpc3BsYXlNb2RlOnt0eXBlOlN0cmluZyx2YWx1ZToic3RhY2tlZCJ9LGZlYXR1cmVTZWFyY2hWYWx1ZTpTdHJpbmcsaW5jb3JyZWN0UHJlZENvc3RSYXRpbzp7dHlwZTpOdW1iZXIsCnZhbHVlOjEsb2JzZXJ2ZXI6ImNvc3RSYXRpb0NoYW5nZWRfIn0sbXVsdGlDbGFzczp7dHlwZTpCb29sZWFufSxzZXF1ZW5jZUV4YW1wbGVzOnt0eXBlOkJvb2xlYW59LHNhbXBsaW5nT2Rkczp7dHlwZTpOdW1iZXJ9LHVzZVByZWRpY3RBcGk6e3R5cGU6Qm9vbGVhbn0scHJlZGljdE91dHB1dFRlbnNvcjp7dHlwZTpTdHJpbmd9LHByZWRpY3RJbnB1dFRlbnNvcjp7dHlwZTpTdHJpbmd9LGF4aXNQcmVjaXNpb246e3R5cGU6TnVtYmVyLHZhbHVlOjJ9LGRpc3RhbmNlU3RhdHNfOnt0eXBlOk9iamVjdH0sZmFjZXREaXN0U3dpdGNoOnt0eXBlOlN0cmluZyx2YWx1ZToiTDEifSxmYWNldERpc3RGZWF0dXJlTmFtZTp7dHlwZTpTdHJpbmd9LGZhY2V0RGlzdEZlYXR1cmVOYW1lczp7dHlwZTpBcnJheSx2YWx1ZTooKT0+W119LGZhY2V0RGlzdFNldHRpbmc6e3R5cGU6U3RyaW5nLHZhbHVlOiJjb2xvckJ5In0sZXhhbXBsZVN0YXR1c1N0cjp7dHlwZTpTdHJpbmcsdmFsdWU6Ik5vIGRhdGFwb2ludHMgbG9hZGVkIHlldCJ9LApzZWxlY3RlZEV4YW1wbGVOdW06e3R5cGU6TnVtYmVyLHZhbHVlOiIiLG9ic2VydmVyOiJzZWxlY3RlZEV4YW1wbGVJbnB1dENoYW5nZWRfIn0sc2VsZWN0ZWRFeGFtcGxlTWF4Ok51bWJlcixvcGVuZWRDb250ZXh0VG9vbHM6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMH0sb3BlbmVkUGVyZm9ybWFuY2U6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMH0sb3BlbmVkVHJ1ZUxhYmVsOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITB9LG9wZW5lZEV4cGxvcmVyOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITB9LG9wZW5lZEluZmVyZW5jZVJlc3VsdHM6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMH0scmVncmVzc2lvbkVudHJpZXNfOnt0eXBlOkFycmF5fSxuZWFyZXN0Q291bnRlcmZhY3R1YWxEaXN0Ont0eXBlOlN0cmluZyx2YWx1ZToiTDEifSx2aXNNb2RlOnt0eXBlOlN0cmluZyx2YWx1ZToiZGl2ZSIsb2JzZXJ2ZXI6InZpc01vZGVDaGFuZ2VkXyJ9LG9wdGltaXphdGlvblNlbGVjdGVkOnt0eXBlOlN0cmluZyx2YWx1ZToiY3VzdG9tIiwKb2JzZXJ2ZXI6Im9wdGltaXphdGlvblNlbGVjdGVkQ2hhbmdlZF8ifSxjb21wYXJlVGl0bGU6U3RyaW5nLGF0dHJpYnV0aW9uOnt0eXBlOk9iamVjdCx2YWx1ZTooKT0+KHt9KX0sZ2xvYmFsUGRQbG90czp7dHlwZTpCb29sZWFuLHZhbHVlOiEwfSxudW1Nb2RlbHM6e3R5cGU6TnVtYmVyLHJlYWRPbmx5OiEwfSxzaG93TmVhcmVzdENvdW50ZXJmYWN0dWFsOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LHNlbGVjdGVkRmVhdHVyZVNvcnQ6e3R5cGU6U3RyaW5nLHZhbHVlOiJDb3VudCIsb2JzZXJ2ZXI6InNlbGVjdGVkRmVhdHVyZVNvcnRDaGFuZ2VkXyJ9LHBkUGxvdENvbG9yczp7dHlwZTpBcnJheSx2YWx1ZTooKT0+W2QzLmNvbG9yKCJyZ2IoMzEsIDExOSwgMTgwKSIpLGQzLmNvbG9yKCJyZ2IoMjU1LCAxMjcsIDE0KSIpLGQzLmNvbG9yKCJyZ2IoNDQsIDE2MCwgNDQpIiksZDMuY29sb3IoInJnYigyMTQsIDM5LCA0MCkiKSxkMy5jb2xvcigicmdiKDE0OCwgMTAzLCAxODkpIiksZDMuY29sb3IoInJnYigxNDAsIDg2LCA3NSkiKSwKZDMuY29sb3IoInJnYigyMjcsIDExOSwgMTk0KSIpLGQzLmNvbG9yKCJyZ2IoMTI3LCAxMjcsIDEyNykiKSxkMy5jb2xvcigicmdiKDE4OCwgMTg5LCAzNCkiKSxkMy5jb2xvcigicmdiKDIzLCAxOTAsIDIwNykiKV19LHBkUGxvdFRyYW5zcGFyZW50Q29sb3JzOnt0eXBlOkFycmF5LHZhbHVlOigpPT5bZDMuY29sb3IoInJnYmEoMzEsIDExOSwgMTgwLCAwLjMpIiksZDMuY29sb3IoInJnYmEoMjU1LCAxMjcsIDE0LCAwLjMpIiksZDMuY29sb3IoInJnYmEoNDQsIDE2MCwgNDQsIDAuMykiKSxkMy5jb2xvcigicmdiYSgyMTQsIDM5LCA0MCwgMC4zKSIpLGQzLmNvbG9yKCJyZ2JhKDE0OCwgMTAzLCAxODksIDAuMykiKSxkMy5jb2xvcigicmdiYSgxNDAsIDg2LCA3NSwgMC4zKSIpLGQzLmNvbG9yKCJyZ2JhKDIyNywgMTE5LCAxOTQsIDAuMykiKSxkMy5jb2xvcigicmdiYSgxMjcsIDEyNywgMTI3LCAwLjMpIiksZDMuY29sb3IoInJnYmEoMTg4LCAxODksIDM0LCAwLjMpIiksZDMuY29sb3IoInJnYmEoMjMsIDE5MCwgMjA3LCAwLjMpIildfSwKcm9jQ3VydmVDb2xvcnM6e3R5cGU6QXJyYXksdmFsdWU6KCk9PltkMy5jb2xvcigicmdiKDE4LCAxODEsIDIwNikiKSxkMy5jb2xvcigicmdiKDI1MCwgMTIwLCAyMykiKV19LHJvY0N1cnZlTGluZUNvbG9yczp7dHlwZTpBcnJheSx2YWx1ZTooKT0+W2QzLmNvbG9yKCJyZ2JhKDE4LCAxODEsIDIwNiwgMC42KSIpLGQzLmNvbG9yKCJyZ2JhKDI1MCwgMTIwLCAyMywgMC42KSIpXX0sY29uZk1hdHJpeENvbG9yczp7dHlwZTpBcnJheSx2YWx1ZTooKT0+W2QzLmNvbG9yKCJyZ2IoMTgsIDE4MSwgMjA2KSIpLGQzLmNvbG9yKCJyZ2IoMjUwLCAxMjAsIDIzKSIpXX0sYWxsQ29uZk1hdHJpeExhYmVsczp7dHlwZTpBcnJheSx2YWx1ZTooKT0+W119LHNwaW5uZXJIaWRkZW5fOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITB9fSxvYnNlcnZlcnM6WyJzZXRGYWNldERpc3RGZWF0dXJlTmFtZShmYWNldERpc3RTd2l0Y2gsIHNlbGVjdGVkKSIsIm5lYXJlc3RDb3VudGVyZmFjdHVhbFN0YXR1c0NoYW5nZWRfKHNob3dOZWFyZXN0Q291bnRlcmZhY3R1YWwsIG5lYXJlc3RDb3VudGVyZmFjdHVhbE1vZGVsSW5kZXgsIG5lYXJlc3RDb3VudGVyZmFjdHVhbERpc3QpIl0sCnJlbG9hZDpmdW5jdGlvbigpe30sb3BlbkRpYWxvZzpmdW5jdGlvbihhKXthLnN0b3BQcm9wYWdhdGlvbigpO2EudGFyZ2V0LnBhcmVudEVsZW1lbnQucGFyZW50RWxlbWVudC5xdWVyeVNlbGVjdG9yKCJwYXBlci1kaWFsb2ciKS5vcGVuKCl9LHJlYWR5OmZ1bmN0aW9uKCl7Y29uc3QgYT1kMy5zZWxlY3QodGhpcy4kLnNpZGUpLGM9ZDMuc2VsZWN0KHRoaXMuJC5jZW50ZXIpLGQ9ZDMuc2VsZWN0KHRoaXMuJC5yZXNpemVyKSxmPXRoaXMsZz1kMy5kcmFnKCkub24oImRyYWciLCgpPT57bGV0IGw9ZDMubW91c2UodGhpcy5wYXJlbnROb2RlLnBhcmVudE5vZGUpWzBdL3RoaXMucGFyZW50Tm9kZS5wYXJlbnROb2RlLm9mZnNldFdpZHRoKjEwMDtsPU1hdGgubWF4KGwsMjApO2Muc3R5bGUoIndpZHRoIiwxMDAtbCsiJSIpO2Euc3R5bGUoIndpZHRoIixsKyIlIik7Zi4kLmRpdmUuJC52aXMuX3VwZGF0ZUdyaWRGYWNldGluZygpO2YuJC5kaXZlLiQudmlzLl9vbklyb25SZXNpemUoKX0pOwpkLmNhbGwoZyl9LGF0dGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdChQay5nZXRSb3V0ZXIoKS5wbHVnaW5zTGlzdGluZygpKS50aGVuKGE9Pnsid2hhdGlmImluIGE/dGhpcy4kLmluaXRpYWxEaWFsb2cuY2xvc2VEaWFsb2coKToodGhpcy4kLmluZmVyZW5jZXNldHRpbmdzLmNsb3NlKCksdGhpcy4kLmluaXRpYWxEaWFsb2cub3Blbk5vVGVuc29yRmxvd0RpYWxvZygpKX0pfSxzZXR0aW5nc0NsaWNrZWRfOmZ1bmN0aW9uKCl7dGhpcy4kLmluZmVyZW5jZXNldHRpbmdzLnRvZ2dsZSgpfSxsb2NhbENoYW5nZWRfOmZ1bmN0aW9uKCl7dGhpcy5sb2NhbCYmdGhpcy5jbG9zZVNldHRpbmdzXygpfSxtb2RlbE5hbWVDaGFuZ2VkXzpmdW5jdGlvbigpe3RoaXMucGFyc2VkTW9kZWxOYW1lcz10aGlzLm1vZGVsTmFtZS5zcGxpdCgiLCIpLm1hcChhPT5hLnRyaW0oKSk7Zm9yKGxldCBhPTA7YTx0aGlzLnBhcnNlZE1vZGVsTmFtZXMubGVuZ3RoO2ErKyl7Y29uc3QgYz0KdGhpcy5wYXJzZWRNb2RlbE5hbWVzW2FdO2ZvcihsZXQgZD1hKzE7ZDx0aGlzLnBhcnNlZE1vZGVsTmFtZXMubGVuZ3RoO2QrKyl0aGlzLnBhcnNlZE1vZGVsTmFtZXNbZF09PWMmJih0aGlzLnBhcnNlZE1vZGVsTmFtZXNbYV09YysiICIrKGErMSksdGhpcy5wYXJzZWRNb2RlbE5hbWVzW2RdPWMrIiAiKyhkKzEpKX19LGNsb3NlU2V0dGluZ3NfOmZ1bmN0aW9uKCl7dGhpcy4kLmluZmVyZW5jZXNldHRpbmdzLmNsb3NlKCl9LHNob3dEaXN0YW5jZUNsaWNrZWRfOmZ1bmN0aW9uKCl7dGhpcy4kLmRpc3RhbmNlZGlhbG9nLnRvZ2dsZSgpfSxhZGREaXN0YW5jZU1ldHJpYzpmdW5jdGlvbigpe3RoaXMuZmFjZXREaXN0RmVhdHVyZU5hbWVzLnB1c2godGhpcy5mYWNldERpc3RGZWF0dXJlTmFtZSk7Y29uc3QgYT10aGlzLnNlbGVjdGVkWzBdLGM9IkwyIj09dGhpcy5mYWNldERpc3RTd2l0Y2g7Zm9yKGxldCBkPTA7ZDx0aGlzLnZpc2RhdGEubGVuZ3RoO2QrKyl7bGV0IGY9dGhpcy5nZXREaXN0KHRoaXMudmlzZGF0YVthXSwKdGhpcy52aXNkYXRhW2RdLGMpO3RoaXMudmlzZGF0YVtkXVt0aGlzLmZhY2V0RGlzdEZlYXR1cmVOYW1lXT1mfXRoaXMucmVmcmVzaERpdmVfKCk7ImNvbG9yQnkiPT10aGlzLmZhY2V0RGlzdFNldHRpbmc/dGhpcy4kLmRpdmUuY29sb3JCeT10aGlzLmZhY2V0RGlzdEZlYXR1cmVOYW1lOiJ2ZXJ0aWNhbEZhY2V0Ij09dGhpcy5mYWNldERpc3RTZXR0aW5nP3RoaXMuJC5kaXZlLnZlcnRpY2FsRmFjZXQ9dGhpcy5mYWNldERpc3RGZWF0dXJlTmFtZToiaG9yaXpvbnRhbEZhY2V0Ij09dGhpcy5mYWNldERpc3RTZXR0aW5nP3RoaXMuJC5kaXZlLmhvcml6b250YWxGYWNldD10aGlzLmZhY2V0RGlzdEZlYXR1cmVOYW1lOiJ2ZXJ0aWNhbFBvc2l0aW9uIj09dGhpcy5mYWNldERpc3RTZXR0aW5nP3RoaXMuJC5kaXZlLnZlcnRpY2FsUG9zaXRpb249dGhpcy5mYWNldERpc3RGZWF0dXJlTmFtZToiaG9yaXpvbnRhbFBvc2l0aW9uIj09dGhpcy5mYWNldERpc3RTZXR0aW5nJiYodGhpcy4kLmRpdmUuaG9yaXpvbnRhbFBvc2l0aW9uPQp0aGlzLmZhY2V0RGlzdEZlYXR1cmVOYW1lKX0sc2V0RmFjZXREaXN0RmVhdHVyZU5hbWU6ZnVuY3Rpb24oYSxjKXt0aGlzLmZhY2V0RGlzdEZlYXR1cmVOYW1lPSIgIithKyIgZGlzdGFuY2UgdG8gZGF0YXBvaW50ICIrY1swXX0sbmVhcmVzdENvdW50ZXJmYWN0dWFsU3RhdHVzQ2hhbmdlZF86ZnVuY3Rpb24oYSl7YT90aGlzLmZpbmRDbG9zZXN0Q291bnRlcmZhY3R1YWxfKCk6KHRoaXMuY29tcGFyZWRJbmRpY2VzPVtdLHRoaXMuY291bnRlcmZhY3R1YWxFeGFtcGxlQW5kSW5mZXJlbmNlPW51bGwsYT10aGlzLnNlbGVjdGVkRXhhbXBsZUFuZEluZmVyZW5jZSx0aGlzLnNlbGVjdGVkRXhhbXBsZUFuZEluZmVyZW5jZT1udWxsLHRoaXMuc2VsZWN0ZWRFeGFtcGxlQW5kSW5mZXJlbmNlPWEpfSxmaW5kQ2xvc2VzdENvdW50ZXJmYWN0dWFsXzpmdW5jdGlvbigpe2NvbnN0IGE9dGhpcy5zZWxlY3RlZFswXSxjPXRoaXMuc3RyV2l0aE1vZGVsTmFtZV8oIiBJbmZlcmVuY2UgdmFsdWUiLHRoaXMubmVhcmVzdENvdW50ZXJmYWN0dWFsTW9kZWxJbmRleCk7CmxldCBkPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxmPS0xO2ZvcihsZXQgZz0wO2c8dGhpcy52aXNkYXRhLmxlbmd0aDtnKyspe2lmKHRoaXMudmlzZGF0YVthXVtjXT09dGhpcy52aXNkYXRhW2ddW2NdKWNvbnRpbnVlO2xldCBsPXRoaXMuZ2V0RGlzdCh0aGlzLnZpc2RhdGFbYV0sdGhpcy52aXNkYXRhW2ddLCJMMiI9PXRoaXMubmVhcmVzdENvdW50ZXJmYWN0dWFsRGlzdCk7bDxkJiYoZD1sLGY9Zyl9LTEhPWYmJih0aGlzLmNvbXBhcmVkSW5kaWNlcz1bZl0sdGhpcy5jb3VudGVyZmFjdHVhbEV4YW1wbGVBbmRJbmZlcmVuY2U9dGhpcy5leGFtcGxlc0FuZEluZmVyZW5jZXNbZl0sdGhpcy5jb21wYXJlVGl0bGU9IkNvdW50ZXJmYWN0dWFsIHZhbHVlKHMpIil9LGdldERpc3Q6ZnVuY3Rpb24oYSxjLGQpe2xldCBmPTA7Y29uc3QgZz1bLi4ubmV3IFNldChbLi4uT2JqZWN0LmtleXMoYSksLi4uT2JqZWN0LmtleXMoYyldKV07Zm9yKGxldCBrPTA7azxnLmxlbmd0aDtrKyspe3ZhciBsPQpnW2tdO2lmKHRoaXMuaXNDb21wdXRlZEtleVN0cl8obCl8fGw9PXRoaXMuc2VsZWN0ZWRMYWJlbEZlYXR1cmV8fHRoaXMuc3RhdHNbbF0udW5pcXVlQ291bnQ9PXRoaXMuZXhhbXBsZXNBbmRJbmZlcmVuY2VzLmxlbmd0aCljb250aW51ZTtsZXQgbT1hW2xdLHA9Y1tsXTtBcnJheS5pc0FycmF5KG0pfHwobT1bbV0pO0FycmF5LmlzQXJyYXkocCl8fChwPVtwXSk7Y29uc3QgcT1NYXRoLm1heChtLmxlbmd0aCxwLmxlbmd0aCk7bGV0IHI9MDtmb3IobGV0IHQ9MDt0PHE7dCsrKXI9bnVsbCE9dGhpcy5kaXN0YW5jZVN0YXRzX1tsXS5zdGREZXY/cit0aGlzLmdldE51bWVyaWNEaXN0KG1bdF0scFt0XSx0aGlzLmRpc3RhbmNlU3RhdHNfW2xdKTpyK3RoaXMuZ2V0Q2F0ZWdvcmljYWxEaXN0KG1bdF0scFt0XSx0aGlzLmRpc3RhbmNlU3RhdHNfW2xdKTtsPXIvcTtkJiYobCo9bCk7Zis9bH1yZXR1cm4gZn0sZ2V0TnVtZXJpY0Rpc3Q6ZnVuY3Rpb24oYSxjLGQpe3JldHVybiBudWxsPT1hfHwKbnVsbD09Yz8xOmQuc3RkRGV2P01hdGguYWJzKChhLWMpL2Quc3RkRGV2KTowfSxnZXRDYXRlZ29yaWNhbERpc3Q6ZnVuY3Rpb24oYSxjLGQpe3JldHVybiBudWxsPT1hfHxudWxsPT1jPzE6YT09Yz8wOmQucHJvYlNhbWVWYWx1ZX0sdmlzTW9kZUNoYW5nZWRfOmZ1bmN0aW9uKGEpeyJkaXZlIj09YT90aGlzLmhpZGVQYXJ0aWFsRGVwZW5kZW5jZVBsb3RzXygpOnRoaXMuc2hvd1BhcnRpYWxEZXBlbmRlbmNlUGxvdHNfKCl9LGhpZGVQYXJ0aWFsRGVwZW5kZW5jZVBsb3RzXzpmdW5jdGlvbigpe3RoaXMuJC5wYXJ0aWFscGxvdGhvbGRlci5zdHlsZS5kaXNwbGF5PSJub25lIn0sc2hvd1BhcnRpYWxEZXBlbmRlbmNlUGxvdHNfOmZ1bmN0aW9uKCl7dGhpcy4kLnBhcnRpYWxwbG90aG9sZGVyLnN0eWxlLmRpc3BsYXk9ImZsZXgiO3JlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+dGhpcy5wb3B1bGF0ZVBkVGFicygpKX0sYXJlVGhlcmVQZFBsb3RGZWF0dXJlc186ZnVuY3Rpb24oYSl7cmV0dXJuIGEmJgowPGEubGVuZ3RofSxzZWxlY3RlZEluZGljZXNDaGFuZ2VkXzpmdW5jdGlvbihhKXt0aGlzLnNlbGVjdGVkPWEuZGV0YWlsLnZhbHVlO3RoaXMuc2V0QXR0cmlidXRpb25zKCk7dGhpcy5zZWxlY3RlZERhdGFVcGRhdGVkXygpO3RoaXMuc2hvd05lYXJlc3RDb3VudGVyZmFjdHVhbCYmMCE9dGhpcy5zZWxlY3RlZC5sZW5ndGg/dGhpcy5maW5kQ2xvc2VzdENvdW50ZXJmYWN0dWFsXygpOnRoaXMuY29tcGFyZWRJbmRpY2VzPVtdfSxzZWxlY3ROZXh0RGF0YXBvaW50XzpmdW5jdGlvbigpe3RoaXMuJC5kaXZlLnNlbGVjdGVkSW5kaWNlcz1bKHRoaXMuc2VsZWN0ZWRbMF0rMSkldGhpcy52aXNkYXRhLmxlbmd0aF19LHNlbGVjdFByZXZEYXRhcG9pbnRfOmZ1bmN0aW9uKCl7dGhpcy4kLmRpdmUuc2VsZWN0ZWRJbmRpY2VzPVsoKHRoaXMuc2VsZWN0ZWRbMF0tMSkldGhpcy52aXNkYXRhLmxlbmd0aCt0aGlzLnZpc2RhdGEubGVuZ3RoKSV0aGlzLnZpc2RhdGEubGVuZ3RoXX0sc2VsZWN0ZWRFeGFtcGxlSW5wdXRDaGFuZ2VkXzpmdW5jdGlvbihhKXtudWxsIT0KYSYmIiIhPWEmJihhPSthLGlzTmFOKGEpfHwwPmF8fGE+PXRoaXMudmlzZGF0YS5sZW5ndGh8fCh0aGlzLiQuZGl2ZS5zZWxlY3RlZEluZGljZXM9W2FdKSl9LHNldEV4YW1wbGVDb2xsYXBzZWRfOmZ1bmN0aW9uKCl7dGhpcy5leGFtcGxlRGlzcGxheU1vZGU9ImdyaWQiO3RoaXMuJCQoIiN2aWV3ZXIiKS5leHBhbmRlZEZlYXR1cmVzPXt9O3RoaXMuJCQoIiN2aWV3ZXIiKS5leHBhbmRBbGxGZWF0dXJlcz0hMTt0aGlzLiQkKCIjdmlld2VyIikucmVmcmVzaEV4YW1wbGVWaWV3ZXIoKX0sc2V0RXhhbXBsZVNob3dfOmZ1bmN0aW9uKCl7dGhpcy5leGFtcGxlRGlzcGxheU1vZGU9ImdyaWQiO3RoaXMuJCQoIiN2aWV3ZXIiKS5leHBhbmRBbGxGZWF0dXJlcz0hMH0sc2V0RXhhbXBsZUV4cGFuZGVkXzpmdW5jdGlvbigpe3RoaXMuZXhhbXBsZURpc3BsYXlNb2RlPSJzdGFja2VkIjt0aGlzLiQkKCIjdmlld2VyIikuZXhwYW5kQWxsRmVhdHVyZXM9ITB9LHN0YXRzQ2hhbmdlZF86ZnVuY3Rpb24oYSl7dGhpcy5zdGF0cz0KYS5kZXRhaWwudmFsdWV9LGlzQmluYXJ5Q2xhc3NpZmljYXRpb25fOmZ1bmN0aW9uKGEsYyl7cmV0dXJuImNsYXNzaWZpY2F0aW9uIj09YSYmIWN9LGlzTXVsdGlDbGFzc186ZnVuY3Rpb24oYSxjKXtyZXR1cm4iY2xhc3NpZmljYXRpb24iPT1hJiZjfSxpc1JlZ3Jlc3Npb25fOmZ1bmN0aW9uKGEpe3JldHVybiJyZWdyZXNzaW9uIj09YX0sc2hvdWxkU2hvd0ZlYXR1cmVEcm9wZG93bl86ZnVuY3Rpb24oYSl7cmV0dXJuIGEmJjA8T2JqZWN0LmtleXMoYSkubGVuZ3RofSxzaG91bGRTaG93U2Vjb25kRmVhdHVyZURyb3Bkb3duXzpmdW5jdGlvbihhKXtyZXR1cm4iIiE9YX0sc2hvdWxkU2hvd0xhYmVsRHJvcGRvd25fOmZ1bmN0aW9uKGEpe3JldHVybiBhJiYwPE9iamVjdC5rZXlzKGEpLmxlbmd0aH0sc2hvdWxkSGlkZUNvdW50ZXJmYWN0dWFsTW9kZWxTZWxlY3Rvcl86ZnVuY3Rpb24oYSl7cmV0dXJuIShhJiYxPGEubGVuZ3RoKX0sc2hvdWxkU2hvd092ZXJhbGxQckNoYXJ0XzpmdW5jdGlvbihhLApjLGQpe3JldHVybiIiIT1hJiYiIj09YyYmbnVsbCE9ZH0sc2hvdWxkU2hvd0ZlYXR1cmVQckNoYXJ0c186ZnVuY3Rpb24oYSxjLGQpe3JldHVybiIiIT1hJiYiIiE9YyYmbnVsbCE9ZH0sc2hvdWxkU2hvd0Nvc3RSYXRpb186ZnVuY3Rpb24oYSxjLGQpe3JldHVybiIiIT1hJiZ0aGlzLmlzQmluYXJ5Q2xhc3NpZmljYXRpb25fKGMsZCl9LGFyZVBhcnRpYWxEZXBlbmRlbmNlUGxvdHNFbmFibGVkXzpmdW5jdGlvbihhLGMsZCl7cmV0dXJuIHRoaXMuaGFzU2VsZWN0ZWQoYSkmJnRoaXMuYXJlRXhhbXBsZXNFZGl0YWJsZV8oYyxkKX0saGFzU2VsZWN0ZWQ6ZnVuY3Rpb24oYSl7cmV0dXJuIG51bGwhPWF9LGdldEZlYXR1cmVMaXN0XzpmdW5jdGlvbihhKXthPU9iamVjdC5rZXlzKGEpLmZpbHRlcihjPT4hdGhpcy5pc0NvbXB1dGVkS2V5U3RyXyhjKSkuc29ydCgpO2EucHVzaCgiIik7cmV0dXJuIGF9LHN0clN0YXJ0c1dpdGhfOmZ1bmN0aW9uKGEsYyl7cmV0dXJuIDA9PWEubGFzdEluZGV4T2YoYywKMCl9LGdldE1vZGVsTmFtZV86ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucGFyc2VkTW9kZWxOYW1lc1thXX0sc3RyV2l0aE1vZGVsTmFtZV86ZnVuY3Rpb24oYSxjKXtyZXR1cm4gMTx0aGlzLm51bU1vZGVscz9hKyIgIit0aGlzLmdldE1vZGVsTmFtZV8oYyk6YX0sdXBkYXRlTnVtYmVyT2ZNb2RlbHM6ZnVuY3Rpb24oKXt0aGlzLl9zZXROdW1Nb2RlbHModGhpcy5tb2RlbE5hbWUuc3BsaXQoIiwiKS5sZW5ndGgpO3RoaXMuc2VsZWN0ZWRTZWNvbmRCcmVha2Rvd25GZWF0dXJlPXRoaXMuc2VsZWN0ZWRCcmVha2Rvd25GZWF0dXJlPXRoaXMuc2VsZWN0ZWRMYWJlbEZlYXR1cmU9IiI7Y29uc3QgYT1bXTtmb3IobGV0IGM9MDtjPHRoaXMubnVtTW9kZWxzO2MrKylhLnB1c2goe3RocmVzaG9sZDouNX0pO3RoaXMuc2V0KCJvdmVyYWxsVGhyZXNob2xkcyIsYSk7dGhpcy5zaG91bGREaXNhYmxlSW5mZXJCdXR0b25fKHRoaXMuZXhhbXBsZXNBbmRJbmZlcmVuY2VzLHRoaXMubW9kZWxOYW1lLAp0aGlzLmluZmVyZW5jZUFkZHJlc3MsdGhpcy51cGRhdGVkRXhhbXBsZSl8fHRoaXMuaW5mZXJDbGlja2VkXygpfSxpc0NvbXB1dGVkS2V5U3RyXzpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5zdHJTdGFydHNXaXRoXyhhLCIgSW5mZXJlbmNlIHZhbHVlIil8fHRoaXMuc3RyU3RhcnRzV2l0aF8oYSwiIEluZmVyZW5jZSBsYWJlbCIpfHx0aGlzLnN0clN0YXJ0c1dpdGhfKGEsIiBJbmZlcmVuY2UgY29ycmVjdCIpfHx0aGlzLnN0clN0YXJ0c1dpdGhfKGEsIiBJbmZlcmVuY2UgZXJyb3IiKXx8dGhpcy5zdHJTdGFydHNXaXRoXyhhLCIgSW5mZXJlbmNlIHNjb3JlIil8fHRoaXMuc3RyU3RhcnRzV2l0aF8oYSwiIEluZmVyZW5jZSBhYnNvbHV0ZSBlcnJvciIpfHx0aGlzLnN0clN0YXJ0c1dpdGhfKGEsIiBJbmZlcmVuY2Ugc3F1YXJlZCBlcnJvciIpfHwiIERhdGFwb2ludCBJRCI9PWF8fC0xIT10aGlzLmZhY2V0RGlzdEZlYXR1cmVOYW1lcy5pbmRleE9mKGEpfSxicmVha2Rvd25GZWF0dXJlU2VsZWN0ZWRfOmZ1bmN0aW9uKCl7dGhpcy5yZXNldE9wdGltaXphdGlvblNlbGVjdGVkXygpOwpjb25zdCBhPXRoaXMuc2VsZWN0ZWRCcmVha2Rvd25GZWF0dXJlOyIiPT1hJiYodGhpcy5zZWxlY3RlZFNlY29uZEJyZWFrZG93bkZlYXR1cmU9IiIpO2NvbnN0IGM9dGhpcy5zZWxlY3RlZFNlY29uZEJyZWFrZG93bkZlYXR1cmUsZD1bXSxmPXt9O2lmKDAhPT1hLmxlbmd0aCl7bGV0IG09dGhpcy5zdGF0c1thXS52YWx1ZUhhc2g7dGhpcy5zdGF0c1thXS50b3RhbENvdW50IT10aGlzLmV4YW1wbGVzQW5kSW5mZXJlbmNlcy5sZW5ndGgmJihtPU9iamVjdC5hc3NpZ24oe30sbSx7dW5kZWZpbmVkOiIifSkpO2xldCBwPXt1bmRlZmluZWQ6IiJ9OzAhPWMubGVuZ3RoJiYocD10aGlzLnN0YXRzW2NdLnZhbHVlSGFzaCx0aGlzLnN0YXRzW2NdLnRvdGFsQ291bnQhPXRoaXMuZXhhbXBsZXNBbmRJbmZlcmVuY2VzLmxlbmd0aCYmKHA9T2JqZWN0LmFzc2lnbih7fSxwLHt1bmRlZmluZWQ6IiJ9KSkpO2Zvcih2YXIgZyBpbiBtKWlmKG0uaGFzT3duUHJvcGVydHkoZykpZm9yKHZhciBsIGluIHApaWYocC5oYXNPd25Qcm9wZXJ0eShsKSl7Y29uc3QgcT0KInVuZGVmaW5lZCI9PWc/dm9pZCAwOnRoaXMuc3RhdHNbYV0udmFsdWVIYXNoW2ddLnZhbHVlLHI9InVuZGVmaW5lZCI9PWw/dm9pZCAwOnRoaXMuc3RhdHNbY10udmFsdWVIYXNoW2xdLnZhbHVlO3ZhciBrPVtdO2ZvcihsZXQgdD0wO3Q8dGhpcy5vdmVyYWxsVGhyZXNob2xkcy5sZW5ndGg7dCsrKWsucHVzaCh7dGhyZXNob2xkOnRoaXMub3ZlcmFsbFRocmVzaG9sZHNbdF0udGhyZXNob2xkfSk7az17dmFsdWU6cSx2YWx1ZTI6cix0aHJlc2hvbGQ6ayxvcGVuZWQ6ITF9O2QucHVzaChrKTtmW3RoaXMuY3JlYXRlQ29tYmluZWRWYWx1ZVN0cmluZ18ocSxyKV09a319dGhpcy5zZXQoImZlYXR1cmVWYWx1ZVRocmVzaG9sZHMiLGQpO3RoaXMuc2V0KCJmZWF0dXJlVmFsdWVUaHJlc2hvbGRzTWFwIixmKTt0aGlzLnJlZnJlc2hJbmZlcmVuY2VzXyghMSl9LGxhYmVsRmVhdHVyZVNlbGVjdGVkXzpmdW5jdGlvbigpe3JlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e3RoaXMudXBkYXRlSW5mZXJlbmNlU3RhdHNfKCEwKTsKdGhpcy5yZWZyZXNoRGl2ZV8oKX0pfSxzaWRlVGFiU2VsZWN0ZWRDaGFuZ2VkXzpmdW5jdGlvbihhKXtpZigxPT1hKXJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e3RoaXMudXBkYXRlSW5mZXJlbmNlU3RhdHNfKCEwKX0pO2Vsc2UgaWYoMj09YSl7YT10aGlzLiQub3ZlcnZpZXcucXVlcnlTZWxlY3RvckFsbCgiZmFjZXRzLW92ZXJ2aWV3LXRhYmxlIik7Zm9yKGxldCBjPTA7YzxhLmxlbmd0aDtjKyspYVtjXS5faGFuZGxlUmVzaXplKCl9fSx1cGRhdGVJbmZlcmVuY2VTdGF0c186ZnVuY3Rpb24oYSl7aWYodGhpcy5pbmZlcmVuY2VTdGF0c18mJnRoaXMudmlzZGF0YSYmIiIhPXRoaXMuc2VsZWN0ZWRMYWJlbEZlYXR1cmUmJjAhPXRoaXMuZXhhbXBsZXNBbmRJbmZlcmVuY2VzLmxlbmd0aCYmbnVsbCE9dGhpcy5leGFtcGxlc0FuZEluZmVyZW5jZXNbMF0uaW5mZXJlbmNlcyYmdGhpcy5leGFtcGxlc0FuZEluZmVyZW5jZXNbMF0uaW5mZXJlbmNlc1swXS5sZW5ndGg9PXRoaXMubnVtTW9kZWxzJiYKKHRoaXMuaW5mZXJlbmNlU3RhdHNfLmxlbmd0aD09dGhpcy5udW1Nb2RlbHN8fGEpKXtpZihhKXt2YXIgYz1bXSxkPVtdO2Zvcih2YXIgZj0wO2Y8dGhpcy5udW1Nb2RlbHM7ZisrKXt2YXIgZz17fTtpZih0aGlzLmlzQmluYXJ5Q2xhc3NpZmljYXRpb25fKHRoaXMubW9kZWxUeXBlLHRoaXMubXVsdGlDbGFzcykpe2cudGhyZXNob2xkcz1bXTtmb3IodmFyIGw9MDsxMDE+bDtsKyspZy50aHJlc2hvbGRzLnB1c2goe1RQOjAsRlA6MCxGTjowLFROOjB9KTtnLmZhY2V0ZWQ9e307Zm9yKGw9MDtsPHRoaXMuZXhhbXBsZXNBbmRJbmZlcmVuY2VzLmxlbmd0aDtsKyspe3ZhciBrPXRoaXMudmlzZGF0YVtsXSxtPW51bGw7aWYoIiIhPXRoaXMuc2VsZWN0ZWRCcmVha2Rvd25GZWF0dXJlKXt2YXIgcD10aGlzLmNyZWF0ZUNvbWJpbmVkVmFsdWVTdHJpbmdfKGtbdGhpcy5zZWxlY3RlZEJyZWFrZG93bkZlYXR1cmVdLGtbdGhpcy5zZWxlY3RlZFNlY29uZEJyZWFrZG93bkZlYXR1cmVdKTttPWcuZmFjZXRlZFtwXTsKaWYoIW0pe2cuZmFjZXRlZFtwXT1bXTtmb3IobT0wOzEwMT5tO20rKylnLmZhY2V0ZWRbcF0ucHVzaCh7VFA6MCxGUDowLEZOOjAsVE46MH0pO209Zy5mYWNldGVkW3BdfX1wPXRoaXMuZ2V0Q2xhc3NpZmljYXRpb25CZXN0Tm9uWmVybyhsLGYpO2Zvcih2YXIgcT0wOzEwMD49cSYmIShxPjEwMCpwLnNjb3JlKTtxKyspK2tbdGhpcy5zZWxlY3RlZExhYmVsRmVhdHVyZV09PStwLmxhYmVsPyhnLnRocmVzaG9sZHNbcV0uVFArPTEsbSYmKG1bcV0uVFArPTEpKTooZy50aHJlc2hvbGRzW3FdLkZQKz0xLG0mJihtW3FdLkZQKz0xKSk7Zm9yKDsxMDA+PXE7cSsrKW51bGw9PWtbdGhpcy5zZWxlY3RlZExhYmVsRmVhdHVyZV18fDA9PStrW3RoaXMuc2VsZWN0ZWRMYWJlbEZlYXR1cmVdPyhnLnRocmVzaG9sZHNbcV0uVE4rPTEsbSYmKG1bcV0uVE4rPTEpKTooZy50aHJlc2hvbGRzW3FdLkZOKz0xLG0mJihtW3FdLkZOKz0xKSl9dGhpcy5hbGxDb25mTWF0cml4TGFiZWxzPVtdO3RoaXMuY2FsY1RocmVzaG9sZFN0YXRzKGcudGhyZXNob2xkcyk7CmZvcih2YXIgciBpbiBnLmZhY2V0ZWQpZy5mYWNldGVkLmhhc093blByb3BlcnR5KHIpJiZ0aGlzLmNhbGNUaHJlc2hvbGRTdGF0cyhnLmZhY2V0ZWRbcl0pfWVsc2UgaWYodGhpcy5pc011bHRpQ2xhc3NfKHRoaXMubW9kZWxUeXBlLHRoaXMubXVsdGlDbGFzcykpe2cucmVzdWx0cz17fTtnLmZhY2V0ZWQ9e307bD1uZXcgU2V0O2ZvcihrPTA7azx0aGlzLmV4YW1wbGVzQW5kSW5mZXJlbmNlcy5sZW5ndGg7aysrKXttPXRoaXMudmlzZGF0YVtrXTtwPW51bGw7IiIhPXRoaXMuc2VsZWN0ZWRCcmVha2Rvd25GZWF0dXJlJiYocT10aGlzLmNyZWF0ZUNvbWJpbmVkVmFsdWVTdHJpbmdfKG1bdGhpcy5zZWxlY3RlZEJyZWFrZG93bkZlYXR1cmVdLG1bdGhpcy5zZWxlY3RlZFNlY29uZEJyZWFrZG93bkZlYXR1cmVdKSxwPWcuZmFjZXRlZFtxXSxwfHwoZy5mYWNldGVkW3FdPXt9LHA9Zy5mYWNldGVkW3FdKSk7dmFyIHQ9Zy5yZXN1bHRzW21bdGhpcy5zZWxlY3RlZExhYmVsRmVhdHVyZV1dOwp0fHwoZy5yZXN1bHRzW21bdGhpcy5zZWxlY3RlZExhYmVsRmVhdHVyZV1dPXt9LHQ9Zy5yZXN1bHRzW21bdGhpcy5zZWxlY3RlZExhYmVsRmVhdHVyZV1dKTtxPXRoaXMuc3RyV2l0aE1vZGVsTmFtZV8oIiBJbmZlcmVuY2UgdmFsdWUiLGYpO2xldCB2PXRbbVtxXV07bC5hZGQoU3RyaW5nKG1bcV0pKTtsLmFkZChTdHJpbmcobVt0aGlzLnNlbGVjdGVkTGFiZWxGZWF0dXJlXSkpO3RbbVtxXV09bnVsbD09dj8xOnRbbVtxXV0rMTtwJiYodD1wW21bdGhpcy5zZWxlY3RlZExhYmVsRmVhdHVyZV1dLHR8fChwW21bdGhpcy5zZWxlY3RlZExhYmVsRmVhdHVyZV1dPXt9LHQ9cFttW3RoaXMuc2VsZWN0ZWRMYWJlbEZlYXR1cmVdXSksdFttW3FdXT1udWxsPT10W21bcV1dPzE6dFttW3FdXSsxKX10aGlzLmFsbENvbmZNYXRyaXhMYWJlbHM9QXJyYXkuZnJvbShsLnZhbHVlcygpKX1lbHNle2cucmVzdWx0cz17ZXJyb3JzOltdfTtnLmZhY2V0ZWQ9e307Zm9yKGw9MDtsPHRoaXMuZXhhbXBsZXNBbmRJbmZlcmVuY2VzLmxlbmd0aDtsKyspbT0KdGhpcy52aXNkYXRhW2xdLGs9bnVsbCwiIiE9dGhpcy5zZWxlY3RlZEJyZWFrZG93bkZlYXR1cmUmJihwPXRoaXMuY3JlYXRlQ29tYmluZWRWYWx1ZVN0cmluZ18obVt0aGlzLnNlbGVjdGVkQnJlYWtkb3duRmVhdHVyZV0sbVt0aGlzLnNlbGVjdGVkU2Vjb25kQnJlYWtkb3duRmVhdHVyZV0pLGs9Zy5mYWNldGVkW3BdLGt8fChnLmZhY2V0ZWRbcF09e2Vycm9yczpbXX0saz1nLmZhY2V0ZWRbcF0pKSxtPW1bdGhpcy5zdHJXaXRoTW9kZWxOYW1lXygiIEluZmVyZW5jZSB2YWx1ZSIsZildLW1bdGhpcy5zZWxlY3RlZExhYmVsRmVhdHVyZV0sZy5yZXN1bHRzLmVycm9ycy5wdXNoKG0pLGsmJmsuZXJyb3JzLnB1c2gobSk7ZC5wdXNoKHRoaXMuZmlsbEluUmVncmVzc2lvblN0YXRzKGcucmVzdWx0cyx0aGlzLmZvcm1hdENoYXJ0S2V5KCJBbGwgZGF0YXBvaW50cyIsZix0aGlzLm51bU1vZGVscykpKTtmb3IobGV0IHYgaW4gZy5mYWNldGVkKWQucHVzaCh0aGlzLmZpbGxJblJlZ3Jlc3Npb25TdGF0cyhnLmZhY2V0ZWRbdl0sCnRoaXMuZm9ybWF0Q2hhcnRLZXkodixmLHRoaXMubnVtTW9kZWxzKSkpfWMucHVzaChnKX1kPXRoaXMuc29ydFJlZ3Jlc3Npb25FbnRyaWVzKGQpO3RoaXMucmVncmVzc2lvbkVudHJpZXNfPVtdO3RoaXMucmVncmVzc2lvbkVudHJpZXNfPWQ7dGhpcy5pbmZlcmVuY2VTdGF0c189Y31jPXRoaXMuZmVhdHVyZVZhbHVlVGhyZXNob2xkczt0aGlzLmZlYXR1cmVWYWx1ZVRocmVzaG9sZHM9W107dGhpcy5mZWF0dXJlVmFsdWVUaHJlc2hvbGRzPXRoaXMuc29ydEZlYXR1cmVWYWx1ZXMoYyk7aWYodGhpcy5pc0JpbmFyeUNsYXNzaWZpY2F0aW9uXyh0aGlzLm1vZGVsVHlwZSx0aGlzLm11bHRpQ2xhc3MpKXtmb3IoYz0wO2M8dGhpcy5mZWF0dXJlVmFsdWVUaHJlc2hvbGRzLmxlbmd0aDtjKyspe2Q9W107Zj1bXTtnPXRoaXMuZmVhdHVyZVZhbHVlVGhyZXNob2xkc1tjXS50aHJlc2hvbGQ7Zm9yKHI9MDtyPGcubGVuZ3RoO3IrKylkLnB1c2godGhpcy5pbmZlcmVuY2VTdGF0c19bcl0uZmFjZXRlZFt0aGlzLmNyZWF0ZUNvbWJpbmVkVmFsdWVTdHJpbmdfKHRoaXMuZmVhdHVyZVZhbHVlVGhyZXNob2xkc1tjXS52YWx1ZSwKdGhpcy5mZWF0dXJlVmFsdWVUaHJlc2hvbGRzW2NdLnZhbHVlMildKSxmLnB1c2goZ1tyXS50aHJlc2hvbGQpO3RoaXMucGxvdENoYXJ0KHRoaXMuJCQoIiMiK3RoaXMuZ2V0Um9jQ2hhcnRJZChjKSksZCxmLGEsITApO3RoaXMucGxvdENoYXJ0KHRoaXMuJCQoIiMiK3RoaXMuZ2V0UHJDaGFydElkKGMpKSxkLGYsYSwhMSl9Yz1bXTtkPVtdO2ZvcihmPTA7Zjx0aGlzLmluZmVyZW5jZVN0YXRzXy5sZW5ndGg7ZisrKWMucHVzaCh0aGlzLmluZmVyZW5jZVN0YXRzX1tmXS50aHJlc2hvbGRzKSxkLnB1c2godGhpcy5vdmVyYWxsVGhyZXNob2xkc1tmXS50aHJlc2hvbGQpO3RoaXMucGxvdENoYXJ0KHRoaXMuJCQoIiNyb2NjaGFydCIpLGMsZCxhLCEwKTt0aGlzLnBsb3RDaGFydCh0aGlzLiQkKCIjcHJjaGFydCIpLGMsZCxhLCExKX10aGlzLnVwZGF0ZUNvcnJlY3RuZXNzXygpfX0sc29ydEZlYXR1cmVWYWx1ZXM6ZnVuY3Rpb24oYSl7Y29uc3QgYz10aGlzLmluZmVyZW5jZVN0YXRzX1swXTsKYT1hLmZpbHRlcihkPT50aGlzLmlzUmVncmVzc2lvbl8odGhpcy5tb2RlbFR5cGUpPzA8dGhpcy5nZXRSZWdyZXNzaW9uQ291bnQoYyxkKTp0aGlzLmlzQmluYXJ5Q2xhc3NpZmljYXRpb25fKHRoaXMubW9kZWxUeXBlLHRoaXMubXVsdGlDbGFzcyk/MDx0aGlzLmdldEJpbmFyeUNsYXNzaWZpY2F0aW9uQ291bnQoYyxkKTowPHRoaXMuZ2V0TXVsdGljbGFzc0NsYXNzaWZpY2F0aW9uQ291bnQoYyxkKSk7cmV0dXJuIGEuc29ydCgoZCxmKT0+e2lmKCJDb3VudCI9PXRoaXMuc2VsZWN0ZWRGZWF0dXJlU29ydClyZXR1cm4gdGhpcy5pc1JlZ3Jlc3Npb25fKHRoaXMubW9kZWxUeXBlKT90aGlzLmdldFJlZ3Jlc3Npb25Db3VudChjLGYpLXRoaXMuZ2V0UmVncmVzc2lvbkNvdW50KGMsZCk6dGhpcy5pc0JpbmFyeUNsYXNzaWZpY2F0aW9uXyh0aGlzLm1vZGVsVHlwZSx0aGlzLm11bHRpQ2xhc3MpP3RoaXMuZ2V0QmluYXJ5Q2xhc3NpZmljYXRpb25Db3VudChjLGYpLXRoaXMuZ2V0QmluYXJ5Q2xhc3NpZmljYXRpb25Db3VudChjLApkKTp0aGlzLmdldE11bHRpY2xhc3NDbGFzc2lmaWNhdGlvbkNvdW50KGMsZiktdGhpcy5nZXRNdWx0aWNsYXNzQ2xhc3NpZmljYXRpb25Db3VudChjLGQpO2lmKCJBbHBoYWJldGljYWwiPT10aGlzLnNlbGVjdGVkRmVhdHVyZVNvcnQpcmV0dXJuIHRoaXMuZ2V0UHJpbnRhYmxlVmFsdWVfKGQpLmxvY2FsZUNvbXBhcmUodGhpcy5nZXRQcmludGFibGVWYWx1ZV8oZikpO2lmKCJBY2N1cmFjeSI9PXRoaXMuc2VsZWN0ZWRGZWF0dXJlU29ydClyZXR1cm4gdGhpcy5pc0JpbmFyeUNsYXNzaWZpY2F0aW9uXyh0aGlzLm1vZGVsVHlwZSx0aGlzLm11bHRpQ2xhc3MpPyt0aGlzLmdldEFjY3VyYWN5TW9kZWxJbmRleCh0aGlzLmluZmVyZW5jZVN0YXRzXyxmLnRocmVzaG9sZCwwLGYpLSt0aGlzLmdldEFjY3VyYWN5TW9kZWxJbmRleCh0aGlzLmluZmVyZW5jZVN0YXRzXyxkLnRocmVzaG9sZCwwLGQpOit0aGlzLmdldE11bHRpQ2xhc3NBY2N1cmFjeU1vZGVsSW5kZXgodGhpcy5pbmZlcmVuY2VTdGF0c18sCjAsZiktK3RoaXMuZ2V0TXVsdGlDbGFzc0FjY3VyYWN5TW9kZWxJbmRleCh0aGlzLmluZmVyZW5jZVN0YXRzXywwLGQpO2lmKCJGYWxzZSBwb3NpdGl2ZXMiPT10aGlzLnNlbGVjdGVkRmVhdHVyZVNvcnQpcmV0dXJuK3RoaXMuZ2V0RlBNb2RlbEluZGV4KHRoaXMuaW5mZXJlbmNlU3RhdHNfLGYudGhyZXNob2xkLDAsZiktK3RoaXMuZ2V0RlBNb2RlbEluZGV4KHRoaXMuaW5mZXJlbmNlU3RhdHNfLGQudGhyZXNob2xkLDAsZCk7aWYoIkZhbHNlIG5lZ2F0aXZlcyI9PXRoaXMuc2VsZWN0ZWRGZWF0dXJlU29ydClyZXR1cm4gdGhpcy5nZXRGTk1vZGVsSW5kZXgoK3RoaXMuaW5mZXJlbmNlU3RhdHNfLGYudGhyZXNob2xkLDAsZiktK3RoaXMuZ2V0Rk5Nb2RlbEluZGV4KHRoaXMuaW5mZXJlbmNlU3RhdHNfLGQudGhyZXNob2xkLDAsZCl9KX0sc29ydFJlZ3Jlc3Npb25FbnRyaWVzOmZ1bmN0aW9uKGEpe3JldHVybiBhLnNvcnQoKGMsZCk9PntpZigiQ291bnQiPT10aGlzLnNlbGVjdGVkRmVhdHVyZVNvcnQpcmV0dXJuIGQuY291bnQtCmMuY291bnQ7aWYoIkFscGhhYmV0aWNhbCI9PXRoaXMuc2VsZWN0ZWRGZWF0dXJlU29ydClyZXR1cm4gYy5uYW1lLmxvY2FsZUNvbXBhcmUoZC5uYW1lKTtpZigiTWVhbiBlcnJvciI9PXRoaXMuc2VsZWN0ZWRGZWF0dXJlU29ydClyZXR1cm4gZC5tZWFuRXJyb3ItYy5tZWFuRXJyb3I7aWYoIk1lYW4gYWJzb2x1dGUgZXJyb3IiPT10aGlzLnNlbGVjdGVkRmVhdHVyZVNvcnQpcmV0dXJuIGQubWVhbkFic0Vycm9yLWMubWVhbkFic0Vycm9yO2lmKCJNZWFuIHNxdWFyZWQgZXJyb3IiPT10aGlzLnNlbGVjdGVkRmVhdHVyZVNvcnQpcmV0dXJuIGQubWVhblNxdWFyZWRFcnJvci1jLm1lYW5TcXVhcmVkRXJyb3I7aWYoIk1lZGlhbiBlcnJvciI9PXRoaXMuc2VsZWN0ZWRGZWF0dXJlU29ydClyZXR1cm4gZC5tZWRpYW5FcnJvci1jLm1lZGlhbkVycm9yO2lmKCJNZWRpYW4gYWJzb2x1dGUgZXJyb3IiPT10aGlzLnNlbGVjdGVkRmVhdHVyZVNvcnQpcmV0dXJuIGQubWVkaWFuQWJzRXJyb3ItYy5tZWRpYW5BYnNFcnJvcjsKaWYoIk1lZGlhbiBzcXVhcmVkIGVycm9yIj09dGhpcy5zZWxlY3RlZEZlYXR1cmVTb3J0KXJldHVybiBkLm1lZGlhblNxdWFyZWRFcnJvci1jLm1lZGlhblNxdWFyZWRFcnJvcn0pfSxmaWxsSW5SZWdyZXNzaW9uU3RhdHM6ZnVuY3Rpb24oYSxjKXtmdW5jdGlvbiBkKGspe3JldHVybiBrLnJlZHVjZSgobSxwKT0+bStwLDApL2subGVuZ3RofWZ1bmN0aW9uIGYoayl7aWYoMD09ay5sZW5ndGgpcmV0dXJuIE5hTjtrPWsuc29ydCgocCxxKT0+cC1xKTtjb25zdCBtPWsubGVuZ3RoLzI7cmV0dXJuIDE9PWsubGVuZ3RoP2tbMF06MD09ay5sZW5ndGglMj9rW21dOihrW01hdGguZmxvb3IobSldK2tbTWF0aC5jZWlsKG0pXSkvMn1jb25zdCBnPWEuZXJyb3JzLm1hcChrPT5NYXRoLmFicyhrKSksbD1hLmVycm9ycy5tYXAoaz0+ayprKTtyZXR1cm57bmFtZTpjLG1lYW5FcnJvcjpkKGEuZXJyb3JzKSxtZWFuQWJzRXJyb3I6ZChnKSxtZWFuU3F1YXJlZEVycm9yOmQobCksbWVkaWFuRXJyb3I6ZihhLmVycm9ycyksCm1lZGlhbkFic0Vycm9yOmYoZyksbWVkaWFuU3F1YXJlZEVycm9yOmYobCksY291bnQ6YS5lcnJvcnMubGVuZ3RofX0scGxvdENoYXJ0OmZ1bmN0aW9uKGEsYyxkLGYsZyl7aWYoYyYmY1swXSYmYSl7dmFyIGw9W10saz1bXSxtPWc/IkZQUiI6IlRQUiIscD1nPyJUUFIiOiJQUFYiLHE9Zz8iRlBSIjoiUmVjYWxsIixyPWc/IlRQUiI6IlByZWNpc2lvbiI7Zm9yKGxldCB0PTA7dDxjLmxlbmd0aDt0Kyspe2xldCB2PW51bGw7Y29uc3QgQT1jW3RdLm1hcCgoeSx4KT0+ey41PngtMTAwKmRbdF0mJih2PXtzdGVwOnlbbV0sc2NhbGFyOnlbcF0sdGhyZXNob2xkOngvMTAwfSk7cmV0dXJue3N0ZXA6eVttXSxzY2FsYXI6eVtwXSx0aHJlc2hvbGQ6eC8xMDB9fSkucmV2ZXJzZSgpO2Euc2V0U2VyaWVzRGF0YSh0aGlzLnN0cldpdGhNb2RlbE5hbWVfKCJUaHJlc2hvbGQgc2V0Iix0KSxbdl0pO2YmJihhLnNldFNlcmllc0RhdGEodGhpcy5zdHJXaXRoTW9kZWxOYW1lXygiUk9DIix0KSxBKSxsLnB1c2godGhpcy5zdHJXaXRoTW9kZWxOYW1lXygiUk9DIiwKdCkpLGwucHVzaCh0aGlzLnN0cldpdGhNb2RlbE5hbWVfKCJUaHJlc2hvbGQgc2V0Iix0KSksay5wdXNoKHRoaXMucm9jQ3VydmVMaW5lQ29sb3JzW3RdKSxrLnB1c2godGhpcy5yb2NDdXJ2ZUNvbG9yc1t0XSkpfWlmKGYpe2NvbnN0IHQ9ZDMuZm9ybWF0KCIuMmYiKTthLnhBeGlzRm9ybWF0dGVyPWQzLmZvcm1hdCgiLjJmIik7Y29uc3Qgdj1kMy5mb3JtYXQoIiwuMSIpO2Y9W3t0aXRsZToiVGhyZXNob2xkIixldmFsdWF0ZTpmdW5jdGlvbihBKXtyZXR1cm4gdChBLmRhdHVtLnRocmVzaG9sZCl9fSx7dGl0bGU6cixldmFsdWF0ZTpmdW5jdGlvbihBKXtyZXR1cm4gZz92KEEuZGF0dW0uc2NhbGFyKTp0KEEuZGF0dW0uc2NhbGFyKX19LHt0aXRsZTpxLGV2YWx1YXRlOmZ1bmN0aW9uKEEpe3JldHVybiBnP3YoQS5kYXR1bS5zdGVwKTp0KEEuZGF0dW0uc3RlcCl9fV07MTxjLmxlbmd0aCYmZi5wdXNoKHt0aXRsZToiTW9kZWwiLGV2YWx1YXRlOmZ1bmN0aW9uKEEpe0E9QS5kYXRhc2V0Lm1ldGFkYXRhKCkubmFtZS5zcGxpdCgiICIpOwpyZXR1cm4gQVtBLmxlbmd0aC0xXX19KTthLnRvb2x0aXBDb2x1bW5zPWY7YS5jb2xvclNjYWxlPShuZXcgUGxvdHRhYmxlLlNjYWxlcy5Db2xvcikucmFuZ2Uoayk7YS5jb2xvclNjYWxlLmRvbWFpbihsKTthLnNldFZpc2libGVTZXJpZXMobCl9fX0sY2FsY1RocmVzaG9sZFN0YXRzOmZ1bmN0aW9uKGEpe2ZvcihsZXQgYz0wO2M8YS5sZW5ndGg7YysrKWFbY10uVFBSPTA8YVtjXS5UUCthW2NdLkZOP2FbY10uVFAvKGFbY10uVFArYVtjXS5GTik6MCxhW2NdLkZQUj0wPGFbY10uRlArYVtjXS5UTj9hW2NdLkZQLyhhW2NdLkZQK2FbY10uVE4pOjAsYVtjXS5QUFY9MDxhW2NdLlRQK2FbY10uRlA/YVtjXS5UUC8oYVtjXS5UUCthW2NdLkZQKTowfSxvcHRpbWl6YXRpb25TZWxlY3RlZENoYW5nZWRfOmZ1bmN0aW9uKGEpeyJjdXN0b20iIT1hJiYoInVuYXdhcmUiPT1hP3RoaXMub3B0aW1pemVUaHJlc2hvbGRDbGlja2VkXygpOiJncm91cCI9PWE/dGhpcy5vcHRpbWl6ZUZhY2V0ZWRUaHJlc2hvbGRzQ2xpY2tlZF8oKToKImRlbW9wYXJpdHkiPT1hP3RoaXMuZGVtb1Bhcml0eUNsaWNrZWRfKCk6ImVxdWFsYWNjIj09YT90aGlzLmVxdWFsQWNjQ2xpY2tlZF8oKToiZXF1YWxvcHAiPT1hJiZ0aGlzLmVxdWFsT3Bwb0NsaWNrZWRfKCksdGhpcy51cGRhdGVJbmZlcmVuY2VTdGF0c18oITApKX0sY29zdFJhdGlvQ2hhbmdlZF86ZnVuY3Rpb24oKXt0aGlzLnJlc2V0T3B0aW1pemF0aW9uU2VsZWN0ZWRfKCl9LHJlc2V0T3B0aW1pemF0aW9uU2VsZWN0ZWRfOmZ1bmN0aW9uKCl7Y29uc3QgYT10aGlzLiQkKCIjY3VzdG9tdGhyZXNoIik7bnVsbCE9YSYmYS5jbGljaygpfSxvcHRpbWl6ZVRocmVzaG9sZENsaWNrZWRfOmZ1bmN0aW9uKCl7Zm9yKGxldCBhPTA7YTx0aGlzLmluZmVyZW5jZVN0YXRzXy5sZW5ndGg7YSsrKXtjb25zdCBjPXRoaXMuZmluZE9wdGltYWxUaHJlc2hvbGRfKHRoaXMuaW5mZXJlbmNlU3RhdHNfW2FdLnRocmVzaG9sZHMpO3RoaXMuc2V0KCJvdmVyYWxsVGhyZXNob2xkcy4iK2ErIi50aHJlc2hvbGQiLApjKTtpZih0aGlzLmZlYXR1cmVWYWx1ZVRocmVzaG9sZHMpZm9yKGxldCBkPTA7ZDx0aGlzLmZlYXR1cmVWYWx1ZVRocmVzaG9sZHMubGVuZ3RoO2QrKyl0aGlzLnNldCgiZmVhdHVyZVZhbHVlVGhyZXNob2xkcy4iK2QrIi50aHJlc2hvbGQuIithKyIudGhyZXNob2xkIixjKX19LG9wdGltaXplRmFjZXRlZFRocmVzaG9sZHNDbGlja2VkXzpmdW5jdGlvbigpe2ZvcihsZXQgYT0wO2E8dGhpcy5pbmZlcmVuY2VTdGF0c18ubGVuZ3RoO2ErKyl7Y29uc3QgYz1PYmplY3Qua2V5cyh0aGlzLmluZmVyZW5jZVN0YXRzX1thXS5mYWNldGVkKTtmb3IobGV0IGQ9MDtkPGMubGVuZ3RoO2QrKyl0aGlzLnNldCgiZmVhdHVyZVZhbHVlVGhyZXNob2xkcy4iK2QrIi50aHJlc2hvbGQuIithKyIudGhyZXNob2xkIix0aGlzLmZpbmRPcHRpbWFsVGhyZXNob2xkXyh0aGlzLmluZmVyZW5jZVN0YXRzX1thXS5mYWNldGVkW2NbZF1dKSl9fSxmaW5kT3B0aW1hbFRocmVzaG9sZF86ZnVuY3Rpb24oYSl7bGV0IGM9Ck51bWJlci5QT1NJVElWRV9JTkZJTklUWSxkPTA7Zm9yKGxldCBmPTA7ZjxhLmxlbmd0aDtmKyspe2NvbnN0IGc9dGhpcy5nZXRDb3N0KGFbZl0pO2c8PWMmJihjPWcsZD1mKX1yZXR1cm4gZC8xMDB9LGVxdWFsT3Bwb0NsaWNrZWRfOmZ1bmN0aW9uKCl7dGhpcy5nZXRCZXN0VGhyZXNob2xkc0J5RmFpcm5lc3NNZWFzdXJlXyhhPT5hLlRQLyhhLlRQK2EuRk4pKX0sZXF1YWxBY2NDbGlja2VkXzpmdW5jdGlvbigpe3RoaXMuZ2V0QmVzdFRocmVzaG9sZHNCeUZhaXJuZXNzTWVhc3VyZV8oYT0+KGEuVFArYS5UTikvKGEuVFArYS5GUCthLlROK2EuRk4pKX0sZGVtb1Bhcml0eUNsaWNrZWRfOmZ1bmN0aW9uKCl7dGhpcy5nZXRCZXN0VGhyZXNob2xkc0J5RmFpcm5lc3NNZWFzdXJlXyhhPT4oYS5UUCthLkZQKS8oYS5UUCthLkZQK2EuVE4rYS5GTikpfSxnZXRCZXN0VGhyZXNob2xkc0J5RmFpcm5lc3NNZWFzdXJlXzpmdW5jdGlvbihhKXtmb3IobGV0IGY9MDtmPHRoaXMuaW5mZXJlbmNlU3RhdHNfLmxlbmd0aDtmKyspe3ZhciBjPQpOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksZD1udWxsO2NvbnN0IGc9dGhpcy5pbmZlcmVuY2VTdGF0c19bZl0sbD1PYmplY3Qua2V5cyhnLmZhY2V0ZWQpLGs9Zy5mYWNldGVkW2xbMF1dO2ZvcihsZXQgbT0wO208ay5sZW5ndGg7bSsrKXtjb25zdCBwPWEoa1ttXSkscT1bbV07bGV0IHI9dGhpcy5nZXRDb3N0KGtbbV0pO2ZvcihsZXQgdD0xO3Q8bC5sZW5ndGg7dCsrKXtjb25zdCB2PWcuZmFjZXRlZFtsW3RdXSxBPXRoaXMudGhyZXNob2xkQ2xvc2VzdFRvTWVhc3VyZSh2LHAsYSk7cS5wdXNoKEEpO3IrPXRoaXMuZ2V0Q29zdCh2W0FdKX1yPD1jJiYoYz1yLGQ9cSl9Zm9yKGM9MDtjPGwubGVuZ3RoO2MrKyl0aGlzLnNldCgiZmVhdHVyZVZhbHVlVGhyZXNob2xkc01hcC4iK2xbY10rIi50aHJlc2hvbGQuIitmKyIudGhyZXNob2xkIixkW2NdLzEwMCk7Zm9yKGQ9MDtkPHRoaXMuZmVhdHVyZVZhbHVlVGhyZXNob2xkcy5sZW5ndGg7ZCsrKXRoaXMuc2V0KCJmZWF0dXJlVmFsdWVUaHJlc2hvbGRzLiIrCmQrIi50aHJlc2hvbGQuIitmKyIudGhyZXNob2xkIix0aGlzLmZlYXR1cmVWYWx1ZVRocmVzaG9sZHNbZF0udGhyZXNob2xkW2ZdLnRocmVzaG9sZCl9fSxnZXRDb3N0OmZ1bmN0aW9uKGEpe3JldHVybiBhLkZQKnRoaXMuaW5jb3JyZWN0UHJlZENvc3RSYXRpbythLkZOfSx0aHJlc2hvbGRDbG9zZXN0VG9NZWFzdXJlOmZ1bmN0aW9uKGEsYyxkKXtsZXQgZj1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksZz0wO2ZvcihsZXQgaz0wO2s8YS5sZW5ndGg7aysrKXt2YXIgbD1kKGFba10pO2w9TWF0aC5hYnMobC1jKTtsPD1mJiYoZz1rLGY9bCl9cmV0dXJuIGd9LGdldENsYXNzaWZpY2F0aW9uQmVzdE5vblplcm86ZnVuY3Rpb24oYSxjKXtsZXQgZD0wO2NvbnN0IGY9dGhpcy5leGFtcGxlc0FuZEluZmVyZW5jZXNbYV0uaW5mZXJlbmNlcy5sZW5ndGgtMTtmb3IobGV0IGc9MDtnPHRoaXMuZXhhbXBsZXNBbmRJbmZlcmVuY2VzW2FdLmluZmVyZW5jZXNbZl1bY10ubGVuZ3RoO2crKylpZigwIT09Cit0aGlzLmV4YW1wbGVzQW5kSW5mZXJlbmNlc1thXS5pbmZlcmVuY2VzW2ZdW2NdW2ddLmxhYmVsKXtkPWc7YnJlYWt9cmV0dXJuIHRoaXMuZXhhbXBsZXNBbmRJbmZlcmVuY2VzW2FdLmluZmVyZW5jZXNbZl1bY11bZF19LGdldENvbmZ1c2lvbkNvdW50c01vZGVsSW5kZXg6ZnVuY3Rpb24oYSxjLGQsZil7cmV0dXJuIHRoaXMub3ZlcmFsbFRocmVzaG9sZHMubGVuZ3RoIT10aGlzLm51bU1vZGVsc3x8dGhpcy5pbmZlcmVuY2VTdGF0c18ubGVuZ3RoIT10aGlzLm51bU1vZGVscz97fTp0aGlzLmdldENvbmZ1c2lvbkNvdW50cyh0aGlzLmluZmVyZW5jZVN0YXRzX1tkXSxjW2RdLnRocmVzaG9sZCxmKX0sZ2V0VG90YWxFbnRyaWVzSW5Db25mQ291bnRzOmZ1bmN0aW9uKGEpe2lmKG51bGw9PWEpcmV0dXJuIDA7bGV0IGM9MDtjb25zdCBkPU9iamVjdC5rZXlzKGEpO2ZvcihsZXQgZj0wO2Y8ZC5sZW5ndGg7ZisrKXtjb25zdCBnPWFbZFtmXV0sbD1PYmplY3Qua2V5cyhnKTtmb3IobGV0IGs9CjA7azxsLmxlbmd0aDtrKyspYys9Z1tsW2tdXX1yZXR1cm4gY30sZ2V0RlBNb2RlbEluZGV4OmZ1bmN0aW9uKGEsYyxkLGYpe2E9dGhpcy5nZXRDb25mdXNpb25Db3VudHNNb2RlbEluZGV4KGEsYyxkLGYpO2lmKDA9PU9iamVjdC5rZXlzKGEpLmxlbmd0aClyZXR1cm4gbnVsbDtjPWEuTm8uWWVzO3JldHVybiBkMy5mb3JtYXQoIiwuMWYiKShjL3RoaXMuZ2V0VG90YWxFbnRyaWVzSW5Db25mQ291bnRzKGEpKjEwMCl9LGdldEZOTW9kZWxJbmRleDpmdW5jdGlvbihhLGMsZCxmKXthPXRoaXMuZ2V0Q29uZnVzaW9uQ291bnRzTW9kZWxJbmRleChhLGMsZCxmKTtpZigwPT1PYmplY3Qua2V5cyhhKS5sZW5ndGgpcmV0dXJuIDA7Yz1hLlllcy5ObztyZXR1cm4gZDMuZm9ybWF0KCIsLjFmIikoYy90aGlzLmdldFRvdGFsRW50cmllc0luQ29uZkNvdW50cyhhKSoxMDApfSxnZXRBY2N1cmFjeU1vZGVsSW5kZXg6ZnVuY3Rpb24oYSxjLGQsZil7YT10aGlzLmdldENvbmZ1c2lvbkNvdW50c01vZGVsSW5kZXgoYSwKYyxkLGYpO2lmKDA9PU9iamVjdC5rZXlzKGEpLmxlbmd0aClyZXR1cm4gMDtjPWEuWWVzLlllcythLk5vLk5vO3JldHVybiBkMy5mb3JtYXQoIiwuMWYiKShjL3RoaXMuZ2V0VG90YWxFbnRyaWVzSW5Db25mQ291bnRzKGEpKjEwMCl9LGdldEYxTW9kZWxJbmRleDpmdW5jdGlvbihhLGMsZCxmKXtjb25zdCBnPWQzLmZvcm1hdCgiLC4yZiIpO2Q9dGhpcy5nZXRDb25mdXNpb25Db3VudHNNb2RlbEluZGV4KGEsYyxkLGYpO2lmKDA9PU9iamVjdC5rZXlzKGQpLmxlbmd0aClyZXR1cm4gMDthPWQuWWVzLlllcztjPWQuTm8uWWVzO2Q9ZC5ZZXMuTm87aWYoMD09YSlyZXR1cm4gMCE9Y3x8MCE9ZD9nKDApOmcoMSk7Yz1hLyhhK2MpO2EvPWErZDtyZXR1cm4gZygyKmMqYS8oYythKSl9LGdldEZlYXR1cmVWYWx1ZUNvdW50OmZ1bmN0aW9uKGEsYyxkKXtyZXR1cm4gdGhpcy5nZXRUb3RhbEVudHJpZXNJbkNvbmZDb3VudHModGhpcy5nZXRDb25mdXNpb25Db3VudHNNb2RlbEluZGV4KGEsYywwLApkKSl9LGdldENvbmZ1c2lvbk1hdHJpeExhYmVsOmZ1bmN0aW9uKGEsYyl7cmV0dXJuIDI+Yz8iIjp0aGlzLmdldE1vZGVsTmFtZV8oYSl9LGdldENvbmZ1c2lvbk1hdHJpeENvbG9yOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmNvbmZNYXRyaXhDb2xvcnNbYV19LGdldENvbmZ1c2lvbkNvdW50cyhhLGMsZCl7bGV0IGY9bnVsbCxnPW51bGw7bnVsbCE9ZCYmKGY9ZC52YWx1ZSxnPWQudmFsdWUyKTtyZXR1cm57Tm86e05vOnRoaXMuZ2V0Q29uZk1hdHJpeFZhbHVlKGEsYywiVE4iLGYsZyksWWVzOnRoaXMuZ2V0Q29uZk1hdHJpeFZhbHVlKGEsYywiRlAiLGYsZyl9LFllczp7Tm86dGhpcy5nZXRDb25mTWF0cml4VmFsdWUoYSxjLCJGTiIsZixnKSxZZXM6dGhpcy5nZXRDb25mTWF0cml4VmFsdWUoYSxjLCJUUCIsZixnKX19fSxnZXRDb25mTWF0cml4VmFsdWU6ZnVuY3Rpb24oYSxjLGQsZixnKXtjPU1hdGguZmxvb3IoMTAwKmMpO2lmKCFhLnRocmVzaG9sZHMpcmV0dXJuIDA7aWYobnVsbD09PQpmKXJldHVybiBhLnRocmVzaG9sZHNbY11bZF07Zj10aGlzLmNyZWF0ZUNvbWJpbmVkVmFsdWVTdHJpbmdfKGYsZyk7cmV0dXJuIG51bGw9PWEuZmFjZXRlZFtmXT8wOmEuZmFjZXRlZFtmXVtjXVtkXX0sZ2V0TXVsdGlDbGFzc0NvbmZNYXRyaXg6ZnVuY3Rpb24oYSxjLGQpe3JldHVybiAwPT1hLmxlbmd0aD97fTpudWxsPT1kP2FbY10ucmVzdWx0czphW2NdLmZhY2V0ZWRbdGhpcy5nZXRQcmludGFibGVWYWx1ZV8oZCldfSxnZXRNdWx0aUNsYXNzRmVhdHVyZVZhbHVlQ291bnQ6ZnVuY3Rpb24oYSxjKXtyZXR1cm4gdGhpcy5nZXRUb3RhbEVudHJpZXNJbkNvbmZDb3VudHModGhpcy5nZXRNdWx0aUNsYXNzQ29uZk1hdHJpeChhLDAsYykpfSxnZXRNdWx0aUNsYXNzQWNjdXJhY3lNb2RlbEluZGV4OmZ1bmN0aW9uKGEsYyxkKXthPXRoaXMuZ2V0TXVsdGlDbGFzc0NvbmZNYXRyaXgoYSxjLGQpO2lmKG51bGw9PWEpcmV0dXJuIG51bGw7Yz0wO2Q9T2JqZWN0LmtleXMoYSk7Zm9yKGxldCBmPQowO2Y8ZC5sZW5ndGg7ZisrKXtjb25zdCBnPWFbZFtmXV0sbD1PYmplY3Qua2V5cyhnKTtmb3IobGV0IGs9MDtrPGwubGVuZ3RoO2srKylkW2ZdPT1sW2tdJiYoYys9Z1tsW2tdXSl9cmV0dXJuIGQzLmZvcm1hdCgiLC4xZiIpKGMvdGhpcy5nZXRUb3RhbEVudHJpZXNJbkNvbmZDb3VudHMoYSkqMTAwKX0sZ2V0SW5mZXJlbmNlU3RhdDpmdW5jdGlvbihhLGMsZCxmKXthPWM/YS5mYWNldGVkW3RoaXMuZ2V0UHJpbnRhYmxlVmFsdWVfKGMpXTphLnJlc3VsdHM7aWYoIWEpcmV0dXJuIG51bGw7ZD1kKGEpO3JldHVybiBmP2YoZCk6ZH0sZ2V0UmVncmVzc2lvbk1lYW46ZnVuY3Rpb24oYSxjKXtyZXR1cm4gdGhpcy5nZXRJbmZlcmVuY2VTdGF0KGEsYyxkPT5kLm1lYW4sZDMuZm9ybWF0KCIuM2YiKSl9LGdldFJlZ3Jlc3Npb25BYnNNZWFuOmZ1bmN0aW9uKGEsYyl7cmV0dXJuIHRoaXMuZ2V0SW5mZXJlbmNlU3RhdChhLGMsZD0+ZC5hYnNNZWFuLGQzLmZvcm1hdCgiLjNmIikpfSxnZXRSZWdyZXNzaW9uU3F1YXJlZE1lYW46ZnVuY3Rpb24oYSwKYyl7cmV0dXJuIHRoaXMuZ2V0SW5mZXJlbmNlU3RhdChhLGMsZD0+ZC5zcXVhcmVkTWVhbixkMy5mb3JtYXQoIi4zZiIpKX0sZ2V0UmVncmVzc2lvbkNvdW50OmZ1bmN0aW9uKGEsYyl7YT10aGlzLmdldEluZmVyZW5jZVN0YXQoYSxjLGQ9PmQuZXJyb3JzLmxlbmd0aCxudWxsKTtyZXR1cm4gbnVsbD09YT8wOmF9LGdldEJpbmFyeUNsYXNzaWZpY2F0aW9uQ291bnQ6ZnVuY3Rpb24oYSxjKXtyZXR1cm4gdGhpcy5nZXRJbmZlcmVuY2VTdGF0KGEsYyxkPT5PYmplY3QudmFsdWVzKGRbMF0pLnJlZHVjZSgoZixnKT0+ZitnKSxudWxsKX0sZ2V0TXVsdGljbGFzc0NsYXNzaWZpY2F0aW9uQ291bnQ6ZnVuY3Rpb24oYSxjKXtyZXR1cm4gdGhpcy5nZXRJbmZlcmVuY2VTdGF0KGEsYyxkPT5PYmplY3QudmFsdWVzKGQpLnJlZHVjZSgoZixnKT0+e2xldCBsPTA7Y29uc3Qgaz1PYmplY3Qua2V5cyhnKTtmb3IobGV0IG09MDttPGsubGVuZ3RoO20rKylsKz1nW2tbbV1dO3JldHVybiBmK2x9LDApLApudWxsKX0sZ2V0Um9jQ2hhcnRJZDpmdW5jdGlvbihhKXtyZXR1cm4icm9jY2hhcnQiK2F9LGdldFByQ2hhcnRJZDpmdW5jdGlvbihhKXtyZXR1cm4icHJjaGFydCIrYX0sZ2V0UHJpbnRhYmxlVmFsdWVfOmZ1bmN0aW9uKGEpe2xldCBjO2M9YS52YWx1ZXx8MD09PWEudmFsdWU/U3RyaW5nKGEudmFsdWUpOiJceDNjZmVhdHVyZSB2YWx1ZSBtaXNzaW5nXHgzZSI7aWYoIiI9PXRoaXMuc2VsZWN0ZWRTZWNvbmRCcmVha2Rvd25GZWF0dXJlKXJldHVybiBjO2MrPSIvIjtyZXR1cm4gYz1hLnZhbHVlMnx8MD09PWEudmFsdWUyP2MrYS52YWx1ZTI6YysiXHgzY2ZlYXR1cmUgdmFsdWUgbWlzc2luZ1x4M2UifSxnZXRGZWF0dXJlTmFtZV86ZnVuY3Rpb24oYSl7cmV0dXJuIDA9PT1hLmxlbmd0aD8iXHgzY25vbmVceDNlIjphfSxnZXRDb3VudGVyZmFjdHVhbE1vZGVsTmFtZV86ZnVuY3Rpb24oYSl7cmV0dXJuIk1vZGVsOiAiK2F9LGdldENsYXNzTmFtZV86ZnVuY3Rpb24oYSl7cmV0dXJuIDA9PT0KYS5sZW5ndGg/Ilx4M2Nub25lXHgzZSI6YX0sc2hvdWxkU2hvd092ZXJhbGxUaHJlc2hvbGRlcl86ZnVuY3Rpb24oYSl7cmV0dXJuIDA9PT1hLmxlbmd0aH0sY29tcHV0ZVNlbGVjdGVkRXhhbXBsZUFuZEluZmVyZW5jZTpmdW5jdGlvbigpe3RoaXMuY291bnRlcmZhY3R1YWxFeGFtcGxlQW5kSW5mZXJlbmNlPW51bGw7dGhpcy5zZWxlY3RlZCYmdGhpcy5leGFtcGxlc0FuZEluZmVyZW5jZXM/KHRoaXMuc2VsZWN0ZWRFeGFtcGxlQW5kSW5mZXJlbmNlPTA8dGhpcy5zZWxlY3RlZC5sZW5ndGg/dGhpcy5leGFtcGxlc0FuZEluZmVyZW5jZXNbdGhpcy5zZWxlY3RlZFswXV06bnVsbCxudWxsPT10aGlzLnNlbGVjdGVkRXhhbXBsZUFuZEluZmVyZW5jZT90aGlzLmdsb2JhbFBkUGxvdHM9ITA6KHRoaXMuZ2xvYmFsUGRQbG90cz0hMSwiZGl2ZSIhPXRoaXMudmlzTW9kZSYmdGhpcy5zaG93UGFydGlhbERlcGVuZGVuY2VQbG90c18oKSkpOnRoaXMuc2VsZWN0ZWRFeGFtcGxlQW5kSW5mZXJlbmNlPQpudWxsfSxzZXRBdHRyaWJ1dGlvbnM6ZnVuY3Rpb24oKXtjb25zdCBhPXt9LGM9dGhpcy52aXNkYXRhW3RoaXMuc2VsZWN0ZWRbMF1dLGQ9L2F0dHJpYnV0aW9uc19fKC4qKS8sZj0vYXR0cmlidXRpb25zX18oLiopX2tleXMvO2ZvcihsZXQgbCBpbiBjKXt2YXIgZz1kLmV4ZWMobCk7aWYoZyl7Zz1uZXcgUmVnRXhwKCJeKGZlYXR1cmVzX18pPyIrZ1sxXSsiJCIpO2ZvcihsZXQgayBpbiBjKWlmKGcudGVzdChrKSl7YVtrXT1jW2xdO2JyZWFrfX1pZihnPWYuZXhlYyhsKSl7Zz1uZXcgUmVnRXhwKCJeKGZlYXR1cmVzX18pPyIrZ1sxXSsiJCIpO2ZvcihsZXQgayBpbiBjKWlmKGcudGVzdChrKSl7Zz1jW2xdO2NvbnN0IG09Y1tsLnJlcGxhY2UoIl9rZXlzIiwiX3ZhbHVlcyIpXSxwPUFycmF5LmFwcGx5KG51bGwsQXJyYXkoQXJyYXkuaXNBcnJheShjW2tdKT9jW2tdLmxlbmd0aDoxKSkubWFwKE51bWJlci5wcm90b3R5cGUudmFsdWVPZiwwKTtmb3IobGV0IHE9MDtxPGcubGVuZ3RoO3ErKyl7bGV0IHI9CmNba10uaW5kZXhPZihnW3FdKTstMSE9ciYmKHBbcl09bVtxXSl9YVtrXT1wO2JyZWFrfX19dGhpcy5hdHRyaWJ1dGlvbj1hfSxzaG91bGREaXNhYmxlR2V0RXhhbXBsZXNCdXR0b25fOmZ1bmN0aW9uKGEpe3JldHVybiAwPT1hLmxlbmd0aH0sc2hvdWxkRGlzYWJsZUluZmVyQnV0dG9uXzpmdW5jdGlvbihhLGMsZCxmKXtyZXR1cm4gMD09YS5sZW5ndGh8fDA9PWMubGVuZ3RofHwwPT1kLmxlbmd0aHx8IWZ9LGFyZUV4YW1wbGVzRWRpdGFibGVfOmZ1bmN0aW9uKGEsYyl7cmV0dXJuIDAhPWEubGVuZ3RoJiYwIT1jLmxlbmd0aH0sbmV3SW5mZXJlbmNlc186ZnVuY3Rpb24oKXt0aGlzLnNwaW5uZXJIaWRkZW5fPSEwO3RoaXMudXBkYXRlSW5mZXJlbmNlc18oITApO3JlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+dGhpcy51cGRhdGVJbmZlcmVuY2VTdGF0c18oITApKX0scmVmcmVzaEluZmVyZW5jZXNOb1JlZ2VuXzpmdW5jdGlvbigpe3RoaXMucmVmcmVzaEluZmVyZW5jZXNfKCEwKTtyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9Pgp0aGlzLnVwZGF0ZUluZmVyZW5jZVN0YXRzXyghMCkpfSxyZWZyZXNoSW5mZXJlbmNlc186ZnVuY3Rpb24oYSl7dGhpcy51cGRhdGVJbmZlcmVuY2VzXyghMSk7cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT50aGlzLnVwZGF0ZUluZmVyZW5jZVN0YXRzXyghYSkpfSx1cGRhdGVJbmZlcmVuY2VzXzpmdW5jdGlvbihhKXtpZih0aGlzLmV4YW1wbGVzQW5kSW5mZXJlbmNlcyYmdGhpcy5pbmZlcmVuY2VzLmluZGljZXMmJjAhPXRoaXMuaW5mZXJlbmNlcy5pbmRpY2VzLmxlbmd0aCYmdGhpcy5pbmZlcmVuY2VzLnJlc3VsdHMubGVuZ3RoPT10aGlzLm51bU1vZGVscyl7dmFyIGM9e30sZD0hIXRoaXMuaW5mZXJlbmNlcy5yZXN1bHRzWzBdLmNsYXNzaWZpY2F0aW9uUmVzdWx0O2ZvcihsZXQgaz0wO2s8dGhpcy5pbmZlcmVuY2VzLmluZGljZXMubGVuZ3RoO2srKylpZihkKXtjW3RoaXMuaW5mZXJlbmNlcy5pbmRpY2VzW2tdXT1bXTtmb3IodmFyIGY9MDtmPHRoaXMuaW5mZXJlbmNlcy5yZXN1bHRzLmxlbmd0aDtmKyspe2NvbnN0IG09CnRoaXMuaW5mZXJlbmNlcy5yZXN1bHRzW2ZdLmNsYXNzaWZpY2F0aW9uUmVzdWx0O2ZvcihsZXQgcD0wO3A8bS5jbGFzc2lmaWNhdGlvbnNba10uY2xhc3Nlcy5sZW5ndGg7cCsrKSIiPT1tLmNsYXNzaWZpY2F0aW9uc1trXS5jbGFzc2VzW3BdLmxhYmVsJiYobS5jbGFzc2lmaWNhdGlvbnNba10uY2xhc3Nlc1twXS5sYWJlbD1wLnRvU3RyaW5nKCkpO2NbdGhpcy5pbmZlcmVuY2VzLmluZGljZXNba11dW2ZdPW0uY2xhc3NpZmljYXRpb25zW2tdLmNsYXNzZXMuc29ydCgocCxxKT0+cS5zY29yZS1wLnNjb3JlKX19ZWxzZSBmb3IoY1t0aGlzLmluZmVyZW5jZXMuaW5kaWNlc1trXV09W10sZj0wO2Y8dGhpcy5pbmZlcmVuY2VzLnJlc3VsdHMubGVuZ3RoO2YrKyljW3RoaXMuaW5mZXJlbmNlcy5pbmRpY2VzW2tdXVtmXT1be2xhYmVsOiIiLHNjb3JlOnRoaXMuaW5mZXJlbmNlcy5yZXN1bHRzW2ZdLnJlZ3Jlc3Npb25SZXN1bHQucmVncmVzc2lvbnNba10udmFsdWV9XTt0aGlzLnNldCgiZXhhbXBsZXNBbmRJbmZlcmVuY2VzIiwKdGhpcy5leGFtcGxlc0FuZEluZmVyZW5jZXMubWFwKGZ1bmN0aW9uKGssbSl7bGV0IHA9ay5pbmZlcmVuY2VzP2suaW5mZXJlbmNlczpbXTtjW21dJiZhJiYocD1wLmNvbmNhdChbY1ttXV0pKTtyZXR1cm57ZXhhbXBsZTprLmV4YW1wbGUsaW5mZXJlbmNlczpwLGNoYW5nZWQ6ay5jaGFuZ2VkLG9yaWc6ay5vcmlnfX0pKTt2YXIgZz10aGlzLGw9ITE7dGhpcy52aXNkYXRhLmZvckVhY2goZnVuY3Rpb24oayxtKXtpZihkKWcuc2V0SXRlbUluZmVyZW5jZVZhbHVlKGssbSxnLnNlbGVjdGVkQnJlYWtkb3duRmVhdHVyZSxnLnNlbGVjdGVkU2Vjb25kQnJlYWtkb3duRmVhdHVyZSk7ZWxzZSBmb3IodmFyIHA9MDtwPGcubnVtTW9kZWxzO3ArKylrW2cuc3RyV2l0aE1vZGVsTmFtZV8oIiBJbmZlcmVuY2UgdmFsdWUiLHApXT1nLmV4YW1wbGVzQW5kSW5mZXJlbmNlc1ttXS5pbmZlcmVuY2VzW2cuZXhhbXBsZXNBbmRJbmZlcmVuY2VzW21dLmluZmVyZW5jZXMubGVuZ3RoLTFdW3BdWzBdLnNjb3JlOwppZihkJiYwPGcubGFiZWxWb2NhYi5sZW5ndGgpe2ZvcihwPTA7cDxnLmV4YW1wbGVzQW5kSW5mZXJlbmNlc1ttXS5pbmZlcmVuY2VzLmxlbmd0aDtwKyspZm9yKGxldCBxPTA7cTxnLmV4YW1wbGVzQW5kSW5mZXJlbmNlc1ttXS5pbmZlcmVuY2VzW3BdLmxlbmd0aDtxKyspZm9yKGxldCByPTA7cjxnLmV4YW1wbGVzQW5kSW5mZXJlbmNlc1ttXS5pbmZlcmVuY2VzW3BdW3FdLmxlbmd0aDtyKyspZy5leGFtcGxlc0FuZEluZmVyZW5jZXNbbV0uaW5mZXJlbmNlc1twXVtxXVtyXS52b2NhYkxhYmVsPWcubGFiZWxWb2NhYltnLmV4YW1wbGVzQW5kSW5mZXJlbmNlc1ttXS5pbmZlcmVuY2VzW3BdW3FdW3JdLmxhYmVsXTtmb3IobT0wO208Zy5udW1Nb2RlbHM7bSsrKWtbZy5zdHJXaXRoTW9kZWxOYW1lXygiIEluZmVyZW5jZSBsYWJlbCIsbSldPWcubGFiZWxWb2NhYltrW2cuc3RyV2l0aE1vZGVsTmFtZV8oIiBJbmZlcmVuY2UgdmFsdWUiLG0pXV07bD0hMH19KTt0aGlzLnVwZGF0ZUNvcnJlY3RuZXNzXygpOwp0aGlzLnJlZnJlc2hEaXZlXygpO3RoaXMuaW5mZXJlbmNlcy5pbmRpY2VzLmxlbmd0aD09dGhpcy5leGFtcGxlc0FuZEluZmVyZW5jZXMubGVuZ3RoJiYodGhpcy4kLmRpdmUuY29sb3JCeT1sP3RoaXMuc3RyV2l0aE1vZGVsTmFtZV8oIiBJbmZlcmVuY2UgbGFiZWwiLDApOnRoaXMuc3RyV2l0aE1vZGVsTmFtZV8oIiBJbmZlcmVuY2UgdmFsdWUiLDApLHRoaXMuaXNSZWdyZXNzaW9uXyh0aGlzLm1vZGVsVHlwZSk/KHRoaXMuJC5kaXZlLmhvcml6b250YWxQb3NpdGlvbj10aGlzLnN0cldpdGhNb2RlbE5hbWVfKCIgSW5mZXJlbmNlIHZhbHVlIiwwKSwxPHRoaXMubnVtTW9kZWxzJiYodGhpcy4kLmRpdmUudmVydGljYWxQb3NpdGlvbj10aGlzLnN0cldpdGhNb2RlbE5hbWVfKCIgSW5mZXJlbmNlIHZhbHVlIiwxKSkpOnRoaXMuaXNCaW5hcnlDbGFzc2lmaWNhdGlvbl8odGhpcy5tb2RlbFR5cGUsdGhpcy5tdWx0aUNsYXNzKSYmKDE9PXRoaXMubnVtTW9kZWxzP3RoaXMuJC5kaXZlLnZlcnRpY2FsUG9zaXRpb249CnRoaXMuc3RyV2l0aE1vZGVsTmFtZV8oIiBJbmZlcmVuY2Ugc2NvcmUiLDApOih0aGlzLiQuZGl2ZS5ob3Jpem9udGFsUG9zaXRpb249dGhpcy5zdHJXaXRoTW9kZWxOYW1lXygiIEluZmVyZW5jZSBzY29yZSIsMCksdGhpcy4kLmRpdmUudmVydGljYWxQb3NpdGlvbj10aGlzLnN0cldpdGhNb2RlbE5hbWVfKCIgSW5mZXJlbmNlIHNjb3JlIiwxKSkpKTt0aGlzLnVwZGF0ZWRFeGFtcGxlPSExfX0sbmV3QXR0cmlidXRpb25zXzpmdW5jdGlvbihhKXtpZigwIT1PYmplY3Qua2V5cyhhKS5sZW5ndGgpe2ZvcihsZXQgYz0wO2M8YS5pbmRpY2VzLmxlbmd0aDtjKyspe2NvbnN0IGQ9YS5pbmRpY2VzW2NdLGY9T2JqZWN0LmFzc2lnbih7fSx0aGlzLnZpc2RhdGFbZF0pLGc9bnVsbD09YS5hdHRyaWJ1dGlvbnNbMF0/e306YS5hdHRyaWJ1dGlvbnNbMF1bY10sbD1PYmplY3Qua2V5cyhnKTtmb3IobGV0IGs9MDtrPGwubGVuZ3RoO2srKylBcnJheS5pc0FycmF5KGdbbFtrXV0pJiYyPT1nW2xba11dLmxlbmd0aCYmCkFycmF5LmlzQXJyYXkoZ1tsW2tdXVswXSk/KGZbImF0dHJpYnV0aW9uc19fIitsW2tdKyJfa2V5cyJdPWdbbFtrXV1bMF0sZlsiYXR0cmlidXRpb25zX18iK2xba10rIl92YWx1ZXMiXT1nW2xba11dWzFdKTpmWyJhdHRyaWJ1dGlvbnNfXyIrbFtrXV09Z1tsW2tdXTt0aGlzLnNldChgdmlzZGF0YS4ke2R9YCxmKX10aGlzLnNldEF0dHJpYnV0aW9ucygpO3RoaXMucmVmcmVzaERpdmVfKCl9fSxzZXRJdGVtSW5mZXJlbmNlVmFsdWU6ZnVuY3Rpb24oYSxjLGQsZil7dmFyIGc9dGhpcy5leGFtcGxlc0FuZEluZmVyZW5jZXNbY10uaW5mZXJlbmNlcy5sZW5ndGgtMTtpZih0aGlzLm11bHRpQ2xhc3MpZm9yKGQ9MDtkPHRoaXMubnVtTW9kZWxzO2QrKylhW3RoaXMuc3RyV2l0aE1vZGVsTmFtZV8oIiBJbmZlcmVuY2UgdmFsdWUiLGQpXT10aGlzLmV4YW1wbGVzQW5kSW5mZXJlbmNlc1tjXS5pbmZlcmVuY2VzW2ddW2RdWzBdLmxhYmVsO2Vsc2UgZm9yKGc9dGhpcy5vdmVyYWxsVGhyZXNob2xkcywKMCE9PWQubGVuZ3RoJiYoZz10aGlzLmZlYXR1cmVWYWx1ZVRocmVzaG9sZHNNYXBbdGhpcy5jcmVhdGVDb21iaW5lZFZhbHVlU3RyaW5nXyhhW2RdLGFbZl0pXS50aHJlc2hvbGQpLGQ9MDtkPHRoaXMubnVtTW9kZWxzO2QrKylmPXRoaXMuZ2V0Q2xhc3NpZmljYXRpb25CZXN0Tm9uWmVybyhjLGQpLGFbdGhpcy5zdHJXaXRoTW9kZWxOYW1lXygiIEluZmVyZW5jZSBzY29yZSIsZCldPWYuc2NvcmUsYVt0aGlzLnN0cldpdGhNb2RlbE5hbWVfKCIgSW5mZXJlbmNlIHZhbHVlIixkKV09Zi5zY29yZT49Z1tkXS50aHJlc2hvbGQ/Zi5sYWJlbDp0aGlzLmRlZmF1bHRJbmZlcmVuY2VMYWJlbC50b1N0cmluZygpfSxjcmVhdGVDb21iaW5lZFZhbHVlU3RyaW5nXzpmdW5jdGlvbihhLGMpe2E9bnVsbD09YT8iIjphO3JldHVybiBudWxsPT1jfHwiIj09Yz9hOmErKCIvIitjKX0sdXBkYXRlQ29ycmVjdG5lc3NfOmZ1bmN0aW9uKCl7aWYodGhpcy5zZWxlY3RlZExhYmVsRmVhdHVyZSYmdGhpcy5leGFtcGxlc0FuZEluZmVyZW5jZXMpZm9yKGxldCBhPQowO2E8dGhpcy5leGFtcGxlc0FuZEluZmVyZW5jZXMubGVuZ3RoO2ErKyl7Y29uc3QgYz10aGlzLnZpc2RhdGFbYV07Zm9yKGxldCBkPTA7ZDx0aGlzLm51bU1vZGVscztkKyspImNsYXNzaWZpY2F0aW9uIj09dGhpcy5tb2RlbFR5cGU/Y1t0aGlzLnN0cldpdGhNb2RlbE5hbWVfKCIgSW5mZXJlbmNlIGNvcnJlY3QiLGQpXT1jW3RoaXMuc2VsZWN0ZWRMYWJlbEZlYXR1cmVdPT1jW3RoaXMuc3RyV2l0aE1vZGVsTmFtZV8oIiBJbmZlcmVuY2UgdmFsdWUiLGQpXT8iY29ycmVjdCI6ImluY29ycmVjdCI6KGNbdGhpcy5zdHJXaXRoTW9kZWxOYW1lXygiIEluZmVyZW5jZSBlcnJvciIsZCldPWNbdGhpcy5zdHJXaXRoTW9kZWxOYW1lXygiIEluZmVyZW5jZSB2YWx1ZSIsZCldLWNbdGhpcy5zZWxlY3RlZExhYmVsRmVhdHVyZV0sY1t0aGlzLnN0cldpdGhNb2RlbE5hbWVfKCIgSW5mZXJlbmNlIGFic29sdXRlIGVycm9yIixkKV09TWF0aC5hYnMoY1t0aGlzLnN0cldpdGhNb2RlbE5hbWVfKCIgSW5mZXJlbmNlIGVycm9yIiwKZCldKSxjW3RoaXMuc3RyV2l0aE1vZGVsTmFtZV8oIiBJbmZlcmVuY2Ugc3F1YXJlZCBlcnJvciIsZCldPWNbdGhpcy5zdHJXaXRoTW9kZWxOYW1lXygiIEluZmVyZW5jZSBlcnJvciIsZCldKmNbdGhpcy5zdHJXaXRoTW9kZWxOYW1lXygiIEluZmVyZW5jZSBlcnJvciIsZCldKX19LGluZmVyQ2xpY2tlZF86ZnVuY3Rpb24oKXtjb25zdCBhPXtpbmZlcmVuY2VfYWRkcmVzczp0aGlzLmluZmVyZW5jZUFkZHJlc3MsbW9kZWxfbmFtZTp0aGlzLm1vZGVsTmFtZSxtb2RlbF90eXBlOnRoaXMubW9kZWxUeXBlLG1vZGVsX3ZlcnNpb246dGhpcy5tb2RlbFZlcnNpb24sbW9kZWxfc2lnbmF0dXJlOnRoaXMubW9kZWxTaWduYXR1cmUsbGFiZWxfdm9jYWJfcGF0aDp0aGlzLmxhYmVsVm9jYWJQYXRoLHVzZV9wcmVkaWN0OnRoaXMudXNlUHJlZGljdEFwaSxwcmVkaWN0X291dHB1dF90ZW5zb3I6dGhpcy5wcmVkaWN0T3V0cHV0VGVuc29yLHByZWRpY3RfaW5wdXRfdGVuc29yOnRoaXMucHJlZGljdElucHV0VGVuc29yfTsKdGhpcy5zcGlubmVySGlkZGVuXz0hMTtpZighdGhpcy5sb2NhbCl7Y29uc3QgYz10aGlzLm1ha2VVcmxfKCIvZGF0YS9wbHVnaW4vd2hhdGlmL2luZmVyIixhKTt0aGlzLm1ha2VBc3luY1JlcXVlc3RfKGMsZD0+e3RoaXMuc3Bpbm5lckhpZGRlbl89ITA7dGhpcy5sYWJlbFZvY2FiPUpTT04ucGFyc2UoZC52YWx1ZS52b2NhYik7dGhpcy5pbmZlcmVuY2VzPUpTT04ucGFyc2UoZC52YWx1ZS5pbmZlcmVuY2VzKX0sbnVsbCwibW9kZWwgaW5mZXJlbmNlIil9dGhpcy5maXJlKCJpbmZlci1leGFtcGxlcyIsYSl9LGV4YW1wbGVDaGFuZ2VfOmZ1bmN0aW9uKGEpe3ZhciBjPTA9PXRoaXMuc2VsZWN0ZWQubGVuZ3RoPzA6dGhpcy5zZWxlY3RlZFswXTt0aGlzLnNldCgic2VsZWN0ZWRFeGFtcGxlQW5kSW5mZXJlbmNlLmNoYW5nZWQiLCEwKTt0aGlzLnVwZGF0ZUV4YW1wbGVfKEpTT04uc3RyaW5naWZ5KGEudGFyZ2V0Lmpzb24pLGMpO3RoaXMuJCQoIiMiK3RoaXMuZ2V0SW5mZXJlbmNlSG9sZGVySWRfKCkpLmluZmVyZW5jZT0KbnVsbDt0aGlzLnZpc2RhdGFbY109dGhpcy5leGFtcGxlVG9EYXRhUG9pbnRfKGEudGFyZ2V0Lmpzb24sYyk7dGhpcy5zaG93TmVhcmVzdENvdW50ZXJmYWN0dWFsPSExO3RoaXMucmVmcmVzaERpdmVfKCk7dGhpcy51cGRhdGVkRXhhbXBsZT0hMDt0aGlzLnNlbGVjdGVkRGF0YVVwZGF0ZWRfKCl9LHJlZnJlc2hEaXZlSW1wbF86ZnVuY3Rpb24oKXt2YXIgYT10aGlzLnZpc2RhdGE7dGhpcy52aXNkYXRhPVtdO3RoaXMudmlzZGF0YT1hO3RoaXMuc2VsZWN0ZWRFeGFtcGxlTWF4PXRoaXMudmlzZGF0YS5sZW5ndGgtMTt0aGlzLiQub3ZlcnZpZXcucHJvdG9JbnB1dD10aGlzLiQub3ZlcnZpZXcuZ2V0U3RhdHNQcm90byhbe25hbWU6IiIsZGF0YTphfV0pO3RoaXMuY2FsY3VsYXRlRGlzdGFuY2VTdGF0c18odGhpcy4kLm92ZXJ2aWV3LnByb3RvSW5wdXQudG9PYmplY3QoKSk7YT10aGlzLiQuZGl2ZS5zZWxlY3RlZERhdGE7dGhpcy4kLmRpdmUuc2VsZWN0ZWREYXRhPVtdO3RoaXMuJC5kaXZlLnNlbGVjdGVkRGF0YT0KYTt0aGlzLnVwZGF0ZVNwcml0ZSgpfSxyZWZyZXNoRGl2ZV86ZnVuY3Rpb24oKXt0aGlzLmRlYm91bmNlKCJyZWZyZXNoRGl2ZURlYm91bmNlIiwoKT0+dGhpcy5yZWZyZXNoRGl2ZUltcGxfKCksNTAwKX0sY2FsY3VsYXRlRGlzdGFuY2VTdGF0c186ZnVuY3Rpb24oYSl7dGhpcy5kaXN0YW5jZVN0YXRzXz17fTtmb3IobGV0IGM9MDtjPGEuZGF0YXNldHNMaXN0WzBdLmZlYXR1cmVzTGlzdC5sZW5ndGg7YysrKXtjb25zdCBkPWEuZGF0YXNldHNMaXN0WzBdLmZlYXR1cmVzTGlzdFtjXSxmPWQubmFtZTt0aGlzLmRpc3RhbmNlU3RhdHNfW2ZdPXt9O2lmKGQubnVtU3RhdHMpdGhpcy5kaXN0YW5jZVN0YXRzX1tmXS5zdGREZXY9ZC5udW1TdGF0cy5zdGREZXY7ZWxzZXtsZXQgZz0wO2NvbnN0IGw9ZC5zdHJpbmdTdGF0cy5yYW5rSGlzdG9ncmFtLmJ1Y2tldHNMaXN0O2ZvcihsZXQgaz0wO2s8bC5sZW5ndGg7aysrKXtjb25zdCBtPWxba10uc2FtcGxlQ291bnQvZC5zdHJpbmdTdGF0cy5jb21tb25TdGF0cy5udW1Ob25NaXNzaW5nOwpnKz1tKm19dGhpcy5kaXN0YW5jZVN0YXRzX1tmXS5wcm9iU2FtZVZhbHVlPWd9fX0sdXBkYXRlRXhhbXBsZV86ZnVuY3Rpb24oYSxjKXt0aGlzLmZpcmUoInVwZGF0ZS1leGFtcGxlIix7ZXhhbXBsZTphLGluZGV4OmN9KTtpZighdGhpcy5sb2NhbCl7dmFyIGQ9dGhpcy5tYWtlVXJsXygiL2RhdGEvcGx1Z2luL3doYXRpZi91cGRhdGVfZXhhbXBsZSIsbnVsbCk7dGhpcy5tYWtlQXN5bmNSZXF1ZXN0XyhkLG51bGwse2V4YW1wbGU6YSxpbmRleDpjfSwiZGF0YXBvaW50IHVwZGF0ZSIpfX0sZ2V0SW5mZXJlbmNlSG9sZGVySWRfOmZ1bmN0aW9uKCl7cmV0dXJuImluZmVyZW5jZV8ifSxtYWtlVXJsXzpmdW5jdGlvbihhLGMpe2MmJihhKz0iPyIrT2JqZWN0LmtleXMoYykubWFwKGQ9PmQrIlx4M2QiK2VuY29kZVVSSUNvbXBvbmVudChjW2RdKSkuam9pbigiXHgyNiIpKTtyZXR1cm4gYX0sc2hvd1RvYXN0XzpmdW5jdGlvbihhKXt2YXIgYz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJwYXBlci10b2FzdCIpOwpjLmR1cmF0aW9uPTFFNDtkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGMpO2MudGV4dD1hO2Muc2hvdygpO2NvbnNvbGUuZXJyb3IoYSl9LGhhbmRsZUVycm9yOmZ1bmN0aW9uKGEpe3RoaXMuc2hvd1RvYXN0XyhhKTt0aGlzLmV4YW1wbGVTdGF0dXNTdHI9YTt0aGlzLnNwaW5uZXJIaWRkZW5fPSEwfSxtYWtlQXN5bmNSZXF1ZXN0XzpmdW5jdGlvbihhLGMsZCxmLGc9KCk9Pnt9KXtjb25zdCBsPXRoaXMuX2NhbmNlbGxlci5jYW5jZWxsYWJsZShrPT57ay5jYW5jZWxsZWR8fChrLnZhbHVlJiZrLnZhbHVlLmVycm9yPyh0aGlzLmhhbmRsZUVycm9yKGsudmFsdWUuZXJyb3IpLG51bGwhPWcmJmcoKSk6YyYmYyhrKSl9KTt0aGlzLl9yZXF1ZXN0TWFuYWdlci5yZXF1ZXN0KGEsZCkudGhlbihsKS5jYXRjaChrPT57dGhpcy5oYW5kbGVFcnJvcihgUmVxdWVzdCBmb3IgJHtmfSBmYWlsZWQ6ICR7a31gKTtudWxsIT1nJiZnKCl9KX0sZGF0YVBvaW50VmFsdWVGcm9tRmVhdHVyZV86ZnVuY3Rpb24oYSwKYyl7bGV0IGQ9bnVsbDthLmludDY0TGlzdD9kPWEuaW50NjRMaXN0LnZhbHVlOmEuZmxvYXRMaXN0P2Q9YS5mbG9hdExpc3QudmFsdWU6YS5ieXRlc0xpc3QmJmEuYnl0ZXNMaXN0LnZhbHVlJiYoZD1hLmJ5dGVzTGlzdC52YWx1ZS5tYXAoZj0+e2lmKDFFNTxmLmxlbmd0aClyZXR1cm4iRVJST1I6IHN0cmluZyBub3QgZGVjb2RlZCBkdWUgdG8gbGVuZ3RoIjt0cnl7cmV0dXJuIGF0b2IoZil9Y2F0Y2goZyl7cmV0dXJuIGNvbnNvbGUuZXJyb3IoIkVycm9yIGRlY29kaW5nIHN0cmluZzogIitnKSwiRVJST1I6IGVycm9yIGRlY29kaW5nIHN0cmluZyJ9fSkpO3JldHVybiBjJiZkJiYxPT1kLmxlbmd0aD8oYT1kWzBdLGlzTmFOKGEpP2E6TnVtYmVyKGEpKTpkfSxleGFtcGxlVG9EYXRhUG9pbnRfOmZ1bmN0aW9uKGEsYyl7Y29uc3QgZD17fTt2YXIgZj1hLmZlYXR1cmVzfHxhLmNvbnRleHQsZz1mJiYiZmVhdHVyZSJpbiBmP09iamVjdC5rZXlzKGYuZmVhdHVyZSk6W107Zm9yKHZhciBsIGluIGcpe3ZhciBrPQpnWytsXTtpZihrIT10aGlzLmltYWdlRmVhdHVyZU5hbWUpe3ZhciBtPXRoaXMuZGF0YVBvaW50VmFsdWVGcm9tRmVhdHVyZV8oZi5mZWF0dXJlW2tdLCEwKTtudWxsIT1tJiYoZFtrXT1tKX19Zj0iZmVhdHVyZUxpc3RzImluIGE/T2JqZWN0LmtleXMoYS5mZWF0dXJlTGlzdHMuZmVhdHVyZUxpc3QpOltdO2Zvcihjb25zdCBwIGluIGYpe2c9ZlsrcF07bD1hLmZlYXR1cmVMaXN0cy5mZWF0dXJlTGlzdFtnXS5mZWF0dXJlO2s9W107Zm9yKG09MDttPGwubGVuZ3RoO20rKyl7Y29uc3QgcT10aGlzLmRhdGFQb2ludFZhbHVlRnJvbUZlYXR1cmVfKGxbbV0sITEpO3EmJihrPWsuY29uY2F0KHEpKX1kW2ddPWt9ZFsiIERhdGFwb2ludCBJRCJdPWM7cmV0dXJuIGR9LGdldEV4YW1wbGVzQW5kQ2xvc2VTZXR0aW5nc186ZnVuY3Rpb24oKXt0aGlzLnNldHRpbmdzQ2xpY2tlZF8oKTt0aGlzLnVwZGF0ZU51bWJlck9mTW9kZWxzKCk7dGhpcy5nZXRFeGFtcGxlc18oKX0sc2hvd01vZGVsTnVtYmVyc186ZnVuY3Rpb24oKXtyZXR1cm4gMT49CnRoaXMubnVtTW9kZWxzfSx1cGRhdGVFeGFtcGxlQ29udGVudHM6ZnVuY3Rpb24oYSxjKXt0aGlzLmV4YW1wbGVTdGF0dXNTdHI9YS5sZW5ndGgrIiBkYXRhcG9pbnRzIGxvYWRlZCI7dGhpcy4kLm5vZXhhbXBsZXMuc3R5bGUuZGlzcGxheT0ibm9uZSI7dGhpcy5zcGlubmVySGlkZGVuXz0hMDt0aGlzLmV4YW1wbGVzQW5kSW5mZXJlbmNlcz1hLm1hcChmdW5jdGlvbihmKXtyZXR1cm57ZXhhbXBsZTpKU09OLnBhcnNlKGYpLGNoYW5nZWQ6ITEsb3JpZzpKU09OLnBhcnNlKGYpfX0pO3RoaXMudXBkYXRlZEV4YW1wbGU9ITA7Y29uc3QgZD10aGlzO3RoaXMudmlzZGF0YT10aGlzLmV4YW1wbGVzQW5kSW5mZXJlbmNlcy5tYXAoZnVuY3Rpb24oZixnKXtyZXR1cm4gZC5leGFtcGxlVG9EYXRhUG9pbnRfKGYuZXhhbXBsZSxnKX0pO3RoaXMuJC5kaXZlLmF0bGFzVXJsPSIiO3RoaXMuJC5kaXZlLmltYWdlRmllbGROYW1lPSIiO3RoaXMuaGFzU3ByaXRlPWM7dGhpcy5yZWZyZXNoRGl2ZV8oKTsKdGhpcy5zaG91bGREaXNhYmxlSW5mZXJCdXR0b25fKHRoaXMuZXhhbXBsZXNBbmRJbmZlcmVuY2VzLHRoaXMubW9kZWxOYW1lLHRoaXMuaW5mZXJlbmNlQWRkcmVzcyx0aGlzLnVwZGF0ZWRFeGFtcGxlKXx8dGhpcy5pbmZlckNsaWNrZWRfKCk7dGhpcy5zZXRJbmZlcmVuY2VGcm9tRXhhbXBsZURhdGEoKX0sc2V0SW5mZXJlbmNlRnJvbUV4YW1wbGVEYXRhOmZ1bmN0aW9uKCl7aWYoMDx0aGlzLnZpc2RhdGEubGVuZ3RoKWlmKG51bGwhPXRoaXMudmlzZGF0YVswXS5wcmVkaWN0aW9uc19fcHJvYmFiaWxpdGllcyl7dmFyIGE9e30sYz1BcnJheS5hcHBseShudWxsLHtsZW5ndGg6dGhpcy52aXNkYXRhLmxlbmd0aH0pLm1hcChOdW1iZXIuY2FsbCxOdW1iZXIpO2EuaW5kaWNlcz1jO2EucmVzdWx0cz1be2NsYXNzaWZpY2F0aW9uUmVzdWx0OntjbGFzc2lmaWNhdGlvbnM6W119fV07Zm9yKHZhciBkPTA7ZDxjLmxlbmd0aDtkKyspYS5yZXN1bHRzWzBdLmNsYXNzaWZpY2F0aW9uUmVzdWx0LmNsYXNzaWZpY2F0aW9uc1tkXT0Ke2NsYXNzZXM6W3tsYWJlbDoiMCIsc2NvcmU6dGhpcy52aXNkYXRhW2RdLnByZWRpY3Rpb25zX19wcm9iYWJpbGl0aWVzWzBdfSx7bGFiZWw6IjEiLHNjb3JlOnRoaXMudmlzZGF0YVtkXS5wcmVkaWN0aW9uc19fcHJvYmFiaWxpdGllc1sxXX1dfTt0aGlzLmluZmVyZW5jZXM9YX1lbHNlIGlmKG51bGwhPXRoaXMudmlzZGF0YVswXS5wcmVkaWN0aW9ucyl7YT17fTtjPUFycmF5LmFwcGx5KG51bGwse2xlbmd0aDp0aGlzLnZpc2RhdGEubGVuZ3RofSkubWFwKE51bWJlci5jYWxsLE51bWJlcik7YS5pbmRpY2VzPWM7YS5yZXN1bHRzPVt7cmVncmVzc2lvblJlc3VsdDp7cmVncmVzc2lvbnM6W119fV07Zm9yKGQ9MDtkPGMubGVuZ3RoO2QrKylhLnJlc3VsdHNbMF0ucmVncmVzc2lvblJlc3VsdC5yZWdyZXNzaW9uc1tkXT17dmFsdWU6dGhpcy52aXNkYXRhW2RdLnByZWRpY3Rpb25zfTt0aGlzLmluZmVyZW5jZXM9YX19LGdldEV4YW1wbGVzXzpmdW5jdGlvbigpe3ZhciBhPXRoaXMubWFrZVVybF8oIi9kYXRhL3BsdWdpbi93aGF0aWYvZXhhbXBsZXNfZnJvbV9wYXRoIiwKe2V4YW1wbGVzX3BhdGg6dGhpcy5leGFtcGxlc1BhdGgsbWF4X2V4YW1wbGVzOnRoaXMubWF4RXhhbXBsZXMsc2FtcGxpbmdfb2Rkczp0aGlzLnNhbXBsaW5nT2RkcyxzZXF1ZW5jZV9leGFtcGxlczp0aGlzLnNlcXVlbmNlRXhhbXBsZXN9KTt0aGlzLmV4YW1wbGVTdGF0dXNTdHI9IkxvYWRpbmcgZGF0YXBvaW50cy4uLiI7dGhpcy5tYWtlQXN5bmNSZXF1ZXN0XyhhLGM9Pnt0aGlzLnVwZGF0ZUV4YW1wbGVDb250ZW50cyhjLnZhbHVlLmV4YW1wbGVzLGMudmFsdWUuc3ByaXRlKX0sbnVsbCwiZGF0YXBvaW50IGxvYWQiKTt0aGlzLnNwaW5uZXJIaWRkZW5fPSExfSx1cGRhdGVTcHJpdGU6ZnVuY3Rpb24oKXt0aGlzLmhhc1Nwcml0ZSYmKHRoaXMuJC5kaXZlLmF0bGFzVXJsPW51bGwsdGhpcy4kLmRpdmUuYXRsYXNVcmw9dGhpcy5sb2NhbD90aGlzLmxvY2FsQXRsYXNVcmw6dGhpcy5tYWtlVXJsXygiL2RhdGEvcGx1Z2luL3doYXRpZi9zcHJpdGUiLHt9KSl9LHNlbGVjdGVkRGF0YVVwZGF0ZWRfOmZ1bmN0aW9uKCl7dGhpcy5zZWxlY3RlZEV4YW1wbGVOdW09CjA8dGhpcy5zZWxlY3RlZC5sZW5ndGg/dGhpcy5zZWxlY3RlZFswXToiIjt0aGlzLnZpc2RhdGEmJjA8dGhpcy52aXNkYXRhLmxlbmd0aCYmKHRoaXMucGFydGlhbERlcFBsb3RQZW5kaW5nRmVhdHVyZXM9W10pfSxjb3B5RGF0YXBvaW50XzpmdW5jdGlvbigpe3ZhciBhPUpTT04uc3RyaW5naWZ5KHRoaXMuc2VsZWN0ZWRFeGFtcGxlQW5kSW5mZXJlbmNlLmV4YW1wbGUpO2E9e2V4YW1wbGU6SlNPTi5wYXJzZShhKSxjaGFuZ2VkOiExLG9yaWc6SlNPTi5wYXJzZShhKX07dGhpcy5leGFtcGxlc0FuZEluZmVyZW5jZXMucHVzaChhKTt0aGlzLnNlbGVjdGVkRXhhbXBsZUFuZEluZmVyZW5jZT1hO3RoaXMudmlzZGF0YS5wdXNoKHRoaXMuZXhhbXBsZVRvRGF0YVBvaW50XyhhLmV4YW1wbGUsdGhpcy52aXNkYXRhLmxlbmd0aCkpO2E9dGhpcy5zZWxlY3RlZFswXTt0aGlzLnNob3dOZWFyZXN0Q291bnRlcmZhY3R1YWw9ITE7dGhpcy5zZWxlY3RlZFswXT10aGlzLnZpc2RhdGEubGVuZ3RoLQoxO3RoaXMuc2VsZWN0ZWREYXRhVXBkYXRlZF8oKTt0aGlzLnVwZGF0ZWRFeGFtcGxlPSEwO3RoaXMuZmlyZSgiZHVwbGljYXRlLWV4YW1wbGUiLHtpbmRleDphfSk7dGhpcy5sb2NhbD90aGlzLnJlZnJlc2hEaXZlXygpOihhPXRoaXMubWFrZVVybF8oIi9kYXRhL3BsdWdpbi93aGF0aWYvZHVwbGljYXRlX2V4YW1wbGUiLHtpbmRleDphfSksdGhpcy5tYWtlQXN5bmNSZXF1ZXN0XyhhLCgpPT57dGhpcy5yZWZyZXNoRGl2ZV8oKX0sbnVsbCwiZGF0YXBvaW50IGR1cGxpY2F0aW9uIikpfSxkZWxldGVEYXRhcG9pbnREaWFsb2dfOmZ1bmN0aW9uKCl7dGhpcy4kLmRlbGV0ZWRpYWxvZy5vcGVuKCl9LGRlbGV0ZURhdGFwb2ludF86ZnVuY3Rpb24oKXt2YXIgYT10aGlzLnNlbGVjdGVkWzBdO3RoaXMuZXhhbXBsZXNBbmRJbmZlcmVuY2VzLnNwbGljZShhLDEpO3RoaXMudmlzZGF0YS5zcGxpY2UoYSwxKTtmb3IobGV0IGM9YTtjPHRoaXMudmlzZGF0YS5sZW5ndGg7YysrKXRoaXMudmlzZGF0YVtjXVsiIERhdGFwb2ludCBJRCJdPQpjO3RoaXMuY29tcGFyZWRJbmRpY2VzPVtdO3RoaXMuc2VsZWN0ZWQ9W107dGhpcy5zZWxlY3RlZERhdGFVcGRhdGVkXygpO3RoaXMuZmlyZSgiZGVsZXRlLWV4YW1wbGUiLHtpbmRleDphfSk7dGhpcy4kLmRpdmUuc2VsZWN0ZWRJbmRpY2VzPVtdO3RoaXMubG9jYWw/dGhpcy5yZWZyZXNoRGl2ZV8oKTooYT10aGlzLm1ha2VVcmxfKCIvZGF0YS9wbHVnaW4vd2hhdGlmL2RlbGV0ZV9leGFtcGxlIix7aW5kZXg6YX0pLHRoaXMubWFrZUFzeW5jUmVxdWVzdF8oYSwoKT0+e3RoaXMucmVmcmVzaERpdmVfKCl9LG51bGwsImRhdGFwb2ludCBkZWxldGUiKSl9LHNob3VsZERpc2FibGVSZXNldF86ZnVuY3Rpb24oYSl7cmV0dXJuIWF9LHJlc2V0RGF0YXBvaW50XzpmdW5jdGlvbigpe3RoaXMuc2V0KCJzZWxlY3RlZEV4YW1wbGVBbmRJbmZlcmVuY2UuZXhhbXBsZSIse30pO3JlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e3RoaXMuc2VsZWN0ZWRFeGFtcGxlQW5kSW5mZXJlbmNlLmNoYW5nZWQ9CiExO2NvbnN0IGE9SlNPTi5zdHJpbmdpZnkodGhpcy5zZWxlY3RlZEV4YW1wbGVBbmRJbmZlcmVuY2Uub3JpZyk7dGhpcy5zZXQoInNlbGVjdGVkRXhhbXBsZUFuZEluZmVyZW5jZS5leGFtcGxlIixKU09OLnBhcnNlKGEpKTt0aGlzLnZpc2RhdGFbdGhpcy5zZWxlY3RlZFswXV09dGhpcy5leGFtcGxlVG9EYXRhUG9pbnRfKHRoaXMuc2VsZWN0ZWRFeGFtcGxlQW5kSW5mZXJlbmNlLmV4YW1wbGUsdGhpcy5zZWxlY3RlZFswXSk7dGhpcy51cGRhdGVkRXhhbXBsZT0hMDt0aGlzLnVwZGF0ZUV4YW1wbGVfKGEsdGhpcy5zZWxlY3RlZFswXSk7dGhpcy5yZWZyZXNoRGl2ZV8oKX0pfSxhZGRDaGFydDpmdW5jdGlvbihhLGMsZCl7bGV0IGYsZz1kO2lmKHRoaXMuaXNNdWx0aUNsYXNzXyh0aGlzLm1vZGVsVHlwZSx0aGlzLm11bHRpQ2xhc3MpKXtnPVtdO2ZvcihsZXQgaz0wO2s8ZC5sZW5ndGg7aysrKXtsZXQgbT17fTtpZihPYmplY3Qua2V5cyhkW2tdKS5sZW5ndGg+TnVtYmVyKHRoaXMubWF4SW5mZXJlbmNlRW50cmllc1BlclJ1bikpe3ZhciBsPQp0aGlzLmV4YW1wbGVzQW5kSW5mZXJlbmNlc1t0aGlzLnNlbGVjdGVkJiYwPHRoaXMuc2VsZWN0ZWQubGVuZ3RoP3RoaXMuc2VsZWN0ZWRbMF06MF07bD1sLmluZmVyZW5jZXNbbC5pbmZlcmVuY2VzLmxlbmd0aC0xXVtrXS5zbGljZSgwLHRoaXMubWF4SW5mZXJlbmNlRW50cmllc1BlclJ1bik7Zm9yKGxldCBwPTA7cDxsLmxlbmd0aDtwKyspe2NvbnN0IHE9bFtwXS5sYWJlbDttW3FdPWRba11bcV19fWVsc2UgbT1kW2tdO2cucHVzaChtKX19Im51bWVyaWMiPT1hP2Y9dGhpcy5tYWtlTGluZUNoYXJ0KGMsZyk6ImNhdGVnb3JpY2FsIj09YT9mPXRoaXMubWFrZUJhckNoYXJ0KGMsZyk6Y29uc29sZS5lcnJvcigiVW5rbm93biBjaGFydFR5cGU6ICIrYSk7YT10aGlzLmZlYXR1cmVDb250YWluZXJCeU5hbWUoYykucXVlcnlTZWxlY3RvcigiLnRmLWNhdGVnb3J5LXBhbmUtY29udGVudCIpO1BvbHltZXIuZG9tKGEpLmFwcGVuZENoaWxkKGYpO2M9dGhpcy5wYXJ0aWFsRGVwUGxvdFBlbmRpbmdGZWF0dXJlcy5pbmRleE9mKGMpOwotMTxjJiZ0aGlzLnBhcnRpYWxEZXBQbG90UGVuZGluZ0ZlYXR1cmVzLnNwbGljZShjLDEpfSxnZXRTaW1wbGVBeGlzRm9ybWF0dGVyOmZ1bmN0aW9uKGEpe3JldHVybiBQbG90dGFibGUuRm9ybWF0dGVycy5nZW5lcmFsKGEpfSxtYWtlQmFyQ2hhcnQ6ZnVuY3Rpb24oYSxjKXtmdW5jdGlvbiBkKHIsdCl7cmV0dXJue3g6ci5zdGVwPT10P3Iuc3RlcCsiIC0gb3JpZ2luYWwgdmFsdWUiOnIuc3RlcCx5OnIuc2NhbGFyfX1mdW5jdGlvbiBmKHIsdCx2KXtyZXR1cm57eDpyLnN0ZXA9PXQ/ci5zdGVwKyIgLSBvcmlnaW5hbCB2YWx1ZSI6ci5zdGVwLHNjYWxhcjpyLnNjYWxhcix5OnZ9fWxldCBnPSIiO3ZhciBsPWNbMF07IXRoaXMuZ2xvYmFsUGRQbG90cyYmKGE9dGhpcy5jcmVhdGVQZEVudHJ5Rm9yQ3VycmVudFZhbHVlKGEsbCwwKSkmJihnPWEuc3RlcCk7Y29uc3Qgaz17fSxtPXt9O18uZm9yRWFjaChjLChyLHQpPT57Xy5mb3JFYWNoKHIsKHYsQSk9PnttW3RoaXMuZm9ybWF0Q2hhcnRLZXkoQSwKdCxjLmxlbmd0aCldPV8ubWFwKHYseT0+ZCh5LGcpKS5zb3J0KCh5LHgpPT54LnkteS55KTt0aGlzLmlzQmluYXJ5Q2xhc3NpZmljYXRpb25fKHRoaXMubW9kZWxUeXBlLHRoaXMubXVsdGlDbGFzcykmJihrW3RoaXMuZm9ybWF0Q2hhcnRLZXkoQSx0LGMubGVuZ3RoKV09Xy5tYXAodix5PT5mKHksZyx0aGlzLm92ZXJhbGxUaHJlc2hvbGRzW3RdLnRocmVzaG9sZCkpLnNvcnQoKHkseCk9Pnguc2NhbGFyLXkuc2NhbGFyKSl9KX0pO2NvbnN0IHA9Ym0ubXVsdGlzY2FsZUZvcm1hdHRlcihibS5ZX1RPT0xUSVBfRk9STUFUVEVSX1BSRUNJU0lPTik7bD1be3RpdGxlOiJJbmZlcmVuY2UgdmFsdWUiLGV2YWx1YXRlOnI9PntyPXRoaXMuc3BsaXRDaGFydEtleShyLmtleSxjLmxlbmd0aCkubGFiZWw7aWYoIWlzTmFOKHIpJiYwPHIubGVuZ3RoJiZ0aGlzLmxhYmVsVm9jYWIpe2NvbnN0IHQ9K3I7dDx0aGlzLmxhYmVsVm9jYWIubGVuZ3RoJiYwPD10JiYocis9IiAoIit0aGlzLmxhYmVsVm9jYWJbdF0rCiIpIil9cmV0dXJuIHJ9fSx7dGl0bGU6IkZlYXR1cmUgdmFsdWUiLGV2YWx1YXRlOnI9PnIudmFsdWUueH0se3RpdGxlOiJTY29yZSIsZXZhbHVhdGU6cj0+cChyLnZhbHVlLnkpfV07Mjw9Yy5sZW5ndGgmJmwucHVzaCh7dGl0bGU6Ik1vZGVsIixldmFsdWF0ZTpyPT50aGlzLnNwbGl0Q2hhcnRLZXkoci5rZXksYy5sZW5ndGgpLm1vZGVsfSk7YT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTthLmNsYXNzTGlzdC5hZGQoInBkLWhvbGRlciIpO2NvbnN0IHE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidnotYmFyLWNoYXJ0Iik7cS5jb2xvclNjYWxlPShuZXcgUGxvdHRhYmxlLlNjYWxlcy5Db2xvcikucmFuZ2UodGhpcy5wZFBsb3RDb2xvcnMpO3EubGluZXNDb2xvclNjYWxlPShuZXcgUGxvdHRhYmxlLlNjYWxlcy5Db2xvcikucmFuZ2UodGhpcy5wZFBsb3RUcmFuc3BhcmVudENvbG9ycyk7cS5kYXRhPW07cS5saW5lcz1rO3EudG9vbHRpcENvbHVtbnM9bDthLmFwcGVuZENoaWxkKHEpOwpsPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2wuY2xhc3NMaXN0LmFkZCgicGQteS1sYWJlbCIpO2wuaW5uZXJUZXh0PXRoaXMuaXNSZWdyZXNzaW9uXyh0aGlzLm1vZGVsVHlwZSk/IkluZmVyZW5jZSB2YWx1ZSI6IkluZmVyZW5jZSBzY29yZSI7YS5hcHBlbmRDaGlsZChsKTtyZXR1cm4gYX0sc3BsaXRDaGFydEtleTpmdW5jdGlvbihhLGMpe2xldCBkPWEsZj0iIjsyPD1jJiYoYz1hLmluZGV4T2YoIihtb2RlbCIpLGQ9YS5zdWJzdHJpbmcoMCxjKSxmPWEuc3Vic3RyaW5nKGMrNyxhLmxhc3RJbmRleE9mKCIpIikpKTtyZXR1cm57bGFiZWw6ZCxtb2RlbDpmfX0sZm9ybWF0Q2hhcnRLZXk6ZnVuY3Rpb24oYSxjLGQpe3JldHVybiAxPT1kP2E6YSsiIChtb2RlbCAiK3RoaXMuZ2V0TW9kZWxOYW1lXyhjKSsiKSJ9LG1ha2VMaW5lQ2hhcnQ6ZnVuY3Rpb24oYSxjKXtmdW5jdGlvbiBkKHYpe3JldHVybiBOdW1iZXIuaXNOYU4odik/Ik5hTiI6bSh2KX1jb25zdCBmPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwpmLmNsYXNzTGlzdC5hZGQoInBkLWhvbGRlciIpO2NvbnN0IGc9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidnotbGluZS1jaGFydDIiKSxsPVtdO3ZhciBrPVtdO2NvbnN0IG09Ym0ubXVsdGlzY2FsZUZvcm1hdHRlcihibS5ZX1RPT0xUSVBfRk9STUFUVEVSX1BSRUNJU0lPTik7ImNsYXNzaWZpY2F0aW9uIj09dGhpcy5tb2RlbFR5cGUmJihnLmRlZmF1bHRZUmFuZ2U9WzAsMV0pO3ZhciBwPVt7dGl0bGU6IkluZmVyZW5jZSB2YWx1ZSIsZXZhbHVhdGU6dj0+e3Y9dGhpcy5zcGxpdENoYXJ0S2V5KHYuZGF0YXNldC5tZXRhZGF0YSgpLm5hbWUsYy5sZW5ndGgpLmxhYmVsO2lmKCFpc05hTih2KSYmMDx2Lmxlbmd0aCYmdGhpcy5sYWJlbFZvY2FiKXtjb25zdCBBPSt2O0E8dGhpcy5sYWJlbFZvY2FiLmxlbmd0aCYmMDw9QSYmKHYrPSIgKCIrdGhpcy5sYWJlbFZvY2FiW0FdKyIpIil9cmV0dXJuIHZ9fSx7dGl0bGU6IkZlYXR1cmUgdmFsdWUiLGV2YWx1YXRlOnY9PmQodi5kYXR1bS5zdGVwKX0sCnt0aXRsZToiU2NvcmUiLGV2YWx1YXRlOnY9PmQodi5kYXR1bS5zY2FsYXIpfV07Mjw9Yy5sZW5ndGgmJnAucHVzaCh7dGl0bGU6Ik1vZGVsIixldmFsdWF0ZTp2PT50aGlzLnNwbGl0Q2hhcnRLZXkodi5kYXRhc2V0Lm1ldGFkYXRhKCkubmFtZSxjLmxlbmd0aCkubW9kZWx9KTtnLnRvb2x0aXBDb2x1bW5zPXA7Y29uc3QgcT1bXTtsZXQgcj0wO2ZvcihsZXQgdj0wO3Y8Yy5sZW5ndGg7disrKXtjb25zdCBBPWNbdl07cD1fLmtleXMoQSk7cj12KnAubGVuZ3RoO3AuZm9yRWFjaCh5PT57bC5wdXNoKHRoaXMucGRQbG90Q29sb3JzW3IrK10pO2NvbnN0IHg9dGhpcy5mb3JtYXRDaGFydEtleSh5LHYsYy5sZW5ndGgpO2cuc2V0U2VyaWVzRGF0YSh4LEFbeV0pO3EucHVzaCh4KX0pO3I9dipwLmxlbmd0aDtpZighdGhpcy5nbG9iYWxQZFBsb3RzJiYocD10aGlzLmNyZWF0ZVBkRW50cnlGb3JDdXJyZW50VmFsdWUoYSxBLHYpKSl7dmFyIHQ9dGhpcy5mb3JtYXRDaGFydEtleShfLmtleXMoQSlbMF0rCiIgLSBvcmlnaW5hbCB2YWx1ZSAiLHYsYy5sZW5ndGgpO2cuc2V0U2VyaWVzRGF0YSh0LFtwXSk7cS5wdXNoKHQpO2wucHVzaCh0aGlzLnBkUGxvdENvbG9yc1tyXS5icmlnaHRlcigpKX10aGlzLmlzQmluYXJ5Q2xhc3NpZmljYXRpb25fKHRoaXMubW9kZWxUeXBlLHRoaXMubXVsdGlDbGFzcykmJihwPXRoaXMuZm9ybWF0Q2hhcnRLZXkoImNsYXNzaWZpY2F0aW9uIHRocmVzaG9sZCIsdixjLmxlbmd0aCksdD1jWzBdW18ua2V5cyhjWzBdKV0ubWFwKHk9Pih7c3RlcDp5LnN0ZXAsc2NhbGFyOnRoaXMub3ZlcmFsbFRocmVzaG9sZHNbdl0udGhyZXNob2xkfSkpLGwucHVzaCh0aGlzLnBkUGxvdFRyYW5zcGFyZW50Q29sb3JzW3JdKSxnLnNldFNlcmllc0RhdGEocCx0KSxrLnB1c2gocCkscS5wdXNoKHApKX1nLmNvbG9yU2NhbGU9KG5ldyBQbG90dGFibGUuU2NhbGVzLkNvbG9yKS5yYW5nZShsKTtnLnhBeGlzRm9ybWF0dGVyPXRoaXMuZ2V0U2ltcGxlQXhpc0Zvcm1hdHRlcih0aGlzLmF4aXNQcmVjaXNpb24pOwpnLnlBeGlzRm9ybWF0dGVyPXRoaXMuZ2V0U2ltcGxlQXhpc0Zvcm1hdHRlcih0aGlzLmF4aXNQcmVjaXNpb24pO2cuc2VyaWVzV2l0aG91dFRvb2x0aXBzPWs7Zy5jb2xvclNjYWxlLmRvbWFpbihxKTtnLnNldFZpc2libGVTZXJpZXMocSk7Zi5hcHBlbmRDaGlsZChnKTtrPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2suY2xhc3NMaXN0LmFkZCgicGQteS1sYWJlbCIpO2suaW5uZXJUZXh0PXRoaXMuaXNSZWdyZXNzaW9uXyh0aGlzLm1vZGVsVHlwZSk/IkluZmVyZW5jZSB2YWx1ZSI6IkluZmVyZW5jZSBzY29yZSI7Zi5hcHBlbmRDaGlsZChrKTtrPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2suY2xhc3NMaXN0LmFkZCgicGQteC1sYWJlbCIpO2suaW5uZXJUZXh0PWE7Zi5hcHBlbmRDaGlsZChrKTtyZXR1cm4gZn0sY3JlYXRlUGRFbnRyeUZvckN1cnJlbnRWYWx1ZTpmdW5jdGlvbihhLGMsZCl7dmFyIGY9Xy5rZXlzKGMpWzBdO2NvbnN0IGc9Zi5pbmRleE9mKCJpbmRleCIpOwpjPStmO3ZhciBsPTA7LTE8ZyYmKGM9K2Yuc3Vic3RyaW5nKDAsZi5pbmRleE9mKCIgIikpLGw9K2Yuc3Vic3RyaW5nKGcrNixmLmluZGV4T2YoIikiKSkpO2E9dGhpcy52aXNkYXRhW3RoaXMuc2VsZWN0ZWRbMF1dW2FdO0FycmF5LmlzQXJyYXkoYSkmJihhPWFbbF0pO2Q9dGhpcy5zZWxlY3RlZEV4YW1wbGVBbmRJbmZlcmVuY2UuaW5mZXJlbmNlc1t0aGlzLnNlbGVjdGVkRXhhbXBsZUFuZEluZmVyZW5jZS5pbmZlcmVuY2VzLmxlbmd0aC0xXVtkXTtsPS0xO2ZvcihmPTA7ZjxkLmxlbmd0aDtmKyspaWYoZFtmXS5sYWJlbD09Yy50b1N0cmluZygpfHwiIj09ZFtmXS5sYWJlbCl7bD1kW2ZdLnNjb3JlO2JyZWFrfXJldHVybi0xPT1sP251bGw6e3N0ZXA6YSxzY2FsYXI6bH19LGRlbGV0ZVBkUGxvdFNwaW5uZXI6ZnVuY3Rpb24oYSl7YT10aGlzLmZlYXR1cmVDb250YWluZXJCeU5hbWUoYSk7cnEoYS5xdWVyeVNlbGVjdG9yKCJwYXBlci1zcGlubmVyLWxpdGUiKSl9LG1ha2VDaGFydEZvckZlYXR1cmU6ZnVuY3Rpb24oYSwKYyxkKXt0aGlzLmRlbGV0ZVBkUGxvdFNwaW5uZXIoYyk7ZC5mb3JFYWNoKGY9PnRoaXMuYWRkQ2hhcnQoYSxjLGYpKX0sZ2V0SW5mZXJlbmNlVmlzdWFsaXphdGlvbjpmdW5jdGlvbihhLGMpe2M9e2ZlYXR1cmVfbmFtZTphLGluZmVyZW5jZV9hZGRyZXNzOnRoaXMuaW5mZXJlbmNlQWRkcmVzcyxtb2RlbF9uYW1lOnRoaXMubW9kZWxOYW1lLG1vZGVsX3R5cGU6dGhpcy5tb2RlbFR5cGUsbW9kZWxfdmVyc2lvbjp0aGlzLm1vZGVsVmVyc2lvbixtb2RlbF9zaWduYXR1cmU6dGhpcy5tb2RlbFNpZ25hdHVyZSx4X21pbjp0aGlzLmdldFVuaXF1ZUJ5RXZlbnQoYywiLngtbWluIikudmFsdWUseF9tYXg6dGhpcy5nZXRVbmlxdWVCeUV2ZW50KGMsIi54LW1heCIpLnZhbHVlLGZlYXR1cmVfaW5kZXhfcGF0dGVybjp0aGlzLmdldFVuaXF1ZUJ5RXZlbnQoYywiLmZlYXR1cmUtaW5kZXgtcGF0dGVybiIpLnZhbHVlLGV4YW1wbGVfaW5kZXg6dGhpcy5nbG9iYWxQZFBsb3RzPy0xOnRoaXMuc2VsZWN0ZWRbMF0sCnVzZV9wcmVkaWN0OnRoaXMudXNlUHJlZGljdEFwaSxwcmVkaWN0X291dHB1dF90ZW5zb3I6dGhpcy5wcmVkaWN0T3V0cHV0VGVuc29yLHByZWRpY3RfaW5wdXRfdGVuc29yOnRoaXMucHJlZGljdElucHV0VGVuc29yfTt0aGlzLmxvY2FsP3RoaXMuZmlyZSgiaW5mZXItbXV0YW50cyIsYyk6KGM9UGsuYWRkUGFyYW1zKCIvZGF0YS9wbHVnaW4vd2hhdGlmL2luZmVyX211dGFudHMiLGMpLHRoaXMubWFrZUFzeW5jUmVxdWVzdF8oYywoZj0+dGhpcy5tYWtlQ2hhcnRGb3JGZWF0dXJlKGYudmFsdWUuY2hhcnRUeXBlLGEsZi52YWx1ZS5kYXRhKSkuYmluZCh0aGlzKSxudWxsLCJwbG90IGNyZWF0aW9uIiwoKCk9PnRoaXMuaGFuZGxlQ2hhcnRFcnJvckZvckZlYXR1cmUoYSkpLmJpbmQodGhpcykpKTtjPXRoaXMuZmVhdHVyZUNvbnRhaW5lckJ5TmFtZShhKS5xdWVyeVNlbGVjdG9yKCIudGYtY2F0ZWdvcnktcGFuZS1jb250ZW50Iik7Y29uc3QgZD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJwYXBlci1zcGlubmVyLWxpdGUiKTsKZC5zZXRBdHRyaWJ1dGUoImFjdGl2ZSIsITApO1BvbHltZXIuZG9tKGMpLmFwcGVuZENoaWxkKGQpfSxoYW5kbGVDaGFydEVycm9yRm9yRmVhdHVyZTpmdW5jdGlvbihhKXtjb25zdCBjPXRoaXMucGFydGlhbERlcFBsb3RQZW5kaW5nRmVhdHVyZXMuaW5kZXhPZihhKTstMTxjJiZ0aGlzLnBhcnRpYWxEZXBQbG90UGVuZGluZ0ZlYXR1cmVzLnNwbGljZShjLDEpO3RoaXMuZGVsZXRlUGRQbG90U3Bpbm5lcihhKX0sc2hvdWxkSGlkZUZlYXR1cmVJbmRpY2VzU2VsZWN0b3I6ZnVuY3Rpb24oYSxjKXtyZXR1cm4hY3x8MD09Yy5sZW5ndGh8fCF0aGlzLnZpc2RhdGF8fHRoaXMudmlzZGF0YS5sZW5ndGg8PWNbMF0/ITA6IUFycmF5LmlzQXJyYXkodGhpcy52aXNkYXRhW2NbMF1dW2FdKX0sc2hvdWxkSGlkZVBkSW5wdXRDb250YWluZXI6ZnVuY3Rpb24oYSxjLGQpe3JldHVybiB0aGlzLnNob3VsZEhpZGVGZWF0dXJlSW5kaWNlc1NlbGVjdG9yKGMsZCkmJmE/ITA6ITF9LGZlYXR1cmVDb250YWluZXJCeU5hbWU6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuJCQoJ1tkYXRhLWZlYXR1cmUtbmFtZVx4M2QiJysKYSsnIl0nKX0sZmVhdHVyZUNvbnRhaW5lckJ5RXZlbnQ6ZnVuY3Rpb24oYSl7Zm9yKGE9YS50YXJnZXQ7IWEuY2xhc3NMaXN0LmNvbnRhaW5zKCJmZWF0dXJlLWNvbnRhaW5lciIpOylhPWEucGFyZW50Tm9kZTtyZXR1cm4gYX0sZ2V0VW5pcXVlQnlFdmVudChhLGMpe3JldHVybiB0aGlzLmZlYXR1cmVDb250YWluZXJCeUV2ZW50KGEpLnF1ZXJ5U2VsZWN0b3IoYyl9LHBhcnRpYWxEZXBQbG90RWxpZ2libGVGZWF0dXJlc1NldDpmdW5jdGlvbihhKXthJiYwIT1hLmxlbmd0aCYmc2V0VGltZW91dCgoKT0+e3RoaXMuJCQoIi5wZC1lbnRyeS1jb250YWluZXIiKS5oaWRkZW4mJnRoaXMuJCQoIi50Zi1jYXRlZ29yeS1wYW5lIikuY2xpY2soKX0sMTAwKX0sY2F0ZWdvcnlQYW5lQ2xpY2tlZDpmdW5jdGlvbihhKXtjb25zdCBjPXRoaXMuZmVhdHVyZUNvbnRhaW5lckJ5RXZlbnQoYSk7Yy5xdWVyeVNlbGVjdG9yKCIucGQtZW50cnktY29udGFpbmVyIikuaGFzQXR0cmlidXRlKCJoaWRkZW4iKT8KKHRoaXMuZHJhd1BkQ2hhcnRzXyhhKSx0aGlzLnNob3dQZEVsZW1lbnRfKGMpKTp0aGlzLmhpZGVQZEVsZW1lbnRfKGMpfSxkcmF3UGRDaGFydHNfOmZ1bmN0aW9uKGEpe2NvbnN0IGM9YS5tb2RlbC5nZXQoIml0ZW0iKS5uYW1lOy0xPHRoaXMucGFydGlhbERlcFBsb3RQZW5kaW5nRmVhdHVyZXMuaW5kZXhPZihjKXx8KHRoaXMucGFydGlhbERlcFBsb3RQZW5kaW5nRmVhdHVyZXMucHVzaChjKSx0aGlzLmdldEluZmVyZW5jZVZpc3VhbGl6YXRpb24oYyxhKSl9LGNsZWFyUGRFbGVtZW50Q2hhcnRzXzpmdW5jdGlvbihhKXthLnF1ZXJ5U2VsZWN0b3JBbGwoIi5wZC1ob2xkZXIiKS5mb3JFYWNoKGZ1bmN0aW9uKGMpe3JxKGMpfSl9LGhpZGVQZEVsZW1lbnRfOmZ1bmN0aW9uKGEpe3ZhciBjPWEucXVlcnlTZWxlY3RvcigiLnBkLWVudHJ5LWNvbnRhaW5lciIpO3RoaXMuY2xlYXJQZEVsZW1lbnRDaGFydHNfKGMpO2Muc2V0QXR0cmlidXRlKCJoaWRkZW4iLCEwKTtjPWEucXVlcnlTZWxlY3RvcigiLnBkLXJvdy1hcnJvdyIpOwpjLmNsYXNzTGlzdC5yZW1vdmUoIm5vcm1hbC1pY29uIik7Yy5jbGFzc0xpc3QuYWRkKCJyb3RhdGVkLWljb24iKTthPWEucXVlcnlTZWxlY3RvcigiLnBlcmYtdGFibGUtZW50cnkiKTthLmNsYXNzTGlzdC5hZGQoInBlcmYtdGFibGUtcm93Iik7YS5jbGFzc0xpc3QucmVtb3ZlKCJwZXJmLXRhYmxlLXJvdy1leHBhbmRlZCIpfSxzaG93UGRFbGVtZW50XzpmdW5jdGlvbihhKXthLnF1ZXJ5U2VsZWN0b3IoIi5wZC1lbnRyeS1jb250YWluZXIiKS5yZW1vdmVBdHRyaWJ1dGUoImhpZGRlbiIpO2NvbnN0IGM9YS5xdWVyeVNlbGVjdG9yKCIucGQtcm93LWFycm93Iik7Yy5jbGFzc0xpc3QuYWRkKCJub3JtYWwtaWNvbiIpO2MuY2xhc3NMaXN0LnJlbW92ZSgicm90YXRlZC1pY29uIik7YT1hLnF1ZXJ5U2VsZWN0b3IoIi5wZXJmLXRhYmxlLWVudHJ5Iik7YS5jbGFzc0xpc3QucmVtb3ZlKCJwZXJmLXRhYmxlLXJvdyIpO2EuY2xhc3NMaXN0LmFkZCgicGVyZi10YWJsZS1yb3ctZXhwYW5kZWQiKX0sCmhpZGVBbGxQZEVsZW1lbnRzXzpmdW5jdGlvbigpe2NvbnN0IGE9UG9seW1lci5kb20odGhpcy5yb290KS5xdWVyeVNlbGVjdG9yQWxsKCIuZmVhdHVyZS1jb250YWluZXIiKTtmb3IobGV0IGM9MDtjPGEubGVuZ3RoO2MrKyl0aGlzLmhpZGVQZEVsZW1lbnRfKGFbY10pfSxwZElucHV0Q2hhbmdlZDpmdW5jdGlvbihhKXt0aGlzLmRlYm91bmNlKCJwZElucHV0Q2hhbmdlZERlYm91bmNlIiwoKT0+dGhpcy5wZElucHV0Q2hhbmdlZEltcGwoYSksNTAwKX0scGRJbnB1dENoYW5nZWRJbXBsOmZ1bmN0aW9uKGEpe3RoaXMuY2xlYXJQZEVsZW1lbnRDaGFydHNfKHRoaXMuZ2V0VW5pcXVlQnlFdmVudChhLCIudGYtY2F0ZWdvcnktcGFuZS1jb250ZW50IikpO3RoaXMuZHJhd1BkQ2hhcnRzXyhhKX0scG9wdWxhdGVQZFRhYnM6ZnVuY3Rpb24oKXt0aGlzLmhpZGVBbGxQZEVsZW1lbnRzXygpO2lmKHRoaXMubG9jYWwpdGhpcy5maXJlKCJnZXQtZWxpZ2libGUtZmVhdHVyZXMiKTtlbHNle2NvbnN0IGE9ClBrLmFkZFBhcmFtcygiL2RhdGEvcGx1Z2luL3doYXRpZi9lbGlnaWJsZV9mZWF0dXJlcyIse30pO3RoaXMubWFrZUFzeW5jUmVxdWVzdF8oYSxjPT57dGhpcy5zZXQoInBhcnRpYWxEZXBQbG90RWxpZ2libGVGZWF0dXJlcyIsYy52YWx1ZSl9LG51bGwsInBsb3Qgc2V0dXAiKX19LHRvZ2dsZVRydWVMYWJlbFNldHVwOmZ1bmN0aW9uKCl7dGhpcy4kLmNvbGxhcHNldHJ1ZWxhYmVsLnRvZ2dsZSgpfSx0b2dnbGVFeHBsb3JlclNldHVwOmZ1bmN0aW9uKCl7dGhpcy4kJCgiI2NvbGxhcHNlZXhwbG9yZXIiKS50b2dnbGUoKX0sdG9nZ2xlQ29udGV4dFRvb2xzOmZ1bmN0aW9uKCl7dGhpcy4kLmNvbGxhcHNlY29udGV4dHRvb2xzLnRvZ2dsZSgpfSx0b2dnbGVQZXJmb3JtYW5jZTpmdW5jdGlvbigpe3RoaXMuJC5jb2xsYXBzZXBlcmZvcm1hbmNlLnRvZ2dsZSgpfSx0b2dnbGVJbmZlcmVuY2VSZXN1bHRzOmZ1bmN0aW9uKCl7dGhpcy4kJCgiI2NvbGxhcHNlaW5mZXJlbmNlIikudG9nZ2xlKCl9LApnZXRFeHBhbmRDb2xsYXBzZUljb246ZnVuY3Rpb24oYSl7cmV0dXJuIGE/ImV4cGFuZC1sZXNzIjoiZXhwYW5kLW1vcmUifSxnZXRFeHBhbmRDb2xsYXBzZVBlcmZJY29uQ2xhc3M6ZnVuY3Rpb24oYSl7cmV0dXJuIGE/Im5vcm1hbC1pY29uIjoicm90YXRlZC1pY29uIn0sZ2V0UGVyZlRhYmxlUm93Q2xhc3M6ZnVuY3Rpb24oYSl7cmV0dXJuIGE/InBlcmYtdGFibGUtcm93LWV4cGFuZGVkIjoicGVyZi10YWJsZS1yb3cifSxnZXRQZXJmVGFibGVNb2RlbENsYXNzOmZ1bmN0aW9uKGEpe3JldHVybiAyPmE/InBlcmYtdGFibGUtbW9kZWwtc2luZ2xlIjoicGVyZi10YWJsZS1tb2RlbCJ9LGdldERhdGFwb2ludEVkaXRvclRpdGxlOmZ1bmN0aW9uKGEsYyl7cmV0dXJuIHRoaXMuZ2V0U2VjdGlvblRpdGxlKCJFZGl0IixhLGMpfSxnZXRJbmZlclRpdGxlOmZ1bmN0aW9uKGEsYyl7cmV0dXJuIHRoaXMuZ2V0U2VjdGlvblRpdGxlKCJJbmZlciIsYSxjKX0sZ2V0U2VjdGlvblRpdGxlOmZ1bmN0aW9uKGEsCmMsZCl7bnVsbCE9YyYmIiIhPT1jJiYoYT1udWxsIT1kJiYwPGQubGVuZ3RoP2ErKCIgLSBEYXRhcG9pbnRzICIrYysiIGFuZCAiK2RbMF0pOmErKCIgLSBEYXRhcG9pbnQgIitjKSk7cmV0dXJuIGF9LHRvZ2dsZVBlcmZSb3c6ZnVuY3Rpb24oYSl7Zm9yKGE9YS50YXJnZXQ7bnVsbCE9YSYmIWEuZGF0YXNldC5pbmRleDspYT1hLnBhcmVudE5vZGU7bnVsbCE9YSYmKGE9YS5kYXRhc2V0LmluZGV4LHRoaXMuc2V0KCJmZWF0dXJlVmFsdWVUaHJlc2hvbGRzLiIrYSsiLm9wZW5lZCIsIXRoaXMuZmVhdHVyZVZhbHVlVGhyZXNob2xkc1thXS5vcGVuZWQpLHRoaXMuZmVhdHVyZVZhbHVlVGhyZXNob2xkc1thXS5vcGVuZWQmJnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+dGhpcy51cGRhdGVJbmZlcmVuY2VTdGF0c18oITApKSl9LGdldFBlcmZvcm1hbmNlVGFiVGl0bGU6ZnVuY3Rpb24oYSxjKXtyZXR1cm4gdGhpcy5pc0JpbmFyeUNsYXNzaWZpY2F0aW9uXyhhLGMpPyJQZXJmb3JtYW5jZSBceDI2IEZhaXJuZXNzIjoKIlBlcmZvcm1hbmNlIn0sZ2V0UGVyZlRhYmxlVGl0bGU6ZnVuY3Rpb24oYSxjLGQsZil7bGV0IGc9dGhpcy5nZXRQcmludGFibGVPcHRpbWl6YXRpb25OYW1lKGQpO2lmKG51bGw9PWF8fDA9PWEubGVuZ3RoKXJldHVybiJjdXN0b20iPT1kPyJFeHBsb3JlIG92ZXJhbGwgcGVyZm9ybWFuY2UiOmc7bnVsbCE9YyYmMCE9Yy5sZW5ndGgmJihhKz0iLyIrYyk7cmV0dXJuIGcrIiBmb3IgIitmLmxlbmd0aCsiIHZhbHVlcyBvZiAiK2F9LGdldE5vVGhyZXNob2xkUGVyZlRhYmxlVGl0bGU6ZnVuY3Rpb24oYSxjLGQpe2lmKG51bGw9PWF8fDA9PWEubGVuZ3RoKXJldHVybiJFeHBsb3JlIG92ZXJhbGwgcGVyZm9ybWFuY2UiO251bGwhPWMmJjAhPWMubGVuZ3RoJiYoYSs9Ii8iK2MpO3JldHVybiBhKyIgKCIrZC5sZW5ndGgrIiB2YWx1ZXMpIn0sZ2V0UHJpbnRhYmxlT3B0aW1pemF0aW9uTmFtZTpmdW5jdGlvbihhKXtyZXR1cm4iY3VzdG9tIj09YT8iQ3VzdG9tIHRocmVzaG9sZHMiOiJ1bmF3YXJlIj09CmE/Ik9wdGltYWwgc2luZ2xlIHRocmVzaG9sZCI6ImRlbW9wYXJpdHkiPT1hPyJEZW1vZ3JhcGhpYyBwYXJpdHkgdGhyZXNob2xkcyI6ImVxdWFsb3BwIj09YT8iRXF1YWwgb3Bwb3J0dW5pdHkgdGhyZXNob2xkcyI6ImVxdWFsYWNjIj09YT8iRXF1YWwgYWNjdXJhY3kgdGhyZXNob2xkcyI6Ik9wdGltYWwgZ3JvdXAgdGhyZXNob2xkcyJ9LGdldEZlYXR1cmVTb3J0Qnk6ZnVuY3Rpb24oYSxjKXtsZXQgZD1bIkNvdW50IiwiQWxwaGFiZXRpY2FsIl07cmV0dXJuIGQ9dGhpcy5pc0JpbmFyeUNsYXNzaWZpY2F0aW9uXyhhLGMpP2QuY29uY2F0KFsiQWNjdXJhY3kiLCJGYWxzZSBwb3NpdGl2ZXMiLCJGYWxzZSBuZWdhdGl2ZXMiXSk6dGhpcy5pc011bHRpQ2xhc3NfKGEsYyk/ZC5jb25jYXQoWyJBY2N1cmFjeSJdKTpkLmNvbmNhdCgiTWVhbiBlcnJvcjtNZWRpYW4gZXJyb3I7TWVhbiBhYnNvbHV0ZSBlcnJvcjtNZWRpYW4gYWJzb2x1dGUgZXJyb3I7TWVhbiBzcXVhcmVkIGVycm9yO01lZGlhbiBzcXVhcmVkIGVycm9yIi5zcGxpdCgiOyIpKX0sCnNlbGVjdGVkRmVhdHVyZVNvcnRDaGFuZ2VkXzpmdW5jdGlvbigpe3ZhciBhPXRoaXMuZmVhdHVyZVZhbHVlVGhyZXNob2xkczt0aGlzLmZlYXR1cmVWYWx1ZVRocmVzaG9sZHM9W107dGhpcy5mZWF0dXJlVmFsdWVUaHJlc2hvbGRzPXRoaXMuc29ydEZlYXR1cmVWYWx1ZXMoYSk7bnVsbCE9dGhpcy5yZWdyZXNzaW9uRW50cmllc18mJihhPXRoaXMucmVncmVzc2lvbkVudHJpZXNfLHRoaXMucmVncmVzc2lvbkVudHJpZXNfPVtdLHRoaXMucmVncmVzc2lvbkVudHJpZXNfPXRoaXMuc29ydFJlZ3Jlc3Npb25FbnRyaWVzKGEpKX0sZ2V0U2xpZGVyQ2xhc3M6ZnVuY3Rpb24oYSl7cmV0dXJuInNsaWRlciAiKygwPT1hPyJzbGlkZXItbW9kZWwtb25lIjoic2xpZGVyLW1vZGVsLXR3byIpfSxmb3JtYXRFcnJvcjpmdW5jdGlvbihhKXtyZXR1cm4gZDMuZm9ybWF0KCIuM2YiKShhKX0sZXhwYW5kQWxsUGVyZm9ybWFuY2U6ZnVuY3Rpb24oKXtpZihudWxsIT10aGlzLmZlYXR1cmVWYWx1ZVRocmVzaG9sZHMpe2ZvcihsZXQgYT0KMDthPHRoaXMuZmVhdHVyZVZhbHVlVGhyZXNob2xkcy5sZW5ndGg7YSsrKXRoaXMuc2V0KCJmZWF0dXJlVmFsdWVUaHJlc2hvbGRzLiIrYSsiLm9wZW5lZCIsITApO3JlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+dGhpcy51cGRhdGVJbmZlcmVuY2VTdGF0c18oITApKX19LGNvbGxhcHNlQWxsUGVyZm9ybWFuY2U6ZnVuY3Rpb24oKXtpZihudWxsIT10aGlzLmZlYXR1cmVWYWx1ZVRocmVzaG9sZHMpZm9yKGxldCBhPTA7YTx0aGlzLmZlYXR1cmVWYWx1ZVRocmVzaG9sZHMubGVuZ3RoO2ErKyl0aGlzLnNldCgiZmVhdHVyZVZhbHVlVGhyZXNob2xkcy4iK2ErIi5vcGVuZWQiLCExKX19KTskbC5yZWdpc3RlckRhc2hib2FyZCh7cGx1Z2luOiJ3aGF0aWYiLGVsZW1lbnROYW1lOiJ0Zi1pbnRlcmFjdGl2ZS1pbmZlcmVuY2UtZGFzaGJvYXJkIix0YWJOYW1lOiJXaGF0LUlmIFRvb2wifSl9KSgpOwo8L3NjcmlwdD4KPC9kb20tbW9kdWxlPgoKCgoKCgoKCgoKCgoKCjxzY3JpcHQ+Ly9+fldFQlBBVEh+fi90Zi1ocGFyYW1zLXV0aWxzL3RmLWhwYXJhbXMtdXRpbHMuaHRtbC5qcwooZnVuY3Rpb24oYSl7KGZ1bmN0aW9uKGMpeyhmdW5jdGlvbihkKXtmdW5jdGlvbiBmKEIpe3JldHVybiIiIT09Qi5kaXNwbGF5TmFtZSYmdm9pZCAwIT09Qi5kaXNwbGF5TmFtZT9CLmRpc3BsYXlOYW1lOkIubmFtZX1mdW5jdGlvbiBnKEIpe2lmKCIiIT09Qi5kaXNwbGF5TmFtZSYmdm9pZCAwIT09Qi5kaXNwbGF5TmFtZSlyZXR1cm4gQi5kaXNwbGF5TmFtZTtsZXQgRz1CLm5hbWUuZ3JvdXA7Qj1CLm5hbWUudGFnO3ZvaWQgMD09PUcmJihHPSIiKTt2b2lkIDA9PT1CJiYoQj0iIik7cmV0dXJuIiI9PT1HP0I6RysiLiIrQn1mdW5jdGlvbiBsKEIpe3JldHVybiBCLmhwYXJhbUNvbHVtbnMubGVuZ3RofWZ1bmN0aW9uIGsoQil7cmV0dXJuIEIubWV0cmljQ29sdW1ucy5sZW5ndGh9ZnVuY3Rpb24gbShCLEcpe3JldHVybiBCW0ddfWZ1bmN0aW9uIHAoQixHKXtyZXR1cm4gQi5maW5kKEs9Pl8uaXNFcXVhbChLLm5hbWUsRykpfWZ1bmN0aW9uIHEoQixHLEspe3JldHVybiBHLmhwYXJhbXNbQi5ocGFyYW1Db2x1bW5zW0tdLmhwYXJhbUluZm8ubmFtZV19CmZ1bmN0aW9uIHIoQixHLEspe0I9cChHLm1ldHJpY1ZhbHVlcyxCLm1ldHJpY0NvbHVtbnNbS10ubWV0cmljSW5mby5uYW1lKTtyZXR1cm4gdm9pZCAwPT09Qj92b2lkIDA6Qi52YWx1ZX1mdW5jdGlvbiB0KEIsRyxLKXtyZXR1cm4gSzxCLmhwYXJhbUNvbHVtbnMubGVuZ3RoP3EoQixHLEspOnIoQixHLEstQi5ocGFyYW1Db2x1bW5zLmxlbmd0aCl9ZnVuY3Rpb24gdihCKXtyZXR1cm4gQi5ocGFyYW1JbmZvcy5sZW5ndGh9ZnVuY3Rpb24gQShCKXtyZXR1cm4gQi5tZXRyaWNJbmZvcy5sZW5ndGh9ZnVuY3Rpb24geShCLEcsSyl7cmV0dXJuIEcuaHBhcmFtc1tCLmhwYXJhbUluZm9zW0tdLm5hbWVdfWZ1bmN0aW9uIHgoQixHLEspe0I9cChHLm1ldHJpY1ZhbHVlcyxCLm1ldHJpY0luZm9zW0tdLm5hbWUpO3JldHVybiB2b2lkIDA9PT1CP3ZvaWQgMDpCLnZhbHVlfWZ1bmN0aW9uIEMoQixHLEspe3JldHVybiBLPEIuaHBhcmFtSW5mb3MubGVuZ3RoP3koQixHLEspOngoQixHLEstQi5ocGFyYW1JbmZvcy5sZW5ndGgpfQpmdW5jdGlvbiBGKEIpe3JldHVybiBfLmlzTnVtYmVyKEIpP0IudG9QcmVjaXNpb24oNSk6dm9pZCAwPT09Qj8iIjpCLnRvU3RyaW5nKCl9ZnVuY3Rpb24gRChCLEcpe3JldHVybiBCKkIrRypHfWQuaHBhcmFtTmFtZT1mO2QubWV0cmljTmFtZT1nO2Quc2NoZW1hQ29sdW1uTmFtZT1mdW5jdGlvbihCLEcpe3JldHVybiBHPEIuaHBhcmFtQ29sdW1ucy5sZW5ndGg/ZihCLmhwYXJhbUNvbHVtbnNbR10uaHBhcmFtSW5mbyk6ZyhCLm1ldHJpY0NvbHVtbnNbRy1CLmhwYXJhbUNvbHVtbnMubGVuZ3RoXS5tZXRyaWNJbmZvKX07ZC5udW1IUGFyYW1zPWw7ZC5udW1NZXRyaWNzPWs7ZC5udW1Db2x1bW5zPWZ1bmN0aW9uKEIpe3JldHVybiBsKEIpK2soQil9O2QuaHBhcmFtVmFsdWVCeU5hbWU9bTtkLm1ldHJpY1ZhbHVlQnlOYW1lPXA7ZC5ocGFyYW1WYWx1ZUJ5SW5kZXg9cTtkLm1ldHJpY1ZhbHVlQnlJbmRleD1yO2QuY29sdW1uVmFsdWVCeUluZGV4PXQ7ZC5udW1lcmljQ29sdW1uRXh0ZW50PQpmdW5jdGlvbihCLEcsSyl7cmV0dXJuIGQzLmV4dGVudChHLEw9PnQoQixMLEspKX07ZC5nZXRBYnNvbHV0ZUNvbHVtbkluZGV4PWZ1bmN0aW9uKEIsRyxLKXtpZihLPEcuaHBhcmFtSW5mb3MubGVuZ3RoKUI9Qi5ocGFyYW1Db2x1bW5zLmZpbmRJbmRleChMPT5MLmhwYXJhbUluZm8ubmFtZT09PUcuaHBhcmFtSW5mb3NbS10ubmFtZSk7ZWxzZXtjb25zdCBMPUcubWV0cmljSW5mb3NbSy1HLmhwYXJhbUluZm9zLmxlbmd0aF0ubmFtZTtCPUIuaHBhcmFtQ29sdW1ucy5sZW5ndGgrQi5tZXRyaWNDb2x1bW5zLmZpbmRJbmRleChKPT5KLm1ldHJpY0luZm8ubmFtZT09PUwpfWNvbnNvbGUuYXNzZXJ0KC0xIT09Qik7cmV0dXJuIEJ9O2Quc2NoZW1hVmlzaWJsZUNvbHVtbk5hbWU9ZnVuY3Rpb24oQixHKXtyZXR1cm4gRzxCLmhwYXJhbUluZm9zLmxlbmd0aD9mKEIuaHBhcmFtSW5mb3NbR10pOmcoQi5tZXRyaWNJbmZvc1tHLUIuaHBhcmFtSW5mb3MubGVuZ3RoXSl9O2QubnVtVmlzaWJsZUhQYXJhbXM9CnY7ZC5udW1WaXNpYmxlTWV0cmljcz1BO2QubnVtVmlzaWJsZUNvbHVtbnM9ZnVuY3Rpb24oQil7cmV0dXJuIHYoQikrQShCKX07ZC52aXNpYmxlTnVtZXJpY0NvbHVtbkV4dGVudD1mdW5jdGlvbihCLEcsSyl7cmV0dXJuIGQzLmV4dGVudChHLEw9PkMoQixMLEspKX07ZC5wcmV0dHlQcmludEhQYXJhbVZhbHVlQnlOYW1lPWZ1bmN0aW9uKEIsRyl7cmV0dXJuIEYobShCLEcpKX07ZC5wcmV0dHlQcmludE1ldHJpY1ZhbHVlQnlOYW1lPWZ1bmN0aW9uKEIsRyl7cmV0dXJuIEYocChCLEcpKX07ZC5zZXNzaW9uR3JvdXBXaXRoTmFtZT1mdW5jdGlvbihCLEcpe3JldHVybiBCLmZpbmQoSz0+Sy5uYW1lPT09Ryl9O2QuaHBhcmFtVmFsdWVCeVZpc2libGVJbmRleD15O2QubWV0cmljVmFsdWVCeVZpc2libGVJbmRleD14O2QuY29sdW1uVmFsdWVCeVZpc2libGVJbmRleD1DO2QucHJldHR5UHJpbnQ9RjtkLmwyTm9ybVNxdWFyZWQ9RDtkLmV1Y2xpZGVhbkRpc3Q9ZnVuY3Rpb24oQixHLEssTCl7cmV0dXJuIE1hdGguc3FydChEKEItCkssRy1MKSl9O2QucG9pbnRUb1JlY3RhbmdsZURpc3Q9ZnVuY3Rpb24oQixHLEssTCxKLFApe2lmKEI8SyYmRzxMKXJldHVybiBkLmV1Y2xpZGVhbkRpc3QoQixHLEssTCk7aWYoSzw9QiYmQjxKJiZHPEwpcmV0dXJuIEwtRztpZihKPD1CJiZHPEwpcmV0dXJuIGQuZXVjbGlkZWFuRGlzdChCLEcsSixMKTtpZihCPEsmJkw8PUcmJkc8UClyZXR1cm4gSy1CO2lmKEs8PUImJkI8SiYmTDw9RyYmRzxQKXJldHVybiAwO2lmKEo8PUImJkw8PUcmJkc8UClyZXR1cm4gQi1KO2lmKEI8SyYmUDw9RylyZXR1cm4gZC5ldWNsaWRlYW5EaXN0KEIsRyxLLFApO2lmKEs8PUImJkI8SiYmUDw9RylyZXR1cm4gRy1QO2lmKEo8PUImJlA8PUcpcmV0dXJuIGQuZXVjbGlkZWFuRGlzdChCLEcsSixQKTt0aHJvdyJQb2ludCAoeCx5KSBtdXN0IGJlIGluIG9uZSBvZiB0aGUgcmVnaW9ucyBkZWZpbmVkIGFib3ZlLiI7fTtkLnRyYW5zbGF0ZVN0cj1mdW5jdGlvbihCLEcpe3JldHVybiB2b2lkIDA9PT1HPyJ0cmFuc2xhdGUoIisKQisiKSI6InRyYW5zbGF0ZSgiK0IrIiwiK0crIikifTtkLnJvdGF0ZVN0cj1mdW5jdGlvbihCLEcpe2xldCBLPSJyb3RhdGUoOTAiO3ZvaWQgMCE9PUImJnZvaWQgMCE9PUcmJihLPUsrIiwiK0IrIiwiK0cpO3JldHVybiBLKyIpIn07ZC5pc051bGxPclVuZGVmaW5lZD1mdW5jdGlvbihCKXtyZXR1cm4gbnVsbD09PUJ8fHZvaWQgMD09PUJ9O2QucXVhZFRyZWVWaXNpdFBvaW50c0luUmVjdD1mdW5jdGlvbihCLEcsSyxMLEosUCl7Qi52aXNpdCgoUyxOLFQsWSxhYSk9PntpZih2b2lkIDA9PT1TLmxlbmd0aCl7ZG8gTj1CLngoKShTLmRhdGEpLFQ9Qi55KCkoUy5kYXRhKSxHPD1OJiZOPEwmJks8PVQmJlQ8SiYmUChTLmRhdGEpO3doaWxlKFM9Uy5uZXh0KTtyZXR1cm4hMH1yZXR1cm4gTj49THx8WTw9R3x8VD49Snx8YWE8PUt9KX07ZC5xdWFkVHJlZVZpc2l0UG9pbnRzSW5EaXNrPWZ1bmN0aW9uKEIsRyxLLEwsSil7Qi52aXNpdCgoUCxTLE4sVCxZKT0+e2lmKHZvaWQgMD09PVAubGVuZ3RoKXtkbyBTPQpCLngoKShQLmRhdGEpLE49Qi55KCkoUC5kYXRhKSxTPWQuZXVjbGlkZWFuRGlzdChHLEssUyxOKSxTPD1MJiZKKFAuZGF0YSxTKTt3aGlsZShQPVAubmV4dCk7cmV0dXJuITB9cmV0dXJuIGQucG9pbnRUb1JlY3RhbmdsZURpc3QoRyxLLFMsTixULFkpPkx9KX07ZC5maWx0ZXJTZXQ9ZnVuY3Rpb24oQixHKXtjb25zdCBLPW5ldyBTZXQ7Qi5mb3JFYWNoKEw9PntHKEwpJiZLLmFkZChMKX0pO3JldHVybiBLfTtkLnNldEFycmF5T2JzZXJ2YWJseT1mdW5jdGlvbihCLEcpe2NvbnN0IEs9Qi5nZXQoInNlc3Npb25Hcm91cHMiLEIpO0FycmF5LmlzQXJyYXkoSyk/Qi5zcGxpY2UuYXBwbHkoQixbInNlc3Npb25Hcm91cHMiLDAsSy5sZW5ndGhdLmNvbmNhdChHKSk6Qi5zZXQoInNlc3Npb25Hcm91cHMiLEcpfTtkLmhhc2hPZlN0cmluZz1mdW5jdGlvbihCKXtsZXQgRz0wO2ZvcihsZXQgSz0wO0s8Qi5sZW5ndGg7KytLKUc9MzEqRytCLmNoYXJDb2RlQXQoSykmNDI5NDk2NzI5NTtyZXR1cm4gRysKTWF0aC5wb3coMiwzMSl9fSkoYy51dGlsc3x8KGMudXRpbHM9e30pKX0pKGEuaHBhcmFtc3x8KGEuaHBhcmFtcz17fSkpfSkodGZ8fCh0Zj17fSkpOwo8L3NjcmlwdD4KCgoKCgo8ZG9tLW1vZHVsZSBpZD0idmFhZGluLXNwbGl0LWxheW91dCI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuICFpbXBvcnRhbnQ7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVaKDApOwogICAgICB9CgogICAgICA6aG9zdChbdmVydGljYWxdKSB7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgfQoKICAgICAgOmhvc3QgOjpzbG90dGVkKCopIHsKICAgICAgICBmbGV4OiAxIDEgYXV0bzsKICAgICAgICBvdmVyZmxvdzogYXV0bzsKICAgICAgfQoKICAgICAgOmhvc3QgPiAjc3BsaXR0ZXIgewogICAgICAgIGZsZXg6IG5vbmU7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHotaW5kZXg6IDE7CiAgICAgICAgb3ZlcmZsb3c6IHZpc2libGU7CiAgICAgICAgbWluLXdpZHRoOiA4cHg7CiAgICAgICAgbWluLWhlaWdodDogOHB4OwogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWRpdmlkZXItY29sb3IsICNjY2MpOwogICAgICAgIGZpbGw6IHZhcigtLXByaW1hcnktYmFja2dyb3VuZC1jb2xvciwgI2ZmZik7CiAgICAgICAgQGFwcGx5IC0tdmFhZGluLXNwbGl0LWxheW91dC1zcGxpdHRlcjsKICAgICAgfQoKICAgICAgOmhvc3QoOm5vdChbdmVydGljYWxdKSkgPiAjc3BsaXR0ZXIgewogICAgICAgIGN1cnNvcjogZXctcmVzaXplOwogICAgICB9CgogICAgICA6aG9zdChbdmVydGljYWxdKSA+ICNzcGxpdHRlciB7CiAgICAgICAgY3Vyc29yOiBucy1yZXNpemU7CiAgICAgIH0KCiAgICAgICNoYW5kbGUsCiAgICAgICNzcGxpdHRlciA6OnNsb3R0ZWQoW3Nsb3Q9aGFuZGxlXSkgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDUwJTsKICAgICAgICBsZWZ0OiA1MCU7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7CiAgICAgIH0KCiAgICAgIDpob3N0KFt2ZXJ0aWNhbF0pID4gI3NwbGl0dGVyICNoYW5kbGUgewogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpIHJvdGF0ZSg5MGRlZyk7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8c2xvdCBpZD0icHJpbWFyeSIgbmFtZT0icHJpbWFyeSI+PC9zbG90PgogICAgPGRpdiBpZD0ic3BsaXR0ZXIiIG9uLXRyYWNrPSJfb25IYW5kbGVUcmFjayIgb24tZG93bj0iX3ByZXZlbnREZWZhdWx0Ij4KICAgICAgPHNsb3QgbmFtZT0iaGFuZGxlIj4KICAgICAgICA8c3ZnIGlkPSJoYW5kbGUiIHdpZHRoPSI0MCIgaGVpZ2h0PSI0MCI+CiAgICAgICAgICA8cmVjdCB4PSIxOSIgeT0iOCIgd2lkdGg9IjIiIGhlaWdodD0iMjQiPjwvcmVjdD4KICAgICAgICA8L3N2Zz4KICAgICAgPC9zbG90PgogICAgPC9kaXY+CiAgICA8c2xvdCBpZD0ic2Vjb25kYXJ5IiBuYW1lPSJzZWNvbmRhcnkiPjwvc2xvdD4KICA8L3RlbXBsYXRlPgoKICA8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdmFhZGluLXNwbGl0LWxheW91dC92YWFkaW4tc3BsaXQtbGF5b3V0Lmh0bWwuanMKUG9seW1lcih7aXM6InZhYWRpbi1zcGxpdC1sYXlvdXQiLGJlaGF2aW9yczpbUG9seW1lci5Jcm9uUmVzaXphYmxlQmVoYXZpb3JdLHByb3BlcnRpZXM6e3ZlcnRpY2FsOnt0eXBlOkJvb2xlYW4scmVmbGVjdFRvQXR0cmlidXRlOiEwLHZhbHVlOiExfSxfcHJldmlvdXNQcmltYXJ5UG9pbnRlckV2ZW50czpTdHJpbmcsX3ByZXZpb3VzU2Vjb25kYXJ5UG9pbnRlckV2ZW50czpTdHJpbmd9LGF0dGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fb2JzZXJ2ZXI9UG9seW1lci5kb20odGhpcykub2JzZXJ2ZU5vZGVzKHRoaXMuX3Byb2Nlc3NDaGlsZHJlbil9LGRldGFjaGVkOmZ1bmN0aW9uKCl7UG9seW1lci5kb20odGhpcykudW5vYnNlcnZlTm9kZXModGhpcy5fb2JzZXJ2ZXIpfSxfcHJvY2Vzc0NoaWxkcmVuOmZ1bmN0aW9uKCl7dGhpcy5nZXRFZmZlY3RpdmVDaGlsZHJlbigpLmZpbHRlcihmdW5jdGlvbihhKXtyZXR1cm4gYS5jbGFzc0xpc3QuY29udGFpbnMoInNwbGl0dGVyLWhhbmRsZSIpPwooUG9seW1lci5kb20oYSkuc2V0QXR0cmlidXRlKCJzbG90IiwiaGFuZGxlIiksITEpOiEwfSkuZm9yRWFjaChmdW5jdGlvbihhLGMpezA9PT1jPyh0aGlzLl9wcmltYXJ5Q2hpbGQ9YSxQb2x5bWVyLmRvbShhKS5zZXRBdHRyaWJ1dGUoInNsb3QiLCJwcmltYXJ5IikpOjE9PWM/KHRoaXMuX3NlY29uZGFyeUNoaWxkPWEsUG9seW1lci5kb20oYSkuc2V0QXR0cmlidXRlKCJzbG90Iiwic2Vjb25kYXJ5IikpOlBvbHltZXIuZG9tKGEpLnJlbW92ZUF0dHJpYnV0ZSgic2xvdCIpfS5iaW5kKHRoaXMpKX0sX3NldEZsZXhCYXNpczpmdW5jdGlvbihhLGMsZCl7Yz1NYXRoLm1heCgwLE1hdGgubWluKGMsZCkpOzA9PT1jJiYoYz0xRS02KTthLnN0eWxlLmZsZXg9IjEgMSAiK2MrInB4In0sX29uSGFuZGxlVHJhY2s6ZnVuY3Rpb24oYSl7aWYodGhpcy5fcHJpbWFyeUNoaWxkJiZ0aGlzLl9zZWNvbmRhcnlDaGlsZCl7dmFyIGM9dGhpcy52ZXJ0aWNhbD8iaGVpZ2h0Ijoid2lkdGgiOyJzdGFydCI9PT0KYS5kZXRhaWwuc3RhdGU/KHRoaXMuX3N0YXJ0U2l6ZT17Y29udGFpbmVyOnRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClbY10tdGhpcy4kLnNwbGl0dGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpW2NdLHByaW1hcnk6dGhpcy5fcHJpbWFyeUNoaWxkLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpW2NdLHNlY29uZGFyeTp0aGlzLl9zZWNvbmRhcnlDaGlsZC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVtjXX0sdGhpcy5fcHJldmlvdXNQcmltYXJ5UG9pbnRlckV2ZW50cz10aGlzLl9wcmltYXJ5Q2hpbGQuc3R5bGUucG9pbnRlckV2ZW50cyx0aGlzLl9wcmV2aW91c1NlY29uZGFyeVBvaW50ZXJFdmVudHM9dGhpcy5fc2Vjb25kYXJ5Q2hpbGQuc3R5bGUucG9pbnRlckV2ZW50cyx0aGlzLl9wcmltYXJ5Q2hpbGQuc3R5bGUucG9pbnRlckV2ZW50cz0ibm9uZSIsdGhpcy5fc2Vjb25kYXJ5Q2hpbGQuc3R5bGUucG9pbnRlckV2ZW50cz0ibm9uZSIpOihjPXRoaXMudmVydGljYWw/YS5kZXRhaWwuZHk6CmEuZGV0YWlsLmR4LHRoaXMuX3NldEZsZXhCYXNpcyh0aGlzLl9wcmltYXJ5Q2hpbGQsdGhpcy5fc3RhcnRTaXplLnByaW1hcnkrYyx0aGlzLl9zdGFydFNpemUuY29udGFpbmVyKSx0aGlzLl9zZXRGbGV4QmFzaXModGhpcy5fc2Vjb25kYXJ5Q2hpbGQsdGhpcy5fc3RhcnRTaXplLnNlY29uZGFyeS1jLHRoaXMuX3N0YXJ0U2l6ZS5jb250YWluZXIpLHRoaXMubm90aWZ5UmVzaXplKCksImVuZCI9PT1hLmRldGFpbC5zdGF0ZSYmKGRlbGV0ZSB0aGlzLl9zdGFydFNpemUsdGhpcy5fcHJpbWFyeUNoaWxkLnN0eWxlLnBvaW50ZXJFdmVudHM9dGhpcy5fcHJldmlvdXNQcmltYXJ5UG9pbnRlckV2ZW50cyx0aGlzLl9zZWNvbmRhcnlDaGlsZC5zdHlsZS5wb2ludGVyRXZlbnRzPXRoaXMuX3ByZXZpb3VzU2Vjb25kYXJ5UG9pbnRlckV2ZW50cykpfX0sX3ByZXZlbnREZWZhdWx0OmZ1bmN0aW9uKGEpe2EucHJldmVudERlZmF1bHQoKX19KTsKPC9zY3JpcHQ+CjwvZG9tLW1vZHVsZT4KCgoKCjxkb20tbW9kdWxlIGlkPSJ0Zi1ocGFyYW1zLXF1ZXJ5LXBhbmUiPgogIDx0ZW1wbGF0ZT4KICAgIDxkaXYgY2xhc3M9InBhbmUiPgogICAgICA8dmFhZGluLXNwbGl0LWxheW91dCB2ZXJ0aWNhbD4KICAgICAgICA8dmFhZGluLXNwbGl0LWxheW91dCB2ZXJ0aWNhbCBpZD0iaHlwZXJwYXJhbWV0ZXJzLW1ldHJpY3Mtc3RhdHVzZXMiPgogICAgICAgICAgPHZhYWRpbi1zcGxpdC1sYXlvdXQgdmVydGljYWwgaWQ9Imh5cGVycGFyYW1ldGVycy1tZXRyaWNzIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbiBoeXBlcnBhcmFtZXRlcnMiPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tdGl0bGUiPkh5cGVycGFyYW1ldGVyczwvZGl2PgogICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9Int7X2hwYXJhbXN9fSIgYXM9ImhwYXJhbSI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJocGFyYW0iPgogICAgICAgICAgICAgICAgICA8cGFwZXItY2hlY2tib3ggY2hlY2tlZD0ie3tocGFyYW0uZGlzcGxheWVkfX0iIGNsYXNzPSJocGFyYW0tY2hlY2tib3giPgogICAgICAgICAgICAgICAgICAgIFtbX2hwYXJhbU5hbWUoaHBhcmFtLmluZm8pXV0KICAgICAgICAgICAgICAgICAgPC9wYXBlci1jaGVja2JveD4KICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbaHBhcmFtLmZpbHRlci5kb21haW5EaXNjcmV0ZV1dIj4KICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW2hwYXJhbS5maWx0ZXIuZG9tYWluRGlzY3JldGVdXSI+CiAgICAgICAgICAgICAgICAgICAgICA8cGFwZXItY2hlY2tib3ggY2hlY2tlZD0ie3tpdGVtLmNoZWNrZWR9fSIgY2xhc3M9ImRpc2NyZXRlLXZhbHVlLWNoZWNrYm94IiBvbi1jaGFuZ2U9Il9xdWVyeVNlcnZlciI+CiAgICAgICAgICAgICAgICAgICAgICAgIFtbX3ByZXR0eVByaW50KGl0ZW0udmFsdWUpXV0KICAgICAgICAgICAgICAgICAgICAgIDwvcGFwZXItY2hlY2tib3g+CiAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tocGFyYW0uZmlsdGVyLmludGVydmFsXV0iPgogICAgICAgICAgICAgICAgICAgIDxwYXBlci1pbnB1dCBsYWJlbD0iTWluIiB2YWx1ZT0ie3tocGFyYW0uZmlsdGVyLmludGVydmFsLm1pbi52YWx1ZX19IiBhbGxvd2VkX3BhdHRlcm49IlswLTkuZVwtXSIgb24tdmFsdWUtY2hhbmdlZD0iX3F1ZXJ5U2VydmVyIiBlcnJvci1tZXNzYWdlPSJJbnZhbGlkIGlucHV0IiBpbnZhbGlkPSJbW2hwYXJhbS5maWx0ZXIuaW50ZXJ2YWwubWluLmludmFsaWRdXSIgcGxhY2Vob2xkZXI9Ii1pbmZpbml0eSI+CiAgICAgICAgICAgICAgICAgICAgPC9wYXBlci1pbnB1dD4KICAgICAgICAgICAgICAgICAgICA8cGFwZXItaW5wdXQgbGFiZWw9Ik1heCIgdmFsdWU9Int7aHBhcmFtLmZpbHRlci5pbnRlcnZhbC5tYXgudmFsdWV9fSIgYWxsb3dlZF9wYXR0ZXJuPSJbMC05LmVcLV0iIG9uLXZhbHVlLWNoYW5nZWQ9Il9xdWVyeVNlcnZlciIgZXJyb3ItbWVzc2FnZT0iSW52YWxpZCBpbnB1dCIgaW52YWxpZD0iW1tocGFyYW0uZmlsdGVyLmludGVydmFsLm1heC5pbnZhbGlkXV0iIHBsYWNlaG9sZGVyPSIraW5maW5pdHkiPgogICAgICAgICAgICAgICAgICAgIDwvcGFwZXItaW5wdXQ+CiAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbaHBhcmFtLmZpbHRlci5yZWdleHBdXSI+CiAgICAgICAgICAgICAgICAgICAgPHBhcGVyLWlucHV0IGxhYmVsPSJSZWd1bGFyIGV4cHJlc3Npb24iIHZhbHVlPSJ7e2hwYXJhbS5maWx0ZXIucmVnZXhwfX0iIG9uLXZhbHVlLWNoYW5nZWQ9Il9xdWVyeVNlcnZlciI+CiAgICAgICAgICAgICAgICAgICAgPC9wYXBlci1pbnB1dD4KICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uIG1ldHJpY3MiPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tdGl0bGUiPk1ldHJpY3M8L2Rpdj4KICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJ7e19tZXRyaWNzfX0iIGFzPSJtZXRyaWMiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibWV0cmljIj4KICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgIDxwYXBlci1jaGVja2JveCBjaGVja2VkPSJ7e21ldHJpYy5kaXNwbGF5ZWR9fSIgY2xhc3M9Im1ldHJpYy1jaGVja2JveCI+CiAgICAgICAgICAgICAgICAgICAgW1tfbWV0cmljTmFtZShtZXRyaWMuaW5mbyldXQogICAgICAgICAgICAgICAgICA8L3BhcGVyLWNoZWNrYm94PgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbmxpbmUtZWxlbWVudCI+CiAgICAgICAgICAgICAgICAgICAgPHBhcGVyLWlucHV0IGxhYmVsPSJNaW4iIHZhbHVlPSJ7e21ldHJpYy5maWx0ZXIuaW50ZXJ2YWwubWluLnZhbHVlfX0iIGFsbG93ZWQtcGF0dGVybj0iWzAtOS5lXC1dIiBvbi12YWx1ZS1jaGFuZ2VkPSJfcXVlcnlTZXJ2ZXIiIGVycm9yLW1lc3NhZ2U9IkludmFsaWQgaW5wdXQiIGludmFsaWQ9Int7bWV0cmljLmZpbHRlci5pbnRlcnZhbC5taW4uaW52YWxpZH19IiBwbGFjZWhvbGRlcj0iLWluZmluaXR5Ij4KICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLWlucHV0PgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW5saW5lLWVsZW1lbnQiPgogICAgICAgICAgICAgICAgICAgIDxwYXBlci1pbnB1dCBsYWJlbD0iTWF4IiBhbGxvd2VkLXBhdHRlcm49IlswLTkuZVwtXSIgdmFsdWU9Int7bWV0cmljLmZpbHRlci5pbnRlcnZhbC5tYXgudmFsdWV9fSIgb24tdmFsdWUtY2hhbmdlZD0iX3F1ZXJ5U2VydmVyIiBlcnJvci1tZXNzYWdlPSJJbnZhbGlkIGlucHV0IiBpbnZhbGlkPSJ7e21ldHJpYy5maWx0ZXIuaW50ZXJ2YWwubWF4LmludmFsaWR9fSIgcGxhY2Vob2xkZXI9IitpbmZpbml0eSI+CiAgICAgICAgICAgICAgICAgICAgPC9wYXBlci1pbnB1dD4KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdmFhZGluLXNwbGl0LWxheW91dD4KICAgICAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24gc3RhdHVzIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi10aXRsZSI+U3RhdHVzPC9kaXY+CiAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX3N0YXR1c2VzXV0iIGFzPSJzdGF0dXMiPgogICAgICAgICAgICAgIDxwYXBlci1jaGVja2JveCBjaGVja2VkPSJ7e3N0YXR1cy5hbGxvd2VkfX0iIG9uLWNoYW5nZT0iX3F1ZXJ5U2VydmVyIj4KICAgICAgICAgICAgICAgIFtbc3RhdHVzLmRpc3BsYXlOYW1lXV0KICAgICAgICAgICAgICA8L3BhcGVyLWNoZWNrYm94PgogICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC92YWFkaW4tc3BsaXQtbGF5b3V0PgogICAgICAgIDx2YWFkaW4tc3BsaXQtbGF5b3V0IHZlcnRpY2FsIGlkPSJzb3J0aW5nLXBhZ2luZyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uIHNvcnRpbmciPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5Tb3J0aW5nPC9kaXY+CiAgICAgICAgICAgIDxwYXBlci1kcm9wZG93bi1tZW51IGxhYmVsPSJTb3J0IGJ5IiBvbi1zZWxlY3RlZC1pdGVtLWNoYW5nZWQ9Il9xdWVyeVNlcnZlciIgaG9yaXpvbnRhbC1hbGlnbj0ibGVmdCI+CiAgICAgICAgICAgICAgPHBhcGVyLWxpc3Rib3ggY2xhc3M9ImRyb3Bkb3duLWNvbnRlbnQiIHNsb3Q9ImRyb3Bkb3duLWNvbnRlbnQiIHNlbGVjdGVkPSJ7e19zb3J0QnlJbmRleH19IiBvbi1zZWxlY3RlZC1pdGVtLWNoYW5nZWQ9Il9xdWVyeVNlcnZlciI+CiAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19ocGFyYW1zXV0iIGFzPSJocGFyYW0iPgogICAgICAgICAgICAgICAgICA8cGFwZXItaXRlbT4KICAgICAgICAgICAgICAgICAgICBbW19ocGFyYW1OYW1lKGhwYXJhbS5pbmZvKV1dCiAgICAgICAgICAgICAgICAgIDwvcGFwZXItaXRlbT4KICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19tZXRyaWNzXV0iIGFzPSJtZXRyaWMiPgogICAgICAgICAgICAgICAgICA8cGFwZXItaXRlbT4KICAgICAgICAgICAgICAgICAgICBbW19tZXRyaWNOYW1lKG1ldHJpYy5pbmZvKV1dCiAgICAgICAgICAgICAgICAgIDwvcGFwZXItaXRlbT4KICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgPC9wYXBlci1saXN0Ym94PgogICAgICAgICAgICA8L3BhcGVyLWRyb3Bkb3duLW1lbnU+CiAgICAgICAgICAgIDxwYXBlci1kcm9wZG93bi1tZW51IGxhYmVsPSJEaXJlY3Rpb24iIG9uLXNlbGVjdGVkLWl0ZW0tY2hhbmdlZD0iX3F1ZXJ5U2VydmVyIiBob3Jpem9udGFsLWFsaWduPSJsZWZ0Ij4KICAgICAgICAgICAgICA8cGFwZXItbGlzdGJveCBjbGFzcz0iZHJvcGRvd24tY29udGVudCIgc2xvdD0iZHJvcGRvd24tY29udGVudCIgc2VsZWN0ZWQ9Int7X3NvcnREaXJlY3Rpb259fSI+CiAgICAgICAgICAgICAgICA8cGFwZXItaXRlbT5Bc2NlbmRpbmc8L3BhcGVyLWl0ZW0+CiAgICAgICAgICAgICAgICA8cGFwZXItaXRlbT5EZXNjZW5kaW5nPC9wYXBlci1pdGVtPgogICAgICAgICAgICAgIDwvcGFwZXItbGlzdGJveD4KICAgICAgICAgICAgPC9wYXBlci1kcm9wZG93bi1tZW51PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uIHBhZ2luZyI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tdGl0bGUiPlBhZ2luZzwvZGl2PgogICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgIE51bWJlciBvZiBtYXRjaGluZyBzZXNzaW9uIGdyb3VwczogW1tfdG90YWxTZXNzaW9uR3JvdXBzQ291bnRTdHJdXQogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW5saW5lLWVsZW1lbnQgcGFnZS1udW1iZXItaW5wdXQiPgogICAgICAgICAgICAgIDxwYXBlci1pbnB1dCBsYWJlbD0iUGFnZSAjIiB2YWx1ZT0ie3tfcGFnZU51bWJlcklucHV0LnZhbHVlfX0iIGFsbG93ZWQtcGF0dGVybj0iWzAtOV0iIGVycm9yLW1lc3NhZ2U9IkludmFsaWQgaW5wdXQiIGludmFsaWQ9IltbX3BhZ2VOdW1iZXJJbnB1dC5pbnZhbGlkXV0iIG9uLXZhbHVlLWNoYW5nZWQ9Il9xdWVyeVNlcnZlciI+CiAgICAgICAgICAgICAgICA8ZGl2IHNsb3Q9InN1ZmZpeCIgY2xhc3M9InBhZ2Utc3VmZml4Ij4vIFtbX3BhZ2VDb3VudFN0cl1dPC9kaXY+CiAgICAgICAgICAgICAgPC9wYXBlci1pbnB1dD4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImlubGluZS1lbGVtZW50IHBhZ2Utc2l6ZS1pbnB1dCI+CiAgICAgICAgICAgICAgPHBhcGVyLWlucHV0IGxhYmVsPSJNYXggIyBvZiBzZXNzaW9uIGdyb3VwcyBwZXIgcGFnZToiIHZhbHVlPSJ7e19wYWdlU2l6ZUlucHV0LnZhbHVlfX0iIGFsbG93ZWQtcGF0dGVybj0iWzAtOV0iIGVycm9yLW1lc3NhZ2U9IkludmFsaWQgaW5wdXQiIGludmFsaWQ9IltbX3BhZ2VTaXplSW5wdXQuaW52YWxpZF1dIiBvbi12YWx1ZS1jaGFuZ2VkPSJfcXVlcnlTZXJ2ZXIiPgogICAgICAgICAgICAgIDwvcGFwZXItaW5wdXQ+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC92YWFkaW4tc3BsaXQtbGF5b3V0PgogICAgICA8L3ZhYWRpbi1zcGxpdC1sYXlvdXQ+CiAgICA8L2Rpdj4KICAgIDxzdHlsZT4KICAgICAgLnBhbmUgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIH0KICAgICAgLnNlY3Rpb24gewogICAgICAgIG1hcmdpbjogNXB4IDEwcHggNXB4IDEwcHg7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgfQogICAgICAuc2VjdGlvbi10aXRsZSB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogN3B4OwogICAgICB9CiAgICAgICNoeXBlcnBhcmFtZXRlcnMtbWV0cmljcy1zdGF0dXNlcyB7CiAgICAgICAgZmxleC1iYXNpczogNzAlOwogICAgICAgIGZsZXgtc2hyaW5rOiAxOwogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgfQogICAgICAjaHlwZXJwYXJhbWV0ZXJzLW1ldHJpY3MgewogICAgICAgIGZsZXgtYmFzaXM6IDkwJTsKICAgICAgICBmbGV4LXNocmluazogMTsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgIH0KICAgICAgLmh5cGVycGFyYW1ldGVycyB7CiAgICAgICAgZmxleC1iYXNpczogYXV0bzsKICAgICAgICBmbGV4LXNocmluazogMTsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgIH0KICAgICAgLm1ldHJpY3MgewogICAgICAgIGZsZXgtYmFzaXM6IGF1dG87CiAgICAgICAgZmxleC1zaHJpbms6IDE7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICB9CiAgICAgIC5zdGF0dXNlcyB7CiAgICAgICAgZmxleC1iYXNpczogYXV0bzsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgICBmbGV4LWdyb3c6IDA7CiAgICAgIH0KICAgICAgI3NvcnRpbmctcGFnaW5nIHsKICAgICAgICBmbGV4LWJhc2lzOiAzMCU7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgZmxleC1ncm93OiAwOwogICAgICB9CiAgICAgIC5zb3J0aW5nIHsKICAgICAgICBmbGV4LWJhc2lzOiBhdXRvOwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICAgIGZsZXgtZ3JvdzogMDsKICAgICAgfQogICAgICAucGFnaW5nIHsKICAgICAgICBmbGV4LWJhc2lzOiBhdXRvOwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICAgIGZsZXgtZ3JvdzogMDsKICAgICAgfQogICAgICAuZGlzY3JldGUtdmFsdWUtY2hlY2tib3gsCiAgICAgIC5tZXRyaWMtY2hlY2tib3gsCiAgICAgIC5ocGFyYW0tY2hlY2tib3ggewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CiAgICAgIC5kaXNjcmV0ZS12YWx1ZS1jaGVja2JveCB7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDIwcHg7CiAgICAgIH0KICAgICAgLmhwYXJhbSwKICAgICAgLm1ldHJpYyB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH0KICAgICAgLmlubGluZS1lbGVtZW50IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgd2lkdGg6IDQwJTsKICAgICAgICBtYXJnaW4tbGVmdDogMTBweDsKICAgICAgfQogICAgICAucGFnZS1udW1iZXItaW5wdXQgewogICAgICAgIHdpZHRoOiAyMCU7CiAgICAgIH0KICAgICAgLnBhZ2Utc2l6ZS1pbnB1dCB7CiAgICAgICAgd2lkdGg6IDYwJTsKICAgICAgfQogICAgICB2YWFkaW4tc3BsaXQtbGF5b3V0IHsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIH0KICAgICAgcGFwZXItbGlzdGJveCB7CiAgICAgICAgbWF4LWhlaWdodDogMTVlbTsKICAgICAgfQogICAgICAucGFnZS1zdWZmaXggewogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KICA8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdGYtaHBhcmFtcy1xdWVyeS1wYW5lL3RmLWhwYXJhbXMtcXVlcnktcGFuZS5odG1sLmpzClBvbHltZXIoe2lzOiJ0Zi1ocGFyYW1zLXF1ZXJ5LXBhbmUiLHByb3BlcnRpZXM6e2JhY2tlbmQ6T2JqZWN0LGV4cGVyaW1lbnROYW1lOlN0cmluZyxjb25maWd1cmF0aW9uOnt0eXBlOk9iamVjdCx2YWx1ZTooKT0+KHtzY2hlbWE6e2hwYXJhbUNvbHVtbnM6W10sbWV0cmljQ29sdW1uczpbXX0sY29sdW1uc1Zpc2liaWxpdHk6W10sdmlzaWJsZVNjaGVtYTp7aHBhcmFtSW5mb3M6W10sbWV0cmljSW5mb3M6W119fSkscmVhZE9ubHk6ITAsbm90aWZ5OiEwfSxzZXNzaW9uR3JvdXBzOnt0eXBlOkFycmF5LHZhbHVlOigpPT5bXSxyZWFkT25seTohMCxub3RpZnk6ITB9LF9leHBlcmltZW50Ok9iamVjdCxfaHBhcmFtczpBcnJheSxfbWV0cmljczpBcnJheSxfc3RhdHVzZXM6e3R5cGU6QXJyYXksdmFsdWU6KCk9Plt7dmFsdWU6IlNUQVRVU19VTktOT1dOIixkaXNwbGF5TmFtZToiVW5rbm93biIsYWxsb3dlZDohMH0se3ZhbHVlOiJTVEFUVVNfU1VDQ0VTUyIsZGlzcGxheU5hbWU6IlN1Y2Nlc3MiLAphbGxvd2VkOiEwfSx7dmFsdWU6IlNUQVRVU19GQUlMVVJFIixkaXNwbGF5TmFtZToiRmFpbHVyZSIsYWxsb3dlZDohMH0se3ZhbHVlOiJTVEFUVVNfUlVOTklORyIsZGlzcGxheU5hbWU6IlJ1bm5pbmciLGFsbG93ZWQ6ITB9XX0sX2dldEV4cGVyaW1lbnRSZXNvbHZlZDp7dHlwZTpPYmplY3QsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFByb21pc2UoYT0+e3RoaXMuX3Jlc29sdmVHZXRFeHBlcmltZW50PWF9KX19LF9yZXNvbHZlR2V0RXhwZXJpbWVudDpGdW5jdGlvbixfbGlzdFNlc3Npb25Hcm91cHNDYW5jZWxsZXI6e3R5cGU6T2JqZWN0LHZhbHVlOigpPT5uZXcgUGsuQ2FuY2VsbGVyfSxfc29ydEJ5SW5kZXg6TnVtYmVyLF9zb3J0RGlyZWN0aW9uOk51bWJlcixfcGFnZVNpemVJbnB1dDp7dHlwZTpPYmplY3QsdmFsdWU6e3ZhbHVlOiIxMDAiLGludmFsaWQ6ITF9fSxfcGFnZU51bWJlcklucHV0Ont0eXBlOk9iamVjdCx2YWx1ZTp7dmFsdWU6IjEiLGludmFsaWQ6ITF9fSwKX3BhZ2VDb3VudFN0cjp7dHlwZTpTdHJpbmcsdmFsdWU6Ij8ifSxfdG90YWxTZXNzaW9uR3JvdXBzQ291bnRTdHI6U3RyaW5nfSxvYnNlcnZlcnM6WyJfY29tcHV0ZUV4cGVyaW1lbnRBbmRSZWxhdGVkUHJvcHMoYmFja2VuZCwgZXhwZXJpbWVudE5hbWUpIiwiX3VwZGF0ZUNvbmZpZ3VyYXRpb24oX2hwYXJhbXMuKiwgX21ldHJpY3MuKikiXSxyZWxvYWQoKXt0aGlzLl9xdWVyeVNlcnZlcigpfSxfY29tcHV0ZUV4cGVyaW1lbnRBbmRSZWxhdGVkUHJvcHMoKXtjb25zdCBhPXRmLmhwYXJhbXMudXRpbHM7YS5pc051bGxPclVuZGVmaW5lZCh0aGlzLmJhY2tlbmQpfHxhLmlzTnVsbE9yVW5kZWZpbmVkKHRoaXMuZXhwZXJpbWVudE5hbWUpfHx0aGlzLmJhY2tlbmQuZ2V0RXhwZXJpbWVudCh7ZXhwZXJpbWVudE5hbWU6dGhpcy5leHBlcmltZW50TmFtZX0pLnRoZW4oYz0+e18uaXNFcXVhbChjLHRoaXMuX2V4cGVyaW1lbnQpfHwodGhpcy5zZXQoIl9leHBlcmltZW50IixjKSx0aGlzLl9jb21wdXRlSFBhcmFtcygpLAp0aGlzLl9jb21wdXRlTWV0cmljcygpLHRoaXMuX3F1ZXJ5U2VydmVyKCksdGhpcy5fcmVzb2x2ZUdldEV4cGVyaW1lbnQoKSl9KX0sX2NvbXB1dGVIUGFyYW1zKCl7Y29uc3QgYT1bXTt0aGlzLl9leHBlcmltZW50LmhwYXJhbUluZm9zLmZvckVhY2goKGMsZCk9Pntjb25zdCBmPXtpbmZvOmMsZGlzcGxheWVkOjU+ZCxmaWx0ZXI6e319O2YuaW5mby5oYXNPd25Qcm9wZXJ0eSgiZG9tYWluRGlzY3JldGUiKT8oZi5maWx0ZXIuZG9tYWluRGlzY3JldGU9W10sZi5pbmZvLmRvbWFpbkRpc2NyZXRlLmZvckVhY2goZz0+e2YuZmlsdGVyLmRvbWFpbkRpc2NyZXRlLnB1c2goe3ZhbHVlOmcsY2hlY2tlZDohMH0pfSkpOiJEQVRBX1RZUEVfQk9PTCI9PT1mLmluZm8udHlwZT9mLmZpbHRlci5kb21haW5EaXNjcmV0ZT1be3ZhbHVlOiExLGNoZWNrZWQ6ITB9LHt2YWx1ZTohMCxjaGVja2VkOiEwfV06IkRBVEFfVFlQRV9GTE9BVDY0Ij09PWYuaW5mby50eXBlP2YuZmlsdGVyLmludGVydmFsPXttaW46e3ZhbHVlOiIiLAppbnZhbGlkOiExfSxtYXg6e3ZhbHVlOiIiLGludmFsaWQ6ITF9fToiREFUQV9UWVBFX1NUUklORyI9PT1mLmluZm8udHlwZT9mLmZpbHRlci5yZWdleHA9IiI6Y29uc29sZS53YXJuKCJ1bmtub3duIGhwYXJhbS5pbmZvLnR5cGU6ICVzIixmLmluZm8udHlwZSk7YS5wdXNoKGYpfSk7dGhpcy5zZXQoIl9ocGFyYW1zIixhKX0sX2NvbXB1dGVNZXRyaWNzKCl7Y29uc3QgYT1bXTt0aGlzLl9leHBlcmltZW50Lm1ldHJpY0luZm9zLmZvckVhY2goKGMsZCk9PnthLnB1c2goe2luZm86YyxmaWx0ZXI6e2ludGVydmFsOnttaW46e3ZhbHVlOiIiLGludmFsaWQ6ITF9LG1heDp7dmFsdWU6IiIsaW52YWxpZDohMX19fSxkaXNwbGF5ZWQ6NT5kfSl9KTt0aGlzLnNldCgiX21ldHJpY3MiLGEpfSxfY29tcHV0ZVNjaGVtYSgpe3JldHVybiB0aGlzLl9ocGFyYW1zJiZ0aGlzLl9tZXRyaWNzP3tocGFyYW1Db2x1bW5zOnRoaXMuX2hwYXJhbXMubWFwKGE9Pih7aHBhcmFtSW5mbzphLmluZm99KSksbWV0cmljQ29sdW1uczp0aGlzLl9tZXRyaWNzLm1hcChhPT4KKHttZXRyaWNJbmZvOmEuaW5mb30pKX06e2hwYXJhbUNvbHVtbnM6W10sbWV0cmljQ29sdW1uczpbXX19LF91cGRhdGVDb25maWd1cmF0aW9uKCl7dGhpcy5kZWJvdW5jZSgiX3VwZGF0ZUNvbmZpZ3VyYXRpb24iLCgpPT57dGhpcy5fc2V0Q29uZmlndXJhdGlvbih7c2NoZW1hOnRoaXMuX2NvbXB1dGVTY2hlbWEoKSxjb2x1bW5zVmlzaWJpbGl0eTp0aGlzLl9jb21wdXRlQ29sdW1uc1Zpc2liaWxpdHkoKSx2aXNpYmxlU2NoZW1hOnRoaXMuX2NvbXB1dGVWaXNpYmxlU2NoZW1hKCl9KX0pfSxfY29tcHV0ZUNvbHVtbnNWaXNpYmlsaXR5KCl7cmV0dXJuIHRoaXMuX2hwYXJhbXMmJnRoaXMuX21ldHJpY3M/dGhpcy5faHBhcmFtcy5tYXAoYT0+YS5kaXNwbGF5ZWQpLmNvbmNhdCh0aGlzLl9tZXRyaWNzLm1hcChhPT5hLmRpc3BsYXllZCkpOltdfSxfY29tcHV0ZVZpc2libGVTY2hlbWEoKXtpZighdGhpcy5faHBhcmFtc3x8IXRoaXMuX21ldHJpY3MpcmV0dXJue2hwYXJhbUluZm9zOltdLAptZXRyaWNJbmZvczpbXX07Y29uc3QgYT10aGlzLl9ocGFyYW1zLmZpbHRlcihkPT5kLmRpc3BsYXllZCkubWFwKGQ9PmQuaW5mbyksYz10aGlzLl9tZXRyaWNzLmZpbHRlcihkPT5kLmRpc3BsYXllZCkubWFwKGQ9PmQuaW5mbyk7cmV0dXJue2hwYXJhbUluZm9zOmEsbWV0cmljSW5mb3M6Y319LF9xdWVyeVNlcnZlcigpe3RoaXMuZGVib3VuY2UoInF1ZXJ5U2VydmVyIiwoKT0+dGhpcy5fcXVlcnlTZXJ2ZXJOb0RlYm91bmNlKCksMTAwKX0sX3F1ZXJ5U2VydmVyTm9EZWJvdW5jZSgpe3JldHVybiB0aGlzLl9zZW5kTGlzdFNlc3Npb25Hcm91cHNSZXF1ZXN0KCkudGhlbih0aGlzLl9saXN0U2Vzc2lvbkdyb3Vwc0NhbmNlbGxlci5jYW5jZWxsYWJsZSgoe3ZhbHVlOmEsY2FuY2VsbGVkOmN9KT0+e2N8fCgwPD1hLnRvdGFsU2l6ZT8odGhpcy5zZXQoIl9wYWdlQ291bnRTdHIiLFN0cmluZyhNYXRoLmNlaWwoYS50b3RhbFNpemUvK3RoaXMuX3BhZ2VTaXplSW5wdXQudmFsdWUpKSksdGhpcy5zZXQoIl90b3RhbFNlc3Npb25Hcm91cHNDb3VudFN0ciIsCmEudG90YWxTaXplKSk6KHRoaXMuc2V0KCJfcGFnZUNvdW50U3RyIiwiPyIpLHRoaXMuc2V0KCJfdG90YWxTZXNzaW9uR3JvdXBzQ291bnRTdHIiLCJVbmtub3duIikpLHRmLmhwYXJhbXMudXRpbHMuc2V0QXJyYXlPYnNlcnZhYmx5KHRoaXMsYS5zZXNzaW9uR3JvdXBzKSl9KSl9LF9zZW5kTGlzdFNlc3Npb25Hcm91cHNSZXF1ZXN0KCl7Y29uc3QgYT10aGlzLl9idWlsZExpc3RTZXNzaW9uR3JvdXBzUmVxdWVzdCgpO2lmKG51bGwhPT1hKXJldHVybiB0aGlzLl9saXN0U2Vzc2lvbkdyb3Vwc0NhbmNlbGxlci5jYW5jZWxBbGwoKSx0aGlzLmJhY2tlbmQubGlzdFNlc3Npb25Hcm91cHMoYSl9LF9idWlsZExpc3RTZXNzaW9uR3JvdXBzUmVxdWVzdCgpe2Z1bmN0aW9uIGEocCl7dmFyIHE9ZC5nZXQocCsiLm1pbi52YWx1ZSIpO2NvbnNvbGUuYXNzZXJ0KHZvaWQgMCE9PXEpO3E9IiI9PT1xPyItSW5maW5pdHkiOitxO2Quc2V0KHArIi5taW4uaW52YWxpZCIsaXNOYU4ocSkpO2Y9ZiYmIWlzTmFOKHEpOwp2YXIgcj1kLmdldChwKyIubWF4LnZhbHVlIik7Y29uc29sZS5hc3NlcnQodm9pZCAwIT09cik7cj0iIj09PXI/IkluZmluaXR5IjorcjtkLnNldChwKyIubWF4LmludmFsaWQiLGlzTmFOKHIpKTtmPWYmJiFpc05hTihyKTtyZXR1cm4gaXNOYU4ocSl8fGlzTmFOKHIpP251bGw6e21pblZhbHVlOnEsbWF4VmFsdWU6cn19ZnVuY3Rpb24gYyhwKXt2YXIgcT1kLmdldChwKyIudmFsdWUiKTtjb25zb2xlLmFzc2VydCh2b2lkIDAhPT1xKTtxPStxO2NvbnN0IHI9TnVtYmVyLmlzSW50ZWdlcihxKSYmMDxxO2Quc2V0KHArIi5pbnZhbGlkIiwhcik7Zj1mJiZyO3JldHVybiByP3E6bnVsbH1jb25zdCBkPXRoaXM7bGV0IGY9ITA7Y29uc3QgZz10aGlzLl9zdGF0dXNlcy5maWx0ZXIocD0+cC5hbGxvd2VkKS5tYXAocD0+cC52YWx1ZSk7bGV0IGw9W107dGhpcy5faHBhcmFtcy5mb3JFYWNoKChwLHEpPT57bGV0IHI9e2hwYXJhbTpwLmluZm8ubmFtZX07aWYocC5maWx0ZXIuZG9tYWluRGlzY3JldGUpci5maWx0ZXJEaXNjcmV0ZT0KW10scC5maWx0ZXIuZG9tYWluRGlzY3JldGUuZm9yRWFjaCh0PT57dC5jaGVja2VkJiZyLmZpbHRlckRpc2NyZXRlLnB1c2godC52YWx1ZSl9KTtlbHNlIGlmKHAuZmlsdGVyLmludGVydmFsKXIuZmlsdGVySW50ZXJ2YWw9YSgiX2hwYXJhbXMuIitxKyIuZmlsdGVyLmludGVydmFsIik7ZWxzZSBpZihwLmZpbHRlci5yZWdleHApci5maWx0ZXJSZWdleHA9cC5maWx0ZXIucmVnZXhwO2Vsc2UgcmV0dXJuIGNvbnNvbGUuZXJyb3IoImhwYXJhbS5maWx0ZXIgd2l0aCBubyBkb21haW5EaXNjcmV0ZSwgaW50ZXJ2YWwgb3IgcmVnZXhwIHByb3BlcnRpZXMgc2V0OiAlcyIscCksbnVsbDtsLnB1c2gocil9KTt0aGlzLl9tZXRyaWNzLmZvckVhY2goKHAscSk9PntwPXttZXRyaWM6cC5pbmZvLm5hbWUsZmlsdGVySW50ZXJ2YWw6YSgiX21ldHJpY3MuIitxKyIuZmlsdGVyLmludGVydmFsIil9O2wucHVzaChwKX0pO2lmKHZvaWQgMCE9PXRoaXMuX3NvcnRCeUluZGV4JiZ2b2lkIDAhPT10aGlzLl9zb3J0RGlyZWN0aW9uKXtpZighKHRoaXMuX3NvcnRCeUluZGV4IGluCmwpKXJldHVybiBjb25zb2xlLmVycm9yKCJObyBjb2x1bW4gaW4gY29sUGFyYW1zIHdpdGggaW5kZXggc29ydEJ5SW5kZXg6ICVzIix0aGlzLl9zb3J0QnlJbmRleCksbnVsbDtsW3RoaXMuX3NvcnRCeUluZGV4XS5vcmRlcj0wPT09dGhpcy5fc29ydERpcmVjdGlvbj8iT1JERVJfQVNDIjoiT1JERVJfREVTQyJ9Y29uc3Qgaz1jKCJfcGFnZU51bWJlcklucHV0IiksbT1jKCJfcGFnZVNpemVJbnB1dCIpO3JldHVybiBmP3tleHBlcmltZW50TmFtZTp0aGlzLmV4cGVyaW1lbnROYW1lLGFsbG93ZWRTdGF0dXNlczpnLGNvbFBhcmFtczpsLHN0YXJ0SW5kZXg6bSooay0xKSxzbGljZVNpemU6bX06bnVsbH0sX21ldHJpY1NvcnRCeUluZGV4KGEpe3JldHVybiBhK3RoaXMuX2hwYXJhbXMubGVuZ3RofSxfaHBhcmFtTmFtZTp0Zi5ocGFyYW1zLnV0aWxzLmhwYXJhbU5hbWUsX21ldHJpY05hbWU6dGYuaHBhcmFtcy51dGlscy5tZXRyaWNOYW1lLF9wcmV0dHlQcmludDp0Zi5ocGFyYW1zLnV0aWxzLnByZXR0eVByaW50fSk7Cjwvc2NyaXB0Pgo8L2RvbS1tb2R1bGU+CgoKCgoKCgoKPGRvbS1tb2R1bGUgaWQ9InBhcGVyLWhlYWRlci1wYW5lbCI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LXZlcnRpY2FsOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaGVhZGVyLXBhbmVsOwogICAgICB9CgogICAgICAjbWFpbkNvbnRhaW5lciB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWZsZXg7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgICAgb3ZlcmZsb3cteDogaGlkZGVuOwogICAgICAgIC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaDsKICAgICAgfQoKICAgICAgI21haW5QYW5lbCB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LXZlcnRpY2FsOwogICAgICAgIEBhcHBseSAtLWxheW91dC1mbGV4OwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBtaW4taGVpZ2h0OiAwOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWhlYWRlci1wYW5lbC1ib2R5OwogICAgICB9CgogICAgICAjbWFpbkNvbnRhaW5lciB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaGVhZGVyLXBhbmVsLWNvbnRhaW5lcjsKICAgICAgfQoKICAgICAgLyoKICAgICAgICogbW9kZTogc2Nyb2xsCiAgICAgICAqLwogICAgICA6aG9zdChbbW9kZT1zY3JvbGxdKSAjbWFpbkNvbnRhaW5lciB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaGVhZGVyLXBhbmVsLXNjcm9sbC1jb250YWluZXI7CiAgICAgICAgb3ZlcmZsb3c6IHZpc2libGU7CiAgICAgIH0KCiAgICAgIDpob3N0KFttb2RlPXNjcm9sbF0pIHsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIG92ZXJmbG93LXg6IGhpZGRlbjsKICAgICAgICAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7CiAgICAgIH0KCiAgICAgIC8qCiAgICAgICAqIG1vZGU6IGNvdmVyCiAgICAgICAqLwogICAgICA6aG9zdChbbW9kZT1jb3Zlcl0pICNtYWluQ29udGFpbmVyIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1oZWFkZXItcGFuZWwtY292ZXItY29udGFpbmVyOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgIH0KCiAgICAgIDpob3N0KFttb2RlPWNvdmVyXSkgI21haW5QYW5lbCB7CiAgICAgICAgcG9zaXRpb246IHN0YXRpYzsKICAgICAgfQoKICAgICAgLyoKICAgICAgICogbW9kZTogc3RhbmRhcmQKICAgICAgICovCiAgICAgIDpob3N0KFttb2RlPXN0YW5kYXJkXSkgI21haW5Db250YWluZXIgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWhlYWRlci1wYW5lbC1zdGFuZGFyZC1jb250YWluZXI7CiAgICAgIH0KCiAgICAgIC8qCiAgICAgICAqIG1vZGU6IHNlYW1lZAogICAgICAgKi8KICAgICAgOmhvc3QoW21vZGU9c2VhbWVkXSkgI21haW5Db250YWluZXIgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWhlYWRlci1wYW5lbC1zZWFtZWQtY29udGFpbmVyOwogICAgICB9CgoKICAgICAgLyoKICAgICAgICogbW9kZTogd2F0ZXJmYWxsCiAgICAgICAqLwogICAgICA6aG9zdChbbW9kZT13YXRlcmZhbGxdKSAjbWFpbkNvbnRhaW5lciB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaGVhZGVyLXBhbmVsLXdhdGVyZmFsbC1jb250YWluZXI7CiAgICAgIH0KCiAgICAgIC8qCiAgICAgICAqIG1vZGU6IHdhdGVyZmFsbC10YWxsCiAgICAgICAqLwogICAgICA6aG9zdChbbW9kZT13YXRlcmZhbGwtdGFsbF0pICNtYWluQ29udGFpbmVyIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1oZWFkZXItcGFuZWwtd2F0ZXJmYWxsLXRhbGwtY29udGFpbmVyOwogICAgICB9CgogICAgICAjZHJvcFNoYWRvdyB7CiAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjVzOwogICAgICAgIGhlaWdodDogNnB4OwogICAgICAgIGJveC1zaGFkb3c6IGluc2V0IDBweCA1cHggNnB4IC0zcHggcmdiYSgwLCAwLCAwLCAwLjQpOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWhlYWRlci1wYW5lbC1zaGFkb3c7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIH0KCiAgICAgICNkcm9wU2hhZG93Lmhhcy1zaGFkb3cgewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgIH0KCiAgICAgICNtYWluQ29udGFpbmVyID4gOjpzbG90dGVkKC5maXQpIHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtZml0OwogICAgICB9CgogICAgPC9zdHlsZT4KCiAgICA8c2xvdCBpZD0iaGVhZGVyU2xvdCIgbmFtZT0iaGVhZGVyIj48L3Nsb3Q+CgogICAgPGRpdiBpZD0ibWFpblBhbmVsIj4KICAgICAgPGRpdiBpZD0ibWFpbkNvbnRhaW5lciIgY2xhc3MkPSJbW19jb21wdXRlTWFpbkNvbnRhaW5lckNsYXNzKG1vZGUpXV0iPgogICAgICAgIDxzbG90Pjwvc2xvdD4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgaWQ9ImRyb3BTaGFkb3ciPjwvZGl2PgogICAgPC9kaXY+CiAgPC90ZW1wbGF0ZT4KCiAgPHNjcmlwdD4vL35+V0VCUEFUSH5+L3BhcGVyLWhlYWRlci1wYW5lbC9wYXBlci1oZWFkZXItcGFuZWwuaHRtbC5qcwooZnVuY3Rpb24oKXt2YXIgYT17c2Nyb2xsOiEwfSxjPXtzdGFuZGFyZDoyLHdhdGVyZmFsbDoxLCJ3YXRlcmZhbGwtdGFsbCI6MX0sZD17IndhdGVyZmFsbC10YWxsIjohMH07UG9seW1lcih7aXM6InBhcGVyLWhlYWRlci1wYW5lbCIscHJvcGVydGllczp7bW9kZTp7dHlwZTpTdHJpbmcsdmFsdWU6InN0YW5kYXJkIixvYnNlcnZlcjoiX21vZGVDaGFuZ2VkIixyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9LHNoYWRvdzp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSx0YWxsQ2xhc3M6e3R5cGU6U3RyaW5nLHZhbHVlOiJ0YWxsIn0sYXRUb3A6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMCxub3RpZnk6ITAscmVhZE9ubHk6ITAscmVmbGVjdFRvQXR0cmlidXRlOiEwfX0sb2JzZXJ2ZXJzOlsiX2NvbXB1dGVEcm9wU2hhZG93SGlkZGVuKGF0VG9wLCBtb2RlLCBzaGFkb3cpIl0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl9hZGRMaXN0ZW5lcigpO3RoaXMuX2tlZXBTY3JvbGxpbmdTdGF0ZSgpfSxkZXRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX3JlbW92ZUxpc3RlbmVyKCl9LApyZWFkeTpmdW5jdGlvbigpe3RoaXMuc2Nyb2xsSGFuZGxlcj10aGlzLl9zY3JvbGwuYmluZCh0aGlzKTtjb25zb2xlLndhcm4odGhpcy5pcywiaXMgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSBhcHAtbGF5b3V0IGluc3RlYWQhIil9LGdldCBoZWFkZXIoKXtyZXR1cm4gUG9seW1lci5kb20odGhpcy4kLmhlYWRlclNsb3QpLmdldERpc3RyaWJ1dGVkTm9kZXMoKVswXX0sZ2V0IHNjcm9sbGVyKCl7cmV0dXJuIHRoaXMuX2dldFNjcm9sbGVyRm9yTW9kZSh0aGlzLm1vZGUpfSxnZXQgdmlzaWJsZVNoYWRvdygpe3JldHVybiB0aGlzLiQuZHJvcFNoYWRvdy5jbGFzc0xpc3QuY29udGFpbnMoImhhcy1zaGFkb3ciKX0sX2NvbXB1dGVEcm9wU2hhZG93SGlkZGVuOmZ1bmN0aW9uKGYsZyl7Zz1jW2ddO3RoaXMuc2hhZG93P3RoaXMudG9nZ2xlQ2xhc3MoImhhcy1zaGFkb3ciLCEwLHRoaXMuJC5kcm9wU2hhZG93KToyPT09Zz90aGlzLnRvZ2dsZUNsYXNzKCJoYXMtc2hhZG93IiwhMCx0aGlzLiQuZHJvcFNoYWRvdyk6CjEhPT1nfHxmP3RoaXMudG9nZ2xlQ2xhc3MoImhhcy1zaGFkb3ciLCExLHRoaXMuJC5kcm9wU2hhZG93KTp0aGlzLnRvZ2dsZUNsYXNzKCJoYXMtc2hhZG93IiwhMCx0aGlzLiQuZHJvcFNoYWRvdyl9LF9jb21wdXRlTWFpbkNvbnRhaW5lckNsYXNzOmZ1bmN0aW9uKGYpe3ZhciBnPXt9O2cuZmxleD0iY292ZXIiIT09ZjtyZXR1cm4gT2JqZWN0LmtleXMoZykuZmlsdGVyKGZ1bmN0aW9uKGwpe3JldHVybiBnW2xdfSkuam9pbigiICIpfSxfYWRkTGlzdGVuZXI6ZnVuY3Rpb24oKXt0aGlzLnNjcm9sbGVyLmFkZEV2ZW50TGlzdGVuZXIoInNjcm9sbCIsdGhpcy5zY3JvbGxIYW5kbGVyKX0sX3JlbW92ZUxpc3RlbmVyOmZ1bmN0aW9uKCl7dGhpcy5zY3JvbGxlci5yZW1vdmVFdmVudExpc3RlbmVyKCJzY3JvbGwiLHRoaXMuc2Nyb2xsSGFuZGxlcil9LF9tb2RlQ2hhbmdlZDpmdW5jdGlvbihmLGcpe3ZhciBsPXRoaXMuaGVhZGVyO2wmJihkW2ddJiYhZFtmXT8obC5jbGFzc0xpc3QucmVtb3ZlKHRoaXMudGFsbENsYXNzKSwKdGhpcy5hc3luYyhmdW5jdGlvbigpe2wuY2xhc3NMaXN0LnJlbW92ZSgiYW5pbWF0ZSIpfSwyMDApKTp0aGlzLnRvZ2dsZUNsYXNzKCJhbmltYXRlIixkW2ZdLGwpKTt0aGlzLl9rZWVwU2Nyb2xsaW5nU3RhdGUoKX0sX2tlZXBTY3JvbGxpbmdTdGF0ZTpmdW5jdGlvbigpe3ZhciBmPXRoaXMuc2Nyb2xsZXIsZz10aGlzLmhlYWRlcjt0aGlzLl9zZXRBdFRvcCgwPT09Zi5zY3JvbGxUb3ApO2cmJnRoaXMudGFsbENsYXNzJiZkW3RoaXMubW9kZV0mJnRoaXMudG9nZ2xlQ2xhc3ModGhpcy50YWxsQ2xhc3MsdGhpcy5hdFRvcHx8Zy5jbGFzc0xpc3QuY29udGFpbnModGhpcy50YWxsQ2xhc3MpJiZmLnNjcm9sbEhlaWdodDx0aGlzLm9mZnNldEhlaWdodCxnKX0sX3Njcm9sbDpmdW5jdGlvbigpe3RoaXMuX2tlZXBTY3JvbGxpbmdTdGF0ZSgpO3RoaXMuZmlyZSgiY29udGVudC1zY3JvbGwiLHt0YXJnZXQ6dGhpcy5zY3JvbGxlcn0se2J1YmJsZXM6ITF9KX0sX2dldFNjcm9sbGVyRm9yTW9kZTpmdW5jdGlvbihmKXtyZXR1cm4gYVtmXT8KdGhpczp0aGlzLiQubWFpbkNvbnRhaW5lcn19KX0pKCk7Cjwvc2NyaXB0Pgo8L2RvbS1tb2R1bGU+CgoKCgoKCgoKCgoKPGRvbS1tb2R1bGUgaWQ9InBhcGVyLXRvb2xiYXIiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIC0tY2FsY3VsYXRlZC1wYXBlci10b29sYmFyLWhlaWdodDogdmFyKC0tcGFwZXItdG9vbGJhci1oZWlnaHQsIDY0cHgpOwogICAgICAgIC0tY2FsY3VsYXRlZC1wYXBlci10b29sYmFyLXNtLWhlaWdodDogdmFyKC0tcGFwZXItdG9vbGJhci1zbS1oZWlnaHQsIDU2cHgpOwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgIC1tb3otYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICBoZWlnaHQ6IHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItdG9vbGJhci1oZWlnaHQpOwogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXBhcGVyLXRvb2xiYXItYmFja2dyb3VuZCwgdmFyKC0tcHJpbWFyeS1jb2xvcikpOwogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci10b29sYmFyLWNvbG9yLCB2YXIoLS1kYXJrLXRoZW1lLXRleHQtY29sb3IpKTsKICAgICAgICBAYXBwbHkgLS1wYXBlci10b29sYmFyOwogICAgICB9CgogICAgICA6aG9zdCguYW5pbWF0ZSkgewogICAgICAgIHRyYW5zaXRpb246IHZhcigtLXBhcGVyLXRvb2xiYXItdHJhbnNpdGlvbiwgaGVpZ2h0IDAuMThzIGVhc2UtaW4pOwogICAgICB9CgogICAgICA6aG9zdCgubWVkaXVtLXRhbGwpIHsKICAgICAgICBoZWlnaHQ6IGNhbGModmFyKC0tY2FsY3VsYXRlZC1wYXBlci10b29sYmFyLWhlaWdodCkgKiAyKTsKICAgICAgICBAYXBwbHkgLS1wYXBlci10b29sYmFyLW1lZGl1bTsKICAgICAgfQoKICAgICAgOmhvc3QoLnRhbGwpIHsKICAgICAgICBoZWlnaHQ6IGNhbGModmFyKC0tY2FsY3VsYXRlZC1wYXBlci10b29sYmFyLWhlaWdodCkgKiAzKTsKICAgICAgICBAYXBwbHkgLS1wYXBlci10b29sYmFyLXRhbGw7CiAgICAgIH0KCiAgICAgIC50b29sYmFyLXRvb2xzIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgaGVpZ2h0OiB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXRvb2xiYXItaGVpZ2h0KTsKICAgICAgICBwYWRkaW5nOiAwIDE2cHg7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWhvcml6b250YWw7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWNlbnRlcjsKICAgICAgICBAYXBwbHkgLS1wYXBlci10b29sYmFyLWNvbnRlbnQ7CiAgICAgIH0KCiAgICAgIC8qCiAgICAgICAqIFRPRE86IFdoZXJlIHNob3VsZCBtZWRpYSBxdWVyeSBicmVha3BvaW50cyBsaXZlIHNvIHRoZXkgY2FuIGJlIHNoYXJlZCBiZXR3ZWVuIGVsZW1lbnRzPwogICAgICAgKi8KCiAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiA2MDBweCkgewogICAgICAgIDpob3N0IHsKICAgICAgICAgIGhlaWdodDogdmFyKC0tY2FsY3VsYXRlZC1wYXBlci10b29sYmFyLXNtLWhlaWdodCk7CiAgICAgICAgfQoKICAgICAgICA6aG9zdCgubWVkaXVtLXRhbGwpIHsKICAgICAgICAgIGhlaWdodDogY2FsYyh2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXRvb2xiYXItc20taGVpZ2h0KSAqIDIpOwogICAgICAgIH0KCiAgICAgICAgOmhvc3QoLnRhbGwpIHsKICAgICAgICAgIGhlaWdodDogY2FsYyh2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXRvb2xiYXItc20taGVpZ2h0KSAqIDMpOwogICAgICAgIH0KCiAgICAgICAgLnRvb2xiYXItdG9vbHMgewogICAgICAgICAgaGVpZ2h0OiB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXRvb2xiYXItc20taGVpZ2h0KTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgICN0b3BCYXIgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfQoKICAgICAgLyogbWlkZGxlIGJhciAqLwogICAgICAjbWlkZGxlQmFyIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgIH0KCiAgICAgIDpob3N0KC50YWxsKSAjbWlkZGxlQmFyLAogICAgICA6aG9zdCgubWVkaXVtLXRhbGwpICNtaWRkbGVCYXIgewogICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDEwMCUpOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgxMDAlKTsKICAgICAgfQoKICAgICAgLyogYm90dG9tIGJhciAqLwogICAgICAjYm90dG9tQmFyIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgIH0KCiAgICAgIC8qCiAgICAgICAqIG1ha2UgZWxlbWVudHMgKGUuZy4gYnV0dG9ucykgcmVzcG9uZCB0byBtb3VzZS90b3VjaCBldmVudHMKICAgICAgICoKICAgICAgICogYC50b29sYmFyLXRvb2xzYCBkaXNhYmxlcyB0b3VjaCBldmVudHMgc28gbXVsdGlwbGUgdG9vbGJhcnMgY2FuIHN0YWNrIGFuZCBub3QKICAgICAgICogYWJzb3JiIGV2ZW50cy4gQWxsIGNoaWxkcmVuIG11c3QgaGF2ZSBwb2ludGVyIGV2ZW50cyByZS1lbmFibGVkIHRvIHdvcmsgYXMKICAgICAgICogZXhwZWN0ZWQuCiAgICAgICAqLwogICAgICAudG9vbGJhci10b29scyA+IDo6c2xvdHRlZCgqOm5vdChbZGlzYWJsZWRdKSkgewogICAgICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvOwogICAgICB9CgogICAgICAudG9vbGJhci10b29scyA+IDo6c2xvdHRlZCgudGl0bGUpIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1iYXNlOwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgICAgICBmb250LXNpemU6IDIwcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgICAgICBsaW5lLWhlaWdodDogMTsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtZmxleDsKICAgICAgfQoKICAgICAgLnRvb2xiYXItdG9vbHMgPiA6OnNsb3R0ZWQoLnRpdGxlKSB7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDU2cHg7CiAgICAgIH0KCiAgICAgIC50b29sYmFyLXRvb2xzID4gOjpzbG90dGVkKHBhcGVyLWljb24tYnV0dG9uICsgLnRpdGxlKSB7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDA7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBUaGUgLS1wYXBlci10b29sYmFyLXRpdGxlIG1peGluIGlzIGFwcGxpZWQgaGVyZSBpbnN0ZWFkIG9mIGFib3ZlIHRvCiAgICAgICAqIGZpeCB0aGUgaXNzdWUgd2l0aCBtYXJnaW4tbGVmdCBiZWluZyBpZ25vcmVkIGR1ZSB0byBjc3Mgb3JkZXJpbmcuCiAgICAgICAqLwogICAgICAudG9vbGJhci10b29scyA+IDo6c2xvdHRlZCgudGl0bGUpIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci10b29sYmFyLXRpdGxlOwogICAgICB9CgogICAgICAudG9vbGJhci10b29scyA+IDo6c2xvdHRlZChwYXBlci1pY29uLWJ1dHRvbltpY29uPW1lbnVdKSB7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiAyNHB4OwogICAgICB9CgogICAgICAudG9vbGJhci10b29scyA+IDo6c2xvdHRlZCguZml0KSB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogYXV0bzsKICAgICAgICByaWdodDogMDsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICB3aWR0aDogYXV0bzsKICAgICAgICBtYXJnaW46IDA7CiAgICAgIH0KCiAgICAgIC8qIFRPRE8obm9tcyk6IFVudGlsIHdlIGhhdmUgYSBiZXR0ZXIgc29sdXRpb24gZm9yIGNsYXNzZXMgdGhhdCBkb24ndCB1c2UKICAgICAgICogL2RlZXAvIGNyZWF0ZSBvdXIgb3duLgogICAgICAgKi8KICAgICAgLnN0YXJ0LWp1c3RpZmllZCB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LXN0YXJ0LWp1c3RpZmllZDsKICAgICAgfQoKICAgICAgLmNlbnRlci1qdXN0aWZpZWQgewogICAgICAgIEBhcHBseSAtLWxheW91dC1jZW50ZXItanVzdGlmaWVkOwogICAgICB9CgogICAgICAuZW5kLWp1c3RpZmllZCB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWVuZC1qdXN0aWZpZWQ7CiAgICAgIH0KCiAgICAgIC5hcm91bmQtanVzdGlmaWVkIHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtYXJvdW5kLWp1c3RpZmllZDsKICAgICAgfQoKICAgICAgLmp1c3RpZmllZCB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWp1c3RpZmllZDsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8ZGl2IGlkPSJ0b3BCYXIiIGNsYXNzJD0idG9vbGJhci10b29scyBbW19jb21wdXRlQmFyRXh0cmFDbGFzc2VzKGp1c3RpZnkpXV0iPgogICAgICA8c2xvdCBuYW1lPSJ0b3AiPjwvc2xvdD4KICAgIDwvZGl2PgoKICAgIDxkaXYgaWQ9Im1pZGRsZUJhciIgY2xhc3MkPSJ0b29sYmFyLXRvb2xzIFtbX2NvbXB1dGVCYXJFeHRyYUNsYXNzZXMobWlkZGxlSnVzdGlmeSldXSI+CiAgICAgIDxzbG90IG5hbWU9Im1pZGRsZSI+PC9zbG90PgogICAgPC9kaXY+CgogICAgPGRpdiBpZD0iYm90dG9tQmFyIiBjbGFzcyQ9InRvb2xiYXItdG9vbHMgW1tfY29tcHV0ZUJhckV4dHJhQ2xhc3Nlcyhib3R0b21KdXN0aWZ5KV1dIj4KICAgICAgPHNsb3QgbmFtZT0iYm90dG9tIj48L3Nsb3Q+CiAgICA8L2Rpdj4KICA8L3RlbXBsYXRlPgoKICA8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vcGFwZXItdG9vbGJhci9wYXBlci10b29sYmFyLmh0bWwuanMKUG9seW1lcih7aXM6InBhcGVyLXRvb2xiYXIiLGhvc3RBdHRyaWJ1dGVzOntyb2xlOiJ0b29sYmFyIn0scHJvcGVydGllczp7Ym90dG9tSnVzdGlmeTp7dHlwZTpTdHJpbmcsdmFsdWU6IiJ9LGp1c3RpZnk6e3R5cGU6U3RyaW5nLHZhbHVlOiIifSxtaWRkbGVKdXN0aWZ5Ont0eXBlOlN0cmluZyx2YWx1ZToiIn19LHJlYWR5OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKHRoaXMuaXMsImlzIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2UgYXBwLWxheW91dCBpbnN0ZWFkISIpfSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX29ic2VydmVyPXRoaXMuX29ic2VydmUodGhpcyk7dGhpcy5fdXBkYXRlQXJpYUxhYmVsbGVkQnkoKX0sZGV0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl9vYnNlcnZlciYmdGhpcy5fb2JzZXJ2ZXIuZGlzY29ubmVjdCgpfSxfb2JzZXJ2ZTpmdW5jdGlvbihhKXt2YXIgYz1uZXcgTXV0YXRpb25PYnNlcnZlcihmdW5jdGlvbigpe3RoaXMuX3VwZGF0ZUFyaWFMYWJlbGxlZEJ5KCl9LmJpbmQodGhpcykpOwpjLm9ic2VydmUoYSx7Y2hpbGRMaXN0OiEwLHN1YnRyZWU6ITB9KTtyZXR1cm4gY30sX3VwZGF0ZUFyaWFMYWJlbGxlZEJ5OmZ1bmN0aW9uKCl7UG9seW1lci5kb20uZmx1c2goKTtmb3IodmFyIGE9W10sYz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChQb2x5bWVyLmRvbSh0aGlzLnJvb3QpLnF1ZXJ5U2VsZWN0b3JBbGwoInNsb3QiKSkuY29uY2F0KEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKFBvbHltZXIuZG9tKHRoaXMucm9vdCkucXVlcnlTZWxlY3RvckFsbCgiY29udGVudCIpKSksZCxmPTA7ZD1jW2ZdO2YrKyl7ZD1Qb2x5bWVyLmRvbShkKS5nZXREaXN0cmlidXRlZE5vZGVzKCk7Zm9yKHZhciBnLGw9MDtnPWRbbF07bCsrKWlmKGcuY2xhc3NMaXN0JiZnLmNsYXNzTGlzdC5jb250YWlucygidGl0bGUiKSlpZihnLmlkKWEucHVzaChnLmlkKTtlbHNle3ZhciBrPSJwYXBlci10b29sYmFyLWxhYmVsLSIrTWF0aC5mbG9vcigxRTQqTWF0aC5yYW5kb20oKSk7Zy5pZD1rO2EucHVzaChrKX19MDwKYS5sZW5ndGgmJnRoaXMuc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsbGVkYnkiLGEuam9pbigiICIpKX0sX2NvbXB1dGVCYXJFeHRyYUNsYXNzZXM6ZnVuY3Rpb24oYSl7cmV0dXJuIGE/YSsoImp1c3RpZmllZCI9PT1hPyIiOiItanVzdGlmaWVkIik6IiJ9fSk7Cjwvc2NyaXB0Pgo8L2RvbS1tb2R1bGU+CgoKCgoKCgoKCgoKPGRvbS1tb2R1bGUgaWQ9InRmLWhwYXJhbXMtc2NhbGUtYW5kLWNvbG9yLWNvbnRyb2xzIj4KICA8dGVtcGxhdGU+CiAgICA8ZGl2IGNsYXNzPSJjb250cm9sLXBhbmVsIj4KICAgICAgCiAgICAgIDxwYXBlci1kcm9wZG93bi1tZW51IGxhYmVsPSJDb2xvciBieSIgaWQ9ImNvbG9yQnlEcm9wRG93bk1lbnUiIGhvcml6b250YWwtYWxpZ249ImxlZnQiPgogICAgICAgIDxwYXBlci1saXN0Ym94IGNsYXNzPSJkcm9wZG93bi1jb250ZW50IiBzbG90PSJkcm9wZG93bi1jb250ZW50IiBzZWxlY3RlZD0ie3tvcHRpb25zLmNvbG9yQnlDb2x1bW5JbmRleH19IiBpZD0iY29sb3JCeUxpc3RCb3giPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tvcHRpb25zLmNvbHVtbnNdXSIgYXM9ImNvbHVtbiIgaWQ9ImNvbG9yQnlDb2x1bW5UZW1wbGF0ZSI+CiAgICAgICAgICAgIDxwYXBlci1pdGVtIGRpc2FibGVkPSJbWyFfaXNOdW1lcmljQ29sdW1uKGNvbHVtbi5pbmRleCldXSI+CiAgICAgICAgICAgICAgW1tjb2x1bW4ubmFtZV1dCiAgICAgICAgICAgIDwvcGFwZXItaXRlbT4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC9wYXBlci1saXN0Ym94PgogICAgICA8L3BhcGVyLWRyb3Bkb3duLW1lbnU+CgogICAgICAKICAgICAgPGRpdiBjbGFzcz0iY29sdW1ucy1jb250YWluZXIiPgogICAgICAgIAogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9Int7b3B0aW9ucy5jb2x1bW5zfX0iIGFzPSJjb2x1bW4iPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19pc051bWVyaWNDb2x1bW4oY29sdW1uLmluZGV4KV1dIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sdW1uIj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2x1bW4tdGl0bGUiPgogICAgICAgICAgICAgICAgW1tjb2x1bW4ubmFtZV1dCiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgIDxwYXBlci1yYWRpby1ncm91cCBjbGFzcz0ic2NhbGUtcmFkaW8tZ3JvdXAiIHNlbGVjdGVkPSJ7e2NvbHVtbi5zY2FsZX19Ij4KICAgICAgICAgICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbiBuYW1lPSJMSU5FQVIiPgogICAgICAgICAgICAgICAgICAgIExpbmVhcgogICAgICAgICAgICAgICAgICA8L3BhcGVyLXJhZGlvLWJ1dHRvbj4KICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgIDxwYXBlci1yYWRpby1idXR0b24gaWQ9ImxvZ1NjYWxlQnV0dG9uX1tbY29sdW1uLm5hbWVdXSIgbmFtZT0iTE9HIiBkaXNhYmxlZD0iW1shX2FsbG93TG9nU2NhbGUoY29sdW1uLCBzZXNzaW9uR3JvdXBzLiopXV0iPgogICAgICAgICAgICAgICAgICAgIExvZ2FyaXRobWljCiAgICAgICAgICAgICAgICAgIDwvcGFwZXItcmFkaW8tYnV0dG9uPgogICAgICAgICAgICAgICAgICA8cGFwZXItcmFkaW8tYnV0dG9uIG5hbWU9IlFVQU5USUxFIj4KICAgICAgICAgICAgICAgICAgICBRdWFudGlsZQogICAgICAgICAgICAgICAgICA8L3BhcGVyLXJhZGlvLWJ1dHRvbj4KICAgICAgICAgICAgICAgIDwvcGFwZXItcmFkaW8tZ3JvdXA+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgoKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CiAgICAgIC5jb250cm9sLXBhbmVsIHsKICAgICAgICBvdmVyZmxvdzogYXV0bzsKICAgICAgfQogICAgICAuY29sdW1uIHsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgZmxleC1zaHJpbms6IDE7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiA1cHg7CiAgICAgICAgYm9yZGVyOiBzb2xpZCAxcHggZGFya2dyYXk7CiAgICAgICAgcGFkZGluZzogM3B4OwogICAgICB9CiAgICAgIC5jb2x1bW4tdGl0bGUgewogICAgICAgIC8qIEZpdCBldmVyeSB0aXRsZSBpbiBvbmUgbGluZSBzbyB0aGUgcmFkaW8gYm94ZXMgYWxpZ24gdmVydGljYWxseS4gKi8KICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwogICAgICB9CiAgICAgIC5jb2x1bW5zLWNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgICB9CiAgICAgIC5zY2FsZS1yYWRpby1ncm91cCBwYXBlci1yYWRpby1idXR0b24gewogICAgICAgIHBhZGRpbmc6IDJweDsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQogICAgICBwYXBlci1saXN0Ym94IHsKICAgICAgICBtYXgtaGVpZ2h0OiAxNWVtOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CgogIDxzY3JpcHQ+Ly9+fldFQlBBVEh+fi90Zi1ocGFyYW1zLXNjYWxlLWFuZC1jb2xvci1jb250cm9scy90Zi1ocGFyYW1zLXNjYWxlLWFuZC1jb2xvci1jb250cm9scy5odG1sLmpzClBvbHltZXIoe2lzOiJ0Zi1ocGFyYW1zLXNjYWxlLWFuZC1jb2xvci1jb250cm9scyIscHJvcGVydGllczp7Y29uZmlndXJhdGlvbjpPYmplY3Qsc2Vzc2lvbkdyb3VwczpBcnJheSxvcHRpb25zOnt0eXBlOk9iamVjdCxub3RpZnk6ITAsdmFsdWU6bnVsbH19LG9ic2VydmVyczpbIl9jb25maWd1cmF0aW9uQ2hhbmdlZChjb25maWd1cmF0aW9uLiopIiwiX3Vuc2VsZWN0RGlzYWJsZWRMb2dTY2FsZXMoc2Vzc2lvbkdyb3Vwcy4qKSJdLF9jb25maWd1cmF0aW9uQ2hhbmdlZCgpe2NvbnN0IGE9dGhpcy5jb25maWd1cmF0aW9uLnZpc2libGVTY2hlbWEsYz10aGlzLmNvbmZpZ3VyYXRpb24uc2NoZW1hLGQ9e2NvbHVtbnM6YS5ocGFyYW1JbmZvcy5tYXAoKGYsZyk9Pih7bmFtZTp0Zi5ocGFyYW1zLnV0aWxzLmhwYXJhbU5hbWUoZiksaW5kZXg6ZyxhYnNvbHV0ZUluZGV4OnRmLmhwYXJhbXMudXRpbHMuZ2V0QWJzb2x1dGVDb2x1bW5JbmRleChjLGEsZyksc2NhbGU6dGhpcy5faXNOdW1lcmljQ29sdW1uKGcpPwoiTElORUFSIjoiTk9OX05VTUVSSUMifSkpLmNvbmNhdChhLm1ldHJpY0luZm9zLm1hcCgoZixnKT0+e2crPWEuaHBhcmFtSW5mb3MubGVuZ3RoO3JldHVybntzY2FsZToiTElORUFSIixuYW1lOnRmLmhwYXJhbXMudXRpbHMubWV0cmljTmFtZShmKSxpbmRleDpnLGFic29sdXRlSW5kZXg6dGYuaHBhcmFtcy51dGlscy5nZXRBYnNvbHV0ZUNvbHVtbkluZGV4KGMsYSxnKX19KSksbWluQ29sb3I6IiMwMDAwRkYiLG1heENvbG9yOiIjRkYwMDAwIixjb25maWd1cmF0aW9uOnRoaXMuY29uZmlndXJhdGlvbn07dGhpcy5zZXQoIm9wdGlvbnMiLGQpO1BvbHltZXIuZG9tLmZsdXNoKCk7dGhpcy5zZXQoIm9wdGlvbnMuY29sb3JCeUNvbHVtbkluZGV4Iix0aGlzLl9kZWZhdWx0Q29sb3JCeUNvbHVtbkluZGV4KCkpfSxfdW5zZWxlY3REaXNhYmxlZExvZ1NjYWxlcygpe251bGwhPT10aGlzLm9wdGlvbnMmJnRoaXMub3B0aW9ucy5jb2x1bW5zLmZvckVhY2goYT0+e2NvbnN0IGM9Im9wdGlvbnMuY29sdW1ucy4iKwphLmluZGV4O3RoaXMuX2FsbG93TG9nU2NhbGUoYSl8fCJMT0ciIT09YS5zY2FsZXx8dGhpcy5zZXQoYysiLnNjYWxlIiwiTElORUFSIil9KX0sX2FsbG93TG9nU2NhbGUoYSl7aWYoIXRoaXMuX2lzTnVtZXJpY0NvbHVtbihhLmluZGV4KXx8IXRoaXMuc2Vzc2lvbkdyb3VwcylyZXR1cm4hMTtjb25zdCBbYyxkXT10Zi5ocGFyYW1zLnV0aWxzLnZpc2libGVOdW1lcmljQ29sdW1uRXh0ZW50KHRoaXMuY29uZmlndXJhdGlvbi52aXNpYmxlU2NoZW1hLHRoaXMuc2Vzc2lvbkdyb3VwcyxhLmluZGV4KTtyZXR1cm4gMDxjfHwwPmR9LF9pc051bWVyaWNDb2x1bW4oYSl7cmV0dXJuIGE+PXRoaXMuY29uZmlndXJhdGlvbi52aXNpYmxlU2NoZW1hLmhwYXJhbUluZm9zLmxlbmd0aHx8IkRBVEFfVFlQRV9GTE9BVDY0Ij09PXRoaXMuY29uZmlndXJhdGlvbi52aXNpYmxlU2NoZW1hLmhwYXJhbUluZm9zW2FdLnR5cGV9LF9kZWZhdWx0Q29sb3JCeUNvbHVtbkluZGV4KCl7aWYoMDx0aGlzLmNvbmZpZ3VyYXRpb24udmlzaWJsZVNjaGVtYS5tZXRyaWNJbmZvcy5sZW5ndGgpcmV0dXJuIHRoaXMuY29uZmlndXJhdGlvbi52aXNpYmxlU2NoZW1hLmhwYXJhbUluZm9zLmxlbmd0aDsKY29uc3QgYT10aGlzLmNvbmZpZ3VyYXRpb24udmlzaWJsZVNjaGVtYS5ocGFyYW1JbmZvcy5maW5kSW5kZXgoYz0+IkRBVEFfVFlQRV9GTE9BVDY0Ij09PWMudHlwZSk7aWYoLTEhPT1hKXJldHVybiBhfX0pOwo8L3NjcmlwdD4KPC9kb20tbW9kdWxlPgoKCgoKCgoKCgoKCgo8ZG9tLW1vZHVsZSBpZD0idmFhZGluLWdyaWQtYWN0aXZlLWl0ZW0tdGhlbWFiaWxpdHktc3R5bGVzIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIHZhYWRpbi1ncmlkLXRhYmxlIC52YWFkaW4tZ3JpZC1yb3dbYWN0aXZlXSAudmFhZGluLWdyaWQtY2VsbDpub3QoW2RldGFpbHNjZWxsXSkgOjpzbG90dGVkKHZhYWRpbi1ncmlkLWNlbGwtY29udGVudCkgewogICAgICAgIEBhcHBseSgtLXZhYWRpbi1ncmlkLWJvZHktcm93LWFjdGl2ZS1jZWxsKTsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+Cgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdmFhZGluLWdyaWQvdmFhZGluLWdyaWQtYWN0aXZlLWl0ZW0tYmVoYXZpb3IuaHRtbC5qcwp3aW5kb3cudmFhZGluPXdpbmRvdy52YWFkaW58fHt9O3ZhYWRpbi5lbGVtZW50cz12YWFkaW4uZWxlbWVudHN8fHt9O3ZhYWRpbi5lbGVtZW50cy5ncmlkPXZhYWRpbi5lbGVtZW50cy5ncmlkfHx7fTsKdmFhZGluLmVsZW1lbnRzLmdyaWQuQWN0aXZlSXRlbUJlaGF2aW9yPXtwcm9wZXJ0aWVzOnthY3RpdmVJdGVtOnt0eXBlOk9iamVjdCxub3RpZnk6ITAsdmFsdWU6bnVsbH19LGxpc3RlbmVyczp7ImNlbGwtYWN0aXZhdGUiOiJfYWN0aXZhdGVJdGVtIn0sb2JzZXJ2ZXJzOlsiX2FjdGl2ZUl0ZW1DaGFuZ2VkKGFjdGl2ZUl0ZW0pIl0sX2FjdGl2YXRlSXRlbTpmdW5jdGlvbihhKXt2YXIgYz1hLmRldGFpbC5tb2RlbC5pdGVtO3RoaXMuYWN0aXZlSXRlbT10aGlzLmFjdGl2ZUl0ZW0hPT1jP2M6bnVsbDthLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfSxfYWN0aXZlSXRlbUNoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLiQuc2Nyb2xsZXIuX3BoeXNpY2FsSXRlbXMmJnRoaXMuJC5zY3JvbGxlci5fcGh5c2ljYWxJdGVtcy5mb3JFYWNoKGZ1bmN0aW9uKGEpe3RoaXMuX3VwZGF0ZUl0ZW0oYSxhLml0ZW0pfS5iaW5kKHRoaXMpKX19Owo8L3NjcmlwdD4KCgoKPGRvbS1tb2R1bGUgaWQ9InZhYWRpbi1ncmlkLXRhYmxlLXRhYmxlLXNjcm9sbC1zdHlsZXMiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgI3RhYmxlIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgb3ZlcmZsb3c6IGF1dG87CiAgICAgICAgLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoOwogICAgICAgIHotaW5kZXg6IC0yOwogICAgICB9CgogICAgICB2YWFkaW4tZ3JpZC10YWJsZVtpb3NdICN0YWJsZSB7CiAgICAgICAgdHJhbnNmb3JtOiBub25lOwogICAgICB9CgogICAgICB2YWFkaW4tZ3JpZC10YWJsZVtmaXhlZC1zZWN0aW9uc10gI3RhYmxlIHsKICAgICAgICB0cmFuc2Zvcm06IG5vbmU7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPgoKPGRvbS1tb2R1bGUgaWQ9InZhYWRpbi1ncmlkLXRhYmxlLXNjcm9sbC1zdHlsZXMiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgdmFhZGluLWdyaWQtdGFibGUgewogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWigwKTsKICAgICAgfQoKICAgICAgdmFhZGluLWdyaWQtdGFibGUtaGVhZGVyIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICB2YWFkaW4tZ3JpZC10YWJsZS1mb290ZXIgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgIHZhYWRpbi1ncmlkLXRhYmxlLWJvZHkgewogICAgICAgIHotaW5kZXg6IC0xOwogICAgICB9CgogICAgICB2YWFkaW4tZ3JpZC10YWJsZVtmaXhlZC1zZWN0aW9uc10gewogICAgICAgIC8qIEFueSB2YWx1ZSBvdGhlciB0aGFuIOKAmG5vbmXigJkgZm9yIHRoZSB0cmFuc2Zvcm0gcmVzdWx0cyBpbiB0aGUgY3JlYXRpb24gb2YgYm90aCBhIHN0YWNraW5nIGNvbnRleHQgYW5kCiAgICAgICAgYSBjb250YWluaW5nIGJsb2NrLiBUaGUgb2JqZWN0IGFjdHMgYXMgYSBjb250YWluaW5nIGJsb2NrIGZvciBmaXhlZCBwb3NpdGlvbmVkIGRlc2NlbmRhbnRzLiAqLwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWigwKTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB9CgogICAgICB2YWFkaW4tZ3JpZC10YWJsZVtmaXhlZC1zZWN0aW9uc10gdmFhZGluLWdyaWQtdGFibGUtaGVhZGVyLAogICAgICB2YWFkaW4tZ3JpZC10YWJsZVtmaXhlZC1zZWN0aW9uc10gdmFhZGluLWdyaWQtdGFibGUtZm9vdGVyIHsKICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgIH0KCiAgICAgIHZhYWRpbi1ncmlkLXRhYmxlW2ZpeGVkLXNlY3Rpb25zXSB2YWFkaW4tZ3JpZC10YWJsZS1ib2R5I2l0ZW1zIHsKICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgd2lsbC1jaGFuZ2U6IHRyYW5zZm9ybTsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+Cgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdmFhZGluLWdyaWQvdmFhZGluLWdyaWQtdGFibGUtc2Nyb2xsLWJlaGF2aW9yLmh0bWwuanMKd2luZG93LnZhYWRpbj13aW5kb3cudmFhZGlufHx7fTt2YWFkaW4uZWxlbWVudHM9dmFhZGluLmVsZW1lbnRzfHx7fTt2YWFkaW4uZWxlbWVudHMuZ3JpZD12YWFkaW4uZWxlbWVudHMuZ3JpZHx8e307CnZhYWRpbi5lbGVtZW50cy5ncmlkLlRhYmxlU2Nyb2xsQmVoYXZpb3JJbXBsPXtwcm9wZXJ0aWVzOntfdmlkeE9mZnNldDp7dHlwZTpOdW1iZXIsdmFsdWU6MH0saW9zOnt0eXBlOkJvb2xlYW4sdmFsdWU6bmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvaVAoPzpob25lfGFkOyg/OiBVOyk/IENQVSkgT1MgKFxkKykvKSxyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9LGZpeGVkU2VjdGlvbnM6e3R5cGU6Qm9vbGVhbixyZWZsZWN0VG9BdHRyaWJ1dGU6ITAsY29tcHV0ZWQ6Il9oYXNGaXhlZFNlY3Rpb25zKHNjcm9sbGJhcldpZHRoKSJ9LF9mcm96ZW5DZWxsczp7dHlwZTpBcnJheSx2YWx1ZTpmdW5jdGlvbigpe3JldHVybltdfX0sc2Nyb2xsaW5nOnt0eXBlOkJvb2xlYW4scmVmbGVjdFRvQXR0cmlidXRlOiEwfX0scmVhZHk6ZnVuY3Rpb24oKXt0aGlzLnNjcm9sbFRhcmdldD10aGlzLiQudGFibGV9LGF0dGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5saXN0ZW4odGhpcy5zY3JvbGxUYXJnZXQsIndoZWVsIiwKIl9vbldoZWVsIil9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy51bmxpc3Rlbih0aGlzLnNjcm9sbFRhcmdldCwid2hlZWwiLCJfb25XaGVlbCIpfSxzY3JvbGxUb1NjYWxlZEluZGV4OmZ1bmN0aW9uKGEpe3RoaXMuX3BlbmRpbmdTY3JvbGxUb1NjYWxlZEluZGV4PW51bGw7dGhpcy4kLml0ZW1zLnN0eWxlLmJvcmRlclRvcFdpZHRofHwodGhpcy5fcGVuZGluZ1Njcm9sbFRvU2NhbGVkSW5kZXg9YSk7YT1NYXRoLm1pbihNYXRoLm1heChhLDApLHRoaXMuc2l6ZS0xKTt0aGlzLiQudGFibGUuc2Nyb2xsVG9wPWEvdGhpcy5zaXplKnRoaXMuJC50YWJsZS5zY3JvbGxIZWlnaHQ7dGhpcy5fc2Nyb2xsSGFuZGxlcigpO3RoaXMuc2Nyb2xsVG9JbmRleChhLXRoaXMuX3ZpZHhPZmZzZXQpO3RoaXMuX3Jlc2V0U2Nyb2xsUG9zaXRpb24odGhpcy5fc2Nyb2xsUG9zaXRpb24pO3RoaXMuX3Njcm9sbEhhbmRsZXIoKTt0aGlzLl92aWR4T2Zmc2V0K3RoaXMubGFzdFZpc2libGVJbmRleD09PXRoaXMuc2l6ZS0KMSYmKHRoaXMuJC50YWJsZS5zY3JvbGxUb3A9dGhpcy4kLnRhYmxlLnNjcm9sbEhlaWdodC10aGlzLiQudGFibGUub2Zmc2V0SGVpZ2h0LHRoaXMuX3Njcm9sbEhhbmRsZXIoKSl9LF9oYXNGaXhlZFNlY3Rpb25zOmZ1bmN0aW9uKGEpe3JldHVybiBuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9FZGdlLykmJjA9PT1hfSxfb25XaGVlbDpmdW5jdGlvbihhKXtpZighYS5jdHJsS2V5JiYhdGhpcy5faGFzU2Nyb2xsZWRBbmNlc3RvcihhLnRhcmdldCxhLmRlbHRhWCxhLmRlbHRhWSkpe3ZhciBjPXRoaXMuJC50YWJsZSxkPWEuZGVsdGFZOzE9PT1hLmRlbHRhTW9kZSYmKGQqPWdyaWQuJC5zY3JvbGxlci5fcGh5c2ljYWxBdmVyYWdlKTt2YXIgZj1NYXRoLmFicyhhLmRlbHRhWCkrTWF0aC5hYnMoZCk7dGhpcy5fY2FuU2Nyb2xsKGMsYS5kZWx0YVgsZCk/KGEucHJldmVudERlZmF1bHQoKSxjLnNjcm9sbFRvcCs9ZCxjLnNjcm9sbExlZnQrPWEuZGVsdGFYLHRoaXMuX3Njcm9sbEhhbmRsZXIoKSwKdGhpcy5faGFzUmVzaWR1YWxNb21lbnR1bT0hMCx0aGlzLl9pZ25vcmVOZXdXaGVlbD10aGlzLmRlYm91bmNlKCJpZ25vcmUtbmV3LXdoZWVsIixmdW5jdGlvbigpe3RoaXMuX2lnbm9yZU5ld1doZWVsPW51bGx9LDUwMCkpOnRoaXMuX2hhc1Jlc2lkdWFsTW9tZW50dW0mJmY8PXRoaXMuX3ByZXZpb3VzTW9tZW50dW18fHRoaXMuX2lnbm9yZU5ld1doZWVsP2EucHJldmVudERlZmF1bHQoKTpmPnRoaXMuX3ByZXZpb3VzTW9tZW50dW0mJih0aGlzLl9oYXNSZXNpZHVhbE1vbWVudHVtPSExKTt0aGlzLl9wcmV2aW91c01vbWVudHVtPWZ9fSxfaGFzU2Nyb2xsZWRBbmNlc3RvcjpmdW5jdGlvbihhLGMsZCl7aWYodGhpcy5fY2FuU2Nyb2xsKGEsYyxkKSlyZXR1cm4hMDtpZigidmFhZGluLWdyaWQtY2VsbC1jb250ZW50IiE9PWEubG9jYWxOYW1lJiZhIT09dGhpcyYmYS5wYXJlbnRFbGVtZW50KXJldHVybiB0aGlzLl9oYXNTY3JvbGxlZEFuY2VzdG9yKGEucGFyZW50RWxlbWVudCxjLGQpfSwKX2NhblNjcm9sbDpmdW5jdGlvbihhLGMsZCl7cmV0dXJuIDA8ZCYmYS5zY3JvbGxUb3A8YS5zY3JvbGxIZWlnaHQtYS5vZmZzZXRIZWlnaHR8fDA+ZCYmMDxhLnNjcm9sbFRvcHx8MDxjJiZhLnNjcm9sbExlZnQ8YS5zY3JvbGxXaWR0aC1hLm9mZnNldFdpZHRofHwwPmMmJjA8YS5zY3JvbGxMZWZ0fSxfc2Nyb2xsSGFuZGxlcjpmdW5jdGlvbigpe3ZhciBhPU1hdGgubWF4KDAsTWF0aC5taW4odGhpcy5fbWF4U2Nyb2xsVG9wLHRoaXMuX3Njcm9sbFRvcCkpLGM9YS10aGlzLl9zY3JvbGxQb3NpdGlvbixkPXRoaXMuX3JhdGlvLGY9MCxnPXRoaXMuX2hpZGRlbkNvbnRlbnRTaXplLGw9ZCxrPVtdO3RoaXMuX3Njcm9sbFBvc2l0aW9uPWE7dGhpcy5fbGFzdFZpc2libGVJbmRleFZhbD10aGlzLl9maXJzdFZpc2libGVJbmRleFZhbD1udWxsO3ZhciBtPXRoaXMuX3Njcm9sbEJvdHRvbTt2YXIgcD10aGlzLl9waHlzaWNhbEJvdHRvbTtpZihNYXRoLmFicyhjKT50aGlzLl9waHlzaWNhbFNpemUpdGhpcy5fcGh5c2ljYWxUb3ArPQpjLGY9TWF0aC5yb3VuZChjL3RoaXMuX3BoeXNpY2FsQXZlcmFnZSk7ZWxzZSBpZigwPmMpe3ZhciBxPWEtdGhpcy5fcGh5c2ljYWxUb3A7az10aGlzLl92aXJ0dWFsU3RhcnQ7dmFyIHI9W107dmFyIHQ9dGhpcy5fcGh5c2ljYWxFbmQ7Zm9yKGw9cS9nO2w8ZCYmZjx0aGlzLl9waHlzaWNhbENvdW50JiYwPGstZiYmcC10aGlzLl9nZXRQaHlzaWNhbFNpemVJbmNyZW1lbnQodCk+bTspcT10aGlzLl9nZXRQaHlzaWNhbFNpemVJbmNyZW1lbnQodCksbCs9cS9nLHAtPXEsci5wdXNoKHQpLGYrKyx0PTA9PT10P3RoaXMuX3BoeXNpY2FsQ291bnQtMTp0LTE7az1yO2Y9LWZ9ZWxzZSBpZigwPGMpe3ZhciB2PXRoaXMuX3ZpcnR1YWxFbmQsQT10aGlzLl92aXJ0dWFsQ291bnQtMTtyPVtdO3Q9dGhpcy5fcGh5c2ljYWxTdGFydDtmb3IobD0ocC1tKS9nO2w8ZCYmZjx0aGlzLl9waHlzaWNhbENvdW50JiZ2K2Y8QSYmdGhpcy5fcGh5c2ljYWxUb3ArdGhpcy5fZ2V0UGh5c2ljYWxTaXplSW5jcmVtZW50KHQpPAphOylxPXRoaXMuX2dldFBoeXNpY2FsU2l6ZUluY3JlbWVudCh0KSxsKz1xL2csdGhpcy5fcGh5c2ljYWxUb3ArPXEsci5wdXNoKHQpLGYrKyx0PSh0KzEpJXRoaXMuX3BoeXNpY2FsQ291bnR9dGhpcy5fdmlydHVhbENvdW50PHRoaXMuc2l6ZSYmdGhpcy5fYWRqdXN0VmlydHVhbEluZGV4T2Zmc2V0KGMpOzA9PT1mPyhwPG18fHRoaXMuX3BoeXNpY2FsVG9wPmEpJiZ0aGlzLl9pbmNyZWFzZVBvb2xJZk5lZWRlZCgpOih0aGlzLl92aXJ0dWFsU3RhcnQrPWYsdGhpcy5fcGh5c2ljYWxTdGFydCs9Zix0aGlzLl91cGRhdGUocixrKSk7dGhpcy5fdHJhbnNsYXRlU3RhdGlvbmFyeUVsZW1lbnRzKCk7dGhpcy5oYXNBdHRyaWJ1dGUoInJlb3JkZXJpbmciKXx8KHRoaXMuc2Nyb2xsaW5nPSEwKTt0aGlzLmRlYm91bmNlKCJ2YWFkaW4tZ3JpZC1zY3JvbGxpbmciLGZ1bmN0aW9uKCl7dGhpcy5zY3JvbGxpbmc9ITE7dGhpcy5fcmVvcmRlclJvd3MoKX0sMTAwKX0sX2FkanVzdFZpcnR1YWxJbmRleE9mZnNldDpmdW5jdGlvbihhKXtpZigxRTQ8Ck1hdGguYWJzKGEpKXRoaXMuX25vU2NhbGU/dGhpcy5fbm9TY2FsZT0hMTooYT1NYXRoLnJvdW5kKHRoaXMuX3Njcm9sbFBvc2l0aW9uL3RoaXMuX3Njcm9sbEhlaWdodCoxRTMpLzFFMyx0aGlzLl92aWR4T2Zmc2V0PU1hdGgucm91bmQoYSp0aGlzLnNpemUtYSp0aGlzLl92aXJ0dWFsQ291bnQpLDA9PT10aGlzLl9zY3JvbGxUb3AmJnRoaXMuc2Nyb2xsVG9JbmRleCgwKSk7ZWxzZXthPXRoaXMuX3ZpZHhPZmZzZXR8fDA7MD09PXRoaXMuX3Njcm9sbFRvcD8odGhpcy5fdmlkeE9mZnNldD0wLGEhPT10aGlzLl92aWR4T2Zmc2V0JiZ0aGlzLnNjcm9sbFRvSW5kZXgoMCkpOjFFMz50aGlzLmZpcnN0VmlzaWJsZUluZGV4JiYwPHRoaXMuX3ZpZHhPZmZzZXQmJih0aGlzLl92aWR4T2Zmc2V0LT1NYXRoLm1pbih0aGlzLl92aWR4T2Zmc2V0LDEwMCksdGhpcy5zY3JvbGxUb0luZGV4KHRoaXMuZmlyc3RWaXNpYmxlSW5kZXgrKGEtdGhpcy5fdmlkeE9mZnNldCkrMSksdGhpcy5fbm9TY2FsZT0KITApO3ZhciBjPXRoaXMuc2l6ZS10aGlzLl92aXJ0dWFsQ291bnQ7dGhpcy5fc2Nyb2xsVG9wPj10aGlzLl9tYXhTY3JvbGxUb3A/KHRoaXMuX3ZpZHhPZmZzZXQ9YyxhIT09dGhpcy5fdmlkeE9mZnNldCYmdGhpcy5zY3JvbGxUb0luZGV4KHRoaXMuX3ZpcnR1YWxDb3VudCkpOnRoaXMuZmlyc3RWaXNpYmxlSW5kZXg+dGhpcy5fdmlydHVhbENvdW50LTFFMyYmdGhpcy5fdmlkeE9mZnNldDxjJiYodGhpcy5fdmlkeE9mZnNldCs9TWF0aC5taW4oYy10aGlzLl92aWR4T2Zmc2V0LDEwMCksdGhpcy5zY3JvbGxUb0luZGV4KHRoaXMuZmlyc3RWaXNpYmxlSW5kZXgtKHRoaXMuX3ZpZHhPZmZzZXQtYSkpLHRoaXMuX25vU2NhbGU9ITApfX0sX3Jlb3JkZXJSb3dzOmZ1bmN0aW9uKCl7dmFyIGE9UG9seW1lci5kb20odGhpcy4kLml0ZW1zKSxjPWEucXVlcnlTZWxlY3RvckFsbCgiLnZhYWRpbi1ncmlkLXJvdyIpLGQ9Yy5sZW5ndGgtKGNbMF0uaW5kZXgtKHRoaXMuX3ZpcnR1YWxTdGFydCt0aGlzLl92aWR4T2Zmc2V0KSk7CmlmKGQ8Yy5sZW5ndGgvMilmb3IodmFyIGY9MDtmPGQ7ZisrKWEuYXBwZW5kQ2hpbGQoY1tmXSk7ZWxzZSBmb3IoO2Q8Yy5sZW5ndGg7ZCsrKWEuaW5zZXJ0QmVmb3JlKGNbZF0sY1swXSl9LF9mcm96ZW5DZWxsc0NoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLmRlYm91bmNlKCJjYWNoZS1lbGVtZW50cyIsZnVuY3Rpb24oKXtQb2x5bWVyLmRvbSh0aGlzLmRvbUhvc3Qucm9vdCkucXVlcnlTZWxlY3RvckFsbCgiLnZhYWRpbi1ncmlkLWNlbGwiKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe2Euc3R5bGUudHJhbnNmb3JtPSIifSk7dGhpcy5fZnJvemVuQ2VsbHM9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoUG9seW1lci5kb20odGhpcy5kb21Ib3N0LnJvb3QpLnF1ZXJ5U2VsZWN0b3JBbGwoIltmcm96ZW5dIikpO3RoaXMuX3RyYW5zbGF0ZVN0YXRpb25hcnlFbGVtZW50cygpfSk7dGhpcy5fdXBkYXRlTGFzdEZyb3plbigpfSxfdXBkYXRlTGFzdEZyb3plbjpmdW5jdGlvbigpe2lmKHRoaXMuY29sdW1uVHJlZSl7dmFyIGE9CnRoaXMuY29sdW1uVHJlZVt0aGlzLmNvbHVtblRyZWUubGVuZ3RoLTFdLnNsaWNlKDApO2Euc29ydChmdW5jdGlvbihkLGYpe3JldHVybiBkLl9vcmRlci1mLl9vcmRlcn0pO3ZhciBjPWEucmVkdWNlKGZ1bmN0aW9uKGQsZixnKXtmLl9sYXN0RnJvemVuPSExO3JldHVybiBmLmZyb3plbiYmIWYuaGlkZGVuP2c6ZH0sdm9pZCAwKTt2b2lkIDAhPT1jJiYoYVtjXS5fbGFzdEZyb3plbj0hMCl9fSxfdHJhbnNsYXRlU3RhdGlvbmFyeUVsZW1lbnRzOmZ1bmN0aW9uKCl7dGhpcy5maXhlZFNlY3Rpb25zPyh0aGlzLiQuaXRlbXMuc3R5bGUudHJhbnNmb3JtPXRoaXMuX2dldFRyYW5zbGF0ZSgtdGhpcy5fc2Nyb2xsTGVmdHx8MCwtdGhpcy5fc2Nyb2xsVG9wfHwwKSx0aGlzLiQuZm9vdGVyLnN0eWxlLnRyYW5zZm9ybT10aGlzLiQuaGVhZGVyLnN0eWxlLnRyYW5zZm9ybT10aGlzLl9nZXRUcmFuc2xhdGUoLXRoaXMuX3Njcm9sbExlZnR8fDAsMCkpOnRoaXMuJC5mb290ZXIuc3R5bGUudHJhbnNmb3JtPQp0aGlzLiQuaGVhZGVyLnN0eWxlLnRyYW5zZm9ybT10aGlzLl9nZXRUcmFuc2xhdGUoMCx0aGlzLl9zY3JvbGxUb3ApO2Zvcih2YXIgYT10aGlzLl9nZXRUcmFuc2xhdGUodGhpcy5fc2Nyb2xsTGVmdCwwKSxjPTA7Yzx0aGlzLl9mcm96ZW5DZWxscy5sZW5ndGg7YysrKXRoaXMuX2Zyb3plbkNlbGxzW2NdLnN0eWxlLnRyYW5zZm9ybT1hfSxfZ2V0VHJhbnNsYXRlOmZ1bmN0aW9uKGEsYyl7cmV0dXJuInRyYW5zbGF0ZSgiK2ErInB4LCIrYysicHgpIn19O3ZhYWRpbi5lbGVtZW50cy5ncmlkLlRhYmxlU2Nyb2xsQmVoYXZpb3I9W1BvbHltZXIuSXJvblNjcm9sbFRhcmdldEJlaGF2aW9yLHZhYWRpbi5lbGVtZW50cy5ncmlkLlRhYmxlU2Nyb2xsQmVoYXZpb3JJbXBsXTsKPC9zY3JpcHQ+CgoKCgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdmFhZGluLWdyaWQvdmFhZGluLWdyaWQtY2VsbC1jbGljay1iZWhhdmlvci5odG1sLmpzCndpbmRvdy52YWFkaW49d2luZG93LnZhYWRpbnx8e307dmFhZGluLmVsZW1lbnRzPXZhYWRpbi5lbGVtZW50c3x8e307dmFhZGluLmVsZW1lbnRzLmdyaWQ9dmFhZGluLmVsZW1lbnRzLmdyaWR8fHt9Owp2YWFkaW4uZWxlbWVudHMuZ3JpZC5DZWxsQ2xpY2tCZWhhdmlvcj17bGlzdGVuZXJzOntjbGljazoiX29uQ2xpY2sifSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX2NlbGxDb250ZW50Rm9jdXNIYW5kbGVyPWZ1bmN0aW9uKGEpe2EudGFyZ2V0IT09dGhpcy5fY2VsbENvbnRlbnQmJnRoaXMuZmlyZSgiY2VsbC1jb250ZW50LWZvY3VzIix7Y2VsbDp0aGlzfSl9LmJpbmQodGhpcyk7dGhpcy5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsdGhpcy5fY2VsbENvbnRlbnRGb2N1c0hhbmRsZXIsITApfSxkZXRhY2hlZDpmdW5jdGlvbigpe3RoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZm9jdXMiLHRoaXMuX2NlbGxDb250ZW50Rm9jdXNIYW5kbGVyLCEwKX0sX29uQ2xpY2s6ZnVuY3Rpb24oYSl7InZhYWRpbi1ncmlkLXNvcnRlciIhPT10aGlzLmxvY2FsTmFtZSYmdGhpcy5maXJlKCJjZWxsLWZvY3VzIix7Y2VsbDp0aGlzfSk7aWYodGhpcy5fY2VsbENsaWNrKXt2YXIgYz1Qb2x5bWVyLmRvbShhKS5sb2NhbFRhcmdldDsKYy5nZXREaXN0cmlidXRlZE5vZGVzJiYoYz1Qb2x5bWVyLmRvbShjKS5nZXREaXN0cmlidXRlZE5vZGVzKClbMF0pO3ZhciBkPVBvbHltZXIuZG9tKGEpLnBhdGg7ZD1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChkLDAsZC5pbmRleE9mKGMpKzEpO2MuY29udGFpbnModGhpcy50YXJnZXQmJnRoaXMudGFyZ2V0LnJvb3QuYWN0aXZlRWxlbWVudHx8ZG9jdW1lbnQuYWN0aXZlRWxlbWVudCl8fGQuc29tZSh0aGlzLl9pc0ZvY3VzYWJsZSl8fHRoaXMuX2NlbGxDbGljayhhKX19LF9pc0ZvY3VzYWJsZTpmdW5jdGlvbihhKXt2YXIgYz1Qb2x5bWVyLmRvbShhKS5wYXJlbnROb2RlO2M9LTEhPT1BcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKFBvbHltZXIuZG9tKGMpLnF1ZXJ5U2VsZWN0b3JBbGwoIlt0YWJpbmRleF0sIGJ1dHRvbiwgaW5wdXQsIHNlbGVjdCwgdGV4dGFyZWEsIG9iamVjdCwgaWZyYW1lLCBsYWJlbCwgYVtocmVmXSwgYXJlYVtocmVmXSIpLGEpO3JldHVybiFhLmRpc2FibGVkJiYKY319Owo8L3NjcmlwdD4KCgo8ZG9tLW1vZHVsZSBpZD0idmFhZGluLWdyaWQtdGFibGUtY2VsbCI+PC9kb20tbW9kdWxlPgo8ZG9tLW1vZHVsZSBpZD0idmFhZGluLWdyaWQtdGFibGUtaGVhZGVyLWNlbGwiPjwvZG9tLW1vZHVsZT4KPGRvbS1tb2R1bGUgaWQ9InZhYWRpbi1ncmlkLXRhYmxlLWZvb3Rlci1jZWxsIj48L2RvbS1tb2R1bGU+Cjxkb20tbW9kdWxlIGlkPSJ2YWFkaW4tZ3JpZC1zaXplci1jZWxsIj48L2RvbS1tb2R1bGU+Cgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdmFhZGluLWdyaWQvdmFhZGluLWdyaWQtdGFibGUtY2VsbC5odG1sLmpzCihmdW5jdGlvbigpe3ZhciBhPXtwcm9wZXJ0aWVzOntjb2x1bW46T2JqZWN0LGV4cGFuZGVkOkJvb2xlYW4sZmxleEdyb3c6TnVtYmVyLGNvbFNwYW46TnVtYmVyLGZvY3VzZWQ6e3R5cGU6Qm9vbGVhbixyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9LGZyb3plbjp7dHlwZTpCb29sZWFuLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH0sbGFzdEZyb3plbjp7dHlwZTpCb29sZWFuLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH0saGlkZGVuOnt0eXBlOkJvb2xlYW4scmVmbGVjdFRvQXR0cmlidXRlOiEwfSxpbnN0YW5jZTpPYmplY3QsaW5kZXg6TnVtYmVyLGl0ZW06T2JqZWN0LHNlbGVjdGVkOkJvb2xlYW4sdGVtcGxhdGU6T2JqZWN0LHRhcmdldDpPYmplY3Qsd2lkdGg6U3RyaW5nLG9yZGVyOk51bWJlcixyZW9yZGVyU3RhdHVzOnt0eXBlOlN0cmluZyxyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9LF9jaGlsZENvbHVtbnM6QXJyYXksX2NlbGxDb250ZW50Ok9iamVjdCxfaW5zZXJ0aW9uUG9pbnQ6T2JqZWN0LApfdGVtcGxhdGl6ZXI6T2JqZWN0fSxvYnNlcnZlcnM6Il9jb2x1bW5DaGFuZ2VkKGNvbHVtbik7X2NlbGxBdHRhY2hlZChjb2x1bW4sIGlzQXR0YWNoZWQpO19leHBhbmRlZENoYW5nZWQoZXhwYW5kZWQsIGluc3RhbmNlKTtfZmxleEdyb3dDaGFuZ2VkKGZsZXhHcm93KTtfaW5kZXhDaGFuZ2VkKGluZGV4LCBpbnN0YW5jZSk7X2l0ZW1DaGFuZ2VkKGl0ZW0sIGluc3RhbmNlKTtfaW5zdGFuY2VDaGFuZ2VkKGluc3RhbmNlLCB0YXJnZXQpO19zZWxlY3RlZENoYW5nZWQoc2VsZWN0ZWQsIGluc3RhbmNlKTtfdG9nZ2xlQ29udGVudChpc0F0dGFjaGVkLCBfY2VsbENvbnRlbnQsIF9pbnNlcnRpb25Qb2ludCk7X3RvZ2dsZUluc3RhbmNlKGlzQXR0YWNoZWQsIF90ZW1wbGF0aXplciwgaW5zdGFuY2UpO193aWR0aENoYW5nZWQod2lkdGgpO19vcmRlckNoYW5nZWQob3JkZXIpO192aXNpYmxlQ2hpbGRDb2x1bW5zQ2hhbmdlZChfdmlzaWJsZUNoaWxkQ29sdW1ucyk7X2NoaWxkQ29sdW1uc0NoYW5nZWQoX2NoaWxkQ29sdW1ucykiLnNwbGl0KCI7IiksCnJlYWR5OmZ1bmN0aW9uKCl7dGhpcy5jbGFzc0xpc3QuYWRkKCJ2YWFkaW4tZ3JpZC1jZWxsIik7ITE9PT1Qb2x5bWVyLlNldHRpbmdzLnVzZVNoYWRvdyYmKHRoaXMuY2xhc3NMaXN0LmFkZCgic3R5bGUtc2NvcGUiKSx0aGlzLmNsYXNzTGlzdC5hZGQoInZhYWRpbi1ncmlkIikpfSxfY29sdW1uQ2hhbmdlZDpmdW5jdGlvbihjKXt0aGlzLmZsZXhHcm93PWMuZmxleEdyb3c7dGhpcy5mcm96ZW49Yy5mcm96ZW47dGhpcy5sYXN0RnJvemVuPWMuX2xhc3RGcm96ZW47dGhpcy5oZWFkZXJUZW1wbGF0ZT1jLmhlYWRlclRlbXBsYXRlO3RoaXMuZm9vdGVyVGVtcGxhdGU9Yy5mb290ZXJUZW1wbGF0ZTt0aGlzLnRlbXBsYXRlPWMudGVtcGxhdGU7dGhpcy53aWR0aD1jLndpZHRoO3RoaXMuaGlkZGVuPWMuaGlkZGVuO3RoaXMucmVzaXphYmxlPWMucmVzaXphYmxlO3RoaXMuX2NoaWxkQ29sdW1ucz1jLl9jaGlsZENvbHVtbnM7dGhpcy5vcmRlcj1jLl9vcmRlcjtjLmNvbFNwYW4mJih0aGlzLmNvbFNwYW49CmMuY29sU3Bhbik7dGhpcy5saXN0ZW4oYywicHJvcGVydHktY2hhbmdlZCIsIl9jb2x1bW5Qcm9wQ2hhbmdlZCIpfSxfY2VsbEF0dGFjaGVkOmZ1bmN0aW9uKGMsZCl7dm9pZCAwIT09YyYmdm9pZCAwIT09ZCYmKGQ/dGhpcy5saXN0ZW4oYywicHJvcGVydHktY2hhbmdlZCIsIl9jb2x1bW5Qcm9wQ2hhbmdlZCIpOnRoaXMuYXN5bmMoZnVuY3Rpb24oKXt0aGlzLmlzQXR0YWNoZWR8fHRoaXMudW5saXN0ZW4oYywicHJvcGVydHktY2hhbmdlZCIsIl9jb2x1bW5Qcm9wQ2hhbmdlZCIpfSkpfSxfY29sdW1uUHJvcENoYW5nZWQ6ZnVuY3Rpb24oYyl7Yy50YXJnZXQ9PXRoaXMuY29sdW1uJiYodGhpc1tjLmRldGFpbC5wYXRoXT1jLmRldGFpbC52YWx1ZSl9LF9leHBhbmRlZENoYW5nZWQ6ZnVuY3Rpb24oYyxkKXt2b2lkIDAhPT1jJiZ2b2lkIDAhPT1kJiYoZC5fX2V4cGFuZGVkX189YyxkLmV4cGFuZGVkPWMpfSxfZmxleEdyb3dDaGFuZ2VkOmZ1bmN0aW9uKGMpe3RoaXMuc3R5bGUuZmxleEdyb3c9CmN9LF9pbmRleENoYW5nZWQ6ZnVuY3Rpb24oYyxkKXt2b2lkIDAhPT1jJiZ2b2lkIDAhPT1kJiYoZC5pbmRleD1jKX0sX2l0ZW1DaGFuZ2VkOmZ1bmN0aW9uKGMsZCl7dm9pZCAwIT09YyYmdm9pZCAwIT09ZCYmKGQuaXRlbT1jKX0sX3NlbGVjdGVkQ2hhbmdlZDpmdW5jdGlvbihjLGQpe3ZvaWQgMCE9PWMmJnZvaWQgMCE9PWQmJihkLl9fc2VsZWN0ZWRfXz1jLGQuc2VsZWN0ZWQ9Yyl9LF9jaGlsZENvbHVtbnNDaGFuZ2VkOmZ1bmN0aW9uKGMpe3RoaXMuY29sU3Bhbj1jLmxlbmd0aH0sX3RvZ2dsZUNvbnRlbnQ6ZnVuY3Rpb24oYyxkLGYpe3ZvaWQgMCE9PWMmJnZvaWQgMCE9PWQmJnZvaWQgMCE9PWYmJihjPyhQb2x5bWVyLmRvbShkKS5wYXJlbnROb2RlIT09dGhpcy50YXJnZXQmJlBvbHltZXIuZG9tKHRoaXMudGFyZ2V0KS5hcHBlbmRDaGlsZChkKSxQb2x5bWVyLmRvbSh0aGlzKS5hcHBlbmRDaGlsZChmKSk6dGhpcy5hc3luYyhmdW5jdGlvbigpe3RoaXMuaXNBdHRhY2hlZHx8UG9seW1lci5kb20oZCkucGFyZW50Tm9kZSE9PQp0aGlzLnRhcmdldHx8UG9seW1lci5kb20odGhpcy50YXJnZXQpLnJlbW92ZUNoaWxkKGQpfSkpfSxfdG9nZ2xlSW5zdGFuY2U6ZnVuY3Rpb24oYyxkLGYpe3ZvaWQgMCE9PWMmJnZvaWQgMCE9PWQmJnZvaWQgMCE9PWYmJihjP2QuYWRkSW5zdGFuY2UoZik6ZC5yZW1vdmVJbnN0YW5jZShmKSl9LF93aWR0aENoYW5nZWQ6ZnVuY3Rpb24oYyl7dGhpcy5zdHlsZS53aWR0aD1jfSxfb3JkZXJDaGFuZ2VkOmZ1bmN0aW9uKGMpe3RoaXMuc3R5bGUub3JkZXI9Y30sX3RlbXBsYXRlQ2hhbmdlZDpmdW5jdGlvbihjKXt0aGlzLmluc3RhbmNlPWMudGVtcGxhdGl6ZXIuY3JlYXRlSW5zdGFuY2UoKTt0aGlzLl90ZW1wbGF0aXplcj1jLnRlbXBsYXRpemVyfSxfaW5zdGFuY2VDaGFuZ2VkOmZ1bmN0aW9uKGMsZCl7dm9pZCAwIT09YyYmdm9pZCAwIT09ZCYmKHRoaXMuc3R5bGUuaGVpZ2h0PSIiLHRoaXMuX2NlbGxDb250ZW50PXRoaXMuX2NlbGxDb250ZW50fHxkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ2YWFkaW4tZ3JpZC1jZWxsLWNvbnRlbnQiKSwKYz0idmFhZGluLWdyaWQtY2VsbC1jb250ZW50LSIrKHZhYWRpbi5lbGVtZW50cy5ncmlkLl9jb250ZW50SW5kZXg9dmFhZGluLmVsZW1lbnRzLmdyaWQuX2NvbnRlbnRJbmRleCsxfHwwKSx0aGlzLl9jZWxsQ29udGVudC5pbm5lckhUTUw9IiIsUG9seW1lci5kb20odGhpcy5fY2VsbENvbnRlbnQpLmFwcGVuZENoaWxkKHRoaXMuaW5zdGFuY2Uucm9vdCksdGhpcy5fY2VsbENvbnRlbnQuc2V0QXR0cmlidXRlKCJpZCIsYyksUG9seW1lci5FbGVtZW50Pyh0aGlzLl9jZWxsQ29udGVudC5zZXRBdHRyaWJ1dGUoInNsb3QiLGMpLHRoaXMuX2luc2VydGlvblBvaW50PXRoaXMuX2luc2VydGlvblBvaW50fHxkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzbG90IiksdGhpcy5faW5zZXJ0aW9uUG9pbnQuc2V0QXR0cmlidXRlKCJuYW1lIixjKSk6KHRoaXMuX2luc2VydGlvblBvaW50PXRoaXMuX2luc2VydGlvblBvaW50fHxkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjb250ZW50IiksdGhpcy5faW5zZXJ0aW9uUG9pbnQuc2V0QXR0cmlidXRlKCJzZWxlY3QiLAoiIyIrYykpKX19O1BvbHltZXIoe2lzOiJ2YWFkaW4tZ3JpZC10YWJsZS1jZWxsIixiZWhhdmlvcnM6W2EsdmFhZGluLmVsZW1lbnRzLmdyaWQuQ2VsbENsaWNrQmVoYXZpb3JdLG9ic2VydmVyczpbIl90ZW1wbGF0ZUNoYW5nZWQodGVtcGxhdGUpIl0sX2NlbGxDbGljazpmdW5jdGlvbihjKXtjLmRlZmF1bHRQcmV2ZW50ZWR8fHRoaXMuZmlyZSgiY2VsbC1hY3RpdmF0ZSIse21vZGVsOnRoaXMuaW5zdGFuY2V9KX19KTtQb2x5bWVyKHtpczoidmFhZGluLWdyaWQtdGFibGUtaGVhZGVyLWNlbGwiLHByb3BlcnRpZXM6e2hlYWRlclRlbXBsYXRlOk9iamVjdCxyZXNpemFibGU6Qm9vbGVhbixjb2x1bW5SZXNpemluZzp7dHlwZTpCb29sZWFuLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH19LGJlaGF2aW9yczpbYSx2YWFkaW4uZWxlbWVudHMuZ3JpZC5DZWxsQ2xpY2tCZWhhdmlvcl0sb2JzZXJ2ZXJzOlsiX2hlYWRlclRlbXBsYXRlQ2hhbmdlZChoZWFkZXJUZW1wbGF0ZSkiLCJfaXNFbXB0eUNoYW5nZWQoX2lzRW1wdHksIGlzQXR0YWNoZWQpIiwKIl9yZXNpemFibGVDaGFuZ2VkKHJlc2l6YWJsZSkiXSxsaXN0ZW5lcnM6e21vdXNlZG93bjoiX2NhbmNlbE1vdXNlRG93bk9uUmVzaXplIixtb3VzZW1vdmU6Il9lbmFibGVEcmFnIixtb3VzZW91dDoiX2Rpc2FibGVEcmFnIix0b3VjaHN0YXJ0OiJfb25Ub3VjaFN0YXJ0Iix0b3VjaG1vdmU6Il9vblRvdWNoTW92ZSIsdG91Y2hlbmQ6Il9vblRvdWNoRW5kIixjb250ZXh0bWVudToiX29uQ29udGV4dE1lbnUifSxfb25Db250ZXh0TWVudTpmdW5jdGlvbihjKXt0aGlzLl9yZW9yZGVyR2hvc3QmJmMucHJldmVudERlZmF1bHQoKX0sX29uVG91Y2hTdGFydDpmdW5jdGlvbihjKXtjLnRhcmdldCE9PXRoaXMuX3Jlc2l6ZUhhbmRsZSYmdGhpcy50YXJnZXQuY29sdW1uUmVvcmRlcmluZ0FsbG93ZWQmJih0aGlzLl9zdGFydFJlb3JkZXJUaW1lb3V0PXNldFRpbWVvdXQodGhpcy5fc3RhcnRSZW9yZGVyLmJpbmQodGhpcyxjKSwxMDApKX0sX3N0YXJ0UmVvcmRlcjpmdW5jdGlvbihjKXt0aGlzLl9yZW9yZGVyR2hvc3Q9CnRoaXMuX2dldEdob3N0KCk7dGhpcy5fcmVvcmRlckdob3N0LnN0eWxlLnZpc2liaWxpdHk9InZpc2libGUiO3ZhciBkPW5ldyBDdXN0b21FdmVudCgiZHJhZ3N0YXJ0Iix7YnViYmxlczohMH0pO3RoaXMuX2NlbGxDb250ZW50LmRpc3BhdGNoRXZlbnQoZCk7dGhpcy5fcmVvcmRlclhZPXt4OmMudG91Y2hlc1swXS5jbGllbnRYLXRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCx5OmMudG91Y2hlc1swXS5jbGllbnRZLXRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wfTt0aGlzLl91cGRhdGVHaG9zdFBvc2l0aW9uKGMudG91Y2hlc1swXS5jbGllbnRYLGMudG91Y2hlc1swXS5jbGllbnRZKX0sX29uVG91Y2hNb3ZlOmZ1bmN0aW9uKGMpe2lmKHRoaXMuX3Jlb3JkZXJHaG9zdCl7Yy5wcmV2ZW50RGVmYXVsdCgpO3ZhciBkPW5ldyBDdXN0b21FdmVudCgiZHJhZ292ZXIiLHtidWJibGVzOiEwfSk7ZC5jbGllbnRYPWMudG91Y2hlc1swXS5jbGllbnRYO2QuY2xpZW50WT0KYy50b3VjaGVzWzBdLmNsaWVudFk7dmFyIGY9dGhpcy5fY29udGVudEZyb21Qb2ludChkLmNsaWVudFgsZC5jbGllbnRZKTtmJiZmLmRpc3BhdGNoRXZlbnQoZCk7dGhpcy5fdXBkYXRlR2hvc3RQb3NpdGlvbihjLnRvdWNoZXNbMF0uY2xpZW50WCxjLnRvdWNoZXNbMF0uY2xpZW50WSl9ZWxzZSBjbGVhclRpbWVvdXQodGhpcy5fc3RhcnRSZW9yZGVyVGltZW91dCl9LF91cGRhdGVHaG9zdFBvc2l0aW9uOmZ1bmN0aW9uKGMsZCl7Yy09dGhpcy5fcmVvcmRlclhZLng7ZD1kLXRoaXMuX3Jlb3JkZXJYWS55LTUwO3ZhciBmPXBhcnNlSW50KHRoaXMuX3Jlb3JkZXJHaG9zdC5zdHlsZS5sZWZ0fHwwKSxnPXBhcnNlSW50KHRoaXMuX3Jlb3JkZXJHaG9zdC5zdHlsZS50b3B8fDApLGw9dGhpcy5fcmVvcmRlckdob3N0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3RoaXMuX3Jlb3JkZXJHaG9zdC5zdHlsZS5sZWZ0PWYtKGwubGVmdC1jKSsicHgiO3RoaXMuX3Jlb3JkZXJHaG9zdC5zdHlsZS50b3A9CmctKGwudG9wLWQpKyJweCJ9LF9vblRvdWNoRW5kOmZ1bmN0aW9uKGMpe2NsZWFyVGltZW91dCh0aGlzLl9zdGFydFJlb3JkZXJUaW1lb3V0KTt0aGlzLl9yZW9yZGVyR2hvc3QmJihjLnByZXZlbnREZWZhdWx0KCksYz1uZXcgQ3VzdG9tRXZlbnQoImRyYWdlbmQiLHtidWJibGVzOiEwfSksdGhpcy5kaXNwYXRjaEV2ZW50KGMpLHRoaXMuX3Jlb3JkZXJHaG9zdC5zdHlsZS52aXNpYmlsaXR5PSJoaWRkZW4iLHRoaXMuX3Jlb3JkZXJHaG9zdD1udWxsKX0sX2NvbnRlbnRGcm9tUG9pbnQ6ZnVuY3Rpb24oYyxkKXtpZihQb2x5bWVyLlNldHRpbmdzLnVzZVNoYWRvdyl7dmFyIGY9dGhpcy50YXJnZXQuJC5zY3JvbGxlcjtmLnRvZ2dsZUF0dHJpYnV0ZSgibm8tY29udGVudC1wb2ludGVyLWV2ZW50cyIsITApO2M9dGhpcy5kb21Ib3N0LnJvb3QuZWxlbWVudEZyb21Qb2ludChjLGQpO2YudG9nZ2xlQXR0cmlidXRlKCJuby1jb250ZW50LXBvaW50ZXItZXZlbnRzIiwhMSk7aWYoYyYmYy5nZXRDb250ZW50Q2hpbGRyZW4pcmV0dXJuIGMuZ2V0Q29udGVudENoaWxkcmVuKFBvbHltZXIuRWxlbWVudD8KInNsb3QiOiJjb250ZW50IilbMF19ZWxzZSByZXR1cm4gZG9jdW1lbnQuZWxlbWVudEZyb21Qb2ludChjLGQpfSxfZ2V0R2hvc3Q6ZnVuY3Rpb24oKXt2YXIgYz10aGlzLnRhcmdldC4kLnNjcm9sbGVyLiQucmVvcmRlcmdob3N0O2MuaW5uZXJUZXh0PXRoaXMuX2NlbGxDb250ZW50LmlubmVyVGV4dDt2YXIgZD13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLl9jZWxsQ29udGVudCk7ImJveFNpemluZyBkaXNwbGF5IHdpZHRoIGhlaWdodCBiYWNrZ3JvdW5kIGFsaWduSXRlbXMgcGFkZGluZyBib3JkZXIgZmxleC1kaXJlY3Rpb24gb3ZlcmZsb3ciLnNwbGl0KCIgIikuZm9yRWFjaChmdW5jdGlvbihmKXtjLnN0eWxlW2ZdPWRbZl19LHRoaXMpO3JldHVybiBjfSxfZW5hYmxlRHJhZzpmdW5jdGlvbigpe3RoaXMuX2NlbGxDb250ZW50LmRyYWdnYWJsZT10aGlzLnRhcmdldC5jb2x1bW5SZW9yZGVyaW5nQWxsb3dlZCYmIXdpbmRvdy5nZXRTZWxlY3Rpb24oKS50b1N0cmluZygpfSxfZGlzYWJsZURyYWc6ZnVuY3Rpb24oKXt0aGlzLl9jZWxsQ29udGVudC5kcmFnZ2FibGU9CiExfSxfY2FuY2VsTW91c2VEb3duT25SZXNpemU6ZnVuY3Rpb24oYyl7Yy50YXJnZXQ9PT10aGlzLl9yZXNpemVIYW5kbGUmJmMucHJldmVudERlZmF1bHQoKX0sX3Jlc2l6YWJsZUNoYW5nZWQ6ZnVuY3Rpb24oYyl7Yz8odGhpcy5fcmVzaXplSGFuZGxlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMuX3Jlc2l6ZUhhbmRsZS5jbGFzc0xpc3QuYWRkKCJ2YWFkaW4tZ3JpZC1jb2x1bW4tcmVzaXplLWhhbmRsZSIpLHRoaXMubGlzdGVuKHRoaXMuX3Jlc2l6ZUhhbmRsZSwidHJhY2siLCJfb25UcmFjayIpLFBvbHltZXIuZG9tKHRoaXMpLmFwcGVuZENoaWxkKHRoaXMuX3Jlc2l6ZUhhbmRsZSkpOnRoaXMuX3Jlc2l6ZUhhbmRsZSYmKHRoaXMudW5saXN0ZW4odGhpcy5fcmVzaXplSGFuZGxlLCJ0cmFjayIsIl9vblRyYWNrIiksUG9seW1lci5kb20odGhpcykucmVtb3ZlQ2hpbGQodGhpcy5fcmVzaXplSGFuZGxlKSl9LF9vblRyYWNrOmZ1bmN0aW9uKGMpe3RoaXMuY29sdW1uUmVzaXppbmc9CiEwO3ZhciBkPXRoaXMuY29sdW1uOyJ2YWFkaW4tZ3JpZC1jb2x1bW4tZ3JvdXAiPT09ZC5sb2NhbE5hbWUmJihkPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGQuX2NoaWxkQ29sdW1ucywwKS5zb3J0KGZ1bmN0aW9uKGwsayl7cmV0dXJuIGwuX29yZGVyLWsuX29yZGVyfSkuZmlsdGVyKGZ1bmN0aW9uKGwpe3JldHVybiFsLmhpZGRlbn0pLnBvcCgpKTt2YXIgZj10aGlzLl9nZXRIZWFkZXJDZWxsQnlDb2x1bW4oZCk7aWYoZi5vZmZzZXRXaWR0aCl7dmFyIGc9d2luZG93LmdldENvbXB1dGVkU3R5bGUoZi5fY2VsbENvbnRlbnQpO2Qud2lkdGg9TWF0aC5tYXgoMTArcGFyc2VJbnQoZy5wYWRkaW5nTGVmdCkrcGFyc2VJbnQoZy5wYWRkaW5nUmlnaHQpLGYub2Zmc2V0V2lkdGgrYy5kZXRhaWwueC1mLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnJpZ2h0KSsicHgiO2QuZmxleEdyb3c9MH1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChQb2x5bWVyLmRvbSh0aGlzLnBhcmVudEVsZW1lbnQucGFyZW50RWxlbWVudCkucXVlcnlTZWxlY3RvckFsbCgiLnZhYWRpbi1ncmlkLXJvdzpsYXN0LWNoaWxkIC52YWFkaW4tZ3JpZC1jZWxsIikpLnNvcnQoZnVuY3Rpb24obCwKayl7cmV0dXJuIGwuY29sdW1uLl9vcmRlci1rLmNvbHVtbi5fb3JkZXJ9KS5mb3JFYWNoKGZ1bmN0aW9uKGwsayxtKXtrPG0uaW5kZXhPZihmKSYmKGwuY29sdW1uLndpZHRoPWwub2Zmc2V0V2lkdGgrInB4IixsLmNvbHVtbi5mbGV4R3Jvdz0wKX0pO3RoaXMuY29sdW1uUmVzaXppbmcmJiJlbmQiPT09Yy5kZXRhaWwuc3RhdGUmJih0aGlzLmNvbHVtblJlc2l6aW5nPSExKTt0aGlzLmZpcmUoImNvbHVtbi1yZXNpemluZyIpfSxfZ2V0SGVhZGVyQ2VsbEJ5Q29sdW1uOmZ1bmN0aW9uKGMpe3JldHVybiBBcnJheS5wcm90b3R5cGUuZmlsdGVyLmNhbGwoUG9seW1lci5kb20odGhpcy5wYXJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQpLnF1ZXJ5U2VsZWN0b3JBbGwoIi52YWFkaW4tZ3JpZC1yb3c6bGFzdC1jaGlsZCAudmFhZGluLWdyaWQtY2VsbCIpLGZ1bmN0aW9uKGQpe3JldHVybiBkLmNvbHVtbj09PWN9KVswXX0sX2hlYWRlclRlbXBsYXRlQ2hhbmdlZDpmdW5jdGlvbihjKXt2b2lkIDAhPT0KYyYmKG51bGw9PT1jfHwhdGhpcy5faXNDb2x1bW5Sb3cmJiJ2YWFkaW4tZ3JpZC1jb2x1bW4tZ3JvdXAiIT09dGhpcy5jb2x1bW4ubG9jYWxOYW1lPyh0aGlzLmluc3RhbmNlPXtyb290OmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpfSx0aGlzLl9pc0VtcHR5PSEwKToodGhpcy5pbnN0YW5jZT1jLnRlbXBsYXRpemVyLmNyZWF0ZUluc3RhbmNlKCksdGhpcy5fdGVtcGxhdGl6ZXI9Yy50ZW1wbGF0aXplcix0aGlzLl9pc0VtcHR5PSExKSl9LF9pc0VtcHR5Q2hhbmdlZDpmdW5jdGlvbihjLGQpe2QmJnRoaXMuZmlyZSgiY2VsbC1lbXB0eS1jaGFuZ2VkIil9fSk7UG9seW1lcih7aXM6InZhYWRpbi1ncmlkLXRhYmxlLWZvb3Rlci1jZWxsIixwcm9wZXJ0aWVzOntmb290ZXJUZW1wbGF0ZTpPYmplY3R9LGJlaGF2aW9yczpbYSx2YWFkaW4uZWxlbWVudHMuZ3JpZC5DZWxsQ2xpY2tCZWhhdmlvcl0sb2JzZXJ2ZXJzOlsiX2Zvb3RlclRlbXBsYXRlQ2hhbmdlZChmb290ZXJUZW1wbGF0ZSkiLAoiX2lzRW1wdHlDaGFuZ2VkKF9pc0VtcHR5LCBpc0F0dGFjaGVkKSJdLF9mb290ZXJUZW1wbGF0ZUNoYW5nZWQ6ZnVuY3Rpb24oYyl7dm9pZCAwIT09YyYmKG51bGw9PT1jfHwhdGhpcy5faXNDb2x1bW5Sb3cmJiJ2YWFkaW4tZ3JpZC1jb2x1bW4tZ3JvdXAiIT09dGhpcy5jb2x1bW4ubG9jYWxOYW1lPyh0aGlzLmluc3RhbmNlPXtyb290OmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpfSx0aGlzLl9pc0VtcHR5PSEwKToodGhpcy5pbnN0YW5jZT1jLnRlbXBsYXRpemVyLmNyZWF0ZUluc3RhbmNlKCksdGhpcy5fdGVtcGxhdGl6ZXI9Yy50ZW1wbGF0aXplcix0aGlzLl9pc0VtcHR5PSExKSl9LF9pc0VtcHR5Q2hhbmdlZDpmdW5jdGlvbihjLGQpe2QmJnRoaXMuZmlyZSgiY2VsbC1lbXB0eS1jaGFuZ2VkIil9fSk7UG9seW1lcih7aXM6InZhYWRpbi1ncmlkLXNpemVyLWNlbGwiLGJlaGF2aW9yczpbYV19KX0pKCk7Cjwvc2NyaXB0PgoKCjxkb20tbW9kdWxlIGlkPSJ2YWFkaW4tZ3JpZC1zaXplciI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICB2aXNpYmlsaXR5OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC5jZWxsIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgICBsaW5lLWhlaWdodDogMDsKICAgICAgICBmb250LXNpemU6IDFweDsKICAgICAgICBtYXJnaW4tdG9wOiAtMWVtOwogICAgICB9CgogICAgICAuY2VsbFtoaWRkZW5dIHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX2NvbHVtbnNdXSIgYXM9ImNvbHVtbiI+CiAgICAgIDx2YWFkaW4tZ3JpZC1zaXplci1jZWxsIGNsYXNzPSJjZWxsIiBjb2x1bW49IltbY29sdW1uXV0iPiZuYnNwOzwvdmFhZGluLWdyaWQtc2l6ZXItY2VsbD4KICAgIDwvdGVtcGxhdGU+CgogIDwvdGVtcGxhdGU+CiAgPHNjcmlwdD4vL35+V0VCUEFUSH5+L3ZhYWRpbi1ncmlkL3ZhYWRpbi1ncmlkLXNpemVyLmh0bWwuanMKUG9seW1lcih7aXM6InZhYWRpbi1ncmlkLXNpemVyIixwcm9wZXJ0aWVzOntjb2x1bW5UcmVlOkFycmF5LHRvcDpOdW1iZXIsX2NvbHVtbnM6QXJyYXl9LG9ic2VydmVyczpbIl9jb2x1bW5UcmVlQ2hhbmdlZChjb2x1bW5UcmVlKSIsIl90b3BDaGFuZ2VkKHRvcCkiXSxfY29sdW1uVHJlZUNoYW5nZWQ6ZnVuY3Rpb24oYSl7dGhpcy5fY29sdW1ucz1hW2EubGVuZ3RoLTFdfSxfdG9wQ2hhbmdlZDpmdW5jdGlvbihhKXt0aGlzLnN0eWxlLnRvcD1hKyJweCJ9fSk7Cjwvc2NyaXB0Pgo8L2RvbS1tb2R1bGU+CgoKPGRvbS1tb2R1bGUgaWQ9InZhYWRpbi1ncmlkLXRhYmxlLW91dGVyLXNjcm9sbGVyIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMDsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgIG92ZXJmbG93OiBhdXRvOwogICAgICB9CgogICAgICA6aG9zdChbcGFzc3Rocm91Z2hdKSB7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIH0KCiAgICAgIDpob3N0KFtpb3NdKSB7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IGFsbDsKICAgICAgICB6LWluZGV4OiAtMzsKICAgICAgfQoKICAgICAgOmhvc3QoW2lvc11bc2Nyb2xsaW5nXSkgewogICAgICAgIHotaW5kZXg6IDA7CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPHNsb3Q+PC9zbG90PgoKICA8L3RlbXBsYXRlPgogIDxzY3JpcHQ+Ly9+fldFQlBBVEh+fi92YWFkaW4tZ3JpZC92YWFkaW4tZ3JpZC10YWJsZS1vdXRlci1zY3JvbGxlci5odG1sLmpzClBvbHltZXIoe2lzOiJ2YWFkaW4tZ3JpZC10YWJsZS1vdXRlci1zY3JvbGxlciIscHJvcGVydGllczp7c2Nyb2xsVGFyZ2V0Ont0eXBlOk9iamVjdCxvYnNlcnZlcjoiX3Njcm9sbFRhcmdldENoYW5nZWQifSxwYXNzdGhyb3VnaDp7dHlwZTpCb29sZWFuLHJlZmxlY3RUb0F0dHJpYnV0ZTohMCx2YWx1ZTohMH19LGxpc3RlbmVyczp7c2Nyb2xsOiJfc3luY1Njcm9sbFRhcmdldCJ9LGF0dGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5saXN0ZW4odGhpcy5kb21Ib3N0LCJtb3VzZW1vdmUiLCJfb25Nb3VzZU1vdmUiKTt0aGlzLnN0eWxlLndlYmtpdE92ZXJmbG93U2Nyb2xsaW5nPSJ0b3VjaCJ9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy51bmxpc3Rlbih0aGlzLmRvbUhvc3QsIm1vdXNlbW92ZSIsIl9vbk1vdXNlTW92ZSIpfSxfc2Nyb2xsVGFyZ2V0Q2hhbmdlZDpmdW5jdGlvbihhLGMpe2MmJnRoaXMudW5saXN0ZW4oYywic2Nyb2xsIiwiX3N5bmNPdXRlclNjcm9sbGVyIik7dGhpcy5saXN0ZW4oYSwKInNjcm9sbCIsIl9zeW5jT3V0ZXJTY3JvbGxlciIpfSxfb25Nb3VzZU1vdmU6ZnVuY3Rpb24oYSl7dGhpcy5wYXNzdGhyb3VnaD1hLm9mZnNldFk8PXRoaXMuY2xpZW50SGVpZ2h0JiZhLm9mZnNldFg8PXRoaXMuY2xpZW50V2lkdGh9LF9zeW5jT3V0ZXJTY3JvbGxlcjpmdW5jdGlvbigpe3RoaXMuX3N5bmNpbmdTY3JvbGxUYXJnZXR8fCh0aGlzLl9zeW5jaW5nT3V0ZXJTY3JvbGxlcj0hMCx0aGlzLnNjcm9sbFRvcD10aGlzLmRvbUhvc3QuX3Njcm9sbFRvcCx0aGlzLnNjcm9sbExlZnQ9dGhpcy5kb21Ib3N0Ll9zY3JvbGxMZWZ0KTt0aGlzLl9zeW5jaW5nU2Nyb2xsVGFyZ2V0PSExfSxfc3luY1Njcm9sbFRhcmdldDpmdW5jdGlvbigpe3RoaXMuX3N5bmNpbmdPdXRlclNjcm9sbGVyfHwodGhpcy5fc3luY2luZ1Njcm9sbFRhcmdldD0hMCx0aGlzLnNjcm9sbFRhcmdldC5zY3JvbGxUb3A9dGhpcy5zY3JvbGxUb3AsdGhpcy5zY3JvbGxUYXJnZXQuc2Nyb2xsTGVmdD10aGlzLnNjcm9sbExlZnQsCnRoaXMuZG9tSG9zdC5fc2Nyb2xsSGFuZGxlcigpKTt0aGlzLl9zeW5jaW5nT3V0ZXJTY3JvbGxlcj0hMX19KTsKPC9zY3JpcHQ+CjwvZG9tLW1vZHVsZT4KCjxzY3JpcHQ+Ly9+fldFQlBBVEh+fi92YWFkaW4tZ3JpZC92YWFkaW4tZ3JpZC1mb2N1c2FibGUtY2VsbC1jb250YWluZXItYmVoYXZpb3IuaHRtbC5qcwp3aW5kb3cudmFhZGluPXdpbmRvdy52YWFkaW58fHt9O3ZhYWRpbi5lbGVtZW50cz12YWFkaW4uZWxlbWVudHN8fHt9O3ZhYWRpbi5lbGVtZW50cy5ncmlkPXZhYWRpbi5lbGVtZW50cy5ncmlkfHx7fTsKdmFhZGluLmVsZW1lbnRzLmdyaWQuRm9jdXNhYmxlQ2VsbENvbnRhaW5lckJlaGF2aW9yPXtwcm9wZXJ0aWVzOntmb2N1c2VkOnt0eXBlOkJvb2xlYW4scmVmbGVjdFRvQXR0cmlidXRlOiEwfSxfZm9jdXNlZFJvdzpPYmplY3QsX2ZvY3VzZWRSb3dJbmRleDpOdW1iZXIsX2ZvY3VzZWRDZWxsOk9iamVjdCxfZm9jdXNlZENlbGxJbmRleDpOdW1iZXIsX2xhc3RGb2N1c2VkQ2VsbDpPYmplY3R9LG9ic2VydmVyczpbIl9hbm5vdW5jZUZvY3VzZWRDZWxsKF9mb2N1c2VkQ2VsbCwgZm9jdXNlZCkiLCJfZGlzcGF0Y2hFdmVudHMoX2ZvY3VzZWRDZWxsLCBmb2N1c2VkKSIsIl9mb2N1c2VkQ2VsbENoYW5nZWQoX2ZvY3VzZWRSb3dJbmRleCwgX2ZvY3VzZWRDZWxsSW5kZXgpIl0sX2Fubm91bmNlRm9jdXNlZENlbGw6ZnVuY3Rpb24oYSxjKXt2b2lkIDAhPT1hJiZ2b2lkIDAhPT1jJiZ0aGlzLmRvbUhvc3QubmF2aWdhdGluZyYmYyYmKGM9UG9seW1lci5FbGVtZW50P2EuX2NlbGxDb250ZW50LmdldEF0dHJpYnV0ZSgic2xvdCIpOgphLl9jZWxsQ29udGVudC5pZCwidmFhZGluLWdyaWQtdGFibGUtYm9keSIhPT10aGlzLmlzfHxhLmhhc0F0dHJpYnV0ZSgiZGV0YWlsc2NlbGwiKXx8KGE9QXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbChQb2x5bWVyLmRvbShhLnBhcmVudEVsZW1lbnQpLnF1ZXJ5U2VsZWN0b3JBbGwoIi52YWFkaW4tZ3JpZC1jZWxsIiksYSksYz10aGlzLmRvbUhvc3QuJC5oZWFkZXIubGFzdEVsZW1lbnRDaGlsZC5jaGlsZHJlblthXS5fY2VsbENvbnRlbnQuaWQrIiAiK2MpLHRoaXMuZG9tSG9zdC4kLmZvb3RlckZvY3VzVHJhcC5hY3RpdmVUYXJnZXQ9Yyl9LF9kaXNwYXRjaEV2ZW50czpmdW5jdGlvbihhLGMpe3ZvaWQgMCE9PWEmJnZvaWQgMCE9PWMmJih0aGlzLl9sYXN0Rm9jdXNlZENlbGwmJih0aGlzLl9sYXN0Rm9jdXNlZENlbGwuX2NlbGxDb250ZW50LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJjZWxsLWZvY3Vzb3V0IikpLHRoaXMuX2xhc3RGb2N1c2VkQ2VsbD12b2lkIDApLApjJiYoYS5fY2VsbENvbnRlbnQuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImNlbGwtZm9jdXNpbiIpKSx0aGlzLl9sYXN0Rm9jdXNlZENlbGw9YSkpfSxfZm9jdXNlZENlbGxDaGFuZ2VkOmZ1bmN0aW9uKGEsYyl7dm9pZCAwIT09YSYmdm9pZCAwIT09YyYmQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbChQb2x5bWVyLmRvbSh0aGlzKS5jaGlsZHJlbixmdW5jdGlvbihkLGYpe2QuZm9jdXNlZD1mPT09YTtkLmZvY3VzZWQmJih0aGlzLl9mb2N1c2VkUm93PWQsdGhpcy5fZm9jdXNlZENlbGxJbmRleD1NYXRoLm1pbihjLGQuY2hpbGRyZW4ubGVuZ3RoLTEpLHRoaXMuX2ZvY3VzZWRDZWxsPWQuY2hpbGRyZW5bdGhpcy5fZm9jdXNlZENlbGxJbmRleF0pO2QuY2VsbHMuZm9yRWFjaChmdW5jdGlvbihnLGwpe2cuZm9jdXNlZD1sPT09dGhpcy5fZm9jdXNlZENlbGxJbmRleH0uYmluZCh0aGlzKSl9LmJpbmQodGhpcykpfSxmb2N1c0xlZnQ6ZnVuY3Rpb24oKXtpZighdGhpcy5fZm9jdXNlZENlbGwuaGFzQXR0cmlidXRlKCJkZXRhaWxzY2VsbCIpKXt2YXIgYT0KdGhpcy5fdmlzaWJsZUNlbGxJbmRleGVzKCk7MDxhLmxlbmd0aCYmKHRoaXMuX2ZvY3VzZWRDZWxsSW5kZXg9YVtNYXRoLm1heCgwLGEuaW5kZXhPZih0aGlzLl9mb2N1c2VkQ2VsbEluZGV4KS0xKV0pfX0sZm9jdXNEb3duOmZ1bmN0aW9uKCl7dGhpcy5fZm9jdXNlZFJvd0luZGV4PU1hdGgubWluKHRoaXMuX2ZvY3VzZWRSb3dJbmRleCsxLHRoaXMuY2hpbGRyZW4ubGVuZ3RoLTEpfSxfdmlzaWJsZUNlbGxJbmRleGVzOmZ1bmN0aW9uKCl7dmFyIGE9W107aWYodGhpcy5fZm9jdXNlZFJvdyYmdGhpcy5fZm9jdXNlZFJvdy5jaGlsZHJlbil7Zm9yKHZhciBjPXRoaXMuX2ZvY3VzZWRSb3cuY2hpbGRyZW4sZD0wO2Q8Yy5sZW5ndGg7ZCsrKWNbZF0uaGlkZGVufHxjW2RdPT09dGhpcy5fZm9jdXNlZFJvdy5fcm93RGV0YWlsc0NlbGx8fGEucHVzaChkKTthLnNvcnQoZnVuY3Rpb24oZixnKXtyZXR1cm4gY1tmXS5jb2x1bW4uX29yZGVyPGNbZ10uY29sdW1uLl9vcmRlcj8tMToxfSl9cmV0dXJuIGF9LApmb2N1c1BhZ2VEb3duOmZ1bmN0aW9uKCl7dGhpcy5fZm9jdXNlZFJvd0luZGV4PU1hdGgubWluKHRoaXMuX2ZvY3VzZWRSb3dJbmRleCsxMCx0aGlzLmNoaWxkcmVuLmxlbmd0aC0xKX0sZm9jdXNQYWdlVXA6ZnVuY3Rpb24oKXt0aGlzLl9mb2N1c2VkUm93SW5kZXg9TWF0aC5tYXgoMCx0aGlzLl9mb2N1c2VkUm93SW5kZXgtMTApfSxmb2N1c1JpZ2h0OmZ1bmN0aW9uKCl7aWYoIXRoaXMuX2ZvY3VzZWRDZWxsLmhhc0F0dHJpYnV0ZSgiZGV0YWlsc2NlbGwiKSl7dmFyIGE9dGhpcy5fdmlzaWJsZUNlbGxJbmRleGVzKCk7MDxhLmxlbmd0aCYmKHRoaXMuX2ZvY3VzZWRDZWxsSW5kZXg9YVtNYXRoLm1pbihhLmluZGV4T2YodGhpcy5fZm9jdXNlZENlbGxJbmRleCkrMSxhLmxlbmd0aC0xKV0pfX0sZm9jdXNVcDpmdW5jdGlvbigpe3RoaXMuX2ZvY3VzZWRSb3dJbmRleD1NYXRoLm1heCgwLHRoaXMuX2ZvY3VzZWRSb3dJbmRleC0xKX0sZm9jdXNIb21lOmZ1bmN0aW9uKCl7aWYoIXRoaXMuX2ZvY3VzZWRDZWxsLmhhc0F0dHJpYnV0ZSgiZGV0YWlsc2NlbGwiKSl7dmFyIGE9CnRoaXMuX3Zpc2libGVDZWxsSW5kZXhlcygpOzA8YS5sZW5ndGgmJih0aGlzLl9mb2N1c2VkQ2VsbEluZGV4PWFbMF0pfX0sZm9jdXNFbmQ6ZnVuY3Rpb24oKXtpZighdGhpcy5fZm9jdXNlZENlbGwuaGFzQXR0cmlidXRlKCJkZXRhaWxzY2VsbCIpKXt2YXIgYT10aGlzLl92aXNpYmxlQ2VsbEluZGV4ZXMoKTswPGEubGVuZ3RoJiYodGhpcy5fZm9jdXNlZENlbGxJbmRleD1hW2EubGVuZ3RoLTFdKX19LGZvY3VzRmlyc3Q6ZnVuY3Rpb24oKXt0aGlzLl9mb2N1c2VkUm93SW5kZXg9MDt0aGlzLmZvY3VzSG9tZSgpfSxmb2N1c0xhc3Q6ZnVuY3Rpb24oKXt0aGlzLl9mb2N1c2VkUm93SW5kZXg9dGhpcy5jaGlsZHJlbi5sZW5ndGgtMTt0aGlzLmZvY3VzRW5kKCl9fTsKPC9zY3JpcHQ+CgoKPHNjcmlwdD4vL35+V0VCUEFUSH5+L3ZhYWRpbi1ncmlkL3ZhYWRpbi1ncmlkLXRhYmxlLWhlYWRlci1mb290ZXIuaHRtbC5qcwooZnVuY3Rpb24oKXt2YXIgYT17cHJvcGVydGllczp7Y29sdW1uVHJlZTpBcnJheSx0YXJnZXQ6T2JqZWN0LF9yb3dzOkFycmF5fSxvYnNlcnZlcnM6WyJfY29sdW1uVHJlZUNoYW5nZWQoY29sdW1uVHJlZSwgdGFyZ2V0KSIsIl9yb3dzQ2hhbmdlZChfcm93cykiXSxfY29sdW1uVHJlZUNoYW5nZWQ6ZnVuY3Rpb24oYyxkKXtpZih2b2lkIDAhPT1jJiZ2b2lkIDAhPT1kKXt0aGlzLl9yb3dzJiZ0aGlzLl9yb3dzLmZvckVhY2goZnVuY3Rpb24oayl7UG9seW1lci5kb20oaykuaW5uZXJIVE1MPSIifSk7Zm9yKHZhciBmPVtdLGc9MDtnPGMubGVuZ3RoO2crKyl7dmFyIGw9dGhpcy5fY3JlYXRlUm93KCk7bC50YXJnZXQ9ZDtsLl9pc0NvbHVtblJvdz1nPT1jLmxlbmd0aC0xO2wuY29sdW1ucz1jW2ddO2YucHVzaChsKX10aGlzLl9yb3dzPSJ2YWFkaW4tZ3JpZC10YWJsZS1oZWFkZXIiPT09dGhpcy5sb2NhbE5hbWU/ZjpmLnJldmVyc2UoKX19LF9yb3dzQ2hhbmdlZDpmdW5jdGlvbihjKXtQb2x5bWVyLmRvbSh0aGlzKS5pbm5lckhUTUw9CiIiO2MuZm9yRWFjaChmdW5jdGlvbihkKXtQb2x5bWVyLmRvbSh0aGlzKS5hcHBlbmRDaGlsZChkKX0uYmluZCh0aGlzKSl9fTtQb2x5bWVyKHtpczoidmFhZGluLWdyaWQtdGFibGUtaGVhZGVyIixiZWhhdmlvcnM6W2EsdmFhZGluLmVsZW1lbnRzLmdyaWQuRm9jdXNhYmxlQ2VsbENvbnRhaW5lckJlaGF2aW9yXSxfY3JlYXRlUm93OmZ1bmN0aW9uKCl7cmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInZhYWRpbi1ncmlkLXRhYmxlLWhlYWRlci1yb3ciKX19KTtQb2x5bWVyKHtpczoidmFhZGluLWdyaWQtdGFibGUtYm9keSIsYmVoYXZpb3JzOlt2YWFkaW4uZWxlbWVudHMuZ3JpZC5Gb2N1c2FibGVDZWxsQ29udGFpbmVyQmVoYXZpb3JdLG9ic2VydmVyczpbIl9hbm5vdW5jZUZvY3VzZWRSb3coX2ZvY3VzZWRSb3cpIl0sX2Fubm91bmNlRm9jdXNlZFJvdzpmdW5jdGlvbihjKXt0aGlzLmZpcmUoImlyb24tYW5ub3VuY2UiLHt0ZXh0OiJSb3cgIisoYy5pbmRleCsxKSsiIG9mICIrCnRoaXMuZG9tSG9zdC5zaXplfSl9LF9tb3ZlRm9jdXNUb0RldGFpbHNDZWxsOmZ1bmN0aW9uKCl7dGhpcy5fZm9jdXNlZENlbGwuZm9jdXNlZD0hMTt0aGlzLl9mb2N1c2VkUm93Ll9yb3dEZXRhaWxzQ2VsbC5mb2N1c2VkPSEwO3RoaXMuX2ZvY3VzZWRDZWxsPXRoaXMuX2ZvY3VzZWRSb3cuX3Jvd0RldGFpbHNDZWxsfSxfZm9jdXNlZFJvd0hhc0RldGFpbHNDZWxsOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2ZvY3VzZWRSb3cmJnRoaXMuX2ZvY3VzZWRSb3cuX3Jvd0RldGFpbHNDZWxsJiZ0aGlzLl9mb2N1c2VkQ2VsbCE9PXRoaXMuX2ZvY3VzZWRSb3cuX3Jvd0RldGFpbHNDZWxsfSxmb2N1c0Rvd246ZnVuY3Rpb24oKXt0aGlzLl9mb2N1c2VkUm93SGFzRGV0YWlsc0NlbGwoKT90aGlzLl9tb3ZlRm9jdXNUb0RldGFpbHNDZWxsKCk6dGhpcy5fZm9jdXNlZFJvd0luZGV4PU1hdGgubWluKHRoaXMuX2ZvY3VzZWRSb3dJbmRleCsxLHRoaXMuZG9tSG9zdC5zaXplLTEpfSxmb2N1c1VwOmZ1bmN0aW9uKCl7dGhpcy5fZm9jdXNlZFJvdyYmCnRoaXMuX2ZvY3VzZWRDZWxsPT09dGhpcy5fZm9jdXNlZFJvdy5fcm93RGV0YWlsc0NlbGw/dGhpcy5fZm9jdXNlZENlbGxDaGFuZ2VkKHRoaXMuX2ZvY3VzZWRSb3dJbmRleCx0aGlzLl9mb2N1c2VkQ2VsbEluZGV4KToodGhpcy5fZm9jdXNlZFJvd0luZGV4PU1hdGgubWF4KDAsdGhpcy5fZm9jdXNlZFJvd0luZGV4LTEpLHRoaXMuX2ZvY3VzZWRSb3dIYXNEZXRhaWxzQ2VsbCgpJiZ0aGlzLl9tb3ZlRm9jdXNUb0RldGFpbHNDZWxsKCkpfSxmb2N1c0xhc3Q6ZnVuY3Rpb24oKXt0aGlzLl9mb2N1c2VkUm93SW5kZXg9dGhpcy5kb21Ib3N0LnNpemUtMTt0aGlzLmZvY3VzRW5kKCl9LF9mb2N1c2VkQ2VsbENoYW5nZWQ6ZnVuY3Rpb24oYyxkKXt2b2lkIDAhPT1jJiZ2b2lkIDAhPT1kJiZBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKFBvbHltZXIuZG9tKHRoaXMpLmNoaWxkcmVuLGZ1bmN0aW9uKGYpe2YuZm9jdXNlZD1mLmluZGV4PT09YztmLmluZGV4PT09YyYmKHRoaXMuX2ZvY3VzZWRSb3c9CmYsdGhpcy5fZm9jdXNlZENlbGw9Zi5jaGlsZHJlbltkXSk7Zi5pdGVyYXRlQ2VsbHMoZnVuY3Rpb24oZyxsKXtnLmZvY3VzZWQ9bD09PWR9KX0uYmluZCh0aGlzKSl9fSk7UG9seW1lcih7aXM6InZhYWRpbi1ncmlkLXRhYmxlLWZvb3RlciIsYmVoYXZpb3JzOlthLHZhYWRpbi5lbGVtZW50cy5ncmlkLkZvY3VzYWJsZUNlbGxDb250YWluZXJCZWhhdmlvcl0sX2NyZWF0ZVJvdzpmdW5jdGlvbigpe3JldHVybiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ2YWFkaW4tZ3JpZC10YWJsZS1mb290ZXItcm93Iil9fSl9KSgpOwo8L3NjcmlwdD4KCgoKCjxkb20tbW9kdWxlIGlkPSJ2YWFkaW4tZ3JpZC10YWJsZS1mb2N1cy10cmFwIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgOmhvc3QgewogICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgei1pbmRleDogLTM7CiAgICAgICBoZWlnaHQ6IDA7CiAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgIH0KCiAgICAgOmhvc3QoOmZvY3VzKSwKICAgICAucHJpbWFyeTpmb2N1cywKICAgICA6OnNsb3R0ZWQoLnByaW1hcnk6Zm9jdXMpLAogICAgIC5zZWNvbmRhcnk6Zm9jdXMsCiAgICAgOjpzbG90dGVkKC5zZWNvbmRhcnk6Zm9jdXMpIHsKICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgfQogICAgPC9zdHlsZT4KCiAgICAKICAgIDxkaXYgY2xhc3M9InByaW1hcnkiIHRhYmluZGV4PSIwIiByb2xlPSJncmlkY2VsbCIgb24tZm9jdXM9Il9vbkJhaXRGb2N1cyIgb24tYmx1cj0iX29uQmFpdEJsdXIiPjxkaXYgYXJpYS1oaWRkZW49InRydWUiPiZuYnNwOzwvZGl2PjwvZGl2PgogICAgPGRpdiBjbGFzcz0ic2Vjb25kYXJ5IiB0YWJpbmRleD0iLTEiIHJvbGU9ImdyaWRjZWxsIiBvbi1mb2N1cz0iX29uQmFpdEZvY3VzIiBvbi1ibHVyPSJfb25CYWl0Qmx1ciI+PGRpdiBhcmlhLWhpZGRlbj0idHJ1ZSI+Jm5ic3A7PC9kaXY+PC9kaXY+CgogICAgPHNsb3Q+PC9zbG90PgogIDwvdGVtcGxhdGU+CiAgPHNjcmlwdD4vL35+V0VCUEFUSH5+L3ZhYWRpbi1ncmlkL3ZhYWRpbi1ncmlkLXRhYmxlLWZvY3VzLXRyYXAuaHRtbC5qcwpQb2x5bWVyKHtpczoidmFhZGluLWdyaWQtdGFibGUtZm9jdXMtdHJhcCIsaG9zdEF0dHJpYnV0ZXM6e3JvbGU6ImdyaWRjZWxsIn0scHJvcGVydGllczp7YWN0aXZlVGFyZ2V0Ont0eXBlOlN0cmluZyxvYnNlcnZlcjoiX2FjdGl2ZVRhcmdldENoYW5nZWQifX0scmVhZHk6ZnVuY3Rpb24oKXt0aGlzLl9wcmltYXJ5PVBvbHltZXIuZG9tKHRoaXMucm9vdCkucXVlcnlTZWxlY3RvcigiLnByaW1hcnkiKTt0aGlzLl9zZWNvbmRhcnk9UG9seW1lci5kb20odGhpcy5yb290KS5xdWVyeVNlbGVjdG9yKCIuc2Vjb25kYXJ5Iik7aWYoUG9seW1lci5TZXR0aW5ncy51c2VOYXRpdmVTaGFkb3d8fFBvbHltZXIuU2V0dGluZ3MudXNlU2hhZG93KVBvbHltZXIuZG9tKHRoaXMpLmFwcGVuZENoaWxkKHRoaXMuX3NlY29uZGFyeSksUG9seW1lci5kb20odGhpcykuYXBwZW5kQ2hpbGQodGhpcy5fcHJpbWFyeSl9LGZvY3VzOmZ1bmN0aW9uKCl7dGhpcy5fZm9jdXNlZCE9PXRoaXMuX3ByaW1hcnk/dGhpcy5fcHJpbWFyeS5mb2N1cygpOgp0aGlzLl9zZWNvbmRhcnkuZm9jdXMoKX0sX29uQmFpdEZvY3VzOmZ1bmN0aW9uKGEpe3RoaXMuX2ZvY3VzZWQ9YS50YXJnZXQ7dGhpcy5fbW92aW5nRm9jdXNJbnRlcm5hbGx5fHwodGhpcy5maXJlKCJmb2N1cy1nYWluZWQiKSx0aGlzLl9wcmltYXJ5LnRhYkluZGV4PS0xKX0sX29uQmFpdEJsdXI6ZnVuY3Rpb24oKXt0aGlzLl9tb3ZpbmdGb2N1c0ludGVybmFsbHl8fCh0aGlzLmZpcmUoImZvY3VzLWxvc3QiKSx0aGlzLl9wcmltYXJ5LnRhYkluZGV4PTApfSxfYWN0aXZlVGFyZ2V0Q2hhbmdlZDpmdW5jdGlvbihhKXt0aGlzLl9tb3ZpbmdGb2N1c0ludGVybmFsbHk9ITA7dGhpcy5fZm9jdXNlZD09PXRoaXMuX3ByaW1hcnk/KHRoaXMuX3NlY29uZGFyeS5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWxsZWRieSIsYSksdGhpcy5fc2Vjb25kYXJ5LmZvY3VzKCkpOih0aGlzLl9wcmltYXJ5LnNldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbGxlZGJ5IixhKSx0aGlzLl9wcmltYXJ5LmZvY3VzKCkpOwp0aGlzLl9tb3ZpbmdGb2N1c0ludGVybmFsbHk9ITF9LF9yZWFubm91bmNlOmZ1bmN0aW9uKCl7dGhpcy5fbW92aW5nRm9jdXNJbnRlcm5hbGx5PSEwO3RoaXMuX2ZvY3VzZWQ9PT10aGlzLl9wcmltYXJ5Pyh0aGlzLl9zZWNvbmRhcnkuc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsbGVkYnkiLHRoaXMuYWN0aXZlVGFyZ2V0KSx0aGlzLl9zZWNvbmRhcnkuZm9jdXMoKSk6KHRoaXMuX3ByaW1hcnkuc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsbGVkYnkiLHRoaXMuYWN0aXZlVGFyZ2V0KSx0aGlzLl9wcmltYXJ5LmZvY3VzKCkpO3RoaXMuX21vdmluZ0ZvY3VzSW50ZXJuYWxseT0hMX19KTsKPC9zY3JpcHQ+CjwvZG9tLW1vZHVsZT4KCgoKPGRvbS1tb2R1bGUgaWQ9InZhYWRpbi1ncmlkLXRhYmxlLXJvdyI+PC9kb20tbW9kdWxlPgo8ZG9tLW1vZHVsZSBpZD0idmFhZGluLWdyaWQtdGFibGUtaGVhZGVyLXJvdyI+PC9kb20tbW9kdWxlPgoKPHNjcmlwdD4vL35+V0VCUEFUSH5+L3ZhYWRpbi1ncmlkL3ZhYWRpbi1ncmlkLXRhYmxlLXJvdy5odG1sLmpzCihmdW5jdGlvbigpe3ZhciBhPXtwcm9wZXJ0aWVzOnthY3RpdmU6e3R5cGU6Qm9vbGVhbixyZWZsZWN0VG9BdHRyaWJ1dGU6ITAsdmFsdWU6ITF9LGNvbHVtbnM6QXJyYXksaW5kZXg6TnVtYmVyLGNlbGxzOnt2YWx1ZTpbXX0sdGFyZ2V0Ok9iamVjdCxleHBhbmRlZDp7dmFsdWU6ITF9LGZvY3VzZWQ6e3R5cGU6Qm9vbGVhbixyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9LGl0ZW06T2JqZWN0LHNlbGVjdGVkOntyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9LF9yb3dEZXRhaWxzQ2VsbDpPYmplY3Qscm93RGV0YWlsc1RlbXBsYXRlOk9iamVjdH0sb2JzZXJ2ZXJzOiJfY29sdW1uc0NoYW5nZWQoY29sdW1ucywgdGFyZ2V0KTtfaW5kZXhDaGFuZ2VkKGluZGV4LCBjZWxscyk7X2l0ZW1DaGFuZ2VkKGl0ZW0sIGNlbGxzKTtfaXRlbUNoYW5nZWRGb3JEZXRhaWxzKGl0ZW0sIF9yb3dEZXRhaWxzQ2VsbCk7X3Jvd0RldGFpbHNDaGFuZ2VkKGV4cGFuZGVkLCByb3dEZXRhaWxzVGVtcGxhdGUsIHRhcmdldCk7X3Jvd0RldGFpbHNDZWxsSW5kZXhDaGFuZ2VkKF9yb3dEZXRhaWxzQ2VsbCwgaW5kZXgpO19yb3dEZXRhaWxzQ2VsbENoYW5nZWQoX3Jvd0RldGFpbHNDZWxsLCB0YXJnZXQpO19zZWxlY3RlZENoYW5nZWQoc2VsZWN0ZWQsIGNlbGxzKTtfc2VsZWN0ZWRDaGFuZ2VkRm9yRGV0YWlscyhzZWxlY3RlZCwgX3Jvd0RldGFpbHNDZWxsKSIuc3BsaXQoIjsiKSwKcmVhZHk6ZnVuY3Rpb24oKXt0aGlzLmNsYXNzTGlzdC5hZGQoInZhYWRpbi1ncmlkLXJvdyIpOyExPT09UG9seW1lci5TZXR0aW5ncy51c2VTaGFkb3cmJih0aGlzLmNsYXNzTGlzdC5hZGQoInN0eWxlLXNjb3BlIiksdGhpcy5jbGFzc0xpc3QuYWRkKCJ2YWFkaW4tZ3JpZCIpKX0saXRlcmF0ZUNlbGxzOmZ1bmN0aW9uKGMpe3RoaXMuY2VsbHMuZm9yRWFjaChjKTt0aGlzLl9yb3dEZXRhaWxzQ2VsbCYmYyh0aGlzLl9yb3dEZXRhaWxzQ2VsbCl9LF9yb3dEZXRhaWxzQ2hhbmdlZDpmdW5jdGlvbihjLGQsZil7aWYodm9pZCAwIT09YyYmdm9pZCAwIT09ZCYmdm9pZCAwIT09Zil7aWYoYyl7dmFyIGc9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidmFhZGluLWdyaWQtdGFibGUtY2VsbCIpO2cuc2V0QXR0cmlidXRlKCJkZXRhaWxzY2VsbCIsITApO2cuZnJvemVuPSEwO2cudGFyZ2V0PWY7Zy50ZW1wbGF0ZT1kO2cudG9nZ2xlQXR0cmlidXRlKCJsYXN0Y29sdW1uIiwhMCk7UG9seW1lci5kb20odGhpcy5yb290KS5hcHBlbmRDaGlsZChnKTsKUG9seW1lci5kb20uZmx1c2goKTt0aGlzLl9yb3dEZXRhaWxzQ2VsbD1nfWVsc2UgdGhpcy5fcm93RGV0YWlsc0NlbGwmJihQb2x5bWVyLmRvbSh0aGlzLnJvb3QpLnJlbW92ZUNoaWxkKHRoaXMuX3Jvd0RldGFpbHNDZWxsKSx0aGlzLl9yb3dEZXRhaWxzQ2VsbD1udWxsKTt0aGlzLml0ZXJhdGVDZWxscyhmdW5jdGlvbihsKXtsLmV4cGFuZGVkPWN9KTt0aGlzLnRhcmdldC4kLnNjcm9sbGVyLl9mcm96ZW5DZWxsc0NoYW5nZWQoKX19LF91cGRhdGVSb3dWaXNpYmlsaXR5OmZ1bmN0aW9uKCl7dGhpcy5oaWRkZW49dGhpcy5jZWxscy5ldmVyeShmdW5jdGlvbihjKXtyZXR1cm4gYy5faXNFbXB0eX0pfSxfcm93RGV0YWlsc0NlbGxDaGFuZ2VkOmZ1bmN0aW9uKGMsZCl7dm9pZCAwIT09YyYmdm9pZCAwIT09ZCYmZC4kLnNjcm9sbGVyLl91cGRhdGUoKX0sX3Jvd0RldGFpbHNDZWxsSW5kZXhDaGFuZ2VkOmZ1bmN0aW9uKGMsZCl7dm9pZCAwIT09YyYmdm9pZCAwIT09ZCYmKGM/KGMuaW5kZXg9CmQsUG9seW1lci5kb20uZmx1c2goKSx0aGlzLnVwZGF0ZVJvd0RldGFpbHNDZWxsTWV0cmljcygpKTp0aGlzLnN0eWxlLnBhZGRpbmdCb3R0b209IiIpfSx1cGRhdGVSb3dEZXRhaWxzQ2VsbE1ldHJpY3M6ZnVuY3Rpb24oKXt0aGlzLl9yb3dEZXRhaWxzQ2VsbCYmKHRoaXMudGFyZ2V0JiZ0aGlzLnRhcmdldC5fb2JzZXJ2ZXImJnRoaXMudGFyZ2V0Ll9vYnNlcnZlci5mbHVzaCYmdGhpcy50YXJnZXQuX29ic2VydmVyLmZsdXNoKCksdGhpcy5fcm93RGV0YWlsc0NlbGwuc3R5bGUuaGVpZ2h0PSIiLHRoaXMuc3R5bGUucGFkZGluZ0JvdHRvbT10aGlzLl9yb3dEZXRhaWxzQ2VsbC5zdHlsZS5oZWlnaHQ9dGhpcy5fcm93RGV0YWlsc0NlbGwuY2xpZW50SGVpZ2h0KyJweCIpfSxfY29sdW1uc0NoYW5nZWQ6ZnVuY3Rpb24oYyxkKXtpZih2b2lkIDAhPT1jJiZ2b2lkIDAhPT1kKXtQb2x5bWVyLmRvbSh0aGlzKS5pbm5lckhUTUw9IiI7dmFyIGY9W107Yy5mb3JFYWNoKGZ1bmN0aW9uKGcpe3ZhciBsPQoiXyIrdGhpcy5pcy5yZXBsYWNlKC8tL2csIl8iKSsiX2NlbGxzIjtsPWdbbF09Z1tsXXx8W107dmFyIGs9bC5maWx0ZXIoZnVuY3Rpb24ocCl7cmV0dXJuIVBvbHltZXIuZG9tKHApLnBhcmVudE5vZGV9KVswXTtpZighayl7az10aGlzLl9jcmVhdGVDZWxsKCk7dmFyIG09QXJyYXkucHJvdG90eXBlLnNvbWUuY2FsbCh0aGlzLnRhcmdldC5xdWVyeVNlbGVjdG9yQWxsKCJkb20tcmVwZWF0IiksZnVuY3Rpb24ocCl7cmV0dXJuIXAucmVzdGFtcH0pOyhtPW18fCJ2YWFkaW4tZ3JpZC10YWJsZS1oZWFkZXItcm93Ij09PXRoaXMuaXN8fCJ2YWFkaW4tZ3JpZC10YWJsZS1mb290ZXItcm93Ij09PXRoaXMuaXMpfHxsLnB1c2goayl9ay5pbmRleD10aGlzLmluZGV4O2sudGFyZ2V0PXRoaXMudGFyZ2V0O2suX2lzQ29sdW1uUm93PXRoaXMuX2lzQ29sdW1uUm93O2suY29sdW1uPWc7ay5leHBhbmRlZD10aGlzLmV4cGFuZGVkO1BvbHltZXIuZG9tKHRoaXMpLmFwcGVuZENoaWxkKGspO2YucHVzaChrKX0uYmluZCh0aGlzKSk7CnRoaXMuY2VsbHM9Zn19LF9pbmRleENoYW5nZWQ6ZnVuY3Rpb24oYyxkKXt2b2lkIDAhPT1jJiZ2b2lkIDAhPT1kJiZkLmZvckVhY2goZnVuY3Rpb24oZil7Zi5pbmRleD1jfSl9LF9pdGVtQ2hhbmdlZDpmdW5jdGlvbihjLGQpe3ZvaWQgMCE9PWMmJnZvaWQgMCE9PWQmJmQuZm9yRWFjaChmdW5jdGlvbihmKXtmLml0ZW09Y30pfSxfaXRlbUNoYW5nZWRGb3JEZXRhaWxzOmZ1bmN0aW9uKGMsZCl7dm9pZCAwIT09YyYmdm9pZCAwIT09ZCYmZCYmKGQuaXRlbT1jKX0sX3NlbGVjdGVkQ2hhbmdlZDpmdW5jdGlvbihjLGQpe3ZvaWQgMCE9PWMmJnZvaWQgMCE9PWQmJmQuZm9yRWFjaChmdW5jdGlvbihmKXtmLnNlbGVjdGVkPWN9KX0sX3NlbGVjdGVkQ2hhbmdlZEZvckRldGFpbHM6ZnVuY3Rpb24oYyxkKXt2b2lkIDAhPT1jJiZ2b2lkIDAhPT1kJiZkJiYoZC5zZWxlY3RlZD1jKX0sdXBkYXRlTGFzdENvbHVtbjpmdW5jdGlvbigpe3RoaXMuY2VsbHMuc2xpY2UoMCkuc29ydChmdW5jdGlvbihjLApkKXtyZXR1cm4gYy5jb2x1bW4uX29yZGVyLWQuY29sdW1uLl9vcmRlcn0pLmZvckVhY2goZnVuY3Rpb24oYyxkLGYpe2MudG9nZ2xlQXR0cmlidXRlKCJsYXN0Y29sdW1uIixkPT09Zi5sZW5ndGgtMSl9KX19O1BvbHltZXIoe2lzOiJ2YWFkaW4tZ3JpZC10YWJsZS1yb3ciLGJlaGF2aW9yczpbYV0sX2NyZWF0ZUNlbGw6ZnVuY3Rpb24oKXtyZXR1cm4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidmFhZGluLWdyaWQtdGFibGUtY2VsbCIpfX0pO1BvbHltZXIoe2lzOiJ2YWFkaW4tZ3JpZC10YWJsZS1oZWFkZXItcm93IixiZWhhdmlvcnM6W2FdLG9ic2VydmVyczpbIl91cGRhdGVSb3dWaXNpYmlsaXR5KGNvbHVtbnMpIl0sbGlzdGVuZXJzOnsiY2VsbC1lbXB0eS1jaGFuZ2VkIjoiX3VwZGF0ZVJvd1Zpc2liaWxpdHkifSxfY3JlYXRlQ2VsbDpmdW5jdGlvbigpe3JldHVybiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ2YWFkaW4tZ3JpZC10YWJsZS1oZWFkZXItY2VsbCIpfX0pO1BvbHltZXIoe2lzOiJ2YWFkaW4tZ3JpZC10YWJsZS1mb290ZXItcm93IiwKYmVoYXZpb3JzOlthXSxvYnNlcnZlcnM6WyJfdXBkYXRlUm93VmlzaWJpbGl0eShjb2x1bW5zKSJdLGxpc3RlbmVyczp7ImNlbGwtZW1wdHktY2hhbmdlZCI6Il91cGRhdGVSb3dWaXNpYmlsaXR5In0sX2NyZWF0ZUNlbGw6ZnVuY3Rpb24oKXtyZXR1cm4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidmFhZGluLWdyaWQtdGFibGUtZm9vdGVyLWNlbGwiKX19KX0pKCk7Cjwvc2NyaXB0PgoKCgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdmFhZGluLWdyaWQvdmFhZGluLWdyaWQtdGVtcGxhdGl6ZXIuaHRtbC5qcwp3aW5kb3cudmFhZGluPXdpbmRvdy52YWFkaW58fHt9O3ZhYWRpbi5lbGVtZW50cz12YWFkaW4uZWxlbWVudHN8fHt9O3ZhYWRpbi5lbGVtZW50cy5ncmlkPXZhYWRpbi5lbGVtZW50cy5ncmlkfHx7fTt2YWFkaW4uZWxlbWVudHMuZ3JpZC5UZW1wbGF0aXplcj1mdW5jdGlvbigpe307CnZhYWRpbi5lbGVtZW50cy5ncmlkLlRlbXBsYXRpemVyPVBvbHltZXIoe2lzOiJ2YWFkaW4tZ3JpZC10ZW1wbGF0aXplciIsYmVoYXZpb3JzOltQb2x5bWVyLlRlbXBsYXRpemVyXSxwcm9wZXJ0aWVzOntkYXRhSG9zdDpPYmplY3QsdGVtcGxhdGU6T2JqZWN0LF90ZW1wbGF0ZUluc3RhbmNlczp7dHlwZTpBcnJheSx2YWx1ZTpmdW5jdGlvbigpe3JldHVybltdfX0sX3BhcmVudFBhdGhWYWx1ZXM6e3ZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJue319fX0sb2JzZXJ2ZXJzOlsiX3RlbXBsYXRlSW5zdGFuY2VzQ2hhbmdlZChfdGVtcGxhdGVJbnN0YW5jZXMuKiwgX3BhcmVudFBhdGhWYWx1ZXMuKikiXSxjcmVhdGVkOmZ1bmN0aW9uKCl7dGhpcy5fcGFyZW50TW9kZWw9ITA7dGhpcy5faW5zdGFuY2VQcm9wcz17ZXhwYW5kZWQ6ITAsaW5kZXg6ITAsaXRlbTohMCxzZWxlY3RlZDohMH19LGNyZWF0ZUluc3RhbmNlOmZ1bmN0aW9uKCl7dGhpcy5fZW5zdXJlVGVtcGxhdGl6ZWQoKTt2YXIgYT10aGlzLnN0YW1wKHt9KTsKdGhpcy5hZGRJbnN0YW5jZShhKTtyZXR1cm4gYX0sYWRkSW5zdGFuY2U6ZnVuY3Rpb24oYSl7LTE9PT10aGlzLl90ZW1wbGF0ZUluc3RhbmNlcy5pbmRleE9mKGEpJiZ0aGlzLnB1c2goIl90ZW1wbGF0ZUluc3RhbmNlcyIsYSl9LHJlbW92ZUluc3RhbmNlOmZ1bmN0aW9uKGEpe3RoaXMuc3BsaWNlKCJfdGVtcGxhdGVJbnN0YW5jZXMiLHRoaXMuX3RlbXBsYXRlSW5zdGFuY2VzLmluZGV4T2YoYSksMSl9LF9lbnN1cmVUZW1wbGF0aXplZDpmdW5jdGlvbigpe3RoaXMudGVtcGxhdGUuX3RlbXBsYXRpemVkfHwodGhpcy50ZW1wbGF0ZS5fdGVtcGxhdGl6ZWQ9ITAsdGhpcy50ZW1wbGF0aXplKHRoaXMudGVtcGxhdGUpLHRoaXMuX3BhcmVudFByb3BzPXRoaXMuX3BhcmVudFByb3BzfHx7fSxQb2x5bWVyLkVsZW1lbnR8fE9iamVjdC5rZXlzKHRoaXMuX3BhcmVudFByb3BzKS5mb3JFYWNoKGZ1bmN0aW9uKCl7fSx0aGlzKSl9LF9mb3J3YXJkSW5zdGFuY2VQcm9wOmZ1bmN0aW9uKGEsYyxkKXt2b2lkIDAhPT0KYVsiX18iK2MrIl9fIl0mJmFbIl9fIitjKyJfXyJdIT09ZCYmdGhpcy5maXJlKCJ0ZW1wbGF0ZS1pbnN0YW5jZS1jaGFuZ2VkIix7cHJvcDpjLHZhbHVlOmQsaW5zdDphfSl9LF9mb3J3YXJkSW5zdGFuY2VQYXRoOmZ1bmN0aW9uKGEsYyxkKXswIT09Yy5pbmRleE9mKCJpdGVtLiIpfHx0aGlzLl9zdXBwcmVzc0l0ZW1DaGFuZ2VFdmVudHx8dGhpcy5maXJlKCJpdGVtLWNoYW5nZWQiLHtpdGVtOmEuaXRlbSxwYXRoOmMuc3Vic3RyaW5nKDUpLHZhbHVlOmR9KX0sX25vdGlmeUluc3RhbmNlUHJvcFYyOmZ1bmN0aW9uKGEsYyxkKXt0aGlzLl9mb3J3YXJkSW5zdGFuY2VQcm9wKGEsYyxkKTt0aGlzLl9mb3J3YXJkSW5zdGFuY2VQYXRoKGEsYyxkKX0sX2ZvcndhcmRQYXJlbnRQcm9wOmZ1bmN0aW9uKGEsYyl7dGhpcy5fcGFyZW50UGF0aFZhbHVlc1thXT1jO3RoaXMuX3RlbXBsYXRlSW5zdGFuY2VzLmZvckVhY2goZnVuY3Rpb24oZCl7ZC5zZXQoYSxjKX0sdGhpcyl9LF9mb3J3YXJkUGFyZW50UGF0aDpmdW5jdGlvbihhLApjKXt0aGlzLnNldChbIl9wYXJlbnRQYXRoVmFsdWVzIixhXSxjKTt0aGlzLl90ZW1wbGF0ZUluc3RhbmNlcy5mb3JFYWNoKGZ1bmN0aW9uKGQpe2Qubm90aWZ5UGF0aChhLGMpfSx0aGlzKX0sX2ZvcndhcmRIb3N0UHJvcFYyOmZ1bmN0aW9uKGEsYyl7dGhpcy5fZm9yd2FyZFBhcmVudFByb3AoYSxjKTt0aGlzLl90ZW1wbGF0ZUluc3RhbmNlcyYmdGhpcy5fdGVtcGxhdGVJbnN0YW5jZXMuZm9yRWFjaChmdW5jdGlvbihkKXtkLm5vdGlmeVBhdGgoYSxjKX0sdGhpcyl9LF90ZW1wbGF0ZUluc3RhbmNlc0NoYW5nZWQ6ZnVuY3Rpb24oYSl7aWYoIl90ZW1wbGF0ZUluc3RhbmNlcyI9PT1hLnBhdGgpe3ZhciBjPTA7dmFyIGQ9dGhpcy5fdGVtcGxhdGVJbnN0YW5jZXMubGVuZ3RofWVsc2UgaWYoIl90ZW1wbGF0ZUluc3RhbmNlcy5zcGxpY2VzIj09PWEucGF0aCljPWEudmFsdWUuaW5kZXgsZD1hLnZhbHVlLmFkZGVkQ291bnQ7ZWxzZSByZXR1cm47T2JqZWN0LmtleXModGhpcy5fcGFyZW50UGF0aFZhbHVlc3x8Cnt9KS5mb3JFYWNoKGZ1bmN0aW9uKGYpe2Zvcih2YXIgZz1jO2c8YytkO2crKyl0aGlzLl90ZW1wbGF0ZUluc3RhbmNlc1tnXS5zZXQoZix0aGlzLl9wYXJlbnRQYXRoVmFsdWVzW2ZdKX0sdGhpcyl9fSk7Cjwvc2NyaXB0PgoKCjxkb20tbW9kdWxlIGlkPSJ2YWFkaW4tZ3JpZC1yb3ctZGV0YWlscy1zdHlsZXMiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgW2RldGFpbHNjZWxsXSB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT4KPGRvbS1tb2R1bGUgaWQ9InZhYWRpbi1ncmlkLXJvdy1kZXRhaWxzLXRoZW1hYmlsaXR5LXN0eWxlcyI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICAudmFhZGluLWdyaWQtY2VsbFtkZXRhaWxzY2VsbF0gOjpzbG90dGVkKHZhYWRpbi1ncmlkLWNlbGwtY29udGVudCkgewogICAgICAgIGJhY2tncm91bmQ6ICNmZmY7CiAgICAgICAgQGFwcGx5KC0tdmFhZGluLWdyaWQtYm9keS1yb3ctZGV0YWlscy1jZWxsKTsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+CgoKPHNjcmlwdD4vL35+V0VCUEFUSH5+L3ZhYWRpbi1ncmlkL3ZhYWRpbi1ncmlkLXJvdy1kZXRhaWxzLWJlaGF2aW9yLmh0bWwuanMKd2luZG93LnZhYWRpbj13aW5kb3cudmFhZGlufHx7fTt2YWFkaW4uZWxlbWVudHM9dmFhZGluLmVsZW1lbnRzfHx7fTt2YWFkaW4uZWxlbWVudHMuZ3JpZD12YWFkaW4uZWxlbWVudHMuZ3JpZHx8e307CnZhYWRpbi5lbGVtZW50cy5ncmlkLlJvd0RldGFpbHNCZWhhdmlvcj17cHJvcGVydGllczp7ZXhwYW5kZWRJdGVtczp7dHlwZTpBcnJheSx2YWx1ZTpmdW5jdGlvbigpe3JldHVybltdfX19LGxpc3RlbmVyczp7InRlbXBsYXRlLWluc3RhbmNlLWNoYW5nZWQiOiJfdGVtcGxhdGVJbnN0YW5jZUNoYW5nZWRFeHBhbmRlZCJ9LG9ic2VydmVyczpbIl9leHBhbmRlZEl0ZW1zQ2hhbmdlZChleHBhbmRlZEl0ZW1zLiosIGRhdGFQcm92aWRlcikiLCJfcm93RGV0YWlsc1RlbXBsYXRlQ2hhbmdlZChfcm93RGV0YWlsc1RlbXBsYXRlKSJdLF9leHBhbmRlZEl0ZW1zQ2hhbmdlZDpmdW5jdGlvbihhLGMpe3ZvaWQgMCE9PWEmJnZvaWQgMCE9PWMmJih0aGlzLl9mbHVzaEl0ZW1zRGVib3VuY2VyKCksdGhpcy4kLnNjcm9sbGVyLl9waHlzaWNhbEl0ZW1zJiZ0aGlzLiQuc2Nyb2xsZXIuX3BoeXNpY2FsSXRlbXMuZm9yRWFjaChmdW5jdGlvbihkKXtkLmV4cGFuZGVkPXRoaXMuX2lzRXhwYW5kZWQoZC5pdGVtKX0uYmluZCh0aGlzKSkpfSwKX3Jvd0RldGFpbHNUZW1wbGF0ZUNoYW5nZWQ6ZnVuY3Rpb24oYSl7dmFyIGM9bmV3IHZhYWRpbi5lbGVtZW50cy5ncmlkLlRlbXBsYXRpemVyO2MuZGF0YUhvc3Q9dGhpcy5kYXRhSG9zdDtjLl9pbnN0YW5jZVByb3BzPXtleHBhbmRlZDohMCxpbmRleDohMCxpdGVtOiEwLHNlbGVjdGVkOiEwfTtQb2x5bWVyLmRvbSh0aGlzLnJvb3QpLmFwcGVuZENoaWxkKGMpO2MudGVtcGxhdGU9YTthLnRlbXBsYXRpemVyPWN9LF9pc0V4cGFuZGVkOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmV4cGFuZGVkSXRlbXMmJi0xIT09dGhpcy5leHBhbmRlZEl0ZW1zLmluZGV4T2YoYSl9LGV4cGFuZEl0ZW06ZnVuY3Rpb24oYSl7dGhpcy5faXNFeHBhbmRlZChhKXx8dGhpcy5wdXNoKCJleHBhbmRlZEl0ZW1zIixhKX0sY29sbGFwc2VJdGVtOmZ1bmN0aW9uKGEpe3RoaXMuX2lzRXhwYW5kZWQoYSkmJnRoaXMuc3BsaWNlKCJleHBhbmRlZEl0ZW1zIix0aGlzLmV4cGFuZGVkSXRlbXMuaW5kZXhPZihhKSwxKX0sCl90ZW1wbGF0ZUluc3RhbmNlQ2hhbmdlZEV4cGFuZGVkOmZ1bmN0aW9uKGEpeyJleHBhbmRlZCI9PT1hLmRldGFpbC5wcm9wJiYoYS5kZXRhaWwudmFsdWU/dGhpcy5leHBhbmRJdGVtKGEuZGV0YWlsLmluc3QuaXRlbSk6dGhpcy5jb2xsYXBzZUl0ZW0oYS5kZXRhaWwuaW5zdC5pdGVtKSxhLnN0b3BQcm9wYWdhdGlvbigpKX19Owo8L3NjcmlwdD4KCjxkb20tbW9kdWxlIGlkPSJ2YWFkaW4tZ3JpZC1kYXRhLXByb3ZpZGVyLXRoZW1hYmlsaXR5LXN0eWxlcyI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgoKICAgICAgLyogQW5pbSAqLwogICAgICBAa2V5ZnJhbWVzIHZhYWRpbi1ncmlkLXNwaW4tMzYwIHsKICAgICAgICAxMDAlIHsKICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7CiAgICAgICAgfQogICAgICB9CiAgICAgIEAtd2Via2l0LWtleWZyYW1lcyB2YWFkaW4tZ3JpZC1zcGluLTM2MCB7CiAgICAgICAgMTAwJSB7CiAgICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7CiAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgI3NwaW5uZXIgewogICAgICAgIGJvcmRlcjogMnB4IHNvbGlkIHZhcigtLXByaW1hcnktY29sb3IsICMwM0E5RjQpOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgICBib3JkZXItcmlnaHQtY29sb3I6IHRyYW5zcGFyZW50OwogICAgICAgIGJvcmRlci10b3AtY29sb3I6IHRyYW5zcGFyZW50OwogICAgICAgIGNvbnRlbnQ6ICIiOwogICAgICAgIGhlaWdodDogMTZweDsKICAgICAgICBsZWZ0OiA1MCU7CiAgICAgICAgbWFyZ2luLWxlZnQ6IC04cHg7CiAgICAgICAgbWFyZ2luLXRvcDogLThweDsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiA1MCU7CiAgICAgICAgd2lkdGg6IDE2cHg7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICBAYXBwbHkoLS12YWFkaW4tZ3JpZC1sb2FkaW5nLXNwaW5uZXIpOwogICAgICB9CgogICAgICA6aG9zdChbbG9hZGluZ10pICNzcGlubmVyIHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICAgIC13ZWJraXQtYW5pbWF0aW9uOiB2YWFkaW4tZ3JpZC1zcGluLTM2MCA0MDBtcyBsaW5lYXIgaW5maW5pdGU7CiAgICAgICAgYW5pbWF0aW9uOiB2YWFkaW4tZ3JpZC1zcGluLTM2MCA0MDBtcyBsaW5lYXIgaW5maW5pdGU7CiAgICAgIH0KCiAgICAgIDpob3N0KFtsb2FkaW5nXSkgI2l0ZW1zIHsKICAgICAgICBvcGFjaXR5OiAwLjU7CiAgICAgIH0KCiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT4KCgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdmFhZGluLWdyaWQvdmFhZGluLWdyaWQtZGF0YS1wcm92aWRlci1iZWhhdmlvci5odG1sLmpzCndpbmRvdy52YWFkaW49d2luZG93LnZhYWRpbnx8e307dmFhZGluLmVsZW1lbnRzPXZhYWRpbi5lbGVtZW50c3x8e307dmFhZGluLmVsZW1lbnRzLmdyaWQ9dmFhZGluLmVsZW1lbnRzLmdyaWR8fHt9Owp2YWFkaW4uZWxlbWVudHMuZ3JpZC5EYXRhUHJvdmlkZXJCZWhhdmlvcj17bGlzdGVuZXJzOnsiaXRlbS1jaGFuZ2VkIjoiX3RlbXBsYXRlSXRlbUNoYW5nZWQifSxwcm9wZXJ0aWVzOntwYWdlU2l6ZTp7dHlwZTpOdW1iZXIsdmFsdWU6NTAsb2JzZXJ2ZXI6Il9wYWdlU2l6ZUNoYW5nZWQifSxkYXRhUHJvdmlkZXI6e3R5cGU6T2JqZWN0LG5vdGlmeTohMCxvYnNlcnZlcjoiX2RhdGFQcm92aWRlckNoYW5nZWQifSxfbG9hZGluZzpCb29sZWFuLF9jYWNoZTp7dHlwZTpPYmplY3QsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm57fX19LF9wZW5kaW5nUmVxdWVzdHM6e3R5cGU6T2JqZWN0LHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJue319fX0sX3RlbXBsYXRlSXRlbUNoYW5nZWQ6ZnVuY3Rpb24oYSl7dmFyIGM9YS5kZXRhaWwuaXRlbTtBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKFBvbHltZXIuZG9tKHRoaXMuJC5pdGVtcykuY2hpbGRyZW4sZnVuY3Rpb24oZCl7ZC5pdGVtPT09YyYmZC5pdGVyYXRlQ2VsbHMoZnVuY3Rpb24oZil7Zi5fdGVtcGxhdGl6ZXIuX3N1cHByZXNzSXRlbUNoYW5nZUV2ZW50PQohMDtmLmluc3RhbmNlLm5vdGlmeVBhdGgoIml0ZW0uIithLmRldGFpbC5wYXRoLGEuZGV0YWlsLnZhbHVlKTtmLl90ZW1wbGF0aXplci5fc3VwcHJlc3NJdGVtQ2hhbmdlRXZlbnQ9ITF9KX0pfSxfZ2V0Q2FjaGVkSXRlbTpmdW5jdGlvbihhKXt2YXIgYz10aGlzLl9nZXRQYWdlRm9ySW5kZXgoYSksZD10aGlzLl9jYWNoZSYmdGhpcy5fY2FjaGVbY107cmV0dXJuIGQ/ZFthLWMqdGhpcy5wYWdlU2l6ZV06bnVsbH0sX2dldEl0ZW06ZnVuY3Rpb24oYSxjKXt0aGlzLl91cGRhdGVJdGVtKGMsdGhpcy5fZ2V0Q2FjaGVkSXRlbShhKSk7dGhpcy5fZWFnZXJseUxvYWRQYWdlcygpO3ZhciBkPXRoaXMuX3VuY2FjaGVkUGFnZXNGb3JQaHlzaWNhbEl0ZW1zKCk7MDxkLmxlbmd0aCYmKHRoaXMuX2xvYWRpbmc9ITAsdGhpcy5kZWJvdW5jZSgibG9hZCIsZnVuY3Rpb24oKXtkLmZvckVhY2goZnVuY3Rpb24oZil7dGhpcy5fbG9hZFBhZ2UoZil9LmJpbmQodGhpcykpfSwxMDApKX0sX2NhY2hlZFBhZ2VzRm9yUGh5c2ljYWxJdGVtczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wYWdlc0ZvclBoeXNpY2FsSXRlbXMoKS5maWx0ZXIoZnVuY3Rpb24oYSl7cmV0dXJuIHZvaWQgMCE9PQp0aGlzLl9jYWNoZSYmdm9pZCAwIT09dGhpcy5fY2FjaGVbYV19LmJpbmQodGhpcykpfSxfdW5jYWNoZWRQYWdlc0ZvclBoeXNpY2FsSXRlbXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcGFnZXNGb3JQaHlzaWNhbEl0ZW1zKCkuZmlsdGVyKGZ1bmN0aW9uKGEpe3JldHVybiB2b2lkIDAhPT10aGlzLl9jYWNoZSYmdm9pZCAwPT09dGhpcy5fY2FjaGVbYV19LmJpbmQodGhpcykpfSxfZWFnZXJseUxvYWRQYWdlczpmdW5jdGlvbigpe3ZhciBhPXRoaXMuX2NhY2hlZFBhZ2VzRm9yUGh5c2ljYWxJdGVtcygpLnNsaWNlKDApO2lmKDA8YS5sZW5ndGgpe2Euc29ydChmdW5jdGlvbihkLGYpe3JldHVybiBkPmZ9KTt2YXIgYz1NYXRoLm1pbihhW2EubGVuZ3RoLTFdKzEsTWF0aC5tYXgoMCxNYXRoLmZsb29yKHRoaXMuc2l6ZS90aGlzLnBhZ2VTaXplKS0xKSk7dGhpcy5fbG9hZFBhZ2UoTWF0aC5tYXgoMCxhWzBdLTEpKTt0aGlzLl9sb2FkUGFnZShjKX19LF9wYWdlc0ZvclBoeXNpY2FsSXRlbXM6ZnVuY3Rpb24oKXtyZXR1cm5bdGhpcy5fZ2V0UGFnZUZvckluZGV4KHRoaXMuJC5zY3JvbGxlci5maXJzdFZpc2libGVJbmRleCsKdGhpcy4kLnNjcm9sbGVyLl92aWR4T2Zmc2V0KV0uY29uY2F0KHRoaXMuJC5zY3JvbGxlci5fcGh5c2ljYWxJdGVtcy5maWx0ZXIoZnVuY3Rpb24oYSl7cmV0dXJuIGEuaW5kZXh9KS5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuX2dldFBhZ2VGb3JJbmRleChhLmluZGV4KX0uYmluZCh0aGlzKSkpLnJlZHVjZShmdW5jdGlvbihhLGMpey0xPT09YS5pbmRleE9mKGMpJiZhLnB1c2goYyk7cmV0dXJuIGF9LFtdKX0sX3VwZGF0ZUl0ZW1zOmZ1bmN0aW9uKGEsYyl7Zm9yKHZhciBkPTA7ZDx0aGlzLnBhZ2VTaXplO2QrKyl7dmFyIGY9dGhpcy4kLnNjcm9sbGVyLl92aXJ0dWFsSW5kZXhUb0l0ZW1bYSp0aGlzLnBhZ2VTaXplK2RdO2YmJih0aGlzLl91cGRhdGVJdGVtKGYsY1tkXSksdGhpcy5kZWJvdW5jZSgidXBkYXRlLWhlaWdodHMiLGZ1bmN0aW9uKCl7dGhpcy4kLnNjcm9sbGVyLl91cGRhdGVNZXRyaWNzKCk7dGhpcy4kLnNjcm9sbGVyLl9wb3NpdGlvbkl0ZW1zKCk7dGhpcy4kLnNjcm9sbGVyLl91cGRhdGVTY3JvbGxlclNpemUoKX0sCjEpKX19LF9sb2FkUGFnZTpmdW5jdGlvbihhLGMpe2M9Y3x8dGhpcy5fdXBkYXRlSXRlbXMuYmluZCh0aGlzKTtpZighdGhpcy5fY2FjaGVbYV0mJiF0aGlzLl9wZW5kaW5nUmVxdWVzdHNbYV0mJnRoaXMuZGF0YVByb3ZpZGVyKXt0aGlzLl9wZW5kaW5nUmVxdWVzdHNbYV09ITA7dmFyIGQ9e3BhZ2U6YSxwYWdlU2l6ZTp0aGlzLnBhZ2VTaXplLHNvcnRPcmRlcnM6dGhpcy5fbWFwU29ydGVycygpLGZpbHRlcnM6dGhpcy5fbWFwRmlsdGVycygpfTt0aGlzLmRhdGFQcm92aWRlcihkLGZ1bmN0aW9uKGYpe3RoaXMuX2NhY2hlW2FdPWY7ZGVsZXRlIHRoaXMuX3BlbmRpbmdSZXF1ZXN0c1thXTtjKGEsZik7dGhpcy5fbG9hZGluZz0wPHRoaXMuX3BlbmRpbmdSZXF1ZXN0cy5sZW5ndGg7dGhpcy5kZWJvdW5jZSgiY2hlY2stc2l6ZSIsdGhpcy5fY2hlY2tTaXplLDJFMyl9LmJpbmQodGhpcykpfX0sX2dldFBhZ2VGb3JJbmRleDpmdW5jdGlvbihhKXtyZXR1cm4gTWF0aC5mbG9vcihhL3RoaXMucGFnZVNpemUpfSwKY2xlYXJDYWNoZTpmdW5jdGlvbigpe3RoaXMuX2NhY2hlPXt9O3RoaXMuX3BlbmRpbmdSZXF1ZXN0cz17fTt0aGlzLiQuc2Nyb2xsZXIuaGFzRGF0YSYmdGhpcy4kLnNjcm9sbGVyLl91cGRhdGUoKTt0aGlzLl9mbHVzaEl0ZW1zRGVib3VuY2VyKCl9LF9mbHVzaEl0ZW1zRGVib3VuY2VyOmZ1bmN0aW9uKCl7dGhpcy5mbHVzaERlYm91bmNlcigibG9hZCIpfSxfcGFnZVNpemVDaGFuZ2VkOmZ1bmN0aW9uKGEsYyl7dm9pZCAwIT09YyYmYSE9PWMmJnRoaXMuY2xlYXJDYWNoZSgpfSxfY2hlY2tTaXplOmZ1bmN0aW9uKCl7dm9pZCAwPT09dGhpcy5zaXplJiZjb25zb2xlLndhcm4oJ1RoZSBceDNjdmFhZGluLWdyaWRceDNlIG5lZWRzIGEgdmFsdWUgZm9yICJzaXplIiBwcm9wZXJ0eSBpbiBvcmRlciB0byBkaXNwbGF5IHJvd3MuJyl9LF9kYXRhUHJvdmlkZXJDaGFuZ2VkOmZ1bmN0aW9uKGEsYyl7dm9pZCAwIT09YyYmdGhpcy5jbGVhckNhY2hlKCk7dGhpcy4kLnNjcm9sbGVyLmhhc0RhdGF8fAoodGhpcy5fbG9hZGluZz0hMCx0aGlzLl9sb2FkUGFnZSgwLGZ1bmN0aW9uKCl7dGhpcy4kLnNjcm9sbGVyLmhhc0RhdGE9ITB9LmJpbmQodGhpcykpKX19Owo8L3NjcmlwdD4KCjxzY3JpcHQ+Ly9+fldFQlBBVEh+fi92YWFkaW4tZ3JpZC92YWFkaW4tZ3JpZC1zZWxlY3Rpb24tYmVoYXZpb3IuaHRtbC5qcwp3aW5kb3cudmFhZGluPXdpbmRvdy52YWFkaW58fHt9O3ZhYWRpbi5lbGVtZW50cz12YWFkaW4uZWxlbWVudHN8fHt9O3ZhYWRpbi5lbGVtZW50cy5ncmlkPXZhYWRpbi5lbGVtZW50cy5ncmlkfHx7fTsKdmFhZGluLmVsZW1lbnRzLmdyaWQuU2VsZWN0aW9uQmVoYXZpb3I9e3Byb3BlcnRpZXM6e3NlbGVjdGVkSXRlbXM6e3R5cGU6T2JqZWN0LG5vdGlmeTohMCx2YWx1ZTpmdW5jdGlvbigpe3JldHVybltdfX19LG9ic2VydmVyczpbIl9zZWxlY3RlZEl0ZW1zQ2hhbmdlZChzZWxlY3RlZEl0ZW1zLiopIl0sbGlzdGVuZXJzOnsidGVtcGxhdGUtaW5zdGFuY2UtY2hhbmdlZCI6Il90ZW1wbGF0ZUluc3RhbmNlQ2hhbmdlZFNlbGVjdGlvbiJ9LF90ZW1wbGF0ZUluc3RhbmNlQ2hhbmdlZFNlbGVjdGlvbjpmdW5jdGlvbihhKXtpZigic2VsZWN0ZWQiPT09YS5kZXRhaWwucHJvcCl7dmFyIGM9YS5kZXRhaWwuaW5zdC5pdGVtOyh0aGlzLl9pc1NlbGVjdGVkKGMpP3RoaXMuZGVzZWxlY3RJdGVtOnRoaXMuc2VsZWN0SXRlbSkuYmluZCh0aGlzKShjKTt0aGlzLmZpcmUoImlyb24tYW5ub3VuY2UiLHt0ZXh0Oih0aGlzLl9pc1NlbGVjdGVkKGMpPyJTZWxlY3RlZCI6IkRlc2VsZWN0ZWQiKSsiIFJvdyAiKwooYS5kZXRhaWwuaW5zdC5pbmRleCsxKSsiIG9mICIrdGhpcy5zaXplfSk7YS5zdG9wUHJvcGFnYXRpb24oKX19LF9pc1NlbGVjdGVkOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnNlbGVjdGVkSXRlbXMmJi0xPHRoaXMuc2VsZWN0ZWRJdGVtcy5pbmRleE9mKGEpfSxzZWxlY3RJdGVtOmZ1bmN0aW9uKGEpe2E9dGhpcy5fdGFrZUl0ZW0oYSk7dGhpcy5faXNTZWxlY3RlZChhKXx8dGhpcy5wdXNoKCJzZWxlY3RlZEl0ZW1zIixhKX0sZGVzZWxlY3RJdGVtOmZ1bmN0aW9uKGEpe2E9dGhpcy5fdGFrZUl0ZW0oYSk7YT10aGlzLnNlbGVjdGVkSXRlbXMuaW5kZXhPZihhKTstMTxhJiZ0aGlzLnNwbGljZSgic2VsZWN0ZWRJdGVtcyIsYSwxKX0sX3RvZ2dsZUl0ZW06ZnVuY3Rpb24oYSl7YT10aGlzLl90YWtlSXRlbShhKTstMT09PXRoaXMuc2VsZWN0ZWRJdGVtcy5pbmRleE9mKGEpP3RoaXMuc2VsZWN0SXRlbShhKTp0aGlzLmRlc2VsZWN0SXRlbShhKX0sX3Rha2VJdGVtOmZ1bmN0aW9uKGEpe3JldHVybiJudW1iZXIiPT09CnR5cGVvZiBhJiYwPD1hJiZ0aGlzLml0ZW1zJiZ0aGlzLml0ZW1zLmxlbmd0aD5hP3RoaXMuaXRlbXNbYV06YX0sX3NlbGVjdGVkSXRlbXNDaGFuZ2VkOmZ1bmN0aW9uKGEpeyF0aGlzLiQuc2Nyb2xsZXIuX3BoeXNpY2FsSXRlbXN8fCJzZWxlY3RlZEl0ZW1zIiE9PWEucGF0aCYmInNlbGVjdGVkSXRlbXMuc3BsaWNlcyIhPT1hLnBhdGh8fHRoaXMuJC5zY3JvbGxlci5fcGh5c2ljYWxJdGVtcy5mb3JFYWNoKGZ1bmN0aW9uKGMpe2Muc2VsZWN0ZWQ9dGhpcy5faXNTZWxlY3RlZChjLml0ZW0pfS5iaW5kKHRoaXMpKX19Owo8L3NjcmlwdD4KCjxkb20tbW9kdWxlIGlkPSJ2YWFkaW4tZ3JpZC1zZWxlY3Rpb24tdGhlbWFiaWxpdHktc3R5bGVzIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIHZhYWRpbi1ncmlkLXRhYmxlIC52YWFkaW4tZ3JpZC1yb3dbc2VsZWN0ZWRdIC52YWFkaW4tZ3JpZC1jZWxsOm5vdChbZGV0YWlsc2NlbGxdKSA6OnNsb3R0ZWQodmFhZGluLWdyaWQtY2VsbC1jb250ZW50KSB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItZ3JleS0xMDAsIHJnYigyNDMsIDI0MywgMjQzKSk7CiAgICAgICAgQGFwcGx5KC0tdmFhZGluLWdyaWQtYm9keS1yb3ctc2VsZWN0ZWQtY2VsbCk7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPgoKCgoKPGRvbS1tb2R1bGUgaWQ9InZhYWRpbi1ncmlkLW5hdmlnYXRpb24tdGhlbWFiaWxpdHktc3R5bGVzIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0KDpmb2N1cyksCiAgICAgICN0YWJsZTpmb2N1cyB7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgfQoKICAgICAgOmhvc3QoW25hdmlnYXRpbmddOm5vdChbaW50ZXJhY3RpbmddKSkgW2ZvY3VzZWRdID4gLnZhYWRpbi1ncmlkLXJvd1tmb2N1c2VkXSA+IFtmb2N1c2VkXSA6OnNsb3R0ZWQodmFhZGluLWdyaWQtY2VsbC1jb250ZW50KSB7CiAgICAgICAgYm94LXNoYWRvdzogaW5zZXQgMCAwIDAgM3B4IHJnYmEoMCwgMCwgMCwgMC4zKTsKICAgICAgICBAYXBwbHkoLS12YWFkaW4tZ3JpZC1mb2N1c2VkLWNlbGwpOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT4KCjxzY3JpcHQ+Ly9+fldFQlBBVEh+fi92YWFkaW4tZ3JpZC92YWFkaW4tZ3JpZC1rZXlib2FyZC1uYXZpZ2F0aW9uLWJlaGF2aW9yLmh0bWwuanMKd2luZG93LnZhYWRpbj13aW5kb3cudmFhZGlufHx7fTt2YWFkaW4uZWxlbWVudHM9dmFhZGluLmVsZW1lbnRzfHx7fTt2YWFkaW4uZWxlbWVudHMuZ3JpZD12YWFkaW4uZWxlbWVudHMuZ3JpZHx8e307CnZhYWRpbi5lbGVtZW50cy5ncmlkLlRhYmxlS2V5Ym9hcmRCZWhhdmlvckltcGw9e2hvc3RBdHRyaWJ1dGVzOntyb2xlOiJhcHBsaWNhdGlvbiIsdGFiaW5kZXg6MH0sa2V5QmluZGluZ3M6eyJjdHJsK2hvbWUiOiJfb25DdHJsSG9tZSIsImN0cmwrZW5kIjoiX29uQ3RybEVuZCIsZG93bjoiX29uQXJyb3dEb3duIixlbmQ6Il9vbkVuZCIsZW50ZXI6Il9vbkVudGVyIixlc2M6Il9vbkVzY2FwZSIsZjI6Il9vbkYyIixob21lOiJfb25Ib21lIixsZWZ0OiJfb25BcnJvd0xlZnQiLHBhZ2Vkb3duOiJfb25QYWdlRG93biIscGFnZXVwOiJfb25QYWdlVXAiLHJpZ2h0OiJfb25BcnJvd1JpZ2h0IixzcGFjZToiX29uU3BhY2UiLHRhYjoiX29uVGFiIix1cDoiX29uQXJyb3dVcCJ9LGF0dGFjaGVkOmZ1bmN0aW9uKCl7UG9seW1lci5Jcm9uQTExeUFubm91bmNlci5yZXF1ZXN0QXZhaWxhYmlsaXR5KCl9LHByb3BlcnRpZXM6e192aXJ0dWFsRm9jdXM6e3R5cGU6T2JqZWN0LG9ic2VydmVyOiJfdmlydHVhbEZvY3VzQ2hhbmdlZCJ9LAppbnRlcmFjdGluZzp7dHlwZTpCb29sZWFuLHJlZmxlY3RUb0F0dHJpYnV0ZTohMCx2YWx1ZTohMX0sbmF2aWdhdGluZzp7dHlwZTpCb29sZWFuLHJlZmxlY3RUb0F0dHJpYnV0ZTohMCx2YWx1ZTohMX19LGxpc3RlbmVyczp7Zm9jdXM6Il9vbkZvY3VzIiwiY2VsbC1mb2N1cyI6Il9vbkNlbGxGb2N1cyIsImNlbGwtY29udGVudC1mb2N1cyI6Il9vbkNlbGxDb250ZW50Rm9jdXMifSxyZWFkeTpmdW5jdGlvbigpe2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLGZ1bmN0aW9uKGEpezk9PT1hLmtleUNvZGUmJih0aGlzLl90YWJiZWQ9ITApOzk9PT1hLmtleUNvZGUmJmEuc2hpZnRLZXkmJih0aGlzLl9zaGlmdFRhYmJlZD0hMCl9LmJpbmQodGhpcyksITApO2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImtleXVwIixmdW5jdGlvbihhKXs5PT09YS5rZXlDb2RlJiYodGhpcy5fdGFiYmVkPSExKTs5PT09YS5rZXlDb2RlJiZhLnNoaWZ0S2V5JiYodGhpcy5fc2hpZnRUYWJiZWQ9CiExKX0uYmluZCh0aGlzKSwhMCl9LF9pc0Zvb3RlclZpc2libGU6ZnVuY3Rpb24oKXtyZXR1cm4gMDx0aGlzLiQuZm9vdGVyLl9yb3dzLmZpbHRlcihmdW5jdGlvbihhKXtyZXR1cm4hYS5oaWRkZW59KS5sZW5ndGh9LF9vbkZvY3VzOmZ1bmN0aW9uKCl7dGhpcy5fdGFiYmVkJiYhdGhpcy5fc2hpZnRUYWJiZWQmJnRoaXMuX2FjdGl2YXRlTmF2aWdhdGlvbigpfSxfYWN0aXZhdGVOYXZpZ2F0aW9uOmZ1bmN0aW9uKCl7dGhpcy4kLmZvb3RlckZvY3VzVHJhcC5mb2N1cygpfSxfb25Gb2N1c291dDpmdW5jdGlvbigpe3RoaXMuaW50ZXJhY3Rpbmc9dGhpcy5uYXZpZ2F0aW5nPSExfSxfb25Gb290ZXJGb2N1czpmdW5jdGlvbigpe3RoaXMubmF2aWdhdGluZz0hMDt0aGlzLmludGVyYWN0aW5nPSExO3RoaXMuX3ZpcnR1YWxGb2N1cz10aGlzLl92aXJ0dWFsRm9jdXN8fCh0aGlzLl9zaGlmdFRhYmJlZD90aGlzLl9pc0Zvb3RlclZpc2libGUoKT90aGlzLiQuZm9vdGVyOnRoaXMuJC5pdGVtczoKdGhpcy4kLmhlYWRlcil9LF92aXJ0dWFsRm9jdXNDaGFuZ2VkOmZ1bmN0aW9uKGEsYyl7YyYmKGMuZm9jdXNlZD0hMSk7YSYmKGEuX2ZvY3VzZWRDZWxsSW5kZXg9YS5fZm9jdXNlZENlbGxJbmRleHx8MCxhLl9mb2N1c2VkUm93SW5kZXg9YS5fZm9jdXNlZFJvd0luZGV4fHwwLGEuZm9jdXNlZD0hMCxhPT09dGhpcy4kLml0ZW1zJiZ0aGlzLl9lbnN1cmVWaXJ0dWFsRm9jdXNJblZpZXdwb3J0KCkpfSxfb25UYWI6ZnVuY3Rpb24oYSl7aWYoIXRoaXMuaW50ZXJhY3RpbmcmJnRoaXMuX3ZpcnR1YWxGb2N1cylpZih0aGlzLm5hdmlnYXRpbmcpaWYoYS5kZXRhaWwua2V5Ym9hcmRFdmVudC5zaGlmdEtleSlzd2l0Y2godGhpcy5fdmlydHVhbEZvY3VzKXtjYXNlIHRoaXMuJC5mb290ZXI6dGhpcy5fdmlydHVhbEZvY3VzPXRoaXMuJC5pdGVtczthLnByZXZlbnREZWZhdWx0KCk7YnJlYWs7Y2FzZSB0aGlzLiQuaXRlbXM6dGhpcy5fdmlydHVhbEZvY3VzPXRoaXMuJC5oZWFkZXI7YS5wcmV2ZW50RGVmYXVsdCgpOwpicmVhaztjYXNlIHRoaXMuJC5oZWFkZXI6dGhpcy5mb2N1cygpLHRoaXMuX3ZpcnR1YWxGb2N1cz1udWxsfWVsc2Ugc3dpdGNoKHRoaXMuX3ZpcnR1YWxGb2N1cyl7Y2FzZSB0aGlzLiQuaGVhZGVyOnRoaXMuX3ZpcnR1YWxGb2N1cz10aGlzLiQuaXRlbXM7YS5wcmV2ZW50RGVmYXVsdCgpO2JyZWFrO2Nhc2UgdGhpcy4kLml0ZW1zOnRoaXMuX2lzRm9vdGVyVmlzaWJsZSgpPyh0aGlzLl92aXJ0dWFsRm9jdXM9dGhpcy4kLmZvb3RlcixhLnByZXZlbnREZWZhdWx0KCkpOnRoaXMuYXN5bmMoZnVuY3Rpb24oKXt0aGlzLl92aXJ0dWFsRm9jdXM9bnVsbH0sMSk7YnJlYWs7Y2FzZSB0aGlzLiQuZm9vdGVyOnRoaXMuX3ZpcnR1YWxGb2N1cz1udWxsfWVsc2UgdGhpcy5fYWN0aXZhdGVOYXZpZ2F0aW9uKCksYS5wcmV2ZW50RGVmYXVsdCgpfSxfaXNBYm92ZVZpZXdwb3J0OmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmZpcnN0VmlzaWJsZUluZGV4PmF9LF9vbkFycm93RG93bjpmdW5jdGlvbihhKXt0aGlzLmludGVyYWN0aW5nfHwKKGEucHJldmVudERlZmF1bHQoKSx0aGlzLm5hdmlnYXRpbmc9ITAsdGhpcy5fdmlydHVhbEZvY3VzLmZvY3VzRG93bigpLHRoaXMuX2Vuc3VyZVZpcnR1YWxGb2N1c0luVmlld3BvcnQoKSl9LF9zY3JvbGxQYWdlRG93bjpmdW5jdGlvbigpe3ZhciBhPXRoaXMuJC5oZWFkZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksYz10aGlzLiQuZm9vdGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3RoaXMuJC5zY3JvbGxlci4kLnRhYmxlLnNjcm9sbFRvcCs9Yy50b3AtYS5ib3R0b207dGhpcy4kLnNjcm9sbGVyLl9zY3JvbGxIYW5kbGVyKCl9LF9vblBhZ2VEb3duOmZ1bmN0aW9uKGEpe3RoaXMuaW50ZXJhY3Rpbmd8fChhLnByZXZlbnREZWZhdWx0KCksdGhpcy5uYXZpZ2F0aW5nPSEwLHRoaXMuX3ZpcnR1YWxGb2N1cz09PXRoaXMuJC5pdGVtcz8oYT10aGlzLiQuc2Nyb2xsZXIubGFzdFZpc2libGVJbmRleCx0aGlzLl9zY3JvbGxQYWdlRG93bigpLHRoaXMuX3ZpcnR1YWxGb2N1cy5fZm9jdXNlZFJvd0luZGV4Kz0KdGhpcy4kLnNjcm9sbGVyLmxhc3RWaXNpYmxlSW5kZXgtYXx8dGhpcy4kLnNjcm9sbGVyLmxhc3RWaXNpYmxlSW5kZXgtdGhpcy5fdmlydHVhbEZvY3VzLl9mb2N1c2VkUm93SW5kZXgsdGhpcy5fZW5zdXJlVmlydHVhbEZvY3VzSW5WaWV3cG9ydCgpKTp0aGlzLl92aXJ0dWFsRm9jdXMuZm9jdXNQYWdlRG93bigpKX0sX3Njcm9sbFBhZ2VVcDpmdW5jdGlvbigpe3ZhciBhPXRoaXMuJC5oZWFkZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksYz10aGlzLiQuZm9vdGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3RoaXMuJC5zY3JvbGxlci4kLnRhYmxlLnNjcm9sbFRvcC09Yy50b3AtYS5ib3R0b207dGhpcy4kLnNjcm9sbGVyLl9zY3JvbGxIYW5kbGVyKCl9LF9vblBhZ2VVcDpmdW5jdGlvbihhKXt0aGlzLmludGVyYWN0aW5nfHwoYS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMubmF2aWdhdGluZz0hMCx0aGlzLl92aXJ0dWFsRm9jdXM9PT10aGlzLiQuaXRlbXM/KGE9dGhpcy4kLnNjcm9sbGVyLmxhc3RWaXNpYmxlSW5kZXgsCnRoaXMuX3Njcm9sbFBhZ2VVcCgpLHRoaXMuX3ZpcnR1YWxGb2N1cy5fZm9jdXNlZFJvd0luZGV4LT1hLXRoaXMuJC5zY3JvbGxlci5sYXN0VmlzaWJsZUluZGV4fHx0aGlzLl92aXJ0dWFsRm9jdXMuX2ZvY3VzZWRSb3dJbmRleCx0aGlzLl9lbnN1cmVWaXJ0dWFsRm9jdXNJblZpZXdwb3J0KCkpOnRoaXMuX3ZpcnR1YWxGb2N1cy5mb2N1c1BhZ2VVcCgpKX0sX29uQXJyb3dVcDpmdW5jdGlvbihhKXt0aGlzLmludGVyYWN0aW5nfHwoYS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMubmF2aWdhdGluZz0hMCx0aGlzLl92aXJ0dWFsRm9jdXMuZm9jdXNVcCgpLHRoaXMuX2Vuc3VyZVZpcnR1YWxGb2N1c0luVmlld3BvcnQoKSl9LF9vbkFycm93UmlnaHQ6ZnVuY3Rpb24oYSl7dGhpcy5pbnRlcmFjdGluZ3x8KGEucHJldmVudERlZmF1bHQoKSx0aGlzLm5hdmlnYXRpbmc9ITAsdGhpcy5fdmlydHVhbEZvY3VzLmZvY3VzUmlnaHQoKSx0aGlzLl9lbnN1cmVWaXJ0dWFsRm9jdXNJblZpZXdwb3J0KCkpfSwKX29uQXJyb3dMZWZ0OmZ1bmN0aW9uKGEpe3RoaXMuaW50ZXJhY3Rpbmd8fChhLnByZXZlbnREZWZhdWx0KCksdGhpcy5uYXZpZ2F0aW5nPSEwLHRoaXMuX3ZpcnR1YWxGb2N1cy5mb2N1c0xlZnQoKSx0aGlzLl9lbnN1cmVWaXJ0dWFsRm9jdXNJblZpZXdwb3J0KCkpfSxfb25Ib21lOmZ1bmN0aW9uKGEpe3RoaXMuaW50ZXJhY3Rpbmd8fChhLnByZXZlbnREZWZhdWx0KCksdGhpcy5uYXZpZ2F0aW5nPSEwLHRoaXMuX3ZpcnR1YWxGb2N1cy5mb2N1c0hvbWUoKSx0aGlzLl9lbnN1cmVWaXJ0dWFsRm9jdXNJblZpZXdwb3J0KCkpfSxfb25FbmQ6ZnVuY3Rpb24oYSl7dGhpcy5pbnRlcmFjdGluZ3x8KGEucHJldmVudERlZmF1bHQoKSx0aGlzLm5hdmlnYXRpbmc9ITAsdGhpcy5fdmlydHVhbEZvY3VzLmZvY3VzRW5kKCksdGhpcy5fZW5zdXJlVmlydHVhbEZvY3VzSW5WaWV3cG9ydCgpKX0sX21vdmVGb2N1c1RvRm9jdXNUYXJnZXQ6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLl92aXJ0dWFsRm9jdXMuX2ZvY3VzZWRDZWxsLl9jZWxsQ29udGVudDsKKGE9YS5xdWVyeVNlbGVjdG9yKCJbZm9jdXMtdGFyZ2V0XSIpfHxhLmZpcnN0RWxlbWVudENoaWxkKSYmYS5mb2N1cygpfSxfb25FbnRlcjpmdW5jdGlvbihhKXt0aGlzLmludGVyYWN0aW5nPyJpbnB1dCI9PT1hLmRldGFpbC5rZXlib2FyZEV2ZW50LnRhcmdldC5sb2NhbE5hbWUmJiJ0ZXh0Ij09PWEuZGV0YWlsLmtleWJvYXJkRXZlbnQudGFyZ2V0LnR5cGUmJnRoaXMuJC5mb290ZXJGb2N1c1RyYXAuZm9jdXMoKTooYS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX21vdmVGb2N1c1RvRm9jdXNUYXJnZXQoKSl9LF9vbkVzY2FwZTpmdW5jdGlvbigpe3RoaXMuaW50ZXJhY3Rpbmc/dGhpcy4kLmZvb3RlckZvY3VzVHJhcC5mb2N1cygpOnRoaXMubmF2aWdhdGluZyYmKHRoaXMubmF2aWdhdGluZz0hMSl9LF9vbkYyOmZ1bmN0aW9uKGEpe2EucHJldmVudERlZmF1bHQoKTt0aGlzLmludGVyYWN0aW5nP3RoaXMuJC5mb290ZXJGb2N1c1RyYXAuZm9jdXMoKTp0aGlzLl9tb3ZlRm9jdXNUb0ZvY3VzVGFyZ2V0KCl9LApfb25DdHJsSG9tZTpmdW5jdGlvbihhKXt0aGlzLmludGVyYWN0aW5nfHwoYS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMubmF2aWdhdGluZz0hMCx0aGlzLl92aXJ0dWFsRm9jdXMuZm9jdXNGaXJzdCgpLHRoaXMuX2Vuc3VyZVZpcnR1YWxGb2N1c0luVmlld3BvcnQoKSl9LF9vbkN0cmxFbmQ6ZnVuY3Rpb24oYSl7dGhpcy5pbnRlcmFjdGluZ3x8KGEucHJldmVudERlZmF1bHQoKSx0aGlzLm5hdmlnYXRpbmc9ITAsdGhpcy5fdmlydHVhbEZvY3VzLmZvY3VzTGFzdCgpLHRoaXMuX2Vuc3VyZVZpcnR1YWxGb2N1c0luVmlld3BvcnQoKSl9LF9vblNwYWNlOmZ1bmN0aW9uKGEpe2lmKCF0aGlzLmludGVyYWN0aW5nKXthLnByZXZlbnREZWZhdWx0KCk7YT10aGlzLl92aXJ0dWFsRm9jdXMuX2ZvY3VzZWRDZWxsO3ZhciBjPWEuZ2V0Q29udGVudENoaWxkcmVuKFBvbHltZXIuRWxlbWVudD8ic2xvdCI6ImNvbnRlbnQiKVswXS5maXJzdEVsZW1lbnRDaGlsZDtjP2MuY2xpY2soKTp0aGlzLm5hdmlnYXRpbmcmJgp0aGlzLmZpcmUoImNlbGwtYWN0aXZhdGUiLHttb2RlbDphLmluc3RhbmNlfSl9fSxfb25DZWxsQ29udGVudEZvY3VzOmZ1bmN0aW9uKGEpe3RoaXMuaW50ZXJhY3Rpbmc9ITA7dGhpcy5fb25DZWxsRm9jdXMoYSl9LF9vbkNlbGxGb2N1czpmdW5jdGlvbihhKXthPWEuZGV0YWlsLmNlbGw7dmFyIGM9YS5wYXJlbnRFbGVtZW50LGQ9Yy5wYXJlbnRFbGVtZW50LGY9QXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbChQb2x5bWVyLmRvbShkKS5jaGlsZHJlbixjKTtkPT09dGhpcy4kLml0ZW1zJiYoZj1jLmluZGV4KTtkLl9mb2N1c2VkUm93SW5kZXg9ZjtkLl9mb2N1c2VkQ2VsbEluZGV4PUFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwoUG9seW1lci5kb20oYykuY2hpbGRyZW4sYSk7dGhpcy5fdmlydHVhbEZvY3VzPWQ7YS5oYXNBdHRyaWJ1dGUoImRldGFpbHNjZWxsIikmJihkLl9mb2N1c2VkQ2VsbEluZGV4PTAsZC5fbW92ZUZvY3VzVG9EZXRhaWxzQ2VsbCgpKX0sX2Vuc3VyZVZpcnR1YWxGb2N1c0luVmlld3BvcnQ6ZnVuY3Rpb24oKXt2YXIgYT0KdGhpcy4kLnNjcm9sbGVyLl92aWR4T2Zmc2V0K3RoaXMuJC5zY3JvbGxlci5fdmlydHVhbFN0YXJ0LGM9dGhpcy5fdmlydHVhbEZvY3VzLl9mb2N1c2VkUm93SW5kZXg7dGhpcy5fdmlydHVhbEZvY3VzPT09dGhpcy4kLml0ZW1zJiYoYzxhfHxjPmErdGhpcy4kLnNjcm9sbGVyLl9waHlzaWNhbENvdW50KSYmKHRoaXMuJC5zY3JvbGxlci5zY3JvbGxUb1NjYWxlZEluZGV4KGMpLHRoaXMuX3ZpcnR1YWxGb2N1cy5fZm9jdXNlZENlbGxDaGFuZ2VkKGMsdGhpcy5fdmlydHVhbEZvY3VzLl9mb2N1c2VkQ2VsbEluZGV4KSk7dGhpcy5fZW5zdXJlRWxlbWVudEluVmlld3BvcnQodGhpcy5fdmlydHVhbEZvY3VzLl9mb2N1c2VkQ2VsbCl9LF9lbnN1cmVFbGVtZW50SW5WaWV3cG9ydDpmdW5jdGlvbihhKXt2YXIgYz1hLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2lmKHRoaXMuX3ZpcnR1YWxGb2N1cz09PXRoaXMuJC5pdGVtcyl7dmFyIGQ9dGhpcy4kLmZvb3Rlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AsCmY9dGhpcy4kLmhlYWRlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5ib3R0b207Yy5ib3R0b20+ZD90aGlzLiQuc2Nyb2xsZXIuJC50YWJsZS5zY3JvbGxUb3ArPWMuYm90dG9tLWQ6Yy50b3A8ZiYmKHRoaXMuJC5zY3JvbGxlci4kLnRhYmxlLnNjcm9sbFRvcCs9Yy50b3AtZil9aWYoIWEuaGFzQXR0cmlidXRlKCJkZXRhaWxzY2VsbCIpKXthPXRoaXMuJC5zY3JvbGxlci4kLnRhYmxlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnJpZ2h0O2Q9dGhpcy4kLnNjcm9sbGVyLiQudGFibGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdDtpZihmPXRoaXMuX3ZpcnR1YWxGb2N1cy5fZm9jdXNlZFJvdy5xdWVyeVNlbGVjdG9yKCJbbGFzdC1mcm96ZW5dIikpZD1mLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnJpZ2h0O2MucmlnaHQ+YT90aGlzLiQuc2Nyb2xsZXIuJC50YWJsZS5zY3JvbGxMZWZ0Kz1jLnJpZ2h0LWE6Yy5sZWZ0PGQmJih0aGlzLiQuc2Nyb2xsZXIuJC50YWJsZS5zY3JvbGxMZWZ0Kz0KYy5sZWZ0LWQpfX19O3ZhYWRpbi5lbGVtZW50cy5ncmlkLlRhYmxlS2V5Ym9hcmRCZWhhdmlvcj1bdmFhZGluLmVsZW1lbnRzLmdyaWQuVGFibGVLZXlib2FyZEJlaGF2aW9ySW1wbCxQb2x5bWVyLklyb25BMTF5S2V5c0JlaGF2aW9yXTsKPC9zY3JpcHQ+Cgo8ZG9tLW1vZHVsZSBpZD0idmFhZGluLWdyaWQtY29sdW1uLXJlb3JkZXJpbmctdGhlbWFiaWxpdHktc3R5bGVzIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIHZhYWRpbi1ncmlkLXRhYmxlW3Jlb3JkZXJpbmddIC52YWFkaW4tZ3JpZC1jZWxsIHsKICAgICAgICBiYWNrZ3JvdW5kOiAjMDAwOwogICAgICB9CgogICAgICA6aG9zdChbcmVvcmRlcmluZ10pIC52YWFkaW4tZ3JpZC1jZWxsW3Jlb3JkZXItc3RhdHVzPSJkcmFnZ2luZyJdIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1wcmltYXJ5LWNvbG9yLCAjMDAwKTsKICAgICAgfQoKICAgICAgdmFhZGluLWdyaWQtdGFibGVbcmVvcmRlcmluZ10gLnZhYWRpbi1ncmlkLWNlbGw6bm90KFtkZXRhaWxzY2VsbF0pIDo6c2xvdHRlZCh2YWFkaW4tZ3JpZC1jZWxsLWNvbnRlbnQpIHsKICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDMwMG1zOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWigwKTsKICAgICAgICBvcGFjaXR5OiAwLjg7CiAgICAgIH0KCiAgICAgICNzY3JvbGxlciAudmFhZGluLWdyaWQtY2VsbFtyZW9yZGVyLXN0YXR1cz0iYWxsb3dlZCJdIDo6c2xvdHRlZCh2YWFkaW4tZ3JpZC1jZWxsLWNvbnRlbnQpIHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CgogICAgICAjc2Nyb2xsZXIgLnZhYWRpbi1ncmlkLWNlbGxbcmVvcmRlci1zdGF0dXM9ImRyYWdnaW5nIl0gewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXByaW1hcnktY29sb3IsICMwMDApOwogICAgICB9CgogICAgICAjc2Nyb2xsZXIgLnZhYWRpbi1ncmlkLWNlbGxbcmVvcmRlci1zdGF0dXM9ImRyYWdnaW5nIl0gOjpzbG90dGVkKHZhYWRpbi1ncmlkLWNlbGwtY29udGVudCkgewogICAgICAgIG9wYWNpdHk6IDAuOTU7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPgoKPHNjcmlwdD4vL35+V0VCUEFUSH5+L3ZhYWRpbi1ncmlkL3ZhYWRpbi1ncmlkLWNvbHVtbi1yZW9yZGVyaW5nLWJlaGF2aW9yLmh0bWwuanMKd2luZG93LnZhYWRpbj13aW5kb3cudmFhZGlufHx7fTt2YWFkaW4uZWxlbWVudHM9dmFhZGluLmVsZW1lbnRzfHx7fTt2YWFkaW4uZWxlbWVudHMuZ3JpZD12YWFkaW4uZWxlbWVudHMuZ3JpZHx8e307dmFhZGluLmVsZW1lbnRzLmdyaWQuQ29sdW1uUmVvcmRlcmluZ0JlaGF2aW9yPXtwcm9wZXJ0aWVzOntjb2x1bW5SZW9yZGVyaW5nQWxsb3dlZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfX19Owp2YWFkaW4uZWxlbWVudHMuZ3JpZC5UYWJsZUNvbHVtblJlb3JkZXJpbmdCZWhhdmlvcj17cHJvcGVydGllczp7X29yZGVyQmFzZVNjb3BlOnt0eXBlOk51bWJlcix2YWx1ZToxRTd9fSxsaXN0ZW5lcnM6e2RyYWdzdGFydDoiX29uRHJhZ1N0YXJ0IixkcmFnb3ZlcjoiX29uRHJhZ092ZXIiLGRyYWdlbmQ6Il9vbkRyYWdFbmQifSxvYnNlcnZlcnM6WyJfdXBkYXRlT3JkZXJzKGNvbHVtblRyZWUsIGNvbHVtblRyZWUuKikiXSxfdXBkYXRlT3JkZXJzOmZ1bmN0aW9uKGEsYyl7dm9pZCAwIT09YSYmdm9pZCAwIT09YyYmYVswXS5mb3JFYWNoKGZ1bmN0aW9uKGQsZil7ZC5fb3JkZXI9KGYrMSkqdGhpcy5fb3JkZXJCYXNlU2NvcGV9LHRoaXMpfSxfb25EcmFnU3RhcnQ6ZnVuY3Rpb24oYSl7aWYoInZhYWRpbi1ncmlkLWNlbGwtY29udGVudCI9PT1hLnRhcmdldC5sb2NhbE5hbWUpe3ZhciBjPXRoaXMuX2dldENlbGxCeUNlbGxDb250ZW50KGEudGFyZ2V0KTtjJiYodGhpcy50b2dnbGVBdHRyaWJ1dGUoInJlb3JkZXJpbmciLAohMCksdGhpcy5fZHJhZ2dlZENvbHVtbj1jLmNvbHVtbix0aGlzLl9zZXRTaWJsaW5nc1Jlb3JkZXJTdGF0dXModGhpcy5fZHJhZ2dlZENvbHVtbiwiYWxsb3dlZCIpLHRoaXMuX2RyYWdnZWRDb2x1bW4uX3Jlb3JkZXJTdGF0dXM9ImRyYWdnaW5nIixhLmRhdGFUcmFuc2ZlciYmKGEuZGF0YVRyYW5zZmVyLnNldERhdGEoInRleHQiLCIiKSxhLmRhdGFUcmFuc2Zlci5lZmZlY3RBbGxvd2VkPSJtb3ZlIiksdGhpcy5fYXV0b1Njcm9sbGVyKCkpfX0sX3NldFNpYmxpbmdzUmVvcmRlclN0YXR1czpmdW5jdGlvbihhLGMpe0FycmF5LnByb3RvdHlwZS5maWx0ZXIuY2FsbChQb2x5bWVyLmRvbShQb2x5bWVyLmRvbShhKS5wYXJlbnROb2RlKS5jaGlsZHJlbixmdW5jdGlvbihkKXtyZXR1cm4vY29sdW1uLy50ZXN0KGQubG9jYWxOYW1lKSYmdGhpcy5faXNTd2FwQWxsb3dlZChkLGEpfSx0aGlzKS5mb3JFYWNoKGZ1bmN0aW9uKGQpe2QuX3Jlb3JkZXJTdGF0dXM9Y30pfSxfb25EcmFnT3ZlcjpmdW5jdGlvbihhKXtpZih0aGlzLl9kcmFnZ2VkQ29sdW1uKXt2YXIgYz0KKFBvbHltZXIuRWxlbWVudD9hLmNvbXBvc2VkUGF0aCgpOlBvbHltZXIuZG9tKGEpLnBhdGgpLmZpbHRlcihmdW5jdGlvbihkKXtyZXR1cm4idmFhZGluLWdyaWQtY2VsbC1jb250ZW50Ij09PWQubG9jYWxOYW1lfSlbMF07YyYmKGEucHJldmVudERlZmF1bHQoKSxjPXRoaXMuX2dldENlbGxCeUNlbGxDb250ZW50KGMpLChjPXRoaXMuX2dldFRhcmdldENvbHVtbihjLHRoaXMuX2RyYWdnZWRDb2x1bW4pKSYmdGhpcy5faXNTd2FwQWxsb3dlZCh0aGlzLl9kcmFnZ2VkQ29sdW1uLGMpJiZ0aGlzLl9pc1N3YXBwYWJsZUJ5UG9zaXRpb24oYyxhLmNsaWVudFgpJiZ0aGlzLl9zd2FwQ29sdW1uT3JkZXJzKHRoaXMuX2RyYWdnZWRDb2x1bW4sYyksdGhpcy5fbGFzdERyYWdDbGllbnRYPWEuY2xpZW50WCl9fSxfYXV0b1Njcm9sbGVyOmZ1bmN0aW9uKCl7aWYodGhpcy5fbGFzdERyYWdDbGllbnRYKXt2YXIgYT10aGlzLl9sYXN0RHJhZ0NsaWVudFgtdGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5yaWdodCsKNTAsYz10aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQtdGhpcy5fbGFzdERyYWdDbGllbnRYKzUwOzA8YT90aGlzLiQudGFibGUuc2Nyb2xsTGVmdCs9YS8xMDowPGMmJih0aGlzLiQudGFibGUuc2Nyb2xsTGVmdC09Yy8xMCk7dGhpcy5fc2Nyb2xsSGFuZGxlcigpfXRoaXMuX2RyYWdnZWRDb2x1bW4mJnRoaXMuYXN5bmModGhpcy5fYXV0b1Njcm9sbGVyLDEwKX0sX29uRHJhZ0VuZDpmdW5jdGlvbigpe3RoaXMuX2RyYWdnZWRDb2x1bW4mJih0aGlzLnRvZ2dsZUF0dHJpYnV0ZSgicmVvcmRlcmluZyIsITEpLHRoaXMuX2RyYWdnZWRDb2x1bW4uX3Jlb3JkZXJTdGF0dXM9IiIsdGhpcy5fc2V0U2libGluZ3NSZW9yZGVyU3RhdHVzKHRoaXMuX2RyYWdnZWRDb2x1bW4sIiIpLHRoaXMuX2xhc3REcmFnQ2xpZW50WD10aGlzLl9kcmFnZ2VkQ29sdW1uPW51bGwpfSxfaXNTd2FwQWxsb3dlZDpmdW5jdGlvbihhLGMpe2lmKGEmJmMpe3ZhciBkPWEucGFyZW50RWxlbWVudD09PWMucGFyZW50RWxlbWVudCwKZj1hLmZyb3plbj09PWMuZnJvemVuO3JldHVybiBhIT09YyYmZCYmZn19LF9pc1N3YXBwYWJsZUJ5UG9zaXRpb246ZnVuY3Rpb24oYSxjKXt2YXIgZD1BcnJheS5wcm90b3R5cGUuZmlsdGVyLmNhbGwoUG9seW1lci5kb20odGhpcy4kLmhlYWRlcikucXVlcnlTZWxlY3RvckFsbCgiLnZhYWRpbi1ncmlkLWNlbGwiKSxmdW5jdGlvbihnKXtyZXR1cm4gZy5jb2x1bW49PT1hfSlbMF0sZj10aGlzLiQuaGVhZGVyLnF1ZXJ5U2VsZWN0b3IoIltyZW9yZGVyLXN0YXR1c1x4M2RkcmFnZ2luZ10iKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm4gZC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0PmYubGVmdD9jPmQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkucmlnaHQtZi53aWR0aDpjPGQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCtmLndpZHRofSxfZ2V0Q2VsbEJ5Q2VsbENvbnRlbnQ6ZnVuY3Rpb24oYSl7aWYoUG9seW1lci5FbGVtZW50KXJldHVybiBhLmFzc2lnbmVkU2xvdC5wYXJlbnROb2RlOwphPVBvbHltZXIuZG9tKGEpLmdldERlc3RpbmF0aW9uSW5zZXJ0aW9uUG9pbnRzKClbMF07cmV0dXJuIFBvbHltZXIuZG9tKGEpLnBhcmVudE5vZGV9LF9zd2FwQ29sdW1uT3JkZXJzOmZ1bmN0aW9uKGEsYyl7dmFyIGQ9YS5fb3JkZXI7YS5fb3JkZXI9Yy5fb3JkZXI7Yy5fb3JkZXI9ZDt0aGlzLl91cGRhdGVMYXN0RnJvemVuKCk7dGhpcy5fdXBkYXRlTGFzdENvbHVtbigpfSxfZ2V0VGFyZ2V0Q29sdW1uOmZ1bmN0aW9uKGEsYyl7aWYoYSYmYyl7Zm9yKHZhciBkPWEuY29sdW1uO2QucGFyZW50RWxlbWVudCE9PWMucGFyZW50RWxlbWVudCYmZCE9PXRoaXMudGFyZ2V0OylkPWQucGFyZW50RWxlbWVudDtyZXR1cm4gZC5wYXJlbnRFbGVtZW50PT09Yy5wYXJlbnRFbGVtZW50P2Q6YS5jb2x1bW59fX07Cjwvc2NyaXB0PgoKCgoKPHNjcmlwdD4vL35+V0VCUEFUSH5+L3ZhYWRpbi1ncmlkL2lyb24tbGlzdC1iZWhhdmlvci5odG1sLmpzCndpbmRvdy52YWFkaW49d2luZG93LnZhYWRpbnx8e307dmFhZGluLmVsZW1lbnRzPXZhYWRpbi5lbGVtZW50c3x8e307dmFhZGluLmVsZW1lbnRzLmdyaWQ9dmFhZGluLmVsZW1lbnRzLmdyaWR8fHt9Owp2YWFkaW4uZWxlbWVudHMuZ3JpZC5Jcm9uTGlzdEJlaGF2aW9ySW1wbD1mdW5jdGlvbigpe3ZhciBhPW5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL2lQKD86aG9uZXxhZDsoPzogVTspPyBDUFUpIE9TIChcZCspLyksYz1hJiY4PD1hWzFdO3JldHVybntpczoiaXJvbi1saXN0Iixwcm9wZXJ0aWVzOnttYXhQaHlzaWNhbENvdW50Ont0eXBlOk51bWJlcix2YWx1ZTo1MDB9LGFzOnt0eXBlOlN0cmluZyx2YWx1ZToiaXRlbSJ9LGluZGV4QXM6e3R5cGU6U3RyaW5nLHZhbHVlOiJpbmRleCJ9fSxfcmF0aW86LjUsX3Njcm9sbGVyUGFkZGluZ1RvcDowLF9zY3JvbGxQb3NpdGlvbjowLF9waHlzaWNhbFNpemU6MCxfcGh5c2ljYWxBdmVyYWdlOjAsX3BoeXNpY2FsQXZlcmFnZUNvdW50OjAsX3BoeXNpY2FsVG9wOjAsX3ZpcnR1YWxDb3VudDowLF9waHlzaWNhbEluZGV4Rm9yS2V5Om51bGwsX2VzdFNjcm9sbEhlaWdodDowLF9zY3JvbGxIZWlnaHQ6MCxfdmlld3BvcnRIZWlnaHQ6MCxfdmlld3BvcnRXaWR0aDowLApfcGh5c2ljYWxJdGVtczpudWxsLF9waHlzaWNhbFNpemVzOm51bGwsX2ZpcnN0VmlzaWJsZUluZGV4VmFsOm51bGwsX2xhc3RWaXNpYmxlSW5kZXhWYWw6bnVsbCxfY29sbGVjdGlvbjpudWxsLF9pdGVtc1JlbmRlcmVkOiExLF9sYXN0UGFnZTpudWxsLF9tYXhQYWdlczozLF9pdGVtc1BlclJvdzoxLF9pdGVtV2lkdGg6MCxfcm93SGVpZ2h0OjAsZ2V0IF9waHlzaWNhbEJvdHRvbSgpe3JldHVybiB0aGlzLl9waHlzaWNhbFRvcCt0aGlzLl9waHlzaWNhbFNpemV9LGdldCBfc2Nyb2xsQm90dG9tKCl7cmV0dXJuIHRoaXMuX3Njcm9sbFBvc2l0aW9uK3RoaXMuX3ZpZXdwb3J0SGVpZ2h0fSxnZXQgX3ZpcnR1YWxFbmQoKXtyZXR1cm4gdGhpcy5fdmlydHVhbFN0YXJ0K3RoaXMuX3BoeXNpY2FsQ291bnQtMX0sZ2V0IF9oaWRkZW5Db250ZW50U2l6ZSgpe3JldHVybiB0aGlzLl9waHlzaWNhbFNpemUtdGhpcy5fdmlld3BvcnRIZWlnaHR9LGdldCBfbWF4U2Nyb2xsVG9wKCl7cmV0dXJuIHRoaXMuX2VzdFNjcm9sbEhlaWdodC0KdGhpcy5fdmlld3BvcnRIZWlnaHQrdGhpcy5fc2Nyb2xsZXJQYWRkaW5nVG9wfSxfbWluVmlydHVhbFN0YXJ0OjAsZ2V0IF9tYXhWaXJ0dWFsU3RhcnQoKXtyZXR1cm4gTWF0aC5tYXgoMCx0aGlzLl92aXJ0dWFsQ291bnQtdGhpcy5fcGh5c2ljYWxDb3VudCl9LF92aXJ0dWFsU3RhcnRWYWw6MCxzZXQgX3ZpcnR1YWxTdGFydChkKXt0aGlzLl92aXJ0dWFsU3RhcnRWYWw9TWF0aC5taW4odGhpcy5fbWF4VmlydHVhbFN0YXJ0LE1hdGgubWF4KHRoaXMuX21pblZpcnR1YWxTdGFydCxkKSl9LGdldCBfdmlydHVhbFN0YXJ0KCl7cmV0dXJuIHRoaXMuX3ZpcnR1YWxTdGFydFZhbHx8MH0sX3BoeXNpY2FsU3RhcnRWYWw6MCxzZXQgX3BoeXNpY2FsU3RhcnQoZCl7dGhpcy5fcGh5c2ljYWxTdGFydFZhbD1kJXRoaXMuX3BoeXNpY2FsQ291bnQ7MD50aGlzLl9waHlzaWNhbFN0YXJ0VmFsJiYodGhpcy5fcGh5c2ljYWxTdGFydFZhbD10aGlzLl9waHlzaWNhbENvdW50K3RoaXMuX3BoeXNpY2FsU3RhcnRWYWwpOwp0aGlzLl9waHlzaWNhbEVuZD0odGhpcy5fcGh5c2ljYWxTdGFydCt0aGlzLl9waHlzaWNhbENvdW50LTEpJXRoaXMuX3BoeXNpY2FsQ291bnR9LGdldCBfcGh5c2ljYWxTdGFydCgpe3JldHVybiB0aGlzLl9waHlzaWNhbFN0YXJ0VmFsfHwwfSxfcGh5c2ljYWxDb3VudFZhbDowLHNldCBfcGh5c2ljYWxDb3VudChkKXt0aGlzLl9waHlzaWNhbENvdW50VmFsPWQ7dGhpcy5fcGh5c2ljYWxFbmQ9KHRoaXMuX3BoeXNpY2FsU3RhcnQrdGhpcy5fcGh5c2ljYWxDb3VudC0xKSV0aGlzLl9waHlzaWNhbENvdW50fSxnZXQgX3BoeXNpY2FsQ291bnQoKXtyZXR1cm4gdGhpcy5fcGh5c2ljYWxDb3VudFZhbH0sX3BoeXNpY2FsRW5kOjAsZ2V0IF9vcHRQaHlzaWNhbFNpemUoKXtyZXR1cm4gdGhpcy5fdmlld3BvcnRIZWlnaHQqdGhpcy5fbWF4UGFnZXN9LGdldCBfb3B0UGh5c2ljYWxDb3VudCgpe3JldHVybiB0aGlzLl9lc3RSb3dzSW5WaWV3KnRoaXMuX2l0ZW1zUGVyUm93KnRoaXMuX21heFBhZ2VzfSwKZ2V0IF9pc1Zpc2libGUoKXtyZXR1cm4gdGhpcy5zY3JvbGxUYXJnZXQmJiEoIXRoaXMuc2Nyb2xsVGFyZ2V0Lm9mZnNldFdpZHRoJiYhdGhpcy5zY3JvbGxUYXJnZXQub2Zmc2V0SGVpZ2h0KX0sZ2V0IGZpcnN0VmlzaWJsZUluZGV4KCl7aWYobnVsbD09PXRoaXMuX2ZpcnN0VmlzaWJsZUluZGV4VmFsKXt2YXIgZD1NYXRoLmZsb29yKHRoaXMuX3BoeXNpY2FsVG9wK3RoaXMuX3Njcm9sbGVyUGFkZGluZ1RvcCk7dGhpcy5fZmlyc3RWaXNpYmxlSW5kZXhWYWw9dGhpcy5faXRlcmF0ZUl0ZW1zKGZ1bmN0aW9uKGYsZyl7ZCs9dGhpcy5fZ2V0UGh5c2ljYWxTaXplSW5jcmVtZW50KGYpO2lmKGQ+dGhpcy5fc2Nyb2xsUG9zaXRpb24pcmV0dXJuIGd9KXx8MH1yZXR1cm4gdGhpcy5fZmlyc3RWaXNpYmxlSW5kZXhWYWx9LGdldCBsYXN0VmlzaWJsZUluZGV4KCl7aWYobnVsbD09PXRoaXMuX2xhc3RWaXNpYmxlSW5kZXhWYWwpe3ZhciBkPXRoaXMuX3BoeXNpY2FsVG9wO3RoaXMuX2l0ZXJhdGVJdGVtcyhmdW5jdGlvbihmLApnKXtpZihkPHRoaXMuX3Njcm9sbEJvdHRvbSl0aGlzLl9sYXN0VmlzaWJsZUluZGV4VmFsPWc7ZWxzZSByZXR1cm4hMDtkKz10aGlzLl9nZXRQaHlzaWNhbFNpemVJbmNyZW1lbnQoZil9KX1yZXR1cm4gdGhpcy5fbGFzdFZpc2libGVJbmRleFZhbH0sZ2V0IF9kZWZhdWx0U2Nyb2xsVGFyZ2V0KCl7cmV0dXJuIHRoaXN9LGdldCBfdmlydHVhbFJvd0NvdW50KCl7cmV0dXJuIE1hdGguY2VpbCh0aGlzLl92aXJ0dWFsQ291bnQvdGhpcy5faXRlbXNQZXJSb3cpfSxnZXQgX2VzdFJvd3NJblZpZXcoKXtyZXR1cm4gTWF0aC5jZWlsKHRoaXMuX3ZpZXdwb3J0SGVpZ2h0L3RoaXMuX3Jvd0hlaWdodCl9LGdldCBfcGh5c2ljYWxSb3dzKCl7cmV0dXJuIE1hdGguY2VpbCh0aGlzLl9waHlzaWNhbENvdW50L3RoaXMuX2l0ZW1zUGVyUm93KX0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLnVwZGF0ZVZpZXdwb3J0Qm91bmRhcmllcygpO3RoaXMuX3JlbmRlcigpO3RoaXMubGlzdGVuKHRoaXMsImlyb24tcmVzaXplIiwKIl9yZXNpemVIYW5kbGVyIil9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5faXRlbXNSZW5kZXJlZD0hMTt0aGlzLnVubGlzdGVuKHRoaXMsImlyb24tcmVzaXplIiwiX3Jlc2l6ZUhhbmRsZXIiKX0sdXBkYXRlVmlld3BvcnRCb3VuZGFyaWVzOmZ1bmN0aW9uKCl7dGhpcy5fc2Nyb2xsZXJQYWRkaW5nVG9wPXRoaXMuc2Nyb2xsVGFyZ2V0PT09dGhpcz8wOnBhcnNlSW50KHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMpWyJwYWRkaW5nLXRvcCJdfHwwLDEwKTt0aGlzLl92aWV3cG9ydEhlaWdodD10aGlzLl9zY3JvbGxUYXJnZXRIZWlnaHR9LF91cGRhdGU6ZnVuY3Rpb24oZCxmKXt0aGlzLl9hc3NpZ25Nb2RlbHMoZCk7dGhpcy5fdXBkYXRlTWV0cmljcyhkKTtpZihmKWZvcig7Zi5sZW5ndGg7KWQ9Zi5wb3AoKSx0aGlzLl9waHlzaWNhbFRvcC09dGhpcy5fZ2V0UGh5c2ljYWxTaXplSW5jcmVtZW50KGQpO3RoaXMuX3Bvc2l0aW9uSXRlbXMoKTt0aGlzLl91cGRhdGVTY3JvbGxlclNpemUoKTsKdGhpcy5faW5jcmVhc2VQb29sSWZOZWVkZWQoKX0sX2luY3JlYXNlUG9vbElmTmVlZGVkOmZ1bmN0aW9uKCl7aWYoMD09PXRoaXMuX3ZpZXdwb3J0SGVpZ2h0KXJldHVybiExO3ZhciBkPXRoaXMuX3BoeXNpY2FsU2l6ZXMucmVkdWNlKGZ1bmN0aW9uKGcsbCl7cmV0dXJuIGcrKGx8fDEwMCl9LDApLGY9ZD50aGlzLl92aWV3cG9ydEhlaWdodDtpZihkPj10aGlzLl9vcHRQaHlzaWNhbFNpemUmJmYpcmV0dXJuITE7ZD1NYXRoLmZsb29yKHRoaXMuX3BoeXNpY2FsU2l6ZS90aGlzLl92aWV3cG9ydEhlaWdodCk7MD09PWQ/dGhpcy5fZGVib3VuY2VUZW1wbGF0ZSh0aGlzLl9pbmNyZWFzZVBvb2wuYmluZCh0aGlzLE1hdGgucm91bmQoLjUqdGhpcy5fcGh5c2ljYWxDb3VudCkpKTp0aGlzLl9sYXN0UGFnZSE9PWQmJmY/UG9seW1lci5kb20uYWRkRGVib3VuY2VyKHRoaXMuZGVib3VuY2UoIl9kZWJvdW5jZVRlbXBsYXRlIix0aGlzLl9pbmNyZWFzZVBvb2wuYmluZCh0aGlzLHRoaXMuX2l0ZW1zUGVyUm93KSwKMTYpKTp0aGlzLl9kZWJvdW5jZVRlbXBsYXRlKHRoaXMuX2luY3JlYXNlUG9vbC5iaW5kKHRoaXMsTWF0aC5jZWlsKHRoaXMuX3ZpZXdwb3J0SGVpZ2h0Lyh0aGlzLl9waHlzaWNhbFNpemUvdGhpcy5fcGh5c2ljYWxDb3VudCkqdGhpcy5fbWF4UGFnZXMtdGhpcy5fcGh5c2ljYWxDb3VudCl8fDEpKTt0aGlzLl9sYXN0UGFnZT1kO3JldHVybiEwfSxfZGVib3VuY2VUZW1wbGF0ZTpmdW5jdGlvbihkKXtQb2x5bWVyLmRvbS5hZGREZWJvdW5jZXIodGhpcy5kZWJvdW5jZSgiX2RlYm91bmNlVGVtcGxhdGUiLGQpKX0sX2luY3JlYXNlUG9vbDpmdW5jdGlvbihkKXt2YXIgZj10aGlzLl9waHlzaWNhbENvdW50O2Q9TWF0aC5taW4odGhpcy5fcGh5c2ljYWxDb3VudCtkLHRoaXMuX3ZpcnR1YWxDb3VudC10aGlzLl92aXJ0dWFsU3RhcnQsTWF0aC5tYXgodGhpcy5tYXhQaHlzaWNhbENvdW50LDI1KSktZjswPj1kfHwoW10ucHVzaC5hcHBseSh0aGlzLl9waHlzaWNhbEl0ZW1zLHRoaXMuX2NyZWF0ZVBvb2woZCkpLApbXS5wdXNoLmFwcGx5KHRoaXMuX3BoeXNpY2FsU2l6ZXMsQXJyYXkoZCkpLHRoaXMuX3BoeXNpY2FsQ291bnQ9ZitkLHRoaXMuX3VwZGF0ZSgpKX0sX3JlbmRlcjpmdW5jdGlvbigpe3ZhciBkPTA8dGhpcy5fdmlydHVhbENvdW50fHwwPHRoaXMuX3BoeXNpY2FsQ291bnQ7dGhpcy5pc0F0dGFjaGVkJiYhdGhpcy5faXRlbXNSZW5kZXJlZCYmdGhpcy5faXNWaXNpYmxlJiZkJiYodGhpcy5fbGFzdFBhZ2U9MCx0aGlzLl91cGRhdGUoKSx0aGlzLl9pdGVtc1JlbmRlcmVkPSEwKX0sX2l0ZXJhdGVJdGVtczpmdW5jdGlvbihkLGYpe3ZhciBnLGw7aWYoMj09PWFyZ3VtZW50cy5sZW5ndGgmJmYpZm9yKGw9MDtsPGYubGVuZ3RoO2wrKyl7dmFyIGs9ZltsXTt2YXIgbT10aGlzLl9jb21wdXRlVmlkeChrKTtpZihudWxsIT0oZz1kLmNhbGwodGhpcyxrLG0pKSlyZXR1cm4gZ31lbHNle2s9dGhpcy5fcGh5c2ljYWxTdGFydDtmb3IobT10aGlzLl92aXJ0dWFsU3RhcnQ7azx0aGlzLl9waHlzaWNhbENvdW50O2srKywKbSsrKWlmKG51bGwhPShnPWQuY2FsbCh0aGlzLGssbSkpKXJldHVybiBnO2ZvcihrPTA7azx0aGlzLl9waHlzaWNhbFN0YXJ0O2srKyxtKyspaWYobnVsbCE9KGc9ZC5jYWxsKHRoaXMsayxtKSkpcmV0dXJuIGd9fSxfY29tcHV0ZVZpZHg6ZnVuY3Rpb24oZCl7cmV0dXJuIGQ+PXRoaXMuX3BoeXNpY2FsU3RhcnQ/dGhpcy5fdmlydHVhbFN0YXJ0KyhkLXRoaXMuX3BoeXNpY2FsU3RhcnQpOnRoaXMuX3ZpcnR1YWxTdGFydCsodGhpcy5fcGh5c2ljYWxDb3VudC10aGlzLl9waHlzaWNhbFN0YXJ0KStkfSxfdXBkYXRlTWV0cmljczpmdW5jdGlvbihkKXt0aGlzLnNjcm9sbGluZyYmUG9seW1lci5kb20uZmx1c2goKTt2YXIgZj0wLGc9MCxsPXRoaXMuX3BoeXNpY2FsQXZlcmFnZUNvdW50LGs9dGhpcy5fcGh5c2ljYWxBdmVyYWdlO3RoaXMuX2l0ZXJhdGVJdGVtcyhmdW5jdGlvbihtKXtnKz10aGlzLl9waHlzaWNhbFNpemVzW21dfHwwO3RoaXMuX3BoeXNpY2FsU2l6ZXNbbV09dGhpcy5fcGh5c2ljYWxJdGVtc1ttXS5vZmZzZXRIZWlnaHQ7CmYrPXRoaXMuX3BoeXNpY2FsU2l6ZXNbbV07dGhpcy5fcGh5c2ljYWxBdmVyYWdlQ291bnQrPXRoaXMuX3BoeXNpY2FsU2l6ZXNbbV0/MTowfSxkKTt0aGlzLl92aWV3cG9ydEhlaWdodD10aGlzLl9zY3JvbGxUYXJnZXRIZWlnaHQ7dGhpcy5fcGh5c2ljYWxTaXplPXRoaXMuX3BoeXNpY2FsU2l6ZStmLWc7dGhpcy5fcGh5c2ljYWxBdmVyYWdlQ291bnQhPT1sJiYodGhpcy5fcGh5c2ljYWxBdmVyYWdlPU1hdGgucm91bmQoKGsqbCtmKS90aGlzLl9waHlzaWNhbEF2ZXJhZ2VDb3VudCkpfSxfcG9zaXRpb25JdGVtczpmdW5jdGlvbigpe3RoaXMuX2FkanVzdFNjcm9sbFBvc2l0aW9uKCk7dmFyIGQ9dGhpcy5fcGh5c2ljYWxUb3A7dGhpcy5faXRlcmF0ZUl0ZW1zKGZ1bmN0aW9uKGYpe3RoaXMuX3BoeXNpY2FsSXRlbXNbZl0uc3R5bGUudHJhbnNmb3JtPXRoaXMuX2dldFRyYW5zbGF0ZSgwLGQpO2QrPXRoaXMuX3BoeXNpY2FsU2l6ZXNbZl19KX0sX2dldFBoeXNpY2FsU2l6ZUluY3JlbWVudDpmdW5jdGlvbihkKXtyZXR1cm4gdGhpcy5fcGh5c2ljYWxTaXplc1tkXX0sCl9zaG91bGRSZW5kZXJOZXh0Um93OmZ1bmN0aW9uKGQpe3JldHVybiBkJXRoaXMuX2l0ZW1zUGVyUm93PT09dGhpcy5faXRlbXNQZXJSb3ctMX0sX2FkanVzdFNjcm9sbFBvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIGQ9MD09PXRoaXMuX3ZpcnR1YWxTdGFydD90aGlzLl9waHlzaWNhbFRvcDpNYXRoLm1pbih0aGlzLl9zY3JvbGxQb3NpdGlvbit0aGlzLl9waHlzaWNhbFRvcCwwKTtkJiYodGhpcy5fcGh5c2ljYWxUb3AtPWQsY3x8MD09PXRoaXMuX3BoeXNpY2FsVG9wfHx0aGlzLl9yZXNldFNjcm9sbFBvc2l0aW9uKHRoaXMuX3Njcm9sbFRvcC1kKSl9LF9yZXNldFNjcm9sbFBvc2l0aW9uOmZ1bmN0aW9uKGQpe3RoaXMuc2Nyb2xsVGFyZ2V0JiYodGhpcy5fc2Nyb2xsUG9zaXRpb249dGhpcy5fc2Nyb2xsVG9wPWQpfSxfdXBkYXRlU2Nyb2xsZXJTaXplOmZ1bmN0aW9uKGQpe3RoaXMuX2VzdFNjcm9sbEhlaWdodD10aGlzLl9waHlzaWNhbEJvdHRvbStNYXRoLm1heCh0aGlzLl92aXJ0dWFsQ291bnQtCnRoaXMuX3BoeXNpY2FsQ291bnQtdGhpcy5fdmlydHVhbFN0YXJ0LDApKnRoaXMuX3BoeXNpY2FsQXZlcmFnZTtpZigoZD0oZD1kfHwwPT09dGhpcy5fc2Nyb2xsSGVpZ2h0KXx8dGhpcy5fc2Nyb2xsUG9zaXRpb24+PXRoaXMuX2VzdFNjcm9sbEhlaWdodC10aGlzLl9waHlzaWNhbFNpemUpfHxNYXRoLmFicyh0aGlzLl9lc3RTY3JvbGxIZWlnaHQtdGhpcy5fc2Nyb2xsSGVpZ2h0KT49dGhpcy5fb3B0UGh5c2ljYWxTaXplKXRoaXMuJC5pdGVtcy5zdHlsZS5oZWlnaHQ9dGhpcy5fZXN0U2Nyb2xsSGVpZ2h0KyJweCIsdGhpcy5fc2Nyb2xsSGVpZ2h0PXRoaXMuX2VzdFNjcm9sbEhlaWdodH0sc2Nyb2xsVG9JbmRleDpmdW5jdGlvbihkKXtQb2x5bWVyLmRvbS5mbHVzaCgpO2Q9TWF0aC5taW4oTWF0aC5tYXgoZCwwKSx0aGlzLl92aXJ0dWFsQ291bnQtMSk7aWYoIXRoaXMuX2lzSW5kZXhSZW5kZXJlZChkKXx8ZD49dGhpcy5fbWF4VmlydHVhbFN0YXJ0KXRoaXMuX3ZpcnR1YWxTdGFydD0KZC0xO3RoaXMuX2Fzc2lnbk1vZGVscygpO3RoaXMuX3VwZGF0ZU1ldHJpY3MoKTt0aGlzLl9waHlzaWNhbFRvcD1NYXRoLmZsb29yKHRoaXMuX3ZpcnR1YWxTdGFydC90aGlzLl9pdGVtc1BlclJvdykqdGhpcy5fcGh5c2ljYWxBdmVyYWdlO2Zvcih2YXIgZj10aGlzLl9waHlzaWNhbFN0YXJ0LGc9dGhpcy5fdmlydHVhbFN0YXJ0LGw9MCxrPXRoaXMuX2hpZGRlbkNvbnRlbnRTaXplO2c8ZCYmbDw9azspbCs9dGhpcy5fZ2V0UGh5c2ljYWxTaXplSW5jcmVtZW50KGYpLGY9KGYrMSkldGhpcy5fcGh5c2ljYWxDb3VudCxnKys7dGhpcy5fdXBkYXRlU2Nyb2xsZXJTaXplKCEwKTt0aGlzLl9wb3NpdGlvbkl0ZW1zKCk7dGhpcy5fcmVzZXRTY3JvbGxQb3NpdGlvbih0aGlzLl9waHlzaWNhbFRvcCt0aGlzLl9zY3JvbGxlclBhZGRpbmdUb3ArbCk7dGhpcy5faW5jcmVhc2VQb29sSWZOZWVkZWQoKTt0aGlzLl9sYXN0VmlzaWJsZUluZGV4VmFsPXRoaXMuX2ZpcnN0VmlzaWJsZUluZGV4VmFsPQpudWxsfSxfcmVzZXRBdmVyYWdlOmZ1bmN0aW9uKCl7dGhpcy5fcGh5c2ljYWxBdmVyYWdlQ291bnQ9dGhpcy5fcGh5c2ljYWxBdmVyYWdlPTB9LF9yZXNpemVIYW5kbGVyOmZ1bmN0aW9uKCl7UG9seW1lci5kb20uYWRkRGVib3VuY2VyKHRoaXMuZGVib3VuY2UoIl9kZWJvdW5jZVRlbXBsYXRlIixmdW5jdGlvbigpe3RoaXMudXBkYXRlVmlld3BvcnRCb3VuZGFyaWVzKCk7dGhpcy5fcmVuZGVyKCk7dGhpcy5faXRlbXNSZW5kZXJlZCYmdGhpcy5fcGh5c2ljYWxJdGVtcyYmdGhpcy5faXNWaXNpYmxlJiYodGhpcy5fcmVzZXRBdmVyYWdlKCksdGhpcy5zY3JvbGxUb0luZGV4KHRoaXMuZmlyc3RWaXNpYmxlSW5kZXgpKX0uYmluZCh0aGlzKSwxKSl9LHVwZGF0ZVNpemVGb3JJdGVtOmZ1bmN0aW9uKGQpe2Q9dGhpcy5fcGh5c2ljYWxJbmRleEZvcktleVtkXTtudWxsIT1kJiYodGhpcy5fdXBkYXRlTWV0cmljcyhbZF0pLHRoaXMuX3Bvc2l0aW9uSXRlbXMoKSl9LF9pc0luZGV4UmVuZGVyZWQ6ZnVuY3Rpb24oZCl7cmV0dXJuIGQ+PQp0aGlzLl92aXJ0dWFsU3RhcnQmJmQ8PXRoaXMuX3ZpcnR1YWxFbmR9LF9pc0luZGV4VmlzaWJsZTpmdW5jdGlvbihkKXtyZXR1cm4gZD49dGhpcy5maXJzdFZpc2libGVJbmRleCYmZDw9dGhpcy5sYXN0VmlzaWJsZUluZGV4fX19KCk7dmFhZGluLmVsZW1lbnRzLmdyaWQuSXJvbkxpc3RCZWhhdmlvcj1bUG9seW1lci5UZW1wbGF0aXplcixQb2x5bWVyLklyb25TY3JvbGxUYXJnZXRCZWhhdmlvcix2YWFkaW4uZWxlbWVudHMuZ3JpZC5Jcm9uTGlzdEJlaGF2aW9ySW1wbF07Cjwvc2NyaXB0PgoKCjxkb20tbW9kdWxlIGlkPSJ2YWFkaW4tZ3JpZC10YWJsZS1zdHlsZXMiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KCiAgICAgIEBrZXlmcmFtZXMgYXBwZWFyIHsKICAgICAgICB0byB7CiAgICAgICAgICBvcGFjaXR5OiAxOwogICAgICAgIH0KICAgICAgfQoKICAgICAgdmFhZGluLWdyaWQtdGFibGUgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBhbmltYXRpb246IDFtcyBhcHBlYXI7CiAgICAgIH0KCiAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKC13ZWJraXQtbWF4LWRldmljZS1waXhlbC1yYXRpbzogMSkgewogICAgICAgIDpob3N0IHsKICAgICAgICAgIHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm07CiAgICAgICAgfQogICAgICB9CgogICAgICAjaXRlbXMgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfQoKICAgICAgI2l0ZW1zIHsKICAgICAgICBib3JkZXItdG9wOiAwIHNvbGlkIHRyYW5zcGFyZW50OwogICAgICAgIGJvcmRlci1ib3R0b206IDAgc29saWQgdHJhbnNwYXJlbnQ7CiAgICAgIH0KCiAgICAgICNpdGVtcyA+IC52YWFkaW4tZ3JpZC1yb3cgewogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgfQoKICAgICAgdmFhZGluLWdyaWQtdGFibGUtYm9keSB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH0KCiAgICAgIHZhYWRpbi1ncmlkLXRhYmxlLWhlYWRlciAudmFhZGluLWdyaWQtY2VsbCwKICAgICAgdmFhZGluLWdyaWQtdGFibGUtZm9vdGVyIC52YWFkaW4tZ3JpZC1jZWxsIHsKICAgICAgICB0b3A6IDA7CiAgICAgIH0KCiAgICAgIC52YWFkaW4tZ3JpZC1jZWxsIHsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIH0KCiAgICAgIC52YWFkaW4tZ3JpZC1jZWxsOm5vdChbZGV0YWlsc2NlbGxdKSB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICAudmFhZGluLWdyaWQtY2VsbCA6OnNsb3R0ZWQodmFhZGluLWdyaWQtY2VsbC1jb250ZW50KSB7CiAgICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC52YWFkaW4tZ3JpZC1jb2x1bW4tcmVzaXplLWhhbmRsZSB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBjdXJzb3I6IGNvbC1yZXNpemU7CiAgICAgICAgei1pbmRleDogMTsKICAgICAgfQoKICAgICAgLnZhYWRpbi1ncmlkLWNvbHVtbi1yZXNpemUtaGFuZGxlOjpiZWZvcmUgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBjb250ZW50OiAiIjsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgd2lkdGg6IDM1cHg7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpOwogICAgICB9CgogICAgICBbbGFzdGNvbHVtbl0gLnZhYWRpbi1ncmlkLWNvbHVtbi1yZXNpemUtaGFuZGxlOjpiZWZvcmUsCiAgICAgIFtsYXN0LWZyb3plbl0gLnZhYWRpbi1ncmlkLWNvbHVtbi1yZXNpemUtaGFuZGxlOjpiZWZvcmUgewogICAgICAgIHdpZHRoOiAxOHB4OwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtMTAwJSk7CiAgICAgIH0KCiAgICAgIHZhYWRpbi1ncmlkLXRhYmxlW2NvbHVtbi1yZW9yZGVyaW5nLWFsbG93ZWRdICNoZWFkZXIsCiAgICAgIHZhYWRpbi1ncmlkLXRhYmxlW2NvbHVtbi1yZXNpemluZ10gewogICAgICAgIC1tcy11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIH0KCiAgICAgIHZhYWRpbi1ncmlkLXRhYmxlW2NvbHVtbi1yZXNpemluZ10gewogICAgICAgIGN1cnNvcjogY29sLXJlc2l6ZTsKICAgICAgfQoKICAgICAgLnZhYWRpbi1ncmlkLXJvdzpub3QoW2hpZGRlbl0pIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICBbZnJvemVuXSB7CiAgICAgICAgei1pbmRleDogMjsKICAgICAgfQoKICAgICAgW2hpZGRlbl0gewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KCiAgICAgIHZhYWRpbi1ncmlkLXRhYmxlW25vLWNvbnRlbnQtcG9pbnRlci1ldmVudHNdIC52YWFkaW4tZ3JpZC1jZWxsIDo6c2xvdHRlZCh2YWFkaW4tZ3JpZC1jZWxsLWNvbnRlbnQpIHsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+Cgo8ZG9tLW1vZHVsZSBpZD0idmFhZGluLWdyaWQtdGFibGUtdGFibGUtc3R5bGVzIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0KFtpb3NdW2NvbHVtbi1yZXNpemluZ10pICNvdXRlcnNjcm9sbGVyIHsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB9CgogICAgICAjZml4ZWRzaXplciwKICAgICAgI291dGVyc2l6ZXIgewogICAgICAgIGJvcmRlci10b3A6IDAgc29saWQgdHJhbnNwYXJlbnQ7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMCBzb2xpZCB0cmFuc3BhcmVudDsKICAgICAgfQoKICAgICAgI3RhYmxlIHsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgb3ZlcmZsb3c6IGF1dG87CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgfQoKICAgICAgI3RhYmxlW292ZXJmbG93LWhpZGRlbl0sCiAgICAgICNvdXRlcnNjcm9sbGVyW292ZXJmbG93LWhpZGRlbl0gewogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIHZhYWRpbi1ncmlkLXNpemVyIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgICNzaXplcndyYXBwZXIgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICB6LWluZGV4OiAtMTAwOwogICAgICB9CgogICAgICAjcmVvcmRlcmdob3N0IHsKICAgICAgICB2aXNpYmlsaXR5OiBoaWRkZW47CiAgICAgICAgcG9zaXRpb246IGZpeGVkOwogICAgICAgIG9wYWNpdHk6IDAuNTsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQoKICAgICAgOjpzbG90dGVkKHZhYWRpbi1ncmlkLWNvbHVtbiksCiAgICAgIDo6c2xvdHRlZCh2YWFkaW4tZ3JpZC1zZWxlY3Rpb24tY29sdW1uKSwKICAgICAgOjpzbG90dGVkKHZhYWRpbi1ncmlkLWNvbHVtbi1ncm91cCkgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KCiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT4KCjxkb20tbW9kdWxlIGlkPSJ2YWFkaW4tZ3JpZC10YWJsZS10aGVtYWJpbGl0eS1zdHlsZXMiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KCiAgICAgIC8qIERlZmF1bHQgYm9yZGVycyAqLwogICAgICB2YWFkaW4tZ3JpZC10YWJsZS1oZWFkZXIgLnZhYWRpbi1ncmlkLXJvdzpsYXN0LWNoaWxkIC52YWFkaW4tZ3JpZC1jZWxsIDo6c2xvdHRlZCh2YWFkaW4tZ3JpZC1jZWxsLWNvbnRlbnQpIHsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tZGl2aWRlci1jb2xvciwgcmdiYSgwLCAwLCAwLCAwLjA4KSk7CiAgICAgIH0KCiAgICAgIHZhYWRpbi1ncmlkLXRhYmxlLWZvb3RlciAudmFhZGluLWdyaWQtcm93OmZpcnN0LWNoaWxkIC52YWFkaW4tZ3JpZC1jZWxsIDo6c2xvdHRlZCh2YWFkaW4tZ3JpZC1jZWxsLWNvbnRlbnQpIHsKICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgdmFyKC0tZGl2aWRlci1jb2xvciwgcmdiYSgwLCAwLCAwLCAwLjA4KSk7CiAgICAgIH0KCiAgICAgIHZhYWRpbi1ncmlkLXRhYmxlLWJvZHkgLnZhYWRpbi1ncmlkLXJvdzpub3QoW2xhc3Ryb3ddKSAudmFhZGluLWdyaWQtY2VsbCA6OnNsb3R0ZWQodmFhZGluLWdyaWQtY2VsbC1jb250ZW50KSB7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLWRpdmlkZXItY29sb3IsIHJnYmEoMCwgMCwgMCwgMC4wOCkpOwogICAgICB9CgogICAgICBbbGFzdC1mcm96ZW5dIDo6c2xvdHRlZCh2YWFkaW4tZ3JpZC1jZWxsLWNvbnRlbnQpIHsKICAgICAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCB2YXIoLS1kaXZpZGVyLWNvbG9yLCByZ2JhKDAsIDAsIDAsIDAuMDgpKTsKICAgICAgfQoKICAgICAgLyogQ29sdW1uIHJlc2l6ZSBoYW5kbGUgKi8KCiAgICAgIC52YWFkaW4tZ3JpZC1jb2x1bW4tcmVzaXplLWhhbmRsZSB7CiAgICAgICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgdmFyKC0tZGl2aWRlci1jb2xvciwgcmdiYSgwLCAwLCAwLCAwLjA4KSk7CiAgICAgICAgQGFwcGx5KC0tdmFhZGluLWdyaWQtY29sdW1uLXJlc2l6ZS1oYW5kbGUpOwogICAgICB9CgogICAgICAvKiBDZWxscyAqLwogICAgICB2YWFkaW4tZ3JpZC10YWJsZSAudmFhZGluLWdyaWQtcm93IC52YWFkaW4tZ3JpZC1jZWxsOm5vdChbZGV0YWlsc2NlbGxdKSA6OnNsb3R0ZWQodmFhZGluLWdyaWQtY2VsbC1jb250ZW50KSB7CiAgICAgICAgYmFja2dyb3VuZDogI2ZmZjsKICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OwogICAgICAgIHBhZGRpbmc6IDhweDsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgIEBhcHBseSgtLXZhYWRpbi1ncmlkLWNlbGwpOwogICAgICB9CgogICAgICB2YWFkaW4tZ3JpZC10YWJsZS1oZWFkZXIgLnZhYWRpbi1ncmlkLXJvdyAudmFhZGluLWdyaWQtY2VsbDpub3QoW2RldGFpbHNjZWxsXSkgOjpzbG90dGVkKHZhYWRpbi1ncmlkLWNlbGwtY29udGVudCkgewogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgQGFwcGx5KC0tdmFhZGluLWdyaWQtaGVhZGVyLWNlbGwpOwogICAgICB9CgogICAgICB2YWFkaW4tZ3JpZC10YWJsZS1mb290ZXIgLnZhYWRpbi1ncmlkLXJvdyAudmFhZGluLWdyaWQtY2VsbDpub3QoW2RldGFpbHNjZWxsXSkgOjpzbG90dGVkKHZhYWRpbi1ncmlkLWNlbGwtY29udGVudCkgewogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgQGFwcGx5KC0tdmFhZGluLWdyaWQtZm9vdGVyLWNlbGwpOwogICAgICB9CgogICAgICB2YWFkaW4tZ3JpZC10YWJsZS1ib2R5IC52YWFkaW4tZ3JpZC1yb3cgLnZhYWRpbi1ncmlkLWNlbGw6bm90KFtkZXRhaWxzY2VsbF0pIDo6c2xvdHRlZCh2YWFkaW4tZ3JpZC1jZWxsLWNvbnRlbnQpIHsKICAgICAgICBAYXBwbHkoLS12YWFkaW4tZ3JpZC1ib2R5LWNlbGwpOwogICAgICB9CgogICAgICB2YWFkaW4tZ3JpZC10YWJsZS1ib2R5IFtvZGRdIC52YWFkaW4tZ3JpZC1jZWxsOm5vdChbZGV0YWlsc2NlbGxdKSA6OnNsb3R0ZWQodmFhZGluLWdyaWQtY2VsbC1jb250ZW50KSB7CiAgICAgICAgQGFwcGx5KC0tdmFhZGluLWdyaWQtYm9keS1yb3ctb2RkLWNlbGwpOwogICAgICB9CgogICAgICB2YWFkaW4tZ3JpZC10YWJsZSAudmFhZGluLWdyaWQtcm93IC52YWFkaW4tZ3JpZC1jZWxsOm5vdChbZGV0YWlsc2NlbGxdKVtsYXN0LWZyb3plbl0gOjpzbG90dGVkKHZhYWRpbi1ncmlkLWNlbGwtY29udGVudCkgewogICAgICAgIEBhcHBseSgtLXZhYWRpbi1ncmlkLWNlbGwtbGFzdC1mcm96ZW4pOwogICAgICB9CgogICAgICB2YWFkaW4tZ3JpZC10YWJsZTpub3QoW3Njcm9sbGluZ10pIHZhYWRpbi1ncmlkLXRhYmxlLWJvZHkgLnZhYWRpbi1ncmlkLXJvdzpob3ZlciAudmFhZGluLWdyaWQtY2VsbCA6OnNsb3R0ZWQodmFhZGluLWdyaWQtY2VsbC1jb250ZW50KSB7CiAgICAgICAgQGFwcGx5KC0tdmFhZGluLWdyaWQtYm9keS1yb3ctaG92ZXItY2VsbCk7CiAgICAgIH0KCiAgICAgIHZhYWRpbi1ncmlkLXRhYmxlIC52YWFkaW4tZ3JpZC1yb3cgLnZhYWRpbi1ncmlkLWNlbGwudmFhZGluLWdyaWQtY2VsbFtsYXN0Y29sdW1uXSA6OnNsb3R0ZWQodmFhZGluLWdyaWQtY2VsbC1jb250ZW50KSB7CiAgICAgICAgYm9yZGVyLXJpZ2h0OiBub25lOwogICAgICB9CgogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+Cgo8ZG9tLW1vZHVsZSBpZD0idmFhZGluLWdyaWQtdGFibGUiPgogIDx0ZW1wbGF0ZT4KICAgICAgPHN0eWxlIGluY2x1ZGU9InZhYWRpbi1ncmlkLXRhYmxlLXRhYmxlLXNjcm9sbC1zdHlsZXMiPjwvc3R5bGU+CiAgICAgIDxzdHlsZSBpbmNsdWRlPSJ2YWFkaW4tZ3JpZC10YWJsZS10YWJsZS1zdHlsZXMiPjwvc3R5bGU+CgogICAgICA8c3R5bGUgaW5jbHVkZT0idmFhZGluLWdyaWQtZGF0YS1wcm92aWRlci10aGVtYWJpbGl0eS1zdHlsZXMiPjwvc3R5bGU+CgogICAgICA8ZGl2IGlkPSJzcGlubmVyIj48L2Rpdj4KICAgICAgPGRpdiBpZD0idGFibGUiIHRhYmluZGV4PSItMSIgb3ZlcmZsb3ctaGlkZGVuJD0iW1tfaGlkZVRhYmxlT3ZlcmZsb3coc2Nyb2xsYmFyV2lkdGgsIHNhZmFyaSldXSI+CiAgICAgICAgPGRpdiBpZD0ic2l6ZXJ3cmFwcGVyIj4KICAgICAgICAgIDx2YWFkaW4tZ3JpZC1zaXplciBpZD0iZml4ZWRzaXplciIgdG9wPSJbW19lc3RTY3JvbGxIZWlnaHRdXSIgY29sdW1uLXRyZWU9IltbY29sdW1uVHJlZV1dIj48L3ZhYWRpbi1ncmlkLXNpemVyPgogICAgICAgIDwvZGl2PgogICAgICAgIDxzbG90IG5hbWU9ImhlYWRlciI+PC9zbG90PgogICAgICAgIDxzbG90IG5hbWU9Iml0ZW1zIj48L3Nsb3Q+CiAgICAgICAgPHNsb3QgbmFtZT0iZm9vdGVyIj48L3Nsb3Q+CiAgICAgIDwvZGl2PgoKICAgICAgPGRpdiBpZD0icmVvcmRlcmdob3N0Ij48L2Rpdj4KICAgICAgPHZhYWRpbi1ncmlkLXRhYmxlLW91dGVyLXNjcm9sbGVyIGlkPSJvdXRlcnNjcm9sbGVyIiBzY3JvbGwtdGFyZ2V0PSJbW3Njcm9sbFRhcmdldF1dIiBvdmVyZmxvdy1oaWRkZW4kPSJbW19oaWRlT3V0ZXJTY3JvbGxlcihzY3JvbGxiYXJXaWR0aCwgc2FmYXJpKV1dIiBpb3MkPSJbW2lvc11dIiBzY3JvbGxpbmckPSJbW3Njcm9sbGluZ11dIj4KICAgICAgPHZhYWRpbi1ncmlkLXNpemVyIGlkPSJvdXRlcnNpemVyIiB0b3A9IltbX2VzdFNjcm9sbEhlaWdodF1dIiBjb2x1bW4tdHJlZT0iW1tjb2x1bW5UcmVlXV0iPjwvdmFhZGluLWdyaWQtc2l6ZXI+CiAgICA8L3ZhYWRpbi1ncmlkLXRhYmxlLW91dGVyLXNjcm9sbGVyPgogICAgPHNsb3Q+PC9zbG90PgogICAgPHNsb3QgbmFtZT0iZm9vdGVyRm9jdXNUcmFwIj48L3Nsb3Q+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPgoKPHNjcmlwdD4vL35+V0VCUEFUSH5+L3ZhYWRpbi1ncmlkL3ZhYWRpbi1ncmlkLXRhYmxlLmh0bWwuanMKUG9seW1lcih7aXM6InZhYWRpbi1ncmlkLXRhYmxlIixiZWhhdmlvcnM6W3ZhYWRpbi5lbGVtZW50cy5ncmlkLklyb25MaXN0QmVoYXZpb3IsdmFhZGluLmVsZW1lbnRzLmdyaWQuVGFibGVTY3JvbGxCZWhhdmlvcix2YWFkaW4uZWxlbWVudHMuZ3JpZC5UYWJsZUNvbHVtblJlb3JkZXJpbmdCZWhhdmlvcixQb2x5bWVyLlRlbXBsYXRpemVyXSxwcm9wZXJ0aWVzOntzaXplOk51bWJlcixjb2x1bW5UcmVlOkFycmF5LGJpbmREYXRhOkZ1bmN0aW9uLHJvd0RldGFpbHNUZW1wbGF0ZTpPYmplY3QsY29sdW1uUmVvcmRlcmluZ0FsbG93ZWQ6e3R5cGU6Qm9vbGVhbixyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9LHNhZmFyaTp7dHlwZTpCb29sZWFuLHZhbHVlOi9eKCg/IWNocm9tZXxhbmRyb2lkKS4pKnNhZmFyaS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCl9LHNjcm9sbGJhcldpZHRoOnt0eXBlOk51bWJlcix2YWx1ZTpmdW5jdGlvbigpe3ZhciBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwphLnN0eWxlLndpZHRoPSIxMDBweCI7YS5zdHlsZS5oZWlnaHQ9IjEwMHB4IjthLnN0eWxlLm92ZXJmbG93PSJzY3JvbGwiO2Euc3R5bGUucG9zaXRpb249ImFic29sdXRlIjthLnN0eWxlLnRvcD0iLTk5OTlweCI7ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChhKTt2YXIgYz1hLm9mZnNldFdpZHRoLWEuY2xpZW50V2lkdGg7ZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChhKTtyZXR1cm4gY319LHRhcmdldDpPYmplY3QsaGFzRGF0YTpCb29sZWFufSxvYnNlcnZlcnM6WyJfY29sdW1uVHJlZUNoYW5nZWQoY29sdW1uVHJlZSwgX3BoeXNpY2FsSXRlbXMsIF9waHlzaWNhbENvdW50VmFsKSIsIl9zaXplQ2hhbmdlZChzaXplLCBiaW5kRGF0YSwgaGFzRGF0YSkiLCJfcm93RGV0YWlsc1RlbXBsYXRlQ2hhbmdlZChyb3dEZXRhaWxzVGVtcGxhdGUsIF9waHlzaWNhbEl0ZW1zLCBfcGh5c2ljYWxDb3VudFZhbCkiXSxsaXN0ZW5lcnM6eyJwcm9wZXJ0eS1jaGFuZ2VkIjoiX2NvbHVtblByb3BDaGFuZ2VkIiwKYW5pbWF0aW9uZW5kOiJfb25BbmltYXRpb25FbmQiLCJjb2x1bW4tcmVzaXppbmciOiJfb25Db2x1bW5SZXNpemUifSxyZWFkeTpmdW5jdGlvbigpe3RoaXMuJD10aGlzLiR8fHt9O3RoaXMuJC5oZWFkZXI9dGhpcy5kb21Ib3N0LiQuaGVhZGVyO3RoaXMuJC5pdGVtcz10aGlzLmRvbUhvc3QuJC5pdGVtczt0aGlzLiQuZm9vdGVyPXRoaXMuZG9tSG9zdC4kLmZvb3Rlcn0sX29uQ29sdW1uUmVzaXplOmZ1bmN0aW9uKCl7dGhpcy50b2dnbGVBdHRyaWJ1dGUoImNvbHVtbi1yZXNpemluZyIsdGhpcy4kLmhlYWRlci5xdWVyeVNlbGVjdG9yKCJbY29sdW1uLXJlc2l6aW5nXSIpKTt0aGlzLl9ncmlkUmVzaXplSGFuZGxlcigpfSxfb25BbmltYXRpb25FbmQ6ZnVuY3Rpb24oYSl7L2FwcGVhci8udGVzdChhLmFuaW1hdGlvbk5hbWUpJiYodGhpcy5fcmVuZGVyKCksdGhpcy5fdXBkYXRlSGVhZGVyRm9vdGVyTWV0cmljcygpLGEuc3RvcFByb3BhZ2F0aW9uKCkpfSxfY29sdW1uUHJvcENoYW5nZWQ6ZnVuY3Rpb24oYSl7ImhlYWRlclRlbXBsYXRlIj09PQphLmRldGFpbC5wYXRoJiZ0aGlzLnRvZ2dsZUF0dHJpYnV0ZSgiaGFzLXRlbXBsYXRlcyIsITAsdGhpcy4kLmhlYWRlcik7ImZvb3RlclRlbXBsYXRlIj09PWEuZGV0YWlsLnBhdGgmJnRoaXMudG9nZ2xlQXR0cmlidXRlKCJoYXMtdGVtcGxhdGVzIiwhMCx0aGlzLiQuZm9vdGVyKTsvZnJvemVufGhpZGRlbi8udGVzdChhLmRldGFpbC5wYXRoKSYmdGhpcy5fZnJvemVuQ2VsbHNDaGFuZ2VkKCk7ImhpZGRlbiI9PT1hLmRldGFpbC5wYXRoJiZ0aGlzLl9ncmlkUmVzaXplSGFuZGxlcigpfSxfaGlkZU91dGVyU2Nyb2xsZXI6ZnVuY3Rpb24oYSxjKXtyZXR1cm4gMD09PWEmJiFjfSxfaGlkZVRhYmxlT3ZlcmZsb3c6ZnVuY3Rpb24oYSxjKXtyZXR1cm4gMD09PWEmJmN9LF9yb3dEZXRhaWxzVGVtcGxhdGVDaGFuZ2VkOmZ1bmN0aW9uKGEsYyxkKXt2b2lkIDAhPT1hJiZjJiZ2b2lkIDAhPT1kJiZBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKGMsZnVuY3Rpb24oZil7Zi5yb3dEZXRhaWxzVGVtcGxhdGU9CmF9KX0sX2NvbHVtblRyZWVDaGFuZ2VkOmZ1bmN0aW9uKGEsYyxkKXt2b2lkIDAhPT1hJiZjJiZ2b2lkIDAhPT1kJiYoUG9seW1lci5SZW5kZXJTdGF0dXMuYWZ0ZXJOZXh0UmVuZGVyKHRoaXMsdGhpcy5fdXBkYXRlKSx0aGlzLl9mcm96ZW5DZWxsc0NoYW5nZWQoKSx0aGlzLl9oYXNUZW1wbGF0ZXNDaGFuZ2VkKGEpLEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwoYyxmdW5jdGlvbihmKXtmLmNvbHVtbnM9YVthLmxlbmd0aC0xXX0pLHRoaXMuX2dyaWRSZXNpemVIYW5kbGVyKCksUG9seW1lci5kb20uZmx1c2godGhpcyksdGhpcy5fdXBkYXRlTGFzdENvbHVtbigpKX0sX3VwZGF0ZUxhc3RDb2x1bW46ZnVuY3Rpb24oKXtBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKFBvbHltZXIuZG9tKHRoaXMuZG9tSG9zdC5yb290KS5xdWVyeVNlbGVjdG9yQWxsKCIudmFhZGluLWdyaWQtcm93IiksZnVuY3Rpb24oYSl7YS51cGRhdGVMYXN0Q29sdW1uKCl9KX0sX3VwZGF0ZUhlYWRlckZvb3Rlck1ldHJpY3M6ZnVuY3Rpb24oKXt0aGlzLl9waHlzaWNhbFNpemVzJiYKUG9seW1lci5kb20uZmx1c2goKTt0aGlzLl91cGRhdGVIZWFkZXJGb290ZXJNZXRyaWNzU3luYygpO1BvbHltZXIuUmVuZGVyU3RhdHVzLmFmdGVyTmV4dFJlbmRlcih0aGlzLiQuaGVhZGVyLGZ1bmN0aW9uKCl7dGhpcy5fdXBkYXRlSGVhZGVyRm9vdGVyTWV0cmljc1N5bmMoKTt0aGlzLl9wZW5kaW5nU2Nyb2xsVG9TY2FsZWRJbmRleCYmdGhpcy5zY3JvbGxUb1NjYWxlZEluZGV4KHRoaXMuX3BlbmRpbmdTY3JvbGxUb1NjYWxlZEluZGV4KX0uYmluZCh0aGlzKSl9LF91cGRhdGVIZWFkZXJGb290ZXJNZXRyaWNzU3luYzpmdW5jdGlvbigpe3ZhciBhPXRoaXMuJC5oZWFkZXIuY2xpZW50SGVpZ2h0KyJweCIsYz10aGlzLiQuZm9vdGVyLmNsaWVudEhlaWdodCsicHgiO1t0aGlzLiQub3V0ZXJzaXplcix0aGlzLiQuZml4ZWRzaXplcix0aGlzLiQuaXRlbXNdLmZvckVhY2goZnVuY3Rpb24oZCl7ZC5zdHlsZS5ib3JkZXJUb3BXaWR0aD1hO2Quc3R5bGUuYm9yZGVyQm90dG9tV2lkdGg9CmN9KX0sX2hhc1RlbXBsYXRlc0NoYW5nZWQ6ZnVuY3Rpb24oYSl7dmFyIGM9ITEsZD0hMTthLmZvckVhY2goZnVuY3Rpb24oZil7cmV0dXJuIGYuZm9yRWFjaChmdW5jdGlvbihnKXtjPWN8fGcuaGVhZGVyVGVtcGxhdGU7ZD1kfHxnLmZvb3RlclRlbXBsYXRlfSl9KTt0aGlzLnRvZ2dsZUF0dHJpYnV0ZSgiaGFzLXRlbXBsYXRlcyIsYyx0aGlzLiQuaGVhZGVyKTt0aGlzLnRvZ2dsZUF0dHJpYnV0ZSgiaGFzLXRlbXBsYXRlcyIsZCx0aGlzLiQuZm9vdGVyKX0sX2NyZWF0ZVBvb2w6ZnVuY3Rpb24oYSl7Zm9yKHZhciBjPUFycmF5KGEpLGQ9MDtkPGE7ZCsrKXt2YXIgZj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ2YWFkaW4tZ3JpZC10YWJsZS1yb3ciKTtmLnRhcmdldD10aGlzLmRvbUhvc3Q7Y1tkXT1mO2Yuc2V0QXR0cmlidXRlKCJoaWRkZW4iLCIiKTtQb2x5bWVyLmRvbSh0aGlzLiQuaXRlbXMpLmFwcGVuZENoaWxkKGYpfXJldHVybiBjfSxfc2l6ZUNoYW5nZWQ6ZnVuY3Rpb24oYSwKYyxkKXtpZih2b2lkIDAhPT1hJiZ2b2lkIDAhPT1jJiZ2b2lkIDAhPT1kKXt2YXIgZj10aGlzLl9zY3JvbGxUb3AsZz10aGlzLmZpcnN0VmlzaWJsZUluZGV4K3RoaXMuX3ZpZHhPZmZzZXQ7dGhpcy5fdmlydHVhbENvdW50PU1hdGgubWluKGEsMUU1KTt0aGlzLl9waHlzaWNhbEluZGV4Rm9yS2V5PXt9O3RoaXMuX2xhc3RWaXNpYmxlSW5kZXhWYWw9dGhpcy5fZmlyc3RWaXNpYmxlSW5kZXhWYWw9bnVsbDt0aGlzLl92aWR4T2Zmc2V0PTA7dGhpcy5fcGh5c2ljYWxJdGVtc3x8KHRoaXMuX3BoeXNpY2FsQ291bnQ9TWF0aC5tYXgoMSxNYXRoLm1pbigyNSx0aGlzLl92aXJ0dWFsQ291bnQpKSx0aGlzLl9waHlzaWNhbEl0ZW1zPXRoaXMuX2NyZWF0ZVBvb2wodGhpcy5fcGh5c2ljYWxDb3VudCksdGhpcy5fcGh5c2ljYWxTaXplcz1BcnJheSh0aGlzLl9waHlzaWNhbENvdW50KSk7dGhpcy5faXRlbXNSZW5kZXJlZD0hMTt0aGlzLl9kZWJvdW5jZVRlbXBsYXRlKGZ1bmN0aW9uKCl7dGhpcy5fcmVuZGVyKCk7CnRoaXMuX3ZpZXdwb3J0SGVpZ2h0JiYodGhpcy5zY3JvbGxUb1NjYWxlZEluZGV4KE1hdGgubWluKGcsdGhpcy5zaXplKSksdGhpcy5fc2Nyb2xsVG9wPWYsdGhpcy5fc2Nyb2xsSGFuZGxlcigpLHRoaXMuZmx1c2hEZWJvdW5jZXIoInZhYWRpbi1ncmlkLXNjcm9sbGluZyIpKX0pfX0sX2Fzc2lnbk1vZGVsczpmdW5jdGlvbihhKXt0aGlzLl92aXJ0dWFsSW5kZXhUb0l0ZW09dGhpcy5fdmlydHVhbEluZGV4VG9JdGVtfHx7fTt0aGlzLl9pdGVyYXRlSXRlbXMoZnVuY3Rpb24oYyxkKXtjPXRoaXMuX3BoeXNpY2FsSXRlbXNbY107Yy5pbmRleCYmZGVsZXRlIHRoaXMuX3ZpcnR1YWxJbmRleFRvSXRlbVtjLmluZGV4XTtjLmluZGV4PWQrdGhpcy5fdmlkeE9mZnNldDt0aGlzLl92aXJ0dWFsSW5kZXhUb0l0ZW1bYy5pbmRleF09YztjLnRvZ2dsZUF0dHJpYnV0ZSgib2RkIixjLmluZGV4JTIpO2MudG9nZ2xlQXR0cmlidXRlKCJsYXN0cm93IixjLmluZGV4PT09dGhpcy5zaXplLTEpO2MudG9nZ2xlQXR0cmlidXRlKCJoaWRkZW4iLApjLmluZGV4Pj10aGlzLnNpemUpO3RoaXMuYmluZERhdGEoYy5pbmRleCxjKX0sYSl9LF9ncmlkUmVzaXplSGFuZGxlcjpmdW5jdGlvbigpe3RoaXMuX3VwZGF0ZUhlYWRlckZvb3Rlck1ldHJpY3MoKTt0aGlzLl9waHlzaWNhbFNpemVzJiYodGhpcy5fcGh5c2ljYWxJdGVtcy5mb3JFYWNoKGZ1bmN0aW9uKGEpe2EudXBkYXRlUm93RGV0YWlsc0NlbGxNZXRyaWNzKCl9KSx0aGlzLmRlYm91bmNlKCJ2YWFkaW4tZ3JpZC1yZXNpemluZyIsZnVuY3Rpb24oKXt0aGlzLl91cGRhdGUoKX0uYmluZCh0aGlzKSwxKSl9fSk7Cjwvc2NyaXB0PgoKCgoKPHNjcmlwdD4vL35+V0VCUEFUSH5+L3ZhYWRpbi1ncmlkL3ZhYWRpbi1ncmlkLWNvbHVtbi5odG1sLmpzCndpbmRvdy52YWFkaW49d2luZG93LnZhYWRpbnx8e307dmFhZGluLmVsZW1lbnRzPXZhYWRpbi5lbGVtZW50c3x8e307dmFhZGluLmVsZW1lbnRzLmdyaWQ9dmFhZGluLmVsZW1lbnRzLmdyaWR8fHt9Owp2YWFkaW4uZWxlbWVudHMuZ3JpZC5Db2x1bW5CYXNlQmVoYXZpb3I9e3Byb3BlcnRpZXM6e3Jlc2l6YWJsZTp7dHlwZTpCb29sZWFuLHZhbHVlOmZ1bmN0aW9uKCl7aWYoInZhYWRpbi1ncmlkLWNvbHVtbi1ncm91cCIhPT10aGlzLmxvY2FsTmFtZSl7dmFyIGE9UG9seW1lci5kb20odGhpcykucGFyZW50Tm9kZTtyZXR1cm4gYSYmInZhYWRpbi1ncmlkLWNvbHVtbi1ncm91cCI9PT1hLmxvY2FsTmFtZT9hLnJlc2l6YWJsZXx8ITE6ITF9fX0saGVhZGVyVGVtcGxhdGU6e3R5cGU6T2JqZWN0fSxmb290ZXJUZW1wbGF0ZTp7dHlwZTpPYmplY3R9LGZyb3plbjp7dHlwZTpCb29sZWFuLG5vdGlmeTohMCx2YWx1ZTohMX0saGlkZGVuOnt0eXBlOkJvb2xlYW4sbm90aWZ5OiEwfSxfbGFzdEZyb3plbjp7dHlwZTpCb29sZWFuLG5vdGlmeTohMCx2YWx1ZTohMX0sX29yZGVyOk51bWJlcixfcmVvcmRlclN0YXR1czpCb29sZWFufSxvYnNlcnZlcnM6WyJfZm9vdGVyVGVtcGxhdGVDaGFuZ2VkKGZvb3RlclRlbXBsYXRlKSIsCiJfaGVhZGVyVGVtcGxhdGVDaGFuZ2VkKGhlYWRlclRlbXBsYXRlKSIsIl9sYXN0RnJvemVuQ2hhbmdlZChfbGFzdEZyb3plbikiXSxjcmVhdGVkOmZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShjKXswPD1jLmFkZGVkTm9kZXMubGVuZ3RoJiYodGhpcy5oZWFkZXJUZW1wbGF0ZT10aGlzLl9wcmVwYXJlSGVhZGVyVGVtcGxhdGUoKSx0aGlzLmZvb3RlclRlbXBsYXRlPXRoaXMuX3ByZXBhcmVGb290ZXJUZW1wbGF0ZSgpLHRoaXMudGVtcGxhdGU9dGhpcy5fcHJlcGFyZUJvZHlUZW1wbGF0ZSgpKX10aGlzLl90ZW1wbGF0ZU9ic2VydmVyPVBvbHltZXIuRWxlbWVudD9uZXcgUG9seW1lci5GbGF0dGVuZWROb2Rlc09ic2VydmVyKHRoaXMsYSk6UG9seW1lci5kb20odGhpcykub2JzZXJ2ZU5vZGVzKGEpfSxfcHJlcGFyZUhlYWRlclRlbXBsYXRlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByZXBhcmVUZW1wbGF0aXplcih0aGlzLl9maW5kVGVtcGxhdGUoInRlbXBsYXRlLmhlYWRlciIpfHxudWxsLAp7fSl9LF9wcmVwYXJlRm9vdGVyVGVtcGxhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJlcGFyZVRlbXBsYXRpemVyKHRoaXMuX2ZpbmRUZW1wbGF0ZSgidGVtcGxhdGUuZm9vdGVyIil8fG51bGwse30pfSxfcHJlcGFyZUJvZHlUZW1wbGF0ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcmVwYXJlVGVtcGxhdGl6ZXIodGhpcy5fZmluZFRlbXBsYXRlKCJ0ZW1wbGF0ZTpub3QoLmhlYWRlcik6bm90KC5mb290ZXIpIix7fSkpfSxfcHJlcGFyZVRlbXBsYXRpemVyOmZ1bmN0aW9uKGEsYyl7aWYoYSYmIWEudGVtcGxhdGl6ZXIpe3ZhciBkPW5ldyB2YWFkaW4uZWxlbWVudHMuZ3JpZC5UZW1wbGF0aXplcjtkLmRhdGFIb3N0PXRoaXMuZGF0YUhvc3Q7ZC5faW5zdGFuY2VQcm9wcz1jfHxkLl9pbnN0YW5jZVByb3BzO2QudGVtcGxhdGU9YTthLnRlbXBsYXRpemVyPWR9cmV0dXJuIGF9LF9zZWxlY3RGaXJzdFRlbXBsYXRlOmZ1bmN0aW9uKGEpe3JldHVybiBBcnJheS5wcm90b3R5cGUuZmlsdGVyLmNhbGwoUG9seW1lci5kb20odGhpcykucXVlcnlTZWxlY3RvckFsbChhKSwKZnVuY3Rpb24oYyl7cmV0dXJuIFBvbHltZXIuZG9tKGMpLnBhcmVudE5vZGU9PT10aGlzfS5iaW5kKHRoaXMpKVswXX0sX2ZpbmRUZW1wbGF0ZTpmdW5jdGlvbihhKXsoYT10aGlzLl9zZWxlY3RGaXJzdFRlbXBsYXRlKGEpKSYmdGhpcy5kYXRhSG9zdCYmKGEuX3Jvb3REYXRhSG9zdD10aGlzLmRhdGFIb3N0Ll9yb290RGF0YUhvc3R8fHRoaXMuZGF0YUhvc3QpO3JldHVybiBhfSxfaGVhZGVyVGVtcGxhdGVDaGFuZ2VkOmZ1bmN0aW9uKGEpe3RoaXMuZmlyZSgicHJvcGVydHktY2hhbmdlZCIse3BhdGg6ImhlYWRlclRlbXBsYXRlIix2YWx1ZTphfSl9LF9mb290ZXJUZW1wbGF0ZUNoYW5nZWQ6ZnVuY3Rpb24oYSl7dGhpcy5maXJlKCJwcm9wZXJ0eS1jaGFuZ2VkIix7cGF0aDoiZm9vdGVyVGVtcGxhdGUiLHZhbHVlOmF9KX0sX2ZsZXhHcm93Q2hhbmdlZDpmdW5jdGlvbihhKXt0aGlzLmZpcmUoInByb3BlcnR5LWNoYW5nZWQiLHtwYXRoOiJmbGV4R3JvdyIsdmFsdWU6YX0pfSxfd2lkdGhDaGFuZ2VkOmZ1bmN0aW9uKGEpe3RoaXMuZmlyZSgicHJvcGVydHktY2hhbmdlZCIsCntwYXRoOiJ3aWR0aCIsdmFsdWU6YX0pfSxfbGFzdEZyb3plbkNoYW5nZWQ6ZnVuY3Rpb24oYSl7dGhpcy5maXJlKCJwcm9wZXJ0eS1jaGFuZ2VkIix7cGF0aDoibGFzdEZyb3plbiIsdmFsdWU6YX0pfX07CnZhYWRpbi5lbGVtZW50cy5ncmlkLkNvbHVtbkJlaGF2aW9ySW1wbD17cHJvcGVydGllczp7d2lkdGg6e3R5cGU6U3RyaW5nLHZhbHVlOiIxMDBweCJ9LGZsZXhHcm93Ont0eXBlOk51bWJlcix2YWx1ZToxfSx0ZW1wbGF0ZTp7dHlwZTpPYmplY3R9fSxvYnNlcnZlcnM6Il9mbGV4R3Jvd0NoYW5nZWQoZmxleEdyb3cpO193aWR0aENoYW5nZWQod2lkdGgpO190ZW1wbGF0ZUNoYW5nZWQodGVtcGxhdGUpO19mcm96ZW5DaGFuZ2VkKGZyb3plbiwgaXNBdHRhY2hlZCk7X2hpZGRlbkNoYW5nZWQoaGlkZGVuKTtfb3JkZXJDaGFuZ2VkKF9vcmRlcik7X3Jlb3JkZXJTdGF0dXNDaGFuZ2VkKF9yZW9yZGVyU3RhdHVzKTtfcmVzaXphYmxlQ2hhbmdlZChyZXNpemFibGUpIi5zcGxpdCgiOyIpLF9mcm96ZW5DaGFuZ2VkOmZ1bmN0aW9uKGEsYyl7dm9pZCAwIT09YSYmdm9pZCAwIT09YyYmKHZvaWQgMD09PXRoaXMuX29sZEZyb3plbiYmITE9PT1hfHx0aGlzLmZpcmUoInByb3BlcnR5LWNoYW5nZWQiLAp7cGF0aDoiZnJvemVuIix2YWx1ZTphfSksdGhpcy5fb2xkRnJvemVuPWEpfSxfdGVtcGxhdGVDaGFuZ2VkOmZ1bmN0aW9uKGEpe2EmJmEudGVtcGxhdGl6ZXImJlBvbHltZXIuZG9tKHRoaXMucm9vdCkuYXBwZW5kQ2hpbGQoYS50ZW1wbGF0aXplcik7dGhpcy5maXJlKCJwcm9wZXJ0eS1jaGFuZ2VkIix7cGF0aDoidGVtcGxhdGUiLHZhbHVlOmF9LHtidWJibGVzOiExfSl9LF9oaWRkZW5DaGFuZ2VkOmZ1bmN0aW9uKGEpe3RoaXMuZmlyZSgicHJvcGVydHktY2hhbmdlZCIse3BhdGg6ImhpZGRlbiIsdmFsdWU6YX0pfSxfb3JkZXJDaGFuZ2VkOmZ1bmN0aW9uKGEpe3RoaXMuZmlyZSgicHJvcGVydHktY2hhbmdlZCIse3BhdGg6Im9yZGVyIix2YWx1ZTphfSl9LF9yZW9yZGVyU3RhdHVzQ2hhbmdlZDpmdW5jdGlvbihhKXt0aGlzLmZpcmUoInByb3BlcnR5LWNoYW5nZWQiLHtwYXRoOiJyZW9yZGVyU3RhdHVzIix2YWx1ZTphfSl9LF9yZXNpemFibGVDaGFuZ2VkOmZ1bmN0aW9uKGEpe3RoaXMuZmlyZSgicHJvcGVydHktY2hhbmdlZCIsCntwYXRoOiJyZXNpemFibGUiLHZhbHVlOmF9KX19O3ZhYWRpbi5lbGVtZW50cy5ncmlkLkNvbHVtbkJlaGF2aW9yPVt2YWFkaW4uZWxlbWVudHMuZ3JpZC5Db2x1bW5CYXNlQmVoYXZpb3IsdmFhZGluLmVsZW1lbnRzLmdyaWQuQ29sdW1uQmVoYXZpb3JJbXBsXTsKPC9zY3JpcHQ+Cgo8ZG9tLW1vZHVsZSBpZD0idmFhZGluLWdyaWQtY29sdW1uIj4KICA8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdmFhZGluLWdyaWQvdmFhZGluLWdyaWQtY29sdW1uLmh0bWwtMi5qcwpQb2x5bWVyKHtpczoidmFhZGluLWdyaWQtY29sdW1uIixiZWhhdmlvcnM6W3ZhYWRpbi5lbGVtZW50cy5ncmlkLkNvbHVtbkJlaGF2aW9yXX0pOwo8L3NjcmlwdD4KPC9kb20tbW9kdWxlPgoKCgoKPHNjcmlwdD4vL35+V0VCUEFUSH5+L3ZhYWRpbi1ncmlkL3ZhYWRpbi1ncmlkLWFycmF5LWRhdGEtcHJvdmlkZXItYmVoYXZpb3IuaHRtbC5qcwp3aW5kb3cudmFhZGluPXdpbmRvdy52YWFkaW58fHt9O3ZhYWRpbi5lbGVtZW50cz12YWFkaW4uZWxlbWVudHN8fHt9O3ZhYWRpbi5lbGVtZW50cy5ncmlkPXZhYWRpbi5lbGVtZW50cy5ncmlkfHx7fTsKdmFhZGluLmVsZW1lbnRzLmdyaWQuQXJyYXlEYXRhUHJvdmlkZXJCZWhhdmlvcj17cHJvcGVydGllczp7aXRlbXM6QXJyYXl9LG9ic2VydmVyczpbIl9pdGVtc0NoYW5nZWQoaXRlbXMsIGl0ZW1zLiopIl0sX2l0ZW1zQ2hhbmdlZDpmdW5jdGlvbihhLGMpe3ZvaWQgMCE9PWEmJnZvaWQgMCE9PWMmJih0aGlzLnNpemU9KGF8fFtdKS5sZW5ndGgsdGhpcy5kYXRhUHJvdmlkZXI9dGhpcy5kYXRhUHJvdmlkZXJ8fHRoaXMuX2FycmF5RGF0YVByb3ZpZGVyLHRoaXMuY2xlYXJDYWNoZSgpKX0sX2FycmF5RGF0YVByb3ZpZGVyOmZ1bmN0aW9uKGEsYyl7dmFyIGQ9KHRoaXMuaXRlbXN8fFtdKS5zbGljZSgwKTt0aGlzLl9jaGVja1BhdGhzKHRoaXMuX2ZpbHRlcnMsImZpbHRlcmluZyIsZCkmJihkPXRoaXMuX2ZpbHRlcihkKSk7dGhpcy5zaXplPWQubGVuZ3RoO2Euc29ydE9yZGVycy5sZW5ndGgmJnRoaXMuX2NoZWNrUGF0aHModGhpcy5fc29ydGVycywic29ydGluZyIsZCkmJihkPWQuc29ydCh0aGlzLl9tdWx0aVNvcnQuYmluZCh0aGlzKSkpOwp2YXIgZj1hLnBhZ2UqYS5wYWdlU2l6ZTtjKGQuc2xpY2UoZixmK2EucGFnZVNpemUpLGQubGVuZ3RoKX0sX2NoZWNrUGF0aHM6ZnVuY3Rpb24oYSxjLGQpe2lmKCFkLmxlbmd0aClyZXR1cm4hMTt2YXIgZj0hMCxnO2ZvcihnIGluIGEpe3ZhciBsPWFbZ10ucGF0aDtpZihsJiYtMSE9PWwuaW5kZXhPZigiLiIpKXt2YXIgaz1sLnJlcGxhY2UoL1wuW15cLl0qJC8sIiIpO3ZvaWQgMD09PVBvbHltZXIuQmFzZS5nZXQoayxkWzBdKSYmKGNvbnNvbGUud2FybignUGF0aCAiJytsKyciIHVzZWQgZm9yICcrYysiIGRvZXMgbm90IGV4aXN0IGluIGFsbCBvZiB0aGUgaXRlbXMsICIrYysiIGlzIGRpc2FibGVkLiIpLGY9ITEpfX1yZXR1cm4gZn0sX211bHRpU29ydDpmdW5jdGlvbihhLGMpe3JldHVybiB0aGlzLl9zb3J0ZXJzLm1hcChmdW5jdGlvbihkKXtyZXR1cm4iYXNjIj09PWQuZGlyZWN0aW9uP3RoaXMuX2NvbXBhcmUoUG9seW1lci5CYXNlLmdldChkLnBhdGgsYSksUG9seW1lci5CYXNlLmdldChkLnBhdGgsCmMpKToiZGVzYyI9PT1kLmRpcmVjdGlvbj90aGlzLl9jb21wYXJlKFBvbHltZXIuQmFzZS5nZXQoZC5wYXRoLGMpLFBvbHltZXIuQmFzZS5nZXQoZC5wYXRoLGEpKTowfSx0aGlzKS5yZWR1Y2UoZnVuY3Rpb24oZCxmKXtyZXR1cm4gZD9kOmZ9LDApfSxfbm9ybWFsaXplRW1wdHlWYWx1ZTpmdW5jdGlvbihhKXtyZXR1cm4gMDw9W3ZvaWQgMCxudWxsXS5pbmRleE9mKGEpPyIiOmlzTmFOKGEpP2EudG9TdHJpbmcoKTphfSxfY29tcGFyZTpmdW5jdGlvbihhLGMpe2E9dGhpcy5fbm9ybWFsaXplRW1wdHlWYWx1ZShhKTtjPXRoaXMuX25vcm1hbGl6ZUVtcHR5VmFsdWUoYyk7cmV0dXJuIGE8Yz8tMTphPmM/MTowfSxfZmlsdGVyOmZ1bmN0aW9uKGEpe3JldHVybiBhLmZpbHRlcihmdW5jdGlvbihjKXtyZXR1cm4gMD09PXRoaXMuX2ZpbHRlcnMuZmlsdGVyKGZ1bmN0aW9uKGQpe3JldHVybi0xPT09dGhpcy5fbm9ybWFsaXplRW1wdHlWYWx1ZShQb2x5bWVyLkJhc2UuZ2V0KGQucGF0aCxjKSkudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpLmluZGV4T2YoZC52YWx1ZS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkpfS5iaW5kKHRoaXMpKS5sZW5ndGh9LAp0aGlzKX19Owo8L3NjcmlwdD4KCjxzY3JpcHQ+Ly9+fldFQlBBVEh+fi92YWFkaW4tZ3JpZC92YWFkaW4tZ3JpZC1keW5hbWljLWNvbHVtbnMtYmVoYXZpb3IuaHRtbC5qcwp3aW5kb3cudmFhZGluPXdpbmRvdy52YWFkaW58fHt9O3ZhYWRpbi5lbGVtZW50cz12YWFkaW4uZWxlbWVudHN8fHt9O3ZhYWRpbi5lbGVtZW50cy5ncmlkPXZhYWRpbi5lbGVtZW50cy5ncmlkfHx7fTsKdmFhZGluLmVsZW1lbnRzLmdyaWQuRHluYW1pY0NvbHVtbnNCZWhhdmlvcj17cmVhZHk6ZnVuY3Rpb24oKXt0aGlzLl9hZGROb2RlT2JzZXJ2ZXIoKX0sX2hhc0NvbHVtbkdyb3VwczpmdW5jdGlvbihhKXtmb3IodmFyIGM9MDtjPGEubGVuZ3RoO2MrKylpZigidmFhZGluLWdyaWQtY29sdW1uLWdyb3VwIj09PWFbY10ubG9jYWxOYW1lKXJldHVybiEwO3JldHVybiExfSxfZ2V0Q2hpbGRDb2x1bW5zOmZ1bmN0aW9uKGEpe3JldHVybiBQb2x5bWVyLmRvbShhKS5xdWVyeURpc3RyaWJ1dGVkRWxlbWVudHMoInZhYWRpbi1ncmlkLWNvbHVtbiwgdmFhZGluLWdyaWQtY29sdW1uLWdyb3VwLCB2YWFkaW4tZ3JpZC1zZWxlY3Rpb24tY29sdW1uIil9LF9mbGF0dGVuQ29sdW1uR3JvdXBzOmZ1bmN0aW9uKGEpe3JldHVybiBhLm1hcChmdW5jdGlvbihjKXtyZXR1cm4idmFhZGluLWdyaWQtY29sdW1uLWdyb3VwIj09PWMubG9jYWxOYW1lP3RoaXMuX2dldENoaWxkQ29sdW1ucyhjKTpbY119LHRoaXMpLnJlZHVjZShmdW5jdGlvbihjLApkKXtyZXR1cm4gYy5jb25jYXQoZCl9LFtdKX0sX2dldENvbHVtblRyZWU6ZnVuY3Rpb24oKXtmb3IodmFyIGE9W10sYz10aGlzLnF1ZXJ5QWxsRWZmZWN0aXZlQ2hpbGRyZW4oInZhYWRpbi1ncmlkLWNvbHVtbiwgdmFhZGluLWdyaWQtY29sdW1uLWdyb3VwLCB2YWFkaW4tZ3JpZC1zZWxlY3Rpb24tY29sdW1uIik7Oyl7YS5wdXNoKGMpO2lmKCF0aGlzLl9oYXNDb2x1bW5Hcm91cHMoYykpYnJlYWs7Yz10aGlzLl9mbGF0dGVuQ29sdW1uR3JvdXBzKGMpfXJldHVybiBhfSxfdXBkYXRlQ29sdW1uVHJlZTpmdW5jdGlvbigpe3ZhciBhPXRoaXMuX2dldENvbHVtblRyZWUoKTt0aGlzLl9hcnJheUVxdWFscyhhLHRoaXMuX2NvbHVtblRyZWUpfHwodGhpcy5fY29sdW1uVHJlZT1hKX0sX2FkZE5vZGVPYnNlcnZlcjpmdW5jdGlvbigpe3RoaXMuX29ic2VydmVyPVBvbHltZXIuZG9tKHRoaXMpLm9ic2VydmVOb2RlcyhmdW5jdGlvbihhKXtmdW5jdGlvbiBjKGQpe3JldHVybiBkLm5vZGVUeXBlPT09Ck5vZGUuRUxFTUVOVF9OT0RFJiYvXnZhYWRpbi1ncmlkLShjb2x1bW58c2VsZWN0aW9uKS9pLnRlc3QoZC5sb2NhbE5hbWUpfSgwPGEuYWRkZWROb2Rlcy5maWx0ZXIoYykubGVuZ3RofHwwPGEucmVtb3ZlZE5vZGVzLmZpbHRlcihjKS5sZW5ndGgpJiZ0aGlzLl91cGRhdGVDb2x1bW5UcmVlKCk7KFBvbHltZXIuU2V0dGluZ3MudXNlTmF0aXZlU2hhZG93fHxQb2x5bWVyLlNldHRpbmdzLnVzZVNoYWRvdykmJlBvbHltZXIuZG9tKHRoaXMpLmFwcGVuZENoaWxkKHRoaXMuJC5mb290ZXJGb2N1c1RyYXApO3RoaXMuZGVib3VuY2UoImNoZWNrLWltcG9ydHMiLHRoaXMuX2NoZWNrSW1wb3J0cywyRTMpfS5iaW5kKHRoaXMpKX0sX2FycmF5RXF1YWxzOmZ1bmN0aW9uKGEsYyl7aWYoIWF8fCFjfHxhLmxlbmd0aCE9Yy5sZW5ndGgpcmV0dXJuITE7Zm9yKHZhciBkPTAsZj1hLmxlbmd0aDtkPGY7ZCsrKWlmKGFbZF1pbnN0YW5jZW9mIEFycmF5JiZjW2RdaW5zdGFuY2VvZiBBcnJheSl7aWYoIXRoaXMuX2FycmF5RXF1YWxzKGFbZF0sCmNbZF0pKXJldHVybiExfWVsc2UgaWYoYVtkXSE9Y1tkXSlyZXR1cm4hMTtyZXR1cm4hMH0sX2NoZWNrSW1wb3J0czpmdW5jdGlvbigpe1sidmFhZGluLWdyaWQtY29sdW1uLWdyb3VwIiwidmFhZGluLWdyaWQtc29ydGVyIiwidmFhZGluLWdyaWQtZmlsdGVyIiwidmFhZGluLWdyaWQtc2VsZWN0aW9uLWNvbHVtbiJdLmZvckVhY2goZnVuY3Rpb24oYSl7dmFyIGM9UG9seW1lci5kb20odGhpcykucXVlcnlTZWxlY3RvcihhKTshY3x8KFBvbHltZXIuaXNJbnN0YW5jZT9Qb2x5bWVyLmlzSW5zdGFuY2UoYyk6YyBpbnN0YW5jZW9mIFBvbHltZXIuRWxlbWVudCl8fGNvbnNvbGUud2FybigiTWFrZSBzdXJlIHlvdSBoYXZlIGltcG9ydGVkIHRoZSByZXF1aXJlZCBtb2R1bGUgZm9yIFx4M2MiK2ErIlx4M2UgZWxlbWVudC4iKX0sdGhpcyl9fTsKPC9zY3JpcHQ+CgoKPHNjcmlwdD4vL35+V0VCUEFUSH5+L3ZhYWRpbi1ncmlkL3ZhYWRpbi1ncmlkLXNvcnQtYmVoYXZpb3IuaHRtbC5qcwp3aW5kb3cudmFhZGluPXdpbmRvdy52YWFkaW58fHt9O3ZhYWRpbi5lbGVtZW50cz12YWFkaW4uZWxlbWVudHN8fHt9O3ZhYWRpbi5lbGVtZW50cy5ncmlkPXZhYWRpbi5lbGVtZW50cy5ncmlkfHx7fTsKdmFhZGluLmVsZW1lbnRzLmdyaWQuU29ydEJlaGF2aW9yPXtwcm9wZXJ0aWVzOnttdWx0aVNvcnQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sX3NvcnRlcnM6e3R5cGU6QXJyYXksdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm5bXX19LF9wcmV2aW91c1NvcnRlcnM6e3R5cGU6QXJyYXksdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm5bXX19fSxsaXN0ZW5lcnM6eyJzb3J0ZXItY2hhbmdlZCI6Il9vblNvcnRlckNoYW5nZWQifSxyZWFkeTpmdW5jdGlvbigpe1BvbHltZXIuRWxlbWVudCYmIVBvbHltZXIuU2V0dGluZ3MudXNlTmF0aXZlU2hhZG93JiZ0aGlzLmFzeW5jKGZ1bmN0aW9uKCl7dmFyIGE9UG9seW1lci5kb20odGhpcykucXVlcnlTZWxlY3RvckFsbCgidmFhZGluLWdyaWQtc29ydGVyIik7QXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbChhLGZ1bmN0aW9uKGMpe2MuZmlyZSYmYy5maXJlKCJzb3J0ZXItY2hhbmdlZCIpfSl9KX0sX29uU29ydGVyQ2hhbmdlZDpmdW5jdGlvbihhKXt2YXIgYz0KYS50YXJnZXQ7dGhpcy5fcmVtb3ZlQXJyYXlJdGVtKHRoaXMuX3NvcnRlcnMsYyk7Yy5fb3JkZXI9bnVsbDt0aGlzLm11bHRpU29ydD8oYy5kaXJlY3Rpb24mJnRoaXMuX3NvcnRlcnMudW5zaGlmdChjKSx0aGlzLl9zb3J0ZXJzLmZvckVhY2goZnVuY3Rpb24oZCxmKXtkLl9vcmRlcj0xPHRoaXMuX3NvcnRlcnMubGVuZ3RoP2Y6bnVsbH0sdGhpcykpOih0aGlzLl9zb3J0ZXJzLmZvckVhY2goZnVuY3Rpb24oZCl7ZC5fb3JkZXI9bnVsbDtkLmRpcmVjdGlvbj1udWxsfSksYy5kaXJlY3Rpb24mJih0aGlzLl9zb3J0ZXJzPVtjXSkpO2Euc3RvcFByb3BhZ2F0aW9uKCk7dGhpcy5kYXRhUHJvdmlkZXImJkpTT04uc3RyaW5naWZ5KHRoaXMuX3ByZXZpb3VzU29ydGVycykhPT1KU09OLnN0cmluZ2lmeSh0aGlzLl9tYXBTb3J0ZXJzKCkpJiZ0aGlzLmNsZWFyQ2FjaGUoKTt0aGlzLl9wcmV2aW91c1NvcnRlcnM9dGhpcy5fbWFwU29ydGVycygpfSxfbWFwU29ydGVyczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zb3J0ZXJzLm1hcChmdW5jdGlvbihhKXtyZXR1cm57cGF0aDphLnBhdGgsCmRpcmVjdGlvbjphLmRpcmVjdGlvbn19KX0sX3JlbW92ZUFycmF5SXRlbTpmdW5jdGlvbihhLGMpe2M9YS5pbmRleE9mKGMpOy0xPGMmJmEuc3BsaWNlKGMsMSl9fTsKPC9zY3JpcHQ+Cgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdmFhZGluLWdyaWQvdmFhZGluLWdyaWQtZmlsdGVyLWJlaGF2aW9yLmh0bWwuanMKd2luZG93LnZhYWRpbj13aW5kb3cudmFhZGlufHx7fTt2YWFkaW4uZWxlbWVudHM9dmFhZGluLmVsZW1lbnRzfHx7fTt2YWFkaW4uZWxlbWVudHMuZ3JpZD12YWFkaW4uZWxlbWVudHMuZ3JpZHx8e307dmFhZGluLmVsZW1lbnRzLmdyaWQuRmlsdGVyQmVoYXZpb3I9e3Byb3BlcnRpZXM6e19maWx0ZXJzOnt0eXBlOkFycmF5LHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuW119fX0sbGlzdGVuZXJzOnsiZmlsdGVyLWNoYW5nZWQiOiJfZmlsdGVyQ2hhbmdlZCJ9LF9maWx0ZXJDaGFuZ2VkOmZ1bmN0aW9uKGEpey0xPT09dGhpcy5fZmlsdGVycy5pbmRleE9mKGEudGFyZ2V0KSYmdGhpcy5fZmlsdGVycy5wdXNoKGEudGFyZ2V0KTthLnN0b3BQcm9wYWdhdGlvbigpO3RoaXMuZGF0YVByb3ZpZGVyJiZ0aGlzLmNsZWFyQ2FjaGUoKX0sX21hcEZpbHRlcnM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZmlsdGVycy5tYXAoZnVuY3Rpb24oYSl7cmV0dXJue3BhdGg6YS5wYXRoLHZhbHVlOmEudmFsdWV9fSl9fTsKPC9zY3JpcHQ+CgoKCjxkb20tbW9kdWxlIGlkPSJ2YWFkaW4tZ3JpZCI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgaGVpZ2h0OiA0MDBweDsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1wcmltYXJ5LWJhY2tncm91bmQtY29sb3IsICNmZmYpOwogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tZGl2aWRlci1jb2xvciwgcmdiYSgwLCAwLCAwLCAwLjA4KSk7CiAgICAgIH0KCiAgICAgIDpob3N0KDpmb2N1cykgewogICAgICAgIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogdHJhbnNwYXJlbnQ7CiAgICAgIH0KCiAgICAgIDpob3N0KDpmb2N1cykgewogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgIH0KCiAgICAgICNzY3JvbGxlciB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxzdHlsZSBpbmNsdWRlPSJ2YWFkaW4tZ3JpZC10YWJsZS1zY3JvbGwtc3R5bGVzIj48L3N0eWxlPgogICAgPHN0eWxlIGluY2x1ZGU9InZhYWRpbi1ncmlkLXJvdy1kZXRhaWxzLXN0eWxlcyI+PC9zdHlsZT4KICAgIDxzdHlsZSBpbmNsdWRlPSJ2YWFkaW4tZ3JpZC10YWJsZS1zdHlsZXMiPjwvc3R5bGU+CgogICAgPHN0eWxlIGluY2x1ZGU9InZhYWRpbi1ncmlkLXRhYmxlLXRoZW1hYmlsaXR5LXN0eWxlcyI+PC9zdHlsZT4KICAgIDxzdHlsZSBpbmNsdWRlPSJ2YWFkaW4tZ3JpZC1zZWxlY3Rpb24tdGhlbWFiaWxpdHktc3R5bGVzIj48L3N0eWxlPgogICAgPHN0eWxlIGluY2x1ZGU9InZhYWRpbi1ncmlkLW5hdmlnYXRpb24tdGhlbWFiaWxpdHktc3R5bGVzIj48L3N0eWxlPgogICAgPHN0eWxlIGluY2x1ZGU9InZhYWRpbi1ncmlkLWFjdGl2ZS1pdGVtLXRoZW1hYmlsaXR5LXN0eWxlcyI+PC9zdHlsZT4KICAgIDxzdHlsZSBpbmNsdWRlPSJ2YWFkaW4tZ3JpZC1yb3ctZGV0YWlscy10aGVtYWJpbGl0eS1zdHlsZXMiPjwvc3R5bGU+CiAgICA8c3R5bGUgaW5jbHVkZT0idmFhZGluLWdyaWQtY29sdW1uLXJlb3JkZXJpbmctdGhlbWFiaWxpdHktc3R5bGVzIj48L3N0eWxlPgoKICAgIDx2YWFkaW4tZ3JpZC10YWJsZSBpZD0ic2Nyb2xsZXIiIGxvYWRpbmckPSJbW19sb2FkaW5nXV0iIGJpbmQtZGF0YT0iW1tfYmluZERhdGFdXSIgc2l6ZT0iW1tzaXplXV0iIGNvbHVtbi10cmVlPSJbW19jb2x1bW5UcmVlXV0iIHJvdy1kZXRhaWxzLXRlbXBsYXRlPSJbW19yb3dEZXRhaWxzVGVtcGxhdGVdXSIgY29sdW1uLXJlb3JkZXJpbmctYWxsb3dlZD0iW1tjb2x1bW5SZW9yZGVyaW5nQWxsb3dlZF1dIj4KICAgICAgPHZhYWRpbi1ncmlkLXRhYmxlLWhlYWRlciBpZD0iaGVhZGVyIiBzbG90PSJoZWFkZXIiIHRhcmdldD0iW1tfZ2V0Q29udGVudFRhcmdldCgpXV0iIGNvbHVtbi10cmVlPSJbW19jb2x1bW5UcmVlXV0iPjwvdmFhZGluLWdyaWQtdGFibGUtaGVhZGVyPgogICAgICA8dmFhZGluLWdyaWQtdGFibGUtYm9keSBpZD0iaXRlbXMiIHNsb3Q9Iml0ZW1zIj48L3ZhYWRpbi1ncmlkLXRhYmxlLWJvZHk+CiAgICAgIDx2YWFkaW4tZ3JpZC10YWJsZS1mb290ZXIgaWQ9ImZvb3RlciIgc2xvdD0iZm9vdGVyIiB0YXJnZXQ9IltbX2dldENvbnRlbnRUYXJnZXQoKV1dIiBjb2x1bW4tdHJlZT0iW1tfY29sdW1uVHJlZV1dIj48L3ZhYWRpbi1ncmlkLXRhYmxlLWZvb3Rlcj4KCiAgICAgIAogICAgICA8c2xvdCBuYW1lPSJmb290ZXJGb2N1c1RyYXAiPjwvc2xvdD4KCiAgICAgIAogICAgICAKICAgICAgPHNsb3Q+PC9zbG90PgoKICAgICAgPHZhYWRpbi1ncmlkLXRhYmxlLWZvY3VzLXRyYXAgaWQ9ImZvb3RlckZvY3VzVHJhcCIgc2xvdD0iZm9vdGVyRm9jdXNUcmFwIiBvbi1mb2N1cy1nYWluZWQ9Il9vbkZvb3RlckZvY3VzIiBvbi1mb2N1cy1sb3N0PSJfb25Gb2N1c291dCI+CiAgICAgIDwvdmFhZGluLWdyaWQtdGFibGUtZm9jdXMtdHJhcD4KICAgIDwvdmFhZGluLWdyaWQtdGFibGU+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPgoKPHNjcmlwdD4vL35+V0VCUEFUSH5+L3ZhYWRpbi1ncmlkL3ZhYWRpbi1ncmlkLmh0bWwuanMKUG9seW1lcih7aXM6InZhYWRpbi1ncmlkIixwcm9wZXJ0aWVzOntfY29sdW1uVHJlZTp7dHlwZTpBcnJheSxub3RpZnk6ITB9LHNpemU6TnVtYmVyLF9yb3dEZXRhaWxzVGVtcGxhdGU6T2JqZWN0LF9iaW5kRGF0YTp7dHlwZTpPYmplY3QsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZ2V0SXRlbS5iaW5kKHRoaXMpfX19LGJlaGF2aW9yczpbUG9seW1lci5Jcm9uQTExeUtleXNCZWhhdmlvcixQb2x5bWVyLklyb25SZXNpemFibGVCZWhhdmlvcix2YWFkaW4uZWxlbWVudHMuZ3JpZC5BY3RpdmVJdGVtQmVoYXZpb3IsdmFhZGluLmVsZW1lbnRzLmdyaWQuUm93RGV0YWlsc0JlaGF2aW9yLHZhYWRpbi5lbGVtZW50cy5ncmlkLkRhdGFQcm92aWRlckJlaGF2aW9yLHZhYWRpbi5lbGVtZW50cy5ncmlkLkR5bmFtaWNDb2x1bW5zQmVoYXZpb3IsdmFhZGluLmVsZW1lbnRzLmdyaWQuQXJyYXlEYXRhUHJvdmlkZXJCZWhhdmlvcix2YWFkaW4uZWxlbWVudHMuZ3JpZC5TZWxlY3Rpb25CZWhhdmlvciwKdmFhZGluLmVsZW1lbnRzLmdyaWQuU29ydEJlaGF2aW9yLHZhYWRpbi5lbGVtZW50cy5ncmlkLkZpbHRlckJlaGF2aW9yLHZhYWRpbi5lbGVtZW50cy5ncmlkLkNvbHVtblJlb3JkZXJpbmdCZWhhdmlvcix2YWFkaW4uZWxlbWVudHMuZ3JpZC5UYWJsZUtleWJvYXJkQmVoYXZpb3JdLGxpc3RlbmVyczp7InByb3BlcnR5LWNoYW5nZWQiOiJfY29sdW1uUHJvcENoYW5nZWQiLCJpcm9uLXJlc2l6ZSI6Il9ncmlkUmVzaXplSGFuZGxlciJ9LF91cGRhdGVJdGVtOmZ1bmN0aW9uKGEsYyl7YS5zdHlsZS5taW5IZWlnaHQ9Yz8iIjp0aGlzLiQuc2Nyb2xsZXIuX3BoeXNpY2FsQXZlcmFnZSsicHgiO2EuaXRlbT1jO2Euc2VsZWN0ZWQ9dGhpcy5faXNTZWxlY3RlZChjKTthLmV4cGFuZGVkPXRoaXMuX2lzRXhwYW5kZWQoYyk7YS5hY3RpdmU9bnVsbCE9PWMmJmM9PXRoaXMuYWN0aXZlSXRlbTthLmZvY3VzZWQ9YS5pbmRleD09PXRoaXMuJC5pdGVtcy5fZm9jdXNlZFJvd0luZGV4fSxfZ2V0Q29udGVudFRhcmdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzfSwKcmVhZHk6ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVDb2x1bW5UcmVlKCk7dGhpcy5fcm93RGV0YWlsc1RlbXBsYXRlPVBvbHltZXIuZG9tKHRoaXMpLnF1ZXJ5U2VsZWN0b3IoInRlbXBsYXRlLnJvdy1kZXRhaWxzIil8fHZvaWQgMDt0aGlzLiQuc2Nyb2xsZXIudGFyZ2V0PXRoaXM7bnVsbD09PWRvY3VtZW50LmRvY3R5cGUmJmNvbnNvbGUud2FybignXHgzY3ZhYWRpbi1ncmlkXHgzZSByZXF1aXJlcyB0aGUgInN0YW5kYXJkcyBtb2RlIiBkZWNsYXJhdGlvbi4gUGxlYXNlIGFkZCBceDNjIURPQ1RZUEUgaHRtbFx4M2UgdG8gdGhlIEhUTUwgZG9jdW1lbnQuJyl9LF9jb2x1bW5Qcm9wQ2hhbmdlZDpmdW5jdGlvbihhKXsiX2NoaWxkQ29sdW1ucyI9PT1hLmRldGFpbC5wYXRoJiZ0aGlzLl91cGRhdGVDb2x1bW5UcmVlKCk7YS5zdG9wUHJvcGFnYXRpb24oKX0sX2dyaWRSZXNpemVIYW5kbGVyOmZ1bmN0aW9uKCl7dGhpcy4kLnNjcm9sbGVyLl9ncmlkUmVzaXplSGFuZGxlcigpfX0pOwo8L3NjcmlwdD4KCgoKCgoKCgoKCjxkb20tbW9kdWxlIGlkPSJ0Zi1ocGFyYW1zLXNlc3Npb24tZ3JvdXAtZGV0YWlscyI+CiAgPHRlbXBsYXRlPgogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbWyFzZXNzaW9uR3JvdXBdXSI+CiAgICAgIDxkaXY+CiAgICAgICAgPGgzPk5vIHNlc3Npb24gZ3JvdXAgc2VsZWN0ZWQ8L2gzPgogICAgICAgIDxwPlBsZWFzZSBzZWxlY3QgYSBzZXNzaW9uIGdyb3VwIHRvIHNlZSBpdHMgbWV0cmljLWdyYXBocyBoZXJlLgogICAgICA8L2Rpdj4KICAgIDwvdGVtcGxhdGU+CiAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIV9oYXZlTWV0cmljcyh2aXNpYmxlU2NoZW1hLiopXV0iPgogICAgICA8ZGl2PgogICAgICAgIDxoMz5ObyBtZXRyaWNzIGFyZSBlbmFibGVkPC9oMz4KICAgICAgICA8cD5QbGVhc2UgZW5hYmxlIHNvbWUgbWV0cmljcyB0byBzZWUgY29udGVudCBoZXJlLgogICAgICA8L2Rpdj4KICAgIDwvdGVtcGxhdGU+CiAgICA8ZGl2IGNsYXNzPSJsYXlvdXQgaG9yaXpvbnRhbCB3cmFwIHNlc3Npb24tZ3JvdXAtZGV0YWlscyI+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaGF2ZU1ldHJpY3NBbmRTZXNzaW9uR3JvdXAodmlzaWJsZVNjaGVtYS4qLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb25Hcm91cCldXSI+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1t2aXNpYmxlU2NoZW1hLm1ldHJpY0luZm9zXV0iIGFzPSJtZXRyaWNJbmZvIj4KICAgICAgICAgIAogICAgICAgICAgPHRmLXNjYWxhci1jYXJkIGNsYXNzPSJzY2FsYXItY2FyZCIgY29sb3Itc2NhbGU9IltbX2NvbG9yU2NhbGVdXSIgZGF0YS10by1sb2FkPSJbW19jb21wdXRlU2VyaWVzRm9yU2Vzc2lvbkdyb3VwTWV0cmljKHNlc3Npb25Hcm91cCwKICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRyaWNJbmZvKV1dIiB0YWc9IltbbWV0cmljSW5mby5uYW1lLnRhZ11dIiB0YWctbWV0YWRhdGE9IltbX2NvbXB1dGVUYWdNZXRhZGF0YShtZXRyaWNJbmZvKV1dIiB4LXR5cGU9IltbX3hUeXBlXV0iIG11bHRpLWV4cGVyaW1lbnRzPSJbW19ub011bHRpRXhwZXJpbWVudHNdXSIgcmVxdWVzdC1kYXRhPSJbW19yZXF1ZXN0RGF0YV1dIiBhY3RpdmU+CiAgICAgICAgICA8L3RmLXNjYWxhci1jYXJkPgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDwvdGVtcGxhdGU+CiAgICA8L2Rpdj4KICAgIAogICAgPHN0eWxlIGluY2x1ZGU9Imlyb24tZmxleCI+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgogIDxzY3JpcHQ+Ly9+fldFQlBBVEh+fi90Zi1ocGFyYW1zLXNlc3Npb24tZ3JvdXAtZGV0YWlscy90Zi1ocGFyYW1zLXNlc3Npb24tZ3JvdXAtZGV0YWlscy5odG1sLmpzClBvbHltZXIoe2lzOiJ0Zi1ocGFyYW1zLXNlc3Npb24tZ3JvdXAtZGV0YWlscyIscHJvcGVydGllczp7YmFja2VuZDpPYmplY3QsZXhwZXJpbWVudE5hbWU6U3RyaW5nLHZpc2libGVTY2hlbWE6T2JqZWN0LHNlc3Npb25Hcm91cDpPYmplY3QsX3hUeXBlOnt0eXBlOlN0cmluZyx2YWx1ZTpibS5YVHlwZS5TVEVQfSxfbm9NdWx0aUV4cGVyaW1lbnRzOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LF9pbmRleE9mU2Vzc2lvbjpPYmplY3QsX3Nlc3Npb25Hcm91cE5hbWVIYXNoOk51bWJlcixfcmVxdWVzdERhdGE6e3R5cGU6RnVuY3Rpb24sdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4oe3RhZzphLHJ1bjpjfSk9PnRoaXMuYmFja2VuZC5saXN0TWV0cmljRXZhbHMoe2V4cGVyaW1lbnROYW1lOnRoaXMuZXhwZXJpbWVudE5hbWUsc2Vzc2lvbk5hbWU6YyxtZXRyaWNOYW1lOmF9KX19LF9jb2xvclNjYWxlOnt0eXBlOk9iamVjdCx2YWx1ZTpmdW5jdGlvbigpe3JldHVybntzY2FsZTphPT57YT1KU09OLnBhcnNlKGEpWzFdOwphPXRoaXMuX2luZGV4T2ZTZXNzaW9uLmdldChhKTtjb25zdCBjPVpsLnN0YW5kYXJkO3JldHVybiBjWyh0aGlzLl9zZXNzaW9uR3JvdXBOYW1lSGFzaCthKSVjLmxlbmd0aF19fX19fSxiZWhhdmlvcnM6W1BvbHltZXIuSXJvblJlc2l6YWJsZUJlaGF2aW9yXSxsaXN0ZW5lcnM6eyJpcm9uLXJlc2l6ZSI6InJlZHJhdyJ9LG9ic2VydmVyczpbIl9zZXNzaW9uR3JvdXBDaGFuZ2VkKHNlc3Npb25Hcm91cC4qKSJdLHJlZHJhdygpe1BvbHltZXIuZG9tKHRoaXMucm9vdCkucXVlcnlTZWxlY3RvckFsbCgidGYtc2NhbGFyLWNhcmQiKS5mb3JFYWNoKGE9PmEucmVkcmF3KCkpfSxfc2Vzc2lvbkdyb3VwQ2hhbmdlZCgpe3RoaXMuc2Vzc2lvbkdyb3VwPyh0aGlzLl9pbmRleE9mU2Vzc2lvbj1uZXcgTWFwKHRoaXMuc2Vzc2lvbkdyb3VwLnNlc3Npb25zLm1hcCgoYSxjKT0+W2EubmFtZSxjXSkpLHRoaXMuX3Nlc3Npb25Hcm91cE5hbWVIYXNoPXRmLmhwYXJhbXMudXRpbHMuaGFzaE9mU3RyaW5nKHRoaXMuc2Vzc2lvbkdyb3VwLm5hbWUpKToKKHRoaXMuX2luZGV4T2ZTZXNzaW9uPW5ldyBNYXAsdGhpcy5fc2Vzc2lvbkdyb3VwTmFtZUhhc2g9MCk7UG9seW1lci5kb20odGhpcy5yb290KS5xdWVyeVNlbGVjdG9yQWxsKCJ0Zi1zY2FsYXItY2FyZCIpLmZvckVhY2goYT0+e2NvbnN0IGM9YS5nZXQoInRhZyIpO2Euc2V0KCJ0YWciLCIiKTthLnNldCgidGFnIixjKX0pfSxfaGF2ZU1ldHJpY3MoKXtyZXR1cm4gdGhpcy52aXNpYmxlU2NoZW1hJiZBcnJheS5pc0FycmF5KHRoaXMudmlzaWJsZVNjaGVtYS5tZXRyaWNJbmZvcykmJjA8dGhpcy52aXNpYmxlU2NoZW1hLm1ldHJpY0luZm9zLmxlbmd0aH0sX2hhdmVNZXRyaWNzQW5kU2Vzc2lvbkdyb3VwKCl7cmV0dXJuIHRoaXMuc2Vzc2lvbkdyb3VwJiZ0aGlzLl9oYXZlTWV0cmljcygpfSxfY29tcHV0ZVNlcmllc0ZvclNlc3Npb25Hcm91cE1ldHJpYyhhLGMpe3JldHVybiBudWxsPT09YXx8bnVsbD09PWM/W106YS5zZXNzaW9ucy5maWx0ZXIoZD0+dm9pZCAwIT09dGYuaHBhcmFtcy51dGlscy5tZXRyaWNWYWx1ZUJ5TmFtZShkLm1ldHJpY1ZhbHVlcywKYy5uYW1lKSkubWFwKGQ9Pih7dGFnOmMubmFtZSxydW46ZC5uYW1lfSkpfSxfY29tcHV0ZVRhZ01ldGFkYXRhKGEpe3JldHVybntkaXNwbGF5TmFtZTp0Zi5ocGFyYW1zLnV0aWxzLm1ldHJpY05hbWUoYSksZGVzY3JpcHRpb246YS5kZXNjcmlwdGlvbnx8IiJ9fX0pOwo8L3NjcmlwdD4KPC9kb20tbW9kdWxlPgoKCgo8ZG9tLW1vZHVsZSBpZD0idGYtaHBhcmFtcy10YWJsZS12aWV3Ij4KICA8dGVtcGxhdGU+CiAgICA8dmFhZGluLWdyaWQgY2xhc3M9InNlc3Npb24tZ3JvdXAtdGFibGUiIGlkPSJzZXNzaW9uR3JvdXBzVGFibGUiIGNvbHVtbi1yZW9yZGVyaW5nLWFsbG93ZWQgaXRlbXM9Iltbc2Vzc2lvbkdyb3Vwc11dIj4KICAgICAgPHZhYWRpbi1ncmlkLWNvbHVtbiBmbGV4LWdyb3c9IjAiIHdpZHRoPSIxMGVtIiByZXNpemFibGU+CiAgICAgICAgPHRlbXBsYXRlIGNsYXNzPSJoZWFkZXIiPgogICAgICAgICAgPGRpdiBjbGFzcz0idGFibGUtaGVhZGVyIHRhYmxlLWNlbGwiPlRyaWFsIElEPC9kaXY+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0YWJsZS1jZWxsIj5bW2l0ZW0ubmFtZV1dPC9kaXY+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPC92YWFkaW4tZ3JpZC1jb2x1bW4+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tlbmFibGVTaG93TWV0cmljc11dIj4KICAgICAgICA8dmFhZGluLWdyaWQtY29sdW1uIGZsZXgtZ3Jvdz0iMCIgd2lkdGg9IjVlbSIgcmVzaXphYmxlPgogICAgICAgICAgPHRlbXBsYXRlIGNsYXNzPSJoZWFkZXIiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0YWJsZS1oZWFkZXIgdGFibGUtY2VsbCI+U2hvdyBNZXRyaWNzPC9kaXY+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPHRlbXBsYXRlPgogICAgICAgICAgICA8cGFwZXItY2hlY2tib3ggY2xhc3M9InRhYmxlLWNlbGwiIGNoZWNrZWQ9Int7ZXhwYW5kZWR9fSI+CiAgICAgICAgICAgIDwvcGFwZXItY2hlY2tib3g+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvdmFhZGluLWdyaWQtY29sdW1uPgogICAgICA8L3RlbXBsYXRlPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW3Zpc2libGVTY2hlbWEuaHBhcmFtSW5mb3NdXSIgYXM9ImhwYXJhbUluZm8iIGluZGV4LWFzPSJocGFyYW1JbmRleCI+CiAgICAgICAgPHZhYWRpbi1ncmlkLWNvbHVtbiBmbGV4LWdyb3c9IjIiIHdpZHRoPSIxMGVtIiByZXNpemFibGU+CiAgICAgICAgICA8dGVtcGxhdGUgY2xhc3M9ImhlYWRlciI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRhYmxlLWhlYWRlciB0YWJsZS1jZWxsIj4KICAgICAgICAgICAgICBbW19ocGFyYW1OYW1lKGhwYXJhbUluZm8pXV0KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPHRlbXBsYXRlPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0YWJsZS1jZWxsIj4KICAgICAgICAgICAgICBbW19zZXNzaW9uR3JvdXBIUGFyYW0oaXRlbSwgaHBhcmFtSW5mby5uYW1lKV1dCiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L3ZhYWRpbi1ncmlkLWNvbHVtbj4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0ie3t2aXNpYmxlU2NoZW1hLm1ldHJpY0luZm9zfX0iIGFzPSJtZXRyaWNJbmZvIiBpbmRleC1hcz0ibWV0cmljSW5kZXgiPgogICAgICAgIDx2YWFkaW4tZ3JpZC1jb2x1bW4gZmxleC1ncm93PSIyIiB3aWR0aD0iMTBlbSIgcmVzaXphYmxlPgogICAgICAgICAgPHRlbXBsYXRlIGNsYXNzPSJoZWFkZXIiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0YWJsZS1oZWFkZXIgdGFibGUtY2VsbCI+CiAgICAgICAgICAgICAgW1tfbWV0cmljTmFtZShtZXRyaWNJbmZvKV1dCiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDx0ZW1wbGF0ZT4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idGFibGUtY2VsbCI+CiAgICAgICAgICAgICAgW1tfc2Vzc2lvbkdyb3VwTWV0cmljKGl0ZW0sIG1ldHJpY0luZm8ubmFtZSldXQogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC92YWFkaW4tZ3JpZC1jb2x1bW4+CiAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDx0ZW1wbGF0ZSBjbGFzcz0icm93LWRldGFpbHMiPgogICAgICAgIDx0Zi1ocGFyYW1zLXNlc3Npb24tZ3JvdXAtZGV0YWlscyBiYWNrZW5kPSJbW2JhY2tlbmRdXSIgZXhwZXJpbWVudC1uYW1lPSJbW2V4cGVyaW1lbnROYW1lXV0iIHNlc3Npb24tZ3JvdXA9IltbaXRlbV1dIiB2aXNpYmxlLXNjaGVtYT0iW1t2aXNpYmxlU2NoZW1hXV0iIGNsYXNzPSJzZXNzaW9uLWdyb3VwLWRldGFpbHMiPgogICAgICAgIDwvdGYtaHBhcmFtcy1zZXNzaW9uLWdyb3VwLWRldGFpbHM+CiAgICAgIDwvdGVtcGxhdGU+CiAgICA8L3ZhYWRpbi1ncmlkPgoKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CiAgICAgIC50YWJsZS1jZWxsIHsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KICAgICAgLnRhYmxlLWhlYWRlciB7CiAgICAgICAgLyogbGluZS1icmVhayBvdmVyZmxvd2luZyBjb2x1bW4gaGVhZGVycyAqLwogICAgICAgIHdoaXRlLXNwYWNlOiBub3JtYWw7CiAgICAgICAgb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKICAgICAgfQogICAgICAuc2Vzc2lvbi1ncm91cC10YWJsZSB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CiAgICAgIC5zZXNzaW9uLWdyb3VwLWRldGFpbHMgewogICAgICAgIGhlaWdodDogMzYwcHg7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgoKICA8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdGYtaHBhcmFtcy10YWJsZS12aWV3L3RmLWhwYXJhbXMtdGFibGUtdmlldy5odG1sLmpzClBvbHltZXIoe2lzOiJ0Zi1ocGFyYW1zLXRhYmxlLXZpZXciLHByb3BlcnRpZXM6e3Zpc2libGVTY2hlbWE6T2JqZWN0LHNlc3Npb25Hcm91cHM6QXJyYXksZW5hYmxlU2hvd01ldHJpY3M6Qm9vbGVhbixiYWNrZW5kOk9iamVjdCxleHBlcmltZW50TmFtZTpTdHJpbmd9LG9ic2VydmVyczpbIl92aXNpYmxlU2NoZW1hT3JTZXNzaW9uR3JvdXBzQ2hhbmdlZCh2aXNpYmxlU2NoZW1hLiosIHNlc3Npb25Hcm91cHMuKikiXSxfdmlzaWJsZVNjaGVtYU9yU2Vzc2lvbkdyb3Vwc0NoYW5nZWQoKXtjb25zdCBhPXRoaXMuJC5zZXNzaW9uR3JvdXBzVGFibGUuZ2V0KCJleHBhbmRlZEl0ZW1zIik7dGhpcy4kLnNlc3Npb25Hcm91cHNUYWJsZS5zZXQoImV4cGFuZGVkSXRlbXMiLFtdKTtQb2x5bWVyLmRvbS5mbHVzaCgpO2NvbnN0IGM9bmV3IE1hcDt0aGlzLnNlc3Npb25Hcm91cHMuZm9yRWFjaChkPT57Yy5zZXQoZC5uYW1lLGQpfSk7dGhpcy4kLnNlc3Npb25Hcm91cHNUYWJsZS5zZXQoImV4cGFuZGVkSXRlbXMiLAphLm1hcChkPT5jLmdldChkLm5hbWUpKS5maWx0ZXIoQm9vbGVhbikpfSxfaHBhcmFtTmFtZTp0Zi5ocGFyYW1zLnV0aWxzLmhwYXJhbU5hbWUsX21ldHJpY05hbWU6dGYuaHBhcmFtcy51dGlscy5tZXRyaWNOYW1lLF9zZXNzaW9uR3JvdXBIUGFyYW0oYSxjKXtyZXR1cm4gbnVsbCE9YSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGEuaHBhcmFtcyxjKT90Zi5ocGFyYW1zLnV0aWxzLnByZXR0eVByaW50KGEuaHBhcmFtc1tjXSk6IiJ9LF9zZXNzaW9uR3JvdXBNZXRyaWMoYSxjKXtpZihudWxsPT1hKXJldHVybiBudWxsO2ZvcihsZXQgZD0wO2Q8YS5tZXRyaWNWYWx1ZXMubGVuZ3RoOysrZCl7bGV0IGY9YS5tZXRyaWNWYWx1ZXNbZF07aWYoZi5uYW1lLmdyb3VwPT09Yy5ncm91cCYmZi5uYW1lLnRhZz09Yy50YWcpcmV0dXJuIHRmLmhwYXJhbXMudXRpbHMucHJldHR5UHJpbnQoZi52YWx1ZSl9cmV0dXJuIiJ9LF9yb3dOdW1iZXIoYSl7cmV0dXJuIGErMX19KTsKPC9zY3JpcHQ+CjwvZG9tLW1vZHVsZT4KCgo8ZG9tLW1vZHVsZSBpZD0idGYtaHBhcmFtcy1zZXNzaW9uLWdyb3VwLXZhbHVlcyI+CiAgPHRlbXBsYXRlPgogICAgCiAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX3Byb3BlcnRpZXNBcmVQb3B1bGF0ZWQodmlzaWJsZVNjaGVtYSwgc2Vzc2lvbkdyb3VwKV1dIj4KICAgICAgCiAgICAgIDx0Zi1ocGFyYW1zLXRhYmxlLXZpZXcgdmlzaWJsZS1zY2hlbWE9IltbdmlzaWJsZVNjaGVtYV1dIiBzZXNzaW9uLWdyb3Vwcz0iW1tfc2luZ2xldG9uU2Vzc2lvbkdyb3VwcyhzZXNzaW9uR3JvdXApXV0iPgogICAgICA8L3RmLWhwYXJhbXMtdGFibGUtdmlldz4KICAgIDwvdGVtcGxhdGU+CiAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIV9wcm9wZXJ0aWVzQXJlUG9wdWxhdGVkKHZpc2libGVTY2hlbWEsIHNlc3Npb25Hcm91cCldXSI+CiAgICAgIDxkaXY+CiAgICAgICAgQ2xpY2sgb3IgaG92ZXIgb3ZlciBhIHNlc3Npb24gZ3JvdXAgdG8gZGlzcGxheSBpdHMgdmFsdWVzIGhlcmUuCiAgICAgIDwvZGl2PgogICAgPC90ZW1wbGF0ZT4KCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgogIDxzY3JpcHQ+Ly9+fldFQlBBVEh+fi90Zi1ocGFyYW1zLXNlc3Npb24tZ3JvdXAtdmFsdWVzL3RmLWhwYXJhbXMtc2Vzc2lvbi1ncm91cC12YWx1ZXMuaHRtbC5qcwpQb2x5bWVyKHtpczoidGYtaHBhcmFtcy1zZXNzaW9uLWdyb3VwLXZhbHVlcyIscHJvcGVydGllczp7c2Vzc2lvbkdyb3VwOnt0eXBlOk9iamVjdCx2YWx1ZTpudWxsfSx2aXNpYmxlU2NoZW1hOnt0eXBlOk9iamVjdCx2YWx1ZTpudWxsfX0sX3Byb3BlcnRpZXNBcmVQb3B1bGF0ZWQ6ZnVuY3Rpb24oYSxjKXtyZXR1cm4gdm9pZCAwIT09YSYmbnVsbCE9PWEmJnZvaWQgMCE9PWMmJm51bGwhPT1jfSxfc2luZ2xldG9uU2Vzc2lvbkdyb3VwczpmdW5jdGlvbihhKXtyZXR1cm4gbnVsbD09PWF8fHZvaWQgMD09PWE/W106W2FdfX0pOwo8L3NjcmlwdD4KPC9kb20tbW9kdWxlPgoKCgoKPHNjcmlwdD4vL35+V0VCUEFUSH5+L3RmLWhwYXJhbXMtcGFyYWxsZWwtY29vcmRzLXBsb3QvdXRpbHMuaHRtbC5qcwooZnVuY3Rpb24oYSl7KGZ1bmN0aW9uKGMpeyhmdW5jdGlvbihkKXtmdW5jdGlvbiBmKGcsbCxrKXtmdW5jdGlvbiBtKCl7aWYoMD09PWcubGVuZ3RoKXJldHVyblsxLDJdO2NvbnN0IFtwLHFdPWQzLmV4dGVudChnKTtyZXR1cm4gcCE9PXE/W3AscV06MDxwP1suNSpwLDEuNSpwXTowPnA/WzEuNSpwLC41KnBdOlstMSwxXX1pZigiTElORUFSIj09PWspcmV0dXJuIGQzLnNjYWxlTGluZWFyKCkuZG9tYWluKG0oKSkucmFuZ2UoW2wsMF0pO2lmKCJMT0ciPT09aylyZXR1cm4gaz1tKCksMD49a1swXSYmMDw9a1sxXT9mKGcsbCwiTElORUFSIik6ZDMuc2NhbGVMb2coKS5kb21haW4oaykucmFuZ2UoW2wsMF0pO2lmKCJRVUFOVElMRSI9PT1rKXJldHVybiBrPWQzLnJhbmdlKDIwKS5tYXAocD0+bC1wKmwvMTkpLDA9PT1nLmxlbmd0aCYmKGc9WzFdKSxkMy5zY2FsZVF1YW50aWxlKCkuZG9tYWluKF8udW5pcShnKSkucmFuZ2Uoayk7aWYoIk5PTl9OVU1FUklDIj09PWspcmV0dXJuIGQzLnNjYWxlUG9pbnQoKS5kb21haW4oXy51bmlxKGcuc29ydCgpKSkucmFuZ2UoW2wsCjBdKS5wYWRkaW5nKC4xKTt0aHJvdyBSYW5nZUVycm9yKCJVbmtub3duIHNjYWxlOiAiK2spO31kLmZpbmRDbG9zZXN0UGF0aD1mdW5jdGlvbihnLGwsayl7ZnVuY3Rpb24gbSh5LHgsQyxGKXtjb25zdCBEPXktQyxCPXgtRjtDPXAtQztGPXEtRjtjb25zdCBHPShEKkMrQipGKS8oRCpEK0IqQik7cmV0dXJuIDA+PUc/YS5ocGFyYW1zLnV0aWxzLmwyTm9ybVNxdWFyZWQoQyxGKToxPD1HP2EuaHBhcmFtcy51dGlscy5sMk5vcm1TcXVhcmVkKHktcCx4LXEpOmEuaHBhcmFtcy51dGlscy5sMk5vcm1TcXVhcmVkKEMtRypELEYtRypCKX1pZigyPmwubGVuZ3RoKXJldHVybiBjb25zb2xlLmVycm9yKCJMZXNzIHRoYW4gdHdvIGF4ZXMgaW4gcGFyYWxsZWwgY29vcmRpbmF0ZXMgcGxvdC4iKSxudWxsO2NvbnN0IHA9a1swXSxxPWtbMV07aWYocDw9bFswXXx8cD49bFtsLmxlbmd0aC0xXSlyZXR1cm4gbnVsbDtjb25zdCByPV8uc29ydGVkSW5kZXgobCxwKTtjb25zb2xlLmFzc2VydCgwPHIpOwpjb25zb2xlLmFzc2VydChyPGwubGVuZ3RoKTtjb25zdCB0PXItMTtsZXQgdj1udWxsLEE9bnVsbDtnLmZvckVhY2goeT0+e2NvbnN0IHg9bSh5LmNvbnRyb2xQb2ludHNbdF1bMF0seS5jb250cm9sUG9pbnRzW3RdWzFdLHkuY29udHJvbFBvaW50c1tyXVswXSx5LmNvbnRyb2xQb2ludHNbcl1bMV0pOzEwMDx4fHwhKG51bGw9PT12fHx4PHYpfHwodj14LEE9eSl9KTtyZXR1cm4gQX07ZC5wb2ludFNjYWxlSW52ZXJzZUltYWdlPWZ1bmN0aW9uKGcsbCxrKXtyZXR1cm4gZy5kb21haW4oKS5maWx0ZXIobT0+e209ZyhtKTtyZXR1cm4gbDw9bSYmbTw9a30pfTtkLnF1YW50aWxlU2NhbGVJbnZlcnNlSW1hZ2U9ZnVuY3Rpb24oZyxsLGspe2NvbnN0IG09Zy5yYW5nZSgpLHA9bS5maWx0ZXIocT0+bDw9cSYmcTw9aykubWFwKHE9Pntjb25zdCByPWcuaW52ZXJ0RXh0ZW50KHEpO3JldHVybiBxPT09bVttLmxlbmd0aC0xXT9bclswXSxyWzFdKzFdOnJ9KTtyZXR1cm4gMD09cC5sZW5ndGg/WzAsCjBdOmQzLmV4dGVudChkMy5tZXJnZShwKSl9O2QuY29udGludW91c1NjYWxlSW52ZXJzZUltYWdlPWZ1bmN0aW9uKGcsbCxrKXtyZXR1cm5bZy5pbnZlcnQobCksZy5pbnZlcnQoayldLnNvcnQoKG0scCk9Pm0tcCl9O2QuY3JlYXRlQXhpc1NjYWxlPWZ9KShjLnBhcmFsbGVsX2Nvb3Jkc19wbG90fHwoYy5wYXJhbGxlbF9jb29yZHNfcGxvdD17fSkpfSkoYS5ocGFyYW1zfHwoYS5ocGFyYW1zPXt9KSl9KSh0Znx8KHRmPXt9KSk7Cjwvc2NyaXB0PgoKCjxkb20tbW9kdWxlIGlkPSJ0Zi1ocGFyYW1zLXBhcmFsbGVsLWNvb3Jkcy1wbG90Ij4KICA8dGVtcGxhdGU+CiAgICA8ZGl2IGlkPSJjb250YWluZXIiPgogICAgICA8c3ZnIGlkPSJzdmciPjwvc3ZnPgogICAgPC9kaXY+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQogICAgICBzdmcgewogICAgICAgIGZvbnQ6IDEwcHggc2Fucy1zZXJpZjsKICAgICAgfQoKICAgICAgLmJhY2tncm91bmQgcGF0aCB7CiAgICAgICAgZmlsbDogbm9uZTsKICAgICAgICBzdHJva2U6ICNkZGQ7CiAgICAgICAgc2hhcGUtcmVuZGVyaW5nOiBjcmlzcEVkZ2VzOwogICAgICB9CgogICAgICAuZm9yZWdyb3VuZCBwYXRoIHsKICAgICAgICBmaWxsOiBub25lOwogICAgICAgIHN0cm9rZS1vcGFjaXR5OiAwLjc7CiAgICAgICAgc3Ryb2tlLXdpZHRoOiAxOwogICAgICB9CgogICAgICAvKiBXaWxsIGJlIHNldCBvbiBmb3JlZ3JvdW5kIHBhdGhzIHRoYXQgYXJlIG5vdCAiY29udGFpbmVkIiBpbiB0aGUgY3VycmVudAogICAgICAgICBheGVzIGJydXNoZXMuIElmIG5vIGJydXNoZXMgYXJlIHNldCwgbm8gcGF0aCB3aWxsIGhhdmUgdGhpcyBjbGFzcy4gKi8KICAgICAgLmZvcmVncm91bmQgLmludmlzaWJsZS1wYXRoIHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICB9CgogICAgICAvKiBTdHlsZSBmb3IgdGhlIHBhdGggY2xvc2VzdCB0byB0aGUgbW91c2UgcG9pbnRlciAodHlwaWNhbGx5IHdpbGwgYmVjb21lCiAgICAgIHRoZSBzZWxlY3RlZCBwYXRoIHdoZW4gdGhlIHVzZXIgY2xpY2tzKS4gKi8KICAgICAgLmZvcmVncm91bmQgLnBlYWtlZC1wYXRoIHsKICAgICAgICBzdHJva2Utd2lkdGg6IDM7CiAgICAgIH0KCiAgICAgIC8qIFRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgcGF0aCBjbGFzcy4gV2UgdXNlICFpbXBvcnRhbnQgdG8gb3ZlcnJpZGUgdGhlCiAgICAgICAgIGlubGluZSBzdHlsZSB0aGF0IHNldHMgdGhlIHJlZ3VsYXIgY29sb3Igb2YgYSBwYXRoLiAqLwogICAgICAuZm9yZWdyb3VuZCAuc2VsZWN0ZWQtcGF0aCB7CiAgICAgICAgc3Ryb2tlLXdpZHRoOiAzICFpbXBvcnRhbnQ7CiAgICAgICAgc3Ryb2tlOiAjMGYwICFpbXBvcnRhbnQ7CiAgICAgIH0KCiAgICAgICNjb250YWluZXIgewogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgc3ZnIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIH0KCiAgICAgIC5heGlzIHRleHQgewogICAgICAgIHRleHQtc2hhZG93OiAwIDFweCAwICNmZmYsIDFweCAwIDAgI2ZmZiwgMCAtMXB4IDAgI2ZmZiwgLTFweCAwIDAgI2ZmZjsKICAgICAgICBmaWxsOiAjMDAwOwogICAgICAgIGN1cnNvcjogbW92ZTsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgoKICA8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdGYtaHBhcmFtcy1wYXJhbGxlbC1jb29yZHMtcGxvdC9heGVzLmpzCihmdW5jdGlvbihhKXsoZnVuY3Rpb24oYyl7KGZ1bmN0aW9uKGQpe2Z1bmN0aW9uIGYocil7cmV0dXJuIG51bGwhPT1yLnNvdXJjZUV2ZW50fWxldCBnOyhmdW5jdGlvbihyKXtyLkxJTkVBUj0iTElORUFSIjtyLkxPRz0iTE9HIjtyLlFVQU5USUxFPSJRVUFOVElMRSI7ci5OT05fTlVNRVJJQz0iTk9OX05VTUVSSUMifSkoZz1kLlNjYWxlVHlwZXx8KGQuU2NhbGVUeXBlPXt9KSk7Y2xhc3MgbHtpc1Bhc3NpbmcoKXtyZXR1cm4hMH19Y2xhc3Mga3tjb25zdHJ1Y3RvcihyLHQsdixBKXt0aGlzLl9sb3dlcj1yO3RoaXMuX3VwcGVyPXQ7dGhpcy5fbG93ZXJPcGVuPXY7dGhpcy5fdXBwZXJPcGVuPUF9aXNQYXNzaW5nKHIpe3JldHVybiB0aGlzLl9iZWZvcmUodGhpcy5fbG93ZXIsciwhdGhpcy5fbG93ZXJPcGVuKSYmdGhpcy5fYmVmb3JlKHIsdGhpcy5fdXBwZXIsIXRoaXMuX3VwcGVyT3Blbil9X2JlZm9yZShyLHQsdil7cmV0dXJuIHY/cjw9dDpyPHR9fWNsYXNzIG17Y29uc3RydWN0b3Iocil7dGhpcy5fZG9tYWluU2V0PQpyfWlzUGFzc2luZyhyKXtyZXR1cm4tMSE9PXRoaXMuX2RvbWFpblNldC5maW5kSW5kZXgodD0+dD09PXIpfX1jbGFzcyBwe2NvbnN0cnVjdG9yKHIsdCx2LEEpe3RoaXMuX3N2Z1Byb3BzPXI7dGhpcy5fc2NoZW1hPXQ7dGhpcy5faW50ZXJhY3Rpb25NYW5hZ2VyPXY7dGhpcy5fY29sSW5kZXg9QTt0aGlzLl9pc0Rpc3BsYXllZD0hMTt0aGlzLl9zY2FsZVR5cGU9dGhpcy5feVNjYWxlPW51bGw7dGhpcy5zZXRCcnVzaFNlbGVjdGlvbihudWxsKX1jb2xJbmRleCgpe3JldHVybiB0aGlzLl9jb2xJbmRleH15U2NhbGUoKXtyZXR1cm4gdGhpcy5feVNjYWxlfXNjYWxlVHlwZSgpe3JldHVybiB0aGlzLl9zY2FsZVR5cGV9YnJ1c2hTZWxlY3Rpb24oKXtyZXR1cm4gdGhpcy5fYnJ1c2hTZWxlY3Rpb259aXNEaXNwbGF5ZWQoKXtyZXR1cm4gdGhpcy5faXNEaXNwbGF5ZWR9c2V0QnJ1c2hTZWxlY3Rpb24ocil7dGhpcy5fYnJ1c2hTZWxlY3Rpb249cjt0aGlzLl9icnVzaEZpbHRlcj10aGlzLl9idWlsZEJydXNoRmlsdGVyKHRoaXMuYnJ1c2hTZWxlY3Rpb24oKSwKdGhpcy5zY2FsZVR5cGUoKSx0aGlzLnlTY2FsZSgpKX1zZXREb21haW5BbmRTY2FsZShyLHQpe3RoaXMuX3NjYWxlVHlwZT10O3RoaXMuX3lTY2FsZT1hLmhwYXJhbXMucGFyYWxsZWxfY29vcmRzX3Bsb3QuY3JlYXRlQXhpc1NjYWxlKHIuc2xpY2UoKSx0aGlzLl9zdmdQcm9wcy5oZWlnaHQsdGhpcy5zY2FsZVR5cGUoKSk7dGhpcy5fYnJ1c2hGaWx0ZXI9dGhpcy5fYnVpbGRCcnVzaEZpbHRlcih0aGlzLmJydXNoU2VsZWN0aW9uKCksdGhpcy5zY2FsZVR5cGUoKSx0aGlzLnlTY2FsZSgpKX1icnVzaEZpbHRlcigpe3JldHVybiB0aGlzLl9icnVzaEZpbHRlcn11cGRhdGVET00ocil7dmFyIHQ9ZDMuYXhpc0xlZnQodGhpcy55U2NhbGUoKSk7dGhpcy5zY2FsZVR5cGUoKT09PWcuUVVBTlRJTEUmJih0PXQudGlja1ZhbHVlcyh0aGlzLnlTY2FsZSgpLnF1YW50aWxlcygpKS50aWNrRm9ybWF0KGQzLmZvcm1hdCgiLS42ZyIpKSk7dmFyIHY9ZDMuc2VsZWN0KHIpO3Yuc2VsZWN0QWxsKCJnIikucmVtb3ZlKCk7CnYuYXBwZW5kKCJnIikuY2xhc3NlZCgiYXhpcyIsITApLmNhbGwodCkuYXBwZW5kKCJ0ZXh0IikuY2xhc3NlZCgiYXhpcy10aXRsZSIsITApLnN0eWxlKCJjdXJzb3IiLCJtb3ZlIikuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikuYXR0cigieSIsLTkpLnRleHQoQT0+YS5ocGFyYW1zLnV0aWxzLnNjaGVtYUNvbHVtbk5hbWUodGhpcy5fc2NoZW1hLEEpKTt2LmNhbGwoZDMuZHJhZygpLm9uKCJzdGFydCIsKCk9PntyLnNldEF0dHJpYnV0ZSgiaXMtZHJhZ2dpbmciLCIiKTt0aGlzLl9pbnRlcmFjdGlvbk1hbmFnZXIub25EcmFnU3RhcnQodGhpcy5jb2xJbmRleCgpKX0pLm9uKCJkcmFnIiwoKT0+dGhpcy5faW50ZXJhY3Rpb25NYW5hZ2VyLm9uRHJhZyhkMy5ldmVudC54KSkub24oImVuZCIsKCk9Pnt0aGlzLl9pbnRlcmFjdGlvbk1hbmFnZXIub25EcmFnRW5kKCk7ci5yZW1vdmVBdHRyaWJ1dGUoImlzLWRyYWdnaW5nIil9KSk7dD1kMy5icnVzaFkoKS5leHRlbnQoW1stOCwwXSwKWzgsdGhpcy5fc3ZnUHJvcHMuaGVpZ2h0KzFdXSkub24oInN0YXJ0IiwoKT0+e2YoZDMuZXZlbnQpJiYoci5zZXRBdHRyaWJ1dGUoImlzLWJydXNoaW5nIiwiIiksdGhpcy5faW50ZXJhY3Rpb25NYW5hZ2VyLm9uQnJ1c2hDaGFuZ2VkKHRoaXMuY29sSW5kZXgoKSkpfSkub24oImJydXNoIiwoKT0+e2lmKGYoZDMuZXZlbnQpKXRoaXMuX2ludGVyYWN0aW9uTWFuYWdlci5vbkJydXNoQ2hhbmdlZCh0aGlzLmNvbEluZGV4KCkpfSkub24oImVuZCIsKCk9PntmKGQzLmV2ZW50KSYmKHRoaXMuX2ludGVyYWN0aW9uTWFuYWdlci5vbkJydXNoQ2hhbmdlZCh0aGlzLmNvbEluZGV4KCkpLHIucmVtb3ZlQXR0cmlidXRlKCJpcy1icnVzaGluZyIpKX0pO3Y9ZDMuc2VsZWN0KHIpLmFwcGVuZCgiZyIpLmNsYXNzZWQoImJydXNoIiwhMCk7di5jYWxsKHQpO3QubW92ZSh2LHRoaXMuYnJ1c2hTZWxlY3Rpb24oKSl9c2V0RGlzcGxheWVkKHIpe3RoaXMuX2lzRGlzcGxheWVkPXJ9X2J1aWxkQnJ1c2hGaWx0ZXIociwKdCx2KXtpZihudWxsPT09cilyZXR1cm4gbmV3IGw7aWYobnVsbD09PXQpcmV0dXJuIGNvbnNvbGUuZXJyb3IoIlNjYWxlIHR5cGUgaXMgbnVsbCwgYnV0IGJydXNoU2VsZWN0aW9uIGlzbid0OiAiLHIpLG5ldyBsO3N3aXRjaCh0KXtjYXNlIGcuTElORUFSOmNhc2UgZy5MT0c6e2NvbnN0IFtBLHldPWEuaHBhcmFtcy5wYXJhbGxlbF9jb29yZHNfcGxvdC5jb250aW51b3VzU2NhbGVJbnZlcnNlSW1hZ2UodixyWzBdLHJbMV0pO3JldHVybiBuZXcgayhBLHksITEsITEpfWNhc2UgZy5RVUFOVElMRTp7Y29uc3QgW0EseV09YS5ocGFyYW1zLnBhcmFsbGVsX2Nvb3Jkc19wbG90LnF1YW50aWxlU2NhbGVJbnZlcnNlSW1hZ2UodixyWzBdLHJbMV0pO3JldHVybiBuZXcgayhBLHksITEsITApfWNhc2UgZy5OT05fTlVNRVJJQzpyZXR1cm4gbmV3IG0oYS5ocGFyYW1zLnBhcmFsbGVsX2Nvb3Jkc19wbG90LnBvaW50U2NhbGVJbnZlcnNlSW1hZ2UodixyWzBdLHJbMV0pKX1jb25zb2xlLmVycm9yKCJVbmtub3duIHNjYWxlIHR5cGU6ICIsCnQpO3JldHVybiBuZXcgbH19ZC5BeGlzPXA7Y2xhc3MgcXtjb25zdHJ1Y3RvcihyLHQsdil7dGhpcy5fc3ZnUHJvcHM9cjt0aGlzLl9zY2hlbWE9dDt0aGlzLl9heGVzPXRoaXMuX2NyZWF0ZUF4ZXModik7dGhpcy5fc3RhdGlvbmFyeUF4ZXNQb3NpdGlvbnM9ZDMuc2NhbGVQb2ludCgpLnJhbmdlKFsxLHRoaXMuX3N2Z1Byb3BzLndpZHRoLTFdKS5wYWRkaW5nKC41KTt0aGlzLl9kcmFnZ2VkQXhpcz1udWxsO3RoaXMuX3N2Z1Byb3BzLnN2Z0cuc2VsZWN0QWxsKCJnLmF4aXMtcGFyZW50IikucmVtb3ZlKCk7dGhpcy5fcGFyZW50c1NlbD10aGlzLl9zdmdQcm9wcy5zdmdHLnNlbGVjdEFsbCgiLmF4aXMtcGFyZW50Iil9dXBkYXRlQXhlcyhyLHQpe2NvbnNvbGUuYXNzZXJ0KCF0aGlzLmlzQXhpc0RyYWdnaW5nKCkpO2NvbnN0IHY9bmV3IFNldDtyLmNvbHVtbnMuZm9yRWFjaCh5PT57Y29uc3QgeD15LmFic29sdXRlSW5kZXg7bGV0IEM9dGhpcy5fYXhlc1t4XTtDLnNldERpc3BsYXllZCghMCk7CmNvbnN0IEY9dC5tYXAoRD0+YS5ocGFyYW1zLnV0aWxzLmNvbHVtblZhbHVlQnlJbmRleCh0aGlzLl9zY2hlbWEsRCx4KSk7Qy5zZXREb21haW5BbmRTY2FsZShGLHkuc2NhbGUpO3YuYWRkKHgpfSk7dGhpcy5fYXhlcy5mb3JFYWNoKHk9Pnt2Lmhhcyh5LmNvbEluZGV4KCkpfHx5LnNldERpc3BsYXllZCghMSl9KTt0aGlzLl91cGRhdGVTdGF0aW9uYXJ5QXhlc1Bvc2l0aW9ucyh2KTt0aGlzLl9wYXJlbnRzU2VsPXRoaXMuX3BhcmVudHNTZWwuZGF0YShBcnJheS5mcm9tKHYpLHk9PnkpO3RoaXMuX3BhcmVudHNTZWwuZXhpdCgpLnJlbW92ZSgpO3RoaXMuX3BhcmVudHNTZWw9dGhpcy5fcGFyZW50c1NlbC5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoImF4aXMtcGFyZW50IiwhMCkubWVyZ2UodGhpcy5fcGFyZW50c1NlbCk7Y29uc3QgQT10aGlzO3RoaXMuX3BhcmVudHNTZWwuY2FsbCh5PT50aGlzLl91cGRhdGVBeGVzUG9zaXRpb25zSW5ET00oeSkpLmVhY2goZnVuY3Rpb24oeSl7QS5fYXhlc1t5XS51cGRhdGVET00odGhpcyl9KX1tYXBWaXNpYmxlQXhlcyhyKXtyZXR1cm4gdGhpcy5fc3RhdGlvbmFyeUF4ZXNQb3NpdGlvbnMuZG9tYWluKCkubWFwKHQ9PgpyKHRoaXMuZ2V0QXhpc1Bvc2l0aW9uKHQpLHRoaXMuX2F4ZXNbdF0pKX1hbGxWaXNpYmxlQXhlc1NhdGlzZnkocil7cmV0dXJuIHRoaXMuX3N0YXRpb25hcnlBeGVzUG9zaXRpb25zLmRvbWFpbigpLmV2ZXJ5KHQ9PnIodGhpcy5nZXRBeGlzUG9zaXRpb24odCksdGhpcy5fYXhlc1t0XSkpfWdldEF4aXNGb3JDb2xJbmRleChyKXtyZXR1cm4gdGhpcy5fYXhlc1tyXX1kcmFnU3RhcnQocil7Y29uc29sZS5hc3NlcnQoIXRoaXMuaXNBeGlzRHJhZ2dpbmcoKSk7Y29uc29sZS5hc3NlcnQodGhpcy5fYXhlc1tyXS5pc0Rpc3BsYXllZCgpKTt0aGlzLl9kcmFnZ2VkQXhpcz10aGlzLl9heGVzW3JdO3RoaXMuX2RyYWdnZWRBeGlzUG9zaXRpb249dGhpcy5fc3RhdGlvbmFyeUF4ZXNQb3NpdGlvbnMocil9ZHJhZyhyKXt0aGlzLl9kcmFnZ2VkQXhpc1Bvc2l0aW9uPXI9TWF0aC5taW4oTWF0aC5tYXgociwwKSx0aGlzLl9zdmdQcm9wcy53aWR0aCk7cj10aGlzLl9zdGF0aW9uYXJ5QXhlc1Bvc2l0aW9ucy5kb21haW4oKTsKci5zb3J0KCh0LHYpPT50aGlzLmdldEF4aXNQb3NpdGlvbih0KS10aGlzLmdldEF4aXNQb3NpdGlvbih2KSk7dGhpcy5fc3RhdGlvbmFyeUF4ZXNQb3NpdGlvbnMuZG9tYWluKHIpO3RoaXMuX3VwZGF0ZUF4ZXNQb3NpdGlvbnNJbkRPTSh0aGlzLl9wYXJlbnRzU2VsKX1kcmFnRW5kKCl7Y29uc29sZS5hc3NlcnQodGhpcy5pc0F4aXNEcmFnZ2luZygpKTt0aGlzLl9kcmFnZ2VkQXhpcz10aGlzLl9kcmFnZ2VkQXhpc1Bvc2l0aW9uPW51bGw7dGhpcy5fdXBkYXRlQXhlc1Bvc2l0aW9uc0luRE9NKHRoaXMuX3BhcmVudHNTZWwudHJhbnNpdGlvbigpLmR1cmF0aW9uKDUwMCkpfWlzQXhpc0RyYWdnaW5nKCl7cmV0dXJuIG51bGwhPT10aGlzLl9kcmFnZ2VkQXhpc31nZXRBeGlzUG9zaXRpb24ocil7cmV0dXJuIG51bGwhPT10aGlzLl9kcmFnZ2VkQXhpcyYmdGhpcy5fZHJhZ2dlZEF4aXMuY29sSW5kZXgoKT09PXI/dGhpcy5fZHJhZ2dlZEF4aXNQb3NpdGlvbjp0aGlzLl9zdGF0aW9uYXJ5QXhlc1Bvc2l0aW9ucyhyKX1fdXBkYXRlU3RhdGlvbmFyeUF4ZXNQb3NpdGlvbnMocil7dmFyIHQ9CnRoaXMuX3N0YXRpb25hcnlBeGVzUG9zaXRpb25zLmRvbWFpbigpLmZpbHRlcih2PT5yLmhhcyh2KSk7dD1BcnJheS5mcm9tKG5ldyBTZXQoWy4uLnQsLi4uQXJyYXkuZnJvbShyKV0pKTt0aGlzLl9zdGF0aW9uYXJ5QXhlc1Bvc2l0aW9ucy5kb21haW4odCl9X3VwZGF0ZUF4ZXNQb3NpdGlvbnNJbkRPTShyKXtyLmF0dHIoInRyYW5zZm9ybSIsdD0+YS5ocGFyYW1zLnV0aWxzLnRyYW5zbGF0ZVN0cih0aGlzLmdldEF4aXNQb3NpdGlvbih0KSkpfV9jcmVhdGVBeGVzKHIpe3JldHVybiBkMy5yYW5nZShhLmhwYXJhbXMudXRpbHMubnVtQ29sdW1ucyh0aGlzLl9zY2hlbWEpKS5tYXAodD0+bmV3IHAodGhpcy5fc3ZnUHJvcHMsdGhpcy5fc2NoZW1hLHIsdCkpfX1kLkF4ZXNDb2xsZWN0aW9uPXF9KShjLnBhcmFsbGVsX2Nvb3Jkc19wbG90fHwoYy5wYXJhbGxlbF9jb29yZHNfcGxvdD17fSkpfSkoYS5ocGFyYW1zfHwoYS5ocGFyYW1zPXt9KSl9KSh0Znx8KHRmPXt9KSk7Cjwvc2NyaXB0PgogIDxzY3JpcHQ+Ly9+fldFQlBBVEh+fi90Zi1ocGFyYW1zLXBhcmFsbGVsLWNvb3Jkcy1wbG90L2xpbmVzLmpzCihmdW5jdGlvbihhKXsoZnVuY3Rpb24oYyl7KGZ1bmN0aW9uKGQpe2xldCBmOyhmdW5jdGlvbihrKXtrW2suRk9SRUdST1VORD0wXT0iRk9SRUdST1VORCI7a1trLkJBQ0tHUk9VTkQ9MV09IkJBQ0tHUk9VTkQifSkoZj1kLkxpbmVUeXBlfHwoZC5MaW5lVHlwZT17fSkpO2NsYXNzIGd7Y29uc3RydWN0b3Ioayl7dm9pZCAwPT09ayYmKGs9ZDMuc2VsZWN0QWxsKG51bGwpKTtjb25zb2xlLmFzc2VydCgxPj1rLnNpemUoKSk7dGhpcy5fc2Vzc2lvbkdyb3VwU2VsPWt9c2Vzc2lvbkdyb3VwKCl7cmV0dXJuIDE9PT10aGlzLl9zZXNzaW9uR3JvdXBTZWwuc2l6ZSgpP3RoaXMuX3Nlc3Npb25Hcm91cFNlbC5kYXR1bSgpOm51bGx9aXNOdWxsKCl7cmV0dXJuIG51bGw9PT10aGlzLnNlc3Npb25Hcm91cCgpfXNlbGVjdGlvbigpe3JldHVybiB0aGlzLl9zZXNzaW9uR3JvdXBTZWx9ZXF1YWxzVG8oayl7cmV0dXJuIHRoaXMuaXNOdWxsKCk/ay5pc051bGwoKTprLmlzTnVsbCgpPyExOmsuc2Vzc2lvbkdyb3VwKCkubmFtZT09CnRoaXMuc2Vzc2lvbkdyb3VwKCkubmFtZX19ZC5TZXNzaW9uR3JvdXBIYW5kbGU9ZztjbGFzcyBse2NvbnN0cnVjdG9yKGssbSxwKXt0aGlzLl9zdmdQcm9wcz1rO3RoaXMuX3NjaGVtYT1tO3RoaXMuX2F4ZXNDb2xsZWN0aW9uPXA7dGhpcy5fc2Vzc2lvbkdyb3Vwcz1bXTt0aGlzLl9zdmdQcm9wcy5zdmdHLnNlbGVjdEFsbCgiZy5iYWNrZ3JvdW5kIikucmVtb3ZlKCk7dGhpcy5fc3ZnUHJvcHMuc3ZnRy5zZWxlY3RBbGwoImcuZm9yZWdyb3VuZCIpLnJlbW92ZSgpO3RoaXMuX2JnUGF0aHNTZWw9dGhpcy5fc3ZnUHJvcHMuc3ZnRy5hcHBlbmQoImciKS5jbGFzc2VkKCJiYWNrZ3JvdW5kIiwhMCkuc2VsZWN0QWxsKCJwYXRoIik7dGhpcy5fZmdQYXRoc1NlbD10aGlzLl9zdmdQcm9wcy5zdmdHLmFwcGVuZCgiZyIpLmNsYXNzZWQoImZvcmVncm91bmQiLCEwKS5zZWxlY3RBbGwoInBhdGgiKTt0aGlzLl91cGRhdGVWaXNpYmxlRmdQYXRoc1NlbCgpO3RoaXMuX3BlYWtlZFNlc3Npb25Hcm91cEhhbmRsZT0KbmV3IGc7dGhpcy5fc2VsZWN0ZWRTZXNzaW9uR3JvdXBIYW5kbGU9bmV3IGc7dGhpcy5fZDNsaW5lPWQzLmxpbmUoKS5jdXJ2ZShkMy5jdXJ2ZUxpbmVhcil9Z2V0U2Vzc2lvbkdyb3VwSGFuZGxlKGspe3JldHVybiBudWxsPT09a3x8dm9pZCAwPT09az9uZXcgZzpuZXcgZyh0aGlzLl9mZ1BhdGhzU2VsLmZpbHRlcihtPT5tLm5hbWU9PT1rLm5hbWUpKX1oaWRlQmFja2dyb3VuZExpbmVzKCl7dGhpcy5fYmdQYXRoc1NlbC5hdHRyKCJ2aXNpYmlsaXR5IiwiaGlkZGVuIil9c2hvd0JhY2tncm91bmRMaW5lcygpe3RoaXMuX2JnUGF0aHNTZWwuYXR0cigidmlzaWJpbGl0eSIsbnVsbCl9cGVha2VkU2Vzc2lvbkdyb3VwSGFuZGxlKCl7cmV0dXJuIHRoaXMuX3BlYWtlZFNlc3Npb25Hcm91cEhhbmRsZX1zZWxlY3RlZFNlc3Npb25Hcm91cEhhbmRsZSgpe3JldHVybiB0aGlzLl9zZWxlY3RlZFNlc3Npb25Hcm91cEhhbmRsZX1yZWNvbXB1dGVDb250cm9sUG9pbnRzKGssbT0wKXsoaz09PWYuRk9SRUdST1VORD8KdGhpcy5fZmdQYXRoc1NlbDp0aGlzLl9iZ1BhdGhzU2VsKS50cmFuc2l0aW9uKCkuZHVyYXRpb24obSkuYXR0cigiZCIscD0+dGhpcy5fcGF0aERBdHRyaWJ1dGUocCkpO2s9PT1mLkZPUkVHUk9VTkQmJndpbmRvdy5zZXRUaW1lb3V0KCgpPT57Y29uc3QgcD10aGlzO3RoaXMuX2ZnUGF0aHNTZWwuZWFjaChmdW5jdGlvbihxKXtwLl9zZXRDb250cm9sUG9pbnRzUHJvcGVydHkodGhpcyxxKX0pfSl9cmVjb21wdXRlRm9yZWdyb3VuZExpbmVzVmlzaWJpbGl0eSgpe3RoaXMuX2ZnUGF0aHNTZWwuY2xhc3NlZCgiaW52aXNpYmxlLXBhdGgiLGs9PiF0aGlzLl9heGVzQ29sbGVjdGlvbi5hbGxWaXNpYmxlQXhlc1NhdGlzZnkoKG0scCk9PnAuYnJ1c2hGaWx0ZXIoKS5pc1Bhc3NpbmcoYS5ocGFyYW1zLnV0aWxzLmNvbHVtblZhbHVlQnlJbmRleCh0aGlzLl9zY2hlbWEsayxwLmNvbEluZGV4KCkpKSkpO3RoaXMuX3VwZGF0ZVZpc2libGVGZ1BhdGhzU2VsKCl9c2V0Rm9yZWdyb3VuZExpbmVzQ29sb3IoaywKbSxwKXtrPXRoaXMuX2NyZWF0ZUxpbmVDb2xvckZ1bmN0aW9uKGssbSxwKTt0aGlzLl9mZ1BhdGhzU2VsLmF0dHIoInN0cm9rZSIsayl9cmVkcmF3KGssbSxwLHEpe2NvbnN0IHI9dGhpcy5fcGVha2VkU2Vzc2lvbkdyb3VwSGFuZGxlLnNlc3Npb25Hcm91cCgpLHQ9dGhpcy5fc2VsZWN0ZWRTZXNzaW9uR3JvdXBIYW5kbGUuc2Vzc2lvbkdyb3VwKCk7dGhpcy5fc2Vzc2lvbkdyb3Vwcz1rO3RoaXMuX2ZnUGF0aHNTZWw9dGhpcy5fcmVjb21wdXRlUGF0aFNlbGVjdGlvbih0aGlzLl9mZ1BhdGhzU2VsKTt0aGlzLl9iZ1BhdGhzU2VsPXRoaXMuX3JlY29tcHV0ZVBhdGhTZWxlY3Rpb24odGhpcy5fYmdQYXRoc1NlbCk7dGhpcy5fcGVha2VkU2Vzc2lvbkdyb3VwSGFuZGxlPXRoaXMuZ2V0U2Vzc2lvbkdyb3VwSGFuZGxlKHIpO3RoaXMuX3NlbGVjdGVkU2Vzc2lvbkdyb3VwSGFuZGxlPXRoaXMuZ2V0U2Vzc2lvbkdyb3VwSGFuZGxlKHQpO3RoaXMucmVjb21wdXRlQ29udHJvbFBvaW50cyhmLkZPUkVHUk9VTkQpOwp0aGlzLnJlY29tcHV0ZUNvbnRyb2xQb2ludHMoZi5CQUNLR1JPVU5EKTt0aGlzLnJlY29tcHV0ZUZvcmVncm91bmRMaW5lc1Zpc2liaWxpdHkoKTt0aGlzLnNldEZvcmVncm91bmRMaW5lc0NvbG9yKG0scCxxKX11cGRhdGVQZWFrZWRTZXNzaW9uR3JvdXAoayl7dGhpcy5fcGVha2VkU2Vzc2lvbkdyb3VwSGFuZGxlLnNlbGVjdGlvbigpLmNsYXNzZWQoInBlYWtlZC1wYXRoIiwhMSk7dGhpcy5fcGVha2VkU2Vzc2lvbkdyb3VwSGFuZGxlPWs7dGhpcy5fcGVha2VkU2Vzc2lvbkdyb3VwSGFuZGxlLnNlbGVjdGlvbigpLmNsYXNzZWQoInBlYWtlZC1wYXRoIiwhMCl9Y2xlYXJQZWFrZWRTZXNzaW9uR3JvdXAoKXt0aGlzLnVwZGF0ZVBlYWtlZFNlc3Npb25Hcm91cChuZXcgZyl9dXBkYXRlU2VsZWN0ZWRTZXNzaW9uR3JvdXAoayl7dGhpcy5fc2VsZWN0ZWRTZXNzaW9uR3JvdXBIYW5kbGUuc2VsZWN0aW9uKCkuY2xhc3NlZCgic2VsZWN0ZWQtcGF0aCIsITEpO3RoaXMuX3NlbGVjdGVkU2Vzc2lvbkdyb3VwSGFuZGxlPQprO3RoaXMuX3NlbGVjdGVkU2Vzc2lvbkdyb3VwSGFuZGxlLnNlbGVjdGlvbigpLmNsYXNzZWQoInNlbGVjdGVkLXBhdGgiLCEwKX1maW5kQ2xvc2VzdFNlc3Npb25Hcm91cChrLG0pe2NvbnN0IHA9dGhpcy5fYXhlc0NvbGxlY3Rpb24ubWFwVmlzaWJsZUF4ZXMocT0+cSk7az1hLmhwYXJhbXMucGFyYWxsZWxfY29vcmRzX3Bsb3QuZmluZENsb3Nlc3RQYXRoKHRoaXMuX3Zpc2libGVGZ1BhdGhzU2VsLm5vZGVzKCkscCxbayxtXSk7cmV0dXJuIG51bGw9PT1rP25ldyBnOm5ldyBnKGQzLnNlbGVjdChrKSl9X2NyZWF0ZUxpbmVDb2xvckZ1bmN0aW9uKGssbSxwKXtpZihudWxsPT09aylyZXR1cm4oKT0+InJlZCI7Y29uc3QgcT1kMy5zY2FsZUxpbmVhcigpLmRvbWFpbihhLmhwYXJhbXMudXRpbHMubnVtZXJpY0NvbHVtbkV4dGVudCh0aGlzLl9zY2hlbWEsdGhpcy5fc2Vzc2lvbkdyb3VwcyxrKSkucmFuZ2UoW20scF0pLmludGVycG9sYXRlKGQzLmludGVycG9sYXRlTGFiKTtyZXR1cm4gcj0+CnEoYS5ocGFyYW1zLnV0aWxzLmNvbHVtblZhbHVlQnlJbmRleCh0aGlzLl9zY2hlbWEscixrKSl9X3JlY29tcHV0ZVBhdGhTZWxlY3Rpb24oayl7az1rLmRhdGEodGhpcy5fc2Vzc2lvbkdyb3VwcyxtPT5tLm5hbWUpO2suZXhpdCgpLnJlbW92ZSgpO3JldHVybiBrLmVudGVyKCkuYXBwZW5kKCJwYXRoIikubWVyZ2Uoayl9X3NldENvbnRyb2xQb2ludHNQcm9wZXJ0eShrLG0pe2suY29udHJvbFBvaW50cz10aGlzLl9jb21wdXRlQ29udHJvbFBvaW50cyhtKX1fY29tcHV0ZUNvbnRyb2xQb2ludHMoayl7cmV0dXJuIHRoaXMuX2F4ZXNDb2xsZWN0aW9uLm1hcFZpc2libGVBeGVzKChtLHApPT5bbSxwLnlTY2FsZSgpKGEuaHBhcmFtcy51dGlscy5jb2x1bW5WYWx1ZUJ5SW5kZXgodGhpcy5fc2NoZW1hLGsscC5jb2xJbmRleCgpKSldKX1fcGF0aERBdHRyaWJ1dGUoayl7cmV0dXJuIHRoaXMuX2QzbGluZSh0aGlzLl9jb21wdXRlQ29udHJvbFBvaW50cyhrKSl9X3VwZGF0ZVZpc2libGVGZ1BhdGhzU2VsKCl7dGhpcy5fdmlzaWJsZUZnUGF0aHNTZWw9CnRoaXMuX2ZnUGF0aHNTZWwuZmlsdGVyKCI6bm90KC5pbnZpc2libGUtcGF0aCkiKX19ZC5MaW5lc0NvbGxlY3Rpb249bH0pKGMucGFyYWxsZWxfY29vcmRzX3Bsb3R8fChjLnBhcmFsbGVsX2Nvb3Jkc19wbG90PXt9KSl9KShhLmhwYXJhbXN8fChhLmhwYXJhbXM9e30pKX0pKHRmfHwodGY9e30pKTsKPC9zY3JpcHQ+CiAgPHNjcmlwdD4vL35+V0VCUEFUSH5+L3RmLWhwYXJhbXMtcGFyYWxsZWwtY29vcmRzLXBsb3QvaW50ZXJhY3Rpb25fbWFuYWdlci5qcwooZnVuY3Rpb24oYSl7KGZ1bmN0aW9uKGMpeyhmdW5jdGlvbihkKXtjbGFzcyBme2NvbnN0cnVjdG9yKGwsayl7dGhpcy5zdmc9ZDMuc2VsZWN0KGwpO2w9MTAwKmsrMjA7dGhpcy5zdmcuYXR0cigidmlld0JveCIsYDAgMCAke2x9ICR7MjQwfWApO3RoaXMuc3ZnLmF0dHIoInByZXNlcnZlQXNwZWN0UmF0aW8iLCJ4TWlkWU1pZCIpO3RoaXMuc3ZnLnN0eWxlKCJtaW4td2lkdGgiLGwrInB4Iik7dGhpcy5zdmcuc3R5bGUoIm1pbi1oZWlnaHQiLCIyNDBweCIpO3RoaXMud2lkdGg9bC0xMC0xMDt0aGlzLmhlaWdodD0yMDA7dGhpcy5zdmdHPXRoaXMuc3ZnLmFwcGVuZCgiZyIpLmF0dHIoInRyYW5zZm9ybSIsYS5ocGFyYW1zLnV0aWxzLnRyYW5zbGF0ZVN0cigxMCwzMCkpfX1kLlNWR1Byb3BlcnRpZXM9ZjtjbGFzcyBne2NvbnN0cnVjdG9yKGwsayxtLHApe3RoaXMuX3N2Z1Byb3BzPWw7dGhpcy5fc2NoZW1hPWs7dGhpcy5fcGVha2VkU2Vzc2lvbkdyb3VwQ2hhbmdlZENCPW07dGhpcy5fc2VsZWN0ZWRTZXNzaW9uR3JvdXBDaGFuZ2VkQ0I9CnA7dGhpcy5fYXhlc0NvbGxlY3Rpb249bmV3IGQuQXhlc0NvbGxlY3Rpb24obCxrLHRoaXMpO3RoaXMuX2xpbmVzQ29sbGVjdGlvbj1uZXcgZC5MaW5lc0NvbGxlY3Rpb24obCxrLHRoaXMuX2F4ZXNDb2xsZWN0aW9uKTt0aGlzLl9zdmdQcm9wcy5zdmcub24oImNsaWNrIiwoKT0+dGhpcy5vbkNsaWNrKCkpLm9uKCJtb3VzZW1vdmUgbW91c2VlbnRlciIsKCk9Pntjb25zdCBbcSxyXT1kMy5tb3VzZSh0aGlzLl9zdmdQcm9wcy5zdmdHLm5vZGUoKSk7dGhpcy5vbk1vdXNlTW92ZWQocSxyKX0pLm9uKCJtb3VzZWxlYXZlIiwoKT0+dGhpcy5vbk1vdXNlTGVhdmUoKSl9b25EcmFnU3RhcnQobCl7dGhpcy5fYXhlc0NvbGxlY3Rpb24uZHJhZ1N0YXJ0KGwpO3RoaXMuX2xpbmVzQ29sbGVjdGlvbi5oaWRlQmFja2dyb3VuZExpbmVzKCl9b25EcmFnKGwpe3RoaXMuX2F4ZXNDb2xsZWN0aW9uLmRyYWcobCk7dGhpcy5fbGluZXNDb2xsZWN0aW9uLnJlY29tcHV0ZUNvbnRyb2xQb2ludHMoZC5MaW5lVHlwZS5GT1JFR1JPVU5EKX1vbkRyYWdFbmQoKXt0aGlzLl9heGVzQ29sbGVjdGlvbi5kcmFnRW5kKCk7CnRoaXMuX2xpbmVzQ29sbGVjdGlvbi5yZWNvbXB1dGVDb250cm9sUG9pbnRzKGQuTGluZVR5cGUuRk9SRUdST1VORCw1MDApO3dpbmRvdy5zZXRUaW1lb3V0KCgpPT57dGhpcy5fbGluZXNDb2xsZWN0aW9uLnJlY29tcHV0ZUNvbnRyb2xQb2ludHMoZC5MaW5lVHlwZS5CQUNLR1JPVU5EKTt0aGlzLl9saW5lc0NvbGxlY3Rpb24uc2hvd0JhY2tncm91bmRMaW5lcygpfSw1MDApfW9uQnJ1c2hDaGFuZ2VkKGwpe3RoaXMuX2F4ZXNDb2xsZWN0aW9uLmdldEF4aXNGb3JDb2xJbmRleChsKS5zZXRCcnVzaFNlbGVjdGlvbihkMy5ldmVudC5zZWxlY3Rpb24pO3RoaXMuX2xpbmVzQ29sbGVjdGlvbi5yZWNvbXB1dGVGb3JlZ3JvdW5kTGluZXNWaXNpYmlsaXR5KCl9b25Nb3VzZU1vdmVkKGwsayl7dGhpcy5fbGluZXNDb2xsZWN0aW9uLnVwZGF0ZVBlYWtlZFNlc3Npb25Hcm91cCh0aGlzLl9saW5lc0NvbGxlY3Rpb24uZmluZENsb3Nlc3RTZXNzaW9uR3JvdXAobCxrKSk7dGhpcy5fcGVha2VkU2Vzc2lvbkdyb3VwQ2hhbmdlZENCKHRoaXMuX2xpbmVzQ29sbGVjdGlvbi5wZWFrZWRTZXNzaW9uR3JvdXBIYW5kbGUoKS5zZXNzaW9uR3JvdXAoKSl9b25Nb3VzZUxlYXZlKCl7dGhpcy5fbGluZXNDb2xsZWN0aW9uLnBlYWtlZFNlc3Npb25Hcm91cEhhbmRsZSgpLmlzTnVsbCgpfHwKKHRoaXMuX2xpbmVzQ29sbGVjdGlvbi5jbGVhclBlYWtlZFNlc3Npb25Hcm91cCgpLHRoaXMuX3BlYWtlZFNlc3Npb25Hcm91cENoYW5nZWRDQihudWxsKSl9b25DbGljaygpe3RoaXMuX2xpbmVzQ29sbGVjdGlvbi5wZWFrZWRTZXNzaW9uR3JvdXBIYW5kbGUoKS5zZXNzaW9uR3JvdXAoKT09PXRoaXMuX2xpbmVzQ29sbGVjdGlvbi5zZWxlY3RlZFNlc3Npb25Hcm91cEhhbmRsZSgpLnNlc3Npb25Hcm91cCgpP3RoaXMuX2xpbmVzQ29sbGVjdGlvbi51cGRhdGVTZWxlY3RlZFNlc3Npb25Hcm91cChuZXcgZC5TZXNzaW9uR3JvdXBIYW5kbGUpOnRoaXMuX2xpbmVzQ29sbGVjdGlvbi51cGRhdGVTZWxlY3RlZFNlc3Npb25Hcm91cCh0aGlzLl9saW5lc0NvbGxlY3Rpb24ucGVha2VkU2Vzc2lvbkdyb3VwSGFuZGxlKCkpO3RoaXMuX3NlbGVjdGVkU2Vzc2lvbkdyb3VwQ2hhbmdlZENCKHRoaXMuX2xpbmVzQ29sbGVjdGlvbi5zZWxlY3RlZFNlc3Npb25Hcm91cEhhbmRsZSgpLnNlc3Npb25Hcm91cCgpKX1vbk9wdGlvbnNPclNlc3Npb25Hcm91cHNDaGFuZ2VkKGwsCmspe3RoaXMuX2F4ZXNDb2xsZWN0aW9uLnVwZGF0ZUF4ZXMobCxrKTtjb25zdCBtPXRoaXMuX2xpbmVzQ29sbGVjdGlvbi5wZWFrZWRTZXNzaW9uR3JvdXBIYW5kbGUoKSxwPXRoaXMuX2xpbmVzQ29sbGVjdGlvbi5zZWxlY3RlZFNlc3Npb25Hcm91cEhhbmRsZSgpO3RoaXMuX2xpbmVzQ29sbGVjdGlvbi5yZWRyYXcoayx2b2lkIDAhPT1sLmNvbG9yQnlDb2x1bW5JbmRleD9sLmNvbHVtbnNbbC5jb2xvckJ5Q29sdW1uSW5kZXhdLmFic29sdXRlSW5kZXg6bnVsbCxsLm1pbkNvbG9yLGwubWF4Q29sb3IpO20uZXF1YWxzVG8odGhpcy5fbGluZXNDb2xsZWN0aW9uLnBlYWtlZFNlc3Npb25Hcm91cEhhbmRsZSgpKXx8dGhpcy5fcGVha2VkU2Vzc2lvbkdyb3VwQ2hhbmdlZENCKHRoaXMuX2xpbmVzQ29sbGVjdGlvbi5wZWFrZWRTZXNzaW9uR3JvdXBIYW5kbGUoKS5zZXNzaW9uR3JvdXAoKSk7cC5lcXVhbHNUbyh0aGlzLl9saW5lc0NvbGxlY3Rpb24uc2VsZWN0ZWRTZXNzaW9uR3JvdXBIYW5kbGUoKSl8fAp0aGlzLl9zZWxlY3RlZFNlc3Npb25Hcm91cENoYW5nZWRDQih0aGlzLl9saW5lc0NvbGxlY3Rpb24uc2VsZWN0ZWRTZXNzaW9uR3JvdXBIYW5kbGUoKS5zZXNzaW9uR3JvdXAoKSl9c2NoZW1hKCl7cmV0dXJuIHRoaXMuX3NjaGVtYX19ZC5JbnRlcmFjdGlvbk1hbmFnZXI9Z30pKGMucGFyYWxsZWxfY29vcmRzX3Bsb3R8fChjLnBhcmFsbGVsX2Nvb3Jkc19wbG90PXt9KSl9KShhLmhwYXJhbXN8fChhLmhwYXJhbXM9e30pKX0pKHRmfHwodGY9e30pKTsKPC9zY3JpcHQ+CiAgPHNjcmlwdD4vL35+V0VCUEFUSH5+L3RmLWhwYXJhbXMtcGFyYWxsZWwtY29vcmRzLXBsb3QvdGYtaHBhcmFtcy1wYXJhbGxlbC1jb29yZHMtcGxvdC5odG1sLmpzClBvbHltZXIoe2lzOiJ0Zi1ocGFyYW1zLXBhcmFsbGVsLWNvb3Jkcy1wbG90Iixwcm9wZXJ0aWVzOntzZXNzaW9uR3JvdXBzOkFycmF5LG9wdGlvbnM6T2JqZWN0LHNlbGVjdGVkU2Vzc2lvbkdyb3VwOnt0eXBlOk9iamVjdCx2YWx1ZTpudWxsLHJlYWRPbmx5OiEwLG5vdGlmeTohMH0sY2xvc2VzdFNlc3Npb25Hcm91cDp7dHlwZTpPYmplY3QsdmFsdWU6bnVsbCxyZWFkT25seTohMCxub3RpZnk6ITB9LHJlZHJhd0NvdW50Ont0eXBlOk51bWJlcix2YWx1ZTowfSxfdmFsaWRTZXNzaW9uR3JvdXBzOkFycmF5LF9pbnRlcmFjdGlvbk1hbmFnZXI6T2JqZWN0fSxvYnNlcnZlcnM6WyJfb3B0aW9uc09yU2Vzc2lvbkdyb3Vwc0NoYW5nZWQob3B0aW9ucy4qLCBzZXNzaW9uR3JvdXBzLiopIl0sX29wdGlvbnNPclNlc3Npb25Hcm91cHNDaGFuZ2VkKCl7aWYobnVsbCE9PXRoaXMub3B0aW9ucyl7dmFyIGE9dGhpcy5vcHRpb25zLmNvbmZpZ3VyYXRpb247aWYodm9pZCAwPT09dGhpcy5faW50ZXJhY3Rpb25NYW5hZ2VyfHwKIV8uaXNFcXVhbCh0aGlzLl9pbnRlcmFjdGlvbk1hbmFnZXIuc2NoZW1hKCksYS5zY2hlbWEpKXtkMy5zZWxlY3QodGhpcy4kLnN2Zykuc2VsZWN0QWxsKCIqIikucmVtb3ZlKCk7Y29uc3QgYz1uZXcgdGYuaHBhcmFtcy5wYXJhbGxlbF9jb29yZHNfcGxvdC5TVkdQcm9wZXJ0aWVzKHRoaXMuJC5zdmcsdGYuaHBhcmFtcy51dGlscy5udW1Db2x1bW5zKGEuc2NoZW1hKSk7dGhpcy5zY29wZVN1YnRyZWUodGhpcy4kLnN2ZywhMCk7dGhpcy5faW50ZXJhY3Rpb25NYW5hZ2VyPW5ldyB0Zi5ocGFyYW1zLnBhcmFsbGVsX2Nvb3Jkc19wbG90LkludGVyYWN0aW9uTWFuYWdlcihjLGEuc2NoZW1hLGQ9PnRoaXMuY2xvc2VzdFNlc3Npb25Hcm91cENoYW5nZWQoZCksZD0+dGhpcy5zZWxlY3RlZFNlc3Npb25Hcm91cENoYW5nZWQoZCkpfXRoaXMuX2NvbXB1dGVWYWxpZFNlc3Npb25Hcm91cHMoKTt0aGlzLl9pbnRlcmFjdGlvbk1hbmFnZXIub25PcHRpb25zT3JTZXNzaW9uR3JvdXBzQ2hhbmdlZCh0aGlzLm9wdGlvbnMsCnRoaXMuX3ZhbGlkU2Vzc2lvbkdyb3Vwcyk7dGhpcy5yZWRyYXdDb3VudCsrfX0sY2xvc2VzdFNlc3Npb25Hcm91cENoYW5nZWQoYSl7dGhpcy5fc2V0Q2xvc2VzdFNlc3Npb25Hcm91cChhKX0sc2VsZWN0ZWRTZXNzaW9uR3JvdXBDaGFuZ2VkKGEpe3RoaXMuX3NldFNlbGVjdGVkU2Vzc2lvbkdyb3VwKGEpfSxfY29tcHV0ZVZhbGlkU2Vzc2lvbkdyb3Vwcygpe2NvbnN0IGE9dGYuaHBhcmFtcy51dGlscztpZih2b2lkIDA9PT10aGlzLnNlc3Npb25Hcm91cHMpdGhpcy5fdmFsaWRTZXNzaW9uR3JvdXBzPXZvaWQgMDtlbHNle3ZhciBjPXRoaXMub3B0aW9ucy5jb25maWd1cmF0aW9uLnNjaGVtYTt0aGlzLl92YWxpZFNlc3Npb25Hcm91cHM9dGhpcy5zZXNzaW9uR3JvdXBzLmZpbHRlcihkPT57Zm9yKGxldCBmPTA7ZjxhLm51bUNvbHVtbnMoYyk7KytmKWlmKHRoaXMub3B0aW9ucy5jb25maWd1cmF0aW9uLmNvbHVtbnNWaXNpYmlsaXR5W2ZdJiZ2b2lkIDA9PT1hLmNvbHVtblZhbHVlQnlJbmRleChjLApkLGYpKXJldHVybiExO3JldHVybiEwfSl9fX0pOwo8L3NjcmlwdD4KPC9kb20tbW9kdWxlPgoKCgoKCjxkb20tbW9kdWxlIGlkPSJ0Zi1ocGFyYW1zLXBhcmFsbGVsLWNvb3Jkcy12aWV3Ij4KICA8dGVtcGxhdGU+CiAgICAKICAgIDxkaXYgY2xhc3M9InBhbmUiPgogICAgICA8dmFhZGluLXNwbGl0LWxheW91dCB2ZXJ0aWNhbD4KICAgICAgICAKICAgICAgICA8dGYtaHBhcmFtcy1zY2FsZS1hbmQtY29sb3ItY29udHJvbHMgaWQ9ImNvbnRyb2xzIiBjbGFzcz0ic2VjdGlvbiIgY29uZmlndXJhdGlvbj0iW1tjb25maWd1cmF0aW9uXV0iIHNlc3Npb24tZ3JvdXBzPSJbW3Nlc3Npb25Hcm91cHNdXSIgb3B0aW9ucz0ie3tfb3B0aW9uc319Ij4KICAgICAgICA8L3RmLWhwYXJhbXMtc2NhbGUtYW5kLWNvbG9yLWNvbnRyb2xzPgogICAgICAgIDx2YWFkaW4tc3BsaXQtbGF5b3V0IHZlcnRpY2FsPgogICAgICAgICAgCiAgICAgICAgICA8dGYtaHBhcmFtcy1wYXJhbGxlbC1jb29yZHMtcGxvdCBpZD0icGxvdCIgY2xhc3M9InNlY3Rpb24iIHNlc3Npb24tZ3JvdXBzPSJbW3Nlc3Npb25Hcm91cHNdXSIgc2VsZWN0ZWQtc2Vzc2lvbi1ncm91cD0ie3tfc2VsZWN0ZWRHcm91cH19IiBjbG9zZXN0LXNlc3Npb24tZ3JvdXA9Int7X2Nsb3Nlc3RHcm91cH19IiBvcHRpb25zPSJbW19vcHRpb25zXV0iPgogICAgICAgICAgPC90Zi1ocGFyYW1zLXBhcmFsbGVsLWNvb3Jkcy1wbG90PgogICAgICAgICAgPHZhYWRpbi1zcGxpdC1sYXlvdXQgdmVydGljYWw+CiAgICAgICAgICAgIDx0Zi1ocGFyYW1zLXNlc3Npb24tZ3JvdXAtdmFsdWVzIGlkPSJ2YWx1ZXMiIGNsYXNzPSJzZWN0aW9uIiB2aXNpYmxlLXNjaGVtYT0iW1tjb25maWd1cmF0aW9uLnZpc2libGVTY2hlbWFdXSIgc2Vzc2lvbi1ncm91cD0iW1tfY2xvc2VzdE9yU2VsZWN0ZWQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2Nsb3Nlc3RHcm91cCwgX3NlbGVjdGVkR3JvdXApXV0iPgogICAgICAgICAgICA8L3RmLWhwYXJhbXMtc2Vzc2lvbi1ncm91cC12YWx1ZXM+CiAgICAgICAgICAgIDx0Zi1ocGFyYW1zLXNlc3Npb24tZ3JvdXAtZGV0YWlscyBpZD0iZGV0YWlscyIgY2xhc3M9InNlY3Rpb24iIGJhY2tlbmQ9IltbYmFja2VuZF1dIiBleHBlcmltZW50LW5hbWU9IltbZXhwZXJpbWVudE5hbWVdXSIgc2Vzc2lvbi1ncm91cD0iW1tfc2VsZWN0ZWRHcm91cF1dIiB2aXNpYmxlLXNjaGVtYT0iW1tjb25maWd1cmF0aW9uLnZpc2libGVTY2hlbWFdXSI+CiAgICAgICAgICAgIDwvdGYtaHBhcmFtcy1zZXNzaW9uLWdyb3VwLWRldGFpbHM+CiAgICAgICAgICA8L3ZhYWRpbi1zcGxpdC1sYXlvdXQ+CiAgICAgICAgPC92YWFkaW4tc3BsaXQtbGF5b3V0PgogICAgICA8L3ZhYWRpbi1zcGxpdC1sYXlvdXQ+CiAgICA8L2Rpdj4KCiAgICA8c3R5bGU+CiAgICAgIC5wYW5lIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CiAgICAgIC5zZWN0aW9uIHsKICAgICAgICBtYXJnaW46IDEwcHg7CiAgICAgIH0KICAgICAgI2NvbnRyb2xzIHsKICAgICAgICBmbGV4LWdyb3c6IDA7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgZmxleC1iYXNpczogYXV0bzsKICAgICAgICBoZWlnaHQ6IGF1dG87CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICBtYXgtaGVpZ2h0OiBmaXQtY29udGVudDsKICAgICAgfQogICAgICAjcGxvdCB7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICAgIGZsZXgtc2hyaW5rOiAxOwogICAgICAgIGZsZXgtYmFzaXM6IGF1dG87CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgIH0KICAgICAgI3ZhbHVlcyB7CiAgICAgICAgZmxleC1ncm93OiAwOwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICAgIGZsZXgtYmFzaXM6IGF1dG87CiAgICAgICAgaGVpZ2h0OiA5NXB4OwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgICAgbWF4LWhlaWdodDogZml0LWNvbnRlbnQ7CiAgICAgIH0KICAgICAgI2RldGFpbHMgewogICAgICAgIGZsZXgtZ3JvdzogMDsKICAgICAgICBmbGV4LXNocmluazogMTsKICAgICAgICBmbGV4LWJhc2lzOiBhdXRvOwogICAgICAgIGhlaWdodDogYXV0bzsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIG1heC1oZWlnaHQ6IGZpdC1jb250ZW50OwogICAgICB9CiAgICAgIHZhYWRpbi1zcGxpdC1sYXlvdXQgewogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgoKICA8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdGYtaHBhcmFtcy1wYXJhbGxlbC1jb29yZHMtdmlldy90Zi1ocGFyYW1zLXBhcmFsbGVsLWNvb3Jkcy12aWV3Lmh0bWwuanMKUG9seW1lcih7aXM6InRmLWhwYXJhbXMtcGFyYWxsZWwtY29vcmRzLXZpZXciLHByb3BlcnRpZXM6e2JhY2tlbmQ6T2JqZWN0LGV4cGVyaW1lbnROYW1lOlN0cmluZyxjb25maWd1cmF0aW9uOk9iamVjdCxzZXNzaW9uR3JvdXBzOkFycmF5fSxfY2xvc2VzdE9yU2VsZWN0ZWQ6ZnVuY3Rpb24oYSxjKXtyZXR1cm4gbnVsbCE9PWE/YTpjfX0pOwo8L3NjcmlwdD4KPC9kb20tbW9kdWxlPgoKCgoKCgoKCjxkb20tbW9kdWxlIGlkPSJ0Zi1ocGFyYW1zLXNjYXR0ZXItcGxvdC1tYXRyaXgtcGxvdCI+CiAgPHRlbXBsYXRlPgogICAgPGRpdiBpZD0iY29udGFpbmVyIj4KICAgICAgPHN2ZyBpZD0ic3ZnIj48L3N2Zz4KICAgIDwvZGl2PgoKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CiAgICAgIHN2ZyB7CiAgICAgICAgZm9udDogMTBweCBzYW5zLXNlcmlmOwogICAgICB9CgogICAgICAvKiBUaGUgY2xvc2VzdCBkYXRhIHBvaW50IG1hcmtlciB0byB0aGUgbW91c2UgcG9pbnRlci4gV2UgdXNlICFpbXBvcnRhbnQKICAgICAgICAgdG8gb3ZlcnJpZGUgdGhlIGlubGluZSBzdHlsZSB0aGF0IHNldHMgdGhlIHJlZ3VsYXIgc3R5bGUgb2YgYSBtYXJrZXIuCiAgICAgICovCiAgICAgIC5jbG9zZXN0LW1hcmtlciB7CiAgICAgICAgcjogNiAhaW1wb3J0YW50OwogICAgICB9CgogICAgICAvKiBUaGUgY3VycmVudGx5IHNlbGVjdGVkIGRhdGEgcG9pbnQgbWFya2VyLiBXZSB1c2UgIWltcG9ydGFudCB0bwogICAgICAgICBvdmVycmlkZSB0aGUgaW5saW5lIHN0eWxlIHRoYXQgc2V0cyB0aGUgcmVndWxhciBzdHlsZSBvZiBhIG1hcmtlci4gKi8KICAgICAgLnNlbGVjdGVkLW1hcmtlciB7CiAgICAgICAgcjogNiAhaW1wb3J0YW50OwogICAgICAgIGZpbGw6ICMwZjAgIWltcG9ydGFudDsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgoKICA8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdGYtaHBhcmFtcy1zY2F0dGVyLXBsb3QtbWF0cml4LXBsb3QvdGYtaHBhcmFtcy1zY2F0dGVyLXBsb3QtbWF0cml4LXBsb3QuaHRtbC5qcwpQb2x5bWVyKHtpczoidGYtaHBhcmFtcy1zY2F0dGVyLXBsb3QtbWF0cml4LXBsb3QiLHByb3BlcnRpZXM6e3Zpc2libGVTY2hlbWE6T2JqZWN0LHNlc3Npb25Hcm91cHM6QXJyYXksb3B0aW9uczpPYmplY3Qsc2VsZWN0ZWRTZXNzaW9uR3JvdXA6e3R5cGU6T2JqZWN0LHZhbHVlOm51bGwscmVhZE9ubHk6ITAsbm90aWZ5OiEwfSxjbG9zZXN0U2Vzc2lvbkdyb3VwOnt0eXBlOk9iamVjdCx2YWx1ZTpudWxsLHJlYWRPbmx5OiEwLG5vdGlmeTohMH0sX2NvbnRhaW5lcjp7dHlwZTpPYmplY3QsdmFsdWU6bnVsbH0sX3N2Zzp7dHlwZTpPYmplY3QsdmFsdWU6bnVsbH0sd2lkdGg6e3R5cGU6TnVtYmVyLHZhbHVlOjB9LGhlaWdodDp7dHlwZTpOdW1iZXIsdmFsdWU6MH0sX2JydXNoZWRDZWxsSW5kZXg6e3R5cGU6T2JqZWN0LHZhbHVlOm51bGx9LF9icnVzaFNlbGVjdGlvbjp7dHlwZTpPYmplY3QsdmFsdWU6bnVsbH19LG9ic2VydmVyczpbIl9zZXNzaW9uR3JvdXBzQ2hhbmdlZChzZXNzaW9uR3JvdXBzLiopIiwKIl92aXNpYmxlU2NoZW1hQ2hhbmdlZCh2aXNpYmxlU2NoZW1hLiopIiwiX3JlZHJhdyhvcHRpb25zLiopIl0scmVhZHkoKXt0aGlzLl9jb250YWluZXI9dGhpcy4kLmNvbnRhaW5lcjt0aGlzLl9zdmc9ZDMuc2VsZWN0KHRoaXMuJC5zdmcpO3RoaXMuX3JlZHJhdygpfSxfc2Vzc2lvbkdyb3Vwc0NoYW5nZWQoKXtudWxsIT09dGhpcy5zZWxlY3RlZFNlc3Npb25Hcm91cCYmdGhpcy5fc2V0U2VsZWN0ZWRTZXNzaW9uR3JvdXAodGYuaHBhcmFtcy51dGlscy5zZXNzaW9uR3JvdXBXaXRoTmFtZSh0aGlzLnNlc3Npb25Hcm91cHMsdGhpcy5zZWxlY3RlZFNlc3Npb25Hcm91cC5uYW1lKXx8bnVsbCk7dGhpcy5fcmVkcmF3KCl9LF92aXNpYmxlU2NoZW1hQ2hhbmdlZCgpe3RoaXMuX2JydXNoU2VsZWN0aW9uPXRoaXMuX2JydXNoZWRDZWxsSW5kZXg9bnVsbDt0aGlzLl9yZWRyYXcoKX0sX3JlZHJhdygpe3RoaXMuZGVib3VuY2UoIl9yZWRyYXciLCgpPT57Y29uc3QgYT10Zi5ocGFyYW1zLnV0aWxzOwp0aGlzLndpZHRoPU1hdGgubWF4KDE1MCphLm51bVZpc2libGVDb2x1bW5zKHRoaXMudmlzaWJsZVNjaGVtYSksMTIwMCk7dGhpcy5oZWlnaHQ9TWF0aC5tYXgoMTEyLjUqYS5udW1WaXNpYmxlTWV0cmljcyh0aGlzLnZpc2libGVTY2hlbWEpLDQ4MCk7dGhpcy5fY29udGFpbmVyLnN0eWxlLndpZHRoPXRoaXMud2lkdGgrInB4Ijt0aGlzLl9jb250YWluZXIuc3R5bGUuaGVpZ2h0PXRoaXMuaGVpZ2h0KyJweCI7dGhpcy5fc3ZnLmF0dHIoIndpZHRoIix0aGlzLndpZHRoKS5hdHRyKCJoZWlnaHQiLHRoaXMuaGVpZ2h0KTt0aGlzLl9zdmcuc2VsZWN0QWxsKCJnIikucmVtb3ZlKCk7dGhpcy5fZHJhdygpfSwxMDApfSxfZHJhdygpe2Z1bmN0aW9uIGEobGEpe3JldHVybiJ4LWF4aXMtY2xpcC1wYXRoLSIrbGF9ZnVuY3Rpb24gYyhsYSl7cmV0dXJuIngtbGFiZWwtY2xpcC1wYXRoLSIrbGF9ZnVuY3Rpb24gZChsYSl7cmV0dXJuInktYXhpcy1jbGlwLXBhdGgtIitsYX1mdW5jdGlvbiBmKGxhKXtyZXR1cm4ieS1sYWJlbC1jbGlwLXBhdGgtIisKbGF9ZnVuY3Rpb24gZyhsYSx3YSxDYSx4YSx6YSl7Q2E9TWF0aC5mbG9vcihDYS94YSk7eGE9d2Euc2NhbGUoKTtpZigiUVVBTlRJTEUiPT09emEpe2xldCBGYT14YS5xdWFudGlsZXMoKTtGYT1kMy5yYW5nZSgwLEZhLmxlbmd0aCxNYXRoLmNlaWwoRmEubGVuZ3RoL0NhKSkubWFwKFNhPT5GYVtTYV0pO3dhLnRpY2tWYWx1ZXMoRmEpLnRpY2tGb3JtYXQoZDMuZm9ybWF0KCItLjJnIikpfSJMSU5FQVIiIT09emEmJiJMT0ciIT09emF8fHdhLnRpY2tzKENhKTtsYS5jYWxsKHdhKTtsYS5zZWxlY3RBbGwoIi5kb21haW4iKS5yZW1vdmUoKTtsYS5zZWxlY3RBbGwoIi50aWNrIGxpbmUiKS5hdHRyKCJzdHJva2UiLCIjZGRkIil9ZnVuY3Rpb24gbChsYSx3YSl7cmV0dXJuIExbd2FdKHguX2NvbFZhbHVlKGxhLHdhKSl9ZnVuY3Rpb24gayhsYSx3YSl7cmV0dXJuIEpbd2FdKHguX21ldHJpY1ZhbHVlKGxhLHdhKSl9ZnVuY3Rpb24gbShsYSx3YSl7Y29uc3QgQ2E9W107WVtsYV1bd2FdLmVhY2goZnVuY3Rpb24oKXtDYS5wdXNoKHRoaXMpfSk7CnJldHVybiBkMy5xdWFkdHJlZSgpLngoeGE9PmQzLnNlbGVjdCh4YSkuZGF0dW0oKS54KS55KHhhPT5kMy5zZWxlY3QoeGEpLmRhdHVtKCkueSkuYWRkQWxsKENhKX1mdW5jdGlvbiBwKCl7bGV0IGxhPW5ldyBTZXQoVC5ub2RlcygpKTt2KCl8fChsYT1xKHguX2JydXNoZWRDZWxsSW5kZXgseC5fYnJ1c2hTZWxlY3Rpb24pKTtkMy5zZWxlY3RBbGwoQXJyYXkuZnJvbSh5LmZpbHRlclNldChsYSx3YT0+IWNhLmhhcyh3YSkpKSkuYXR0cigiZmlsbCIsTik7ZDMuc2VsZWN0QWxsKEFycmF5LmZyb20oeS5maWx0ZXJTZXQoY2Esd2E9PiFsYS5oYXMod2EpKSkpLmF0dHIoImZpbGwiLCIjZGRkIik7Y2E9bGF9ZnVuY3Rpb24gcShsYSx3YSl7Y29uc29sZS5hc3NlcnQobnVsbCE9PWxhKTtjb25zb2xlLmFzc2VydChudWxsIT09d2EpO2NvbnN0IFtDYSx4YV09bGEsemE9bmV3IFNldDt5LnF1YWRUcmVlVmlzaXRQb2ludHNJblJlY3QoaGFbQ2FdW3hhXSx3YVswXVswXSx3YVswXVsxXSx3YVsxXVswXSwKd2FbMV1bMV0sRmE9PntkMy5zZWxlY3QoRmEpLmRhdHVtKCkuc2Vzc2lvbkdyb3VwTWFya2Vycy5mb3JFYWNoKFNhPT57emEuYWRkKFNhKX0pfSk7cmV0dXJuIHphfWZ1bmN0aW9uIHIobGEpe2NvbnN0IHdhPWQzLmJydXNoU2VsZWN0aW9uKGxhKTshdCgpJiZudWxsPT09d2F8fHQoKSYmbGE9PT1YLm5vZGUoKSYmXy5pc0VxdWFsKHdhLHguX2JydXNoU2VsZWN0aW9uKXx8KHguX2JydXNoU2VsZWN0aW9uPXdhLG51bGwhPT13YT8oWD1kMy5zZWxlY3QobGEpLHguX2JydXNoZWRDZWxsSW5kZXg9WC5kYXR1bSgpKTooWD1udWxsLHguX2JydXNoZWRDZWxsSW5kZXg9bnVsbCkscCgpKX1mdW5jdGlvbiB0KCl7cmV0dXJuIG51bGwhPT14Ll9icnVzaGVkQ2VsbEluZGV4JiZudWxsIT09eC5fYnJ1c2hTZWxlY3Rpb259ZnVuY3Rpb24gdigpe3JldHVybiF0KCl8fHguX2JydXNoU2VsZWN0aW9uWzBdWzBdPT09eC5fYnJ1c2hTZWxlY3Rpb25bMV1bMF18fHguX2JydXNoU2VsZWN0aW9uWzBdWzFdPT09CnguX2JydXNoU2VsZWN0aW9uWzFdWzFdfWZ1bmN0aW9uIEEobGEsd2EsQ2EseGEsemEpe2xldCBGYT1JbmZpbml0eSxTYT1udWxsO3kucXVhZFRyZWVWaXNpdFBvaW50c0luRGlzayhoYVtsYV1bd2FdLENhLHhhLHphLChFYSxHYSk9PntjYS5oYXMoRWEpJiZHYTxGYSYmKEVhPWQzLnNlbGVjdChFYSkuZGF0dW0oKSxGYT1HYSxTYT1FYS5zZXNzaW9uR3JvdXApfSk7cmV0dXJuIG51bGw9PT1TYT9udWxsOmQzLnNlbGVjdEFsbChhYS5nZXQoU2EpKX1jb25zdCB5PXRmLmhwYXJhbXMudXRpbHMseD10aGlzO2lmKHRoaXMuc2Vzc2lvbkdyb3VwcyYmMCE9dGhpcy5zZXNzaW9uR3JvdXBzLmxlbmd0aCYmdGhpcy52aXNpYmxlU2NoZW1hJiYwIT10aGlzLnZpc2libGVTY2hlbWEubWV0cmljSW5mb3MubGVuZ3RoKXt2YXIgQz1kMy5yYW5nZSh5Lm51bVZpc2libGVDb2x1bW5zKHgudmlzaWJsZVNjaGVtYSkpLEY9ZDMucmFuZ2UoeS5udW1WaXNpYmxlTWV0cmljcyh4LnZpc2libGVTY2hlbWEpKSwKRD1kMy5zY2FsZUJhbmQoKS5kb21haW4oQykucmFuZ2UoWzg1LHRoaXMud2lkdGgtMS01XSkucGFkZGluZ0lubmVyKC4xKSxCPWQzLnNjYWxlQmFuZCgpLmRvbWFpbihGKS5yYW5nZShbdGhpcy5oZWlnaHQtMS01LTUwLDVdKS5wYWRkaW5nSW5uZXIoLjEpLEc9RC5iYW5kd2lkdGgoKSxLPUIuYmFuZHdpZHRoKCksTD1DLm1hcChsYT0+eC5fY2VsbFNjYWxlKGxhLFswLEctMV0pKSxKPUYubWFwKGxhPT54Ll9jZWxsU2NhbGUobGEreS5udW1WaXNpYmxlSFBhcmFtcyh4LnZpc2libGVTY2hlbWEpLFtLLTEsMF0pKSxQPXRoaXMuX3N2Zy5zZWxlY3RBbGwoIi54LWF4aXMiKS5kYXRhKEMpLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgieC1heGlzIiwhMCkuYXR0cigidHJhbnNmb3JtIixsYT0+eS50cmFuc2xhdGVTdHIoRChsYSksMCkpO1AuYXBwZW5kKCJjbGlwUGF0aCIpLmF0dHIoImlkIixhKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4IiwtNSkuYXR0cigieSIsMCkuYXR0cigid2lkdGgiLApHKzEwKS5hdHRyKCJoZWlnaHQiLHguaGVpZ2h0LTI1KTtQLmFwcGVuZCgiY2xpcFBhdGgiKS5hdHRyKCJpZCIsYykuYXBwZW5kKCJyZWN0IikuYXR0cigieCIsMCkuYXR0cigieSIseC5oZWlnaHQtMjUpLmF0dHIoIndpZHRoIixHKS5hdHRyKCJoZWlnaHQiLDI1KTtQLmFwcGVuZCgiZyIpLmF0dHIoImNsaXAtcGF0aCIsbGE9PiJ1cmwoIyIrYShsYSkrIikiKS5lYWNoKGZ1bmN0aW9uKGxhKXtkMy5zZWxlY3QodGhpcykuY2FsbChnLGQzLmF4aXNCb3R0b20oTFtsYV0pLnRpY2tTaXplKHguaGVpZ2h0LTUwKSxHLDQwLHgub3B0aW9ucy5jb2x1bW5zW2xhXS5zY2FsZSl9KTtQLmFwcGVuZCgiZyIpLmNsYXNzZWQoIngtYXhpcy1sYWJlbCIsITApLmF0dHIoImNsaXAtcGF0aCIsbGE9PiJ1cmwoIyIrYyhsYSkrIikiKS5hcHBlbmQoInRleHQiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmF0dHIoIngiLEcvMikuYXR0cigieSIseC5oZWlnaHQtMS0xMi41KS50ZXh0KGxhPT55LnNjaGVtYVZpc2libGVDb2x1bW5OYW1lKHgudmlzaWJsZVNjaGVtYSwKbGEpKS5hcHBlbmQoInRpdGxlIikudGV4dChsYT0+eS5zY2hlbWFWaXNpYmxlQ29sdW1uTmFtZSh4LnZpc2libGVTY2hlbWEsbGEpKTtQPXRoaXMuX3N2Zy5zZWxlY3RBbGwoIi55LWF4aXMiKS5kYXRhKEYpLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgieS1heGlzIiwhMCkuYXR0cigidHJhbnNmb3JtIixsYT0+eS50cmFuc2xhdGVTdHIoeC53aWR0aC0xLEIobGEpKSk7UC5hcHBlbmQoImNsaXBQYXRoIikuYXR0cigiaWQiLGQpLmFwcGVuZCgicmVjdCIpLmF0dHIoIngiLC0oeC53aWR0aC00MC0xKSkuYXR0cigieSIsLTUpLmF0dHIoIndpZHRoIix4LndpZHRoLTQwKS5hdHRyKCJoZWlnaHQiLEsrMTApO1AuYXBwZW5kKCJjbGlwUGF0aCIpLmF0dHIoImlkIixmKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4IiwtKHgud2lkdGgtMSkpLmF0dHIoInkiLDApLmF0dHIoIndpZHRoIiw0MCkuYXR0cigiaGVpZ2h0IixLKTtQLmFwcGVuZCgiZyIpLmF0dHIoImNsaXAtcGF0aCIsbGE9PiJ1cmwoIyIrCmQobGEpKyIpIikuZWFjaChmdW5jdGlvbihsYSl7ZDMuc2VsZWN0KHRoaXMpLmNhbGwoZyxkMy5heGlzTGVmdChKW2xhXSkudGlja1NpemUoeC53aWR0aC04MCksSywyMCx4Lm9wdGlvbnMuY29sdW1uc1tsYSt5Lm51bVZpc2libGVIUGFyYW1zKHgudmlzaWJsZVNjaGVtYSldLnNjYWxlKX0pO1AuYXBwZW5kKCJnIikuY2xhc3NlZCgieS1heGlzLWxhYmVsIiwhMCkuYXR0cigiY2xpcC1wYXRoIixsYT0+InVybCgjIitmKGxhKSsiKSIpLmFwcGVuZCgidGV4dCIpLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIikuYXR0cigieCIsLSh4LndpZHRoLTIwLTEpKS5hdHRyKCJ5IixLLzIpLmF0dHIoInRyYW5zZm9ybSIseS5yb3RhdGVTdHIoLSh4LndpZHRoLTIwLTEpLEsvMikpLnRleHQobGE9PnkubWV0cmljTmFtZSh4LnZpc2libGVTY2hlbWEubWV0cmljSW5mb3NbbGFdKSkuYXBwZW5kKCJ0aXRsZSIpLnRleHQobGE9PnkubWV0cmljTmFtZSh4LnZpc2libGVTY2hlbWEubWV0cmljSW5mb3NbbGFdKSk7ClA9dGhpcy5fc3ZnLnNlbGVjdEFsbCgiLmNlbGwiKS5kYXRhKGQzLmNyb3NzKEMsRikpLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgiY2VsbCIsITApLmF0dHIoInRyYW5zZm9ybSIsKFtsYSx3YV0pPT55LnRyYW5zbGF0ZVN0cihEKGxhKSxCKHdhKSkpO1AuYXBwZW5kKCJnIikuY2xhc3NlZCgiZnJhbWUiLCEwKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4IiwtNSkuYXR0cigieSIsLTUpLmF0dHIoIndpZHRoIixHKzEwKS5hdHRyKCJoZWlnaHQiLEsrMTApLmF0dHIoInN0cm9rZSIsIiMwMDAiKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoInNoYXBlLXJlbmRlcmluZyIsImNyaXNwRWRnZXMiKTt2YXIgUz1udWxsO3ZvaWQgMCE9PXgub3B0aW9ucy5jb2xvckJ5Q29sdW1uSW5kZXgmJihTPWQzLnNjYWxlTGluZWFyKCkuZG9tYWluKHRoaXMuX2NvbEV4dGVudCh0aGlzLm9wdGlvbnMuY29sb3JCeUNvbHVtbkluZGV4KSkucmFuZ2UoW3RoaXMub3B0aW9ucy5taW5Db2xvcix0aGlzLm9wdGlvbnMubWF4Q29sb3JdKS5pbnRlcnBvbGF0ZShkMy5pbnRlcnBvbGF0ZUxhYikpOwp2YXIgTj12b2lkIDA9PT14Lm9wdGlvbnMuY29sb3JCeUNvbHVtbkluZGV4PygpPT4icmVkIjooe3Nlc3Npb25Hcm91cDpsYX0pPT5TKHRoaXMuX2NvbFZhbHVlKGxhLHgub3B0aW9ucy5jb2xvckJ5Q29sdW1uSW5kZXgpKSxbVCxZLGFhXT1mdW5jdGlvbihsYSx3YSl7Y29uc3QgQ2E9bGEuc2VsZWN0QWxsKCIuZGF0YS1tYXJrZXIiKS5kYXRhKChbemEsRmFdKT0+eC5zZXNzaW9uR3JvdXBzLmZpbHRlcihTYT0+dm9pZCAwIT09eC5fY29sVmFsdWUoU2EsemEpJiZ2b2lkIDAhPT14Ll9tZXRyaWNWYWx1ZShTYSxGYSkpLm1hcChTYT0+KHtjb2w6emEsbWV0cmljOkZhLHNlc3Npb25Hcm91cDpTYSx4OmwoU2EsemEpLHk6ayhTYSxGYSksc2Vzc2lvbkdyb3VwTWFya2VyczpudWxsfSkpKS5lbnRlcigpLmFwcGVuZCgiY2lyY2xlIikuY2xhc3NlZCgiZGF0YS1tYXJrZXIiLCEwKS5hdHRyKCJjeCIsKHt4OnphfSk9PnphKS5hdHRyKCJjeSIsKHt5OnphfSk9PnphKS5hdHRyKCJyIiwyKS5hdHRyKCJmaWxsIiwKd2EpLHhhPW5ldyBNYXA7eC5zZXNzaW9uR3JvdXBzLmZvckVhY2goemE9Pnt4YS5zZXQoemEsW10pfSk7Q2EuZWFjaChmdW5jdGlvbih6YSl7eGEuZ2V0KHphLnNlc3Npb25Hcm91cCkucHVzaCh0aGlzKX0pO0NhLmVhY2goemE9Pntjb25zdCBGYT14YS5nZXQoemEuc2Vzc2lvbkdyb3VwKTt6YS5zZXNzaW9uR3JvdXBNYXJrZXJzPW5ldyBTZXQoRmEpfSk7bGE9Qy5tYXAoemE9PkYubWFwKEZhPT5DYS5maWx0ZXIoU2E9PlNhLmNvbD09emEmJlNhLm1ldHJpYz09RmEpKSk7cmV0dXJuW0NhLGxhLHhhXX0oUC5hcHBlbmQoImciKSxOKSxoYT1DLm1hcChsYT0+Ri5tYXAod2E9Pm0obGEsd2EpKSksWD1udWxsO3QoKSYmKFg9UC5maWx0ZXIobGE9Pl8uaXNFcXVhbChsYSx4Ll9icnVzaGVkQ2VsbEluZGV4KSksY29uc29sZS5hc3NlcnQoMT09WC5zaXplKCksWCkpO3ZhciBjYT1uZXcgU2V0KFQubm9kZXMoKSk7cCgpO3ZhciBlYT1kMy5icnVzaCgpLmV4dGVudChbWy00LC00XSxbRy0xKzUtCjEsSy0xKzUtMV1dKS5vbigic3RhcnQiLGZ1bmN0aW9uKCl7dCgpJiZYLm5vZGUoKSE9dGhpcyYmZWEubW92ZShYLG51bGwpO3IodGhpcyl9KS5vbigiYnJ1c2giLGZ1bmN0aW9uKCl7cih0aGlzKX0pLm9uKCJlbmQiLGZ1bmN0aW9uKCl7cih0aGlzKX0pO1AuY2FsbChlYSk7dCgpJiZlYS5tb3ZlKFgseC5fYnJ1c2hTZWxlY3Rpb24pO3ZhciBrYT1udWxsLGJhPW51bGw7bnVsbCE9PXRoaXMuc2VsZWN0ZWRTZXNzaW9uR3JvdXAmJihiYT1kMy5zZWxlY3RBbGwoYWEuZ2V0KHRoaXMuc2VsZWN0ZWRTZXNzaW9uR3JvdXApKS5jbGFzc2VkKCJzZWxlY3RlZC1tYXJrZXIiLCEwKSk7UC5vbigiY2xpY2siLGZ1bmN0aW9uKCl7dmFyIGxhPWthPT09YmE/bnVsbDprYTtsYSE9PWJhJiYobnVsbCE9PWJhJiZiYS5jbGFzc2VkKCJzZWxlY3RlZC1tYXJrZXIiLCExKSxiYT1sYSxudWxsIT09YmEmJmJhLmNsYXNzZWQoInNlbGVjdGVkLW1hcmtlciIsITApLGxhPW51bGw9PT1iYT9udWxsOmJhLmRhdHVtKCkuc2Vzc2lvbkdyb3VwLAp4Ll9zZXRTZWxlY3RlZFNlc3Npb25Hcm91cChsYSkpfSkub24oIm1vdXNlbW92ZSBtb3VzZWVudGVyIixmdW5jdGlvbihbbGEsd2FdKXtjb25zdCBbQ2EseGFdPWQzLm1vdXNlKHRoaXMpO2xhPUEobGEsd2EsQ2EseGEsMjApO2thIT09bGEmJihudWxsIT09a2EmJmthLmNsYXNzZWQoImNsb3Nlc3QtbWFya2VyIiwhMSksa2E9bGEsbnVsbCE9PWthPyhrYS5jbGFzc2VkKCJjbG9zZXN0LW1hcmtlciIsITApLHguX3NldENsb3Nlc3RTZXNzaW9uR3JvdXAoa2EuZGF0dW0oKS5zZXNzaW9uR3JvdXApKTp4Ll9zZXRDbG9zZXN0U2Vzc2lvbkdyb3VwKG51bGwpKX0pLm9uKCJtb3VzZWxlYXZlIixmdW5jdGlvbigpe251bGwhPT1rYSYmKGthLmNsYXNzZWQoImNsb3Nlc3QtbWFya2VyIiwhMSksa2E9bnVsbCx4Ll9zZXRDbG9zZXN0U2Vzc2lvbkdyb3VwKG51bGwpKX0pO3RoaXMuX3N2Zy5zZWxlY3RBbGwoIioiKS5jbGFzc2VkKCJ0Zi1ocGFyYW1zLXNjYXR0ZXItcGxvdC1tYXRyaXgtcGxvdCIsCiEwKX19LF9jZWxsU2NhbGUoYSxjKXt2YXIgZD10aGlzLl9jb2xFeHRlbnQoYSk7Y29uc3QgZj1kMy5zY2FsZUxpbmVhcigpLmRvbWFpbihkKS5yYW5nZShjKTtpZigiTElORUFSIj09PXRoaXMub3B0aW9ucy5jb2x1bW5zW2FdLnNjYWxlKXJldHVybiBmO2lmKCJMT0ciPT09dGhpcy5vcHRpb25zLmNvbHVtbnNbYV0uc2NhbGUpcmV0dXJuIDA+PWRbMF0mJjA8PWRbMV0/ZjpkMy5zY2FsZUxvZygpLmRvbWFpbihkKS5yYW5nZShjKTtpZigiUVVBTlRJTEUiPT09dGhpcy5vcHRpb25zLmNvbHVtbnNbYV0uc2NhbGUpe2NvbnN0IGc9KGNbMV0tY1swXSkvMTk7ZD1kMy5yYW5nZSgyMCkubWFwKGw9PmNbMF0rZypsKTtyZXR1cm4gZDMuc2NhbGVRdWFudGlsZSgpLmRvbWFpbihfLnVuaXEodGhpcy5zZXNzaW9uR3JvdXBzLm1hcChsPT50aGlzLl9jb2xWYWx1ZShsLGEpKSkpLnJhbmdlKGQpfWlmKCJOT05fTlVNRVJJQyI9PT10aGlzLm9wdGlvbnMuY29sdW1uc1thXS5zY2FsZSlyZXR1cm4gZDMuc2NhbGVQb2ludCgpLmRvbWFpbihfLnVuaXEodGhpcy5zZXNzaW9uR3JvdXBzLm1hcChnPT4KdGhpcy5fY29sVmFsdWUoZyxhKSkuc29ydCgpKSkucmFuZ2UoYykucGFkZGluZyguMSk7dGhyb3ciVW5rbm93biBzY2FsZSBmb3IgY29sdW1uOiAiK2ErIi4gb3B0aW9uczogIit0aGlzLm9wdGlvbnM7fSxfY29sVmFsdWUoYSxjKXtyZXR1cm4gdGYuaHBhcmFtcy51dGlscy5jb2x1bW5WYWx1ZUJ5VmlzaWJsZUluZGV4KHRoaXMudmlzaWJsZVNjaGVtYSxhLGMpfSxfbWV0cmljVmFsdWUoYSxjKXtyZXR1cm4gdGYuaHBhcmFtcy51dGlscy5tZXRyaWNWYWx1ZUJ5VmlzaWJsZUluZGV4KHRoaXMudmlzaWJsZVNjaGVtYSxhLGMpfSxfY29sRXh0ZW50KGEpe3JldHVybiB0Zi5ocGFyYW1zLnV0aWxzLnZpc2libGVOdW1lcmljQ29sdW1uRXh0ZW50KHRoaXMudmlzaWJsZVNjaGVtYSx0aGlzLnNlc3Npb25Hcm91cHMsYSl9fSk7Cjwvc2NyaXB0Pgo8L2RvbS1tb2R1bGU+CgoKCgoKPGRvbS1tb2R1bGUgaWQ9InRmLWhwYXJhbXMtc2NhdHRlci1wbG90LW1hdHJpeC12aWV3Ij4KICA8dGVtcGxhdGU+CiAgICA8ZGl2IGNsYXNzPSJwYW5lIj4KICAgICAgPHZhYWRpbi1zcGxpdC1sYXlvdXQgdmVydGljYWw+CiAgICAgICAgCiAgICAgICAgPHRmLWhwYXJhbXMtc2NhbGUtYW5kLWNvbG9yLWNvbnRyb2xzIGNsYXNzPSJzZWN0aW9uIiBpZD0iY29udHJvbHMiIGNvbmZpZ3VyYXRpb249IltbY29uZmlndXJhdGlvbl1dIiBzZXNzaW9uLWdyb3Vwcz0iW1tzZXNzaW9uR3JvdXBzXV0iIG9wdGlvbnM9Int7X29wdGlvbnN9fSI+CiAgICAgICAgPC90Zi1ocGFyYW1zLXNjYWxlLWFuZC1jb2xvci1jb250cm9scz4KICAgICAgICA8dmFhZGluLXNwbGl0LWxheW91dCB2ZXJ0aWNhbD4KICAgICAgICAgIAogICAgICAgICAgPHRmLWhwYXJhbXMtc2NhdHRlci1wbG90LW1hdHJpeC1wbG90IGNsYXNzPSJzZWN0aW9uIiBpZD0icGxvdCIgdmlzaWJsZS1zY2hlbWE9IltbY29uZmlndXJhdGlvbi52aXNpYmxlU2NoZW1hXV0iIHNlc3Npb24tZ3JvdXBzPSJbW3Nlc3Npb25Hcm91cHNdXSIgc2VsZWN0ZWQtc2Vzc2lvbi1ncm91cD0ie3tfc2VsZWN0ZWRHcm91cH19IiBjbG9zZXN0LXNlc3Npb24tZ3JvdXA9Int7X2Nsb3Nlc3RHcm91cH19IiBvcHRpb25zPSJbW19vcHRpb25zXV0iPgogICAgICAgICAgPC90Zi1ocGFyYW1zLXNjYXR0ZXItcGxvdC1tYXRyaXgtcGxvdD4KICAgICAgICAgIDx2YWFkaW4tc3BsaXQtbGF5b3V0IHZlcnRpY2FsPgogICAgICAgICAgICA8dGYtaHBhcmFtcy1zZXNzaW9uLWdyb3VwLXZhbHVlcyBjbGFzcz0ic2VjdGlvbiIgaWQ9InZhbHVlcyIgdmlzaWJsZS1zY2hlbWE9IltbY29uZmlndXJhdGlvbi52aXNpYmxlU2NoZW1hXV0iIHNlc3Npb24tZ3JvdXA9IltbX2Nsb3Nlc3RPclNlbGVjdGVkKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2xvc2VzdEdyb3VwLCBfc2VsZWN0ZWRHcm91cCldXSI+CiAgICAgICAgICAgIDwvdGYtaHBhcmFtcy1zZXNzaW9uLWdyb3VwLXZhbHVlcz4KICAgICAgICAgICAgCiAgICAgICAgICAgIDx0Zi1ocGFyYW1zLXNlc3Npb24tZ3JvdXAtZGV0YWlscyBjbGFzcz0ic2VjdGlvbiIgaWQ9ImRldGFpbHMiIGJhY2tlbmQ9IltbYmFja2VuZF1dIiBleHBlcmltZW50LW5hbWU9IltbZXhwZXJpbWVudE5hbWVdXSIgc2Vzc2lvbi1ncm91cD0iW1tfc2VsZWN0ZWRHcm91cF1dIiB2aXNpYmxlLXNjaGVtYT0iW1tjb25maWd1cmF0aW9uLnZpc2libGVTY2hlbWFdXSI+CiAgICAgICAgICAgIDwvdGYtaHBhcmFtcy1zZXNzaW9uLWdyb3VwLWRldGFpbHM+CiAgICAgICAgICA8L3ZhYWRpbi1zcGxpdC1sYXlvdXQ+CiAgICAgICAgPC92YWFkaW4tc3BsaXQtbGF5b3V0PgogICAgICA8L3ZhYWRpbi1zcGxpdC1sYXlvdXQ+CiAgICA8L2Rpdj4KICAgIDxzdHlsZT4KICAgICAgLnBhbmUgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIH0KICAgICAgLnNlY3Rpb24gewogICAgICAgIG1hcmdpbjogMTBweDsKICAgICAgfQogICAgICAjY29udHJvbHMgewogICAgICAgIGZsZXgtZ3JvdzogMDsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgICBmbGV4LWJhc2lzOiBhdXRvOwogICAgICAgIGhlaWdodDogYXV0bzsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIG1heC1oZWlnaHQ6IGZpdC1jb250ZW50OwogICAgICB9CiAgICAgICNwbG90IHsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgZmxleC1zaHJpbms6IDE7CiAgICAgICAgZmxleC1iYXNpczogYXV0bzsKICAgICAgICBoZWlnaHQ6IGF1dG87CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICBtYXgtaGVpZ2h0OiBmaXQtY29udGVudDsKICAgICAgfQogICAgICAjdmFsdWVzIHsKICAgICAgICBmbGV4LWdyb3c6IDA7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgZmxleC1iYXNpczogYXV0bzsKICAgICAgICBoZWlnaHQ6IDk1cHg7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICBtYXgtaGVpZ2h0OiBmaXQtY29udGVudDsKICAgICAgfQogICAgICAjZGV0YWlscyB7CiAgICAgICAgZmxleC1ncm93OiAwOwogICAgICAgIGZsZXgtc2hyaW5rOiAxOwogICAgICAgIGZsZXgtYmFzaXM6IGF1dG87CiAgICAgICAgaGVpZ2h0OiBhdXRvOwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgICAgbWF4LWhlaWdodDogZml0LWNvbnRlbnQ7CiAgICAgIH0KICAgICAgdmFhZGluLXNwbGl0LWxheW91dCB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CgogIDxzY3JpcHQ+Ly9+fldFQlBBVEh+fi90Zi1ocGFyYW1zLXNjYXR0ZXItcGxvdC1tYXRyaXgtdmlldy90Zi1ocGFyYW1zLXNjYXR0ZXItcGxvdC1tYXRyaXgtdmlldy5odG1sLmpzClBvbHltZXIoe2lzOiJ0Zi1ocGFyYW1zLXNjYXR0ZXItcGxvdC1tYXRyaXgtdmlldyIscHJvcGVydGllczp7YmFja2VuZDpPYmplY3QsZXhwZXJpbWVudE5hbWU6U3RyaW5nLGNvbmZpZ3VyYXRpb246T2JqZWN0LHNlc3Npb25Hcm91cHM6QXJyYXl9LF9jbG9zZXN0T3JTZWxlY3RlZDpmdW5jdGlvbihhLGMpe3JldHVybiBudWxsIT09YT9hOmN9fSk7Cjwvc2NyaXB0Pgo8L2RvbS1tb2R1bGU+CgoKCgo8ZG9tLW1vZHVsZSBpZD0idGYtaHBhcmFtcy1zZXNzaW9ucy1wYW5lIj4KICA8dGVtcGxhdGU+CiAgICA8cGFwZXItaGVhZGVyLXBhbmVsPgogICAgICA8cGFwZXItdG9vbGJhciBzbG90PSJoZWFkZXIiIGNsYXNzPSJ0YWItYmFyIj4KICAgICAgICA8cGFwZXItdGFicyBzZWxlY3RlZD0ie3tfc2VsZWN0ZWRUYWJ9fSIgc2xvdD0idG9wIj4KICAgICAgICAgIAogICAgICAgICAgPHBhcGVyLXRhYiB2aWV3LWlkPSJ0YWJsZS12aWV3Ij4KICAgICAgICAgICAgVEFCTEUgVklFVwogICAgICAgICAgPC9wYXBlci10YWI+CiAgICAgICAgICA8cGFwZXItdGFiIHZpZXctaWQ9InBhcmFsbGVsLWNvb3Jkcy12aWV3Ij4KICAgICAgICAgICAgUEFSQUxMRUwgQ09PUkRJTkFURVMgVklFVwogICAgICAgICAgPC9wYXBlci10YWI+CiAgICAgICAgICA8cGFwZXItdGFiIHZpZXctaWQ9InNjYXR0ZXItcGxvdC1tYXRyaXgtdmlldyI+CiAgICAgICAgICAgIFNDQVRURVIgUExPVCBNQVRSSVggVklFVwogICAgICAgICAgPC9wYXBlci10YWI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWxwLWFuZC1mZWVkYmFjayI+CiAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tidWdSZXBvcnRVcmxdXSI+CiAgICAgICAgICAgICAgPGEgaHJlZiQ9IltbYnVnUmVwb3J0VXJsXV0iIHRhcmdldD0iX2JsYW5rIiByZWw9Im5vb3BlbmVyIG5vcmVmZXJyZXIiPgogICAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbiBpZD0iYnVnLXJlcG9ydCIgcmFpc2VkIHRpdGxlPSJTZW5kIGEgYnVnIHJlcG9ydCBvciBmZWF0dXJlIHJlcXVlc3QiPgogICAgICAgICAgICAgICAgICBCdWcgUmVwb3J0IC8gRmVhdHVyZSBSZXF1ZXN0CiAgICAgICAgICAgICAgICA8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1toZWxwVXJsXV0iPgogICAgICAgICAgICAgIDxhIGhyZWYkPSJbW2hlbHBVcmxdXSIgdGFyZ2V0PSJfYmxhbmsiIHJlbD0ibm9vcGVuZXIgbm9yZWZlcnJlciI+CiAgICAgICAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24gaWNvbj0iaGVscC1vdXRsaW5lIiB0aXRsZT0iVmlldyBkb2N1bWVudGF0aW9uIj4KICAgICAgICAgICAgICAgIDwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9wYXBlci10YWJzPgogICAgICA8L3BhcGVyLXRvb2xiYXI+CiAgICAgIDxpcm9uLXBhZ2VzIHNlbGVjdGVkPSJbW19zZWxlY3RlZFRhYl1dIiBjbGFzcz0iZml0IHRhYi12aWV3Ij4KICAgICAgICA8ZGl2IGlkPSIwIiBjbGFzcz0idGFiIj4KICAgICAgICAgIDx0Zi1ocGFyYW1zLXRhYmxlLXZpZXcgYmFja2VuZD0iW1tiYWNrZW5kXV0iIGV4cGVyaW1lbnQtbmFtZT0iW1tleHBlcmltZW50TmFtZV1dIiB2aXNpYmxlLXNjaGVtYT0iW1tjb25maWd1cmF0aW9uLnZpc2libGVTY2hlbWFdXSIgc2Vzc2lvbi1ncm91cHM9Iltbc2Vzc2lvbkdyb3Vwc11dIiBlbmFibGUtc2hvdy1tZXRyaWNzPgogICAgICAgICAgPC90Zi1ocGFyYW1zLXRhYmxlLXZpZXc+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBpZD0iMSIgY2xhc3M9InRhYiI+CiAgICAgICAgICA8dGYtaHBhcmFtcy1wYXJhbGxlbC1jb29yZHMtdmlldyBiYWNrZW5kPSJbW2JhY2tlbmRdXSIgZXhwZXJpbWVudC1uYW1lPSJbW2V4cGVyaW1lbnROYW1lXV0iIGNvbmZpZ3VyYXRpb249IltbY29uZmlndXJhdGlvbl1dIiBzZXNzaW9uLWdyb3Vwcz0iW1tzZXNzaW9uR3JvdXBzXV0iPgogICAgICAgICAgPC90Zi1ocGFyYW1zLXBhcmFsbGVsLWNvb3Jkcy12aWV3PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgaWQ9IjIiIGNsYXNzPSJ0YWIiPgogICAgICAgICAgPHRmLWhwYXJhbXMtc2NhdHRlci1wbG90LW1hdHJpeC12aWV3IGJhY2tlbmQ9IltbYmFja2VuZF1dIiBleHBlcmltZW50LW5hbWU9IltbZXhwZXJpbWVudE5hbWVdXSIgY29uZmlndXJhdGlvbj0iW1tjb25maWd1cmF0aW9uXV0iIHNlc3Npb24tZ3JvdXBzPSJbW3Nlc3Npb25Hcm91cHNdXSI+CiAgICAgICAgICA8L3RmLWhwYXJhbXMtc2NhdHRlci1wbG90LW1hdHJpeC12aWV3PgogICAgICAgIDwvZGl2PgogICAgICA8L2lyb24tcGFnZXM+CiAgICA8L3BhcGVyLWhlYWRlci1wYW5lbD4KCiAgICA8c3R5bGU+CiAgICAgIC50YWItdmlldyB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CiAgICAgIC50YWItYmFyIHsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIGNvbG9yOiB3aGl0ZTsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoCiAgICAgICAgICAtLXRiLXRvb2xiYXItYmFja2dyb3VuZC1jb2xvciwKICAgICAgICAgIHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpCiAgICAgICAgKTsKICAgICAgfQogICAgICAudGFiIHsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIH0KICAgICAgcGFwZXItdGFicyB7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICAtLXBhcGVyLXRhYnMtc2VsZWN0aW9uLWJhci1jb2xvcjogd2hpdGU7CiAgICAgICAgLS1wYXBlci10YWJzLWNvbnRlbnQ6IHsKICAgICAgICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOwogICAgICAgIH0KICAgICAgfQogICAgICB0Zi1ocGFyYW1zLXRhYmxlLXZpZXcgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgfQogICAgICAuaGVscC1hbmQtZmVlZGJhY2sgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OyAvKiBFbnN1cmUgdGhhdCBpY29ucyBzdGF5IGFsaWduZWQgKi8KICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7CiAgICAgICAgY29sb3I6IHdoaXRlOwogICAgICB9CiAgICAgICNidWctcmVwb3J0IHsKICAgICAgICBib3JkZXI6IHNvbGlkIGJsYWNrOwogICAgICAgIGJhY2tncm91bmQ6IHJlZDsKICAgICAgICB3aGl0ZS1zcGFjZTogbm9ybWFsOwogICAgICAgIHdvcmQtYnJlYWs6IGJyZWFrLXdvcmRzOwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBtYXgtd2lkdGg6IDE1MHB4OwogICAgICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICAgIH0KICAgICAgLmhlbHAtYW5kLWZlZWRiYWNrIGEgewogICAgICAgIGNvbG9yOiB3aGl0ZTsKICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KCiAgPHNjcmlwdD4vL35+V0VCUEFUSH5+L3RmLWhwYXJhbXMtc2Vzc2lvbnMtcGFuZS90Zi1ocGFyYW1zLXNlc3Npb25zLXBhbmUuaHRtbC5qcwpQb2x5bWVyKHtpczoidGYtaHBhcmFtcy1zZXNzaW9ucy1wYW5lIixwcm9wZXJ0aWVzOntiYWNrZW5kOk9iamVjdCxoZWxwVXJsOlN0cmluZyxidWdSZXBvcnRVcmw6U3RyaW5nLGV4cGVyaW1lbnROYW1lOlN0cmluZyxjb25maWd1cmF0aW9uOk9iamVjdCxzZXNzaW9uR3JvdXBzOkFycmF5LF9zZWxlY3RlZFRhYjp7dHlwZTpOdW1iZXIsdmFsdWU6MH19fSk7Cjwvc2NyaXB0Pgo8L2RvbS1tb2R1bGU+CgoKCgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdGYtaHBhcmFtcy1nb29nbGUtYW5hbHl0aWNzLXRyYWNrZXIvdGYtaHBhcmFtcy1nb29nbGUtYW5hbHl0aWNzLXRyYWNrZXIuaHRtbC5qcwooZnVuY3Rpb24oKXtQb2x5bWVyKHtpczoidGYtaHBhcmFtcy1nb29nbGUtYW5hbHl0aWNzLXRyYWNrZXIiLGhhbmRsZUV2ZW50OmZ1bmN0aW9uKCl7fX0pfSkoKTsKPC9zY3JpcHQ+CgoKCgoKPGRvbS1tb2R1bGUgaWQ9InRmLWhwYXJhbXMtbWFpbiI+CiAgPHRlbXBsYXRlPgogICAgPHZhYWRpbi1zcGxpdC1sYXlvdXQ+CiAgICAgIDxkaXYgY2xhc3M9InNpZGViYXIiIHNsb3Q9InNpZGViYXIiPgogICAgICAgIDx0Zi1ocGFyYW1zLXF1ZXJ5LXBhbmUgaWQ9InF1ZXJ5LXBhbmUiIGJhY2tlbmQ9IltbYmFja2VuZF1dIiBleHBlcmltZW50LW5hbWU9IltbZXhwZXJpbWVudE5hbWVdXSIgY29uZmlndXJhdGlvbj0ie3tfY29uZmlndXJhdGlvbn19IiBzZXNzaW9uLWdyb3Vwcz0ie3tfc2Vzc2lvbkdyb3Vwc319Ij4KICAgICAgICA8L3RmLWhwYXJhbXMtcXVlcnktcGFuZT4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNlbnRlciIgc2xvdD0iY2VudGVyIj4KICAgICAgICA8dGYtaHBhcmFtcy1zZXNzaW9ucy1wYW5lIGlkPSJzZXNzaW9ucy1wYW5lIiBiYWNrZW5kPSJbW2JhY2tlbmRdXSIgaGVscC11cmw9IltbaGVscFVybF1dIiBidWctcmVwb3J0LXVybD0iW1tidWdSZXBvcnRVcmxdXSIgZXhwZXJpbWVudC1uYW1lPSJbW2V4cGVyaW1lbnROYW1lXV0iIGNvbmZpZ3VyYXRpb249IltbX2NvbmZpZ3VyYXRpb25dXSIgc2Vzc2lvbi1ncm91cHM9IltbX3Nlc3Npb25Hcm91cHNdXSI+CiAgICAgICAgPC90Zi1ocGFyYW1zLXNlc3Npb25zLXBhbmU+CiAgICAgIDwvZGl2PgogICAgPC92YWFkaW4tc3BsaXQtbGF5b3V0PgogICAgPHRmLWhwYXJhbXMtZ29vZ2xlLWFuYWx5dGljcy10cmFja2VyIGlkPSJ0cmFja2VyIiB0cmFja2luZy1pZD0iW1t0cmFja2luZ0lkXV0iIG5hbWU9InRmX2hwYXJhbXMiPgogICAgPC90Zi1ocGFyYW1zLWdvb2dsZS1hbmFseXRpY3MtdHJhY2tlcj4KCiAgICA8c3R5bGU+CiAgICAgIHZhYWRpbi1zcGxpdC1sYXlvdXQgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAuc2lkZWJhciB7CiAgICAgICAgd2lkdGg6IDIwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgb3ZlcmZsb3c6IGF1dG87CiAgICAgICAgZmxleC1ncm93OiAwOwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICAgIG1pbi13aWR0aDogMTAlOwogICAgICB9CgogICAgICAuY2VudGVyIHsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgZmxleC1zaHJpbms6IDE7CiAgICAgICAgd2lkdGg6IDgwJTsKICAgICAgfQoKICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KCiAgPHNjcmlwdD4vL35+V0VCUEFUSH5+L3RmLWhwYXJhbXMtbWFpbi90Zi1ocGFyYW1zLW1haW4uaHRtbC5qcwpQb2x5bWVyKHtpczoidGYtaHBhcmFtcy1tYWluIixwcm9wZXJ0aWVzOntiYWNrZW5kOk9iamVjdCxleHBlcmltZW50TmFtZTpTdHJpbmcsdHJhY2tpbmdJZDpTdHJpbmcsaGVscFVybDpTdHJpbmcsYnVnUmVwb3J0VXJsOlN0cmluZyxfY29uZmlndXJhdGlvbjpPYmplY3QsX3Nlc3Npb25Hcm91cHM6QXJyYXksX3Rocm90dGxlZFNlbmRFdmVudFRvR0E6e3R5cGU6RnVuY3Rpb24sdmFsdWU6KCk9Pl8udGhyb3R0bGUoZnVuY3Rpb24oKXt0aGlzLl9oYW5kbGVHQUV2ZW50KHtkZXRhaWw6e2hpdFR5cGU6ImV2ZW50IixldmVudENhdGVnb3J5OiJVc2VySW50ZXJhY3Rpb24iLGV2ZW50TGFiZWw6IkV4cGVyaW1lbnQ6ICIrdGhpcy5leHBlcmltZW50TmFtZX19KX0sNkU0LHtsZWFkaW5nOiEwfSl9fSxsaXN0ZW5lcnM6e21vdXNlbW92ZToiX3NlbmRFdmVudFRvR0EiLHRhcDoiX3NlbmRFdmVudFRvR0EiLCJnb29nbGUtYW5hbHl0aWNzLXRyYWNraW5nIjoiX2hhbmRsZUdBRXZlbnQifSxhdHRhY2hlZCgpe3RoaXMuX2hhbmRsZUdBRXZlbnQoe2RldGFpbDp7aGl0VHlwZToicGFnZXZpZXcifX0pfSwKcmVsb2FkKCl7dGhpcy4kWyJxdWVyeS1wYW5lIl0ucmVsb2FkKCl9LF9zZW5kRXZlbnRUb0dBKCl7dGhpcy5fdGhyb3R0bGVkU2VuZEV2ZW50VG9HQSh0aGlzKX0sX2hhbmRsZUdBRXZlbnQoYSl7dGhpcy4kLnRyYWNrZXIuaGFuZGxlRXZlbnQoYSl9fSk7Cjwvc2NyaXB0Pgo8L2RvbS1tb2R1bGU+CgoKCjxzY3JpcHQ+Ly9+fldFQlBBVEh+fi90Zi1ocGFyYW1zLWJhY2tlbmQvdGYtaHBhcmFtcy1iYWNrZW5kLmh0bWwuanMKKGZ1bmN0aW9uKGEpeyhmdW5jdGlvbihjKXtjbGFzcyBke2NvbnN0cnVjdG9yKGYsZyxsPSEwKXt0aGlzLl9hcGlVcmw9Zjt0aGlzLl9yZXF1ZXN0TWFuYWdlcj1nO3RoaXMuX3VzZUh0dHBHZXQ9bH1nZXRFeHBlcmltZW50KGYpe3JldHVybiB0aGlzLl9zZW5kUmVxdWVzdCgiZXhwZXJpbWVudCIsZil9bGlzdFNlc3Npb25Hcm91cHMoZil7cmV0dXJuIHRoaXMuX3NlbmRSZXF1ZXN0KCJzZXNzaW9uX2dyb3VwcyIsZil9bGlzdE1ldHJpY0V2YWxzKGYpe3JldHVybiB0aGlzLl9zZW5kUmVxdWVzdCgibWV0cmljX2V2YWxzIixmKX1fc2VuZFJlcXVlc3QoZixnKXtpZih0aGlzLl91c2VIdHRwR2V0KXJldHVybiBnPWVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShnKSksdGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdCh0aGlzLl9hcGlVcmwrIi8iK2YrIj9yZXF1ZXN0XHgzZCIrZyk7Y29uc3QgbD1uZXcgUGsuUmVxdWVzdE9wdGlvbnM7bC53aXRoQ3JlZGVudGlhbHM9ITA7CmwubWV0aG9kVHlwZT0iUE9TVCI7bC5jb250ZW50VHlwZT0idGV4dC9wbGFpbiI7bC5ib2R5PUpTT04uc3RyaW5naWZ5KGcpO3JldHVybiB0aGlzLl9yZXF1ZXN0TWFuYWdlci5yZXF1ZXN0V2l0aE9wdGlvbnModGhpcy5fYXBpVXJsKyIvIitmLGwpfX1jLkJhY2tlbmQ9ZH0pKGEuaHBhcmFtc3x8KGEuaHBhcmFtcz17fSkpfSkodGZ8fCh0Zj17fSkpOwo8L3NjcmlwdD4KCgoKPGRvbS1tb2R1bGUgaWQ9InRmLWhwYXJhbXMtZGFzaGJvYXJkIj4KICA8dGVtcGxhdGU+CiAgICAKICAgIDx0Zi1ocGFyYW1zLW1haW4gaWQ9ImhwYXJhbXMtbWFpbiIgYmFja2VuZD0iW1tfYmFja2VuZF1dIiBleHBlcmltZW50LW5hbWU9IiI+CiAgICA8L3RmLWhwYXJhbXMtbWFpbj4KICA8L3RlbXBsYXRlPgogIDxzY3JpcHQ+Ly9+fldFQlBBVEh+fi90Zi1ocGFyYW1zLWRhc2hib2FyZC90Zi1ocGFyYW1zLWRhc2hib2FyZC5odG1sLmpzCihmdW5jdGlvbigpe1BvbHltZXIoe2lzOiJ0Zi1ocGFyYW1zLWRhc2hib2FyZCIscHJvcGVydGllczp7X2JhY2tlbmQ6e3R5cGU6T2JqZWN0LHZhbHVlOigpPT5uZXcgdGYuaHBhcmFtcy5CYWNrZW5kKFBrLmdldFJvdXRlcigpLnBsdWdpblJvdXRlKCJocGFyYW1zIiwiIiksbmV3IFBrLlJlcXVlc3RNYW5hZ2VyLCEhKHdpbmRvdy5URU5TT1JCT0FSRF9FTlZ8fHt9KS5JTl9DT0xBQil9fSxyZWxvYWQoKXt0aGlzLiRbImhwYXJhbXMtbWFpbiJdLnJlbG9hZCgpfX0pfSkoKTsKPC9zY3JpcHQ+CjwvZG9tLW1vZHVsZT4KCgoKCgoKCgoKCgoKCgoKCgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdGYtaW1wb3J0cy9hcnJheS1idWZmZXItZGF0YS1wcm92aWRlci5qcwp2YXIgc3E7CihmdW5jdGlvbihhKXthLkVycm9yQ29kZXM9e0NBTkNFTExFRDoxfTtjb25zdCBjPXtWRVJURVg6MSxGQUNFOjIsQ09MT1I6M30sZD17VkVSVEVYOiJmbG9hdDMyIixGQUNFOiJpbnQzMiIsQ09MT1I6InVpbnQ4In07Y2xhc3MgZntjb25zdHJ1Y3RvcihnKXt0aGlzLl9yZXF1ZXN0TWFuYWdlcj1nO3RoaXMuX2NhbmNlbGxlcj1uZXcgUGsuQ2FuY2VsbGVyfXJlbG9hZChnLGwsayl7dGhpcy5fY2FuY2VsbGVyLmNhbmNlbEFsbCgpO3JldHVybiB0aGlzLl9mZXRjaE1ldGFkYXRhKGcsbCxrKX1fZmV0Y2hEYXRhQnlTdGVwKGcsbCxrLG0scCxxKXtmdW5jdGlvbiByKHQpe2xldCB2PVtdO2ZvcihsZXQgQT0wO0E8dC5sZW5ndGgvMztBKyspe2xldCB5PVtdO2ZvcihsZXQgeD0wOzM+eDt4KyspeS5wdXNoKHRbMypBK3hdKTt2LnB1c2goeSl9cmV0dXJuIHZ9Zz1Qay5nZXRSb3V0ZXIoKS5wbHVnaW5Sb3V0ZSgibWVzaCIsIi9kYXRhIixuZXcgVVJMU2VhcmNoUGFyYW1zKHt0YWc6bCxydW46ZywKY29udGVudF90eXBlOmssc2FtcGxlOm0sc3RlcDpwfSkpO2w9dGhpcy5fY2FuY2VsbGVyLmNhbmNlbGxhYmxlKHQ9PntpZih0LmNhbmNlbGxlZClyZXR1cm4gUHJvbWlzZS5yZWplY3Qoe2NvZGU6YS5FcnJvckNvZGVzLkNBTkNFTExFRCxtZXNzYWdlOiJSZXNwb25zZSB3YXMgaW52YWxpZGF0ZWQuIn0pO3Q9dC52YWx1ZTtzd2l0Y2goayl7Y2FzZSAiVkVSVEVYIjpxLnZlcnRpY2VzPXIobmV3IEZsb2F0MzJBcnJheSh0KSk7YnJlYWs7Y2FzZSAiRkFDRSI6cS5mYWNlcz1yKG5ldyBJbnQzMkFycmF5KHQpKTticmVhaztjYXNlICJDT0xPUiI6cS5jb2xvcnM9cihuZXcgVWludDhBcnJheSh0KSl9cmV0dXJuIHF9KTtyZXR1cm4gdGhpcy5fcmVxdWVzdE1hbmFnZXIuZmV0Y2goZyxudWxsLCJhcnJheWJ1ZmZlciIsZFtrXSkudGhlbih0PT50LmFycmF5QnVmZmVyKCkpLnRoZW4obCl9ZmV0Y2hEYXRhKGcsbCxrLG0pe2xldCBwPVtdLHE9bmV3IE1hcDtPYmplY3Qua2V5cyhjKS5mb3JFYWNoKHI9Pgp7Zy5jb21wb25lbnRzJjE8PGNbcl0mJnAucHVzaCh0aGlzLl9mZXRjaERhdGFCeVN0ZXAobCxrLHIsbSxnLnN0ZXAscSkpfSk7cmV0dXJuIFByb21pc2UuYWxsKHApfV9mZXRjaE1ldGFkYXRhKGcsbCxrKXt0aGlzLl9jYW5jZWxsZXIuY2FuY2VsQWxsKCk7Zz1Qay5nZXRSb3V0ZXIoKS5wbHVnaW5Sb3V0ZSgibWVzaCIsIi9tZXNoZXMiLG5ldyBVUkxTZWFyY2hQYXJhbXMoe3RhZzpsLHJ1bjpnLHNhbXBsZTprfSkpO2w9dGhpcy5fY2FuY2VsbGVyLmNhbmNlbGxhYmxlKG09Pm0uY2FuY2VsbGVkP1Byb21pc2UucmVqZWN0KHtjb2RlOmEuRXJyb3JDb2Rlcy5DQU5DRUxMRUQsbWVzc2FnZToiUmVzcG9uc2Ugd2FzIGludmFsaWRhdGVkLiJ9KTptLnZhbHVlKTtyZXR1cm4gdGhpcy5fcmVxdWVzdE1hbmFnZXIuZmV0Y2goZykudGhlbihtPT5tLmpzb24oKSkudGhlbihsKS50aGVuKHRoaXMuX3Byb2Nlc3NNZXRhZGF0YS5iaW5kKHRoaXMpKX1fcHJvY2Vzc01ldGFkYXRhKGcpe2lmKGcpe3ZhciBsPQpuZXcgTWFwO2ZvcihsZXQgbT0wO208Zy5sZW5ndGg7bSsrKXtsZXQgcD1nW21dO2wuaGFzKHAuc3RlcCl8fGwuc2V0KHAuc3RlcCxbXSk7bC5nZXQocC5zdGVwKS5wdXNoKHApfXZhciBrPVtdO2wuZm9yRWFjaChtPT57bT10aGlzLl9jcmVhdGVTdGVwRGF0dW0obVswXSk7ay5wdXNoKG0pfSk7cmV0dXJuIGt9fV9jcmVhdGVTdGVwRGF0dW0oZyl7cmV0dXJue3dhbGxfdGltZTpuZXcgRGF0ZSgxRTMqZy53YWxsX3RpbWUpLHN0ZXA6Zy5zdGVwLGNvbmZpZzpnLmNvbmZpZyxjb250ZW50X3R5cGU6Zy5jb250ZW50X3R5cGUsY29tcG9uZW50czpnLmNvbXBvbmVudHN9fX1hLkFycmF5QnVmZmVyRGF0YVByb3ZpZGVyPWZ9KShzcXx8KHNxPXt9KSk7Cjwvc2NyaXB0Pgo8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdGYtaW1wb3J0cy9tZXNoLXZpZXdlci5qcwooZnVuY3Rpb24oYSl7Y2xhc3MgYyBleHRlbmRzIFRIUkVFLkV2ZW50RGlzcGF0Y2hlcntjb25zdHJ1Y3RvcihkKXtzdXBlcigpO3RoaXMuX2xhc3RNZXNoPW51bGw7dGhpcy5fY2xvY2s9bmV3IFRIUkVFLkNsb2NrO3RoaXMuX2NhbnZhc1NpemU9bnVsbDt0aGlzLl9ydW5Db2xvcj1kfV9pc09iamVjdChkKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGQmJm51bGwhPWQmJiFBcnJheS5pc0FycmF5KGQpfV9hcHBseURlZmF1bHRzKGQsZil7bGV0IGc9e307ZD1bZCxmXTtmb3IoZj0wO2Y8ZC5sZW5ndGg7ZisrKXtjb25zdCBsPWRbZl07Zm9yKGxldCBrIGluIGwpe2NvbnN0IG09ayBpbiBnO3RoaXMuX2lzT2JqZWN0KGxba10pP2dba109dGhpcy5fYXBwbHlEZWZhdWx0cyhnW2tdfHx7fSxsW2tdKTptfHwoZ1trXT1sW2tdKX19cmV0dXJuIGd9X2NyZWF0ZVdvcmxkKGQsZil7dGhpcy5pc1JlYWR5KCl8fCh0aGlzLl9zY2VuZT1uZXcgVEhSRUUuU2NlbmUsdGhpcy5fY2FtZXJhPWQ9bmV3IFRIUkVFW2QuY2FtZXJhLmNsc10oZC5jYW1lcmEuZm92LAp0aGlzLl9jYW52YXNTaXplLndpZHRoL3RoaXMuX2NhbnZhc1NpemUuaGVpZ2h0LGQuY2FtZXJhLm5lYXIsZC5jYW1lcmEuZmFyKSxmPW5ldyBUSFJFRS5PcmJpdENvbnRyb2xzKGQsZiksZi5sb29rU3BlZWQ9LjQsZi5tb3ZlbWVudFNwZWVkPTIwLGYubm9GbHk9ITAsZi5sb29rVmVydGljYWw9ITAsZi5jb25zdHJhaW5WZXJ0aWNhbD0hMCxmLnZlcnRpY2FsTWluPTEsZi52ZXJ0aWNhbE1heD0yLGYuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIix0aGlzLl9vbkNhbWVyYVBvc2l0aW9uQ2hhbmdlLmJpbmQodGhpcykpLHRoaXMuX2NhbWVyYUNvbnRyb2xzPWYsdGhpcy5fcmVuZGVyZXI9bmV3IFRIUkVFLldlYkdMUmVuZGVyZXIoe2FudGlhbGlhczohMH0pLHRoaXMuX3JlbmRlcmVyLnNldFBpeGVsUmF0aW8oKSx0aGlzLl9yZW5kZXJlci5zZXRTaXplKHRoaXMuX2NhbnZhc1NpemUud2lkdGgsdGhpcy5fY2FudmFzU2l6ZS5oZWlnaHQpLHRoaXMuX3JlbmRlcmVyLnNldENsZWFyQ29sb3IoMTY3NzcyMTUsCjEpKX1fY2xlYXJTY2VuZSgpe2Zvcig7MDx0aGlzLl9zY2VuZS5jaGlsZHJlbi5sZW5ndGg7KXRoaXMuX3NjZW5lLnJlbW92ZSh0aGlzLl9zY2VuZS5jaGlsZHJlblswXSl9Z2V0UmVuZGVyZXIoKXtyZXR1cm4gdGhpcy5fcmVuZGVyZXJ9Z2V0Q2FtZXJhQ29udHJvbHMoKXtyZXR1cm4gdGhpcy5fY2FtZXJhQ29udHJvbHN9aXNSZWFkeSgpe3JldHVybiEhdGhpcy5fY2FtZXJhJiYhIXRoaXMuX2NhbWVyYUNvbnRyb2xzfWdldENhbWVyYVBvc2l0aW9uKCl7cmV0dXJue2Zhcjp0aGlzLl9jYW1lcmEuZmFyLHBvc2l0aW9uOnRoaXMuX2NhbWVyYS5wb3NpdGlvbi5jbG9uZSgpLHRhcmdldDp0aGlzLl9jYW1lcmFDb250cm9scy50YXJnZXQuY2xvbmUoKX19c2V0Q2FudmFzU2l6ZShkKXt0aGlzLl9jYW52YXNTaXplPWR9ZHJhdygpe3RoaXMuX2FuaW1hdGlvbkZyYW1lSW5kZXgmJmNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuX2FuaW1hdGlvbkZyYW1lSW5kZXgpO3RoaXMuX2NhbWVyYS5hc3BlY3Q9CnRoaXMuX2NhbnZhc1NpemUud2lkdGgvdGhpcy5fY2FudmFzU2l6ZS5oZWlnaHQ7dGhpcy5fY2FtZXJhLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKTt0aGlzLl9yZW5kZXJlci5zZXRTaXplKHRoaXMuX2NhbnZhc1NpemUud2lkdGgsdGhpcy5fY2FudmFzU2l6ZS5oZWlnaHQpO2NvbnN0IGQ9ZnVuY3Rpb24oKXt2YXIgZj10aGlzLl9jbG9jay5nZXREZWx0YSgpO3RoaXMuX2NhbWVyYUNvbnRyb2xzLnVwZGF0ZShmKTt0aGlzLl9hbmltYXRpb25GcmFtZUluZGV4PXJlcXVlc3RBbmltYXRpb25GcmFtZShkKTt0aGlzLl9yZW5kZXJlci5yZW5kZXIodGhpcy5fc2NlbmUsdGhpcy5fY2FtZXJhKX0uYmluZCh0aGlzKTtkKCl9dXBkYXRlU2NlbmUoZCxmKXtsZXQgZz17fTsiY29uZmlnImluIGQmJmQuY29uZmlnJiYoZz1KU09OLnBhcnNlKGQuY29uZmlnKSk7dGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiJiZWZvcmVVcGRhdGVTY2VuZSJ9KTtnPXRoaXMuX2FwcGx5RGVmYXVsdHMoZyx7Y2FtZXJhOntjbHM6IlBlcnNwZWN0aXZlQ2FtZXJhIiwKZm92Ojc1LG5lYXI6LjEsZmFyOjFFM30sbGlnaHRzOlt7Y2xzOiJBbWJpZW50TGlnaHQiLGNvbG9yOiIjZmZmZmZmIixpbnRlbnNpdHk6Ljc1fSx7Y2xzOiJEaXJlY3Rpb25hbExpZ2h0Iixjb2xvcjoiI2ZmZmZmZiIsaW50ZW5zaXR5Oi43NSxwb3NpdGlvbjpbMCwtMSwyXX1dfSk7dGhpcy5fY3JlYXRlV29ybGQoZyxmKTt0aGlzLl9jbGVhclNjZW5lKCk7dGhpcy5fY3JlYXRlTGlnaHRzKHRoaXMuX3NjZW5lLGcpO3RoaXMuX2NyZWF0ZUdlb21ldHJ5KGQsZyk7dGhpcy5kcmF3KCl9cmVzZXRWaWV3KCl7aWYodGhpcy5pc1JlYWR5KCkpe3RoaXMuX2NhbWVyYUNvbnRyb2xzLnJlc2V0KCk7aWYoIWQmJnRoaXMuX2xhc3RNZXNoKXZhciBkPXRoaXMuX2xhc3RNZXNoO2QmJih0aGlzLl9maXRPYmplY3RUb1ZpZXdwb3J0KGQpLHRoaXMuX2xhc3RNZXNoPWQpO3RoaXMuX2NhbWVyYUNvbnRyb2xzLnVwZGF0ZSgpfX1fY3JlYXRlR2VvbWV0cnkoZCxmKXtkPWQubWVzaDtkLnZlcnRpY2VzJiZkLmZhY2VzJiYKZC5mYWNlcy5sZW5ndGg/dGhpcy5fY3JlYXRlTWVzaChkLGYpOnRoaXMuX2NyZWF0ZVBvaW50Q2xvdWQoZCxmKX1fY3JlYXRlUG9pbnRDbG91ZChkLGYpe3ZhciBnPWQudmVydGljZXM7ZD1kLmNvbG9ycztsZXQgbD17bWF0ZXJpYWw6e2NsczoiUG9pbnRzTWF0ZXJpYWwiLHNpemU6LjAwNX19O2QmJmQubGVuZ3RoPT1nLmxlbmd0aD9sLm1hdGVyaWFsLnZlcnRleENvbG9ycz1USFJFRS5WZXJ0ZXhDb2xvcnM6bC5tYXRlcmlhbC5jb2xvcj10aGlzLl9ydW5Db2xvcjtmPXRoaXMuX2FwcGx5RGVmYXVsdHMoZixsKTt2YXIgaz1uZXcgVEhSRUUuR2VvbWV0cnk7Zy5mb3JFYWNoKGZ1bmN0aW9uKG0pe3ZhciBwPW5ldyBUSFJFRS5WZWN0b3IzKG1bMF0sbVsxXSxtWzJdKTtwLng9MSptWzBdO3AueT0xKm1bMV07cC56PTEqbVsyXTtrLnZlcnRpY2VzLnB1c2gocCl9KTtkJiZkLmxlbmd0aD09Zy5sZW5ndGgmJmQuZm9yRWFjaChmdW5jdGlvbihtKXttPW5ldyBUSFJFRS5Db2xvcihtWzBdLzI1NSwKbVsxXS8yNTUsbVsyXS8yNTUpO2suY29sb3JzLnB1c2gobSl9KTtnPW5ldyBUSFJFRVtmLm1hdGVyaWFsLmNsc10oZi5tYXRlcmlhbCk7Zz1uZXcgVEhSRUUuUG9pbnRzKGssZyk7dGhpcy5fc2NlbmUuYWRkKGcpO3RoaXMuX2xhc3RNZXNoPWd9c2V0Q2FtZXJhVmlld3BvaW50KGQsZixnKXt0aGlzLl9zaWxlbnQ9ITA7dGhpcy5fY2FtZXJhLmZhcj1mO3RoaXMuX2NhbWVyYS5wb3NpdGlvbi5zZXQoZC54LGQueSxkLnopO3RoaXMuX2NhbWVyYS5sb29rQXQoZy5jbG9uZSgpKTt0aGlzLl9jYW1lcmEudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpO3RoaXMuX2NhbWVyYUNvbnRyb2xzLnRhcmdldD1nLmNsb25lKCk7dGhpcy5fY2FtZXJhQ29udHJvbHMudXBkYXRlKCk7dGhpcy5fc2lsZW50PSExfV9vbkNhbWVyYVBvc2l0aW9uQ2hhbmdlKGQpe3RoaXMuX3NpbGVudHx8dGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiJjYW1lcmFQb3NpdGlvbkNoYW5nZSIsZXZlbnQ6ZH0pfV9maXRPYmplY3RUb1ZpZXdwb3J0KGQpe3ZhciBmPQpuZXcgVEhSRUUuQm94MztmLnNldEZyb21PYmplY3QoZCk7ZD1mLmNlbnRlcigpO3ZhciBnPWYuc2l6ZSgpO2c9MS4yNSpNYXRoLmFicyhNYXRoLm1heChnLngsZy55LGcueikvKDIqTWF0aC50YW4oTWF0aC5QSS8xODAqdGhpcy5fY2FtZXJhLmZvdi8yKSkpO2Y9Zi5taW4uejt0aGlzLnNldENhbWVyYVZpZXdwb2ludCh7eDpkLngseTpkLnksejpnfSwzKigwPmY/LWYrZzpnLWYpLGQpfV9jcmVhdGVNZXNoKGQsZil7dmFyIGc9ZC52ZXJ0aWNlcztjb25zdCBsPWQuZmFjZXMsaz1kLmNvbG9ycztkPXRoaXMuX2FwcGx5RGVmYXVsdHMoZix7bWF0ZXJpYWw6e2NsczoiTWVzaFN0YW5kYXJkTWF0ZXJpYWwiLGNvbG9yOiIjYTBhMGEwIixyb3VnaG5lc3M6MSxtZXRhbG5lc3M6MH19KTtsZXQgbT1uZXcgVEhSRUUuR2VvbWV0cnk7Zy5mb3JFYWNoKGZ1bmN0aW9uKHApe2xldCBxPW5ldyBUSFJFRS5WZWN0b3IzKHBbMF0scFsxXSxwWzJdKTtxLng9MSpwWzBdO3EueT0xKnBbMV07cS56PTEqcFsyXTsKbS52ZXJ0aWNlcy5wdXNoKHEpfSk7bC5mb3JFYWNoKGZ1bmN0aW9uKHApe2xldCBxPW5ldyBUSFJFRS5GYWNlMyhwWzBdLHBbMV0scFsyXSk7aWYoayYmay5sZW5ndGgpe3A9W2tbcFswXV0sa1twWzFdXSxrW3BbMl1dXTtmb3IobGV0IHQ9MDt0PHAubGVuZ3RoO3QrKyl7dmFyIHI9cFt0XTtyPW5ldyBUSFJFRS5Db2xvcihyWzBdLzI1NSxyWzFdLzI1NSxyWzJdLzI1NSk7cS52ZXJ0ZXhDb2xvcnMucHVzaChyKX19bS5mYWNlcy5wdXNoKHEpfSk7ayYmay5sZW5ndGgmJihkLm1hdGVyaWFsPWQubWF0ZXJpYWx8fHt9LGQubWF0ZXJpYWwudmVydGV4Q29sb3JzPVRIUkVFLlZlcnRleENvbG9ycyk7bS5jZW50ZXIoKTttLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpO20uY29tcHV0ZVZlcnRleE5vcm1hbHMoKTtnPW5ldyBUSFJFRVtkLm1hdGVyaWFsLmNsc10oZC5tYXRlcmlhbCk7Zz1uZXcgVEhSRUUuTWVzaChtLGcpO2cuY2FzdFNoYWRvdz0hMDtnLnJlY2VpdmVTaGFkb3c9ITA7dGhpcy5fc2NlbmUuYWRkKGcpOwp0aGlzLl9sYXN0TWVzaD1nfV9jcmVhdGVMaWdodHMoZCxmKXtmb3IobGV0IGc9MDtnPGYubGlnaHRzLmxlbmd0aDtnKyspe2NvbnN0IGw9Zi5saWdodHNbZ107bGV0IGs9bmV3IFRIUkVFW2wuY2xzXShsLmNvbG9yLGwuaW50ZW5zaXR5KTtsLnBvc2l0aW9uJiZrLnBvc2l0aW9uLnNldChsLnBvc2l0aW9uWzBdLGwucG9zaXRpb25bMV0sbC5wb3NpdGlvblsyXSk7ZC5hZGQoayl9fX1hLk1lc2hWaWV3ZXI9Y30pKHNxfHwoc3E9e30pKTsKPC9zY3JpcHQ+CgoKCgo8ZG9tLW1vZHVsZSBpZD0idGYtbWVzaC1sb2FkZXIiPgogIDx0ZW1wbGF0ZT4KICAgIDx0Zi1jYXJkLWhlYWRpbmcgY29sb3I9IltbX3J1bkNvbG9yXV0iIGNsYXNzPSJ0Zi1tZXNoLWxvYWRlci1oZWFkZXIiPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2hhc011bHRpcGxlU2FtcGxlcyhvZlNhbXBsZXMpXV0iPgogICAgICAgIDxkaXY+c2FtcGxlOiBbW19nZXRTYW1wbGVUZXh0KHNhbXBsZSldXSBvZiBbW29mU2FtcGxlc11dPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaGFzQXRMZWFzdE9uZVN0ZXAoX3N0ZXBzKV1dIj4KICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nLXJvdyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nLWxhYmVsIj4KICAgICAgICAgICAgc3RlcAogICAgICAgICAgICA8c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6IGJvbGQiPltbdG9Mb2NhbGVTdHJpbmdfKF9zdGVwVmFsdWUpXV08L3NwYW4+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImhlYWRpbmctbGFiZWwgaGVhZGluZy1yaWdodCI+CiAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfY3VycmVudFdhbGxUaW1lXV0iPgogICAgICAgICAgICAgIFtbX2N1cnJlbnRXYWxsVGltZV1dCiAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImxhYmVsIHJpZ2h0Ij4KICAgICAgICAgICAgPHBhcGVyLXNwaW5uZXItbGl0ZSBhY3RpdmUgaGlkZGVuJD0iW1shX2lzTWVzaExvYWRpbmddXSI+CiAgICAgICAgICAgIDwvcGFwZXItc3Bpbm5lci1saXRlPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaGFzTXVsdGlwbGVTdGVwcyhfc3RlcHMpXV0iPgogICAgICAgIDxkaXY+CiAgICAgICAgICA8cGFwZXItc2xpZGVyIGlkPSJzdGVwcyIgaW1tZWRpYXRlLXZhbHVlPSJ7e19zdGVwSW5kZXh9fSIgbWF4PSJbW19nZXRNYXhTdGVwSW5kZXgoX3N0ZXBzKV1dIiBtYXgtbWFya2Vycz0iW1tfZ2V0TWF4U3RlcEluZGV4KF9zdGVwcyldXSIgc25hcHMgc3RlcD0iMSIgdmFsdWU9Int7X3N0ZXBJbmRleH19Ij48L3BhcGVyLXNsaWRlcj4KICAgICAgICA8L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgIDwvdGYtY2FyZC1oZWFkaW5nPgogICAgPHN0eWxlPgogICAgICBwYXBlci1zbGlkZXIgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIG1hcmdpbi1sZWZ0OiAxcHg7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiAxcHg7CiAgICAgIH0KICAgICAgLnRmLW1lc2gtbG9hZGVyLWhlYWRlciB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgaGVpZ2h0OiAxMDVweDsKICAgICAgfQogICAgICBbaGlkZGVuXSB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgogIDxzY3JpcHQ+Ly9+fldFQlBBVEh+fi90Zi1tZXNoLWRhc2hib2FyZC9tZXNoLWxvYWRlci5qcwooZnVuY3Rpb24oYSl7UG9seW1lcih7aXM6InRmLW1lc2gtbG9hZGVyIixwcm9wZXJ0aWVzOntydW46U3RyaW5nLHRhZzpTdHJpbmcsc2FtcGxlOk51bWJlcixvZlNhbXBsZXM6TnVtYmVyLHNlbGVjdGVkVmlldzp7dHlwZTpTdHJpbmcsdmFsdWU6ImFsbCJ9LGFjdGl2ZTp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxyZXF1ZXN0TWFuYWdlcjpPYmplY3QsX21lc2hWaWV3ZXI6e3R5cGU6T2JqZWN0fSxfZGF0YVByb3ZpZGVyOnt0eXBlOk9iamVjdH0sX2NvbG9yU2NhbGVGdW5jdGlvbjp7dHlwZTpPYmplY3QsdmFsdWU6KCk9PlpsLnJ1bnNDb2xvclNjYWxlfSxfcnVuQ29sb3I6e3R5cGU6U3RyaW5nLGNvbXB1dGVkOiJfY29tcHV0ZVJ1bkNvbG9yKHJ1bikifSxfc3RlcHM6e3R5cGU6QXJyYXksdmFsdWU6KCk9PltdLG5vdGlmeTohMH0sX3N0ZXBJbmRleDp7dHlwZTpOdW1iZXIsbm90aWZ5OiEwfSxfY3VycmVudFN0ZXA6e3R5cGU6T2JqZWN0LGNvbXB1dGVkOiJfY29tcHV0ZUN1cnJlbnRTdGVwKF9zdGVwcywgX3N0ZXBJbmRleCkifSwKX21lc2hWaWV3ZXJBdHRhY2hlZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxfY2FtZXJhUG9zaXRpb25Jbml0aWFsaXplZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxfc3RlcFZhbHVlOnt0eXBlOk51bWJlcixjb21wdXRlZDoiX2NvbXB1dGVTdGVwVmFsdWUoX2N1cnJlbnRTdGVwKSJ9LF9jdXJyZW50V2FsbFRpbWU6e3R5cGU6U3RyaW5nLGNvbXB1dGVkOiJfY29tcHV0ZUN1cnJlbnRXYWxsVGltZShfY3VycmVudFN0ZXApIn0sX2lzTWVzaExvYWRpbmc6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX19LG9ic2VydmVyczpbInJlbG9hZChydW4sIHRhZywgYWN0aXZlLCBfZGF0YVByb3ZpZGVyLCBfbWVzaFZpZXdlcikiLCJfdXBkYXRlU2NlbmUoX2N1cnJlbnRTdGVwLiosIF9tZXNoVmlld2VyKSIsIl9kZWJvdW5jZWRGZXRjaE1lc2goX2N1cnJlbnRTdGVwKSIsIl91cGRhdGVWaWV3KHNlbGVjdGVkVmlldykiXSxfY29tcHV0ZVJ1bkNvbG9yOmZ1bmN0aW9uKGMpe3JldHVybiB0aGlzLl9jb2xvclNjYWxlRnVuY3Rpb24oYyl9LAphdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX2RhdGFQcm92aWRlcj1uZXcgYS5BcnJheUJ1ZmZlckRhdGFQcm92aWRlcih0aGlzLnJlcXVlc3RNYW5hZ2VyKTtjb25zdCBjPW5ldyBhLk1lc2hWaWV3ZXIodGhpcy5fcnVuQ29sb3IpO2MuYWRkRXZlbnRMaXN0ZW5lcigiYmVmb3JlVXBkYXRlU2NlbmUiLHRoaXMuX3VwZGF0ZUNhbnZhc1NpemUuYmluZCh0aGlzKSk7Yy5hZGRFdmVudExpc3RlbmVyKCJjYW1lcmFQb3NpdGlvbkNoYW5nZSIsdGhpcy5fb25DYW1lcmFQb3NpdGlvbkNoYW5nZS5iaW5kKHRoaXMpKTt0aGlzLl9tZXNoVmlld2VyPWN9LHJlbG9hZDpmdW5jdGlvbigpe3RoaXMuYWN0aXZlJiZ0aGlzLl9kYXRhUHJvdmlkZXImJih0aGlzLnNldCgiX2lzTWVzaExvYWRpbmciLCEwKSx0aGlzLl9kYXRhUHJvdmlkZXIucmVsb2FkKHRoaXMucnVuLHRoaXMudGFnLHRoaXMuc2FtcGxlKS50aGVuKGM9PntjJiYodGhpcy5zZXQoIl9zdGVwcyIsYyksdGhpcy5zZXQoIl9zdGVwSW5kZXgiLApjLmxlbmd0aC0xKSl9KS5jYXRjaChjPT57aWYoIWN8fCFjLmNvZGV8fGMuY29kZSE9YS5FcnJvckNvZGVzLkNBTkNFTExFRCl0aHJvdyBFcnJvcihjfHwiUmVzcG9uc2UgcHJvY2Vzc2luZyBmYWlsZWQuIik7fSkpfSxfdXBkYXRlU2NlbmU6ZnVuY3Rpb24oKXtjb25zdCBjPXRoaXMuX2N1cnJlbnRTdGVwO2MmJmMubWVzaCYmKHRoaXMuX21lc2hWaWV3ZXIudXBkYXRlU2NlbmUoYyx0aGlzKSx0aGlzLl9jYW1lcmFQb3NpdGlvbkluaXRpYWxpemVkfHwodGhpcy5fbWVzaFZpZXdlci5yZXNldFZpZXcoKSx0aGlzLl9jYW1lcmFQb3NpdGlvbkluaXRpYWxpemVkPSEwKSx0aGlzLl9tZXNoVmlld2VyQXR0YWNoZWR8fCh0aGlzLnJvb3QuYXBwZW5kQ2hpbGQodGhpcy5fbWVzaFZpZXdlci5nZXRSZW5kZXJlcigpLmRvbUVsZW1lbnQpLHRoaXMuX21lc2hWaWV3ZXJBdHRhY2hlZD0hMCkpfSxfZGVib3VuY2VkRmV0Y2hNZXNoKCl7dGhpcy5kZWJvdW5jZSgiZmV0Y2hNZXNoIiwoKT0+dGhpcy5fbWF5YmVGZXRjaE1lc2goKSwKMTAwKX0sX21heWJlRmV0Y2hNZXNoKCl7Y29uc3QgYz10aGlzO3JldHVybiBEYihmdW5jdGlvbiooKXtjb25zdCBkPWMuX2N1cnJlbnRTdGVwO2lmKGQmJiFkLm1lc2gmJiFkLm1lc2hGZXRjaGluZyl7ZC5tZXNoRmV0Y2hpbmc9ITA7Yy5faXNNZXNoTG9hZGluZz0hMDt0cnl7Y29uc3QgZj15aWVsZCBjLl9kYXRhUHJvdmlkZXIuZmV0Y2hEYXRhKGQsYy5ydW4sYy50YWcsYy5zYW1wbGUpO2QubWVzaD1mWzBdO2Mubm90aWZ5UGF0aCgiX2N1cnJlbnRTdGVwLm1lc2giKX1jYXRjaChmKXtpZighZnx8IWYuY29kZXx8Zi5jb2RlIT1hLkVycm9yQ29kZXMuQ0FOQ0VMTEVEKXRocm93IGY9Znx8IlJlc3BvbnNlIHByb2Nlc3NpbmcgZmFpbGVkLiIsRXJyb3IoZik7fWZpbmFsbHl7Yy5faXNNZXNoTG9hZGluZz0hMSxkLm1lc2hGZXRjaGluZz0hMX19fSl9LF9vbkNhbWVyYVBvc2l0aW9uQ2hhbmdlOmZ1bmN0aW9uKCl7aWYodGhpcy5fbWVzaFZpZXdlci5pc1JlYWR5KCkpe3ZhciBjPW5ldyBDdXN0b21FdmVudCgiY2FtZXJhLXBvc2l0aW9uLWNoYW5nZSIsCntkZXRhaWw6dGhpcy5fbWVzaFZpZXdlci5nZXRDYW1lcmFQb3NpdGlvbigpfSk7dGhpcy5kaXNwYXRjaEV2ZW50KGMpfX0sc2V0Q2FtZXJhVmlld3BvaW50OmZ1bmN0aW9uKGMsZCxmKXt0aGlzLl9tZXNoVmlld2VyLnNldENhbWVyYVZpZXdwb2ludChjLGQsZil9LF91cGRhdGVDYW52YXNTaXplOmZ1bmN0aW9uKCl7Y29uc3QgYz10aGlzLm9mZnNldFdpZHRoLGQ9dGhpcy4kJCgiLnRmLW1lc2gtbG9hZGVyLWhlYWRlciIpLm9mZnNldEhlaWdodDt0aGlzLl9tZXNoVmlld2VyLnNldENhbnZhc1NpemUoe3dpZHRoOmMsaGVpZ2h0OmMtZH0pfSxyZWRyYXc6ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVDYW52YXNTaXplKCk7dGhpcy5pc0Nvbm5lY3RlZCYmdGhpcy5fbWVzaFZpZXdlci5kcmF3KCl9LF9oYXNBdExlYXN0T25lU3RlcDpmdW5jdGlvbihjKXtyZXR1cm4hIWMmJjA8Yy5sZW5ndGh9LF9oYXNNdWx0aXBsZVN0ZXBzOmZ1bmN0aW9uKGMpe3JldHVybiEhYyYmMTxjLmxlbmd0aH0sX2NvbXB1dGVDdXJyZW50U3RlcDpmdW5jdGlvbihjLApkKXtyZXR1cm4gY1tkXXx8bnVsbH0sX2NvbXB1dGVTdGVwVmFsdWU6ZnVuY3Rpb24oYyl7cmV0dXJuIGM/Yy5zdGVwOjB9LF9jb21wdXRlQ3VycmVudFdhbGxUaW1lOmZ1bmN0aW9uKGMpe3JldHVybiBjP2ZtLmZvcm1hdERhdGUoYy53YWxsX3RpbWUpOiIifSxfZ2V0TWF4U3RlcEluZGV4OmZ1bmN0aW9uKGMpe3JldHVybiBjLmxlbmd0aC0xfSxfZ2V0U2FtcGxlVGV4dDpmdW5jdGlvbihjKXtyZXR1cm4gU3RyaW5nKGMrMSl9LF9oYXNNdWx0aXBsZVNhbXBsZXM6ZnVuY3Rpb24oYyl7cmV0dXJuIDE8Y30sX3VwZGF0ZVZpZXc6ZnVuY3Rpb24oYyl7dGhpcy5fbWVzaFZpZXdlciYmImFsbCI9PWMmJnRoaXMuX21lc2hWaWV3ZXIucmVzZXRWaWV3KCl9LHRvTG9jYWxlU3RyaW5nXzpmdW5jdGlvbihjKXtyZXR1cm4gYy50b0xvY2FsZVN0cmluZygpfX0pfSkoc3F8fChzcT17fSkpOwo8L3NjcmlwdD4KPC9kb20tbW9kdWxlPgoKCgo8ZG9tLW1vZHVsZSBpZD0ibWVzaC1kYXNoYm9hcmQiPgogIDx0ZW1wbGF0ZT4KICAgIDx0Zi1kYXNoYm9hcmQtbGF5b3V0PgogICAgICA8ZGl2IHNsb3Q9InNpZGViYXIiIGNsYXNzPSJhbGwtY29udHJvbHMiPgogICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiB2aWV3LWNvbnRyb2wiPgogICAgICAgICAgPGgzIGNsYXNzPSJ0aXRsZSI+UG9pbnQgb2YgdmlldzwvaDM+CiAgICAgICAgICA8ZGl2PgogICAgICAgICAgICA8cGFwZXItcmFkaW8tZ3JvdXAgaWQ9InZpZXctcmFkaW8tZ3JvdXAiIHNlbGVjdGVkPSJ7e19zZWxlY3RlZFZpZXd9fSI+CiAgICAgICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbiBpZD0iYWxsLXJhZGlvLWJ1dHRvbiIgbmFtZT0iYWxsIj4KICAgICAgICAgICAgICAgIERpc3BsYXkgYWxsIHBvaW50cwogICAgICAgICAgICAgIDwvcGFwZXItcmFkaW8tYnV0dG9uPgogICAgICAgICAgICAgIDxwYXBlci10b29sdGlwIGFuaW1hdGlvbi1kZWxheT0iMCIgZm9yPSJhbGwtcmFkaW8tYnV0dG9uIiBwb3NpdGlvbj0icmlnaHQiIG9mZnNldD0iMCI+CiAgICAgICAgICAgICAgICBab29tIGFuZCBjZW50ZXIgY2FtZXJhIHRvIGRpc3BsYXkgYWxsIHBvaW50cyBhdCBvbmNlLiBOb3RlLCB0aGF0CiAgICAgICAgICAgICAgICBzb21lIHBvaW50cyBjb3VsZCBiZSB0b28gZmFyIChpLmUuIHRvbyBzbWFsbCkgdG8gYmUgdmlzaWJsZS4KICAgICAgICAgICAgICA8L3BhcGVyLXRvb2x0aXA+CiAgICAgICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbiBpZD0idXNlci1yYWRpby1idXR0b24iIG5hbWU9InVzZXIiPgogICAgICAgICAgICAgICAgQ3VycmVudCB2aWV3CiAgICAgICAgICAgICAgPC9wYXBlci1yYWRpby1idXR0b24+CiAgICAgICAgICAgICAgPHBhcGVyLXRvb2x0aXAgYW5pbWF0aW9uLWRlbGF5PSIwIiBmb3I9InVzZXItcmFkaW8tYnV0dG9uIiBwb3NpdGlvbj0icmlnaHQiIG9mZnNldD0iMCI+CiAgICAgICAgICAgICAgICBLZWVwIGN1cnJlbnQgY2FtZXJhIHBvc2l0aW9uIGFuZCB6b29tIGxldmVsLgogICAgICAgICAgICAgIDwvcGFwZXItdG9vbHRpcD4KICAgICAgICAgICAgICA8cGFwZXItcmFkaW8tYnV0dG9uIGlkPSJzaGFyZS1yYWRpby1idXR0b24iIG5hbWU9InNoYXJlIj4KICAgICAgICAgICAgICAgIFNoYXJlIHZpZXdwb2ludAogICAgICAgICAgICAgIDwvcGFwZXItcmFkaW8tYnV0dG9uPgogICAgICAgICAgICAgIDxwYXBlci10b29sdGlwIGFuaW1hdGlvbi1kZWxheT0iMCIgZm9yPSJzaGFyZS1yYWRpby1idXR0b24iIHBvc2l0aW9uPSJyaWdodCIgb2Zmc2V0PSIwIj4KICAgICAgICAgICAgICAgIFNoYXJlIHZpZXdwb2ludCBhbW9uZyBhbGwgY2FtZXJhcy4KICAgICAgICAgICAgICA8L3BhcGVyLXRvb2x0aXA+CiAgICAgICAgICAgIDwvcGFwZXItcmFkaW8tZ3JvdXA+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24gcnVucy1zZWxlY3RvciI+CiAgICAgICAgICA8dGYtcnVucy1zZWxlY3RvciBzZWxlY3RlZC1ydW5zPSJ7e19zZWxlY3RlZFJ1bnN9fSI+CiAgICAgICAgICA8L3RmLXJ1bnMtc2VsZWN0b3I+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IHNsb3Q9ImNlbnRlciI+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJuby1kYXRhLXdhcm5pbmciPgogICAgICAgICAgICA8aDM+Tm8gcG9pbnQgY2xvdWQgZGF0YSB3YXMgZm91bmQuPC9oMz4KICAgICAgICAgICAgPHA+UHJvYmFibGUgY2F1c2VzOgogICAgICAgICAgICA8dWw+CiAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgWW91IGhhdmVu4oCZdCB3cml0dGVuIGFueSBwb2ludCBjbG91ZCBkYXRhIHRvIHlvdXIgZXZlbnQgZmlsZXMuCiAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICA8bGk+VGVuc29yQm9hcmQgY2Fu4oCZdCBmaW5kIHlvdXIgZXZlbnQgZmlsZXMuPC9saT4KICAgICAgICAgICAgPC91bD4KCiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdeKAmXJlIG5ldyB0byB1c2luZyBUZW5zb3JCb2FyZCwgYW5kIHdhbnQgdG8gZmluZCBvdXQgaG93IHRvCiAgICAgICAgICAgICAgYWRkIGRhdGEgYW5kIHNldCB1cCB5b3VyIGV2ZW50IGZpbGVzLCBjaGVjayBvdXQgdGhlCiAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kIj5SRUFETUU8L2E+CiAgICAgICAgICAgICAgYW5kIHBlcmhhcHMgdGhlCiAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvZ2V0X3N0YXJ0ZWQvc3VtbWFyaWVzX2FuZF90ZW5zb3Jib2FyZCI+VGVuc29yQm9hcmQgdHV0b3JpYWw8L2E+LgogICAgICAgICAgICAKCiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdSB0aGluayBUZW5zb3JCb2FyZCBpcyBjb25maWd1cmVkIHByb3Blcmx5LCBwbGVhc2Ugc2VlCiAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kI215LXRlbnNvcmJvYXJkLWlzbnQtc2hvd2luZy1hbnktZGF0YS13aGF0cy13cm9uZyI+dGhlIHNlY3Rpb24gb2YgdGhlIFJFQURNRSBkZXZvdGVkIHRvIG1pc3NpbmcgZGF0YSBwcm9ibGVtczwvYT4KICAgICAgICAgICAgICBhbmQgY29uc2lkZXIgZmlsaW5nIGFuIGlzc3VlIG9uIEdpdEh1Yi4KICAgICAgICAgICAgCiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shX2RhdGFOb3RGb3VuZF1dIj4KICAgICAgICAgIDx0Zi10YWctZmlsdGVyZXIgdGFnLWZpbHRlcj0ie3tfdGFnRmlsdGVyfX0iPjwvdGYtdGFnLWZpbHRlcmVyPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tfY2F0ZWdvcmllc11dIiBhcz0iY2F0ZWdvcnkiPgogICAgICAgICAgICA8dGYtY2F0ZWdvcnktcGFnaW5hdGVkLXZpZXcgY2F0ZWdvcnk9IltbY2F0ZWdvcnldXSIgaW5pdGlhbC1vcGVuZWQ9IltbX3Nob3VsZE9wZW4oaW5kZXgpXV0iPgogICAgICAgICAgICAgIDx0ZW1wbGF0ZT4KICAgICAgICAgICAgICAgIDx0Zi1tZXNoLWxvYWRlciBhY3RpdmU9IltbYWN0aXZlXV0iIHNlbGVjdGVkLXZpZXc9IltbX3NlbGVjdGVkVmlld11dIiBydW49IltbaXRlbS5ydW5dXSIgdGFnPSJbW2l0ZW0udGFnXV0iIHNhbXBsZT0iW1tpdGVtLnNhbXBsZV1dIiBvZi1zYW1wbGVzPSJbW2l0ZW0ub2ZTYW1wbGVzXV0iIHJlcXVlc3QtbWFuYWdlcj0iW1tfcmVxdWVzdE1hbmFnZXJdXSIgY2xhc3M9InRmLW1lc2gtbG9hZGVyLWNvbnRhaW5lciIgb24tY2FtZXJhLXBvc2l0aW9uLWNoYW5nZT0iX29uQ2FtZXJhUG9zaXRpb25DaGFuZ2VkIj4KICAgICAgICAgICAgICAgIDwvdGYtbWVzaC1sb2FkZXI+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPC90Zi1jYXRlZ29yeS1wYWdpbmF0ZWQtdmlldz4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPC9kaXY+CiAgICA8L3RmLWRhc2hib2FyZC1sYXlvdXQ+CgogICAgPHN0eWxlIGluY2x1ZGU9ImRhc2hib2FyZC1zdHlsZSI+PC9zdHlsZT4KICAgIDxzdHlsZT4KICAgICAgLm5vLWRhdGEtd2FybmluZyB7CiAgICAgICAgbWF4LXdpZHRoOiA1NDBweDsKICAgICAgICBtYXJnaW46IDgwcHggYXV0byAwIGF1dG87CiAgICAgIH0KICAgICAgcGFwZXItcmFkaW8tYnV0dG9uIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwYWRkaW5nOiA1cHg7CiAgICAgIH0KICAgICAgLnNpZGViYXItc2VjdGlvbiBoMy50aXRsZSB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWdyZXktODAwKTsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogNXB4OwogICAgICB9CgogICAgICAucnVucy1zZWxlY3RvciB7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICB9CgogICAgICB0Zi1ydW5zLXNlbGVjdG9yIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICB9CgogICAgICAudmlldy1jb250cm9sIHsKICAgICAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50OwogICAgICB9CgogICAgICAudmlldy1jb250cm9sIGgzLnRpdGxlIHsKICAgICAgICBwYWRkaW5nLXRvcDogMTZweDsKICAgICAgICBwYWRkaW5nLWJvdHRvbTogMTZweDsKICAgICAgfQoKICAgICAgLmFsbGNvbnRyb2xzIC52aWV3LWNvbnRyb2wgcGFwZXItcmFkaW8tZ3JvdXAgewogICAgICAgIG1hcmdpbi10b3A6IDVweDsKICAgICAgfQogICAgICAvKiBMYXlvdXQgbXVzdCBiZSBob3Jpem9udGFsLCBpLmUuIGl0ZW1zIGFycmFuZ2VkIGluIGEgcm93LiBJZiBpdGVtcyBjYW5ub3QgZml0IGluIGEgcm93LAogICAgICAgKiB0aGV5IHNob3VsZCBiZSBtb3ZlZCB0byBuZXh0IGxpbmUuIEFsbCBpdGVtcyBtdXN0IGJlIHNxdWFyZSBhdCBhbGwgdGltZXMuIE1pbmltdW0gc2l6ZSBvZgogICAgICAgKiB0aGUgaXRlbSBpcyA0ODBweC4gVGhpcyBtZWFucyB0aGF0IG1heGltdW0gc2l6ZSBvZiB0aGUgaXRlbSBtdXN0IGJlIDQ4MHB4ICsgNDc5cHggPSA5NTlweC4KICAgICAgICogKi8KICAgICAgLmhvcml6b250YWwgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgIH0KICAgICAgdGYtbWVzaC1sb2FkZXIgewogICAgICAgIHdpZHRoOiA0ODBweDsKICAgICAgICBmbGV4LWJhc2lzOiA0ODBweDsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KCiAgPHNjcmlwdD4vL35+V0VCUEFUSH5+L3RmLW1lc2gtZGFzaGJvYXJkL3RmLW1lc2gtZGFzaGJvYXJkLmh0bWwuanMKKGZ1bmN0aW9uKCl7UG9seW1lcih7aXM6Im1lc2gtZGFzaGJvYXJkIixwcm9wZXJ0aWVzOntfc2VsZWN0ZWRSdW5zOkFycmF5LF9ydW5Ub1RhZ0luZm86T2JqZWN0LF9kYXRhTm90Rm91bmQ6Qm9vbGVhbixfdGFnRmlsdGVyOnt0eXBlOlN0cmluZyx2YWx1ZToiLioifSxfc2VsZWN0ZWRWaWV3Ont0eXBlOlN0cmluZyxub3RpZnk6ITAsdmFsdWU6ImFsbCJ9LF9jYXRlZ29yaWVzOnt0eXBlOkFycmF5LGNvbXB1dGVkOiJfbWFrZUNhdGVnb3JpZXMoX3J1blRvVGFnSW5mbywgX3NlbGVjdGVkUnVucywgX3RhZ0ZpbHRlcikifSxfcmVxdWVzdE1hbmFnZXI6e3R5cGU6T2JqZWN0LHZhbHVlOigpPT5uZXcgUGsuUmVxdWVzdE1hbmFnZXJ9fSxyZWFkeSgpe3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJyZXNpemUiLCgpPT57dGhpcy5faGFuZGxlV2luZG93UmVzaXplKCl9LCExKTt0aGlzLnJlbG9hZCgpfSxfZ2V0QWxsQ2hpbGRyZW4oKXtyZXR1cm4gdGhpcy5yb290LnF1ZXJ5U2VsZWN0b3JBbGwoInRmLW1lc2gtbG9hZGVyIil9LApfb25DYW1lcmFQb3NpdGlvbkNoYW5nZWQoYSl7InNoYXJlIj09dGhpcy5fc2VsZWN0ZWRWaWV3JiZ0aGlzLl9nZXRBbGxDaGlsZHJlbigpLmZvckVhY2goYz0+e2EudGFyZ2V0IT1jJiZjLnNldENhbWVyYVZpZXdwb2ludChhLmRldGFpbC5wb3NpdGlvbixhLmRldGFpbC5mYXIsYS5kZXRhaWwudGFyZ2V0KX0pfSxfc2hvdWxkT3BlbihhKXtyZXR1cm4gMj49YX0scmVsb2FkKCl7dGhpcy5fZmV0Y2hUYWdzKCkudGhlbih0aGlzLl9yZWxvYWRNZXNoZXMuYmluZCh0aGlzKSl9LF9oYW5kbGVXaW5kb3dSZXNpemUoKXt0aGlzLl9nZXRBbGxDaGlsZHJlbigpLmZvckVhY2goYT0+e2EucmVkcmF3KCl9KX0sX2ZldGNoVGFncygpe2NvbnN0IGE9UGsuZ2V0Um91dGVyKCkucGx1Z2luUm91dGUoIm1lc2giLCIvdGFncyIpO3JldHVybiB0aGlzLl9yZXF1ZXN0TWFuYWdlci5yZXF1ZXN0KGEpLnRoZW4oYz0+e2lmKCFfLmlzRXF1YWwoYyx0aGlzLl9ydW5Ub1RhZ0luZm8pKXt2YXIgZD1fLm1hcFZhbHVlcyhjLApmPT5PYmplY3Qua2V5cyhmKSk7ZD1Qay5nZXRUYWdzKGQpO3RoaXMuc2V0KCJfZGF0YU5vdEZvdW5kIiwwPT09ZC5sZW5ndGgpO3RoaXMuc2V0KCJfcnVuVG9UYWdJbmZvIixjKX19KX0sX3JlbG9hZE1lc2hlcygpe3RoaXMuX2dldEFsbENoaWxkcmVuKCkuZm9yRWFjaChhPT57YS5yZWxvYWQoKX0pfSxfbWFrZUNhdGVnb3JpZXMoYSxjLGQpe2Z1bmN0aW9uIGYobCl7Y29uc3Qgaz1hW2wucnVuXVtsLnRhZ10uc2FtcGxlcztyZXR1cm4gXy5yYW5nZShrKS5tYXAobT0+T2JqZWN0LmFzc2lnbih7fSxsLHtzYW1wbGU6bSxvZlNhbXBsZXM6a30pKX1jb25zdCBnPV8ubWFwVmFsdWVzKGEsbD0+T2JqZWN0LmtleXMobCkpO3JldHVybiBRay5jYXRlZ29yaXplUnVuVGFnQ29tYmluYXRpb25zKGcsYyxkKS5tYXAobD0+T2JqZWN0LmFzc2lnbih7fSxsLHtpdGVtczpbXS5jb25jYXQuYXBwbHkoW10sbC5pdGVtcy5tYXAoZikpfSkpfX0pfSkoKTsKPC9zY3JpcHQ+CjwvZG9tLW1vZHVsZT4KCgoKCgoKCgoKCgoKCgoKCgoKCgoKPGRvbS1tb2R1bGUgaWQ9InRmLXRlbnNvcmJvYXJkIj4KICA8dGVtcGxhdGU+CiAgICA8cGFwZXItZGlhbG9nIHdpdGgtYmFja2Ryb3AgaWQ9InNldHRpbmdzIj4KICAgICAgPGgyPlNldHRpbmdzPC9oMj4KICAgICAgPHBhcGVyLWNoZWNrYm94IGlkPSJhdXRvLXJlbG9hZC1jaGVja2JveCIgY2hlY2tlZD0ie3thdXRvUmVsb2FkRW5hYmxlZH19Ij4KICAgICAgICBSZWxvYWQgZGF0YSBldmVyeSA8c3Bhbj5bW2F1dG9SZWxvYWRJbnRlcnZhbFNlY3NdXTwvc3Bhbj5zLgogICAgICA8L3BhcGVyLWNoZWNrYm94PgogICAgICA8cGFwZXItaW5wdXQgaWQ9InBhZ2luYXRpb25MaW1pdElucHV0IiBsYWJlbD0iUGFnaW5hdGlvbiBsaW1pdCIgYWx3YXlzLWZsb2F0LWxhYmVsIHR5cGU9Im51bWJlciIgbWluPSIxIiBzdGVwPSIxIiBvbi1jaGFuZ2U9Il9wYWdpbmF0aW9uTGltaXRDaGFuZ2VkIiBvbi12YWx1ZS1jaGFuZ2VkPSJfcGFnaW5hdGlvbkxpbWl0VmFsaWRhdGUiPjwvcGFwZXItaW5wdXQ+CiAgICA8L3BhcGVyLWRpYWxvZz4KICAgIDxwYXBlci1oZWFkZXItcGFuZWw+CiAgICAgIDxwYXBlci10b29sYmFyIGlkPSJ0b29sYmFyIiBzbG90PSJoZWFkZXIiIGNsYXNzPSJoZWFkZXIiPgogICAgICAgIDxkaXYgaWQ9InRvb2xiYXItY29udGVudCIgc2xvdD0idG9wIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InRvb2xiYXItdGl0bGUiPltbYnJhbmRdXTwvZGl2PgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19hY3RpdmVEYXNoYm9hcmRzTm90TG9hZGVkXV0iPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0idG9vbGJhci1tZXNzYWdlIj4KICAgICAgICAgICAgICBMb2FkaW5nIGFjdGl2ZSBkYXNoYm9hcmRz4oCmCiAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2FjdGl2ZURhc2hib2FyZHNMb2FkZWRdXSI+CiAgICAgICAgICAgIDxwYXBlci10YWJzIG5vaW5rIHNjcm9sbGFibGUgc2VsZWN0ZWQ9Int7X3NlbGVjdGVkRGFzaGJvYXJkfX0iIGF0dHItZm9yLXNlbGVjdGVkPSJkYXRhLWRhc2hib2FyZCI+CiAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tfZGFzaGJvYXJkRGF0YV1dIiBhcz0iZGFzaGJvYXJkRGF0dW0iPgogICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19pc0Rhc2hib2FyZEFjdGl2ZShkaXNhYmxlZERhc2hib2FyZHMsIF9hY3RpdmVEYXNoYm9hcmRzLCBkYXNoYm9hcmREYXR1bSldXSI+CiAgICAgICAgICAgICAgICAgIDxwYXBlci10YWIgZGF0YS1kYXNoYm9hcmQkPSJbW2Rhc2hib2FyZERhdHVtLnBsdWdpbl1dIiB0aXRsZT0iW1tkYXNoYm9hcmREYXR1bS50YWJOYW1lXV0iPgogICAgICAgICAgICAgICAgICAgIFtbZGFzaGJvYXJkRGF0dW0udGFiTmFtZV1dCiAgICAgICAgICAgICAgICAgIDwvcGFwZXItdGFiPgogICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8L3BhcGVyLXRhYnM+CiAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaW5hY3RpdmVEYXNoYm9hcmRzRXhpc3QoX2Rhc2hib2FyZERhdGEsIGRpc2FibGVkRGFzaGJvYXJkcywgX2FjdGl2ZURhc2hib2FyZHMpXV0iPgogICAgICAgICAgICAgIDxwYXBlci1kcm9wZG93bi1tZW51IGxhYmVsPSJJTkFDVElWRSIgbm8tbGFiZWwtZmxvYXQgbm9pbmsgc3R5bGU9Im1hcmdpbi1sZWZ0OiAxMnB4Ij4KICAgICAgICAgICAgICAgIDxwYXBlci1saXN0Ym94IGlkPSJpbmFjdGl2ZS1kYXNoYm9hcmRzLW1lbnUiIHNsb3Q9ImRyb3Bkb3duLWNvbnRlbnQiIHNlbGVjdGVkPSJ7e19zZWxlY3RlZERhc2hib2FyZH19IiBhdHRyLWZvci1zZWxlY3RlZD0iZGF0YS1kYXNoYm9hcmQiPgogICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19kYXNoYm9hcmREYXRhXV0iIGFzPSJkYXNoYm9hcmREYXR1bSI+CiAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19pc0Rhc2hib2FyZEluYWN0aXZlKGRpc2FibGVkRGFzaGJvYXJkcywgX2FjdGl2ZURhc2hib2FyZHMsIGRhc2hib2FyZERhdHVtKV1dIiByZXN0YW1wPgogICAgICAgICAgICAgICAgICAgICAgPHBhcGVyLWl0ZW0gZGF0YS1kYXNoYm9hcmQkPSJbW2Rhc2hib2FyZERhdHVtLnBsdWdpbl1dIj5bW2Rhc2hib2FyZERhdHVtLnRhYk5hbWVdXTwvcGFwZXItaXRlbT4KICAgICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgICAgPC9wYXBlci1saXN0Ym94PgogICAgICAgICAgICAgIDwvcGFwZXItZHJvcGRvd24tbWVudT4KICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJnbG9iYWwtYWN0aW9ucyI+CiAgICAgICAgICAgIDxwYXBlci1pY29uLWJ1dHRvbiBpZD0icmVsb2FkLWJ1dHRvbiIgY2xhc3MkPSJbW19nZXREYXRhUmVmcmVzaGluZ0NsYXNzKF9yZWZyZXNoaW5nKV1dIiBkaXNhYmxlZCQ9IltbX2lzUmVsb2FkRGlzYWJsZWRdXSIgaWNvbj0icmVmcmVzaCIgb24tdGFwPSJyZWxvYWQiIHRpdGxlJD0iTGFzdCB1cGRhdGVkOiBbW19sYXN0UmVsb2FkVGltZVNob3J0XV0iPjwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgICAgICAgIDxwYXBlci1pY29uLWJ1dHRvbiBpY29uPSJzZXR0aW5ncyIgb24tdGFwPSJvcGVuU2V0dGluZ3MiIGlkPSJzZXR0aW5ncy1idXR0b24iPjwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCIgcmVsPSJub29wZW5lciBub3JlZmVycmVyIiB0YWJpbmRleD0iLTEiIHRhcmdldD0iX2JsYW5rIj4KICAgICAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24gaWNvbj0iaGVscC1vdXRsaW5lIj48L3BhcGVyLWljb24tYnV0dG9uPgogICAgICAgICAgICA8L2E+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9wYXBlci10b29sYmFyPgoKICAgICAgPGRpdiBpZD0iY29udGVudC1wYW5lIiBjbGFzcz0iZml0Ij4KICAgICAgICA8c2xvdCBpZD0iaW5qZWN0ZWQtb3ZlcnZpZXciPjwvc2xvdD4KICAgICAgICA8ZGl2IGlkPSJjb250ZW50Ij4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfYWN0aXZlRGFzaGJvYXJkc0ZhaWxlZFRvTG9hZF1dIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0id2FybmluZy1tZXNzYWdlIj4KICAgICAgICAgICAgICA8aDM+RmFpbGVkIHRvIGxvYWQgdGhlIHNldCBvZiBhY3RpdmUgZGFzaGJvYXJkcy48L2gzPgogICAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgICAgVGhpcyBjYW4gb2NjdXIgaWYgdGhlIFRlbnNvckJvYXJkIGJhY2tlbmQgaXMgbm8gbG9uZ2VyIHJ1bm5pbmcuCiAgICAgICAgICAgICAgICBQZXJoYXBzIHRoaXMgcGFnZSBpcyBjYWNoZWQ/CiAgICAgICAgICAgICAgCgogICAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgICAgSWYgeW91IHRoaW5rIHRoYXQgeW914oCZdmUgZml4ZWQgdGhlIHByb2JsZW0sIGNsaWNrIHRoZSByZWxvYWQKICAgICAgICAgICAgICAgIGJ1dHRvbiBpbiB0aGUgdG9wLXJpZ2h0LgogICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2F1dG9SZWxvYWRFbmFibGVkXV0iPgogICAgICAgICAgICAgICAgICBXZeKAmWxsIHRyeSB0byByZWxvYWQgZXZlcnkKICAgICAgICAgICAgICAgICAgW1thdXRvUmVsb2FkSW50ZXJ2YWxTZWNzXV0mbmJzcDtzZWNvbmRzIGFzIHdlbGwuCiAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgIAoKICAgICAgICAgICAgICA8cD4KICAgICAgICAgICAgICAgIDxpPkxhc3QgcmVsb2FkOiBbW19sYXN0UmVsb2FkVGltZV1dPC9pPgogICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19kYXRhTG9jYXRpb25dXSI+CiAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+PHA+CiAgICAgICAgICAgICAgICAgICAgPGk+TG9nIGRpcmVjdG9yeToKICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGlkPSJkYXRhX2xvY2F0aW9uIj5bW19kYXRhTG9jYXRpb25dXTwvc3Bhbj48L2k+CiAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgPHA+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfc2hvd05vRGFzaGJvYXJkc01lc3NhZ2VdXSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9Indhcm5pbmctbWVzc2FnZSI+CiAgICAgICAgICAgICAgPGgzPk5vIGRhc2hib2FyZHMgYXJlIGFjdGl2ZSBmb3IgdGhlIGN1cnJlbnQgZGF0YSBzZXQuPC9oMz4KICAgICAgICAgICAgICA8cD5Qcm9iYWJsZSBjYXVzZXM6CiAgICAgICAgICAgICAgPHVsPgogICAgICAgICAgICAgICAgPGxpPllvdSBoYXZlbuKAmXQgd3JpdHRlbiBhbnkgZGF0YSB0byB5b3VyIGV2ZW50IGZpbGVzLjwvbGk+CiAgICAgICAgICAgICAgICA8bGk+VGVuc29yQm9hcmQgY2Fu4oCZdCBmaW5kIHlvdXIgZXZlbnQgZmlsZXMuPC9saT4KICAgICAgICAgICAgICA8L3VsPgoKICAgICAgICAgICAgICBJZiB5b3XigJlyZSBuZXcgdG8gdXNpbmcgVGVuc29yQm9hcmQsIGFuZCB3YW50IHRvIGZpbmQgb3V0IGhvdyB0bwogICAgICAgICAgICAgIGFkZCBkYXRhIGFuZCBzZXQgdXAgeW91ciBldmVudCBmaWxlcywgY2hlY2sgb3V0IHRoZQogICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCI+UkVBRE1FPC9hPgogICAgICAgICAgICAgIGFuZCBwZXJoYXBzIHRoZQogICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL2dldF9zdGFydGVkL3N1bW1hcmllc19hbmRfdGVuc29yYm9hcmQiPlRlbnNvckJvYXJkIHR1dG9yaWFsPC9hPi4KICAgICAgICAgICAgICA8cD4KICAgICAgICAgICAgICAgIElmIHlvdSB0aGluayBUZW5zb3JCb2FyZCBpcyBjb25maWd1cmVkIHByb3Blcmx5LCBwbGVhc2Ugc2VlCiAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9ibG9iL21hc3Rlci9SRUFETUUubWQjbXktdGVuc29yYm9hcmQtaXNudC1zaG93aW5nLWFueS1kYXRhLXdoYXRzLXdyb25nIj50aGUgc2VjdGlvbiBvZiB0aGUgUkVBRE1FIGRldm90ZWQgdG8gbWlzc2luZyBkYXRhIHByb2JsZW1zPC9hPgogICAgICAgICAgICAgICAgYW5kIGNvbnNpZGVyIGZpbGluZyBhbiBpc3N1ZSBvbiBHaXRIdWIuCiAgICAgICAgICAgICAgCgogICAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgICAgPGk+TGFzdCByZWxvYWQ6IFtbX2xhc3RSZWxvYWRUaW1lXV08L2k+CiAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2RhdGFMb2NhdGlvbl1dIj4KICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT48cD4KICAgICAgICAgICAgICAgICAgICA8aT5EYXRhIGxvY2F0aW9uOgogICAgICAgICAgICAgICAgICAgICAgPHNwYW4gaWQ9ImRhdGFfbG9jYXRpb24iPltbX2RhdGFMb2NhdGlvbl1dPC9zcGFuPjwvaT4KICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICA8cD4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19zaG93Tm9TdWNoRGFzaGJvYXJkTWVzc2FnZV1dIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0id2FybmluZy1tZXNzYWdlIj4KICAgICAgICAgICAgICA8aDM+CiAgICAgICAgICAgICAgICBUaGVyZeKAmXMgbm8gZGFzaGJvYXJkIGJ5IHRoZSBuYW1lIG9mCiAgICAgICAgICAgICAgICDigJw8dHQ+W1tfc2VsZWN0ZWREYXNoYm9hcmRdXTwvdHQ+LuKAnQogICAgICAgICAgICAgIDwvaDM+CiAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19hY3RpdmVEYXNoYm9hcmRzTG9hZGVkXV0iPgogICAgICAgICAgICAgICAgPHA+WW91IGNhbiBzZWxlY3QgYSBkYXNoYm9hcmQgZnJvbSB0aGUgbGlzdCBhYm92ZS48L3RlbXBsYXRlPgoKICAgICAgICAgICAgICA8cD4KICAgICAgICAgICAgICAgIDxpPkxhc3QgcmVsb2FkOiBbW19sYXN0UmVsb2FkVGltZV1dPC9pPgogICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19kYXRhTG9jYXRpb25dXSI+CiAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+PHA+CiAgICAgICAgICAgICAgICAgICAgPGk+RGF0YSBsb2NhdGlvbjoKICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGlkPSJkYXRhX2xvY2F0aW9uIj5bW19kYXRhTG9jYXRpb25dXTwvc3Bhbj48L2k+CiAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgPHA+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaWQ9ImRhc2hib2FyZHMtdGVtcGxhdGUiIGl0ZW1zPSJbW19kYXNoYm9hcmREYXRhXV0iIGFzPSJkYXNoYm9hcmREYXR1bSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRhc2hib2FyZC1jb250YWluZXIiIGRhdGEtZGFzaGJvYXJkJD0iW1tkYXNoYm9hcmREYXR1bS5wbHVnaW5dXSIgZGF0YS1zZWxlY3RlZCQ9IltbX3NlbGVjdGVkU3RhdHVzKF9zZWxlY3RlZERhc2hib2FyZCwgZGFzaGJvYXJkRGF0dW0ucGx1Z2luKV1dIj4KICAgICAgICAgICAgICAKICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIDwvcGFwZXItaGVhZGVyLXBhbmVsPgoKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci1ncmV5LTEwMCk7CiAgICAgIH0KCiAgICAgICN0b29sYmFyIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoCiAgICAgICAgICAtLXRiLXRvb2xiYXItYmFja2dyb3VuZC1jb2xvciwKICAgICAgICAgIHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpCiAgICAgICAgKTsKICAgICAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKICAgICAgfQoKICAgICAgLnRvb2xiYXItdGl0bGUgewogICAgICAgIGZvbnQtc2l6ZTogMjBweDsKICAgICAgICBtYXJnaW4tbGVmdDogMTBweDsKICAgICAgICB0ZXh0LXJlbmRlcmluZzogb3B0aW1pemVMZWdpYmlsaXR5OwogICAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMjVlbTsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGRpc3BsYXk6IHZhcigtLXRiLXRvb2xiYXItdGl0bGUtZGlzcGxheSwgYmxvY2spOwogICAgICB9CgogICAgICAudG9vbGJhci1tZXNzYWdlIHsKICAgICAgICBvcGFjaXR5OiAwLjc7CiAgICAgICAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgIH0KCiAgICAgIHBhcGVyLXRhYnMgewogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgLS1wYXBlci10YWJzLXNlbGVjdGlvbi1iYXItY29sb3I6IHdoaXRlOwogICAgICAgIC0tcGFwZXItdGFicy1jb250ZW50OiB7CiAgICAgICAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKICAgICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICAgICAgfQogICAgICB9CgogICAgICBwYXBlci1kcm9wZG93bi1tZW51IHsKICAgICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjgpOwogICAgICAgIC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWZvY3VzLWNvbG9yOiB3aGl0ZTsKICAgICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnB1dC1jb2xvcjogd2hpdGU7CiAgICAgICAgLS1wYXBlci1kcm9wZG93bi1tZW51LWljb246IHsKICAgICAgICAgIGNvbG9yOiB3aGl0ZTsKICAgICAgICB9CiAgICAgICAgLS1wYXBlci1kcm9wZG93bi1tZW51LWlucHV0OiB7CiAgICAgICAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgfQogICAgICAgIC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWxhYmVsOiB7CiAgICAgICAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgfQogICAgICB9CgogICAgICBwYXBlci1kcm9wZG93bi1tZW51IHBhcGVyLWl0ZW0gewogICAgICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICAgIH0KCiAgICAgICNpbmFjdGl2ZS1kYXNoYm9hcmRzLW1lbnUgewogICAgICAgIC0tcGFwZXItbGlzdGJveC1iYWNrZ3JvdW5kLWNvbG9yOiB2YXIoCiAgICAgICAgICAtLXRiLXRvb2xiYXItYmFja2dyb3VuZC1jb2xvciwKICAgICAgICAgIHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpCiAgICAgICAgKTsKICAgICAgICAtLXBhcGVyLWxpc3Rib3gtY29sb3I6IHdoaXRlOwogICAgICB9CgogICAgICAuZ2xvYmFsLWFjdGlvbnMgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OyAvKiBFbnN1cmUgdGhhdCBpY29ucyBzdGF5IGFsaWduZWQgKi8KICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kOwogICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OwogICAgICAgIGNvbG9yOiB3aGl0ZTsKICAgICAgfQoKICAgICAgLmdsb2JhbC1hY3Rpb25zIGEgewogICAgICAgIGNvbG9yOiB3aGl0ZTsKICAgICAgfQoKICAgICAgI3Rvb2xiYXItY29udGVudCB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgfQoKICAgICAgI2NvbnRlbnQtcGFuZSB7CiAgICAgICAgYWxpZ24taXRlbXM6IHN0cmV0Y2g7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHN0cmV0Y2g7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgICNjb250ZW50IHsKICAgICAgICBmbGV4OiAxIDE7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQoKICAgICAgLmRhc2hib2FyZC1jb250YWluZXIgewogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgfQoKICAgICAgLyogSGlkZSB1bnNlbGVjdGVkIGRhc2hib2FyZHMuIFdlIHN0aWxsIGRpc3BsYXkgdGhlbSB3aXRoaW4gYSBjb250YWluZXIKICAgICAgICAgb2YgaGVpZ2h0IDAgc2luY2UgUGxvdHRhYmxlIHByb2R1Y2VzIGRlZ2VuZXJhdGUgY2hhcnRzIHdoZW4gY2hhcnRzIGFyZQogICAgICAgICByZWxvYWRlZCB3aGlsZSBub3QgZGlzcGxheWVkLiAqLwogICAgICAuZGFzaGJvYXJkLWNvbnRhaW5lcjpub3QoW2RhdGEtc2VsZWN0ZWRdKSB7CiAgICAgICAgbWF4LWhlaWdodDogMDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICAvKiogV2UgZnVydGhlciBtYWtlIGNvbnRhaW5lcnMgaW52aXNpYmxlLiBTb21lIGVsZW1lbnRzIG1heSBhbmNob3IgdG8KICAgICAgICAgICAgdGhlIHZpZXdwb3J0IGluc3RlYWQgb2YgdGhlIGNvbnRhaW5lciwgaW4gd2hpY2ggY2FzZSBzZXR0aW5nIHRoZSBtYXgKICAgICAgICAgICAgaGVpZ2h0IGhlcmUgdG8gMCB3aWxsIG5vdCBoaWRlIHRoZW0uICovCiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuOwogICAgICB9CgogICAgICAuZGFzaGJvYXJkLWNvbnRhaW5lciBpZnJhbWUgewogICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgIC53YXJuaW5nLW1lc3NhZ2UgewogICAgICAgIG1heC13aWR0aDogNTQwcHg7CiAgICAgICAgbWFyZ2luOiA4MHB4IGF1dG8gMCBhdXRvOwogICAgICB9CgogICAgICBbZGlzYWJsZWRdIHsKICAgICAgICBvcGFjaXR5OiAwLjI7CiAgICAgICAgY29sb3I6IHdoaXRlOwogICAgICB9CgogICAgICAjcmVsb2FkLWJ1dHRvbi5yZWZyZXNoaW5nIHsKICAgICAgICBhbmltYXRpb246IHJvdGF0ZSAycyBsaW5lYXIgaW5maW5pdGU7CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMgcm90YXRlIHsKICAgICAgICAwJSB7CiAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTsKICAgICAgICB9CiAgICAgICAgNTAlIHsKICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDE4MGRlZyk7CiAgICAgICAgfQogICAgICAgIDEwMCUgewogICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTsKICAgICAgICB9CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8dGVtcGxhdGUgaWQ9ImNvbGFiTm90U3VwcG9ydGVkIiBwcmVzZXJ2ZS1jb250ZW50PgogICAgICA8ZGl2IHN0eWxlPSJtYXgtd2lkdGg6IDU0MHB4OyBtYXJnaW46IDgwcHggYXV0byAwIGF1dG87Ij4KICAgICAgICA8aDM+RHluYW1pYyBwbHVnaW4gaXNu4oCZdCBzdXBwb3J0ZWQgaW4gQ29sYWIgeWV0LjwvaDM+CiAgICAgICAgPHA+CiAgICAgICAgICBQbGVhc2Ugc2VlCiAgICAgICAgICA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9pc3N1ZXMvMTkxMyIgcmVsPSJub29wZW5lciIgdGFyZ2V0PSJfYmxhbmsiPkdpdEh1YiBpc3N1ZSAjMTkxMzwvYT4KICAgICAgICAgIGZvciBtb3JlIGluZm9ybWF0aW9uLgogICAgICAgIAogICAgICA8L2Rpdj4KICAgIDwvdGVtcGxhdGU+CiAgPC90ZW1wbGF0ZT4KICA8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdGYtdGVuc29yYm9hcmQvYXV0b1JlbG9hZEJlaGF2aW9yLmpzCihmdW5jdGlvbihhKXtmdW5jdGlvbiBjKCl7cmV0dXJuKG5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCkpLmhhcygiX0Rpc2FibGVBdXRvUmVsb2FkIil9YS5BVVRPUkVMT0FEX0xPQ0FMU1RPUkFHRV9LRVk9IlRGLlRlbnNvckJvYXJkLmF1dG9SZWxvYWRFbmFibGVkIjthLkF1dG9SZWxvYWRCZWhhdmlvcj17cHJvcGVydGllczp7YXV0b1JlbG9hZEVuYWJsZWQ6e3R5cGU6Qm9vbGVhbixvYnNlcnZlcjoiX2F1dG9SZWxvYWRPYnNlcnZlciIsdmFsdWU6KCk9Pnt2YXIgZD13aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oYS5BVVRPUkVMT0FEX0xPQ0FMU1RPUkFHRV9LRVkpO3JldHVybiJ0cnVlIj09PWR8fG51bGw9PWR9fSxfYXV0b1JlbG9hZElkOnt0eXBlOk51bWJlcn0sYXV0b1JlbG9hZEludGVydmFsU2Vjczp7dHlwZTpOdW1iZXIsdmFsdWU6MzB9fSxkZXRhY2hlZDpmdW5jdGlvbigpe3dpbmRvdy5jbGVhclRpbWVvdXQodGhpcy5fYXV0b1JlbG9hZElkKX0sCl9hdXRvUmVsb2FkT2JzZXJ2ZXI6ZnVuY3Rpb24oZCl7d2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKGEuQVVUT1JFTE9BRF9MT0NBTFNUT1JBR0VfS0VZLGQpO2QmJiFjKCk/dGhpcy5fYXV0b1JlbG9hZElkPXdpbmRvdy5zZXRUaW1lb3V0KCgpPT50aGlzLl9kb0F1dG9SZWxvYWQoKSwxRTMqdGhpcy5hdXRvUmVsb2FkSW50ZXJ2YWxTZWNzKTp3aW5kb3cuY2xlYXJUaW1lb3V0KHRoaXMuX2F1dG9SZWxvYWRJZCl9LF9kb0F1dG9SZWxvYWQ6ZnVuY3Rpb24oKXtpZihudWxsPT10aGlzLnJlbG9hZCl0aHJvdyBFcnJvcigiQXV0b1JlbG9hZEJlaGF2aW9yIHJlcXVpcmVzIGEgcmVsb2FkIG1ldGhvZCIpO3RoaXMucmVsb2FkKCk7dGhpcy5fYXV0b1JlbG9hZElkPXdpbmRvdy5zZXRUaW1lb3V0KCgpPT50aGlzLl9kb0F1dG9SZWxvYWQoKSwxRTMqdGhpcy5hdXRvUmVsb2FkSW50ZXJ2YWxTZWNzKX19fSkoJGx8fCgkbD17fSkpOwo8L3NjcmlwdD4KICA8c2NyaXB0Pi8vfn5XRUJQQVRIfn4vdGYtdGVuc29yYm9hcmQvdGYtdGVuc29yYm9hcmQuaHRtbC5qcwpQb2x5bWVyKHtpczoidGYtdGVuc29yYm9hcmQiLGJlaGF2aW9yczpbJGwuQXV0b1JlbG9hZEJlaGF2aW9yXSxwcm9wZXJ0aWVzOnticmFuZDp7dHlwZTpTdHJpbmcsdmFsdWU6IlRlbnNvckJvYXJkLVgifSx0aXRsZTp7dHlwZTpTdHJpbmcsb2JzZXJ2ZXI6Il91cGRhdGVUaXRsZSJ9LHJvdXRlcjp7dHlwZTpPYmplY3Qsb2JzZXJ2ZXI6Il91cGRhdGVSb3V0ZXIifSxkZW1vRGlyOnt0eXBlOlN0cmluZyx2YWx1ZTpudWxsfSx1c2VIYXNoOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGRpc2FibGVkRGFzaGJvYXJkczp7dHlwZTpTdHJpbmcsdmFsdWU6IiJ9LF9kYXNoYm9hcmREYXRhOnt0eXBlOkFycmF5LGNvbXB1dGVkOiJfY29tcHV0ZURhc2hib2FyZERhdGEoX2Rhc2hib2FyZFJlZ2lzdHJ5KSJ9LF9kYXNoYm9hcmRSZWdpc3RyeTp7dHlwZTpPYmplY3QsY29tcHV0ZWQ6Il9jb21wdXRlRGFzaGJvYXJkUmVnaXN0cnkoX3BsdWdpbnNMaXN0aW5nKSJ9LF9wbHVnaW5zTGlzdGluZzp7dHlwZTpPYmplY3QsCnZhbHVlOigpPT4oe30pfSxfYWN0aXZlRGFzaGJvYXJkczp7dHlwZTpBcnJheSxjb21wdXRlZDoiX2NvbXB1dGVBY3RpdmVEYXNoYm9hcmQoX2Rhc2hib2FyZERhdGEsIF9wbHVnaW5zTGlzdGluZykifSxfYWN0aXZlRGFzaGJvYXJkc0xvYWRTdGF0ZTp7dHlwZTpTdHJpbmcsdmFsdWU6JGwuQWN0aXZlRGFzaGJvYXJkc0xvYWRTdGF0ZS5OT1RfTE9BREVEfSxfYWN0aXZlRGFzaGJvYXJkc05vdExvYWRlZDp7dHlwZTpCb29sZWFuLGNvbXB1dGVkOiJfY29tcHV0ZUFjdGl2ZURhc2hib2FyZHNOb3RMb2FkZWQoX2FjdGl2ZURhc2hib2FyZHNMb2FkU3RhdGUpIn0sX2FjdGl2ZURhc2hib2FyZHNMb2FkZWQ6e3R5cGU6Qm9vbGVhbixjb21wdXRlZDoiX2NvbXB1dGVBY3RpdmVEYXNoYm9hcmRzTG9hZGVkKF9hY3RpdmVEYXNoYm9hcmRzTG9hZFN0YXRlKSJ9LF9hY3RpdmVEYXNoYm9hcmRzRmFpbGVkVG9Mb2FkOnt0eXBlOkJvb2xlYW4sY29tcHV0ZWQ6Il9jb21wdXRlQWN0aXZlRGFzaGJvYXJkc0ZhaWxlZFRvTG9hZChfYWN0aXZlRGFzaGJvYXJkc0xvYWRTdGF0ZSkifSwKX3Nob3dOb0Rhc2hib2FyZHNNZXNzYWdlOnt0eXBlOkJvb2xlYW4sY29tcHV0ZWQ6Il9jb21wdXRlU2hvd05vRGFzaGJvYXJkc01lc3NhZ2UoX2FjdGl2ZURhc2hib2FyZHNMb2FkZWQsIF9hY3RpdmVEYXNoYm9hcmRzLCBfc2VsZWN0ZWREYXNoYm9hcmQpIn0sX3Nob3dOb1N1Y2hEYXNoYm9hcmRNZXNzYWdlOnt0eXBlOkJvb2xlYW4sY29tcHV0ZWQ6Il9jb21wdXRlU2hvd05vU3VjaERhc2hib2FyZE1lc3NhZ2UoX2FjdGl2ZURhc2hib2FyZHNMb2FkZWQsIF9kYXNoYm9hcmRSZWdpc3RyeSwgX3NlbGVjdGVkRGFzaGJvYXJkKSJ9LF9zZWxlY3RlZERhc2hib2FyZDp7dHlwZTpTdHJpbmcsdmFsdWU6VmwuZ2V0U3RyaW5nKFZsLlRBQil8fG51bGwsb2JzZXJ2ZXI6Il9zZWxlY3RlZERhc2hib2FyZENoYW5nZWQifSxfZGFzaGJvYXJkVG9NYXliZVJlbW92ZTpTdHJpbmcsX2Rhc2hib2FyZENvbnRhaW5lcnNTdGFtcGVkOnt0eXBlOk9iamVjdCx2YWx1ZTooKT0+KHt9KX0sX2lzUmVsb2FkRGlzYWJsZWQ6e3R5cGU6Qm9vbGVhbiwKdmFsdWU6ITF9LF9sYXN0UmVsb2FkVGltZTp7dHlwZTpTdHJpbmcsdmFsdWU6Im5vdCB5ZXQgbG9hZGVkIn0sX2xhc3RSZWxvYWRUaW1lU2hvcnQ6e3R5cGU6U3RyaW5nLHZhbHVlOiJOb3QgeWV0IGxvYWRlZCJ9LF9kYXRhTG9jYXRpb246e3R5cGU6U3RyaW5nLHZhbHVlOm51bGx9LF9yZXF1ZXN0TWFuYWdlcjp7dHlwZTpPYmplY3QsdmFsdWU6KCk9Pm5ldyBQay5SZXF1ZXN0TWFuYWdlcn0sX2NhbmNlbGxlcjp7dHlwZTpPYmplY3QsdmFsdWU6KCk9Pm5ldyBQay5DYW5jZWxsZXJ9LF9yZWZyZXNoaW5nOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LF9pbkNvbGFiOnt0eXBlOkJvb2xlYW4sdmFsdWU6KCk9PiEhKHdpbmRvdy5URU5TT1JCT0FSRF9FTlZ8fHt9KS5JTl9DT0xBQixyZWFkT25seTohMH19LG9ic2VydmVyczpbIl91cGRhdGVTZWxlY3RlZERhc2hib2FyZEZyb21BY3RpdmUoX3NlbGVjdGVkRGFzaGJvYXJkLCBfYWN0aXZlRGFzaGJvYXJkcykiLCJfZW5zdXJlU2VsZWN0ZWREYXNoYm9hcmRTdGFtcGVkKF9kYXNoYm9hcmRSZWdpc3RyeSwgX2Rhc2hib2FyZENvbnRhaW5lcnNTdGFtcGVkLCBfYWN0aXZlRGFzaGJvYXJkcywgX3NlbGVjdGVkRGFzaGJvYXJkKSJdLApfYWN0aXZlRGFzaGJvYXJkc1VwZGF0ZWQoKXt9LF9pc0Rhc2hib2FyZEFjdGl2ZShhLGMsZCl7cmV0dXJuIDA8PShhfHwiIikuc3BsaXQoIiwiKS5pbmRleE9mKGQucGx1Z2luKXx8IShjfHxbXSkuaW5jbHVkZXMoZC5wbHVnaW4pPyExOiEwfSxfaXNEYXNoYm9hcmRJbmFjdGl2ZShhLGMsZCl7cmV0dXJuIDA8PShhfHwiIikuc3BsaXQoIiwiKS5pbmRleE9mKGQucGx1Z2luKT8hMTooY3x8W10pLmluY2x1ZGVzKGQucGx1Z2luKT8hMTohMH0sX2luYWN0aXZlRGFzaGJvYXJkc0V4aXN0KGEsYyxkKXtpZighZClyZXR1cm4hMTtjb25zdCBmPW5ldyBTZXQ7YS5mb3JFYWNoKGc9PntmLmFkZChnLnBsdWdpbil9KTsoY3x8IiIpLnNwbGl0KCIsIikuZm9yRWFjaChnPT57Zi5kZWxldGUoZy5wbHVnaW4pfSk7ZC5mb3JFYWNoKGc9PntmLmRlbGV0ZShnKX0pO3JldHVybiAwPGYuc2l6ZX0sX2dldERhc2hib2FyZEZyb21JbmRleChhLGMpe3JldHVybiBhW2NdfSxfc2VsZWN0ZWRTdGF0dXMoYSwKYyl7cmV0dXJuIGE9PT1jfSxfc2VsZWN0ZWREYXNoYm9hcmRDaGFuZ2VkKGEpe2E9YXx8IiI7Vmwuc2V0U3RyaW5nKFZsLlRBQixhKTtnYSgic2V0IiwicGFnZSIsIi8iK2EpO2dhKCJzZW5kIiwicGFnZXZpZXciKX0sX3VwZGF0ZVNlbGVjdGVkRGFzaGJvYXJkRnJvbUFjdGl2ZShhLGMpe2MmJm51bGw9PWEmJihhPWNbMF18fG51bGwsbnVsbCE9YSYmKFZsLnNldFN0cmluZyhWbC5UQUIsYSx7dXNlTG9jYXRpb25SZXBsYWNlOiEwfSksdGhpcy5fc2VsZWN0ZWREYXNoYm9hcmQ9YSkpfSxfdXBkYXRlU2VsZWN0ZWREYXNoYm9hcmRGcm9tSGFzaCgpe2NvbnN0IGE9VmwuZ2V0U3RyaW5nKFZsLlRBQik7dGhpcy5zZXQoIl9zZWxlY3RlZERhc2hib2FyZCIsYXx8bnVsbCl9LF9lbnN1cmVTZWxlY3RlZERhc2hib2FyZFN0YW1wZWQoYSxjLGQsZil7aWYoZCYmZiYmY1tmXSYmKGM9dGhpcy5fZGFzaGJvYXJkVG9NYXliZVJlbW92ZSx0aGlzLl9kYXNoYm9hcmRUb01heWJlUmVtb3ZlPWYsYyYmCmMhPWYmJmFbY10ucmVtb3ZlRG9tJiYoYz10aGlzLiQkKGAuZGFzaGJvYXJkLWNvbnRhaW5lcltkYXRhLWRhc2hib2FyZD0ke2N9XWApLGMuZmlyc3RDaGlsZCYmYy5maXJzdENoaWxkLnJlbW92ZSgpKSxjPXRoaXMuJCQoYC5kYXNoYm9hcmQtY29udGFpbmVyW2RhdGEtZGFzaGJvYXJkPSR7Zn1dYCkpKXthPWFbZl07aWYoMD09PWMuY2hpbGRyZW4ubGVuZ3RoKXN3aXRjaChkPWEubG9hZGluZ01lY2hhbmlzbSxkLnR5cGUpe2Nhc2UgIkNVU1RPTV9FTEVNRU5UIjpmPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoZC5lbGVtZW50TmFtZSk7Zi5pZD0iZGFzaGJvYXJkIjtjLmFwcGVuZENoaWxkKGYpO2JyZWFrO2Nhc2UgIklGUkFNRSI6dGhpcy5fcmVuZGVyUGx1Z2luSWZyYW1lKGMsZixkKTticmVhaztkZWZhdWx0OmNvbnNvbGUud2FybigiSW52YXJpYW50IHZpb2xhdGlvbjoiLGQpfXRoaXMuc2V0KCJfaXNSZWxvYWREaXNhYmxlZCIsYS5kaXNhYmxlUmVsb2FkKX19LF9yZW5kZXJQbHVnaW5JZnJhbWUoYSwKYyxkKXtpZih0aGlzLl9pbkNvbGFiKWQ9ZG9jdW1lbnQuaW1wb3J0Tm9kZSh0aGlzLiQuY29sYWJOb3RTdXBwb3J0ZWQuY29udGVudCwhMCksZC5pZD0iZGFzaGJvYXJkIix0aGlzLnNjb3BlU3VidHJlZShkKSxhLmFwcGVuZENoaWxkKGQpO2Vsc2V7dmFyIGY9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaWZyYW1lIik7Zi5pZD0iZGFzaGJvYXJkIjt0aGlzLnNjb3BlU3VidHJlZShmKTthLmFwcGVuZENoaWxkKGYpO2E9Zi5jb250ZW50RG9jdW1lbnQ7Zj1Qay5nZXRSb3V0ZXIoKS5wbHVnaW5Sb3V0ZShjLCIvIik7Yz1hLmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpO2Y9SlNPTi5zdHJpbmdpZnkobmV3IFVSTChmLHdpbmRvdy5sb2NhdGlvbi5ocmVmKSk7ZD1KU09OLnN0cmluZ2lmeShkLm1vZHVsZVBhdGgpO2MudGV4dENvbnRlbnQ9WydzZXRUaW1lb3V0KCgpIFx4M2RceDNlIHtcbiAgY29uc3QgYmFzZSBceDNkIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJhc2UiKTtcbicsYCAgYmFzZS5zZXRBdHRyaWJ1dGUoImhyZWYiLCAke2Z9KTtcbmAsCiIgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoYmFzZSk7XG4iLGAgIGltcG9ydCgke2R9KS50aGVuKChtKSA9PiB2b2lkIG0ucmVuZGVyKCkpO1xuYCwifSwgMCk7XG4iXS5qb2luKCIiKTthLmJvZHkuYXBwZW5kQ2hpbGQoYyl9fSxfc2VsZWN0ZWREYXNoYm9hcmRDb21wb25lbnQoKXtyZXR1cm4gdGhpcy4kJChgLmRhc2hib2FyZC1jb250YWluZXJbZGF0YS1kYXNoYm9hcmQ9JHt0aGlzLl9zZWxlY3RlZERhc2hib2FyZH1dICNkYXNoYm9hcmRgKX0scmVhZHkoKXtSay5zZXRVc2VIYXNoKHRoaXMudXNlSGFzaCk7dGhpcy5fdXBkYXRlU2VsZWN0ZWREYXNoYm9hcmRGcm9tSGFzaCgpO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJoYXNoY2hhbmdlIiwoKT0+e3RoaXMuX3VwZGF0ZVNlbGVjdGVkRGFzaGJvYXJkRnJvbUhhc2goKX0sITEpO1BrLmVudmlyb25tZW50U3RvcmUuYWRkTGlzdGVuZXIoKCk9Pnt0aGlzLl9kYXRhTG9jYXRpb249UGsuZW52aXJvbm1lbnRTdG9yZS5nZXREYXRhTG9jYXRpb24oKTsKY29uc3QgYT1Qay5lbnZpcm9ubWVudFN0b3JlLmdldFdpbmRvd1RpdGxlKCk7YSYmKHdpbmRvdy5kb2N1bWVudC50aXRsZT1hKX0pO3RoaXMuJCQoIiNkYXNoYm9hcmRzLXRlbXBsYXRlIikuYWRkRXZlbnRMaXN0ZW5lcigiZG9tLWNoYW5nZSIsKCk9Pntjb25zdCBhPXt9O2Zvcihjb25zdCBjIG9mIHRoaXMucm9vdC5xdWVyeVNlbGVjdG9yQWxsKCIuZGFzaGJvYXJkLWNvbnRhaW5lciIpKWFbYy5kYXRhc2V0LmRhc2hib2FyZF09ITA7dGhpcy5fZGFzaGJvYXJkQ29udGFpbmVyc1N0YW1wZWQ9YX0sITEpO3RoaXMuX3JlbG9hZERhdGEoKTt0aGlzLl9sYXN0UmVsb2FkVGltZT0obmV3IERhdGUpLnRvU3RyaW5nKCl9LF9jb21wdXRlQWN0aXZlRGFzaGJvYXJkKCl7cmV0dXJuIHRoaXMuX2Rhc2hib2FyZERhdGE/dGhpcy5fZGFzaGJvYXJkRGF0YS5tYXAoYT0+YS5wbHVnaW4pLmZpbHRlcihhPT57YT10aGlzLl9wbHVnaW5zTGlzdGluZ1thXTtyZXR1cm4iYm9vbGVhbiI9PT10eXBlb2YgYT8KYTphJiZhLmVuYWJsZWR9KTpbXX0sX2NvbXB1dGVEYXNoYm9hcmRSZWdpc3RyeShhKXtjb25zdCBjPXt9O2Zvcihjb25zdCBbZixnXW9mIE9iamVjdC5lbnRyaWVzKCRsLmRhc2hib2FyZFJlZ2lzdHJ5KSljW2ZdPXtwbHVnaW46Zy5wbHVnaW4sbG9hZGluZ01lY2hhbmlzbTp7dHlwZToiQ1VTVE9NX0VMRU1FTlQiLGVsZW1lbnROYW1lOmcuZWxlbWVudE5hbWV9LHRhYk5hbWU6Zy50YWJOYW1lLnRvVXBwZXJDYXNlKCksZGlzYWJsZVJlbG9hZDpnLmlzUmVsb2FkRGlzYWJsZWR8fCExLHJlbW92ZURvbTpnLnJlbW92ZURvbXx8ITF9O2lmKG51bGwhPWEpZm9yKGNvbnN0IFtmLGddb2YgT2JqZWN0LmVudHJpZXMoYSkpaWYoImJvb2xlYW4iIT09dHlwZW9mIGcpe3N3aXRjaChnLmxvYWRpbmdfbWVjaGFuaXNtLnR5cGUpe2Nhc2UgIk5PTkUiOm51bGw9PWNbZl0mJmNvbnNvbGUud2FybigiUGx1Z2luIGhhcyBubyBsb2FkaW5nIG1lY2hhbmlzbSBhbmQgbm8gYmFrZWQtaW4gcmVnaXN0cnkgZW50cnk6ICVzIiwKZik7Y29udGludWU7Y2FzZSAiQ1VTVE9NX0VMRU1FTlQiOnZhciBkPXt0eXBlOiJDVVNUT01fRUxFTUVOVCIsZWxlbWVudE5hbWU6Zy5sb2FkaW5nX21lY2hhbmlzbS5lbGVtZW50X25hbWV9O2JyZWFrO2Nhc2UgIklGUkFNRSI6ZD17dHlwZToiSUZSQU1FIixtb2R1bGVQYXRoOmcubG9hZGluZ19tZWNoYW5pc20ubW9kdWxlX3BhdGh9O2JyZWFrO2RlZmF1bHQ6Y29uc29sZS53YXJuKCJVbmtub3duIGxvYWRpbmcgbWVjaGFuaXNtIGZvciBwbHVnaW4gJXM6ICVzIixmLGcubG9hZGluZ19tZWNoYW5pc20pO2NvbnRpbnVlfW51bGw9PWQmJmNvbnNvbGUuZXJyb3IoIkludmFyaWFudCB2aW9sYXRpb246IGxvYWRpbmdNZWNoYW5pc20gaXMgJXMgZm9yICVzIixkLGYpO2NbZl09e3BsdWdpbjpmLGxvYWRpbmdNZWNoYW5pc206ZCx0YWJOYW1lOmcudGFiX25hbWUudG9VcHBlckNhc2UoKSxkaXNhYmxlUmVsb2FkOmcuZGlzYWJsZV9yZWxvYWQscmVtb3ZlRG9tOmcucmVtb3ZlX2RvbX19ZD17fTsKZm9yKGNvbnN0IGYgb2YgT2JqZWN0LmtleXMoYSkpY1tmXSYmKGRbZl09Y1tmXSk7T2JqZWN0LmFzc2lnbihkLGMpO3JldHVybiBkfSxfY29tcHV0ZURhc2hib2FyZERhdGEoYSl7cmV0dXJuIE9iamVjdC52YWx1ZXMoYSl9LF9mZXRjaFBsdWdpbnNMaXN0aW5nKCl7dGhpcy5fY2FuY2VsbGVyLmNhbmNlbEFsbCgpO2NvbnN0IGE9dGhpcy5fY2FuY2VsbGVyLmNhbmNlbGxhYmxlKGM9PntjLmNhbmNlbGxlZHx8KHRoaXMuX3BsdWdpbnNMaXN0aW5nPWMudmFsdWUsdGhpcy5fYWN0aXZlRGFzaGJvYXJkc0xvYWRTdGF0ZT0kbC5BY3RpdmVEYXNoYm9hcmRzTG9hZFN0YXRlLkxPQURFRCl9KTtyZXR1cm4gdGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdChQay5nZXRSb3V0ZXIoKS5wbHVnaW5zTGlzdGluZygpKS50aGVuKGEsKCk9Pnt0aGlzLl9hY3RpdmVEYXNoYm9hcmRzTG9hZFN0YXRlPT09JGwuQWN0aXZlRGFzaGJvYXJkc0xvYWRTdGF0ZS5OT1RfTE9BREVEP3RoaXMuX2FjdGl2ZURhc2hib2FyZHNMb2FkU3RhdGU9CiRsLkFjdGl2ZURhc2hib2FyZHNMb2FkU3RhdGUuRkFJTEVEOmNvbnNvbGUud2FybigiRmFpbGVkIHRvIHJlbG9hZCB0aGUgc2V0IG9mIGFjdGl2ZSBwbHVnaW5zOyB1c2luZyBvbGQgdmFsdWUuIil9KX0sX2NvbXB1dGVBY3RpdmVEYXNoYm9hcmRzTm90TG9hZGVkKGEpe3JldHVybiBhPT09JGwuQWN0aXZlRGFzaGJvYXJkc0xvYWRTdGF0ZS5OT1RfTE9BREVEfSxfY29tcHV0ZUFjdGl2ZURhc2hib2FyZHNMb2FkZWQoYSl7cmV0dXJuIGE9PT0kbC5BY3RpdmVEYXNoYm9hcmRzTG9hZFN0YXRlLkxPQURFRH0sX2NvbXB1dGVBY3RpdmVEYXNoYm9hcmRzRmFpbGVkVG9Mb2FkKGEpe3JldHVybiBhPT09JGwuQWN0aXZlRGFzaGJvYXJkc0xvYWRTdGF0ZS5GQUlMRUR9LF9jb21wdXRlU2hvd05vRGFzaGJvYXJkc01lc3NhZ2UoYSxjLGQpe3JldHVybiBhJiYwPT09Yy5sZW5ndGgmJm51bGw9PWR9LF9jb21wdXRlU2hvd05vU3VjaERhc2hib2FyZE1lc3NhZ2UoYSxjLGQpe3JldHVybiBhJiYhIWQmJgpudWxsPT1jW2RdfSxfdXBkYXRlUm91dGVyKGEpe1BrLnNldFJvdXRlcihhKX0sX3VwZGF0ZVRpdGxlKGEpe2EmJnRoaXMuc2V0KCJicmFuZCIsYSl9LHJlbG9hZCgpe3RoaXMuX2lzUmVsb2FkRGlzYWJsZWR8fCh0aGlzLl9yZWxvYWREYXRhKCkudGhlbigoKT0+e2NvbnN0IGE9dGhpcy5fc2VsZWN0ZWREYXNoYm9hcmRDb21wb25lbnQoKTthJiZhLnJlbG9hZCYmYS5yZWxvYWQoKX0pLHRoaXMuX2xhc3RSZWxvYWRUaW1lPShuZXcgRGF0ZSkudG9TdHJpbmcoKSl9LF9yZWxvYWREYXRhKCl7dGhpcy5fcmVmcmVzaGluZz0hMDtyZXR1cm4gUHJvbWlzZS5hbGwoW3RoaXMuX2ZldGNoUGx1Z2luc0xpc3RpbmcoKSxQay5lbnZpcm9ubWVudFN0b3JlLnJlZnJlc2goKSxQay5ydW5zU3RvcmUucmVmcmVzaCgpLFBrLmV4cGVyaW1lbnRzU3RvcmUucmVmcmVzaCgpXSkudGhlbigoKT0+e3RoaXMuX2xhc3RSZWxvYWRUaW1lU2hvcnQ9KG5ldyBEYXRlKS50b0xvY2FsZURhdGVTdHJpbmcodm9pZCAwLAp7bW9udGg6ImxvbmciLGRheToibnVtZXJpYyIsaG91cjoibnVtZXJpYyIsbWludXRlOiJudW1lcmljIixzZWNvbmQ6Im51bWVyaWMifSl9KS5maW5hbGx5KCgpPT57dGhpcy5fcmVmcmVzaGluZz0hMX0pfSxfZ2V0RGF0YVJlZnJlc2hpbmdDbGFzcygpe3JldHVybiB0aGlzLl9yZWZyZXNoaW5nPyJyZWZyZXNoaW5nIjoiIn0sb3BlblNldHRpbmdzKCl7dGhpcy4kLnNldHRpbmdzLm9wZW4oKTt0aGlzLiQucGFnaW5hdGlvbkxpbWl0SW5wdXQudmFsdWU9WWwuZ2V0TGltaXQoKX0sX3BhZ2luYXRpb25MaW1pdFZhbGlkYXRlKGEpe2EudGFyZ2V0LnZhbGlkYXRlKCl9LF9wYWdpbmF0aW9uTGltaXRDaGFuZ2VkKGEpe2E9TnVtYmVyLnBhcnNlSW50KGEudGFyZ2V0LnZhbHVlLDEwKTthPT09K2EmJjA8YSYmWWwuc2V0TGltaXQoYSl9fSk7PC9zY3JpcHQ+CjwvZG9tLW1vZHVsZT4KCjxib2R5PgogIDx0Zi10ZW5zb3Jib2FyZCB1c2UtaGFzaCBicmFuZD0iVGVuc29yQm9hcmQiPjwvdGYtdGVuc29yYm9hcmQ+Cgo=",
- "ok": true,
- "headers": [
- [
- "content-type",
- "text/html; charset=utf-8"
- ]
- ],
- "status": 200,
- "status_text": ""
- },
- "http://localhost:6006/font-roboto/oMMgfZMQthOryQo9n22dcuvvDin1pK8aKteLpeZ5c0A.woff2": {
- "data": "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",
- "ok": true,
- "headers": [
- [
- "content-type",
- "application/octet-stream"
- ]
- ],
- "status": 200,
- "status_text": ""
- },
- "http://localhost:6006/data/environment": {
- "data": "eyJkYXRhX2xvY2F0aW9uIjogIi9jb250ZW50L21vZGVscy9yZXNlYXJjaC9zc2RsaXRlX21vYmlsZWRldF9kc3BfMzIweDMyMF9jb2NvXzIwMjBfMDVfMTkvZnAzMi8iLCAid2luZG93X3RpdGxlIjogIiJ9",
- "ok": true,
- "headers": [
- [
- "content-type",
- "application/json"
- ]
- ],
- "status": 200,
- "status_text": ""
- },
- "http://localhost:6006/data/plugins_listing": {
- "data": "eyJzY2FsYXJzIjogeyJkaXNhYmxlX3JlbG9hZCI6IGZhbHNlLCAiZW5hYmxlZCI6IHRydWUsICJyZW1vdmVfZG9tIjogZmFsc2UsICJ0YWJfbmFtZSI6ICJzY2FsYXJzIiwgImxvYWRpbmdfbWVjaGFuaXNtIjogeyJ0eXBlIjogIkNVU1RPTV9FTEVNRU5UIiwgImVsZW1lbnRfbmFtZSI6ICJ0Zi1zY2FsYXItZGFzaGJvYXJkIn19LCAiY3VzdG9tX3NjYWxhcnMiOiB7ImRpc2FibGVfcmVsb2FkIjogZmFsc2UsICJlbmFibGVkIjogZmFsc2UsICJyZW1vdmVfZG9tIjogZmFsc2UsICJ0YWJfbmFtZSI6ICJDdXN0b20gU2NhbGFycyIsICJsb2FkaW5nX21lY2hhbmlzbSI6IHsidHlwZSI6ICJDVVNUT01fRUxFTUVOVCIsICJlbGVtZW50X25hbWUiOiAidGYtY3VzdG9tLXNjYWxhci1kYXNoYm9hcmQifX0sICJpbWFnZXMiOiB7ImRpc2FibGVfcmVsb2FkIjogZmFsc2UsICJlbmFibGVkIjogdHJ1ZSwgInJlbW92ZV9kb20iOiBmYWxzZSwgInRhYl9uYW1lIjogImltYWdlcyIsICJsb2FkaW5nX21lY2hhbmlzbSI6IHsidHlwZSI6ICJDVVNUT01fRUxFTUVOVCIsICJlbGVtZW50X25hbWUiOiAidGYtaW1hZ2UtZGFzaGJvYXJkIn19LCAiYXVkaW8iOiB7ImRpc2FibGVfcmVsb2FkIjogZmFsc2UsICJlbmFibGVkIjogZmFsc2UsICJyZW1vdmVfZG9tIjogZmFsc2UsICJ0YWJfbmFtZSI6ICJhdWRpbyIsICJsb2FkaW5nX21lY2hhbmlzbSI6IHsidHlwZSI6ICJDVVNUT01fRUxFTUVOVCIsICJlbGVtZW50X25hbWUiOiAidGYtYXVkaW8tZGFzaGJvYXJkIn19LCAiZGVidWdnZXIiOiB7ImRpc2FibGVfcmVsb2FkIjogZmFsc2UsICJlbmFibGVkIjogZmFsc2UsICJyZW1vdmVfZG9tIjogZmFsc2UsICJ0YWJfbmFtZSI6ICJkZWJ1Z2dlciIsICJsb2FkaW5nX21lY2hhbmlzbSI6IHsidHlwZSI6ICJDVVNUT01fRUxFTUVOVCIsICJlbGVtZW50X25hbWUiOiAidGYtZGVidWdnZXItZGFzaGJvYXJkIn19LCAiZ3JhcGhzIjogeyJkaXNhYmxlX3JlbG9hZCI6IHRydWUsICJlbmFibGVkIjogdHJ1ZSwgInJlbW92ZV9kb20iOiBmYWxzZSwgInRhYl9uYW1lIjogImdyYXBocyIsICJsb2FkaW5nX21lY2hhbmlzbSI6IHsidHlwZSI6ICJDVVNUT01fRUxFTUVOVCIsICJlbGVtZW50X25hbWUiOiAidGYtZ3JhcGgtZGFzaGJvYXJkIn19LCAiZGlzdHJpYnV0aW9ucyI6IHsiZGlzYWJsZV9yZWxvYWQiOiBmYWxzZSwgImVuYWJsZWQiOiBmYWxzZSwgInJlbW92ZV9kb20iOiBmYWxzZSwgInRhYl9uYW1lIjogImRpc3RyaWJ1dGlvbnMiLCAibG9hZGluZ19tZWNoYW5pc20iOiB7InR5cGUiOiAiQ1VTVE9NX0VMRU1FTlQiLCAiZWxlbWVudF9uYW1lIjogInRmLWRpc3RyaWJ1dGlvbi1kYXNoYm9hcmQifX0sICJoaXN0b2dyYW1zIjogeyJkaXNhYmxlX3JlbG9hZCI6IGZhbHNlLCAiZW5hYmxlZCI6IGZhbHNlLCAicmVtb3ZlX2RvbSI6IGZhbHNlLCAidGFiX25hbWUiOiAiaGlzdG9ncmFtcyIsICJsb2FkaW5nX21lY2hhbmlzbSI6IHsidHlwZSI6ICJDVVNUT01fRUxFTUVOVCIsICJlbGVtZW50X25hbWUiOiAidGYtaGlzdG9ncmFtLWRhc2hib2FyZCJ9fSwgInRleHQiOiB7ImRpc2FibGVfcmVsb2FkIjogZmFsc2UsICJlbmFibGVkIjogZmFsc2UsICJyZW1vdmVfZG9tIjogZmFsc2UsICJ0YWJfbmFtZSI6ICJ0ZXh0IiwgImxvYWRpbmdfbWVjaGFuaXNtIjogeyJ0eXBlIjogIkNVU1RPTV9FTEVNRU5UIiwgImVsZW1lbnRfbmFtZSI6ICJ0Zi10ZXh0LWRhc2hib2FyZCJ9fSwgInByX2N1cnZlcyI6IHsiZGlzYWJsZV9yZWxvYWQiOiBmYWxzZSwgImVuYWJsZWQiOiBmYWxzZSwgInJlbW92ZV9kb20iOiBmYWxzZSwgInRhYl9uYW1lIjogIlBSIEN1cnZlcyIsICJsb2FkaW5nX21lY2hhbmlzbSI6IHsidHlwZSI6ICJDVVNUT01fRUxFTUVOVCIsICJlbGVtZW50X25hbWUiOiAidGYtcHItY3VydmUtZGFzaGJvYXJkIn19LCAicHJvZmlsZSI6IHsiZGlzYWJsZV9yZWxvYWQiOiB0cnVlLCAiZW5hYmxlZCI6IGZhbHNlLCAicmVtb3ZlX2RvbSI6IGZhbHNlLCAidGFiX25hbWUiOiAicHJvZmlsZSIsICJsb2FkaW5nX21lY2hhbmlzbSI6IHsidHlwZSI6ICJDVVNUT01fRUxFTUVOVCIsICJlbGVtZW50X25hbWUiOiAidGYtcHJvZmlsZS1kYXNoYm9hcmQifX0sICJiZWhvbGRlciI6IHsiZGlzYWJsZV9yZWxvYWQiOiBmYWxzZSwgImVuYWJsZWQiOiBmYWxzZSwgInJlbW92ZV9kb20iOiB0cnVlLCAidGFiX25hbWUiOiAiYmVob2xkZXIiLCAibG9hZGluZ19tZWNoYW5pc20iOiB7InR5cGUiOiAiQ1VTVE9NX0VMRU1FTlQiLCAiZWxlbWVudF9uYW1lIjogInRmLWJlaG9sZGVyLWRhc2hib2FyZCJ9fSwgIndoYXRpZiI6IHsiZGlzYWJsZV9yZWxvYWQiOiBmYWxzZSwgImVuYWJsZWQiOiBmYWxzZSwgInJlbW92ZV9kb20iOiBmYWxzZSwgInRhYl9uYW1lIjogIldoYXQtSWYgVG9vbCIsICJsb2FkaW5nX21lY2hhbmlzbSI6IHsidHlwZSI6ICJDVVNUT01fRUxFTUVOVCIsICJlbGVtZW50X25hbWUiOiAidGYtaW50ZXJhY3RpdmUtaW5mZXJlbmNlLWRhc2hib2FyZCJ9fSwgImhwYXJhbXMiOiB7ImRpc2FibGVfcmVsb2FkIjogZmFsc2UsICJlbmFibGVkIjogZmFsc2UsICJyZW1vdmVfZG9tIjogZmFsc2UsICJ0YWJfbmFtZSI6ICJocGFyYW1zIiwgImxvYWRpbmdfbWVjaGFuaXNtIjogeyJ0eXBlIjogIkNVU1RPTV9FTEVNRU5UIiwgImVsZW1lbnRfbmFtZSI6ICJ0Zi1ocGFyYW1zLWRhc2hib2FyZCJ9fSwgIm1lc2giOiB7ImRpc2FibGVfcmVsb2FkIjogZmFsc2UsICJlbmFibGVkIjogZmFsc2UsICJyZW1vdmVfZG9tIjogZmFsc2UsICJ0YWJfbmFtZSI6ICJtZXNoIiwgImxvYWRpbmdfbWVjaGFuaXNtIjogeyJ0eXBlIjogIkNVU1RPTV9FTEVNRU5UIiwgImVsZW1lbnRfbmFtZSI6ICJtZXNoLWRhc2hib2FyZCJ9fSwgInByb2plY3RvciI6IHsiZGlzYWJsZV9yZWxvYWQiOiB0cnVlLCAiZW5hYmxlZCI6IGZhbHNlLCAicmVtb3ZlX2RvbSI6IGZhbHNlLCAidGFiX25hbWUiOiAicHJvamVjdG9yIiwgImxvYWRpbmdfbWVjaGFuaXNtIjogeyJ0eXBlIjogIklGUkFNRSIsICJtb2R1bGVfcGF0aCI6ICIvZGF0YS9wbHVnaW4vcHJvamVjdG9yL2luZGV4LmpzIn19fQ==",
- "ok": true,
- "headers": [
- [
- "content-type",
- "application/json"
- ]
- ],
- "status": 200,
- "status_text": ""
- },
- "http://localhost:6006/font-roboto/RxZJdnzeo3R5zSexge8UUZBw1xU1rKptJj_0jans920.woff2": {
- "data": "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",
- "ok": true,
- "headers": [
- [
- "content-type",
- "application/octet-stream"
- ]
- ],
- "status": 200,
- "status_text": ""
- },
- "http://localhost:6006/data/experiments": {
- "data": "W10=",
- "ok": true,
- "headers": [
- [
- "content-type",
- "application/json"
- ]
- ],
- "status": 200,
- "status_text": ""
- },
- "http://localhost:6006/data/runs?experiment=": {
- "data": "WyIuIiwgImV2YWxfMCJd",
- "ok": true,
- "headers": [
- [
- "content-type",
- "application/json"
- ]
- ],
- "status": 200,
- "status_text": ""
- },
- "http://localhost:6006/data/plugin/scalars/tags?experiment=": {
- "data": "eyIuIjogeyJUYXJnZXRBc3NpZ25tZW50L0xvc3MvVGFyZ2V0QXNzaWdubWVudC9BdmdOdW1Hcm91bmR0cnV0aEJveGVzUGVySW1hZ2UiOiB7ImRpc3BsYXlOYW1lIjogIlRhcmdldEFzc2lnbm1lbnQvTG9zcy9UYXJnZXRBc3NpZ25tZW50L0F2Z051bUdyb3VuZHRydXRoQm94ZXNQZXJJbWFnZSIsICJkZXNjcmlwdGlvbiI6ICIifSwgIlRhcmdldEFzc2lnbm1lbnQvTG9zcy9UYXJnZXRBc3NpZ25tZW50L0F2Z051bUdyb3VuZHRydXRoQm94ZXNNYXRjaGVkUGVySW1hZ2UiOiB7ImRpc3BsYXlOYW1lIjogIlRhcmdldEFzc2lnbm1lbnQvTG9zcy9UYXJnZXRBc3NpZ25tZW50L0F2Z051bUdyb3VuZHRydXRoQm94ZXNNYXRjaGVkUGVySW1hZ2UiLCAiZGVzY3JpcHRpb24iOiAiIn0sICJUYXJnZXRBc3NpZ25tZW50L0xvc3MvVGFyZ2V0QXNzaWdubWVudC9BdmdOdW1Qb3NpdGl2ZUFuY2hvcnNQZXJJbWFnZSI6IHsiZGlzcGxheU5hbWUiOiAiVGFyZ2V0QXNzaWdubWVudC9Mb3NzL1RhcmdldEFzc2lnbm1lbnQvQXZnTnVtUG9zaXRpdmVBbmNob3JzUGVySW1hZ2UiLCAiZGVzY3JpcHRpb24iOiAiIn0sICJUYXJnZXRBc3NpZ25tZW50L0xvc3MvVGFyZ2V0QXNzaWdubWVudC9BdmdOdW1OZWdhdGl2ZUFuY2hvcnNQZXJJbWFnZSI6IHsiZGlzcGxheU5hbWUiOiAiVGFyZ2V0QXNzaWdubWVudC9Mb3NzL1RhcmdldEFzc2lnbm1lbnQvQXZnTnVtTmVnYXRpdmVBbmNob3JzUGVySW1hZ2UiLCAiZGVzY3JpcHRpb24iOiAiIn0sICJUYXJnZXRBc3NpZ25tZW50L0xvc3MvVGFyZ2V0QXNzaWdubWVudC9BdmdOdW1JZ25vcmVkQW5jaG9yc1BlckltYWdlIjogeyJkaXNwbGF5TmFtZSI6ICJUYXJnZXRBc3NpZ25tZW50L0xvc3MvVGFyZ2V0QXNzaWdubWVudC9BdmdOdW1JZ25vcmVkQW5jaG9yc1BlckltYWdlIiwgImRlc2NyaXB0aW9uIjogIiJ9LCAibGVhcm5pbmdfcmF0ZV8xIjogeyJkaXNwbGF5TmFtZSI6ICJsZWFybmluZ19yYXRlXzEiLCAiZGVzY3JpcHRpb24iOiAiIn0sICJnbG9iYWxfbm9ybS9ncmFkaWVudF9ub3JtIjogeyJkaXNwbGF5TmFtZSI6ICJnbG9iYWxfbm9ybS9ncmFkaWVudF9ub3JtIiwgImRlc2NyaXB0aW9uIjogIiJ9LCAibG9zc18xIjogeyJkaXNwbGF5TmFtZSI6ICJsb3NzXzEiLCAiZGVzY3JpcHRpb24iOiAiIn0sICJsb3NzXzIiOiB7ImRpc3BsYXlOYW1lIjogImxvc3NfMiIsICJkZXNjcmlwdGlvbiI6ICIifSwgImdsb2JhbF9zdGVwL3NlYyI6IHsiZGlzcGxheU5hbWUiOiAiZ2xvYmFsX3N0ZXAvc2VjIiwgImRlc2NyaXB0aW9uIjogIiJ9fSwgImV2YWxfMCI6IHsiRGV0ZWN0aW9uQm94ZXNfUHJlY2lzaW9uL21BUCI6IHsiZGlzcGxheU5hbWUiOiAiRGV0ZWN0aW9uQm94ZXNfUHJlY2lzaW9uL21BUCIsICJkZXNjcmlwdGlvbiI6ICIifSwgIkRldGVjdGlvbkJveGVzX1ByZWNpc2lvbi9tQVAgKGxhcmdlKSI6IHsiZGlzcGxheU5hbWUiOiAiRGV0ZWN0aW9uQm94ZXNfUHJlY2lzaW9uL21BUCAobGFyZ2UpIiwgImRlc2NyaXB0aW9uIjogIiJ9LCAiRGV0ZWN0aW9uQm94ZXNfUHJlY2lzaW9uL21BUCAobWVkaXVtKSI6IHsiZGlzcGxheU5hbWUiOiAiRGV0ZWN0aW9uQm94ZXNfUHJlY2lzaW9uL21BUCAobWVkaXVtKSIsICJkZXNjcmlwdGlvbiI6ICIifSwgIkRldGVjdGlvbkJveGVzX1ByZWNpc2lvbi9tQVAgKHNtYWxsKSI6IHsiZGlzcGxheU5hbWUiOiAiRGV0ZWN0aW9uQm94ZXNfUHJlY2lzaW9uL21BUCAoc21hbGwpIiwgImRlc2NyaXB0aW9uIjogIiJ9LCAiRGV0ZWN0aW9uQm94ZXNfUHJlY2lzaW9uL21BUEAuNTBJT1UiOiB7ImRpc3BsYXlOYW1lIjogIkRldGVjdGlvbkJveGVzX1ByZWNpc2lvbi9tQVBALjUwSU9VIiwgImRlc2NyaXB0aW9uIjogIiJ9LCAiRGV0ZWN0aW9uQm94ZXNfUHJlY2lzaW9uL21BUEAuNzVJT1UiOiB7ImRpc3BsYXlOYW1lIjogIkRldGVjdGlvbkJveGVzX1ByZWNpc2lvbi9tQVBALjc1SU9VIiwgImRlc2NyaXB0aW9uIjogIiJ9LCAiRGV0ZWN0aW9uQm94ZXNfUmVjYWxsL0FSQDEiOiB7ImRpc3BsYXlOYW1lIjogIkRldGVjdGlvbkJveGVzX1JlY2FsbC9BUkAxIiwgImRlc2NyaXB0aW9uIjogIiJ9LCAiRGV0ZWN0aW9uQm94ZXNfUmVjYWxsL0FSQDEwIjogeyJkaXNwbGF5TmFtZSI6ICJEZXRlY3Rpb25Cb3hlc19SZWNhbGwvQVJAMTAiLCAiZGVzY3JpcHRpb24iOiAiIn0sICJEZXRlY3Rpb25Cb3hlc19SZWNhbGwvQVJAMTAwIjogeyJkaXNwbGF5TmFtZSI6ICJEZXRlY3Rpb25Cb3hlc19SZWNhbGwvQVJAMTAwIiwgImRlc2NyaXB0aW9uIjogIiJ9LCAiRGV0ZWN0aW9uQm94ZXNfUmVjYWxsL0FSQDEwMCAobGFyZ2UpIjogeyJkaXNwbGF5TmFtZSI6ICJEZXRlY3Rpb25Cb3hlc19SZWNhbGwvQVJAMTAwIChsYXJnZSkiLCAiZGVzY3JpcHRpb24iOiAiIn0sICJEZXRlY3Rpb25Cb3hlc19SZWNhbGwvQVJAMTAwIChtZWRpdW0pIjogeyJkaXNwbGF5TmFtZSI6ICJEZXRlY3Rpb25Cb3hlc19SZWNhbGwvQVJAMTAwIChtZWRpdW0pIiwgImRlc2NyaXB0aW9uIjogIiJ9LCAiRGV0ZWN0aW9uQm94ZXNfUmVjYWxsL0FSQDEwMCAoc21hbGwpIjogeyJkaXNwbGF5TmFtZSI6ICJEZXRlY3Rpb25Cb3hlc19SZWNhbGwvQVJAMTAwIChzbWFsbCkiLCAiZGVzY3JpcHRpb24iOiAiIn0sICJMb3NzL2NsYXNzaWZpY2F0aW9uX2xvc3MiOiB7ImRpc3BsYXlOYW1lIjogIkxvc3MvY2xhc3NpZmljYXRpb25fbG9zcyIsICJkZXNjcmlwdGlvbiI6ICIifSwgIkxvc3MvbG9jYWxpemF0aW9uX2xvc3MiOiB7ImRpc3BsYXlOYW1lIjogIkxvc3MvbG9jYWxpemF0aW9uX2xvc3MiLCAiZGVzY3JpcHRpb24iOiAiIn0sICJMb3NzL3JlZ3VsYXJpemF0aW9uX2xvc3MiOiB7ImRpc3BsYXlOYW1lIjogIkxvc3MvcmVndWxhcml6YXRpb25fbG9zcyIsICJkZXNjcmlwdGlvbiI6ICIifSwgIkxvc3MvdG90YWxfbG9zcyI6IHsiZGlzcGxheU5hbWUiOiAiTG9zcy90b3RhbF9sb3NzIiwgImRlc2NyaXB0aW9uIjogIiJ9LCAibGVhcm5pbmdfcmF0ZSI6IHsiZGlzcGxheU5hbWUiOiAibGVhcm5pbmdfcmF0ZSIsICJkZXNjcmlwdGlvbiI6ICIifSwgImxvc3MiOiB7ImRpc3BsYXlOYW1lIjogImxvc3MiLCAiZGVzY3JpcHRpb24iOiAiIn19fQ==",
- "ok": true,
- "headers": [
- [
- "content-type",
- "application/json"
- ]
- ],
- "status": 200,
- "status_text": ""
- },
- "http://localhost:6006/data/plugin/scalars/scalars?tag=DetectionBoxes_Precision%2FmAP&run=eval_0&experiment=": {
- "data": "W1sxNjEwODAwOTM3LjI5OTk0OTQsIDk4NSwgMC4wNDM0OTUxNDA5Njk3NTMyNjVdLCBbMTYxMDgwMTUzMy4yNTYyNjQsIDE3MzIsIDAuMDkxMzAzMDIwNzE1NzEzNV0sIFsxNjEwODAyNTcwLjA4OTU0NzYsIDI3MDMsIDAuMTE3Mjg0MjkwNDkyNTM0NjRdLCBbMTYxMDgwMzE3Mi4yNTQ1NzYsIDM0NTksIDAuMjIxNTkxMzk4MTE5OTI2NDVdLCBbMTYxMDgwMzc2OS43NDk0ODU3LCA0MjA1LCAwLjI3NTAxODU0MzAwNDk4OTZdLCBbMTYxMDgwNDM2OS43MDgwMDY2LCA0OTYzLCAwLjMzMzE0MjA0MjE2MDAzNDJdLCBbMTYxMDgwNDk3NS43ODcyMTU3LCA1NzE4LCAwLjQ3ODgwNDg4NjM0MTA5NDk3XSwgWzE2MTA4MDU2MjcuNDMxMDQzMSwgNjM5NywgMC41MDE1NDUwMTE5OTcyMjI5XSwgWzE2MTA4MDYyMjQuNTQ3NjIyNywgNjk5MCwgMC41ODQ4OTUzMTI3ODYxMDIzXSwgWzE2MTA4MDY4MjUuNjQxMTU3NiwgNzU4OSwgMC42MzcxNjE0MzM2OTY3NDY4XSwgWzE2MTA4MDc0MjguMjIzMjA3MiwgODE3OCwgMC42Mzk4Njc3MjI5ODgxMjg3XSwgWzE2MTA4MDgwMjkuNzA1MTc0NywgODc2MiwgMC42NzA0MjExODMxMDkyODM0XSwgWzE2MTA4MDg2MjkuODA1NTk2OCwgOTM0NSwgMC42ODA2OTc2Nzk1MTk2NTMzXSwgWzE2MTA4MDkyMjUuNjMyODM5MiwgOTkzOCwgMC42Nzc3MzY3NTkxODU3OTFdLCBbMTYxMDgwOTQ4MC40MTM3NDksIDEwMDAwLCAwLjY3ODgzMjQ3MTM3MDY5N11d",
- "ok": true,
- "headers": [
- [
- "content-type",
- "application/json"
- ]
- ],
- "status": 200,
- "status_text": ""
- },
- "http://localhost:6006/data/plugin/scalars/scalars?tag=DetectionBoxes_Recall%2FAR%40100&run=eval_0&experiment=": {
- "data": "W1sxNjEwODAwOTM3LjI5OTk0OTQsIDk4NSwgMC4xNTA3Mzc2MjgzNDA3MjExM10sIFsxNjEwODAxNTMzLjI1NjI2NCwgMTczMiwgMC4yNDY5ODkyNjUwODQyNjY2Nl0sIFsxNjEwODAyNTcwLjA4OTU0NzYsIDI3MDMsIDAuMzIzMjgzMzQ0NTA3MjE3NF0sIFsxNjEwODAzMTcyLjI1NDU3NiwgMzQ1OSwgMC41MTI0OTY1OTA2MTQzMTg4XSwgWzE2MTA4MDM3NjkuNzQ5NDg1NywgNDIwNSwgMC41NDA5NDk4ODEwNzY4MTI3XSwgWzE2MTA4MDQzNjkuNzA4MDA2NiwgNDk2MywgMC41NTI0NTEzMTI1NDE5NjE3XSwgWzE2MTA4MDQ5NzUuNzg3MjE1NywgNTcxOCwgMC42NzE0NDM4Nzk2MDQzMzk2XSwgWzE2MTA4MDU2MjcuNDMxMDQzMSwgNjM5NywgMC42NzY0OTkzNjY3NjAyNTM5XSwgWzE2MTA4MDYyMjQuNTQ3NjIyNywgNjk5MCwgMC43NDE2MzI2NDAzNjE3ODU5XSwgWzE2MTA4MDY4MjUuNjQxMTU3NiwgNzU4OSwgMC43NTI3MjYzNzYwNTY2NzExXSwgWzE2MTA4MDc0MjguMjIzMjA3MiwgODE3OCwgMC43NTE1MTEwMzczNDk3MDA5XSwgWzE2MTA4MDgwMjkuNzA1MTc0NywgODc2MiwgMC43NTY2OTQ3MzQwOTY1MjcxXSwgWzE2MTA4MDg2MjkuODA1NTk2OCwgOTM0NSwgMC43NzEzMTI2NTQwMTg0MDIxXSwgWzE2MTA4MDkyMjUuNjMyODM5MiwgOTkzOCwgMC43NjM4MDY5MzkxMjUwNjFdLCBbMTYxMDgwOTQ4MC40MTM3NDksIDEwMDAwLCAwLjc2MzU1MDM0MTEyOTMwM11d",
- "ok": true,
- "headers": [
- [
- "content-type",
- "application/json"
- ]
- ],
- "status": 200,
- "status_text": ""
- },
- "http://localhost:6006/data/plugin/scalars/scalars?tag=DetectionBoxes_Recall%2FAR%4010&run=eval_0&experiment=": {
- "data": "W1sxNjEwODAwOTM3LjI5OTk0OTQsIDk4NSwgMC4wNzA3OTA3MDA2MTQ0NTIzNl0sIFsxNjEwODAxNTMzLjI1NjI2NCwgMTczMiwgMC4xNDUzMjM4ODc0NjczODQzNF0sIFsxNjEwODAyNTcwLjA4OTU0NzYsIDI3MDMsIDAuMjUwNzMyODY4OTA5ODM1OF0sIFsxNjEwODAzMTcyLjI1NDU3NiwgMzQ1OSwgMC40NDg0MjUwODQzNTI0OTMzXSwgWzE2MTA4MDM3NjkuNzQ5NDg1NywgNDIwNSwgMC40ODE2MTIxMTYwOTg0MDM5M10sIFsxNjEwODA0MzY5LjcwODAwNjYsIDQ5NjMsIDAuNDY4Nzg0NDUxNDg0NjgwMl0sIFsxNjEwODA0OTc1Ljc4NzIxNTcsIDU3MTgsIDAuNjAxNzQzODE3MzI5NDA2N10sIFsxNjEwODA1NjI3LjQzMTA0MzEsIDYzOTcsIDAuNjA1NDI1MTc5MDA0NjY5Ml0sIFsxNjEwODA2MjI0LjU0NzYyMjcsIDY5OTAsIDAuNjcwMzk1NTUzMTEyMDNdLCBbMTYxMDgwNjgyNS42NDExNTc2LCA3NTg5LCAwLjY3OTA0MzI5Mjk5OTI2NzZdLCBbMTYxMDgwNzQyOC4yMjMyMDcyLCA4MTc4LCAwLjY3NTk1MjU1Mzc0OTA4NDVdLCBbMTYxMDgwODAyOS43MDUxNzQ3LCA4NzYyLCAwLjY4MjgzNjg5MDIyMDY0MjFdLCBbMTYxMDgwODYyOS44MDU1OTY4LCA5MzQ1LCAwLjY5NzY1NjU3MTg2NTA4MThdLCBbMTYxMDgwOTIyNS42MzI4MzkyLCA5OTM4LCAwLjY5MDYzNTUwMjMzODQwOTRdLCBbMTYxMDgwOTQ4MC40MTM3NDksIDEwMDAwLCAwLjY5MDM3OTA4MzE1NjU4NTddXQ==",
- "ok": true,
- "headers": [
- [
- "content-type",
- "application/json"
- ]
- ],
- "status": 200,
- "status_text": ""
- },
- "http://localhost:6006/data/plugin/scalars/scalars?tag=DetectionBoxes_Precision%2FmAP%40.75IOU&run=eval_0&experiment=": {
- "data": "W1sxNjEwODAwOTM3LjI5OTk0OTQsIDk4NSwgMC4wMzczNTM2MjM2NTg0MTg2NTVdLCBbMTYxMDgwMTUzMy4yNTYyNjQsIDE3MzIsIDAuMTE2ODkwMzc4Mjk2Mzc1MjddLCBbMTYxMDgwMjU3MC4wODk1NDc2LCAyNzAzLCAwLjEyNjkyMjg2MDc0MTYxNTNdLCBbMTYxMDgwMzE3Mi4yNTQ1NzYsIDM0NTksIDAuMjY3NzkzNDQ2Nzc5MjUxMV0sIFsxNjEwODAzNzY5Ljc0OTQ4NTcsIDQyMDUsIDAuMzI3Nzk5MjAxMDExNjU3N10sIFsxNjEwODA0MzY5LjcwODAwNjYsIDQ5NjMsIDAuNDI0MzgwMzkxODM2MTY2NF0sIFsxNjEwODA0OTc1Ljc4NzIxNTcsIDU3MTgsIDAuNTg2MjczNzg5NDA1ODIyOF0sIFsxNjEwODA1NjI3LjQzMTA0MzEsIDYzOTcsIDAuNjU3NjA2MTg0NDgyNTc0NV0sIFsxNjEwODA2MjI0LjU0NzYyMjcsIDY5OTAsIDAuNzQ1ODEzOTY1Nzk3NDI0M10sIFsxNjEwODA2ODI1LjY0MTE1NzYsIDc1ODksIDAuODQxNzYyMTI1NDkyMDk2XSwgWzE2MTA4MDc0MjguMjIzMjA3MiwgODE3OCwgMC44MjU0NzQxNDMwMjgyNTkzXSwgWzE2MTA4MDgwMjkuNzA1MTc0NywgODc2MiwgMC44Njg1MTc5OTQ4ODA2NzYzXSwgWzE2MTA4MDg2MjkuODA1NTk2OCwgOTM0NSwgMC44OTUyMjY5NTU0MTM4MTg0XSwgWzE2MTA4MDkyMjUuNjMyODM5MiwgOTkzOCwgMC44NzQ5MDgzMjgwNTYzMzU0XSwgWzE2MTA4MDk0ODAuNDEzNzQ5LCAxMDAwMCwgMC44NzcxNDg4MDcwNDg3OTc2XV0=",
- "ok": true,
- "headers": [
- [
- "content-type",
- "application/json"
- ]
- ],
- "status": 200,
- "status_text": ""
- },
- "http://localhost:6006/data/plugin/scalars/scalars?tag=DetectionBoxes_Precision%2FmAP%40.50IOU&run=eval_0&experiment=": {
- "data": "W1sxNjEwODAwOTM3LjI5OTk0OTQsIDk4NSwgMC4wODI0NTQ2MDY4OTA2Nzg0XSwgWzE2MTA4MDE1MzMuMjU2MjY0LCAxNzMyLCAwLjEzNTQ4OTA3NjM3NTk2MTNdLCBbMTYxMDgwMjU3MC4wODk1NDc2LCAyNzAzLCAwLjIwMDgyMjc0MDc5MzIyODE1XSwgWzE2MTA4MDMxNzIuMjU0NTc2LCAzNDU5LCAwLjM0MTI0NTIwNDIxMDI4MTM3XSwgWzE2MTA4MDM3NjkuNzQ5NDg1NywgNDIwNSwgMC40NDAwMjE0NTUyODc5MzMzNV0sIFsxNjEwODA0MzY5LjcwODAwNjYsIDQ5NjMsIDAuNDgyNDYwMjMwNTg4OTEyOTZdLCBbMTYxMDgwNDk3NS43ODcyMTU3LCA1NzE4LCAwLjcyMDA3NTAxMTI1MzM1NjldLCBbMTYxMDgwNTYyNy40MzEwNDMxLCA2Mzk3LCAwLjczMTQyMTY0OTQ1NjAyNDJdLCBbMTYxMDgwNjIyNC41NDc2MjI3LCA2OTkwLCAwLjgxMjYyMjkwNDc3NzUyNjldLCBbMTYxMDgwNjgyNS42NDExNTc2LCA3NTg5LCAwLjg4MTg2ODQ4MTYzNjA0NzRdLCBbMTYxMDgwNzQyOC4yMjMyMDcyLCA4MTc4LCAwLjg3NzQ5MjE4OTQwNzM0ODZdLCBbMTYxMDgwODAyOS43MDUxNzQ3LCA4NzYyLCAwLjkxMzY3MDY1OTA2NTI0NjZdLCBbMTYxMDgwODYyOS44MDU1OTY4LCA5MzQ1LCAwLjkyMDQ2NjEyNTAxMTQ0NDFdLCBbMTYxMDgwOTIyNS42MzI4MzkyLCA5OTM4LCAwLjkxODAzMzQ4MDY0NDIyNjFdLCBbMTYxMDgwOTQ4MC40MTM3NDksIDEwMDAwLCAwLjkxOTMyNzM3ODI3MzAxMDNdXQ==",
- "ok": true,
- "headers": [
- [
- "content-type",
- "application/json"
- ]
- ],
- "status": 200,
- "status_text": ""
- },
- "http://localhost:6006/data/plugin/scalars/scalars?tag=DetectionBoxes_Recall%2FAR%401&run=eval_0&experiment=": {
- "data": "W1sxNjEwODAwOTM3LjI5OTk0OTQsIDk4NSwgMC4wMTg0MjkyOTk4MTY0ODkyMl0sIFsxNjEwODAxNTMzLjI1NjI2NCwgMTczMiwgMC4wMTcyNjM1Njg5Mzc3Nzg0NzNdLCBbMTYxMDgwMjU3MC4wODk1NDc2LCAyNzAzLCAwLjA0ODA0NTM3ODE3ODM1ODA4XSwgWzE2MTA4MDMxNzIuMjU0NTc2LCAzNDU5LCAwLjExNDcwMDY2NzU2MDEwMDU2XSwgWzE2MTA4MDM3NjkuNzQ5NDg1NywgNDIwNSwgMC4xMjcyODc0MzI1NTEzODM5N10sIFsxNjEwODA0MzY5LjcwODAwNjYsIDQ5NjMsIDAuMTQ0MzYwODcwMTIyOTA5NTVdLCBbMTYxMDgwNDk3NS43ODcyMTU3LCA1NzE4LCAwLjIwMjc1MzExMTcyMDA4NTE0XSwgWzE2MTA4MDU2MjcuNDMxMDQzMSwgNjM5NywgMC4xOTEzNTkyMDcwMzQxMTEwMl0sIFsxNjEwODA2MjI0LjU0NzYyMjcsIDY5OTAsIDAuMjE4NTU3MzI3OTg1NzYzNTVdLCBbMTYxMDgwNjgyNS42NDExNTc2LCA3NTg5LCAwLjIzMTY5NDM4NTQwOTM1NTE2XSwgWzE2MTA4MDc0MjguMjIzMjA3MiwgODE3OCwgMC4yMzExNTkwMTY0ODk5ODI2XSwgWzE2MTA4MDgwMjkuNzA1MTc0NywgODc2MiwgMC4yNDM3NzgxOTg5NTc0NDMyNF0sIFsxNjEwODA4NjI5LjgwNTU5NjgsIDkzNDUsIDAuMjM4NTA3MTgxNDA2MDIxMTJdLCBbMTYxMDgwOTIyNS42MzI4MzkyLCA5OTM4LCAwLjIzOTMxMjkzMTg5NTI1NjA0XSwgWzE2MTA4MDk0ODAuNDEzNzQ5LCAxMDAwMCwgMC4yMzg4NjE0NzE0MTQ1NjYwNF1d",
- "ok": true,
- "headers": [
- [
- "content-type",
- "application/json"
- ]
- ],
- "status": 200,
- "status_text": ""
- },
- "http://localhost:6006/data/plugin/scalars/scalars?tag=DetectionBoxes_Precision%2FmAP+%28medium%29&run=eval_0&experiment=": {
- "data": "W1sxNjEwODAwOTM3LjI5OTk0OTQsIDk4NSwgLTEuMF0sIFsxNjEwODAxNTMzLjI1NjI2NCwgMTczMiwgLTEuMF0sIFsxNjEwODAyNTcwLjA4OTU0NzYsIDI3MDMsIC0xLjBdLCBbMTYxMDgwMzE3Mi4yNTQ1NzYsIDM0NTksIC0xLjBdLCBbMTYxMDgwMzc2OS43NDk0ODU3LCA0MjA1LCAtMS4wXSwgWzE2MTA4MDQzNjkuNzA4MDA2NiwgNDk2MywgLTEuMF0sIFsxNjEwODA0OTc1Ljc4NzIxNTcsIDU3MTgsIC0xLjBdLCBbMTYxMDgwNTYyNy40MzEwNDMxLCA2Mzk3LCAtMS4wXSwgWzE2MTA4MDYyMjQuNTQ3NjIyNywgNjk5MCwgLTEuMF0sIFsxNjEwODA2ODI1LjY0MTE1NzYsIDc1ODksIC0xLjBdLCBbMTYxMDgwNzQyOC4yMjMyMDcyLCA4MTc4LCAtMS4wXSwgWzE2MTA4MDgwMjkuNzA1MTc0NywgODc2MiwgLTEuMF0sIFsxNjEwODA4NjI5LjgwNTU5NjgsIDkzNDUsIC0xLjBdLCBbMTYxMDgwOTIyNS42MzI4MzkyLCA5OTM4LCAtMS4wXSwgWzE2MTA4MDk0ODAuNDEzNzQ5LCAxMDAwMCwgLTEuMF1d",
- "ok": true,
- "headers": [
- [
- "content-type",
- "application/json"
- ]
- ],
- "status": 200,
- "status_text": ""
- },
- "http://localhost:6006/data/plugin/scalars/scalars?tag=DetectionBoxes_Precision%2FmAP+%28small%29&run=eval_0&experiment=": {
- "data": "W1sxNjEwODAwOTM3LjI5OTk0OTQsIDk4NSwgLTEuMF0sIFsxNjEwODAxNTMzLjI1NjI2NCwgMTczMiwgLTEuMF0sIFsxNjEwODAyNTcwLjA4OTU0NzYsIDI3MDMsIC0xLjBdLCBbMTYxMDgwMzE3Mi4yNTQ1NzYsIDM0NTksIC0xLjBdLCBbMTYxMDgwMzc2OS43NDk0ODU3LCA0MjA1LCAtMS4wXSwgWzE2MTA4MDQzNjkuNzA4MDA2NiwgNDk2MywgLTEuMF0sIFsxNjEwODA0OTc1Ljc4NzIxNTcsIDU3MTgsIC0xLjBdLCBbMTYxMDgwNTYyNy40MzEwNDMxLCA2Mzk3LCAtMS4wXSwgWzE2MTA4MDYyMjQuNTQ3NjIyNywgNjk5MCwgLTEuMF0sIFsxNjEwODA2ODI1LjY0MTE1NzYsIDc1ODksIC0xLjBdLCBbMTYxMDgwNzQyOC4yMjMyMDcyLCA4MTc4LCAtMS4wXSwgWzE2MTA4MDgwMjkuNzA1MTc0NywgODc2MiwgLTEuMF0sIFsxNjEwODA4NjI5LjgwNTU5NjgsIDkzNDUsIC0xLjBdLCBbMTYxMDgwOTIyNS42MzI4MzkyLCA5OTM4LCAtMS4wXSwgWzE2MTA4MDk0ODAuNDEzNzQ5LCAxMDAwMCwgLTEuMF1d",
- "ok": true,
- "headers": [
- [
- "content-type",
- "application/json"
- ]
- ],
- "status": 200,
- "status_text": ""
- },
- "http://localhost:6006/data/plugin/scalars/scalars?tag=DetectionBoxes_Recall%2FAR%40100+%28small%29&run=eval_0&experiment=": {
- "data": "W1sxNjEwODAwOTM3LjI5OTk0OTQsIDk4NSwgLTEuMF0sIFsxNjEwODAxNTMzLjI1NjI2NCwgMTczMiwgLTEuMF0sIFsxNjEwODAyNTcwLjA4OTU0NzYsIDI3MDMsIC0xLjBdLCBbMTYxMDgwMzE3Mi4yNTQ1NzYsIDM0NTksIC0xLjBdLCBbMTYxMDgwMzc2OS43NDk0ODU3LCA0MjA1LCAtMS4wXSwgWzE2MTA4MDQzNjkuNzA4MDA2NiwgNDk2MywgLTEuMF0sIFsxNjEwODA0OTc1Ljc4NzIxNTcsIDU3MTgsIC0xLjBdLCBbMTYxMDgwNTYyNy40MzEwNDMxLCA2Mzk3LCAtMS4wXSwgWzE2MTA4MDYyMjQuNTQ3NjIyNywgNjk5MCwgLTEuMF0sIFsxNjEwODA2ODI1LjY0MTE1NzYsIDc1ODksIC0xLjBdLCBbMTYxMDgwNzQyOC4yMjMyMDcyLCA4MTc4LCAtMS4wXSwgWzE2MTA4MDgwMjkuNzA1MTc0NywgODc2MiwgLTEuMF0sIFsxNjEwODA4NjI5LjgwNTU5NjgsIDkzNDUsIC0xLjBdLCBbMTYxMDgwOTIyNS42MzI4MzkyLCA5OTM4LCAtMS4wXSwgWzE2MTA4MDk0ODAuNDEzNzQ5LCAxMDAwMCwgLTEuMF1d",
- "ok": true,
- "headers": [
- [
- "content-type",
- "application/json"
- ]
- ],
- "status": 200,
- "status_text": ""
- },
- "http://localhost:6006/data/plugin/scalars/scalars?tag=DetectionBoxes_Recall%2FAR%40100+%28medium%29&run=eval_0&experiment=": {
- "data": "W1sxNjEwODAwOTM3LjI5OTk0OTQsIDk4NSwgLTEuMF0sIFsxNjEwODAxNTMzLjI1NjI2NCwgMTczMiwgLTEuMF0sIFsxNjEwODAyNTcwLjA4OTU0NzYsIDI3MDMsIC0xLjBdLCBbMTYxMDgwMzE3Mi4yNTQ1NzYsIDM0NTksIC0xLjBdLCBbMTYxMDgwMzc2OS43NDk0ODU3LCA0MjA1LCAtMS4wXSwgWzE2MTA4MDQzNjkuNzA4MDA2NiwgNDk2MywgLTEuMF0sIFsxNjEwODA0OTc1Ljc4NzIxNTcsIDU3MTgsIC0xLjBdLCBbMTYxMDgwNTYyNy40MzEwNDMxLCA2Mzk3LCAtMS4wXSwgWzE2MTA4MDYyMjQuNTQ3NjIyNywgNjk5MCwgLTEuMF0sIFsxNjEwODA2ODI1LjY0MTE1NzYsIDc1ODksIC0xLjBdLCBbMTYxMDgwNzQyOC4yMjMyMDcyLCA4MTc4LCAtMS4wXSwgWzE2MTA4MDgwMjkuNzA1MTc0NywgODc2MiwgLTEuMF0sIFsxNjEwODA4NjI5LjgwNTU5NjgsIDkzNDUsIC0xLjBdLCBbMTYxMDgwOTIyNS42MzI4MzkyLCA5OTM4LCAtMS4wXSwgWzE2MTA4MDk0ODAuNDEzNzQ5LCAxMDAwMCwgLTEuMF1d",
- "ok": true,
- "headers": [
- [
- "content-type",
- "application/json"
- ]
- ],
- "status": 200,
- "status_text": ""
- },
- "http://localhost:6006/data/plugin/scalars/scalars?tag=DetectionBoxes_Recall%2FAR%40100+%28large%29&run=eval_0&experiment=": {
- "data": "W1sxNjEwODAwOTM3LjI5OTk0OTQsIDk4NSwgMC4xNTA3Mzc2MjgzNDA3MjExM10sIFsxNjEwODAxNTMzLjI1NjI2NCwgMTczMiwgMC4yNDY5ODkyNjUwODQyNjY2Nl0sIFsxNjEwODAyNTcwLjA4OTU0NzYsIDI3MDMsIDAuMzIzMjgzMzQ0NTA3MjE3NF0sIFsxNjEwODAzMTcyLjI1NDU3NiwgMzQ1OSwgMC41MTI0OTY1OTA2MTQzMTg4XSwgWzE2MTA4MDM3NjkuNzQ5NDg1NywgNDIwNSwgMC41NDA5NDk4ODEwNzY4MTI3XSwgWzE2MTA4MDQzNjkuNzA4MDA2NiwgNDk2MywgMC41NTI0NTEzMTI1NDE5NjE3XSwgWzE2MTA4MDQ5NzUuNzg3MjE1NywgNTcxOCwgMC42NzE0NDM4Nzk2MDQzMzk2XSwgWzE2MTA4MDU2MjcuNDMxMDQzMSwgNjM5NywgMC42NzY0OTkzNjY3NjAyNTM5XSwgWzE2MTA4MDYyMjQuNTQ3NjIyNywgNjk5MCwgMC43NDE2MzI2NDAzNjE3ODU5XSwgWzE2MTA4MDY4MjUuNjQxMTU3NiwgNzU4OSwgMC43NTI3MjYzNzYwNTY2NzExXSwgWzE2MTA4MDc0MjguMjIzMjA3MiwgODE3OCwgMC43NTE1MTEwMzczNDk3MDA5XSwgWzE2MTA4MDgwMjkuNzA1MTc0NywgODc2MiwgMC43NTY2OTQ3MzQwOTY1MjcxXSwgWzE2MTA4MDg2MjkuODA1NTk2OCwgOTM0NSwgMC43NzEzMTI2NTQwMTg0MDIxXSwgWzE2MTA4MDkyMjUuNjMyODM5MiwgOTkzOCwgMC43NjM4MDY5MzkxMjUwNjFdLCBbMTYxMDgwOTQ4MC40MTM3NDksIDEwMDAwLCAwLjc2MzU1MDM0MTEyOTMwM11d",
- "ok": true,
- "headers": [
- [
- "content-type",
- "application/json"
- ]
- ],
- "status": 200,
- "status_text": ""
- },
- "http://localhost:6006/data/plugin/scalars/scalars?tag=DetectionBoxes_Precision%2FmAP+%28large%29&run=eval_0&experiment=": {
- "data": "W1sxNjEwODAwOTM3LjI5OTk0OTQsIDk4NSwgMC4wNDM0OTYxNjU0MjQ1ODUzNF0sIFsxNjEwODAxNTMzLjI1NjI2NCwgMTczMiwgMC4wOTEzMDMwNTc5Njg2MTY0OV0sIFsxNjEwODAyNTcwLjA4OTU0NzYsIDI3MDMsIDAuMTE3Mjg0MjkwNDkyNTM0NjRdLCBbMTYxMDgwMzE3Mi4yNTQ1NzYsIDM0NTksIDAuMjIxNTkyNjk0NTIwOTUwMzJdLCBbMTYxMDgwMzc2OS43NDk0ODU3LCA0MjA1LCAwLjI3NTAxODYzMjQxMTk1NjhdLCBbMTYxMDgwNDM2OS43MDgwMDY2LCA0OTYzLCAwLjMzMzE0MjEwMTc2NDY3ODk2XSwgWzE2MTA4MDQ5NzUuNzg3MjE1NywgNTcxOCwgMC40Nzg4MDUzMDM1NzM2MDg0XSwgWzE2MTA4MDU2MjcuNDMxMDQzMSwgNjM5NywgMC41MDE1ODA1MzYzNjU1MDldLCBbMTYxMDgwNjIyNC41NDc2MjI3LCA2OTkwLCAwLjU4NDg5ODk0ODY2OTQzMzZdLCBbMTYxMDgwNjgyNS42NDExNTc2LCA3NTg5LCAwLjYzNzE3MTA4OTY0OTIwMDRdLCBbMTYxMDgwNzQyOC4yMjMyMDcyLCA4MTc4LCAwLjYzOTg3NDkzNTE1MDE0NjVdLCBbMTYxMDgwODAyOS43MDUxNzQ3LCA4NzYyLCAwLjY3MDQ0MzcxMzY2NTAwODVdLCBbMTYxMDgwODYyOS44MDU1OTY4LCA5MzQ1LCAwLjY4MDcxNjI3NjE2ODgyMzJdLCBbMTYxMDgwOTIyNS42MzI4MzkyLCA5OTM4LCAwLjY3Nzc0NzE4OTk5ODYyNjddLCBbMTYxMDgwOTQ4MC40MTM3NDksIDEwMDAwLCAwLjY3ODg0Mzk3NTA2NzEzODddXQ==",
- "ok": true,
- "headers": [
- [
- "content-type",
- "application/json"
- ]
- ],
- "status": 200,
- "status_text": ""
- },
- "http://localhost:6006/font-roboto/d-6IYplOFocCacKzxwXSOJBw1xU1rKptJj_0jans920.woff2": {
- "data": "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",
- "ok": true,
- "headers": [
- [
- "content-type",
- "application/octet-stream"
- ]
- ],
- "status": 200,
- "status_text": ""
- },
- "http://localhost:6006/data/plugin/images/tags": {
- "data": "eyIuIjoge30sICJldmFsXzAiOiB7IkRldGVjdGlvbnNfTGVmdF9Hcm91bmR0cnV0aF9SaWdodC8wLzAiOiB7ImRpc3BsYXlOYW1lIjogIkRldGVjdGlvbnNfTGVmdF9Hcm91bmR0cnV0aF9SaWdodC8wLzAiLCAiZGVzY3JpcHRpb24iOiAiIiwgInNhbXBsZXMiOiAxfSwgIkRldGVjdGlvbnNfTGVmdF9Hcm91bmR0cnV0aF9SaWdodC8xLzAiOiB7ImRpc3BsYXlOYW1lIjogIkRldGVjdGlvbnNfTGVmdF9Hcm91bmR0cnV0aF9SaWdodC8xLzAiLCAiZGVzY3JpcHRpb24iOiAiIiwgInNhbXBsZXMiOiAxfSwgIkRldGVjdGlvbnNfTGVmdF9Hcm91bmR0cnV0aF9SaWdodC8yLzAiOiB7ImRpc3BsYXlOYW1lIjogIkRldGVjdGlvbnNfTGVmdF9Hcm91bmR0cnV0aF9SaWdodC8yLzAiLCAiZGVzY3JpcHRpb24iOiAiIiwgInNhbXBsZXMiOiAxfSwgIkRldGVjdGlvbnNfTGVmdF9Hcm91bmR0cnV0aF9SaWdodC8zLzAiOiB7ImRpc3BsYXlOYW1lIjogIkRldGVjdGlvbnNfTGVmdF9Hcm91bmR0cnV0aF9SaWdodC8zLzAiLCAiZGVzY3JpcHRpb24iOiAiIiwgInNhbXBsZXMiOiAxfSwgIkRldGVjdGlvbnNfTGVmdF9Hcm91bmR0cnV0aF9SaWdodC80LzAiOiB7ImRpc3BsYXlOYW1lIjogIkRldGVjdGlvbnNfTGVmdF9Hcm91bmR0cnV0aF9SaWdodC80LzAiLCAiZGVzY3JpcHRpb24iOiAiIiwgInNhbXBsZXMiOiAxfSwgIkRldGVjdGlvbnNfTGVmdF9Hcm91bmR0cnV0aF9SaWdodC81LzAiOiB7ImRpc3BsYXlOYW1lIjogIkRldGVjdGlvbnNfTGVmdF9Hcm91bmR0cnV0aF9SaWdodC81LzAiLCAiZGVzY3JpcHRpb24iOiAiIiwgInNhbXBsZXMiOiAxfSwgIkRldGVjdGlvbnNfTGVmdF9Hcm91bmR0cnV0aF9SaWdodC82LzAiOiB7ImRpc3BsYXlOYW1lIjogIkRldGVjdGlvbnNfTGVmdF9Hcm91bmR0cnV0aF9SaWdodC82LzAiLCAiZGVzY3JpcHRpb24iOiAiIiwgInNhbXBsZXMiOiAxfSwgIkRldGVjdGlvbnNfTGVmdF9Hcm91bmR0cnV0aF9SaWdodC83LzAiOiB7ImRpc3BsYXlOYW1lIjogIkRldGVjdGlvbnNfTGVmdF9Hcm91bmR0cnV0aF9SaWdodC83LzAiLCAiZGVzY3JpcHRpb24iOiAiIiwgInNhbXBsZXMiOiAxfSwgIkRldGVjdGlvbnNfTGVmdF9Hcm91bmR0cnV0aF9SaWdodC84LzAiOiB7ImRpc3BsYXlOYW1lIjogIkRldGVjdGlvbnNfTGVmdF9Hcm91bmR0cnV0aF9SaWdodC84LzAiLCAiZGVzY3JpcHRpb24iOiAiIiwgInNhbXBsZXMiOiAxfSwgIkRldGVjdGlvbnNfTGVmdF9Hcm91bmR0cnV0aF9SaWdodC85LzAiOiB7ImRpc3BsYXlOYW1lIjogIkRldGVjdGlvbnNfTGVmdF9Hcm91bmR0cnV0aF9SaWdodC85LzAiLCAiZGVzY3JpcHRpb24iOiAiIiwgInNhbXBsZXMiOiAxfX19",
- "ok": true,
- "headers": [
- [
- "content-type",
- "application/json"
- ]
- ],
- "status": 200,
- "status_text": ""
- },
- "http://localhost:6006/data/plugin/images/images?run=eval_0&sample=0&tag=Detections_Left_Groundtruth_Right%2F0%2F0": {
- "data": "W3sid2FsbF90aW1lIjogMTYxMDgwMTUzMy4yNTYyNjQsICJzdGVwIjogMTczMiwgIndpZHRoIjogNTIyOCwgImhlaWdodCI6IDI0NDgsICJxdWVyeSI6ICJydW49ZXZhbF8wJnRhZz1EZXRlY3Rpb25zX0xlZnRfR3JvdW5kdHJ1dGhfUmlnaHQlMkYwJTJGMCZzYW1wbGU9MCZpbmRleD0wIn0sIHsid2FsbF90aW1lIjogMTYxMDgwMjU3MC4wODk1NDc2LCAic3RlcCI6IDI3MDMsICJ3aWR0aCI6IDUyMjgsICJoZWlnaHQiOiAyNDQ4LCAicXVlcnkiOiAicnVuPWV2YWxfMCZ0YWc9RGV0ZWN0aW9uc19MZWZ0X0dyb3VuZHRydXRoX1JpZ2h0JTJGMCUyRjAmc2FtcGxlPTAmaW5kZXg9MSJ9LCB7IndhbGxfdGltZSI6IDE2MTA4MDMxNzIuMjU0NTc2LCAic3RlcCI6IDM0NTksICJ3aWR0aCI6IDUyMjgsICJoZWlnaHQiOiAyNDQ4LCAicXVlcnkiOiAicnVuPWV2YWxfMCZ0YWc9RGV0ZWN0aW9uc19MZWZ0X0dyb3VuZHRydXRoX1JpZ2h0JTJGMCUyRjAmc2FtcGxlPTAmaW5kZXg9MiJ9LCB7IndhbGxfdGltZSI6IDE2MTA4MDM3NjkuNzQ5NDg1NywgInN0ZXAiOiA0MjA1LCAid2lkdGgiOiA1MjI4LCAiaGVpZ2h0IjogMjQ0OCwgInF1ZXJ5IjogInJ1bj1ldmFsXzAmdGFnPURldGVjdGlvbnNfTGVmdF9Hcm91bmR0cnV0aF9SaWdodCUyRjAlMkYwJnNhbXBsZT0wJmluZGV4PTMifSwgeyJ3YWxsX3RpbWUiOiAxNjEwODA2MjI0LjU0NzYyMjcsICJzdGVwIjogNjk5MCwgIndpZHRoIjogNTIyOCwgImhlaWdodCI6IDI0NDgsICJxdWVyeSI6ICJydW49ZXZhbF8wJnRhZz1EZXRlY3Rpb25zX0xlZnRfR3JvdW5kdHJ1dGhfUmlnaHQlMkYwJTJGMCZzYW1wbGU9MCZpbmRleD00In0sIHsid2FsbF90aW1lIjogMTYxMDgwNjgyNS42NDExNTc2LCAic3RlcCI6IDc1ODksICJ3aWR0aCI6IDUyMjgsICJoZWlnaHQiOiAyNDQ4LCAicXVlcnkiOiAicnVuPWV2YWxfMCZ0YWc9RGV0ZWN0aW9uc19MZWZ0X0dyb3VuZHRydXRoX1JpZ2h0JTJGMCUyRjAmc2FtcGxlPTAmaW5kZXg9NSJ9LCB7IndhbGxfdGltZSI6IDE2MTA4MDc0MjguMjIzMjA3MiwgInN0ZXAiOiA4MTc4LCAid2lkdGgiOiA1MjI4LCAiaGVpZ2h0IjogMjQ0OCwgInF1ZXJ5IjogInJ1bj1ldmFsXzAmdGFnPURldGVjdGlvbnNfTGVmdF9Hcm91bmR0cnV0aF9SaWdodCUyRjAlMkYwJnNhbXBsZT0wJmluZGV4PTYifSwgeyJ3YWxsX3RpbWUiOiAxNjEwODA4MDI5LjcwNTE3NDcsICJzdGVwIjogODc2MiwgIndpZHRoIjogNTIyOCwgImhlaWdodCI6IDI0NDgsICJxdWVyeSI6ICJydW49ZXZhbF8wJnRhZz1EZXRlY3Rpb25zX0xlZnRfR3JvdW5kdHJ1dGhfUmlnaHQlMkYwJTJGMCZzYW1wbGU9MCZpbmRleD03In0sIHsid2FsbF90aW1lIjogMTYxMDgwOTIyNS42MzI4MzkyLCAic3RlcCI6IDk5MzgsICJ3aWR0aCI6IDUyMjgsICJoZWlnaHQiOiAyNDQ4LCAicXVlcnkiOiAicnVuPWV2YWxfMCZ0YWc9RGV0ZWN0aW9uc19MZWZ0X0dyb3VuZHRydXRoX1JpZ2h0JTJGMCUyRjAmc2FtcGxlPTAmaW5kZXg9OCJ9LCB7IndhbGxfdGltZSI6IDE2MTA4MDk0ODAuNDEzNzQ5LCAic3RlcCI6IDEwMDAwLCAid2lkdGgiOiA1MjI4LCAiaGVpZ2h0IjogMjQ0OCwgInF1ZXJ5IjogInJ1bj1ldmFsXzAmdGFnPURldGVjdGlvbnNfTGVmdF9Hcm91bmR0cnV0aF9SaWdodCUyRjAlMkYwJnNhbXBsZT0wJmluZGV4PTkifV0=",
- "ok": true,
- "headers": [
- [
- "content-type",
- "application/json"
- ]
- ],
- "status": 200,
- "status_text": ""
- },
- "http://localhost:6006/data/plugin/images/images?run=eval_0&sample=0&tag=Detections_Left_Groundtruth_Right%2F6%2F0": {
- "data": "W3sid2FsbF90aW1lIjogMTYxMDgwMTUzMy4yNTYyNjQsICJzdGVwIjogMTczMiwgIndpZHRoIjogNTgwMCwgImhlaWdodCI6IDE5NzIsICJxdWVyeSI6ICJydW49ZXZhbF8wJnRhZz1EZXRlY3Rpb25zX0xlZnRfR3JvdW5kdHJ1dGhfUmlnaHQlMkY2JTJGMCZzYW1wbGU9MCZpbmRleD0wIn0sIHsid2FsbF90aW1lIjogMTYxMDgwMjU3MC4wODk1NDc2LCAic3RlcCI6IDI3MDMsICJ3aWR0aCI6IDU4MDAsICJoZWlnaHQiOiAxOTcyLCAicXVlcnkiOiAicnVuPWV2YWxfMCZ0YWc9RGV0ZWN0aW9uc19MZWZ0X0dyb3VuZHRydXRoX1JpZ2h0JTJGNiUyRjAmc2FtcGxlPTAmaW5kZXg9MSJ9LCB7IndhbGxfdGltZSI6IDE2MTA4MDMxNzIuMjU0NTc2LCAic3RlcCI6IDM0NTksICJ3aWR0aCI6IDU4MDAsICJoZWlnaHQiOiAxOTcyLCAicXVlcnkiOiAicnVuPWV2YWxfMCZ0YWc9RGV0ZWN0aW9uc19MZWZ0X0dyb3VuZHRydXRoX1JpZ2h0JTJGNiUyRjAmc2FtcGxlPTAmaW5kZXg9MiJ9LCB7IndhbGxfdGltZSI6IDE2MTA4MDM3NjkuNzQ5NDg1NywgInN0ZXAiOiA0MjA1LCAid2lkdGgiOiA1ODAwLCAiaGVpZ2h0IjogMTk3MiwgInF1ZXJ5IjogInJ1bj1ldmFsXzAmdGFnPURldGVjdGlvbnNfTGVmdF9Hcm91bmR0cnV0aF9SaWdodCUyRjYlMkYwJnNhbXBsZT0wJmluZGV4PTMifSwgeyJ3YWxsX3RpbWUiOiAxNjEwODA2MjI0LjU0NzYyMjcsICJzdGVwIjogNjk5MCwgIndpZHRoIjogNTgwMCwgImhlaWdodCI6IDE5NzIsICJxdWVyeSI6ICJydW49ZXZhbF8wJnRhZz1EZXRlY3Rpb25zX0xlZnRfR3JvdW5kdHJ1dGhfUmlnaHQlMkY2JTJGMCZzYW1wbGU9MCZpbmRleD00In0sIHsid2FsbF90aW1lIjogMTYxMDgwNjgyNS42NDExNTc2LCAic3RlcCI6IDc1ODksICJ3aWR0aCI6IDU4MDAsICJoZWlnaHQiOiAxOTcyLCAicXVlcnkiOiAicnVuPWV2YWxfMCZ0YWc9RGV0ZWN0aW9uc19MZWZ0X0dyb3VuZHRydXRoX1JpZ2h0JTJGNiUyRjAmc2FtcGxlPTAmaW5kZXg9NSJ9LCB7IndhbGxfdGltZSI6IDE2MTA4MDc0MjguMjIzMjA3MiwgInN0ZXAiOiA4MTc4LCAid2lkdGgiOiA1ODAwLCAiaGVpZ2h0IjogMTk3MiwgInF1ZXJ5IjogInJ1bj1ldmFsXzAmdGFnPURldGVjdGlvbnNfTGVmdF9Hcm91bmR0cnV0aF9SaWdodCUyRjYlMkYwJnNhbXBsZT0wJmluZGV4PTYifSwgeyJ3YWxsX3RpbWUiOiAxNjEwODA4MDI5LjcwNTE3NDcsICJzdGVwIjogODc2MiwgIndpZHRoIjogNTgwMCwgImhlaWdodCI6IDE5NzIsICJxdWVyeSI6ICJydW49ZXZhbF8wJnRhZz1EZXRlY3Rpb25zX0xlZnRfR3JvdW5kdHJ1dGhfUmlnaHQlMkY2JTJGMCZzYW1wbGU9MCZpbmRleD03In0sIHsid2FsbF90aW1lIjogMTYxMDgwOTIyNS42MzI4MzkyLCAic3RlcCI6IDk5MzgsICJ3aWR0aCI6IDU4MDAsICJoZWlnaHQiOiAxOTcyLCAicXVlcnkiOiAicnVuPWV2YWxfMCZ0YWc9RGV0ZWN0aW9uc19MZWZ0X0dyb3VuZHRydXRoX1JpZ2h0JTJGNiUyRjAmc2FtcGxlPTAmaW5kZXg9OCJ9LCB7IndhbGxfdGltZSI6IDE2MTA4MDk0ODAuNDEzNzQ5LCAic3RlcCI6IDEwMDAwLCAid2lkdGgiOiA1ODAwLCAiaGVpZ2h0IjogMTk3MiwgInF1ZXJ5IjogInJ1bj1ldmFsXzAmdGFnPURldGVjdGlvbnNfTGVmdF9Hcm91bmR0cnV0aF9SaWdodCUyRjYlMkYwJnNhbXBsZT0wJmluZGV4PTkifV0=",
- "ok": true,
- "headers": [
- [
- "content-type",
- "application/json"
- ]
- ],
- "status": 200,
- "status_text": ""
- },
- "http://localhost:6006/data/plugin/images/images?run=eval_0&sample=0&tag=Detections_Left_Groundtruth_Right%2F4%2F0": {
- "data": "W3sid2FsbF90aW1lIjogMTYxMDgwMTUzMy4yNTYyNjQsICJzdGVwIjogMTczMiwgIndpZHRoIjogNjUyOCwgImhlaWdodCI6IDIyMDMsICJxdWVyeSI6ICJydW49ZXZhbF8wJnRhZz1EZXRlY3Rpb25zX0xlZnRfR3JvdW5kdHJ1dGhfUmlnaHQlMkY0JTJGMCZzYW1wbGU9MCZpbmRleD0wIn0sIHsid2FsbF90aW1lIjogMTYxMDgwMjU3MC4wODk1NDc2LCAic3RlcCI6IDI3MDMsICJ3aWR0aCI6IDY1MjgsICJoZWlnaHQiOiAyMjAzLCAicXVlcnkiOiAicnVuPWV2YWxfMCZ0YWc9RGV0ZWN0aW9uc19MZWZ0X0dyb3VuZHRydXRoX1JpZ2h0JTJGNCUyRjAmc2FtcGxlPTAmaW5kZXg9MSJ9LCB7IndhbGxfdGltZSI6IDE2MTA4MDMxNzIuMjU0NTc2LCAic3RlcCI6IDM0NTksICJ3aWR0aCI6IDY1MjgsICJoZWlnaHQiOiAyMjAzLCAicXVlcnkiOiAicnVuPWV2YWxfMCZ0YWc9RGV0ZWN0aW9uc19MZWZ0X0dyb3VuZHRydXRoX1JpZ2h0JTJGNCUyRjAmc2FtcGxlPTAmaW5kZXg9MiJ9LCB7IndhbGxfdGltZSI6IDE2MTA4MDM3NjkuNzQ5NDg1NywgInN0ZXAiOiA0MjA1LCAid2lkdGgiOiA2NTI4LCAiaGVpZ2h0IjogMjIwMywgInF1ZXJ5IjogInJ1bj1ldmFsXzAmdGFnPURldGVjdGlvbnNfTGVmdF9Hcm91bmR0cnV0aF9SaWdodCUyRjQlMkYwJnNhbXBsZT0wJmluZGV4PTMifSwgeyJ3YWxsX3RpbWUiOiAxNjEwODA2MjI0LjU0NzYyMjcsICJzdGVwIjogNjk5MCwgIndpZHRoIjogNjUyOCwgImhlaWdodCI6IDIyMDMsICJxdWVyeSI6ICJydW49ZXZhbF8wJnRhZz1EZXRlY3Rpb25zX0xlZnRfR3JvdW5kdHJ1dGhfUmlnaHQlMkY0JTJGMCZzYW1wbGU9MCZpbmRleD00In0sIHsid2FsbF90aW1lIjogMTYxMDgwNjgyNS42NDExNTc2LCAic3RlcCI6IDc1ODksICJ3aWR0aCI6IDY1MjgsICJoZWlnaHQiOiAyMjAzLCAicXVlcnkiOiAicnVuPWV2YWxfMCZ0YWc9RGV0ZWN0aW9uc19MZWZ0X0dyb3VuZHRydXRoX1JpZ2h0JTJGNCUyRjAmc2FtcGxlPTAmaW5kZXg9NSJ9LCB7IndhbGxfdGltZSI6IDE2MTA4MDc0MjguMjIzMjA3MiwgInN0ZXAiOiA4MTc4LCAid2lkdGgiOiA2NTI4LCAiaGVpZ2h0IjogMjIwMywgInF1ZXJ5IjogInJ1bj1ldmFsXzAmdGFnPURldGVjdGlvbnNfTGVmdF9Hcm91bmR0cnV0aF9SaWdodCUyRjQlMkYwJnNhbXBsZT0wJmluZGV4PTYifSwgeyJ3YWxsX3RpbWUiOiAxNjEwODA4MDI5LjcwNTE3NDcsICJzdGVwIjogODc2MiwgIndpZHRoIjogNjUyOCwgImhlaWdodCI6IDIyMDMsICJxdWVyeSI6ICJydW49ZXZhbF8wJnRhZz1EZXRlY3Rpb25zX0xlZnRfR3JvdW5kdHJ1dGhfUmlnaHQlMkY0JTJGMCZzYW1wbGU9MCZpbmRleD03In0sIHsid2FsbF90aW1lIjogMTYxMDgwOTIyNS42MzI4MzkyLCAic3RlcCI6IDk5MzgsICJ3aWR0aCI6IDY1MjgsICJoZWlnaHQiOiAyMjAzLCAicXVlcnkiOiAicnVuPWV2YWxfMCZ0YWc9RGV0ZWN0aW9uc19MZWZ0X0dyb3VuZHRydXRoX1JpZ2h0JTJGNCUyRjAmc2FtcGxlPTAmaW5kZXg9OCJ9LCB7IndhbGxfdGltZSI6IDE2MTA4MDk0ODAuNDEzNzQ5LCAic3RlcCI6IDEwMDAwLCAid2lkdGgiOiA2NTI4LCAiaGVpZ2h0IjogMjIwMywgInF1ZXJ5IjogInJ1bj1ldmFsXzAmdGFnPURldGVjdGlvbnNfTGVmdF9Hcm91bmR0cnV0aF9SaWdodCUyRjQlMkYwJnNhbXBsZT0wJmluZGV4PTkifV0=",
- "ok": true,
- "headers": [
- [
- "content-type",
- "application/json"
- ]
- ],
- "status": 200,
- "status_text": ""
- },
- "http://localhost:6006/data/plugin/images/images?run=eval_0&sample=0&tag=Detections_Left_Groundtruth_Right%2F1%2F0": {
- "data": "W3sid2FsbF90aW1lIjogMTYxMDgwMTUzMy4yNTYyNjQsICJzdGVwIjogMTczMiwgIndpZHRoIjogNjUyOCwgImhlaWdodCI6IDI0NDgsICJxdWVyeSI6ICJydW49ZXZhbF8wJnRhZz1EZXRlY3Rpb25zX0xlZnRfR3JvdW5kdHJ1dGhfUmlnaHQlMkYxJTJGMCZzYW1wbGU9MCZpbmRleD0wIn0sIHsid2FsbF90aW1lIjogMTYxMDgwMjU3MC4wODk1NDc2LCAic3RlcCI6IDI3MDMsICJ3aWR0aCI6IDY1MjgsICJoZWlnaHQiOiAyNDQ4LCAicXVlcnkiOiAicnVuPWV2YWxfMCZ0YWc9RGV0ZWN0aW9uc19MZWZ0X0dyb3VuZHRydXRoX1JpZ2h0JTJGMSUyRjAmc2FtcGxlPTAmaW5kZXg9MSJ9LCB7IndhbGxfdGltZSI6IDE2MTA4MDMxNzIuMjU0NTc2LCAic3RlcCI6IDM0NTksICJ3aWR0aCI6IDY1MjgsICJoZWlnaHQiOiAyNDQ4LCAicXVlcnkiOiAicnVuPWV2YWxfMCZ0YWc9RGV0ZWN0aW9uc19MZWZ0X0dyb3VuZHRydXRoX1JpZ2h0JTJGMSUyRjAmc2FtcGxlPTAmaW5kZXg9MiJ9LCB7IndhbGxfdGltZSI6IDE2MTA4MDM3NjkuNzQ5NDg1NywgInN0ZXAiOiA0MjA1LCAid2lkdGgiOiA2NTI4LCAiaGVpZ2h0IjogMjQ0OCwgInF1ZXJ5IjogInJ1bj1ldmFsXzAmdGFnPURldGVjdGlvbnNfTGVmdF9Hcm91bmR0cnV0aF9SaWdodCUyRjElMkYwJnNhbXBsZT0wJmluZGV4PTMifSwgeyJ3YWxsX3RpbWUiOiAxNjEwODA2MjI0LjU0NzYyMjcsICJzdGVwIjogNjk5MCwgIndpZHRoIjogNjUyOCwgImhlaWdodCI6IDI0NDgsICJxdWVyeSI6ICJydW49ZXZhbF8wJnRhZz1EZXRlY3Rpb25zX0xlZnRfR3JvdW5kdHJ1dGhfUmlnaHQlMkYxJTJGMCZzYW1wbGU9MCZpbmRleD00In0sIHsid2FsbF90aW1lIjogMTYxMDgwNjgyNS42NDExNTc2LCAic3RlcCI6IDc1ODksICJ3aWR0aCI6IDY1MjgsICJoZWlnaHQiOiAyNDQ4LCAicXVlcnkiOiAicnVuPWV2YWxfMCZ0YWc9RGV0ZWN0aW9uc19MZWZ0X0dyb3VuZHRydXRoX1JpZ2h0JTJGMSUyRjAmc2FtcGxlPTAmaW5kZXg9NSJ9LCB7IndhbGxfdGltZSI6IDE2MTA4MDc0MjguMjIzMjA3MiwgInN0ZXAiOiA4MTc4LCAid2lkdGgiOiA2NTI4LCAiaGVpZ2h0IjogMjQ0OCwgInF1ZXJ5IjogInJ1bj1ldmFsXzAmdGFnPURldGVjdGlvbnNfTGVmdF9Hcm91bmR0cnV0aF9SaWdodCUyRjElMkYwJnNhbXBsZT0wJmluZGV4PTYifSwgeyJ3YWxsX3RpbWUiOiAxNjEwODA4MDI5LjcwNTE3NDcsICJzdGVwIjogODc2MiwgIndpZHRoIjogNjUyOCwgImhlaWdodCI6IDI0NDgsICJxdWVyeSI6ICJydW49ZXZhbF8wJnRhZz1EZXRlY3Rpb25zX0xlZnRfR3JvdW5kdHJ1dGhfUmlnaHQlMkYxJTJGMCZzYW1wbGU9MCZpbmRleD03In0sIHsid2FsbF90aW1lIjogMTYxMDgwOTIyNS42MzI4MzkyLCAic3RlcCI6IDk5MzgsICJ3aWR0aCI6IDY1MjgsICJoZWlnaHQiOiAyNDQ4LCAicXVlcnkiOiAicnVuPWV2YWxfMCZ0YWc9RGV0ZWN0aW9uc19MZWZ0X0dyb3VuZHRydXRoX1JpZ2h0JTJGMSUyRjAmc2FtcGxlPTAmaW5kZXg9OCJ9LCB7IndhbGxfdGltZSI6IDE2MTA4MDk0ODAuNDEzNzQ5LCAic3RlcCI6IDEwMDAwLCAid2lkdGgiOiA2NTI4LCAiaGVpZ2h0IjogMjQ0OCwgInF1ZXJ5IjogInJ1bj1ldmFsXzAmdGFnPURldGVjdGlvbnNfTGVmdF9Hcm91bmR0cnV0aF9SaWdodCUyRjElMkYwJnNhbXBsZT0wJmluZGV4PTkifV0=",
- "ok": true,
- "headers": [
- [
- "content-type",
- "application/json"
- ]
- ],
- "status": 200,
- "status_text": ""
- },
- "http://localhost:6006/data/plugin/images/images?run=eval_0&sample=0&tag=Detections_Left_Groundtruth_Right%2F5%2F0": {
- "data": "W3sid2FsbF90aW1lIjogMTYxMDgwMTUzMy4yNTYyNjQsICJzdGVwIjogMTczMiwgIndpZHRoIjogNjUyOCwgImhlaWdodCI6IDI0NDgsICJxdWVyeSI6ICJydW49ZXZhbF8wJnRhZz1EZXRlY3Rpb25zX0xlZnRfR3JvdW5kdHJ1dGhfUmlnaHQlMkY1JTJGMCZzYW1wbGU9MCZpbmRleD0wIn0sIHsid2FsbF90aW1lIjogMTYxMDgwMjU3MC4wODk1NDc2LCAic3RlcCI6IDI3MDMsICJ3aWR0aCI6IDY1MjgsICJoZWlnaHQiOiAyNDQ4LCAicXVlcnkiOiAicnVuPWV2YWxfMCZ0YWc9RGV0ZWN0aW9uc19MZWZ0X0dyb3VuZHRydXRoX1JpZ2h0JTJGNSUyRjAmc2FtcGxlPTAmaW5kZXg9MSJ9LCB7IndhbGxfdGltZSI6IDE2MTA4MDMxNzIuMjU0NTc2LCAic3RlcCI6IDM0NTksICJ3aWR0aCI6IDY1MjgsICJoZWlnaHQiOiAyNDQ4LCAicXVlcnkiOiAicnVuPWV2YWxfMCZ0YWc9RGV0ZWN0aW9uc19MZWZ0X0dyb3VuZHRydXRoX1JpZ2h0JTJGNSUyRjAmc2FtcGxlPTAmaW5kZXg9MiJ9LCB7IndhbGxfdGltZSI6IDE2MTA4MDM3NjkuNzQ5NDg1NywgInN0ZXAiOiA0MjA1LCAid2lkdGgiOiA2NTI4LCAiaGVpZ2h0IjogMjQ0OCwgInF1ZXJ5IjogInJ1bj1ldmFsXzAmdGFnPURldGVjdGlvbnNfTGVmdF9Hcm91bmR0cnV0aF9SaWdodCUyRjUlMkYwJnNhbXBsZT0wJmluZGV4PTMifSwgeyJ3YWxsX3RpbWUiOiAxNjEwODA2MjI0LjU0NzYyMjcsICJzdGVwIjogNjk5MCwgIndpZHRoIjogNjUyOCwgImhlaWdodCI6IDI0NDgsICJxdWVyeSI6ICJydW49ZXZhbF8wJnRhZz1EZXRlY3Rpb25zX0xlZnRfR3JvdW5kdHJ1dGhfUmlnaHQlMkY1JTJGMCZzYW1wbGU9MCZpbmRleD00In0sIHsid2FsbF90aW1lIjogMTYxMDgwNjgyNS42NDExNTc2LCAic3RlcCI6IDc1ODksICJ3aWR0aCI6IDY1MjgsICJoZWlnaHQiOiAyNDQ4LCAicXVlcnkiOiAicnVuPWV2YWxfMCZ0YWc9RGV0ZWN0aW9uc19MZWZ0X0dyb3VuZHRydXRoX1JpZ2h0JTJGNSUyRjAmc2FtcGxlPTAmaW5kZXg9NSJ9LCB7IndhbGxfdGltZSI6IDE2MTA4MDc0MjguMjIzMjA3MiwgInN0ZXAiOiA4MTc4LCAid2lkdGgiOiA2NTI4LCAiaGVpZ2h0IjogMjQ0OCwgInF1ZXJ5IjogInJ1bj1ldmFsXzAmdGFnPURldGVjdGlvbnNfTGVmdF9Hcm91bmR0cnV0aF9SaWdodCUyRjUlMkYwJnNhbXBsZT0wJmluZGV4PTYifSwgeyJ3YWxsX3RpbWUiOiAxNjEwODA4MDI5LjcwNTE3NDcsICJzdGVwIjogODc2MiwgIndpZHRoIjogNjUyOCwgImhlaWdodCI6IDI0NDgsICJxdWVyeSI6ICJydW49ZXZhbF8wJnRhZz1EZXRlY3Rpb25zX0xlZnRfR3JvdW5kdHJ1dGhfUmlnaHQlMkY1JTJGMCZzYW1wbGU9MCZpbmRleD03In0sIHsid2FsbF90aW1lIjogMTYxMDgwOTIyNS42MzI4MzkyLCAic3RlcCI6IDk5MzgsICJ3aWR0aCI6IDY1MjgsICJoZWlnaHQiOiAyNDQ4LCAicXVlcnkiOiAicnVuPWV2YWxfMCZ0YWc9RGV0ZWN0aW9uc19MZWZ0X0dyb3VuZHRydXRoX1JpZ2h0JTJGNSUyRjAmc2FtcGxlPTAmaW5kZXg9OCJ9LCB7IndhbGxfdGltZSI6IDE2MTA4MDk0ODAuNDEzNzQ5LCAic3RlcCI6IDEwMDAwLCAid2lkdGgiOiA2NTI4LCAiaGVpZ2h0IjogMjQ0OCwgInF1ZXJ5IjogInJ1bj1ldmFsXzAmdGFnPURldGVjdGlvbnNfTGVmdF9Hcm91bmR0cnV0aF9SaWdodCUyRjUlMkYwJnNhbXBsZT0wJmluZGV4PTkifV0=",
- "ok": true,
- "headers": [
- [
- "content-type",
- "application/json"
- ]
- ],
- "status": 200,
- "status_text": ""
- },
- "http://localhost:6006/data/plugin/images/images?run=eval_0&sample=0&tag=Detections_Left_Groundtruth_Right%2F8%2F0": {
- "data": "W3sid2FsbF90aW1lIjogMTYxMDgwMTUzMy4yNTYyNjQsICJzdGVwIjogMTczMiwgIndpZHRoIjogNjUyOCwgImhlaWdodCI6IDIxOTgsICJxdWVyeSI6ICJydW49ZXZhbF8wJnRhZz1EZXRlY3Rpb25zX0xlZnRfR3JvdW5kdHJ1dGhfUmlnaHQlMkY4JTJGMCZzYW1wbGU9MCZpbmRleD0wIn0sIHsid2FsbF90aW1lIjogMTYxMDgwMjU3MC4wODk1NDc2LCAic3RlcCI6IDI3MDMsICJ3aWR0aCI6IDY1MjgsICJoZWlnaHQiOiAyMTk4LCAicXVlcnkiOiAicnVuPWV2YWxfMCZ0YWc9RGV0ZWN0aW9uc19MZWZ0X0dyb3VuZHRydXRoX1JpZ2h0JTJGOCUyRjAmc2FtcGxlPTAmaW5kZXg9MSJ9LCB7IndhbGxfdGltZSI6IDE2MTA4MDMxNzIuMjU0NTc2LCAic3RlcCI6IDM0NTksICJ3aWR0aCI6IDY1MjgsICJoZWlnaHQiOiAyMTk4LCAicXVlcnkiOiAicnVuPWV2YWxfMCZ0YWc9RGV0ZWN0aW9uc19MZWZ0X0dyb3VuZHRydXRoX1JpZ2h0JTJGOCUyRjAmc2FtcGxlPTAmaW5kZXg9MiJ9LCB7IndhbGxfdGltZSI6IDE2MTA4MDM3NjkuNzQ5NDg1NywgInN0ZXAiOiA0MjA1LCAid2lkdGgiOiA2NTI4LCAiaGVpZ2h0IjogMjE5OCwgInF1ZXJ5IjogInJ1bj1ldmFsXzAmdGFnPURldGVjdGlvbnNfTGVmdF9Hcm91bmR0cnV0aF9SaWdodCUyRjglMkYwJnNhbXBsZT0wJmluZGV4PTMifSwgeyJ3YWxsX3RpbWUiOiAxNjEwODA2MjI0LjU0NzYyMjcsICJzdGVwIjogNjk5MCwgIndpZHRoIjogNjUyOCwgImhlaWdodCI6IDIxOTgsICJxdWVyeSI6ICJydW49ZXZhbF8wJnRhZz1EZXRlY3Rpb25zX0xlZnRfR3JvdW5kdHJ1dGhfUmlnaHQlMkY4JTJGMCZzYW1wbGU9MCZpbmRleD00In0sIHsid2FsbF90aW1lIjogMTYxMDgwNjgyNS42NDExNTc2LCAic3RlcCI6IDc1ODksICJ3aWR0aCI6IDY1MjgsICJoZWlnaHQiOiAyMTk4LCAicXVlcnkiOiAicnVuPWV2YWxfMCZ0YWc9RGV0ZWN0aW9uc19MZWZ0X0dyb3VuZHRydXRoX1JpZ2h0JTJGOCUyRjAmc2FtcGxlPTAmaW5kZXg9NSJ9LCB7IndhbGxfdGltZSI6IDE2MTA4MDc0MjguMjIzMjA3MiwgInN0ZXAiOiA4MTc4LCAid2lkdGgiOiA2NTI4LCAiaGVpZ2h0IjogMjE5OCwgInF1ZXJ5IjogInJ1bj1ldmFsXzAmdGFnPURldGVjdGlvbnNfTGVmdF9Hcm91bmR0cnV0aF9SaWdodCUyRjglMkYwJnNhbXBsZT0wJmluZGV4PTYifSwgeyJ3YWxsX3RpbWUiOiAxNjEwODA4MDI5LjcwNTE3NDcsICJzdGVwIjogODc2MiwgIndpZHRoIjogNjUyOCwgImhlaWdodCI6IDIxOTgsICJxdWVyeSI6ICJydW49ZXZhbF8wJnRhZz1EZXRlY3Rpb25zX0xlZnRfR3JvdW5kdHJ1dGhfUmlnaHQlMkY4JTJGMCZzYW1wbGU9MCZpbmRleD03In0sIHsid2FsbF90aW1lIjogMTYxMDgwOTIyNS42MzI4MzkyLCAic3RlcCI6IDk5MzgsICJ3aWR0aCI6IDY1MjgsICJoZWlnaHQiOiAyMTk4LCAicXVlcnkiOiAicnVuPWV2YWxfMCZ0YWc9RGV0ZWN0aW9uc19MZWZ0X0dyb3VuZHRydXRoX1JpZ2h0JTJGOCUyRjAmc2FtcGxlPTAmaW5kZXg9OCJ9LCB7IndhbGxfdGltZSI6IDE2MTA4MDk0ODAuNDEzNzQ5LCAic3RlcCI6IDEwMDAwLCAid2lkdGgiOiA2NTI4LCAiaGVpZ2h0IjogMjE5OCwgInF1ZXJ5IjogInJ1bj1ldmFsXzAmdGFnPURldGVjdGlvbnNfTGVmdF9Hcm91bmR0cnV0aF9SaWdodCUyRjglMkYwJnNhbXBsZT0wJmluZGV4PTkifV0=",
- "ok": true,
- "headers": [
- [
- "content-type",
- "application/json"
- ]
- ],
- "status": 200,
- "status_text": ""
- },
- "http://localhost:6006/data/plugin/images/images?run=eval_0&sample=0&tag=Detections_Left_Groundtruth_Right%2F7%2F0": {
- "data": "W3sid2FsbF90aW1lIjogMTYxMDgwMTUzMy4yNTYyNjQsICJzdGVwIjogMTczMiwgIndpZHRoIjogNjUyOCwgImhlaWdodCI6IDE3ODUsICJxdWVyeSI6ICJydW49ZXZhbF8wJnRhZz1EZXRlY3Rpb25zX0xlZnRfR3JvdW5kdHJ1dGhfUmlnaHQlMkY3JTJGMCZzYW1wbGU9MCZpbmRleD0wIn0sIHsid2FsbF90aW1lIjogMTYxMDgwMjU3MC4wODk1NDc2LCAic3RlcCI6IDI3MDMsICJ3aWR0aCI6IDY1MjgsICJoZWlnaHQiOiAxNzg1LCAicXVlcnkiOiAicnVuPWV2YWxfMCZ0YWc9RGV0ZWN0aW9uc19MZWZ0X0dyb3VuZHRydXRoX1JpZ2h0JTJGNyUyRjAmc2FtcGxlPTAmaW5kZXg9MSJ9LCB7IndhbGxfdGltZSI6IDE2MTA4MDMxNzIuMjU0NTc2LCAic3RlcCI6IDM0NTksICJ3aWR0aCI6IDY1MjgsICJoZWlnaHQiOiAxNzg1LCAicXVlcnkiOiAicnVuPWV2YWxfMCZ0YWc9RGV0ZWN0aW9uc19MZWZ0X0dyb3VuZHRydXRoX1JpZ2h0JTJGNyUyRjAmc2FtcGxlPTAmaW5kZXg9MiJ9LCB7IndhbGxfdGltZSI6IDE2MTA4MDM3NjkuNzQ5NDg1NywgInN0ZXAiOiA0MjA1LCAid2lkdGgiOiA2NTI4LCAiaGVpZ2h0IjogMTc4NSwgInF1ZXJ5IjogInJ1bj1ldmFsXzAmdGFnPURldGVjdGlvbnNfTGVmdF9Hcm91bmR0cnV0aF9SaWdodCUyRjclMkYwJnNhbXBsZT0wJmluZGV4PTMifSwgeyJ3YWxsX3RpbWUiOiAxNjEwODA2MjI0LjU0NzYyMjcsICJzdGVwIjogNjk5MCwgIndpZHRoIjogNjUyOCwgImhlaWdodCI6IDE3ODUsICJxdWVyeSI6ICJydW49ZXZhbF8wJnRhZz1EZXRlY3Rpb25zX0xlZnRfR3JvdW5kdHJ1dGhfUmlnaHQlMkY3JTJGMCZzYW1wbGU9MCZpbmRleD00In0sIHsid2FsbF90aW1lIjogMTYxMDgwNjgyNS42NDExNTc2LCAic3RlcCI6IDc1ODksICJ3aWR0aCI6IDY1MjgsICJoZWlnaHQiOiAxNzg1LCAicXVlcnkiOiAicnVuPWV2YWxfMCZ0YWc9RGV0ZWN0aW9uc19MZWZ0X0dyb3VuZHRydXRoX1JpZ2h0JTJGNyUyRjAmc2FtcGxlPTAmaW5kZXg9NSJ9LCB7IndhbGxfdGltZSI6IDE2MTA4MDc0MjguMjIzMjA3MiwgInN0ZXAiOiA4MTc4LCAid2lkdGgiOiA2NTI4LCAiaGVpZ2h0IjogMTc4NSwgInF1ZXJ5IjogInJ1bj1ldmFsXzAmdGFnPURldGVjdGlvbnNfTGVmdF9Hcm91bmR0cnV0aF9SaWdodCUyRjclMkYwJnNhbXBsZT0wJmluZGV4PTYifSwgeyJ3YWxsX3RpbWUiOiAxNjEwODA4MDI5LjcwNTE3NDcsICJzdGVwIjogODc2MiwgIndpZHRoIjogNjUyOCwgImhlaWdodCI6IDE3ODUsICJxdWVyeSI6ICJydW49ZXZhbF8wJnRhZz1EZXRlY3Rpb25zX0xlZnRfR3JvdW5kdHJ1dGhfUmlnaHQlMkY3JTJGMCZzYW1wbGU9MCZpbmRleD03In0sIHsid2FsbF90aW1lIjogMTYxMDgwOTIyNS42MzI4MzkyLCAic3RlcCI6IDk5MzgsICJ3aWR0aCI6IDY1MjgsICJoZWlnaHQiOiAxNzg1LCAicXVlcnkiOiAicnVuPWV2YWxfMCZ0YWc9RGV0ZWN0aW9uc19MZWZ0X0dyb3VuZHRydXRoX1JpZ2h0JTJGNyUyRjAmc2FtcGxlPTAmaW5kZXg9OCJ9LCB7IndhbGxfdGltZSI6IDE2MTA4MDk0ODAuNDEzNzQ5LCAic3RlcCI6IDEwMDAwLCAid2lkdGgiOiA2NTI4LCAiaGVpZ2h0IjogMTc4NSwgInF1ZXJ5IjogInJ1bj1ldmFsXzAmdGFnPURldGVjdGlvbnNfTGVmdF9Hcm91bmR0cnV0aF9SaWdodCUyRjclMkYwJnNhbXBsZT0wJmluZGV4PTkifV0=",
- "ok": true,
- "headers": [
- [
- "content-type",
- "application/json"
- ]
- ],
- "status": 200,
- "status_text": ""
- },
- "http://localhost:6006/data/plugin/images/images?run=eval_0&sample=0&tag=Detections_Left_Groundtruth_Right%2F3%2F0": {
- "data": "W3sid2FsbF90aW1lIjogMTYxMDgwMTUzMy4yNTYyNjQsICJzdGVwIjogMTczMiwgIndpZHRoIjogNjUyOCwgImhlaWdodCI6IDE4NTEsICJxdWVyeSI6ICJydW49ZXZhbF8wJnRhZz1EZXRlY3Rpb25zX0xlZnRfR3JvdW5kdHJ1dGhfUmlnaHQlMkYzJTJGMCZzYW1wbGU9MCZpbmRleD0wIn0sIHsid2FsbF90aW1lIjogMTYxMDgwMjU3MC4wODk1NDc2LCAic3RlcCI6IDI3MDMsICJ3aWR0aCI6IDY1MjgsICJoZWlnaHQiOiAxODUxLCAicXVlcnkiOiAicnVuPWV2YWxfMCZ0YWc9RGV0ZWN0aW9uc19MZWZ0X0dyb3VuZHRydXRoX1JpZ2h0JTJGMyUyRjAmc2FtcGxlPTAmaW5kZXg9MSJ9LCB7IndhbGxfdGltZSI6IDE2MTA4MDMxNzIuMjU0NTc2LCAic3RlcCI6IDM0NTksICJ3aWR0aCI6IDY1MjgsICJoZWlnaHQiOiAxODUxLCAicXVlcnkiOiAicnVuPWV2YWxfMCZ0YWc9RGV0ZWN0aW9uc19MZWZ0X0dyb3VuZHRydXRoX1JpZ2h0JTJGMyUyRjAmc2FtcGxlPTAmaW5kZXg9MiJ9LCB7IndhbGxfdGltZSI6IDE2MTA4MDM3NjkuNzQ5NDg1NywgInN0ZXAiOiA0MjA1LCAid2lkdGgiOiA2NTI4LCAiaGVpZ2h0IjogMTg1MSwgInF1ZXJ5IjogInJ1bj1ldmFsXzAmdGFnPURldGVjdGlvbnNfTGVmdF9Hcm91bmR0cnV0aF9SaWdodCUyRjMlMkYwJnNhbXBsZT0wJmluZGV4PTMifSwgeyJ3YWxsX3RpbWUiOiAxNjEwODA2MjI0LjU0NzYyMjcsICJzdGVwIjogNjk5MCwgIndpZHRoIjogNjUyOCwgImhlaWdodCI6IDE4NTEsICJxdWVyeSI6ICJydW49ZXZhbF8wJnRhZz1EZXRlY3Rpb25zX0xlZnRfR3JvdW5kdHJ1dGhfUmlnaHQlMkYzJTJGMCZzYW1wbGU9MCZpbmRleD00In0sIHsid2FsbF90aW1lIjogMTYxMDgwNjgyNS42NDExNTc2LCAic3RlcCI6IDc1ODksICJ3aWR0aCI6IDY1MjgsICJoZWlnaHQiOiAxODUxLCAicXVlcnkiOiAicnVuPWV2YWxfMCZ0YWc9RGV0ZWN0aW9uc19MZWZ0X0dyb3VuZHRydXRoX1JpZ2h0JTJGMyUyRjAmc2FtcGxlPTAmaW5kZXg9NSJ9LCB7IndhbGxfdGltZSI6IDE2MTA4MDc0MjguMjIzMjA3MiwgInN0ZXAiOiA4MTc4LCAid2lkdGgiOiA2NTI4LCAiaGVpZ2h0IjogMTg1MSwgInF1ZXJ5IjogInJ1bj1ldmFsXzAmdGFnPURldGVjdGlvbnNfTGVmdF9Hcm91bmR0cnV0aF9SaWdodCUyRjMlMkYwJnNhbXBsZT0wJmluZGV4PTYifSwgeyJ3YWxsX3RpbWUiOiAxNjEwODA4MDI5LjcwNTE3NDcsICJzdGVwIjogODc2MiwgIndpZHRoIjogNjUyOCwgImhlaWdodCI6IDE4NTEsICJxdWVyeSI6ICJydW49ZXZhbF8wJnRhZz1EZXRlY3Rpb25zX0xlZnRfR3JvdW5kdHJ1dGhfUmlnaHQlMkYzJTJGMCZzYW1wbGU9MCZpbmRleD03In0sIHsid2FsbF90aW1lIjogMTYxMDgwOTIyNS42MzI4MzkyLCAic3RlcCI6IDk5MzgsICJ3aWR0aCI6IDY1MjgsICJoZWlnaHQiOiAxODUxLCAicXVlcnkiOiAicnVuPWV2YWxfMCZ0YWc9RGV0ZWN0aW9uc19MZWZ0X0dyb3VuZHRydXRoX1JpZ2h0JTJGMyUyRjAmc2FtcGxlPTAmaW5kZXg9OCJ9LCB7IndhbGxfdGltZSI6IDE2MTA4MDk0ODAuNDEzNzQ5LCAic3RlcCI6IDEwMDAwLCAid2lkdGgiOiA2NTI4LCAiaGVpZ2h0IjogMTg1MSwgInF1ZXJ5IjogInJ1bj1ldmFsXzAmdGFnPURldGVjdGlvbnNfTGVmdF9Hcm91bmR0cnV0aF9SaWdodCUyRjMlMkYwJnNhbXBsZT0wJmluZGV4PTkifV0=",
- "ok": true,
- "headers": [
- [
- "content-type",
- "application/json"
- ]
- ],
- "status": 200,
- "status_text": ""
- },
- "http://localhost:6006/data/plugin/images/images?run=eval_0&sample=0&tag=Detections_Left_Groundtruth_Right%2F9%2F0": {
- "data": "W3sid2FsbF90aW1lIjogMTYxMDgwMTUzMy4yNTYyNjQsICJzdGVwIjogMTczMiwgIndpZHRoIjogNjUyOCwgImhlaWdodCI6IDE4MDEsICJxdWVyeSI6ICJydW49ZXZhbF8wJnRhZz1EZXRlY3Rpb25zX0xlZnRfR3JvdW5kdHJ1dGhfUmlnaHQlMkY5JTJGMCZzYW1wbGU9MCZpbmRleD0wIn0sIHsid2FsbF90aW1lIjogMTYxMDgwMjU3MC4wODk1NDc2LCAic3RlcCI6IDI3MDMsICJ3aWR0aCI6IDY1MjgsICJoZWlnaHQiOiAxODAxLCAicXVlcnkiOiAicnVuPWV2YWxfMCZ0YWc9RGV0ZWN0aW9uc19MZWZ0X0dyb3VuZHRydXRoX1JpZ2h0JTJGOSUyRjAmc2FtcGxlPTAmaW5kZXg9MSJ9LCB7IndhbGxfdGltZSI6IDE2MTA4MDMxNzIuMjU0NTc2LCAic3RlcCI6IDM0NTksICJ3aWR0aCI6IDY1MjgsICJoZWlnaHQiOiAxODAxLCAicXVlcnkiOiAicnVuPWV2YWxfMCZ0YWc9RGV0ZWN0aW9uc19MZWZ0X0dyb3VuZHRydXRoX1JpZ2h0JTJGOSUyRjAmc2FtcGxlPTAmaW5kZXg9MiJ9LCB7IndhbGxfdGltZSI6IDE2MTA4MDM3NjkuNzQ5NDg1NywgInN0ZXAiOiA0MjA1LCAid2lkdGgiOiA2NTI4LCAiaGVpZ2h0IjogMTgwMSwgInF1ZXJ5IjogInJ1bj1ldmFsXzAmdGFnPURldGVjdGlvbnNfTGVmdF9Hcm91bmR0cnV0aF9SaWdodCUyRjklMkYwJnNhbXBsZT0wJmluZGV4PTMifSwgeyJ3YWxsX3RpbWUiOiAxNjEwODA2MjI0LjU0NzYyMjcsICJzdGVwIjogNjk5MCwgIndpZHRoIjogNjUyOCwgImhlaWdodCI6IDE4MDEsICJxdWVyeSI6ICJydW49ZXZhbF8wJnRhZz1EZXRlY3Rpb25zX0xlZnRfR3JvdW5kdHJ1dGhfUmlnaHQlMkY5JTJGMCZzYW1wbGU9MCZpbmRleD00In0sIHsid2FsbF90aW1lIjogMTYxMDgwNjgyNS42NDExNTc2LCAic3RlcCI6IDc1ODksICJ3aWR0aCI6IDY1MjgsICJoZWlnaHQiOiAxODAxLCAicXVlcnkiOiAicnVuPWV2YWxfMCZ0YWc9RGV0ZWN0aW9uc19MZWZ0X0dyb3VuZHRydXRoX1JpZ2h0JTJGOSUyRjAmc2FtcGxlPTAmaW5kZXg9NSJ9LCB7IndhbGxfdGltZSI6IDE2MTA4MDc0MjguMjIzMjA3MiwgInN0ZXAiOiA4MTc4LCAid2lkdGgiOiA2NTI4LCAiaGVpZ2h0IjogMTgwMSwgInF1ZXJ5IjogInJ1bj1ldmFsXzAmdGFnPURldGVjdGlvbnNfTGVmdF9Hcm91bmR0cnV0aF9SaWdodCUyRjklMkYwJnNhbXBsZT0wJmluZGV4PTYifSwgeyJ3YWxsX3RpbWUiOiAxNjEwODA4MDI5LjcwNTE3NDcsICJzdGVwIjogODc2MiwgIndpZHRoIjogNjUyOCwgImhlaWdodCI6IDE4MDEsICJxdWVyeSI6ICJydW49ZXZhbF8wJnRhZz1EZXRlY3Rpb25zX0xlZnRfR3JvdW5kdHJ1dGhfUmlnaHQlMkY5JTJGMCZzYW1wbGU9MCZpbmRleD03In0sIHsid2FsbF90aW1lIjogMTYxMDgwOTIyNS42MzI4MzkyLCAic3RlcCI6IDk5MzgsICJ3aWR0aCI6IDY1MjgsICJoZWlnaHQiOiAxODAxLCAicXVlcnkiOiAicnVuPWV2YWxfMCZ0YWc9RGV0ZWN0aW9uc19MZWZ0X0dyb3VuZHRydXRoX1JpZ2h0JTJGOSUyRjAmc2FtcGxlPTAmaW5kZXg9OCJ9LCB7IndhbGxfdGltZSI6IDE2MTA4MDk0ODAuNDEzNzQ5LCAic3RlcCI6IDEwMDAwLCAid2lkdGgiOiA2NTI4LCAiaGVpZ2h0IjogMTgwMSwgInF1ZXJ5IjogInJ1bj1ldmFsXzAmdGFnPURldGVjdGlvbnNfTGVmdF9Hcm91bmR0cnV0aF9SaWdodCUyRjklMkYwJnNhbXBsZT0wJmluZGV4PTkifV0=",
- "ok": true,
- "headers": [
- [
- "content-type",
- "application/json"
- ]
- ],
- "status": 200,
- "status_text": ""
- },
- "http://localhost:6006/data/plugin/images/images?run=eval_0&sample=0&tag=Detections_Left_Groundtruth_Right%2F2%2F0": {
- "data": "W3sid2FsbF90aW1lIjogMTYxMDgwMTUzMy4yNTYyNjQsICJzdGVwIjogMTczMiwgIndpZHRoIjogNjUyOCwgImhlaWdodCI6IDI0NDgsICJxdWVyeSI6ICJydW49ZXZhbF8wJnRhZz1EZXRlY3Rpb25zX0xlZnRfR3JvdW5kdHJ1dGhfUmlnaHQlMkYyJTJGMCZzYW1wbGU9MCZpbmRleD0wIn0sIHsid2FsbF90aW1lIjogMTYxMDgwMjU3MC4wODk1NDc2LCAic3RlcCI6IDI3MDMsICJ3aWR0aCI6IDY1MjgsICJoZWlnaHQiOiAyNDQ4LCAicXVlcnkiOiAicnVuPWV2YWxfMCZ0YWc9RGV0ZWN0aW9uc19MZWZ0X0dyb3VuZHRydXRoX1JpZ2h0JTJGMiUyRjAmc2FtcGxlPTAmaW5kZXg9MSJ9LCB7IndhbGxfdGltZSI6IDE2MTA4MDMxNzIuMjU0NTc2LCAic3RlcCI6IDM0NTksICJ3aWR0aCI6IDY1MjgsICJoZWlnaHQiOiAyNDQ4LCAicXVlcnkiOiAicnVuPWV2YWxfMCZ0YWc9RGV0ZWN0aW9uc19MZWZ0X0dyb3VuZHRydXRoX1JpZ2h0JTJGMiUyRjAmc2FtcGxlPTAmaW5kZXg9MiJ9LCB7IndhbGxfdGltZSI6IDE2MTA4MDM3NjkuNzQ5NDg1NywgInN0ZXAiOiA0MjA1LCAid2lkdGgiOiA2NTI4LCAiaGVpZ2h0IjogMjQ0OCwgInF1ZXJ5IjogInJ1bj1ldmFsXzAmdGFnPURldGVjdGlvbnNfTGVmdF9Hcm91bmR0cnV0aF9SaWdodCUyRjIlMkYwJnNhbXBsZT0wJmluZGV4PTMifSwgeyJ3YWxsX3RpbWUiOiAxNjEwODA2MjI0LjU0NzYyMjcsICJzdGVwIjogNjk5MCwgIndpZHRoIjogNjUyOCwgImhlaWdodCI6IDI0NDgsICJxdWVyeSI6ICJydW49ZXZhbF8wJnRhZz1EZXRlY3Rpb25zX0xlZnRfR3JvdW5kdHJ1dGhfUmlnaHQlMkYyJTJGMCZzYW1wbGU9MCZpbmRleD00In0sIHsid2FsbF90aW1lIjogMTYxMDgwNjgyNS42NDExNTc2LCAic3RlcCI6IDc1ODksICJ3aWR0aCI6IDY1MjgsICJoZWlnaHQiOiAyNDQ4LCAicXVlcnkiOiAicnVuPWV2YWxfMCZ0YWc9RGV0ZWN0aW9uc19MZWZ0X0dyb3VuZHRydXRoX1JpZ2h0JTJGMiUyRjAmc2FtcGxlPTAmaW5kZXg9NSJ9LCB7IndhbGxfdGltZSI6IDE2MTA4MDc0MjguMjIzMjA3MiwgInN0ZXAiOiA4MTc4LCAid2lkdGgiOiA2NTI4LCAiaGVpZ2h0IjogMjQ0OCwgInF1ZXJ5IjogInJ1bj1ldmFsXzAmdGFnPURldGVjdGlvbnNfTGVmdF9Hcm91bmR0cnV0aF9SaWdodCUyRjIlMkYwJnNhbXBsZT0wJmluZGV4PTYifSwgeyJ3YWxsX3RpbWUiOiAxNjEwODA4MDI5LjcwNTE3NDcsICJzdGVwIjogODc2MiwgIndpZHRoIjogNjUyOCwgImhlaWdodCI6IDI0NDgsICJxdWVyeSI6ICJydW49ZXZhbF8wJnRhZz1EZXRlY3Rpb25zX0xlZnRfR3JvdW5kdHJ1dGhfUmlnaHQlMkYyJTJGMCZzYW1wbGU9MCZpbmRleD03In0sIHsid2FsbF90aW1lIjogMTYxMDgwOTIyNS42MzI4MzkyLCAic3RlcCI6IDk5MzgsICJ3aWR0aCI6IDY1MjgsICJoZWlnaHQiOiAyNDQ4LCAicXVlcnkiOiAicnVuPWV2YWxfMCZ0YWc9RGV0ZWN0aW9uc19MZWZ0X0dyb3VuZHRydXRoX1JpZ2h0JTJGMiUyRjAmc2FtcGxlPTAmaW5kZXg9OCJ9LCB7IndhbGxfdGltZSI6IDE2MTA4MDk0ODAuNDEzNzQ5LCAic3RlcCI6IDEwMDAwLCAid2lkdGgiOiA2NTI4LCAiaGVpZ2h0IjogMjQ0OCwgInF1ZXJ5IjogInJ1bj1ldmFsXzAmdGFnPURldGVjdGlvbnNfTGVmdF9Hcm91bmR0cnV0aF9SaWdodCUyRjIlMkYwJnNhbXBsZT0wJmluZGV4PTkifV0=",
- "ok": true,
- "headers": [
- [
- "content-type",
- "application/json"
- ]
- ],
- "status": 200,
- "status_text": ""
- },
- "http://localhost:6006/data/plugin/images/individualImage?ts=1610809480.413749&run=eval_0&tag=Detections_Left_Groundtruth_Right%2F4%2F0&sample=0&index=9": {
- "data": "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JEmSJEmSpCucE5BJkqQrzhs//eRO74IkbccPPfvcBEufnGzjJyZbXGdtO+WLV7jOtDBJkiRJkiRJkiRJkiTpyrTxi4MX10Y+kilD1x7LjCRJkiRJkiTpaucEZJIkSZIkJSQTxR6s46FszNc2f2JamCRJkiRJkiRJkiRJknTFunRZPRs/W3hJt6LLzzIjSZIkSZIkSbraOQGZJEm6or37pbdFxMLCFHxnanYvr+TR545BdHnYheji8gotu0TRdifnHfvfH/y7EH3HO34Boo8/9kWIZlli01OtNkS/780vg+iRoycgOuyv8aY73Q5Eec9HrnX5736VtyVJF0syhWsj02t9GrKN7498YlqYJEmSJEmSJEmSJEmStKus5w5t/K+UZJmRJEmSJEmSJF02rUE9+l88t1s0JUSv16PVtXBGszatOSLWhqchWg2GEB0OKTqF81xUVcU7lhX034V3OjQlymAwgGhe8JaD3xQUBU0dUg9pt5P/qXtV02npZCPXerA5dPLUKVj2UKxCtOxRNCJmZ+cgyleTy8mJYzSdSkTkOU2JwjO98AnvTlMp6vf7uHQM8QszUzSxzqCkZa+bn+FN90uOn7VyZmnj35snjzl65Lmx31/s0zmJiGePHIHo7N4FiN57510Qfea5wxD9se97Le5XREkn5Sv+16+BaG9IBbgMuuUjYoD15Gp/CaI//44vQPSmm25IbHrPnRA9GHROFl5477iPP77xr+WTJ7da9k9++//KOza3sB+iX3ziKYoeehyip89suVfrpmfoer3xtgWI3v+Sl0K03aIny4ljNNNWRAzW6FFezu2D6MJemudrcSkx7dQz+HQ4li1s+uvJkc9XBvQo7x+l4h0RvR7Vdd1pqutaa3Qpv/M7qRB+/guP8I79m5/+WQr36WLdcOPNEF1bW+RN/8lX3QTRvKZN33kL3VlFOzHF7XBIDZxHHnkMoh/62DmndHON/L77D35+ZXbjzz/92KMb//4Pd90dERGJJl9ZUy1aDakq6w+5kZxoBu/Zswei3IDhluxwQOEa6+eIWFule4d3LM+o+cPNqvXlIcj9jix7ftkfePLpxFaky6uZFjY7OzvynZtuuYVXcmaJOs55TnfHsKIbs91OtDY7HarN2ti/LUtqwJQl7dgQO6cR0cLOWKKuw155ss/eW1mNiO879GTiexfVP90z052mXl5E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",
- "ok": true,
- "headers": [
- [
- "content-type",
- "image/png"
- ]
- ],
- "status": 200,
- "status_text": ""
- },
- "http://localhost:6006/data/plugin/images/individualImage?ts=1610809480.413749&run=eval_0&tag=Detections_Left_Groundtruth_Right%2F0%2F0&sample=0&index=9": {
- "data": "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",
- "ok": true,
- "headers": [
- [
- "content-type",
- "image/png"
- ]
- ],
- "status": 200,
- "status_text": ""
- },
- "http://localhost:6006/data/plugin/images/individualImage?ts=1610809480.413749&run=eval_0&tag=Detections_Left_Groundtruth_Right%2F6%2F0&sample=0&index=9": {
- "data": "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",
- "ok": true,
- "headers": [
- [
- "content-type",
- "image/png"
- ]
- ],
- "status": 200,
- "status_text": ""
- },
- "http://localhost:6006/data/plugin/images/individualImage?ts=1610809480.413749&run=eval_0&tag=Detections_Left_Groundtruth_Right%2F7%2F0&sample=0&index=9": {
- "data": "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LmmfnutBQmW3Nqm3/drXvppP7J3v+QOIrm7S0/GuP30AorfctMRFvxCrSj+oY2r36FvvXTjARc8uzlPRT1K31emMv1md7TFVmmvohrY0sLuMiLm5GYjWa7Q7N3TVwicTm9kLF6g7TnB405imL/Xwww/zeb389psg2sdh25kLFyG6dMVRLjrBVrbV2oLo+uoaRB99lCYdEbHRpjZh7yE68153Yt/R6/azGHPFdjb2J1TvHf0BPZg1HCaUse9Ymil4OioVquGLi4u4N46segXfujeg7njfHmr/+cGsd6gWRVLw2E5PNSHabFKUB075lmzUgB69BL/1/oOHJgefHrqXJwzAMhwnX7ywCtH1DXowr7nqSoguzdCYLSIOBB28VKZZeb1K0WxQMNxME9q91qAmuoPHruDofSYKxqLJDLX/HZzRJ/jczeCRo6jBWV7HcVdK1XuAczGORgQOz6PXo6IrJWoTZmfokY+ItENjp0GXznxzcx33LVhWahacG10UXp/ZuzS6ojhiqkkXrdqgGl4a12PuyAb03F159VV4XrF2YRmitQZdsaREV+yp02e46Okpmndn4+rozsapKeqsl5Zo8J8U/R8oWhtUzdarVPSZM/StDxyAficioodLo0888QREjxw5AtHXvv71XPSTTz0F0TMnKcrDm+/6q38Noo8ffxyPHEeuOAzR62+8AaL3f+ITEMUxQsTOrGpSdPLEudPvQTQiBvzWIKJSph7z3DKuT5aOQTDr05cqvCYp9omFozZQOMZ44VX0+FTrdE1amzTQTaKgK0+xO+YF9qSgxcEF26KVzxTHorwoNcBVvtnZnVb01NDGpxvtixfOwe585gMcvV9o0SuewSG62hFRb9LMolGlaA+vd6VdMMbg1fu5ReqYGsfovcDmKRrbR0QnozHGo596HKJf9rJrIfrJT9JS28YKrXJExG03vQiid//Jx2jnZbrgSXIjF93BlbqIiMlr7FtbVAkv4tpORNRwKMt4GNDBge6gRzOaiFi++yMQveIgvdgq4bS8jW9mo6ixWqpRBU6wMbvjFa+C6AvxPWNErKzSkK9SpYd6Gev/5lZBi8EdbtobbaKHt7SxJmysbHDRUeImmipwGVcn8W1GDIo6td/93d+B6J233QHRW47th2i7jetdEYtTtMZSwzWrVVxMqxYNrX725/4HRP/5//G/Q5RHTv0+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",
- "ok": true,
- "headers": [
- [
- "content-type",
- "image/png"
- ]
- ],
- "status": 200,
- "status_text": ""
- },
- "http://localhost:6006/data/plugin/images/individualImage?ts=1610809480.413749&run=eval_0&tag=Detections_Left_Groundtruth_Right%2F5%2F0&sample=0&index=9": {
- "data": "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